ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDNmOGZiNjguLjI3ZmQzNzYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTYsNiArMTYsNyBAQAogIwogIyBUb3AtbGV2ZWwgZ2VuZXJpYyBmaWxlcwogIwordGFncwogdm1saW51eCoKIFN5c3RlbS5tYXAKIE1vZHVsZS5zeW12ZXJzCkBAIC0zMCwzICszMSw1IEBACiBpbmNsdWRlL2xpbnV4L2NvbXBpbGUuaAogaW5jbHVkZS9saW51eC92ZXJzaW9uLmgKIAorIyBzdGdpdCBnZW5lcmF0ZWQgZGlycworcGF0Y2hlcy0qCmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCA2OTU3ZWY0Li5jNmQ2OWJmIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTEyMCw3ICsxMjAsNiBAQAogRDogRml4ZWQgdGhlIHNobSBzd2FwIGRlYWxsb2NhdGlvbiBhdCBzd2Fwb2ZmIHRpbWUgKHRyeV90b191bnVzZSBtZXNzYWdlKQogRDogVk0gaGFja2VyCiBEOiBWYXJpb3VzIG90aGVyIGtlcm5lbCBoYWNrcwotUzogVmlhIENpY2FsaW5pIDI2CiBTOiBJbW9sYSA0MDAyNgogUzogSXRhbHkKIApAQCAtMjAwOCwxMyArMjAwNywxNCBAQAogUzogRWNvbGUgTmF0aW9uYWxlIFN1cGVyaWV1cmUgZGVzIFRlbGVjb21tdW5pY2F0aW9ucywgUGFyaXMKIAogTjogSmFtaWUgTG9raWVyCi1FOiBqYW1pZUBpbWJvbGMudWNjLmllCitFOiBqYW1pZUBzaGFyZWFibGUub3JnCitXOiBodHRwOi8vd3d3LnNoYXJlYWJsZS5vcmcvCiBEOiBSZWJvb3QtdGhyb3VnaC1CSU9TIGZvciBicm9rZW4gNDg2IG1vdGhlcmJvYXJkcwotRDogU29tZSBwYXJwb3J0IGZpeGVzCi1TOiAxMSBHb29kc29uIFdhbGsKLVM6IE1hcnN0b24KK0Q6IFBhcnBvcnQgZml4ZXMsIGZ1dGV4IGltcHJvdmVtZW50cworRDogRmlyc3QgaW5zdHJ1Y3Rpb24gb2YgeDg2IHN5c2VudGVyIHBhdGggOikKK1M6IDUxIFN1bm5pbmd3ZWxsIFJvYWQKIFM6IE94Zm9yZAotUzogT1gzIDBIWAorUzogT1gxIDRTWgogUzogVW5pdGVkIEtpbmdkb20KIAogTjogTWFyayBMb3JkCkBAIC0yODE0LDYgKzI4MTQsOCBAQAogUDogMTAyNEQvRkNFNjM1QTQgODhFOCBGMzJGIDcyNDQgNjhCQSAzOTU4ICA1RDQwIDk5REEgNUQyQSBGQ0U2IDM1QTQKIEQ6IFY0TCBkcml2ZXIgZm9yIFc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwcwogRDogVjRMMiBkcml2ZXIgZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzCitEOiBWNEwyIGRyaXZlciBmb3IgRVQ2MVgxNTEgYW5kIEVUNjFYMjUxIFBDIENhbWVyYSBDb250cm9sbGVycworRDogVjRMMiBkcml2ZXIgZm9yIFpDMDMwMSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcAogUzogVmlhIExpYmVydGEnIDQxL0EKIFM6IE9zaW8gU290dG8sIDI0MDQ2LCBCZXJnYW1vCiBTOiBJdGFseQpAQCAtMzY0MywxMSArMzY0NSw5IEBACiBTOiBFbmdsYW5kCiAKIE46IENocmlzIFdyaWdodAotRTogY2hyaXN3QG9zZGwub3JnCitFOiBjaHJpc3dAc291cy1zb2wub3JnCiBEOiBoYWNraW5nIG9uIExTTSBmcmFtZXdvcmsgYW5kIHNlY3VyaXR5IG1vZHVsZXMuCi1TOiBjL28gT1NETAotUzogMTI3MjUgU1cgTWlsbGlrYW4gV2F5LCBTdWl0ZSA0MDAKLVM6IEJlYXZlcnRvbiwgT1IgOTcwMDUKK1M6IFBvcnRsYW5kLCBPUgogUzogVVNBCiAKIE46IE1pY2hhbCBXcm9uc2tpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0JVRy1IVU5USU5HIGIvRG9jdW1lbnRhdGlvbi9CVUctSFVOVElORwppbmRleCBjYTI5MjQyLi42NWI5N2UxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0JVRy1IVU5USU5HCisrKyBiL0RvY3VtZW50YXRpb24vQlVHLUhVTlRJTkcKQEAgLTEsMyArMSw1NiBAQAorVGFibGUgb2YgY29udGVudHMKKz09PT09PT09PT09PT09PT09CisKK0xhc3QgdXBkYXRlZDogMjAgRGVjZW1iZXIgMjAwNQorCitDb250ZW50cworPT09PT09PT0KKworLSBJbnRyb2R1Y3Rpb24KKy0gRGV2aWNlcyBub3QgYXBwZWFyaW5nCistIEZpbmRpbmcgcGF0Y2ggdGhhdCBjYXVzZWQgYSBidWcKKy0tIEZpbmRpbmcgdXNpbmcgZ2l0LWJpc2VjdAorLS0gRmluZGluZyBpdCB0aGUgb2xkIHdheQorLSBGaXhpbmcgdGhlIGJ1ZworCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCitBbHdheXMgdHJ5IHRoZSBsYXRlc3Qga2VybmVsIGZyb20ga2VybmVsLm9yZyBhbmQgYnVpbGQgZnJvbSBzb3VyY2UuIElmIHlvdSBhcmUKK25vdCBjb25maWRlbnQgaW4gZG9pbmcgdGhhdCBwbGVhc2UgcmVwb3J0IHRoZSBidWcgdG8geW91ciBkaXN0cmlidXRpb24gdmVuZG9yCitpbnN0ZWFkIG9mIHRvIGEga2VybmVsIGRldmVsb3Blci4KKworRmluZGluZyBidWdzIGlzIG5vdCBhbHdheXMgZWFzeS4gSGF2ZSBhIGdvIHRob3VnaC4gSWYgeW91IGNhbid0IGZpbmQgaXQgZG9uJ3QKK2dpdmUgdXAuIFJlcG9ydCBhcyBtdWNoIGFzIHlvdSBoYXZlIGZvdW5kIHRvIHRoZSByZWxldmFudCBtYWludGFpbmVyLiBTZWUKK01BSU5UQUlORVJTIGZvciB3aG8gdGhhdCBpcyBmb3IgdGhlIHN1YnN5c3RlbSB5b3UgaGF2ZSB3b3JrZWQgb24uCisKK0JlZm9yZSB5b3Ugc3VibWl0IGEgYnVnIHJlcG9ydCByZWFkIFJFUE9SVElORy1CVUdTLgorCitEZXZpY2VzIG5vdCBhcHBlYXJpbmcKKz09PT09PT09PT09PT09PT09PT09PQorCitPZnRlbiB0aGlzIGlzIGNhdXNlZCBieSB1ZGV2LiBDaGVjayB0aGF0IGZpcnN0IGJlZm9yZSBibGFtaW5nIGl0IG9uIHRoZQora2VybmVsLgorCitGaW5kaW5nIHBhdGNoIHRoYXQgY2F1c2VkIGEgYnVnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCitGaW5kaW5nIHVzaW5nIGdpdC1iaXNlY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2luZyB0aGUgcHJvdmlkZWQgdG9vbHMgd2l0aCBnaXQgbWFrZXMgZmluZGluZyBidWdzIGVhc3kgcHJvdmlkZWQgdGhlIGJ1ZyBpcworcmVwcm9kdWNpYmxlLgorCitTdGVwcyB0byBkbyBpdDoKKy0gc3RhcnQgdXNpbmcgZ2l0IGZvciB0aGUga2VybmVsIHNvdXJjZQorLSByZWFkIHRoZSBtYW4gcGFnZSBmb3IgZ2l0LWJpc2VjdAorLSBoYXZlIGZ1bgorCitGaW5kaW5nIGl0IHRoZSBvbGQgd2F5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFtTYXQgTWFyICAyIDEwOjMyOjMzIFBTVCAxOTk2IEtFUk5FTF9CVUctSE9XVE8gbG1Ac2dpLmNvbSAoTGFycnkgTWNWb3kpXQogCiBUaGlzIGlzIGhvdyB0byB0cmFjayBkb3duIGEgYnVnIGlmIHlvdSBrbm93IG5vdGhpbmcgYWJvdXQga2VybmVsIGhhY2tpbmcuICAKQEAgLTkwLDMgKzE0Myw2MyBAQAogYmVjYXVzZSBMaW51eCBzbmFwc2hvdHMgd2lsbCBsZXQgeW91IGRvIHRoaXMgLSBzb21ldGhpbmcgdGhhdCB5b3UgY2FuJ3QKIGRvIHdpdGggdmVuZG9yIHN1cHBsaWVkIHJlbGVhc2VzLgogCitGaXhpbmcgdGhlIGJ1ZworPT09PT09PT09PT09PT0KKworTm9ib2R5IGlzIGdvaW5nIHRvIHRlbGwgeW91IGhvdyB0byBmaXggYnVncy4gU2VyaW91c2x5LiBZb3UgbmVlZCB0byB3b3JrIGl0CitvdXQuIEJ1dCBiZWxvdyBhcmUgc29tZSBoaW50cyBvbiBob3cgdG8gdXNlIHRoZSB0b29scy4KKworVG8gZGVidWcgYSBrZXJuZWwsIHVzZSBvYmpkdW1wIGFuZCBsb29rIGZvciB0aGUgaGV4IG9mZnNldCBmcm9tIHRoZSBjcmFzaAorb3V0cHV0IHRvIGZpbmQgdGhlIHZhbGlkIGxpbmUgb2YgY29kZS9hc3NlbWJsZXIuIFdpdGhvdXQgZGVidWcgc3ltYm9scywgeW91Cit3aWxsIHNlZSB0aGUgYXNzZW1ibGVyIGNvZGUgZm9yIHRoZSByb3V0aW5lIHNob3duLCBidXQgaWYgeW91ciBrZXJuZWwgaGFzCitkZWJ1ZyBzeW1ib2xzIHRoZSBDIGNvZGUgd2lsbCBhbHNvIGJlIGF2YWlsYWJsZS4gKERlYnVnIHN5bWJvbHMgY2FuIGJlIGVuYWJsZWQKK2luIHRoZSBrZXJuZWwgaGFja2luZyBtZW51IG9mIHRoZSBtZW51IGNvbmZpZ3VyYXRpb24uKSBGb3IgZXhhbXBsZToKKworICAgIG9iamR1bXAgLXIgLVMgLWwgLS1kaXNhc3NlbWJsZSBuZXQvZGNjcC9pcHY0Lm8KKworTkIuOiB5b3UgbmVlZCB0byBiZSBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBrZXJuZWwgdHJlZSBmb3IgdGhpcyB0byBwaWNrIHVwCit5b3VyIEMgZmlsZXMuCisKK0lmIHlvdSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgY29kZSB5b3UgY2FuIGFsc28gZGVidWcgb24gc29tZSBjcmFzaCBkdW1wcworZS5nLiBjcmFzaCBkdW1wIG91dHB1dCBhcyBzaG93biBieSBEYXZlIE1pbGxlci4KKworPiAgICBFSVAgaXMgYXQgaXBfcXVldWVfeG1pdCsweDE0LzB4NGMwCis+ICAgICAuLi4KKz4gICAgQ29kZTogNDQgMjQgMDQgZTggNmYgMDUgMDAgMDAgZTkgZTggZmUgZmYgZmYgOGQgNzYgMDAgOGQgYmMgMjcgMDAgMDAKKz4gICAgMDAgMDAgNTUgNTcgIDU2IDUzIDgxIGVjIGJjIDAwIDAwIDAwIDhiIGFjIDI0IGQwIDAwIDAwIDAwIDhiIDVkIDA4Cis+ICAgIDw4Yj4gODMgM2MgMDEgMDAgMDAgODkgNDQgIDI0IDE0IDhiIDQ1IDI4IDg1IGMwIDg5IDQ0IDI0IDE4IDBmIDg1Cis+Cis+ICAgIFB1dCB0aGUgYnl0ZXMgaW50byBhICJmb28ucyIgZmlsZSBsaWtlIHRoaXM6Cis+Cis+ICAgICAgICAgICAudGV4dAorPiAgICAgICAgICAgLmdsb2JsIGZvbworPiAgICBmb286Cis+ICAgICAgICAgICAuYnl0ZSAgLi4uLiAvKiBieXRlcyBmcm9tIENvZGU6IHBhcnQgb2YgT09QUyBkdW1wICovCis+Cis+ICAgIENvbXBpbGUgaXQgd2l0aCAiZ2NjIC1jIC1vIGZvby5vIGZvby5zIiB0aGVuIGxvb2sgYXQgdGhlIG91dHB1dCBvZgorPiAgICAib2JqZHVtcCAtLWRpc2Fzc2VtYmxlIGZvby5vIi4KKz4KKz4gICAgT3V0cHV0OgorPgorPiAgICBpcF9xdWV1ZV94bWl0OgorPiAgICAgICAgcHVzaCAgICAgICAlZWJwCis+ICAgICAgICBwdXNoICAgICAgICVlZGkKKz4gICAgICAgIHB1c2ggICAgICAgJWVzaQorPiAgICAgICAgcHVzaCAgICAgICAlZWJ4Cis+ICAgICAgICBzdWIgICAgICAgICQweGJjLCAlZXNwCis+ICAgICAgICBtb3YgICAgICAgIDB4ZDAoJWVzcCksICVlYnAgICAgICAgICEgJWVicCA9IGFyZzAgKHNrYikKKz4gICAgICAgIG1vdiAgICAgICAgMHg4KCVlYnApLCAlZWJ4ICAgICAgICAgISAlZWJ4ID0gc2tiLT5zaworPiAgICAgICAgbW92ICAgICAgICAweDEzYyglZWJ4KSwgJWVheCAgICAgICAhICVlYXggPSBpbmV0X3NrKHNrKS0+b3B0CisKK0Fub3RoZXIgdmVyeSB1c2VmdWwgb3B0aW9uIG9mIHRoZSBLZXJuZWwgSGFja2luZyBzZWN0aW9uIGluIG1lbnVjb25maWcgaXMKK0RlYnVnIG1lbW9yeSBhbGxvY2F0aW9ucy4gVGhpcyB3aWxsIGhlbHAgeW91IHNlZSB3aGV0aGVyIGRhdGEgaGFzIGJlZW4KK2luaXRpYWxpc2VkIGFuZCBub3Qgc2V0IGJlZm9yZSB1c2UgZXRjLiBUbyBzZWUgdGhlIHZhbHVlcyB0aGF0IGdldCBhc3NpZ25lZAord2l0aCB0aGlzIGxvb2sgYXQgbW0vc2xhYi5jIGFuZCBzZWFyY2ggZm9yIFBPSVNPTl9JTlVTRS4gV2hlbiB1c2luZyB0aGlzIGFuCitPb3BzIHdpbGwgb2Z0ZW4gc2hvdyB0aGUgcG9pc29uZWQgZGF0YSBpbnN0ZWFkIG9mIHplcm8gd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisKK09uY2UgeW91IGhhdmUgd29ya2VkIG91dCBhIGZpeCBwbGVhc2Ugc3VibWl0IGl0IHVwc3RyZWFtLiBBZnRlciBhbGwgb3Blbgorc291cmNlIGlzIGFib3V0IHNoYXJpbmcgd2hhdCB5b3UgZG8gYW5kIGRvbid0IHlvdSB3YW50IHRvIGJlIHJlY29nbmlzZWQgZm9yCit5b3VyIGdlbml1cz8KKworUGxlYXNlIGRvIHJlYWQgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyB0aG91Z2ggdG8gaGVscCB5b3VyIGNvZGUgZ2V0CithY2NlcHRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ2hhbmdlcyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwppbmRleCBmZTVhZTBmLi5iMDJmNDc2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCkBAIC0xNSwyNCArMTUsNiBAQAogQXhlbCBCb2xkdCwgQWxlc3NhbmRybyBTaWdhbGEsIGFuZCBjb3VudGxlc3Mgb3RoZXIgdXNlcnMgYWxsIG92ZXIgdGhlCiAnbmV0KS4KIAotVGhlIGxhdGVzdCByZXZpc2lvbiBvZiB0aGlzIGRvY3VtZW50LCBpbiB2YXJpb3VzIGZvcm1hdHMsIGNhbiBhbHdheXMKLWJlIGZvdW5kIGF0IDxodHRwOi8vY3liZXJidXp6LmdhdGVjaC5lZHUva2Fib29tL2xpbnV4L0NoYW5nZXMtMi40Lz4uCi0KLUZlZWwgZnJlZSB0byB0cmFuc2xhdGUgdGhpcyBkb2N1bWVudC4gIElmIHlvdSBkbyBzbywgcGxlYXNlIHNlbmQgbWUgYQotVVJMIHRvIHlvdXIgdHJhbnNsYXRpb24gZm9yIGluY2x1c2lvbiBpbiBmdXR1cmUgcmV2aXNpb25zIG9mIHRoaXMKLWRvY3VtZW50LgotCi1TbW90cml0ZSBmaWxlIDxodHRwOi8vb2Jsb20ucm5jLnJ1L2xpbnV4L2tlcm5lbC9DaGFuZ2VzLnJ1PiwgeWF2bHlhdXNoaXN5YQotcnVzc2tpbSBwZXJldm9kb20gZGFubm9nbyBkb2N1bWVudGEuCi0KLVZpc2l0ZSA8aHR0cDovL3d3dzIuYWRpLnVhbS5lcy9+ZW5kZXIvdGVjbmljby8+IHBhcmEgb2J0ZW5lciBsYSB0cmFkdWNjafNuCi1hbCBlc3Bh8W9sIGRlIGVzdGUgZG9jdW1lbnRvIGVuIHZhcmlvcyBmb3JtYXRvcy4KLQotRWluZSBkZXV0c2NoZSBWZXJzaW9uIGRpZXNlciBEYXRlaSBmaW5kZW4gU2llIHVudGVyCi08aHR0cDovL3d3dy5zdGVmYW4td2ludGVyLmRlL0NoYW5nZXMtMi40LjAudHh0Pi4KLQotQ2hyaXMgUmlja2VyIChrYWJvb21AZ2F0ZWNoLmVkdSBvciBjaHJpcy5yaWNrZXJAZ2VuZXRpY3MudXRhaC5lZHUpLgotCiBDdXJyZW50IE1pbmltYWwgUmVxdWlyZW1lbnRzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCAyYzZmNjZkLi43ZDg3ZGQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC05LDcgKzksNyBAQAogRE9DQk9PS1MgOj0gd2FuYm9vay54bWwgejg1MzBib29rLnhtbCBtY2Fib29rLnhtbCB2aWRlb2Jvb2sueG1sIFwKIAkgICAga2VybmVsLWhhY2tpbmcueG1sIGtlcm5lbC1sb2NraW5nLnhtbCBkZXZpY2Vpb2Jvb2sueG1sIFwKIAkgICAgcHJvY2ZzLWd1aWRlLnhtbCB3cml0aW5nX3VzYl9kcml2ZXIueG1sIFwKLQkgICAgc2lzOTAwLnhtbCBrZXJuZWwtYXBpLnhtbCBqb3VybmFsLWFwaS54bWwgbHNtLnhtbCB1c2IueG1sIFwKKwkgICAga2VybmVsLWFwaS54bWwgam91cm5hbC1hcGkueG1sIGxzbS54bWwgdXNiLnhtbCBcCiAJICAgIGdhZGdldC54bWwgbGliYXRhLnhtbCBtdGRuYW5kLnhtbCBsaWJycy54bWwgcmFwaWRpby54bWwKIAogIyMjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwKaW5kZXggNmY0MWYyZi4uOTBlZDIzZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZWlvYm9vay50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2Vpb2Jvb2sudG1wbApAQCAtMjcwLDI1ICsyNzAsNiBAQAogICAgICAgPC9wYXJhPgogICAgIDwvc2VjdDE+CiAKLSAgICA8c2VjdDE+Ci0gICAgICA8dGl0bGU+SVNBIGxlZ2FjeSBmdW5jdGlvbnM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0JT24gb2xkZXIga2VybmVscyAoMi4yIGFuZCBlYXJsaWVyKSB0aGUgSVNBIGJ1cyBjb3VsZCBiZSByZWFkIG9yCi0Jd3JpdHRlbiB3aXRoIHRoZXNlIGZ1bmN0aW9ucyBhbmQgd2l0aG91dCBpb3JlbWFwIGJlaW5nIHVzZWQuIFRoaXMgaXMKLQlubyBsb25nZXIgdHJ1ZSBpbiBMaW51eCAyLjQuIEEgc2V0IG9mIGVxdWl2YWxlbnQgZnVuY3Rpb25zIGV4aXN0IGZvcgotCWVhc3kgbGVnYWN5IGRyaXZlciBwb3J0aW5nLiBUaGUgZnVuY3Rpb25zIGF2YWlsYWJsZSBhcmUgcHJlZml4ZWQKLQl3aXRoICdpc2FfJyBhbmQgYXJlIDxmdW5jdGlvbj5pc2FfcmVhZGI8L2Z1bmN0aW9uPiwKLQk8ZnVuY3Rpb24+aXNhX3dyaXRlYjwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+aXNhX3JlYWR3PC9mdW5jdGlvbj4sIAotCTxmdW5jdGlvbj5pc2Ffd3JpdGV3PC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5pc2FfcmVhZGw8L2Z1bmN0aW9uPiwKLQk8ZnVuY3Rpb24+aXNhX3dyaXRlbDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+aXNhX21lbWNweV9mcm9taW88L2Z1bmN0aW9uPgotCWFuZCA8ZnVuY3Rpb24+aXNhX21lbWNweV90b2lvPC9mdW5jdGlvbj4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotCVRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIHVzZWQgaW4gbmV3IGRyaXZlcnMsIGFuZCB3aWxsCi0JZXZlbnR1YWxseSBiZSBnb2luZyBhd2F5LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdDE+Ci0KICAgPC9jaGFwdGVyPgogCiAgIDxjaGFwdGVyPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3NpczkwMC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3NpczkwMC50bXBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzJjYmFjLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9zaXM5MDAudG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDU4NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCi0JImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KLQotPGJvb2sgaWQ9IlNpUzkwMEd1aWRlIj4KLQotPGJvb2tpbmZvPgotCi08dGl0bGU+U2lTIDkwMC83MDE2IEZhc3QgRXRoZXJuZXQgRGV2aWNlIERyaXZlcjwvdGl0bGU+Ci0KLTxhdXRob3Jncm91cD4KLTxhdXRob3I+Ci08Zmlyc3RuYW1lPk9sbGllPC9maXJzdG5hbWU+Ci08c3VybmFtZT5MaG88L3N1cm5hbWU+Ci08L2F1dGhvcj4KLQotPGF1dGhvcj4KLTxmaXJzdG5hbWU+TGVpIENodW48L2ZpcnN0bmFtZT4KLTxzdXJuYW1lPkNoYW5nPC9zdXJuYW1lPgotPC9hdXRob3I+Ci08L2F1dGhvcmdyb3VwPgotCi08ZWRpdGlvbj5Eb2N1bWVudCBSZXZpc2lvbjogMC4zIGZvciBTaVM5MDAgZHJpdmVyIHYxLjA2ICZhbXA7IHYxLjA3PC9lZGl0aW9uPgotPHB1YmRhdGU+Tm92ZW1iZXIgMTYsIDIwMDA8L3B1YmRhdGU+Ci0KLTxjb3B5cmlnaHQ+Ci0gPHllYXI+MTk5OTwveWVhcj4KLSA8aG9sZGVyPlNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycC48L2hvbGRlcj4KLTwvY29weXJpZ2h0PgotCi08bGVnYWxub3RpY2U+Ci0gPHBhcmE+Ci0JVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0JKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSA8L3BhcmE+Ci0KLSA8cGFyYT4KLQlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLQlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLQlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIDwvcGFyYT4KLQotIDxwYXJhPgotCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0JYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLQlGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gPC9wYXJhPgotPC9sZWdhbG5vdGljZT4KLQotPGFic3RyYWN0PgotPHBhcmE+Ci1UaGlzIGRvY3VtZW50IGdpdmVzIHNvbWUgaW5mb3JtYXRpb24gb24gaW5zdGFsbGF0aW9uIGFuZCB1c2FnZSBvZiBTaVMgOTAwLzcwMTYKLWRldmljZSBkcml2ZXIgdW5kZXIgTGludXguCi08L3BhcmE+Ci08L2Fic3RyYWN0PgotCi08L2Jvb2tpbmZvPgotCi08dG9jPjwvdG9jPgotCi08Y2hhcHRlciBpZD0iaW50cm8iPgotIDx0aXRsZT5JbnRyb2R1Y3Rpb248L3RpdGxlPgotCi08cGFyYT4KLVRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSByZXZpc2lvbiAxLjA2IGFuZCAxLjA3IG9mIFNpUyA5MDAvNzAxNiBGYXN0IEV0aGVybmV0IAotZGV2aWNlIGRyaXZlciB1bmRlciBMaW51eC4gVGhlIGRyaXZlciBpcyBkZXZlbG9wZWQgYnkgU2lsaWNvbiBJbnRlZ3JhdGVkCi1TeXN0ZW0gQ29ycC4gYW5kIGRpc3RyaWJ1dGVkIGZyZWVseSB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkuCi1UaGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBhcyBhIGxvYWRhYmxlIG1vZHVsZSBhbmQgdXNlZCB1bmRlciBMaW51eCBrZXJuZWwgCi12ZXJzaW9uIDIuMi54LiAocmV2LiAxLjA2KQotV2l0aCBtaW5pbWFsIGNoYW5nZXMsIHRoZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB1bmRlciAyLjMueCBhbmQgMi40Lngga2VybmVsIAotKHJldi4gMS4wNyksIHBsZWFzZSBzZWUgCi08eHJlZiBsaW5rZW5kPSJpbnN0YWxsIi8+LiBJZiB5b3UgYXJlIGludGVuZGVkIHRvCi11c2UgdGhlIGRyaXZlciBmb3IgZWFybGllciBrZXJuZWxzLCB5b3UgYXJlIG9uIHlvdXIgb3duLgotPC9wYXJhPgotCi08cGFyYT4KLVRoZSBkcml2ZXIgaXMgdGVzdGVkIHdpdGggdXN1YWwgVENQL0lQIGFwcGxpY2F0aW9ucyBpbmNsdWRpbmcKLUZUUCwgVGVsbmV0LCBOZXRzY2FwZSBldGMuIGFuZCBpcyB1c2VkIGNvbnN0YW50bHkgYnkgdGhlIGRldmVsb3BlcnMuCi08L3BhcmE+Ci0KLTxwYXJhPgotUGxlYXNlIHNlbmQgYWxsIGNvbW1lbnRzL2ZpeGVzL3F1ZXN0aW9ucyB0bwotPHVsaW5rIHVybD0ibWFpbHRvOmxjY2hhbmdAc2lzLmNvbS50dyI+TGVpLUNodW4gQ2hhbmc8L3VsaW5rPi4KLTwvcGFyYT4KLTwvY2hhcHRlcj4KLQotPGNoYXB0ZXIgaWQ9ImNoYW5nZXMiPgotIDx0aXRsZT5DaGFuZ2VzPC90aXRsZT4KLQotPHBhcmE+Ci1DaGFuZ2VzIG1hZGUgaW4gUmV2aXNpb24gMS4wNwotCi08b3JkZXJlZGxpc3Q+Ci08bGlzdGl0ZW0+Ci08cGFyYT4KLVNlcGFyYXRpb24gb2Ygc2lzOTAwLmMgYW5kIHNpczkwMC5oIGluIG9yZGVyIHRvIG1vdmUgbW9zdCAKLWNvbnN0YW50IGRlZmluaXRpb24gdG8gc2lzOTAwLmggKG1hbnkgb2YgdGhvc2UgY29uc3RhbnRzIHdlcmUKLWNvcnJlY3RlZCkKLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLTxsaXN0aXRlbT4KLTxwYXJhPgotQ2xlYW4gdXAgUENJIGRldGVjdGlvbiwgdGhlIHBjaS1zY2FuIGZyb20gRG9uYWxkIEJlY2tlciB3ZXJlIG5vdCB1c2VkLAotanVzdCBzaW1wbGUgcGNpJmxvd2JhcjtmaW5kJmxvd2JhcjsqLgotPC9wYXJhPgotPC9saXN0aXRlbT4KLQotPGxpc3RpdGVtPgotPHBhcmE+Ci1NSUkgZGV0ZWN0aW9uIGlzIG1vZGlmaWVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbWlpIHRyYW5zY2VpdmVyLgotPC9wYXJhPgotPC9saXN0aXRlbT4KLQotPGxpc3RpdGVtPgotPHBhcmE+Ci1CdWdzIGluIHJlYWQmbG93YmFyO2VlcHJvbSwgbWRpbyZsb3diYXI7KiB3ZXJlIHJlbW92ZWQuCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08bGlzdGl0ZW0+Ci08cGFyYT4KLUxvdCBvZiBzaXM5MDAgaXJyZWxldmFudCBjb21tZW50cyB3ZXJlIHJlbW92ZWQvY2hhbmdlZCBhbmQKLW1vcmUgY29tbWVudHMgd2VyZSBhZGRlZCB0byByZWZsZWN0IHRoZSByZWFsIHNpdHVhdGlvbi4KLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLTxsaXN0aXRlbT4KLTxwYXJhPgotQ2xlYW4gdXAgb2YgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1lc3MgaW4gYnVmZmVyIAotZGVzY3JpcHRvcnMuCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08bGlzdGl0ZW0+Ci08cGFyYT4KLUJldHRlciB0cmFuc21pdC9yZWNlaXZlIGVycm9yIGhhbmRsaW5nLgotPC9wYXJhPgotPC9saXN0aXRlbT4KLQotPGxpc3RpdGVtPgotPHBhcmE+Ci1UaGUgZHJpdmVyIG5vdyB1c2VzIHplcm8tY29weSBzaW5nbGUgYnVmZmVyIG1hbmFnZW1lbnQKLXNjaGVtZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgotPC9wYXJhPgotPC9saXN0aXRlbT4KLQotPGxpc3RpdGVtPgotPHBhcmE+Ci1OYW1lcyBvZiB2YXJpYWJsZXMgd2VyZSBjaGFuZ2VkIHRvIGJlIG1vcmUgY29uc2lzdGVudC4KLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLTxsaXN0aXRlbT4KLTxwYXJhPgotQ2xlYW4gdXAgb2YgYXVvLW5lZ290aWF0aW9uIGFuZCB0aW1lciBjb2RlLgotPC9wYXJhPgotPC9saXN0aXRlbT4KLQotPGxpc3RpdGVtPgotPHBhcmE+Ci1BdXRvbWF0aWMgZGV0ZWN0aW9uIGFuZCBjaGFuZ2Ugb2YgUEhZIG9uIHRoZSBmbHkuCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08bGlzdGl0ZW0+Ci08cGFyYT4KLUJ1ZyBpbiBtYWMgcHJvYmluZyBmaXhlZC4KLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLTxsaXN0aXRlbT4KLTxwYXJhPgotRml4IDYzMEUgZXF1YWxpZXIgcHJvYmxlbSBieSBtb2RpZnlpbmcgdGhlIGVxdWFsaXplciB3b3JrYXJvdW5kIHJ1bGUuCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08bGlzdGl0ZW0+Ci08cGFyYT4KLVN1cHBvcnQgZm9yIElDUzE4OTMgMTAvMTAwIEludGVyYXRlZCBQSFljZWl2ZXIuCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08bGlzdGl0ZW0+Ci08cGFyYT4KLVN1cHBvcnQgZm9yIG1lZGlhIHNlbGVjdCBieSBpZmNvbmZpZy4KLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLTxsaXN0aXRlbT4KLTxwYXJhPgotQWRkZWQga2VybmVsLWRvYyBleHRyYXRhYmxlIGRvY3VtZW50YXRpb24uCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08L29yZGVyZWRsaXN0PgotPC9wYXJhPgotPC9jaGFwdGVyPgotCi08Y2hhcHRlciBpZD0idGVzdGVkIj4KLSA8dGl0bGU+VGVzdGVkIEVudmlyb25tZW50PC90aXRsZT4KLQotPHBhcmE+Ci1UaGlzIGRyaXZlciBpcyBkZXZlbG9wZWQgb24gdGhlIGZvbGxvd2luZyBoYXJkd2FyZQotCi08aXRlbWl6ZWRsaXN0PgotPGxpc3RpdGVtPgotCi08cGFyYT4KLUludGVsIENlbGVyb24gNTAwIHdpdGggU2lTIDYzMCAocmV2IDAyKSBjaGlwc2V0Ci08L3BhcmE+Ci08L2xpc3RpdGVtPgotPGxpc3RpdGVtPgotCi08cGFyYT4KLVNpUyA5MDAgKHJldiAwMSkgYW5kIFNpUyA3MDE2LzcwMTQgRmFzdCBFdGhlcm5ldCBDYXJkCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotYW5kIHRlc3RlZCB3aXRoIHRoZXNlIHNvZnR3YXJlIGVudmlyb25tZW50cwotCi08aXRlbWl6ZWRsaXN0PgotPGxpc3RpdGVtPgotCi08cGFyYT4KLVJlZCBIYXQgTGludXggdmVyc2lvbiA2LjIKLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+Ci0KLTxwYXJhPgotTGludXgga2VybmVsIHZlcnNpb24gMi40LjAKLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+Ci0KLTxwYXJhPgotTmV0c2NhcGUgdmVyc2lvbiA0LjYKLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci08bGlzdGl0ZW0+Ci0KLTxwYXJhPgotTmNGVFAgMy4wLjAgYmV0YSAxOAotPC9wYXJhPgotPC9saXN0aXRlbT4KLTxsaXN0aXRlbT4KLQotPHBhcmE+Ci1TYW1iYSB2ZXJzaW9uIDIuMC4zCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08L2l0ZW1pemVkbGlzdD4KLQotPC9wYXJhPgotCi08L2NoYXB0ZXI+Ci0KLTxjaGFwdGVyIGlkPSJmaWxlcyI+Ci08dGl0bGU+RmlsZXMgaW4gVGhpcyBQYWNrYWdlPC90aXRsZT4KLQotPHBhcmE+Ci1JbiB0aGUgcGFja2FnZSB5b3UgY2FuIGZpbmQgdGhlc2UgZmlsZXM6Ci08L3BhcmE+Ci0KLTxwYXJhPgotPHZhcmlhYmxlbGlzdD4KLQotPHZhcmxpc3RlbnRyeT4KLTx0ZXJtPnNpczkwMC5jPC90ZXJtPgotPGxpc3RpdGVtPgotPHBhcmE+Ci1Ecml2ZXIgc291cmNlIGZpbGUgaW4gQyAKLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci08L3Zhcmxpc3RlbnRyeT4KLQotPHZhcmxpc3RlbnRyeT4KLTx0ZXJtPnNpczkwMC5oPC90ZXJtPgotPGxpc3RpdGVtPgotPHBhcmE+Ci1IZWFkZXIgZmlsZSBmb3Igc2lzOTAwLmMKLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci08L3Zhcmxpc3RlbnRyeT4KLQotPHZhcmxpc3RlbnRyeT4KLTx0ZXJtPnNpczkwMC5zZ21sPC90ZXJtPgotPGxpc3RpdGVtPgotPHBhcmE+Ci1Eb2NCb29rIFNHTUwgc291cmNlIG9mIHRoZSBkb2N1bWVudAotPC9wYXJhPgotPC9saXN0aXRlbT4KLTwvdmFybGlzdGVudHJ5PgotCi08dmFybGlzdGVudHJ5PgotPHRlcm0+c2lzOTAwLnR4dDwvdGVybT4KLTxsaXN0aXRlbT4KLTxwYXJhPgotRHJpdmVyIGRvY3VtZW50IGluIHBsYWluIHRleHQKLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci08L3Zhcmxpc3RlbnRyeT4KLQotPC92YXJpYWJsZWxpc3Q+Ci08L3BhcmE+Ci08L2NoYXB0ZXI+Ci0KLTxjaGFwdGVyIGlkPSJpbnN0YWxsIj4KLSA8dGl0bGU+SW5zdGFsbGF0aW9uPC90aXRsZT4KLQotPHBhcmE+Ci1TaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnAuIGlzIGNvb3BlcmF0aW5nIGNsb3NlbHkgd2l0aCBjb3JlIExpbnV4IEtlcm5lbAotZGV2ZWxvcGVycy4gVGhlIHJldmlzaW9ucyBvZiBTaVMgOTAwIGRyaXZlciBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhlIHVzdWFsbCBjaGFubmVscwotZm9yIGtlcm5lbCB0YXIgZmlsZXMgYW5kIHBhdGNoZXMuIFRob3NlIGtlcm5lbCB0YXIgZmlsZXMgZm9yIG9mZmljaWFsIGtlcm5lbCBhbmQKLXBhdGNoZXMgZm9yIGtlcm5lbCBwcmUtcmVsZWFzZSBjYW4gYmUgZG93bmxvYWQgYXQgCi08dWxpbmsgdXJsPSJodHRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC8iPm9mZmljaWFsIGtlcm5lbCBmdHAgc2l0ZTwvdWxpbms+Ci1hbmQgaXRzIG1pcnJvcnMuCi1UaGUgMS4wNiByZXZpc2lvbiBjYW4gYmUgZm91bmQgaW4ga2VybmVsIHZlcnNpb24gbGF0ZXIgdGhhbiAyLjMuMTUgYW5kIHByZS0yLjIuMTQsIAotYW5kIDEuMDcgcmV2aXNpb24gY2FuIGJlIGZvdW5kIGluIGtlcm5lbCB2ZXJzaW9uIDIuNC4wLgotSWYgeW91IGhhdmUgbm8gcHJpb3IgZXhwZXJpZW5jZSBpbiBuZXR3b3JraW5nIHVuZGVyIExpbnV4LCBwbGVhc2UgcmVhZAotPHVsaW5rIHVybD0iaHR0cDovL3d3dy50bGRwLm9yZy8iPkV0aGVybmV0IEhPV1RPPC91bGluaz4gYW5kCi08dWxpbmsgdXJsPSJodHRwOi8vd3d3LnRsZHAub3JnLyI+TmV0d29ya2luZyBIT1dUTzwvdWxpbms+IGF2YWlsYWJsZSBmcm9tCi1MaW51eCBEb2N1bWVudGF0aW9uIFByb2plY3QgKExEUCkuCi08L3BhcmE+Ci0KLTxwYXJhPgotVGhlIGRyaXZlciBpcyBidW5kbGVkIGluIHJlbGVhc2UgbGF0ZXIgdGhhbiAyLjIuMTEgYW5kIDIuMy4xNSBzbyB0aGlzIAotaXMgdGhlIG1vc3QgZWFzeSBjYXNlLiAKLUJlIHN1cmUgeW91IGhhdmUgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2VzIGZvciBjb21waWxpbmcga2VybmVsIHNvdXJjZS4KLVRob3NlIHBhY2thZ2VzIGFyZSBsaXN0ZWQgaW4gRG9jdW1lbnQvQ2hhbmdlcyBpbiBrZXJuZWwgc291cmNlIAotZGlzdHJpYnV0aW9uLiBJZiB5b3UgaGF2ZSB0byBpbnN0YWxsIHRoZSBkcml2ZXIgb3RoZXIgdGhhbiB0aG9zZSBidW5kbGVkCi1pbiBrZXJuZWwgcmVsZWFzZSwgeW91IHNob3VsZCBoYXZlIHlvdXIgZHJpdmVyIGZpbGUgCi08ZmlsZW5hbWU+c2lzOTAwLmM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnNpczkwMC5oPC9maWxlbmFtZT4gCi1jb3BpZWQgaW50byA8ZmlsZW5hbWUgY2xhc3M9ImRpcmVjdG9yeSI+L3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQvPC9maWxlbmFtZT4gZmlyc3QuCi1UaGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlIHdheXMgdG8gaW5zdGFsbCB0aGUgZHJpdmVyCi08L3BhcmE+Ci0KLTxzZWN0MT4KLTx0aXRsZT5CdWlsZGluZyB0aGUgZHJpdmVyIGFzIGxvYWRhYmxlIG1vZHVsZTwvdGl0bGU+Ci0KLTxwYXJhPgotVG8gYnVpbGQgdGhlIGRyaXZlciBhcyBhIGxvYWRhYmxlIGtlcm5lbCBtb2R1bGUgeW91IGhhdmUgdG8gcmVjb25maWd1cmUKLXRoZSBrZXJuZWwgdG8gYWN0aXZhdGUgbmV0d29yayBzdXBwb3J0IGJ5Ci08L3BhcmE+Ci0KLTxwYXJhPjxzY3JlZW4+Ci1tYWtlIG1lbnVjb25maWcKLTwvc2NyZWVuPjwvcGFyYT4KLQotPHBhcmE+Ci1DaG9vc2UgPHF1b3RlPkxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0ICAtLS0+PC9xdW90ZT4sIAotdGhlbiBzZWxlY3QgPHF1b3RlPkVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydDwvcXVvdGU+LgotPC9wYXJhPgotCi08cGFyYT4KLUNob29zZSA8cXVvdGU+TmV0d29yayBEZXZpY2UgU3VwcG9ydCAgLS0tPjwvcXVvdGU+LCBzZWxlY3QgCi08cXVvdGU+RXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpPC9xdW90ZT4uCi1UaGVuIHNlbGVjdCA8cXVvdGU+RUlTQSwgVkxCLCBQQ0kgYW5kIG9uIGJvYXJkIGNvbnRyb2xsZXJzPC9xdW90ZT4sIAotYW5kIGNob29zZSA8cXVvdGU+U2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydDwvcXVvdGU+IAotdG8gPHF1b3RlPk08L3F1b3RlPi4KLTwvcGFyYT4KLQotPHBhcmE+Ci1BZnRlciByZWNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwsIHlvdSBjYW4gbWFrZSB0aGUgZHJpdmVyIG1vZHVsZSBieQotPC9wYXJhPgotCi08cGFyYT48c2NyZWVuPgotbWFrZSBtb2R1bGVzCi08L3NjcmVlbj48L3BhcmE+Ci0KLTxwYXJhPgotVGhlIGRyaXZlciBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCBubyBlcnJvcnMuIEFmdGVyIGNvbXBpbGluZyB0aGUgZHJpdmVyLAotdGhlIGRyaXZlciBjYW4gYmUgaW5zdGFsbGVkIHRvIHByb3BlciBwbGFjZSBieQotPC9wYXJhPgotCi08cGFyYT48c2NyZWVuPgotbWFrZSBtb2R1bGVzX2luc3RhbGwKLTwvc2NyZWVuPjwvcGFyYT4KLQotPHBhcmE+Ci1Mb2FkIHRoZSBkcml2ZXIgaW50byBrZXJuZWwgYnkKLTwvcGFyYT4KLQotPHBhcmE+PHNjcmVlbj4KLWluc21vZCBzaXM5MDAKLTwvc2NyZWVuPjwvcGFyYT4KLQotPHBhcmE+Ci1XaGVuIGxvYWRpbmcgdGhlIGRyaXZlciBpbnRvIG1lbW9yeSwgc29tZSBpbmZvcm1hdGlvbiBtZXNzYWdlIGNhbiBiZSB2aWV3IGJ5Ci08L3BhcmE+Ci0KLTxwYXJhPgotPHNjcmVlbj4KLWRtZXNnCi08L3NjcmVlbj4KLQotb3IKLQotPHNjcmVlbj4KLWNhdCAvdmFyL2xvZy9tZXNzYWdlCi08L3NjcmVlbj4KLTwvcGFyYT4KLQotPHBhcmE+Ci1JZiB0aGUgZHJpdmVyIGlzIGxvYWRlZCBwcm9wZXJseSB5b3Ugd2lsbCBoYXZlIG1lc3NhZ2VzIHNpbWlsYXIgdG8gdGhpczoKLTwvcGFyYT4KLQotPHBhcmE+PHNjcmVlbj4KLXNpczkwMC5jOiB2MS4wNy4wNiAgMTEvMDcvMjAwMAotZXRoMDogU2lTIDkwMCBQQ0kgRmFzdCBFdGhlcm5ldCBhdCAweGQwMDAsIElSUSAxMCwgMDA6MDA6ZTg6ODM6N2Y6YTQuCi1ldGgwOiBTaVMgOTAwIEludGVybmFsIE1JSSBQSFkgdHJhbnNjZWl2ZXIgZm91bmQgYXQgYWRkcmVzcyAxLgotZXRoMDogVXNpbmcgU2lTIDkwMCBJbnRlcm5hbCBNSUkgUEhZIGFzIGRlZmF1bHQKLTwvc2NyZWVuPjwvcGFyYT4KLQotPHBhcmE+Ci1zaG93aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgYW5kIHRoZSByZXN1bHRzIG9mIHByb2Jpbmcgcm91dGluZS4KLTwvcGFyYT4KLQotPHBhcmE+Ci1PbmNlIHRoZSBkcml2ZXIgaXMgbG9hZGVkLCBuZXR3b3JrIGNhbiBiZSBicm91Z2h0IHVwIGJ5Ci08L3BhcmE+Ci0KLTxwYXJhPjxzY3JlZW4+Ci0vc2Jpbi9pZmNvbmZpZyBldGgwIElQQUREUiBicm9hZGNhc3QgQlJPQURDQVNUIG5ldG1hc2sgTkVUTUFTSyBtZWRpYSBUWVBFCi08L3NjcmVlbj48L3BhcmE+Ci0KLTxwYXJhPgotd2hlcmUgSVBBRERSLCBCUk9BRENBU1QsIE5FVE1BU0sgYXJlIHlvdXIgSVAgYWRkcmVzcywgYnJvYWRjYXN0IGFkZHJlc3MgYW5kCi1uZXRtYXNrIHJlc3BlY3RpdmVseS4gVFlQRSBpcyB1c2VkIHRvIHNldCBtZWRpdW0gdHlwZSB1c2VkIGJ5IHRoZSBkZXZpY2UuIAotVHlwaWNhbCB2YWx1ZXMgYXJlICIxMGJhc2VUIih0d2lzdGVkLXBhaXIgMTBNYnBzIEV0aGVybmV0KSBvciAiMTAwYmFzZVQiCi0odHdpc3RlZC1wYWlyIDEwME1icHMgRXRoZXJuZXQpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29uZmlndXJlIAotbmV0d29yayBpbnRlcmZhY2UsIHBsZWFzZSByZWZlciB0byAgCi08dWxpbmsgdXJsPSJodHRwOi8vd3d3LnRsZHAub3JnLyI+TmV0d29ya2luZyBIT1dUTzwvdWxpbms+LgotPC9wYXJhPgotCi08cGFyYT4KLVRoZSBsaW5rIHN0YXR1cyBpcyBhbHNvIHNob3duIGJ5IGtlcm5lbCBtZXNzYWdlcy4gRm9yIGV4YW1wbGUsIGFmdGVyIHRoZQotbmV0d29yayBpbnRlcmZhY2UgaXMgYWN0aXZhdGVkLCB5b3UgbWF5IGhhdmUgdGhlIG1lc3NhZ2U6Ci08L3BhcmE+Ci0KLTxwYXJhPjxzY3JlZW4+Ci1ldGgwOiBNZWRpYSBMaW5rIE9uIDEwMG1icHMgZnVsbC1kdXBsZXgKLTwvc2NyZWVuPjwvcGFyYT4KLQotPHBhcmE+Ci1JZiB5b3UgdHJ5IHRvIHVucGx1ZyB0aGUgdHdpc3QgcGFpciAoVFApIGNhYmxlIHlvdSB3aWxsIGdldAotPC9wYXJhPgotCi08cGFyYT48c2NyZWVuPgotZXRoMDogTWVkaWEgTGluayBPZmYKLTwvc2NyZWVuPjwvcGFyYT4KLQotPHBhcmE+Ci1pbmRpY2F0aW5nIHRoYXQgdGhlIGxpbmsgaXMgZmFpbGVkLgotPC9wYXJhPgotPC9zZWN0MT4KLQotPHNlY3QxPgotPHRpdGxlPkJ1aWxkaW5nIHRoZSBkcml2ZXIgaW50byBrZXJuZWw8L3RpdGxlPgotCi08cGFyYT4KLUlmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGRyaXZlciBpbnRvIGtlcm5lbCwgY2hvb3NlIDxxdW90ZT5ZPC9xdW90ZT4gCi1yYXRoZXIgdGhhbiA8cXVvdGU+TTwvcXVvdGU+IG9uIAotPHF1b3RlPlNpUyA5MDAvNzAxNiBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIHN1cHBvcnQ8L3F1b3RlPiAKLXdoZW4gY29uZmlndXJpbmcgdGhlIGtlcm5lbC4gQnVpbGQgdGhlIGtlcm5lbCBpbWFnZSBpbiB0aGUgdXN1YWwgd2F5Ci08L3BhcmE+Ci0KLTxwYXJhPjxzY3JlZW4+Ci1tYWtlIGNsZWFuCi0KLW1ha2UgYnpsaWxvCi08L3NjcmVlbj48L3BhcmE+Ci0KLTxwYXJhPgotTmV4dCB0aW1lIHRoZSBzeXN0ZW0gcmVib290LCB5b3UgaGF2ZSB0aGUgZHJpdmVyIGluIG1lbW9yeS4KLTwvcGFyYT4KLQotPC9zZWN0MT4KLTwvY2hhcHRlcj4KLQotPGNoYXB0ZXIgaWQ9InByb2JsZW1zIj4KLSA8dGl0bGU+S25vd24gUHJvYmxlbXMgYW5kIEJ1Z3M8L3RpdGxlPgotCi08cGFyYT4KLVRoZXJlIGFyZSBzb21lIGtub3duIHByb2JsZW1zIGFuZCBidWdzLiBJZiB5b3UgZmluZCBhbnkgb3RoZXIgYnVncyBwbGVhc2UgCi1tYWlsIHRvIDx1bGluayB1cmw9Im1haWx0bzpsY2NoYW5nQHNpcy5jb20udHciPmxjY2hhbmdAc2lzLmNvbS50dzwvdWxpbms+Ci0KLTxvcmRlcmVkbGlzdD4KLQotPGxpc3RpdGVtPgotPHBhcmE+Ci1BTTc5QzkwMSBIb21lUE5BIFBIWSBpcyBub3QgdGhvcm91Z2hseSB0ZXN0ZWQsIHRoZXJlIG1heSBiZSBzb21lIAotYnVncyBpbiB0aGUgPHF1b3RlPm9uIHRoZSBmbHk8L3F1b3RlPiBjaGFuZ2Ugb2YgdHJhbnNjZWl2ZXIuIAotPC9wYXJhPgotPC9saXN0aXRlbT4KLQotPGxpc3RpdGVtPgotPHBhcmE+Ci1BIGJ1ZyBpcyBoaWRkZW4gc29tZXdoZXJlIGluIHRoZSByZWNlaXZlIGJ1ZmZlciBtYW5hZ2VtZW50IGNvZGUsIAotdGhlIGJ1ZyBjYXVzZXMgTlVMTCBwb2ludGVyIHJlZmVyZW5jZSBpbiB0aGUga2VybmVsLiBUaGlzIGZhdWx0IGlzIAotY2F1Z2h0IGJlZm9yZSBiYWQgdGhpbmdzIGhhcHBlbiBhbmQgcmVwb3J0ZWQgd2l0aCB0aGUgbWVzc2FnZToKLQotPGNvbXB1dGVyb3V0cHV0PgotZXRoMDogTlVMTCBwb2ludGVyIGVuY291bnRlcmVkIGluIFJ4IHJpbmcsIHNraXBwaW5nIAotPC9jb21wdXRlcm91dHB1dD4KLQotd2hpY2ggY2FuIGJlIHZpZXdlZCB3aXRoIDxsaXRlcmFsIHJlbWFwPSJ0dCI+ZG1lc2c8L2xpdGVyYWw+IG9yCi08bGl0ZXJhbCByZW1hcD0idHQiPmNhdCAvdmFyL2xvZy9tZXNzYWdlPC9saXRlcmFsPi4KLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLTxsaXN0aXRlbT4KLTxwYXJhPgotVGhlIG1lZGlhIHR5cGUgY2hhbmdlIGZyb20gMTBNYnBzIHRvIDEwME1icHMgdHdpc3RlZC1wYWlyIGV0aGVybmV0IAotYnkgaWZjb25maWcgY2F1c2VzIHRoZSBtZWRpYSBsaW5rIGRvd24uCi08L3BhcmE+Ci08L2xpc3RpdGVtPgotCi08L29yZGVyZWRsaXN0PgotPC9wYXJhPgotPC9jaGFwdGVyPgotCi08Y2hhcHRlciBpZD0iUkhpc3RvcnkiPgotIDx0aXRsZT5SZXZpc2lvbiBIaXN0b3J5PC90aXRsZT4KLQotPHBhcmE+Ci08aXRlbWl6ZWRsaXN0PgotCi08bGlzdGl0ZW0+Ci08cGFyYT4KLU5vdmVtYmVyIDEzLCAyMDAwLCBSZXZpc2lvbiAxLjA3LCBzZXZlbnRoIHJlbGVhc2UsIDYzMEUgcHJvYmxlbSBmaXhlZCAKLWFuZCBmdXJ0aGVyIGNsZWFuIHVwLgotPC9wYXJhPgotPC9saXN0aXRlbT4KLQotPGxpc3RpdGVtPgotPHBhcmE+Ci1Ob3ZlbWJlciA0LCAxOTk5LCBSZXZpc2lvbiAxLjA2LCBTZWNvbmQgcmVsZWFzZSwgbG90cyBvZiBjbGVhbiB1cAotYW5kIG9wdGltaXphdGlvbi4KLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLTxsaXN0aXRlbT4KLTxwYXJhPgotQXVndXN0IDgsIDE5OTksIFJldmlzaW9uIDEuMDUsIEluaXRpYWwgUHVibGljIFJlbGVhc2UKLTwvcGFyYT4KLTwvbGlzdGl0ZW0+Ci0KLTwvaXRlbWl6ZWRsaXN0PgotPC9wYXJhPgotPC9jaGFwdGVyPgotCi08Y2hhcHRlciBpZD0iYWNrbm93bGVkZ2VtZW50cyI+Ci0gPHRpdGxlPkFja25vd2xlZGdlbWVudHM8L3RpdGxlPgotCi08cGFyYT4KLVRoaXMgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IGRlcml2ZWQgZm9ybSAKLTx1bGluayB1cmw9Im1haWx0bzpiZWNrZXJAY2VzZGlzMS5nc2ZjLm5hc2EuZ292Ij5Eb25hbGQgQmVja2VyPC91bGluaz4ncwotPHVsaW5rIHVybD0iZnRwOi8vY2VzZGlzLmdzZmMubmFzYS5nb3YvcHViL2xpbnV4L2RyaXZlcnMva2Vybi0yLjMvcGNpLXNrZWxldG9uLmMiCi0+cGNpLXNrZWxldG9uPC91bGluaz4gYW5kCi08dWxpbmsgdXJsPSJmdHA6Ly9jZXNkaXMuZ3NmYy5uYXNhLmdvdi9wdWIvbGludXgvZHJpdmVycy9rZXJuLTIuMy9ydGw4MTM5LmMiCi0+cnRsODEzOTwvdWxpbms+IGRyaXZlcnMuIERvbmFsZCBhbHNvIHByb3ZpZGVkIHZhcmlvdXMgc3VnZ2VzdGlvbgotcmVnYXJkZWQgd2l0aCBpbXByb3ZlbWVudHMgbWFkZSBpbiByZXZpc2lvbiAxLjA2LgotPC9wYXJhPgotCi08cGFyYT4KLVRoZSAxLjA1IHJldmlzaW9uIHdhcyBjcmVhdGVkIGJ5IAotPHVsaW5rIHVybD0ibWFpbHRvOmNtaHVhbmdAc2lzLmNvbS50dyI+SmltIEh1YW5nPC91bGluaz4sIEFNRCA3OWM5MDEKLXN1cHBvcnQgd2FzIGFkZGVkIGJ5IDx1bGluayB1cmw9Im1haWx0bzpsY3NAc2lzLmNvbS50dyI+Q2hpbi1TaGFuIExpPC91bGluaz4uCi08L3BhcmE+Ci08L2NoYXB0ZXI+Ci0KLTxjaGFwdGVyIGlkPSJmdW5jdGlvbnMiPgotPHRpdGxlPkxpc3Qgb2YgRnVuY3Rpb25zPC90aXRsZT4KLSFJZHJpdmVycy9uZXQvc2lzOTAwLmMKLTwvY2hhcHRlcj4KLQotPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS50eHQKaW5kZXggNWVkODVhZi4uYjRlYTUxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UudHh0CkBAIC0zNjAsNyArMzYwLDcgQEAKIAkJc3RydWN0IGZvbyAqbmV3X2ZwOwogCQlzdHJ1Y3QgZm9vICpvbGRfZnA7CiAKLQkJbmV3X2ZwID0ga21hbGxvYyhzaXplb2YoKmZwKSwgR0ZQX0tFUk5FTCk7CisJCW5ld19mcCA9IGttYWxsb2Moc2l6ZW9mKCpuZXdfZnApLCBHRlBfS0VSTkVMKTsKIAkJc3Bpbl9sb2NrKCZmb29fbXV0ZXgpOwogCQlvbGRfZnAgPSBnYmxfZm9vOwogCQkqbmV3X2ZwID0gKm9sZF9mcDsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCQlzdHJ1Y3QgZm9vICpuZXdfZnA7CiAJCXN0cnVjdCBmb28gKm9sZF9mcDsKIAotCQluZXdfZnAgPSBrbWFsbG9jKHNpemVvZigqZnApLCBHRlBfS0VSTkVMKTsKKwkJbmV3X2ZwID0ga21hbGxvYyhzaXplb2YoKm5ld19mcCksIEdGUF9LRVJORUwpOwogCQlzcGluX2xvY2soJmZvb19tdXRleCk7CiAJCW9sZF9mcCA9IGdibF9mb287CiAJCSpuZXdfZnAgPSAqb2xkX2ZwOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vQm9vdGluZyBiL0RvY3VtZW50YXRpb24vYXJtL0Jvb3RpbmcKaW5kZXggZmFkNTY2Yi4uNzY4NTAyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vQm9vdGluZworKysgYi9Eb2N1bWVudGF0aW9uL2FybS9Cb290aW5nCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogSW4gZWl0aGVyIGNhc2UsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIG1ldDoKIAotLSBRdWllc2NlIGFsbCBETUEgY2FwYWJsZSBkZXZpY2VzcyBzbyB0aGF0IG1lbW9yeSBkb2VzIG5vdCBnZXQKKy0gUXVpZXNjZSBhbGwgRE1BIGNhcGFibGUgZGV2aWNlcyBzbyB0aGF0IG1lbW9yeSBkb2VzIG5vdCBnZXQKICAgY29ycnVwdGVkIGJ5IGJvZ3VzIG5ldHdvcmsgcGFja2V0cyBvciBkaXNrIGRhdGEuIFRoaXMgd2lsbCBzYXZlCiAgIHlvdSBtYW55IGhvdXJzIG9mIGRlYnVnLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL2FybS9SRUFETUUKaW5kZXggNWVkNmYzNS4uOWI5YzgyMjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9SRUFETUUKQEAgLTg5LDcgKzg5LDcgQEAKICAgQWx0aG91Z2ggbW9kdWxhcmlzYXRpb24gaXMgc3VwcG9ydGVkIChhbmQgcmVxdWlyZWQgZm9yIHRoZSBGUCBlbXVsYXRvciksCiAgIGVhY2ggbW9kdWxlIG9uIGFuIEFSTTIvQVJNMjUwL0FSTTMgbWFjaGluZSB3aGVuIGlzIGxvYWRlZCB3aWxsIHRha2UKICAgbWVtb3J5IHVwIHRvIHRoZSBuZXh0IDMyayBib3VuZGFyeSBkdWUgdG8gdGhlIHNpemUgb2YgdGhlIHBhZ2VzLgotICBUaGVyZWZvcmUsIG1vZHVsYXJpc2F0aW9uIG9uIHRoZXNlIG1hY2hpbmVzIHJlYWxseSB3b3J0aCBpdD8KKyAgVGhlcmVmb3JlLCBpcyBtb2R1bGFyaXNhdGlvbiBvbiB0aGVzZSBtYWNoaW5lcyByZWFsbHkgd29ydGggaXQ/CiAKICAgSG93ZXZlciwgQVJNNiBhbmQgdXAgbWFjaGluZXMgYWxsb3cgbW9kdWxlcyB0byB0YWtlIG11bHRpcGxlcyBvZiA0aywgYW5kCiAgIGFzIHN1Y2ggQWNvcm4gUmlzY1BDcyBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcyB1c2luZyB0aGVzZSBwcm9jZXNzb3JzIGNhbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL092ZXJ2aWV3LnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9PdmVydmlldy50eHQKaW5kZXggODlhYTg5ZC4uOGM2ZWU2OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL092ZXJ2aWV3LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0CkBAIC0xMCw2ICsxMCw4IEBACiAgIGJ5IHRoZSAnczNjMjQxMCcgYXJjaGl0ZWN0dXJlIG9mIEFSTSBMaW51eC4gQ3VycmVudGx5IHRoZSBTM0MyNDEwIGFuZAogICB0aGUgUzNDMjQ0MCBhcmUgc3VwcG9ydGVkIENQVXMuCiAKKyAgU3VwcG9ydCBmb3IgdGhlIFMzQzI0MDAgc2VyaWVzIGlzIGluIHByb2dyZXNzLgorCiAKIENvbmZpZ3VyYXRpb24KIC0tLS0tLS0tLS0tLS0KQEAgLTMyLDYgKzM0LDExIEBACiAgICAgQSBnZW5lcmFsIHB1cnBvc2UgZGV2ZWxvcG1lbnQgYm9hcmQsIHNlZSBFQjI0MTBJVFgudHh0IGZvciBmdXJ0aGVyCiAgICAgZGV0YWlscwogCisgIFNpbXRlYyBFbGVjdHJvbmljcyBJTTI0NDBEMjAgKE9zaXJpcykKKworICAgIENQVSBNb2R1bGUgZnJvbSBTaW10ZWMgRWxlY3Ryb25pY3MsIHdpdGggYSBTM0MyNDQwQSBDUFUsIG5hbmQgZmxhc2gKKyAgICBhbmQgYSBQQ01DSUEgY29udHJvbGxlci4KKwogICBTYW1zdW5nIFNNREsyNDEwCiAKICAgICBTYW1zdW5nJ3Mgb3duIGRldmVsb3BtZW50IGJvYXJkLCBnZWFyZWQgZm9yIFBEQSB3b3JrLgpAQCAtODUsNiArOTIsMjYgQEAKICAgbWFpbGluZyBsaXN0IGluZm9ybWF0aW9uLgogCiAKK0kyQworLS0tCisKKyAgVGhlIGhhcmR3YXJlIEkyQyBjb3JlIGluIHRoZSBDUFUgaXMgc3VwcG9ydGVkIGluIHNpbmdsZSBtYXN0ZXIKKyAgbW9kZSwgYW5kIGNhbiBiZSBjb25maWd1cmVkIHZpYSBwbGF0Zm9ybSBkYXRhLgorCisKK1JUQworLS0tCisKKyAgU3VwcG9ydCBmb3IgdGhlIG9uYm9hcmQgUlRDIHVuaXQsIGluY2x1ZGluZyBhbGFybSBmdW5jdGlvbi4KKworCitXYXRjaGRvZworLS0tLS0tLS0KKworICBUaGUgb25jaGlwIHdhdGNoZG9nIGlzIGF2YWlsYWJsZSB2aWEgdGhlIHN0YW5kYXJkIHdhdGNoZG9nCisgIGludGVyZmFjZS4KKworCiBOQU5ECiAtLS0tCiAKQEAgLTEyMSw2ICsxNDgsMTUgQEAKICAgdmFyaW91cyBjbG9jayB1bml0cwogCiAKK1N1c3BlbmQgdG8gUkFNCistLS0tLS0tLS0tLS0tLQorCisgIEZvciBib2FyZHMgdGhhdCBwcm92aWRlIHN1cHBvcnQgZm9yIHN1c3BlbmQgdG8gUkFNLCB0aGUKKyAgc3lzdGVtIGNhbiBiZSBwbGFjZWQgaW50byBsb3cgcG93ZXIgc3VzcGVuZC4KKworICBTZWUgU3VzcGVuZC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKwogUGxhdGZvcm0gRGF0YQogLS0tLS0tLS0tLS0tLQogCkBAIC0xNTgsNiArMTk0LDcgQEAKIAlleHBvcnRlZCBvdXRzaWRlIGFyY2gvYXJtL21hY2gtczNjMjQxMC8sIG9yIGV4cG9ydGVkIHRvCiAJbW9kdWxlcyB2aWEgRVhQT1JUX1NZTUJPTCgpIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4KIAorCiBQb3J0IENvbnRyaWJ1dG9ycwogLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTg4LDggKzIyNSwxMSBAQAogICAwOCBNYXIgMjAwNSAtIEJKRCAtIEFkZGVkIExDVlIgdG8gbGlzdCBvZiBwZW9wbGUsIHVwZGF0ZWQgaW50cm9kdWN0aW9uCiAgIDA4IE1hciAyMDA1IC0gQkpEIC0gQWRkZWQgc2VjdGlvbiBvbiBhZGRpbmcgbWFjaGluZXMKICAgMDkgU2VwIDIwMDUgLSBCSkQgLSBBZGRlZCBzZWN0aW9uIG9uIHBsYXRmb3JtIGRhdGEKKyAgMTEgRmViIDIwMDYgLSBCSkQgLSBBZGRlZCBJMkMsIFJUQyBhbmQgV2F0Y2hkb2cgc2VjdGlvbnMKKyAgMTEgRmViIDIwMDYgLSBCSkQgLSBBZGRlZCBPc2lyaXMgbWFjaGluZSwgYW5kIFMzQzI0MDAgaW5mb3JtYXRpb24KKwogCiBEb2N1bWVudCBBdXRob3IKIC0tLS0tLS0tLS0tLS0tLQogCi1CZW4gRG9va3MsIChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCitCZW4gRG9va3MsIChjKSAyMDA0LTIwMDUsMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NldHVwIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2V0dXAKaW5kZXggMGFiZDA3Mi4uMGNiMWU2NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm0vU2V0dXAKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2V0dXAKQEAgLTU4LDcgKzU4LDcgQEAKICB2aWRlb195CiAKICAgIFRoaXMgZGVzY3JpYmVzIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgY3Vyc29yIG9uIFZHQSBjb25zb2xlLCBhbmQKLSAgIGlzIG90aGVyd2lzZSB1bnVzZWQuIChzaG91bGQgbm90IHVzZWQgZm9yIG90aGVyIGNvbnNvbGUgdHlwZXMsIGFuZAorICAgaXMgb3RoZXJ3aXNlIHVudXNlZC4gKHNob3VsZCBub3QgYmUgdXNlZCBmb3Igb3RoZXIgY29uc29sZSB0eXBlcywgYW5kCiAgICBzaG91bGQgbm90IGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzKS4KIAogIG1lbWNfY29udHJvbF9yZWcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2Nvbm5lY3Rvci50eHQgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jb25uZWN0b3IudHh0CmluZGV4IDU3YTMxNGIuLmFkNmUwYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2Nvbm5lY3Rvci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY29ubmVjdG9yLnR4dApAQCAtNjksMTAgKzY5LDExIEBACiAKIHN0cnVjdCBjYl9pZCAqaWQgCQktIHVuaXF1ZSBjb25uZWN0b3IncyB1c2VyIGlkZW50aWZpZXIuCiAKLXZvaWQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKm1zZywgdTMyIF9fZ3JvdXBzLCBpbnQgZ2ZwX21hc2spOworaW50IGNuX25ldGxpbmtfc2VuZChzdHJ1Y3QgY25fbXNnICptc2csIHUzMiBfX2dyb3VwcywgaW50IGdmcF9tYXNrKTsKIAogU2VuZHMgbWVzc2FnZSB0byB0aGUgc3BlY2lmaWVkIGdyb3Vwcy4gIEl0IGNhbiBiZSBzYWZlbHkgY2FsbGVkIGZyb20KLWFueSBjb250ZXh0LCBidXQgbWF5IHNpbGVudGx5IGZhaWwgdW5kZXIgc3Ryb25nIG1lbW9yeSBwcmVzc3VyZS4KK3NvZnRpcnEgY29udGV4dCwgYnV0IG1heSBzaWxlbnRseSBmYWlsIHVuZGVyIHN0cm9uZyBtZW1vcnkgcHJlc3N1cmUuCitJZiB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzIGZvciBnaXZlbiBncm91cCAtRVNSQ0ggY2FuIGJlIHJldHVybmVkLgogCiBzdHJ1Y3QgY25fbXNnICoJCQktIG1lc3NhZ2UgaGVhZGVyKHdpdGggYXR0YWNoZWQgZGF0YSkuCiB1MzIgX19ncm91cAkJCS0gZGVzdGluYXRpb24gZ3JvdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1ob3RwbHVnLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CmluZGV4IGU3MWJjNmMuLjU3YTA5ZjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWhvdHBsdWcudHh0CkBAIC00NiwxMCArNDYsMTIgQEAKICAgICAgICAgICAgICBtYXhjcHVzPTIgd2lsbCBvbmx5IGJvb3QgMi4gWW91IGNhbiBjaG9vc2UgdG8gYnJpbmcgdGhlCiAgICAgICAgICAgICAgb3RoZXIgY3B1cyBsYXRlciBvbmxpbmUsIHJlYWQgRkFRJ3MgZm9yIG1vcmUgaW5mby4KIAotYWRkaXRpb25hbF9jcHVzPW4JW3g4Nl82NCwgczM5MCBvbmx5XSB1c2UgdGhpcyB0byBsaW1pdCBob3RwbHVnZ2FibGUgY3B1cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc2V0cworYWRkaXRpb25hbF9jcHVzKj1uCVVzZSB0aGlzIHRvIGxpbWl0IGhvdHBsdWdnYWJsZSBjcHVzLiBUaGlzIG9wdGlvbiBzZXRzCiAgIAkJCWNwdV9wb3NzaWJsZV9tYXAgPSBjcHVfcHJlc2VudF9tYXAgKyBhZGRpdGlvbmFsX2NwdXMKIAorKCopIE9wdGlvbiB2YWxpZCBvbmx5IGZvciBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlcworLSB4ODZfNjQsIGlhNjQsIHMzOTAKKwogaWE2NCBhbmQgeDg2XzY0IHVzZSB0aGUgbnVtYmVyIG9mIGRpc2FibGVkIGxvY2FsIGFwaWNzIGluIEFDUEkgdGFibGVzIE1BRFQKIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHBvdGVudGlhbGx5IGhvdC1wbHVnZ2FibGUgY3B1cy4gVGhlIGltcGxlbWVudGF0aW9uCiBzaG91bGQgb25seSByZWx5IG9uIHRoaXMgdG8gY291bnQgdGhlICNvZiBjcHVzLCBidXQgKk1VU1QqIG5vdCByZWx5IG9uIHRoZQpAQCAtNTcsNiArNTksOSBAQAogbWFyayBzdWNoIGhvdC1wbHVnZ2FibGUgY3B1cyBhcyBkaXNhYmxlZCBlbnRyaWVzLCBvbmUgY291bGQgdXNlIHRoaXMKIHBhcmFtZXRlciAiYWRkaXRpb25hbF9jcHVzPXgiIHRvIHJlcHJlc2VudCB0aG9zZSBjcHVzIGluIHRoZSBjcHVfcG9zc2libGVfbWFwLgogCitzMzkwIHVzZXMgdGhlIG51bWJlciBvZiBjcHVzIGl0IGRldGVjdHMgYXQgSVBMIHRpbWUgdG8gYWxzbyB0aGUgbnVtYmVyIG9mIGJpdHMKK2luIGNwdV9wb3NzaWJsZV9tYXAuIElmIGl0IGlzIGRlc2lyZWQgdG8gYWRkIGFkZGl0aW9uYWwgY3B1cyBhdCBhIGxhdGVyIHRpbWUKK3RoZSBudW1iZXIgc2hvdWxkIGJlIHNwZWNpZmllZCB1c2luZyB0aGlzIG9wdGlvbiBvciB0aGUgcG9zc2libGVfY3B1cyBvcHRpb24uCiAKIHBvc3NpYmxlX2NwdXM9bgkJW3MzOTAgb25seV0gdXNlIHRoaXMgdG8gc2V0IGhvdHBsdWdnYWJsZSBjcHVzLgogCQkJVGhpcyBvcHRpb24gc2V0cyBwb3NzaWJsZV9jcHVzIGJpdHMgaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CmluZGV4IDk5MDk5OGUuLjE1OWUyYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dApAQCAtNCw4ICs0LDkgQEAKIENvcHlyaWdodCAoQykgMjAwNCBCVUxMIFNBLgogV3JpdHRlbiBieSBTaW1vbi5EZXJyQGJ1bGwubmV0CiAKLVBvcnRpb25zIENvcHlyaWdodCAoYykgMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCitQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiBNb2RpZmllZCBieSBQYXVsIEphY2tzb24gPHBqQHNnaS5jb20+CitNb2RpZmllZCBieSBDaHJpc3RvcGggTGFtZXRlciA8Y2xhbWV0ZXJAc2dpLmNvbT4KIAogQ09OVEVOVFM6CiA9PT09PT09PT0KQEAgLTE3LDcgKzE4LDggQEAKICAgMS40IFdoYXQgYXJlIGV4Y2x1c2l2ZSBjcHVzZXRzID8KICAgMS41IFdoYXQgZG9lcyBub3RpZnlfb25fcmVsZWFzZSBkbyA/CiAgIDEuNiBXaGF0IGlzIG1lbW9yeV9wcmVzc3VyZSA/Ci0gIDEuNyBIb3cgZG8gSSB1c2UgY3B1c2V0cyA/CisgIDEuNyBXaGF0IGlzIG1lbW9yeSBzcHJlYWQgPworICAxLjggSG93IGRvIEkgdXNlIGNwdXNldHMgPwogMi4gVXNhZ2UgRXhhbXBsZXMgYW5kIFN5bnRheAogICAyLjEgQmFzaWMgVXNhZ2UKICAgMi4yIEFkZGluZy9yZW1vdmluZyBjcHVzCkBAIC05MCw3ICs5Miw4IEBACiAKIFRoZXNlIHN1YnNldHMsIG9yICJzb2Z0IHBhcnRpdGlvbnMiIG11c3QgYmUgYWJsZSB0byBiZSBkeW5hbWljYWxseQogYWRqdXN0ZWQsIGFzIHRoZSBqb2IgbWl4IGNoYW5nZXMsIHdpdGhvdXQgaW1wYWN0aW5nIG90aGVyIGNvbmN1cnJlbnRseQotZXhlY3V0aW5nIGpvYnMuCitleGVjdXRpbmcgam9icy4gVGhlIGxvY2F0aW9uIG9mIHRoZSBydW5uaW5nIGpvYnMgcGFnZXMgbWF5IGFsc28gYmUgbW92ZWQKK3doZW4gdGhlIG1lbW9yeSBsb2NhdGlvbnMgYXJlIGNoYW5nZWQuCiAKIFRoZSBrZXJuZWwgY3B1c2V0IHBhdGNoIHByb3ZpZGVzIHRoZSBtaW5pbXVtIGVzc2VudGlhbCBrZXJuZWwKIG1lY2hhbmlzbXMgcmVxdWlyZWQgdG8gZWZmaWNpZW50bHkgaW1wbGVtZW50IHN1Y2ggc3Vic2V0cy4gIEl0CkBAIC0xMDIsOCArMTA1LDggQEAKIDEuMyBIb3cgYXJlIGNwdXNldHMgaW1wbGVtZW50ZWQgPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNwdXNldHMgcHJvdmlkZSBhIExpbnV4IGtlcm5lbCAoMi42LjcgYW5kIGFib3ZlKSBtZWNoYW5pc20gdG8gY29uc3RyYWluCi13aGljaCBDUFVzIGFuZCBNZW1vcnkgTm9kZXMgYXJlIHVzZWQgYnkgYSBwcm9jZXNzIG9yIHNldCBvZiBwcm9jZXNzZXMuCitDcHVzZXRzIHByb3ZpZGUgYSBMaW51eCBrZXJuZWwgbWVjaGFuaXNtIHRvIGNvbnN0cmFpbiB3aGljaCBDUFVzIGFuZAorTWVtb3J5IE5vZGVzIGFyZSB1c2VkIGJ5IGEgcHJvY2VzcyBvciBzZXQgb2YgcHJvY2Vzc2VzLgogCiBUaGUgTGludXgga2VybmVsIGFscmVhZHkgaGFzIGEgcGFpciBvZiBtZWNoYW5pc21zIHRvIHNwZWNpZnkgb24gd2hpY2gKIENQVXMgYSB0YXNrIG1heSBiZSBzY2hlZHVsZWQgKHNjaGVkX3NldGFmZmluaXR5KSBhbmQgb24gd2hpY2ggTWVtb3J5CkBAIC0zMTUsNyArMzE4LDc4IEBACiB0aW1lcyAxMDAwLgogCiAKLTEuNyBIb3cgZG8gSSB1c2UgY3B1c2V0cyA/CisxLjcgV2hhdCBpcyBtZW1vcnkgc3ByZWFkID8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgYXJlIHR3byBib29sZWFuIGZsYWcgZmlsZXMgcGVyIGNwdXNldCB0aGF0IGNvbnRyb2wgd2hlcmUgdGhlCitrZXJuZWwgYWxsb2NhdGVzIHBhZ2VzIGZvciB0aGUgZmlsZSBzeXN0ZW0gYnVmZmVycyBhbmQgcmVsYXRlZCBpbgora2VybmVsIGRhdGEgc3RydWN0dXJlcy4gIFRoZXkgYXJlIGNhbGxlZCAnbWVtb3J5X3NwcmVhZF9wYWdlJyBhbmQKKydtZW1vcnlfc3ByZWFkX3NsYWInLgorCitJZiB0aGUgcGVyLWNwdXNldCBib29sZWFuIGZsYWcgZmlsZSAnbWVtb3J5X3NwcmVhZF9wYWdlJyBpcyBzZXQsIHRoZW4KK3RoZSBrZXJuZWwgd2lsbCBzcHJlYWQgdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlcnMgKHBhZ2UgY2FjaGUpIGV2ZW5seQorb3ZlciBhbGwgdGhlIG5vZGVzIHRoYXQgdGhlIGZhdWx0aW5nIHRhc2sgaXMgYWxsb3dlZCB0byB1c2UsIGluc3RlYWQKK29mIHByZWZlcnJpbmcgdG8gcHV0IHRob3NlIHBhZ2VzIG9uIHRoZSBub2RlIHdoZXJlIHRoZSB0YXNrIGlzIHJ1bm5pbmcuCisKK0lmIHRoZSBwZXItY3B1c2V0IGJvb2xlYW4gZmxhZyBmaWxlICdtZW1vcnlfc3ByZWFkX3NsYWInIGlzIHNldCwKK3RoZW4gdGhlIGtlcm5lbCB3aWxsIHNwcmVhZCBzb21lIGZpbGUgc3lzdGVtIHJlbGF0ZWQgc2xhYiBjYWNoZXMsCitzdWNoIGFzIGZvciBpbm9kZXMgYW5kIGRlbnRyaWVzIGV2ZW5seSBvdmVyIGFsbCB0aGUgbm9kZXMgdGhhdCB0aGUKK2ZhdWx0aW5nIHRhc2sgaXMgYWxsb3dlZCB0byB1c2UsIGluc3RlYWQgb2YgcHJlZmVycmluZyB0byBwdXQgdGhvc2UKK3BhZ2VzIG9uIHRoZSBub2RlIHdoZXJlIHRoZSB0YXNrIGlzIHJ1bm5pbmcuCisKK1RoZSBzZXR0aW5nIG9mIHRoZXNlIGZsYWdzIGRvZXMgbm90IGFmZmVjdCBhbm9ueW1vdXMgZGF0YSBzZWdtZW50IG9yCitzdGFjayBzZWdtZW50IHBhZ2VzIG9mIGEgdGFzay4KKworQnkgZGVmYXVsdCwgYm90aCBraW5kcyBvZiBtZW1vcnkgc3ByZWFkaW5nIGFyZSBvZmYsIGFuZCBtZW1vcnkKK3BhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gdGhlIG5vZGUgbG9jYWwgdG8gd2hlcmUgdGhlIHRhc2sgaXMgcnVubmluZywKK2V4Y2VwdCBwZXJoYXBzIGFzIG1vZGlmaWVkIGJ5IHRoZSB0YXNrcyBOVU1BIG1lbXBvbGljeSBvciBjcHVzZXQKK2NvbmZpZ3VyYXRpb24sIHNvIGxvbmcgYXMgc3VmZmljaWVudCBmcmVlIG1lbW9yeSBwYWdlcyBhcmUgYXZhaWxhYmxlLgorCitXaGVuIG5ldyBjcHVzZXRzIGFyZSBjcmVhdGVkLCB0aGV5IGluaGVyaXQgdGhlIG1lbW9yeSBzcHJlYWQgc2V0dGluZ3MKK29mIHRoZWlyIHBhcmVudC4KKworU2V0dGluZyBtZW1vcnkgc3ByZWFkaW5nIGNhdXNlcyBhbGxvY2F0aW9ucyBmb3IgdGhlIGFmZmVjdGVkIHBhZ2UKK29yIHNsYWIgY2FjaGVzIHRvIGlnbm9yZSB0aGUgdGFza3MgTlVNQSBtZW1wb2xpY3kgYW5kIGJlIHNwcmVhZAoraW5zdGVhZC4gICAgVGFza3MgdXNpbmcgbWJpbmQoKSBvciBzZXRfbWVtcG9saWN5KCkgY2FsbHMgdG8gc2V0IE5VTUEKK21lbXBvbGljaWVzIHdpbGwgbm90IG5vdGljZSBhbnkgY2hhbmdlIGluIHRoZXNlIGNhbGxzIGFzIGEgcmVzdWx0IG9mCit0aGVpciBjb250YWluaW5nIHRhc2tzIG1lbW9yeSBzcHJlYWQgc2V0dGluZ3MuICBJZiBtZW1vcnkgc3ByZWFkaW5nCitpcyB0dXJuZWQgb2ZmLCB0aGVuIHRoZSBjdXJyZW50bHkgc3BlY2lmaWVkIE5VTUEgbWVtcG9saWN5IG9uY2UgYWdhaW4KK2FwcGxpZXMgdG8gbWVtb3J5IHBhZ2UgYWxsb2NhdGlvbnMuCisKK0JvdGggJ21lbW9yeV9zcHJlYWRfcGFnZScgYW5kICdtZW1vcnlfc3ByZWFkX3NsYWInIGFyZSBib29sZWFuIGZsYWcKK2ZpbGVzLiAgQnkgZGVmYXVsdCB0aGV5IGNvbnRhaW4gIjAiLCBtZWFuaW5nIHRoYXQgdGhlIGZlYXR1cmUgaXMgb2ZmCitmb3IgdGhhdCBjcHVzZXQuICBJZiBhICIxIiBpcyB3cml0dGVuIHRvIHRoYXQgZmlsZSwgdGhlbiB0aGF0IHR1cm5zCit0aGUgbmFtZWQgZmVhdHVyZSBvbi4KKworVGhlIGltcGxlbWVudGF0aW9uIGlzIHNpbXBsZS4KKworU2V0dGluZyB0aGUgZmxhZyAnbWVtb3J5X3NwcmVhZF9wYWdlJyB0dXJucyBvbiBhIHBlci1wcm9jZXNzIGZsYWcKK1BGX1NQUkVBRF9QQUdFIGZvciBlYWNoIHRhc2sgdGhhdCBpcyBpbiB0aGF0IGNwdXNldCBvciBzdWJzZXF1ZW50bHkKK2pvaW5zIHRoYXQgY3B1c2V0LiAgVGhlIHBhZ2UgYWxsb2NhdGlvbiBjYWxscyBmb3IgdGhlIHBhZ2UgY2FjaGUKK2lzIG1vZGlmaWVkIHRvIHBlcmZvcm0gYW4gaW5saW5lIGNoZWNrIGZvciB0aGlzIFBGX1NQUkVBRF9QQUdFIHRhc2sKK2ZsYWcsIGFuZCBpZiBzZXQsIGEgY2FsbCB0byBhIG5ldyByb3V0aW5lIGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKQorcmV0dXJucyB0aGUgbm9kZSB0byBwcmVmZXIgZm9yIHRoZSBhbGxvY2F0aW9uLgorCitTaW1pbGFybHksIHNldHRpbmcgJ21lbW9yeV9zcHJlYWRfY2FjaGUnIHR1cm5zIG9uIHRoZSBmbGFnCitQRl9TUFJFQURfU0xBQiwgYW5kIGFwcHJvcHJpYXRlbHkgbWFya2VkIHNsYWIgY2FjaGVzIHdpbGwgYWxsb2NhdGUKK3BhZ2VzIGZyb20gdGhlIG5vZGUgcmV0dXJuZWQgYnkgY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpLgorCitUaGUgY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpIHJvdXRpbmUgaXMgYWxzbyBzaW1wbGUuICBJdCB1c2VzIHRoZQordmFsdWUgb2YgYSBwZXItdGFzayByb3RvciBjcHVzZXRfbWVtX3NwcmVhZF9yb3RvciB0byBzZWxlY3QgdGhlIG5leHQKK25vZGUgaW4gdGhlIGN1cnJlbnQgdGFza3MgbWVtc19hbGxvd2VkIHRvIHByZWZlciBmb3IgdGhlIGFsbG9jYXRpb24uCisKK1RoaXMgbWVtb3J5IHBsYWNlbWVudCBwb2xpY3kgaXMgYWxzbyBrbm93biAoaW4gb3RoZXIgY29udGV4dHMpIGFzCityb3VuZC1yb2JpbiBvciBpbnRlcmxlYXZlLgorCitUaGlzIHBvbGljeSBjYW4gcHJvdmlkZSBzdWJzdGFudGlhbCBpbXByb3ZlbWVudHMgZm9yIGpvYnMgdGhhdCBuZWVkCit0byBwbGFjZSB0aHJlYWQgbG9jYWwgZGF0YSBvbiB0aGUgY29ycmVzcG9uZGluZyBub2RlLCBidXQgdGhhdCBuZWVkCit0byBhY2Nlc3MgbGFyZ2UgZmlsZSBzeXN0ZW0gZGF0YSBzZXRzIHRoYXQgbmVlZCB0byBiZSBzcHJlYWQgYWNyb3NzCit0aGUgc2V2ZXJhbCBub2RlcyBpbiB0aGUgam9icyBjcHVzZXQgaW4gb3JkZXIgdG8gZml0LiAgV2l0aG91dCB0aGlzCitwb2xpY3ksIGVzcGVjaWFsbHkgZm9yIGpvYnMgdGhhdCBtaWdodCBoYXZlIG9uZSB0aHJlYWQgcmVhZGluZyBpbiB0aGUKK2RhdGEgc2V0LCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYWNyb3NzIHRoZSBub2RlcyBpbiB0aGUgam9icyBjcHVzZXQKK2NhbiBiZWNvbWUgdmVyeSB1bmV2ZW4uCisKKworMS44IEhvdyBkbyBJIHVzZSBjcHVzZXRzID8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEluIG9yZGVyIHRvIG1pbmltaXplIHRoZSBpbXBhY3Qgb2YgY3B1c2V0cyBvbiBjcml0aWNhbCBrZXJuZWwKQEAgLTM3MSwyMiArNDQ1LDE3IEBACiBJZiB0aGUgY3B1c2V0IGZsYWcgZmlsZSAnbWVtb3J5X21pZ3JhdGUnIGlzIHNldCB0cnVlLCB0aGVuIHdoZW4KIHRhc2tzIGFyZSBhdHRhY2hlZCB0byB0aGF0IGNwdXNldCwgYW55IHBhZ2VzIHRoYXQgdGFzayBoYWQKIGFsbG9jYXRlZCB0byBpdCBvbiBub2RlcyBpbiBpdHMgcHJldmlvdXMgY3B1c2V0IGFyZSBtaWdyYXRlZAotdG8gdGhlIHRhc2tzIG5ldyBjcHVzZXQuICBEZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLAotdGhpcyBtaWdyYXRpb24gbWF5IGVpdGhlciBiZSBkb25lIGJ5IHN3YXBwaW5nIHRoZSBwYWdlIG91dCwKLXNvIHRoYXQgdGhlIG5leHQgdGltZSB0aGUgcGFnZSBpcyByZWZlcmVuY2VkLCBpdCB3aWxsIGJlIHBhZ2VkCi1pbnRvIHRoZSB0YXNrcyBuZXcgY3B1c2V0LCB1c3VhbGx5IG9uIHRoZSBub2RlIHdoZXJlIGl0IHdhcwotcmVmZXJlbmNlZCwgb3IgdGhpcyBtaWdyYXRpb24gbWF5IGJlIGRvbmUgYnkgZGlyZWN0bHkgY29weWluZwotdGhlIHBhZ2VzIGZyb20gdGhlIHRhc2tzIHByZXZpb3VzIGNwdXNldCB0byB0aGUgbmV3IGNwdXNldCwKLXdoZXJlIHBvc3NpYmxlIHRvIHRoZSBzYW1lIG5vZGUsIHJlbGF0aXZlIHRvIHRoZSBuZXcgY3B1c2V0LAotYXMgdGhlIG5vZGUgdGhhdCBoZWxkIHRoZSBwYWdlLCByZWxhdGl2ZSB0byB0aGUgb2xkIGNwdXNldC4KK3RvIHRoZSB0YXNrcyBuZXcgY3B1c2V0LiBUaGUgcmVsYXRpdmUgcGxhY2VtZW50IG9mIHRoZSBwYWdlIHdpdGhpbgordGhlIGNwdXNldCBpcyBwcmVzZXJ2ZWQgZHVyaW5nIHRoZXNlIG1pZ3JhdGlvbiBvcGVyYXRpb25zIGlmIHBvc3NpYmxlLgorRm9yIGV4YW1wbGUgaWYgdGhlIHBhZ2Ugd2FzIG9uIHRoZSBzZWNvbmQgdmFsaWQgbm9kZSBvZiB0aGUgcHJpb3IgY3B1c2V0Cit0aGVuIHRoZSBwYWdlIHdpbGwgYmUgcGxhY2VkIG9uIHRoZSBzZWNvbmQgdmFsaWQgbm9kZSBvZiB0aGUgbmV3IGNwdXNldC4KKwogQWxzbyBpZiAnbWVtb3J5X21pZ3JhdGUnIGlzIHNldCB0cnVlLCB0aGVuIGlmIHRoYXQgY3B1c2V0cwogJ21lbXMnIGZpbGUgaXMgbW9kaWZpZWQsIHBhZ2VzIGFsbG9jYXRlZCB0byB0YXNrcyBpbiB0aGF0CiBjcHVzZXQsIHRoYXQgd2VyZSBvbiBub2RlcyBpbiB0aGUgcHJldmlvdXMgc2V0dGluZyBvZiAnbWVtcycsCi13aWxsIGJlIG1vdmVkIHRvIG5vZGVzIGluIHRoZSBuZXcgc2V0dGluZyBvZiAnbWVtcy4nICBBZ2FpbiwKLWRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIHRoaXMgbWlnaHQgYmUgZG9uZSBieSBzd2FwcGluZywKLW9yIGJ5IGRpcmVjdCBjb3B5aW5nLiAgSW4gZWl0aGVyIGNhc2UsIHBhZ2VzIHRoYXQgd2VyZSBub3QgaW4KLXRoZSB0YXNrcyBwcmlvciBjcHVzZXQsIG9yIGluIHRoZSBjcHVzZXRzIHByaW9yICdtZW1zJyBzZXR0aW5nLAotd2lsbCBub3QgYmUgbW92ZWQuCit3aWxsIGJlIG1vdmVkIHRvIG5vZGVzIGluIHRoZSBuZXcgc2V0dGluZyBvZiAnbWVtcy4nCitQYWdlcyB0aGF0IHdlcmUgbm90IGluIHRoZSB0YXNrcyBwcmlvciBjcHVzZXQsIG9yIGluIHRoZSBjcHVzZXRzCitwcmlvciAnbWVtcycgc2V0dGluZywgd2lsbCBub3QgYmUgbW92ZWQuCiAKIFRoZXJlIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUuICBJZiBob3RwbHVnIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZAogdG8gcmVtb3ZlIGFsbCB0aGUgQ1BVcyB0aGF0IGFyZSBjdXJyZW50bHkgYXNzaWduZWQgdG8gYSBjcHVzZXQsCkBAIC00MzQsMTYgKzUwMyw2IEBACiAgICMgVGhlIG5leHQgbGluZSBzaG91bGQgZGlzcGxheSAnL0NoYXJsaWUnCiAgIGNhdCAvcHJvYy9zZWxmL2NwdXNldAogCi1JbiB0aGUgY2FzZSB0aGF0IGEgY2hhbmdlIG9mIGNwdXNldCBpbmNsdWRlcyB3YW50aW5nIHRvIG1vdmUgYWxyZWFkeQotYWxsb2NhdGVkIG1lbW9yeSBwYWdlcywgY29uc2lkZXIgZnVydGhlciB0aGUgd29yayBvZiBJV0FNT1RPCi1Ub3NoaWhpcm8gPGl3YW1vdG9AdmFsaW51eC5jby5qcD4gZm9yIHBhZ2UgcmVtYXBwaW5nIGFuZCBtZW1vcnkKLWhvdHJlbW92YWwsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdDoKLQotICBodHRwOi8vcGVvcGxlLnZhbGludXguY28uanAvfml3YW1vdG8vbWguaHRtbAotCi1UaGUgaW50ZWdyYXRpb24gb2YgY3B1c2V0cyB3aXRoIHN1Y2ggbWVtb3J5IG1pZ3JhdGlvbiBpcyBub3QgeWV0Ci1hdmFpbGFibGUuCi0KIEluIHRoZSBmdXR1cmUsIGEgQyBsaWJyYXJ5IGludGVyZmFjZSB0byBjcHVzZXRzIHdpbGwgbGlrZWx5IGJlCiBhdmFpbGFibGUuICBGb3Igbm93LCB0aGUgb25seSB3YXkgdG8gcXVlcnkgb3IgbW9kaWZ5IGNwdXNldHMgaXMKIHZpYSB0aGUgY3B1c2V0IGZpbGUgc3lzdGVtLCB1c2luZyB0aGUgdmFyaW91cyBjZCwgbWtkaXIsIGVjaG8sIGNhdCwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL2F2ZXJtZWRpYS50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9hdmVybWVkaWEudHh0CmluZGV4IDA2ODA3MGYuLjhiYWI4NDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL2F2ZXJtZWRpYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvYXZlcm1lZGlhLnR4dApAQCAtMSw0ICsxLDMgQEAKLQogSE9XVE86IEdldCBBbiBBdmVybWVkaWEgRFZCLVQgd29ya2luZyB1bmRlciBMaW51eAogCSAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIApAQCAtMTM3LDExICsxMzYsOCBAQAogICAgVG8gIHBvd2VyICB1cCAgdGhlICBjYXJkLCAgbG9hZCAgdGhlICBmb2xsb3dpbmcgbW9kdWxlcyBpbiB0aGUKICAgIGZvbGxvd2luZyBvcmRlcjoKIAotICAgICAqIGluc21vZCBkdmItY29yZS5vCi0gICAgICogbW9kcHJvYmUgYnR0di5vCi0gICAgICogaW5zbW9kIGJ0ODc4Lm8KLSAgICAgKiBpbnNtb2QgZHZiLWJ0OHh4Lm8KLSAgICAgKiBpbnNtb2Qgc3A4ODd4Lm8KKyAgICAgKiBtb2Rwcm9iZSBidHR2IChub3JtYWxseSBsb2FkZWQgYXV0b21hdGljYWxseSkKKyAgICAgKiBtb2Rwcm9iZSBkdmItYnQ4eHggKG9yIHBsYWNlIGR2Yi1idDh4eCBpbiAvZXRjL21vZHVsZXMpCiAKICAgIEluc2VydGlvbiAgb2YgIHRoZXNlICBtb2R1bGVzICBpbnRvICB0aGUgIHJ1bm5pbmcgIGtlcm5lbCB3aWxsCiAgICBhY3RpdmF0ZSB0aGUgYXBwcm9wcmlhdGUgRFZCIGRldmljZSBub2Rlcy4gSXQgaXMgdGhlbiBwb3NzaWJsZQpAQCAtMzAyLDQgKzI5OCw0IEBACiAgICBNYW55ICB0aGFua3MgdG8gTmlnZWwgUGVhcnNvbiBmb3IgdGhlIHVwZGF0ZXMgdG8gdGhpcyBkb2N1bWVudAogICAgc2luY2UgdGhlIHJlY2VudCByZXZpc2lvbiBvZiB0aGUgZHJpdmVyLgogCi0gICBKYW51YXJ5IDI5dGggMjAwNAorICAgRmVicnVhcnkgMTR0aCAyMDA2CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9idDh4eC50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9idDh4eC50eHQKaW5kZXggZGY2YzA1NC4uNGU3NjE0ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvYnQ4eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2J0OHh4LnR4dApAQCAtMSwxMTQgKzEsNzggQEAKLUhvdyB0byBnZXQgdGhlIE5lYnVsYSwgUENUViwgRnVzaW9uSERUViBMaXRlIGFuZCBUd2luaGFuIERTVCBjYXJkcyB3b3JraW5nCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSG93IHRvIGdldCB0aGUgYnQ4eHggY2FyZHMgd29ya2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGlzIGNsYXNzIG9mIGNhcmRzIGhhcyBhIGJ0ODc4YSBhcyB0aGUgUENJIGludGVyZmFjZSwgYW5kCi1yZXF1aXJlIHRoZSBidHR2IGRyaXZlci4KKzEpIEdlbmVyYWwgaW5mb3JtYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT0KIAotUGxlYXNlIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdhcm5pbmcgYWJvdXQgdGhlIGJ0dHYgbW9kdWxlCi1vcHRpb25zIGJlbG93IGZvciB0aGUgRFNUIGNhcmQuCitUaGlzIGNsYXNzIG9mIGNhcmRzIGhhcyBhIGJ0ODc4YSBhcyB0aGUgUENJIGludGVyZmFjZSwgYW5kIHJlcXVpcmUgdGhlIGJ0dHYgZHJpdmVyCitmb3IgYWNjZXNzaW5nIHRoZSBpMmMgYnVzIGFuZCB0aGUgZ3BpbyBwaW5zIG9mIHRoZSBidDh4eCBjaGlwc2V0LgorUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2R2Yi9jYXJkcy50eHQgPT4gbyBDYXJkcyBiYXNlZCBvbiB0aGUgQ29uZXhhbnQgQnQ4eHggUENJIGJyaWRnZToKIAotMSkgR2VuZXJhbCBpbmZvcm1hdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZXNlIGRyaXZlcnMgcmVxdWlyZSB0aGUgYnR0diBkcml2ZXIgdG8gcHJvdmlkZSB0aGUgbWVhbnMgdG8gYWNjZXNzCi10aGUgaTJjIGJ1cyBhbmQgdGhlIGdwaW8gcGlucyBvZiB0aGUgYnQ4eHggY2hpcHNldC4KLQotQmVjYXVzZSBvZiB0aGlzLCB5b3UgbmVlZCB0byBlbmFibGUKLSJEZXZpY2UgZHJpdmVycyIgPT4gIk11bHRpbWVkaWEgZGV2aWNlcyIKLSAgPT4gIlZpZGVvIEZvciBMaW51eCIgPT4gIkJUODQ4IFZpZGVvIEZvciBMaW51eCIKLQotRnVydGhlcm1vcmUgeW91IG5lZWQgdG8gZW5hYmxlCi0iRGV2aWNlIGRyaXZlcnMiID0+ICJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzIgotICA9PiAiRFZCIGZvciBMaW51eCIgIkRWQiBDb3JlIFN1cHBvcnQiICJCVDh4eCBiYXNlZCBQQ0kgY2FyZHMiCitDb21waWxpbmcga2VybmVsIHBsZWFzZSBlbmFibGU6CithLikiRGV2aWNlIGRyaXZlcnMiID0+ICJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJWaWRlbyBGb3IgTGludXgiID0+ICJCVDg0OCBWaWRlbyBGb3IgTGludXgiCitiLikiRGV2aWNlIGRyaXZlcnMiID0+ICJNdWx0aW1lZGlhIGRldmljZXMiID0+ICJEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzIgorID0+ICJEVkIgZm9yIExpbnV4IiAiRFZCIENvcmUgU3VwcG9ydCIgIkJ0OHh4IGJhc2VkIFBDSSBDYXJkcyIKIAogMikgTG9hZGluZyBNb2R1bGVzCiA9PT09PT09PT09PT09PT09PT0KIAotSW4gZ2VuZXJhbCB5b3UgbmVlZCB0byBsb2FkIHRoZSBidHR2IGRyaXZlciwgd2hpY2ggd2lsbCBoYW5kbGUgdGhlIGdwaW8gYW5kCi1pMmMgY29tbXVuaWNhdGlvbiBmb3IgdXMsIHBsdXMgdGhlIGNvbW1vbiBkdmItYnQ4eHggZGV2aWNlIGRyaXZlci4KLVRoZSBmcm9udGVuZHMgZm9yIE5lYnVsYSAobnh0NjAwMCksIFBpbm5hY2xlIFBDVFYgKGN4MjQxMTApLCBUd2luSGFuIChkc3QpLAotRnVzaW9uSERUViBEVkItVCBMaXRlIChtdDM1MikgYW5kIEZ1c2lvbkhEVFY1IExpdGUgKGxnZHQzMzB4KSBhcmUgbG9hZGVkCi1hdXRvbWF0aWNhbGx5IGJ5IHRoZSBkdmItYnQ4eHggZGV2aWNlIGRyaXZlci4KK0luIGRlZmF1bHQgY2FzZXMgYnR0diBpcyBsb2FkZWQgYXV0b21hdGljYWxseS4KK1RvIGxvYWQgdGhlIGJhY2tlbmQgZWl0aGVyIHBsYWNlIGR2Yi1idDh4eCBpbiBldGMvbW9kdWxlcywgb3IgYXBwbHkgbWFudWFsbHk6CiAKLTNhKSBOZWJ1bGEgLyBQaW5uYWNsZSBQQ1RWIC8gRnVzaW9uSERUViBMaXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkkIG1vZHByb2JlIGR2Yi1idDh4eAogCi0gICAkIG1vZHByb2JlIGJ0dHYgKG5vcm1hbGx5IGJ0dHYgaXMgYmVpbmcgbG9hZGVkIGF1dG9tYXRpY2FsbHkgYnkga21vZCkKLSAgICQgbW9kcHJvYmUgZHZiLWJ0OHh4CitBbGwgZnJvbnRlbmRzIHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuCitQZW9wbGUgcnVubmluZyB1ZGV2IHBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvdWRldi50eHQuCiAKLShvciBqdXN0IHBsYWNlIGR2Yi1idDh4eCBpbiAvZXRjL21vZHVsZXMgZm9yIGF1dG9tYXRpYyBsb2FkaW5nKQorSW4gdGhlIGZvbGxvd2luZyBjYXNlcyBvdmVycmlkaW5nIHRoZSBQQ0kgdHlwZSBkZXRlY3Rpb24gZm9yIGR2Yi1idDh4eCBtaWdodCBiZSBuZWNlc3Nhcnk6CiAKKzJhKSBSdW5uaW5nIFR3aW5IYW4gYW5kIENsb25lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLTNiKSBUd2luSGFuIGFuZCBDbG9uZXMKKwkkIG1vZHByb2JlIGJ0dHYgY2FyZD0xMTMKKwkkIG1vZHByb2JlIGR2Yi1idDh4eAorCSQgbW9kcHJvYmUgZHN0CisKK1VzZWZ1bCBwYXJhbWV0ZXJzIGZvciB2ZXJib3NpdHkgbGV2ZWwgYW5kIGRlYnVnZ2luZyB0aGUgZHN0IG1vZHVsZToKKwordmVyYm9zZT0wOgkJbWVzc2FnZXMgYXJlIGRpc2FibGVkCisJMToJCW9ubHkgZXJyb3IgbWVzc2FnZXMgYXJlIGRpc3BsYXllZAorCTI6CQlub3RpZmljYXRpb25zIGFyZSBkaXNwbGF5ZWQKKwkzOgkJb3RoZXIgdXNlZnVsIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQKKwk0OgkJZGVidWcgc2V0dGluZworZHN0X2FkZG9ucz0wOgkJY2FyZCBpcyBhIGZyZWUgdG8gYWlyIChGVEEpIGNhcmQgb25seQorCSAgIDB4MjA6CWNhcmQgaGFzIGEgY29uZGl0aW9uYWwgYWNjZXNzIHNsb3QgZm9yIHNjcmFtYmxlZCBjaGFubmVscworCitUaGUgYXV0b2RldGVjdGVkIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgY2FyZHMnICJyZXNwb25zZSBzdHJpbmciLgorSW4geW91ciBsb2dzIHNlZSBmLiBleC46IGRzdF9nZXRfZGV2aWNlX2lkOiBSZWNvZ25pemUgW0RTVE1DSV0uCitGb3IgYnVnIHJlcG9ydHMgcGxlYXNlIHNlbmQgaW4gYSBjb21wbGV0ZSBsb2cgd2l0aCB2ZXJib3NlPTQgYWN0aXZhdGVkLgorUGxlYXNlIGFsc28gc2VlIERvY3VtZW50YXRpb24vZHZiL2NpLnR4dC4KKworMmIpIFJ1bm5pbmcgbXVsdGlwbGUgY2FyZHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICQgbW9kcHJvYmUgYnR0diBjYXJkPTB4NzEKLSAgICQgbW9kcHJvYmUgZHZiLWJ0OHh4Ci0gICAkIG1vZHByb2JlIGRzdAorRXhhbXBsZXMgb2YgY2FyZCBJRCdzOgogCi1UaGUgdmFsdWUgMHg3MSB3aWxsIG92ZXJyaWRlIHRoZSBQQ0kgdHlwZSBkZXRlY3Rpb24gZm9yIGR2Yi1idDh4eCwKLXdoaWNoICBpcyBuZWNlc3NhcnkgZm9yIFR3aW5IYW4gY2FyZHMuIE9taXNzaW9uIG9mIHRoaXMgcGFyYW1ldGVyIG1pZ2h0IHJlc3VsdAotaW4gYSBzeXN0ZW0gbG9ja3VwLgorUGlubmFjbGUgUENUViBTYXQ6CQkgOTQKK05lYnVsYSBFbGVjdHJvbmljcyBEaWdpIFRWOgkxMDQKK3BjSERUViBIRC0yMDAwIFRWOgkJMTEyCitUd2luaGFuIERTVCBhbmQgY2xvbmVzOgkJMTEzCitBdmVybWVkaWEgQXZlclRWIERWQi1UIDc3MToJMTIzCitBdmVybWVkaWEgQXZlclRWIERWQi1UIDc2MToJMTI0CitEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGU6CTEyOAorRFZpQ08gRnVzaW9uSERUViA1IExpdGU6CTEzNQogCi1JZiB5b3UncmUgaGF2aW5nIGFuIG9sZGVyIGNhcmQgKGJsdWUgY29sb3IgUENCKSBhbmQgY2FyZD0weDcxIGxvY2tzIHVwCi15b3VyIG1hY2hpbmUsIHRyeSB1c2luZyAweDY4LCB0b28uIElmIHRoYXQgZG9lcyBub3Qgd29yaywgYXNrIG9uIHRoZQotbWFpbGluZyBsaXN0LgotCi1UaGUgRFNUIG1vZHVsZSB0YWtlcyBhIGNvdXBsZSBvZiB1c2VmdWwgcGFyYW1ldGVycy4KLQotdmVyYm9zZSB0YWtlcyB2YWx1ZXMgMCB0byA0LiBUaGVzZSB2YWx1ZXMgY29udHJvbCB0aGUgdmVyYm9zaXR5IGxldmVsLAotYW5kIGNhbiBiZSB1c2VkIHRvIGRlYnVnIGFsc28uCi0KLXZlcmJvc2U9MCBtZWFucyBjb21wbGV0ZSBkaXNhYmxpbmcgb2YgbWVzc2FnZXMKLQkxIG9ubHkgZXJyb3IgbWVzc2FnZXMgYXJlIGRpc3BsYXllZAotCTIgbm90aWZpY2F0aW9ucyBhcmUgYWxzbyBkaXNwbGF5ZWQKLQkzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgYXJlIGFsc28gZGlzcGxheWVkCi0JNCBkZWJ1ZyBzZXR0aW5nCi0KLWRzdF9hZGRvbnMgdGFrZXMgdmFsdWVzIDAgYW5kIDB4MjAuIEEgdmFsdWUgb2YgMCBtZWFucyBpdCBpcyBhIEZUQSBjYXJkLgotMHgyMCBtZWFucyBpdCBoYXMgYSBDb25kaXRpb25hbCBBY2Nlc3Mgc2xvdC4KLQotVGhlIGF1dG9kZXRlY3RlZCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGNhcmRzICdyZXNwb25zZSBzdHJpbmcnCi13aGljaCB5b3UgY2FuIHNlZSBpbiB5b3VyIGxvZ3MgZS5nLgotCi1kc3RfZ2V0X2RldmljZV9pZDogUmVjb2duaXNlIFtEU1RNQ0ldCi0KLUlmIHlvdSBuZWVkIHRvIHNlbnQgaW4gYnVnIHJlcG9ydHMgb24gdGhlIGRzdCwgcGxlYXNlIGRvIHNlbmQgaW4gYSBjb21wbGV0ZQotbG9nIHdpdGggdGhlIHZlcmJvc2U9NCBtb2R1bGUgcGFyYW1ldGVyLiBGb3IgZ2VuZXJhbCB1c2FnZSwgdGhlIGRlZmF1bHQgc2V0dGluZwotb2YgdmVyYm9zZT0xIGlzIGlkZWFsLgotCi0KLTQpIE11bHRpcGxlIGNhcmRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB5b3UgaGFwcGVuIHRvIGJlIHJ1bm5pbmcgbXVsdGlwbGUgY2FyZHMsIGl0IHdvdWxkIGJlIGFkdmlzYWJsZSB0byBsb2FkCi10aGUgYnR0diBtb2R1bGUgd2l0aCB0aGUgY2FyZCBpZC4gVGhpcyB3b3VsZCBoZWxwIHRvIHNvbHZlIGFueSBtb2R1bGUgbG9hZGluZwotcHJvYmxlbXMgdGhhdCB5b3UgbWlnaHQgZmFjZS4KLQotRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgVHdpbmhhbiBhbmQgQ2xvbmVzIGNhcmQgYWxvbmcgd2l0aCBhIEZ1c2lvbkhEVFY1IExpdGUKLQotCSQgbW9kcHJvYmUgYnR0diBjYXJkPTB4NzEgY2FyZD0weDg3Ci0KLUhlcmUgdGhlIG9yZGVyIG9mIHRoZSBjYXJkIGlkIGlzIGltcG9ydGFudCBhbmQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlCi1waHlzaWNhbCBvcmRlciBvZiB0aGUgY2FyZHMuIEhlcmUgY2FyZD0weDcxIHJlcHJlc2VudHMgdGhlIFR3aW5oYW4gYW5kIGNsb25lcwotYW5kIGNhcmQ9MHg4NyByZXByZXNlbnRzIEZ1c2lvbiBIRFRWNSBMaXRlLiBUaGVzZSBhcmd1bWVudHMgY2FuIGFsc28gYmUKLXNwZWNpZmllZCBpbiBkZWNpbWFsLCByYXRoZXIgdGhhbiBoZXg6Ci0KK05vdGljZTogVGhlIG9yZGVyIG9mIHRoZSBjYXJkIElEIHNob3VsZCBiZSB1cHJpc2luZzoKK0V4YW1wbGU6CiAJJCBtb2Rwcm9iZSBidHR2IGNhcmQ9MTEzIGNhcmQ9MTM1CisJJCBtb2Rwcm9iZSBkdmItYnQ4eHgKIAotU29tZSBleGFtcGxlcyBvZiBjYXJkLWlkJ3MKK0ZvciBhIGZ1bGwgbGlzdCBvZiBjYXJkIElEJ3MgcGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYuCitJbiBjYXNlIG9mIGZ1cnRoZXIgcHJvYmxlbXMgc2VuZCBxdWVzdGlvbnMgdG8gdGhlIG1haWxpbmcgbGlzdDogd3d3LmxpbnV4ZHZiLm9yZy4KIAotUGlubmFjbGUgU2F0CQkweDVlICAoOTQpCi1OZWJ1bGEgRGlnaSBUVgkJMHg2OCAgKDEwNCkKLVBDIEhEVFYJCQkweDcwICAoMTEyKQotVHdpbmhhbgkJCTB4NzEgICgxMTMpCi1GdXNpb25IRFRWIERWQi1UIExpdGUJMHg4MCAgKDEyOCkKLUZ1c2lvbkhEVFY1IExpdGUJMHg4NyAgKDEzNSkKLQotRm9yIGEgZnVsbCBsaXN0IG9mIGNhcmQtaWQncywgc2VlIHRoZSBWNEwgRG9jdW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbAotc291cmNlOiAgbGludXgvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2Ci0KLUlmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhpcyBwbGVhc2UgZG8gYXNrIG9uIHRoZSBtYWlsaW5nIGxpc3QuCi0KLS0tCi1BdXRob3JzOiBSaWNoYXJkIFdhbGtlciwgSmFtaWUgSG9uYW4sIE1pY2hhZWwgSHVub2xkLCBNYW51IEFicmFoYW0KK0F1dGhvcnM6IFJpY2hhcmQgV2Fsa2VyLAorCSBKYW1pZSBIb25hbiwKKwkgTWljaGFlbCBIdW5vbGQsCisJIE1hbnUgQWJyYWhhbSwKKwkgVXdlIEJ1Z2xhLAorCSBNaWNoYWVsIEtydWZreQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggNzVjMjhhMS4uMTVmYzhmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yMSw4ICsyMSw5IEBACiB1c2UgRmlsZTo6VGVtcCBxdy8gdGVtcGRpciAvOwogdXNlIElPOjpIYW5kbGU7CiAKLUBjb21wb25lbnRzID0gKCAic3A4ODcwIiwgInNwODg3eCIsICJ0ZGExMDA0NSIsICJ0ZGExMDA0NiIsICJhdjcxMTAiLCAiZGVjMjAwMHQiLAotCQkiZGVjMjU0MHQiLCAiZGVjMzAwMHMiLCAidnA3MDQxIiwgImRpYnVzYiIsICJueHQyMDAyIiwgIm54dDIwMDQiLAorQGNvbXBvbmVudHMgPSAoICJzcDg4NzAiLCAic3A4ODd4IiwgInRkYTEwMDQ1IiwgInRkYTEwMDQ2IiwKKwkJInRkYTEwMDQ2bGlmZXZpZXciLCAiYXY3MTEwIiwgImRlYzIwMDB0IiwgImRlYzI1NDB0IiwKKwkJImRlYzMwMDBzIiwgInZwNzA0MSIsICJkaWJ1c2IiLCAibnh0MjAwMiIsICJueHQyMDA0IiwKIAkJIm9yNTEyMTEiLCAib3I1MTEzMl9xYW0iLCAib3I1MTEzMl92c2IiLCAiYmx1ZWJpcmQiKTsKIAogIyBDaGVjayBhcmdzCkBAIC0xMjYsNiArMTI3LDI0IEBACiAgICAgJG91dGZpbGU7CiB9CiAKK3N1YiB0ZGExMDA0NmxpZmV2aWV3IHsKKyAgICBteSAkc291cmNlZmlsZSA9ICJEcnZfMi4xMS4wMi56aXAiOworICAgIG15ICR1cmwgPSAiaHR0cDovL3d3dy5saWZldmlldy5jb20udHcvZHJpdmVycy9wY2lfY2FyZC9GbHlEVkItVC8kc291cmNlZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiMWVhMjRkZWU0ZWVhOGZlOTcxNjg2OTgxZjM0ZmQyZTAiOworICAgIG15ICRvdXRmaWxlID0gImR2Yi1mZS10ZGExMDA0Ni5mdyI7CisgICAgbXkgJHRtcGRpciA9IHRlbXBkaXIoRElSID0+ICIvdG1wIiwgQ0xFQU5VUCA9PiAxKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIHdnZXRmaWxlKCRzb3VyY2VmaWxlLCAkdXJsKTsKKyAgICB1bnppcCgkc291cmNlZmlsZSwgJHRtcGRpcik7CisgICAgZXh0cmFjdCgiJHRtcGRpci9MVkh5YnJpZC5zeXMiLCAweDhiMDg4LCAyNDYwMiwgIiR0bXBkaXIvZnd0bXAiKTsKKyAgICB2ZXJpZnkoIiR0bXBkaXIvZnd0bXAiLCAkaGFzaCk7CisgICAgY29weSgiJHRtcGRpci9md3RtcCIsICRvdXRmaWxlKTsKKworICAgICRvdXRmaWxlOworfQorCiBzdWIgYXY3MTEwIHsKICAgICBteSAkc291cmNlZmlsZSA9ICJkdmItdHRwY2ktMDEuZnctMjYxZCI7CiAgICAgbXkgJHVybCA9ICJodHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8kc291cmNlZmlsZSI7CkBAIC0yMjcsNyArMjQ2LDcgQEAKIH0KIAogc3ViIGRpYnVzYiB7Ci0JbXkgJHVybCA9ICJodHRwOi8vd3d3LmxpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS9kdmItZGlidXNiLTUuMC4wLjExLmZ3IjsKKwlteSAkdXJsID0gImh0dHA6Ly93d3cubGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlL2R2Yi11c2ItZGlidXNiLTUuMC4wLjExLmZ3IjsKIAlteSAkb3V0ZmlsZSA9ICJkdmItZGlidXNiLTUuMC4wLjExLmZ3IjsKIAlteSAkaGFzaCA9ICJmYTQ5MDI5NWE1MjczNjBjYTE2ZGNkZjMyMjRjYTI0MyI7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHZiL3JlYWRtZS50eHQgYi9Eb2N1bWVudGF0aW9uL2R2Yi9yZWFkbWUudHh0CmluZGV4IGY1YzUwYjIuLjBiMDM4MGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHZiL3JlYWRtZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kdmIvcmVhZG1lLnR4dApAQCAtMjAsMTEgKzIwLDIzIEBACiAKIFdoYXQncyBpbnNpZGUgdGhpcyBkaXJlY3Rvcnk6CiAKKyJhdmVybWVkaWEudHh0IgorY29udGFpbnMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitBdmVybWVkaWEgRFZCLVQgY2FyZHMuIFNlZSBhbHNvICJidDh4eC50eHQiLgorCisiYnQ4eHgudHh0IgorY29udGFpbnMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCit2YXJpb3VzIGJ0OHh4IGJhc2VkICJidWRnZXQiIERWQiBjYXJkcy4KKwogImNhcmRzLnR4dCIKIGNvbnRhaW5zIGEgbGlzdCBvZiBzdXBwb3J0ZWQgaGFyZHdhcmUuCiAKKyJjaS50eHQiCitjb250YWlucyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK0NJIG1vZHVsZSBhcyBwYXJ0IGZyb20gVHdpbkhhbiBjYXJkcyBhbmQgQ2xvbmVzLgorCiAiY29udHJpYnV0b3JzLnR4dCIKLWlzIHRoZSB3aG8taXMtd2hvIG9mIERWQiBkZXZlbG9wbWVudAoraXMgdGhlIHdoby1pcy13aG8gb2YgRFZCIGRldmVsb3BtZW50LgogCiAiZmFxLnR4dCIKIGNvbnRhaW5zIGZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zIGFuZCB0aGVpciBhbnN3ZXJzLgpAQCAtMzQsMTkgKzQ2LDE3IEBACiB0aGF0IHJlcXVpcmUgaXQuCiAKICJ0dHVzYi1kZWMudHh0IgotY29udGFpbnMgZGV0YWlsZWQgaW5mb3JtYXRpb25zIGFib3V0IHRoZQorY29udGFpbnMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiBUVCBERUMyMDAwL0RFQzMwMDAgVVNCIERWQiBoYXJkd2FyZS4KIAotImJ0OHh4LnR4dCIKLWNvbnRhaW5zIGRldGFpbGVkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIHRoZQotdmFyaW91cyBidDh4eCBiYXNlZCAiYnVkZ2V0IiBEVkIgY2FyZHMKLShOZWJ1bGEsIFBpbm5hY2xlIFBDVFYsIFR3aW5oYW4gRFNUKQotCi0iUkVBRE1FLmRpYnVzYiIKLWNvbnRhaW5zIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGFkYXB0ZXJzCi1iYXNlZCBvbiBEaUJjb20gcmVmZXJlbmNlIGRlc2lnbi4KLQogInVkZXYudHh0IgogaG93IHRvIGdldCBEVkIgYW5kIHVkZXYgdXAgYW5kIHJ1bm5pbmcuCiAKKyJSRUFETUUuZHZiLXVzYiIKK2NvbnRhaW5zIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBEVkIgVVNCIGNhcmRzLgorCisiUkVBRE1FLmZsZXhjb3AiCitjb250YWlucyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK1RlY2huaXNhdC0gYW5kIEZsZXhjb3AgQjJDMiBkcml2ZXJzLgorCiBHb29kIGx1Y2sgYW5kIGhhdmUgZnVuIQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IGI3MzBkNzYuLjQ5NTg1OGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTExNiw2ICsxMTYsMTcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CXJlbW92ZSBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpCitXaGVuOglBdWd1c3QgMjAwNgorRmlsZXM6CWFyY2gvKi9rZXJuZWwvKl9rc3ltcy5jCitXaHk6CWtlcm5lbF90aHJlYWQgaXMgYSBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgRHJpdmVycyBzaG91bGQKKyAgICAgICAgdXNlIHRoZSA8bGludXgva3RocmVhZC5oPiBBUEkgaW5zdGVhZCB3aGljaCBzaGllbGRzIHRoZW0gZnJvbQorCWltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHByb3ZpZGVzIGEgaGlnaGVybGV2ZWwgaW50ZXJmYWNlIHRoYXQKKwlwcmV2ZW50cyBidWdzIGFuZCBjb2RlIGR1cGxpY2F0aW9uCitXaG86CUNocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJRVhQT1JUX1NZTUJPTChsb29rdXBfaGFzaCkKIFdoZW46CUphbnVhcnkgMjAwNgogV2h5OglUb28gbG93LWxldmVsIGludGVyZmFjZS4gIFVzZSBsb29rdXBfb25lX2xlbiBvciBsb29rdXBfY3JlYXRlIGluc3RlYWQuCkBAIC0xNTEsMTAgKzE2MiwxMCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJTGVnYWN5IC9wcm9jL3BjaSBpbnRlcmZhY2UgKFBDSV9MRUdBQ1lfUFJPQykKLVdoZW46CU1hcmNoIDIwMDYKLVdoeToJZGVwcmVjYXRlZCBzaW5jZSAyLjUuNTMgaW4gZmF2b3Igb2YgbHNwY2koOCkKLVdobzoJQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgorV2hhdDogICBlZXBybzEwMCBuZXR3b3JrIGRyaXZlcgorV2hlbjogICBKYW51YXJ5IDIwMDcKK1doeTogICAgcmVwbGFjZWQgYnkgdGhlIGUxMDAgZHJpdmVyCitXaG86ICAgIEFkcmlhbiBCdW5rIDxidW5rQHN0dXN0YS5kZT4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE2NSw5ICsxNzYsNjggQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CVVzYWdlIG9mIGludmFsaWQgdGltZXZhbHMgaW4gc2V0aXRpbWVyCitXaGVuOglNYXJjaCAyMDA3CitXaHk6CVBPU0lYIHJlcXVpcmVzIHRvIHZhbGlkYXRlIHRpbWV2YWxzIGluIHRoZSBzZXRpdGltZXIgY2FsbC4gVGhpcworCXdhcyBuZXZlciBkb25lIGJ5IExpbnV4LiBUaGUgaW52YWxpZCAoZS5nLiBuZWdhdGl2ZSB0aW1ldmFscykgd2VyZQorCXNpbGVudGx5IGNvbnZlcnRlZCB0byBtb3JlIG9yIGxlc3MgcmFuZG9tIHRpbWVvdXRzIGFuZCBpbnRlcnZhbHMuCisJVW50aWwgdGhlIHJlbW92YWwgYSBwZXIgYm9vdCBsaW1pdGVkIG51bWJlciBvZiB3YXJuaW5ncyBpcyBwcmludGVkCisJYW5kIHRoZSB0aW1ldmFscyBhcmUgc2FuaXRpemVkLgorCitXaG86CVRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJSTJDIGludGVyZmFjZSBvZiB0aGUgaXQ4NyBkcml2ZXIKIFdoZW46CUphbnVhcnkgMjAwNwogV2h5OglUaGUgSVNBIGludGVyZmFjZSBpcyBmYXN0ZXIgYW5kIHNob3VsZCBiZSBhbHdheXMgYXZhaWxhYmxlLiBUaGUgSTJDCiAJcHJvYmluZyBpcyBhbHNvIGtub3duIHRvIGNhdXNlIHRyb3VibGUgaW4gYXQgbGVhc3Qgb25lIGNhc2UgKHNlZQogCWJ1ZyAjNTg4OS4pCiBXaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJcmVtb3ZlIEVYUE9SVF9TWU1CT0wodGFza2xpc3RfbG9jaykKK1doZW46CUF1Z3VzdCAyMDA2CitGaWxlczoJa2VybmVsL2ZvcmsuYworV2h5Ogl0YXNrbGlzdF9sb2NrIHByb3RlY3RzIHRoZSBrZXJuZWwgaW50ZXJuYWwgdGFzayBsaXN0LiAgTW9kdWxlcyBoYXZlCisJbm8gYnVzaW5lc3MgbG9va2luZyBhdCBpdCwgYW5kIGFsbCBpbnN0YW5jZXMgaW4gZHJpdmVycyBoYXZlIGJlZW4gZHVlCisJdG8gdXNlIG9mIHRvby1sb3dsZXZlbCBBUElzLiAgSGF2aW5nIHRoaXMgc3ltYm9sIGV4cG9ydGVkIHByZXZlbnRzCisJbW92aW5nIHRvIG1vcmUgc2NhbGFibGUgbG9ja2luZyBzY2hlbWVzIGZvciB0aGUgdGFzayBsaXN0LgorV2hvOglDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CW1vdW50L3Vtb3VudCB1ZXZlbnRzCitXaGVuOglGZWJydWFyeSAyMDA3CitXaHk6CVRoZXNlIGV2ZW50cyBhcmUgbm90IGNvcnJlY3QsIGFuZCBkbyBub3QgcHJvcGVybHkgbGV0IHVzZXJzcGFjZSBrbm93CisJd2hlbiBhIGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQgb3IgdW5tb3VudGVkLiAgVXNlcnNwYWNlIHNob3VsZAorCXBvbGwgdGhlIC9wcm9jL21vdW50cyBmaWxlIGluc3RlYWQgdG8gZGV0ZWN0IHRoaXMgcHJvcGVybHkuCitXaG86CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglTdXBwb3J0IGZvciBORUMgRERCNTA3NCBhbmQgRERCNTQ3NiBldmFsdWF0aW9uIGJvYXJkcy4KK1doZW46CUp1bmUgMjAwNgorV2h5OglCb2FyZCBzcGVjaWZpYyBjb2RlIGRvZXNuJ3QgYnVpbGQgYW55bW9yZSBzaW5jZSB+Mi42LjAgYW5kIG5vCisJdXNlcnMgaGF2ZSBjb21wbGFpbmVkIGluZGljYXRpbmcgdGhlcmUgaXMgbm8gbW9yZSBuZWVkIGZvciB0aGVzZQorCWJvYXJkcy4gIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjb25zaWRlcmVkIGEgbGFzdCBjYWxsLgorV2hvOglSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglVU0IgZHJpdmVyIEFQSSBtb3ZlcyB0byBFWFBPUlRfU1lNQk9MX0dQTAorV2hlbjoJRmVidWFyeSAyMDA4CitGaWxlczoJaW5jbHVkZS9saW51eC91c2IuaCwgZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYworV2h5OglUaGUgVVNCIHN1YnN5c3RlbSBoYXMgY2hhbmdlZCBhIGxvdCBvdmVyIHRpbWUsIGFuZCBpdCBoYXMgYmVlbgorCXBvc3NpYmxlIHRvIGNyZWF0ZSB1c2Vyc3BhY2UgVVNCIGRyaXZlcnMgdXNpbmcgdXNiZnMvbGlidXNiL2dhZGdldGZzCisJdGhhdCBvcGVyYXRlIGFzIGZhc3QgYXMgdGhlIFVTQiBidXMgYWxsb3dzLiAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgVVNCCisJc3Vic3lzdGVtIHdpbGwgbm90IGJlIGFsbG93aW5nIGNsb3NlZCBzb3VyY2Uga2VybmVsIGRyaXZlcnMgdG8KKwlyZWdpc3RlciB3aXRoIGl0LCBhZnRlciB0aGlzIGdyYWNlIHBlcmlvZCBpcyBvdmVyLiAgSWYgYW55b25lIG5lZWRzCisJYW55IGhlbHAgaW4gY29udmVydGluZyB0aGVpciBjbG9zZWQgc291cmNlIGRyaXZlcnMgb3ZlciB0byB1c2UgdGhlCisJdXNlcnNwYWNlIGZpbGVzeXN0ZW1zLCBwbGVhc2UgY29udGFjdCB0aGUKKwlsaW51eC11c2ItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IG1haWxpbmcgbGlzdCwgYW5kIHRoZSBkZXZlbG9wZXJzCisJdGhlcmUgd2lsbCBiZSBnbGFkIHRvIGhlbHAgeW91IG91dC4KK1dobzoJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Y5ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92OWZzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKaW5kZXggNGU5MmZlYi4uNDNiODljMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92OWZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dApAQCAtMSw1ICsxLDUgQEAKLQkJCVY5RlM6IDlQMjAwMCBmb3IgTGludXgKLQkJCT09PT09PT09PT09PT09PT09PT09PT0KKwkgIAkgICAgdjlmczogUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgZm9yIExpbnV4CisJCSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQUJPVVQKID09PT09CkBAIC05LDE4ICs5LDE5IEBACiBUaGlzIHNvZnR3YXJlIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiBhbmQgTWF5YSBHb2toYWxlIDxtYXlhQGxhbmwuZ292Pi4gIEFkZGl0aW9uYWwgZGV2ZWxvcG1lbnQgYnkgR3JlZyBXYXRzb24KIDxnd2F0c29uQGxhbmwuZ292PiBhbmQgbW9zdCByZWNlbnRseSBFcmljIFZhbiBIZW5zYmVyZ2VuCi08ZXJpY3ZoQGdtYWlsLmNvbT4gYW5kIExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+LgorPGVyaWN2aEBnbWFpbC5jb20+LCBMYXRjaGVzYXIgSW9ua292IDxsdWNob0Bpb25rb3YubmV0PiBhbmQgUnVzcyBDb3gKKzxyc2NAc3d0Y2guY29tPi4KIAogVVNBR0UKID09PT09CiAKIEZvciByZW1vdGUgZmlsZSBzZXJ2ZXI6CiAKLQltb3VudCAtdCA5UCAxMC4xMC4xLjIgL21udC85CisJbW91bnQgLXQgOXAgMTAuMTAuMS4yIC9tbnQvOQogCiBGb3IgUGxhbiA5IEZyb20gVXNlciBTcGFjZSBhcHBsaWNhdGlvbnMgKGh0dHA6Ly9zd3RjaC5jb20vcGxhbjkpCiAKLQltb3VudCAtdCA5UCBgbmFtZXNwYWNlYC9hY21lIC9tbnQvOSAtbyBwcm90bz11bml4LG5hbWU9JFVTRVIKKwltb3VudCAtdCA5cCBgbmFtZXNwYWNlYC9hY21lIC9tbnQvOSAtbyBwcm90bz11bml4LHVuYW1lPSRVU0VSCiAKIE9QVElPTlMKID09PT09PT0KQEAgLTMyLDcgKzMzLDcgQEAKICAJCQlmZCAgIC0gdXNlZCBwYXNzZWQgZmlsZSBkZXNjcmlwdG9ycyBmb3IgY29ubmVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIHJmZG5vIGFuZCB3ZmRubykKIAotICBuYW1lPW5hbWUJdXNlciBuYW1lIHRvIGF0dGVtcHQgbW91bnQgYXMgb24gdGhlIHJlbW90ZSBzZXJ2ZXIuICBUaGUKKyAgdW5hbWU9bmFtZQl1c2VyIG5hbWUgdG8gYXR0ZW1wdCBtb3VudCBhcyBvbiB0aGUgcmVtb3RlIHNlcnZlci4gIFRoZQogICAJCXNlcnZlciBtYXkgb3ZlcnJpZGUgb3IgaWdub3JlIHRoaXMgdmFsdWUuICBDZXJ0YWluIHVzZXIKIAkJbmFtZXMgbWF5IHJlcXVpcmUgYXV0aGVudGljYXRpb24uCiAKQEAgLTQyLDcgKzQzLDcgQEAKICAgZGVidWc9bglzcGVjaWZpZXMgZGVidWcgbGV2ZWwuICBUaGUgZGVidWcgbGV2ZWwgaXMgYSBiaXRtYXNrLgogICAJCQkweDAxID0gZGlzcGxheSB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzCiAJCQkweDAyID0gZGV2ZWxvcGVyIGRlYnVnIChERUJVR19DVVJSRU5UKQotCQkJMHgwNCA9IGRpc3BsYXkgOVAgdHJhY2UKKwkJCTB4MDQgPSBkaXNwbGF5IDlwIHRyYWNlCiAJCQkweDA4ID0gZGlzcGxheSBWRlMgdHJhY2UKIAkJCTB4MTAgPSBkaXNwbGF5IE1hcnNoYWxsaW5nIGRlYnVnCiAJCQkweDIwID0gZGlzcGxheSBSUEMgZGVidWcKQEAgLTUzLDEzICs1NCwxMSBAQAogCiAgIHdmZG5vPW4JdGhlIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGluZyB3aXRoIHByb3RvPWZkCiAKLSAgbWF4ZGF0YT1uCXRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdXNlIGZvciA5UCBwYWNrZXQgcGF5bG9hZCAobXNpemUpCisgIG1heGRhdGE9bgl0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHVzZSBmb3IgOXAgcGFja2V0IHBheWxvYWQgKG1zaXplKQogCiAgIHBvcnQ9bglwb3J0IHRvIGNvbm5lY3QgdG8gb24gdGhlIHJlbW90ZSBzZXJ2ZXIKIAotICB0aW1lb3V0PW4JcmVxdWVzdCB0aW1lb3V0cyAoaW4gbXMpIChkZWZhdWx0IDYwMDAwbXMpCi0KLSAgbm9leHRlbmQJZm9yY2UgbGVnYWN5IG1vZGUgKG5vIDlQMjAwMC51IHNlbWFudGljcykKKyAgbm9leHRlbmQJZm9yY2UgbGVnYWN5IG1vZGUgKG5vIDlwMjAwMC51IHNlbWFudGljcykKIAogICB1aWQJCWF0dGVtcHQgdG8gbW91bnQgYXMgYSBwYXJ0aWN1bGFyIHVpZAogCkBAIC03NCwxMCArNzMsMTYgQEAKIFJFU09VUkNFUwogPT09PT09PT09CiAKLVRoZSBMaW51eCB2ZXJzaW9uIG9mIHRoZSA5UCBzZXJ2ZXIsIGFsb25nIHdpdGggc29tZSBjbGllbnQtc2lkZSB1dGlsaXRpZXMKLWNhbiBiZSBmb3VuZCBhdCBodHRwOi8vdjlmcy5zZi5uZXQgKGFsb25nIHdpdGggYSBDVlMgcmVwb3NpdG9yeSBvZiB0aGUKLWRldmVsb3BtZW50IGJyYW5jaCBvZiB0aGlzIG1vZHVsZSkuICBUaGVyZSBhcmUgdXNlciBhbmQgZGV2ZWxvcGVyIG1haWxpbmcKLWxpc3RzIGhlcmUsIGFzIHdlbGwgYXMgYSBidWctdHJhY2tlci4KK1RoZSBMaW51eCB2ZXJzaW9uIG9mIHRoZSA5cCBzZXJ2ZXIgaXMgbm93IG1haW50YWluZWQgdW5kZXIgdGhlIG5wZnMgcHJvamVjdAorb24gc291cmNlZm9yZ2UgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbnBmcykuCisKK1RoZXJlIGFyZSB1c2VyIGFuZCBkZXZlbG9wZXIgbWFpbGluZyBsaXN0cyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgdjlmcyBwcm9qZWN0CitvbiBzb3VyY2Vmb3JnZSAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy92OWZzKS4KKworTmV3cyBhbmQgb3RoZXIgaW5mb3JtYXRpb24gaXMgbWFpbnRhaW5lZCBvbiBTV2lLIChodHRwOi8vc3dpay5uZXQvdjlmcykuCisKK0J1ZyByZXBvcnRzIG1heSBiZSBpc3N1ZWQgdGhyb3VnaCB0aGUga2VybmVsLm9yZyBidWd6aWxsYSAKKyhodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZykKIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFBsYW4gOSBPcGVyYXRpbmcgU3lzdGVtIGNoZWNrIG91dAogaHR0cDovL3BsYW45LmJlbGwtbGFicy5jb20vcGxhbjkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaXNvZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pc29mcy50eHQKaW5kZXggNDI0NTg1Zi4uNzU4ZTUwNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pc29mcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pc29mcy50eHQKQEAgLTksOSArOSw5IEBACiAgIGlvY2hhcnNldD1uYW1lIENoYXJhY3RlciBzZXQgdG8gdXNlIGZvciBjb252ZXJ0aW5nIGZyb20gVW5pY29kZSB0bwogCQlBU0NJSS4gIEpvbGlldCBmaWxlbmFtZXMgYXJlIHN0b3JlZCBpbiBVbmljb2RlIGZvcm1hdCwgYnV0CiAJCVVuaXggZm9yIHRoZSBtb3N0IHBhcnQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsIHdpdGggVW5pY29kZS4KLQkJVGhlcmUgaXMgYWxzbyBhbiBvcHRpb24gb2YgZG9pbmcgVVRGOCB0cmFuc2xhdGlvbnMgd2l0aCB0aGUKKwkJVGhlcmUgaXMgYWxzbyBhbiBvcHRpb24gb2YgZG9pbmcgVVRGLTggdHJhbnNsYXRpb25zIHdpdGggdGhlCiAJCXV0Zjggb3B0aW9uLgotICB1dGY4ICAgICAgICAgIEVuY29kZSBVbmljb2RlIG5hbWVzIGluIFVURjggZm9ybWF0LiBEZWZhdWx0IGlzIG5vLgorICB1dGY4ICAgICAgICAgIEVuY29kZSBVbmljb2RlIG5hbWVzIGluIFVURi04IGZvcm1hdC4gRGVmYXVsdCBpcyBuby4KIAogTW91bnQgb3B0aW9ucyB1bmlxdWUgdG8gdGhlIGlzb2ZzIGZpbGVzeXN0ZW0uCiAgIGJsb2NrPTUxMiAgICAgU2V0IHRoZSBibG9jayBzaXplIGZvciB0aGUgZGlzayB0byA1MTIgYnl0ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvamZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvamZzLnR4dAppbmRleCAzZTk5MmRhLi5iYWUxMjg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2pmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9qZnMudHh0CkBAIC02LDcgKzYsNyBAQAogCiBpb2NoYXJzZXQ9bmFtZQlDaGFyYWN0ZXIgc2V0IHRvIHVzZSBmb3IgY29udmVydGluZyBmcm9tIFVuaWNvZGUgdG8KIAkJQVNDSUkuICBUaGUgZGVmYXVsdCBpcyB0byBkbyBubyBjb252ZXJzaW9uLiAgVXNlCi0JCWlvY2hhcnNldD11dGY4IGZvciBVVEY4IHRyYW5zbGF0aW9ucy4gIFRoaXMgcmVxdWlyZXMKKwkJaW9jaGFyc2V0PXV0ZjggZm9yIFVURi04IHRyYW5zbGF0aW9ucy4gIFRoaXMgcmVxdWlyZXMKIAkJQ09ORklHX05MU19VVEY4IHRvIGJlIHNldCBpbiB0aGUga2VybmVsIC5jb25maWcgZmlsZS4KIAkJaW9jaGFyc2V0PW5vbmUgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGV4cGxpY2l0bHkuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CmluZGV4IDYxNGRlMzEuLjYzOGNiZDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dApAQCAtNDU3LDYgKzQ1NywxNyBAQAogCiBOb3RlLCBhIHRlY2huaWNhbCBDaGFuZ2VMb2cgYWltZWQgYXQga2VybmVsIGhhY2tlcnMgaXMgaW4gZnMvbnRmcy9DaGFuZ2VMb2cuCiAKKzIuMS4yNzoKKwktIEltcGxlbWVudCBwYWdlIG1pZ3JhdGlvbiBzdXBwb3J0IHNvIHRoZSBrZXJuZWwgY2FuIG1vdmUgbWVtb3J5IHVzZWQKKwkgIGJ5IE5URlMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyb3VuZCBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlcy4KKwktIEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIHRvIHNwYXJzZSBmaWxlcyBjcmVhdGVkIHdpdGggV2luZG93cyBYUCBTUDIuCisJLSBNYW55IG1pbm9yIGltcHJvdmVtZW50cyBhbmQgYnVnIGZpeGVzLgorMi4xLjI2OgorCS0gSW1wbGVtZW50IHN1cHBvcnQgZm9yIHNlY3RvciBzaXplcyBhYm92ZSA1MTIgYnl0ZXMgKHVwIHRvIHRoZSBtYXhpbXVtCisJICBzdXBwb3J0ZWQgYnkgTlRGUyB3aGljaCBpcyA0MDk2IGJ5dGVzKS4KKwktIEVuaGFuY2Ugc3VwcG9ydCBmb3IgTlRGUyB2b2x1bWVzIHdoaWNoIHdlcmUgc3VwcG9ydGVkIGJ5IFdpbmRvd3MgYnV0CisJICBub3QgYnkgTGludXggZHVlIHRvIGludmFsaWQgYXR0cmlidXRlIGxpc3QgYXR0cmlidXRlIGZsYWdzLgorCS0gQSBmZXcgbWlub3IgdXBkYXRlcyBhbmQgYnVnIGZpeGVzLgogMi4xLjI1OgogCS0gV3JpdGUgc3VwcG9ydCBpcyBub3cgZXh0ZW5kZWQgd2l0aCB3cml0ZSgyKSBiZWluZyBhYmxlIHRvIGJvdGgKIAkgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIGRhdGEgYW5kIHRvIGV4dGVuZCBmaWxlcy4gIEFsc28sIGlmIGEgd3JpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDk0NGNmMTAuLjk5OTAyYWU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTEyMSw3ICsxMjEsNyBAQAogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAgRmlsZSAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGNtZGxpbmUgQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAKLSBjcHUJIEN1cnJlbnQgYW5kIGxhc3QgY3B1IGluIHdpY2ggaXQgd2FzIGV4ZWN1dGVkCQkoMi40KShzbXApCisgY3B1CSBDdXJyZW50IGFuZCBsYXN0IGNwdSBpbiB3aGljaCBpdCB3YXMgZXhlY3V0ZWQJCSgyLjQpKHNtcCkKICBjd2QJIExpbmsgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICBlbnZpcm9uIFZhbHVlcyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgICAgICAKICBleGUJIExpbmsgdG8gdGhlIGV4ZWN1dGFibGUgb2YgdGhpcyBwcm9jZXNzCkBAIC0zMDksMTMgKzMwOSwxMyBAQAogICA+IGNhdCAvcHJvYy9pcnEvMC9zbXBfYWZmaW5pdHkgCiAgIGZmZmZmZmZmCiAKLUl0J3MgYSBiaXRtYXNrLCBpbiB3aWNoIHlvdSBjYW4gc3BlY2lmeSB3aWNoIENQVXMgY2FuIGhhbmRsZSB0aGUgSVJRLCB5b3UgY2FuCitJdCdzIGEgYml0bWFzaywgaW4gd2hpY2ggeW91IGNhbiBzcGVjaWZ5IHdoaWNoIENQVXMgY2FuIGhhbmRsZSB0aGUgSVJRLCB5b3UgY2FuCiBzZXQgaXQgYnkgZG9pbmc6CiAKICAgPiBlY2hvIDEgPiAvcHJvYy9pcnEvcHJvZl9jcHVfbWFzawogCiBUaGlzIG1lYW5zIHRoYXQgb25seSB0aGUgZmlyc3QgQ1BVIHdpbGwgaGFuZGxlIHRoZSBJUlEsIGJ1dCB5b3UgY2FuIGFsc28gZWNobyA1Ci13aWNoIG1lYW5zIHRoYXQgb25seSB0aGUgZmlyc3QgYW5kIGZvdXJ0aCBDUFUgY2FuIGhhbmRsZSB0aGUgSVJRLgord2hpY2ggbWVhbnMgdGhhdCBvbmx5IHRoZSBmaXJzdCBhbmQgZm91cnRoIENQVSBjYW4gaGFuZGxlIHRoZSBJUlEuCiAKIFRoZSB3YXkgSVJRcyBhcmUgcm91dGVkIGlzIGhhbmRsZWQgYnkgdGhlIElPLUFQSUMsIGFuZCBpdCdzIFJvdW5kIFJvYmluCiBiZXR3ZWVuIGFsbCB0aGUgQ1BVcyB3aGljaCBhcmUgYWxsb3dlZCB0byBoYW5kbGUgaXQuIEFzIHVzdWFsIHRoZSBrZXJuZWwgaGFzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMudHh0CmluZGV4IGRiZTRkODcuLjE3NzMxMDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMudHh0CkBAIC03OSwxNSArNzksMjcgQEAKIAogCiB0bXBmcyBoYXMgYSBtb3VudCBvcHRpb24gdG8gc2V0IHRoZSBOVU1BIG1lbW9yeSBhbGxvY2F0aW9uIHBvbGljeSBmb3IKLWFsbCBmaWxlcyBpbiB0aGF0IGluc3RhbmNlOgotbXBvbD1pbnRlcmxlYXZlCQlwcmVmZXJzIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tIGVhY2ggbm9kZSBpbiB0dXJuCi1tcG9sPWRlZmF1bHQJCXByZWZlcnMgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20gdGhlIGxvY2FsIG5vZGUKLW1wb2w9YmluZAkJcHJlZmVycyB0byBhbGxvY2F0ZSBmcm9tIG1wb2xfbm9kZWxpc3QKLW1wb2w9cHJlZmVycmVkCQlwcmVmZXJzIHRvIGFsbG9jYXRlIGZyb20gZmlyc3Qgbm9kZSBpbiBtcG9sX25vZGVsaXN0CithbGwgZmlsZXMgaW4gdGhhdCBpbnN0YW5jZSAoaWYgQ09ORklHX05VTUEgaXMgZW5hYmxlZCkgLSB3aGljaCBjYW4gYmUKK2FkanVzdGVkIG9uIHRoZSBmbHkgdmlhICdtb3VudCAtbyByZW1vdW50IC4uLicKIAotVGhlIGZvbGxvd2luZyBtb3VudCBvcHRpb24gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG1wb2w9aW50ZXJsZWF2ZSwKLW1wb2w9YmluZCBvciBtcG9sPXByZWZlcnJlZDoKLW1wb2xfbm9kZWxpc3Q6CW5vZGVsaXN0IHN1aXRhYmxlIGZvciBwYXJzaW5nIHdpdGggbm9kZWxpc3RfcGFyc2UuCittcG9sPWRlZmF1bHQgICAgICAgICAgICAgcHJlZmVycyB0byBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGUgbG9jYWwgbm9kZQorbXBvbD1wcmVmZXI6Tm9kZSAgICAgICAgIHByZWZlcnMgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20gdGhlIGdpdmVuIE5vZGUKK21wb2w9YmluZDpOb2RlTGlzdCAgICAgICBhbGxvY2F0ZXMgbWVtb3J5IG9ubHkgZnJvbSBub2RlcyBpbiBOb2RlTGlzdAorbXBvbD1pbnRlcmxlYXZlICAgICAgICAgIHByZWZlcnMgdG8gYWxsb2NhdGUgZnJvbSBlYWNoIG5vZGUgaW4gdHVybgorbXBvbD1pbnRlcmxlYXZlOk5vZGVMaXN0IGFsbG9jYXRlcyBmcm9tIGVhY2ggbm9kZSBvZiBOb2RlTGlzdCBpbiB0dXJuCisKK05vZGVMaXN0IGZvcm1hdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlY2ltYWwgbnVtYmVycyBhbmQgcmFuZ2VzLAorYSByYW5nZSBiZWluZyB0d28gaHlwaGVuLXNlcGFyYXRlZCBkZWNpbWFsIG51bWJlcnMsIHRoZSBzbWFsbGVzdCBhbmQKK2xhcmdlc3Qgbm9kZSBudW1iZXJzIGluIHRoZSByYW5nZS4gIEZvciBleGFtcGxlLCBtcG9sPWJpbmQ6MC0zLDUsNyw5LTE1CisKK05vdGUgdGhhdCB0cnlpbmcgdG8gbW91bnQgYSB0bXBmcyB3aXRoIGFuIG1wb2wgb3B0aW9uIHdpbGwgZmFpbCBpZiB0aGUKK3J1bm5pbmcga2VybmVsIGRvZXMgbm90IHN1cHBvcnQgTlVNQTsgYW5kIHdpbGwgZmFpbCBpZiBpdHMgbm9kZWxpc3QKK3NwZWNpZmllcyBhIG5vZGUgPj0gTUFYX05VTU5PREVTLiAgSWYgeW91ciBzeXN0ZW0gcmVsaWVzIG9uIHRoYXQgdG1wZnMKK2JlaW5nIG1vdW50ZWQsIGJ1dCBmcm9tIHRpbWUgdG8gdGltZSBydW5zIGEga2VybmVsIGJ1aWx0IHdpdGhvdXQgTlVNQQorY2FwYWJpbGl0eSAocGVyaGFwcyBhIHNhZmUgcmVjb3Zlcnkga2VybmVsKSwgb3IgY29uZmlndXJlZCB0byBzdXBwb3J0CitmZXdlciBub2RlcywgdGhlbiBpdCBpcyBhZHZpc2FibGUgdG8gb21pdCB0aGUgbXBvbCBvcHRpb24gZnJvbSBhdXRvbWF0aWMKK21vdW50IG9wdGlvbnMuICBJdCBjYW4gYmUgYWRkZWQgbGF0ZXIsIHdoZW4gdGhlIHRtcGZzIGlzIGFscmVhZHkgbW91bnRlZAorb24gTW91bnRQb2ludCwgYnkgJ21vdW50IC1vIHJlbW91bnQsbXBvbD1Qb2xpY3k6Tm9kZUxpc3QgTW91bnRQb2ludCcuCiAKIAogVG8gc3BlY2lmeSB0aGUgaW5pdGlhbCByb290IGRpcmVjdG9yeSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIG1vdW50CkBAIC0xMDksNCArMTIxLDQgQEAKIEF1dGhvcjoKICAgIENocmlzdG9waCBSb2hsYW5kIDxjckBzYXAuY29tPiwgMS4xMi4wMQogVXBkYXRlZDoKLSAgIEh1Z2ggRGlja2lucyA8aHVnaEB2ZXJpdGFzLmNvbT4sIDEzIE1hcmNoIDIwMDUKKyAgIEh1Z2ggRGlja2lucyA8aHVnaEB2ZXJpdGFzLmNvbT4sIDE5IEZlYnJ1YXJ5IDIwMDYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dAppbmRleCBlNTIxM2JjLi41MTFiNDIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0CkBAIC0yNiw2ICsyNiwyMCBAQAogCW5vc3RyaWN0CVVuc2V0IHN0cmljdCBjb25mb3JtYW5jZQogCWlvY2hhcnNldD0JU2V0IHRoZSBOTFMgY2hhcmFjdGVyIHNldAogCitUaGUgdWlkPSBhbmQgZ2lkPSBvcHRpb25zIG5lZWQgYSBiaXQgbW9yZSBleHBsYWluaW5nLiAgVGhleSB3aWxsIGFjY2VwdCBhCitkZWNpbWFsIG51bWVyaWMgdmFsdWUgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IElEIGZvciB0aGF0IG1vdW50LgorVGhleSB3aWxsIGFsc28gYWNjZXB0IHRoZSBzdHJpbmcgImlnbm9yZSIgYW5kICJmb3JnZXQiLiAgRm9yIGZpbGVzIG9uIHRoZSBkaXNrCit0aGF0IGFyZSBvd25lZCBieSBub2JvZHkgKCAtMSApLCB0aGV5IHdpbGwgaW5zdGVhZCBsb29rIGFzIGlmIHRoZXkgYXJlIG93bmVkCitieSB0aGUgZGVmYXVsdCBJRC4gIFRoZSBpZ25vcmUgb3B0aW9uIGNhdXNlcyB0aGUgZGVmYXVsdCBJRCB0byBvdmVycmlkZSBhbGwKK0lEcyBvbiB0aGUgZGlzaywgbm90IGp1c3QgLTEuICBUaGUgZm9yZ2V0IG9wdGlvbiBjYXVzZXMgYWxsIElEcyB0byBiZSB3cml0dGVuCit0byBkaXNrIGFzIC0xLCBzbyB3aGVuIHRoZSBtZWRpYSBpcyBsYXRlciByZW1vdW50ZWQsIHRoZXkgd2lsbCBhcHBlYXIgdG8gYmUKK293bmVkIGJ5IHdoYXRldmVyIGRlZmF1bHQgSUQgaXQgaXMgbW91bnRlZCB3aXRoIGF0IHRoYXQgdGltZS4KKworRm9yIHR5cGljYWwgZGVza3RvcCB1c2Ugb2YgcmVtb3ZhYmxlIG1lZGlhLCB5b3Ugc2hvdWxkIHNldCB0aGUgSUQgdG8gdGhhdAorb2YgdGhlIGludGVyYWN0aXZlbHkgbG9nZ2VkIG9uIHVzZXIsIGFuZCBhbHNvIHNwZWNpZnkgYm90aCB0aGUgZm9yZ2V0IGFuZAoraWdub3JlIG9wdGlvbnMuICBUaGlzIHdheSB0aGUgaW50ZXJhY3RpdmUgdXNlciB3aWxsIGFsd2F5cyBzZWUgdGhlIGZpbGVzCitvbiB0aGUgZGlzayBhcyBiZWxvbmdpbmcgdG8gaGltLgorCiBUaGUgcmVtYWluaW5nIGFyZSBmb3IgZGVidWdnaW5nIGFuZCBkaXNhc3RlciByZWNvdmVyeToKIAogCW5vdnJzCQlTa2lwIHZvbHVtZSBzZXF1ZW5jZSByZWNvZ25pdGlvbiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CmluZGV4IDVlYWQyMGMuLjIwMDFhYmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dApAQCAtMjgsMTYgKzI4LDE2IEBACiAJCSBrbm93IGhvdyB0byBkZWFsIHdpdGggVW5pY29kZS4KIAkJIEJ5IGRlZmF1bHQsIEZBVF9ERUZBVUxUX0lPQ0hBUlNFVCBzZXR0aW5nIGlzIHVzZWQuCiAKLQkJIFRoZXJlIGlzIGFsc28gYW4gb3B0aW9uIG9mIGRvaW5nIFVURjggdHJhbnNsYXRpb25zCisJCSBUaGVyZSBpcyBhbHNvIGFuIG9wdGlvbiBvZiBkb2luZyBVVEYtOCB0cmFuc2xhdGlvbnMKIAkJIHdpdGggdGhlIHV0Zjggb3B0aW9uLgogCiAJCSBOT1RFOiAiaW9jaGFyc2V0PXV0ZjgiIGlzIG5vdCByZWNvbW1lbmRlZC4gSWYgdW5zdXJlLAogCQkgeW91IHNob3VsZCBjb25zaWRlciB0aGUgZm9sbG93aW5nIG9wdGlvbiBpbnN0ZWFkLgogCi11dGY4PTxib29sPiAgIC0tIFVURjggaXMgdGhlIGZpbGVzeXN0ZW0gc2FmZSB2ZXJzaW9uIG9mIFVuaWNvZGUgdGhhdAordXRmOD08Ym9vbD4gICAtLSBVVEYtOCBpcyB0aGUgZmlsZXN5c3RlbSBzYWZlIHZlcnNpb24gb2YgVW5pY29kZSB0aGF0CiAJCSBpcyB1c2VkIGJ5IHRoZSBjb25zb2xlLiAgSXQgY2FuIGJlIGJlIGVuYWJsZWQgZm9yIHRoZQogCQkgZmlsZXN5c3RlbSB3aXRoIHRoaXMgb3B0aW9uLiBJZiAndW5pX3hsYXRlJyBnZXRzIHNldCwKLQkJIFVURjggZ2V0cyBkaXNhYmxlZC4KKwkJIFVURi04IGdldHMgZGlzYWJsZWQuCiAKIHVuaV94bGF0ZT08Ym9vbD4gLS0gVHJhbnNsYXRlIHVuaGFuZGxlZCBVbmljb2RlIGNoYXJhY3RlcnMgdG8gc3BlY2lhbAogCQkgZXNjYXBlZCBzZXF1ZW5jZXMuICBUaGlzIHdvdWxkIGxldCB5b3UgYmFja3VwIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CmluZGV4IGU1NmU4NDI4Li5hZGFhODk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CkBAIC0yMzAsMTAgKzIzMCwxNSBAQAogb3IgYm90dG9tIGhhbGYpLgogCiAgIGFsbG9jX2lub2RlOiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgaW5vZGVfYWxsb2MoKSB0byBhbGxvY2F0ZSBtZW1vcnkKLSAJZm9yIHN0cnVjdCBpbm9kZSBhbmQgaW5pdGlhbGl6ZSBpdC4KKyAJZm9yIHN0cnVjdCBpbm9kZSBhbmQgaW5pdGlhbGl6ZSBpdC4gIElmIHRoaXMgZnVuY3Rpb24gaXMgbm90CisgCWRlZmluZWQsIGEgc2ltcGxlICdzdHJ1Y3QgaW5vZGUnIGlzIGFsbG9jYXRlZC4gIE5vcm1hbGx5CisgCWFsbG9jX2lub2RlIHdpbGwgYmUgdXNlZCB0byBhbGxvY2F0ZSBhIGxhcmdlciBzdHJ1Y3R1cmUgd2hpY2gKKyAJY29udGFpbnMgYSAnc3RydWN0IGlub2RlJyBlbWJlZGRlZCB3aXRoaW4gaXQuCiAKICAgZGVzdHJveV9pbm9kZTogdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGRlc3Ryb3lfaW5vZGUoKSB0byByZWxlYXNlCi0gIAlyZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBzdHJ1Y3QgaW5vZGUuCisgIAlyZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBzdHJ1Y3QgaW5vZGUuICBJdCBpcyBvbmx5IHJlcXVpcmVkIGlmCisgIAktPmFsbG9jX2lub2RlIHdhcyBkZWZpbmVkIGFuZCBzaW1wbHkgdW5kb2VzIGFueXRoaW5nIGRvbmUgYnkKKwktPmFsbG9jX2lub2RlLgogCiAgIHJlYWRfaW5vZGU6IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byByZWFkIGEgc3BlY2lmaWMgaW5vZGUgZnJvbSB0aGUKICAgICAgICAgbW91bnRlZCBmaWxlc3lzdGVtLiAgVGhlIGlfaW5vIG1lbWJlciBpbiB0aGUgc3RydWN0IGlub2RlIGlzCkBAIC00NDMsMTQgKzQ0OCw4MSBAQAogVGhlIEFkZHJlc3MgU3BhY2UgT2JqZWN0CiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGFkZHJlc3Mgc3BhY2Ugb2JqZWN0IGlzIHVzZWQgdG8gaWRlbnRpZnkgcGFnZXMgaW4gdGhlIHBhZ2UgY2FjaGUuCitUaGUgYWRkcmVzcyBzcGFjZSBvYmplY3QgaXMgdXNlZCB0byBncm91cCBhbmQgbWFuYWdlIHBhZ2VzIGluIHRoZSBwYWdlCitjYWNoZS4gIEl0IGNhbiBiZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHBhZ2VzIGluIGEgZmlsZSAob3IKK2FueXRoaW5nIGVsc2UpIGFuZCBhbHNvIHRyYWNrIHRoZSBtYXBwaW5nIG9mIHNlY3Rpb25zIG9mIHRoZSBmaWxlIGludG8KK3Byb2Nlc3MgYWRkcmVzcyBzcGFjZXMuCiAKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBkaXN0aW5jdCB5ZXQgcmVsYXRlZCBzZXJ2aWNlcyB0aGF0IGFuCithZGRyZXNzLXNwYWNlIGNhbiBwcm92aWRlLiAgVGhlc2UgaW5jbHVkZSBjb21tdW5pY2F0aW5nIG1lbW9yeQorcHJlc3N1cmUsIHBhZ2UgbG9va3VwIGJ5IGFkZHJlc3MsIGFuZCBrZWVwaW5nIHRyYWNrIG9mIHBhZ2VzIHRhZ2dlZCBhcworRGlydHkgb3IgV3JpdGViYWNrLgorCitUaGUgZmlyc3QgY2FuIGJlIHVzZWQgaW5kZXBlbmRlbnRseSB0byB0aGUgb3RoZXJzLiAgVGhlIFZNIGNhbiB0cnkgdG8KK2VpdGhlciB3cml0ZSBkaXJ0eSBwYWdlcyBpbiBvcmRlciB0byBjbGVhbiB0aGVtLCBvciByZWxlYXNlIGNsZWFuCitwYWdlcyBpbiBvcmRlciB0byByZXVzZSB0aGVtLiAgVG8gZG8gdGhpcyBpdCBjYW4gY2FsbCB0aGUgLT53cml0ZXBhZ2UKK21ldGhvZCBvbiBkaXJ0eSBwYWdlcywgYW5kIC0+cmVsZWFzZXBhZ2Ugb24gY2xlYW4gcGFnZXMgd2l0aAorUGFnZVByaXZhdGUgc2V0LiBDbGVhbiBwYWdlcyB3aXRob3V0IFBhZ2VQcml2YXRlIGFuZCB3aXRoIG5vIGV4dGVybmFsCityZWZlcmVuY2VzIHdpbGwgYmUgcmVsZWFzZWQgd2l0aG91dCBub3RpY2UgYmVpbmcgZ2l2ZW4gdG8gdGhlCithZGRyZXNzX3NwYWNlLgorCitUbyBhY2hpZXZlIHRoaXMgZnVuY3Rpb25hbGl0eSwgcGFnZXMgbmVlZCB0byBiZSBwbGFjZWQgb24gYW4gTFJVIHdpdGgKK2xydV9jYWNoZV9hZGQgYW5kIG1hcmtfcGFnZV9hY3RpdmUgbmVlZHMgdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZQorcGFnZSBpcyB1c2VkLgorCitQYWdlcyBhcmUgbm9ybWFsbHkga2VwdCBpbiBhIHJhZGl4IHRyZWUgaW5kZXggYnkgLT5pbmRleC4gVGhpcyB0cmVlCittYWludGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFBHX0RpcnR5IGFuZCBQR19Xcml0ZWJhY2sgc3RhdHVzIG9mCitlYWNoIHBhZ2UsIHNvIHRoYXQgcGFnZXMgd2l0aCBlaXRoZXIgb2YgdGhlc2UgZmxhZ3MgY2FuIGJlIGZvdW5kCitxdWlja2x5LgorCitUaGUgRGlydHkgdGFnIGlzIHByaW1hcmlseSB1c2VkIGJ5IG1wYWdlX3dyaXRlcGFnZXMgLSB0aGUgZGVmYXVsdAorLT53cml0ZXBhZ2VzIG1ldGhvZC4gIEl0IHVzZXMgdGhlIHRhZyB0byBmaW5kIGRpcnR5IHBhZ2VzIHRvIGNhbGwKKy0+d3JpdGVwYWdlIG9uLiAgSWYgbXBhZ2Vfd3JpdGVwYWdlcyBpcyBub3QgdXNlZCAoaS5lLiB0aGUgYWRkcmVzcworcHJvdmlkZXMgaXRzIG93biAtPndyaXRlcGFnZXMpICwgdGhlIFBBR0VDQUNIRV9UQUdfRElSVFkgdGFnIGlzCithbG1vc3QgdW51c2VkLiAgd3JpdGVfaW5vZGVfbm93IGFuZCBzeW5jX2lub2RlIGRvIHVzZSBpdCAodGhyb3VnaAorX19zeW5jX3NpbmdsZV9pbm9kZSkgdG8gY2hlY2sgaWYgLT53cml0ZXBhZ2VzIGhhcyBiZWVuIHN1Y2Nlc3NmdWwgaW4KK3dyaXRpbmcgb3V0IHRoZSB3aG9sZSBhZGRyZXNzX3NwYWNlLgorCitUaGUgV3JpdGViYWNrIHRhZyBpcyB1c2VkIGJ5IGZpbGVtYXAqd2FpdCogYW5kIHN5bmNfcGFnZSogZnVuY3Rpb25zLAordmlhIHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UsIHRvIHdhaXQgZm9yIGFsbCB3cml0ZWJhY2sgdG8KK2NvbXBsZXRlLiAgV2hpbGUgd2FpdGluZyAtPnN5bmNfcGFnZSAoaWYgZGVmaW5lZCkgd2lsbCBiZSBjYWxsZWQgb24KK2VhY2ggcGFnZSB0aGF0IGlzIGZvdW5kIHRvIHJlcXVpcmUgd3JpdGViYWNrLgorCitBbiBhZGRyZXNzX3NwYWNlIGhhbmRsZXIgbWF5IGF0dGFjaCBleHRyYSBpbmZvcm1hdGlvbiB0byBhIHBhZ2UsCit0eXBpY2FsbHkgdXNpbmcgdGhlICdwcml2YXRlJyBmaWVsZCBpbiB0aGUgJ3N0cnVjdCBwYWdlJy4gIElmIHN1Y2gKK2luZm9ybWF0aW9uIGlzIGF0dGFjaGVkLCB0aGUgUEdfUHJpdmF0ZSBmbGFnIHNob3VsZCBiZSBzZXQuICBUaGlzIHdpbGwKK2NhdXNlIHZhcmlvdXMgVk0gcm91dGluZXMgdG8gbWFrZSBleHRyYSBjYWxscyBpbnRvIHRoZSBhZGRyZXNzX3NwYWNlCitoYW5kbGVyIHRvIGRlYWwgd2l0aCB0aGF0IGRhdGEuCisKK0FuIGFkZHJlc3Mgc3BhY2UgYWN0cyBhcyBhbiBpbnRlcm1lZGlhdGUgYmV0d2VlbiBzdG9yYWdlIGFuZAorYXBwbGljYXRpb24uICBEYXRhIGlzIHJlYWQgaW50byB0aGUgYWRkcmVzcyBzcGFjZSBhIHdob2xlIHBhZ2UgYXQgYQordGltZSwgYW5kIHByb3ZpZGVkIHRvIHRoZSBhcHBsaWNhdGlvbiBlaXRoZXIgYnkgY29weWluZyBvZiB0aGUgcGFnZSwKK29yIGJ5IG1lbW9yeS1tYXBwaW5nIHRoZSBwYWdlLgorRGF0YSBpcyB3cml0dGVuIGludG8gdGhlIGFkZHJlc3Mgc3BhY2UgYnkgdGhlIGFwcGxpY2F0aW9uLCBhbmQgdGhlbgord3JpdHRlbi1iYWNrIHRvIHN0b3JhZ2UgdHlwaWNhbGx5IGluIHdob2xlIHBhZ2VzLCBob3dldmVyIHRoZQorYWRkcmVzc19zcGFjZSBoYXMgZmluZXIgY29udHJvbCBvZiB3cml0ZSBzaXplcy4KKworVGhlIHJlYWQgcHJvY2VzcyBlc3NlbnRpYWxseSBvbmx5IHJlcXVpcmVzICdyZWFkcGFnZScuICBUaGUgd3JpdGUKK3Byb2Nlc3MgaXMgbW9yZSBjb21wbGljYXRlZCBhbmQgdXNlcyBwcmVwYXJlX3dyaXRlL2NvbW1pdF93cml0ZSBvcgorc2V0X3BhZ2VfZGlydHkgdG8gd3JpdGUgZGF0YSBpbnRvIHRoZSBhZGRyZXNzX3NwYWNlLCBhbmQgd3JpdGVwYWdlLAorc3luY19wYWdlLCBhbmQgd3JpdGVwYWdlcyB0byB3cml0ZWJhY2sgZGF0YSB0byBzdG9yYWdlLgorCitBZGRpbmcgYW5kIHJlbW92aW5nIHBhZ2VzIHRvL2Zyb20gYW4gYWRkcmVzc19zcGFjZSBpcyBwcm90ZWN0ZWQgYnkgdGhlCitpbm9kZSdzIGlfbXV0ZXguCisKK1doZW4gZGF0YSBpcyB3cml0dGVuIHRvIGEgcGFnZSwgdGhlIFBHX0RpcnR5IGZsYWcgc2hvdWxkIGJlIHNldC4gIEl0Cit0eXBpY2FsbHkgcmVtYWlucyBzZXQgdW50aWwgd3JpdGVwYWdlIGFza3MgZm9yIGl0IHRvIGJlIHdyaXR0ZW4uICBUaGlzCitzaG91bGQgY2xlYXIgUEdfRGlydHkgYW5kIHNldCBQR19Xcml0ZWJhY2suICBJdCBjYW4gYmUgYWN0dWFsbHkKK3dyaXR0ZW4gYXQgYW55IHBvaW50IGFmdGVyIFBHX0RpcnR5IGlzIGNsZWFyLiAgT25jZSBpdCBpcyBrbm93biB0byBiZQorc2FmZSwgUEdfV3JpdGViYWNrIGlzIGNsZWFyZWQuCisKK1dyaXRlYmFjayBtYWtlcyB1c2Ugb2YgYSB3cml0ZWJhY2tfY29udHJvbCBzdHJ1Y3R1cmUuLi4KIAogc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIGRlc2NyaWJlcyBob3cgdGhlIFZGUyBjYW4gbWFuaXB1bGF0ZSBtYXBwaW5nIG9mIGEgZmlsZSB0byBwYWdlIGNhY2hlIGluCi15b3VyIGZpbGVzeXN0ZW0uIEFzIG9mIGtlcm5lbCAyLjYuMTMsIHRoZSBmb2xsb3dpbmcgbWVtYmVycyBhcmUgZGVmaW5lZDoKK3lvdXIgZmlsZXN5c3RlbS4gQXMgb2Yga2VybmVsIDIuNi4xNiwgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGFyZSBkZWZpbmVkOgogCiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHsKIAlpbnQgKCp3cml0ZXBhZ2UpKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CkBAIC00NjksNDcgKzU0MSwxNDggQEAKIAkJCWxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2Vncyk7CiAJc3RydWN0IHBhZ2UqICgqZ2V0X3hpcF9wYWdlKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzZWN0b3JfdCwKIAkJCWludCk7CisJLyogbWlncmF0ZSB0aGUgY29udGVudHMgb2YgYSBwYWdlIHRvIHRoZSBzcGVjaWZpZWQgdGFyZ2V0ICovCisJaW50ICgqbWlncmF0ZXBhZ2UpIChzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKIH07CiAKLSAgd3JpdGVwYWdlOiBjYWxsZWQgYnkgdGhlIFZNIHdyaXRlIGEgZGlydHkgcGFnZSB0byBiYWNraW5nIHN0b3JlLgorICB3cml0ZXBhZ2U6IGNhbGxlZCBieSB0aGUgVk0gdG8gd3JpdGUgYSBkaXJ0eSBwYWdlIHRvIGJhY2tpbmcgc3RvcmUuCisgICAgICBUaGlzIG1heSBoYXBwZW4gZm9yIGRhdGEgaW50ZWdyaXR5IHJlYXNvbnMgKGkuZS4gJ3N5bmMnKSwgb3IKKyAgICAgIHRvIGZyZWUgdXAgbWVtb3J5IChmbHVzaCkuICBUaGUgZGlmZmVyZW5jZSBjYW4gYmUgc2VlbiBpbgorICAgICAgd2JjLT5zeW5jX21vZGUuCisgICAgICBUaGUgUEdfRGlydHkgZmxhZyBoYXMgYmVlbiBjbGVhcmVkIGFuZCBQYWdlTG9ja2VkIGlzIHRydWUuCisgICAgICB3cml0ZXBhZ2Ugc2hvdWxkIHN0YXJ0IHdyaXRlb3V0LCBzaG91bGQgc2V0IFBHX1dyaXRlYmFjaywKKyAgICAgIGFuZCBzaG91bGQgbWFrZSBzdXJlIHRoZSBwYWdlIGlzIHVubG9ja2VkLCBlaXRoZXIgc3luY2hyb25vdXNseQorICAgICAgb3IgYXN5bmNocm9ub3VzbHkgd2hlbiB0aGUgd3JpdGUgb3BlcmF0aW9uIGNvbXBsZXRlcy4KKworICAgICAgSWYgd2JjLT5zeW5jX21vZGUgaXMgV0JfU1lOQ19OT05FLCAtPndyaXRlcGFnZSBkb2Vzbid0IGhhdmUgdG8KKyAgICAgIHRyeSB0b28gaGFyZCBpZiB0aGVyZSBhcmUgcHJvYmxlbXMsIGFuZCBtYXkgY2hvb3NlIHRvIHdyaXRlIG91dAorICAgICAgb3RoZXIgcGFnZXMgZnJvbSB0aGUgbWFwcGluZyBpZiB0aGF0IGlzIGVhc2llciAoZS5nLiBkdWUgdG8KKyAgICAgIGludGVybmFsIGRlcGVuZGVuY2llcykuICBJZiBpdCBjaG9vc2VzIG5vdCB0byBzdGFydCB3cml0ZW91dCwgaXQKKyAgICAgIHNob3VsZCByZXR1cm4gQU9QX1dSSVRFUEFHRV9BQ1RJVkFURSBzbyB0aGF0IHRoZSBWTSB3aWxsIG5vdCBrZWVwCisgICAgICBjYWxsaW5nIC0+d3JpdGVwYWdlIG9uIHRoYXQgcGFnZS4KKworICAgICAgU2VlIHRoZSBmaWxlICJMb2NraW5nIiBmb3IgbW9yZSBkZXRhaWxzLgogCiAgIHJlYWRwYWdlOiBjYWxsZWQgYnkgdGhlIFZNIHRvIHJlYWQgYSBwYWdlIGZyb20gYmFja2luZyBzdG9yZS4KKyAgICAgICBUaGUgcGFnZSB3aWxsIGJlIExvY2tlZCB3aGVuIHJlYWRwYWdlIGlzIGNhbGxlZCwgYW5kIHNob3VsZCBiZQorICAgICAgIHVubG9ja2VkIGFuZCBtYXJrZWQgdXB0b2RhdGUgb25jZSB0aGUgcmVhZCBjb21wbGV0ZXMuCisgICAgICAgSWYgLT5yZWFkcGFnZSBkaXNjb3ZlcnMgdGhhdCBpdCBuZWVkcyB0byB1bmxvY2sgdGhlIHBhZ2UgZm9yCisgICAgICAgc29tZSByZWFzb24sIGl0IGNhbiBkbyBzbywgYW5kIHRoZW4gcmV0dXJuIEFPUF9UUlVOQ0FURURfUEFHRS4KKyAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBwYWdlIHdpbGwgYmUgcmVsb2NhdGVkLCByZWxvY2tlZCBhbmQgaWYKKyAgICAgICB0aGF0IGFsbCBzdWNjZWVkcywgLT5yZWFkcGFnZSB3aWxsIGJlIGNhbGxlZCBhZ2Fpbi4KIAogICBzeW5jX3BhZ2U6IGNhbGxlZCBieSB0aGUgVk0gdG8gbm90aWZ5IHRoZSBiYWNraW5nIHN0b3JlIHRvIHBlcmZvcm0gYWxsCiAgIAlxdWV1ZWQgSS9PIG9wZXJhdGlvbnMgZm9yIGEgcGFnZS4gSS9PIG9wZXJhdGlvbnMgZm9yIG90aGVyIHBhZ2VzCiAJYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWRkcmVzc19zcGFjZSBvYmplY3QgbWF5IGFsc28gYmUgcGVyZm9ybWVkLgogCisJVGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbCBhbmQgaXMgY2FsbGVkIG9ubHkgZm9yIHBhZ2VzIHdpdGgKKyAgCVBHX1dyaXRlYmFjayBzZXQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHdyaXRlYmFjayB0byBjb21wbGV0ZS4KKwogICB3cml0ZXBhZ2VzOiBjYWxsZWQgYnkgdGhlIFZNIHRvIHdyaXRlIG91dCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlCi0gIAlhZGRyZXNzX3NwYWNlIG9iamVjdC4KKyAgCWFkZHJlc3Nfc3BhY2Ugb2JqZWN0LiAgSWYgd2JjLT5zeW5jX21vZGUgaXMgV0JDX1NZTkNfQUxMLCB0aGVuCisgIAl0aGUgd3JpdGViYWNrX2NvbnRyb2wgd2lsbCBzcGVjaWZ5IGEgcmFuZ2Ugb2YgcGFnZXMgdGhhdCBtdXN0IGJlCisgIAl3cml0dGVuIG91dC4gIElmIGl0IGlzIFdCQ19TWU5DX05PTkUsIHRoZW4gYSBucl90b193cml0ZSBpcyBnaXZlbgorCWFuZCB0aGF0IG1hbnkgcGFnZXMgc2hvdWxkIGJlIHdyaXR0ZW4gaWYgcG9zc2libGUuCisJSWYgbm8gLT53cml0ZXBhZ2VzIGlzIGdpdmVuLCB0aGVuIG1wYWdlX3dyaXRlcGFnZXMgaXMgdXNlZAorICAJaW5zdGVhZC4gIFRoaXMgd2lsbCBjaG9vc2UgcGFnZXMgZnJvbSB0aGUgYWRkcmVzcyBzcGFjZSB0aGF0IGFyZQorICAJdGFnZ2VkIGFzIERJUlRZIGFuZCB3aWxsIHBhc3MgdGhlbSB0byAtPndyaXRlcGFnZS4KIAogICBzZXRfcGFnZV9kaXJ0eTogY2FsbGVkIGJ5IHRoZSBWTSB0byBzZXQgYSBwYWdlIGRpcnR5LgorICAgICAgICBUaGlzIGlzIHBhcnRpY3VsYXJseSBuZWVkZWQgaWYgYW4gYWRkcmVzcyBzcGFjZSBhdHRhY2hlcworICAgICAgICBwcml2YXRlIGRhdGEgdG8gYSBwYWdlLCBhbmQgdGhhdCBkYXRhIG5lZWRzIHRvIGJlIHVwZGF0ZWQgd2hlbgorICAgICAgICBhIHBhZ2UgaXMgZGlydGllZC4gIFRoaXMgaXMgY2FsbGVkLCBmb3IgZXhhbXBsZSwgd2hlbiBhIG1lbW9yeQorCW1hcHBlZCBwYWdlIGdldHMgbW9kaWZpZWQuCisJSWYgZGVmaW5lZCwgaXQgc2hvdWxkIHNldCB0aGUgUGFnZURpcnR5IGZsYWcsIGFuZCB0aGUKKyAgICAgICAgUEFHRUNBQ0hFX1RBR19ESVJUWSB0YWcgaW4gdGhlIHJhZGl4IHRyZWUuCiAKICAgcmVhZHBhZ2VzOiBjYWxsZWQgYnkgdGhlIFZNIHRvIHJlYWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhZGRyZXNzX3NwYWNlCi0gIAlvYmplY3QuCisgIAlvYmplY3QuIFRoaXMgaXMgZXNzZW50aWFsbHkganVzdCBhIHZlY3RvciB2ZXJzaW9uIG9mCisgIAlyZWFkcGFnZS4gIEluc3RlYWQgb2YganVzdCBvbmUgcGFnZSwgc2V2ZXJhbCBwYWdlcyBhcmUKKyAgCXJlcXVlc3RlZC4KKwlyZWFkcGFnZXMgaXMgb25seSB1c2VkIGZvciByZWFkLWFoZWFkLCBzbyByZWFkIGVycm9ycyBhcmUKKyAgCWlnbm9yZWQuICBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCBmZWVsIGZyZWUgdG8gZ2l2ZSB1cC4KIAogICBwcmVwYXJlX3dyaXRlOiBjYWxsZWQgYnkgdGhlIGdlbmVyaWMgd3JpdGUgcGF0aCBpbiBWTSB0byBzZXQgdXAgYSB3cml0ZQotICAJcmVxdWVzdCBmb3IgYSBwYWdlLgorICAJcmVxdWVzdCBmb3IgYSBwYWdlLiAgVGhpcyBpbmRpY2F0ZXMgdG8gdGhlIGFkZHJlc3Mgc3BhY2UgdGhhdAorICAJdGhlIGdpdmVuIHJhbmdlIG9mIGJ5dGVzIGlzIGFib3V0IHRvIGJlIHdyaXR0ZW4uICBUaGUKKyAgCWFkZHJlc3Nfc3BhY2Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHdyaXRlIHdpbGwgYmUgYWJsZSB0bworICAJY29tcGxldGUsIGJ5IGFsbG9jYXRpbmcgc3BhY2UgaWYgbmVjZXNzYXJ5IGFuZCBkb2luZyBhbnkgb3RoZXIKKyAgCWludGVybmFsIGhvdXNla2VlcGluZy4gIElmIHRoZSB3cml0ZSB3aWxsIHVwZGF0ZSBwYXJ0cyBvZgorICAJYW55IGJhc2ljLWJsb2NrcyBvbiBzdG9yYWdlLCB0aGVuIHRob3NlIGJsb2NrcyBzaG91bGQgYmUKKyAgCXByZS1yZWFkIChpZiB0aGV5IGhhdmVuJ3QgYmVlbiByZWFkIGFscmVhZHkpIHNvIHRoYXQgdGhlCisgIAl1cGRhdGVkIGJsb2NrcyBjYW4gYmUgd3JpdHRlbiBvdXQgcHJvcGVybHkuCisJVGhlIHBhZ2Ugd2lsbCBiZSBsb2NrZWQuICBJZiBwcmVwYXJlX3dyaXRlIHdhbnRzIHRvIHVubG9jayB0aGUKKyAgCXBhZ2UgaXQsIGxpa2UgcmVhZHBhZ2UsIG1heSBkbyBzbyBhbmQgcmV0dXJuCisgIAlBT1BfVFJVTkNBVEVEX1BBR0UuCisJSW4gdGhpcyBjYXNlIHRoZSBwcmVwYXJlX3dyaXRlIHdpbGwgYmUgcmV0cmllZCBvbmUgdGhlIGxvY2sgaXMKKyAgCXJlZ2FpbmVkLgogCi0gIGNvbW1pdF93cml0ZTogY2FsbGVkIGJ5IHRoZSBnZW5lcmljIHdyaXRlIHBhdGggaW4gVk0gdG8gd3JpdGUgcGFnZSB0bwotICAJaXRzIGJhY2tpbmcgc3RvcmUuCisgIGNvbW1pdF93cml0ZTogSWYgcHJlcGFyZV93cml0ZSBzdWNjZWVkcywgbmV3IGRhdGEgd2lsbCBiZSBjb3BpZWQKKyAgICAgICAgaW50byB0aGUgcGFnZSBhbmQgdGhlbiBjb21taXRfd3JpdGUgd2lsbCBiZSBjYWxsZWQuICBJdCB3aWxsCisgICAgICAgIHR5cGljYWxseSB1cGRhdGUgdGhlIHNpemUgb2YgdGhlIGZpbGUgKGlmIGFwcHJvcHJpYXRlKSBhbmQKKyAgICAgICAgbWFyayB0aGUgaW5vZGUgYXMgZGlydHksIGFuZCBkbyBhbnkgb3RoZXIgcmVsYXRlZCBob3VzZWtlZXBpbmcKKyAgICAgICAgb3BlcmF0aW9ucy4gIEl0IHNob3VsZCBhdm9pZCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgcG9zc2libGUgLQorICAgICAgICBlcnJvcnMgc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGJ5IHByZXBhcmVfd3JpdGUuCiAKICAgYm1hcDogY2FsbGVkIGJ5IHRoZSBWRlMgdG8gbWFwIGEgbG9naWNhbCBibG9jayBvZmZzZXQgd2l0aGluIG9iamVjdCB0bwotICAJcGh5c2ljYWwgYmxvY2sgbnVtYmVyLiBUaGlzIG1ldGhvZCBpcyB1c2UgYnkgZm9yIHRoZSBsZWdhY3kgRklCTUFQCi0JaW9jdGwuIE90aGVyIHVzZXMgYXJlIGRpc2NvdXJhZ2VkLgorICAJcGh5c2ljYWwgYmxvY2sgbnVtYmVyLiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBGSUJNQVAKKyAgCWlvY3RsIGFuZCBmb3Igd29ya2luZyB3aXRoIHN3YXAtZmlsZXMuICBUbyBiZSBhYmxlIHRvIHN3YXAgdG8KKyAgCWEgZmlsZSwgdGhlIGZpbGUgbXVzdCBoYXZlIGEgc3RhYmxlIG1hcHBpbmcgdG8gYSBibG9jaworICAJZGV2aWNlLiAgVGhlIHN3YXAgc3lzdGVtIGRvZXMgbm90IGdvIHRocm91Z2ggdGhlIGZpbGVzeXN0ZW0KKyAgCWJ1dCBpbnN0ZWFkIHVzZXMgYm1hcCB0byBmaW5kIG91dCB3aGVyZSB0aGUgYmxvY2tzIGluIHRoZSBmaWxlCisgIAlhcmUgYW5kIHVzZXMgdGhvc2UgYWRkcmVzc2VzIGRpcmVjdGx5LgogCi0gIGludmFsaWRhdGVwYWdlOiBjYWxsZWQgYnkgdGhlIFZNIG9uIHRydW5jYXRlIHRvIGRpc2Fzc29jaWF0ZSBhIHBhZ2UgZnJvbSBpdHMKLSAgCWFkZHJlc3Nfc3BhY2UgbWFwcGluZy4KIAotICByZWxlYXNlcGFnZTogY2FsbGVkIGJ5IHRoZSBWRlMgdG8gcmVsZWFzZSBmaWxlc3lzdGVtIHNwZWNpZmljIG1ldGFkYXRhIGZyb20KLSAgCWEgcGFnZS4KKyAgaW52YWxpZGF0ZXBhZ2U6IElmIGEgcGFnZSBoYXMgUGFnZVByaXZhdGUgc2V0LCB0aGVuIGludmFsaWRhdGVwYWdlCisgICAgICAgIHdpbGwgYmUgY2FsbGVkIHdoZW4gcGFydCBvciBhbGwgb2YgdGhlIHBhZ2UgaXMgdG8gYmUgcmVtb3ZlZAorCWZyb20gdGhlIGFkZHJlc3Mgc3BhY2UuICBUaGlzIGdlbmVyYWxseSBjb3JyZXNwb25kcyB0byBlaXRoZXIgYQorCXRydW5jYXRpb24gb3IgYSBjb21wbGV0ZSBpbnZhbGlkYXRpb24gb2YgdGhlIGFkZHJlc3Mgc3BhY2UKKwkoaW4gdGhlIGxhdHRlciBjYXNlICdvZmZzZXQnIHdpbGwgYWx3YXlzIGJlIDApLgorCUFueSBwcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWdlIHNob3VsZCBiZSB1cGRhdGVkCisJdG8gcmVmbGVjdCB0aGlzIHRydW5jYXRpb24uICBJZiBvZmZzZXQgaXMgMCwgdGhlbgorCXRoZSBwcml2YXRlIGRhdGEgc2hvdWxkIGJlIHJlbGVhc2VkLCBiZWNhdXNlIHRoZSBwYWdlCisJbXVzdCBiZSBhYmxlIHRvIGJlIGNvbXBsZXRlbHkgZGlzY2FyZGVkLiAgVGhpcyBtYXkgYmUgZG9uZSBieQorICAgICAgICBjYWxsaW5nIHRoZSAtPnJlbGVhc2VwYWdlIGZ1bmN0aW9uLCBidXQgaW4gdGhpcyBjYXNlIHRoZQorICAgICAgICByZWxlYXNlIE1VU1Qgc3VjY2VlZC4KIAotICBkaXJlY3RfSU86IGNhbGxlZCBieSB0aGUgVk0gZm9yIGRpcmVjdCBJL08gd3JpdGVzIGFuZCByZWFkcy4KKyAgcmVsZWFzZXBhZ2U6IHJlbGVhc2VwYWdlIGlzIGNhbGxlZCBvbiBQYWdlUHJpdmF0ZSBwYWdlcyB0byBpbmRpY2F0ZQorICAgICAgICB0aGF0IHRoZSBwYWdlIHNob3VsZCBiZSBmcmVlZCBpZiBwb3NzaWJsZS4gIC0+cmVsZWFzZXBhZ2UKKyAgICAgICAgc2hvdWxkIHJlbW92ZSBhbnkgcHJpdmF0ZSBkYXRhIGZyb20gdGhlIHBhZ2UgYW5kIGNsZWFyIHRoZQorICAgICAgICBQYWdlUHJpdmF0ZSBmbGFnLiAgSXQgbWF5IGFsc28gcmVtb3ZlIHRoZSBwYWdlIGZyb20gdGhlCisgICAgICAgIGFkZHJlc3Nfc3BhY2UuICBJZiB0aGlzIGZhaWxzIGZvciBzb21lIHJlYXNvbiwgaXQgbWF5IGluZGljYXRlCisgICAgICAgIGZhaWx1cmUgd2l0aCBhIDAgcmV0dXJuIHZhbHVlLgorCVRoaXMgaXMgdXNlZCBpbiB0d28gZGlzdGluY3QgdGhvdWdoIHJlbGF0ZWQgY2FzZXMuICBUaGUgZmlyc3QKKyAgICAgICAgaXMgd2hlbiB0aGUgVk0gZmluZHMgYSBjbGVhbiBwYWdlIHdpdGggbm8gYWN0aXZlIHVzZXJzIGFuZAorICAgICAgICB3YW50cyB0byBtYWtlIGl0IGEgZnJlZSBwYWdlLiAgSWYgLT5yZWxlYXNlcGFnZSBzdWNjZWVkcywgdGhlCisgICAgICAgIHBhZ2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGFkZHJlc3Nfc3BhY2UgYW5kIGJlY29tZSBmcmVlLgorCisJVGhlIHNlY29uZCBjYXNlIGlmIHdoZW4gYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgdG8gaW52YWxpZGF0ZQorICAgICAgICBzb21lIG9yIGFsbCBwYWdlcyBpbiBhbiBhZGRyZXNzX3NwYWNlLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAgIHRocm91Z2ggdGhlIGZhZHZpY2UoUE9TSVhfRkFEVl9ET05UTkVFRCkgc3lzdGVtIGNhbGwgb3IgYnkgdGhlCisgICAgICAgIGZpbGVzeXN0ZW0gZXhwbGljaXRseSByZXF1ZXN0aW5nIGl0IGFzIG5mcyBhbmQgOWZzIGRvICh3aGVuCisgICAgICAgIHRoZXkgYmVsaWV2ZSB0aGUgY2FjaGUgbWF5IGJlIG91dCBvZiBkYXRlIHdpdGggc3RvcmFnZSkgYnkKKyAgICAgICAgY2FsbGluZyBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMigpLgorCUlmIHRoZSBmaWxlc3lzdGVtIG1ha2VzIHN1Y2ggYSBjYWxsLCBhbmQgbmVlZHMgdG8gYmUgY2VydGFpbgorICAgICAgICB0aGF0IGFsbCBwYWdlcyBhcmUgaW52YWxpZGF0ZWQsIHRoZW4gaXRzIHJlbGVhc2VwYWdlIHdpbGwKKyAgICAgICAgbmVlZCB0byBlbnN1cmUgdGhpcy4gIFBvc3NpYmx5IGl0IGNhbiBjbGVhciB0aGUgUGFnZVVwdG9kYXRlCisgICAgICAgIGJpdCBpZiBpdCBjYW5ub3QgZnJlZSBwcml2YXRlIGRhdGEgeWV0LgorCisgIGRpcmVjdF9JTzogY2FsbGVkIGJ5IHRoZSBnZW5lcmljIHJlYWQvd3JpdGUgcm91dGluZXMgdG8gcGVyZm9ybQorICAgICAgICBkaXJlY3RfSU8gLSB0aGF0IGlzIElPIHJlcXVlc3RzIHdoaWNoIGJ5cGFzcyB0aGUgcGFnZSBjYWNoZQorICAgICAgICBhbmQgdHJhbnNmZXIgZGF0YSBkaXJlY3RseSBiZXR3ZWVuIHRoZSBzdG9yYWdlIGFuZCB0aGUKKyAgICAgICAgYXBwbGljYXRpb24ncyBhZGRyZXNzIHNwYWNlLgogCiAgIGdldF94aXBfcGFnZTogY2FsbGVkIGJ5IHRoZSBWTSB0byB0cmFuc2xhdGUgYSBibG9jayBudW1iZXIgdG8gYSBwYWdlLgogCVRoZSBwYWdlIGlzIHZhbGlkIHVudGlsIHRoZSBjb3JyZXNwb25kaW5nIGZpbGVzeXN0ZW0gaXMgdW5tb3VudGVkLgogCUZpbGVzeXN0ZW1zIHRoYXQgd2FudCB0byB1c2UgZXhlY3V0ZS1pbi1wbGFjZSAoWElQKSBuZWVkIHRvIGltcGxlbWVudAogCWl0LiAgQW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gZnMvZXh0Mi94aXAuYy4KIAorICBtaWdyYXRlX3BhZ2U6ICBUaGlzIGlzIHVzZWQgdG8gY29tcGFjdCB0aGUgcGh5c2ljYWwgbWVtb3J5IHVzYWdlLgorICAgICAgICBJZiB0aGUgVk0gd2FudHMgdG8gcmVsb2NhdGUgYSBwYWdlIChtYXliZSBvZmYgYSBtZW1vcnkgY2FyZAorICAgICAgICB0aGF0IGlzIHNpZ25hbGxpbmcgaW1taW5lbnQgZmFpbHVyZSkgaXQgd2lsbCBwYXNzIGEgbmV3IHBhZ2UKKwlhbmQgYW4gb2xkIHBhZ2UgdG8gdGhpcyBmdW5jdGlvbi4gIG1pZ3JhdGVfcGFnZSBzaG91bGQKKwl0cmFuc2ZlciBhbnkgcHJpdmF0ZSBkYXRhIGFjcm9zcyBhbmQgdXBkYXRlIGFueSByZWZlcmVuY2VzCisgICAgICAgIHRoYXQgaXQgaGFzIHRvIHRoZSBwYWdlLgogCiBUaGUgRmlsZSBPYmplY3QKID09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZHJpdmVyLmMgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYwppbmRleCBkM2FkMmMyLi5hZDNlZGFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYworKysgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9kcml2ZXIuYwpAQCAtMjMsNyArMjMsNiBAQAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIGdob3N0X2RldmljZSA9IHsKLQkubmFtZSAgICAgID0gIkdob3N0IERldmljZSIsCiAJLmJ1c19pZCAgICA9ICJnaG9zdDAiLAogfTsKIApAQCAtOTIsNyArOTEsNyBAQAogewogCS8qIExldCdzIHNheSB0aGF0IEkgY2FuJ3Qgc2xlZXAgKi8KIAlpbnQgZXJyb3I7Ci0JZXJyb3IgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCAoVEhJU19NT0RVTEUsCisJZXJyb3IgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdCAoVEhJU19NT0RVTEUsIEZXX0FDVElPTl9OT0hPVFBMVUcsCiAJCQkJCSAic2FtcGxlX2RyaXZlcl9mdyIsICZnaG9zdF9kZXZpY2UsCiAJCQkJCSAibXkgZGV2aWNlIHBvaW50ZXIiLAogCQkJCQkgc2FtcGxlX3Byb2JlX2FzeW5jX2NvbnQpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvZmlybXdhcmVfc2FtcGxlX2Zpcm13YXJlX2NsYXNzLmMKaW5kZXggNTdiOTU2YS4uOWUxYjBlNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9maXJtd2FyZV9zYW1wbGVfZmlybXdhcmVfY2xhc3MuYworKysgYi9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2Zpcm13YXJlX3NhbXBsZV9maXJtd2FyZV9jbGFzcy5jCkBAIC0xNzIsNyArMTcyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIG15X2RldmljZSA9IHsKLQkubmFtZSAgICAgID0gIlNhbXBsZSBEZXZpY2UiLAogCS5idXNfaWQgICAgPSAibXlfZGV2MCIsCiB9OwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2hmIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdoZgppbmRleCBiYmVhYmE2Li43OTIyMzE5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2hmCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3aGYKQEAgLTE4LDYgKzE4LDEwIEBACiAgICAgUHJlZml4OiAndzgzNjM3aGYnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IElTQSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFN1cGVyIEkvTyByZWdpc3RlcnMKICAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cud2luYm9uZC5jb20vUERGL3NoZWV0L3c4MzYzN2hmLnBkZgorICAqIFdpbmJvbmQgVzgzNjg3VEhGCisgICAgUHJlZml4OiAndzgzNjg3dGhmJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBQcm92aWRlZCBieSBXaW5ib25kIG9uIHJlcXVlc3QKIAogQXV0aG9yczoKICAgICAgICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZCBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzgxZAppbmRleCBlNTQ1OTMzLi5iMWU5ZjgwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc4MWQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3ODFkCkBAIC0zNiw2ICszNiwxMSBAQAogICBVc2UgJ2luaXQ9MCcgdG8gYnlwYXNzIGluaXRpYWxpemluZyB0aGUgY2hpcC4KICAgVHJ5IHRoaXMgaWYgeW91ciBjb21wdXRlciBjcmFzaGVzIHdoZW4geW91IGxvYWQgdGhlIG1vZHVsZS4KIAorKiByZXNldCBpbnQKKyAgKGRlZmF1bHQgMCkKKyAgVGhlIGRyaXZlciB1c2VkIHRvIHJlc2V0IHRoZSBjaGlwIG9uIGxvYWQsIGJ1dCBkb2VzIG5vIG1vcmUuIFVzZQorICAncmVzZXQ9MScgdG8gcmVzdG9yZSB0aGUgb2xkIGJlaGF2aW9yLiBSZXBvcnQgaWYgeW91IG5lZWQgdG8gZG8gdGhpcy4KKwogZm9yY2Vfc3ViY2xpZW50cz1idXMsY2FkZHIsc2FkZHIsc2FkZHIKICAgVGhpcyBpcyB1c2VkIHRvIGZvcmNlIHRoZSBpMmMgYWRkcmVzc2VzIGZvciBzdWJjbGllbnRzIG9mCiAgIGEgY2VydGFpbiBjaGlwLiBUeXBpY2FsIHVzYWdlIGlzIGBmb3JjZV9zdWJjbGllbnRzPTAsMHgyZCwweDRhLDB4NGInCkBAIC0xMjMsNiArMTI4LDI1IEBACiB5b3VyIGNvbXB1dGVyIHNwZWFrZXIuIEl0IGlzIHBvc3NpYmxlIHRvIGVuYWJsZSBhbGwgYmVlcGluZyBnbG9iYWxseSwKIG9yIG9ubHkgdGhlIGJlZXBpbmcgZm9yIHNvbWUgYWxhcm1zLgogCitJbmRpdmlkdWFsIGFsYXJtIGFuZCBiZWVwIGJpdHM6CisKKzB4MDAwMDAxOiBpbjAKKzB4MDAwMDAyOiBpbjEKKzB4MDAwMDA0OiBpbjIKKzB4MDAwMDA4OiBpbjMKKzB4MDAwMDEwOiB0ZW1wMQorMHgwMDAwMjA6IHRlbXAyICgrdGVtcDMgb24gVzgzNzgxRCkKKzB4MDAwMDQwOiBmYW4xCisweDAwMDA4MDogZmFuMgorMHgwMDAxMDA6IGluNAorMHgwMDAyMDA6IGluNQorMHgwMDA0MDA6IGluNgorMHgwMDA4MDA6IGZhbjMKKzB4MDAxMDAwOiBjaGFzc2lzCisweDAwMjAwMDogdGVtcDMgKFc4Mzc4MkQgYW5kIFc4MzYyN0hGIG9ubHkpCisweDAxMDAwMDogaW43IChXODM3ODJEIGFuZCBXODM2MjdIRiBvbmx5KQorMHgwMjAwMDA6IGluOCAoVzgzNzgyRCBhbmQgVzgzNjI3SEYgb25seSkKKwogSWYgYW4gYWxhcm0gdHJpZ2dlcnMsIGl0IHdpbGwgcmVtYWluIHRyaWdnZXJlZCB1bnRpbCB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIKIGlzIHJlYWQgYXQgbGVhc3Qgb25jZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBjYXVzZSBmb3IgdGhlIGFsYXJtIG1heQogYWxyZWFkeSBoYXZlIGRpc2FwcGVhcmVkISBOb3RlIHRoYXQgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGFsbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKaW5kZXggODU2YjRiOC4uYTFjOGY1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CkBAIC00LDcgKzQsNyBAQAogICAqIEludGVsIDgyMzcxQUIgUElJWDQgYW5kIFBJSVg0RQogICAqIEludGVsIDgyNDQzTVggKDQ0ME1YKQogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJbnRlbCB3ZWJzaXRlCi0gICogU2VydmVyV29ya3MgT1NCNCwgQ1NCNSBhbmQgQ1NCNiBzb3V0aGJyaWRnZXMKKyAgKiBTZXJ2ZXJXb3JrcyBPU0I0LCBDU0I1LCBDU0I2IGFuZCBIVC0xMDAwIHNvdXRoYnJpZGdlcwogICAgIERhdGFzaGVldDogT25seSBhdmFpbGFibGUgdmlhIE5EQSBmcm9tIFNlcnZlcldvcmtzCiAgICogU3RhbmRhcmQgTWljcm9zeXN0ZW1zIChTTVNDKSBTTEM5MEU2NiAoVmljdG9yeTY2KSBzb3V0aGJyaWRnZQogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBTTVNDIHdlYnNpdGUgaHR0cDovL3d3dy5zbXNjLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL3NjeDIwMF9hY2IgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvc2N4MjAwX2FjYgppbmRleCAwOGM4Y2QxLi5mNTBlNjk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvc2N4MjAwX2FjYgorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvc2N4MjAwX2FjYgpAQCAtNiw5ICs2LDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLQogCiAqIGJhc2U6IGludAotICBCYXNlIGFkZHJlc3NlcyBmb3IgdGhlIEFDQ0VTUy5idXMgY29udHJvbGxlcnMKKyAgQmFzZSBhZGRyZXNzZXMgZm9yIHRoZSBBQ0NFU1MuYnVzIGNvbnRyb2xsZXJzIG9uIFNDeDIwMCBhbmQgU0MxMTAwIGRldmljZXMKIAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCiAKLUVuYWJsZSB0aGUgdXNlIG9mIHRoZSBBQ0NFU1MuYnVzIGNvbnRyb2xsZXJzIG9mIGEgU0N4MjAwIHByb2Nlc3Nvci4KK0VuYWJsZSB0aGUgdXNlIG9mIHRoZSBBQ0NFU1MuYnVzIGNvbnRyb2xsZXIgb24gdGhlIEdlb2RlIFNDeDIwMCBhbmQKK1NDMTEwMCBwcm9jZXNzb3JzIGFuZCB0aGUgQ1M1NTM1IGFuZCBDUzU1MzYgR2VvZGUgY29tcGFuaW9uIGRldmljZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGI4NzQ3NzEuLmY4Y2I1NWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00OSw2ICs0OSw3IEBACiAJTUNBCU1DQSBidXMgc3VwcG9ydCBpcyBlbmFibGVkLgogCU1EQQlNREEgY29uc29sZSBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJTU9VU0UJQXBwcm9wcmlhdGUgbW91c2Ugc3VwcG9ydCBpcyBlbmFibGVkLgorCU1TSQlNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKFBDSSkuCiAJTVRECU1URCBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJTkVUCUFwcHJvcHJpYXRlIG5ldHdvcmsgc3VwcG9ydCBpcyBlbmFibGVkLgogCU5VTUEJTlVNQSBzdXBwb3J0IGlzIGVuYWJsZWQuCkBAIC0zMzUsNiArMzM2LDEyIEBACiAJCQl0aW1lc291cmNlIGlzIG5vdCBhdmFsaWJsZSwgaXQgZGVmYXVsdHMgdG8gUElULgogCQkJRm9ybWF0OiB7IHBpdCB8IHRzYyB8IGN5Y2xvbmUgfCBwbXRtciB9CiAKKwlkaXNhYmxlXzgyNTRfdGltZXIKKwllbmFibGVfODI1NF90aW1lcgorCQkJW0lBMzIvWDg2XzY0XSBEaXNhYmxlL0VuYWJsZSBpbnRlcnJ1cHQgMCB0aW1lciByb3V0aW5nCisJCQlvdmVyIHRoZSA4MjU0IGluIGFkZGl0aW9uIHRvIG92ZXIgdGhlIElPLUFQSUMuIFRoZQorCQkJa2VybmVsIHRyaWVzIHRvIHNldCBhIHNlbnNpYmxlIGRlZmF1bHQuCisKIAlocGV0PQkJW0lBLTMyLEhQRVRdIG9wdGlvbiB0byBkaXNhYmxlIEhQRVQgYW5kIHVzZSBQSVQuCiAJCQlGb3JtYXQ6IGRpc2FibGUKIApAQCAtMzYwLDEyICszNjcsMTcgQEAKIAkJdHR5PG4+CVVzZSB0aGUgdmlydHVhbCBjb25zb2xlIGRldmljZSA8bj4uCiAKIAkJdHR5UzxuPlssb3B0aW9uc10KKwkJdHR5VVNCMFssb3B0aW9uc10KIAkJCVVzZSB0aGUgc3BlY2lmaWVkIHNlcmlhbCBwb3J0LiAgVGhlIG9wdGlvbnMgYXJlIG9mCi0JCQl0aGUgZm9ybSAiYmJiYnBuIiwgd2hlcmUgImJiYmIiIGlzIHRoZSBiYXVkIHJhdGUsCi0JCQkicCIgaXMgcGFyaXR5ICgibiIsICJvIiwgb3IgImUiKSwgYW5kICJuIiBpcyBiaXRzLgotCQkJRGVmYXVsdCBpcyAiOTYwMG44Ii4KKwkJCXRoZSBmb3JtICJiYmJicG5mIiwgd2hlcmUgImJiYmIiIGlzIHRoZSBiYXVkIHJhdGUsCisJCQkicCIgaXMgcGFyaXR5ICgibiIsICJvIiwgb3IgImUiKSwgIm4iIGlzIG51bWJlciBvZgorCQkJYml0cywgYW5kICJmIiBpcyBmbG93IGNvbnRyb2wgKCJyIiBmb3IgUlRTIG9yCisJCQlvbWl0IGl0KS4gIERlZmF1bHQgaXMgIjk2MDBuOCIuCiAKLQkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0LgorCQkJU2VlIERvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0IGZvciBtb3JlCisJCQlpbmZvcm1hdGlvbi4gIFNlZQorCQkJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUudHh0IGZvciBhbgorCQkJYWx0ZXJuYXRpdmUuCiAKIAkJdWFydCxpbyw8YWRkcj5bLG9wdGlvbnNdCiAJCXVhcnQsbW1pbyw8YWRkcj5bLG9wdGlvbnNdCkBAIC0xMDAyLDcgKzEwMTQsOSBAQAogCQkJbm9leGVjPW9uOiBlbmFibGUgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MgKGRlZmF1bHQpCiAJCQlub2V4ZWM9b2ZmOiBkaXNhYmxlIG5uLWV4ZWN1dGFibGUgbWFwcGluZ3MKIAotCW5vZnhzcgkJW0JVR1M9SUEtMzJdCisJbm9meHNyCQlbQlVHUz1JQS0zMl0gRGlzYWJsZXMgeDg2IGZsb2F0aW5nIHBvaW50IGV4dGVuZGVkCisJCQlyZWdpc3RlciBzYXZlIGFuZCByZXN0b3JlLiBUaGUga2VybmVsIHdpbGwgb25seSBzYXZlCisJCQlsZWdhY3kgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHRhc2sgc3dpdGNoLgogCiAJbm9obHQJCVtCVUdTPUFSTV0KIApAQCAtMTAzNCw2ICsxMDQ4LDggQEAKIAogCW5vbWNlCQlbSUEtMzJdIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uCiAKKwlub21jYQkJW0lBLTY0XSBEaXNhYmxlIG1hY2hpbmUgY2hlY2sgYWJvcnQgaGFuZGxpbmcKKwogCW5vcmVzaWR1YWwJW1BQQ10gRG9uJ3QgdXNlIHJlc2lkdWFsIGRhdGEgb24gUFJlUCBtYWNoaW5lcy4KIAogCW5vcmVzdW1lCVtTV1NVU1BdIERpc2FibGVzIHJlc3VtZSBhbmQgcmVzdG9yZXMgb3JpZ2luYWwgc3dhcApAQCAtMTA0NSw2ICsxMDYxLDggQEAKIAogCW5vc2JhZ2FydAlbSUEtNjRdCiAKKwlub3NlcAkJW0JVR1M9SUEtMzJdIERpc2FibGVzIHg4NiBTWVNFTlRFUi9TWVNFWElUIHN1cHBvcnQuCisKIAlub3NtcAkJW1NNUF0gVGVsbHMgYW4gU01QIGtlcm5lbCB0byBhY3QgYXMgYSBVUCBrZXJuZWwuCiAKIAlub3N5bmMJCVtIVyxNNjhLXSBEaXNhYmxlcyBzeW5jIG5lZ290aWF0aW9uIGZvciBhbGwgZGV2aWNlcy4KQEAgLTExMTQsNiArMTEzMiwxMSBAQAogCXBhczE2PQkJW0hXLFNDU0ldCiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9wYXMxNi5jLgogCisJcGF1c2Vfb25fb29wcz0KKwkJCUhhbHQgYWxsIENQVXMgYWZ0ZXIgdGhlIGZpcnN0IG9vcHMgaGFzIGJlZW4gcHJpbnRlZCBmb3IKKwkJCXRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNlY29uZHMuICBUaGlzIGlzIHRvIGJlIHVzZWQgaWYKKwkJCXlvdXIgb29wc2VzIGtlZXAgc2Nyb2xsaW5nIG9mZiB0aGUgc2NyZWVuLgorCiAJcGNiaXQ9CQlbSFcsSVNETl0KIAogCXBjZC4JCVtQQVJJREVdCkBAIC0xMTM1LDYgKzExNTgsOSBAQAogCQkJCU1lY2hhbmlzbSAyLgogCQlub21tY29uZglbSUEtMzIsWDg2XzY0XSBEaXNhYmxlIHVzZSBvZiBNTUNPTkZJRyBmb3IgUENJCiAJCQkJQ29uZmlndXJhdGlvbgorCQlub21zaQkJW01TSV0gSWYgdGhlIFBDSV9NU0kga2VybmVsIGNvbmZpZyBwYXJhbWV0ZXIgaXMKKwkJCQllbmFibGVkLCB0aGlzIGtlcm5lbCBib290IG9wdGlvbiBjYW4gYmUgdXNlZCB0bworCQkJCWRpc2FibGUgdGhlIHVzZSBvZiBNU0kgaW50ZXJydXB0cyBzeXN0ZW0td2lkZS4KIAkJbm9zb3J0CQlbSUEtMzJdIERvbid0IHNvcnQgUENJIGRldmljZXMgYWNjb3JkaW5nIHRvCiAJCQkJb3JkZXIgZ2l2ZW4gYnkgdGhlIFBDSSBCSU9TLiBUaGlzIHNvcnRpbmcgaXMKIAkJCQlkb25lIHRvIGdldCBhIGRldmljZSBvcmRlciBjb21wYXRpYmxlIHdpdGgKQEAgLTEyODIsNiArMTMwOCwxOSBAQAogCQkJTmV3IG5hbWUgZm9yIHRoZSByYW1kaXNrIHBhcmFtZXRlci4KIAkJCVNlZSBEb2N1bWVudGF0aW9uL3JhbWRpc2sudHh0LgogCisJcmN1LmJsaW1pdD0JW0tOTCxCT09UXSBTZXQgbWF4aW11bSBudW1iZXIgb2YgZmluaXNoZWQKKwkJCVJDVSBjYWxsYmFja3MgdG8gcHJvY2VzcyBpbiBvbmUgYmF0Y2guCisKKwlyY3UucWhpbWFyaz0JW0tOTCxCT09UXSBTZXQgdGhyZXNob2xkIG9mIHF1ZXVlZAorCQkJUkNVIGNhbGxiYWNrcyBvdmVyIHdoaWNoIGJhdGNoIGxpbWl0aW5nIGlzIGRpc2FibGVkLgorCisJcmN1LnFsb3dtYXJrPQlbS05MLEJPT1RdIFNldCB0aHJlc2hvbGQgb2YgcXVldWVkCisJCQlSQ1UgY2FsbGJhY2tzIGJlbG93IHdoaWNoIGJhdGNoIGxpbWl0aW5nIGlzIHJlLWVuYWJsZWQuCisKKwlyY3UucnNpbnRlcnZhbD0JW0tOTCxCT09ULFNNUF0gU2V0IHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbAorCQkJUkNVIGNhbGxiYWNrcyB0byBxdWV1ZWQgYmVmb3JlIGZvcmNpbmcgcmVzY2hlZHVsZQorCQkJb24gYWxsIGNwdXMuCisKIAlyZGluaXQ9CQlbS05MXQogCQkJRm9ybWF0OiA8ZnVsbF9wYXRoPgogCQkJUnVuIHNwZWNpZmllZCBiaW5hcnkgaW5zdGVhZCBvZiAvaW5pdCBmcm9tIHRoZSByYW1kaXNrLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCmluZGV4IDViMDFkNWMuLmIxMTgxY2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKQEAgLTkyLDggKzkyLDYgQEAKIAktIHRoZSBuZXcgcm91dGluZyBtZWNoYW5pc20KIHNoYXBlci50eHQKIAktIGluZm8gb24gdGhlIG1vZHVsZSB0aGF0IGNhbiBzaGFwZS9saW1pdCB0cmFuc21pdHRlZCB0cmFmZmljLgotc2lzOTAwLnR4dAotCS0gU2lTIDkwMC83MDE2IEZhc3QgRXRoZXJuZXQgZGV2aWNlIGRyaXZlciBpbmZvLgogc2s5OGxpbi50eHQKIAktIE1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBjb21wbGlhbnQgR2lnYWJpdAogCSAgRXRoZXJuZXQgQWRhcHRlciBmYW1pbHkgZHJpdmVyIGluZm8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjEwMCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjEwMAppbmRleCAzYWI0MDM3Li5mM2ZjYWE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIxMDAKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMTAwCkBAIC0zLDE4ICszLDE4IEBACiAKIEludGVsKFIpIFBSTy9XaXJlbGVzcyAyMTAwIE5ldHdvcmsgQ29ubmVjdGlvbgogCi1Db3B5cmlnaHQgKEMpIDIwMDMtMjAwNSwgSW50ZWwgQ29ycG9yYXRpb24KK0NvcHlyaWdodCAoQykgMjAwMy0yMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbgogCiBSRUFETUUuaXB3MjEwMAogCi1WZXJzaW9uOiAxLjEuMwotRGF0ZSAgIDogT2N0b2JlciAxNywgMjAwNQorVmVyc2lvbjogZ2l0LTEuMS41CitEYXRlICAgOiBKYW51YXJ5IDI1LCAyMDA2CiAKIEluZGV4CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMC4gSU1QT1JUQU5UIElORk9STUFUSU9OIEJFRk9SRSBVU0lORyBUSElTIERSSVZFUgogMS4gSW50cm9kdWN0aW9uCi0yLiBSZWxlYXNlIDEuMS4zIEN1cnJlbnQgRmVhdHVyZXMKKzIuIFJlbGVhc2UgZ2l0LTEuMS41IEN1cnJlbnQgRmVhdHVyZXMKIDMuIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCiA0LiBTeXNmcyBIZWxwZXIgRmlsZXMKIDUuIFJhZGlvIEtpbGwgU3dpdGNoCkBAIC04OSw3ICs4OSw3IEBACiBmb3IgdGhlIGRyaXZlciBwcm9qZWN0LgogCiAKLTIuIFJlbGVhc2UgMS4xLjMgQ3VycmVudCBTdXBwb3J0ZWQgRmVhdHVyZXMKKzIuIFJlbGVhc2UgZ2l0LTEuMS41IEN1cnJlbnQgU3VwcG9ydGVkIEZlYXR1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLSBNYW5hZ2VkIChCU1MpIGFuZCBBZC1Ib2MgKElCU1MpCiAtIFdFUCAoc2hhcmVkIGtleSBhbmQgb3BlbikKQEAgLTI3MCw3ICsyNzAsNyBAQAogOS4gTGljZW5zZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjIwMAppbmRleCBjNjQ5MmQzLi5hY2IzMGM1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5pcHcyMjAwCkBAIC0xMCw3ICsxMCw3IEBACiBQUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4IHdpbGwgYmUgdXNlZCB0byByZWZlcmVuY2UgdGhlCiB1bmlmaWVkIGRyaXZlci4KIAotQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIEludGVsIENvcnBvcmF0aW9uCitDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgSW50ZWwgQ29ycG9yYXRpb24KIAogUkVBRE1FLmlwdzIyMDAKIApAQCAtMjYsOSArMjYsMTEgQEAKIDEuMi4gTW9kdWxlIHBhcmFtZXRlcnMKIDEuMy4gV2lyZWxlc3MgRXh0ZW5zaW9uIFByaXZhdGUgTWV0aG9kcwogMS40LiBTeXNmcyBIZWxwZXIgRmlsZXMKKzEuNS4gU3VwcG9ydGVkIGNoYW5uZWxzCiAyLiAgIEFkLUhvYyBOZXR3b3JraW5nCiAzLiAgIEludGVyYWN0aW5nIHdpdGggV2lyZWxlc3MgVG9vbHMKIDMuMS4gaXdjb25maWcgbW9kZQorMy4yLiBpd2NvbmZpZyBzZW5zCiA0LiAgIEFib3V0IHRoZSBWZXJzaW9uIE51bWJlcnMKIDUuICAgRmlybXdhcmUgaW5zdGFsbGF0aW9uCiA2LiAgIFN1cHBvcnQKQEAgLTMxNCw2ICszMTYsMzUgQEAKIAlydW5uaW5nIGlmY29uZmlnIGFuZCBpcyB0aGVyZWZvcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4KIAogCisxLjUuIFN1cHBvcnRlZCBjaGFubmVscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXBvbiBsb2FkaW5nIHRoZSBJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjkxNUFCRyBEcml2ZXIgZm9yIExpbnV4LCBhCittZXNzYWdlIHN0YXRpbmcgdGhlIGRldGVjdGVkIGdlb2dyYXBoeSBjb2RlIGFuZCB0aGUgbnVtYmVyIG9mIDgwMi4xMQorY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IHRoZSBjYXJkIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBsb2cuCisKK1RoZSBnZW9ncmFwaHkgY29kZSBjb3JyZXNwb25kcyB0byBhIHJlZ3VsYXRvcnkgZG9tYWluIGFzIHNob3duIGluIHRoZQordGFibGUgYmVsb3cuCisKKwkJCQkJICBTdXBwb3J0ZWQgY2hhbm5lbHMKK0NvZGUJR2VvZ3JhcGh5CQkJODAyLjExYmcJODAyLjExYQorCistLS0JUmVzdHJpY3RlZAkJCTExIAkgCSAwCitaWkYJQ3VzdG9tIFVTL0NhbmFkYQkJMTEJIAkgOAorWlpECVJlc3Qgb2YgV29ybGQJCQkxMwkgCSAwCitaWkEJQ3VzdG9tIFVTQSAmIEV1cm9wZSAmIEhpZ2gJMTEJCTEzCitaWkIJQ3VzdG9tIE5BICYgRXVyb3BlICAgIAkJMTEJCTEzCitaWkMJQ3VzdG9tIEphcGFuCQkJMTEJIAkgNAorWlpNCUN1c3RvbSAJCQkJMTEJIAkgMAorWlpFCUV1cm9wZQkJCQkxMwkJMTkKK1paSglDdXN0b20gSmFwYW4JCQkxNAkgCSA0CitaWlIJUmVzdCBvZiBXb3JsZAkJCTE0CSAJIDAKK1paSAlIaWdoIEJhbmQJCQkxMwkgCSA0CitaWkcJQ3VzdG9tIEV1cm9wZQkJCTEzCSAJIDQKK1paSwlFdXJvcGUgCQkJCTEzCQkyNAorWlpMCUV1cm9wZQkJCQkxMQkJMTMKKworCiAyLiAgIEFkLUhvYyBOZXR3b3JraW5nCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0zNTMsNiArMzg0LDE1IEBACiBhcmUgcmVzZXQgdG8gdGhlIHZhbHVlIHVzZWQgd2hlbiB0aGUgbW9kdWxlIHdhcyBsb2FkZWQuICBUaGlzIGluY2x1ZGVzCiBjaGFubmVscywgcmF0ZXMsIEVTU0lELCBldGMuCiAKKzMuMiBpd2NvbmZpZyBzZW5zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ2l3Y29uZmlnIGV0aFggc2VucyBYWCcgY29tbWFuZCB3aWxsIG5vdCBzZXQgdGhlIHNpZ25hbCBzZW5zaXRpdml0eQordGhyZXNob2xkLCBhcyBkZXNjcmliZWQgaW4gaXdjb25maWcgZG9jdW1lbnRhdGlvbiwgYnV0IHJhdGhlciB0aGUgbnVtYmVyCitvZiBjb25zZWN1dGl2ZSBtaXNzZWQgYmVhY29ucyB0aGF0IHdpbGwgdHJpZ2dlciBoYW5kb3ZlciwgaS5lLiByb2FtaW5nCit0byBhbm90aGVyIGFjY2VzcyBwb2ludC4gQXQgdGhlIHNhbWUgdGltZSwgaXQgd2lsbCBzZXQgdGhlIGRpc2Fzc29jaWF0aW9uCit0aHJlc2hvbGQgdG8gMyB0aW1lcyB0aGUgZ2l2ZW4gdmFsdWUuCisKIAogNC4gICBBYm91dCB0aGUgVmVyc2lvbiBOdW1iZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDA4LDcgKzQ0OCw3IEBACiA3LiAgTGljZW5zZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQKaW5kZXggNGVmOWY3Yy4uOTQ0YWE1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwLnR4dApAQCAtMSwxNiArMSwxNyBAQAogTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMCBGYW1pbHkgb2YgQWRhcHRlcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLU5vdmVtYmVyIDE3LCAyMDA0Ci0KK05vdmVtYmVyIDE1LCAyMDA1CiAKIENvbnRlbnRzCiA9PT09PT09PQogCiAtIEluIFRoaXMgUmVsZWFzZQogLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgogLSBEcml2ZXIgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzCiAtIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKy0gS25vd24gSXNzdWVzCiAtIFN1cHBvcnQKIAogCkBAIC0xOCwxOCArMTksMzAgQEAKID09PT09PT09PT09PT09PQogCiBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBMaW51eCogQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbChSKSBQUk8vMTAwIEZhbWlseSBvZgotQWRhcHRlcnMsIHZlcnNpb24gMy4zLnguICBUaGlzIGRyaXZlciBzdXBwb3J0cyAyLjQueCBhbmQgMi42Lngga2VybmVscy4gCitBZGFwdGVycy4gVGhpcyBkcml2ZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IgSXRhbml1bShSKTItYmFzZWQgc3lzdGVtcy4KKworRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24KK3N1cHBsaWVkIHdpdGggeW91ciBJbnRlbCBQUk8vMTAwIGFkYXB0ZXIuCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIG5vdyBhdmFpbGFibGUgaW4gc3VwcG9ydGVkIGtlcm5lbHM6CisgLSBOYXRpdmUgVkxBTnMKKyAtIENoYW5uZWwgQm9uZGluZyAodGVhbWluZykKKyAtIFNOTVAKKworQ2hhbm5lbCBCb25kaW5nIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlOgorL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorCiAKIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgogPT09PT09PT09PT09PT09PT09PT09PT09CiAKLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYgCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmCiBEcml2ZXIgSUQgR3VpZGUgYXQ6CiAKICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9hZGFwdGVyL3BybzEwMC8yMTM5Ny5odG0KIAotRm9yIHRoZSBsYXRlc3QgSW50ZWwgbmV0d29yayBkcml2ZXJzIGZvciBMaW51eCwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyAKLXdlYnNpdGUuIEluIHRoZSBzZWFyY2ggZmllbGQsIGVudGVyIHlvdXIgYWRhcHRlciBuYW1lIG9yIHR5cGUsIG9yIHVzZSB0aGUgCitGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nCit3ZWJzaXRlLiBJbiB0aGUgc2VhcmNoIGZpZWxkLCBlbnRlciB5b3VyIGFkYXB0ZXIgbmFtZSBvciB0eXBlLCBvciB1c2UgdGhlCiBuZXR3b3JraW5nIGxpbmsgb24gdGhlIGxlZnQgdG8gc2VhcmNoIGZvciB5b3VyIGFkYXB0ZXI6CiAKICAgaHR0cDovL2Rvd25sb2FkZmluZGVyLmludGVsLmNvbS9zY3JpcHRzLWRmL3N1cHBvcnRfaW50ZWwuYXNwCkBAIC00MCw3MyArNTMsNzUgQEAKIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIHBhcmFtZXRlciBpcyBnZW5lcmFsbHkgdGhlIHJlY29tbWVuZGVkIHNldHRpbmcsCiB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgogCi1SeCBEZXNjcmlwdG9yczogTnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMuIEEgcmVjZWl2ZSBkZXNjcmlwdG9yIGlzIGEgZGF0YSAKLSAgIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIHJlY2VpdmUgYnVmZmVyIGFuZCBpdHMgYXR0cmlidXRlcyB0byB0aGUgbmV0d29yayAKLSAgIGNvbnRyb2xsZXIuIFRoZSBkYXRhIGluIHRoZSBkZXNjcmlwdG9yIGlzIHVzZWQgYnkgdGhlIGNvbnRyb2xsZXIgdG8gd3JpdGUgCi0gICBkYXRhIGZyb20gdGhlIGNvbnRyb2xsZXIgdG8gaG9zdCBtZW1vcnkuIEluIHRoZSAzLjAueCBkcml2ZXIgdGhlIHZhbGlkCi0gICByYW5nZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgNjQtMjU2LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2NC4gVGhpcyBwYXJhbWV0ZXIgCi0gICBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgY29tbWFuZCAKLSAKK1J4IERlc2NyaXB0b3JzOiBOdW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycy4gQSByZWNlaXZlIGRlc2NyaXB0b3IgaXMgYSBkYXRhCisgICBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSByZWNlaXZlIGJ1ZmZlciBhbmQgaXRzIGF0dHJpYnV0ZXMgdG8gdGhlIG5ldHdvcmsKKyAgIGNvbnRyb2xsZXIuIFRoZSBkYXRhIGluIHRoZSBkZXNjcmlwdG9yIGlzIHVzZWQgYnkgdGhlIGNvbnRyb2xsZXIgdG8gd3JpdGUKKyAgIGRhdGEgZnJvbSB0aGUgY29udHJvbGxlciB0byBob3N0IG1lbW9yeS4gSW4gdGhlIDMueC54IGRyaXZlciB0aGUgdmFsaWQgcmFuZ2UKKyAgIGZvciB0aGlzIHBhcmFtZXRlciBpcyA2NC0yNTYuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDY0LiBUaGlzIHBhcmFtZXRlciBjYW4gYmUKKyAgIGNoYW5nZWQgdXNpbmcgdGhlIGNvbW1hbmQ6CisKICAgIGV0aHRvb2wgLUcgZXRoPyByeCBuLCB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCByeCBkZXNjcmlwdG9ycy4KIAotVHggRGVzY3JpcHRvcnM6IE51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycy4gQSB0cmFuc21pdCBkZXNjcmlwdG9yIGlzIGEKLSAgIGRhdGEgc3RydWN0dXJlIHRoYXQgZGVzY3JpYmVzIGEgdHJhbnNtaXQgYnVmZmVyIGFuZCBpdHMgYXR0cmlidXRlcyB0byB0aGUKLSAgIG5ldHdvcmsgY29udHJvbGxlci4gVGhlIGRhdGEgaW4gdGhlIGRlc2NyaXB0b3IgaXMgdXNlZCBieSB0aGUgY29udHJvbGxlciB0byAKLSAgIHJlYWQgZGF0YSBmcm9tIHRoZSBob3N0IG1lbW9yeSB0byB0aGUgY29udHJvbGxlci4gSW4gdGhlIDMuMC54IGRyaXZlciB0aGUgCi0gICB2YWxpZCByYW5nZSBmb3IgdGhpcyBwYXJhbWV0ZXIgaXMgNjQtMjU2LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2NC4gVGhpcyAKLSAgIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgY29tbWFuZCAKK1R4IERlc2NyaXB0b3JzOiBOdW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMuIEEgdHJhbnNtaXQgZGVzY3JpcHRvciBpcyBhIGRhdGEKKyAgIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIHRyYW5zbWl0IGJ1ZmZlciBhbmQgaXRzIGF0dHJpYnV0ZXMgdG8gdGhlIG5ldHdvcmsKKyAgIGNvbnRyb2xsZXIuIFRoZSBkYXRhIGluIHRoZSBkZXNjcmlwdG9yIGlzIHVzZWQgYnkgdGhlIGNvbnRyb2xsZXIgdG8gcmVhZAorICAgZGF0YSBmcm9tIHRoZSBob3N0IG1lbW9yeSB0byB0aGUgY29udHJvbGxlci4gSW4gdGhlIDMueC54IGRyaXZlciB0aGUgdmFsaWQKKyAgIHJhbmdlIGZvciB0aGlzIHBhcmFtZXRlciBpcyA2NC0yNTYuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDY0LiBUaGlzIHBhcmFtZXRlcgorICAgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGNvbW1hbmQ6CiAKICAgIGV0aHRvb2wgLUcgZXRoPyB0eCBuLCB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCB0eCBkZXNjcmlwdG9ycy4KIAotU3BlZWQvRHVwbGV4OiBUaGUgZHJpdmVyIGF1dG8tbmVnb3RpYXRlcyB0aGUgbGluayBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIGJ5IAotICAgZGVmYXVsdC4gRXRodG9vbCBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzIHRvIGZvcmNlIHNwZWVkL2R1cGxleC4gCitTcGVlZC9EdXBsZXg6IFRoZSBkcml2ZXIgYXV0by1uZWdvdGlhdGVzIHRoZSBsaW5rIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZ3MgYnkKKyAgIGRlZmF1bHQuIEV0aHRvb2wgY2FuIGJlIHVzZWQgYXMgZm9sbG93cyB0byBmb3JjZSBzcGVlZC9kdXBsZXguCiAKICAgIGV0aHRvb2wgLXMgZXRoPyAgYXV0b25lZyBvZmYgc3BlZWQgezEwfDEwMH0gZHVwbGV4IHtmdWxsfGhhbGZ9CiAKICAgIE5PVEU6IHNldHRpbmcgdGhlIHNwZWVkL2R1cGxleCB0byBpbmNvcnJlY3QgdmFsdWVzIHdpbGwgY2F1c2UgdGhlIGxpbmsgdG8KICAgIGZhaWwuCiAKLUV2ZW50IExvZyBNZXNzYWdlIExldmVsOiAgVGhlIGRyaXZlciB1c2VzIHRoZSBtZXNzYWdlIGxldmVsIGZsYWcgdG8gbG9nIGV2ZW50cyAKLSAgIHRvIHN5c2xvZy4gVGhlIG1lc3NhZ2UgbGV2ZWwgY2FuIGJlIHNldCBhdCBkcml2ZXIgbG9hZCB0aW1lLiBJdCBjYW4gYWxzbyBiZSAKLSAgIHNldCB1c2luZyB0aGUgY29tbWFuZAorRXZlbnQgTG9nIE1lc3NhZ2UgTGV2ZWw6ICBUaGUgZHJpdmVyIHVzZXMgdGhlIG1lc3NhZ2UgbGV2ZWwgZmxhZyB0byBsb2cgZXZlbnRzCisgICB0byBzeXNsb2cuIFRoZSBtZXNzYWdlIGxldmVsIGNhbiBiZSBzZXQgYXQgZHJpdmVyIGxvYWQgdGltZS4gSXQgY2FuIGFsc28gYmUKKyAgIHNldCB1c2luZyB0aGUgY29tbWFuZDoKIAogICAgZXRodG9vbCAtcyBldGg/IG1zZ2x2bCBuCiAKKwogQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgIENvbmZpZ3VyaW5nIHRoZSBEcml2ZXIgb24gRGlmZmVyZW50IERpc3RyaWJ1dGlvbnMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gIENvbmZpZ3VyaW5nIGEgbmV0d29yayBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RhcnRlZCBpcyAKLSAgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gVHlwaWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGludm9sdmVzIGFkZGluZyAKLSAgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBhcyB3ZWxsIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgCi0gIHNjcmlwdHMgYW5kL29yIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBNYW55IHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyBzaGlwIAotICB3aXRoIHRvb2xzIHRvIG1ha2UgdGhlc2UgY2hhbmdlcyBmb3IgeW91LiBUbyBsZWFybiB0aGUgcHJvcGVyIHdheSB0byAKLSAgY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLCByZWZlciB0byB5b3VyIGRpc3RyaWJ1dGlvbiAKLSAgZG9jdW1lbnRhdGlvbi4gSWYgZHVyaW5nIHRoaXMgcHJvY2VzcyB5b3UgYXJlIGFza2VkIGZvciB0aGUgZHJpdmVyIG9yIG1vZHVsZSAKLSAgbmFtZSwgdGhlIG5hbWUgZm9yIHRoZSBMaW51eCBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsIFBSTy8xMDAgRmFtaWx5IG9mIAotICBBZGFwdGVycyBpcyBlMTAwLgorICBDb25maWd1cmluZyBhIG5ldHdvcmsgZHJpdmVyIHRvIGxvYWQgcHJvcGVybHkgd2hlbiB0aGUgc3lzdGVtIGlzIHN0YXJ0ZWQgaXMKKyAgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gVHlwaWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGludm9sdmVzIGFkZGluZworICBhbiBhbGlhcyBsaW5lIHRvIC9ldGMvbW9kdWxlcy5jb25mIG9yIC9ldGMvbW9kcHJvYmUuY29uZiBhcyB3ZWxsIGFzIGVkaXRpbmcKKyAgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgc2NyaXB0cyBhbmQvb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gIE1hbnkgcG9wdWxhciBMaW51eAorICBkaXN0cmlidXRpb25zIHNoaXAgd2l0aCB0b29scyB0byBtYWtlIHRoZXNlIGNoYW5nZXMgZm9yIHlvdS4gVG8gbGVhcm4gdGhlCisgIHByb3BlciB3YXkgdG8gY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLCByZWZlciB0byB5b3VyCisgIGRpc3RyaWJ1dGlvbiBkb2N1bWVudGF0aW9uLiAgSWYgZHVyaW5nIHRoaXMgcHJvY2VzcyB5b3UgYXJlIGFza2VkIGZvciB0aGUKKyAgZHJpdmVyIG9yIG1vZHVsZSBuYW1lLCB0aGUgbmFtZSBmb3IgdGhlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwKKyAgUFJPLzEwMCBGYW1pbHkgb2YgQWRhcHRlcnMgaXMgZTEwMC4KIAotICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCB0aGUgZTEwMCBkcml2ZXIgZm9yIHR3byBQUk8vMTAwIGFkYXB0ZXJzIAotICAoZXRoMCBhbmQgZXRoMSksIGFkZCB0aGUgZm9sbG93aW5nIHRvIG1vZHVsZXMuY29uZjoKKyAgQXMgYW4gZXhhbXBsZSwgaWYgeW91IGluc3RhbGwgdGhlIGUxMDAgZHJpdmVyIGZvciB0d28gUFJPLzEwMCBhZGFwdGVycworICAoZXRoMCBhbmQgZXRoMSksIGFkZCB0aGUgZm9sbG93aW5nIHRvIG1vZHVsZXMuY29uZiBvciBtb2Rwcm9iZS5jb25mOgogCiAgICAgICAgYWxpYXMgZXRoMCBlMTAwCiAgICAgICAgYWxpYXMgZXRoMSBlMTAwCiAKICAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBJbiBvcmRlciB0byBzZWUgbGluayBtZXNzYWdlcyBhbmQgb3RoZXIgSW50ZWwgZHJpdmVyIGluZm9ybWF0aW9uIG9uIHlvdXIgCi0gIGNvbnNvbGUsIHlvdSBtdXN0IHNldCB0aGUgZG1lc2cgbGV2ZWwgdXAgdG8gc2l4LiBUaGlzIGNhbiBiZSBkb25lIGJ5IAotICBlbnRlcmluZyB0aGUgZm9sbG93aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlIGxvYWRpbmcgdGhlIGUxMDAgZHJpdmVyOiAKKyAgSW4gb3JkZXIgdG8gc2VlIGxpbmsgbWVzc2FnZXMgYW5kIG90aGVyIEludGVsIGRyaXZlciBpbmZvcm1hdGlvbiBvbiB5b3VyCisgIGNvbnNvbGUsIHlvdSBtdXN0IHNldCB0aGUgZG1lc2cgbGV2ZWwgdXAgdG8gc2l4LiBUaGlzIGNhbiBiZSBkb25lIGJ5CisgIGVudGVyaW5nIHRoZSBmb2xsb3dpbmcgb24gdGhlIGNvbW1hbmQgbGluZSBiZWZvcmUgbG9hZGluZyB0aGUgZTEwMCBkcml2ZXI6CiAKICAgICAgICBkbWVzZyAtbiA4CiAKLSAgSWYgeW91IHdpc2ggdG8gc2VlIGFsbCBtZXNzYWdlcyBpc3N1ZWQgYnkgdGhlIGRyaXZlciwgaW5jbHVkaW5nIGRlYnVnIAorICBJZiB5b3Ugd2lzaCB0byBzZWUgYWxsIG1lc3NhZ2VzIGlzc3VlZCBieSB0aGUgZHJpdmVyLCBpbmNsdWRpbmcgZGVidWcKICAgbWVzc2FnZXMsIHNldCB0aGUgZG1lc2cgbGV2ZWwgdG8gZWlnaHQuCiAKICAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4KIAorCiAgIEV0aHRvb2wKICAgLS0tLS0tLQogCkBAIC0xMTQsMjkgKzEyOSwyNyBAQAogICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgRXRodG9vbAogICB2ZXJzaW9uIDEuNiBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgogCi0gIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBhdDoKLSAgaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9na2VybmVsLiAgCisgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBmcm9tCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KIAotICBOT1RFOiBUaGlzIGRyaXZlciB1c2VzIG1paSBzdXBwb3J0IGZyb20gdGhlIGtlcm5lbC4gQXMgYSByZXN1bHQsIHdoZW4gCi0gIHRoZXJlIGlzIG5vIGxpbmssIGV0aHRvb2wgd2lsbCByZXBvcnQgc3BlZWQvZHVwbGV4IHRvIGJlIDEwL2hhbGYuCisgIE5PVEU6IEV0aHRvb2wgMS42IG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIHNldCBvZiBldGh0b29sIG9wdGlvbnMuIFN1cHBvcnQKKyAgZm9yIGEgbW9yZSBjb21wbGV0ZSBldGh0b29sIGZlYXR1cmUgc2V0IGNhbiBiZSBlbmFibGVkIGJ5IHVwZ3JhZGluZworICBldGh0b29sIHRvIGV0aHRvb2wtMS44LjEuCiAKLSAgTk9URTogRXRodG9vbCAxLjYgb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgc2V0IG9mIGV0aHRvb2wgb3B0aW9ucy4gU3VwcG9ydCAKLSAgZm9yIGEgbW9yZSBjb21wbGV0ZSBldGh0b29sIGZlYXR1cmUgc2V0IGNhbiBiZSBlbmFibGVkIGJ5IHVwZ3JhZGluZyAKLSAgZXRodG9vbCB0byBldGh0b29sLTEuOC4xLiAKIAogICBFbmFibGluZyBXYWtlIG9uIExBTiogKFdvTCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFdvTCBpcyBwcm92aWRlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LiBFdGh0b29sIGlzIGluY2x1ZGVkIHdpdGggUmVkIAotICBIYXQqIDguMC4gRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsIGRvd25sb2FkIGFuZCBpbnN0YWxsIEV0aHRvb2wgZnJvbSAKLSAgdGhlIGZvbGxvd2luZyB3ZWJzaXRlOiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuIAorICBXb0wgaXMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgRXRodG9vbCogdXRpbGl0eS4gRXRodG9vbCBpcyBpbmNsdWRlZCB3aXRoIFJlZAorICBIYXQqIDguMC4gRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsIGRvd25sb2FkIGFuZCBpbnN0YWxsIEV0aHRvb2wgZnJvbQorICB0aGUgZm9sbG93aW5nIHdlYnNpdGU6IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KIAotICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGVuYWJsaW5nIFdvTCB3aXRoIEV0aHRvb2wsIHJlZmVyIHRvIHRoZSBFdGh0b29sIG1hbgotICBwYWdlLgorICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGVuYWJsaW5nIFdvTCB3aXRoIEV0aHRvb2wsIHJlZmVyIHRvIHRoZSBFdGh0b29sIG1hbiBwYWdlLgogCiAgIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4gRm9yCi0gIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBlMTAwIGRyaXZlciBtdXN0IGJlIAorICB0aGlzIGRyaXZlciB2ZXJzaW9uLCBpbiBvcmRlciB0byBlbmFibGUgV29MLCB0aGUgZTEwMCBkcml2ZXIgbXVzdCBiZQogICBsb2FkZWQgd2hlbiBzaHV0dGluZyBkb3duIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtLgogCisKICAgTkFQSQogICAtLS0tCiAKQEAgLTE0NCw2ICsxNTcsMjUgQEAKIAogICBTZWUgd3d3LmN5YmVydXMuY2EvfmhhZGkvdXNlbml4LXBhcGVyLnRneiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQVBJLgogCisgIE11bHRpcGxlIEludGVyZmFjZXMgb24gU2FtZSBFdGhlcm5ldCBCcm9hZGNhc3QgTmV0d29yaworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBEdWUgdG8gdGhlIGRlZmF1bHQgQVJQIGJlaGF2aW9yIG9uIExpbnV4LCBpdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZQorICBvbmUgc3lzdGVtIG9uIHR3byBJUCBuZXR3b3JrcyBpbiB0aGUgc2FtZSBFdGhlcm5ldCBicm9hZGNhc3QgZG9tYWluCisgIChub24tcGFydGl0aW9uZWQgc3dpdGNoKSBiZWhhdmUgYXMgZXhwZWN0ZWQuIEFsbCBFdGhlcm5ldCBpbnRlcmZhY2VzCisgIHdpbGwgcmVzcG9uZCB0byBJUCB0cmFmZmljIGZvciBhbnkgSVAgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgc3lzdGVtLgorICBUaGlzIHJlc3VsdHMgaW4gdW5iYWxhbmNlZCByZWNlaXZlIHRyYWZmaWMuCisKKyAgSWYgeW91IGhhdmUgbXVsdGlwbGUgaW50ZXJmYWNlcyBpbiBhIHNlcnZlciwgZWl0aGVyIHR1cm4gb24gQVJQCisgIGZpbHRlcmluZyBieQorCisgICgxKSBlbnRlcmluZzogZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL2FycF9maWx0ZXIKKyAgICAgICh0aGlzIG9ubHkgd29ya3MgaWYgeW91ciBrZXJuZWwncyB2ZXJzaW9uIGlzIGhpZ2hlciB0aGFuIDIuNC41KSwgb3IKKworICAoMikgaW5zdGFsbGluZyB0aGUgaW50ZXJmYWNlcyBpbiBzZXBhcmF0ZSBicm9hZGNhc3QgZG9tYWlucyAoZWl0aGVyCisgICAgICBpbiBkaWZmZXJlbnQgc3dpdGNoZXMgb3IgaW4gYSBzd2l0Y2ggcGFydGl0aW9uZWQgdG8gVkxBTnMpLgorCisKIFN1cHBvcnQKID09PT09PT0KIApAQCAtMTUxLDIwICsxODMsMjQgQEAKIAogICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbQogCisgICAgb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CisKKyAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwCisKIElmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAota2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gCi10aGUgaXNzdWUgdG8gbGludXgubmljc0BpbnRlbC5jb20uCitrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUKK2lzc3VlIHRvIGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldC4KIAogCiBMaWNlbnNlCiA9PT09PT09CiAKLVRoaXMgc29mdHdhcmUgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIGFncmVlbWVudCAKLWJldHdlZW4geW91ICgnTGljZW5zZWUnKSBhbmQgSW50ZWwuIERvIG5vdCB1c2Ugb3IgbG9hZCB0aGlzIHNvZnR3YXJlIG9yIGFueSAKLWFzc29jaWF0ZWQgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHksIHRoZSAnU29mdHdhcmUnKSB1bnRpbCB5b3UgaGF2ZSBjYXJlZnVsbHkgCi1yZWFkIHRoZSBmdWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMSUNFTlNFIGxvY2F0ZWQgaW4gdGhpcyBzb2Z0d2FyZSAKLXBhY2thZ2UuIEJ5IGxvYWRpbmcgb3IgdXNpbmcgdGhlIFNvZnR3YXJlLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgCi1BZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGRvIG5vdCAKLWluc3RhbGwgb3IgdXNlIHRoZSBTb2Z0d2FyZS4KK1RoaXMgc29mdHdhcmUgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIGFncmVlbWVudAorYmV0d2VlbiB5b3UgKCdMaWNlbnNlZScpIGFuZCBJbnRlbC4gRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgc29mdHdhcmUgb3IgYW55Cithc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgJ1NvZnR3YXJlJykgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5CityZWFkIHRoZSBmdWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBmaWxlIENPUFlJTkcgbG9jYXRlZCBpbiB0aGlzIHNvZnR3YXJlCitwYWNrYWdlLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzCitBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGRvIG5vdCBpbnN0YWxsCitvciB1c2UgdGhlIFNvZnR3YXJlLgogCiAqIE90aGVyIG5hbWVzIGFuZCBicmFuZHMgbWF5IGJlIGNsYWltZWQgYXMgdGhlIHByb3BlcnR5IG9mIG90aGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0CmluZGV4IDJlYmQ0MDUuLjcxZmUxNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dApAQCAtMSw3ICsxLDcgQEAKIExpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAwIEZhbWlseSBvZiBBZGFwdGVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLU5vdmVtYmVyIDE3LCAyMDA0CitOb3ZlbWJlciAxNSwgMjAwNQogCiAKIENvbnRlbnRzCkBAIC0yMCwyNTQgKzIwLDMxNiBAQAogPT09PT09PT09PT09PT09CiAKIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIExpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAwIEZhbWlseQotb2YgQWRhcHRlcnMsIHZlcnNpb24gNS54LnguICAKK29mIEFkYXB0ZXJzLiAgVGhpcyBkcml2ZXIgaW5jbHVkZXMgc3VwcG9ydCBmb3IgSXRhbml1bShSKTItYmFzZWQgc3lzdGVtcy4KIAotRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gCi1zdXBwbGllZCB3aXRoIHlvdXIgSW50ZWwgUFJPLzEwMDAgYWRhcHRlci4gQWxsIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBsaXN0ZWQgCitGb3IgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gaGFyZHdhcmUgcmVxdWlyZW1lbnRzLCByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbgorc3VwcGxpZWQgd2l0aCB5b3VyIEludGVsIFBSTy8xMDAwIGFkYXB0ZXIuIEFsbCBoYXJkd2FyZSByZXF1aXJlbWVudHMgbGlzdGVkCiBhcHBseSB0byB1c2Ugd2l0aCBMaW51eC4KIAotTmF0aXZlIFZMQU5zIGFyZSBub3cgYXZhaWxhYmxlIHdpdGggc3VwcG9ydGVkIGtlcm5lbHMuCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBub3cgYXZhaWxhYmxlIGluIHN1cHBvcnRlZCBrZXJuZWxzOgorIC0gTmF0aXZlIFZMQU5zCisgLSBDaGFubmVsIEJvbmRpbmcgKHRlYW1pbmcpCisgLSBTTk1QCisKK0NoYW5uZWwgQm9uZGluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZToKKy9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKKworVGhlIGRyaXZlciBpbmZvcm1hdGlvbiBwcmV2aW91c2x5IGRpc3BsYXllZCBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbSBpcyBub3QKK3N1cHBvcnRlZCBpbiB0aGlzIHJlbGVhc2UuICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBldGh0b29sICh2ZXJzaW9uIDEuNgorb3IgbGF0ZXIpLCBsc3BjaSwgYW5kIGlmY29uZmlnIHRvIG9idGFpbiB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KKworSW5zdHJ1Y3Rpb25zIG9uIHVwZGF0aW5nIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGluIHRoZSBzZWN0aW9uICJBZGRpdGlvbmFsCitDb25maWd1cmF0aW9ucyIgbGF0ZXIgaW4gdGhpcyBkb2N1bWVudC4KKwogCiBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKID09PT09PT09PT09PT09PT09PT09PT09PQogCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmIAorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJgogRHJpdmVyIElEIEd1aWRlIGF0OgogCiAgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9hZGFwdGVyL3BybzEwMC8yMTM5Ny5odG0KIAotRm9yIHRoZSBsYXRlc3QgSW50ZWwgbmV0d29yayBkcml2ZXJzIGZvciBMaW51eCwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyAKLXdlYnNpdGUuIEluIHRoZSBzZWFyY2ggZmllbGQsIGVudGVyIHlvdXIgYWRhcHRlciBuYW1lIG9yIHR5cGUsIG9yIHVzZSB0aGUgCitGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nCit3ZWJzaXRlLiBJbiB0aGUgc2VhcmNoIGZpZWxkLCBlbnRlciB5b3VyIGFkYXB0ZXIgbmFtZSBvciB0eXBlLCBvciB1c2UgdGhlCiBuZXR3b3JraW5nIGxpbmsgb24gdGhlIGxlZnQgdG8gc2VhcmNoIGZvciB5b3VyIGFkYXB0ZXI6CiAKICAgICBodHRwOi8vZG93bmxvYWRmaW5kZXIuaW50ZWwuY29tL3NjcmlwdHMtZGYvc3VwcG9ydF9pbnRlbC5hc3AKIAotQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKLT09PT09PT09PT09PT09PT09PT09PT09CiAKLUlmIHRoZSBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIHRoZSAgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIAotdXNlZCBieSBlbnRlcmluZyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgbW9kcHJvYmUgb3IgaW5zbW9kIGNvbW1hbmQKLXVzaW5nIHRoaXMgc3ludGF4OgorQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMgPT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlICBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycworYXJlIHVzZWQgYnkgZW50ZXJpbmcgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIG1vZHByb2JlIG9yIGluc21vZAorY29tbWFuZCB1c2luZyB0aGlzIHN5bnRheDoKIAogICAgICBtb2Rwcm9iZSBlMTAwMCBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCiAKLSAgICAgaW5zbW9kIGUxMDAwIFs8b3B0aW9uPj08VkFMMT4sPFZBTDI+LC4uLl0gCisgICAgIGluc21vZCBlMTAwMCBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCiAKIEZvciBleGFtcGxlLCB3aXRoIHR3byBQUk8vMTAwMCBQQ0kgYWRhcHRlcnMsIGVudGVyaW5nOgogCiAgICAgIGluc21vZCBlMTAwMCBUeERlc2NyaXB0b3JzPTgwLDEyOAogCi1sb2FkcyB0aGUgZTEwMDAgZHJpdmVyIHdpdGggODAgVFggZGVzY3JpcHRvcnMgZm9yIHRoZSBmaXJzdCBhZGFwdGVyIGFuZCAxMjggVFggCi1kZXNjcmlwdG9ycyBmb3IgdGhlIHNlY29uZCBhZGFwdGVyLgorbG9hZHMgdGhlIGUxMDAwIGRyaXZlciB3aXRoIDgwIFRYIGRlc2NyaXB0b3JzIGZvciB0aGUgZmlyc3QgYWRhcHRlciBhbmQgMTI4CitUWCBkZXNjcmlwdG9ycyBmb3IgdGhlIHNlY29uZCBhZGFwdGVyLgogCiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLAotdW5sZXNzIG90aGVyd2lzZSBub3RlZC4gQWxzbywgaWYgdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IGJ1aWx0IGludG8gdGhlCi1rZXJuZWwsIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHBhcmFtZXRlcnMuCi1FdGh0b29sIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIGF0IHJ1bnRpbWUuCit1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgogCi0gICAgTk9URVM6IEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBdXRvTmVnLCBEdXBsZXgsIGFuZCBTcGVlZAotICAgICAgICAgICBwYXJhbWV0ZXJzLCBzZWUgdGhlICJTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24iIHNlY3Rpb24gaW4gCi0gICAgICAgICAgIHRoaXMgZG9jdW1lbnQuCitOT1RFUzogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBdXRvTmVnLCBEdXBsZXgsIGFuZCBTcGVlZAorICAgICAgICBwYXJhbWV0ZXJzLCBzZWUgdGhlICJTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24iIHNlY3Rpb24gaW4KKyAgICAgICAgdGhpcyBkb2N1bWVudC4KIAotICAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlLCBSeEludERlbGF5LCAKLSAgICAgICAgICAgVHhJbnREZWxheSwgUnhBYnNJbnREZWxheSwgYW5kIFR4QWJzSW50RGVsYXkgcGFyYW1ldGVycywgc2VlIHRoZSAKLSAgICAgICAgICAgYXBwbGljYXRpb24gbm90ZSBhdDoKLSAgICAgICAgICAgaHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvYXBwbG5vdHMvYXA0NTAuaHRtCisgICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUsCisgICAgICAgIFJ4SW50RGVsYXksIFR4SW50RGVsYXksIFJ4QWJzSW50RGVsYXksIGFuZCBUeEFic0ludERlbGF5CisgICAgICAgIHBhcmFtZXRlcnMsIHNlZSB0aGUgYXBwbGljYXRpb24gbm90ZSBhdDoKKyAgICAgICAgaHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvYXBwbG5vdHMvYXA0NTAuaHRtCiAKLSAgICAgICAgICAgQSBkZXNjcmlwdG9yIGRlc2NyaWJlcyBhIGRhdGEgYnVmZmVyIGFuZCBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gdGhlIAotICAgICAgICAgICBkYXRhIGJ1ZmZlci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBhY2Nlc3NlZCBieSB0aGUgaGFyZHdhcmUuCisgICAgICAgIEEgZGVzY3JpcHRvciBkZXNjcmliZXMgYSBkYXRhIGJ1ZmZlciBhbmQgYXR0cmlidXRlcyByZWxhdGVkIHRvCisgICAgICAgIHRoZSBkYXRhIGJ1ZmZlci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBhY2Nlc3NlZCBieSB0aGUgaGFyZHdhcmUuCiAKLUF1dG9OZWcgKGFkYXB0ZXJzIHVzaW5nIGNvcHBlciBjb25uZWN0aW9ucyBvbmx5KQotVmFsaWQgUmFuZ2U6IDB4MDEtMHgwRiwgMHgyMC0weDJGCisKK0F1dG9OZWcKKy0tLS0tLS0KKyhTdXBwb3J0ZWQgb25seSBvbiBhZGFwdGVycyB3aXRoIGNvcHBlciBjb25uZWN0aW9ucykKK1ZhbGlkIFJhbmdlOiAgIDB4MDEtMHgwRiwgMHgyMC0weDJGCiBEZWZhdWx0IFZhbHVlOiAweDJGCi0gICAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBiaXQgbWFzayB0aGF0IHNwZWNpZmllcyB3aGljaCBzcGVlZCBhbmQgZHVwbGV4Ci0gICAgc2V0dGluZ3MgdGhlIGJvYXJkIGFkdmVydGlzZXMuIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCwgdGhlIFNwZWVkIGFuZAotICAgIER1cGxleCBwYXJhbWV0ZXJzIG11c3Qgbm90IGJlIHNwZWNpZmllZC4KLSAgICBOT1RFOiBSZWZlciB0byB0aGUgU3BlZWQgYW5kIER1cGxleCBzZWN0aW9uIG9mIHRoaXMgcmVhZG1lIGZvciBtb3JlIAotICAgICAgICAgIGluZm9ybWF0aW9uIG9uIHRoZSBBdXRvTmVnIHBhcmFtZXRlci4gIAogCi1EdXBsZXggKGFkYXB0ZXJzIHVzaW5nIGNvcHBlciBjb25uZWN0aW9ucyBvbmx5KQotVmFsaWQgUmFuZ2U6IDAtMiAoMD1hdXRvLW5lZ290aWF0ZSwgMT1oYWxmLCAyPWZ1bGwpCitUaGlzIHBhcmFtZXRlciBpcyBhIGJpdCBtYXNrIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHNwZWVkIGFuZCBkdXBsZXgKK3NldHRpbmdzIHRoZSBib2FyZCBhZHZlcnRpc2VzLiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHVzZWQsIHRoZSBTcGVlZAorYW5kIER1cGxleCBwYXJhbWV0ZXJzIG11c3Qgbm90IGJlIHNwZWNpZmllZC4KKworTk9URTogIFJlZmVyIHRvIHRoZSBTcGVlZCBhbmQgRHVwbGV4IHNlY3Rpb24gb2YgdGhpcyByZWFkbWUgZm9yIG1vcmUKKyAgICAgICBpbmZvcm1hdGlvbiBvbiB0aGUgQXV0b05lZyBwYXJhbWV0ZXIuCisKKworRHVwbGV4CistLS0tLS0KKyhTdXBwb3J0ZWQgb25seSBvbiBhZGFwdGVycyB3aXRoIGNvcHBlciBjb25uZWN0aW9ucykKK1ZhbGlkIFJhbmdlOiAgIDAtMiAoMD1hdXRvLW5lZ290aWF0ZSwgMT1oYWxmLCAyPWZ1bGwpCiBEZWZhdWx0IFZhbHVlOiAwCi0gICAgRGVmaW5lcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIGRhdGEgaXMgYWxsb3dlZCB0byBmbG93LiBDYW4gYmUgZWl0aGVyIG9uZSAKLSAgICBvciB0d28tZGlyZWN0aW9uYWwuIElmIGJvdGggRHVwbGV4IGFuZCB0aGUgbGluayBwYXJ0bmVyIGFyZSBzZXQgdG8gYXV0by0KLSAgICBuZWdvdGlhdGUsIHRoZSBib2FyZCBhdXRvLWRldGVjdHMgdGhlIGNvcnJlY3QgZHVwbGV4LiBJZiB0aGUgbGluayBwYXJ0bmVyCi0gICAgaXMgZm9yY2VkIChlaXRoZXIgZnVsbCBvciBoYWxmKSwgRHVwbGV4IGRlZmF1bHRzIHRvIGhhbGYtZHVwbGV4LgorCitEZWZpbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIGZsb3cuIENhbiBiZSBlaXRoZXIKK29uZSBvciB0d28tZGlyZWN0aW9uYWwuIElmIGJvdGggRHVwbGV4IGFuZCB0aGUgbGluayBwYXJ0bmVyIGFyZSBzZXQgdG8KK2F1dG8tbmVnb3RpYXRlLCB0aGUgYm9hcmQgYXV0by1kZXRlY3RzIHRoZSBjb3JyZWN0IGR1cGxleC4gSWYgdGhlIGxpbmsKK3BhcnRuZXIgaXMgZm9yY2VkIChlaXRoZXIgZnVsbCBvciBoYWxmKSwgRHVwbGV4IGRlZmF1bHRzIHRvIGhhbGYtZHVwbGV4LgorCiAKIEZsb3dDb250cm9sCi1WYWxpZCBSYW5nZTogMC0zICgwPW5vbmUsIDE9Unggb25seSwgMj1UeCBvbmx5LCAzPVJ4JlR4KQotRGVmYXVsdDogUmVhZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgZnJvbSB0aGUgRUVQUk9NCi0gICAgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGF1dG9tYXRpYyBnZW5lcmF0aW9uKFR4KSBhbmQgcmVzcG9uc2UoUngpIHRvIAotICAgIEV0aGVybmV0IFBBVVNFIGZyYW1lcy4KKy0tLS0tLS0tLS0KK1ZhbGlkIFJhbmdlOiAgIDAtMyAoMD1ub25lLCAxPVJ4IG9ubHksIDI9VHggb25seSwgMz1SeCZUeCkKK0RlZmF1bHQgVmFsdWU6IFJlYWRzIGZsb3cgY29udHJvbCBzZXR0aW5ncyBmcm9tIHRoZSBFRVBST00KKworVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGF1dG9tYXRpYyBnZW5lcmF0aW9uKFR4KSBhbmQgcmVzcG9uc2UoUngpCit0byBFdGhlcm5ldCBQQVVTRSBmcmFtZXMuCisKIAogSW50ZXJydXB0VGhyb3R0bGVSYXRlCi1WYWxpZCBSYW5nZTogMTAwLTEwMDAwMCAoMD1vZmYsIDE9ZHluYW1pYykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKG5vdCBzdXBwb3J0ZWQgb24gSW50ZWwgODI1NDIsIDgyNTQzIG9yIDgyNTQ0LWJhc2VkIGFkYXB0ZXJzKQorVmFsaWQgUmFuZ2U6ICAgMTAwLTEwMDAwMCAoMD1vZmYsIDE9ZHluYW1pYykKIERlZmF1bHQgVmFsdWU6IDgwMDAKLSAgICBUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdHMgcGVyIHNlY29uZCB0aGUgCi0gICAgY29udHJvbGxlciBnZW5lcmF0ZXMuIEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBhbm90aGVyIHNldHRpbmcgdXNlZCBpbiAKLSAgICBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4gRHluYW1pYyBtb2RlIHVzZXMgYSBoZXVyaXN0aWMgYWxnb3JpdGhtIHRvIGFkanVzdCAKLSAgICBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdHJhZmZpYyBsb2FkLgotVW4tc3VwcG9ydGVkIEFkYXB0ZXJzOiBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgaXMgTk9UIHN1cHBvcnRlZCBieSA4MjU0MiwgODI1NDMKLSAgICBvciA4MjU0NC1iYXNlZCBhZGFwdGVycy4KIAotICAgIE5PVEU6IEludGVycnVwdFRocm90dGxlUmF0ZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIFR4QWJzSW50RGVsYXkgYW5kIAotICAgICAgICAgIFJ4QWJzSW50RGVsYXkgcGFyYW1ldGVycy4gSW4gb3RoZXIgd29yZHMsIG1pbmltaXppbmcgdGhlIHJlY2VpdmUgCi0gICAgICAgICAgYW5kL29yIHRyYW5zbWl0IGFic29sdXRlIGRlbGF5cyBkb2VzIG5vdCBmb3JjZSB0aGUgY29udHJvbGxlciB0byAKLSAgICAgICAgICBnZW5lcmF0ZSBtb3JlIGludGVycnVwdHMgdGhhbiB3aGF0IHRoZSBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAKLSAgICAgICAgICBhbGxvd3MuCi0gICAgQ0FVVElPTjogSWYgeW91IGFyZSB1c2luZyB0aGUgSW50ZWwgUFJPLzEwMDAgQ1QgTmV0d29yayBDb25uZWN0aW9uIAotICAgICAgICAgICAgIChjb250cm9sbGVyIDgyNTQ3KSwgc2V0dGluZyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gYSB2YWx1ZSAKLSAgICAgICAgICAgICBncmVhdGVyIHRoYW4gNzUsMDAwLCBtYXkgaGFuZyAoc3RvcCB0cmFuc21pdHRpbmcpIGFkYXB0ZXJzIHVuZGVyIAotICAgICAgICAgICAgIGNlcnRhaW4gbmV0d29yayBjb25kaXRpb25zLiBJZiB0aGlzIG9jY3VycyBhIE5FVERFViBXQVRDSERPRyAKLSAgICAgICAgICAgICBtZXNzYWdlIGlzIGxvZ2dlZCBpbiB0aGUgc3lzdGVtIGV2ZW50IGxvZy4gSW4gYWRkaXRpb24sIHRoZSAKLSAgICAgICAgICAgICBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsIHJlc3RvcmluZyB0aGUgbmV0d29yayAKLSAgICAgICAgICAgICBjb25uZWN0aW9uLiBUbyBlbGltaW5hdGUgdGhlIHBvdGVudGlhbCBmb3IgdGhlIGhhbmcsIGVuc3VyZSAKLSAgICAgICAgICAgICB0aGF0IEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBzZXQgbm8gZ3JlYXRlciB0aGFuIDc1LDAwMCBhbmQgaXMgCi0gICAgICAgICAgICAgbm90IHNldCB0byAwLgotICAgIE5PVEU6IFdoZW4gZTEwMDAgaXMgbG9hZGVkIHdpdGggZGVmYXVsdCBzZXR0aW5ncyBhbmQgbXVsdGlwbGUgYWRhcHRlcnMgYXJlIAotICAgICAgICAgIGluIHVzZSBzaW11bHRhbmVvdXNseSwgdGhlIENQVSB1dGlsaXphdGlvbiBtYXkgaW5jcmVhc2Ugbm9uLWxpbmVhcmx5LiAKLSAgICAgICAgICBJbiBvcmRlciB0byBsaW1pdCB0aGUgQ1BVIHV0aWxpemF0aW9uIHdpdGhvdXQgaW1wYWN0aW5nIHRoZSBvdmVyYWxsIAotICAgICAgICAgIHRocm91Z2hwdXQsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBsb2FkIHRoZSBkcml2ZXIgYXMgZm9sbG93czoKK1RoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHRoZQorY29udHJvbGxlciBnZW5lcmF0ZXMuIEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBhbm90aGVyIHNldHRpbmcgdXNlZCBpbgoraW50ZXJydXB0IG1vZGVyYXRpb24uIER5bmFtaWMgbW9kZSB1c2VzIGEgaGV1cmlzdGljIGFsZ29yaXRobSB0byBhZGp1c3QKK0ludGVycnVwdFRocm90dGxlUmF0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCB0cmFmZmljIGxvYWQuCiAKLSAgICAgICAgICAgICAgaW5zbW9kIGUxMDAwLm8gSW50ZXJydXB0VGhyb3R0bGVSYXRlPTMwMDAsMzAwMCwzMDAwCitOT1RFOiAgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgVHhBYnNJbnREZWxheSBhbmQKKyAgICAgICBSeEFic0ludERlbGF5IHBhcmFtZXRlcnMuIEluIG90aGVyIHdvcmRzLCBtaW5pbWl6aW5nIHRoZSByZWNlaXZlCisgICAgICAgYW5kL29yIHRyYW5zbWl0IGFic29sdXRlIGRlbGF5cyBkb2VzIG5vdCBmb3JjZSB0aGUgY29udHJvbGxlciB0bworICAgICAgIGdlbmVyYXRlIG1vcmUgaW50ZXJydXB0cyB0aGFuIHdoYXQgdGhlIEludGVycnVwdCBUaHJvdHRsZSBSYXRlCisgICAgICAgYWxsb3dzLgogCi0gICAgICAgICAgVGhpcyBzZXRzIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gMzAwMCBpbnRlcnJ1cHRzL3NlYyBmb3IgdGhlIAotICAgICAgICAgIGZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBpbnN0YW5jZXMgb2YgdGhlIGRyaXZlci4gVGhlIHJhbmdlIG9mIDIwMDAgdG8gCi0gICAgICAgICAgMzAwMCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgd29ya3Mgb24gYSBtYWpvcml0eSBvZiBzeXN0ZW1zIGFuZCBpcyBhIAotICAgICAgICAgIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCB0aGUgb3B0aW1hbCB2YWx1ZSB3aWxsIGJlIHBsYXRmb3JtLXNwZWNpZmljLiAKLSAgICAgICAgICBJZiBDUFUgdXRpbGl6YXRpb24gaXMgbm90IGEgY29uY2VybiwgdXNlIFJYX1BPTExJTkcgKE5BUEkpIGFuZCBkZWZhdWx0IAotICAgICAgICAgIGRyaXZlciBzZXR0aW5ncy4KK0NBVVRJT046ICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBJbnRlbCBQUk8vMTAwMCBDVCBOZXR3b3JrIENvbm5lY3Rpb24KKyAgICAgICAgICAoY29udHJvbGxlciA4MjU0NyksIHNldHRpbmcgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIGEgdmFsdWUKKyAgICAgICAgICBncmVhdGVyIHRoYW4gNzUsMDAwLCBtYXkgaGFuZyAoc3RvcCB0cmFuc21pdHRpbmcpIGFkYXB0ZXJzCisgICAgICAgICAgdW5kZXIgY2VydGFpbiBuZXR3b3JrIGNvbmRpdGlvbnMuIElmIHRoaXMgb2NjdXJzIGEgTkVUREVWCisgICAgICAgICAgV0FUQ0hET0cgbWVzc2FnZSBpcyBsb2dnZWQgaW4gdGhlIHN5c3RlbSBldmVudCBsb2cuIEluCisgICAgICAgICAgYWRkaXRpb24sIHRoZSBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsIHJlc3RvcmluZworICAgICAgICAgIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uIFRvIGVsaW1pbmF0ZSB0aGUgcG90ZW50aWFsIGZvciB0aGUKKyAgICAgICAgICBoYW5nLCBlbnN1cmUgdGhhdCBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgaXMgc2V0IG5vIGdyZWF0ZXIKKyAgICAgICAgICB0aGFuIDc1LDAwMCBhbmQgaXMgbm90IHNldCB0byAwLgorCitOT1RFOiAgV2hlbiBlMTAwMCBpcyBsb2FkZWQgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGFuZCBtdWx0aXBsZSBhZGFwdGVycworICAgICAgIGFyZSBpbiB1c2Ugc2ltdWx0YW5lb3VzbHksIHRoZSBDUFUgdXRpbGl6YXRpb24gbWF5IGluY3JlYXNlIG5vbi0KKyAgICAgICBsaW5lYXJseS4gSW4gb3JkZXIgdG8gbGltaXQgdGhlIENQVSB1dGlsaXphdGlvbiB3aXRob3V0IGltcGFjdGluZworICAgICAgIHRoZSBvdmVyYWxsIHRocm91Z2hwdXQsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBsb2FkIHRoZSBkcml2ZXIgYXMKKyAgICAgICBmb2xsb3dzOgorCisgICAgICAgICAgIGluc21vZCBlMTAwMC5vIEludGVycnVwdFRocm90dGxlUmF0ZT0zMDAwLDMwMDAsMzAwMAorCisgICAgICAgVGhpcyBzZXRzIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gMzAwMCBpbnRlcnJ1cHRzL3NlYyBmb3IKKyAgICAgICB0aGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGluc3RhbmNlcyBvZiB0aGUgZHJpdmVyLiBUaGUgcmFuZ2UKKyAgICAgICBvZiAyMDAwIHRvIDMwMDAgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHdvcmtzIG9uIGEgbWFqb3JpdHkgb2YKKyAgICAgICBzeXN0ZW1zIGFuZCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCB0aGUgb3B0aW1hbCB2YWx1ZSB3aWxsCisgICAgICAgYmUgcGxhdGZvcm0tc3BlY2lmaWMuIElmIENQVSB1dGlsaXphdGlvbiBpcyBub3QgYSBjb25jZXJuLCB1c2UKKyAgICAgICBSWF9QT0xMSU5HIChOQVBJKSBhbmQgZGVmYXVsdCBkcml2ZXIgc2V0dGluZ3MuCisKIAogUnhEZXNjcmlwdG9ycwotVmFsaWQgUmFuZ2U6IDgwLTI1NiBmb3IgODI1NDIgYW5kIDgyNTQzLWJhc2VkIGFkYXB0ZXJzCi0gICAgICAgICAgICAgODAtNDA5NiBmb3IgYWxsIG90aGVyIHN1cHBvcnRlZCBhZGFwdGVycworLS0tLS0tLS0tLS0tLQorVmFsaWQgUmFuZ2U6ICAgODAtMjU2IGZvciA4MjU0MiBhbmQgODI1NDMtYmFzZWQgYWRhcHRlcnMKKyAgICAgICAgICAgICAgIDgwLTQwOTYgZm9yIGFsbCBvdGhlciBzdXBwb3J0ZWQgYWRhcHRlcnMKIERlZmF1bHQgVmFsdWU6IDI1NgotICAgIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLiAKLSAgICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYnVmZmVyIG1vcmUgaW5jb21pbmcgcGFja2V0cy4gCi0gICAgRWFjaCBkZXNjcmlwdG9yIGlzIDE2IGJ5dGVzLiAgQSByZWNlaXZlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgZm9yIGVhY2gKLSAgICBkZXNjcmlwdG9yIGFuZCBjYW4gZWl0aGVyIGJlIDIwNDggb3IgNDA5NiBieXRlcyBsb25nLCBkZXBlbmRpbmcgb24gdGhlIE1UVSAKIAotICAgIHNldHRpbmcuIEFuIGluY29taW5nIHBhY2tldCBjYW4gc3BhbiBvbmUgb3IgbW9yZSByZWNlaXZlIGRlc2NyaXB0b3JzLiAKLSAgICBUaGUgbWF4aW11bSBNVFUgc2l6ZSBpcyAxNjExMC4KK1RoaXMgdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkgdGhlCitkcml2ZXIuIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBidWZmZXIgbW9yZSBpbmNvbWluZworcGFja2V0cy4gIEVhY2ggZGVzY3JpcHRvciBpcyAxNiBieXRlcy4gIEEgcmVjZWl2ZSBidWZmZXIgaXMgYWxzbworYWxsb2NhdGVkIGZvciBlYWNoIGRlc2NyaXB0b3IgYW5kIGlzIDIwNDguCiAKLSAgICBOT1RFOiBNVFUgZGVzaWduYXRlcyB0aGUgZnJhbWUgc2l6ZS4gSXQgb25seSBuZWVkcyB0byBiZSBzZXQgZm9yIEp1bWJvIAotICAgICAgICAgIEZyYW1lcy4KLSAgICBOT1RFOiBEZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzeXN0ZW0gcmVzb3VyY2VzLCB0aGUgcmVxdWVzdCBmb3IgYQotICAgIGhpZ2hlciBudW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyBtYXkgYmUgZGVuaWVkLiAgSW4gdGhpcyBjYXNlLAotICAgIHVzZSBhIGxvd2VyIG51bWJlci4KIAogUnhJbnREZWxheQotVmFsaWQgUmFuZ2U6IDAtNjU1MzUgKDA9b2ZmKQorLS0tLS0tLS0tLQorVmFsaWQgUmFuZ2U6ICAgMC02NTUzNSAoMD1vZmYpCiBEZWZhdWx0IFZhbHVlOiAwCi0gICAgVGhpcyB2YWx1ZSBkZWxheXMgdGhlIGdlbmVyYXRpb24gb2YgcmVjZWl2ZSBpbnRlcnJ1cHRzIGluIHVuaXRzIG9mIDEuMDI0IAotICAgIG1pY3Jvc2Vjb25kcy4gIFJlY2VpdmUgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUgZWZmaWNpZW5jeSBpZiAKLSAgICBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWRkcyAKLSAgICBleHRyYSBsYXRlbmN5IHRvIGZyYW1lIHJlY2VwdGlvbiBhbmQgY2FuIGVuZCB1cCBkZWNyZWFzaW5nIHRoZSB0aHJvdWdocHV0IAotICAgIG9mIFRDUCB0cmFmZmljLiBJZiB0aGUgc3lzdGVtIGlzIHJlcG9ydGluZyBkcm9wcGVkIHJlY2VpdmVzLCB0aGlzIHZhbHVlIAotICAgIG1heSBiZSBzZXQgdG9vIGhpZ2gsIGNhdXNpbmcgdGhlIGRyaXZlciB0byBydW4gb3V0IG9mIGF2YWlsYWJsZSByZWNlaXZlIAotICAgIGRlc2NyaXB0b3JzLgogCi0gICAgQ0FVVElPTjogV2hlbiBzZXR0aW5nIFJ4SW50RGVsYXkgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIDAsIGFkYXB0ZXJzIG1heSAKLSAgICAgICAgICAgICBoYW5nIChzdG9wIHRyYW5zbWl0dGluZykgdW5kZXIgY2VydGFpbiBuZXR3b3JrIGNvbmRpdGlvbnMuIElmIAotICAgICAgICAgICAgIHRoaXMgb2NjdXJzIGEgTkVUREVWIFdBVENIRE9HIG1lc3NhZ2UgaXMgbG9nZ2VkIGluIHRoZSBzeXN0ZW0KLSAgICAgICAgICAgICBldmVudCBsb2cuIEluIGFkZGl0aW9uLCB0aGUgY29udHJvbGxlciBpcyBhdXRvbWF0aWNhbGx5IHJlc2V0LCAKLSAgICAgICAgICAgICByZXN0b3JpbmcgdGhlIG5ldHdvcmsgY29ubmVjdGlvbi4gVG8gZWxpbWluYXRlIHRoZSBwb3RlbnRpYWwgZm9yCi0gICAgICAgICAgICAgdGhlIGhhbmcgZW5zdXJlIHRoYXQgUnhJbnREZWxheSBpcyBzZXQgdG8gMC4KK1RoaXMgdmFsdWUgZGVsYXlzIHRoZSBnZW5lcmF0aW9uIG9mIHJlY2VpdmUgaW50ZXJydXB0cyBpbiB1bml0cyBvZiAxLjAyNAorbWljcm9zZWNvbmRzLiAgUmVjZWl2ZSBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVSBlZmZpY2llbmN5IGlmCitwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWRkcworZXh0cmEgbGF0ZW5jeSB0byBmcmFtZSByZWNlcHRpb24gYW5kIGNhbiBlbmQgdXAgZGVjcmVhc2luZyB0aGUgdGhyb3VnaHB1dAorb2YgVENQIHRyYWZmaWMuIElmIHRoZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIGRyb3BwZWQgcmVjZWl2ZXMsIHRoaXMgdmFsdWUKK21heSBiZSBzZXQgdG9vIGhpZ2gsIGNhdXNpbmcgdGhlIGRyaXZlciB0byBydW4gb3V0IG9mIGF2YWlsYWJsZSByZWNlaXZlCitkZXNjcmlwdG9ycy4KIAotUnhBYnNJbnREZWxheSAoODI1NDAsIDgyNTQ1IGFuZCBsYXRlciBhZGFwdGVycyBvbmx5KQotVmFsaWQgUmFuZ2U6IDAtNjU1MzUgKDA9b2ZmKQorQ0FVVElPTjogIFdoZW4gc2V0dGluZyBSeEludERlbGF5IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiAwLCBhZGFwdGVycyBtYXkKKyAgICAgICAgICBoYW5nIChzdG9wIHRyYW5zbWl0dGluZykgdW5kZXIgY2VydGFpbiBuZXR3b3JrIGNvbmRpdGlvbnMuIElmCisgICAgICAgICAgdGhpcyBvY2N1cnMgYSBORVRERVYgV0FUQ0hET0cgbWVzc2FnZSBpcyBsb2dnZWQgaW4gdGhlIHN5c3RlbQorICAgICAgICAgIGV2ZW50IGxvZy4gSW4gYWRkaXRpb24sIHRoZSBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsCisgICAgICAgICAgcmVzdG9yaW5nIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uIFRvIGVsaW1pbmF0ZSB0aGUgcG90ZW50aWFsCisgICAgICAgICAgZm9yIHRoZSBoYW5nIGVuc3VyZSB0aGF0IFJ4SW50RGVsYXkgaXMgc2V0IHRvIDAuCisKKworUnhBYnNJbnREZWxheQorLS0tLS0tLS0tLS0tLQorKFRoaXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBvbmx5IG9uIDgyNTQwLCA4MjU0NSBhbmQgbGF0ZXIgYWRhcHRlcnMuKQorVmFsaWQgUmFuZ2U6ICAgMC02NTUzNSAoMD1vZmYpCiBEZWZhdWx0IFZhbHVlOiAxMjgKLSAgICBUaGlzIHZhbHVlLCBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMsIGxpbWl0cyB0aGUgZGVsYXkgaW4gd2hpY2ggYSAKLSAgICByZWNlaXZlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFVzZWZ1bCBvbmx5IGlmIFJ4SW50RGVsYXkgaXMgbm9uLXplcm8sIAotICAgIHRoaXMgdmFsdWUgZW5zdXJlcyB0aGF0IGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgCi0gICAgcGFja2V0IGlzIHJlY2VpdmVkIHdpdGhpbiB0aGUgc2V0IGFtb3VudCBvZiB0aW1lLiAgUHJvcGVyIHR1bmluZywKLSAgICBhbG9uZyB3aXRoIFJ4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYyBuZXR3b3JrCi0gICAgY29uZGl0aW9ucy4KIAotU3BlZWQgKGFkYXB0ZXJzIHVzaW5nIGNvcHBlciBjb25uZWN0aW9ucyBvbmx5KQorVGhpcyB2YWx1ZSwgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzLCBsaW1pdHMgdGhlIGRlbGF5IGluIHdoaWNoIGEKK3JlY2VpdmUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVXNlZnVsIG9ubHkgaWYgUnhJbnREZWxheSBpcyBub24temVybywKK3RoaXMgdmFsdWUgZW5zdXJlcyB0aGF0IGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwKK3BhY2tldCBpcyByZWNlaXZlZCB3aXRoaW4gdGhlIHNldCBhbW91bnQgb2YgdGltZS4gIFByb3BlciB0dW5pbmcsCithbG9uZyB3aXRoIFJ4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYyBuZXR3b3JrCitjb25kaXRpb25zLgorCisKK1NwZWVkCistLS0tLQorKFRoaXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBvbmx5IG9uIGFkYXB0ZXJzIHdpdGggY29wcGVyIGNvbm5lY3Rpb25zLikKIFZhbGlkIFNldHRpbmdzOiAwLCAxMCwgMTAwLCAxMDAwCi1EZWZhdWx0IFZhbHVlOiAwIChhdXRvLW5lZ290aWF0ZSBhdCBhbGwgc3VwcG9ydGVkIHNwZWVkcykKLSAgICBTcGVlZCBmb3JjZXMgdGhlIGxpbmUgc3BlZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiBtZWdhYml0cyBwZXIgc2Vjb25kCi0gICAgKE1icHMpLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHNldCB0byAwIGFuZCB0aGUgbGluayAKLSAgICBwYXJ0bmVyIGlzIHNldCB0byBhdXRvLW5lZ290aWF0ZSwgdGhlIGJvYXJkIHdpbGwgYXV0by1kZXRlY3QgdGhlIGNvcnJlY3QgCi0gICAgc3BlZWQuIER1cGxleCBzaG91bGQgYWxzbyBiZSBzZXQgd2hlbiBTcGVlZCBpcyBzZXQgdG8gZWl0aGVyIDEwIG9yIDEwMC4KK0RlZmF1bHQgVmFsdWU6ICAwIChhdXRvLW5lZ290aWF0ZSBhdCBhbGwgc3VwcG9ydGVkIHNwZWVkcykKKworU3BlZWQgZm9yY2VzIHRoZSBsaW5lIHNwZWVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gbWVnYWJpdHMgcGVyIHNlY29uZAorKE1icHMpLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHNldCB0byAwIGFuZCB0aGUgbGluaworcGFydG5lciBpcyBzZXQgdG8gYXV0by1uZWdvdGlhdGUsIHRoZSBib2FyZCB3aWxsIGF1dG8tZGV0ZWN0IHRoZSBjb3JyZWN0CitzcGVlZC4gRHVwbGV4IHNob3VsZCBhbHNvIGJlIHNldCB3aGVuIFNwZWVkIGlzIHNldCB0byBlaXRoZXIgMTAgb3IgMTAwLgorCiAKIFR4RGVzY3JpcHRvcnMKLVZhbGlkIFJhbmdlOiA4MC0yNTYgZm9yIDgyNTQyIGFuZCA4MjU0My1iYXNlZCBhZGFwdGVycwotICAgICAgICAgICAgIDgwLTQwOTYgZm9yIGFsbCBvdGhlciBzdXBwb3J0ZWQgYWRhcHRlcnMKKy0tLS0tLS0tLS0tLS0KK1ZhbGlkIFJhbmdlOiAgIDgwLTI1NiBmb3IgODI1NDIgYW5kIDgyNTQzLWJhc2VkIGFkYXB0ZXJzCisgICAgICAgICAgICAgICA4MC00MDk2IGZvciBhbGwgb3RoZXIgc3VwcG9ydGVkIGFkYXB0ZXJzCiBEZWZhdWx0IFZhbHVlOiAyNTYKLSAgICBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuCi0gICAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIHF1ZXVlIG1vcmUgdHJhbnNtaXRzLiBFYWNoIAotICAgIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuCiAKLSAgICBOT1RFOiBEZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzeXN0ZW0gcmVzb3VyY2VzLCB0aGUgcmVxdWVzdCBmb3IgYQotICAgIGhpZ2hlciBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgbWF5IGJlIGRlbmllZC4gIEluIHRoaXMgY2FzZSwKLSAgICB1c2UgYSBsb3dlciBudW1iZXIuCitUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuCitJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gcXVldWUgbW9yZSB0cmFuc21pdHMuIEVhY2gKK2Rlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuCisKK05PVEU6ICBEZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzeXN0ZW0gcmVzb3VyY2VzLCB0aGUgcmVxdWVzdCBmb3IgYQorICAgICAgIGhpZ2hlciBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgbWF5IGJlIGRlbmllZC4gIEluIHRoaXMgY2FzZSwKKyAgICAgICB1c2UgYSBsb3dlciBudW1iZXIuCisKIAogVHhJbnREZWxheQotVmFsaWQgUmFuZ2U6IDAtNjU1MzUgKDA9b2ZmKQorLS0tLS0tLS0tLQorVmFsaWQgUmFuZ2U6ICAgMC02NTUzNSAoMD1vZmYpCiBEZWZhdWx0IFZhbHVlOiA2NAotICAgIFRoaXMgdmFsdWUgZGVsYXlzIHRoZSBnZW5lcmF0aW9uIG9mIHRyYW5zbWl0IGludGVycnVwdHMgaW4gdW5pdHMgb2YgCi0gICAgMS4wMjQgbWljcm9zZWNvbmRzLiBUcmFuc21pdCBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVQotICAgIGVmZmljaWVuY3kgaWYgcHJvcGVybHkgdHVuZWQgZm9yIHNwZWNpZmljIG5ldHdvcmsgdHJhZmZpYy4gSWYgdGhlCi0gICAgc3lzdGVtIGlzIHJlcG9ydGluZyBkcm9wcGVkIHRyYW5zbWl0cywgdGhpcyB2YWx1ZSBtYXkgYmUgc2V0IHRvbyBoaWdoCi0gICAgY2F1c2luZyB0aGUgZHJpdmVyIHRvIHJ1biBvdXQgb2YgYXZhaWxhYmxlIHRyYW5zbWl0IGRlc2NyaXB0b3JzLgogCi1UeEFic0ludERlbGF5ICg4MjU0MCwgODI1NDUgYW5kIGxhdGVyIGFkYXB0ZXJzIG9ubHkpCi1WYWxpZCBSYW5nZTogMC02NTUzNSAoMD1vZmYpCitUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiB0cmFuc21pdCBpbnRlcnJ1cHRzIGluIHVuaXRzIG9mCisxLjAyNCBtaWNyb3NlY29uZHMuIFRyYW5zbWl0IGludGVycnVwdCByZWR1Y3Rpb24gY2FuIGltcHJvdmUgQ1BVCitlZmZpY2llbmN5IGlmIHByb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuIElmIHRoZQorc3lzdGVtIGlzIHJlcG9ydGluZyBkcm9wcGVkIHRyYW5zbWl0cywgdGhpcyB2YWx1ZSBtYXkgYmUgc2V0IHRvbyBoaWdoCitjYXVzaW5nIHRoZSBkcml2ZXIgdG8gcnVuIG91dCBvZiBhdmFpbGFibGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMuCisKKworVHhBYnNJbnREZWxheQorLS0tLS0tLS0tLS0tLQorKFRoaXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBvbmx5IG9uIDgyNTQwLCA4MjU0NSBhbmQgbGF0ZXIgYWRhcHRlcnMuKQorVmFsaWQgUmFuZ2U6ICAgMC02NTUzNSAoMD1vZmYpCiBEZWZhdWx0IFZhbHVlOiA2NAotICAgIFRoaXMgdmFsdWUsIGluIHVuaXRzIG9mIDEuMDI0IG1pY3Jvc2Vjb25kcywgbGltaXRzIHRoZSBkZWxheSBpbiB3aGljaCBhIAotICAgIHRyYW5zbWl0IGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFVzZWZ1bCBvbmx5IGlmIFR4SW50RGVsYXkgaXMgbm9uLXplcm8sIAotICAgIHRoaXMgdmFsdWUgZW5zdXJlcyB0aGF0IGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgCi0gICAgcGFja2V0IGlzIHNlbnQgb24gdGhlIHdpcmUgd2l0aGluIHRoZSBzZXQgYW1vdW50IG9mIHRpbWUuICBQcm9wZXIgdHVuaW5nLAotICAgIGFsb25nIHdpdGggVHhJbnREZWxheSwgbWF5IGltcHJvdmUgdHJhZmZpYyB0aHJvdWdocHV0IGluIHNwZWNpZmljIAotICAgIG5ldHdvcmsgY29uZGl0aW9ucy4KIAotWHN1bVJYIChub3QgYXZhaWxhYmxlIG9uIHRoZSA4MjU0Mi1iYXNlZCBhZGFwdGVyKQotVmFsaWQgUmFuZ2U6IDAtMQorVGhpcyB2YWx1ZSwgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzLCBsaW1pdHMgdGhlIGRlbGF5IGluIHdoaWNoIGEKK3RyYW5zbWl0IGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFVzZWZ1bCBvbmx5IGlmIFR4SW50RGVsYXkgaXMgbm9uLXplcm8sCit0aGlzIHZhbHVlIGVuc3VyZXMgdGhhdCBhbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSBpbml0aWFsCitwYWNrZXQgaXMgc2VudCBvbiB0aGUgd2lyZSB3aXRoaW4gdGhlIHNldCBhbW91bnQgb2YgdGltZS4gIFByb3BlciB0dW5pbmcsCithbG9uZyB3aXRoIFR4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYworbmV0d29yayBjb25kaXRpb25zLgorCitYc3VtUlgKKy0tLS0tLQorKFRoaXMgcGFyYW1ldGVyIGlzIE5PVCBzdXBwb3J0ZWQgb24gdGhlIDgyNTQyLWJhc2VkIGFkYXB0ZXIuKQorVmFsaWQgUmFuZ2U6ICAgMC0xCiBEZWZhdWx0IFZhbHVlOiAxCi0gICAgQSB2YWx1ZSBvZiAnMScgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciBzaG91bGQgZW5hYmxlIElQIGNoZWNrc3VtCi0gICAgb2ZmbG9hZCBmb3IgcmVjZWl2ZWQgcGFja2V0cyAoYm90aCBVRFAgYW5kIFRDUCkgdG8gdGhlIGFkYXB0ZXIgaGFyZHdhcmUuCisKK0EgdmFsdWUgb2YgJzEnIGluZGljYXRlcyB0aGF0IHRoZSBkcml2ZXIgc2hvdWxkIGVuYWJsZSBJUCBjaGVja3N1bQorb2ZmbG9hZCBmb3IgcmVjZWl2ZWQgcGFja2V0cyAoYm90aCBVRFAgYW5kIFRDUCkgdG8gdGhlIGFkYXB0ZXIgaGFyZHdhcmUuCisKIAogU3BlZWQgYW5kIER1cGxleCBDb25maWd1cmF0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhyZWUga2V5d29yZHMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgc3BlZWQgYW5kIGR1cGxleCBjb25maWd1cmF0aW9uLiBUaGVzZSAKLWtleXdvcmRzIGFyZSBTcGVlZCwgRHVwbGV4LCBhbmQgQXV0b05lZy4KK1RocmVlIGtleXdvcmRzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNwZWVkIGFuZCBkdXBsZXggY29uZmlndXJhdGlvbi4KK1RoZXNlIGtleXdvcmRzIGFyZSBTcGVlZCwgRHVwbGV4LCBhbmQgQXV0b05lZy4KIAotSWYgdGhlIGJvYXJkIHVzZXMgYSBmaWJlciBpbnRlcmZhY2UsIHRoZXNlIGtleXdvcmRzIGFyZSBpZ25vcmVkLCBhbmQgdGhlIAorSWYgdGhlIGJvYXJkIHVzZXMgYSBmaWJlciBpbnRlcmZhY2UsIHRoZXNlIGtleXdvcmRzIGFyZSBpZ25vcmVkLCBhbmQgdGhlCiBmaWJlciBpbnRlcmZhY2UgYm9hcmQgb25seSBsaW5rcyBhdCAxMDAwIE1icHMgZnVsbC1kdXBsZXguCiAKIEZvciBjb3BwZXItYmFzZWQgYm9hcmRzLCB0aGUga2V5d29yZHMgaW50ZXJhY3QgYXMgZm9sbG93czoKIAotICBUaGUgZGVmYXVsdCBvcGVyYXRpb24gaXMgYXV0by1uZWdvdGlhdGUuIFRoZSBib2FyZCBhZHZlcnRpc2VzIGFsbCBzdXBwb3J0ZWQKLSAgc3BlZWQgYW5kIGR1cGxleCBjb21iaW5hdGlvbnMsIGFuZCBpdCBsaW5rcyBhdCB0aGUgaGlnaGVzdCBjb21tb24gc3BlZWQgYW5kCi0gIGR1cGxleCBtb2RlIElGIHRoZSBsaW5rIHBhcnRuZXIgaXMgc2V0IHRvIGF1dG8tbmVnb3RpYXRlLgorICBUaGUgZGVmYXVsdCBvcGVyYXRpb24gaXMgYXV0by1uZWdvdGlhdGUuIFRoZSBib2FyZCBhZHZlcnRpc2VzIGFsbAorICBzdXBwb3J0ZWQgc3BlZWQgYW5kIGR1cGxleCBjb21iaW5hdGlvbnMsIGFuZCBpdCBsaW5rcyBhdCB0aGUgaGlnaGVzdAorICBjb21tb24gc3BlZWQgYW5kIGR1cGxleCBtb2RlIElGIHRoZSBsaW5rIHBhcnRuZXIgaXMgc2V0IHRvIGF1dG8tbmVnb3RpYXRlLgogCi0gIElmIFNwZWVkID0gMTAwMCwgbGltaXRlZCBhdXRvLW5lZ290aWF0aW9uIGlzIGVuYWJsZWQgYW5kIG9ubHkgMTAwMCBNYnBzIGlzCi0gIGFkdmVydGlzZWQgKFRoZSAxMDAwQmFzZVQgc3BlYyByZXF1aXJlcyBhdXRvLW5lZ290aWF0aW9uLikKKyAgSWYgU3BlZWQgPSAxMDAwLCBsaW1pdGVkIGF1dG8tbmVnb3RpYXRpb24gaXMgZW5hYmxlZCBhbmQgb25seSAxMDAwIE1icHMKKyAgaXMgYWR2ZXJ0aXNlZCAoVGhlIDEwMDBCYXNlVCBzcGVjIHJlcXVpcmVzIGF1dG8tbmVnb3RpYXRpb24uKQogCiAgIElmIFNwZWVkID0gMTAgb3IgMTAwLCB0aGVuIGJvdGggU3BlZWQgYW5kIER1cGxleCBzaG91bGQgYmUgc2V0LiBBdXRvLQotICBuZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCwgYW5kIHRoZSBBdXRvTmVnIHBhcmFtZXRlciBpcyBpZ25vcmVkLiBQYXJ0bmVyIFNIT1VMRAotICBhbHNvIGJlIGZvcmNlZC4KKyAgbmVnb3RpYXRpb24gaXMgZGlzYWJsZWQsIGFuZCB0aGUgQXV0b05lZyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gUGFydG5lcgorICBTSE9VTEQgYWxzbyBiZSBmb3JjZWQuCiAKLVRoZSBBdXRvTmVnIHBhcmFtZXRlciBpcyB1c2VkIHdoZW4gbW9yZSBjb250cm9sIGlzIHJlcXVpcmVkIG92ZXIgdGhlIGF1dG8tCi1uZWdvdGlhdGlvbiBwcm9jZXNzLiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHVzZWQsIFNwZWVkIGFuZCBEdXBsZXggcGFyYW1ldGVycyAKLW11c3Qgbm90IGJlIHNwZWNpZmllZC4gVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgc3VwcG9ydGVkIHZhbHVlcyBmb3IgdGhlIAotQXV0b05lZyBwYXJhbWV0ZXI6CitUaGUgQXV0b05lZyBwYXJhbWV0ZXIgaXMgdXNlZCB3aGVuIG1vcmUgY29udHJvbCBpcyByZXF1aXJlZCBvdmVyIHRoZQorYXV0by1uZWdvdGlhdGlvbiBwcm9jZXNzLiAgSXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB5b3Ugd2lzaCB0byBjb250cm9sIHdoaWNoCitzcGVlZCBhbmQgZHVwbGV4IGNvbWJpbmF0aW9ucyBhcmUgYWR2ZXJ0aXNlZCBkdXJpbmcgdGhlIGF1dG8tbmVnb3RpYXRpb24KK3Byb2Nlc3MuCiAKLVNwZWVkIChNYnBzKSAgIAkJIDEwMDAgICAgICAxMDAgICAgMTAwICAgIDEwICAgICAxMAotRHVwbGV4ICAgICAgICAgICAgICAgICAgIEZ1bGwgICAgICBGdWxsICAgSGFsZiAgIEZ1bGwgICBIYWxmCi1WYWx1ZSAoaW4gYmFzZSAxNikgICAgICAgMHgyMCAgICAgIDB4MDggICAweDA0ICAgMHgwMiAgIDB4MDEKK1RoZSBwYXJhbWV0ZXIgbWF5IGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBkZWNpbWFsIG9yIGhleGlkZWNpbWFsIHZhbHVlIGFzCitkZXRlcm1pbmVkIGJ5IHRoZSBiaXRtYXAgYmVsb3cuCiAKLUV4YW1wbGU6IGluc21vZCBlMTAwMCBBdXRvTmVnPTB4MDMsIGxvYWRzIGUxMDAwIGFuZCBzcGVjaWZpZXMgKDEwIGZ1bGwgZHVwbGV4LCAKLTEwIGhhbGYgZHVwbGV4KSBmb3IgbmVnb3RpYXRpb24gd2l0aCB0aGUgcGVlci4KK0JpdCBwb3NpdGlvbiAgIDcgICAgICA2ICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAyICAgICAgMSAgICAgICAwCitEZWNpbWFsIFZhbHVlICAxMjggICAgNjQgICAgIDMyICAgICAgMTYgICAgICA4ICAgICAgNCAgICAgIDIgICAgICAgMQorSGV4IHZhbHVlICAgICAgODAgICAgIDQwICAgICAyMCAgICAgIDEwICAgICAgOCAgICAgIDQgICAgICAyICAgICAgIDEKK1NwZWVkIChNYnBzKSAgIE4vQSAgICBOL0EgICAgMTAwMCAgICBOL0EgICAgIDEwMCAgICAxMDAgICAgMTAgICAgICAxMAorRHVwbGV4ICAgICAgICAgICAgICAgICAgICAgICBGdWxsICAgICAgICAgICAgRnVsbCAgIEhhbGYgICBGdWxsICAgIEhhbGYKIAotTm90ZSB0aGF0IHNldHRpbmcgQXV0b05lZyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgYm9hcmQgd2lsbCBsaW5rIGF0IHRoZSAKLWhpZ2hlc3Qgc3BlY2lmaWVkIHNwZWVkIG9yIGR1cGxleCBtb2RlLCBidXQgdGhlIGJvYXJkIHdpbGwgbGluayBhdCB0aGUgCi1oaWdoZXN0IHBvc3NpYmxlIHNwZWVkL2R1cGxleCBvZiB0aGUgbGluayBwYXJ0bmVyIElGIHRoZSBsaW5rIHBhcnRuZXIgaXMgYWxzbwotc2V0IHRvIGF1dG8tbmVnb3RpYXRlLiBJZiB0aGUgbGluayBwYXJ0bmVyIGlzIGZvcmNlZCBzcGVlZC9kdXBsZXgsIHRoZSAKLWFkYXB0ZXIgTVVTVCBiZSBmb3JjZWQgdG8gdGhlIHNhbWUgc3BlZWQvZHVwbGV4LgorU29tZSBleGFtcGxlcyBvZiB1c2luZyBBdXRvTmVnOgorCisgIG1vZHByb2JlIGUxMDAwIEF1dG9OZWc9MHgwMSAoUmVzdHJpY3RzIGF1dG9uZWdvdGlhdGlvbiB0byAxMCBIYWxmKQorICBtb2Rwcm9iZSBlMTAwMCBBdXRvTmVnPTEgKFNhbWUgYXMgYWJvdmUpCisgIG1vZHByb2JlIGUxMDAwIEF1dG9OZWc9MHgwMiAoUmVzdHJpY3RzIGF1dG9uZWdvdGlhdGlvbiB0byAxMCBGdWxsKQorICBtb2Rwcm9iZSBlMTAwMCBBdXRvTmVnPTB4MDMgKFJlc3RyaWN0cyBhdXRvbmVnb3RpYXRpb24gdG8gMTAgSGFsZiBvciAxMCBGdWxsKQorICBtb2Rwcm9iZSBlMTAwMCBBdXRvTmVnPTB4MDQgKFJlc3RyaWN0cyBhdXRvbmVnb3RpYXRpb24gdG8gMTAwIEhhbGYpCisgIG1vZHByb2JlIGUxMDAwIEF1dG9OZWc9MHgwNSAoUmVzdHJpY3RzIGF1dG9uZWdvdGlhdGlvbiB0byAxMCBIYWxmIG9yIDEwMAorICBIYWxmKQorICBtb2Rwcm9iZSBlMTAwMCBBdXRvTmVnPTB4MDIwIChSZXN0cmljdHMgYXV0b25lZ290aWF0aW9uIHRvIDEwMDAgRnVsbCkKKyAgbW9kcHJvYmUgZTEwMDAgQXV0b05lZz0zMiAoU2FtZSBhcyBhYm92ZSkKKworTm90ZSB0aGF0IHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCwgU3BlZWQgYW5kIER1cGxleCBtdXN0IG5vdCBiZSBzcGVjaWZpZWQuCisKK0lmIHRoZSBsaW5rIHBhcnRuZXIgaXMgZm9yY2VkIHRvIGEgc3BlY2lmaWMgc3BlZWQgYW5kIGR1cGxleCwgdGhlbiB0aGlzCitwYXJhbWV0ZXIgc2hvdWxkIG5vdCBiZSB1c2VkLiAgSW5zdGVhZCwgdXNlIHRoZSBTcGVlZCBhbmQgRHVwbGV4IHBhcmFtZXRlcnMKK3ByZXZpb3VzbHkgbWVudGlvbmVkIHRvIGZvcmNlIHRoZSBhZGFwdGVyIHRvIHRoZSBzYW1lIHNwZWVkIGFuZCBkdXBsZXguCiAKIAogQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwpAQCAtMjc2LDE5ICszMzgsMTkgQEAKICAgQ29uZmlndXJpbmcgdGhlIERyaXZlciBvbiBEaWZmZXJlbnQgRGlzdHJpYnV0aW9ucwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgQ29uZmlndXJpbmcgYSBuZXR3b3JrIGRyaXZlciB0byBsb2FkIHByb3Blcmx5IHdoZW4gdGhlIHN5c3RlbSBpcyBzdGFydGVkIGlzCi0gIGRpc3RyaWJ1dGlvbiBkZXBlbmRlbnQuIFR5cGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpbnZvbHZlcyBhZGRpbmcKLSAgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBhcyB3ZWxsIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgCi0gIHNjcmlwdHMgYW5kL29yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE1hbnkgcG9wdWxhciBMaW51eCBkaXN0cmlidXRpb25zIHNoaXAgCi0gIHdpdGggdG9vbHMgdG8gbWFrZSB0aGVzZSBjaGFuZ2VzIGZvciB5b3UuIFRvIGxlYXJuIHRoZSBwcm9wZXIgd2F5IHRvIAotICBjb25maWd1cmUgYSBuZXR3b3JrIGRldmljZSBmb3IgeW91ciBzeXN0ZW0sIHJlZmVyIHRvIHlvdXIgZGlzdHJpYnV0aW9uIAotICBkb2N1bWVudGF0aW9uLiBJZiBkdXJpbmcgdGhpcyBwcm9jZXNzIHlvdSBhcmUgYXNrZWQgZm9yIHRoZSBkcml2ZXIgb3IgbW9kdWxlIAotICBuYW1lLCB0aGUgbmFtZSBmb3IgdGhlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwgUFJPLzEwMDAgRmFtaWx5IG9mIAotICBBZGFwdGVycyBpcyBlMTAwMC4KKyAgQ29uZmlndXJpbmcgYSBuZXR3b3JrIGRyaXZlciB0byBsb2FkIHByb3Blcmx5IHdoZW4gdGhlIHN5c3RlbSBpcyBzdGFydGVkCisgIGlzIGRpc3RyaWJ1dGlvbiBkZXBlbmRlbnQuIFR5cGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpbnZvbHZlcworICBhZGRpbmcgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBvciAvZXRjL21vZHByb2JlLmNvbmYgYXMgd2VsbAorICBhcyBlZGl0aW5nIG90aGVyIHN5c3RlbSBzdGFydHVwIHNjcmlwdHMgYW5kL29yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE1hbnkKKyAgcG9wdWxhciBMaW51eCBkaXN0cmlidXRpb25zIHNoaXAgd2l0aCB0b29scyB0byBtYWtlIHRoZXNlIGNoYW5nZXMgZm9yIHlvdS4KKyAgVG8gbGVhcm4gdGhlIHByb3BlciB3YXkgdG8gY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLAorICByZWZlciB0byB5b3VyIGRpc3RyaWJ1dGlvbiBkb2N1bWVudGF0aW9uLiBJZiBkdXJpbmcgdGhpcyBwcm9jZXNzIHlvdSBhcmUKKyAgYXNrZWQgZm9yIHRoZSBkcml2ZXIgb3IgbW9kdWxlIG5hbWUsIHRoZSBuYW1lIGZvciB0aGUgTGludXggQmFzZSBEcml2ZXIKKyAgZm9yIHRoZSBJbnRlbCBQUk8vMTAwMCBGYW1pbHkgb2YgQWRhcHRlcnMgaXMgZTEwMDAuCiAKLSAgQXMgYW4gZXhhbXBsZSwgaWYgeW91IGluc3RhbGwgdGhlIGUxMDAwIGRyaXZlciBmb3IgdHdvIFBSTy8xMDAwIGFkYXB0ZXJzIAotICAoZXRoMCBhbmQgZXRoMSkgYW5kIHNldCB0aGUgc3BlZWQgYW5kIGR1cGxleCB0byAxMGZ1bGwgYW5kIDEwMGhhbGYsIGFkZCB0aGUgCi0gIGZvbGxvd2luZyB0byBtb2R1bGVzLmNvbmY6CisgIEFzIGFuIGV4YW1wbGUsIGlmIHlvdSBpbnN0YWxsIHRoZSBlMTAwMCBkcml2ZXIgZm9yIHR3byBQUk8vMTAwMCBhZGFwdGVycworICAoZXRoMCBhbmQgZXRoMSkgYW5kIHNldCB0aGUgc3BlZWQgYW5kIGR1cGxleCB0byAxMGZ1bGwgYW5kIDEwMGhhbGYsIGFkZAorICB0aGUgZm9sbG93aW5nIHRvIG1vZHVsZXMuY29uZiBvciBvciBtb2Rwcm9iZS5jb25mOgogCiAgICAgICAgYWxpYXMgZXRoMCBlMTAwMAogICAgICAgIGFsaWFzIGV0aDEgZTEwMDAKQEAgLTI5Nyw5ICszNTksOSBAQAogICBWaWV3aW5nIExpbmsgTWVzc2FnZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcyAKLSAgcmVzdHJpY3Rpbmcgc3lzdGVtIG1lc3NhZ2VzLiBJbiBvcmRlciB0byBzZWUgbmV0d29yayBkcml2ZXIgbGluayBtZXNzYWdlcyBvbiAKLSAgeW91ciBjb25zb2xlLCBzZXQgZG1lc2cgdG8gZWlnaHQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKKyAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcworICByZXN0cmljdGluZyBzeXN0ZW0gbWVzc2FnZXMuIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzCisgIG9uIHlvdXIgY29uc29sZSwgc2V0IGRtZXNnIHRvIGVpZ2h0IGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CiAKICAgICAgICBkbWVzZyAtbiA4CiAKQEAgLTMwOCwyMiArMzcwLDQyIEBACiAgIEp1bWJvIEZyYW1lcwogICAtLS0tLS0tLS0tLS0KIAotICBUaGUgZHJpdmVyIHN1cHBvcnRzIEp1bWJvIEZyYW1lcyBmb3IgYWxsIGFkYXB0ZXJzIGV4Y2VwdCA4MjU0Mi1iYXNlZCAKLSAgYWRhcHRlcnMuIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlIE1UVSB0byBhIHZhbHVlIAotICBsYXJnZXIgdGhhbiB0aGUgZGVmYXVsdCBvZiAxNTAwLiBVc2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8gaW5jcmVhc2UgdGhlIAotICBNVFUgc2l6ZS4gRm9yIGV4YW1wbGU6CisgIFRoZSBkcml2ZXIgc3VwcG9ydHMgSnVtYm8gRnJhbWVzIGZvciBhbGwgYWRhcHRlcnMgZXhjZXB0IDgyNTQyIGFuZAorICA4MjU3My1iYXNlZCBhZGFwdGVycy4gSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUKKyAgTVRVIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgb2YgMTUwMC4gVXNlIHRoZSBpZmNvbmZpZyBjb21tYW5kCisgIHRvIGluY3JlYXNlIHRoZSBNVFUgc2l6ZS4gRm9yIGV4YW1wbGU6CiAKLSAgICAgICAgaWZjb25maWcgZXRoeCBtdHUgOTAwMCB1cAorICAgICAgIGlmY29uZmlnIGV0aDx4PiBtdHUgOTAwMCB1cAogCi0gIFRoZSBtYXhpbXVtIE1UVSBzZXR0aW5nIGZvciBKdW1ibyBGcmFtZXMgaXMgMTYxMTAuIFRoaXMgdmFsdWUgY29pbmNpZGVzIAotICB3aXRoIHRoZSBtYXhpbXVtIEp1bWJvIEZyYW1lcyBzaXplIG9mIDE2MTI4LgorICBUaGlzIHNldHRpbmcgaXMgbm90IHNhdmVkIGFjcm9zcyByZWJvb3RzLiAgSXQgY2FuIGJlIG1hZGUgcGVybWFuZW50IGlmCisgIHlvdSBhZGQ6CiAKLSAgTk9URTogSnVtYm8gRnJhbWVzIGFyZSBzdXBwb3J0ZWQgYXQgMTAwMCBNYnBzIG9ubHkuIFVzaW5nIEp1bWJvIEZyYW1lcyBhdCAKLSAgMTAgb3IgMTAwIE1icHMgbWF5IHJlc3VsdCBpbiBwb29yIHBlcmZvcm1hbmNlIG9yIGxvc3Mgb2YgbGluay4KKyAgICAgICBNVFU9OTAwMAogCisgICB0byB0aGUgZmlsZSAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvaWZjZmctZXRoPHg+LiAgVGhpcyBleGFtcGxlCisgICBhcHBsaWVzIHRvIHRoZSBSZWQgSGF0IGRpc3RyaWJ1dGlvbnM7IG90aGVyIGRpc3RyaWJ1dGlvbnMgbWF5IHN0b3JlIHRoaXMKKyAgIHNldHRpbmcgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24uCiAKLSAgTk9URTogTVRVIGRlc2lnbmF0ZXMgdGhlIGZyYW1lIHNpemUuIFRvIGVuYWJsZSBKdW1ibyBGcmFtZXMsIGluY3JlYXNlIHRoZQotICBNVFUgc2l6ZSBvbiB0aGUgaW50ZXJmYWNlIGJleW9uZCAxNTAwLgorICBOb3RlczoKKworICAtIFRvIGVuYWJsZSBKdW1ibyBGcmFtZXMsIGluY3JlYXNlIHRoZSBNVFUgc2l6ZSBvbiB0aGUgaW50ZXJmYWNlIGJleW9uZAorICAgIDE1MDAuCisgIC0gVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyAxNjExMC4gVGhpcyB2YWx1ZSBjb2luY2lkZXMKKyAgICB3aXRoIHRoZSBtYXhpbXVtIEp1bWJvIEZyYW1lcyBzaXplIG9mIDE2MTI4LgorICAtIFVzaW5nIEp1bWJvIEZyYW1lcyBhdCAxMCBvciAxMDAgTWJwcyBtYXkgcmVzdWx0IGluIHBvb3IgcGVyZm9ybWFuY2Ugb3IKKyAgICBsb3NzIG9mIGxpbmsuCisgIC0gU29tZSBJbnRlbCBnaWdhYml0IGFkYXB0ZXJzIHRoYXQgc3VwcG9ydCBKdW1ibyBGcmFtZXMgaGF2ZSBhIGZyYW1lIHNpemUKKyAgICBsaW1pdCBvZiA5MjM4IGJ5dGVzLCB3aXRoIGEgY29ycmVzcG9uZGluZyBNVFUgc2l6ZSBsaW1pdCBvZiA5MjE2IGJ5dGVzLgorICAgIFRoZSBhZGFwdGVycyB3aXRoIHRoaXMgbGltaXRhdGlvbiBhcmUgYmFzZWQgb24gdGhlIEludGVsIDgyNTcxRUIgYW5kCisgICAgODI1NzJFSSBjb250cm9sbGVycywgd2hpY2ggY29ycmVzcG9uZCB0byB0aGVzZSBwcm9kdWN0IG5hbWVzOgorICAgICBJbnRlbK4gUFJPLzEwMDAgUFQgRHVhbCBQb3J0IFNlcnZlciBBZGFwdGVyCisgICAgIEludGVsriBQUk8vMTAwMCBQRiBEdWFsIFBvcnQgU2VydmVyIEFkYXB0ZXIKKyAgICAgSW50ZWyuIFBSTy8xMDAwIFBUIFNlcnZlciBBZGFwdGVyCisgICAgIEludGVsriBQUk8vMTAwMCBQVCBEZXNrdG9wIEFkYXB0ZXIKKyAgICAgSW50ZWyuIFBSTy8xMDAwIFBGIFNlcnZlciBBZGFwdGVyCisKKyAgLSBUaGUgSW50ZWwgUFJPLzEwMDAgUE0gTmV0d29yayBDb25uZWN0aW9uIGRvZXMgbm90IHN1cHBvcnQganVtYm8gZnJhbWVzLgorCiAKICAgRXRodG9vbAogICAtLS0tLS0tCkBAIC0zMzMsMzIgKzQxNSw0MSBAQAogICB2ZXJzaW9uIDEuNiBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgogCiAgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBmcm9tCi0gIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvZ2tlcm5lbC4gIAorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCiAKLSAgTk9URTogRXRodG9vbCAxLjYgb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgc2V0IG9mIGV0aHRvb2wgb3B0aW9ucy4gU3VwcG9ydCAKLSAgZm9yIGEgbW9yZSBjb21wbGV0ZSBldGh0b29sIGZlYXR1cmUgc2V0IGNhbiBiZSBlbmFibGVkIGJ5IHVwZ3JhZGluZyAKLSAgZXRodG9vbCB0byBldGh0b29sLTEuOC4xLiAKKyAgTk9URTogRXRodG9vbCAxLjYgb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgc2V0IG9mIGV0aHRvb2wgb3B0aW9ucy4gU3VwcG9ydAorICBmb3IgYSBtb3JlIGNvbXBsZXRlIGV0aHRvb2wgZmVhdHVyZSBzZXQgY2FuIGJlIGVuYWJsZWQgYnkgdXBncmFkaW5nCisgIGV0aHRvb2wgdG8gZXRodG9vbC0xLjguMS4KIAogICBFbmFibGluZyBXYWtlIG9uIExBTiogKFdvTCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgV29MIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgRXRodG9vbCogdXRpbGl0eS4gRXRodG9vbCBpcyBpbmNsdWRlZCB3aXRoCi0gIGFsbCB2ZXJzaW9ucyBvZiBSZWQgSGF0IGFmdGVyIFJlZCBIYXQgNy4yLiBGb3Igb3RoZXIgTGludXggZGlzdHJpYnV0aW9ucywgCi0gIGRvd25sb2FkIGFuZCBpbnN0YWxsIEV0aHRvb2wgZnJvbSB0aGUgZm9sbG93aW5nIHdlYnNpdGU6IAorICBhbGwgdmVyc2lvbnMgb2YgUmVkIEhhdCBhZnRlciBSZWQgSGF0IDcuMi4gRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsCisgIGRvd25sb2FkIGFuZCBpbnN0YWxsIEV0aHRvb2wgZnJvbSB0aGUgZm9sbG93aW5nIHdlYnNpdGU6CiAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KIAotICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGVuYWJsaW5nIFdvTCB3aXRoIEV0aHRvb2wsIHJlZmVyIHRvIHRoZSB3ZWJzaXRlIGxpc3RlZCAKKyAgRm9yIGluc3RydWN0aW9ucyBvbiBlbmFibGluZyBXb0wgd2l0aCBFdGh0b29sLCByZWZlciB0byB0aGUgd2Vic2l0ZSBsaXN0ZWQKICAgYWJvdmUuCiAKLSAgV29MIHdpbGwgYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtIGR1cmluZyB0aGUgbmV4dCBzaHV0IGRvd24gb3IgcmVib290LiAKLSAgRm9yIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBlMTAwMCBkcml2ZXIgbXVzdCBiZSAKKyAgV29MIHdpbGwgYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtIGR1cmluZyB0aGUgbmV4dCBzaHV0IGRvd24gb3IgcmVib290LgorICBGb3IgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGUxMDAwIGRyaXZlciBtdXN0IGJlCiAgIGxvYWRlZCB3aGVuIHNodXR0aW5nIGRvd24gb3IgcmVib290aW5nIHRoZSBzeXN0ZW0uCiAKICAgTkFQSQogICAtLS0tCiAKICAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGUxMDAwIGRyaXZlci4gTkFQSSBpcyBlbmFibGVkCi0gIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBrZXJuZWwuIAorICBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUga2VybmVsLiBUbyBvdmVycmlkZQorICB0aGUgZGVmYXVsdCwgdXNlIHRoZSBmb2xsb3dpbmcgY29tcGlsZS10aW1lIGZsYWdzLgorCisgIFRvIGVuYWJsZSBOQVBJLCBjb21waWxlIHRoZSBkcml2ZXIgbW9kdWxlLCBwYXNzaW5nIGluIGEgY29uZmlndXJhdGlvbiBvcHRpb246CisKKyAgICAgICBtYWtlIENGTEFHU19FWFRSQT0tREUxMDAwX05BUEkgaW5zdGFsbAorCisgIFRvIGRpc2FibGUgTkFQSSwgY29tcGlsZSB0aGUgZHJpdmVyIG1vZHVsZSwgcGFzc2luZyBpbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgorCisgICAgICAgbWFrZSBDRkxBR1NfRVhUUkE9LURFMTAwMF9OT19OQVBJIGluc3RhbGwKIAogICBTZWUgd3d3LmN5YmVydXMuY2EvfmhhZGkvdXNlbml4LXBhcGVyLnRneiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQVBJLgogCkBAIC0zNjksMTAgKzQ2MCw4NSBAQAogICBKdW1ibyBGcmFtZXMgU3lzdGVtIFJlcXVpcmVtZW50CiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgb24gTGludXggc3lzdGVtcyB3aXRoIDY0IE1CIAotICBvZiBSQU0gb3IgbGVzcyB0aGF0IGFyZSBydW5uaW5nIEp1bWJvIEZyYW1lcy4gSWYgeW91IGFyZSB1c2luZyBKdW1ibyBGcmFtZXMsCi0gIHlvdXIgc3lzdGVtIG1heSByZXF1aXJlIG1vcmUgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBtaW5pbXVtIHJlcXVpcmVtZW50IG9mIDY0IE1CCi0gIG9mIHN5c3RlbSBtZW1vcnkuCisgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGhhdmUgYmVlbiBvYnNlcnZlZCBvbiBMaW51eCBzeXN0ZW1zIHdpdGggNjQgTUIKKyAgb2YgUkFNIG9yIGxlc3MgdGhhdCBhcmUgcnVubmluZyBKdW1ibyBGcmFtZXMuIElmIHlvdSBhcmUgdXNpbmcgSnVtYm8KKyAgRnJhbWVzLCB5b3VyIHN5c3RlbSBtYXkgcmVxdWlyZSBtb3JlIHRoYW4gdGhlIGFkdmVydGlzZWQgbWluaW11bQorICByZXF1aXJlbWVudCBvZiA2NCBNQiBvZiBzeXN0ZW0gbWVtb3J5LgorCisgIFBlcmZvcm1hbmNlIERlZ3JhZGF0aW9uIHdpdGggSnVtYm8gRnJhbWVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRGVncmFkYXRpb24gaW4gdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBtYXkgYmUgb2JzZXJ2ZWQgaW4gc29tZSBKdW1ibyBmcmFtZXMKKyAgZW52aXJvbm1lbnRzLiBJZiB0aGlzIGlzIG9ic2VydmVkLCBpbmNyZWFzaW5nIHRoZSBhcHBsaWNhdGlvbidzIHNvY2tldAorICBidWZmZXIgc2l6ZSBhbmQvb3IgaW5jcmVhc2luZyB0aGUgL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF8qbWVtIGVudHJ5IHZhbHVlcworICBtYXkgaGVscC4gU2VlIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBtYW51YWwgYW5kCisgIC91c3Ivc3JjL2xpbnV4Ki9Eb2N1bWVudGF0aW9uLworICBuZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgZm9yIG1vcmUgZGV0YWlscy4KKworICBKdW1ibyBmcmFtZXMgb24gRm91bmRyeSBCaWdJcm9uIDgwMDAgc3dpdGNoCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVGhlcmUgaXMgYSBrbm93biBpc3N1ZSB1c2luZyBKdW1ibyBmcmFtZXMgd2hlbiBjb25uZWN0ZWQgdG8gYSBGb3VuZHJ5CisgIEJpZ0lyb24gODAwMCBzd2l0Y2guIFRoaXMgaXMgYSAzcmQgcGFydHkgbGltaXRhdGlvbi4gSWYgeW91IGV4cGVyaWVuY2UKKyAgbG9zcyBvZiBwYWNrZXRzLCBsb3dlciB0aGUgTVRVIHNpemUuCisKKyAgTXVsdGlwbGUgSW50ZXJmYWNlcyBvbiBTYW1lIEV0aGVybmV0IEJyb2FkY2FzdCBOZXR3b3JrCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIER1ZSB0byB0aGUgZGVmYXVsdCBBUlAgYmVoYXZpb3Igb24gTGludXgsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlCisgIG9uZSBzeXN0ZW0gb24gdHdvIElQIG5ldHdvcmtzIGluIHRoZSBzYW1lIEV0aGVybmV0IGJyb2FkY2FzdCBkb21haW4KKyAgKG5vbi1wYXJ0aXRpb25lZCBzd2l0Y2gpIGJlaGF2ZSBhcyBleHBlY3RlZC4gQWxsIEV0aGVybmV0IGludGVyZmFjZXMKKyAgd2lsbCByZXNwb25kIHRvIElQIHRyYWZmaWMgZm9yIGFueSBJUCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBzeXN0ZW0uCisgIFRoaXMgcmVzdWx0cyBpbiB1bmJhbGFuY2VkIHJlY2VpdmUgdHJhZmZpYy4KKworICBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBpbnRlcmZhY2VzIGluIGEgc2VydmVyLCBlaXRoZXIgdHVybiBvbiBBUlAKKyAgZmlsdGVyaW5nIGJ5IGVudGVyaW5nOgorCisgICAgICBlY2hvIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvYXJwX2ZpbHRlcgorICAodGhpcyBvbmx5IHdvcmtzIGlmIHlvdXIga2VybmVsJ3MgdmVyc2lvbiBpcyBoaWdoZXIgdGhhbiAyLjQuNSksCisKKyAgTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4gVGhlIGNvbmZpZ3VyYXRpb24KKyAgY2hhbmdlIGNhbiBiZSBtYWRlIHBlcm1hbmVudCBieSBhZGRpbmcgdGhlIGxpbmU6CisgICAgICBuZXQuaXB2NC5jb25mLmFsbC5hcnBfZmlsdGVyID0gMQorICB0byB0aGUgZmlsZSAvZXRjL3N5c2N0bC5jb25mCisKKyAgICAgICAgb3IsCisKKyAgaW5zdGFsbCB0aGUgaW50ZXJmYWNlcyBpbiBzZXBhcmF0ZSBicm9hZGNhc3QgZG9tYWlucyAoZWl0aGVyIGluCisgIGRpZmZlcmVudCBzd2l0Y2hlcyBvciBpbiBhIHN3aXRjaCBwYXJ0aXRpb25lZCB0byBWTEFOcykuCisKKyAgODI1NDEvODI1NDcgY2FuJ3QgbGluayBvciBhcmUgc2xvdyB0byBsaW5rIHdpdGggc29tZSBsaW5rIHBhcnRuZXJzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgaXMgYSBrbm93biBjb21wYXRpYmlsaXR5IGlzc3VlIHdpdGggODI1NDEvODI1NDcgYW5kIHNvbWUKKyAgbG93LWVuZCBzd2l0Y2hlcyB3aGVyZSB0aGUgbGluayB3aWxsIG5vdCBiZSBlc3RhYmxpc2hlZCwgb3Igd2lsbAorICBiZSBzbG93IHRvIGVzdGFibGlzaC4gIEluIHBhcnRpY3VsYXIsIHRoZXNlIHN3aXRjaGVzIGFyZSBrbm93biB0bworICBiZSBpbmNvbXBhdGlibGUgd2l0aCA4MjU0MS84MjU0NzoKKworICAgICAgUGxhbmV4IEZYRy0wOFRFCisgICAgICBJLU8gRGF0YSBFVEctU0g4CisKKyAgVG8gd29ya2Fyb3VuZCB0aGlzIGlzc3VlLCB0aGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZCB3aXRoIGFuIG92ZXJyaWRlCisgIG9mIHRoZSBQSFkncyBtYXN0ZXIvc2xhdmUgc2V0dGluZy4gIEZvcmNpbmcgbWFzdGVyIG9yIGZvcmNpbmcgc2xhdmUKKyAgbW9kZSB3aWxsIGltcHJvdmUgdGltZS10by1saW5rLgorCisgICAgICAjIG1ha2UgRVhUUkFfQ0ZMQUdTPS1ERTEwMDBfTUFTVEVSX1NMQVZFPTxuPgorCisgIFdoZXJlIDxuPiBpczoKKworICAgICAgMCA9IEhhcmR3YXJlIGRlZmF1bHQKKyAgICAgIDEgPSBNYXN0ZXIgbW9kZQorICAgICAgMiA9IFNsYXZlIG1vZGUKKyAgICAgIDMgPSBBdXRvIG1hc3Rlci9zbGF2ZQorCisgIERpc2FibGUgcnggZmxvdyBjb250cm9sIHdpdGggZXRodG9vbAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBJbiBvcmRlciB0byBkaXNhYmxlIHJlY2VpdmUgZmxvdyBjb250cm9sIHVzaW5nIGV0aHRvb2wsIHlvdSBtdXN0IHR1cm4KKyAgb2ZmIGF1dG8tbmVnb3RpYXRpb24gb24gdGhlIHNhbWUgY29tbWFuZCBsaW5lLgorCisgIEZvciBleGFtcGxlOgorCisgICAgIGV0aHRvb2wgLUEgZXRoPyBhdXRvbmVnIG9mZiByeCBvZmYKIAogCiBTdXBwb3J0CkBAIC0zODIsMjAgKzU0OCwyNCBAQAogCiAgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCiAKKyAgICBvciB0aGUgSW50ZWwgV2lyZWQgTmV0d29ya2luZyBwcm9qZWN0IGhvc3RlZCBieSBTb3VyY2Vmb3JnZSBhdDoKKworICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTEwMDAKKwogSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCi1rZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZCB0byAKLXRoZSBpc3N1ZSB0byBsaW51eC5uaWNzQGludGVsLmNvbS4KK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkCit0byB0aGUgaXNzdWUgdG8gZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiAKIAogTGljZW5zZQogPT09PT09PQogCi1UaGlzIHNvZnR3YXJlIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBhZ3JlZW1lbnQgCi1iZXR3ZWVuIHlvdSAoJ0xpY2Vuc2VlJykgYW5kIEludGVsLiBEbyBub3QgdXNlIG9yIGxvYWQgdGhpcyBzb2Z0d2FyZSBvciBhbnkgCi1hc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgJ1NvZnR3YXJlJykgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5IAotcmVhZCB0aGUgZnVsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTElDRU5TRSBsb2NhdGVkIGluIHRoaXMgc29mdHdhcmUgCi1wYWNrYWdlLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIAotQWdyZWVtZW50LiBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBkbyBub3QgCitUaGlzIHNvZnR3YXJlIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBhZ3JlZW1lbnQKK2JldHdlZW4geW91ICgnTGljZW5zZWUnKSBhbmQgSW50ZWwuIERvIG5vdCB1c2Ugb3IgbG9hZCB0aGlzIHNvZnR3YXJlIG9yIGFueQorYXNzb2NpYXRlZCBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSwgdGhlICdTb2Z0d2FyZScpIHVudGlsIHlvdSBoYXZlIGNhcmVmdWxseQorcmVhZCB0aGUgZnVsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgZmlsZSBDT1BZSU5HIGxvY2F0ZWQgaW4gdGhpcyBzb2Z0d2FyZQorcGFja2FnZS4gQnkgbG9hZGluZyBvciB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcworQWdyZWVtZW50LiBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBkbyBub3QKIGluc3RhbGwgb3IgdXNlIHRoZSBTb2Z0d2FyZS4KIAogKiBPdGhlciBuYW1lcyBhbmQgYnJhbmRzIG1heSBiZSBjbGFpbWVkIGFzIHRoZSBwcm9wZXJ0eSBvZiBvdGhlcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IDI2MzY0ZDAuLmYxMjAwN2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0zNTUsNiArMzU1LDEzIEBACiAJRGVmYXVsdHMgdG8gMTI4LiAgU2VlIGFsc28gdGNwX21heF9zeW5fYmFja2xvZyBmb3IgYWRkaXRpb25hbCB0dW5pbmcKIAlmb3IgVENQIHNvY2tldHMuCiAKK3RjcF93b3JrYXJvdW5kX3NpZ25lZF93aW5kb3dzIC0gQk9PTEVBTgorCUlmIHNldCwgYXNzdW1lIG5vIHJlY2VpcHQgb2YgYSB3aW5kb3cgc2NhbGluZyBvcHRpb24gbWVhbnMgdGhlCisJcmVtb3RlIFRDUCBpcyBicm9rZW4gYW5kIHRyZWF0cyB0aGUgd2luZG93IGFzIGEgc2lnbmVkIHF1YW50aXR5LgorCUlmIHVuc2V0LCBhc3N1bWUgdGhlIHJlbW90ZSBUQ1AgaXMgbm90IGJyb2tlbiBldmVuIGlmIHdlIGRvCisJbm90IHJlY2VpdmUgYSB3aW5kb3cgc2NhbGluZyBvcHRpb24gZnJvbSB0aGVtLgorCURlZmF1bHQ6IDAKKwogSVAgVmFyaWFibGVzOgogCiBpcF9sb2NhbF9wb3J0X3JhbmdlIC0gMiBJTlRFR0VSUwpAQCAtNjE5LDYgKzYyNiwxMSBAQAogCVRoZSBtYXggdmFsdWUgZnJvbSBjb25mL3thbGwsaW50ZXJmYWNlfS9hcnBfaWdub3JlIGlzIHVzZWQKIAl3aGVuIEFSUCByZXF1ZXN0IGlzIHJlY2VpdmVkIG9uIHRoZSB7aW50ZXJmYWNlfQogCithcnBfYWNjZXB0IC0gQk9PTEVBTgorCURlZmluZSBiZWhhdmlvciB3aGVuIGdyYXR1aXRvdXMgYXJwIHJlcGxpZXMgYXJlIHJlY2VpdmVkOgorCTAgLSBkcm9wIGdyYXR1aXRvdXMgYXJwIGZyYW1lcworCTEgLSBhY2NlcHQgZ3JhdHVpdG91cyBhcnAgZnJhbWVzCisKIGFwcF9zb2xpY2l0IC0gSU5URUdFUgogCVRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9iZXMgdG8gc2VuZCB0byB0aGUgdXNlciBzcGFjZSBBUlAgZGFlbW9uCiAJdmlhIG5ldGxpbmsgYmVmb3JlIGRyb3BwaW5nIGJhY2sgdG8gbXVsdGljYXN0IHByb2JlcyAoc2VlCkBAIC03MTcsNiArNzI5LDMzIEBACiAJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQuCiAJCQkgICAgZGlzYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLgogCithY2NlcHRfcmFfZGVmcnRyIC0gQk9PTEVBTgorCUxlYXJuIGRlZmF1bHQgcm91dGVyIGluIFJvdXRlciBBZHZlcnRpc2VtZW50LgorCisJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGFjY2VwdF9yYSBpcyBlbmFibGVkLgorCQkJICAgIGRpc2FibGVkIGlmIGFjY2VwdF9yYSBpcyBkaXNhYmxlZC4KKworYWNjZXB0X3JhX3BpbmZvIC0gQk9PTEVBTgorCUxlYXJuIFByZWZpeCBJbmZvcmFtdGlvbiBpbiBSb3V0ZXIgQWR2ZXJ0aXNlbWVudC4KKworCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBhY2NlcHRfcmEgaXMgZW5hYmxlZC4KKwkJCSAgICBkaXNhYmxlZCBpZiBhY2NlcHRfcmEgaXMgZGlzYWJsZWQuCisKK2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuIC0gSU5URUdFUgorCU1heGltdW0gcHJlZml4IGxlbmd0aCBvZiBSb3V0ZSBJbmZvcm1hdGlvbiBpbiBSQS4KKworCVJvdXRlIEluZm9ybWF0aW9uIHcvIHByZWZpeCBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB0aGlzCisJdmFyaWFibGUgc2hhbGwgYmUgaWdub3JlZC4KKworCUZ1bmN0aW9uYWwgZGVmYXVsdDogMCBpZiBhY2NlcHRfcmFfcnRyX3ByZWYgaXMgZW5hYmxlZC4KKwkJCSAgICAtMSBpZiBhY2NlcHRfcmFfcnRyX3ByZWYgaXMgZGlzYWJsZWQuCisKK2FjY2VwdF9yYV9ydHJfcHJlZiAtIEJPT0xFQU4KKwlBY2NlcHQgUm91dGVyIFByZWZlcmVuY2UgaW4gUkEuCisKKwlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgYWNjZXB0X3JhIGlzIGVuYWJsZWQuCisJCQkgICAgZGlzYWJsZWQgaWYgYWNjZXB0X3JhIGlzIGRpc2FibGVkLgorCiBhY2NlcHRfcmVkaXJlY3RzIC0gQk9PTEVBTgogCUFjY2VwdCBSZWRpcmVjdHMuCiAKQEAgLTcyNyw4ICs3NjYsOCBAQAogCUF1dG9jb25maWd1cmUgYWRkcmVzc2VzIHVzaW5nIFByZWZpeCBJbmZvcm1hdGlvbiBpbiBSb3V0ZXIgCiAJQWR2ZXJ0aXNlbWVudHMuCiAKLQlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgYWNjZXB0X3JhIGlzIGVuYWJsZWQuCi0JCQkgICAgZGlzYWJsZWQgaWYgYWNjZXB0X3JhIGlzIGRpc2FibGVkLgorCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBhY2NlcHRfcmFfcGluZm8gaXMgZW5hYmxlZC4KKwkJCSAgICBkaXNhYmxlZCBpZiBhY2NlcHRfcmFfcGluZm8gaXMgZGlzYWJsZWQuCiAKIGRhZF90cmFuc21pdHMgLSBJTlRFR0VSCiAJVGhlIGFtb3VudCBvZiBEdXBsaWNhdGUgQWRkcmVzcyBEZXRlY3Rpb24gcHJvYmVzIHRvIHNlbmQuCkBAIC03NzEsNiArODEwLDEyIEBACiAJRGVmYXVsdCBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKIAlEZWZhdWx0OiAxMjgwIChJUHY2IHJlcXVpcmVkIG1pbmltdW0pCiAKK3JvdXRlcl9wcm9iZV9pbnRlcnZhbCAtIElOVEVHRVIKKwlNaW5pbXVtIGludGVydmFsIChpbiBzZWNvbmRzKSBiZXR3ZWVuIFJvdXRlciBQcm9iaW5nIGRlc2NyaWJlZAorCWluIFJGQzQxOTEuCisKKwlEZWZhdWx0OiA2MAorCiByb3V0ZXJfc29saWNpdGF0aW9uX2RlbGF5IC0gSU5URUdFUgogCU51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYWZ0ZXIgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAKIAliZWZvcmUgc2VuZGluZyBSb3V0ZXIgU29saWNpdGF0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CmluZGV4IDhkNGNmNzguLjRmYzhlOTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dApAQCAtNDAsNyArNDAsNyBAQAogKyBIb3cgdG8gdXNlIENPTkZJR19QQUNLRVRfTU1BUAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRnJvbSB0aGUgdXNlciBzdGFuZHBvaW50LCB5b3Ugc2hvdWxkIHVzZSB0aGUgaGlnaGVyIGxldmVsIGxpYnBjYXAgbGlicmFyeSwgd2ljaAorRnJvbSB0aGUgdXNlciBzdGFuZHBvaW50LCB5b3Ugc2hvdWxkIHVzZSB0aGUgaGlnaGVyIGxldmVsIGxpYnBjYXAgbGlicmFyeSwgd2hpY2gKIGlzIGEgZGUgZmFjdG8gc3RhbmRhcmQsIHBvcnRhYmxlIGFjcm9zcyBuZWFybHkgYWxsIG9wZXJhdGluZyBzeXN0ZW1zCiBpbmNsdWRpbmcgV2luMzIuIAogCkBAIC0yMTcsOCArMjE3LDggQEAKIAoga21hbGxvYyBhbGxvY2F0ZXMgYW55IG51bWJlciBvZiBieXRlcyBvZiBwaGlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZyb20gCiBhIHBvb2wgb2YgcHJlLWRldGVybWluZWQgc2l6ZXMuIFRoaXMgcG9vbCBvZiBtZW1vcnkgaXMgbWFudGFpbmVkIGJ5IHRoZSBzbGFiIAotYWxsb2NhdG9yIHdpY2ggaXMgYXQgdGhlIGVuZCB0aGUgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCAKLWhlbmNlIHdpY2ggaW1wb3NlcyB0aGUgbWF4aW11bSBtZW1vcnkgdGhhdCBrbWFsbG9jIGNhbiBhbGxvY2F0ZS4gCithbGxvY2F0b3Igd2hpY2ggaXMgYXQgdGhlIGVuZCB0aGUgcmVzcG9uc2libGUgZm9yIGRvaW5nIHRoZSBhbGxvY2F0aW9uIGFuZCAKK2hlbmNlIHdoaWNoIGltcG9zZXMgdGhlIG1heGltdW0gbWVtb3J5IHRoYXQga21hbGxvYyBjYW4gYWxsb2NhdGUuIAogCiBJbiBhIDIuNC8yLjYga2VybmVsIGFuZCB0aGUgaTM4NiBhcmNoaXRlY3R1cmUsIHRoZSBsaW1pdCBpcyAxMzEwNzIgYnl0ZXMuIFRoZSAKIHByZWRldGVybWluZWQgc2l6ZXMgdGhhdCBrbWFsbG9jIHVzZXMgY2FuIGJlIGNoZWNrZWQgaW4gdGhlICJzaXplLTxieXRlcz4iIApAQCAtMjU0LDcgKzI1NCw3IEBACiAKIAk8YmxvY2sgbnVtYmVyPiAqIDxibG9jayBzaXplPiAvIDxmcmFtZSBzaXplPgogCi1TdXBvc3NlIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycywgd2ljaCBhcHBseSBmb3IgMi42IGtlcm5lbCBhbmQgYW4KK1N1cG9zc2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLCB3aGljaCBhcHBseSBmb3IgMi42IGtlcm5lbCBhbmQgYW4KIGkzODYgYXJjaGl0ZWN0dXJlOgogCiAJPHNpemUtbWF4PiA9IDEzMTA3MiBieXRlcwpAQCAtMzYwLDcgKzM2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzIHdoZXJlIGNoZWNrZWQgd2l0aCBnZXRzb2Nrb3B0KCkgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUEFDS0VUX1NUQVRJU1RJQ1Mgb3B0aW9uLgogCi1UUF9TVEFUVVNfQ1NVTU5PVFJFQURZOiBjdXJyZW50bHkgaXQncyB1c2VkIGZvciBvdXRnb2luZyBJUCBwYWNrZXRzIHdpY2ggCitUUF9TVEFUVVNfQ1NVTU5PVFJFQURZOiBjdXJyZW50bHkgaXQncyB1c2VkIGZvciBvdXRnb2luZyBJUCBwYWNrZXRzIHdoaWNoIAogICAgICAgICAgICAgICAgICAgICAgICAgaXQncyBjaGVja3N1bSB3aWxsIGJlIGRvbmUgaW4gaGFyZHdhcmUuIFNvIHdoaWxlIAogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZyB0aGUgcGFja2V0IHdlIHNob3VsZCBub3QgdHJ5IHRvIGNoZWNrIHRoZSAKICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtLiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKaW5kZXggY2M0YjRkMC4uMjc4NzcxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKQEAgLTEwOSw2ICsxMDksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZSB0aHJvdWdoIHRoZSBwb3J0IHJhbmdlLgogIHBnc2V0ICJ1ZHBfZHN0X21heCA5IiAgIHNldCBVRFAgZGVzdGluYXRpb24gcG9ydCBtYXguCiAKKyBwZ3NldCAibXBscyAwMDAxMDAwYSwwMDAyMDAwYSwwMDAwMDAwYSIgc2V0IE1QTFMgbGFiZWxzIChpbiB0aGlzIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIgbGFiZWw9MTYsbWlkZGxlIGxhYmVsPTMyLAorCQkJCQkgaW5uZXIgbGFiZWw9MCAoSVB2NCBOVUxMKSkgTm90ZSB0aGF0CisJCQkJCSB0aGVyZSBtdXN0IGJlIG5vIHNwYWNlcyBiZXR3ZWVuIHRoZQorCQkJCQkgYXJndW1lbnRzLiBMZWFkaW5nIHplcm9zIGFyZSByZXF1aXJlZC4KKwkJCQkJIERvIG5vdCBzZXQgdGhlIGJvdHRvbSBvZiBzdGFjayBiaXQsCisJCQkJCSB0aGF0cyBkb25lIGF1dG9tYXRpY2FsbHkuIElmIHlvdSBkbworCQkJCQkgc2V0IHRoZSBib3R0b20gb2Ygc3RhY2sgYml0LCB0aGF0CisJCQkJCSBpbmRpY2F0ZXMgdGhhdCB5b3Ugd2FudCB0byByYW5kb21seQorCQkJCQkgZ2VuZXJhdGUgdGhhdCBhZGRyZXNzIGFuZCB0aGUgZmxhZworCQkJCQkgTVBMU19STkQgd2lsbCBiZSB0dXJuZWQgb24uIFlvdQorCQkJCQkgY2FuIGhhdmUgYW55IG1peCBvZiByYW5kb20gYW5kIGZpeGVkCisJCQkJCSBsYWJlbHMgaW4gdGhlIGxhYmVsIHN0YWNrLgorCisgcGdzZXQgIm1wbHMgMCIJCSAgdHVybiBvZmYgbXBscyAob3IgYW55IGludmFsaWQgYXJndW1lbnQgd29ya3MgdG9vISkKKwogIHBnc2V0IHN0b3AgICAgCSAgICAgICAgICBhYm9ydHMgaW5qZWN0aW9uLiBBbHNvLCBeQyBhYm9ydHMgZ2VuZXJhdG9yLgogCiAKQEAgLTE2Nyw2ICsxODMsOCBAQAogbWluX3BrdF9zaXplCiBtYXhfcGt0X3NpemUKIAorbXBscworCiB1ZHBfc3JjX21pbgogdWRwX3NyY19tYXgKIApAQCAtMjExLDQgKzIyOSw0IEBACiBTdGVwaGVuIEhlbW1pbmdlciwgQW5kaSBLbGVlbiwgRGF2ZSBNaWxsZXIgYW5kIG1hbnkgb3RoZXJzLgogCiAKLUdvb2QgbHVjayB3aXRoIHRoZSBsaW51eCBuZXQtZGV2ZWxvcG1lbnQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorR29vZCBsdWNrIHdpdGggdGhlIGxpbnV4IG5ldC1kZXZlbG9wbWVudC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yYXlfY3MudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQKaW5kZXggNTQyN2Y4Yy4uMTQ1ZDI3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQKQEAgLTI1LDcgKzI1LDcgQEAKIFRoaXMgd2lsbCBjaGFuZ2UgYWZ0ZXIgdGhlIG1ldGhvZCBvZiBzb3J0aW5nIG91dCBwYXJhbWV0ZXJzIGZvciBhbGwKIHRoZSBQQ01DSUEgZHJpdmVycyBpcyBhZ3JlZWQgdXBvbi4gIElmIHlvdSBtdXN0IGhhdmUgYSBidWlsdCBpbiBkcml2ZXIKIHdpdGggbm9uZGVmYXVsdCBwYXJhbWV0ZXJzLCB0aGV5IGNhbiBiZSBlZGl0ZWQgaW4KLS91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0L3BjbWNpYS9yYXlfY3MuYy4gIFNlYXJjaGluZyBmb3IgTU9EVUxFX1BBUk0KKy91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0L3BjbWNpYS9yYXlfY3MuYy4gIFNlYXJjaGluZyBmb3IgbW9kdWxlX3BhcmFtCiB3aWxsIGZpbmQgdGhlbSBhbGwuCiAKIEluZm9ybWF0aW9uIG9uIGNhcmQgc2VydmljZXMgaXMgYXZhaWxhYmxlIGF0OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NpczkwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2lzOTAwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRkZmZkNy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2lzOTAwLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0KLVNpUyA5MDAvNzAxNiBGYXN0IEV0aGVybmV0IERldmljZSBEcml2ZXIKLQotT2xsaWUgTGhvCi0KLUxlaSBDaHVuIENoYW5nCi0KLSAgIENvcHlyaWdodCCpIDE5OTkgYnkgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbSBDb3JwLgotICAgCi0gICBUaGlzIGRvY3VtZW50IGdpdmVzIHNvbWUgaW5mb3JtYXRpb24gb24gaW5zdGFsbGF0aW9uIGFuZCB1c2FnZSBvZiBTaVMKLSAgIDkwMC83MDE2IGRldmljZSBkcml2ZXIgdW5kZXIgTGludXguCi0gICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gICB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKLSAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgIAotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3Ci0gICBVU0EKLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgIAotICAgVGFibGUgb2YgQ29udGVudHMKLSAgIDEuIEludHJvZHVjdGlvbgotICAgMi4gQ2hhbmdlcwotICAgMy4gVGVzdGVkIEVudmlyb25tZW50Ci0gICA0LiBGaWxlcyBpbiBUaGlzIFBhY2thZ2UKLSAgIDUuIEluc3RhbGxhdGlvbgotICAgICAgICAgIAotICAgICAgICBCdWlsZGluZyB0aGUgZHJpdmVyIGFzIGxvYWRhYmxlIG1vZHVsZQotICAgICAgICBCdWlsZGluZyB0aGUgZHJpdmVyIGludG8ga2VybmVsCi0gICAgICAgICAgICAgICAgCi0gICA2LiBLbm93biBQcm9ibGVtcyBhbmQgQnVncwotICAgNy4gUmV2aXNpb24gSGlzdG9yeQotICAgOC4gQWNrbm93bGVkZ2VtZW50cwotICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotICAgCi1DaGFwdGVyIDEuIEludHJvZHVjdGlvbgotCi0gICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgcmV2aXNpb24gMS4wNiBhbmQgMS4wNyBvZiBTaVMgOTAwLzcwMTYKLSAgIEZhc3QgRXRoZXJuZXQgZGV2aWNlIGRyaXZlciB1bmRlciBMaW51eC4gVGhlIGRyaXZlciBpcyBkZXZlbG9wZWQgYnkKLSAgIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycC4gYW5kIGRpc3RyaWJ1dGVkIGZyZWVseSB1bmRlciB0aGUgR05VCi0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLiBUaGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZCBhcyBhIGxvYWRhYmxlCi0gICBtb2R1bGUgYW5kIHVzZWQgdW5kZXIgTGludXgga2VybmVsIHZlcnNpb24gMi4yLnguIChyZXYuIDEuMDYpIFdpdGgKLSAgIG1pbmltYWwgY2hhbmdlcywgdGhlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHVuZGVyIDIuMy54IGFuZCAyLjQueAotICAga2VybmVsIChyZXYuIDEuMDcpLCBwbGVhc2Ugc2VlIENoYXB0ZXIgNS4gSWYgeW91IGFyZSBpbnRlbmRlZCB0byB1c2UKLSAgIHRoZSBkcml2ZXIgZm9yIGVhcmxpZXIga2VybmVscywgeW91IGFyZSBvbiB5b3VyIG93bi4KLSAgIAotICAgVGhlIGRyaXZlciBpcyB0ZXN0ZWQgd2l0aCB1c3VhbCBUQ1AvSVAgYXBwbGljYXRpb25zIGluY2x1ZGluZyBGVFAsCi0gICBUZWxuZXQsIE5ldHNjYXBlIGV0Yy4gYW5kIGlzIHVzZWQgY29uc3RhbnRseSBieSB0aGUgZGV2ZWxvcGVycy4KLSAgIAotICAgUGxlYXNlIHNlbmQgYWxsIGNvbW1lbnRzL2ZpeGVzL3F1ZXN0aW9ucyB0byBMZWktQ2h1biBDaGFuZy4KLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgIAotQ2hhcHRlciAyLiBDaGFuZ2VzCi0KLSAgIENoYW5nZXMgbWFkZSBpbiBSZXZpc2lvbiAxLjA3Ci0gICAKLSAgICAxLiBTZXBhcmF0aW9uIG9mIHNpczkwMC5jIGFuZCBzaXM5MDAuaCBpbiBvcmRlciB0byBtb3ZlIG1vc3QgY29uc3RhbnQKLSAgICAgICBkZWZpbml0aW9uIHRvIHNpczkwMC5oIChtYW55IG9mIHRob3NlIGNvbnN0YW50cyB3ZXJlIGNvcnJlY3RlZCkKLSAgICAyLiBDbGVhbiB1cCBQQ0kgZGV0ZWN0aW9uLCB0aGUgcGNpLXNjYW4gZnJvbSBEb25hbGQgQmVja2VyIHdlcmUgbm90Ci0gICAgICAgdXNlZCwganVzdCBzaW1wbGUgcGNpX2ZpbmRfKi4KLSAgICAzLiBNSUkgZGV0ZWN0aW9uIGlzIG1vZGlmaWVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbWlpIHRyYW5zY2VpdmVyLgotICAgIDQuIEJ1Z3MgaW4gcmVhZF9lZXByb20sIG1kaW9fKiB3ZXJlIHJlbW92ZWQuCi0gICAgNS4gTG90IG9mIHNpczkwMCBpcnJlbGV2YW50IGNvbW1lbnRzIHdlcmUgcmVtb3ZlZC9jaGFuZ2VkIGFuZCBtb3JlCi0gICAgICAgY29tbWVudHMgd2VyZSBhZGRlZCB0byByZWZsZWN0IHRoZSByZWFsIHNpdHVhdGlvbi4KLSAgICA2LiBDbGVhbiB1cCBvZiBwaHlzaWNhbC92aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgbWVzcyBpbiBidWZmZXIKLSAgICAgICBkZXNjcmlwdG9ycy4KLSAgICA3LiBCZXR0ZXIgdHJhbnNtaXQvcmVjZWl2ZSBlcnJvciBoYW5kbGluZy4KLSAgICA4LiBUaGUgZHJpdmVyIG5vdyB1c2VzIHplcm8tY29weSBzaW5nbGUgYnVmZmVyIG1hbmFnZW1lbnQgc2NoZW1lIHRvCi0gICAgICAgaW1wcm92ZSBwZXJmb3JtYW5jZS4KLSAgICA5LiBOYW1lcyBvZiB2YXJpYWJsZXMgd2VyZSBjaGFuZ2VkIHRvIGJlIG1vcmUgY29uc2lzdGVudC4KLSAgIDEwLiBDbGVhbiB1cCBvZiBhdW8tbmVnb3RpYXRpb24gYW5kIHRpbWVyIGNvZGUuCi0gICAxMS4gQXV0b21hdGljIGRldGVjdGlvbiBhbmQgY2hhbmdlIG9mIFBIWSBvbiB0aGUgZmx5LgotICAgMTIuIEJ1ZyBpbiBtYWMgcHJvYmluZyBmaXhlZC4KLSAgIDEzLiBGaXggNjMwRSBlcXVhbGllciBwcm9ibGVtIGJ5IG1vZGlmeWluZyB0aGUgZXF1YWxpemVyIHdvcmthcm91bmQKLSAgICAgICBydWxlLgotICAgMTQuIFN1cHBvcnQgZm9yIElDUzE4OTMgMTAvMTAwIEludGVyYXRlZCBQSFljZWl2ZXIuCi0gICAxNS4gU3VwcG9ydCBmb3IgbWVkaWEgc2VsZWN0IGJ5IGlmY29uZmlnLgotICAgMTYuIEFkZGVkIGtlcm5lbC1kb2MgZXh0cmF0YWJsZSBkb2N1bWVudGF0aW9uLgotICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotICAgCi1DaGFwdGVyIDMuIFRlc3RlZCBFbnZpcm9ubWVudAotCi0gICBUaGlzIGRyaXZlciBpcyBkZXZlbG9wZWQgb24gdGhlIGZvbGxvd2luZyBoYXJkd2FyZQotICAgCi0gICAgICogSW50ZWwgQ2VsZXJvbiA1MDAgd2l0aCBTaVMgNjMwIChyZXYgMDIpIGNoaXBzZXQKLSAgICAgKiBTaVMgOTAwIChyZXYgMDEpIGFuZCBTaVMgNzAxNi83MDE0IEZhc3QgRXRoZXJuZXQgQ2FyZAotICAgICAgIAotICAgYW5kIHRlc3RlZCB3aXRoIHRoZXNlIHNvZnR3YXJlIGVudmlyb25tZW50cwotICAgCi0gICAgICogUmVkIEhhdCBMaW51eCB2ZXJzaW9uIDYuMgotICAgICAqIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuNC4wCi0gICAgICogTmV0c2NhcGUgdmVyc2lvbiA0LjYKLSAgICAgKiBOY0ZUUCAzLjAuMCBiZXRhIDE4Ci0gICAgICogU2FtYmEgdmVyc2lvbiAyLjAuMwotICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwotICAgCi1DaGFwdGVyIDQuIEZpbGVzIGluIFRoaXMgUGFja2FnZQotCi0gICBJbiB0aGUgcGFja2FnZSB5b3UgY2FuIGZpbmQgdGhlc2UgZmlsZXM6Ci0gICAKLSAgIHNpczkwMC5jCi0gICAgICAgICAgRHJpdmVyIHNvdXJjZSBmaWxlIGluIEMKLSAgICAgICAgICAKLSAgIHNpczkwMC5oCi0gICAgICAgICAgSGVhZGVyIGZpbGUgZm9yIHNpczkwMC5jCi0gICAgICAgICAgCi0gICBzaXM5MDAuc2dtbAotICAgICAgICAgIERvY0Jvb2sgU0dNTCBzb3VyY2Ugb2YgdGhlIGRvY3VtZW50Ci0gICAgICAgICAgCi0gICBzaXM5MDAudHh0Ci0gICAgICAgICAgRHJpdmVyIGRvY3VtZW50IGluIHBsYWluIHRleHQKLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgIAotQ2hhcHRlciA1LiBJbnN0YWxsYXRpb24KLQotICAgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbSBDb3JwLiBpcyBjb29wZXJhdGluZyBjbG9zZWx5IHdpdGggY29yZSBMaW51eAotICAgS2VybmVsIGRldmVsb3BlcnMuIFRoZSByZXZpc2lvbnMgb2YgU2lTIDkwMCBkcml2ZXIgYXJlIGRpc3RyaWJ1dGVkIGJ5Ci0gICB0aGUgdXN1YWxsIGNoYW5uZWxzIGZvciBrZXJuZWwgdGFyIGZpbGVzIGFuZCBwYXRjaGVzLiBUaG9zZSBrZXJuZWwgdGFyCi0gICBmaWxlcyBmb3Igb2ZmaWNpYWwga2VybmVsIGFuZCBwYXRjaGVzIGZvciBrZXJuZWwgcHJlLXJlbGVhc2UgY2FuIGJlCi0gICBkb3dubG9hZCBhdCBvZmZpY2lhbCBrZXJuZWwgZnRwIHNpdGUgYW5kIGl0cyBtaXJyb3JzLiBUaGUgMS4wNgotICAgcmV2aXNpb24gY2FuIGJlIGZvdW5kIGluIGtlcm5lbCB2ZXJzaW9uIGxhdGVyIHRoYW4gMi4zLjE1IGFuZAotICAgcHJlLTIuMi4xNCwgYW5kIDEuMDcgcmV2aXNpb24gY2FuIGJlIGZvdW5kIGluIGtlcm5lbCB2ZXJzaW9uIDIuNC4wLiBJZgotICAgeW91IGhhdmUgbm8gcHJpb3IgZXhwZXJpZW5jZSBpbiBuZXR3b3JraW5nIHVuZGVyIExpbnV4LCBwbGVhc2UgcmVhZAotICAgRXRoZXJuZXQgSE9XVE8gYW5kIE5ldHdvcmtpbmcgSE9XVE8gYXZhaWxhYmxlIGZyb20gTGludXggRG9jdW1lbnRhdGlvbgotICAgUHJvamVjdCAoTERQKS4KLSAgIAotICAgVGhlIGRyaXZlciBpcyBidW5kbGVkIGluIHJlbGVhc2UgbGF0ZXIgdGhhbiAyLjIuMTEgYW5kIDIuMy4xNSBzbyB0aGlzCi0gICBpcyB0aGUgbW9zdCBlYXN5IGNhc2UuIEJlIHN1cmUgeW91IGhhdmUgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2VzIGZvcgotICAgY29tcGlsaW5nIGtlcm5lbCBzb3VyY2UuIFRob3NlIHBhY2thZ2VzIGFyZSBsaXN0ZWQgaW4gRG9jdW1lbnQvQ2hhbmdlcwotICAgaW4ga2VybmVsIHNvdXJjZSBkaXN0cmlidXRpb24uIElmIHlvdSBoYXZlIHRvIGluc3RhbGwgdGhlIGRyaXZlciBvdGhlcgotICAgdGhhbiB0aG9zZSBidW5kbGVkIGluIGtlcm5lbCByZWxlYXNlLCB5b3Ugc2hvdWxkIGhhdmUgeW91ciBkcml2ZXIgZmlsZQotICAgc2lzOTAwLmMgYW5kIHNpczkwMC5oIGNvcGllZCBpbnRvIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0LyBmaXJzdC4KLSAgIFRoZXJlIGFyZSB0d28gYWx0ZXJuYXRpdmUgd2F5cyB0byBpbnN0YWxsIHRoZSBkcml2ZXIKLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgIAotQnVpbGRpbmcgdGhlIGRyaXZlciBhcyBsb2FkYWJsZSBtb2R1bGUKLQotICAgVG8gYnVpbGQgdGhlIGRyaXZlciBhcyBhIGxvYWRhYmxlIGtlcm5lbCBtb2R1bGUgeW91IGhhdmUgdG8KLSAgIHJlY29uZmlndXJlIHRoZSBrZXJuZWwgdG8gYWN0aXZhdGUgbmV0d29yayBzdXBwb3J0IGJ5Ci0gICAKLW1ha2UgbWVudWNvbmZpZwotCi0gICBDaG9vc2UgIkxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0IC0tLT4iLCB0aGVuIHNlbGVjdCAiRW5hYmxlIGxvYWRhYmxlCi0gICBtb2R1bGUgc3VwcG9ydCIuCi0gICAKLSAgIENob29zZSAiTmV0d29yayBEZXZpY2UgU3VwcG9ydCAtLS0+Iiwgc2VsZWN0ICJFdGhlcm5ldCAoMTAgb3IKLSAgIDEwME1iaXQpIi4gVGhlbiBzZWxlY3QgIkVJU0EsIFZMQiwgUENJIGFuZCBvbiBib2FyZCBjb250cm9sbGVycyIsIGFuZAotICAgY2hvb3NlICJTaVMgOTAwLzcwMTYgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBzdXBwb3J0IiB0byAiTSIuCi0gICAKLSAgIEFmdGVyIHJlY29uZmlndXJpbmcgdGhlIGtlcm5lbCwgeW91IGNhbiBtYWtlIHRoZSBkcml2ZXIgbW9kdWxlIGJ5Ci0gICAKLW1ha2UgbW9kdWxlcwotCi0gICBUaGUgZHJpdmVyIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIG5vIGVycm9ycy4gQWZ0ZXIgY29tcGlsaW5nIHRoZQotICAgZHJpdmVyLCB0aGUgZHJpdmVyIGNhbiBiZSBpbnN0YWxsZWQgdG8gcHJvcGVyIHBsYWNlIGJ5Ci0gICAKLW1ha2UgbW9kdWxlc19pbnN0YWxsCi0KLSAgIExvYWQgdGhlIGRyaXZlciBpbnRvIGtlcm5lbCBieQotICAgCi1pbnNtb2Qgc2lzOTAwCi0KLSAgIFdoZW4gbG9hZGluZyB0aGUgZHJpdmVyIGludG8gbWVtb3J5LCBzb21lIGluZm9ybWF0aW9uIG1lc3NhZ2UgY2FuIGJlCi0gICB2aWV3IGJ5Ci0gICAKLWRtZXNnCi0KLSAgIG9yCi1jYXQgL3Zhci9sb2cvbWVzc2FnZQotCi0gICBJZiB0aGUgZHJpdmVyIGlzIGxvYWRlZCBwcm9wZXJseSB5b3Ugd2lsbCBoYXZlIG1lc3NhZ2VzIHNpbWlsYXIgdG8KLSAgIHRoaXM6Ci0gICAKLXNpczkwMC5jOiB2MS4wNy4wNiAgMTEvMDcvMjAwMAotZXRoMDogU2lTIDkwMCBQQ0kgRmFzdCBFdGhlcm5ldCBhdCAweGQwMDAsIElSUSAxMCwgMDA6MDA6ZTg6ODM6N2Y6YTQuCi1ldGgwOiBTaVMgOTAwIEludGVybmFsIE1JSSBQSFkgdHJhbnNjZWl2ZXIgZm91bmQgYXQgYWRkcmVzcyAxLgotZXRoMDogVXNpbmcgU2lTIDkwMCBJbnRlcm5hbCBNSUkgUEhZIGFzIGRlZmF1bHQKLQotICAgc2hvd2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGFuZCB0aGUgcmVzdWx0cyBvZiBwcm9iaW5nIHJvdXRpbmUuCi0gICAKLSAgIE9uY2UgdGhlIGRyaXZlciBpcyBsb2FkZWQsIG5ldHdvcmsgY2FuIGJlIGJyb3VnaHQgdXAgYnkKLSAgIAotL3NiaW4vaWZjb25maWcgZXRoMCBJUEFERFIgYnJvYWRjYXN0IEJST0FEQ0FTVCBuZXRtYXNrIE5FVE1BU0sgbWVkaWEgVFlQRQotCi0gICB3aGVyZSBJUEFERFIsIEJST0FEQ0FTVCwgTkVUTUFTSyBhcmUgeW91ciBJUCBhZGRyZXNzLCBicm9hZGNhc3QKLSAgIGFkZHJlc3MgYW5kIG5ldG1hc2sgcmVzcGVjdGl2ZWx5LiBUWVBFIGlzIHVzZWQgdG8gc2V0IG1lZGl1bSB0eXBlIHVzZWQKLSAgIGJ5IHRoZSBkZXZpY2UuIFR5cGljYWwgdmFsdWVzIGFyZSAiMTBiYXNlVCIodHdpc3RlZC1wYWlyIDEwTWJwcwotICAgRXRoZXJuZXQpIG9yICIxMDBiYXNlVCIgKHR3aXN0ZWQtcGFpciAxMDBNYnBzIEV0aGVybmV0KS4gRm9yIG1vcmUKLSAgIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2UsIHBsZWFzZSByZWZlciB0bwotICAgTmV0d29ya2luZyBIT1dUTy4KLSAgIAotICAgVGhlIGxpbmsgc3RhdHVzIGlzIGFsc28gc2hvd24gYnkga2VybmVsIG1lc3NhZ2VzLiBGb3IgZXhhbXBsZSwgYWZ0ZXIKLSAgIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBhY3RpdmF0ZWQsIHlvdSBtYXkgaGF2ZSB0aGUgbWVzc2FnZToKLSAgIAotZXRoMDogTWVkaWEgTGluayBPbiAxMDBtYnBzIGZ1bGwtZHVwbGV4Ci0KLSAgIElmIHlvdSB0cnkgdG8gdW5wbHVnIHRoZSB0d2lzdCBwYWlyIChUUCkgY2FibGUgeW91IHdpbGwgZ2V0Ci0gICAKLWV0aDA6IE1lZGlhIExpbmsgT2ZmCi0KLSAgIGluZGljYXRpbmcgdGhhdCB0aGUgbGluayBpcyBmYWlsZWQuCi0gICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi0gICAKLUJ1aWxkaW5nIHRoZSBkcml2ZXIgaW50byBrZXJuZWwKLQotICAgSWYgeW91IHdhbnQgdG8gbWFrZSB0aGUgZHJpdmVyIGludG8ga2VybmVsLCBjaG9vc2UgIlkiIHJhdGhlciB0aGFuICJNIgotICAgb24gIlNpUyA5MDAvNzAxNiBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIHN1cHBvcnQiIHdoZW4gY29uZmlndXJpbmcKLSAgIHRoZSBrZXJuZWwuIEJ1aWxkIHRoZSBrZXJuZWwgaW1hZ2UgaW4gdGhlIHVzdWFsIHdheQotICAgCi1tYWtlIGNsZWFuCi0KLW1ha2UgYnpsaWxvCi0KLSAgIE5leHQgdGltZSB0aGUgc3lzdGVtIHJlYm9vdCwgeW91IGhhdmUgdGhlIGRyaXZlciBpbiBtZW1vcnkuCi0gICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCi0gICAKLUNoYXB0ZXIgNi4gS25vd24gUHJvYmxlbXMgYW5kIEJ1Z3MKLQotICAgVGhlcmUgYXJlIHNvbWUga25vd24gcHJvYmxlbXMgYW5kIGJ1Z3MuIElmIHlvdSBmaW5kIGFueSBvdGhlciBidWdzCi0gICBwbGVhc2UgbWFpbCB0byBsY2NoYW5nQHNpcy5jb20udHcKLSAgIAotICAgIDEuIEFNNzlDOTAxIEhvbWVQTkEgUEhZIGlzIG5vdCB0aG9yb3VnaGx5IHRlc3RlZCwgdGhlcmUgbWF5IGJlIHNvbWUKLSAgICAgICBidWdzIGluIHRoZSAib24gdGhlIGZseSIgY2hhbmdlIG9mIHRyYW5zY2VpdmVyLgotICAgIDIuIEEgYnVnIGlzIGhpZGRlbiBzb21ld2hlcmUgaW4gdGhlIHJlY2VpdmUgYnVmZmVyIG1hbmFnZW1lbnQgY29kZSwKLSAgICAgICB0aGUgYnVnIGNhdXNlcyBOVUxMIHBvaW50ZXIgcmVmZXJlbmNlIGluIHRoZSBrZXJuZWwuIFRoaXMgZmF1bHQgaXMKLSAgICAgICBjYXVnaHQgYmVmb3JlIGJhZCB0aGluZ3MgaGFwcGVuIGFuZCByZXBvcnRlZCB3aXRoIHRoZSBtZXNzYWdlOgotICAgICAgIGV0aDA6IE5VTEwgcG9pbnRlciBlbmNvdW50ZXJlZCBpbiBSeCByaW5nLCBza2lwcGluZyB3aGljaCBjYW4gYmUKLSAgICAgICB2aWV3ZWQgd2l0aCBkbWVzZyBvciBjYXQgL3Zhci9sb2cvbWVzc2FnZS4KLSAgICAzLiBUaGUgbWVkaWEgdHlwZSBjaGFuZ2UgZnJvbSAxME1icHMgdG8gMTAwTWJwcyB0d2lzdGVkLXBhaXIgZXRoZXJuZXQKLSAgICAgICBieSBpZmNvbmZpZyBjYXVzZXMgdGhlIG1lZGlhIGxpbmsgZG93bi4KLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgIAotQ2hhcHRlciA3LiBSZXZpc2lvbiBIaXN0b3J5Ci0KLSAgICAgKiBOb3ZlbWJlciAxMywgMjAwMCwgUmV2aXNpb24gMS4wNywgc2V2ZW50aCByZWxlYXNlLCA2MzBFIHByb2JsZW0KLSAgICAgICBmaXhlZCBhbmQgZnVydGhlciBjbGVhbiB1cC4KLSAgICAgKiBOb3ZlbWJlciA0LCAxOTk5LCBSZXZpc2lvbiAxLjA2LCBTZWNvbmQgcmVsZWFzZSwgbG90cyBvZiBjbGVhbiB1cAotICAgICAgIGFuZCBvcHRpbWl6YXRpb24uCi0gICAgICogQXVndXN0IDgsIDE5OTksIFJldmlzaW9uIDEuMDUsIEluaXRpYWwgUHVibGljIFJlbGVhc2UKLSAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgIAotQ2hhcHRlciA4LiBBY2tub3dsZWRnZW1lbnRzCi0KLSAgIFRoaXMgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IGRlcml2ZWQgZm9ybSBEb25hbGQgQmVja2VyJ3MgcGNpLXNrZWxldG9uCi0gICBhbmQgcnRsODEzOSBkcml2ZXJzLiBEb25hbGQgYWxzbyBwcm92aWRlZCB2YXJpb3VzIHN1Z2dlc3Rpb24gcmVnYXJkZWQKLSAgIHdpdGggaW1wcm92ZW1lbnRzIG1hZGUgaW4gcmV2aXNpb24gMS4wNi4KLSAgIAotICAgVGhlIDEuMDUgcmV2aXNpb24gd2FzIGNyZWF0ZWQgYnkgSmltIEh1YW5nLCBBTUQgNzljOTAxIHN1cHBvcnQgd2FzCi0gICBhZGRlZCBieSBDaGluLVNoYW4gTGkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25mc3Jvb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9uZnNyb290LnR4dAppbmRleCBhODdkNGFmLi5kNTZkYzcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25mc3Jvb3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmZzcm9vdC50eHQKQEAgLTMsNiArMyw3IEBACiAKIFdyaXR0ZW4gMTk5NiBieSBHZXJvIEt1aGxtYW5uIDxnZXJvQGdrbWluaXguaGFuLmRlPgogVXBkYXRlZCAxOTk3IGJ5IE1hcnRpbiBNYXJlcyA8bWpAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PgorVXBkYXRlZCAyMDA2IGJ5IE5pY28gU2Nob3R0ZWxpdXMgPG5pY28ta2VybmVsLW5mc3Jvb3RAc2Nob3R0ZWxpdXMub3JnPgogCiAKIApAQCAtMTY4LDcgKzE2OSw2IEBACiAJcm9vdC4gSWYgaXQgZ290IGEgQk9PVFAgYW5zd2VyIHRoZSBkaXJlY3RvcnkgbmFtZSBpbiB0aGF0IGFuc3dlcgogCWlzIHVzZWQuCiAKLQogMy4yKSBVc2luZyBMSUxPCiAJV2hlbiB1c2luZyBMSUxPIHlvdSBjYW4gc3BlY2lmeSBhbGwgbmVjZXNzYXJ5IGNvbW1hbmQgbGluZQogCXBhcmFtZXRlcnMgd2l0aCB0aGUgJ2FwcGVuZD0nIGNvbW1hbmQgaW4gdGhlIExJTE8gY29uZmlndXJhdGlvbgpAQCAtMTc3LDcgKzE3NywxMSBAQAogCUxJTE8gYW5kIGl0cyAnYXBwZW5kPScgY29tbWFuZCBwbGVhc2UgcmVmZXIgdG8gdGhlIExJTE8KIAlkb2N1bWVudGF0aW9uLgogCi0zLjMpIFVzaW5nIGxvYWRsaW4KKzMuMykgVXNpbmcgR1JVQgorCVdoZW4geW91IHVzZSBHUlVCLCB5b3Ugc2ltcGx5IGFwcGVuZCB0aGUgcGFyYW1ldGVycyBhZnRlciB0aGUga2VybmVsCisJc3BlY2lmaWNhdGlvbjogImtlcm5lbCA8a2VybmVsPiA8cGFyYW1ldGVycz4iICh3aXRob3V0IHRoZSBxdW90ZXMpLgorCiszLjQpIFVzaW5nIGxvYWRsaW4KIAlXaGVuIHlvdSB3YW50IHRvIGJvb3QgTGludXggZnJvbSBhIERPUyBjb21tYW5kIHByb21wdCB3aXRob3V0CiAJaGF2aW5nIGEgbG9jYWwgaGFyZCBkaXNrIHRvIG1vdW50IGFzIHJvb3QsIHlvdSBjYW4gdXNlIGxvYWRsaW4uCiAJSSB3YXMgdG9sZCB0aGF0IGl0IHdvcmtzLCBidXQgaGF2ZW4ndCB1c2VkIGl0IG15c2VsZiB5ZXQuIEluCkBAIC0xODUsNyArMTg5LDcgQEAKIAlsYXIgdG8gaG93IExJTE8gaXMgZG9pbmcgaXQuIFBsZWFzZSByZWZlciB0byB0aGUgbG9hZGxpbiBkb2N1LQogCW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KIAotMy40KSBVc2luZyBhIGJvb3QgUk9NCiszLjUpIFVzaW5nIGEgYm9vdCBST00KIAlUaGlzIGlzIHByb2JhYmx5IHRoZSBtb3N0IGVsZWdhbnQgd2F5IG9mIGJvb3RpbmcgYSBkaXNrbGVzcwogCWNsaWVudC4gV2l0aCBhIGJvb3QgUk9NIHRoZSBrZXJuZWwgZ2V0cyBsb2FkZWQgdXNpbmcgdGhlIFRGVFAKIAlwcm90b2NvbC4gQXMgZmFyIGFzIEkga25vdywgbm8gY29tbWVyY2lhbCBib290IFJPTXMgeWV0CkBAIC0xOTQsNiArMTk4LDEzIEBACiAJYW5kIGl0cyBtaXJyb3JzLiBUaGV5IGFyZSBjYWxsZWQgJ25ldGJvb3QtbmZzJyBhbmQgJ2V0aGVyYm9vdCcuCiAJQm90aCBjb250YWluIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8gYm9vdCBhIGRpc2tsZXNzIExpbnV4IGNsaWVudC4KIAorMy42KSBVc2luZyBweGVsaW51eAorCVVzaW5nIHB4ZWxpbnV4IHlvdSBzcGVjaWZ5IHRoZSBrZXJuZWwgeW91IGJ1aWx0IHdpdGgKKwkia2VybmVsIDxyZWxhdGl2ZS1wYXRoLWJlbG93IC90ZnRwYm9vdD4iLiBUaGUgbmZzcm9vdCBwYXJhbWV0ZXJzCisJYXJlIHBhc3NlZCB0byB0aGUga2VybmVsIGJ5IGFkZGluZyB0aGVtIHRvIHRoZSAiYXBwZW5kIiBsaW5lLgorCVlvdSBtYXkgcGVyaGFwcyBhbHNvIHdhbnQgdG8gZmluZSB0dW5lIHRoZSBjb25zb2xlIG91dHB1dCwKKwlzZWUgRG9jdW1lbnRhdGlvbi9zZXJpYWwtY29uc29sZS50eHQgZm9yIHNlcmlhbCBjb25zb2xlIGhlbHAuCisKIAogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dAppbmRleCBiMjhiN2YwLi5kNzgxNGExMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dApAQCAtMTcsNiArMTcsMTEgQEAKICAqIGJ1dCBpdCB3aWxsIHByb2JhYmx5IG9ubHkgY3Jhc2guCiAgKgogICogKCopIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgaXMgbmVlZGVkIHRvIG1ha2UgaXQgc2FmZS4KKyAqCisgKiBJZiB5b3UgaGF2ZSBhbnkgZmlsZXN5c3RlbXMgb24gVVNCIGRldmljZXMgbW91bnRlZCBiZWZvcmUgc3VzcGVuZCwKKyAqIHRoZXkgd29uJ3QgYmUgYWNjZXNzaWJsZSBhZnRlciByZXN1bWUgYW5kIHlvdSBtYXkgbG9zZSBkYXRhLCBhcyB0aG91Z2gKKyAqIHlvdSBoYXZlIHVucGx1Z2dlZCB0aGUgVVNCIGRldmljZXMgd2l0aCBtb3VudGVkIGZpbGVzeXN0ZW1zIG9uIHRoZW0KKyAqIChzZWUgdGhlIEZBUSBiZWxvdyBmb3IgZGV0YWlscykuCiAKIFlvdSBuZWVkIHRvIGFwcGVuZCByZXN1bWU9L2Rldi95b3VyX3N3YXBfcGFydGl0aW9uIHRvIGtlcm5lbCBjb21tYW5kCiBsaW5lLiBUaGVuIHlvdSBzdXNwZW5kIGJ5CkBAIC0yNywxOSArMzIsMTggQEAKIAogZWNobyBwbGF0Zm9ybSA+IC9zeXMvcG93ZXIvZGlzazsgZWNobyBkaXNrID4gL3N5cy9wb3dlci9zdGF0ZQogCisuIElmIHlvdSBoYXZlIFNBVEEgZGlza3MsIHlvdSdsbCBuZWVkIHJlY2VudCBrZXJuZWxzIHdpdGggU0FUQSBzdXNwZW5kCitzdXBwb3J0LiBGb3Igc3VzcGVuZCBhbmQgcmVzdW1lIHRvIHdvcmssIG1ha2Ugc3VyZSB5b3VyIGRpc2sgZHJpdmVycworYXJlIGJ1aWx0IGludG8ga2VybmVsIC0tIG5vdCBtb2R1bGVzLiBbVGhlcmUncyB3YXkgdG8gbWFrZQorc3VzcGVuZC9yZXN1bWUgd2l0aCBtb2R1bGFyIGRpc2sgZHJpdmVycywgc2VlIEZBUSwgYnV0IHlvdSBwcm9iYWJseQorc2hvdWxkIG5vdCBkbyB0aGF0Ll0KKwogSWYgeW91IHdhbnQgdG8gbGltaXQgdGhlIHN1c3BlbmQgaW1hZ2Ugc2l6ZSB0byBOIGJ5dGVzLCBkbwogCiBlY2hvIE4gPiAvc3lzL3Bvd2VyL2ltYWdlX3NpemUKIAogYmVmb3JlIHN1c3BlbmQgKGl0IGlzIGxpbWl0ZWQgdG8gNTAwIE1CIGJ5IGRlZmF1bHQpLgogCi1FbmNyeXB0ZWQgc3VzcGVuZCBpbWFnZToKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSWYgeW91IHdhbnQgdG8gc3RvcmUgeW91ciBzdXNwZW5kIGltYWdlIGVuY3J5cHRlZCB3aXRoIGEgdGVtcG9yYXJ5Ci1rZXkgdG8gcHJldmVudCBkYXRhIGdhdGhlcmluZyBhZnRlciByZXN1bWUgeW91IG11c3QgY29tcGlsZQotY3J5cHRvIGFuZCB0aGUgYWVzIGFsZ29yaXRobSBpbnRvIHRoZSBrZXJuZWwgLSBtb2R1bGVzIHdvbid0IHdvcmsKLWFzIHRoZXkgY2Fubm90IGJlIGxvYWRlZCBhdCByZXN1bWUgdGltZS4KLQogCiBBcnRpY2xlIGFib3V0IGdvYWxzIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBTb2Z0d2FyZSBTdXNwZW5kIGZvciBMaW51eAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTMzMyw0ICszMzcsMzcgQEAKIHVzdWFsbHkgZG9lcyB0aGUgdHJpY2suIFRoZW4gaXQgaXMgZ29vZCBpZGVhIHRvIHRyeSB3aXRoIGxhdGVzdAogdmFuaWxsYSBrZXJuZWwuCiAKK1E6IEhvdyBjYW4gZGlzdHJpYnV0aW9ucyBzaGlwIGEgc3dzdXNwLXN1cHBvcnRpbmcga2VybmVsIHdpdGggbW9kdWxhcgorZGlzayBkcml2ZXJzIChlc3BlY2lhbGx5IFNBVEEpPworCitBOiBXZWxsLCBpdCBjYW4gYmUgZG9uZSwgbG9hZCB0aGUgZHJpdmVycywgdGhlbiBkbyBlY2hvIGludG8KKy9zeXMvcG93ZXIvZGlzay9yZXN1bWUgZmlsZSBmcm9tIGluaXRyZC4gQmUgc3VyZSBub3QgdG8gbW91bnQKK2FueXRoaW5nLCBub3QgZXZlbiByZWFkLW9ubHkgbW91bnQsIG9yIHlvdSBhcmUgZ29pbmcgdG8gbG9zZSB5b3VyCitkYXRhLgorCitROiBIb3cgZG8gSSBtYWtlIHN1c3BlbmQgbW9yZSB2ZXJib3NlPworCitBOiBJZiB5b3Ugd2FudCB0byBzZWUgYW55IG5vbi1lcnJvciBrZXJuZWwgbWVzc2FnZXMgb24gdGhlIHZpcnR1YWwKK3Rlcm1pbmFsIHRoZSBrZXJuZWwgc3dpdGNoZXMgdG8gZHVyaW5nIHN1c3BlbmQsIHlvdSBoYXZlIHRvIHNldCB0aGUKK2tlcm5lbCBjb25zb2xlIGxvZ2xldmVsIHRvIGF0IGxlYXN0IDUsIGZvciBleGFtcGxlIGJ5IGRvaW5nCisKKwllY2hvIDUgPiAvcHJvYy9zeXMva2VybmVsL3ByaW50aworCitROiBJcyB0aGlzIHRydWUgdGhhdCBpZiBJIGhhdmUgYSBtb3VudGVkIGZpbGVzeXN0ZW0gb24gYSBVU0IgZGV2aWNlIGFuZAorSSBzdXNwZW5kIHRvIGRpc2ssIEkgY2FuIGxvc2UgZGF0YSB1bmxlc3MgdGhlIGZpbGVzeXN0ZW0gaGFzIGJlZW4gbW91bnRlZAord2l0aCAic3luYyI/CisKK0E6IFRoYXQncyByaWdodC4gIEl0IGRlcGVuZHMgb24geW91ciBoYXJkd2FyZSwgYW5kIGl0IGNvdWxkIGJlIHRydWUgZXZlbiBmb3IKK3N1c3BlbmQtdG8tUkFNLiAgSW4gZmFjdCwgZXZlbiB3aXRoICItbyBzeW5jIiB5b3UgY2FuIGxvc2UgZGF0YSBpZiB5b3VyCitwcm9ncmFtcyBoYXZlIGluZm9ybWF0aW9uIGluIGJ1ZmZlcnMgdGhleSBoYXZlbid0IHdyaXR0ZW4gb3V0IHRvIGRpc2suCisKK0lmIHlvdSdyZSBsdWNreSwgeW91ciBoYXJkd2FyZSB3aWxsIHN1cHBvcnQgbG93LXBvd2VyIG1vZGVzIGZvciBVU0IKK2NvbnRyb2xsZXJzIHdoaWxlIHRoZSBzeXN0ZW0gaXMgYXNsZWVwLiAgTG90cyBvZiBoYXJkd2FyZSBkb2Vzbid0LAoraG93ZXZlci4gIFNodXR0aW5nIG9mZiB0aGUgcG93ZXIgdG8gYSBVU0IgY29udHJvbGxlciBpcyBlcXVpdmFsZW50IHRvCit1bnBsdWdnaW5nIGFsbCB0aGUgYXR0YWNoZWQgZGV2aWNlcy4KKworUmVtZW1iZXIgdGhhdCBpdCdzIGFsd2F5cyBhIGJhZCBpZGVhIHRvIHVucGx1ZyBhIGRpc2sgZHJpdmUgY29udGFpbmluZyBhCittb3VudGVkIGZpbGVzeXN0ZW0uICBXaXRoIFVTQiB0aGF0J3MgdHJ1ZSBldmVuIHdoZW4geW91ciBzeXN0ZW0gaXMgYXNsZWVwIQorVGhlIHNhZmVzdCB0aGluZyBpcyB0byB1bm1vdW50IGFsbCBVU0ItYmFzZWQgZmlsZXN5c3RlbXMgYmVmb3JlIHN1c3BlbmRpbmcKK2FuZCByZW1vdW50IHRoZW0gYWZ0ZXIgcmVzdW1pbmcuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvdXNlcmxhbmQtc3dzdXNwLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvdXNlcmxhbmQtc3dzdXNwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDA1ODIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci91c2VybGFuZC1zd3N1c3AudHh0CkBAIC0wLDAgKzEsMTQ5IEBACitEb2N1bWVudGF0aW9uIGZvciB1c2VybGFuZCBzb2Z0d2FyZSBzdXNwZW5kIGludGVyZmFjZQorCShDKSAyMDA2IFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KKworRmlyc3QsIHRoZSB3YXJuaW5ncyBhdCB0aGUgYmVnaW5uaW5nIG9mIHN3c3VzcC50eHQgc3RpbGwgYXBwbHkuCisKK1NlY29uZCwgeW91IHNob3VsZCByZWFkIHRoZSBGQVEgaW4gc3dzdXNwLnR4dCBfbm93XyBpZiB5b3UgaGF2ZSBub3QKK2RvbmUgaXQgYWxyZWFkeS4KKworTm93LCB0byB1c2UgdGhlIHVzZXJsYW5kIGludGVyZmFjZSBmb3Igc29mdHdhcmUgc3VzcGVuZCB5b3UgbmVlZCBzcGVjaWFsCit1dGlsaXRpZXMgdGhhdCB3aWxsIHJlYWQvd3JpdGUgdGhlIHN5c3RlbSBtZW1vcnkgc25hcHNob3QgZnJvbS90byB0aGUKK2tlcm5lbC4gIFN1Y2ggdXRpbGl0aWVzIGFyZSBhdmFpbGFibGUsIGZvciBleGFtcGxlLCBmcm9tCis8aHR0cDovL3d3dy5zaXNrLnBsL2tlcm5lbC91dGlsaXRpZXMvc3VzcGVuZD4uICBZb3UgbWF5IHdhbnQgdG8gaGF2ZQorYSBsb29rIGF0IHRoZW0gaWYgeW91IGFyZSBnb2luZyB0byBkZXZlbG9wIHlvdXIgb3duIHN1c3BlbmQvcmVzdW1lCit1dGlsaXRpZXMuCisKK1RoZSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgYSBjaGFyYWN0ZXIgZGV2aWNlIHByb3ZpZGluZyB0aGUgb3BlbigpLAorcmVsZWFzZSgpLCByZWFkKCksIGFuZCB3cml0ZSgpIG9wZXJhdGlvbnMgYXMgd2VsbCBhcyBzZXZlcmFsIGlvY3RsKCkKK2NvbW1hbmRzIGRlZmluZWQgaW4ga2VybmVsL3Bvd2VyL3Bvd2VyLmguICBUaGUgbWFqb3IgYW5kIG1pbm9yCitudW1iZXJzIG9mIHRoZSBkZXZpY2UgYXJlLCByZXNwZWN0aXZlbHksIDEwIGFuZCAyMzEsIGFuZCB0aGV5IGNhbgorYmUgcmVhZCBmcm9tIC9zeXMvY2xhc3MvbWlzYy9zbmFwc2hvdC9kZXYuCisKK1RoZSBkZXZpY2UgY2FuIGJlIG9wZW4gZWl0aGVyIGZvciByZWFkaW5nIG9yIGZvciB3cml0aW5nLiAgSWYgb3BlbiBmb3IKK3JlYWRpbmcsIGl0IGlzIGNvbnNpZGVyZWQgdG8gYmUgaW4gdGhlIHN1c3BlbmQgbW9kZS4gIE90aGVyd2lzZSBpdCBpcworYXNzdW1lZCB0byBiZSBpbiB0aGUgcmVzdW1lIG1vZGUuICBUaGUgZGV2aWNlIGNhbm5vdCBiZSBvcGVuIGZvciByZWFkaW5nCithbmQgd3JpdGluZy4gIEl0IGlzIGFsc28gaW1wb3NzaWJsZSB0byBoYXZlIHRoZSBkZXZpY2Ugb3BlbiBtb3JlIHRoYW4gb25jZQorYXQgYSB0aW1lLgorCitUaGUgaW9jdGwoKSBjb21tYW5kcyByZWNvZ25pemVkIGJ5IHRoZSBkZXZpY2UgYXJlOgorCitTTkFQU0hPVF9GUkVFWkUgLSBmcmVlemUgdXNlciBzcGFjZSBwcm9jZXNzZXMgKHRoZSBjdXJyZW50IHByb2Nlc3MgaXMKKwlub3QgZnJvemVuKTsgdGhpcyBpcyByZXF1aXJlZCBmb3IgU05BUFNIT1RfQVRPTUlDX1NOQVBTSE9UCisJYW5kIFNOQVBTSE9UX0FUT01JQ19SRVNUT1JFIHRvIHN1Y2NlZWQKKworU05BUFNIT1RfVU5GUkVFWkUgLSB0aGF3IHVzZXIgc3BhY2UgcHJvY2Vzc2VzIGZyb3plbiBieSBTTkFQU0hPVF9GUkVFWkUKKworU05BUFNIT1RfQVRPTUlDX1NOQVBTSE9UIC0gY3JlYXRlIGEgc25hcHNob3Qgb2YgdGhlIHN5c3RlbSBtZW1vcnk7IHRoZQorCWxhc3QgYXJndW1lbnQgb2YgaW9jdGwoKSBzaG91bGQgYmUgYSBwb2ludGVyIHRvIGFuIGludCB2YXJpYWJsZSwKKwl0aGUgdmFsdWUgb2Ygd2hpY2ggd2lsbCBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBjYWxsIHJldHVybmVkIGFmdGVyCisJY3JlYXRpbmcgdGhlIHNuYXBzaG90ICgxKSBvciBhZnRlciByZXN0b3JpbmcgdGhlIHN5c3RlbSBtZW1vcnkgc3RhdGUKKwlmcm9tIGl0ICgwKSAoYWZ0ZXIgcmVzdW1lIHRoZSBzeXN0ZW0gZmluZHMgaXRzZWxmIGZpbmlzaGluZyB0aGUKKwlTTkFQU0hPVF9BVE9NSUNfU05BUFNIT1QgaW9jdGwoKSBhZ2Fpbik7IGFmdGVyIHRoZSBzbmFwc2hvdAorCWhhcyBiZWVuIGNyZWF0ZWQgdGhlIHJlYWQoKSBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gdHJhbnNmZXIKKwlpdCBvdXQgb2YgdGhlIGtlcm5lbAorCitTTkFQU0hPVF9BVE9NSUNfUkVTVE9SRSAtIHJlc3RvcmUgdGhlIHN5c3RlbSBtZW1vcnkgc3RhdGUgZnJvbSB0aGUKKwl1cGxvYWRlZCBzbmFwc2hvdCBpbWFnZTsgYmVmb3JlIGNhbGxpbmcgaXQgeW91IHNob3VsZCB0cmFuc2ZlcgorCXRoZSBzeXN0ZW0gbWVtb3J5IHNuYXBzaG90IGJhY2sgdG8gdGhlIGtlcm5lbCB1c2luZyB0aGUgd3JpdGUoKQorCW9wZXJhdGlvbjsgdGhpcyBjYWxsIHdpbGwgbm90IHN1Y2NlZWQgaWYgdGhlIHNuYXBzaG90CisJaW1hZ2UgaXMgbm90IGF2YWlsYWJsZSB0byB0aGUga2VybmVsCisKK1NOQVBTSE9UX0ZSRUUgLSBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBzbmFwc2hvdCBpbWFnZQorCitTTkFQU0hPVF9TRVRfSU1BR0VfU0laRSAtIHNldCB0aGUgcHJlZmVycmVkIG1heGltdW0gc2l6ZSBvZiB0aGUgaW1hZ2UKKwkodGhlIGtlcm5lbCB3aWxsIGRvIGl0cyBiZXN0IHRvIGVuc3VyZSB0aGUgaW1hZ2Ugc2l6ZSB3aWxsIG5vdCBleGNlZWQKKwl0aGlzIG51bWJlciwgYnV0IGlmIGl0IHR1cm5zIG91dCB0byBiZSBpbXBvc3NpYmxlLCB0aGUga2VybmVsIHdpbGwKKwljcmVhdGUgdGhlIHNtYWxsZXN0IGltYWdlIHBvc3NpYmxlKQorCitTTkFQU0hPVF9BVkFJTF9TV0FQIC0gcmV0dXJuIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIHN3YXAgaW4gYnl0ZXMgKHRoZSBsYXN0CisJYXJndW1lbnQgc2hvdWxkIGJlIGEgcG9pbnRlciB0byBhbiB1bnNpZ25lZCBpbnQgdmFyaWFibGUgdGhhdCB3aWxsCisJY29udGFpbiB0aGUgcmVzdWx0IGlmIHRoZSBjYWxsIGlzIHN1Y2Nlc3NmdWwpLgorCitTTkFQU0hPVF9HRVRfU1dBUF9QQUdFIC0gYWxsb2NhdGUgYSBzd2FwIHBhZ2UgZnJvbSB0aGUgcmVzdW1lIHBhcnRpdGlvbgorCSh0aGUgbGFzdCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb2ludGVyIHRvIGEgbG9mZl90IHZhcmlhYmxlIHRoYXQKKwl3aWxsIGNvbnRhaW4gdGhlIHN3YXAgcGFnZSBvZmZzZXQgaWYgdGhlIGNhbGwgaXMgc3VjY2Vzc2Z1bCkKKworU05BUFNIT1RfRlJFRV9TV0FQX1BBR0VTIC0gZnJlZSBhbGwgc3dhcCBwYWdlcyBhbGxvY2F0ZWQgd2l0aAorCVNOQVBTSE9UX0dFVF9TV0FQX1BBR0UKKworU05BUFNIT1RfU0VUX1NXQVBfRklMRSAtIHNldCB0aGUgcmVzdW1lIHBhcnRpdGlvbiAodGhlIGxhc3QgaW9jdGwoKSBhcmd1bWVudAorCXNob3VsZCBzcGVjaWZ5IHRoZSBkZXZpY2UncyBtYWpvciBhbmQgbWlub3IgbnVtYmVycyBpbiB0aGUgb2xkCisJdHdvLWJ5dGUgZm9ybWF0LCBhcyByZXR1cm5lZCBieSB0aGUgc3RhdCgpIGZ1bmN0aW9uIGluIHRoZSAuc3RfcmRldgorCW1lbWJlciBvZiB0aGUgc3RhdCBzdHJ1Y3R1cmUpOyBpdCBpcyByZWNvbW1lbmRlZCB0byBhbHdheXMgdXNlIHRoaXMKKwljYWxsLCBiZWNhdXNlIHRoZSBjb2RlIHRvIHNldCB0aGUgcmVzdW1lIHBhcnRpdGlvbiBjb3VsZCBiZSByZW1vdmVkIGZyb20KKwlmdXR1cmUga2VybmVscworCitUaGUgZGV2aWNlJ3MgcmVhZCgpIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCB0byB0cmFuc2ZlciB0aGUgc25hcHNob3QgaW1hZ2UgZnJvbQordGhlIGtlcm5lbC4gIEl0IGhhcyB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOgorLSB5b3UgY2Fubm90IHJlYWQoKSBtb3JlIHRoYW4gb25lIHZpcnR1YWwgbWVtb3J5IHBhZ2UgYXQgYSB0aW1lCistIHJlYWQoKXMgYWNjcm9zcyBwYWdlIGJvdW5kYXJpZXMgYXJlIGltcG9zc2libGUgKGllLiBpZiB5cHUgcmVhZCgpIDEvMiBvZgorCWEgcGFnZSBpbiB0aGUgcHJldmlvdXMgY2FsbCwgeW91IHdpbGwgb25seSBiZSBhYmxlIHRvIHJlYWQoKQorCV9hdF8gX21vc3RfIDEvMiBvZiB0aGUgcGFnZSBpbiB0aGUgbmV4dCBjYWxsKQorCitUaGUgZGV2aWNlJ3Mgd3JpdGUoKSBvcGVyYXRpb24gaXMgdXNlZCBmb3IgdXBsb2FkaW5nIHRoZSBzeXN0ZW0gbWVtb3J5IHNuYXBzaG90CitpbnRvIHRoZSBrZXJuZWwuICBJdCBoYXMgdGhlIHNhbWUgbGltaXRhdGlvbnMgYXMgdGhlIHJlYWQoKSBvcGVyYXRpb24uCisKK1RoZSByZWxlYXNlKCkgb3BlcmF0aW9uIGZyZWVzIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgc25hcHNob3QgaW1hZ2UKK2FuZCBhbGwgc3dhcCBwYWdlcyBhbGxvY2F0ZWQgd2l0aCBTTkFQU0hPVF9HRVRfU1dBUF9QQUdFIChpZiBhbnkpLgorVGh1cyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHVzZSBlaXRoZXIgU05BUFNIT1RfRlJFRSBvcgorU05BUFNIT1RfRlJFRV9TV0FQX1BBR0VTIGJlZm9yZSBjbG9zaW5nIHRoZSBkZXZpY2UgKGluIGZhY3QgaXQgd2lsbCBhbHNvCit1bmZyZWV6ZSB1c2VyIHNwYWNlIHByb2Nlc3NlcyBmcm96ZW4gYnkgU05BUFNIT1RfVU5GUkVFWkUgaWYgdGhleSBhcmUKK3N0aWxsIGZyb3plbiB3aGVuIHRoZSBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkKS4KKworQ3VycmVudGx5IGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgdXNlcmxhbmQgdXRpbGl0aWVzIHJlYWRpbmcvd3JpdGluZyB0aGUKK3NuYXBzaG90IGltYWdlIGZyb20vdG8gdGhlIGtlcm5lbCB3aWxsIHVzZSBhIHN3YXAgcGFyaXRpb24sIGNhbGxlZCB0aGUgcmVzdW1lCitwYXJ0aXRpb24sIGFzIHN0b3JhZ2Ugc3BhY2UuICBIb3dldmVyLCB0aGlzIGlzIG5vdCByZWFsbHkgcmVxdWlyZWQsIGFzIHRoZXkKK2NhbiB1c2UsIGZvciBleGFtcGxlLCBhIHNwZWNpYWwgKGJsYW5rKSBzdXNwZW5kIHBhcnRpdGlvbiBvciBhIGZpbGUgb24gYSBwYXJ0aXRpb24KK3RoYXQgaXMgdW5tb3VudGVkIGJlZm9yZSBTTkFQU0hPVF9BVE9NSUNfU05BUFNIT1QgYW5kIG1vdW50ZWQgYWZ0ZXJ3YXJkcy4KKworVGhlc2UgdXRpbGl0aWVzIFNIT1VMRCBOT1QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgcmVnYXJkaW5nIHRoZSBvcmRlcmluZyBvZgorZGF0YSB3aXRoaW4gdGhlIHNuYXBzaG90IGltYWdlLCBleGNlcHQgZm9yIHRoZSBpbWFnZSBoZWFkZXIgdGhhdCBNQVkgYmUKK2Fzc3VtZWQgdG8gc3RhcnQgd2l0aCBhbiBzd3N1c3BfaW5mbyBzdHJ1Y3R1cmUsIGFzIHNwZWNpZmllZCBpbgora2VybmVsL3Bvd2VyL3Bvd2VyLmguICBUaGlzIHN0cnVjdHVyZSBNQVkgYmUgdXNlZCBieSB0aGUgdXNlcmxhbmQgdXRpbGl0aWVzCit0byBvYnRhaW4gc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc25hcHNob3QgaW1hZ2UsIHN1Y2ggYXMgdGhlIHNpemUKK29mIHRoZSBzbmFwc2hvdCBpbWFnZSwgaW5jbHVkaW5nIHRoZSBtZXRhZGF0YSBhbmQgdGhlIGhlYWRlciBpdHNlbGYsCitjb250YWluZWQgaW4gdGhlIC5zaXplIG1lbWJlciBvZiBzd3N1c3BfaW5mby4KKworVGhlIHNuYXBzaG90IGltYWdlIE1VU1QgYmUgd3JpdHRlbiB0byB0aGUga2VybmVsIHVuYWx0ZXJlZCAoaWUuIGFsbCBvZiB0aGUgaW1hZ2UKK2RhdGEsIG1ldGFkYXRhIGFuZCBoZWFkZXIgTVVTVCBiZSB3cml0dGVuIGluIF9leGFjdGx5XyB0aGUgc2FtZSBhbW91bnQsIGZvcm0KK2FuZCBvcmRlciBpbiB3aGljaCB0aGV5IGhhdmUgYmVlbiByZWFkKS4gIE90aGVyd2lzZSwgdGhlIGJlaGF2aW9yIG9mIHRoZQorcmVzdW1lZCBzeXN0ZW0gbWF5IGJlIHRvdGFsbHkgdW5wcmVkaWN0YWJsZS4KKworV2hpbGUgZXhlY3V0aW5nIFNOQVBTSE9UX0FUT01JQ19SRVNUT1JFIHRoZSBrZXJuZWwgY2hlY2tzIGlmIHRoZQorc3RydWN0dXJlIG9mIHRoZSBzbmFwc2hvdCBpbWFnZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGluZm9ybWF0aW9uIHN0b3JlZAoraW4gdGhlIGltYWdlIGhlYWRlci4gIElmIGFueSBpbmNvbnNpc3RlbmNpZXMgYXJlIGRldGVjdGVkLAorU05BUFNIT1RfQVRPTUlDX1JFU1RPUkUgd2lsbCBub3Qgc3VjY2VlZC4gIFN0aWxsLCB0aGlzIGlzIG5vdCBhIGZvb2wtcHJvb2YKK21lY2hhbmlzbSBhbmQgdGhlIHVzZXJsYW5kIHV0aWxpdGllcyB1c2luZyB0aGUgaW50ZXJmYWNlIFNIT1VMRCB1c2UgYWRkaXRpb25hbAorbWVhbnMsIHN1Y2ggYXMgY2hlY2tzdW1zLCB0byBlbnN1cmUgdGhlIGludGVncml0eSBvZiB0aGUgc25hcHNob3QgaW1hZ2UuCisKK1RoZSBzdXNwZW5kaW5nIGFuZCByZXN1bWluZyB1dGlsaXRpZXMgTVVTVCBsb2NrIHRoZW1zZWx2ZXMgaW4gbWVtb3J5LAorcHJlZmVycmFibHkgdXNpbmcgbWxvY2thbGwoKSwgYmVmb3JlIGNhbGxpbmcgU05BUFNIT1RfRlJFRVpFLgorCitUaGUgc3VzcGVuZGluZyB1dGlsaXR5IE1VU1QgY2hlY2sgdGhlIHZhbHVlIHN0b3JlZCBieSBTTkFQU0hPVF9BVE9NSUNfU05BUFNIT1QKK2luIHRoZSBtZW1vcnkgbG9jYXRpb24gcG9pbnRlZCB0byBieSB0aGUgbGFzdCBhcmd1bWVudCBvZiBpb2N0bCgpIGFuZCBwcm9jZWVkCitpbiBhY2NvcmRhbmNlIHdpdGggaXQ6CisxLiAJSWYgdGhlIHZhbHVlIGlzIDEgKGllLiB0aGUgc3lzdGVtIG1lbW9yeSBzbmFwc2hvdCBoYXMganVzdCBiZWVuCisJY3JlYXRlZCBhbmQgdGhlIHN5c3RlbSBpcyByZWFkeSBmb3Igc2F2aW5nIGl0KToKKwkoYSkJVGhlIHN1c3BlbmRpbmcgdXRpbGl0eSBNVVNUIE5PVCBjbG9zZSB0aGUgc25hcHNob3QgZGV2aWNlCisJCV91bmxlc3NfIHRoZSB3aG9sZSBzdXNwZW5kIHByb2NlZHVyZSBpcyB0byBiZSBjYW5jZWxsZWQsIGluCisJCXdoaWNoIGNhc2UsIGlmIHRoZSBzbmFwc2hvdCBpbWFnZSBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkLCB0aGUKKwkJc3VzcGVuZGluZyB1dGlsaXR5IFNIT1VMRCBkZXN0cm95IGl0LCBwcmVmZXJyYWJseSBieSB6YXBwaW5nCisJCWl0cyBoZWFkZXIuICBJZiB0aGUgc3VzcGVuZCBpcyBub3QgdG8gYmUgY2FuY2VsbGVkLCB0aGUKKwkJc3lzdGVtIE1VU1QgYmUgcG93ZXJlZCBvZmYgb3IgcmVib290ZWQgYWZ0ZXIgdGhlIHNuYXBzaG90CisJCWltYWdlIGhhcyBiZWVuIHNhdmVkLgorCShiKQlUaGUgc3VzcGVuZGluZyB1dGlsaXR5IFNIT1VMRCBOT1QgYXR0ZW1wdCB0byBwZXJmb3JtIGFueQorCQlmaWxlIHN5c3RlbSBvcGVyYXRpb25zIChpbmNsdWRpbmcgcmVhZHMpIG9uIHRoZSBmaWxlIHN5c3RlbXMKKwkJdGhhdCB3ZXJlIG1vdW50ZWQgYmVmb3JlIFNOQVBTSE9UX0FUT01JQ19TTkFQU0hPVCBoYXMgYmVlbgorCQljYWxsZWQuICBIb3dldmVyLCBpdCBNQVkgbW91bnQgYSBmaWxlIHN5c3RlbSB0aGF0IHdhcyBub3QKKwkJbW91bnRlZCBhdCB0aGF0IHRpbWUgYW5kIHBlcmZvcm0gc29tZSBvcGVyYXRpb25zIG9uIGl0IChlZy4KKwkJdXNlIGl0IGZvciBzYXZpbmcgdGhlIGltYWdlKS4KKzIuCUlmIHRoZSB2YWx1ZSBpcyAwIChpZS4gdGhlIHN5c3RlbSBzdGF0ZSBoYXMganVzdCBiZWVuIHJlc3RvcmVkIGZyb20KKwl0aGUgc25hcHNob3QgaW1hZ2UpLCB0aGUgc3VzcGVuZGluZyB1dGlsaXR5IE1VU1QgY2xvc2UgdGhlIHNuYXBzaG90CisJZGV2aWNlLiAgQWZ0ZXJ3YXJkcyBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSByZWd1bGFyIHVzZXJsYW5kIHByb2Nlc3MsCisJc28gaXQgbmVlZCBub3QgZXhpdC4KKworVGhlIHJlc3VtaW5nIHV0aWxpdHkgU0hPVUxEIE5PVCBhdHRlbXB0IHRvIG1vdW50IGFueSBmaWxlIHN5c3RlbXMgdGhhdCBjb3VsZAorYmUgbW91bnRlZCBiZWZvcmUgc3VzcGVuZCBhbmQgU0hPVUxEIE5PVCBhdHRlbXB0IHRvIHBlcmZvcm0gYW55IG9wZXJhdGlvbnMKK2ludm9sdmluZyBzdWNoIGZpbGUgc3lzdGVtcy4KKworRm9yIGRldGFpbHMsIHBsZWFzZSByZWZlciB0byB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CmluZGV4IDkxMmJlZDguLmQxOGE1N2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvdmlkZW8udHh0CkBAIC0xLDcgKzEsNyBAQAogCiAJCVZpZGVvIGlzc3VlcyB3aXRoIFMzIHJlc3VtZQogCQl+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQkJICAyMDAzLTIwMDUsIFBhdmVsIE1hY2hlaworCQkgIDIwMDMtMjAwNiwgUGF2ZWwgTWFjaGVrCiAKIER1cmluZyBTMyByZXN1bWUsIGhhcmR3YXJlIG5lZWRzIHRvIGJlIHJlaW5pdGlhbGl6ZWQuIEZvciBtb3N0CiBkZXZpY2VzLCB0aGlzIGlzIGVhc3ksIGFuZCBrZXJuZWwgZHJpdmVyIGtub3dzIGhvdyB0byBkbwpAQCAtMTUsNiArMTUsMjcgQEAKIHByb2JsZW0gZm9yIFMxIHN0YW5kYnksIGJlY2F1c2UgaGFyZHdhcmUgc2hvdWxkIHJldGFpbiBpdHMgc3RhdGUgb3ZlcgogdGhhdC4KIAorV2UgZWl0aGVyIGhhdmUgdG8gcnVuIHZpZGVvIEJJT1MgZHVyaW5nIGVhcmx5IHJlc3VtZSwgb3IgaW50ZXJwcmV0IGl0Cit1c2luZyB2YmV0b29sIGxhdGVyLCBvciBtYXliZSBub3RoaW5nIGlzIG5lY2Nlc3Nhcnkgb24gcGFydGljdWxhcgorc3lzdGVtIGJlY2F1c2UgdmlkZW8gc3RhdGUgaXMgcHJlc2VydmVkLiBVbmZvcnR1bmF0ZWx5IGRpZmZlcmVudAorbWV0aG9kcyB3b3JrIG9uIGRpZmZlcmVudCBzeXN0ZW1zLCBhbmQgbm8ga25vd24gbWV0aG9kIHN1aXRzIGFsbCBvZgordGhlbS4KKworVXNlcmxhbmQgYXBwbGljYXRpb24gY2FsbGVkIHMycmFtIGhhcyBiZWVuIGRldmVsb3BlZDsgaXQgY29udGFpbnMgbG9uZword2hpdGVsaXN0IG9mIHN5c3RlbXMsIGFuZCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgd29ya2luZyBtZXRob2QgZm9yIGEKK2dpdmVuIHN5c3RlbS4gSXQgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBDVlMgYXQKK3d3dy5zZi5uZXQvcHJvamVjdHMvc3VzcGVuZCAuIElmIHlvdSBnZXQgYSBzeXN0ZW0gdGhhdCBpcyBub3QgaW4gdGhlCit3aGl0ZWxpc3QsIHBsZWFzZSB0cnkgdG8gZmluZCBhIHdvcmtpbmcgc29sdXRpb24sIGFuZCBzdWJtaXQgd2hpdGVsaXN0CitlbnRyeSBzbyB0aGF0IHdvcmsgZG9lcyBub3QgbmVlZCB0byBiZSByZXBlYXRlZC4KKworQ3VycmVudGx5LCBWQkVfU0FWRSBtZXRob2QgKDYgYmVsb3cpIHdvcmtzIG9uIG1vc3QKK3N5c3RlbXMuIFVuZm9ydHVuYXRlbHksIHZiZXRvb2wgb25seSBydW5zIGFmdGVyIHVzZXJsYW5kIGlzIHJlc3VtZWQsCitzbyBpdCBtYWtlcyBkZWJ1Z2dpbmcgb2YgZWFybHkgcmVzdW1lIHByb2JsZW1zCitoYXJkL2ltcG9zc2libGUuIE1ldGhvZHMgdGhhdCBkbyBub3QgcmVseSBvbiB1c2VybGFuZCBhcmUgcHJlZmVyYWJsZS4KKworRGV0YWlscworfn5+fn5+fgorCiBUaGVyZSBhcmUgYSBmZXcgdHlwZXMgb2Ygc3lzdGVtcyB3aGVyZSB2aWRlbyB3b3JrcyBhZnRlciBTMyByZXN1bWU6CiAKICgxKSBzeXN0ZW1zIHdoZXJlIHZpZGVvIHN0YXRlIGlzIHByZXNlcnZlZCBvdmVyIFMzLgpAQCAtMTA0LDYgKzEyNSw3IEBACiBIUCBQYXZpbGlvbiBaRDcwMDAJCXZiZXRvb2wgcG9zdCBuZWVkZWQsIG5lZWQgb3Blbi1zb3VyY2UgbnYgZHJpdmVyIGZvciBYCiBIUCBPbW5pYm9vayBYRTMJYXRobG9uIHZlcnNpb24Jbm9uZSAoMSkKIEhQIE9tbmlib29rIFhFM0dDCQlub25lICgxKSwgdmlkZW8gaXMgUzMgU2F2YWdlL0lYLU1WCitIUCBPbW5pYm9vayA1MTUwCQlub25lICgxKSwgKFMxIGFsc28gd29ya3MgT0spCiBJQk0gVFAgVDIwLCBtb2RlbCAyNjQ3LTQ0Rwlub25lICgxKSwgdmlkZW8gaXMgUzMgSW5jLiA4NkMyNzAtMjk0IFNhdmFnZS9JWC1NViwgdmVzYWZiIGdldHMgImludGVyZXN0aW5nIiBidXQgWCB3b3JrLgogSUJNIFRQIEEzMSAvIFR5cGUgMjY1Mi1NNUcgICAgICBzM19tb2RlICgzKSBbd29ya3Mgb2sgd2l0aCBCSU9TIDEuMDQgMjAwMi0wOC0yMywgYnV0IG5vdCBhdCBhbGwgd2l0aCBCSU9TIDEuMTEgMjAwNC0xMS0wNSA6LShdCiBJQk0gVFAgUjMyIC8gVHlwZSAyNjU4LU1NRyAgICAgIG5vbmUgKDEpCkBAIC0xMjAsMTggKzE0MiwyNCBAQAogSUJNIFRQIFgyMAkJCT8/PyAoKikKIElCTSBUUCBYMzAJCQlzM19iaW9zICgyKQogSUJNIFRQIFgzMSAvIFR5cGUgMjY3Mi1YWEggICAgICBub25lICgxKSwgdXNlIHJhZGVvbnRvb2wgKGh0dHA6Ly9mZGQuY29tL3NvZnR3YXJlL3JhZGVvbi8pIHRvIHR1cm4gb2ZmIGJhY2tsaWdodC4KLUlCTSBUUCBYMzIJCQlub25lICgxKSwgYnV0IGJhY2tsaWdodCBpcyBvbiBhbmQgdmlkZW8gaXMgdHJhc2hlZCBhZnRlciBsb25nIHN1c3BlbmQKK0lCTSBUUCBYMzIJCQlub25lICgxKSwgYnV0IGJhY2tsaWdodCBpcyBvbiBhbmQgdmlkZW8gaXMgdHJhc2hlZCBhZnRlciBsb25nIHN1c3BlbmQuIHMzX2Jpb3MsczNfbW9kZSAoNCkgd29ya3MgdG9vLiBQZXJoYXBzIHRoYXQgZ2V0cyBiZXR0ZXIgcmVzdWx0cz8KIElCTSBUaGlua3BhZCBYNDAgVHlwZSAyMzcxLTdKRyAgczNfYmlvcyxzM19tb2RlICg0KQorSUJNIFRQIDYwMGUJCQlub25lKDEpLCBidXQgYSBzd2l0Y2ggdG8gY29uc29sZSBhbmQgYmFjayB0byBYIGlzIG5lZWRlZAogTWVkaW9uIE1ENDIyMAkJCT8/PyAoKikKIFNhbXN1bmcgUDM1CQkJdmJldG9vbCBuZWVkZWQgKDYpCi1TaGFycCBQQy1BUjEwIChBVEkgcmFnZSkJbm9uZSAoMSkKK1NoYXJwIFBDLUFSMTAgKEFUSSByYWdlKQlub25lICgxKSwgYmFja2xpZ2h0IGRvZXMgbm90IHN3aXRjaCBvZmYKIFNvbnkgVmFpbyBQQ0ctQzFWUlgvSwkJczNfYmlvcyAoMikKIFNvbnkgVmFpbyBQQ0ctRjQwMwkJPz8/ICgqKQorU29ueSBWYWlvIFBDRy1HUlQ5OTVNUAkJbm9uZSAoMSksIHdvcmtzIHdpdGggJ252JyBYIGRyaXZlcgorU29ueSBWYWlvIFBDRy1HUjcvSwkJbm9uZSAoMSksIGJ1dCBuZWVkcyByYWRlb25mYiwgdXNlIHJhZGVvbnRvb2wgKGh0dHA6Ly9mZGQuY29tL3NvZnR3YXJlL3JhZGVvbi8pIHRvIHR1cm4gb2ZmIGJhY2tsaWdodC4KIFNvbnkgVmFpbyBQQ0ctTjUwNVNOCQk/Pz8gKCopCiBTb255IFZhaW8gdmduLXMyNjAJCVggb3IgYm9vdC1yYWRlb24gY2FuIGluaXQgaXQgKDUpCitTb255IFZhaW8gdmduLVM1ODBCSAkJdmdhPW5vcm1hbCwgYnV0IHN1c3BlbmQgZnJvbSBYLiBDb25zb2xlIHdpbGwgYmUgYmxhbmsgdW5sZXNzIHlvdSByZXR1cm4gdG8gWC4KK1NvbnkgVmFpbyB2Z24tRlMxMTVCCQlzM19iaW9zICgyKSxzM19tb2RlICg0KQogVG9zaGliYSBMaWJyZXR0byBMNQkJbm9uZSAoMSkKLVRvc2hpYmEgU2F0ZWxsaXRlIDQwMzBDRFQJczNfbW9kZSAoMykKLVRvc2hpYmEgU2F0ZWxsaXRlIDQwODBYQ0RUICAgICAgczNfbW9kZSAoMykKK1Rvc2hpYmEgUG9ydGVnZSAzMDIwQ1QJCXMzX21vZGUgKDMpCitUb3NoaWJhIFNhdGVsbGl0ZSA0MDMwQ0RUCXMzX21vZGUgKDMpIChTMSBhbHNvIHdvcmtzIE9LKQorVG9zaGliYSBTYXRlbGxpdGUgNDA4MFhDRFQgICAgICBzM19tb2RlICgzKSAoUzEgYWxzbyB3b3JrcyBPSykKIFRvc2hpYmEgU2F0ZWxsaXRlIDQwOTBYQ0RUICAgICAgPz8/ICgqKQogVG9zaGliYSBTYXRlbGxpdGUgUDEwLTU1NCAgICAgICBzM19iaW9zLHMzX21vZGUgKDQpKCoqKiopCiBUb3NoaWJhIE0zMCAgICAgICAgICAgICAgICAgICAgICgyKSB4b3IgWCB3aXRoIG52aWRpYSBkcml2ZXIgdXNpbmcgaW50ZXJuYWwgQUdQCkBAIC0xNTEsMzkgKzE3OSwzIEBACiAoKioqKSBUbyBiZSB0ZXN0ZWQgd2l0aCBhIG5ld2VyIGtlcm5lbC4KIAogKCoqKiopIE5vdCB3aXRoIFNNUCBrZXJuZWwsIFVQIG9ubHkuCi0KLVZCRXRvb2wgZGV0YWlscwotfn5+fn5+fn5+fn5+fn5+Ci0od2l0aCB0aGFua3MgdG8gQ2FybC1EYW5pZWwgSGFpbGZpbmdlcikKLQotRmlyc3QsIGJvb3QgaW50byBYIGFuZCBydW4gdGhlIGZvbGxvd2luZyBzY3JpcHQgT05DRToKLSMhL2Jpbi9iYXNoCi1zdGF0ZWRpcj0vcm9vdC9zMy9zdGF0ZQotbWtkaXIgLXAgJHN0YXRlZGlyCi1jaHZ0IDIKLXNsZWVwIDEKLXZiZXRvb2wgdmJlc3RhdGUgc2F2ZSA+JHN0YXRlZGlyL3ZiZQotCi0KLVRvIHN1c3BlbmQgYW5kIHJlc3VtZSBwcm9wZXJseSwgY2FsbCB0aGUgZm9sbG93aW5nIHNjcmlwdCBhcyByb290OgotIyEvYmluL2Jhc2gKLXN0YXRlZGlyPS9yb290L3MzL3N0YXRlCi1jdXJjb25zPWBmZ2NvbnNvbGVgCi1mdXNlciAvZGV2L3R0eSRjdXJjb25zIDI+L2Rldi9udWxsfHhhcmdzIHBzIC1vIGNvbW09IC1wfGdyZXAgLXEgWCAmJiBjaHZ0IDIKLWNhdCAvZGV2L3Zjc2EgPiRzdGF0ZWRpci92Y3NhCi1zeW5jCi1lY2hvIDMgPi9wcm9jL2FjcGkvc2xlZXAKLXN5bmMKLXZiZXRvb2wgcG9zdAotdmJldG9vbCB2YmVzdGF0ZSByZXN0b3JlIDwkc3RhdGVkaXIvdmJlCi1jYXQgJHN0YXRlZGlyL3Zjc2EgPi9kZXYvdmNzYQotcmNrYmQgcmVzdGFydAotY2h2dCAkW2N1cmNvbnMlNisxXQotY2h2dCAkY3VyY29ucwotCi0KLVVubGVzcyB5b3UgY2hhbmdlIHlvdXIgZ3JhcGhpY3MgY2FyZCBvciBvdGhlciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLAotdGhlIHN0YXRlIG9uY2Ugc2F2ZWQgd2lsbCBiZSBPSyBmb3IgZXZlcnkgcmVzdW1lIGFmdGVyd2FyZHMuCi1OT1RFOiBUaGUgInJja2JkIHJlc3RhcnQiIGNvbW1hbmQgbWF5IGJlIGRpZmZlcmVudCBmb3IgeW91cgotZGlzdHJpYnV0aW9uLiBTaW1wbHkgcmVwbGFjZSBpdCB3aXRoIHRoZSBjb21tYW5kIHlvdSB3b3VsZCB1c2UgdG8KLXNldCB0aGUgZm9udHMgb24gc2NyZWVuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dAppbmRleCBkMDJjNjQ5Li5lZTU1MWM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dApAQCAtMTM2NSw2ICsxMzY1LDc4IEBACiAJfTsKIAogCisgICBnKSBGcmVlc2NhbGUgU09DIFNFQyBTZWN1cml0eSBFbmdpbmVzCisKKyAgIFJlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgICAtIGRldmljZV90eXBlIDogU2hvdWxkIGJlICJjcnlwdG8iCisgICAgLSBtb2RlbCA6IE1vZGVsIG9mIHRoZSBkZXZpY2UuICBTaG91bGQgYmUgIlNFQzEiIG9yICJTRUMyIgorICAgIC0gY29tcGF0aWJsZSA6IFNob3VsZCBiZSAidGFsaXRvcyIKKyAgICAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKKyAgICAtIGludGVycnVwdHMgOiA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFuZCBiIGlzIGEKKyAgICAgIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbiBlbmNvZGluZyBvZiB0aGUgc2Vuc2UgYW5kIGxldmVsCisgICAgICBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4gIFRoaXMgc2hvdWxkIGJlIGVuY29kZWQgYmFzZWQgb24KKyAgICAgIHRoZSBpbmZvcm1hdGlvbiBpbiBzZWN0aW9uIDIpIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQKKyAgICAgIGNvbnRyb2xsZXIgeW91IGhhdmUuCisgICAgLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgICAgICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KKyAgICAtIG51bS1jaGFubmVscyA6IEFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKyAgICAgIGF2YWlsYWJsZS4KKyAgICAtIGNoYW5uZWwtZmlmby1sZW4gOiBBbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mCisgICAgICBkZXNjcmlwdG9yIHBvaW50ZXJzIGVhY2ggY2hhbm5lbCBmZXRjaCBmaWZvIGNhbiBob2xkLgorICAgIC0gZXhlYy11bml0cy1tYXNrIDogVGhlIGJpdG1hc2sgcmVwcmVzZW50aW5nIHdoYXQgZXhlY3V0aW9uIHVuaXRzCisgICAgICAoRVVzKSBhcmUgYXZhaWxhYmxlLiBJdCdzIGEgc2luZ2xlIDMyIGJpdCBjZWxsLiBFVSBpbmZvcm1hdGlvbgorICAgICAgc2hvdWxkIGJlIGVuY29kZWQgZm9sbG93aW5nIHRoZSBTRUMncyBEZXNjcmlwdG9yIEhlYWRlciBEd29yZAorICAgICAgRVVfU0VMMCBmaWVsZCBkb2N1bWVudGF0aW9uLCBpLmUuIGFzIGZvbGxvd3M6CisKKyAgICAgICAgYml0IDAgPSByZXNlcnZlZCAtIHNob3VsZCBiZSAwCisgICAgICAgIGJpdCAxID0gc2V0IGlmIFNFQyBoYXMgdGhlIEFSQzQgRVUgKEFGRVUpCisgICAgICAgIGJpdCAyID0gc2V0IGlmIFNFQyBoYXMgdGhlIERFUy8zREVTIEVVIChERVUpCisgICAgICAgIGJpdCAzID0gc2V0IGlmIFNFQyBoYXMgdGhlIG1lc3NhZ2UgZGlnZXN0IEVVIChNREVVKQorICAgICAgICBiaXQgNCA9IHNldCBpZiBTRUMgaGFzIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBFVSAoUk5HKQorICAgICAgICBiaXQgNSA9IHNldCBpZiBTRUMgaGFzIHRoZSBwdWJsaWMga2V5IEVVIChQS0VVKQorICAgICAgICBiaXQgNiA9IHNldCBpZiBTRUMgaGFzIHRoZSBBRVMgRVUgKEFFU1UpCisgICAgICAgIGJpdCA3ID0gc2V0IGlmIFNFQyBoYXMgdGhlIEthc3VtaSBFVSAoS0VVKQorCisgICAgICBiaXRzIDggdGhyb3VnaCAzMSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBTRUMgRVVzLgorCisgICAgLSBkZXNjcmlwdG9yLXR5cGVzLW1hc2sgOiBUaGUgYml0bWFzayByZXByZXNlbnRpbmcgd2hhdCBkZXNjcmlwdG9ycworICAgICAgYXJlIGF2YWlsYWJsZS4gSXQncyBhIHNpbmdsZSAzMiBiaXQgY2VsbC4gRGVzY3JpcHRvciB0eXBlCisgICAgICBpbmZvcm1hdGlvbiBzaG91bGQgYmUgZW5jb2RlZCBmb2xsb3dpbmcgdGhlIFNFQydzIERlc2NyaXB0b3IKKyAgICAgIEhlYWRlciBEd29yZCBERVNDX1RZUEUgZmllbGQgZG9jdW1lbnRhdGlvbiwgaS5lLiBhcyBmb2xsb3dzOgorCisgICAgICAgIGJpdCAwICA9IHNldCBpZiBTRUMgc3VwcG9ydHMgdGhlIGFlc3VfY3RyX25vbnNub29wIGRlc2MuIHR5cGUKKyAgICAgICAgYml0IDEgID0gc2V0IGlmIFNFQyBzdXBwb3J0cyB0aGUgaXBzZWNfZXNwIGRlc2NyaXB0b3IgdHlwZQorICAgICAgICBiaXQgMiAgPSBzZXQgaWYgU0VDIHN1cHBvcnRzIHRoZSBjb21tb25fbm9uc25vb3AgZGVzYy4gdHlwZQorICAgICAgICBiaXQgMyAgPSBzZXQgaWYgU0VDIHN1cHBvcnRzIHRoZSA4MDIuMTFpIEFFUyBjY21wIGRlc2MuIHR5cGUKKyAgICAgICAgYml0IDQgID0gc2V0IGlmIFNFQyBzdXBwb3J0cyB0aGUgaG1hY19zbm9vcF9ub19hZmV1IGRlc2MuIHR5cGUKKyAgICAgICAgYml0IDUgID0gc2V0IGlmIFNFQyBzdXBwb3J0cyB0aGUgc3J0cCBkZXNjcmlwdG9yIHR5cGUKKyAgICAgICAgYml0IDYgID0gc2V0IGlmIFNFQyBzdXBwb3J0cyB0aGUgbm9uX2htYWNfc25vb3Bfbm9fYWZldSBkZXNjLnR5cGUKKyAgICAgICAgYml0IDcgID0gc2V0IGlmIFNFQyBzdXBwb3J0cyB0aGUgcGtldV9hc3NlbWJsZSBkZXNjcmlwdG9yIHR5cGUKKyAgICAgICAgYml0IDggID0gc2V0IGlmIFNFQyBzdXBwb3J0cyB0aGUgYWVzdV9rZXlfZXhwYW5kX291dHB1dCBkZXNjLnR5cGUKKyAgICAgICAgYml0IDkgID0gc2V0IGlmIFNFQyBzdXBwb3J0cyB0aGUgcGtldV9wdG11bCBkZXNjcmlwdG9yIHR5cGUKKyAgICAgICAgYml0IDEwID0gc2V0IGlmIFNFQyBzdXBwb3J0cyB0aGUgY29tbW9uX25vbnNub29wX2FmZXUgZGVzYy4gdHlwZQorICAgICAgICBiaXQgMTEgPSBzZXQgaWYgU0VDIHN1cHBvcnRzIHRoZSBwa2V1X3B0YWRkX2RibCBkZXNjcmlwdG9yIHR5cGUKKworICAgICAgLi5hbmQgc28gb24gYW5kIHNvIGZvcnRoLgorCisgICBFeGFtcGxlOgorCisgICAgICAgLyogTVBDODU0OEUgKi8KKyAgICAgICBjcnlwdG9AMzAwMDAgeworICAgICAgICAgICAgICAgZGV2aWNlX3R5cGUgPSAiY3J5cHRvIjsKKyAgICAgICAgICAgICAgIG1vZGVsID0gIlNFQzIiOworICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJ0YWxpdG9zIjsKKyAgICAgICAgICAgICAgIHJlZyA9IDwzMDAwMCAxMDAwMD47CisgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDFkIDM+OworICAgICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisgICAgICAgICAgICAgICBudW0tY2hhbm5lbHMgPSA8ND47CisgICAgICAgICAgICAgICBjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKyAgICAgICAgICAgICAgIGV4ZWMtdW5pdHMtbWFzayA9IDwwMDAwMDBmZT47CisgICAgICAgICAgICAgICBkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MDczZjExMjc+OworICAgICAgIH07CisKKwogICAgTW9yZSBkZXZpY2VzIHdpbGwgYmUgZGVmaW5lZCBhcyB0aGlzIHNwZWMgbWF0dXJlcy4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZWVoLXBjaS1lcnJvci1yZWNvdmVyeS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZWVoLXBjaS1lcnJvci1yZWNvdmVyeS50eHQKaW5kZXggNjdhMTFhMy4uMzc2NGRkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2VlaC1wY2ktZXJyb3ItcmVjb3ZlcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9lZWgtcGNpLWVycm9yLXJlY292ZXJ5LnR4dApAQCAtMTIxLDcgKzEyMSw3IEBACiAKIEVFSCBtdXN0IGJlIGVuYWJsZWQgaW4gdGhlIFBIQidzIHZlcnkgZWFybHkgZHVyaW5nIHRoZSBib290IHByb2Nlc3MsCiBhbmQgaWYgYSBQQ0kgc2xvdCBpcyBob3QtcGx1Z2dlZC4gVGhlIGZvcm1lciBpcyBwZXJmb3JtZWQgYnkKLWVlaF9pbml0KCkgaW4gYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMsIGFuZCB0aGUgbGF0ZXIgYnkKK2VlaF9pbml0KCkgaW4gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jLCBhbmQgdGhlIGxhdGVyIGJ5CiBkcml2ZXJzL3BjaS9ob3RwbHVnL3BTZXJpZXNfcGNpLmMgY2FsbGluZyBpbiB0byB0aGUgZWVoLmMgY29kZS4KIEVFSCBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIGEgUENJIHNjYW4gb2YgdGhlIGRldmljZSBjYW4gcHJvY2VlZC4KIEN1cnJlbnQgUG93ZXI1IGhhcmR3YXJlIHdpbGwgbm90IHdvcmsgdW5sZXNzIEVFSCBpcyBlbmFibGVkOwpAQCAtMTMzLDcgKzEzMyw3IEBACiBwY2lfZ2V0X2RldmljZV9ieV9hZGRyKCkgd2lsbCBmaW5kIHRoZSBwY2kgZGV2aWNlIGFzc29jaWF0ZWQKIHdpdGggdGhhdCBhZGRyZXNzIChpZiBhbnkpLgogCi1UaGUgZGVmYXVsdCBpbmNsdWRlL2FzbS1wcGM2NC9pby5oIG1hY3JvcyByZWFkYigpLCBpbmIoKSwgaW5zYigpLAorVGhlIGRlZmF1bHQgaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oIG1hY3JvcyByZWFkYigpLCBpbmIoKSwgaW5zYigpLAogZXRjLiBpbmNsdWRlIGEgY2hlY2sgdG8gc2VlIGlmIHRoZSBpL28gcmVhZCByZXR1cm5lZCBhbGwtMHhmZidzLgogSWYgc28sIHRoZXNlIG1ha2UgYSBjYWxsIHRvIGVlaF9kbl9jaGVja19mYWlsdXJlKCksIHdoaWNoIGluIHR1cm4KIGFza3MgdGhlIGZpcm13YXJlIGlmIHRoZSBhbGwtZmYncyB2YWx1ZSBpcyB0aGUgc2lnbiBvZiBhIHRydWUgRUVICkBAIC0xNDMsMTEgKzE0MywxMiBAQAogYWxsIG9mIHRoZXNlIG9jY3VyIGR1cmluZyBib290LCB3aGVuIHRoZSBQQ0kgYnVzIGlzIHNjYW5uZWQsIHdoZXJlCiBhIGxhcmdlIG51bWJlciBvZiAweGZmIHJlYWRzIGFyZSBwYXJ0IG9mIHRoZSBidXMgc2NhbiBwcm9jZWR1cmUuCiAKLUlmIGEgZnJvemVuIHNsb3QgaXMgZGV0ZWN0ZWQsIGNvZGUgaW4gYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMgd2lsbAotcHJpbnQgYSBzdGFjayB0cmFjZSB0byBzeXNsb2cgKC92YXIvbG9nL21lc3NhZ2VzKS4gIFRoaXMgc3RhY2sgdHJhY2UKLWhhcyBwcm92ZW4gdG8gYmUgdmVyeSB1c2VmdWwgdG8gZGV2aWNlLWRyaXZlciBhdXRob3JzIGZvciBmaW5kaW5nCi1vdXQgYXQgd2hhdCBwb2ludCB0aGUgRUVIIGVycm9yIHdhcyBkZXRlY3RlZCwgYXMgdGhlIGVycm9yIGl0c2VsZgotdXN1YWxseSBvY2N1cnMgc2xpZ2h0bHkgYmVmb3JlaGFuZC4KK0lmIGEgZnJvemVuIHNsb3QgaXMgZGV0ZWN0ZWQsIGNvZGUgaW4gCithcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMgd2lsbCBwcmludCBhIHN0YWNrIHRyYWNlIHRvIAorc3lzbG9nICgvdmFyL2xvZy9tZXNzYWdlcykuICBUaGlzIHN0YWNrIHRyYWNlIGhhcyBwcm92ZW4gdG8gYmUgdmVyeSAKK3VzZWZ1bCB0byBkZXZpY2UtZHJpdmVyIGF1dGhvcnMgZm9yIGZpbmRpbmcgb3V0IGF0IHdoYXQgcG9pbnQgdGhlIEVFSCAKK2Vycm9yIHdhcyBkZXRlY3RlZCwgYXMgdGhlIGVycm9yIGl0c2VsZiB1c3VhbGx5IG9jY3VycyBzbGlnaHRseSAKK2JlZm9yZWhhbmQuCiAKIE5leHQsIGl0IHVzZXMgdGhlIExpbnV4IGtlcm5lbCBub3RpZmllciBjaGFpbi93b3JrIHF1ZXVlIG1lY2hhbmlzbSB0bwogYWxsb3cgYW55IGludGVyZXN0ZWQgcGFydGllcyB0byBmaW5kIG91dCBhYm91dCB0aGUgZmFpbHVyZS4gIERldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2h2Y3MudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2h2Y3MudHh0CmluZGV4IGRjYTc1Y2IuLjFlMzgxNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9odmNzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvaHZjcy50eHQKQEAgLTU1OCw5ICs1NTgsOSBAQAogCiBUaGUgcHJvcGVyIGNoYW5uZWwgZm9yIHJlcG9ydGluZyBidWdzIGlzIGVpdGhlciB0aHJvdWdoIHRoZSBMaW51eCBPUwogZGlzdHJpYnV0aW9uIGNvbXBhbnkgdGhhdCBwcm92aWRlZCB5b3VyIE9TIG9yIGJ5IHBvc3RpbmcgaXNzdWVzIHRvIHRoZQotcHBjNjQgZGV2ZWxvcG1lbnQgbWFpbGluZyBsaXN0IGF0OgorUG93ZXJQQyBkZXZlbG9wbWVudCBtYWlsaW5nIGxpc3QgYXQ6CiAKLWxpbnV4cHBjNjQtZGV2QGxpc3RzLmxpbnV4cHBjLm9yZworbGludXhwcGMtZGV2QG96bGFicy5vcmcKIAogVGhpcyByZXF1ZXN0IGlzIHRvIHByb3ZpZGUgYSBkb2N1bWVudGVkIGFuZCBzZWFyY2hhYmxlIHB1YmxpYyBleGNoYW5nZQogb2YgdGhlIHByb2JsZW1zIGFuZCBzb2x1dGlvbnMgc3Vycm91bmRpbmcgdGhpcyBkcml2ZXIgZm9yIHRoZSBiZW5lZml0IG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvZHJpdmVyLW1vZGVsLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CmluZGV4IGRmMDk3NTguLmVmYjY3NGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CkBAIC0xNiwxMCArMTYsMTIgQEAKICAgICAgICAgICAgLSAwLjAuMDAwMC8wLjAuMDgxNS8KIAkgICAtIDAuMC4wMDAxLzAuMC40NzExLwogCSAgIC0gMC4wLjAwMDIvCisJICAgLSAwLjEuMDAwMC8wLjEuMTIzNC8KIAkgICAuLi4KIAotSW4gdGhpcyBleGFtcGxlLCBkZXZpY2UgMDgxNSBpcyBhY2Nlc3NlZCB2aWEgc3ViY2hhbm5lbCAwLCBkZXZpY2UgNDcxMSB2aWEgCi1zdWJjaGFubmVsIDEsIGFuZCBzdWJjaGFubmVsIDIgaXMgYSBub24tSS9PIHN1YmNoYW5uZWwuCitJbiB0aGlzIGV4YW1wbGUsIGRldmljZSAwODE1IGlzIGFjY2Vzc2VkIHZpYSBzdWJjaGFubmVsIDAgaW4gc3ViY2hhbm5lbCBzZXQgMCwKK2RldmljZSA0NzExIHZpYSBzdWJjaGFubmVsIDEgaW4gc3ViY2hhbm5lbCBzZXQgMCwgYW5kIHN1YmNoYW5uZWwgMiBpcyBhIG5vbi1JL08KK3N1YmNoYW5uZWwuIERldmljZSAxMjM0IGlzIGFjY2Vzc2VkIHZpYSBzdWJjaGFubmVsIDAgaW4gc3ViY2hhbm5lbCBzZXQgMS4KIAogWW91IHNob3VsZCBhZGRyZXNzIGEgY2N3IGRldmljZSB2aWEgaXRzIGJ1cyBpZCAoZS5nLiAwLjAuNDcxMSk7IHRoZSBkZXZpY2UgY2FuCiBiZSBmb3VuZCB1bmRlciBidXMvY2N3L2RldmljZXMvLgpAQCAtOTcsNyArOTksNyBAQAogCiBFYWNoIGRyaXZlciBzaG91bGQgZGVjbGFyZSBpbiBhIE1PRFVMRV9ERVZJQ0VfVEFCTEUgaW50byB3aGljaCBDVSB0eXBlcy9tb2RlbHMKIGFuZC9vciBkZXZpY2UgdHlwZXMvbW9kZWxzIGl0IGlzIGludGVyZXN0ZWQuIFRoaXMgaW5mb3JtYXRpb24gY2FuIGxhdGVyIGJlIGZvdW5kCi1mb3VuZCBpbiB0aGUgc3RydWN0IGNjd19kZXZpY2VfaWQgZmllbGRzOgoraW4gdGhlIHN0cnVjdCBjY3dfZGV2aWNlX2lkIGZpZWxkczoKIAogc3RydWN0IGNjd19kZXZpY2VfaWQgewogCV9fdTE2CW1hdGNoX2ZsYWdzOwkKQEAgLTIwOCw2ICsyMTAsMTEgQEAKIGFnYWluIChvbmx5IHdoZW4gb2ZmbGluZSkuIFRoaXMgaXMgYSBnZW5lcmljIGNjd2dyb3VwIG1lY2hhbmlzbSAodGhlIGRyaXZlciBkb2VzCiBub3QgbmVlZCB0byBpbXBsZW1lbnQgYW55dGhpbmcgYmV5b25kIG5vcm1hbCByZW1vdmFsIHJvdXRpbmVzKS4KIAorQSBjY3cgZGV2aWNlIHdoaWNoIGlzIGEgbWVtYmVyIG9mIGEgY2N3Z3JvdXAgZGV2aWNlIGNhcnJpZXMgYSBwb2ludGVyIHRvIHRoZQorY2N3Z3JvdXAgZGV2aWNlIGluIHRoZSBkcml2ZXJfZGF0YSBvZiBpdHMgZGV2aWNlIHN0cnVjdC4gVGhpcyBmaWVsZCBtdXN0IG5vdCBiZQordG91Y2hlZCBieSB0aGUgZHJpdmVyIC0gaXQgc2hvdWxkIHVzZSB0aGUgY2N3Z3JvdXAgZGV2aWNlJ3MgZHJpdmVyX2RhdGEgZm9yIGl0cworcHJpdmF0ZSBkYXRhLgorCiBUbyBpbXBsZW1lbnQgYSBjY3dncm91cCBkcml2ZXIsIHBsZWFzZSByZWZlciB0byBpbmNsdWRlL2FzbS9jY3dncm91cC5oLiBLZWVwIGluCiBtaW5kIHRoYXQgbW9zdCBkcml2ZXJzIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgYm90aCBhIGNjd2dyb3VwIGFuZCBhIGNjdyBkcml2ZXIKICh1bmxlc3MgeW91IGhhdmUgYSBtZXRhIGNjdyBkcml2ZXIsIGxpa2UgY3UzMDg4IGZvciBsY3MgYW5kIGN0YykuCkBAIC0yMzAsNiArMjM3LDggQEAKIAkgYSBjaGFubmVsIHBhdGggdGhlIHVzZXIga25vd3MgdG8gYmUgb25saW5lLCBidXQgdGhlIG1hY2hpbmUgaGFzbid0CiAJIGNyZWF0ZWQgYSBtYWNoaW5lIGNoZWNrIGZvci4KIAordHlwZSAtIFRoZSBwaHlzaWNhbCB0eXBlIG9mIHRoZSBjaGFubmVsIHBhdGguCisKIAogMy4gU3lzdGVtIGRldmljZXMKIC0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC1jb25zb2xlLnR4dCBiL0RvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0CmluZGV4IDZjNjg5YjAuLjlhN2JjOGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2VyaWFsLWNvbnNvbGUudHh0CkBAIC0xNywxMSArMTcsMTMgQEAKIAkJCXR0eVggZm9yIGFueSBvdGhlciB2aXJ0dWFsIGNvbnNvbGUKIAkJCXR0eVN4IGZvciBhIHNlcmlhbCBwb3J0CiAJCQlscDAgZm9yIHRoZSBmaXJzdCBwYXJhbGxlbCBwb3J0CisJCQl0dHlVU0IwIGZvciB0aGUgZmlyc3QgVVNCIHNlcmlhbCBkZXZpY2UKIAogCW9wdGlvbnM6CWRlcGVuZCBvbiB0aGUgZHJpdmVyLiBGb3IgdGhlIHNlcmlhbCBwb3J0IHRoaXMKLQkJCWRlZmluZXMgdGhlIGJhdWRyYXRlL3Bhcml0eS9iaXRzIG9mIHRoZSBwb3J0LAotCQkJaW4gdGhlIGZvcm1hdCBCQkJCUE4sIHdoZXJlIEJCQkIgaXMgdGhlIHNwZWVkLAotCQkJUCBpcyBwYXJpdHkgKG4vby9lKSwgYW5kIE4gaXMgYml0cy4gRGVmYXVsdCBpcworCQkJZGVmaW5lcyB0aGUgYmF1ZHJhdGUvcGFyaXR5L2JpdHMvZmxvdyBjb250cm9sIG9mCisJCQl0aGUgcG9ydCwgaW4gdGhlIGZvcm1hdCBCQkJCUE5GLCB3aGVyZSBCQkJCIGlzIHRoZQorCQkJc3BlZWQsIFAgaXMgcGFyaXR5IChuL28vZSksIE4gaXMgbnVtYmVyIG9mIGJpdHMsCisJCQlhbmQgRiBpcyBmbG93IGNvbnRyb2wgKCdyJyBmb3IgUlRTKS4gRGVmYXVsdCBpcwogCQkJOTYwMG44LiBUaGUgbWF4aW11bSBiYXVkcmF0ZSBpcyAxMTUyMDAuCiAKIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBjb25zb2xlPSBvcHRpb25zIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgpAQCAtNDUsNiArNDcsOSBAQAogWW91IHdpbGwgbmVlZCB0byBjcmVhdGUgYSBuZXcgZGV2aWNlIHRvIHVzZSAvZGV2L2NvbnNvbGUuIFRoZSBvZmZpY2lhbAogL2Rldi9jb25zb2xlIGlzIG5vdyBjaGFyYWN0ZXIgZGV2aWNlIDUsMS4KIAorKFlvdSBjYW4gYWxzbyB1c2UgYSBuZXR3b3JrIGRldmljZSBhcyBhIGNvbnNvbGUuICBTZWUKK0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnR4dCBmb3IgaW5mb3JtYXRpb24gb24gdGhhdC4pCisKIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgd2lsbCB1c2UgL2Rldi90dHlTMSAoQ09NMikgYXMgdGhlIGNvbnNvbGUuCiBSZXBsYWNlIHRoZSBzYW1wbGUgdmFsdWVzIGFzIG5lZWRlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCAzNmI1MTFjLi4xZGVmNjA0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtNTEzLDYgKzUxMyw4IEBACiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcyBhbmQgYXV0b3Byb2JlLgogICAgIAorICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KKwogICBNb2R1bGUgc25kLWVuczEzNzEKICAgLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTUyNiw2ICs1MjgsOCBAQAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgYW5kIGF1dG9wcm9iZS4KICAgICAKKyAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCisKICAgTW9kdWxlIHNuZC1lczk2OAogICAtLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTY3MSw2ICs2NzUsOCBAQAogCiAgICAgbW9kZWwJLSBmb3JjZSB0aGUgbW9kZWwgbmFtZQogICAgIHBvc2l0aW9uX2ZpeCAtIEZpeCBETUEgcG9pbnRlciAoMCA9IGF1dG8sIDEgPSBub25lLCAyID0gUE9TQlVGLCAzID0gRklGTyBzaXplKQorICAgIHNpbmdsZV9jbWQgIC0gVXNlIHNpbmdsZSBpbW1lZGlhdGUgY29tbWFuZHMgdG8gY29tbXVuaWNhdGUgd2l0aAorCQljb2RlY3MgKGZvciBkZWJ1Z2dpbmcgb25seSkKIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG9uZSBjYXJkIGFuZCBhdXRvcHJvYmUuCiAKQEAgLTY5NCwxMyArNzAwLDM0IEBACiAJICBhc3VzCQkzLWphY2sKIAkgIHVuaXdpbGwJMy1qYWNrCiAJICBGMTczNAkJMi1qYWNrCisJICBsZwkJTEcgbGFwdG9wIChtMSBleHByZXNzIGR1YWwpCiAJICB0ZXN0CQlmb3IgdGVzdGluZy9kZWJ1Z2dpbmcgcHVycG9zZSwgYWxtb3N0IGFsbCBjb250cm9scyBjYW4gYmUKIAkJCWFkanVzdGVkLiAgQXBwZWFyaW5nIG9ubHkgd2hlbiBjb21waWxlZCB3aXRoCiAJCQkkQ09ORklHX1NORF9ERUJVRz15CisJICBhdXRvCQlhdXRvLWNvbmZpZyByZWFkaW5nIEJJT1MgKGRlZmF1bHQpCiAKIAlBTEMyNjAKIAkgIGhwCQlIUCBtYWNoaW5lcwogCSAgZnVqaXRzdQlGdWppdHN1IFM3MDIwCisJICBhY2VyCQlBY2VyIFRyYXZlbE1hdGUKKwkgIGJhc2ljCQlmaXhlZCBwaW4gYXNzaWdubWVudCAob2xkIGRlZmF1bHQgbW9kZWwpCisJICBhdXRvCQlhdXRvLWNvbmZpZyByZWFkaW5nIEJJT1MgKGRlZmF1bHQpCisKKwlBTEMyNjIKKwkgIGZ1aml0c3UJRnVqaXRzdSBMYXB0b3AKKwkgIGJhc2ljCQlmaXhlZCBwaW4gYXNzaWdubWVudCB3L28gU1BESUYKKwkgIGF1dG8JCWF1dG8tY29uZmlnIHJlYWRpbmcgQklPUyAoZGVmYXVsdCkKKworCUFMQzg4Mi84ODMvODg1CisJICAzc3RhY2stZGlnCTMtamFjayB3aXRoIFNQRElGIEkvTworCSAgNnN0Y2stZGlnCTYtamFjayBkaWdpdGFsIHdpdGggU1BESUYgSS9PCisJICBhdXRvCQlhdXRvLWNvbmZpZyByZWFkaW5nIEJJT1MgKGRlZmF1bHQpCisKKwlBTEM4NjEKKwkgIDNzdGFjawkzLWphY2sKKwkgIDNzdGFjay1kaWcJMy1qYWNrIHdpdGggU1BESUYgSS9PCisJICA2c3RhY2stZGlnCTYtamFjayB3aXRoIFNQRElGIEkvTworCSAgYXV0bwkJYXV0by1jb25maWcgcmVhZGluZyBCSU9TIChkZWZhdWx0KQogCiAJQ01JOTg4MAogCSAgbWluaW1hbAkzLWphY2sgaW4gYmFjawpAQCAtNzEwLDYgKzczNywyOCBAQAogCSAgYWxsb3V0CTUtamFjayBpbiBiYWNrLCAyLWphY2sgaW4gZnJvbnQsIFNQRElGIG91dAogCSAgYXV0bwkJYXV0by1jb25maWcgcmVhZGluZyBCSU9TIChkZWZhdWx0KQogCisJQUQxOTgxCisJICBiYXNpYwkJMy1qYWNrIChkZWZhdWx0KQorCSAgaHAJCUhQIG54NjMyMAorCisJQUQxOTg2QQorCSAgNnN0YWNrCTYtamFjaywgc2VwYXJhdGUgc3Vycm91bmRzIChkZWZhdWx0KQorCSAgM3N0YWNrCTMtc3RhY2ssIHNoYXJlZCBzdXJyb3VuZHMKKwkgIGxhcHRvcAkyLWNoYW5uZWwgb25seSAoRlNDIFYyMDYwLCBTYW1zdW5nIE01MCkKKwkgIGxhcHRvcC1lYXBkCTItY2hhbm5lbCB3aXRoIEVBUEQgKFNhbXN1bmcgUjY1LCBBU1VTIEE2SikKKworCUFEMTk4OAorCSAgNnN0YWNrCTYtamFjaworCSAgNnN0YWNrLWRpZwlkaXR0byB3aXRoIFNQRElGCisJICAzc3RhY2sJMy1qYWNrCisJICAzc3RhY2stZGlnCWRpdHRvIHdpdGggU1BESUYKKwkgIGxhcHRvcAkzLWphY2sgd2l0aCBocC1qYWNrIGF1dG9tdXRlCisJICBsYXB0b3AtZGlnCWRpdHRvIHdpdGggU1BESUYKKwkgIGF1dG8JCWF1dG8tY29uZmdpIHJlYWRpbmcgQklPUyAoZGVmYXVsdCkKKworCVNUQUM3NjYxKD8pCisJICB2YWlvCQlTZXR1cCBmb3IgVkFJTyBGRTU1MEcvU1oxMTAKKwogICAgIElmIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZG9lc24ndCB3b3JrIGFuZCBvbmUgb2YgdGhlIGFib3ZlCiAgICAgbWF0Y2hlcyB3aXRoIHlvdXIgZGV2aWNlLCByZXBvcnQgaXQgdG9nZXRoZXIgd2l0aCB0aGUgUENJCiAgICAgc3Vic3lzdGVtIElEIChvdXRwdXQgb2YgImxzcGNpIC1udiIpIHRvIEFMU0EgQlRTIG9yIGFsc2EtZGV2ZWwKQEAgLTcyMyw2ICs3NzIsMTcgQEAKIAkgICAgKFVzdWFsbHkgU0RfTFBMSUIgcmVnaXN0ZXIgaXMgbW9yZSBhY2N1cmF0ZSB0aGFuIHRoZQogCSAgICBwb3NpdGlvbiBidWZmZXIuKQogCisgICAgTkI6IElmIHlvdSBnZXQgbWFueSAiYXp4X2dldF9yZXNwb25zZSB0aW1lb3V0IiBtZXNzYWdlcyBhdAorICAgIGxvYWRpbmcsIGl0J3MgbGlrZWx5IGEgcHJvYmxlbSBvZiBpbnRlcnJ1cHRzIChlLmcuIEFDUEkgaXJxCisgICAgcm91dGluZykuICBUcnkgdG8gYm9vdCB3aXRoIG9wdGlvbnMgbGlrZSAicGNpPW5vYWNwaSIuICBBbHNvLCB5b3UKKyAgICBjYW4gdHJ5ICJzaW5nbGVfY21kPTEiIG1vZHVsZSBvcHRpb24uICBUaGlzIHdpbGwgc3dpdGNoIHRoZQorICAgIGNvbW11bmljYXRpb24gbWV0aG9kIGJldHdlZW4gSERBIGNvbnRyb2xsZXIgYW5kIGNvZGVjcyB0byB0aGUKKyAgICBzaW5nbGUgaW1tZWRpYXRlIGNvbW1hbmRzIGluc3RlYWQgb2YgQ09SQi9SSVJCLiAgQmFzaWNhbGx5LCB0aGUKKyAgICBzaW5nbGUgY29tbWFuZCBtb2RlIGlzIHByb3ZpZGVkIG9ubHkgZm9yIEJJT1MsIGFuZCB5b3Ugd29uJ3QgZ2V0CisgICAgdW5zb2xpY2l0ZWQgZXZlbnRzLCB0b28uICBCdXQsIGF0IGxlYXN0LCB0aGlzIHdvcmtzIGluZGVwZW5kZW50bHkKKyAgICBmcm9tIHRoZSBpcnEuICBSZW1lbWJlciB0aGlzIGlzIGEgbGFzdCByZXNvcnQsIGFuZCBzaG91bGQgYmUKKyAgICBhdm9pZGVkIGFzIG11Y2ggYXMgcG9zc2libGUuLi4KKyAgICAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKICAgTW9kdWxlIHNuZC1oZHNwCkBAIC04MDIsNiArODYyLDcgQEAKICAgLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBNb2R1bGUgZm9yIEVudnkyNEhUIChWVC9JQ0UxNzI0KSwgRW52eTI0UFQgKFZUMTcyMCkgYmFzZWQgUENJIHNvdW5kIGNhcmRzLgorCQkJKiBNaWRpTWFuIE0gQXVkaW8gUmV2b2x1dGlvbiA1LjEKIAkJCSogTWlkaU1hbiBNIEF1ZGlvIFJldm9sdXRpb24gNy4xCiAJCQkqIEFNUCBMdGQgQVVESU8yMDAwCiAJCQkqIFRlcnJhVGVjIEF1cmVvbiA1LjEgU2t5CkBAIC04MTAsNiArODcxLDcgQEAKIAkJCSogVGVycmFUZWMgUGhhc2UgMjIKIAkJCSogVGVycmFUZWMgUGhhc2UgMjgKIAkJCSogQXVkaW9UcmFrIFByb2RpZ3kgNy4xCisJCQkqIEF1ZGlvVHJhayBQcm9kaWd5IDcuMUxUCiAJCQkqIEF1ZGlvVHJhayBQcm9kaWd5IDE5MgogCQkJKiBQb250aXMgTVMzMDAKIAkJCSogQWxiYXRyb24gSzhYODAwIFBybyBJSSAKQEAgLTgyMCw5ICs4ODIsOSBAQAogCQkJKiBTaHV0dGxlIFNOMjVQCiAKICAgICBtb2RlbCAgICAgICAtIFVzZSB0aGUgZ2l2ZW4gYm9hcmQgbW9kZWwsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCQkgIHJldm83MSwgYW1wMjAwMCwgcHJvZGlneTcxLCBwcm9kaWd5MTkyLCBhdXJlb241MSwKLQkJICBhdXJlb243MSwgdW5pdmVyc2UsIGs4eDgwMCwgcGhhc2UyMiwgcGhhc2UyOCwgbXMzMDAsCi0JCSAgYXY3MTAKKwkJICByZXZvNTEsIHJldm83MSwgYW1wMjAwMCwgcHJvZGlneTcxLCBwcm9kaWd5NzFsdCwKKwkJICBwcm9kaWd5MTkyLCBhdXJlb241MSwgYXVyZW9uNzEsIHVuaXZlcnNlLAorCQkgIGs4eDgwMCwgcGhhc2UyMiwgcGhhc2UyOCwgbXMzMDAsIGF2NzEwCiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcyBhbmQgYXV0b3Byb2JlLgogCkBAIC0xMzUzLDYgKzE0MTUsOSBAQAogCiAgICAgdmlkICAgICAgICAgICAgIC0gVmVuZG9yIElEIGZvciB0aGUgZGV2aWNlIChvcHRpb25hbCkKICAgICBwaWQgICAgICAgICAgICAgLSBQcm9kdWN0IElEIGZvciB0aGUgZGV2aWNlIChvcHRpb25hbCkKKyAgICBkZXZpY2Vfc2V0dXAgICAgLSBEZXZpY2Ugc3BlY2lmaWMgbWFnaWMgbnVtYmVyIChvcHRpb25hbCkKKyAgICAgICAgICAgICAgICAgICAgLSBJbmZsdWVuY2UgZGVwZW5kcyBvbiB0aGUgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgIC0gRGVmYXVsdDogMHgwMDAwIAogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgZGV2aWNlcywgYXV0b3Byb2JlIGFuZCBob3RwbHVnZ2luZy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0F1ZGlvcGhpbGUtVXNiLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpb3BoaWxlLVVzYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5MmM4ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BdWRpb3BoaWxlLVVzYi50eHQKQEAgLTAsMCArMSwzMzMgQEAKKwlHdWlkZSB0byB1c2luZyBNLUF1ZGlvIEF1ZGlvcGhpbGUgVVNCIHdpdGggQUxTQSBhbmQgSmFjawl2MS4yCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSAgICBUaGliYXVsdCBMZSBNZXVyIDxUaGliYXVsdC5MZU1ldXJAc3VwZWxlYy5mcj4KKworVGhpcyBkb2N1bWVudCBpcyBhIGd1aWRlIHRvIHVzaW5nIHRoZSBNLUF1ZGlvIEF1ZGlvcGhpbGUgVVNCICh0bSkgZGV2aWNlIHdpdGggCitBTFNBIGFuZCBKQUNLLgorCisxIC0gQXVkaW9waGlsZSBVU0IgU3BlY3MgYW5kIGNvcnJlY3QgdXNhZ2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBwYXJ0IGlzIGEgcmVtaW5kZXIgb2YgaW1wb3J0YW50IGZhY3RzIGFib3V0IHRoZSBmdW5jdGlvbnMgYW5kIGxpbWl0YXRpb25zIAorb2YgdGhlIGRldmljZS4KKworVGhlIGRldmljZSBoYXMgNCBhdWRpbyBpbnRlcmZhY2VzLCBhbmQgMiBNSURJIHBvcnRzOgorICogQW5hbG9nIFN0ZXJlbyBJbnB1dCAoQWkpCisgICAtIFRoaXMgcG9ydCBzdXBwb3J0cyAyIHBhaXJzIG9mIGxpbmUtbGV2ZWwgYXVkaW8gaW5wdXRzICgxLzQiIFRTIGFuZCBSQ0EpIAorICAgLSBXaGVuIHRoZSAxLzQiIFRTIChqYWNrKSBjb25uZWN0b3JzIGFyZSBjb25uZWN0ZWQsIHRoZSBSQ0EgY29ubmVjdG9ycworICAgICBhcmUgZGlzYWJsZWQKKyAqIEFuYWxvZyBTdGVyZW8gT3V0cHV0IChBbykKKyAqIERpZ2l0YWwgU3RlcmVvIElucHV0IChEaSkKKyAqIERpZ2l0YWwgU3RlcmVvIE91dHB1dCAoRG8pCisgKiBNaWRpIEluIChNaSkKKyAqIE1pZGkgT3V0IChNbykKKworVGhlIGludGVybmFsIERBQy9BREMgaGFzIHRoZSBmb2xsb3dpbmcgY2FyYWN0ZXJpc3RpY3M6CisqIHNhbXBsZSBkZXB0aCBvZiAxNiBvciAyNCBiaXRzCisqIHNhbXBsZSByYXRlIGZyb20gOGtIeiB0byA5NmtIegorKiBUd28gcG9ydHMgY2FuJ3QgdXNlIGRpZmZlcmVudCBzYW1wbGUgZGVwdGhzIGF0IHRoZSBzYW1lIHRpbWUuTW9yZW92ZXIsIHRoZSAKK0F1ZGlvcGhpbGUgVVNCIGRvY3VtZW50YXRpb24gZ2l2ZXMgdGhlIGZvbGxvd2luZyBXYXJuaW5nOiAiUGxlYXNlIGV4aXQgYW55IAorYXVkaW8gYXBwbGljYXRpb24gcnVubmluZyBiZWZvcmUgc3dpdGNoaW5nIGJldHdlZW4gYml0IGRlcHRocyIKKworRHVlIHRvIHRoZSBVU0IgMS4xIGJhbmR3aWR0aCBsaW1pdGF0aW9uLCBhIGxpbWl0ZWQgbnVtYmVyIG9mIGludGVyZmFjZXMgY2FuIGJlIAorYWN0aXZhdGVkIGF0IHRoZSBzYW1lIHRpbWUgZGVwZW5kaW5nIG9uIHRoZSBhdWRpbyBtb2RlIHNlbGVjdGVkOgorICogMTYtYml0LzQ4a0h6ID09PiA0IGNoYW5uZWxzIGluLyA0IGNoYW5uZWxzIG91dAorICAgLSBBaStBbytEaStEbworICogMjQtYml0LzQ4a0h6ID09PiA0IGNoYW5uZWxzIGluLzIgY2hhbm5lbHMgb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgb3IgMiBjaGFubmVscyBpbi80IGNoYW5uZWxzIG91dAorICAgLSBBaStBbytEbyBvciBBaStEaStBbyBvciBBaStEaStEbyBvciBEaStBbytEbworICogMjQtYml0Lzk2a0h6ID09PiAyIGNoYW5uZWxzIGluLCBvciAyIGNoYW5uZWxzIG91dCAoaGFsZiBkdXBsZXggb25seSkKKyAgIC0gQWkgb3IgQW8gb3IgRGkgb3IgRG8KKworSW1wb3J0YW50IGZhY3RzIGFib3V0IHRoZSBEaWdpdGFsIGludGVyZmFjZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGUgRG8gcG9ydCBhZGRpdGlvbm5hbHkgc3VwcG9ydHMgc3Vycm91bmQtZW5jb2RlZCBBQy0zIGFuZCBEVFMgcGFzc3Rocm91Z2gsIAordGhvdWdoIEkgaGF2ZW4ndCB0ZXN0ZWQgaXQgdW5kZXIgbGludXgKKyAgIC0gTm90ZSB0aGF0IGluIHRoaXMgc2V0dXAgb25seSB0aGUgRG8gaW50ZXJmYWNlIGNhbiBiZSBlbmFibGVkCisgKiBBcGFydCBmcm9tIHJlY29yZGluZyBhbiBhdWRpbyBkaWdpdGFsIHN0cmVhbSwgZW5hYmxpbmcgdGhlIERpIHBvcnQgaXMgYSB3YXkgCit0byBzeW5jaHJvbml6ZSB0aGUgZGV2aWNlIHRvIGFuIGV4dGVybmFsIHNhbXBsZSBjbG9jaworICAgLSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgRGkgcG9ydCBtdXN0IGJlIGVuYWJsZSBvbmx5IGlmIGFuIGFjdGl2ZSBEaWdpdGFsIAorc291cmNlIGlzIGNvbm5lY3RlZAorICAgLSBFbmFibGluZyBEaSB3aGVuIG5vIGRpZ2l0YWwgc291cmNlIGlzIGNvbm5lY3RlZCBjYW4gcmVzdWx0IGluIGEgCitzeW5jaHJvbml6YXRpb24gZXJyb3IgKGZvciBpbnN0YW5jZSBzb3VuZCBwbGF5ZWQgYXQgYW4gb2RkIHNhbXBsZSByYXRlKQorCisKKzIgLSBBdWRpb3BoaWxlIFVTQiBzdXBwb3J0IGluIEFMU0EKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMi4xIC0gTUlESSBwb3J0cworLS0tLS0tLS0tLS0tLS0tLQorVGhlIEF1ZGlvcGhpbGUgVVNCIE1JREkgcG9ydHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN1cHBvcnRlZCBvbmNlIHRoZSAKK2ZvbGxvd2luZyBtb2R1bGVzIGhhdmUgYmVlbiBsb2FkZWQ6CisgKiBzbmQtdXNiLWF1ZGlvCisgKiBzbmQtc2VxCisgKiBzbmQtc2VxLW1pZGkKKworTm8gYWRkaXRpb25uYWwgc2V0dGluZyBpcyByZXF1aXJlZC4KKworMi4yIC0gQXVkaW8gcG9ydHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0F1ZGlvIGZ1bmN0aW9ucyBvZiB0aGUgQXVkaW9waGlsZSBVU0IgZGV2aWNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBzbmQtdXNiLWF1ZGlvIAorbW9kdWxlLiBUaGlzIG1vZHVsZSBjYW4gd29yayBpbiBhIGRlZmF1bHQgbW9kZSAod2l0aG91dCBhbnkgZGV2aWNlLXNwZWNpZmljIAorcGFyYW1ldGVyKSwgb3IgaW4gYW4gYWR2YW5jZWQgbW9kZSB3aXRoIHRoZSBkZXZpY2Utc3BlY2lmaWMgcGFyYW1ldGVyIGNhbGxlZCAKKyJkZXZpY2Vfc2V0dXAiLgorCisyLjIuMSAtIERlZmF1bHQgQWxzYSBkcml2ZXIgbW9kZQorCitUaGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGhlIHNuZC11c2ItYXVkaW8gZHJpdmVyIGlzIHRvIHBhcnNlIHRoZSBkZXZpY2UgCitjYXBhYmlsaXRpZXMgYXQgc3RhcnR1cCBhbmQgZW5hYmxlIGFsbCBmdW5jdGlvbnMgaW5zaWRlIHRoZSBkZXZpY2UgKGluY2x1ZGluZyAKK2FsbCBwb3J0cyBhdCBhbnkgc2FtcGxlIHJhdGVzIGFuZCBhbnkgc2FtcGxlIGRlcHRocyBzdXBwb3J0ZWQpLiBUaGlzIGFwcHJvYWNoIAoraGFzIHRoZSBhZHZhbnRhZ2UgdG8gbGV0IHRoZSBkcml2ZXIgZWFzaWx5IHN3aXRjaCBmcm9tIHNhbXBsZSByYXRlcy9kZXB0aHMgCithdXRvbWF0aWNhbGx5IGFjY29yZGluZyB0byB0aGUgbmVlZCBvZiB0aGUgYXBwbGljYXRpb24gY2xhaW1pbmcgdGhlIGRldmljZS4KKworSW4gdGhpcyBjYXNlIHRoZSBBdWRpb3BoaWxlIHBvcnRzIGFyZSBtYXBwZWQgdG8gYWxzYSBwY20gZGV2aWNlcyBpbiB0aGUgCitmb2xsb3dpbmcgd2F5IChJIHN1cHBvc2UgdGhlIGRldmljZSdzIGluZGV4IGlzIDEpOgorICogaHc6MSwwIGlzIEFvIGluIHBsYXliYWNrIGFuZCBEaSBpbiBjYXB0dXJlCisgKiBodzoxLDEgaXMgRG8gaW4gcGxheWJhY2sgYW5kIEFpIGluIGNhcHR1cmUKKyAqIGh3OjEsMiBpcyBEbyBpbiBBQzMvRFRTIHBhc3N0aHJvdWdoIG1vZGUKKworWW91IG11c3Qgbm90ZSBhcyB3ZWxsIHRoYXQgdGhlIGRldmljZSB1c2VzIEJpZyBFbmRpYW4gYnl0ZSBlbmNvZGluZyBzbyB0aGF0IAorc3VwcG9ydGVkIGF1ZGlvIGZvcm1hdCBhcmUgUzE2X0JFICBmb3IgMTYtYml0IGRlcHRoIG1vZGVzIGFuZCBTMjRfM0JFIGZvciAKKzI0LWJpdHMgZGVwdGggbW9kZS4gT25lIGV4Y2VwdGlvbiBpcyB0aGUgaHc6MSwyIHBvcnQgd2hpY2ggaXMgTGl0dGxlIEVuZGlhbiAKK2NvbXBsaWFudCBhbmQgdGh1cyB1c2VzIFMxNl9MRS4KKworRXhhbXBsZXM6CisgKiBwbGF5aW5nIGEgUzI0XzNCRSBlbmNvZGVkIHJhdyBmaWxlIHRvIHRoZSBBbyBwb3J0CisgICAlIGFwbGF5IC1EIGh3OjEsMCAtYzIgLXQgcmF3IC1yNDgwMDAgLWZTMjRfM0JFIHRlc3QucmF3CisgKiByZWNvcmRpbmcgYSAgUzI0XzNCRSBlbmNvZGVkIHJhdyBmaWxlIGZyb20gdGhlIEFpIHBvcnQKKyAgICUgYXJlY29yZCAtRCBodzoxLDEgLWMyICAtdCByYXcgLXI0ODAwMCAtZlMyNF8zQkUgdGVzdC5yYXcKKyAqIHBsYXlpbmcgYSBTMTZfQkUgZW5jb2RlZCByYXcgZmlsZSB0byB0aGUgRG8gcG9ydAorICAgJSBhcGxheSAtRCBodzoxLDEgLWMyIC10IHJhdyAtcjQ4MDAwIC1mUzE2X0JFIHRlc3QucmF3CisKK0lmIHlvdSdyZSBoYXBweSB3aXRoIHRoZSBkZWZhdWx0IEFsc2EgZHJpdmVyIHNldHVwIGFuZCBkb24ndCBleHBlcmllbmNlIGFueSAKK2lzc3VlIHdpdGggdGhpcyBtb2RlLCB0aGVuIHlvdSBjYW4gc2tpcCB0aGUgZm9sbG93aW5nIGNoYXB0ZXIuCisKKzIuMi4yIC0gQWR2YW5jZWQgbW9kdWxlIHNldHVwCisKK0R1ZSB0byB0aGUgaGFyZHdhcmUgY29uc3RyYWludHMgZGVzY3JpYmVkIGFib3ZlLCB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIG1hZGUgCitieSB0aGUgQWxzYSBkcml2ZXIgaW4gZGVmYXVsdCBtb2RlIG1heSByZXN1bHQgaW4gYSBjb3JydXB0ZWQgc3RhdGUgb2YgdGhlIAorZGV2aWNlLiBGb3IgaW5zdGFuY2UsIGEgcGFydGljdWxhcmx5IGFubm95aW5nIGlzc3VlIGlzIHRoYXQgdGhlIHNvdW5kIGNhcHR1cmVkIAorZnJvbSB0aGUgQWkgcG9ydCBzb3VuZHMgZGlzdG9ydGVkIChhcyBpZiBib29zdGVkIHdpdGggYW4gZXhjZXNzaXZlIGhpZ2ggdm9sdW1lIAorZ2FpbikuCisKK0ZvciBwZW9wbGUgaGF2aW5nIHRoaXMgcHJvYmxlbSwgdGhlIHNuZC11c2ItYXVkaW8gbW9kdWxlIGhhcyBhIG5ldyBtb2R1bGUgCitwYXJhbWV0ZXIgY2FsbGVkICJkZXZpY2Vfc2V0dXAiLgorCisyLjIuMi4xIC0gSW5pdGlhbGl6aW5nIHRoZSB3b3JraW5nIG1vZGUgb2YgdGhlIEF1ZGlvaGlsZSBVU0IKKworQXMgZmFyIGFzIHRoZSBBdWRpb2hpbGUgVVNCIGRldmljZSBpcyBjb25jZXJuZWQsIHRoaXMgdmFsdWUgbGV0IHRoZSB1c2VyIAorc3BlY2lmeToKKyAqIHRoZSBzYW1wbGUgZGVwdGgKKyAqIHRoZSBzYW1wbGUgcmF0ZQorICogd2hldGhlciB0aGUgRGkgcG9ydCBpcyB1c2VkIG9yIG5vdCAKKworSGVyZSBpcyBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGRldmljZV9zZXR1cCB2YWx1ZXMgZm9yIHRoaXMgZGV2aWNlOgorICogZGV2aWNlX3NldHVwPTB4MDAgKG9yIG9taXR0ZWQpCisgICAtIEFsc2EgZHJpdmVyIGRlZmF1bHQgbW9kZQorICAgLSBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHNldHVwcyB0aGF0IGRvIG5vdCB1c2UgdGhpcyAKKyAgICAgcGFyYW1ldGVyIGJ5IG5vdCBpbnRyb2R1Y2luZyBhbnkgY2hhbmdlCisgICAtIHJlc3VsdHMgc29tZXRpbWVzIGluIGNvcnJ1cHRlZCBzb3VuZCBhcyBkZWNyaWJlZCBlYXJsaWVyCisgKiBkZXZpY2Vfc2V0dXA9MHgwMQorICAgLSAxNmJpdHMgNDhrSHogbW9kZSB3aXRoIERpIGRpc2FibGVkCisgICAtIEFpLEFvLERvIGNhbiBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUKKyAgIC0gaHc6MSwwIGlzIG5vdCBhdmFpbGFibGUgaW4gY2FwdHVyZSBtb2RlCisgICAtIGh3OjEsMiBpcyBub3QgYXZhaWxhYmxlCisgKiBkZXZpY2Vfc2V0dXA9MHgxMQorICAgLSAxNmJpdHMgNDhrSHogbW9kZSB3aXRoIERpIGVuYWJsZWQKKyAgIC0gQWksQW8sRGksRG8gY2FuIGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZQorICAgLSBodzoxLDAgaXMgYXZhaWxhYmxlIGluIGNhcHR1cmUgbW9kZQorICAgLSBodzoxLDIgaXMgbm90IGF2YWlsYWJsZQorICogZGV2aWNlX3NldHVwPTB4MDkKKyAgIC0gMjRiaXRzIDQ4a0h6IG1vZGUgd2l0aCBEaSBkaXNhYmxlZAorICAgLSBBaSxBbyxEbyBjYW4gYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lCisgICAtIGh3OjEsMCBpcyBub3QgYXZhaWxhYmxlIGluIGNhcHR1cmUgbW9kZQorICAgLSBodzoxLDIgaXMgbm90IGF2YWlsYWJsZQorICogZGV2aWNlX3NldHVwPTB4MTkKKyAgIC0gMjRiaXRzIDQ4a0h6IG1vZGUgd2l0aCBEaSBlbmFibGVkCisgICAtIDMgcG9ydHMgZnJvbSB7QWksQW8sRGksRG99IGNhbiBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUKKyAgIC0gaHc6MSwwIGlzIGF2YWlsYWJsZSBpbiBjYXB0dXJlIG1vZGUgYW5kIGFuIGFjdGl2ZSBkaWdpdGFsIHNvdXJjZSBtdXN0IGJlIAorICAgICBjb25uZWN0ZWQgdG8gRGkKKyAgIC0gaHc6MSwyIGlzIG5vdCBhdmFpbGFibGUKKyAqIGRldmljZV9zZXR1cD0weDBEIG9yIDB4MTAKKyAgIC0gMjRiaXRzIDk2a0h6IG1vZGUKKyAgIC0gRGkgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvciB0aGlzIG1vZGUgYnV0IGRvZXMgbm90IG5lZWQgdG8gYmUgY29ubmVjdGVkIAorICAgICB0byBhbiBhY3RpdmUgc291cmNlCisgICAtIE9ubHkgMSBwb3J0IGZyb20ge0FpLEFvLERpLERvfSBjYW4gYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lCisgICAtIGh3OjEsMCBpcyBhdmFpbGFibGUgaW4gY2FwdHVyZWQgbW9kZQorICAgLSBodzoxLDIgaXMgbm90IGF2YWlsYWJsZQorICogZGV2aWNlX3NldHVwPTB4MDMKKyAgIC0gMTZiaXRzIDQ4a0h6IG1vZGUgd2l0aCBvbmx5IHRoZSBEbyBwb3J0IGVuYWJsZWQgCisgICAtIEFDMyB3aXRoIERUUyBwYXNzdGhydSAobm90IHRlc3RlZCkKKyAgIC0gQ2F1dGlvbiB3aXRoIHRoaXMgc2V0dXAgdGhlIERvIHBvcnQgaXMgbWFwcGVkIHRvIHRoZSBwY20gZGV2aWNlIGh3OjEsMAorCisyLjIuMi4yIC0gU2V0dGluZyBhbmQgc3dpdGNoaW5nIGNvbmZpZ3VyYXRpb25zIHdpdGggdGhlIGRldmljZV9zZXR1cCBwYXJhbWV0ZXIKKworVGhlIHBhcmFtZXRlciBjYW4gYmUgZ2l2ZW46CisgKiBCeSBtYW51YWxseSBwcm9iaW5nIHRoZSBkZXZpY2UgKGFzIHJvb3QpOgorICAgIyBtb2Rwcm9iZSAtciBzbmQtdXNiLWF1ZGlvCisgICAjIG1vZHByb2JlIHNuZC11c2ItYXVkaW8gaW5kZXg9MSBkZXZpY2Vfc2V0dXA9MHgwOQorICogT3Igd2hpbGUgY29uZmlndXJpbmcgdGhlIG1vZHVsZXMgb3B0aW9ucyBpbiB5b3VyIG1vZHVsZXMgY29uZmlndXJhdGlvbiBmaWxlCisgICAtIEZvciBGZWRvcmEgZGlzdHJpYnV0aW9ucywgZWRpdCB0aGUgL2V0Yy9tb2Rwcm9iZS5jb25mIGZpbGU6CisgICAgICAgYWxpYXMgc25kLWNhcmQtMSBzbmQtdXNiLWF1ZGlvCisgICAgICAgb3B0aW9ucyBzbmQtdXNiLWF1ZGlvIGluZGV4PTEgZGV2aWNlX3NldHVwPTB4MDkKKworSU1QT1JUQU5UIE5PVEUgV0hFTiBTV0lUQ0hJTkcgQ09ORklHVVJBVElPTjoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFlvdSBtYXkgbmVlZCB0byBfZmlyc3RfIGludGlhbGl6ZSB0aGUgbW9kdWxlIHdpdGggdGhlIGNvcnJlY3QgZGV2aWNlX3NldHVwIAorICAgcGFyYW1ldGVyIGFuZCBfb25seV9hZnRlcl8gdHVybiBvbiB0aGUgQXVkaW9waGlsZSBVU0IgZGV2aWNlCisgKiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSB3aGVuIHN3aXRjaGluZyB0aGUgc2FtcGxlIGRlcHRoOgorICAgLSBmaXJzdCB0cnVuIG9mZiB0aGUgZGV2aWNlCisgICAtIGRlLXJlZ2lzdGVyIHRoZSBzbmQtdXNiLWF1ZGlvIG1vZHVsZQorICAgLSBjaGFuZ2UgdGhlIGRldmljZV9zZXR1cCBwYXJhbWV0ZXIgKGJ5IGVpdGhlciBtYW51YWxseSByZXByb2JpbmcgdGhlIG1vZHVsZSAKKyAgICAgb3IgY2hhbmdpbmcgbW9kcHJvYmUuY29uZikKKyAgIC0gdHVybiBvbiB0aGUgZGV2aWNlCisKKzIuMi4yLjMgLSBBdWRpb3BoaWxlIFVTQidzIGRldmljZV9zZXR1cCBzdHJ1Y3R1cmUKKworSWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlX3NldHVwIG1hZ2ljIG51bWJlcnMgZm9yIHRoZSBBdWRpb3BoaWxlIAorVVNCLCB5b3UgbmVlZCBzb21lIHZlcnkgYmFzaWMgdW5kZXJzdGFuZGluZyBvZiBiaW5hcnkgY29tcHV0YXRpb24uIEhvd2V2ZXIsIAordGhpcyBpcyBub3QgcmVxdWlyZWQgdG8gdXNlIHRoZSBwYXJhbWV0ZXIgYW5kIHlvdSBtYXkgc2tpcCB0aGkgc2VjdGlvbi4KKworVGhlIGRldmljZV9zZXR1cCBpcyBvbmUgYnl0ZSBsb25nIGFuZCBpdHMgc3RydWN0dXJlIGlzIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKyAgICAgICB8IGI3fCBiNnwgYjV8IGI0fCBiM3wgYjJ8IGIxfCBiMHwKKyAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKyAgICAgICB8IDAgfCAwIHwgMCB8IERpfDI0Qnw5Nkt8RFRTfFNFVHwKKyAgICAgICArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKworV2hlcmU6CisgKiBiMCBpcyB0aGUgIlNFVCIgYml0CisgICAtIGl0IE1VU1QgYmUgc2V0IGlmIGRldmljZV9zZXR1cCBpcyBpbml0aWFsaXplZCAKKyAqIGIxIGlzIHRoZSAiRFRTIiBiaXQKKyAgIC0gaXQgaXMgc2V0IG9ubHkgZm9yIERpZ2l0YWwgb3V0cHV0IHdpdGggRFRTL0FDMworICAgLSB0aGlzIHNldHVwIGlzIG5vdCB0ZXN0ZWQKKyAqIGIyIGlzIHRoZSBSYXRlIHNlbGVjdGlvbiBmbGFnCisgICAtIFdoZW4gc2V0IHRvICIxIiB0aGUgcmF0ZSByYW5nZSBpcyA0OC4xLTk2a0h6CisgICAtIE90aGVyd2lzZSB0aGUgc2FtcGxlIHJhdGUgcmFuZ2UgaXMgOC00OGtIegorICogYjMgaXMgdGhlIGJpdCBkZXB0aCBzZWxlY3Rpb24gZmxhZworICAgLSBXaGVuIHNldCB0byAiMSIgc2FtcGxlcyBhcmUgMjRiaXRzIGxvbmcKKyAgIC0gT3RoZXJ3aXNlIHRoZXkgYXJlIDE2Yml0cyBsb25nCisgICAtIE5vdGUgdGhhdCBiMiBpbXBsaWVzIGIzIGFzIHRoZSA5NmtIeiBtb2RlIGlzIG9ubHkgc3VwcG9ydGVkIGZvciAyNCBiaXRzIAorICAgICBzYW1wbGVzCisgKiBiNCBpcyB0aGUgRGlnaXRhbCBpbnB1dCBmbGFnCisgICAtIFdoZW4gc2V0IHRvICIxIiB0aGUgZGV2aWNlIGFzc3VtZXMgdGhhdCBhbiBhY3RpdmUgZGlnaXRhbCBzb3VyY2UgaXMgCisgICAgIGNvbm5lY3RlZCAKKyAgIC0gWW91IHNob3VsZG4ndCBlbmFibGUgRGkgaWYgbm8gc291cmNlIGlzIHNlZW4gb24gdGhlIHBvcnQgKHRoaXMgbGVhZHMgdG8gCisgICAgIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMpCisgICAtIGI0IGlzIGltcGxpZWQgYnkgYjIgKHNpbmNlIG9ubHkgb25lIHBvcnQgaXMgZW5hYmxlZCBhdCBhIHRpbWUgbm8gc3luY2ggCisgICAgIGVycm9yIGNhbiBvY2N1cikgCisgKiBiNSB0byBiNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VzLCBhbmQgbXVzdCBiZSBzZXQgdG8gIjAiCisgICAtIG1pZ2h0IGJlY29tZSBBbywgRG8sIEFpLCBmb3IgYjcsIGI2LCBiNCByZXNwZWN0aXZlbHkKKworQ2F1dGlvbjoKKyAqIHRoZXJlIGlzIG5vIGNoZWNrIG9uIHRoZSB2YWx1ZSB5b3Ugd2lsbCBnaXZlIHRvIGRldmljZV9zZXR1cAorICAgLSBmb3IgaW5zdGFuY2UgY2hvb3NpbmcgMHgwNSAoMTZiaXRzIDk2a0h6KSB3aWxsIGZhaWwgYmFjayB0byAweDA5IHNpbmNlIAorICAgICBiMiBpbXBsaWVzIGIzLiBCdXQgX3RoZXJlX3dpbGxfYmVfbm9fd2FybmluZ18gaW4gL3Zhci9sb2cvbWVzc2FnZXMKKyAqIEhhcmR3YXJlIGNvbnN0cmFpbnRzIGR1ZSB0byB0aGUgVVNCIGJ1cyBsaW1pdGF0aW9uIGFyZW4ndCBjaGVja2VkCisgICAtIGNob29zaW5nIGIyIHdpbGwgcHJlcGFyZSBhbGwgaW50ZXJmYWNlcyBmb3IgMjRiaXRzLzk2a0h6IGJ1dCB5b3UnbGwKKyAgICAgb25seSBiZSBhYmxlIHRvIHVzZSBvbmUgYXQgdGhlIHNhbWUgdGltZQorCisyLjIuMyAtICBVU0IgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhpcyBkZXZpY2UKKworWW91IG1heSBzYWZlbHkgc2tpcCB0aGlzIHNlY3Rpb24gaWYgeW91J3JlIG5vdCBpbnRlcnJlc3RlZCBpbiBkcml2ZXIgCitkZXZlbG9wbWVudC4KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBzb21lIGludGVybmFscyBhc3BlY3Qgb2YgdGhlIGRldmljZSBhbmQgc3VtbWFyaXplIHRoZSAKK2RhdGEgSSBnb3QgYnkgdXNiLXNub29waW5nIHRoZSB3aW5kb3dzIGFuZCBsaW51eCBkcml2ZXJzLgorCitUaGUgTS1BdWRpbyBBdWRpb3BoaWxlIFVTQiBoYXMgNyBVU0IgSW50ZXJmYWNlczoKK2EgIlVTQiBpbnRlcmZhY2UiOgorICogVVNCIEludGVyZmFjZSBuYi4wCisgKiBVU0IgSW50ZXJmYWNlIG5iLjEKKyAgIC0gQXVkaW8gQ29udHJvbCBmdW5jdGlvbgorICogVVNCIEludGVyZmFjZSBuYi4yCisgICAtIEFuYWxvZyBPdXRwdXQKKyAqIFVTQiBJbnRlcmZhY2UgbmIuMworICAgLSBEaWdpdGFsIE91dHB1dAorICogVVNCIEludGVyZmFjZSBuYi40CisgICAtIEFuYWxvZyBJbnB1dAorICogVVNCIEludGVyZmFjZSBuYi41CisgICAtIERpZ2l0YWwgSW5wdXQKKyAqIFVTQiBJbnRlcmZhY2UgbmIuNgorICAgLSBNSURJIGludGVyZmFjZSBjb21wbGlhbnQgd2l0aCB0aGUgTUlESU1BTiBxdWlyayAKKworRWFjaCBpbnRlcmZhY2UgaGFzIDUgYWx0c2V0dGluZ3MgKEFsdFNldCAxLDIsMyw0LDUpIGV4Y2VwdDoKKyAqIEludGVyZmFjZSAzIChEaWdpdGFsIE91dCkgaGFzIGFuIGV4dHJhIEFsc2V0IG5iLjYgCisgKiBJbnRlcmZhY2UgNSAoRGlnaXRhbCBJbikgZG9lcyBub3QgaGF2ZSBBbHNldCBuYi4zIGFuZCA1IAorCitIZXJlIGlzIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIEFsdFNldHRpbmdzIGNhcGFiaWxpdGllczoKKyAqIEFsdFNldHRpbmdzIDEgY29ycmVzcG9uZHMgdG8KKyAgLSAyNC1iaXQgZGVwdGgsIDQ4LjEtOTZrSHogc2FtcGxlIG1vZGUKKyAgLSBBZGFwdGl2ZSBwbGF5YmFjayAoQW8gYW5kIERvKSwgU3luY2ggY2FwdHVyZSAoQWkpLCBvciBBc3luY2ggY2FwdHVyZSAoRGkpCisgKiBBbHRTZXR0aW5ncyAyIGNvcnJlc3BvbmRzIHRvCisgIC0gMjQtYml0IGRlcHRoLCA4LTQ4a0h6IHNhbXBsZSBtb2RlCisgIC0gQXN5bmNoIGNhcHR1cmUgYW5kIHBsYXliYWNrICAoQW8sQWksRG8sRGkpCisgKiBBbHRTZXR0aW5ncyAzIGNvcnJlc3BvbmRzIHRvCisgIC0gMjQtYml0IGRlcHRoLCA4LTQ4a0h6IHNhbXBsZSBtb2RlCisgIC0gU3luY2ggY2FwdHVyZSAoQWkpIGFuZCBBZGFwdGl2ZSBwbGF5YmFjayAoQW8sRG8pCisgKiBBbHRTZXR0aW5ncyA0IGNvcnJlc3BvbmRzIHRvCisgIC0gMTYtYml0IGRlcHRoLCA4LTQ4a0h6IHNhbXBsZSBtb2RlCisgIC0gQXN5bmNoIGNhcHR1cmUgYW5kIHBsYXliYWNrICAoQW8sQWksRG8sRGkpCisgKiBBbHRTZXR0aW5ncyA1IGNvcnJlc3BvbmRzIHRvCisgIC0gMTYtYml0IGRlcHRoLCA4LTQ4a0h6IHNhbXBsZSBtb2RlCisgIC0gU3luY2ggY2FwdHVyZSAoQWkpIGFuZCBBZGFwdGl2ZSBwbGF5YmFjayAoQW8sRG8pCisgKiBBbHRTZXR0aW5ncyA2IGNvcnJlc3BvbmRzIHRvCisgIC0gMTYtYml0IGRlcHRoLCA4LTQ4a0h6IHNhbXBsZSBtb2RlCisgIC0gU3luY2ggcGxheWJhY2sgKERvKSwgYXVkaW8gZm9ybWF0IHR5cGUgSUlJIElFQzE5MzdfQUMtMworCitJbiBvcmRlciB0byBlbnN1cmUgYSBjb3JyZWN0IGludGlhbGl6YXRpb24gb2YgdGhlIGRldmljZSwgdGhlIGRyaXZlciAKK19tdXN0X2tub3dfIGhvdyB0aGUgZGV2aWNlIHdpbGwgYmUgdXNlZDoKKyAqIGlmIERUUyBpcyBjaG9vc2VuLCBvbmx5IEludGVyZmFjZSAyIHdpdGggQWx0U2V0IG5iLjYgbXVzdCBiZQorICAgcmVnaXN0ZXJlZAorICogaWYgOTZLSHogb25seSBBbHRTZXRzIG5iLjEgb2YgZWFjaCBpbnRlcmZhY2UgbXVzdCBiZSBzZWxlY3RlZAorICogaWYgc2FtcGxlcyBhcmUgdXNpbmcgMjRiaXRzLzQ4S0h6IHRoZW4gQWx0U2V0IDIgbXVzdCBtZSB1c2VkIGlmCisgICBEaWdpdGFsIGlucHV0IGlzIGNvbm5lY3RlZCwgYW5kIG9ubHkgQWx0U2V0IG5iLjMgaWYgRGlnaXRhbCBpbnB1dAorICAgaXMgbm90IGNvbm5lY3RlZAorICogaWYgc2FtcGxlcyBhcmUgdXNpbmcgMTZiaXRzLzQ4S0h6IHRoZW4gQWx0U2V0IDQgbXVzdCBtZSB1c2VkIGlmCisgICBEaWdpdGFsIGlucHV0IGlzIGNvbm5lY3RlZCwgYW5kIG9ubHkgQWx0U2V0IG5iLjUgaWYgRGlnaXRhbCBpbnB1dAorICAgaXMgbm90IGNvbm5lY3RlZAorCitXaGVuIGRldmljZV9zZXR1cCBpcyBnaXZlbiBhcyBhIHBhcmFtZXRlciB0byB0aGUgc25kLXVzYi1hdWRpbyBtb2R1bGUsIHRoZSAKK3BhcnNlX2F1ZGlvX2VucG9pbnQgZnVuY3Rpb24gdXNlcyBhIHF1aXJrIGNhbGxlZCAKKyJhdWRpb3BoaWxlX3NraXBfc2V0dGluZ19xdWlyayIgaW4gb3JkZXIgdG8gcHJldmVudCBBbHRTZXR0aW5ncyBub3QgCitjb3JyZXNwb25kaW5nIHRvIGRldmljZV9zZXR1cCBmcm9tIGJlaW5nIHJlZ2lzdGVyZWQgaW4gdGhlIGRyaXZlci4KKworMyAtIEF1ZGlvcGhpbGUgVVNCIGFuZCBKYWNrIHN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHN1cHBvcnQgb2YgdGhlIEF1ZGlvcGhpbGUgVVNCIGRldmljZSBpbiBKYWNrLgorVGhlIG1haW4gaXNzdWUgcmVnYXJkaW5nIHRoaXMgc3VwcG9ydCBpcyB0aGF0IHRoZSBkZXZpY2UgaXMgQmlnIEVuZGlhbiAKK2NvbXBsaWFudC4KKworMy4xIC0gVXNpbmcgdGhlIHBsdWcgYWxzYSBwbHVnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0phY2sgZG9lc24ndCBkaXJlY3RseSBzdXBwb3J0IGJpZyBlbmRpYW4gZGV2aWNlcy4gVGh1cywgb25lIHdheSB0byBoYXZlIHN1cHBvcnQgCitmb3IgdGhpcyBkZXZpY2Ugd2l0aCBBbHNhIGlzIHRvIHVzZSB0aGUgQWxzYSAicGx1ZyIgY29udmVydGVyLgorCitGb3IgaW5zdGFuY2UgaGVyZSBpcyBvbmUgd2F5IHRvIHJ1biBKYWNrIHdpdGggMiBwbGF5YmFjayBjaGFubmVscyBvbiBBbyBhbmQgMiAKK2NhcHR1cmUgY2hhbm5lbHMgZnJvbSBBaToKKyAgJSBqYWNrZCAtUiAtZGFsc2EgLWRwbHVnaHc6MSAtcjQ4MDAwIC1wMjU2IC1uMiAtRCAtQ3BsdWdodzoxLDEKKworCitIb3dldmVyIHlvdSBtYXkgc2VlIHRoZSBmb2xsb3dpbmcgd2FybmluZyBtZXNzYWdlOgorIllvdSBhcHBlYXIgdG8gYmUgdXNpbmcgdGhlIEFMU0Egc29mdHdhcmUgInBsdWciIGxheWVyLCBwcm9iYWJseSBhIHJlc3VsdCBvZiAKK3VzaW5nIHRoZSAiZGVmYXVsdCIgQUxTQSBkZXZpY2UuIFRoaXMgaXMgbGVzcyBlZmZpY2llbnQgdGhhbiBpdCBjb3VsZCBiZS4gCitDb25zaWRlciB1c2luZyBhIGhhcmR3YXJlIGRldmljZSBpbnN0ZWFkIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBwbHVnIGxheWVyLiIKKworCiszLjIgLSBQYXRjaGluZyBhbHNhIHRvIHVzZSBkaXJlY3QgcGNtIGRldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBwYXRjaCBmb3IgSmFjayBieSBBbmRyZWFzIFN0ZWlubWV0eiBhZGRzIHN1cHBvcnQgZm9yIEJpZyBFbmRpYW4gZGV2aWNlcy4gCitIb3dldmVyIGl0IGhhcyBub3QgYmVlbiBpbmNsdWRlZCBpbiB0aGUgQ1ZTIHRyZWUuCisKK1lvdSBjYW4gZmluZCBpdCBhdCB0aGUgZm9sbG93aW5nIFVSTDoKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci9pbmRleC5waHA/ZnVuYz1kZXRhaWwmYWlkPTEyODk2ODImZ3JvdXBfaWQ9Mzk2ODcmCithdGlkPTQyNTkzOQorCitBZnRlciBoYXZpbmcgYXBwbGllZCB0aGUgcGF0Y2ggeW91IGNhbiBydW4gamFja2Qgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgCitsaW5lOgorICAlIGphY2tkIC1SIC1kYWxzYSAtUGh3OjEsMCAtcjQ4MDAwIC1wMTI4IC1uMiAtRCAtQ2h3OjEsMQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKaW5kZXggNDI1MTA4NS4uNmRjOWQ5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApAQCAtMTgzNCw3ICsxODM0LDcgQEAKICAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9mb3JtYXQoY2hpcCwgcnVudGltZS0+Zm9ybWF0KTsKICAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9yYXRlKGNoaXAsIHJ1bnRpbWUtPnJhdGUpOwogICAgICAgICAgIG15Y2hpcF9zZXRfY2hhbm5lbHMoY2hpcCwgcnVudGltZS0+Y2hhbm5lbHMpOwotICAgICAgICAgIG15Y2hpcF9zZXRfZG1hX3NldHVwKGNoaXAsIHJ1bnRpbWUtPmRtYV9hcmVhLAorICAgICAgICAgIG15Y2hpcF9zZXRfZG1hX3NldHVwKGNoaXAsIHJ1bnRpbWUtPmRtYV9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPmJ1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPnBlcmlvZF9zaXplKTsKICAgICAgICAgICByZXR1cm4gMDsKQEAgLTMzODgsNyArMzM4OCw3IEBACiAgICAgICAgICAgLm5hbWUgPSAiUENNIFBsYXliYWNrIFN3aXRjaCIsCiAgICAgICAgICAgLmluZGV4ID0gMCwKICAgICAgICAgICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKLSAgICAgICAgICAucHJpdmF0ZV92YWx1ZXMgPSAweGZmZmYsCisgICAgICAgICAgLnByaXZhdGVfdmFsdWUgPSAweGZmZmYsCiAgICAgICAgICAgLmluZm8gPSBteV9jb250cm9sX2luZm8sCiAgICAgICAgICAgLmdldCA9IG15X2NvbnRyb2xfZ2V0LAogICAgICAgICAgIC5wdXQgPSBteV9jb250cm9sX3B1dApAQCAtMzQ0OSw3ICszNDQ5LDcgQEAKICAgICAgIDwvcGFyYT4KIAogICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV92YWx1ZXM8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucworICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnByaXZhdGVfdmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucwogICAgICAgYW4gYXJiaXRyYXJ5IGxvbmcgaW50ZWdlciB2YWx1ZSBmb3IgdGhpcyByZWNvcmQuIFdoZW4gdXNpbmcKICAgICAgIGdlbmVyaWMgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiwKICAgICAgIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgppbmRleCAxNWQ0ZmI5Li5mMDRiYTZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCkBAIC02OSw3ICs2OSw3IEBACiAKIFdhcm5pbmcsIHRoZSBvcHRpb25zIGZvciBkaWZmZXJlbnQgY2FyZHMgc29tZXRpbWUgdXNlIGRpZmZlcmVudCBuYW1lcyAKIGZvciB0aGUgc2FtZSBvciBhIHNpbWlsYXIgZmVhdHVyZSAoZG1hMT0gdmVyc3VzIGRtYTE2PSkuICBBcyBhIGxhc3QgCi1yZXNvcnQsIGluc3BlY3QgdGhlIGNvZGUgKHNlYXJjaCBmb3IgTU9EVUxFX1BBUk0pLgorcmVzb3J0LCBpbnNwZWN0IHRoZSBjb2RlIChzZWFyY2ggZm9yIG1vZHVsZV9wYXJhbSkuCiAKIE5vdGVzOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9jczQ2eHggYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9jczQ2eHgKaW5kZXggODhkNmNmOC4uYjU0NDMyNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvY3M0Nnh4CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2NzNDZ4eApAQCAtODgsNyArODgsNyBAQAogCiBNT0RVTEVfUEFSTVMgZGVmaW5pdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTU9EVUxFX1BBUk0oZGVmYXVsdG9yZGVyLCAiaSIpOworbW9kdWxlX3BhcmFtKGRlZmF1bHRvcmRlciwgdWxvbmcsIDApOwogZGVmYXVsdG9yZGVyPU4KIHdoZXJlIE4gaXMgYSB2YWx1ZSBmcm9tIDEgdG8gMTIKIFRoZSBidWZmZXIgb3JkZXIgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgZG1hIGJ1ZmZlciBmb3IgdGhlIGRyaXZlci4KQEAgLTk4LDE4ICs5OCwxOCBAQAogcmF0aGVyIHRoYW4gNjRrIGFzIHNvbWUgb2YgdGhlIGdhbWVzIHdvcmsgbW9yZSByZXNwb25zaXZlbHkuCiAoMl5OKSAqIFBBR0VfU0laRSA9IGFsbG9jYXRlZCBidWZmZXIgc2l6ZQogCi1NT0RVTEVfUEFSTShjc19kZWJ1Z2xldmVsLCAiaSIpOwotTU9EVUxFX1BBUk0oY3NfZGVidWdtYXNrLCAiaSIpOworbW9kdWxlX3BhcmFtKGNzX2RlYnVnbGV2ZWwsIHVsb25nLCAwNjQ0KTsKK21vZHVsZV9wYXJhbShjc19kZWJ1Z21hc2ssIHVsb25nLCAwNjQ0KTsKIGNzX2RlYnVnbGV2ZWw9TgogY3NfZGVidWdtYXNrPTB4TU1NTU1NTU0KIHdoZXJlIE4gaXMgYSB2YWx1ZSBmcm9tIDAgKG5vIGRlYnVnIHByaW50ZnMpLCB0byA5IChtYXhpbXVtKQogMHhNTU1NTU1NTSBpcyBhIGRlYnVnIG1hc2sgY29ycmVzcG9uZGluZyB0byB0aGUgQ1NfeHh4IGJpdHMgKHNlZSBkcml2ZXIgc291cmNlKS4KIAotTU9EVUxFX1BBUk0oaGVyY3VsZXNfZWdwaW9fZGlzYWJsZSwgImkiKTsKK21vZHVsZV9wYXJhbShoZXJjdWxlc19lZ3Bpb19kaXNhYmxlLCB1bG9uZywgMCk7CiBoZXJjdWxlc19lZ3Bpb19kaXNhYmxlPU4KIHdoZXJlIE4gaXMgYSAwIChlbmFibGUgZWdwaW8pLCBvciBhIDEgKGRpc2FibGUgZWdwaW8gc3VwcG9ydCkKIAotTU9EVUxFX1BBUk0oaW5pdGRlbGF5LCAiaSIpOworbW9kdWxlX3BhcmFtKGluaXRkZWxheSwgdWxvbmcsIDApOwogaW5pdGRlbGF5PU4KIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1pbGxlc2NvbmQgZGVsYXkgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbgogY29kZSBwcmlvciB0byBwb3dlcmluZyB1cCB0aGUgUExMLiAgT24gbGFwdG9wcyB0aGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvCkBAIC0xMTgsMTkgKzExOCwxOSBAQAogcHJvcGVybHkgZGVsYXkgdGhlIHJlcXVpcmVkIHRpbWUuICBBbHNvLCBpZiB0aGUgc3lzdGVtIGlzIGJvb3RlZCB1bmRlciBBQyBwb3dlcgogYW5kIHRoZW4gdGhlIHBvd2VyIHJlbW92ZWQsIHRoZSBtZGVsYXkoKS91ZGVsYXkoKSBmdW5jdGlvbnMgd2lsbCBub3QgZGVsYXkgcHJvcGVybHkuCiAgCi1NT0RVTEVfUEFSTShwb3dlcmRvd24sICJpIik7Cittb2R1bGVfcGFyYW0ocG93ZXJkb3duLCB1bG9uZywgMCk7CiBwb3dlcmRvd249Tgogd2hlcmUgTiBpcyAwIChkaXNhYmxlIGFueSBwb3dlcmRvd24gb2YgdGhlIGludGVybmFsIGJsb2Nrcykgb3IgMSAoZW5hYmxlIHBvd2VyZG93bikKIAogCi1NT0RVTEVfUEFSTShleHRlcm5hbF9hbXAsICJpIik7Cittb2R1bGVfcGFyYW0oZXh0ZXJuYWxfYW1wLCBib29sLCAwKTsKIGV4dGVybmFsX2FtcD0xCiBpZiBOIGlzIHNldCB0byAxLCB0aGVuIGZvcmNlIGVuYWJsaW5nIHRoZSBFQVBEIHN1cHBvcnQgaW4gdGhlIHByaW1hcnkgQUM5NyBjb2RlYy4KIG92ZXJyaWRlIHRoZSBkZXRlY3Rpb24gbG9naWMgYW5kIGZvcmNlIHRoZSBleHRlcm5hbCBhbXAgYml0IGluIHRoZSBBQzk3IDB4MjYgcmVnaXN0ZXIKIHRvIGJlIHJlc2V0ICgwKS4gIEVBUEQgc2hvdWxkIGJlIDAgZm9yIHBvd2VydXAsIGFuZCAxIGZvciBwb3dlcmRvd24uICBUaGUgVlRCIFNhbnRhIENydXoKIGNhcmQgaGFzIGludmVydGVkIGxvZ2ljLCBzbyB0aGVyZSBpcyBhIHNwZWNpYWwgZnVuY3Rpb24gZm9yIHRoZXNlIGNhcmRzLgogCi1NT0RVTEVfUEFSTSh0aGlua3BhZCwgImkiKTsKK21vZHVsZV9wYXJhbSh0aGlua3BhZCwgYm9vbCwgMCk7CiB0aGlua3BhZD0xCiBpZiBOIGlzIHNldCB0byAxLCB0aGVuIGZvcmNlIGVuYWJsaW5nIHRoZSBjbGtydW4gZnVuY3Rpb25hbGl0eS4KIEN1cnJlbnRseSwgd2hlbiB0aGUgcGFydCBpcyBiZWluZyB1c2VkLCB0aGVuIGNsa3J1biBpcyBkaXNhYmxlZCBmb3IgdGhlIGVudGlyZSBzeXN0ZW0sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQgYi9Eb2N1bWVudGF0aW9uL3NwaW5sb2Nrcy50eHQKaW5kZXggYzIxMjI5OS4uYTY2MWQ2OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zcGlubG9ja3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3BpbmxvY2tzLnR4dApAQCAtOSw3ICs5LDcgQEAKICAgIHN0YXRpYyBpbnQgX19pbml0IHh4eF9pbml0KHZvaWQpCiAgICB7CiAgICAJc3Bpbl9sb2NrX2luaXQoJnh4eF9sb2NrKTsKLQlyd19sb2NrX2luaXQoJnh4eF9yd19sb2NrKTsKKwlyd2xvY2tfaW5pdCgmeHh4X3J3X2xvY2spOwogCS4uLgogICAgfQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAppbmRleCA5ZjExZDM2Li5iMGM3YWI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKQEAgLTE2LDYgKzE2LDcgQEAKIAogQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBtaWdodCAoZGVwZW5kaW5nIG9uIHlvdXIgY29uZmlndXJhdGlvbikKIHNob3cgdXAgaW4gL3Byb2Mvc3lzL2tlcm5lbDoKKy0gYWNwaV92aWRlb19mbGFncwogLSBhY2N0CiAtIGNvcmVfcGF0dGVybgogLSBjb3JlX3VzZXNfcGlkCkBAIC01Nyw2ICs1OCwxNSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCithY3BpX3ZpZGVvX2ZsYWdzOgorCitmbGFncworCitTZWUgRG9jKi9rZXJuZWwvcG93ZXIvdmlkZW8udHh0LCBpdCBhbGxvd3MgbW9kZSBvZiB2aWRlbyBib290IHRvIGJlCitzZXQgZHVyaW5nIHJ1biB0aW1lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiBhY2N0OgogCiBoaWdod2F0ZXIgbG93d2F0ZXIgZnJlcXVlbmN5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9ldDYxeDI1MS50eHQgYi9Eb2N1bWVudGF0aW9uL3VzYi9ldDYxeDI1MS50eHQKaW5kZXggYjQ0ZGRhNC4uMjkzNDAyOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvZXQ2MXgyNTEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2V0NjF4MjUxLnR4dApAQCAtMTc2LDYgKzE3NiwxNCBAQAogICAgICAgICAgICAgICAgIDEgPSBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIChzYXZlIG1lbW9yeSkKIERlZmF1bHQ6ICAgICAgICAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgZnJhbWVfdGltZW91dAorVHlwZTogICAgICAgICAgIHVpbnQgYXJyYXkgKG1pbiA9IDAsIG1heCA9IDY0KQorU3ludGF4OiAgICAgICAgIDxuWywuLi5dPgorRGVzY3JpcHRpb246ICAgIFRpbWVvdXQgZm9yIGEgdmlkZW8gZnJhbWUgaW4gc2Vjb25kcy4gVGhpcyBwYXJhbWV0ZXIgaXMKKyAgICAgICAgICAgICAgICBzcGVjaWZpYyBmb3IgZWFjaCBkZXRlY3RlZCBjYW1lcmEuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZQorICAgICAgICAgICAgICAgIGNoYW5nZWQgYXQgcnVudGltZSB0aGFua3MgdG8gdGhlIC9zeXMgZmlsZXN5c3RlbSBpbnRlcmZhY2UuCitEZWZhdWx0OiAgICAgICAgMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTmFtZTogICAgICAgICAgIGRlYnVnCiBUeXBlOiAgICAgICAgICAgdXNob3J0CiBTeW50YXg6ICAgICAgICAgPG4+CkBAIC0yNjYsNyArMjc0LDcgQEAKIAogCiAxMC4gTm90ZXMgZm9yIFY0TDIgYXBwbGljYXRpb24gZGV2ZWxvcGVycwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFRoaXMgZHJpdmVyIGZvbGxvd3MgdGhlIFY0TDIgQVBJIHNwZWNpZmljYXRpb25zLiBJbiBwYXJ0aWN1bGFyLCBpdCBlbmZvcmNlcyB0d28KIHJ1bGVzOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9zbjljMTAyLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0CmluZGV4IGM2Yjc2NDEuLmI5NTdiZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0CkBAIC0xOTYsNiArMTk2LDE0IEBACiAgICAgICAgICAgICAgICAgMSA9IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmcgKHNhdmUgbWVtb3J5KQogRGVmYXVsdDogICAgICAgIDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBmcmFtZV90aW1lb3V0CitUeXBlOiAgICAgICAgICAgdWludCBhcnJheSAobWluID0gMCwgbWF4ID0gNjQpCitTeW50YXg6ICAgICAgICAgPG5bLC4uLl0+CitEZXNjcmlwdGlvbjogICAgVGltZW91dCBmb3IgYSB2aWRlbyBmcmFtZSBpbiBzZWNvbmRzLiBUaGlzIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgIHNwZWNpZmljIGZvciBlYWNoIGRldGVjdGVkIGNhbWVyYS4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlCisgICAgICAgICAgICAgICAgY2hhbmdlZCBhdCBydW50aW1lIHRoYW5rcyB0byB0aGUgL3N5cyBmaWxlc3lzdGVtIGludGVyZmFjZS4KK0RlZmF1bHQ6ICAgICAgICAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBOYW1lOiAgICAgICAgICAgZGVidWcKIFR5cGU6ICAgICAgICAgICB1c2hvcnQKIFN5bnRheDogICAgICAgICA8bj4gCkBAIC0zMjEsNiArMzI5LDcgQEAKIC0tLS0tLS0tLSAgLS0tLS0tLS0tLQogMHgwYzQ1ICAgICAweDYwMDEKIDB4MGM0NSAgICAgMHg2MDA1CisweDBjNDUgICAgIDB4NjAwNwogMHgwYzQ1ICAgICAweDYwMDkKIDB4MGM0NSAgICAgMHg2MDBkCiAweDBjNDUgICAgIDB4NjAyNApAQCAtMzcwLDYgKzM3OSw3IEBACiBNSS0wMzQzICAgICBNaWNyb24gVGVjaG5vbG9neSwgSW5jLgogT1Y3NjMwICAgICAgT21uaVZpc2lvbiBUZWNobm9sb2dpZXMsIEluYy4KIFBBUzEwNkIgICAgIFBpeEFydCBJbWFnaW5nLCBJbmMuCitQQVMyMDJCQ0EgICBQaXhBcnQgSW1hZ2luZywgSW5jLgogUEFTMjAyQkNCICAgUGl4QXJ0IEltYWdpbmcsIEluYy4KIFRBUzUxMTBDMUIgIFRhaXdhbiBBZHZhbmNlZCBTZW5zb3IgQ29ycG9yYXRpb24KIFRBUzUxMzBEMUIgIFRhaXdhbiBBZHZhbmNlZCBTZW5zb3IgQ29ycG9yYXRpb24KQEAgLTQ5Myw2ICs1MDMsNyBAQAogb3JkZXIpOgogCiAtIEx1Y2EgQ2FwZWxsbyBmb3IgdGhlIGRvbmF0aW9uIG9mIGEgd2ViY2FtOworLSBQaGlsaXBwZSBDb3ZhbCBmb3IgaGF2aW5nIGhlbHBlZCB0ZXN0aW5nIHRoZSBQQVMyMDJCQ0EgaW1hZ2Ugc2Vuc29yOwogLSBKb2FvIFJvZHJpZ28gRnV6YXJvLCBKb2FvIExpbWlyaW8sIENsYXVkaW8gRmlsaG8gYW5kIENhaW8gQmVnb3R0aSBmb3IgdGhlCiAgIGRvbmF0aW9uIG9mIGEgd2ViY2FtOwogLSBKb24gSG9sbHN0cm9tIGZvciB0aGUgZG9uYXRpb24gb2YgYSB3ZWJjYW07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi96YzAzMDEudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvemMwMzAxLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTUyNjJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvemMwMzAxLnR4dApAQCAtMCwwICsxLDI1NCBAQAorCisgICAgICAgICAgICAgICAgICAgIFpDMDMwMSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXIgZm9yIExpbnV4CisgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBEb2N1bWVudGF0aW9uIC0KKworCitJbmRleAorPT09PT0KKzEuICBDb3B5cmlnaHQKKzIuICBEaXNjbGFpbWVyCiszLiAgTGljZW5zZQorNC4gIE92ZXJ2aWV3IGFuZCBmZWF0dXJlcworNS4gIE1vZHVsZSBkZXBlbmRlbmNpZXMKKzYuICBNb2R1bGUgbG9hZGluZworNy4gIE1vZHVsZSBwYXJhbWV0ZXJzCis4LiAgU3VwcG9ydGVkIGRldmljZXMKKzkuICBOb3RlcyBmb3IgVjRMMiBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzCisxMC4gQ29udGFjdCBpbmZvcm1hdGlvbgorMTEuIENyZWRpdHMKKworCisxLiBDb3B5cmlnaHQKKz09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAyMDA2IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4KKworCisyLiBEaXNjbGFpbWVyCis9PT09PT09PT09PT09CitUaGlzIHNvZnR3YXJlIGlzIG5vdCBkZXZlbG9wZWQgb3Igc3BvbnNvcmVkIGJ5IFotU3RhciBNaWNyb2VsZWN0cm9uaWNzIENvcnAuCitUcmFkZW1hcmtzIGFyZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVyLgorCisKKzMuIExpY2Vuc2UKKz09PT09PT09PT0KK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKworNC4gT3ZlcnZpZXcgYW5kIGZlYXR1cmVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSB2aWRlbyBpbnRlcmZhY2Ugb2YgdGhlIGRldmljZXMgbW91bnRpbmcgdGhlIFpDMDMwMQorSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAuCisKK1RoZSBkcml2ZXIgcmVsaWVzIG9uIHRoZSBWaWRlbzRMaW51eDIgYW5kIFVTQiBjb3JlIG1vZHVsZXMuIEl0IGhhcyBiZWVuCitkZXNpZ25lZCB0byBydW4gcHJvcGVybHkgb24gU01QIHN5c3RlbXMgYXMgd2VsbC4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBaQzAzMDEgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIFVSTDoKK2h0dHA6Ly93d3cubGludXgtcHJvamVjdHMub3JnLworCitTb21lIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgZHJpdmVyIGFyZToKKworLSBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVmlkZW80TGludXgyIEFQSSAoc2VlIGFsc28gIk5vdGVzIGZvciBWNEwyCisgIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMiIHBhcmFncmFwaCk7CistIGF2YWlsYWJsZSBtbWFwIG9yIHJlYWQvcG9sbCBtZXRob2RzIGZvciB2aWRlbyBzdHJlYW1pbmcgdGhyb3VnaCBpc29jaHJvbm91cworICBkYXRhIHRyYW5zZmVyczsKKy0gYXV0b21hdGljIGRldGVjdGlvbiBvZiBpbWFnZSBzZW5zb3I7CistIHZpZGVvIGZvcm1hdCBpcyBzdGFuZGFyZCBKUEVHOworLSBkeW5hbWljIGRyaXZlciBjb250cm9sIHRoYW5rcyB0byB2YXJpb3VzIG1vZHVsZSBwYXJhbWV0ZXJzIChzZWUgIk1vZHVsZQorICBwYXJhbWV0ZXJzIiBwYXJhZ3JhcGgpOworLSB1cCB0byA2NCBjYW1lcmFzIGNhbiBiZSBoYW5kbGVkIGF0IHRoZSBzYW1lIHRpbWU7IHRoZXkgY2FuIGJlIGNvbm5lY3RlZCBhbmQKKyAgZGlzY29ubmVjdGVkIGZyb20gdGhlIGhvc3QgbWFueSB0aW1lcyB3aXRob3V0IHR1cm5pbmcgb2ZmIHRoZSBjb21wdXRlciwgaWYKKyAgdGhlIHN5c3RlbSBzdXBwb3J0cyBob3RwbHVnZ2luZzsKKworCis1LiBNb2R1bGUgZGVwZW5kZW5jaWVzCis9PT09PT09PT09PT09PT09PT09PT09CitGb3IgaXQgdG8gd29yayBwcm9wZXJseSwgdGhlIGRyaXZlciBuZWVkcyBrZXJuZWwgc3VwcG9ydCBmb3IgVmlkZW80TGludXggYW5kCitVU0IuCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSBtdXN0IGJlIGVuYWJsZWQgYW5kCitjb3JyZXNwb25kaW5nIG1vZHVsZXMgbXVzdCBiZSBjb21waWxlZDoKKworCSMgTXVsdGltZWRpYSBkZXZpY2VzCisJIworCUNPTkZJR19WSURFT19ERVY9bQorCisJIyBVU0Igc3VwcG9ydAorCSMKKwlDT05GSUdfVVNCPW0KKworSW4gYWRkaXRpb24sIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgYmVpbmcgdXNlZCwgdGhlIG1vZHVsZXMgYmVsb3cgYXJlCituZWNlc3Nhcnk6CisKKwkjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworCSMKKwlDT05GSUdfVVNCX0VIQ0lfSENEPW0KKwlDT05GSUdfVVNCX1VIQ0lfSENEPW0KKwlDT05GSUdfVVNCX09IQ0lfSENEPW0KKworVGhlIFpDMDMwMSBjb250cm9sbGVyIGFsc28gcHJvdmlkZXMgYSBidWlsdC1pbiBtaWNyb3Bob25lIGludGVyZmFjZS4gSXQgaXMKK3N1cHBvcnRlZCBieSB0aGUgVVNCIEF1ZGlvIGRyaXZlciB0aGFua3MgdG8gdGhlIEFMU0EgQVBJOgorCisJIyBTb3VuZAorCSMKKwlDT05GSUdfU09VTkQ9eQorCisJIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKwkjCisJQ09ORklHX1NORD1tCisKKwkjIFVTQiBkZXZpY2VzCisJIworCUNPTkZJR19TTkRfVVNCX0FVRElPPW0KKworQW5kIGZpbmFsbHk6CisKKwkjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKKwkjCisJQ09ORklHX1VTQl9aQzAzMDE9bQorCisKKzYuIE1vZHVsZSBsb2FkaW5nCis9PT09PT09PT09PT09PT09PQorVG8gdXNlIHRoZSBkcml2ZXIsIGl0IGlzIG5lY2Vzc2FyeSB0byBsb2FkIHRoZSAiemMwMzAxIiBtb2R1bGUgaW50byBtZW1vcnkKK2FmdGVyIGV2ZXJ5IG90aGVyIG1vZHVsZSByZXF1aXJlZDogInZpZGVvZGV2IiwgInVzYmNvcmUiIGFuZCwgZGVwZW5kaW5nIG9uCit0aGUgVVNCIGhvc3QgY29udHJvbGxlciB5b3UgaGF2ZSwgImVoY2ktaGNkIiwgInVoY2ktaGNkIiBvciAib2hjaS1oY2QiLgorCitMb2FkaW5nIGNhbiBiZSBkb25lIGFzIHNob3duIGJlbG93OgorCisJW3Jvb3RAbG9jYWxob3N0IGhvbWVdIyBtb2Rwcm9iZSB6YzAzMDEKKworQXQgdGhpcyBwb2ludCB0aGUgZGV2aWNlcyBzaG91bGQgYmUgcmVjb2duaXplZC4gWW91IGNhbiBpbnZva2UgImRtZXNnIiB0bworYW5hbHl6ZSBrZXJuZWwgbWVzc2FnZXMgYW5kIHZlcmlmeSB0aGF0IHRoZSBsb2FkaW5nIHByb2Nlc3MgaGFzIGdvbmUgd2VsbDoKKworCVt1c2VyQGxvY2FsaG9zdCBob21lXSQgZG1lc2cKKworCis3LiBNb2R1bGUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT0KK01vZHVsZSBwYXJhbWV0ZXJzIGFyZSBsaXN0ZWQgYmVsb3c6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOYW1lOiAgICAgICAgICAgdmlkZW9fbnIKK1R5cGU6ICAgICAgICAgICBzaG9ydCBhcnJheSAobWluID0gMCwgbWF4ID0gNjQpCitTeW50YXg6ICAgICAgICAgPC0xfG5bLC4uLl0+CitEZXNjcmlwdGlvbjogICAgU3BlY2lmeSBWNEwyIG1pbm9yIG1vZGUgbnVtYmVyOgorICAgICAgICAgICAgICAgIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgIG4gPSB1c2UgbWlub3IgbnVtYmVyIG4KKyAgICAgICAgICAgICAgICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gNjQgY2FtZXJhcyB0aGlzIHdheS4KKyAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZToKKyAgICAgICAgICAgICAgICB2aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byB0aGUgc2Vjb25kCisgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZCBjYW1lcmEgYW5kIHVzZSBhdXRvIGZvciB0aGUgZmlyc3Qgb25lIGFuZCBmb3IgZXZlcnkKKyAgICAgICAgICAgICAgICBvdGhlciBjYW1lcmEuCitEZWZhdWx0OiAgICAgICAgLTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBmb3JjZV9tdW5tYXAKK1R5cGU6ICAgICAgICAgICBib29sIGFycmF5IChtaW4gPSAwLCBtYXggPSA2NCkKK1N5bnRheDogICAgICAgICA8MHwxWywuLi5dPgorRGVzY3JpcHRpb246ICAgIEZvcmNlIHRoZSBhcHBsaWNhdGlvbiB0byB1bm1hcCBwcmV2aW91c2x5IG1hcHBlZCBidWZmZXIgbWVtb3J5CisgICAgICAgICAgICAgICAgYmVmb3JlIGNhbGxpbmcgYW55IFZJRElPQ19TX0NST1Agb3IgVklESU9DX1NfRk1UIGlvY3RsJ3MuIE5vdAorICAgICAgICAgICAgICAgIGFsbCB0aGUgYXBwbGljYXRpb25zIHN1cHBvcnQgdGhpcyBmZWF0dXJlLiBUaGlzIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgIHNwZWNpZmljIGZvciBlYWNoIGRldGVjdGVkIGNhbWVyYS4KKyAgICAgICAgICAgICAgICAwID0gZG8gbm90IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmcKKyAgICAgICAgICAgICAgICAxID0gZm9yY2UgbWVtb3J5IHVubWFwcGluZyAoc2F2ZSBtZW1vcnkpCitEZWZhdWx0OiAgICAgICAgMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTmFtZTogICAgICAgICAgIGZyYW1lX3RpbWVvdXQKK1R5cGU6ICAgICAgICAgICB1aW50IGFycmF5IChtaW4gPSAwLCBtYXggPSA2NCkKK1N5bnRheDogICAgICAgICA8blssLi4uXT4KK0Rlc2NyaXB0aW9uOiAgICBUaW1lb3V0IGZvciBhIHZpZGVvIGZyYW1lIGluIHNlY29uZHMuIFRoaXMgcGFyYW1ldGVyIGlzCisgICAgICAgICAgICAgICAgc3BlY2lmaWMgZm9yIGVhY2ggZGV0ZWN0ZWQgY2FtZXJhLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIGF0IHJ1bnRpbWUgdGhhbmtzIHRvIHRoZSAvc3lzIGZpbGVzeXN0ZW0gaW50ZXJmYWNlLgorRGVmYXVsdDogICAgICAgIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05hbWU6ICAgICAgICAgICBkZWJ1ZworVHlwZTogICAgICAgICAgIHVzaG9ydAorU3ludGF4OiAgICAgICAgIDxuPgorRGVzY3JpcHRpb246ICAgIERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6CisgICAgICAgICAgICAgICAgMCA9IG5vbmUgKHVzZSBjYXJlZnVsbHkpCisgICAgICAgICAgICAgICAgMSA9IGNyaXRpY2FsIGVycm9ycworICAgICAgICAgICAgICAgIDIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMKKyAgICAgICAgICAgICAgICAzID0gbW9yZSB2ZXJib3NlIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgTGV2ZWwgMyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5IG9uZSBkZXZpY2UKKyAgICAgICAgICAgICAgICBpcyB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuIEl0IGFsc28gc2hvd3Mgc29tZSBtb3JlIGluZm9ybWF0aW9ucworICAgICAgICAgICAgICAgIGFib3V0IHRoZSBoYXJkd2FyZSBiZWluZyBkZXRlY3RlZC4gVGhpcyBtb2R1bGUgcGFyYW1ldGVyIGNhbiBiZQorICAgICAgICAgICAgICAgIGNoYW5nZWQgYXQgcnVudGltZSB0aGFua3MgdG8gdGhlIC9zeXMgZmlsZXN5c3RlbSBpbnRlcmZhY2UuCitEZWZhdWx0OiAgICAgICAgMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKzguIFN1cHBvcnRlZCBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PQorTm9uZSBvZiB0aGUgbmFtZXMgb2YgdGhlIGNvbXBhbmllcyBhcyB3ZWxsIGFzIHRoZWlyIHByb2R1Y3RzIHdpbGwgYmUgbWVudGlvbmVkCitoZXJlLiBUaGV5IGhhdmUgbmV2ZXIgY29sbGFib3JhdGVkIHdpdGggdGhlIGF1dGhvciwgc28gbm8gYWR2ZXJ0aXNpbmcuCisKK0Zyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgYSBkcml2ZXIsIHdoYXQgdW5hbWJpZ3VvdXNseSBpZGVudGlmeSBhIGRldmljZSBhcmUKK2l0cyB2ZW5kb3IgYW5kIHByb2R1Y3QgVVNCIGlkZW50aWZpZXJzLiBCZWxvdyBpcyBhIGxpc3Qgb2Yga25vd24gaWRlbnRpZmllcnMgb2YKK2RldmljZXMgbW91bnRpbmcgdGhlIFpDMDMwMSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcHM6CisKK1ZlbmRvciBJRCAgUHJvZHVjdCBJRAorLS0tLS0tLS0tICAtLS0tLS0tLS0tCisweDA0MWUgICAgIDB4NDAxNworMHgwNDFlICAgICAweDQwMWMKKzB4MDQxZSAgICAgMHg0MDFlCisweDA0MWUgICAgIDB4NDAzNAorMHgwNDFlICAgICAweDQwMzUKKzB4MDQ2ZCAgICAgMHgwOGFlCisweDBhYzggICAgIDB4MDMwMQorMHgxMGZkICAgICAweDgwNTAKKworVGhlIGxpc3QgYWJvdmUgZG9lcyBub3QgaW1wbHkgdGhhdCBhbGwgdGhvc2UgZGV2aWNlcyB3b3JrIHdpdGggdGhpcyBkcml2ZXI6IHVwCit1bnRpbCBub3cgb25seSB0aGUgb25lcyB0aGF0IG1vdW50IHRoZSBmb2xsb3dpbmcgaW1hZ2Ugc2Vuc29ycyBhcmUgc3VwcG9ydGVkOwora2VybmVsIG1lc3NhZ2VzIHdpbGwgYWx3YXlzIHRlbGwgeW91IHdoZXRoZXIgdGhpcyBpcyB0aGUgY2FzZToKKworTW9kZWwgICAgICAgTWFudWZhY3R1cmVyCistLS0tLSAgICAgICAtLS0tLS0tLS0tLS0KK1BBUzIwMkJDQiAgIFBpeEFydCBJbWFnaW5nLCBJbmMuCisKKworOS4gTm90ZXMgZm9yIFY0TDIgYXBwbGljYXRpb24gZGV2ZWxvcGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBkcml2ZXIgZm9sbG93cyB0aGUgVjRMMiBBUEkgc3BlY2lmaWNhdGlvbnMuIEluIHBhcnRpY3VsYXIsIGl0IGVuZm9yY2VzIHR3bworcnVsZXM6CisKKy0gZXhhY3RseSBvbmUgSS9PIG1ldGhvZCwgZWl0aGVyICJtbWFwIiBvciAicmVhZCIsIGlzIGFzc29jaWF0ZWQgd2l0aCBlYWNoCitmaWxlIGRlc2NyaXB0b3IuIE9uY2UgaXQgaXMgc2VsZWN0ZWQsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IGNsb3NlIGFuZCByZW9wZW4gdGhlCitkZXZpY2UgdG8gc3dpdGNoIHRvIHRoZSBvdGhlciBJL08gbWV0aG9kOworCistIGFsdGhvdWdoIGl0IGlzIG5vdCBtYW5kYXRvcnksIHByZXZpb3VzbHkgbWFwcGVkIGJ1ZmZlciBtZW1vcnkgc2hvdWxkIGFsd2F5cworYmUgdW5tYXBwZWQgYmVmb3JlIGNhbGxpbmcgYW55ICJWSURJT0NfU19DUk9QIiBvciAiVklESU9DX1NfRk1UIiBpb2N0bCdzLgorVGhlIHNhbWUgbnVtYmVyIG9mIGJ1ZmZlcnMgYXMgYmVmb3JlIHdpbGwgYmUgYWxsb2NhdGVkIGFnYWluIHRvIG1hdGNoIHRoZSBzaXplCitvZiB0aGUgbmV3IHZpZGVvIGZyYW1lcywgc28geW91IGhhdmUgdG8gbWFwIHRoZSBidWZmZXJzIGFnYWluIGJlZm9yZSBhbnkgSS9PCithdHRlbXB0cyBvbiB0aGVtLgorCisKKzEwLiBDb250YWN0IGluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorVGhlIGF1dGhvciBtYXkgYmUgY29udGFjdGVkIGJ5IGUtbWFpbCBhdCA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4uCisKK0dQRy9QR1AgZW5jcnlwdGVkIGUtbWFpbCdzIGFyZSBhY2NlcHRlZC4gVGhlIEdQRyBrZXkgSUQgb2YgdGhlIGF1dGhvciBpcworJ0ZDRTYzNUE0JzsgdGhlIHB1YmxpYyAxMDI0LWJpdCBrZXkgc2hvdWxkIGJlIGF2YWlsYWJsZSBhdCBhbnkga2V5c2VydmVyOwordGhlIGZpbmdlcnByaW50IGlzOiAnODhFOCBGMzJGIDcyNDQgNjhCQSAzOTU4ICA1RDQwIDk5REEgNUQyQSBGQ0U2IDM1QTQnLgorCisKKzExLiBDcmVkaXRzCis9PT09PT09PT09PQorLSBJbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGNoaXAgaW50ZXJuYWxzIG5lZWRlZCB0byBlbmFibGUgdGhlIEkyQyBwcm90b2NvbCBoYXZlCisgIGJlZW4gdGFrZW4gZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgWkMwMzB4IFZpZGVvNExpbnV4MSBkcml2ZXIgd3JpdHRlbgorICBieSBBbmRyZXcgQmlya2V0dCA8YW5keUBub2J1Z3Mub3JnPjsKKy0gVGhlIGluaXRpYWxpemF0aW9uIHZhbHVlcyBvZiB0aGUgWkMwMzAxIGNvbnRyb2xsZXIgY29ubmVjdGVkIHRvIHRoZSBQQVMyMDJCQ0IKKyAgaW1hZ2Ugc2Vuc29yIGhhdmUgYmVlbiB0YWtlbiBmcm9tIHRoZSBTUENBNVhYIGRyaXZlciBtYWludGFpbmVkIGJ5CisgIE1pY2hlbCBYaGFhcmQgPG14aGFhcmRAbWFnaWMuZnI+LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CmluZGV4IDhiZWEzZmIuLjNiMzlhOTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKQEAgLTQzLDMgKzQzLDUgQEAKICA0MiAtPiBkaWdpdGFsbm93IEROVFYgTGl2ZSEgRFZCLVQgUHJvICAgICAgICAgICAgICAgICAgICAgWzE4MjI6MDAyNV0KICA0MyAtPiBLV29ybGQvVlN0cmVhbSBYUGVydCBEVkItVCB3aXRoIGN4MjI3MDIgICAgICAgICAgICAgWzE3ZGU6MDhhMV0KICA0NCAtPiBEVmlDTyBGdXNpb25IRFRWIERWQi1UIER1YWwgRGlnaXRhbCAgICAgICAgICAgICAgICAgWzE4YWM6ZGI1MCwxOGFjOmRiNTRdCisgNDUgLT4gS1dvcmxkIEhhcmR3YXJlTXBlZ1RWIFhQZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOjA4NDBdCisgNDYgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVCBIeWJyaWQgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiNDAsMThhYzpkYjQ0XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHggYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAppbmRleCBhMGM3Y2FkLi5hMzAyNjY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eApAQCAtOCwzICs4LDQgQEAKICAgNyAtPiBMZWFkdGVrIFdpbmZhc3QgVVNCIElJICAgICAgICAgICAgICAgICAgIChlbTI4MDApCiAgIDggLT4gS3dvcmxkIFVTQjI4MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODAwKQogICA5IC0+IFBpbm5hY2xlIERhenpsZSBEVkMgOTAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsyMzA0OjAyMDddCisgMTIgLT4gS3dvcmxkIFBWUiBUViAyODAwIFJGICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCA4YTM1MjU5Li44YzcxOTU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC0xMyw3ICsxMyw3IEBACiAgMTIgLT4gTWVkaW9uIDcxMzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTZiZTowMDAzXQogIDEzIC0+IFR5cGhvb24gVFYrUmFkaW8gOTAwMzEKICAxNCAtPiBFTFNBIEVYLVZJU0lPTiAzMDBUViAgICAgICAgICAgICAgICAgICAgIFsxMDQ4OjIyNmJdCi0gMTUgLT4gRUxTQSBFWC1WSVNJT04gNTAwVFYgICAgICAgICAgICAgICAgICAgICBbMTA0ODoyMjZiXQorIDE1IC0+IEVMU0EgRVgtVklTSU9OIDUwMFRWICAgICAgICAgICAgICAgICAgICAgWzEwNDg6MjI2YV0KICAxNiAtPiBBU1VTIFRWLUZNIDcxMzQgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjQ4NDIsMTA0Mzo0ODMwLDEwNDM6NDg0MF0KICAxNyAtPiBBT1BFTiBWQTEwMDAgUE9XRVIgICAgICAgICAgICAgICAgICAgICAgIFsxMTMxOjcxMzNdCiAgMTggLT4gQk1LIE1QRVggTm8gVHVuZXIKQEAgLTc1LDcgKzc1LDcgQEAKICA3NCAtPiBMaWZlVmlldyBGbHlUViBQbGF0aW51bSBNaW5pMiAgICAgICAgICAgIFsxNGMwOjEyMTJdCiAgNzUgLT4gQVZlck1lZGlhIEFWZXJUVkhEIE1DRSBBMTgwICAgICAgICAgICAgICBbMTQ2MToxMDQ0XQogIDc2IC0+IFNLTmV0IE1vbnN0ZXJUViBNb2JpbGUgICAgICAgICAgICAgICAgICAgWzExMzE6NGVlOV0KLSA3NyAtPiBQaW5uYWNsZSBQQ1RWIDExMGkgKHNhYTcxMzMpICAgICAgICAgICAgIFsxMWJkOjAwMmVdCisgNzcgLT4gUGlubmFjbGUgUENUViA0MGkvNTBpLzExMGkgKHNhYTcxMzMpICAgICBbMTFiZDowMDJlXQogIDc4IC0+IEFTVVNUZUsgUDcxMzEgRHVhbCAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDg2Ml0KICA3OSAtPiBTZWRuYS9NdWNoVFYgUEMgVFYgQ2FyZGJ1cyBUVi9SYWRpbyAoSVRPMjUgUmV2OjJCKQogIDgwIC0+IEFTVVMgRGlnaW1hdHJpeCBUViAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6MDIxMF0KQEAgLTgzLDMgKzgzLDEyIEBACiAgODIgLT4gTVNJIFRWQEFueXdoZXJlIHBsdXMgICAgICAgICAgICAgICAgICAgICBbMTQ2Mjo2MjMxXQogIDgzIC0+IFRlcnJhdGVjIENpbmVyZ3kgMjUwIFBDSSBUViAgICAgICAgICAgICAgWzE1M2I6MTE2MF0KICA4NCAtPiBMaWZlVmlldyBGbHlEVkIgVHJpbyAgICAgICAgICAgICAgICAgICAgIFs1MTY4OjAzMTldCisgODUgLT4gQXZlclRWIERWQi1UIDc3NyAgICAgICAgICAgICAgICAgICAgICAgICBbMTQ2MToyYzA1XQorIDg2IC0+IExpZmVWaWV3IEZseURWQi1UICAgICAgICAgICAgICAgICAgICAgICAgWzUxNjg6MDMwMV0KKyA4NyAtPiBBRFMgSW5zdGFudCBUViBEdW8gQ2FyZGJ1cyBQVFYzMzEgICAgICAgIFswMzMxOjE0MjFdCisgODggLT4gVGV2aW9uL0tXb3JsZCBEVkItVCAyMjBSRiAgICAgICAgICAgICAgICBbMTdkZTo3MjAxXQorIDg5IC0+IEVMU0EgRVgtVklTSU9OIDcwMFRWICAgICAgICAgICAgICAgICAgICAgWzEwNDg6MjI2Y10KKyA5MCAtPiBLd29ybGQgQVRTQzExMCAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOjczNTBdCisgOTEgLT4gQVZlck1lZGlhIEExNjkgQiAgICAgICAgICAgICAgICAgICAgICAgICBbMTQ2MTo3MzYwXQorIDkyIC0+IEFWZXJNZWRpYSBBMTY5IEIxICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6NjM2MF0KKyA5MyAtPiBNZWRpb24gNzEzNCBCcmlkZ2UgIzIgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDVdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC50dW5lcgppbmRleCBmNmQwY2Y3Li4xYmNkYWM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnR1bmVyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QudHVuZXIKQEAgLTY0LDggKzY0LDEwIEBACiB0dW5lcj02MyAtIFBoaWxpcHMgRk1EMTIxNk1FIE1LMyBIeWJyaWQgVHVuZXIKIHR1bmVyPTY0IC0gTEcgVERWUy1IMDYyRi9UVUE2MDM0CiB0dW5lcj02NSAtIFltZWMgVFZGNjZUNS1CL0RGRgotdHVuZXI9NjYgLSBMRyBOVFNDIChUQUxOIG1pbmkgc2VyaWVzKQordHVuZXI9NjYgLSBMRyBUQUxOIHNlcmllcwogdHVuZXI9NjcgLSBQaGlsaXBzIFREMTMxNiBIeWJyaWQgVHVuZXIKIHR1bmVyPTY4IC0gUGhpbGlwcyBUVVYxMjM2RCBBVFNDL05UU0MgZHVhbCBpbgotdHVuZXI9NjkgLSBUZW5hIFRORiA1MzM1IE1GCit0dW5lcj02OSAtIFRlbmEgVE5GIDUzMzUgYW5kIHNpbWlsYXIgbW9kZWxzCiB0dW5lcj03MCAtIFNhbXN1bmcgVENQTiAyMTIxUDMwQQordHVuZXI9NzEgLSBYY2VpdmUgeGMzMDI4Cit0dW5lcj03MiAtIFRob21zb24gRkU2NjAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NRY2FtLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CmluZGV4IGU0MTVlMzYuLjQ2NGU0Y2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0CkBAIC0xLDcgKzEsNyBAQAogYy1xY2FtIC0gQ29ubmVjdGl4IENvbG9yIFF1aWNrQ2FtIHZpZGVvNGxpbnV4IGtlcm5lbCBkcml2ZXIKIAogQ29weXJpZ2h0IChDKSAxOTk5ICBEYXZlIEZvcnJlc3QgIDxkcmY1bkB2aXJnaW5pYS5lZHU+Ci0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2VkIHVuZGVyIEdOVSBHUEwuCisJCSAgICByZWxlYXNlZCB1bmRlciBHTlUgR1BMLgogCiAxOTk5LTEyLTA4IERhdmUgRm9ycmVzdCwgd3JpdHRlbiB3aXRoIGtlcm5lbCB2ZXJzaW9uIDIuMi4xMiBpbiBtaW5kCiAKQEAgLTQ1LDIxICs0NSwyMSBAQAogICAgIENPTkZJR19QTlBfUEFSUE9SVCAgIE0gZm9yIGF1dG9wcm9iZS5vIElFRUUxMjg0IHJlYWRiYWNrIG1vZHVsZQogICAgIENPTkZJR19QUklOVEVSX1JFQURCQUNLIE0gZm9yIHBhcnBvcnRfcHJvYmUubyBJRUVFMTI4NCByZWFkYmFjayBtb2R1bGUKICAgICBDT05GSUdfVklERU9fREVWICAgICBNICAgIGZvciB2aWRlb2Rldi5vIHZpZGVvNGxpbnV4IG1vZHVsZQotICAgIENPTkZJR19WSURFT19DUUNBTSAgIE0gICAgZm9yIGMtcWNhbS5vICBDb2xvciBRdWlja2NhbSBtb2R1bGUgCisgICAgQ09ORklHX1ZJREVPX0NRQ0FNICAgTSAgICBmb3IgYy1xY2FtLm8gIENvbG9yIFF1aWNrY2FtIG1vZHVsZQogCiAgIFdpdGggdGhlc2UgZmxhZ3MsIHRoZSBrZXJuZWwgc2hvdWxkIGNvbXBpbGUgYW5kIGluc3RhbGwgdGhlIG1vZHVsZXMuCiBUbyByZWNvcmQgYW5kIG1vbml0b3IgdGhlIGNvbXBpbGF0aW9uLCBJIHVzZToKIAogIChtYWtlIHpsaWxvIDsgXAogICBtYWtlIG1vZHVsZXM7IFwKLSAgbWFrZSBtb2R1bGVzX2luc3RhbGwgOyAKKyAgbWFrZSBtb2R1bGVzX2luc3RhbGwgOwogICBkZXBtb2QgLWEgKSAmPmxvZyAmCiAgbGVzcyBsb2cgICMgdGhlbiBhIGNhcGl0YWwgJ0YnIHRvIHdhdGNoIHRoZSBwcm9ncmVzcwotICAKKwogQnV0IHRoYXQgaXMgbXkgcGVyc29uYWwgcHJlZmVyZW5jZS4KIAogMi4yIENvbmZpZ3VyYXRpb24KLSAKKwogICBUaGUgY29uZmlndXJhdGlvbiByZXF1aXJlcyBtb2R1bGUgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlCiBjb25maWd1cmF0aW9uLiAgSSBsaWtlIGttb2Qgb3Iga2VybmVsZCBwcm9jZXNzIHdpdGggdGhlCiAvZXRjL21vZHByb2JlLmNvbmYgZmlsZSBzbyB0aGUgbW9kdWxlcyBjYW4gYXV0b21hdGljYWxseSBsb2FkL3VubG9hZCBhcwpAQCAtNjgsNyArNjgsNyBAQAogdGhlc2UgcHJvY2VkdXJlcy4KIAogCi0yLjEgTW9kdWxlIENvbmZpZ3VyYXRpb24gIAorMi4xIE1vZHVsZSBDb25maWd1cmF0aW9uCiAKICAgVXNpbmcgbW9kdWxlcyByZXF1aXJlcyBhIGJpdCBvZiB3b3JrIHRvIGluc3RhbGwgYW5kIHBhc3MgdGhlCiBwYXJhbWV0ZXJzLiAgVW5kZXJzdGFuZCB0aGF0IGVudHJpZXMgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mIG9mOgpAQCAtMTI4LDkgKzEyOCw5IEBACiAoQ09ORklHX1BSSU5URVIpLCB0aGUgSUVFRSAxMjg0IHN5c3RlbSwoQ09ORklHX1BSSU5URVJfUkVBREJBQ0spLCB5b3UKIHNob3VsZCBiZSBhYmxlIHRvIHJlYWQgc29tZSBpZGVudGlmaWNhdGlvbiBmcm9tIHlvdXIgcXVpY2tjYW0gd2l0aAogCi0gICAgICAgICBtb2Rwcm9iZSAtdiBwYXJwb3J0Ci0gICAgICAgICBtb2Rwcm9iZSAtdiBwYXJwb3J0X3Byb2JlCi0gICAgICAgICBjYXQgL3Byb2MvcGFycG9ydC9QT1JUTlVNQkVSL2F1dG9wcm9iZQorCSBtb2Rwcm9iZSAtdiBwYXJwb3J0CisJIG1vZHByb2JlIC12IHBhcnBvcnRfcHJvYmUKKwkgY2F0IC9wcm9jL3BhcnBvcnQvUE9SVE5VTUJFUi9hdXRvcHJvYmUKIFJldHVybnM6CiAgIENMQVNTOk1FRElBOwogICBNT0RFTDpDb2xvciBRdWlja0NhbSAyLjA7CkBAIC0xNDAsNyArMTQwLDcgQEAKIGFuZCB3ZWxsLiAgQSBjb21tb24gcHJvYmxlbSBpcyB0aGF0IHRoZSBjdXJyZW50IGRyaXZlciBkb2VzIG5vdAogcmVsaWFibHkgZGV0ZWN0IGEgYy1xY2FtLCBldmVuIHRob3VnaCBvbmUgaXMgYXR0YWNoZWQuICBJbiB0aGlzIGNhc2UsCiAKLSAgICAgbW9kcHJvYmUgLXYgYy1xY2FtICAgICAKKyAgICAgbW9kcHJvYmUgLXYgYy1xY2FtCiBvcgogICAgICBpbnNtb2QgLXYgYy1xY2FtCiAKQEAgLTE1MiwxNiArMTUyLDE2IEBACiAzLjEgQ2hlY2tsaXN0OgogCiAgIENhbiB5b3UgZ2V0IGFuIGltYWdlPwotICAgICAgICAgICAgdjRsZ3JhYiA+cWNhbS5wcG0gOyB3YyBxY2FtLnBwbSA7IHh2IHFjYW0ucHBtCisJICAgIHY0bGdyYWIgPnFjYW0ucHBtIDsgd2MgcWNhbS5wcG0gOyB4diBxY2FtLnBwbQogCi0gIElzIGEgd29ya2luZyBjLXFjYW0gY29ubmVjdGVkIHRvIHRoZSBwb3J0PyAKLSAgICAgICAgICAgIGdyZXAgXiAvcHJvYy9wYXJwb3J0Lz8vYXV0b3Byb2JlCisgIElzIGEgd29ya2luZyBjLXFjYW0gY29ubmVjdGVkIHRvIHRoZSBwb3J0PworCSAgICBncmVwIF4gL3Byb2MvcGFycG9ydC8/L2F1dG9wcm9iZQogCi0gIERvIHRoZSAvZGV2L3ZpZGVvKiBmaWxlcyBleGlzdD8gIAotICAgICAgICAgICAgbHMgLWxhZCAvZGV2L3ZpZGVvCisgIERvIHRoZSAvZGV2L3ZpZGVvKiBmaWxlcyBleGlzdD8KKwkgICAgbHMgLWxhZCAvZGV2L3ZpZGVvCiAKLSAgSXMgdGhlIGMtcWNhbSBtb2R1bGUgbG9hZGVkPyAgICAgCi0gICAgICAgICAgICBtb2Rwcm9iZSAtdiBjLXFjYW0gOyBsc21vZAorICBJcyB0aGUgYy1xY2FtIG1vZHVsZSBsb2FkZWQ/CisJICAgIG1vZHByb2JlIC12IGMtcWNhbSA7IGxzbW9kCiAKICAgRG9lcyB0aGUgY2FtZXJhIHdvcmsgd2l0aCBhbHRlcm5hdGUgcHJvZ3JhbXM/IGNxY2FtLCBldGM/CiAKQEAgLTE3NCw3ICsxNzQsNyBAQAogaXNuJ3QsIHlvdSBtaWdodCB0cnkgcGF0Y2hpbmcgdGhlIGMtcWNhbSBtb2R1bGUgdG8gYWRkIGEgcGFycG9ydD14eHgKIG9wdGlvbiBhcyBpbiB0aGUgYnctcWNhbSBtb2R1bGUgc28geW91IGNhbiBzcGVjaWZ5IHRoZSBwYXJhbGxlbCBwb3J0OgogCi0gICAgICAgaW5zbW9kIC12IGMtcWNhbSBwYXJwb3J0PTAgIAorICAgICAgIGluc21vZCAtdiBjLXFjYW0gcGFycG9ydD0wCiAKIEFuZCBieXBhc3MgdGhlIGRldGVjdGlvbiBjb2RlLCBzZWUgLi4vLi4vZHJpdmVycy9jaGFyL2MtcWNhbS5jIGFuZAogbG9vayBmb3IgdGhlICdxY19kZXRlY3QnIGNvZGUgYW5kIGNhbGwuCkBAIC0xODMsMTIgKzE4MywxMiBAQAogdGhpcyB3b3JrIGlzIGRvY3VtZW50ZWQgYXQgdGhlIHZpZGVvNGxpbnV4MiBzaXRlIGxpc3RlZCBiZWxvdy4KIAogCi05LjAgLS0tIEEgc2FtcGxlIHByb2dyYW0gdXNpbmcgdjRsZ3JhYmJlciwgCis5LjAgLS0tIEEgc2FtcGxlIHByb2dyYW0gdXNpbmcgdjRsZ3JhYmJlciwKIAogVGhpcyBwcm9ncmFtIGlzIGEgc2ltcGxlIGltYWdlIGdyYWJiZXIgdGhhdCB3aWxsIGNvcHkgYSBmcmFtZSBmcm9tIHRoZQogZmlyc3QgdmlkZW8gZGV2aWNlLCAvZGV2L3ZpZGVvMCB0byBzdGFuZGFyZCBvdXRwdXQgaW4gcG9ydGFibGUgcGl4bWFwCiBmb3JtYXQgKC5wcG0pICBVc2luZyB0aGlzIGxpa2U6ICd2NGxncmFiIHwgY29udmVydCAtIGMtcWNhbS5qcGcnCi1wcm9kdWNlZCB0aGlzIHBpY3R1cmUgb2YgbWUgYXQgCitwcm9kdWNlZCB0aGlzIHBpY3R1cmUgb2YgbWUgYXQKICAgICBodHRwOi8vbXVnLnN5cy52aXJnaW5pYS5lZHUvfmRyZjVuL2V4dHJhcy9jLXFjYW0uanBnCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tIDg8IC0tLS0tLS0tLS0tLS0tLS0gODwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwMiw4ICsyMDIsOCBAQAogICogICAgICBVc2UgYXM6CiAgKiAgICAgICAgICAgICAgdjRsZ3JhYiA+aW1hZ2UucHBtCiAgKgotICoJQ29weXJpZ2h0IChDKSAxOTk4LTA1LTAzLCBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPiAgCi0gKiAgICAgIENvcGllZCBmcm9tIGh0dHA6Ly93d3cudGF6ZW5kYS5kZW1vbi5jby51ay9waGlsL3ZncmFiYmVyLmMgCisgKglDb3B5cmlnaHQgKEMpIDE5OTgtMDUtMDMsIFBoaWwgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisgKiAgICAgIENvcGllZCBmcm9tIGh0dHA6Ly93d3cudGF6ZW5kYS5kZW1vbi5jby51ay9waGlsL3ZncmFiYmVyLmMKICAqICAgICAgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zIChEYXZlIEZvcnJlc3QsIGRyZjVuQHZpcmdpbmlhLmVkdSkuCiAgKgogICovCkBAIC0yMjUsNTUgKzIyNSw1NSBAQAogCiAjZGVmaW5lIFJFQURfVklERU9fUElYRUwoYnVmLCBmb3JtYXQsIGRlcHRoLCByLCBnLCBiKSAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlcHRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHIpID0gKGcpID0gKGIpID0gKCpidWYrKyA8PCA4KTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHIpID0gKGcpID0gKGIpID0gICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBzaG9ydCAqKSBidWYpOyAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBjYXNlIFZJREVPX1BBTEVUVEVfUkdCNTY1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRtcCA9ICoodW5zaWduZWQgc2hvcnQgKilidWY7ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChyKSA9IHRtcCYweEY4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChnKSA9ICh0bXA8PDUpJjB4RkMwMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChiKSA9ICh0bXA8PDExKSYweEY4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBjYXNlIFZJREVPX1BBTEVUVEVfUkdCNTU1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChyKSA9IChidWZbMF0mMHhGOCk8PDg7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChnKSA9ICgoYnVmWzBdIDw8IDUgfCBidWZbMV0gPj4gMykmMHhGOCk8PDg7ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChiKSA9ICgoYnVmWzFdIDw8IDIgKSAmIDB4RjgpPDw4OyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBjYXNlIFZJREVPX1BBTEVUVEVfUkdCMjQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChyKSA9IGJ1ZlswXSA8PCA4OyAoZykgPSBidWZbMV0gPDwgODsgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChiKSA9IGJ1ZlsyXSA8PCA4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvcm1hdCAlZCBub3QgeWV0IHN1cHBvcnRlZFxuIiwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCXN3aXRjaCAoZm9ybWF0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlzd2l0Y2ggKGRlcHRoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQljYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCWNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCShyKSA9IChnKSA9IChiKSA9ICgqYnVmKysgPDwgOCk7XAorCQkJCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJCVwKKwkJCQljYXNlIDE2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkocikgPSAoZykgPSAoYikgPSAgICAgICAgICAgICAgIFwKKwkJCQkJCSooKHVuc2lnbmVkIHNob3J0ICopIGJ1Zik7ICAgICAgXAorCQkJCQlidWYgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCQkJCQlcCisJCQkJCQkJCQlcCisJCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NjU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXVuc2lnbmVkIHNob3J0IHRtcCA9ICoodW5zaWduZWQgc2hvcnQgKilidWY7ICAgIFwKKwkJCShyKSA9IHRtcCYweEY4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCShnKSA9ICh0bXA8PDUpJjB4RkMwMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCShiKSA9ICh0bXA8PDExKSYweEY4MDA7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCQkJXAorCQljYXNlIFZJREVPX1BBTEVUVEVfUkdCNTU1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCShyKSA9IChidWZbMF0mMHhGOCk8PDg7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCShnKSA9ICgoYnVmWzBdIDw8IDUgfCBidWZbMV0gPj4gMykmMHhGOCk8PDg7ICAgIFwKKwkJCShiKSA9ICgoYnVmWzFdIDw8IDIgKSAmIDB4RjgpPDw4OyAgICAgICAgICAgICAgIFwKKwkJCWJ1ZiArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJCVwKKwkJY2FzZSBWSURFT19QQUxFVFRFX1JHQjI0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkocikgPSBidWZbMF0gPDwgODsgKGcpID0gYnVmWzFdIDw8IDg7ICAgICAgICAgICBcCisJCQkoYikgPSBidWZbMl0gPDwgODsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlidWYgKz0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCQkJCQlcCisJCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZnByaW50ZihzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSJGb3JtYXQgJWQgbm90IHlldCBzdXBwb3J0ZWRcbiIsICAgICAgICBcCisJCQkJZm9ybWF0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQogCiBpbnQgZ2V0X2JyaWdodG5lc3NfYWRqKHVuc2lnbmVkIGNoYXIgKmltYWdlLCBsb25nIHNpemUsIGludCAqYnJpZ2h0bmVzcykgewogICBsb25nIGksIHRvdCA9IDA7CkBAIC0zMjQsNDAgKzMyNCw0MCBAQAogICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpIDwgMCkgewogICAgICAgdnBpYy5kZXB0aD02OwogICAgICAgaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYykgPCAwKSB7Ci0gICAgICAgIHZwaWMuZGVwdGg9NDsKLSAgICAgICAgaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYykgPCAwKSB7Ci0gICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZmluZCBhIHN1cHBvcnRlZCBjYXB0dXJlIGZvcm1hdC5cbiIpOwotICAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9CisJdnBpYy5kZXB0aD00OworCWlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpIDwgMCkgeworCSAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZmluZCBhIHN1cHBvcnRlZCBjYXB0dXJlIGZvcm1hdC5cbiIpOworCSAgY2xvc2UoZmQpOworCSAgZXhpdCgxKTsKKwl9CiAgICAgICB9CiAgICAgfQogICB9IGVsc2UgewogICAgIHZwaWMuZGVwdGg9MjQ7CiAgICAgdnBpYy5wYWxldHRlPVZJREVPX1BBTEVUVEVfUkdCMjQ7Ci0gICAgCisKICAgICBpZihpb2N0bChmZCwgVklESU9DU1BJQ1QsICZ2cGljKSA8IDApIHsKICAgICAgIHZwaWMucGFsZXR0ZT1WSURFT19QQUxFVFRFX1JHQjU2NTsKICAgICAgIHZwaWMuZGVwdGg9MTY7Ci0gICAgICAKKwogICAgICAgaWYoaW9jdGwoZmQsIFZJRElPQ1NQSUNULCAmdnBpYyk9PS0xKSB7Ci0gICAgICAgIHZwaWMucGFsZXR0ZT1WSURFT19QQUxFVFRFX1JHQjU1NTsKLSAgICAgICAgdnBpYy5kZXB0aD0xNTsKLSAgICAgICAgCi0gICAgICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpPT0tMSkgewotICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGZpbmQgYSBzdXBwb3J0ZWQgY2FwdHVyZSBmb3JtYXQuXG4iKTsKLSAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKwl2cGljLnBhbGV0dGU9VklERU9fUEFMRVRURV9SR0I1NTU7CisJdnBpYy5kZXB0aD0xNTsKKworCWlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpPT0tMSkgeworCSAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZmluZCBhIHN1cHBvcnRlZCBjYXB0dXJlIGZvcm1hdC5cbiIpOworCSAgcmV0dXJuIC0xOworCX0KICAgICAgIH0KICAgICB9CiAgIH0KLSAgCisKICAgYnVmZmVyID0gbWFsbG9jKHdpbi53aWR0aCAqIHdpbi5oZWlnaHQgKiBicHApOwogICBpZiAoIWJ1ZmZlcikgewogICAgIGZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOwogICAgIGV4aXQoMSk7CiAgIH0KLSAgCisKICAgZG8gewogICAgIGludCBuZXdicmlnaHQ7CiAgICAgcmVhZChmZCwgYnVmZmVyLCB3aW4ud2lkdGggKiB3aW4uaGVpZ2h0ICogYnBwKTsKQEAgLTM2NSw4ICszNjUsOCBAQAogICAgIGlmIChmKSB7CiAgICAgICB2cGljLmJyaWdodG5lc3MgKz0gKG5ld2JyaWdodCA8PCA4KTsKICAgICAgIGlmKGlvY3RsKGZkLCBWSURJT0NTUElDVCwgJnZwaWMpPT0tMSkgewotICAgICAgICBwZXJyb3IoIlZJRElPU1BJQ1QiKTsKLSAgICAgICAgYnJlYWs7CisJcGVycm9yKCJWSURJT1NQSUNUIik7CisJYnJlYWs7CiAgICAgICB9CiAgICAgfQogICB9IHdoaWxlIChmKTsKQEAgLTM4MSw3ICszODEsNyBAQAogICAgIGZwdXRjKGc+PjgsIHN0ZG91dCk7CiAgICAgZnB1dGMoYj4+OCwgc3Rkb3V0KTsKICAgfQotICAgIAorCiAgIGNsb3NlKGZkKTsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jcGlhIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3BpYQppbmRleCBjOTVlN2JiLi4xOWNkM2JmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS5jcGlhCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmNwaWEKQEAgLTg3LDcgKzg3LDcgQEAKIGF0IHRoZSBMSUxPLXByb21wdCBvciBzcGVjaWZ5IGl0IGluIGxpbG8uY29uZi4gSSB1c2UgdGhlIGZvbGxvd2luZwogYXBwZW5kLWxpbmUgaW4gbGlsby5jb25mOgogCi0gICAgICAgIGFwcGVuZD0icGFycG9ydD0weDM3OCw3LDMiCisJYXBwZW5kPSJwYXJwb3J0PTB4Mzc4LDcsMyIKIAogU2VlIERvY3VtZW50YXRpb24vcGFycG9ydC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiBjb25maWd1cmF0aW9uIG9mIHRoZSBwYXJwb3J0IGFuZCB0aGUgdmFsdWVzIGdpdmVuIGFib3ZlLiBEbyBub3Qgc2ltcGx5CkBAIC0xNzUsNyArMTc1LDcgQEAKIC0gTWFudWVsIEouIFBldGl0IGRlIEdhYnJpZWwgPG1wZXRpdEBkaXQudXBtLmVzPiBmb3IgcHJvdmlkaW5nIGhlbHAKICAgd2l0aCBJc2FiZWwgKGh0dHA6Ly9pc2FiZWwuZGl0LnVwbS5lcy8pCiAtIEJhcyBIdWlzbWFuIDxiaHVpc21AY3MudXR3ZW50ZS5ubD4gZm9yIHdyaXRpbmcgdGhlIGluaXRpYWwgcGFycG9ydCBjb2RlCi0tIEphcmwgVG90bGFuZCA8SmFybC5Ub3RsYW5kQGJkYy5ubz4gZm9yIHNldHRpbmcgdXAgdGhlIG1haWxpbmcgbGlzdCAKKy0gSmFybCBUb3RsYW5kIDxKYXJsLlRvdGxhbmRAYmRjLm5vPiBmb3Igc2V0dGluZyB1cCB0aGUgbWFpbGluZyBsaXN0CiAgIGFuZCBtYWludGFpbmluZyB0aGUgd2ViLXNlcnZlclszXQogLSBDaHJpcyBXaGl0ZWZvcmQgPENocmlzQGluZm9ybWludGVyYWN0aXZlLmNvbT4gZm9yIGZpeGVzIHJlbGF0ZWQgdG8gdGhlCiAgIDEuMDIgZmlybXdhcmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmNwaWEyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9SRUFETUUuY3BpYTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4MjEzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLmNwaWEyCkBAIC0wLDAgKzEsMTMwIEBACiskSWQ6IFJFQURNRSx2IDEuNyAyMDA1LzA4LzI5IDIzOjM5OjU3IHNiZXJ0aW4gRXhwICQKKworMS4gSW50cm9kdWN0aW9uCisKKwlUaGlzIGlzIGEgZHJpdmVyIGZvciBTVE1pY3JvZWxlY3Ryb25pY3MncyBDUGlBMiAoc2Vjb25kIGdlbmVyYXRpb24KK0NvbG91ciBQcm9jZXNzb3IgSW50ZXJmYWNlIEFTSUMpIGJhc2VkIGNhbWVyYXMuIFRoaXMgY2FtZXJhIG91dHB1dHMgYW4gTUpQRUcKK3N0cmVhbSBhdCB1cCB0byB2Z2Egc2l6ZS4gSXQgaW1wbGVtZW50cyB0aGUgVmlkZW80TGludXggaW50ZXJmYWNlIGFzIG11Y2ggYXMKK3Bvc3NpYmxlLiAgU2luY2UgdGhlIFY0TCBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2VkIGZvcm1hdHMsIG9ubHkKK2FuIG1qcGVnIGVuYWJsZWQgYXBwbGljYXRpb24gY2FuIGJlIHVzZWQgd2l0aCB0aGUgY2FtZXJhLiBXZSBoYXZlIG1vZGlmaWVkIHRoZQorZ3FjYW0gYXBwbGljYXRpb24gdG8gdmlldyB0aGlzIHN0cmVhbS4KKworCVRoZSBkcml2ZXIgaXMgaW1wbGVtZW50ZWQgYXMgdHdvIGtlcm5lbCBtb2R1bGVzLiBUaGUgY3BpYTIgbW9kdWxlCitjb250YWlucyB0aGUgY2FtZXJhIGZ1bmN0aW9ucyBhbmQgdGhlIFY0TCBpbnRlcmZhY2UuICBUaGUgY3BpYTJfdXNiIG1vZHVsZQorY29udGFpbnMgdXNiIHNwZWNpZmljIGZ1bmN0aW9ucy4gIFRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyB3YXMgdGhlIHNpemUgb2YgdGhlCittb2R1bGUgd2FzIGdldHRpbmcgb3V0IG9mIGhhbmQsIHNvIEkgc2VwYXJ0ZWQgdGhlbS4gIEl0IGlzIG5vdCBsaWtlbHkgdGhhdAordGhlcmUgd2lsbCBiZSBhIHBhcmFsbGVsIHBvcnQgdmVyc2lvbi4KKworRkVBVFVSRVM6CisgICAtIFN1cHBvcnRzIGNhbWVyYXMgd2l0aCB0aGUgVmlzaW9uIHN0djY0MTAgKENJRikgYW5kIHN0djY1MDAgKFZHQSkgY21vcworICAgICBzZW5zb3JzLiBJIG9ubHkgaGF2ZSB0aGUgdmdhIHNlbnNvciwgc28gY2FuJ3QgdGVzdCB0aGUgb3RoZXIuCisgICAtIEltYWdlIGZvcm1hdHM6IFZHQSwgUVZHQSwgQ0lGLCBRQ0lGLCBhbmQgYSBudW1iZXIgb2Ygc2l6ZXMgaW4gYmV0d2Vlbi4KKyAgICAgVkdBIGFuZCBRVkdBIGFyZSB0aGUgbmF0aXZlIGltYWdlIHNpemVzIGZvciB0aGUgVkdBIGNhbWVyYS4gQ0lGIGlzIGRvbmUKKyAgICAgaW4gdGhlIGNvcHJvY2Vzc29yIGJ5IHNjYWxpbmcgUVZHQS4gIEFsbCBvdGhlciBzaXplcyBhcmUgZG9uZSBieSBjbGlwcGluZy4KKyAgIC0gUGFsZXR0ZTogWUNyQ2IsIGNvbXByZXNzZWQgd2l0aCBNSlBFRy4KKyAgIC0gU29tZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFyZSBzZXR0YWJsZS4KKyAgIC0gU2Vuc29yIGZyYW1lcmF0ZSBpcyBhZGp1c3RhYmxlICh1cCB0byAzMCBmcHMgQ0lGLCAxNSBmcHMgVkdBKS4KKyAgIC0gQWRqdXN0IGJyaWdodG5lc3MsIGNvbG9yLCBjb250cmFzdCB3aGlsZSBzdHJlYW1pbmcuCisgICAtIEZsaWNrZXIgY29udHJvbCBzZXR0YWJsZSBmb3IgNTAgb3IgNjAgSHogbWFpbnMgZnJlcXVlbmN5LgorCisyLiBNYWtpbmcgYW5kIGluc3RhbGxpbmcgdGhlIHN0djY3MiBkcml2ZXIgbW9kdWxlczoKKworCVJlcXVpcmVtZW50czoKKwktLS0tLS0tLS0tLS0tCisJVGhpcyBzaG91bGQgd29yayB3aXRoIDIuNCAoMi40LjIzIGFuZCBsYXRlcikgYW5kIDIuNiBrZXJuZWxzLCBidXQgaGFzCitvbmx5IGJlZW4gdGVzdGVkIG9uIDIuNi4gIFZpZGVvNExpbnV4IG11c3QgYmUgZWl0aGVyIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvcgorYXZhaWxhYmxlIGFzIGEgbW9kdWxlLiAgVmlkZW80TGludXgyIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgYW5kIG1hZGUKK2F2YWlsYWJsZSBhdCBjb21waWxlIHRpbWUuCisKKwlDb21waWxpbmc6CisJLS0tLS0tLS0tLQorCUFzIHJvb3QsIGRvIGEgbWFrZSBpbnN0YWxsLiAgVGhpcyB3aWxsIGNvbXBpbGUgYW5kIGluc3RhbGwgdGhlIG1vZHVsZXMKK2ludG8gdGhlIG1lZGlhL3ZpZGVvIGRpcmVjdG9yeSBpbiB0aGUgbW9kdWxlIHRyZWUuIEZvciAyLjQga2VybmVscywgdXNlCitNYWtlZmlsZV8yLjQgKGFrYSBkbyBtYWtlIC1mIE1ha2VmaWxlXzIuNCBpbnN0YWxsKS4KKworCVNldHVwOgorCS0tLS0tLQorCVVzZSAnbW9kcHJvYmUgY3BpYTInIHRvIGxvYWQgYW5kICdtb2Rwcm9iZSAtciBjcGlhMicgdG8gdW5sb2FkLiBUaGlzCittYXkgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IHlvdXIgZGlzdHJpYnV0aW9uLgorCiszLiBEcml2ZXIgb3B0aW9ucworCisJT3B0aW9uCQlEZXNjcmlwdGlvbgorCS0tLS0tLQkJLS0tLS0tLS0tLS0KKwl2aWRlb19ucgl2aWRlbyBkZXZpY2UgdG8gcmVnaXN0ZXIgKDA9L2Rldi92aWRlbzAsIGV0YykKKwkJCXJhbmdlIC0xIHRvIDY0LiAgZGVmYXVsdCBpcyAtMSAoZmlyc3QgYXZhaWxhYmxlKQorCQkJSWYgeW91IGhhdmUgbW9yZSB0aGFuIDEgY2FtZXJhLCB0aGlzIE1VU1QgYmUgLTEuCisJYnVmZmVyX3NpemUJU2l6ZSBmb3IgZWFjaCBmcmFtZSBidWZmZXIgaW4gYnl0ZXMgKGRlZmF1bHQgNjhrKQorCW51bV9idWZmZXJzCU51bWJlciBvZiBmcmFtZSBidWZmZXJzICgxLTMyLCBkZWZhdWx0IDMpCisJYWx0ZXJuYXRlCVVTQiBBbHRlcm5hdGUgKDItNywgZGVmYXVsdCA3KQorCWZsaWNrZXJfZnJlcQlGcmVxdWVuY3kgZm9yIGZsaWNrZXIgcmVkdWN0aW9uKDUwIG9yIDYwLCBkZWZhdWx0IDYwKQorCWZsaWNrZXJfbW9kZQkwIHRvIGRpc2FibGUsIG9yIDEgdG8gZW5hYmxlIGZsaWNrZXIgcmVkdWN0aW9uLgorCQkJKGRlZmF1bHQgMCkuIFRoaXMgaXMgb25seSBlZmZlY3RpdmUgaWYgdGhlIGNhbWVyYQorCQkJdXNlcyBhIHN0djA2NzIgY29wcm9jZXNzb3IuCisKKwlTZXR0aW5nIHRoZSBvcHRpb25zOgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSWYgeW91IGFyZSB1c2luZyBtb2R1bGVzLCBlZGl0IC9ldGMvbW9kdWxlcy5jb25mIGFuZCBhZGQgYW4gb3B0aW9ucworbGluZSBsaWtlIHRoaXM6CisJb3B0aW9ucyBjcGlhMiBudW1fYnVmZmVycz0zIGJ1ZmZlcl9zaXplPTY1NTM1CisKKwlJZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgYXQgYm9vdCB0aW1lIHNwZWNpZnkgdGhlbQorbGlrZSB0aGlzOgorCWNwaWEyLm51bV9idWZmZXJzPTMgY3BpYTIuYnVmZmVyX3NpemU9NjU1MzUKKworCVdoYXQgYnVmZmVyIHNpemUgc2hvdWxkIEkgdXNlPworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVRoZSBtYXhpbXVtIGltYWdlIHNpemUgZGVwZW5kcyBvbiB0aGUgYWx0ZXJuYXRlIHlvdSBjaG9vc2UsIGFuZCB0aGUKK2ZyYW1lIHJhdGUgYWNoaWV2ZWQgYnkgdGhlIGNhbWVyYS4gIElmIHRoZSBjb21wcmVzc2lvbiBlbmdpbmUgaXMgYWJsZSB0bwora2VlcCB1cCB3aXRoIHRoZSBmcmFtZSByYXRlLCB0aGUgbWF4aW11bSBpbWFnZSBzaXplIGlzIGdpdmVuIGJ5IHRoZSB0YWJsZQorYmVsb3cuCisJVGhlIGNvbXByZXNzaW9uIGVuZ2luZSBzdGFydHMgb3V0IGF0IG1heGltdW0gY29tcHJlc3Npb24sIGFuZCB3aWxsCitpbmNyZWFzZSBpbWFnZSBxdWFsaXR5IHVudGlsIGl0IGlzIGNsb3NlIHRvIHRoZSBzaXplIGluIHRoZSB0YWJsZS4gIEFzIGxvbmcKK2FzIHRoZSBjb21wcmVzc2lvbiBlbmdpbmUgY2FuIGtlZXAgdXAgd2l0aCB0aGUgZnJhbWUgcmF0ZSwgYWZ0ZXIgYSBzaG9ydCB0aW1lCit0aGUgaW1hZ2VzIHdpbGwgYWxsIGJlIGFib3V0IHRoZSBzaXplIGluIHRoZSB0YWJsZSwgcmVnYXJkbGVzcyBvZiByZXNvbHV0aW9uLgorCUF0IGxvdyBhbHRlcm5hdGUgc2V0dGluZ3MsIHRoZSBjb21wcmVzc2lvbiBlbmdpbmUgbWF5IG5vdCBiZSBhYmxlIHRvCitjb21wcmVzcyB0aGUgaW1hZ2UgZW5vdWdoIGFuZCB3aWxsIHJlZHVjZSB0aGUgZnJhbWUgcmF0ZSBieSBwcm9kdWNpbmcgbGFyZ2VyCitpbWFnZXMuCisJVGhlIGRlZmF1bHQgb2YgNjhrIHNob3VsZCBiZSBnb29kIGZvciBtb3N0IHVzZXJzLiAgVGhpcyB3aWxsIGhhbmRsZQorYW55IGFsdGVybmF0ZSBhdCBmcmFtZSByYXRlcyBkb3duIHRvIDE1ZnBzLiAgRm9yIGxvd2VyIGZyYW1lIHJhdGVzLCBpdCBtYXkKK2JlIG5lY2Vzc2FyeSB0byBpbmNyZWFzZSB0aGUgYnVmZmVyIHNpemUgdG8gYXZvaWQgaGF2aW5nIGZyYW1lcyBkcm9wcGVkIGR1ZQordG8gaW5zdWZmaWNpZW50IHNwYWNlLgorCisJCQkgICAgIEltYWdlIHNpemUoYnl0ZXMpCisJQWx0ZXJuYXRlICBieXRlcy9tcyAgIDE1ZnBzICAgIDMwZnBzCisJICAgIDIgICAgICAgICAxMjggICAgICA4NTMzICAgICA0MjY3CisJICAgIDMgICAgICAgICAzODQgICAgIDI1NjAwICAgIDEyODAwCisJICAgIDQgICAgICAgICA2NDAgICAgIDQyNjY3ICAgIDIxMzMzCisJICAgIDUgICAgICAgICA3NjggICAgIDUxMjAwICAgIDI1NjAwCisJICAgIDYgICAgICAgICA4OTYgICAgIDU5NzMzICAgIDI5ODY3CisJICAgIDcgICAgICAgIDEwMjMgICAgIDY4MjAwICAgIDM0MTAwCisKKwlIb3cgbWFueSBidWZmZXJzIHNob3VsZCBJIHVzZT8KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlGb3Igbm9ybWFsIHN0cmVhbWluZywgMyBzaG91bGQgZ2l2ZSB0aGUgYmVzdCByZXN1bHRzLiAgV2l0aCBvbmx5IDIsCitpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGNhbWVyYSB0byBmaW5pc2ggc2VuZGluZyBvbmUgaW1hZ2UganVzdCBhZnRlciBhCitwcm9ncmFtIGhhcyBzdGFydGVkIHJlYWRpbmcgdGhlIG90aGVyLiAgSWYgdGhpcyBoYXBwZW5zLCB0aGUgZHJpdmVyIG11c3QgZHJvcAorYSBmcmFtZS4gIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcyBpZiB5b3UgaGF2ZSBhIGhlYXZpbHkgbG9hZGVkIG1hY2hpbmUuICBJbgordGhpcyBjYXNlIHVzZSAyIGJ1ZmZlcnMuICBZb3UgYXJlIHByb2JhYmx5IG5vdCByZWFkaW5nIGF0IHRoZSBmdWxsIGZyYW1lIHJhdGUuCitJZiB0aGUgY2FtZXJhIGNhbiBzZW5kIG11bHRpcGxlIGltYWdlcyBiZWZvcmUgYSByZWFkIGZpbmlzaGVzLCBpdCBjb3VsZAorb3ZlcndyaXRlIHRoZSB0aGlyZCBidWZmZXIgYmVmb3JlIHRoZSByZWFkIGZpbmlzaGVzLCBsZWFkaW5nIHRvIGEgY29ycnVwdAoraW1hZ2UuICBTaW5nbGUgYW5kIGRvdWJsZSBidWZmZXJpbmcgaGF2ZSBleHRyYSBjaGVja3MgdG8gYXZvaWQgb3ZlcndyaXRpbmcuCisKKzQuIFVzaW5nIHRoZSBjYW1lcmEKKworCVdlIGFyZSBwcm92aWRpbmcgYSBtb2RpZmllZCBncWNhbSBhcHBsaWNhdGlvbiB0byB2aWV3IHRoZSBvdXRwdXQuIEluCitvcmRlciB0byBhdm9pZCBjb25mdXNpb24sIGhlcmUgaXQgaXMgY2FsbGVkIG12aWV3LiAgVGhlcmUgaXMgYWxzbyB0aGUgcXg1dmlldworcHJvZ3JhbSB3aGljaCBjYW4gYWxzbyBjb250cm9sIHRoZSBsaWdodHMgb24gdGhlIHF4NSBtaWNyb3Njb3BlLiBNSlBFRyBUb29scworKGh0dHA6Ly9tanBlZy5zb3VyY2Vmb3JnZS5uZXQpIGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVjb3JkIGZyb20gdGhlIGNhbWVyYS4KKworNS4gTm90ZXMgdG8gZGV2ZWxvcGVyczoKKworICAgLSBUaGlzIGlzIGEgZHJpdmVyIHZlcnNpb24gc3RyaXBwZWQgb2YgdGhlIDIuNCBiYWNrIGNvbXBhdGliaWxpdHkKKyAgICAgYW5kIG9sZCBNSlBFRyBpb2N0bCBBUEkuIFNlZSBjcGlhMi5zZi5uZXQgZm9yIDIuNCBzdXBwb3J0LgorCis2LiBUaGFua3M6CisKKyAgIC0gUGV0ZXIgUHJlZ2xlciA8UGV0ZXJfUHJlZ2xlckBlbWFpbC5jb20+LAorICAgICBTY290dCBKLiBCZXJ0aW4gPHNjb3R0YmVydGluQHlhaG9vLmNvbT4sIGFuZAorICAgICBKYXJsIFRvdGxhbmQgPEphcmwuVG90bGFuZEBiZGMubm8+IGZvciB0aGUgb3JpZ2luYWwgY3BpYSBkcml2ZXIsIHdoaWNoCisgICAgIHRoaXMgb25lIHdhcyBtb2RlbGxlZCBmcm9tLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KaW5kZXggNTJjOTRiZC4uYmU5ZjIxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCkBAIC0yOCw3ICsyOCw3IEBACiAqIFBoaWxpcHMgc2FhNzExMSBUViBkZWNvZGVyCiAqIFBoaWxpcHMgc2FhNzE4NSBUViBlbmNvZGVyCiBEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCi0gICAgICAgICAgICAgICAgdmlkZW9jb2RlYywgc2FhNzExMSwgc2FhNzE4NSwgenIzNjA2MCwgenIzNjA2NworCQl2aWRlb2NvZGVjLCBzYWE3MTExLCBzYWE3MTg1LCB6cjM2MDYwLCB6cjM2MDY3CiBJbnB1dHMvb3V0cHV0czogQ29tcG9zaXRlIGFuZCBTLXZpZGVvCiBOb3JtczogUEFMLCBTRUNBTSAoNzIweDU3NiBAIDI1IGZwcyksIE5UU0MgKDcyMHg0ODAgQCAyOS45NyBmcHMpCiBDYXJkIG51bWJlcjogNwpAQCAtMzksNyArMzksNyBAQAogKiBCcm9va3RyZWUgYnQ4MTkgVFYgZGVjb2RlcgogKiBCcm9va3RyZWUgYnQ4NTYgVFYgZW5jb2RlcgogRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAotICAgICAgICAgICAgICAgIHZpZGVvY29kZWMsIGJ0ODE5LCBidDg1NiwgenIzNjA2MCwgenIzNjA2NworCQl2aWRlb2NvZGVjLCBidDgxOSwgYnQ4NTYsIHpyMzYwNjAsIHpyMzYwNjcKIElucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUgYW5kIFMtdmlkZW8KIE5vcm1zOiBQQUwgKDcyMHg1NzYgQCAyNSBmcHMpLCBOVFNDICg3MjB4NDgwIEAgMjkuOTcgZnBzKQogQ2FyZCBudW1iZXI6IDUKQEAgLTUwLDcgKzUwLDcgQEAKICogUGhpbGlwcyBzYWE3MTE0IFRWIGRlY29kZXIKICogQW5hbG9nIERldmljZXMgYWR2NzE3MCBUViBlbmNvZGVyCiBEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCi0gICAgICAgICAgICAgICAgdmlkZW9jb2RlYywgc2FhNzExNCwgYWR2NzE3MCwgenIzNjA2MCwgenIzNjA2NworCQl2aWRlb2NvZGVjLCBzYWE3MTE0LCBhZHY3MTcwLCB6cjM2MDYwLCB6cjM2MDY3CiBJbnB1dHMvb3V0cHV0czogQ29tcG9zaXRlIGFuZCBTLXZpZGVvCiBOb3JtczogUEFMICg3MjB4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNzIweDQ4MCBAIDI5Ljk3IGZwcykKIENhcmQgbnVtYmVyOiA2CkBAIC02MSw3ICs2MSw3IEBACiAqIFBoaWxpcHMgc2FhNzExMGEgVFYgZGVjb2RlcgogKiBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIKIERyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKLSAgICAgICAgICAgICAgICB2aWRlb2NvZGVjLCBzYWE3MTEwLCBhZHY3MTc1LCB6cjM2MDYwLCB6cjM2MDY3CisJCXZpZGVvY29kZWMsIHNhYTcxMTAsIGFkdjcxNzUsIHpyMzYwNjAsIHpyMzYwNjcKIElucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUsIFMtdmlkZW8gYW5kIEludGVybmFsCiBOb3JtczogUEFMLCBTRUNBTSAoNzY4eDU3NiBAIDI1IGZwcyksIE5UU0MgKDY0MHg0ODAgQCAyOS45NyBmcHMpCiBDYXJkIG51bWJlcjogMQpAQCAtODQsNyArODQsNyBAQAogKiBNaWNyb25hcyB2cHgzMjIwYSBUViBkZWNvZGVyCiAqIG1zZTMwMDAgVFYgZW5jb2RlciBvciBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIgKgogRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAotICAgICAgICAgICAgICAgIHZpZGVvY29kZWMsIHZweDMyMjAsIG1zZTMwMDAvYWR2NzE3NSwgenIzNjA1MCwgenIzNjAxNiwgenIzNjA2NworCQl2aWRlb2NvZGVjLCB2cHgzMjIwLCBtc2UzMDAwL2FkdjcxNzUsIHpyMzYwNTAsIHpyMzYwMTYsIHpyMzYwNjcKIElucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUsIFMtdmlkZW8gYW5kIEludGVybmFsCiBOb3JtczogUEFMLCBTRUNBTSAoNzY4eDU3NiBAIDI1IGZwcyksIE5UU0MgKDY0MHg0ODAgQCAyOS45NyBmcHMpCiBDYXJkIG51bWJlcjogMApAQCAtOTYsNyArOTYsNyBAQAogKiBNaWNyb25hcyB2cHgzMjI1ZC92cHgzMjIwYS92cHgzMjE2YiBUViBkZWNvZGVyCiAqIEFuYWxvZyBEZXZpY2VzIGFkdjcxNzYgVFYgZW5jb2RlcgogRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAotICAgICAgICAgICAgICAgIHZpZGVvY29kZWMsIHZweDMyMjAvdnB4MzIyNCwgYWR2NzE3NSwgenIzNjA1MCwgenIzNjAxNiwgenIzNjA2NworCQl2aWRlb2NvZGVjLCB2cHgzMjIwL3ZweDMyMjQsIGFkdjcxNzUsIHpyMzYwNTAsIHpyMzYwMTYsIHpyMzYwNjcKIElucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUsIFMtdmlkZW8gYW5kIEludGVybmFsCiBOb3JtczogUEFMLCBTRUNBTSAoNzY4eDU3NiBAIDI1IGZwcyksIE5UU0MgKDY0MHg0ODAgQCAyOS45NyBmcHMpCiBDYXJkIG51bWJlcjogMwpAQCAtMTIzLDExICsxMjMsMTEgQEAKIAogVGhlIGJlc3Qga25vdyBUViBzdGFuZGFyZHMgYXJlIE5UU0MvUEFML1NFQ0FNLiBidXQgZm9yIGRlY29kaW5nIGEgZnJhbWUgdGhhdAogaW5mb3JtYXRpb24gaXMgbm90IGVub3VnaC4gVGhlcmUgYXJlIHNldmVyYWwgZm9ybWF0cyBvZiB0aGUgVFYgc3RhbmRhcmRzLgotQW5kIG5vdCBldmVyeSBUViBkZWNvZGVyIGlzIGFibGUgdG8gaGFuZGxlIGV2ZXJ5IGZvcm1hdC4gQWxzbyB0aGUgZXZlcnkgCi1jb21iaW5hdGlvbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlci4gVGhlcmUgYXJlIGN1cnJlbnRseSAxMSBkaWZmZXJlbnQgCi10diBicm9hZGNhc3QgZm9ybWF0cyBhbGwgYXZlciB0aGUgd29ybGQuIAorQW5kIG5vdCBldmVyeSBUViBkZWNvZGVyIGlzIGFibGUgdG8gaGFuZGxlIGV2ZXJ5IGZvcm1hdC4gQWxzbyB0aGUgZXZlcnkKK2NvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLiBUaGVyZSBhcmUgY3VycmVudGx5IDExIGRpZmZlcmVudAordHYgYnJvYWRjYXN0IGZvcm1hdHMgYWxsIGF2ZXIgdGhlIHdvcmxkLgogCi1UaGUgQ0NJUiBkZWZpbmVzIHBhcmFtZXRlcnMgbmVlZGVkIGZvciBicm9hZGNhc3RpbmcgdGhlIHNpZ25hbC4gCitUaGUgQ0NJUiBkZWZpbmVzIHBhcmFtZXRlcnMgbmVlZGVkIGZvciBicm9hZGNhc3RpbmcgdGhlIHNpZ25hbC4KIFRoZSBDQ0lSIGhhcyBkZWZpbmVkIGRpZmZlcmVudCBzdGFuZGFyZHM6IEEsQixELEUsRixHLEQsSCxJLEssSzEsTCxNLE4sLi4uCiBUaGUgQ0NJUiBzYXlzIG5vdCBtdWNoIGFib3V0IGFib3V0IHRoZSBjb2xvcnN5c3RlbSB1c2VkICEhIQogQW5kIHRhbGtpbmcgYWJvdXQgYSBjb2xvcnN5c3RlbSBzYXlzIG5vdCB0byBtdWNoIGFib3V0IGhvdyBpdCBpcyBicm9hZGNhc3QuCkBAIC0xMzYsMTggKzEzNiwxOCBAQAogCiBXaGVuIHlvdSBzcGVhayBhYm91dCBOVFNDLCB5b3UgdXN1YWxseSBtZWFuIHRoZSBzdGFuZGFyZDogQ0NJUiAtIE0gdXNpbmcKIHRoZSBOVFNDIGNvbG9yc3lzdGVtIHdoaWNoIGlzIHVzZWQgaW4gdGhlIFVTQSwgSmFwYW4sIE1leGljbywgQ2FuYWRhCi1hbmQgYSBmZXcgb3RoZXJzLiAKK2FuZCBhIGZldyBvdGhlcnMuCiAKIFdoZW4geW91IHRhbGsgYWJvdXQgUEFMLCB5b3UgdXN1YWxseSBtZWFuOiBDQ0lSIC0gQi9HIHVzaW5nIHRoZSBQQUwKLWNvbG9yc3lzdGVtIHdoaWNoIGlzIHVzZWQgaW4gbWFueSBDb3VudHJpZXMuIAorY29sb3JzeXN0ZW0gd2hpY2ggaXMgdXNlZCBpbiBtYW55IENvdW50cmllcy4KIAotV2hlbiB5b3UgdGFsayBhYm91dCBTRUNBTSwgeW91IG1lYW46IENDSVIgLSBMIHVzaW5nIHRoZSBTRUNBTSBDb2xvcnN5c3RlbSAKK1doZW4geW91IHRhbGsgYWJvdXQgU0VDQU0sIHlvdSBtZWFuOiBDQ0lSIC0gTCB1c2luZyB0aGUgU0VDQU0gQ29sb3JzeXN0ZW0KIHdoaWNoIGlzIHVzZWQgaW4gRnJhbmNlLCBhbmQgYSBmZXcgb3RoZXJzLgogCiBUaGVyZSB0aGUgb3RoZXIgdmVyc2lvbiBvZiBTRUNBTSwgQ0NJUiAtIEQvSyBpcyB1c2VkIGluIEJ1bGdhcmlhLCBDaGluYSwKLVNsb3Zha2FpLCBIdW5nYXJ5LCBLb3JlYSAoUmVwLiksIFBvbGFuZCwgUnVtYW5pYSBhbmQgYSBvdGhlcnMuIAorU2xvdmFrYWksIEh1bmdhcnksIEtvcmVhIChSZXAuKSwgUG9sYW5kLCBSdW1hbmlhIGFuZCBhIG90aGVycy4KIAotVGhlIENDSVIgLSBIIHVzZXMgdGhlIFBBTCBjb2xvcnN5c3RlbSAoc29tZXRpbWVzIFNFQ0FNKSBhbmQgaXMgdXNlZCBpbiAKK1RoZSBDQ0lSIC0gSCB1c2VzIHRoZSBQQUwgY29sb3JzeXN0ZW0gKHNvbWV0aW1lcyBTRUNBTSkgYW5kIGlzIHVzZWQgaW4KIEVneXB0LCBMaWJ5YSwgU3JpIExhbmthLCBTeXJhaW4gQXJhYi4gUmVwLgogCiBUaGUgQ0NJUiAtIEkgdXNlcyB0aGUgUEFMIGNvbG9yc3lzdGVtLCBhbmQgaXMgdXNlZCBpbiBHcmVhdCBCcml0YWluLCBIb25nIEtvbmcsCkBAIC0xNTgsMzAgKzE1OCwzMCBAQAogCiBXZSBkbyBub3QgdGFsayBhYm91dCBob3cgdGhlIGF1ZGlvIGlzIGJyb2FkY2FzdCAhCiAKLUEgcmF0aGVyIGdvb2Qgc2l0ZXMgYWJvdXQgdGhlIFRWIHN0YW5kYXJkcyBhcmU6IAorQSByYXRoZXIgZ29vZCBzaXRlcyBhYm91dCB0aGUgVFYgc3RhbmRhcmRzIGFyZToKIGh0dHA6Ly93d3cuc29ueS5qcC9TZXJ2aWNlQXJlYS9Wb2x0YWdlX21hcC8KIGh0dHA6Ly9pbmZvLmVsZWN0cm9uaWN3ZXJrc3RhdHQuZGUvYmVyZWljaGUvZmVybnNlaHRlY2huaWsvZnJlcXVlbnplbl91bmRfbm9ybWVuL0Zlcm5zZWhub3JtZW4vCiBhbmQgaHR0cDovL3d3dy5jYWJsLmNvbS9yZXN0YXVyYW50L2NoYW5uZWwuaHRtbAogCiBPdGhlciB3ZWlyZCB0aGluZ3MgYXJvdW5kOiBOVFNDIDQuNDMgaXMgYSBtb2RpZmljYXRlZCBOVFNDLCB3aGljaCBpcyBtYWlubHkKIHVzZWQgaW4gUEFMIFZDUidzIHRoYXQgYXJlIGFibGUgdG8gcGxheSBiYWNrIE5UU0MuIFBBTCA2MCBzZWVtcyB0byBiZSB0aGUgc2FtZQotYXMgTlRTQyA0LjQzIC4gVGhlIERhdGFzaGVldHMgYWxzbyB0YWxrIGFib3V0IE5UU0MgNDQsIEl0IHNlZW1zIGFzIGlmIGl0IHdvdWxkIAotYmUgdGhlIHNhbWUgYXMgTlRTQyA0LjQzLiAKK2FzIE5UU0MgNC40MyAuIFRoZSBEYXRhc2hlZXRzIGFsc28gdGFsayBhYm91dCBOVFNDIDQ0LCBJdCBzZWVtcyBhcyBpZiBpdCB3b3VsZAorYmUgdGhlIHNhbWUgYXMgTlRTQyA0LjQzLgogTlRTQyBDb21icyBzZWVtcyB0byBiZSBhIGRlY29kZXIgbW9kZSB3aGVyZSB0aGUgZGVjb2RlciB1c2VzIGEgY29tYiBmaWx0ZXIKIHRvIHNwbGl0IGNvbWEgYW5kIGx1bWEgaW5zdGVhZCBvZiBhIERlbGF5IGxpbmUuCiAKIEJ1dCBJIGRpZCBub3QgZGVmaWFudGx5IGZpbmQgb3V0IHdoYXQgTlRTQyBDb21iIGlzLgogCiBQaGlsaXBzIHNhYTcxMTEgVFYgZGVjb2Rlcgotd2FzIGludHJvZHVjZWQgaW4gMTk5NywgaXMgdXNlZCBpbiB0aGUgQlVaIGFuZCAKLWNhbiBoYW5kbGU6IFBBTCBCL0cvSC9JLCBQQUwgTiwgUEFMIE0sIE5UU0MgTSwgTlRTQyBOLCBOVFNDIDQuNDMgYW5kIFNFQ0FNIAord2FzIGludHJvZHVjZWQgaW4gMTk5NywgaXMgdXNlZCBpbiB0aGUgQlVaIGFuZAorY2FuIGhhbmRsZTogUEFMIEIvRy9IL0ksIFBBTCBOLCBQQUwgTSwgTlRTQyBNLCBOVFNDIE4sIE5UU0MgNC40MyBhbmQgU0VDQU0KIAogUGhpbGlwcyBzYWE3MTEwYSBUViBkZWNvZGVyCiB3YXMgaW50cm9kdWNlZCBpbiAxOTk1LCBpcyB1c2VkIGluIHRoZSBQaW5uYWNsZS9NaXJvIERDMTAobmV3KSwgREMxMCsgYW5kCi1jYW4gaGFuZGxlOiBQQUwgQi9HLCBOVFNDIE0gYW5kIFNFQ0FNIAorY2FuIGhhbmRsZTogUEFMIEIvRywgTlRTQyBNIGFuZCBTRUNBTQogCiBQaGlsaXBzIHNhYTcxMTQgVFYgZGVjb2Rlcgotd2FzIGludHJvZHVjZWQgaW4gMjAwMCwgaXMgdXNlZCBpbiB0aGUgTE1MMzNSMTAgYW5kICAKK3dhcyBpbnRyb2R1Y2VkIGluIDIwMDAsIGlzIHVzZWQgaW4gdGhlIExNTDMzUjEwIGFuZAogY2FuIGhhbmRsZTogUEFMIEIvRy9EL0gvSS9OLCBQQUwgTiwgUEFMIE0sIE5UU0MgTSwgTlRTQyA0LjQzIGFuZCBTRUNBTQogCiBCcm9va3RyZWUgYnQ4MTkgVFYgZGVjb2RlcgpAQCAtMjA2LDcgKzIwNiw3IEBACiBjYW4gZ2VuZXJhdGU6IFBBTCBCL0csIE5UU0MgTQogCiBCcm9va3RyZWUgYnQ4NTYgVFYgRW5jb2Rlcgotd2FzIGludHJvZHVjZWQgaW4gMTk5NCwgaXMgdXNlZCBpbiB0aGUgTE1MMzMgCit3YXMgaW50cm9kdWNlZCBpbiAxOTk0LCBpcyB1c2VkIGluIHRoZSBMTUwzMwogY2FuIGdlbmVyYXRlOiBQQUwgQi9EL0cvSC9JL04sIFBBTCBNLCBOVFNDIE0sIFBBTC1OIChBcmdlbnRpbmEpCiAKIEFuYWxvZyBEZXZpY2VzIGFkdjcxNzAgVFYgRW5jb2RlcgpAQCAtMjIxLDkgKzIyMSw5IEBACiB3YXMgaW50cm9kdWNlZCBpbiAxOTkxLCBpcyB1c2VkIGluIHRoZSBEQzEwIG9sZAogY2FuIGdlbmVyYXRlOiBQQUwgLCBOVFNDICwgU0VDQU0KIAotVGhlIGFkdjcxN3gsIHNob3VsZCBiZSBhYmxlIHRvIHByb2R1Y2UgUEFMIE4uIEJ1dCB5b3UgZmluZCBub3RoaW5nIFBBTCBOIAorVGhlIGFkdjcxN3gsIHNob3VsZCBiZSBhYmxlIHRvIHByb2R1Y2UgUEFMIE4uIEJ1dCB5b3UgZmluZCBub3RoaW5nIFBBTCBOCiBzcGVjaWZpYyBpbiB0aGUgcmVnaXN0ZXJzLiBTZWVtIHRoYXQgeW91IGhhdmUgdG8gcmV1c2UgYSBvdGhlciBzdGFuZGFyZAotdG8gZ2VuZXJhdGUgUEFMIE4sIG1heWJlIGl0IHdvdWxkIHdvcmsgaWYgeW91IHVzZSB0aGUgUEFMIE0gc2V0dGluZ3MuIAordG8gZ2VuZXJhdGUgUEFMIE4sIG1heWJlIGl0IHdvdWxkIHdvcmsgaWYgeW91IHVzZSB0aGUgUEFMIE0gc2V0dGluZ3MuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiBWSUEgTVZQMwogCUZvcmdldCBpdC4gUG9pbnRsZXNzLiBEb2Vzbid0IHdvcmsuCi1JbnRlbCA0MzBGWCAoUGVudGl1bSAyMDApIAorSW50ZWwgNDMwRlggKFBlbnRpdW0gMjAwKQogCUxNTDMzIHBlcmZlY3QsIEJ1eiB0b2xlcmFibGUgKDMgb3IgNCBmcmFtZXMgZHJvcHBlZCBwZXIgbW92aWUpCiBJbnRlbCA0NDBCWCAoZWFybHkgc3RlcHBpbmcpCiAJTE1MMzMgdG9sZXJhYmxlLiBCdXogc3RhcnRpbmcgdG8gZ2V0IGFubm95aW5nICg2LTEwIGZyYW1lcy9ob3VyKQpAQCAtNDM4LDUyICs0MzgsNTIgQEAKID4gLXEgMjUgLWIgMTI4IDogMjQuNjU1Ljk5MgogPiAtcSAyNSAtYiAyNTYgOiAyNS44NTkuODIwCiAKLUkgd29rZSB1cCwgYW5kIGNhbid0IGdvIHRvIHNsZWVwIGFnYWluLiBJJ2xsIGtpbGwgc29tZSB0aW1lIGV4cGxhaW5pbmcgd2h5IAorSSB3b2tlIHVwLCBhbmQgY2FuJ3QgZ28gdG8gc2xlZXAgYWdhaW4uIEknbGwga2lsbCBzb21lIHRpbWUgZXhwbGFpbmluZyB3aHkKIHRoaXMgZG9lc24ndCBsb29rIHN0cmFuZ2UgdG8gbWUuCiAKLUxldCdzIGRvIHNvbWUgbWF0aCB1c2luZyBhIHdpZHRoIG9mIDcwNCBwaXhlbHMuIEknbSBub3Qgc3VyZSB3aGV0aGVyIHRoZSBCdXogCitMZXQncyBkbyBzb21lIG1hdGggdXNpbmcgYSB3aWR0aCBvZiA3MDQgcGl4ZWxzLiBJJ20gbm90IHN1cmUgd2hldGhlciB0aGUgQnV6CiBhY3R1YWxseSB1c2UgdGhhdCBudW1iZXIgb3Igbm90LCBidXQgdGhhdCdzIG5vdCB0b28gaW1wb3J0YW50IHJpZ2h0IG5vdy4KIAotNzA0eDI4OCBwaXhlbHMsIG9uZSBmaWVsZCwgaXMgMjAyNzUyIHBpeGVscy4gRGl2aWRlZCBieSA2NCBwaXhlbHMgcGVyIGJsb2NrOyAKLTMxNjggYmxvY2tzIHBlciBmaWVsZC4gRWFjaCBwaXhlbCBjb25zaXN0IG9mIHR3byBieXRlczsgMTI4IGJ5dGVzIHBlciBibG9jazsgCi0xMDI0IGJpdHMgcGVyIGJsb2NrLiAxMDAlIGluIHRoZSBuZXcgZHJpdmVyIG1lYW4gMToyIGNvbXByZXNzaW9uOyB0aGUgbWF4aW11bSAKLW91dHB1dCBiZWNvbWVzIDUxMiBiaXRzIHBlciBibG9jay4gQWN0dWFsbHkgNTEwLCBidXQgNTEyIGlzIHNpbXBsZXIgdG8gdXNlIAorNzA0eDI4OCBwaXhlbHMsIG9uZSBmaWVsZCwgaXMgMjAyNzUyIHBpeGVscy4gRGl2aWRlZCBieSA2NCBwaXhlbHMgcGVyIGJsb2NrOworMzE2OCBibG9ja3MgcGVyIGZpZWxkLiBFYWNoIHBpeGVsIGNvbnNpc3Qgb2YgdHdvIGJ5dGVzOyAxMjggYnl0ZXMgcGVyIGJsb2NrOworMTAyNCBiaXRzIHBlciBibG9jay4gMTAwJSBpbiB0aGUgbmV3IGRyaXZlciBtZWFuIDE6MiBjb21wcmVzc2lvbjsgdGhlIG1heGltdW0KK291dHB1dCBiZWNvbWVzIDUxMiBiaXRzIHBlciBibG9jay4gQWN0dWFsbHkgNTEwLCBidXQgNTEyIGlzIHNpbXBsZXIgdG8gdXNlCiBmb3IgY2FsY3VsYXRpb25zLgogCi1MZXQncyBzYXkgdGhhdCB3ZSBzcGVjaWZ5IGQxcTUwLiBXZSB0aHVzIHdhbnQgMjU2IGJpdHMgcGVyIGJsb2NrOyB0aW1lcyAzMTY4IAotYmVjb21lcyA4MTEwMDggYml0czsgMTAxMzc2IGJ5dGVzIHBlciBmaWVsZC4gV2UncmUgdGFsa2luZyByYXcgYml0cyBhbmQgYnl0ZXMgCi1oZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBmYW5jeSBjb3JyZWN0aW9ucyBmb3IgYml0cy1wZXItcGl4ZWwgb3Igc3VjaCAKK0xldCdzIHNheSB0aGF0IHdlIHNwZWNpZnkgZDFxNTAuIFdlIHRodXMgd2FudCAyNTYgYml0cyBwZXIgYmxvY2s7IHRpbWVzIDMxNjgKK2JlY29tZXMgODExMDA4IGJpdHM7IDEwMTM3NiBieXRlcyBwZXIgZmllbGQuIFdlJ3JlIHRhbGtpbmcgcmF3IGJpdHMgYW5kIGJ5dGVzCitoZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBmYW5jeSBjb3JyZWN0aW9ucyBmb3IgYml0cy1wZXItcGl4ZWwgb3Igc3VjaAogdGhpbmdzLiAxMDEzNzYgYnl0ZXMgcGVyIGZpZWxkLgogCi1kMSB2aWRlbyBjb250YWlucyB0d28gZmllbGRzIHBlciBmcmFtZS4gVGhvc2Ugc3VtIHVwIHRvIDIwMjc1MiBieXRlcyBwZXIgCitkMSB2aWRlbyBjb250YWlucyB0d28gZmllbGRzIHBlciBmcmFtZS4gVGhvc2Ugc3VtIHVwIHRvIDIwMjc1MiBieXRlcyBwZXIKIGZyYW1lLCBhbmQgb25lIG9mIHRob3NlIGZyYW1lcyBnb2VzIGludG8gZWFjaCBidWZmZXIuCiAKLUJ1dCB3YWl0IGEgc2Vjb25kISAtYjEyOCBnaXZlcyAxMjhrQiBidWZmZXJzISBJdCdzIG5vdCBwb3NzaWJsZSB0byBjcmFtIAorQnV0IHdhaXQgYSBzZWNvbmQhIC1iMTI4IGdpdmVzIDEyOGtCIGJ1ZmZlcnMhIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyYW0KIDIwMjc1MiBieXRlcyBvZiBKUEVHIGRhdGEgaW50byAxMjhrQiEKIAotVGhpcyBpcyB3aGF0IHRoZSBkcml2ZXIgbm90aWNlIGFuZCBhdXRvbWF0aWNhbGx5IGNvbXBlbnNhdGUgZm9yIGluIHlvdXIgCitUaGlzIGlzIHdoYXQgdGhlIGRyaXZlciBub3RpY2UgYW5kIGF1dG9tYXRpY2FsbHkgY29tcGVuc2F0ZSBmb3IgaW4geW91cgogZXhhbXBsZXMuIExldCdzIGRvIHNvbWUgbWF0aCB1c2luZyB0aGlzIGluZm9ybWF0aW9uOgogCi0xMjhrQiBpcyAxMzEwNzIgYnl0ZXMuIEluIHRoaXMgYnVmZmVyLCB3ZSB3YW50IHRvIHN0b3JlIHR3byBmaWVsZHMsIHdoaWNoIAotbGVhdmVzIDY1NTM2IGJ5dGVzIGZvciBlYWNoIGZpZWxkLiBVc2luZyAzMTY4IGJsb2NrcyBwZXIgZmllbGQsIHdlIGdldCAKLTIwLjY4Njg2ODY4Li4uIGF2YWlsYWJsZSBieXRlcyBwZXIgYmxvY2s7IDE2NSBiaXRzLiBXZSBjYW4ndCBhbGxvdyB0aGUgCi1yZXF1ZXN0IGZvciAyNTYgYml0cyBwZXIgYmxvY2sgd2hlbiB0aGVyZSdzIG9ubHkgMTY1IGJpdHMgYXZhaWxhYmxlISBUaGUgLXE1MCAKLW9wdGlvbiBpcyBzaWxlbnRseSBvdmVycmlkZGVuLCBhbmQgdGhlIC1iMTI4IG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlLCBsZWF2aW5nIAorMTI4a0IgaXMgMTMxMDcyIGJ5dGVzLiBJbiB0aGlzIGJ1ZmZlciwgd2Ugd2FudCB0byBzdG9yZSB0d28gZmllbGRzLCB3aGljaAorbGVhdmVzIDY1NTM2IGJ5dGVzIGZvciBlYWNoIGZpZWxkLiBVc2luZyAzMTY4IGJsb2NrcyBwZXIgZmllbGQsIHdlIGdldAorMjAuNjg2ODY4NjguLi4gYXZhaWxhYmxlIGJ5dGVzIHBlciBibG9jazsgMTY1IGJpdHMuIFdlIGNhbid0IGFsbG93IHRoZQorcmVxdWVzdCBmb3IgMjU2IGJpdHMgcGVyIGJsb2NrIHdoZW4gdGhlcmUncyBvbmx5IDE2NSBiaXRzIGF2YWlsYWJsZSEgVGhlIC1xNTAKK29wdGlvbiBpcyBzaWxlbnRseSBvdmVycmlkZGVuLCBhbmQgdGhlIC1iMTI4IG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlLCBsZWF2aW5nCiB1cyB3aXRoIHRoZSBlcXVpdmFsZW5jZSBvZiAtcTMyLgogCi1UaGlzIGdpdmVzIHVzIGEgZGF0YSByYXRlIG9mIDE2NSBiaXRzIHBlciBibG9jaywgd2hpY2gsIHRpbWVzIDMxNjgsIHN1bXMgdXAgCi10byA2NTM0MCBieXRlcyBwZXIgZmllbGQsIG91dCBvZiB0aGUgYWxsb3dlZCA2NTUzNi4gVGhlIGN1cnJlbnQgZHJpdmVyIGhhcyAKLWFub3RoZXIgbGV2ZWwgb2YgcmF0ZSBsaW1pdGluZzsgaXQgd29uJ3QgYWNjZXB0IC1xIHZhbHVlcyB0aGF0IGZpbGwgbW9yZSB0aGFuIAotNi84IG9mIHRoZSBzcGVjaWZpZWQgYnVmZmVycy4gKEknbSBub3Qgc3VyZSB3aHkuICJQbGF5aW5nIGl0IHNhZmUiIHNlZW0gdG8gYmUgCi1hIHNhZmUgYmV0LiBQZXJzb25hbGx5LCBJIHRoaW5rIEkgd291bGQgaGF2ZSBsb3dlcmVkIHJlcXVlc3RlZC1iaXRzLXBlci1ibG9jayAKLWJ5IG9uZSwgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4pIFdlIGNhbid0IHVzZSAxNjUgYml0cyBwZXIgYmxvY2ssIGJ1dCBoYXZlIHRvIAotbG93ZXIgaXQgYWdhaW4sIHRvIDYvOCBvZiB0aGUgYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZTogV2UgZW5kIHVwIHdpdGggMTI0IGJpdHMgCi1wZXIgYmxvY2ssIHRoZSBlcXVpdmFsZW5jZSBvZiAtcTI0LiBXaXRoIDEyOGtCIGJ1ZmZlcnMsIHlvdSBjYW4ndCB1c2UgZ3JlYXRlciAKK1RoaXMgZ2l2ZXMgdXMgYSBkYXRhIHJhdGUgb2YgMTY1IGJpdHMgcGVyIGJsb2NrLCB3aGljaCwgdGltZXMgMzE2OCwgc3VtcyB1cAordG8gNjUzNDAgYnl0ZXMgcGVyIGZpZWxkLCBvdXQgb2YgdGhlIGFsbG93ZWQgNjU1MzYuIFRoZSBjdXJyZW50IGRyaXZlciBoYXMKK2Fub3RoZXIgbGV2ZWwgb2YgcmF0ZSBsaW1pdGluZzsgaXQgd29uJ3QgYWNjZXB0IC1xIHZhbHVlcyB0aGF0IGZpbGwgbW9yZSB0aGFuCis2Lzggb2YgdGhlIHNwZWNpZmllZCBidWZmZXJzLiAoSSdtIG5vdCBzdXJlIHdoeS4gIlBsYXlpbmcgaXQgc2FmZSIgc2VlbSB0byBiZQorYSBzYWZlIGJldC4gUGVyc29uYWxseSwgSSB0aGluayBJIHdvdWxkIGhhdmUgbG93ZXJlZCByZXF1ZXN0ZWQtYml0cy1wZXItYmxvY2sKK2J5IG9uZSwgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4pIFdlIGNhbid0IHVzZSAxNjUgYml0cyBwZXIgYmxvY2ssIGJ1dCBoYXZlIHRvCitsb3dlciBpdCBhZ2FpbiwgdG8gNi84IG9mIHRoZSBhdmFpbGFibGUgYnVmZmVyIHNwYWNlOiBXZSBlbmQgdXAgd2l0aCAxMjQgYml0cworcGVyIGJsb2NrLCB0aGUgZXF1aXZhbGVuY2Ugb2YgLXEyNC4gV2l0aCAxMjhrQiBidWZmZXJzLCB5b3UgY2FuJ3QgdXNlIGdyZWF0ZXIKIHRoYW4gLXEyNCBhdCAtZDEuIChBbmQgUEFMLCBhbmQgNzA0IHBpeGVscyB3aWR0aC4uLikKIAotVGhlIHRoaXJkIGV4YW1wbGUgaXMgbGltaXRlZCB0byAtcTI0IHRocm91Z2ggdGhlIHNhbWUgcHJvY2Vzcy4gVGhlIHNlY29uZCAKLWV4YW1wbGUsIHVzaW5nIHZlcnkgc2ltaWxhciBjYWxjdWxhdGlvbnMsIGlzIGxpbWl0ZWQgdG8gLXE0OC4gVGhlIG9ubHkgCi1leGFtcGxlIHRoYXQgYWN0dWFsbHkgZ3JhYiBhdCB0aGUgc3BlY2lmaWVkIC1xIHZhbHVlIGlzIHRoZSBsYXN0IG9uZSwgd2hpY2ggCitUaGUgdGhpcmQgZXhhbXBsZSBpcyBsaW1pdGVkIHRvIC1xMjQgdGhyb3VnaCB0aGUgc2FtZSBwcm9jZXNzLiBUaGUgc2Vjb25kCitleGFtcGxlLCB1c2luZyB2ZXJ5IHNpbWlsYXIgY2FsY3VsYXRpb25zLCBpcyBsaW1pdGVkIHRvIC1xNDguIFRoZSBvbmx5CitleGFtcGxlIHRoYXQgYWN0dWFsbHkgZ3JhYiBhdCB0aGUgc3BlY2lmaWVkIC1xIHZhbHVlIGlzIHRoZSBsYXN0IG9uZSwgd2hpY2gKIGlzIGNsZWFybHkgdmlzaWJsZSwgbG9va2luZyBhdCB0aGUgZmlsZSBzaXplLgogLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0lDcyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JQ3MKaW5kZXggNmI3NDkxMy4uNjExMzE1ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0lDcworKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSUNzCkBAIC0xNCwxMyArMTQsMTMgQEAKIAogTWljcm9jaGlwIDI0TEMwMkIgb3IKIFBoaWxpcHMgODU4MkUyWTogMjU2IEJ5dGUgRUVQUk9NIHdpdGggY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgICBJMkMgMHhhMC0weGExLCAoMjRMQzAyQiBhbHNvIHJlc3BvbmRzIHRvIDB4YTItMHhhZikKKwkJIEkyQyAweGEwLTB4YTEsICgyNExDMDJCIGFsc28gcmVzcG9uZHMgdG8gMHhhMi0weGFmKQogUGhpbGlwcyBTQUE1MjQ2QUdQL0U6IFZpZGVvdGV4dCBkZWNvZGVyIGNoaXAsIEkyQyAweDIyLTB4MjMKIFREQTk4MDA6IHNvdW5kIGRlY29kZXIKIFdpbmJvbmQgVzI0MjU3QVMtMzU6IDMyS3g4IENNT1Mgc3RhdGljIFJBTSAoVmlkZW90ZXh0IGJ1ZmZlciBtZW0pCiAxNDA1MkI6IGFuYWxvZyBzd2l0Y2ggZm9yIHNlbGVjdGlvbiBvZiBzb3VuZCBzb3VyY2UKIAotUEFMOiAKK1BBTDoKIFREQTU3Mzc6IFZIRiwgaHlwZXJiYW5kIGFuZCBVSEYgbWl4ZXIvb3NjaWxsYXRvciBmb3IgVFYgYW5kIFZDUiAzLWJhbmQgdHVuZXJzCiBUU0E1NTIyOiAxLjQgR0h6IEkyQy1idXMgY29udHJvbGxlZCBzeW50aGVzaXplciwgSTJDIDB4YzItMHhjMwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUFJPQkxFTVMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUFJPQkxFTVMKaW5kZXggOGUzMWU5ZS4uMmI4YjAwNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1BST0JMRU1TCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9QUk9CTEVNUwpAQCAtMyw3ICszLDcgQEAKIC0gU3RhcnQgY2FwdHVyaW5nIGJ5IHByZXNzaW5nICJjIiBvciBieSBzZWxlY3RpbmcgaXQgdmlhIGEgbWVudSEhIQogCiAtIFRoZSBtZW1vcnkgb2Ygc29tZSBTMyBjYXJkcyBpcyBub3QgcmVjb2duaXplZCByaWdodDoKLSAgCisKICAgRmlyc3Qgb2YgYWxsLCBpZiB5b3UgYXJlIG5vdCB1c2luZyBYRnJlZS0zLjIgb3IgbmV3ZXIsIHVwZ3JhZGUgQVQgTEVBU1QgdG8KICAgWEZyZWUtMy4yQSEgVGhpcyBzb2x2ZWQgdGhlIHByb2JsZW0gZm9yIG1vc3QgcGVvcGxlLgogCkBAIC0zMSwyMyArMzEsMjMgQEAKICAgKG1vc3RseSB3aXRoIFRyaW8gNjQgYnV0IGFsc28gd2l0aCBzb21lIG90aGVycykKICAgR2V0IHRoZSBmcmVlIGRlbW8gdmVyc2lvbiBvZiBBY2NlbGVyYXRlZCBYIGZyb20gd3d3LnhpbnNpZGUuY29tIGFuZCB0cnkKICAgYnR0diB3aXRoIGl0LiBidHR2IHNlZW1zIHRvIHdvcmsgd2l0aCBtb3N0IFMzIGNhcmRzIHdpdGggQWNjZWxlcmF0ZWQgWC4KLSAgCisKICAgU2luY2UgSSBkbyBub3Qga25vdyBtdWNoIChiZXR0ZXIgbWFrZSB0aGF0IGFsbW9zdCBub3RoaW5nKSBhYm91dCBWR0EgY2FyZAogICBwcm9ncmFtbWluZyBJIGRvIG5vdCBrbm93IHRoZSByZWFzb24gZm9yIHRoaXMuCiAgIExvb2tzIGxpa2UgWEZyZWUgZG9lcyBzb21ldGhpbmcgZGlmZmVyZW50IHdoZW4gc2V0dGluZyB1cCB0aGUgdmlkZW8gbWVtb3J5PwotICBNYXliZSBzb21lYm9keSBjYW4gZW5saWdodGVuIG1lPyAgCi0gIFdvdWxkIGJlIG5pY2UgaWYgc29tZWJvZHkgY291bGQgZ2V0IHRoaXMgdG8gd29yayB3aXRoIFhGcmVlIHNpbmNlIAotICBBY2NlbGVyYXRlZCBYIGNvc3RzIG1vcmUgdGhhbiBzb21lIG9mIHRoZSBncmFiYmVyIGNhcmRzIC4uLiAKLSAKKyAgTWF5YmUgc29tZWJvZHkgY2FuIGVubGlnaHRlbiBtZT8KKyAgV291bGQgYmUgbmljZSBpZiBzb21lYm9keSBjb3VsZCBnZXQgdGhpcyB0byB3b3JrIHdpdGggWEZyZWUgc2luY2UKKyAgQWNjZWxlcmF0ZWQgWCBjb3N0cyBtb3JlIHRoYW4gc29tZSBvZiB0aGUgZ3JhYmJlciBjYXJkcyAuLi4KKwogICBCZXR0ZXIgbGluZWFyIGZyYW1lIGJ1ZmZlciBzdXBwb3J0IGZvciBTMyBjYXJkcyB3aWxsIHByb2JhYmx5IGJlIGluCiAgIFhGcmVlIDQuMC4KLSAgCisKIC0gR3JhYmJpbmcgaXMgbm90IHN3aXRjaGVkIG9mZiB3aGVuIGNoYW5naW5nIGNvbnNvbGVzIHdpdGggWEZyZWUuCiAgIFRoYXQncyBiZWNhdXNlIFhGcmVlIGFuZCBzb21lIEFjY2VsZXJhdGVkWCB2ZXJzaW9ucyBkbyBub3Qgc2VuZCB1bm1hcAogICBldmVudHMuCiAKIC0gU29tZSBwb3B1cCB3aW5kb3dzIChlLmcuIG9mIHRoZSB3aW5kb3cgbWFuYWdlcikgYXJlIG5vdCByZWZyZXNoZWQuCi0gIAorCiAgIERpc2FibGUgYmFja2luZyBzdG9yZSBieSBzdGFydGluZyBYIHdpdGggdGhlIG9wdGlvbiAiLWJzIgogCiAtIFdoZW4gdXNpbmcgMzIgYnBwIGluIFhGcmVlIG9yIDI0KzhicHAgbW9kZSBpbiBBY2NlbFggMy4xIHRoZSBzeXN0ZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUucXVpcmtzIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5xdWlya3MKaW5kZXggZThlZGI4Ny4uOTJlMDM5MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5xdWlya3MKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRS5xdWlya3MKQEAgLTM4LDkgKzM4LDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGVuIHVzaW5nIHRoZSA0MzBGWCBQQ0ksIHRoZSBmb2xsb3dpbmcgcnVsZXMgd2lsbCBlbnN1cmUKLWNvbXBhdGliaWxpdHk6IAorY29tcGF0aWJpbGl0eToKIAotICgxKSBEZWFzc2VydCBSRVEgYXQgdGhlIHNhbWUgdGltZSBhcyBhc3NlcnRpbmcgRlJBTUUuIAorICgxKSBEZWFzc2VydCBSRVEgYXQgdGhlIHNhbWUgdGltZSBhcyBhc3NlcnRpbmcgRlJBTUUuCiAgKDIpIERvIG5vdCByZWFzc2VydCBSRVEgdG8gcmVxdWVzdCBhbm90aGVyIGJ1cyB0cmFuc2FjdGlvbiB1bnRpbCBhZnRlcgogICAgICBmaW5pc2gtaW5nIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1RIQU5LUyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9USEFOS1MKaW5kZXggMjA4NTM5OS4uOTUwYWE3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1RIQU5LUworKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvVEhBTktTCkBAIC0xLDYgKzEsNiBAQAogTWFueSB0aGFua3MgdG86CiAKLS0gTWFya3VzIFNjaHJvZWRlciA8c2Nocm9lZG1AdW5pLWR1ZXNzZWxkb3JmLmRlPiBmb3IgaW5mb3JtYXRpb24gb24gdGhlIEJ0ODQ4IAorLSBNYXJrdXMgU2Nocm9lZGVyIDxzY2hyb2VkbUB1bmktZHVlc3NlbGRvcmYuZGU+IGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgQnQ4NDgKICAgYW5kIHR1bmVyIHByb2dyYW1taW5nIGFuZCBoaXMgY29udHJvbCBwcm9ncmFtIHh0dmMuCiAKIC0gTWFydGluIEJ1Y2sgPG1hcnRpbi0yLmJ1Y2tAc3R1ZGVudC51bmktdWxtLmRlPiBmb3IgaGlzIGdyZWF0IFZpZGVvdGV4dApAQCAtMTYsNyArMTYsNyBAQAogLSBNSVJPIGZvciBwcm92aWRpbmcgYSBmcmVlIFBDVFYgY2FyZCBhbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgIGNvbXBvbmVudHMgb24gdGhlaXIgY2FyZHMuIChFLmcuIGhvdyB0aGUgdHVuZXIgdHlwZSBpcyBkZXRlY3RlZCkKICAgV2l0aG91dCB0aGVpciBjYXJkIEkgY291bGQgbm90IGhhdmUgZGVidWdnZWQgdGhlIE5UU0MgbW9kZS4KLQkKKwogLSBIYXVwcGF1Z2UgZm9yIHRlbGxpbmcgaG93IHRoZSBzb3VuZCBpbnB1dCBpcyBzZWxlY3RlZCBhbmQgd2hhdCBjb21wb25lbnRzCiAgIHRoZXkgZG8gYW5kIHdpbGwgdXNlIG9uIHRoZWlyIHJhZGlvIGNhcmRzLgogICBBbHNvIG1hbnkgdGhhbmtzIGZvciBmYXhpbmcgbWUgdGhlIEZNMTIxNiBkYXRhIHNoZWV0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jcGlhMl9vdmVydmlldy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2NwaWEyX292ZXJ2aWV3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmU1MzY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jcGlhMl9vdmVydmlldy50eHQKQEAgLTAsMCArMSwzOCBAQAorCQkJUHJvZ3JhbW1lcidzIFZpZXcgb2YgQ3BpYTIKKworQ3BpYTIgaXMgdGhlIHNlY29uZCBnZW5lcmF0aW9uIHZpZGVvIGNvcHJvY2Vzc29yIGZyb20gVkxTSSBWaXNpb24gTHRkIChub3cgYQorZGl2aXNpb24gb2YgU1QgTWljcm9lbGVjdHJvbmljcykuICBUaGVyZSBhcmUgdHdvIHZlcnNpb25zLiAgVGhlIGZpcnN0IGlzIHRoZQorU1RWMDY3Miwgd2hpY2ggaXMgY2FwYWJsZSBvZiB1cCB0byAzMCBmcmFtZXMgcGVyIHNlY29uZCAoZnBzKSBpbiBmcmFtZSBzaXplcwordXAgdG8gQ0lGLCBhbmQgMTUgZnBzIGZvciBWR0EgZnJhbWVzLiAgVGhlIFNUVjA2NzYgaXMgYW4gaW1wcm92ZWQgdmVyc2lvbiwKK3doaWNoIGNhbiBoYW5kbGUgdXAgdG8gMzAgZnBzIFZHQS4gIEJvdGggY29wcm9jZXNzb3JzIGNhbiBiZSBhdHRhY2hlZCB0byB0d28KK0NNT1Mgc2Vuc29ycyAtIHRoZSB2dmw2NDEwIENJRiBzZW5zb3IgYW5kIHRoZSB2dmw2NTAwIFZHQSBzZW5zb3IuICBUaGVzZSB3aWxsCitiZSByZWZlcnJlZCB0byBhcyB0aGUgNDEwIGFuZCB0aGUgNTAwIHNlbnNvcnMsIG9yIHRoZSBDSUYgYW5kIFZHQSBzZW5zb3JzLgorCitUaGUgdHdvIGNoaXBzZXRzIG9wZXJhdGUgYWxtb3N0IGlkZW50aWNhbGx5LiAgVGhlIGNvcmUgaXMgYW4gODA1MSBwcm9jZXNzb3IsCitydW5uaW5nIHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgZmlybXdhcmUuICBUaGUgNjcyIHJ1bnMgdGhlIFZQNCB2aWRlbworcHJvY2Vzc29yIGNvZGUsIHRoZSA2NzYgcnVucyBWUDUuICBUaGVyZSBhcmUgYSBmZXcgZGlmZmVyZW5jZXMgaW4gcmVnaXN0ZXIKK21hcHBpbmdzIGZvciB0aGUgdHdvIGNoaXBzLiAgSW4gdGhlc2UgY2FzZXMsIHRoZSBzeW1ib2xzIGRlZmluZWQgaW4gdGhlCitoZWFkZXIgZmlsZXMgYXJlIG1hcmtlZCB3aXRoIFZQNCBvciBWUDUgYXMgcGFydCBvZiB0aGUgc3ltYm9sIG5hbWUuCisKK1RoZSBjYW1lcmFzIGFwcGVhciBleHRlcm5hbGx5IGFzIHRocmVlIHNldHMgb2YgcmVnaXN0ZXJzLiBTZXR0aW5nIHJlZ2lzdGVyCit2YWx1ZXMgaXMgdGhlIG9ubHkgd2F5IHRvIGNvbnRyb2wgdGhlIGNhbWVyYS4gIFNvbWUgc2V0dGluZ3MgYXJlCitpbnRlcmRlcGVuZGFudCwgc3VjaCBhcyB0aGUgc2VxdWVuY2UgcmVxdWlyZWQgdG8gcG93ZXIgdXAgdGhlIGNhbWVyYS4gSSB3aWxsCit0cnkgdG8gbWFrZSBub3RlIG9mIGFsbCBvZiB0aGVzZSBjYXNlcy4KKworVGhlIHJlZ2lzdGVyIHNldHMgYXJlIGNhbGxlZCBibG9ja3MuICBCbG9jayAwIGlzIHRoZSBzeXN0ZW0gYmxvY2suICBUaGlzCitzZWN0aW9uIGlzIGFsd2F5cyBwb3dlcmVkIG9uIHdoZW4gdGhlIGNhbWVyYSBpcyBwbHVnZ2VkIGluLiAgSXQgY29udGFpbnMKK3JlZ2lzdGVycyB0aGF0IGNvbnRyb2wgaG91c2VrZWVwaW5nIGZ1bmN0aW9ucyBzdWNoIGFzIHBvd2VyaW5nIHVwIHRoZSB2aWRlbworcHJvY2Vzc29yLiAgVGhlIHZpZGVvIHByb2Nlc3NvciBpcyB0aGUgVlAgYmxvY2suICBUaGVzZSByZWdpc3RlcnMgY29udHJvbAoraG93IHRoZSB2aWRlbyBmcm9tIHRoZSBzZW5zb3IgaXMgcHJvY2Vzc2VkLiAgRXhhbXBsZXMgYXJlIHRpbWluZyByZWdpc3RlcnMsCit1c2VyIG1vZGUgKHZnYSwgcXZnYSksIHNjYWxpbmcsIGNyb3BwaW5nLCBmcmFtZXJhdGVzLCBhbmQgc28gb24uICBUaGUgbGFzdAorYmxvY2sgaXMgdGhlIHZpZGVvIGNvbXByZXNzb3IgKFZDKS4gIFRoZSB2aWRlbyBzdHJlYW0gc2VudCBmcm9tIHRoZSBjYW1lcmEgaXMKK2NvbXByZXNzZWQgYXMgTW90aW9uIEpQRUcgKEpQRUdBKS4gIFRoZSBWQyBjb250cm9scyBhbGwgb2YgdGhlIGNvbXByZXNzaW9uCitwYXJhbWV0ZXJzLiAgTG9va2luZyBhdCB0aGUgZmlsZSBjcGlhMl9yZWdpc3RlcnMuaCwgeW91IGNhbiBnZXQgYSBmdWxsIHZpZXcKK29mIHRoZXNlIHJlZ2lzdGVycyBhbmQgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgbW9zdCBvZiB0aGVtLgorCitPbmUgb3IgbW9yZSByZWdpc3RlcnMgY2FuIGJlIHNldCBvciByZWFkIGJ5IHNlbmRpbmcgYSB1c2IgY29udHJvbCBtZXNzYWdlIHRvCit0aGUgY2FtZXJhLiAgVGhlcmUgYXJlIHRocmVlIG1vZGVzIGZvciB0aGlzLiAgQmxvY2sgbW9kZSByZXF1ZXN0cyBhIG51bWJlcgorb2YgY29udGlndW91cyByZWdpc3RlcnMuICBSYW5kb20gbW9kZSByZWFkcyBvciB3cml0ZXMgcmFuZG9tIHJlZ2lzdGVycyB3aXRoCithIHR1cGxlIHN0cnVjdHVyZSBjb250YWluaW5nIGFkZHJlc3MvdmFsdWUgcGFpcnMuICBUaGUgcmVwZWF0IG1vZGUgaXMgb25seQordXNlZCBieSBWUDQgdG8gbG9hZCBhIGZpcm13YXJlIHBhdGNoLiAgSXQgY29udGFpbnMgYSBzdGFydGluZyBhZGRyZXNzIGFuZAorYSBzZXF1ZW5jZSBvZiBieXRlcyB0byBiZSB3cml0dGVuIGludG8gYSBncGlvIHBvcnQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9yYWRpb3RyYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvcmFkaW90cmFjay50eHQKaW5kZXggMmI3NTM0NS4uZDFmM2VkMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9yYWRpb3RyYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3JhZGlvdHJhY2sudHh0CkBAIC0xMzEsMTcgKzEzMSwxNyBAQAogCQl4PTB4ZmYgPT0+ICJub3Qgc3RlcmVvIiwgeD0weGZkID09PiAic3RlcmVvIGRldGVjdGVkIgogCiBTZXQgRnJlcXVlbmN5OiAgY29kZSA9IChmcmVxKjQwKSArIDEwNDg2MTg4Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCBvZiB0aGUgMjQgYml0cyBpbiBjb2RlLAotICAgICAgICAgICAgICAgIChmcm9tIExlYXN0IHRvIE1vc3QgU2lnbmlmaWNhbnQpOgotICAgICAgICAgICAgICAgICAgdG8gd3JpdGUgYSAiemVybyIgYml0LAotICAgICAgICAgICAgICAgICAgICBCQVNFIDwtLSAweDAxICAoYXVkaW8gbXV0ZSwgbm8gc3RlcmVvIGRldGVjdCwgcmFkaW8KKwkJZm9yZWFjaCBvZiB0aGUgMjQgYml0cyBpbiBjb2RlLAorCQkoZnJvbSBMZWFzdCB0byBNb3N0IFNpZ25pZmljYW50KToKKwkJICB0byB3cml0ZSBhICJ6ZXJvIiBiaXQsCisJCSAgICBCQVNFIDwtLSAweDAxICAoYXVkaW8gbXV0ZSwgbm8gc3RlcmVvIGRldGVjdCwgcmFkaW8KIAkJCQkgICAgZGlzYWJsZSwgInplcm8iIGJpdCBwaGFzZSAxLCB0dW5lciBhZGp1c3QpCi0gICAgICAgICAgICAgICAgICAgIEJBU0UgPC0tIDB4MDMgIChhdWRpbyBtdXRlLCBubyBzdGVyZW8gZGV0ZWN0LCByYWRpbworCQkgICAgQkFTRSA8LS0gMHgwMyAgKGF1ZGlvIG11dGUsIG5vIHN0ZXJlbyBkZXRlY3QsIHJhZGlvCiAJCQkJICAgIGRpc2FibGUsICJ6ZXJvIiBiaXQgcGhhc2UgMiwgdHVuZXIgYWRqdXN0KQotICAgICAgICAgICAgICAgICAgdG8gd3JpdGUgYSAib25lIiBiaXQsCi0gICAgICAgICAgICAgICAgICAgIEJBU0UgPC0tIDB4MDUgIChhdWRpbyBtdXRlLCBubyBzdGVyZW8gZGV0ZWN0LCByYWRpbworCQkgIHRvIHdyaXRlIGEgIm9uZSIgYml0LAorCQkgICAgQkFTRSA8LS0gMHgwNSAgKGF1ZGlvIG11dGUsIG5vIHN0ZXJlbyBkZXRlY3QsIHJhZGlvCiAJCQkJICAgIGRpc2FibGUsICJvbmUiIGJpdCBwaGFzZSAxLCB0dW5lciBhZGp1c3QpCi0gICAgICAgICAgICAgICAgICAgIEJBU0UgPC0tIDB4MDcgIChhdWRpbyBtdXRlLCBubyBzdGVyZW8gZGV0ZWN0LCByYWRpbworCQkgICAgQkFTRSA8LS0gMHgwNyAgKGF1ZGlvIG11dGUsIG5vIHN0ZXJlbyBkZXRlY3QsIHJhZGlvCiAJCQkJICAgIGRpc2FibGUsICJvbmUiIGJpdCBwaGFzZSAyLCB0dW5lciBhZGp1c3QpCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjYudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2Ni50eHQKaW5kZXggZTdhYzMzYS4uNzhhNjUxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2Ni50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2Ni50eHQKQEAgLTI2LDcgKzI2LDcgQEAKIEEgbWluaW1hbCB0ZXN0IGFwcGxpY2F0aW9uICh3aXRoIHNvdXJjZSkgaXMgYXZhaWxhYmxlIGZyb206CiAgIGh0dHA6Ly9oZW0uZnlyaXN0b3JnLmNvbS9tb2d1bC93OTk2Ni5odG1sCiAKLVRoZSBzbG93IGZyYW1lcmF0ZSBpcyBkdWUgdG8gbWlzc2luZyBETUEgRUNQIHJlYWQgc3VwcG9ydCBpbiB0aGUgCitUaGUgc2xvdyBmcmFtZXJhdGUgaXMgZHVlIHRvIG1pc3NpbmcgRE1BIEVDUCByZWFkIHN1cHBvcnQgaW4gdGhlCiBwYXJwb3J0IGRyaXZlcnMuIEkgbWlnaHQgYWRkIHdvcmtpbmcgRVBQIHN1cHBvcnQgbGF0ZXIuCiAKIEdvb2QgbHVjayEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjEyMC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzYxMjAudHh0CmluZGV4IDVkNjM1N2UuLmFjNmQ5MmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjEyMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2MTIwLnR4dApAQCAtMiw3ICsyLDcgQEAKIC0tLS0tLSAtLS0gLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tICAtLS0tLS0tIC0gLSAtCiAKIC0gWk9SQU4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQXV0aG9yOiBQYXVsaW5lIE1pZGRlbGluayA8bWlkZGVsaW5AcG9seXdhcmUubmw+IAorIEF1dGhvcjogUGF1bGluZSBNaWRkZWxpbmsgPG1pZGRlbGluQHBvbHl3YXJlLm5sPgogICAgRGF0ZTogMTggU2VwdGVtYmVyIDE5OTkKIFZlcnNpb246IDAuNi4xCiAKQEAgLTExNSw3ICsxMTUsNyBAQAogPG4+IGlzIHRoZSBjYXJkdHlwZSBvZiB0aGUgY2FyZCB5b3UgaGF2ZS4gVGhlIGNhcmRudW1iZXIgY2FuCiBiZSBmb3VuZCBpbiB0aGUgc291cmNlIG9mIHpyMzYxMjAuIExvb2sgZm9yIHR2Y2FyZHMuIElmIHlvdXIKIGNhcmQgaXMgbm90IHRoZXJlLCBwbGVhc2UgdHJ5IGlmIGFueSBvdGhlciBjYXJkIGdpdmVzIHNvbWUKLXJlc3BvbnNlLCBhbmQgbWFpbCBtZSBpZiB5b3UgZ290IGEgd29ya2luZyB0dmNhcmQgYWRkaXRpb24uIAorcmVzcG9uc2UsIGFuZCBtYWlsIG1lIGlmIHlvdSBnb3QgYSB3b3JraW5nIHR2Y2FyZCBhZGRpdGlvbi4KIAogUFMuIDxUVkNhcmQgZWRpdG9ycyBiZWhvbGQhKQogICAgIERvbnQgZm9yZ2V0IHRvIHNldCB2aWRlb19pbnB1dCB0byB0aGUgbnVtYmVyIG9mIGlucHV0cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlX21pZ3JhdGlvbiBiL0RvY3VtZW50YXRpb24vdm0vcGFnZV9taWdyYXRpb24KaW5kZXggYzUyODIwZi4uMGRkNGVmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlX21pZ3JhdGlvbgorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VfbWlncmF0aW9uCkBAIC0xMiwxMiArMTIsMTggQEAKIAogUGFnZSBtaWdyYXRpb24gYWxsb3dzIGEgcHJvY2VzcyB0byBtYW51YWxseSByZWxvY2F0ZSB0aGUgbm9kZSBvbiB3aGljaCBpdHMKIHBhZ2VzIGFyZSBsb2NhdGVkIHRocm91Z2ggdGhlIE1GX01PVkUgYW5kIE1GX01PVkVfQUxMIG9wdGlvbnMgd2hpbGUgc2V0dGluZwotYSBuZXcgbWVtb3J5IHBvbGljeS4gVGhlIHBhZ2VzIG9mIHByb2Nlc3MgY2FuIGFsc28gYmUgcmVsb2NhdGVkCithIG5ldyBtZW1vcnkgcG9saWN5IHZpYSBtYmluZCgpLiBUaGUgcGFnZXMgb2YgcHJvY2VzcyBjYW4gYWxzbyBiZSByZWxvY2F0ZWQKIGZyb20gYW5vdGhlciBwcm9jZXNzIHVzaW5nIHRoZSBzeXNfbWlncmF0ZV9wYWdlcygpIGZ1bmN0aW9uIGNhbGwuIFRoZQogbWlncmF0ZV9wYWdlcyBmdW5jdGlvbiBjYWxsIHRha2VzIHR3byBzZXRzIG9mIG5vZGVzIGFuZCBtb3ZlcyBwYWdlcyBvZiBhCiBwcm9jZXNzIHRoYXQgYXJlIGxvY2F0ZWQgb24gdGhlIGZyb20gbm9kZXMgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGVzLgorUGFnZSBtaWdyYXRpb24gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBieSB0aGUgbnVtYWN0bCBwYWNrYWdlIGJ5IEFuZGkgS2xlZW4KKyhhIHZlcnNpb24gbGF0ZXIgdGhhbiAwLjkuMyBpcyByZXF1aXJlZC4gR2V0IGl0IGZyb20KK2Z0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL2FrKS4gbnVtYWN0bCBwcm92aWRlZCBsaWJudW1hIHdoaWNoCitwcm92aWRlcyBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byBvdGhlciBudW1hIGZ1bmN0aW9uYWxpdHkgZm9yIHBhZ2UgbWlncmF0aW9uLgorY2F0IC9wcm9jLzxwaWQ+L251bWFfbWFwcyBhbGxvd3MgYW4gZWFzeSByZXZpZXcgb2Ygd2hlcmUgdGhlIHBhZ2VzIG9mCithIHByb2Nlc3MgYXJlIGxvY2F0ZWQuIFNlZSBhbHNvIHRoZSBudW1hX21hcHMgbWFucGFnZSBpbiB0aGUgbnVtYWN0bCBwYWNrYWdlLgogCi1NYW51YWwgbWlncmF0aW9uIGlzIHZlcnkgdXNlZnVsIGlmIGZvciBleGFtcGxlIHRoZSBzY2hlZHVsZXIgaGFzIHJlbG9jYXRlZAorTWFudWFsIG1pZ3JhdGlvbiBpcyB1c2VmdWwgaWYgZm9yIGV4YW1wbGUgdGhlIHNjaGVkdWxlciBoYXMgcmVsb2NhdGVkCiBhIHByb2Nlc3MgdG8gYSBwcm9jZXNzb3Igb24gYSBkaXN0YW50IG5vZGUuIEEgYmF0Y2ggc2NoZWR1bGVyIG9yIGFuCiBhZG1pbmlzdHJhdG9yIG1heSBkZXRlY3QgdGhlIHNpdHVhdGlvbiBhbmQgbW92ZSB0aGUgcGFnZXMgb2YgdGhlIHByb2Nlc3MKIG5lYXJlciB0byB0aGUgbmV3IHByb2Nlc3Nvci4gQXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlIHdlIG1heSBoYXZlCkBAIC0yNSwxMCArMzEsMTIgQEAKIAogTGFyZ2VyIGluc3RhbGxhdGlvbnMgdXN1YWxseSBwYXJ0aXRpb24gdGhlIHN5c3RlbSB1c2luZyBjcHVzZXRzIGludG8KIHNlY3Rpb25zIG9mIG5vZGVzLiBQYXVsIEphY2tzb24gaGFzIGVxdWlwcGVkIGNwdXNldHMgd2l0aCB0aGUgYWJpbGl0eSB0bwotbW92ZSBwYWdlcyB3aGVuIGEgdGFzayBpcyBtb3ZlZCB0byBhbm90aGVyIGNwdXNldC4gVGhpcyBhbGxvd3MgYXV0b21hdGljCi1jb250cm9sIG92ZXIgbG9jYWxpdHkgb2YgYSBwcm9jZXNzLiBJZiBhIHRhc2sgaXMgbW92ZWQgdG8gYSBuZXcgY3B1c2V0Ci10aGVuIGFsc28gYWxsIGl0cyBwYWdlcyBhcmUgbW92ZWQgd2l0aCBpdCBzbyB0aGF0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUKLXByb2Nlc3MgZG9lcyBub3Qgc2luayBkcmFtYXRpY2FsbHkgKGFzIGlzIHRoZSBjYXNlIHRvZGF5KS4KK21vdmUgcGFnZXMgd2hlbiBhIHRhc2sgaXMgbW92ZWQgdG8gYW5vdGhlciBjcHVzZXQgKFNlZSAuLi9jcHVzZXRzLnR4dCkuCitDcHVzZXRzIGFsbG93cyB0aGUgYXV0b21hdGlvbiBvZiBwcm9jZXNzIGxvY2FsaXR5LiBJZiBhIHRhc2sgaXMgbW92ZWQgdG8KK2EgbmV3IGNwdXNldCB0aGVuIGFsc28gYWxsIGl0cyBwYWdlcyBhcmUgbW92ZWQgd2l0aCBpdCBzbyB0aGF0IHRoZQorcGVyZm9ybWFuY2Ugb2YgdGhlIHByb2Nlc3MgZG9lcyBub3Qgc2luayBkcmFtYXRpY2FsbHkuIEFsc28gdGhlIHBhZ2VzCitvZiBwcm9jZXNzZXMgaW4gYSBjcHVzZXQgYXJlIG1vdmVkIGlmIHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyBvZiBhCitjcHVzZXQgYXJlIGNoYW5nZWQuCiAKIFBhZ2UgbWlncmF0aW9uIGFsbG93cyB0aGUgcHJlc2VydmF0aW9uIG9mIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBvZiBwYWdlcwogd2l0aGluIGEgZ3JvdXAgb2Ygbm9kZXMgZm9yIGFsbCBtaWdyYXRpb24gdGVjaG5pcXVlcyB3aGljaCB3aWxsIHByZXNlcnZlIGEKQEAgLTM3LDIyICs0NSwyNiBAQAogUHJvY2Vzc2VzIHdpbGwgcnVuIHdpdGggc2ltaWxhciBwZXJmb3JtYW5jZSBhZnRlciBtaWdyYXRpb24uCiAKIFBhZ2UgbWlncmF0aW9uIG9jY3VycyBpbiBzZXZlcmFsIHN0ZXBzLiBGaXJzdCBhIGhpZ2ggbGV2ZWwKLWRlc2NyaXB0aW9uIGZvciB0aG9zZSB0cnlpbmcgdG8gdXNlIG1pZ3JhdGVfcGFnZXMoKSBhbmQgdGhlbgotYSBsb3cgbGV2ZWwgZGVzY3JpcHRpb24gb2YgaG93IHRoZSBsb3cgbGV2ZWwgZGV0YWlscyB3b3JrLgorZGVzY3JpcHRpb24gZm9yIHRob3NlIHRyeWluZyB0byB1c2UgbWlncmF0ZV9wYWdlcygpIGZyb20gdGhlIGtlcm5lbAorKGZvciB1c2Vyc3BhY2UgdXNhZ2Ugc2VlIHRoZSBBbmRpIEtsZWVuJ3MgbnVtYWN0bCBwYWNrYWdlIG1lbnRpb25lZCBhYm92ZSkKK2FuZCB0aGVuIGEgbG93IGxldmVsIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUgbG93IGxldmVsIGRldGFpbHMgd29yay4KIAotQS4gVXNlIG9mIG1pZ3JhdGVfcGFnZXMoKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQS4gSW4ga2VybmVsIHVzZSBvZiBtaWdyYXRlX3BhZ2VzKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDEuIFJlbW92ZSBwYWdlcyBmcm9tIHRoZSBMUlUuCiAKICAgIExpc3RzIG9mIHBhZ2VzIHRvIGJlIG1pZ3JhdGVkIGFyZSBnZW5lcmF0ZWQgYnkgc2Nhbm5pbmcgb3ZlcgogICAgcGFnZXMgYW5kIG1vdmluZyB0aGVtIGludG8gbGlzdHMuIFRoaXMgaXMgZG9uZSBieQotICAgY2FsbGluZyBpc29sYXRlX2xydV9wYWdlKCkgb3IgX19pc29sYXRlX2xydV9wYWdlKCkuCisgICBjYWxsaW5nIGlzb2xhdGVfbHJ1X3BhZ2UoKS4KICAgIENhbGxpbmcgaXNvbGF0ZV9scnVfcGFnZSBpbmNyZWFzZXMgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIHBhZ2UKLSAgIHNvIHRoYXQgaXQgY2Fubm90IHZhbmlzaCB1bmRlciB1cy4KKyAgIHNvIHRoYXQgaXQgY2Fubm90IHZhbmlzaCB3aGlsZSB0aGUgcGFnZSBtaWdyYXRpb24gb2NjdXJzLgorICAgSXQgYWxzbyBwcmV2ZW50cyB0aGUgc3dhcHBlciBvciBvdGhlciBzY2FucyB0byBlbmNvdW50ZXIKKyAgIHRoZSBwYWdlLgogCi0yLiBHZW5lcmF0ZSBhIGxpc3Qgb2YgbmV3bHkgYWxsb2NhdGVzIHBhZ2UgdG8gbW92ZSB0aGUgY29udGVudHMKLSAgIG9mIHRoZSBmaXJzdCBsaXN0IHRvLgorMi4gR2VuZXJhdGUgYSBsaXN0IG9mIG5ld2x5IGFsbG9jYXRlcyBwYWdlLiBUaGVzZSBwYWdlcyB3aWxsIGNvbnRhaW4gdGhlCisgICBjb250ZW50cyBvZiB0aGUgcGFnZXMgZnJvbSB0aGUgZmlyc3QgbGlzdCBhZnRlciBwYWdlIG1pZ3JhdGlvbiBpcworICAgY29tcGxldGUuCiAKIDMuIFRoZSBtaWdyYXRlX3BhZ2VzKCkgZnVuY3Rpb24gaXMgY2FsbGVkIHdoaWNoIGF0dGVtcHRzCiAgICB0byBkbyB0aGUgbWlncmF0aW9uLiBJdCByZXR1cm5zIHRoZSBtb3ZlZCBwYWdlcyBpbiB0aGUKQEAgLTYzLDEzICs3NSwxNyBAQAogNC4gVGhlIGxlZnRvdmVyIHBhZ2VzIG9mIHZhcmlvdXMgdHlwZXMgYXJlIHJldHVybmVkCiAgICB0byB0aGUgTFJVIHVzaW5nIHB1dGJhY2tfdG9fbHJ1X3BhZ2VzKCkgb3Igb3RoZXJ3aXNlCiAgICBkaXNwb3NlZCBvZi4gVGhlIHBhZ2VzIHdpbGwgc3RpbGwgaGF2ZSB0aGUgcmVmY291bnQgYXMKLSAgIGluY3JlYXNlZCBieSBpc29sYXRlX2xydV9wYWdlcygpIQorICAgaW5jcmVhc2VkIGJ5IGlzb2xhdGVfbHJ1X3BhZ2VzKCkgaWYgcHV0YmFja190b19scnVfcGFnZXMoKSBpcyBub3QKKyAgIHVzZWQhIFRoZSBrZXJuZWwgbWF5IHdhbnQgdG8gaGFuZGxlIHRoZSB2YXJpb3VzIGNhc2VzIG9mIGZhaWx1cmVzIGluCisgICBkaWZmZXJlbnQgd2F5cy4KIAotQi4gT3BlcmF0aW9uIG9mIG1pZ3JhdGVfcGFnZXMoKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0IuIEhvdyBtaWdyYXRlX3BhZ2VzKCkgd29ya3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotbWlncmF0ZV9wYWdlcyBkb2VzIHNldmVyYWwgcGFzc2VzIG92ZXIgaXRzIGxpc3Qgb2YgcGFnZXMuIEEgcGFnZSBpcyBtb3ZlZAotaWYgYWxsIHJlZmVyZW5jZXMgdG8gYSBwYWdlIGFyZSByZW1vdmFibGUgYXQgdGhlIHRpbWUuCittaWdyYXRlX3BhZ2VzKCkgZG9lcyBzZXZlcmFsIHBhc3NlcyBvdmVyIGl0cyBsaXN0IG9mIHBhZ2VzLiBBIHBhZ2UgaXMgbW92ZWQKK2lmIGFsbCByZWZlcmVuY2VzIHRvIGEgcGFnZSBhcmUgcmVtb3ZhYmxlIGF0IHRoZSB0aW1lLiBUaGUgcGFnZSBoYXMKK2FscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIExSVSB2aWEgaXNvbGF0ZV9scnVfcGFnZSgpIGFuZCB0aGUgcmVmY291bnQKK2lzIGluY3JlYXNlZCBzbyB0aGF0IHRoZSBwYWdlIGNhbm5vdCBiZSBmcmVlZCB3aGlsZSBwYWdlIG1pZ3JhdGlvbiBvY2N1cnMuCiAKIFN0ZXBzOgogCkBAIC03OSwzNiArOTUsNDAgQEAKIAogMy4gTWFrZSBzdXJlIHRoYXQgdGhlIHBhZ2UgaGFzIGFzc2lnbmVkIHN3YXAgY2FjaGUgZW50cnkgaWYKICAgIGl0IGlzIGFuIGFub255b3VzIHBhZ2UuIFRoZSBzd2FwIGNhY2hlIHJlZmVyZW5jZSBpcyBuZWNlc3NhcnkKLSAgIHRvIHByZXNlcnZlIHRoZSBpbmZvcm1hdGlvbiBjb250YWluIGluIHRoZSBwYWdlIHRhYmxlIG1hcHMuCisgICB0byBwcmVzZXJ2ZSB0aGUgaW5mb3JtYXRpb24gY29udGFpbiBpbiB0aGUgcGFnZSB0YWJsZSBtYXBzIHdoaWxlCisgICBwYWdlIG1pZ3JhdGlvbiBvY2N1cnMuCiAKIDQuIFByZXAgdGhlIG5ldyBwYWdlIHRoYXQgd2Ugd2FudCB0byBtb3ZlIHRvLiBJdCBpcyBsb2NrZWQKICAgIGFuZCBzZXQgdG8gbm90IGJlaW5nIHVwdG9kYXRlIHNvIHRoYXQgYWxsIGFjY2Vzc2VzIHRvIHRoZSBuZXcKLSAgIHBhZ2UgaW1tZWRpYXRlbHkgbG9jayB3aGlsZSB3ZSBhcmUgbW92aW5nIHJlZmVyZW5jZXMuCisgICBwYWdlIGltbWVkaWF0ZWx5IGxvY2sgd2hpbGUgdGhlIG1vdmUgaXMgaW4gcHJvZ3Jlc3MuCiAKLTUuIEFsbCB0aGUgcGFnZSB0YWJsZSByZWZlcmVuY2VzIHRvIHRoZSBwYWdlIGFyZSBlaXRoZXIgZHJvcHBlZCAoZmlsZSBiYWNrZWQpCi0gICBvciBjb252ZXJ0ZWQgdG8gc3dhcCByZWZlcmVuY2VzIChhbm9ueW1vdXMgcGFnZXMpLiBUaGlzIHNob3VsZCBkZWNyZWFzZSB0aGUKLSAgIHJlZmVyZW5jZSBjb3VudC4KKzUuIEFsbCB0aGUgcGFnZSB0YWJsZSByZWZlcmVuY2VzIHRvIHRoZSBwYWdlIGFyZSBlaXRoZXIgZHJvcHBlZCAoZmlsZQorICAgYmFja2VkIHBhZ2VzKSBvciBjb252ZXJ0ZWQgdG8gc3dhcCByZWZlcmVuY2VzIChhbm9ueW1vdXMgcGFnZXMpLgorICAgVGhpcyBzaG91bGQgZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudC4KIAotNi4gVGhlIHJhZGl4IHRyZWUgbG9jayBpcyB0YWtlbgorNi4gVGhlIHJhZGl4IHRyZWUgbG9jayBpcyB0YWtlbi4gVGhpcyB3aWxsIGNhdXNlIGFsbCBwcm9jZXNzZXMgdHJ5aW5nCisgICB0byByZWVzdGFibGlzaCBhIHB0ZSB0byBibG9jayBvbiB0aGUgcmFkaXggdHJlZSBzcGlubG9jay4KIAogNy4gVGhlIHJlZmNvdW50IG9mIHRoZSBwYWdlIGlzIGV4YW1pbmVkIGFuZCB3ZSBiYWNrIG91dCBpZiByZWZlcmVuY2VzIHJlbWFpbgogICAgb3RoZXJ3aXNlIHdlIGtub3cgdGhhdCB3ZSBhcmUgdGhlIG9ubHkgb25lIHJlZmVyZW5jaW5nIHRoaXMgcGFnZS4KIAogOC4gVGhlIHJhZGl4IHRyZWUgaXMgY2hlY2tlZCBhbmQgaWYgaXQgZG9lcyBub3QgY29udGFpbiB0aGUgcG9pbnRlciB0byB0aGlzCi0gICBwYWdlIHRoZW4gd2UgYmFjayBvdXQuCisgICBwYWdlIHRoZW4gd2UgYmFjayBvdXQgYmVjYXVzZSBzb21lb25lIGVsc2UgbW9kaWZpZWQgdGhlIG1hcHBpbmcgZmlyc3QuCiAKIDkuIFRoZSBtYXBwaW5nIGlzIGNoZWNrZWQuIElmIHRoZSBtYXBwaW5nIGlzIGdvbmUgdGhlbiBhIHRydW5jYXRlIGFjdGlvbiBtYXkKICAgIGJlIGluIHByb2dyZXNzIGFuZCB3ZSBiYWNrIG91dC4KIAotMTAuIFRoZSBuZXcgcGFnZSBpcyBwcmVwcGVkIHdpdGggc29tZSBzZXR0aW5ncyBmcm9tIHRoZSBvbGQgcGFnZSBzbyB0aGF0IGFjY2Vzc2VzCi0gICB0byB0aGUgbmV3IHBhZ2Ugd2lsbCBiZSBkaXNjb3ZlcmVkIHRvIGhhdmUgdGhlIGNvcnJlY3Qgc2V0dGluZ3MuCisxMC4gVGhlIG5ldyBwYWdlIGlzIHByZXBwZWQgd2l0aCBzb21lIHNldHRpbmdzIGZyb20gdGhlIG9sZCBwYWdlIHNvIHRoYXQKKyAgIGFjY2Vzc2VzIHRvIHRoZSBuZXcgcGFnZSB3aWxsIGJlIGRpc2NvdmVyZWQgdG8gaGF2ZSB0aGUgY29ycmVjdCBzZXR0aW5ncy4KIAogMTEuIFRoZSByYWRpeCB0cmVlIGlzIGNoYW5nZWQgdG8gcG9pbnQgdG8gdGhlIG5ldyBwYWdlLgogCi0xMi4gVGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2xkIHBhZ2UgaXMgZHJvcHBlZCBiZWNhdXNlIHRoZSByZWZlcmVuY2UgaGFzIG5vdwotICAgIGJlZW4gcmVtb3ZlZC4KKzEyLiBUaGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBvbGQgcGFnZSBpcyBkcm9wcGVkIGJlY2F1c2UgdGhlIHJhZGl4IHRyZWUKKyAgICByZWZlcmVuY2UgaXMgZ29uZS4KIAotMTMuIFRoZSByYWRpeCB0cmVlIGxvY2sgaXMgZHJvcHBlZC4KKzEzLiBUaGUgcmFkaXggdHJlZSBsb2NrIGlzIGRyb3BwZWQuIFdpdGggdGhhdCBsb29rdXBzIGJlY29tZSBwb3NzaWJsZSBhZ2FpbgorICAgIGFuZCBvdGhlciBwcm9jZXNzZXMgd2lsbCBtb3ZlIGZyb20gc3Bpbm5pbmcgb24gdGhlIHRyZWUgbG9jayB0byBzbGVlcGluZyBvbgorICAgIHRoZSBsb2NrZWQgbmV3IHBhZ2UuCiAKIDE0LiBUaGUgcGFnZSBjb250ZW50cyBhcmUgY29waWVkIHRvIHRoZSBuZXcgcGFnZS4KIApAQCAtMTE5LDExICsxMzksMzcgQEAKIAogMTcuIFF1ZXVlZCB1cCB3cml0ZWJhY2sgb24gdGhlIG5ldyBwYWdlIGlzIHRyaWdnZXJlZC4KIAotMTguIElmIHN3YXAgcHRlJ3Mgd2VyZSBnZW5lcmF0ZWQgZm9yIHRoZSBwYWdlIHRoZW4gcmVtb3ZlIHRoZW0gYWdhaW4uCisxOC4gSWYgc3dhcCBwdGUncyB3ZXJlIGdlbmVyYXRlZCBmb3IgdGhlIHBhZ2UgdGhlbiByZXBsYWNlIHRoZW0gd2l0aCByZWFsCisgICAgcHRlcy4gVGhpcyB3aWxsIHJlZW5hYmxlIGFjY2VzcyBmb3IgcHJvY2Vzc2VzIG5vdCBibG9ja2VkIGJ5IHRoZSBwYWdlIGxvY2suCiAKLTE5LiBUaGUgbG9ja3MgYXJlIGRyb3BwZWQgZnJvbSB0aGUgb2xkIGFuZCBuZXcgcGFnZS4KKzE5LiBUaGUgcGFnZSBsb2NrcyBhcmUgZHJvcHBlZCBmcm9tIHRoZSBvbGQgYW5kIG5ldyBwYWdlLgorICAgIFByb2Nlc3NlcyB3YWl0aW5nIG9uIHRoZSBwYWdlIGxvY2sgY2FuIGNvbnRpbnVlLgogCi0yMC4gVGhlIG5ldyBwYWdlIGlzIG1vdmVkIHRvIHRoZSBMUlUuCisyMC4gVGhlIG5ldyBwYWdlIGlzIG1vdmVkIHRvIHRoZSBMUlUgYW5kIGNhbiBiZSBzY2FubmVkIGJ5IHRoZSBzd2FwcGVyCisgICAgZXRjIGFnYWluLgogCi1DaHJpc3RvcGggTGFtZXRlciwgRGVjZW1iZXIgMTksIDIwMDUuCitUT0RPIGxpc3QKKy0tLS0tLS0tLQorCistIFBhZ2UgbWlncmF0aW9uIHJlcXVpcmVzIHRoZSB1c2Ugb2Ygc3dhcCBoYW5kbGVzIHRvIHByZXNlcnZlIHRoZQorICBpbmZvcm1hdGlvbiBvZiB0aGUgYW5vbnltb3VzIHBhZ2UgdGFibGUgZW50cmllcy4gVGhpcyBtZWFucyB0aGF0IHN3YXAKKyAgc3BhY2UgaXMgcmVzZXJ2ZWQgYnV0IG5ldmVyIHVzZWQuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzd2FwIGhhbmRsZXMgdXNlZAorICBpcyBkZXRlcm1pbmVkIGJ5IENIVU5LX1NJWkUgKHNlZSBtbS9tZW1wb2xpY3kuYykgcGVyIG9uZ29pbmcgbWlncmF0aW9uLgorICBSZXNlcnZhdGlvbiBvZiBwYWdlcyBjb3VsZCBiZSBhdm9pZGVkIGJ5IGhhdmluZyBhIHNwZWNpYWwgdHlwZSBvZiBzd2FwCisgIGhhbmRsZSB0aGF0IGRvZXMgbm90IHJlcXVpcmUgc3dhcCBzcGFjZSBhbmQgdGhhdCB3b3VsZCBvbmx5IHRyYWNrIHRoZSBwYWdlCisgIHJlZmVyZW5jZXMuIFNvbWV0aGluZyBsaWtlIHRoYXQgd2FzIHByb3Bvc2VkIGJ5IE1hcmNlbG8gVG9zYXR0aSBpbiB0aGUKKyAgcGFzdCAoc2VhcmNoIGZvciBtaWdyYXRpb24gY2FjaGUgb24gbGttbCBvciBsaW51eC1tbUBrdmFjay5vcmcpLgorCistIFBhZ2UgbWlncmF0aW9uIHVubWFwcyBwdGVzIGZvciBmaWxlIGJhY2tlZCBwYWdlcyBhbmQgcmVxdWlyZXMgcGFnZQorICBmYXVsdHMgdG8gcmVlc3RhYmxpc2ggdGhlc2UgcHRlcy4gVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgYnkgc29tZWhvdworICByZWNvcmRpbmcgdGhlIHJlZmVyZW5jZXMgYmVmb3JlIG1pZ3JhdGlvbiBhbmQgdGhlbiByZWVzdGFibGlzaCB0aGVtIGxhdGVyLgorICBIb3dldmVyLCB0aGVyZSBhcmUgc2V2ZXJhbCBsb2NraW5nIGNoYWxsZW5nZXMgdGhhdCBoYXZlIHRvIGJlIG92ZXJjb21lCisgIGJlZm9yZSB0aGlzIGlzIHBvc3NpYmxlLgorCistIFBhZ2UgbWlncmF0aW9uIGdlbmVyYXRlcyByZWFkIHB0ZXMgZm9yIGFub255bW91cyBwYWdlcy4gRGlydHkgcGFnZQorICBmYXVsdHMgYXJlIHJlcXVpcmVkIHRvIG1ha2UgdGhlIHBhZ2VzIHdyaXRhYmxlIGFnYWluLiBJdCBtYXkgYmUgcG9zc2libGUKKyAgdG8gZ2VuZXJhdGUgYSBwdGUgbWFya2VkIGRpcnR5IGlmIGl0IGlzIGtub3duIHRoYXQgdGhlIHBhZ2UgaXMgZGlydHkgYW5kCisgIHRoYXQgdGhpcyBwcm9jZXNzIGhhcyB0aGUgb25seSByZWZlcmVuY2UgdG8gdGhhdCBwYWdlLgorCitDaHJpc3RvcGggTGFtZXRlciwgTWFyY2ggOCwgMjAwNi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ4MiBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkNTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIKQEAgLTAsMCArMSwzMSBAQAorS2VybmVsIGRyaXZlciBkczI0ODIKKz09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBEUzI0ODItMTAwLCBNYXhpbSBEUzI0ODItODAwCisgICAgUHJlZml4OiAnZHMyNDgyJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBOb25lCisgICAgRGF0YXNoZWV0czoKKyAgICAgICAgaHR0cDovL3BkZnNlcnYubWF4aW0taWMuY29tL2VuL2RzL0RTMjQ4Mi0xMDAtRFMyNDgyUy0xMDAucGRmCisgICAgICAgIGh0dHA6Ly9wZGZzZXJ2Lm1heGltLWljLmNvbS9lbi9kcy9EUzI0ODItODAwLURTMjQ4MlMtODAwLnBkZgorCitBdXRob3I6IEJlbiBHYXJkbmVyIDxiZ2FyZG5lckB3YWJ0ZWMuY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGUgTWFpeG0vRGFsbGFzIFNlbWljb25kdWN0b3IgRFMyNDgyIGlzIGEgSTJDIGRldmljZSB0aGF0IHByb3ZpZGVzCitvbmUgKERTMjQ4Mi0xMDApIG9yIGVpZ2h0IChEUzI0ODItODAwKSAxLXdpcmUgYnVzc2VzLgorCisKK0dlbmVyYWwgUmVtYXJrcworLS0tLS0tLS0tLS0tLS0tCisKK1ZhbGlkIGFkZHJlc3NlcyBhcmUgMHgxOCwgMHgxOSwgMHgxYSwgYW5kIDB4MWIuCitIb3dldmVyLCB0aGUgZGV2aWNlIGNhbm5vdCBiZSBkZXRlY3RlZCB3aXRob3V0IHdyaXRpbmcgdG8gdGhlIGkyYyBidXMsIHNvIG5vCitkZXRlY3Rpb24gaXMgZG9uZS4KK1lvdSBzaG91bGQgZm9yY2UgdGhlIGRldmljZSBhZGRyZXNzLgorCiskIG1vZHByb2JlIGRzMjQ4MiBmb3JjZT0wLDB4MTgKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggMTUzNzQwZi4uMTkyMTM1MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CkBAIC01Miw2ICs1MiwxMCBAQAogCQkgYXBpY21haW50aW1lci4gVXNlZnVsIHdoZW4geW91ciBQSVQgdGltZXIgaXMgdG90YWxseQogCQkgYnJva2VuLgogCisgICBkaXNhYmxlXzgyNTRfdGltZXIgLyBlbmFibGVfODI1NF90aW1lcgorCQkgRW5hYmxlIGludGVycnVwdCAwIHRpbWVyIHJvdXRpbmcgb3ZlciB0aGUgODI1NCBpbiBhZGRpdGlvbiB0byBvdmVyCisJICAgICAgICAgdGhlIElPLUFQSUMuIFRoZSBrZXJuZWwgdHJpZXMgdG8gc2V0IGEgc2Vuc2libGUgZGVmYXVsdC4KKwogRWFybHkgQ29uc29sZQogCiAgICBzeW50YXg6IGVhcmx5cHJpbnRrPXZnYQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA5YzU5MmFhLi40ZThmYmJjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTQ3LDYgKzE0NywxOCBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCis5UCBGSUxFIFNZU1RFTQorUDogICAgICBFcmljIFZhbiBIZW5zYmVyZ2VuCitNOiAgICAgIGVyaWN2aEBnbWFpbC5jb20KK1A6ICAgICAgUm9uIE1pbm5pY2gKK006ICAgICAgcm1pbm5pY2hAbGFubC5nb3YKK1A6ICAgICAgTGF0Y2hlc2FyIElvbmtvdgorTTogICAgICBsdWNob0Bpb25rb3YubmV0CitMOiAgICAgIHY5ZnMtZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorVzogICAgICBodHRwOi8vdjlmcy5zZi5uZXQKK1Q6ICAgICAgZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2VyaWN2aC92OWZzLmdpdAorUzogICAgICBNYWludGFpbmVkCisKIEEyMjMyIFNFUklBTCBCT0FSRCBEUklWRVIKIFA6CUVudmVyIEhhYXNlCiBNOgllaGFhc2VAaW5mLmZ1LWJlcmxpbi5kZQpAQCAtNTM0LDcgKzU0Niw3IEBACiBCUk9BREJBTkQgUFJPQ0VTU09SIEFSQ0hJVEVDVFVSRQogUDoJQXJuZCBCZXJnbWFubgogTToJYXJuZEBhcm5kYi5kZQotTDoJbGludXhwcGM2NC1kZXZAb3psYWJzLm9yZworTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKIFc6CWh0dHA6Ly9saW51eHBwYzY0Lm9yZwogUzoJU3VwcG9ydGVkCiAKQEAgLTgzOCw3ICs4NTAsNiBAQAogCiBEVkIgU1VCU1lTVEVNIEFORCBEUklWRVJTCiBQOglMaW51eFRWLm9yZyBQcm9qZWN0Ci1NOgltY2hlaGFiQGluZnJhZGVhZC5vcmcKIE06CXY0bC1kdmItbWFpbnRhaW5lckBsaW51eHR2Lm9yZwogTDogCWxpbnV4LWR2YkBsaW51eHR2Lm9yZyAoc3Vic2NyaXB0aW9uIHJlcXVpcmVkKQogVzoJaHR0cDovL2xpbnV4dHYub3JnLwpAQCAtMTM1MCwxMCArMTM2MSwxMCBAQAogSU5URUwgUFJPLzEwMCBFVEhFUk5FVCBTVVBQT1JUCiBQOglKb2huIFJvbmNpYWsKIE06CWpvaG4ucm9uY2lha0BpbnRlbC5jb20KLVA6CUdhbmVzaCBWZW5rYXRlc2FuCi1NOglnYW5lc2gudmVua2F0ZXNhbkBpbnRlbC5jb20KIFA6CUplc3NlIEJyYW5kZWJ1cmcKIE06CWplc3NlLmJyYW5kZWJ1cmdAaW50ZWwuY29tCitQOglKZWZmIEtpcnNoZXIKK006CWplZmZyZXkudC5raXJzaGVyQGludGVsLmNvbQogVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMTAwMC8KIFM6CVN1cHBvcnRlZAogCkBAIC0xMzYyLDE4ICsxMzczLDIyIEBACiBNOgljcmFtZXJqQGludGVsLmNvbQogUDoJSm9obiBSb25jaWFrCiBNOglqb2huLnJvbmNpYWtAaW50ZWwuY29tCi1QOglHYW5lc2ggVmVua2F0ZXNhbgotTToJZ2FuZXNoLnZlbmthdGVzYW5AaW50ZWwuY29tCitQOglKZXNzZSBCcmFuZGVidXJnCitNOglqZXNzZS5icmFuZGVidXJnQGludGVsLmNvbQorUDoJSmVmZiBLaXJzaGVyCitNOglqZWZmcmV5LnQua2lyc2hlckBpbnRlbC5jb20KIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTEwMDAvCiBTOglTdXBwb3J0ZWQKIAogSU5URUwgUFJPLzEwR2JFIFNVUFBPUlQKK1A6CUplZmYgS2lyc2hlcgorTToJamVmZnJleS50LmtpcnNoZXJAaW50ZWwuY29tCiBQOglBeXlhcHBhbiBWZWVyYWl5YW4KIE06CWF5eWFwcGFuLnZlZXJhaXlhbkBpbnRlbC5jb20KLVA6CUdhbmVzaCBWZW5rYXRlc2FuCi1NOglnYW5lc2gudmVua2F0ZXNhbkBpbnRlbC5jb20KIFA6CUpvaG4gUm9uY2lhawogTToJam9obi5yb25jaWFrQGludGVsLmNvbQorUDoJSmVzc2UgQnJhbmRlYnVyZworTToJamVzc2UuYnJhbmRlYnVyZ0BpbnRlbC5jb20KIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZTEwMDAvCiBTOglTdXBwb3J0ZWQKIApAQCAtMTUyNSwxMiArMTU0MCw2IEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKLUxBTk1FRElBIFdBTiBDQVJEIERSSVZFUgotUDoJQW5kcmV3IFN0YW5sZXktSm9uZXMKLU06CWFzakBsYW5tZWRpYS5jb20KLVc6CWh0dHA6Ly93d3cubGFubWVkaWEuY29tLwotUzoJU3VwcG9ydGVkCi0gCiBMQVBCIG1vZHVsZQogUDoJSGVubmVyIEVpc2VuCiBNOgllaXNAYmF0eS5oYW5zZS5kZQpAQCAtMTYyNywxMyArMTYzNiwxMyBAQAogTToJYW50b25Ac2FtYmEub3JnCiBNOglhbnRvbkBhdS5pYm0uY29tCiBXOglodHRwOi8vbGludXhwcGM2NC5vcmcKLUw6CWxpbnV4cHBjNjQtZGV2QG96bGFicy5vcmcKK0w6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCiBTOglTdXBwb3J0ZWQKIAogTElOVVggU0VDVVJJVFkgTU9EVUxFIChMU00pIEZSQU1FV09SSwogUDoJQ2hyaXMgV3JpZ2h0Ci1NOgljaHJpc3dAb3NkbC5vcmcKLUw6CWxpbnV4LXNlY3VyaXR5LW1vZHVsZUB3aXJleC5jb20KK006CWNocmlzd0Bzb3VzLXNvbC5vcmcKK0w6CWxpbnV4LXNlY3VyaXR5LW1vZHVsZUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9sc20uaW1tdW5peC5vcmcKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvY2hyaXN3L2xzbS0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKQEAgLTE3NTMsNyArMTc2Miw4IEBACiBNOglyYWxmQGxpbnV4LW1pcHMub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LW1pcHMub3JnLwogTDoJbGludXgtbWlwc0BsaW51eC1taXBzLm9yZwotUzoJTWFpbnRhaW5lZAorVDoJZ2l0IHd3dy5saW51eC1taXBzLm9yZzovcHViL3NjbS9saW51eC5naXQKK1M6CVN1cHBvcnRlZAogCiBNSVNDRUxMQU5FT1VTIE1DQS1TVVBQT1JUCiBQOglKYW1lcyBCb3R0b21sZXkKQEAgLTIwMTUsMTIgKzIwMjUsNiBAQAogVzoJaHR0cDovL3d3dy5wYXJpc2MtbGludXgub3JnLwogUzoJTWFpbnRhaW5lZAogCi1QRVJTT05BTElUWSBIQU5ETElORwotUDoJQ2hyaXN0b3BoIEhlbGx3aWcKLU06CWhjaEBpbmZyYWRlYWQub3JnCi1MOglsaW51eC1hYmktZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1TOglNYWludGFpbmVkCi0KIFBDSSBFUlJPUiBSRUNPVkVSWQogUDoJTGluYXMgVmVwc3RhcwogTToJbGluYXNAYXVzdGluLmlibS5jb20KQEAgLTIwNzEsNiArMjA3NSwxMiBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCitQRVJTT05BTElUWSBIQU5ETElORworUDoJQ2hyaXN0b3BoIEhlbGx3aWcKK006CWhjaEBpbmZyYWRlYWQub3JnCitMOglsaW51eC1hYmktZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitTOglNYWludGFpbmVkCisKIFBIUkFNIE1URCBEUklWRVIKIFA6CUr2cm4gRW5nZWwKIE06CWpvZXJuQHdoLmZoLXdlZGVsLmRlCkBAIC0yMTQ3LDcgKzIxNTcsNyBAQAogCiBRTE9HSUMgUUxBMlhYWCBGQy1TQ1NJIERSSVZFUgogUDoJQW5kcmV3IFZhc3F1ZXoKLU06CWFuZHJldy52YXNxdWV6QHFsb2dpYy5jb20KK006CWxpbnV4LWRyaXZlckBxbG9naWMuY29tCiBMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiAKQEAgLTIyMTQsMTMgKzIyMjQsNiBAQAogUklTQ09NOCBEUklWRVIKIFM6CU9ycGhhbgogCi1SVExJTlVYICBSRUFMVElNRSAgTElOVVgKLVA6CVZpY3RvciBZb2RhaWtlbgotTToJeW9kYWlrZW5AZnNtbGFicy5jb20KLUw6CXJ0bEBydGxpbnV4Lm9yZwotVzoJd3d3LnJ0bGludXgub3JnCi1TOglNYWludGFpbmVkCi0KIFMzIFNBVkFHRSBGUkFNRUJVRkZFUiBEUklWRVIKIFA6ICAgICAgQW50b25pbm8gRGFwbGFzCiBNOiAgICAgIGFkYXBsYXNAcG9sLm5ldApAQCAtMjQ5MCw2ICsyNDkzLDEzIEBACiBMOglwY2locGQtZGlzY3Vzc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIAorU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSBEUklWRVIKK1A6CVBpZXJyZSBPc3NtYW4KK006CWRyemV1cy1zZGhjaUBkcnpldXMuY3gKK0w6CXNkaGNpLWRldmVsQGxpc3QuZHJ6ZXVzLmN4CitXOglodHRwOi8vbW1jLmRyemV1cy5jeC93aWtpL0xpbnV4L0RyaXZlcnMvc2RoY2kKK1M6CU1haW50YWluZWQKKwogU0tHRSwgU0tZMiAxMC8xMDAvMTAwMCBHSUdBQklUIEVUSEVSTkVUIERSSVZFUlMKIFA6CVN0ZXBoZW4gSGVtbWluZ2VyCiBNOglzaGVtbWluZ2VyQG9zZGwub3JnCkBAIC0yNTI2LDcgKzI1MzYsNiBAQAogU1RSQURJUyBNUEVHLTIgREVDT0RFUiBEUklWRVIKIFA6CU5hdGhhbiBMYXJlZG8KIE06CWxhcmVkb0BnbnUub3JnCi1XOglodHRwOi8vbXBlZy5vcGVucHJvamVjdHMubmV0LwogVzoJaHR0cDovL3d3dy5zdHJhZGlzLmNvbS8KIFM6CU1haW50YWluZWQKIApAQCAtMjY0NSw3ICsyNjU0LDcgQEAKIAogVFVOL1RBUCBkcml2ZXIKIFA6CU1heGltIEtyYXNueWFuc2t5Ci1NOgltYXhrQHF1YWxjb21tLmNvbSwgbWF4X21rQHlhaG9vLmNvbQorTToJbWF4a0BxdWFsY29tbS5jb20KIEw6CXZ0dW5Ab2ZmaWNlLnNhdGl4Lm5ldAogVzoJaHR0cDovL3Z0dW4uc291cmNlZm9yZ2UubmV0L3R1bgogUzoJTWFpbnRhaW5lZApAQCAtMjkwMiw2ICsyOTExLDE0IEBACiBXOglodHRwOi8vd3d3LmxpbnV4LXByb2plY3RzLm9yZwogUzoJTWFpbnRhaW5lZAogCitVU0IgWkMwMzAxIERSSVZFUgorUDoJTHVjYSBSaXNvbGlhCitNOglsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0CitMOglsaW51eC11c2ItZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOgl2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20KK1c6CWh0dHA6Ly93d3cubGludXgtcHJvamVjdHMub3JnCitTOglNYWludGFpbmVkCisKIFVTQiBaRDEyMDEgRFJJVkVSCiBQOglKZXJvZW4gVnJlZWtlbgogTToJcGUxcnhxQGFtc2F0Lm9yZwpAQCAtMjk2NiwxOCArMjk4Myw2IEBACiBXOglodHRwOi8vcmlvNTAwLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCi1WOUZTIEZJTEUgU1lTVEVNCi1QOiAgICAgIEVyaWMgVmFuIEhlbnNiZXJnZW4KLU06ICAgICAgZXJpY3ZoQGdtYWlsLmNvbQotUDogICAgICBSb24gTWlubmljaAotTTogICAgICBybWlubmljaEBsYW5sLmdvdgotUDogICAgICBMYXRjaGVzYXIgSW9ua292Ci1NOiAgICAgIGx1Y2hvQGlvbmtvdi5uZXQKLUw6ICAgICAgdjlmcy1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1XOiAgICAgIGh0dHA6Ly92OWZzLnNmLm5ldAotVDogICAgICBnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZXJpY3ZoL3Y5ZnMtZGV2ZWwuZ2l0Ci1TOiAgICAgIE1haW50YWluZWQKLQogVklERU8gRk9SIExJTlVYCiBQOglNYXVybyBDYXJ2YWxobyBDaGVoYWIKIE06CW1jaGVoYWJAaW5mcmFkZWFkLm9yZwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA2ZGY5NGY5Li43YmMyZjRhIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAxNgotRVhUUkFWRVJTSU9OID0tcmM0CitFWFRSQVZFUlNJT04gPQogTkFNRT1TbGlkaW5nIFNub3cgTGVvcGFyZAogCiAjICpET0NVTUVOVEFUSU9OKgpAQCAtNDc4LDYgKzQ3OCwxMCBAQAogQ0ZMQUdTCQkrPSAtZm9taXQtZnJhbWUtcG9pbnRlcgogZW5kaWYKIAoraWZkZWYgQ09ORklHX1VOV0lORF9JTkZPCitDRkxBR1MJCSs9IC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKK2VuZGlmCisKIGlmZGVmIENPTkZJR19ERUJVR19JTkZPCiBDRkxBR1MJCSs9IC1nCiBlbmRpZgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDBkMzE4YWIuLjA1ZTA1NTUgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTc0LDcgKzc0LDcgQEAKICAgIHdoYXRldmVyIHRoZSBrZXJuZWwtZHUtam91ciBoYXBwZW5zIHRvIGJlLgogCiAgLSBZb3UgY2FuIGFsc28gdXBncmFkZSBiZXR3ZWVuIDIuNi54eCByZWxlYXNlcyBieSBwYXRjaGluZy4gIFBhdGNoZXMgYXJlCi0gICBkaXN0cmlidXRlZCBpbiB0aGUgdHJhZGl0aW9uYWwgZ3ppcCBhbmQgdGhlIG5ldyBiemlwMiBmb3JtYXQuICBUbworICAgZGlzdHJpYnV0ZWQgaW4gdGhlIHRyYWRpdGlvbmFsIGd6aXAgYW5kIHRoZSBuZXdlciBiemlwMiBmb3JtYXQuICBUbwogICAgaW5zdGFsbCBieSBwYXRjaGluZywgZ2V0IGFsbCB0aGUgbmV3ZXIgcGF0Y2ggZmlsZXMsIGVudGVyIHRoZQogICAgdG9wIGxldmVsIGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHNvdXJjZSAobGludXgtMi42Lnh4KSBhbmQgZXhlY3V0ZToKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYwppbmRleCA5MDA2MDYzLi5kYTY3N2Y4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYwpAQCAtMTUxLDggKzE1MSwxMyBAQAogCX0KIAogCWlycV9lbnRlcigpOworCS8qCisJICogX19kb19JUlEoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIElQTF9NQVguIE5vdGUgdGhhdCB3ZSBkbyBub3QKKwkgKiBleHBsaWNpdGx5IGVuYWJsZSBpbnRlcnJ1cHRzIGFmdGVyd2FyZHMgLSBzb21lIE1JTE8gUEFMY29kZQorCSAqIChuYW1lbHkgTFgxNjQgb25lKSBzZWVtcyB0byBoYXZlIHNldmVyZSBwcm9ibGVtcyB3aXRoIFJUSQorCSAqIGF0IElQTCAwLgorCSAqLwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJX19kb19JUlEoaXJxLCByZWdzKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJaXJxX2V4aXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vaW5pdC5jIGIvYXJjaC9hbHBoYS9tbS9pbml0LmMKaW5kZXggNDg2ZDc5NC4uNTQ0YWM1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9tbS9pbml0LmMKKysrIGIvYXJjaC9hbHBoYS9tbS9pbml0LmMKQEAgLTM1Nyw3ICszNTcsNyBAQAogCXZvaWQgKl9fc3RhcnQgPSBzdGFydDsKIAlmb3IgKDsgX19zdGFydCA8IGVuZDsgX19zdGFydCArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKF9fc3RhcnQpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKF9fc3RhcnQpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShfX3N0YXJ0KSk7CiAJCWZyZWVfcGFnZSgobG9uZylfX3N0YXJ0KTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCAxNWRjMWEwLi4wZGQyNGViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTc4LDcgKzc4LDcgQEAKIAogY2hvaWNlCiAJcHJvbXB0ICJBUk0gc3lzdGVtIHR5cGUiCi0JZGVmYXVsdCBBUkNIX1JQQworCWRlZmF1bHQgQVJDSF9WRVJTQVRJTEUKIAogY29uZmlnIEFSQ0hfQ0xQUzc1MDAKIAlib29sICJDaXJydXMtQ0wtUFM3NTAwRkUiCkBAIC0xMDgsNiArMTA4LDEzIEBACiAJICBFdGhlcm5ldCBpbnRlcmZhY2UsIHR3byBQQ01DSUEgc29ja2V0cywgdHdvIHNlcmlhbCBwb3J0cyBhbmQgYQogCSAgcGFyYWxsZWwgcG9ydC4KIAorY29uZmlnIEFSQ0hfRVA5M1hYCisJYm9vbCAiRVA5M3h4LWJhc2VkIgorCXNlbGVjdCBBUk1fQU1CQQorCXNlbGVjdCBBUk1fVklDCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBDaXJydXMgRVA5M3h4IHNlcmllcyBvZiBDUFVzLgorCiBjb25maWcgQVJDSF9GT09UQlJJREdFCiAJYm9vbCAiRm9vdEJyaWRnZSIKIAlzZWxlY3QgRk9PVEJSSURHRQpAQCAtMjUwLDYgKzI1Nyw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWciCisKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWciCkBAIC00MzQsNiArNDQzLDEzIEBACiAJICBDdXJyZW50bHkgYXQgbGVhc3QgT01BUCwgUFhBMnh4IGFuZCBTQTExeDAgcGxhdGZvcm1zIGFyZSBrbm93bgogCSAgdG8gaGF2ZSBhY2N1cmF0ZSB0aW1la2VlcGluZyB3aXRoIGR5bmFtaWMgdGljay4KIAorY29uZmlnIEhaCisJaW50CisJZGVmYXVsdCAxMjggaWYgQVJDSF9MNzIwMAorCWRlZmF1bHQgMjAwIGlmIEFSQ0hfRUJTQTExMCB8fCBBUkNIX1MzQzI0MTAKKwlkZWZhdWx0IE9NQVBfMzJLX1RJTUVSX0haIGlmIEFSQ0hfT01BUCAmJiBPTUFQXzMyS19USU1FUgorCWRlZmF1bHQgMTAwCisKIGNvbmZpZyBBRUFCSQogCWJvb2wgIlVzZSB0aGUgQVJNIEVBQkkgdG8gY29tcGlsZSB0aGUga2VybmVsIgogCWhlbHAKQEAgLTc5OSw2ICs4MTUsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3BpL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy93MS9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvaHdtb24vS2NvbmZpZyIKIAogI3NvdXJjZSAiZHJpdmVycy9sMy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCA1ODVkMzM0Li45OWMwZDMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTA4LDYgKzEwOCw3IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0FBRUMyMDAwKSAgIDo9IGFhZWMyMDAwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1JFQUxWSUVXKSAgIDo9IHJlYWx2aWV3CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDApIDo9IGF0OTFybTkyMDAKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfRVA5M1hYKSAgICAgOj0gZXA5M3h4CiAKIGlmZXEgKCQoQ09ORklHX0FSQ0hfRUJTQTExMCkseSkKICMgVGhpcyBpcyB3aGF0IGhhcHBlbnMgaWYgeW91IGZvcmdldCB0aGUgSU9DUzE2IGxpbmUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vTWFrZWZpbGUgYi9hcmNoL2FybS9jb21tb24vTWFrZWZpbGUKaW5kZXggYzgxYTJmZi4uODQ3ZTNlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9NYWtlZmlsZQpAQCAtMTUsMyArMTUsNCBAQAogb2JqLSQoQ09ORklHX1NIQVJQX1BBUkFNKQkrPSBzaGFycHNsX3BhcmFtLm8KIG9iai0kKENPTkZJR19TSEFSUFNMX1BNKQkrPSBzaGFycHNsX3BtLm8KIG9iai0kKENPTkZJR19TSEFSUF9TQ09PUCkJKz0gc2Nvb3Aubworb2JqLSQoQ09ORklHX0FSQ0hfSVhQMjAwMCkJKz0gdWVuZ2luZS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKaW5kZXggYWQ2Yzg5YS4uNzk3MWQwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqICBsaW1pdGVkIERNQSB3aW5kb3dzLiBUaGVzZSBmdW5jdGlvbnMgdXRpbGl6ZSBib3VuY2UgYnVmZmVycyB0bwogICogIGNvcHkgZGF0YSB0by9mcm9tIGJ1ZmZlcnMgbG9jYXRlZCBvdXRzaWRlIHRoZSBETUEgcmVnaW9uLiBUaGlzCiAgKiAgb25seSB3b3JrcyBmb3Igc3lzdGVtcyBpbiB3aGljaCBETUEgbWVtb3J5IGlzIGF0IHRoZSBib3R0b20gb2YKLSAqICBSQU0gYW5kIHRoZSByZW1haW5kZXIgb2YgbWVtb3J5IGlzIGF0IHRoZSB0b3AgYW4gdGhlIERNQSBtZW1vcnkKKyAqICBSQU0sIHRoZSByZW1haW5kZXIgb2YgbWVtb3J5IGlzIGF0IHRoZSB0b3AgYW5kIHRoZSBETUEgbWVtb3J5CiAgKiAgY2FuIGJlIG1hcmtlZCBhcyBaT05FX0RNQS4gQW55dGhpbmcgYmV5b25kIHRoYXQgc3VjaCBhcyBkaXNjb250aWdvdXMKICAqICBETUEgd2luZG93cyB3aWxsIHJlcXVpcmUgY3VzdG9tIGltcGxlbWVudGF0aW9ucyB0aGF0IHJlc2VydmUgbWVtb3J5CiAgKiAgYXJlYXMgYXQgZWFybHkgYm9vdHVwLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCmluZGV4IDE1OWFkN2UuLmE3ZGMxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYworKysgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBoeXM7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzcGlubG9ja190IGxvY2s7Ci0Jdm9pZCAqYmFzZTsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CiB9OwogCiBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvIHsKQEAgLTE2Miw3ICsxNjIsNyBAQAogewogCWludCByZXEsIGk7CiAJc3RydWN0IGlycWRlc2MgKmQ7Ci0Jdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CiAKIAkvKiBBY2tub3dsZWRnZSB0aGUgcGFyZW50IElSUSAqLwogCWRlc2MtPmNoaXAtPmFjayhpcnEpOwpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIHN0YXRpYyB2b2lkIGxvY29tb19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOwogCXVuc2lnbmVkIGludCByOwogCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19JQ1IpOwogCXIgJj0gfigweDAwMTAgPDwgKGlycSAtIExPQ09NT19JUlFfU1RBUlQpKTsKQEAgLTE5OCw3ICsxOTgsNyBAQAogCiBzdGF0aWMgdm9pZCBsb2NvbW9fdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOwogCXVuc2lnbmVkIGludCByOwogCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19JQ1IpOwogCXIgfD0gKDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9TVEFSVCkpOwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGlycWRlc2MgKmQ7Ci0Jdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CiAKIAlpZiAobG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fS0VZQk9BUkQgKyBMT0NPTU9fS0lDKSAmIDB4MDAwMSkgewogCQlkID0gaXJxX2Rlc2MgKyBMT0NPTU9fSVJRX0tFWV9TVEFSVDsKQEAgLTIyNSw3ICsyMjUsNyBAQAogCiBzdGF0aWMgdm9pZCBsb2NvbW9fa2V5X2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKIAlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fS0VZQk9BUkQgKyBMT0NPTU9fS0lDKTsKIAlyICY9IH4oMHgwMTAwIDw8IChpcnEgLSBMT0NPTU9fSVJRX0tFWV9TVEFSVCkpOwpAQCAtMjM0LDcgKzIzNCw3IEBACiAKIHN0YXRpYyB2b2lkIGxvY29tb19rZXlfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKIAlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fS0VZQk9BUkQgKyBMT0NPTU9fS0lDKTsKIAlyICY9IH4oMHgwMDEwIDw8IChpcnEgLSBMT0NPTU9fSVJRX0tFWV9TVEFSVCkpOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAKIHN0YXRpYyB2b2lkIGxvY29tb19rZXlfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOwogCXVuc2lnbmVkIGludCByOwogCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19LRVlCT0FSRCArIExPQ09NT19LSUMpOwogCXIgfD0gKDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9LRVlfU1RBUlQpKTsKQEAgLTI2MSw3ICsyNjEsNyBAQAogewogCWludCByZXEsIGk7CiAJc3RydWN0IGlycWRlc2MgKmQ7Ci0Jdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CiAKIAlyZXEgPSAJbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fR0lSKSAmCiAJCWxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0dQRCkgJgpAQCAtMjgwLDcgKzI4MCw3IEBACiAKIHN0YXRpYyB2b2lkIGxvY29tb19ncGlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKIAlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fR1dFKTsKIAlyIHw9ICgweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfR1BJT19TVEFSVCkpOwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGxvY29tb19ncGlvX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CiAJdW5zaWduZWQgaW50IHI7CiAJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0dJRSk7CiAJciAmPSB+KDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9HUElPX1NUQVJUKSk7CkBAIC0zMDYsNyArMzA2LDcgQEAKIAogc3RhdGljIHZvaWQgbG9jb21vX2dwaW9fdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOwogCXVuc2lnbmVkIGludCByOwogCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19HSUUpOwogCXIgfD0gKDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9HUElPX1NUQVJUKSk7CkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBpcnFkZXNjICpkOwotCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOwogCiAJaWYgKGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0xUSU5UKSAmIDB4MDAwMSkgewogCQlkID0gaXJxX2Rlc2MgKyBMT0NPTU9fSVJRX0xUX1NUQVJUOwpAQCAtMzMzLDcgKzMzMyw3IEBACiAKIHN0YXRpYyB2b2lkIGxvY29tb19sdF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CiAJdW5zaWduZWQgaW50IHI7CiAJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0xUSU5UKTsKIAlyICY9IH4oMHgwMTAwIDw8IChpcnEgLSBMT0NPTU9fSVJRX0xUX1NUQVJUKSk7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAogc3RhdGljIHZvaWQgbG9jb21vX2x0X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CiAJdW5zaWduZWQgaW50IHI7CiAJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0xUSU5UKTsKIAlyICY9IH4oMHgwMDEwIDw8IChpcnEgLSBMT0NPTU9fSVJRX0xUX1NUQVJUKSk7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAogc3RhdGljIHZvaWQgbG9jb21vX2x0X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKIAlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpOwogCXIgfD0gKDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9MVF9TVEFSVCkpOwpAQCAtMzY5LDcgKzM2OSw3IEBACiB7CiAJaW50IHJlcSwgaTsKIAlzdHJ1Y3QgaXJxZGVzYyAqZDsKLQl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKIAogCXJlcSA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX1NQSUlSKSAmIDB4MDAwRjsKIAlpZiAocmVxKSB7CkBAIC0zODYsNyArMzg2LDcgQEAKIAogc3RhdGljIHZvaWQgbG9jb21vX3NwaV9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jdm9pZCAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CiAJdW5zaWduZWQgaW50IHI7CiAJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX1NQSVdFKTsKIAlyIHw9ICgweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfU1BJX1NUQVJUKSk7CkBAIC00MDMsNyArNDAzLDcgQEAKIAogc3RhdGljIHZvaWQgbG9jb21vX3NwaV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvaWQgKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOwogCXVuc2lnbmVkIGludCByOwogCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUElJRSk7CiAJciAmPSB+KDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9TUElfU1RBUlQpKTsKQEAgLTQxMiw3ICs0MTIsNyBAQAogCiBzdGF0aWMgdm9pZCBsb2NvbW9fc3BpX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKIAlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fU1BJSUUpOwogCXIgfD0gKDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9TUElfU1RBUlQpKTsKQEAgLTQyOCw3ICs0MjgsNyBAQAogc3RhdGljIHZvaWQgbG9jb21vX3NldHVwX2lycShzdHJ1Y3QgbG9jb21vICpsY2hpcCkKIHsKIAlpbnQgaXJxOwotCXZvaWQgKmlycWJhc2UgPSBsY2hpcC0+YmFzZTsKKwl2b2lkIF9faW9tZW0gKmlycWJhc2UgPSBsY2hpcC0+YmFzZTsKIAogCS8qCiAJICogSW5zdGFsbCBoYW5kbGVyIGZvciBJUlFfTE9DT01PX0hXLgpAQCAtNTAxLDEyICs1MDEsMTEgQEAKIAlzdHJ1Y3QgbG9jb21vX2RldiAqZGV2OwogCWludCByZXQ7CiAKLQlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG9jb21vX2RldiksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NvbW9fZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgbG9jb21vX2RldikpOwogCiAJc3RybmNweShkZXYtPmRldi5idXNfaWQsaW5mby0+bmFtZSxzaXplb2YoZGV2LT5kZXYuYnVzX2lkKSk7CiAJLyoKQEAgLTYyOSw2ICs2MjgsMjIgQEAKIH0KICNlbmRpZgogCisKKyNkZWZpbmUgTENNX0FMQ19FTgkweDgwMDAKKwordm9pZCBmcm9udGxpZ2h0X3NldChzdHJ1Y3QgbG9jb21vICpsY2hpcCwgaW50IGR1dHksIGludCB2ciwgaW50IGJwd2YpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOworCWxvY29tb193cml0ZWwoYnB3ZiwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fRlJPTlRMSUdIVCArIExPQ09NT19BTFMpOworCXVkZWxheSgxMDApOworCWxvY29tb193cml0ZWwoZHV0eSwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fRlJPTlRMSUdIVCArIExPQ09NT19BTEQpOworCWxvY29tb193cml0ZWwoYnB3ZiB8IExDTV9BTENfRU4sIGxjaGlwLT5iYXNlICsgTE9DT01PX0ZST05UTElHSFQgKyBMT0NPTU9fQUxTKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOworfQorCisKIC8qKgogICoJbG9jb21vX3Byb2JlIC0gcHJvYmUgZm9yIGEgc2luZ2xlIExvQ29NbyBjaGlwLgogICoJQHBoeXNfYWRkcjogcGh5c2ljYWwgYWRkcmVzcyBvZiBkZXZpY2UuCkBAIC02NDgsMTIgKzY2MywxMCBAQAogCXVuc2lnbmVkIGxvbmcgcjsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIAotCWxjaGlwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxvY29tbyksIEdGUF9LRVJORUwpOworCWxjaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxvY29tbyksIEdGUF9LRVJORUwpOwogCWlmICghbGNoaXApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGxjaGlwLCAwLCBzaXplb2Yoc3RydWN0IGxvY29tbykpOwotCiAJc3Bpbl9sb2NrX2luaXQoJmxjaGlwLT5sb2NrKTsKIAogCWxjaGlwLT5kZXYgPSBtZTsKQEAgLTY4OCw2ICs3MDEsMTEgQEAKIAkvKiBGcm9udExpZ2h0ICovCiAJbG9jb21vX3dyaXRlbCgwLCBsY2hpcC0+YmFzZSArIExPQ09NT19GUk9OVExJR0hUICsgTE9DT01PX0FMUyk7CiAJbG9jb21vX3dyaXRlbCgwLCBsY2hpcC0+YmFzZSArIExPQ09NT19GUk9OVExJR0hUICsgTE9DT01PX0FMRCk7CisKKwkvKiBTYW1lIGNvbnN0YW50cyBjYW4gYmUgdXNlZCBmb3IgY29sbGllIGFuZCBwb29kbGUKKwkgICAoZGVwZW5kaW5nIG9uIENPTkZJRyBvcHRpb25zIGluIG9yaWdpbmFsIHNoYXJwIGNvZGUpPyAqLworCWZyb250bGlnaHRfc2V0KGxjaGlwLCAxNjMsIDAsIDE0OCk7CisKIAkvKiBMb25ndGltZSB0aW1lciAqLwogCWxvY29tb193cml0ZWwoMCwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fTFRJTlQpOwogCS8qIFNQSSAqLwpAQCAtNzY3LDYgKzc4NSw4IEBACiAJaWYgKCFtZW0pCiAJCXJldHVybiAtRUlOVkFMOwogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIC1FTlhJTzsKIAogCXJldHVybiBfX2xvY29tb19wcm9iZSgmZGV2LT5kZXYsIG1lbSwgaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMgYi9hcmNoL2FybS9jb21tb24vcnRjdGltZS5jCmluZGV4IDQ4YjFlMTkuLmU4NTFkODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3J0Y3RpbWUuYwpAQCAtMTI4LDE5ICsxMjgsMjcgQEAKIC8qCiAgKiBDYWxjdWxhdGUgdGhlIG5leHQgYWxhcm0gdGltZSBnaXZlbiB0aGUgcmVxdWVzdGVkIGFsYXJtIHRpbWUgbWFzawogICogYW5kIHRoZSBjdXJyZW50IHRpbWUuCi0gKgotICogRklYTUU6IGZvciBub3csIHdlIGp1c3QgY29weSB0aGUgYWxhcm0gdGltZSBiZWNhdXNlIHdlJ3JlIGxhenkgKGFuZAotICogaXMgdGhlcmVmb3JlIGJ1Z2d5IC0gc2V0dGluZyBhIDEwYW0gYWxhcm0gYXQgOHBtIHdpbGwgbm90IHJlc3VsdCBpbgotICogdGhlIGFsYXJtIHRyaWdnZXJpbmcuKQogICovCiB2b2lkIHJ0Y19uZXh0X2FsYXJtX3RpbWUoc3RydWN0IHJ0Y190aW1lICpuZXh0LCBzdHJ1Y3QgcnRjX3RpbWUgKm5vdywgc3RydWN0IHJ0Y190aW1lICphbHJtKQogeworCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lOworCXVuc2lnbmVkIGxvbmcgbm93X3RpbWU7CisKIAluZXh0LT50bV95ZWFyID0gbm93LT50bV95ZWFyOwogCW5leHQtPnRtX21vbiA9IG5vdy0+dG1fbW9uOwogCW5leHQtPnRtX21kYXkgPSBub3ctPnRtX21kYXk7CiAJbmV4dC0+dG1faG91ciA9IGFscm0tPnRtX2hvdXI7CiAJbmV4dC0+dG1fbWluID0gYWxybS0+dG1fbWluOwogCW5leHQtPnRtX3NlYyA9IGFscm0tPnRtX3NlYzsKKworCXJ0Y190bV90b190aW1lKG5vdywgJm5vd190aW1lKTsKKwlydGNfdG1fdG9fdGltZShuZXh0LCAmbmV4dF90aW1lKTsKKworCWlmIChuZXh0X3RpbWUgPCBub3dfdGltZSkgeworCQkvKiBBZHZhbmNlIG9uZSBkYXkgKi8KKwkJbmV4dF90aW1lICs9IDYwICogNjAgKiAyNDsKKwkJcnRjX3RpbWVfdG9fdG0obmV4dF90aW1lLCBuZXh0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0Y19yZWFkX3RpbWUoc3RydWN0IHJ0Y19vcHMgKm9wcywgc3RydWN0IHJ0Y190aW1lICp0bSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwppbmRleCAxNDc1MDg5Li4zZjY4ZGI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zNiwxMCArMzcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NhMTExMS5oPgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfUFhBCi0jaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLSNlbmRpZgotCiBleHRlcm4gdm9pZCBfX2luaXQgc2ExMTEwX21iX2VuYWJsZSh2b2lkKTsKIAogLyoKQEAgLTUxLDYgKzQ4LDcgQEAKICAqLwogc3RydWN0IHNhMTExMSB7CiAJc3RydWN0IGRldmljZQkqZGV2OworCXN0cnVjdCBjbGsJKmNsazsKIAl1bnNpZ25lZCBsb25nCXBoeXM7CiAJaW50CQlpcnE7CiAJc3BpbmxvY2tfdAlsb2NrOwpAQCAtNDUxLDE5ICs0NDksNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfU0ExMTAwCi0JLyoKLQkgKiBGaXJzdCwgc2V0IHVwIHRoZSAzLjY4NjRNSHogY2xvY2sgb24gR1BJTyAyNyBmb3IgdGhlIFNBLTExMTE6Ci0JICogKFNBLTExMTAgRGV2ZWxvcGVyJ3MgTWFudWFsLCBzZWN0aW9uIDkuMS4yLjEpCi0JICovCi0JR0FGUiB8PSBHUElPXzMyXzc2OGtIejsKLQlHUERSIHw9IEdQSU9fMzJfNzY4a0h6OwotCVRVQ1IgPSBUVUNSXzNfNjg2NE1IejsKLSNlbGlmIENPTkZJR19BUkNIX1BYQQotCXB4YV9ncGlvX21vZGUoR1BJTzExXzNfNk1Iel9NRCk7Ci0jZWxzZQotI2Vycm9yIG1pc3NpbmcgY2xvY2sgc2V0dXAKLSNlbmRpZgorCWNsa19lbmFibGUoc2FjaGlwLT5jbGspOwogCiAJLyoKIAkgKiBUdXJuIFZDTyBvbiwgYW5kIGRpc2FibGUgUExMIEJ5cGFzcy4KQEAgLTU1NSwxMiArNTQxLDExIEBACiAJc3RydWN0IHNhMTExMV9kZXYgKmRldjsKIAlpbnQgcmV0OwogCi0JZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhMTExMV9kZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2ExMTExX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQltZW1zZXQoZGV2LCAwLCBzaXplb2Yoc3RydWN0IHNhMTExMV9kZXYpKTsKIAogCXNucHJpbnRmKGRldi0+ZGV2LmJ1c19pZCwgc2l6ZW9mKGRldi0+ZGV2LmJ1c19pZCksCiAJCSAiJTQuNGx4IiwgaW5mby0+b2Zmc2V0KTsKQEAgLTYzNSwxMSArNjIwLDE1IEBACiAJdW5zaWduZWQgaW50IGhhc19kZXZzLCB2YWw7CiAJaW50IGksIHJldCA9IC1FTk9ERVY7CiAKLQlzYWNoaXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2ExMTExKSwgR0ZQX0tFUk5FTCk7CisJc2FjaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhMTExMSksIEdGUF9LRVJORUwpOwogCWlmICghc2FjaGlwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChzYWNoaXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2ExMTExKSk7CisJc2FjaGlwLT5jbGsgPSBjbGtfZ2V0KG1lLCAiR1BJTzI3X0NMSyIpOworCWlmICghc2FjaGlwLT5jbGspIHsKKwkJcmV0ID0gUFRSX0VSUihzYWNoaXAtPmNsayk7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQogCiAJc3Bpbl9sb2NrX2luaXQoJnNhY2hpcC0+bG9jayk7CiAKQEAgLTY1Niw3ICs2NDUsNyBAQAogCXNhY2hpcC0+YmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgUEFHRV9TSVpFICogMik7CiAJaWYgKCFzYWNoaXAtPmJhc2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyX2Nsa3B1dDsKIAl9CiAKIAkvKgpAQCAtNjY2LDcgKzY1NSw3IEBACiAJaWYgKChpZCAmIFNLSURfSURfTUFTSykgIT0gU0tJRF9TQTExMTFfSUQpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlNBMTExMSBub3QgZGV0ZWN0ZWQ6IElEID0gJTA4bHhcbiIsIGlkKTsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byB1bm1hcDsKKwkJZ290byBlcnJfdW5tYXA7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU0ExMTExIE1pY3JvcHJvY2Vzc29yIENvbXBhbmlvbiBDaGlwOiAiCkBAIC03MjYsOSArNzE1LDExIEBACiAKIAlyZXR1cm4gMDsKIAotIHVubWFwOgorIGVycl91bm1hcDoKIAlpb3VubWFwKHNhY2hpcC0+YmFzZSk7Ci0gb3V0OgorIGVycl9jbGtwdXQ6CisJY2xrX3B1dChzYWNoaXAtPmNsayk7CisgZXJyX2ZyZWU6CiAJa2ZyZWUoc2FjaGlwKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzUxLDYgKzc0Miw4IEBACiAJc2ExMTExX3dyaXRlbCgwLCBpcnFiYXNlICsgU0ExMTExX1dBS0VFTjApOwogCXNhMTExMV93cml0ZWwoMCwgaXJxYmFzZSArIFNBMTExMV9XQUtFRU4xKTsKIAorCWNsa19kaXNhYmxlKHNhY2hpcC0+Y2xrKTsKKwogCWlmIChzYWNoaXAtPmlycSAhPSBOT19JUlEpIHsKIAkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoc2FjaGlwLT5pcnEsIE5VTEwpOwogCQlzZXRfaXJxX2RhdGEoc2FjaGlwLT5pcnEsIE5VTEwpOwpAQCAtNzU5LDYgKzc1Miw3IEBACiAJfQogCiAJaW91bm1hcChzYWNoaXAtPmJhc2UpOworCWNsa19wdXQoc2FjaGlwLT5jbGspOwogCWtmcmVlKHNhY2hpcCk7CiB9CiAKQEAgLTg1Nyw2ICs4NTEsOCBAQAogCXNhMTExMV93cml0ZWwoMCwgc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLUFdNMCk7CiAJc2ExMTExX3dyaXRlbCgwLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tQV00xKTsKIAorCWNsa19kaXNhYmxlKHNhY2hpcC0+Y2xrKTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC05NDMsNiArOTM5LDggQEAKIAlpZiAoIW1lbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIC1FTlhJTzsKIAogCXJldHVybiBfX3NhMTExMV9wcm9iZSgmcGRldi0+ZGV2LCBtZW0sIGlycSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCmluZGV4IGEyZGZlMGIuLjVlODMwZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCkBAIC0xMzIsMTIgKzEzMiwxMCBAQAogCWlmICghbWVtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRldnB0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY29vcF9kZXYpLCBHRlBfS0VSTkVMKTsKLQorCWRldnB0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY29vcF9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldnB0cikKLQkJcmV0dXJuICAtRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChkZXZwdHIsIDAsIHNpemVvZihzdHJ1Y3Qgc2Nvb3BfZGV2KSk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldnB0ci0+c2Nvb3BfbG9jayk7CiAKIAlpbmYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC91ZW5naW5lLmMgYi9hcmNoL2FybS9jb21tb24vdWVuZ2luZS5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtaXhwMjAwMC91ZW5naW5lLmMKcmVuYW1lIHRvIGFyY2gvYXJtL2NvbW1vbi91ZW5naW5lLmMKaW5kZXggZWM0ZTAwNy4uYTEzMTBiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL3VlbmdpbmUuYworKysgYi9hcmNoL2FybS9jb21tb24vdWVuZ2luZS5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXhwMjAwMC1yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvdWVuZ2luZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS91ZW5naW5lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgVVNUT1JFX0FERFJFU1MJCQkweDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCmluZGV4IGE0NWVkMTYuLmExOWJjNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYworKysgYi9hcmNoL2FybS9jb21tb24vdmljLmMKQEAgLTIyLDIyICsyMiwyMSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKnZpY19iYXNlOwotCiBzdGF0aWMgdm9pZCB2aWNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnEgLT0gSVJRX1ZJQ19TVEFSVDsKLQl3cml0ZWwoMSA8PCBpcnEsIHZpY19iYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKKwlpcnEgJj0gMzE7CisJd3JpdGVsKDEgPDwgaXJxLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOwogfQogCiBzdGF0aWMgdm9pZCB2aWNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycSAtPSBJUlFfVklDX1NUQVJUOwotCXdyaXRlbCgxIDw8IGlycSwgdmljX2Jhc2UgKyBWSUNfSU5UX0VOQUJMRSk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOworCWlycSAmPSAzMTsKKwl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCB2aWNfY2hpcCA9IHsKQEAgLTQ2LDQzICs0NSw0OSBAQAogCS51bm1hc2sJPSB2aWNfdW5tYXNrX2lycSwKIH07CiAKLXZvaWQgX19pbml0IHZpY19pbml0KHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIHZpY19zb3VyY2VzKQorLyoqCisgKiB2aWNfaW5pdCAtIGluaXRpYWxpc2UgYSB2ZWN0b3JlZCBpbnRlcnJ1cHQgY29udHJvbGxlcgorICogQGJhc2U6IGlvbWVtIGJhc2UgYWRkcmVzcworICogQGlycV9zdGFydDogc3RhcnRpbmcgaW50ZXJydXB0IG51bWJlciwgbXVzdCBiZSBtdWxpcGxlIG9mIDMyCisgKiBAdmljX3NvdXJjZXM6IGJpdG1hc2sgb2YgaW50ZXJydXB0IHNvdXJjZXMgdG8gYWxsb3cKKyAqLwordm9pZCBfX2luaXQgdmljX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LAorCQkgICAgIHUzMiB2aWNfc291cmNlcykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXZpY19iYXNlID0gYmFzZTsKLQogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5LiAqLwogCi0Jd3JpdGVsKDAsIHZpY19iYXNlICsgVklDX0lOVF9TRUxFQ1QpOwotCXdyaXRlbCgwLCB2aWNfYmFzZSArIFZJQ19JTlRfRU5BQkxFKTsKLQl3cml0ZWwofjAsIHZpY19iYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOwotCXdyaXRlbCgwLCB2aWNfYmFzZSArIFZJQ19JUlFfU1RBVFVTKTsKLQl3cml0ZWwoMCwgdmljX2Jhc2UgKyBWSUNfSVRDUik7Ci0Jd3JpdGVsKH4wLCB2aWNfYmFzZSArIFZJQ19JTlRfU09GVF9DTEVBUik7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSU5UX1NFTEVDVCk7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRSk7CisJd3JpdGVsKH4wLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOworCXdyaXRlbCgwLCBiYXNlICsgVklDX0lSUV9TVEFUVVMpOworCXdyaXRlbCgwLCBiYXNlICsgVklDX0lUQ1IpOworCXdyaXRlbCh+MCwgYmFzZSArIFZJQ19JTlRfU09GVF9DTEVBUik7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSBjbGVhciBhbGwgZXhpc3RpbmcgaW50ZXJydXB0cwogCSAqLwotCXdyaXRlbCgwLCB2aWNfYmFzZSArIFZJQ19WRUNUX0FERFIpOworCXdyaXRlbCgwLCBiYXNlICsgVklDX1ZFQ1RfQUREUik7CiAJZm9yIChpID0gMDsgaSA8IDE5OyBpKyspIHsKIAkJdW5zaWduZWQgaW50IHZhbHVlOwogCi0JCXZhbHVlID0gcmVhZGwodmljX2Jhc2UgKyBWSUNfVkVDVF9BRERSKTsKLQkJd3JpdGVsKHZhbHVlLCB2aWNfYmFzZSArIFZJQ19WRUNUX0FERFIpOworCQl2YWx1ZSA9IHJlYWRsKGJhc2UgKyBWSUNfVkVDVF9BRERSKTsKKwkJd3JpdGVsKHZhbHVlLCBiYXNlICsgVklDX1ZFQ1RfQUREUik7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJdm9pZCBfX2lvbWVtICpyZWcgPSB2aWNfYmFzZSArIFZJQ19WRUNUX0NOVEwwICsgKGkgKiA0KTsKKwkJdm9pZCBfX2lvbWVtICpyZWcgPSBiYXNlICsgVklDX1ZFQ1RfQ05UTDAgKyAoaSAqIDQpOwogCQl3cml0ZWwoVklDX1ZFQ1RfQ05UTF9FTkFCTEUgfCBpLCByZWcpOwogCX0KIAotCXdyaXRlbCgzMiwgdmljX2Jhc2UgKyBWSUNfREVGX1ZFQ1RfQUREUik7CisJd3JpdGVsKDMyLCBiYXNlICsgVklDX0RFRl9WRUNUX0FERFIpOwogCiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJdW5zaWduZWQgaW50IGlycSA9IElSUV9WSUNfU1RBUlQgKyBpOworCQl1bnNpZ25lZCBpbnQgaXJxID0gaXJxX3N0YXJ0ICsgaTsKIAogCQlzZXRfaXJxX2NoaXAoaXJxLCAmdmljX2NoaXApOworCQlzZXRfaXJxX2NoaXBkYXRhKGlycSwgYmFzZSk7CiAKIAkJaWYgKHZpY19zb3VyY2VzICYgKDEgPDwgaSkpIHsKIAkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggNjIlCmNvcHkgZnJvbSBhcmNoL2FybS9jb25maWdzL2VucDI2MTFfZGVmY29uZmlnCmNvcHkgdG8gYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCmluZGV4IDVmZGFmM2MuLjhkY2M4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCkBAIC0xLDExICsxLDEwIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtZ2l0MTMKLSMgVGh1IE5vdiAxMCAxNToxMjo0OCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYKKyMgTW9uIE1hciAyMCAxNDo1NDo1MSAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiAKQEAgLTEzLDcgKzEyLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMjUsMzggKzIzLDQyIEBACiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfVUlEMTY9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAogIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldApAQCAtNzAsMTQgKzcyLDE0IEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CiBDT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKIAogIwogIyBTeXN0ZW0gVHlwZQpAQCAtODYsMTEgKzg4LDEyIEBACiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VQOTNYWD15CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lYUDIwMDA9eQorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldApAQCAtMTA0LDQ2ICsxMDcsNDQgQEAKICMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19CSUdfRU5ESUFOPXkKKyMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBpcyBub3Qgc2V0CiAKICMKLSMgSW50ZWwgSVhQMjQwMC8yODAwIEltcGxlbWVudGF0aW9uIE9wdGlvbnMKKyMgQ2lycnVzIEVQOTN4eCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCiAjCitDT05GSUdfQ1JVTkNIPXkKIAogIwotIyBJWFAyNDAwLzI4MDAgUGxhdGZvcm1zCisjIEVQOTN4eCBQbGF0Zm9ybXMKICMKLUNPTkZJR19BUkNIX0VOUDI2MTE9eQotIyBDT05GSUdfQVJDSF9JWERQMjQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYRFAyODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhEUDI0MDEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWERQMjgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWFAyMDAwX1NVUFBPUlRfQlJPS0VOX1BDSV9JTyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9HRVNCQzkzMTI9eQorQ09ORklHX01BQ0hfVFM3MlhYPXkKIAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwogQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9BUk05MjBUPXkKK0NPTkZJR19DUFVfMzJ2ND15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKIAogIwogIyBQcm9jZXNzb3IgRmVhdHVyZXMKICMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0JJR19FTkRJQU49eQotQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVklDPXkKIAogIwogIyBCdXMgc3VwcG9ydAogIwotQ09ORklHX0lTQV9ETUFfQVBJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FSTV9BTUJBPXkKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0xNTUsNiArMTU2LDggQEAKICMKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTE3MSw3ICsxNzQsNyBAQAogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCw1NzYwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIG1lbT02NE1AMHgwIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5QU0wLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAKICMKQEAgLTE5Nyw2ICsyMDAsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjA2LDEwICsyMTAsMTMgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI0Miw2ICsyNDksMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI1OSw3ICsyNzEsNiBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTI3OCwyMSArMjg5LDI2IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19TVEFOREFMT05FPXkKLSMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQotQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKIApAQCAtMzEyLDcgKzMyOCwxMSBAQAogQ09ORklHX01URF9DRkk9eQogIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAogQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CkBAIC0zMjMsMjkgKzM0MywzMSBAQAogQ09ORklHX01URF9DRklfSTI9eQogIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX0NGSV9BTURTVERfUkVUUlk9MAorQ09ORklHX01URF9DRklfU1RBQT15CiBDT05GSUdfTVREX0NGSV9VVElMPXkKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX1JPTT15CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCi1DT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0lYUDIwMDA9eQotIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC0zNjIsNyArMzg0LDExIEBACiAjCiAjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKICMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKIAogIwogIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCkBAIC0zODEsMTkgKzQwNywxMiBAQAogIwogIyBCbG9jayBkZXZpY2VzCiAjCi0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKQEAgLTQwMSw3ICs0MjAsNDAgQEAKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQpAQCAtNDE2LDI4ICs0NjgsMjEgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIwotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogCiAjCiAjIEkyTyBkZXZpY2Ugc3VwcG9ydAogIwotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIAogIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwogIyBQSFkgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CkBAIC00NDcsNjYgKzQ5MiwyMCBAQAogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD15Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLQotIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQogIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCiAjCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCkBAIC01MTYsMjkgKzUxNSw3IEBACiAjCiAjIFdhbiBpbnRlcmZhY2VzCiAjCi1DT05GSUdfV0FOPXkKLSMgQ09ORklHX0RTQ0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTk1FRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LX1NZTkNQUFAgaXMgbm90IHNldAotQ09ORklHX0hETEM9eQotQ09ORklHX0hETENfUkFXPXkKLSMgQ09ORklHX0hETENfUkFXX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfSERMQ19DSVNDTz15Ci1DT05GSUdfSERMQ19GUj15Ci1DT05GSUdfSERMQ19QUFA9eQotCi0jCi0jIFguMjUvTEFQQiBzdXBwb3J0IGlzIGRpc2FibGVkCi0jCi0jIENPTkZJR19QQ0kyMDBTWU4gaXMgbm90IHNldAotIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAotIyBDT05GSUdfUEMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkFSU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfRExDST15Ci1DT05GSUdfRExDSV9DT1VOVD0yNAotQ09ORklHX0RMQ0lfTUFYPTgKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CkBAIC01NTQsMjggKzUzMSw3IEBACiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtNTkyLDIwICs1NDgsMTggQEAKICMKICMgU2VyaWFsIGRyaXZlcnMKICMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAogCiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMD15CitDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogCiAjCiAjIElQTUkKQEAgLTYyMiwyMyArNTc2LDE5IEBACiAjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCiAjCiAjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19JWFAyMDAwX1dBVENIRE9HPXkKIAogIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjYzLDI3ICs2MTMsOCBAQAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSVhQMjAwMD15Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CiAKICMKQEAgLTY5MSwxNyArNjIyLDI4IEBACiAjCiAjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKK0NPTkZJR19JMkNfREVCVUdfQUxHTz15CitDT05GSUdfSTJDX0RFQlVHX0JVUz15CitDT05GSUdfSTJDX0RFQlVHX0NISVA9eQorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNzE2LDYgKzY1OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldApAQCAtNzMzLDEwICs2NzYsOCBAQAogIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKQEAgLTc3NiwxNCArNzE3LDE0NCBAQAogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTPXkKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKICMKICMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwogIwogCiAjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1JUTDgxNTA9eQorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworQ09ORklHX1VTQl9TRVJJQUw9eQorQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRT15CisjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC03OTcsMjEgKzg2OCwxNyBAQAogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQyX0ZTX1hBVFRSPXkKLUNPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTgzMCw4ICs4OTcsMTEgQEAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIworQ09ORklHX0ZBVF9GUz15CiAjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAogCiAjCkBAIC04NDMsNiArOTEzLDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtOTExLDEyICs5ODIsNTIgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIAogIwogIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogIwotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydApAQCAtOTI3LDEzICsxMDM4LDE0IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TTEFCPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKQEAgLTk0MSw5ICsxMDUzLDEwIEBACiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQotIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1dBSVRRPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQogQ09ORklHX0RFQlVHX0xMPXkKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CkBAIC05NjksNiArMTA4Miw2IEBACiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPXkKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjdmYzQ0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOTc1ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1naXQxMwotIyBUaHUgTm92IDEwIDE1OjE0OjEzIDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JWFAyMDAwPXkKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19CSUdfRU5ESUFOPXkKLQotIwotIyBJbnRlbCBJWFAyNDAwLzI4MDAgSW1wbGVtZW50YXRpb24gT3B0aW9ucwotIwotCi0jCi0jIElYUDI0MDAvMjgwMCBQbGF0Zm9ybXMKLSMKLSMgQ09ORklHX0FSQ0hfRU5QMjYxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JWERQMjQwMD15Ci0jIENPTkZJR19BUkNIX0lYRFAyODAwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lYRFAyWDAwPXkKLSMgQ09ORklHX0FSQ0hfSVhEUDI0MDEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWERQMjgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWFAyMDAwX1NVUFBPUlRfQlJPS0VOX1BDSV9JTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQV9ETUFfQVBJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDU3NjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgbWVtPTY0TUAweDAiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX0ZQRV9OV0ZQRV9YUD15Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQotQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0lYUDIwMDA9eQotIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD15Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi1DT05GSUdfV0FOPXkKLSMgQ09ORklHX0RTQ0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTk1FRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LX1NZTkNQUFAgaXMgbm90IHNldAotQ09ORklHX0hETEM9eQotQ09ORklHX0hETENfUkFXPXkKLSMgQ09ORklHX0hETENfUkFXX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfSERMQ19DSVNDTz15Ci1DT05GSUdfSERMQ19GUj15Ci1DT05GSUdfSERMQ19QUFA9eQotCi0jCi0jIFguMjUvTEFQQiBzdXBwb3J0IGlzIGRpc2FibGVkCi0jCi0jIENPTkZJR19QQ0kyMDBTWU4gaXMgbm90IHNldAotIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAotIyBDT05GSUdfUEMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkFSU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfRExDST15Ci1DT05GSUdfRExDSV9DT1VOVD0yNAotQ09ORklHX0RMQ0lfTUFYPTgKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MQotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVhQMjAwMF9XQVRDSERPRz15Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0lYUDIwMDA9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRVJST1JTPXkKLUNPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyNDAxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGQ2NmU4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI0MDFfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOTc2ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1naXQxMwotIyBUaHUgTm92IDEwIDE1OjE0OjUwIDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JWFAyMDAwPXkKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19CSUdfRU5ESUFOPXkKLQotIwotIyBJbnRlbCBJWFAyNDAwLzI4MDAgSW1wbGVtZW50YXRpb24gT3B0aW9ucwotIwotCi0jCi0jIElYUDI0MDAvMjgwMCBQbGF0Zm9ybXMKLSMKLSMgQ09ORklHX0FSQ0hfRU5QMjYxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYRFAyNDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhEUDI4MDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSVhEUDI0MDE9eQotIyBDT05GSUdfQVJDSF9JWERQMjgwMSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JWERQMlgwMT15Ci0jIENPTkZJR19JWFAyMDAwX1NVUFBPUlRfQlJPS0VOX1BDSV9JTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQV9ETUFfQVBJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIG1lbT02NE1AMHgwIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi1DT05GSUdfRlBFX05XRlBFPXkKLUNPTkZJR19GUEVfTldGUEVfWFA9eQotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19CSUM9eQotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19TVEFOREFMT05FPXkKLSMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKLUNPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15Ci1DT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFk9eQotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLUNPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotQ09ORklHX01URF9JWFAyMDAwPXkKLSMgQ09ORklHX01URF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMS01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotCi0jCi0jIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotQ09ORklHX0NTODl4MD15Ci0jIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBSTzEwMD15Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIwotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi1DT05GSUdfV0FOPXkKLSMgQ09ORklHX0RTQ0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTk1FRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LX1NZTkNQUFAgaXMgbm90IHNldAotQ09ORklHX0hETEM9eQotQ09ORklHX0hETENfUkFXPXkKLSMgQ09ORklHX0hETENfUkFXX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfSERMQ19DSVNDTz15Ci1DT05GSUdfSERMQ19GUj15Ci1DT05GSUdfSERMQ19QUFA9eQotCi0jCi0jIFguMjUvTEFQQiBzdXBwb3J0IGlzIGRpc2FibGVkCi0jCi0jIENPTkZJR19QQ0kyMDBTWU4gaXMgbm90IHNldAotIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAotIyBDT05GSUdfUEMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkFSU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfRExDST15Ci1DT05GSUdfRExDSV9DT1VOVD0yNAotQ09ORklHX0RMQ0lfTUFYPTgKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MwotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVhQMjAwMF9XQVRDSERPRz15Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0lYUDIwMDA9eQotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRUVQUk9NPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci0jIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRVJST1JTPXkKLUNPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2l4ZHAyODAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjQ4MTIzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOTc1ICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1naXQxMwotIyBUaHUgTm92IDEwIDE1OjE0OjU2IDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIEJsb2NrIGxheWVyCi0jCi0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JWFAyMDAwPXkKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19CSUdfRU5ESUFOPXkKLQotIwotIyBJbnRlbCBJWFAyNDAwLzI4MDAgSW1wbGVtZW50YXRpb24gT3B0aW9ucwotIwotCi0jCi0jIElYUDI0MDAvMjgwMCBQbGF0Zm9ybXMKLSMKLSMgQ09ORklHX0FSQ0hfRU5QMjYxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYRFAyNDAwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lYRFAyODAwPXkKLUNPTkZJR19BUkNIX0lYRFAyWDAwPXkKLSMgQ09ORklHX0FSQ0hfSVhEUDI0MDEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWERQMjgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWFAyMDAwX1NVUFBPUlRfQlJPS0VOX1BDSV9JTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX0lTQV9ETUFfQVBJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9MRUdBQ1lfUFJPQz15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0lETEVfSFogaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDk2MDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBtZW09NjRNQDB4MCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfRlBFX05XRlBFX1hQPXkKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQklDPXkKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCi1DT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQotQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi1DT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfSVhQMjAwMD15Ci0jIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBQSFkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotQ09ORklHX0VFUFJPMTAwPXkKLSMgQ09ORklHX0UxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLUNPTkZJR19XQU49eQotIyBDT05GSUdfRFNDQzQgaXMgbm90IHNldAotIyBDT05GSUdfTEFOTUVESUEgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTktfU1lOQ1BQUCBpcyBub3Qgc2V0Ci1DT05GSUdfSERMQz15Ci1DT05GSUdfSERMQ19SQVc9eQotIyBDT05GSUdfSERMQ19SQVdfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19IRExDX0NJU0NPPXkKLUNPTkZJR19IRExDX0ZSPXkKLUNPTkZJR19IRExDX1BQUD15Ci0KLSMKLSMgWC4yNS9MQVBCIHN1cHBvcnQgaXMgZGlzYWJsZWQKLSMKLSMgQ09ORklHX1BDSTIwMFNZTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5YTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19ETENJPXkKLUNPTkZJR19ETENJX0NPVU5UPTI0Ci1DT05GSUdfRExDSV9NQVg9OAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0xCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19JWFAyMDAwX1dBVENIRE9HPXkKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSVhQMjAwMD15Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLSMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19FUlJPUlM9eQotQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhkcDI4MDFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NGYzZGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9peGRwMjgwMV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw5NzYgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LWdpdDEzCi0jIFRodSBOb3YgMTAgMTU6MTU6MDMgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lYUDIwMDA9eQotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0JJR19FTkRJQU49eQotCi0jCi0jIEludGVsIElYUDI0MDAvMjgwMCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCi0jCi0KLSMKLSMgSVhQMjQwMC8yODAwIFBsYXRmb3JtcwotIwotIyBDT05GSUdfQVJDSF9FTlAyNjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhEUDI0MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWERQMjgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYRFAyNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lYRFAyODAxPXkKLUNPTkZJR19BUkNIX0lYRFAyWDAxPXkKLSMgQ09ORklHX0lYUDIwMDBfU1VQUE9SVF9CUk9LRU5fUENJX0lPIGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0JJR19FTkRJQU49eQotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBX0RNQV9BUEk9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgbWVtPTY0TUAweDAiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX0ZQRV9OV0ZQRV9YUD15Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLUNPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQotQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0lYUDIwMDA9eQotIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUEhZIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1M4OXgwPXkKLSMgQ09ORklHX0RHUlMgaXMgbm90IHNldAotQ09ORklHX0VFUFJPMTAwPXkKLSMgQ09ORklHX0UxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLUNPTkZJR19XQU49eQotIyBDT05GSUdfRFNDQzQgaXMgbm90IHNldAotIyBDT05GSUdfTEFOTUVESUEgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTktfU1lOQ1BQUCBpcyBub3Qgc2V0Ci1DT05GSUdfSERMQz15Ci1DT05GSUdfSERMQ19SQVc9eQotIyBDT05GSUdfSERMQ19SQVdfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19IRExDX0NJU0NPPXkKLUNPTkZJR19IRExDX0ZSPXkKLUNPTkZJR19IRExDX1BQUD15Ci0KLSMKLSMgWC4yNS9MQVBCIHN1cHBvcnQgaXMgZGlzYWJsZWQKLSMKLSMgQ09ORklHX1BDSTIwMFNZTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5YTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19ETENJPXkKLUNPTkZJR19ETENJX0NPVU5UPTI0Ci1DT05GSUdfRExDSV9NQVg9OAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi1DT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19JWFAyMDAwX1dBVENIRE9HPXkKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSVhQMjAwMD15Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19FRVBST009eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAotIwotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUMl9GU19YQVRUUj15Ci1DT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci1DT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLSMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19FUlJPUlM9eQotQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2NvbmZpZ3MvZW5wMjYxMV9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvYXJtL2NvbmZpZ3MvaXhwMjAwMF9kZWZjb25maWcKaW5kZXggNWZkYWYzYy4uN2IwMmNhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lbnAyNjExX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2l4cDIwMDBfZGVmY29uZmlnCkBAIC0xLDExICsxLDEwIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtZ2l0MTMKLSMgVGh1IE5vdiAxMCAxNToxMjo0OCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCisjIFdlZCBGZWIgIDggMDQ6NDk6MTEgMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogCkBAIC0yOSwyNyArMjgsMzEgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMTA0LDYgKzEwNyw3IEBACiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0JJR19FTkRJQU49eQogCiAjCkBAIC0xMTQsMTAgKzExOCwxMiBAQAogIyBJWFAyNDAwLzI4MDAgUGxhdGZvcm1zCiAjCiBDT05GSUdfQVJDSF9FTlAyNjExPXkKLSMgQ09ORklHX0FSQ0hfSVhEUDI0MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWERQMjgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYRFAyNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhEUDI4MDEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSVhEUDI0MDA9eQorQ09ORklHX0FSQ0hfSVhEUDI4MDA9eQorQ09ORklHX0FSQ0hfSVhEUDJYMDA9eQorQ09ORklHX0FSQ0hfSVhEUDI0MDE9eQorQ09ORklHX0FSQ0hfSVhEUDI4MDE9eQorQ09ORklHX0FSQ0hfSVhEUDJYMDE9eQogIyBDT05GSUdfSVhQMjAwMF9TVVBQT1JUX0JST0tFTl9QQ0lfSU8gaXMgbm90IHNldAogCiAjCkBAIC0xNDAsNyArMTQ2LDYgQEAKICMKICMgQnVzIHN1cHBvcnQKICMKLUNPTkZJR19JU0FfRE1BX0FQST15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE1NSw2ICsxNjAsNyBAQAogIwogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTk3LDYgKzIwMyw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yNDIsNiArMjQ5LDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yNTksNyArMjcxLDYgQEAKICMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiAjCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0yODMsNiArMjk0LDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogQ09ORklHX01URD15CkBAIC0zMzAsNiArMzQ2LDcgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKIAogIwpAQCAtNDY1LDYgKzQ4Miw3IEBACiAjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorQ09ORklHX0NTODl4MD15CiAjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKIENPTkZJR19FRVBSTzEwMD15CiAjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKQEAgLTQ4NSwxMiArNTAzLDE0IEBACiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiAjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfRU5QMjYxMV9NU0ZfTkVUPXkKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldApAQCAtNTk0LDcgKzYxNCw4IEBACiAjCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTYwMiw3ICs2MjMsNiBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTcwNCw2ICs3MjQsMTIgQEAKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwogQ09ORklHX0hXTU9OPXkKQEAgLTczNyw2ICs3NjMsNyBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldApAQCAtODEyLDYgKzgzOSw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtODQzLDYgKzg3MSw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTkxMSw2ICs5NDAsNyBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCkBAIC05MjcsMTIgKzk1NywxMyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTk0MSw2ICs5NzIsNyBAQAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKICMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCmluZGV4IDY2OTViMDdjLi4zY2VjMjlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCi0jIE1vbiBGZWIgIDYgMTE6MTc6MjMgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2CisjIE1vbiBNYXIgMjAgMjA6MzY6MDIgMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKQEAgLTEyLDcgKzEyLDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtODcsNiArODYsNyBAQAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKQEAgLTExMSw2ICsxMTEsNyBAQAogIyBTM0MyNFhYIEltcGxlbWVudGF0aW9ucwogIwogQ09ORklHX01BQ0hfQU5VQklTPXkKK0NPTkZJR19NQUNIX09TSVJJUz15CiBDT05GSUdfQVJDSF9CQVNUPXkKIENPTkZJR19CQVNUX1BDMTA0X0lSUT15CiBDT05GSUdfQVJDSF9IMTk0MD15CkBAIC0xNzUsNiArMTc2LDcgQEAKICMKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjAwCiAjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjMwLDYgKzIzMiw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldApAQCAtMzY0LDcgKzM2Nyw2IEBACiBDT05GSUdfTVREX1JPTT15CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC00MzEsNiArNDMzLDcgQEAKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKQEAgLTYyMyw3ICs2MjYsNiBAQAogIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKICMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CkBAIC02ODYsNiArNjg4LDExIEBACiAjIENPTkZJR19QQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX01JWENPTVdEIGlzIG5vdCBzZXQKICMgQ09ORklHX1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiBDT05GSUdfUzNDMjQxMF9SVEM9eQpAQCAtNzUxLDYgKzc1OCwxMSBAQAogIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CiAKICMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwogQ09ORklHX0hXTU9OPXkKQEAgLTc2Myw2ICs3NzUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKQEAgLTg1MCwxNiArODYzLDEzOCBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKIAogIwogIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCiAjCiAKICMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfVVNTNzIwIGlzIG5vdCBzZXQKKworIworIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCisKKyMKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKICMgTU1DL1NEIENhcmQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FwbS5jIGIvYXJjaC9hcm0va2VybmVsL2FwbS5jCmluZGV4IDc2NmI2YzAuLjJiZWQyOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hcG0uYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXBtLmMKQEAgLTM1NywxMCArMzU3LDggQEAKIHsKIAlzdHJ1Y3QgYXBtX3VzZXIgKmFzOwogCi0JYXMgPSAoc3RydWN0IGFwbV91c2VyICopa21hbGxvYyhzaXplb2YoKmFzKSwgR0ZQX0tFUk5FTCk7CisJYXMgPSAoc3RydWN0IGFwbV91c2VyICopa3phbGxvYyhzaXplb2YoKmFzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGFzKSB7Ci0JCW1lbXNldChhcywgMCwgc2l6ZW9mKCphcykpOwotCiAJCS8qCiAJCSAqIFhYWCAtIHRoaXMgaXMgYSB0aW55IGJpdCBicm9rZW4sIHdoZW4gd2UgY29uc2lkZXIgQlNECiAJCSAqIHByb2Nlc3MgYWNjb3VudGluZy4gSWYgdGhlIGRldmljZSBpcyBvcGVuZWQgYnkgcm9vdCwgd2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMGFiYmNlOC4uYjMyNGRjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTU3LDcgKzU3LDkgQEAKICAgREVGSU5FKFRJX1RQX1ZBTFVFLAkJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0cF92YWx1ZSkpOwogICBERUZJTkUoVElfRlBTVEFURSwJCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZnBzdGF0ZSkpOwogICBERUZJTkUoVElfVkZQU1RBVEUsCQlvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHZmcHN0YXRlKSk7Ci0gIERFRklORShUSV9JV01NWFRfU1RBVEUsCShvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZwc3RhdGUpKzQpJn43KTsKKyNpZmRlZiBDT05GSUdfSVdNTVhUCisgIERFRklORShUSV9JV01NWFRfU1RBVEUsCW9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZnBzdGF0ZS5pd21teHQpKTsKKyNlbmRpZgogICBCTEFOSygpOwogICBERUZJTkUoU19SMCwJCQlvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgQVJNX3IwKSk7CiAgIERFRklORShTX1IxLAkJCW9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBBUk1fcjEpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYyBiL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYwppbmRleCBjNDkyM2ZhLi5kZTYwNmRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2Jpb3MzMi5jCkBAIC01NDAsMTIgKzU0MCwxMCBAQAogCWludCBuciwgYnVzbnI7CiAKIAlmb3IgKG5yID0gYnVzbnIgPSAwOyBuciA8IGh3LT5ucl9jb250cm9sbGVyczsgbnIrKykgewotCQlzeXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3N5c19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJCXN5cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfc3lzX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzeXMpCiAJCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2NhdGUgc3lzIGRhdGEhIik7CiAKLQkJbWVtc2V0KHN5cywgMCwgc2l6ZW9mKHN0cnVjdCBwY2lfc3lzX2RhdGEpKTsKLQogCQlzeXMtPmh3ICAgICAgPSBodzsKIAkJc3lzLT5idXNuciAgID0gYnVzbnI7CiAJCXN5cy0+c3dpenpsZSA9IGh3LT5zd2l6emxlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NvbXBhdC5jIGIvYXJjaC9hcm0va2VybmVsL2NvbXBhdC5jCmluZGV4IDcxOTVhZGQuLjYwY2ZhN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmMKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAorI2luY2x1ZGUgImNvbXBhdC5oIgorCiAvKgogICogVXNhZ2U6CiAgKiAgLSBkbyBub3QgZ28gYmxpbmRseSBhZGRpbmcgZmllbGRzLCBhZGQgdGhlbSBhdCB0aGUgZW5kCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmggYi9hcmNoL2FybS9rZXJuZWwvY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlNjFhNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC9jb21wYXQuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKK2V4dGVybiB2b2lkIGNvbnZlcnRfdG9fdGFnX2xpc3Qoc3RydWN0IHRhZyAqdGFncyk7CisKK2V4dGVybiB2b2lkIHNxdWFzaF9tZW1fdGFncyhzdHJ1Y3QgdGFnICp0YWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwppbmRleCBjYWFhOTE5Li5kYTI4MGJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwpAQCAtMTEsNyArMTEsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCiAJCS50ZXh0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKaW5kZXggNzRlYTI5Yy4uMDBhYTIyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKQEAgLTgwNywxNCArODA3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBiYXNlOwogCWludCBpOwogCi0JZWMgPSBrbWFsbG9jKHNpemVvZihlY2FyZF90KSwgR0ZQX0tFUk5FTCk7CisJZWMgPSBremFsbG9jKHNpemVvZihlY2FyZF90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlYykgewogCQllYyA9IEVSUl9QVFIoLUVOT01FTSk7CiAJCWdvdG8gbm9tZW07CiAJfQogCi0JbWVtc2V0KGVjLCAwLCBzaXplb2YoZWNhcmRfdCkpOwotCiAJZWMtPnNsb3Rfbm8gPSBzbG90OwogCWVjLT50eXBlID0gdHlwZTsKIAllYy0+aXJxID0gTk9fSVJROwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggOTY0Y2Q3MS4uMzU1OTE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC00ODQsNyArNDg0LDYgQEAKIAltb3Zjc3MJcjcsIHI1LCBsc3IgIyhUSUZfVVNJTkdfSVdNTVhUICsgMSkKIAliY3MJaXdtbXh0X3Rhc2tfZW5hYmxlCiAjZW5kaWYKLQllbmFibGVfaXJxCiAJYWRkCXBjLCBwYywgcjgsIGxzciAjNgogCW1vdglyMCwgcjAKIApAQCAtNTExLDYgKzUxMCw3IEBACiAJbW92CXBjLCBscgkJCQlAIENQIzE1IChDb250cm9sKQogCiBkb19mcGU6CisJZW5hYmxlX2lycQogCWxkcglyNCwgLkxDZnAKIAlhZGQJcjEwLCByMTAsICNUSV9GUFNUQVRFCQlAIHIxMCA9IHdvcmtzcGFjZQogCWxkcglwYywgW3I0XQkJCUAgQ2FsbCBGUCBtb2R1bGUgVVNSIGVudHJ5IHBvaW50CkBAIC01NjYsNyArNTY2LDcgQEAKIAlsZHIJcjYsIFtyMiwgI1RJX0NQVV9ET01BSU5dIQogI2VuZGlmCiAjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKLSNpZmRlZiBDT05GSUdfQ1BVX01QQ09SRQorI2lmZGVmIENPTkZJR19DUFVfMzJ2NksKIAljbHJleAogI2Vsc2UKIAlzdHJleAlyNSwgcjQsIFtpcF0JCQlAIENsZWFyIGV4Y2x1c2l2ZSBtb25pdG9yCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCAxYWNhMTc3NS4uODQyNzdmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQuUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCkBAIC0yOCwxMCArMjgsOSBAQAogI2RlZmluZSBQUk9DSU5GT19JTklURlVOQwkxMgogCiAjZGVmaW5lIE1BQ0hJTkZPX1RZUEUJCTAKLSNkZWZpbmUgTUFDSElORk9fUEhZU1JBTQk0Ci0jZGVmaW5lIE1BQ0hJTkZPX1BIWVNJTwkJOAotI2RlZmluZSBNQUNISU5GT19QR09GRklPCTEyCi0jZGVmaW5lIE1BQ0hJTkZPX05BTUUJCTE2CisjZGVmaW5lIE1BQ0hJTkZPX1BIWVNJTwkJNAorI2RlZmluZSBNQUNISU5GT19QR09GRklPCTgKKyNkZWZpbmUgTUFDSElORk9fTkFNRQkJMTIKIAogI2RlZmluZSBLRVJORUxfUkFNX0FERFIJKFBBR0VfT0ZGU0VUICsgVEVYVF9PRkZTRVQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwppbmRleCAxZDUwZDJiLi4yZDU4OTZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCkBAIC0zMDUsMTQgKzMwNSwxOSBAQAogCXN0YXRpYyBpbnQgY291bnQgPSAxMDA7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCi0JaWYgKCFjb3VudCB8fCBub2lycWRlYnVnKQorCWlmIChub2lycWRlYnVnKQogCQlyZXR1cm47CiAKLQljb3VudC0tOwotCiAJaWYgKHJldCAhPSBJUlFfSEFORExFRCAmJiByZXQgIT0gSVJRX05PTkUpIHsKKwkJaWYgKCFjb3VudCkKKwkJCXJldHVybjsKKwkJY291bnQtLTsKIAkJcHJpbnRrKCJpcnEldTogYm9ndXMgcmV0dmFsIG1hc2sgJXhcbiIsIGlycSwgcmV0KTsKIAl9IGVsc2UgeworCQlkZXNjLT5pcnFzX3VuaGFuZGxlZCsrOworCQlpZiAoZGVzYy0+aXJxc191bmhhbmRsZWQgPD0gOTk5MDApCisJCQlyZXR1cm47CisJCWRlc2MtPmlycXNfdW5oYW5kbGVkID0gMDsKIAkJcHJpbnRrKCJpcnEldTogbm9ib2R5IGNhcmVkXG4iLCBpcnEpOwogCX0KIAlzaG93X3JlZ3MocmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCA0YjRlNGNmLi40ODljMDY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CiAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTgzLDcgKzg0LDcgQEAKICAqIFRoaXMgaXMgb3VyIGRlZmF1bHQgaWRsZSBoYW5kbGVyLiAgV2UgbmVlZCB0byBkaXNhYmxlCiAgKiBpbnRlcnJ1cHRzIGhlcmUgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgYSB3YWtldXAgY2FsbC4KICAqLwotdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKK3N0YXRpYyB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQogewogCWlmIChobHRfY291bnRlcikKIAkJY3B1X3JlbGF4KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggN2I2MjU2Yi4uYTFkMWIyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtNjEwLDE1ICs2MTAsMTIgQEAKIHN0YXRpYyBpbnQgcHRyYWNlX2dldHdtbXhyZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB2b2lkIF9fdXNlciAqdWZwKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdGFza190aHJlYWRfaW5mbyh0c2spOwotCXZvaWQgKnB0ciA9ICZ0aHJlYWQtPmZwc3RhdGU7CiAKIAlpZiAoIXRlc3RfdGlfdGhyZWFkX2ZsYWcodGhyZWFkLCBUSUZfVVNJTkdfSVdNTVhUKSkKIAkJcmV0dXJuIC1FTk9EQVRBOwogCWl3bW14dF90YXNrX2Rpc2FibGUodGhyZWFkKTsgIC8qIGZvcmNlIGl0IHRvIHJhbSAqLwotCS8qIFRoZSBpV01NWHQgc3RhdGUgaXMgc3RvcmVkIGRvdWJsZXdvcmQtYWxpZ25lZC4gICovCi0JaWYgKCgobG9uZykgcHRyKSAmIDQpCi0JCXB0ciArPSA0OwotCXJldHVybiBjb3B5X3RvX3VzZXIodWZwLCBwdHIsIDB4OTgpID8gLUVGQVVMVCA6IDA7CisJcmV0dXJuIGNvcHlfdG9fdXNlcih1ZnAsICZ0aHJlYWQtPmZwc3RhdGUuaXdtbXh0LCBJV01NWFRfU0laRSkKKwkJPyAtRUZBVUxUIDogMDsKIH0KIAogLyoKQEAgLTYyNywxNSArNjI0LDEyIEBACiBzdGF0aWMgaW50IHB0cmFjZV9zZXR3bW14cmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKnVmcCkKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHRhc2tfdGhyZWFkX2luZm8odHNrKTsKLQl2b2lkICpwdHIgPSAmdGhyZWFkLT5mcHN0YXRlOwogCiAJaWYgKCF0ZXN0X3RpX3RocmVhZF9mbGFnKHRocmVhZCwgVElGX1VTSU5HX0lXTU1YVCkpCiAJCXJldHVybiAtRUFDQ0VTOwogCWl3bW14dF90YXNrX3JlbGVhc2UodGhyZWFkKTsgIC8qIGZvcmNlIGEgcmVsb2FkICovCi0JLyogVGhlIGlXTU1YdCBzdGF0ZSBpcyBzdG9yZWQgZG91Ymxld29yZC1hbGlnbmVkLiAgKi8KLQlpZiAoKChsb25nKSBwdHIpICYgNCkKLQkJcHRyICs9IDQ7Ci0JcmV0dXJuIGNvcHlfZnJvbV91c2VyKHB0ciwgdWZwLCAweDk4KSA/IC1FRkFVTFQgOiAwOworCXJldHVybiBjb3B5X2Zyb21fdXNlcigmdGhyZWFkLT5mcHN0YXRlLml3bW14dCwgdWZwLCBJV01NWFRfU0laRSkKKwkJPyAtRUZBVUxUIDogMDsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IDY4MjczYjQuLjA4OTc0Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCisjaW5jbHVkZSAiY29tcGF0LmgiCisKICNpZm5kZWYgTUVNX1NJWkUKICNkZWZpbmUgTUVNX1NJWkUJKDE2KjEwMjQqMTAyNCkKICNlbmRpZgpAQCAtNTMsMTAgKzU1LDcgQEAKIF9fc2V0dXAoImZwZT0iLCBmcGVfc2V0dXApOwogI2VuZGlmCiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgbWVtX2ZjbGtfMjEyODU7CiBleHRlcm4gdm9pZCBwYWdpbmdfaW5pdChzdHJ1Y3QgbWVtaW5mbyAqLCBzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjKTsKLWV4dGVybiB2b2lkIGNvbnZlcnRfdG9fdGFnX2xpc3Qoc3RydWN0IHRhZyAqdGFncyk7Ci1leHRlcm4gdm9pZCBzcXVhc2hfbWVtX3RhZ3Moc3RydWN0IHRhZyAqdGFnKTsKIGV4dGVybiB2b2lkIHJlYm9vdF9zZXR1cChjaGFyICpzdHIpOwogZXh0ZXJuIGludCByb290X21vdW50ZmxhZ3M7CiBleHRlcm4gdm9pZCBfc3RleHQsIF90ZXh0LCBfZXRleHQsIF9fZGF0YV9zdGFydCwgX2VkYXRhLCBfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggZDdkOTMyYy4uZDZiZDQzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC00MjIsMTIgKzQyMiwxNCBAQAogdm9pZCB0aW1lcl9keW5fcmVwcm9ncmFtKHZvaWQpCiB7CiAJc3RydWN0IGR5bl90aWNrX3RpbWVyICpkeW5fdGljayA9IHN5c3RlbV90aW1lci0+ZHluX3RpY2s7CisJdW5zaWduZWQgbG9uZyBuZXh0LCBzZXE7CiAKLQlpZiAoZHluX3RpY2spIHsKLQkJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7Ci0JCWlmIChkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKQorCWlmIChkeW5fdGljayAmJiAoZHluX3RpY2stPnN0YXRlICYgRFlOX1RJQ0tfRU5BQkxFRCkpIHsKKwkJbmV4dCA9IG5leHRfdGltZXJfaW50ZXJydXB0KCk7CisJCWRvIHsKKwkJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwogCQkJZHluX3RpY2stPnJlcHJvZ3JhbShuZXh0X3RpbWVyX2ludGVycnVwdCgpIC0gamlmZmllcyk7Ci0JCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCAxMDIzNWIwLi4wMzkyNGJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTIzMSw2ICsyMzIsMTMgQEAKIAlfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKworCWlmIChwYW5pY19vbl9vb3BzKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICJGYXRhbCBleGNlcHRpb246IHBhbmljIGluIDUgc2Vjb25kc1xuIik7CisJCXNzbGVlcCg1KTsKKwkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOworCX0KKwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9kZWxheS5TIGIvYXJjaC9hcm0vbGliL2RlbGF5LlMKaW5kZXggYjNmYjQ3NS4uOTE4M2IwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2RlbGF5LlMKKysrIGIvYXJjaC9hcm0vbGliL2RlbGF5LlMKQEAgLTksMjggKzksMzIgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAJCS50ZXh0CiAKIC5MQzA6CQkud29yZAlsb29wc19wZXJfamlmZnkKKy5MQzE6CQkud29yZAkoMjE5OTAyMypIWik+PjExCiAKIC8qCi0gKiAwIDw9IHIwIDw9IDIwMDAKKyAqIHIwICA8PSAyMDAwCisgKiBscGogPD0gMHgwMWZmZmZmZiAobWF4LiAzMzU1IGJvZ29taXBzKQorICogSFogIDw9IDEwMDAKICAqLworCiBFTlRSWShfX3VkZWxheSkKLQkJbW92CXIyLCAgICAgIzB4NjgwMAotCQlvcnIJcjIsIHIyLCAjMHgwMGRiCisJCWxkcglyMiwgLkxDMQogCQltdWwJcjAsIHIyLCByMAotRU5UUlkoX19jb25zdF91ZGVsYXkpCQkJCUAgMCA8PSByMCA8PSAweDAxZmZmZmZmCitFTlRSWShfX2NvbnN0X3VkZWxheSkJCQkJQCAwIDw9IHIwIDw9IDB4N2ZmZmZmMDYKIAkJbGRyCXIyLCAuTEMwCi0JCWxkcglyMiwgW3IyXQkJQCBtYXggPSAweDBmZmZmZmZmCi0JCW1vdglyMCwgcjAsIGxzciAjMTEJCUAgbWF4ID0gMHgwMDAwM2ZmZgotCQltb3YJcjIsIHIyLCBsc3IgIzExCQlAIG1heCA9IDB4MDAwM2ZmZmYKKwkJbGRyCXIyLCBbcjJdCQlAIG1heCA9IDB4MDFmZmZmZmYKKwkJbW92CXIwLCByMCwgbHNyICMxNAkJQCBtYXggPSAweDAwMDFmZmZmCisJCW1vdglyMiwgcjIsIGxzciAjMTAJCUAgbWF4ID0gMHgwMDAwN2ZmZgogCQltdWwJcjAsIHIyLCByMAkJQCBtYXggPSAyXjMyLTEKIAkJbW92cwlyMCwgcjAsIGxzciAjNgogCQlSRVRJTlNUUihtb3ZlcSxwYyxscikKIAogLyoKLSAqIGxvb3BzID0gKHIwICogMHgxMGM2ICogMTAwICogbG9vcHNfcGVyX2ppZmZ5KSAvIDJeMzIKKyAqIGxvb3BzID0gcjAgKiBIWiAqIGxvb3BzX3Blcl9qaWZmeSAvIDEwMDAwMDAKICAqCiAgKiBPaCwgaWYgb25seSB3ZSBoYWQgYSBjeWNsZSBjb3VudGVyLi4uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9pby1hY29ybi5TIGIvYXJjaC9hcm0vbGliL2lvLWFjb3JuLlMKaW5kZXggYjE1MzUyMy4uMWIxOTdlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2lvLWFjb3JuLlMKKysrIGIvYXJjaC9hcm0vbGliL2lvLWFjb3JuLlMKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKIAkJLnRleHQKIAkJLmFsaWduCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvbXVsZGkzLlMgYi9hcmNoL2FybS9saWIvbXVsZGkzLlMKaW5kZXggNzJkNTk0MS4uZDg5YzYwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL211bGRpMy5TCisrKyBiL2FyY2gvYXJtL2xpYi9tdWxkaTMuUwpAQCAtMjksOCArMjksOCBAQAogCiAJbXVsCXhoLCB5bCwgeGgKIAltbGEJeGgsIHhsLCB5aCwgeGgKLQltb3YJaXAsIHhsLCBhc3IgIzE2Ci0JbW92CXloLCB5bCwgYXNyICMxNgorCW1vdglpcCwgeGwsIGxzciAjMTYKKwltb3YJeWgsIHlsLCBsc3IgIzE2CiAJYmljCXhsLCB4bCwgaXAsIGxzbCAjMTYKIAliaWMJeWwsIHlsLCB5aCwgbHNsICMxNgogCW1sYQl4aCwgeWgsIGlwLCB4aApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suYwppbmRleCBlYzgxOTVhLi44Yjk1NDY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suYwpAQCAtMjAxLDYgKzIwMSw1NCBAQAogCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VSFAsCiAJLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAogfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGV0aGVyX2NsayA9IHsKKwkubmFtZQkJPSAiZXRoZXJfY2xrIiwKKwkucGFyZW50CQk9ICZtY2ssCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX0VNQUMsCisJLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7CisJLm5hbWUJCT0gIm1jaV9jbGsiLAorCS5wYXJlbnQJCT0gJm1jaywKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFfSURfTUNJLAorCS5tb2RlCQk9IHBtY19wZXJpcGhfbW9kZSwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2lfY2xrID0geworCS5uYW1lCQk9ICJ0d2lfY2xrIiwKKwkucGFyZW50CQk9ICZtY2ssCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1RXSSwKKwkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQwX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQwX2NsayIsCisJLnBhcmVudAkJPSAmbWNrLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VUzAsCisJLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAorCS5wYXJlbnQJCT0gJm1jaywKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFfSURfVVMxLAorCS5tb2RlCQk9IHBtY19wZXJpcGhfbW9kZSwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKKwkucGFyZW50CQk9ICZtY2ssCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1VTMiwKKwkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQzX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQzX2NsayIsCisJLnBhcmVudAkJPSAmbWNrLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VUzMsCisJLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaV9jbGsgPSB7CisJLm5hbWUJCT0gInNwaTBfY2xrIiwKKwkucGFyZW50CQk9ICZtY2ssCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1NQSSwKKwkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCit9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqY29uc3QgY2xvY2tfbGlzdFtdID0gewogCS8qIGZvdXIgcHJpbWFyeSBjbG9ja3MgLS0gTVVTVCBCRSBGSVJTVCEgKi8KQEAgLTIyMywxNSArMjcxLDE4IEBACiAKIAkvKiBNQ0sgYW5kIHBlcmlwaGVyYWxzICovCiAJJm1jaywKLQkvLyB1c2FydDAuLnVzYXJ0MwotCS8vIG1tYworCSZ1c2FydDBfY2xrLAorCSZ1c2FydDFfY2xrLAorCSZ1c2FydDJfY2xrLAorCSZ1c2FydDNfY2xrLAorCSZtbWNfY2xrLAogCSZ1ZGNfY2xrLAotCS8vIGkyYwotCS8vIHNwaQorCSZ0d2lfY2xrLAorCSZzcGlfY2xrLAogCS8vIHNzYzAuLnNzYzIKIAkvLyB0YzAuLnRjNQogCSZvaGNpX2NsaywKLQkvLyBldGhlcgorCSZldGhlcl9jbGssCiB9OwogCiAKQEAgLTM2MCw3ICs0MTEsNyBAQAogCQkJdTMyCXBja3I7CiAKIAkJCXBja3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCkpOwotCQkJcGNrciAmPSAweDAzOworCQkJcGNrciAmPSBBVDkxX1BNQ19DU1NfUExMQjsJLyogY2xvY2sgc2VsZWN0aW9uICovCiAJCQlwY2tyIHw9IHByZXNjYWxlIDw8IDI7CiAJCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0tSKGNsay0+aWQpLCBwY2tyKTsKIAkJCWNsay0+cmF0ZV9oeiA9IGFjdHVhbDsKQEAgLTQ0MCw3ICs0OTEsNyBAQAogCQllbHNlCiAJCQlzdGF0ZSA9ICIiOwogCi0JCXNlcV9wcmludGYocywgIiUtMTBzIHVzZXJzPSVkICUtM3MgJTlsZCBIeiAlc1xuIiwKKwkJc2VxX3ByaW50ZihzLCAiJS0xMHMgdXNlcnM9JTJkICUtM3MgJTlsZCBIeiAlc1xuIiwKIAkJCWNsay0+bmFtZSwgY2xrLT51c2Vycywgc3RhdGUsIGNsa19nZXRfcmF0ZShjbGspLAogCQkJY2xrLT5wYXJlbnQgPyBjbGstPnBhcmVudC0+bmFtZSA6ICIiKTsKIAl9CkBAIC00ODMsMTEgKzUzNCwxOCBAQAogCQlmcmVxICo9IG11bCArIDE7CiAJfSBlbHNlCiAJCWZyZXEgPSAwOwotCWlmIChwbGwgPT0gJnBsbGIgJiYgKHJlZyAmICgxIDw8IDI4KSkpCi0JCWZyZXEgLz0gMjsKKwogCXJldHVybiBmcmVxOwogfQogCitzdGF0aWMgdTMyIF9faW5pdCBhdDkxX3VzYl9yYXRlKHN0cnVjdCBjbGsgKnBsbCwgdTMyIGZyZXEsIHUzMiByZWcpCit7CisJaWYgKHBsbCA9PSAmcGxsYiAmJiAocmVnICYgQVQ5MV9QTUNfVVNCOTZNKSkKKwkJcmV0dXJuIGZyZXEgLyAyOworCWVsc2UKKwkJcmV0dXJuIGZyZXE7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBfX2luaXQgYXQ5MV9wbGxfY2FsYyh1bnNpZ25lZCBtYWluX2ZyZXEsIHVuc2lnbmVkIG91dF9mcmVxKQogewogCXVuc2lnbmVkIGksIGRpdiA9IDAsIG11bCA9IDAsIGRpZmYgPSAxIDw8IDMwOwpAQCAtNTUwLDggKzYwOCw4IEBACiAJaWYgKCFtYWluX2Nsb2NrKSB7CiAJCWRvIHsKIAkJCXRtcCA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX01DRlIpOwotCQl9IHdoaWxlICghKHRtcCAmIDB4MTAwMDApKTsKLQkJbWFpbl9jbG9jayA9ICh0bXAgJiAweGZmZmYpICogKEFUOTFfU0xPV19DTE9DSyAvIDE2KTsKKwkJfSB3aGlsZSAoISh0bXAgJiBBVDkxX1BNQ19NQUlOUkRZKSk7CisJCW1haW5fY2xvY2sgPSAodG1wICYgQVQ5MV9QTUNfTUFJTkYpICogKEFUOTFfU0xPV19DTE9DSyAvIDE2KTsKIAl9CiAJbWFpbl9jbGsucmF0ZV9oeiA9IG1haW5fY2xvY2s7CiAKQEAgLTU2NiwxMyArNjI0LDE2IEBACiAJICoKIAkgKiBSRVZJU0lUOiAgYXNzdW1lcyBNQ0sgZG9lc24ndCBkZXJpdmUgZnJvbSBQTExCIQogCSAqLwotCWF0OTFfcGxsYl91c2JfaW5pdCA9IGF0OTFfcGxsX2NhbGMobWFpbl9jbG9jaywgNDgwMDAwMDAgKiAyKSB8IDB4MTAwMDAwMDA7CisJYXQ5MV9wbGxiX3VzYl9pbml0ID0gYXQ5MV9wbGxfY2FsYyhtYWluX2Nsb2NrLCA0ODAwMDAwMCAqIDIpIHwgQVQ5MV9QTUNfVVNCOTZNOwogCXBsbGIucmF0ZV9oeiA9IGF0OTFfcGxsX3JhdGUoJnBsbGIsIG1haW5fY2xvY2ssIGF0OTFfcGxsYl91c2JfaW5pdCk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENEUiwgKDEgPDwgQVQ5MV9JRF9VSFApIHwgKDEgPDwgQVQ5MV9JRF9VRFApKTsKIAlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19TQ0RSLCBBVDkxX1BNQ19VSFAgfCBBVDkxX1BNQ19VRFApOwogCWF0OTFfc3lzX3dyaXRlKEFUOTFfQ0tHUl9QTExCUiwgMCk7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfU0NFUiwgQVQ5MV9QTUNfTUNLVURQKTsKIAorCXVkcGNrLnJhdGVfaHogPSBhdDkxX3VzYl9yYXRlKCZwbGxiLCBwbGxiLnJhdGVfaHosIGF0OTFfcGxsYl91c2JfaW5pdCk7CisJdWhwY2sucmF0ZV9oeiA9IGF0OTFfdXNiX3JhdGUoJnBsbGIsIHBsbGIucmF0ZV9oeiwgYXQ5MV9wbGxiX3VzYl9pbml0KTsKKwogCS8qCiAJICogTUNLIGFuZCBDUFUgZGVyaXZlIGZyb20gb25lIG9mIHRob3NlIHByaW1hcnkgY2xvY2tzLgogCSAqIEZvciBub3csIGFzc3VtZSB0aGlzIHBhcmVudGFnZSB3b24ndCBjaGFuZ2UuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYwppbmRleCA4ZGYzZTUyLi41N2VlZGQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKQEAgLTEwMCw4ICsxMDAsMTAgQEAKIAkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT52YnVzX3BpbiwgMCk7CiAJCWF0OTFfc2V0X2RlZ2xpdGNoKGRhdGEtPnZidXNfcGluLCAxKTsKIAl9Ci0JaWYgKGRhdGEtPnB1bGx1cF9waW4pCisJaWYgKGRhdGEtPnB1bGx1cF9waW4pIHsKIAkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+cHVsbHVwX3BpbiwgMCk7CisJCWF0OTFfc2V0X211bHRpX2RyaXZlKGRhdGEtPnB1bGx1cF9waW4sIDEpOworCX0KIAogCXVkY19kYXRhID0gKmRhdGE7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxcm05MjAwX3VkY19kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKaW5kZXggMmZkMmVmNS4uNWFiNDYyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCkBAIC0xNTksNiArMTU5LDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGF0OTFfc2V0X2RlZ2xpdGNoKTsKIAorLyoKKyAqIGVuYWJsZS9kaXNhYmxlIHRoZSBtdWx0aS1kcml2ZXI7IFRoaXMgaXMgb25seSB2YWxpZCBmb3Igb3V0cHV0IGFuZAorICogYWxsb3dzIHRoZSBvdXRwdXQgcGluIHRvIHJ1biBhcyBhbiBvcGVuIGNvbGxlY3RvciBvdXRwdXQuCisgKi8KK2ludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X211bHRpX2RyaXZlKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKQoreworCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKKwl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKKworCWlmICghcGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAoaXNfb24gPyBQSU9fTURFUiA6IFBJT19NRERSKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGF0OTFfc2V0X211bHRpX2RyaXZlKTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIApAQCAtMjQ0LDcgKzI2MSw3IEBACiAJdm9pZCBfX2lvbWVtCSpwaW87CiAJdTMyCQlpc3I7CiAKLQlwaW8gPSAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikgZGVzYy0+Y2hpcGRhdGE7CisJcGlvID0gZGVzYy0+YmFzZTsKIAogCS8qIHRlbXBvcmFyaWx5IG1hc2sgKGxldmVsIHNlbnNpdGl2ZSkgcGFyZW50IElSUSAqLwogCWRlc2MtPmNoaXAtPmFjayhpcnEpOwpAQCAtMjU3LDggKzI3NCwxOCBAQAogCQlncGlvID0gJmlycV9kZXNjW3Bpbl07CiAKIAkJd2hpbGUgKGlzcikgewotCQkJaWYgKGlzciAmIDEpCi0JCQkJZ3Bpby0+aGFuZGxlKHBpbiwgZ3BpbywgcmVncyk7CisJCQlpZiAoaXNyICYgMSkgeworCQkJCWlmICh1bmxpa2VseShncGlvLT5kaXNhYmxlX2RlcHRoKSkgeworCQkJCQkvKgorCQkJCQkgKiBUaGUgY29yZSBBUk0gaW50ZXJydXB0IGhhbmRsZXIgbGF6aWx5IGRpc2FibGVzIElSUXMgc28KKwkJCQkJICogYW5vdGhlciBJUlEgbXVzdCBiZSBnZW5lcmF0ZWQgYmVmb3JlIGl0IGFjdHVhbGx5IGdldHMKKwkJCQkJICogaGVyZSB0byBiZSBkaXNhYmxlZCBvbiB0aGUgR1BJTyBjb250cm9sbGVyLgorCQkJCQkgKi8KKwkJCQkJZ3Bpb19pcnFfbWFzayhwaW4pOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWdwaW8tPmhhbmRsZShwaW4sIGdwaW8sIHJlZ3MpOworCQkJfQogCQkJcGluKys7CiAJCQlncGlvKys7CiAJCQlpc3IgPj49IDE7CkBAIC0yODUsNyArMzEyLDcgQEAKIAkJX19yYXdfd3JpdGVsKH4wLCBjb250cm9sbGVyICsgUElPX0lEUik7CiAKIAkJc2V0X2lycV9kYXRhKGlkLCAodm9pZCAqKSBwaW4pOwotCQlzZXRfaXJxX2NoaXBkYXRhKGlkLCAodm9pZCBfX2ZvcmNlICopIGNvbnRyb2xsZXIpOworCQlzZXRfaXJxX2NoaXBkYXRhKGlkLCBjb250cm9sbGVyKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKywgcGluKyspIHsKIAkJCXNldF9pcnFfY2hpcChwaW4sICZncGlvX2lycWNoaXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC90aW1lLmMKaW5kZXggMWI2ZGQyZC4uN2ZmY2Y0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvdGltZS5jCkBAIC03MSwxMSArNzEsMTEgQEAKIAlpZiAoYXQ5MV9zeXNfcmVhZChBVDkxX1NUX1NSKSAmIEFUOTFfU1RfUElUUykgewkvKiBUaGlzIGlzIGEgc2hhcmVkIGludGVycnVwdCAqLwogCQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKIAotCQlkbyB7CisJCXdoaWxlICgoKHJlYWRfQ1JUUigpIC0gYXQ5MV9zeXNfcmVhZChBVDkxX1NUX1JUQVIpKSAmIEFUOTFfU1RfQUxNVikgPj0gTEFUQ0gpIHsKIAkJCXRpbWVyX3RpY2socmVncyk7CiAJCQlydGFyID0gKGF0OTFfc3lzX3JlYWQoQVQ5MV9TVF9SVEFSKSArIExBVENIKSAmIEFUOTFfU1RfQUxNVjsKIAkJCWF0OTFfc3lzX3dyaXRlKEFUOTFfU1RfUlRBUiwgcnRhcik7Ci0JCX0gd2hpbGUgKCgocmVhZF9DUlRSKCkgLSBhdDkxX3N5c19yZWFkKEFUOTFfU1RfUlRBUikpICYgQVQ5MV9TVF9BTE1WKSA+PSBMQVRDSCk7CisJCX0KIAogCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWM1YTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACitpZiBBUkNIX0VQOTNYWAorCittZW51ICJDaXJydXMgRVA5M3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMiCisKK2NvbW1lbnQgIkVQOTN4eCBQbGF0Zm9ybXMiCisKK2NvbmZpZyBNQUNIX0dFU0JDOTMxMgorCWJvb2wgIlN1cHBvcnQgR2xvbWF0aW9uIEdFU0JDLTkzMTItc3giCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEdsb21hdGlvbgorCSAgR0VTQkMtOTMxMi1zeCBib2FyZC4KKworY29uZmlnIE1BQ0hfVFM3MlhYCisJYm9vbCAiU3VwcG9ydCBUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTcyeHggU0JDIgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgVGVjaG5vbG9naWMgU3lzdGVtcyBUUy03Mnh4IGJvYXJkLgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTNhZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworb2JqLXkJCQk6PSBjb3JlLm8KK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCitvYmotJChDT05GSUdfTUFDSF9HRVNCQzkzMTIpCSs9IGdlc2JjOTMxMi5vCitvYmotJChDT05GSUdfTUFDSF9UUzcyWFgpCSs9IHRzNzJ4eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTU2MWFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDIgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDAwMDAwMTAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1NDI3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworICogQ29yZSByb3V0aW5lcyBmb3IgQ2lycnVzIEVQOTN4eCBjaGlwcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKgorICogVGhhbmtzIGdvIHRvIE1pY2hhZWwgQnVyaWFuIGFuZCBSYXkgTGVodGluaWVtaSBmb3IgdGhlaXIga2V5CisgKiByb2xlIGluIHRoZSBlcDkzeHggbGludXggY29tbXVuaXR5LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0YXRpYyBJL08gbWFwcGluZ3MgdGhhdCBhcmUgbmVlZGVkIGZvciBhbGwgRVA5M3h4IHBsYXRmb3JtcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGVwOTN4eF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gRVA5M1hYX0FIQl9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFUDkzWFhfQUhCX1BIWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gRVA5M1hYX0FIQl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IEVQOTNYWF9BUEJfVklSVF9CQVNFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oRVA5M1hYX0FQQl9QSFlTX0JBU0UpLAorCQkubGVuZ3RoCQk9IEVQOTNYWF9BUEJfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCit9OworCit2b2lkIF9faW5pdCBlcDkzeHhfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KGVwOTN4eF9pb19kZXNjLCBBUlJBWV9TSVpFKGVwOTN4eF9pb19kZXNjKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRpbWVyIGhhbmRsaW5nIGZvciBFUDkzeHgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGUgZXA5M3h4IGhhcyBmb3VyIGludGVybmFsIHRpbWVycy4gIFRpbWVycyAxLCAyIChib3RoIDE2IGJpdCkgYW5kCisgKiAzICgzMiBiaXQpIGNvdW50IGRvd24gYXQgNTA4IGtIeiwgYXJlIHNlbGYtcmVsb2FkaW5nLCBhbmQgY2FuIGdlbmVyYXRlCisgKiBhbiBpbnRlcnJ1cHQgb24gdW5kZXJmbG93LiAgVGltZXIgNCAoNDAgYml0KSBjb3VudHMgZG93biBhdCA5ODMuMDQga0h6LAorICogaXMgZnJlZS1ydW5uaW5nLCBhbmQgY2FuJ3QgZ2VuZXJhdGUgaW50ZXJydXB0cy4KKyAqCisgKiBUaGUgNTA4IGtIeiB0aW1lcnMgYXJlIGlkZWFsIGZvciB1c2UgZm9yIHRoZSB0aW1lciBpbnRlcnJ1cHQsIGFzIHRoZQorICogbW9zdCBjb21tb24gdmFsdWVzIG9mIEhaIGRpdmlkZSA1MDgga0h6IG5pY2VseS4gIFdlIHBpY2sgb25lIG9mIHRoZSAxNgorICogYml0IHRpbWVycyAodGltZXIgMSkgc2luY2Ugd2UgZG9uJ3QgbmVlZCBtb3JlIHRoYW4gMTYgYml0cyBvZiByZWxvYWQKKyAqIHZhbHVlIGFzIGxvbmcgYXMgSFogPj0gOC4KKyAqCisgKiBUaGUgaGlnaGVyIGNsb2NrIHJhdGUgb2YgdGltZXIgNCBtYWtlcyBpdCBhIGJldHRlciBjaG9pY2UgdGhhbiB0aGUKKyAqIG90aGVyIHRpbWVycyBmb3IgdXNlIGluIGdldHRpbWVvZmZzZXQoKSwgd2hpbGUgdGhlIGZhY3QgdGhhdCBpdCBjYW4ndAorICogZ2VuZXJhdGUgaW50ZXJydXB0cyBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IG5vdCBiZWluZyBhYmxlCisgKiB0byB1c2UgdGhpcyB0aW1lciBmb3Igc29tZXRoaW5nIGVsc2UuICBXZSBhbHNvIHVzZSB0aW1lciA0IGZvciBrZWVwaW5nCisgKiB0cmFjayBvZiBsb3N0IGppZmZpZXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9qaWZmeV90aW1lOworCisjZGVmaW5lIFRJTUVSNF9USUNLU19QRVJfSklGRlkJCSgoQ0xPQ0tfVElDS19SQVRFICsgKEhaLzIpKSAvIEhaKQorCitzdGF0aWMgaW50IGVwOTN4eF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCV9fcmF3X3dyaXRlbCgxLCBFUDkzWFhfVElNRVIxX0NMRUFSKTsKKwl3aGlsZSAoX19yYXdfcmVhZGwoRVA5M1hYX1RJTUVSNF9WQUxVRV9MT1cpIC0gbGFzdF9qaWZmeV90aW1lCisJCQkJCQk+PSBUSU1FUjRfVElDS1NfUEVSX0pJRkZZKSB7CisJCWxhc3RfamlmZnlfdGltZSArPSBUSU1FUjRfVElDS1NfUEVSX0pJRkZZOworCQl0aW1lcl90aWNrKHJlZ3MpOworCX0KKworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGVwOTN4eF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gImVwOTN4eCB0aW1lciIsCisJLmZsYWdzCQk9IFNBX0lOVEVSUlVQVCB8IFNBX1RJTUVSLAorCS5oYW5kbGVyCT0gZXA5M3h4X3RpbWVyX2ludGVycnVwdCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlcDkzeHhfdGltZXJfaW5pdCh2b2lkKQoreworCS8qIEVuYWJsZSBwZXJpb2RpYyBIWiB0aW1lci4gICovCisJX19yYXdfd3JpdGVsKDB4NDgsIEVQOTNYWF9USU1FUjFfQ09OVFJPTCk7CisJX19yYXdfd3JpdGVsKCg1MDgwMDAgLyBIWikgLSAxLCBFUDkzWFhfVElNRVIxX0xPQUQpOworCV9fcmF3X3dyaXRlbCgweGM4LCBFUDkzWFhfVElNRVIxX0NPTlRST0wpOworCisJLyogRW5hYmxlIGxvc3QgamlmZnkgdGltZXIuICAqLworCV9fcmF3X3dyaXRlbCgweDEwMCwgRVA5M1hYX1RJTUVSNF9WQUxVRV9ISUdIKTsKKworCXNldHVwX2lycShJUlFfRVA5M1hYX1RJTUVSMSwgJmVwOTN4eF90aW1lcl9pcnEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlcDkzeHhfZ2V0dGltZW9mZnNldCh2b2lkKQoreworCWludCBvZmZzZXQ7CisKKwlvZmZzZXQgPSBfX3Jhd19yZWFkbChFUDkzWFhfVElNRVI0X1ZBTFVFX0xPVykgLSBsYXN0X2ppZmZ5X3RpbWU7CisKKwkvKiBDYWxjdWxhdGUgKDEwMDAwMDAgLyA5ODMwNDApICogb2Zmc2V0LiAgKi8KKwlyZXR1cm4gb2Zmc2V0ICsgKDUzICogb2Zmc2V0IC8gMzA3Mik7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgZXA5M3h4X3RpbWVyID0geworCS5pbml0CQk9IGVwOTN4eF90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gZXA5M3h4X2dldHRpbWVvZmZzZXQsCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGhhbmRsaW5nIGZvciBFUDkzeHgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfZW5hYmxlWzJdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRfdHlwZTFbMl07CitzdGF0aWMgdW5zaWduZWQgY2hhciBncGlvX2ludF90eXBlMlsyXTsKKworc3RhdGljIHZvaWQgdXBkYXRlX2dwaW9fYWJfaW50X3BhcmFtcyhpbnQgcG9ydCkKK3sKKwlpZiAocG9ydCA9PSAwKSB7CisJCV9fcmF3X3dyaXRlYigwLCBFUDkzWFhfR1BJT19BX0lOVF9FTkFCTEUpOworCQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdHlwZTJbMF0sIEVQOTNYWF9HUElPX0FfSU5UX1RZUEUyKTsKKwkJX19yYXdfd3JpdGViKGdwaW9faW50X3R5cGUxWzBdLCBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMSk7CisJCV9fcmF3X3dyaXRlYihncGlvX2ludF9lbmFibGVbMF0sIEVQOTNYWF9HUElPX0FfSU5UX0VOQUJMRSk7CisJfSBlbHNlIGlmIChwb3J0ID09IDEpIHsKKwkJX19yYXdfd3JpdGViKDAsIEVQOTNYWF9HUElPX0JfSU5UX0VOQUJMRSk7CisJCV9fcmF3X3dyaXRlYihncGlvX2ludF90eXBlMlsxXSwgRVA5M1hYX0dQSU9fQl9JTlRfVFlQRTIpOworCQlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfdHlwZTFbMV0sIEVQOTNYWF9HUElPX0JfSU5UX1RZUEUxKTsKKwkJX19yYXdfd3JpdGViKGdwaW9faW50X2VuYWJsZVsxXSwgRVA5M1hYX0dQSU9fQl9JTlRfRU5BQkxFKTsKKwl9Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGF0YV9yZWdpc3Rlcl9vZmZzZXRbOF0gPSB7CisJMHgwMCwgMHgwNCwgMHgwOCwgMHgwYywgMHgyMCwgMHgzMCwgMHgzOCwgMHg0MCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRhdGFfZGlyZWN0aW9uX3JlZ2lzdGVyX29mZnNldFs4XSA9IHsKKwkweDEwLCAweDE0LCAweDE4LCAweDFjLCAweDI0LCAweDM0LCAweDNjLCAweDQ0LAorfTsKKwordm9pZCBncGlvX2xpbmVfY29uZmlnKGludCBsaW5lLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGludCBkYXRhX2RpcmVjdGlvbl9yZWdpc3RlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdjsKKworCWRhdGFfZGlyZWN0aW9uX3JlZ2lzdGVyID0KKwkJRVA5M1hYX0dQSU9fUkVHKGRhdGFfZGlyZWN0aW9uX3JlZ2lzdGVyX29mZnNldFtsaW5lID4+IDNdKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoZGlyZWN0aW9uID09IEdQSU9fT1VUKSB7CisJCWlmIChsaW5lID49IDAgJiYgbGluZSA8IDE2KSB7CisJCQlncGlvX2ludF9lbmFibGVbbGluZSA+PiAzXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7CisJCQl1cGRhdGVfZ3Bpb19hYl9pbnRfcGFyYW1zKGxpbmUgPj4gMyk7CisJCX0KKworCQl2ID0gX19yYXdfcmVhZGIoZGF0YV9kaXJlY3Rpb25fcmVnaXN0ZXIpOworCQl2IHw9IDEgPDwgKGxpbmUgJiA3KTsKKwkJX19yYXdfd3JpdGViKHYsIGRhdGFfZGlyZWN0aW9uX3JlZ2lzdGVyKTsKKwl9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBHUElPX0lOKSB7CisJCXYgPSBfX3Jhd19yZWFkYihkYXRhX2RpcmVjdGlvbl9yZWdpc3Rlcik7CisJCXYgJj0gfigxIDw8IChsaW5lICYgNykpOworCQlfX3Jhd193cml0ZWIodiwgZGF0YV9kaXJlY3Rpb25fcmVnaXN0ZXIpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fbGluZV9jb25maWcpOworCitpbnQgZ3Bpb19saW5lX2dldChpbnQgbGluZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YV9yZWdpc3RlcjsKKworCWRhdGFfcmVnaXN0ZXIgPSBFUDkzWFhfR1BJT19SRUcoZGF0YV9yZWdpc3Rlcl9vZmZzZXRbbGluZSA+PiAzXSk7CisKKwlyZXR1cm4gISEoX19yYXdfcmVhZGIoZGF0YV9yZWdpc3RlcikgJiAoMSA8PCAobGluZSAmIDcpKSk7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9fbGluZV9nZXQpOworCit2b2lkIGdwaW9fbGluZV9zZXQoaW50IGxpbmUsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YV9yZWdpc3RlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdjsKKworCWRhdGFfcmVnaXN0ZXIgPSBFUDkzWFhfR1BJT19SRUcoZGF0YV9yZWdpc3Rlcl9vZmZzZXRbbGluZSA+PiAzXSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHZhbHVlID09IEVQOTNYWF9HUElPX0hJR0gpIHsKKwkJdiA9IF9fcmF3X3JlYWRiKGRhdGFfcmVnaXN0ZXIpOworCQl2IHw9IDEgPDwgKGxpbmUgJiA3KTsKKwkJX19yYXdfd3JpdGViKHYsIGRhdGFfcmVnaXN0ZXIpOworCX0gZWxzZSBpZiAodmFsdWUgPT0gRVA5M1hYX0dQSU9fTE9XKSB7CisJCXYgPSBfX3Jhd19yZWFkYihkYXRhX3JlZ2lzdGVyKTsKKwkJdiAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7CisJCV9fcmF3X3dyaXRlYih2LCBkYXRhX3JlZ2lzdGVyKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChncGlvX2xpbmVfc2V0KTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRVA5M3h4IElSUSBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19hYl9pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLAorCQlzdHJ1Y3QgaXJxZGVzYyAqZGVzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisJaW50IGk7CisKKwlzdGF0dXMgPSBfX3Jhd19yZWFkYihFUDkzWFhfR1BJT19BX0lOVF9TVEFUVVMpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKHN0YXR1cyAmICgxIDw8IGkpKSB7CisJCQlkZXNjID0gaXJxX2Rlc2MgKyBJUlFfRVA5M1hYX0dQSU8oMCkgKyBpOworCQkJZGVzY19oYW5kbGVfaXJxKElSUV9FUDkzWFhfR1BJTygwKSArIGksIGRlc2MsIHJlZ3MpOworCQl9CisJfQorCisJc3RhdHVzID0gX19yYXdfcmVhZGIoRVA5M1hYX0dQSU9fQl9JTlRfU1RBVFVTKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgeworCQkJZGVzYyA9IGlycV9kZXNjICsgSVJRX0VQOTNYWF9HUElPKDgpICsgaTsKKwkJCWRlc2NfaGFuZGxlX2lycShJUlFfRVA5M1hYX0dQSU8oOCkgKyBpLCBkZXNjLCByZWdzKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fYWJfaXJxX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGxpbmUgPSBpcnEgLSBJUlFfRVA5M1hYX0dQSU8oMCk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisKKwlncGlvX2ludF9lbmFibGVbcG9ydF0gJj0gfigxIDw8IChsaW5lICYgNykpOworCXVwZGF0ZV9ncGlvX2FiX2ludF9wYXJhbXMocG9ydCk7CisKKwlpZiAobGluZSA+PiAzKSB7CisJCV9fcmF3X3dyaXRlbCgxIDw8IChsaW5lICYgNyksIEVQOTNYWF9HUElPX0JfSU5UX0FDSyk7CisJfSBlbHNlIHsKKwkJX19yYXdfd3JpdGVsKDEgPDwgKGxpbmUgJiA3KSwgRVA5M1hYX0dQSU9fQV9JTlRfQUNLKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2FiX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGxpbmUgPSBpcnEgLSBJUlFfRVA5M1hYX0dQSU8oMCk7CisJaW50IHBvcnQgPSBsaW5lID4+IDM7CisKKwlncGlvX2ludF9lbmFibGVbcG9ydF0gJj0gfigxIDw8IChsaW5lICYgNykpOworCXVwZGF0ZV9ncGlvX2FiX2ludF9wYXJhbXMocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2FiX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgbGluZSA9IGlycSAtIElSUV9FUDkzWFhfR1BJTygwKTsKKwlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKKworCWdwaW9faW50X2VuYWJsZVtwb3J0XSB8PSAxIDw8IChsaW5lICYgNyk7CisJdXBkYXRlX2dwaW9fYWJfaW50X3BhcmFtcyhwb3J0KTsKK30KKworCisvKgorICogZ3Bpb19pbnRfdHlwZTEgY29udHJvbHMgd2hldGhlciB0aGUgaW50ZXJydXB0IGlzIGxldmVsICgwKSBvcgorICogZWRnZSAoMSkgdHJpZ2dlcmVkLCB3aGlsZSBncGlvX2ludF90eXBlMiBjb250cm9scyB3aGV0aGVyIGl0CisgKiB0cmlnZ2VycyBvbiBsb3cvZmFsbGluZyAoMCkgb3IgaGlnaC9yaXNpbmcgKDEpLgorICovCitzdGF0aWMgaW50IGVwOTN4eF9ncGlvX2FiX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWludCBwb3J0OworCWludCBsaW5lOworCisJbGluZSA9IGlycSAtIElSUV9FUDkzWFhfR1BJTygwKTsKKwlncGlvX2xpbmVfY29uZmlnKGxpbmUsIEdQSU9fSU4pOworCisJcG9ydCA9IGxpbmUgPj4gMzsKKwlsaW5lICY9IDc7CisKKwlpZiAodHlwZSAmIElSUVRfUklTSU5HKSB7CisJCWdwaW9faW50X3R5cGUxW3BvcnRdIHw9IDEgPDwgbGluZTsKKwkJZ3Bpb19pbnRfdHlwZTJbcG9ydF0gfD0gMSA8PCBsaW5lOworCX0gZWxzZSBpZiAodHlwZSAmIElSUVRfRkFMTElORykgeworCQlncGlvX2ludF90eXBlMVtwb3J0XSB8PSAxIDw8IGxpbmU7CisJCWdwaW9faW50X3R5cGUyW3BvcnRdICY9IH4oMSA8PCBsaW5lKTsKKwl9IGVsc2UgaWYgKHR5cGUgJiBJUlFUX0hJR0gpIHsKKwkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gJj0gfigxIDw8IGxpbmUpOworCQlncGlvX2ludF90eXBlMltwb3J0XSB8PSAxIDw8IGxpbmU7CisJfSBlbHNlIGlmICh0eXBlICYgSVJRVF9MT1cpIHsKKwkJZ3Bpb19pbnRfdHlwZTFbcG9ydF0gJj0gfigxIDw8IGxpbmUpOworCQlncGlvX2ludF90eXBlMltwb3J0XSAmPSB+KDEgPDwgbGluZSk7CisJfQorCXVwZGF0ZV9ncGlvX2FiX2ludF9wYXJhbXMocG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFjaGlwIGVwOTN4eF9ncGlvX2FiX2lycV9jaGlwID0geworCS5hY2sJCT0gZXA5M3h4X2dwaW9fYWJfaXJxX21hc2tfYWNrLAorCS5tYXNrCQk9IGVwOTN4eF9ncGlvX2FiX2lycV9tYXNrLAorCS51bm1hc2sJCT0gZXA5M3h4X2dwaW9fYWJfaXJxX3VubWFzaywKKwkuc2V0X3R5cGUJPSBlcDkzeHhfZ3Bpb19hYl9pcnFfdHlwZSwKK307CisKKwordm9pZCBfX2luaXQgZXA5M3h4X2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCXZpY19pbml0KCh2b2lkICopRVA5M1hYX1ZJQzFfQkFTRSwgMCwgRVA5M1hYX1ZJQzFfVkFMSURfSVJRX01BU0spOworCXZpY19pbml0KCh2b2lkICopRVA5M1hYX1ZJQzJfQkFTRSwgMzIsIEVQOTNYWF9WSUMyX1ZBTElEX0lSUV9NQVNLKTsKKworCWZvciAoaXJxID0gSVJRX0VQOTNYWF9HUElPKDApIDsgaXJxIDw9IElSUV9FUDkzWFhfR1BJTygxNSk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZlcDkzeHhfZ3Bpb19hYl9pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VQOTNYWF9HUElPX0FCLCBlcDkzeHhfZ3Bpb19hYl9pcnFfaGFuZGxlcik7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVQOTN4eCBwZXJpcGhlcmFsIGhhbmRsaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgX19pbml0IGVwOTN4eF9pbml0X2RldmljZXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCS8qCisJICogRGlzYWxsb3cgYWNjZXNzIHRvIE1hdmVyaWNrQ3J1bmNoIGluaXRpYWxseS4KKwkgKi8KKwl2ID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHKTsKKwl2ICY9IH5FUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfQ1JVTkNIX0VOQUJMRTsKKwlfX3Jhd193cml0ZWwoMHhhYSwgRVA5M1hYX1NZU0NPTl9TV0xPQ0spOworCV9fcmF3X3dyaXRlbCh2LCBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUcpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ2VzYmM5MzEyLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9nZXNiYzkzMTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMThmY2IxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ2VzYmM5MzEyLmMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCisgKiBHbG9tYXRpb24gR0VTQkMtOTMxMi1zeCBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZXNiYzkzMTJfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJZXA5M3h4X2luaXRfZGV2aWNlcygpOworCXBoeXNtYXBfY29uZmlndXJlKDB4NjAwMDAwMDAsIDB4MDA4MDAwMDAsIDQsIE5VTEwpOworfQorCitNQUNISU5FX1NUQVJUKEdFU0JDOTMxMiwgIkdsb21hdGlvbiBHRVNCQy05MzEyLXN4IikKKwkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4gKi8KKwkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGdlc2JjOTMxMl9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdlNzVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYworICogVGVjaG5vbG9naWMgU3lzdGVtcyBUUzcyeHggU0JDIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB0czcyeHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IFRTNzJYWF9NT0RFTF9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUzcyWFhfTU9ERUxfUEhZU19CQVNFKSwKKwkJLmxlbmd0aAkJPSBUUzcyWFhfTU9ERUxfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBUUzcyWFhfT1BUSU9OU19WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUzcyWFhfT1BUSU9OU19QSFlTX0JBU0UpLAorCQkubGVuZ3RoCQk9IFRTNzJYWF9PUFRJT05TX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gVFM3MlhYX09QVElPTlMyX1ZJUlRfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFRTNzJYWF9PUFRJT05TMl9QSFlTX0JBU0UpLAorCQkubGVuZ3RoCQk9IFRTNzJYWF9PUFRJT05TMl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB0czcyeHhfbmFuZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gVFM3MlhYX05BTkRfREFUQV9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUzcyWFhfTkFORDFfREFUQV9QSFlTX0JBU0UpLAorCQkubGVuZ3RoCQk9IFRTNzJYWF9OQU5EX0RBVEFfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBUUzcyWFhfTkFORF9DT05UUk9MX1ZJUlRfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFRTNzJYWF9OQU5EMV9DT05UUk9MX1BIWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gVFM3MlhYX05BTkRfQ09OVFJPTF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IFRTNzJYWF9OQU5EX0JVU1lfVklSVF9CQVNFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oVFM3MlhYX05BTkQxX0JVU1lfUEhZU19CQVNFKSwKKwkJLmxlbmd0aAkJPSBUUzcyWFhfTkFORF9CVVNZX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHRzNzJ4eF9hbHRlcm5hdGVfbmFuZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gVFM3MlhYX05BTkRfREFUQV9WSVJUX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihUUzcyWFhfTkFORDJfREFUQV9QSFlTX0JBU0UpLAorCQkubGVuZ3RoCQk9IFRTNzJYWF9OQU5EX0RBVEFfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBUUzcyWFhfTkFORF9DT05UUk9MX1ZJUlRfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFRTNzJYWF9OQU5EMl9DT05UUk9MX1BIWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gVFM3MlhYX05BTkRfQ09OVFJPTF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IFRTNzJYWF9OQU5EX0JVU1lfVklSVF9CQVNFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oVFM3MlhYX05BTkQyX0JVU1lfUEhZU19CQVNFKSwKKwkJLmxlbmd0aAkJPSBUUzcyWFhfTkFORF9CVVNZX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdHM3Mnh4X21hcF9pbyh2b2lkKQoreworCWVwOTN4eF9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQodHM3Mnh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUodHM3Mnh4X2lvX2Rlc2MpKTsKKworCS8qCisJICogVGhlIFRTLTcyMDAgaGFzIE5PUiBmbGFzaCwgdGhlIG90aGVyIG1vZGVscyBoYXZlIE5BTkQgZmxhc2guCisJICovCisJaWYgKCFib2FyZF9pc190czcyMDAoKSkgeworCQlpZiAoaXNfdHM5NDIwX2luc3RhbGxlZCgpKSB7CisJCQlpb3RhYmxlX2luaXQodHM3Mnh4X2FsdGVybmF0ZV9uYW5kX2lvX2Rlc2MsCisJCQkJQVJSQVlfU0laRSh0czcyeHhfYWx0ZXJuYXRlX25hbmRfaW9fZGVzYykpOworCQl9IGVsc2UgeworCQkJaW90YWJsZV9pbml0KHRzNzJ4eF9uYW5kX2lvX2Rlc2MsCisJCQkJQVJSQVlfU0laRSh0czcyeHhfbmFuZF9pb19kZXNjKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0czcyeHhfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJZXA5M3h4X2luaXRfZGV2aWNlcygpOworCWlmIChib2FyZF9pc190czcyMDAoKSkKKwkJcGh5c21hcF9jb25maWd1cmUoVFM3MlhYX05PUl9QSFlTX0JBU0UsIDB4MDEwMDAwMDAsIDEsIE5VTEwpOworfQorCitNQUNISU5FX1NUQVJUKFRTNzJYWCwgIlRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzJ4eCBTQkMiKQorCS8qIE1haW50YWluZXI6IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPiAqLworCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLm1hcF9pbwkJPSB0czcyeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gdHM3Mnh4X2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYwppbmRleCBlNzk4ODRlZS4uNWRhY2UyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jCkBAIC0yNTUsMTQgKzI1NSwxMiBAQAogCWlmIChuciB8fCAhZm9vdGJyaWRnZV9jZm5fbW9kZSgpKQogCQlyZXR1cm4gMDsKIAotCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyLCBHRlBfS0VSTkVMKTsKKwlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXMpIHsKIAkJcHJpbnRrKCJvdXQgb2YgbWVtb3J5IGZvciByb290IGJ1cyByZXNvdXJjZXMiKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JbWVtc2V0KHJlcywgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyKTsKLQogCXJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCXJlc1swXS5uYW1lICA9ICJGb290YnJpZGdlIG5vbi1wcmVmZXRjaCI7CiAJcmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX1BSRUZFVENIOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ltcGQxLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYwppbmRleCBhODVkNDcxLi45MmQ3OWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW1wZDEuYwpAQCAtMzU1LDEyICszNTUsMTEgQEAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlc291cmNlLnN0YXJ0LCBTWl80SywgIkxNIHJlZ2lzdGVycyIpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaW1wZDEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW1wZDFfbW9kdWxlKSwgR0ZQX0tFUk5FTCk7CisJaW1wZDEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW1wZDFfbW9kdWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbXBkMSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIHJlbGVhc2VfbG07CiAJfQotCW1lbXNldChpbXBkMSwgMCwgc2l6ZW9mKHN0cnVjdCBpbXBkMV9tb2R1bGUpKTsKIAogCWltcGQxLT5iYXNlID0gaW9yZW1hcChkZXYtPnJlc291cmNlLnN0YXJ0LCBTWl80Syk7CiAJaWYgKCFpbXBkMS0+YmFzZSkgewpAQCAtMzg5LDEyICszODgsMTAgQEAKIAogCQlwY19iYXNlID0gZGV2LT5yZXNvdXJjZS5zdGFydCArIGlkZXYtPm9mZnNldDsKIAotCQlkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFtYmFfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJCWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYW1iYV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkKQogCQkJY29udGludWU7CiAKLQkJbWVtc2V0KGQsIDAsIHNpemVvZihzdHJ1Y3QgYW1iYV9kZXZpY2UpKTsKLQogCQlzbnByaW50ZihkLT5kZXYuYnVzX2lkLCBzaXplb2YoZC0+ZGV2LmJ1c19pZCksCiAJCQkgImxtJXg6JTUuNWx4IiwgZGV2LT5pZCwgaWRldi0+b2Zmc2V0ID4+IDEyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKaW5kZXggZDhkM2MyYS4uNmQ2NWM5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCkBAIC0zMTksMTIgKzMxOSwxMCBAQAogCQlpZiAoKHNjX2RlYyAmICgxNiA8PCBpKSkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCWxtZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxtX2RldmljZSksIEdGUF9LRVJORUwpOworCQlsbWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFsbWRldikKIAkJCWNvbnRpbnVlOwogCi0JCW1lbXNldChsbWRldiwgMCwgc2l6ZW9mKHN0cnVjdCBsbV9kZXZpY2UpKTsKLQogCQlsbWRldi0+cmVzb3VyY2Uuc3RhcnQgPSAweGMwMDAwMDAwICsgMHgxMDAwMDAwMCAqIGk7CiAJCWxtZGV2LT5yZXNvdXJjZS5lbmQgPSBsbWRldi0+cmVzb3VyY2Uuc3RhcnQgKyAweDBmZmZmZmZmOwogCQlsbWRldi0+cmVzb3VyY2UuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxMzEyNDQtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTMxMjQ0LXBjaS5jCmluZGV4IGM2YTk3M2IuLmYzYzY0MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxMzEyNDQtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXEzMTI0NC1wY2kuYwpAQCAtNzQsMTIgKzc0LDEwIEBACiAJaWYobnIgIT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMiwgR0ZQX0tFUk5FTCk7CisJcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOwogCWlmICghcmVzKQogCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7CiAKLQltZW1zZXQocmVzLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIpOwotCiAJcmVzWzBdLnN0YXJ0ID0gSU9QMzIxX1BDSV9MT1dFUl9JT19WQTsKIAlyZXNbMF0uZW5kICAgPSBJT1AzMjFfUENJX1VQUEVSX0lPX1ZBOwogCXJlc1swXS5uYW1lICA9ICJJUTMxMjQ0IFBDSSBJL08gU3BhY2UiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMjEtcGNpLmMKaW5kZXggODAyZjZkMC4uZDk3NThkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzIxLXBjaS5jCkBAIC02OCwxMiArNjgsMTAgQEAKIAlpZihuciAhPSAwKQogCQlyZXR1cm4gMDsKIAotCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyLCBHRlBfS0VSTkVMKTsKKwlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXMpCiAJCXBhbmljKCJQQ0k6IHVuYWJsZSB0byBhbGxvYyByZXNvdXJjZXMiKTsKIAotCW1lbXNldChyZXMsIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMik7Ci0KIAlyZXNbMF0uc3RhcnQgPSBJT1AzMjFfUENJX0xPV0VSX0lPX1ZBOwogCXJlc1swXS5lbmQgICA9IElPUDMyMV9QQ0lfVVBQRVJfSU9fVkE7CiAJcmVzWzBdLm5hbWUgID0gIklRODAzMjEgUENJIEkvTyBTcGFjZSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMxLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMS1wY2kuYwppbmRleCA2NTRlNDUwYS4uNDBkODYxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMS1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMxLXBjaS5jCkBAIC02NCwxMiArNjQsMTAgQEAKIAlpZihuciAhPSAwKQogCQlyZXR1cm4gMDsKIAotCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyLCBHRlBfS0VSTkVMKTsKKwlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXMpCiAJCXBhbmljKCJQQ0k6IHVuYWJsZSB0byBhbGxvYyByZXNvdXJjZXMiKTsKIAotCW1lbXNldChyZXMsIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMik7Ci0KIAlyZXNbMF0uc3RhcnQgPSBJT1AzMzFfUENJX0xPV0VSX0lPX1ZBOwogCXJlc1swXS5lbmQgICA9IElPUDMzMV9QQ0lfVVBQRVJfSU9fVkE7CiAJcmVzWzBdLm5hbWUgID0gIklRODAzMzEgUENJIEkvTyBTcGFjZSI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMyLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMi1wY2kuYwppbmRleCA2NTk1MWZmLi5hZmMwNjc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMyLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzItcGNpLmMKQEAgLTcwLDEyICs3MCwxMCBAQAogCWlmKG5yICE9IDApCiAJCXJldHVybiAwOwogCi0JcmVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOworCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlcykKIAkJcGFuaWMoIlBDSTogdW5hYmxlIHRvIGFsbG9jIHJlc291cmNlcyIpOwogCi0JbWVtc2V0KHJlcywgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiAyKTsKLQogCXJlc1swXS5zdGFydCA9IElPUDMzMV9QQ0lfTE9XRVJfSU9fVkE7CiAJcmVzWzBdLmVuZCAgID0gSU9QMzMxX1BDSV9VUFBFUl9JT19WQTsKIAlyZXNbMF0ubmFtZSAgPSAiSVE4MDMzMiBQQ0kgSS9PIFNwYWNlIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL0tjb25maWcKaW5kZXggZWNiNThkOC4uODZmNTNmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL0tjb25maWcKQEAgLTQzLDEyICs0MywxNyBAQAogCSAgdGhpcyBwbGF0Zm9ybSwgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL0lYUDIwMDA+LgogCiBjb25maWcgQVJDSF9JWERQMjgwMQotCWJvb2wgIlN1cHBvcnQgSW50ZWwgSVhEUDI4MDEiCisJYm9vbCAiU3VwcG9ydCBJbnRlbCBJWERQMjgwMSBhbmQgSVhEUDI4eDUiCiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIEludGVsCi0JICBJWERQMjgwMSByZWZlcmVuY2UgcGxhdGZvcm0uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uCisJICBJWERQMjgwMS8yODA1LzI4NTUgcmVmZXJlbmNlIHBsYXRmb3Jtcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24KIAkgIHRoaXMgcGxhdGZvcm0sIHNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2FybS9JWFAyMDAwPi4KIAorY29uZmlnIE1BQ0hfSVhEUDI4WDUKKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX0lYRFAyODAxCisJZGVmYXVsdCB5CisKIGNvbmZpZyBBUkNIX0lYRFAyWDAxCiAJYm9vbAogCWRlcGVuZHMgb24gQVJDSF9JWERQMjQwMSB8fCBBUkNIX0lYRFAyODAxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvTWFrZWZpbGUKaW5kZXggOTYyMWFlYi4uMWU2MTM5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHAyMDAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCi1vYmoteQkJCTo9IGNvcmUubyBwY2kubyB1ZW5naW5lLm8KK29iai15CQkJOj0gY29yZS5vIHBjaS5vCiBvYmotbQkJCTo9CiBvYmotbgkJCTo9CiBvYmotCQkJOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWl4cDIwMDAvY29yZS5jCmluZGV4IGNmZDViZWYuLjZlOGQ1MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2NvcmUuYwpAQCAtMjg4LDggKzI4OCw2IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaWYgKGRpcmVjdGlvbiA9PSBHUElPX09VVCkgewotCQlpcnFfZGVzY1tsaW5lICsgSVJRX0lYUDIwMDBfR1BJTzBdLnZhbGlkID0gMDsKLQogCQkvKiBpZiBpdCdzIGFuIG91dHB1dCwgaXQgYWluJ3QgYW4gaW50ZXJydXB0IGFueW1vcmUgKi8KIAkJR1BJT19JUlFfZmFsbGluZ19lZGdlICY9IH4oMSA8PCBsaW5lKTsKIAkJR1BJT19JUlFfcmlzaW5nX2VkZ2UgJj0gfigxIDw8IGxpbmUpOwpAQCAtMzUxLDExICszNDksNiBAQAogCQlHUElPX0lSUV9sZXZlbF9oaWdoICY9IH4oMSA8PCBsaW5lKTsKIAl1cGRhdGVfZ3Bpb19pbnRfY3NycygpOwogCi0JLyoKLQkgKiBGaW5hbGx5LCBtYXJrIHRoZSBjb3JyZXNwb25kaW5nIElSUSBhcyB2YWxpZC4KLQkgKi8KLQlpcnFfZGVzY1tpcnFdLnZhbGlkID0gMTsKLQogCXJldHVybiAwOwogfQogCkBAIC01MDYsMTQgKzQ5OSwxMCBAQAogCX0KIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjAwMF9FUlJTVU0sIGl4cDIwMDBfZXJyX2lycV9oYW5kbGVyKTsKIAotCS8qCi0JICogR1BJTyBJUlFzIGFyZSBpbnZhbGlkIHVudGlsIHNvbWVvbmUgc2V0cyB0aGUgaW50ZXJydXB0IG1vZGUKLQkgKiBieSBjYWxsaW5nIHNldF9pcnFfdHlwZSgpLgotCSAqLwogCWZvciAoaXJxID0gSVJRX0lYUDIwMDBfR1BJTzA7IGlycSA8PSBJUlFfSVhQMjAwMF9HUElPNzsgaXJxKyspIHsKIAkJc2V0X2lycV9jaGlwKGlycSwgJml4cDIwMDBfR1BJT19pcnFfY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCAwKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOwogCX0KIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfSVhQMjAwMF9HUElPLCBpeHAyMDAwX0dQSU9faXJxX2hhbmRsZXIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaXhkcDJ4MDEuYyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCmluZGV4IDE1MDUxOWYuLmY5ZDQ5NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9peGRwMngwMS5jCkBAIC0yODQsNyArMjg0LDcgQEAKIHsKIAlzeXMtPm1lbV9vZmZzZXQgPSAweGUwMDAwMDAwOwogCi0JaWYgKG1hY2hpbmVfaXNfaXhkcDI4MDEoKSkKKwlpZiAobWFjaGluZV9pc19peGRwMjgwMSgpIHx8IG1hY2hpbmVfaXNfaXhkcDI4eDUoKSkKIAkJc3lzLT5tZW1fb2Zmc2V0IC09ICgoKklYUDIwMDBfUENJX0FERFJfRVhUICYgMHhFMDAwKSA8PCAxNik7CiAKIAlyZXR1cm4gaXhwMjAwMF9wY2lfc2V0dXAobnIsIHN5cyk7CkBAIC0zMDAsNyArMzAwLDggQEAKIAogaW50IF9faW5pdCBpeGRwMngwMV9wY2lfaW5pdCh2b2lkKQogewotCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAxKCkgfHwgbWFjaGluZV9pc19peGRwMjgwMSgpKQorCWlmIChtYWNoaW5lX2lzX2l4ZHAyNDAxKCkgfHwgbWFjaGluZV9pc19peGRwMjgwMSgpIHx8XAorCQltYWNoaW5lX2lzX2l4ZHAyOHg1KCkpCiAJCXBjaV9jb21tb25faW5pdCgmaXhkcDJ4MDFfcGNpKTsKIAogCXJldHVybiAwOwpAQCAtNDAwLDYgKzQwMSwyMSBAQAogCS50aW1lcgkJPSAmaXhkcDJ4MDFfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IGl4ZHAyeDAxX2luaXRfbWFjaGluZSwKIE1BQ0hJTkVfRU5ECisKKy8qCisgKiBJWERQMjh4NSBpcyBiYXNpY2FsbHkgYW4gSVhEUDI4MDEgd2l0aCBhIGRpZmZlcmVudCBDUFUgYnV0IEludGVsCisgKiBjaGFuZ2VkIHRoZSBtYWNoaW5lIElEIGluIHRoZSBib290bG9hZGVyCisgKi8KK01BQ0hJTkVfU1RBUlQoSVhEUDI4WDUsICJJbnRlbCBJWERQMjgwNS8yODU1IERldmVsb3BtZW50IFBsYXRmb3JtIikKKwkvKiBNYWludGFpbmVyOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuICovCisJLnBoeXNfaW8JPSBJWFAyMDAwX1VBUlRfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoSVhQMjAwMF9VQVJUX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLm1hcF9pbwkJPSBpeGRwMngwMV9tYXBfaW8sCisJLmluaXRfaXJxCT0gaXhkcDJ4MDFfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZpeGRwMngwMV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gaXhkcDJ4MDFfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCmluZGV4IGRhYWRjNzguLjViZjUwYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwpAQCAtOCwxMSArOCw5IEBACiAKIGNvbW1lbnQgIklYUDR4eCBQbGF0Zm9ybXMiCiAKLSMgVGhpcyBlbnRyeSBpcyBwbGFjZWQgb24gdG9wIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUKLSMgYmVlbiBzaG93biBhcyBhIHN1Ym1lbnUuCiBjb25maWcgTUFDSF9OU0xVMgogCWJvb2wKLQlwcm9tcHQgIk5TTFUyIiBpZiAhKE1BQ0hfSVhEUDQ2NSB8fCBNQUNIX0lYRFBHNDI1IHx8IEFSQ0hfSVhEUDQyNSB8fCBBUkNIX0FESV9DT1lPVEUgfHwgQVJDSF9BVklMQSB8fCBBUkNIX0lYQ0RQMTEwMCB8fCBBUkNIX1BSUE1DMTEwMCB8fCBNQUNIX0dUV1g1NzE1KQorCXByb21wdCAiTGlua3N5cyBOU0xVMiIKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCBMaW5rc3lzJ3MKIAkgIE5TTFUyIE5BUyBkZXZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgcGxhdGZvcm0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKaW5kZXggNmUzNDYyZS4uMmQ0MGZlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAJaWYgKG5yID49IDEpCiAJCXJldHVybiAwOwogCi0JcmVzID0ga21hbGxvYyhzaXplb2YoKnJlcykgKiAyLCBHRlBfS0VSTkVMKTsKKwlyZXMgPSBremFsbG9jKHNpemVvZigqcmVzKSAqIDIsIEdGUF9LRVJORUwpOwogCWlmIChyZXMgPT0gTlVMTCkgewogCQkvKiAKIAkJICogSWYgd2UncmUgb3V0IG9mIG1lbW9yeSB0aGlzIGVhcmx5LCBzb21ldGhpbmcgaXMgd3JvbmcsCkBAIC00NzEsNyArNDcxLDYgQEAKIAkJICovCiAJCXBhbmljKCJQQ0k6IHVuYWJsZSB0byBhbGxvY2F0ZSByZXNvdXJjZXM/XG4iKTsKIAl9Ci0JbWVtc2V0KHJlcywgMCwgc2l6ZW9mKCpyZXMpICogMik7CiAKIAlsb2NhbF93cml0ZV9jb25maWcoUENJX0NPTU1BTkQsIDIsIFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggNGJkYzlkNC4uYTA4ODhlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTkxLDcgKzkxLDcgQEAKIC8qCiAgKiBJUlEgLT4gR1BJTyBtYXBwaW5nIHRhYmxlCiAgKi8KLXN0YXRpYyBpbnQgaXJxMmdwaW9bMzJdID0geworc3RhdGljIGNoYXIgaXJxMmdwaW9bMzJdID0gewogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsICAwLCAgMSwKIAktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAJLTEsIC0xLCAtMSwgIDIsICAzLCAgNCwgIDUsICA2LApAQCAtMTExLDI0ICsxMTEsMzAgQEAKIAlpZiAobGluZSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHR5cGUgJiBJUlFUX0JPVEhFREdFKSB7CisJc3dpdGNoICh0eXBlKXsKKwljYXNlIElSUVRfQk9USEVER0U6CiAJCWludF9zdHlsZSA9IElYUDRYWF9HUElPX1NUWUxFX1RSQU5TSVRJT05BTDsKIAkJaXJxX3R5cGUgPSBJWFA0WFhfSVJRX0VER0U7Ci0JfSBlbHNlICBpZiAodHlwZSAmIElSUVRfUklTSU5HKSB7CisJCWJyZWFrOworCWNhc2UgSVJRVF9SSVNJTkc6CiAJCWludF9zdHlsZSA9IElYUDRYWF9HUElPX1NUWUxFX1JJU0lOR19FREdFOwogCQlpcnFfdHlwZSA9IElYUDRYWF9JUlFfRURHRTsKLQl9IGVsc2UgaWYgKHR5cGUgJiBJUlFUX0ZBTExJTkcpIHsKKwkJYnJlYWs7CisJY2FzZSBJUlFUX0ZBTExJTkc6CiAJCWludF9zdHlsZSA9IElYUDRYWF9HUElPX1NUWUxFX0ZBTExJTkdfRURHRTsKIAkJaXJxX3R5cGUgPSBJWFA0WFhfSVJRX0VER0U7Ci0JfSBlbHNlIGlmICh0eXBlICYgSVJRVF9ISUdIKSB7CisJCWJyZWFrOworCWNhc2UgSVJRVF9ISUdIOgogCQlpbnRfc3R5bGUgPSBJWFA0WFhfR1BJT19TVFlMRV9BQ1RJVkVfSElHSDsKIAkJaXJxX3R5cGUgPSBJWFA0WFhfSVJRX0xFVkVMOwotCX0gZWxzZSBpZiAodHlwZSAmIElSUVRfTE9XKSB7CisJCWJyZWFrOworCWNhc2UgSVJRVF9MT1c6CiAJCWludF9zdHlsZSA9IElYUDRYWF9HUElPX1NUWUxFX0FDVElWRV9MT1c7CiAJCWlycV90eXBlID0gSVhQNFhYX0lSUV9MRVZFTDsKLQl9IGVsc2UKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KKwl9CiAJaXhwNHh4X2NvbmZpZ19pcnEoaXJxLCBpcnFfdHlwZSk7CiAKIAlpZiAobGluZSA+PSA4KSB7CS8qIHBpbnMgOC0xNSAqLwpAQCAtMTQ3LDYgKzE1Myw5IEBACiAJLyogU2V0IHRoZSBuZXcgc3R5bGUgKi8KIAkqaW50X3JlZyB8PSAoaW50X3N0eWxlIDw8IChsaW5lICogSVhQNFhYX0dQSU9fU1RZTEVfU0laRSkpOwogCisJLyogQ29uZmlndXJlIHRoZSBsaW5lIGFzIGFuIGlucHV0ICovCisJZ3Bpb19saW5lX2NvbmZpZyhsaW5lLCBJWFA0WFhfR1BJT19JTik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1wb3dlci5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1wb3dlci5jCmluZGV4IDJiZWM2OWIuLjk5ZDMzM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtcG93ZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXBvd2VyLmMKQEAgLTU2LDYgKzU2LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG5hczEwMGRfcG93ZXJfZXhpdCh2b2lkKQogeworCWlmICghKG1hY2hpbmVfaXNfbmFzMTAwZCgpKSkKKwkJcmV0dXJuOworCiAJZnJlZV9pcnEoTkFTMTAwRF9SQl9JUlEsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uYXMxMDBkLXNldHVwLmMKaW5kZXggODU2ZDU2Zi4uYTNiNGM2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbmFzMTAwZC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L25hczEwMGQtc2V0dXAuYwpAQCAtMTEzLDYgKzExMyw5IEBACiB7CiAJaXhwNHh4X3N5c19pbml0KCk7CiAKKwkvKiBncGlvIDE0IGFuZCAxNSBhcmUgX25vdF8gY2xvY2tzICovCisJKklYUDRYWF9HUElPX0dQQ0xLUiA9IDA7CisKIAluYXMxMDBkX2ZsYXNoX3Jlc291cmNlLnN0YXJ0ID0gSVhQNFhYX0VYUF9CVVNfQkFTRSgwKTsKIAluYXMxMDBkX2ZsYXNoX3Jlc291cmNlLmVuZCA9CiAJCUlYUDRYWF9FWFBfQlVTX0JBU0UoMCkgKyBpeHA0eHhfZXhwX2J1c19zaXplIC0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBvd2VyLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCmluZGV4IGIwYWQ5ZTkuLmQ4MGMzNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBvd2VyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcG93ZXIuYwpAQCAtNzcsNiArNzcsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbnNsdTJfcG93ZXJfZXhpdCh2b2lkKQogeworCWlmICghKG1hY2hpbmVfaXNfbnNsdTIoKSkpCisJCXJldHVybjsKKwogCWZyZWVfaXJxKE5TTFUyX1JCX0lSUSwgTlVMTCk7CiAJZnJlZV9pcnEoTlNMVTJfUEJfSVJRLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1zZXR1cC5jCmluZGV4IGYyNjBhOWQuLjU1NDExZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpAQCAtNTAsNiArNTAsMTIgQEAKIAkubnVtX3Jlc291cmNlcwkJPSAwLAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnNsdTJfYmVlcGVyID0geworCS5uYW1lCQkJPSAiaXhwNHh4LWJlZXBlciIsCisJLmlkCQkJPSBOU0xVMl9HUElPX0JVWlosCisJLm51bV9yZXNvdXJjZXMJCT0gMCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnNsdTJfdWFydF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydAkJPSBJWFA0WFhfVUFSVDFfQkFTRV9QSFlTLApAQCAtOTcsNiArMTAzLDcgQEAKIAkmbnNsdTJfaTJjX2NvbnRyb2xsZXIsCiAJJm5zbHUyX2ZsYXNoLAogCSZuc2x1Ml91YXJ0LAorCSZuc2x1Ml9iZWVwZXIsCiB9OwogCiBzdGF0aWMgdm9pZCBuc2x1Ml9wb3dlcl9vZmYodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jb21tb24uaAppbmRleCA1NzhhNTI0Li5lYThkZTdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NvbW1vbi5oCkBAIC0xMiw1ICsxMiw2IEBACiAKIGV4dGVybiB2b2lkIGxoN2E0MDBfaW5pdF9pcnEgKHZvaWQpOwogZXh0ZXJuIHZvaWQgbGg3YTQwNF9pbml0X2lycSAodm9pZCk7CitleHRlcm4gdm9pZCBsaDdhNDB4X2luaXRfYm9hcmRfaXJxICh2b2lkKTsKIAogI2RlZmluZSBJUlFfRElTUEFUQ0goaXJxKSBkZXNjX2hhbmRsZV9pcnEoKGlycSksKGlycV9kZXNjICsgaXJxKSwgcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEta2V2N2E0MDAuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEta2V2N2E0MDAuYwppbmRleCA2OTFiYjA5Li44NTM1NzY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWtldjdhNDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1rZXY3YTQwMC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnFzLmg+CiAKKyNpbmNsdWRlICJjb21tb24uaCIKIAogICAvKiBLRVY3YTQwMCBDUExEIElSUSBoYW5kbGluZyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDAuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwMC5jCmluZGV4IGYzMzRkODEuLmY5ZmRlZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwMC5jCkBAIC0xNiw5ICsxNiw5IEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KIAorI2luY2x1ZGUgImNvbW1vbi5oIgogCiAgIC8qIENQVSBJUlEgaGFuZGxpbmcgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDA0LmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYwppbmRleCAxMjJmYWRhLi5lOTAyZTNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYwpAQCAtMTYsOSArMTYsMTAgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgogCisjaW5jbHVkZSAiY29tbW9uLmgiCisKICNkZWZpbmUgVVNFX1BSSU9SSVRJRVMKIAogLyogU2VlIERvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL1ZlY3RvcmVkSW50ZXJydXB0Q29udHJvbGxlciBmb3IgbW9yZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1scGQ3YTQweC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1scGQ3YTQweC5jCmluZGV4IDYyNjJkNDQuLmRjYjRlMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbHBkN2E0MHguYworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxwZDdhNDB4LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAKKyNpbmNsdWRlICJjb21tb24uaCIKIAogc3RhdGljIHZvaWQgbGg3YTQweF9hY2tfY3BsZF9pcnEgKHUzMiBpcnEpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IDMyNTI2YTAuLjM4MjY0NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0IChtdXN0IGJlIGxpbmtlZCBiZWZvcmUgYm9hcmQgc3BlY2lmaWMgc3VwcG9ydCkKLW9iai15ICs9IGdlbmVyaWMubyBpcnEubyBkbWEubyB0aW1lLm8KK29iai15ICs9IGNsb2NrLm8gZ2VuZXJpYy5vIGlycS5vIGRtYS5vIHRpbWUubwogb2JqLSQoQ09ORklHX1BYQTI1eCkgKz0gcHhhMjV4Lm8KIG9iai0kKENPTkZJR19QWEEyN3gpICs9IHB4YTI3eC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmN2M5MGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworc3RydWN0IGNsayB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXVuc2lnbmVkIGxvbmcJCXJhdGU7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWNvbnN0IGNoYXIJCSpuYW1lOworCXVuc2lnbmVkIGludAkJZW5hYmxlZDsKKwl2b2lkCQkJKCplbmFibGUpKHZvaWQpOworCXZvaWQJCQkoKmRpc2FibGUpKHZvaWQpOworfTsKKworc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOworc3RhdGljIERFQ0xBUkVfTVVURVgoY2xvY2tzX3NlbSk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXN0cnVjdCBjbGsgKnAsICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOworCisJZG93bigmY2xvY2tzX3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7CisJCWlmIChzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7CisJCQljbGsgPSBwOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXAoJmNsb2Nrc19zZW0pOworCisJcmV0dXJuIGNsazsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7CisJbW9kdWxlX3B1dChjbGstPm93bmVyKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3B1dCk7CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJaWYgKGNsay0+ZW5hYmxlZCsrID09IDApCisJCWNsay0+ZW5hYmxlKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OKGNsay0+ZW5hYmxlZCA9PSAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWlmICgtLWNsay0+ZW5hYmxlZCA9PSAwKQorCQljbGstPmRpc2FibGUoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCisKK3N0YXRpYyB2b2lkIGNsa19ncGlvMjdfZW5hYmxlKHZvaWQpCit7CisJcHhhX2dwaW9fbW9kZShHUElPMTFfM182TUh6X01EKTsKK30KKworc3RhdGljIHZvaWQgY2xrX2dwaW8yN19kaXNhYmxlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19ncGlvMjcgPSB7CisJLm5hbWUJCT0gIkdQSU8yN19DTEsiLAorCS5yYXRlCQk9IDM2ODY0MDAsCisJLmVuYWJsZQkJPSBjbGtfZ3BpbzI3X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGNsa19ncGlvMjdfZGlzYWJsZSwKK307CisKK2ludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQoreworCWRvd24oJmNsb2Nrc19zZW0pOworCWxpc3RfYWRkKCZjbGstPm5vZGUsICZjbG9ja3MpOworCXVwKCZjbG9ja3Nfc2VtKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JlZ2lzdGVyKTsKKwordm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCit7CisJZG93bigmY2xvY2tzX3NlbSk7CisJbGlzdF9kZWwoJmNsay0+bm9kZSk7CisJdXAoJmNsb2Nrc19zZW0pOworfQorRVhQT1JUX1NZTUJPTChjbGtfdW5yZWdpc3Rlcik7CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19pbml0KHZvaWQpCit7CisJY2xrX3JlZ2lzdGVyKCZjbGtfZ3BpbzI3KTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKaW5kZXggN2ZmZDJkZS4uNjg5MjNiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC91ZGMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbWFpbnN0b25lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLW1haW5zdG9uZS5jCmluZGV4IGJiZDNmODcuLmMwNmQzZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYwpAQCAtODUsNyArODUsNyBAQAogCQlicmVhazsKIAogCWNhc2UgbGVkX2dyZWVuX29uOgotCQlod19sZWRfc3RhdGUgfD0gRDIxOzsKKwkJaHdfbGVkX3N0YXRlIHw9IEQyMTsKIAkJYnJlYWs7CiAKIAljYXNlIGxlZF9ncmVlbl9vZmY6CkBAIC05Myw3ICs5Myw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBsZWRfYW1iZXJfb246Ci0JCWh3X2xlZF9zdGF0ZSB8PSBEMjI7OworCQlod19sZWRfc3RhdGUgfD0gRDIyOwogCQlicmVhazsKIAogCWNhc2UgbGVkX2FtYmVyX29mZjoKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgbGVkX3JlZF9vbjoKLQkJaHdfbGVkX3N0YXRlIHw9IEQyMzs7CisJCWh3X2xlZF9zdGF0ZSB8PSBEMjM7CiAJCWJyZWFrOwogCiAJY2FzZSBsZWRfcmVkX29mZjoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKaW5kZXggZDViZGE2MC4uOTgzNTZmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKQEAgLTE1NywxNCArMTU3LDE0IEBACiAJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBpbnQgbXN0X2F1ZGlvX3N0YXJ0dXAoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCB2b2lkICpwcml2KQorc3RhdGljIGludCBtc3RfYXVkaW9fc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgdm9pZCAqcHJpdikKIHsKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKIAkJTVNUX01TQ1dSMiAmPSB+TVNUX01TQ1dSMl9BQzk3X1NQS1JPRkY7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1zdF9hdWRpb19zaHV0ZG93bihzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0sIHZvaWQgKnByaXYpCitzdGF0aWMgdm9pZCBtc3RfYXVkaW9fc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIHZvaWQgKnByaXYpCiB7CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCU1TVF9NU0NXUjIgfD0gTVNUX01TQ1dSMl9BQzk3X1NQS1JPRkY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IDkxMWU2ZmYuLmI0NTU2MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3VkYy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lyZGEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IGMwOTRkOTkuLjMwZWMzMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcmRhLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvb2hjaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IGQxNjgyODZlLi42NmVjNzE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3Rvc2EuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCA0MzAzZDk4Li5kMTMyNzBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMjAyLDExICsyMDIsNiBAQAogLyoKICAqIENMQ0Qgc3VwcG9ydC4KICAqLwotI2RlZmluZSBTWVNfQ0xDRF9NT0RFX01BU0sJKDMgPDwgMCkKLSNkZWZpbmUgU1lTX0NMQ0RfTU9ERV84ODgJKDAgPDwgMCkKLSNkZWZpbmUgU1lTX0NMQ0RfTU9ERV81NTUxCSgxIDw8IDApCi0jZGVmaW5lIFNZU19DTENEX01PREVfNTY1X1JMU0IJKDIgPDwgMCkKLSNkZWZpbmUgU1lTX0NMQ0RfTU9ERV81NjVfQkxTQgkoMyA8PCAwKQogI2RlZmluZSBTWVNfQ0xDRF9OTENESU9PTgkoMSA8PCAyKQogI2RlZmluZSBTWVNfQ0xDRF9WRERQT1NTV0lUQ0gJKDEgPDwgMykKICNkZWZpbmUgU1lTX0NMQ0RfUFdSM1Y1U1dJVENICSgxIDw8IDQpCkBAIC0zNjAsMjkgKzM1NSwxMCBAQAogCXZvaWQgX19pb21lbSAqc3lzX2NsY2QgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTX0NMQ0RfT0ZGU0VUOwogCXUzMiB2YWw7CiAKKwkvKgorCSAqIEVuYWJsZSB0aGUgUFNVcworCSAqLwogCXZhbCA9IHJlYWRsKHN5c19jbGNkKTsKLQl2YWwgJj0gflNZU19DTENEX01PREVfTUFTSzsKLQotCXN3aXRjaCAoZmItPmZiLnZhci5ncmVlbi5sZW5ndGgpIHsKLQljYXNlIDU6Ci0JCXZhbCB8PSBTWVNfQ0xDRF9NT0RFXzU1NTE7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJdmFsIHw9IFNZU19DTENEX01PREVfNTY1X1JMU0I7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJdmFsIHw9IFNZU19DTENEX01PREVfODg4OwotCQlicmVhazsKLQl9Ci0KLQkvKgotCSAqIFNldCB0aGUgTVVYCi0JICovCi0Jd3JpdGVsKHZhbCwgc3lzX2NsY2QpOwotCi0JLyoKLQkgKiBBbmQgbm93IGVuYWJsZSB0aGUgUFNVcwotCSAqLwogCXZhbCB8PSBTWVNfQ0xDRF9OTENESU9PTiB8IFNZU19DTENEX1BXUjNWNVNXSVRDSDsKIAl3cml0ZWwodmFsLCBzeXNfY2xjZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IDBiOWQ3Y2EuLmVkMDdjNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC05LDYgKzksMTMgQEAKIAkgIFNheSBZIGdlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzIEFOVUJJUwogCSAgZGV2ZWxvcG1lbnQgc3lzdGVtCiAKK2NvbmZpZyBNQUNIX09TSVJJUworCWJvb2wgIlNpbXRlYyBJTTI0NDBEMjAgKE9TSVJJUykgbW9kdWxlIgorCXNlbGVjdCBDUFVfUzNDMjQ0MAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KKwkgIGtub3duIGFzIHRoZSBPc2lyaXMuCisKIGNvbmZpZyBBUkNIX0JBU1QKIAlib29sICJTaW10ZWMgRWxlY3Ryb25pY3MgQkFTVCAoRUIyNDEwSVRYKSIKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQppbmRleCAxMjE3YmYwLi4xYjNiNDc2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCkBAIC0zOCw2ICszOCw3IEBACiAjIG1hY2hpbmUgc3BlY2lmaWMgc3VwcG9ydAogCiBvYmotJChDT05GSUdfTUFDSF9BTlVCSVMpCSs9IG1hY2gtYW51YmlzLm8KK29iai0kKENPTkZJR19NQUNIX09TSVJJUykJKz0gbWFjaC1vc2lyaXMubwogb2JqLSQoQ09ORklHX0FSQ0hfQkFTVCkJCSs9IG1hY2gtYmFzdC5vIHVzYi1zaW10ZWMubwogb2JqLSQoQ09ORklHX0FSQ0hfSDE5NDApCSs9IG1hY2gtaDE5NDAubwogb2JqLSQoQ09ORklHX01BQ0hfTjMwKQkJKz0gbWFjaC1uMzAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwppbmRleCAwODQ4OWVmLi5mZWMwMmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYwpAQCAtMzgsMTIgKzM4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjcHUuaCIKQEAgLTUxLDcgKzUzLDggQEAKIC8qIGNsb2NrIGluZm9ybWF0aW9uICovCiAKIHN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKLXN0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tzX211dGV4KTsKKworREVGSU5FX01VVEVYKGNsb2Nrc19tdXRleCk7CiAKIC8qIG9sZCBmdW5jdGlvbnMgKi8KIApAQCAtMTc4LDEyICsxODEsMjQgQEAKIAogbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKKwlpZiAoIUlTX0VSUihjbGspICYmIGNsay0+cm91bmRfcmF0ZSkKKwkJcmV0dXJuIChjbGstPnJvdW5kX3JhdGUpKGNsaywgcmF0ZSk7CisKIAlyZXR1cm4gcmF0ZTsKIH0KIAogaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlpbnQgcmV0OworCisJaWYgKElTX0VSUihjbGspKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisJcmV0ID0gKGNsay0+c2V0X3JhdGUpKGNsaywgcmF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQpAQCAtMTkxLDYgKzIwNiwyMyBAQAogCXJldHVybiBjbGstPnBhcmVudDsKIH0KIAoraW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCByZXQgPSAwOworCisJaWYgKElTX0VSUihjbGspKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisKKwlpZiAoY2xrLT5zZXRfcGFyZW50KQorCQlyZXQgPSAoY2xrLT5zZXRfcGFyZW50KShjbGssIHBhcmVudCk7CisKKwltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBFWFBPUlRfU1lNQk9MKGNsa19nZXQpOwogRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKIEVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CkBAIC0xOTksNiArMjMxLDI5IEBACiBFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKIEVYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKIEVYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOworRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CisKKy8qIGJhc2UgY2xvY2sgZW5hYmxlICovCisKK3N0YXRpYyBpbnQgczNjMjR4eF91cGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBjbGtzbG93ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtTTE9XKTsKKwl1bnNpZ25lZCBsb25nIG9yaWcgPSBjbGtzbG93OworCisJaWYgKGVuYWJsZSkKKwkJY2xrc2xvdyAmPSB+UzNDMjQxMF9DTEtTTE9XX1VDTEtfT0ZGOworCWVsc2UKKwkJY2xrc2xvdyB8PSBTM0MyNDEwX0NMS1NMT1dfVUNMS19PRkY7CisKKwlfX3Jhd193cml0ZWwoY2xrc2xvdywgUzNDMjQxMF9DTEtTTE9XKTsKKworCS8qIGlmIHdlIHN0YXJ0ZWQgdGhlIFVQTEwsIHRoZW4gYWxsb3cgdG8gc2V0dGxlICovCisKKwlpZiAoZW5hYmxlICYmICEob3JpZyAmIFMzQzI0MTBfQ0xLU0xPV19VQ0xLX09GRikpCisJCXVkZWxheSgyMDApOworCisJcmV0dXJuIDA7Cit9CiAKIC8qIGJhc2UgY2xvY2tzICovCiAKQEAgLTIxMCw2ICsyNjUsMTQgQEAKIAkuY3RybGJpdAk9IDAsCiB9OwogCitzdGF0aWMgc3RydWN0IGNsayBjbGtfdXBsbCA9IHsKKwkubmFtZQkJPSAidXBsbCIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gTlVMTCwKKwkuZW5hYmxlCQk9IHMzYzI0eHhfdXBsbF9lbmFibGUsCisJLmN0cmxiaXQJPSAwLAorfTsKKwogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2YgPSB7CiAJLm5hbWUJCT0gImZjbGsiLAogCS5pZAkJPSAtMSwKQEAgLTIzNCwyNiArMjk3LDEyNCBAQAogCS5jdHJsYml0CT0gMCwKIH07CiAKK3N0cnVjdCBjbGsgY2xrX3VzYl9idXMgPSB7CisJLm5hbWUJCT0gInVzYi1idXMiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gJmNsa191cGxsLAorfTsKKwogLyogY2xvY2tzIHRoYXQgY291bGQgYmUgcmVnaXN0ZXJlZCBieSBleHRlcm5hbCBjb2RlICovCiAKK3N0YXRpYyBpbnQgczNjMjR4eF9kY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBkY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9EQ0xLQ09OKTsKKworCWlmIChlbmFibGUpCisJCWRjbGtjb24gfD0gY2xrLT5jdHJsYml0OworCWVsc2UKKwkJZGNsa2NvbiAmPSB+Y2xrLT5jdHJsYml0OworCisJX19yYXdfd3JpdGVsKGRjbGtjb24sIFMzQzI0MTBfRENMS0NPTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2MyNHh4X2RjbGtfc2V0cGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXVuc2lnbmVkIGxvbmcgZGNsa2NvbjsKKwl1bnNpZ25lZCBpbnQgdWNsazsKKworCWlmIChwYXJlbnQgPT0gJmNsa191cGxsKQorCQl1Y2xrID0gMTsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19wKQorCQl1Y2xrID0gMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisKKwlkY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9EQ0xLQ09OKTsKKworCWlmIChjbGstPmN0cmxiaXQgPT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4pIHsKKwkJaWYgKHVjbGspCisJCQlkY2xrY29uIHw9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMF9VQ0xLOworCQllbHNlCisJCQlkY2xrY29uICY9IH5TM0MyNDEwX0RDTEtDT05fRENMSzBfVUNMSzsKKwl9IGVsc2UgeworCQlpZiAodWNsaykKKwkJCWRjbGtjb24gfD0gUzNDMjQxMF9EQ0xLQ09OX0RDTEsxX1VDTEs7CisJCWVsc2UKKwkJCWRjbGtjb24gJj0gflMzQzI0MTBfRENMS0NPTl9EQ0xLMV9VQ0xLOworCX0KKworCV9fcmF3X3dyaXRlbChkY2xrY29uLCBTM0MyNDEwX0RDTEtDT04pOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXVuc2lnbmVkIGxvbmcgc291cmNlOworCisJLyogY2FsY3VsYXRlIHRoZSBNSVNDQ1Igc2V0dGluZyBmb3IgdGhlIGNsb2NrICovCisKKwlpZiAocGFyZW50ID09ICZjbGtfeHRhbCkKKwkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9NUExMOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX3VwbGwpCisJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfVVBMTDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19mKQorCQlzb3VyY2UgPSBTM0MyNDEwX01JU0NDUl9DTEswX0ZDTEs7CisJZWxzZSBpZiAocGFyZW50ID09ICZjbGtfcCkKKwkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9QQ0xLOworCWVsc2UgaWYgKGNsayA9PSAmczNjMjR4eF9jbGtvdXQwICYmIHBhcmVudCA9PSAmczNjMjR4eF9kY2xrMCkKKwkJc291cmNlID0gUzNDMjQxMF9NSVNDQ1JfQ0xLMF9EQ0xLMDsKKwllbHNlIGlmIChjbGsgPT0gJnMzYzI0eHhfY2xrb3V0MSAmJiBwYXJlbnQgPT0gJnMzYzI0eHhfZGNsazEpCisJCXNvdXJjZSA9IFMzQzI0MTBfTUlTQ0NSX0NMSzBfRENMSzA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbGsgPT0gJnMzYzI0eHhfZGNsazApCisJCW1hc2sgPSBTM0MyNDEwX01JU0NDUl9DTEswX01BU0s7CisJZWxzZSB7CisJCXNvdXJjZSA8PD0gNDsKKwkJbWFzayA9IFMzQzI0MTBfTUlTQ0NSX0NMSzFfTUFTSzsKKwl9CisKKwlzM2MyNDEwX21vZGlmeV9taXNjY3IobWFzaywgc291cmNlKTsKKwlyZXR1cm4gMDsKK30KKworLyogZXh0ZXJuYWwgY2xvY2sgZGVmaW5pdGlvbnMgKi8KKwogc3RydWN0IGNsayBzM2MyNHh4X2RjbGswID0gewogCS5uYW1lCQk9ICJkY2xrMCIsCiAJLmlkCQk9IC0xLAorCS5jdHJsYml0CT0gUzNDMjQxMF9EQ0xLQ09OX0RDTEswRU4sCisJLmVuYWJsZQkgICAgICAgID0gczNjMjR4eF9kY2xrX2VuYWJsZSwKKwkuc2V0X3BhcmVudAk9IHMzYzI0eHhfZGNsa19zZXRwYXJlbnQsCiB9OwogCiBzdHJ1Y3QgY2xrIHMzYzI0eHhfZGNsazEgPSB7CiAJLm5hbWUJCT0gImRjbGsxIiwKIAkuaWQJCT0gLTEsCisJLmN0cmxiaXQJPSBTM0MyNDEwX0RDTEtDT05fRENMSzBFTiwKKwkuZW5hYmxlCQk9IHMzYzI0eHhfZGNsa19lbmFibGUsCisJLnNldF9wYXJlbnQJPSBzM2MyNHh4X2RjbGtfc2V0cGFyZW50LAogfTsKIAogc3RydWN0IGNsayBzM2MyNHh4X2Nsa291dDAgPSB7CiAJLm5hbWUJCT0gImNsa291dDAiLAogCS5pZAkJPSAtMSwKKwkuc2V0X3BhcmVudAk9IHMzYzI0eHhfY2xrb3V0X3NldHBhcmVudCwKIH07CiAKIHN0cnVjdCBjbGsgczNjMjR4eF9jbGtvdXQxID0gewogCS5uYW1lCQk9ICJjbGtvdXQxIiwKIAkuaWQJCT0gLTEsCisJLnNldF9wYXJlbnQJPSBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQsCiB9OwogCiBzdHJ1Y3QgY2xrIHMzYzI0eHhfdWNsayA9IHsKQEAgLTI2Miw3ICs0MjMsNyBAQAogfTsKIAogCi0vKiBjbG9jayBkZWZpbml0aW9ucyAqLworLyogc3RhbmRhcmQgY2xvY2sgZGVmaW5pdGlvbnMgKi8KIAogc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKIAl7CkBAIC0zNzQsNyArNTM1LDcgQEAKIAogCS8qIGlmIHRoaXMgaXMgYSBzdGFuZGFyZCBjbG9jaywgc2V0IHRoZSB1c2FnZSBzdGF0ZSAqLwogCi0JaWYgKGNsay0+Y3RybGJpdCkgeworCWlmIChjbGstPmN0cmxiaXQgJiYgY2xrLT5lbmFibGUgPT0gczNjMjR4eF9jbGtjb25fZW5hYmxlKSB7CiAJCXVuc2lnbmVkIGxvbmcgY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOwogCiAJCWNsay0+dXNhZ2UgPSAoY2xrY29uICYgY2xrLT5jdHJsYml0KSA/IDEgOiAwOwpAQCAtMzk2LDYgKzU1Nyw3IEBACiAJCQkJdW5zaWduZWQgbG9uZyBoY2xrLAogCQkJCXVuc2lnbmVkIGxvbmcgcGNsaykKIHsKKwl1bnNpZ25lZCBsb25nIHVwbGxjb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX1VQTExDT04pOwogCXVuc2lnbmVkIGxvbmcgY2xrc2xvdyA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLU0xPVyk7CiAJc3RydWN0IGNsayAqY2xrcCA9IGluaXRfY2xvY2tzOwogCWludCBwdHI7CkBAIC00MDYsNiArNTY4LDcgQEAKIAkvKiBpbml0aWFsaXNlIHRoZSBtYWluIHN5c3RlbSBjbG9ja3MgKi8KIAogCWNsa194dGFsLnJhdGUgPSB4dGFsOworCWNsa191cGxsLnJhdGUgPSBzM2MyNDEwX2dldF9wbGwodXBsbGNvbiwgeHRhbCk7CiAKIAljbGtfaC5yYXRlID0gaGNsazsKIAljbGtfcC5yYXRlID0gcGNsazsKQEAgLTQzOSw2ICs2MDIsOSBAQAogCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfeHRhbCkgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBtYXN0ZXIgeHRhbFxuIik7CiAKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3VwbGwpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgdXBsbCBjbG9ja1xuIik7CisKIAlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX2YpIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1IGZjbGtcbiIpOwogCkBAIC00NDgsNiArNjE0LDEwIEBACiAJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19wKSA8IDApCiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBwY2xrXG4iKTsKIAorCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa191c2JfYnVzKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVzYiBidXMgY2xvY2tcbiIpOworCiAJLyogcmVnaXN0ZXIgY2xvY2tzIGZyb20gY2xvY2sgYXJyYXkgKi8KIAogCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrcyk7IHB0cisrLCBjbGtwKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmgKaW5kZXggZWI1Yzk1ZC4uMDFiYjQ1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmgKQEAgLTE5LDcgKzE5LDExIEBACiAJaW50CQkgICAgICB1c2FnZTsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgcmF0ZTsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgY3RybGJpdDsKKwogCWludAkJICAgICgqZW5hYmxlKShzdHJ1Y3QgY2xrICosIGludCBlbmFibGUpOworCWludAkJICAgICgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmMsIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisJdW5zaWduZWQgbG9uZwkgICAgKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICpjLCB1bnNpZ25lZCBsb25nIHJhdGUpOworCWludAkJICAgICgqc2V0X3BhcmVudCkoc3RydWN0IGNsayAqYywgc3RydWN0IGNsayAqcGFyZW50KTsKIH07CiAKIC8qIG90aGVyIGNsb2NrcyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBieSBib2FyZCBzdXBwb3J0ICovCkBAIC0zMCwxMSArMzQsMTUgQEAKIGV4dGVybiBzdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MTsKIGV4dGVybiBzdHJ1Y3QgY2xrIHMzYzI0eHhfdWNsazsKIAorZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3VzYl9idXM7CisKIC8qIGV4cG9ydHMgZm9yIGFyY2gvYXJtL21hY2gtczNjMjQxMAogICoKICAqIFBsZWFzZSBETyBOT1QgdXNlIHRoZXNlIG91dHNpZGUgb2YgYXJjaC9hcm0vbWFjaC1zM2MyNDEwCiAqLwogCitleHRlcm4gc3RydWN0IG11dGV4IGNsb2Nrc19tdXRleDsKKwogZXh0ZXJuIGludCBzM2MyNHh4X2Nsa2Nvbl9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKIGV4dGVybiBpbnQgczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhzdHJ1Y3QgY2xrICpjbGspOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMKaW5kZXggMDBhMzc5My4uNzBjMzRmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJYm9hcmQgPSBiOwogCiAJaWYgKGItPmNsb2Nrc19jb3VudCAhPSAwKSB7Ci0JCXN0cnVjdCBjbGsgKipwdHIgPSBiLT5jbG9ja3M7OworCQlzdHJ1Y3QgY2xrICoqcHRyID0gYi0+Y2xvY2tzOwogCiAJCWZvciAoaSA9IGItPmNsb2Nrc19jb3VudDsgaSA+IDA7IGktLSwgcHRyKyspCiAJCQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCpwdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMKaW5kZXggMGE0N2QzOC4uY2EwOWJhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCkBAIC0zMzQsMTEgKzMzNCwxNyBAQAogCiB9OwogCitzdGF0aWMgdTY0IHMzY19kZXZpY2Vfc3BpMF9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfc3BpMCA9IHsKIAkubmFtZQkJICA9ICJzM2MyNDEwLXNwaSIsCiAJLmlkCQkgID0gMCwKIAkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2Nfc3BpMF9yZXNvdXJjZSksCiAJLnJlc291cmNlCSAgPSBzM2Nfc3BpMF9yZXNvdXJjZSwKKyAgICAgICAgLmRldiAgICAgICAgICAgICAgPSB7CisgICAgICAgICAgICAgICAgLmRtYV9tYXNrID0gJnMzY19kZXZpY2Vfc3BpMF9kbWFtYXNrLAorICAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAorICAgICAgICB9CiB9OwogCiBFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2Vfc3BpMCk7CkBAIC0zNTksMTEgKzM2NSwxNyBAQAogCiB9OwogCitzdGF0aWMgdTY0IHMzY19kZXZpY2Vfc3BpMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfc3BpMSA9IHsKIAkubmFtZQkJICA9ICJzM2MyNDEwLXNwaSIsCiAJLmlkCQkgID0gMSwKIAkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2Nfc3BpMV9yZXNvdXJjZSksCiAJLnJlc291cmNlCSAgPSBzM2Nfc3BpMV9yZXNvdXJjZSwKKyAgICAgICAgLmRldiAgICAgICAgICAgICAgPSB7CisgICAgICAgICAgICAgICAgLmRtYV9tYXNrID0gJnMzY19kZXZpY2Vfc3BpMV9kbWFtYXNrLAorICAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAorICAgICAgICB9CiB9OwogCiBFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2Vfc3BpMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW9zaXJpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDc4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYwpAQCAtMCwwICsxLDI5NCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3NpcmlzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9vc2lyaXMtbWFwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvb3NpcmlzLWNwbGQuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbGNkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbmFuZC5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorCisvKiBvbmJvYXJkIHBlcmlocGhlcmFsIG1hcCAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9zaXJpc19pb2Rlc2NbXSBfX2luaXRkYXRhID0geworICAvKiBJU0EgSU8gYXJlYXMgKG1heSBiZSBvdmVyLXdyaXR0ZW4gbGF0ZXIpICovCisKKyAgeworCSAgLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsCisJICAucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzUpLAorCSAgLmxlbmd0aAk9IFNaXzE2TSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwgeworCSAgLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX1dPUkQsCisJICAucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzUpLAorCSAgLmxlbmd0aAk9IFNaXzE2TSwKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKKyAgfSwKKworICAvKiBDUExEIGNvbnRyb2wgcmVnaXN0ZXJzICovCisKKyAgeworCSAgLnZpcnR1YWwJPSAodTMyKU9TSVJJU19WQV9DVFJMMSwKKwkgIC5wZm4JCT0gX19waHlzX3RvX3BmbihPU0lSSVNfUEFfQ1RSTDEpLAorCSAgLmxlbmd0aAk9IFNaXzE2SywKKwkgIC50eXBlCQk9IE1UX0RFVklDRQorICB9LCB7CisJICAudmlydHVhbAk9ICh1MzIpT1NJUklTX1ZBX0NUUkwyLAorCSAgLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9TSVJJU19QQV9DVFJMMiksCisJICAubGVuZ3RoCT0gU1pfMTZLLAorCSAgLnR5cGUJCT0gTVRfREVWSUNFCisgIH0sCit9OworCisjZGVmaW5lIFVDT04gUzNDMjQxMF9VQ09OX0RFRkFVTFQgfCBTM0MyNDEwX1VDT05fVUNMSworI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCisjZGVmaW5lIFVGQ09OIFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjIG9zaXJpc19zZXJpYWxfY2xvY2tzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAidWNsayIsCisJCS5kaXZpc29yCT0gMSwKKwkJLm1pbl9iYXVkCT0gMCwKKwkJLm1heF9iYXVkCT0gMCwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJCT0gInBjbGsiLAorCQkuZGl2aXNvcgk9IDEsCisJCS5taW5fYmF1ZAk9IDAsCisJCS5tYXhfYmF1ZAk9IDAuCisJfQorfTsKKworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBvc2lyaXNfdWFydGNmZ3NbXSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJCS5jbG9ja3MJICAgICA9IG9zaXJpc19zZXJpYWxfY2xvY2tzLAorCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKG9zaXJpc19zZXJpYWxfY2xvY2tzKQorCX0sCisJWzFdID0geworCQkuaHdwb3J0CSAgICAgPSAyLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSBVQ09OLAorCQkudWxjb24JICAgICA9IFVMQ09OLAorCQkudWZjb24JICAgICA9IFVGQ09OLAorCQkuY2xvY2tzCSAgICAgPSBvc2lyaXNfc2VyaWFsX2Nsb2NrcywKKwkJLmNsb2Nrc19zaXplID0gQVJSQVlfU0laRShvc2lyaXNfc2VyaWFsX2Nsb2NrcykKKwl9LAorfTsKKworLyogTkFORCBGbGFzaCBvbiBPc2lyaXMgYm9hcmQgKi8KKworc3RhdGljIGludCBleHRlcm5hbF9tYXBbXSAgID0geyAyIH07CitzdGF0aWMgaW50IGNoaXAwX21hcFtdICAgICAgPSB7IDAgfTsKK3N0YXRpYyBpbnQgY2hpcDFfbWFwW10gICAgICA9IHsgMSB9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb3NpcmlzX2RlZmF1bHRfbmFuZF9wYXJ0W10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJCb290IEFnZW50IiwKKwkJLnNpemUJPSBTWl8xNkssCisJCS5vZmZzZXQJPSAwCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCT0gIi9ib290IiwKKwkJLnNpemUJPSBTWl80TSAtIFNaXzE2SywKKwkJLm9mZnNldAk9IFNaXzE2SywKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAidXNlcjEiLAorCQkub2Zmc2V0CT0gU1pfNE0sCisJCS5zaXplCT0gU1pfMzJNIC0gU1pfNE0sCisJfSwKKwlbM10gPSB7CisJCS5uYW1lCT0gInVzZXIyIiwKKwkJLm9mZnNldAk9IFNaXzMyTSwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0KK307CisKKy8qIHRoZSBPc2lyaXMgaGFzIDMgc2VsZWN0YWJsZSBzbG90cyBmb3IgbmFuZC1mbGFzaCwgdGhlIHR3bworICogb24tYm9hcmQgY2hpcCBhcmVhcywgYXMgd2VsbCBhcyB0aGUgZXh0ZXJuYWwgc2xvdC4KKyAqCisgKiBOb3RlLCB0aGVyZSBpcyBubyBjdXJyZW50IGhvdC1wbHVnIHN1cHBvcnQgZm9yIHRoZSBFeHRlcm5hbAorICogc29ja2V0LgorKi8KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX25hbmRfc2V0IG9zaXJpc19uYW5kX3NldHNbXSA9IHsKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJFeHRlcm5hbCIsCisJCS5ucl9jaGlwcwk9IDEsCisJCS5ucl9tYXAJCT0gZXh0ZXJuYWxfbWFwLAorCQkubnJfcGFydGl0aW9ucwk9IEFSUkFZX1NJWkUob3NpcmlzX2RlZmF1bHRfbmFuZF9wYXJ0KSwKKwkJLnBhcnRpdGlvbnMJPSBvc2lyaXNfZGVmYXVsdF9uYW5kX3BhcnQKKwl9LAorCVswXSA9IHsKKwkJLm5hbWUJCT0gImNoaXAwIiwKKwkJLm5yX2NoaXBzCT0gMSwKKwkJLm5yX21hcAkJPSBjaGlwMF9tYXAsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShvc2lyaXNfZGVmYXVsdF9uYW5kX3BhcnQpLAorCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydAorCX0sCisJWzJdID0geworCQkubmFtZQkJPSAiY2hpcDEiLAorCQkubnJfY2hpcHMJPSAxLAorCQkubnJfbWFwCQk9IGNoaXAxX21hcCwKKwkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKG9zaXJpc19kZWZhdWx0X25hbmRfcGFydCksCisJCS5wYXJ0aXRpb25zCT0gb3NpcmlzX2RlZmF1bHRfbmFuZF9wYXJ0CisJfSwKK307CisKK3N0YXRpYyB2b2lkIG9zaXJpc19uYW5kX3NlbGVjdChzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCAqc2V0LCBpbnQgc2xvdCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJc2xvdCA9IHNldC0+bnJfbWFwW3Nsb3RdICYgMzsKKworCXByX2RlYnVnKCJvc2lyaXNfbmFuZDogc2VsZWN0aW5nIHNsb3QgJWQgKHNldCAlcCwlcClcbiIsCisJCSBzbG90LCBzZXQsIHNldC0+bnJfbWFwKTsKKworCXRtcCA9IF9fcmF3X3JlYWRiKE9TSVJJU19WQV9DVFJMMSk7CisJdG1wICY9IH5PU0lSSVNfQ1RSTDFfTkFORFNFTDsKKwl0bXAgfD0gc2xvdDsKKworCXByX2RlYnVnKCJvc2lyaXNfbmFuZDogY3RybDEgbm93ICUwMnhcbiIsIHRtcCk7CisKKwlfX3Jhd193cml0ZWIodG1wLCBPU0lSSVNfVkFfQ1RSTDEpOworfQorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCBvc2lyaXNfbmFuZF9pbmZvID0geworCS50YWNscwkJPSAyNSwKKwkudHdycGgwCQk9IDYwLAorCS50d3JwaDEJCT0gNjAsCisJLm5yX3NldHMJPSBBUlJBWV9TSVpFKG9zaXJpc19uYW5kX3NldHMpLAorCS5zZXRzCQk9IG9zaXJpc19uYW5kX3NldHMsCisJLnNlbGVjdF9jaGlwCT0gb3NpcmlzX25hbmRfc2VsZWN0LAorfTsKKworLyogUENNQ0lBIGNvbnRyb2wgYW5kIGNvbmZpZ3VyYXRpb24gKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvc2lyaXNfcGNtY2lhX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDBmMDAwMDAwLAorCQkuZW5kCT0gMHgwZjEwMDAwMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDB4MGMwMDAwMDAsCisJCS5lbmQJPSAweDBjMTAwMDAwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvc2lyaXNfcGNtY2lhID0geworCS5uYW1lCQk9ICJvc2lyaXMtcGNtY2lhIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9zaXJpc19wY21jaWFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG9zaXJpc19wY21jaWFfcmVzb3VyY2UsCit9OworCisvKiBTdGFuZGFyZCBPc2lyaXMgZGV2aWNlcyAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3NpcmlzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV9uYW5kLAorCSZvc2lyaXNfcGNtY2lhLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKm9zaXJpc19jbG9ja3NbXSA9IHsKKwkmczNjMjR4eF9kY2xrMCwKKwkmczNjMjR4eF9kY2xrMSwKKwkmczNjMjR4eF9jbGtvdXQwLAorCSZzM2MyNHh4X2Nsa291dDEsCisJJnMzYzI0eHhfdWNsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ib2FyZCBvc2lyaXNfYm9hcmQgX19pbml0ZGF0YSA9IHsKKwkuZGV2aWNlcyAgICAgICA9IG9zaXJpc19kZXZpY2VzLAorCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShvc2lyaXNfZGV2aWNlcyksCisJLmNsb2NrcwkgICAgICAgPSBvc2lyaXNfY2xvY2tzLAorCS5jbG9ja3NfY291bnQgID0gQVJSQVlfU0laRShvc2lyaXNfY2xvY2tzKQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9zaXJpc19tYXBfaW8odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogaW5pdGlhbGlzZSB0aGUgY2xvY2tzICovCisKKwlzM2MyNHh4X2RjbGswLnBhcmVudCA9IE5VTEw7CisJczNjMjR4eF9kY2xrMC5yYXRlICAgPSAxMioxMDAwKjEwMDA7CisKKwlzM2MyNHh4X2RjbGsxLnBhcmVudCA9IE5VTEw7CisJczNjMjR4eF9kY2xrMS5yYXRlICAgPSAyNCoxMDAwKjEwMDA7CisKKwlzM2MyNHh4X2Nsa291dDAucGFyZW50ICA9ICZzM2MyNHh4X2RjbGswOworCXMzYzI0eHhfY2xrb3V0MS5wYXJlbnQgID0gJnMzYzI0eHhfZGNsazE7CisKKwlzM2MyNHh4X3VjbGsucGFyZW50ICA9ICZzM2MyNHh4X2Nsa291dDE7CisKKwlzM2NfZGV2aWNlX25hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSAmb3NpcmlzX25hbmRfaW5mbzsKKworCXMzYzI0eHhfaW5pdF9pbyhvc2lyaXNfaW9kZXNjLCBBUlJBWV9TSVpFKG9zaXJpc19pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhvc2lyaXNfdWFydGNmZ3MsIEFSUkFZX1NJWkUob3NpcmlzX3VhcnRjZmdzKSk7CisJczNjMjR4eF9zZXRfYm9hcmQoJm9zaXJpc19ib2FyZCk7CisKKwkvKiBmaXggYnVzIGNvbmZpZ3VyYXRpb24gKG5CRSBzZXR0aW5ncyB3cm9uZyBvbiBBQkxFIHByZSB2Mi4yMCkgKi8KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9CV1NDT04pIHwgUzNDMjQxMF9CV1NDT05fU1QxIHwgUzNDMjQxMF9CV1NDT05fU1QyIHwgUzNDMjQxMF9CV1NDT05fU1QzIHwgUzNDMjQxMF9CV1NDT05fU1Q0IHwgUzNDMjQxMF9CV1NDT05fU1Q1LCBTM0MyNDEwX0JXU0NPTik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyogd3JpdGUtcHJvdGVjdCBsaW5lIHRvIHRoZSBOQU5EICovCisJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQQTAsIDEpOworfQorCitNQUNISU5FX1NUQVJUKE9TSVJJUywgIlNpbXRlYy1PU0lSSVMiKQorCS8qIE1haW50YWluZXI6IEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4gKi8KKwkucGh5c19pbwk9IFMzQzI0MTBfUEFfVUFSVCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDMjRYWF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzNDMjQxMF9TRFJBTV9QQSArIDB4MTAwLAorCS5tYXBfaW8JCT0gb3NpcmlzX21hcF9pbywKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtY2xvY2suYwppbmRleCBiNTU3YTJiLi41N2ExNTk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWNsb2NrLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CkBAIC00NSwxMCArNDYsNDcgQEAKIAogLyogUzNDMjQ0MCBleHRlbmRlZCBjbG9jayBzdXBwb3J0ICovCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDBfY2xrX3VwbGwgPSB7Ci0JLm5hbWUJCT0gInVwbGwiLAotCS5pZAkJPSAtMSwKLX07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQwX2NhbWlmX3VwbGxfcm91bmQoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJaW50IGRpdjsKKworCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCisJCXJldHVybiBwYXJlbnRfcmF0ZTsKKworCS8qIG5vdGUsIHdlIHJlbW92ZSB0aGUgKy8tIDEgY2FsY3VsYXRpb25zIGZvciB0aGUgZGl2aXNvciAqLworCisJZGl2ID0gKHBhcmVudF9yYXRlIC8gcmF0ZSkgLyAyOworCisJaWYgKGRpdiA8IDEpCisJCWRpdiA9IDE7CisJZWxzZSBpZiAoZGl2ID4gMTYpCisJCWRpdiA9IDE2OworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiAqIDIpOworfQorCitzdGF0aWMgaW50IHMzYzI0NDBfY2FtaWZfdXBsbF9zZXRyYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgY2FtZGl2biA9ICBfX3Jhd19yZWFkbChTM0MyNDQwX0NBTURJVk4pOworCisJcmF0ZSA9IHMzYzI0NDBfY2FtaWZfdXBsbF9yb3VuZChjbGssIHJhdGUpOworCisJY2FtZGl2biAmPSB+KFMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMIHwgUzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19NQVNLKTsKKworCWlmIChyYXRlICE9IHBhcmVudF9yYXRlKSB7CisJCWNhbWRpdm4gfD0gUzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19TRUw7CisJCWNhbWRpdm4gfD0gKCgocGFyZW50X3JhdGUgLyByYXRlKSAvIDIpIC0gMSk7CisJfQorCisJX19yYXdfd3JpdGVsKGNhbWRpdm4sIFMzQzI0NDBfQ0FNRElWTik7CisKKwlyZXR1cm4gMDsKK30KKworLyogRXh0cmEgUzNDMjQ0MCBjbG9ja3MgKi8KIAogc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0MF9jbGtfY2FtID0gewogCS5uYW1lCQk9ICJjYW1pZiIsCkBAIC01Nyw2ICs5NSwxMyBAQAogCS5jdHJsYml0CT0gUzNDMjQ0MF9DTEtDT05fQ0FNRVJBLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0MF9jbGtfY2FtX3VwbGwgPSB7CisJLm5hbWUJCT0gImNhbWlmLXVwbGwiLAorCS5pZAkJPSAtMSwKKwkuc2V0X3JhdGUJPSBzM2MyNDQwX2NhbWlmX3VwbGxfc2V0cmF0ZSwKKwkucm91bmRfcmF0ZQk9IHMzYzI0NDBfY2FtaWZfdXBsbF9yb3VuZCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDBfY2xrX2FjOTcgPSB7CiAJLm5hbWUJCT0gImFjOTciLAogCS5pZAkJPSAtMSwKQEAgLTY2LDM4ICsxMTEsNDYgQEAKIAogc3RhdGljIGludCBzM2MyNDQwX2Nsa19hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKLQl1bnNpZ25lZCBsb25nIHVwbGxjb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX1VQTExDT04pOwogCXVuc2lnbmVkIGxvbmcgY2FtZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7CisJdW5zaWduZWQgbG9uZyBjbGtkaXZuOwogCXN0cnVjdCBjbGsgKmNsa19oOwogCXN0cnVjdCBjbGsgKmNsa19wOwotCXN0cnVjdCBjbGsgKmNsa194dGFsOworCXN0cnVjdCBjbGsgKmNsa191cGxsOwogCi0JY2xrX3h0YWwgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7Ci0JaWYgKElTX0VSUihjbGtfeHRhbCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTM0MyNDQwOiBGYWlsZWQgdG8gZ2V0IGNsa194dGFsXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JczNjMjQ0MF9jbGtfdXBsbC5yYXRlID0gczNjMjQxMF9nZXRfcGxsKHVwbGxjb24sIGNsa194dGFsLT5yYXRlKTsKLQotCXByaW50aygiUzNDMjQ0MDogQ2xvY2sgU3VwcG9ydCwgVVBMTCAlbGQuJTAzbGQgTUh6LCBEVlMgJXNcbiIsCi0JICAgICAgIHByaW50X21oeihzM2MyNDQwX2Nsa191cGxsLnJhdGUpLAorCXByaW50aygiUzNDMjQ0MDogQ2xvY2sgU3VwcG9ydCwgRFZTICVzXG4iLAogCSAgICAgICAoY2FtZGl2biAmIFMzQzI0NDBfQ0FNRElWTl9EVlNFTikgPyAib24iIDogIm9mZiIpOwogCiAJY2xrX3AgPSBjbGtfZ2V0KE5VTEwsICJwY2xrIik7CiAJY2xrX2ggPSBjbGtfZ2V0KE5VTEwsICJoY2xrIik7CisJY2xrX3VwbGwgPSBjbGtfZ2V0KE5VTEwsICJ1cGxsIik7CiAKLQlpZiAoSVNfRVJSKGNsa19wKSB8fCBJU19FUlIoY2xrX2gpKSB7CisJaWYgKElTX0VSUihjbGtfcCkgfHwgSVNfRVJSKGNsa19oKSB8fCBJU19FUlIoY2xrX3VwbGwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUzNDMjQ0MDogRmFpbGVkIHRvIGdldCBwYXJlbnQgY2xvY2tzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogY2hlY2sgcmF0ZSBvZiBVUExMLCBhbmQgaWYgaXQgaXMgbmVhciA5Nk1IeiwgdGhlbiBjaGFuZ2UKKwkgKiB0byB1c2luZyBoYWxmIHRoZSBVUExMIHJhdGUgZm9yIHRoZSBzeXN0ZW0gKi8KKworCWlmIChjbGtfZ2V0X3JhdGUoY2xrX3VwbGwpID4gKDk0ICogTUhaKSkgeworCQljbGtfdXNiX2J1cy5yYXRlID0gY2xrX2dldF9yYXRlKGNsa191cGxsKSAvIDI7CisKKwkJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKworCQljbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKKwkJY2xrZGl2biB8PSBTM0MyNDQwX0NMS0RJVk5fVUNMSzsKKwkJX19yYXdfd3JpdGVsKGNhbWRpdm4sIFMzQzI0MTBfQ0xLRElWTik7CisKKwkJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworCX0KKwogCXMzYzI0NDBfY2xrX2NhbS5wYXJlbnQgPSBjbGtfaDsKIAlzM2MyNDQwX2Nsa19hYzk3LnBhcmVudCA9IGNsa19wOworCXMzYzI0NDBfY2xrX2NhbV91cGxsLnBhcmVudCA9IGNsa191cGxsOwogCiAJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0MF9jbGtfYWM5Nyk7CiAJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0MF9jbGtfY2FtKTsKLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZzM2MyNDQwX2Nsa191cGxsKTsKKwlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZzM2MyNDQwX2Nsa19jYW1fdXBsbCk7CiAKIAljbGtfZGlzYWJsZSgmczNjMjQ0MF9jbGtfYWM5Nyk7CiAJY2xrX2Rpc2FibGUoJnMzYzI0NDBfY2xrX2NhbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3RpbWUuYwppbmRleCAxMGEyOTc2Li45ZDdiNzk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC90aW1lLmMKQEAgLTE0Miw2ICsxNDIsMTIgQEAKIAkuaGFuZGxlcgk9IHMzYzI0MTBfdGltZXJfaW50ZXJydXB0LAogfTsKIAorI2RlZmluZSB1c2VfdGNsazFfMTIoKSAoIFwKKwltYWNoaW5lX2lzX2Jhc3QoKQl8fCBcCisJbWFjaGluZV9pc192cjEwMDAoKQl8fCBcCisJbWFjaGluZV9pc19hbnViaXMoKQl8fCBcCisJbWFjaGluZV9pc19vc2lyaXMoKSApCisKIC8qCiAgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KICAqCkBAIC0xNjUsNyArMTcxLDcgQEAKIAogCS8qIGNvbmZpZ3VyZSB0aGUgc3lzdGVtIGZvciB3aGljaGV2ZXIgbWFjaGluZSBpcyBpbiB1c2UgKi8KIAotCWlmIChtYWNoaW5lX2lzX2Jhc3QoKSB8fCBtYWNoaW5lX2lzX3ZyMTAwMCgpIHx8IG1hY2hpbmVfaXNfYW51YmlzKCkpIHsKKwlpZiAodXNlX3RjbGsxXzEyKCkpIHsKIAkJLyogdGltZXIgaXMgYXQgMTJNSHosIHNjYWxlciBpcyAxICovCiAJCXRpbWVyX3VzZWNfdGlja3MgPSB0aW1lcl9tYXNrX3VzZWNfdGlja3MoMSwgMTIwMDAwMDApOwogCQl0Y250ID0gMTIwMDAwMDAgLyBIWjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKaW5kZXggZTRhNGEzZS4uZTI3ZjE1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGdlbmVyaWMubyBpcnEubyBkbWEubyB0aW1lLm8KK29iai15IDo9IGNsb2NrLm8gZ2VuZXJpYy5vIGlycS5vIGRtYS5vIHRpbWUubyAjbm1pLW9vcHNlci5vCiBvYmotbSA6PQogb2JqLW4gOj0KIG9iai0gIDo9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWU4ZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYwpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJdW5zaWduZWQgbG9uZwkJcmF0ZTsKKwlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJdW5zaWduZWQgaW50CQllbmFibGVkOworCXZvaWQJCQkoKmVuYWJsZSkodm9pZCk7CisJdm9pZAkJCSgqZGlzYWJsZSkodm9pZCk7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CitzdGF0aWMgREVDTEFSRV9NVVRFWChjbG9ja3Nfc2VtKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tzX2xvY2spOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisKKwlkb3duKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKKwkJCWNsayA9IHA7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cCgmY2xvY2tzX3NlbSk7CisKKwlyZXR1cm4gY2xrOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwltb2R1bGVfcHV0KGNsay0+b3duZXIpOworfQorRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2xrLT5lbmFibGVkKysgPT0gMCkKKwkJY2xrLT5lbmFibGUoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVdBUk5fT04oY2xrLT5lbmFibGVkID09IDApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJaWYgKC0tY2xrLT5lbmFibGVkID09IDApCisJCWNsay0+ZGlzYWJsZSgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKKworc3RhdGljIHZvaWQgY2xrX2dwaW8yN19lbmFibGUodm9pZCkKK3sKKwkvKgorCSAqIEZpcnN0LCBzZXQgdXAgdGhlIDMuNjg2NE1IeiBjbG9jayBvbiBHUElPIDI3IGZvciB0aGUgU0EtMTExMToKKwkgKiAoU0EtMTExMCBEZXZlbG9wZXIncyBNYW51YWwsIHNlY3Rpb24gOS4xLjIuMSkKKwkgKi8KKwlHQUZSIHw9IEdQSU9fMzJfNzY4a0h6OworCUdQRFIgfD0gR1BJT18zMl83NjhrSHo7CisJVFVDUiA9IFRVQ1JfM182ODY0TUh6OworfQorCitzdGF0aWMgdm9pZCBjbGtfZ3BpbzI3X2Rpc2FibGUodm9pZCkKK3sKKwlUVUNSID0gMDsKKwlHUERSICY9IH5HUElPXzMyXzc2OGtIejsKKwlHQUZSICY9IH5HUElPXzMyXzc2OGtIejsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2dwaW8yNyA9IHsKKwkubmFtZQkJPSAiR1BJTzI3X0NMSyIsCisJLnJhdGUJCT0gMzY4NjQwMCwKKwkuZW5hYmxlCQk9IGNsa19ncGlvMjdfZW5hYmxlLAorCS5kaXNhYmxlCT0gY2xrX2dwaW8yN19kaXNhYmxlLAorfTsKKworaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCit7CisJZG93bigmY2xvY2tzX3NlbSk7CisJbGlzdF9hZGQoJmNsay0+bm9kZSwgJmNsb2Nrcyk7CisJdXAoJmNsb2Nrc19zZW0pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfcmVnaXN0ZXIpOworCit2b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlkb3duKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKKwl1cCgmY2xvY2tzX3NlbSk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKKworc3RhdGljIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKK3sKKwljbGtfcmVnaXN0ZXIoJmNsa19ncGlvMjcpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChjbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IDY4ODg4MTYuLjEwMjQ1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvc2hhcnBzbF9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9sb2NvbW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tY3AuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtNjYsNiArNjcsMzIgQEAKIAkucmVzb3VyY2UJPSBjb2xsaWVfc2Nvb3BfcmVzb3VyY2VzLAogfTsKIAorc3RhdGljIHN0cnVjdCBzY29vcF9wY21jaWFfZGV2IGNvbGxpZV9wY21jaWFfc2Nvb3BbXSA9IHsKK3sKKyAgICAgICAuZGV2ICAgICAgICA9ICZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LAorICAgICAgIC5pcnEgICAgICAgID0gQ09MTElFX0lSUV9HUElPX0NGX0lSUSwKKyAgICAgICAuY2RfaXJxICAgICA9IENPTExJRV9JUlFfR1BJT19DRl9DRCwKKyAgICAgICAuY2RfaXJxX3N0ciA9ICJQQ01DSUEwIENEIiwKK30sCit9OworCitzdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9jb25maWcgY29sbGllX3BjbWNpYV9jb25maWcgPSB7CisJLmRldnMgICAgICAgICA9ICZjb2xsaWVfcGNtY2lhX3Njb29wWzBdLAorCS5udW1fZGV2cyAgICAgPSAxLAorfTsKKworCitzdGF0aWMgc3RydWN0IG1jcF9wbGF0X2RhdGEgY29sbGllX21jcF9kYXRhID0geworCS5tY2NyMCAgICAgICAgICA9IE1DQ1IwX0FETSwKKwkuc2Nsa19yYXRlICAgICAgPSAxMTk4MTAwMCwKK307CisKKworc3RhdGljIHN0cnVjdCBzYTExMDBfcG9ydF9mbnMgY29sbGllX3BvcnRfZm5zIF9faW5pdGRhdGEgPSB7CisJLnNldF9tY3RybAk9IGNvbGxpZV91YXJ0X3NldF9tY3RybCwKKwkuZ2V0X21jdHJsCT0gY29sbGllX3VhcnRfZ2V0X21jdHJsLAorfTsKKwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGxvY29tb19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC0xNTksNiArMTg2LDggQEAKIAlHUERSIHw9IEdQSU9fMzJfNzY4a0h6OwogCVRVQ1IgID0gVFVDUl8zMl83NjhrSHo7CiAKKwlwbGF0Zm9ybV9zY29vcF9jb25maWcgPSAmY29sbGllX3BjbWNpYV9jb25maWc7CisKIAlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvbGxpZTogVW5hYmxlIHRvIHJlZ2lzdGVyIExvQ29NbyBkZXZpY2VcbiIpOwpAQCAtMTY2LDYgKzE5NSw3IEBACiAKIAlzYTExeDBfc2V0X2ZsYXNoX2RhdGEoJmNvbGxpZV9mbGFzaF9kYXRhLCBjb2xsaWVfZmxhc2hfcmVzb3VyY2VzLAogCQkJICAgICAgQVJSQVlfU0laRShjb2xsaWVfZmxhc2hfcmVzb3VyY2VzKSk7CisJc2ExMXgwX3NldF9tY3BfZGF0YSgmY29sbGllX21jcF9kYXRhKTsKIAogCXNoYXJwc2xfc2F2ZV9wYXJhbSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCmluZGV4IDllYmJlODAuLjc5OTY5N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JdmljX2luaXQoVkFfVklDX0JBU0UsIH4oMSA8PCAzMSkpOworCXZpY19pbml0KFZBX1ZJQ19CQVNFLCBJUlFfVklDX1NUQVJULCB+KDEgPDwgMzEpKTsKIAogCXNldF9pcnFfaGFuZGxlcihJUlFfVklDU09VUkNFMzEsIHNpY19oYW5kbGVfaXJxKTsKIAllbmFibGVfaXJxKElSUV9WSUNTT1VSQ0UzMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3BjaS5jCmluZGV4IGI4MGQ1N2QuLjcyMmZiYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3BjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3BjaS5jCkBAIC0yNDAsNiArMjQwLDE0IEBACiAgICAgICAgIGludCBpOwogICAgICAgICBpbnQgbXlzbG90ID0gLTE7CiAJdW5zaWduZWQgbG9uZyB2YWw7CisJdm9pZCBfX2lvbWVtICpsb2NhbF9wY2lfY2ZnX2Jhc2U7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChTWVNfUENJQ1RMKTsKKwlpZiAoISh2YWwgJiAxKSkgeworCQlwcmludGsoIk5vdCBwbHVnZ2VkIGludG8gUENJIGJhY2twbGFuZSFcbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CiAKIAlpZiAobnIgPT0gMCkgewogCQlzeXMtPm1lbV9vZmZzZXQgPSAwOwpAQCAtMjUzLDQ4ICsyNjEsNDUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JX19yYXdfd3JpdGVsKFZFUlNBVElMRV9QQ0lfTUVNX0JBU0UwID4+IDI4LFBDSV9JTUFQMCk7Ci0JX19yYXdfd3JpdGVsKFZFUlNBVElMRV9QQ0lfTUVNX0JBU0UxID4+IDI4LFBDSV9JTUFQMSk7Ci0JX19yYXdfd3JpdGVsKFZFUlNBVElMRV9QQ0lfTUVNX0JBU0UyID4+IDI4LFBDSV9JTUFQMik7Ci0KLQlfX3Jhd193cml0ZWwoMSwgU1lTX1BDSUNUTCk7Ci0KLQl2YWwgPSBfX3Jhd19yZWFkbChTWVNfUENJQ1RMKTsKLQlpZiAoISh2YWwgJiAxKSkgewotCQlwcmludGsoIk5vdCBwbHVnZ2VkIGludG8gUENJIGJhY2twbGFuZSFcbiIpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KIAkvKgogCSAqICBXZSBuZWVkIHRvIGRpc2NvdmVyIHRoZSBQQ0kgY29yZSBmaXJzdCB0byBjb25maWd1cmUgaXRzZWxmCiAJICogIGJlZm9yZSB0aGUgbWFpbiBQQ0kgcHJvYmluZyBpcyBwZXJmb3JtZWQKIAkgKi8KLQlmb3IgKGk9MDsgaTwzMjsgaSsrKSB7CisJZm9yIChpPTA7IGk8MzI7IGkrKykKIAkJaWYgKChfX3Jhd19yZWFkbChWRVJTQVRJTEVfUENJX1ZJUlRfQkFTRSsoaTw8MTEpK0RFVklDRV9JRF9PRkZTRVQpID09IFZQX1BDSV9ERVZJQ0VfSUQpICYmCiAJCSAgICAoX19yYXdfcmVhZGwoVkVSU0FUSUxFX1BDSV9WSVJUX0JBU0UrKGk8PDExKStDTEFTU19JRF9PRkZTRVQpID09IFZQX1BDSV9DTEFTU19JRCkpIHsKIAkJCW15c2xvdCA9IGk7Ci0KLQkJCV9fcmF3X3dyaXRlbChteXNsb3QsIFBDSV9TRUxGSUQpOwotCQkJdmFsID0gX19yYXdfcmVhZGwoVkVSU0FUSUxFX1BDSV9DRkdfVklSVF9CQVNFKyhteXNsb3Q8PDExKStDU1JfT0ZGU0VUKTsKLQkJCXZhbCB8PSAoMTw8Mik7Ci0JCQlfX3Jhd193cml0ZWwodmFsLCBWRVJTQVRJTEVfUENJX0NGR19WSVJUX0JBU0UrKG15c2xvdDw8MTEpK0NTUl9PRkZTRVQpOwogCQkJYnJlYWs7CiAJCX0KLQl9CiAKIAlpZiAobXlzbG90ID09IC0xKSB7CiAJCXByaW50aygiQ2Fubm90IGZpbmQgUENJIGNvcmUhXG4iKTsKIAkJcmV0ID0gLUVJTzsKLQl9IGVsc2UgewotCQlwcmludGsoIlBDSSBjb3JlIGZvdW5kIChzbG90ICVkKVxuIixteXNsb3QpOwotCQkvKiBEbyBub3QgdG8gbWFwIFZlcnNhdGlsZSBGUEdBIFBDSSBkZXZpY2UKLQkJICAgaW50byBtZW1vcnkgc3BhY2UgYXMgd2UgYXJlIHNob3J0IG9mCi0JCSAgIG1hcHBhYmxlIG1lbW9yeSAqLwotCQlwY2lfc2xvdF9pZ25vcmUgfD0gKDEgPDwgbXlzbG90KTsKLQkJcmV0ID0gMTsKKwkJZ290byBvdXQ7CiAJfQogCisJcHJpbnRrKCJQQ0kgY29yZSBmb3VuZCAoc2xvdCAlZClcbiIsbXlzbG90KTsKKworCV9fcmF3X3dyaXRlbChteXNsb3QsIFBDSV9TRUxGSUQpOworCWxvY2FsX3BjaV9jZmdfYmFzZSA9ICh2b2lkICopIFZFUlNBVElMRV9QQ0lfQ0ZHX1ZJUlRfQkFTRSArIChteXNsb3QgPDwgMTEpOworCisJdmFsID0gX19yYXdfcmVhZGwobG9jYWxfcGNpX2NmZ19iYXNlICsgQ1NSX09GRlNFVCk7CisJdmFsIHw9IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX0lOVkFMSURBVEU7CisJX19yYXdfd3JpdGVsKHZhbCwgbG9jYWxfcGNpX2NmZ19iYXNlICsgQ1NSX09GRlNFVCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgUENJIGluYm91bmQgbWVtb3J5IHdpbmRvd3MgdG8gYmUgMToxIG1hcHBlZCB0byBTRFJBTQorCSAqLworCV9fcmF3X3dyaXRlbChQSFlTX09GRlNFVCwgbG9jYWxfcGNpX2NmZ19iYXNlICsgUENJX0JBU0VfQUREUkVTU18wKTsKKwlfX3Jhd193cml0ZWwoUEhZU19PRkZTRVQsIGxvY2FsX3BjaV9jZmdfYmFzZSArIFBDSV9CQVNFX0FERFJFU1NfMSk7CisJX19yYXdfd3JpdGVsKFBIWVNfT0ZGU0VULCBsb2NhbF9wY2lfY2ZnX2Jhc2UgKyBQQ0lfQkFTRV9BRERSRVNTXzIpOworCisJLyoKKwkgKiBEbyBub3QgdG8gbWFwIFZlcnNhdGlsZSBGUEdBIFBDSSBkZXZpY2UgaW50byBtZW1vcnkgc3BhY2UKKwkgKi8KKwlwY2lfc2xvdF9pZ25vcmUgfD0gKDEgPDwgbXlzbG90KTsKKwlyZXQgPSAxOworCiAgb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0zMDUsMTggKzMxMCwxOCBAQAogCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJnBjaV92ZXJzYXRpbGVfb3BzLCBzeXMpOwogfQogCi0vKgotICogVjNfTEJfQkFTRT8gLSBsb2NhbCBidXMgYWRkcmVzcwotICogVjNfTEJfTUFQPyAgLSBwY2kgYnVzIGFkZHJlc3MKLSAqLwogdm9pZCBfX2luaXQgcGNpX3ZlcnNhdGlsZV9wcmVpbml0KHZvaWQpCiB7Ci19CisJX19yYXdfd3JpdGVsKFZFUlNBVElMRV9QQ0lfTUVNX0JBU0UwID4+IDI4LCBQQ0lfSU1BUDApOworCV9fcmF3X3dyaXRlbChWRVJTQVRJTEVfUENJX01FTV9CQVNFMSA+PiAyOCwgUENJX0lNQVAxKTsKKwlfX3Jhd193cml0ZWwoVkVSU0FUSUxFX1BDSV9NRU1fQkFTRTIgPj4gMjgsIFBDSV9JTUFQMik7CiAKLXZvaWQgX19pbml0IHBjaV92ZXJzYXRpbGVfcG9zdGluaXQodm9pZCkKLXsKLX0KKwlfX3Jhd193cml0ZWwoUEhZU19PRkZTRVQgPj4gMjgsIFBDSV9TTUFQMCk7CisJX19yYXdfd3JpdGVsKFBIWVNfT0ZGU0VUID4+IDI4LCBQQ0lfU01BUDEpOworCV9fcmF3X3dyaXRlbChQSFlTX09GRlNFVCA+PiAyOCwgUENJX1NNQVAyKTsKIAorCV9fcmF3X3dyaXRlbCgxLCBTWVNfUENJQ1RMKTsKK30KIAogLyoKICAqIG1hcCB0aGUgc3BlY2lmaWVkIGRldmljZS9zbG90L3BpbiB0byBhbiBJUlEuICAgRGlmZmVyZW50IGJhY2twbGFuZXMgbWF5IG5lZWQgdG8gbW9kaWZ5IHRoaXMuCkBAIC0zMjYsMTYgKzMzMSwxNSBAQAogCWludCBpcnE7CiAJaW50IGRldnNsb3QgPSBQQ0lfU0xPVChkZXYtPmRldmZuKTsKIAotCS8qIHNsb3QsICBwaW4sICBpcnEKLQkgICAgMjQJICAxCTI3Ci0JICAgIDI1ICAgIDEJMjgJdW50ZXN0ZWQKLQkgICAgMjYJICAxCTI5Ci0JICAgIDI3ICAgIDEJMzAJdW50ZXN0ZWQKLQkqLworCS8qIHNsb3QsICBwaW4sCWlycQorCSAqICAyNCAgICAgMSAgICAgMjcKKwkgKiAgMjUgICAgIDEgICAgIDI4CisJICogIDI2ICAgICAxICAgICAyOQorCSAqICAyNyAgICAgMSAgICAgMzAKKwkgKi8KKwlpcnEgPSAyNyArICgoc2xvdCArIHBpbiAtIDEpICYgMyk7CiAKLQlpcnEgPSAyNyArICgoc2xvdCArIHBpbiArIDIpICUgMyk7CS8qIEZ1ZGdlZCAqLwotCi0JcHJpbnRrKCJtYXAgaXJxOiBzbG90ICVkLCBwaW4gJWQsIGRldnNsb3QgJWQsIGlycTogJWRcbiIsc2xvdCxwaW4sZGV2c2xvdCxpcnEpOworCXByaW50aygiUENJIG1hcCBpcnE6IHNsb3QgJWQsIHBpbiAlZCwgZGV2c2xvdCAlZCwgaXJxOiAlZFxuIixzbG90LHBpbixkZXZzbG90LGlycSk7CiAKIAlyZXR1cm4gaXJxOwogfQpAQCAtMzQ3LDcgKzM1MSw2IEBACiAJLnNldHVwCQkJPSBwY2lfdmVyc2F0aWxlX3NldHVwLAogCS5zY2FuCQkJPSBwY2lfdmVyc2F0aWxlX3NjYW5fYnVzLAogCS5wcmVpbml0CQk9IHBjaV92ZXJzYXRpbGVfcHJlaW5pdCwKLQkucG9zdGluaXQJCT0gcGNpX3ZlcnNhdGlsZV9wb3N0aW5pdCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHZlcnNhdGlsZV9wY2lfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggM2I3OWQwZS4uZWFhZWM5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC02Miw3ICs2Miw3IEBACiAjIEFSTTkyMFQKIGNvbmZpZyBDUFVfQVJNOTIwVAogCWJvb2wgIlN1cHBvcnQgQVJNOTIwVCBwcm9jZXNzb3IiIGlmICFBUkNIX1MzQzI0MTAKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1MzQzI0MTAgfHwgQVJDSF9JTVggfHwgQVJDSF9BQUVDMjAwMCB8fCBBUkNIX0FUOTFSTTkyMDAKKwlkZXBlbmRzIG9uIEFSQ0hfRVA5M1hYIHx8IEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1MzQzI0MTAgfHwgQVJDSF9JTVggfHwgQVJDSF9BQUVDMjAwMCB8fCBBUkNIX0FUOTFSTTkyMDAKIAlkZWZhdWx0IHkgaWYgQVJDSF9TM0MyNDEwIHx8IEFSQ0hfQVQ5MVJNOTIwMAogCXNlbGVjdCBDUFVfMzJ2NAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUyBiL2FyY2gvYXJtL21tL2Fib3J0LWV2Ni5TCmluZGV4IGRiZDM0NjAuLjhhN2Y2NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2Fib3J0LWV2Ni5TCisrKyBiL2FyY2gvYXJtL21tL2Fib3J0LWV2Ni5TCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAkuYWxpZ24JNQogRU5UUlkodjZfZWFybHlfYWJvcnQpCi0jaWZkZWYgQ09ORklHX0NQVV9NUENPUkUKKyNpZmRlZiBDT05GSUdfQ1BVXzMydjZLCiAJY2xyZXgKICNlbHNlCiAJc3RyZXgJcjAsIHIxLCBbc3BdCQkJQCBDbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCmluZGV4IGQ5MjFjMTAuLjJjNmMyYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwpAQCAtOTYsMTUgKzk2LDE2IEBACiAjaWZkZWYgSEFSVkFSRF9DQUNIRQogCWJpYwlyMCwgcjAsICNDQUNIRV9MSU5FX1NJWkUgLSAxCiAxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKLQltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBsaW5lCiAJYWRkCXIwLCByMCwgI0NBQ0hFX0xJTkVfU0laRQogCWNtcAlyMCwgcjEKIAlibG8JMWIKICNlbmRpZgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIKLSNpZmRlZiBIQVJWQVJEX0NBQ0hFCiAJbW92CXIwLCAjMAorI2lmZGVmIEhBUlZBUkRfQ0FDSEUKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIEkrQlRCIGNhY2hlIGludmFsaWRhdGUKKyNlbHNlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNgkJQCBpbnZhbGlkYXRlIEJUQgogI2VuZGlmCiAJbW92CXBjLCBscgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb25zaXN0ZW50LmMgYi9hcmNoL2FybS9tbS9jb25zaXN0ZW50LmMKaW5kZXggYzJlZTE4ZC4uOGExYmZjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29uc2lzdGVudC5jCisrKyBiL2FyY2gvYXJtL21tL2NvbnNpc3RlbnQuYwpAQCAtMjIzLDYgKzIyMyw4IEBACiAJCXB0ZSA9IGNvbnNpc3RlbnRfcHRlW2lkeF0gKyBvZmY7CiAJCWMtPnZtX3BhZ2VzID0gcGFnZTsKIAorCQlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKKwogCQkvKgogCQkgKiBTZXQgdGhlICJkbWEgaGFuZGxlIgogCQkgKi8KQEAgLTIzMSw3ICsyMzMsNiBAQAogCQlkbyB7CiAJCQlCVUdfT04oIXB0ZV9ub25lKCpwdGUpKTsKIAotCQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiAJCQkvKgogCQkJICogeDg2IGRvZXMgbm90IG1hcmsgdGhlIHBhZ2VzIHJlc2VydmVkLi4uCiAJCQkgKi8KQEAgLTI1MCw3ICsyNTEsNiBAQAogCQkgKiBGcmVlIHRoZSBvdGhlcndpc2UgdW51c2VkIHBhZ2VzLgogCQkgKi8KIAkJd2hpbGUgKHBhZ2UgPCBlbmQpIHsKLQkJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwogCQkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCQlwYWdlKys7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IDMzMDY5NWIuLmIxMDNlNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMjQsMTQgKzI0LDE2IEBACiBzdGF0aWMgdm9pZCBmbHVzaF9wZm5fYWxpYXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgdmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyB0byA9IEFMSUFTX0ZMVVNIX1NUQVJUICsgKENBQ0hFX0NPTE9VUih2YWRkcikgPDwgUEFHRV9TSElGVCk7CisJY29uc3QgaW50IHplcm8gPSAwOwogCiAJc2V0X3B0ZShUT1BfUFRFKHRvKSwgcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMKSk7CiAJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHRvKTsKIAogCWFzbSgJIm1jcnIJcDE1LCAwLCAlMSwgJTAsIGMxNFxuIgotCSIJbWNycglwMTUsIDAsICUxLCAlMCwgYzVcbiIKKwkiCW1jcglwMTUsIDAsICUyLCBjNywgYzEwLCA0XG4iCisJIgltY3IJcDE1LCAwLCAlMiwgYzcsIGM1LCAwXG4iCiAJICAgIDoKLQkgICAgOiAiciIgKHRvKSwgInIiICh0byArIFBBR0VfU0laRSAtIEwxX0NBQ0hFX0JZVEVTKQorCSAgICA6ICJyIiAodG8pLCAiciIgKHRvICsgUEFHRV9TSVpFIC0gTDFfQ0FDSEVfQllURVMpLCAiciIgKHplcm8pCiAJICAgIDogImNjIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCA4YjI3NmVlLi44ODI3OTEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIApAQCAtNTMxLDcgKzUzMCw3IEBACiAJZm9yICg7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gdmlydF90b19wYWdlKGFkZHIpOwogCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCWluaXRfcGFnZV9jb3VudChwYWdlKTsKIAkJZnJlZV9wYWdlKGFkZHIpOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2lvcmVtYXAuYyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwppbmRleCBkYTliMzU5Li4yNWUwY2EzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMKaW5kZXggODJlYzk1NC4uM2FhODAwOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHNpemUgb2YgYW4gYXJlYSB3aGljaCB3aWxsIGJlIGludmFsaWRhdGVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKaW5kZXggNzM3NWZlOS4uNzY3ZDE1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCiAvKgogICogVGhpcyBpcyB0aGUgbWF4aW11bSBzaXplIG9mIGFuIGFyZWEgd2hpY2ggd2lsbCBiZSBpbnZhbGlkYXRlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKaW5kZXggYTEzZTAxOC4uNDcxMjg2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKIC8qCiAgKiBGdW5jdGlvbjogYXJtNzIwX3Byb2NfaW5pdCAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCmluZGV4IGQxNjUxMzguLjk1MGQzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwppbmRleCAyM2I4ZWQ5Li40MTBiMDMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggZWU5NWM1Mi4uNmRkMmJlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCmluZGV4IDdkMDQyZGMuLjAyMmU4NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCAyZDM4MjNlLi5iNTBmODdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS90bGItdjYuUyBiL2FyY2gvYXJtL21tL3RsYi12Ni5TCmluZGV4IDZmNzZiODkuLmZkNmFkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3RsYi12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3RsYi12Ni5TCkBAIC04MCw2ICs4MCw3IEBACiAJYWRkCXIwLCByMCwgI1BBR0VfU1oKIAljbXAJcjAsIHIxCiAJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjMTAsIDQJCUAgZGF0YSBzeW5jaHJvbml6YXRpb24gYmFycmllcgogCW1vdglwYywgbHIKIAogCS5zZWN0aW9uICIudGV4dC5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYyBiL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCmluZGV4IDZmOGJjMWYuLjZmODMzMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jCkBAIC0xMCwxNyArMTAsMTggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKICNpbmNsdWRlICJvcF9hcm1fbW9kZWwuaCIKIAogc3RhdGljIHN0cnVjdCBvcF9hcm1fbW9kZWxfc3BlYyAqb3BfYXJtX21vZGVsOwogc3RhdGljIGludCBvcF9hcm1fZW5hYmxlZDsKLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIG9wX2FybV9zZW07CitzdGF0aWMgREVGSU5FX01VVEVYKG9wX2FybV9tdXRleCk7CiAKLXN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyBjb3VudGVyX2NvbmZpZ1tPUF9NQVhfQ09VTlRFUl07CitzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmNvdW50ZXJfY29uZmlnOwogCiBzdGF0aWMgaW50IG9wX2FybV9jcmVhdGVfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqcm9vdCkKIHsKQEAgLTI4LDcgKzI5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBvcF9hcm1fbW9kZWwtPm51bV9jb3VudGVyczsgaSsrKSB7CiAJCXN0cnVjdCBkZW50cnkgKmRpcjsKLQkJY2hhciBidWZbMl07CisJCWNoYXIgYnVmWzRdOwogCiAJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVkIiwgaSk7CiAJCWRpciA9IG9wcm9maWxlZnNfbWtkaXIoc2IsIHJvb3QsIGJ1Zik7CkBAIC01Nyw0MCArNTgsNDAgQEAKIHsKIAlpbnQgcmV0ID0gLUVCVVNZOwogCi0JZG93bigmb3BfYXJtX3NlbSk7CisJbXV0ZXhfbG9jaygmb3BfYXJtX211dGV4KTsKIAlpZiAoIW9wX2FybV9lbmFibGVkKSB7CiAJCXJldCA9IG9wX2FybV9tb2RlbC0+c3RhcnQoKTsKIAkJb3BfYXJtX2VuYWJsZWQgPSAhcmV0OwogCX0KLQl1cCgmb3BfYXJtX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZvcF9hcm1fbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG9wX2FybV9zdG9wKHZvaWQpCiB7Ci0JZG93bigmb3BfYXJtX3NlbSk7CisJbXV0ZXhfbG9jaygmb3BfYXJtX211dGV4KTsKIAlpZiAob3BfYXJtX2VuYWJsZWQpCiAJCW9wX2FybV9tb2RlbC0+c3RvcCgpOwogCW9wX2FybV9lbmFibGVkID0gMDsKLQl1cCgmb3BfYXJtX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZvcF9hcm1fbXV0ZXgpOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG9wX2FybV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlkb3duKCZvcF9hcm1fc2VtKTsKKwltdXRleF9sb2NrKCZvcF9hcm1fbXV0ZXgpOwogCWlmIChvcF9hcm1fZW5hYmxlZCkKIAkJb3BfYXJtX21vZGVsLT5zdG9wKCk7Ci0JdXAoJm9wX2FybV9zZW0pOworCW11dGV4X3VubG9jaygmb3BfYXJtX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvcF9hcm1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7Ci0JZG93bigmb3BfYXJtX3NlbSk7CisJbXV0ZXhfbG9jaygmb3BfYXJtX211dGV4KTsKIAlpZiAob3BfYXJtX2VuYWJsZWQgJiYgb3BfYXJtX21vZGVsLT5zdGFydCgpKQogCQlvcF9hcm1fZW5hYmxlZCA9IDA7Ci0JdXAoJm9wX2FybV9zZW0pOworCW11dGV4X3VubG9jaygmb3BfYXJtX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM1LDEyICsxMzYsMTUgQEAKICNlbmRpZgogCiAJaWYgKHNwZWMpIHsKLQkJaW5pdF9NVVRFWCgmb3BfYXJtX3NlbSk7Ci0KIAkJcmV0ID0gc3BlYy0+aW5pdCgpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKKwkJY291bnRlcl9jb25maWcgPSBrY2FsbG9jKHNwZWMtPm51bV9jb3VudGVycywgc2l6ZW9mKHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyksCisJCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjb3VudGVyX2NvbmZpZykKKwkJCXJldHVybiAtRU5PTUVNOworCiAJCW9wX2FybV9tb2RlbCA9IHNwZWM7CiAJCWluaXRfZHJpdmVyZnMoKTsKIAkJb3BzLT5jcmVhdGVfZmlsZXMgPSBvcF9hcm1fY3JlYXRlX2ZpbGVzOwpAQCAtMTYyLDUgKzE2Niw1IEBACiAJCWV4aXRfZHJpdmVyZnMoKTsKIAkJb3BfYXJtX21vZGVsID0gTlVMTDsKIAl9CisJa2ZyZWUoY291bnRlcl9jb25maWcpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9vcF9jb3VudGVyLmggYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9jb3VudGVyLmgKaW5kZXggMTUzYzFkNC4uOGM1MzUxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfY291bnRlci5oCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL29wX2NvdW50ZXIuaApAQCAtMjQsNiArMjQsNiBAQAogCXVuc2lnbmVkIGxvbmcgdXNlcjsKIH07CiAKLWV4dGVybiBzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgY291bnRlcl9jb25maWdbXTsKK2V4dGVybiBzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmNvdW50ZXJfY29uZmlnOwogCiAjZW5kaWYgLyogT1BfQ09VTlRFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCBkMGY5YmI1Li44YWI1MzAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBNb24gSmFuIDkgMTI6NTY6NDIgMjAwNgorIyBMYXN0IHVwZGF0ZTogTW9uIEZlYiAyMCAxMDoxODowMiAyMDA2CiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTkwNCw3ICs5MDQsNyBAQAogZWI0MngJCQlNQUNIX0VCNDJYCQlFQjQyWAkJCTg5MQogaXEzMzFlcwkJCU1BQ0hfSVEzMzFFUwkJSVEzMzFFUwkJCTg5MgogY29zeWRzcAkJCU1BQ0hfQ09TWURTUAkJQ09TWURTUAkJCTg5MwotdXBsYXQ3ZAkJCU1BQ0hfVVBMQVQ3RAkJVVBMQVQ3RAkJCTg5NAordXBsYXQ3ZF9wcm90bwkJTUFDSF9VUExBVDdECQlVUExBVDdECQkJODk0CiBwdGRhdmluY2kJCU1BQ0hfUFREQVZJTkNJCQlQVERBVklOQ0kJCTg5NQogbWJ1cwkJCU1BQ0hfTUJVUwkJTUJVUwkJCTg5NgogbmFkaWEydmIJCU1BQ0hfTkFESUEyVkIJCU5BRElBMlZCCQk4OTcKQEAgLTkzOCwzICs5MzgsMzQgQEAKIGFrMzIyMG0JCQlNQUNIX0FLMzMyME0JCUFLMzMyME0JCQk5MjUKIGR1cmFtYXgJCQlNQUNIX0RVUkFNQVgJCURVUkFNQVgJCQk5MjYKIG4zNQkJCU1BQ0hfTjM1CQlOMzUJCQk5MjcKK3Byb25naG9ybgkJTUFDSF9QUk9OR0hPUk4JCVBST05HSE9STgkJOTI4CitmdW5keQkJCU1BQ0hfRlVORFkJCUZVTkRZCQkJOTI5Citsb2dpY3BkX3B4YTI3MAkJTUFDSF9MT0dJQ1BEX1BYQTI3MAlMT0dJQ1BEX1BYQTI3MAkJOTMwCitjcHU3NzcJCQlNQUNIX0NQVTc3NwkJQ1BVNzc3CQkJOTMxCitzaW1pY29uOTIwMQkJTUFDSF9TSU1JQ09OOTIwMQlTSU1JQ09OOTIwMQkJOTMyCitsZWFwMl9ocG0JCU1BQ0hfTEVBUDJfSFBNCQlMRUFQMl9IUE0JCTkzMworY205MjJ0eGExMAkJTUFDSF9DTTkyMlRYQTEwCQlDTTkyMlRYQTEwCQk5MzQKK3NhbmRnYXRlCQlNQUNIX1BYQQkJUFhBCQkJOTM1CitzYW5kZ2F0ZTIJCU1BQ0hfU0FOREdBVEUyCQlTQU5ER0FURTIJCTkzNgorc2FuZGdhdGUyZwkJTUFDSF9TQU5ER0FURTJHCQlTQU5ER0FURTJHCQk5MzcKK3NhbmRnYXRlMnAJCU1BQ0hfU0FOREdBVEUyUAkJU0FOREdBVEUyUAkJOTM4CitmcmVkX2phY2sJCU1BQ0hfRlJFRF9KQUNLCQlGUkVEX0pBQ0sJCTkzOQordHRnX2NvbG9yMQkJTUFDSF9UVEdfQ09MT1IxCQlUVEdfQ09MT1IxCQk5NDAKK254ZWI1MDBobWkJCU1BQ0hfTlhFQjUwMEhNSQkJTlhFQjUwMEhNSQkJOTQxCituZXRkY3U4CQkJTUFDSF9ORVREQ1U4CQlORVREQ1U4CQkJOTQyCittbDY3NTA1MF9jcHVfYm9hCU1BQ0hfTUw2NzUwNTBfQ1BVX0JPQQlNTDY3NTA1MF9DUFVfQk9BCTk0MworbmdfZnZ4NTM4CQlNQUNIX05HX0ZWWDUzOAkJTkdfRlZYNTM4CQk5NDQKK25nX2Z2czMzOAkJTUFDSF9OR19GVlMzMzgJCU5HX0ZWUzMzOAkJOTQ1Citwbng0MTAzCQkJTUFDSF9QTlg0MTAzCQlQTlg0MTAzCQkJOTQ2CitoZXNkYgkJCU1BQ0hfSEVTREIJCUhFU0RCCQkJOTQ3Cit4c2lsbwkJCU1BQ0hfWFNJTE8JCVhTSUxPCQkJOTQ4Citlc3ByZXNzbwkJTUFDSF9FU1BSRVNTTwkJRVNQUkVTU08JCTk0OQorZW1sYwkJCU1BQ0hfRU1MQwkJRU1MQwkJCTk1MAorc2lzdGVyb24JCU1BQ0hfU0lTVEVST04JCVNJU1RFUk9OCQk5NTEKK3J4MTk1MAkJCU1BQ0hfUlgxOTUwCQlSWDE5NTAJCQk5NTIKK3RzY192ZW51cwkJTUFDSF9UU0NfVkVOVVMJCVRTQ19WRU5VUwkJOTUzCitkczEwMWoJCQlNQUNIX0RTMTAxSgkJRFMxMDFKCQkJOTU0CitteGMzMDBfMzBhZHMJCU1BQ0hfTVhDMzAwMzBBRFMJTVhDMzAwMzBBRFMJCTk1NQorZnVqaXRzdV93aW1heHNvYwlNQUNIX0ZVSklUU1VfV0lNQVhTT0MJRlVKSVRTVV9XSU1BWFNPQwk5NTYKK2R1YWxwY21vZGVtCQlNQUNIX0RVQUxQQ01PREVNCURVQUxQQ01PREVNCQk5NTcKK2dlc2JjOTMxMgkJTUFDSF9HRVNCQzkzMTIJCUdFU0JDOTMxMgkJOTU4CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvZW50cnkuUyBiL2FyY2gvYXJtL3ZmcC9lbnRyeS5TCmluZGV4IDZmMTcxODcuLjlhYjFhYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC9lbnRyeS5TCisrKyBiL2FyY2gvYXJtL3ZmcC9lbnRyeS5TCkBAIC0yMiw2ICsyMiw3IEBACiAKIAkuZ2xvYmwJZG9fdmZwCiBkb192ZnA6CisJZW5hYmxlX2lycQogIAlsZHIJcjQsIC5MQ3ZmcAogCWFkZAlyMTAsIHIxMCwgI1RJX1ZGUFNUQVRFCUAgcjEwID0gd29ya3NwYWNlCiAJbGRyCXBjLCBbcjRdCQlAIGNhbGwgVkZQIGVudHJ5IHBvaW50CmRpZmYgLS1naXQgYS9hcmNoL2FybTI2L21tL2luaXQuYyBiL2FyY2gvYXJtMjYvbW0vaW5pdC5jCmluZGV4IDFmMDlhOWQuLmUzZWNhYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYvbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtMjYvbW0vaW5pdC5jCkBAIC0zMjQsNyArMzI0LDcgQEAKIAlmb3IgKDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYWRkcik7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHBhZ2UpOwogCQlmcmVlX3BhZ2UoYWRkcik7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYwppbmRleCA1MDFmYTUyLi5jNTllZTI4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYwpAQCAtMjk0NCw3ICsyOTQ0LDcgQEAKIAkJaW50IHNwZGxfZXJyOwogCQkvKiBNYXJrIG91dHB1dCBwYWdlcyBkaXJ0eS4gKi8KIAkJc3BkbF9lcnIgPSBzZXRfcGFnZV9kaXJ0eV9sb2NrKG91dHBhZ2VzW2ldKTsKLQkJREVCVUcoaWYgKHNwZGxfZXJyKXByaW50aygiY3J5cHRvY29wX2lvY3RsX3Byb2Nlc3M6IHNldF9wYWdlX2RpcnR5X2xvY2sgcmV0dXJuZWQgJWRcbiIsIHNwZGxfZXJyKSk7CisJCURFQlVHKGlmIChzcGRsX2VyciA8IDApcHJpbnRrKCJjcnlwdG9jb3BfaW9jdGxfcHJvY2Vzczogc2V0X3BhZ2VfZGlydHlfbG9jayByZXR1cm5lZCAlZFxuIiwgc3BkbF9lcnIpKTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IG5vb3V0cGFnZXM7IGkrKyl7CiAJCXB1dF9wYWdlKG91dHBhZ2VzW2ldKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDMwZGVhZjEuLmI1MDRkZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtNTIsOSArNTIsOCBAQAogCiAJaWYgKGkgPT0gMCkgewogCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOwotCQlmb3IgKGo9MDsgajxOUl9DUFVTOyBqKyspCi0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLGopOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLGopOwogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAl9CiAKQEAgLTY3LDkgKzY2LDggQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKLQkJZm9yIChqID0gMDsgaiA8IE5SX0NQVVM7IGorKykKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmhhbmRsZXItPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDRhYjNlODcxMS4uMTIzNDUxYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CkBAIC0xOTQsOCArMTk1LDYgQEAKICAqLwogdm9pZCAoKnBtX2lkbGUpKHZvaWQpOwogCi1leHRlcm4gdm9pZCBkZWZhdWx0X2lkbGUodm9pZCk7Ci0KIC8qCiAgKiBUaGUgaWRsZSB0aHJlYWQuIFRoZXJlJ3Mgbm8gdXNlZnVsIHdvcmsgdG8gYmUKICAqIGRvbmUsIHNvIGp1c3QgdHJ5IHRvIGNvbnNlcnZlIHBvd2VyIGFuZCBoYXZlIGEKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9tbS9pbml0LmMgYi9hcmNoL2NyaXMvbW0vaW5pdC5jCmluZGV4IDMxYTAwMTguLmI3ODQyZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9tbS9pbml0LmMKKysrIGIvYXJjaC9jcmlzL21tL2luaXQuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAgICAgICAgIGFkZHIgPSAodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbik7CiAgICAgICAgIGZvciAoOyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKTsgYWRkciArPSBQQUdFX1NJWkUpIHsKICAgICAgICAgICAgICAgICBDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotICAgICAgICAgICAgICAgIHNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSwgMSk7CisgICAgICAgICAgICAgICAgaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CiAgICAgICAgICAgICAgICAgZnJlZV9wYWdlKGFkZHIpOwogICAgICAgICAgICAgICAgIHRvdGFscmFtX3BhZ2VzKys7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYyBiL2FyY2gvZnJ2L2tlcm5lbC9mcnZfa3N5bXMuYwppbmRleCAwZjFjNmNiLi5hYTZiN2QwIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvZnJ2X2tzeW1zLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2Zydl9rc3ltcy5jCkBAIC0yNyw2ICsyNyw3IEBACiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwogCiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOworRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvZ2RiLXN0dWIuYyBiL2FyY2gvZnJ2L2tlcm5lbC9nZGItc3R1Yi5jCmluZGV4IDhmODYwZDkuLjUwODYwMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9nZGItc3R1Yi5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9nZGItc3R1Yi5jCkBAIC0xNDA2LDcgKzE0MDYsNyBAQAogCQkJX19kZWJ1Z19mcmFtZS0+cHNyIHw9IFBTUl9TOwogCQlfX2RlYnVnX3JlZ3MtPmJyciA9IChfX2RlYnVnX2ZyYW1lLT50YnIgJiBUQlJfVFQpIDw8IDEyOwogCQlfX2RlYnVnX3JlZ3MtPmJyciB8PSBCUlJfRUI7Ci0JCXNpZ3ZhbCA9IFNJR1hDUFU7OworCQlzaWd2YWwgPSBTSUdYQ1BVOwogCX0KIAogCUxFRFMoMHg1MDAyKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYwppbmRleCAyN2FiNGMzLi4xMWZhMzI2IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2lycS5jCkBAIC03NSw5ICs3NSw4IEBACiAJc3dpdGNoIChpKSB7CiAJY2FzZSAwOgogCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKIAogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAkJYnJlYWs7CkBAIC0xMDAsOSArOTksOCBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpIC0gMV0pOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2kgLSAxXSk7CiAjZW5kaWYKIAogCQlsZXZlbCA9IGdyb3VwLT5zb3VyY2VzW2l4XS0+bGV2ZWwgLSBmcnZfaXJxX2xldmVsczsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21tL2RtYS1hbGxvYy5jIGIvYXJjaC9mcnYvbW0vZG1hLWFsbG9jLmMKaW5kZXggMzQyODIzYS4uNjM2YjJmOCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbW0vZG1hLWFsbG9jLmMKKysrIGIvYXJjaC9mcnYvbW0vZG1hLWFsbG9jLmMKQEAgLTExNSw5ICsxMTUsNyBAQAogCSAqLwogCWlmIChvcmRlciA+IDApIHsKIAkJc3RydWN0IHBhZ2UgKnJwYWdlID0gdmlydF90b19wYWdlKHBhZ2UpOwotCi0JCWZvciAoaSA9IDE7IGkgPCAoMSA8PCBvcmRlcik7IGkrKykKLQkJCXNldF9wYWdlX2NvdW50KHJwYWdlICsgaSwgMSk7CisJCXNwbGl0X3BhZ2UocnBhZ2UsIG9yZGVyKTsKIAl9CiAKIAllcnIgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vaW5pdC5jIGIvYXJjaC9mcnYvbW0vaW5pdC5jCmluZGV4IDc2NTA4OGVhLi44ODk5YWExIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tbS9pbml0LmMKKysrIGIvYXJjaC9mcnYvbW0vaW5pdC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSAmbWVtX21hcFtwZm5dOwogCiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHBhZ2UpOwogCQlfX2ZyZWVfcGFnZShwYWdlKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CkBAIC0yMTAsNyArMjEwLDcgQEAKIAkvKiBuZXh0IHRvIGNoZWNrIHRoYXQgdGhlIHBhZ2Ugd2UgZnJlZSBpcyBub3QgYSBwYXJ0aWFsIHBhZ2UgKi8KIAlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CkBAIC0yMzAsNyArMjMwLDcgQEAKIAlpbnQgcGFnZXMgPSAwOwogCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwogCQlmcmVlX3BhZ2Uoc3RhcnQpOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCQlwYWdlcysrOwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9LY29uZmlnLmRlYnVnIGIvYXJjaC9oODMwMC9LY29uZmlnLmRlYnVnCmluZGV4IDU1MDM0ZDAuLmUwZTliY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2g4MzAwL0tjb25maWcuZGVidWcKQEAgLTM0LDcgKzM0LDcgQEAKIAloZWxwCiAJICBnZGIgc3R1YiBleGNlcHRpb24gc3VwcG9ydAogCi1jb25maWcgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKK2NvbmZpZyBTSF9TVEFOREFSRF9CSU9TCiAJYm9vbCAiVXNlIGdkYiBwcm90b2NvbCBzZXJpYWwgY29uc29sZSIKIAlkZXBlbmRzIG9uICghSDgzMDBIX1NJTSAmJiAhSDhTX1NJTSkKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2RlZmNvbmZpZyBiL2FyY2gvaDgzMDAvZGVmY29uZmlnCmluZGV4IDlkOWI0OTEuLjhmMWVjMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvZGVmY29uZmlnCisrKyBiL2FyY2gvaDgzMDAvZGVmY29uZmlnCkBAIC0zMjgsNyArMzI4LDcgQEAKIENPTkZJR19OT19LRVJORUxfTVNHPXkKICMgQ09ORklHX1NZU0NBTExfUFJJTlQgaXMgbm90IHNldAogIyBDT05GSUdfR0RCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9DTURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS0RFVl9SRVNFUlZFIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYyBiL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMKaW5kZXggNWNjNzZlZi4uNjlkNmFkMyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jCkBAIC0yNSw2ICsyNSw3IEBACiAvKiBwbGF0Zm9ybSBkZXBlbmRlbnQgc3VwcG9ydCAqLwogCiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOworRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZWQ3OWFlMi4uMTZjY2RkYyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDUsMTMgKzQ1LDE2IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAordm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAogLyoKICAqIFRoZSBpZGxlIGxvb3Agb24gYW4gSDgvMzAwLi4KICAqLwogI2lmICFkZWZpbmVkKENPTkZJR19IODMwMEhfU0lNKSAmJiAhZGVmaW5lZChDT05GSUdfSDhTX1NJTSkKLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCitzdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWlmICghbmVlZF9yZXNjaGVkKCkpIHsKQEAgLTYyLDcgKzY1LDcgQEAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogI2Vsc2UKLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCitzdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAljcHVfcmVsYXgoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvbW0vaW5pdC5jIGIvYXJjaC9oODMwMC9tbS9pbml0LmMKaW5kZXggMWUwOTI5ZC4uMDllZmM0YiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9tbS9pbml0LmMKKysrIGIvYXJjaC9oODMwMC9tbS9pbml0LmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogCWludCBwYWdlcyA9IDA7CiAJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7CiAJCWZyZWVfcGFnZShzdGFydCk7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCXBhZ2VzKys7CkBAIC0yMTksNyArMjE5LDcgQEAKIAkvKiBuZXh0IHRvIGNoZWNrIHRoYXQgdGhlIHBhZ2Ugd2UgZnJlZSBpcyBub3QgYSBwYXJ0aWFsIHBhZ2UgKi8KIAlmb3IgKDsgYWRkciArIFBBR0VfU0laRSA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz1QQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZyBiL2FyY2gvaTM4Ni9LY29uZmlnCmluZGV4IDBhZmVjODUuLmIwMDhmYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnCisrKyBiL2FyY2gvaTM4Ni9LY29uZmlnCkBAIC04MCw2ICs4MCw3IEBACiAKIGNvbmZpZyBYODZfTlVNQVEKIAlib29sICJOVU1BUSAoSUJNL1NlcXVlbnQpIgorCXNlbGVjdCBTTVAKIAlzZWxlY3QgTlVNQQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGlzIHVzZWQgZm9yIGdldHRpbmcgTGludXggdG8gcnVuIG9uIGEgKElCTS9TZXF1ZW50KSBOVU1BCkBAIC00MDAsNiArNDAxLDcgQEAKIAogY29uZmlnIE5PSElHSE1FTQogCWJvb2wgIm9mZiIKKwlkZXBlbmRzIG9uICFYODZfTlVNQVEKIAktLS1oZWxwLS0tCiAJICBMaW51eCBjYW4gdXNlIHVwIHRvIDY0IEdpZ2FieXRlcyBvZiBwaHlzaWNhbCBtZW1vcnkgb24geDg2IHN5c3RlbXMuCiAJICBIb3dldmVyLCB0aGUgYWRkcmVzcyBzcGFjZSBvZiAzMi1iaXQgeDg2IHByb2Nlc3NvcnMgaXMgb25seSA0CkBAIC00MzYsNiArNDM4LDcgQEAKIAogY29uZmlnIEhJR0hNRU00RwogCWJvb2wgIjRHQiIKKwlkZXBlbmRzIG9uICFYODZfTlVNQVEKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBpZiB5b3UgaGF2ZSBhIDMyLWJpdCBwcm9jZXNzb3IgYW5kIGJldHdlZW4gMSBhbmQgNAogCSAgZ2lnYWJ5dGVzIG9mIHBoeXNpY2FsIFJBTS4KQEAgLTUwMywxMCArNTA2LDYgQEAKIAlkZWZhdWx0IG4gaWYgWDg2X1BDCiAJZGVmYXVsdCB5IGlmIChYODZfTlVNQVEgfHwgWDg2X1NVTU1JVCkKIAotIyBOZWVkIGNvbW1lbnRzIHRvIGhlbHAgdGhlIGhhcGxlc3MgdXNlciB0cnlpbmcgdG8gdHVybiBvbiBOVU1BIHN1cHBvcnQKLWNvbW1lbnQgIk5VTUEgKE5VTUEtUSkgcmVxdWlyZXMgU01QLCA2NEdCIGhpZ2htZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFg4Nl9OVU1BUSAmJiAoIUhJR0hNRU02NEcgfHwgIVNNUCkKLQogY29tbWVudCAiTlVNQSAoU3VtbWl0KSByZXF1aXJlcyBTTVAsIDY0R0IgaGlnaG1lbSBzdXBwb3J0LCBBQ1BJIgogCWRlcGVuZHMgb24gWDg2X1NVTU1JVCAmJiAoIUhJR0hNRU02NEcgfHwgIUFDUEkpCiAKQEAgLTY2MCwxMyArNjU5LDE4IEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBSRUdQQVJNCi0JYm9vbCAiVXNlIHJlZ2lzdGVyIGFyZ3VtZW50cyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgorCWJvb2wgIlVzZSByZWdpc3RlciBhcmd1bWVudHMiCisJZGVmYXVsdCB5CiAJaGVscAotCUNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIC1tcmVncGFybT0zLiBUaGlzIHVzZXMgYSBkaWZmZXJlbnQgQUJJCi0JYW5kIHBhc3NlcyB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIG9mIGEgZnVuY3Rpb24gY2FsbCBpbiByZWdpc3RlcnMuCi0JVGhpcyB3aWxsIHByb2JhYmx5IGJyZWFrIGJpbmFyeSBvbmx5IG1vZHVsZXMuCisJQ29tcGlsZSB0aGUga2VybmVsIHdpdGggLW1yZWdwYXJtPTMuIFRoaXMgaW5zdHJ1Y3RzIGdjYyB0byB1c2UKKwlhIG1vcmUgZWZmaWNpZW50IGZ1bmN0aW9uIGNhbGwgQUJJIHdoaWNoIHBhc3NlcyB0aGUgZmlyc3QgdGhyZWUKKwlhcmd1bWVudHMgb2YgYSBmdW5jdGlvbiBjYWxsIHZpYSByZWdpc3RlcnMsIHdoaWNoIHJlc3VsdHMgaW4gZGVuc2VyCisJYW5kIGZhc3RlciBjb2RlLgorCisJSWYgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQsIHRoZW4gdGhlIGRlZmF1bHQgQUJJIG9mIHBhc3NpbmcKKwlhcmd1bWVudHMgdmlhIHRoZSBzdGFjayBpcyB1c2VkLgorCisJSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIFNFQ0NPTVAKIAlib29sICJFbmFibGUgc2VjY29tcCB0byBzYWZlbHkgY29tcHV0ZSB1bnRydXN0ZWQgYnl0ZWNvZGUiCkBAIC03MzMsNyArNzM3LDcgQEAKIAogY29uZmlnIEhPVFBMVUdfQ1BVCiAJYm9vbCAiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU01QICYmIEhPVFBMVUcgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBTTVAgJiYgSE9UUExVRyAmJiBFWFBFUklNRU5UQUwgJiYgIVg4Nl9WT1lBR0VSICYmICFYODZfUEMKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIHRvIGV4cGVyaW1lbnQgd2l0aCB0dXJuaW5nIENQVXMgb2ZmIGFuZCBvbi4gIENQVXMKIAkgIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUuCkBAIC0xMDYwLDYgKzEwNjQsNyBAQAogCiBjb25maWcgS1BST0JFUwogCWJvb2wgIktwcm9iZXMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTU9EVUxFUwogCWhlbHAKIAkgIEtwcm9iZXMgYWxsb3dzIHlvdSB0byB0cmFwIGF0IGFsbW9zdCBhbnkga2VybmVsIGFkZHJlc3MgYW5kCiAJICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uICByZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlcwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcuZGVidWcgYi9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZwppbmRleCBiZjMyZWNjLi42ZTk3ZGY2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2kzODYvS2NvbmZpZy5kZWJ1ZwpAQCAtMzEsMTIgKzMxLDIxIEBACiAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgc2xvdyBkb3duIHByb2Nlc3MgY3JlYXRpb24gc29tZXdoYXQuCiAKK2NvbmZpZyBTVEFDS19CQUNLVFJBQ0VfQ09MUworCWludCAiU3RhY2sgYmFja3RyYWNlcyBwZXIgbGluZSIgaWYgREVCVUdfS0VSTkVMCisJcmFuZ2UgMSAzCisJZGVmYXVsdCAyCisJaGVscAorCSAgU2VsZWN0cyBob3cgbWFueSBzdGFjayBiYWNrdHJhY2UgZW50cmllcyBwZXIgbGluZSB0byBkaXNwbGF5LgorCisJICBUaGlzIGNhbiBzYXZlIHNjcmVlbiBzcGFjZSB3aGVuIGRpc3BsYXlpbmcgdHJhY2VzLgorCiBjb21tZW50ICJQYWdlIGFsbG9jIGRlYnVnIGlzIGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQgb24gaTM4NiIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBTT0ZUV0FSRV9TVVNQRU5ECiAKIGNvbmZpZyBERUJVR19QQUdFQUxMT0MKLQlib29sICJQYWdlIGFsbG9jIGRlYnVnZ2luZyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAhU09GVFdBUkVfU1VTUEVORAorCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFTT0ZUV0FSRV9TVVNQRU5EICYmICFIVUdFVExCRlMKIAloZWxwCiAJICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgogCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L2VkZC5TIGIvYXJjaC9pMzg2L2Jvb3QvZWRkLlMKaW5kZXggZDhkNjlmMi4uNGI4NGVhMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2Jvb3QvZWRkLlMKKysrIGIvYXJjaC9pMzg2L2Jvb3QvZWRkLlMKQEAgLTc2LDYgKzc2LDggQEAKIAlwb3B3CSVlcwogCXBvcHcJJWJ4CiAJamMJZWRkX21icl9zaWdfZG9uZQkJIyBvbiBmYWlsdXJlLCB3ZSdyZSBkb25lLgorCWNtcGIJJDAsICVhaAkJIyBzb21lIEJJT1NlcyBkbyBub3Qgc2V0IENGCisJam5lCWVkZF9tYnJfc2lnX2RvbmUJCSMgb24gZmFpbHVyZSwgd2UncmUgZG9uZS4KIAltb3ZsCShFRERCVUYrRUREX01CUl9TSUdfT0ZGU0VUKSwgJWVheCAjIHJlYWQgc2lnIG91dCBvZiB0aGUgTUJSCiAJbW92bAklZWF4LCAoJWJ4KQkJCSMgc3RvcmUgc3VjY2VzcwogCWluY2IJKEVERF9NQlJfU0lHX05SX0JVRikJCSMgbm90ZSB0aGF0IHdlIHN0b3JlZCBzb21ldGhpbmcKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9kZWZjb25maWcgYi9hcmNoL2kzODYvZGVmY29uZmlnCmluZGV4IDNjYmU2ZTkuLjE2MjljM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9kZWZjb25maWcKKysrIGIvYXJjaC9pMzg2L2RlZmNvbmZpZwpAQCAtMSw0OSArMSw4NyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAogIworQ09ORklHX1g4Nl8zMj15CitDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKIENPTkZJR19YODY9eQogQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX0RNST15CiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQotQ09ORklHX0FVRElUPXkKLUNPTkZJR19BVURJVFNZU0NBTEw9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKLUNPTkZJR19IT1RQTFVHPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19WTTg2PXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAogIwogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKIAogIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKQEAgLTY2LDQzICsxMDQsNTAgQEAKICMgQ09ORklHX01QRU5USVVNSUkgaXMgbm90IHNldAogIyBDT05GSUdfTVBFTlRJVU1JSUkgaXMgbm90IHNldAogIyBDT05GSUdfTVBFTlRJVU1NIGlzIG5vdCBzZXQKLUNPTkZJR19NUEVOVElVTTQ9eQorIyBDT05GSUdfTVBFTlRJVU00IGlzIG5vdCBzZXQKICMgQ09ORklHX01LNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSzcgaXMgbm90IHNldAorQ09ORklHX01LNz15CiAjIENPTkZJR19NSzggaXMgbm90IHNldAogIyBDT05GSUdfTUNSVVNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUZGSUNFT04gaXMgbm90IHNldAogIyBDT05GSUdfTVdJTkNISVBDNiBpcyBub3Qgc2V0CiAjIENPTkZJR19NV0lOQ0hJUDIgaXMgbm90IHNldAogIyBDT05GSUdfTVdJTkNISVAzRCBpcyBub3Qgc2V0CisjIENPTkZJR19NR0VPREVHWDEgaXMgbm90IHNldAorIyBDT05GSUdfTUdFT0RFX0xYIGlzIG5vdCBzZXQKICMgQ09ORklHX01DWVJJWElJSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVklBQzNfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19YODZfR0VORVJJQyBpcyBub3Qgc2V0CiBDT05GSUdfWDg2X0NNUFhDSEc9eQogQ09ORklHX1g4Nl9YQUREPXkKLUNPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NworQ09ORklHX1g4Nl9MMV9DQUNIRV9TSElGVD02CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19YODZfV1BfV09SS1NfT0s9eQogQ09ORklHX1g4Nl9JTlZMUEc9eQogQ09ORklHX1g4Nl9CU1dBUD15CiBDT05GSUdfWDg2X1BPUEFEX09LPXkKK0NPTkZJR19YODZfQ01QWENIRzY0PXkKIENPTkZJR19YODZfR09PRF9BUElDPXkKIENPTkZJR19YODZfSU5URUxfVVNFUkNPUFk9eQogQ09ORklHX1g4Nl9VU0VfUFBST19DSEVDS1NVTT15CitDT05GSUdfWDg2X1VTRV8zRE5PVz15CitDT05GSUdfWDg2X1RTQz15CiAjIENPTkZJR19IUEVUX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRVRfRU1VTEFURV9SVEMgaXMgbm90IHNldAotQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfU0NIRURfU01UPXkKLUNPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1g4Nl9VUF9BUElDPXkKK0NPTkZJR19YODZfVVBfSU9BUElDPXkKIENPTkZJR19YODZfTE9DQUxfQVBJQz15CiBDT05GSUdfWDg2X0lPX0FQSUM9eQotQ09ORklHX1g4Nl9UU0M9eQogQ09ORklHX1g4Nl9NQ0U9eQogQ09ORklHX1g4Nl9NQ0VfTk9ORkFUQUw9eQotQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMPXkKKyMgQ09ORklHX1g4Nl9NQ0VfUDRUSEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkEgaXMgbm90IHNldAogIyBDT05GSUdfSThLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1g4Nl9SRUJPT1RGSVhVUFMgaXMgbm90IHNldAogIyBDT05GSUdfTUlDUk9DT0RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1g4Nl9NU1IgaXMgbm90IHNldAogIyBDT05GSUdfWDg2X0NQVUlEIGlzIG5vdCBzZXQKQEAgLTExMSw0MSArMTU2LDcxIEBACiAjIEZpcm13YXJlIERyaXZlcnMKICMKICMgQ09ORklHX0VERCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUxMX1JCVSBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0RCQVMgaXMgbm90IHNldAogQ09ORklHX05PSElHSE1FTT15CiAjIENPTkZJR19ISUdITUVNNEcgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTTY0RyBpcyBub3Qgc2V0CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzNHX09QVCBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHX01UUlI9eQogIyBDT05GSUdfRUZJIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFCQUxBTkNFPXkKLUNPTkZJR19IQVZFX0RFQ19MT0NLPXkKLSMgQ09ORklHX1JFR1BBUk0gaXMgbm90IHNldAorQ09ORklHX1JFR1BBUk09eQorIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMAorQ09ORklHX0RPVUJMRUZBVUxUPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEFDUEksIEFQTSkKICMKIENPTkZJR19QTT15CisjIENPTkZJR19QTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQ9eQorQ09ORklHX1BNX1NURF9QQVJUSVRJT049Ii9kZXYvaGRhMiIKIAogIwogIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UpIFN1cHBvcnQKICMKIENPTkZJR19BQ1BJPXkKLUNPTkZJR19BQ1BJX1NMRUVQPXkKLUNPTkZJR19BQ1BJX1NMRUVQX1BST0NfRlM9eQotQ09ORklHX0FDUElfQUM9eQotQ09ORklHX0FDUElfQkFUVEVSWT15Ci1DT05GSUdfQUNQSV9CVVRUT049eQotQ09ORklHX0FDUElfRkFOPXkKLUNPTkZJR19BQ1BJX1BST0NFU1NPUj15Ci1DT05GSUdfQUNQSV9USEVSTUFMPXkKKyMgQ09ORklHX0FDUElfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9BQyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX0JBVFRFUlkgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9CVVRUT04gaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9WSURFTyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX0hPVEtFWSBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX0ZBTiBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX1BST0NFU1NPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ1BJX0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9JQk0gaXMgbm90IHNldAogIyBDT05GSUdfQUNQSV9UT1NISUJBIGlzIG5vdCBzZXQKK0NPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKICMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0FDUElfRUM9eQogQ09ORklHX0FDUElfUE9XRVI9eQogQ09ORklHX0FDUElfU1lTVEVNPXkKICMgQ09ORklHX1g4Nl9QTV9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX0NPTlRBSU5FUiBpcyBub3Qgc2V0CiAKICMKICMgQVBNIChBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50KSBCSU9TIFN1cHBvcnQKQEAgLTE2OCwxOSArMjQzLDE4IEBACiBDT05GSUdfUENJX0JJT1M9eQogQ09ORklHX1BDSV9ESVJFQ1Q9eQogQ09ORklHX1BDSV9NTUNPTkZJRz15Ci0jIENPTkZJR19QQ0lfVVNFX1ZFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKLUNPTkZJR19QQ0lfTkFNRVM9eQotQ09ORklHX0lTQT15Ci0jIENPTkZJR19FSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19JU0FfRE1BX0FQST15CisjIENPTkZJR19JU0EgaXMgbm90IHNldAogIyBDT05GSUdfTUNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDeDIwMCBpcyBub3Qgc2V0CiAKICMKLSMgUENNQ0lBL0NhcmRCdXMgc3VwcG9ydAorIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CiAjCi0jIENPTkZJR19QQ01DSUEgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9QUk9CRT15CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogCiAjCiAjIFBDSSBIb3RwbHVnIFN1cHBvcnQKQEAgLTE5MSw4ICsyNjUsMTQ3IEBACiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQklORk1UX0FPVVQ9eQotQ09ORklHX0JJTkZNVF9NSVNDPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9eQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9eQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9eQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9eQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD15CisjIENPTkZJR19JUF9ORl9JUkMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz15CisjIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9UT1MgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0FIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GSUxURVI9eQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz15CisjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX05BVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQU5HTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0yMDEsNyArNDE0LDE0IEBACiAjCiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKLUNPTkZJR19GV19MT0FERVI9bQorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKQEAgLTIxMyw0MCArNDMzLDM2IEBACiAjCiBDT05GSUdfUEFSUE9SVD15CiBDT05GSUdfUEFSUE9SVF9QQz15Ci1DT05GSUdfUEFSUE9SVF9QQ19DTUwxPXkKICMgQ09ORklHX1BBUlBPUlRfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlRfUENfRklGTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9PVEhFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUXzEyODQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfMTI4ND15CiAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCi1DT05GSUdfUE5QPXkKLSMgQ09ORklHX1BOUF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvdG9jb2xzCi0jCi0jIENPTkZJR19JU0FQTlAgaXMgbm90IHNldAotIyBDT05GSUdfUE5QQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19QTlAgaXMgbm90IHNldAogCiAjCiAjIEJsb2NrIGRldmljZXMKICMKLUNPTkZJR19CTEtfREVWX0ZEPXkKLSMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DQVJNRUwgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfTEJEPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTI1NywzNCArNDczLDMxIEBACiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwogIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEX0lERSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9UQVNLRklMRV9JTz15CiAKICMKICMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwogIwotQ09ORklHX0lERV9HRU5FUklDPXkKLUNPTkZJR19CTEtfREVWX0NNRDY0MD15Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0MF9FTkhBTkNFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVBOUCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0MCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQogQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUloxMDAwPXkKKyMgQ09ORklHX0JMS19ERVZfUloxMDAwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQogIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19JREVETUFfUENJX0FVVE89eQogIyBDT05GSUdfSURFRE1BX09OTFlESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0FETUE9eQogIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldApAQCAtMjk0LDEwICs1MDcsMTIgQEAKICMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzUgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUElJWD15CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKQEAgLTMwNiw5ICs1MjEsOCBAQAogIyBDT05GSUdfQkxLX0RFVl9TSVM1NTEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKICMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERURNQT15CiAjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKIENPTkZJR19JREVETUFfQVVUTz15CkBAIC0zMTcsOCArNTMxLDkgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKKyMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKQEAgLTMyNyw3ICs1NDIsOCBAQAogIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIAogIwogIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKQEAgLTM0MSw3OSArNTU3LDQ3IEBACiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKICMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzcwMDBGQVNTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSEExNTQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotQ09ORklHX1NDU0lfRFBUX0kyTz1tCi0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTUVHQVJBSUQgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU0FUQT15Ci0jIENPTkZJR19TQ1NJX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0FUQV9QSUlYPXkKLSMgQ09ORklHX1NDU0lfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NBVEFfU1g0PW0KLSMgQ09ORklHX1NDU0lfU0FUQV9TSUwgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU0FUQV9TSVM9bQotIyBDT05GSUdfU0NTSV9TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DUFFGQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEFfUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODBfTU1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotQ09ORklHX1NDU0lfSVBSPW0KLSMgQ09ORklHX1NDU0lfSVBSX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSX0RVTVAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0lTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTYzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1UxNF8zNEYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9VTFRSQVNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwotIyBPbGQgQ0QtUk9NIGRyaXZlcnMgKG5vdCBTQ1NJLCBub3QgSURFKQotIwotIyBDT05GSUdfQ0RfTk9fSURFU0NTSSBpcyBub3Qgc2V0Ci0KLSMKICMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKICMKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKQEAgLTQyMiwzNyArNjA2LDE0IEBACiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCi1DT05GSUdfSUVFRTEzOTQ9eQotCi0jCi0jIFN1YnN5c3RlbSBPcHRpb25zCi0jCi0jIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTRfT1VJX0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0X0VYVFJBX0NPTkZJR19ST01TIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIFRleGFzIEluc3RydW1lbnRzIFBDSUx5bnggcmVxdWlyZXMgSTJDCi0jCi1DT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9eQotCi0jCi0jIFByb3RvY29sIERyaXZlcnMKLSMKLSMgQ09ORklHX0lFRUUxMzk0X1ZJREVPMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NF9TQlAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0X0VUSDEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTRfRFYxMzk0IGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFMTM5NF9SQVdJTz15Ci0jIENPTkZJR19JRUVFMTM5NF9DTVAgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogCiAjCiAjIEkyTyBkZXZpY2Ugc3VwcG9ydApAQCAtNDYwLDEzMCArNjIxLDEzIEBACiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotCi0jCi0jIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19JUF9ORl9DT05OVFJBQ0s9eQotIyBDT05GSUdfSVBfTkZfRlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0lSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9URlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfUVVFVUU9eQotQ09ORklHX0lQX05GX0lQVEFCTEVTPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9eQotQ09ORklHX0lQX05GX01BVENIX1RPUz15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9FQ049eQotQ09ORklHX0lQX05GX01BVENIX0RTQ1A9eQotQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9UVEw9eQotQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9TVEFURT15Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPXkKLUNPTkZJR19JUF9ORl9NQVRDSF9PV05FUj15Ci1DT05GSUdfSVBfTkZfRklMVEVSPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPXkKLUNPTkZJR19JUF9ORl9OQVQ9eQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9eQotQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9eQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPXkKLSMgQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQU5HTEU9eQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9eQotQ09ORklHX0lQX05GX1RBUkdFVF9FQ049eQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz15Ci1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz15Ci1DT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz15Ci1DT05GSUdfSVBfTkZfQVJQVEFCTEVTPXkKLUNPTkZJR19JUF9ORl9BUlBGSUxURVI9eQotQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9eQotQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KLUNPTkZJR19JUF9ORl9SQVc9bQotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZBU1RST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSFdfRkxPV0NPTlRST0wgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0IxMDAwIGlzIG5vdCBzZXQKIAogIwogIyBBUkNuZXQgZGV2aWNlcwpAQCAtNTkxLDQ2ICs2MzUsMzkgQEAKICMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAotIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAogIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwPXkKICMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPTz15Ci1DT05GSUdfODEzOVRPT19QSU89eQotIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldApAQCAtNjQ0LDIxICs2ODEsMjQgQEAKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwX05BUEkgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci1DT05GSUdfUzJJTz1tCi0jIENPTkZJR19TMklPX05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC02ODIsNiArNzIyLDggQEAKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC03MDMsMjYgKzc0NSwxNCBAQAogIwogQ09ORklHX0lOUFVUX01PVVNFREVWPXkKIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEyODAKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT0xMDI0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwotIyBJbnB1dCBJL08gZHJpdmVycwotIwotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLQotIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKQEAgLTczNCwxNSArNzY0LDI1IEBACiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQpAQCAtNzU3LDEyICs3OTcsMTQgQEAKICMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMXzgyNTBfQUNQSSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC03NzAsNyArODEyLDYgQEAKICMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAogIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUUlDMDJfVEFQRSBpcyBub3Qgc2V0CiAKICMKICMgSVBNSQpAQCAtNzgyLDkgKzgyMyw4IEBACiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorQ09ORklHX05WUkFNPXkKK0NPTkZJR19SVEM9eQogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC03OTMsMzQgKzgzMywxNDkgQEAKICMKICMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCiAjCisjIENPTkZJR19GVEFQRSBpcyBub3Qgc2V0CiBDT05GSUdfQUdQPXkKICMgQ09ORklHX0FHUF9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfQUdQX0FUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BR1BfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FHUF9BTUQ2NCBpcyBub3Qgc2V0Ci1DT05GSUdfQUdQX0lOVEVMPXkKKyMgQ09ORklHX0FHUF9JTlRFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BR1BfTlZJRElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FHUF9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfQUdQX1NXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BR1BfVklBIGlzIG5vdCBzZXQKK0NPTkZJR19BR1BfVklBPXkKICMgQ09ORklHX0FHUF9FRkZJQ0VPTiBpcyBub3Qgc2V0CiBDT05GSUdfRFJNPXkKICMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9HQU1NQSBpcyBub3Qgc2V0CiAjIENPTkZJR19EUk1fUjEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9JODEwIGlzIG5vdCBzZXQKLUNPTkZJR19EUk1fSTgzMD15CitDT05GSUdfRFJNX1JBREVPTj15CiAjIENPTkZJR19EUk1fTUdBIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01XQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NTNTUzNV9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFBFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAogCiAjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIwogIyBJMkMgc3VwcG9ydAogIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworQ09ORklHX0kyQ19BTEdPQklUPXkKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSVNBPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1ZJQVBSTz15CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19YMTIwNV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorQ09ORklHX0hXTU9OX1ZJRD15CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfSVQ4Nz15CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0hEQVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtODI4LDI3ICs5ODMsMTE4IEBACiAjIENPTkZJR19JQk1fQVNNIGlzIG5vdCBzZXQKIAogIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fREVWPXkKKworIworIyBWaWRlbyBGb3IgTGludXgKKyMKKworIworIyBWaWRlbyBBZGFwdGVycworIworIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JUODQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0JXUUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XOTk2NiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1pPUkFOIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19TQUE3MTM0PXkKKyMgQ09ORklHX1ZJREVPX1NBQTcxMzRfQUxTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NWEIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRVhJVU1fR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NYODggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRU0yOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09WQ0FNQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BVURJT19ERUNPREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFQ09ERVIgaXMgbm90IHNldAorCisjCisjIFJhZGlvIEFkYXB0ZXJzCisjCisjIENPTkZJR19SQURJT19HRU1URUtfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX01BWElSQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19NQUVTVFJPIGlzIG5vdCBzZXQKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1RVTkVSPXkKK0NPTkZJR19WSURFT19CVUY9eQorQ09ORklHX1ZJREVPX0lSPXkKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TRUxFQ1QgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUkMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkVTQSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fU0VMRUNUPXkKKyMgQ09ORklHX0ZCX0hHQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9SQURFT049eQorQ09ORklHX0ZCX1JBREVPTl9JMkM9eQorIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0dFT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC04NjQsMTAgKzExMTAsMTMgQEAKIENPTkZJR19TTkRfUkFXTUlEST15CiBDT05GSUdfU05EX1NFUVVFTkNFUj15CiAjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15Ci1DT05GSUdfU05EX01JWEVSX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1MgaXMgbm90IHNldAorQ09ORklHX1NORF9SVENUSU1FUj15CitDT05GSUdfU05EX1NFUV9SVENUSU1FUl9ERUZBVUxUPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAogCkBAIC04NzUsNiArMTEyNCw4IEBACiAjIEdlbmVyaWMgZGV2aWNlcwogIwogQ09ORklHX1NORF9NUFU0MDFfVUFSVD15CitDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorQ09ORklHX1NORF9BQzk3X0JVUz15CiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKQEAgLTg4Miw3NCArMTEzMyw1NyBAQAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiAKICMKLSMgSVNBIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9BRDE4NDggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyMzYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTY4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HVVNDTEFTU0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HVVNFWFRSRU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HVVNNQVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVSV0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URVJXQVZFX1NUQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BUSTkyWF9BRDE4NDggaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QVEk5MlhfQ1M0MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUFRJOTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCMTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9XQVZFRlJPTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSTgzMzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDNTQTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NHQUxBWFkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NTQ0FQRSBpcyBub3Qgc2V0Ci0KLSMKICMgUENJIGRldmljZXMKICMKLUNPTkZJR19TTkRfQUM5N19DT0RFQz15CisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTM1QVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfSU5URUw4WDA9eQorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZJQTgyWFg9eQorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAogCiAjCi0jIEFMU0EgVVNCIGRldmljZXMKKyMgVVNCIGRldmljZXMKICMKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CiAKICMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KQEAgLTk1OSw2ICsxMTkzLDggQEAKICMKICMgVVNCIHN1cHBvcnQKICMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTk2OCw2ICsxMjA0LDggQEAKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCkBAIC05NzUsNjggKzEyMTMsOTMgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9VSENJX0hDRD15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKLSMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkxVRVRPT1RIX1RUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfUFJJTlRFUj15CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSFA4MjAwZSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCi0jIFVTQiBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlcyAoSElEKQorIyBVU0IgSW5wdXQgRGV2aWNlcwogIwotQ09ORklHX1VTQl9ISUQ9eQotQ09ORklHX1VTQl9ISURJTlBVVD15Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfV0FDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRUdBTEFYPW0KKyMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IUFVTQlNDU0kgaXMgbm90IHNldAogCiAjCiAjIFVTQiBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZJQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1Y1MTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTjlDMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0CiAKICMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgYWRhcHRvcnMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgcG9ydCBkcml2ZXJzCkBAIC0xMDUzLDU2ICsxMzE2LDg1IEBACiAjCiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9USUdMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0NZVEhFUk09bQotQ09ORklHX1VTQl9QSElER0VUU0VSVk89bQorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAKICMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCisKKyMKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisKKyMKKyMgU04gRGV2aWNlcworIworCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIworIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VREZfRlM9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPXkKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CiAKICMKICMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0ZBVF9GUz15Ci1DT05GSUdfTVNET1NfRlM9eQorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg1MAorQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMTEsMTIgKzE0MDMsMTIgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTExMzgsMzggKzE0MzAsNDggQEAKICMKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKICMKLUNPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9eQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz15CisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKICMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAKICMKICMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKICMKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMTUiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKICMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKQEAgLTExODksNiArMTQ5MSw3IEBACiAjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiAjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldApAQCAtMTE5OSwzMSArMTUwMiwzMyBAQAogIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CiAKICMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKKyMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKICMKLUNPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX09QUk9GSUxFPXkKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfNEtTVEFDS1M9eQogQ09ORklHX1g4Nl9GSU5EX1NNUF9DT05GSUc9eQogQ09ORklHX1g4Nl9NUFBBUlNFPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCiAjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIzMiwxMyArMTUzNywxOCBAQAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCiAjIExpYnJhcnkgcm91dGluZXMKICMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWDg2X1NNUD15Ci1DT05GSUdfWDg2X0hUPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfWDg2X0JJT1NfUkVCT09UPXkKLUNPTkZJR19YODZfVFJBTVBPTElORT15Ci1DT05GSUdfWDg2X1NURF9SRVNPVVJDRVM9eQotQ09ORklHX1BDPXkKK0NPTkZJR19LVElNRV9TQ0FMQVI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNjBjM2Y3Ni4uNWI5ZWQyMSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCkBAIC03LDExICs3LDExIEBACiBvYmoteQk6PSBwcm9jZXNzLm8gc2VtYXBob3JlLm8gc2lnbmFsLm8gZW50cnkubyB0cmFwcy5vIGlycS5vIFwKIAkJcHRyYWNlLm8gdGltZS5vIGlvcG9ydC5vIGxkdC5vIHNldHVwLm8gaTgyNTkubyBzeXNfaTM4Ni5vIFwKIAkJcGNpLWRtYS5vIGkzODZfa3N5bXMubyBpMzg3Lm8gZG1pX3NjYW4ubyBib290ZmxhZy5vIFwKLQkJcXVpcmtzLm8gaTgyMzcubworCQlxdWlya3MubyBpODIzNy5vIHRvcG9sb2d5Lm8gYWx0ZXJuYXRpdmUubwogCiBvYmoteQkJCQkrPSBjcHUvCiBvYmoteQkJCQkrPSB0aW1lcnMvCi1vYmotJChDT05GSUdfQUNQSSkJCSs9IGFjcGkvCitvYmoteQkJCQkrPSBhY3BpLwogb2JqLSQoQ09ORklHX1g4Nl9CSU9TX1JFQk9PVCkJKz0gcmVib290Lm8KIG9iai0kKENPTkZJR19NQ0EpCQkrPSBtY2Eubwogb2JqLSQoQ09ORklHX1g4Nl9NU1IpCQkrPSBtc3IubwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL01ha2VmaWxlIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL01ha2VmaWxlCmluZGV4IGQ1MWM3MzEuLjdlOWFjOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1vYmoteQkJCQk6PSBib290Lm8KK29iai0kKENPTkZJR19BQ1BJKQkJKz0gYm9vdC5vCiBvYmotJChDT05GSUdfWDg2X0lPX0FQSUMpCSs9IGVhcmx5cXVpcmsubwogb2JqLSQoQ09ORklHX0FDUElfU0xFRVApCSs9IHNsZWVwLm8gd2FrZXVwLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggNzk1NzdmMC4uZjFhMjE5NCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC0xMTExLDkgKzExMTEsNiBAQAogCQlkaXNhYmxlX2FjcGkoKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KLSNpZmRlZiBfX2kzODZfXwotCWNoZWNrX2FjcGlfcGNpKCk7Ci0jZW5kaWYKIAogCWFjcGlfdGFibGVfcGFyc2UoQUNQSV9CT09ULCBhY3BpX3BhcnNlX3NiZik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvZWFybHlxdWlyay5jCmluZGV4IGYxYjlkMmEuLjJlM2I2NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Vhcmx5cXVpcmsuYwpAQCAtNywxNCArNywyMiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+CiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogCiBzdGF0aWMgaW50IF9faW5pdCBjaGVja19icmlkZ2UoaW50IHZlbmRvciwgaW50IGRldmljZSkKIHsKKyNpZmRlZiBDT05GSUdfQUNQSQogCS8qIEFjY29yZGluZyB0byBOdmlkaWEgYWxsIHRpbWVyIG92ZXJyaWRlcyBhcmUgYm9ndXMuIEp1c3QgaWdub3JlCiAJICAgdGhlbSBhbGwuICovCiAJaWYgKHZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX05WSURJQSkgewogCQlhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgPSAxOwogCX0KKyNlbmRpZgorCWlmICh2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkgJiYgdGltZXJfb3Zlcl84MjU0ID09IDEpIHsKKwkJdGltZXJfb3Zlcl84MjU0ID0gMDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQVRJIGJvYXJkIGRldGVjdGVkLiBEaXNhYmxpbmcgdGltZXIgcm91dGluZyAiCisJCQkJIm92ZXIgODI1NC5cbiIpOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmQ2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTAsMCArMSwzMjEgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKworI2RlZmluZSBERUJVRyAwCisjaWYgREVCVUcKKyMgZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBwcmludGsoZm10LCBhcmdzKQorI2Vsc2UKKyMgZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQorI2VuZGlmCisKKy8qIFVzZSBpbmxpbmUgYXNzZW1ibHkgdG8gZGVmaW5lIHRoaXMgYmVjYXVzZSB0aGUgbm9wcyBhcmUgZGVmaW5lZAorICAgYXMgaW5saW5lIGFzc2VtYmx5IHN0cmluZ3MgaW4gdGhlIGluY2x1ZGUgZmlsZXMgYW5kIHdlIGNhbm5vdAorICAgZ2V0IHRoZW0gZWFzaWx5IGludG8gc3RyaW5ncy4gKi8KK2FzbSgiXHQuZGF0YVxuaW50ZWxub3BzOiAiCisJR0VORVJJQ19OT1AxIEdFTkVSSUNfTk9QMiBHRU5FUklDX05PUDMgR0VORVJJQ19OT1A0IEdFTkVSSUNfTk9QNSBHRU5FUklDX05PUDYKKwlHRU5FUklDX05PUDcgR0VORVJJQ19OT1A4KTsKK2FzbSgiXHQuZGF0YVxuazhub3BzOiAiCisJSzhfTk9QMSBLOF9OT1AyIEs4X05PUDMgSzhfTk9QNCBLOF9OT1A1IEs4X05PUDYKKwlLOF9OT1A3IEs4X05PUDgpOworYXNtKCJcdC5kYXRhXG5rN25vcHM6ICIKKwlLN19OT1AxIEs3X05PUDIgSzdfTk9QMyBLN19OT1A0IEs3X05PUDUgSzdfTk9QNgorCUs3X05PUDcgSzdfTk9QOCk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGludGVsbm9wc1tdLCBrOG5vcHNbXSwgazdub3BzW107CitzdGF0aWMgdW5zaWduZWQgY2hhciAqaW50ZWxfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKKwlOVUxMLAorCWludGVsbm9wcywKKwlpbnRlbG5vcHMgKyAxLAorCWludGVsbm9wcyArIDEgKyAyLAorCWludGVsbm9wcyArIDEgKyAyICsgMywKKwlpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0LAorCWludGVsbm9wcyArIDEgKyAyICsgMyArIDQgKyA1LAorCWludGVsbm9wcyArIDEgKyAyICsgMyArIDQgKyA1ICsgNiwKKwlpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3LAorfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICprOF9ub3BzW0FTTV9OT1BfTUFYKzFdID0geworCU5VTEwsCisJazhub3BzLAorCWs4bm9wcyArIDEsCisJazhub3BzICsgMSArIDIsCisJazhub3BzICsgMSArIDIgKyAzLAorCWs4bm9wcyArIDEgKyAyICsgMyArIDQsCisJazhub3BzICsgMSArIDIgKyAzICsgNCArIDUsCisJazhub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2LAorCWs4bm9wcyArIDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcsCit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgKms3X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CisJTlVMTCwKKwlrN25vcHMsCisJazdub3BzICsgMSwKKwlrN25vcHMgKyAxICsgMiwKKwlrN25vcHMgKyAxICsgMiArIDMsCisJazdub3BzICsgMSArIDIgKyAzICsgNCwKKwlrN25vcHMgKyAxICsgMiArIDMgKyA0ICsgNSwKKwlrN25vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYsCisJazdub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNywKK307CitzdGF0aWMgc3RydWN0IG5vcCB7CisJaW50IGNwdWlkOworCXVuc2lnbmVkIGNoYXIgKipub3B0YWJsZTsKK30gbm9wdHlwZXNbXSA9IHsKKwl7IFg4Nl9GRUFUVVJFX0s4LCBrOF9ub3BzIH0sCisJeyBYODZfRkVBVFVSRV9LNywgazdfbm9wcyB9LAorCXsgLTEsIE5VTEwgfQorfTsKKworCitleHRlcm4gc3RydWN0IGFsdF9pbnN0ciBfX2FsdF9pbnN0cnVjdGlvbnNbXSwgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZFtdOworZXh0ZXJuIHN0cnVjdCBhbHRfaW5zdHIgX19zbXBfYWx0X2luc3RydWN0aW9uc1tdLCBfX3NtcF9hbHRfaW5zdHJ1Y3Rpb25zX2VuZFtdOworZXh0ZXJuIHU4ICpfX3NtcF9sb2Nrc1tdLCAqX19zbXBfbG9ja3NfZW5kW107CisKK2V4dGVybiB1OCBfX3NtcF9hbHRfYmVnaW5bXSwgX19zbXBfYWx0X2VuZFtdOworCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyKiogZmluZF9ub3BfdGFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyICoqbm9wdGFibGUgPSBpbnRlbF9ub3BzOworCWludCBpOworCisJZm9yIChpID0gMDsgbm9wdHlwZXNbaV0uY3B1aWQgPj0gMDsgaSsrKSB7CisJCWlmIChib290X2NwdV9oYXMobm9wdHlwZXNbaV0uY3B1aWQpKSB7CisJCQlub3B0YWJsZSA9IG5vcHR5cGVzW2ldLm5vcHRhYmxlOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG5vcHRhYmxlOworfQorCisvKiBSZXBsYWNlIGluc3RydWN0aW9ucyB3aXRoIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIHRoaXMgQ1BVIHR5cGUuCisgICBUaGlzIHJ1bnMgYmVmb3JlIFNNUCBpcyBpbml0aWFsaXplZCB0byBhdm9pZCBTTVAgcHJvYmxlbXMgd2l0aAorICAgc2VsZiBtb2RpZnlpbmcgY29kZS4gVGhpcyBpbXBsaWVzIHRoYXQgYXNzeW1ldHJpYyBzeXN0ZW1zIHdoZXJlCisgICBBUHMgaGF2ZSBsZXNzIGNhcGFiaWxpdGllcyB0aGFuIHRoZSBib290IHByb2Nlc3NvciBhcmUgbm90IGhhbmRsZWQuCisgICBUb3VnaC4gTWFrZSBzdXJlIHlvdSBkaXNhYmxlIHN1Y2ggZmVhdHVyZXMgYnkgaGFuZC4gKi8KKwordm9pZCBhcHBseV9hbHRlcm5hdGl2ZXMoc3RydWN0IGFsdF9pbnN0ciAqc3RhcnQsIHN0cnVjdCBhbHRfaW5zdHIgKmVuZCkKK3sKKwl1bnNpZ25lZCBjaGFyICoqbm9wdGFibGUgPSBmaW5kX25vcF90YWJsZSgpOworCXN0cnVjdCBhbHRfaW5zdHIgKmE7CisJaW50IGRpZmYsIGksIGs7CisKKwlEUFJJTlRLKCIlczogYWx0IHRhYmxlICVwIC0+ICVwXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXJ0LCBlbmQpOworCWZvciAoYSA9IHN0YXJ0OyBhIDwgZW5kOyBhKyspIHsKKwkJQlVHX09OKGEtPnJlcGxhY2VtZW50bGVuID4gYS0+aW5zdHJsZW4pOworCQlpZiAoIWJvb3RfY3B1X2hhcyhhLT5jcHVpZCkpCisJCQljb250aW51ZTsKKwkJbWVtY3B5KGEtPmluc3RyLCBhLT5yZXBsYWNlbWVudCwgYS0+cmVwbGFjZW1lbnRsZW4pOworCQlkaWZmID0gYS0+aW5zdHJsZW4gLSBhLT5yZXBsYWNlbWVudGxlbjsKKwkJLyogUGFkIHRoZSByZXN0IHdpdGggbm9wcyAqLworCQlmb3IgKGkgPSBhLT5yZXBsYWNlbWVudGxlbjsgZGlmZiA+IDA7IGRpZmYgLT0gaywgaSArPSBrKSB7CisJCQlrID0gZGlmZjsKKwkJCWlmIChrID4gQVNNX05PUF9NQVgpCisJCQkJayA9IEFTTV9OT1BfTUFYOworCQkJbWVtY3B5KGEtPmluc3RyICsgaSwgbm9wdGFibGVba10sIGspOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3NhdmUoc3RydWN0IGFsdF9pbnN0ciAqc3RhcnQsIHN0cnVjdCBhbHRfaW5zdHIgKmVuZCkKK3sKKwlzdHJ1Y3QgYWx0X2luc3RyICphOworCisJRFBSSU5USygiJXM6IGFsdCB0YWJsZSAlcC0lcFxuIiwgX19GVU5DVElPTl9fLCBzdGFydCwgZW5kKTsKKwlmb3IgKGEgPSBzdGFydDsgYSA8IGVuZDsgYSsrKSB7CisJCW1lbWNweShhLT5yZXBsYWNlbWVudCArIGEtPnJlcGxhY2VtZW50bGVuLAorCQkgICAgICAgYS0+aW5zdHIsCisJCSAgICAgICBhLT5pbnN0cmxlbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbHRlcm5hdGl2ZXNfc21wX2FwcGx5KHN0cnVjdCBhbHRfaW5zdHIgKnN0YXJ0LCBzdHJ1Y3QgYWx0X2luc3RyICplbmQpCit7CisJc3RydWN0IGFsdF9pbnN0ciAqYTsKKworCWZvciAoYSA9IHN0YXJ0OyBhIDwgZW5kOyBhKyspIHsKKwkJbWVtY3B5KGEtPmluc3RyLAorCQkgICAgICAgYS0+cmVwbGFjZW1lbnQgKyBhLT5yZXBsYWNlbWVudGxlbiwKKwkJICAgICAgIGEtPmluc3RybGVuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFsdGVybmF0aXZlc19zbXBfbG9jayh1OCAqKnN0YXJ0LCB1OCAqKmVuZCwgdTggKnRleHQsIHU4ICp0ZXh0X2VuZCkKK3sKKwl1OCAqKnB0cjsKKworCWZvciAocHRyID0gc3RhcnQ7IHB0ciA8IGVuZDsgcHRyKyspIHsKKwkJaWYgKCpwdHIgPCB0ZXh0KQorCQkJY29udGludWU7CisJCWlmICgqcHRyID4gdGV4dF9lbmQpCisJCQljb250aW51ZTsKKwkJKipwdHIgPSAweGYwOyAvKiBsb2NrIHByZWZpeCAqLworCX07Cit9CisKK3N0YXRpYyB2b2lkIGFsdGVybmF0aXZlc19zbXBfdW5sb2NrKHU4ICoqc3RhcnQsIHU4ICoqZW5kLCB1OCAqdGV4dCwgdTggKnRleHRfZW5kKQoreworCXVuc2lnbmVkIGNoYXIgKipub3B0YWJsZSA9IGZpbmRfbm9wX3RhYmxlKCk7CisJdTggKipwdHI7CisKKwlmb3IgKHB0ciA9IHN0YXJ0OyBwdHIgPCBlbmQ7IHB0cisrKSB7CisJCWlmICgqcHRyIDwgdGV4dCkKKwkJCWNvbnRpbnVlOworCQlpZiAoKnB0ciA+IHRleHRfZW5kKQorCQkJY29udGludWU7CisJCSoqcHRyID0gbm9wdGFibGVbMV1bMF07CisJfTsKK30KKworc3RydWN0IHNtcF9hbHRfbW9kdWxlIHsKKwkvKiB3aGF0IGlzIHRoaXMgPz8/ICovCisJc3RydWN0IG1vZHVsZQkqbW9kOworCWNoYXIJCSpuYW1lOworCisJLyogcHRycyB0byBsb2NrIHByZWZpeGVzICovCisJdTgJCSoqbG9ja3M7CisJdTgJCSoqbG9ja3NfZW5kOworCisJLyogLnRleHQgc2VnbWVudCwgbmVlZGVkIHRvIGF2b2lkIHBhdGNoaW5nIGluaXQgY29kZSA7KSAqLworCXU4CQkqdGV4dDsKKwl1OAkJKnRleHRfZW5kOworCisJc3RydWN0IGxpc3RfaGVhZCBuZXh0OworfTsKK3N0YXRpYyBMSVNUX0hFQUQoc21wX2FsdF9tb2R1bGVzKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc21wX2FsdCk7CisKK3N0YXRpYyBpbnQgc21wX2FsdF9vbmNlID0gMDsKK3N0YXRpYyBpbnQgX19pbml0IGJvb3Rvbmx5KGNoYXIgKnN0cikKK3sKKwlzbXBfYWx0X29uY2UgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgic21wLWFsdC1ib290IiwgYm9vdG9ubHkpOworCit2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCisJCQkJIHZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCisJCQkJIHZvaWQgKnRleHQsICB2b2lkICp0ZXh0X2VuZCkKK3sKKwlzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgKnNtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHNtcF9hbHRfb25jZSkgeworCQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1VQKSkKKwkJCWFsdGVybmF0aXZlc19zbXBfdW5sb2NrKGxvY2tzLCBsb2Nrc19lbmQsCisJCQkJCQl0ZXh0LCB0ZXh0X2VuZCk7CisJCXJldHVybjsKKwl9CisKKwlzbXAgPSBremFsbG9jKHNpemVvZigqc21wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gc21wKQorCQlyZXR1cm47IC8qIHdlJ2xsIHJ1biB0aGUgKHNhZmUgYnV0IHNsb3cpIFNNUCBjb2RlIHRoZW4gLi4uICovCisKKwlzbXAtPm1vZAk9IG1vZDsKKwlzbXAtPm5hbWUJPSBuYW1lOworCXNtcC0+bG9ja3MJPSBsb2NrczsKKwlzbXAtPmxvY2tzX2VuZAk9IGxvY2tzX2VuZDsKKwlzbXAtPnRleHQJPSB0ZXh0OworCXNtcC0+dGV4dF9lbmQJPSB0ZXh0X2VuZDsKKwlEUFJJTlRLKCIlczogbG9ja3MgJXAgLT4gJXAsIHRleHQgJXAgLT4gJXAsIG5hbWUgJXNcbiIsCisJCV9fRlVOQ1RJT05fXywgc21wLT5sb2Nrcywgc21wLT5sb2Nrc19lbmQsCisJCXNtcC0+dGV4dCwgc21wLT50ZXh0X2VuZCwgc21wLT5uYW1lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbXBfYWx0LCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmc21wLT5uZXh0LCAmc21wX2FsdF9tb2R1bGVzKTsKKwlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1VQKSkKKwkJYWx0ZXJuYXRpdmVzX3NtcF91bmxvY2soc21wLT5sb2Nrcywgc21wLT5sb2Nrc19lbmQsCisJCQkJCXNtcC0+dGV4dCwgc21wLT50ZXh0X2VuZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21wX2FsdCwgZmxhZ3MpOworfQorCit2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2RlbChzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJc3RydWN0IHNtcF9hbHRfbW9kdWxlICppdGVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoc21wX2FsdF9vbmNlKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc21wX2FsdCwgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlbSwgJnNtcF9hbHRfbW9kdWxlcywgbmV4dCkgeworCQlpZiAobW9kICE9IGl0ZW0tPm1vZCkKKwkJCWNvbnRpbnVlOworCQlsaXN0X2RlbCgmaXRlbS0+bmV4dCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtcF9hbHQsIGZsYWdzKTsKKwkJRFBSSU5USygiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGl0ZW0tPm5hbWUpOworCQlrZnJlZShpdGVtKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXBfYWx0LCBmbGFncyk7Cit9CisKK3ZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goaW50IHNtcCkKK3sKKwlzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgKm1vZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHNtcF9hbHRfb25jZSkKKwkJcmV0dXJuOworCUJVR19PTighc21wICYmIChudW1fb25saW5lX2NwdXMoKSA+IDEpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbXBfYWx0LCBmbGFncyk7CisJaWYgKHNtcCkgeworCQlwcmludGsoS0VSTl9JTkZPICJTTVAgYWx0ZXJuYXRpdmVzOiBzd2l0Y2hpbmcgdG8gU01QIGNvZGVcbiIpOworCQljbGVhcl9iaXQoWDg2X0ZFQVRVUkVfVVAsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOworCQljbGVhcl9iaXQoWDg2X0ZFQVRVUkVfVVAsIGNwdV9kYXRhWzBdLng4Nl9jYXBhYmlsaXR5KTsKKwkJYWx0ZXJuYXRpdmVzX3NtcF9hcHBseShfX3NtcF9hbHRfaW5zdHJ1Y3Rpb25zLAorCQkJCSAgICAgICBfX3NtcF9hbHRfaW5zdHJ1Y3Rpb25zX2VuZCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmc21wX2FsdF9tb2R1bGVzLCBuZXh0KQorCQkJYWx0ZXJuYXRpdmVzX3NtcF9sb2NrKG1vZC0+bG9ja3MsIG1vZC0+bG9ja3NfZW5kLAorCQkJCQkgICAgICBtb2QtPnRleHQsIG1vZC0+dGV4dF9lbmQpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIlNNUCBhbHRlcm5hdGl2ZXM6IHN3aXRjaGluZyB0byBVUCBjb2RlXG4iKTsKKwkJc2V0X2JpdChYODZfRkVBVFVSRV9VUCwgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSk7CisJCXNldF9iaXQoWDg2X0ZFQVRVUkVfVVAsIGNwdV9kYXRhWzBdLng4Nl9jYXBhYmlsaXR5KTsKKwkJYXBwbHlfYWx0ZXJuYXRpdmVzKF9fc21wX2FsdF9pbnN0cnVjdGlvbnMsCisJCQkJICAgX19zbXBfYWx0X2luc3RydWN0aW9uc19lbmQpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJnNtcF9hbHRfbW9kdWxlcywgbmV4dCkKKwkJCWFsdGVybmF0aXZlc19zbXBfdW5sb2NrKG1vZC0+bG9ja3MsIG1vZC0+bG9ja3NfZW5kLAorCQkJCQkJbW9kLT50ZXh0LCBtb2QtPnRleHRfZW5kKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21wX2FsdCwgZmxhZ3MpOworfQorCit2b2lkIF9faW5pdCBhbHRlcm5hdGl2ZV9pbnN0cnVjdGlvbnModm9pZCkKK3sKKwlhcHBseV9hbHRlcm5hdGl2ZXMoX19hbHRfaW5zdHJ1Y3Rpb25zLCBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kKTsKKworCS8qIHN3aXRjaCB0byBwYXRjaC1vbmNlLWF0LWJvb3R0aW1lLW9ubHkgbW9kZSBhbmQgZnJlZSB0aGUKKwkgKiB0YWJsZXMgaW4gY2FzZSB3ZSBrbm93IHRoZSBudW1iZXIgb2YgQ1BVcyB3aWxsIG5ldmVyIGV2ZXIKKwkgKiBjaGFuZ2UgKi8KKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA8IDIpCisJCXNtcF9hbHRfb25jZSA9IDE7CisjZWxzZQorCXNtcF9hbHRfb25jZSA9IDE7CisjZW5kaWYKKworCWlmIChzbXBfYWx0X29uY2UpIHsKKwkJaWYgKDEgPT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiU01QIGFsdGVybmF0aXZlczogc3dpdGNoaW5nIHRvIFVQIGNvZGVcbiIpOworCQkJc2V0X2JpdChYODZfRkVBVFVSRV9VUCwgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSk7CisJCQlzZXRfYml0KFg4Nl9GRUFUVVJFX1VQLCBjcHVfZGF0YVswXS54ODZfY2FwYWJpbGl0eSk7CisJCQlhcHBseV9hbHRlcm5hdGl2ZXMoX19zbXBfYWx0X2luc3RydWN0aW9ucywKKwkJCQkJICAgX19zbXBfYWx0X2luc3RydWN0aW9uc19lbmQpOworCQkJYWx0ZXJuYXRpdmVzX3NtcF91bmxvY2soX19zbXBfbG9ja3MsIF9fc21wX2xvY2tzX2VuZCwKKwkJCQkJCV90ZXh0LCBfZXRleHQpOworCQl9CisJCWZyZWVfaW5pdF9wYWdlcygiU01QIGFsdGVybmF0aXZlcyIsCisJCQkJKHVuc2lnbmVkIGxvbmcpX19zbXBfYWx0X2JlZ2luLAorCQkJCSh1bnNpZ25lZCBsb25nKV9fc21wX2FsdF9lbmQpOworCX0gZWxzZSB7CisJCWFsdGVybmF0aXZlc19zbXBfc2F2ZShfX3NtcF9hbHRfaW5zdHJ1Y3Rpb25zLAorCQkJCSAgICAgIF9fc21wX2FsdF9pbnN0cnVjdGlvbnNfZW5kKTsKKwkJYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfYWRkKE5VTEwsICJjb3JlIGtlcm5lbCIsCisJCQkJCSAgICBfX3NtcF9sb2NrcywgX19zbXBfbG9ja3NfZW5kLAorCQkJCQkgICAgX3RleHQsIF9ldGV4dCk7CisJCWFsdGVybmF0aXZlc19zbXBfc3dpdGNoKDApOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBpYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKaW5kZXggZjM5ZTA5ZS4uZWI1Mjc5ZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vaTgyNTMuaD4KIAogI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgorI2luY2x1ZGUgPG1hY2hfYXBpY2RlZi5oPgogI2luY2x1ZGUgPG1hY2hfaXBpLmg+CiAKICNpbmNsdWRlICJpb19wb3J0cy5oIgpAQCAtNTcwLDE2ICs1NzEsMTggQEAKICAqLwogdm9pZCBsYXBpY19zaHV0ZG93bih2b2lkKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoIWNwdV9oYXNfYXBpYykKIAkJcmV0dXJuOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY2xlYXJfbG9jYWxfQVBJQygpOwogCiAJaWYgKGVuYWJsZWRfdmlhX2FwaWNiYXNlKQogCQlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKIAotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCmluZGV4IDA1MzEyYTguLmRhMzBhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYwpAQCAtODI0LDggKzgyNCw2IEBACiAKIHN0YXRpYyB2b2lkICgqb3JpZ2luYWxfcG1faWRsZSkodm9pZCk7CiAKLWV4dGVybiB2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKTsKLQogLyoqCiAgKiBhcG1fY3B1X2lkbGUJCS0JY3B1IGlkbGluZyBmb3IgQVBNIGNhcGFibGUgTGludXgKICAqCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jZW50YXVyLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jZW50YXVyLmMKaW5kZXggZjUyNjY5ZS4uYmQ3NTYyOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlICJjcHUuaCIKIAogI2lmZGVmIENPTkZJR19YODZfT09TVE9SRQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA3ZWI5MjEzLi43ZTNkNmI2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgpAQCAtMTgsMTIgKzE5LDE2IEBACiAKICNpbmNsdWRlICJjcHUuaCIKIAorREVGSU5FX1BFUl9DUFUoc3RydWN0IFhndF9kZXNjX3N0cnVjdCwgY3B1X2dkdF9kZXNjcik7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woY3B1X2dkdF9kZXNjcik7CisKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGNoYXIsIGNwdV8xNmJpdF9zdGFja1tDUFVfMTZCSVRfU1RBQ0tfU0laRV0pOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV8xNmJpdF9zdGFjayk7CiAKLXN0YXRpYyBpbnQgY2FjaGVzaXplX292ZXJyaWRlIF9fZGV2aW5pdGRhdGEgPSAtMTsKLXN0YXRpYyBpbnQgZGlzYWJsZV94ODZfZnhzciBfX2RldmluaXRkYXRhID0gMDsKLXN0YXRpYyBpbnQgZGlzYWJsZV94ODZfc2VyaWFsX25yIF9fZGV2aW5pdGRhdGEgPSAxOworc3RhdGljIGludCBjYWNoZXNpemVfb3ZlcnJpZGUgX19jcHVpbml0ZGF0YSA9IC0xOworc3RhdGljIGludCBkaXNhYmxlX3g4Nl9meHNyIF9fY3B1aW5pdGRhdGE7CitzdGF0aWMgaW50IGRpc2FibGVfeDg2X3NlcmlhbF9uciBfX2NwdWluaXRkYXRhID0gMTsKK3N0YXRpYyBpbnQgZGlzYWJsZV94ODZfc2VwIF9fY3B1aW5pdGRhdGE7CiAKIHN0cnVjdCBjcHVfZGV2ICogY3B1X2RldnNbWDg2X1ZFTkRPUl9OVU1dID0ge307CiAKQEAgLTU1LDcgKzYwLDcgQEAKIH0KIF9fc2V0dXAoImNhY2hlc2l6ZT0iLCBjYWNoZXNpemVfc2V0dXApOwogCi1pbnQgX19kZXZpbml0IGdldF9tb2RlbF9uYW1lKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK2ludCBfX2NwdWluaXQgZ2V0X21vZGVsX25hbWUoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXVuc2lnbmVkIGludCAqdjsKIAljaGFyICpwLCAqcTsKQEAgLTg1LDcgKzkwLDcgQEAKIH0KIAogCi12b2lkIF9fZGV2aW5pdCBkaXNwbGF5X2NhY2hlaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit2b2lkIF9fY3B1aW5pdCBkaXNwbGF5X2NhY2hlaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdW5zaWduZWQgaW50IG4sIGR1bW15LCBlY3gsIGVkeCwgbDJzaXplOwogCkBAIC0xMjYsNyArMTMxLDcgQEAKIC8qIGluIHBhcnRpY3VsYXIsIGlmIENQVUlEIGxldmVscyAweDgwMDAwMDAyLi40IGFyZSBzdXBwb3J0ZWQsIHRoaXMgaXNuJ3QgdXNlZCAqLwogCiAvKiBMb29rIHVwIENQVSBuYW1lcyBieSB0YWJsZSBsb29rdXAuICovCi1zdGF0aWMgY2hhciBfX2RldmluaXQgKnRhYmxlX2xvb2t1cF9tb2RlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitzdGF0aWMgY2hhciBfX2NwdWluaXQgKnRhYmxlX2xvb2t1cF9tb2RlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJc3RydWN0IGNwdV9tb2RlbF9pbmZvICppbmZvOwogCkBAIC0xNDcsNyArMTUyLDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgZ2V0X2NwdV92ZW5kb3Ioc3RydWN0IGNwdWluZm9feDg2ICpjLCBpbnQgZWFybHkpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgZ2V0X2NwdV92ZW5kb3Ioc3RydWN0IGNwdWluZm9feDg2ICpjLCBpbnQgZWFybHkpCiB7CiAJY2hhciAqdiA9IGMtPng4Nl92ZW5kb3JfaWQ7CiAJaW50IGk7CkBAIC0xODMsNiArMTg4LDE0IEBACiBfX3NldHVwKCJub2Z4c3IiLCB4ODZfZnhzcl9zZXR1cCk7CiAKIAorc3RhdGljIGludCBfX2luaXQgeDg2X3NlcF9zZXR1cChjaGFyICogcykKK3sKKwlkaXNhYmxlX3g4Nl9zZXAgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgibm9zZXAiLCB4ODZfc2VwX3NldHVwKTsKKworCiAvKiBTdGFuZGFyZCBtYWNybyB0byBzZWUgaWYgYSBzcGVjaWZpYyBmbGFnIGlzIGNoYW5nZWFibGUgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZsYWdfaXNfY2hhbmdlYWJsZV9wKHUzMiBmbGFnKQogewpAQCAtMjA2LDcgKzIxOSw3IEBACiAKIAogLyogUHJvYmUgZm9yIHRoZSBDUFVJRCBpbnN0cnVjdGlvbiAqLwotc3RhdGljIGludCBfX2RldmluaXQgaGF2ZV9jcHVpZF9wKHZvaWQpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBoYXZlX2NwdWlkX3Aodm9pZCkKIHsKIAlyZXR1cm4gZmxhZ19pc19jaGFuZ2VhYmxlX3AoWDg2X0VGTEFHU19JRCk7CiB9CkBAIC0yNTAsNyArMjYzLDcgQEAKIAl9CiB9CiAKLXZvaWQgX19kZXZpbml0IGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICogYykKK3ZvaWQgX19jcHVpbml0IGdlbmVyaWNfaWRlbnRpZnkoc3RydWN0IGNwdWluZm9feDg2ICogYykKIHsKIAl1MzIgdGZtcywgeGx2bDsKIAlpbnQganVuazsKQEAgLTI3NCwxMCArMjg3LDEwIEBACiAJCQljLT54ODZfY2FwYWJpbGl0eVs0XSA9IGV4Y2FwOwogCQkJYy0+eDg2ID0gKHRmbXMgPj4gOCkgJiAxNTsKIAkJCWMtPng4Nl9tb2RlbCA9ICh0Zm1zID4+IDQpICYgMTU7Ci0JCQlpZiAoYy0+eDg2ID09IDB4ZikgeworCQkJaWYgKGMtPng4NiA9PSAweGYpCiAJCQkJYy0+eDg2ICs9ICh0Zm1zID4+IDIwKSAmIDB4ZmY7CisJCQlpZiAoYy0+eDg2ID49IDB4NikKIAkJCQljLT54ODZfbW9kZWwgKz0gKCh0Zm1zID4+IDE2KSAmIDB4RikgPDwgNDsKLQkJCX0gCiAJCQljLT54ODZfbWFzayA9IHRmbXMgJiAxNTsKIAkJfSBlbHNlIHsKIAkJCS8qIEhhdmUgQ1BVSUQgbGV2ZWwgMCBvbmx5IC0gdW5oZWFyZCBvZiAqLwpAQCAtMzAzLDcgKzMxNiw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHNxdWFzaF90aGVfc3R1cGlkX3NlcmlhbF9udW1iZXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHNxdWFzaF90aGVfc3R1cGlkX3NlcmlhbF9udW1iZXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BOKSAmJiBkaXNhYmxlX3g4Nl9zZXJpYWxfbnIgKSB7CiAJCS8qIERpc2FibGUgcHJvY2Vzc29yIHNlcmlhbCBudW1iZXIgKi8KQEAgLTMzMSw3ICszNDQsNyBAQAogLyoKICAqIFRoaXMgZG9lcyB0aGUgaGFyZCB3b3JrIG9mIGFjdHVhbGx5IHBpY2tpbmcgYXBhcnQgdGhlIENQVSBzdHVmZi4uLgogICovCi12b2lkIF9fZGV2aW5pdCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICpjKQordm9pZCBfX2NwdWluaXQgaWRlbnRpZnlfY3B1KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAlpbnQgaTsKIApAQCAtNDAxLDYgKzQxNCwxMCBAQAogCQljbGVhcl9iaXQoWDg2X0ZFQVRVUkVfWE1NLCBjLT54ODZfY2FwYWJpbGl0eSk7CiAJfQogCisJLyogU0VQIGRpc2FibGVkPyAqLworCWlmIChkaXNhYmxlX3g4Nl9zZXApCisJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9TRVAsIGMtPng4Nl9jYXBhYmlsaXR5KTsKKwogCWlmIChkaXNhYmxlX3BzZSkKIAkJY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BTRSwgYy0+eDg2X2NhcGFiaWxpdHkpOwogCkBAIC00MTMsNyArNDMwLDcgQEAKIAkJZWxzZQogCQkJLyogTGFzdCByZXNvcnQuLi4gKi8KIAkJCXNwcmludGYoYy0+eDg2X21vZGVsX2lkLCAiJTAyeC8lMDJ4IiwKLQkJCQljLT54ODZfdmVuZG9yLCBjLT54ODZfbW9kZWwpOworCQkJCWMtPng4NiwgYy0+eDg2X21vZGVsKTsKIAl9CiAKIAkvKiBOb3cgdGhlIGZlYXR1cmUgZmxhZ3MgYmV0dGVyIHJlZmxlY3QgYWN0dWFsIENQVSBmZWF0dXJlcyEgKi8KQEAgLTQ0OSw3ICs0NjYsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl9IVAotdm9pZCBfX2RldmluaXQgZGV0ZWN0X2h0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3ZvaWQgX19jcHVpbml0IGRldGVjdF9odChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdTMyIAllYXgsIGVieCwgZWN4LCBlZHg7CiAJaW50IAlpbmRleF9tc2IsIGNvcmVfYml0czsKQEAgLTQ5Niw3ICs1MTMsNyBAQAogfQogI2VuZGlmCiAKLXZvaWQgX19kZXZpbml0IHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3ZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAljaGFyICp2ZW5kb3IgPSBOVUxMOwogCkBAIC01MTksNyArNTM2LDcgQEAKIAkJcHJpbnRrKCJcbiIpOwogfQogCi1jcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkIF9fZGV2aW5pdGRhdGEgPSBDUFVfTUFTS19OT05FOworY3B1bWFza190IGNwdV9pbml0aWFsaXplZCBfX2NwdWluaXRkYXRhID0gQ1BVX01BU0tfTk9ORTsKIAogLyogVGhpcyBpcyBoYWNreS4gOikKICAqIFdlJ3JlIGVtdWxhdGluZyBmdXR1cmUgYmVoYXZpb3IuCkBAIC01NjYsMTMgKzU4MywxNCBAQAogICogYW5kIElEVC4gV2UgcmVsb2FkIHRoZW0gbmV2ZXJ0aGVsZXNzLCB0aGlzIGZ1bmN0aW9uIGFjdHMgYXMgYQogICogJ0NQVSBzdGF0ZSBiYXJyaWVyJywgbm90aGluZyBzaG91bGQgZ2V0IGFjcm9zcy4KICAqLwotdm9pZCBfX2RldmluaXQgY3B1X2luaXQodm9pZCkKK3ZvaWQgX19jcHVpbml0IGNwdV9pbml0KHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdHNzX3N0cnVjdCAqIHQgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkID0gJmN1cnJlbnQtPnRocmVhZDsKLQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CisJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQ7CiAJX191MzIgc3RrMTZfb2ZmID0gKF9fdTMyKSZwZXJfY3B1KGNwdV8xNmJpdF9zdGFjaywgY3B1KTsKKwlzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0ICpjcHVfZ2R0X2Rlc2NyID0gJnBlcl9jcHUoY3B1X2dkdF9kZXNjciwgY3B1KTsKIAogCWlmIChjcHVfdGVzdF9hbmRfc2V0KGNwdSwgY3B1X2luaXRpYWxpemVkKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDUFUjJWQgYWxyZWFkeSBpbml0aWFsaXplZCFcbiIsIGNwdSk7CkBAIC01OTAsNiArNjA4LDI1IEBACiAJfQogCiAJLyoKKwkgKiBUaGlzIGlzIGEgaG9ycmlibGUgaGFjayB0byBhbGxvY2F0ZSB0aGUgR0RULiAgVGhlIHByb2JsZW0KKwkgKiBpcyB0aGF0IGNwdV9pbml0KCkgaXMgY2FsbGVkIHJlYWxseSBlYXJseSBmb3IgdGhlIGJvb3QgQ1BVCisJICogKGFuZCBoZW5jZSBuZWVkcyBib290bWVtKSBidXQgbXVjaCBsYXRlciBmb3IgdGhlIHNlY29uZGFyeQorCSAqIENQVXMsIHdoZW4gYm9vdG1lbSB3aWxsIGhhdmUgZ29uZSBhd2F5CisJICovCisJaWYgKE5PREVfREFUQSgwKS0+YmRhdGEtPm5vZGVfYm9vdG1lbV9tYXApIHsKKwkJZ2R0ID0gKHN0cnVjdCBkZXNjX3N0cnVjdCAqKWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKKwkJLyogYWxsb2NfYm9vdG1lbV9wYWdlcyBwYW5pY3Mgb24gZmFpbHVyZSwgc28gbm8gY2hlY2sgKi8KKwkJbWVtc2V0KGdkdCwgMCwgUEFHRV9TSVpFKTsKKwl9IGVsc2UgeworCQlnZHQgPSAoc3RydWN0IGRlc2Nfc3RydWN0ICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAodW5saWtlbHkoIWdkdCkpIHsKKwkJCXByaW50ayhLRVJOX0NSSVQgIkNQVSVkIGZhaWxlZCB0byBhbGxvY2F0ZSBHRFRcbiIsIGNwdSk7CisJCQlmb3IgKDs7KQorCQkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJfQorCX0KKworCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgcGVyLUNQVSBHRFQgd2l0aCB0aGUgYm9vdCBHRFQsCiAJICogYW5kIHNldCB1cCB0aGUgR0RUIGRlc2NyaXB0b3I6CiAJICovCkBAIC02MDEsMTAgKzYzOCwxMCBAQAogCQkoKCgoX191NjQpc3RrMTZfb2ZmKSA8PCAzMikgJiAweGZmMDAwMDAwMDAwMDAwMDBVTEwpIHwKIAkJKENQVV8xNkJJVF9TVEFDS19TSVpFIC0gMSk7CiAKLQljcHVfZ2R0X2Rlc2NyW2NwdV0uc2l6ZSA9IEdEVF9TSVpFIC0gMTsKLSAJY3B1X2dkdF9kZXNjcltjcHVdLmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylnZHQ7CisJY3B1X2dkdF9kZXNjci0+c2l6ZSA9IEdEVF9TSVpFIC0gMTsKKyAJY3B1X2dkdF9kZXNjci0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWdkdDsKIAotCWxvYWRfZ2R0KCZjcHVfZ2R0X2Rlc2NyW2NwdV0pOworCWxvYWRfZ2R0KGNwdV9nZHRfZGVzY3IpOwogCWxvYWRfaWR0KCZpZHRfZGVzY3IpOwogCiAJLyoKQEAgLTY0Niw3ICs2ODMsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi12b2lkIF9fZGV2aW5pdCBjcHVfdW5pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCBjcHVfdW5pbml0KHZvaWQpCiB7CiAJaW50IGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJY3B1X2NsZWFyKGNwdSwgY3B1X2luaXRpYWxpemVkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCBlMTFhMDkyLi43OThkYTdjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0xMTQ1LDE2ICsxMTQ1LDE0IEBACiB7CiAJdW5zaWduZWQgaW50IGksIHN1cHBvcnRlZF9jcHVzID0gMDsKIAotCWZvciAoaT0wOyBpPE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNwdV9vbmxpbmUoaSkpCi0JCQljb250aW51ZTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJaWYgKGNoZWNrX3N1cHBvcnRlZF9jcHUoaSkpCiAJCQlzdXBwb3J0ZWRfY3B1cysrOwogCX0KIAogCWlmIChzdXBwb3J0ZWRfY3B1cyA9PSBudW1fb25saW5lX2NwdXMoKSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgJWQgQU1EIEF0aGxvbiA2NCAvIE9wdGVyb24gcHJvY2Vzc29ycyAoIiBWRVJTSU9OICIpXG4iLAotCQkJc3VwcG9ydGVkX2NwdXMpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgJWQgQU1EIEF0aGxvbiA2NCAvIE9wdGVyb24gIgorCQkJInByb2Nlc3NvcnMgKCIgVkVSU0lPTiAiKVxuIiwgc3VwcG9ydGVkX2NwdXMpOwogCQlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmNwdWZyZXFfYW1kNjRfZHJpdmVyKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKaW5kZXggMjhjYzVkNS4uY2ZjNDI3NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCkBAIC03NSw3ICs3NSw5IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCiAJCTogIj1EIiAocmVzdWx0KQotCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLCAiZCIgKHNtaV9wb3J0KSwgIkQiICgwKSwgIlMiIChtYWdpYykKKwkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiICgwKSwgImQiIChzbWlfcG9ydCksCisJCQkiRCIgKDApLCAiUyIgKG1hZ2ljKQorCQk6ICJtZW1vcnkiCiAJKTsKIAogCWRwcmludGsoInJlc3VsdCBpcyAleFxuIiwgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDhjMDEyMDEuLjUzODZiMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtMjksNyArMjksNyBAQAogc3RydWN0IG1vdnNsX21hc2sgbW92c2xfbWFzayBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAKLXZvaWQgX19kZXZpbml0IGVhcmx5X2ludGVsX3dvcmthcm91bmQoc3RydWN0IGNwdWluZm9feDg2ICpjKQordm9pZCBfX2NwdWluaXQgZWFybHlfaW50ZWxfd29ya2Fyb3VuZChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJaWYgKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKIAkJcmV0dXJuOwpAQCAtNDQsNyArNDQsNyBAQAogICoJVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHdlIGRvIGNwdSBpZGVudCB3b3JrCiAgKi8KICAKLWludCBfX2RldmluaXQgcHByb193aXRoX3JhbV9idWcodm9pZCkKK2ludCBfX2NwdWluaXQgcHByb193aXRoX3JhbV9idWcodm9pZCkKIHsKIAkvKiBVc2VzIGRhdGEgZnJvbSBlYXJseV9jcHVfZGV0ZWN0IG5vdyAqLwogCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgpAQCAtNjIsNyArNjIsNyBAQAogICogUDQgWGVvbiBlcnJhdGEgMDM3IHdvcmthcm91bmQuCiAgKiBIYXJkd2FyZSBwcmVmZXRjaGVyIG1heSBjYXVzZSBzdGFsZSBkYXRhIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBjYWNoZS4KICAqLwotc3RhdGljIHZvaWQgX19kZXZpbml0IEludGVsX2VycmF0YV93b3JrYXJvdW5kcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgSW50ZWxfZXJyYXRhX3dvcmthcm91bmRzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAl1bnNpZ25lZCBsb25nIGxvLCBoaTsKIApAQCAtODEsNyArODEsNyBAQAogLyoKICAqIGZpbmQgb3V0IHRoZSBudW1iZXIgb2YgcHJvY2Vzc29yIGNvcmVzIG9uIHRoZSBkaWUKICAqLwotc3RhdGljIGludCBfX2RldmluaXQgbnVtX2NwdV9jb3JlcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBudW1fY3B1X2NvcmVzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwogCkBAIC05Niw3ICs5Niw3IEBACiAJCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9pbnRlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9pbnRlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdW5zaWduZWQgaW50IGwyID0gMDsKIAljaGFyICpwID0gTlVMTDsKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXJldHVybiBzaXplOwogfQogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgaW50ZWxfY3B1X2RldiBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBjcHVfZGV2IGludGVsX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKIAkuY192ZW5kb3IJPSAiSW50ZWwiLAogCS5jX2lkZW50IAk9IHsgIkdlbnVpbmVJbnRlbCIgfSwKIAkuY19tb2RlbHMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IGZmZTU4Y2UuLmNlNjE5MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbmV3X2wxZCA9IDAsIG5ld19sMWkgPSAwOyAvKiBDYWNoZSBzaXplcyBmcm9tIGNwdWlkKDQpICovCiAJdW5zaWduZWQgaW50IG5ld19sMiA9IDAsIG5ld19sMyA9IDAsIGk7IC8qIENhY2hlIHNpemVzIGZyb20gY3B1aWQoNCkgKi8KIAotCWlmIChjLT5jcHVpZF9sZXZlbCA+IDQpIHsKKwlpZiAoYy0+Y3B1aWRfbGV2ZWwgPiAzKSB7CiAJCXN0YXRpYyBpbnQgaXNfaW5pdGlhbGl6ZWQ7CiAKIAkJaWYgKGlzX2luaXRpYWxpemVkID09IDApIHsKQEAgLTMzMCw3ICszMzAsNyBAQAogCQl9CiAJfQogfQotc3RhdGljIHZvaWQgX19kZXZpbml0IGNhY2hlX3JlbW92ZV9zaGFyZWRfY3B1X21hcCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgaW5kZXgpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgY2FjaGVfcmVtb3ZlX3NoYXJlZF9jcHVfbWFwKHVuc2lnbmVkIGludCBjcHUsIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgX2NwdWlkNF9pbmZvCSp0aGlzX2xlYWYsICpzaWJsaW5nX2xlYWY7CiAJaW50IHNpYmxpbmc7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9wcm9jLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9wcm9jLmMKaW5kZXggODlhODVhZi4uNWNmYmQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvcHJvYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L3Byb2MuYwpAQCAtNDAsNyArNDAsNyBAQAogCQkvKiBPdGhlciAoTGludXgtZGVmaW5lZCkgKi8KIAkJImN4bW14IiwgIms2X210cnIiLCAiY3lyaXhfYXJyIiwgImNlbnRhdXJfbWNyIiwKIAkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJImNvbnN0YW50X3RzYyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCSJjb25zdGFudF90c2MiLCAidXAiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMgYi9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKaW5kZXggZDQ5ZGJlOC4uZTNjNWZjYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCQlyZXR1cm4gMTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JaWYgKCF1c2VyX21vZGUocmVncykpIHsKKwlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkgewogCQljcmFzaF9maXh1cF9zc19lc3AoJmZpeGVkX3JlZ3MsIHJlZ3MpOwogCQlyZWdzID0gJmZpeGVkX3JlZ3M7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9kbWlfc2Nhbi5jIGIvYXJjaC9pMzg2L2tlcm5lbC9kbWlfc2Nhbi5jCmluZGV4IDZhOTNkNzUuLmNhMmEwY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvZG1pX3NjYW4uYworKysgYi9hcmNoL2kzODYva2VybmVsL2RtaV9zY2FuLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXN0cnVjdCBkbWlfZGV2aWNlICpkZXY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQljaGFyICpkID0gKChjaGFyICopIGRtKSArIChpICogMik7CisJCWNoYXIgKmQgPSAoY2hhciAqKShkbSArIDEpICsgKGkgKiAyKTsKIAogCQkvKiBTa2lwIGRpc2FibGVkIGRldmljZSAqLwogCQlpZiAoKCpkICYgMHg4MCkgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZWZpLmMgYi9hcmNoL2kzODYva2VybmVsL2VmaS5jCmluZGV4IGVjYWQ1MTkuLjdlYzZjZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lZmkuYwpAQCAtNzAsMTAgKzcwLDEzIEBACiB7CiAJdW5zaWduZWQgbG9uZyBjcjQ7CiAJdW5zaWduZWQgbG9uZyB0ZW1wOworCXN0cnVjdCBYZ3RfZGVzY19zdHJ1Y3QgKmNwdV9nZHRfZGVzY3I7CiAKIAlzcGluX2xvY2soJmVmaV9ydF9sb2NrKTsKIAlsb2NhbF9pcnFfc2F2ZShlZmlfcnRfZWZsYWdzKTsKIAorCWNwdV9nZHRfZGVzY3IgPSAmcGVyX2NwdShjcHVfZ2R0X2Rlc2NyLCAwKTsKKwogCS8qCiAJICogSWYgSSBkb24ndCBoYXZlIFBTRSwgSSBzaG91bGQganVzdCBkdXBsaWNhdGUgdHdvIGVudHJpZXMgaW4gcGFnZQogCSAqIGRpcmVjdG9yeS4gSWYgSSBoYXZlIFBTRSwgSSBqdXN0IG5lZWQgdG8gZHVwbGljYXRlIG9uZSBlbnRyeSBpbgpAQCAtMTAzLDE3ICsxMDYsMTggQEAKIAkgKi8KIAlsb2NhbF9mbHVzaF90bGIoKTsKIAotCWNwdV9nZHRfZGVzY3JbMF0uYWRkcmVzcyA9IF9fcGEoY3B1X2dkdF9kZXNjclswXS5hZGRyZXNzKTsKLQlsb2FkX2dkdCgoc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqKSBfX3BhKCZjcHVfZ2R0X2Rlc2NyWzBdKSk7CisJY3B1X2dkdF9kZXNjci0+YWRkcmVzcyA9IF9fcGEoY3B1X2dkdF9kZXNjci0+YWRkcmVzcyk7CisJbG9hZF9nZHQoY3B1X2dkdF9kZXNjcik7CiB9CiAKIHN0YXRpYyB2b2lkIGVmaV9jYWxsX3BoeXNfZXBpbG9nKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBjcjQ7CisJc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqY3B1X2dkdF9kZXNjciA9ICZwZXJfY3B1KGNwdV9nZHRfZGVzY3IsIDApOwogCi0JY3B1X2dkdF9kZXNjclswXS5hZGRyZXNzID0KLQkJKHVuc2lnbmVkIGxvbmcpIF9fdmEoY3B1X2dkdF9kZXNjclswXS5hZGRyZXNzKTsKLQlsb2FkX2dkdCgmY3B1X2dkdF9kZXNjclswXSk7CisJY3B1X2dkdF9kZXNjci0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKV9fdmEoY3B1X2dkdF9kZXNjci0+YWRkcmVzcyk7CisJbG9hZF9nZHQoY3B1X2dkdF9kZXNjcik7CisKIAljcjQgPSByZWFkX2NyNCgpOwogCiAJaWYgKGNyNCAmIFg4Nl9DUjRfUFNFKSB7CkBAIC01MzksNyArNTQzLDcgQEAKIAkJaWYgKChtZC0+cGh5c19hZGRyICsgKG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpKSA+CiAJCSAgICAweDEwMDAwMDAwMFVMTCkKIAkJCWNvbnRpbnVlOwotCQlyZXMgPSBhbGxvY19ib290bWVtX2xvdyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9BVE9NSUMpOwogCQlzd2l0Y2ggKG1kLT50eXBlKSB7CiAJCWNhc2UgRUZJX1JFU0VSVkVEX1RZUEU6CiAJCQlyZXMtPm5hbWUgPSAiUmVzZXJ2ZWQgTWVtb3J5IjsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUwppbmRleCA0ZDcwNDcyLi5jZmM2ODNmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5TCkBAIC0yMjYsNiArMjI2LDEwIEBACiAJcHVzaGwgJWVheAkJCSMgc2F2ZSBvcmlnX2VheAogCVNBVkVfQUxMCiAJR0VUX1RIUkVBRF9JTkZPKCVlYnApCisJdGVzdGwgJFRGX01BU0ssRUZMQUdTKCVlc3ApCisJanogbm9fc2luZ2xlc3RlcAorCW9ybCAkX1RJRl9TSU5HTEVTVEVQLFRJX2ZsYWdzKCVlYnApCitub19zaW5nbGVzdGVwOgogCQkJCQkjIHN5c3RlbSBjYWxsIHRyYWNpbmcgaW4gb3BlcmF0aW9uIC8gZW11bGF0aW9uCiAJLyogTm90ZSwgX1RJRl9TRUNDT01QIGlzIGJpdCBudW1iZXIgOCwgYW5kIHNvIGl0IG5lZWRzIHRlc3R3IGFuZCBub3QgdGVzdGIgKi8KIAl0ZXN0dyAkKF9USUZfU1lTQ0FMTF9FTVV8X1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU0VDQ09NUHxfVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVlYnApCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2hlYWQuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCmluZGV4IDJiZWU2NDkuLjNkZWJjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCkBAIC00NTAsNyArNDUwLDYgQEAKIAogLmdsb2JsIGJvb3RfZ2R0X2Rlc2NyCiAuZ2xvYmwgaWR0X2Rlc2NyCi0uZ2xvYmwgY3B1X2dkdF9kZXNjcgogCiAJQUxJR04KICMgZWFybHkgYm9vdCBHRFQgZGVzY3JpcHRvciAobXVzdCB1c2UgMToxIGFkZHJlc3MgbWFwcGluZykKQEAgLTQ3MCw4ICs0NjksNiBAQAogCS53b3JkIEdEVF9FTlRSSUVTKjgtMQogCS5sb25nIGNwdV9nZHRfdGFibGUKIAotCS5maWxsIE5SX0NQVVMtMSw4LDAJCSMgc3BhY2UgZm9yIHRoZSBvdGhlciBHRFQgZGVzY3JpcHRvcnMKLQogLyoKICAqIFRoZSBib290X2dkdF90YWJsZSBtdXN0IG1pcnJvciB0aGUgZXF1aXZhbGVudCBpbiBzZXR1cC5TIGFuZCBpcwogICogdXNlZCBvbmx5IGZvciBib290aW5nLgpAQCAtNDg1LDcgKzQ4Miw3IEBACiAvKgogICogVGhlIEdsb2JhbCBEZXNjcmlwdG9yIFRhYmxlIGNvbnRhaW5zIDI4IHF1YWR3b3JkcywgcGVyLUNQVS4KICAqLwotCS5hbGlnbiBQQUdFX1NJWkVfYXNtCisJLmFsaWduIEwxX0NBQ0hFX0JZVEVTCiBFTlRSWShjcHVfZ2R0X3RhYmxlKQogCS5xdWFkIDB4MDAwMDAwMDAwMDAwMDAwMAkvKiBOVUxMIGRlc2NyaXB0b3IgKi8KIAkucXVhZCAweDAwMDAwMDAwMDAwMDAwMDAJLyogMHgwYiByZXNlcnZlZCAqLwpAQCAtNTM0LDUgKzUzMSwzIEBACiAJLnF1YWQgMHgwMDAwMDAwMDAwMDAwMDAwCS8qIDB4ZjAgLSB1bnVzZWQgKi8KIAkucXVhZCAweDAwMDAwMDAwMDAwMDAwMDAJLyogMHhmOCAtIEdEVCBlbnRyeSAzMTogZG91YmxlLWZhdWx0IFRTUyAqLwogCi0JLyogQmUgc3VyZSB0aGlzIGlzIHplcm9lZCB0byBhdm9pZCBmYWxzZSB2YWxpZGF0aW9ucyBpbiBYZW4gKi8KLQkuZmlsbCBQQUdFX1NJWkVfYXNtIC8gOCAtIEdEVF9FTlRSSUVTLDgsMApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMgYi9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwppbmRleCAzOTk5YmVjLi4wNTUzMjUwIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYworKysgYi9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwpAQCAtMyw4ICszLDYgQEAKICNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogCi1FWFBPUlRfU1lNQk9MX0dQTChjcHVfZ2R0X2Rlc2NyKTsKLQogRVhQT1JUX1NZTUJPTChfX2Rvd25fZmFpbGVkKTsKIEVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKTsKIEVYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZF90cnlsb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKaW5kZXggZjJkZDIxOC4uMzExYjRlNyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9pb19hcGljLmMKQEAgLTUxLDYgKzUxLDggQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7CiAKK2ludCB0aW1lcl9vdmVyXzgyNTQgX19pbml0ZGF0YSA9IDE7CisKIC8qCiAgKglJcyB0aGUgU2lTIEFQSUMgcm13IGJ1ZyBwcmVzZW50ID8KICAqCS0xID0gZG9uJ3Qga25vdywgMCA9IG5vLCAxID0geWVzCkBAIC0zNDksOCArMzUxLDggQEAKIHsKIAlpbnQgaSwgajsKIAlEcHJpbnRrKCJSb3RhdGluZyBJUlFzIGFtb25nIENQVXMuXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGNwdV9vbmxpbmUoaSkgJiYgKGogPCBOUl9JUlFTKTsgaisrKSB7CisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWZvciAoaiA9IDA7IGogPCBOUl9JUlFTOyBqKyspIHsKIAkJCWlmICghaXJxX2Rlc2Nbal0uYWN0aW9uKQogCQkJCWNvbnRpbnVlOwogCQkJLyogSXMgaXQgYSBzaWduaWZpY2FudCBsb2FkID8gICovCkBAIC0zNzksNyArMzgxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGltYmFsYW5jZSA9IDA7CiAJY3B1bWFza190IGFsbG93ZWRfbWFzaywgdGFyZ2V0X2NwdV9tYXNrLCB0bXA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJZm9yX2VhY2hfY3B1KGkpIHsKIAkJaW50IHBhY2thZ2VfaW5kZXg7CiAJCUNQVV9JUlEoaSkgPSAwOwogCQlpZiAoIWNwdV9vbmxpbmUoaSkpCkBAIC00MjAsOSArNDIyLDcgQEAKIAkJfQogCX0KIAkvKiBGaW5kIHRoZSBsZWFzdCBsb2FkZWQgcHJvY2Vzc29yIHBhY2thZ2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmICghY3B1X29ubGluZShpKSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlpZiAoaSAhPSBDUFVfVE9fUEFDS0FHRUlOREVYKGkpKQogCQkJY29udGludWU7CiAJCWlmIChtaW5fY3B1X2lycSA+IENQVV9JUlEoaSkpIHsKQEAgLTQzOSw5ICs0MzksNyBAQAogCSAqLwogCXRtcF9jcHVfaXJxID0gMDsKIAl0bXBfbG9hZGVkID0gLTE7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNwdV9vbmxpbmUoaSkpCi0JCQljb250aW51ZTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJaWYgKGkgIT0gQ1BVX1RPX1BBQ0tBR0VJTkRFWChpKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobWF4X2NwdV9pcnEgPD0gQ1BVX0lSUShpKSkgCkBAIC02MTcsOSArNjE1LDcgQEAKIAlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEgJiYgIWNwdXNfZW1wdHkodG1wKSkKIAkJcGh5c2ljYWxfYmFsYW5jZSA9IDE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmICghY3B1X29ubGluZShpKSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlpcnFfY3B1X2RhdGFbaV0uaXJxX2RlbHRhID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBOUl9JUlFTLCBHRlBfS0VSTkVMKTsKIAkJaXJxX2NwdV9kYXRhW2ldLmxhc3RfaXJxID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBOUl9JUlFTLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGlycV9jcHVfZGF0YVtpXS5pcnFfZGVsdGEgPT0gTlVMTCB8fCBpcnFfY3B1X2RhdGFbaV0ubGFzdF9pcnEgPT0gTlVMTCkgewpAQCAtNjM2LDkgKzYzMiwxMSBAQAogCWVsc2UgCiAJCXByaW50ayhLRVJOX0VSUiAiYmFsYW5jZWRfaXJxX2luaXQ6IGZhaWxlZCB0byBzcGF3biBiYWxhbmNlZF9pcnEiKTsKIGZhaWxlZDoKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJZm9yX2VhY2hfY3B1KGkpIHsKIAkJa2ZyZWUoaXJxX2NwdV9kYXRhW2ldLmlycV9kZWx0YSk7CisJCWlycV9jcHVfZGF0YVtpXS5pcnFfZGVsdGEgPSBOVUxMOwogCQlrZnJlZShpcnFfY3B1X2RhdGFbaV0ubGFzdF9pcnEpOworCQlpcnFfY3B1X2RhdGFbaV0ubGFzdF9pcnEgPSBOVUxMOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE3NTksNyArMTc1Nyw4IEBACiAJICogRG9uJ3QgY2hlY2sgSS9PIEFQSUMgSURzIGZvciB4QVBJQyBzeXN0ZW1zLiAgVGhleSBoYXZlCiAJICogbm8gbWVhbmluZyB3aXRob3V0IHRoZSBzZXJpYWwgQVBJQyBidXMuCiAJICovCi0JaWYgKCEoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYgYm9vdF9jcHVfZGF0YS54ODYgPCAxNSkpCisJaWYgKCEoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCisJCXx8IEFQSUNfWEFQSUMoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKQogCQlyZXR1cm47CiAJLyoKIAkgKiBUaGlzIGlzIGJyb2tlbjsgYW55dGhpbmcgd2l0aCBhIHJlYWwgY3B1IGNvdW50IGhhcyB0bwpAQCAtMjI2Nyw3ICsyMjY2LDggQEAKIAlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDAsIEFQSUNfTFZUX01BU0tFRCB8IEFQSUNfRE1fRVhUSU5UKTsKIAlpbml0XzgyNTlBKDEpOwogCXRpbWVyX2FjayA9IDE7Ci0JZW5hYmxlXzgyNTlBX2lycSgwKTsKKwlpZiAodGltZXJfb3Zlcl84MjU0ID4gMCkKKwkJZW5hYmxlXzgyNTlBX2lycSgwKTsKIAogCXBpbjEgID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9JTlQpOwogCWFwaWMxID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfSU5UKTsKQEAgLTIzOTIsNiArMjM5MiwyMCBAQAogCQlwcmludF9JT19BUElDKCk7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Rpc2FibGVfODI1NF90aW1lcihjaGFyICpzKQoreworCXRpbWVyX292ZXJfODI1NCA9IC0xOworCXJldHVybiAxOworfQorc3RhdGljIGludCBfX2luaXQgc2V0dXBfZW5hYmxlXzgyNTRfdGltZXIoY2hhciAqcykKK3sKKwl0aW1lcl9vdmVyXzgyNTQgPSAyOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJkaXNhYmxlXzgyNTRfdGltZXIiLCBzZXR1cF9kaXNhYmxlXzgyNTRfdGltZXIpOworX19zZXR1cCgiZW5hYmxlXzgyNTRfdGltZXIiLCBzZXR1cF9lbmFibGVfODI1NF90aW1lcik7CisKIC8qCiAgKglDYWxsZWQgYWZ0ZXIgYWxsIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lLiBJZiB3ZSBkaWRudCBmaW5kIGFueQogICoJQVBJQyBidWdzIHRoZW4gd2UgY2FuIGFsbG93IHRoZSBtb2RpZnkgZmFzdCBwYXRoCkBAIC0yNTY2LDggKzI1ODAsMTAgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpCi0JCQlwYW5pYygiSU9BUElDWyVkXTogVW5hYmxlIGNoYW5nZSBhcGljX2lkIVxuIiwgaW9hcGljKTsKKwkJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKKwkJCXByaW50aygiSU9BUElDWyVkXTogVW5hYmxlIHRvIGNoYW5nZSBhcGljX2lkIVxuIiwgaW9hcGljKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCX0KIAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9JTkZPCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDY0ODNlZWIuLjdhNTkwNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC01OCw2ICs1OCwxMSBAQAogCiBpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKKwkvKiBpbnNuOiBtdXN0IGJlIG9uIHNwZWNpYWwgZXhlY3V0YWJsZSBwYWdlIG9uIGkzODYuICovCisJcC0+YWluc24uaW5zbiA9IGdldF9pbnNuX3Nsb3QoKTsKKwlpZiAoIXAtPmFpbnNuLmluc24pCisJCXJldHVybiAtRU5PTUVNOworCiAJbWVtY3B5KHAtPmFpbnNuLmluc24sIHAtPmFkZHIsIE1BWF9JTlNOX1NJWkUgKiBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CiAJcC0+b3Bjb2RlID0gKnAtPmFkZHI7CiAJcmV0dXJuIDA7CkBAIC03Nyw2ICs4MiwxMyBAQAogCQkJICAgKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIgKyBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CiB9CiAKK3ZvaWQgX19rcHJvYmVzIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCW11dGV4X2xvY2soJmtwcm9iZV9tdXRleCk7CisJZnJlZV9pbnNuX3Nsb3QocC0+YWluc24uaW5zbik7CisJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKIHsKIAlrY2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKQEAgLTExMSw3ICsxMjMsNyBAQAogCWlmIChwLT5vcGNvZGUgPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikKIAkJcmVncy0+ZWlwID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkcjsKIAllbHNlCi0JCXJlZ3MtPmVpcCA9ICh1bnNpZ25lZCBsb25nKSZwLT5haW5zbi5pbnNuOworCQlyZWdzLT5laXAgPSAodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuOwogfQogCiAvKiBDYWxsZWQgd2l0aCBrcmV0cHJvYmVfbG9jayBoZWxkICovCkBAIC0zNTEsNyArMzYzLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nICp0b3MgPSAodW5zaWduZWQgbG9uZyAqKSZyZWdzLT5lc3A7CiAJdW5zaWduZWQgbG9uZyBuZXh0X2VpcCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBjb3B5X2VpcCA9ICh1bnNpZ25lZCBsb25nKSZwLT5haW5zbi5pbnNuOworCXVuc2lnbmVkIGxvbmcgY29weV9laXAgPSAodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuOwogCXVuc2lnbmVkIGxvbmcgb3JpZ19laXAgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyOwogCiAJc3dpdGNoIChwLT5haW5zbi5pbnNuWzBdKSB7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IGE5MTJmZWQ0Li5mNzNkNzM3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL2kzODYva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMTE2LDEzICsxMTYsMTMgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSJcdGxqbXAgJCJTVFIoX19LRVJORUxfQ1MpIiwkMWZcbiIKIAkJIlx0MTpcbiIKLQkJIlx0bW92bCAkIlNUUihfX0tFUk5FTF9EUykiLCVlYXhcbiIKLQkJIlx0bW92bCAlZWF4LCVkc1xuIgotCQkiXHRtb3ZsICVlYXgsJWVzXG4iCi0JCSJcdG1vdmwgJWVheCwlZnNcbiIKLQkJIlx0bW92bCAlZWF4LCVnc1xuIgotCQkiXHRtb3ZsICVlYXgsJXNzXG4iCi0JCSk7CisJCSJcdG1vdmwgJCJTVFIoX19LRVJORUxfRFMpIiwlJWVheFxuIgorCQkiXHRtb3ZsICUlZWF4LCUlZHNcbiIKKwkJIlx0bW92bCAlJWVheCwlJWVzXG4iCisJCSJcdG1vdmwgJSVlYXgsJSVmc1xuIgorCQkiXHRtb3ZsICUlZWF4LCUlZ3NcbiIKKwkJIlx0bW92bCAlJWVheCwlJXNzXG4iCisJCTo6OiAiZWF4IiwgIm1lbW9yeSIpOwogI3VuZGVmIFNUUgogI3VuZGVmIF9fU1RSCiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9taWNyb2NvZGUuYwppbmRleCBkM2ZkZjAwLi41MzkwYjUyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTI1MCw4ICsyNTEsOCBAQAogCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJCi0JCWZvciAoY3B1X251bSA9IDA7IGNwdV9udW0gPCBudW1fb25saW5lX2NwdXMoKTsgY3B1X251bSsrKSB7CisKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHVfbnVtKSB7CiAJCQlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1X251bTsKIAkJCWlmICh1Y2ktPmVyciAhPSBNQ19OT1RGT1VORCkgLyogYWxyZWFkeSBmb3VuZCBhIG1hdGNoIG9yIG5vdCBhbiBvbmxpbmUgY3B1Ki8KIAkJCQljb250aW51ZTsKQEAgLTI5Myw3ICsyOTQsNyBAQAogCQkJCQllcnJvciA9IC1FRkFVTFQ7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KLQkJCQlmb3IgKGNwdV9udW0gPSAwOyBjcHVfbnVtIDwgbnVtX29ubGluZV9jcHVzKCk7IGNwdV9udW0rKykgeworCQkJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1X251bSkgewogCQkJCQlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1X251bTsKIAkJCQkJaWYgKHVjaS0+ZXJyICE9IE1DX05PVEZPVU5EKSAvKiBhbHJlYWR5IGZvdW5kIGEgbWF0Y2ggb3Igbm90IGFuIG9ubGluZSBjcHUqLwogCQkJCQkJY29udGludWU7CkBAIC0zMDQsNyArMzA1LDkgQEAKIAkJCX0KIAkJfQogCQkvKiBub3cgY2hlY2sgaWYgYW55IGNwdSBoYXMgbWF0Y2hlZCAqLwotCQlmb3IgKGNwdV9udW0gPSAwLCBhbGxvY2F0ZWRfZmxhZyA9IDAsIHN1bSA9IDA7IGNwdV9udW0gPCBudW1fb25saW5lX2NwdXMoKTsgY3B1X251bSsrKSB7CisJCWFsbG9jYXRlZF9mbGFnID0gMDsKKwkJc3VtID0gMDsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHVfbnVtKSB7CiAJCQlpZiAodWNvZGVfY3B1X2luZm9bY3B1X251bV0uZXJyID09IE1DX01BUktFRCkgeyAKIAkJCQlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1X251bTsKIAkJCQlpZiAoIWFsbG9jYXRlZF9mbGFnKSB7CkBAIC00MTUsMTIgKzQxOCwxMiBAQAogCX0KIAogb3V0X2ZyZWU6Ci0JZm9yIChpID0gMDsgaSA8IG51bV9vbmxpbmVfY3B1cygpOyBpKyspIHsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJaWYgKHVjb2RlX2NwdV9pbmZvW2ldLm1jKSB7CiAJCQlpbnQgajsKIAkJCXZvaWQgKnRtcCA9IHVjb2RlX2NwdV9pbmZvW2ldLm1jOwogCQkJdmZyZWUodG1wKTsKLQkJCWZvciAoaiA9IGk7IGogPCBudW1fb25saW5lX2NwdXMoKTsgaisrKSB7CisJCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKIAkJCQlpZiAodWNvZGVfY3B1X2luZm9bal0ubWMgPT0gdG1wKQogCQkJCQl1Y29kZV9jcHVfaW5mb1tqXS5tYyA9IE5VTEw7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21vZHVsZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9tb2R1bGUuYwppbmRleCA1MTQ5YzhhLi40NzBjZjk3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbW9kdWxlLmMKQEAgLTEwNCwyNiArMTA0LDM4IEBACiAJcmV0dXJuIC1FTk9FWEVDOwogfQogCi1leHRlcm4gdm9pZCBhcHBseV9hbHRlcm5hdGl2ZXModm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7IAotCiBpbnQgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCSAgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKIAkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQogewotCWNvbnN0IEVsZl9TaGRyICpzOworCWNvbnN0IEVsZl9TaGRyICpzLCAqdGV4dCA9IE5VTEwsICphbHQgPSBOVUxMLCAqbG9ja3MgPSBOVUxMOwogCWNoYXIgKnNlY3N0cmluZ3MgPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CiAKLQkvKiBsb29rIGZvciAuYWx0aW5zdHJ1Y3Rpb25zIHRvIHBhdGNoICovIAogCWZvciAocyA9IHNlY2hkcnM7IHMgPCBzZWNoZHJzICsgaGRyLT5lX3NobnVtOyBzKyspIHsgCi0JCXZvaWQgKnNlZzsgCQkKLQkJaWYgKHN0cmNtcCgiLmFsdGluc3RydWN0aW9ucyIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSkKLQkJCWNvbnRpbnVlOwotCQlzZWcgPSAodm9pZCAqKXMtPnNoX2FkZHI7IAotCQlhcHBseV9hbHRlcm5hdGl2ZXMoc2VnLCBzZWcgKyBzLT5zaF9zaXplKTsgCi0JfSAJCisJCWlmICghc3RyY21wKCIudGV4dCIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSkKKwkJCXRleHQgPSBzOworCQlpZiAoIXN0cmNtcCgiLmFsdGluc3RydWN0aW9ucyIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSkKKwkJCWFsdCA9IHM7CisJCWlmICghc3RyY21wKCIuc21wX2xvY2tzIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpKQorCQkJbG9ja3M9IHM7CisJfQorCisJaWYgKGFsdCkgeworCQkvKiBwYXRjaCAuYWx0aW5zdHJ1Y3Rpb25zICovCisJCXZvaWQgKmFzZWcgPSAodm9pZCAqKWFsdC0+c2hfYWRkcjsKKwkJYXBwbHlfYWx0ZXJuYXRpdmVzKGFzZWcsIGFzZWcgKyBhbHQtPnNoX3NpemUpOworCX0KKwlpZiAobG9ja3MgJiYgdGV4dCkgeworCQl2b2lkICpsc2VnID0gKHZvaWQgKilsb2Nrcy0+c2hfYWRkcjsKKwkJdm9pZCAqdHNlZyA9ICh2b2lkICopdGV4dC0+c2hfYWRkcjsKKwkJYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfYWRkKG1lLCBtZS0+bmFtZSwKKwkJCQkJICAgIGxzZWcsIGxzZWcgKyBsb2Nrcy0+c2hfc2l6ZSwKKwkJCQkJICAgIHRzZWcsIHRzZWcgKyB0ZXh0LT5zaF9zaXplKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CisJYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKG1vZCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDAxMDJmM2QuLjhkOGFhOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC03MTAsNyArNzEwLDcgQEAKIAkJICogUmVhZCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdGFibGUuICBBbnl0aGluZyBoZXJlIHdpbGwKIAkJICogb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLgogCQkgKi8KLQkJaWYgKCFzbXBfcmVhZF9tcGMoKHZvaWQgKiltcGYtPm1wZl9waHlzcHRyKSkgeworCQlpZiAoIXNtcF9yZWFkX21wYyhwaHlzX3RvX3ZpcnQobXBmLT5tcGZfcGh5c3B0cikpKSB7CiAJCQlzbXBfZm91bmRfY29uZmlnID0gMDsKIAkJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIE1QIHRhYmxlIGVycm9ycyBkZXRlY3RlZCEuLi5cbiIpOwogCQkJcHJpbnRrKEtFUk5fRVJSICIuLi4gZGlzYWJsaW5nIFNNUCBzdXBwb3J0LiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOwpAQCAtODI4LDYgKzgyOCw4IEBACiAJCXNtcF9zY2FuX2NvbmZpZyhhZGRyZXNzLCAweDQwMCk7CiB9CiAKK2ludCBlczcwMDBfcGxhdDsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJLWJhc2VkIE1QIENvbmZpZ3VyYXRpb24KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC05MTUsNiArOTE3LDcgQEAKIAl1MzIJCQlnc2lfYmFzZSkKIHsKIAlpbnQJCQlpZHggPSAwOworCWludAkJCXRtcGlkOwogCiAJaWYgKG5yX2lvYXBpY3MgPj0gTUFYX0lPX0FQSUNTKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IE1heCAjIG9mIEkvTyBBUElDcyAoJWQpIGV4Y2VlZGVkICIKQEAgLTkzNCwxMCArOTM3LDE2IEBACiAJbXBfaW9hcGljc1tpZHhdLm1wY19hcGljYWRkciA9IGFkZHJlc3M7CiAKIAlzZXRfZml4bWFwX25vY2FjaGUoRklYX0lPX0FQSUNfQkFTRV8wICsgaWR4LCBhZGRyZXNzKTsKLQlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSAmJiAoYm9vdF9jcHVfZGF0YS54ODYgPCAxNSkpCi0JCW1wX2lvYXBpY3NbaWR4XS5tcGNfYXBpY2lkID0gaW9fYXBpY19nZXRfdW5pcXVlX2lkKGlkeCwgaWQpOworCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCisJCSYmICFBUElDX1hBUElDKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkKKwkJdG1waWQgPSBpb19hcGljX2dldF91bmlxdWVfaWQoaWR4LCBpZCk7CiAJZWxzZQotCQltcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWNpZCA9IGlkOworCQl0bXBpZCA9IGlkOworCWlmICh0bXBpZCA9PSAtMSkgeworCQlucl9pb2FwaWNzLS07CisJCXJldHVybjsKKwl9CisJbXBfaW9hcGljc1tpZHhdLm1wY19hcGljaWQgPSB0bXBpZDsKIAltcF9pb2FwaWNzW2lkeF0ubXBjX2FwaWN2ZXIgPSBpb19hcGljX2dldF92ZXJzaW9uKGlkeCk7CiAJCiAJLyogCkBAIC0xMDA1LDggKzEwMTQsNiBAQAogCXJldHVybjsKIH0KIAotaW50IGVzNzAwMF9wbGF0OwotCiB2b2lkIF9faW5pdCBtcF9jb25maWdfYWNwaV9sZWdhY3lfaXJxcyAodm9pZCkKIHsKIAlzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgaW50c3JjOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKaW5kZXggNjNmMzlhNy4uOTA3NDgxOCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL2kzODYva2VybmVsL25taS5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJbWRlbGF5KCgxMCoxMDAwKS9ubWlfaHopOyAvLyB3YWl0IDEwIHRpY2tzCiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7CisJZm9yX2VhY2hfY3B1KGNwdSkgewogI2lmZGVmIENPTkZJR19TTVAKIAkJLyogQ2hlY2sgY3B1X2NhbGxpbl9tYXAgaGVyZSBiZWNhdXNlIHRoYXQgaXMgc2V0CiAJCSAgIGFmdGVyIHRoZSB0aW1lciBpcyBzdGFydGVkLiAqLwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAJCXdybXNyKGJhc2UraSwgMCwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV93YXRjaGRvZ19jb3VudGVyKGNvbnN0IGNoYXIgKmRlc2NyKQorc3RhdGljIHZvaWQgd3JpdGVfd2F0Y2hkb2dfY291bnRlcihjb25zdCBjaGFyICpkZXNjcikKIHsKIAl1NjQgY291bnQgPSAodTY0KWNwdV9raHogKiAxMDAwOwogCkBAIC01MTAsNyArNTEwLDcgQEAKIAkgKiBKdXN0IHJlc2V0IHRoZSBhbGVydCBjb3VudGVycywgKG90aGVyIENQVXMgbWlnaHQgYmUKIAkgKiBzcGlubmluZyBvbiBsb2NrcyB3ZSBob2xkKToKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQorCWZvcl9lYWNoX2NwdShpKQogCQlhbGVydF9jb3VudGVyW2ldID0gMDsKIAogCS8qCkBAIC01NDMsOCArNTQzLDggQEAKIAkJCS8qCiAJCQkgKiBkaWVfbm1pIHdpbGwgcmV0dXJuIE9OTFkgaWYgTk9USUZZX1NUT1AgaGFwcGVucy4uCiAJCQkgKi8KLQkJCWRpZV9ubWkocmVncywgIk5NSSBXYXRjaGRvZyBkZXRlY3RlZCBMT0NLVVAiKTsKLQorCQkJZGllX25taShyZWdzLCAiQlVHOiBOTUkgV2F0Y2hkb2cgZGV0ZWN0ZWQgTE9DS1VQIik7CisJfSBlbHNlIHsKIAkJbGFzdF9pcnFfc3Vtc1tjcHVdID0gc3VtOwogCQlhbGVydF9jb3VudGVyW2NwdV0gPSAwOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMDQ4MDQ1NC4uMjk5ZTYxNiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCXByaW50aygiRUlQOiAlMDR4Ols8JTA4bHg+XSBDUFU6ICVkXG4iLDB4ZmZmZiAmIHJlZ3MtPnhjcyxyZWdzLT5laXAsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJcHJpbnRfc3ltYm9sKCJFSVAgaXMgYXQgJXNcbiIsIHJlZ3MtPmVpcCk7CiAKLQlpZiAodXNlcl9tb2RlKHJlZ3MpKQorCWlmICh1c2VyX21vZGVfdm0ocmVncykpCiAJCXByaW50aygiIEVTUDogJTA0eDolMDhseCIsMHhmZmZmICYgcmVncy0+eHNzLHJlZ3MtPmVzcCk7CiAJcHJpbnRrKCIgRUZMQUdTOiAlMDhseCAgICAlcyAgKCVzICUuKnMpXG4iLAogCSAgICAgICByZWdzLT5lZmxhZ3MsIHByaW50X3RhaW50ZWQoKSwgc3lzdGVtX3V0c25hbWUucmVsZWFzZSwKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2kzODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDVjMWZiNmEuLjUwNjQ2MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtMzQsMTAgKzM0LDEwIEBACiAKIC8qCiAgKiBEZXRlcm1pbmVzIHdoaWNoIGZsYWdzIHRoZSB1c2VyIGhhcyBhY2Nlc3MgdG8gWzEgPSBhY2Nlc3MsIDAgPSBubyBhY2Nlc3NdLgotICogUHJvaGliaXRzIGNoYW5naW5nIElEKDIxKSwgVklQKDIwKSwgVklGKDE5KSwgVk0oMTcpLCBJT1BMKDEyLTEzKSwgSUYoOSkuCisgKiBQcm9oaWJpdHMgY2hhbmdpbmcgSUQoMjEpLCBWSVAoMjApLCBWSUYoMTkpLCBWTSgxNyksIE5UKDE0KSwgSU9QTCgxMi0xMyksIElGKDkpLgogICogQWxzbyBtYXNrcyByZXNlcnZlZCBiaXRzICgzMS0yMiwgMTUsIDUsIDMsIDEpLgogICovCi0jZGVmaW5lIEZMQUdfTUFTSyAweDAwMDU0ZGQ1CisjZGVmaW5lIEZMQUdfTUFTSyAweDAwMDUwZGQ1CiAKIC8qIHNldCdzIHRoZSB0cmFwIGZsYWcuICovCiAjZGVmaW5lIFRSQVBfRkxBRyAweDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2VtYXBob3JlLmMKaW5kZXggNzQ1NWFiNi4uOTY3ZGM3NCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zZW1hcGhvcmUuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NlbWFwaG9yZS5jCkBAIC0xMTAsMTEgKzExMCwxMSBAQAogIi5hbGlnbgk0XG4iCiAiLmdsb2JsCV9fd3JpdGVfbG9ja19mYWlsZWRcbiIKICJfX3dyaXRlX2xvY2tfZmFpbGVkOlxuXHQiCi0JTE9DSyAiYWRkbAkkIiBSV19MT0NLX0JJQVNfU1RSICIsKCVlYXgpXG4iCisJTE9DS19QUkVGSVggImFkZGwJJCIgUldfTE9DS19CSUFTX1NUUiAiLCglZWF4KVxuIgogIjE6CXJlcDsgbm9wXG5cdCIKIAkiY21wbAkkIiBSV19MT0NLX0JJQVNfU1RSICIsKCVlYXgpXG5cdCIKIAkiam5lCTFiXG5cdCIKLQlMT0NLICJzdWJsCSQiIFJXX0xPQ0tfQklBU19TVFIgIiwoJWVheClcblx0IgorCUxPQ0tfUFJFRklYICJzdWJsCSQiIFJXX0xPQ0tfQklBU19TVFIgIiwoJWVheClcblx0IgogCSJqbnoJX193cml0ZV9sb2NrX2ZhaWxlZFxuXHQiCiAJInJldCIKICk7CkBAIC0xMjQsMTEgKzEyNCwxMSBAQAogIi5hbGlnbgk0XG4iCiAiLmdsb2JsCV9fcmVhZF9sb2NrX2ZhaWxlZFxuIgogIl9fcmVhZF9sb2NrX2ZhaWxlZDpcblx0IgotCUxPQ0sgImluY2wJKCVlYXgpXG4iCisJTE9DS19QUkVGSVggImluY2wJKCVlYXgpXG4iCiAiMToJcmVwOyBub3Bcblx0IgogCSJjbXBsCSQxLCglZWF4KVxuXHQiCiAJImpzCTFiXG5cdCIKLQlMT0NLICJkZWNsCSglZWF4KVxuXHQiCisJTE9DS19QUkVGSVggImRlY2wJKCVlYXgpXG5cdCIKIAkianMJX19yZWFkX2xvY2tfZmFpbGVkXG5cdCIKIAkicmV0IgogKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA1MWU1MTNiLi5kMzEzYTExIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAkJaWYgKGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplID4gMHgxMDAwMDAwMDBVTEwpCiAJCQljb250aW51ZTsKLQkJcmVzID0gYWxsb2NfYm9vdG1lbV9sb3coc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworCQlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfQVRPTUlDKTsKIAkJc3dpdGNoIChlODIwLm1hcFtpXS50eXBlKSB7CiAJCWNhc2UgRTgyMF9SQU06CXJlcy0+bmFtZSA9ICJTeXN0ZW0gUkFNIjsgYnJlYWs7CiAJCWNhc2UgRTgyMF9BQ1BJOglyZXMtPm5hbWUgPSAiQUNQSSBUYWJsZXMiOyBicmVhazsKQEAgLTEzMTYsMTMgKzEzMTYsMTUgQEAKIAogLyoKICAqIFJlcXVlc3QgYWRkcmVzcyBzcGFjZSBmb3IgYWxsIHN0YW5kYXJkIHJlc291cmNlcworICoKKyAqIFRoaXMgaXMgY2FsbGVkIGp1c3QgYmVmb3JlIHBjaWJpb3NfYXNzaWduX3Jlc291cmNlcygpLCB3aGljaCBpcyBhbHNvCisgKiBhbiBmc19pbml0Y2FsbCwgYnV0IGlzIGxpbmtlZCBpbiBsYXRlciAoaW4gYXJjaC9pMzg2L3BjaS9pMzg2LmMpLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcmVnaXN0ZXJfbWVtb3J5KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCByZXF1ZXN0X3N0YW5kYXJkX3Jlc291cmNlcyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZ2Fwc3RhcnQsIGdhcHNpemUsIHJvdW5kOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0OwotCWludAkgICAgICBpOworCWludCBpOwogCisJcHJpbnRrKCJTZXR0aW5nIHVwIHN0YW5kYXJkIFBDSSByZXNvdXJjZXNcbiIpOwogCWlmIChlZmlfZW5hYmxlZCkKIAkJZWZpX2luaXRpYWxpemVfaW9tZW1fcmVzb3VyY2VzKCZjb2RlX3Jlc291cmNlLCAmZGF0YV9yZXNvdXJjZSk7CiAJZWxzZQpAQCAtMTMzNCw2ICsxMzM2LDE2IEBACiAJLyogcmVxdWVzdCBJL08gc3BhY2UgZm9yIGRldmljZXMgdXNlZCBvbiBhbGwgaVszNDVdODYgUENzICovCiAJZm9yIChpID0gMDsgaSA8IFNUQU5EQVJEX0lPX1JFU09VUkNFUzsgaSsrKQogCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZzdGFuZGFyZF9pb19yZXNvdXJjZXNbaV0pOworCXJldHVybiAwOworfQorCitmc19pbml0Y2FsbChyZXF1ZXN0X3N0YW5kYXJkX3Jlc291cmNlcyk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCByZWdpc3Rlcl9tZW1vcnkodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGdhcHN0YXJ0LCBnYXBzaXplLCByb3VuZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdDsKKwlpbnQgaTsKIAogCS8qCiAJICogU2VhcmNoIGZvciB0aGUgYmlnZXN0IGdhcCBpbiB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGU4MjAKQEAgLTEzNzcsMTAxICsxMzg5LDYgQEAKIAkJcGNpX21lbV9zdGFydCwgZ2Fwc3RhcnQsIGdhcHNpemUpOwogfQogCi0vKiBVc2UgaW5saW5lIGFzc2VtYmx5IHRvIGRlZmluZSB0aGlzIGJlY2F1c2UgdGhlIG5vcHMgYXJlIGRlZmluZWQgCi0gICBhcyBpbmxpbmUgYXNzZW1ibHkgc3RyaW5ncyBpbiB0aGUgaW5jbHVkZSBmaWxlcyBhbmQgd2UgY2Fubm90IAotICAgZ2V0IHRoZW0gZWFzaWx5IGludG8gc3RyaW5ncy4gKi8KLWFzbSgiXHQuZGF0YVxuaW50ZWxub3BzOiAiIAotICAgIEdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDIgR0VORVJJQ19OT1AzIEdFTkVSSUNfTk9QNCBHRU5FUklDX05PUDUgR0VORVJJQ19OT1A2Ci0gICAgR0VORVJJQ19OT1A3IEdFTkVSSUNfTk9QOCk7IAotYXNtKCJcdC5kYXRhXG5rOG5vcHM6ICIgCi0gICAgSzhfTk9QMSBLOF9OT1AyIEs4X05PUDMgSzhfTk9QNCBLOF9OT1A1IEs4X05PUDYKLSAgICBLOF9OT1A3IEs4X05PUDgpOyAKLWFzbSgiXHQuZGF0YVxuazdub3BzOiAiIAotICAgIEs3X05PUDEgSzdfTk9QMiBLN19OT1AzIEs3X05PUDQgSzdfTk9QNSBLN19OT1A2Ci0gICAgSzdfTk9QNyBLN19OT1A4KTsgCi0gICAgCi1leHRlcm4gdW5zaWduZWQgY2hhciBpbnRlbG5vcHNbXSwgazhub3BzW10sIGs3bm9wc1tdOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmludGVsX25vcHNbQVNNX05PUF9NQVgrMV0gPSB7IAotICAgICBOVUxMLAotICAgICBpbnRlbG5vcHMsCi0gICAgIGludGVsbm9wcyArIDEsCi0gICAgIGludGVsbm9wcyArIDEgKyAyLAotICAgICBpbnRlbG5vcHMgKyAxICsgMiArIDMsCi0gICAgIGludGVsbm9wcyArIDEgKyAyICsgMyArIDQsCi0gICAgIGludGVsbm9wcyArIDEgKyAyICsgMyArIDQgKyA1LAotICAgICBpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYsCi0gICAgIGludGVsbm9wcyArIDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcsCi19OyAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICprOF9ub3BzW0FTTV9OT1BfTUFYKzFdID0geyAKLSAgICAgTlVMTCwKLSAgICAgazhub3BzLAotICAgICBrOG5vcHMgKyAxLAotICAgICBrOG5vcHMgKyAxICsgMiwKLSAgICAgazhub3BzICsgMSArIDIgKyAzLAotICAgICBrOG5vcHMgKyAxICsgMiArIDMgKyA0LAotICAgICBrOG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSwKLSAgICAgazhub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2LAotICAgICBrOG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3LAotfTsgCi1zdGF0aWMgdW5zaWduZWQgY2hhciAqazdfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsgCi0gICAgIE5VTEwsCi0gICAgIGs3bm9wcywKLSAgICAgazdub3BzICsgMSwKLSAgICAgazdub3BzICsgMSArIDIsCi0gICAgIGs3bm9wcyArIDEgKyAyICsgMywKLSAgICAgazdub3BzICsgMSArIDIgKyAzICsgNCwKLSAgICAgazdub3BzICsgMSArIDIgKyAzICsgNCArIDUsCi0gICAgIGs3bm9wcyArIDEgKyAyICsgMyArIDQgKyA1ICsgNiwKLSAgICAgazdub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNywKLX07IAotc3RhdGljIHN0cnVjdCBub3AgeyAKLSAgICAgaW50IGNwdWlkOyAKLSAgICAgdW5zaWduZWQgY2hhciAqKm5vcHRhYmxlOyAKLX0gbm9wdHlwZXNbXSA9IHsgCi0gICAgIHsgWDg2X0ZFQVRVUkVfSzgsIGs4X25vcHMgfSwgCi0gICAgIHsgWDg2X0ZFQVRVUkVfSzcsIGs3X25vcHMgfSwgCi0gICAgIHsgLTEsIE5VTEwgfQotfTsgCi0KLS8qIFJlcGxhY2UgaW5zdHJ1Y3Rpb25zIHdpdGggYmV0dGVyIGFsdGVybmF0aXZlcyBmb3IgdGhpcyBDUFUgdHlwZS4KLQotICAgVGhpcyBydW5zIGJlZm9yZSBTTVAgaXMgaW5pdGlhbGl6ZWQgdG8gYXZvaWQgU01QIHByb2JsZW1zIHdpdGgKLSAgIHNlbGYgbW9kaWZ5aW5nIGNvZGUuIFRoaXMgaW1wbGllcyB0aGF0IGFzc3ltZXRyaWMgc3lzdGVtcyB3aGVyZQotICAgQVBzIGhhdmUgbGVzcyBjYXBhYmlsaXRpZXMgdGhhbiB0aGUgYm9vdCBwcm9jZXNzb3IgYXJlIG5vdCBoYW5kbGVkLiAKLSAgIFRvdWdoLiBNYWtlIHN1cmUgeW91IGRpc2FibGUgc3VjaCBmZWF0dXJlcyBieSBoYW5kLiAqLyAKLXZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpIAoteyAKLQlzdHJ1Y3QgYWx0X2luc3RyICphOyAKLQlpbnQgZGlmZiwgaSwgazsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqKm5vcHRhYmxlID0gaW50ZWxfbm9wczsgCi0JZm9yIChpID0gMDsgbm9wdHlwZXNbaV0uY3B1aWQgPj0gMDsgaSsrKSB7IAotCQlpZiAoYm9vdF9jcHVfaGFzKG5vcHR5cGVzW2ldLmNwdWlkKSkgeyAKLQkJCW5vcHRhYmxlID0gbm9wdHlwZXNbaV0ubm9wdGFibGU7Ci0JCQlicmVhazsKLQkJfQotCX0gCi0JZm9yIChhID0gc3RhcnQ7ICh2b2lkICopYSA8IGVuZDsgYSsrKSB7IAotCQlpZiAoIWJvb3RfY3B1X2hhcyhhLT5jcHVpZCkpCi0JCQljb250aW51ZTsKLQkJQlVHX09OKGEtPnJlcGxhY2VtZW50bGVuID4gYS0+aW5zdHJsZW4pOyAKLQkJbWVtY3B5KGEtPmluc3RyLCBhLT5yZXBsYWNlbWVudCwgYS0+cmVwbGFjZW1lbnRsZW4pOyAKLQkJZGlmZiA9IGEtPmluc3RybGVuIC0gYS0+cmVwbGFjZW1lbnRsZW47IAotCQkvKiBQYWQgdGhlIHJlc3Qgd2l0aCBub3BzICovCi0JCWZvciAoaSA9IGEtPnJlcGxhY2VtZW50bGVuOyBkaWZmID4gMDsgZGlmZiAtPSBrLCBpICs9IGspIHsKLQkJCWsgPSBkaWZmOwotCQkJaWYgKGsgPiBBU01fTk9QX01BWCkKLQkJCQlrID0gQVNNX05PUF9NQVg7Ci0JCQltZW1jcHkoYS0+aW5zdHIgKyBpLCBub3B0YWJsZVtrXSwgayk7IAotCQl9IAotCX0KLX0gCi0KLXZvaWQgX19pbml0IGFsdGVybmF0aXZlX2luc3RydWN0aW9ucyh2b2lkKQotewotCWV4dGVybiBzdHJ1Y3QgYWx0X2luc3RyIF9fYWx0X2luc3RydWN0aW9uc1tdLCBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kW107Ci0JYXBwbHlfYWx0ZXJuYXRpdmVzKF9fYWx0X2luc3RydWN0aW9ucywgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCk7Ci19Ci0KIHN0YXRpYyBjaGFyICogX19pbml0IG1hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX01DQQpAQCAtMTU1NCw2ICsxNDcxLDE2IEBACiAKIAlwYXJzZV9jbWRsaW5lX2Vhcmx5KGNtZGxpbmVfcCk7CiAKKyNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCisJeworCQljaGFyICpzID0gc3Ryc3RyKCpjbWRsaW5lX3AsICJlYXJseXByaW50az0iKTsKKwkJaWYgKHMpIHsKKwkJCXNldHVwX2Vhcmx5X3ByaW50ayhzdHJjaHIocywgJz0nKSArIDEpOworCQkJcHJpbnRrKCJlYXJseSBjb25zb2xlIGVuYWJsZWRcbiIpOworCQl9CisJfQorI2VuZGlmCisKIAltYXhfbG93X3BmbiA9IHNldHVwX21lbW9yeSgpOwogCiAJLyoKQEAgLTE1NzgsMTkgKzE1MDUsNiBAQAogCSAqIE5PVEU6IGF0IHRoaXMgcG9pbnQgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIGlzIGZ1bGx5IGF2YWlsYWJsZS4KIAkgKi8KIAotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKLQl7Ci0JCWNoYXIgKnMgPSBzdHJzdHIoKmNtZGxpbmVfcCwgImVhcmx5cHJpbnRrPSIpOwotCQlpZiAocykgewotCQkJZXh0ZXJuIHZvaWQgc2V0dXBfZWFybHlfcHJpbnRrKGNoYXIgKik7Ci0KLQkJCXNldHVwX2Vhcmx5X3ByaW50ayhzdHJjaHIocywgJz0nKSArIDEpOwotCQkJcHJpbnRrKCJlYXJseSBjb25zb2xlIGVuYWJsZWRcbiIpOwotCQl9Ci0JfQotI2VuZGlmCi0KLQogCWRtaV9zY2FuX21hY2hpbmUoKTsKIAogI2lmZGVmIENPTkZJR19YODZfR0VORVJJQ0FSQ0gKQEAgLTE1OTksNiArMTUxMywxMCBAQAogCWlmIChlZmlfZW5hYmxlZCkKIAkJZWZpX21hcF9tZW1tYXAoKTsKIAorI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCWNoZWNrX2FjcGlfcGNpKCk7CS8qIENoZWNrcyBtb3JlIHRoYW4ganVzdCBBQ1BJIGFjdHVhbGx5ICovCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BQ1BJCiAJLyoKIAkgKiBQYXJzZSB0aGUgQUNQSSB0YWJsZXMgZm9yIHBvc3NpYmxlIGJvb3QtdGltZSBTTVAgY29uZmlndXJhdGlvbi4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2kzODYva2VybmVsL3NpZ25hbC5jCmluZGV4IDk2MzYxNmQuLjVjMzUyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zaWduYWwuYwpAQCAtMTIzLDcgKzEyMyw4IEBACiAJICBlcnIgfD0gX19nZXRfdXNlcih0bXAsICZzYy0+c2VnKTsJCQkJXAogCSAgbG9hZHNlZ21lbnQoc2VnLHRtcCk7IH0KIAotI2RlZmluZQlGSVhfRUZMQUdTCShYODZfRUZMQUdTX0FDIHwgWDg2X0VGTEFHU19PRiB8IFg4Nl9FRkxBR1NfREYgfCBcCisjZGVmaW5lCUZJWF9FRkxBR1MJKFg4Nl9FRkxBR1NfQUMgfCBYODZfRUZMQUdTX1JGIHwJCSBcCisJCQkgWDg2X0VGTEFHU19PRiB8IFg4Nl9FRkxBR1NfREYgfAkJIFwKIAkJCSBYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19TRiB8IFg4Nl9FRkxBR1NfWkYgfCBcCiAJCQkgWDg2X0VGTEFHU19BRiB8IFg4Nl9FRkxBR1NfUEYgfCBYODZfRUZMQUdTX0NGKQogCkBAIC01ODIsOSArNTgzLDYgQEAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkKIAkJcmV0dXJuOwogCi0JaWYgKHRyeV90b19mcmVlemUoKSkKLQkJZ290byBub19zaWduYWw7Ci0KIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkKIAkJb2xkc2V0ID0gJmN1cnJlbnQtPnNhdmVkX3NpZ21hc2s7CiAJZWxzZQpAQCAtNjEzLDcgKzYxMSw2IEBACiAJCXJldHVybjsKIAl9CiAKLW5vX3NpZ25hbDoKIAkvKiBEaWQgd2UgY29tZSBmcm9tIGEgc3lzdGVtIGNhbGw/ICovCiAJaWYgKHJlZ3MtPm9yaWdfZWF4ID49IDApIHsKIAkJLyogUmVzdGFydCB0aGUgc3lzdGVtIGNhbGwgLSBubyBoYW5kbGVycyBwcmVzZW50ICovCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXAuYwppbmRleCAyMThkNzI1Li5kMTM0ZTk2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wLmMKQEAgLTUwNCwyNyArNTA0LDIzIEBACiAJc3Bpbl91bmxvY2tfaXJxKCZjYWxsX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgKiBjYWxsX2RhdGE7CitzdGF0aWMgc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgKmNhbGxfZGF0YTsKIAotLyoKLSAqIHRoaXMgZnVuY3Rpb24gc2VuZHMgYSAnZ2VuZXJpYyBjYWxsIGZ1bmN0aW9uJyBJUEkgdG8gYWxsIG90aGVyIENQVXMKLSAqIGluIHRoZSBzeXN0ZW0uCi0gKi8KLQotaW50IHNtcF9jYWxsX2Z1bmN0aW9uICh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgbm9uYXRvbWljLAotCQkJaW50IHdhaXQpCi0vKgotICogW1NVTU1BUlldIFJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzLgotICogPGZ1bmM+IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCi0gKiA8aW5mbz4gQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCi0gKiA8bm9uYXRvbWljPiBjdXJyZW50bHkgdW51c2VkLgotICogPHdhaXQ+IElmIHRydWUsIHdhaXQgKGF0b21pY2FsbHkpIHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcy4KLSAqIFtSRVRVUk5TXSAwIG9uIHN1Y2Nlc3MsIGVsc2UgYSBuZWdhdGl2ZSBzdGF0dXMgY29kZS4gRG9lcyBub3QgcmV0dXJuIHVudGlsCisvKioKKyAqIHNtcF9jYWxsX2Z1bmN0aW9uKCk6IFJ1biBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBDUFVzLgorICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCisgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCisgKiBAbm9uYXRvbWljOiBjdXJyZW50bHkgdW51c2VkLgorICogQHdhaXQ6IElmIHRydWUsIHdhaXQgKGF0b21pY2FsbHkpIHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQgb24gb3RoZXIgQ1BVcy4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIHN0YXR1cyBjb2RlLiBEb2VzIG5vdCByZXR1cm4gdW50aWwKICAqIHJlbW90ZSBDUFVzIGFyZSBuZWFybHkgcmVhZHkgdG8gZXhlY3V0ZSA8PGZ1bmM+PiBvciBhcmUgb3IgaGF2ZSBleGVjdXRlZC4KICAqCiAgKiBZb3UgbXVzdCBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyBvciBmcm9tIGEKICAqIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIG9yIGZyb20gYSBib3R0b20gaGFsZiBoYW5kbGVyLgogICovCitpbnQgc21wX2NhbGxfZnVuY3Rpb24gKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sIGludCBub25hdG9taWMsCisJCQlpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOwogCWludCBjcHVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYwppbmRleCBmYjAwYWI3Li44MjM3MWQ4IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYwpAQCAtODk4LDEzICs4OTgsOCBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwOwogCXVuc2lnbmVkIHNob3J0IG5taV9oaWdoID0gMCwgbm1pX2xvdyA9IDA7CiAKLQlpZiAoIWNwdV9nZHRfZGVzY3JbY3B1XS5hZGRyZXNzICYmCi0JICAgICEoY3B1X2dkdF9kZXNjcltjcHVdLmFkZHJlc3MgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCkpKSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGFsbG9jYXRlIEdEVCBmb3IgQ1BVICVkXG4iLCBjcHUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KIAkrK2NwdWNvdW50OworCWFsdGVybmF0aXZlc19zbXBfc3dpdGNoKDEpOwogCiAJLyoKIAkgKiBXZSBjYW4ndCB1c2Uga2VybmVsX3RocmVhZCBzaW5jZSB3ZSBtdXN0IGF2b2lkIHRvCkBAIC0xMDA4LDcgKzEwMDMsNiBAQAogCiAJY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxvdXRfbWFwKTsKIAljcHVfY2xlYXIoY3B1LCBjcHVfY2FsbGluX21hcCk7Ci0JY3B1X2NsZWFyKGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKIAogCWNwdV9jbGVhcihjcHUsIHNtcF9jb21tZW5jZWRfbWFzayk7CiAJdW5tYXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKGNwdSk7CkBAIC0xMDIwLDIxICsxMDE0LDIwIEBACiAJaW50IGNwdTsKIH07CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBkb193YXJtX2Jvb3RfY3B1KHZvaWQgKnApCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgZG9fd2FybV9ib290X2NwdSh2b2lkICpwKQogewogCXN0cnVjdCB3YXJtX2Jvb3RfY3B1X2luZm8gKmluZm8gPSBwOwogCWRvX2Jvb3RfY3B1KGluZm8tPmFwaWNpZCwgaW5mby0+Y3B1KTsKIAljb21wbGV0ZShpbmZvLT5jb21wbGV0ZSk7CiB9CiAKLWludCBfX2RldmluaXQgc21wX3ByZXBhcmVfY3B1KGludCBjcHUpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBfX3NtcF9wcmVwYXJlX2NwdShpbnQgY3B1KQogewogCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKIAlzdHJ1Y3Qgd2FybV9ib290X2NwdV9pbmZvIGluZm87CiAJc3RydWN0IHdvcmtfc3RydWN0IHRhc2s7CiAJaW50CWFwaWNpZCwgcmV0OwogCi0JbG9ja19jcHVfaG90cGx1ZygpOwogCWFwaWNpZCA9IHg4Nl9jcHVfdG9fYXBpY2lkW2NwdV07CiAJaWYgKGFwaWNpZCA9PSBCQURfQVBJQ0lEKSB7CiAJCXJldCA9IC1FTk9ERVY7CkBAIC0xMDU5LDcgKzEwNTIsNiBAQAogCXphcF9sb3dfbWFwcGluZ3MoKTsKIAlyZXQgPSAwOwogZXhpdDoKLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKIAlyZXR1cm4gcmV0OwogfQogI2VuZGlmCkBAIC0xMzY0LDYgKzEzNTYsOCBAQAogCQkvKiBUaGV5IGFjayB0aGlzIGluIHBsYXlfZGVhZCBieSBzZXR0aW5nIENQVV9ERUFEICovCiAJCWlmIChwZXJfY3B1KGNwdV9zdGF0ZSwgY3B1KSA9PSBDUFVfREVBRCkgewogCQkJcHJpbnRrICgiQ1BVICVkIGlzIG5vdyBvZmZsaW5lXG4iLCBjcHUpOworCQkJaWYgKDEgPT0gbnVtX29ubGluZV9jcHVzKCkpCisJCQkJYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goMCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJbXNsZWVwKDEwMCk7CkBAIC0xMzg1LDYgKzEzNzksMjIgQEAKIAogaW50IF9fZGV2aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQogeworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWludCByZXQ9MDsKKworCS8qCisJICogV2UgZG8gd2FybSBib290IG9ubHkgb24gY3B1cyB0aGF0IGhhZCBib290ZWQgZWFybGllcgorCSAqIE90aGVyd2lzZSBjb2xkIGJvb3QgaXMgYWxsIGhhbmRsZWQgZnJvbSBzbXBfYm9vdF9jcHVzKCkuCisJICogY3B1X2NhbGxpbl9tYXAgaXMgc2V0IGR1cmluZyBBUCBraWNrc3RhcnQgcHJvY2Vzcy4gSXRzIHJlc2V0CisJICogd2hlbiBhIGNwdSBpcyB0YWtlbiBvZmZsaW5lIGZyb20gY3B1X2V4aXRfY2xlYXIoKS4KKwkgKi8KKwlpZiAoIWNwdV9pc3NldChjcHUsIGNwdV9jYWxsaW5fbWFwKSkKKwkJcmV0ID0gX19zbXBfcHJlcGFyZV9jcHUoY3B1KTsKKworCWlmIChyZXQpCisJCXJldHVybiAtRUlPOworI2VuZGlmCisKIAkvKiBJbiBjYXNlIG9uZSBkaWRuJ3QgY29tZSB1cCAqLwogCWlmICghY3B1X2lzc2V0KGNwdSwgY3B1X2NhbGxpbl9tYXApKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJza2lwcGluZyBjcHUlZCwgZGlkbid0IGNvbWUgb25saW5lXG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9zeXNfaTM4Ni5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zeXNfaTM4Ni5jCmluZGV4IGE0YTYxOTcuLjhmZGIxZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvc3lzX2kzODYuYworKysgYi9hcmNoL2kzODYva2VybmVsL3N5c19pMzg2LmMKQEAgLTQwLDE0ICs0MCwxMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotLyogY29tbW9uIGNvZGUgZm9yIG9sZCBhbmQgbmV3IG1tYXBzICovCi1zdGF0aWMgaW5saW5lIGxvbmcgZG9fbW1hcDIoCi0JdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKLQl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZikKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCSAgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJICB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQogewogCWludCBlcnJvciA9IC1FQkFERjsKLQlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBOVUxMOworCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCiAJZmxhZ3MgJj0gfihNQVBfRVhFQ1VUQUJMRSB8IE1BUF9ERU5ZV1JJVEUpOwogCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKQEAgLTU2LDkgKzU1LDkgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAllcnJvciA9IGRvX21tYXBfcGdvZmYoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYpOwotCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCiAJaWYgKGZpbGUpCiAJCWZwdXQoZmlsZSk7CkBAIC02NiwxMyArNjUsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAotCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKLQl1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQotewotCXJldHVybiBkb19tbWFwMihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYpOwotfQotCiAvKgogICogUGVyZm9ybSB0aGUgc2VsZWN0KG5kLCBpbiwgb3V0LCBleCwgdHYpIGFuZCBtbWFwKCkgc3lzdGVtCiAgKiBjYWxscy4gTGludXgvaTM4NiBkaWRuJ3QgdXNlIHRvIGJlIGFibGUgdG8gaGFuZGxlIG1vcmUgdGhhbgpAQCAtMTAxLDcgKzkzLDggQEAKIAlpZiAoYS5vZmZzZXQgJiB+UEFHRV9NQVNLKQogCQlnb3RvIG91dDsKIAotCWVyciA9IGRvX21tYXAyKGEuYWRkciwgYS5sZW4sIGEucHJvdCwgYS5mbGFncywgYS5mZCwgYS5vZmZzZXQgPj4gUEFHRV9TSElGVCk7CisJZXJyID0gc3lzX21tYXAyKGEuYWRkciwgYS5sZW4sIGEucHJvdCwgYS5mbGFncywKKwkJCWEuZmQsIGEub2Zmc2V0ID4+IFBBR0VfU0hJRlQpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RpbWUuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jCmluZGV4IGExNGQ1OTQuLjlkMzA3NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jCkBAIC00MTIsOSArNDEyLDkgQEAKIAl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAl4dGltZS50dl9zZWMgPSBzZWM7CiAJeHRpbWUudHZfbnNlYyA9IDA7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQlqaWZmaWVzICs9IHNsZWVwX2xlbmd0aDsKKwlqaWZmaWVzXzY0ICs9IHNsZWVwX2xlbmd0aDsKIAl3YWxsX2ppZmZpZXMgKz0gc2xlZXBfbGVuZ3RoOworCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAJaWYgKGxhc3RfdGltZXItPnJlc3VtZSkKIAkJbGFzdF90aW1lci0+cmVzdW1lKCk7CiAJY3VyX3RpbWVyID0gbGFzdF90aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX2hwZXQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX2hwZXQuYwppbmRleCBiZTI0MjcyLi4xN2E2ZmU3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl9ocGV0LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfaHBldC5jCkBAIC00Niw3ICs0Niw3IEBACiAgKgogICoJCQktam9obnN0dWxAdXMuaWJtLmNvbSAibWF0aCBpcyBoYXJkLCBsZXRzIGdvIHNob3BwaW5nISIKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3ljMm5zX3NjYWxlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3ljMm5zX3NjYWxlIF9fcmVhZF9tb3N0bHk7CiAjZGVmaW5lIENZQzJOU19TQ0FMRV9GQUNUT1IgMTAgLyogMl4xMCwgY2FyZWZ1bGx5IGNob3NlbiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2N5YzJuc19zY2FsZSh1bnNpZ25lZCBsb25nIGNwdV9raHopCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RpbWVycy90aW1lcl90c2MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jCmluZGV4IGE3ZjVhMmEuLjVlNDFlZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdGltZXJzL3RpbWVyX3RzYy5jCkBAIC03NCw3ICs3NCw3IEBACiAgKgogICoJCQktam9obnN0dWxAdXMuaWJtLmNvbSAibWF0aCBpcyBoYXJkLCBsZXRzIGdvIHNob3BwaW5nISIKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3ljMm5zX3NjYWxlOyAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGN5YzJuc19zY2FsZSBfX3JlYWRfbW9zdGx5OwogI2RlZmluZSBDWUMyTlNfU0NBTEVfRkFDVE9SIDEwIC8qIDJeMTAsIGNhcmVmdWxseSBjaG9zZW4gKi8KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jeWMybnNfc2NhbGUodW5zaWduZWQgbG9uZyBjcHVfa2h6KQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtZGVmYXVsdC90b3BvbG9neS5jIGIvYXJjaC9pMzg2L2tlcm5lbC90b3BvbG9neS5jCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIGFyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvdG9wb2xvZ3kuYwpyZW5hbWUgdG8gYXJjaC9pMzg2L2tlcm5lbC90b3BvbG9neS5jCmluZGV4IGI2NDMxNDAuLjI5NjM1NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvdG9wb2xvZ3kuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RvcG9sb2d5LmMKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCi0gKiBhcmNoL2kzODYvbWFjaC1nZW5lcmljL3RvcG9sb2d5LmMgLSBQb3B1bGF0ZSBkcml2ZXJmcyB3aXRoIHRvcG9sb2d5IGluZm9ybWF0aW9uCisgKiBhcmNoL2kzODYva2VybmVsL3RvcG9sb2d5LmMgLSBQb3B1bGF0ZSBkcml2ZXJmcyB3aXRoIHRvcG9sb2d5IGluZm9ybWF0aW9uCiAgKgogICogV3JpdHRlbiBieTogTWF0dGhldyBEb2Jzb24sIElCTSBDb3Jwb3JhdGlvbgogICogT3JpZ2luYWwgQ29kZTogUGF1bCBEb3J3aW4sIElCTSBDb3Jwb3JhdGlvbiwgUGF0cmljayBNb2NoZWwsIE9TREwKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIElCTSBDb3JwLgogICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM0LDEzICszNCwyMiBAQAogCiBpbnQgYXJjaF9yZWdpc3Rlcl9jcHUoaW50IG51bSl7CiAJc3RydWN0IG5vZGUgKnBhcmVudCA9IE5VTEw7Ci0JCisKICNpZmRlZiBDT05GSUdfTlVNQQogCWludCBub2RlID0gY3B1X3RvX25vZGUobnVtKTsKIAlpZiAobm9kZV9vbmxpbmUobm9kZSkpCiAJCXBhcmVudCA9ICZub2RlX2RldmljZXNbbm9kZV0ubm9kZTsKICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCisJLyoKKwkgKiBDUFUwIGNhbm5vdCBiZSBvZmZsaW5lZCBkdWUgdG8gc2V2ZXJhbAorCSAqIHJlc3RyaWN0aW9ucyBhbmQgYXNzdW1wdGlvbnMgaW4ga2VybmVsLiBUaGlzIGJhc2ljYWxseQorCSAqIGRvZXNudCBhZGQgYSBjb250cm9sIGZpbGUsIG9uZSBjYW5ub3QgYXR0ZW1wdCB0byBvZmZsaW5lCisJICogQlNQLgorCSAqLworCWlmICghbnVtKQorCQljcHVfZGV2aWNlc1tudW1dLmNwdS5ub19jb250cm9sID0gMTsKKwogCXJldHVybiByZWdpc3Rlcl9jcHUoJmNwdV9kZXZpY2VzW251bV0uY3B1LCBudW0sIHBhcmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCBiODE0ZGJkLi5kZTUzODZiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCkBAIC05OSw2ICs5OSw4IEBACiB7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXZtYWxsb2Nfc3luY19hbGwoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGllX25vdGlmaWVyX2xvY2ssIGZsYWdzKTsKIAllcnIgPSBub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmaTM4NmRpZV9jaGFpbiwgbmIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZV9ub3RpZmllcl9sb2NrLCBmbGFncyk7CkBAIC0xMTIsMTIgKzExNCwzMCBAQAogCQlwIDwgKHZvaWQgKil0aW5mbyArIFRIUkVBRF9TSVpFIC0gMzsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfYWRkcl9hbmRfc3ltYm9sKHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqbG9nX2x2bCkKKy8qCisgKiBQcmludCBDT05GSUdfU1RBQ0tfQkFDS1RSQUNFX0NPTFMgYWRkcmVzcy9zeW1ib2wgZW50cmllcyBwZXIgbGluZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHJpbnRfYWRkcl9hbmRfc3ltYm9sKHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqbG9nX2x2bCwKKwkJCQkJaW50IHByaW50ZWQpCiB7Ci0JcHJpbnRrKGxvZ19sdmwpOworCWlmICghcHJpbnRlZCkKKwkJcHJpbnRrKGxvZ19sdmwpOworCisjaWYgQ09ORklHX1NUQUNLX0JBQ0tUUkFDRV9DT0xTID09IDEKIAlwcmludGsoIiBbPCUwOGx4Pl0gIiwgYWRkcik7CisjZWxzZQorCXByaW50aygiIDwlMDhseD4gIiwgYWRkcik7CisjZW5kaWYKIAlwcmludF9zeW1ib2woIiVzIiwgYWRkcik7Ci0JcHJpbnRrKCJcbiIpOworCisJcHJpbnRlZCA9IChwcmludGVkICsgMSkgJSBDT05GSUdfU1RBQ0tfQkFDS1RSQUNFX0NPTFM7CisKKwlpZiAocHJpbnRlZCkKKwkJcHJpbnRrKCIgICIpOworCWVsc2UKKwkJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIHByaW50ZWQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwcmludF9jb250ZXh0X3N0YWNrKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm8sCkBAIC0xMjUsMjAgKzE0NSwyNCBAQAogCQkJCWNoYXIgKmxvZ19sdmwpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCBwcmludGVkID0gMDsgLyogbnIgb2YgZW50cmllcyBhbHJlYWR5IHByaW50ZWQgb24gY3VycmVudCBsaW5lICovCiAKICNpZmRlZglDT05GSUdfRlJBTUVfUE9JTlRFUgogCXdoaWxlICh2YWxpZF9zdGFja19wdHIodGluZm8sICh2b2lkICopZWJwKSkgewogCQlhZGRyID0gKih1bnNpZ25lZCBsb25nICopKGVicCArIDQpOwotCQlwcmludF9hZGRyX2FuZF9zeW1ib2woYWRkciwgbG9nX2x2bCk7CisJCXByaW50ZWQgPSBwcmludF9hZGRyX2FuZF9zeW1ib2woYWRkciwgbG9nX2x2bCwgcHJpbnRlZCk7CiAJCWVicCA9ICoodW5zaWduZWQgbG9uZyAqKWVicDsKIAl9CiAjZWxzZQogCXdoaWxlICh2YWxpZF9zdGFja19wdHIodGluZm8sIHN0YWNrKSkgewogCQlhZGRyID0gKnN0YWNrKys7CiAJCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpCi0JCQlwcmludF9hZGRyX2FuZF9zeW1ib2woYWRkciwgbG9nX2x2bCk7CisJCQlwcmludGVkID0gcHJpbnRfYWRkcl9hbmRfc3ltYm9sKGFkZHIsIGxvZ19sdmwsIHByaW50ZWQpOwogCX0KICNlbmRpZgorCWlmIChwcmludGVkKQorCQlwcmludGsoIlxuIik7CisKIAlyZXR1cm4gZWJwOwogfQogCkBAIC0xNjYsOCArMTkwLDcgQEAKIAkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyopY29udGV4dC0+cHJldmlvdXNfZXNwOwogCQlpZiAoIXN0YWNrKQogCQkJYnJlYWs7Ci0JCXByaW50ayhsb2dfbHZsKTsKLQkJcHJpbnRrKCIgPT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCQlwcmludGsoIiVzID09PT09PT09PT09PT09PT09PT09PT09XG4iLCBsb2dfbHZsKTsKIAl9CiB9CiAKQEAgLTE5NCwyMSArMjE3LDE3IEBACiAJZm9yKGkgPSAwOyBpIDwga3N0YWNrX2RlcHRoX3RvX3ByaW50OyBpKyspIHsKIAkJaWYgKGtzdGFja19lbmQoc3RhY2spKQogCQkJYnJlYWs7Ci0JCWlmIChpICYmICgoaSAlIDgpID09IDApKSB7Ci0JCQlwcmludGsoIlxuIik7Ci0JCQlwcmludGsobG9nX2x2bCk7Ci0JCQlwcmludGsoIiAgICAgICAiKTsKLQkJfQorCQlpZiAoaSAmJiAoKGkgJSA4KSA9PSAwKSkKKwkJCXByaW50aygiXG4lcyAgICAgICAiLCBsb2dfbHZsKTsKIAkJcHJpbnRrKCIlMDhseCAiLCAqc3RhY2srKyk7CiAJfQotCXByaW50aygiXG4iKTsKLQlwcmludGsobG9nX2x2bCk7Ci0JcHJpbnRrKCJDYWxsIFRyYWNlOlxuIik7CisJcHJpbnRrKCJcbiVzQ2FsbCBUcmFjZTpcbiIsIGxvZ19sdmwpOwogCXNob3dfdHJhY2VfbG9nX2x2bCh0YXNrLCBlc3AsIGxvZ19sdmwpOwogfQogCiB2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICplc3ApCiB7CisJcHJpbnRrKCIgICAgICAgIik7CiAJc2hvd19zdGFja19sb2dfbHZsKHRhc2ssIGVzcCwgIiIpOwogfQogCkBAIC0yMzMsNyArMjUyLDcgQEAKIAogCWVzcCA9ICh1bnNpZ25lZCBsb25nKSAoJnJlZ3MtPmVzcCk7CiAJc2F2ZXNlZ21lbnQoc3MsIHNzKTsKLQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CisJaWYgKHVzZXJfbW9kZV92bShyZWdzKSkgewogCQlpbl9rZXJuZWwgPSAwOwogCQllc3AgPSByZWdzLT5lc3A7CiAJCXNzID0gcmVncy0+eHNzICYgMHhmZmZmOwpAQCAtMzMzLDYgKzM1Miw4IEBACiAJc3RhdGljIGludCBkaWVfY291bnRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJb29wc19lbnRlcigpOworCiAJaWYgKGRpZS5sb2NrX293bmVyICE9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJY29uc29sZV92ZXJib3NlKCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkaWUubG9jaywgZmxhZ3MpOwpAQCAtMzg1LDYgKzQwNiw3IEBACiAJCXNzbGVlcCg1KTsKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOwogCX0KKwlvb3BzX2V4aXQoKTsKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCkBAIC02MjMsNyArNjQ1LDcgQEAKIAkvKiBJZiB3ZSBhcmUgaW4ga2VybmVsIHdlIGFyZSBwcm9iYWJseSBuZXN0ZWQgdXAgcHJldHR5IGJhZAogCSAqIGFuZCBtaWdodCBhc3dlbGwgZ2V0IG91dCBub3cgd2hpbGUgd2Ugc3RpbGwgY2FuLgogCSovCi0JaWYgKCF1c2VyX21vZGUocmVncykpIHsKKwlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkgewogCQljdXJyZW50LT50aHJlYWQudHJhcF9ubyA9IDI7CiAJCWNyYXNoX2tleGVjKHJlZ3MpOwogCX0KQEAgLTY5NCw2ICs3MTYsNyBAQAogCiB2b2lkIHNldF9ubWlfY2FsbGJhY2sobm1pX2NhbGxiYWNrX3QgY2FsbGJhY2spCiB7CisJdm1hbGxvY19zeW5jX2FsbCgpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihubWlfY2FsbGJhY2ssIGNhbGxiYWNrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNldF9ubWlfY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9pMzg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDE4Zjk5Y2MuLjg4MzEzMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2kzODYva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTY5LDYgKzY5LDI2IEBACiAJKiguZGF0YS5pbml0X3Rhc2spCiAgIH0KIAorICAvKiBtaWdodCBnZXQgZnJlZWQgYWZ0ZXIgaW5pdCAqLworICAuID0gQUxJR04oNDA5Nik7CisgIF9fc21wX2FsdF9iZWdpbiA9IC47CisgIF9fc21wX2FsdF9pbnN0cnVjdGlvbnMgPSAuOworICAuc21wX2FsdGluc3RydWN0aW9ucyA6IEFUKEFERFIoLnNtcF9hbHRpbnN0cnVjdGlvbnMpIC0gTE9BRF9PRkZTRVQpIHsKKwkqKC5zbXBfYWx0aW5zdHJ1Y3Rpb25zKQorICB9CisgIF9fc21wX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKKyAgLiA9IEFMSUdOKDQpOworICBfX3NtcF9sb2NrcyA9IC47CisgIC5zbXBfbG9ja3MgOiBBVChBRERSKC5zbXBfbG9ja3MpIC0gTE9BRF9PRkZTRVQpIHsKKwkqKC5zbXBfbG9ja3MpCisgIH0KKyAgX19zbXBfbG9ja3NfZW5kID0gLjsKKyAgLnNtcF9hbHRpbnN0cl9yZXBsYWNlbWVudCA6IEFUKEFERFIoLnNtcF9hbHRpbnN0cl9yZXBsYWNlbWVudCkgLSBMT0FEX09GRlNFVCkgeworCSooLnNtcF9hbHRpbnN0cl9yZXBsYWNlbWVudCkKKyAgfQorICAuID0gQUxJR04oNDA5Nik7CisgIF9fc21wX2FsdF9lbmQgPSAuOworCiAgIC8qIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgaW5pdCAqLwogICAuID0gQUxJR04oNDA5Nik7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KICAgX19pbml0X2JlZ2luID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdnN5c2NhbGwtc3lzZW50ZXIuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvdnN5c2NhbGwtc3lzZW50ZXIuUwppbmRleCA3NmI3MjgxLi4zYjYyYmFhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3ZzeXNjYWxsLXN5c2VudGVyLlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92c3lzY2FsbC1zeXNlbnRlci5TCkBAIC0yMSw2ICsyMSw5IEBACiAgKiBpbnN0cnVjdGlvbiBjbG9iYmVycyAlZXNwLCB0aGUgdXNlcidzICVlc3Agd29uJ3QgZXZlbiBzdXJ2aXZlIGVudHJ5CiAgKiBpbnRvIHRoZSBrZXJuZWwuIFdlIHN0b3JlICVlc3AgaW4gJWVicC4gQ29kZSBpbiBlbnRyeS5TIG11c3QgZmV0Y2gKICAqIGFyZzYgZnJvbSB0aGUgc3RhY2suCisgKgorICogWW91IGNhbiBub3QgdXNlIHRoaXMgdnN5c2NhbGwgZm9yIHRoZSBjbG9uZSgpIHN5c2NhbGwgYmVjYXVzZSB0aGUKKyAqIHRocmVlIGR3b3JkcyBvbiB0aGUgcGFyZW50IHN0YWNrIGRvIG5vdCBnZXQgY29waWVkIHRvIHRoZSBjaGlsZC4KICAqLwogCS50ZXh0CiAJLmdsb2JsIF9fa2VybmVsX3ZzeXNjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L01ha2VmaWxlIGIvYXJjaC9pMzg2L21hY2gtZGVmYXVsdC9NYWtlZmlsZQppbmRleCBlOTViYjAyLi4wMTJmZTM0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1kZWZhdWx0L01ha2VmaWxlCisrKyBiL2FyY2gvaTM4Ni9tYWNoLWRlZmF1bHQvTWFrZWZpbGUKQEAgLTIsNCArMiw0IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwogCi1vYmoteQkJCQk6PSBzZXR1cC5vIHRvcG9sb2d5Lm8KK29iai15CQkJCTo9IHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLWVzNzAwMC9lczcwMDAuaCBiL2FyY2gvaTM4Ni9tYWNoLWVzNzAwMC9lczcwMDAuaAppbmRleCBmMWUzMjA0Li44MDU2NmNhIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC1lczcwMDAvZXM3MDAwLmgKKysrIGIvYXJjaC9pMzg2L21hY2gtZXM3MDAwL2VzNzAwMC5oCkBAIC04Myw2ICs4Myw3IEBACiAJc3RydWN0IHBzYWkgcHNhaTsKIH07CiAKKyNpZmRlZiBDT05GSUdfQUNQSQogc3RydWN0IGFjcGlfdGFibGVfc2R0IHsKIAl1bnNpZ25lZCBsb25nIHBhOwogCXVuc2lnbmVkIGxvbmcgY291bnQ7CkBAIC05OSw2ICsxMDAsOSBAQAogCXUzMiBPRU1UYWJsZVNpemU7CiB9OwogCitleHRlcm4gaW50IGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKTsKKyNlbmRpZgorCiBzdHJ1Y3QgbWlwX3JlZyB7CiAJdW5zaWduZWQgbG9uZyBsb25nIG9mZl8wOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZfODsKQEAgLTExNCw3ICsxMTgsNiBAQAogI2RlZmluZQlNSVBfRlVOQyhWQUxVRSkgCShWQUxVRSAmIDB4ZmYpCiAKIGV4dGVybiBpbnQgcGFyc2VfdW5pc3lzX29lbSAoY2hhciAqb2VtcHRyKTsKLWV4dGVybiBpbnQgZmluZF91bmlzeXNfYWNwaV9vZW1fdGFibGUodW5zaWduZWQgbG9uZyAqb2VtX2FkZHIpOwogZXh0ZXJuIHZvaWQgc2V0dXBfdW5pc3lzKHZvaWQpOwogZXh0ZXJuIGludCBlczcwMDBfc3RhcnRfY3B1KGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZWlwKTsKIGV4dGVybiB2b2lkIGVzNzAwMF9zd19hcGljKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtZXM3MDAwL2VzNzAwMHBsYXQuYyBiL2FyY2gvaTM4Ni9tYWNoLWVzNzAwMC9lczcwMDBwbGF0LmMKaW5kZXggYTlhYjA2NC4uM2QwZmM4NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLWVzNzAwMC9lczcwMDBwbGF0LmMKKysrIGIvYXJjaC9pMzg2L21hY2gtZXM3MDAwL2VzNzAwMHBsYXQuYwpAQCAtNTEsOCArNTEsNiBAQAogaW50IAkJCW1pcF9wb3J0OwogdW5zaWduZWQgbG9uZwkJbWlwX2FkZHIsIGhvc3RfYWRkcjsKIAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKSAmJiBkZWZpbmVkKENPTkZJR19BQ1BJKQotCiAvKgogICogR1NJIG92ZXJyaWRlIGZvciBFUzcwMDAgcGxhdGZvcm1zLgogICovCkBAIC03Niw4ICs3NCw2IEBACiAJcmV0dXJuIGdzaTsKIH0KIAotI2VuZGlmCS8qIChDT05GSUdfWDg2X0lPX0FQSUMpICYmIChDT05GSUdfQUNQSSkgKi8KLQogdm9pZCBfX2luaXQKIHNldHVwX3VuaXN5cyh2b2lkKQogewpAQCAtMTYwLDYgKzE1Niw3IEBACiAJcmV0dXJuIGVzNzAwMF9wbGF0OwogfQogCisjaWZkZWYgQ09ORklHX0FDUEkKIGludCBfX2luaXQKIGZpbmRfdW5pc3lzX2FjcGlfb2VtX3RhYmxlKHVuc2lnbmVkIGxvbmcgKm9lbV9hZGRyKQogewpAQCAtMjEyLDYgKzIwOSw3IEBACiAJfQogCXJldHVybiAtMTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZAogZXM3MDAwX3NwaW4oaW50IG4pCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12aXN3cy9yZWJvb3QuYyBiL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3JlYm9vdC5jCmluZGV4IDVkNzNlMDQuLjk5MzMyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3JlYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZpc3dzL3JlYm9vdC5jCkBAIC0xLDcgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm0uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInBpaXg0LmgiCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfYmFzaWMuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jCmluZGV4IGFhNDlhMzMuLmI1ODQwNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jCisrKyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9iYXNpYy5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3ZveWFnZXIuaD4KICNpbmNsdWRlIDxhc20vdmljLmg+CkBAIC0zMjgsNCArMzMwLDMgQEAKIAlpZiAocG1fcG93ZXJfb2ZmKQogCQlwbV9wb3dlcl9vZmYoKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCmluZGV4IDZlNGMzYmEuLjgxNjU2MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYworKysgYi9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKQEAgLTQwMiw2ICs0MDIsNyBAQAogCWNwdXNfYWRkcihwaHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0gdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLICsgMSkgPDwgODsKIAljcHVzX2FkZHIocGh5c19jcHVfcHJlc2VudF9tYXApWzBdIHw9IHZveWFnZXJfZXh0ZW5kZWRfY21vc19yZWFkKFZPWUFHRVJfUFJPQ0VTU09SX1BSRVNFTlRfTUFTSyArIDIpIDw8IDE2OwogCWNwdXNfYWRkcihwaHlzX2NwdV9wcmVzZW50X21hcClbMF0gfD0gdm95YWdlcl9leHRlbmRlZF9jbW9zX3JlYWQoVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLICsgMykgPDwgMjQ7CisJY3B1X3Bvc3NpYmxlX21hcCA9IHBoeXNfY3B1X3ByZXNlbnRfbWFwOwogCXByaW50aygiVk9ZQUdFUiBTTVA6IHBoeXNfY3B1X3ByZXNlbnRfbWFwID0gMHglbHhcbiIsIGNwdXNfYWRkcihwaHlzX2NwdV9wcmVzZW50X21hcClbMF0pOwogCS8qIEhlcmUgd2Ugc2V0IHVwIHRoZSBWSUMgdG8gZW5hYmxlIFNNUCAqLwogCS8qIGVuYWJsZSB0aGUgQ1BJcyBieSB3cml0aW5nIHRoZSBiYXNlIHZlY3RvciB0byB0aGVpciByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L21tL2ZhdWx0LmMgYi9hcmNoL2kzODYvbW0vZmF1bHQuYwppbmRleCBjZjU3MmQ5Li43ZjBmY2YyIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbW0vZmF1bHQuYworKysgYi9hcmNoL2kzODYvbW0vZmF1bHQuYwpAQCAtMjE0LDYgKzIxNCw2OCBAQAogCiBmYXN0Y2FsbCB2b2lkIGRvX2ludmFsaWRfb3Aoc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgbG9uZyk7CiAKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnZtYWxsb2Nfc3luY19vbmUocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXVuc2lnbmVkIGluZGV4ID0gcGdkX2luZGV4KGFkZHJlc3MpOworCXBnZF90ICpwZ2RfazsKKwlwdWRfdCAqcHVkLCAqcHVkX2s7CisJcG1kX3QgKnBtZCwgKnBtZF9rOworCisJcGdkICs9IGluZGV4OworCXBnZF9rID0gaW5pdF9tbS5wZ2QgKyBpbmRleDsKKworCWlmICghcGdkX3ByZXNlbnQoKnBnZF9rKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIHNldF9wZ2QocGdkLCAqcGdkX2spOyBoZXJlIHdvdWxkIGJlIHVzZWxlc3Mgb24gUEFFCisJICogYW5kIHJlZHVuZGFudCB3aXRoIHRoZSBzZXRfcG1kKCkgb24gbm9uLVBBRS4gQXMgd291bGQKKwkgKiBzZXRfcHVkLgorCSAqLworCisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOworCXB1ZF9rID0gcHVkX29mZnNldChwZ2RfaywgYWRkcmVzcyk7CisJaWYgKCFwdWRfcHJlc2VudCgqcHVkX2spKQorCQlyZXR1cm4gTlVMTDsKKworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKKwlwbWRfayA9IHBtZF9vZmZzZXQocHVkX2ssIGFkZHJlc3MpOworCWlmICghcG1kX3ByZXNlbnQoKnBtZF9rKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkKKwkJc2V0X3BtZChwbWQsICpwbWRfayk7CisJZWxzZQorCQlCVUdfT04ocG1kX3BhZ2UoKnBtZCkgIT0gcG1kX3BhZ2UoKnBtZF9rKSk7CisJcmV0dXJuIHBtZF9rOworfQorCisvKgorICogSGFuZGxlIGEgZmF1bHQgb24gdGhlIHZtYWxsb2Mgb3IgbW9kdWxlIG1hcHBpbmcgYXJlYQorICoKKyAqIFRoaXMgYXNzdW1lcyBubyBsYXJnZSBwYWdlcyBpbiB0aGVyZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdm1hbGxvY19mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJdW5zaWduZWQgbG9uZyBwZ2RfcGFkZHI7CisJcG1kX3QgKnBtZF9rOworCXB0ZV90ICpwdGVfazsKKwkvKgorCSAqIFN5bmNocm9uaXplIHRoaXMgdGFzaydzIHRvcCBsZXZlbCBwYWdlLXRhYmxlCisJICogd2l0aCB0aGUgJ3JlZmVyZW5jZScgcGFnZSB0YWJsZS4KKwkgKgorCSAqIERvIF9ub3RfIHVzZSAiY3VycmVudCIgaGVyZS4gV2UgbWlnaHQgYmUgaW5zaWRlCisJICogYW4gaW50ZXJydXB0IGluIHRoZSBtaWRkbGUgb2YgYSB0YXNrIHN3aXRjaC4uCisJICovCisJcGdkX3BhZGRyID0gcmVhZF9jcjMoKTsKKwlwbWRfayA9IHZtYWxsb2Nfc3luY19vbmUoX192YShwZ2RfcGFkZHIpLCBhZGRyZXNzKTsKKwlpZiAoIXBtZF9rKQorCQlyZXR1cm4gLTE7CisJcHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcmVzcyk7CisJaWYgKCFwdGVfcHJlc2VudCgqcHRlX2spKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBwYWdlIGZhdWx0cy4gIEl0IGRldGVybWluZXMgdGhlIGFkZHJlc3MsCiAgKiBhbmQgdGhlIHByb2JsZW0sIGFuZCB0aGVuIHBhc3NlcyBpdCBvZmYgdG8gb25lIG9mIHRoZSBhcHByb3ByaWF0ZQpAQCAtMjIzLDYgKzI4NSw4IEBACiAgKgliaXQgMCA9PSAwIG1lYW5zIG5vIHBhZ2UgZm91bmQsIDEgbWVhbnMgcHJvdGVjdGlvbiBmYXVsdAogICoJYml0IDEgPT0gMCBtZWFucyByZWFkLCAxIG1lYW5zIHdyaXRlCiAgKgliaXQgMiA9PSAwIG1lYW5zIGtlcm5lbCwgMSBtZWFucyB1c2VyLW1vZGUKKyAqCWJpdCAzID09IDEgbWVhbnMgdXNlIG9mIHJlc2VydmVkIGJpdCBkZXRlY3RlZAorICoJYml0IDQgPT0gMSBtZWFucyBmYXVsdCB3YXMgYW4gaW5zdHJ1Y3Rpb24gZmV0Y2gKICAqLwogZmFzdGNhbGwgdm9pZCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCkBAIC0yMzcsMTMgKzMwMSw2IEBACiAJLyogZ2V0IHRoZSBhZGRyZXNzICovCiAgICAgICAgIGFkZHJlc3MgPSByZWFkX2NyMigpOwogCi0JaWYgKG5vdGlmeV9kaWUoRElFX1BBR0VfRkFVTFQsICJwYWdlIGZhdWx0IiwgcmVncywgZXJyb3JfY29kZSwgMTQsCi0JCQkJCVNJR1NFR1YpID09IE5PVElGWV9TVE9QKQotCQlyZXR1cm47Ci0JLyogSXQncyBzYWZlIHRvIGFsbG93IGlycSdzIGFmdGVyIGNyMiBoYXMgYmVlbiBzYXZlZCAqLwotCWlmIChyZWdzLT5lZmxhZ3MgJiAoWDg2X0VGTEFHU19JRnxWTV9NQVNLKSkKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCiAJdHNrID0gY3VycmVudDsKIAogCXNpX2NvZGUgPSBTRUdWX01BUEVSUjsKQEAgLTI1OSwxNyArMzE2LDI5IEBACiAJICoKIAkgKiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlIGZhdWx0IGhhcHBlbnMgaW4ga2VybmVsIHNwYWNlCiAJICogKGVycm9yX2NvZGUgJiA0KSA9PSAwLCBhbmQgdGhhdCB0aGUgZmF1bHQgd2FzIG5vdCBhCi0JICogcHJvdGVjdGlvbiBlcnJvciAoZXJyb3JfY29kZSAmIDEpID09IDAuCisJICogcHJvdGVjdGlvbiBlcnJvciAoZXJyb3JfY29kZSAmIDkpID09IDAuCiAJICovCi0JaWYgKHVubGlrZWx5KGFkZHJlc3MgPj0gVEFTS19TSVpFKSkgeyAKLQkJaWYgKCEoZXJyb3JfY29kZSAmIDUpKQotCQkJZ290byB2bWFsbG9jX2ZhdWx0OwotCQkvKiAKKwlpZiAodW5saWtlbHkoYWRkcmVzcyA+PSBUQVNLX1NJWkUpKSB7CisJCWlmICghKGVycm9yX2NvZGUgJiAweDAwMDAwMDBkKSAmJiB2bWFsbG9jX2ZhdWx0KGFkZHJlc3MpID49IDApCisJCQlyZXR1cm47CisJCWlmIChub3RpZnlfZGllKERJRV9QQUdFX0ZBVUxULCAicGFnZSBmYXVsdCIsIHJlZ3MsIGVycm9yX2NvZGUsIDE0LAorCQkJCQkJU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CisJCS8qCiAJCSAqIERvbid0IHRha2UgdGhlIG1tIHNlbWFwaG9yZSBoZXJlLiBJZiB3ZSBmaXh1cCBhIHByZWZldGNoCiAJCSAqIGZhdWx0IHdlIGNvdWxkIG90aGVyd2lzZSBkZWFkbG9jay4KIAkJICovCiAJCWdvdG8gYmFkX2FyZWFfbm9zZW1hcGhvcmU7Ci0JfSAKKwl9CisKKwlpZiAobm90aWZ5X2RpZShESUVfUEFHRV9GQVVMVCwgInBhZ2UgZmF1bHQiLCByZWdzLCBlcnJvcl9jb2RlLCAxNCwKKwkJCQkJU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKworCS8qIEl0J3Mgc2FmZSB0byBhbGxvdyBpcnEncyBhZnRlciBjcjIgaGFzIGJlZW4gc2F2ZWQgYW5kIHRoZSB2bWFsbG9jCisJICAgZmF1bHQgaGFzIGJlZW4gaGFuZGxlZC4gKi8KKwlpZiAocmVncy0+ZWZsYWdzICYgKFg4Nl9FRkxBR1NfSUZ8Vk1fTUFTSykpCisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCW1tID0gdHNrLT5tbTsKIApAQCAtNDQwLDI0ICs1MDksMzEgQEAKIAogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLQlpZiAoZXJyb3JfY29kZSAmIDE2KSB7Ci0JCXB0ZV90ICpwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyZXNzKTsKKwlpZiAob29wc19tYXlfcHJpbnQoKSkgeworCSNpZmRlZiBDT05GSUdfWDg2X1BBRQorCQlpZiAoZXJyb3JfY29kZSAmIDE2KSB7CisJCQlwdGVfdCAqcHRlID0gbG9va3VwX2FkZHJlc3MoYWRkcmVzcyk7CiAKLQkJaWYgKHB0ZSAmJiBwdGVfcHJlc2VudCgqcHRlKSAmJiAhcHRlX2V4ZWNfa2VybmVsKCpwdGUpKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAia2VybmVsIHRyaWVkIHRvIGV4ZWN1dGUgTlgtcHJvdGVjdGVkIHBhZ2UgLSBleHBsb2l0IGF0dGVtcHQ/ICh1aWQ6ICVkKVxuIiwgY3VycmVudC0+dWlkKTsKKwkJCWlmIChwdGUgJiYgcHRlX3ByZXNlbnQoKnB0ZSkgJiYgIXB0ZV9leGVjX2tlcm5lbCgqcHRlKSkKKwkJCQlwcmludGsoS0VSTl9DUklUICJrZXJuZWwgdHJpZWQgdG8gZXhlY3V0ZSAiCisJCQkJCSJOWC1wcm90ZWN0ZWQgcGFnZSAtIGV4cGxvaXQgYXR0ZW1wdD8gIgorCQkJCQkiKHVpZDogJWQpXG4iLCBjdXJyZW50LT51aWQpOworCQl9CisJI2VuZGlmCisJCWlmIChhZGRyZXNzIDwgUEFHRV9TSVpFKQorCQkJcHJpbnRrKEtFUk5fQUxFUlQgIkJVRzogdW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCAiCisJCQkJCSJwb2ludGVyIGRlcmVmZXJlbmNlIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0FMRVJUICJCVUc6IHVuYWJsZSB0byBoYW5kbGUga2VybmVsIHBhZ2luZyIKKwkJCQkJIiByZXF1ZXN0Iik7CisJCXByaW50aygiIGF0IHZpcnR1YWwgYWRkcmVzcyAlMDhseFxuIixhZGRyZXNzKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIiBwcmludGluZyBlaXA6XG4iKTsKKwkJcHJpbnRrKCIlMDhseFxuIiwgcmVncy0+ZWlwKTsKIAl9Ci0jZW5kaWYKLQlpZiAoYWRkcmVzcyA8IFBBR0VfU0laRSkKLQkJcHJpbnRrKEtFUk5fQUxFUlQgIlVuYWJsZSB0byBoYW5kbGUga2VybmVsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSIpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fQUxFUlQgIlVuYWJsZSB0byBoYW5kbGUga2VybmVsIHBhZ2luZyByZXF1ZXN0Iik7Ci0JcHJpbnRrKCIgYXQgdmlydHVhbCBhZGRyZXNzICUwOGx4XG4iLGFkZHJlc3MpOwotCXByaW50ayhLRVJOX0FMRVJUICIgcHJpbnRpbmcgZWlwOlxuIik7Ci0JcHJpbnRrKCIlMDhseFxuIiwgcmVncy0+ZWlwKTsKIAlwYWdlID0gcmVhZF9jcjMoKTsKIAlwYWdlID0gKCh1bnNpZ25lZCBsb25nICopIF9fdmEocGFnZSkpW2FkZHJlc3MgPj4gMjJdOwotCXByaW50ayhLRVJOX0FMRVJUICIqcGRlID0gJTA4bHhcbiIsIHBhZ2UpOworCWlmIChvb3BzX21heV9wcmludCgpKQorCQlwcmludGsoS0VSTl9BTEVSVCAiKnBkZSA9ICUwOGx4XG4iLCBwYWdlKTsKIAkvKgogCSAqIFdlIG11c3Qgbm90IGRpcmVjdGx5IGFjY2VzcyB0aGUgcHRlIGluIHRoZSBoaWdocHRlCiAJICogY2FzZSwgdGhlIHBhZ2UgdGFibGUgbWlnaHQgYmUgYWxsb2NhdGVkIGluIGhpZ2htZW0uCkBAIC00NjUsNyArNTQxLDcgQEAKIAkgKiBpdCdzIGFsbG9jYXRlZCBhbHJlYWR5LgogCSAqLwogI2lmbmRlZiBDT05GSUdfSElHSFBURQotCWlmIChwYWdlICYgMSkgeworCWlmICgocGFnZSAmIDEpICYmIG9vcHNfbWF5X3ByaW50KCkpIHsKIAkJcGFnZSAmPSBQQUdFX01BU0s7CiAJCWFkZHJlc3MgJj0gMHgwMDNmZjAwMDsKIAkJcGFnZSA9ICgodW5zaWduZWQgbG9uZyAqKSBfX3ZhKHBhZ2UpKVthZGRyZXNzID4+IFBBR0VfU0hJRlRdOwpAQCAtNTEwLDUxICs1ODYsNDEgQEAKIAl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKIAl0c2stPnRocmVhZC50cmFwX25vID0gMTQ7CiAJZm9yY2Vfc2lnX2luZm9fZmF1bHQoU0lHQlVTLCBCVVNfQURSRVJSLCBhZGRyZXNzLCB0c2spOwotCXJldHVybjsKK30KIAotdm1hbGxvY19mYXVsdDoKLQl7Ci0JCS8qCi0JCSAqIFN5bmNocm9uaXplIHRoaXMgdGFzaydzIHRvcCBsZXZlbCBwYWdlLXRhYmxlCi0JCSAqIHdpdGggdGhlICdyZWZlcmVuY2UnIHBhZ2UgdGFibGUuCi0JCSAqCi0JCSAqIERvIF9ub3RfIHVzZSAidHNrIiBoZXJlLiBXZSBtaWdodCBiZSBpbnNpZGUKLQkJICogYW4gaW50ZXJydXB0IGluIHRoZSBtaWRkbGUgb2YgYSB0YXNrIHN3aXRjaC4uCi0JCSAqLwotCQlpbnQgaW5kZXggPSBwZ2RfaW5kZXgoYWRkcmVzcyk7Ci0JCXVuc2lnbmVkIGxvbmcgcGdkX3BhZGRyOwotCQlwZ2RfdCAqcGdkLCAqcGdkX2s7Ci0JCXB1ZF90ICpwdWQsICpwdWRfazsKLQkJcG1kX3QgKnBtZCwgKnBtZF9rOwotCQlwdGVfdCAqcHRlX2s7CisjaWZuZGVmIENPTkZJR19YODZfUEFFCit2b2lkIHZtYWxsb2Nfc3luY19hbGwodm9pZCkKK3sKKwkvKgorCSAqIE5vdGUgdGhhdCByYWNlcyBpbiB0aGUgdXBkYXRlcyBvZiBpbnN5bmMgYW5kIHN0YXJ0IGFyZW4ndAorCSAqIHByb2JsZW1hdGljOiBpbnN5bmMgY2FuIG9ubHkgZ2V0IHNldCBiaXRzIGFkZGVkLCBhbmQgdXBkYXRlcyB0bworCSAqIHN0YXJ0IGFyZSBvbmx5IGltcHJvdmluZyBwZXJmb3JtYW5jZSAod2l0aG91dCBhZmZlY3RpbmcgY29ycmVjdG5lc3MKKwkgKiBpZiB1bmRvbmUpLgorCSAqLworCXN0YXRpYyBERUNMQVJFX0JJVE1BUChpbnN5bmMsIFBUUlNfUEVSX1BHRCk7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBUQVNLX1NJWkU7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCi0JCXBnZF9wYWRkciA9IHJlYWRfY3IzKCk7Ci0JCXBnZCA9IGluZGV4ICsgKHBnZF90ICopX192YShwZ2RfcGFkZHIpOwotCQlwZ2RfayA9IGluaXRfbW0ucGdkICsgaW5kZXg7CisJQlVJTERfQlVHX09OKFRBU0tfU0laRSAmIH5QR0RJUl9NQVNLKTsKKwlmb3IgKGFkZHJlc3MgPSBzdGFydDsgYWRkcmVzcyA+PSBUQVNLX1NJWkU7IGFkZHJlc3MgKz0gUEdESVJfU0laRSkgeworCQlpZiAoIXRlc3RfYml0KHBnZF9pbmRleChhZGRyZXNzKSwgaW5zeW5jKSkgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JCWlmICghcGdkX3ByZXNlbnQoKnBnZF9rKSkKLQkJCWdvdG8gbm9fY29udGV4dDsKLQotCQkvKgotCQkgKiBzZXRfcGdkKHBnZCwgKnBnZF9rKTsgaGVyZSB3b3VsZCBiZSB1c2VsZXNzIG9uIFBBRQotCQkgKiBhbmQgcmVkdW5kYW50IHdpdGggdGhlIHNldF9wbWQoKSBvbiBub24tUEFFLiBBcyB3b3VsZAotCQkgKiBzZXRfcHVkLgotCQkgKi8KLQotCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7Ci0JCXB1ZF9rID0gcHVkX29mZnNldChwZ2RfaywgYWRkcmVzcyk7Ci0JCWlmICghcHVkX3ByZXNlbnQoKnB1ZF9rKSkKLQkJCWdvdG8gbm9fY29udGV4dDsKLQkJCi0JCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKLQkJcG1kX2sgPSBwbWRfb2Zmc2V0KHB1ZF9rLCBhZGRyZXNzKTsKLQkJaWYgKCFwbWRfcHJlc2VudCgqcG1kX2spKQotCQkJZ290byBub19jb250ZXh0OwotCQlzZXRfcG1kKHBtZCwgKnBtZF9rKTsKLQotCQlwdGVfayA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZF9rLCBhZGRyZXNzKTsKLQkJaWYgKCFwdGVfcHJlc2VudCgqcHRlX2spKQotCQkJZ290byBub19jb250ZXh0OwotCQlyZXR1cm47CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGdkX2xvY2ssIGZsYWdzKTsKKwkJCWZvciAocGFnZSA9IHBnZF9saXN0OyBwYWdlOyBwYWdlID0KKwkJCQkJKHN0cnVjdCBwYWdlICopcGFnZS0+aW5kZXgpCisJCQkJaWYgKCF2bWFsbG9jX3N5bmNfb25lKHBhZ2VfYWRkcmVzcyhwYWdlKSwKKwkJCQkJCQkJYWRkcmVzcykpIHsKKwkJCQkJQlVHX09OKHBhZ2UgIT0gcGdkX2xpc3QpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFwYWdlKQorCQkJCXNldF9iaXQocGdkX2luZGV4KGFkZHJlc3MpLCBpbnN5bmMpOworCQl9CisJCWlmIChhZGRyZXNzID09IHN0YXJ0ICYmIHRlc3RfYml0KHBnZF9pbmRleChhZGRyZXNzKSwgaW5zeW5jKSkKKwkJCXN0YXJ0ID0gYWRkcmVzcyArIFBHRElSX1NJWkU7CiAJfQogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvaTM4Ni9tbS9odWdldGxicGFnZS5jCmluZGV4IGQ1MjQxMjcuLmE3ZDg5MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvaTM4Ni9tbS9odWdldGxicGFnZS5jCkBAIC00OCwxOCArNDgsNiBAQAogCXJldHVybiAocHRlX3QgKikgcG1kOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHByb3BlciBhbGlnbm1lbnQgb2YgaW5wdXQgYWRkciBhbmQgbGVuIHBhcmFtZXRlcnMuCi0gKi8KLWludCBpc19hbGlnbmVkX2h1Z2VwYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JaWYgKGxlbiAmIH5IUEFHRV9NQVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoYWRkciAmIH5IUEFHRV9NQVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLQogI2lmIDAJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nICovCiBzdHJ1Y3QgcGFnZSAqCiBmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9pbml0LmMgYi9hcmNoL2kzODYvbW0vaW5pdC5jCmluZGV4IDI3MDBmMDEuLjlmNjZhYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC9pMzg2L21tL2luaXQuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbWVtaW5pdCBmcmVlX25ld19oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwlpbml0X3BhZ2VfY291bnQocGFnZSk7CiAJX19mcmVlX3BhZ2UocGFnZSk7CiAJdG90YWxoaWdoX3BhZ2VzKys7CiB9CkBAIC03MjAsMjEgKzcyMCw2IEBACiAJcmV0dXJuIGZsYWc7CiB9CiAKLXZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JYWRkciA9ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2JlZ2luKTsKLQlmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSwgMSk7Ci0JCW1lbXNldCgodm9pZCAqKWFkZHIsIDB4Y2MsIFBBR0VfU0laRSk7Ci0JCWZyZWVfcGFnZShhZGRyKTsKLQkJdG90YWxyYW1fcGFnZXMrKzsKLQl9Ci0JcHJpbnRrIChLRVJOX0lORk8gIkZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6ICVkayBmcmVlZFxuIiwgKF9faW5pdF9lbmQgLSBfX2luaXRfYmVnaW4pID4+IDEwKTsKLX0KLQogI2lmZGVmIENPTkZJR19ERUJVR19ST0RBVEEKIAogZXh0ZXJuIGNoYXIgX19zdGFydF9yb2RhdGEsIF9fZW5kX3JvZGF0YTsKQEAgLTc1OCwxNyArNzQzLDMxIEBACiB9CiAjZW5kaWYKIAordm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJZm9yIChhZGRyID0gYmVnaW47IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOworCQltZW1zZXQoKHZvaWQgKilhZGRyLCAweGNjLCBQQUdFX1NJWkUpOworCQlmcmVlX3BhZ2UoYWRkcik7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkZyZWVpbmcgJXM6ICVsZGsgZnJlZWRcbiIsIHdoYXQsIChlbmQgLSBiZWdpbikgPj4gMTApOworfQorCit2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQoreworCWZyZWVfaW5pdF9wYWdlcygidW51c2VkIGtlcm5lbCBtZW1vcnkiLAorCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pLAorCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKSk7Cit9CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIHZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWlmIChzdGFydCA8IGVuZCkKLQkJcHJpbnRrIChLRVJOX0lORk8gIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0JZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCksIDEpOwotCQlmcmVlX3BhZ2Uoc3RhcnQpOwotCQl0b3RhbHJhbV9wYWdlcysrOwotCX0KKwlmcmVlX2luaXRfcGFnZXMoImluaXRyZCBtZW1vcnkiLCBzdGFydCwgZW5kKTsKIH0KICNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vcGFnZWF0dHIuYyBiL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IGQwY2FkYjMuLjkyYzNkOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gvaTM4Ni9tbS9wYWdlYXR0ci5jCkBAIC01MSw2ICs1MSwxMyBAQAogCWlmICghYmFzZSkgCiAJCXJldHVybiBOVUxMOwogCisJLyoKKwkgKiBwYWdlX3ByaXZhdGUgaXMgdXNlZCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4KKwkgKiB0aGUgcGFnZSB0YWJsZSBwYWdlIHRoYXQgaGF2ZSBub24gc3RhbmRhcmQgYXR0cmlidXRlcy4KKwkgKi8KKwlTZXRQYWdlUHJpdmF0ZShiYXNlKTsKKwlwYWdlX3ByaXZhdGUoYmFzZSkgPSAwOworCiAJYWRkcmVzcyA9IF9fcGEoYWRkcmVzcyk7CiAJYWRkciA9IGFkZHJlc3MgJiBMQVJHRV9QQUdFX01BU0s7IAogCXBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpOwpAQCAtMTQzLDExICsxNTAsMTIgQEAKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCXNldF9wbWRfcHRlKGtwdGUsYWRkcmVzcyxta19wdGUoc3BsaXQsIHJlZl9wcm90KSk7CiAJCQlrcHRlX3BhZ2UgPSBzcGxpdDsKLQkJfQkKLQkJZ2V0X3BhZ2Uoa3B0ZV9wYWdlKTsKKwkJfQorCQlwYWdlX3ByaXZhdGUoa3B0ZV9wYWdlKSsrOwogCX0gZWxzZSBpZiAoKHB0ZV92YWwoKmtwdGUpICYgX1BBR0VfUFNFKSA9PSAwKSB7IAogCQlzZXRfcHRlX2F0b21pYyhrcHRlLCBta19wdGUocGFnZSwgUEFHRV9LRVJORUwpKTsKLQkJX19wdXRfcGFnZShrcHRlX3BhZ2UpOworCQlCVUdfT04ocGFnZV9wcml2YXRlKGtwdGVfcGFnZSkgPT0gMCk7CisJCXBhZ2VfcHJpdmF0ZShrcHRlX3BhZ2UpLS07CiAJfSBlbHNlCiAJCUJVRygpOwogCkBAIC0xNTcsMTAgKzE2NSw4IEBACiAJICogcmVwbGFjZSBpdCB3aXRoIGEgbGFyZ2VwYWdlLgogCSAqLwogCWlmICghUGFnZVJlc2VydmVkKGtwdGVfcGFnZSkpIHsKLQkJLyogbWVtbGVhayBhbmQgcG90ZW50aWFsIGZhaWxlZCAyTSBwYWdlIHJlZ2VuZXJhdGlvbiAqLwotCQlCVUdfT04oIXBhZ2VfY291bnQoa3B0ZV9wYWdlKSk7Ci0KLQkJaWYgKGNwdV9oYXNfcHNlICYmIChwYWdlX2NvdW50KGtwdGVfcGFnZSkgPT0gMSkpIHsKKwkJaWYgKGNwdV9oYXNfcHNlICYmIChwYWdlX3ByaXZhdGUoa3B0ZV9wYWdlKSA9PSAwKSkgeworCQkJQ2xlYXJQYWdlUHJpdmF0ZShrcHRlX3BhZ2UpOwogCQkJbGlzdF9hZGQoJmtwdGVfcGFnZS0+bHJ1LCAmZGZfbGlzdCk7CiAJCQlyZXZlcnRfcGFnZShrcHRlX3BhZ2UsIGFkZHJlc3MpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX2ludC5jIGIvYXJjaC9pMzg2L29wcm9maWxlL25taV9pbnQuYwppbmRleCAwNDkzZThiLi4xYWNjY2U1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX2ludC5jCisrKyBiL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogc3RhdGljIHZvaWQgZnJlZV9tc3JzKHZvaWQpCiB7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsraSkgeworCWZvcl9lYWNoX2NwdShpKSB7CiAJCWtmcmVlKGNwdV9tc3JzW2ldLmNvdW50ZXJzKTsKIAkJY3B1X21zcnNbaV0uY291bnRlcnMgPSBOVUxMOwogCQlrZnJlZShjcHVfbXNyc1tpXS5jb250cm9scyk7CkBAIC0xMzgsMTAgKzEzOCw3IEBACiAJc2l6ZV90IGNvdW50ZXJzX3NpemUgPSBzaXplb2Yoc3RydWN0IG9wX21zcikgKiBtb2RlbC0+bnVtX2NvdW50ZXJzOwogCiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsraSkgewotCQlpZiAoIWNwdV9vbmxpbmUoaSkpCi0JCQljb250aW51ZTsKLQorCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQljcHVfbXNyc1tpXS5jb3VudGVycyA9IGttYWxsb2MoY291bnRlcnNfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY3B1X21zcnNbaV0uY291bnRlcnMpIHsKIAkJCXN1Y2Nlc3MgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9NYWtlZmlsZSBiL2FyY2gvaTM4Ni9wY2kvTWFrZWZpbGUKaW5kZXggNTQ2MWQ0ZC4uNjJhZDc1YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYvcGNpL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotb2JqLXkJCQkJOj0gaTM4Ni5vCitvYmoteQkJCQk6PSBpMzg2Lm8gaW5pdC5vCiAKIG9iai0kKENPTkZJR19QQ0lfQklPUykJCSs9IHBjYmlvcy5vCiBvYmotJChDT05GSUdfUENJX01NQ09ORklHKQkrPSBtbWNvbmZpZy5vIGRpcmVjdC5vCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL2NvbW1vbi5jIGIvYXJjaC9pMzg2L3BjaS9jb21tb24uYwppbmRleCBmNmJjNDhkLi5kYmVjZTc3IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2NvbW1vbi5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvY29tbW9uLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgpAQCAtMTIwLDExICsxMjEsNDIgQEAKIAlwY2lfcmVhZF9icmlkZ2VfYmFzZXMoYik7CiB9CiAKKy8qCisgKiBFbmFibGUgcmVudW1iZXJpbmcgb2YgUENJIGJ1cyMgcmFuZ2VzIHRvIHJlYWNoIGFsbCBQQ0kgYnVzc2VzIChDYXJkYnVzKQorICovCisjaWZkZWYgX19pMzg2X18KK3N0YXRpYyBpbnQgX19kZXZpbml0IGFzc2lnbl9hbGxfYnVzc2VzKHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkKQoreworCXBjaV9wcm9iZSB8PSBQQ0lfQVNTSUdOX0FMTF9CVVNTRVM7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGV0ZWN0ZWQ6IGVuYWJsaW5nIFBDSSBidXMjIHJlbnVtYmVyaW5nIgorCQkJIiAocGNpPWFzc2lnbi1idXNzZXMpXG4iLCBkLT5pZGVudCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIExhcHRvcHMgd2hpY2ggbmVlZCBwY2k9YXNzaWduLWJ1c3NlcyB0byBzZWUgQ2FyZGJ1cyBjYXJkcworICovCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0ZGF0YSBwY2lwcm9iZV9kbWlfdGFibGVbXSA9IHsKKyNpZmRlZiBfX2kzODZfXworCXsKKwkJLmNhbGxiYWNrID0gYXNzaWduX2FsbF9idXNzZXMsCisJCS5pZGVudCA9ICJTYW1zdW5nIFgyMCBMYXB0b3AiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNhbXN1bmcgRWxlY3Ryb25pY3MiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiU1gyMFMiKSwKKwkJfSwKKwl9LAorI2VuZGlmCQkvKiBfX2kzODZfXyAqLworCXt9Cit9OwogCiBzdHJ1Y3QgcGNpX2J1cyAqIF9fZGV2aW5pdCBwY2liaW9zX3NjYW5fcm9vdChpbnQgYnVzbnVtKQogewogCXN0cnVjdCBwY2lfYnVzICpidXMgPSBOVUxMOwogCisJZG1pX2NoZWNrX3N5c3RlbShwY2lwcm9iZV9kbWlfdGFibGUpOworCiAJd2hpbGUgKChidXMgPSBwY2lfZmluZF9uZXh0X2J1cyhidXMpKSAhPSBOVUxMKSB7CiAJCWlmIChidXMtPm51bWJlciA9PSBidXNudW0pIHsKIAkJCS8qIEFscmVhZHkgc2Nhbm5lZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9kaXJlY3QuYyBiL2FyY2gvaTM4Ni9wY2kvZGlyZWN0LmMKaW5kZXggZTNhYzUwMi4uOTkwMTJiOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9kaXJlY3QuYworKysgYi9hcmNoL2kzODYvcGNpL2RpcmVjdC5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlyZXR1cm4gd29ya3M7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHBjaV9kaXJlY3RfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgcGNpX2RpcmVjdF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZWdpb24sICpyZWdpb24yOwogCkBAIC0yNTgsMTYgKzI1OCwxNiBAQAogCWlmIChwY2lfY2hlY2tfdHlwZTEoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIGNvbmZpZ3VyYXRpb24gdHlwZSAxXG4iKTsKIAkJcmF3X3BjaV9vcHMgPSAmcGNpX2RpcmVjdF9jb25mMTsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9CiAJcmVsZWFzZV9yZXNvdXJjZShyZWdpb24pOwogCiAgdHlwZTI6CiAJaWYgKChwY2lfcHJvYmUgJiBQQ0lfUFJPQkVfQ09ORjIpID09IDApCi0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAJcmVnaW9uID0gcmVxdWVzdF9yZWdpb24oMHhDRjgsIDQsICJQQ0kgY29uZjIiKTsKIAlpZiAoIXJlZ2lvbikKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAlyZWdpb24yID0gcmVxdWVzdF9yZWdpb24oMHhDMDAwLCAweDEwMDAsICJQQ0kgY29uZjIiKTsKIAlpZiAoIXJlZ2lvbjIpCiAJCWdvdG8gZmFpbDI7CkBAIC0yNzUsMTUgKzI3NSwxMCBAQAogCWlmIChwY2lfY2hlY2tfdHlwZTIoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIGNvbmZpZ3VyYXRpb24gdHlwZSAyXG4iKTsKIAkJcmF3X3BjaV9vcHMgPSAmcGNpX2RpcmVjdF9jb25mMjsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9CiAKIAlyZWxlYXNlX3Jlc291cmNlKHJlZ2lvbjIpOwogIGZhaWwyOgogCXJlbGVhc2VfcmVzb3VyY2UocmVnaW9uKTsKLQotIG91dDoKLQlyZXR1cm4gMDsKIH0KLQotYXJjaF9pbml0Y2FsbChwY2lfZGlyZWN0X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9pbml0LmMgYi9hcmNoL2kzODYvcGNpL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTE1NmQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pMzg2L3BjaS9pbml0LmMKQEAgLTAsMCArMSwyNSBAQAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlICJwY2kuaCIKKworLyogYXJjaF9pbml0Y2FsbCBoYXMgdG9vIHJhbmRvbSBvcmRlcmluZywgc28gY2FsbCB0aGUgaW5pdGlhbGl6ZXJzCisgICBpbiB0aGUgcmlnaHQgc2VxdWVuY2UgZnJvbSBoZXJlLiAqLworc3RhdGljIF9faW5pdCBpbnQgcGNpX2FjY2Vzc19pbml0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BDSV9NTUNPTkZJRworCXBjaV9tbWNmZ19pbml0KCk7CisjZW5kaWYKKwlpZiAocmF3X3BjaV9vcHMpCisJCXJldHVybiAwOworI2lmZGVmIENPTkZJR19QQ0lfQklPUworCXBjaV9wY2Jpb3NfaW5pdCgpOworI2VuZGlmCisJaWYgKHJhd19wY2lfb3BzKQorCQlyZXR1cm4gMDsKKyNpZmRlZiBDT05GSUdfUENJX0RJUkVDVAorCXBjaV9kaXJlY3RfaW5pdCgpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKHBjaV9hY2Nlc3NfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMgYi9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKaW5kZXggMGVlOGE5OC4uNjEzNzg5MCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYwpAQCAtMTcyLDI1ICsxNzIsMjAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHBjaV9tbWNmZ19pbml0KHZvaWQpCit2b2lkIF9faW5pdCBwY2lfbW1jZmdfaW5pdCh2b2lkKQogewogCWlmICgocGNpX3Byb2JlICYgUENJX1BST0JFX01NQ09ORikgPT0gMCkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCWFjcGlfdGFibGVfcGFyc2UoQUNQSV9NQ0ZHLCBhY3BpX3BhcnNlX21jZmcpOwogCWlmICgocGNpX21tY2ZnX2NvbmZpZ19udW0gPT0gMCkgfHwKIAkgICAgKHBjaV9tbWNmZ19jb25maWcgPT0gTlVMTCkgfHwKIAkgICAgKHBjaV9tbWNmZ19jb25maWdbMF0uYmFzZV9hZGRyZXNzID09IDApKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBVc2luZyBNTUNPTkZJR1xuIik7CiAJcmF3X3BjaV9vcHMgPSAmcGNpX21tY2ZnOwogCXBjaV9wcm9iZSA9IChwY2lfcHJvYmUgJiB+UENJX1BST0JFX01BU0spIHwgUENJX1BST0JFX01NQ09ORjsKIAogCXVucmVhY2hhYmxlX2RldmljZXMoKTsKLQotIG91dDoKLQlyZXR1cm4gMDsKIH0KLQotYXJjaF9pbml0Y2FsbChwY2lfbW1jZmdfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvcGNpL3BjYmlvcy5jIGIvYXJjaC9pMzg2L3BjaS9wY2Jpb3MuYwppbmRleCBiOWQ2NWYwLi4xZWVjMDg2IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL3BjYmlvcy5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvcGNiaW9zLmMKQEAgLTQ3NiwxNCArNDc2LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKHBjaWJpb3Nfc2V0X2lycV9yb3V0aW5nKTsKIAotc3RhdGljIGludCBfX2luaXQgcGNpX3BjYmlvc19pbml0KHZvaWQpCit2b2lkIF9faW5pdCBwY2lfcGNiaW9zX2luaXQodm9pZCkKIHsKIAlpZiAoKHBjaV9wcm9iZSAmIFBDSV9QUk9CRV9CSU9TKSAKIAkJJiYgKChyYXdfcGNpX29wcyA9IHBjaV9maW5kX2Jpb3MoKSkpKSB7CiAJCXBjaV9wcm9iZSB8PSBQQ0lfQklPU19TT1JUOwogCQlwY2lfYmlvc19wcmVzZW50ID0gMTsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKLWFyY2hfaW5pdGNhbGwocGNpX3BjYmlvc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvcGNpLmggYi9hcmNoL2kzODYvcGNpL3BjaS5oCmluZGV4IGY1NTA3ODEuLjEyMDM1ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvcGNpLmgKKysrIGIvYXJjaC9pMzg2L3BjaS9wY2kuaApAQCAtODAsNCArODAsNyBAQAogZXh0ZXJuIGludCBwY2lfY29uZjFfcmVhZCh1bnNpZ25lZCBpbnQgc2VnLCB1bnNpZ25lZCBpbnQgYnVzLAogCQkJICB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCByZWcsIGludCBsZW4sIHUzMiAqdmFsdWUpOwogCitleHRlcm4gdm9pZCBwY2lfZGlyZWN0X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwY2lfcGNiaW9zX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwY2lfbW1jZmdfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA4NDVjZDA5Li5mZjdhZTZiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtMjcxLDYgKzI3MSwyNSBAQAogCSAgSW50ZWwgSUE2NCBjaGlwcyB3aXRoIE11bHRpVGhyZWFkaW5nIGF0IGEgY29zdCBvZiBzbGlnaHRseSBpbmNyZWFzZWQKIAkgIG92ZXJoZWFkIGluIHNvbWUgcGxhY2VzLiBJZiB1bnN1cmUgc2F5IE4gaGVyZS4KIAorY29uZmlnIFBFUk1JVF9CU1BfUkVNT1ZFCisJYm9vbCAiU3VwcG9ydCByZW1vdmFsIG9mIEJvb3RzdHJhcCBQcm9jZXNzb3IiCisJZGVwZW5kcyBvbiBIT1RQTFVHX0NQVQorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwlTYXkgWSBoZXJlIGlmIHlvdXIgcGxhdGZvcm0gU0FMIHdpbGwgc3VwcG9ydCByZW1vdmFsIG9mIEJTUCB3aXRoIEhPVFBMVUdfQ1BVCisJc3VwcG9ydC4gCisKK2NvbmZpZyBGT1JDRV9DUEVJX1JFVEFSR0VUCisJYm9vbCAiRm9yY2UgYXNzdW1wdGlvbiB0aGF0IENQRUkgY2FuIGJlIHJlLXRhcmdldHRlZCIKKwlkZXBlbmRzIG9uIFBFUk1JVF9CU1BfUkVNT1ZFCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCVNheSBZIGlmIHlvdSBuZWVkIHRvIGZvcmNlIHRoZSBhc3N1bXB0aW9uIHRoYXQgQ1BFSSBjYW4gYmUgcmUtdGFyZ2V0dGVkIHRvCisJYW55IGNwdSBpbiB0aGUgc3lzdGVtLiBUaGlzIGhpbnQgaXMgYXZhaWxhYmxlIHZpYSBBQ1BJIDMuMCBzcGVjaWZpY2F0aW9ucy4KKwlUaWdlcjQgc3lzdGVtcyBhcmUgY2FwYWJsZSBvZiByZS1kaXJlY3RpbmcgQ1BFSSB0byBhbnkgQ1BVIG90aGVyIHRoYW4gQlNQLgorCVRoaXMgb3B0aW9uIGl0IHVzZWZ1bCB0byBlbmFibGUgdGhpcyBmZWF0dXJlIG9uIG9sZGVyIEJJT1MncyBhcyB3ZWxsLgorCVlvdSBjYW4gYWxzbyBlbmFibGUgdGhpcyBieSB1c2luZyBib290IGNvbW1hbmQgbGluZSBvcHRpb24gZm9yY2VfY3BlaT0xLgorCiBjb25maWcgUFJFRU1QVAogCWJvb2wgIlByZWVtcHRpYmxlIEtlcm5lbCIKICAgICAgICAgaGVscApAQCAtNDUzLDYgKzQ3Miw3IEBACiAKIGNvbmZpZyBLUFJPQkVTCiAJYm9vbCAiS3Byb2JlcyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBNT0RVTEVTCiAJaGVscAogCSAgS3Byb2JlcyBhbGxvd3MgeW91IHRvIHRyYXAgYXQgYWxtb3N0IGFueSBrZXJuZWwgYWRkcmVzcyBhbmQKIAkgIGV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbi4gIHJlZ2lzdGVyX2twcm9iZSgpIGVzdGFibGlzaGVzCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwppbmRleCBiNDA2NzJiLi45MGU5YzJlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzEKLSMgV2VkIFNlcCAxNCAxNToxODo0OSAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1CisjIE1vbiBGZWIgMjcgMTY6MTA6NDIgMjAwNgogIwogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0yMywxNyArMjIsMTggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CkBAIC00Miw4ICs0MiwxMCBAQAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTU4LDE3ICs2MCwzNiBAQAogQ09ORklHX1NUT1BfTUFDSElORT15CiAKICMKKyMgQmxvY2sgbGF5ZXIKKyMKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKICMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCiAjCiBDT05GSUdfSUE2ND15CiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX01NVT15CitDT05GSUdfU1dJT1RMQj15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT049eQogQ09ORklHX0VGST15CiBDT05GSUdfR0VORVJJQ19JT01BUD15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ETUFfSVNfRE1BMzI9eQogIyBDT05GSUdfSUE2NF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X0RJRz15CiAjIENPTkZJR19JQTY0X0hQX1pYMSBpcyBub3Qgc2V0CkBAIC04MSwxOCArMTAyLDE3IEBACiAjIENPTkZJR19JQTY0X1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogQ09ORklHX0lBNjRfUEFHRV9TSVpFXzE2S0I9eQogIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfUEdUQUJMRV8zPXkKKyMgQ09ORklHX1BHVEFCTEVfNCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKIENPTkZJR19JQTY0X0JSTF9FTVU9eQogQ09ORklHX0lBNjRfTDFfQ0FDSEVfU0hJRlQ9NgotIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMX01FTV9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9DWUNMT05FIGlzIG5vdCBzZXQKIENPTkZJR19JT1NBUElDPXkKLSMgQ09ORklHX0lBNjRfU0dJX1NOX1hQIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE4CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNwogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCiAjIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0CkBAIC0xMDUsNyArMTI1LDEyIEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9ERUNfTE9DSz15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorIyBDT05GSUdfVklSVFVBTF9NRU1fTUFQIGlzIG5vdCBzZXQKIENPTkZJR19JQTMyX1NVUFBPUlQ9eQogQ09ORklHX0NPTVBBVD15CiAjIENPTkZJR19JQTY0X01DQV9SRUNPVkVSWSBpcyBub3Qgc2V0CkBAIC0xMTcsNyArMTQyLDYgQEAKICMKIENPTkZJR19FRklfVkFSUz15CiBDT05GSUdfRUZJX1BDRFA9eQotIyBDT05GSUdfREVMTF9SQlUgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIApAQCAtMTI1LDYgKzE0OSw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkKICMKIENPTkZJR19QTT15CitDT05GSUdfUE1fTEVHQUNZPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM3LDYgKzE2Miw3IEBACiBDT05GSUdfQUNQSV9USEVSTUFMPW0KIENPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKICMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FDUElfRUM9eQogQ09ORklHX0FDUElfUE9XRVI9eQogQ09ORklHX0FDUElfU1lTVEVNPXkKICMgQ09ORklHX0FDUElfQ09OVEFJTkVSIGlzIG5vdCBzZXQKQEAgLTE3Myw2ICsxOTksNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTIwNiw2ICsyMzMsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTIxOCwxNCArMjUwLDE2IEBACiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CkBAIC0yODYsMjAgKzMyMCwxMyBAQAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9bQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPW0KIAogIwpAQCAtMzkwLDYgKzQxNyw3IEBACiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKICMKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC0zOTksNiArNDI3LDcgQEAKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldApAQCAtNDA5LDE0ICs0MzgsNyBAQAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MF8xMDQwIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTI0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKQEAgLTQ0OCw2ICs0NzAsNyBAQAogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKQEAgLTQ4Niw2ICs1MDksNyBAQAogQ09ORklHX01JST15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKIAogIwpAQCAtNTI0LDYgKzU0OCw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CkBAIC02MzAsNiArNjU1LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9BQ1BJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKQEAgLTY4MSw2ICs3MDcsNyBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTczMSwxMiArNzU4LDE5IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzU0LDYgKzc4OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldApAQCAtNzc1LDYgKzgxMCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CkBAIC04MzAsNiArODY2LDggQEAKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCiAjIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTgzNywxNyArODc1LDE4IEBACiAjIEdlbmVyaWMgZGV2aWNlcwogIwogQ09ORklHX1NORF9PUEwzX0xJQj1tCitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorQ09ORklHX1NORF9BQzk3X0JVUz1tCiAjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9BQzk3X0NPREVDPW0KLUNPTkZJR19TTkRfQUM5N19CVVM9bQogCiAjCiAjIFBDSSBkZXZpY2VzCiAjCisjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CkBAIC04NTYsMzggKzg5NSwzOCBAQAogIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogQ09ORklHX1NORF9DUzQyODE9bQorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgZGV2aWNlcwpAQCAtOTI5LDEyICs5NjgsMTUgQEAKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCiAjCiAjIENPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0JMVUVUT09USF9UVFk9bQogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPW0KIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKIENPTkZJR19VU0JfU1RPUkFHRT1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NDYsMTMgKzk4OCwxNSBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9bQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CiAKQEAgLTk3Miw2ICsxMDE2LDcgQEAKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCkBAIC0xMDQ2LDcgKzEwOTEsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKICMKIAogIwpAQCAtMTA3MSw2ICsxMTE2LDcgQEAKIENPTkZJR19YRlNfU0VDVVJJVFk9eQogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTExMTEsNiArMTE1Nyw3IEBACiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMTUzLDYgKzEyMDAsNyBAQAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KIENPTkZJR19DSUZTX1NUQVRTPXkKKyMgQ09ORklHX0NJRlNfU1RBVFMyIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTX1hBVFRSPXkKIENPTkZJR19DSUZTX1BPU0lYPXkKICMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKQEAgLTExNzksNiArMTIyNyw3IEBACiBDT05GSUdfU0dJX1BBUlRJVElPTj15CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19FRklfUEFSVElUSU9OPXkKIAogIwpAQCAtMTIzNywyOCArMTI4NiwzMiBAQAogQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0CisjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CiAjCiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUFJFRU1QVD15CitDT05GSUdfREVCVUdfTVVURVhFUz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9HUkFOVUxFXzE2TUIgaXMgbm90IHNldAogQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CPXkKICMgQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9nZW5zcGFyc2VfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2Vuc3BhcnNlX2RlZmNvbmZpZwppbmRleCA5OTFjMDdiLi43NDRmZDJmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9nZW5zcGFyc2VfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL2dlbnNwYXJzZV9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzIKLSMgV2VkIFNlcCAyOCAwODoyNzoyOSAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1CisjIFRodSBNYXIgIDIgMTY6Mzk6MTAgMjAwNgogIwogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0yMywxOCArMjIsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKQEAgLTQzLDggKzQzLDEwIEBACiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtNTksMTcgKzYxLDM2IEBACiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIAogIworIyBCbG9jayBsYXllcgorIworCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKICMKIENPTkZJR19JQTY0PXkKIENPTkZJR182NEJJVD15CiBDT05GSUdfTU1VPXkKK0NPTkZJR19TV0lPVExCPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1RJTUVfSU5URVJQT0xBVElPTj15CiBDT05GSUdfRUZJPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RNQV9JU19ETUEzMj15CiBDT05GSUdfSUE2NF9HRU5FUklDPXkKICMgQ09ORklHX0lBNjRfRElHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lBNjRfSFBfWlgxIGlzIG5vdCBzZXQKQEAgLTgyLDYgKzEwMyw4IEBACiAjIENPTkZJR19JQTY0X1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogQ09ORklHX0lBNjRfUEFHRV9TSVpFXzE2S0I9eQogIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfUEdUQUJMRV8zPXkKKyMgQ09ORklHX1BHVEFCTEVfNCBpcyBub3Qgc2V0CiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAogQ09ORklHX0haXzI1MD15CiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKQEAgLTEwNSw2ICsxMjgsOSBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKQEAgLTExNywxMyArMTQzLDEzIEBACiBDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlk9eQogQ09ORklHX1BFUkZNT049eQogQ09ORklHX0lBNjRfUEFMSU5GTz15CitDT05GSUdfU0dJX1NOPXkKIAogIwogIyBGaXJtd2FyZSBEcml2ZXJzCiAjCiBDT05GSUdfRUZJX1ZBUlM9eQogQ09ORklHX0VGSV9QQ0RQPXkKLSMgQ09ORklHX0RFTExfUkJVIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCiAKQEAgLTEzMSw2ICsxNTcsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IGFuZCBBQ1BJCiAjCiBDT05GSUdfUE09eQorQ09ORklHX1BNX0xFR0FDWT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NSw2ICsxNzIsNyBAQAogQ09ORklHX0FDUElfTlVNQT15CiBDT05GSUdfQUNQSV9CTEFDS0xJU1RfWUVBUj0wCiAjIENPTkZJR19BQ1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BQ1BJX0VDPXkKIENPTkZJR19BQ1BJX1BPV0VSPXkKIENPTkZJR19BQ1BJX1NZU1RFTT15CiBDT05GSUdfQUNQSV9DT05UQUlORVI9bQpAQCAtMTg3LDYgKzIxNSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yMjEsNiArMjUwLDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0yMzMsOCArMjY3LDExIEBACiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTI3NSw3ICszMTIsMTMgQEAKICMKICMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CiAjCi0jIENPTkZJR19QTlAgaXMgbm90IHNldAorQ09ORklHX1BOUD15CisjIENPTkZJR19QTlBfREVCVUcgaXMgbm90IHNldAorCisjCisjIFByb3RvY29scworIworQ09ORklHX1BOUEFDUEk9eQogCiAjCiAjIEJsb2NrIGRldmljZXMKQEAgLTI5NSwyMCArMzM4LDEzIEBACiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwogIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiAjCiBDT05GSUdfSURFPXkKK0NPTkZJR19JREVfTUFYX0hXSUZTPTQKIENPTkZJR19CTEtfREVWX0lERT15CiAKICMKQEAgLTMyNyw2ICszNjMsNyBAQAogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9JREVQTlAgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CkBAIC00MDAsNiArNDM3LDcgQEAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTQwOSwxNiArNDQ3LDE5IEBACiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfU0FUQT15CiAjIENPTkZJR19TQ1NJX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfU1ZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVRBX1BJSVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX01WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BEQ19BRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfU1g0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1NJTDI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1VMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfVklBIGlzIG5vdCBzZXQKQEAgLTQzNiwxNCArNDc3LDcgQEAKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODBfMTA0MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPXkKLUNPTkZJR19TQ1NJX1FMQTIxWFg9bQotQ09ORklHX1NDU0lfUUxBMjJYWD1tCi1DT05GSUdfU0NTSV9RTEEyMzAwPW0KLUNPTkZJR19TQ1NJX1FMQTIzMjI9bQotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNDc2LDYgKzUxMCw3IEBACiBDT05GSUdfRlVTSU9OPXkKIENPTkZJR19GVVNJT05fU1BJPXkKIENPTkZJR19GVVNJT05fRkM9bQorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CiAjIENPTkZJR19GVVNJT05fQ1RMIGlzIG5vdCBzZXQKIApAQCAtNDk3LDYgKzUzMiw3IEBACiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NCMTAwMCBpcyBub3Qgc2V0CiAKICMKICMgQVJDbmV0IGRldmljZXMKQEAgLTUxNSw2ICs1NTEsNyBAQAogQ09ORklHX01JST1tCiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKIAogIwpAQCAtNTY0LDYgKzYwMSw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQpAQCAtNjY4LDEyICs3MDYsMTUgQEAKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorIyBDT05GSUdfQ09NUFVUT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQ1lDTEFERVMgaXMgbm90IHNldAogIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAogIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAorIyBDT05GSUdfU1lOQ0xJTktfR1QgaXMgbm90IHNldAogIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWCBpcyBub3Qgc2V0CkBAIC02ODksNiArNzMwLDcgQEAKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9BQ1BJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKQEAgLTczOCwxMCArNzgwLDEwIEBACiAjIENPTkZJR19EUk1fVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9TQVZBR0UgaXMgbm90IHNldAogQ09ORklHX1JBV19EUklWRVI9bQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKIENPTkZJR19IUEVUPXkKICMgQ09ORklHX0hQRVRfUlRDX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfSFBFVF9NTUFQPXkKLUNPTkZJR19NQVhfUkFXX0RFVlM9MjU2CiAjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAogQ09ORklHX01NVElNRVI9eQogCkBAIC03NDksNiArNzkxLDcgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC03NTYsNiArNzk5LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzY1LDYgKzgxNCw3IEBACiAjCiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwpAQCAtODE1LDI2ICs4NjUsMjggQEAKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfR0VORVJJQ19EUklWRVI9eQogCiAjCiAjIEdlbmVyaWMgZGV2aWNlcwogIwogQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCiBDT05GSUdfU05EX09QTDNfTElCPW0KK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCitDT05GSUdfU05EX0FDOTdfQlVTPW0KIENPTkZJR19TTkRfRFVNTVk9bQogQ09ORklHX1NORF9WSVJNSURJPW0KIENPTkZJR19TTkRfTVRQQVY9bQogQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwPW0KIENPTkZJR19TTkRfTVBVNDAxPW0KLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0FDOTdfQlVTPW0KIAogIwogIyBQQ0kgZGV2aWNlcwogIworIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldApAQCAtODQzLDQwICs4OTUsNDAgQEAKICMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0NTNDI4MT1tCiBDT05GSUdfU05EX0NTNDZYWD1tCiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQPXkKLUNPTkZJR19TTkRfQ1M0MjgxPW0KIENPTkZJR19TTkRfRU1VMTBLMT1tCiAjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0ZNODAxPW0KICMgQ09ORklHX1NORF9GTTgwMV9URUE1NzVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAKICMKICMgVVNCIGRldmljZXMKQEAgLTkyMiwxMiArOTc0LDE1IEBACiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwogIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApAQCAtOTM5LDEyICs5OTQsMTUgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPW0KIENPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CiAKQEAgLTk2NCw2ICsxMDIyLDcgQEAKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCkBAIC0xMDQzLDYgKzExMDIsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCiAjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKIAogIwogIyBTTiBEZXZpY2VzCkBAIC0xMDUxLDYgKzExMTEsMTAgQEAKIENPTkZJR19TR0lfSU9DMz15CiAKICMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xMDc5LDYgKzExNDMsNyBAQAogIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTExMjAsNiArMTE4NSw3IEBACiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMTg5LDYgKzEyNTUsNyBAQAogQ09ORklHX1NHSV9QQVJUSVRJT049eQogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRUZJX1BBUlRJVElPTj15CiAKICMKQEAgLTEyNTQsMjYgKzEzMjEsMzAgQEAKICMgQ09ORklHX0hQX1NJTVNDU0kgaXMgbm90IHNldAogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0CisjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MjAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X0dSQU5VTEVfMTZNQj15CiAjIENPTkZJR19JQTY0X0dSQU5VTEVfNjRNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JQTY0X1BSSU5UX0hBWkFSRFMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc2ltX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3NpbV9kZWZjb25maWcKaW5kZXggYTI2NzgxYy4uZDkxNDZjMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc2ltX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9zaW1fZGVmY29uZmlnCkBAIC0xLDM5ICsxLDUyIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1CisjIE1vbiBGZWIgMjcgMTY6MTM6NDEgMjAwNgogIwogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci0jIENPTkZJR19DTEVBTl9DT01QSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAotQ09ORklHX0JST0tFTj15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE2Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTQzLDIxICs1Niw0NSBAQAogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIAogIworIyBCbG9jayBsYXllcgorIworCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIwogIyBQcm9jZXNzb3IgdHlwZSBhbmQgZmVhdHVyZXMKICMKIENPTkZJR19JQTY0PXkKIENPTkZJR182NEJJVD15CiBDT05GSUdfTU1VPXkKK0NPTkZJR19TV0lPVExCPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1RJTUVfSU5URVJQT0xBVElPTj15CiBDT05GSUdfRUZJPXkKK0NPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0RNQV9JU19ETUEzMj15CiAjIENPTkZJR19JQTY0X0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9ESUcgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9IUF9aWDEgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JQTY0X1NHSV9TTjIgaXMgbm90IHNldAogQ09ORklHX0lBNjRfSFBfU0lNPXkKICMgQ09ORklHX0lUQU5JVU0gaXMgbm90IHNldApAQCAtNjYsMTcgKzEwMywzNiBAQAogIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogQ09ORklHX0lBNjRfUEFHRV9TSVpFXzY0S0I9eQorQ09ORklHX1BHVEFCTEVfMz15CisjIENPTkZJR19QR1RBQkxFXzQgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCiBDT05GSUdfSUE2NF9MMV9DQUNIRV9TSElGVD03Ci0jIENPTkZJR19NQ0tJTkxFWV9BU1RFUF9TUEVDSUZJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMX01FTV9NQVAgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9DWUNMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE4CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNwogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz02NAorIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IQVZFX0RFQ19MT0NLPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKKyMgQ09ORklHX1ZJUlRVQUxfTUVNX01BUCBpcyBub3Qgc2V0CiBDT05GSUdfSUEzMl9TVVBQT1JUPXkKIENPTkZJR19DT01QQVQ9eQorIyBDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlkgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRk1PTiBpcyBub3Qgc2V0CiBDT05GSUdfSUE2NF9QQUxJTkZPPW0KIApAQCAtODQsNyArMTQwLDYgQEAKICMgRmlybXdhcmUgRHJpdmVycwogIwogQ09ORklHX0VGSV9WQVJTPXkKLSMgQ09ORklHX1NNQklPUyBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9eQogCkBAIC05MywxNSArMTQ4LDk4IEBACiAjCiAKICMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCiAjIERldmljZSBEcml2ZXJzCiAjCiAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKICMKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CkBAIC0xMTgsMTIgKzI1NiwxNiBAQAogIwogIyBCbG9jayBkZXZpY2VzCiAjCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKQEAgLTEzMyw2ICsyNzUsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX1BST0NfRlM9eQogCkBAIC0xNDQsNiArMjg3LDcgQEAKICMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogCiAjCiAjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwpAQCAtMTU3LDEzICszMDEsMTQgQEAKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKICMKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEFfUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xNzQsNzcgKzMxOSw0NyBAQAogIwogIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKIAogIwogIyBJMk8gZGV2aWNlIHN1cHBvcnQKICMKIAogIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX05FVD15CisjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAKICMKLSMgTmV0d29ya2luZyBvcHRpb25zCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSFdfRkxPV0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKIAogIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKICMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAKICMKLSMgTmV0d29yayB0ZXN0aW5nCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQogIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKIAogIwogIyBJU0ROIHN1YnN5c3RlbQpAQCAtMjc0LDE2ICszODksNiBAQAogIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAogCiAjCi0jIElucHV0IEkvTyBkcml2ZXJzCi0jCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKLQotIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtMjkzLDYgKzM5OCwxNSBAQAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKQEAgLTMxMCw3ICs0MjQsNiBAQAogIwogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FJQzAyX1RBUEUgaXMgbm90IHNldAogCiAjCiAjIElQTUkKQEAgLTMyNCwxNSArNDM3LDE5IEBACiBDT05GSUdfRUZJX1JUQz15CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKLSMgQ09ORklHX0ZUQVBFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtMzQwLDEwICs0NTcsMzMgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIwogIyBNaXNjIGRldmljZXMKICMKIAogIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CkBAIC0zNjIsNyArNTAyLDYgQEAKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NREFfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiAKICMKQEAgLTM3Myw2ICs1MTIsMTIgQEAKICMKICMgVVNCIHN1cHBvcnQKICMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKIAogIwogIyBVU0IgR2FkZ2V0IFN1cHBvcnQKQEAgLTM4MCwyMiArNTI1LDQxIEBACiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTQwNiw3ICs1NzAsOCBAQAogIwogIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCiAjCi0jIENPTkZJR19GQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtNDE1LDEyICs1ODAsMTIgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC00NDgsMTggKzYxMywyMiBAQAogQ09ORklHX05GU19ESVJFQ1RJTz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTQ3NiwxMCArNjQ1LDEwIEBACiAjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkVDOThfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRUZJX1BBUlRJVElPTj15CiAKICMKQEAgLTQ5MCw4ICs2NTksMTMgQEAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRPXkKIAogIwogIyBIUCBTaW11bGF0b3IgZHJpdmVycwpAQCAtNTAyLDMzICs2NzYsNTAgQEAKIENPTkZJR19IUF9TSU1TQ1NJPXkKIAogIwotIyBQcm9maWxpbmcgc3VwcG9ydAorIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCi0jIENPTkZJR19JQTY0X0dSQU5VTEVfMTZNQiBpcyBub3Qgc2V0Ci1DT05GSUdfSUE2NF9HUkFOVUxFXzY0TUI9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19JQTY0X1BSSU5UX0hBWkFSRFMgaXMgbm90IHNldAotIyBDT05GSUdfRElTQUJMRV9WSFBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfSUE2NF9HUkFOVUxFXzE2TUIgaXMgbm90IHNldAorQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CPXkKKyMgQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUyBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNBQkxFX1ZIUFQgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9ERUJVR19DTVBYQ0hHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lBNjRfREVCVUdfSVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCiAjCiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZwppbmRleCAzY2I1MDNiLi44MjA2NzUyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3NuMl9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzQKLSMgRnJpIERlYyAgMiAxMDozMzo0OCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1CisjIE1vbiBGZWIgMjcgMTY6MDY6MzggMjAwNgogIwogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0yMywxNyArMjIsMTggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0NQVVNFVFM9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKQEAgLTQyLDggKzQyLDEwIEBACiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtODgsNyArOTAsNyBAQAogQ09ORklHX0dFTkVSSUNfSU9NQVA9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1I9eQotQ09ORklHX1pPTkVfRE1BX0lTX0RNQTMyPXkKK0NPTkZJR19ETUFfSVNfRE1BMzI9eQogIyBDT05GSUdfSUE2NF9HRU5FUklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lBNjRfRElHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lBNjRfSFBfWlgxIGlzIG5vdCBzZXQKQEAgLTEyNiw2ICsxMjgsNyBAQAogQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQpAQCAtMTQwLDYgKzE0Myw3IEBACiBDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlk9eQogQ09ORklHX1BFUkZNT049eQogQ09ORklHX0lBNjRfUEFMSU5GTz15CitDT05GSUdfU0dJX1NOPXkKIAogIwogIyBGaXJtd2FyZSBEcml2ZXJzCkBAIC0xNjYsNiArMTcwLDcgQEAKIENPTkZJR19BQ1BJX05VTUE9eQogQ09ORklHX0FDUElfQkxBQ0tMSVNUX1lFQVI9MAogIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQUNQSV9FQz15CiBDT05GSUdfQUNQSV9QT1dFUj15CiBDT05GSUdfQUNQSV9TWVNURU09eQogIyBDT05GSUdfQUNQSV9DT05UQUlORVIgaXMgbm90IHNldApAQCAtMjA3LDYgKzIxMiw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMjQ3LDYgKzI1MywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzMwLDYgKzM0MSw3IEBACiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNDU3LDEzICs0NjksNyBAQAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMjJYWD15Ci1DT05GSUdfU0NTSV9RTEEyMzAwPXkKLUNPTkZJR19TQ1NJX1FMQTIzMjI9eQotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNTQ1LDYgKzU1MSw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogQ09ORklHX1RJR09OMz15CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKQEAgLTYzMiwxMiArNjM5LDE1IEBACiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKKyMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAogIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKICMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAogIyBDT05GSUdfU1ggaXMgbm90IHNldApAQCAtNjg2LDggKzY5Niw4IEBACiBDT05GSUdfQUdQX1NHSV9USU9DQT15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogQ09ORklHX1JBV19EUklWRVI9bQotIyBDT05GSUdfSFBFVCBpcyBub3Qgc2V0CiBDT05GSUdfTUFYX1JBV19ERVZTPTI1NgorIyBDT05GSUdfSFBFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAogQ09ORklHX01NVElNRVI9eQogCkBAIC03MDMsNiArNzEzLDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzkxLDEyICs4MDcsMTQgQEAKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9bQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKIApAQCAtODE2LDYgKzgzNCw3IEBACiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIApAQCAtOTAzLDYgKzkyMiwxMCBAQAogQ09ORklHX1NHSV9JT0MzPXkKIAogIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTkzMSw2ICs5NTQsNyBAQAogIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKIENPTkZJR19YRlNfUlQ9eQorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtOTczLDYgKzk5Nyw3IEBACiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTA0MSw2ICsxMDY2LDcgQEAKIENPTkZJR19TR0lfUEFSVElUSU9OPXkKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX0VGSV9QQVJUSVRJT049eQogCiAjCkBAIC0xMTExLDE5ICsxMTM3LDIxIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTIwCiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X0dSQU5VTEVfMTZNQj15CiAjIENPTkZJR19JQTY0X0dSQU5VTEVfNjRNQiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy90aWdlcl9kZWZjb25maWcKaW5kZXggNjg1OTExOS4uNzY2YmY0OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvdGlnZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3RpZ2VyX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjNAotIyBGcmkgRGVjICAyIDE2OjA2OjMyIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzUKKyMgTW9uIEZlYiAyNyAxNTo0OToxOCAyMDA2CiAjCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTIzLDE4ICsyMiwxOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQpAQCAtNDMsOCArNDMsMTAgQEAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC04OCw3ICs5MCw3IEBACiBDT05GSUdfRUZJPXkKIENPTkZJR19HRU5FUklDX0lPTUFQPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX1pPTkVfRE1BX0lTX0RNQTMyPXkKK0NPTkZJR19ETUFfSVNfRE1BMzI9eQogIyBDT05GSUdfSUE2NF9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X0RJRz15CiAjIENPTkZJR19JQTY0X0hQX1pYMSBpcyBub3Qgc2V0CkBAIC0xMTQsNiArMTE2LDggQEAKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NAogQ09ORklHX0hPVFBMVUdfQ1BVPXkKK0NPTkZJR19QRVJNSVRfQlNQX1JFTU9WRT15CitDT05GSUdfRk9SQ0VfQ1BFSV9SRVRBUkdFVD15CiAjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0xNjIsNiArMTY2LDcgQEAKIENPTkZJR19BQ1BJX1RIRVJNQUw9bQogQ09ORklHX0FDUElfQkxBQ0tMSVNUX1lFQVI9MAogIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQUNQSV9FQz15CiBDT05GSUdfQUNQSV9QT1dFUj15CiBDT05GSUdfQUNQSV9TWVNURU09eQogQ09ORklHX0FDUElfQ09OVEFJTkVSPW0KQEAgLTIwMyw2ICsyMDgsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjM3LDYgKzI0MywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzI2LDYgKzMzNyw3IEBACiAjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKICMKIENPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAogQ09ORklHX0JMS19ERVZfSURFPXkKIAogIwpAQCAtNDQzLDEzICs0NTUsNyBAQAogQ09ORklHX1NDU0lfUUxPR0lDX0ZDPXkKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDX0ZJUk1XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotQ09ORklHX1NDU0lfUUxBMjFYWD1tCi1DT05GSUdfU0NTSV9RTEEyMlhYPW0KLUNPTkZJR19TQ1NJX1FMQTIzMDA9bQotQ09ORklHX1NDU0lfUUxBMjMyMj1tCi0jIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC01NzIsNiArNTc4LDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogQ09ORklHX1RJR09OMz15CkBAIC02NzYsMTIgKzY4MywxNSBAQAogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUk9DS0VUUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DWUNMQURFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAogIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NYIGlzIG5vdCBzZXQKQEAgLTY5NCw2ICs3MDQsNyBAQAogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX0FDUEk9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldApAQCAtNzM4LDEwICs3NDksMTAgQEAKICMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1NBVkFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj1tCitDT05GSUdfTUFYX1JBV19ERVZTPTI1NgogQ09ORklHX0hQRVQ9eQogIyBDT05GSUdfSFBFVF9SVENfSVJRIGlzIG5vdCBzZXQKIENPTkZJR19IUEVUX01NQVA9eQotQ09ORklHX01BWF9SQVdfREVWUz0yNTYKICMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0CiAKICMKQEAgLTc1Niw2ICs3NjcsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC03NjUsNiArNzgyLDcgQEAKICMKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCkBAIC04NTQsMTIgKzg3MiwxNSBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldApAQCAtODczLDYgKzg5NCw3IEBACiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIApAQCAtOTQ4LDcgKzk3MCw3IEBACiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQogIwogCiAjCkBAIC05ODAsNiArMTAwMiw3IEBACiAjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtMTAyMSw2ICsxMDQ0LDcgQEAKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwOTAsNiArMTExNCw3IEBACiBDT05GSUdfU0dJX1BBUlRJVElPTj15CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19FRklfUEFSVElUSU9OPXkKIAogIwpAQCAtMTE1NywxOCArMTE4MiwyMCBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X0dSQU5VTEVfMTZNQj15CiAjIENPTkZJR19JQTY0X0dSQU5VTEVfNjRNQiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvY29uZmlncy96eDFfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvengxX2RlZmNvbmZpZwppbmRleCA1Mzg5OWRjLi45NDlkYzQ2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvY29uZmlncy96eDFfZGVmY29uZmlnCisrKyBiL2FyY2gvaWE2NC9jb25maWdzL3p4MV9kZWZjb25maWcKQEAgLTEsMTYgKzEsMTMgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNC1yYzEKLSMgV2VkIFNlcCAxNCAxNToxNTowMSAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM1CisjIE1vbiBGZWIgMjcgMTU6NTU6MzYgMjAwNgogIwogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci0jIENPTkZJR19DTEVBTl9DT01QSUxFIGlzIG5vdCBzZXQKLUNPTkZJR19CUk9LRU49eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMjYsMTcgKzIzLDE4IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQpAQCAtNDUsOCArNDMsMTAgQEAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC01OSwxNyArNTksMzYgQEAKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldAogCiAjCisjIEJsb2NrIGxheWVyCisjCisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCiAjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcwogIwogQ09ORklHX0lBNjQ9eQogQ09ORklHXzY0QklUPXkKIENPTkZJR19NTVU9eQorQ09ORklHX1NXSU9UTEI9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfVElNRV9JTlRFUlBPTEFUSU9OPXkKIENPTkZJR19FRkk9eQogQ09ORklHX0dFTkVSSUNfSU9NQVA9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRE1BX0lTX0RNQTMyPXkKICMgQ09ORklHX0lBNjRfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JQTY0X0RJRyBpcyBub3Qgc2V0CiBDT05GSUdfSUE2NF9IUF9aWDE9eQpAQCAtODIsMTggKzEwMSwxNiBAQAogIyBDT05GSUdfSUE2NF9QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X1BBR0VfU0laRV8xNktCPXkKICMgQ09ORklHX0lBNjRfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX1BHVEFCTEVfMz15CisjIENPTkZJR19QR1RBQkxFXzQgaXMgbm90IHNldAogIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8yNTA9eQogIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MjUwCiBDT05GSUdfSUE2NF9MMV9DQUNIRV9TSElGVD03Ci0jIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKLUNPTkZJR19WSVJUVUFMX01FTV9NQVA9eQotQ09ORklHX0hPTEVTX0lOX1pPTkU9eQogIyBDT05GSUdfSUE2NF9DWUNMT05FIGlzIG5vdCBzZXQKIENPTkZJR19JT1NBUElDPXkKLSMgQ09ORklHX0lBNjRfU0dJX1NOX1hQIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE4CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNwogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0xNgogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldApAQCAtMTA2LDcgKzEyMywxNCBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfREVDX0xPQ0s9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9ERUZBVUxUPXkKK0NPTkZJR19WSVJUVUFMX01FTV9NQVA9eQorQ09ORklHX0hPTEVTX0lOX1pPTkU9eQogQ09ORklHX0lBMzJfU1VQUE9SVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15CkBAIC0xMTgsNyArMTQyLDYgQEAKICMKIENPTkZJR19FRklfVkFSUz15CiBDT05GSUdfRUZJX1BDRFA9eQotIyBDT05GSUdfREVMTF9SQlUgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKIApAQCAtMTI2LDYgKzE0OSw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkKICMKIENPTkZJR19QTT15CitDT05GSUdfUE1fTEVHQUNZPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM4LDYgKzE2Miw3IEBACiBDT05GSUdfQUNQSV9USEVSTUFMPXkKIENPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKICMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FDUElfRUM9eQogQ09ORklHX0FDUElfUE9XRVI9eQogQ09ORklHX0FDUElfU1lTVEVNPXkKICMgQ09ORklHX0FDUElfQ09OVEFJTkVSIGlzIG5vdCBzZXQKQEAgLTE3OSw2ICsyMDQsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjExLDE0ICsyMzcsMTcgQEAKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKICMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKworIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX0lQX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfQVJQVEFCTEVTPXkKLSMgQ09ORklHX0lQX05GX0FSUEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFIGlzIG5vdCBzZXQKIAogIwogIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKQEAgLTIyOSw2ICsyNTgsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTI0MSwxNCArMjc1LDE2IEBACiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CkBAIC0zMTAsMjAgKzM0NiwxMyBAQAogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCkBAIC00MDcsMTMgKzQzNiwxNCBAQAogIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9GQ19BVFRSUz15CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCiAjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDIxLDEzICs0NTEsMTEgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NQUUZDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEFfUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CkBAIC00MzgsMTcgKzQ2Niw5IEBACiBDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYX0lPTUFQUEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0lTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MD15Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwXzEwNDAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNDY1LDYgKzQ4NSw3IEBACiBDT05GSUdfRlVTSU9OPXkKIENPTkZJR19GVVNJT05fU1BJPXkKIENPTkZJR19GVVNJT05fRkM9eQorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CiBDT05GSUdfRlVTSU9OX0NUTD1tCiAKQEAgLTUwNSw2ICs1MjYsNyBAQAogQ09ORklHX01JST15CiAjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU1LDYgKzU3Nyw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQpAQCAtNjUyLDYgKzY3NSw3IEBACiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfQUNQST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9OAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CkBAIC03MDMsNiArNzI3LDcgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC03NTMsMTIgKzc3OCwxOSBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTc4OSw2ICs4MjEsNyBAQAogIwogIyBWaWRlbyBBZGFwdGVycwogIworIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0JUODQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0NQSUEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldApAQCAtNzk2LDE0ICs4MjksMTYgQEAKICMgQ09ORklHX1RVTkVSXzMwMzYgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU1RSQURJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19aT1JBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19aUjM2MTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fTVhCIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0RQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19IRVhJVU1fT1JJT04gaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fSEVYSVVNX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19DWDg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQVVESU9fREVDT0RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19ERUNPREVSIGlzIG5vdCBzZXQKIAogIwogIyBSYWRpbyBBZGFwdGVycwpAQCAtODI0LDcgKzg1OSw2IEBACiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKQEAgLTgzMyw2ICs4NjcsNyBAQAogIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CkBAIC04NDgsMTAgKzg4Myw3IEBACiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtODYwLDYgKzg5Miw3IEBACiBDT05GSUdfVkdBX0NPTlNPTEU9eQogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15CkBAIC04OTIsNiArOTI1LDggQEAKIENPTkZJR19TTkRfTUlYRVJfT1NTPXkKIENPTkZJR19TTkRfUENNX09TUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAogCkBAIC05MDAsMTcgKzkzNSwxOCBAQAogIwogQ09ORklHX1NORF9NUFU0MDFfVUFSVD15CiBDT05GSUdfU05EX09QTDNfTElCPXkKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CitDT05GSUdfU05EX0FDOTdfQlVTPXkKICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQotQ09ORklHX1NORF9BQzk3X0JVUz15CiAKICMKICMgUENJIGRldmljZXMKICMKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTkxOSwzOSArOTU1LDM5IEBACiAjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAogQ09ORklHX1NORF9GTTgwMT15CiBDT05GSUdfU05EX0ZNODAxX1RFQTU3NVg9eQorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgZGV2aWNlcwpAQCAtOTk3LDEyICsxMDMzLDE1IEBACiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwogIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApAQCAtMTAxNCwxMyArMTA1MywxNSBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKQEAgLTEwMzQsNiArMTA3NSw3IEBACiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIApAQCAtMTA0OSw2ICsxMDkxLDcgQEAKICMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZJQ0FNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1Y1MTEgaXMgbm90IHNldApAQCAtMTExMyw3ICsxMTU2LDcgQEAKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCiAjCiAKICMKQEAgLTExMzUsNiArMTE3OCw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKQEAgLTExNzQsNiArMTIxOCw3IEBACiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMjM4LDYgKzEyODMsNyBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19FRklfUEFSVElUSU9OPXkKIAogIwpAQCAtMTI5NiwyNiArMTM0MiwzMCBAQAogQ09ORklHX0dFTkVSSUNfUEVORElOR19JUlE9eQogCiAjCi0jIFByb2ZpbGluZyBzdXBwb3J0CisjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CiAjCiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0tQUk9CRVM9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfS1BST0JFUz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0lBNjRfR1JBTlVMRV8xNk1CPXkKICMgQ09ORklHX0lBNjRfR1JBTlVMRV82NE1CIGlzIG5vdCBzZXQKIENPTkZJR19JQTY0X1BSSU5UX0hBWkFSRFM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9kZWZjb25maWcKaW5kZXggZGNiYzc4YS4uM2U3NjcyOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvZGVmY29uZmlnCkBAIC0xLDE0ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtcmMxCi0jIFdlZCBTZXAgMTQgMTU6MTM6MDMgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjNQorIyBNb24gRmViIDI3IDE2OjAyOjI4IDIwMDYKICMKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMjMsMTggKzIyLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CkBAIC00Myw4ICs0MywxMCBAQAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTU5LDE3ICs2MSwzNiBAQAogQ09ORklHX1NUT1BfTUFDSElORT15CiAKICMKKyMgQmxvY2sgbGF5ZXIKKyMKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisKKyMKICMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCiAjCiBDT05GSUdfSUE2ND15CiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX01NVT15CitDT05GSUdfU1dJT1RMQj15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT049eQogQ09ORklHX0VGST15CiBDT05GSUdfR0VORVJJQ19JT01BUD15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19ETUFfSVNfRE1BMzI9eQogQ09ORklHX0lBNjRfR0VORVJJQz15CiAjIENPTkZJR19JQTY0X0RJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JQTY0X0hQX1pYMSBpcyBub3Qgc2V0CkBAIC04OSwxNCArMTEwLDEwIEBACiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0yNTAKIENPTkZJR19JQTY0X0wxX0NBQ0hFX1NISUZUPTcKLUNPTkZJR19OVU1BPXkKLUNPTkZJR19WSVJUVUFMX01FTV9NQVA9eQotQ09ORklHX0hPTEVTX0lOX1pPTkU9eQotQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CiBDT05GSUdfSUE2NF9DWUNMT05FPXkKIENPTkZJR19JT1NBUElDPXkKICMgQ09ORklHX0lBNjRfU0dJX1NOX1hQIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTE4CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xNwogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz01MTIKIENPTkZJR19IT1RQTFVHX0NQVT15CkBAIC0xMTAsMTkgKzEyNywyOSBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfREVDX0xPQ0s9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0RFRkFVTFQ9eQorQ09ORklHX05VTUE9eQorQ09ORklHX1ZJUlRVQUxfTUVNX01BUD15CitDT05GSUdfSE9MRVNfSU5fWk9ORT15CitDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQogQ09ORklHX0lBMzJfU1VQUE9SVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19JQTY0X01DQV9SRUNPVkVSWT15CiBDT05GSUdfUEVSRk1PTj15CiBDT05GSUdfSUE2NF9QQUxJTkZPPXkKK0NPTkZJR19TR0lfU049eQogCiAjCiAjIEZpcm13YXJlIERyaXZlcnMKICMKIENPTkZJR19FRklfVkFSUz15CiBDT05GSUdfRUZJX1BDRFA9eQotIyBDT05GSUdfREVMTF9SQlUgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIApAQCAtMTMwLDYgKzE1Nyw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgYW5kIEFDUEkKICMKIENPTkZJR19QTT15CitDT05GSUdfUE1fTEVHQUNZPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ0LDYgKzE3Miw3IEBACiBDT05GSUdfQUNQSV9OVU1BPXkKIENPTkZJR19BQ1BJX0JMQUNLTElTVF9ZRUFSPTAKICMgQ09ORklHX0FDUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FDUElfRUM9eQogQ09ORklHX0FDUElfUE9XRVI9eQogQ09ORklHX0FDUElfU1lTVEVNPXkKIENPTkZJR19BQ1BJX0NPTlRBSU5FUj1tCkBAIC0xODYsNiArMjE1LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTIyMCw2ICsyNTAsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTIzMiwxNCArMjY3LDE2IEBACiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CkBAIC0zMDEsMjAgKzMzOCwxMyBAQAogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAogIwogQ09ORklHX0lERT15CitDT05GSUdfSURFX01BWF9IV0lGUz00CiBDT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCkBAIC00MDcsNiArNDM3LDcgQEAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTQxNiwxNiArNDQ3LDE5IEBACiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfU0FUQT15CiAjIENPTkZJR19TQ1NJX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfU1ZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVRBX1BJSVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX01WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BEQ19BRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfU1g0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBX1NJTDI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1VMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfVklBIGlzIG5vdCBzZXQKQEAgLTQ0MywxNCArNDc3LDcgQEAKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPXkKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODBfMTA0MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPXkKLUNPTkZJR19TQ1NJX1FMQTIxWFg9bQotQ09ORklHX1NDU0lfUUxBMjJYWD1tCi1DT05GSUdfU0NTSV9RTEEyMzAwPW0KLUNPTkZJR19TQ1NJX1FMQTIzMjI9bQotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNDgzLDYgKzUxMCw3IEBACiBDT05GSUdfRlVTSU9OPXkKIENPTkZJR19GVVNJT05fU1BJPXkKIENPTkZJR19GVVNJT05fRkM9bQorIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CiAjIENPTkZJR19GVVNJT05fQ1RMIGlzIG5vdCBzZXQKIApAQCAtNTIzLDYgKzU1MSw3IEBACiBDT05GSUdfTUlJPW0KICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogCiAjCkBAIC01NzIsNiArNjAxLDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogQ09ORklHX1RJR09OMz15CkBAIC02NzYsMTIgKzcwNiwxNSBAQAogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUk9DS0VUUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DWUNMQURFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAogIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NYIGlzIG5vdCBzZXQKQEAgLTY5Nyw2ICs3MzAsNyBAQAogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX0FDUEk9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTYKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldApAQCAtNzEwLDYgKzc0NCw3IEBACiBDT05GSUdfU0VSSUFMX1NHSV9MMV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9TR0lfSU9DND15CisjIENPTkZJR19TRVJJQUxfU0dJX0lPQzMgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTc0NSwxMCArNzgwLDEwIEBACiAjIENPTkZJR19EUk1fVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9TQVZBR0UgaXMgbm90IHNldAogQ09ORklHX1JBV19EUklWRVI9bQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKIENPTkZJR19IUEVUPXkKICMgQ09ORklHX0hQRVRfUlRDX0lSUSBpcyBub3Qgc2V0CiBDT05GSUdfSFBFVF9NTUFQPXkKLUNPTkZJR19NQVhfUkFXX0RFVlM9MjU2CiAjIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAogQ09ORklHX01NVElNRVI9eQogCkBAIC03NTYsNiArNzkxLDcgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC03NjMsNiArNzk5LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzcyLDYgKzgxNCw3IEBACiAjCiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIwpAQCAtODIyLDI2ICs4NjUsMjggQEAKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfR0VORVJJQ19EUklWRVI9eQogCiAjCiAjIEdlbmVyaWMgZGV2aWNlcwogIwogQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCiBDT05GSUdfU05EX09QTDNfTElCPW0KK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCitDT05GSUdfU05EX0FDOTdfQlVTPW0KIENPTkZJR19TTkRfRFVNTVk9bQogQ09ORklHX1NORF9WSVJNSURJPW0KIENPTkZJR19TTkRfTVRQQVY9bQogQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwPW0KIENPTkZJR19TTkRfTVBVNDAxPW0KLUNPTkZJR19TTkRfQUM5N19DT0RFQz1tCi1DT05GSUdfU05EX0FDOTdfQlVTPW0KIAogIwogIyBQQ0kgZGV2aWNlcwogIworIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldApAQCAtODUwLDQwICs4OTUsNDAgQEAKICMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0NTNDI4MT1tCiBDT05GSUdfU05EX0NTNDZYWD1tCiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQPXkKLUNPTkZJR19TTkRfQ1M0MjgxPW0KIENPTkZJR19TTkRfRU1VMTBLMT1tCiAjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0ZNODAxPW0KICMgQ09ORklHX1NORF9GTTgwMV9URUE1NzVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAKICMKICMgVVNCIGRldmljZXMKQEAgLTkyOSwxMiArOTc0LDE1IEBACiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwogIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApAQCAtOTQ2LDEyICs5OTQsMTUgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPW0KIENPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CiAKQEAgLTk3MSw2ICsxMDIyLDcgQEAKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCkBAIC0xMDUwLDExICsxMTAyLDE3IEBACiAjIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KICMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9TUlAgaXMgbm90IHNldAogCiAjCiAjIFNOIERldmljZXMKICMKIENPTkZJR19TR0lfSU9DND15CitDT05GSUdfU0dJX0lPQzM9bQorCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIwogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtMTA4NSw2ICsxMTQzLDcgQEAKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC0xMTI2LDYgKzExODUsNyBAQAogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTE5NSw2ICsxMjU1LDcgQEAKIENPTkZJR19TR0lfUEFSVElUSU9OPXkKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX0VGSV9QQVJUSVRJT049eQogCiAjCkBAIC0xMjYwLDI2ICsxMzIxLDMwIEBACiAjIENPTkZJR19IUF9TSU1TQ1NJIGlzIG5vdCBzZXQKIAogIwotIyBQcm9maWxpbmcgc3VwcG9ydAorIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAogIwogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTIwCiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfSUE2NF9HUkFOVUxFXzE2TUI9eQogIyBDT05GSUdfSUE2NF9HUkFOVUxFXzY0TUIgaXMgbm90IHNldAogIyBDT05GSUdfSUE2NF9QUklOVF9IQVpBUkRTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMgYi9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jCmluZGV4IDYyNmNkYzguLjBlNWM2YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYwpAQCAtNDYsMTEgKzQ2LDYgQEAKICNkZWZpbmUgS0VZQk9BUkRfSU5UUgkzCS8qIG11c3QgbWF0Y2ggd2l0aCBzaW11bGF0b3IhICovCiAKICNkZWZpbmUgTlJfUE9SVFMJMQkvKiBvbmx5IG9uZSBwb3J0IGZvciBub3cgKi8KLSNkZWZpbmUgU0VSSUFMX0lOTElORQkxCi0KLSNpZmRlZiBTRVJJQUxfSU5MSU5FCi0jZGVmaW5lIF9JTkxJTkVfIGlubGluZQotI2VuZGlmCiAKICNkZWZpbmUgSVJRX1QoaW5mbykgKChpbmZvLT5mbGFncyAmIEFTWU5DX1NIQVJFX0lSUSkgPyBTQV9TSElSUSA6IFNBX0lOVEVSUlVQVCkKIApAQCAtMjM3LDcgKzIzMiw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgYXN5bmNfc3RydWN0ICppbmZvLCBpbnQgKmludHJfZG9uZSkKK3N0YXRpYyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCBhc3luY19zdHJ1Y3QgKmluZm8sIGludCAqaW50cl9kb25lKQogewogCWludCBjb3VudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKaW5kZXggNzBkYmExZi4uMTNlNzM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCkBAIC0xMTY2LDE5ICsxMTY2LDcgQEAKIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwogc3lzMzJfYWxhcm0gKHVuc2lnbmVkIGludCBzZWNvbmRzKQogewotCXN0cnVjdCBpdGltZXJ2YWwgaXRfbmV3LCBpdF9vbGQ7Ci0JdW5zaWduZWQgaW50IG9sZGFsYXJtOwotCi0JaXRfbmV3Lml0X2ludGVydmFsLnR2X3NlYyA9IGl0X25ldy5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKLQlpdF9uZXcuaXRfdmFsdWUudHZfc2VjID0gc2Vjb25kczsKLQlpdF9uZXcuaXRfdmFsdWUudHZfdXNlYyA9IDA7Ci0JZG9fc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmaXRfbmV3LCAmaXRfb2xkKTsKLQlvbGRhbGFybSA9IGl0X29sZC5pdF92YWx1ZS50dl9zZWM7Ci0JLyogZWhoaC4uIFdlIGNhbid0IHJldHVybiAwIGlmIHdlIGhhdmUgYW4gYWxhcm0gcGVuZGluZy4uICovCi0JLyogQW5kIHdlJ2QgYmV0dGVyIHJldHVybiB0b28gbXVjaCB0aGFuIHRvbyBsaXR0bGUgYW55d2F5ICovCi0JaWYgKGl0X29sZC5pdF92YWx1ZS50dl91c2VjKQotCQlvbGRhbGFybSsrOwotCXJldHVybiBvbGRhbGFybTsKKwlyZXR1cm4gYWxhcm1fc2V0aXRpbWVyKHNlY29uZHMpOwogfQogCiAvKiBUcmFuc2xhdGlvbnMgZHVlIHRvIHRpbWVfdCBzaXplIGRpZmZlcmVuY2VzLiAgV2hpY2ggYWZmZWN0cyBhbGwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggZWNkNDRiZC4uNDcyMmVjNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTI4NCwxOSArMjg0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHVuc2lnbmVkIGludCBjYW5fY3BlaV9yZXRhcmdldCh2b2lkKQogewogCWV4dGVybiBpbnQgY3BlX3ZlY3RvcjsKKwlleHRlcm4gdW5zaWduZWQgaW50IGZvcmNlX2NwZWlfcmV0YXJnZXQ7CiAKIAkvKgogCSAqIE9ubHkgaWYgQ1BFSSBpcyBzdXBwb3J0ZWQgYW5kIHRoZSBvdmVycmlkZSBmbGFnCiAJICogaXMgcHJlc2VudCwgb3RoZXJ3aXNlIHJldHVybiB0aGF0IGl0cyByZS10YXJnZXR0YWJsZQogCSAqIGlmIHdlIGFyZSBpbiBwb2xsaW5nIG1vZGUuCiAJICovCi0JaWYgKGNwZV92ZWN0b3IgPiAwICYmICFhY3BpX2NwZWlfb3ZlcnJpZGUpCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIDE7CisJaWYgKGNwZV92ZWN0b3IgPiAwKSB7CisJCWlmIChhY3BpX2NwZWlfb3ZlcnJpZGUgfHwgZm9yY2VfY3BlaV9yZXRhcmdldCkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7CiB9CiAKIHVuc2lnbmVkIGludCBpc19jcHVfY3BlaV90YXJnZXQodW5zaWduZWQgaW50IGNwdSkKQEAgLTMxNSw2ICszMjAsNyBAQAogewogCWFjcGlfY3BlaV9waHlzX2NwdWlkID0gY3B1X3BoeXNpY2FsX2lkKGNwdSk7CiB9CisjZW5kaWYKIAogdW5zaWduZWQgaW50IGdldF9jcGVpX3RhcmdldF9jcHUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvY3ljbG9uZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9jeWNsb25lLmMKaW5kZXggNmFkZTM3OS4uZTAwYjIxNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9jeWNsb25lLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9jeWNsb25lLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAl1MzIqIHZvbGF0aWxlIGN5Y2xvbmVfdGltZXI7CS8qIEN5Y2xvbmUgTVBNQzAgcmVnaXN0ZXIgKi8KIAogCWlmICghdXNlX2N5Y2xvbmUpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gMDsKIAogCXByaW50ayhLRVJOX0lORk8gIlN1bW1pdCBjaGlwc2V0OiBTdGFydGluZyBDeWNsb25lIENvdW50ZXIuXG4iKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCmluZGV4IDkzMGZkZmMuLjBlM2VkYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKQEAgLTExMDIsOSArMTEwMiw2IEBACiAJc3Q4IFtyMl09cjgKIAlzdDggW3IzXT1yMTAKIC53b3JrX3BlbmRpbmc6Ci0JdGJpdC5ueiBwNixwMD1yMzEsVElGX1NJR0RFTEFZRUQJCS8vIHNpZ25hbCBkZWxheWVkIGZyb20gIE1DQS9JTklUL05NSS9QTUkgY29udGV4dD8KLShwNikJYnIuY29uZC5zcHRrLmZldyAuc2lnZGVsYXllZAotCTs7CiAJdGJpdC56IHA2LHAwPXIzMSxUSUZfTkVFRF9SRVNDSEVECQkvLyBjdXJyZW50X3RocmVhZF9pbmZvKCktPm5lZWRfcmVzY2hlZD09MD8KIChwNikJYnIuY29uZC5zcHRrLmZldyAubm90aWZ5CiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKQEAgLTExMzEsMTcgKzExMjgsNiBAQAogKHBMdlN5cylici5jb25kLnNwdGsuZmV3ICAud29ya19wZW5kaW5nX3N5c2NhbGxfZW5kCiAJYnIuY29uZC5zcHRrLm1hbnkgLndvcmtfcHJvY2Vzc2VkX2tlcm5lbAkvLyBkb24ndCByZS1jaGVjawogCi0vLyBUaGVyZSBpcyBhIGRlbGF5ZWQgc2lnbmFsIHRoYXQgd2FzIGRldGVjdGVkIGluIE1DQS9JTklUL05NSS9QTUkgY29udGV4dCB3aGVyZQotLy8gaXQgY291bGQgbm90IGJlIGRlbGl2ZXJlZC4gIERlbGl2ZXIgaXQgbm93LiAgVGhlIHNpZ25hbCBtaWdodCBiZSBmb3IgdXMgYW5kCi0vLyBtYXkgc2V0IFRJRl9TSUdQRU5ESU5HLCBzbyByZWRyaXZlIGlhNjRfbGVhdmVfKiBhZnRlciBwcm9jZXNzaW5nIHRoZSBkZWxheWVkCi0vLyBzaWduYWwuCi0KLS5zaWdkZWxheWVkOgotCWJyLmNhbGwuc3B0ay5tYW55IHJwPWRvX3NpZ2RlbGF5ZWQKLQljbXAuZXEgcDYscDA9cjAscjAJCQkJLy8gcDYgPC0gMSwgYWx3YXlzIHJlLWNoZWNrCi0ocEx2U3lzKWJyLmNvbmQuc3B0ay5mZXcgIC53b3JrX3BlbmRpbmdfc3lzY2FsbF9lbmQKLQlici5jb25kLnNwdGsubWFueSAud29ya19wcm9jZXNzZWRfa2VybmVsCS8vIHJlLWNoZWNrCi0KIC53b3JrX3BlbmRpbmdfc3lzY2FsbF9lbmQ6CiAJYWRkcyByMj1QVChSOCkrMTYscjEyCiAJYWRkcyByMz1QVChSMTApKzE2LHIxMgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMgYi9hcmNoL2lhNjQva2VybmVsL2ZzeXMuUwppbmRleCBhYzYwNTVjLi43YTA1YjFjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2ZzeXMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2ZzeXMuUwpAQCAtODc4LDggKzg3OCw3IEBACiAJZGF0YTggMAkJCQkvLyB0aW1lcl9kZWxldGUKIAlkYXRhOCAwCQkJCS8vIGNsb2NrX3NldHRpbWUKIAlkYXRhOCBmc3lzX2Nsb2NrX2dldHRpbWUJLy8gY2xvY2tfZ2V0dGltZQotCSNkZWZpbmUgX19OUl9zeXNjYWxsX2xhc3QJMTI1NQogCi0JLnNwYWNlIDgqKE5SX3N5c2NhbGxzICsgMTAyNCAtIF9fTlJfc3lzY2FsbF9sYXN0KSwgMAotCi0JLm9yZyBmc3lzY2FsbF90YWJsZSArIDgqTlJfc3lzY2FsbHMJLy8gZ3VhcmQgYWdhaW5zdCBmYWlsdXJlcyB0byBpbmNyZWFzZSBOUl9zeXNjYWxscworCS8vIGZpbGwgaW4gemVyb3MgZm9yIHRoZSByZW1haW5pbmcgZW50cmllcworCS56ZXJvOgorCS5zcGFjZSBmc3lzY2FsbF90YWJsZSArIDgqTlJfc3lzY2FsbHMgLSAuemVybywgMApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pb3NhcGljLmMgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwppbmRleCA1NzQwODRmLi44ODMyYzU1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lvc2FwaWMuYwpAQCAtNjMxLDYgKzYzMSw3IEBACiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCXN0YXRpYyBpbnQgY3B1ID0gLTE7CisJZXh0ZXJuIGludCBjcGVfdmVjdG9yOwogCiAJLyoKIAkgKiBJbiBjYXNlIG9mIHZlY3RvciBzaGFyZWQgYnkgbXVsdGlwbGUgUlRFcywgYWxsIFJURXMgdGhhdApAQCAtNjUzLDYgKzY1NCwxMSBAQAogCWlmICghY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCkpKQogCQlyZXR1cm4gY3B1X3BoeXNpY2FsX2lkKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKKyNpZmRlZiBDT05GSUdfQUNQSQorCWlmIChjcGVfdmVjdG9yID4gMCAmJiB2ZWN0b3IgPT0gSUE2NF9DUEVQX1ZFQ1RPUikKKwkJcmV0dXJuIGdldF9jcGVpX3RhcmdldF9jcHUoKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX05VTUEKIAl7CiAJCWludCBudW1fY3B1cywgY3B1X2luZGV4LCBpb3NhcGljX2luZGV4LCBudW1hX2NwdSwgaSA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lycS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYwppbmRleCBkMzMyNDRjLi41Y2U5MDhlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKQEAgLTE2Myw4ICsxNjMsMTkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWV4dGVybiB2b2lkIGlhNjRfcHJvY2Vzc19wZW5kaW5nX2ludHIodm9pZCk7CisJZXh0ZXJuIHZvaWQgaWE2NF9kaXNhYmxlX3RpbWVyKHZvaWQpOworCWV4dGVybiB2b2xhdGlsZSBpbnQgdGltZV9rZWVwZXJfaWQ7CiAKLQlpYTY0X3NldF9pdHYoMTw8MTYpOworCWlhNjRfZGlzYWJsZV90aW1lcigpOworCisJLyoKKwkgKiBGaW5kIGEgbmV3IHRpbWVzeW5jIG1hc3RlcgorCSAqLworCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gdGltZV9rZWVwZXJfaWQpIHsKKwkJdGltZV9rZWVwZXJfaWQgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworCQlwcmludGsgKCJDUFUgJWQgaXMgbm93IHByb21vdGVkIHRvIHRpbWUta2VlcGVyIG1hc3RlclxuIiwgdGltZV9rZWVwZXJfaWQpOworCX0KKwogCS8qCiAJICogUGhhc2UgMTogTG9jYXRlIGlycSdzIGJvdW5kIHRvIHRoaXMgY3B1IGFuZAogCSAqIHJlbG9jYXRlIHRoZW0gZm9yIGNwdSByZW1vdmFsLgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUyBiL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKaW5kZXggMzAxZjJlOS4uZGNkOTA2ZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2l2dC5TCkBAIC01NjEsMTEgKzU2MSwxMiBAQAogCTs7CQkJCQkvLyBhdm9pZCBSQVcgb24gcjE4CiAJbW92IGFyLmNjdj1yMTgJCQkJLy8gc2V0IGNvbXBhcmUgdmFsdWUgZm9yIGNtcHhjaGcKIAlvciByMjU9X1BBR0VfRHxfUEFHRV9BLHIxOAkJLy8gc2V0IHRoZSBkaXJ0eSBhbmQgYWNjZXNzZWQgYml0cworCXRiaXQueiBwNyxwNiA9IHIxOCxfUEFHRV9QX0JJVAkJLy8gQ2hlY2sgcHJlc2VudCBiaXQKIAk7OwotCWNtcHhjaGc4LmFjcSByMjY9W3IxN10scjI1LGFyLmNjdgorKHA2KQljbXB4Y2hnOC5hY3EgcjI2PVtyMTddLHIyNSxhci5jY3YJLy8gT25seSB1cGRhdGUgaWYgcGFnZSBpcyBwcmVzZW50CiAJbW92IHIyND1QQUdFX1NISUZUPDwyCiAJOzsKLQljbXAuZXEgcDYscDc9cjI2LHIxOAorKHA2KQljbXAuZXEgcDYscDc9cjI2LHIxOAkJCS8vIE9ubHkgY29tcGFyZSBpZiBwYWdlIGlzIHByZXNlbnQKIAk7OwogKHA2KQlpdGMuZCByMjUJCQkJLy8gaW5zdGFsbCB1cGRhdGVkIFBURQogCTs7CkBAIC02MjYsMTEgKzYyNywxMiBAQAogCTs7CiAJbW92IGFyLmNjdj1yMTgJCQkJLy8gc2V0IGNvbXBhcmUgdmFsdWUgZm9yIGNtcHhjaGcKIAlvciByMjU9X1BBR0VfQSxyMTgJCQkvLyBzZXQgdGhlIGFjY2Vzc2VkIGJpdAorCXRiaXQueiBwNyxwNiA9IHIxOCxfUEFHRV9QX0JJVAkgCS8vIENoZWNrIHByZXNlbnQgYml0CiAJOzsKLQljbXB4Y2hnOC5hY3EgcjI2PVtyMTddLHIyNSxhci5jY3YKKyhwNikJY21weGNoZzguYWNxIHIyNj1bcjE3XSxyMjUsYXIuY2N2CS8vIE9ubHkgaWYgcGFnZSBwcmVzZW50CiAJbW92IHIyND1QQUdFX1NISUZUPDwyCiAJOzsKLQljbXAuZXEgcDYscDc9cjI2LHIxOAorKHA2KQljbXAuZXEgcDYscDc9cjI2LHIxOAkJCS8vIE9ubHkgaWYgcGFnZSBwcmVzZW50CiAJOzsKIChwNikJaXRjLmkgcjI1CQkJCS8vIGluc3RhbGwgdXBkYXRlZCBQVEUKIAk7OwpAQCAtNjgwLDExICs2ODIsMTIgQEAKIAk7OwkJCQkJLy8gYXZvaWQgUkFXIG9uIHIxOAogCW1vdiBhci5jY3Y9cjE4CQkJCS8vIHNldCBjb21wYXJlIHZhbHVlIGZvciBjbXB4Y2hnCiAJb3IgcjI1PV9QQUdFX0EscjE4CQkJLy8gc2V0IHRoZSBkaXJ0eSBiaXQKKwl0Yml0LnogcDcscDYgPSByMTgsX1BBR0VfUF9CSVQJCS8vIENoZWNrIHByZXNlbnQgYml0CiAJOzsKLQljbXB4Y2hnOC5hY3EgcjI2PVtyMTddLHIyNSxhci5jY3YKKyhwNikJY21weGNoZzguYWNxIHIyNj1bcjE3XSxyMjUsYXIuY2N2CS8vIE9ubHkgaWYgcGFnZSBpcyBwcmVzZW50CiAJbW92IHIyND1QQUdFX1NISUZUPDwyCiAJOzsKLQljbXAuZXEgcDYscDc9cjI2LHIxOAorKHA2KQljbXAuZXEgcDYscDc9cjI2LHIxOAkJCS8vIE9ubHkgaWYgcGFnZSBpcyBwcmVzZW50CiAJOzsKIChwNikJaXRjLmQgcjI1CQkJCS8vIGluc3RhbGwgdXBkYXRlZCBQVEUKIAkvKgpAQCAtMTM2Miw3ICsxMzY1LDYgQEAKIC8vIDB4NWEwMCBFbnRyeSAzMCAoc2l6ZSAxNiBidW5kbGVzKSBVbmFsaWduZWQgUmVmZXJlbmNlICg1NykKIEVOVFJZKHVuYWxpZ25lZF9hY2Nlc3MpCiAJREJHX0ZBVUxUKDMwKQotCW1vdiByMTY9Y3IuaXBzcgogCW1vdiByMzE9cHIJCS8vIHByZXBhcmUgdG8gc2F2ZSBwcmVkaWNhdGVzCiAJOzsKIAlici5zcHRrLm1hbnkgZGlzcGF0Y2hfdW5hbGlnbmVkX2hhbmRsZXIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IGVlN2VlYzkuLmI1N2U3MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtMjgxLDE0ICsyODEsMTAgQEAKIAkJaWE2NF9zYWxfY2xlYXJfc3RhdGVfaW5mbyhzYWxfaW5mb190eXBlKTsKIH0KIAotLyoKLSAqIHBsYXRmb3JtIGRlcGVuZGVudCBlcnJvciBoYW5kbGluZwotICovCi0jaWZuZGVmIFBMQVRGT1JNX01DQV9IQU5ETEVSUwotCiAjaWZkZWYgQ09ORklHX0FDUEkKIAogaW50IGNwZV92ZWN0b3IgPSAtMTsKK2ludCBpYTY0X2NwZV9pcnEgPSAtMTsKIAogc3RhdGljIGlycXJldHVybl90CiBpYTY0X21jYV9jcGVfaW50X2hhbmRsZXIgKGludCBjcGVfaXJxLCB2b2lkICphcmcsIHN0cnVjdCBwdF9yZWdzICpwdHJlZ3MpCkBAIC0zNzcsOCArMzczLDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwogCi0jZW5kaWYgLyogUExBVEZPUk1fTUNBX0hBTkRMRVJTICovCi0KIC8qCiAgKiBpYTY0X21jYV9jbWNfdmVjdG9yX3NldHVwCiAgKgpAQCAtNjMwLDYgKzYyNCwzMiBAQAogCSp0bmF0IHw9IChuYXQgPDwgdHNsb3QpOwogfQogCisvKiBDaGFuZ2UgdGhlIGNvbW0gZmllbGQgb24gdGhlIE1DQS9JTlQgdGFzayB0byBpbmNsdWRlIHRoZSBwaWQgdGhhdAorICogd2FzIGludGVycnVwdGVkLCBpdCBtYWtlcyBmb3IgZWFzaWVyIGRlYnVnZ2luZy4gIElmIHRoYXQgcGlkIHdhcyAwCisgKiAoc3dhcHBlciBvciBuZXN0ZWQgTUNBL0lOSVQpIHRoZW4gdXNlIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgY29tbQorICogZmllbGQgc3VmZml4ZWQgd2l0aCBpdHMgY3B1LgorICovCisKK3N0YXRpYyB2b2lkCitpYTY0X21jYV9tb2RpZnlfY29tbShjb25zdCB0YXNrX3QgKnByZXZpb3VzX2N1cnJlbnQpCit7CisJY2hhciAqcCwgY29tbVtzaXplb2YoY3VycmVudC0+Y29tbSldOworCWlmIChwcmV2aW91c19jdXJyZW50LT5waWQpCisJCXNucHJpbnRmKGNvbW0sIHNpemVvZihjb21tKSwgIiVzICVkIiwKKwkJCWN1cnJlbnQtPmNvbW0sIHByZXZpb3VzX2N1cnJlbnQtPnBpZCk7CisJZWxzZSB7CisJCWludCBsOworCQlpZiAoKHAgPSBzdHJjaHIocHJldmlvdXNfY3VycmVudC0+Y29tbSwgJyAnKSkpCisJCQlsID0gcCAtIHByZXZpb3VzX2N1cnJlbnQtPmNvbW07CisJCWVsc2UKKwkJCWwgPSBzdHJsZW4ocHJldmlvdXNfY3VycmVudC0+Y29tbSk7CisJCXNucHJpbnRmKGNvbW0sIHNpemVvZihjb21tKSwgIiVzICUqcyAlZCIsCisJCQljdXJyZW50LT5jb21tLCBsLCBwcmV2aW91c19jdXJyZW50LT5jb21tLAorCQkJdGFza190aHJlYWRfaW5mbyhwcmV2aW91c19jdXJyZW50KS0+Y3B1KTsKKwl9CisJbWVtY3B5KGN1cnJlbnQtPmNvbW0sIGNvbW0sIHNpemVvZihjdXJyZW50LT5jb21tKSk7Cit9CisKIC8qIE9uIGVudHJ5IHRvIHRoaXMgcm91dGluZSwgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIHBlciBjcHUgc3RhY2ssIHNlZQogICogbWNhX2FzbS5oLiAgVGhlIG9yaWdpbmFsIHN0YWNrIGhhcyBub3QgYmVlbiB0b3VjaGVkIGJ5IHRoaXMgZXZlbnQuICBTb21lIG9mCiAgKiB0aGUgb3JpZ2luYWwgc3RhY2sncyByZWdpc3RlcnMgd2lsbCBiZSBpbiB0aGUgUkJTIG9uIHRoaXMgc3RhY2suICBUaGlzIHN0YWNrCkBAIC02NDgsNyArNjY4LDcgQEAKIAkJc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICpzb3MsCiAJCWNvbnN0IGNoYXIgKnR5cGUpCiB7Ci0JY2hhciAqcCwgY29tbVtzaXplb2YoY3VycmVudC0+Y29tbSldOworCWNoYXIgKnA7CiAJaWE2NF92YSB2YTsKIAlleHRlcm4gY2hhciBpYTY0X2xlYXZlX2tlcm5lbFtdOwkvKiBOZWVkIGFzbSBhZGRyZXNzLCBub3QgZnVuY3Rpb24gZGVzY3JpcHRvciAqLwogCWNvbnN0IHBhbF9taW5fc3RhdGVfYXJlYV90ICptcyA9IHNvcy0+cGFsX21pbl9zdGF0ZTsKQEAgLTcyMSw2ICs3NDEsMTAgQEAKIAkvKiBWZXJpZnkgdGhlIHByZXZpb3VzIHN0YWNrIHN0YXRlIGJlZm9yZSB3ZSBjaGFuZ2UgaXQgKi8KIAlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CiAJCW1zZyA9ICJvY2N1cnJlZCBpbiB1c2VyIHNwYWNlIjsKKwkJLyogcHJldmlvdXNfY3VycmVudCBpcyBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIHdoZW4gdGhlIHRhc2sgd2FzCisJCSAqIGluIHVzZXIgc3BhY2UsIHNvIC4uLgorCQkgKi8KKwkJaWE2NF9tY2FfbW9kaWZ5X2NvbW0ocHJldmlvdXNfY3VycmVudCk7CiAJCWdvdG8gbm9fbW9kOwogCX0KIAlpZiAocjEzICE9IHNvcy0+cHJldl9JQTY0X0tSX0NVUlJFTlQpIHsKQEAgLTc1MCwyNSArNzc0LDcgQEAKIAkJZ290byBub19tb2Q7CiAJfQogCi0JLyogQ2hhbmdlIHRoZSBjb21tIGZpZWxkIG9uIHRoZSBNQ0EvSU5UIHRhc2sgdG8gaW5jbHVkZSB0aGUgcGlkIHRoYXQKLQkgKiB3YXMgaW50ZXJydXB0ZWQsIGl0IG1ha2VzIGZvciBlYXNpZXIgZGVidWdnaW5nLiAgSWYgdGhhdCBwaWQgd2FzIDAKLQkgKiAoc3dhcHBlciBvciBuZXN0ZWQgTUNBL0lOSVQpIHRoZW4gdXNlIHRoZSBzdGFydCBvZiB0aGUgcHJldmlvdXMgY29tbQotCSAqIGZpZWxkIHN1ZmZpeGVkIHdpdGggaXRzIGNwdS4KLQkgKi8KLQlpZiAocHJldmlvdXNfY3VycmVudC0+cGlkKQotCQlzbnByaW50Zihjb21tLCBzaXplb2YoY29tbSksICIlcyAlZCIsCi0JCQljdXJyZW50LT5jb21tLCBwcmV2aW91c19jdXJyZW50LT5waWQpOwotCWVsc2UgewotCQlpbnQgbDsKLQkJaWYgKChwID0gc3RyY2hyKHByZXZpb3VzX2N1cnJlbnQtPmNvbW0sICcgJykpKQotCQkJbCA9IHAgLSBwcmV2aW91c19jdXJyZW50LT5jb21tOwotCQllbHNlCi0JCQlsID0gc3RybGVuKHByZXZpb3VzX2N1cnJlbnQtPmNvbW0pOwotCQlzbnByaW50Zihjb21tLCBzaXplb2YoY29tbSksICIlcyAlKnMgJWQiLAotCQkJY3VycmVudC0+Y29tbSwgbCwgcHJldmlvdXNfY3VycmVudC0+Y29tbSwKLQkJCXRhc2tfdGhyZWFkX2luZm8ocHJldmlvdXNfY3VycmVudCktPmNwdSk7Ci0JfQotCW1lbWNweShjdXJyZW50LT5jb21tLCBjb21tLCBzaXplb2YoY3VycmVudC0+Y29tbSkpOworCWlhNjRfbWNhX21vZGlmeV9jb21tKHByZXZpb3VzX2N1cnJlbnQpOwogCiAJLyogTWFrZSB0aGUgb3JpZ2luYWwgdGFzayBsb29rIGJsb2NrZWQuICBGaXJzdCBzdGFjayBhIHN0cnVjdCBwdF9yZWdzLAogCSAqIGRlc2NyaWJpbmcgdGhlIHN0YXRlIGF0IHRoZSB0aW1lIG9mIGludGVycnVwdC4gIG1jYV9hc20uUyBidWlsdCBhCkBAIC05MDgsNyArOTE0LDcgQEAKIHN0YXRpYyB2b2lkCiBpYTY0X3dhaXRfZm9yX3NsYXZlcyhpbnQgbW9uYXJjaCkKIHsKLQlpbnQgYywgd2FpdCA9IDA7CisJaW50IGMsIHdhaXQgPSAwLCBtaXNzaW5nID0gMDsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGMpIHsKIAkJaWYgKGMgPT0gbW9uYXJjaCkKIAkJCWNvbnRpbnVlOwpAQCAtOTE5LDE1ICs5MjUsMzIgQEAKIAkJfQogCX0KIAlpZiAoIXdhaXQpCi0JCXJldHVybjsKKwkJZ290byBhbGxfaW47CiAJZm9yX2VhY2hfb25saW5lX2NwdShjKSB7CiAJCWlmIChjID09IG1vbmFyY2gpCiAJCQljb250aW51ZTsKIAkJaWYgKGlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY10gPT0gSUE2NF9NQ0FfUkVOREVaX0NIRUNLSU5fTk9URE9ORSkgewogCQkJdWRlbGF5KDUqMTAwMDAwMCk7CS8qIHdhaXQgNSBzZWNvbmRzIGZvciBzbGF2ZXMgKGFyYml0cmFyeSkgKi8KKwkJCWlmIChpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NdID09IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX05PVERPTkUpCisJCQkJbWlzc2luZyA9IDE7CiAJCQlicmVhazsKIAkJfQogCX0KKwlpZiAoIW1pc3NpbmcpCisJCWdvdG8gYWxsX2luOworCXByaW50ayhLRVJOX0lORk8gIk9TIE1DQSBzbGF2ZSBkaWQgbm90IHJlbmRlenZvdXMgb24gY3B1Iik7CisJZm9yX2VhY2hfb25saW5lX2NwdShjKSB7CisJCWlmIChjID09IG1vbmFyY2gpCisJCQljb250aW51ZTsKKwkJaWYgKGlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY10gPT0gSUE2NF9NQ0FfUkVOREVaX0NIRUNLSU5fTk9URE9ORSkKKwkJCXByaW50aygiICVkIiwgYyk7CisJfQorCXByaW50aygiXG4iKTsKKwlyZXR1cm47CisKK2FsbF9pbjoKKwlwcmludGsoS0VSTl9JTkZPICJBbGwgT1MgTUNBIHNsYXZlcyBoYXZlIHJlYWNoZWQgcmVuZGV6dm91c1xuIik7CisJcmV0dXJuOwogfQogCiAvKgpAQCAtOTUzLDYgKzk3NiwxMCBAQAogCXRhc2tfdCAqcHJldmlvdXNfY3VycmVudDsKIAogCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkvKiBGSVhNRTogbWFrZSBwcmludGsgTk1JL01DQS9JTklUIHNhZmUgKi8KKwljb25zb2xlX2xvZ2xldmVsID0gMTU7CS8qIG1ha2Ugc3VyZSBwcmludGtzIG1ha2UgaXQgdG8gY29uc29sZSAqLworCXByaW50ayhLRVJOX0lORk8gIkVudGVyZWQgT1MgTUNBIGhhbmRsZXIuIFBTUD0lbHggY3B1PSVkIG1vbmFyY2g9JWxkXG4iLAorCQlzb3MtPnByb2Nfc3RhdGVfcGFyYW0sIGNwdSwgc29zLT5tb25hcmNoKTsKKwogCXByZXZpb3VzX2N1cnJlbnQgPSBpYTY0X21jYV9tb2RpZnlfb3JpZ2luYWxfc3RhY2socmVncywgc3csIHNvcywgIk1DQSIpOwogCW1vbmFyY2hfY3B1ID0gY3B1OwogCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9FTlRFUiwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCkBAIC0xNDQ0LDExICsxNDcxLDEzIEBACiBpYTY0X21jYV9jcHVfaW5pdCh2b2lkICpjcHVfZGF0YSkKIHsKIAl2b2lkICpwYWxfdmFkZHI7CisJc3RhdGljIGludCBmaXJzdF90aW1lID0gMTsKIAotCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkgeworCWlmIChmaXJzdF90aW1lKSB7CiAJCXZvaWQgKm1jYV9kYXRhOwogCQlpbnQgY3B1OwogCisJCWZpcnN0X3RpbWUgPSAwOwogCQltY2FfZGF0YSA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKHN0cnVjdCBpYTY0X21jYV9jcHUpCiAJCQkJCSAqIE5SX0NQVVMgKyBLRVJORUxfU1RBQ0tfU0laRSk7CiAJCW1jYV9kYXRhID0gKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKW1jYV9kYXRhICsKQEAgLTE3MDQsNiArMTczMyw3IEBACiAJCQkJCWRlc2MgPSBpcnFfZGVzY3AoaXJxKTsKIAkJCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9QRVJfQ1BVOwogCQkJCQlzZXR1cF9pcnEoaXJxLCAmbWNhX2NwZV9pcnFhY3Rpb24pOworCQkJCQlpYTY0X2NwZV9pcnEgPSBpcnE7CiAJCQkJfQogCQkJaWE2NF9tY2FfcmVnaXN0ZXJfY3BldihjcGVfdmVjdG9yKTsKIAkJCUlBNjRfTUNBX0RFQlVHKCIlczogQ1BFSS9QIHNldHVwIGFuZCBlbmFibGVkLlxuIiwgX19GVU5DVElPTl9fKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKaW5kZXggOGZkOTNhZi4uZTg4M2Q4NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMKQEAgLTEyMyw4ICsxMjMsOSBAQAogdm9pZAogbWNhX2hhbmRsZXJfYmgodW5zaWduZWQgbG9uZyBwYWRkcikKIHsKLQlwcmludGsoS0VSTl9ERUJVRyAiT1NfTUNBOiBwcm9jZXNzIFtwaWQ6ICVkXSglcykgZW5jb3VudGVycyBNQ0EuXG4iLAotCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0pOworCXByaW50ayhLRVJOX0VSUgorCQkiT1NfTUNBOiBwcm9jZXNzIFtwaWQ6ICVkXSglcykgZW5jb3VudGVycyBNQ0EgKHBhZGRyPSVseClcbiIsCisJCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwgcGFkZHIpOwogCiAJc3Bpbl9sb2NrKCZtY2FfYmhfbG9jayk7CiAJc3dpdGNoIChtY2FfcGFnZV9pc29sYXRlKHBhZGRyKSkgewpAQCAtMTMyLDcgKzEzMyw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJQYWdlIGlzb2xhdGlvbjogKCAlbHggKSBzdWNjZXNzLlxuIiwgcGFkZHIpOwogCQlicmVhazsKIAljYXNlIElTT0xBVEVfTkc6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJQYWdlIGlzb2xhdGlvbjogKCAlbHggKSBmYWlsdXJlLlxuIiwgcGFkZHIpOworCQlwcmludGsoS0VSTl9DUklUICJQYWdlIGlzb2xhdGlvbjogKCAlbHggKSBmYWlsdXJlLlxuIiwgcGFkZHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTU2NywxMCArNTY4LDE1IEBACiAJCXJldHVybiAwOwogCiAJLyoKLQkgKiBJZiB0aGVyZSBpcyBubyBidXMgZXJyb3IsIHJlY29yZCBpcyB3ZWlyZCBidXQgd2UgbmVlZCBub3QgdG8gcmVjb3Zlci4KKwkgKiBUaGUgY2FjaGUgY2hlY2sgYW5kIGJ1cyBjaGVjayBiaXRzIGhhdmUgZm91ciBwb3NzaWJsZSBzdGF0ZXMKKwkgKiAgIGNjIGJjCisJICogICAgMCAgMAlXZWlyZCByZWNvcmQsIG5vdCByZWNvdmVyZWQKKwkgKiAgICAxICAwCUNhY2hlIGVycm9yLCBub3QgcmVjb3ZlcmVkCisJICogICAgMCAgMQlJL08gZXJyb3IsIGF0dGVtcHQgcmVjb3ZlcnkKKwkgKiAgICAxICAxCU1lbW9yeSBlcnJvciwgYXR0ZW1wdCByZWNvdmVyeQogCSAqLwogCWlmIChwc3AtPmJjID09IDAgfHwgcGJjaSA9PSBOVUxMKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIFNvcnJ5LCB3ZSBjYW5ub3QgaGFuZGxlIHNvIG1hbnkuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDljNTE5NGIuLjA3N2YyMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC02NzIyLDYgKzY3MjIsNyBAQAogdm9pZAogcGZtX2luaXRfcGVyY3B1ICh2b2lkKQogeworCXN0YXRpYyBpbnQgZmlyc3RfdGltZT0xOwogCS8qCiAJICogbWFrZSBzdXJlIG5vIG1lYXN1cmVtZW50IGlzIGFjdGl2ZQogCSAqIChtYXkgaW5oZXJpdCBwcm9ncmFtbWVkIFBNQ3MgZnJvbSBFRkkpLgpAQCAtNjczNCw4ICs2NzM1LDEwIEBACiAJICovCiAJcGZtX3VuZnJlZXplX3BtdSgpOwogCi0JaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKQorCWlmIChmaXJzdF90aW1lKSB7CiAJCXJlZ2lzdGVyX3BlcmNwdV9pcnEoSUE2NF9QRVJGTU9OX1ZFQ1RPUiwgJnBlcmZtb25faXJxYWN0aW9uKTsKKwkJZmlyc3RfdGltZT0wOworCX0KIAogCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19DUl9QTVYsIElBNjRfUEVSRk1PTl9WRUNUT1IpOwogCWlhNjRfc3Jsel9kKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggMzI1OGUwOS4uOTU4YzE1MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNDYzZjZiYi4uMWQ3OTAzZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCkBAIC01ODgsMTA0ICs1ODgsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQotLyogU2V0IGEgZGVsYXllZCBzaWduYWwgdGhhdCB3YXMgZGV0ZWN0ZWQgaW4gTUNBL0lOSVQvTk1JL1BNSSBjb250ZXh0IHdoZXJlIGl0Ci0gKiBjb3VsZCBub3QgYmUgZGVsaXZlcmVkLiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIHRhcmdldCBwcm9jZXNzIGlzIG5vdAotICogYWxsb3dlZCB0byBkbyBhbnkgbW9yZSB3b3JrIGluIHVzZXIgc3BhY2UuICBQb3NzaWJsZSBjYXNlcyBmb3IgdGhlIHRhcmdldAotICogcHJvY2VzczoKLSAqCi0gKiAtIEl0IGlzIHNsZWVwaW5nIGFuZCB3aWxsIHdha2UgdXAgc29vbi4gIFN0b3JlIHRoZSBkYXRhIGluIHRoZSBjdXJyZW50IHRhc2ssCi0gKiAgIHRoZSBzaWduYWwgd2lsbCBiZSBzZW50IHdoZW4gdGhlIGN1cnJlbnQgdGFzayByZXR1cm5zIGZyb20gdGhlIG5leHQKLSAqICAgaW50ZXJydXB0LgotICoKLSAqIC0gSXQgaXMgcnVubmluZyBpbiB1c2VyIGNvbnRleHQuICBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgY3VycmVudCB0YXNrLCB0aGUKLSAqICAgc2lnbmFsIHdpbGwgYmUgc2VudCB3aGVuIHRoZSBjdXJyZW50IHRhc2sgcmV0dXJucyBmcm9tIHRoZSBuZXh0IGludGVycnVwdC4KLSAqCi0gKiAtIEl0IGlzIHJ1bm5pbmcgaW4ga2VybmVsIGNvbnRleHQgb24gdGhpcyBvciBhbm90aGVyIGNwdSBhbmQgd2lsbCByZXR1cm4gdG8KLSAqICAgdXNlciBjb250ZXh0LiAgU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRhcmdldCB0YXNrLCB0aGUgc2lnbmFsIHdpbGwgYmUgc2VudAotICogICB0byBpdHNlbGYgd2hlbiB0aGUgdGFyZ2V0IHRhc2sgcmV0dXJucyB0byB1c2VyIHNwYWNlLgotICoKLSAqIC0gSXQgaXMgcnVubmluZyBpbiBrZXJuZWwgY29udGV4dCBvbiB0aGlzIGNwdSBhbmQgd2lsbCBzbGVlcCBiZWZvcmUKLSAqICAgcmV0dXJuaW5nIHRvIHVzZXIgY29udGV4dC4gIEJlY2F1c2UgdGhpcyBpcyBhbHNvIHRoZSBjdXJyZW50IHRhc2ssIHRoZQotICogICBzaWduYWwgd2lsbCBub3QgZ2V0IGRlbGl2ZXJlZCBhbmQgdGhlIHRhc2sgY291bGQgc2xlZXAgaW5kZWZpbml0ZWx5LgotICogICBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgaWRsZSB0YXNrIGZvciB0aGlzIGNwdSwgdGhlIHNpZ25hbCB3aWxsIGJlIHNlbnQKLSAqICAgYWZ0ZXIgdGhlIGlkbGUgdGFzayBwcm9jZXNzZXMgaXRzIG5leHQgaW50ZXJydXB0LgotICoKLSAqIFRvIGNvdmVyIGFsbCBjYXNlcywgc3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRhcmdldCB0YXNrLCB0aGUgY3VycmVudCB0YXNrIGFuZAotICogdGhlIGlkbGUgdGFzayBvbiB0aGlzIGNwdS4gIFdoYXRldmVyIGhhcHBlbnMsIHRoZSBzaWduYWwgd2lsbCBiZSBkZWxpdmVyZWQKLSAqIHRvIHRoZSB0YXJnZXQgdGFzayBiZWZvcmUgaXQgY2FuIGRvIGFueSB1c2VmdWwgdXNlciBzcGFjZSB3b3JrLiAgTXVsdGlwbGUKLSAqIGRlbGl2ZXJpZXMgaGF2ZSBubyB1bndhbnRlZCBzaWRlIGVmZmVjdHMuCi0gKgotICogTm90ZTogVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIE1DQS9JTklUL05NSS9QTUkgY29udGV4dCwgd2l0aCBpbnRlcnJ1cHRzCi0gKiBkaXNhYmxlZC4gIEl0IG11c3Qgbm90IHRha2UgYW55IGxvY2tzIG5vciB1c2Uga2VybmVsIHN0cnVjdHVyZXMgb3Igc2VydmljZXMKLSAqIHRoYXQgcmVxdWlyZSBsb2Nrcy4KLSAqLwotCi0vKiBUbyBlbnN1cmUgdGhhdCB3ZSBnZXQgdGhlIHJpZ2h0IHBpZCwgY2hlY2sgaXRzIHN0YXJ0IHRpbWUuICBUbyBhdm9pZCBleHRyYQotICogaW5jbHVkZSBmaWxlcyBpbiB0aHJlYWRfaW5mby5oLCBjb252ZXJ0IHRoZSB0YXNrIHN0YXJ0X3RpbWUgdG8gdW5zaWduZWQgbG9uZywKLSAqIGdpdmluZyB1cyBhIGN5Y2xlIHRpbWUgb2YgPiA1ODAgeWVhcnMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotc3RhcnRfdGltZV91bChjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCi17Ci0JcmV0dXJuIHQtPnN0YXJ0X3RpbWUudHZfc2VjICogTlNFQ19QRVJfU0VDICsgdC0+c3RhcnRfdGltZS50dl9uc2VjOwotfQotCi12b2lkCi1zZXRfc2lnZGVsYXllZChwaWRfdCBwaWQsIGludCBzaWdubywgaW50IGNvZGUsIHZvaWQgX191c2VyICphZGRyKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUgPSAgMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDE7IGkgPD0gMzsgKytpKSB7Ci0JCXN3aXRjaCAoaSkgewotCQljYXNlIDE6Ci0JCQl0ID0gZmluZF90YXNrX2J5X3BpZChwaWQpOwotCQkJaWYgKHQpCi0JCQkJc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWVfdWwodCk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJdCA9IGN1cnJlbnQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXQgPSBpZGxlX3Rhc2soc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKCF0KQotCQkJcmV0dXJuOwotCQl0YXNrX3RocmVhZF9pbmZvKHQpLT5zaWdkZWxheWVkLnNpZ25vID0gc2lnbm87Ci0JCXRhc2tfdGhyZWFkX2luZm8odCktPnNpZ2RlbGF5ZWQuY29kZSA9IGNvZGU7Ci0JCXRhc2tfdGhyZWFkX2luZm8odCktPnNpZ2RlbGF5ZWQuYWRkciA9IGFkZHI7Ci0JCXRhc2tfdGhyZWFkX2luZm8odCktPnNpZ2RlbGF5ZWQuc3RhcnRfdGltZSA9IHN0YXJ0X3RpbWU7Ci0JCXRhc2tfdGhyZWFkX2luZm8odCktPnNpZ2RlbGF5ZWQucGlkID0gcGlkOwotCQl3bWIoKTsKLQkJc2V0X3Rza190aHJlYWRfZmxhZyh0LCBUSUZfU0lHREVMQVlFRCk7Ci0JfQotfQotCi0vKiBDYWxsZWQgZnJvbSBlbnRyeS5TIHdoZW4gaXQgZGV0ZWN0cyBUSUZfU0lHREVMQVlFRCwgYSBkZWxheWVkIHNpZ25hbCB0aGF0Ci0gKiB3YXMgZGV0ZWN0ZWQgaW4gTUNBL0lOSVQvTk1JL1BNSSBjb250ZXh0IHdoZXJlIGl0IGNvdWxkIG5vdCBiZSBkZWxpdmVyZWQuCi0gKi8KLQotdm9pZAotZG9fc2lnZGVsYXllZCh2b2lkKQotewotCXN0cnVjdCBzaWdpbmZvIHNpZ2luZm87Ci0JcGlkX3QgcGlkOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQotCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9TSUdERUxBWUVEKTsKLQltZW1zZXQoJnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7Ci0Jc2lnaW5mby5zaV9zaWdubyA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c2lnZGVsYXllZC5zaWdubzsKLQlzaWdpbmZvLnNpX2NvZGUgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPnNpZ2RlbGF5ZWQuY29kZTsKLQlzaWdpbmZvLnNpX2FkZHIgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPnNpZ2RlbGF5ZWQuYWRkcjsKLQlwaWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPnNpZ2RlbGF5ZWQucGlkOwotCXQgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7Ci0JaWYgKCF0KQotCQlyZXR1cm47Ci0JaWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c2lnZGVsYXllZC5zdGFydF90aW1lICE9IHN0YXJ0X3RpbWVfdWwodCkpCi0JCXJldHVybjsKLQlmb3JjZV9zaWdfaW5mbyhzaWdpbmZvLnNpX3NpZ25vLCAmc2lnaW5mbywgdCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGI2ODFlZjMuLmM0YjYzM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCkBAIC03MCw2ICs3MCwxMiBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKyNpZmRlZiBDT05GSUdfUEVSTUlUX0JTUF9SRU1PVkUKKyNkZWZpbmUgYnNwX3JlbW92ZV9vawkxCisjZWxzZQorI2RlZmluZSBic3BfcmVtb3ZlX29rCTAKKyNlbmRpZgorCiAvKgogICogU3RvcmUgYWxsIGlkbGUgdGhyZWFkcywgdGhpcyBjYW4gYmUgcmV1c2VkIGluc3RlYWQgb2YgY3JlYXRpbmcKICAqIGEgbmV3IHRocmVhZC4gQWxzbyBhdm9pZHMgY29tcGxpY2F0ZWQgdGhyZWFkIGRlc3Ryb3kgZnVuY3Rpb25hbGl0eQpAQCAtMTA0LDcgKzExMCw3IEBACiAvKgogICogSVRDIHN5bmNocm9uaXphdGlvbiByZWxhdGVkIHN0dWZmOgogICovCi0jZGVmaW5lIE1BU1RFUgkwCisjZGVmaW5lIE1BU1RFUgkoMCkKICNkZWZpbmUgU0xBVkUJKFNNUF9DQUNIRV9CWVRFUy84KQogCiAjZGVmaW5lIE5VTV9ST1VORFMJNjQJLyogbWFnaWMgdmFsdWUgKi8KQEAgLTE1MSw2ICsxNTcsMjcgQEAKIAogdW5zaWduZWQgY2hhciBzbXBfaW50X3JlZGlyZWN0OyAvKiBhcmUgSU5UIGFuZCBJUEkgcmVkaXJlY3RhYmxlIGJ5IHRoZSBjaGlwc2V0PyAqLwogCisjaWZkZWYgQ09ORklHX0ZPUkNFX0NQRUlfUkVUQVJHRVQKKyNkZWZpbmUgQ1BFSV9PVkVSUklERV9ERUZBVUxUCSgxKQorI2Vsc2UKKyNkZWZpbmUgQ1BFSV9PVkVSUklERV9ERUZBVUxUCSgwKQorI2VuZGlmCisKK3Vuc2lnbmVkIGludCBmb3JjZV9jcGVpX3JldGFyZ2V0ID0gQ1BFSV9PVkVSUklERV9ERUZBVUxUOworCitzdGF0aWMgaW50IF9faW5pdAorY21kbF9mb3JjZV9jcGVpKGNoYXIgKnN0cikKK3sKKwlpbnQgdmFsdWU9MDsKKworCWdldF9vcHRpb24gKCZzdHIsICZ2YWx1ZSk7CisJZm9yY2VfY3BlaV9yZXRhcmdldCA9IHZhbHVlOworCisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoImZvcmNlX2NwZWk9IiwgY21kbF9mb3JjZV9jcGVpKTsKKwogc3RhdGljIGludCBfX2luaXQKIG5vaW50cm91dGUgKGNoYXIgKnN0cikKIHsKQEAgLTE2MSw2ICsxODgsMjcgQEAKIAogX19zZXR1cCgibm9pbnRyb3V0ZSIsIG5vaW50cm91dGUpOwogCitzdGF0aWMgdm9pZCBmaXhfYjBfZm9yX2JzcCh2b2lkKQoreworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWludCBjcHVpZDsKKwlzdGF0aWMgaW50IGZpeF9ic3BfYjAgPSAxOworCisJY3B1aWQgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKgorCSAqIENhY2hlIHRoZSBiMCB2YWx1ZSBvbiB0aGUgZmlyc3QgQVAgdGhhdCBjb21lcyB1cAorCSAqLworCWlmICghKGZpeF9ic3BfYjAgJiYgY3B1aWQpKQorCQlyZXR1cm47CisKKwlzYWxfYm9vdF9yZW5kZXpfc3RhdGVbMF0uYnJbMF0gPSBzYWxfYm9vdF9yZW5kZXpfc3RhdGVbY3B1aWRdLmJyWzBdOworCXByaW50ayAoIkZpeGVkIEJTUCBiMCB2YWx1ZSBmcm9tIENQVSAlZFxuIiwgY3B1aWQpOworCisJZml4X2JzcF9iMCA9IDA7CisjZW5kaWYKK30KKwogdm9pZAogc3luY19tYXN0ZXIgKHZvaWQgKmFyZykKIHsKQEAgLTMyNyw4ICszNzUsOSBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0CiBzbXBfY2FsbGluICh2b2lkKQogewotCWludCBjcHVpZCwgcGh5c19pZDsKKwlpbnQgY3B1aWQsIHBoeXNfaWQsIGl0Y19tYXN0ZXI7CiAJZXh0ZXJuIHZvaWQgaWE2NF9pbml0X2l0bSh2b2lkKTsKKwlleHRlcm4gdm9sYXRpbGUgaW50IHRpbWVfa2VlcGVyX2lkOwogCiAjaWZkZWYgQ09ORklHX1BFUkZNT04KIAlleHRlcm4gdm9pZCBwZm1faW5pdF9wZXJjcHUodm9pZCk7CkBAIC0zMzYsNiArMzg1LDcgQEAKIAogCWNwdWlkID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXBoeXNfaWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwlpdGNfbWFzdGVyID0gdGltZV9rZWVwZXJfaWQ7CiAKIAlpZiAoY3B1X29ubGluZShjcHVpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJodWgsIHBoeXMgQ1BVIzB4JXgsIENQVSMweCV4IGFscmVhZHkgcHJlc2VudD8/XG4iLApAQCAtMzQzLDYgKzM5Myw4IEBACiAJCUJVRygpOwogCX0KIAorCWZpeF9iMF9mb3JfYnNwKCk7CisKIAlsb2NrX2lwaV9jYWxsbG9jaygpOwogCWNwdV9zZXQoY3B1aWQsIGNwdV9vbmxpbmVfbWFwKTsKIAl1bmxvY2tfaXBpX2NhbGxsb2NrKCk7CkBAIC0zNjUsOCArNDE3LDggQEAKIAkJICogY2FsbHMgc3Bpbl91bmxvY2tfYmgoKSwgd2hpY2ggY2FsbHMgc3Bpbl91bmxvY2tfYmgoKSwgd2hpY2ggY2FsbHMKIAkJICogbG9jYWxfYmhfZW5hYmxlKCksIHdoaWNoIGJ1Z3Mgb3V0IGlmIGlycXMgYXJlIG5vdCBlbmFibGVkLi4uCiAJCSAqLwotCQlEcHJpbnRrKCJHb2luZyB0byBzeW5jdXAgSVRDIHdpdGggQlAuXG4iKTsKLQkJaWE2NF9zeW5jX2l0YygwKTsKKwkJRHByaW50aygiR29pbmcgdG8gc3luY3VwIElUQyB3aXRoIElUQyBNYXN0ZXIuXG4iKTsKKwkJaWE2NF9zeW5jX2l0YyhpdGNfbWFzdGVyKTsKIAl9CiAKIAkvKgpAQCAtNjM1LDYgKzY4Nyw0NyBAQAogfQogCiBleHRlcm4gdm9pZCBmaXh1cF9pcnFzKHZvaWQpOworCitpbnQgbWlncmF0ZV9wbGF0Zm9ybV9pcnFzKHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IG5ld19jcGVpX2NwdTsKKwlpcnFfZGVzY190ICpkZXNjID0gTlVMTDsKKwljcHVtYXNrX3QgCW1hc2s7CisJaW50IAkJcmV0dmFsID0gMDsKKworCS8qCisJICogZG9udCBwZXJtaXQgQ1BFSSB0YXJnZXQgdG8gcmVtb3ZlZC4KKwkgKi8KKwlpZiAoY3BlX3ZlY3RvciA+IDAgJiYgaXNfY3B1X2NwZWlfdGFyZ2V0KGNwdSkpIHsKKwkJcHJpbnRrICgiQ1BVICglZCkgaXMgQ1BFSSBUYXJnZXRcbiIsIGNwdSk7CisJCWlmIChjYW5fY3BlaV9yZXRhcmdldCgpKSB7CisJCQkvKgorCQkJICogTm93IHJlLXRhcmdldCB0aGUgQ1BFSSB0byBhIGRpZmZlcmVudCBwcm9jZXNzb3IKKwkJCSAqLworCQkJbmV3X2NwZWlfY3B1ID0gYW55X29ubGluZV9jcHUoY3B1X29ubGluZV9tYXApOworCQkJbWFzayA9IGNwdW1hc2tfb2ZfY3B1KG5ld19jcGVpX2NwdSk7CisJCQlzZXRfY3BlaV90YXJnZXRfY3B1KG5ld19jcGVpX2NwdSk7CisJCQlkZXNjID0gaXJxX2Rlc2NwKGlhNjRfY3BlX2lycSk7CisJCQkvKgorCQkJICogU3dpdGNoIGZvciBub3csIGltbWVkaWF0bHksIHdlIG5lZWQgdG8gZG8gZmFrZSBpbnRyCisJCQkgKiBhcyBvdGhlciBpbnRlcnJ1cHRzLCBidXQgbmVlZCB0byBzdHVkeSBDUEVJIGJlaGF2aW91ciB3aXRoCisJCQkgKiBwb2xsaW5nIGJlZm9yZSBtYWtpbmcgY2hhbmdlcy4KKwkJCSAqLworCQkJaWYgKGRlc2MpIHsKKwkJCQlkZXNjLT5oYW5kbGVyLT5kaXNhYmxlKGlhNjRfY3BlX2lycSk7CisJCQkJZGVzYy0+aGFuZGxlci0+c2V0X2FmZmluaXR5KGlhNjRfY3BlX2lycSwgbWFzayk7CisJCQkJZGVzYy0+aGFuZGxlci0+ZW5hYmxlKGlhNjRfY3BlX2lycSk7CisJCQkJcHJpbnRrICgiUmUtdGFyZ2V0dGluZyBDUEVJIHRvIGNwdSAlZFxuIiwgbmV3X2NwZWlfY3B1KTsKKwkJCX0KKwkJfQorCQlpZiAoIWRlc2MpIHsKKwkJCXByaW50ayAoIlVuYWJsZSB0byByZXRhcmdldCBDUEVJLCBvZmZsaW5lIGNwdSBbJWRdIGZhaWxlZFxuIiwgY3B1KTsKKwkJCXJldHZhbCA9IC1FQlVTWTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCiAvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIGNwdWNvbnRyb2wgbXV0ZXggaGVsZCAqLwogaW50IF9fY3B1X2Rpc2FibGUodm9pZCkKIHsKQEAgLTY0Myw4ICs3MzYsMTcgQEAKIAkvKgogCSAqIGRvbnQgcGVybWl0IGJvb3QgcHJvY2Vzc29yIGZvciBub3cKIAkgKi8KLQlpZiAoY3B1ID09IDApCi0JCXJldHVybiAtRUJVU1k7CisJaWYgKGNwdSA9PSAwICYmICFic3BfcmVtb3ZlX29rKSB7CisJCXByaW50ayAoIllvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCByZW1vdmFsIG9mIEJTUFxuIik7CisJCXJldHVybiAoLUVCVVNZKTsKKwl9CisKKwljcHVfY2xlYXIoY3B1LCBjcHVfb25saW5lX21hcCk7CisKKwlpZiAobWlncmF0ZV9wbGF0Zm9ybV9pcnFzKGNwdSkpIHsKKwkJY3B1X3NldChjcHUsIGNwdV9vbmxpbmVfbWFwKTsKKwkJcmV0dXJuICgtRUJVU1kpOworCX0KIAogCXJlbW92ZV9zaWJsaW5naW5mbyhjcHUpOwogCWNwdV9jbGVhcihjcHUsIGNwdV9vbmxpbmVfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKaW5kZXggMzA3ZDAxZS4uYWMxNjc0MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwogCi0jZGVmaW5lIFRJTUVfS0VFUEVSX0lECTAJLyogc21wX3Byb2Nlc3Nvcl9pZCgpIG9mIHRpbWUta2VlcGVyICovCit2b2xhdGlsZSBpbnQgdGltZV9rZWVwZXJfaWQgPSAwOyAvKiBzbXBfcHJvY2Vzc29yX2lkKCkgb2YgdGltZS1rZWVwZXIgKi8KIAogI2lmZGVmIENPTkZJR19JQTY0X0RFQlVHX0lSUQogCkBAIC03MSw3ICs3MSw3IEBACiAKIAkJbmV3X2l0bSArPSBsb2NhbF9jcHVfZGF0YS0+aXRtX2RlbHRhOwogCi0JCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gVElNRV9LRUVQRVJfSUQpIHsKKwkJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSB0aW1lX2tlZXBlcl9pZCkgewogCQkJLyoKIAkJCSAqIEhlcmUgd2UgYXJlIGluIHRoZSB0aW1lciBpcnEgaGFuZGxlci4gV2UgaGF2ZSBpcnFzIGxvY2FsbHkKIAkJCSAqIGRpc2FibGVkLCBidXQgd2UgZG9uJ3Qga25vdyBpZiB0aGUgdGltZXJfYmggaXMgcnVubmluZyBvbgpAQCAtMjM2LDYgKzIzNiwxMSBAQAogCS5uYW1lID0JCSJ0aW1lciIKIH07CiAKK3ZvaWQgX19kZXZpbml0IGlhNjRfZGlzYWJsZV90aW1lcih2b2lkKQoreworCWlhNjRfc2V0X2l0digxIDw8IDE2KTsKK30KKwogdm9pZCBfX2luaXQKIHRpbWVfaW5pdCAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCA2ZTVlZWExLi4zYjZmZDc5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCkBAIC0zNiw3ICszNiw3IEBACiAJcGFyZW50ID0gJnN5c2ZzX25vZGVzW2NwdV90b19ub2RlKG51bSldOwogI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKLSNpZmRlZiBDT05GSUdfQUNQSQorI2lmIGRlZmluZWQgKENPTkZJR19BQ1BJKSAmJiBkZWZpbmVkIChDT05GSUdfSE9UUExVR19DUFUpCiAJLyoKIAkgKiBJZiBDUEVJIGNhbm5vdCBiZSByZS10YXJnZXR0ZWQsIGFuZCB0aGlzIGlzCiAJICogQ1BFSSB0YXJnZXQsIHRoZW4gZG9udCBjcmVhdGUgdGhlIGNvbnRyb2wgZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggZjllMGFlOS4uMWUzNTc1NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKLWV4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOworZXh0ZXJuIHZvaWQgZGllX2lmX2tlcm5lbChjaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycik7CiAKICN1bmRlZiBERUJVR19VTkFMSUdORURfVFJBUAogCkBAIC01Myw2ICs1MywxNSBAQAogI2RlZmluZSBTSUdOX0VYVDkJCTB4ZmZmZmZmZmZmZmZmZmYwMHVsCiAKIC8qCisgKiAgc3lzY3RsIHNldHRhYmxlIGhvb2sgd2hpY2ggdGVsbHMgdGhlIGtlcm5lbCB3aGV0aGVyIHRvIGhvbm9yIHRoZQorICogIElBNjRfVEhSRUFEX1VBQ19OT1BSSU5UIHByY3RsLiAgQmVjYXVzZSB0aGlzIGlzIHVzZXIgc2V0dGFibGUsIHdlIHdhbnQKKyAqICB0byBhbGxvdyB0aGUgc3VwZXIgdXNlciB0byBlbmFibGUvZGlzYWJsZSB0aGlzIGZvciBzZWN1cml0eSByZWFzb25zCisgKiAgKGkuZS4gZG9uJ3QgYWxsb3cgYXR0YWNrZXIgdG8gZmlsbCB1cCBsb2dzIHdpdGggdW5hbGlnbmVkIGFjY2Vzc2VzKS4KKyAqLworaW50IG5vX3VuYWxpZ25lZF93YXJuaW5nOworc3RhdGljIGludCBub3ByaW50X3dhcm5pbmc7CisKKy8qCiAgKiBGb3IgTS11bml0OgogICoKICAqICBvcGNvZGUgfCAgIG0gIHwgICB4NiAgICB8CkBAIC0xMzI0LDggKzEzMzMsOSBAQAogCQlpZiAoKGN1cnJlbnQtPnRocmVhZC5mbGFncyAmIElBNjRfVEhSRUFEX1VBQ19TSUdCVVMpICE9IDApCiAJCQlnb3RvIGZvcmNlX3NpZ2J1czsKIAotCQlpZiAoIShjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBJQTY0X1RIUkVBRF9VQUNfTk9QUklOVCkKLQkJICAgICYmIHdpdGhpbl9sb2dnaW5nX3JhdGVfbGltaXQoKSkKKwkJaWYgKCFub191bmFsaWduZWRfd2FybmluZyAmJgorCQkgICAgIShjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBJQTY0X1RIUkVBRF9VQUNfTk9QUklOVCkgJiYKKwkJICAgIHdpdGhpbl9sb2dnaW5nX3JhdGVfbGltaXQoKSkKIAkJewogCQkJY2hhciBidWZbMjAwXTsJLyogY29tbVtdIGlzIGF0IG1vc3QgMTYgYnl0ZXMuLi4gKi8KIAkJCXNpemVfdCBsZW47CkBAIC0xMzQwLDcgKzEzNTAsMjIgQEAKIAkJCWlmICh1c2VyX21vZGUocmVncykpCiAJCQkJdHR5X3dyaXRlX21lc3NhZ2UoY3VycmVudC0+c2lnbmFsLT50dHksIGJ1Zik7CiAJCQlidWZbbGVuLTFdID0gJ1wwJzsJLyogZHJvcCAnXHInICovCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyIsIGJ1Zik7CS8qIHdhdGNoIGZvciBjb21tYW5kIG5hbWVzIGNvbnRhaW5pbmcgJXMgKi8KKwkJCS8qIHdhdGNoIGZvciBjb21tYW5kIG5hbWVzIGNvbnRhaW5pbmcgJXMgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIiwgYnVmKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChub191bmFsaWduZWRfd2FybmluZyAmJiAhbm9wcmludF93YXJuaW5nKSB7CisJCQkJbm9wcmludF93YXJuaW5nID0gMTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyglZCkgZW5jb3VudGVyZWQgYW4gIgorCQkJCSAgICAgICAidW5hbGlnbmVkIGV4Y2VwdGlvbiB3aGljaCByZXF1aXJlZFxuIgorCQkJCSAgICAgICAia2VybmVsIGFzc2lzdGFuY2UsIHdoaWNoIGRlZ3JhZGVzICIKKwkJCQkgICAgICAgInRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgYXBwbGljYXRpb24uXG4iCisJCQkJICAgICAgICJVbmFsaWduZWQgZXhjZXB0aW9uIHdhcm5pbmdzIGhhdmUgIgorCQkJCSAgICAgICAiYmVlbiBkaXNhYmxlZCBieSB0aGUgc3lzdGVtICIKKwkJCQkgICAgICAgImFkbWluaXN0cmF0b3JcbiIKKwkJCQkgICAgICAgImVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvaWdub3JlLSIKKwkJCQkgICAgICAgInVuYWxpZ25lZC11c2VydHJhcCB0byByZS1lbmFibGVcbiIsCisJCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlpZiAod2l0aGluX2xvZ2dpbmdfcmF0ZV9saW1pdCgpKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2NvbnRpZy5jIGIvYXJjaC9pYTY0L21tL2NvbnRpZy5jCmluZGV4IGFjYWFlYzQuLjk4NTViYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9jb250aWcuYworKysgYi9hcmNoL2lhNjQvbW0vY29udGlnLmMKQEAgLTE4MSwxMyArMTgxLDE1IEBACiB7CiAJdm9pZCAqY3B1X2RhdGE7CiAJaW50IGNwdTsKKwlzdGF0aWMgaW50IGZpcnN0X3RpbWU9MTsKIAogCS8qCiAJICogZ2V0X2ZyZWVfcGFnZXMoKSBjYW5ub3QgYmUgdXNlZCBiZWZvcmUgY3B1X2luaXQoKSBkb25lLiAgQlNQCiAJICogYWxsb2NhdGVzICJOUl9DUFVTIiBwYWdlcyBmb3IgYWxsIENQVXMgdG8gYXZvaWQgdGhhdCBBUCBjYWxscwogCSAqIGdldF96ZXJvZWRfcGFnZSgpLgogCSAqLwotCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkgeworCWlmIChmaXJzdF90aW1lKSB7CisJCWZpcnN0X3RpbWU9MDsKIAkJY3B1X2RhdGEgPSBfX2FsbG9jX2Jvb3RtZW0oUEVSQ1BVX1BBR0VfU0laRSAqIE5SX0NQVVMsCiAJCQkJCSAgIFBFUkNQVV9QQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CiAJCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwppbmRleCBjODdkNmQxLi41NzNkNWNjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKKysrIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCkBAIC01MjgsMTIgKzUyOCwxNyBAQAogdm9pZCAqcGVyX2NwdV9pbml0KHZvaWQpCiB7CiAJaW50IGNwdTsKKwlzdGF0aWMgaW50IGZpcnN0X3RpbWUgPSAxOworCiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDApCiAJCXJldHVybiBfX3Blcl9jcHVfc3RhcnQgKyBfX3Blcl9jcHVfb2Zmc2V0W3NtcF9wcm9jZXNzb3JfaWQoKV07CiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKQotCQlwZXJfY3B1KGxvY2FsX3Blcl9jcHVfb2Zmc2V0LCBjcHUpID0gX19wZXJfY3B1X29mZnNldFtjcHVdOworCWlmIChmaXJzdF90aW1lKSB7CisJCWZpcnN0X3RpbWUgPSAwOworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKQorCQkJcGVyX2NwdShsb2NhbF9wZXJfY3B1X29mZnNldCwgY3B1KSA9IF9fcGVyX2NwdV9vZmZzZXRbY3B1XTsKKwl9CiAKIAlyZXR1cm4gX19wZXJfY3B1X3N0YXJ0ICsgX19wZXJfY3B1X29mZnNldFtzbXBfcHJvY2Vzc29yX2lkKCldOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCAyZDEzODg5Li45ZGJjN2RhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtNjgsOSArNjgsMTAgQEAKICNkZWZpbmUgbWtfcHRlX2h1Z2UoZW50cnkpIHsgcHRlX3ZhbChlbnRyeSkgfD0gX1BBR0VfUDsgfQogCiAvKgotICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHByb3BlciBhbGlnbm1lbnQgb2YgaW5wdXQgYWRkciBhbmQgbGVuIHBhcmFtZXRlcnMuCisgKiBEb24ndCBhY3R1YWxseSBuZWVkIHRvIGRvIGFueSBwcmVwYXJhdGlvbiwgYnV0IG5lZWQgdG8gbWFrZSBzdXJlCisgKiB0aGUgYWRkcmVzcyBpcyBpbiB0aGUgcmlnaHQgcmVnaW9uLgogICovCi1pbnQgaXNfYWxpZ25lZF9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQoraW50IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlpZiAobGVuICYgfkhQQUdFX01BU0spCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggYjM4YjZkMi4uMDhkOTRlNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAllYWRkciA9ICh1bnNpZ25lZCBsb25nKSBpYTY0X2ltdmEoX19pbml0X2VuZCk7CiAJd2hpbGUgKGFkZHIgPCBlYWRkcikgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkciksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKIAkJZnJlZV9wYWdlKGFkZHIpOwogCQkrK3RvdGFscmFtX3BhZ2VzOwogCQlhZGRyICs9IFBBR0VfU0laRTsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQkJY29udGludWU7CiAJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc3RhcnQpOwogCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCWluaXRfcGFnZV9jb3VudChwYWdlKTsKIAkJZnJlZV9wYWdlKHN0YXJ0KTsKIAkJKyt0b3RhbHJhbV9wYWdlczsKIAl9CkBAIC02NDAsNyArNjQwLDcgQEAKIHZvaWQgb25saW5lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0Jc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJaW5pdF9wYWdlX2NvdW50KHBhZ2UpOwogCV9fZnJlZV9wYWdlKHBhZ2UpOwogCXRvdGFscmFtX3BhZ2VzKys7CiAJbnVtX3BoeXNwYWdlcysrOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggMGIzMGNhMC4uOWJhMzJiMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC01NzksNyArNTc5LDcgQEAKIGNoYXIgKiBfX2luaXQKIHBjaWJpb3Nfc2V0dXAgKGNoYXIgKnN0cikKIHsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc3RyOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQvc24va2VybmVsL01ha2VmaWxlCmluZGV4IDNlOWI0ZWUuLmFiOWM0OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTAsNyArMTAsOCBAQAogQ1BQRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2FyY2gvaWE2NC9zbi9pbmNsdWRlCiAKIG9iai15CQkJCSs9IHNldHVwLm8gYnRlLm8gYnRlX2Vycm9yLm8gaXJxLm8gbWNhLm8gaWRsZS5vIFwKLQkJCQkgICBodWJlcnJvci5vIGlvX2luaXQubyBpb212Lm8ga2xjb25mbGliLm8gc24yLworCQkJCSAgIGh1YmVycm9yLm8gaW9faW5pdC5vIGlvbXYubyBrbGNvbmZsaWIubyBwaW9fcGh5cy5vIFwKKwkJCQkgICBzbjIvCiBvYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSAgICAgICs9IG1hY2h2ZWMubwogb2JqLSQoQ09ORklHX1NHSV9USU9DWCkJCSs9IHRpb2N4Lm8KIG9iai0kKENPTkZJR19JQTY0X1NHSV9TTl9YUCkJKz0geHAubwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMKaW5kZXggMWYxMWRiNC4uZTk1MmVmNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jCkBAIC0zNiw3ICszNiw3IEBACiAJbm9kZXBkYV90ICp0bXBfbm9kZXBkYTsKIAogCWlmIChuYXNpZF90b19jbm9kZWlkKG5hc2lkKSA9PSAtMSkKLQkJcmV0dXJuIChzdHJ1Y3QgYnRlaW5mb19zICopTlVMTDs7CisJCXJldHVybiAoc3RydWN0IGJ0ZWluZm9fcyAqKU5VTEw7CiAKIAl0bXBfbm9kZXBkYSA9IE5PREVQREEobmFzaWRfdG9fY25vZGVpZChuYXNpZCkpOwogCXJldHVybiAmdG1wX25vZGVwZGEtPmJ0ZV9pZltpbnRlcmZhY2VdOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCAzZWRlZjBkLi5kZmIzZjI5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwpAQCAtNzE2LDQgKzcxNiwzIEBACiBFWFBPUlRfU1lNQk9MKHNuX3BjaV9jb250cm9sbGVyX2ZpeHVwKTsKIEVYUE9SVF9TWU1CT0woc25fYnVzX3N0b3JlX3N5c2RhdGEpOwogRVhQT1JUX1NZTUJPTChzbl9idXNfZnJlZV9zeXNkYXRhKTsKLUVYUE9SVF9TWU1CT0woc25fcGNpZGV2X2luZm9fZ2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvcGlvX3BoeXMuUyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvcGlvX3BoeXMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzdkNDhkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9waW9fcGh5cy5TCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG1hY3JvcyB1c2VkIHRvIGFjY2VzcyBNTVIgcmVnaXN0ZXJzIHZpYQorICogdW5jYWNoZWQgcGh5c2ljYWwgYWRkcmVzc2VzLgorICogICAgICBwaW9fcGh5c19yZWFkX21tciAgLSByZWFkIGFuIE1NUgorICogICAgICBwaW9fcGh5c193cml0ZV9tbXIgLSB3cml0ZSBhbiBNTVIKKyAqICAgICAgcGlvX2F0b21pY19waHlzX3dyaXRlX21tcnMgLSBhdG9taWNhbGx5IHdyaXRlIDEgb3IgMiBNTVJzIHdpdGggcHNyLmljPTAKKyAqICAgICAgICAgICAgICBTZWNvbmQgTU1SIHdpbGwgYmUgc2tpcHBlZCBpZiBhZGRyZXNzIGlzIE5VTEwKKyAqCisgKiBBZGRyZXNzZXMgcGFzc2VkIHRvIHRoZXNlIHJvdXRpbmVzIHNob3VsZCBiZSB1bmNhY2hlZCBwaHlzaWNhbCBhZGRyZXNzZXMKKyAqIAlpZS4sIDB4ODAwMDAuLi4uCisgKi8KKworCisKKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitHTE9CQUxfRU5UUlkocGlvX3BoeXNfcmVhZF9tbXIpCisJLnByb2xvZ3VlCisJLnJlZ3N0ayAxLDAsMCwwCisJLmJvZHkKKwltb3YgcjI9cHNyCisJcnNtIHBzci5pIHwgcHNyLmR0CisJOzsKKwlzcmx6LmQKKwlsZDguYWNxIHI4PVtyMzJdCisJOzsKKwltb3YgcHNyLmw9cjI7OworCXNybHouZAorCWJyLnJldC5zcHRrLm1hbnkgcnAKK0VORChwaW9fcGh5c19yZWFkX21tcikKKworR0xPQkFMX0VOVFJZKHBpb19waHlzX3dyaXRlX21tcikKKwkucHJvbG9ndWUKKwkucmVnc3RrIDIsMCwwLDAKKwkuYm9keQorCW1vdiByMj1wc3IKKwlyc20gcHNyLmkgfCBwc3IuZHQKKwk7OworCXNybHouZAorCXN0OC5yZWwgW3IzMl09cjMzCisJOzsKKwltb3YgcHNyLmw9cjI7OworCXNybHouZAorCWJyLnJldC5zcHRrLm1hbnkgcnAKK0VORChwaW9fcGh5c193cml0ZV9tbXIpCisKK0dMT0JBTF9FTlRSWShwaW9fYXRvbWljX3BoeXNfd3JpdGVfbW1ycykKKwkucHJvbG9ndWUKKwkucmVnc3RrIDQsMCwwLDAKKwkuYm9keQorCW1vdiByMj1wc3IKKwljbXAubmUgcDkscDA9cjM0LHIwOworCXJzbSBwc3IuaSB8IHBzci5kdCB8IHBzci5pYworCTs7CisJc3Jsei5kCisJc3Q4LnJlbCBbcjMyXT1yMzMKKyhwOSkJc3Q4LnJlbCBbcjM0XT1yMzUKKwk7OworCW1vdiBwc3IubD1yMjs7CisJc3Jsei5kCisJYnIucmV0LnNwdGsubWFueSBycAorRU5EKHBpb19hdG9taWNfcGh5c193cml0ZV9tbXJzKQorCisKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwppbmRleCA1Yjg0ODM2Li44YjZkNWM4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMS0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAxLTIwMDYgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTQ5OCw2ICs0OTgsNyBAQAogCSAqIGZvciBzbi4KIAkgKi8KIAlwbV9wb3dlcl9vZmYgPSBpYTY0X3NuX3Bvd2VyX2Rvd247CisJY3VycmVudC0+dGhyZWFkLmZsYWdzIHw9IElBNjRfVEhSRUFEX01JR1JBVElPTjsKIH0KIAogLyoqCkBAIC02NjAsNyArNjYxLDggQEAKIAkJCVNIMl9QSU9fV1JJVEVfU1RBVFVTXzEsIFNIMl9QSU9fV1JJVEVfU1RBVFVTXzN9OwogCQl1NjQgKnBpbzsKIAkJcGlvID0gaXNfc2h1YjEoKSA/IHBpbzEgOiBwaW8yOwotCQlwZGEtPnBpb193cml0ZV9zdGF0dXNfYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIExPQ0FMX01NUl9BRERSKHBpb1tzbGljZV0pOworCQlwZGEtPnBpb193cml0ZV9zdGF0dXNfYWRkciA9CisJCSAgICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopR0xPQkFMX01NUl9BRERSKG5hc2lkLCBwaW9bc2xpY2VdKTsKIAkJcGRhLT5waW9fd3JpdGVfc3RhdHVzX3ZhbCA9IGlzX3NodWIxKCkgPyBTSF9QSU9fV1JJVEVfU1RBVFVTX1BFTkRJTkdfV1JJVEVfQ09VTlRfTUFTSyA6IDA7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMKaW5kZXggMjRlZWZiMi4uZDlkMzA2YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc24yX3NtcC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuMl9zbXAuYwpAQCAtOTMsNiArOTMsMjcgQEAKIAlyZXR1cm4gKHdzICYgU0hfUElPX1dSSVRFX1NUQVRVU19XUklURV9ERUFETE9DS19NQVNLKSAhPSAwOwogfQogCisvKioKKyAqIHNuX21pZ3JhdGUgLSBTTi1zcGVjaWZpYyB0YXNrIG1pZ3JhdGlvbiBhY3Rpb25zCisgKiBAdGFzazogVGFzayBiZWluZyBtaWdyYXRlZCB0byBuZXcgQ1BVCisgKgorICogU04yIFBJTyB3cml0ZXMgZnJvbSBzZXBhcmF0ZSBDUFVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBhcnJpdmUgaW4gb3JkZXIuCisgKiBDb250ZXh0IHN3aXRjaGluZyB1c2VyIHRocmVhZHMgd2hpY2ggaGF2ZSBtZW1vcnktbWFwcGVkIE1NSU8gbWF5IGNhdXNlCisgKiBQSU9zIHRvIGlzc3VlIGZyb20gc2VwZXJhdGUgQ1BVcywgdGh1cyB0aGUgUElPIHdyaXRlcyBtdXN0IGJlIGRyYWluZWQKKyAqIGZyb20gdGhlIHByZXZpb3VzIENQVSdzIFNodWIgYmVmb3JlIGV4ZWN1dGlvbiByZXN1bWVzIG9uIHRoZSBuZXcgQ1BVLgorICovCit2b2lkIHNuX21pZ3JhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXBkYV90ICpsYXN0X3BkYSA9IHBkYWNwdSh0YXNrX3RocmVhZF9pbmZvKHRhc2spLT5sYXN0X2NwdSk7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRyID0gbGFzdF9wZGEtPnBpb193cml0ZV9zdGF0dXNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZhbCA9IGxhc3RfcGRhLT5waW9fd3JpdGVfc3RhdHVzX3ZhbDsKKworCS8qIERyYWluIFBJTyB3cml0ZXMgZnJvbSBvbGQgQ1BVJ3MgU2h1YiAqLworCXdoaWxlICh1bmxpa2VseSgoKmFkciAmIFNIX1BJT19XUklURV9TVEFUVVNfUEVORElOR19XUklURV9DT1VOVF9NQVNLKQorCQkJIT0gdmFsKSkKKwkJY3B1X3JlbGF4KCk7Cit9CisKIHZvaWQgc25fdGxiX21pZ3JhdGVfZmluaXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCS8qIGZsdXNoX3RsYl9tbSBpcyBpbmVmZmljaWVudCBpZiBtb3JlIHRoYW4gMSB1c2VycyBvZiBtbSAqLwpAQCAtNDQ2LDcgKzQ2Nyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBzbjJfcHRjX2luaXQodm9pZCkKIHsKIAlpZiAoIWlhNjRfcGxhdGZvcm1faXMoInNuMiIpKQotCQlyZXR1cm4gLUVOT1NZUzsKKwkJcmV0dXJuIDA7CiAKIAlpZiAoIShwcm9jX3NuMl9wdGMgPSBjcmVhdGVfcHJvY19lbnRyeShQVENfQkFTRU5BTUUsIDA0NDQsIE5VTEwpKSkgewogCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBjcmVhdGUgJXMgcHJvYyBlbnRyeSIsIFBUQ19CQVNFTkFNRSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3Rpb2N4LmMKaW5kZXggOGE1NmY4Yi4uOTljYjI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC90aW9jeC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvdGlvY3guYwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJaW50IGZvdW5kX3Rpb2N4X2RldmljZSA9IDA7CiAKIAlpZiAoIWlhNjRfcGxhdGZvcm1faXMoInNuMiIpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CiAKIAlidXNfcmVnaXN0ZXIoJnRpb2N4X2J1c190eXBlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCmluZGV4IGNkZjY4NTYuLmQwYWJkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGFzbS9zbi9idGUuaD4KQEAgLTMwLDYgKzI5LDMxIEBACiAKIAogLyoKKyAqIEd1YXJhbnRlZSB0aGF0IHRoZSBremFsbG9jJ2QgbWVtb3J5IGlzIGNhY2hlbGluZSBhbGlnbmVkLgorICovCitzdGF0aWMgdm9pZCAqCit4cGNfa3phbGxvY19jYWNoZWxpbmVfYWxpZ25lZChzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIHZvaWQgKipiYXNlKQoreworCS8qIHNlZSBpZiBremFsbG9jIHdpbGwgZ2l2ZSB1cyBjYWNobGluZSBhbGlnbmVkIG1lbW9yeSBieSBkZWZhdWx0ICovCisJKmJhc2UgPSBremFsbG9jKHNpemUsIGZsYWdzKTsKKwlpZiAoKmJhc2UgPT0gTlVMTCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKCh1NjQpICpiYXNlID09IEwxX0NBQ0hFX0FMSUdOKCh1NjQpICpiYXNlKSkgeworCQlyZXR1cm4gKmJhc2U7CisJfQorCWtmcmVlKCpiYXNlKTsKKworCS8qIG5vcGUsIHdlJ2xsIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzICovCisJKmJhc2UgPSBremFsbG9jKHNpemUgKyBMMV9DQUNIRV9CWVRFUywgZmxhZ3MpOworCWlmICgqYmFzZSA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKHZvaWQgKikgTDFfQ0FDSEVfQUxJR04oKHU2NCkgKmJhc2UpOworfQorCisKKy8qCiAgKiBTZXQgdXAgdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgWFBhcnRpdGlvbiBDb21tdW5pY2F0aW9uIGNoYW5uZWxzLgogICovCiBzdGF0aWMgdm9pZApAQCAtOTMsMjAgKzExNywxOSBAQAogCSAqIEFsbG9jYXRlIGFsbCBvZiB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmVzIGFzIGEgY29udGlndW91cyBjaHVuayBvZgogCSAqIG1lbW9yeS4KIAkgKi8KLQlwYXJ0LT5jaGFubmVscyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB4cGNfY2hhbm5lbCkgKiBYUENfTkNIQU5ORUxTLAorCXBhcnQtPmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHhwY19jaGFubmVsKSAqIFhQQ19OQ0hBTk5FTFMsCiAJCQkJCQkJCUdGUF9LRVJORUwpOwogCWlmIChwYXJ0LT5jaGFubmVscyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoeHBjX2NoYW4sICJjYW4ndCBnZXQgbWVtb3J5IGZvciBjaGFubmVsc1xuIik7CiAJCXJldHVybiB4cGNOb01lbW9yeTsKIAl9Ci0JbWVtc2V0KHBhcnQtPmNoYW5uZWxzLCAwLCBzaXplb2Yoc3RydWN0IHhwY19jaGFubmVsKSAqIFhQQ19OQ0hBTk5FTFMpOwogCiAJcGFydC0+bmNoYW5uZWxzID0gWFBDX05DSEFOTkVMUzsKIAogCiAJLyogYWxsb2NhdGUgYWxsIHRoZSByZXF1aXJlZCBHRVQvUFVUIHZhbHVlcyAqLwogCi0JcGFydC0+bG9jYWxfR1BzID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoWFBDX0dQX1NJWkUsCisJcGFydC0+bG9jYWxfR1BzID0geHBjX2t6YWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoWFBDX0dQX1NJWkUsCiAJCQkJCUdGUF9LRVJORUwsICZwYXJ0LT5sb2NhbF9HUHNfYmFzZSk7CiAJaWYgKHBhcnQtPmxvY2FsX0dQcyA9PSBOVUxMKSB7CiAJCWtmcmVlKHBhcnQtPmNoYW5uZWxzKTsKQEAgLTExNSw1NSArMTM4LDUxIEBACiAJCQkidmFsdWVzXG4iKTsKIAkJcmV0dXJuIHhwY05vTWVtb3J5OwogCX0KLQltZW1zZXQocGFydC0+bG9jYWxfR1BzLCAwLCBYUENfR1BfU0laRSk7CiAKLQlwYXJ0LT5yZW1vdGVfR1BzID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoWFBDX0dQX1NJWkUsCisJcGFydC0+cmVtb3RlX0dQcyA9IHhwY19remFsbG9jX2NhY2hlbGluZV9hbGlnbmVkKFhQQ19HUF9TSVpFLAogCQkJCQlHRlBfS0VSTkVMLCAmcGFydC0+cmVtb3RlX0dQc19iYXNlKTsKIAlpZiAocGFydC0+cmVtb3RlX0dQcyA9PSBOVUxMKSB7Ci0JCWtmcmVlKHBhcnQtPmNoYW5uZWxzKTsKLQkJcGFydC0+Y2hhbm5lbHMgPSBOVUxMOwotCQlrZnJlZShwYXJ0LT5sb2NhbF9HUHNfYmFzZSk7Ci0JCXBhcnQtPmxvY2FsX0dQcyA9IE5VTEw7CiAJCWRldl9lcnIoeHBjX2NoYW4sICJjYW4ndCBnZXQgbWVtb3J5IGZvciByZW1vdGUgZ2V0L3B1dCAiCiAJCQkidmFsdWVzXG4iKTsKKwkJa2ZyZWUocGFydC0+bG9jYWxfR1BzX2Jhc2UpOworCQlwYXJ0LT5sb2NhbF9HUHMgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5jaGFubmVscyk7CisJCXBhcnQtPmNoYW5uZWxzID0gTlVMTDsKIAkJcmV0dXJuIHhwY05vTWVtb3J5OwogCX0KLQltZW1zZXQocGFydC0+cmVtb3RlX0dQcywgMCwgWFBDX0dQX1NJWkUpOwogCiAKIAkvKiBhbGxvY2F0ZSBhbGwgdGhlIHJlcXVpcmVkIG9wZW4gYW5kIGNsb3NlIGFyZ3MgKi8KIAotCXBhcnQtPmxvY2FsX29wZW5jbG9zZV9hcmdzID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoCisJcGFydC0+bG9jYWxfb3BlbmNsb3NlX2FyZ3MgPSB4cGNfa3phbGxvY19jYWNoZWxpbmVfYWxpZ25lZCgKIAkJCQkJWFBDX09QRU5DTE9TRV9BUkdTX1NJWkUsIEdGUF9LRVJORUwsCiAJCQkJCSZwYXJ0LT5sb2NhbF9vcGVuY2xvc2VfYXJnc19iYXNlKTsKIAlpZiAocGFydC0+bG9jYWxfb3BlbmNsb3NlX2FyZ3MgPT0gTlVMTCkgewotCQlrZnJlZShwYXJ0LT5jaGFubmVscyk7Ci0JCXBhcnQtPmNoYW5uZWxzID0gTlVMTDsKLQkJa2ZyZWUocGFydC0+bG9jYWxfR1BzX2Jhc2UpOwotCQlwYXJ0LT5sb2NhbF9HUHMgPSBOVUxMOworCQlkZXZfZXJyKHhwY19jaGFuLCAiY2FuJ3QgZ2V0IG1lbW9yeSBmb3IgbG9jYWwgY29ubmVjdCBhcmdzXG4iKTsKIAkJa2ZyZWUocGFydC0+cmVtb3RlX0dQc19iYXNlKTsKIAkJcGFydC0+cmVtb3RlX0dQcyA9IE5VTEw7Ci0JCWRldl9lcnIoeHBjX2NoYW4sICJjYW4ndCBnZXQgbWVtb3J5IGZvciBsb2NhbCBjb25uZWN0IGFyZ3NcbiIpOworCQlrZnJlZShwYXJ0LT5sb2NhbF9HUHNfYmFzZSk7CisJCXBhcnQtPmxvY2FsX0dQcyA9IE5VTEw7CisJCWtmcmVlKHBhcnQtPmNoYW5uZWxzKTsKKwkJcGFydC0+Y2hhbm5lbHMgPSBOVUxMOwogCQlyZXR1cm4geHBjTm9NZW1vcnk7CiAJfQotCW1lbXNldChwYXJ0LT5sb2NhbF9vcGVuY2xvc2VfYXJncywgMCwgWFBDX09QRU5DTE9TRV9BUkdTX1NJWkUpOwogCi0JcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoCisJcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzID0geHBjX2t6YWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoCiAJCQkJCVhQQ19PUEVOQ0xPU0VfQVJHU19TSVpFLCBHRlBfS0VSTkVMLAogCQkJCQkmcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzX2Jhc2UpOwogCWlmIChwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3MgPT0gTlVMTCkgewotCQlrZnJlZShwYXJ0LT5jaGFubmVscyk7Ci0JCXBhcnQtPmNoYW5uZWxzID0gTlVMTDsKLQkJa2ZyZWUocGFydC0+bG9jYWxfR1BzX2Jhc2UpOwotCQlwYXJ0LT5sb2NhbF9HUHMgPSBOVUxMOwotCQlrZnJlZShwYXJ0LT5yZW1vdGVfR1BzX2Jhc2UpOwotCQlwYXJ0LT5yZW1vdGVfR1BzID0gTlVMTDsKKwkJZGV2X2Vycih4cGNfY2hhbiwgImNhbid0IGdldCBtZW1vcnkgZm9yIHJlbW90ZSBjb25uZWN0IGFyZ3NcbiIpOwogCQlrZnJlZShwYXJ0LT5sb2NhbF9vcGVuY2xvc2VfYXJnc19iYXNlKTsKIAkJcGFydC0+bG9jYWxfb3BlbmNsb3NlX2FyZ3MgPSBOVUxMOwotCQlkZXZfZXJyKHhwY19jaGFuLCAiY2FuJ3QgZ2V0IG1lbW9yeSBmb3IgcmVtb3RlIGNvbm5lY3QgYXJnc1xuIik7CisJCWtmcmVlKHBhcnQtPnJlbW90ZV9HUHNfYmFzZSk7CisJCXBhcnQtPnJlbW90ZV9HUHMgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5sb2NhbF9HUHNfYmFzZSk7CisJCXBhcnQtPmxvY2FsX0dQcyA9IE5VTEw7CisJCWtmcmVlKHBhcnQtPmNoYW5uZWxzKTsKKwkJcGFydC0+Y2hhbm5lbHMgPSBOVUxMOwogCQlyZXR1cm4geHBjTm9NZW1vcnk7CiAJfQotCW1lbXNldChwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3MsIDAsIFhQQ19PUEVOQ0xPU0VfQVJHU19TSVpFKTsKIAogCiAJeHBjX2luaXRpYWxpemVfY2hhbm5lbHMocGFydCwgcGFydGlkKTsKQEAgLTE4NiwxOCArMjA1LDE4IEBACiAJcmV0ID0gcmVxdWVzdF9pcnEoU0dJX1hQQ19OT1RJRlksIHhwY19ub3RpZnlfSVJRX2hhbmRsZXIsIFNBX1NISVJRLAogCQkJCXBhcnQtPklQSV9vd25lciwgKHZvaWQgKikgKHU2NCkgcGFydGlkKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJa2ZyZWUocGFydC0+Y2hhbm5lbHMpOwotCQlwYXJ0LT5jaGFubmVscyA9IE5VTEw7Ci0JCWtmcmVlKHBhcnQtPmxvY2FsX0dQc19iYXNlKTsKLQkJcGFydC0+bG9jYWxfR1BzID0gTlVMTDsKLQkJa2ZyZWUocGFydC0+cmVtb3RlX0dQc19iYXNlKTsKLQkJcGFydC0+cmVtb3RlX0dQcyA9IE5VTEw7Ci0JCWtmcmVlKHBhcnQtPmxvY2FsX29wZW5jbG9zZV9hcmdzX2Jhc2UpOwotCQlwYXJ0LT5sb2NhbF9vcGVuY2xvc2VfYXJncyA9IE5VTEw7Ci0JCWtmcmVlKHBhcnQtPnJlbW90ZV9vcGVuY2xvc2VfYXJnc19iYXNlKTsKLQkJcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzID0gTlVMTDsKIAkJZGV2X2Vycih4cGNfY2hhbiwgImNhbid0IHJlZ2lzdGVyIE5PVElGWSBJUlEgaGFuZGxlciwgIgogCQkJImVycm5vPSVkXG4iLCAtcmV0KTsKKwkJa2ZyZWUocGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzX2Jhc2UpOworCQlwYXJ0LT5yZW1vdGVfb3BlbmNsb3NlX2FyZ3MgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5sb2NhbF9vcGVuY2xvc2VfYXJnc19iYXNlKTsKKwkJcGFydC0+bG9jYWxfb3BlbmNsb3NlX2FyZ3MgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5yZW1vdGVfR1BzX2Jhc2UpOworCQlwYXJ0LT5yZW1vdGVfR1BzID0gTlVMTDsKKwkJa2ZyZWUocGFydC0+bG9jYWxfR1BzX2Jhc2UpOworCQlwYXJ0LT5sb2NhbF9HUHMgPSBOVUxMOworCQlrZnJlZShwYXJ0LT5jaGFubmVscyk7CisJCXBhcnQtPmNoYW5uZWxzID0gTlVMTDsKIAkJcmV0dXJuIHhwY0xhY2tPZlJlc291cmNlczsKIAl9CiAKQEAgLTQ0NiwyMiArNDY1LDIwIEBACiAJZm9yIChuZW50cmllcyA9IGNoLT5sb2NhbF9uZW50cmllczsgbmVudHJpZXMgPiAwOyBuZW50cmllcy0tKSB7CiAKIAkJbmJ5dGVzID0gbmVudHJpZXMgKiBjaC0+bXNnX3NpemU7Ci0JCWNoLT5sb2NhbF9tc2dxdWV1ZSA9IHhwY19rbWFsbG9jX2NhY2hlbGluZV9hbGlnbmVkKG5ieXRlcywKKwkJY2gtPmxvY2FsX21zZ3F1ZXVlID0geHBjX2t6YWxsb2NfY2FjaGVsaW5lX2FsaWduZWQobmJ5dGVzLAogCQkJCQkJR0ZQX0tFUk5FTCwKIAkJCQkJCSZjaC0+bG9jYWxfbXNncXVldWVfYmFzZSk7CiAJCWlmIChjaC0+bG9jYWxfbXNncXVldWUgPT0gTlVMTCkgewogCQkJY29udGludWU7CiAJCX0KLQkJbWVtc2V0KGNoLT5sb2NhbF9tc2dxdWV1ZSwgMCwgbmJ5dGVzKTsKIAogCQluYnl0ZXMgPSBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgeHBjX25vdGlmeSk7Ci0JCWNoLT5ub3RpZnlfcXVldWUgPSBrbWFsbG9jKG5ieXRlcywgR0ZQX0tFUk5FTCk7CisJCWNoLT5ub3RpZnlfcXVldWUgPSBremFsbG9jKG5ieXRlcywgR0ZQX0tFUk5FTCk7CiAJCWlmIChjaC0+bm90aWZ5X3F1ZXVlID09IE5VTEwpIHsKIAkJCWtmcmVlKGNoLT5sb2NhbF9tc2dxdWV1ZV9iYXNlKTsKIAkJCWNoLT5sb2NhbF9tc2dxdWV1ZSA9IE5VTEw7CiAJCQljb250aW51ZTsKIAkJfQotCQltZW1zZXQoY2gtPm5vdGlmeV9xdWV1ZSwgMCwgbmJ5dGVzKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGlycV9mbGFncyk7CiAJCWlmIChuZW50cmllcyA8IGNoLT5sb2NhbF9uZW50cmllcykgewpAQCAtNTAxLDEzICs1MTgsMTIgQEAKIAlmb3IgKG5lbnRyaWVzID0gY2gtPnJlbW90ZV9uZW50cmllczsgbmVudHJpZXMgPiAwOyBuZW50cmllcy0tKSB7CiAKIAkJbmJ5dGVzID0gbmVudHJpZXMgKiBjaC0+bXNnX3NpemU7Ci0JCWNoLT5yZW1vdGVfbXNncXVldWUgPSB4cGNfa21hbGxvY19jYWNoZWxpbmVfYWxpZ25lZChuYnl0ZXMsCisJCWNoLT5yZW1vdGVfbXNncXVldWUgPSB4cGNfa3phbGxvY19jYWNoZWxpbmVfYWxpZ25lZChuYnl0ZXMsCiAJCQkJCQlHRlBfS0VSTkVMLAogCQkJCQkJJmNoLT5yZW1vdGVfbXNncXVldWVfYmFzZSk7CiAJCWlmIChjaC0+cmVtb3RlX21zZ3F1ZXVlID09IE5VTEwpIHsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCW1lbXNldChjaC0+cmVtb3RlX21zZ3F1ZXVlLCAwLCBuYnl0ZXMpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgaXJxX2ZsYWdzKTsKIAkJaWYgKG5lbnRyaWVzIDwgY2gtPnJlbW90ZV9uZW50cmllcykgewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCmluZGV4IDhjYmYxNjQuLjk5YjEyM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKQEAgLTUyLDcgKzUyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwppbmRleCA4OGE3MzBlLi45NDIxMTQyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwpAQCAtODEsNiArODEsMzEgQEAKIAogCiAvKgorICogR3VhcmFudGVlIHRoYXQgdGhlIGttYWxsb2MnZCBtZW1vcnkgaXMgY2FjaGVsaW5lIGFsaWduZWQuCisgKi8KK3N0YXRpYyB2b2lkICoKK3hwY19rbWFsbG9jX2NhY2hlbGluZV9hbGlnbmVkKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgdm9pZCAqKmJhc2UpCit7CisJLyogc2VlIGlmIGttYWxsb2Mgd2lsbCBnaXZlIHVzIGNhY2hsaW5lIGFsaWduZWQgbWVtb3J5IGJ5IGRlZmF1bHQgKi8KKwkqYmFzZSA9IGttYWxsb2Moc2l6ZSwgZmxhZ3MpOworCWlmICgqYmFzZSA9PSBOVUxMKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoKHU2NCkgKmJhc2UgPT0gTDFfQ0FDSEVfQUxJR04oKHU2NCkgKmJhc2UpKSB7CisJCXJldHVybiAqYmFzZTsKKwl9CisJa2ZyZWUoKmJhc2UpOworCisJLyogbm9wZSwgd2UnbGwgaGF2ZSB0byBkbyBpdCBvdXJzZWx2ZXMgKi8KKwkqYmFzZSA9IGttYWxsb2Moc2l6ZSArIEwxX0NBQ0hFX0JZVEVTLCBmbGFncyk7CisJaWYgKCpiYXNlID09IE5VTEwpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAodm9pZCAqKSBMMV9DQUNIRV9BTElHTigodTY0KSAqYmFzZSk7Cit9CisKKworLyoKICAqIEdpdmVuIGEgbmFzaWQsIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgIHBhcnRpdGlvbidzIHJlc2VydmVkIHBhZ2UKICAqIGZvciB0aGF0IG5hc2lkLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBhbnkgZXJyb3IuCiAgKi8KQEAgLTEwMzgsMTMgKzEwNjMsMTIgQEAKIAlyZW1vdGVfdmFycyA9IChzdHJ1Y3QgeHBjX3ZhcnMgKikgcmVtb3RlX3JwOwogCiAKLQlkaXNjb3ZlcmVkX25hc2lkcyA9IGttYWxsb2Moc2l6ZW9mKHU2NCkgKiB4cF9uYXNpZF9tYXNrX3dvcmRzLAorCWRpc2NvdmVyZWRfbmFzaWRzID0ga3phbGxvYyhzaXplb2YodTY0KSAqIHhwX25hc2lkX21hc2tfd29yZHMsCiAJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKGRpc2NvdmVyZWRfbmFzaWRzID09IE5VTEwpIHsKIAkJa2ZyZWUocmVtb3RlX3JwX2Jhc2UpOwogCQlyZXR1cm47CiAJfQotCW1lbXNldChkaXNjb3ZlcmVkX25hc2lkcywgMCwgc2l6ZW9mKHU2NCkgKiB4cF9uYXNpZF9tYXNrX3dvcmRzKTsKIAogCXJwID0gKHN0cnVjdCB4cGNfcnN2ZF9wYWdlICopIHhwY19yc3ZkX3BhZ2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2FfcHJvdmlkZXIuYwppbmRleCA3NTcxYTQwLi5iZTAxNzY5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NhX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jYV9wcm92aWRlci5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIAlzdHJ1Y3QgdGlvY2FfZG1hbWFwICpjYV9kbWFtYXA7CiAJdm9pZCAqbWFwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHBjaWRldl9pbmZvICpwY2lkZXZfaW5mbyA9IFNOX1BDSURFVl9JTkZPKHBkZXYpOzsKKwlzdHJ1Y3QgcGNpZGV2X2luZm8gKnBjaWRldl9pbmZvID0gU05fUENJREVWX0lORk8ocGRldik7CiAKIAl0aW9jYV9jb21tb24gPSAoc3RydWN0IHRpb2NhX2NvbW1vbiAqKXBjaWRldl9pbmZvLT5wZGlfcGNpYnVzX2luZm87CiAJdGlvY2Ffa2VybiA9IChzdHJ1Y3QgdGlvY2Ffa2VybmVsICopdGlvY2FfY29tbW9uLT5jYV9rZXJuZWxfcHJpdmF0ZTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwppbmRleCBlNTI4MzFlLi5mYTA3M2NjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCkBAIC0xNSw2ICsxNSwxMjQgQEAKICNpbmNsdWRlIDxhc20vc24vcGNpZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3Rpb2NlX3Byb3ZpZGVyLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NuMi9zbl9od3BlcmYuaD4KKworLyoKKyAqIDEvMjYvMjAwNgorICoKKyAqIFdBUiBmb3IgU0dJIFBWIDk0NDY0Mi4gIEZvciByZXZBIFRJT0NFLCBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIHJlY2lwZQorICogKHRha2VuIGZyb20gdGhlIGFib3ZlIFBWKSBiZWZvcmUgYW5kIGFmdGVyIGFjY2Vzc2luZyB0aW9jZSBpbnRlcm5hbCBNTVIncworICogdG8gYXZvaWQgdGlvY2UgbG9ja3Vwcy4KKyAqCisgKiBUaGUgcmVjaXBlIGFzIHRha2VuIGZyb20gdGhlIFBWOgorICoKKyAqCWlmKG1tciBhZGRyZXNzIDwgMHg0NTAwMCkgeworICoJCWlmKG1tciBhZGRyZXNzID09IDAgb3IgMHg4MCkKKyAqCQkJbW1yIHdydCBvciByZWFkIGFkZHJlc3MgMHhjMAorICoJCWVsc2UgaWYobW1yIGFkZHJlc3MgPT0gMHgxNDggb3IgMHgyMDApCisgKgkJCW1tciB3cnQgb3IgcmVhZCBhZGRyZXNzIDB4MjgKKyAqCQllbHNlCisgKgkJCW1tciB3cnQgb3IgcmVhZCBhZGRyZXNzIDB4MTU4CisgKgorICoJCWRvIGRlc2lyZWQgbW1yIGFjY2VzcyAocmQgb3Igd3J0KQorICoKKyAqCQlpZihtbXIgYWRkcmVzcyA9PSAweDEwMCkKKyAqCQkJbW1yIHdydCBvciByZWFkIGFkZHJlc3MgMHgzOAorICoJCW1tciB3cnQgb3IgcmVhZCBhZGRyZXNzIDB4YjA1MAorICoJfSBlbHNlCisgKgkJZG8gZGVzaXJlZCBtbXIgYWNjZXNzCisgKgorICogQWNjb3JkaW5nIHRvIGh3LCB3ZSBjYW4gdXNlIHJlYWRzIGluc3RlYWQgb2Ygd3JpdGVzIHRvIHRoZSBhYm92ZSBhZGRyZXMKKyAqCisgKiBOb3RlIHRoaXMgV0FSIGNhbiBvbmx5IHRvIGJlIHVzZWQgZm9yIGFjY2Vzc2luZyBpbnRlcm5hbCBNTVIncyBpbiB0aGUKKyAqIFRJT0NFIENvcmV0YWxrIEFkZHJlc3MgUmFuZ2UgMHgwIC0gMHgwN2ZmX2ZmZmYuICBUaGlzIGluY2x1ZGVzIHRoZQorICogIkxvY2FsIENFIFJlZ2lzdGVycyBhbmQgTWVtb3JpZXMiIGFuZCAiUENJIENvbXBhdGlibGUgQ29uZmlnIFNwYWNlIiBhZGRyZXNzCisgKiBzcGFjZXMgZnJvbSB0YWJsZSAyLTEgb2YgdGhlICJDRSBQcm9ncmFtbWVyJ3MgUmVmZXJlbmNlIE92ZXJ2aWV3IiBkb2N1bWVudC4KKyAqCisgKiBBbGwgcmVnaXN0ZXJzIGRlZmluZWQgaW4gc3RydWN0IHRpb2NlIHdpbGwgbWVldCB0aGF0IGNyaXRlcmlhLgorICovCisKK3N0YXRpYyB2b2lkIGlubGluZQordGlvY2VfbW1yX3dhcl9wcmUoc3RydWN0IHRpb2NlX2tlcm5lbCAqa2Vybiwgdm9pZCAqbW1yX2FkZHIpCit7CisJdTY0IG1tcl9iYXNlOworCXU2NCBtbXJfb2Zmc2V0OworCisJaWYgKGtlcm4tPmNlX2NvbW1vbi0+Y2VfcmV2ICE9IFRJT0NFX1JFVl9BKQorCQlyZXR1cm47CisKKwltbXJfYmFzZSA9IGtlcm4tPmNlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX2Jhc2U7CisJbW1yX29mZnNldCA9ICh1NjQpbW1yX2FkZHIgLSBtbXJfYmFzZTsKKworCWlmIChtbXJfb2Zmc2V0IDwgMHg0NTAwMCkgeworCQl1NjQgbW1yX3dhcl9vZmZzZXQ7CisKKwkJaWYgKG1tcl9vZmZzZXQgPT0gMCB8fCBtbXJfb2Zmc2V0ID09IDB4ODApCisJCQltbXJfd2FyX29mZnNldCA9IDB4YzA7CisJCWVsc2UgaWYgKG1tcl9vZmZzZXQgPT0gMHgxNDggfHwgbW1yX29mZnNldCA9PSAweDIwMCkKKwkJCW1tcl93YXJfb2Zmc2V0ID0gMHgyODsKKwkJZWxzZQorCQkJbW1yX3dhcl9vZmZzZXQgPSAweDE1ODsKKworCQlyZWFkcV9yZWxheGVkKCh2b2lkICopKG1tcl9iYXNlICsgbW1yX3dhcl9vZmZzZXQpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlubGluZQordGlvY2VfbW1yX3dhcl9wb3N0KHN0cnVjdCB0aW9jZV9rZXJuZWwgKmtlcm4sIHZvaWQgKm1tcl9hZGRyKQoreworCXU2NCBtbXJfYmFzZTsKKwl1NjQgbW1yX29mZnNldDsKKworCWlmIChrZXJuLT5jZV9jb21tb24tPmNlX3JldiAhPSBUSU9DRV9SRVZfQSkKKwkJcmV0dXJuOworCisJbW1yX2Jhc2UgPSBrZXJuLT5jZV9jb21tb24tPmNlX3BjaWJ1cy5ic19iYXNlOworCW1tcl9vZmZzZXQgPSAodTY0KW1tcl9hZGRyIC0gbW1yX2Jhc2U7CisKKwlpZiAobW1yX29mZnNldCA8IDB4NDUwMDApIHsKKwkJaWYgKG1tcl9vZmZzZXQgPT0gMHgxMDApCisJCQlyZWFkcV9yZWxheGVkKCh2b2lkICopKG1tcl9iYXNlICsgMHgzOCkpOworCQlyZWFkcV9yZWxheGVkKCh2b2lkICopKG1tcl9iYXNlICsgMHhiMDUwKSk7CisJfQorfQorCisvKiBsb2FkIG1tciBjb250ZW50cyBpbnRvIGEgdmFyaWFibGUgKi8KKyNkZWZpbmUgdGlvY2VfbW1yX2xvYWQoa2VybiwgbW1ycCwgdmFycCkgZG8ge1wKKwl0aW9jZV9tbXJfd2FyX3ByZShrZXJuLCBtbXJwKTsgXAorCSoodmFycCkgPSByZWFkcV9yZWxheGVkKG1tcnApOyBcCisJdGlvY2VfbW1yX3dhcl9wb3N0KGtlcm4sIG1tcnApOyBcCit9IHdoaWxlICgwKQorCisvKiBzdG9yZSB2YXJpYWJsZSBjb250ZW50cyBpbnRvIG1tciAqLworI2RlZmluZSB0aW9jZV9tbXJfc3RvcmUoa2VybiwgbW1ycCwgdmFycCkgZG8ge1wKKwl0aW9jZV9tbXJfd2FyX3ByZShrZXJuLCBtbXJwKTsgXAorCXdyaXRlcSgqdmFycCwgbW1ycCk7IFwKKwl0aW9jZV9tbXJfd2FyX3Bvc3Qoa2VybiwgbW1ycCk7IFwKK30gd2hpbGUgKDApCisKKy8qIHN0b3JlIGltbWVkaWF0ZSB2YWx1ZSBpbnRvIG1tciAqLworI2RlZmluZSB0aW9jZV9tbXJfc3RvcmVpKGtlcm4sIG1tcnAsIHZhbCkgZG8ge1wKKwl0aW9jZV9tbXJfd2FyX3ByZShrZXJuLCBtbXJwKTsgXAorCXdyaXRlcSh2YWwsIG1tcnApOyBcCisJdGlvY2VfbW1yX3dhcl9wb3N0KGtlcm4sIG1tcnApOyBcCit9IHdoaWxlICgwKQorCisvKiBzZXQgYml0cyAoaW1tZWRpYXRlIHZhbHVlKSBpbnRvIG1tciAqLworI2RlZmluZSB0aW9jZV9tbXJfc2V0aShrZXJuLCBtbXJwLCBiaXRzKSBkbyB7XAorCXU2NCB0bXA7IFwKKwl0aW9jZV9tbXJfbG9hZChrZXJuLCBtbXJwLCAmdG1wKTsgXAorCXRtcCB8PSAoYml0cyk7IFwKKwl0aW9jZV9tbXJfc3RvcmUoa2VybiwgbW1ycCwgJnRtcCk7IFwKK30gd2hpbGUgKDApCisKKy8qIGNsZWFyIGJpdHMgKGltbWVkaWF0ZSB2YWx1ZSkgaW50byBtbXIgKi8KKyNkZWZpbmUgdGlvY2VfbW1yX2Nscmkoa2VybiwgbW1ycCwgYml0cykgZG8geyBcCisJdTY0IHRtcDsgXAorCXRpb2NlX21tcl9sb2FkKGtlcm4sIG1tcnAsICZ0bXApOyBcCisJdG1wICY9IH4oYml0cyk7IFwKKwl0aW9jZV9tbXJfc3RvcmUoa2VybiwgbW1ycCwgJnRtcCk7IFwKK30gd2hpbGUgKDApCiAKIC8qKgogICogQnVzIGFkZHJlc3MgcmFuZ2VzIGZvciB0aGUgNSBmbGF2b3JzIG9mIFRJT0NFIERNQQpAQCAtNjIsOSArMTgwLDkgQEAKICNkZWZpbmUgVElPQ0VfQVRFX000MAkyCiAjZGVmaW5lIFRJT0NFX0FURV9NNDBTCTMKIAotI2RlZmluZSBLQih4KQkoKHgpIDw8IDEwKQotI2RlZmluZSBNQih4KQkoKHgpIDw8IDIwKQotI2RlZmluZSBHQih4KQkoKHgpIDw8IDMwKQorI2RlZmluZSBLQih4KQkoKHU2NCkoeCkgPDwgMTApCisjZGVmaW5lIE1CKHgpCSgodTY0KSh4KSA8PCAyMCkKKyNkZWZpbmUgR0IoeCkJKCh1NjQpKHgpIDw8IDMwKQogCiAvKioKICAqIHRpb2NlX2RtYV9kNjQgLSBjcmVhdGUgYSBETUEgbWFwcGluZyB1c2luZyA2NC1iaXQgZGlyZWN0IG1vZGUKQEAgLTE1MSw3ICsyNjksNyBAQAogCWludCBsYXN0OwogCWludCBlbnRyaWVzOwogCWludCBuYXRlczsKLQlpbnQgcGFnZXNpemU7CisJdTY0IHBhZ2VzaXplOwogCXU2NCAqYXRlX3NoYWRvdzsKIAl1NjQgKmF0ZV9yZWc7CiAJdTY0IGFkZHI7CkBAIC0yMjgsNyArMzQ2LDcgQEAKIAogCQlhdGUgPSBBVEVfTUFLRShhZGRyLCBwYWdlc2l6ZSk7CiAJCWF0ZV9zaGFkb3dbaSArIGpdID0gYXRlOwotCQl3cml0ZXEoYXRlLCAmYXRlX3JlZ1tpICsgal0pOworCQl0aW9jZV9tbXJfc3RvcmVpKGNlX2tlcm4sICZhdGVfcmVnW2kgKyBqXSwgYXRlKTsKIAkJYWRkciArPSBwYWdlc2l6ZTsKIAl9CiAKQEAgLTI3Miw3ICszOTAsOCBAQAogCQl1NjQgdG1wOwogCiAJCWNlX2tlcm4tPmNlX3BvcnRbcG9ydF0uZGlybWFwX3NoYWRvdyA9IGN0X3VwcGVyOwotCQl3cml0ZXEoY3RfdXBwZXIsICZjZV9tbXItPmNlX3VyZV9kaXJfbWFwW3BvcnRdKTsKKwkJdGlvY2VfbW1yX3N0b3JlaShjZV9rZXJuLCAmY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XSwKKwkJCQkgY3RfdXBwZXIpOwogCQl0bXAgPSBjZV9tbXItPmNlX3VyZV9kaXJfbWFwW3BvcnRdOwogCQlkbWFfb2sgPSAxOwogCX0gZWxzZQpAQCAtMzQ0LDcgKzQ2Myw4IEBACiAJaWYgKFRJT0NFX0QzMl9BRERSKGJ1c19hZGRyKSkgewogCQlpZiAoLS1jZV9rZXJuLT5jZV9wb3J0W3BvcnRdLmRpcm1hcF9yZWZjbnQgPT0gMCkgewogCQkJY2Vfa2Vybi0+Y2VfcG9ydFtwb3J0XS5kaXJtYXBfc2hhZG93ID0gMDsKLQkJCXdyaXRlcSgwLCAmY2VfbW1yLT5jZV91cmVfZGlyX21hcFtwb3J0XSk7CisJCQl0aW9jZV9tbXJfc3RvcmVpKGNlX2tlcm4sICZjZV9tbXItPmNlX3VyZV9kaXJfbWFwW3BvcnRdLAorCQkJCQkgMCk7CiAJCX0KIAl9IGVsc2UgewogCQlzdHJ1Y3QgdGlvY2VfZG1hbWFwICptYXA7CkBAIC0zNjUsNyArNDg1LDcgQEAKIAkJfSBlbHNlIGlmICgtLW1hcC0+cmVmY250ID09IDApIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBtYXAtPmF0ZV9jb3VudDsgaSsrKSB7CiAJCQkJbWFwLT5hdGVfc2hhZG93W2ldID0gMDsKLQkJCQltYXAtPmF0ZV9od1tpXSA9IDA7CisJCQkJdGlvY2VfbW1yX3N0b3JlaShjZV9rZXJuLCAmbWFwLT5hdGVfaHdbaV0sIDApOwogCQkJfQogCiAJCQlsaXN0X2RlbCgmbWFwLT5jZV9kbWFtYXBfbGlzdCk7CkBAIC00ODYsNyArNjA2LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjZV9rZXJuLT5jZV9sb2NrLCBmbGFncyk7CiAKIGRtYV9tYXBfZG9uZToKLQlpZiAobWFwYWRkciAmIGJhcnJpZXIpCisJaWYgKG1hcGFkZHIgJiYgYmFycmllcikKIAkJbWFwYWRkciA9IHRpb2NlX2RtYV9iYXJyaWVyKG1hcGFkZHIsIDEpOwogCiAJcmV0dXJuIG1hcGFkZHI7CkBAIC01NDEsMTcgKzY2MSw2MSBAQAogCQkJc29mdC0+Y2VfcGNpYnVzLmJzX3BlcnNpc3Rfc2VnbWVudCwKIAkJCXNvZnQtPmNlX3BjaWJ1cy5ic19wZXJzaXN0X2J1c251bSwgMCwgMCwgMCwgMCwgMCk7CiAKKwlpZiAocmV0X3N0dWZmLnYwKQorCQlwYW5pYygidGlvY2VfZXJyb3JfaW50cl9oYW5kbGVyOiAgRmF0YWwgVElPQ0UgZXJyb3IiKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogLyoqCisgKiB0aW9jZV9yZXNlcnZlX20zMiAtIHJlc2VydmUgTTMyIGF0ZSdzIGZvciB0aGUgaW5kaWNhdGVkIGFkZHJlc3MgcmFuZ2UKKyAqIEB0aW9jZV9rZXJuZWw6IFRJT0NFIGNvbnRleHQgdG8gcmVzZXJ2ZSBhdGUncyBmb3IKKyAqIEBiYXNlOiBzdGFydGluZyBidXMgYWRkcmVzcyB0byByZXNlcnZlCisgKiBAbGltaXQ6IGxhc3QgYnVzIGFkZHJlc3MgdG8gcmVzZXJ2ZQorICoKKyAqIElmIGJhc2UvbGltaXQgZmFsbHMgd2l0aGluIHRoZSByYW5nZSBvZiBidXMgc3BhY2UgbWFwcGVkIHRocm91Z2ggdGhlCisgKiBNMzIgc3BhY2UsIHJlc2VydmUgdGhlIHJlc291cmNlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSByYW5nZS4KKyAqLworc3RhdGljIHZvaWQKK3Rpb2NlX3Jlc2VydmVfbTMyKHN0cnVjdCB0aW9jZV9rZXJuZWwgKmNlX2tlcm4sIHU2NCBiYXNlLCB1NjQgbGltaXQpCit7CisJaW50IGF0ZV9pbmRleCwgbGFzdF9hdGUsIHBzOworCXN0cnVjdCB0aW9jZSAqY2VfbW1yOworCisJaWYgKCFUSU9DRV9NMzJfQUREUihiYXNlKSkKKwkJcmV0dXJuOworCisJY2VfbW1yID0gKHN0cnVjdCB0aW9jZSAqKWNlX2tlcm4tPmNlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX2Jhc2U7CisJcHMgPSBjZV9rZXJuLT5jZV9hdGUzMjQwX3BhZ2VzaXplOworCWF0ZV9pbmRleCA9IEFURV9QQUdFKGJhc2UsIHBzKTsKKwlsYXN0X2F0ZSA9IGF0ZV9pbmRleCArIEFURV9OUEFHRVMoYmFzZSwgbGltaXQtYmFzZSsxLCBwcykgLSAxOworCisJaWYgKGF0ZV9pbmRleCA8IDY0KQorCQlhdGVfaW5kZXggPSA2NDsKKworCXdoaWxlIChhdGVfaW5kZXggPD0gbGFzdF9hdGUpIHsKKwkJdTY0IGF0ZTsKKworCQlhdGUgPSBBVEVfTUFLRSgweGRlYWRiZWVmLCBwcyk7CisJCWNlX2tlcm4tPmNlX2F0ZTMyNDBfc2hhZG93W2F0ZV9pbmRleF0gPSBhdGU7CisJCXRpb2NlX21tcl9zdG9yZWkoY2Vfa2VybiwgJmNlX21tci0+Y2VfdXJlX2F0ZTMyNDBbYXRlX2luZGV4XSwKKwkJCQkgYXRlKTsKKwkJYXRlX2luZGV4Kys7CisJfQorfQorCisvKioKICAqIHRpb2NlX2tlcm5faW5pdCAtIGluaXQga2VybmVsIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBhIGdpdmVuIFRJT0NFCiAgKiBAdGlvY2VfY29tbW9uOiBwdHIgdG8gYSBjYWNoZWQgdGlvY2VfY29tbW9uIHN0cnVjdCB0aGF0IG9yaWdpbmF0ZWQgaW4gcHJvbQotICovIHN0YXRpYyBzdHJ1Y3QgdGlvY2Vfa2VybmVsICoKKyAqLworc3RhdGljIHN0cnVjdCB0aW9jZV9rZXJuZWwgKgogdGlvY2Vfa2Vybl9pbml0KHN0cnVjdCB0aW9jZV9jb21tb24gKnRpb2NlX2NvbW1vbikKIHsKIAlpbnQgaTsKKwlpbnQgcHM7CisJaW50IGRldjsKIAl1MzIgdG1wOworCXVuc2lnbmVkIGludCBzZWcsIGJ1czsKIAlzdHJ1Y3QgdGlvY2UgKnRpb2NlX21tcjsKIAlzdHJ1Y3QgdGlvY2Vfa2VybmVsICp0aW9jZV9rZXJuOwogCkBAIC01NzIsOSArNzM2LDEwIEBACiAJICogaGVyZSB0byB1c2UgcGNpX3JlYWRfY29uZmlnX3h4eCgpIHNvIHVzZSB0aGUgcmF3X3BjaV9vcHMgdmVjdG9yLgogCSAqLwogCi0JcmF3X3BjaV9vcHMtPnJlYWQodGlvY2VfY29tbW9uLT5jZV9wY2lidXMuYnNfcGVyc2lzdF9zZWdtZW50LAotCQkJICB0aW9jZV9jb21tb24tPmNlX3BjaWJ1cy5ic19wZXJzaXN0X2J1c251bSwKLQkJCSAgUENJX0RFVkZOKDIsIDApLCBQQ0lfU0VDT05EQVJZX0JVUywgMSwgJnRtcCk7CisJc2VnID0gdGlvY2VfY29tbW9uLT5jZV9wY2lidXMuYnNfcGVyc2lzdF9zZWdtZW50OworCWJ1cyA9IHRpb2NlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX3BlcnNpc3RfYnVzbnVtOworCisJcmF3X3BjaV9vcHMtPnJlYWQoc2VnLCBidXMsIFBDSV9ERVZGTigyLCAwKSwgUENJX1NFQ09OREFSWV9CVVMsIDEsJnRtcCk7CiAJdGlvY2Vfa2Vybi0+Y2VfcG9ydDFfc2Vjb25kYXJ5ID0gKHU4KSB0bXA7CiAKIAkvKgpAQCAtNTgzLDE4ICs3NDgsNzYgQEAKIAkgKi8KIAogCXRpb2NlX21tciA9IChzdHJ1Y3QgdGlvY2UgKil0aW9jZV9jb21tb24tPmNlX3BjaWJ1cy5ic19iYXNlOwotCV9fc25fY2xycV9yZWxheGVkKCZ0aW9jZV9tbXItPmNlX3VyZV9wYWdlX21hcCwgQ0VfVVJFX1BBR0VTSVpFX01BU0spOwotCV9fc25fc2V0cV9yZWxheGVkKCZ0aW9jZV9tbXItPmNlX3VyZV9wYWdlX21hcCwgQ0VfVVJFXzI1NktfUEFHRVNJWkUpOwotCXRpb2NlX2tlcm4tPmNlX2F0ZTMyNDBfcGFnZXNpemUgPSBLQigyNTYpOworCXRpb2NlX21tcl9jbHJpKHRpb2NlX2tlcm4sICZ0aW9jZV9tbXItPmNlX3VyZV9wYWdlX21hcCwKKwkJICAgICAgIENFX1VSRV9QQUdFU0laRV9NQVNLKTsKKwl0aW9jZV9tbXJfc2V0aSh0aW9jZV9rZXJuLCAmdGlvY2VfbW1yLT5jZV91cmVfcGFnZV9tYXAsCisJCSAgICAgICBDRV9VUkVfMjU2S19QQUdFU0laRSk7CisJcHMgPSB0aW9jZV9rZXJuLT5jZV9hdGUzMjQwX3BhZ2VzaXplID0gS0IoMjU2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBUSU9DRV9OVU1fTTQwX0FURVM7IGkrKykgewogCQl0aW9jZV9rZXJuLT5jZV9hdGU0MF9zaGFkb3dbaV0gPSAwOwotCQl3cml0ZXEoMCwgJnRpb2NlX21tci0+Y2VfdXJlX2F0ZTQwW2ldKTsKKwkJdGlvY2VfbW1yX3N0b3JlaSh0aW9jZV9rZXJuLCAmdGlvY2VfbW1yLT5jZV91cmVfYXRlNDBbaV0sIDApOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBUSU9DRV9OVU1fTTMyNDBfQVRFUzsgaSsrKSB7CiAJCXRpb2NlX2tlcm4tPmNlX2F0ZTMyNDBfc2hhZG93W2ldID0gMDsKLQkJd3JpdGVxKDAsICZ0aW9jZV9tbXItPmNlX3VyZV9hdGUzMjQwW2ldKTsKKwkJdGlvY2VfbW1yX3N0b3JlaSh0aW9jZV9rZXJuLCAmdGlvY2VfbW1yLT5jZV91cmVfYXRlMzI0MFtpXSwgMCk7CisJfQorCisJLyoKKwkgKiBSZXNlcnZlIEFURSdzIGNvcnJlc3BvbmRpbmcgdG8gcmVzZXJ2ZWQgYWRkcmVzcyByYW5nZXMuICBUaGVzZQorCSAqIGluY2x1ZGU6CisJICoKKwkgKglNZW1vcnkgc3BhY2UgY292ZXJlZCBieSBlYWNoIFBQQiBtZW0gYmFzZS9saW1pdCByZWdpc3RlcgorCSAqIAlNZW1vcnkgc3BhY2UgY292ZXJlZCBieSBlYWNoIFBQQiBwcmVmZXRjaCBiYXNlL2xpbWl0IHJlZ2lzdGVyCisJICoKKwkgKiBUaGVzZSBidXMgcmFuZ2VzIGFyZSBmb3IgcGlvIChkb3duc3RyZWFtKSB0cmFmZmljIG9ubHksIGFuZCBzbworCSAqIGNhbm5vdCBiZSB1c2VkIGZvciBETUEuCisJICovCisKKwlmb3IgKGRldiA9IDE7IGRldiA8PSAyOyBkZXYrKykgeworCQl1NjQgYmFzZSwgbGltaXQ7CisKKwkJLyogbWVtIGJhc2UvbGltaXQgKi8KKworCQlyYXdfcGNpX29wcy0+cmVhZChzZWcsIGJ1cywgUENJX0RFVkZOKGRldiwgMCksCisJCQkJICBQQ0lfTUVNT1JZX0JBU0UsIDIsICZ0bXApOworCQliYXNlID0gKHU2NCl0bXAgPDwgMTY7CisKKwkJcmF3X3BjaV9vcHMtPnJlYWQoc2VnLCBidXMsIFBDSV9ERVZGTihkZXYsIDApLAorCQkJCSAgUENJX01FTU9SWV9MSU1JVCwgMiwgJnRtcCk7CisJCWxpbWl0ID0gKHU2NCl0bXAgPDwgMTY7CisJCWxpbWl0IHw9IDB4ZmZmZmZVTDsKKworCQlpZiAoYmFzZSA8IGxpbWl0KQorCQkJdGlvY2VfcmVzZXJ2ZV9tMzIodGlvY2Vfa2VybiwgYmFzZSwgbGltaXQpOworCisJCS8qCisJCSAqIHByZWZldGNoIG1lbSBiYXNlL2xpbWl0LiAgVGhlIHRpb2NlIHBwYidzIGhhdmUgNjQtYml0CisJCSAqIGRlY29kZXJzLCBzbyByZWFkIHRoZSB1cHBlciBwb3J0aW9ucyB3L28gY2hlY2tpbmcgdGhlCisJCSAqIGF0dHJpYnV0ZXMuCisJCSAqLworCisJCXJhd19wY2lfb3BzLT5yZWFkKHNlZywgYnVzLCBQQ0lfREVWRk4oZGV2LCAwKSwKKwkJCQkgIFBDSV9QUkVGX01FTU9SWV9CQVNFLCAyLCAmdG1wKTsKKwkJYmFzZSA9ICgodTY0KXRtcCAmIFBDSV9QUkVGX1JBTkdFX01BU0spIDw8IDE2OworCisJCXJhd19wY2lfb3BzLT5yZWFkKHNlZywgYnVzLCBQQ0lfREVWRk4oZGV2LCAwKSwKKwkJCQkgIFBDSV9QUkVGX0JBU0VfVVBQRVIzMiwgNCwgJnRtcCk7CisJCWJhc2UgfD0gKHU2NCl0bXAgPDwgMzI7CisKKwkJcmF3X3BjaV9vcHMtPnJlYWQoc2VnLCBidXMsIFBDSV9ERVZGTihkZXYsIDApLAorCQkJCSAgUENJX1BSRUZfTUVNT1JZX0xJTUlULCAyLCAmdG1wKTsKKworCQlsaW1pdCA9ICgodTY0KXRtcCAmIFBDSV9QUkVGX1JBTkdFX01BU0spIDw8IDE2OworCQlsaW1pdCB8PSAweGZmZmZmVUw7CisKKwkJcmF3X3BjaV9vcHMtPnJlYWQoc2VnLCBidXMsIFBDSV9ERVZGTihkZXYsIDApLAorCQkJCSAgUENJX1BSRUZfTElNSVRfVVBQRVIzMiwgNCwgJnRtcCk7CisJCWxpbWl0IHw9ICh1NjQpdG1wIDw8IDMyOworCisJCWlmICgoYmFzZSA8IGxpbWl0KSAmJiBUSU9DRV9NMzJfQUREUihiYXNlKSkKKwkJCXRpb2NlX3Jlc2VydmVfbTMyKHRpb2NlX2tlcm4sIGJhc2UsIGxpbWl0KTsKIAl9CiAKIAlyZXR1cm4gdGlvY2Vfa2VybjsKQEAgLTYxNCw2ICs4MzcsNyBAQAogewogCXN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm87CiAJc3RydWN0IHRpb2NlX2NvbW1vbiAqY2VfY29tbW9uOworCXN0cnVjdCB0aW9jZV9rZXJuZWwgKmNlX2tlcm47CiAJc3RydWN0IHRpb2NlICpjZV9tbXI7CiAJdTY0IGZvcmNlX2ludF92YWw7CiAKQEAgLTYyOSw2ICs4NTMsMjkgQEAKIAogCWNlX2NvbW1vbiA9IChzdHJ1Y3QgdGlvY2VfY29tbW9uICopcGNpZGV2X2luZm8tPnBkaV9wY2lidXNfaW5mbzsKIAljZV9tbXIgPSAoc3RydWN0IHRpb2NlICopY2VfY29tbW9uLT5jZV9wY2lidXMuYnNfYmFzZTsKKwljZV9rZXJuID0gKHN0cnVjdCB0aW9jZV9rZXJuZWwgKiljZV9jb21tb24tPmNlX2tlcm5lbF9wcml2YXRlOworCisJLyoKKwkgKiBUSU9DRSBSZXYgQSB3b3JrYXJvdW5kIChQViA5NDU4MjYpLCBmb3JjZSBhbiBpbnRlcnJ1cHQgYnkgd3JpdGluZworCSAqIHRoZSBUSU9fSU5UeCByZWdpc3RlciBkaXJlY3RseSAoMS8yNi8yMDA2KQorCSAqLworCWlmIChjZV9jb21tb24tPmNlX3JldiA9PSBUSU9DRV9SRVZfQSkgeworCQl1NjQgaW50X2JpdF9tYXNrID0gKDFVTEwgPDwgc25faXJxX2luZm8tPmlycV9pbnRfYml0KTsKKwkJdTY0IHN0YXR1czsKKworCQl0aW9jZV9tbXJfbG9hZChjZV9rZXJuLCAmY2VfbW1yLT5jZV9hZG1faW50X3N0YXR1cywgJnN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBpbnRfYml0X21hc2spIHsKKwkJCXU2NCBmb3JjZV9pcnEgPSAoMSA8PCA4KSB8IHNuX2lycV9pbmZvLT5pcnFfaXJxOworCQkJdTY0IGN0YWxrID0gc25faXJxX2luZm8tPmlycV94dGFsa2FkZHI7CisJCQl1NjQgbmFzaWQsIG9mZnNldDsKKworCQkJbmFzaWQgPSAoY3RhbGsgJiBDVEFMS19OQVNJRF9NQVNLKSA+PiBDVEFMS19OQVNJRF9TSEZUOworCQkJb2Zmc2V0ID0gKGN0YWxrICYgQ1RBTEtfTk9ERV9PRkZTRVQpOworCQkJSFVCX1MoVElPX0lPU1BBQ0VfQUREUihuYXNpZCwgb2Zmc2V0KSwgZm9yY2VfaXJxKTsKKwkJfQorCisJCXJldHVybjsKKwl9CiAKIAkvKgogCSAqIGlycV9pbnRfYml0IGlzIG9yaWdpbmFsbHkgc2V0IHVwIGJ5IHByb20sIGFuZCBob2xkcyB0aGUgaW50ZXJydXB0CkBAIC02NjYsNyArOTEzLDcgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQotCXdyaXRlcShmb3JjZV9pbnRfdmFsLCAmY2VfbW1yLT5jZV9hZG1fZm9yY2VfaW50KTsKKwl0aW9jZV9tbXJfc3RvcmVpKGNlX2tlcm4sICZjZV9tbXItPmNlX2FkbV9mb3JjZV9pbnQsIGZvcmNlX2ludF92YWwpOwogfQogCiAvKioKQEAgLTY4NSw2ICs5MzIsNyBAQAogewogCXN0cnVjdCBwY2lkZXZfaW5mbyAqcGNpZGV2X2luZm87CiAJc3RydWN0IHRpb2NlX2NvbW1vbiAqY2VfY29tbW9uOworCXN0cnVjdCB0aW9jZV9rZXJuZWwgKmNlX2tlcm47CiAJc3RydWN0IHRpb2NlICpjZV9tbXI7CiAJaW50IGJpdDsKIAl1NjQgdmVjdG9yOwpAQCAtNjk1LDE0ICs5NDMsMTUgQEAKIAogCWNlX2NvbW1vbiA9IChzdHJ1Y3QgdGlvY2VfY29tbW9uICopcGNpZGV2X2luZm8tPnBkaV9wY2lidXNfaW5mbzsKIAljZV9tbXIgPSAoc3RydWN0IHRpb2NlICopY2VfY29tbW9uLT5jZV9wY2lidXMuYnNfYmFzZTsKKwljZV9rZXJuID0gKHN0cnVjdCB0aW9jZV9rZXJuZWwgKiljZV9jb21tb24tPmNlX2tlcm5lbF9wcml2YXRlOwogCiAJYml0ID0gc25faXJxX2luZm8tPmlycV9pbnRfYml0OwogCi0JX19zbl9zZXRxX3JlbGF4ZWQoJmNlX21tci0+Y2VfYWRtX2ludF9tYXNrLCAoMVVMIDw8IGJpdCkpOworCXRpb2NlX21tcl9zZXRpKGNlX2tlcm4sICZjZV9tbXItPmNlX2FkbV9pbnRfbWFzaywgKDFVTCA8PCBiaXQpKTsKIAl2ZWN0b3IgPSAodTY0KXNuX2lycV9pbmZvLT5pcnFfaXJxIDw8IElOVFJfVkVDVE9SX1NIRlQ7CiAJdmVjdG9yIHw9IHNuX2lycV9pbmZvLT5pcnFfeHRhbGthZGRyOwotCXdyaXRlcSh2ZWN0b3IsICZjZV9tbXItPmNlX2FkbV9pbnRfZGVzdFtiaXRdKTsKLQlfX3NuX2NscnFfcmVsYXhlZCgmY2VfbW1yLT5jZV9hZG1faW50X21hc2ssICgxVUwgPDwgYml0KSk7CisJdGlvY2VfbW1yX3N0b3JlaShjZV9rZXJuLCAmY2VfbW1yLT5jZV9hZG1faW50X2Rlc3RbYml0XSwgdmVjdG9yKTsKKwl0aW9jZV9tbXJfY2xyaShjZV9rZXJuLCAmY2VfbW1yLT5jZV9hZG1faW50X21hc2ssICgxVUwgPDwgYml0KSk7CiAKIAl0aW9jZV9mb3JjZV9pbnRlcnJ1cHQoc25faXJxX2luZm8pOwogfQpAQCAtNzIxLDcgKzk3MCwxMSBAQAogc3RhdGljIHZvaWQgKgogdGlvY2VfYnVzX2ZpeHVwKHN0cnVjdCBwY2lidXNfYnVzc29mdCAqcHJvbV9idXNzb2Z0LCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIpCiB7CisJaW50IG15X25hc2lkOworCWNub2RlaWRfdCBteV9jbm9kZSwgbWVtX2Nub2RlOwogCXN0cnVjdCB0aW9jZV9jb21tb24gKnRpb2NlX2NvbW1vbjsKKwlzdHJ1Y3QgdGlvY2Vfa2VybmVsICp0aW9jZV9rZXJuOworCXN0cnVjdCB0aW9jZSAqdGlvY2VfbW1yOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBrZXJuZWwgYnVzIHNvZnQgYW5kIGNvcHkgZnJvbSBwcm9tLgpAQCAtNzM0LDExICs5ODcsMjMgQEAKIAltZW1jcHkodGlvY2VfY29tbW9uLCBwcm9tX2J1c3NvZnQsIHNpemVvZihzdHJ1Y3QgdGlvY2VfY29tbW9uKSk7CiAJdGlvY2VfY29tbW9uLT5jZV9wY2lidXMuYnNfYmFzZSB8PSBfX0lBNjRfVU5DQUNIRURfT0ZGU0VUOwogCi0JaWYgKHRpb2NlX2tlcm5faW5pdCh0aW9jZV9jb21tb24pID09IE5VTEwpIHsKKwl0aW9jZV9rZXJuID0gdGlvY2Vfa2Vybl9pbml0KHRpb2NlX2NvbW1vbik7CisJaWYgKHRpb2NlX2tlcm4gPT0gTlVMTCkgewogCQlrZnJlZSh0aW9jZV9jb21tb24pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKgorCSAqIENsZWFyIG91dCBhbnkgdHJhbnNpZW50IGVycm9ycyBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIGVycm9yCisJICogaW50ZXJydXB0IGhhbmRsZXIuCisJICovCisKKwl0aW9jZV9tbXIgPSAoc3RydWN0IHRpb2NlICopdGlvY2VfY29tbW9uLT5jZV9wY2lidXMuYnNfYmFzZTsKKwl0aW9jZV9tbXJfc2V0aSh0aW9jZV9rZXJuLCAmdGlvY2VfbW1yLT5jZV9hZG1faW50X3N0YXR1c19hbGlhcywgfjBVTEwpOworCXRpb2NlX21tcl9zZXRpKHRpb2NlX2tlcm4sICZ0aW9jZV9tbXItPmNlX2FkbV9lcnJvcl9zdW1tYXJ5X2FsaWFzLAorCQkgICAgICAgfjBVTEwpOworCXRpb2NlX21tcl9zZXRpKHRpb2NlX2tlcm4sICZ0aW9jZV9tbXItPmNlX2RyZV9jb21wX2Vycl9hZGRyLCB+MFVMTCk7CisKIAlpZiAocmVxdWVzdF9pcnEoU0dJX1BDSUFTSUNfRVJST1IsCiAJCQl0aW9jZV9lcnJvcl9pbnRyX2hhbmRsZXIsCiAJCQlTQV9TSElSUSwgIlRJT0NFIGVycm9yIiwgKHZvaWQgKil0aW9jZV9jb21tb24pKQpAQCAtNzUwLDYgKzEwMTUsMjEgQEAKIAkJICAgICAgIHRpb2NlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX3BlcnNpc3Rfc2VnbWVudCwKIAkJICAgICAgIHRpb2NlX2NvbW1vbi0+Y2VfcGNpYnVzLmJzX3BlcnNpc3RfYnVzbnVtKTsKIAorCS8qCisJICogaWRlbnRpZnkgY2xvc2VzdCBuYXNpZCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zCisJICovCisKKwlteV9uYXNpZCA9IE5BU0lEX0dFVCh0aW9jZV9jb21tb24tPmNlX3BjaWJ1cy5ic19iYXNlKTsKKwlteV9jbm9kZSA9IG5hc2lkX3RvX2Nub2RlaWQobXlfbmFzaWQpOworCisJaWYgKHNuX2h3cGVyZl9nZXRfbmVhcmVzdF9ub2RlKG15X2Nub2RlLCAmbWVtX2Nub2RlLCBOVUxMKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidGlvY2VfYnVzX2ZpeHVwOiBmYWlsZWQgdG8gZmluZCAiCisJCSAgICAgICAiY2xvc2VzdCBub2RlIHdpdGggTUVNIHRvIFRJTyBub2RlICVkXG4iLCBteV9jbm9kZSk7CisJCW1lbV9jbm9kZSA9IChjbm9kZWlkX3QpLTE7IC8qIHVzZSBhbnkgbm9kZSAqLworCX0KKworCWNvbnRyb2xsZXItPm5vZGUgPSBtZW1fY25vZGU7CisKIAlyZXR1cm4gdGlvY2VfY29tbW9uOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvbTMyci9LY29uZmlnLmRlYnVnCmluZGV4IGJiZjcxMWIuLjJlMTAxOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvbTMyci9LY29uZmlnLmRlYnVnCkBAIC0xOSw3ICsxOSw3IEBACiAJICBUaGlzIG9wdGlvbiB3aWxsIHNsb3cgZG93biBwcm9jZXNzIGNyZWF0aW9uIHNvbWV3aGF0LgogCiBjb25maWcgREVCVUdfUEFHRUFMTE9DCi0JYm9vbCAiUGFnZSBhbGxvYyBkZWJ1Z2dpbmciCisJYm9vbCAiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgQlJPS0VOCiAJaGVscAogCSAgVW5tYXAgcGFnZXMgZnJvbSB0aGUga2VybmVsIGxpbmVhciBtYXBwaW5nIGFmdGVyIGZyZWVfcGFnZXMoKS4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9NYWtlZmlsZSBiL2FyY2gvbTMyci9NYWtlZmlsZQppbmRleCAyMjlmNjZmLi5mMjE5YzQ3IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvTWFrZWZpbGUKKysrIGIvYXJjaC9tMzJyL01ha2VmaWxlCkBAIC0xNSwxNCArMTUsMTQgQEAKIAogaWZkZWYgQ09ORklHX0NISVBfVkRFQzIKIGNmbGFncy0kKENPTkZJR19JU0FfTTMyUjIpCSs9IC1ETk9fRlBVIC1XYSwtYml0aW5zdAotYWZsYWdzLSQoQ09ORklHX0lTQV9NMzJSMikJKz0gLUROT19GUFUgLVdhLC1iaXRpbnN0CithZmxhZ3MtJChDT05GSUdfSVNBX00zMlIyKQkrPSAtRE5PX0ZQVSAtTzIgLVdhLC1iaXRpbnN0IC1XYSwtbm8tcGFyYWxsZWwKIGVsc2UKIGNmbGFncy0kKENPTkZJR19JU0FfTTMyUjIpCSs9IC1ETk9fRlBVIC1tMzJyMgotYWZsYWdzLSQoQ09ORklHX0lTQV9NMzJSMikJKz0gLUROT19GUFUgLW0zMnIyCithZmxhZ3MtJChDT05GSUdfSVNBX00zMlIyKQkrPSAtRE5PX0ZQVSAtbTMycjIgLU8yCiBlbmRpZgogCiBjZmxhZ3MtJChDT05GSUdfSVNBX00zMlIpCSs9IC1ETk9fRlBVCi1hZmxhZ3MtJChDT05GSUdfSVNBX00zMlIpCSs9IC1ETk9fRlBVIC1XYSwtbm8tYml0aW5zdAorYWZsYWdzLSQoQ09ORklHX0lTQV9NMzJSKQkrPSAtRE5PX0ZQVSAtTzIgLVdhLC1uby1iaXRpbnN0CiAKIENGTEFHUyArPSAkKGNmbGFncy15KQogQUZMQUdTICs9ICQoYWZsYWdzLXkpCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2lycS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYwppbmRleCAxY2U2MzkyLi5hNDYzNGIwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKQEAgLTM3LDkgKzM3LDggQEAKIAogCWlmIChpID09IDApIHsKIAkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKLQkJZm9yIChqPTA7IGo8TlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiAJfQogCkBAIC01Miw5ICs1MSw4IEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCi0JCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCi0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNzE3NjNmNy4uY2IzMzA5NyAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NpZ25hbC5jCkBAIC0zNiw3ICszNiw3IEBACiBhc21saW5rYWdlIGludAogc3lzX3J0X3NpZ3N1c3BlbmQoc2lnc2V0X3QgKnVuZXdzZXQsIHNpemVfdCBzaWdzZXRzaXplLAogCQkgIHVuc2lnbmVkIGxvbmcgcjIsIHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsCi0JCSAgdW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgbG9uZyByNiwgc3RydWN0IHB0X3JlZ3MgcmVncykKKwkJICB1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nIHI2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzaWdzZXRfdCBzYXZlc2V0LCBuZXdzZXQ7CiAKQEAgLTU0LDIxICs1NCwyMSBAQAogCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCXJlZ3MucjAgPSAtRUlOVFI7CisJcmVncy0+cjAgPSAtRUlOVFI7CiAJd2hpbGUgKDEpIHsKIAkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CiAJCXNjaGVkdWxlKCk7Ci0JCWlmIChkb19zaWduYWwoJnJlZ3MsICZzYXZlc2V0KSkKLQkJCXJldHVybiByZWdzLnIwOworCQlpZiAoZG9fc2lnbmFsKHJlZ3MsICZzYXZlc2V0KSkKKwkJCXJldHVybiByZWdzLT5yMDsKIAl9CiB9CiAKIGFzbWxpbmthZ2UgaW50CiBzeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCBfX3VzZXIgKnVzcywgc3RhY2tfdCBfX3VzZXIgKnVvc3MsCiAJCXVuc2lnbmVkIGxvbmcgcjIsIHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsCi0JCXVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgcjYsIHN0cnVjdCBwdF9yZWdzIHJlZ3MpCisJCXVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgcjYsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXJldHVybiBkb19zaWdhbHRzdGFjayh1c3MsIHVvc3MsIHJlZ3Muc3B1KTsKKwlyZXR1cm4gZG9fc2lnYWx0c3RhY2sodXNzLCB1b3NzLCByZWdzLT5zcHUpOwogfQogCiAKQEAgLTE0MCwxMSArMTQwLDEwIEBACiBhc21saW5rYWdlIGludAogc3lzX3J0X3NpZ3JldHVybih1bnNpZ25lZCBsb25nIHIwLCB1bnNpZ25lZCBsb25nIHIxLAogCQkgdW5zaWduZWQgbG9uZyByMiwgdW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwKLQkJIHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgcjYsIHN0cnVjdCBwdF9yZWdzIHJlZ3MpCisJCSB1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nIHI2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICpmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICopcmVncy5zcHU7CisJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWUgPSAoc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqKXJlZ3MtPnNwdTsKIAlzaWdzZXRfdCBzZXQ7Ci0Jc3RhY2tfdCBzdDsKIAlpbnQgcmVzdWx0OwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCkBAIC0xNTgsMTQgKzE1NywxMSBAQAogCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQoJnJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZyZXN1bHQpKQorCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT51Yy51Y19tY29udGV4dCwgJnJlc3VsdCkpCiAJCWdvdG8gYmFkZnJhbWU7CiAKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigmc3QsICZmcmFtZS0+dWMudWNfc3RhY2ssIHNpemVvZihzdCkpKQorCWlmIChkb19zaWdhbHRzdGFjaygmZnJhbWUtPnVjLnVjX3N0YWNrLCBOVUxMLCByZWdzLT5zcHUpID09IC1FRkFVTFQpCiAJCWdvdG8gYmFkZnJhbWU7Ci0JLyogSXQgaXMgbW9yZSBkaWZmaWN1bHQgdG8gYXZvaWQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRoYW4gdG8KLQkgICBjYWxsIGl0IGFuZCBpZ25vcmUgZXJyb3JzLiAgKi8KLQlkb19zaWdhbHRzdGFjaygmc3QsIE5VTEwsIHJlZ3Muc3B1KTsKIAogCXJldHVybiByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc3lzX20zMnIuYyBiL2FyY2gvbTMyci9rZXJuZWwvc3lzX20zMnIuYwppbmRleCBmZTU1YjI4Li42NzBjYjQ5IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3N5c19tMzJyLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zeXNfbTMyci5jCkBAIC0yOSwyOCArMjksNyBAQAogCiAvKgogICogc3lzX3RhcygpIC0gdGVzdC1hbmQtc2V0Ci0gKiBsaW51eHRocmVhZHMgdGVzdGluZyB2ZXJzaW9uCiAgKi8KLSNpZm5kZWYgQ09ORklHX1NNUAotYXNtbGlua2FnZSBpbnQgc3lzX3RhcyhpbnQgKmFkZHIpCi17Ci0JaW50IG9sZHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBhZGRyLCBzaXplb2YgKGludCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Jb2xkdmFsID0gKmFkZHI7Ci0JaWYgKCFvbGR2YWwpCi0JCSphZGRyID0gMTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIG9sZHZhbDsKLX0KLSNlbHNlIC8qIENPTkZJR19TTVAgKi8KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhc19sb2NrKTsKLQogYXNtbGlua2FnZSBpbnQgc3lzX3RhcyhpbnQgKmFkZHIpCiB7CiAJaW50IG9sZHZhbDsKQEAgLTU4LDE1ICszNyw0MyBAQAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYWRkciwgc2l6ZW9mIChpbnQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlfcmF3X3NwaW5fbG9jaygmdGFzX2xvY2spOwotCW9sZHZhbCA9ICphZGRyOwotCWlmICghb2xkdmFsKQotCQkqYWRkciA9IDE7Ci0JX3Jhd19zcGluX3VubG9jaygmdGFzX2xvY2spOworCS8qIGF0b21pYyBvcGVyYXRpb246CisJICogICBvbGR2YWwgPSAqYWRkcjsgKmFkZHIgPSAxOworCSAqLworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJRENBQ0hFX0NMRUFSKCIlMCIsICJyNCIsICIlMSIpCisJCSIJLmZpbGxpbnNuXG4iCisJCSIxOlxuIgorCQkiCWxvY2sJJTAsIEAlMQkgICAgLT4JdW5sb2NrCSUyLCBAJTFcbiIKKwkJIjI6XG4iCisJCS8qIE5PVEU6CisJCSAqICAgVGhlIG0zMnIgcHJvY2Vzc29yIGNhbiBhY2NlcHQgaW50ZXJydXB0cyBvbmx5CisJCSAqICAgYXQgdGhlIDMyLWJpdCBpbnN0cnVjdGlvbiBib3VuZGFyeS4KKwkJICogICBTbywgaW4gdGhlIGFib3ZlIGNvZGUsIHRoZSAidW5sb2NrIiBpbnN0cnVjdGlvbgorCQkgKiAgIGNhbiBiZSBleGVjdXRlZCBjb250aW51b3VzbHkgYWZ0ZXIgdGhlICJsb2NrIgorCQkgKiAgIGluc3RydWN0aW9uIGV4ZWN1dGlvbiB3aXRob3V0IGFueSBpbnRlcnJ1cHRpb25zLgorCQkgKi8KKwkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkJIgkuYmFsaWduIDRcbiIKKwkJIjM6CWxkaQklMCwgIyUzXG4iCisJCSIJc2V0aAlyMTQsICNoaWdoKDJiKVxuIgorCQkiCW9yMwlyMTQsIHIxNCwgI2xvdygyYilcbiIKKwkJIglqbXAJcjE0XG4iCisJCSIucHJldmlvdXNcbiIKKwkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJIgkuYmFsaWduIDRcbiIKKwkJIgkubG9uZyAxYiwzYlxuIgorCQkiLnByZXZpb3VzXG4iCisJCTogIj0mciIgKG9sZHZhbCkKKwkJOiAiciIgKGFkZHIpLCAiciIgKDEpLCAiaSIoLUVGQVVMVCkKKwkJOiAicjE0IiwgIm1lbW9yeSIKKyNpZmRlZiBDT05GSUdfQ0hJUF9NMzI3MDBfVFMxCisJCSAgLCAicjQiCisjZW5kaWYgLyogQ09ORklHX0NISVBfTTMyNzAwX1RTMSAqLworCSk7CiAKIAlyZXR1cm4gb2xkdmFsOwogfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogLyoKICAqIHN5c19waXBlKCkgaXMgdGhlIG5vcm1hbCBDIGNhbGxpbmcgc3RhbmRhcmQgZm9yIGNyZWF0aW5nCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbGliL3VzZXJjb3B5LmMgYi9hcmNoL20zMnIvbGliL3VzZXJjb3B5LmMKaW5kZXggY2UxNmJiZS4uMmQxZGQyMSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2xpYi91c2VyY29weS5jCisrKyBiL2FyY2gvbTMyci9saWIvdXNlcmNvcHkuYwpAQCAtNjQsNyArNjQsNyBAQAogCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAogCQkiCS5sb25nIDBiLDNiXG4iCQkJCQlcCiAJCSIucHJldmlvdXMiCQkJCQkJXAotCQk6ICI9ciIocmVzKSwgIj1yIihjb3VudCksICI9JnIiIChfX2QwKSwgIj0mciIgKF9fZDEpLAlcCisJCTogIj0mciIocmVzKSwgIj0mciIoY291bnQpLCAiPSZyIiAoX19kMCksICI9JnIiIChfX2QxKSwJXAogCQkgICI9JnIiIChfX2QyKQkJCQkJCVwKIAkJOiAiaSIoLUVGQVVMVCksICIwIihjb3VudCksICIxIihjb3VudCksICIzIihzcmMpLCAJXAogCQkgICI0Iihkc3QpCQkJCQkJXApAQCAtMTAxLDcgKzEwMSw3IEBACiAJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCiAJCSIJLmxvbmcgMGIsM2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91cyIJCQkJCQlcCi0JCTogIj1yIihyZXMpLCAiPXIiKGNvdW50KSwgIj0mciIgKF9fZDApLCAiPSZyIiAoX19kMSksCVwKKwkJOiAiPSZyIihyZXMpLCAiPSZyIihjb3VudCksICI9JnIiIChfX2QwKSwgIj0mciIgKF9fZDEpLAlcCiAJCSAgIj0mciIgKF9fZDIpCQkJCQkJXAogCQk6ICJpIigtRUZBVUxUKSwgIjAiKGNvdW50KSwgIjEiKGNvdW50KSwgIjMiKHNyYyksCVwKIAkJICAiNCIoZHN0KQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9pbml0LmMgYi9hcmNoL20zMnIvbW0vaW5pdC5jCmluZGV4IDZmYWNmMTUuLmM5ZTdkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9pbml0LmMKKysrIGIvYXJjaC9tMzJyL21tL2luaXQuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2JlZ2luKTsKIAlmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlmcmVlX3BhZ2UoYWRkcik7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJfQpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJdW5zaWduZWQgbG9uZyBwOwogCWZvciAocCA9IHN0YXJ0OyBwIDwgZW5kOyBwICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocCkpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UocCksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHApKTsKIAkJZnJlZV9wYWdlKHApOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYyBiL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYwppbmRleCA3MDNjYmM2Li4xNWMxNmI2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMKKysrIGIvYXJjaC9tNjhrL2J2bWU2MDAwL3J0Yy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4JLyogRm9yIHN0cnVjdCBydGNfdGltZSBhbmQgaW9jdGxzLCBldGMgKi8KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogI2luY2x1ZGUgPGFzbS9idm1lNjAwMGh3Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTMyLDkgKzMzLDYgQEAKICAqCWlvY3Rscy4KICAqLwogCi0jZGVmaW5lIEJDRDJCSU4odmFsKSAoKCh2YWwpJjE1KSArICgodmFsKT4+NCkqMTApCi0jZGVmaW5lIEJJTjJCQ0QodmFsKSAoKCgodmFsKS8xMCk8PDQpICsgKHZhbCklMTApCi0KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRheXNfaW5fbW9bXSA9CiB7MCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggM2Y5Y2I1NS4uMzM2NDhlZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTc3LDcgKzc3LDcgQEAKIC8qCiAgKiBUaGUgaWRsZSBsb29wIG9uIGFuIG02OGsuLgogICovCi12b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQorc3RhdGljIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7CiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKICNpZiBkZWZpbmVkKE1BQ0hfQVRBUklfT05MWSkgJiYgIWRlZmluZWQoQ09ORklHX0hBREVTKQpAQCAtMTI5LDYgKzEyOSw5IEBACiAJZm9yICg7Oyk7CiB9CiAKK3ZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpID0gbWFjaGluZV9wb3dlcl9vZmY7CitFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CisKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKIAlwcmludGsoIlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vaW5pdC5jIGIvYXJjaC9tNjhrL21tL2luaXQuYwppbmRleCBjNDViZWI5Li5hMTkwZTM5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vaW5pdC5jCisrKyBiL2FyY2gvbTY4ay9tbS9pbml0LmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCWludCBwYWdlcyA9IDA7CiAJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7CiAJCWZyZWVfcGFnZShzdGFydCk7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCXBhZ2VzKys7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vbWVtb3J5LmMgYi9hcmNoL202OGsvbW0vbWVtb3J5LmMKaW5kZXggNTU5OTQyYy4uZDZkNTgyYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21lbW9yeS5jCisrKyBiL2FyY2gvbTY4ay9tbS9tZW1vcnkuYwpAQCAtNTQsNyArNTQsNyBAQAogCiAJLyogdW5yZXNlcnZlIHRoZSBwYWdlIHNvIGl0J3MgcG9zc2libGUgdG8gZnJlZSB0aGF0IHBhZ2UgKi8KIAlQRF9QQUdFKGRwKS0+ZmxhZ3MgJj0gfigxIDw8IFBHX3Jlc2VydmVkKTsKLQlzZXRfcGFnZV9jb3VudChQRF9QQUdFKGRwKSwgMSk7CisJaW5pdF9wYWdlX2NvdW50KFBEX1BBR0UoZHApKTsKIAogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKaW5kZXggZDg1NWZlYy4uYWZiNTdlZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKKysrIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luOwogCWZvciAoOyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCXZpcnRfdG9fcGFnZShhZGRyKS0+ZmxhZ3MgJj0gfigxIDw8IFBHX3Jlc2VydmVkKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYwppbmRleCBlZGRiOGQzZS4uZDg0NGM3NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC0yNiw2ICsyNiw3IEBACiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwogRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7CiBFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOworRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKIEVYUE9SVF9TWU1CT0woc3RycmNocik7CiBFWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2M2MxMTdkLi5mODYxNzU1IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTUxLDcgKzUxLDcgQEAKIC8qCiAgKiBUaGUgaWRsZSBsb29wIG9uIGFuIG02OGtub21tdS4uCiAgKi8KLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCitzdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogIAl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGFjOWRlMjYuLmEzMzFjYzkwIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjY5LDYgKzI2OSwxMSBAQAogCQkqKF9fa3N5bXRhYl9ncGwpCiAJCV9fc3RvcF9fX2tzeW10YWJfZ3BsID0gLjsKIAorCQkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtZnV0dXJlIHN5bWJvbHMgKi8KKwkJX19zdGFydF9fX2tzeW10YWJfZ3BsX2Z1dHVyZSA9IC47CisJCSooX19rc3ltdGFiX2dwbF9mdXR1cmUpCisJCV9fc3RvcF9fX2tzeW10YWJfZ3BsX2Z1dHVyZSA9IC47CisKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHN5bWJvbHMgKi8KIAkJX19zdGFydF9fX2tjcmN0YWIgPSAuOwogCQkqKF9fa2NyY3RhYikKQEAgLTI3OSw2ICsyODQsMTEgQEAKIAkJKihfX2tjcmN0YWJfZ3BsKQogCQlfX3N0b3BfX19rY3JjdGFiX2dwbCA9IC47CiAKKwkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZSBzeW1ib2xzICovCisJCV9fc3RhcnRfX19rY3JjdGFiX2dwbF9mdXR1cmUgPSAuOworCQkqKF9fa2NyY3RhYl9ncGxfZnV0dXJlKQorCQlfX3N0b3BfX19rY3JjdGFiX2dwbF9mdXR1cmUgPSAuOworCiAJCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IHN0cmluZ3MgKi8KIAkJKihfX2tzeW10YWJfc3RyaW5ncykKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jIGIvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCmluZGV4IDg5ZjBiNTUuLmQ3OTUwM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L21tL2luaXQuYworKysgYi9hcmNoL202OGtub21tdS9tbS9pbml0LmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCWludCBwYWdlcyA9IDA7CiAJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7CiAJCWZyZWVfcGFnZShzdGFydCk7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCXBhZ2VzKys7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAkvKiBuZXh0IHRvIGNoZWNrIHRoYXQgdGhlIHBhZ2Ugd2UgZnJlZSBpcyBub3QgYSBwYXJ0aWFsIHBhZ2UgKi8KIAlmb3IgKDsgYWRkciArIFBBR0VfU0laRSA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz1QQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IDc2N2RlODQuLmFjMjAxMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC02MDIsNyArNjAyLDcgQEAKIAkgIElmIHlvdSB3YW50IHRoaXMga2VybmVsIHRvIHJ1biBvbiBTR0kgTzIgd29ya3N0YXRpb24sIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBTSUJZVEVfQklHU1VSCi0JYm9vbCAiU3VwcG9ydCBmb3IgU2lieXRlIEJpZ1N1ciIKKwlib29sICJTdXBwb3J0IGZvciBTaWJ5dGUgQkNNOTE0ODBCLUJpZ1N1ciIKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfQ09IRVJFTlQKIAlzZWxlY3QgUENJX0RPTUFJTlMKQEAgLTc5MCw2ICs3OTAsNyBAQAogc291cmNlICJhcmNoL21pcHMvdHg0OTM4L0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy92cjQxeHgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC9taXBzL2NvYmFsdC9LY29uZmlnIgogCiBlbmRtZW51CiAKQEAgLTEwNTMsNiArMTA1NCw3IEBACiAJZGVwZW5kcyBvbiBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IENQVV9TVVBQT1JUU19ISUdITUVNCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGJ1aWxkIGEga2VybmVsIGZvciByZWxlYXNlIDEgb3IgbGF0ZXIgb2YgdGhlCiAJICBNSVBTMzIgYXJjaGl0ZWN0dXJlLiAgTW9zdCBtb2Rlcm4gZW1iZWRkZWQgc3lzdGVtcyB3aXRoIGEgMzItYml0CkBAIC0xMDY5LDYgKzEwNzEsNyBAQAogCWRlcGVuZHMgb24gU1lTX0hBU19DUFVfTUlQUzMyX1IyCiAJc2VsZWN0IENQVV9IQVNfUFJFRkVUQ0gKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAorCXNlbGVjdCBDUFVfU1VQUE9SVFNfSElHSE1FTQogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlvbiB0byBidWlsZCBhIGtlcm5lbCBmb3IgcmVsZWFzZSAyIG9yIGxhdGVyIG9mIHRoZQogCSAgTUlQUzMyIGFyY2hpdGVjdHVyZS4gIE1vc3QgbW9kZXJuIGVtYmVkZGVkIHN5c3RlbXMgd2l0aCBhIDMyLWJpdApAQCAtMTA4Miw2ICsxMDg1LDcgQEAKIAlzZWxlY3QgQ1BVX0hBU19QUkVGRVRDSAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKKwlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gYnVpbGQgYSBrZXJuZWwgZm9yIHJlbGVhc2UgMSBvciBsYXRlciBvZiB0aGUKIAkgIE1JUFM2NCBhcmNoaXRlY3R1cmUuICBNYW55IG1vZGVybiBlbWJlZGRlZCBzeXN0ZW1zIHdpdGggYSA2NC1iaXQKQEAgLTEwOTksNiArMTEwMyw3IEBACiAJc2VsZWN0IENQVV9IQVNfUFJFRkVUQ0gKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBDUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCisJc2VsZWN0IENQVV9TVVBQT1JUU19ISUdITUVNCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIGJ1aWxkIGEga2VybmVsIGZvciByZWxlYXNlIDIgb3IgbGF0ZXIgb2YgdGhlCiAJICBNSVBTNjQgYXJjaGl0ZWN0dXJlLiAgTWFueSBtb2Rlcm4gZW1iZWRkZWQgc3lzdGVtcyB3aXRoIGEgNjQtYml0CkBAIC0xMTU1LDYgKzExNjAsNyBAQAogY29uZmlnIENQVV9UWDQ5WFgKIAlib29sICJSNDlYWCIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1RYNDlYWAorCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCkBAIC0xNTc3LDcgKzE1ODMsNyBAQAogCiBjb25maWcgU01QCiAJYm9vbCAiTXVsdGktUHJvY2Vzc2luZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1JNOTAwMCB8fCAoKFNJQllURV9CQ00xeDgwIHx8IFNJQllURV9CQ00xeDU1IHx8IFNJQllURV9TQjEyNTApICYmICFTSUJZVEVfU1RBTkRBTE9ORSkgfHwgU0dJX0lQMjcgfHwgTUlQU19NVF9TTVAKKwlkZXBlbmRzIG9uIENQVV9STTkwMDAgfHwgKChTSUJZVEVfQkNNMXg4MCB8fCBTSUJZVEVfQkNNMXg1NSB8fCBTSUJZVEVfU0IxMjUwIHx8IFFFTVUpICYmICFTSUJZVEVfU1RBTkRBTE9ORSkgfHwgU0dJX0lQMjcgfHwgTUlQU19NVF9TTVAKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQogCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDM4YzBmMzM2Li45YTY5ZTBmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL01ha2VmaWxlCkBAIC0xMiwxMCArMTIsNiBAQAogIyBmb3IgImFyY2hjbGVhbiIgY2xlYW5pbmcgdXAgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLgogIwogCi1hcy1vcHRpb24gPSAkKHNoZWxsIGlmICQoQ0MpICQoQ0ZMQUdTKSAkKDEpIC1XYSwtWiAtYyAtbyAvZGV2L251bGwgXAotCSAgICAgLXhhc3NlbWJsZXIgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4gZWNobyAiJCgxKSI7IFwKLQkgICAgIGVsc2UgZWNobyAiJCgyKSI7IGZpIDspCi0KIGNmbGFncy15IDo9CiAKICMKQEAgLTM4LDEyICszNCwxMCBAQAogZW5kaWYKIAogaWZkZWYgQ09ORklHXzMyQklUCi1nY2MtYWJpCQkJPSAzMgogdG9vbC1wcmVmaXgJCT0gJCgzMmJpdC10b29sLXByZWZpeCkKIFVUU19NQUNISU5FCQk6PSBtaXBzCiBlbmRpZgogaWZkZWYgQ09ORklHXzY0QklUCi1nY2MtYWJpCQkJPSA2NAogdG9vbC1wcmVmaXgJCT0gJCg2NGJpdC10b29sLXByZWZpeCkKIFVUU19NQUNISU5FCQk6PSBtaXBzNjQKIGVuZGlmCkBAIC01MiwzOCArNDYsMjggQEAKIENST1NTX0NPTVBJTEUJCTo9ICQodG9vbC1wcmVmaXgpCiBlbmRpZgogCi1DSEVDS0ZMQUdTLXkJCQkJKz0gLURfX2xpbnV4X18gLURfX21pcHNfXyBcCi0JCQkJCSAgIC1EX01JUFNfU1pJTlQ9MzIgXAotCQkJCQkgICAtRF9BQklPMzI9MSBcCi0JCQkJCSAgIC1EX0FCSU4zMj0yIFwKLQkJCQkJICAgLURfQUJJNjQ9MwotQ0hFQ0tGTEFHUy0kKENPTkZJR18zMkJJVCkJCSs9IC1EX01JUFNfU0lNPV9BQklPMzIgXAotCQkJCQkgICAtRF9NSVBTX1NaTE9ORz0zMiBcCi0JCQkJCSAgIC1EX01JUFNfU1pQVFI9MzIgXAotCQkJCQkgICAtRF9fUFRSRElGRl9UWVBFX189aW50Ci1DSEVDS0ZMQUdTLSQoQ09ORklHXzY0QklUKQkJKz0gLW02NCAtRF9NSVBTX1NJTT1fQUJJNjQgXAotCQkJCQkgICAtRF9NSVBTX1NaTE9ORz02NCBcCi0JCQkJCSAgIC1EX01JUFNfU1pQVFI9NjQgXAotCQkJCQkgICAtRF9fUFRSRElGRl9UWVBFX189ImxvbmcgaW50IgotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfQklHX0VORElBTikJKz0gLURfX01JUFNFQl9fCi1DSEVDS0ZMQUdTLSQoQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOKQkrPSAtRF9fTUlQU0VMX18KLQotQ0hFQ0tGTEFHUwkJCQk9ICQoQ0hFQ0tGTEFHUy15KQotCi1pZmRlZiBDT05GSUdfQlVJTERfRUxGNjQKLWdhcy1hYmkJCQk9IDY0Ci1sZC1lbXVsCQkJPSAkKDY0Yml0LWVtdWwpCi12bWxpbnV4LTMyCQk9IHZtbGludXguMzIKLXZtbGludXgtNjQJCT0gdm1saW51eAotZWxzZQotZ2FzLWFiaQkJCT0gMzIKK2lmZGVmIENPTkZJR18zMkJJVAogbGQtZW11bAkJCT0gJCgzMmJpdC1lbXVsKQogdm1saW51eC0zMgkJPSB2bWxpbnV4CiB2bWxpbnV4LTY0CQk9IHZtbGludXguNjQKIAotY2ZsYWdzLSQoQ09ORklHXzY0QklUKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tZXhwbGljaXQtcmVsb2NzKQorY2ZsYWdzLXkJCSs9IC1tYWJpPTMyCiBlbmRpZgogCitpZmRlZiBDT05GSUdfNjRCSVQKK2xkLWVtdWwJCQk9ICQoNjRiaXQtZW11bCkKK3ZtbGludXgtMzIJCT0gdm1saW51eC4zMgordm1saW51eC02NAkJPSB2bWxpbnV4CisKK2NmbGFncy15CQkrPSAtbWFiaT02NAoraWZkZWYgQ09ORklHX0JVSUxEX0VMRjY0CitjZmxhZ3MteQkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbW5vLWV4cGxpY2l0LXJlbG9jcykKK2Vsc2UKK2NmbGFncy15CQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tc3ltMzIpCitlbmRpZgorZW5kaWYKKworCiAjCiAjIEdDQyB1c2VzIC1HIDAgLW1hYmljYWxscyAtZnBpYyBhcyBkZWZhdWx0LiAgV2UgZG9uJ3Qgd2FudCBQSUMgaW4gdGhlIGtlcm5lbAogIyBjb2RlIHNpbmNlIGl0IG9ubHkgc2xvd3MgZG93biB0aGUgd2hvbGUgdGhpbmcuICBBdCBzb21lIHBvaW50IHdlIG1pZ2h0IG1ha2UKQEAgLTk1LDYgKzc5LDcgQEAKICMgY3Jvc3Nmb3JtYXQgbGlua2luZyB3ZSByZWx5IG9uIHRoZSBlbGYyZWNvZmYgdG9vbCBmb3IgZm9ybWF0IGNvbnZlcnNpb24uCiAjCiBjZmxhZ3MteQkJCSs9IC1HIDAgLW1uby1hYmljYWxscyAtZm5vLXBpYyAtcGlwZQorY2ZsYWdzLXkJCQkrPSAtbXNvZnQtZmxvYXQKIExERkxBR1Nfdm1saW51eAkJCSs9IC1HIDAgLXN0YXRpYyAtbiAtbm9zdGRsaWIKIE1PREZMQUdTCQkJKz0gLW1sb25nLWNhbGxzCiAKQEAgLTEwNCwxNjEgKzg5LDQ0IEBACiAjIGNhcmVmdWxseSBhdm9pZCB0byBhZGQgaXQgcmVkdW5kYW50bHkgYmVjYXVzZSBnY2MgMy4zLzMuNCBjb21wbGFpbnMKICMgd2hlbiBmZWQgdGhlIHRvb2xjaGFpbiBkZWZhdWx0IQogIwotY2ZsYWdzLSQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKQkJKz0gJChzaGVsbCAkKENDKSAtZHVtcG1hY2hpbmUgfGdyZXAgLXEgJ21pcHMuKmVsLS4qJyAmJiBlY2hvIC1FQikKLWNmbGFncy0kKENPTkZJR19DUFVfTElUVExFX0VORElBTikJKz0gJChzaGVsbCAkKENDKSAtZHVtcG1hY2hpbmUgfGdyZXAgLXEgJ21pcHMuKmVsLS4qJyB8fCBlY2hvIC1FTCkKK2NmbGFncy0kKENPTkZJR19DUFVfQklHX0VORElBTikJCSs9ICQoc2hlbGwgJChDQykgLWR1bXBtYWNoaW5lIHxncmVwIC1xICdtaXBzLiplbC0uKicgJiYgZWNobyAtRUIgLURfX01JUFNFQl9fKQorY2ZsYWdzLSQoQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOKQkrPSAkKHNoZWxsICQoQ0MpIC1kdW1wbWFjaGluZSB8Z3JlcCAtcSAnbWlwcy4qZWwtLionIHx8IGVjaG8gLUVMIC1EX19NSVBTRUxfXykKIAotY2ZsYWdzLSQoQ09ORklHX1NCMVhYWF9DT1JFTElTKQkrPSAtbW5vLXNjaGVkLXByb2xvZyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgotCi0jCi0jIFVzZTogJChjYWxsIHNldF9nY2NmbGFncyw8Y3B1MD4sPGlzYTA+LDxjcHUxPiw8aXNhMT4sPGlzYTI+KQotIwotIyA8Y3B1MD4sPGlzYTA+IC0tIHByZWZlcnJlZCBDUFUgYW5kIElTQSBkZXNpZ25hdGlvbnMgKG1heSByZXF1aXJlCi0jICAgICAgICAgICAgICAgICAgcmVjZW50IHRvb2xzKQotIyA8Y3B1MT4sPGlzYTE+IC0tIGZhbGxiYWNrIENQVSBhbmQgSVNBIGRlc2lnbmF0aW9ucyAoaGF2ZSB0byB3b3JrCi0jICAgICAgICAgICAgICAgICAgd2l0aCB1cCB0byB0aGUgb2xkZXN0IHN1cHBvcnRlZCB0b29scykKLSMgPGlzYTI+ICAgICAgICAtLSBhbiBJU0EgZGVzaWduYXRpb24gdXNlZCBhcyBhbiBBQkkgc2VsZWN0b3IgZm9yCi0jICAgICAgICAgICAgICAgICAgZ2NjIHZlcnNpb25zIHRoYXQgZG8gbm90IHN1cHBvcnQgIi1tYWJpPTMyIgotIyAgICAgICAgICAgICAgICAgIChkZXBlbmRpbmcgb24gdGhlIENQVSB0eXBlLCBlaXRoZXIgIm1pcHMxIiBvcgotIyAgICAgICAgICAgICAgICAgICJtaXBzMiIpCi0jCi1zZXRfZ2NjZmxhZ3MgPSAkKHNoZWxsIFwKLXdoaWxlIDo7IGRvIFwKLQljcHU9JCgxKTsgaXNhPS0kKDIpOyBcCi0JZm9yIGdjY19vcHQgaW4gLW1hcmNoPSAtbWNwdT07IGRvIFwKLQkJJChDQykgJCRnY2Nfb3B0JCRjcHUgJCRpc2EgLVMgLW8gL2Rldi9udWxsIFwKLQkJCS14YyAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMSAmJiBcCi0JCQlicmVhayAyOyBcCi0JZG9uZTsgXAotCWNwdT0kKDMpOyBpc2E9LSQoNCk7IFwKLQlmb3IgZ2NjX29wdCBpbiAtbWFyY2g9IC1tY3B1PTsgZG8gXAotCQkkKENDKSAkJGdjY19vcHQkJGNwdSAkJGlzYSAtUyAtbyAvZGV2L251bGwgXAotCQkJLXhjIC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxICYmIFwKLQkJCWJyZWFrIDI7IFwKLQlkb25lOyBcCi0JYnJlYWs7IFwKLWRvbmU7IFwKLWdjY19hYmk9LW1hYmk9JChnY2MtYWJpKTsgZ2NjX2NwdT0kJGNwdTsgXAotaWYgJChDQykgJCRnY2NfYWJpIC1TIC1vIC9kZXYvbnVsbCAteGMgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCWdjY19pc2E9JCRpc2E7IFwKLWVsc2UgXAotCWdjY19hYmk9OyBnY2NfaXNhPS0kKDUpOyBcCi1maTsgXAotZ2FzX2FiaT0tV2EsLSQoZ2NjLWFiaSk7IGdhc19jcHU9JCRjcHU7IGdhc19pc2E9LVdhLCQkaXNhOyBcCi13aGlsZSA6OyBkbyBcCi0JZm9yIGdhc19vcHQgaW4gLVdhLC1tYXJjaD0gLVdhLC1tY3B1PTsgZG8gXAotCQkkKENDKSAkJGdhc19hYmkgJCRnYXNfb3B0JCRjcHUgJCRnYXNfaXNhIC1XYSwtWiAtYyBcCi0JCQktbyAvZGV2L251bGwgLXhhc3NlbWJsZXIgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjEgJiYgXAotCQkJYnJlYWsgMjsgXAotCWRvbmU7IFwKLQlnYXNfYWJpPTsgZ2FzX29wdD07IGdhc19jcHU9OyBnYXNfaXNhPTsgXAotCWJyZWFrOyBcCi1kb25lOyBcCi1pZiB0ZXN0ICIkKGdjYy1hYmkpIiAhPSAiJChnYXMtYWJpKSI7IHRoZW4gXAotCWdhc19hYmk9Ii1XYSwtJChnYXMtYWJpKSAtV2EsLW1ncCQoZ2NjLWFiaSkiOyBcCi1maTsgXAotaWYgdGVzdCAiJCRnY2Nfb3B0IiA9IC1tYXJjaD0gJiYgdGVzdCAtbiAiJCRnY2NfYWJpIjsgdGhlbiBcCi0JJChDQykgJCRnY2NfYWJpICQkZ2NjX29wdCQkZ2NjX2NwdSAtUyAtbyAvZGV2L251bGwgXAotCQkteGMgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjEgJiYgXAotCQlnY2NfaXNhPTsgXAotZmk7IFwKLWVjaG8gJCRnY2NfYWJpICQkZ2NjX29wdCQkZ2NjX2NwdSAkJGdjY19pc2EgJCRnYXNfYWJpICQkZ2FzX29wdCQkZ2FzX2NwdSAkJGdhc19pc2EpCitjZmxhZ3MtJChDT05GSUdfU0IxWFhYX0NPUkVMSVMpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1uby1zY2hlZC1wcm9sb2cpIFwKKwkJCQkgICAtZm5vLW9taXQtZnJhbWUtcG9pbnRlcgogCiAjCiAjIENQVS1kZXBlbmRlbnQgY29tcGlsZXIvYXNzZW1ibGVyIG9wdGlvbnMgZm9yIG9wdGltaXphdGlvbi4KICMKLWNmbGFncy0kKENPTkZJR19DUFVfUjMwMDApCSs9IFwKLQkJCSQoY2FsbCBzZXRfZ2NjZmxhZ3MscjMwMDAsbWlwczEscjMwMDAsbWlwczEsbWlwczEpCi1DSEVDS0ZMQUdTLSQoQ09ORklHX0NQVV9SMzAwMCkJKz0gLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMxCi0KLWNmbGFncy0kKENPTkZJR19DUFVfVFgzOVhYKQkrPSBcCi0JCQkkKGNhbGwgc2V0X2djY2ZsYWdzLHIzOTAwLG1pcHMxLHIzMDAwLG1pcHMxLG1pcHMxKQotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfVFgzOVhYKQkrPSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzEKLQotY2ZsYWdzLSQoQ09ORklHX0NQVV9SNjAwMCkJKz0gXAotCQkJJChjYWxsIHNldF9nY2NmbGFncyxyNjAwMCxtaXBzMixyNjAwMCxtaXBzMixtaXBzMikgXAorY2ZsYWdzLSQoQ09ORklHX0NQVV9SMzAwMCkJKz0gLW1hcmNoPXIzMDAwCitjZmxhZ3MtJChDT05GSUdfQ1BVX1RYMzlYWCkJKz0gLW1hcmNoPXIzOTAwCitjZmxhZ3MtJChDT05GSUdfQ1BVX1I2MDAwKQkrPSAtbWFyY2g9cjYwMDAgLVdhLC0tdHJhcAorY2ZsYWdzLSQoQ09ORklHX0NQVV9SNDMwMCkJKz0gLW1hcmNoPXI0MzAwIC1XYSwtLXRyYXAKK2NmbGFncy0kKENPTkZJR19DUFVfVlI0MVhYKQkrPSAtbWFyY2g9cjQxMDAgLVdhLC0tdHJhcAorY2ZsYWdzLSQoQ09ORklHX0NQVV9SNFgwMCkJKz0gLW1hcmNoPXI0NjAwIC1XYSwtLXRyYXAKK2NmbGFncy0kKENPTkZJR19DUFVfVFg0OVhYKQkrPSAtbWFyY2g9cjQ2MDAgLVdhLC0tdHJhcAorY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjEpCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPW1pcHMzMiwtbWlwczIgLW10dW5lPXI0NjAwKSBcCisJCQktV2EsLW1pcHMzMiAtV2EsLS10cmFwCitjZmxhZ3MtJChDT05GSUdfQ1BVX01JUFMzMl9SMikJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczMycjIsLW1pcHMyIC1tdHVuZT1yNDYwMCkgXAorCQkJLVdhLC1taXBzMzJyMiAtV2EsLS10cmFwCitjZmxhZ3MtJChDT05GSUdfQ1BVX01JUFM2NF9SMSkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9bWlwczY0LC1taXBzMiAtbXR1bmU9cjQ2MDApIFwKKwkJCS1XYSwtbWlwczY0IC1XYSwtLXRyYXAKK2NmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IyKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1taXBzNjRyMiwtbWlwczIgLW10dW5lPXI0NjAwICkgXAorCQkJLVdhLC1taXBzNjRyMiAtV2EsLS10cmFwCitjZmxhZ3MtJChDT05GSUdfQ1BVX1I1MDAwKQkrPSAtbWFyY2g9cjUwMDAgLVdhLC0tdHJhcAorY2ZsYWdzLSQoQ09ORklHX0NQVV9SNTQzMikJKz0gJChjYWxsIGNjLW9wdGlvbnMsLW1hcmNoPXI1NDAwLC1tYXJjaD1yNTAwMCkgXAogCQkJLVdhLC0tdHJhcAotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfUjYwMDApCSs9IC1EX01JUFNfSVNBPV9NSVBTX0lTQV9NSVBTMgotCi1jZmxhZ3MtJChDT05GSUdfQ1BVX1I0MzAwKQkrPSBcCi0JCQkkKGNhbGwgc2V0X2djY2ZsYWdzLHI0MzAwLG1pcHMzLHI0MzAwLG1pcHMzLG1pcHMyKSBcCitjZmxhZ3MtJChDT05GSUdfQ1BVX05FVkFEQSkJKz0gJChjYWxsIGNjLW9wdGlvbnMsLW1hcmNoPXJtNTIwMCwtbWFyY2g9cjUwMDApIFwKIAkJCS1XYSwtLXRyYXAKLUNIRUNLRkxBR1MtJChDT05GSUdfQ1BVX1I0MzAwKQkrPSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzMKLQotY2ZsYWdzLSQoQ09ORklHX0NQVV9WUjQxWFgpCSs9IFwKLQkJCSQoY2FsbCBzZXRfZ2NjZmxhZ3MscjQxMDAsbWlwczMscjQ2MDAsbWlwczMsbWlwczIpIFwKK2NmbGFncy0kKENPTkZJR19DUFVfUk03MDAwKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1ybTcwMDAsLW1hcmNoPXI1MDAwKSBcCiAJCQktV2EsLS10cmFwCi1DSEVDS0ZMQUdTLSQoQ09ORklHX0NQVV9WUjQxWFgpCSs9IC1EX01JUFNfSVNBPV9NSVBTX0lTQV9NSVBTMwotCi1jZmxhZ3MtJChDT05GSUdfQ1BVX1I0WDAwKQkrPSBcCi0JCQkkKGNhbGwgc2V0X2djY2ZsYWdzLHI0NjAwLG1pcHMzLHI0NjAwLG1pcHMzLG1pcHMyKSBcCitjZmxhZ3MtJChDT05GSUdfQ1BVX1JNOTAwMCkJKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9cm05MDAwLC1tYXJjaD1yNTAwMCkgXAogCQkJLVdhLC0tdHJhcAotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfUjRYMDApCSs9IC1EX01JUFNfSVNBPV9NSVBTX0lTQV9NSVBTMwotCi1jZmxhZ3MtJChDT05GSUdfQ1BVX1RYNDlYWCkJKz0gXAotCQkJJChjYWxsIHNldF9nY2NmbGFncyxyNDYwMCxtaXBzMyxyNDYwMCxtaXBzMyxtaXBzMikgIFwKK2NmbGFncy0kKENPTkZJR19DUFVfU0IxKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1zYjEsLW1hcmNoPXI1MDAwKSBcCiAJCQktV2EsLS10cmFwCi1DSEVDS0ZMQUdTLSQoQ09ORklHX0NQVV9UWDQ5WFgpCSs9IC1EX01JUFNfSVNBPV9NSVBTX0lTQV9NSVBTMwotCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFMzMl9SMSkJKz0gXAotCQkJJChjYWxsIHNldF9nY2NmbGFncyxtaXBzMzIsbWlwczMyLHI0NjAwLG1pcHMzLG1pcHMyKSBcCitjZmxhZ3MtJChDT05GSUdfQ1BVX1I4MDAwKQkrPSAtbWFyY2g9cjgwMDAgLVdhLC0tdHJhcAorY2ZsYWdzLSQoQ09ORklHX0NQVV9SMTAwMDApCSs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPXIxMDAwMCwtbWFyY2g9cjgwMDApIFwKIAkJCS1XYSwtLXRyYXAKLUNIRUNLRkxBR1MtJChDT05GSUdfQ1BVX01JUFMzMl9SMSkJKz0gLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFMzMgotCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFMzMl9SMikJKz0gXAotCQkJJChjYWxsIHNldF9nY2NmbGFncyxtaXBzMzJyMixtaXBzMzJyMixyNDYwMCxtaXBzMyxtaXBzMikgXAotCQkJLVdhLC0tdHJhcAotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfTUlQUzMyX1IyKQkrPSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzMyCi0KLWNmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IxKQkrPSBcCi0JCQkkKGNhbGwgc2V0X2djY2ZsYWdzLG1pcHM2NCxtaXBzNjQscjQ2MDAsbWlwczMsbWlwczIpIFwKLQkJCS1XYSwtLXRyYXAKLUNIRUNLRkxBR1MtJChDT05GSUdfQ1BVX01JUFM2NF9SMSkJKz0gLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFM2NAotCi1jZmxhZ3MtJChDT05GSUdfQ1BVX01JUFM2NF9SMikJKz0gXAotCQkJJChjYWxsIHNldF9nY2NmbGFncyxtaXBzNjRyMixtaXBzNjRyMixyNDYwMCxtaXBzMyxtaXBzMikgXAotCQkJLVdhLC0tdHJhcAotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfTUlQUzY0X1IyKQkrPSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzY0Ci0KLWNmbGFncy0kKENPTkZJR19DUFVfUjUwMDApCSs9IFwKLQkJCSQoY2FsbCBzZXRfZ2NjZmxhZ3MscjUwMDAsbWlwczQscjUwMDAsbWlwczQsbWlwczIpIFwKLQkJCS1XYSwtLXRyYXAKLUNIRUNLRkxBR1MtJChDT05GSUdfQ1BVX1I1MDAwKQkrPSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzQKLQotY2ZsYWdzLSQoQ09ORklHX0NQVV9SNTQzMikJKz0gXAotCQkJJChjYWxsIHNldF9nY2NmbGFncyxyNTQwMCxtaXBzNCxyNTAwMCxtaXBzNCxtaXBzMikgXAotCQkJLVdhLC0tdHJhcAotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfUjU0MzIpCSs9IC1EX01JUFNfSVNBPV9NSVBTX0lTQV9NSVBTNAotCi1jZmxhZ3MtJChDT05GSUdfQ1BVX05FVkFEQSkJKz0gXAotCQkJJChjYWxsIHNldF9nY2NmbGFncyxybTUyMDAsbWlwczQscjUwMDAsbWlwczQsbWlwczIpIFwKLQkJCS1XYSwtLXRyYXAKLUNIRUNLRkxBR1MtJChDT05GSUdfQ1BVX05FVkFEQSkJKz0gLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFM0Ci0KLWNmbGFncy0kKENPTkZJR19DUFVfUk03MDAwKQkrPSBcCi0JCQkkKGNhbGwgc2V0X2djY2ZsYWdzLHJtNzAwMCxtaXBzNCxyNTAwMCxtaXBzNCxtaXBzMikgXAotCQkJLVdhLC0tdHJhcAotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfUk03MDAwKQkrPSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzQKLQotY2ZsYWdzLSQoQ09ORklHX0NQVV9STTkwMDApCSs9IFwKLQkJCSQoY2FsbCBzZXRfZ2NjZmxhZ3Mscm05MDAwLG1pcHM0LHI1MDAwLG1pcHM0LG1pcHMyKSBcCi0JCQktV2EsLS10cmFwCi1DSEVDS0ZMQUdTLSQoQ09ORklHX0NQVV9STTkwMDApCSs9IC1EX01JUFNfSVNBPV9NSVBTX0lTQV9NSVBTNAotCi0KLWNmbGFncy0kKENPTkZJR19DUFVfU0IxKQkrPSBcCi0JCQkkKGNhbGwgc2V0X2djY2ZsYWdzLHNiMSxtaXBzNjQscjUwMDAsbWlwczQsbWlwczIpIFwKLQkJCS1XYSwtLXRyYXAKLUNIRUNLRkxBR1MtJChDT05GSUdfQ1BVX1NCMSkJKz0gLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFM2NAotCi1jZmxhZ3MtJChDT05GSUdfQ1BVX1I4MDAwKQkrPSBcCi0JCQkkKGNhbGwgc2V0X2djY2ZsYWdzLHI4MDAwLG1pcHM0LHI4MDAwLG1pcHM0LG1pcHMyKSBcCi0JCQktV2EsLS10cmFwCi1DSEVDS0ZMQUdTLSQoQ09ORklHX0NQVV9SODAwMCkJKz0gLURfTUlQU19JU0E9X01JUFNfSVNBX01JUFM0Ci0KLWNmbGFncy0kKENPTkZJR19DUFVfUjEwMDAwKQkrPSBcCi0JCQkkKGNhbGwgc2V0X2djY2ZsYWdzLHIxMDAwMCxtaXBzNCxyODAwMCxtaXBzNCxtaXBzMikgXAotCQkJLVdhLC0tdHJhcAotQ0hFQ0tGTEFHUy0kKENPTkZJR19DUFVfUjEwMDAwKQkrPSAtRF9NSVBTX0lTQT1fTUlQU19JU0FfTUlQUzQKIAogaWZkZWYgQ09ORklHX0NQVV9TQjEKIGlmZGVmIENPTkZJR19TQjFfUEFTU18xX1dPUktBUk9VTkRTCkBAIC02MjgsNyArNDk2LDYgQEAKIGlmZGVmIENPTkZJR19TR0lfSVAyNwogY29yZS0kKENPTkZJR19TR0lfSVAyNykJCSs9IGFyY2gvbWlwcy9zZ2ktaXAyNy8KIGNmbGFncy0kKENPTkZJR19TR0lfSVAyNykJKz0gLUlpbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNwotaWZkZWYgQ09ORklHX0JVSUxEX0VMRjY0CiBpZmRlZiBDT05GSUdfTUFQUEVEX0tFUk5FTAogbG9hZC0kKENPTkZJR19TR0lfSVAyNykJCSs9IDB4YzAwMDAwMDA0MDAxYzAwMAogT0JKQ09QWUZMQUdTCQkJOj0gLS1jaGFuZ2UtYWRkcmVzc2VzPTB4M2ZmZmZmZmY4MDAwMDAwMApAQCAtNjM3LDE2ICs1MDQsNiBAQAogbG9hZC0kKENPTkZJR19TR0lfSVAyNykJCSs9IDB4YTgwMDAwMDAwMDAxYzAwMAogT0JKQ09QWUZMQUdTCQkJOj0gLS1jaGFuZ2UtYWRkcmVzc2VzPTB4NTdmZmZmZmY4MDAwMDAwMAogZW5kaWYKLWVsc2UKLWlmZGVmIENPTkZJR19NQVBQRURfS0VSTkVMCi1sb2FkLSQoQ09ORklHX1NHSV9JUDI3KQkJKz0gMHhmZmZmZmZmZmMwMDFjMDAwCi1PQkpDT1BZRkxBR1MJCQk6PSAtLWNoYW5nZS1hZGRyZXNzZXM9MHhjMDAwMDAwMDgwMDAwMDAwCi1kYXRhb2Zmc2V0LSQoQ09ORklHX1NHSV9JUDI3KQkrPSAweDAxMDAwMDAwCi1lbHNlCi1sb2FkLSQoQ09ORklHX1NHSV9JUDI3KQkJKz0gMHhmZmZmZmZmZjgwMDFjMDAwCi1PQkpDT1BZRkxBR1MJCQk6PSAtLWNoYW5nZS1hZGRyZXNzZXM9MHhhODAwMDAwMDgwMDAwMDAwCi1lbmRpZgotZW5kaWYKIGVuZGlmCiAKICMKQEAgLTc1NSw2ICs2MTIsMTIgQEAKIAogTERGTEFHUwkJCSs9IC1tICQobGQtZW11bCkKIAoraWZkZWYgQ09ORklHX01JUFMKK0NIRUNLRkxBR1MgKz0gJChzaGVsbCAkKENDKSAkKENGTEFHUykgLWRNIC1FIC14YyAvZGV2L251bGwgfCBcCisJZWdyZXAgLXZ3ICdfX0dOVUNfKE1BSk9SfE1JTk9SfFBBVENITEVWRUwpX18nIHwgXAorCXNlZCAtZSAncy9eXCNkZWZpbmUgLy1ELycgLWUgJ3MvIC89Ii8nIC1lICdzLyQkLyIvJykKK2VuZGlmCisKIE9CSkNPUFlGTEFHUwkJKz0gLS1yZW1vdmUtc2VjdGlvbj0ucmVnaW5mbwogCiAjCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXJjL2FyY19jb24uYyBiL2FyY2gvbWlwcy9hcmMvYXJjX2Nvbi5jCmluZGV4IDUxNzg1YTYuLmJjMzJmZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcmMvYXJjX2Nvbi5jCisrKyBiL2FyY2gvbWlwcy9hcmMvYXJjX2Nvbi5jCkBAIC0yNCw3ICsyNCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBwcm9tX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQorc3RhdGljIGludCBwcm9tX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQogewogCXJldHVybiAhKHByb21fZmxhZ3MgJiBQUk9NX0ZMQUdfVVNFX0FTX0NPTlNPTEUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyYy9tZW1vcnkuYyBiL2FyY2gvbWlwcy9hcmMvbWVtb3J5LmMKaW5kZXggOTU4ZDJlYi4uOGE5ZWY1OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FyYy9tZW1vcnkuYworKysgYi9hcmNoL21pcHMvYXJjL21lbW9yeS5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJd2hpbGUgKGFkZHIgPCBib290X21lbV9tYXAubWFwW2ldLmFkZHIKIAkJCSAgICAgICsgYm9vdF9tZW1fbWFwLm1hcFtpXS5zaXplKSB7CiAJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSkpOwotCQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKF9fdmEoYWRkcikpLCAxKTsKKwkJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSkpOwogCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKV9fdmEoYWRkcikpOwogCQkJYWRkciArPSBQQUdFX1NJWkU7CiAJCQlmcmVlZCArPSBQQUdFX1NJWkU7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXJjL21pc2MuYyBiL2FyY2gvbWlwcy9hcmMvbWlzYy5jCmluZGV4IDg0ODY3ZGUuLmIyZTEwYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcmMvbWlzYy5jCisrKyBiL2FyY2gvbWlwcy9hcmMvbWlzYy5jCkBAIC05LDcgKzksNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQogICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIApAQCAtMjAsMTcgKzE5LDExIEBACiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1leHRlcm4gdm9pZCAqc2dpd2Q5M19ob3N0OwotZXh0ZXJuIHZvaWQgcmVzZXRfd2QzM2M5Myh2b2lkICppbnN0YW5jZSk7Ci0KIFZPSUQKIEFyY0hhbHQoVk9JRCkKIHsKIAliY19kaXNhYmxlKCk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLSNpZmRlZiBDT05GSUdfU0NTSV9TR0lXRDkzCi0JcmVzZXRfd2QzM2M5MyhzZ2l3ZDkzX2hvc3QpOwotI2VuZGlmCiAJQVJDX0NBTEwwKGhhbHQpOwogbmV2ZXI6CWdvdG8gbmV2ZXI7CiB9CkBAIC00MCw5ICszMyw2IEBACiB7CiAJYmNfZGlzYWJsZSgpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0jaWZkZWYgQ09ORklHX1NDU0lfU0dJV0Q5MwotCXJlc2V0X3dkMzNjOTMoc2dpd2Q5M19ob3N0KTsKLSNlbmRpZgogCUFSQ19DQUxMMChwZG93bik7CiBuZXZlcjoJZ290byBuZXZlcjsKIH0KQEAgLTUzLDkgKzQzLDYgQEAKIHsKIAliY19kaXNhYmxlKCk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLSNpZmRlZiBDT05GSUdfU0NTSV9TR0lXRDkzCi0JcmVzZXRfd2QzM2M5MyhzZ2l3ZDkzX2hvc3QpOwotI2VuZGlmCiAJQVJDX0NBTEwwKHJlc3RhcnQpOwogbmV2ZXI6CWdvdG8gbmV2ZXI7CiB9CkBAIC02NSw5ICs1Miw2IEBACiB7CiAJYmNfZGlzYWJsZSgpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0jaWZkZWYgQ09ORklHX1NDU0lfU0dJV0Q5MwotCXJlc2V0X3dkMzNjOTMoc2dpd2Q5M19ob3N0KTsKLSNlbmRpZgogCUFSQ19DQUxMMChyZWJvb3QpOwogbmV2ZXI6CWdvdG8gbmV2ZXI7CiB9CkBAIC03Nyw5ICs2MSw2IEBACiB7CiAJYmNfZGlzYWJsZSgpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0jaWZkZWYgQ09ORklHX1NDU0lfU0dJV0Q5MwotCXJlc2V0X3dkMzNjOTMoc2dpd2Q5M19ob3N0KTsKLSNlbmRpZgogCUFSQ19DQUxMMChpbW9kZSk7CiBuZXZlcjoJZ290byBuZXZlcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2NwdXRhYmxlLmMgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jcHV0YWJsZS5jCmluZGV4IDRkYmRlODIuLmQ4ZGY1ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vY3B1dGFibGUuYwpAQCAtMzgsNyArMzgsNyBAQAogICAgIHsgMHhmZmZmZmZmZiwgMHgwMjAzMDIwNCwgIkF1MTEwMCBCRSIsIDAsIDEgfSwKICAgICB7IDB4ZmZmZmZmZmYsIDB4MDMwMzAyMDAsICJBdTE1NTAgQUEiLCAwLCAxIH0sCiAgICAgeyAweGZmZmZmZmZmLCAweDA0MDMwMjAwLCAiQXUxMjAwIEFCIiwgMCwgMCB9LAotICAgIHsgMHhmZmZmZmZmZiwgMHgwNDAzMDIwMSwgIkF1MTIwMCBBQyIsIDAsIDEgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDQwMzAyMDEsICJBdTEyMDAgQUMiLCAxLCAwIH0sCiAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAiVW5rbm93biBBdTF4eHgiLCAxLCAwIH0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kYmRtYS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vZGJkbWEuYwppbmRleCBkMDBlODI0Li42ZWUwOTBiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2RiZG1hLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCWlmICggTlVMTCAhPSBwICkKIAl7CiAJCW1lbWNweShwLCBkZXYsIHNpemVvZihkYmRldl90YWJfdCkpOwotIAkJcC0+ZGV2X2lkID0gRFNDUl9ERVYyQ1VTVE9NX0lEKG5ld19pZCxkZXYtPmRldl9pZCk7CisJCXAtPmRldl9pZCA9IERTQ1JfREVWMkNVU1RPTV9JRChuZXdfaWQsZGV2LT5kZXZfaWQpOwogCQlyZXQgPSBwLT5kZXZfaWQ7CiAJCW5ld19pZCsrOwogI2lmIDAKQEAgLTI2MCw3ICsyNjAsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZhdTF4eHhfZGJkbWFfc3Bpbl9sb2NrLCBmbGFncyk7CiAJaWYgKCEoc3RwLT5kZXZfZmxhZ3MgJiBERVZfRkxBR1NfSU5VU0UpIHx8CiAJICAgICAoc3RwLT5kZXZfZmxhZ3MgJiBERVZfRkxBR1NfQU5ZVVNFKSkgewotCSAgICAgCS8qIEdvdCBzb3VyY2UgKi8KKwkJLyogR290IHNvdXJjZSAqLwogCQlzdHAtPmRldl9mbGFncyB8PSBERVZfRkxBR1NfSU5VU0U7CiAJCWlmICghKGR0cC0+ZGV2X2ZsYWdzICYgREVWX0ZMQUdTX0lOVVNFKSB8fAogCQkgICAgIChkdHAtPmRldl9mbGFncyAmIERFVl9GTEFHU19BTllVU0UpKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9kbWEuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2RtYS5jCmluZGV4IDE5MDVjNmIuLjFkODJmMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2RtYS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2RtYS5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZWxzZQogIAlpZiAoZGV2X2lkIDwgMCB8fCBkZXZfaWQgPj0gRE1BX05VTV9ERVYpCi0gCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fQVUxMDAwX0RNQV9DSEFOTkVMUzsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcGxhdGZvcm0uYwppbmRleCA0OGQzZjU0Li4zMjcwMmU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3BsYXRmb3JtLmMKQEAgLTIwLDcgKzIwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXUxeHh4X3VzYl9vaGNpX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CQk9IFVTQl9PSENJX0JBU0UsCi0JCS5lbmQJCT0gVVNCX09IQ0lfQkFTRSArIFVTQl9PSENJX0xFTiwKKwkJLmVuZAkJPSBVU0JfT0hDSV9CQVNFICsgVVNCX09IQ0lfTEVOIC0gMSwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNtYzkxeCIsCi0gCS5pZAkJPSAtMSwKKwkuaWQJCT0gLTEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCiB9OwpAQCAtMjc4LDkgKzI3OCw3IEBACiAJJmF1MTEwMF9sY2RfZGV2aWNlLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NPQ19BVTEyMDAKLSNpZiAwCS8qIGZpeG1lICovCiAJJmF1MXh4eF91c2JfZWhjaV9kZXZpY2UsCi0jZW5kaWYKIAkmYXUxeHh4X3VzYl9nZHRfZGV2aWNlLAogCSZhdTF4eHhfdXNiX290Z19kZXZpY2UsCiAJJmF1MTIwMF9sY2RfZGV2aWNlLApAQCAtMjg4LDcgKzI4Niw3IEBACiAJJmF1MXh4eF9tbWNfZGV2aWNlLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCi0gCSZzbWM5MXhfZGV2aWNlLAorCSZzbWM5MXhfZGV2aWNlLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9yZXNldC5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vcmVzZXQuYwppbmRleCA0ZmZjY2VkLi5jOTNhZjIyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3Jlc2V0LmMKQEAgLTE2NCwxNyArMTY0LDIwIEBACiAKIHZvaWQgYXUxMDAwX2hhbHQodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTU1MCkKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTU1MCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApCiAJLyogcG93ZXIgb2ZmIHN5c3RlbSAqLwotCXByaW50aygiXG4qKiBQb3dlcmluZyBvZmYgUGIxNTUwXG4iKTsKKwlwcmludGsoIlxuKiogUG93ZXJpbmcgb2ZmLi4uXG4iKTsKIAlhdV93cml0ZXcoYXVfcmVhZHcoMHhBRjAwMDAxQykgfCAoMzw8MTQpLCAweEFGMDAwMDFDKTsKIAlhdV9zeW5jKCk7CiAJd2hpbGUoMSk7IC8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KLSNlbmRpZgorI2Vsc2UKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlxuKiogWW91IGNhbiBzYWZlbHkgdHVybiBvZmYgdGhlIHBvd2VyXG4iKTsKICNpZmRlZiBDT05GSUdfTUlQU19NSVJBR0UKIAlhdV93cml0ZWwoKDEgPDwgMjYpIHwgKDEgPDwgMTApLCBHUElPMl9PVVRQVVQpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfREIxMjAwCisJYXVfd3JpdGV3KGF1X3JlYWR3KDB4Qjk4MDAwMUMpIHwgKDE8PDE0KSwgMHhCOTgwMDAxQyk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfUE0KIAlhdV9zbGVlcCgpOwogCkBAIC0xODcsNiArMTkwLDcgQEAKIAkgICAgICAgICAgICAgICAgIndhaXRcblx0IgogCQkJIi5zZXRcdG1pcHMwIik7CiAjZW5kaWYKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NSVBTX1BCMTU1MCkgfHwgZGVmaW5lZChDT05GSUdfTUlQU19EQjE1NTApICovCiB9CiAKIHZvaWQgYXUxMDAwX3Bvd2VyX29mZih2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3NldHVwLmMKaW5kZXggZWIxNTVjMC4uMTA4MDU1OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vc2V0dXAuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9zZXR1cC5jCkBAIC05MCw3ICs5MCw3IEBACiAJZWxzZSB7CiAJCS8qIENsZWFyIHRvIG9idGFpbiBiZXN0IHN5c3RlbSBidXMgcGVyZm9ybWFuY2UgKi8KIAkJY2xlYXJfYzBfY29uZmlnKDE8PDE5KTsgLyogQ2xlYXIgQ29uZmlnW09EXSAqLwotIAl9CisJfQogCiAJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYyBiL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYwppbmRleCA4ODNkM2YzLi5mODVmMTUyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCkBAIC0zNTksNyArMzU5LDcgQEAKIAkJOiAiaGkiLCAibG8iLCBHQ0NfUkVHX0FDQ1VNKTsKIAogCS8qCi0gCSAqIER1ZSB0byBwb3NzaWJsZSBqaWZmaWVzIGluY29uc2lzdGVuY2llcywgd2UgbmVlZCB0byBjaGVjaworCSAqIER1ZSB0byBwb3NzaWJsZSBqaWZmaWVzIGluY29uc2lzdGVuY2llcywgd2UgbmVlZCB0byBjaGVjawogCSAqIHRoZSByZXN1bHQgc28gdGhhdCB3ZSdsbCBnZXQgYSB0aW1lciB0aGF0IGlzIG1vbm90b25pYy4KIAkgKi8KIAlpZiAocmVzID49IFVTRUNTX1BFUl9KSUZGWSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvS2NvbmZpZyBiL2FyY2gvbWlwcy9jb2JhbHQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQyYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9LY29uZmlnCkBAIC0wLDAgKzEsNyBAQAorY29uZmlnIEVBUkxZX1BSSU5USworCWJvb2wgIkVhcmx5IGNvbnNvbGUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1JUFNfQ09CQUxUCisJaGVscAorCSAgUHJvdmlkZSBlYXJseSBjb25zb2xlIHN1cHBvcnQgYnkgZGlyZWN0IGFjY2VzcyB0byB0aGUKKwkgIG9uIGJvYXJkIFVBUlQuIFRoZSBVQVJUIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkKKwkgIGluaXRpYWxpc2VkIGJ5IHRoZSBib290IGxvYWRlci4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUgYi9hcmNoL21pcHMvY29iYWx0L01ha2VmaWxlCmluZGV4IDNiNmI3NTcuLjcyMGU3NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9NYWtlZmlsZQpAQCAtNCw0ICs0LDYgQEAKIAogb2JqLXkJIDo9IGlycS5vIGludC1oYW5kbGVyLm8gcmVzZXQubyBzZXR1cC5vCiAKK29iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGNvbnNvbGUubworCiBFWFRSQV9BRkxBR1MgOj0gJChDRkxBR1MpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29iYWx0L2NvbnNvbGUuYyBiL2FyY2gvbWlwcy9jb2JhbHQvY29uc29sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzJkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29iYWx0L2NvbnNvbGUuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogKEMpIFAuIEhvcnRvbiAyMDA2CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1jb2JhbHQvY29iYWx0Lmg+CisKK3N0YXRpYyB2b2lkIHB1dGNoYXIoaW50IGMpCit7CisJaWYoYyA9PSAnXG4nKQorCQlwdXRjaGFyKCdccicpOworCisJd2hpbGUoIShDT0JBTFRfVUFSVFtVQVJUX0xTUl0gJiBVQVJUX0xTUl9USFJFKSkKKwkJOworCisJQ09CQUxUX1VBUlRbVUFSVF9UWF0gPSBjOworfQorCitzdGF0aWMgdm9pZCBjb25zX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQoreworCXdoaWxlKG4tLSAmJiAqcykKKwkJcHV0Y2hhcigqcysrKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIGNvbnNfaW5mbyA9Cit7CisJLm5hbWUJPSAidWFydCIsCisJLndyaXRlCT0gY29uc193cml0ZSwKKwkuZmxhZ3MJPSBDT05fUFJJTlRCVUZGRVIgfCBDT05fQk9PVCwKKwkuaW5kZXgJPSAtMSwKK307CisKK3ZvaWQgX19pbml0IGNvYmFsdF9lYXJseV9jb25zb2xlKHZvaWQpCit7CisJcmVnaXN0ZXJfY29uc29sZSgmY29uc19pbmZvKTsKKworCXByaW50aygiQ29iYWx0OiBlYXJseSBjb25zb2xlIHJlZ2lzdGVyZWRcbiIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jIGIvYXJjaC9taXBzL2NvYmFsdC9zZXR1cC5jCmluZGV4IGI5NzEzYTcuLjRmOWVhMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvc2V0dXAuYworKysgYi9hcmNoL21pcHMvY29iYWx0L3NldHVwLmMKQEAgLTMxLDYgKzMxLDcgQEAKIGV4dGVybiB2b2lkIGNvYmFsdF9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCk7CiBleHRlcm4gdm9pZCBjb2JhbHRfbWFjaGluZV9oYWx0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY29iYWx0X21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpOworZXh0ZXJuIHZvaWQgY29iYWx0X2Vhcmx5X2NvbnNvbGUodm9pZCk7CiAKIGludCBjb2JhbHRfYm9hcmRfaWQ7CiAKQEAgLTEwOSwxNCArMTEwLDYgQEAKIAkvKiBJL08gcG9ydCByZXNvdXJjZSBtdXN0IGluY2x1ZGUgVUFSVCBhbmQgTENEL2J1dHRvbnMgKi8KIAlpb3BvcnRfcmVzb3VyY2UuZW5kID0gMHgwZmZmZmZmZjsKIAotCS8qCi0JICogVGhpcyBpcyBhIHByb20gc3R5bGUgY29uc29sZS4gV2UganVzdCBwb2tlIGF0IHRoZQotCSAqICBVQVJUIHRvIG1ha2UgaXQgdGFsay4KLQkgKiBPbmx5IHVzZSB0aGlzIGNvbnNvbGUgaWYgeW91IHJlYWxseSBzY3JldyB1cCBhbmQgY2FuJ3QKLQkgKiAgZ2V0IHRvIHRoZSBzdGFnZSBvZiBzZXR0aW5nIHVwIGEgcmVhbCBzZXJpYWwgY29uc29sZS4KLQkgKi8KLQkvKm5zMTY1NTBfc2V0dXBfY29uc29sZSgpOyovCi0KIAkvKiByZXF1ZXN0IEkvTyBzcGFjZSBmb3IgZGV2aWNlcyB1c2VkIG9uIGFsbCBpWzM0NV04NiBQQ3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQ09CQUxUX0lPX1JFU09VUkNFUzsgaSsrKQogCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIGNvYmFsdF9pb19yZXNvdXJjZXMgKyBpKTsKQEAgLTEzNiw2ICsxMjksMTAgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTAKIAlpZiAoY29iYWx0X2JvYXJkX2lkID4gQ09CQUxUX0JSRF9JRF9SQVExKSB7CiAKKyNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCisJCWNvYmFsdF9lYXJseV9jb25zb2xlKCk7CisjZW5kaWYKKwogCQl1YXJ0LmxpbmUJPSAwOwogCQl1YXJ0LnR5cGUJPSBQT1JUX1VOS05PV047CiAJCXVhcnQudWFydGNsawk9IDE4NDMyMDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnCmluZGV4IDg5YzIxNTcuLjllMWFlOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9hdGxhc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDU6NTIgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjM5OjUyIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTY0LDI2ICsxNjQsMjggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMzM1LDYgKzMzNywyOSBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KQEAgLTM1Myw0NyArMzc4LDMwIEBACiBDT05GSUdfSVBfTkZfUFBUUD1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQogQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TQ1RQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EQ0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTkJZVEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX1NUUklORz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfSVBfTkZfTkFUPW0KIENPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorIyBDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUMgaXMgbm90IHNldAogQ09ORklHX0lQX05GX05BVF9JUkM9bQogQ09ORklHX0lQX05GX05BVF9GVFA9bQogQ09ORklHX0lQX05GX05BVF9URlRQPW0KQEAgLTQwMywxMyArNDExLDkgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KQEAgLTQxOSwyNiArNDIzLDIwIEBACiAjCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVA2X05GX01BVENIX01BQz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCi1DT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUEhZU0RFVj1tCitDT05GSUdfSVA2X05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCiAKQEAgLTQ5NCw2ICs0OTIsMTEgQEAKIENPTkZJR19JUEREUF9ERUNBUD15CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRElWRVJUPXkKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTU1Myw3ICs1NTYsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC02NjMsNyArNjY1LDcgQEAKICMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwogIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKLUNPTkZJR19TQ1NJX0ZDX0FUVFJTPW0KK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCiAKQEAgLTY5NiwxMyArNjk4LDcgQEAKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNzg1LDYgKzc4MSw3IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtODI0LDYgKzgyMSw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CkBAIC04NDUsOCArODQzLDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFcyMjAwPW0KIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtOTI2LDYgKzkyMiw3IEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtOTMzLDcgKzkzMCw2IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtOTcxLDYgKzk2NywxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTEwNzYsNiArMTA3OCw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX1JPTUZTX0ZTPW0KIENPTkZJR19JTk9USUZZPXkKQEAgLTExMTgsNiArMTEyMSw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMjI1LDYgKzEyMjksNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCmluZGV4IDZmZDM1MzcuLjMyOTg0MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNTo1NCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6Mzk6NTMgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNjksMjkgKzE2OSwzMSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTI0Nyw3ICsyNDksNiBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX0JVSUxEX0VMRjY0PXkKIENPTkZJR19NSVBTMzJfQ09NUEFUPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX01JUFMzMl9PMzI9eQpAQCAtMzA5LDYgKzMxMCwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTQ1Nyw2ICs0NjMsNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTQ3OCw2ICs0ODUsNyBAQAogQ09ORklHX05FVF9TQjEyNTBfTUFDPXkKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CkBAIC01NDMsMTIgKzU1MSwxNSBAQAogIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUk9DS0VUUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DWUNMQURFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAogIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NYIGlzIG5vdCBzZXQKQEAgLTU2NCw3ICs1NzUsNiBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02NTUsNiArNjY1LDEyIEBACiBDT05GSUdfSTJDX0RFQlVHX0NISVA9eQogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzMyLDEyICs3NDgsMTIgQEAKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC03NzAsNiArNzg2LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtODMxLDE4ICs4NDgsMjAgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iIgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCmluZGV4IDUyNjFlMjkuLjZjMjk2MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDU6NTUgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjM5OjU0IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjMsOSArNjMsOSBAQAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU0lPX0U1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fV09SS1BBRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBTkJBQ19UQjAyMlggaXMgbm90IHNldAogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiBDT05GSUdfWkFPX0NBUENFTExBPXkKQEAgLTkwLDcgKzkwLDcgQEAKICMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotQ09ORklHX0NQVV9WUjQxWFg9eQorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldApAQCAtMTAzLDIzICsxMDMsMTggQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQotQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCiAjCiAjIEtlcm5lbCB0eXBlCiAjCi1DT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTE1NSwyNiArMTUwLDI4IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTE5MCw3ICsxODcsNiBAQAogIwogIyBCbG9jayBsYXllcgogIwotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMjgsNyArMjI0LDYgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTI4Niw2ICsyODEsMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDYsNyArMzA2LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDQ0LDYgKzQ0Myw3IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNDg3LDYgKzQ4Nyw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CkBAIC01MDgsOCArNTA5LDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFcyMjAwPW0KIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNTc5LDExICs1NzgsNiBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9WUjQxWFg9eQotQ09ORklHX1NFUklBTF9WUjQxWFhfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC01OTksNyArNTkzLDYgQEAKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC02MDgsNyArNjAxLDYgQEAKICMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCiAjCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAotQ09ORklHX0dQSU9fVlI0MVhYPXkKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCkBAIC02MjMsNiArNjE1LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzA0LDExICs3MDIsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNzQxLDYgKzczOSw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC04MDMsNiArODAyLDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZwppbmRleCAxZDNlZTE4Li44MzM2YjIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDU6NTcgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjM5OjU1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTUwLDI2ICsxNTAsMjggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjcxLDYgKzI3MywxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI5MSw3ICsyOTgsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNjQsOSArMzcwLDM4IEBACiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKIENPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQogIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUE9eQorIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIApAQCAtNDMzLDExICs0NjgsMjEgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorQ09ORklHX05FVF9UVUxJUD15CitDT05GSUdfREUyMTA0WD15CitDT05GSUdfVFVMSVA9eQorIyBDT05GSUdfVFVMSVBfTVdJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTElQX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfVFVMSVBfTkFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19ERTRYNSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU5CT05EXzg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkxMDIgaXMgbm90IHNldAorIyBDT05GSUdfVUxJNTI2WCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKIApAQCAtNDUzLDYgKzQ5OCw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldApAQCAtNDczLDggKzUxOSw2IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBXMjIwMD15CiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTU1MCw2ICs1OTQsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1Nyw3ICs2MDIsNiBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU5NSw2ICs2MzksMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02NzgsMTIgKzcyOCwxMiBAQAogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTcxNiw2ICs3NjYsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzc0LDYgKzgyNSw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKaW5kZXggMThhYzc5Mi4uN2YwNzE0MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA1OjU5IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTozOTo1NiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE1MSwyNiArMTUxLDI5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yODUsNiArMjg4LDIxIEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0zMTIsNiArMzMwLDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzIwLDYgKzM0Myw3IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTMzMiw3ICszNTYsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zOTUsNiArNDE4LDcgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwpAQCAtNTEyLDYgKzUzNiw3IEBACiBDT05GSUdfTUlJPW0KIENPTkZJR19NSVBTX0FVMVgwMF9FTkVUPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC02MjUsMTMgKzY1MCwxMyBAQAogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX0NTPW0KIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRVJJQUxfQVUxWDAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQpAQCAtNjc2LDYgKzcwMSwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTc3Myw2ICs4MDQsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTgwNSw2ICs4MzcsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtOTA5LDYgKzk0Miw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpAQCAtOTYzLDMgKzk5Nyw3IEBACiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9bQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCmluZGV4IDRmNTVmNzQuLjk4NTkwY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjowMCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6Mzk6NTcgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTEsMjYgKzE1MSwyOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjc0LDYgKzI3NywyMSBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzAxLDYgKzMxOSwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwOSw2ICszMzIsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zMjEsNyArMzQ1LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzg0LDYgKzQwNyw3IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTUwMSw2ICs1MjUsNyBAQAogQ09ORklHX01JST1tCiBDT05GSUdfTUlQU19BVTFYMDBfRU5FVD15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNjAwLDEzICs2MjUsMTMgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMD15CiAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwotIyBDT05GSUdfU0VSSUFMX0FVMVgwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKQEAgLTY0NCw2ICs2NjksMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC03NzIsNiArODAzLDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC04MDQsNiArODM2LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTkwOCw2ICs5NDEsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKQEAgLTk2MiwzICs5OTYsNyBAQAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KIENPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwppbmRleCAwZTVkZTdkLi45Mjg4ODQ3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MDMgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjM5OjU4IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTUxLDI3ICsxNTEsMzAgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yNzksNiArMjgyLDIxIEBACiAjCiAjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0zMDYsNiArMzI0LDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzE0LDYgKzMzNyw3IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTM4NSw2ICs0MDksNyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC01NjgsNiArNTkzLDcgQEAKIENPTkZJR19NSUk9bQogIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNjY1LDEzICs2OTEsMTMgQEAKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRVJJQUxfQVUxWDAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQpAQCAtNzE2LDYgKzc0MiwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTg0Miw2ICs4NzQsNyBAQAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtODgxLDYgKzkxNCw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTk5MCw2ICsxMDI0LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CkBAIC0xMDIwLDMgKzEwNTUsNyBAQAogQ09ORklHX0xJQkNSQzMyQz15CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwppbmRleCA4NmU3YmU4Li41YTQxNWIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MDUgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjM5OjU5IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTUzLDI2ICsxNTMsMjkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT15CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTI5Myw2ICsyOTYsMjEgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KICMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KQEAgLTMyMCw2ICszMzgsMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMjgsNiArMzUxLDcgQEAKICMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiAjCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwpAQCAtMzQwLDcgKzM2NCw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQwMyw2ICs0MjYsNyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC01NjEsNiArNTg1LDcgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC01ODEsNiArNjA2LDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CkBAIC02MDEsOCArNjI3LDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFcyMjAwPW0KIAogIwogIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNjkyLDE2ICs3MTYsMTUgQEAKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRVJJQUxfQVUxWDAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC03NDYsNiArNzY5LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzg4LDggKzgxNyw2IEBACiAjIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQogIwogQ09ORklHX1NORD1tCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotQ09ORklHX1NORF9BQzk3X0JVUz1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KIENPTkZJR19TTkRfUkFXTUlEST1tCkBAIC03OTksMTMgKzgyNiwxNiBAQAogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0dFTkVSSUNfRFJJVkVSPXkKIAogIwogIyBHZW5lcmljIGRldmljZXMKICMKK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCitDT05GSUdfU05EX0FDOTdfQlVTPW0KICMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1ZJUk1JREk9bQogQ09ORklHX1NORF9NVFBBVj1tCkBAIC04MTUsNiArODQ1LDcgQEAKICMKICMgUENJIGRldmljZXMKICMKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKQEAgLTgyMywzOCArODU0LDM4IEBACiAjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAKICMKICMgQUxTQSBNSVBTIGRldmljZXMKQEAgLTkzOSwxMiArOTcwLDE0IEBACiAjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKICMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKIENPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKQEAgLTk1OCw2ICs5OTEsNyBAQAogQ09ORklHX1VTQl9ZRUFMSU5LPW0KICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCkBAIC0xMDU3LDYgKzEwOTEsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTEwODksNiArMTEyNCw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMTkzLDYgKzEyMjksNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKQEAgLTEyNDcsMyArMTI4NCw3IEBACiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9bQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCmluZGV4IGVhNWFiMGMuLjhkYzFmMTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjowNyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MDAgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTIsMjYgKzE1MiwyOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjkyLDYgKzI5NSwyMSBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzE5LDYgKzMzNywxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMyNyw2ICszNTAsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zMzksNyArMzYzLDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDAyLDYgKzQyNSw3IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTU5Myw2ICs2MTcsNyBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTYxMyw2ICs2MzgsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKQEAgLTYzMyw4ICs2NTksNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQVzIyMDA9bQogCiAjCiAjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC03MzIsMTYgKzc1NiwxNSBAQAogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDA9eQogCiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKLSMgQ09ORklHX1NFUklBTF9BVTFYMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTc4Niw2ICs4MDksMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC04NzgsNiArOTA3LDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC05MTAsNiArOTQwLDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwMTQsNiArMTA0NSw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpAQCAtMTA2OCwzICsxMTAwLDcgQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT1tCiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3Nl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc2X2RlZmNvbmZpZwppbmRleCBhODFlMmRlLi44ZmFlNjNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc2X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kZGI1NDc2X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjowOSAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MDIgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTEsMjYgKzE1MSwyOCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yNzYsNiArMjc4LDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMjk2LDcgKzMwMyw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0NSw2ICs0NTEsNyBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAogCiAjCkBAIC00NjksNiArNDc2LDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CkBAIC00ODksOCArNDk3LDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFcyMjAwPXkKIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNTY2LDYgKzU3Miw3IEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTczLDcgKzU4MCw2IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjExLDYgKzYxNywxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY2OSw3ICs2ODEsNiBAQAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NNSVZHWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCkBAIC03MjksMTEgKzc0MCwxMSBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC03NjYsNiArNzc3LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTgyNSw2ICs4MzcsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKaW5kZXggZjFjMjdjMi4uYTBmY2Q0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MTEgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjAyIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTUxLDI2ICsxNTEsMjggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjc1LDYgKzI3NywxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI5NSw3ICszMDIsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MTQsNiArNDIwLDcgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC00NTMsNiArNDYwLDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTQ3NCw4ICs0ODIsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQVzIyMDA9eQogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCkBAIC01NTEsNiArNTU3LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC01NTgsNyArNTY1LDYgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC01OTYsNiArNjAyLDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjc3LDExICs2ODksMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNzE0LDYgKzcyNiw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03NzYsNiArNzg5LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCmluZGV4IDA4YTRkZTYuLjVhMTgxZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RlY3N0YXRpb25fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA2OjEzIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDowMyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE1MCwyNyArMTUwLDI5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjc4LDYgKzI4MCwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTI5OCw3ICszMDUsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MzYsNiArNDQyLDcgQEAKICMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiBDT05GSUdfREVDTEFOQ0U9eQogCiAjCkBAIC01MzksNiArNTQ2LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjM2LDEyICs2NDksMTIgQEAKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC02NzQsNiArNjg3LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTczNCw2ICs3NDgsNyBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfVUxUUklYX1BBUlRJVElPTj15CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIAogIwpAQCAtNzUwLDE4ICs3NjUsMjAgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZwppbmRleCBjOTA3MGNlLi44ZmJmYzA2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MTQgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjA0IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjMsOSArNjMsOSBAQAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKIENPTkZJR19DQVNJT19FNTU9eQogIyBDT05GSUdfSUJNX1dPUktQQUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX0NNQlZSNDEzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQU5CQUNfVEIwMjJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQ1RPUl9NUEMzMFggaXMgbm90IHNldAogIyBDT05GSUdfWkFPX0NBUENFTExBIGlzIG5vdCBzZXQKQEAgLTg4LDcgKzg4LDcgQEAKICMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotQ09ORklHX0NQVV9WUjQxWFg9eQorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldApAQCAtMTAxLDIzICsxMDEsMTggQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQotQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCiAjCiAjIEtlcm5lbCB0eXBlCiAjCi1DT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTE1MywyNiArMTQ4LDI4IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xODgsNyArMTg1LDYgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjIzLDcgKzIxOSw2IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yNzgsNiArMjczLDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMjk4LDcgKzI5OCw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQzMyw2ICs0MzIsNyBAQAogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAogIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldApAQCAtNTMxLDEwICs1MzEsNiBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9WUjQxWFg9eQotQ09ORklHX1NFUklBTF9WUjQxWFhfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNTYzLDE0ICs1NTksMTIgQEAKICMgQ09ORklHX1dEVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEMgaXMgbm90IHNldAogIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwotQ09ORklHX0dQSU9fVlI0MVhYPXkKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCkBAIC01ODUsNiArNTc5LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjY1LDExICs2NjUsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNzAyLDYgKzcwMiw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03NjMsNiArNzY0LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ldjY0MTIwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCmluZGV4IGFhMjRkODUuLmYyZDQzYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2V2NjQxMjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA2OjE2IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDowNSAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE1MywyNiArMTUzLDI4IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTI4Miw2ICsyODQsMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDIsNyArMzA5LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDIwLDYgKzQyNiw3IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNDQwLDYgKzQ0Nyw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldApAQCAtNDYwLDggKzQ2OCw2IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBXMjIwMD1tCiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTU0NSw2ICs1NTEsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1Miw3ICs1NTksNiBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU5MCw2ICs1OTYsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02NzEsMTEgKzY4MywxMSBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC03MDgsNiArNzIwLDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTc2Nyw2ICs3ODAsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2V2OTYxMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcKaW5kZXggZWVlZDBlNS4uYWM1ODQxYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MTggMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjA2IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTU3LDI2ICsxNTcsMjggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTI4NCw2ICsyODYsMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDQsNyArMzExLDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDA3LDYgKzQxMyw3IEBACiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19HVDk2MTAwRVRIPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTQ5Niw2ICs1MDMsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTUzOCw2ICs1NDYsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02MTcsMTEgKzYzMSwxMSBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC02NTQsNiArNjY4LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTcxMyw2ICs3MjgsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKaW5kZXggZTU2MzUxYS4uNDJkNWNkNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MjAgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjM5OjUxIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTU4LDI3ICsxNTgsMjkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0zMTcsNiArMzE5LDI4IEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0zMzUsMzkgKzM1OSwyMyBAQAogQ09ORklHX0lQX05GX1BQVFA9bQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQogQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU0NUUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRENDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQorQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX0lQX05GX05BVD1tCiBDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQpAQCAtMzg0LDEzICszOTIsOSBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQogQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KQEAgLTQwMCwyNSArNDA0LDIwIEBACiAjCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVA2X05GX01BVENIX01BQz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCi1DT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KIApAQCAtNDQ1LDYgKzQ0NCwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01MDQsNyArNTA4LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNjQxLDYgKzY0NCw3IEBACiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogQ09ORklHX1NHSVNFRVE9eQogCiAjCkBAIC03ODcsNiArNzkxLDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtODkyLDYgKzkwMiw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz1tCiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC05MzQsNiArOTQ1LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwMDcsNiArMTAxOSw3IEBACiBDT05GSUdfU0dJX1BBUlRJVElPTj15CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCkBAIC0xMDYyLDYgKzEwNzUsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKaW5kZXggZTE3ZDNhZC4uOGM0MDU5MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MjEgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjNAorIyBUdWUgRmViIDIxIDEzOjQ0OjMxIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTMyLDYgKzEzMiw3IEBACiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NjQKIENPTkZJR19QUkVFTVBUX05PTkU9eQpAQCAtMTQ0LDcgKzE0NSw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xNTksMjggKzE1OSwzMCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0NQVVNFVFM9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjM1LDcgKzIzNyw2IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfQlVJTERfRUxGNjQ9eQogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CkBAIC0yNTAsNiArMjUxLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yODksNiArMjkxLDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zNTYsNyArMzYzLDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzY3LDcgKzM3Myw3IEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTQ0MSwxNCArNDQ3LDE0IEBACiAjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KIENPTkZJR19TQ1NJX1NBU19BVFRSUz1tCiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIwotQ09ORklHX0lTQ1NJX1RDUD1tCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNDY5LDEzICs0NzUsNyBAQAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9eQotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNTYwLDYgKzU2MCw3IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNTgwLDYgKzU4MSw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldApAQCAtNjAwLDggKzYwMiw2IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBXMjIwMD1tCiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTY1NSw2ICs2NTUsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CkBAIC03MDUsNiArNzA2LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzc0LDYgKzc4MSwxMCBAQAogIwogCiAjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtNzk2LDYgKzgwNyw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC04MjksNiArODQxLDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTg4OSw2ICs5MDIsNyBAQAogQ09ORklHX1NHSV9QQVJUSVRJT049eQogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIAogIwpAQCAtOTA1LDYgKzkxOSw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAzMl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwppbmRleCBhMzRkYjZlLi43ZmRjYWY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjoyNCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MDkgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTgsMjYgKzE1OCwyOCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yMjQsNyArMjI2LDYgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19CVUlMRF9FTEY2NCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQUzMyX0NPTVBBVD15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19NSVBTMzJfTzMyPXkKQEAgLTI4Niw2ICsyODcsMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDYsNyArMzEyLDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMzkyLDcgKzM5Nyw3IEBACiAjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKICMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfU0FTX0FUVFJTPXkKIApAQCAtNDI1LDEzICs0MzAsNyBAQAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPXkKLSMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC00OTgsNiArNDk3LDcgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC01MTgsNiArNTE4LDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CkBAIC01MzgsOCArNTM5LDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFcyMjAwPXkKIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNjE3LDYgKzYxNiw3IEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI0LDcgKzYyNCw2IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjYyLDYgKzY2MSwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTc0MywxMSArNzQ4LDExIEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTc4MCw2ICs3ODUsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtODM1LDYgKzg0MSw3IEBACiBDT05GSUdfU0dJX1BBUlRJVElPTj15CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCkBAIC04NTEsNiArODU4LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZwppbmRleCBiNWZhOTYzLi5jNzE2OTk2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MjYgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjEwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTUzLDI2ICsxNTMsMjkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yODEsNiArMjg0LDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzAxLDcgKzMwOSw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTM2Miw2ICszNjksNyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC01MDAsNiArNTA4LDcgQEAKICMKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTU5Myw2ICs2MDIsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTYzNSw2ICs2NDUsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC03MjgsMTEgKzc0NCwxMSBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC03NjUsNiArNzgxLDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTgyNiw2ICs4NDMsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2l2cl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnCmluZGV4IDcxMzg2OTMuLmE4Mzc2ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2l2cl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjoyNyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MTEgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTAsMjYgKzE1MCwyOCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yODAsNiArMjgyLDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzAwLDcgKzMwNyw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0MCw2ICs0NDYsNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTQ2MCw2ICs0NjcsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKQEAgLTQ4MCw4ICs0ODgsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQVzIyMDA9bQogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCkBAIC01NjAsNiArNTY2LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC01NjcsNyArNTc0LDYgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MDQsNiArNjEwLDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjg1LDExICs2OTcsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNzIyLDYgKzczNCw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03ODEsNiArNzk0LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qYWd1YXItYXR4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCmluZGV4IDE0ZmI0NjguLjMxNjAxNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA2OjI5IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDoxMiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE1OCwyNyArMTU4LDI4IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xODYsNiArMTg3LDcgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX0tNT0Q9eQogCkBAIC0yOTQsNyArMjk2LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDExLDYgKzQxMiw3IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNDY5LDggKzQ3MSw2IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBXMjIwMD1tCiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTUxNSw2ICs1MTUsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTUyMiw3ICs1MjMsNiBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU1OCw2ICs1NTgsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02MzEsNyArNjM3LDYgQEAKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC03MTAsNiArNzE1LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCmluZGV4IGE4ZGVkM2QuLjUzZmJlZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2ptcjM5MjdfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA2OjMxIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDoxMyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE0OCwyNiArMTQ4LDI4IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTI3Miw2ICsyNzQsMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0yOTIsNyArMjk5LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDExLDYgKzQxNyw3IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNDMxLDYgKzQzOCw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldApAQCAtNDUxLDggKzQ1OSw2IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBXMjIwMD15CiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTUyOSw2ICs1MzUsNyBAQAogIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKICMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0CiAjIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CkBAIC01NDUsNyArNTUyLDYgQEAKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwogQ09ORklHX0hBU19UWFg5X1NFUklBTD15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOSVg5OF9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU4Myw2ICs1ODksMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02NDEsNyArNjUzLDYgQEAKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TTUlWR1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCTEEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIApAQCAtNjk4LDExICs3MDksMTEgQEAKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNzM1LDYgKzc0Niw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03OTQsNiArODA2LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcKaW5kZXggNmM1ZGY3Ni4uZWYwZmE5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjozMyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MTQgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTYsMjYgKzE1NiwyOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjgyLDYgKzI4NSwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwMiw3ICszMTAsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNjUsNiArMzcyLDcgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwpAQCAtNTQ4LDYgKzU1Niw3IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNTY4LDYgKzU3Nyw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldApAQCAtNTg4LDggKzU5OCw2IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBXMjIwMD1tCiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTY2NSw2ICs2NzMsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTY3Miw3ICs2ODEsNiBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTcxMCw2ICs3MTgsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC04MDEsNiArODE1LDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTgzMyw2ICs4NDgsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtODk1LDYgKzkxMSw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCmluZGV4IGRhMDY3N2EuLjM2N2QyNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmM1Ci0jIEZyaSBEZWMgMjMgMDI6MjE6MDMgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjE1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTcwLDI2ICsxNzAsMjggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMzQxLDYgKzM0MywyOSBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzU5LDQwICszODQsMjMgQEAKIENPTkZJR19JUF9ORl9QUFRQPW0KIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX01BUks9bQogQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QSFlTREVWPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQotQ09ORklHX0lQX05GX01BVENIX1NDVFA9bQotQ09ORklHX0lQX05GX01BVENIX0RDQ1A9bQotQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KQEAgLTQwOSwxMyArNDE3LDkgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCkBAIC00MjUsMjYgKzQyOSwyMCBAQAogIwogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVA2X05GX01BVENIX01BUks9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCi1DT05GSUdfSVA2X05GX01BVENIX1BIWVNERVY9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQogQ09ORklHX0lQNl9ORl9SQVc9bQogCkBAIC01MDAsNiArNDk4LDExIEBACiBDT05GSUdfSVBERFBfREVDQVA9eQogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01NTksNyArNTYyLDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNzM0LDEzICs3MzYsNyBAQAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPW0KLSMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC04MjMsNiArODE5LDcgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC04NjIsNiArODU5LDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTg4Myw4ICs4ODEsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQVzIyMDA9bQogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCkBAIC05NjEsNiArOTU3LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC05NjgsNyArOTY1LDYgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC0xMDA1LDYgKzEwMDEsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC0xMTEwLDYgKzExMTIsNyBAQAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPW0KIENPTkZJR19ST01GU19GUz1tCiBDT05GSUdfSU5PVElGWT15CkBAIC0xMTUyLDYgKzExNTUsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTI1OSw2ICsxMjYzLDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnCmluZGV4IGFjMzlhYjcuLmZlNzg5NjE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjozNyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MTYgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTYsMjcgKzE1NiwyOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjk3LDYgKzI5OSwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01MjUsNiArNTMyLDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MQorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC01NjcsNiArNTc1LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjQwLDExICs2NTQsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogQ09ORklHX1JPTUZTX0ZTPXkKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldApAQCAtNjc3LDYgKzY5MSw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTczOCwxNyArNzUzLDE5IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSJuZnNyb290PTE5Mi4xNjguMTkyLjE2OTovdTEvbWlwc2VsLHRpbWVvPTIwIGlwPWRoY3AiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZwppbmRleCAyYjVlYTM3Li5lNDYyMGU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6MzkgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjE3IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjMsOSArNjMsOSBAQAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU0lPX0U1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fV09SS1BBRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBTkJBQ19UQjAyMlggaXMgbm90IHNldAogQ09ORklHX1ZJQ1RPUl9NUEMzMFg9eQogIyBDT05GSUdfWkFPX0NBUENFTExBIGlzIG5vdCBzZXQKQEAgLTkwLDcgKzkwLDcgQEAKICMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotQ09ORklHX0NQVV9WUjQxWFg9eQorIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldApAQCAtMTAzLDIzICsxMDMsMTggQEAKICMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNfSEFTX0NQVV9WUjQxWFg9eQotQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQogCiAjCiAjIEtlcm5lbCB0eXBlCiAjCi1DT05GSUdfMzJCSVQ9eQorIyBDT05GSUdfMzJCSVQgaXMgbm90IHNldAogIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1BBR0VfU0laRV80S0I9eQogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQEAgLTE1NSwyNiArMTUwLDI4IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTE5MCw3ICsxODcsNiBAQAogIwogIyBCbG9jayBsYXllcgogIwotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0yMjksNyArMjI1LDYgQEAKICMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9WUkM0MTczPXkKIAogIwogIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CkBAIC0yNDEsNyArMjM2LDYgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19UUkFEX1NJR05BTFM9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTI5Niw2ICsyOTAsMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC00NTUsNiArNDU0LDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CkBAIC02MDQsMTEgKzYwNCw2IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1ZSNDFYWD15Ci1DT05GSUdfU0VSSUFMX1ZSNDFYWF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTYyNCw3ICs2MTksNiBAQAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKQEAgLTY0MCw3ICs2MzQsNiBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci1DT05GSUdfR1BJT19WUjQxWFg9eQogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTY1NSw2ICs2NDgsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC03NDAsNiArNzM5LDcgQEAKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwpAQCAtNzYyLDYgKzc2Miw3IEBACiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIApAQCAtODQ2LDExICs4NDcsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtODgzLDYgKzg4NCw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC05NDEsNiArOTQzLDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKaW5kZXggN2FkODcxOC4uOTI1ZDhhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjo0MSAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MTggMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTksMjcgKzE1OSwyOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjkxLDYgKzI5MywyMSBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzI0LDYgKzM0MSwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMzMiw2ICszNTQsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zNDQsNyArMzY3LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDI2LDcgKzQ0OCw3IEBACiAjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfRkNfQVRUUlM9bQogQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQogQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KIApAQCAtNDU1LDEzICs0NzcsNyBAQAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPW0KLSMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC01MjgsNiArNTQ0LDcgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC01NjcsNiArNTg0LDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTU5Miw4ICs2MTAsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQVzIyMDA9bQogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCkBAIC02NzUsNiArNjkxLDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC02ODIsNyArNjk5LDYgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC03MTksNiArNzM1LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzc3LDcgKzc5OSw2IEBACiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU01JVkdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkxBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKQEAgLTg2MSw2ICs4ODIsNyBAQAogIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTg5Myw2ICs5MTUsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtOTk5LDYgKzEwMjIsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKQEAgLTEwNTIsMyArMTA3Niw3IEBACiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZwppbmRleCBlOGQ2YmIzLi5lZTFjZjliIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA2OjQzIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDoxOSAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE1NCwyNiArMTU0LDI4IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTIyMCw3ICsyMjIsNiBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQlVJTERfRUxGNjQgaXMgbm90IHNldAogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CkBAIC0yODEsNiArMjgyLDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzAxLDcgKzMwNyw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9eQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPXkKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD15CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQyMCw2ICs0MjUsNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTQ0MCw2ICs0NDYsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKQEAgLTQ2MSw4ICs0NjgsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQVzIyMDA9eQogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCkBAIC01MzgsNiArNTQzLDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC01NDUsNyArNTUxLDYgQEAKICMKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC01ODMsNiArNTg4LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjY0LDExICs2NzUsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNzAxLDYgKzcxMiw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03NjMsNiArNzc1LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZwppbmRleCBmMzc4N2I2Li5kODBmZjI3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6NDQgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjIwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTU5LDI2ICsxNTksMjggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTI4MCw2ICsyODIsMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC0zMDAsNyArMzA3LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9eQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPXkKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDAzLDYgKzQwOSw3IEBACiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMDAwIE1iaXQpCkBAIC00OTIsNiArNDk5LDcgQEAKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogCiAjCkBAIC01MzQsNiArNTQyLDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNjEzLDExICs2MjcsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNjUwLDYgKzY2NCw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03MTIsNiArNzI3LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcKaW5kZXggYjYxMjZhZC4uYzBmNTA4ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjo0NiAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MjEgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTcsMjYgKzE1NywyOCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yMjMsNyArMjI1LDYgQEAKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JVSUxEX0VMRjY0IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTMzJfQ09NUEFUPXkKIENPTkZJR19DT01QQVQ9eQogQ09ORklHX01JUFMzMl9PMzI9eQpAQCAtMjg0LDYgKzI4NSwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwNCw3ICszMTAsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPXkKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD15Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MjQsNiArNDI5LDcgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC00NDQsNiArNDUwLDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CkBAIC00NjQsOCArNDcxLDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFcyMjAwPXkKIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNTQxLDYgKzU0Niw3IEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTQ4LDcgKzU1NCw2IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNTg2LDYgKzU5MSwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY2NywxMSArNjc4LDExIEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTcwNCw2ICs3MTUsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzY2LDYgKzc3OCw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKaW5kZXggODgzNjI2YS4uMTk0YjNjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA2OjQ4IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDoyMiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE1MywyNiArMTUzLDI5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yODcsNiArMjkwLDIxIEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0zMTQsNiArMzMyLDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzIyLDYgKzM0NSw3IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTMzNCw3ICszNTgsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zOTcsNiArNDIwLDcgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwpAQCAtNTE0LDYgKzUzOCw3IEBACiAjIENPTkZJR19NSUkgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVTFYMDBfRU5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNjE5LDEzICs2NDQsMTMgQEAKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX0NTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfQVUxWDAwPXkKIAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi0jIENPTkZJR19TRVJJQUxfQVUxWDAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQpAQCAtNjcwLDYgKzY5NSwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTc2Nyw2ICs3OTgsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTc5OSw2ICs4MzEsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtOTAzLDYgKzkzNiw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpAQCAtOTU3LDMgKzk5MSw3IEBACiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9bQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCmluZGV4IGY4ZmJjNzcuLjg5ODU3MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjo1MCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MjQgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTIsMjYgKzE1MiwyOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFPXkKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjkzLDYgKzI5NiwyMSBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzIwLDYgKzMzOCwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMyOCw2ICszNTEsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zNDAsNyArMzY0LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDAzLDYgKzQyNiw3IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKQEAgLTU4OSw2ICs2MTMsNyBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTYwOSw2ICs2MzQsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKQEAgLTYyOSw4ICs2NTUsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQVzIyMDA9bQogCiAjCiAjIFBDTUNJQSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC03MjgsMTYgKzc1MiwxNSBAQAogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9BVTFYMDA9eQogCiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKLSMgQ09ORklHX1NFUklBTF9BVTFYMDAgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTc4Miw2ICs4MDUsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC04NzQsNiArOTAzLDcgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC05MDYsNiArOTM2LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwMTAsNiArMTA0MSw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpAQCAtMTA2NCwzICsxMDk2LDcgQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT1tCiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKaW5kZXggM2Q2OTRjZC4uYWRiZjk5NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA2OjUyIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDoyNSAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE1MiwyNiArMTUyLDI5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yOTMsNiArMjk2LDIxIEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0zMjAsNiArMzM4LDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzI4LDYgKzM1MSw3IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTM0MCw3ICszNjQsNiBAQAogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KIENPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC00MDMsNiArNDI2LDcgQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwpAQCAtNTg5LDYgKzYxMyw3IEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNjA5LDYgKzYzNCw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldApAQCAtNjI5LDggKzY1NSw2IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBXMjIwMD1tCiAKICMKICMgUENNQ0lBIG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTcyMCwxNiArNzQ0LDE1IEBACiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX0FVMVgwMD15CiAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwotIyBDT05GSUdfU0VSSUFMX0FVMVgwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNzc0LDYgKzc5NywxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs4OTUsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTg5OCw2ICs5MjgsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTAwMiw2ICsxMDMzLDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CkBAIC0xMDU2LDMgKzEwODgsNyBAQAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KIENPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKaW5kZXggZmJhNjI0YS4uYjVkYjcwMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNjo1NCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MjYgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTEsMjggKzE1MSwzMCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjgxLDYgKzI4MywxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMwOCw3ICszMTUsNyBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNDM1LDcgKzQ0Miw3IEBACiAjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKICMKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCkBAIC00NjQsMTMgKzQ3MSw3IEBACiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTI0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKQEAgLTUyOCw2ICs1MjksNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTU3MSw2ICs1NzMsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldApAQCAtNjY4LDcgKzY3MSw2IEBACiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKICMgQ09ORklHX1NFUklBTF9JUDMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNzA2LDYgKzcwOCwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTgwMSw2ICs4MDksOCBAQAogQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVD15CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwpAQCAtODIzLDYgKzgzMyw3IEBACiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIApAQCAtOTA2LDExICs5MTcsMTEgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtOTQ2LDYgKzk1Nyw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwNDksMTggKzEwNjEsMjAgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TTEFCPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMSwzODQwMG44IGtnZGI9dHR5UzAgcm9vdD0vZGV2L25mcyBpcD1ib290cCIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKaW5kZXggNGM2NTBlNy4uNDE4NzI4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC12MnBjaV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDY6NTggMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjI4IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTUyLDI3ICsxNTIsMjkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjc5LDYgKzI4MSwyMSBAQAogIwogIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtMzEyLDYgKzMyOSwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTMyMCw2ICszNDIsNyBAQAogIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKICMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zMzksNyArMzYyLDcgQEAKICMKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCkBAIC00NjYsNyArNDg5LDcgQEAKICMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcwogIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPW0KLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogCkBAIC01MDAsMTMgKzUyMyw3IEBACiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTI0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKQEAgLTU2NCw2ICs1ODEsNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTYwNyw2ICs2MjUsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldApAQCAtNzIxLDYgKzc0MCw3IEBACiAjIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAogIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAorIyBDT05GSUdfU1lOQ0xJTktfR1QgaXMgbm90IHNldAogIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKICMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAogIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKQEAgLTczNyw3ICs3NTcsNiBAQAogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCiAjIENPTkZJR19TRVJJQUxfSVAzMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTgyNSw2ICs4NDQsMTIgQEAKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTg2Myw2ICs4ODgsNyBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldApAQCAtOTE4LDcgKzk0NCw2IEBACiAjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU01JVkdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkxBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKQEAgLTk4OCwxMyArMTAxMywxNiBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKQEAgLTEwMDgsNiArMTAzNiw3IEBACiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIApAQCAtMTEwNyw2ICsxMTM2LDcgQEAKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC0xMTQyLDYgKzExNzIsNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMjQ2LDYgKzEyNzcsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKQEAgLTEyOTksMyArMTMzMSw3IEBACiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKaW5kZXggYzAyYmVjYS4uMzFmNWFmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CiAjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCi0jIEZyaSBGZWIgIDMgMTc6MTQ6MjcgMjAwNgorIyBTdW4gRmViIDEyIDE5OjE4OjU1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTMzLDcgKzEzMyw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogIyBDT05GSUdfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtMTQ1LDcgKzE0NCw3IEBACiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgpAQCAtMjIyLDYgKzIyMSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtNDc2LDggKzQ3Niw5IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfVU5JWDk4X1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKIAogIwogIyBJUE1JCkBAIC02MjcsNyArNjI4LDcgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLSMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKQEAgLTY4MCwxMiArNjgxLDEzIEBACiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAgZGVidWcgaXA9MTcyLjIwLjAuMjoxNzIuMjAuMC4xOjoyNTUuMjU1LjAuMCIKK0NPTkZJR19DTURMSU5FPSIiCiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAKICMKICMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZwppbmRleCA5YWFhNDMwLi5iMTI2Zjc2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDc6MDMgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjMwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTYwLDI3ICsxNjAsMzAgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci0jIENPTkZJR19LT0JKRUNUX1VFVkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0yOTEsNiArMjk0LDIxIEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCiAjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0zMjQsNiArMzQyLDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzMyLDYgKzM1NSw3IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTQwNyw2ICs0MzEsNyBAQAogIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCkBAIC01OTgsNiArNjIzLDcgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKIAogIwpAQCAtNjU0LDYgKzY4MCw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CkBAIC02ODcsOCArNzE0LDggQEAKICMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKICMKICMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19JUFcyMjAwPW0KKyMgQ09ORklHX0lQVzIyMDBfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKIApAQCAtNzk1LDcgKzgyMiw2IEBACiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKIENPTkZJR19IQVNfVFhYOV9TRVJJQUw9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtODMzLDYgKzg1OSwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTg4Nyw3ICs5MTksNiBAQAogQ09ORklHX0ZCX0FUWT15CiBDT05GSUdfRkJfQVRZX0NUPXkKICMgQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFlfWExfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFlfR1ggaXMgbm90IHNldAogIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CkBAIC04OTYsNyArOTI3LDYgQEAKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TTUlWR1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCTEEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKIApAQCAtOTU4LDEyICs5ODgsMTQgQEAKICMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKQEAgLTk3Nyw2ICsxMDA5LDcgQEAKIENPTkZJR19VU0JfWUVBTElOSz1tCiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIApAQCAtMTA3OCw2ICsxMTExLDcgQEAKICMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC0xMTE1LDYgKzExNDksNyBAQAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiBDT05GSUdfUkVMQVlGU19GUz1tCisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTIyOCw2ICsxMjYzLDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CkBAIC0xMjgxLDMgKzEzMTcsNyBAQAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKaW5kZXggYWJmNjEwOS4uNDYzZWQzZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNzowNiAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MzEgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNjEsMjcgKzE2MSwyOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMjk3LDYgKzI5OSwyOCBAQAogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KQEAgLTMxNSwzOSArMzM5LDIzIEBACiBDT05GSUdfSVBfTkZfUFBUUD1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQogQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TQ1RQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EQ0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQorQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX0lQX05GX05BVD1tCiBDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQpAQCAtMzY0LDEzICszNzIsOSBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQogQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KQEAgLTM4MCwyNiArMzg0LDIwIEBACiAjCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVA2X05GX01BVENIX01BQz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCi1DT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfUEhZU0RFVj1tCitDT05GSUdfSVA2X05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCiAKQEAgLTQ1MSw2ICs0NDksMTEgQEAKICMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKICMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01MzAsNyArNTMzLDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNTQxLDcgKzU0Myw3IEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTY1Nyw3ICs2NTksNyBAQAogIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiBDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQogCkBAIC02NzgsNiArNjgwLDcgQEAKIENPTkZJR19NRUdBUkFJRF9ORVdHRU49eQogQ09ORklHX01FR0FSQUlEX01NPW0KIENPTkZJR19NRUdBUkFJRF9NQUlMQk9YPW0KKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldApAQCAtNzA0LDEzICs3MDcsNyBAQAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldApAQCAtODAxLDYgKzc5OCw3IEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CiAKICMKQEAgLTg1OCw2ICs4NTYsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKIENPTkZJR19WSUFfVkVMT0NJVFk9bQogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTg3OSw4ICs4NzgsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQVzIyMDA9bQogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCkBAIC05NjksNiArOTY2LDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD1tCiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKICMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CkBAIC05NzksNyArOTc3LDYgQEAKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwogQ09ORklHX1NFUklBTF9DT1JFPW0KLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTEwMjEsNiArMTAxOCwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKIENPTkZJR19XMT1tCkBAIC0xMTIzLDEyICsxMTI2LDE1IEBACiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQogQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD1tCiBDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogQ09ORklHX0hJRF9GRj15CiBDT05GSUdfSElEX1BJRD15CiBDT05GSUdfTE9HSVRFQ0hfRkY9eQpAQCAtMTE1MSw2ICsxMTU3LDcgQEAKIENPTkZJR19VU0JfWUVBTElOSz1tCiBDT05GSUdfVVNCX1hQQUQ9bQogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CiAKQEAgLTEzMDksNiArMTMxNiw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz1tCiBDT05GSUdfUk9NRlNfRlM9bQogQ09ORklHX0lOT1RJRlk9eQpAQCAtMTM1MSw2ICsxMzU5LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTE0MzIsNiArMTQ0MSw3IEBACiAjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAKICMKQEAgLTE0ODcsNiArMTQ5Nyw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKaW5kZXggNTIwNDhjOS4uZGE2OGMzZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA3OjA5IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDozMiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE3MywyNyArMTczLDI5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19DUFVTRVRTPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTI0Nyw3ICsyNDksNiBAQAogIwogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfQlVJTERfRUxGNjQgaXMgbm90IHNldAogQ09ORklHX01JUFMzMl9DT01QQVQ9eQogQ09ORklHX0NPTVBBVD15CiBDT05GSUdfTUlQUzMyX08zMj15CkBAIC0zMDksNiArMzEwLDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzI5LDcgKzMzNSw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ3Miw2ICs0NzcsNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTQ5Myw2ICs0OTksNyBAQAogQ09ORklHX05FVF9TQjEyNTBfTUFDPXkKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CkBAIC01MTMsOCArNTIwLDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFcyMjAwPW0KIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNTYwLDEyICs1NjUsMTUgQEAKICMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorIyBDT05GSUdfQ09NUFVUT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQ1lDTEFERVMgaXMgbm90IHNldAogIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAogIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAorIyBDT05GSUdfU1lOQ0xJTktfR1QgaXMgbm90IHNldAogIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWCBpcyBub3Qgc2V0CkBAIC01ODEsNyArNTg5LDYgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjE5LDYgKzYyNiwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY5NiwxMiArNzA5LDEyIEBACiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNzM0LDYgKzc0Nyw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03OTUsNiArODA5LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCmluZGV4IDQxZGQ3MDguLjlhOTM2ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3NlYWRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA3OjEwIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDozMyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTE1MywyNSArMTUzLDI4IEBACiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKIENPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAogQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCiBDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAogQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTMzMCw2ICszMzMsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTM3Miw2ICszNzYsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC00NDQsNyArNDU0LDYgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC00ODEsNiArNDkwLDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTUxMyw2ICs1MjMsNyBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCkBAIC01MjksNiArNTQwLDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwppbmRleCA4Mzk2OTQ2Li5jMmRlZTBkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDc6MTIgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjM0IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjMsMTEgKzYzLDEyIEBACiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FQ19DTUJWUjQxMzMgaXMgbm90IHNldAogIyBDT05GSUdfQ0FTSU9fRTU1IGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9XT1JLUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19DTUJWUjQxMzMgaXMgbm90IHNldAogQ09ORklHX1RBTkJBQ19UQjAyMlg9eQogQ09ORklHX1RBTkJBQ19UQjAyMjY9eQorQ09ORklHX1RBTkJBQ19UQjAyODc9eQogIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAogQ09ORklHX1BDSV9WUjQxWFg9eQpAQCAtOTEsNyArOTIsNyBAQAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjMwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYMzlYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX1ZSNDFYWD15CisjIENPTkZJR19DUFVfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0CkBAIC0xMDQsMjMgKzEwNSwxOCBAQAogIyBDT05GSUdfQ1BVX1JNNzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAotQ09ORklHX1NZU19IQVNfQ1BVX1ZSNDFYWD15Ci1DT05GSUdfU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15Ci1DT05GSUdfU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15Ci1DT05GSUdfQ1BVX1NVUFBPUlRTXzMyQklUX0tFUk5FTD15Ci1DT05GSUdfQ1BVX1NVUFBPUlRTXzY0QklUX0tFUk5FTD15CiAKICMKICMgS2VybmVsIHR5cGUKICMKLUNPTkZJR18zMkJJVD15CisjIENPTkZJR18zMkJJVCBpcyBub3Qgc2V0CiAjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9TSVpFXzRLQj15CiAjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV8xNktCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfU0laRV82NEtCIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfTVQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSEFTX0xMU0M9eQogQ09ORklHX0NQVV9IQVNfU1lOQz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQpAQCAtMTU2LDI2ICsxNTIsMjggQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xOTEsNyArMTg5LDYgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjI5LDcgKzIyNiw2IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yOTMsNiArMjg5LDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzEzLDcgKzMxNCw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTMyNCw3ICszMjQsNyBAQAogIwogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTM5Nyw3ICszOTcsNyBAQAogIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCiAjCiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KICMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIApAQCAtNDI2LDEzICs0MjYsNyBAQAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPXkKLSMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CkBAIC00OTksNiArNDkzLDcgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogCiAjCiAjIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC01MzgsNiArNTMzLDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTU1OSw3ICs1NTUsNiBAQAogIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKICMKICMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNjMwLDExICs2MjUsNiBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9WUjQxWFg9eQotQ09ORklHX1NFUklBTF9WUjQxWFhfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02NTAsNyArNjQwLDYgQEAKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC02NzUsNiArNjY0LDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzcwLDYgKzc2NSw4IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCkBAIC03OTIsNiArNzg5LDcgQEAKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCkBAIC04NzcsMTEgKzg3NSwxMSBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9bQogQ09ORklHX0lOT1RJRlk9eQpAQCAtOTE0LDYgKzkxMiw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xMDIxLDYgKzEwMjAsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCmluZGV4IGNlN2I5ZWQ0Li5iZTk5MjYxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDc6MTUgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjQwOjM1IDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtNjMsMTEgKzYzLDEyIEBACiAjIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FQ19DTUJWUjQxMzMgaXMgbm90IHNldAogIyBDT05GSUdfQ0FTSU9fRTU1IGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9XT1JLUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FQ19DTUJWUjQxMzMgaXMgbm90IHNldAogQ09ORklHX1RBTkJBQ19UQjAyMlg9eQogIyBDT05GSUdfVEFOQkFDX1RCMDIyNiBpcyBub3Qgc2V0CitDT05GSUdfVEFOQkFDX1RCMDI4Nz15CiAjIENPTkZJR19WSUNUT1JfTVBDMzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX1ZSNDFYWD15CkBAIC05MSw3ICs5Miw3IEBACiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfVlI0MVhYPXkKKyMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKQEAgLTEwNCwyMyArMTA1LDE4IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQogIwotQ09ORklHXzMyQklUPXkKKyMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xNTYsMjYgKzE1MiwyOCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xOTEsNyArMTg5LDYgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjI5LDcgKzIyNiw2IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yOTQsNiArMjkwLDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzE0LDcgKzMxNSw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQzNiw2ICs0MzYsNyBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAKICMKICMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTQ4MCw2ICs0ODEsNyBAQAogIyBDT05GSUdfUjgxNjlfTkFQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CkBAIC01MDEsOCArNTAzLDYgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiAjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVBXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFcyMjAwPW0KIAogIwogIyBXYW4gaW50ZXJmYWNlcwpAQCAtNTgzLDExICs1ODMsNiBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9WUjQxWFg9eQotQ09ORklHX1NFUklBTF9WUjQxWFhfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CkBAIC02MDMsNyArNTk4LDYgQEAKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC02MTMsNyArNjA3LDYgQEAKICMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCiAjCiAjIENPTkZJR19EUk0gaXMgbm90IHNldAotQ09ORklHX0dQSU9fVlI0MVhYPXkKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCkBAIC02MjgsNiArNjIxLDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzE1LDYgKzcxNCw3IEBACiAjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKICMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKQEAgLTczNyw2ICs3MzcsNyBAQAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CiAKQEAgLTg0MCw2ICs4NDEsNyBAQAogIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9bQogQ09ORklHX0lOT1RJRlk9eQpAQCAtODc5LDYgKzg4MSw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC05ODYsNiArOTg5LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTUzNDQ4My4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTEwNSArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTQtcmM1LW1tMQotIyBUdWUgT2N0IDI1IDAwOjIwOjIyIDIwMDUKLSMKLUNPTkZJR19NSVBTPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1dBUF9QUkVGRVRDSD15Ci1DT05GSUdfU1lTVklQQz15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotCi0jCi0jIE1hY2hpbmUgc2VsZWN0aW9uCi0jCi0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1NFQUQgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19TSU0gaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19KQUdVQVJfQVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fT0NFTE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fT0NFTE9UXzMgaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX09DRUxPVF9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfWFhTMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTlg4NTUwX1YyUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0REQjUwNzQgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EREI1NDc3IGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX1ZSNDFYWD15Ci0jIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfUUVNVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1BUU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU05JX1JNMjAwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX0pNUjM5MjcgaXMgbm90IHNldAotIyBDT05GSUdfVE9TSElCQV9SQlRYNDkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU0lPX0U1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fV09SS1BBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUNfQ01CVlI0MTMzIGlzIG5vdCBzZXQKLUNPTkZJR19UQU5CQUNfVEIwMjJYPXkKLSMgQ09ORklHX1RBTkJBQ19UQjAyMjYgaXMgbm90IHNldAotQ09ORklHX1RBTkJBQ19UQjAyODc9eQotIyBDT05GSUdfVklDVE9SX01QQzMwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19aQU9fQ0FQQ0VMTEEgaXMgbm90IHNldAotQ09ORklHX1BDSV9WUjQxWFg9eQotIyBDT05GSUdfVlJDNDE3MyBpcyBub3Qgc2V0Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0RNQV9OT05DT0hFUkVOVD15Ci1DT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15Ci0jIENPTkZJR19DUFVfQklHX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQotQ09ORklHX1NZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOPXkKLUNPTkZJR19JUlFfQ1BVPXkKLUNPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUPTUKLQotIwotIyBDUFUgc2VsZWN0aW9uCi0jCi0jIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfVlI0MVhYPXkKLSMgQ09ORklHX0NQVV9SNDMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjRYMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1RYNDlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjUwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I1NDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTkVWQURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SODAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9STTcwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1JNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfU0IxIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLQotIwotIyBLZXJuZWwgdHlwZQotIwotQ09ORklHXzMyQklUPXkKLSMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX1NJWkVfNEtCPXkKLSMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAotIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX0NQVV9IQVNfU1lOQz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLQotIwotIyBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSwgVEMpCi0jCi1DT05GSUdfSFdfSEFTX1BDST15Ci1DT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIFBDSSBIb3RwbHVnIFN1cHBvcnQKLSMKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLQotIwotIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX1RSQURfU0lHTkFMUz15Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15Ci1DT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKLSMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQgaXMgbm90IHNldAotQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLSMgQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkKLQotIwotIyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sCi0jCi1DT05GSUdfVENQX0NPTkdfQklDPXkKLUNPTkZJR19UQ1BfQ09OR19XRVNUV09PRD1tCi1DT05GSUdfVENQX0NPTkdfSFRDUD1tCi0jIENPTkZJR19UQ1BfQ09OR19IU1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19IWUJMQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19WRUdBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0lERURNQV9GT1JDRUQgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX1BDSV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9TSUlNQUdFPXkKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0IExheWVycwotIwotIyBDT05GSUdfU0FTX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwotIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi1DT05GSUdfSUVFRTEzOTQ9bQotCi0jCi0jIFN1YnN5c3RlbSBPcHRpb25zCi0jCi0jIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTRfT1VJX0RCIGlzIG5vdCBzZXQKLUNPTkZJR19JRUVFMTM5NF9FWFRSQV9DT05GSUdfUk9NUz15Ci1DT05GSUdfSUVFRTEzOTRfQ09ORklHX1JPTV9JUDEzOTQ9eQotIyBDT05GSUdfSUVFRTEzOTRfRVhQT1JUX0ZVTExfQVBJIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIFRleGFzIEluc3RydW1lbnRzIFBDSUx5bnggcmVxdWlyZXMgSTJDCi0jCi1DT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9bQotCi0jCi0jIFByb3RvY29sIERyaXZlcnMKLSMKLUNPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQotQ09ORklHX0lFRUUxMzk0X1NCUDI9bQotIyBDT05GSUdfSUVFRTEzOTRfU0JQMl9QSFlTX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCi1DT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KLUNPTkZJR19JRUVFMTM5NF9SQVdJTz1tCi1DT05GSUdfSUVFRTEzOTRfQ01QPW0KLUNPTkZJR19JRUVFMTM5NF9BTURUUD1tCi0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EVU1NWT1tCi0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIEFSQ25ldCBkZXZpY2VzCi0jCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLQotIwotIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLUNPTkZJR19SODE2OT15Ci0jIENPTkZJR19SODE2OV9OQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tHREJPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBUZWxlcGhvbnkgU3VwcG9ydAotIwotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1ZSNDFYWD15Ci1DT05GSUdfU0VSSUFMX1ZSNDFYWF9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfVlI0MVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfVEFOQkFDX1RCMDIxOSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotQ09ORklHX0dQSU9fVlI0MVhYPXkKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBEYWxsYXMncyAxLXdpcmUgYnVzCi0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTcGVha3VwIGNvbnNvbGUgc3BlZWNoCi0jCi0jIENPTkZJR19TUEVBS1VQIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPW0KLUNPTkZJR19VU0JfSElESU5QVVQ9eQotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotCi0jCi0jIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HT1RFTVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERTTCBtb2RlbSBzdXBwb3J0Ci0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEluZmluaUJhbmQgc3VwcG9ydAotIwotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgU04gRGV2aWNlcwotIwotCi0jCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQotIwotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzdHJpYnV0ZWQgTG9jayBNYW5hZ2VyCi0jCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUjRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfWEZTX0ZTPXkKLUNPTkZJR19YRlNfUVVPVEE9eQotIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19YRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfUk9NRlNfRlM9bQotQ09ORklHX0lOT1RJRlk9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX1FVT1RBQ1RMPXkKLSMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLSMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPW0KLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlWUjAsMTE1MjAwIGlwPWFueSByb290PS9kZXYvbmZzIgotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCmluZGV4IDAyYjI1NTEuLjcxMzJlMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjMgotIyBUaHUgTm92IDI0IDAxOjA3OjE3IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgRnJpIEphbiAyNyAxNTo0MDozNiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTYzLDkgKzYzLDkgQEAKICMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAotIyBDT05GSUdfTkVDX0NNQlZSNDEzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNJT19FNTUgaXMgbm90IHNldAogQ09ORklHX0lCTV9XT1JLUEFEPXkKKyMgQ09ORklHX05FQ19DTUJWUjQxMzMgaXMgbm90IHNldAogIyBDT05GSUdfVEFOQkFDX1RCMDIyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUNUT1JfTVBDMzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1pBT19DQVBDRUxMQSBpcyBub3Qgc2V0CkBAIC04OCw3ICs4OCw3IEBACiAjIENPTkZJR19DUFVfTUlQUzY0X1IyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SMzAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFgzOVhYIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfVlI0MVhYPXkKKyMgQ09ORklHX0NQVV9WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1I0MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9SNFgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfVFg0OVhYIGlzIG5vdCBzZXQKQEAgLTEwMSwyMyArMTAxLDE4IEBACiAjIENPTkZJR19DUFVfUk03MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9STTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NCMSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTX0hBU19DUFVfVlI0MVhYPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfNjRCSVRfS0VSTkVMPXkKIAogIwogIyBLZXJuZWwgdHlwZQogIwotQ09ORklHXzMyQklUPXkKKyMgQ09ORklHXzMyQklUIGlzIG5vdCBzZXQKICMgQ09ORklHXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfTExTQz15CiBDT05GSUdfQ1BVX0hBU19TWU5DPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CkBAIC0xNTMsMjYgKzE0OCwyOCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xODgsNyArMTg1LDYgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMjM0LDcgKzIzMCw2IEBACiAjCiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBRF9TSUdOQUxTPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yODksNiArMjg0LDExIEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldApAQCAtMzA5LDcgKzMwOSw2IEBACiAjIENPTkZJR19JRUVFODAyMTFfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVA9bQogQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTQ0NSw2ICs0NDQsNyBAQAogQ09ORklHX01JST1tCiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAogIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKQEAgLTU1NiwxMCArNTU2LDYgQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfVlI0MVhYPXkKLUNPTkZJR19TRVJJQUxfVlI0MVhYX0NPTlNPTEU9eQogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU4OCw3ICs1ODQsNiBAQAogIyBDT05GSUdfV0RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19WUjQxWFggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKQEAgLTYwMiw3ICs1OTcsNiBAQAogIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1ZSNDFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjE3LDYgKzYxMSwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTY5OSwxMiArNjk5LDEyIEBACiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pCRCBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtNzM3LDYgKzczNyw3IEBACiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIENPTkZJR19SRUxBWUZTX0ZTPW0KKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03OTgsNiArNzk5LDcgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0NST1NTQ09NUElMRT15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKaW5kZXggNDY4YzJlNC4uNjc0NTc4NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzIKLSMgVGh1IE5vdiAyNCAwMTowNzoxOSAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIEZyaSBKYW4gMjcgMTU6NDA6MzcgMjAwNgogIwogQ09ORklHX01JUFM9eQogCkBAIC0xNTQsOCArMTU0LDYgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldApAQCAtMTY0LDE5ICsxNjIsMjIgQEAKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMTg0LDYgKzE4NSw3IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQogQ09ORklHX1NUT1BfTUFDSElORT15CkBAIC0yOTUsNyArMjk3LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDEzLDYgKzQxNCw3IEBACiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNDUyLDggKzQ1NCw2IEBACiAjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQogIwogIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQV19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBXMjIwMD1tCiAKICMKICMgV2FuIGludGVyZmFjZXMKQEAgLTQ5OCw2ICs0OTgsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTUwNSw3ICs1MDYsNiBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTU0Miw2ICs1NDIsMTIgQEAKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC02MTUsNyArNjIxLDYgQEAKICMKICMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC02OTQsMTIgKzY5OSwxMyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtNzA3LDYgKzcxMyw3IEBACiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKIENPTkZJR19DTURMSU5FPSIiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMgYi9hcmNoL21pcHMvZGVjL3Byb20vbWVtb3J5LmMKaW5kZXggODNkNDU1Ni4uMWVkYWYzMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2RlYy9wcm9tL21lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9kZWMvcHJvbS9tZW1vcnkuYwpAQCAtNDUsNyArNDUsNyBAQAogCSAqLwogCWZvciAobWVtb3J5X3BhZ2UgPSAodW5zaWduZWQgY2hhciAqKUNLU0VHMSArIENIVU5LX1NJWkU7CiAJICAgICBtZW1fZXJyID09IDAgJiYgbWVtb3J5X3BhZ2UgPCAodW5zaWduZWQgY2hhciAqKUNLU0VHMSArIDB4MWUwMDAwMDsKLSAgCSAgICAgbWVtb3J5X3BhZ2UgKz0gQ0hVTktfU0laRSkgeworCSAgICAgbWVtb3J5X3BhZ2UgKz0gQ0hVTktfU0laRSkgewogCQlkdW1teSA9ICptZW1vcnlfcGFnZTsKIAl9CiAJbWVtY3B5KCh2b2lkICopKENLU0VHMCArIDB4ODApLCAmb2xkX2hhbmRsZXIsIDB4ODApOwpAQCAtMTE4LDcgKzExOCw3IEBACiAJYWRkciA9IFBBR0VfU0laRTsKIAl3aGlsZSAoYWRkciA8IGVuZCkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSkpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKF9fdmEoYWRkcikpKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKV9fdmEoYWRkcikpOwogCQlhZGRyICs9IFBBR0VfU0laRTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVmY29uZmlnIGIvYXJjaC9taXBzL2RlZmNvbmZpZwppbmRleCA0ZjEyNWU5Li40MmQ1Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmMyCi0jIFRodSBOb3YgMjQgMDE6MDU6NDkgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMQorIyBGcmkgSmFuIDI3IDE1OjM5OjUxIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMTU4LDI3ICsxNTgsMjkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0zMTcsNiArMzE5LDI4IEBACiBDT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0zMzUsMzkgKzM1OSwyMyBAQAogQ09ORklHX0lQX05GX1BQVFA9bQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQogQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQogQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU0NUUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRENDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5CWVRFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQorQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX0lQX05GX05BVD1tCiBDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQpAQCAtMzg0LDEzICszOTIsOSBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQogQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KQEAgLTQwMCwyNSArNDA0LDIwIEBACiAjCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCi1DT05GSUdfSVA2X05GX01BVENIX01BQz1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCi1DT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQNl9ORl9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KIApAQCAtNDQ1LDYgKzQ0NCwxMSBAQAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAogIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RJVkVSVD15CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CkBAIC01MDQsNyArNTA4LDYgQEAKICMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCiBDT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNjQxLDYgKzY0NCw3IEBACiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogQ09ORklHX1NHSVNFRVE9eQogCiAjCkBAIC03ODcsNiArNzkxLDEyIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtODkyLDYgKzkwMiw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz1tCiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC05MzQsNiArOTQ1LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogQ09ORklHX1JFTEFZRlNfRlM9bQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTEwMDcsNiArMTAxOSw3IEBACiBDT05GSUdfU0dJX1BBUlRJVElPTj15CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCkBAIC0xMDYyLDYgKzEwNzUsNyBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQ1JPU1NDT01QSUxFPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2ludC1oYW5kbGVyLlMgYi9hcmNoL21pcHMvamF6ei9pbnQtaGFuZGxlci5TCmluZGV4IDRkYmNmOTEuLmRjNzUyYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2ludC1oYW5kbGVyLlMKKysrIGIvYXJjaC9taXBzL2phenovaW50LWhhbmRsZXIuUwpAQCAtMjQ4LDE3ICsyNDgsMTcgQEAKIAkJYW5kCXQyLHMxCiAJCXNoCXQyLEpBWlpfSU9fSVJRX0VOQUJMRQogCi0gCQlub3IJczEsemVybyxzMQorCQlub3IJczEsemVybyxzMQogCQlqYWwJZG9fSVJRCiAKLSAJCS8qCi0gCQkgKiBSZWVuYWJsZSBpbnRlcnJ1cHQKLSAJCSAqLworCQkvKgorCQkgKiBSZWVuYWJsZSBpbnRlcnJ1cHQKKwkJICovCiAJCWxodQl0MixKQVpaX0lPX0lSUV9FTkFCTEUKLSAJCW9yCXQyLHMxCisJCW9yCXQyLHMxCiAJCXNoCXQyLEpBWlpfSU9fSVJRX0VOQUJMRQogCi0gCQlqCXJldF9mcm9tX2lycQorCQlqCXJldF9mcm9tX2lycQogCiAvKgogICogIkp1bXAgZXh0ZW5kZXIiIHRvIHJlYWNoIHNwdXJpb3VzX2ludGVycnVwdApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9iaW5mbXRfZWxmbjMyLmMgYi9hcmNoL21pcHMva2VybmVsL2JpbmZtdF9lbGZuMzIuYwppbmRleCBkOGUyNjc0YTEuLjRhOWYxZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvYmluZm10X2VsZm4zMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvYmluZm10X2VsZm4zMi5jCkBAIC0xMDMsOCArMTAzLDkgQEAKIAkgKiBvbmUgZGl2aWRlLgogCSAqLwogCXU2NCBuc2VjID0gKHU2NClqaWZmaWVzICogVElDS19OU0VDOwotCXZhbHVlLT50dl9zZWMgPSBkaXZfbG9uZ19sb25nX3JlbShuc2VjLCBOU0VDX1BFUl9TRUMsICZ2YWx1ZS0+dHZfdXNlYyk7Ci0JdmFsdWUtPnR2X3VzZWMgLz0gTlNFQ19QRVJfVVNFQzsKKwlsb25nIHJlbTsKKwl2YWx1ZS0+dHZfc2VjID0gZGl2X2xvbmdfbG9uZ19yZW0obnNlYywgTlNFQ19QRVJfU0VDLCAmcmVtKTsKKwl2YWx1ZS0+dHZfdXNlYyA9IHJlbSAvIE5TRUNfUEVSX1VTRUM7CiB9CiAKICNkZWZpbmUgRUxGX0NPUkVfRUZMQUdTIEVGX01JUFNfQUJJMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9iaW5mbXRfZWxmbzMyLmMgYi9hcmNoL21pcHMva2VybmVsL2JpbmZtdF9lbGZvMzIuYwppbmRleCBjZWM1ZjMyLi5lMzE4MTM3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2JpbmZtdF9lbGZvMzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL2JpbmZtdF9lbGZvMzIuYwpAQCAtMTA1LDggKzEwNSw5IEBACiAJICogb25lIGRpdmlkZS4KIAkgKi8KIAl1NjQgbnNlYyA9ICh1NjQpamlmZmllcyAqIFRJQ0tfTlNFQzsKLQl2YWx1ZS0+dHZfc2VjID0gZGl2X2xvbmdfbG9uZ19yZW0obnNlYywgTlNFQ19QRVJfU0VDLCAmdmFsdWUtPnR2X3VzZWMpOwotCXZhbHVlLT50dl91c2VjIC89IE5TRUNfUEVSX1VTRUM7CisJbG9uZyByZW07CisJdmFsdWUtPnR2X3NlYyA9IGRpdl9sb25nX2xvbmdfcmVtKG5zZWMsIE5TRUNfUEVSX1NFQywgJnJlbSk7CisJdmFsdWUtPnR2X3VzZWMgPSByZW0gLyBOU0VDX1BFUl9VU0VDOwogfQogCiAjdW5kZWYgRUxGX0NPUkVfQ09QWV9SRUdTCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwppbmRleCAyOTJmOGIyLi41OGIzYjE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKQEAgLTI5MSw3ICsyOTEsNyBAQAogCQkgKiBmb3IgZG9jdW1lbnRhdGlvbi4gIENvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCBzaGFyZXMKIAkJICogaXQncyBjMF9wcmlkIGlkIG51bWJlciB3aXRoIHRoZSBUWDM5MDAuCiAJCSAqLwotIAkJYy0+Y3B1dHlwZSA9IENQVV9SNDY1MDsKKwkJYy0+Y3B1dHlwZSA9IENQVV9SNDY1MDsKIAkgCWMtPmlzYV9sZXZlbCA9IE1JUFNfQ1BVX0lTQV9JSUk7CiAJCWMtPm9wdGlvbnMgPSBSNEtfT1BUUyB8IE1JUFNfQ1BVX0ZQVSB8IE1JUFNfQ1BVX0xMU0M7CiAJICAgICAgICBjLT50bGJzaXplID0gNDg7CkBAIC02MDQsNyArNjA0LDcgQEAKIAljYXNlIFBSSURfSU1QX0FVMV9SRVYyOgogCQlzd2l0Y2ggKChjLT5wcm9jZXNzb3JfaWQgPj4gMjQpICYgMHhmZikgewogCQljYXNlIDA6Ci0gCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTEwMDA7CisJCQljLT5jcHV0eXBlID0gQ1BVX0FVMTAwMDsKIAkJCWJyZWFrOwogCQljYXNlIDE6CiAJCQljLT5jcHV0eXBlID0gQ1BVX0FVMTUwMDsKQEAgLTcwNSw3ICs3MDUsNyBAQAogCQlicmVhazsKICAJY2FzZSBQUklEX0NPTVBfUEhJTElQUzoKIAkJY3B1X3Byb2JlX3BoaWxpcHMoYyk7Ci0gCQlicmVhazsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYy0+Y3B1dHlwZSA9IENQVV9VTktOT1dOOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZ2RiLWxvdy5TIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKaW5kZXggODNiODk4Ni4uMjM1YWQ5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9nZGItbG93LlMKQEAgLTQxLDcgKzQxLDcgQEAKICAqLwogCQkuYWxpZ24gCTUKIAkJTkVTVEVEKHRyYXBfbG93LCBHREJfRlJfU0laRSwgc3ApCi0gCQkuc2V0CW5vYXQKKwkJLnNldAlub2F0CiAJCS5zZXQgCW5vcmVvcmRlcgogCiAJCW1mYzAJazAsIENQMF9TVEFUVVMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW12NjQzNHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW12NjQzNHguYwppbmRleCAwYWMwNjdmLi4wNjEzZjFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycS1tdjY0MzR4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXY2NDM0eC5jCkBAIC0xMSwxMiArMTEsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CisjaW5jbHVkZSA8YXNtL21hcnZlbGwuaD4KIAogc3RhdGljIHVuc2lnbmVkIGludCBpcnFfYmFzZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKaW5kZXggN2Q5Mzk5Mi4uM2RkNzZiMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCkBAIC02OCw5ICs2OCw4IEBACiAKIAlpZiAoaSA9PSAwKSB7CiAJCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7Ci0JCWZvciAoaj0wOyBqPE5SX0NQVVM7IGorKykKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsaik7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsaik7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogCX0KIApAQCAtODMsOSArODIsOCBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uaGFuZGxlci0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggNjAzNTNmNS4uMDEzYmM5MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTY5LDcgKzY5LDcgQEAKICAqIFJldmFsaWRhdGUgdGhlIGlub2RlLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBwcm9wZXIgTkZTIGF0dHJpYnV0ZSBjYWNoaW5nLgogICovCiAKLWludCBjcF9jb21wYXRfc3RhdChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdCAqc3RhdGJ1ZikKK2ludCBjcF9jb21wYXRfc3RhdChzdHJ1Y3Qga3N0YXQgKnN0YXQsIHN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKnN0YXRidWYpCiB7CiAJc3RydWN0IGNvbXBhdF9zdGF0IHRtcDsKIApAQCAtMTA2LDYgKzEwNiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZXJyb3I7CiAKIAllcnJvciA9IC1FSU5WQUw7CisJaWYgKHBnb2ZmICYgKH5QQUdFX01BU0sgPj4gMTIpKQorCQlnb3RvIG91dDsKKwlwZ29mZiA+Pj0gUEFHRV9TSElGVC0xMjsKKwogCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKIAkJZXJyb3IgPSAtRUJBREY7CiAJCWZpbGUgPSBmZ2V0KGZkKTsKQEAgLTEyNSw3ICsxMjksNyBAQAogfQogCiAKLWFzbWxpbmthZ2UgaW50IHN5c190cnVuY2F0ZTY0KGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBoaWdoLAorYXNtbGlua2FnZSBpbnQgc3lzX3RydW5jYXRlNjQoY29uc3QgY2hhciBfX3VzZXIgKnBhdGgsIHVuc2lnbmVkIGludCBoaWdoLAogCQkJICAgICAgdW5zaWduZWQgaW50IGxvdykKIHsKIAlpZiAoKGludCloaWdoIDwgMCkKQEAgLTE2MSw2NiArMTY1LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0cnVjdCBkaXJlbnQzMiB7Ci0JdW5zaWduZWQgaW50CWRfaW5vOwotCXVuc2lnbmVkIGludAlkX29mZjsKLQl1bnNpZ25lZCBzaG9ydAlkX3JlY2xlbjsKLQljaGFyCQlkX25hbWVbTkFNRV9NQVggKyAxXTsKLX07Ci0KLXN0YXRpYyB2b2lkCi14bGF0ZV9kaXJlbnQodm9pZCAqZGlyZW50NjQsIHZvaWQgKmRpcmVudDMyLCBsb25nIG4pCi17Ci0JbG9uZyBvZmY7Ci0Jc3RydWN0IGRpcmVudCAqZGlycDsKLQlzdHJ1Y3QgZGlyZW50MzIgKmRpcnAzMjsKLQotCW9mZiA9IDA7Ci0Jd2hpbGUgKG9mZiA8IG4pIHsKLQkJZGlycCA9IChzdHJ1Y3QgZGlyZW50ICopKGRpcmVudDY0ICsgb2ZmKTsKLQkJZGlycDMyID0gKHN0cnVjdCBkaXJlbnQzMiAqKShkaXJlbnQzMiArIG9mZik7Ci0JCW9mZiArPSBkaXJwLT5kX3JlY2xlbjsKLQkJZGlycDMyLT5kX2lubyA9IGRpcnAtPmRfaW5vOwotCQlkaXJwMzItPmRfb2ZmID0gKHVuc2lnbmVkIGludClkaXJwLT5kX29mZjsKLQkJZGlycDMyLT5kX3JlY2xlbiA9IGRpcnAtPmRfcmVjbGVuOwotCQlzdHJuY3B5KGRpcnAzMi0+ZF9uYW1lLCBkaXJwLT5kX25hbWUsIGRpcnAtPmRfcmVjbGVuIC0gKCgzICogNCkgKyAyKSk7Ci0JfQotCXJldHVybjsKLX0KLQotYXNtbGlua2FnZSBsb25nCi1zeXMzMl9nZXRkZW50cyh1bnNpZ25lZCBpbnQgZmQsIHZvaWQgKiBkaXJlbnQzMiwgdW5zaWduZWQgaW50IGNvdW50KQotewotCWxvbmcgbjsKLQl2b2lkICpkaXJlbnQ2NDsKLQotCWRpcmVudDY0ID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGRpcmVudDMyICsgKHNpemVvZihsb25nKSAtIDEpKSAmIH4oc2l6ZW9mKGxvbmcpIC0gMSkpOwotCWlmICgobiA9IHN5c19nZXRkZW50cyhmZCwgZGlyZW50NjQsIGNvdW50IC0gKGRpcmVudDY0IC0gZGlyZW50MzIpKSkgPCAwKQotCQlyZXR1cm4obik7Ci0JeGxhdGVfZGlyZW50KGRpcmVudDY0LCBkaXJlbnQzMiwgbik7Ci0JcmV0dXJuKG4pOwotfQotCi1hc21saW5rYWdlIGludCBvbGRfcmVhZGRpcih1bnNpZ25lZCBpbnQgZmQsIHZvaWQgKiBkaXJlbnQsIHVuc2lnbmVkIGludCBjb3VudCk7Ci0KLWFzbWxpbmthZ2UgaW50Ci1zeXMzMl9yZWFkZGlyKHVuc2lnbmVkIGludCBmZCwgdm9pZCAqIGRpcmVudDMyLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JaW50IG47Ci0Jc3RydWN0IGRpcmVudCBkaXJlbnQ2NDsKLQotCWlmICgobiA9IG9sZF9yZWFkZGlyKGZkLCAmZGlyZW50NjQsIGNvdW50KSkgPCAwKQotCQlyZXR1cm4obik7Ci0JeGxhdGVfZGlyZW50KCZkaXJlbnQ2NCwgZGlyZW50MzIsIGRpcmVudDY0LmRfcmVjbGVuKTsKLQlyZXR1cm4obik7Ci19Ci0KLWFzbWxpbmthZ2UgaW50Ci1zeXMzMl93YWl0cGlkKGNvbXBhdF9waWRfdCBwaWQsIHVuc2lnbmVkIGludCAqc3RhdF9hZGRyLCBpbnQgb3B0aW9ucykKLXsKLQlyZXR1cm4gY29tcGF0X3N5c193YWl0NChwaWQsIHN0YXRfYWRkciwgb3B0aW9ucywgTlVMTCk7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZwogc3lzbjMyX3dhaXRpZChpbnQgd2hpY2gsIGNvbXBhdF9waWRfdCBwaWQsCiAJICAgICAgc2lnaW5mb190IF9fdXNlciAqdWluZm8sIGludCBvcHRpb25zLApAQCAtMjI5LDEzICsxNzMsMTkgQEAKIAlzdHJ1Y3QgcnVzYWdlIHJ1OwogCWxvbmcgcmV0OwogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKwlpbnQgc2lfc2lnbm87CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVpbmZvLCBzaXplb2YoKnVpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOwogCiAJc2V0X2ZzIChLRVJORUxfRFMpOwogCXJldCA9IHN5c193YWl0aWQod2hpY2gsIHBpZCwgdWluZm8sIG9wdGlvbnMsCiAJCQkgdXJ1ID8gKHN0cnVjdCBydXNhZ2UgX191c2VyICopICZydSA6IE5VTEwpOwogCXNldF9mcyAob2xkX2ZzKTsKIAotCWlmIChyZXQgPCAwIHx8IHVpbmZvLT5zaV9zaWdubyA9PSAwKQorCWlmIChfX2dldF91c2VyKHNpX3NpZ25vLCAmdWluZm8tPnNpX3NpZ25vKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHJldCA8IDAgfHwgc2lfc2lnbm8gPT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCWlmICh1cnUpCkBAIC0yNTksMTQgKzIwOSwxNCBAQAogCWNoYXIgX2ZbOF07CiB9OwogCi1hc21saW5rYWdlIGludCBzeXMzMl9zeXNpbmZvKHN0cnVjdCBzeXNpbmZvMzIgKmluZm8pCithc21saW5rYWdlIGludCBzeXMzMl9zeXNpbmZvKHN0cnVjdCBzeXNpbmZvMzIgX191c2VyICppbmZvKQogewogCXN0cnVjdCBzeXNpbmZvIHM7CiAJaW50IHJldCwgZXJyOwogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMgKCk7CiAKIAlzZXRfZnMgKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX3N5c2luZm8oJnMpOworCXJldCA9IHN5c19zeXNpbmZvKChzdHJ1Y3Qgc3lzaW5mbyBfX3VzZXIgKikmcyk7CiAJc2V0X2ZzIChvbGRfZnMpOwogCWVyciA9IHB1dF91c2VyIChzLnVwdGltZSwgJmluZm8tPnVwdGltZSk7CiAJZXJyIHw9IF9fcHV0X3VzZXIgKHMubG9hZHNbMF0sICZpbmZvLT5sb2Fkc1swXSk7CkBAIC0yOTYsMTEgKzI0NiwxMSBAQAogfTsKIAogI2lmZGVmIF9fTUlQU0VCX18KLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl90cnVuY2F0ZTY0KGNvbnN0IGNoYXIgKiBwYXRoLCB1bnNpZ25lZCBsb25nIF9fZHVtbXksCithc21saW5rYWdlIGxvbmcgc3lzMzJfdHJ1bmNhdGU2NChjb25zdCBjaGFyIF9fdXNlciAqIHBhdGgsIHVuc2lnbmVkIGxvbmcgX19kdW1teSwKIAlpbnQgbGVuZ3RoX2hpLCBpbnQgbGVuZ3RoX2xvKQogI2VuZGlmCiAjaWZkZWYgX19NSVBTRUxfXwotYXNtbGlua2FnZSBsb25nIHN5czMyX3RydW5jYXRlNjQoY29uc3QgY2hhciAqIHBhdGgsIHVuc2lnbmVkIGxvbmcgX19kdW1teSwKK2FzbWxpbmthZ2UgbG9uZyBzeXMzMl90cnVuY2F0ZTY0KGNvbnN0IGNoYXIgX191c2VyICogcGF0aCwgdW5zaWduZWQgbG9uZyBfX2R1bW15LAogCWludCBsZW5ndGhfbG8sIGludCBsZW5ndGhfaGkpCiAjZW5kaWYKIHsKQEAgLTMyOCw3ICsyNzgsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcKLWdldF90djMyKHN0cnVjdCB0aW1ldmFsICpvLCBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgKmkpCitnZXRfdHYzMihzdHJ1Y3QgdGltZXZhbCAqbywgc3RydWN0IGNvbXBhdF90aW1ldmFsIF9fdXNlciAqaSkKIHsKIAlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGksIHNpemVvZigqaSkpIHx8CiAJCShfX2dldF91c2VyKG8tPnR2X3NlYywgJmktPnR2X3NlYykgfApAQCAtMzM2LDcgKzI4Niw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZwotcHV0X3R2MzIoc3RydWN0IGNvbXBhdF90aW1ldmFsICpvLCBzdHJ1Y3QgdGltZXZhbCAqaSkKK3B1dF90djMyKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKm8sIHN0cnVjdCB0aW1ldmFsICppKQogewogCXJldHVybiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG8sIHNpemVvZigqbykpIHx8CiAJCShfX3B1dF91c2VyKGktPnR2X3NlYywgJm8tPnR2X3NlYykgfApAQCAtMzQ2LDcgKzI5Niw3IEBACiBleHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKIAogYXNtbGlua2FnZSBpbnQKLXN5czMyX2dldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KQorc3lzMzJfZ2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKIHsKIAlpZiAodHYpIHsKIAkJc3RydWN0IHRpbWV2YWwga3R2OwpAQCAtMzYxLDcgKzMxMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBnZXRfdHMzMihzdHJ1Y3QgdGltZXNwZWMgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCAqaSkKK3N0YXRpYyBpbmxpbmUgbG9uZyBnZXRfdHMzMihzdHJ1Y3QgdGltZXNwZWMgKm8sIHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKmkpCiB7CiAJbG9uZyB1c2VjOwogCkBAIC0zNzYsNyArMzI2LDcgQEAKIH0KIAogYXNtbGlua2FnZSBpbnQKLXN5czMyX3NldHRpbWVvZmRheShzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KQorc3lzMzJfc2V0dGltZW9mZGF5KHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgX191c2VyICp0eikKIHsKIAlzdHJ1Y3QgdGltZXNwZWMga3RzOwogCXN0cnVjdCB0aW1lem9uZSBrdHo7CkBAIC0zOTQsNyArMzQ0LDcgQEAKIH0KIAogYXNtbGlua2FnZSBpbnQgc3lzMzJfbGxzZWVrKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IG9mZnNldF9oaWdoLAotCQkJICAgIHVuc2lnbmVkIGludCBvZmZzZXRfbG93LCBsb2ZmX3QgKiByZXN1bHQsCisJCQkgICAgdW5zaWduZWQgaW50IG9mZnNldF9sb3csIGxvZmZfdCBfX3VzZXIgKiByZXN1bHQsCiAJCQkgICAgdW5zaWduZWQgaW50IG9yaWdpbikKIHsKIAlyZXR1cm4gc3lzX2xsc2VlayhmZCwgb2Zmc2V0X2hpZ2gsIG9mZnNldF9sb3csIHJlc3VsdCwgb3JpZ2luKTsKQEAgLTQwNCwxMiArMzU0LDEyIEBACiAgICBsc2VlayBiYWNrIHRvIG9yaWdpbmFsIGxvY2F0aW9uLiAgVGhleSBmYWlsIGp1c3QgbGlrZSBsc2VlayBkb2VzIG9uCiAgICBub24tc2Vla2FibGUgZmlsZXMuICAqLwogCi1hc21saW5rYWdlIHNzaXplX3Qgc3lzMzJfcHJlYWQodW5zaWduZWQgaW50IGZkLCBjaGFyICogYnVmLAorYXNtbGlua2FnZSBzc2l6ZV90IHN5czMyX3ByZWFkKHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKiBidWYsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50LCB1MzIgdW51c2VkLCB1NjQgYTQsIHU2NCBhNSkKIHsKIAlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgZmlsZSAqIGZpbGU7Ci0Jc3NpemVfdCAoKnJlYWQpKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CisJc3NpemVfdCAoKnJlYWQpKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwogCWxvZmZfdCBwb3M7CiAKIAlyZXQgPSAtRUJBREY7CkBAIC00MzksMTIgKzM4OSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWFzbWxpbmthZ2Ugc3NpemVfdCBzeXMzMl9wd3JpdGUodW5zaWduZWQgaW50IGZkLCBjb25zdCBjaGFyICogYnVmLAorYXNtbGlua2FnZSBzc2l6ZV90IHN5czMyX3B3cml0ZSh1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAogCQkJICAgICAgICBzaXplX3QgY291bnQsIHUzMiB1bnVzZWQsIHU2NCBhNCwgdTY0IGE1KQogewogCXNzaXplX3QgcmV0OwogCXN0cnVjdCBmaWxlICogZmlsZTsKLQlzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CisJc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKIAlsb2ZmX3QgcG9zOwogCiAJcmV0ID0gLUVCQURGOwpAQCAtNDc3LDE0ICs0MjcsMTQgQEAKIH0KIAogYXNtbGlua2FnZSBpbnQgc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsKGNvbXBhdF9waWRfdCBwaWQsCi0Jc3RydWN0IGNvbXBhdF90aW1lc3BlYyAqaW50ZXJ2YWwpCisJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKmludGVydmFsKQogewogCXN0cnVjdCB0aW1lc3BlYyB0OwogCWludCByZXQ7CiAJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcyAoKTsKIAogCXNldF9mcyAoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZCwgJnQpOworCXJldCA9IHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkLCAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSZ0KTsKIAlzZXRfZnMgKG9sZF9mcyk7CiAJaWYgKHB1dF91c2VyICh0LnR2X3NlYywgJmludGVydmFsLT50dl9zZWMpIHx8CiAJICAgIF9fcHV0X3VzZXIgKHQudHZfbnNlYywgJmludGVydmFsLT50dl9uc2VjKSkKQEAgLTYwMiw3ICs1NTIsNyBAQAogfTsKIAogc3RhdGljIGludAotZG9fc3lzMzJfc2VtY3RsKGludCBmaXJzdCwgaW50IHNlY29uZCwgaW50IHRoaXJkLCB2b2lkICp1cHRyKQorZG9fc3lzMzJfc2VtY3RsKGludCBmaXJzdCwgaW50IHNlY29uZCwgaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqdXB0cikKIHsKIAl1bmlvbiBzZW11biBmb3VydGg7CiAJdTMyIHBhZDsKQEAgLTYxMywxMiArNTYzLDEyIEBACiAJaWYgKCF1cHRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllcnIgPSAtRUZBVUxUOwotCWlmIChnZXRfdXNlciAocGFkLCAodTMyICopdXB0cikpCisJaWYgKGdldF91c2VyIChwYWQsICh1MzIgX191c2VyICopdXB0cikpCiAJCXJldHVybiBlcnI7CiAJaWYgKCh0aGlyZCAmIH5JUENfNjQpID09IFNFVFZBTCkKIAkJZm91cnRoLnZhbCA9IChpbnQpcGFkOwogCWVsc2UKLQkJZm91cnRoLl9fcGFkID0gKHZvaWQgKilBKHBhZCk7CisJCWZvdXJ0aC5fX3BhZCA9ICh2b2lkIF9fdXNlciAqKUEocGFkKTsKIAlzd2l0Y2ggKHRoaXJkICYgfklQQ182NCkgewogCWNhc2UgSVBDX0lORk86CiAJY2FzZSBJUENfUk1JRDoKQEAgLTYzNiwxNCArNTg2LDE0IEBACiAKIAljYXNlIElQQ19TVEFUOgogCWNhc2UgU0VNX1NUQVQ6Ci0JCWZvdXJ0aC5fX3BhZCA9ICZzOworCQlmb3VydGguX19wYWQgPSAoc3RydWN0IHNlbWlkNjRfZHMgX191c2VyICopJnM7CiAJCW9sZF9mcyA9IGdldF9mcygpOwogCQlzZXRfZnMoS0VSTkVMX0RTKTsKIAkJZXJyID0gc3lzX3NlbWN0bChmaXJzdCwgc2Vjb25kLCB0aGlyZCB8IElQQ182NCwgZm91cnRoKTsKIAkJc2V0X2ZzKG9sZF9mcyk7CiAKIAkJaWYgKHRoaXJkICYgSVBDXzY0KSB7Ci0JCQlzdHJ1Y3Qgc2VtaWQ2NF9kczMyICp1c3A2NCA9IChzdHJ1Y3Qgc2VtaWQ2NF9kczMyICopIEEocGFkKTsKKwkJCXN0cnVjdCBzZW1pZDY0X2RzMzIgX191c2VyICp1c3A2NCA9IChzdHJ1Y3Qgc2VtaWQ2NF9kczMyIF9fdXNlciAqKSBBKHBhZCk7CiAKIAkJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXNwNjQsIHNpemVvZigqdXNwNjQpKSkgewogCQkJCWVyciA9IC1FRkFVTFQ7CkBAIC02NjAsNyArNjEwLDcgQEAKIAkJCWVycjIgfD0gX19wdXRfdXNlcihzLnNlbV9jdGltZSwgJnVzcDY0LT5zZW1fY3RpbWUpOwogCQkJZXJyMiB8PSBfX3B1dF91c2VyKHMuc2VtX25zZW1zLCAmdXNwNjQtPnNlbV9uc2Vtcyk7CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgc2VtaWRfZHMzMiAqdXNwMzIgPSAoc3RydWN0IHNlbWlkX2RzMzIgKikgQShwYWQpOworCQkJc3RydWN0IHNlbWlkX2RzMzIgX191c2VyICp1c3AzMiA9IChzdHJ1Y3Qgc2VtaWRfZHMzMiBfX3VzZXIgKikgQShwYWQpOwogCiAJCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVzcDMyLCBzaXplb2YoKnVzcDMyKSkpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwpAQCAtNjkwLDkgKzY0MCw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRvX3N5czMyX21zZ3NuZCAoaW50IGZpcnN0LCBpbnQgc2Vjb25kLCBpbnQgdGhpcmQsIHZvaWQgKnVwdHIpCitkb19zeXMzMl9tc2dzbmQgKGludCBmaXJzdCwgaW50IHNlY29uZCwgaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqdXB0cikKIHsKLQlzdHJ1Y3QgbXNnYnVmMzIgKnVwID0gKHN0cnVjdCBtc2didWYzMiAqKXVwdHI7CisJc3RydWN0IG1zZ2J1ZjMyIF9fdXNlciAqdXAgPSAoc3RydWN0IG1zZ2J1ZjMyIF9fdXNlciAqKXVwdHI7CiAJc3RydWN0IG1zZ2J1ZiAqcDsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzOwogCWludCBlcnI7CkBAIC03MTEsNyArNjYxLDcgQEAKIAkJZ290byBvdXQ7CiAJb2xkX2ZzID0gZ2V0X2ZzICgpOwogCXNldF9mcyAoS0VSTkVMX0RTKTsKLQllcnIgPSBzeXNfbXNnc25kIChmaXJzdCwgcCwgc2Vjb25kLCB0aGlyZCk7CisJZXJyID0gc3lzX21zZ3NuZCAoZmlyc3QsIChzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqKXAsIHNlY29uZCwgdGhpcmQpOwogCXNldF9mcyAob2xkX2ZzKTsKIG91dDoKIAlrZnJlZSAocCk7CkBAIC03MjEsMTUgKzY3MSwxNSBAQAogCiBzdGF0aWMgaW50CiBkb19zeXMzMl9tc2dyY3YgKGludCBmaXJzdCwgaW50IHNlY29uZCwgaW50IG1zZ3R5cCwgaW50IHRoaXJkLAotCQkgaW50IHZlcnNpb24sIHZvaWQgKnVwdHIpCisJCSBpbnQgdmVyc2lvbiwgdm9pZCBfX3VzZXIgKnVwdHIpCiB7Ci0Jc3RydWN0IG1zZ2J1ZjMyICp1cDsKKwlzdHJ1Y3QgbXNnYnVmMzIgX191c2VyICp1cDsKIAlzdHJ1Y3QgbXNnYnVmICpwOwogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAJaW50IGVycjsKIAogCWlmICghdmVyc2lvbikgewotCQlzdHJ1Y3QgaXBjX2tsdWRnZTMyICp1aXBjayA9IChzdHJ1Y3QgaXBjX2tsdWRnZTMyICopdXB0cjsKKwkJc3RydWN0IGlwY19rbHVkZ2UzMiBfX3VzZXIgKnVpcGNrID0gKHN0cnVjdCBpcGNfa2x1ZGdlMzIgX191c2VyICopdXB0cjsKIAkJc3RydWN0IGlwY19rbHVkZ2UzMiBpcGNrOwogCiAJCWVyciA9IC1FSU5WQUw7CkBAIC03MzgsNyArNjg4LDcgQEAKIAkJZXJyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyICgmaXBjaywgdWlwY2ssIHNpemVvZiAoc3RydWN0IGlwY19rbHVkZ2UzMikpKQogCQkJZ290byBvdXQ7Ci0JCXVwdHIgPSAodm9pZCAqKUFBKGlwY2subXNncCk7CisJCXVwdHIgPSAodm9pZCBfX3VzZXIgKilBQShpcGNrLm1zZ3ApOwogCQltc2d0eXAgPSBpcGNrLm1zZ3R5cDsKIAl9CiAKQEAgLTc1MCwxMSArNzAwLDExIEBACiAJCWdvdG8gb3V0OwogCW9sZF9mcyA9IGdldF9mcyAoKTsKIAlzZXRfZnMgKEtFUk5FTF9EUyk7Ci0JZXJyID0gc3lzX21zZ3JjdiAoZmlyc3QsIHAsIHNlY29uZCArIDQsIG1zZ3R5cCwgdGhpcmQpOworCWVyciA9IHN5c19tc2dyY3YgKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKilwLCBzZWNvbmQgKyA0LCBtc2d0eXAsIHRoaXJkKTsKIAlzZXRfZnMgKG9sZF9mcyk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZnJlZV90aGVuX291dDsKLQl1cCA9IChzdHJ1Y3QgbXNnYnVmMzIgKil1cHRyOworCXVwID0gKHN0cnVjdCBtc2didWYzMiBfX3VzZXIgKil1cHRyOwogCWlmIChwdXRfdXNlciAocC0+bXR5cGUsICZ1cC0+bXR5cGUpIHx8CiAJICAgIF9fY29weV90b191c2VyICgmdXAtPm10ZXh0LCBwLT5tdGV4dCwgZXJyKSkKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTc2NSwxOSArNzE1LDE5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRvX3N5czMyX21zZ2N0bCAoaW50IGZpcnN0LCBpbnQgc2Vjb25kLCB2b2lkICp1cHRyKQorZG9fc3lzMzJfbXNnY3RsIChpbnQgZmlyc3QsIGludCBzZWNvbmQsIHZvaWQgX191c2VyICp1cHRyKQogewogCWludCBlcnIgPSAtRUlOVkFMLCBlcnIyOwogCXN0cnVjdCBtc3FpZDY0X2RzIG07Ci0Jc3RydWN0IG1zcWlkX2RzMzIgKnVwMzIgPSAoc3RydWN0IG1zcWlkX2RzMzIgKil1cHRyOwotCXN0cnVjdCBtc3FpZDY0X2RzMzIgKnVwNjQgPSAoc3RydWN0IG1zcWlkNjRfZHMzMiAqKXVwdHI7CisJc3RydWN0IG1zcWlkX2RzMzIgX191c2VyICp1cDMyID0gKHN0cnVjdCBtc3FpZF9kczMyIF9fdXNlciAqKXVwdHI7CisJc3RydWN0IG1zcWlkNjRfZHMzMiBfX3VzZXIgKnVwNjQgPSAoc3RydWN0IG1zcWlkNjRfZHMzMiBfX3VzZXIgKil1cHRyOwogCW1tX3NlZ21lbnRfdCBvbGRfZnM7CiAKIAlzd2l0Y2ggKHNlY29uZCAmIH5JUENfNjQpIHsKIAljYXNlIElQQ19JTkZPOgogCWNhc2UgSVBDX1JNSUQ6CiAJY2FzZSBNU0dfSU5GTzoKLQkJZXJyID0gc3lzX21zZ2N0bCAoZmlyc3QsIHNlY29uZCwgKHN0cnVjdCBtc3FpZF9kcyAqKXVwdHIpOworCQllcnIgPSBzeXNfbXNnY3RsIChmaXJzdCwgc2Vjb25kLCAoc3RydWN0IG1zcWlkX2RzIF9fdXNlciAqKXVwdHIpOwogCQlicmVhazsKIAogCWNhc2UgSVBDX1NFVDoKQEAgLTgwNCw3ICs3NTQsNyBAQAogCQkJYnJlYWs7CiAJCW9sZF9mcyA9IGdldF9mcygpOwogCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJZXJyID0gc3lzX21zZ2N0bChmaXJzdCwgc2Vjb25kIHwgSVBDXzY0LCAoc3RydWN0IG1zcWlkX2RzICopJm0pOworCQllcnIgPSBzeXNfbXNnY3RsKGZpcnN0LCBzZWNvbmQgfCBJUENfNjQsIChzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICopJm0pOwogCQlzZXRfZnMob2xkX2ZzKTsKIAkJYnJlYWs7CiAKQEAgLTgxMiw3ICs3NjIsNyBAQAogCWNhc2UgTVNHX1NUQVQ6CiAJCW9sZF9mcyA9IGdldF9mcygpOwogCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJZXJyID0gc3lzX21zZ2N0bChmaXJzdCwgc2Vjb25kIHwgSVBDXzY0LCAoc3RydWN0IG1zcWlkX2RzICopJm0pOworCQllcnIgPSBzeXNfbXNnY3RsKGZpcnN0LCBzZWNvbmQgfCBJUENfNjQsIChzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICopJm0pOwogCQlzZXRfZnMob2xkX2ZzKTsKIAkJaWYgKHNlY29uZCAmIElQQ182NCkgewogCQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1cDY0LCBzaXplb2YoKnVwNjQpKSkgewpAQCAtODY2LDEwICs4MTYsMTAgQEAKIH0KIAogc3RhdGljIGludAotZG9fc3lzMzJfc2htYXQgKGludCBmaXJzdCwgaW50IHNlY29uZCwgaW50IHRoaXJkLCBpbnQgdmVyc2lvbiwgdm9pZCAqdXB0cikKK2RvX3N5czMyX3NobWF0IChpbnQgZmlyc3QsIGludCBzZWNvbmQsIGludCB0aGlyZCwgaW50IHZlcnNpb24sIHZvaWQgX191c2VyICp1cHRyKQogewogCXVuc2lnbmVkIGxvbmcgcmFkZHI7Ci0JdTMyICp1YWRkciA9ICh1MzIgKilBKCh1MzIpdGhpcmQpOworCXUzMiBfX3VzZXIgKnVhZGRyID0gKHUzMiBfX3VzZXIgKilBKCh1MzIpdGhpcmQpOwogCWludCBlcnIgPSAtRUlOVkFMOwogCiAJaWYgKHZlcnNpb24gPT0gMSkKQEAgLTg4OCwxMSArODM4LDExIEBACiB9OwogCiBzdGF0aWMgaW50Ci1kb19zeXMzMl9zaG1jdGwgKGludCBmaXJzdCwgaW50IHNlY29uZCwgdm9pZCAqdXB0cikKK2RvX3N5czMyX3NobWN0bCAoaW50IGZpcnN0LCBpbnQgc2Vjb25kLCB2b2lkIF9fdXNlciAqdXB0cikKIHsKLQlzdHJ1Y3Qgc2htaWQ2NF9kczMyICp1cDY0ID0gKHN0cnVjdCBzaG1pZDY0X2RzMzIgKil1cHRyOwotCXN0cnVjdCBzaG1pZF9kczMyICp1cDMyID0gKHN0cnVjdCBzaG1pZF9kczMyICopdXB0cjsKLQlzdHJ1Y3Qgc2htX2luZm8zMiAqdWlwID0gKHN0cnVjdCBzaG1faW5mbzMyICopdXB0cjsKKwlzdHJ1Y3Qgc2htaWQ2NF9kczMyIF9fdXNlciAqdXA2NCA9IChzdHJ1Y3Qgc2htaWQ2NF9kczMyIF9fdXNlciAqKXVwdHI7CisJc3RydWN0IHNobWlkX2RzMzIgX191c2VyICp1cDMyID0gKHN0cnVjdCBzaG1pZF9kczMyIF9fdXNlciAqKXVwdHI7CisJc3RydWN0IHNobV9pbmZvMzIgX191c2VyICp1aXAgPSAoc3RydWN0IHNobV9pbmZvMzIgX191c2VyICopdXB0cjsKIAlpbnQgZXJyID0gLUVGQVVMVCwgZXJyMjsKIAlzdHJ1Y3Qgc2htaWQ2NF9kcyBzNjQ7CiAJbW1fc2VnbWVudF90IG9sZF9mczsKQEAgLTkwNSw3ICs4NTUsNyBAQAogCWNhc2UgSVBDX1JNSUQ6CiAJY2FzZSBTSE1fTE9DSzoKIAljYXNlIFNITV9VTkxPQ0s6Ci0JCWVyciA9IHN5c19zaG1jdGwoZmlyc3QsIHNlY29uZCwgKHN0cnVjdCBzaG1pZF9kcyAqKXVwdHIpOworCQllcnIgPSBzeXNfc2htY3RsKGZpcnN0LCBzZWNvbmQsIChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopdXB0cik7CiAJCWJyZWFrOwogCWNhc2UgSVBDX1NFVDoKIAkJaWYgKHNlY29uZCAmIElQQ182NCkgewpAQCAtOTIxLDcgKzg3MSw3IEBACiAJCQlicmVhazsKIAkJb2xkX2ZzID0gZ2V0X2ZzKCk7CiAJCXNldF9mcyhLRVJORUxfRFMpOwotCQllcnIgPSBzeXNfc2htY3RsKGZpcnN0LCBzZWNvbmQgJiB+SVBDXzY0LCAmcyk7CisJCWVyciA9IHN5c19zaG1jdGwoZmlyc3QsIHNlY29uZCAmIH5JUENfNjQsIChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopJnMpOwogCQlzZXRfZnMob2xkX2ZzKTsKIAkJYnJlYWs7CiAKQEAgLTkyOSw3ICs4NzksNyBAQAogCWNhc2UgU0hNX1NUQVQ6CiAJCW9sZF9mcyA9IGdldF9mcygpOwogCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJZXJyID0gc3lzX3NobWN0bChmaXJzdCwgc2Vjb25kIHwgSVBDXzY0LCAodm9pZCAqKSAmczY0KTsKKwkJZXJyID0gc3lzX3NobWN0bChmaXJzdCwgc2Vjb25kIHwgSVBDXzY0LCAodm9pZCBfX3VzZXIgKikgJnM2NCk7CiAJCXNldF9mcyhvbGRfZnMpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWJyZWFrOwpAQCAtOTc5LDcgKzkyOSw3IEBACiAJY2FzZSBTSE1fSU5GTzoKIAkJb2xkX2ZzID0gZ2V0X2ZzKCk7CiAJCXNldF9mcyhLRVJORUxfRFMpOwotCQllcnIgPSBzeXNfc2htY3RsKGZpcnN0LCBzZWNvbmQsICh2b2lkICopJnNpKTsKKwkJZXJyID0gc3lzX3NobWN0bChmaXJzdCwgc2Vjb25kLCAodm9pZCBfX3VzZXIgKikmc2kpOwogCQlzZXRfZnMob2xkX2ZzKTsKIAkJaWYgKGVyciA8IDApCiAJCQlicmVhazsKQEAgLTEwMDEsMTEgKzk1MSwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc3lzMzJfc2VtdGltZWRvcChpbnQgc2VtaWQsIHN0cnVjdCBzZW1idWYgKnRzZW1zLCBpbnQgbnNlbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNvbXBhdF90aW1lc3BlYyAqdGltZW91dDMyKQorc3RhdGljIGludCBzeXMzMl9zZW10aW1lZG9wKGludCBzZW1pZCwgc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKnRzZW1zLCBpbnQgbnNlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnRpbWVvdXQzMikKIHsKIAlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIHQzMjsKLQlzdHJ1Y3QgdGltZXNwZWMgKnQ2NCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqdDY0KSk7CisJc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdDY0ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCp0NjQpKTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdDMyLCB0aW1lb3V0MzIsIHNpemVvZih0MzIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMDI4LDExICs5NzgsMTEgQEAKIAlzd2l0Y2ggKGNhbGwpIHsKIAljYXNlIFNFTU9QOgogCQkvKiBzdHJ1Y3Qgc2VtYnVmIGlzIHRoZSBzYW1lIG9uIDMyIGFuZCA2NGJpdCA6KSkgKi8KLQkJZXJyID0gc3lzX3NlbXRpbWVkb3AgKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiAqKUFBKHB0ciksIHNlY29uZCwKKwkJZXJyID0gc3lzX3NlbXRpbWVkb3AgKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilBQShwdHIpLCBzZWNvbmQsCiAJCSAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBTRU1USU1FRE9QOgotCQllcnIgPSBzeXMzMl9zZW10aW1lZG9wIChmaXJzdCwgKHN0cnVjdCBzZW1idWYgKilBQShwdHIpLCBzZWNvbmQsCisJCWVyciA9IHN5czMyX3NlbXRpbWVkb3AgKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilBQShwdHIpLCBzZWNvbmQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKilBQShmaWZ0aCkpOwogCQlicmVhazsKIAljYXNlIFNFTUdFVDoKQEAgLTEwNDAsMzYgKzk5MCwzNiBAQAogCQlicmVhazsKIAljYXNlIFNFTUNUTDoKIAkJZXJyID0gZG9fc3lzMzJfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwKLQkJCQkgICAgICAgKHZvaWQgKilBQShwdHIpKTsKKwkJCQkgICAgICAgKHZvaWQgX191c2VyICopQUEocHRyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNU0dTTkQ6CiAJCWVyciA9IGRvX3N5czMyX21zZ3NuZCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsCi0JCQkJICAgICAgICh2b2lkICopQUEocHRyKSk7CisJCQkJICAgICAgICh2b2lkIF9fdXNlciAqKUFBKHB0cikpOwogCQlicmVhazsKIAljYXNlIE1TR1JDVjoKIAkJZXJyID0gZG9fc3lzMzJfbXNncmN2IChmaXJzdCwgc2Vjb25kLCBmaWZ0aCwgdGhpcmQsCi0JCQkJICAgICAgIHZlcnNpb24sICh2b2lkICopQUEocHRyKSk7CisJCQkJICAgICAgIHZlcnNpb24sICh2b2lkIF9fdXNlciAqKUFBKHB0cikpOwogCQlicmVhazsKIAljYXNlIE1TR0dFVDoKIAkJZXJyID0gc3lzX21zZ2dldCAoKGtleV90KSBmaXJzdCwgc2Vjb25kKTsKIAkJYnJlYWs7CiAJY2FzZSBNU0dDVEw6Ci0JCWVyciA9IGRvX3N5czMyX21zZ2N0bCAoZmlyc3QsIHNlY29uZCwgKHZvaWQgKilBQShwdHIpKTsKKwkJZXJyID0gZG9fc3lzMzJfbXNnY3RsIChmaXJzdCwgc2Vjb25kLCAodm9pZCBfX3VzZXIgKilBQShwdHIpKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNITUFUOgogCQllcnIgPSBkb19zeXMzMl9zaG1hdCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsCi0JCQkJICAgICAgdmVyc2lvbiwgKHZvaWQgKilBQShwdHIpKTsKKwkJCQkgICAgICB2ZXJzaW9uLCAodm9pZCBfX3VzZXIgKilBQShwdHIpKTsKIAkJYnJlYWs7CiAJY2FzZSBTSE1EVDoKLQkJZXJyID0gc3lzX3NobWR0ICgoY2hhciAqKUEocHRyKSk7CisJCWVyciA9IHN5c19zaG1kdCAoKGNoYXIgX191c2VyICopQShwdHIpKTsKIAkJYnJlYWs7CiAJY2FzZSBTSE1HRVQ6CiAJCWVyciA9IHN5c19zaG1nZXQgKGZpcnN0LCAodW5zaWduZWQpc2Vjb25kLCB0aGlyZCk7CiAJCWJyZWFrOwogCWNhc2UgU0hNQ1RMOgotCQllcnIgPSBkb19zeXMzMl9zaG1jdGwgKGZpcnN0LCBzZWNvbmQsICh2b2lkICopQUEocHRyKSk7CisJCWVyciA9IGRvX3N5czMyX3NobWN0bCAoZmlyc3QsIHNlY29uZCwgKHZvaWQgX191c2VyICopQUEocHRyKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWVyciA9IC1FSU5WQUw7CkBAIC0xMDgwLDcgKzEwMzAsNyBAQAogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfc2htYXQoaW50IHNobWlkLCBjaGFyIF9fdXNlciAqc2htYWRkciwKLQkJCSAgaW50IHNobWZsZywgaW50MzJfdCAqYWRkcikKKwkJCSAgaW50IHNobWZsZywgaW50MzJfdCBfX3VzZXIgKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyByYWRkcjsKIAlpbnQgZXJyOwpAQCAtMTEwNSwxMiArMTA1NSwxMyBAQAogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfc3lzY3RsKHN0cnVjdCBzeXNjdGxfYXJnczMyICphcmdzKQorYXNtbGlua2FnZSBsb25nIHN5czMyX3N5c2N0bChzdHJ1Y3Qgc3lzY3RsX2FyZ3MzMiBfX3VzZXIgKmFyZ3MpCiB7CiAJc3RydWN0IHN5c2N0bF9hcmdzMzIgdG1wOwogCWludCBlcnJvcjsKLQlzaXplX3Qgb2xkbGVuLCAqb2xkbGVucCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKCgobG9uZykmYXJncy0+X191bnVzZWRbMF0pICsgNykgJiB+NzsKKwlzaXplX3Qgb2xkbGVuOworCXNpemVfdCBfX3VzZXIgKm9sZGxlbnAgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICgoKHVuc2lnbmVkIGxvbmcpJmFyZ3MtPl9fdW51c2VkWzBdKSArIDcpICYgfjc7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgYXJncywgc2l6ZW9mKHRtcCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMjIsMjAgKzEwNzMsMjAgQEAKIAkJICAgYmFzaWNhbGx5IGNvcHkgdGhlIHdob2xlIHN5c2N0bC5jIGhlcmUsIGFuZAogCQkgICBnbGliYydzIF9fc3lzY3RsIHVzZXMgcncgbWVtb3J5IGZvciB0aGUgc3RydWN0dXJlCiAJCSAgIGFueXdheS4gICovCi0JCWlmIChnZXRfdXNlcihvbGRsZW4sICh1MzIgKilBKHRtcC5vbGRsZW5wKSkgfHwKLQkJICAgIHB1dF91c2VyKG9sZGxlbiwgKHNpemVfdCAqKWFkZHIpKQorCQlpZiAoZ2V0X3VzZXIob2xkbGVuLCAodTMyIF9fdXNlciAqKUEodG1wLm9sZGxlbnApKSB8fAorCQkgICAgcHV0X3VzZXIob2xkbGVuLCAoc2l6ZV90IF9fdXNlciAqKWFkZHIpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCW9sZGxlbnAgPSAoc2l6ZV90ICopYWRkcjsKKwkJb2xkbGVucCA9IChzaXplX3QgX191c2VyICopYWRkcjsKIAl9CiAKIAlsb2NrX2tlcm5lbCgpOwotCWVycm9yID0gZG9fc3lzY3RsKChpbnQgKilBKHRtcC5uYW1lKSwgdG1wLm5sZW4sICh2b2lkICopQSh0bXAub2xkdmFsKSwKLQkJCSAgb2xkbGVucCwgKHZvaWQgKilBKHRtcC5uZXd2YWwpLCB0bXAubmV3bGVuKTsKKwllcnJvciA9IGRvX3N5c2N0bCgoaW50IF9fdXNlciAqKUEodG1wLm5hbWUpLCB0bXAubmxlbiwgKHZvaWQgX191c2VyICopQSh0bXAub2xkdmFsKSwKKwkJCSAgb2xkbGVucCwgKHZvaWQgX191c2VyICopQSh0bXAubmV3dmFsKSwgdG1wLm5ld2xlbik7CiAJdW5sb2NrX2tlcm5lbCgpOwogCWlmIChvbGRsZW5wKSB7CiAJCWlmICghZXJyb3IpIHsKLQkJCWlmIChnZXRfdXNlcihvbGRsZW4sIChzaXplX3QgKilhZGRyKSB8fAotCQkJICAgIHB1dF91c2VyKG9sZGxlbiwgKHUzMiAqKUEodG1wLm9sZGxlbnApKSkKKwkJCWlmIChnZXRfdXNlcihvbGRsZW4sIChzaXplX3QgX191c2VyICopYWRkcikgfHwKKwkJCSAgICBwdXRfdXNlcihvbGRsZW4sICh1MzIgX191c2VyICopQSh0bXAub2xkbGVucCkpKQogCQkJCWVycm9yID0gLUVGQVVMVDsKIAkJfQogCQljb3B5X3RvX3VzZXIoYXJncy0+X191bnVzZWQsIHRtcC5fX3VudXNlZCwgc2l6ZW9mKHRtcC5fX3VudXNlZCkpOwpAQCAtMTE0NSw3ICsxMDk2LDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAotYXNtbGlua2FnZSBsb25nIHN5czMyX25ld3VuYW1lKHN0cnVjdCBuZXdfdXRzbmFtZSAqIG5hbWUpCithc21saW5rYWdlIGxvbmcgc3lzMzJfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqIG5hbWUpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTExODAsOSArMTEzMSw5IEBACiAJY2hhcgkJZl9mcGFja1s2XTsKIH07CiAKLWV4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzX3VzdGF0KGRldl90IGRldiwgc3RydWN0IHVzdGF0ICogdWJ1Zik7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c191c3RhdChkZXZfdCBkZXYsIHN0cnVjdCB1c3RhdCBfX3VzZXIgKiB1YnVmKTsKIAotYXNtbGlua2FnZSBpbnQgc3lzMzJfdXN0YXQoZGV2X3QgZGV2LCBzdHJ1Y3QgdXN0YXQzMiAqIHVidWYzMikKK2FzbWxpbmthZ2UgaW50IHN5czMyX3VzdGF0KGRldl90IGRldiwgc3RydWN0IHVzdGF0MzIgX191c2VyICogdWJ1ZjMyKQogewogCWludCBlcnI7CiAgICAgICAgIHN0cnVjdCB1c3RhdCB0bXA7CkBAIC0xMTkwLDcgKzExNDEsNyBAQAogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKIAogCXNldF9mcyhLRVJORUxfRFMpOwotCWVyciA9IHN5c191c3RhdChkZXYsICZ0bXApOworCWVyciA9IHN5c191c3RhdChkZXYsIChzdHJ1Y3QgdXN0YXQgX191c2VyICopJnRtcCk7CiAJc2V0X2ZzIChvbGRfZnMpOwogCiAJaWYgKGVycikKQEAgLTEyMjMsNyArMTE3NCw3IEBACiAKIGV4dGVybiBpbnQgZG9fYWRqdGltZXgoc3RydWN0IHRpbWV4ICopOwogCi1hc21saW5rYWdlIGludCBzeXMzMl9hZGp0aW1leChzdHJ1Y3QgdGltZXgzMiAqdXRwKQorYXNtbGlua2FnZSBpbnQgc3lzMzJfYWRqdGltZXgoc3RydWN0IHRpbWV4MzIgX191c2VyICp1dHApCiB7CiAJc3RydWN0IHRpbWV4IHR4YzsKIAlpbnQgcmV0OwpAQCAtMTI3OSw3ICsxMjMwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1hc21saW5rYWdlIGludCBzeXMzMl9zZW5kZmlsZShpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIGNvbXBhdF9vZmZfdCAqb2Zmc2V0LAorYXNtbGlua2FnZSBpbnQgc3lzMzJfc2VuZGZpbGUoaW50IG91dF9mZCwgaW50IGluX2ZkLCBjb21wYXRfb2ZmX3QgX191c2VyICpvZmZzZXQsCiAJczMyIGNvdW50KQogewogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKQEAgLTEyOTAsNyArMTI0MSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX3NlbmRmaWxlKG91dF9mZCwgaW5fZmQsIG9mZnNldCA/ICZvZiA6IE5VTEwsIGNvdW50KTsKKwlyZXQgPSBzeXNfc2VuZGZpbGUob3V0X2ZkLCBpbl9mZCwgb2Zmc2V0ID8gKG9mZl90IF9fdXNlciAqKSZvZiA6IE5VTEwsIGNvdW50KTsKIAlzZXRfZnMob2xkX2ZzKTsKIAogCWlmIChvZmZzZXQgJiYgcHV0X3VzZXIob2YsIG9mZnNldCkpCkBAIC0xMzIwLDcgKzEyNzEsNyBAQAogICogIGl0IGlzIHNldCBieSB0aGUgY2FsbGVlcy4KICAqLwogCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfc29ja2V0Y2FsbChpbnQgY2FsbCwgdW5zaWduZWQgaW50ICphcmdzMzIpCithc21saW5rYWdlIGxvbmcgc3lzMzJfc29ja2V0Y2FsbChpbnQgY2FsbCwgdW5zaWduZWQgaW50IF9fdXNlciAqYXJnczMyKQogewogCXVuc2lnbmVkIGludCBhWzZdOwogCXVuc2lnbmVkIGludCBhMCxhMTsKQEAgLTEzNDIsNyArMTI5Myw3IEBACiAJCQkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICphZGRyLCBpbnQgX191c2VyICphZGRyX2xlbik7CiAJZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2h1dGRvd24oaW50IGZkLCBpbnQgaG93KTsKIAlleHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c19zZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7Ci0JZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0c29ja29wdChpbnQgZmQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCAqb3B0bGVuKTsKKwlleHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c19nZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKIAlleHRlcm4gYXNtbGlua2FnZSBsb25nIHN5c19zZW5kbXNnKGludCBmZCwgc3RydWN0IG1zZ2hkciBfX3VzZXIgKm1zZywgdW5zaWduZWQgZmxhZ3MpOwogCWV4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzX3JlY3Ztc2coaW50IGZkLCBzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqbXNnLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCkBAIC0xNDUwLDI1ICsxNDAxLDYgQEAKIAlyZXR1cm4gc3lzX3RpbWVyX2NyZWF0ZShjbG9jaywgcCwgdGltZXJfaWQpOwogfQogCi1hc21saW5rYWdlIGxvbmcKLXN5c24zMl9ydF9zaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgX191c2VyICp1dGhlc2UsCi0JCSAgICAgICBzaWdpbmZvX3QgX191c2VyICp1aW5mbywKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICp1dHMzMiwKLQkJICAgICAgIHNpemVfdCBzaWdzZXRzaXplKQotewotCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnV0cyA9IE5VTEw7Ci0KLQlpZiAodXRzMzIpIHsKLQkJc3RydWN0IHRpbWVzcGVjIHRzOwotCQl1dHMgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IHRpbWVzcGVjKSk7Ci0JCWlmIChnZXRfdXNlcih0cy50dl9zZWMsICZ1dHMzMi0+dHZfc2VjKSB8fAotCQkgICAgZ2V0X3VzZXIodHMudHZfbnNlYywgJnV0czMyLT50dl9uc2VjKSB8fAotCQkgICAgY29weV90b191c2VyICh1dHMsICZ0cywgc2l6ZW9mICh0cykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXJldHVybiBzeXNfcnRfc2lndGltZWR3YWl0KHV0aGVzZSwgdWluZm8sIHV0cywgc2lnc2V0c2l6ZSk7Ci19Ci0KIHNhdmVfc3RhdGljX2Z1bmN0aW9uKHN5czMyX2Nsb25lKTsKIF9fYXR0cmlidXRlX3VzZWRfXyBub2lubGluZSBzdGF0aWMgaW50CiBfc3lzMzJfY2xvbmUobmFiaV9ub19yZWdhcmdzIHN0cnVjdCBwdF9yZWdzIHJlZ3MpCkBAIC0xNDgxLDcgKzE0MTMsNyBAQAogCW5ld3NwID0gcmVncy5yZWdzWzVdOwogCWlmICghbmV3c3ApCiAJCW5ld3NwID0gcmVncy5yZWdzWzI5XTsKLQlwYXJlbnRfdGlkcHRyID0gKGludCAqKSByZWdzLnJlZ3NbNl07CisJcGFyZW50X3RpZHB0ciA9IChpbnQgX191c2VyICopIHJlZ3MucmVnc1s2XTsKIAogCS8qIFVzZSBfX2R1bW15NCBpbnN0ZWFkIG9mIGdldHRpbmcgaXQgb2ZmIHRoZSBzdGFjaywgc28gdGhhdAogCSAgIHN5c2NhbGwoKSB3b3Jrcy4gICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3Byb2MuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jCmluZGV4IDg2ZmUxNWIuLjg0YWI5NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jCkBAIC0xMzUsNiArMTM1LDcgQEAKIAkgICAgICAgIGNwdV9oYXNfdmNlID8gIiV1IiA6ICJub3QgYXZhaWxhYmxlIik7CiAJc2VxX3ByaW50ZihtLCBmbXQsICdEJywgdmNlZF9jb3VudCk7CiAJc2VxX3ByaW50ZihtLCBmbXQsICdJJywgdmNlaV9jb3VudCk7CisJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwOTI2NzljLi5hOGY0MzVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjAsMTcgKzYwLDkgQEAKIAl9CiB9CiAKLWV4dGVybiB2b2lkIGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gdm9pZCBkb19zaWduYWwzMihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KIC8qCiAgKiBOYXRpdmUgbzMyIGFuZCBONjQgQUJJIHdpdGhvdXQgRFNQIEFTRQogICovCi1leHRlcm4gaW50IHNldHVwX2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqIGthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLSAgICAgICAgaW50IHNpZ25yLCBzaWdzZXRfdCAqc2V0KTsKLWV4dGVybiBpbnQgc2V0dXBfcnRfZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbyk7Ci0KIHN0cnVjdCBtaXBzX2FiaSBtaXBzX2FiaSA9IHsKIAkuZG9fc2lnbmFsCT0gZG9fc2lnbmFsLAogI2lmZGVmIENPTkZJR19UUkFEX1NJR05BTFMKQEAgLTgzLDExICs3NSw2IEBACiAvKgogICogbzMyIGNvbXBhdGliaWxpdHkgb24gNjQtYml0IGtlcm5lbHMsIHdpdGhvdXQgRFNQIEFTRQogICovCi1leHRlcm4gaW50IHNldHVwX2ZyYW1lXzMyKHN0cnVjdCBrX3NpZ2FjdGlvbiAqIGthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLSAgICAgICAgaW50IHNpZ25yLCBzaWdzZXRfdCAqc2V0KTsKLWV4dGVybiBpbnQgc2V0dXBfcnRfZnJhbWVfMzIoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbyk7Ci0KIHN0cnVjdCBtaXBzX2FiaSBtaXBzX2FiaV8zMiA9IHsKIAkuZG9fc2lnbmFsCT0gZG9fc2lnbmFsMzIsCiAJLnNldHVwX2ZyYW1lCT0gc2V0dXBfZnJhbWVfMzIsCkBAIC05OSw5ICs4Niw2IEBACiAvKgogICogTjMyIG9uIDY0LWJpdCBrZXJuZWxzLCB3aXRob3V0IERTUCBBU0UKICAqLwotZXh0ZXJuIGludCBzZXR1cF9ydF9mcmFtZV9uMzIoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbyk7Ci0KIHN0cnVjdCBtaXBzX2FiaSBtaXBzX2FiaV9uMzIgPSB7CiAJLmRvX3NpZ25hbAk9IGRvX3NpZ25hbCwKIAkuc2V0dXBfcnRfZnJhbWUJPSBzZXR1cF9ydF9mcmFtZV9uMzIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwppbmRleCBkODNlMDMzLi4yZjJkYzU0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCkBAIC02MjYsNyArNjI2LDcgQEAKIAlzeXMJc3lzX2ZzdGF0YXQ2NAkJNAogCXN5cwlzeXNfdW5saW5rYXQJCTMKIAlzeXMJc3lzX3JlbmFtZWF0CQk0CS8qIDQyOTUgKi8KLQlzeXMJc3lzX2xpbmthdAkJNAorCXN5cwlzeXNfbGlua2F0CQk1CiAJc3lzCXN5c19zeW1saW5rYXQJCTMKIAlzeXMJc3lzX3JlYWRsaW5rYXQJCTQKIAlzeXMJc3lzX2ZjaG1vZGF0CQkzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggYmM0OTgwYy4uMDJjODI2NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJUFRSCXN5c19mZGF0YXN5bmMKIAlQVFIJc3lzX3RydW5jYXRlCiAJUFRSCXN5c19mdHJ1bmNhdGUJCQkvKiA2MDc1ICovCi0JUFRSCXN5czMyX2dldGRlbnRzCisJUFRSCWNvbXBhdF9zeXNfZ2V0ZGVudHMKIAlQVFIJc3lzX2dldGN3ZAogCVBUUglzeXNfY2hkaXIKIAlQVFIJc3lzX2ZjaGRpcgpAQCAtMjQ1LDkgKzI0NSw5IEBACiAJUFRSCXN5c19jYXBnZXQKIAlQVFIJc3lzX2NhcHNldAogCVBUUglzeXMzMl9ydF9zaWdwZW5kaW5nCQkvKiA2MTI1ICovCi0JUFRSCXN5c24zMl9ydF9zaWd0aW1lZHdhaXQKKwlQVFIJY29tcGF0X3N5c19ydF9zaWd0aW1lZHdhaXQKIAlQVFIJc3lzX3J0X3NpZ3F1ZXVlaW5mbwotCVBUUglzeXMzMl9ydF9zaWdzdXNwZW5kCisJUFRSCXN5c24zMl9ydF9zaWdzdXNwZW5kCiAJUFRSCXN5czMyX3NpZ2FsdHN0YWNrCiAJUFRSCWNvbXBhdF9zeXNfdXRpbWUJCS8qIDYxMzAgKi8KIAlQVFIJc3lzX21rbm9kCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggNWIwNDE0MC4uNzk3ZTBkOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMjkzLDcgKzI5Myw3IEBACiAJUFRSCXN5c191c2VsaWIKIAlQVFIJc3lzX3N3YXBvbgogCVBUUglzeXNfcmVib290Ci0JUFRSCXN5czMyX3JlYWRkaXIKKwlQVFIJY29tcGF0X3N5c19vbGRfcmVhZGRpcgogCVBUUglvbGRfbW1hcAkJCS8qIDQwOTAgKi8KIAlQVFIJc3lzX211bm1hcAogCVBUUglzeXNfdHJ1bmNhdGUKQEAgLTM0NSw3ICszNDUsNyBAQAogCVBUUglzeXNfc2V0ZnN1aWQKIAlQVFIJc3lzX3NldGZzZ2lkCiAJUFRSCXN5czMyX2xsc2VlawkJCS8qIDQxNDAgKi8KLQlQVFIJc3lzMzJfZ2V0ZGVudHMKKwlQVFIJY29tcGF0X3N5c19nZXRkZW50cwogCVBUUgljb21wYXRfc3lzX3NlbGVjdAogCVBUUglzeXNfZmxvY2sKIAlQVFIJc3lzX21zeW5jCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKaW5kZXggZDg2YWZmYS4uMGNiM2I2MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwpAQCAtNDQ3LDIxICs0NDcsMTAgQEAKIHsKIAlpbnQgaTsKIAotI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKSAmJiAhZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCi0JLyoKLQkgKiBUaGUgNjRiaXQgY29kZSBpbiAzMmJpdCBvYmplY3QgZm9ybWF0IHRyaWNrIGNhbid0IHJlcHJlc2VudAotCSAqIDY0Yml0IHdpZGUgcmVsb2NhdGlvbnMgZm9yIGxpbmtlciBzY3JpcHQgc3ltYm9scy4KLQkgKi8KLQljb2RlX3Jlc291cmNlLnN0YXJ0ID0gQ1BIWVNBRERSKCZfdGV4dCk7Ci0JY29kZV9yZXNvdXJjZS5lbmQgPSBDUEhZU0FERFIoJl9ldGV4dCkgLSAxOwotCWRhdGFfcmVzb3VyY2Uuc3RhcnQgPSBDUEhZU0FERFIoJl9ldGV4dCk7Ci0JZGF0YV9yZXNvdXJjZS5lbmQgPSBDUEhZU0FERFIoJl9lZGF0YSkgLSAxOwotI2Vsc2UKIAljb2RlX3Jlc291cmNlLnN0YXJ0ID0gdmlydF90b19waHlzKCZfdGV4dCk7CiAJY29kZV9yZXNvdXJjZS5lbmQgPSB2aXJ0X3RvX3BoeXMoJl9ldGV4dCkgLSAxOwogCWRhdGFfcmVzb3VyY2Uuc3RhcnQgPSB2aXJ0X3RvX3BoeXMoJl9ldGV4dCk7CiAJZGF0YV9yZXNvdXJjZS5lbmQgPSB2aXJ0X3RvX3BoeXMoJl9lZGF0YSkgLSAxOwotI2VuZGlmCiAKIAkvKgogCSAqIFJlcXVlc3QgYWRkcmVzcyBzcGFjZSBmb3IgYWxsIHN0YW5kYXJkIFJBTS4KQEAgLTU0MCw2ICs1MjksOSBAQAogCXNwYXJzZV9pbml0KCk7CiAJcGFnaW5nX2luaXQoKTsKIAlyZXNvdXJjZV9pbml0KCk7CisjaWZkZWYgQ09ORklHX1NNUAorCXBsYXRfc21wX3NldHVwKCk7CisjZW5kaWYKIH0KIAogaW50IF9faW5pdCBmcHVfZGlzYWJsZShjaGFyICpzKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwtY29tbW9uLmggYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaAppbmRleCAzNmJmYzI1Li4zY2E3ODYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaAorKysgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC1jb21tb24uaApAQCAtMTY2LDExICsxNjYsMTEgQEAKIAlzcCA9IHJlZ3MtPnJlZ3NbMjldOwogCiAJLyoKLSAJICogRlBVIGVtdWxhdG9yIG1heSBoYXZlIGl0J3Mgb3duIHRyYW1wb2xpbmUgYWN0aXZlIGp1c3QKLSAJICogYWJvdmUgdGhlIHVzZXIgc3RhY2ssIDE2LWJ5dGVzIGJlZm9yZSB0aGUgbmV4dCBsb3dlc3QKLSAJICogMTYgYnl0ZSBib3VuZGFyeS4gIFRyeSB0byBhdm9pZCB0cmFzaGluZyBpdC4KLSAJICovCi0gCXNwIC09IDMyOworCSAqIEZQVSBlbXVsYXRvciBtYXkgaGF2ZSBpdCdzIG93biB0cmFtcG9saW5lIGFjdGl2ZSBqdXN0CisJICogYWJvdmUgdGhlIHVzZXIgc3RhY2ssIDE2LWJ5dGVzIGJlZm9yZSB0aGUgbmV4dCBsb3dlc3QKKwkgKiAxNiBieXRlIGJvdW5kYXJ5LiAgVHJ5IHRvIGF2b2lkIHRyYXNoaW5nIGl0LgorCSAqLworCXNwIC09IDMyOwogCiAJLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCiAJaWYgKChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSAmJiAoc2FzX3NzX2ZsYWdzIChzcCkgPT0gMCkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYwppbmRleCBjOTc0Y2M5Li40MDJlZmQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKQEAgLTEwMCw4ICsxMDAsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1RSQURfU0lHTkFMUwotYXNtbGlua2FnZSBpbnQgc3lzX3NpZ2FjdGlvbihpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICphY3QsCi0Jc3RydWN0IHNpZ2FjdGlvbiAqb2FjdCkKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKmFjdCwKKwlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCkKIHsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24gbmV3X2thLCBvbGRfa2E7CiAJaW50IHJldDsKQEAgLTMzMSw3ICszMzEsNyBAQAogCS8qIENyZWF0ZSB0aGUgdWNvbnRleHQuICAqLwogCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+cnNfdWMudWNfZmxhZ3MpOwogCWVyciB8PSBfX3B1dF91c2VyKE5VTEwsICZmcmFtZS0+cnNfdWMudWNfbGluayk7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgKiljdXJyZW50LT5zYXNfc3Nfc3AsCisJZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgX191c2VyICopY3VycmVudC0+c2FzX3NzX3NwLAogCSAgICAgICAgICAgICAgICAgICZmcmFtZS0+cnNfdWMudWNfc3RhY2suc3Nfc3ApOwogCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5yZWdzWzI5XSksCiAJICAgICAgICAgICAgICAgICAgJmZyYW1lLT5yc191Yy51Y19zdGFjay5zc19mbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggOGE4YjhkZC4uZjMyYTIyOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYwpAQCAtNCw3ICs0LDcgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwotICogQ29weXJpZ2h0IChDKSAxOTk0IC0gMjAwMCAgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAyMDAwLCAyMDA2ICBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgpAQCAtMTA2LDggKzEwNiw2IEBACiAKICNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCiAKLWV4dGVybiBpbnQgZG9fc2lnbmFsMzIoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotCiAvKiAzMi1iaXQgY29tcGF0aWJpbGl0eSB0eXBlcyAqLwogCiAjZGVmaW5lIF9OU0lHX0JQVzMyCTMyCkBAIC0xNjUsNyArMTYzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBnZXRfc2lnc2V0KHNpZ3NldF90ICprYnVmLCBjb25zdCBjb21wYXRfc2lnc2V0X3QgKnVidWYpCitzdGF0aWMgaW5saW5lIGludCBnZXRfc2lnc2V0KHNpZ3NldF90ICprYnVmLCBjb25zdCBjb21wYXRfc2lnc2V0X3QgX191c2VyICp1YnVmKQogewogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgc2lnWzRdOwpAQCAtMTk3LDY2ICsxOTUsNTggQEAKIF9fYXR0cmlidXRlX3VzZWRfXyBub2lubGluZSBzdGF0aWMgaW50CiBfc3lzMzJfc2lnc3VzcGVuZChuYWJpX25vX3JlZ2FyZ3Mgc3RydWN0IHB0X3JlZ3MgcmVncykKIHsKLQljb21wYXRfc2lnc2V0X3QgKnVzZXQ7Ci0Jc2lnc2V0X3QgbmV3c2V0LCBzYXZlc2V0OworCWNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnVzZXQ7CisJc2lnc2V0X3QgbmV3c2V0OwogCi0JdXNldCA9IChjb21wYXRfc2lnc2V0X3QgKikgcmVncy5yZWdzWzRdOworCXVzZXQgPSAoY29tcGF0X3NpZ3NldF90IF9fdXNlciAqKSByZWdzLnJlZ3NbNF07CiAJaWYgKGdldF9zaWdzZXQoJm5ld3NldCwgdXNldCkpCiAJCXJldHVybiAtRUZBVUxUOwogCXNpZ2RlbHNldG1hc2soJm5ld3NldCwgfl9CTE9DS0FCTEUpOwogCiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CisJY3VycmVudC0+c2F2ZWRfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7CiAJY3VycmVudC0+YmxvY2tlZCA9IG5ld3NldDsKIAlyZWNhbGNfc2lncGVuZGluZygpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlyZWdzLnJlZ3NbMl0gPSBFSU5UUjsKLQlyZWdzLnJlZ3NbN10gPSAxOwotCXdoaWxlICgxKSB7Ci0JCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQlzY2hlZHVsZSgpOwotCQlpZiAoZG9fc2lnbmFsMzIoJnNhdmVzZXQsICZyZWdzKSkKLQkJCXJldHVybiAtRUlOVFI7Ci0JfQorCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCXNjaGVkdWxlKCk7CisJc2V0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOworCXJldHVybiAtRVJFU1RBUlROT0hBTkQ7CiB9CiAKIHNhdmVfc3RhdGljX2Z1bmN0aW9uKHN5czMyX3J0X3NpZ3N1c3BlbmQpOwogX19hdHRyaWJ1dGVfdXNlZF9fIG5vaW5saW5lIHN0YXRpYyBpbnQKIF9zeXMzMl9ydF9zaWdzdXNwZW5kKG5hYmlfbm9fcmVnYXJncyBzdHJ1Y3QgcHRfcmVncyByZWdzKQogewotCWNvbXBhdF9zaWdzZXRfdCAqdXNldDsKLQlzaWdzZXRfdCBuZXdzZXQsIHNhdmVzZXQ7Ci0gICAgICAgIHNpemVfdCBzaWdzZXRzaXplOworCWNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnVzZXQ7CisJc2lnc2V0X3QgbmV3c2V0OworCXNpemVfdCBzaWdzZXRzaXplOwogCiAJLyogWFhYIERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAgKi8KIAlzaWdzZXRzaXplID0gcmVncy5yZWdzWzVdOwogCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihjb21wYXRfc2lnc2V0X3QpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXVzZXQgPSAoY29tcGF0X3NpZ3NldF90ICopIHJlZ3MucmVnc1s0XTsKKwl1c2V0ID0gKGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKikgcmVncy5yZWdzWzRdOwogCWlmIChnZXRfc2lnc2V0KCZuZXdzZXQsIHVzZXQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlzaWdkZWxzZXRtYXNrKCZuZXdzZXQsIH5fQkxPQ0tBQkxFKTsKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXNhdmVzZXQgPSBjdXJyZW50LT5ibG9ja2VkOworCWN1cnJlbnQtPnNhdmVkX3NpZ21hc2sgPSBjdXJyZW50LT5ibG9ja2VkOwogCWN1cnJlbnQtPmJsb2NrZWQgPSBuZXdzZXQ7Ci0gICAgICAgIHJlY2FsY19zaWdwZW5kaW5nKCk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCi0JcmVncy5yZWdzWzJdID0gRUlOVFI7Ci0JcmVncy5yZWdzWzddID0gMTsKLQl3aGlsZSAoMSkgewotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKLQkJc2NoZWR1bGUoKTsKLQkJaWYgKGRvX3NpZ25hbDMyKCZzYXZlc2V0LCAmcmVncykpCi0JCQlyZXR1cm4gLUVJTlRSOwotCX0KKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwlzY2hlZHVsZSgpOworCXNldF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwogfQogCi1hc21saW5rYWdlIGludCBzeXMzMl9zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbjMyICphY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbjMyICpvYWN0KQorYXNtbGlua2FnZSBpbnQgc3lzMzJfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKmFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uMzIgX191c2VyICpvYWN0KQogewogCXN0cnVjdCBrX3NpZ2FjdGlvbiBuZXdfa2EsIG9sZF9rYTsKIAlpbnQgcmV0OwpAQCAtMjgyLDE1ICsyNzIsMTUgQEAKIAogCWlmICghcmV0ICYmIG9hY3QpIHsKIAkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBvYWN0LCBzaXplb2YoKm9hY3QpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWVyciB8PSBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9mbGFncywgJm9hY3QtPnNhX2ZsYWdzKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoKHUzMikodTY0KW9sZF9rYS5zYS5zYV9oYW5kbGVyLAogCQkgICAgICAgICAgICAgICAgICAmb2FjdC0+c2FfaGFuZGxlcik7CiAJCWVyciB8PSBfX3B1dF91c2VyKG9sZF9rYS5zYS5zYV9tYXNrLnNpZ1swXSwgb2FjdC0+c2FfbWFzay5zaWcpOwotICAgICAgICAgICAgICAgIGVyciB8PSBfX3B1dF91c2VyKDAsICZvYWN0LT5zYV9tYXNrLnNpZ1sxXSk7Ci0gICAgICAgICAgICAgICAgZXJyIHw9IF9fcHV0X3VzZXIoMCwgJm9hY3QtPnNhX21hc2suc2lnWzJdKTsKLSAgICAgICAgICAgICAgICBlcnIgfD0gX19wdXRfdXNlcigwLCAmb2FjdC0+c2FfbWFzay5zaWdbM10pOwotICAgICAgICAgICAgICAgIGlmIChlcnIpCisJCWVyciB8PSBfX3B1dF91c2VyKDAsICZvYWN0LT5zYV9tYXNrLnNpZ1sxXSk7CisJCWVyciB8PSBfX3B1dF91c2VyKDAsICZvYWN0LT5zYV9tYXNrLnNpZ1syXSk7CisJCWVyciB8PSBfX3B1dF91c2VyKDAsICZvYWN0LT5zYV9tYXNrLnNpZ1szXSk7CisJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTMxMSw3ICszMDEsNyBAQAogCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXNzLCBzaXplb2YoKnVzcykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWVyciB8PSBfX2dldF91c2VyKHNwLCAmdXNzLT5zc19zcCk7Ci0JCWtzcy5zc19zcCA9ICh2b2lkICopIChsb25nKSBzcDsKKwkJa3NzLnNzX3NwID0gKHZvaWQgX191c2VyICopIChsb25nKSBzcDsKIAkJZXJyIHw9IF9fZ2V0X3VzZXIoa3NzLnNzX3NpemUsICZ1c3MtPnNzX3NpemUpOwogCQllcnIgfD0gX19nZXRfdXNlcihrc3Muc3NfZmxhZ3MsICZ1c3MtPnNzX2ZsYWdzKTsKIAkJaWYgKGVycikKQEAgLTMyNiw3ICszMTYsNyBAQAogCWlmICghcmV0ICYmIHVvc3MpIHsKIAkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1b3NzLCBzaXplb2YoKnVvc3MpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlzcCA9IChpbnQpIChsb25nKSBrb3NzLnNzX3NwOworCQlzcCA9IChpbnQpICh1bnNpZ25lZCBsb25nKSBrb3NzLnNzX3NwOwogCQllcnIgfD0gX19wdXRfdXNlcihzcCwgJnVvc3MtPnNzX3NwKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoa29zcy5zc19zaXplLCAmdW9zcy0+c3Nfc2l6ZSk7CiAJCWVyciB8PSBfX3B1dF91c2VyKGtvc3Muc3NfZmxhZ3MsICZ1b3NzLT5zc19mbGFncyk7CkBAIC01MzcsNyArNTI3LDcgQEAKIAkvKiBUaGUgdWNvbnRleHQgY29udGFpbnMgYSBzdGFjazMyX3QsIHNvIHdlIG11c3QgY29udmVydCEgICovCiAJaWYgKF9fZ2V0X3VzZXIoc3AsICZmcmFtZS0+cnNfdWMudWNfc3RhY2suc3Nfc3ApKQogCQlnb3RvIGJhZGZyYW1lOwotCXN0LnNzX3NwID0gKHZvaWQgKikobG9uZykgc3A7CisJc3Quc3Nfc3AgPSAodm9pZCBfX3VzZXIgKikobG9uZykgc3A7CiAJaWYgKF9fZ2V0X3VzZXIoc3Quc3Nfc2l6ZSwgJmZyYW1lLT5yc191Yy51Y19zdGFjay5zc19zaXplKSkKIAkJZ290byBiYWRmcmFtZTsKIAlpZiAoX19nZXRfdXNlcihzdC5zc19mbGFncywgJmZyYW1lLT5yc191Yy51Y19zdGFjay5zc19mbGFncykpCkBAIC02MzQsMTEgKzYyNCwxMSBAQAogCXNwID0gcmVncy0+cmVnc1syOV07CiAKIAkvKgotIAkgKiBGUFUgZW11bGF0b3IgbWF5IGhhdmUgaXQncyBvd24gdHJhbXBvbGluZSBhY3RpdmUganVzdAotIAkgKiBhYm92ZSB0aGUgdXNlciBzdGFjaywgMTYtYnl0ZXMgYmVmb3JlIHRoZSBuZXh0IGxvd2VzdAotIAkgKiAxNiBieXRlIGJvdW5kYXJ5LiAgVHJ5IHRvIGF2b2lkIHRyYXNoaW5nIGl0LgotIAkgKi8KLSAJc3AgLT0gMzI7CisJICogRlBVIGVtdWxhdG9yIG1heSBoYXZlIGl0J3Mgb3duIHRyYW1wb2xpbmUgYWN0aXZlIGp1c3QKKwkgKiBhYm92ZSB0aGUgdXNlciBzdGFjaywgMTYtYnl0ZXMgYmVmb3JlIHRoZSBuZXh0IGxvd2VzdAorCSAqIDE2IGJ5dGUgYm91bmRhcnkuICBUcnkgdG8gYXZvaWQgdHJhc2hpbmcgaXQuCisJICovCisJc3AgLT0gMzI7CiAKIAkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KIAlpZiAoKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spICYmIChzYXNfc3NfZmxhZ3MgKHNwKSA9PSAwKSkKQEAgLTc4Myw3ICs3NzMsNyBAQAogCQlyZWdzLT5yZWdzWzJdID0gRUlOVFI7CiAJCWJyZWFrOwogCWNhc2UgRVJFU1RBUlRTWVM6Ci0JCWlmKCEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpIHsKKwkJaWYgKCEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpIHsKIAkJCXJlZ3MtPnJlZ3NbMl0gPSBFSU5UUjsKIAkJCWJyZWFrOwogCQl9CkBAIC04MTAsOSArODAwLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGRvX3NpZ25hbDMyKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCBkb19zaWduYWwzMihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CisJc2lnc2V0X3QgKm9sZHNldDsKIAlzaWdpbmZvX3QgaW5mbzsKIAlpbnQgc2lnbnI7CiAKQEAgLTgyMiwxNyArODEzLDMwIEBACiAJICogaWYgc28uCiAJICovCiAJaWYgKCF1c2VyX21vZGUocmVncykpCi0JCXJldHVybiAxOworCQlyZXR1cm47CiAKIAlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQogCQlnb3RvIG5vX3NpZ25hbDsKIAotCWlmICghb2xkc2V0KQorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQorCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKKwllbHNlCiAJCW9sZHNldCA9ICZjdXJyZW50LT5ibG9ja2VkOwogCiAJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7Ci0JaWYgKHNpZ25yID4gMCkKLQkJcmV0dXJuIGhhbmRsZV9zaWduYWwoc2lnbnIsICZpbmZvLCAma2EsIG9sZHNldCwgcmVncyk7CisJaWYgKHNpZ25yID4gMCkgeworCQkvKiBXaGVlISBBY3R1YWxseSBkZWxpdmVyIHRoZSBzaWduYWwuICovCisJCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAmaW5mbywgJmthLCBvbGRzZXQsIHJlZ3MpID09IDApIHsKKwkJCS8qCisJCQkqIEEgc2lnbmFsIHdhcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkOyB0aGUgc2F2ZWQKKwkJCSogc2lnbWFzayB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHNpZ25hbCBmcmFtZSwKKwkJCSogYW5kIHdpbGwgYmUgcmVzdG9yZWQgYnkgc2lncmV0dXJuLCBzbyB3ZSBjYW4gc2ltcGx5CisJCQkqIGNsZWFyIHRoZSBUSUZfUkVTVE9SRV9TSUdNQVNLIGZsYWcuCisJCQkqLworCQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCisJCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJCX0KKwl9CiAKIG5vX3NpZ25hbDoKIAkvKgpAQCAtODUzLDEwICs4NTcsMTggQEAKIAkJCXJlZ3MtPmNwMF9lcGMgLT0gNDsKIAkJfQogCX0KLQlyZXR1cm4gMDsKKworCS8qCisJKiBJZiB0aGVyZSdzIG5vIHNpZ25hbCB0byBkZWxpdmVyLCB3ZSBqdXN0IHB1dCB0aGUgc2F2ZWQgc2lnbWFzaworCSogYmFjaworCSovCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmY3VycmVudC0+c2F2ZWRfc2lnbWFzaywgTlVMTCk7CisJfQogfQogCi1hc21saW5rYWdlIGludCBzeXMzMl9ydF9zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbjMyICphY3QsCithc21saW5rYWdlIGludCBzeXMzMl9ydF9zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbjMyIF9fdXNlciAqYWN0LAogCQkJCSAgc3RydWN0IHNpZ2FjdGlvbjMyIF9fdXNlciAqb2FjdCwKIAkJCQkgIHVuc2lnbmVkIGludCBzaWdzZXRzaXplKQogewpAQCAtOTAwLDcgKzkxMiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotYXNtbGlua2FnZSBpbnQgc3lzMzJfcnRfc2lncHJvY21hc2soaW50IGhvdywgY29tcGF0X3NpZ3NldF90ICpzZXQsCithc21saW5rYWdlIGludCBzeXMzMl9ydF9zaWdwcm9jbWFzayhpbnQgaG93LCBjb21wYXRfc2lnc2V0X3QgX191c2VyICpzZXQsCiAJY29tcGF0X3NpZ3NldF90IF9fdXNlciAqb3NldCwgdW5zaWduZWQgaW50IHNpZ3NldHNpemUpCiB7CiAJc2lnc2V0X3Qgb2xkX3NldCwgbmV3X3NldDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsX24zMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWxfbjMyLmMKaW5kZXggNWEzNzc2MC4uNDc3YzUzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWxfbjMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zaWduYWxfbjMyLmMKQEAgLTgxLDYgKzgxLDQwIEBACiAjZW5kaWYKIH07CiAKK2V4dGVybiB2b2lkIHNpZ3NldF9mcm9tX2NvbXBhdCAoc2lnc2V0X3QgKnNldCwgY29tcGF0X3NpZ3NldF90ICpjb21wYXQpOworCitzYXZlX3N0YXRpY19mdW5jdGlvbihzeXNuMzJfcnRfc2lnc3VzcGVuZCk7CitfX2F0dHJpYnV0ZV91c2VkX18gbm9pbmxpbmUgc3RhdGljIGludAorX3N5c24zMl9ydF9zaWdzdXNwZW5kKG5hYmlfbm9fcmVnYXJncyBzdHJ1Y3QgcHRfcmVncyByZWdzKQoreworCWNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKnVuZXdzZXQ7CisJY29tcGF0X3NpZ3NldF90IHVzZXQ7CisJc2l6ZV90IHNpZ3NldHNpemU7CisJc2lnc2V0X3QgbmV3c2V0OworCisJLyogWFhYIERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAgKi8KKwlzaWdzZXRzaXplID0gcmVncy5yZWdzWzVdOworCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihzaWdzZXRfdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJdW5ld3NldCA9IChjb21wYXRfc2lnc2V0X3QgX191c2VyICopIHJlZ3MucmVnc1s0XTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXQsIHVuZXdzZXQsIHNpemVvZih1c2V0KSkpCisJCXJldHVybiAtRUZBVUxUOworCXNpZ3NldF9mcm9tX2NvbXBhdCAoJm5ld3NldCwgJnVzZXQpOworCXNpZ2RlbHNldG1hc2soJm5ld3NldCwgfl9CTE9DS0FCTEUpOworCisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJY3VycmVudC0+c2F2ZWRfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7CisJY3VycmVudC0+YmxvY2tlZCA9IG5ld3NldDsKKyAgICAgICAgcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJc2NoZWR1bGUoKTsKKwlzZXRfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJcmV0dXJuIC1FUkVTVEFSVE5PSEFORDsKK30KKwogc2F2ZV9zdGF0aWNfZnVuY3Rpb24oc3lzbjMyX3J0X3NpZ3JldHVybik7CiBfX2F0dHJpYnV0ZV91c2VkX18gbm9pbmxpbmUgc3RhdGljIHZvaWQKIF9zeXNuMzJfcnRfc2lncmV0dXJuKG5hYmlfbm9fcmVnYXJncyBzdHJ1Y3QgcHRfcmVncyByZWdzKQpAQCAtMTA4LDcgKzE0Miw3IEBACiAJLyogVGhlIHVjb250ZXh0IGNvbnRhaW5zIGEgc3RhY2szMl90LCBzbyB3ZSBtdXN0IGNvbnZlcnQhICAqLwogCWlmIChfX2dldF91c2VyKHNwLCAmZnJhbWUtPnJzX3VjLnVjX3N0YWNrLnNzX3NwKSkKIAkJZ290byBiYWRmcmFtZTsKLQlzdC5zc19zcCA9ICh2b2lkICopKGxvbmcpIHNwOworCXN0LnNzX3NwID0gKHZvaWQgX191c2VyICopKGxvbmcpIHNwOwogCWlmIChfX2dldF91c2VyKHN0LnNzX3NpemUsICZmcmFtZS0+cnNfdWMudWNfc3RhY2suc3Nfc2l6ZSkpCiAJCWdvdG8gYmFkZnJhbWU7CiAJaWYgKF9fZ2V0X3VzZXIoc3Quc3NfZmxhZ3MsICZmcmFtZS0+cnNfdWMudWNfc3RhY2suc3NfZmxhZ3MpKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKaW5kZXggMjU0NzJmYy4uNzhkMTcxYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xNjYsOCArMTY3LDggQEAKIAltYigpOwogCiAJLyogU2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG90aGVyIENQVXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gcmVzcG9uZCAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCi0JCWlmIChjcHVfb25saW5lKGkpICYmIGkgIT0gY3B1KQorCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJaWYgKGkgIT0gY3B1KQogCQkJY29yZV9zZW5kX2lwaShpLCBTTVBfQ0FMTF9GVU5DVElPTik7CiAKIAkvKiBXYWl0IGZvciByZXNwb25zZSAqLwpAQCAtMjM1LDcgKzIzNiw3IEBACiAJaW5pdF9uZXdfY29udGV4dChjdXJyZW50LCAmaW5pdF9tbSk7CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSAwOwogCXNtcF90dW5lX3NjaGVkdWxpbmcoKTsKLQlwcm9tX3ByZXBhcmVfY3B1cyhtYXhfY3B1cyk7CisJcGxhdF9wcmVwYXJlX2NwdXMobWF4X2NwdXMpOwogfQogCiAvKiBwcmVsb2FkIFNNUCBzdGF0ZSBmb3IgYm9vdCBjcHUgKi8KQEAgLTQyNCw2ICs0MjUsMjUgQEAKIAlsb2NhbF9mbHVzaF90bGJfb25lKHZhZGRyKTsKIH0KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKKworc3RhdGljIGludCBfX2luaXQgdG9wb2xvZ3lfaW5pdCh2b2lkKQoreworCWludCBjcHU7CisJaW50IHJldDsKKworCWZvcl9lYWNoX2NwdShjcHUpIHsKKwkJcmV0ID0gcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBjcHUpLCBjcHUsIE5VTEwpOworCQlpZiAocmV0KQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidG9wb2xvZ3lfaW5pdDogcmVnaXN0ZXJfY3B1ICVkICIKKwkJCSAgICAgICAiZmFpbGVkICglZClcbiIsIGNwdSwgcmV0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKHRvcG9sb2d5X2luaXQpOworCiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKIEVYUE9SVF9TWU1CT0woZmx1c2hfdGxiX29uZSk7CiBFWFBPUlRfU1lNQk9MKGNwdV9kYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wX210LmMgYi9hcmNoL21pcHMva2VybmVsL3NtcF9tdC5jCmluZGV4IGM5MzAzNjQuLjk5M2I4YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wX210LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXBfbXQuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAgKiBNYWtlIHN1cmUgYWxsIENQVSdzIGFyZSBpbiBhIHNlbnNpYmxlIHN0YXRlIGJlZm9yZSB3ZSBib290IGFueSBvZiB0aGUKICAqIHNlY29uZGFyeXMKICAqLwotdm9pZCBwcm9tX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit2b2lkIHBsYXRfc21wX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGksIG51bTsKQEAgLTE3OSwxMSArMTc5LDkgQEAKIAkJCQl3cml0ZV92cGVfYzBfdnBlY29uZjAodG1wKTsKIAogCQkJCS8qIFJlY29yZCB0aGlzIGFzIGF2YWlsYWJsZSBDUFUgKi8KLQkJCQlpZiAoaSA8IG1heF9jcHVzKSB7Ci0JCQkJCWNwdV9zZXQoaSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCQkJCQlfX2NwdV9udW1iZXJfbWFwW2ldCT0gKytudW07Ci0JCQkJCV9fY3B1X2xvZ2ljYWxfbWFwW251bV0JPSBpOwotCQkJCX0KKwkJCQljcHVfc2V0KGksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKwkJCQlfX2NwdV9udW1iZXJfbWFwW2ldCT0gKytudW07CisJCQkJX19jcHVfbG9naWNhbF9tYXBbbnVtXQk9IGk7CiAJCQl9CiAKIAkJCS8qIGRpc2FibGUgbXVsdGktdGhyZWFkaW5nIHdpdGggVEMncyAqLwpAQCAtMjQxLDcgKzIzOSwxMCBAQAogCQlzZXRfdmlfaGFuZGxlciAoTUlQU19DUFVfSVBJX1JFU0NIRURfSVJRLCBpcGlfcmVzY2hlZF9kaXNwYXRjaCk7CiAJCXNldF92aV9oYW5kbGVyIChNSVBTX0NQVV9JUElfQ0FMTF9JUlEsIGlwaV9jYWxsX2Rpc3BhdGNoKTsKIAl9Cit9CiAKK3ZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKIAljcHVfaXBpX3Jlc2NoZWRfaXJxID0gTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX0lQSV9SRVNDSEVEX0lSUTsKIAljcHVfaXBpX2NhbGxfaXJxID0gTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNfQ1BVX0lQSV9DQUxMX0lSUTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwppbmRleCAxZGEyZWViLi4yYWVhYTJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwpAQCAtMTYyLDcgKzE2MiwxMCBAQAogc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQogewotCXJldHVybiBkb19tbWFwMihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYpOworCWlmIChwZ29mZiAmICh+UEFHRV9NQVNLID4+IDEyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZG9fbW1hcDIoYWRkciwgbGVuLCBwcm90LCBmbGFncywgZmQsIHBnb2ZmID4+IChQQUdFX1NISUZULTEyKSk7CiB9CiAKIHNhdmVfc3RhdGljX2Z1bmN0aW9uKHN5c19mb3JrKTsKQEAgLTM0NSw3ICszNDgsNyBAQAogCQl1bmlvbiBzZW11biBmb3VydGg7CiAJCWlmICghcHRyKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkICpfX3VzZXIgKikgcHRyKSkKKwkJaWYgKGdldF91c2VyKGZvdXJ0aC5fX3BhZCwgKHZvaWQgX191c2VyICpfX3VzZXIgKikgcHRyKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gc3lzX3NlbWN0bCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNpcml4LmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYwppbmRleCAwZmMzNzMwLi41NDA3Yjc4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2lyaXguYwpAQCAtNjQ1LDI3ICs2NDUsNyBAQAogCiBhc21saW5rYWdlIHVuc2lnbmVkIGludCBpcml4X2FsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRzKQogewotCXN0cnVjdCBpdGltZXJ2YWwgaXRfbmV3LCBpdF9vbGQ7Ci0JdW5zaWduZWQgaW50IG9sZGFsYXJtOwotCi0JaWYgKCFzZWNvbmRzKSB7Ci0JCWdldGl0aW1lcl9yZWFsKCZpdF9vbGQpOwotCQlkZWxfdGltZXIoJmN1cnJlbnQtPnJlYWxfdGltZXIpOwotCX0gZWxzZSB7Ci0JCWl0X25ldy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdF9uZXcuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IDA7Ci0JCWl0X25ldy5pdF92YWx1ZS50dl9zZWMgPSBzZWNvbmRzOwotCQlpdF9uZXcuaXRfdmFsdWUudHZfdXNlYyA9IDA7Ci0JCWRvX3NldGl0aW1lcihJVElNRVJfUkVBTCwgJml0X25ldywgJml0X29sZCk7Ci0JfQotCW9sZGFsYXJtID0gaXRfb2xkLml0X3ZhbHVlLnR2X3NlYzsKLQkvKgotCSAqIGVoaGguLiBXZSBjYW4ndCByZXR1cm4gMCBpZiB3ZSBoYXZlIGFuIGFsYXJtIHBlbmRpbmcgLi4uCi0JICogQW5kIHdlJ2QgYmV0dGVyIHJldHVybiB0b28gbXVjaCB0aGFuIHRvbyBsaXR0bGUgYW55d2F5Ci0JICovCi0JaWYgKGl0X29sZC5pdF92YWx1ZS50dl91c2VjKQotCQlvbGRhbGFybSsrOwotCi0JcmV0dXJuIG9sZGFsYXJtOworCXJldHVybiBhbGFybV9zZXRpdGltZXIoc2Vjb25kcyk7CiB9CiAKIGFzbWxpbmthZ2UgaW50IGlyaXhfcGF1c2Uodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKaW5kZXggNzA1MGI0Zi4uNTEyNzNiNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2VxOwogCXVuc2lnbmVkIGxvbmcgbG9zdDsKIAl1bnNpZ25lZCBsb25nIHVzZWMsIHNlYzsKLQl1bnNpZ25lZCBsb25nIG1heF9udHBfdGljayA9IHRpY2tfdXNlYyAtIHRpY2thZGo7CisJdW5zaWduZWQgbG9uZyBtYXhfbnRwX3RpY2s7CiAKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwpAQCAtMTc4LDEyICsxNzgsMTMgQEAKIAkJICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpIHsKKwkJCW1heF9udHBfdGljayA9IChVU0VDX1BFUl9TRUMgLyBIWikgLSB0aWNrYWRqOwogCQkJdXNlYyA9IG1pbih1c2VjLCBtYXhfbnRwX3RpY2spOwogCiAJCQlpZiAobG9zdCkKIAkJCQl1c2VjICs9IGxvc3QgKiBtYXhfbnRwX3RpY2s7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkobG9zdCkpCi0JCQl1c2VjICs9IGxvc3QgKiB0aWNrX3VzZWM7CisJCQl1c2VjICs9IGxvc3QgKiAoVVNFQ19QRVJfU0VDIC8gSFopOwogCiAJCXNlYyA9IHh0aW1lLnR2X3NlYzsKIAkJdXNlYyArPSAoeHRpbWUudHZfbnNlYyAvIDEwMDApOwpAQCAtNDIzLDYgKzQyNCw4IEBACiAJdW5zaWduZWQgbG9uZyBqOwogCXVuc2lnbmVkIGludCBjb3VudDsKIAorCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCiAJY291bnQgPSBtaXBzX2hwdF9yZWFkKCk7CiAJbWlwc190aW1lcl9hY2soKTsKIApAQCAtNDQwLDcgKzQ0Myw2IEBACiAJICogQ01PUyBjbG9jayBhY2NvcmRpbmdseSBldmVyeSB+MTEgbWludXRlcy4gcnRjX3NldF90aW1lKCkgaGFzIHRvIGJlCiAJICogY2FsbGVkIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIDUwMCBtcyBiZWZvcmUgdGhlIG5ldyBzZWNvbmQgc3RhcnRzLgogCSAqLwotCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwogCWlmIChudHBfc3luY2VkKCkgJiYKIAkgICAgeHRpbWUudHZfc2VjID4gbGFzdF9ydGNfdXBkYXRlICsgNjYwICYmCiAJICAgICh4dGltZS50dl9uc2VjIC8gMTAwMCkgPj0gNTAwMDAwIC0gKCh1bnNpZ25lZCkgVElDS19TSVpFKSAvIDIgJiYKQEAgLTQ1Miw3ICs0NTQsNiBAQAogCQkJbGFzdF9ydGNfdXBkYXRlID0geHRpbWUudHZfc2VjIC0gNjAwOwogCQl9CiAJfQotCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CiAKIAkvKgogCSAqIElmIGppZmZpZXMgaGFzIG92ZXJmbG93biBpbiB0aGlzIHRpbWVyX2ludGVycnVwdCwgd2UgbXVzdApAQCAtNDk1LDYgKzQ5Niw4IEBACiAJCX0KIAl9CiAKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCiAJLyoKIAkgKiBJbiBVUCBtb2RlLCB3ZSBjYWxsIGxvY2FsX3RpbWVyX2ludGVycnVwdCgpIHRvIGRvIHByb2ZpbGluZwogCSAqIGFuZCBwcm9jZXNzIGFjY291dGluZy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCBjOWQyYjUxLi5iZWQwZWI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC0zLDcgKzMsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAxOTk5LCAyMDAwLCAwMSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5NCAtIDE5OTksIDIwMDAsIDAxLCAwNiBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBQYXVsIE0uIEFudG9pbmUKICAqIENvcHlyaWdodCAoQykgMTk5OCBVbGYgQ2FybHNzb24KICAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCkBAIC01NDgsNiArNTQ4LDggQEAKIHsKIAlzaWdpbmZvX3QgaW5mbzsKIAorCWRpZV9pZl9rZXJuZWwoIkludGVnZXIgb3ZlcmZsb3ciLCByZWdzKTsKKwogCWluZm8uc2lfY29kZSA9IEZQRV9JTlRPVkY7CiAJaW5mby5zaV9zaWdubyA9IFNJR0ZQRTsKIAlpbmZvLnNpX2Vycm5vID0gMDsKQEAgLTU3NCw3ICs1NzYsNyBAQAogCQl9CiAjZW5kaWYKIAkJLyoKLQkgCSAqIFVuaW1wbGVtZW50ZWQgb3BlcmF0aW9uIGV4Y2VwdGlvbi4gIElmIHdlJ3ZlIGdvdCB0aGUgZnVsbAorCQkgKiBVbmltcGxlbWVudGVkIG9wZXJhdGlvbiBleGNlcHRpb24uICBJZiB3ZSd2ZSBnb3QgdGhlIGZ1bGwKIAkJICogc29mdHdhcmUgZW11bGF0b3Igb24tYm9hcmQsIGxldCdzIHVzZSBpdC4uLgogCQkgKgogCQkgKiBGb3JjZSBGUFUgdG8gZHVtcCBzdGF0ZSBpbnRvIHRhc2svdGhyZWFkIGNvbnRleHQuICBXZSdyZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGZmNjk5ZGIuLjJhZDBjZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTEwNiw2ICsxMDYsOSBAQAogICAuY29uX2luaXRjYWxsLmluaXQgOiB7ICooLmNvbl9pbml0Y2FsbC5pbml0KSB9CiAgIF9fY29uX2luaXRjYWxsX2VuZCA9IC47CiAgIFNFQ1VSSVRZX0lOSVQKKyAgICAvKiAuZXhpdC50ZXh0IGlzIGRpc2NhcmRlZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0byBkZWFsIHdpdGgKKyAgICAgcmVmZXJlbmNlcyBmcm9tIC5yb2RhdGEgKi8KKyAgLmV4aXQudGV4dCA6IHsgKiguZXhpdC50ZXh0KSB9CiAgIC4gPSBBTElHTihfUEFHRV9TSVpFKTsKICAgX19pbml0cmFtZnNfc3RhcnQgPSAuOwogICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQpAQCAtMTMzLDcgKzEzNiw2IEBACiAKICAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCiAgIC9ESVNDQVJELyA6IHsKLSAgICAgICAgKiguZXhpdC50ZXh0KQogICAgICAgICAqKC5leGl0LmRhdGEpCiAgICAgICAgICooLmV4aXRjYWxsLmV4aXQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYXNhdC9pbWFnZS9yb21zY3JpcHQubm9ybWFsIGIvYXJjaC9taXBzL2xhc2F0L2ltYWdlL3JvbXNjcmlwdC5ub3JtYWwKaW5kZXggY2EyMjMzNi4uOTg4ZjhhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L2ltYWdlL3JvbXNjcmlwdC5ub3JtYWwKKysrIGIvYXJjaC9taXBzL2xhc2F0L2ltYWdlL3JvbXNjcmlwdC5ub3JtYWwKQEAgLTE2LDcgKzE2LDggQEAKICAgX2ltYWdlX3N0YXJ0ID0gQUREUiguZGF0YSk7CiAgIF9pbWFnZV9zaXplID0gU0laRU9GKC5kYXRhKTsKIAotICAub3RoZXIgOiB7Ci0gIAkqKC4qKQorICAub3RoZXIgOgorICB7CisgICAgKiguKikKICAgfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9pb21hcC5jIGIvYXJjaC9taXBzL2xpYi9pb21hcC5jCmluZGV4IDdlMmNlZDcxLi5mNGFjNWJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGliL2lvbWFwLmMKKysrIGIvYXJjaC9taXBzL2xpYi9pb21hcC5jCkBAIC02Myw3ICs2Myw3IEBACiAJCXJldHVybiBpb3BvcnRfbWFwKHN0YXJ0LCBsZW4pOwogCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7CiAJCWlmIChmbGFncyAmIElPUkVTT1VSQ0VfQ0FDSEVBQkxFKQotCQkJcmV0dXJuIGlvcmVtYXBfY2FjaGVhYmxlX2NvdyhzdGFydCwgbGVuKTsKKwkJCXJldHVybiBpb3JlbWFwX2NhY2hhYmxlKHN0YXJ0LCBsZW4pOwogCQlyZXR1cm4gaW9yZW1hcF9ub2NhY2hlKHN0YXJ0LCBsZW4pOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWVtb3J5LmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYwppbmRleCAyYzhhZmQ3Li5lZTVlNzBjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9tZW1vcnkuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCXdoaWxlIChhZGRyIDwgYm9vdF9tZW1fbWFwLm1hcFtpXS5hZGRyCiAJCQkgICAgICArIGJvb3RfbWVtX21hcC5tYXBbaV0uc2l6ZSkgewogCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKF9fdmEoYWRkcikpKTsKLQkJCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShfX3ZhKGFkZHIpKSwgMSk7CisJCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKF9fdmEoYWRkcikpKTsKIAkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylfX3ZhKGFkZHIpKTsKIAkJCWFkZHIgKz0gUEFHRV9TSVpFOwogCQkJZnJlZWQgKz0gUEFHRV9TSVpFOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWlwc0lSUS5TIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvbWlwc0lSUS5TCmluZGV4IGEzOTdlY2IuLmRkZDVjNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL21pcHNJUlEuUworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy9taXBzSVJRLlMKQEAgLTk4LDcgKzk4LDcgQEAKIAlhbmQJczAsIHMxCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzY0KQotIAkuc2V0CW1pcHMzMgorCS5zZXQJbWlwczMyCiAJY2x6CWEwLCBzMAogCS5zZXQJbWlwczAKIAluZWd1CWEwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9JUlEuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX0lSUS5jCmluZGV4IDk5ODdhODUuLjViODRjN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX0lSUS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX0lSUS5jCkBAIC05Niw3ICs5Niw3IEBACiAJIGFuZGkJYTAsIHMwLCBDQVVTRUZfSVAzCSMgZGVsYXkgc2xvdCwgY2hlY2sgaHcxIGludGVycnVwdAogI2Vsc2UKIAliZXEJYTAsIHplcm8sIDFmCQkjIGRlbGF5IHNsb3QsIGNoZWNrIGh3MyBpbnRlcnJ1cHQKLSAJIGFuZGkJYTAsIHMwLCBDQVVTRUZfSVA1CisJIGFuZGkJYTAsIHMwLCBDQVVTRUZfSVA1CiAjZW5kaWYKIAogCS8qIFdoZWVlLCBjb21iaW5lZCBoYXJkd2FyZSBsZXZlbCB6ZXJvIGludGVycnVwdC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX2lycS5TIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKaW5kZXggODM1ZjAzOC4uZGE1MjI5NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKKysrIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL3NpbS9zaW1faXJxLlMKQEAgLTQyLDcgKzQyLDcgQEAKIAlhbmQJczAsIHMxCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzY0KQotIAkuc2V0CW1pcHMzMgorCS5zZXQJbWlwczMyCiAJY2x6CWEwLCBzMAogCS5zZXQJbWlwczAKIAluZWd1CWEwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9tZW0uYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCmluZGV4IDBkYmQ3NDMuLjFlYzRlNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX21lbS5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJd2hpbGUgKGFkZHIgPCBib290X21lbV9tYXAubWFwW2ldLmFkZHIKIAkJCSAgICAgICsgYm9vdF9tZW1fbWFwLm1hcFtpXS5zaXplKSB7CiAJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSkpOwotCQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKF9fdmEoYWRkcikpLCAxKTsKKwkJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoX192YShhZGRyKSkpOwogCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKV9fdmEoYWRkcikpOwogCQkJYWRkciArPSBQQUdFX1NJWkU7CiAJCQlmcmVlZCArPSBQQUdFX1NJWkU7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvc2ltL3NpbV9zbXAuYyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCmluZGV4IDE5ODI0MzUuLmE5ZjBjMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCisrKyBiL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9zaW0vc2ltX3NtcC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCiAJdm9pZCBtaXBzbXRfcHJlcGFyZV9jcHVzKGludCBjKTsKIAkvKgotIAkgKiBBcyBub3RlZCBhYm92ZSwgd2UgY2FuIGFzc3VtZSBhIHNpbmdsZSBDUFUgZm9yIG5vdworCSAqIEFzIG5vdGVkIGFib3ZlLCB3ZSBjYW4gYXNzdW1lIGEgc2luZ2xlIENQVSBmb3Igbm93CiAJICogYnV0IGl0IG1heSBiZSBtdWx0aXRocmVhZGVkLgogCSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vTWFrZWZpbGUgYi9hcmNoL21pcHMvbW0vTWFrZWZpbGUKaW5kZXggYjAxNzhkYS4uNGE2MjIwMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbW0vTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKIG9iai0kKENPTkZJR19DUFVfTUlQUzMyKQkrPSBjLXI0ay5vIGNleC1nZW4ubyBwZy1yNGsubyB0bGItcjRrLm8KIG9iai0kKENPTkZJR19DUFVfTUlQUzY0KQkrPSBjLXI0ay5vIGNleC1nZW4ubyBwZy1yNGsubyB0bGItcjRrLm8KIG9iai0kKENPTkZJR19DUFVfTkVWQURBKQkrPSBjLXI0ay5vIGNleC1nZW4ubyBwZy1yNGsubyB0bGItcjRrLm8KLW9iai0kKENPTkZJR19DUFVfUjEwMDAwKQkrPSBjLXI0ay5vIGNleC1nZW4ubyBwZy1yNGsubyB0bGItYW5kZXMubworb2JqLSQoQ09ORklHX0NQVV9SMTAwMDApCSs9IGMtcjRrLm8gY2V4LWdlbi5vIHBnLXI0ay5vIHRsYi1yNGsubwogb2JqLSQoQ09ORklHX0NQVV9SMzAwMCkJCSs9IGMtcjNrLm8gdGxiLXIzay5vIHBnLXI0ay5vCiBvYmotJChDT05GSUdfQ1BVX1I0MzAwKQkJKz0gYy1yNGsubyBjZXgtZ2VuLm8gcGctcjRrLm8gdGxiLXI0ay5vCiBvYmotJChDT05GSUdfQ1BVX1I0WDAwKQkJKz0gYy1yNGsubyBjZXgtZ2VuLm8gcGctcjRrLm8gdGxiLXI0ay5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yM2suYyBiL2FyY2gvbWlwcy9tbS9jLXIzay5jCmluZGV4IDI3ZjRmYTIuLjlkZDEzNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXIzay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXIzay5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJCSJzYlx0JDAsIDB4MDE0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDAxOCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwMWMoJTApXG5cdCIKLQkJIAkic2JcdCQwLCAweDAyMCglMClcblx0IgorCQkJInNiXHQkMCwgMHgwMjAoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDI0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDAyOCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwMmMoJTApXG5cdCIKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJInNiXHQkMCwgMHgwNTQoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDU4KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDA1YyglMClcblx0IgotCQkgCSJzYlx0JDAsIDB4MDYwKCUwKVxuXHQiCisJCQkic2JcdCQwLCAweDA2MCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwNjQoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDY4KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDA2YyglMClcblx0IgpAQCAtMTgyLDMxICsxODIsMzEgQEAKIAkJCSJzYlx0JDAsIDB4MDA0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDAwOCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwMGMoJTApXG5cdCIKLQkJIAkic2JcdCQwLCAweDAxMCglMClcblx0IgorCQkJInNiXHQkMCwgMHgwMTAoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDE0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDAxOCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwMWMoJTApXG5cdCIKLQkJIAkic2JcdCQwLCAweDAyMCglMClcblx0IgorCQkJInNiXHQkMCwgMHgwMjAoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDI0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDAyOCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwMmMoJTApXG5cdCIKLQkJIAkic2JcdCQwLCAweDAzMCglMClcblx0IgorCQkJInNiXHQkMCwgMHgwMzAoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDM0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDAzOCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwM2MoJTApXG5cdCIKLQkJIAkic2JcdCQwLCAweDA0MCglMClcblx0IgorCQkJInNiXHQkMCwgMHgwNDAoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDQ0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDA0OCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwNGMoJTApXG5cdCIKLQkJIAkic2JcdCQwLCAweDA1MCglMClcblx0IgorCQkJInNiXHQkMCwgMHgwNTAoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDU0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDA1OCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwNWMoJTApXG5cdCIKLQkJIAkic2JcdCQwLCAweDA2MCglMClcblx0IgorCQkJInNiXHQkMCwgMHgwNjAoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDY0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDA2OCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwNmMoJTApXG5cdCIKLQkJIAkic2JcdCQwLCAweDA3MCglMClcblx0IgorCQkJInNiXHQkMCwgMHgwNzAoJTApXG5cdCIKIAkJCSJzYlx0JDAsIDB4MDc0KCUwKVxuXHQiCiAJCQkic2JcdCQwLCAweDA3OCglMClcblx0IgogCQkJInNiXHQkMCwgMHgwN2MoJTApXG5cdCIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggMWI3MWQ5MS4uMzJiN2Y2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTIzNSw3ICsyMzUsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgc2NfbHNpemUgPSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpOwogCi0JaWYgKHNjX2xzaXplID09IDE2KQorCWlmIChzY2FjaGVfc2l6ZSA9PSAwKQorCQlyNGtfYmxhc3Rfc2NhY2hlX3BhZ2UgPSAodm9pZCAqKW5vX3NjX25vb3A7CisJZWxzZSBpZiAoc2NfbHNpemUgPT0gMTYpCiAJCXI0a19ibGFzdF9zY2FjaGVfcGFnZSA9IGJsYXN0X3NjYWNoZTE2X3BhZ2U7CiAJZWxzZSBpZiAoc2NfbHNpemUgPT0gMzIpCiAJCXI0a19ibGFzdF9zY2FjaGVfcGFnZSA9IGJsYXN0X3NjYWNoZTMyX3BhZ2U7CkBAIC0yNTEsNyArMjUzLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHNjX2xzaXplID0gY3B1X3NjYWNoZV9saW5lX3NpemUoKTsKIAotCWlmIChzY19sc2l6ZSA9PSAxNikKKwlpZiAoc2NhY2hlX3NpemUgPT0gMCkKKwkJcjRrX2JsYXN0X3NjYWNoZV9wYWdlX2luZGV4ZWQgPSAodm9pZCAqKW5vX3NjX25vb3A7CisJZWxzZSBpZiAoc2NfbHNpemUgPT0gMTYpCiAJCXI0a19ibGFzdF9zY2FjaGVfcGFnZV9pbmRleGVkID0gYmxhc3Rfc2NhY2hlMTZfcGFnZV9pbmRleGVkOwogCWVsc2UgaWYgKHNjX2xzaXplID09IDMyKQogCQlyNGtfYmxhc3Rfc2NhY2hlX3BhZ2VfaW5kZXhlZCA9IGJsYXN0X3NjYWNoZTMyX3BhZ2VfaW5kZXhlZDsKQEAgLTI2Nyw3ICsyNzEsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgc2NfbHNpemUgPSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpOwogCi0JaWYgKHNjX2xzaXplID09IDE2KQorCWlmIChzY2FjaGVfc2l6ZSA9PSAwKQorCQlyNGtfYmxhc3Rfc2NhY2hlID0gKHZvaWQgKilub19zY19ub29wOworCWVsc2UgaWYgKHNjX2xzaXplID09IDE2KQogCQlyNGtfYmxhc3Rfc2NhY2hlID0gYmxhc3Rfc2NhY2hlMTY7CiAJZWxzZSBpZiAoc2NfbHNpemUgPT0gMzIpCiAJCXI0a19ibGFzdF9zY2FjaGUgPSBibGFzdF9zY2FjaGUzMjsKQEAgLTM2OSw2ICszNzUsNyBAQAogc3RydWN0IGZsdXNoX2NhY2hlX3BhZ2VfYXJncyB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgcGZuOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX3I0a19mbHVzaF9jYWNoZV9wYWdlKHZvaWQgKmFyZ3MpCkBAIC0zNzYsNiArMzgzLDcgQEAKIAlzdHJ1Y3QgZmx1c2hfY2FjaGVfcGFnZV9hcmdzICpmY3BfYXJncyA9IGFyZ3M7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBmY3BfYXJncy0+dm1hOwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGZjcF9hcmdzLT5hZGRyOworCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBmY3BfYXJncy0+cGZuIDw8IFBBR0VfU0hJRlQ7CiAJaW50IGV4ZWMgPSB2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQzsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJcGdkX3QgKnBnZHA7CkBAIC00MjUsMTEgKzQzMywxMiBAQAogCSAqIERvIGluZGV4ZWQgZmx1c2gsIHRvbyBtdWNoIHdvcmsgdG8gZ2V0IHRoZSAocG9zc2libGUpIFRMQiByZWZpbGxzCiAJICogdG8gd29yayBjb3JyZWN0bHkuCiAJICovCi0JYWRkciA9IElOREVYX0JBU0UgKyAoYWRkciAmIChkY2FjaGVfc2l6ZSAtIDEpKTsKIAlpZiAoY3B1X2hhc19kY19hbGlhc2VzIHx8IChleGVjICYmICFjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMpKSB7Ci0JCXI0a19ibGFzdF9kY2FjaGVfcGFnZV9pbmRleGVkKGFkZHIpOwotCQlpZiAoZXhlYyAmJiAhY3B1X2ljYWNoZV9zbm9vcHNfcmVtb3RlX3N0b3JlKQotCQkJcjRrX2JsYXN0X3NjYWNoZV9wYWdlX2luZGV4ZWQoYWRkcik7CisJCXI0a19ibGFzdF9kY2FjaGVfcGFnZV9pbmRleGVkKGNwdV9oYXNfcGluZGV4ZWRfZGNhY2hlID8KKwkJCQkJICAgICAgcGFkZHIgOiBhZGRyKTsKKwkJaWYgKGV4ZWMgJiYgIWNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZSkgeworCQkJcjRrX2JsYXN0X3NjYWNoZV9wYWdlX2luZGV4ZWQocGFkZHIpOworCQl9CiAJfQogCWlmIChleGVjKSB7CiAJCWlmIChjcHVfaGFzX3Z0YWdfaWNhY2hlKSB7CkBAIC00NDksNiArNDU4LDcgQEAKIAogCWFyZ3Mudm1hID0gdm1hOwogCWFyZ3MuYWRkciA9IGFkZHI7CisJYXJncy5wZm4gPSBwZm47CiAKIAlvbl9lYWNoX2NwdShsb2NhbF9yNGtfZmx1c2hfY2FjaGVfcGFnZSwgJmFyZ3MsIDEsIDEpOwogfQpAQCAtNDgyLDcgKzQ5Miw3IEBACiAJCQlwcm90ZWN0ZWRfYmxhc3RfZGNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpOwogCQl9CiAKLQkJaWYgKCFjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUpIHsKKwkJaWYgKCFjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUgJiYgc2NhY2hlX3NpemUpIHsKIAkJCWlmIChlbmQgLSBzdGFydCA+IHNjYWNoZV9zaXplKQogCQkJCXI0a19ibGFzdF9zY2FjaGUoKTsKIAkJCWVsc2UKQEAgLTY1MSw3ICs2NjEsNyBAQAogCiAJUjQ2MDBfSElUX0NBQ0hFT1BfV0FSX0lNUEw7CiAJcHJvdGVjdGVkX3dyaXRlYmFja19kY2FjaGVfbGluZShhZGRyICYgfihkY19sc2l6ZSAtIDEpKTsKLQlpZiAoIWNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZSkKKwlpZiAoIWNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZSAmJiBzY2FjaGVfc2l6ZSkKIAkJcHJvdGVjdGVkX3dyaXRlYmFja19zY2FjaGVfbGluZShhZGRyICYgfihzY19sc2l6ZSAtIDEpKTsKIAlwcm90ZWN0ZWRfZmx1c2hfaWNhY2hlX2xpbmUoYWRkciAmIH4oaWNfbHNpemUgLSAxKSk7CiAJaWYgKE1JUFM0S19JQ0FDSEVfUkVGSUxMX1dBUikgewpAQCAtNzc2LDYgKzc4Niw3IEBACiAJCWMtPmRjYWNoZS53YXliaXQgPSAwOwogCiAJCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfQ0FDSEVfQ0RFWF9QOworCQljLT5vcHRpb25zIHw9IE1JUFNfQ1BVX1BSRUZFVENIOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX1I0MDAwUEM6CkBAIC05NTAsNiArOTYxLDcgQEAKIAlzd2l0Y2ggKGMtPmNwdXR5cGUpIHsKIAljYXNlIENQVV8yMEtDOgogCWNhc2UgQ1BVXzI1S0Y6CisJCWMtPmRjYWNoZS5mbGFncyB8PSBNSVBTX0NBQ0hFX1BJTkRFWDsKIAljYXNlIENQVV9SMTAwMDA6CiAJY2FzZSBDUFVfUjEyMDAwOgogCWNhc2UgQ1BVX1NCMToKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXR4MzkuYyBiL2FyY2gvbWlwcy9tbS9jLXR4MzkuYwppbmRleCA3YzU3MmJlLi5mZTIzMmUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy10eDM5LmMKKysrIGIvYXJjaC9taXBzL21tL2MtdHgzOS5jCkBAIC0yMTAsNyArMjEwLDYgQEAKIAkgKiBEbyBpbmRleGVkIGZsdXNoLCB0b28gbXVjaCB3b3JrIHRvIGdldCB0aGUgKHBvc3NpYmxlKSBUTEIgcmVmaWxscwogCSAqIHRvIHdvcmsgY29ycmVjdGx5LgogCSAqLwotCXBhZ2UgPSAoS1NFRzAgKyAocGFnZSAmIChkY2FjaGVfc2l6ZSAtIDEpKSk7CiAJaWYgKGNwdV9oYXNfZGNfYWxpYXNlcyB8fCBleGVjKQogCQl0eDM5X2JsYXN0X2RjYWNoZV9wYWdlX2luZGV4ZWQocGFnZSk7CiAJaWYgKGV4ZWMpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vY2V4LXNiMS5TIGIvYXJjaC9taXBzL21tL2NleC1zYjEuUwppbmRleCAwZTcxNTgwLi5lNTRhNjJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2V4LXNiMS5TCisrKyBiL2FyY2gvbWlwcy9tbS9jZXgtc2IxLlMKQEAgLTY0LDcgKzY0LDcgQEAKIAlzZAlrMCwweDE3MCgkMCkKIAlzZAlrMSwweDE3OCgkMCkKIAotI2lmIENPTkZJR19TQjFfQ0VYX0FMV0FZU19GQVRBTAorI2lmZGVmIENPTkZJR19TQjFfQ0VYX0FMV0FZU19GQVRBTAogCWoJaGFuZGxlX3ZlYzJfc2IxCiAJIG5vcAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9kbWEtaXAzMi5jIGIvYXJjaC9taXBzL21tL2RtYS1pcDMyLmMKaW5kZXggYTdlMzA3Mi4uZWM1NGVkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2RtYS1pcDMyLmMKKysrIGIvYXJjaC9taXBzL21tL2RtYS1pcDMyLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlCVUcoKTsKIAl9CiAKLQlhZGRyID0gdmlydF90b19waHlzKHB0cikmUkFNX09GRlNFVF9NQVNLOzsKKwlhZGRyID0gdmlydF90b19waHlzKHB0cikmUkFNX09GRlNFVF9NQVNLOwogCWlmKGRldiA9PSBOVUxMKQogCSAgICBhZGRyKz1DUklNRV9ISV9NRU1fQkFTRTsKIAlyZXR1cm4gKGRtYV9hZGRyX3QpYWRkcjsKQEAgLTE3OSw3ICsxNzksNyBAQAogCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhzZy0+cGFnZSkrc2ctPm9mZnNldDsKIAkJaWYgKGFkZHIpCiAJCQlfX2RtYV9zeW5jKGFkZHIsIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7Ci0JCWFkZHIgPSBfX3BhKGFkZHIpJlJBTV9PRkZTRVRfTUFTSzs7CisJCWFkZHIgPSBfX3BhKGFkZHIpJlJBTV9PRkZTRVRfTUFTSzsKIAkJaWYoZGV2ID09IE5VTEwpCiAJCQlhZGRyICs9ICBDUklNRV9ISV9NRU1fQkFTRTsKIAkJc2ctPmRtYV9hZGRyZXNzID0gKGRtYV9hZGRyX3QpYWRkcjsKQEAgLTE5OSw3ICsxOTksNyBAQAogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CiAJZG1hX2NhY2hlX3diYWNrX2ludihhZGRyLCBzaXplKTsKLQlhZGRyID0gX19wYShhZGRyKSZSQU1fT0ZGU0VUX01BU0s7OworCWFkZHIgPSBfX3BhKGFkZHIpJlJBTV9PRkZTRVRfTUFTSzsKIAlpZihkZXYgPT0gTlVMTCkKIAkJYWRkciArPSAgQ1JJTUVfSElfTUVNX0JBU0U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9pbml0LmMgYi9hcmNoL21pcHMvbW0vaW5pdC5jCmluZGV4IDBmZjlhMzQuLjUyZjdkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9pbml0LmMKKysrIGIvYXJjaC9taXBzL21tL2luaXQuYwpAQCAtNTQsNyArNTQsOCBAQAogICovCiB1bnNpZ25lZCBsb25nIHNldHVwX3plcm9fcGFnZXModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIG9yZGVyLCBzaXplOworCXVuc2lnbmVkIGludCBvcmRlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlpZiAoY3B1X2hhc192Y2UpCkBAIC02Nyw5ICs2OCw5IEBACiAJCXBhbmljKCJPaCBib3ksIHRoYXQgZWFybHkgb3V0IG9mIG1lbW9yeT8iKTsKIAogCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlKTsKKwlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKIAl3aGlsZSAocGFnZSA8IHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKSkpIHsKIAkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKIAkJcGFnZSsrOwogCX0KIApAQCAtMjQ0LDcgKzI0NSw3IEBACiAjaWZkZWYgQ09ORklHX0xJTUlURURfRE1BCiAJCXNldF9wYWdlX2FkZHJlc3MocGFnZSwgbG93bWVtX3BhZ2VfYWRkcmVzcyhwYWdlKSk7CiAjZW5kaWYKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCWluaXRfcGFnZV9jb3VudChwYWdlKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCXRvdGFsaGlnaF9wYWdlcysrOwogCX0KQEAgLTI5MSw3ICsyOTIsNyBAQAogCiAJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7CiAJCWZyZWVfcGFnZShzdGFydCk7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJfQpAQCAtMzE0LDcgKzMxNSw3IEBACiAJCXBhZ2UgPSBhZGRyOwogI2VuZGlmCiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlKSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShwYWdlKSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UocGFnZSkpOwogCQlmcmVlX3BhZ2UocGFnZSk7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCWZyZWVkICs9IFBBR0VfU0laRTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9wZy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9wZy1yNGsuYwppbmRleCBmNTFlMTgwLi5lNDM5MGRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vcGctcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL3BnLXI0ay5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGJ1aWxkX3NyY19wcmVmKGludCBhZHZhbmNlKQogewotCWlmICghKGxvYWRfb2Zmc2V0ICYgKGNwdV9kY2FjaGVfbGluZV9zaXplKCkgLSAxKSkpIHsKKwlpZiAoIShsb2FkX29mZnNldCAmIChjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpIC0gMSkpICYmIGFkdmFuY2UpIHsKIAkJdW5pb24gbWlwc19pbnN0cnVjdGlvbiBtaTsKIAogCQltaS5pX2Zvcm1hdC5vcGNvZGUgICAgID0gcHJlZl9vcDsKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnVpbGRfZHN0X3ByZWYoaW50IGFkdmFuY2UpCiB7Ci0JaWYgKCEoc3RvcmVfb2Zmc2V0ICYgKGNwdV9kY2FjaGVfbGluZV9zaXplKCkgLSAxKSkpIHsKKwlpZiAoIShzdG9yZV9vZmZzZXQgJiAoY3B1X2RjYWNoZV9saW5lX3NpemUoKSAtIDEpKSAmJiBhZHZhbmNlKSB7CiAJCXVuaW9uIG1pcHNfaW5zdHJ1Y3Rpb24gbWk7CiAKIAkJbWkuaV9mb3JtYXQub3Bjb2RlICAgICA9IHByZWZfb3A7CkBAIC0zNDAsNiArMzQwLDEyIEBACiAKIAlpZiAoY3B1X2hhc19wcmVmZXRjaCkgewogCQlzd2l0Y2ggKGN1cnJlbnRfY3B1X2RhdGEuY3B1dHlwZSkgeworCQljYXNlIENQVV9UWDQ5WFg6CisJCQkvKiBUWDQ5IHN1cHBvcnRzIG9ubHkgUHJlZl9Mb2FkICovCisJCQlwcmVmX29mZnNldF9jbGVhciA9IDA7CisJCQlwcmVmX29mZnNldF9jb3B5ID0gMDsKKwkJCWJyZWFrOworCiAJCWNhc2UgQ1BVX1JNOTAwMDoKIAkJCS8qCiAJCQkgKiBBcyBhIHdvcmthcm91bmQgZm9yIGVycmF0dW0gRzEwNSB3aGljaCBtYWtlIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3NjLXJtN2suYyBiL2FyY2gvbWlwcy9tbS9zYy1ybTdrLmMKaW5kZXggOWU4ZmY4Yi4uM2I2Y2M5YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3NjLXJtN2suYworKysgYi9hcmNoL21pcHMvbW0vc2Mtcm03ay5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9iY2FjaGUuaD4KQEAgLTQzLDE0ICs0NCw3IEBACiAJLyogQ2F0Y2ggYmFkIGRyaXZlciBjb2RlICovCiAJQlVHX09OKHNpemUgPT0gMCk7CiAKLQlhID0gYWRkciAmIH4oc2NfbHNpemUgLSAxKTsKLQllbmQgPSAoYWRkciArIHNpemUgLSAxKSAmIH4oc2NfbHNpemUgLSAxKTsKLQl3aGlsZSAoMSkgewotCQlmbHVzaF9zY2FjaGVfbGluZShhKTsJLyogSGl0X1dyaXRlYmFja19JbnZfU0QgKi8KLQkJaWYgKGEgPT0gZW5kKQotCQkJYnJlYWs7Ci0JCWEgKz0gc2NfbHNpemU7Ci0JfQorCWJsYXN0X3NjYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSk7CiAKIAlpZiAoIXJtN2tfdGNhY2hlX2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTc0LDE0ICs2OCw3IEBACiAJLyogQ2F0Y2ggYmFkIGRyaXZlciBjb2RlICovCiAJQlVHX09OKHNpemUgPT0gMCk7CiAKLQlhID0gYWRkciAmIH4oc2NfbHNpemUgLSAxKTsKLQllbmQgPSAoYWRkciArIHNpemUgLSAxKSAmIH4oc2NfbHNpemUgLSAxKTsKLQl3aGlsZSAoMSkgewotCQlpbnZhbGlkYXRlX3NjYWNoZV9saW5lKGEpOwkvKiBIaXRfSW52YWxpZGF0ZV9TRCAqLwotCQlpZiAoYSA9PSBlbmQpCi0JCQlicmVhazsKLQkJYSArPSBzY19sc2l6ZTsKLQl9CisJYmxhc3RfaW52X3NjYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSk7CiAKIAlpZiAoIXJtN2tfdGNhY2hlX2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTE0MywxMSArMTMwLDE3IEBACiAKIHZvaWQgX19pbml0IHJtN2tfc2NfaW5pdCh2b2lkKQogeworCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKIAogCWlmICgoY29uZmlnICYgUk03S19DT05GX1NDKSkKIAkJcmV0dXJuOwogCisJYy0+c2NhY2hlLmxpbmVzeiA9IHNjX2xzaXplOworCWMtPnNjYWNoZS53YXlzID0gNDsKKwljLT5zY2FjaGUud2F5Yml0PSBmZnMoc2NhY2hlX3NpemUgLyBjLT5zY2FjaGUud2F5cykgLSAxOworCWMtPnNjYWNoZS53YXlzaXplID0gc2NhY2hlX3NpemUgLyBjLT5zY2FjaGUud2F5czsKKwljLT5zY2FjaGUuc2V0cyA9IHNjYWNoZV9zaXplIC8gKGMtPnNjYWNoZS5saW5lc3ogKiBjLT5zY2FjaGUud2F5cyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiU2Vjb25kYXJ5IGNhY2hlIHNpemUgJWRLLCBsaW5lc2l6ZSAlZCBieXRlcy5cbiIsCiAJICAgICAgIChzY2FjaGVfc2l6ZSA+PiAxMCksIHNjX2xzaXplKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1hbmRlcy5jIGIvYXJjaC9taXBzL21tL3RsYi1hbmRlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQyMmE4Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9tbS90bGItYW5kZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAxOTk5IFJhbGYgQmFlY2hsZSAocmFsZkBnbnUub3JnKQotICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwMCBLYW5vaiBTYXJjYXIgKGthbm9qQHNnaS5jb20pCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0KLWV4dGVybiB2b2lkIGJ1aWxkX3RsYl9yZWZpbGxfaGFuZGxlcih2b2lkKTsKLQotI2RlZmluZSBOVExCX0VOVFJJRVMgICAgICAgNjQKLSNkZWZpbmUgTlRMQl9FTlRSSUVTX0hBTEYgIDMyCi0KLXZvaWQgbG9jYWxfZmx1c2hfdGxiX2FsbCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBvbGRfY3R4OwotCXVuc2lnbmVkIGxvbmcgZW50cnk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JLyogU2F2ZSBvbGQgY29udGV4dCBhbmQgY3JlYXRlIGltcG9zc2libGUgVlBOMiB2YWx1ZSAqLwotCW9sZF9jdHggPSByZWFkX2MwX2VudHJ5aGkoKSAmIEFTSURfTUFTSzsKLQl3cml0ZV9jMF9lbnRyeWhpKENLU0VHMCk7Ci0Jd3JpdGVfYzBfZW50cnlsbzAoMCk7Ci0Jd3JpdGVfYzBfZW50cnlsbzEoMCk7Ci0KLQllbnRyeSA9IHJlYWRfYzBfd2lyZWQoKTsKLQotCS8qIEJsYXN0ICdlbSBhbGwgYXdheS4gKi8KLQl3aGlsZSAoZW50cnkgPCBOVExCX0VOVFJJRVMpIHsKLQkJd3JpdGVfYzBfaW5kZXgoZW50cnkpOwotCQl0bGJfd3JpdGVfaW5kZXhlZCgpOwotCQllbnRyeSsrOwotCX0KLQl3cml0ZV9jMF9lbnRyeWhpKG9sZF9jdHgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotdm9pZCBsb2NhbF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpZiAoY3B1X2NvbnRleHQoY3B1LCBtbSkgIT0gMCkgewotCQlkcm9wX21tdV9jb250ZXh0KG1tLGNwdSk7Ci0JfQotfQotCi12b2lkIGxvY2FsX2ZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JaWYgKGNwdV9jb250ZXh0KGNwdSwgbW0pICE9IDApIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJaW50IHNpemU7Ci0KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlzaXplID0gKGVuZCAtIHN0YXJ0ICsgKFBBR0VfU0laRSAtIDEpKSA+PiBQQUdFX1NISUZUOwotCQlzaXplID0gKHNpemUgKyAxKSA+PiAxOwotCQlpZiAoc2l6ZSA8PSBOVExCX0VOVFJJRVNfSEFMRikgewotCQkJaW50IG9sZHBpZCA9IChyZWFkX2MwX2VudHJ5aGkoKSAmIEFTSURfTUFTSyk7Ci0JCQlpbnQgbmV3cGlkID0gKGNwdV9jb250ZXh0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW0pCi0JCQkJICAgICAgJiBBU0lEX01BU0spOwotCi0JCQlzdGFydCAmPSAoUEFHRV9NQVNLIDw8IDEpOwotCQkJZW5kICs9ICgoUEFHRV9TSVpFIDw8IDEpIC0gMSk7Ci0JCQllbmQgJj0gKFBBR0VfTUFTSyA8PCAxKTsKLQkJCXdoaWxlKHN0YXJ0IDwgZW5kKSB7Ci0JCQkJaW50IGlkeDsKLQotCQkJCXdyaXRlX2MwX2VudHJ5aGkoc3RhcnQgfCBuZXdwaWQpOwotCQkJCXN0YXJ0ICs9IChQQUdFX1NJWkUgPDwgMSk7Ci0JCQkJdGxiX3Byb2JlKCk7Ci0JCQkJaWR4ID0gcmVhZF9jMF9pbmRleCgpOwotCQkJCXdyaXRlX2MwX2VudHJ5bG8wKDApOwotCQkJCXdyaXRlX2MwX2VudHJ5bG8xKDApOwotCQkJCXdyaXRlX2MwX2VudHJ5aGkoQ0tTRUcwKTsKLQkJCQlpZihpZHggPCAwKQotCQkJCQljb250aW51ZTsKLQkJCQl0bGJfd3JpdGVfaW5kZXhlZCgpOwotCQkJfQotCQkJd3JpdGVfYzBfZW50cnloaShvbGRwaWQpOwotCQl9IGVsc2UgewotCQkJZHJvcF9tbXVfY29udGV4dChtbSwgY3B1KTsKLQkJfQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotfQotCi12b2lkIGxvY2FsX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc2l6ZTsKLQotCXNpemUgPSAoZW5kIC0gc3RhcnQgKyAoUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7Ci0Jc2l6ZSA9IChzaXplICsgMSkgPj4gMTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoc2l6ZSA8PSBOVExCX0VOVFJJRVNfSEFMRikgewotCQlpbnQgcGlkID0gcmVhZF9jMF9lbnRyeWhpKCk7Ci0KLQkJc3RhcnQgJj0gKFBBR0VfTUFTSyA8PCAxKTsKLQkJZW5kICs9ICgoUEFHRV9TSVpFIDw8IDEpIC0gMSk7Ci0JCWVuZCAmPSAoUEFHRV9NQVNLIDw8IDEpOwotCi0JCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQkJaW50IGlkeDsKLQotCQkJd3JpdGVfYzBfZW50cnloaShzdGFydCk7Ci0JCQlzdGFydCArPSAoUEFHRV9TSVpFIDw8IDEpOwotCQkJdGxiX3Byb2JlKCk7Ci0JCQlpZHggPSByZWFkX2MwX2luZGV4KCk7Ci0JCQl3cml0ZV9jMF9lbnRyeWxvMCgwKTsKLQkJCXdyaXRlX2MwX2VudHJ5bG8xKDApOwotCQkJd3JpdGVfYzBfZW50cnloaShDS1NFRzAgKyAoaWR4IDw8IChQQUdFX1NISUZUKzEpKSk7Ci0JCQlpZiAoaWR4IDwgMCkKLQkJCQljb250aW51ZTsKLQkJCXRsYl93cml0ZV9pbmRleGVkKCk7Ci0JCX0KLQkJd3JpdGVfYzBfZW50cnloaShwaWQpOwotCX0gZWxzZSB7Ci0JCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi12b2lkIGxvY2FsX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpCi17Ci0JaWYgKGNwdV9jb250ZXh0KHNtcF9wcm9jZXNzb3JfaWQoKSwgdm1hLT52bV9tbSkgIT0gMCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlpbnQgb2xkcGlkLCBuZXdwaWQsIGlkeDsKLQotCQluZXdwaWQgPSAoY3B1X2NvbnRleHQoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2bWEtPnZtX21tKSAmCi0JCQkgIEFTSURfTUFTSyk7Ci0JCXBhZ2UgJj0gKFBBR0VfTUFTSyA8PCAxKTsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlvbGRwaWQgPSAocmVhZF9jMF9lbnRyeWhpKCkgJiBBU0lEX01BU0spOwotCQl3cml0ZV9jMF9lbnRyeWhpKHBhZ2UgfCBuZXdwaWQpOwotCQl0bGJfcHJvYmUoKTsKLQkJaWR4ID0gcmVhZF9jMF9pbmRleCgpOwotCQl3cml0ZV9jMF9lbnRyeWxvMCgwKTsKLQkJd3JpdGVfYzBfZW50cnlsbzEoMCk7Ci0JCXdyaXRlX2MwX2VudHJ5aGkoQ0tTRUcwKTsKLQkJaWYgKGlkeCA8IDApCi0JCQlnb3RvIGZpbmlzaDsKLQkJdGxiX3dyaXRlX2luZGV4ZWQoKTsKLQotCWZpbmlzaDoKLQkJd3JpdGVfYzBfZW50cnloaShvbGRwaWQpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotfQotCi0vKgotICogVGhpcyBvbmUgaXMgb25seSB1c2VkIGZvciBwYWdlcyB3aXRoIHRoZSBnbG9iYWwgYml0IHNldCBzbyB3ZSBkb24ndCBjYXJlCi0gKiBtdWNoIGFib3V0IHRoZSBBU0lELgotICovCi12b2lkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBwYWdlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG9sZHBpZCwgaWR4OwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXBhZ2UgJj0gKFBBR0VfTUFTSyA8PCAxKTsKLQlvbGRwaWQgPSByZWFkX2MwX2VudHJ5aGkoKSAmIDB4ZmY7Ci0Jd3JpdGVfYzBfZW50cnloaShwYWdlKTsKLQl0bGJfcHJvYmUoKTsKLQlpZHggPSByZWFkX2MwX2luZGV4KCk7Ci0Jd3JpdGVfYzBfZW50cnlsbzAoMCk7Ci0Jd3JpdGVfYzBfZW50cnlsbzEoMCk7Ci0JaWYgKGlkeCA+PSAwKSB7Ci0JCS8qIE1ha2Ugc3VyZSBhbGwgZW50cmllcyBkaWZmZXIuICovCi0JCXdyaXRlX2MwX2VudHJ5aGkoQ0tTRUcwKyhpZHg8PChQQUdFX1NISUZUKzEpKSk7Ci0JCXRsYl93cml0ZV9pbmRleGVkKCk7Ci0JfQotCXdyaXRlX2MwX2VudHJ5aGkob2xkcGlkKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyogWFhYIFNpbXBsaWZ5IHRoaXMuICBPbiB0aGUgUjEwMDAwIHdyaXRpbmcgYSBUTEIgZW50cnkgZm9yIGFuIHZpcnR1YWwKLSAgIGFkZHJlc3MgdGhhdCBhbHJlYWR5IGV4aXN0cyB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGVudHJ5IGFuZCBub3QgcmVzdWx0Ci0gICBpbiBUTEIgbWFsZnVuY3Rpb24gb3IgVExCIHNodXRkb3duLiAgKi8KLXZvaWQgX191cGRhdGVfdGxiKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlwZ2RfdCAqcGdkcDsKLQlwdWRfdCAqcHVkcDsKLQlwbWRfdCAqcG1kcDsKLQlwdGVfdCAqcHRlcDsKLQlpbnQgaWR4LCBwaWQ7Ci0KLQkvKgotCSAqIEhhbmRsZSBkZWJ1Z2dlciBmYXVsdGluZyBpbiBmb3IgZGVidWdlZS4KLQkgKi8KLQlpZiAoY3VycmVudC0+YWN0aXZlX21tICE9IHZtYS0+dm1fbW0pCi0JCXJldHVybjsKLQotCXBpZCA9IHJlYWRfYzBfZW50cnloaSgpICYgQVNJRF9NQVNLOwotCi0JaWYgKChwaWQgIT0gKGNwdV9jb250ZXh0KHNtcF9wcm9jZXNzb3JfaWQoKSwgdm1hLT52bV9tbSkgJiBBU0lEX01BU0spKQotCSAgICB8fCAoY3B1X2NvbnRleHQoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2bWEtPnZtX21tKSA9PSAwKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXM6IFdoZWVlLCBib2d1cyB0bGJwaWQgbW1waWQ9JWQgdGxicGlkPSVkXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCAoaW50KSAoY3B1X2NvbnRleHQoc21wX3Byb2Nlc3Nvcl9pZCgpLAotCQkgICAgICAgdm1hLT52bV9tbSkgJiBBU0lEX01BU0spLCBwaWQpOwotCX0KLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlhZGRyZXNzICY9IChQQUdFX01BU0sgPDwgMSk7Ci0Jd3JpdGVfYzBfZW50cnloaShhZGRyZXNzIHwgKHBpZCkpOwotCXBnZHAgPSBwZ2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHJlc3MpOwotCXRsYl9wcm9iZSgpOwotCXB1ZHAgPSBwdWRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpOwotCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHJlc3MpOwotCWlkeCA9IHJlYWRfYzBfaW5kZXgoKTsKLQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kcCwgYWRkcmVzcyk7Ci0Jd3JpdGVfYzBfZW50cnlsbzAocHRlX3ZhbCgqcHRlcCsrKSA+PiA2KTsKLQl3cml0ZV9jMF9lbnRyeWxvMShwdGVfdmFsKCpwdGVwKSA+PiA2KTsKLQl3cml0ZV9jMF9lbnRyeWhpKGFkZHJlc3MgfCBwaWQpOwotCWlmIChpZHggPCAwKSB7Ci0JCXRsYl93cml0ZV9yYW5kb20oKTsKLQl9IGVsc2UgewotCQl0bGJfd3JpdGVfaW5kZXhlZCgpOwotCX0KLQl3cml0ZV9jMF9lbnRyeWhpKHBpZCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi12b2lkIF9faW5pdCB0bGJfaW5pdCh2b2lkKQotewotCS8qCi0JICogWW91IHNob3VsZCBuZXZlciBjaGFuZ2UgdGhpcyByZWdpc3RlcjoKLQkgKiAgIC0gT24gUjQ2MDAgMS43IHRoZSB0bGJwIG5ldmVyIGhpdHMgZm9yIHBhZ2VzIHNtYWxsZXIgdGhhbgotCSAqICAgICB0aGUgdmFsdWUgaW4gdGhlIGMwX3BhZ2VtYXNrIHJlZ2lzdGVyLgotCSAqICAgLSBUaGUgZW50aXJlIG1tIGhhbmRsaW5nIGFzc3VtZXMgdGhlIGMwX3BhZ2VtYXNrIHJlZ2lzdGVyIHRvCi0JICogICAgIGJlIHNldCBmb3IgNGtiIHBhZ2VzLgotCSAqLwotCXdyaXRlX2MwX3BhZ2VtYXNrKFBNXzRLKTsKLQl3cml0ZV9jMF93aXJlZCgwKTsKLQl3cml0ZV9jMF9mcmFtZW1hc2soMCk7Ci0KLSAgICAgICAgLyogRnJvbSB0aGlzIHBvaW50IG9uIHRoZSBBUkMgZmlybXdhcmUgaXMgZGVhZC4gICovCi0JbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwotCi0JLyogRGlkIEkgdGVsbCB5b3UgdGhhdCBBUkMgU1VDS1M/ICAqLwotCi0JYnVpbGRfdGxiX3JlZmlsbF9oYW5kbGVyKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jIGIvYXJjaC9taXBzL21tL3RsYi1yNGsuYwppbmRleCA4Mjk3OTcwLi5hODY1ZjIzOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC00MjQsOCArNDI0LDEzIEBACiAJcHJvYmVfdGxiKGNvbmZpZyk7CiAJd3JpdGVfYzBfcGFnZW1hc2soUE1fREVGQVVMVF9NQVNLKTsKIAl3cml0ZV9jMF93aXJlZCgwKTsKKwl3cml0ZV9jMF9mcmFtZW1hc2soMCk7CiAJdGVtcF90bGJfZW50cnkgPSBjdXJyZW50X2NwdV9kYXRhLnRsYnNpemUgLSAxOworCisgICAgICAgIC8qIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgQVJDIGZpcm13YXJlIGlzIGRlYWQuICAqLwogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIAorCS8qIERpZCBJIHRlbGwgeW91IHRoYXQgQVJDIFNVQ0tTPyAgKi8KKwogCWJ1aWxkX3RsYl9yZWZpbGxfaGFuZGxlcigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYmV4LmMgYi9hcmNoL21pcHMvbW0vdGxiZXguYwppbmRleCAwZjk0ODU4Li41OTliM2MyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiZXguYworKysgYi9hcmNoL21pcHMvbW0vdGxiZXguYwpAQCAtMjgwLDY5ICsyODAsNjkgQEAKIH0KIAogI2RlZmluZSBJX3UxdTJ1MyhvcCkJCQkJCQlcCi0Jc3RhdGljIGlubGluZSB2b2lkIGkjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGkjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsCVwKIAkgCXVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBpbnQgYykJCQlcCiAJewkJCQkJCQlcCiAJCWJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCwgYSwgYiwgYyk7CQlcCiAJfQogCiAjZGVmaW5lIElfdTJ1MXUzKG9wKQkJCQkJCVwKLQlzdGF0aWMgaW5saW5lIHZvaWQgaSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwJXAorCXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwJXAogCSAJdW5zaWduZWQgaW50IGIsIHVuc2lnbmVkIGludCBjKQkJCVwKIAl7CQkJCQkJCVwKIAkJYnVpbGRfaW5zbihidWYsIGluc24jI29wLCBiLCBhLCBjKTsJCVwKIAl9CiAKICNkZWZpbmUgSV91M3UxdTIob3ApCQkJCQkJXAotCXN0YXRpYyBpbmxpbmUgdm9pZCBpIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLAlcCisJc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBpIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLAlcCiAJIAl1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCQkJXAogCXsJCQkJCQkJXAogCQlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGMsIGEpOwkJXAogCX0KIAogI2RlZmluZSBJX3UxdTJzMyhvcCkJCQkJCQlcCi0Jc3RhdGljIGlubGluZSB2b2lkIGkjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGkjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsCVwKIAkgCXVuc2lnbmVkIGludCBiLCBzaWduZWQgaW50IGMpCQkJXAogCXsJCQkJCQkJXAogCQlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIsIGMpOwkJXAogCX0KIAogI2RlZmluZSBJX3UyczN1MShvcCkJCQkJCQlcCi0Jc3RhdGljIGlubGluZSB2b2lkIGkjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGkjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsCVwKIAkgCXNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCQkJXAogCXsJCQkJCQkJXAogCQlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGMsIGEsIGIpOwkJXAogCX0KIAogI2RlZmluZSBJX3UydTFzMyhvcCkJCQkJCQlcCi0Jc3RhdGljIGlubGluZSB2b2lkIGkjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGkjI29wKHUzMiAqKmJ1ZiwgdW5zaWduZWQgaW50IGEsCVwKIAkgCXVuc2lnbmVkIGludCBiLCBzaWduZWQgaW50IGMpCQkJXAogCXsJCQkJCQkJXAogCQlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGIsIGEsIGMpOwkJXAogCX0KIAogI2RlZmluZSBJX3UxdTIob3ApCQkJCQkJXAotCXN0YXRpYyBpbmxpbmUgdm9pZCBpIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLAlcCisJc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBpIyNvcCh1MzIgKipidWYsIHVuc2lnbmVkIGludCBhLAlcCiAJIAl1bnNpZ25lZCBpbnQgYikJCQkJCVwKIAl7CQkJCQkJCVwKIAkJYnVpbGRfaW5zbihidWYsIGluc24jI29wLCBhLCBiKTsJCVwKIAl9CiAKICNkZWZpbmUgSV91MXMyKG9wKQkJCQkJCVwKLQlzdGF0aWMgaW5saW5lIHZvaWQgaSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwJXAorCXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSwJXAogCSAJc2lnbmVkIGludCBiKQkJCQkJXAogCXsJCQkJCQkJXAogCQlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEsIGIpOwkJXAogCX0KIAogI2RlZmluZSBJX3UxKG9wKQkJCQkJCVwKLQlzdGF0aWMgaW5saW5lIHZvaWQgaSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSkJXAorCXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaSMjb3AodTMyICoqYnVmLCB1bnNpZ25lZCBpbnQgYSkJXAogCXsJCQkJCQkJXAogCQlidWlsZF9pbnNuKGJ1ZiwgaW5zbiMjb3AsIGEpOwkJCVwKIAl9CiAKICNkZWZpbmUgSV8wKG9wKQkJCQkJCQlcCi0Jc3RhdGljIGlubGluZSB2b2lkIGkjI29wKHUzMiAqKmJ1ZikJCQlcCisJc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBpIyNvcCh1MzIgKipidWYpCQlcCiAJewkJCQkJCQlcCiAJCWJ1aWxkX2luc24oYnVmLCBpbnNuIyNvcCk7CQkJXAogCX0KQEAgLTYyMyw0MiArNjIzLDQyIEBACiB9CiAKIC8qIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgbGFiZWxlZCBicmFuY2hlcyAqLwotc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaWxfYmx0eih1MzIgKipwLCBzdHJ1Y3QgcmVsb2MgKipyLAotCQkJCQkgICAgdW5zaWduZWQgaW50IHJlZywgZW51bSBsYWJlbF9pZCBsKQorc3RhdGljIHZvaWQgX19pbml0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpCisJaWxfYmx0eih1MzIgKipwLCBzdHJ1Y3QgcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBlbnVtIGxhYmVsX2lkIGwpCiB7CiAJcl9taXBzX3BjMTYociwgKnAsIGwpOwogCWlfYmx0eihwLCByZWcsIDApOwogfQogCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBpbF9iKHUzMiAqKnAsIHN0cnVjdCByZWxvYyAqKnIsCitzdGF0aWMgdm9pZCBfX2luaXQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaWxfYih1MzIgKipwLCBzdHJ1Y3QgcmVsb2MgKipyLAogCQkJCQkgZW51bSBsYWJlbF9pZCBsKQogewogCXJfbWlwc19wYzE2KHIsICpwLCBsKTsKIAlpX2IocCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlsX2JlcXoodTMyICoqcCwgc3RydWN0IHJlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywKK3N0YXRpYyB2b2lkIF9faW5pdCBpbF9iZXF6KHUzMiAqKnAsIHN0cnVjdCByZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsCiAJCSAgICBlbnVtIGxhYmVsX2lkIGwpCiB7CiAJcl9taXBzX3BjMTYociwgKnAsIGwpOwogCWlfYmVxeihwLCByZWcsIDApOwogfQogCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorc3RhdGljIHZvaWQgX19pbml0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpCiBpbF9iZXF6bCh1MzIgKipwLCBzdHJ1Y3QgcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLCBlbnVtIGxhYmVsX2lkIGwpCiB7CiAJcl9taXBzX3BjMTYociwgKnAsIGwpOwogCWlfYmVxemwocCwgcmVnLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgaWxfYm5leih1MzIgKipwLCBzdHJ1Y3QgcmVsb2MgKipyLCB1bnNpZ25lZCBpbnQgcmVnLAorc3RhdGljIHZvaWQgX19pbml0IGlsX2JuZXoodTMyICoqcCwgc3RydWN0IHJlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywKIAkJICAgIGVudW0gbGFiZWxfaWQgbCkKIHsKIAlyX21pcHNfcGMxNihyLCAqcCwgbCk7CiAJaV9ibmV6KHAsIHJlZywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlsX2JnZXpsKHUzMiAqKnAsIHN0cnVjdCByZWxvYyAqKnIsIHVuc2lnbmVkIGludCByZWcsCitzdGF0aWMgdm9pZCBfX2luaXQgaWxfYmdlemwodTMyICoqcCwgc3RydWN0IHJlbG9jICoqciwgdW5zaWduZWQgaW50IHJlZywKIAkJICAgICBlbnVtIGxhYmVsX2lkIGwpCiB7CiAJcl9taXBzX3BjMTYociwgKnAsIGwpOwpAQCAtOTUxLDcgKzk1MSw2IEBACiAJLyogTm8gaV9ub3AgbmVlZGVkIGhlcmUsIHNpbmNlIHRoZSBuZXh0IGluc24gZG9lc24ndCB0b3VjaCBUTVAuICovCiAKICNpZmRlZiBDT05GSUdfU01QCi0jIGlmZGVmIENPTkZJR19CVUlMRF9FTEY2NAogCS8qCiAJICogNjQgYml0IFNNUCBydW5uaW5nIGluIFhLUEhZUyBoYXMgc21wX3Byb2Nlc3Nvcl9pZCgpIDw8IDMKIAkgKiBzdG9yZWQgaW4gQ09OVEVYVC4KQEAgLTk2MiwxOCArOTYxLDYgQEAKIAlpX2RhZGR1KHAsIHB0ciwgcHRyLCB0bXApOwogCWlfZG1mYzAocCwgdG1wLCBDMF9CQURWQUREUik7CiAJaV9sZChwLCBwdHIsIHJlbF9sbyhwZ2RjKSwgcHRyKTsKLSMgZWxzZQotCS8qCi0JICogNjQgYml0IFNNUCBydW5uaW5nIGluIGNvbXBhdCBzcGFjZSBoYXMgdGhlIGxvd2VyIHBhcnQgb2YKLQkgKiAmcGdkX2N1cnJlbnRbc21wX3Byb2Nlc3Nvcl9pZCgpXSBzdG9yZWQgaW4gQ09OVEVYVC4KLQkgKi8KLQlpZiAoIWluX2NvbXBhdF9zcGFjZV9wKHBnZGMpKQotCQlwYW5pYygiSW52YWxpZCBwYWdlIGRpcmVjdG9yeSBhZGRyZXNzISIpOwotCi0JaV9kbWZjMChwLCBwdHIsIEMwX0NPTlRFWFQpOwotCWlfZHNyYShwLCBwdHIsIHB0ciwgMjMpOwotCWlfbGQocCwgcHRyLCAwLCBwdHIpOwotIyBlbmRpZgogI2Vsc2UKIAlpX0xBX21vc3RseShwLCBwdHIsIHBnZGMpOwogCWlfbGQocCwgcHRyLCByZWxfbG8ocGdkYyksIHB0cik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wcm9tLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9wcm9tLmMKaW5kZXggYWFlN2E4MC4uMWNhZGFhOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3Byb20uYwpAQCAtMjEsMTAgKzIxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL212NjQzNDAuaD4KICNpbmNsdWRlIDxhc20vcG1vbi5oPgogCiAjaW5jbHVkZSAiamFndWFyX2F0eF9mcGdhLmgiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9yZXNldC5jIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvcmVzZXQuYwppbmRleCBjNDIzNmIxLi5jZTlmYjJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9yZXNldC5jCisrKyBiL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3Jlc2V0LmMKQEAgLTMyLDcgKzMyLDcgQEAKICNlbHNlCiAJdm9pZCAqbnZyYW0gPSAodm9pZCopIDB4ZmM4MDcwMDA7CiAjZW5kaWYKLSAJLyogQXNrIHRoZSBOVlJBTS9SVEMvd2F0Y2hkb2cgY2hpcCB0byBhc3NlcnQgcmVzZXQgaW4gMS8xNiBzZWNvbmQgKi8KKwkvKiBBc2sgdGhlIE5WUkFNL1JUQy93YXRjaGRvZyBjaGlwIHRvIGFzc2VydCByZXNldCBpbiAxLzE2IHNlY29uZCAqLwogCXdyaXRlYigweDg0LCBudnJhbSArIDB4ZmY3KTsKIAogCS8qIHdhaXQgZm9yIHRoZSB3YXRjaGRvZyB0byBnbyBvZmYgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vamFndWFyX2F0eC9zZXR1cC5jCmluZGV4IDMwMWQ2NzIuLjM3ODRjODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9qYWd1YXJfYXR4L3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL2phZ3Vhcl9hdHgvc2V0dXAuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEJSSUVGIE1PRFVMRSBERVNDUklQVElPTgogICogTW9tZW50dW0gQ29tcHV0ZXIgSmFndWFyLUFUWCBib2FyZCBkZXBlbmRlbnQgYm9vdCByb3V0aW5lcwogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMSwgMjAwNCAgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDAxLCAwNCwgMDYgIFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwMCBSaWRnZVJ1biwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDAxIFJlZCBIYXQsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMiBNb21lbnR1bSBDb21wdXRlcgpAQCAtNTUsNiArNTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHguaD4KKwogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTY0LDcgKzY2LDYgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9tdjY0MzQwLmg+CiAKICNpbmNsdWRlICJqYWd1YXJfYXR4X2ZwZ2EuaCIKIApAQCAtNDYwLDcgKzQ2MSw3IEBACiAJICB1bnNpZ25lZCBpbnQgdGJDb250cm9sOwogCSAgdGJDb250cm9sID0KIAkgICAgMCA8PCAyNiB8ICAvKiBwb3N0IHRyaWdnZXIgZGVsYXkgMCAqLwotCSAgICAJICAgIDB4MiA8PCAxNiB8CQkvKiBzZXF1ZW50aWFsIHRyYWNlIG1vZGUgKi8KKwkJICAgIDB4MiA8PCAxNiB8CQkvKiBzZXF1ZW50aWFsIHRyYWNlIG1vZGUgKi8KIAkgICAgLy8JICAgIDB4MCA8PCAxNiB8CQkvKiBub24tc2VxdWVudGlhbCB0cmFjZSBtb2RlICovCiAJICAgIC8vCSAgICAweGYgPDwgNCB8CQkvKiB3YXRjaHBvaW50cyBkaXNhYmxlZCAqLwogCSAgICAyIDw8IDIgfAkJLyogYXJtZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfMy9yZXNldC5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3Jlc2V0LmMKaW5kZXggNzJiNDQyMy4uOWQ4NmQyNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3Jlc2V0LmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF8zL3Jlc2V0LmMKQEAgLTM0LDcgKzM0LDcgQEAKIAkvKiBiYXNlIGFkZHJlc3Mgb2YgdGltZWtlZXBlciBwb3J0aW9uIG9mIHBhcnQgKi8KIAl2b2lkICpudnJhbSA9ICh2b2lkICopIDB4ZmM4MDcwMDBMOwogCi0gCS8qIEFzayB0aGUgTlZSQU0vUlRDL3dhdGNoZG9nIGNoaXAgdG8gYXNzZXJ0IHJlc2V0IGluIDEvMTYgc2Vjb25kICovCisJLyogQXNrIHRoZSBOVlJBTS9SVEMvd2F0Y2hkb2cgY2hpcCB0byBhc3NlcnQgcmVzZXQgaW4gMS8xNiBzZWNvbmQgKi8KIAl3cml0ZWIoMHg4NCwgbnZyYW0gKyAweGZmNyk7CiAKIAkvKiB3YWl0IGZvciB0aGUgd2F0Y2hkb2cgdG8gZ28gb2ZmICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaXJxLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaXJxLmMKaW5kZXggMzAwZmU4ZS4uYTU3NjRiYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9pcnEuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvaXJxLmMKQEAgLTQxLDExICs0MSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vbXY2NDM0MC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBvY2Vsb3RfaGFuZGxlX2ludCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9wcm9tLmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcHJvbS5jCmluZGV4IDViNjgwOTcuLmU5MjM2NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9wcm9tLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3Byb20uYwpAQCAtMTksMTAgKzE5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL212NjQzNDAuaD4KICNpbmNsdWRlIDxhc20vcG1vbi5oPgogCiAjaW5jbHVkZSAib2NlbG90X2NfZnBnYS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3Jlc2V0LmMgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcmVzZXQuYwppbmRleCA2YTI0ODlmLi45ZGNkMTU0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcmVzZXQuYworKysgYi9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2MvcmVzZXQuYwpAQCAtMzQsNyArMzQsNyBAQAogCQkweGZjODA3MDAwOwogI2VuZGlmCiAKLSAJLyogQXNrIHRoZSBOVlJBTS9SVEMvd2F0Y2hkb2cgY2hpcCB0byBhc3NlcnQgcmVzZXQgaW4gMS8xNiBzZWNvbmQgKi8KKwkvKiBBc2sgdGhlIE5WUkFNL1JUQy93YXRjaGRvZyBjaGlwIHRvIGFzc2VydCByZXNldCBpbiAxLzE2IHNlY29uZCAqLwogCXdyaXRlYigweDg0LCBudnJhbSArIDB4ZmY3KTsKIAogCS8qIHdhaXQgZm9yIHRoZSB3YXRjaGRvZyB0byBnbyBvZmYgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfYy9zZXR1cC5jIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3NldHVwLmMKaW5kZXggMTU5OThkOC4uYmQwMmU2MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9jL3NldHVwLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHguaD4KIAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CkBAIC02NCw5ICs2NSw5IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL21hcnZlbGwuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL212NjQzNDAuaD4KICNpbmNsdWRlICJvY2Vsb3RfY19mcGdhLmgiCiAKIHVuc2lnbmVkIGxvbmcgbWFydmVsbF9iYXNlOwpAQCAtMjUyLDIyICsyNTMsMjIgQEAKIAkvKiBzaHV0IGRvd24gZXRoZXJuZXQgcG9ydHMsIGp1c3QgdG8gYmUgc3VyZSBvdXIgbWVtb3J5IGRvZXNuJ3QgZ2V0CiAJICogY29ycnVwdGVkIGJ5IHJhbmRvbSBldGhlcm5ldCB0cmFmZmljLgogCSAqLwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKDEpLCAweGZmIDw8IDgpOwotCU1WX1dSSVRFKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCksIDB4ZmYgPDwgOCk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSwgMHhmZiA8PCA4KTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApLCAweGZmIDw8IDgpOworCU1WX1dSSVRFKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMSksIDB4ZmYgPDwgOCk7CiAJZG8ge30KLQkgIHdoaWxlIChNVl9SRUFEKE1WNjQzNDBfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7CisJICB3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDApKSAmIDB4ZmYpOwogCWRvIHt9Ci0JICB3aGlsZSAoTVZfUkVBRChNVjY0MzQwX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKDEpKSAmIDB4ZmYpOworCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKIAlkbyB7fQotCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMCkpICYgMHhmZik7CisJICB3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygwKSkgJiAweGZmKTsKIAlkbyB7fQotCSAgd2hpbGUgKE1WX1JFQUQoTVY2NDM0MF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoMSkpICYgMHhmZik7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMCksCi0JICAgICAgICAgTVZfUkVBRChNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSkgJiB+MSk7Ci0JTVZfV1JJVEUoTVY2NDM0MF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcoMSksCi0JICAgICAgICAgTVZfUkVBRChNVjY0MzQwX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygxKSkgJiB+MSk7CisJICB3aGlsZSAoTVZfUkVBRChNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRygxKSkgJiAweGZmKTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygwKSwKKwkgICAgICAgICBNVl9SRUFEKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDApKSAmIH4xKTsKKwlNVl9XUklURShNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRygxKSwKKwkgICAgICAgICBNVl9SRUFEKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKDEpKSAmIH4xKTsKIAogCS8qIFR1cm4gb2ZmIHRoZSBCaXQtRXJyb3IgTEVEICovCiAJT0NFTE9UX0ZQR0FfV1JJVEUoMHg4MCwgQ0xSKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvZml4dXAtdnI0MTMzLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLXZyNDEzMy5jCmluZGV4IDAzYTBmZjIuLmE4YTQ3YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtdnI0MTMzLmMKKysrIGIvYXJjaC9taXBzL3BjaS9maXh1cC12cjQxMzMuYwpAQCAtNDUsNyArNDUsNyBAQAogCiAJLyoKIAkgKiB3ZSBoYXZlIHRvIG9wZW4gdGhlIGJyaWRnZXMnIHdpbmRvd3MgZG93biB0byAwIGJlY2F1c2Ugb3RoZXJ3aXNlCi0gCSAqIHdlIGNhbm5vdCBhY2Nlc3MgSVNBIHNvdXRoIGJyaWRnZSBJL08gcmVnaXN0ZXJzIHRoYXQgZ2V0IG1hcHBlZCBmcm9tCisJICogd2UgY2Fubm90IGFjY2VzcyBJU0Egc291dGggYnJpZGdlIEkvTyByZWdpc3RlcnMgdGhhdCBnZXQgbWFwcGVkIGZyb20KIAkgKiAwLiBmb3IgZXhhbXBsZSwgODI1OSBQSUMgd291bGQgYmUgdW5hY2Nlc3NpYmxlIHdpdGhvdXQgdGhhdAogCSAqLwogCWlmKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwgJiYgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9TMjExNTJCQikgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtZGRiNTQ3Ny5jIGIvYXJjaC9taXBzL3BjaS9vcHMtZGRiNTQ3Ny5jCmluZGV4IDA0MDZiNTAuLjhlNTdkNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWRkYjU0NzcuYworKysgYi9hcmNoL21pcHMvcGNpL29wcy1kZGI1NDc3LmMKQEAgLTI1Myw5ICsyNTMsOSBAQAogc3RhdGljIGludCBwcmVmaXgjI18jI3J3IyNfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHN0YXIgdmFsKSBcCiB7IFwKIAlpZiAoc2l6ZSA9PSAxKSBcCi0gICAgIAkJcmV0dXJuIHJ3IyNfY29uZmlnX2J5dGUocGNpc3dhcCwgYnVzLCBkZXZmbiwgd2hlcmUsICh1OCBzdGFyKXZhbCk7IFwKKwkJcmV0dXJuIHJ3IyNfY29uZmlnX2J5dGUocGNpc3dhcCwgYnVzLCBkZXZmbiwgd2hlcmUsICh1OCBzdGFyKXZhbCk7IFwKIAllbHNlIGlmIChzaXplID09IDIpIFwKLSAgICAgCQlyZXR1cm4gcncjI19jb25maWdfd29yZChwY2lzd2FwLCBidXMsIGRldmZuLCB3aGVyZSwgKHUxNiBzdGFyKXZhbCk7IFwKKwkJcmV0dXJuIHJ3IyNfY29uZmlnX3dvcmQocGNpc3dhcCwgYnVzLCBkZXZmbiwgd2hlcmUsICh1MTYgc3Rhcil2YWwpOyBcCiAJLyogU2l6ZSBtdXN0IGJlIDQgKi8gXAogICAgICAJcmV0dXJuIHJ3IyNfY29uZmlnX2R3b3JkKHBjaXN3YXAsIGJ1cywgZGV2Zm4sIHdoZXJlLCB2YWwpOyBcCiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy10eDQ5MzguYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXR4NDkzOC5jCmluZGV4IDRjMGRjZmMuLjBmZjA4MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLXR4NDkzOC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXR4NDkzOC5jCkBAIC0zNCwxNiArMzQsMTYgQEAKIH07CiAKIHN0cnVjdCByZXNvdXJjZSB0eDQ5MzhfcGNpYzFfcGNpX2lvX3Jlc291cmNlID0gewotICAgICAgIAkubmFtZQk9ICJQQ0kxIElPIiwKLSAgICAgICAJLnN0YXJ0CT0gMCwKLSAgICAgICAJLmVuZAk9IDAsCi0gICAgICAgCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KKwkubmFtZQk9ICJQQ0kxIElPIiwKKwkuc3RhcnQJPSAwLAorCS5lbmQJPSAwLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8KIH07CiBzdHJ1Y3QgcmVzb3VyY2UgdHg0OTM4X3BjaWMxX3BjaV9tZW1fcmVzb3VyY2UgPSB7Ci0gICAgICAgCS5uYW1lCT0gIlBDSTEgbWVtIiwKLSAgICAgICAJLnN0YXJ0CT0gMCwKLSAgICAgICAJLmVuZAk9IDAsCi0gICAgICAgCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJLm5hbWUJPSAiUENJMSBtZW0iLAorCS5zdGFydAk9IDAsCisJLmVuZAk9IDAsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KIH07CiAKIHN0YXRpYyBpbnQgbWthZGRyKGludCBidXMsIGludCBkZXZfZm4sIGludCB3aGVyZSwgaW50ICpmbGFnc3ApCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMKaW5kZXggY2E5NzVlNy4uZjRlZjFhMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2ktYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODAuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAKIAlpZiAoYnVzLT5udW1iZXIgPT0gMCkgewogCQlkZXZubyA9IFBDSV9TTE9UKGRldmZuKTsKLSAJCWlmIChiY20xNDgwX2J1c19zdGF0dXMgJiBQQ0lfREVWSUNFX01PREUpCisJCWlmIChiY20xNDgwX2J1c19zdGF0dXMgJiBQQ0lfREVWSUNFX01PREUpCiAJCQlyZXR1cm4gMDsKIAkJZWxzZQogCQkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwaHQuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCmluZGV4IGFjYTRhMmUuLmEzZWViZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODBodC5jCkBAIC05NSw3ICs5NSw3IEBACiAKIAlpZiAoYnVzLT5udW1iZXIgPT0gMCkgewogCQlkZXZubyA9IFBDSV9TTE9UKGRldmZuKTsKLSAJCWlmIChiY20xNDgwaHRfYnVzX3N0YXR1cyAmIFBDSV9ERVZJQ0VfTU9ERSkKKwkJaWYgKGJjbTE0ODBodF9idXNfc3RhdHVzICYgUENJX0RFVklDRV9NT0RFKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktaXAyNy5jIGIvYXJjaC9taXBzL3BjaS9wY2ktaXAyNy5jCmluZGV4IGVmYzk2Y2UuLjYwMDJkMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLWlwMjcuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS1pcDI3LmMKQEAgLTM3OSwxOCArMzc5LDE4IEBACiAJYnJpZGdlID0gKGJyaWRnZV90ICopIFJBV19OT0RFX1NXSU5fQkFTRShuYXNpZCwgd2lkZ2V0X2lkKTsKIAogCS8qCi0gCSAqIENsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMuCi0gCSAqLworCSAqIENsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMuCisJICovCiAJYnJpZGdlLT5iX2ludF9yc3Rfc3RhdCA9IEJSSURHRV9JUlJfQUxMX0NMUjsKIAogCS8qCi0gCSAqIFVudGlsIG90aGVyd2lzZSBzZXQgdXAsIGFzc3VtZSBhbGwgaW50ZXJydXB0cyBhcmUgZnJvbSBzbG90IDAKLSAJICovCisJICogVW50aWwgb3RoZXJ3aXNlIHNldCB1cCwgYXNzdW1lIGFsbCBpbnRlcnJ1cHRzIGFyZSBmcm9tIHNsb3QgMAorCSAqLwogCWJyaWRnZS0+Yl9pbnRfZGV2aWNlID0gMHgwOwogCiAJLyoKLSAJICogc3dhcCBwaW8ncyB0byBwY2kgbWVtIGFuZCBpbyBzcGFjZSAoYmlnIHdpbmRvd3MpCi0gCSAqLworCSAqIHN3YXAgcGlvJ3MgdG8gcGNpIG1lbSBhbmQgaW8gc3BhY2UgKGJpZyB3aW5kb3dzKQorCSAqLwogCWJyaWRnZS0+Yl93aWRfY29udHJvbCB8PSBCUklER0VfQ1RSTF9JT19TV0FQIHwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgQlJJREdFX0NUUkxfTUVNX1NXQVA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC1jLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1vY2Vsb3QtYy5jCmluZGV4IDFkODRkMzYuLjAyNzc1OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jZWxvdC1jLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktb2NlbG90LWMuYwpAQCAtMywxNSArMywxNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAwNiBieSBSYWxmIEJhZWNobGUgKHJhbGZAbGludXgtbWlwcy5vcmcpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL212NjQzNDAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKKyNpbmNsdWRlIDxhc20vbWFydmVsbC5oPgorCiAvKgogICogV2UgYXNzdW1lIHRoZSBhZGRyZXNzIHJhbmdlcyBoYXZlIGFscmVhZHkgYmVlbiBzZXR1cCBhcHByb3ByaWF0ZWx5IGJ5CiAgKiB0aGUgZmlybXdhcmUuICBQTU9OIGluIGNhc2Ugb2YgdGhlIE9jZWxvdCBDIGRvZXMgdGhhdC4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9waGlsaXBzL3BueDg1NTAvY29tbW9uL2ludC5jIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKaW5kZXggNTQ2MTQ0OS4uYzUwMGUyZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKKysrIGIvYXJjaC9taXBzL3BoaWxpcHMvcG54ODU1MC9jb21tb24vaW50LmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQlpZiAoZ2ljX2ludF9saW5lID09IChQTlg4NTUwX0lOVF9HUElPMCAtIFBOWDg1NTBfSU5UX0dJQ19NSU4pKSB7CiAJCQkvKiBQQ0kgSU5UIHRocm91Z2ggZ3BpbyA4LCB3aGljaCBpcyBzZXR1cCBpbgogCQkJICogcG54ODU1MF9zZXR1cC5jIGFuZCByb3V0ZWQgdG8gR1BJTwotIAkJCSAqIEludGVycnVwdCBMZXZlbCAwIChHUElPIENvbm5lY3Rpb24gNTgpLgorCQkJICogSW50ZXJydXB0IExldmVsIDAgKEdQSU8gQ29ubmVjdGlvbiA1OCkuCiAJCQkgKiBTZXQgaXQgYWN0aXZlIGxvdy4gKi8KIAogCQkJUE5YODU1MF9HSUNfUkVRKGdpY19pbnRfbGluZSkgPSAweDFFMDIwMDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYwppbmRleCBmMTdmNTc1Li5jMTk3MzExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zbXAuYwpAQCAtNTAsMzcgKzUwLDI1IEBACiAgKiBXZSBkb24ndCB3YW50IHRvIHN0YXJ0IHRoZSBzZWNvbmRhcnkgQ1BVIHlldCBub3IgZG8gd2UgaGF2ZSBhIG5pY2UgcHJvYmluZwogICogZmVhdHVyZSBpbiBQTU9OIHNvIHdlIGp1c3QgYXNzdW1lIHByZXNlbmNlIG9mIHRoZSBzZWNvbmRhcnkgY29yZS4KICAqLwotc3RhdGljIGNoYXIgbWF4Y3B1c19zdHJpbmdbXSBfX2luaXRkYXRhID0KLQlLRVJOX1dBUk5JTkcgIm1heF9jcHVzIHNldCB0byAwOyB1c2luZyAxIGluc3RlYWRcbiI7Ci0KLXZvaWQgX19pbml0IHByb21fcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHBsYXRfc21wX3NldHVwKHZvaWQpCiB7Ci0JaW50IGVuYWJsZWQgPSAwLCBpOwotCi0JaWYgKG1heF9jcHVzID09IDApIHsKLQkJcHJpbnRrKG1heGNwdXNfc3RyaW5nKTsKLQkJbWF4X2NwdXMgPSAxOwotCX0KKwlpbnQgaTsKIAogCWNwdXNfY2xlYXIocGh5c19jcHVfcHJlc2VudF9tYXApOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlpZiAoaSA9PSBtYXhfY3B1cykKLQkJCWJyZWFrOwotCi0JCS8qCi0JCSAqIFRoZSBib290IENQVQotCQkgKi8KIAkJY3B1X3NldChpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CiAJCV9fY3B1X251bWJlcl9tYXBbaV0JPSBpOwogCQlfX2NwdV9sb2dpY2FsX21hcFtpXQk9IGk7Ci0JCWVuYWJsZWQrKzsKIAl9Cit9CiAKK3ZvaWQgX19pbml0IHBsYXRfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKIAkvKgogCSAqIEJlIHBhcmFub2lkLiAgRW5hYmxlIHRoZSBJUEkgb25seSBpZiB3ZSdyZSByZWFsbHkgYWJvdXQgdG8gZ28gU01QLgogCSAqLwotCWlmIChlbmFibGVkID4gMSkKKwlpZiAoY3B1c193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hcCkpCiAJCXNldF9jMF9zdGF0dXMoU1RBVFVTRl9JUDUpOwogfQogCkBAIC05NCw3ICs4Miw3IEBACiB2b2lkIHByb21fYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQogewogCXVuc2lnbmVkIGxvbmcgZ3AgPSAodW5zaWduZWQgbG9uZykgdGFza190aHJlYWRfaW5mbyhpZGxlKTsKLQl1bnNpZ25lZCBsb25nIHNwID0gX19LU1RLX1RPUChpZGxlKTsKKwl1bnNpZ25lZCBsb25nIHNwID0gX19LU1RLX1RPUyhpZGxlKTsKIAogCXNlY29uZGFyeV9zcCA9IHNwOwogCXNlY29uZGFyeV9ncCA9IGdwOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3FlbXUvTWFrZWZpbGUgYi9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQppbmRleCA5MzQ5NDRhLi42YThlOGJjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcWVtdS9NYWtlZmlsZQpAQCAtMywzICszLDUgQEAKICMKIAogb2JqLXkJCT0gcS1maXJtd2FyZS5vIHEtaW50Lm8gcS1pcnEubyBxLW1lbS5vIHEtc2V0dXAubworCitvYmotJChDT05GSUdfU01QKSArPSBxLXNtcC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcWVtdS9xLXNtcC5jIGIvYXJjaC9taXBzL3FlbXUvcS1zbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTEyMzU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3FlbXUvcS1zbXAuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFJhbGYgQmFlY2hsZSAocmFsZkBsaW51eC1taXBzLm9yZykKKyAqCisgKiBTeW1tZXRyaWMgVW5pcHJvY2Vzc29yIChUTSkgU3VwcG9ydAorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworLyoKKyAqIFNlbmQgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdAorICovCit2b2lkIGNvcmVfc2VuZF9pcGkoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKK3sKKwlwYW5pYyhLRVJOX0VSUiAiJXMgY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKK30KKworLyoKKyAqICBBZnRlciB3ZSd2ZSBkb25lIGluaXRpYWwgYm9vdCwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gYWxsb3cgdGhlCisgKiAgYm9hcmQgY29kZSB0byBjbGVhbiB1cCBzdGF0ZSwgaWYgbmVlZGVkCisgKi8KK3ZvaWQgcHJvbV9pbml0X3NlY29uZGFyeSh2b2lkKQoreworfQorCit2b2lkIHByb21fc21wX2ZpbmlzaCh2b2lkKQoreworfQorCisvKiBIb29rIGZvciBhZnRlciBhbGwgQ1BVcyBhcmUgb25saW5lICovCit2b2lkIHByb21fY3B1c19kb25lKHZvaWQpCit7Cit9CisKK3ZvaWQgX19pbml0IHByb21fcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwljcHVzX2NsZWFyKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKK30KKworLyoKKyAqIEZpcm13YXJlIENQVSBzdGFydHVwIGhvb2sKKyAqLwordm9pZCBwcm9tX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKaW5kZXggNzNlNWU1Mi4uMjg1NGFjNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKQEAgLTg4LDEyICs4OCw5IEBACiB7CiAJaW50IGNwdSwgaTsKIAotCWZvciAoY3B1ID0gMDsgY3B1IDw9IE5SX0NQVVM7IGNwdSsrKSB7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IHNsaWNlX2RhdGEgKnNpID0gY3B1X2RhdGFbY3B1XS5kYXRhOwogCi0JCWlmICghY3B1X29ubGluZShjcHUpKQotCQkJY29udGludWU7Ci0KIAkJZm9yIChpID0gQkFTRV9QQ0lfSVJROyBpIDwgTEVWRUxTX1BFUl9TTElDRTsgaSsrKQogCQkJaWYgKHNpLT5sZXZlbF90b19pcnFbaV0gPT0gaXJxKSB7CiAJCQkJKmNwdW51bSA9IGNwdTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW1lbW9yeS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbWVtb3J5LmMKaW5kZXggZWYyMGQ5YS4uZTBkMDk1ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbWVtb3J5LmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbWVtb3J5LmMKQEAgLTU0MCw4ICs1NDAsOCBAQAogCQlzdHJ1Y3QgcGFnZSAqZW5kLCAqcDsKIAogCQkvKgotCSAJICogVGhpcyB3aWxsIGZyZWUgdXAgdGhlIGJvb3RtZW0sIGllLCBzbG90IDAgbWVtb3J5LgotCSAJICovCisJCSAqIFRoaXMgd2lsbCBmcmVlIHVwIHRoZSBib290bWVtLCBpZSwgc2xvdCAwIG1lbW9yeS4KKwkJICovCiAJCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYWxsX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZSkpOwogCiAJCS8qCkBAIC01NTksNyArNTU5LDcgQEAKIAkJCQkvKiBpZiAoIXBhZ2VfaXNfcmFtKHBnbnIpKSBjb250aW51ZTsgKi8KIAkJCQkvKiBjb21tZW50ZWQgb3V0IHVudGlsIHBhZ2VfaXNfcmFtIHdvcmtzICovCiAJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocCk7Ci0JCQkJc2V0X3BhZ2VfY291bnQocCwgMSk7CisJCQkJaW5pdF9wYWdlX2NvdW50KHApOwogCQkJCV9fZnJlZV9wYWdlKHApOwogCQkJCXRvdGFscmFtX3BhZ2VzKys7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCmluZGV4IGRiZWYzZjYuLjA5ZmE3ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJUkVNT1RFX0hVQl9DTFJfSU5UUihuYXNpZCwgaSk7CiB9CiAKLXZvaWQgX19pbml0IHByb21fcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3ZvaWQgX19pbml0IHBsYXRfc21wX3NldHVwKHZvaWQpCiB7CiAJY25vZGVpZF90CWNub2RlOwogCkBAIC0xNjEsNiArMTYxLDExIEBACiAJYWxsb2NfY3B1cGRhKDAsIDApOwogfQogCit2b2lkIF9faW5pdCBwbGF0X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJLyogV2UgYWxyZWFkeSBkaWQgZXZlcnl0aGluZyBuZWNlc3NhcnkgZWFybGllciAqLworfQorCiAvKgogICogTGF1bmNoIGEgc2xhdmUgaW50byBzbXBfYm9vdHN0cmFwKCkuICBJdCBkb2Vzbid0IHRha2UgYW4gYXJndW1lbnQsIGFuZCB3ZQogICogc2V0IHNwIHRvIHRoZSBrZXJuZWwgc3RhY2sgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgaWRsZSBwcm9jZXNzLCBncCB0byB0aGUgcHJvYwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKaW5kZXggMmMzODc3MC4uMmY1MGM3OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCkBAIC05OCw3ICs5OCw3IEBACiAJYm9hcmRfdGltZXJfc2V0dXAgPSBpcDMyX3RpbWVyX3NldHVwOwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCi0gCXsKKwl7CiAJCXN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IG8yX3NlcmlhbFsyXTsKIAogCQltZW1zZXQobzJfc2VyaWFsLCAwLCBzaXplb2YobzJfc2VyaWFsKSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL0tjb25maWcgYi9hcmNoL21pcHMvc2lieXRlL0tjb25maWcKaW5kZXggZGU0NmY2Mi4uODE2YWVlNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvS2NvbmZpZwpAQCAtMTAyLDExICsxMDIsMTEgQEAKIAkgIEJ1aWxkIGEga2VybmVsIHN1aXRhYmxlIGZvciBydW5uaW5nIHVuZGVyIHRoZSBHREIgc2ltdWxhdG9yLgogCSAgUHJpbWFyaWx5IGFkanVzdHMgdGhlIGtlcm5lbCdzIG5vdGlvbiBvZiB0aW1lLgogCi1jb25maWcgQ09ORklHX1NCMV9DRVhfQUxXQVlTX0ZBVEFMCitjb25maWcgU0IxX0NFWF9BTFdBWVNfRkFUQUwKIAlib29sICJBbGwgY2FjaGUgZXhjZXB0aW9ucyBjb25zaWRlcmVkIGZhdGFsIChubyByZWNvdmVyeSBhdHRlbXB0ZWQpIgogCWRlcGVuZHMgb24gU0lCWVRFX1NCMXh4eF9TT0MKIAotY29uZmlnIENPTkZJR19TQjFfQ0VSUl9TVEFMTAorY29uZmlnIFNCMV9DRVJSX1NUQUxMCiAJYm9vbCAiU3RhbGwgKHJhdGhlciB0aGFuIHBhbmljKSBvbiBmYXRhbCBjYWNoZSBlcnJvciIKIAlkZXBlbmRzIG9uIFNJQllURV9TQjF4eHhfU09DCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwppbmRleCBiMmExYmE1Li45Y2Y3ZDcxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCkBAIC0xMzksNyArMTM5LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdm9pZCBiY20xNDgwX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKIHsKLQlpbnQgaSA9IDAsIG9sZF9jcHUsIGNwdSwgaW50X29uOworCWludCBpID0gMCwgb2xkX2NwdSwgY3B1LCBpbnRfb24sIGs7CiAJdTY0IGN1cl9pbnRzOwogCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTY1LDcgKzE2NSw2IEBACiAJCWlycV9kaXJ0eSAtPSBCQ00xNDgwX05SX0lSUVNfSEFMRjsKIAl9CiAKLQlpbnQgazsKIAlmb3IgKGs9MDsgazwyOyBrKyspIHsgLyogTG9vcCB0aHJvdWdoIGhpZ2ggYW5kIGxvdyBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLwogCQljdXJfaW50cyA9IF9fX19yYXdfcmVhZHEoSU9BRERSKEFfQkNNMTQ4MF9JTVJfTUFQUEVSKG9sZF9jcHUpICsgUl9CQ00xNDgwX0lNUl9JTlRFUlJVUFRfTUFTS19IICsgKGsqQkNNMTQ4MF9JTVJfSExfU1BBQ0lORykpKTsKIAkJaW50X29uID0gIShjdXJfaW50cyAmICgoKHU2NCkgMSkgPDwgaXJxX2RpcnR5KSk7CkBAIC0yMTYsNiArMjE1LDcgQEAKIHsKIAl1NjQgcGVuZGluZzsKIAl1bnNpZ25lZCBpbnQgaXJxX2RpcnR5OworCWludCBrOwogCiAJLyoKIAkgKiBJZiB0aGUgaW50ZXJydXB0IHdhcyBhbiBIVCBpbnRlcnJ1cHQsIG5vdyBpcyB0aGUgdGltZSB0bwpAQCAtMjI3LDcgKzIyNyw2IEBACiAJaWYgKChpcnFfZGlydHkgPj0gQkNNMTQ4MF9OUl9JUlFTX0hBTEYpICYmIChpcnFfZGlydHkgPD0gQkNNMTQ4MF9OUl9JUlFTKSkgewogCQlpcnFfZGlydHkgLT0gQkNNMTQ4MF9OUl9JUlFTX0hBTEY7CiAJfQotCWludCBrOwogCWZvciAoaz0wOyBrPDI7IGsrKykgeyAvKiBMb29wIHRocm91Z2ggaGlnaCBhbmQgbG93IExEVCBpbnRlcnJ1cHRzICovCiAJCXBlbmRpbmcgPSBfX3Jhd19yZWFkcShJT0FERFIoQV9CQ00xNDgwX0lNUl9SRUdJU1RFUihiY20xNDgwX2lycV9vd25lcltpcnFdLAogCQkJCQkJUl9CQ00xNDgwX0lNUl9MRFRfSU5URVJSVVBUX0ggKyAoaypCQ00xNDgwX0lNUl9ITF9TUEFDSU5HKSkpKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY2ZlL3NtcC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jZmUvc21wLmMKaW5kZXggNDQ3N2FmMy4uZWFiMjBlMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jZmUvc21wLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jZmUvc21wLmMKQEAgLTMxLDcgKzMxLDcgQEAKICAqCiAgKiBDb21tb24gc2V0dXAgYmVmb3JlIGFueSBzZWNvbmRhcmllcyBhcmUgc3RhcnRlZAogICovCi12b2lkIF9faW5pdCBwcm9tX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit2b2lkIF9faW5pdCBwbGF0X3NtcF9zZXR1cCh2b2lkKQogewogCWludCBpLCBudW07CiAKQEAgLTQwLDE0ICs0MCwxOCBAQAogCV9fY3B1X251bWJlcl9tYXBbMF0gPSAwOwogCV9fY3B1X2xvZ2ljYWxfbWFwWzBdID0gMDsKIAotCWZvciAoaT0xLCBudW09MDsgaTxOUl9DUFVTOyBpKyspIHsKKwlmb3IgKGkgPSAxLCBudW0gPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CiAJCWlmIChjZmVfY3B1X3N0b3AoaSkgPT0gMCkgewogCQkJY3B1X3NldChpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CiAJCQlfX2NwdV9udW1iZXJfbWFwW2ldID0gKytudW07CiAJCQlfX2NwdV9sb2dpY2FsX21hcFtudW1dID0gaTsKIAkJfQogCX0KLQlwcmludGsoIkRldGVjdGVkICVpIGF2YWlsYWJsZSBzZWNvbmRhcnkgQ1BVKHMpXG4iLCBudW0pOworCXByaW50ayhLRVJOX0lORk8gIkRldGVjdGVkICVpIGF2YWlsYWJsZSBzZWNvbmRhcnkgQ1BVKHMpXG4iLCBudW0pOworfQorCit2b2lkIF9faW5pdCBwbGF0X3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC90aW1lLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC90aW1lLmMKaW5kZXggNTExYzg5ZC4uMTU4OGY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3RpbWUuYwpAQCAtNDcsMjMgKzQ3LDUxIEBACiAjZGVmaW5lIElNUl9JUDNfVkFMCUtfSU5UX01BUF9JMQogI2RlZmluZSBJTVJfSVA0X1ZBTAlLX0lOVF9NQVBfSTIKIAorI2RlZmluZSBTQjEyNTBfSFBUX05VTQkJMworI2RlZmluZSBTQjEyNTBfSFBUX1ZBTFVFCU1fU0NEX1RJTUVSX0NOVCAvKiBtYXggdmFsdWUgKi8KKyNkZWZpbmUgU0IxMjUwX0hQVF9TSElGVAkoKHNpemVvZih1bnNpZ25lZCBpbnQpKjgpLVZfU0NEX1RJTUVSX1dJRFRIKQorCisKIGV4dGVybiBpbnQgc2IxMjUwX3N0ZWFsX2lycShpbnQgaXJxKTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBzYjEyNTBfaHB0X3JlYWQodm9pZCk7CitzdGF0aWMgdm9pZCBzYjEyNTBfaHB0X2luaXQodW5zaWduZWQgaW50KTsKKworc3RhdGljIHVuc2lnbmVkIGludCBocHRfb2Zmc2V0OworCit2b2lkIF9faW5pdCBzYjEyNTBfaHB0X3NldHVwKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmICghY3B1KSB7CisJCS8qIFNldHVwIGhwdCB1c2luZyB0aW1lciAjMyBidXQgZG8gbm90IGVuYWJsZSBpcnEgZm9yIGl0ICovCisJCV9fcmF3X3dyaXRlcSgwLCBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoU0IxMjUwX0hQVF9OVU0sIFJfU0NEX1RJTUVSX0NGRykpKTsKKwkJX19yYXdfd3JpdGVxKFNCMTI1MF9IUFRfVkFMVUUsCisJCQkgICAgIElPQUREUihBX1NDRF9USU1FUl9SRUdJU1RFUihTQjEyNTBfSFBUX05VTSwgUl9TQ0RfVElNRVJfSU5JVCkpKTsKKwkJX19yYXdfd3JpdGVxKE1fU0NEX1RJTUVSX0VOQUJMRSB8IE1fU0NEX1RJTUVSX01PREVfQ09OVElOVU9VUywKKwkJCSAgICAgSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKFNCMTI1MF9IUFRfTlVNLCBSX1NDRF9USU1FUl9DRkcpKSk7CisKKwkJLyoKKwkJICogd2UgbmVlZCB0byBmaWxsIDMyIGJpdHMsIHNvIGp1c3QgdXNlIHRoZSB1cHBlciAyMyBiaXRzIGFuZCBwcmV0ZW5kCisJCSAqIHRoZSB0aW1lciBpcyBnb2luZyA1MTJNaHogaW5zdGVhZCBvZiAxTWh6CisJCSAqLworCQltaXBzX2hwdF9mcmVxdWVuY3kgPSBWX1NDRF9USU1FUl9GUkVRIDw8IFNCMTI1MF9IUFRfU0hJRlQ7CisJCW1pcHNfaHB0X2luaXQgPSBzYjEyNTBfaHB0X2luaXQ7CisJCW1pcHNfaHB0X3JlYWQgPSBzYjEyNTBfaHB0X3JlYWQ7CisJfQorfQorCisKIHZvaWQgc2IxMjUwX3RpbWVfaW5pdCh2b2lkKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGlycSA9IEtfSU5UX1RJTUVSXzArY3B1OwogCi0JLyogT25seSBoYXZlIDQgZ2VuZXJhbCBwdXJwb3NlIHRpbWVycyAqLwotCWlmIChjcHUgPiAzKSB7CisJLyogT25seSBoYXZlIDQgZ2VuZXJhbCBwdXJwb3NlIHRpbWVycywgYW5kIHdlIHVzZSBsYXN0IG9uZSBhcyBocHQgKi8KKwlpZiAoY3B1ID4gMikgewogCQlCVUcoKTsKIAl9CiAKLQlpZiAoIWNwdSkgewotCQkvKiBVc2Ugb3VyIG93biBnZXR0aW1lb2Zmc2V0KCkgcm91dGluZSAqLwotCQlkb19nZXR0aW1lb2Zmc2V0ID0gc2IxMjUwX2dldHRpbWVvZmZzZXQ7Ci0JfQotCiAJc2IxMjUwX21hc2tfaXJxKGNwdSwgaXJxKTsKIAogCS8qIE1hcCB0aGUgdGltZXIgaW50ZXJydXB0IHRvIGlwWzRdIG9mIHRoaXMgY3B1ICovCkBAIC03NSwxMCArMTAzLDEwIEBACiAJLyogRGlzYWJsZSB0aGUgdGltZXIgYW5kIHNldCB1cCB0aGUgY291bnQgKi8KIAlfX3Jhd193cml0ZXEoMCwgSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKGNwdSwgUl9TQ0RfVElNRVJfQ0ZHKSkpOwogI2lmZGVmIENPTkZJR19TSU1VTEFUSU9OCi0JX19yYXdfd3JpdGVxKDUwMDAwIC8gSFosCisJX19yYXdfd3JpdGVxKCg1MDAwMCAvIEhaKSAtIDEsCiAJCSAgICAgSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKGNwdSwgUl9TQ0RfVElNRVJfSU5JVCkpKTsKICNlbHNlCi0JX19yYXdfd3JpdGVxKDEwMDAwMDAgLyBIWiwKKwlfX3Jhd193cml0ZXEoKFZfU0NEX1RJTUVSX0ZSRVEgLyBIWikgLSAxLAogCQkgICAgIElPQUREUihBX1NDRF9USU1FUl9SRUdJU1RFUihjcHUsIFJfU0NEX1RJTUVSX0lOSVQpKSk7CiAjZW5kaWYKIApAQCAtMTAzLDcgKzEzMSw3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgaXJxID0gS19JTlRfVElNRVJfMCArIGNwdTsKIAotCS8qIFJlc2V0IHRoZSB0aW1lciAqLworCS8qIEFDSyBpbnRlcnJ1cHQgKi8KIAlfX19fcmF3X3dyaXRlcShNX1NDRF9USU1FUl9FTkFCTEUgfCBNX1NDRF9USU1FUl9NT0RFX0NPTlRJTlVPVVMsCiAJCSAgICAgICBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoY3B1LCBSX1NDRF9USU1FUl9DRkcpKSk7CiAKQEAgLTEyMiwxNSArMTUwLDI2IEBACiB9CiAKIC8qCi0gKiBXZSB1c2Ugb3VyIG93biBkb19nZXR0aW1lb2Zmc2V0KCkgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBvbmUsCi0gKiBiZWNhdXNlIHRoZSBnZW5lcmljIG9uZSBkb2VzIG5vdCB3b3JrIGZvciBTTVAgY2FzZS4KLSAqIEluIGFkZGl0aW9uLCBzaW5jZSB3ZSB1c2UgZ2VuZXJhbCB0aW1lciAwIGZvciBzeXN0ZW0gdGltZSwKLSAqIHdlIGNhbiBnZXQgYWNjdXJhdGUgaW50cmEtamlmZnkgb2Zmc2V0IHdpdGhvdXQgY2FsaWJyYXRpb24uCisgKiBUaGUgSFBUIGlzIGZyZWUgcnVubmluZyBmcm9tIFNCMTI1MF9IUFRfVkFMVUUgZG93biB0byAwIHRoZW4gc3RhcnRzIG92ZXIKKyAqIGFnYWluLiBUaGVyZSdzIG5vIGVhc3kgd2F5IHRvIHNldCB0byBhIHNwZWNpZmljIHZhbHVlIHNvIHN0b3JlIGluaXQgdmFsdWUKKyAqIGluIGhwdF9vZmZzZXQgYW5kIHN1YnRyYWN0IGVhY2ggdGltZS4KKyAqCisgKiBOb3RlOiBUaW1lciBpc24ndCBmdWxsIDMyYml0cyBzbyBzaGlmdCBpdCBpbnRvIHRoZSB1cHBlciBwYXJ0IG1ha2luZworICogICAgICAgaXQgYXBwZWFyIHRvIHJ1biBhdCBhIGhpZ2hlciBmcmVxdWVuY3kuCiAgKi8KLXVuc2lnbmVkIGxvbmcgc2IxMjUwX2dldHRpbWVvZmZzZXQodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2IxMjUwX2hwdF9yZWFkKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3VudCA9Ci0JCV9fcmF3X3JlYWRxKElPQUREUihBX1NDRF9USU1FUl9SRUdJU1RFUigwLCBSX1NDRF9USU1FUl9DTlQpKSk7CisJdW5zaWduZWQgaW50IGNvdW50OwogCi0JcmV0dXJuIDEwMDAwMDAvSFogLSBjb3VudDsKLSB9CisJY291bnQgPSBHX1NDRF9USU1FUl9DTlQoX19yYXdfcmVhZHEoSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKFNCMTI1MF9IUFRfTlVNLCBSX1NDRF9USU1FUl9DTlQpKSkpOworCisJY291bnQgPSAoU0IxMjUwX0hQVF9WQUxVRSAtIGNvdW50KSA8PCBTQjEyNTBfSFBUX1NISUZUOworCisJcmV0dXJuIGNvdW50IC0gaHB0X29mZnNldDsKK30KKworc3RhdGljIHZvaWQgc2IxMjUwX2hwdF9pbml0KHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlocHRfb2Zmc2V0ID0gY291bnQ7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCmluZGV4IGI2MTRjYTAuLmI2NjFkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKQEAgLTcwLDYgKzcwLDEyIEBACiAJcmV0dXJuICJTaUJ5dGUgIiBTSUJZVEVfQk9BUkRfTkFNRTsKIH0KIAordm9pZCBfX2luaXQgc3dhcm1fdGltZV9pbml0KHZvaWQpCit7CisJLyogU2V0dXAgSFBUICovCisJc2IxMjUwX2hwdF9zZXR1cCgpOworfQorCiB2b2lkIF9faW5pdCBzd2FybV90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCiB7CiAgICAgICAgIC8qCkBAIC0xMDksNiArMTE1LDcgQEAKIAogCXBhbmljX3RpbWVvdXQgPSA1OyAgLyogRm9yIGRlYnVnLiAgKi8KIAorCWJvYXJkX3RpbWVfaW5pdCA9IHN3YXJtX3RpbWVfaW5pdDsKIAlib2FyZF90aW1lcl9zZXR1cCA9IHN3YXJtX3RpbWVyX3NldHVwOwogCWJvYXJkX2JlX2hhbmRsZXIgPSBzd2FybV9iZV9oYW5kbGVyOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcvdG9zaGliYV9yYnR4NDkyN19wcm9tLmMgYi9hcmNoL21pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcvdG9zaGliYV9yYnR4NDkyN19wcm9tLmMKaW5kZXggZTE5ZTJiZS4uZWZlNTA1NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjdfcHJvbS5jCisrKyBiL2FyY2gvbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy90b3NoaWJhX3JidHg0OTI3X3Byb20uYwpAQCAtNzAsMTAgKzcwLDEwIEBACiAKIAlpZiAoKHJlYWRfYzBfcHJpZCgpICYgMHhmZikgPT0gUFJJRF9SRVZfVFg0OTI3KSB7CiAJCW1pcHNfbWFjaHR5cGUgPSBNQUNIX1RPU0hJQkFfUkJUWDQ5Mjc7Ci0gCQl0b3NoaWJhX25hbWUgID0gIlRYNDkyNyI7CisJCXRvc2hpYmFfbmFtZSAgPSAiVFg0OTI3IjsKIAl9IGVsc2UgewogCQltaXBzX21hY2h0eXBlID0gTUFDSF9UT1NISUJBX1JCVFg0OTM3OwotIAkJdG9zaGliYV9uYW1lICA9ICJUWDQ5MzciOworCQl0b3NoaWJhX25hbWUgID0gIlRYNDkzNyI7CiAJfQogCiAJbXNpemUgPSB0eDQ5MjdfZ2V0X21lbV9zaXplKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L3Rvc2hpYmFfcmJ0eDQ5Mzgvc2V0dXAuYyBiL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zZXR1cC5jCmluZGV4IDVjN2FjZTkuLjkxNjZjZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eDQ5MzgvdG9zaGliYV9yYnR4NDkzOC9zZXR1cC5jCkBAIC02ODQsNyArNjg0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmICghKHR4NDkzOF9lYnVzY3B0ci0+Y3JbaV0gJiAweDgpKQogCQkJY29udGludWU7CS8qIGRpc2FibGVkICovCi0gCQlyYnR4NDkzOF9jZV9iYXNlW2ldID0gKHVuc2lnbmVkIGxvbmcpVFg0OTM4X0VCVVNDX0JBKGkpOworCQlyYnR4NDkzOF9jZV9iYXNlW2ldID0gKHVuc2lnbmVkIGxvbmcpVFg0OTM4X0VCVVNDX0JBKGkpOwogCQl0eGJvYXJkX2FkZF9waHlzX3JlZ2lvbihyYnR4NDkzOF9jZV9iYXNlW2ldLCBUWDQ5MzhfRUJVU0NfU0laRShpKSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9iY3UuYyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2JjdS5jCmluZGV4IGRlMGMxYjMuLmZmMjcyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2JjdS5jCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2JjdS5jCkBAIC0xODMsMTEgKzE4MywxMSBAQAogCXN3aXRjaCAoY3VycmVudF9jcHVfZGF0YS5jcHV0eXBlKSB7CiAJY2FzZSBDUFVfVlI0MTExOgogCQlpZiAoIShjbGtzcGVlZCAmIERJVjJCKSkKLSAgICAgICAgCQl0Y2xvY2sgPSBwY2xvY2sgLyAyOworCQkJdGNsb2NrID0gcGNsb2NrIC8gMjsKIAkJZWxzZSBpZiAoIShjbGtzcGVlZCAmIERJVjNCKSkKLSAgICAgICAgCQl0Y2xvY2sgPSBwY2xvY2sgLyAzOworCQkJdGNsb2NrID0gcGNsb2NrIC8gMzsKIAkJZWxzZSBpZiAoIShjbGtzcGVlZCAmIERJVjRCKSkKLSAgICAgICAgCQl0Y2xvY2sgPSBwY2xvY2sgLyA0OworCQkJdGNsb2NrID0gcGNsb2NrIC8gNDsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfVlI0MTIxOgogCQl0Y2xvY2sgPSBwY2xvY2sgLyBESVZUKGNsa3NwZWVkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGU4ZGVhNDEuLjBiNDg1ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYwpAQCAtNTQsMTEgKzU0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAotdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKLXsKLQliYXJyaWVyKCk7Ci19Ci0KIC8qCiAgKiBUaGUgaWRsZSB0aHJlYWQuIFRoZXJlJ3Mgbm8gdXNlZnVsIHdvcmsgdG8gYmUKICAqIGRvbmUsIHNvIGp1c3QgdHJ5IHRvIGNvbnNlcnZlIHBvd2VyIGFuZCBoYXZlIGEKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwppbmRleCAyNTU2NGI3Li5kNmFjMWM2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCkBAIC0yOTgsOCArMjk4LDggQEAKIHsKIAlpbnQgaTsKIAkKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmIChjcHVfb25saW5lKGkpICYmIGkgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQlpZiAoaSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCiAJCQlzZW5kX0lQSV9zaW5nbGUoaSwgb3ApOwogCX0KIH0KQEAgLTY0MywxNCArNjQzLDEzIEBACiAJaWYgKCBhcmdjID09IDEgKXsKIAkKICNpZmRlZiBEVU1QX01PUkVfU1RBVEUKLQkJZm9yKGk9MDsgaTxOUl9DUFVTOyBpKyspIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CiAJCQlpbnQgY3B1c19wZXJfbGluZSA9IDQ7Ci0JCQlpZihjcHVfb25saW5lKGkpKSB7Ci0JCQkJaWYgKGorKyAlIGNwdXNfcGVyX2xpbmUpCi0JCQkJCXByaW50aygiICUzZCIsaSk7Ci0JCQkJZWxzZQotCQkJCQlwcmludGsoIlxuICUzZCIsaSk7Ci0JCQl9CisKKwkJCWlmIChqKysgJSBjcHVzX3Blcl9saW5lKQorCQkJCXByaW50aygiICUzZCIsaSk7CisJCQllbHNlCisJCQkJcHJpbnRrKCJcbiAlM2QiLGkpOwogCQl9CiAJCXByaW50aygiXG4iKTsgCiAjZWxzZQpAQCAtNjU5LDkgKzY1OCw3IEBACiAJfSBlbHNlIGlmKChhcmdjPT0yKSAmJiAhKHN0cmNtcChhcmd2WzFdLCItbCIpKSkgewogCQlwcmludGsoIlxuQ1BVU1RBVEUgIFRBU0sgQ1BVTlVNIENQVUlEIEhBUkRDUFUoSFBBKVxuIik7CiAjaWZkZWYgRFVNUF9NT1JFX1NUQVRFCi0JCWZvcihpPTA7aTxOUl9DUFVTO2krKykgewotCQkJaWYgKCFjcHVfb25saW5lKGkpKQotCQkJCWNvbnRpbnVlOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJCWlmIChjcHVfZGF0YVtpXS5jcHVpZCAhPSBOT19QUk9DX0lEKSB7CiAJCQkJc3dpdGNoKGNwdV9kYXRhW2ldLnN0YXRlKSB7CiAJCQkJCWNhc2UgU1RBVEVfUkVOREVaVk9VUzoKQEAgLTY5NSw5ICs2OTIsNyBAQAogCX0gZWxzZSBpZiAoKGFyZ2M9PTIpICYmICEoc3RyY21wKGFyZ3ZbMV0sIi1zIikpKSB7IAogI2lmZGVmIERVTVBfTU9SRV9TVEFURQogICAgICAJCXByaW50aygiXG5DUFVTVEFURSAgIENQVUlEXG4iKTsKLQkJZm9yIChpPTA7aTxOUl9DUFVTO2krKykgewotCQkJaWYgKCFjcHVfb25saW5lKGkpKQotCQkJCWNvbnRpbnVlOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJCWlmIChjcHVfZGF0YVtpXS5jcHVpZCAhPSBOT19QUk9DX0lEKSB7CiAJCQkJc3dpdGNoKGNwdV9kYXRhW2ldLnN0YXRlKSB7CiAJCQkJCWNhc2UgU1RBVEVfUkVOREVaVk9VUzoKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCA3ODQ3Y2ExLi44NTJlZGEzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC0zOTgsNyArMzk4LDcgQEAKIAlhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pOwogCWZvciAoOyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKTsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJbnVtX3BoeXNwYWdlcysrOwogCQl0b3RhbHJhbV9wYWdlcysrOwpAQCAtMTAxOCw3ICsxMDE4LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLCAoZW5kIC0gc3RhcnQpID4+IDEwKTsKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKIAkJZnJlZV9wYWdlKHN0YXJ0KTsKIAkJbnVtX3BoeXNwYWdlcysrOwogCQl0b3RhbHJhbV9wYWdlcysrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA4MGQxMTRhLi5mYWU0MmRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTI3LDYgKzEyNywxMiBAQAogCXNlbGVjdCA4M3h4CiAJc2VsZWN0IFBQQ19GUFUKIAorY29uZmlnIFBQQ184NXh4CisJYm9vbCAiRnJlZXNjYWxlIDg1eHgiCisJc2VsZWN0IEU1MDAKKwlzZWxlY3QgRlNMX1NPQworCXNlbGVjdCA4NXh4CisKIGNvbmZpZyA0MHgKIAlib29sICJBTUNDIDQweCIKIApAQCAtMTM5LDggKzE0NSw2IEBACiBjb25maWcgRTIwMAogCWJvb2wgIkZyZWVzY2FsZSBlMjAwIgogCi1jb25maWcgRTUwMAotCWJvb2wgIkZyZWVzY2FsZSBlNTAwIgogZW5kY2hvaWNlCiAKIGNvbmZpZyBQT1dFUjRfT05MWQpAQCAtMTY4LDYgKzE3MiwxMyBAQAogY29uZmlnIDgzeHgKIAlib29sCiAKKyMgdGhpcyBpcyB0ZW1wIHRvIGhhbmRsZSBjb21wYXQgd2l0aCBhcmNoPXBwYworY29uZmlnIDg1eHgKKwlib29sCisKK2NvbmZpZyBFNTAwCisJYm9vbAorCiBjb25maWcgUFBDX0ZQVQogCWJvb2wKIAlkZWZhdWx0IHkgaWYgUFBDNjQKQEAgLTIxNyw2ICsyMjgsNyBAQAogY29uZmlnIFNQRQogCWJvb2wgIlNQRSBTdXBwb3J0IgogCWRlcGVuZHMgb24gRTIwMCB8fCBFNTAwCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIFNpZ25hbCBQcm9jZXNzaW5nCiAJICBFeHRlbnNpb25zIChTUEUpIHRvIHRoZSBQb3dlclBDIHByb2Nlc3Nvci4gVGhlIGtlcm5lbCBjdXJyZW50bHkKQEAgLTIzOCw2ICsyNTAsMjEgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBQUENfU1REX01NVSAmJiBQUEMzMgogCitjb25maWcgVklSVF9DUFVfQUNDT1VOVElORworCWJvb2wgIkRldGVybWluaXN0aWMgdGFzayBhbmQgQ1BVIHRpbWUgYWNjb3VudGluZyIKKwlkZXBlbmRzIG9uIFBQQzY0CisJZGVmYXVsdCB5CisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSBtb3JlIGFjY3VyYXRlIHRhc2sgYW5kIENQVSB0aW1lCisJICBhY2NvdW50aW5nLiAgVGhpcyBpcyBkb25lIGJ5IHJlYWRpbmcgYSBDUFUgY291bnRlciBvbiBlYWNoCisJICBrZXJuZWwgZW50cnkgYW5kIGV4aXQgYW5kIG9uIHRyYW5zaXRpb25zIHdpdGhpbiB0aGUga2VybmVsCisJICBiZXR3ZWVuIHN5c3RlbSwgc29mdGlycSBhbmQgaGFyZGlycSBzdGF0ZSwgc28gdGhlcmUgaXMgYQorCSAgc21hbGwgcGVyZm9ybWFuY2UgaW1wYWN0LiAgVGhpcyBhbHNvIGVuYWJsZXMgYWNjb3VudGluZyBvZgorCSAgc3RvbGVuIHRpbWUgb24gbG9naWNhbGx5LXBhcnRpdGlvbmVkIHN5c3RlbXMgcnVubmluZyBvbgorCSAgSUJNIFBPV0VSNS1iYXNlZCBtYWNoaW5lcy4KKworCSAgSWYgaW4gZG91YnQsIHNheSBZIGhlcmUuCisKIGNvbmZpZyBTTVAKIAlkZXBlbmRzIG9uIFBQQ19TVERfTU1VCiAJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCIKQEAgLTU4MCw3ICs2MDcsNyBAQAogCSAgc3Ryb25nbHkgaW4gZmx1eCwgc28gbm8gZ29vZCByZWNvbW1lbmRhdGlvbiBjYW4gYmUgbWFkZS4KIAogY29uZmlnIENSQVNIX0RVTVAKLQlib29sICJrZXJuZWwgY3Jhc2ggZHVtcHMgKEVYUEVSSU1FTlRBTCkiCisJYm9vbCAiQnVpbGQgYSBrZHVtcCBjcmFzaCBrZXJuZWwgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NCAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBCdWlsZCBhIGtlcm5lbCBzdWl0YWJsZSBmb3IgdXNlIGFzIGEga2R1bXAgY2FwdHVyZSBrZXJuZWwuCkBAIC03MzQsMTMgKzc2MSwxMiBAQAogCiBjb25maWcgUFBDX0k4MjU5CiAJYm9vbAotCWRlZmF1bHQgeSBpZiA4NXh4CiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBQUENfSU5ESVJFQ1RfUENJCiAJYm9vbAogCWRlcGVuZHMgb24gUENJCi0JZGVmYXVsdCB5IGlmIDQweCB8fCA0NHggfHwgODV4eAorCWRlZmF1bHQgeSBpZiA0MHggfHwgNDR4CiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBFSVNBCkBAIC03NTcsOCArNzgzLDggQEAKIAlib29sCiAKIGNvbmZpZyBQQ0kKLQlib29sICJQQ0kgc3VwcG9ydCIgaWYgNDB4IHx8IENQTTIgfHwgUFBDXzgzeHggfHwgODV4eCB8fCBQUENfTVBDNTJ4eCB8fCAoRU1CRURERUQgJiYgUFBDX0lTRVJJRVMpCi0JZGVmYXVsdCB5IGlmICE0MHggJiYgIUNQTTIgJiYgITh4eCAmJiAhQVBVUyAmJiAhUFBDXzgzeHggJiYgITg1eHgKKwlib29sICJQQ0kgc3VwcG9ydCIgaWYgNDB4IHx8IENQTTIgfHwgUFBDXzgzeHggfHwgUFBDXzg1eHggfHwgUFBDX01QQzUyeHggfHwgKEVNQkVEREVEICYmIFBQQ19JU0VSSUVTKQorCWRlZmF1bHQgeSBpZiAhNDB4ICYmICFDUE0yICYmICE4eHggJiYgIUFQVVMgJiYgIVBQQ184M3h4ICYmICFQUENfODV4eAogCWRlZmF1bHQgUENJX1BFUk1FRElBIGlmICE0eHggJiYgIUNQTTIgJiYgITh4eCAmJiBBUFVTCiAJZGVmYXVsdCBQQ0lfUVNQQU4gaWYgITR4eCAmJiAhQ1BNMiAmJiA4eHgKIAloZWxwCkBAIC05NjMsNyArOTg5LDcgQEAKIAogY29uZmlnIEtQUk9CRVMKIAlib29sICJLcHJvYmVzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIEVYUEVSSU1FTlRBTCAmJiBNT0RVTEVTCiAJaGVscAogCSAgS3Byb2JlcyBhbGxvd3MgeW91IHRvIHRyYXAgYXQgYWxtb3N0IGFueSBrZXJuZWwgYWRkcmVzcyBhbmQKIAkgIGV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbi4gIHJlZ2lzdGVyX2twcm9iZSgpIGVzdGFibGlzaGVzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggNTc4N2Q1NS4uODI5ZTAxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIENQUEZMQUdTX3ZtbGludXgubGRzCTo9IC1VcG93ZXJwYwogCi1CT09UX1RBUkdFVFMgPSB6SW1hZ2UgekltYWdlLmluaXRyZCB6bmV0Ym9vdCB6bmV0Ym9vdC5pbml0cmQgdm1saW51eC5zbSB1SW1hZ2UKK0JPT1RfVEFSR0VUUyA9IHpJbWFnZSB6SW1hZ2UuaW5pdHJkIHpuZXRib290IHpuZXRib290LmluaXRyZCB2bWxpbnV4LnNtIHVJbWFnZSB2bWxpbnV4LmJpbgogCiBQSE9OWSArPSAkKEJPT1RfVEFSR0VUUykKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3J0MC5TIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3J0MC5TCmluZGV4IGUwMTkyYzIuLjcwZTY1YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2NydDAuUworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9jcnQwLlMKQEAgLTQ1LDcgKzQ1LDggQEAKIAliZG56CTJiCiAKIAkvKiBEbyBhIGNhY2hlIGZsdXNoIGZvciBvdXIgdGV4dCwgaW4gY2FzZSBPRiBkaWRuJ3QgKi8KLTM6CWxpcwlyOSxfc3RhcnRAaAorMzoJbGlzCXI5LF9zdGFydEBoYQorCWFkZGkJcjkscjksX3N0YXJ0QGwKIAlhZGQJcjkscjAscjkKIAlsaXMJcjgsX2V0ZXh0QGhhCiAJYWRkaQlyOCxyOCxfZXRleHRAbApAQCAtNTMsNyArNTQsNyBAQAogNDoJZGNiZglyMCxyOQogCWljYmkJcjAscjkKIAlhZGRpCXI5LHI5LDB4MjAKLQljbXBsd2kJMCxyOSw4CisJY21wbHcJY3IwLHI5LHI4CiAJYmx0CTRiCiAJc3luYwogCWlzeW5jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9pbnN0YWxsLnNoIGIvYXJjaC9wb3dlcnBjL2Jvb3QvaW5zdGFsbC5zaAppbmRleCBlYWNjZTk1Li5iMDAyYmZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9pbnN0YWxsLnNoCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2luc3RhbGwuc2gKQEAgLTEsNyArMSw1IEBACiAjIS9iaW4vc2gKICMKLSMgYXJjaC9wcGM2NC9ib290L2luc3RhbGwuc2gKLSMKICMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogIyBmb3IgbW9yZSBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvbWFpbi5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvbWFpbi5jCmluZGV4IDU1ZWM1OTguLjgxNjQ0NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L21haW4uYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9tYWluLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCWVsZjY0cGggPSAoRWxmNjRfUGhkciAqKSgodW5zaWduZWQgbG9uZyllbGY2NCArCiAJCQkJICh1bnNpZ25lZCBsb25nKWVsZjY0LT5lX3Bob2ZmKTsKIAlmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCllbGY2NC0+ZV9waG51bTsgaSsrLCBlbGY2NHBoKyspCi0JCWlmIChlbGY2NHBoLT5wX3R5cGUgPT0gUFRfTE9BRCAmJiBlbGY2NHBoLT5wX29mZnNldCAhPSAwKQorCQlpZiAoZWxmNjRwaC0+cF90eXBlID09IFBUX0xPQUQpCiAJCQlicmVhazsKIAlpZiAoaSA+PSAodW5zaWduZWQgaW50KWVsZjY0LT5lX3BobnVtKQogCQlyZXR1cm4gMDsKQEAgLTE5Myw3ICsxOTMsNyBAQAogCWVsZjMyID0gKEVsZjMyX0VoZHIgKillbGZoZWFkZXI7CiAJZWxmMzJwaCA9IChFbGYzMl9QaGRyICopICgodW5zaWduZWQgbG9uZyllbGYzMiArIGVsZjMyLT5lX3Bob2ZmKTsKIAlmb3IgKGkgPSAwOyBpIDwgZWxmMzItPmVfcGhudW07IGkrKywgZWxmMzJwaCsrKQotCQlpZiAoZWxmMzJwaC0+cF90eXBlID09IFBUX0xPQUQgJiYgZWxmMzJwaC0+cF9vZmZzZXQgIT0gMCkKKwkJaWYgKGVsZjMycGgtPnBfdHlwZSA9PSBQVF9MT0FEKQogCQkJYnJlYWs7CiAJaWYgKGkgPj0gZWxmMzItPmVfcGhudW0pCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwppbmRleCAwNjNiODRmLi4zYzJhY2FiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzUKLSMgVHVlIERlYyAyMCAxNTo1OToyNiAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmM2CisjIFdlZCBNYXIgMTUgMTY6MTk6NDggMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC0xNiw2ICsxNiwxMCBAQAogQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydApAQCAtMzMsNyArMzcsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtNDgsOCArNTEsNiBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCkBAIC01OCw4ICs1OSwxMCBAQAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKQEAgLTY4LDggKzcxLDEwIEBACiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMTExLDcgKzExNiw2IEBACiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogQ09ORklHX1BQQ19DRUxMPXkKLUNPTkZJR19QUENfT0Y9eQogIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1JUQVM9eQogIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTEyMCwxMSArMTI0LDE1IEBACiBDT05GSUdfTU1JT19OVlJBTT15CiBDT05GSUdfQ0VMTF9JSUM9eQogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKKyMgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIG9wdGlvbnMKKyMKK0NPTkZJR19TUFVfRlM9eQorCisjCiAjIEtlcm5lbCBvcHRpb25zCiAjCiAjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldApAQCAtMTQwLDYgKzE0OCw3IEBACiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwogIyBDT05GSUdfSU9NTVVfVk1FUkdFIGlzIG5vdCBzZXQKIENPTkZJR19LRVhFQz15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTE5MSw2ICsyMDAsNyBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMjM0LDYgKzI0NCwyNSBAQAogIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiAjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KQEAgLTI1MSwzNyArMjgwLDIzIEBACiAjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX01BUks9bQogQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KIENPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQogQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQotQ09ORklHX0lQX05GX01BVENIX1NDVFA9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQorQ09ORklHX0lQX05GX01BVENIX1BPTElDWT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX0lQX05GX05BVD1tCiBDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQpAQCAtMjk3LDExICszMTIsOCBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQogQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCkBAIC0zMTEsNyArMzIzLDYgQEAKICMKICMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKIAogIwogIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKQEAgLTMyMiw2ICszMzMsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTU0MCw5ICs1NTYsMTEgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiBDT05GSUdfU0tHRT1tCisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX1NQSURFUl9ORVQ9eQogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogCiAjCkBAIC02MjgsMTMgKzY0NiwxNiBAQAogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CisjIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUk9DS0VUUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DWUNMQURFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKICMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0kgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTksgaXMgbm90IHNldAogIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0CiAjIENPTkZJR19OX0hETEMgaXMgbm90IHNldAogIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NYIGlzIG5vdCBzZXQKQEAgLTY0Niw2ICs2NjcsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTc1Niw2ICs3NzgsMTIgQEAKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTgyNyw3ICs4NTUsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIwpAQCAtODQ3LDYgKzg3NSw3IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtODg2LDYgKzkxNSw3IEBACiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC05NTEsNiArOTgxLDcgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRUZJX1BBUlRJVElPTj15CiAKICMKQEAgLTEwMjEsMTggKzEwNTIsMjAgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTEwNDAsNiArMTA3MywxMSBAQAogIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CiBDT05GSUdfSVJRU1RBQ0tTPXkKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCmluZGV4IGQ2ZmVkM2YuLjJjM2ZkMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmM1Ci0jIFR1ZSBEZWMgMjAgMTU6NTk6MzAgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMgorIyBGcmkgRmViIDEwIDE3OjMzOjA4IDIwMDYKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtMTYsNiArMTYsMTAgQEAKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKKyMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKQEAgLTI2LDEzICszMCwxMiBAQAogQ09ORklHX0FMVElWRUM9eQogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19TTVA9eQotQ09ORklHX05SX0NQVVM9MgorQ09ORklHX05SX0NQVVM9NAogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC00Nyw4ICs1MCw2IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKQEAgLTU4LDggKzU5LDEwIEBACiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQpAQCAtNjgsOCArNzEsMTAgQEAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xMTIsMTMgKzExNywxMiBAQAogQ09ORklHX1BQQ19QTUFDNjQ9eQogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0Y9eQogQ09ORklHX1UzX0RBUlQ9eQogQ09ORklHX01QSUM9eQogIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAogIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfTVBJQ19CUk9LRU5fVTM9eQogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19UQlNZTkM9eQogQ09ORklHX0NQVV9GUkVRPXkKIENPTkZJR19DUFVfRlJFUV9UQUJMRT15CiAjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNTEsNiArMTU1LDcgQEAKIENPTkZJR19JT01NVV9WTUVSR0U9eQogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAogQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CiAjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjAyLDYgKzIwNyw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yMzksNiArMjQ1LDcgQEAKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAogCiAjCiAjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgpAQCAtMjU1LDY1ICsyNjIsNiBAQAogQ09ORklHX0lQX05GX0FNQU5EQT1tCiAjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCi1DT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQotQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX01BUks9bQotQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0VDTj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQotQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQotQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQotQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQotQ09ORklHX0lQX05GX01BVENIX1NDVFA9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQotQ09ORklHX0lQX05GX0ZJTFRFUj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19JUF9ORl9OQVQ9bQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLUNPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1RGVFA9bQotQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQotQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCi1DT05GSUdfSVBfTkZfUkFXPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCi1DT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9BUlBGSUxURVI9bQotQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogCiAjCiAjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQpAQCAtMzI0LDYgKzI3MiwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzQyLDcgKzI5NSw2IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTU0NSwxMyArNDk3LDcgQEAKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNjE0LDcgKzU2MCw2IEBACiBDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCiBDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KIENPTkZJR19JRUVFMTM5NF9SQVdJTz15Ci0jIENPTkZJR19JRUVFMTM5NF9DTVAgaXMgbm90IHNldAogCiAjCiAjIEkyTyBkZXZpY2Ugc3VwcG9ydApAQCAtNjMwLDYgKzU3NSw3IEBACiBDT05GSUdfV0lOREZBUk09eQogQ09ORklHX1dJTkRGQVJNX1BNODE9eQogQ09ORklHX1dJTkRGQVJNX1BNOTE9eQorQ09ORklHX1dJTkRGQVJNX1BNMTEyPXkKIAogIwogIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC02ODIsOCArNjI4LDkgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci1DT05GSUdfVElHT04zPW0KK0NPTkZJR19USUdPTjM9eQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAKQEAgLTg2MSw4ICs4MDgsNyBAQAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfS0VZV0VTVD15Ci1DT05GSUdfSTJDX1BNQUNfU01VPXkKK0NPTkZJR19JMkNfUE9XRVJNQUM9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CkBAIC04OTUsNiArODQxLDEyIEBACiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC05NjEsNyArOTEzLDYgQEAKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkxBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKQEAgLTEwMDgsOSArOTU5LDEwIEBACiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfR0VORVJJQ19EUklWRVI9eQogCiAjCiAjIEdlbmVyaWMgZGV2aWNlcwpAQCAtMTAyNCw2ICs5NzYsOCBAQAogIwogIyBQQ0kgZGV2aWNlcwogIworIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldApAQCAtMTAzMiwzOSArOTg2LDM4IEBACiAjIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiAKICMKICMgQUxTQSBQb3dlck1hYyBkZXZpY2VzCkBAIC0xMTM2LDEzICsxMDg5LDE2IEBACiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQogQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15CiBDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogQ09ORklHX0hJRF9GRj15CiBDT05GSUdfSElEX1BJRD15CiBDT05GSUdfTE9HSVRFQ0hfRkY9eQpAQCAtMTE1OSw2ICsxMTE1LDcgQEAKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCkBAIC0xMjA3LDYgKzExNjQsNyBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVD1tCiAjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KQEAgLTEyODgsNiArMTI0NiwxMCBAQAogIwogCiAjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTMxNyw2ICsxMjc5LDcgQEAKIENPTkZJR19YRlNfU0VDVVJJVFk9eQogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTEzNTcsNiArMTMyMCw3IEBACiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC0xNDI2LDYgKzEzOTAsNyBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCkBAIC0xNDgxLDEwICsxNDQ2LDYgQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC0xNDk3LDI0ICsxNDU4LDMxIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAogQ09ORklHX0lSUVNUQUNLUz15CiBDT05GSUdfQk9PVFhfVEVYVD15CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCmluZGV4IGM3NzUwMjcuLjE4MTZhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjNQotIyBUdWUgRGVjIDIwIDE1OjU5OjMyIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzYKKyMgV2VkIE1hciAxNSAxNjoxOTo1MiAyMDA2CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTE2LDYgKzE2LDEwIEBACiBDT05GSUdfU1lTVklQQ19DT01QQVQ9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKQEAgLTMzLDcgKzM3LDYgQEAKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKQEAgLTQ5LDggKzUyLDYgQEAKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKQEAgLTYwLDggKzYxLDEwIEBACiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQpAQCAtNzAsOCArNzMsMTAgQEAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xMTMsNyArMTE4LDYgQEAKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAogQ09ORklHX0lCTVZJTz15CiAjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKIApAQCAtMTgzLDYgKzE4Nyw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yMjAsNiArMjI1LDI4IEBACiAjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKICMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0yMzcsMzkgKzI2NCwyMyBAQAogIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQogQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TQ1RQPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0RDQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KQEAgLTI4NSwxMyArMjk2LDkgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCkBAIC0zMDUsNiArMzEyLDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC00NTEsMTMgKzQ2Myw3IEBACiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTI0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKQEAgLTU3NCw2ICs1ODAsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldApAQCAtNzIzLDYgKzczMCwxMiBAQAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTc4OCw3ICs4MDEsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIwpAQCAtODI1LDYgKzgzOCw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC04NjUsNiArODc5LDcgQEAKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtOTkzLDMxICsxMDA4LDM2IEBACiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CiAjCi1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKICMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKIENPTkZJR19JUlFTVEFDS1M9eQorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnCmluZGV4IDY4MTk0YzAuLjgwYTBkYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tYXBsZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTUtcmM1Ci0jIFR1ZSBEZWMgMjAgMTU6NTk6MzYgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjNgorIyBXZWQgTWFyIDE1IDE2OjE5OjU0IDIwMDYKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQpAQCAtMTYsNiArMTYsMTAgQEAKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15CiBDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKIENPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CkBAIC0zMiw3ICszNiw2IEBACiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwogIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC00Nyw4ICs1MCw2IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX0NQVVNFVFMgaXMgbm90IHNldApAQCAtNTgsOCArNTksMTAgQEAKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQpAQCAtNjgsOCArNzEsMTAgQEAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xMTEsMTQgKzExNiwxMiBAQAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19NQVBMRT15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GPXkKIENPTkZJR19VM19EQVJUPXkKIENPTkZJR19NUElDPXkKICMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAogQ09ORklHX01QSUNfQlJPS0VOX1UzPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKIApAQCAtMTM4LDYgKzE0MSw3IEBACiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwogQ09ORklHX0lPTU1VX1ZNRVJHRT15CiBDT05GSUdfS0VYRUM9eQorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKICMgQ09ORklHX05VTUEgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0xODksNiArMTkzLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0yMjYsNiArMjMxLDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC00NjEsNiArNDcxLDcgQEAKICMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKQEAgLTU1Myw2ICs1NjQsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTY1MSw2ICs2NjMsMTIgQEAKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTczOCwxMiArNzU2LDE0IEBACiAjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KICMKICMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKIENPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKQEAgLTc1Nyw2ICs3NzcsNyBAQAogIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CiAKQEAgLTc5Nyw2ICs4MTgsNyBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCkBAIC04NzMsNyArODk1LDcgQEAKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKQEAgLTg5MSw2ICs5MTMsNyBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKQEAgLTkyNyw2ICs5NTAsNyBAQAogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtOTg4LDYgKzEwMTIsNyBAQAogIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAogCiAjCkBAIC0xMDUzLDE4ICsxMDc4LDIwIEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0xBQj15CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFRF9JTkxJTklORyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CkBAIC0xMDczLDYgKzExMDAsMTEgQEAKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19CT09UWF9URVhUPXkKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfc3lzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfc3lzX2RlZmNvbmZpZwppbmRleCAzYmZmNzYxLi41MDc4YjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X3N5c19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9zeXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LWc0NjFkNGVkZi1kaXJ0eQotIyBGcmkgSmFuIDEzIDExOjAxOjQ3IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzYKKyMgV2VkIE1hciAxNSAxNjoxOTo1NiAyMDA2CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQpAQCAtNDMsNyArNDMsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0xODksNiArMTg4LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTIyNiw2ICsyMjYsMTEgQEAKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTUxMSw2ICs1MTYsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTYxNSw2ICs2MjEsMTIgQEAKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIAogIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKQEAgLTYzMiw2ICs2NDQsNyBAQAogIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKQEAgLTcxNiw3ICs3MjksNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIwpAQCAtODI2LDYgKzgzOSw3IEBACiAjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAKICMKQEAgLTg5OSwxMyArOTEzLDMgQEAKICMKICMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKICMKLQotIwotIyBTRUMyLnggT3B0aW9ucwotIwotQ09ORklHX01QQzgzNDlFX1NFQzJ4PXkKLQotIwotIyBTRUMyLnggVGVzdCBPcHRpb25zCi0jCi1DT05GSUdfTVBDODM0OUVfU0VDMnhURVNUPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NDBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NDBfYWRzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTgyOTBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU0MF9hZHNfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzIxIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAKKyMgU2F0IEphbiAxNCAxNTo1Nzo1NCAyMDA2CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfQ0xBU1NJQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ181Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODV4eD15CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR184NXh4PXkKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX01QSUM9eQorIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19NUEM4NTQwX0FEUz15CitDT05GSUdfTVBDODU0MD15CitDT05GSUdfUFBDX0lORElSRUNUX1BDSV9CRT15CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9NSVNDPXkKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0CisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBQQ0kgSG90cGx1ZyBTdXBwb3J0CisjCisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAorQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfR0ZBUl9OQVBJPXkKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CisjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisKKyMKKyMgU04gRGV2aWNlcworIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKKyMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKaW5kZXggMmFjZTU3ZC4uNTdhMDI3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1Ci0jIFNhdCBKYW4gMTQgMTY6MjY6MDggMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjNgorIyBXZWQgTWFyIDE1IDE2OjIxOjMyIDIwMDYKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CkBAIC0xNyw4ICsxNyw4IEBACiBDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQogQ09ORklHX1BQQ19PRj15CiAjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydApAQCAtNDMsNyArNDMsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCkBAIC0yMzYsNiArMjM1LDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTI3MSw2ICsyNzEsMjUgQEAKICMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgogIwogIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0yODgsMzcgKzMwNywyMiBAQAogQ09ORklHX0lQX05GX1BQVFA9bQogIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KIENPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX0lQX05GX01BVENIX1RPUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQogQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQotQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KIENPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9EQ0NQPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTkFUPW0KIENPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkBAIC0zMzEsOSArMzM1LDEyIEBACiBDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQogQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQogQ09ORklHX0lQX05GX05BVF9QUFRQPW0KLSMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiBDT05GSUdfSVBfTkZfUkFXPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQpAQCAtMzYwLDYgKzM2NywxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzc3LDYgKzM4OSw3IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTU2OCw3ICs1ODEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVz15Ci0jIENPTkZJR19QREMyMDJYWF9GT1JDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKQEAgLTY1NCw4ICs2NjYsNyBAQAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPXkKLSMgQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtOTkxLDYgKzEwMDIsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPW0KIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HPW0KKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTEwOTgsNiArMTExMCwxMiBAQAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtMTM0OCw2ICsxMzY2LDcgQEAKICMKIENPTkZJR19VU0JfSElEPXkKIENPTkZJR19VU0JfSElESU5QVVQ9eQorQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0s9eQogIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CkBAIC0xNDg4LDcgKzE1MDcsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAKICMKLSMgU04gRGV2aWNlcworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKICMKIAogIwpAQCAtMTYwOSw2ICsxNjI4LDcgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY5Miw2ICsxNzEyLDcgQEAKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHR0VSPXkKIENPTkZJR19YTU9OPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwppbmRleCA2ZjZjNmJlLi4zOTVlNDk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE1LXJjNQotIyBUdWUgRGVjIDIwIDE1OjU5OjM4IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzIKKyMgRnJpIEZlYiAxMCAxNzozMjoxNCAyMDA2CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTE2LDYgKzE2LDEwIEBACiBDT05GSUdfU1lTVklQQ19DT01QQVQ9eQogQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CiBDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydApAQCAtMzMsNyArMzcsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtNDgsOCArNTEsNiBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0NQVVNFVFM9eQpAQCAtNTksOCArNjAsMTAgQEAKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQpAQCAtNjksOCArNzIsMTAgQEAKIENPTkZJR19DQ19BTElHTl9MQUJFTFM9MAogQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKIENPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC0xMTMsNyArMTE4LDYgQEAKIENPTkZJR19QUENfUE1BQzY0PXkKIENPTkZJR19QUENfTUFQTEU9eQogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRj15CiBDT05GSUdfWElDUz15CiBDT05GSUdfVTNfREFSVD15CiBDT05GSUdfTVBJQz15CkBAIC0xMjQsOCArMTI4LDggQEAKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAogQ09ORklHX01QSUNfQlJPS0VOX1UzPXkKIENPTkZJR19JQk1WSU89eQorIyBDT05GSUdfSUJNRUJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15CiBDT05GSUdfQ1BVX0ZSRVE9eQogQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKICMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE1OCw2ICsxNjIsNyBAQAogQ09ORklHX0lPTU1VX1ZNRVJHRT15CiBDT05GSUdfSE9UUExVR19DUFU9eQogQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CiBDT05GSUdfUFBDX1NQTFBBUj15CiBDT05GSUdfRUVIPXkKQEAgLTE3OCw2ICsxODMsNyBAQAogQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQpAQCAtMjIxLDYgKzIyNyw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNjAsNiArMjY3LDcgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOSz15CiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0yNzcsNjUgKzI4NSw2IEBACiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KICMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQotQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU0NUUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRENDUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5CWVRFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9TVFJJTkc9bQotQ09ORklHX0lQX05GX0ZJTFRFUj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19JUF9ORl9OQVQ9bQotQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQotQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KLUNPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTkFUX0lSQz1tCi1DT05GSUdfSVBfTkZfTkFUX0ZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX1RGVFA9bQotQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQotQ09ORklHX0lQX05GX01BTkdMRT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCi1DT05GSUdfSVBfTkZfUkFXPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCi1DT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9BUlBGSUxURVI9bQotQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogCiAjCiAjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQpAQCAtMzQ2LDYgKzI5NSwxMSBAQAogIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKICMKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldApAQCAtMzY0LDcgKzMxOCw2IEBACiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTQ1NCw3ICs0MDcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NMODJDMTA1PXkKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQogIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19JREVETUFfUENJX0FVVE89eQpAQCAtNTcyLDEzICs1MjUsNyBAQAogQ09ORklHX1NDU0lfSVBSX0RVTVA9eQogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPXkKLUNPTkZJR19TQ1NJX1FMQTIxWFg9bQotQ09ORklHX1NDU0lfUUxBMjJYWD1tCi1DT05GSUdfU0NTSV9RTEEyMzAwPW0KLUNPTkZJR19TQ1NJX1FMQTIzMjI9bQotQ09ORklHX1NDU0lfUUxBNjMxMj1tCi1DT05GSUdfU0NTSV9RTEEyNFhYPW0KKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xQRkM9bQogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNjQyLDggKzU4OSw2IEBACiBDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCiBDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KIENPTkZJR19JRUVFMTM5NF9SQVdJTz15Ci1DT05GSUdfSUVFRTEzOTRfQ01QPW0KLUNPTkZJR19JRUVFMTM5NF9BTURUUD1tCiAKICMKICMgSTJPIGRldmljZSBzdXBwb3J0CkBAIC02NTksNiArNjA0LDcgQEAKIENPTkZJR19XSU5ERkFSTT15CiBDT05GSUdfV0lOREZBUk1fUE04MT15CiBDT05GSUdfV0lOREZBUk1fUE05MT15CitDT05GSUdfV0lOREZBUk1fUE0xMTI9eQogCiAjCiAjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTczMSw2ICs2NzcsNyBAQAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKQEAgLTg1Myw2ICs4MDAsNyBAQAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTg4MCw2ICs4MjgsNyBAQAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKKyMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKQEAgLTkyMyw4ICs4NzIsNyBAQAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfS0VZV0VTVD15Ci1DT05GSUdfSTJDX1BNQUNfU01VPXkKK0NPTkZJR19JMkNfUE9XRVJNQUM9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CkBAIC05NTcsNiArOTA1LDEyIEBACiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC0xMDI4LDcgKzk4Miw2IEBACiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCkBAIC0xMDczLDkgKzEwMjYsMTAgQEAKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUj15CiAKICMKICMgR2VuZXJpYyBkZXZpY2VzCkBAIC0xMDg5LDYgKzEwNDMsOCBAQAogIwogIyBQQ0kgZGV2aWNlcwogIworIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldApAQCAtMTA5NywzOSArMTA1MywzOCBAQAogIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAogCiAjCiAjIEFMU0EgUG93ZXJNYWMgZGV2aWNlcwpAQCAtMTIwMSwxMyArMTE1NiwxNiBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0hJRERFVj15CiAjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKQEAgLTEyMjEsNiArMTE3OSw3IEBACiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIApAQCAtMTMwNyw2ICsxMjY2LDEwIEBACiAjCiAKICMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xMzQwLDYgKzEzMDMsNyBAQAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQpAQCAtMTM3OSw2ICsxMzQzLDcgQEAKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX1JFTEFZRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTE0NDksNiArMTQxNCw3IEBACiAjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1MDQsMTAgKzE0NzAsNiBAQAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTE1MjAsMTggKzE0ODIsMjAgQEAKICMgS2VybmVsIGhhY2tpbmcKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKQEAgLTE1NDAsNiArMTUwNCwxMSBAQAogIyBDT05GSUdfWE1PTl9ERUZBVUxUIGlzIG5vdCBzZXQKIENPTkZJR19JUlFTVEFDS1M9eQogQ09ORklHX0JPT1RYX1RFWFQ9eQorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCBhYTk4OTNhLi5kYWFmMDM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1yYzUKLSMgVHVlIERlYyAyMCAxNTo1OTo0MCAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMyCisjIEZyaSBGZWIgMTAgMTc6MzM6MzIgMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CkBAIC0xNiw2ICsxNiwxMCBAQAogQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydApAQCAtMzMsNyArMzcsNiBAQAogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIApAQCAtNDksOCArNTIsNiBAQAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQVVESVQ9eQogQ09ORklHX0FVRElUU1lTQ0FMTD15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19DUFVTRVRTPXkKQEAgLTYwLDggKzYxLDEwIEBACiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKQEAgLTcwLDggKzczLDEwIEBACiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIAogIwogIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydApAQCAtMTEzLDcgKzExOCw2IEBACiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRj15CiBDT05GSUdfWElDUz15CiAjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKQEAgLTEyMyw4ICsxMjcsOCBAQAogQ09ORklHX1JUQVNfRkxBU0g9bQogIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfSUJNVklPPXkKKyMgQ09ORklHX0lCTUVCVVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CiAKQEAgLTE0NSw2ICsxNDksNyBAQAogQ09ORklHX0lPTU1VX1ZNRVJHRT15CiBDT05GSUdfSE9UUExVR19DUFU9eQogQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CiBDT05GSUdfUFBDX1NQTFBBUj15CiBDT05GSUdfRUVIPXkKQEAgLTE2NSw2ICsxNzAsNyBAQAogQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRD15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9TTVQ9eQpAQCAtMjA5LDYgKzIxNSw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yNDgsNiArMjU1LDcgQEAKIENPTkZJR19ORVRGSUxURVJfTkVUTElOSz15CiBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CiAKICMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCkBAIC0yNjUsNjUgKzI3Myw2IEBACiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KICMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQotQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU0NUUD1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTkJZVEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX1NUUklORz1tCi1DT05GSUdfSVBfTkZfRklMVEVSPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05GUVVFVUU9bQotQ09ORklHX0lQX05GX05BVD1tCi1DT05GSUdfSVBfTkZfTkFUX05FRURFRD15Ci1DT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQotQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19JUF9ORl9OQVRfSVJDPW0KLUNPTkZJR19JUF9ORl9OQVRfRlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfVEZUUD1tCi1DT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCi1DT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KLUNPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KLUNPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQotQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCi1DT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiAKICMKICMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCkBAIC0zMzQsNiArMjgzLDExIEBACiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CkBAIC0zNTIsNyArMzA2LDYgQEAKICMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiAjCiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwpAQCAtNTUwLDEzICs1MDMsNyBAQAogQ09ORklHX1NDU0lfSVBSX0RVTVA9eQogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9RTEEyWFhYPXkKLUNPTkZJR19TQ1NJX1FMQTIxWFg9bQotQ09ORklHX1NDU0lfUUxBMjJYWD1tCi1DT05GSUdfU0NTSV9RTEEyMzAwPW0KLUNPTkZJR19TQ1NJX1FMQTIzMjI9bQotQ09ORklHX1NDU0lfUUxBNjMxMj1tCi1DT05GSUdfU0NTSV9RTEEyNFhYPW0KKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xQRkM9bQogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNjc4LDYgKzYyNSw3IEBACiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQpAQCAtODAzLDYgKzc1MSw3IEBACiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtOTA5LDYgKzg1OCwxMiBAQAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtOTc2LDcgKzkzMSw2IEBACiAjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJMQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCkBAIC0xMDYxLDEyICsxMDE1LDE1IEBACiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15CiBDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKICMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldApAQCAtMTA4MCw2ICsxMDM3LDcgQEAKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCkBAIC0xMTY3LDYgKzExMjUsMTAgQEAKICMKIAogIworIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTEyMDAsNiArMTE2Miw3IEBACiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CkBAIC0xMjQwLDYgKzEyMDMsNyBAQAogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtMTM1MSwxMCArMTMxNSw2IEBACiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtMTM2NywxOCArMTMyNywyMCBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQpAQCAtMTM4Nyw2ICsxMzQ5LDExIEBACiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKIENPTkZJR19JUlFTVEFDS1M9eQogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggODQwYWFkNC4uODgyODg5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtOTIsNyArOTIsNiBAQAogCiAJREVGSU5FKFRJX0ZMQUdTLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZsYWdzKSk7CiAJREVGSU5FKFRJX1BSRUVNUFQsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgcHJlZW1wdF9jb3VudCkpOwotCURFRklORShUSV9TSUdGUkFNRSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBudmdwcnNfZnJhbWUpKTsKIAlERUZJTkUoVElfVEFTSywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0YXNrKSk7CiAjaWZkZWYgQ09ORklHX1BQQzMyCiAJREVGSU5FKFRJX0VYRUNET01BSU4sIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZXhlY19kb21haW4pKTsKQEAgLTEzNyw2ICsxMzYsOSBAQAogCURFRklORShQQUNBRU1FUkdTUCwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBlbWVyZ2VuY3lfc3ApKTsKIAlERUZJTkUoUEFDQUxQUEFDQVBUUiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBscHBhY2FfcHRyKSk7CiAJREVGSU5FKFBBQ0FIV0NQVUlELCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGh3X2NwdV9pZCkpOworCURFRklORShQQUNBX1NUQVJUUFVSUiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzdGFydHB1cnIpKTsKKwlERUZJTkUoUEFDQV9VU0VSX1RJTUUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgdXNlcl90aW1lKSk7CisJREVGSU5FKFBBQ0FfU1lTVEVNX1RJTUUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc3lzdGVtX3RpbWUpKTsKIAogCURFRklORShMUFBBQ0FTUlIwLCBvZmZzZXRvZihzdHJ1Y3QgbHBwYWNhLCBzYXZlZF9zcnIwKSk7CiAJREVGSU5FKExQUEFDQVNSUjEsIG9mZnNldG9mKHN0cnVjdCBscHBhY2EsIHNhdmVkX3NycjEpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCAxMDY5NjQ1Li4zOWUzNDhhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC01Myw4ICs1MywxMCBAQAogCQkJCSBQUENfRkVBVFVSRV9IQVNfTU1VKQogI2RlZmluZSBDT01NT05fVVNFUl9QUEM2NAkoQ09NTU9OX1VTRVIgfCBQUENfRkVBVFVSRV82NCkKICNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI0CShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BPV0VSNCkKLSNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI1CShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BPV0VSNSkKLSNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI1X1BMVVMJKENPTU1PTl9VU0VSX1BQQzY0IHwgUFBDX0ZFQVRVUkVfUE9XRVI1X1BMVVMpCisjZGVmaW5lIENPTU1PTl9VU0VSX1BPV0VSNQkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9QT1dFUjUgfFwKKwkJCQkgUFBDX0ZFQVRVUkVfU01UIHwgUFBDX0ZFQVRVUkVfSUNBQ0hFX1NOT09QKQorI2RlZmluZSBDT01NT05fVVNFUl9QT1dFUjVfUExVUwkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9QT1dFUjVfUExVU3xcCisJCQkJIFBQQ19GRUFUVVJFX1NNVCB8IFBQQ19GRUFUVVJFX0lDQUNIRV9TTk9PUCkKICNkZWZpbmUgQ09NTU9OX1VTRVJfQk9PS0UJKFBQQ19GRUFUVVJFXzMyIHwgUFBDX0ZFQVRVUkVfSEFTX01NVSB8IFwKIAkJCQkgUFBDX0ZFQVRVUkVfQk9PS0UpCiAKQEAgLTI2Nyw3ICsyNjksOCBAQAogCQkuY3B1X25hbWUJCT0gIkNlbGwgQnJvYWRiYW5kIEVuZ2luZSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfQ0VMTCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAotCQkJUFBDX0ZFQVRVUkVfQ0VMTCB8IFBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCisJCQlQUENfRkVBVFVSRV9DRUxMIHwgUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCB8CisJCQlQUENfRkVBVFVSRV9TTVQsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9iZSwKQEAgLTg5MSw3ICs4OTQsNyBAQAogCQkucGxhdGZvcm0JCT0gInBwYzQwNSIsCiAJfSwKIAl7CS8qIFhpbGlueCBWaXJ0ZXgtSUkgUHJvICAqLwotCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl9tYXNrCQk9IDB4ZmZmZmYwMDAsCiAJCS5wdnJfdmFsdWUJCT0gMHgyMDAxMDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJWaXJ0ZXgtSUkgUHJvIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180MFgsCkBAIC05MDEsNiArOTA0LDE2IEBACiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5wbGF0Zm9ybQkJPSAicHBjNDA1IiwKIAl9LAorCXsJLyogWGlsaW54IFZpcnRleC00IEZYICovCisJCS5wdnJfbWFzawkJPSAweGZmZmZmMDAwLAorCQkucHZyX3ZhbHVlCQk9IDB4MjAwMTEwMDAsCisJCS5jcHVfbmFtZQkJPSAiVmlydGV4LTQgRlgiLAorCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTXzQwWCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfAorCQkJUFBDX0ZFQVRVUkVfSEFTX01NVSB8IFBQQ19GRUFUVVJFX0hBU180eHhNQUMsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJfSwKIAl7CS8qIDQwNUVQICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4NTEyMTAwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKaW5kZXggOGMyMWQzNy4uNzc4ZjIyZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwpAQCAtMTM0LDggKzEzNCwxMCBAQAogCSAqIHRoZSBjcmFzaCBDUFUgd2lsbCBzZW5kIGFuIElQSSBhbmQgd2FpdCBmb3Igb3RoZXIgQ1BVcyB0bwogCSAqIHJlc3BvbmQuIElmIG5vdCwgcHJvY2VlZCB0aGUga2V4ZWMgYm9vdCBldmVuIHRob3VnaCB3ZSBmYWlsZWQgdG8KIAkgKiBjYXB0dXJlIG90aGVyIENQVSBzdGF0ZXMuCisJICogRGVsYXkgb2YgYXQgbGVhc3QgMTAgc2Vjb25kcy4KIAkgKi8KLQltc2VjcyA9IDEwMDAwMDA7CisJcHJpbnRrKEtFUk5fQUxFUlQgIlNlbmRpbmcgSVBJIHRvIG90aGVyIGNwdXMuLi5cbiIpOworCW1zZWNzID0gMTAwMDA7CiAJd2hpbGUgKChhdG9taWNfcmVhZCgmd2FpdGluZ19mb3JfY3Jhc2hfaXBpKSA+IDApICYmICgtLW1zZWNzID4gMCkpIHsKIAkJYmFycmllcigpOwogCQltZGVsYXkoMSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggZjIwYTY3Mi4uNDgyN2NhMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJTVRNU1JEKHIxMCkKIAlsd3oJcjksVElfRkxBR1MocjEyKQogCWxpCXI4LC1fTEFTVF9FUlJOTwotCWFuZGkuCXIwLHI5LChfVElGX1NZU0NBTExfVF9PUl9BfF9USUZfU0lHUEVORElOR3xfVElGX05FRURfUkVTQ0hFRHxfVElGX1JFU1RPUkVBTEx8X1RJRl9SRVNUT1JFX1NJR01BU0spCisJYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQfF9USUZfVVNFUl9XT1JLX01BU0t8X1RJRl9QRVJTWVNDQUxMX01BU0spCiAJYm5lLQlzeXNjYWxsX2V4aXRfd29yawogCWNtcGx3CTAscjMscjgKIAlibHQrCXN5c2NhbGxfZXhpdF9jb250CkBAIC0yODcsOCArMjg3LDEwIEBACiAKIHN5c2NhbGxfZXhpdF93b3JrOgogCWFuZGkuCXIwLHI5LF9USUZfUkVTVE9SRUFMTAotCWJuZS0JMmYKLQljbXBsdwkwLHIzLHI4CisJYmVxKwkwZgorCVJFU1RfTlZHUFJTKHIxKQorCWIJMmYKKzA6CWNtcGx3CTAscjMscjgKIAlibHQrCTFmCiAJYW5kaS4JcjAscjksX1RJRl9OT0VSUk9SCiAJYm5lLQkxZgpAQCAtMzAyLDkgKzMwNCw3IEBACiAyOglhbmRpLglyMCxyOSwoX1RJRl9QRVJTWVNDQUxMX01BU0spCiAJYmVxCTRmCiAKLQkvKiBDbGVhciBwZXItc3lzY2FsbCBUSUYgZmxhZ3MgaWYgYW55IGFyZSBzZXQsIGJ1dCBfbGVhdmVfCi0JX1RJRl9TQVZFX05WR1BSUyBzZXQgaW4gcjkgc2luY2Ugd2UgaGF2ZW4ndCBkZWFsdCB3aXRoIHRoYXQKLQl5ZXQuICAqLworCS8qIENsZWFyIHBlci1zeXNjYWxsIFRJRiBmbGFncyBpZiBhbnkgYXJlIHNldC4gICovCiAKIAlsaQlyMTEsX1RJRl9QRVJTWVNDQUxMX01BU0sKIAlhZGRpCXIxMixyMTIsVElfRkxBR1MKQEAgLTMxOCw4ICszMTgsMTMgQEAKIAlzdWJpCXIxMixyMTIsVElfRkxBR1MKIAkKIDQ6CS8qIEFueXRoaW5nIHdoaWNoIHJlcXVpcmVzIGVuYWJsaW5nIGludGVycnVwdHM/ICovCi0JYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQfF9USUZfU0FWRV9OVkdQUlMpCi0JYmVxCTdmCisJYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQKQorCWJlcQlyZXRfZnJvbV9leGNlcHQKKworCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisJb3JpCXIxMCxyMTAsTVNSX0VFCisJU1lOQworCU1UTVNSRChyMTApCiAKIAkvKiBTYXZlIE5WR1BSUyBpZiB0aGV5J3JlIG5vdCBzYXZlZCBhbHJlYWR5ICovCiAJbHd6CXI0LF9UUkFQKHIxKQpAQCAtMzI4LDcxICszMzMsMTEgQEAKIAlTQVZFX05WR1BSUyhyMSkKIAlsaQlyNCwweGMwMAogCXN0dwlyNCxfVFJBUChyMSkKLQotCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCi01OglvcmkJcjEwLHIxMCxNU1JfRUUKLQlTWU5DCi0JTVRNU1JEKHIxMCkKLQotCWFuZGkuCXIwLHI5LF9USUZfU0FWRV9OVkdQUlMKLQlibmUJc2F2ZV91c2VyX252Z3BycwotCi1zYXZlX3VzZXJfbnZncHJzX2NvbnQ6Ci0JYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQKQotCWJlcQk3ZgotCis1OgogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlibAlkb19zeXNjYWxsX3RyYWNlX2xlYXZlCi0JUkVTVF9OVkdQUlMocjEpCisJYglyZXRfZnJvbV9leGNlcHRfZnVsbAogCi02Oglsd3oJcjMsR1BSMyhyMSkKLQlMT0FEX01TUl9LRVJORUwocjEwLE1TUl9LRVJORUwpCS8qIGRvZXNuJ3QgaW5jbHVkZSBNU1JfRUUgKi8KLQlTWU5DCi0JTVRNU1JEKHIxMCkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAqLwotCXJsd2lubQlyMTIscjEsMCwwLCgzMS1USFJFQURfU0hJRlQpCS8qIGN1cnJlbnRfdGhyZWFkX2luZm8oKSAqLwotCWx3eglyOSxUSV9GTEFHUyhyMTIpCi03OgotCWFuZGkuCXIwLHI5LF9USUZfTkVFRF9SRVNDSEVECi0JYm5lCThmCi0JbHd6CXI1LF9NU1IocjEpCi0JYW5kaS4JcjUscjUsTVNSX1BSCi0JYmVxCXJldF9mcm9tX2V4Y2VwdAotCWFuZGkuCXIwLHI5LF9USUZfU0lHUEVORElOR3xfVElGX1JFU1RPUkVfU0lHTUFTSwotCWJlcQlyZXRfZnJvbV9leGNlcHQKLQliCWRvX3VzZXJfc2lnbmFsCi04OgotCW9yaQlyMTAscjEwLE1TUl9FRQotCVNZTkMKLQlNVE1TUkQocjEwKQkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgKi8KLQlibAlzY2hlZHVsZQotCWIJNmIKLQotc2F2ZV91c2VyX252Z3ByczoKLQlsd3oJcjgsVElfU0lHRlJBTUUocjEyKQotCi0ubWFjcm8gc2F2ZXdvcmRzIHN0YXJ0LCBlbmQKLSAgMToJc3R3IFxzdGFydCw0Kihcc3RhcnQpKHI4KQotCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLmFsaWduCTIKLQkubG9uZwkxYixzYXZlX3VzZXJfbnZncHJzX2ZhdWx0Ci0JLnByZXZpb3VzCi0JLmlmIFxlbmQgLSBcc3RhcnQKLQlzYXZld29yZHMgIihcc3RhcnQrMSkiLFxlbmQKLQkuZW5kaWYKLS5lbmRtCQotCXNhdmV3b3JkcyAxNCwzMQotCWIJc2F2ZV91c2VyX252Z3Byc19jb250Ci0KLQkKLXNhdmVfdXNlcl9udmdwcnNfZmF1bHQ6Ci0JbGkJcjMsMTEJCS8qIFNJR1NFR1YgKi8KLQlsd3oJcjQsVElfVEFTSyhyMTIpCi0JYmwJZm9yY2Vfc2lnc2VndgotCi0Jcmx3aW5tCXIxMixyMSwwLDAsKDMxLVRIUkVBRF9TSElGVCkJLyogY3VycmVudF90aHJlYWRfaW5mbygpICovCi0JbHd6CXI5LFRJX0ZMQUdTKHIxMikKLQliCXNhdmVfdXNlcl9udmdwcnNfY29udAotCQogI2lmZGVmIFNIT1dfU1lTQ0FMTFMKIGRvX3Nob3dfc3lzY2FsbDoKICNpZmRlZiBTSE9XX1NZU0NBTExTX1RBU0sKQEAgLTQ5MCw2ICs0MzUsMTQgQEAKIAlzdHcJcjAsX1RSQVAocjEpCQkvKiByZWdpc3RlciBzZXQgc2F2ZWQgKi8KIAliCXN5c19jbG9uZQogCisJLmdsb2JsCXBwY19zd2FwY29udGV4dAorcHBjX3N3YXBjb250ZXh0OgorCVNBVkVfTlZHUFJTKHIxKQorCWx3eglyMCxfVFJBUChyMSkKKwlybHdpbm0JcjAscjAsMCwwLDMwCQkvKiBjbGVhciBMU0IgdG8gaW5kaWNhdGUgZnVsbCAqLworCXN0dwlyMCxfVFJBUChyMSkJCS8qIHJlZ2lzdGVyIHNldCBzYXZlZCAqLworCWIJc3lzX3N3YXBjb250ZXh0CisKIC8qCiAgKiBUb3AtbGV2ZWwgcGFnZSBmYXVsdCBoYW5kbGluZy4KICAqIFRoaXMgaXMgaW4gYXNzZW1ibGVyIGJlY2F1c2UgaWYgZG9fcGFnZV9mYXVsdCB0ZWxscyB1cyB0aGF0CkBAIC02ODMsNyArNjM2LDcgQEAKIAkvKiBDaGVjayBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzICovCiAJcmx3aW5tCXI5LHIxLDAsMCwoMzEtVEhSRUFEX1NISUZUKQogCWx3eglyOSxUSV9GTEFHUyhyOSkKLQlhbmRpLglyMCxyOSwoX1RJRl9TSUdQRU5ESU5HfF9USUZfTkVFRF9SRVNDSEVEfF9USUZfUkVTVE9SRUFMTHxfVElGX1JFU1RPUkVfU0lHTUFTSykKKwlhbmRpLglyMCxyOSwoX1RJRl9TSUdQRU5ESU5HfF9USUZfUkVTVE9SRV9TSUdNQVNLfF9USUZfTkVFRF9SRVNDSEVEKQogCWJuZQlkb193b3JrCiAKIHJlc3RvcmVfdXNlcjoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCAzODhmODYxLi4xMDYwMTU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYzY0L2tlcm5lbC9lbnRyeS5TCi0gKgogICogIFBvd2VyUEMgdmVyc2lvbiAKICAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQogICogIFJld3JpdHRlbiBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KSBmb3IgUFJlUApAQCAtNjMsNiArNjEsNyBAQAogCXN0ZAlyMTIsX01TUihyMSkKIAlzdGQJcjAsR1BSMChyMSkKIAlzdGQJcjEwLEdQUjEocjEpCisJQUNDT1VOVF9DUFVfVVNFUl9FTlRSWShyMTAsIHIxMSkKIAlzdGQJcjIsR1BSMihyMSkKIAlzdGQJcjMsR1BSMyhyMSkKIAlzdGQJcjQsR1BSNChyMSkKQEAgLTE2MCw3ICsxNTksNyBAQAogCW10bXNyZAlyMTAsMQogCWxkCXI5LFRJX0ZMQUdTKHIxMikKIAlsaQlyMTEsLV9MQVNUX0VSUk5PCi0JYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQfF9USUZfU0lHUEVORElOR3xfVElGX05FRURfUkVTQ0hFRHxfVElGX1JFU1RPUkVBTEx8X1RJRl9TQVZFX05WR1BSU3xfVElGX05PRVJST1J8X1RJRl9SRVNUT1JFX1NJR01BU0spCisJYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQfF9USUZfVVNFUl9XT1JLX01BU0t8X1RJRl9QRVJTWVNDQUxMX01BU0spCiAJYm5lLQlzeXNjYWxsX2V4aXRfd29yawogCWNtcGxkCXIzLHIxMQogCWxkCXI1LF9DQ1IocjEpCkBAIC0xNzAsOCArMTY5LDkgQEAKIAlzdGRjeC4JcjAsMCxyMQkJCS8qIHRvIGNsZWFyIHRoZSByZXNlcnZhdGlvbiAqLwogCWFuZGkuCXI2LHI4LE1TUl9QUgogCWxkCXI0LF9MSU5LKHIxKQotCWJlcS0JMWYJCQkvKiBvbmx5IHJlc3RvcmUgcjEzIGlmICovCi0JbGQJcjEzLEdQUjEzKHIxKQkJLyogcmV0dXJuaW5nIHRvIHVzZXJtb2RlICovCisJYmVxLQkxZgorCUFDQ09VTlRfQ1BVX1VTRVJfRVhJVChyMTEsIHIxMikKKwlsZAlyMTMsR1BSMTMocjEpCS8qIG9ubHkgcmVzdG9yZSByMTMgaWYgcmV0dXJuaW5nIHRvIHVzZXJtb2RlICovCiAxOglsZAlyMixHUFIyKHIxKQogCWxpCXIxMixNU1JfUkkKIAlhbmRjCXIxMSxyMTAscjEyCkBAIC0yMTYsOCArMjE2LDEwIEBACiAJIElmIFRJRl9OT0VSUk9SIGlzIHNldCwganVzdCBzYXZlIHIzIGFzIGl0IGlzLiAqLwogCiAJYW5kaS4JcjAscjksX1RJRl9SRVNUT1JFQUxMCi0JYm5lLQkyZgotCWNtcGxkCXIzLHIxMQkJLyogcjEwIGlzIC1MQVNUX0VSUk5PICovCisJYmVxKwkwZgorCVJFU1RfTlZHUFJTKHIxKQorCWIJMmYKKzA6CWNtcGxkCXIzLHIxMQkJLyogcjEwIGlzIC1MQVNUX0VSUk5PICovCiAJYmx0KwkxZgogCWFuZGkuCXIwLHI5LF9USUZfTk9FUlJPUgogCWJuZS0JMWYKQEAgLTIyOSw5ICsyMzEsNyBAQAogMjoJYW5kaS4JcjAscjksKF9USUZfUEVSU1lTQ0FMTF9NQVNLKQogCWJlcQk0ZgogCi0JLyogQ2xlYXIgcGVyLXN5c2NhbGwgVElGIGZsYWdzIGlmIGFueSBhcmUgc2V0LCBidXQgX2xlYXZlXwotCV9USUZfU0FWRV9OVkdQUlMgc2V0IGluIHI5IHNpbmNlIHdlIGhhdmVuJ3QgZGVhbHQgd2l0aCB0aGF0Ci0JeWV0LiAgKi8KKwkvKiBDbGVhciBwZXItc3lzY2FsbCBUSUYgZmxhZ3MgaWYgYW55IGFyZSBzZXQuICAqLwogCiAJbGkJcjExLF9USUZfUEVSU1lTQ0FMTF9NQVNLCiAJYWRkaQlyMTIscjEyLFRJX0ZMQUdTCkBAIC0yNDAsMTAgKzI0MCw5IEBACiAJc3RkY3guCXIxMCwwLHIxMgogCWJuZS0JM2IKIAlzdWJpCXIxMixyMTIsVElfRkxBR1MKLQkKLTQ6CWJsCS5zYXZlX252Z3BycwotCS8qIEFueXRoaW5nIGVsc2UgbGVmdCB0byBkbz8gKi8KLQlhbmRpLglyMCxyOSwoX1RJRl9TWVNDQUxMX1RfT1JfQXxfVElGX1NJTkdMRVNURVB8X1RJRl9TQVZFX05WR1BSUykKKworNDoJLyogQW55dGhpbmcgZWxzZSBsZWZ0IHRvIGRvPyAqLworCWFuZGkuCXIwLHI5LChfVElGX1NZU0NBTExfVF9PUl9BfF9USUZfU0lOR0xFU1RFUCkKIAliZXEJLnJldF9mcm9tX2V4Y2VwdF9saXRlCiAKIAkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLwpAQCAtMjUxLDI2ICsyNTAsMTAgQEAKIAlvcmkJcjEwLHIxMCxNU1JfRUUKIAltdG1zcmQJcjEwLDEKIAotCWFuZGkuCXIwLHI5LF9USUZfU0FWRV9OVkdQUlMKLQlibmUJc2F2ZV91c2VyX252Z3BycwotCi0JLyogSWYgdHJhY2luZywgcmUtZW5hYmxlIGludGVycnVwdHMgYW5kIGRvIGl0ICovCi1zYXZlX3VzZXJfbnZncHJzX2NvbnQ6CQotCWFuZGkuCXIwLHI5LChfVElGX1NZU0NBTExfVF9PUl9BfF9USUZfU0lOR0xFU1RFUCkKLQliZXEJNWYKLQkKKwlibAkuc2F2ZV9udmdwcnMKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECiAJYmwJLmRvX3N5c2NhbGxfdHJhY2VfbGVhdmUKLQlSRVNUX05WR1BSUyhyMSkKLQljbHJyZGkJcjEyLHIxLFRIUkVBRF9TSElGVAotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluIGFuZCBoYW5kbGUgb3RoZXIgd29yayBpZiBhbnkgKi8KLTU6CW1mbXNyCXIxMAotCXJsZGljbAlyMTAscjEwLDQ4LDEKLQlyb3RsZGkJcjEwLHIxMCwxNgotCW10bXNyZAlyMTAsMQotCi0JYgkucmV0X2Zyb21fZXhjZXB0X2xpdGUKKwliCS5yZXRfZnJvbV9leGNlcHQKIAogLyogU2F2ZSBub24tdm9sYXRpbGUgR1BScywgaWYgbm90IGFscmVhZHkgc2F2ZWQuICovCiBfR0xPQkFMKHNhdmVfbnZncHJzKQpAQCAtMjgyLDUxICsyNjUsNiBAQAogCXN0ZAlyMCxfVFJBUChyMSkKIAlibHIKIAotCi1zYXZlX3VzZXJfbnZncHJzOgotCWxkCXIxMCxUSV9TSUdGUkFNRShyMTIpCi0JYW5kaS4JcjAscjksX1RJRl8zMkJJVAotCWJlcS0Jc2F2ZV91c2VyX252Z3Byc182NAotCi0JLyogMzItYml0IHNhdmUgdG8gdXNlcnNwYWNlICovCi0KLS5tYWNybyBzYXZld29yZHMgc3RhcnQsIGVuZAotICAxOglzdHcgXHN0YXJ0LDQqKFxzdGFydCkocjEwKQotCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLmFsaWduCTMKLQkubGxvbmcJMWIsc2F2ZV91c2VyX252Z3Byc19mYXVsdAotCS5wcmV2aW91cwotCS5pZiBcZW5kIC0gXHN0YXJ0Ci0Jc2F2ZXdvcmRzICIoXHN0YXJ0KzEpIixcZW5kCi0JLmVuZGlmCi0uZW5kbQkKLQlzYXZld29yZHMgMTQsMzEKLQliCXNhdmVfdXNlcl9udmdwcnNfY29udAotCi1zYXZlX3VzZXJfbnZncHJzXzY0OgotCS8qIDY0LWJpdCBzYXZlIHRvIHVzZXJzcGFjZSAqLwotCi0ubWFjcm8gc2F2ZWxvbmdzIHN0YXJ0LCBlbmQKLSAgMToJc3RkIFxzdGFydCw4Kihcc3RhcnQpKHIxMCkKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5hbGlnbgkzCi0JLmxsb25nCTFiLHNhdmVfdXNlcl9udmdwcnNfZmF1bHQKLQkucHJldmlvdXMKLQkuaWYgXGVuZCAtIFxzdGFydAotCXNhdmVsb25ncyAiKFxzdGFydCsxKSIsXGVuZAotCS5lbmRpZgotLmVuZG0JCi0Jc2F2ZWxvbmdzIDE0LDMxCi0JYglzYXZlX3VzZXJfbnZncHJzX2NvbnQKLQotc2F2ZV91c2VyX252Z3Byc19mYXVsdDoKLQlsaQlyMywxMQkJLyogU0lHU0VHViAqLwotCWxkCXI0LFRJX1RBU0socjEyKQotCWJsCS5mb3JjZV9zaWdzZWd2Ci0KLQljbHJyZGkJcjEyLHIxLFRIUkVBRF9TSElGVAotCWxkCXI5LFRJX0ZMQUdTKHIxMikKLQliCXNhdmVfdXNlcl9udmdwcnNfY29udAogCQogLyoKICAqIFRoZSBzaWdzdXNwZW5kIGFuZCBydF9zaWdzdXNwZW5kIHN5c3RlbSBjYWxscyBjYW4gY2FsbCBkb19zaWduYWwKQEAgLTM1Miw2ICsyOTAsMTYgQEAKIAlibAkuc3lzX2Nsb25lCiAJYglzeXNjYWxsX2V4aXQKIAorX0dMT0JBTChwcGMzMl9zd2FwY29udGV4dCkKKwlibAkuc2F2ZV9udmdwcnMKKwlibAkuY29tcGF0X3N5c19zd2FwY29udGV4dAorCWIJc3lzY2FsbF9leGl0CisKK19HTE9CQUwocHBjNjRfc3dhcGNvbnRleHQpCisJYmwJLnNhdmVfbnZncHJzCisJYmwJLnN5c19zd2FwY29udGV4dAorCWIJc3lzY2FsbF9leGl0CisKIF9HTE9CQUwocmV0X2Zyb21fZm9yaykKIAlibAkuc2NoZWR1bGVfdGFpbAogCVJFU1RfTlZHUFJTKHIxKQpAQCAtMzc0LDcgKzMyMiw3IEBACiAgKiB0aGUgZm9yayBjb2RlIGFsc28uCiAgKgogICogVGhlIGNvZGUgd2hpY2ggY3JlYXRlcyB0aGUgbmV3IHRhc2sgY29udGV4dCBpcyBpbiAnY29weV90aHJlYWQnCi0gKiBpbiBhcmNoL3BwYzY0L2tlcm5lbC9wcm9jZXNzLmMKKyAqIGluIGFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIAogICovCiAJLmFsaWduCTcKIF9HTE9CQUwoX3N3aXRjaCkKQEAgLTUzOCw2ICs0ODYsNyBAQAogCSAqIHVzZXJzcGFjZQogCSAqLwogCWJlcQkxZgorCUFDQ09VTlRfQ1BVX1VTRVJfRVhJVChyMywgcjQpCiAJUkVTVF9HUFIoMTMsIHIxKQogMToKIAlsZAlyMyxfQ1RSKHIxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IDY1ZWFlNzUuLjRkMzdhM2NiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC0xOCwyOCArMTgsMyBAQAogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogCiB1bnNpZ25lZCBsb25nIHBwYzY0X2Zpcm13YXJlX2ZlYXR1cmVzOwotCi0jaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCi1maXJtd2FyZV9mZWF0dXJlX3QgZmlybXdhcmVfZmVhdHVyZXNfdGFibGVbRklSTVdBUkVfTUFYX0ZFQVRVUkVTXSA9IHsKLQl7RldfRkVBVFVSRV9QRlQsCQkiaGNhbGwtcGZ0In0sCi0Je0ZXX0ZFQVRVUkVfVENFLAkJImhjYWxsLXRjZSJ9LAotCXtGV19GRUFUVVJFX1NQUkcwLAkJImhjYWxsLXNwcmcwIn0sCi0Je0ZXX0ZFQVRVUkVfREFCUiwJCSJoY2FsbC1kYWJyIn0sCi0Je0ZXX0ZFQVRVUkVfQ09QWSwJCSJoY2FsbC1jb3B5In0sCi0Je0ZXX0ZFQVRVUkVfQVNSLAkJImhjYWxsLWFzciJ9LAotCXtGV19GRUFUVVJFX0RFQlVHLAkJImhjYWxsLWRlYnVnIn0sCi0Je0ZXX0ZFQVRVUkVfUEVSRiwJCSJoY2FsbC1wZXJmIn0sCi0Je0ZXX0ZFQVRVUkVfRFVNUCwJCSJoY2FsbC1kdW1wIn0sCi0Je0ZXX0ZFQVRVUkVfSU5URVJSVVBULAkJImhjYWxsLWludGVycnVwdCJ9LAotCXtGV19GRUFUVVJFX01JR1JBVEUsCQkiaGNhbGwtbWlncmF0ZSJ9LAotCXtGV19GRUFUVVJFX1BFUkZNT04sCQkiaGNhbGwtcGVyZm1vbiJ9LAotCXtGV19GRUFUVVJFX0NSUSwJCSJoY2FsbC1jcnEifSwKLQl7RldfRkVBVFVSRV9WSU8sCQkiaGNhbGwtdmlvIn0sCi0Je0ZXX0ZFQVRVUkVfUkRNQSwJCSJoY2FsbC1yZG1hIn0sCi0Je0ZXX0ZFQVRVUkVfTExBTiwJCSJoY2FsbC1sTEFOIn0sCi0Je0ZXX0ZFQVRVUkVfQlVMSywJCSJoY2FsbC1idWxrIn0sCi0Je0ZXX0ZFQVRVUkVfWERBQlIsCQkiaGNhbGwteGRhYnIifSwKLQl7RldfRkVBVFVSRV9NVUxUSVRDRSwJCSJoY2FsbC1tdWx0aS10Y2UifSwKLQl7RldfRkVBVFVSRV9TUExQQVIsCQkiaGNhbGwtc3BscGFyIn0sCi19OwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDAzYjI1ZjkuLmEwNTc5ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCkBAIC03MTQsNiArNzE0LDcgQEAKICNpZmRlZiBDT05GSUdfQUxUSVZFQwogCWJuZQlsb2FkX3VwX2FsdGl2ZWMJCS8qIGlmIGZyb20gdXNlciwganVzdCBsb2FkIGl0IHVwICovCiAjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECiAJRVhDX1hGRVJfRUVfTElURSgweGYyMCwgYWx0aXZlY191bmF2YWlsYWJsZV9leGNlcHRpb24pCiAKIFBlcmZvcm1hbmNlTW9uaXRvcjoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF80NHguUwppbmRleCA4YjQ5Njc5Li40N2M3ZmExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNDR4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzQ0eC5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2tlcm5lbC9oZWFkXzQ0eC5TCi0gKgogICogS2VybmVsIGV4ZWN1dGlvbiBlbnRyeSBwb2ludCBjb2RlLgogICoKICAqICAgIENvcHlyaWdodCAoYykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIDxnZHRAbGludXhwcGMub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwppbmRleCA0MTU2NTk2Li4zNTA4NGYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TCi0gKgogICogIFBvd2VyUEMgdmVyc2lvbgogICogICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCiAgKgpAQCAtMTM5LDcgKzEzNyw3IEBACiAJb3JpCXIyNCxyMjQsTVNSX1JJCiAJbXRtc3JkCXIyNAkJCS8qIFJJIG9uICovCiAKLQkvKiBHcmFiIG91ciBsaW51eCBjcHUgbnVtYmVyICovCisJLyogR3JhYiBvdXIgcGh5c2ljYWwgY3B1IG51bWJlciAqLwogCW1yCXIyNCxyMwogCiAJLyogVGVsbCB0aGUgbWFzdGVyIGNwdSB3ZSdyZSBoZXJlICovCkBAIC0xNTMsMTIgKzE1MSw3IEBACiAJY21wZGkJMCxyNCwxCiAJYm5lCTEwMGIKIAotI2lmZGVmIENPTkZJR19ITVQKLQlTRVRfUkVHX0lNTUVESUFURShyNCwgLmhtdF9pbml0KQotCW10Y3RyCXI0Ci0JYmN0cgotI2Vsc2UKLSNpZmRlZiBDT05GSUdfU01QCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKIAlMT0FEX1JFR19JTU1FRElBVEUocjQsIC5wU2VyaWVzX3NlY29uZGFyeV9zbXBfaW5pdCkKIAltdGN0cglyNAogCW1yCXIzLHIyNApAQCAtMTY2LDcgKzE1OSw2IEBACiAjZWxzZQogCUJVR19PUENPREUKICNlbmRpZgotI2VuZGlmCiAKIC8qIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBtYXJrIGV4Y2VwdGlvbiBmcmFtZXMgb24gdGhlIHN0YWNrLiAqLwogCS5zZWN0aW9uICIudG9jIiwiYXciCkBAIC0yODUsNiArMjc3LDcgQEAKIAlzdGQJcjEwLDAocjEpOwkJLyogbWFrZSBzdGFjayBjaGFpbiBwb2ludGVyCSovIFwKIAlzdGQJcjAsR1BSMChyMSk7CQkvKiBzYXZlIHIwIGluIHN0YWNrZnJhbWUJKi8gXAogCXN0ZAlyMTAsR1BSMShyMSk7CQkvKiBzYXZlIHIxIGluIHN0YWNrZnJhbWUJKi8gXAorCUFDQ09VTlRfQ1BVX1VTRVJfRU5UUlkocjksIHIxMCk7CQkJCSAgIFwKIAlzdGQJcjIsR1BSMihyMSk7CQkvKiBzYXZlIHIyIGluIHN0YWNrZnJhbWUJKi8gXAogCVNBVkVfNEdQUlMoMywgcjEpOwkJLyogc2F2ZSByMyAtIHI2IGluIHN0YWNrZnJhbWUJKi8gXAogCVNBVkVfMkdQUlMoNywgcjEpOwkJLyogc2F2ZSByNywgcjggaW4gc3RhY2tmcmFtZQkqLyBcCkBAIC0zMjEsNyArMzE0LDYgQEAKIGxhYmVsIyNfcFNlcmllczoJCQkJCVwKIAlITVRfTUVESVVNOwkJCQkJXAogCW10c3ByCVNQUk5fU1BSRzEscjEzOwkJLyogc2F2ZSByMTMgKi8JXAotCVJVTkxBVENIX09OKHIxMyk7CQkJCVwKIAlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWEdFTiwgbGFiZWwjI19jb21tb24pCiAKICNkZWZpbmUgU1REX0VYQ0VQVElPTl9JU0VSSUVTKG4sIGxhYmVsLCBhcmVhKQkJXApAQCAtMzI5LDcgKzMyMSw2IEBACiBsYWJlbCMjX2lTZXJpZXM6CQkJCQlcCiAJSE1UX01FRElVTTsJCQkJCVwKIAltdHNwcglTUFJOX1NQUkcxLHIxMzsJCS8qIHNhdmUgcjEzICovCVwKLQlSVU5MQVRDSF9PTihyMTMpOwkJCQlcCiAJRVhDRVBUSU9OX1BST0xPR19JU0VSSUVTXzEoYXJlYSk7CQlcCiAJRVhDRVBUSU9OX1BST0xPR19JU0VSSUVTXzI7CQkJXAogCWIJbGFiZWwjI19jb21tb24KQEAgLTMzOSw3ICszMzAsNiBAQAogbGFiZWwjI19pU2VyaWVzOgkJCQkJCQlcCiAJSE1UX01FRElVTTsJCQkJCQkJXAogCW10c3ByCVNQUk5fU1BSRzEscjEzOwkJLyogc2F2ZSByMTMgKi8JCQlcCi0JUlVOTEFUQ0hfT04ocjEzKTsJCQkJCQlcCiAJRVhDRVBUSU9OX1BST0xPR19JU0VSSUVTXzEoUEFDQV9FWEdFTik7CQkJCVwKIAlsYnoJcjEwLFBBQ0FQUk9DRU5BQkxFRChyMTMpOwkJCQlcCiAJY21wd2kJMCxyMTAsMDsJCQkJCQlcCkBAIC0zOTIsNiArMzgyLDcgQEAKIGxhYmVsIyNfY29tbW9uOgkJCQkJCVwKIAlFWENFUFRJT05fUFJPTE9HX0NPTU1PTih0cmFwLCBQQUNBX0VYR0VOKTsJXAogCURJU0FCTEVfSU5UUzsJCQkJCVwKKwlibAkucHBjNjRfcnVubGF0Y2hfb247CQkJXAogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQlcCiAJYmwJaGRscjsJCQkJCVwKIAliCS5yZXRfZnJvbV9leGNlcHRfbGl0ZQpAQCAtNDA5LDcgKzQwMCw2IEBACiBfbWFjaGluZV9jaGVja19wU2VyaWVzOgogCUhNVF9NRURJVU0KIAltdHNwcglTUFJOX1NQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KLQlSVU5MQVRDSF9PTihyMTMpCiAJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24pCiAKIAkuID0gMHgzMDAKQEAgLTQzNiw3ICs0MjYsNiBAQAogZGF0YV9hY2Nlc3Nfc2xiX3BTZXJpZXM6CiAJSE1UX01FRElVTQogCW10c3ByCVNQUk5fU1BSRzEscjEzCi0JUlVOTEFUQ0hfT04ocjEzKQogCW1mc3ByCXIxMyxTUFJOX1NQUkczCQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCiAJc3RkCXIzLFBBQ0FfRVhTTEIrRVhfUjMocjEzKQogCW1mc3ByCXIzLFNQUk5fREFSCkBAIC00NjIsNyArNDUxLDYgQEAKIGluc3RydWN0aW9uX2FjY2Vzc19zbGJfcFNlcmllczoKIAlITVRfTUVESVVNCiAJbXRzcHIJU1BSTl9TUFJHMSxyMTMKLQlSVU5MQVRDSF9PTihyMTMpCiAJbWZzcHIJcjEzLFNQUk5fU1BSRzMJCS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8KIAlzdGQJcjMsUEFDQV9FWFNMQitFWF9SMyhyMTMpCiAJbWZzcHIJcjMsU1BSTl9TUlIwCQkvKiBTUlIwIGlzIGZhdWx0aW5nIGFkZHJlc3MgKi8KQEAgLTQ5Myw3ICs0ODEsNiBAQAogCS5nbG9ibAlzeXN0ZW1fY2FsbF9wU2VyaWVzCiBzeXN0ZW1fY2FsbF9wU2VyaWVzOgogCUhNVF9NRURJVU0KLQlSVU5MQVRDSF9PTihyOSkKIAltcglyOSxyMTMKIAltZm1zcglyMTAKIAltZnNwcglyMTMsU1BSTl9TUFJHMwpAQCAtNTc3LDcgKzU2NCw2IEBACiBzeXN0ZW1fcmVzZXRfZndubWk6CiAJSE1UX01FRElVTQogCW10c3ByCVNQUk5fU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLwotCVJVTkxBVENIX09OKHIxMykKIAlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWEdFTiwgc3lzdGVtX3Jlc2V0X2NvbW1vbikKIAogCS5nbG9ibCBtYWNoaW5lX2NoZWNrX2Z3bm1pCkBAIC01ODUsNyArNTcxLDYgQEAKIG1hY2hpbmVfY2hlY2tfZndubWk6CiAJSE1UX01FRElVTQogCW10c3ByCVNQUk5fU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLwotCVJVTkxBVENIX09OKHIxMykKIAlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWE1DLCBtYWNoaW5lX2NoZWNrX2NvbW1vbikKIAogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwpAQCAtODYwLDYgKzg0NSwxNCBAQAogCWxkCXIxMSxfTklQKHIxKQogCWFuZGkuCXIzLHIxMixNU1JfUkkJCS8qIGNoZWNrIGlmIFJJIGlzIHNldCAqLwogCWJlcS0JdW5yZWNvdl9mZXIKKworI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisJYW5kaS4JcjMscjEyLE1TUl9QUgorCWJlcQkyZgorCUFDQ09VTlRfQ1BVX1VTRVJfRVhJVChyMywgcjQpCisyOgorI2VuZGlmCisKIAlsZAlyMyxfQ0NSKHIxKQogCWxkCXI0LF9MSU5LKHIxKQogCWxkCXI1LF9DVFIocjEpCkBAIC04OTYsNyArODg5LDYgQEAKIAkuYWxpZ24JNwogCS5nbG9ibCBkYXRhX2FjY2Vzc19jb21tb24KIGRhdGFfYWNjZXNzX2NvbW1vbjoKLQlSVU5MQVRDSF9PTihyMTApCQkvKiBJdCB3b250IGZpdCBpbiB0aGUgMHgzMDAgaGFuZGxlciAqLwogCW1mc3ByCXIxMCxTUFJOX0RBUgogCXN0ZAlyMTAsUEFDQV9FWEdFTitFWF9EQVIocjEzKQogCW1mc3ByCXIxMCxTUFJOX0RTSVNSCkBAIC0xMDQ0LDYgKzEwMzYsNyBAQAogCUVYQ0VQVElPTl9QUk9MT0dfQ09NTU9OKDB4NTAwLCBQQUNBX0VYR0VOKQogaGFyZHdhcmVfaW50ZXJydXB0X2VudHJ5OgogCURJU0FCTEVfSU5UUworCWJsCS5wcGM2NF9ydW5sYXRjaF9vbgogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlibAkuZG9fSVJRCiAJYgkucmV0X2Zyb21fZXhjZXB0X2xpdGUKQEAgLTE1NTEsNiArMTU0NCw5IEBACiAJbXIJcjI4LHI2CiAJbXIJcjI3LHI3CiAKKwkvKiBBbGlnbiB0aGUgc3RhY2sgdG8gMTYtYnl0ZSBib3VuZGFyeSBmb3IgYnJva2VuIHlhYm9vdCAqLworCXJsZGljcglyMSxyMSwwLDU5CisKIAkvKiBNYWtlIHN1cmUgd2UgYXJlIHJ1bm5pbmcgaW4gNjQgYml0cyBtb2RlICovCiAJYmwJLmVuYWJsZV82NGJfbW9kZQogCkBAIC0xODE4LDIyICsxODE0LDYgQEAKIAlvcmkJcjYscjYsTVNSX1JJCiAJbXRtc3JkCXI2CQkJLyogUkkgb24gKi8KIAotI2lmZGVmIENPTkZJR19ITVQKLQkvKiBTdGFydCB1cCB0aGUgc2Vjb25kIHRocmVhZCBvbiBjcHUgMCAqLwotCW1mc3ByCXIzLFNQUk5fUFZSCi0Jc3J3aQlyMyxyMywxNgotCWNtcHdpCXIzLDB4MzQJCQkvKiBQdWxzYXIgICovCi0JYmVxCTkwZgotCWNtcHdpCXIzLDB4MzYJCQkvKiBJY2VzdGFyICovCi0JYmVxCTkwZgotCWNtcHdpCXIzLDB4MzcJCQkvKiBTU3RhciAgICovCi0JYmVxCTkwZgotCWIJOTFmCQkJLyogSE1UIG5vdCBzdXBwb3J0ZWQgKi8KLTkwOglsaQlyMywwCi0JYmwJLmhtdF9zdGFydF9zZWNvbmRhcnkKLTkxOgotI2VuZGlmCi0KIAkvKiBUaGUgZm9sbG93aW5nIGdldHMgdGhlIHN0YWNrIGFuZCBUT0Mgc2V0IHVwIHdpdGggdGhlIHJlZ3MgKi8KIAkvKiBwb2ludGluZyB0byB0aGUgcmVhbCBhZGRyIG9mIHRoZSBrZXJuZWwgc3RhY2suICBUaGlzIGlzICAgKi8KIAkvKiBhbGwgZG9uZSB0byBzdXBwb3J0IHRoZSBDIGZ1bmN0aW9uIGNhbGwgYmVsb3cgd2hpY2ggc2V0cyAgKi8KQEAgLTE5NDcsNzcgKzE5MjcsOCBAQAogCiAJYmwgLnN0YXJ0X2tlcm5lbAogCi1fR0xPQkFMKGhtdF9pbml0KQotI2lmZGVmIENPTkZJR19ITVQKLQlMT0FEX1JFR19JTU1FRElBVEUocjUsIGhtdF90aHJlYWRfZGF0YSkKLQltZnNwcglyNyxTUFJOX1BWUgotCXNyd2kJcjcscjcsMTYKLQljbXB3aQlyNywweDM0CQkJLyogUHVsc2FyICAqLwotCWJlcQk5MGYKLQljbXB3aQlyNywweDM2CQkJLyogSWNlc3RhciAqLwotCWJlcQk5MWYKLQljbXB3aQlyNywweDM3CQkJLyogU1N0YXIgICAqLwotCWJlcQk5MWYKLQliCTEwMWYKLTkwOgltZnNwcglyNixTUFJOX1BJUgotCWFuZGkuCXI2LHI2LDB4MWYKLQliCTkyZgotOTE6CW1mc3ByCXI2LFNQUk5fUElSCi0JYW5kaS4JcjYscjYsMHgzZmYKLTkyOglzbGRpCXI0LHIyNCwzCi0Jc3R3eAlyNixyNSxyNAotCWJsCS5obXRfc3RhcnRfc2Vjb25kYXJ5Ci0JYgkxMDFmCi0KLV9faG10X3NlY29uZGFyeV9ob2xkOgotCUxPQURfUkVHX0lNTUVESUFURShyNSwgaG10X3RocmVhZF9kYXRhKQotCWNscmxkaQlyNSxyNSw0Ci0JbGkJcjcsMAotCW1mc3ByCXI2LFNQUk5fUElSCi0JbWZzcHIJcjgsU1BSTl9QVlIKLQlzcndpCXI4LHI4LDE2Ci0JY21wd2kJcjgsMHgzNAotCWJuZQk5M2YKLQlhbmRpLglyNixyNiwweDFmCi0JYgkxMDNmCi05MzoJYW5kaS4JcjYscjYsMHgzZgotCi0xMDM6CWx3engJcjgscjUscjcKLQljbXB3CXI4LHI2Ci0JYmVxCTEwNGYKLQlhZGRpCXI3LHI3LDgKLQliCTEwM2IKLQotMTA0OglhZGRpCXI3LHI3LDQKLQlsd3p4CXI5LHI1LHI3Ci0JbXIJcjI0LHI5Ci0xMDE6Ci0jZW5kaWYKLQltcglyMyxyMjQKLQliCS5wU2VyaWVzX3NlY29uZGFyeV9zbXBfaW5pdAotCi0jaWZkZWYgQ09ORklHX0hNVAotX0dMT0JBTChobXRfc3RhcnRfc2Vjb25kYXJ5KQotCUxPQURfUkVHX0lNTUVESUFURShyNCxfX2htdF9zZWNvbmRhcnlfaG9sZCkKLQljbHJsZGkJcjQscjQsNAotCW10c3ByCVNQUk5fTklBRE9STSwgcjQKLQltZnNwcglyNCwgU1BSTl9NU1JET1JNCi0JbGkJcjUsIC02NQotCWFuZAlyNCwgcjQsIHI1Ci0JbXRzcHIJU1BSTl9NU1JET1JNLCByNAotCWxpcwlyNCwweGZmZWYKLQlvcmkJcjQscjQsMHg3NDAzCi0JbXRzcHIJU1BSTl9UU0MsIHI0Ci0JbGkJcjQsMHgxZjQKLQltdHNwcglTUFJOX1RTVCwgcjQKLQltZnNwcglyNCwgU1BSTl9ISUQwCi0Jb3JpCXI0LCByNCwgMHgxCi0JbXRzcHIJU1BSTl9ISUQwLCByNAotCW1mc3ByCXI0LCBTUFJOX0NUUkxGCi0Jb3JpcwlyNCwgcjQsIDB4NDAKLQltdHNwcglTUFJOX0NUUkxULCByNAotCWJscgotI2VuZGlmCisJLyogTm90IHJlYWNoZWQgKi8KKwlCVUdfT1BDT0RFCiAKIC8qCiAgKiBXZSBwdXQgYSBmZXcgdGhpbmdzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZC4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUwppbmRleCBiYzZkMWFjLi4yODk0MWY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzh4eC5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9rZXJuZWwvZXhjZXB0Xzh4eC5TCi0gKgogICogIFBvd2VyUEMgdmVyc2lvbgogICogICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCiAgKiAgUmV3cml0dGVuIGJ5IENvcnQgRG91Z2FuIChjb3J0QGNzLm5tdC5lZHUpIGZvciBQUmVQCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MzZlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaApAQCAtMCwwICsxLDM2MyBAQAorI2lmbmRlZiBfX0hFQURfQk9PS0VfSF9fCisjZGVmaW5lIF9fSEVBRF9CT09LRV9IX18KKworLyoKKyAqIE1hY3JvcyB1c2VkIGZvciBjb21tb24gQm9vay1lIGV4Y2VwdGlvbiBoYW5kbGluZworICovCisKKyNkZWZpbmUgU0VUX0lWT1IodmVjdG9yX251bWJlciwgdmVjdG9yX2xhYmVsKQkJXAorCQlsaQlyMjYsdmVjdG9yX2xhYmVsQGw7IAkJXAorCQltdHNwcglTUFJOX0lWT1IjI3ZlY3Rvcl9udW1iZXIscjI2OwlcCisJCXN5bmMKKworI2RlZmluZSBOT1JNQUxfRVhDRVBUSU9OX1BST0xPRwkJCQkJCSAgICAgXAorCW10c3ByCVNQUk5fU1BSRzAscjEwOwkJLyogc2F2ZSB0d28gcmVnaXN0ZXJzIHRvIHdvcmsgd2l0aCAqL1wKKwltdHNwcglTUFJOX1NQUkcxLHIxMTsJCQkJCQkgICAgIFwKKwltdHNwcglTUFJOX1NQUkc0VyxyMTsJCQkJCQkgICAgIFwKKwltZmNyCXIxMDsJCQkvKiBzYXZlIENSIGluIHIxMCBmb3Igbm93CSAgICovXAorCW1mc3ByCXIxMSxTUFJOX1NSUjE7CQkvKiBjaGVjayB3aGV0aGVyIHVzZXIgb3Iga2VybmVsICAgICovXAorCWFuZGkuCXIxMSxyMTEsTVNSX1BSOwkJCQkJCSAgICAgXAorCWJlcQkxZjsJCQkJCQkJICAgICBcCisJbWZzcHIJcjEsU1BSTl9TUFJHMzsJCS8qIGlmIGZyb20gdXNlciwgc3RhcnQgYXQgdG9wIG9mICAgKi9cCisJbHd6CXIxLFRIUkVBRF9JTkZPLVRIUkVBRChyMSk7IC8qIHRoaXMgdGhyZWFkJ3Mga2VybmVsIHN0YWNrICAgKi9cCisJYWRkaQlyMSxyMSxUSFJFQURfU0laRTsJCQkJCSAgICAgXAorMToJc3ViaQlyMSxyMSxJTlRfRlJBTUVfU0laRTsJLyogQWxsb2NhdGUgYW4gZXhjZXB0aW9uIGZyYW1lICAgICAqL1wKKwltcglyMTEscjE7CQkJCQkJCSAgICAgXAorCXN0dwlyMTAsX0NDUihyMTEpOyAgICAgICAgICAvKiBzYXZlIHZhcmlvdXMgcmVnaXN0ZXJzCSAgICovXAorCXN0dwlyMTIsR1BSMTIocjExKTsJCQkJCQkgICAgIFwKKwlzdHcJcjksR1BSOShyMTEpOwkJCQkJCSAgICAgXAorCW1mc3ByCXIxMCxTUFJOX1NQUkcwOwkJCQkJCSAgICAgXAorCXN0dwlyMTAsR1BSMTAocjExKTsJCQkJCQkgICAgIFwKKwltZnNwcglyMTIsU1BSTl9TUFJHMTsJCQkJCQkgICAgIFwKKwlzdHcJcjEyLEdQUjExKHIxMSk7CQkJCQkJICAgICBcCisJbWZscglyMTA7CQkJCQkJCSAgICAgXAorCXN0dwlyMTAsX0xJTksocjExKTsJCQkJCQkgICAgIFwKKwltZnNwcglyMTAsU1BSTl9TUFJHNFI7CQkJCQkgICAgIFwKKwltZnNwcglyMTIsU1BSTl9TUlIwOwkJCQkJCSAgICAgXAorCXN0dwlyMTAsR1BSMShyMTEpOwkJCQkJCSAgICAgXAorCW1mc3ByCXI5LFNQUk5fU1JSMTsJCQkJCQkgICAgIFwKKwlzdHcJcjEwLDAocjExKTsJCQkJCQkgICAgIFwKKwlybHdpbm0JcjkscjksMCwxNCwxMjsJCS8qIGNsZWFyIE1TUl9XRSAobmVjZXNzYXJ5PykJICAgKi9cCisJc3R3CXIwLEdQUjAocjExKTsJCQkJCQkgICAgIFwKKwlTQVZFXzRHUFJTKDMsIHIxMSk7CQkJCQkJICAgICBcCisJU0FWRV8yR1BSUyg3LCByMTEpCisKKy8qIFRvIGhhbmRsZSB0aGUgYWRkaXRpb25hbCBleGNlcHRpb24gcHJpb3JpdHkgbGV2ZWxzIG9uIDQweCBhbmQgQm9vay1FCisgKiBwcm9jZXNzb3JzIHdlIGFsbG9jYXRlIGEgNGsgc3RhY2sgcGVyIGFkZGl0aW9uYWwgcHJpb3JpdHkgbGV2ZWwuIFRoZSB2YXJpb3VzCisgKiBoZWFkX3h4eC5TIGZpbGVzIGFsbG9jYXRlIHNwYWNlIChleGNlcHRpb25fc3RhY2tfdG9wKSBmb3IgZWFjaCBwcmlvcml0eSdzCisgKiBzdGFjayB0aW1lcyB0aGUgbnVtYmVyIG9mIENQVXMKKyAqCisgKiBPbiA0MHggY3JpdGljYWwgaXMgdGhlIG9ubHkgYWRkaXRpb25hbCBsZXZlbAorICogT24gNDR4L2U1MDAgd2UgaGF2ZSBjcml0aWNhbCBhbmQgbWFjaGluZSBjaGVjaworICogT24gZTIwMCB3ZSBoYXZlIGNyaXRpY2FsIGFuZCBkZWJ1ZyAobWFjaGluZSBjaGVjayBvY2N1cnMgdmlhIGNyaXRpY2FsKQorICoKKyAqIEFkZGl0aW9uYWxseSB3ZSByZXNlcnZlIGEgU1BSRyBmb3IgZWFjaCBwcmlvcml0eSBsZXZlbCBzbyB3ZSBjYW4gZnJlZSB1cCBhCisgKiBHUFIgdG8gdXNlIGFzIHRoZSBiYXNlIGZvciBpbmRpcmVjdCBhY2Nlc3MgdG8gdGhlIGV4Y2VwdGlvbiBzdGFja3MuICBUaGlzCisgKiBpcyBuZWNlc3Nhcnkgc2luY2UgdGhlIE1NVSBpcyBhbHdheXMgb24sIGZvciBCb29rLUUgcGFydHMsIGFuZCB0aGUgc3RhY2tzCisgKiBhcmUgb2Zmc2V0IGZyb20gS0VSTkVMQkFTRS4KKyAqCisgKi8KKyNkZWZpbmUgQk9PS0VfRVhDRVBUSU9OX1NUQUNLX1NJWkUJKDgxOTIpCisKKy8qIENSSVRfU1BSRyBvbmx5IHVzZWQgaW4gY3JpdGljYWwgZXhjZXB0aW9uIGhhbmRsaW5nICovCisjZGVmaW5lIENSSVRfU1BSRwlTUFJOX1NQUkcyCisvKiBNQ0hFQ0tfU1BSRyBvbmx5IHVzZWQgaW4gbWFjaGluZSBjaGVjayBleGNlcHRpb24gaGFuZGxpbmcgKi8KKyNkZWZpbmUgTUNIRUNLX1NQUkcJU1BSTl9TUFJHNlcKKworI2RlZmluZSBNQ0hFQ0tfU1RBQ0tfVE9QCShleGNlcHRpb25fc3RhY2tfdG9wIC0gNDA5NikKKyNkZWZpbmUgQ1JJVF9TVEFDS19UT1AJCShleGNlcHRpb25fc3RhY2tfdG9wKQorCisvKiBvbmx5IG9uIGUyMDAgZm9yIG5vdyAqLworI2RlZmluZSBERUJVR19TVEFDS19UT1AJCShleGNlcHRpb25fc3RhY2tfdG9wIC0gNDA5NikKKyNkZWZpbmUgREVCVUdfU1BSRwkJU1BSTl9TUFJHNlcKKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgQk9PS0VfTE9BRF9FWENfTEVWRUxfU1RBQ0sobGV2ZWwpCQlcCisJbWZzcHIJcjgsU1BSTl9QSVI7CQkJCVwKKwltdWxsaQlyOCxyOCxCT09LRV9FWENFUFRJT05fU1RBQ0tfU0laRTsJXAorCW5lZwlyOCxyODsJCQkJCVwKKwlhZGRpcwlyOCxyOCxsZXZlbCMjX1NUQUNLX1RPUEBoYTsJCVwKKwlhZGRpCXI4LHI4LGxldmVsIyNfU1RBQ0tfVE9QQGwKKyNlbHNlCisjZGVmaW5lIEJPT0tFX0xPQURfRVhDX0xFVkVMX1NUQUNLKGxldmVsKQkJXAorCWxpcwlyOCxsZXZlbCMjX1NUQUNLX1RPUEBoOwkJCVwKKwlvcmkJcjgscjgsbGV2ZWwjI19TVEFDS19UT1BAbAorI2VuZGlmCisKKy8qCisgKiBFeGNlcHRpb24gcHJvbG9nIGZvciBjcml0aWNhbC9tYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnMuICBUaGlzIGlzIGEKKyAqIGxpdHRsZSBkaWZmZXJlbnQgZnJvbSB0aGUgbm9ybWFsIGV4Y2VwdGlvbiBwcm9sb2cgYWJvdmUgc2luY2UgYQorICogY3JpdGljYWwvbWFjaGluZSBjaGVjayBleGNlcHRpb24gY2FuIHBvdGVudGlhbGx5IG9jY3VyIGF0IGFueSBwb2ludAorICogZHVyaW5nIG5vcm1hbCBleGNlcHRpb24gcHJvY2Vzc2luZy4gVGh1cyB3ZSBjYW5ub3QgdXNlIHRoZSBzYW1lIFNQUkcKKyAqIHJlZ2lzdGVycyBhcyB0aGUgbm9ybWFsIHByb2xvZyBhYm92ZS4gSW5zdGVhZCB3ZSB1c2UgYSBwb3J0aW9uIG9mIHRoZQorICogY3JpdGljYWwvbWFjaGluZSBjaGVjayBleGNlcHRpb24gc3RhY2sgYXQgbG93IHBoeXNpY2FsIGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZSBFWENfTEVWRUxfRVhDRVBUSU9OX1BST0xPRyhleGNfbGV2ZWwsIGV4Y19sZXZlbF9zcnIwLCBleGNfbGV2ZWxfc3JyMSkgXAorCW10c3ByCWV4Y19sZXZlbCMjX1NQUkcscjg7CQkJCQkgICAgIFwKKwlCT09LRV9MT0FEX0VYQ19MRVZFTF9TVEFDSyhleGNfbGV2ZWwpOy8qIHI4IHBvaW50cyB0byB0aGUgZXhjX2xldmVsIHN0YWNrKi8gXAorCXN0dwlyMTAsR1BSMTAtSU5UX0ZSQU1FX1NJWkUocjgpOwkJCQkgICAgIFwKKwlzdHcJcjExLEdQUjExLUlOVF9GUkFNRV9TSVpFKHI4KTsJCQkJICAgICBcCisJbWZjcglyMTA7CQkJLyogc2F2ZSBDUiBpbiByMTAgZm9yIG5vdwkgICAqL1wKKwltZnNwcglyMTEsZXhjX2xldmVsX3NycjE7CS8qIGNoZWNrIHdoZXRoZXIgdXNlciBvciBrZXJuZWwgICAgKi9cCisJYW5kaS4JcjExLHIxMSxNU1JfUFI7CQkJCQkJICAgICBcCisJbXIJcjExLHI4OwkJCQkJCQkgICAgIFwKKwltZnNwcglyOCxleGNfbGV2ZWwjI19TUFJHOwkJCQkJICAgICBcCisJYmVxCTFmOwkJCQkJCQkgICAgIFwKKwkvKiBDT01JTkcgRlJPTSBVU0VSIE1PREUgKi8JCQkJCSAgICAgXAorCW1mc3ByCXIxMSxTUFJOX1NQUkczOwkJLyogaWYgZnJvbSB1c2VyLCBzdGFydCBhdCB0b3Agb2YgICAqL1wKKwlsd3oJcjExLFRIUkVBRF9JTkZPLVRIUkVBRChyMTEpOyAvKiB0aGlzIHRocmVhZCdzIGtlcm5lbCBzdGFjayAqL1wKKwlhZGRpCXIxMSxyMTEsVEhSRUFEX1NJWkU7CQkJCQkgICAgIFwKKzE6CXN1YmkJcjExLHIxMSxJTlRfRlJBTUVfU0laRTsJLyogQWxsb2NhdGUgYW4gZXhjZXB0aW9uIGZyYW1lICAgICAqL1wKKwlzdHcJcjEwLF9DQ1IocjExKTsgICAgICAgICAgLyogc2F2ZSB2YXJpb3VzIHJlZ2lzdGVycwkgICAqL1wKKwlzdHcJcjEyLEdQUjEyKHIxMSk7CQkJCQkJICAgICBcCisJc3R3CXI5LEdQUjkocjExKTsJCQkJCQkgICAgIFwKKwltZmxyCXIxMDsJCQkJCQkJICAgICBcCisJc3R3CXIxMCxfTElOSyhyMTEpOwkJCQkJCSAgICAgXAorCW1mc3ByCXIxMixTUFJOX0RFQVI7CQkvKiBzYXZlIERFQVIgYW5kIEVTUiBpbiB0aGUgZnJhbWUgICovXAorCXN0dwlyMTIsX0RFQVIocjExKTsJCS8qIHNpbmNlIHRoZXkgbWF5IGhhdmUgaGFkIHN0dWZmICAgKi9cCisJbWZzcHIJcjksU1BSTl9FU1I7CQkvKiBpbiB0aGVtIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgICovXAorCXN0dwlyOSxfRVNSKHIxMSk7CQkvKiBleGNlcHRpb24gd2FzIHRha2VuCQkgICAqL1wKKwltZnNwcglyMTIsZXhjX2xldmVsX3NycjA7CQkJCQkgICAgIFwKKwlzdHcJcjEsR1BSMShyMTEpOwkJCQkJCSAgICAgXAorCW1mc3ByCXI5LGV4Y19sZXZlbF9zcnIxOwkJCQkJICAgICBcCisJc3R3CXIxLDAocjExKTsJCQkJCQkgICAgIFwKKwltcglyMSxyMTE7CQkJCQkJCSAgICAgXAorCXJsd2lubQlyOSxyOSwwLDE0LDEyOwkJLyogY2xlYXIgTVNSX1dFIChuZWNlc3Nhcnk/KQkgICAqL1wKKwlzdHcJcjAsR1BSMChyMTEpOwkJCQkJCSAgICAgXAorCVNBVkVfNEdQUlMoMywgcjExKTsJCQkJCQkgICAgIFwKKwlTQVZFXzJHUFJTKDcsIHIxMSkKKworI2RlZmluZSBDUklUSUNBTF9FWENFUFRJT05fUFJPTE9HIFwKKwkJRVhDX0xFVkVMX0VYQ0VQVElPTl9QUk9MT0coQ1JJVCwgU1BSTl9DU1JSMCwgU1BSTl9DU1JSMSkKKyNkZWZpbmUgREVCVUdfRVhDRVBUSU9OX1BST0xPRyBcCisJCUVYQ19MRVZFTF9FWENFUFRJT05fUFJPTE9HKERFQlVHLCBTUFJOX0RTUlIwLCBTUFJOX0RTUlIxKQorI2RlZmluZSBNQ0hFQ0tfRVhDRVBUSU9OX1BST0xPRyBcCisJCUVYQ19MRVZFTF9FWENFUFRJT05fUFJPTE9HKE1DSEVDSywgU1BSTl9NQ1NSUjAsIFNQUk5fTUNTUlIxKQorCisvKgorICogRXhjZXB0aW9uIHZlY3RvcnMuCisgKi8KKyNkZWZpbmUJU1RBUlRfRVhDRVBUSU9OKGxhYmVsKQkJCQkJCSAgICAgXAorICAgICAgICAuYWxpZ24gNTsgICAgICAgICAgICAgIAkJCQkJCSAgICAgXAorbGFiZWw6CisKKyNkZWZpbmUgRklOSVNIX0VYQ0VQVElPTihmdW5jKQkJCQkJXAorCWJsCXRyYW5zZmVyX3RvX2hhbmRsZXJfZnVsbDsJCQlcCisJLmxvbmcJZnVuYzsJCQkJCQlcCisJLmxvbmcJcmV0X2Zyb21fZXhjZXB0X2Z1bGwKKworI2RlZmluZSBFWENFUFRJT04obiwgbGFiZWwsIGhkbHIsIHhmZXIpCQkJCVwKKwlTVEFSVF9FWENFUFRJT04obGFiZWwpOwkJCQkJXAorCU5PUk1BTF9FWENFUFRJT05fUFJPTE9HOwkJCQlcCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCQlcCisJeGZlcihuLCBoZGxyKQorCisjZGVmaW5lIENSSVRJQ0FMX0VYQ0VQVElPTihuLCBsYWJlbCwgaGRscikJCQlcCisJU1RBUlRfRVhDRVBUSU9OKGxhYmVsKTsJCQkJCVwKKwlDUklUSUNBTF9FWENFUFRJT05fUFJPTE9HOwkJCQlcCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCQlcCisJRVhDX1hGRVJfVEVNUExBVEUoaGRsciwgbisyLCAoTVNSX0tFUk5FTCAmIH4oTVNSX01FfE1TUl9ERXxNU1JfQ0UpKSwgXAorCQkJICBOT0NPUFksIGNyaXRfdHJhbnNmZXJfdG9faGFuZGxlciwgXAorCQkJICByZXRfZnJvbV9jcml0X2V4YykKKworI2RlZmluZSBNQ0hFQ0tfRVhDRVBUSU9OKG4sIGxhYmVsLCBoZGxyKQkJCVwKKwlTVEFSVF9FWENFUFRJT04obGFiZWwpOwkJCQkJXAorCU1DSEVDS19FWENFUFRJT05fUFJPTE9HOwkJCQlcCisJbWZzcHIJcjUsU1BSTl9FU1I7CQkJCQlcCisJc3R3CXI1LF9FU1IocjExKTsJCQkJCVwKKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJCVwKKwlFWENfWEZFUl9URU1QTEFURShoZGxyLCBuKzIsIChNU1JfS0VSTkVMICYgfihNU1JfTUV8TVNSX0RFfE1TUl9DRSkpLCBcCisJCQkgIE5PQ09QWSwgbWNoZWNrX3RyYW5zZmVyX3RvX2hhbmRsZXIsICAgXAorCQkJICByZXRfZnJvbV9tY2hlY2tfZXhjKQorCisjZGVmaW5lIEVYQ19YRkVSX1RFTVBMQVRFKGhkbHIsIHRyYXAsIG1zciwgY29weWVlLCB0ZmVyLCByZXQpCVwKKwlsaQlyMTAsdHJhcDsJCQkJCVwKKwlzdHcJcjEwLF9UUkFQKHIxMSk7CQkJCQlcCisJbGlzCXIxMCxtc3JAaDsJCQkJCVwKKwlvcmkJcjEwLHIxMCxtc3JAbDsJCQkJCVwKKwljb3B5ZWUocjEwLCByOSk7CQkJCQlcCisJYmwJdGZlcjsJCSAJCQkJXAorCS5sb25nCWhkbHI7CQkJCQkJXAorCS5sb25nCXJldAorCisjZGVmaW5lIENPUFlfRUUoZCwgcykJCXJsd2ltaSBkLHMsMCwxNiwxNgorI2RlZmluZSBOT0NPUFkoZCwgcykKKworI2RlZmluZSBFWENfWEZFUl9TVEQobiwgaGRscikJCVwKKwlFWENfWEZFUl9URU1QTEFURShoZGxyLCBuLCBNU1JfS0VSTkVMLCBOT0NPUFksIHRyYW5zZmVyX3RvX2hhbmRsZXJfZnVsbCwgXAorCQkJICByZXRfZnJvbV9leGNlcHRfZnVsbCkKKworI2RlZmluZSBFWENfWEZFUl9MSVRFKG4sIGhkbHIpCQlcCisJRVhDX1hGRVJfVEVNUExBVEUoaGRsciwgbisxLCBNU1JfS0VSTkVMLCBOT0NPUFksIHRyYW5zZmVyX3RvX2hhbmRsZXIsIFwKKwkJCSAgcmV0X2Zyb21fZXhjZXB0KQorCisjZGVmaW5lIEVYQ19YRkVSX0VFKG4sIGhkbHIpCQlcCisJRVhDX1hGRVJfVEVNUExBVEUoaGRsciwgbiwgTVNSX0tFUk5FTCwgQ09QWV9FRSwgdHJhbnNmZXJfdG9faGFuZGxlcl9mdWxsLCBcCisJCQkgIHJldF9mcm9tX2V4Y2VwdF9mdWxsKQorCisjZGVmaW5lIEVYQ19YRkVSX0VFX0xJVEUobiwgaGRscikJXAorCUVYQ19YRkVSX1RFTVBMQVRFKGhkbHIsIG4rMSwgTVNSX0tFUk5FTCwgQ09QWV9FRSwgdHJhbnNmZXJfdG9faGFuZGxlciwgXAorCQkJICByZXRfZnJvbV9leGNlcHQpCisKKy8qIENoZWNrIGZvciBhIHNpbmdsZSBzdGVwIGRlYnVnIGV4Y2VwdGlvbiB3aGlsZSBpbiBhbiBleGNlcHRpb24KKyAqIGhhbmRsZXIgYmVmb3JlIHN0YXRlIGhhcyBiZWVuIHNhdmVkLiAgVGhpcyBpcyB0byBjYXRjaCB0aGUgY2FzZQorICogd2hlcmUgYW4gaW5zdHJ1Y3Rpb24gdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIHNpbmdsZSBzdGVwIGNhdXNlcworICogYW4gZXhjZXB0aW9uIChlZyBJVExCL0RUTEIgbWlzcykgYW5kIHRodXMgdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mCisgKiB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgZ2VuZXJhdGVzIGEgc2luZ2xlIHN0ZXAgZGVidWcgZXhjZXB0aW9uLgorICoKKyAqIElmIHdlIGdldCBhIGRlYnVnIHRyYXAgb24gdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLAorICogd2UgcmVzZXQgdGhlIE1TUl9ERSBpbiB0aGUgX2V4Y2VwdGlvbiBoYW5kbGVyJ3NfIE1TUiAodGhlIGRlYnVnIHRyYXAgaXMKKyAqIGEgY3JpdGljYWwgZXhjZXB0aW9uLCBzbyB3ZSBhcmUgdXNpbmcgU1BSTl9DU1JSMSB0byBtYW5pcHVsYXRlIHRoZSBNU1IpLgorICogVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHdhcyBoYW5kbGluZyBhIG5vbi1jcml0aWNhbCBpbnRlcnJ1cHQsIHNvIGl0IHdpbGwKKyAqIHNhdmUgKGFuZCBsYXRlciByZXN0b3JlKSB0aGUgTVNSIHZpYSBTUFJOX0NTUlIxLCB3aGljaCB3aWxsIHN0aWxsIGhhdmUKKyAqIHRoZSBNU1JfREUgYml0IHNldC4KKyAqLworI2lmZGVmIENPTkZJR19FMjAwCisjZGVmaW5lIERFQlVHX0VYQ0VQVElPTgkJCQkJCQkgICAgICBcCisJU1RBUlRfRVhDRVBUSU9OKERlYnVnKTsJCQkJCQkgICAgICBcCisJREVCVUdfRVhDRVBUSU9OX1BST0xPRzsJCQkJCQkgICAgICBcCisJCQkJCQkJCQkgICAgICBcCisJLyoJCQkJCQkJCSAgICAgIFwKKwkgKiBJZiB0aGVyZSBpcyBhIHNpbmdsZSBzdGVwIG9yIGJyYW5jaC10YWtlbiBleGNlcHRpb24gaW4gYW4JICAgICAgXAorCSAqIGV4Y2VwdGlvbiBlbnRyeSBzZXF1ZW5jZSwgaXQgd2FzIHByb2JhYmx5IG1lYW50IHRvIGFwcGx5IHRvCSAgICAgIFwKKwkgKiB0aGUgY29kZSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIChzaW5jZSBleGNlcHRpb24gZW50cnkJICAgICAgXAorCSAqIGRvZXNuJ3QgdHVybiBvZmYgREUgYXV0b21hdGljYWxseSkuICBXZSBzaW11bGF0ZSB0aGUgZWZmZWN0CSAgICAgIFwKKwkgKiBvZiB0dXJuaW5nIG9mZiBERSBvbiBlbnRyeSB0byBhbiBleGNlcHRpb24gaGFuZGxlciBieSB0dXJuaW5nICAgICAgXAorCSAqIG9mZiBERSBpbiB0aGUgQ1NSUjEgdmFsdWUgYW5kIGNsZWFyaW5nIHRoZSBkZWJ1ZyBzdGF0dXMuCSAgICAgIFwKKwkgKi8JCQkJCQkJCSAgICAgIFwKKwltZnNwcglyMTAsU1BSTl9EQlNSOwkJLyogY2hlY2sgc2luZ2xlLXN0ZXAvYnJhbmNoIHRha2VuICovICBcCisJYW5kaXMuCXIxMCxyMTAsREJTUl9JQ0BoOwkJCQkJICAgICAgXAorCWJlcSsJMmY7CQkJCQkJCSAgICAgIFwKKwkJCQkJCQkJCSAgICAgIFwKKwlsaXMJcjEwLEtFUk5FTEJBU0VAaDsJLyogY2hlY2sgaWYgZXhjZXB0aW9uIGluIHZlY3RvcnMgKi8gICBcCisJb3JpCXIxMCxyMTAsS0VSTkVMQkFTRUBsOwkJCQkJICAgICAgXAorCWNtcGx3CXIxMixyMTA7CQkJCQkJICAgICAgXAorCWJsdCsJMmY7CQkJLyogYWRkciBiZWxvdyBleGNlcHRpb24gdmVjdG9ycyAqLyAgICBcCisJCQkJCQkJCQkgICAgICBcCisJbGlzCXIxMCxEZWJ1Z0BoOwkJCQkJCSAgICAgIFwKKwlvcmkJcjEwLHIxMCxEZWJ1Z0BsOwkJCQkJICAgICAgXAorCWNtcGx3CXIxMixyMTA7CQkJCQkJICAgICAgXAorCWJndCsJMmY7CQkJLyogYWRkciBhYm92ZSBleGNlcHRpb24gdmVjdG9ycyAqLyAgICBcCisJCQkJCQkJCQkgICAgICBcCisJLyogaGVyZSBpdCBsb29rcyBsaWtlIHdlIGdvdCBhbiBpbmFwcHJvcHJpYXRlIGRlYnVnIGV4Y2VwdGlvbi4gKi8gICAgIFwKKzE6CXJsd2lubQlyOSxyOSwwLH5NU1JfREU7CS8qIGNsZWFyIERFIGluIHRoZSBDRFJSMSB2YWx1ZSAqLyAgICAgXAorCWxpcwlyMTAsREJTUl9JQ0BoOwkJLyogY2xlYXIgdGhlIElDIGV2ZW50ICovCSAgICAgIFwKKwltdHNwcglTUFJOX0RCU1IscjEwOwkJCQkJCSAgICAgIFwKKwkvKiByZXN0b3JlIHN0YXRlIGFuZCBnZXQgb3V0ICovCQkJCQkgICAgICBcCisJbHd6CXIxMCxfQ0NSKHIxMSk7CQkJCQkJICAgICAgXAorCWx3eglyMCxHUFIwKHIxMSk7CQkJCQkJICAgICAgXAorCWx3eglyMSxHUFIxKHIxMSk7CQkJCQkJICAgICAgXAorCW10Y3JmCTB4ODAscjEwOwkJCQkJCSAgICAgIFwKKwltdHNwcglTUFJOX0RTUlIwLHIxMjsJCQkJCQkgICAgICBcCisJbXRzcHIJU1BSTl9EU1JSMSxyOTsJCQkJCQkgICAgICBcCisJbHd6CXI5LEdQUjkocjExKTsJCQkJCQkgICAgICBcCisJbHd6CXIxMixHUFIxMihyMTEpOwkJCQkJCSAgICAgIFwKKwltdHNwcglERUJVR19TUFJHLHI4OwkJCQkJCSAgICAgIFwKKwlCT09LRV9MT0FEX0VYQ19MRVZFTF9TVEFDSyhERUJVRyk7IC8qIHI4IHBvaW50cyB0byB0aGUgZGVidWcgc3RhY2sgKi8gXAorCWx3eglyMTAsR1BSMTAtSU5UX0ZSQU1FX1NJWkUocjgpOwkJCQkgICAgICBcCisJbHd6CXIxMSxHUFIxMS1JTlRfRlJBTUVfU0laRShyOCk7CQkJCSAgICAgIFwKKwltZnNwcglyOCxERUJVR19TUFJHOwkJCQkJCSAgICAgIFwKKwkJCQkJCQkJCSAgICAgIFwKKwlSRkRJOwkJCQkJCQkJICAgICAgXAorCWIJLjsJCQkJCQkJICAgICAgXAorCQkJCQkJCQkJICAgICAgXAorCS8qIGNvbnRpbnVlIG5vcm1hbCBoYW5kbGluZyBmb3IgYSBjcml0aWNhbCBleGNlcHRpb24uLi4gKi8JICAgICAgXAorMjoJbWZzcHIJcjQsU1BSTl9EQlNSOwkJCQkJCSAgICAgIFwKKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJCQkgICAgICBcCisJRVhDX1hGRVJfVEVNUExBVEUoRGVidWdFeGNlcHRpb24sIDB4MjAwMiwgKE1TUl9LRVJORUwgJiB+KE1TUl9NRXxNU1JfREV8TVNSX0NFKSksIE5PQ09QWSwgZGVidWdfdHJhbnNmZXJfdG9faGFuZGxlciwgcmV0X2Zyb21fZGVidWdfZXhjKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfRVhDRVBUSU9OCQkJCQkJCSAgICAgIFwKKwlTVEFSVF9FWENFUFRJT04oRGVidWcpOwkJCQkJCSAgICAgIFwKKwlDUklUSUNBTF9FWENFUFRJT05fUFJPTE9HOwkJCQkJICAgICAgXAorCQkJCQkJCQkJICAgICAgXAorCS8qCQkJCQkJCQkgICAgICBcCisJICogSWYgdGhlcmUgaXMgYSBzaW5nbGUgc3RlcCBvciBicmFuY2gtdGFrZW4gZXhjZXB0aW9uIGluIGFuCSAgICAgIFwKKwkgKiBleGNlcHRpb24gZW50cnkgc2VxdWVuY2UsIGl0IHdhcyBwcm9iYWJseSBtZWFudCB0byBhcHBseSB0bwkgICAgICBcCisJICogdGhlIGNvZGUgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCAoc2luY2UgZXhjZXB0aW9uIGVudHJ5CSAgICAgIFwKKwkgKiBkb2Vzbid0IHR1cm4gb2ZmIERFIGF1dG9tYXRpY2FsbHkpLiAgV2Ugc2ltdWxhdGUgdGhlIGVmZmVjdAkgICAgICBcCisJICogb2YgdHVybmluZyBvZmYgREUgb24gZW50cnkgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIgYnkgdHVybmluZyAgICAgIFwKKwkgKiBvZmYgREUgaW4gdGhlIENTUlIxIHZhbHVlIGFuZCBjbGVhcmluZyB0aGUgZGVidWcgc3RhdHVzLgkgICAgICBcCisJICovCQkJCQkJCQkgICAgICBcCisJbWZzcHIJcjEwLFNQUk5fREJTUjsJCS8qIGNoZWNrIHNpbmdsZS1zdGVwL2JyYW5jaCB0YWtlbiAqLyAgXAorCWFuZGlzLglyMTAscjEwLERCU1JfSUNAaDsJCQkJCSAgICAgIFwKKwliZXErCTJmOwkJCQkJCQkgICAgICBcCisJCQkJCQkJCQkgICAgICBcCisJbGlzCXIxMCxLRVJORUxCQVNFQGg7CS8qIGNoZWNrIGlmIGV4Y2VwdGlvbiBpbiB2ZWN0b3JzICovICAgXAorCW9yaQlyMTAscjEwLEtFUk5FTEJBU0VAbDsJCQkJCSAgICAgIFwKKwljbXBsdwlyMTIscjEwOwkJCQkJCSAgICAgIFwKKwlibHQrCTJmOwkJCS8qIGFkZHIgYmVsb3cgZXhjZXB0aW9uIHZlY3RvcnMgKi8gICAgXAorCQkJCQkJCQkJICAgICAgXAorCWxpcwlyMTAsRGVidWdAaDsJCQkJCQkgICAgICBcCisJb3JpCXIxMCxyMTAsRGVidWdAbDsJCQkJCSAgICAgIFwKKwljbXBsdwlyMTIscjEwOwkJCQkJCSAgICAgIFwKKwliZ3QrCTJmOwkJCS8qIGFkZHIgYWJvdmUgZXhjZXB0aW9uIHZlY3RvcnMgKi8gICAgXAorCQkJCQkJCQkJICAgICAgXAorCS8qIGhlcmUgaXQgbG9va3MgbGlrZSB3ZSBnb3QgYW4gaW5hcHByb3ByaWF0ZSBkZWJ1ZyBleGNlcHRpb24uICovICAgICBcCisxOglybHdpbm0JcjkscjksMCx+TVNSX0RFOwkvKiBjbGVhciBERSBpbiB0aGUgQ1NSUjEgdmFsdWUgKi8gICAgIFwKKwlsaXMJcjEwLERCU1JfSUNAaDsJCS8qIGNsZWFyIHRoZSBJQyBldmVudCAqLwkgICAgICBcCisJbXRzcHIJU1BSTl9EQlNSLHIxMDsJCQkJCQkgICAgICBcCisJLyogcmVzdG9yZSBzdGF0ZSBhbmQgZ2V0IG91dCAqLwkJCQkJICAgICAgXAorCWx3eglyMTAsX0NDUihyMTEpOwkJCQkJCSAgICAgIFwKKwlsd3oJcjAsR1BSMChyMTEpOwkJCQkJCSAgICAgIFwKKwlsd3oJcjEsR1BSMShyMTEpOwkJCQkJCSAgICAgIFwKKwltdGNyZgkweDgwLHIxMDsJCQkJCQkgICAgICBcCisJbXRzcHIJU1BSTl9DU1JSMCxyMTI7CQkJCQkJICAgICAgXAorCW10c3ByCVNQUk5fQ1NSUjEscjk7CQkJCQkJICAgICAgXAorCWx3eglyOSxHUFI5KHIxMSk7CQkJCQkJICAgICAgXAorCWx3eglyMTIsR1BSMTIocjExKTsJCQkJCQkgICAgICBcCisJbXRzcHIJQ1JJVF9TUFJHLHI4OwkJCQkJCSAgICAgIFwKKwlCT09LRV9MT0FEX0VYQ19MRVZFTF9TVEFDSyhDUklUKTsgLyogcjggcG9pbnRzIHRvIHRoZSBkZWJ1ZyBzdGFjayAqLyAgXAorCWx3eglyMTAsR1BSMTAtSU5UX0ZSQU1FX1NJWkUocjgpOwkJCQkgICAgICBcCisJbHd6CXIxMSxHUFIxMS1JTlRfRlJBTUVfU0laRShyOCk7CQkJCSAgICAgIFwKKwltZnNwcglyOCxDUklUX1NQUkc7CQkJCQkJICAgICAgXAorCQkJCQkJCQkJICAgICAgXAorCXJmY2k7CQkJCQkJCQkgICAgICBcCisJYgkuOwkJCQkJCQkgICAgICBcCisJCQkJCQkJCQkgICAgICBcCisJLyogY29udGludWUgbm9ybWFsIGhhbmRsaW5nIGZvciBhIGNyaXRpY2FsIGV4Y2VwdGlvbi4uLiAqLwkgICAgICBcCisyOgltZnNwcglyNCxTUFJOX0RCU1I7CQkJCQkJICAgICAgXAorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKKwlFWENfWEZFUl9URU1QTEFURShEZWJ1Z0V4Y2VwdGlvbiwgMHgyMDAyLCAoTVNSX0tFUk5FTCAmIH4oTVNSX01FfE1TUl9ERXxNU1JfQ0UpKSwgTk9DT1BZLCBjcml0X3RyYW5zZmVyX3RvX2hhbmRsZXIsIHJldF9mcm9tX2NyaXRfZXhjKQorI2VuZGlmCisKKyNkZWZpbmUgSU5TVFJVQ1RJT05fU1RPUkFHRV9FWENFUFRJT04JCQkJCSAgICAgIFwKKwlTVEFSVF9FWENFUFRJT04oSW5zdHJ1Y3Rpb25TdG9yYWdlKQkJCQkgICAgICBcCisJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0c7CQkJCQkgICAgICBcCisJbWZzcHIJcjUsU1BSTl9FU1I7CQkvKiBHcmFiIHRoZSBFU1IgYW5kIHNhdmUgaXQgKi8JICAgICAgXAorCXN0dwlyNSxfRVNSKHIxMSk7CQkJCQkJICAgICAgXAorCW1yICAgICAgcjQscjEyOyAgICAgICAgICAgICAgICAgLyogUGFzcyBTUlIwIGFzIGFyZzIgKi8JCSAgICAgIFwKKwlsaSAgICAgIHI1LDA7ICAgICAgICAgICAgICAgICAgIC8qIFBhc3MgemVybyBhcyBhcmczICovCQkgICAgICBcCisJRVhDX1hGRVJfRUVfTElURSgweDA0MDAsIGhhbmRsZV9wYWdlX2ZhdWx0KQorCisjZGVmaW5lIEFMSUdOTUVOVF9FWENFUFRJT04JCQkJCQkgICAgICBcCisJU1RBUlRfRVhDRVBUSU9OKEFsaWdubWVudCkJCQkJCSAgICAgIFwKKwlOT1JNQUxfRVhDRVBUSU9OX1BST0xPRzsJCQkJCSAgICAgIFwKKwltZnNwciAgIHI0LFNQUk5fREVBUjsgICAgICAgICAgIC8qIEdyYWIgdGhlIERFQVIgYW5kIHNhdmUgaXQgKi8JICAgICAgXAorCXN0dyAgICAgcjQsX0RFQVIocjExKTsJCQkJCQkgICAgICBcCisJYWRkaSAgICByMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCQkJICAgICAgXAorCUVYQ19YRkVSX0VFKDB4MDYwMCwgYWxpZ25tZW50X2V4Y2VwdGlvbikKKworI2RlZmluZSBQUk9HUkFNX0VYQ0VQVElPTgkJCQkJCSAgICAgIFwKKwlTVEFSVF9FWENFUFRJT04oUHJvZ3JhbSkJCQkJCSAgICAgIFwKKwlOT1JNQUxfRVhDRVBUSU9OX1BST0xPRzsJCQkJCSAgICAgIFwKKwltZnNwcglyNCxTUFJOX0VTUjsJCS8qIEdyYWIgdGhlIEVTUiBhbmQgc2F2ZSBpdCAqLwkgICAgICBcCisJc3R3CXI0LF9FU1IocjExKTsJCQkJCQkgICAgICBcCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCQkJICAgICAgXAorCUVYQ19YRkVSX1NURCgweDA3MDAsIHByb2dyYW1fY2hlY2tfZXhjZXB0aW9uKQorCisjZGVmaW5lIERFQ1JFTUVOVEVSX0VYQ0VQVElPTgkJCQkJCSAgICAgIFwKKwlTVEFSVF9FWENFUFRJT04oRGVjcmVtZW50ZXIpCQkJCQkgICAgICBcCisJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0c7CQkJCQkgICAgICBcCisJbGlzICAgICByMCxUU1JfRElTQGg7ICAgICAgICAgICAvKiBTZXR1cCB0aGUgREVDIGludGVycnVwdCBtYXNrICovICAgIFwKKwltdHNwciAgIFNQUk5fVFNSLHIwOwkJLyogQ2xlYXIgdGhlIERFQyBpbnRlcnJ1cHQgKi8JICAgICAgXAorCWFkZGkgICAgcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKKwlFWENfWEZFUl9MSVRFKDB4MDkwMCwgdGltZXJfaW50ZXJydXB0KQorCisjZGVmaW5lIEZQX1VOQVZBSUxBQkxFX0VYQ0VQVElPTgkJCQkJICAgICAgXAorCVNUQVJUX0VYQ0VQVElPTihGbG9hdGluZ1BvaW50VW5hdmFpbGFibGUpCQkJICAgICAgXAorCU5PUk1BTF9FWENFUFRJT05fUFJPTE9HOwkJCQkJICAgICAgXAorCWJuZQlsb2FkX3VwX2ZwdTsJCS8qIGlmIGZyb20gdXNlciwganVzdCBsb2FkIGl0IHVwICovICAgXAorCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQ7CQkJCSAgICAgIFwKKwlFWENfWEZFUl9FRV9MSVRFKDB4ODAwLCBrZXJuZWxfZnBfdW5hdmFpbGFibGVfZXhjZXB0aW9uKQorCisjZW5kaWYgLyogX19IRUFEX0JPT0tFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDhkNjBmYTkuLmRkODZiYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKLSAqCiAgKiBLZXJuZWwgZXhlY3V0aW9uIGVudHJ5IHBvaW50IGNvZGUuCiAgKgogICogICAgQ29weXJpZ2h0IChjKSAxOTk1LTE5OTYgR2FyeSBUaG9tYXMgPGdkdEBsaW51eHBwYy5vcmc+CkBAIC0zMTYsNiArMzE0LDcgQEAKIAkgKi8KIAlsaXMJcjIsREJDUjBfSURNQGgKIAltdHNwcglTUFJOX0RCQ1IwLHIyCisJaXN5bmMKIAkvKiBjbGVhciBhbnkgcmVzaWR1YWwgZGVidWcgZXZlbnRzICovCiAJbGkJcjIsLTEKIAltdHNwcglTUFJOX0RCU1IscjIKQEAgLTEwMDIsMTIgKzEwMDEsMTUgQEAKIF9HTE9CQUwoYWJvcnQpCiAJbGkJcjEzLDAKICAgICAgICAgbXRzcHIgICBTUFJOX0RCQ1IwLHIxMwkJLyogZGlzYWJsZSBhbGwgZGVidWcgZXZlbnRzICovCisJaXN5bmMKIAltZm1zcglyMTMKIAlvcmkJcjEzLHIxMyxNU1JfREVAbAkvKiBFbmFibGUgRGVidWcgRXZlbnRzICovCiAJbXRtc3IJcjEzCisJaXN5bmMKICAgICAgICAgbWZzcHIgICByMTMsU1BSTl9EQkNSMAogICAgICAgICBsaXMJcjEzLChEQkNSMF9JRE18REJDUjBfUlNUX0NISVApQGgKICAgICAgICAgbXRzcHIgICBTUFJOX0RCQ1IwLHIxMworCWlzeW5jCiAKIF9HTE9CQUwoc2V0X2NvbnRleHQpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tYXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tYXAuYwppbmRleCA2MTYwYzhkLi5mZDgyMTRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbWFwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21hcC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjNjQva2VybmVsL2lvbWFwLmMKLSAqCiAgKiBwcGM2NCAiaW9tYXAiIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi4KICAqCiAgKiAoQykgQ29weXJpZ2h0IDIwMDQgTGludXMgVG9ydmFsZHMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9tbXUuYwppbmRleCA5NDZmMzIxLi5kOWE3ZmRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb21tdS5jCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjNjQva2VybmVsL2lvbW11LmMKICAqIENvcHlyaWdodCAoQykgMjAwMSBNaWtlIENvcnJpZ2FuICYgRGF2ZSBFbmdlYnJldHNlbiwgSUJNIENvcnBvcmF0aW9uCiAgKiAKICAqIFJld3JpdGUsIGNsZWFudXAsIG5ldyBhbGxvY2F0aW9uIHNjaGVtZXMsIHZpcnR1YWwgbWVyZ2luZzogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCBkMWZmZmNlLi43NzFhNTljIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL2tlcm5lbC9pcnEuYwotICoKICAqICBEZXJpdmVkIGZyb20gYXJjaC9pMzg2L2tlcm5lbC9pcnEuYwogICogICAgQ29weXJpZ2h0IChDKSAxOTkyIExpbnVzIFRvcnZhbGRzCiAgKiAgQWRhcHRlZCBmcm9tIGFyY2gvaTM4NiBieSBHYXJ5IFRob21hcwpAQCAtMTM3LDkgKzEzNSw4IEBACiAjaWZkZWYgQ09ORklHX1RBVV9JTlQKIAkJaWYgKHRhdV9pbml0aWFsaXplZCl7CiAJCQlzZXFfcHV0cyhwLCAiVEFVOiAiKTsKLQkJCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCi0JCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOworCQkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOwogCQkJc2VxX3B1dHMocCwgIiAgUG93ZXJQQyAgICAgICAgICAgICBUaGVybWFsIEFzc2lzdCAoY3B1IHRlbXApXG4iKTsKIAkJfQogI2VuZGlmCkBAIC0zNzEsNiArMzY4LDcgQEAKIAlyZXR1cm4gTk9fSVJROwogCiB9CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKICNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCiBzdHJ1Y3QgdGhyZWFkX2luZm8gKnNvZnRpcnFfY3R4W05SX0NQVVNdOwpAQCAtMzk0LDEwICszOTIsMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19zb2Z0aXJxX29uc3RhY2sodm9pZCkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnRwLCAqaXJxdHA7CisKKwljdXJ0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwlpcnF0cCA9IHNvZnRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJaXJxdHAtPnRhc2sgPSBjdXJ0cC0+dGFzazsKKwljYWxsX2RvX3NvZnRpcnEoaXJxdHApOworCWlycXRwLT50YXNrID0gTlVMTDsKK30KKworI2Vsc2UKKyNkZWZpbmUgZG9fc29mdGlycV9vbnN0YWNrKCkJX19kb19zb2Z0aXJxKCkKKyNlbmRpZiAvKiBDT05GSUdfSVJRU1RBQ0tTICovCisKIHZvaWQgZG9fc29mdGlycSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHRocmVhZF9pbmZvICpjdXJ0cCwgKmlycXRwOwogCiAJaWYgKGluX2ludGVycnVwdCgpKQogCQlyZXR1cm47CkBAIC00MDUsMTkgKzQxNywxOCBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCWlmIChsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSkgewotCQljdXJ0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKLQkJaXJxdHAgPSBzb2Z0aXJxX2N0eFtzbXBfcHJvY2Vzc29yX2lkKCldOwotCQlpcnF0cC0+dGFzayA9IGN1cnRwLT50YXNrOwotCQljYWxsX2RvX3NvZnRpcnEoaXJxdHApOwotCQlpcnF0cC0+dGFzayA9IE5VTEw7CisJCWFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOworCQlsb2NhbF9iaF9kaXNhYmxlKCk7CisJCWRvX3NvZnRpcnFfb25zdGFjaygpOworCQlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsKKwkJX19sb2NhbF9iaF9lbmFibGUoKTsKIAl9CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGRvX3NvZnRpcnEpOwogCi0jZW5kaWYgLyogQ09ORklHX0lSUVNUQUNLUyAqLwotCisjaWZkZWYgQ09ORklHX1BQQzY0CiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ub2lycWRpc3RyaWIoY2hhciAqc3RyKQogewogCWRpc3RyaWJ1dGVfaXJxcyA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGNmYWI0ODUuLmNiMWZlNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xLDYgKzEsNSBAQAogLyoKICAqICBLZXJuZWwgUHJvYmVzIChLUHJvYmVzKQotICogIGFyY2gvcHBjNjQva2VybmVsL2twcm9iZXMuYwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtODIsOSArODEsOSBAQAogCiB2b2lkIF9fa3Byb2JlcyBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKLQlkb3duKCZrcHJvYmVfbXV0ZXgpOworCW11dGV4X2xvY2soJmtwcm9iZV9tdXRleCk7CiAJZnJlZV9pbnNuX3Nsb3QocC0+YWluc24uaW5zbik7Ci0JdXAoJmtwcm9iZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCAxYWU5NmE4Li5lNzg5ZmVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJY29uc3QgY2hhciAqc3lzdGVtX2lkID0gIiI7CiAJdW5zaWduZWQgaW50ICpscF9pbmRleF9wdHIsIGxwX2luZGV4ID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJ0YXNfbm9kZTsKLQlpbnQgKmxyZHJwOworCWludCAqbHJkcnAgPSBOVUxMOwogCiAJcm9vdGRuID0gZmluZF9wYXRoX2RldmljZSgiLyIpOwogCWlmIChyb290ZG4pIHsKQEAgLTM2Miw3ICszNjIsOSBAQAogCXNlcV9wcmludGYobSwgInBhcnRpdGlvbl9pZD0lZFxuIiwgKGludClscF9pbmRleCk7CiAKIAlydGFzX25vZGUgPSBmaW5kX3BhdGhfZGV2aWNlKCIvcnRhcyIpOwotCWxyZHJwID0gKGludCAqKWdldF9wcm9wZXJ0eShydGFzX25vZGUsICJpYm0sbHJkci1jYXBhY2l0eSIsIE5VTEwpOworCWlmIChydGFzX25vZGUpCisJCWxyZHJwID0gKGludCAqKWdldF9wcm9wZXJ0eShydGFzX25vZGUsICJpYm0sbHJkci1jYXBhY2l0eSIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKIAogCWlmIChscmRycCA9PSBOVUxMKSB7CiAJCXBhcnRpdGlvbl9wb3RlbnRpYWxfcHJvY2Vzc29ycyA9IHZkc29fZGF0YS0+cHJvY2Vzc29yQ291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCmluZGV4IGQ2NDMxNDQuLmVlMTY2YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKLSNkZWZpbmUgSEFTSF9HUk9VUF9TSVpFIDB4ODAJLyogc2l6ZSBvZiBlYWNoIGhhc2ggZ3JvdXAsIGFzbS9tbXUuaCAqLwotCiBpbnQgZGVmYXVsdF9tYWNoaW5lX2tleGVjX3ByZXBhcmUoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCiB7CiAJaW50IGk7CkBAIC02MSw3ICs1OSw3IEBACiAJICovCiAJaWYgKGh0YWJfYWRkcmVzcykgewogCQlsb3cgPSBfX3BhKGh0YWJfYWRkcmVzcyk7Ci0JCWhpZ2ggPSBsb3cgKyAoaHRhYl9oYXNoX21hc2sgKyAxKSAqIEhBU0hfR1JPVVBfU0laRTsKKwkJaGlnaCA9IGxvdyArIGh0YWJfc2l6ZV9ieXRlczsKIAogCQlmb3IgKGkgPSAwOyBpIDwgaW1hZ2UtPm5yX3NlZ21lbnRzOyBpKyspIHsKIAkJCWJlZ2luID0gaW1hZ2UtPnNlZ21lbnRbaV0ubWVtOwpAQCAtMjk0LDcgKzI5Miw3IEBACiB9CiAKIC8qIFZhbHVlcyB3ZSBuZWVkIHRvIGV4cG9ydCB0byB0aGUgc2Vjb25kIGtlcm5lbCB2aWEgdGhlIGRldmljZSB0cmVlLiAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaHRhYl9iYXNlLCBodGFiX3NpemUsIGtlcm5lbF9lbmQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBodGFiX2Jhc2UsIGtlcm5lbF9lbmQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgaHRhYl9iYXNlX3Byb3AgPSB7CiAJLm5hbWUgPSAibGludXgsaHRhYi1iYXNlIiwKQEAgLTMwNSw3ICszMDMsNyBAQAogc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSBodGFiX3NpemVfcHJvcCA9IHsKIAkubmFtZSA9ICJsaW51eCxodGFiLXNpemUiLAogCS5sZW5ndGggPSBzaXplb2YodW5zaWduZWQgbG9uZyksCi0JLnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKikmaHRhYl9zaXplLAorCS52YWx1ZSA9ICh1bnNpZ25lZCBjaGFyICopJmh0YWJfc2l6ZV9ieXRlcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvcGVydHkga2VybmVsX2VuZF9wcm9wID0gewpAQCAtMzMxLDggKzMyOSw2IEBACiAKIAlodGFiX2Jhc2UgPSBfX3BhKGh0YWJfYWRkcmVzcyk7CiAJcHJvbV9hZGRfcHJvcGVydHkobm9kZSwgJmh0YWJfYmFzZV9wcm9wKTsKLQotCWh0YWJfc2l6ZSA9IDFVTCA8PCBwcGM2NF9wZnRfc2l6ZTsKIAlwcm9tX2FkZF9wcm9wZXJ0eShub2RlLCAmaHRhYl9zaXplX3Byb3ApOwogCiAgb3V0OgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMKaW5kZXggMjJkODNkNC4uOWZlZWVlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCkBAIC0xNDcsMTUgKzE0NywxMiBAQAogCiBpbnQgb2ZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydikKIHsKLQlpbnQgY291bnQgPSAwOwotCiAJLyogaW5pdGlhbGl6ZSBjb21tb24gZHJpdmVyIGZpZWxkcyAqLwogCWRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7CiAJZHJ2LT5kcml2ZXIuYnVzID0gJm9mX3BsYXRmb3JtX2J1c190eXBlOwogCiAJLyogcmVnaXN0ZXIgd2l0aCBjb3JlICovCi0JY291bnQgPSBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKLQlyZXR1cm4gY291bnQgPyBjb3VudCA6IDE7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogfQogCiB2b2lkIG9mX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IGMzNjc1MjAuLmJhOTJiYWI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKQEAgLTU4OSw3ICs1ODksNiBAQAogI2VuZGlmIC8qIENPTkZJR19QUENfTVVMVElQTEFURk9STSAqLwogCWlmIChtb2RlID09IFBDSV9QUk9CRV9OT1JNQUwpCiAJCWhvc2UtPmxhc3RfYnVzbm8gPSBidXMtPnN1Ym9yZGluYXRlID0gcGNpX3NjYW5fY2hpbGRfYnVzKGJ1cyk7Ci0JcGNpX2J1c19hZGRfZGV2aWNlcyhidXMpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKQEAgLTYwOCw4ICs2MDcsMTAgQEAKIAlwcmludGsoIlBDSTogUHJvYmluZyBQQ0kgaGFyZHdhcmVcbiIpOwogCiAJLyogU2NhbiBhbGwgb2YgdGhlIHJlY29yZGVkIFBDSSBjb250cm9sbGVycy4gICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvc2UsIHRtcCwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob3NlLCB0bXAsICZob3NlX2xpc3QsIGxpc3Rfbm9kZSkgewogCQlzY2FuX3BoYihob3NlKTsKKwkJcGNpX2J1c19hZGRfZGV2aWNlcyhob3NlLT5idXMpOworCX0KIAogI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIAlpZiAocGNpX3Byb2JlX29ubHkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfaW9tbXUuYwppbmRleCBiZGYxNWRiLi5jMzM2ZjNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTEsNSArMSw0IEBACiAvKgotICogYXJjaC9wcGM2NC9rZXJuZWwvcGNpX2lvbW11LmMKICAqIENvcHlyaWdodCAoQykgMjAwMSBNaWtlIENvcnJpZ2FuICYgRGF2ZSBFbmdlYnJldHNlbiwgSUJNIENvcnBvcmF0aW9uCiAgKgogICogUmV3cml0ZSwgY2xlYW51cCwgbmV3IGFsbG9jYXRpb24gc2NoZW1lczoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IGQ5YTQ1OWMuLmRmYTUzOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtNTcsNyArNTcsNiBAQAogZXh0ZXJuIHZvaWQgYWxpZ25tZW50X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBwcm9ncmFtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBzaW5nbGVfc3RlcF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGludCBwbWFjX25ld3dvcmxkOwogZXh0ZXJuIGludCBzeXNfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogRVhQT1JUX1NZTUJPTChjbGVhcl9wYWdlcyk7CkBAIC03OSwxNSArNzgsOCBAQAogRVhQT1JUX1NZTUJPTChzdHJjcHkpOwogRVhQT1JUX1NZTUJPTChzdHJuY3B5KTsKIEVYUE9SVF9TWU1CT0woc3RyY2F0KTsKLUVYUE9SVF9TWU1CT0woc3RybmNhdCk7Ci1FWFBPUlRfU1lNQk9MKHN0cmNocik7Ci1FWFBPUlRfU1lNQk9MKHN0cnJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJwYnJrKTsKLUVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKLUVYUE9SVF9TWU1CT0woc3Rybmxlbik7CiBFWFBPUlRfU1lNQk9MKHN0cmNtcCk7Ci1FWFBPUlRfU1lNQk9MKHN0cm5jbXApOwogRVhQT1JUX1NZTUJPTChzdHJjYXNlY21wKTsKIAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOwpAQCAtMTE3LDE1ICsxMDksNiBAQAogRVhQT1JUX1NZTUJPTChfb3V0c3dfbnMpOwogRVhQT1JUX1NZTUJPTChfaW5zbF9ucyk7CiBFWFBPUlRfU1lNQk9MKF9vdXRzbF9ucyk7Ci1FWFBPUlRfU1lNQk9MKGlvcmVtYXApOwotI2lmZGVmIENPTkZJR180NHgKLUVYUE9SVF9TWU1CT0woaW9yZW1hcDY0KTsKLSNlbmRpZgotRVhQT1JUX1NZTUJPTChfX2lvcmVtYXApOwotRVhQT1JUX1NZTUJPTChpb3VubWFwKTsKLSNpZmRlZiBDT05GSUdfUFBDMzIKLUVYUE9SVF9TWU1CT0woaW9yZW1hcF9ib3QpOwkvKiBha2EgVk1BTExPQ19FTkQgKi8KLSNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIChkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfTU9EVUxFKSkKIEVYUE9SVF9TWU1CT0wocHBjX2lkZV9tZCk7CkBAIC0xNjgsNyArMTUxLDYgQEAKIEVYUE9SVF9TWU1CT0woZmx1c2hfZGNhY2hlX3JhbmdlKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLUVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb24pOwogI2lmZGVmIENPTkZJR19QUEMzMgogRVhQT1JUX1NZTUJPTChzbXBfaHdfaW5kZXgpOwogI2VuZGlmCkBAIC0xODUsOSArMTY3LDYgQEAKIEVYUE9SVF9TWU1CT0woY3VkYV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woY3VkYV9wb2xsKTsKICNlbmRpZiAvKiBDT05GSUdfQURCX0NVREEgKi8KLSNpZmRlZiBDT05GSUdfUFBDX1BNQUMKLUVYUE9SVF9TWU1CT0woc3lzX2N0cmxlcik7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfVlQKIEVYUE9SVF9TWU1CT0woa2RfbWtzb3VuZCk7CiAjZW5kaWYKQEAgLTIwNSw3ICsxODQsNiBAQAogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKLUVYUE9SVF9TWU1CT0wobWVtc2Nhbik7CiBFWFBPUlRfU1lNQk9MKG1lbWNtcCk7CiBFWFBPUlRfU1lNQk9MKG1lbWNocik7CiAKQEAgLTIxNCw3ICsxOTIsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFBDMzIKLUVYUE9SVF9TWU1CT0woX19kZWxheSk7CiBFWFBPUlRfU1lNQk9MKHRpbWVyX2ludGVycnVwdCk7CiBFWFBPUlRfU1lNQk9MKGlycV9kZXNjKTsKIEVYUE9SVF9TWU1CT0wodGJfdGlja3NfcGVyX2ppZmZ5KTsKQEAgLTIyMiwxMCArMTk5LDYgQEAKIEVYUE9SVF9TWU1CT0woY2FjaGVhYmxlX21lbWNweSk7CiAjZW5kaWYKIAotRVhQT1JUX1NZTUJPTChfX3VwKTsKLUVYUE9SVF9TWU1CT0woX19kb3duKTsKLUVYUE9SVF9TWU1CT0woX19kb3duX2ludGVycnVwdGlibGUpOwotCiAjaWZkZWYgIENPTkZJR184eHgKIEVYUE9SVF9TWU1CT0woY3BtX2luc3RhbGxfaGFuZGxlcik7CiBFWFBPUlRfU1lNQk9MKGNwbV9mcmVlX2hhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCA1NzcwMzk5Li4xNzcwYTA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGMva2VybmVsL3Byb2Nlc3MuYwotICoKICAqICBEZXJpdmVkIGZyb20gImFyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jIgogICogICAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwogICoKQEAgLTQ3LDkgKzQ1LDkgQEAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaWZkZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfZ2V0X1NQKHZvaWQpOwpAQCAtMzMwLDYgKzMyOCwxMSBAQAogI2VuZGlmCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsKKwlhY2NvdW50X3Byb2Nlc3NfdnRpbWUoY3VycmVudCk7CisJY2FsY3VsYXRlX3N0ZWFsX3RpbWUoKTsKKwogCWxhc3QgPSBfc3dpdGNoKG9sZF90aHJlYWQsIG5ld190aHJlYWQpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtODg4LDMgKzg5MSwzNSBAQAogCXNob3dfc3RhY2soY3VycmVudCwgTlVMTCk7CiB9CiBFWFBPUlRfU1lNQk9MKGR1bXBfc3RhY2spOworCisjaWZkZWYgQ09ORklHX1BQQzY0Cit2b2lkIHBwYzY0X3J1bmxhdGNoX29uKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjdHJsOworCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NUUkwpICYmICF0ZXN0X3RocmVhZF9mbGFnKFRJRl9SVU5MQVRDSCkpIHsKKwkJSE1UX21lZGl1bSgpOworCisJCWN0cmwgPSBtZnNwcihTUFJOX0NUUkxGKTsKKwkJY3RybCB8PSBDVFJMX1JVTkxBVENIOworCQltdHNwcihTUFJOX0NUUkxULCBjdHJsKTsKKworCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1JVTkxBVENIKTsKKwl9Cit9CisKK3ZvaWQgcHBjNjRfcnVubGF0Y2hfb2ZmKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjdHJsOworCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NUUkwpICYmIHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JVTkxBVENIKSkgeworCQlITVRfbWVkaXVtKCk7CisKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JVTkxBVENIKTsKKworCQljdHJsID0gbWZzcHIoU1BSTl9DVFJMRik7CisJCWN0cmwgJj0gfkNUUkxfUlVOTEFUQ0g7CisJCW10c3ByKFNQUk5fQ1RSTFQsIGN0cmwpOworCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCAyOTQ4MzJhLi5kNjNjZDU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtODE2LDggKzgxNiw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgbWVtLCBzaXplOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqKmFsbG5leHRwID0gJmFsbG5vZGVzOwotCWNoYXIgKnAgPSBOVUxMOwotCWludCBsID0gMDsKIAogCURCRygiIC0+IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpXG4iKTsKIApAQCAtODMxLDEwICs4MjksNiBAQAogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZXhwYW5kZWQgZGV2aWNlIHRyZWUgKi8KIAltZW0gPSBsbWJfYWxsb2Moc2l6ZSArIDQsIF9fYWxpZ25vZl9fKHN0cnVjdCBkZXZpY2Vfbm9kZSkpOwotCWlmICghbWVtKSB7Ci0JCURCRygiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IHdpdGggbG1iX2FsbG9jKCkhXG4iKTsKLQkJcGFuaWMoIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSB3aXRoIGxtYl9hbGxvYygpIVxuIik7Ci0JfQogCW1lbSA9ICh1bnNpZ25lZCBsb25nKSBfX3ZhKG1lbSk7CiAKIAkoKHUzMiAqKW1lbSlbc2l6ZSAvIDRdID0gMHhkZWFkYmVlZjsKQEAgLTg1NywxOSArODUxLDYgQEAKIAlpZiAob2ZfY2hvc2VuID09IE5VTEwpCiAJCW9mX2Nob3NlbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvY2hvc2VuQDAiKTsKIAotCS8qIFJldHJlaXZlIGNvbW1hbmQgbGluZSAqLwotCWlmIChvZl9jaG9zZW4gIT0gTlVMTCkgewotCQlwID0gKGNoYXIgKilnZXRfcHJvcGVydHkob2ZfY2hvc2VuLCAiYm9vdGFyZ3MiLCAmbCk7Ci0JCWlmIChwICE9IE5VTEwgJiYgbCA+IDApCi0JCQlzdHJsY3B5KGNtZF9saW5lLCBwLCBtaW4obCwgQ09NTUFORF9MSU5FX1NJWkUpKTsKLQl9Ci0jaWZkZWYgQ09ORklHX0NNRExJTkUKLQlpZiAobCA9PSAwIHx8IChsID09IDEgJiYgKCpwKSA9PSAwKSkKLQkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKLSNlbmRpZiAvKiBDT05GSUdfQ01ETElORSAqLwotCi0JREJHKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7Ci0KIAlEQkcoIiA8LSB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUoKVxuIik7CiB9CiAKQEAgLTk0MCw2ICs5MjEsOCBAQAogewogCXUzMiAqcHJvcDsKIAl1bnNpZ25lZCBsb25nICpscHJvcDsKKwl1bnNpZ25lZCBsb25nIGw7CisJY2hhciAqcDsKIAogCURCRygic2VhcmNoIFwiY2hvc2VuXCIsIGRlcHRoOiAlZCwgdW5hbWU6ICVzXG4iLCBkZXB0aCwgdW5hbWUpOwogCkBAIC0xMDA0LDYgKzk4Nyw0MSBAQAogICAgICAgICAgICAgICAgY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaGtfcmVzLnN0YXJ0ICsgKmxwcm9wIC0gMTsKICNlbmRpZgogCisJLyogUmV0cmVpdmUgY29tbWFuZCBsaW5lICovCisgCXAgPSBvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJib290YXJncyIsICZsKTsKKwlpZiAocCAhPSBOVUxMICYmIGwgPiAwKQorCQlzdHJsY3B5KGNtZF9saW5lLCBwLCBtaW4oKGludClsLCBDT01NQU5EX0xJTkVfU0laRSkpOworCisjaWZkZWYgQ09ORklHX0NNRExJTkUKKwlpZiAobCA9PSAwIHx8IChsID09IDEgJiYgKCpwKSA9PSAwKSkKKwkJc3RybGNweShjbWRfbGluZSwgQ09ORklHX0NNRExJTkUsIENPTU1BTkRfTElORV9TSVpFKTsKKyNlbmRpZiAvKiBDT05GSUdfQ01ETElORSAqLworCisJREJHKCJDb21tYW5kIGxpbmUgaXM6ICVzXG4iLCBjbWRfbGluZSk7CisKKwlpZiAoc3Ryc3RyKGNtZF9saW5lLCAibWVtPSIpKSB7CisJCWNoYXIgKnAsICpxOworCQl1bnNpZ25lZCBsb25nIG1heG1lbSA9IDA7CisKKwkJZm9yIChxID0gY21kX2xpbmU7IChwID0gc3Ryc3RyKHEsICJtZW09IikpICE9IDA7ICkgeworCQkJcSA9IHAgKyA0OworCQkJaWYgKHAgPiBjbWRfbGluZSAmJiBwWy0xXSAhPSAnICcpCisJCQkJY29udGludWU7CisJCQltYXhtZW0gPSBzaW1wbGVfc3RydG91bChxLCAmcSwgMCk7CisJCQlpZiAoKnEgPT0gJ2snIHx8ICpxID09ICdLJykgeworCQkJCW1heG1lbSA8PD0gMTA7CisJCQkJKytxOworCQkJfSBlbHNlIGlmICgqcSA9PSAnbScgfHwgKnEgPT0gJ00nKSB7CisJCQkJbWF4bWVtIDw8PSAyMDsKKwkJCQkrK3E7CisJCQl9IGVsc2UgaWYgKCpxID09ICdnJyB8fCAqcSA9PSAnRycpIHsKKwkJCQltYXhtZW0gPDw9IDMwOworCQkJCSsrcTsKKwkJCX0KKwkJfQorCQltZW1vcnlfbGltaXQgPSBtYXhtZW07CisJfQorCiAJLyogYnJlYWsgbm93ICovCiAJcmV0dXJuIDE7CiB9CkBAIC0xMTI0LDcgKzExNDIsNyBAQAogCQkJc2l6ZV8zMiA9ICoocmVzZXJ2ZV9tYXBfMzIrKyk7CiAJCQlpZiAoc2l6ZV8zMiA9PSAwKQogCQkJCWJyZWFrOwotCQkJREJHKCJyZXNlcnZpbmc6ICVseCAtPiAlbHhcbiIsIGJhc2VfMzIsIHNpemVfMzIpOworCQkJREJHKCJyZXNlcnZpbmc6ICV4IC0+ICV4XG4iLCBiYXNlXzMyLCBzaXplXzMyKTsKIAkJCWxtYl9yZXNlcnZlKGJhc2VfMzIsIHNpemVfMzIpOwogCQl9CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IGVjNzE1M2YuLjgxM2MyY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtMjA1LDE0ICsyMDUsNiBAQAogCiAjZGVmaW5lIE1BWF9DUFVfVEhSRUFEUyAyCiAKLS8qIFRPIEdPICovCi0jaWZkZWYgQ09ORklHX0hNVAotc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgcGlyOwotCXVuc2lnbmVkIGludCB0aHJlYWRpZDsKLX0gaG10X3RocmVhZF9kYXRhW05SX0NQVVNdOwotI2VuZGlmIC8qIENPTkZJR19ITVQgKi8KLQogLyoKICAqIEVycm9yIHJlc3VsdHMgLi4uIHNvbWUgT0YgY2FsbHMgd2lsbCByZXR1cm4gIi0xIiBvbiBlcnJvciwgc29tZQogICogd2lsbCByZXR1cm4gMCwgc29tZSB3aWxsIHJldHVybiBlaXRoZXIuIFRvIHNpbXBsaWZ5LCBoZXJlIGFyZQpAQCAtOTg2LDcgKzk3OCw3IEBACiAJCQlpZiAoc2l6ZSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCQkJcHJvbV9kZWJ1ZygiICAgICV4ICV4XG4iLCBiYXNlLCBzaXplKTsKLQkJCWlmIChiYXNlID09IDApCisJCQlpZiAoYmFzZSA9PSAwICYmIChSRUxPQyhvZl9wbGF0Zm9ybSkgJiBQTEFURk9STV9MUEFSKSkKIAkJCQlSRUxPQyhybW9fdG9wKSA9IHNpemU7CiAJCQlpZiAoKGJhc2UgKyBzaXplKSA+IFJFTE9DKHJhbV90b3ApKQogCQkJCVJFTE9DKHJhbV90b3ApID0gYmFzZSArIHNpemU7CkBAIC0xMzE5LDEwICsxMzExLDYgQEAKIAkgKi8KIAkqc3Bpbmxvb3AgPSAwOwogCi0jaWZkZWYgQ09ORklHX0hNVAotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCi0JCVJFTE9DKGhtdF90aHJlYWRfZGF0YSlbaV0ucGlyID0gMHhkZWFkYmVlZjsKLSNlbmRpZgogCS8qIGxvb2sgZm9yIGNwdXMgKi8KIAlmb3IgKG5vZGUgPSAwOyBwcm9tX25leHRfbm9kZSgmbm9kZSk7ICkgewogCQl0eXBlWzBdID0gMDsKQEAgLTEzODksMzIgKzEzNzcsNiBAQAogCQkvKiBSZXNlcnZlIGNwdSAjcyBmb3Igc2Vjb25kYXJ5IHRocmVhZHMuICAgVGhleSBzdGFydCBsYXRlci4gKi8KIAkJY3B1aWQgKz0gY3B1X3RocmVhZHM7CiAJfQotI2lmZGVmIENPTkZJR19ITVQKLQkvKiBPbmx5IGVuYWJsZSBITVQgb24gcHJvY2Vzc29ycyB0aGF0IHByb3ZpZGUgc3VwcG9ydC4gKi8KLQlpZiAoX19pc19wcm9jZXNzb3IoUFZfUFVMU0FSKSB8fCAKLQkgICAgX19pc19wcm9jZXNzb3IoUFZfSUNFU1RBUikgfHwKLQkgICAgX19pc19wcm9jZXNzb3IoUFZfU1NUQVIpKSB7Ci0JCXByb21fcHJpbnRmKCIgICAgc3RhcnRpbmcgc2Vjb25kYXJ5IHRocmVhZHNcbiIpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpICs9IDIpIHsKLQkJCWlmICghY3B1X29ubGluZShpKSkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKGkgPT0gMCkgewotCQkJCXVuc2lnbmVkIGxvbmcgcGlyID0gbWZzcHIoU1BSTl9QSVIpOwotCQkJCWlmIChfX2lzX3Byb2Nlc3NvcihQVl9QVUxTQVIpKSB7Ci0JCQkJCVJFTE9DKGhtdF90aHJlYWRfZGF0YSlbaV0ucGlyID0gCi0JCQkJCQlwaXIgJiAweDFmOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVJFTE9DKGhtdF90aHJlYWRfZGF0YSlbaV0ucGlyID0gCi0JCQkJCQlwaXIgJiAweDNmZjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlwcm9tX3ByaW50ZigiUHJvY2Vzc29yIGlzIG5vdCBITVQgY2FwYWJsZVxuIik7Ci0JfQotI2VuZGlmCiAKIAlpZiAoY3B1aWQgPiBOUl9DUFVTKQogCQlwcm9tX3ByaW50ZigiV0FSTklORzogbWF4aW11bSBDUFVzICgiIF9fc3RyaW5naWZ5KE5SX0NQVVMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS1jb21tb24uaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLWNvbW1vbi5oCmluZGV4IDVjY2JkYmUuLmM0MmE4NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLWNvbW1vbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLWNvbW1vbi5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9hcmNoL3BwYzY0L2tlcm5lbC9wdHJhY2UtY29tbW9uLmgKLSAqCiAgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDIgU3RlcGhlbiBSb3Rod2VsbCwgSUJNIENvcHJvcmF0aW9uCiAgKiAgICBFeHRyYWN0ZWQgZnJvbSBwdHJhY2UuYyBhbmQgcHRyYWNlMzIuYwogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IDQwMDc5M2MuLmJjYjgzNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTYxLDEwICs1NjEsNyBAQAogCQkJCSAgIHJlZ3MtPnJlc3VsdCk7CiAKIAlpZiAoKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JICAgICB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKQotI2VuZGlmCi0JICAgICApCisJICAgICB8fCB0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKIAkgICAgJiYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQogCQlkb19zeXNjYWxsX3RyYWNlKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYwppbmRleCA3YTk1YjhhLi4xZjAzZmIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKQEAgLTEsNSArMSw0IEBACiAvKgotICogICBhcmNoL3BwYzY0L2tlcm5lbC9ydGFzLXByb2MuYwogICogICBDb3B5cmlnaHQgKEMpIDIwMDAgVGlsbWFubiBCaXR0ZXJiZXJnCiAgKiAgICh0aWxtYW5uQGJpdHRlcmJlcmcuZGUpCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXJ0Yy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXJ0Yy5jCmluZGV4IDYzNWQzYjkuLjM0ZDA3M2ZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcnRjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXJ0Yy5jCkBAIC01Miw3ICs1Miw3IEBACiAJCWVycm9yID0gcnRhc19jYWxsKHJ0YXNfdG9rZW4oImdldC10aW1lLW9mLWRheSIpLCAwLCA4LCByZXQpOwogCQlpZiAoZXJyb3IgPT0gUlRBU19DTE9DS19CVVNZIHx8IHJ0YXNfaXNfZXh0ZW5kZWRfYnVzeShlcnJvcikpIHsKIAkJCWlmIChpbl9pbnRlcnJ1cHQoKSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKLQkJCQltZW1zZXQoJnJ0Y190bSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOworCQkJCW1lbXNldChydGNfdG0sIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKTsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJlcnJvcjogcmVhZGluZyBjbG9jayIKIAkJCQkgICAgICAgIiB3b3VsZCBkZWxheSBpbnRlcnJ1cHRcbiIpOwogCQkJCXJldHVybjsJLyogZGVsYXkgbm90IGFsbG93ZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYwppbmRleCA1NTc5ZjY1Li41N2I1MzlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX3BjaS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjNjQva2VybmVsL3J0YXNfcGNpLmMKLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2ZSBFbmdlYnJldHNlbiwgSUJNIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBhdS5pYm0uY29tPiwgSUJNCiAgKgpAQCAtMjgwLDggKzI3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNldHVwX3BoYihzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYikKK2ludCBfX2RldmluaXQgc2V0dXBfcGhiKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYikKIHsKIAlpZiAoaXNfcHl0aG9uKGRldikpCiAJCXB5dGhvbl9jb3VudGVybWVhc3VyZXMoZGV2KTsKQEAgLTM1OSwyNyArMzU2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHBjaV9jb250cm9sbGVyICogX19kZXZpbml0IGluaXRfcGhiX2R5bmFtaWMoc3RydWN0IGRldmljZV9ub2RlICpkbikKLXsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYjsKLQlpbnQgcHJpbWFyeTsKLQotCXByaW1hcnkgPSBsaXN0X2VtcHR5KCZob3NlX2xpc3QpOwotCXBoYiA9IHBjaWJpb3NfYWxsb2NfY29udHJvbGxlcihkbik7Ci0JaWYgKCFwaGIpCi0JCXJldHVybiBOVUxMOwotCXNldHVwX3BoYihkbiwgcGhiKTsKLQlwY2lfcHJvY2Vzc19icmlkZ2VfT0ZfcmFuZ2VzKHBoYiwgZG4sIHByaW1hcnkpOwotCi0JcGNpX3NldHVwX3BoYl9pb19keW5hbWljKHBoYiwgcHJpbWFyeSk7Ci0KLQlwY2lfZGV2c19waGJfaW5pdF9keW5hbWljKHBoYik7Ci0Jc2Nhbl9waGIocGhiKTsKLQotCXJldHVybiBwaGI7Ci19Ci1FWFBPUlRfU1lNQk9MKGluaXRfcGhiX2R5bmFtaWMpOwotCiAvKiBSUEEtc3BlY2lmaWMgYml0cyBmb3IgcmVtb3ZpbmcgUEhCcyAqLwogaW50IHBjaWJpb3NfcmVtb3ZlX3Jvb3RfYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggYmUxMjA0MS4uYzFkNjJiZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0xNjIsOSArMTYyLDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQogCQl1bnNpZ25lZCBsb25nIGJvZ29zdW0gPSAwOwogCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsraSkKLQkJCWlmIChjcHVfb25saW5lKGkpKQotCQkJCWJvZ29zdW0gKz0gbG9vcHNfcGVyX2ppZmZ5OworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCisJCQlib2dvc3VtICs9IGxvb3BzX3Blcl9qaWZmeTsKIAkJc2VxX3ByaW50ZihtLCAidG90YWwgYm9nb21pcHNcdDogJWx1LiUwMmx1XG4iLAogCQkJICAgYm9nb3N1bS8oNTAwMDAwL0haKSwgYm9nb3N1bS8oNTAwMC9IWikgJSAxMDApOwogI2VuZGlmIC8qIENPTkZJR19TTVAgJiYgQ09ORklHX1BQQzMyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggZGI3MmE5Mi4uZGMyNzcwZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwpAQCAtMjcyLDkgKzI3Miw4IEBACiAJaWYgKCBwcGNfbWQucHJvZ3Jlc3MgKSBwcGNfbWQucHJvZ3Jlc3MoIiAgICAgICAgICAgICAiLCAweGZmZmYpOwogCiAJLyogcmVnaXN0ZXIgQ1BVIGRldmljZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQotCQlpZiAoY3B1X3Bvc3NpYmxlKGkpKQotCQkJcmVnaXN0ZXJfY3B1KCZjcHVfZGV2aWNlc1tpXSwgaSwgTlVMTCk7CisJZm9yX2VhY2hfY3B1KGkpCisJCXJlZ2lzdGVyX2NwdSgmY3B1X2RldmljZXNbaV0sIGksIE5VTEwpOwogCiAJLyogY2FsbCBwbGF0Zm9ybSBpbml0ICovCiAJaWYgKHBwY19tZC5pbml0ICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCBhNzE3ZGZmLi4yZjNmZGFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC0zMTEsOCArMzExLDYgQEAKIAogCURCRygiIDwtIHNtcF9yZWxlYXNlX2NwdXMoKVxuIik7CiB9Ci0jZWxzZQotI2RlZmluZSBzbXBfcmVsZWFzZV9jcHVzKCkKICNlbmRpZiAvKiBDT05GSUdfU01QIHx8IENPTkZJR19LRVhFQyAqLwogCiAvKgpAQCAtNDczLDEwICs0NzEsMTIgQEAKIAljaGVja19zbXRfZW5hYmxlZCgpOwogCXNtcF9zZXR1cF9jcHVfbWFwcygpOwogCisjaWZkZWYgQ09ORklHX1NNUAogCS8qIFJlbGVhc2Ugc2Vjb25kYXJ5IGNwdXMgb3V0IG9mIHRoZWlyIHNwaW5sb29wcyBhdCAweDYwIG5vdyB0aGF0CiAJICogd2UgY2FuIG1hcCBwaHlzaWNhbCAtPiBsb2dpY2FsIENQVSBpZHMKIAkgKi8KIAlzbXBfcmVsZWFzZV9jcHVzKCk7CisjZW5kaWYKIAogCXByaW50aygiU3RhcnRpbmcgTGludXggUFBDNjQgJXNcbiIsIHN5c3RlbV91dHNuYW1lLnZlcnNpb24pOwogCkBAIC00OTcsOCArNDk3LDYgQEAKICNlbmRpZgogCXByaW50aygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCi0JbW1faW5pdF9wcGM2NCgpOwotCiAJREJHKCIgPC0gc2V0dXBfc3lzdGVtKClcbiIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCBiZDgzN2I1ZC4uZDdhNGU4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC0xNTEsMTAgKzE1MSw3IEBACiAJZWxmX2dyZWdfdDY0ICpncmVncyA9IChlbGZfZ3JlZ190NjQgKilyZWdzOwogCWludCBpOwogCi0JaWYgKCFGVUxMX1JFR1MocmVncykpIHsKLQkJc2V0X3RocmVhZF9mbGFnKFRJRl9TQVZFX05WR1BSUyk7Ci0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+bnZncHJzX2ZyYW1lID0gZnJhbWUtPm1jX2dyZWdzOwotCX0KKwlXQVJOX09OKCFGVUxMX1JFR1MocmVncykpOwogCiAJZm9yIChpID0gMDsgaSA8PSBQVF9SRVNVTFQ7IGkgKyspIHsKIAkJaWYgKGkgPT0gMTQgJiYgIUZVTExfUkVHUyhyZWdzKSkKQEAgLTIxNSwxNSArMjEyLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNhdmVfZ2VuZXJhbF9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQlzdHJ1Y3QgbWNvbnRleHQgX191c2VyICpmcmFtZSkKIHsKLQlpZiAoIUZVTExfUkVHUyhyZWdzKSkgewotCQkvKiBaZXJvIG91dCB0aGUgdW5zYXZlZCBHUFJzIHRvIGF2b2lkIGluZm9ybWF0aW9uCi0JCSAgIGxlYWssIGFuZCBzZXQgVElGX1NBVkVfTlZHUFJTIHRvIGVuc3VyZSB0aGF0IHRoZQotCQkgICByZWdpc3RlcnMgZG8gYWN0dWFsbHkgZ2V0IHNhdmVkIGxhdGVyLiAqLwotCQltZW1zZXQoJnJlZ3MtPmdwclsxNF0sIDAsIDE4ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5udmdwcnNfZnJhbWUgPSAmZnJhbWUtPm1jX2dyZWdzOwotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1NBVkVfTlZHUFJTKTsKLQl9Ci0KKwlXQVJOX09OKCFGVUxMX1JFR1MocmVncykpOwogCXJldHVybiBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPm1jX2dyZWdzLCByZWdzLCBHUF9SRUdTX1NJWkUpOwogfQogCkBAIC04MjYsOCArODE1LDggQEAKIH0KIAogbG9uZyBzeXNfc3dhcGNvbnRleHQoc3RydWN0IHVjb250ZXh0IF9fdXNlciAqb2xkX2N0eCwKLQkJICAgICAgIHN0cnVjdCB1Y29udGV4dCBfX3VzZXIgKm5ld19jdHgsCi0JCSAgICAgICBpbnQgY3R4X3NpemUsIGludCByNiwgaW50IHI3LCBpbnQgcjgsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorCQkgICAgIHN0cnVjdCB1Y29udGV4dCBfX3VzZXIgKm5ld19jdHgsCisJCSAgICAgaW50IGN0eF9zaXplLCBpbnQgcjYsIGludCByNywgaW50IHI4LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggNDk3YTVkMy4uNDdmOTEwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBsaW51eC9hcmNoL3BwYzY0L2tlcm5lbC9zaWduYWwuYwotICoKICAqICBQb3dlclBDIHZlcnNpb24gCiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKICAqCkBAIC0xMTgsMTQgKzExNiw3IEBACiAJZXJyIHw9IF9fcHV0X3VzZXIoMCwgJnNjLT52X3JlZ3MpOwogI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCiAJZXJyIHw9IF9fcHV0X3VzZXIoJnNjLT5ncF9yZWdzLCAmc2MtPnJlZ3MpOwotCWlmICghRlVMTF9SRUdTKHJlZ3MpKSB7Ci0JCS8qIFplcm8gb3V0IHRoZSB1bnNhdmVkIEdQUnMgdG8gYXZvaWQgaW5mb3JtYXRpb24KLQkJICAgbGVhaywgYW5kIHNldCBUSUZfU0FWRV9OVkdQUlMgdG8gZW5zdXJlIHRoYXQgdGhlCi0JCSAgIHJlZ2lzdGVycyBkbyBhY3R1YWxseSBnZXQgc2F2ZWQgbGF0ZXIuICovCi0JCW1lbXNldCgmcmVncy0+Z3ByWzE0XSwgMCwgMTggKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX1NBVkVfTlZHUFJTKTsKLQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5udmdwcnNfZnJhbWUgPSAmc2MtPmdwX3JlZ3M7Ci0JfQorCVdBUk5fT04oIUZVTExfUkVHUyhyZWdzKSk7CiAJZXJyIHw9IF9fY29weV90b191c2VyKCZzYy0+Z3BfcmVncywgcmVncywgR1BfUkVHU19TSVpFKTsKIAllcnIgfD0gX19jb3B5X3RvX3VzZXIoJnNjLT5mcF9yZWdzLCAmY3VycmVudC0+dGhyZWFkLmZwciwgRlBfUkVHU19TSVpFKTsKIAllcnIgfD0gX19wdXRfdXNlcihzaWduciwgJnNjLT5zaWduYWwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKaW5kZXggMTM1OTVhNi4uODA1ZWFlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAkJc21wX29wcy0+dGFrZV90aW1lYmFzZSgpOwogCiAJaWYgKHN5c3RlbV9zdGF0ZSA+IFNZU1RFTV9CT09USU5HKQotCQlwZXJfY3B1KGxhc3RfamlmZnksIGNwdSkgPSBnZXRfdGIoKTsKKwkJc25hcHNob3RfdGltZWJhc2UoKTsKIAogCXNwaW5fbG9jaygmY2FsbF9sb2NrKTsKIAljcHVfc2V0KGNwdSwgY3B1X29ubGluZV9tYXApOwpAQCAtNTczLDYgKzU3Myw4IEBACiAKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZF9tYXNrKTsKIAorCXNuYXBzaG90X3RpbWViYXNlcygpOworCiAJZHVtcF9udW1hX2NwdV90b3BvbG9neSgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYwppbmRleCA0NzUyNDlkLi5jZDc1YWIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKQEAgLTE3Niw3ICsxNzYsNiBAQAogfTsKIAogZXh0ZXJuIGludCBkb19hZGp0aW1leChzdHJ1Y3QgdGltZXggKik7Ci1leHRlcm4gdm9pZCBwcGNfYWRqdGltZXgodm9pZCk7CiAKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2FkanRpbWV4KHN0cnVjdCB0aW1leDMyIF9fdXNlciAqdXRwKQogewpAQCAtMjA5LDkgKzIwOCw2IEBACiAKIAlyZXQgPSBkb19hZGp0aW1leCgmdHhjKTsKIAotCS8qIGFkanVzdCB0aGUgY29udmVyc2lvbiBvZiBUQiB0byB0aW1lIG9mIGRheSB0byB0cmFjayBhZGp0aW1leCAqLwotCXBwY19hZGp0aW1leCgpOwotCiAJaWYocHV0X3VzZXIodHhjLm1vZGVzLCAmdXRwLT5tb2RlcykgfHwKIAkgICBfX3B1dF91c2VyKHR4Yy5vZmZzZXQsICZ1dHAtPm9mZnNldCkgfHwKIAkgICBfX3B1dF91c2VyKHR4Yy5mcmVxLCAmdXRwLT5mcmVxKSB8fApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXN0YmwuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzdGJsLlMKaW5kZXggOGE5Zjk5NC4uMWFkNTVmMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXN0YmwuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c3RibC5TCkBAIC0yODgsNyArMjg4LDcgQEAKIENPTVBBVF9TWVMoY2xvY2tfZ2V0dGltZSkKIENPTVBBVF9TWVMoY2xvY2tfZ2V0cmVzKQogQ09NUEFUX1NZUyhjbG9ja19uYW5vc2xlZXApCi1DT01QQVRfU1lTKHN3YXBjb250ZXh0KQorU1lTWChwcGM2NF9zd2FwY29udGV4dCxwcGMzMl9zd2FwY29udGV4dCxwcGNfc3dhcGNvbnRleHQpCiBDT01QQVRfU1lTKHRna2lsbCkKIENPTVBBVF9TWVModXRpbWVzKQogQ09NUEFUX1NZUyhzdGF0ZnM2NCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKaW5kZXggMTg4NjA0NS4uNGEyNzIxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTUwLDYgKzUwLDggQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3NpeC10aW1lcnMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTk3LDkgKzk5LDE4IEBACiB1bnNpZ25lZCBsb25nIHRiX3RpY2tzX3Blcl91c2VjID0gMTAwOyAvKiBzYW5lIGRlZmF1bHQgKi8KIEVYUE9SVF9TWU1CT0wodGJfdGlja3NfcGVyX3VzZWMpOwogdW5zaWduZWQgbG9uZyB0Yl90aWNrc19wZXJfc2VjOworRVhQT1JUX1NZTUJPTCh0Yl90aWNrc19wZXJfc2VjKTsJLyogZm9yIGNwdXRpbWVfdCBjb252ZXJzaW9ucyAqLwogdTY0IHRiX3RvX3hzOwogdW5zaWduZWQgdGJfdG9fdXM7Ci11bnNpZ25lZCBsb25nIHByb2Nlc3Nvcl9mcmVxOworCisjZGVmaW5lIFRJQ0tMRU5fU0NBTEUJKFNISUZUX1NDQUxFIC0gMTApCit1NjQgbGFzdF90aWNrX2xlbjsJLyogdW5pdHMgYXJlIG5zIC8gMl5USUNLTEVOX1NDQUxFICovCit1NjQgdGlja2xlbl90b194czsJLyogMC42NCBmcmFjdGlvbiAqLworCisvKiBJZiBsYXN0X3RpY2tfbGVuIGNvcnJlc3BvbmRzIHRvIGFib3V0IDEvSFogc2Vjb25kcywgdGhlbgorICAgbGFzdF90aWNrX2xlbiA8PCBUSUNLTEVOX1NISUZUIHdpbGwgYmUgYWJvdXQgMl42My4gKi8KKyNkZWZpbmUgVElDS0xFTl9TSElGVAkoNjMgLSAzMCAtIFRJQ0tMRU5fU0NBTEUgKyBTSElGVF9IWikKKwogREVGSU5FX1NQSU5MT0NLKHJ0Y19sb2NrKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHJ0Y19sb2NrKTsKIApAQCAtMTEzLDEwICsxMjQsNiBAQAogZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7CiBzdGF0aWMgbG9uZyB0aW1lem9uZV9vZmZzZXQ7CiAKLXZvaWQgcHBjX2FkanRpbWV4KHZvaWQpOwotCi1zdGF0aWMgdW5zaWduZWQgYWRqdXN0aW5nX3RpbWUgPSAwOwotCiB1bnNpZ25lZCBsb25nIHBwY19wcm9jX2ZyZXE7CiB1bnNpZ25lZCBsb25nIHBwY190Yl9mcmVxOwogCkBAIC0xMzAsNiArMTM3LDIyNCBAQAogICovCiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBsYXN0X2ppZmZ5KTsKIAorI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisvKgorICogRmFjdG9ycyBmb3IgY29udmVydGluZyBmcm9tIGNwdXRpbWVfdCAodGltZWJhc2UgdGlja3MpIHRvCisgKiBqaWZmaWVzLCBtaWxsaXNlY29uZHMsIHNlY29uZHMsIGFuZCBjbG9ja190ICgxL1VTRVJfSFogc2Vjb25kcykuCisgKiBUaGVzZSBhcmUgYWxsIHN0b3JlZCBhcyAwLjY0IGZpeGVkLXBvaW50IGJpbmFyeSBmcmFjdGlvbnMuCisgKi8KK3U2NCBfX2NwdXRpbWVfamlmZmllc19mYWN0b3I7CitFWFBPUlRfU1lNQk9MKF9fY3B1dGltZV9qaWZmaWVzX2ZhY3Rvcik7Cit1NjQgX19jcHV0aW1lX21zZWNfZmFjdG9yOworRVhQT1JUX1NZTUJPTChfX2NwdXRpbWVfbXNlY19mYWN0b3IpOwordTY0IF9fY3B1dGltZV9zZWNfZmFjdG9yOworRVhQT1JUX1NZTUJPTChfX2NwdXRpbWVfc2VjX2ZhY3Rvcik7Cit1NjQgX19jcHV0aW1lX2Nsb2NrdF9mYWN0b3I7CitFWFBPUlRfU1lNQk9MKF9fY3B1dGltZV9jbG9ja3RfZmFjdG9yKTsKKworc3RhdGljIHZvaWQgY2FsY19jcHV0aW1lX2ZhY3RvcnModm9pZCkKK3sKKwlzdHJ1Y3QgZGl2X3Jlc3VsdCByZXM7CisKKwlkaXYxMjhfYnlfMzIoSFosIDAsIHRiX3RpY2tzX3Blcl9zZWMsICZyZXMpOworCV9fY3B1dGltZV9qaWZmaWVzX2ZhY3RvciA9IHJlcy5yZXN1bHRfbG93OworCWRpdjEyOF9ieV8zMigxMDAwLCAwLCB0Yl90aWNrc19wZXJfc2VjLCAmcmVzKTsKKwlfX2NwdXRpbWVfbXNlY19mYWN0b3IgPSByZXMucmVzdWx0X2xvdzsKKwlkaXYxMjhfYnlfMzIoMSwgMCwgdGJfdGlja3NfcGVyX3NlYywgJnJlcyk7CisJX19jcHV0aW1lX3NlY19mYWN0b3IgPSByZXMucmVzdWx0X2xvdzsKKwlkaXYxMjhfYnlfMzIoVVNFUl9IWiwgMCwgdGJfdGlja3NfcGVyX3NlYywgJnJlcyk7CisJX19jcHV0aW1lX2Nsb2NrdF9mYWN0b3IgPSByZXMucmVzdWx0X2xvdzsKK30KKworLyoKKyAqIFJlYWQgdGhlIFBVUlIgb24gc3lzdGVtcyB0aGF0IGhhdmUgaXQsIG90aGVyd2lzZSB0aGUgdGltZWJhc2UuCisgKi8KK3N0YXRpYyB1NjQgcmVhZF9wdXJyKHZvaWQpCit7CisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1BVUlIpKQorCQlyZXR1cm4gbWZzcHIoU1BSTl9QVVJSKTsKKwlyZXR1cm4gbWZ0YigpOworfQorCisvKgorICogQWNjb3VudCB0aW1lIGZvciBhIHRyYW5zaXRpb24gYmV0d2VlbiBzeXN0ZW0sIGhhcmQgaXJxCisgKiBvciBzb2Z0IGlycSBzdGF0ZS4KKyAqLwordm9pZCBhY2NvdW50X3N5c3RlbV92dGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl1NjQgbm93LCBkZWx0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW5vdyA9IHJlYWRfcHVycigpOworCWRlbHRhID0gbm93IC0gZ2V0X3BhY2EoKS0+c3RhcnRwdXJyOworCWdldF9wYWNhKCktPnN0YXJ0cHVyciA9IG5vdzsKKwlpZiAoIWluX2ludGVycnVwdCgpKSB7CisJCWRlbHRhICs9IGdldF9wYWNhKCktPnN5c3RlbV90aW1lOworCQlnZXRfcGFjYSgpLT5zeXN0ZW1fdGltZSA9IDA7CisJfQorCWFjY291bnRfc3lzdGVtX3RpbWUodHNrLCAwLCBkZWx0YSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVHJhbnNmZXIgdGhlIHVzZXIgYW5kIHN5c3RlbSB0aW1lcyBhY2N1bXVsYXRlZCBpbiB0aGUgcGFjYQorICogYnkgdGhlIGV4Y2VwdGlvbiBlbnRyeSBhbmQgZXhpdCBjb2RlIHRvIHRoZSBnZW5lcmljIHByb2Nlc3MKKyAqIHVzZXIgYW5kIHN5c3RlbSB0aW1lIHJlY29yZHMuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3ZvaWQgYWNjb3VudF9wcm9jZXNzX3Z0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWNwdXRpbWVfdCB1dGltZTsKKworCXV0aW1lID0gZ2V0X3BhY2EoKS0+dXNlcl90aW1lOworCWdldF9wYWNhKCktPnVzZXJfdGltZSA9IDA7CisJYWNjb3VudF91c2VyX3RpbWUodHNrLCB1dGltZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFjY291bnRfcHJvY2Vzc190aW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlhY2NvdW50X3Byb2Nlc3NfdnRpbWUoY3VycmVudCk7CisJcnVuX2xvY2FsX3RpbWVycygpOworCWlmIChyY3VfcGVuZGluZyhjcHUpKQorCQlyY3VfY2hlY2tfY2FsbGJhY2tzKGNwdSwgdXNlcl9tb2RlKHJlZ3MpKTsKKwlzY2hlZHVsZXJfdGljaygpOworIAlydW5fcG9zaXhfY3B1X3RpbWVycyhjdXJyZW50KTsKK30KKworI2lmZGVmIENPTkZJR19QUENfU1BMUEFSCisvKgorICogU3R1ZmYgZm9yIGFjY291bnRpbmcgc3RvbGVuIHRpbWUuCisgKi8KK3N0cnVjdCBjcHVfcHVycl9kYXRhIHsKKwlpbnQJaW5pdGlhbGl6ZWQ7CQkJLyogdGhyZWFkIGlzIHJ1bm5pbmcgKi8KKwl1NjQJdGIwOwkJCS8qIHRpbWViYXNlIGF0IG9yaWdpbiB0aW1lICovCisJdTY0CXB1cnIwOwkJCS8qIFBVUlIgYXQgb3JpZ2luIHRpbWUgKi8KKwl1NjQJdGI7CQkJLyogbGFzdCBUQiB2YWx1ZSByZWFkICovCisJdTY0CXB1cnI7CQkJLyogbGFzdCBQVVJSIHZhbHVlIHJlYWQgKi8KKwl1NjQJc3RvbGVuOwkJCS8qIHN0b2xlbiB0aW1lIHNvIGZhciAqLworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X3B1cnJfZGF0YSwgY3B1X3B1cnJfZGF0YSk7CisKK3N0YXRpYyB2b2lkIHNuYXBzaG90X3RiX2FuZF9wdXJyKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNwdV9wdXJyX2RhdGEgKnAgPSAmX19nZXRfY3B1X3ZhcihjcHVfcHVycl9kYXRhKTsKKworCXAtPnRiMCA9IG1mdGIoKTsKKwlwLT5wdXJyMCA9IG1mc3ByKFNQUk5fUFVSUik7CisJcC0+dGIgPSBwLT50YjA7CisJcC0+cHVyciA9IDA7CisJd21iKCk7CisJcC0+aW5pdGlhbGl6ZWQgPSAxOworfQorCisvKgorICogQ2FsbGVkIGR1cmluZyBib290IHdoZW4gYWxsIGNwdXMgaGF2ZSBjb21lIHVwLgorICovCit2b2lkIHNuYXBzaG90X3RpbWViYXNlcyh2b2lkKQoreworCWludCBjcHU7CisKKwlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1BVUlIpKQorCQlyZXR1cm47CisJZm9yX2VhY2hfY3B1KGNwdSkKKwkJc3Bpbl9sb2NrX2luaXQoJnBlcl9jcHUoY3B1X3B1cnJfZGF0YSwgY3B1KS5sb2NrKTsKKwlvbl9lYWNoX2NwdShzbmFwc2hvdF90Yl9hbmRfcHVyciwgTlVMTCwgMCwgMSk7Cit9CisKK3ZvaWQgY2FsY3VsYXRlX3N0ZWFsX3RpbWUodm9pZCkKK3sKKwl1NjQgdGIsIHB1cnIsIHQwOworCXM2NCBzdG9sZW47CisJc3RydWN0IGNwdV9wdXJyX2RhdGEgKnAwLCAqcG1lLCAqcGhpbTsKKwlpbnQgY3B1OworCisJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9QVVJSKSkKKwkJcmV0dXJuOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlwbWUgPSAmcGVyX2NwdShjcHVfcHVycl9kYXRhLCBjcHUpOworCWlmICghcG1lLT5pbml0aWFsaXplZCkKKwkJcmV0dXJuOwkJLyogdGhpcyBjYW4gaGFwcGVuIGluIGVhcmx5IGJvb3QgKi8KKwlwMCA9ICZwZXJfY3B1KGNwdV9wdXJyX2RhdGEsIGNwdSAmIH4xKTsKKwlwaGltID0gJnBlcl9jcHUoY3B1X3B1cnJfZGF0YSwgY3B1IF4gMSk7CisJc3Bpbl9sb2NrKCZwMC0+bG9jayk7CisJdGIgPSBtZnRiKCk7CisJcHVyciA9IG1mc3ByKFNQUk5fUFVSUikgLSBwbWUtPnB1cnIwOworCWlmICghcGhpbS0+aW5pdGlhbGl6ZWQgfHwgIWNwdV9vbmxpbmUoY3B1IF4gMSkpIHsKKwkJc3RvbGVuID0gKHRiIC0gcG1lLT50YikgLSAocHVyciAtIHBtZS0+cHVycik7CisJfSBlbHNlIHsKKwkJdDAgPSBwbWUtPnRiMDsKKwkJaWYgKHBoaW0tPnRiMCA8IHQwKQorCQkJdDAgPSBwaGltLT50YjA7CisJCXN0b2xlbiA9IHBoaW0tPnRiIC0gdDAgLSBwaGltLT5wdXJyIC0gcHVyciAtIHAwLT5zdG9sZW47CisJfQorCWlmIChzdG9sZW4gPiAwKSB7CisJCWFjY291bnRfc3RlYWxfdGltZShjdXJyZW50LCBzdG9sZW4pOworCQlwMC0+c3RvbGVuICs9IHN0b2xlbjsKKwl9CisJcG1lLT50YiA9IHRiOworCXBtZS0+cHVyciA9IHB1cnI7CisJc3Bpbl91bmxvY2soJnAwLT5sb2NrKTsKK30KKworLyoKKyAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgY3B1IGlzIGFkZGVkIHRvIHRoZSBvbmxpbmUgbWFwIHdoZW4KKyAqIGEgY3B1IGlzIGJlaW5nIGJyb3VnaHQgdXAgYXQgcnVudGltZS4KKyAqLworc3RhdGljIHZvaWQgc25hcHNob3RfcHVycih2b2lkKQoreworCWludCBjcHU7CisJdTY0IHB1cnI7CisJc3RydWN0IGNwdV9wdXJyX2RhdGEgKnAwLCAqcG1lLCAqcGhpbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9QVVJSKSkKKwkJcmV0dXJuOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlwbWUgPSAmcGVyX2NwdShjcHVfcHVycl9kYXRhLCBjcHUpOworCXAwID0gJnBlcl9jcHUoY3B1X3B1cnJfZGF0YSwgY3B1ICYgfjEpOworCXBoaW0gPSAmcGVyX2NwdShjcHVfcHVycl9kYXRhLCBjcHUgXiAxKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcDAtPmxvY2ssIGZsYWdzKTsKKwlwbWUtPnRiID0gcG1lLT50YjAgPSBtZnRiKCk7CisJcHVyciA9IG1mc3ByKFNQUk5fUFVSUik7CisJaWYgKCFwaGltLT5pbml0aWFsaXplZCkgeworCQlwbWUtPnB1cnIgPSAwOworCQlwbWUtPnB1cnIwID0gcHVycjsKKwl9IGVsc2UgeworCQkvKiBzZXQgcC0+cHVyciBhbmQgcC0+cHVycjAgZm9yIG5vIGNoYW5nZSBpbiBwMC0+c3RvbGVuICovCisJCXBtZS0+cHVyciA9IHBoaW0tPnRiIC0gcGhpbS0+dGIwIC0gcGhpbS0+cHVyciAtIHAwLT5zdG9sZW47CisJCXBtZS0+cHVycjAgPSBwdXJyIC0gcG1lLT5wdXJyOworCX0KKwlwbWUtPmluaXRpYWxpemVkID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwMC0+bG9jaywgZmxhZ3MpOworfQorCisjZW5kaWYgLyogQ09ORklHX1BQQ19TUExQQVIgKi8KKworI2Vsc2UgLyogISBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyAqLworI2RlZmluZSBjYWxjX2NwdXRpbWVfZmFjdG9ycygpCisjZGVmaW5lIGFjY291bnRfcHJvY2Vzc190aW1lKHJlZ3MpCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSkKKyNkZWZpbmUgY2FsY3VsYXRlX3N0ZWFsX3RpbWUoKQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiAhKGRlZmluZWQoQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcpICYmIGRlZmluZWQoQ09ORklHX1BQQ19TUExQQVIpKQorI2RlZmluZSBzbmFwc2hvdF9wdXJyKCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIENhbGxlZCB3aGVuIGEgY3B1IGNvbWVzIHVwIGFmdGVyIHRoZSBzeXN0ZW0gaGFzIGZpbmlzaGVkIGJvb3RpbmcsCisgKiBpLmUuIGFzIGEgcmVzdWx0IG9mIGEgaG90cGx1ZyBjcHUgYWN0aW9uLgorICovCit2b2lkIHNuYXBzaG90X3RpbWViYXNlKHZvaWQpCit7CisJX19nZXRfY3B1X3ZhcihsYXN0X2ppZmZ5KSA9IGdldF90YigpOworCXNuYXBzaG90X3B1cnIoKTsKK30KKwogdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKQEAgLTE3OCw4ICs0MDMsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKHBwY19tZC5zZXRfcnRjX3RpbWUgJiYgbnRwX3N5bmNlZCgpICYmCiAJICAgIHh0aW1lLnR2X3NlYyAtIGxhc3RfcnRjX3VwZGF0ZSA+PSA2NTkgJiYKLQkgICAgYWJzKCh4dGltZS50dl9uc2VjLzEwMDApIC0gKDEwMDAwMDAtMTAwMDAwMC9IWikpIDwgNTAwMDAwL0haICYmCi0JICAgIGppZmZpZXMgLSB3YWxsX2ppZmZpZXMgPT0gMSkgeworCSAgICBhYnMoKHh0aW1lLnR2X25zZWMvMTAwMCkgLSAoMTAwMDAwMC0xMDAwMDAwL0haKSkgPCA1MDAwMDAvSFopIHsKIAkJc3RydWN0IHJ0Y190aW1lIHRtOwogCQl0b190bSh4dGltZS50dl9zZWMgKyAxICsgdGltZXpvbmVfb2Zmc2V0LCAmdG0pOwogCQl0bS50bV95ZWFyIC09IDE5MDA7CkBAIC0yMjYsMTUgKzQ1MCwxNCBAQAogCWlmIChfX1VTRV9SVEMoKSkgewogCQkvKiBkbyB0aGlzIHRoZSBvbGQgd2F5ICovCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHNlcTsKLQkJdW5zaWduZWQgaW50IHNlYywgbnNlYywgdXNlYywgbG9zdDsKKwkJdW5zaWduZWQgaW50IHNlYywgbnNlYywgdXNlYzsKIAogCQlkbyB7CiAJCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAkJCXNlYyA9IHh0aW1lLnR2X3NlYzsKIAkJCW5zZWMgPSB4dGltZS50dl9uc2VjICsgdGJfdGlja3Nfc2luY2UodGJfbGFzdF9zdGFtcCk7Ci0JCQlsb3N0ID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKIAkJfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7Ci0JCXVzZWMgPSBuc2VjIC8gMTAwMCArIGxvc3QgKiAoMTAwMDAwMCAvIEhaKTsKKwkJdXNlYyA9IG5zZWMgLyAxMDAwOwogCQl3aGlsZSAodXNlYyA+PSAxMDAwMDAwKSB7CiAJCQl1c2VjIC09IDEwMDAwMDA7CiAJCQkrK3NlYzsKQEAgLTI0OCwyMyArNDcxLDYgQEAKIAogRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOwogCi0vKiBTeW5jaHJvbml6ZSB4dGltZSB3aXRoIGRvX2dldHRpbWVvZmRheSAqLyAKLQotc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3N5bmNfeHRpbWUodW5zaWduZWQgbG9uZyBjdXJfdGIpCi17Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JLyogd2h5IGRvIHdlIGRvIHRoaXM/ICovCi0Jc3RydWN0IHRpbWV2YWwgbXlfdHY7Ci0KLQlfX2RvX2dldHRpbWVvZmRheSgmbXlfdHYsIGN1cl90Yik7Ci0KLQlpZiAoeHRpbWUudHZfc2VjIDw9IG15X3R2LnR2X3NlYykgewotCQl4dGltZS50dl9zZWMgPSBteV90di50dl9zZWM7Ci0JCXh0aW1lLnR2X25zZWMgPSBteV90di50dl91c2VjICogMTAwMDsKLQl9Ci0jZW5kaWYKLX0KLQogLyoKICAqIFRoZXJlIGFyZSB0d28gY29waWVzIG9mIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIHNvIHRoYXQgbm8KICAqIGxvY2sgaXMgbmVlZGVkIHRvIGFjY2VzcyBhbmQgdXNlIHRoZXNlIHZhbHVlcyBpbgpAQCAtMjk3LDkgKzUwMyw5IEBACiAJICogdGhlIHR3byB2YWx1ZXMgb2YgdGJfdXBkYXRlX2NvdW50IG1hdGNoIGFuZCBhcmUgZXZlbiB0aGVuIHRoZQogCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIHZhbHVlcyBhcmUgY29uc2lzdGVudC4gIElmIG5vdCwgdGhlbiBpdAogCSAqIGxvb3BzIGJhY2sgYW5kIHJlYWRzIHRoZW0gYWdhaW4gdW50aWwgdGhpcyBjcml0ZXJpYSBpcyBtZXQuCisJICogV2UgZXhwZWN0IHRoZSBjYWxsZXIgdG8gaGF2ZSBkb25lIHRoZSBmaXJzdCBpbmNyZW1lbnQgb2YKKwkgKiB2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudCBhbHJlYWR5LgogCSAqLwotCSsrKHZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50KTsKLQlzbXBfd21iKCk7CiAJdmRzb19kYXRhLT50Yl9vcmlnX3N0YW1wID0gbmV3X3RiX3N0YW1wOwogCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOwogCXZkc29fZGF0YS0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CkBAIC0zMjMsMTUgKzUyOSw0MCBAQAogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXU2NCBuZXdfc3RhbXBfeHNlYzsKKwl1NjQgdGxlbiwgdDJ4OworCXU2NCB0YiwgeHNlY19vbGQsIHhzZWNfbmV3OworCXN0cnVjdCBnZXR0aW1lb2ZkYXlfdmFycyAqdmFycDsKIAogCWlmIChfX1VTRV9SVEMoKSkKIAkJcmV0dXJuOworCXRsZW4gPSBjdXJyZW50X3RpY2tfbGVuZ3RoKCk7CiAJb2Zmc2V0ID0gY3VyX3RiIC0gZG9fZ3RvZC52YXJwLT50Yl9vcmlnX3N0YW1wOwotCWlmICgob2Zmc2V0ICYgMHg4MDAwMDAwMHUpID09IDApCisJaWYgKHRsZW4gPT0gbGFzdF90aWNrX2xlbiAmJiBvZmZzZXQgPCAweDgwMDAwMDAwdSkKIAkJcmV0dXJuOwotCW5ld19zdGFtcF94c2VjID0gZG9fZ3RvZC52YXJwLT5zdGFtcF94c2VjCi0JCSsgbXVsaGR1KG9mZnNldCwgZG9fZ3RvZC52YXJwLT50Yl90b194cyk7Ci0JdXBkYXRlX2d0b2QoY3VyX3RiLCBuZXdfc3RhbXBfeHNlYywgZG9fZ3RvZC52YXJwLT50Yl90b194cyk7CisJaWYgKHRsZW4gIT0gbGFzdF90aWNrX2xlbikgeworCQl0MnggPSBtdWxoZHUodGxlbiA8PCBUSUNLTEVOX1NISUZULCB0aWNrbGVuX3RvX3hzKTsKKwkJbGFzdF90aWNrX2xlbiA9IHRsZW47CisJfSBlbHNlCisJCXQyeCA9IGRvX2d0b2QudmFycC0+dGJfdG9feHM7CisJbmV3X3N0YW1wX3hzZWMgPSAodTY0KSB4dGltZS50dl9uc2VjICogWFNFQ19QRVJfU0VDOworCWRvX2RpdihuZXdfc3RhbXBfeHNlYywgMTAwMDAwMDAwMCk7CisJbmV3X3N0YW1wX3hzZWMgKz0gKHU2NCkgeHRpbWUudHZfc2VjICogWFNFQ19QRVJfU0VDOworCisJKyt2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudDsKKwlzbXBfbWIoKTsKKworCS8qCisJICogTWFrZSBzdXJlIHRpbWUgZG9lc24ndCBnbyBiYWNrd2FyZHMgZm9yIHVzZXJzcGFjZSBnZXR0aW1lb2ZkYXkuCisJICovCisJdGIgPSBnZXRfdGIoKTsKKwl2YXJwID0gZG9fZ3RvZC52YXJwOworCXhzZWNfb2xkID0gbXVsaGR1KHRiIC0gdmFycC0+dGJfb3JpZ19zdGFtcCwgdmFycC0+dGJfdG9feHMpCisJCSsgdmFycC0+c3RhbXBfeHNlYzsKKwl4c2VjX25ldyA9IG11bGhkdSh0YiAtIGN1cl90YiwgdDJ4KSArIG5ld19zdGFtcF94c2VjOworCWlmICh4c2VjX25ldyA8IHhzZWNfb2xkKQorCQluZXdfc3RhbXBfeHNlYyArPSB4c2VjX29sZCAtIHhzZWNfbmV3OworCisJdXBkYXRlX2d0b2QoY3VyX3RiLCBuZXdfc3RhbXBfeHNlYywgdDJ4KTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTM4MSw2ICs2MTIsNyBAQAogCQkJCQkJbmV3X3RiX3RpY2tzX3Blcl9qaWZmeSwgc2lnbiwgdGlja19kaWZmICk7CiAJCQkJdGJfdGlja3NfcGVyX2ppZmZ5ID0gbmV3X3RiX3RpY2tzX3Blcl9qaWZmeTsKIAkJCQl0Yl90aWNrc19wZXJfc2VjICAgPSBuZXdfdGJfdGlja3NfcGVyX3NlYzsKKwkJCQljYWxjX2NwdXRpbWVfZmFjdG9ycygpOwogCQkJCWRpdjEyOF9ieV8zMiggWFNFQ19QRVJfU0VDLCAwLCB0Yl90aWNrc19wZXJfc2VjLCAmZGl2cmVzICk7CiAJCQkJZG9fZ3RvZC50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKIAkJCQl0Yl90b194cyA9IGRpdnJlcy5yZXN1bHRfbG93OwpAQCAtNDI5LDYgKzY2MSw3IEBACiAJaXJxX2VudGVyKCk7CiAKIAlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORywgcmVncyk7CisJY2FsY3VsYXRlX3N0ZWFsX3RpbWUoKTsKIAogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogCWdldF9scHBhY2EoKS0+aW50X2R3b3JkLmZpZWxkcy5kZWNyX2ludCA9IDA7CkBAIC00NTAsNyArNjgzLDcgQEAKIAkJICogaXMgdGhlIGNhc2UuCiAJCSAqLwogCQlpZiAoIWNwdV9pc19vZmZsaW5lKGNwdSkpCi0JCQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOworCQkJYWNjb3VudF9wcm9jZXNzX3RpbWUocmVncyk7CiAKIAkJLyoKIAkJICogTm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIGNwdSBpcyBvZmZsaW5lIGhlcmU7IGJvb3RfY3B1aWQKQEAgLTQ2MiwxMyArNjk1LDEwIEBACiAJCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwogCQl0Yl9sYXN0X2ppZmZ5ICs9IHRiX3RpY2tzX3Blcl9qaWZmeTsKIAkJdGJfbGFzdF9zdGFtcCA9IHBlcl9jcHUobGFzdF9qaWZmeSwgY3B1KTsKLQkJdGltZXJfcmVjYWxjX29mZnNldCh0Yl9sYXN0X2ppZmZ5KTsKIAkJZG9fdGltZXIocmVncyk7Ci0JCXRpbWVyX3N5bmNfeHRpbWUodGJfbGFzdF9qaWZmeSk7CisJCXRpbWVyX3JlY2FsY19vZmZzZXQodGJfbGFzdF9qaWZmeSk7CiAJCXRpbWVyX2NoZWNrX3J0YygpOwogCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwotCQlpZiAoYWRqdXN0aW5nX3RpbWUgJiYgKHRpbWVfYWRqdXN0ID09IDApKQotCQkJcHBjX2FkanRpbWV4KCk7CiAJfQogCQogCW5leHRfZGVjID0gdGJfdGlja3NfcGVyX2ppZmZ5IC0gdGlja3M7CkBAIC00OTIsMjkgKzcyMiw0NSBAQAogCiB2b2lkIHdha2V1cF9kZWNyZW1lbnRlcih2b2lkKQogewotCWludCBpOworCXVuc2lnbmVkIGxvbmcgdGlja3M7CiAKLQlzZXRfZGVjKHRiX3RpY2tzX3Blcl9qaWZmeSk7CiAJLyoKLQkgKiBXZSBkb24ndCBleHBlY3QgdGhpcyB0byBiZSBjYWxsZWQgb24gYSBtYWNoaW5lIHdpdGggYSA2MDEsCi0JICogc28gdXNpbmcgZ2V0X3RibCBpcyBmaW5lLgorCSAqIFRoZSB0aW1lYmFzZSBnZXRzIHNhdmVkIG9uIHNsZWVwIGFuZCByZXN0b3JlZCBvbiB3YWtldXAsCisJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgdG8gcmVzZXQgdGhlIGRlY3JlbWVudGVyLgogCSAqLwotCXRiX2xhc3Rfc3RhbXAgPSB0Yl9sYXN0X2ppZmZ5ID0gZ2V0X3RiKCk7Ci0JZm9yX2VhY2hfY3B1KGkpCi0JCXBlcl9jcHUobGFzdF9qaWZmeSwgaSkgPSB0Yl9sYXN0X3N0YW1wOworCXRpY2tzID0gdGJfdGlja3Nfc2luY2UoX19nZXRfY3B1X3ZhcihsYXN0X2ppZmZ5KSk7CisJaWYgKHRpY2tzIDwgdGJfdGlja3NfcGVyX2ppZmZ5KQorCQl0aWNrcyA9IHRiX3RpY2tzX3Blcl9qaWZmeSAtIHRpY2tzOworCWVsc2UKKwkJdGlja3MgPSAxOworCXNldF9kZWModGlja3MpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUAogdm9pZCBfX2luaXQgc21wX3NwYWNlX3RpbWVycyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiAJaW50IGk7CisJdW5zaWduZWQgbG9uZyBoYWxmID0gdGJfdGlja3NfcGVyX2ppZmZ5IC8gMjsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHRiX3RpY2tzX3Blcl9qaWZmeSAvIG1heF9jcHVzOwogCXVuc2lnbmVkIGxvbmcgcHJldmlvdXNfdGIgPSBwZXJfY3B1KGxhc3RfamlmZnksIGJvb3RfY3B1aWQpOwogCiAJLyogbWFrZSBzdXJlIHRiID4gcGVyX2NwdShsYXN0X2ppZmZ5LCBjcHUpIGZvciBhbGwgY3B1cyBhbHdheXMgKi8KIAlwcmV2aW91c190YiAtPSB0Yl90aWNrc19wZXJfamlmZnk7CisJLyoKKwkgKiBUaGUgc3RvbGVuIHRpbWUgY2FsY3VsYXRpb24gZm9yIFBPV0VSNSBzaGFyZWQtcHJvY2Vzc29yIExQQVIKKwkgKiBzeXN0ZW1zIHdvcmtzIGJldHRlciBpZiB0aGUgdHdvIHRocmVhZHMnIHRpbWViYXNlIGludGVycnVwdHMKKwkgKiBhcmUgc3RhZ2dlcmVkIGJ5IGhhbGYgYSBqaWZmeSB3aXRoIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4KKwkgKi8KIAlmb3JfZWFjaF9jcHUoaSkgewotCQlpZiAoaSAhPSBib290X2NwdWlkKSB7CisJCWlmIChpID09IGJvb3RfY3B1aWQpCisJCQljb250aW51ZTsKKwkJaWYgKGkgPT0gKGJvb3RfY3B1aWQgXiAxKSkKKwkJCXBlcl9jcHUobGFzdF9qaWZmeSwgaSkgPQorCQkJCXBlcl9jcHUobGFzdF9qaWZmeSwgYm9vdF9jcHVpZCkgLSBoYWxmOworCQllbHNlIGlmIChpICYgMSkKKwkJCXBlcl9jcHUobGFzdF9qaWZmeSwgaSkgPQorCQkJCXBlcl9jcHUobGFzdF9qaWZmeSwgaSBeIDEpICsgaGFsZjsKKwkJZWxzZSB7CiAJCQlwcmV2aW91c190YiArPSBvZmZzZXQ7CiAJCQlwZXJfY3B1KGxhc3RfamlmZnksIGkpID0gcHJldmlvdXNfdGI7CiAJCX0KQEAgLTU0MSw4ICs3ODcsOCBAQAogCXRpbWVfdCB3dG1fc2VjLCBuZXdfc2VjID0gdHYtPnR2X3NlYzsKIAlsb25nIHd0bV9uc2VjLCBuZXdfbnNlYyA9IHR2LT50dl9uc2VjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBpbnQgdGJfZGVsdGE7Ci0JdTY0IG5ld194c2VjLCB0Yl9kZWx0YV94czsKKwl1NjQgbmV3X3hzZWM7CisJdW5zaWduZWQgbG9uZyB0Yl9kZWx0YTsKIAogCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTYzLDkgKzgwOSwyMyBAQAogCQlmaXJzdF9zZXR0aW1lb2ZkYXkgPSAwOwogCX0KICNlbmRpZgorCisJLyogTWFrZSB1c2Vyc3BhY2UgZ2V0dGltZW9mZGF5IHNwaW4gdW50aWwgd2UncmUgZG9uZS4gKi8KKwkrK3Zkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50OworCXNtcF9tYigpOworCisJLyoKKwkgKiBTdWJ0cmFjdCBvZmYgdGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyBzaW5jZSB0aGUKKwkgKiBiZWdpbm5pbmcgb2YgdGhlIGxhc3QgdGljay4KKwkgKiBOb3RlIHRoYXQgc2luY2Ugd2UgZG9uJ3QgaW5jcmVtZW50IGppZmZpZXNfNjQgYW55d2hlcmUgb3RoZXIKKwkgKiB0aGFuIGluIGRvX3RpbWVyIChzaW5jZSB3ZSBkb24ndCBoYXZlIGEgbG9zdCB0aWNrIHByb2JsZW0pLAorCSAqIHdhbGxfamlmZmllcyB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBhcyBqaWZmaWVzLAorCSAqIGFuZCB0aGVyZWZvcmUgdGhlIChqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSBjb21wdXRhdGlvbgorCSAqIGhhcyBiZWVuIHJlbW92ZWQuCisJICovCiAJdGJfZGVsdGEgPSB0Yl90aWNrc19zaW5jZSh0Yl9sYXN0X3N0YW1wKTsKLQl0Yl9kZWx0YSArPSAoamlmZmllcyAtIHdhbGxfamlmZmllcykgKiB0Yl90aWNrc19wZXJfamlmZnk7Ci0JdGJfZGVsdGFfeHMgPSBtdWxoZHUodGJfZGVsdGEsIGRvX2d0b2QudmFycC0+dGJfdG9feHMpOworCXRiX2RlbHRhID0gbXVsaGR1KHRiX2RlbHRhLCBkb19ndG9kLnZhcnAtPnRiX3RvX3hzKTsgLyogaW4geHNlYyAqLworCW5ld19uc2VjIC09IFNDQUxFX1hTRUModGJfZGVsdGEsIDEwMDAwMDAwMDApOwogCiAJd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gbmV3X3NlYyk7CiAJd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuZXdfbnNlYyk7CkBAIC01ODAsMTIgKzg0MCwxMiBAQAogCiAJbnRwX2NsZWFyKCk7CiAKLQluZXdfeHNlYyA9IDA7Ci0JaWYgKG5ld19uc2VjICE9IDApIHsKLQkJbmV3X3hzZWMgPSAodTY0KW5ld19uc2VjICogWFNFQ19QRVJfU0VDOworCW5ld194c2VjID0geHRpbWUudHZfbnNlYzsKKwlpZiAobmV3X3hzZWMgIT0gMCkgeworCQluZXdfeHNlYyAqPSBYU0VDX1BFUl9TRUM7CiAJCWRvX2RpdihuZXdfeHNlYywgTlNFQ19QRVJfU0VDKTsKIAl9Ci0JbmV3X3hzZWMgKz0gKHU2NCluZXdfc2VjICogWFNFQ19QRVJfU0VDIC0gdGJfZGVsdGFfeHM7CisJbmV3X3hzZWMgKz0gKHU2NCl4dGltZS50dl9zZWMgKiBYU0VDX1BFUl9TRUM7CiAJdXBkYXRlX2d0b2QodGJfbGFzdF9qaWZmeSwgbmV3X3hzZWMsIGRvX2d0b2QudmFycC0+dGJfdG9feHMpOwogCiAJdmRzb19kYXRhLT50el9taW51dGVzd2VzdCA9IHN5c190ei50el9taW51dGVzd2VzdDsKQEAgLTY3MSw3ICs5MzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyB0bSA9IDA7CiAJc3RydWN0IGRpdl9yZXN1bHQgcmVzOwotCXU2NCBzY2FsZTsKKwl1NjQgc2NhbGUsIHg7CiAJdW5zaWduZWQgc2hpZnQ7CiAKICAgICAgICAgaWYgKHBwY19tZC50aW1lX2luaXQgIT0gTlVMTCkKQEAgLTY5MywxMSArOTUzLDQzIEBACiAJfQogCiAJdGJfdGlja3NfcGVyX2ppZmZ5ID0gcHBjX3RiX2ZyZXEgLyBIWjsKLQl0Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX2ppZmZ5ICogSFo7CisJdGJfdGlja3NfcGVyX3NlYyA9IHBwY190Yl9mcmVxOwogCXRiX3RpY2tzX3Blcl91c2VjID0gcHBjX3RiX2ZyZXEgLyAxMDAwMDAwOwogCXRiX3RvX3VzID0gbXVsaHd1X3NjYWxlX2ZhY3RvcihwcGNfdGJfZnJlcSwgMTAwMDAwMCk7Ci0JZGl2MTI4X2J5XzMyKDEwMjQqMTAyNCwgMCwgdGJfdGlja3NfcGVyX3NlYywgJnJlcyk7Ci0JdGJfdG9feHMgPSByZXMucmVzdWx0X2xvdzsKKwljYWxjX2NwdXRpbWVfZmFjdG9ycygpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBlYWNoIHRpY2sgaW4gbnMuICBJdCB3aWxsIG5vdCBiZQorCSAqIGV4YWN0bHkgMWU5L0haIHVubGVzcyBwcGNfdGJfZnJlcSBpcyBkaXZpc2libGUgYnkgSFouCisJICogV2UgY29tcHV0ZSAxZTkgKiB0Yl90aWNrc19wZXJfamlmZnkgLyBwcGNfdGJfZnJlcSwKKwkgKiByb3VuZGVkIHVwLgorCSAqLworCXggPSAodTY0KSBOU0VDX1BFUl9TRUMgKiB0Yl90aWNrc19wZXJfamlmZnkgKyBwcGNfdGJfZnJlcSAtIDE7CisJZG9fZGl2KHgsIHBwY190Yl9mcmVxKTsKKwl0aWNrX25zZWMgPSB4OworCWxhc3RfdGlja19sZW4gPSB4IDw8IFRJQ0tMRU5fU0NBTEU7CisKKwkvKgorCSAqIENvbXB1dGUgdGlja2xlbl90b194cywgd2hpY2ggaXMgYSBmYWN0b3Igd2hpY2ggZ2V0cyBtdWx0aXBsaWVkCisJICogYnkgKGxhc3RfdGlja19sZW4gPDwgVElDS0xFTl9TSElGVCkgdG8gZ2V0IGEgdGJfdG9feHMgdmFsdWUuCisJICogSXQgaXMgY29tcHV0ZWQgYXM6CisJICogdGlja2xlbl90b194cyA9IDJeTiAvICh0Yl90aWNrc19wZXJfamlmZnkgKiAxZTkpCisJICogd2hlcmUgTiA9IDY0ICsgMjAgLSBUSUNLTEVOX1NDQUxFIC0gVElDS0xFTl9TSElGVAorCSAqIHdoaWNoIHR1cm5zIG91dCB0byBiZSBOID0gNTEgLSBTSElGVF9IWi4KKwkgKiBUaGlzIGdpdmVzIHRoZSByZXN1bHQgYXMgYSAwLjY0IGZpeGVkLXBvaW50IGZyYWN0aW9uLgorCSAqIFRoYXQgdmFsdWUgaXMgcmVkdWNlZCBieSBhbiBvZmZzZXQgYW1vdW50aW5nIHRvIDEgeHNlYyBwZXIKKwkgKiAyXjMxIHRpbWViYXNlIHRpY2tzIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggdGltZSBnb2luZyBiYWNrd2FyZHMKKwkgKiBieSAxIHhzZWMgd2hlbiB3ZSBkbyB0aW1lcl9yZWNhbGNfb2Zmc2V0IGR1ZSB0byBsb3NpbmcgdGhlCisJICogZnJhY3Rpb25hbCB4c2VjLiAgVGhhdCBvZmZzZXQgaXMgZXF1YWwgdG8gcHBjX3RiX2ZyZXEvMl41MQorCSAqIHNpbmNlIHRoZXJlIGFyZSAyXjIwIHhzZWMgaW4gYSBzZWNvbmQuCisJICovCisJZGl2MTI4X2J5XzMyKCgxVUxMIDw8IDUxKSAtIHBwY190Yl9mcmVxLCAwLAorCQkgICAgIHRiX3RpY2tzX3Blcl9qaWZmeSA8PCBTSElGVF9IWiwgJnJlcyk7CisJZGl2MTI4X2J5XzMyKHJlcy5yZXN1bHRfaGlnaCwgcmVzLnJlc3VsdF9sb3csIE5TRUNfUEVSX1NFQywgJnJlcyk7CisJdGlja2xlbl90b194cyA9IHJlcy5yZXN1bHRfbG93OworCisJLyogQ29tcHV0ZSB0Yl90b194cyBmcm9tIHRpY2tfbnNlYyAqLworCXRiX3RvX3hzID0gbXVsaGR1KGxhc3RfdGlja19sZW4gPDwgVElDS0xFTl9TSElGVCwgdGlja2xlbl90b194cyk7CiAKIAkvKgogCSAqIENvbXB1dGUgc2NhbGUgZmFjdG9yIGZvciBzY2hlZF9jbG9jay4KQEAgLTcyNCw2ICsxMDE2LDE0IEBACiAJCXRtID0gZ2V0X2Jvb3RfdGltZSgpOwogCiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisKKwkvKiBJZiBwbGF0Zm9ybSBwcm92aWRlZCBhIHRpbWV6b25lIChwbWFjKSwgd2UgY29ycmVjdCB0aGUgdGltZSAqLworICAgICAgICBpZiAodGltZXpvbmVfb2Zmc2V0KSB7CisJCXN5c190ei50el9taW51dGVzd2VzdCA9IC10aW1lem9uZV9vZmZzZXQgLyA2MDsKKwkJc3lzX3R6LnR6X2RzdHRpbWUgPSAwOworCQl0bSAtPSB0aW1lem9uZV9vZmZzZXQ7CisgICAgICAgIH0KKwogCXh0aW1lLnR2X3NlYyA9IHRtOwogCXh0aW1lLnR2X25zZWMgPSAwOwogCWRvX2d0b2QudmFycCA9ICZkb19ndG9kLnZhcnNbMF07CkBAIC03MzgsMTggKzEwMzgsMTEgQEAKIAl2ZHNvX2RhdGEtPnRiX29yaWdfc3RhbXAgPSB0Yl9sYXN0X2ppZmZ5OwogCXZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50ID0gMDsKIAl2ZHNvX2RhdGEtPnRiX3RpY2tzX3Blcl9zZWMgPSB0Yl90aWNrc19wZXJfc2VjOwotCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IHh0aW1lLnR2X3NlYyAqIFhTRUNfUEVSX1NFQzsKKwl2ZHNvX2RhdGEtPnN0YW1wX3hzZWMgPSAodTY0KSB4dGltZS50dl9zZWMgKiBYU0VDX1BFUl9TRUM7CiAJdmRzb19kYXRhLT50Yl90b194cyA9IHRiX3RvX3hzOwogCiAJdGltZV9mcmVxID0gMDsKIAotCS8qIElmIHBsYXRmb3JtIHByb3ZpZGVkIGEgdGltZXpvbmUgKHBtYWMpLCB3ZSBjb3JyZWN0IHRoZSB0aW1lICovCi0gICAgICAgIGlmICh0aW1lem9uZV9vZmZzZXQpIHsKLQkJc3lzX3R6LnR6X21pbnV0ZXN3ZXN0ID0gLXRpbWV6b25lX29mZnNldCAvIDYwOwotCQlzeXNfdHoudHpfZHN0dGltZSA9IDA7Ci0JCXh0aW1lLnR2X3NlYyAtPSB0aW1lem9uZV9vZmZzZXQ7Ci0gICAgICAgIH0KLQogCWxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYzsKIAlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCiAJICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwpAQCAtNzU5LDEyNiArMTA1Miw2IEBACiAJc2V0X2RlYyh0Yl90aWNrc19wZXJfamlmZnkpOwogfQogCi0vKiAKLSAqIEFmdGVyIGFkanRpbWV4IGlzIGNhbGxlZCwgYWRqdXN0IHRoZSBjb252ZXJzaW9uIG9mIHRiIHRpY2tzCi0gKiB0byBtaWNyb3NlY29uZHMgdG8ga2VlcCBkb19nZXR0aW1lb2ZkYXkgc3luY2hyb25pemVkIAotICogd2l0aCBudHBkLgotICoKLSAqIFVzZSB0aGUgdGltZV9hZGp1c3QsIHRpbWVfZnJlcSBhbmQgdGltZV9vZmZzZXQgY29tcHV0ZWQgYnkgYWRqdGltZXggdG8gCi0gKiBhZGp1c3QgdGhlIGZyZXF1ZW5jeS4KLSAqLwotCi0vKiAjZGVmaW5lIERFQlVHX1BQQ19BREpUSU1FWCAxICovCi0KLXZvaWQgcHBjX2FkanRpbWV4KHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JdW5zaWduZWQgbG9uZyBkZW4sIG5ld190Yl90aWNrc19wZXJfc2VjLCB0Yl90aWNrcywgb2xkX3hzZWMsCi0JCW5ld190Yl90b194cywgbmV3X3hzZWMsIG5ld19zdGFtcF94c2VjOwotCXVuc2lnbmVkIGxvbmcgdGJfdGlja3NfcGVyX3NlY19kZWx0YTsKLQlsb25nIGRlbHRhX2ZyZXEsIGx0ZW1wOwotCXN0cnVjdCBkaXZfcmVzdWx0IGRpdnJlczsgCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIHNpbmdsZXNob3RfcHBtID0gMDsKLQotCS8qCi0JICogQ29tcHV0ZSBwYXJ0cyBwZXIgbWlsbGlvbiBmcmVxdWVuY3kgYWRqdXN0bWVudCB0bwotCSAqIGFjY29tcGxpc2ggdGhlIHRpbWUgYWRqdXN0bWVudCBpbXBsaWVkIGJ5IHRpbWVfb2Zmc2V0IHRvIGJlCi0JICogYXBwbGllZCBvdmVyIHRoZSBlbGFwc2VkIHRpbWUgaW5kaWNhdGVkIGJ5IHRpbWVfY29uc3RhbnQuCi0JICogVXNlIFNISUZUX1VTRUMgdG8gZ2V0IGl0IGludG8gdGhlIHNhbWUgdW5pdHMgYXMKLQkgKiB0aW1lX2ZyZXEuCi0JICovCi0JaWYgKCB0aW1lX29mZnNldCA8IDAgKSB7Ci0JCWx0ZW1wID0gLXRpbWVfb2Zmc2V0OwotCQlsdGVtcCA8PD0gU0hJRlRfVVNFQyAtIFNISUZUX1VQREFURTsKLQkJbHRlbXAgPj49IFNISUZUX0tHICsgdGltZV9jb25zdGFudDsKLQkJbHRlbXAgPSAtbHRlbXA7Ci0JfSBlbHNlIHsKLQkJbHRlbXAgPSB0aW1lX29mZnNldDsKLQkJbHRlbXAgPDw9IFNISUZUX1VTRUMgLSBTSElGVF9VUERBVEU7Ci0JCWx0ZW1wID4+PSBTSElGVF9LRyArIHRpbWVfY29uc3RhbnQ7Ci0JfQotCQotCS8qIElmIHRoZXJlIGlzIGEgc2luZ2xlIHNob3QgdGltZSBhZGp1c3RtZW50IGluIHByb2dyZXNzICovCi0JaWYgKCB0aW1lX2FkanVzdCApIHsKLSNpZmRlZiBERUJVR19QUENfQURKVElNRVgKLQkJcHJpbnRrKCJwcGNfYWRqdGltZXg6ICIpOwotCQlpZiAoIGFkanVzdGluZ190aW1lID09IDAgKQotCQkJcHJpbnRrKCJzdGFydGluZyAiKTsKLQkJcHJpbnRrKCJzaW5nbGUgc2hvdCB0aW1lX2FkanVzdCA9ICVsZFxuIiwgdGltZV9hZGp1c3QpOwotI2VuZGlmCQotCQotCQlhZGp1c3RpbmdfdGltZSA9IDE7Ci0JCQotCQkvKgotCQkgKiBDb21wdXRlIHBhcnRzIHBlciBtaWxsaW9uIGZyZXF1ZW5jeSBhZGp1c3RtZW50Ci0JCSAqIHRvIG1hdGNoIHRpbWVfYWRqdXN0Ci0JCSAqLwotCQlzaW5nbGVzaG90X3BwbSA9IHRpY2thZGogKiBIWjsJCi0JCS8qCi0JCSAqIFRoZSBhZGp1c3RtZW50IHNob3VsZCBiZSB0aWNrYWRqKkhaIHRvIG1hdGNoIHRoZSBjb2RlIGluCi0JCSAqIGxpbnV4L2tlcm5lbC90aW1lci5jLCBidXQgZXhwZXJpbWVudHMgc2hvdyB0aGF0IHRoaXMgaXMgdG9vCi0JCSAqIGxhcmdlLiAzLzQgb2YgdGlja2FkaipIWiBzZWVtcyBhYm91dCByaWdodAotCQkgKi8KLQkJc2luZ2xlc2hvdF9wcG0gLT0gc2luZ2xlc2hvdF9wcG0gLyA0OwotCQkvKiBVc2UgU0hJRlRfVVNFQyB0byBnZXQgaXQgaW50byB0aGUgc2FtZSB1bml0cyBhcyB0aW1lX2ZyZXEgKi8KLQkJc2luZ2xlc2hvdF9wcG0gPDw9IFNISUZUX1VTRUM7Ci0JCWlmICggdGltZV9hZGp1c3QgPCAwICkKLQkJCXNpbmdsZXNob3RfcHBtID0gLXNpbmdsZXNob3RfcHBtOwotCX0KLQllbHNlIHsKLSNpZmRlZiBERUJVR19QUENfQURKVElNRVgKLQkJaWYgKCBhZGp1c3RpbmdfdGltZSApCi0JCQlwcmludGsoInBwY19hZGp0aW1leDogZW5kaW5nIHNpbmdsZSBzaG90IHRpbWVfYWRqdXN0XG4iKTsKLSNlbmRpZgotCQlhZGp1c3RpbmdfdGltZSA9IDA7Ci0JfQotCQotCS8qIEFkZCB1cCBhbGwgb2YgdGhlIGZyZXF1ZW5jeSBhZGp1c3RtZW50cyAqLwotCWRlbHRhX2ZyZXEgPSB0aW1lX2ZyZXEgKyBsdGVtcCArIHNpbmdsZXNob3RfcHBtOwotCQotCS8qCi0JICogQ29tcHV0ZSBhIG5ldyB2YWx1ZSBmb3IgdGJfdGlja3NfcGVyX3NlYyBiYXNlZCBvbgotCSAqIHRoZSBmcmVxdWVuY3kgYWRqdXN0bWVudAotCSAqLwotCWRlbiA9IDEwMDAwMDAgKiAoMSA8PCAoU0hJRlRfVVNFQyAtIDgpKTsKLQlpZiAoIGRlbHRhX2ZyZXEgPCAwICkgewotCQl0Yl90aWNrc19wZXJfc2VjX2RlbHRhID0gKCB0Yl90aWNrc19wZXJfc2VjICogKCAoLWRlbHRhX2ZyZXEpID4+IChTSElGVF9VU0VDIC0gOCkpKSAvIGRlbjsKLQkJbmV3X3RiX3RpY2tzX3Blcl9zZWMgPSB0Yl90aWNrc19wZXJfc2VjICsgdGJfdGlja3NfcGVyX3NlY19kZWx0YTsKLQl9Ci0JZWxzZSB7Ci0JCXRiX3RpY2tzX3Blcl9zZWNfZGVsdGEgPSAoIHRiX3RpY2tzX3Blcl9zZWMgKiAoIGRlbHRhX2ZyZXEgPj4gKFNISUZUX1VTRUMgLSA4KSkpIC8gZGVuOwotCQluZXdfdGJfdGlja3NfcGVyX3NlYyA9IHRiX3RpY2tzX3Blcl9zZWMgLSB0Yl90aWNrc19wZXJfc2VjX2RlbHRhOwotCX0KLQkKLSNpZmRlZiBERUJVR19QUENfQURKVElNRVgKLQlwcmludGsoInBwY19hZGp0aW1leDogbHRlbXAgPSAlbGQsIHRpbWVfZnJlcSA9ICVsZCwgc2luZ2xlc2hvdF9wcG0gPSAlbGRcbiIsIGx0ZW1wLCB0aW1lX2ZyZXEsIHNpbmdsZXNob3RfcHBtKTsKLQlwcmludGsoInBwY19hZGp0aW1leDogdGJfdGlja3NfcGVyX3NlYyAtIGJhc2UgPSAlbGQgIG5ldyA9ICVsZFxuIiwgdGJfdGlja3NfcGVyX3NlYywgbmV3X3RiX3RpY2tzX3Blcl9zZWMpOwotI2VuZGlmCi0KLQkvKgotCSAqIENvbXB1dGUgYSBuZXcgdmFsdWUgb2YgdGJfdG9feHMgKHVzZWQgdG8gY29udmVydCB0YiB0bwotCSAqIG1pY3Jvc2Vjb25kcykgYW5kIGEgbmV3IHZhbHVlIG9mIHN0YW1wX3hzZWMgd2hpY2ggaXMgdGhlCi0JICogdGltZSAoaW4gMS8yXjIwIHNlY29uZCB1bml0cykgY29ycmVzcG9uZGluZyB0bwotCSAqIHRiX29yaWdfc3RhbXAuICBUaGlzIG5ldyB2YWx1ZSBvZiBzdGFtcF94c2VjIGNvbXBlbnNhdGVzCi0JICogZm9yIHRoZSBjaGFuZ2UgaW4gZnJlcXVlbmN5IChpbXBsaWVkIGJ5IHRoZSBuZXcgdGJfdG9feHMpCi0JICogd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjdXJyZW50IHRpbWUgcmVtYWlucyB0aGUgc2FtZS4KLQkgKi8KLQl3cml0ZV9zZXFsb2NrX2lycXNhdmUoICZ4dGltZV9sb2NrLCBmbGFncyApOwotCXRiX3RpY2tzID0gZ2V0X3RiKCkgLSBkb19ndG9kLnZhcnAtPnRiX29yaWdfc3RhbXA7Ci0JZGl2MTI4X2J5XzMyKDEwMjQqMTAyNCwgMCwgbmV3X3RiX3RpY2tzX3Blcl9zZWMsICZkaXZyZXMpOwotCW5ld190Yl90b194cyA9IGRpdnJlcy5yZXN1bHRfbG93OwotCW5ld194c2VjID0gbXVsaGR1KHRiX3RpY2tzLCBuZXdfdGJfdG9feHMpOwotCi0Jb2xkX3hzZWMgPSBtdWxoZHUodGJfdGlja3MsIGRvX2d0b2QudmFycC0+dGJfdG9feHMpOwotCW5ld19zdGFtcF94c2VjID0gZG9fZ3RvZC52YXJwLT5zdGFtcF94c2VjICsgb2xkX3hzZWMgLSBuZXdfeHNlYzsKLQotCXVwZGF0ZV9ndG9kKGRvX2d0b2QudmFycC0+dGJfb3JpZ19zdGFtcCwgbmV3X3N0YW1wX3hzZWMsIG5ld190Yl90b194cyk7Ci0KLQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSggJnh0aW1lX2xvY2ssIGZsYWdzICk7Ci0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCi19Ci0KIAogI2RlZmluZSBGRUJSVUFSWQkyCiAjZGVmaW5lCVNUQVJUT0ZUSU1FCTE5NzAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCA3NTA5YWE2Li45ODY2MGFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC04MTQsNiArODE0LDggQEAKIAkJcmV0dXJuOwogCX0KIAorCWxvY2FsX2lycV9lbmFibGUoKTsKKwogCS8qIFRyeSB0byBlbXVsYXRlIGl0IGlmIHdlIHNob3VsZC4gKi8KIAlpZiAocmVhc29uICYgKFJFQVNPTl9JTExFR0FMIHwgUkVBU09OX1BSSVZJTEVHRUQpKSB7CiAJCXN3aXRjaCAoZW11bGF0ZV9pbnN0cnVjdGlvbihyZWdzKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwppbmRleCBmMGM0N2RhLi5lYzgzNzAzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9wcGM2NC9rZXJuZWwvdmRzby5jCi0gKgogICogICAgQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgogICoJCQkgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KICAqCkBAIC0xODIsOCArMTgwLDggQEAKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OwogCXN0cnVjdCBwYWdlICpwZzsKICNpZmRlZiBDT05GSUdfUFBDNjQKLQl2b2lkICp2YmFzZSA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/Ci0JCXZkc28zMl9rYmFzZSA6IHZkc282NF9rYmFzZTsKKwl2b2lkICp2YmFzZSA9ICh2bWEtPnZtX21tLT50YXNrX3NpemUgPiBUQVNLX1NJWkVfVVNFUjMyKSA/CisJCXZkc282NF9rYmFzZSA6IHZkc28zMl9rYmFzZTsKICNlbHNlCiAJdm9pZCAqdmJhc2UgPSB2ZHNvMzJfa2Jhc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKaW5kZXggY2NhZWRhNS4uNGVlODcxZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKQEAgLTIyNSw5ICsyMjUsOSBAQAogICAuY2ZpX3N0YXJ0cHJvYwogCS8qIGNoZWNrIGZvciB1cGRhdGUgY291bnQgJiBsb2FkIHZhbHVlcyAqLwogMToJbGQJcjgsQ0ZHX1RCX1VQREFURV9DT1VOVChyMykKLQlhbmRpLglyMCxyNCwxCQkJLyogcGVuZGluZyB1cGRhdGUgPyBsb29wICovCisJYW5kaS4JcjAscjgsMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLwogCWJuZS0JMWIKLQl4b3IJcjAscjQscjQJCS8qIGNyZWF0ZSBkZXBlbmRlbmN5ICovCisJeG9yCXIwLHI4LHI4CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLwogCWFkZAlyMyxyMyxyMAogCiAJLyogR2V0IFRCICYgb2Zmc2V0IGl0ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKaW5kZXggNDA1MjNiMS4uZjk4MzdmNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYzY0L2xpYi9jb3B5cGFnZS5TCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAyIFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHl1c2VyXzY0LlMKaW5kZXggNmQ2OWVmMy4uYTZiNTRjYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5dXNlcl82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvY29weXVzZXJfNjQuUwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYzY0L2xpYi9jb3B5dXNlci5TCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAyIFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2UyYS5jIGIvYXJjaC9wb3dlcnBjL2xpYi9lMmEuYwppbmRleCBkMmI4MzQ4Li40YjcyZWQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2UyYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvZTJhLmMKQEAgLTEsOSArMSw3IEBACiAvKgotICogIGFyY2gvcHBjNjQvbGliL2UyYS5jCi0gKgogICogIEVCQ0RJQyB0byBBU0NJSSBjb252ZXJzaW9uCiAgKgotICogVGhpcyBmdW5jdGlvbiBtb3ZlZCBoZXJlIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmlvcGF0aC5jCisgKiBUaGlzIGZ1bmN0aW9uIG1vdmVkIGhlcmUgZnJvbSBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jIAogICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0IElCTSBDb3Jwb3JhdGlvbgogICoKQEAgLTEwNSw0ICsxMDMsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0woZTJhKTsKIAordW5zaWduZWQgY2hhciogc3RybmUyYSh1bnNpZ25lZCBjaGFyICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBuKQoreworCWludCBpOwogCisJbiA9IHN0cm5sZW4oc3JjLCBuKTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWRlc3RbaV0gPSBlMmEoc3JjW2ldKTsKKworCXJldHVybiBkZXN0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9tZW1jcHlfNjQuUyBiL2FyY2gvcG93ZXJwYy9saWIvbWVtY3B5XzY0LlMKaW5kZXggOWNjYWNkZi4uZmQ2NmFjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9tZW1jcHlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL21lbWNweV82NC5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjNjQvbGliL21lbWNweS5TCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAyIFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMgYi9hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMKaW5kZXggNDJjNWRlMi4uMzFlNTExOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvcmhlYXAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvcmhlYXAuYwotICoKICAqIEEgUmVtb3RlIEhlYXAuICBSZW1vdGUgbWVhbnMgdGhhdCB3ZSBkb24ndCB0b3VjaCB0aGUgbWVtb3J5IHRoYXQgdGhlCiAgKiBoZWFwIHBvaW50cyB0by4gTm9ybWFsIGhlYXAgaW1wbGVtZW50YXRpb25zIHVzZSB0aGUgbWVtb3J5IHRoZXkgbWFuYWdlCiAgKiB0byBwbGFjZSB0aGVpciBsaXN0LiBXZSBjYW5ub3QgZG8gdGhhdCBiZWNhdXNlIHRoZSBtZW1vcnkgd2UgbWFuYWdlIG1heQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwppbmRleCBhNDgxNWQzLi5lYzRhZGNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGMvbW0vZmF1bHQuYwotICoKICAqICBQb3dlclBDIHZlcnNpb24KICAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd18zMi5TIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMKaW5kZXggMTJjY2Q3MS4uZWE0NjllZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzMyLlMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL2tlcm5lbC9oYXNodGFibGUuUwotICoKICAqICAkSWQ6IGhhc2h0YWJsZS5TLHYgMS42IDE5OTkvMTAvMDggMDE6NTY6MTUgcGF1bHVzIEV4cCAkCiAgKgogICogIFBvd2VyUEMgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYwppbmRleCBkOTZiY2ZlLi4zMzY1NGQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYwpAQCAtNDAzLDEyICs0MDMsMTcgQEAKIAkJICovCiAJCWhwdGVfdiA9IGhwdGVwLT52OwogCisJCS8qCisJCSAqIENhbGwgX190bGJpZSgpIGhlcmUgcmF0aGVyIHRoYW4gdGxiaWUoKSBzaW5jZSB3ZQorCQkgKiBhbHJlYWR5IGhvbGQgdGhlIG5hdGl2ZV90bGJpZV9sb2NrLgorCQkgKi8KIAkJaWYgKGhwdGVfdiAmIEhQVEVfVl9WQUxJRCkgewogCQkJaHB0ZXAtPnYgPSAwOwotCQkJdGxiaWUoc2xvdDJ2YShocHRlX3YsIHNsb3QpLCBNTVVfUEFHRV80SywgMCk7CisJCQlfX3RsYmllKHNsb3QydmEoaHB0ZV92LCBzbG90KSwgTU1VX1BBR0VfNEspOwogCQl9CiAJfQogCisJYXNtIHZvbGF0aWxlKCJlaWVpbzsgdGxic3luYzsgcHRlc3luYyI6OjoibWVtb3J5Iik7CiAJc3Bpbl91bmxvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCAxNDkzNTFhLi44OWIzNWMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTg4LDYgKzg4LDcgQEAKIHN0cnVjdCBtbXVfcHNpemVfZGVmIG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFX0NPVU5UXTsKIAogaHB0ZV90ICpodGFiX2FkZHJlc3M7Cit1bnNpZ25lZCBsb25nIGh0YWJfc2l6ZV9ieXRlczsKIHVuc2lnbmVkIGxvbmcgaHRhYl9oYXNoX21hc2s7CiBpbnQgbW11X2xpbmVhcl9wc2l6ZSA9IE1NVV9QQUdFXzRLOwogaW50IG1tdV92aXJ0dWFsX3BzaXplID0gTU1VX1BBR0VfNEs7CkBAIC0xNjgsNyArMTY5LDcgQEAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIAkJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX0lTRVJJRVNfTFBBUikKIAkJCXJldCA9IGlTZXJpZXNfaHB0ZV9pbnNlcnQoaHB0ZWcsIHZhLAotCQkJCQkJICB2aXJ0X3RvX2FicyhwYWRkciksCisJCQkJCQkgIHBhZGRyLAogCQkJCQkJICB0bXBfbW9kZSwKIAkJCQkJCSAgSFBURV9WX0JPTFRFRCwKIAkJCQkJCSAgcHNpemUpOwpAQCAtMTc3LDcgKzE3OCw3IEBACiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiAJCWlmIChfbWFjaGluZSAmIFBMQVRGT1JNX0xQQVIpCiAJCQlyZXQgPSBwU2VyaWVzX2xwYXJfaHB0ZV9pbnNlcnQoaHB0ZWcsIHZhLAotCQkJCQkJICAgICAgIHZpcnRfdG9fYWJzKHBhZGRyKSwKKwkJCQkJCSAgICAgICBwYWRkciwKIAkJCQkJCSAgICAgICB0bXBfbW9kZSwKIAkJCQkJCSAgICAgICBIUFRFX1ZfQk9MVEVELAogCQkJCQkJICAgICAgIHBzaXplKTsKQEAgLTE4NSw3ICsxODYsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJCQlyZXQgPSBuYXRpdmVfaHB0ZV9pbnNlcnQoaHB0ZWcsIHZhLAotCQkJCQkJIHZpcnRfdG9fYWJzKHBhZGRyKSwKKwkJCQkJCSBwYWRkciwKIAkJCQkJCSB0bXBfbW9kZSwgSFBURV9WX0JPTFRFRCwKIAkJCQkJCSBwc2l6ZSk7CiAjZW5kaWYKQEAgLTM5MSw3ICszOTIsNyBAQAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogdm9pZCBjcmVhdGVfc2VjdGlvbl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCQlCVUdfT04oaHRhYl9ib2x0X21hcHBpbmcoc3RhcnQsIGVuZCwgc3RhcnQsCisJCUJVR19PTihodGFiX2JvbHRfbWFwcGluZyhzdGFydCwgZW5kLCBfX3BhKHN0YXJ0KSwKIAkJCV9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9DT0hFUkVOVCB8IFBQX1JXWFgsCiAJCQltbXVfbGluZWFyX3BzaXplKSk7CiB9CkBAIC0zOTksNyArNDAwLDcgQEAKIAogdm9pZCBfX2luaXQgaHRhYl9pbml0aWFsaXplKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyB0YWJsZSwgaHRhYl9zaXplX2J5dGVzOworCXVuc2lnbmVkIGxvbmcgdGFibGU7CiAJdW5zaWduZWQgbG9uZyBwdGVnX2NvdW50OwogCXVuc2lnbmVkIGxvbmcgbW9kZV9ydzsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSAwLCBzaXplID0gMDsKQEAgLTQyMSw3ICs0MjIsNyBAQAogCiAJaHRhYl9oYXNoX21hc2sgPSBwdGVnX2NvdW50IC0gMTsKIAotCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpIHsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkgewogCQkvKiBVc2luZyBhIGh5cGVydmlzb3Igd2hpY2ggb3ducyB0aGUgaHRhYiAqLwogCQlodGFiX2FkZHJlc3MgPSBOVUxMOwogCQlfU0RSMSA9IDA7IApAQCAtNDMwLDcgKzQzMSw2IEBACiAJCSAqIHRoZSBhYnNvbHV0ZSBhZGRyZXNzIHNwYWNlLgogCQkgKi8KIAkJdGFibGUgPSBsbWJfYWxsb2MoaHRhYl9zaXplX2J5dGVzLCBodGFiX3NpemVfYnl0ZXMpOwotCQlCVUdfT04odGFibGUgPT0gMCk7CiAKIAkJREJHKCJIYXNoIHRhYmxlIGFsbG9jYXRlZCBhdCAlbHgsIHNpemU6ICVseFxuIiwgdGFibGUsCiAJCSAgICBodGFiX3NpemVfYnl0ZXMpOwpAQCAtNDczLDIxICs0NzMsMjIgQEAKIAogCQlpZiAoZGFydF90YWJsZWJhc2UgIT0gMCAmJiBkYXJ0X3RhYmxlYmFzZSA+PSBiYXNlCiAJCSAgICAmJiBkYXJ0X3RhYmxlYmFzZSA8IChiYXNlICsgc2l6ZSkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZGFydF90YWJsZV9lbmQgPSBkYXJ0X3RhYmxlYmFzZSArIDE2ICogTUI7CiAJCQlpZiAoYmFzZSAhPSBkYXJ0X3RhYmxlYmFzZSkKIAkJCQlCVUdfT04oaHRhYl9ib2x0X21hcHBpbmcoYmFzZSwgZGFydF90YWJsZWJhc2UsCi0JCQkJCQkJIGJhc2UsIG1vZGVfcncsCi0JCQkJCQkJIG1tdV9saW5lYXJfcHNpemUpKTsKLQkJCWlmICgoYmFzZSArIHNpemUpID4gKGRhcnRfdGFibGViYXNlICsgMTYqTUIpKQorCQkJCQkJCV9fcGEoYmFzZSksIG1vZGVfcncsCisJCQkJCQkJbW11X2xpbmVhcl9wc2l6ZSkpOworCQkJaWYgKChiYXNlICsgc2l6ZSkgPiBkYXJ0X3RhYmxlX2VuZCkKIAkJCQlCVUdfT04oaHRhYl9ib2x0X21hcHBpbmcoZGFydF90YWJsZWJhc2UrMTYqTUIsCi0JCQkJCQkJIGJhc2UgKyBzaXplLAotCQkJCQkJCSBkYXJ0X3RhYmxlYmFzZSsxNipNQiwKKwkJCQkJCQliYXNlICsgc2l6ZSwKKwkJCQkJCQlfX3BhKGRhcnRfdGFibGVfZW5kKSwKIAkJCQkJCQkgbW9kZV9ydywKIAkJCQkJCQkgbW11X2xpbmVhcl9wc2l6ZSkpOwogCQkJY29udGludWU7CiAJCX0KICNlbmRpZiAvKiBDT05GSUdfVTNfREFSVCAqLwotCQlCVUdfT04oaHRhYl9ib2x0X21hcHBpbmcoYmFzZSwgYmFzZSArIHNpemUsIGJhc2UsCi0JCQkJCSBtb2RlX3J3LCBtbXVfbGluZWFyX3BzaXplKSk7CisJCUJVR19PTihodGFiX2JvbHRfbWFwcGluZyhiYXNlLCBiYXNlICsgc2l6ZSwgX19wYShiYXNlKSwKKwkJCQkJbW9kZV9ydywgbW11X2xpbmVhcl9wc2l6ZSkpOwogICAgICAgIH0KIAogCS8qCkBAIC01MDQsOCArNTA1LDggQEAKIAkJaWYgKGJhc2UgKyBzaXplID49IHRjZV9hbGxvY19zdGFydCkKIAkJCXRjZV9hbGxvY19zdGFydCA9IGJhc2UgKyBzaXplICsgMTsKIAotIAkJQlVHX09OKGh0YWJfYm9sdF9tYXBwaW5nKHRjZV9hbGxvY19zdGFydCwgdGNlX2FsbG9jX2VuZCwKLSAJCQkJCSB0Y2VfYWxsb2Nfc3RhcnQsIG1vZGVfcncsCisJCUJVR19PTihodGFiX2JvbHRfbWFwcGluZyh0Y2VfYWxsb2Nfc3RhcnQsIHRjZV9hbGxvY19lbmQsCisJCQkJCSBfX3BhKHRjZV9hbGxvY19zdGFydCksIG1vZGVfcncsCiAJCQkJCSBtbXVfbGluZWFyX3BzaXplKSk7CiAJfQogCkBAIC01MTYsNyArNTE3LDcgQEAKIAogdm9pZCBodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0JaWYgKCFwbGF0Zm9ybV9pc19scGFyKCkpCisJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQltdHNwcihTUFJOX1NEUjEsIF9TRFIxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCBiNTFiYjI4Li43MzcwZjlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTMzLDIxICsxMzMsNiBAQAogCXJldHVybiBfX3B0ZShvbGQpOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHByb3BlciBhbGlnbm1lbnQgb2YgaW5wdXQgYWRkciBhbmQgbGVuIHBhcmFtZXRlcnMuCi0gKi8KLWludCBpc19hbGlnbmVkX2h1Z2VwYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JaWYgKGxlbiAmIH5IUEFHRV9NQVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoYWRkciAmIH5IUEFHRV9NQVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoISAod2l0aGluX2h1Z2VwYWdlX2xvd19yYW5nZShhZGRyLCBsZW4pCi0JICAgICAgIHx8IHdpdGhpbl9odWdlcGFnZV9oaWdoX3JhbmdlKGFkZHIsIGxlbikpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0cnVjdCBzbGJfZmx1c2hfaW5mbyB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdTE2IG5ld2FyZWFzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKaW5kZXggN2QwZDc1Yy4uYjU3ZmIzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAogCXdoaWxlIChzdGFydCA8IGVuZCkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKIAkJZnJlZV9wYWdlKHN0YXJ0KTsKIAkJY250Kys7CiAJCXN0YXJ0ICs9IFBBR0VfU0laRTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQlwcmludGsgKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsIChlbmQgLSBzdGFydCkgPj4gMTApOwogCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwogCQlmcmVlX3BhZ2Uoc3RhcnQpOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IDgxY2ZiMGMuLmJhYmViZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtODQsNTQgKzg0LDYgQEAKIC8qIG1heCBhbW91bnQgb2YgUkFNIHRvIHVzZSAqLwogdW5zaWduZWQgbG9uZyBfX21heF9tZW1vcnk7CiAKLS8qIGluZm8gb24gd2hhdCB3ZSB0aGluayB0aGUgSU8gaG9sZSBpcyAqLwotdW5zaWduZWQgbG9uZyAJaW9faG9sZV9zdGFydDsKLXVuc2lnbmVkIGxvbmcJaW9faG9sZV9zaXplOwotCi0vKgotICogRG8gdmVyeSBlYXJseSBtbSBzZXR1cC4KLSAqLwotdm9pZCBfX2luaXQgbW1faW5pdF9wcGM2NCh2b2lkKQotewotI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLQl1bnNpZ25lZCBsb25nIGk7Ci0jZW5kaWYKLQotCXBwYzY0X2Jvb3RfbXNnKDB4MTAwLCAiTU0gSW5pdCIpOwotCi0JLyogVGhpcyBpcyB0aGUgc3Rvcnkgb2YgdGhlIElPIGhvbGUuLi4gcGxlYXNlLCBrZWVwIHNlYXRlZCwKLQkgKiB1bmZvcnR1bmF0ZWx5LCB3ZSBhcmUgb3V0IG9mIG94eWdlbiBtYXNrcyBhdCB0aGUgbW9tZW50LgotCSAqIFNvIHdlIG5lZWQgc29tZSByb3VnaCB3YXkgdG8gdGVsbCB3aGVyZSB5b3VyIGJpZyBJTyBob2xlCi0JICogaXMuIE9uIHBtYWMsIGl0J3MgYmV0d2VlbiAyRyBhbmQgNEcsIG9uIFBPV0VSMywgaXQncyBhcm91bmQKLQkgKiB0aGF0IGFyZWEgYXMgd2VsbCwgb24gUE9XRVI0IHdlIGRvbid0IGhhdmUgb25lLCBldGMuLi4KLQkgKiBXZSBuZWVkIHRoYXQgYXMgYSAiaGludCIgd2hlbiBzaXppbmcgdGhlIFRDRSB0YWJsZSBvbiBQT1dFUjMKLQkgKiBTbyBmYXIsIHRoZSBzaW1wbGVzdCB3YXkgdGhhdCBzZWVtIHdvcmsgd2VsbCBlbm91Z2ggZm9yIHVzIGl0Ci0JICogdG8ganVzdCBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgZGlzY29udGludWl0eSBpbiBvdXIgcGh5c2ljYWwKLQkgKiBSQU0gbGF5b3V0IGlzIHRoZSBJTyBob2xlLiBUaGF0IG1heSBub3QgYmUgY29ycmVjdCBpbiB0aGUgZnV0dXJlCi0JICogKGFuZCBpc24ndCBvbiBpU2VyaWVzIGJ1dCB0aGVuIHdlIGRvbid0IGNhcmUgOykKLQkgKi8KLQotI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLQlmb3IgKGkgPSAxOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGJhc2UsIHByZXZiYXNlLCBwcmV2c2l6ZTsKLQotCQlwcmV2YmFzZSA9IGxtYi5tZW1vcnkucmVnaW9uW2ktMV0uYmFzZTsKLQkJcHJldnNpemUgPSBsbWIubWVtb3J5LnJlZ2lvbltpLTFdLnNpemU7Ci0JCWJhc2UgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlOwotCQlpZiAoYmFzZSA+IChwcmV2YmFzZSArIHByZXZzaXplKSkgewotCQkJaW9faG9sZV9zdGFydCA9IHByZXZiYXNlICsgcHJldnNpemU7Ci0JCQlpb19ob2xlX3NpemUgPSBiYXNlICAtIChwcmV2YmFzZSArIHByZXZzaXplKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLwotCWlmIChpb19ob2xlX3N0YXJ0KQotCQlwcmludGsoIklPIEhvbGUgYXNzdW1lZCB0byBiZSAlbHggLT4gJWx4XG4iLAotCQkgICAgICAgaW9faG9sZV9zdGFydCwgaW9faG9sZV9zdGFydCArIGlvX2hvbGVfc2l6ZSAtIDEpOwotCi0JcHBjNjRfYm9vdF9tc2coMHgxMDAsICJNTSBJbml0IERvbmUiKTsKLX0KLQogdm9pZCBmcmVlX2luaXRtZW0odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CkBAIC0xNDAsNyArOTIsNyBAQAogCWZvciAoOyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX19pbml0X2VuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJbWVtc2V0KCh2b2lkICopYWRkciwgMHhjYywgUEFHRV9TSVpFKTsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CiAJCWZyZWVfcGFnZShhZGRyKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CkBAIC0xNTUsNyArMTA3LDcgQEAKIAkJcHJpbnRrICgiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLCAoZW5kIC0gc3RhcnQpID4+IDEwKTsKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKIAkJZnJlZV9wYWdlKHN0YXJ0KTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbG1iLmMgYi9hcmNoL3Bvd2VycGMvbW0vbG1iLmMKaW5kZXggYmJlM2VhYy4uNDE3ZDU4NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2xtYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9sbWIuYwpAQCAtMzEsNiArMzEsOCBAQAogI2RlZmluZSBEQkcoZm10Li4uKQogI2VuZGlmCiAKKyNkZWZpbmUgTE1CX0FMTE9DX0FOWVdIRVJFCTAKKwogc3RydWN0IGxtYiBsbWI7CiAKIHZvaWQgbG1iX2R1bXBfYWxsKHZvaWQpCkBAIC0yMjYsNiArMjI4LDIwIEBACiB1bnNpZ25lZCBsb25nIF9faW5pdCBsbWJfYWxsb2NfYmFzZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgbWF4X2FkZHIpCiB7CisJdW5zaWduZWQgbG9uZyBhbGxvYzsKKworCWFsbG9jID0gX19sbWJfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgbWF4X2FkZHIpOworCisJaWYgKGFsbG9jID09IDApCisJCXBhbmljKCJFUlJPUjogRmFpbGVkIHRvIGFsbG9jYXRlIDB4JWx4IGJ5dGVzIGJlbG93IDB4JWx4LlxuIiwKKwkJCQlzaXplLCBtYXhfYWRkcik7CisKKwlyZXR1cm4gYWxsb2M7Cit9CisKK3Vuc2lnbmVkIGxvbmcgX19pbml0IF9fbG1iX2FsbG9jX2Jhc2UodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG1heF9hZGRyKQorewogCWxvbmcgaSwgajsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggNTUwNTE3Yy4uYmFkYWMxMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtMTA4LDggKzEwOCw4IEBACiB2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwotCWZyZWVfY29sZF9wYWdlKHBhZ2UpOworCWluaXRfcGFnZV9jb3VudChwYWdlKTsKKwlfX2ZyZWVfcGFnZShwYWdlKTsKIAl0b3RhbHJhbV9wYWdlcysrOwogCW51bV9waHlzcGFnZXMrKzsKIH0KQEAgLTEyNSw3ICsxMjUsNyBAQAogCW5pZCA9IGhvdF9hZGRfc2NuX3RvX25pZChzdGFydCk7CiAJcGdkYXRhID0gTk9ERV9EQVRBKG5pZCk7CiAKLQlzdGFydCA9IF9fdmEoc3RhcnQpOworCXN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShzdGFydCk7CiAJY3JlYXRlX3NlY3Rpb25fbWFwcGluZyhzdGFydCwgc3RhcnQgKyBzaXplKTsKIAogCS8qIHRoaXMgc2hvdWxkIHdvcmsgZm9yIG1vc3Qgbm9uLWhpZ2htZW0gcGxhdGZvcm1zICovCkBAIC0yNDksNyArMjQ5LDYgQEAKIAlib290bWFwX3BhZ2VzID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKHRvdGFsX3BhZ2VzKTsKIAogCXN0YXJ0ID0gbG1iX2FsbG9jKGJvb3RtYXBfcGFnZXMgPDwgUEFHRV9TSElGVCwgUEFHRV9TSVpFKTsKLQlCVUdfT04oIXN0YXJ0KTsKIAogCWJvb3RfbWFwc2l6ZSA9IGluaXRfYm9vdG1lbShzdGFydCA+PiBQQUdFX1NISUZULCB0b3RhbF9wYWdlcyk7CiAKQEAgLTM3Niw3ICszNzUsNyBAQAogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCiAJCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQkJaW5pdF9wYWdlX2NvdW50KHBhZ2UpOwogCQkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCQl0b3RhbGhpZ2hfcGFnZXMrKzsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tYXAuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbWFwLmMKaW5kZXggZmU2NWY1MjIuLjk3MmE4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbWFwLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tYXAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9wcGM2NC9tbS9tbWFwLmMKLSAqCiAgKiAgZmxleGlibGUgbW1hcCBsYXlvdXQgc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAyMDAzLTIwMDQgUmVkIEhhdCBJbmMuLCBEdXJoYW0sIE5vcnRoIENhcm9saW5hLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggMjg2M2E5MS4uZTg5YjIyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xMjksMTAgKzEyOSwxMiBAQAogCQkqc3RhcnRfcGZuID0gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1hcF9jcHVfdG9fbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBtYXBfY3B1X3RvX25vZGUoaW50IGNwdSwgaW50IG5vZGUpCiB7CiAJbnVtYV9jcHVfbG9va3VwX3RhYmxlW2NwdV0gPSBub2RlOwogCisJZGJnKCJhZGRpbmcgY3B1ICVkIHRvIG5vZGUgJWRcbiIsIGNwdSwgbm9kZSk7CisKIAlpZiAoIShjcHVfaXNzZXQoY3B1LCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdKSkpCiAJCWNwdV9zZXQoY3B1LCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdKTsKIH0KQEAgLTE1Myw3ICsxNTUsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpmaW5kX2NwdV9ub2RlKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogX19jcHVpbml0IGZpbmRfY3B1X25vZGUodW5zaWduZWQgaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgaHdfY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CiAJc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSA9IE5VTEw7CkBAIC0xODksMjMgKzE5MSwyOSBAQAogCXJldHVybiAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KGRldiwgImlibSxhc3NvY2lhdGl2aXR5IiwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgb2Zfbm9kZV9udW1hX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSkKKy8qIFJldHVybnMgbmlkIGluIHRoZSByYW5nZSBbMC4uTUFYX05VTU5PREVTLTFdLCBvciAtMSBpZiBubyB1c2VmdWwgbnVtYQorICogaW5mbyBpcyBmb3VuZC4KKyAqLworc3RhdGljIGludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSkKIHsKLQlpbnQgbnVtYV9kb21haW47CisJaW50IG5pZCA9IC0xOwogCXVuc2lnbmVkIGludCAqdG1wOwogCiAJaWYgKG1pbl9jb21tb25fZGVwdGggPT0gLTEpCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAogCXRtcCA9IG9mX2dldF9hc3NvY2lhdGl2aXR5KGRldmljZSk7Ci0JaWYgKHRtcCAmJiAodG1wWzBdID49IG1pbl9jb21tb25fZGVwdGgpKSB7Ci0JCW51bWFfZG9tYWluID0gdG1wW21pbl9jb21tb25fZGVwdGhdOwotCX0gZWxzZSB7Ci0JCWRiZygiV0FSTklORzogbm8gTlVNQSBpbmZvcm1hdGlvbiBmb3IgJXNcbiIsCi0JCSAgICBkZXZpY2UtPmZ1bGxfbmFtZSk7Ci0JCW51bWFfZG9tYWluID0gMDsKLQl9Ci0JcmV0dXJuIG51bWFfZG9tYWluOworCWlmICghdG1wKQorCQlnb3RvIG91dDsKKworCWlmICh0bXBbMF0gPj0gbWluX2NvbW1vbl9kZXB0aCkKKwkJbmlkID0gdG1wW21pbl9jb21tb25fZGVwdGhdOworCisJLyogUE9XRVI0IExQQVIgdXNlcyAweGZmZmYgYXMgaW52YWxpZCBub2RlICovCisJaWYgKG5pZCA9PSAweGZmZmYgfHwgbmlkID49IE1BWF9OVU1OT0RFUykKKwkJbmlkID0gLTE7CitvdXQ6CisJcmV0dXJuIG5pZDsKIH0KIAogLyoKQEAgLTI0Niw4ICsyNTQsNyBAQAogCWlmICgobGVuID49IDEpICYmIHJlZl9wb2ludHMpIHsKIAkJZGVwdGggPSByZWZfcG9pbnRzWzFdOwogCX0gZWxzZSB7Ci0JCWRiZygiV0FSTklORzogY291bGQgbm90IGZpbmQgTlVNQSAiCi0JCSAgICAiYXNzb2NpYXRpdml0eSByZWZlcmVuY2UgcG9pbnRcbiIpOworCQlkYmcoIk5VTUE6IGlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMgbm90IGZvdW5kLlxuIik7CiAJCWRlcHRoID0gLTE7CiAJfQogCW9mX25vZGVfcHV0KHJ0YXNfcm9vdCk7CkBAIC0yODMsOSArMjkwLDkgQEAKICAqIEZpZ3VyZSBvdXQgdG8gd2hpY2ggZG9tYWluIGEgY3B1IGJlbG9uZ3MgYW5kIHN0aWNrIGl0IHRoZXJlLgogICogUmV0dXJuIHRoZSBpZCBvZiB0aGUgZG9tYWluIHVzZWQuCiAgKi8KLXN0YXRpYyBpbnQgbnVtYV9zZXR1cF9jcHUodW5zaWduZWQgbG9uZyBsY3B1KQorc3RhdGljIGludCBfX2NwdWluaXQgbnVtYV9zZXR1cF9jcHUodW5zaWduZWQgbG9uZyBsY3B1KQogewotCWludCBudW1hX2RvbWFpbiA9IDA7CisJaW50IG5pZCA9IDA7CiAJc3RydWN0IGRldmljZV9ub2RlICpjcHUgPSBmaW5kX2NwdV9ub2RlKGxjcHUpOwogCiAJaWYgKCFjcHUpIHsKQEAgLTI5MywyNyArMzAwLDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW51bWFfZG9tYWluID0gb2Zfbm9kZV9udW1hX2RvbWFpbihjcHUpOworCW5pZCA9IG9mX25vZGVfdG9fbmlkKGNwdSk7CiAKLQlpZiAobnVtYV9kb21haW4gPj0gbnVtX29ubGluZV9ub2RlcygpKSB7Ci0JCS8qCi0JCSAqIFBPV0VSNCBMUEFSIHVzZXMgMHhmZmZmIGFzIGludmFsaWQgbm9kZSwKLQkJICogZG9udCB3YXJuIGluIHRoaXMgY2FzZS4KLQkJICovCi0JCWlmIChudW1hX2RvbWFpbiAhPSAweGZmZmYpCi0JCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IGNwdSAlbGQgIgotCQkJICAgICAgICJtYXBzIHRvIGludmFsaWQgTlVNQSBub2RlICVkXG4iLAotCQkJICAgICAgIGxjcHUsIG51bWFfZG9tYWluKTsKLQkJbnVtYV9kb21haW4gPSAwOwotCX0KKwlpZiAobmlkIDwgMCB8fCAhbm9kZV9vbmxpbmUobmlkKSkKKwkJbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOwogb3V0OgotCW5vZGVfc2V0X29ubGluZShudW1hX2RvbWFpbik7Ci0KLQltYXBfY3B1X3RvX25vZGUobGNwdSwgbnVtYV9kb21haW4pOworCW1hcF9jcHVfdG9fbm9kZShsY3B1LCBuaWQpOwogCiAJb2Zfbm9kZV9wdXQoY3B1KTsKIAotCXJldHVybiBudW1hX2RvbWFpbjsKKwlyZXR1cm4gbmlkOwogfQogCiBzdGF0aWMgaW50IGNwdV9udW1hX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLApAQCAtMzI1LDEwICszMjEsNyBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9VUF9QUkVQQVJFOgotCQlpZiAobWluX2NvbW1vbl9kZXB0aCA9PSAtMSB8fCAhbnVtYV9lbmFibGVkKQotCQkJbWFwX2NwdV90b19ub2RlKGxjcHUsIDApOwotCQllbHNlCi0JCQludW1hX3NldHVwX2NwdShsY3B1KTsKKwkJbnVtYV9zZXR1cF9jcHUobGNwdSk7CiAJCXJldCA9IE5PVElGWV9PSzsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCkBAIC0zNzUsNyArMzY4LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSA9IE5VTEw7CiAJc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkgPSBOVUxMOwotCWludCBtYXhfZG9tYWluOworCWludCBkZWZhdWx0X25pZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBpOwogCiAJaWYgKG51bWFfZW5hYmxlZCA9PSAwKSB7CkBAIC0zODUsMzIgKzM3OCwzMiBAQAogCiAJbWluX2NvbW1vbl9kZXB0aCA9IGZpbmRfbWluX2NvbW1vbl9kZXB0aCgpOwogCi0JZGJnKCJOVU1BIGFzc29jaWF0aXZpdHkgZGVwdGggZm9yIENQVS9NZW1vcnk6ICVkXG4iLCBtaW5fY29tbW9uX2RlcHRoKTsKIAlpZiAobWluX2NvbW1vbl9kZXB0aCA8IDApCiAJCXJldHVybiBtaW5fY29tbW9uX2RlcHRoOwogCi0JbWF4X2RvbWFpbiA9IG51bWFfc2V0dXBfY3B1KGJvb3RfY3B1aWQpOworCWRiZygiTlVNQSBhc3NvY2lhdGl2aXR5IGRlcHRoIGZvciBDUFUvTWVtb3J5OiAlZFxuIiwgbWluX2NvbW1vbl9kZXB0aCk7CiAKIAkvKgotCSAqIEV2ZW4gdGhvdWdoIHdlIGNvbm5lY3QgY3B1cyB0byBudW1hIGRvbWFpbnMgbGF0ZXIgaW4gU01QIGluaXQsCi0JICogd2UgbmVlZCB0byBrbm93IHRoZSBtYXhpbXVtIG5vZGUgaWQgbm93LiBUaGlzIGlzIGJlY2F1c2UgZWFjaAotCSAqIG5vZGUgaWQgbXVzdCBoYXZlIE5PREVfREFUQSBldGMgYmFja2luZyBpdC4KLQkgKiBBcyBhIHJlc3VsdCBvZiBob3RwbHVnIHdlIGNvdWxkIHN0aWxsIGhhdmUgY3B1cyBhcHBlYXIgbGF0ZXIgb24KLQkgKiB3aXRoIGxhcmdlciBub2RlIGlkcy4gSW4gdGhhdCBjYXNlIHdlIGZvcmNlIHRoZSBjcHUgaW50byBub2RlIDAuCisJICogRXZlbiB0aG91Z2ggd2UgY29ubmVjdCBjcHVzIHRvIG51bWEgZG9tYWlucyBsYXRlciBpbiBTTVAKKwkgKiBpbml0LCB3ZSBuZWVkIHRvIGtub3cgdGhlIG5vZGUgaWRzIG5vdy4gVGhpcyBpcyBiZWNhdXNlCisJICogZWFjaCBub2RlIHRvIGJlIG9ubGluZWQgbXVzdCBoYXZlIE5PREVfREFUQSBldGMgYmFja2luZyBpdC4KIAkgKi8KLQlmb3JfZWFjaF9jcHUoaSkgewotCQlpbnQgbnVtYV9kb21haW47CisJZm9yX2VhY2hfcHJlc2VudF9jcHUoaSkgeworCQlpbnQgbmlkOwogCiAJCWNwdSA9IGZpbmRfY3B1X25vZGUoaSk7CisJCUJVR19PTighY3B1KTsKKwkJbmlkID0gb2Zfbm9kZV90b19uaWQoY3B1KTsKKwkJb2Zfbm9kZV9wdXQoY3B1KTsKIAotCQlpZiAoY3B1KSB7Ci0JCQludW1hX2RvbWFpbiA9IG9mX25vZGVfbnVtYV9kb21haW4oY3B1KTsKLQkJCW9mX25vZGVfcHV0KGNwdSk7Ci0KLQkJCWlmIChudW1hX2RvbWFpbiA8IE1BWF9OVU1OT0RFUyAmJgotCQkJICAgIG1heF9kb21haW4gPCBudW1hX2RvbWFpbikKLQkJCQltYXhfZG9tYWluID0gbnVtYV9kb21haW47Ci0JCX0KKwkJLyoKKwkJICogRG9uJ3QgZmFsbCBiYWNrIHRvIGRlZmF1bHRfbmlkIHlldCAtLSB3ZSB3aWxsIHBsdWcKKwkJICogY3B1cyBpbnRvIG5vZGVzIG9uY2UgdGhlIG1lbW9yeSBzY2FuIGhhcyBkaXNjb3ZlcmVkCisJCSAqIHRoZSB0b3BvbG9neS4KKwkJICovCisJCWlmIChuaWQgPCAwKQorCQkJY29udGludWU7CisJCW5vZGVfc2V0X29ubGluZShuaWQpOwogCX0KIAogCWdldF9uX21lbV9jZWxscygmbl9tZW1fYWRkcl9jZWxscywgJm5fbWVtX3NpemVfY2VsbHMpOwpAQCAtNDE4LDcgKzQxMSw3IEBACiAJd2hpbGUgKChtZW1vcnkgPSBvZl9maW5kX25vZGVfYnlfdHlwZShtZW1vcnksICJtZW1vcnkiKSkgIT0gTlVMTCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JCWludCBudW1hX2RvbWFpbjsKKwkJaW50IG5pZDsKIAkJaW50IHJhbmdlczsKIAkJdW5zaWduZWQgaW50ICptZW1jZWxsX2J1ZjsKIAkJdW5zaWduZWQgaW50IGxlbjsKQEAgLTQzOSwxOCArNDMyLDE1IEBACiAJCXN0YXJ0ID0gcmVhZF9uX2NlbGxzKG5fbWVtX2FkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7CiAJCXNpemUgPSByZWFkX25fY2VsbHMobl9tZW1fc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKIAotCQludW1hX2RvbWFpbiA9IG9mX25vZGVfbnVtYV9kb21haW4obWVtb3J5KTsKLQotCQlpZiAobnVtYV9kb21haW4gPj0gTUFYX05VTU5PREVTKSB7Ci0JCQlpZiAobnVtYV9kb21haW4gIT0gMHhmZmZmKQotCQkJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogbWVtb3J5IGF0ICVseCBtYXBzICIKLQkJCQkgICAgICAgInRvIGludmFsaWQgTlVNQSBub2RlICVkXG4iLCBzdGFydCwKLQkJCQkgICAgICAgbnVtYV9kb21haW4pOwotCQkJbnVtYV9kb21haW4gPSAwOwotCQl9Ci0KLQkJaWYgKG1heF9kb21haW4gPCBudW1hX2RvbWFpbikKLQkJCW1heF9kb21haW4gPSBudW1hX2RvbWFpbjsKKwkJLyoKKwkJICogQXNzdW1wdGlvbjogZWl0aGVyIGFsbCBtZW1vcnkgbm9kZXMgb3Igbm9uZSB3aWxsCisJCSAqIGhhdmUgYXNzb2NpYXRpdml0eSBwcm9wZXJ0aWVzLiAgSWYgbm9uZSwgdGhlbgorCQkgKiBldmVyeXRoaW5nIGdvZXMgdG8gZGVmYXVsdF9uaWQuCisJCSAqLworCQluaWQgPSBvZl9ub2RlX3RvX25pZChtZW1vcnkpOworCQlpZiAobmlkIDwgMCkKKwkJCW5pZCA9IGRlZmF1bHRfbmlkOworCQlub2RlX3NldF9vbmxpbmUobmlkKTsKIAogCQlpZiAoIShzaXplID0gbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdChzdGFydCwgc2l6ZSkpKSB7CiAJCQlpZiAoLS1yYW5nZXMpCkBAIC00NTksMTYgKzQ0OSwxMyBAQAogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJYWRkX3JlZ2lvbihudW1hX2RvbWFpbiwgc3RhcnQgPj4gUEFHRV9TSElGVCwKKwkJYWRkX3JlZ2lvbihuaWQsIHN0YXJ0ID4+IFBBR0VfU0hJRlQsCiAJCQkgICBzaXplID4+IFBBR0VfU0hJRlQpOwogCiAJCWlmICgtLXJhbmdlcykKIAkJCWdvdG8gbmV3X3JhbmdlOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPD0gbWF4X2RvbWFpbjsgaSsrKQotCQlub2RlX3NldF9vbmxpbmUoaSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgzLDcgKzQ3MCw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5IGhvbGUgc2l6ZTogJWxkTUJcbiIsCiAJICAgICAgICh0b3Bfb2ZfcmFtIC0gdG90YWxfcmFtKSA+PiAyMCk7CiAKLQltYXBfY3B1X3RvX25vZGUoYm9vdF9jcHVpZCwgMCk7CiAJZm9yIChpID0gMDsgaSA8IGxtYi5tZW1vcnkuY250OyArK2kpCiAJCWFkZF9yZWdpb24oMCwgbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZSA+PiBQQUdFX1NISUZULAogCQkJICAgbG1iX3NpemVfcGFnZXMoJmxtYi5tZW1vcnksIGkpKTsKQEAgLTU3MCwxMSArNTU2LDExIEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKIAlpbnQgbmV3X25pZDsKLQl1bnNpZ25lZCBsb25nIHJldCA9IGxtYl9hbGxvY19iYXNlKHNpemUsIGFsaWduLCBlbmRfcGZuIDw8IFBBR0VfU0hJRlQpOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gX19sbWJfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgZW5kX3BmbiA8PCBQQUdFX1NISUZUKTsKIAogCS8qIHJldHJ5IG92ZXIgYWxsIG1lbW9yeSAqLwogCWlmICghcmV0KQotCQlyZXQgPSBsbWJfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgbG1iX2VuZF9vZl9EUkFNKCkpOworCQlyZXQgPSBfX2xtYl9hbGxvY19iYXNlKHNpemUsIGFsaWduLCBsbWJfZW5kX29mX0RSQU0oKSk7CiAKIAlpZiAoIXJldCkKIAkJcGFuaWMoIm51bWEuYzogY2Fubm90IGFsbG9jYXRlICVsdSBieXRlcyBvbiBub2RlICVkIiwKQEAgLTYyMCw2ICs2MDYsOCBAQAogCQlkdW1wX251bWFfbWVtb3J5X3RvcG9sb2d5KCk7CiAKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnBwYzY0X251bWFfbmIpOworCWNwdV9udW1hX2NhbGxiYWNrKCZwcGM2NF9udW1hX25iLCBDUFVfVVBfUFJFUEFSRSwKKwkJCSAgKHZvaWQgKikodW5zaWduZWQgbG9uZylib290X2NwdWlkKTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgcGFnZXNfcHJlc2VudDsKQEAgLTc2NywxMCArNzU1LDEwIEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkgPSBOVUxMOwogCW5vZGVtYXNrX3Qgbm9kZXM7Ci0JaW50IG51bWFfZG9tYWluID0gMDsKKwlpbnQgZGVmYXVsdF9uaWQgPSBhbnlfb25saW5lX25vZGUoTk9ERV9NQVNLX0FMTCk7CiAKIAlpZiAoIW51bWFfZW5hYmxlZCB8fCAobWluX2NvbW1vbl9kZXB0aCA8IDApKQotCQlyZXR1cm4gbnVtYV9kb21haW47CisJCXJldHVybiBkZWZhdWx0X25pZDsKIAogCXdoaWxlICgobWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobWVtb3J5LCAibWVtb3J5IikpICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZTsKQEAgLTc4NywxNSArNzc1LDE1IEBACiBoYV9uZXdfcmFuZ2U6CiAJCXN0YXJ0ID0gcmVhZF9uX2NlbGxzKG5fbWVtX2FkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7CiAJCXNpemUgPSByZWFkX25fY2VsbHMobl9tZW1fc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJbnVtYV9kb21haW4gPSBvZl9ub2RlX251bWFfZG9tYWluKG1lbW9yeSk7CisJCW5pZCA9IG9mX25vZGVfdG9fbmlkKG1lbW9yeSk7CiAKIAkJLyogRG9tYWlucyBub3QgcHJlc2VudCBhdCBib290IGRlZmF1bHQgdG8gMCAqLwotCQlpZiAoIW5vZGVfb25saW5lKG51bWFfZG9tYWluKSkKLQkJCW51bWFfZG9tYWluID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOworCQlpZiAobmlkIDwgMCB8fCAhbm9kZV9vbmxpbmUobmlkKSkKKwkJCW5pZCA9IGRlZmF1bHRfbmlkOwogCiAJCWlmICgoc2NuX2FkZHIgPj0gc3RhcnQpICYmIChzY25fYWRkciA8IChzdGFydCArIHNpemUpKSkgewogCQkJb2Zfbm9kZV9wdXQobWVtb3J5KTsKLQkJCWdvdG8gZ290X251bWFfZG9tYWluOworCQkJZ290byBnb3RfbmlkOwogCQl9CiAKIAkJaWYgKC0tcmFuZ2VzKQkJLyogcHJvY2VzcyBhbGwgcmFuZ2VzIGluIGNlbGwgKi8KQEAgLTgwNCwxMiArNzkyLDEyIEBACiAJQlVHKCk7CS8qIHNlY3Rpb24gYWRkcmVzcyBzaG91bGQgYmUgZm91bmQgYWJvdmUgKi8KIAogCS8qIFRlbXBvcmFyeSBjb2RlIHRvIGVuc3VyZSB0aGF0IHJldHVybmVkIG5vZGUgaXMgbm90IGVtcHR5ICovCi1nb3RfbnVtYV9kb21haW46Citnb3RfbmlkOgogCW5vZGVzX3NldGFsbChub2Rlcyk7Ci0Jd2hpbGUgKE5PREVfREFUQShudW1hX2RvbWFpbiktPm5vZGVfc3Bhbm5lZF9wYWdlcyA9PSAwKSB7Ci0JCW5vZGVfY2xlYXIobnVtYV9kb21haW4sIG5vZGVzKTsKLQkJbnVtYV9kb21haW4gPSBhbnlfb25saW5lX25vZGUobm9kZXMpOworCXdoaWxlIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID09IDApIHsKKwkJbm9kZV9jbGVhcihuaWQsIG5vZGVzKTsKKwkJbmlkID0gYW55X29ubGluZV9ub2RlKG5vZGVzKTsKIAl9Ci0JcmV0dXJuIG51bWFfZG9tYWluOworCXJldHVybiBuaWQ7CiB9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwppbmRleCBmNGU1YWMxLi5kMjk2ZWI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogdW5zaWduZWQgbG9uZyBpb3JlbWFwX2Jhc2U7CiB1bnNpZ25lZCBsb25nIGlvcmVtYXBfYm90OworRVhQT1JUX1NZTUJPTChpb3JlbWFwX2JvdCk7CS8qIGFrYSBWTUFMTE9DX0VORCAqLwogaW50IGlvX2JhdF9pbmRleDsKIAogI2lmIGRlZmluZWQoQ09ORklHXzZ4eCkgfHwgZGVmaW5lZChDT05GSUdfUE9XRVIzKQpAQCAtMTUzLDYgKzE1NCw3IEBACiB7CiAJcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBfUEFHRV9OT19DQUNIRSk7CiB9CitFWFBPUlRfU1lNQk9MKGlvcmVtYXA2NCk7CiAKIHZvaWQgX19pb21lbSAqCiBpb3JlbWFwKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTE2Miw2ICsxNjQsNyBAQAogCXJldHVybiBpb3JlbWFwNjQoYWRkcjY0LCBzaXplKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfUEhZU182NEJJVCAqLworRVhQT1JUX1NZTUJPTChpb3JlbWFwKTsKIAogdm9pZCBfX2lvbWVtICoKIF9faW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCkBAIC0yNDcsNiArMjUwLDcgQEAKIG91dDoKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSAodiArICgodW5zaWduZWQgbG9uZylhZGRyICYgflBBR0VfTUFTSykpOwogfQorRVhQT1JUX1NZTUJPTChfX2lvcmVtYXApOwogCiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewpAQCAtMjU5LDYgKzI2Myw3IEBACiAJaWYgKGFkZHIgPiBoaWdoX21lbW9yeSAmJiAodW5zaWduZWQgbG9uZykgYWRkciA8IGlvcmVtYXBfYm90KQogCQl2dW5tYXAoKHZvaWQgKikgKFBBR0VfTUFTSyAmICh1bnNpZ25lZCBsb25nKWFkZHIpKTsKIH0KK0VYUE9SVF9TWU1CT0woaW91bm1hcCk7CiAKIHZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBsZW4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwppbmRleCBkMWFjZWUzLi5hYmZhYWJmNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjNjQvbW0vc2xiX2xvdy5TCi0gKgogICogTG93LWxldmVsIFNMQiByb3V0aW5lcwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNCBEYXZpZCBHaWJzb24gPGR3Z0BhdS5pYm0uY29tPiwgSUJNCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwppbmRleCA4MmU0OTUxLi45MWQyNWZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKQEAgLTI0NywxMCArMjQ3LDYgQEAKIAogCQluZXdzdGFiID0gbG1iX2FsbG9jX2Jhc2UoSFdfUEFHRV9TSVpFLCBIV19QQUdFX1NJWkUsCiAJCQkJCSAxPDxTSURfU0hJRlQpOwotCQlpZiAoISBuZXdzdGFiKQotCQkJcGFuaWMoIlVuYWJsZSB0byBhbGxvY2F0ZSBzZWdtZW50IHRhYmxlIGZvciBDUFUgJWQuXG4iLAotCQkJICAgICAgY3B1KTsKLQogCQluZXdzdGFiID0gKHVuc2lnbmVkIGxvbmcpX192YShuZXdzdGFiKTsKIAogCQltZW1zZXQoKHZvaWQgKiluZXdzdGFiLCAwLCBIV19QQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl82NC5jIGIvYXJjaC9wb3dlcnBjL21tL3RsYl82NC5jCmluZGV4IGJiM2FmYjYuLmY3MzRiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiXzY0LmMKQEAgLTM2LDcgKzM2LDcgQEAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwcGM2NF90bGJfYmF0Y2gsIHBwYzY0X3RsYl9iYXRjaCk7CiAKIC8qIFRoaXMgaXMgZGVjbGFyZWQgYXMgd2UgYXJlIHVzaW5nIHRoZSBtb3JlIG9yIGxlc3MgZ2VuZXJpYwotICogaW5jbHVkZS9hc20tcHBjNjQvdGxiLmggZmlsZSAtLSB0Z2FsbAorICogaW5jbHVkZS9hc20tcG93ZXJwYy90bGIuaCBmaWxlIC0tIHRnYWxsCiAgKi8KIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHRlX2ZyZWVsaXN0X2JhdGNoICosIHB0ZV9mcmVlbGlzdF9jdXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvS2NvbmZpZwppbmRleCBlYjJkZWNlLi5kMDNjMGU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvS2NvbmZpZwpAQCAtMSw0ICsxLDUgQEAKIGNvbmZpZyBQUk9GSUxJTkcKKwlkZXBlbmRzIG9uICFQUENfSVNFUklFUwogCWJvb2wgIlByb2ZpbGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBleHRlbmRlZCBwcm9maWxpbmcgc3VwcG9ydCBtZWNoYW5pc21zIHVzZWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYwppbmRleCA2NTlhMDIxLi40YjA2ZTUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0yMzIsNyArMjMzLDcgQEAKIAltbWNyYSA9IG1mc3ByKFNQUk5fTU1DUkEpOwogCiAJLyogV2VyZSB3ZSBpbiB0aGUgaHlwZXJ2aXNvcj8gKi8KLQlpZiAocGxhdGZvcm1faXNfbHBhcigpICYmIChtbWNyYSAmIE1NQ1JBX1NJSFYpKQorCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpICYmIChtbWNyYSAmIE1NQ1JBX1NJSFYpKQogCQkvKiBmdW5jdGlvbiBkZXNjcmlwdG9yIG1hZG5lc3MgKi8KIAkJcmV0dXJuICooKHVuc2lnbmVkIGxvbmcgKiloeXBlcnZpc29yX2J1Y2tldCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9NYWtlZmlsZQppbmRleCA5ZDhiMjhlZi4uNWM3MjM2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9NYWtlZmlsZQpAQCAtMSw0ICsxLDYgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBQb3dlclBDIDgzeHggbGludXgga2VybmVsLgogIwotb2JqLSQoQ09ORklHX01QQzgzNHhfU1lTKQkrPSBtcGM4MzR4X3N5cy5vIHBjaS5vCitvYmoteQkJCQk6PSBtaXNjLm8KK29iai0kKENPTkZJR19QQ0kpCQkrPSBwY2kubworb2JqLSQoQ09ORklHX01QQzgzNHhfU1lTKQkrPSBtcGM4MzR4X3N5cy5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbWlzYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDU1YmNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21pc2MuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogbWlzYyBzZXR1cCBmdW5jdGlvbnMgZm9yIE1QQzgzeHgKKyAqCisgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisKKyNpbmNsdWRlICJtcGM4M3h4LmgiCisKK3ZvaWQgbXBjODN4eF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKyNkZWZpbmUgUlNUX09GRlNFVAkweDAwMDAwOTAwCisjZGVmaW5lIFJTVF9QUk9UX1JFRwkweDAwMDAwMDE4CisjZGVmaW5lIFJTVF9DVFJMX1JFRwkweDAwMDAwMDFjCisJX19iZTMyIF9faW9tZW0gKnJlZzsKKworCS8qIG1hcCByZXNldCByZWdpc3RlciBzcGFjZSAqLworCXJlZyA9IGlvcmVtYXAoZ2V0X2ltbXJiYXNlKCkgKyAweDkwMCwgMHhmZik7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJLyogZW5hYmxlIHNvZnR3YXJlIHJlc2V0ICJSU1RFIiAqLworCW91dF9iZTMyKHJlZyArIChSU1RfUFJPVF9SRUcgPj4gMiksIDB4NTI1MzU0NDUpOworCisJLyogc2V0IHNvZnR3YXJlIGhhcmQgcmVzZXQgKi8KKwlvdXRfYmUzMihyZWcgKyAoUlNUX0NUUkxfUkVHID4+IDIpLCAweDIpOworCWZvciAoOzspIDsKK30KKworbG9uZyBfX2luaXQgbXBjODN4eF90aW1lX2luaXQodm9pZCkKK3sKKyNkZWZpbmUgU1BDUl9PRkZTRVQJMHgwMDAwMDExMAorI2RlZmluZSBTUENSX1RCRU4JMHgwMDQwMDAwMAorCV9fYmUzMiBfX2lvbWVtICpzcGNyID0gaW9yZW1hcChnZXRfaW1tcmJhc2UoKSArIFNQQ1JfT0ZGU0VULCA0KTsKKwlfX2JlMzIgdG1wOworCisJdG1wID0gaW5fYmUzMihzcGNyKTsKKwlvdXRfYmUzMihzcGNyLCB0bXAgfCBTUENSX1RCRU4pOworCisJaW91bm1hcChzcGNyKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwppbmRleCAyMDk4ZGQwLi43YzE4YjRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwpAQCAtMjQsMjIgKzI0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vaXBpYy5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+Ci0jaW5jbHVkZSA8YXNtL21wYzgzeHguaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KQEAgLTUyLDggKzQ1LDYgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BDSQotZXh0ZXJuIGludCBtcGM4M3h4X3BjaTJfYnVzbm87Ci0KIHN0YXRpYyBpbnQKIG1wYzgzeHhfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBjaGFyIGlkc2VsLCB1bnNpZ25lZCBjaGFyIHBpbikKIHsKQEAgLTc4LDI2ICs2OSwxNCBAQAogCWNvbnN0IGxvbmcgbWluX2lkc2VsID0gMHgxMSwgbWF4X2lkc2VsID0gMHgyMCwgaXJxc19wZXJfc2xvdCA9IDQ7CiAJcmV0dXJuIFBDSV9JUlFfVEFCTEVfTE9PS1VQOwogfQotCi1zdGF0aWMgaW50Ci1tcGM4M3h4X2V4Y2x1ZGVfZGV2aWNlKHVfY2hhciBidXMsIHVfY2hhciBkZXZmbikKLXsKLQlpZiAoYnVzID09IDAgJiYgUENJX1NMT1QoZGV2Zm4pID09IDApCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0JaWYgKG1wYzgzeHhfcGNpMl9idXNubykKLQkJaWYgKGJ1cyA9PSAobXBjODN4eF9wY2kyX2J1c25vKSAmJiBQQ0lfU0xPVChkZXZmbikgPT0gMCkKLQkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUENJICovCisjZW5kaWYJCQkJLyogQ09ORklHX1BDSSAqLwogCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTZXR1cCB0aGUgYXJjaGl0ZWN0dXJlCiAgKgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQKLW1wYzgzNHhfc3lzX3NldHVwX2FyY2godm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4MzR4X3N5c19zZXR1cF9hcmNoKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIApAQCAtMTA2LDE0ICs4NSwxNCBAQAogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CiAJaWYgKG5wICE9IDApIHsKLQkJdW5zaWduZWQgaW50ICpmcCA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KG5wLCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJCXVuc2lnbmVkIGludCAqZnAgPQorCQkgICAgKGludCAqKWdldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOwogCQlpZiAoZnAgIT0gMCkKIAkJCWxvb3BzX3Blcl9qaWZmeSA9ICpmcCAvIEhaOwogCQllbHNlCiAJCQlsb29wc19wZXJfamlmZnkgPSA1MDAwMDAwMCAvIEhaOwogCQlvZl9ub2RlX3B1dChucCk7CiAJfQotCiAjaWZkZWYgQ09ORklHX1BDSQogCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgInBjaSIpKSAhPSBOVUxMOykKIAkJYWRkX2JyaWRnZShucCk7CkBAIC0xMjQsMTQgKzEwMywxMyBAQAogI2VuZGlmCiAKICNpZmRlZiAgQ09ORklHX1JPT1RfTkZTCi0JCVJPT1RfREVWID0gUm9vdF9ORlM7CisJUk9PVF9ERVYgPSBSb290X05GUzsKICNlbHNlCi0JCVJPT1RfREVWID0gUm9vdF9IREExOworCVJPT1RfREVWID0gUm9vdF9IREExOwogI2VuZGlmCiB9CiAKLXZvaWQgX19pbml0Ci1tcGM4MzR4X3N5c19pbml0X0lSUSh2b2lkKQordm9pZCBfX2luaXQgbXBjODM0eF9zeXNfaW5pdF9JUlEodm9pZCkKIHsKIAl1OCBzZW5zZXNbOF0gPSB7CiAJCTAsCQkJLyogRVhUIDAgKi8KQEAgLTE2MCw2NCArMTM4LDI3IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfTVBDKSAmJiBkZWZpbmVkKENPTkZJR19TRU5TT1JTX0RTMTM3NCkKLWV4dGVybiB1bG9uZwlkczEzNzRfZ2V0X3J0Y190aW1lKHZvaWQpOwotZXh0ZXJuIGludAlkczEzNzRfc2V0X3J0Y190aW1lKHVsb25nKTsKK2V4dGVybiB1bG9uZyBkczEzNzRfZ2V0X3J0Y190aW1lKHZvaWQpOworZXh0ZXJuIGludCBkczEzNzRfc2V0X3J0Y190aW1lKHVsb25nKTsKIAotc3RhdGljIGludCBfX2luaXQKLW1wYzgzNHhfcnRjX2hvb2t1cCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXBjODM0eF9ydGNfaG9va3VwKHZvaWQpCiB7Ci0Jc3RydWN0IHRpbWVzcGVjCXR2OworCXN0cnVjdCB0aW1lc3BlYyB0djsKIAogCXBwY19tZC5nZXRfcnRjX3RpbWUgPSBkczEzNzRfZ2V0X3J0Y190aW1lOwogCXBwY19tZC5zZXRfcnRjX3RpbWUgPSBkczEzNzRfc2V0X3J0Y190aW1lOwogCiAJdHYudHZfbnNlYyA9IDA7Ci0JdHYudHZfc2VjID0gKHBwY19tZC5nZXRfcnRjX3RpbWUpKCk7CisJdHYudHZfc2VjID0gKHBwY19tZC5nZXRfcnRjX3RpbWUpICgpOwogCWRvX3NldHRpbWVvZmRheSgmdHYpOwogCiAJcmV0dXJuIDA7CiB9CisKIGxhdGVfaW5pdGNhbGwobXBjODM0eF9ydGNfaG9va3VwKTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZAotbXBjODN4eF9yZXN0YXJ0KGNoYXIgKmNtZCkKLXsKLSNkZWZpbmUgUlNUX09GRlNFVAkweDAwMDAwOTAwCi0jZGVmaW5lIFJTVF9QUk9UX1JFRwkweDAwMDAwMDE4Ci0jZGVmaW5lIFJTVF9DVFJMX1JFRwkweDAwMDAwMDFjCi0JX19iZTMyIF9faW9tZW0gKnJlZzsKLQotCS8vIG1hcCByZXNldCByZWdpc3RlciBzcGFjZQotCXJlZyA9IGlvcmVtYXAoZ2V0X2ltbXJiYXNlKCkgKyAweDkwMCwgMHhmZik7Ci0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0JLyogZW5hYmxlIHNvZnR3YXJlIHJlc2V0ICJSU1RFIiAqLwotCW91dF9iZTMyKHJlZyArIChSU1RfUFJPVF9SRUcgPj4gMiksIDB4NTI1MzU0NDUpOwotCi0JLyogc2V0IHNvZnR3YXJlIGhhcmQgcmVzZXQgKi8KLQlvdXRfYmUzMihyZWcgKyAoUlNUX0NUUkxfUkVHID4+IDIpLCAweDUyNTM1NDQ1KTsKLQlmb3IoOzspOwotfQotCi1zdGF0aWMgbG9uZyBfX2luaXQKLW1wYzgzeHhfdGltZV9pbml0KHZvaWQpCi17Ci0jZGVmaW5lIFNQQ1JfT0ZGU0VUCTB4MDAwMDAxMTAKLSNkZWZpbmUgU1BDUl9UQkVOCTB4MDA0MDAwMDAKLQlfX2JlMzIgX19pb21lbSAqc3BjciA9IGlvcmVtYXAoZ2V0X2ltbXJiYXNlKCkgKyBTUENSX09GRlNFVCwgNCk7Ci0JX19iZTMyIHRtcDsKLQotCXRtcCA9IGluX2JlMzIoc3Bjcik7Ci0Jb3V0X2JlMzIoc3BjciwgdG1wfFNQQ1JfVEJFTik7Ci0KLQlpb3VubWFwKHNwY3IpOwotCi0JcmV0dXJuIDA7Ci19Ci12b2lkIF9faW5pdAotcGxhdGZvcm1faW5pdCh2b2lkKQordm9pZCBfX2luaXQgcGxhdGZvcm1faW5pdCh2b2lkKQogewogCS8qIHNldHVwIHRoZSBQb3dlclBDIG1vZHVsZSBzdHJ1Y3QgKi8KIAlwcGNfbWQuc2V0dXBfYXJjaCA9IG1wYzgzNHhfc3lzX3NldHVwX2FyY2g7CkBAIC0yMzksNSArMTgwLDMgQEAKIAogCXJldHVybjsKIH0KLQotCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5oCmluZGV4IGU0Y2EzOWYuLmZlZGVjYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5oCkBAIC0yMCw0ICsyMCw0IEBACiAjZGVmaW5lIFBJUlFDCU1QQzgzeHhfSVJRX0VYVDYKICNkZWZpbmUgUElSUUQJTVBDODN4eF9JUlFfRVhUNwogCi0jZW5kaWYgICAgICAgICAgICAgICAgLyogX19NQUNIX01QQzgzWFhfU1lTX0hfXyAqLworI2VuZGlmCQkJCS8qIF9fTUFDSF9NUEM4M1hYX1NZU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODN4eC5oCmluZGV4IGNlOWU2NmEuLjAxY2FlMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHguaApAQCAtMTAsNSArMTAsOCBAQAogICovCiAKIGV4dGVybiBpbnQgYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldik7CitleHRlcm4gaW50IG1wYzgzeHhfZXhjbHVkZV9kZXZpY2UodV9jaGFyIGJ1cywgdV9jaGFyIGRldmZuKTsKK2V4dGVybiB2b2lkIG1wYzgzeHhfcmVzdGFydChjaGFyICpjbWQpOworZXh0ZXJuIGxvbmcgbXBjODN4eF90aW1lX2luaXQodm9pZCk7CiAKLSNlbmRpZiAvKiBfX01QQzgzWFhfSF9fICovCisjZW5kaWYJCQkJLyogX19NUEM4M1hYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3BjaS5jCmluZGV4IDQ2OWNkYWMuLjE2ZjdkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvcGNpLmMKQEAgLTM2LDcgKzM2LDE2IEBACiAKIGludCBtcGM4M3h4X3BjaTJfYnVzbm87CiAKLSNpZmRlZiBDT05GSUdfUENJCitpbnQgbXBjODN4eF9leGNsdWRlX2RldmljZSh1X2NoYXIgYnVzLCB1X2NoYXIgZGV2Zm4pCit7CisJaWYgKGJ1cyA9PSAwICYmIFBDSV9TTE9UKGRldmZuKSA9PSAwKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCWlmIChtcGM4M3h4X3BjaTJfYnVzbm8pCisJCWlmIChidXMgPT0gKG1wYzgzeHhfcGNpMl9idXNubykgJiYgUENJX1NMT1QoZGV2Zm4pID09IDApCisJCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKIGludCBfX2luaXQgYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKIAlpbnQgbGVuOwpAQCAtNTIsNyArNjEsNyBAQAogCWhhc19hZGRyZXNzID0gKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCAwLCAmcnNyYykgPT0gMCk7CiAKIAkvKiBHZXQgYnVzIHJhbmdlIGlmIGFueSAqLwotCWJ1c19yYW5nZSA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOworCWJ1c19yYW5nZSA9IChpbnQgKilnZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CiAJaWYgKGJ1c19yYW5nZSA9PSBOVUxMIHx8IGxlbiA8IDIgKiBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBnZXQgYnVzLXJhbmdlIGZvciAlcywgYXNzdW1lIgogCQkgICAgICAgIiBidXMgMFxuIiwgZGV2LT5mdWxsX25hbWUpOwpAQCAtNzQsNyArODMsNyBAQAogCWlmICgocnNyYy5zdGFydCAmIDB4ZmZmZmYpID09IDB4ODUwMCkgewogCQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgaW1tciArIDB4ODMwMCwgaW1tciArIDB4ODMwNCk7CiAJfQotCS8qIFBDSSAyKi8KKwkvKiBQQ0kgMiAqLwogCWlmICgocnNyYy5zdGFydCAmIDB4ZmZmZmYpID09IDB4ODYwMCkgewogCQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgaW1tciArIDB4ODM4MCwgaW1tciArIDB4ODM4NCk7CiAJCXByaW1hcnkgPSAwOwpAQCAtODQsMTAgKzkzLDEwIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBNUEM4M3h4IFBDSSBob3N0IGJyaWRnZSBhdCAweCUwOGx4LiAiCiAJICAgICAgICJGaXJtd2FyZSBidXMgbnVtYmVyOiAlZC0+JWRcbiIsCi0JCXJzcmMuc3RhcnQsIGhvc2UtPmZpcnN0X2J1c25vLCBob3NlLT5sYXN0X2J1c25vKTsKKwkgICAgICAgcnNyYy5zdGFydCwgaG9zZS0+Zmlyc3RfYnVzbm8sIGhvc2UtPmxhc3RfYnVzbm8pOwogCiAJREJHKCIgLT5Ib3NlIGF0IDB4JXAsIGNmZ19hZGRyPTB4JXAsY2ZnX2RhdGE9MHglcFxuIiwKLQkJaG9zZSwgaG9zZS0+Y2ZnX2FkZHIsIGhvc2UtPmNmZ19kYXRhKTsKKwkgICAgaG9zZSwgaG9zZS0+Y2ZnX2FkZHIsIGhvc2UtPmNmZ19kYXRhKTsKIAogCS8qIEludGVycHJldCB0aGUgInJhbmdlcyIgcHJvcGVydHkgKi8KIAkvKiBUaGlzIGFsc28gbWFwcyB0aGUgSS9PIHJlZ2lvbiBhbmQgc2V0cyBpc2FfaW8vbWVtX2Jhc2UgKi8KQEAgLTk1LDUgKzEwNCwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IGM1YmMyODIuLmQzZDBmZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCkBAIC0xLDg2ICsxLDMwIEBACi1jb25maWcgODV4eAotCWJvb2wKLQlkZXBlbmRzIG9uIEU1MDAKLQlkZWZhdWx0IHkKLQotY29uZmlnIFBQQ19JTkRJUkVDVF9QQ0lfQkUKLQlib29sCi0JZGVwZW5kcyBvbiA4NXh4Ci0JZGVmYXVsdCB5Ci0KLW1lbnUgIkZyZWVzY2FsZSA4NXh4IG9wdGlvbnMiCi0JZGVwZW5kcyBvbiBFNTAwCittZW51ICJQbGF0Zm9ybSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUFBDXzg1eHgKIAogY2hvaWNlCiAJcHJvbXB0ICJNYWNoaW5lIFR5cGUiCi0JZGVwZW5kcyBvbiA4NXh4CiAJZGVmYXVsdCBNUEM4NTQwX0FEUwogCiBjb25maWcgTVBDODU0MF9BRFMKIAlib29sICJGcmVlc2NhbGUgTVBDODU0MCBBRFMiCiAJaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDIDg1NDAgQURTIGV2YWx1YXRpb24gYm9hcmQuCi0KLWNvbmZpZyBNUEM4NTQ4X0NEUwotCWJvb2wgIkZyZWVzY2FsZSBNUEM4NTQ4IENEUyIKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzZSBzdXBwb3J0IGZvciB0aGUgTVBDODU0OCBDRFMgZXZhbHVhdGlvbiBib2FyZC4KLQotY29uZmlnIE1QQzg1NTVfQ0RTCi0JYm9vbCAiRnJlZXNjYWxlIE1QQzg1NTUgQ0RTIgotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXNlIHN1cHBvcnQgZm9yIHRoZSBNUEM4NTU1IENEUyBldmFsdWF0aW9uIGJvYXJkLgotCi1jb25maWcgTVBDODU2MF9BRFMKLQlib29sICJGcmVlc2NhbGUgTVBDODU2MCBBRFMiCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDIDg1NjAgQURTIGV2YWx1YXRpb24gYm9hcmQuCi0KLWNvbmZpZyBTQkM4NTYwCi0JYm9vbCAiV2luZFJpdmVyIFBvd2VyUVVJQ0MgSUlJIFNCQzg1NjAiCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgV2luZFJpdmVyIFBvd2VyUVVJQ0MgSUlJIAotCSAgU0JDODU2MCBib2FyZC4KLQotY29uZmlnIFNUWF9HUDMKLQlib29sICJTaWxpY29uIFR1cm5rZXkgRXhwcmVzcyBHUDMiCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgU2lsaWNvbiBUdXJua2V5IEV4cHJlc3MgR1AzCi0JICBib2FyZC4KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1QQyA4NTQwIEFEUyBib2FyZAogCiBlbmRjaG9pY2UKIAotIyBJdCdzIG9mdGVuIG5lY2Vzc2FyeSB0byBrbm93IHRoZSBzcGVjaWZpYyA4NXh4IHByb2Nlc3NvciB0eXBlLgotIyBGb3J0dW5hdGVseSwgaXQgaXMgaW1wbGllZCAoc28gZmFyKSBmcm9tIHRoZSBib2FyZCB0eXBlLCBzbyB3ZQotIyBkb24ndCBuZWVkIHRvIGFzayBtb3JlIHJlZHVuZGFudCBxdWVzdGlvbnMuCiBjb25maWcgTVBDODU0MAogCWJvb2wKLQlkZXBlbmRzIG9uIE1QQzg1NDBfQURTCi0JZGVmYXVsdCB5CisJc2VsZWN0IFBQQ19VREJHXzE2NTUwCisJc2VsZWN0IFBQQ19JTkRJUkVDVF9QQ0kKKwlkZWZhdWx0IHkgaWYgTVBDODU0MF9BRFMKIAotY29uZmlnIE1QQzg1NDgKK2NvbmZpZyBQUENfSU5ESVJFQ1RfUENJX0JFCiAJYm9vbAotCWRlcGVuZHMgb24gTVBDODU0OF9DRFMKKwlkZXBlbmRzIG9uIFBQQ184NXh4CiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBNUEM4NTU1Citjb25maWcgTVBJQwogCWJvb2wKLQlkZXBlbmRzIG9uIE1QQzg1NTVfQ0RTCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBNUEM4NTYwCi0JYm9vbAotCWRlcGVuZHMgb24gU0JDODU2MCB8fCBNUEM4NTYwX0FEUyB8fCBTVFhfR1AzCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyA4NXh4X1BDSTIKLQlib29sICJTdXBwcnQgZm9yIDJuZCBQQ0kgaG9zdCBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gTVBDODU1NV9DRFMKLQlkZWZhdWx0IHkKLQotY29uZmlnIFBQQ19HRU41NTAKLQlib29sCi0JZGVwZW5kcyBvbiBNUEM4NTQwIHx8IFNCQzg1NjAgfHwgTVBDODU1NQogCWRlZmF1bHQgeQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKaW5kZXggNjQwNzE5Ny4uZmZjNDEzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQpAQCAtMSArMSw1IEBACi0jIGVtcHR5IG1ha2VmaWxlIHNvIG1ha2UgY2xlYW4gd29ya3MKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBQb3dlclBDIDg1eHggbGludXgga2VybmVsLgorIworb2JqLSQoQ09ORklHX1BQQ184NXh4KQkrPSBtaXNjLm8gcGNpLm8KK29iai0kKENPTkZJR19NUEM4NTQwX0FEUykgKz0gbXBjODV4eF9hZHMubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21pc2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjNWU4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbWlzYy5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBNUEM4NXh4IGdlbmVyaWMgY29kZS4KKyAqCisgKiBNYWludGFpbmVkIGJ5IEt1bWFyIEdhbGEgKHNlZSBNQUlOVEFJTkVSUyBmb3IgY29udGFjdCBpbmZvcm1hdGlvbikKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CisKK3ZvaWQgbXBjODV4eF9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWFib3J0KCk7Cit9CisKKy8qIEZvciBub3cgdGhpcyBpcyBhIHBhc3MgdGhyb3VnaCAqLworcGh5c19hZGRyX3QgZml4dXBfYmlncGh5c19hZGRyKHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IHNpemUpCit7CisJcmV0dXJuIGFkZHI7Cit9OworCitFWFBPUlRfU1lNQk9MKGZpeHVwX2JpZ3BoeXNfYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NzBjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuaAorICoKKyAqIE1QQzg1NDBBRFMgYm9hcmQgZGVmaW5pdGlvbnMKKyAqCisgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxrdW1hci5nYWxhQGZyZWVzY2FsZS5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19NQUNIX01QQzg1NDBBRFNfSF9fCisjZGVmaW5lIF9fTUFDSF9NUEM4NTQwQURTX0hfXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisKKyNkZWZpbmUgQk9BUkRfQ0NTUkJBUgkJKCh1aW50KTB4ZTAwMDAwMDApCisjZGVmaW5lIEJDU1JfQUREUgkJKCh1aW50KTB4ZjgwMDAwMDApCisjZGVmaW5lIEJDU1JfU0laRQkJKCh1aW50KSgzMiAqIDEwMjQpKQorCisvKiBQQ0kgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUElSUUEJCU1QQzg1eHhfSVJRX0VYVDEKKyNkZWZpbmUgUElSUUIJCU1QQzg1eHhfSVJRX0VYVDIKKyNkZWZpbmUgUElSUUMJCU1QQzg1eHhfSVJRX0VYVDMKKyNkZWZpbmUgUElSUUQJCU1QQzg1eHhfSVJRX0VYVDQKKworLyogT2Zmc2V0IG9mIENQTSByZWdpc3RlciBzcGFjZSAqLworI2RlZmluZSBDUE1fTUFQX0FERFIJKENDU1JCQVIgKyBNUEM4NXh4X0NQTV9PRkZTRVQpCisKKyNlbmRpZgkJCQkvKiBfX01BQ0hfTVBDODU0MEFEU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4LmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NGRiNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4LmgKKyAqCisgKiBNUEM4NXh4IHNvYyBkZWZpbml0aW9ucy9mdW5jdGlvbiBkZWNscworICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworZXh0ZXJuIHZvaWQgbXBjODV4eF9yZXN0YXJ0KGNoYXIgKik7CitleHRlcm4gaW50IGFkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzgyMWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBNUEM4NXh4IHNldHVwIGFuZCBlYXJseSBib290IGNvZGUgcGx1cyBvdGhlciByYW5kb20gYml0cy4KKyAqCisgKiBNYWludGFpbmVkIGJ5IEt1bWFyIEdhbGEgKHNlZSBNQUlOVEFJTkVSUyBmb3IgY29udGFjdCBpbmZvcm1hdGlvbikKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL21wYzg1eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKyNpbmNsdWRlICJtcGM4NXh4LmgiCisKKyNpZm5kZWYgQ09ORklHX1BDSQordW5zaWduZWQgbG9uZyBpc2FfaW9fYmFzZSA9IDA7Cit1bnNpZ25lZCBsb25nIGlzYV9tZW1fYmFzZSA9IDA7CisjZW5kaWYKKworLyoKKyAqIEludGVybmFsIGludGVycnVwdHMgYXJlIGFsbCBMZXZlbCBTZW5zaXRpdmUsIGFuZCBQb3NpdGl2ZSBQb2xhcml0eQorICoKKyAqIE5vdGU6ICBMaWtlbHksIHRoaXMgdGFibGUgYW5kIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2hvdWxkIGJlCisgKiAgICAgICAgb2J0YWluZWQgYW5kIGRlcml2ZWQgZnJvbSB0aGUgT0YgRGV2aWNlIFRyZWUuCisgKi8KK3N0YXRpYyB1X2NoYXIgbXBjODV4eF9hZHNfb3BlbnBpY19pbml0c2Vuc2VzW10gX19pbml0ZGF0YSA9IHsKKwlNUEM4NVhYX0lOVEVSTkFMX0lSUV9TRU5TRVMsCisJMHgwLAkJCS8qIEV4dGVybmFsICAwOiAqLworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFKSwJLyogRXh0IDE6IFBDSSBzbG90IDAgKi8KKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFKSwJLyogRXh0IDI6IFBDSSBzbG90IDEgKi8KKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFKSwJLyogRXh0IDM6IFBDSSBzbG90IDIgKi8KKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFKSwJLyogRXh0IDQ6IFBDSSBzbG90IDMgKi8KKyNlbHNlCisJMHgwLAkJCS8qIEV4dGVybmFsICAxOiAqLworCTB4MCwJCQkvKiBFeHRlcm5hbCAgMjogKi8KKwkweDAsCQkJLyogRXh0ZXJuYWwgIDM6ICovCisJMHgwLAkJCS8qIEV4dGVybmFsICA0OiAqLworI2VuZGlmCisJKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dGVybmFsIDU6IFBIWSAqLworCTB4MCwJCQkvKiBFeHRlcm5hbCAgNjogKi8KKwkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFKSwJLyogRXh0ZXJuYWwgNzogUEhZICovCisJMHgwLAkJCS8qIEV4dGVybmFsICA4OiAqLworCTB4MCwJCQkvKiBFeHRlcm5hbCAgOTogKi8KKwkweDAsCQkJLyogRXh0ZXJuYWwgMTA6ICovCisJMHgwLAkJCS8qIEV4dGVybmFsIDExOiAqLworfTsKKworI2lmZGVmIENPTkZJR19QQ0kKKy8qCisgKiBpbnRlcnJ1cHQgcm91dGluZworICovCisKK2ludAorbXBjODV4eF9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgaWRzZWwsIHVuc2lnbmVkIGNoYXIgcGluKQoreworCXN0YXRpYyBjaGFyIHBjaV9pcnFfdGFibGVbXVs0XSA9CisJICAgIC8qCisJICAgICAqIFRoaXMgaXMgbGl0dGxlIGV2aWwsIGJ1dCB3b3JrcyBhcm91bmQgdGhlIGZhY3QKKwkgICAgICogdGhhdCByZXZBIGJvYXJkcyBoYXZlIElEU0VMIHN0YXJ0aW5nIGF0IDE4CisJICAgICAqIGFuZCBvdGhlcnMgYm9hcmRzIChvbGRlcikgc3RhcnQgYXQgMTIKKwkgICAgICoKKwkgICAgICogICAgICBQQ0kgSURTRUwvSU5UUElOLT5JTlRMSU5FCisJICAgICAqICAgICAgIEEgICAgICBCICAgICAgQyAgICAgIEQKKwkgICAgICovCisJeworCQl7UElSUUEsIFBJUlFCLCBQSVJRQywgUElSUUR9LAkvKiBJRFNFTCAyICovCisJCXtQSVJRRCwgUElSUUEsIFBJUlFCLCBQSVJRQ30sCisJCXtQSVJRQywgUElSUUQsIFBJUlFBLCBQSVJRQn0sCisJCXtQSVJRQiwgUElSUUMsIFBJUlFELCBQSVJRQX0sCS8qIElEU0VMIDUgKi8KKwkJezAsIDAsIDAsIDB9LAkvKiAtLSAqLworCQl7MCwgMCwgMCwgMH0sCS8qIC0tICovCisJCXswLCAwLCAwLCAwfSwJLyogLS0gKi8KKwkJezAsIDAsIDAsIDB9LAkvKiAtLSAqLworCQl7MCwgMCwgMCwgMH0sCS8qIC0tICovCisJCXswLCAwLCAwLCAwfSwJLyogLS0gKi8KKwkJe1BJUlFBLCBQSVJRQiwgUElSUUMsIFBJUlFEfSwJLyogSURTRUwgMTIgKi8KKwkJe1BJUlFELCBQSVJRQSwgUElSUUIsIFBJUlFDfSwKKwkJe1BJUlFDLCBQSVJRRCwgUElSUUEsIFBJUlFCfSwKKwkJe1BJUlFCLCBQSVJRQywgUElSUUQsIFBJUlFBfSwJLyogSURTRUwgMTUgKi8KKwkJezAsIDAsIDAsIDB9LAkvKiAtLSAqLworCQl7MCwgMCwgMCwgMH0sCS8qIC0tICovCisJCXtQSVJRQSwgUElSUUIsIFBJUlFDLCBQSVJRRH0sCS8qIElEU0VMIDE4ICovCisJCXtQSVJRRCwgUElSUUEsIFBJUlFCLCBQSVJRQ30sCisJCXtQSVJRQywgUElSUUQsIFBJUlFBLCBQSVJRQn0sCisJCXtQSVJRQiwgUElSUUMsIFBJUlFELCBQSVJRQX0sCS8qIElEU0VMIDIxICovCisJfTsKKworCWNvbnN0IGxvbmcgbWluX2lkc2VsID0gMiwgbWF4X2lkc2VsID0gMjEsIGlycXNfcGVyX3Nsb3QgPSA0OworCXJldHVybiBQQ0lfSVJRX1RBQkxFX0xPT0tVUDsKK30KKworaW50CittcGM4NXh4X2V4Y2x1ZGVfZGV2aWNlKHVfY2hhciBidXMsIHVfY2hhciBkZXZmbikKK3sKKwlpZiAoYnVzID09IDAgJiYgUENJX1NMT1QoZGV2Zm4pID09IDApCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJZWxzZQorCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCisKK3ZvaWQgX19pbml0IG1wYzg1eHhfYWRzX3BpY19pbml0KHZvaWQpCit7CisJc3RydWN0IG1waWMgKm1waWMxOworCXBoeXNfYWRkcl90IE9wZW5QSUNfUEFkZHI7CisKKwkvKiBEZXRlcm1pbmUgdGhlIFBoeXNpY2FsIEFkZHJlc3Mgb2YgdGhlIE9wZW5QSUMgcmVncyAqLworCU9wZW5QSUNfUEFkZHIgPSBnZXRfaW1tcmJhc2UoKSArIE1QQzg1eHhfT1BFTlBJQ19PRkZTRVQ7CisKKwltcGljMSA9IG1waWNfYWxsb2MoT3BlblBJQ19QQWRkciwKKwkJCSAgIE1QSUNfUFJJTUFSWSB8IE1QSUNfV0FOVFNfUkVTRVQgfCBNUElDX0JJR19FTkRJQU4sCisJCQkgICA0LCBNUEM4NXh4X09QRU5QSUNfSVJRX09GRlNFVCwgMCwgMjUwLAorCQkJICAgbXBjODV4eF9hZHNfb3BlbnBpY19pbml0c2Vuc2VzLAorCQkJICAgc2l6ZW9mKG1wYzg1eHhfYWRzX29wZW5waWNfaW5pdHNlbnNlcyksCisJCQkgICAiIE9wZW5QSUMgICIpOworCUJVR19PTihtcGljMSA9PSBOVUxMKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDAsIE9wZW5QSUNfUEFkZHIgKyAweDEwMjAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDEsIE9wZW5QSUNfUEFkZHIgKyAweDEwMjgwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDIsIE9wZW5QSUNfUEFkZHIgKyAweDEwMzAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDMsIE9wZW5QSUNfUEFkZHIgKyAweDEwMzgwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDQsIE9wZW5QSUNfUEFkZHIgKyAweDEwNDAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDUsIE9wZW5QSUNfUEFkZHIgKyAweDEwNDgwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDYsIE9wZW5QSUNfUEFkZHIgKyAweDEwNTAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDcsIE9wZW5QSUNfUEFkZHIgKyAweDEwNTgwKTsKKworCS8qIGR1bW15IG1hcHBpbmdzIHRvIGdldCB0byA0OCAqLworCW1waWNfYXNzaWduX2lzdShtcGljMSwgOCwgT3BlblBJQ19QQWRkciArIDB4MTA2MDApOworCW1waWNfYXNzaWduX2lzdShtcGljMSwgOSwgT3BlblBJQ19QQWRkciArIDB4MTA2ODApOworCW1waWNfYXNzaWduX2lzdShtcGljMSwgMTAsIE9wZW5QSUNfUEFkZHIgKyAweDEwNzAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDExLCBPcGVuUElDX1BBZGRyICsgMHgxMDc4MCk7CisKKwkvKiBFeHRlcm5hbCBpbnRzICovCisJbXBpY19hc3NpZ25faXN1KG1waWMxLCAxMiwgT3BlblBJQ19QQWRkciArIDB4MTAwMDApOworCW1waWNfYXNzaWduX2lzdShtcGljMSwgMTMsIE9wZW5QSUNfUEFkZHIgKyAweDEwMDgwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDE0LCBPcGVuUElDX1BBZGRyICsgMHgxMDEwMCk7CisJbXBpY19pbml0KG1waWMxKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG1wYzg1eHhfYWRzX3NldHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJtcGM4NXh4X2Fkc19zZXR1cF9hcmNoKCkiLCAwKTsKKworCWNwdSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKKwlpZiAoY3B1ICE9IDApIHsKKwkJdW5zaWduZWQgaW50ICpmcDsKKworCQlmcCA9IChpbnQgKilnZXRfcHJvcGVydHkoY3B1LCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJCWlmIChmcCAhPSAwKQorCQkJbG9vcHNfcGVyX2ppZmZ5ID0gKmZwIC8gSFo7CisJCWVsc2UKKwkJCWxvb3BzX3Blcl9qaWZmeSA9IDUwMDAwMDAwIC8gSFo7CisJCW9mX25vZGVfcHV0KGNwdSk7CisJfQorCisjaWZkZWYgQ09ORklHX1BDSQorCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgInBjaSIpKSAhPSBOVUxMOykKKwkJYWRkX2JyaWRnZShucCk7CisKKwlwcGNfbWQucGNpX3N3aXp6bGUgPSBjb21tb25fc3dpenpsZTsKKwlwcGNfbWQucGNpX21hcF9pcnEgPSBtcGM4NXh4X21hcF9pcnE7CisJcHBjX21kLnBjaV9leGNsdWRlX2RldmljZSA9IG1wYzg1eHhfZXhjbHVkZV9kZXZpY2U7CisjZW5kaWYKKworI2lmZGVmICBDT05GSUdfUk9PVF9ORlMKKwlST09UX0RFViA9IFJvb3RfTkZTOworI2Vsc2UKKwlST09UX0RFViA9IFJvb3RfSERBMTsKKyNlbmRpZgorfQorCit2b2lkIG1wYzg1eHhfYWRzX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJdWludCBwdmlkLCBzdmlkLCBwaGlkMTsKKwl1aW50IG1lbXNpemUgPSB0b3RhbF9tZW1vcnk7CisKKwlwdmlkID0gbWZzcHIoU1BSTl9QVlIpOworCXN2aWQgPSBtZnNwcihTUFJOX1NWUik7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvclxuIik7CisJc2VxX3ByaW50ZihtLCAiTWFjaGluZVx0XHQ6IG1wYzg1eHhcbiIpOworCXNlcV9wcmludGYobSwgIlBWUlx0XHQ6IDB4JXhcbiIsIHB2aWQpOworCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOworCisJLyogRGlzcGxheSBjcHUgUGxsIHNldHRpbmcgKi8KKwlwaGlkMSA9IG1mc3ByKFNQUk5fSElEMSk7CisJc2VxX3ByaW50ZihtLCAiUExMIHNldHRpbmdcdDogMHgleFxuIiwgKChwaGlkMSA+PiAyNCkgJiAweDNmKSk7CisKKwkvKiBEaXNwbGF5IHRoZSBhbW91bnQgb2YgbWVtb3J5ICovCisJc2VxX3ByaW50ZihtLCAiTWVtb3J5XHRcdDogJWQgTUJcbiIsIG1lbXNpemUgLyAoMTAyNCAqIDEwMjQpKTsKK30KKwordm9pZCBfX2luaXQgcGxhdGZvcm1faW5pdCh2b2lkKQoreworCXBwY19tZC5zZXR1cF9hcmNoID0gbXBjODV4eF9hZHNfc2V0dXBfYXJjaDsKKwlwcGNfbWQuc2hvd19jcHVpbmZvID0gbXBjODV4eF9hZHNfc2hvd19jcHVpbmZvOworCisJcHBjX21kLmluaXRfSVJRID0gbXBjODV4eF9hZHNfcGljX2luaXQ7CisJcHBjX21kLmdldF9pcnEgPSBtcGljX2dldF9pcnE7CisKKwlwcGNfbWQucmVzdGFydCA9IG1wYzg1eHhfcmVzdGFydDsKKwlwcGNfbWQucG93ZXJfb2ZmID0gTlVMTDsKKwlwcGNfbWQuaGFsdCA9IE5VTEw7CisKKwlwcGNfbWQudGltZV9pbml0ID0gTlVMTDsKKwlwcGNfbWQuc2V0X3J0Y190aW1lID0gTlVMTDsKKwlwcGNfbWQuZ2V0X3J0Y190aW1lID0gTlVMTDsKKwlwcGNfbWQuY2FsaWJyYXRlX2RlY3IgPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyOworCisJcHBjX21kLnByb2dyZXNzID0gdWRiZ19wcm9ncmVzczsKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygibXBjODV4eF9hZHMgcGxhdGZvcm1faW5pdCgpOiBleGl0IiwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkMjkwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9wY2kuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogRlNMIFNvQyBzZXR1cCBjb2RlCisgKgorICogTWFpbnRhaW5lZCBieSBLdW1hciBHYWxhIChzZWUgTUFJTlRBSU5FUlMgZm9yIGNvbnRhY3QgaW5mb3JtYXRpb24pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKHguLi4pIHByaW50ayh4KQorI2Vsc2UKKyNkZWZpbmUgREJHKHguLi4pCisjZW5kaWYKKworaW50IG1wYzg1eHhfcGNpMl9idXNubyA9IDA7CisKKyNpZmRlZiBDT05GSUdfUENJCitpbnQgX19pbml0IGFkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CisJc3RydWN0IHJlc291cmNlIHJzcmM7CisJaW50ICpidXNfcmFuZ2U7CisJaW50IHByaW1hcnkgPSAxLCBoYXNfYWRkcmVzcyA9IDA7CisJcGh5c19hZGRyX3QgaW1tciA9IGdldF9pbW1yYmFzZSgpOworCisJREJHKCJBZGRpbmcgUENJIGhvc3QgYnJpZGdlICVzXG4iLCBkZXYtPmZ1bGxfbmFtZSk7CisKKwkvKiBGZXRjaCBob3N0IGJyaWRnZSByZWdpc3RlcnMgYWRkcmVzcyAqLworCWhhc19hZGRyZXNzID0gKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCAwLCAmcnNyYykgPT0gMCk7CisKKwkvKiBHZXQgYnVzIHJhbmdlIGlmIGFueSAqLworCWJ1c19yYW5nZSA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOworCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXMsIGFzc3VtZSIKKwkJICAgICAgICIgYnVzIDBcbiIsIGRldi0+ZnVsbF9uYW1lKTsKKwl9CisKKwlob3NlID0gcGNpYmlvc19hbGxvY19jb250cm9sbGVyKCk7CisJaWYgKCFob3NlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlob3NlLT5hcmNoX2RhdGEgPSBkZXY7CisJaG9zZS0+c2V0X2NmZ190eXBlID0gMTsKKworCWhvc2UtPmZpcnN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzBdIDogMDsKKwlob3NlLT5sYXN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzFdIDogMHhmZjsKKworCS8qIFBDSSAxICovCisJaWYgKChyc3JjLnN0YXJ0ICYgMHhmZmZmZikgPT0gMHg4MDAwKSB7CisJCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCBpbW1yICsgMHg4MDAwLCBpbW1yICsgMHg4MDA0KTsKKwl9CisJLyogUENJIDIgKi8KKwlpZiAoKHJzcmMuc3RhcnQgJiAweGZmZmZmKSA9PSAweDkwMDApIHsKKwkJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIGltbXIgKyAweDkwMDAsIGltbXIgKyAweDkwMDQpOworCQlwcmltYXJ5ID0gMDsKKwkJaG9zZS0+YnVzX29mZnNldCA9IGhvc2UtPmZpcnN0X2J1c25vOworCQltcGM4NXh4X3BjaTJfYnVzbm8gPSBob3NlLT5maXJzdF9idXNubzsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBNUEM4NXh4IFBDSSBob3N0IGJyaWRnZSBhdCAweCUwOGx4LiAiCisJICAgICAgICJGaXJtd2FyZSBidXMgbnVtYmVyOiAlZC0+JWRcbiIsCisJCXJzcmMuc3RhcnQsIGhvc2UtPmZpcnN0X2J1c25vLCBob3NlLT5sYXN0X2J1c25vKTsKKworCURCRygiIC0+SG9zZSBhdCAweCVwLCBjZmdfYWRkcj0weCVwLGNmZ19kYXRhPTB4JXBcbiIsCisJCWhvc2UsIGhvc2UtPmNmZ19hZGRyLCBob3NlLT5jZmdfZGF0YSk7CisKKwkvKiBJbnRlcnByZXQgdGhlICJyYW5nZXMiIHByb3BlcnR5ICovCisJLyogVGhpcyBhbHNvIG1hcHMgdGhlIEkvTyByZWdpb24gYW5kIHNldHMgaXNhX2lvL21lbV9iYXNlICovCisJcGNpX3Byb2Nlc3NfYnJpZGdlX09GX3Jhbmdlcyhob3NlLCBkZXYsIHByaW1hcnkpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKaW5kZXggMDQwNzNmZC4uYzRmNmIwZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogb2JqLSQoQ09ORklHX1BQQ19DSFJQKQkJKz0gY2hycC8KIG9iai0kKENPTkZJR180eHgpCQkrPSA0eHgvCiBvYmotJChDT05GSUdfUFBDXzgzeHgpCQkrPSA4M3h4Lwotb2JqLSQoQ09ORklHXzg1eHgpCQkrPSA4NXh4Lworb2JqLSQoQ09ORklHX1BQQ184NXh4KQkJKz0gODV4eC8KIG9iai0kKENPTkZJR19QUENfUFNFUklFUykJKz0gcHNlcmllcy8KIG9iai0kKENPTkZJR19QUENfSVNFUklFUykJKz0gaXNlcmllcy8KIG9iai0kKENPTkZJR19QUENfTUFQTEUpCQkrPSBtYXBsZS8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKaW5kZXggYjMzYTQ0NC4uZmVjOGU2NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCQlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIDwgZW5kX3BmbjsgcGZuKyspIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAkJCXNldF9wYWdlX2xpbmtzKHBhZ2UsIFpPTkVfRE1BLCBub2RlX2lkLCBwZm4pOwotCQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCQlpbml0X3BhZ2VfY291bnQocGFnZSk7CiAJCQlyZXNldF9wYWdlX21hcGNvdW50KHBhZ2UpOwogCQkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOwogCQkJSU5JVF9MSVNUX0hFQUQoJnBhZ2UtPmxydSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wZWdhc29zX2V0aC5jCmluZGV4IDI5Yzg2NzguLjZhZDRiMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wZWdhc29zX2V0aC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wZWdhc29zX2V0aC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF9wZWdhc29zX2V0aC5jCi0gKgogICogIENvcHlyaWdodCAoQykgMjAwNSBTdmVuIEx1dGhlciA8c2xAYnBsYW4tZ21iaC5kZT4KICAqICBUaGFua3MgdG8gOgogICoJRGFsZSBGYXJuc3dvcnRoIDxkYWxlQGZhcm5zd29ydGgub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwppbmRleCBlMWZhZGJmLi44YmY0MzA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGMvcGxhdGZvcm1zL3NldHVwLmMKLSAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwogICogIEFkYXB0ZWQgZnJvbSAnYWxwaGEnIHZlcnNpb24gYnkgR2FyeSBUaG9tYXMKICAqICBNb2RpZmllZCBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC90aW1lLmMKaW5kZXggNzhkZjJlNy4uMTJjNmY2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvdGltZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF90aW1lLmMKLSAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTk1ICBMaW51cyBUb3J2YWxkcwogICoKICAqIEFkYXB0ZWQgZm9yIFBvd2VyUEMgKFBSZVApIGJ5IEdhcnkgVGhvbWFzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBldmVudHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9scGV2ZW50cy5jCmluZGV4IDBiODg1MzAuLjhjYTdiOTM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBldmVudHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBldmVudHMuYwpAQCAtMTg0LDYgKzE4NCw4IEBACiB7CiAJdm9pZCAqZXZlbnRTdGFjazsKIAorCXNwaW5fbG9ja19pbml0KCZodmxwZXZlbnRfcXVldWUubG9jayk7CisKIAkvKiBBbGxvY2F0ZSBhIHBhZ2UgZm9yIHRoZSBFdmVudCBTdGFjay4gKi8KIAlldmVudFN0YWNrID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhMcEV2ZW50U3RhY2tTaXplKTsKIAltZW1zZXQoZXZlbnRTdGFjaywgMCwgTHBFdmVudFN0YWNrU2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWYuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCmluZGV4IGE0MWQ4YjcuLmQ3NzFiOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tZi5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAic2V0dXAuaCIKIAogZXh0ZXJuIGludCBwaXJhbmhhX3NpbXVsYXRvcjsKK3N0YXRpYyBpbnQgbWZfaW5pdGlhbGl6ZWQ7CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IGZvciB0aGUgTWFjaGluZSBGYWNpbGl0ZXMgTFBBUiBldmVudApAQCAtMTQzLDcgKzE0NCw4IEBACiBzdGF0aWMgc3RydWN0IHBlbmRpbmdfZXZlbnQgKnBlbmRpbmdfZXZlbnRfaGVhZDsKIHN0YXRpYyBzdHJ1Y3QgcGVuZGluZ19ldmVudCAqcGVuZGluZ19ldmVudF90YWlsOwogc3RhdGljIHN0cnVjdCBwZW5kaW5nX2V2ZW50ICpwZW5kaW5nX2V2ZW50X2F2YWlsOwotc3RhdGljIHN0cnVjdCBwZW5kaW5nX2V2ZW50IHBlbmRpbmdfZXZlbnRfcHJlYWxsb2NbMTZdOworI2RlZmluZSBQRU5ESU5HX0VWRU5UX1BSRUFMTE9DX0xFTiAxNgorc3RhdGljIHN0cnVjdCBwZW5kaW5nX2V2ZW50IHBlbmRpbmdfZXZlbnRfcHJlYWxsb2NbUEVORElOR19FVkVOVF9QUkVBTExPQ19MRU5dOwogCiAvKgogICogUHV0IGEgcGVuZGluZyBldmVudCBvbnRvIHRoZSBhdmFpbGFibGUgcXVldWUsIHNvIGl0IGNhbiBnZXQgcmV1c2VkLgpAQCAtNTk3LDcgKzU5OSw3IEBACiAgKiBHbG9iYWwga2VybmVsIGludGVyZmFjZSB0byB0ZWxsIHRoZSBWU1Agb2JqZWN0IGluIHRoZSBwcmltYXJ5CiAgKiBwYXJ0aXRpb24gdG8gcmVib290IHRoaXMgcGFydGl0aW9uLgogICovCi12b2lkIG1mX3JlYm9vdCh2b2lkKQordm9pZCBtZl9yZWJvb3QoY2hhciAqY21kKQogewogCXByaW50ayhLRVJOX0lORk8gIm1mLmM6IFByZXBhcmluZyB0byBib3VuY2UuLi5cbiIpOwogCXNpZ25hbF9jZV9tc2dfc2ltcGxlKDB4NGUsIE5VTEwpOwpAQCAtNjI1LDcgKzYyNyw3IEBACiAvKgogICogRGlzcGxheSBhIHNpbmdsZSB3b3JkIFNSQyBvZiB0aGUgZm9ybSAiUFJPR1hYWFgiIG9uIHRoZSBWU1AgY29udHJvbCBwYW5lbC4KICAqLwotdm9pZCBtZl9kaXNwbGF5X3Byb2dyZXNzKHUxNiB2YWx1ZSkKK3N0YXRpYyBfX2luaXQgdm9pZCBtZl9kaXNwbGF5X3Byb2dyZXNzX3NyYyh1MTYgdmFsdWUpCiB7CiAJdTggY2VbMTJdOwogCXU4IHNyY1s3Ml07CkBAIC02NDksMzAgKzY1MSw0MiBAQAogICogQ2xlYXIgdGhlIFZTUCBjb250cm9sIHBhbmVsLiAgVXNlZCB0byAiZXJhc2UiIGFuIFNSQyB0aGF0IHdhcwogICogcHJldmlvdXNseSBkaXNwbGF5ZWQuCiAgKi8KLXZvaWQgbWZfY2xlYXJfc3JjKHZvaWQpCitzdGF0aWMgdm9pZCBtZl9jbGVhcl9zcmModm9pZCkKIHsKIAlzaWduYWxfY2VfbXNnX3NpbXBsZSgweDRiLCBOVUxMKTsKIH0KIAordm9pZCBfX2luaXQgbWZfZGlzcGxheV9wcm9ncmVzcyh1MTYgdmFsdWUpCit7CisJaWYgKHBpcmFuaGFfc2ltdWxhdG9yIHx8ICFtZl9pbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJaWYgKDB4RkZGRiA9PSB2YWx1ZSkKKwkJbWZfY2xlYXJfc3JjKCk7CisJZWxzZQorCQltZl9kaXNwbGF5X3Byb2dyZXNzX3NyYyh2YWx1ZSk7Cit9CisKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBjb2RlIGhlcmUuCiAgKi8KLXZvaWQgbWZfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgbWZfaW5pdCh2b2lkKQogewogCWludCBpOwogCi0JLyogaW5pdGlhbGl6ZSAqLwogCXNwaW5fbG9ja19pbml0KCZwZW5kaW5nX2V2ZW50X3NwaW5sb2NrKTsKLQlmb3IgKGkgPSAwOwotCSAgICAgaSA8IHNpemVvZihwZW5kaW5nX2V2ZW50X3ByZWFsbG9jKSAvIHNpemVvZigqcGVuZGluZ19ldmVudF9wcmVhbGxvYyk7Ci0JICAgICArK2kpCisKKwlmb3IgKGkgPSAwOyBpIDwgUEVORElOR19FVkVOVF9QUkVBTExPQ19MRU47IGkrKykKIAkJZnJlZV9wZW5kaW5nX2V2ZW50KCZwZW5kaW5nX2V2ZW50X3ByZWFsbG9jW2ldKTsKKwogCUh2THBFdmVudF9yZWdpc3RlckhhbmRsZXIoSHZMcEV2ZW50X1R5cGVfTWFjaGluZUZhYywgJmh2X2hhbmRsZXIpOwogCiAJLyogdmlydHVhbCBjb250aW51ZSBhY2sgKi8KIAlzaWduYWxfY2VfbXNnX3NpbXBsZSgweDU3LCBOVUxMKTsKIAotCS8qIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlICovCisJbWZfaW5pdGlhbGl6ZWQgPSAxOworCW1iKCk7CisKIAlwcmludGsoS0VSTl9OT1RJQ0UgIm1mLmM6IGlTZXJpZXMgTGludXggTFBBUiBNYWNoaW5lIEZhY2lsaXRpZXMgIgogCQkJImluaXRpYWxpemVkXG4iKTsKIH0KQEAgLTY5Miw2ICs3MDYsNDMgQEAKIAljb21wbGV0ZSgmcnRjLT5jb20pOwogfQogCitzdGF0aWMgaW50IG1mX3NldF9ydGMoc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwljaGFyIGNlX3RpbWVbMTJdOworCXU4IGRheSwgbW9uLCBob3VyLCBtaW4sIHNlYywgeTEsIHkyOworCXVuc2lnbmVkIHllYXI7CisKKwl5ZWFyID0gMTkwMCArIHRtLT50bV95ZWFyOworCXkxID0geWVhciAvIDEwMDsKKwl5MiA9IHllYXIgJSAxMDA7CisKKwlzZWMgPSB0bS0+dG1fc2VjOworCW1pbiA9IHRtLT50bV9taW47CisJaG91ciA9IHRtLT50bV9ob3VyOworCWRheSA9IHRtLT50bV9tZGF5OworCW1vbiA9IHRtLT50bV9tb24gKyAxOworCisJQklOX1RPX0JDRChzZWMpOworCUJJTl9UT19CQ0QobWluKTsKKwlCSU5fVE9fQkNEKGhvdXIpOworCUJJTl9UT19CQ0QobW9uKTsKKwlCSU5fVE9fQkNEKGRheSk7CisJQklOX1RPX0JDRCh5MSk7CisJQklOX1RPX0JDRCh5Mik7CisKKwltZW1zZXQoY2VfdGltZSwgMCwgc2l6ZW9mKGNlX3RpbWUpKTsKKwljZV90aW1lWzNdID0gMHg0MTsKKwljZV90aW1lWzRdID0geTE7CisJY2VfdGltZVs1XSA9IHkyOworCWNlX3RpbWVbNl0gPSBzZWM7CisJY2VfdGltZVs3XSA9IG1pbjsKKwljZV90aW1lWzhdID0gaG91cjsKKwljZV90aW1lWzEwXSA9IGRheTsKKwljZV90aW1lWzExXSA9IG1vbjsKKworCXJldHVybiBzaWduYWxfY2VfbXNnKGNlX3RpbWUsIE5VTEwpOworfQorCiBzdGF0aWMgaW50IHJ0Y19zZXRfdG0oaW50IHJjLCB1OCAqY2VfbXNnLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXRtLT50bV93ZGF5ID0gMDsKQEAgLTc0Nyw3ICs3OTgsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWZfZ2V0X3J0YyhzdHJ1Y3QgcnRjX3RpbWUgKnRtKQorc3RhdGljIGludCBtZl9nZXRfcnRjKHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJc3RydWN0IGNlX21zZ19jb21wX2RhdGEgY2VfY29tcGxldGU7CiAJc3RydWN0IHJ0Y190aW1lX2RhdGEgcnRjX2RhdGE7CkBAIC03ODAsNyArODMxLDcgQEAKIAlydGMtPmJ1c3kgPSAwOwogfQogCi1pbnQgbWZfZ2V0X2Jvb3RfcnRjKHN0cnVjdCBydGNfdGltZSAqdG0pCitzdGF0aWMgaW50IG1mX2dldF9ib290X3J0YyhzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXN0cnVjdCBjZV9tc2dfY29tcF9kYXRhIGNlX2NvbXBsZXRlOwogCXN0cnVjdCBib290X3J0Y190aW1lX2RhdGEgcnRjX2RhdGE7CkBAIC04MDIsNDMgKzg1Myw2IEBACiAJcmV0dXJuIHJ0Y19zZXRfdG0ocnRjX2RhdGEucmMsIHJ0Y19kYXRhLmNlX21zZy5jZV9tc2csIHRtKTsKIH0KIAotaW50IG1mX3NldF9ydGMoc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQljaGFyIGNlX3RpbWVbMTJdOwotCXU4IGRheSwgbW9uLCBob3VyLCBtaW4sIHNlYywgeTEsIHkyOwotCXVuc2lnbmVkIHllYXI7Ci0KLQl5ZWFyID0gMTkwMCArIHRtLT50bV95ZWFyOwotCXkxID0geWVhciAvIDEwMDsKLQl5MiA9IHllYXIgJSAxMDA7Ci0KLQlzZWMgPSB0bS0+dG1fc2VjOwotCW1pbiA9IHRtLT50bV9taW47Ci0JaG91ciA9IHRtLT50bV9ob3VyOwotCWRheSA9IHRtLT50bV9tZGF5OwotCW1vbiA9IHRtLT50bV9tb24gKyAxOwotCi0JQklOX1RPX0JDRChzZWMpOwotCUJJTl9UT19CQ0QobWluKTsKLQlCSU5fVE9fQkNEKGhvdXIpOwotCUJJTl9UT19CQ0QobW9uKTsKLQlCSU5fVE9fQkNEKGRheSk7Ci0JQklOX1RPX0JDRCh5MSk7Ci0JQklOX1RPX0JDRCh5Mik7Ci0KLQltZW1zZXQoY2VfdGltZSwgMCwgc2l6ZW9mKGNlX3RpbWUpKTsKLQljZV90aW1lWzNdID0gMHg0MTsKLQljZV90aW1lWzRdID0geTE7Ci0JY2VfdGltZVs1XSA9IHkyOwotCWNlX3RpbWVbNl0gPSBzZWM7Ci0JY2VfdGltZVs3XSA9IG1pbjsKLQljZV90aW1lWzhdID0gaG91cjsKLQljZV90aW1lWzEwXSA9IGRheTsKLQljZV90aW1lWzExXSA9IG1vbjsKLQotCXJldHVybiBzaWduYWxfY2VfbXNnKGNlX3RpbWUsIE5VTEwpOwotfQotCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RhdGljIGludCBwcm9jX21mX2R1bXBfY21kbGluZShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKaW5kZXggM2Y4NzkwMS4uZmE0NTUwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9jYWxsX3htLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfcXVldWUuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9tZi5oPgorI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2V4cF92cGRfcGFuZWwuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2xwYXJfbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KQEAgLTg5LDggKzkwLDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGlTZXJpZXNfcmVjYWxfdGI7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBpU2VyaWVzX3JlY2FsX3RpdGFuOwogCi1zdGF0aWMgaW50IG1mX2luaXRpYWxpemVkOwotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjbWRfbWVtX2xpbWl0OwogCiBzdHJ1Y3QgTWVtb3J5QmxvY2sgewpAQCAtMzAzLDggKzMwMiw2IEBACiB7CiAJREJHKCIgLT4gaVNlcmllc19pbml0X2Vhcmx5KClcbiIpOwogCi0JcHBjNjRfZmlybXdhcmVfZmVhdHVyZXMgPSBGV19GRUFUVVJFX0lTRVJJRVM7Ci0KIAlwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlciA9IElDX0lTRVJJRVM7CiAKICNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOSVRSRCkKQEAgLTM0OSw4ICszNDYsNiBAQAogCUh2Q2FsbEV2ZW50X3NldExwRXZlbnRRdWV1ZUludGVycnVwdFByb2MoMCwgMCk7CiAKIAltZl9pbml0KCk7Ci0JbWZfaW5pdGlhbGl6ZWQgPSAxOwotCW1iKCk7CiAKIAkvKiBJZiB3ZSB3ZXJlIHBhc3NlZCBhbiBpbml0cmQsIHNldCB0aGUgUk9PVF9ERVYgcHJvcGVybHkgaWYgdGhlIHZhbHVlcwogCSAqIGxvb2sgc2Vuc2libGUuIElmIG5vdCwgY2xlYXIgaW5pdHJkIHJlZmVyZW5jZS4KQEAgLTU2MCwzOSArNTU1LDEwIEBACiAJc2VxX3ByaW50ZihtLCAibWFjaGluZVx0XHQ6IDY0LWJpdCBpU2VyaWVzIExvZ2ljYWwgUGFydGl0aW9uXG4iKTsKIH0KIAotLyoKLSAqIERvY3VtZW50IG1lLgotICovCi1zdGF0aWMgdm9pZCBpU2VyaWVzX3Jlc3RhcnQoY2hhciAqY21kKQotewotCW1mX3JlYm9vdCgpOwotfQotCi0vKgotICogRG9jdW1lbnQgbWUuCi0gKi8KLXN0YXRpYyB2b2lkIGlTZXJpZXNfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JbWZfcG93ZXJfb2ZmKCk7Ci19Ci0KLS8qCi0gKiBEb2N1bWVudCBtZS4KLSAqLwotc3RhdGljIHZvaWQgaVNlcmllc19oYWx0KHZvaWQpCi17Ci0JbWZfcG93ZXJfb2ZmKCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBpU2VyaWVzX3Byb2dyZXNzKGNoYXIgKiBzdCwgdW5zaWduZWQgc2hvcnQgY29kZSkKIHsKIAlwcmludGsoIlByb2dyZXNzOiBbJTA0eF0gLSAlc1xuIiwgKHVuc2lnbmVkKWNvZGUsIHN0KTsKLQlpZiAoIXBpcmFuaGFfc2ltdWxhdG9yICYmIG1mX2luaXRpYWxpemVkKSB7Ci0JCWlmIChjb2RlICE9IDB4ZmZmZikKLQkJCW1mX2Rpc3BsYXlfcHJvZ3Jlc3MoY29kZSk7Ci0JCWVsc2UKLQkJCW1mX2NsZWFyX3NyYygpOwotCX0KKwltZl9kaXNwbGF5X3Byb2dyZXNzKGNvZGUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaVNlcmllc19maXh1cF9rbGltaXQodm9pZCkKQEAgLTY0OCw2ICs2MTQsNyBAQAogCSAqIGhlcmUgYW5kIGxldCB0aGUgdGltZXJfaW50ZXJydXB0IGNvZGUgc29ydCBvdXQgdGhlIGFjdHVhbCB0aW1lLgogCSAqLwogCWdldF9scHBhY2EoKS0+aW50X2R3b3JkLmZpZWxkcy5kZWNyX2ludCA9IDE7CisJcHBjNjRfcnVubGF0Y2hfb24oKTsKIAlwcm9jZXNzX2lTZXJpZXNfZXZlbnRzKCk7CiB9CiAKQEAgLTcxMCw3ICs2NzcsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXNlcmllc19wcm9iZShpbnQgcGxhdGZvcm0pCiB7Ci0JcmV0dXJuIFBMQVRGT1JNX0lTRVJJRVNfTFBBUiA9PSBwbGF0Zm9ybTsKKwlpZiAoUExBVEZPUk1fSVNFUklFU19MUEFSICE9IHBsYXRmb3JtKQorCQlyZXR1cm4gMDsKKworCXBwYzY0X2Zpcm13YXJlX2ZlYXR1cmVzIHw9IEZXX0ZFQVRVUkVfSVNFUklFUzsKKwlwcGM2NF9maXJtd2FyZV9mZWF0dXJlcyB8PSBGV19GRUFUVVJFX0xQQVI7CisKKwlyZXR1cm4gMTsKIH0KIAogc3RydWN0IG1hY2hkZXBfY2FsbHMgX19pbml0ZGF0YSBpc2VyaWVzX21kID0gewpAQCAtNzIwLDkgKzY5Myw5IEBACiAJLmdldF9pcnEJPSBpU2VyaWVzX2dldF9pcnEsCiAJLmluaXRfZWFybHkJPSBpU2VyaWVzX2luaXRfZWFybHksCiAJLnBjaWJpb3NfZml4dXAJPSBpU2VyaWVzX3BjaV9maW5hbF9maXh1cCwKLQkucmVzdGFydAk9IGlTZXJpZXNfcmVzdGFydCwKLQkucG93ZXJfb2ZmCT0gaVNlcmllc19wb3dlcl9vZmYsCi0JLmhhbHQJCT0gaVNlcmllc19oYWx0LAorCS5yZXN0YXJ0CT0gbWZfcmVib290LAorCS5wb3dlcl9vZmYJPSBtZl9wb3dlcl9vZmYsCisJLmhhbHQJCT0gbWZfcG93ZXJfb2ZmLAogCS5nZXRfYm9vdF90aW1lCT0gaVNlcmllc19nZXRfYm9vdF90aW1lLAogCS5zZXRfcnRjX3RpbWUJPSBpU2VyaWVzX3NldF9ydGNfdGltZSwKIAkuZ2V0X3J0Y190aW1lCT0gaVNlcmllc19nZXRfcnRjX3RpbWUsCkBAIC05MTYsNiArODg5LDI0IEBACiAJZHRfZW5kX25vZGUoZHQpOwogfQogCit2b2lkIGR0X21vZGVsKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0KQoreworCWNoYXIgYnVmWzE2XSA9ICJJQk0sIjsKKworCS8qICJJQk0sIiArIG1mZ0lkWzI6M10gKyBzeXN0ZW1TZXJpYWxbMTo1XSAqLworCXN0cm5lMmEoYnVmICsgNCwgeEl0RXh0VnBkUGFuZWwubWZnSUQgKyAyLCAyKTsKKwlzdHJuZTJhKGJ1ZiArIDYsIHhJdEV4dFZwZFBhbmVsLnN5c3RlbVNlcmlhbCArIDEsIDUpOworCWJ1ZlsxMV0gPSAnXDAnOworCWR0X3Byb3Bfc3RyKGR0LCAic3lzdGVtLWlkIiwgYnVmKTsKKworCS8qICJJQk0sIiArIG1hY2hpbmVUeXBlWzA6NF0gKi8KKwlzdHJuZTJhKGJ1ZiArIDQsIHhJdEV4dFZwZFBhbmVsLm1hY2hpbmVUeXBlLCA0KTsKKwlidWZbOF0gPSAnXDAnOworCWR0X3Byb3Bfc3RyKGR0LCAibW9kZWwiLCBidWYpOworCisJZHRfcHJvcF9zdHIoZHQsICJjb21wYXRpYmxlIiwgIklCTSxpU2VyaWVzIik7Cit9CisKIHZvaWQgYnVpbGRfZmxhdF9kdChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgdW5zaWduZWQgbG9uZyBwaHlzX21lbV9zaXplKQogewogCXU2NCB0bXBbMl07CkBAIC05MjYsNiArOTE3LDcgQEAKIAogCWR0X3Byb3BfdTMyKGR0LCAiI2FkZHJlc3MtY2VsbHMiLCAyKTsKIAlkdF9wcm9wX3UzMihkdCwgIiNzaXplLWNlbGxzIiwgMik7CisJZHRfbW9kZWwoZHQpOwogCiAJLyogL21lbW9yeSAqLwogCWR0X3N0YXJ0X25vZGUoZHQsICJtZW1vcnlAMCIpOwpAQCAtOTM5LDYgKzkzMSw3IEBACiAJLyogL2Nob3NlbiAqLwogCWR0X3N0YXJ0X25vZGUoZHQsICJjaG9zZW4iKTsKIAlkdF9wcm9wX3UzMihkdCwgImxpbnV4LHBsYXRmb3JtIiwgUExBVEZPUk1fSVNFUklFU19MUEFSKTsKKwlkdF9wcm9wX3N0cihkdCwgImJvb3RhcmdzIiwgY21kX2xpbmUpOwogCWlmIChjbWRfbWVtX2xpbWl0KQogCQlkdF9wcm9wX3U2NChkdCwgImxpbnV4LG1lbW9yeS1saW1pdCIsIGNtZF9tZW1fbGltaXQpOwogCWR0X2VuZF9ub2RlKGR0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCmluZGV4IDdkNDA5OWEuLjg1ZDZjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwpAQCAtNDM1LDggKzQzNSw4IEBACiAJCQlQQ0lfRE4obnApLT5idXNubyA9IDB4ZjA7CiAJfQogCi0JLyogVGVsbCBwY2kuYyB0byB1c2UgdGhlIGNvbW1vbiByZXNvdXJjZSBhbGxvY2F0aW9uIG1lY2FuaXNtICovCi0JcGNpX3Byb2JlX29ubHkgPSAwOworCS8qIFRlbGwgcGNpLmMgdG8gbm90IGNoYW5nZSBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbnMuICAqLworCXBjaV9wcm9iZV9vbmx5ID0gMTsKIAkKIAkvKiBBbGxvdyBhbGwgSU8gKi8KIAlpb19wYWdlX21hc2sgPSAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvdGltZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS90aW1lLmMKaW5kZXggNTBiYzRlYi4uNWU2OTgxZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS90aW1lLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjNjQva2VybmVsL21hcGxlX3RpbWUuYwotICoKICAqICAoYykgQ29weXJpZ2h0IDIwMDQgQmVuamFtaW4gSGVycmVuc2NobWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnKSwKICAqICAgICAgICAgICAgICAgICAgICAgSUJNIENvcnAuIAogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKaW5kZXggNTZmZDRlMC4uY2ZkNjUyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2NwdWZyZXEuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA1IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgICAgICAgIEpvaG4gU3RlZWxlIFNjb3R0IDx0b29qYXlzQHRvb2pheXMubmV0PgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvZmVhdHVyZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKaW5kZXggNTU4ZGQwNi4uZTQ5ZWRkZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX2ZlYXR1cmUuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSBQYXVsIE1hY2tlcnJhcyAocGF1bHVzQGNzLmFudS5lZHUuYXUpCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpCiAgKgpAQCAtMTY0NiwxMCArMTY0NCwxMCBAQAogCQkgIEtMMF9TQ0NfQ0VMTF9FTkFCTEUpOwogCiAJTUFDSU9fQklDKEtFWUxBUkdPX0ZDUjEsCi0JCSAgLypLTDFfVVNCMl9DRUxMX0VOQUJMRSB8Ki8KIAkJS0wxX0kyUzBfQ0VMTF9FTkFCTEUgfCBLTDFfSTJTMF9DTEtfRU5BQkxFX0JJVCB8CiAJCUtMMV9JMlMwX0VOQUJMRSB8IEtMMV9JMlMxX0NFTExfRU5BQkxFIHwKLQkJS0wxX0kyUzFfQ0xLX0VOQUJMRV9CSVQgfCBLTDFfSTJTMV9FTkFCTEUpOworCQlLTDFfSTJTMV9DTEtfRU5BQkxFX0JJVCB8IEtMMV9JMlMxX0VOQUJMRSB8CisJCUtMMV9FSURFMF9FTkFCTEUpOwogCWlmIChwbWFjX21iLmJvYXJkX2ZsYWdzICYgUE1BQ19NQl9NT0JJTEUpCiAJCU1BQ0lPX0JJQyhLRVlMQVJHT19GQ1IxLCBLTDFfVUlERV9SRVNFVF9OKTsKIApAQCAtMjE4Myw3ICsyMTgxLDcgQEAKIAl9LAogCXsJIlBvd2VyTWFjMTAsMSIsCQkJIk1hYyBtaW5pIiwKIAkJUE1BQ19UWVBFX1VOS05PV05fSU5UUkVQSUQsCWludHJlcGlkX2ZlYXR1cmVzLAotCQlQTUFDX01CX01BWV9TTEVFUCB8IFBNQUNfTUJfSEFTX0ZXX1BPV0VSLAorCQlQTUFDX01CX01BWV9TTEVFUCwKIAl9LAogCXsJImlNYWMsMSIsCQkJImlNYWMgKGZpcnN0IGdlbmVyYXRpb24pIiwKIAkJUE1BQ19UWVBFX09SSUdfSU1BQywJCXBhZGRpbmd0b25fZmVhdHVyZXMsCkBAIC0yMjk1LDExICsyMjkzLDExIEBACiAJfSwKIAl7CSJQb3dlckJvb2s1LDgiLAkJCSJQb3dlckJvb2sgRzQgMTVcIiIsCiAJCVBNQUNfVFlQRV9VTktOT1dOX0lOVFJFUElELAlpbnRyZXBpZF9mZWF0dXJlcywKLQkJUE1BQ19NQl9NQVlfU0xFRVAgfCBQTUFDX01CX0hBU19GV19QT1dFUiB8IFBNQUNfTUJfTU9CSUxFLAorCQlQTUFDX01CX01BWV9TTEVFUCAgfCBQTUFDX01CX01PQklMRSwKIAl9LAogCXsJIlBvd2VyQm9vazUsOSIsCQkJIlBvd2VyQm9vayBHNCAxN1wiIiwKIAkJUE1BQ19UWVBFX1VOS05PV05fSU5UUkVQSUQsCWludHJlcGlkX2ZlYXR1cmVzLAotCQlQTUFDX01CX01BWV9TTEVFUCB8IFBNQUNfTUJfSEFTX0ZXX1BPV0VSIHwgUE1BQ19NQl9NT0JJTEUsCisJCVBNQUNfTUJfTUFZX1NMRUVQIHwgUE1BQ19NQl9NT0JJTEUsCiAJfSwKIAl7CSJQb3dlckJvb2s2LDEiLAkJCSJQb3dlckJvb2sgRzQgMTJcIiIsCiAJCVBNQUNfVFlQRV9VTktOT1dOX0lOVFJFUElELAlpbnRyZXBpZF9mZWF0dXJlcywKQEAgLTI0OTEsOSArMjQ4OSw3IEBACiAJCQlwbWFjX21iLm1vZGVsX2lkID0gUE1BQ19UWVBFX0NPTUVUOwogCQlpb3VubWFwKG1hY2hfaWRfcHRyKTsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX1BPV0VSNCAqLwogCi0jaWZkZWYgQ09ORklHXzZ4eAogCS8qIFNldCBkZWZhdWx0IHZhbHVlIG9mIHBvd2Vyc2F2ZV9uYXAgb24gbWFjaGluZXMgdGhhdCBzdXBwb3J0IGl0LgogCSAqIEl0IGFwcGVhcnMgdGhhdCB1bmlub3J0aCByZXYgMyBoYXMgYSBwcm9ibGVtIHdpdGggaXQsIHdlIGRvbid0CiAJICogZW5hYmxlIGl0IG9uIHRob3NlLiBJbiB0aGVvcnksIHRoZSBmbHVzaC1vbi1sb2NrIHByb3BlcnR5IGlzCkBAIC0yNTIyLDEwICsyNTE4LDExIEBACiAJICogTkFQIG1vZGUKIAkgKi8KIAlwb3dlcnNhdmVfbG93c3BlZWQgPSAxOwotI2VuZGlmIC8qIENPTkZJR182eHggKi8KLSNpZmRlZiBDT05GSUdfUE9XRVI0CisKKyNlbHNlIC8qIENPTkZJR19QT1dFUjQgKi8KIAlwb3dlcnNhdmVfbmFwID0gMTsKLSNlbmRpZgorI2VuZGlmICAvKiBDT05GSUdfUE9XRVI0ICovCisKIAkvKiBDaGVjayBmb3IgIm1vYmlsZSIgbWFjaGluZSAqLwogCWlmIChtb2RlbCAmJiAoc3RybmNtcChtb2RlbCwgIlBvd2VyQm9vayIsIDkpID09IDAKIAkJICAgfHwgc3RybmNtcChtb2RlbCwgImlCb29rIiwgNSkgPT0gMCkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKaW5kZXggM2ViZDA0NS4uNWZkMjg5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9udnJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfbnZyYW0uYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQmVuamFtaW4gSGVycmVuc2NobWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnKQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2Jhc2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jCmluZGV4IDRmZmQyYTk4Li45YjcxNTBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2Jhc2UuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2Jhc2UuYwpAQCAtOSw3ICs5LDEyIEBACiAjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9wbWFjX3BmdW5jLmg+CiAKKyN1bmRlZiBERUJVRworI2lmZGVmIERFQlVHCiAjZGVmaW5lIERCRyhmbXQuLi4pCXByaW50ayhmbXQpCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKQorI2VuZGlmCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYWNpb19ncGlvX2lycShpbnQgaXJxLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKaW5kZXggMzU2YTczOS4uNGJhYTc1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19jb3JlLmMKQEAgLTIwLDcgKzIwLDEzIEBACiAjZGVmaW5lIExPR19QQVJTRShmbXQuLi4pCiAjZGVmaW5lIExPR19FUlJPUihmbXQuLi4pCXByaW50ayhmbXQpCiAjZGVmaW5lIExPR19CTE9CKHQsYixjKQorCisjdW5kZWYgREVCVUcKKyNpZmRlZiBERUJVRwogI2RlZmluZSBEQkcoZm10Li4uKQkJcHJpbnRrKGZtdCkKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQuLi4pCisjZW5kaWYKIAogLyogQ29tbWFuZCBudW1iZXJzICovCiAjZGVmaW5lIFBNRl9DTURfTElTVAkJCTAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwppbmRleCAxOTU1NDYyLi4zODVhYWI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCkBAIC04NiwxMSArODYsMTAgQEAKIGludCBwcGNfb3ZlcnJpZGVfbDJjcl92YWx1ZTsKIGludCBoYXNfbDJjYWNoZSA9IDA7CiAKLWludCBwbWFjX25ld3dvcmxkID0gMTsKK2ludCBwbWFjX25ld3dvcmxkOwogCiBzdGF0aWMgaW50IGN1cnJlbnRfcm9vdF9nb29kbmVzcyA9IC0xOwogCi1leHRlcm4gaW50IHBtYWNfbmV3d29ybGQ7CiBleHRlcm4gc3RydWN0IG1hY2hkZXBfY2FsbHMgcG1hY19tZDsKIAogI2RlZmluZSBERUZBVUxUX1JPT1RfREVWSUNFIFJvb3RfU0RBMQkvKiBzZGExIC0gc2xpZ2h0bHkgc2lsbHkgY2hvaWNlICovCkBAIC0zMDgsOSArMzA3LDEwIEBACiAJZm9yIChpYyA9IE5VTEw7IChpYyA9IG9mX2ZpbmRfYWxsX25vZGVzKGljKSkgIT0gTlVMTDsgKQogCQlpZiAoZ2V0X3Byb3BlcnR5KGljLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLCBOVUxMKSkKIAkJCWJyZWFrOwotCXBtYWNfbmV3d29ybGQgPSAoaWMgIT0gTlVMTCk7Ci0JaWYgKGljKQorCWlmIChpYykgeworCQlwbWFjX25ld3dvcmxkID0gMTsKIAkJb2Zfbm9kZV9wdXQoaWMpOworCX0KIAogCS8qIExvb2t1cCBQQ0kgaG9zdHMgKi8KIAlwbWFjX3BjaV9pbml0KCk7CkBAIC02MjEsMTAgKzYyMSw2IEBACiAJLyogUHJvYmUgbW90aGVyYm9hcmQgY2hpcHNldCAqLwogCXBtYWNfZmVhdHVyZV9pbml0KCk7CiAKLQkvKiBXZSBjYW4gTkFQICovCi0JcG93ZXJzYXZlX25hcCA9IDE7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgbmF0aXZlL05BUCBpZGxlIGxvb3BcbiIpOwotCiAJLyogSW5pdGlhbGl6ZSBkZWJ1ZyBzdHVmZiAqLwogCXVkYmdfc2NjX2luaXQoISFzdHJzdHIoY21kX2xpbmUsICJzY2NkYmciKSk7CiAJdWRiZ19hZGJfaW5pdCghIXN0cnN0cihjbWRfbGluZSwgImJ0ZXh0ZGJnIikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKaW5kZXggMGRmMmNkYy4uMTA2NWQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCkBAIC0xOTEsOSArMTkxLDcgQEAKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPCAyKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmICghY3B1X29ubGluZShpKSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlpZiAodGFyZ2V0ID09IE1TR19BTEwKIAkJICAgIHx8ICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRiAmJiBpICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKIAkJICAgIHx8IHRhcmdldCA9PSBpKSB7CkBAIC00MzUsNyArNDMzLDcgQEAKICAqLwogCiBzdGF0aWMgdm9pZCAoKnBtYWNfdGJfZnJlZXplKShpbnQgZnJlZXplKTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWViYXNlOworc3RhdGljIHU2NCB0aW1lYmFzZTsKIHN0YXRpYyBpbnQgdGJfcmVxOwogCiBzdGF0aWMgdm9pZCBzbXBfY29yZTk5X2dpdmVfdGltZWJhc2Uodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggZTNmYzM0MC4uYTU3MDMyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTksMTMgKzksNiBAQAogCSAgcHJvY2Vzc29ycywgdGhhdCBpcywgd2hpY2ggc2hhcmUgcGh5c2ljYWwgcHJvY2Vzc29ycyBiZXR3ZWVuCiAJICB0d28gb3IgbW9yZSBwYXJ0aXRpb25zLgogCi1jb25maWcgSE1UCi0JYm9vbCAiSGFyZHdhcmUgbXVsdGl0aHJlYWRpbmciCi0JZGVwZW5kcyBvbiBTTVAgJiYgUFBDX1BTRVJJRVMgJiYgQlJPS0VOCi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBoYXJkd2FyZSBtdWx0aXRocmVhZGluZyBvbiBSUzY0IGNwdXMuCi0JICBwU2VyaWVzIHN5c3RlbXMgcDYyMCBhbmQgcDY2MCBoYXZlIHN1Y2ggYSBjcHUgdHlwZS4KLQogY29uZmlnIEVFSAogCWJvb2wgIlBDSSBFeHRlbmRlZCBFcnJvciBIYW5kbGluZyAoRUVIKSIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTCkBAIC0yNiw3ICsxOSw3IEBACiAJZGVwZW5kcyBvbiBSVEFTX1BST0MgJiYgUFBDX1BTRVJJRVMKIAogY29uZmlnIExQQVJDRkcKLQl0cmlzdGF0ZSAiTFBBUiBDb25maWd1cmF0aW9uIERhdGEiCisJYm9vbCAiTFBBUiBDb25maWd1cmF0aW9uIERhdGEiCiAJZGVwZW5kcyBvbiBQUENfUFNFUklFUyB8fCBQUENfSVNFUklFUwogCWhlbHAKIAlQcm92aWRlIHN5c3RlbSBjYXBhY2l0eSBpbmZvcm1hdGlvbiB2aWEgaHVtYW4gcmVhZGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQppbmRleCA2MTYxNmQxLi45MzA4OTg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCkBAIC0xLDUgKzEsNiBAQAogb2JqLXkJCQk6PSBwY2kubyBscGFyLm8gaHZDYWxsLm8gbnZyYW0ubyByZWNvbmZpZy5vIFwKLQkJCSAgIHNldHVwLm8gaW9tbXUubyByYXMubyBydGFzZC5vIHBjaV9kbHBhci5vCisJCQkgICBzZXR1cC5vIGlvbW11Lm8gcmFzLm8gcnRhc2QubyBwY2lfZGxwYXIubyBcCisJCQkgICBmaXJtd2FyZS5vCiBvYmotJChDT05GSUdfU01QKQkrPSBzbXAubwogb2JqLSQoQ09ORklHX0lCTVZJTykJKz0gdmlvLm8KIG9iai0kKENPTkZJR19YSUNTKQkrPSB4aWNzLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwppbmRleCA4MzU3ODMxLi4yYWI5ZGNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCkBAIC04OTMsNiArODkzLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlZWhfYWRkX2RldmljZV90cmVlX2Vhcmx5KTsKIAordm9pZCBlZWhfYWRkX2RldmljZV90cmVlX2xhdGUoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisgCQllZWhfYWRkX2RldmljZV9sYXRlKGRldik7CisgCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CisgCQkJc3RydWN0IHBjaV9idXMgKnN1YmJ1cyA9IGRldi0+c3Vib3JkaW5hdGU7CisgCQkJaWYgKHN1YmJ1cykKKyAJCQkJZWVoX2FkZF9kZXZpY2VfdHJlZV9sYXRlKHN1YmJ1cyk7CisgCQl9CisJfQorfQorCiAvKioKICAqIGVlaF9hZGRfZGV2aWNlX2xhdGUgLSBwZXJmb3JtIEVFSCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIGluZGljYXRlZCBwY2kgZGV2aWNlCiAgKiBAZGV2OiBwY2kgZGV2aWNlIGZvciB3aGljaCB0byBzZXQgdXAgRUVICmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwppbmRleCBlM2NiYmE0Li5iODExZDVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICogcGNpZF9uYW1lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlpZiAocGRldi0+ZGV2LmRyaXZlcikKKwlpZiAocGRldiAmJiBwZGV2LT5kZXYuZHJpdmVyKQogCQlyZXR1cm4gcGRldi0+ZGV2LmRyaXZlci0+bmFtZTsKIAlyZXR1cm4gIiI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OWY0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqICBwU2VyaWVzIGZpcm13YXJlIHNldHVwIGNvZGUuCisgKgorICogIFBvcnRpb25zIGZyb20gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmM6CisgKiAgIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKKyAqICAgQWRhcHRlZCBmcm9tICdhbHBoYScgdmVyc2lvbiBieSBHYXJ5IFRob21hcworICogICBNb2RpZmllZCBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KQorICogICBNb2RpZmllZCBieSBQUEM2NCBUZWFtLCBJQk0gQ29ycAorICoKKyAqICBQb3J0aW9ucyBmcm9tIGFyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYworICogICBDb3B5cmlnaHQgKEMpIDIwMDEgQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpCisgKiAgIE1vZGlmaWNhdGlvbnMgZm9yIHBwYzY0OgorICogICAgQ29weXJpZ2h0IChDKSAyMDAzIERhdmUgRW5nZWJyZXRzZW4gPGVuZ2VicmV0QHVzLmlibS5jb20+CisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDUgU3RlcGhlbiBSb3Rod2VsbCwgSUJNIENvcnBvcmF0aW9uCisgKgorICogIENvcHlyaWdodCAyMDA2IElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQuLi4pCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGxvbmcgdmFsOworICAgIGNoYXIgKiBuYW1lOworfSBmaXJtd2FyZV9mZWF0dXJlX3Q7CisKK3N0YXRpYyBfX2luaXRkYXRhIGZpcm13YXJlX2ZlYXR1cmVfdAorZmlybXdhcmVfZmVhdHVyZXNfdGFibGVbRklSTVdBUkVfTUFYX0ZFQVRVUkVTXSA9IHsKKwl7RldfRkVBVFVSRV9QRlQsCQkiaGNhbGwtcGZ0In0sCisJe0ZXX0ZFQVRVUkVfVENFLAkJImhjYWxsLXRjZSJ9LAorCXtGV19GRUFUVVJFX1NQUkcwLAkJImhjYWxsLXNwcmcwIn0sCisJe0ZXX0ZFQVRVUkVfREFCUiwJCSJoY2FsbC1kYWJyIn0sCisJe0ZXX0ZFQVRVUkVfQ09QWSwJCSJoY2FsbC1jb3B5In0sCisJe0ZXX0ZFQVRVUkVfQVNSLAkJImhjYWxsLWFzciJ9LAorCXtGV19GRUFUVVJFX0RFQlVHLAkJImhjYWxsLWRlYnVnIn0sCisJe0ZXX0ZFQVRVUkVfUEVSRiwJCSJoY2FsbC1wZXJmIn0sCisJe0ZXX0ZFQVRVUkVfRFVNUCwJCSJoY2FsbC1kdW1wIn0sCisJe0ZXX0ZFQVRVUkVfSU5URVJSVVBULAkJImhjYWxsLWludGVycnVwdCJ9LAorCXtGV19GRUFUVVJFX01JR1JBVEUsCQkiaGNhbGwtbWlncmF0ZSJ9LAorCXtGV19GRUFUVVJFX1BFUkZNT04sCQkiaGNhbGwtcGVyZm1vbiJ9LAorCXtGV19GRUFUVVJFX0NSUSwJCSJoY2FsbC1jcnEifSwKKwl7RldfRkVBVFVSRV9WSU8sCQkiaGNhbGwtdmlvIn0sCisJe0ZXX0ZFQVRVUkVfUkRNQSwJCSJoY2FsbC1yZG1hIn0sCisJe0ZXX0ZFQVRVUkVfTExBTiwJCSJoY2FsbC1sTEFOIn0sCisJe0ZXX0ZFQVRVUkVfQlVMSywJCSJoY2FsbC1idWxrIn0sCisJe0ZXX0ZFQVRVUkVfWERBQlIsCQkiaGNhbGwteGRhYnIifSwKKwl7RldfRkVBVFVSRV9NVUxUSVRDRSwJCSJoY2FsbC1tdWx0aS10Y2UifSwKKwl7RldfRkVBVFVSRV9TUExQQVIsCQkiaGNhbGwtc3BscGFyIn0sCit9OworCisvKiBCdWlsZCB1cCB0aGUgZmlybXdhcmUgZmVhdHVyZXMgYml0bWFzayB1c2luZyB0aGUgY29udGVudHMgb2YKKyAqIGRldmljZS10cmVlL2libSxoeXBlcnRhcy1mdW5jdGlvbnMuICBVbHRpbWF0ZWx5IHRoaXMgZnVuY3Rpb25hbGl0eSBtYXkKKyAqIGJlIG1vdmVkIGludG8gcHJvbS5jIHByb21faW5pdCgpLgorICovCit2b2lkIF9faW5pdCBmd19mZWF0dXJlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCWNoYXIgKmh5cGVydGFzLCAqczsKKwlpbnQgbGVuLCBpOworCisJREJHKCIgLT4gZndfZmVhdHVyZV9pbml0KClcbiIpOworCisJZG4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKKwlpZiAoZG4gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkchIENhbm5vdCBmaW5kIFJUQVMgaW4gZGV2aWNlLXRyZWUhXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaHlwZXJ0YXMgPSBnZXRfcHJvcGVydHkoZG4sICJpYm0saHlwZXJ0YXMtZnVuY3Rpb25zIiwgJmxlbik7CisJaWYgKGh5cGVydGFzID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZm9yIChzID0gaHlwZXJ0YXM7IHMgPCBoeXBlcnRhcyArIGxlbjsgcyArPSBzdHJsZW4ocykgKyAxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBGSVJNV0FSRV9NQVhfRkVBVFVSRVM7IGkrKykgeworCQkJLyogY2hlY2sgdmFsdWUgYWdhaW5zdCB0YWJsZSBvZiBzdHJpbmdzICovCisJCQlpZiAoIWZpcm13YXJlX2ZlYXR1cmVzX3RhYmxlW2ldLm5hbWUgfHwKKwkJCSAgICBzdHJjbXAoZmlybXdhcmVfZmVhdHVyZXNfdGFibGVbaV0ubmFtZSwgcykpCisJCQkJY29udGludWU7CisKKwkJCS8qIHdlIGhhdmUgYSBtYXRjaCAqLworCQkJcHBjNjRfZmlybXdhcmVfZmVhdHVyZXMgfD0KKwkJCQlmaXJtd2FyZV9mZWF0dXJlc190YWJsZVtpXS52YWw7CisJCQlicmVhazsKKwkJfQorCX0KKworb3V0OgorCW9mX25vZGVfcHV0KGRuKTsKKwlEQkcoIiA8LSBmd19mZWF0dXJlX2luaXQoKVxuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNGY1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX1BTRVJJRVNfRklSTVdBUkVfSAorI2RlZmluZSBfUFNFUklFU19GSVJNV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KKworZXh0ZXJuIHZvaWQgX19pbml0IGZ3X2ZlYXR1cmVfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIF9QU0VSSUVTX0ZJUk1XQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUwppbmRleCAxNzZlOGRhLi5kYjdjMTlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsLlMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfaHZDYWxsLlMKLSAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGdlbmVyaWMgY29kZSB0byBwZXJmb3JtIGEgY2FsbCB0byB0aGUKICAqIHBTZXJpZXMgTFBBUiBoeXBlcnZpc29yLgogICogTk9URTogdGhpcyBmaWxlIHdpbGwgZ28gYXdheSB3aGVuIHdlIG1vdmUgdG8gaW5saW5lIHRoaXMgd29yay4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggNDhjZmJmYy4uMjY0MzA3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGM2NC9rZXJuZWwvcFNlcmllc19pb21tdS5jCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAxIE1pa2UgQ29ycmlnYW4gJiBEYXZlIEVuZ2VicmV0c2VuLCBJQk0gQ29ycG9yYXRpb24KICAqCiAgKiBSZXdyaXRlLCBjbGVhbnVwOiAKQEAgLTU4Miw3ICs1ODAsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkgeworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKSB7CiAJCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX01VTFRJVENFKSkgewogCQkJcHBjX21kLnRjZV9idWlsZCA9IHRjZV9idWlsZG11bHRpX3BTZXJpZXNMUDsKIAkJCXBwY19tZC50Y2VfZnJlZQkgPSB0Y2VfZnJlZW11bHRpX3BTZXJpZXNMUDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYwppbmRleCA5OTlhOTYyLi45NDZhZDU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjNjQva2VybmVsL3BTZXJpZXNfcGNpLmMKLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2ZSBFbmdlYnJldHNlbiwgSUJNIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQW50b24gQmxhbmNoYXJkIDxhbnRvbkBhdS5pYm0uY29tPiwgSUJNCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCmluZGV4IGJkYWE4YWEuLjQ0YWJkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KIAogc3RhdGljIHN0cnVjdCBwY2lfYnVzICoKIGZpbmRfYnVzX2Ftb25nX2NoaWxkcmVuKHN0cnVjdCBwY2lfYnVzICpidXMsCkBAIC0xMDYsNiArMTA3LDggQEAKIAkJCX0KIAkJfQogCX0KKworCWVlaF9hZGRfZGV2aWNlX3RyZWVfbGF0ZShidXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpYmlvc19maXh1cF9uZXdfcGNpX2RldmljZXMpOwogCkBAIC0xMTQsNyArMTE3LDYgQEAKIHsKIAl1OCBzZWNfYnVzbm87CiAJc3RydWN0IHBjaV9idXMgKmNoaWxkX2J1czsKLQlzdHJ1Y3QgcGNpX2RldiAqY2hpbGRfZGV2OwogCiAJLyogR2V0IGJ1c25vIG9mIGRvd25zdHJlYW0gYnVzICovCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfU0VDT05EQVJZX0JVUywgJnNlY19idXNubyk7CkBAIC0xMjksMTAgKzEzMSw2IEBACiAKIAlwY2lfc2Nhbl9jaGlsZF9idXMoY2hpbGRfYnVzKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGRfZGV2LCAmY2hpbGRfYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotCQllZWhfYWRkX2RldmljZV9sYXRlKGNoaWxkX2Rldik7Ci0JfQotCiAJLyogRml4dXAgbmV3IHBjaSBkZXZpY2VzIHdpdGhvdXQgdG91Y2hpbmcgYnVzIHN0cnVjdCAqLwogCXBjaWJpb3NfZml4dXBfbmV3X3BjaV9kZXZpY2VzKGNoaWxkX2J1cywgMCk7CiAKQEAgLTE2MCwxOCArMTU4LDUyIEBACiAKIAllZWhfYWRkX2RldmljZV90cmVlX2Vhcmx5KGRuKTsKIAotCS8qIHBjaV9zY2FuX3Nsb3Qgc2hvdWxkIGZpbmQgYWxsIGNoaWxkcmVuICovCi0Jc2xvdG5vID0gUENJX1NMT1QoUENJX0ROKGRuLT5jaGlsZCktPmRldmZuKTsKLQludW0gPSBwY2lfc2Nhbl9zbG90KGJ1cywgUENJX0RFVkZOKHNsb3RubywgMCkpOwotCWlmIChudW0pIHsKLQkJcGNpYmlvc19maXh1cF9uZXdfcGNpX2RldmljZXMoYnVzLCAxKTsKLQkJcGNpX2J1c19hZGRfZGV2aWNlcyhidXMpOwotCX0KKwlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUFNFUklFU19MUEFSKSB7CisJCS8qIHVzZSBvZmR0LWJhc2VkIHByb2JlICovCisJCW9mX3NjYW5fYnVzKGRuLCBidXMpOworCQlpZiAoIWxpc3RfZW1wdHkoJmJ1cy0+ZGV2aWNlcykpIHsKKwkJCXBjaWJpb3NfZml4dXBfbmV3X3BjaV9kZXZpY2VzKGJ1cywgMCk7CisJCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7CisJCX0KKwl9IGVsc2UgeworCQkvKiB1c2UgbGVnYWN5IHByb2JlICovCisJCXNsb3RubyA9IFBDSV9TTE9UKFBDSV9ETihkbi0+Y2hpbGQpLT5kZXZmbik7CisJCW51bSA9IHBjaV9zY2FuX3Nsb3QoYnVzLCBQQ0lfREVWRk4oc2xvdG5vLCAwKSk7CisJCWlmIChudW0pIHsKKwkJCXBjaWJpb3NfZml4dXBfbmV3X3BjaV9kZXZpY2VzKGJ1cywgMSk7CisJCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7CisJCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotCQllZWhfYWRkX2RldmljZV9sYXRlIChkZXYpOwotCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKQotCQkJcGNpYmlvc19wY2lfY29uZmlnX2JyaWRnZShkZXYpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKQorCQkJCXBjaWJpb3NfcGNpX2NvbmZpZ19icmlkZ2UoZGV2KTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2liaW9zX2FkZF9wY2lfZGV2aWNlcyk7CisKK3N0cnVjdCBwY2lfY29udHJvbGxlciAqIF9fZGV2aW5pdCBpbml0X3BoYl9keW5hbWljKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGI7CisJaW50IHByaW1hcnk7CisKKwlwcmltYXJ5ID0gbGlzdF9lbXB0eSgmaG9zZV9saXN0KTsKKwlwaGIgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoZG4pOworCWlmICghcGhiKQorCQlyZXR1cm4gTlVMTDsKKwlzZXR1cF9waGIoZG4sIHBoYik7CisJcGNpX3Byb2Nlc3NfYnJpZGdlX09GX3JhbmdlcyhwaGIsIGRuLCAwKTsKKworCXBjaV9zZXR1cF9waGJfaW9fZHluYW1pYyhwaGIsIHByaW1hcnkpOworCisJcGNpX2RldnNfcGhiX2luaXRfZHluYW1pYyhwaGIpOworCisJaWYgKGRuLT5jaGlsZCkKKwkJZWVoX2FkZF9kZXZpY2VfdHJlZV9lYXJseShkbik7CisKKwlzY2FuX3BoYihwaGIpOworCXBjaWJpb3NfZml4dXBfbmV3X3BjaV9kZXZpY2VzKHBoYi0+YnVzLCAwKTsKKwlwY2lfYnVzX2FkZF9kZXZpY2VzKHBoYi0+YnVzKTsKKworCXJldHVybiBwaGI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbml0X3BoYl9keW5hbWljKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggOWVkZWNhOC4uNDRkNWM3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTYwLDcgKzYwLDYgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9udnJhbS5oPgogI2luY2x1ZGUgInhpY3MuaCIKLSNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vcG1jLmg+CiAjaW5jbHVkZSA8YXNtL21waWMuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgpAQCAtNzAsNiArNjksNyBAQAogCiAjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKICNpbmNsdWRlICJyYXMuaCIKKyNpbmNsdWRlICJmaXJtd2FyZS5oIgogCiAjaWZkZWYgREVCVUcKICNkZWZpbmUgREJHKGZtdC4uLikgdWRiZ19wcmludGYoZm10KQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCXBwY19tZC5pZGxlX2xvb3AgPSBkZWZhdWx0X2lkbGU7CiAJfQogCi0JaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKIAkJcHBjX21kLmVuYWJsZV9wbWNzID0gcHNlcmllc19scGFyX2VuYWJsZV9wbWNzOwogCWVsc2UKIAkJcHBjX21kLmVuYWJsZV9wbWNzID0gcG93ZXI0X2VuYWJsZV9wbWNzOwpAQCAtMjYyLDUzICsyNjIsNiBAQAogfQogYXJjaF9pbml0Y2FsbChwU2VyaWVzX2luaXRfcGFuZWwpOwogCi0KLS8qIEJ1aWxkIHVwIHRoZSBwcGM2NF9maXJtd2FyZV9mZWF0dXJlcyBiaXRtYXNrIGZpZWxkCi0gKiB1c2luZyBjb250ZW50cyBvZiBkZXZpY2UtdHJlZS9pYm0saHlwZXJ0YXMtZnVuY3Rpb25zLgotICogVWx0aW1hdGVseSB0aGlzIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIG1vdmVkIGludG8gcHJvbS5jIHByb21faW5pdCgpLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZndfZmVhdHVyZV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICogZG47Ci0JY2hhciAqIGh5cGVydGFzOwotCXVuc2lnbmVkIGludCBsZW47Ci0KLQlEQkcoIiAtPiBmd19mZWF0dXJlX2luaXQoKVxuIik7Ci0KLQlwcGM2NF9maXJtd2FyZV9mZWF0dXJlcyA9IDA7Ci0JZG4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKLQlpZiAoZG4gPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkcgISBDYW5ub3QgZmluZCBSVEFTIGluIGRldmljZS10cmVlICFcbiIpOwotCQlnb3RvIG5vX3J0YXM7Ci0JfQotCi0JaHlwZXJ0YXMgPSBnZXRfcHJvcGVydHkoZG4sICJpYm0saHlwZXJ0YXMtZnVuY3Rpb25zIiwgJmxlbik7Ci0JaWYgKGh5cGVydGFzKSB7Ci0JCXdoaWxlIChsZW4gPiAwKXsKLQkJCWludCBpLCBoeXBlcnRhc19sZW47Ci0JCQkvKiBjaGVjayB2YWx1ZSBhZ2FpbnN0IHRhYmxlIG9mIHN0cmluZ3MgKi8KLQkJCWZvcihpPTA7IGkgPCBGSVJNV0FSRV9NQVhfRkVBVFVSRVMgO2krKykgewotCQkJCWlmICgoZmlybXdhcmVfZmVhdHVyZXNfdGFibGVbaV0ubmFtZSkgJiYKLQkJCQkgICAgKHN0cmNtcChmaXJtd2FyZV9mZWF0dXJlc190YWJsZVtpXS5uYW1lLGh5cGVydGFzKSk9PTApIHsKLQkJCQkJLyogd2UgaGF2ZSBhIG1hdGNoICovCi0JCQkJCXBwYzY0X2Zpcm13YXJlX2ZlYXR1cmVzIHw9IAotCQkJCQkJKGZpcm13YXJlX2ZlYXR1cmVzX3RhYmxlW2ldLnZhbCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0gCi0JCQl9Ci0JCQloeXBlcnRhc19sZW4gPSBzdHJsZW4oaHlwZXJ0YXMpOwotCQkJbGVuIC09IGh5cGVydGFzX2xlbiArMTsKLQkJCWh5cGVydGFzKz0gaHlwZXJ0YXNfbGVuICsxOwotCQl9Ci0JfQotCi0Jb2Zfbm9kZV9wdXQoZG4pOwotbm9fcnRhczoKLQotCURCRygiIDwtIGZ3X2ZlYXR1cmVfaW5pdCgpXG4iKTsKLX0KLQotCiBzdGF0aWMgIHZvaWQgX19pbml0IHBTZXJpZXNfZGlzY292ZXJfcGljKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTM2NywyMSArMzIwLDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwU2VyaWVzX2luaXRfZWFybHkodm9pZCkKIHsKLQlpbnQgaW9tbXVfb2ZmID0gMDsKLQogCURCRygiIC0+IHBTZXJpZXNfaW5pdF9lYXJseSgpXG4iKTsKIAogCWZ3X2ZlYXR1cmVfaW5pdCgpOwogCQotCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCWhwdGVfaW5pdF9scGFyKCk7Ci0JZWxzZSB7CisJZWxzZQogCQlocHRlX2luaXRfbmF0aXZlKCk7Ci0JCWlvbW11X29mZiA9IChvZl9jaG9zZW4gJiYKLQkJCSAgICAgZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LGlvbW11LW9mZiIsIE5VTEwpKTsKLQl9CiAKLQlpZiAocGxhdGZvcm1faXNfbHBhcigpKQorCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQogCQlmaW5kX3VkYmdfdnRlcm0oKTsKIAogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0RBQlIpKQpAQCAtNDM3LDYgKzM4NSw5IEBACiAJICogaXQgaGVyZSAuLi4KIAkgKi8KIAorCWlmIChwbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCisJCXBwYzY0X2Zpcm13YXJlX2ZlYXR1cmVzIHw9IEZXX0ZFQVRVUkVfTFBBUjsKKwogCXJldHVybiAxOwogfQogCkBAIC01NzYsNyArNTI3LDcgQEAKIAogc3RhdGljIGludCBwU2VyaWVzX3BjaV9wcm9iZV9tb2RlKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7Ci0JaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKIAkJcmV0dXJuIFBDSV9QUk9CRV9ERVZUUkVFOwogCXJldHVybiBQQ0lfUFJPQkVfTk9STUFMOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IDhlNmIxZWQuLjNjZjc4YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogCWlmIChzdGFydF9jcHUgPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpCiAJCXJldHVybiAxOwogCi0Jc3RhdHVzID0gcnRhc19jYWxsKHN0YXJ0X2NwdSwgMywgMSwgTlVMTCwgcGNwdSwgc3RhcnRfaGVyZSwgbGNwdSk7CisJc3RhdHVzID0gcnRhc19jYWxsKHN0YXJ0X2NwdSwgMywgMSwgTlVMTCwgcGNwdSwgc3RhcnRfaGVyZSwgcGNwdSk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3RhcnQtY3B1IGZhaWxlZDogJWlcbiIsIHN0YXR1cyk7CiAJCXJldHVybiAwOwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJc21wX29wcy0+Y3B1X2RpZSA9IHBTZXJpZXNfY3B1X2RpZTsKIAogCS8qIFByb2Nlc3NvcnMgY2FuIGJlIGFkZGVkL3JlbW92ZWQgb25seSBvbiBMUEFSICovCi0JaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKIAkJcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcigmcFNlcmllc19zbXBfbmIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IGZkODIzYzcuLmViODZjZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC01MzYsNyArNTM3LDcgQEAKIAkJb2Zfbm9kZV9wdXQobnApOwogCX0KIAotCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCW9wcyA9ICZwU2VyaWVzTFBfb3BzOwogCWVsc2UgewogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggNjI5ODI2NC4uNjFkMzE3NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKQEAgLTE5NCw4ICsxOTQsNiBAQAogCSAqIHByZWZldGNoaW5nIGludG8gaW52YWxpZCBwYWdlcyBhbmQgY29ycnVwdGluZyBkYXRhCiAJICovCiAJdG1wID0gbG1iX2FsbG9jKERBUlRfUEFHRV9TSVpFLCBEQVJUX1BBR0VfU0laRSk7Ci0JaWYgKCF0bXApCi0JCXBhbmljKCJEQVJUOiBDYW5ub3QgYWxsb2NhdGUgc3BhcmUgcGFnZSEiKTsKIAlkYXJ0X2VtcHR5dmFsID0gREFSVE1BUF9WQUxJRCB8ICgodG1wID4+IERBUlRfUEFHRV9TSElGVCkgJgogCQkJCQkgREFSVE1BUF9SUE5NQVNLKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kY3IuUyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGNyLlMKaW5kZXggODk1ZjEwMi4uMjA3OGYzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kY3IuUworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2Rjci5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9kY3IuUwotICoKICAqICJJbmRpcmVjdCIgRENSIGFjY2VzcwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBFdWdlbmUgU3Vyb3ZlZ2luIDxlYnNAZWJzaG9tZS5uZXQ+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCmluZGV4IDA2NGM5ZGUuLmNlYjU4NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC00MCw3ICs0MCw3IEBACiAJCXJldHVybiBpbW1yYmFzZTsKIAogCXNvYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJzb2MiKTsKLQlpZiAoc29jICE9IDApIHsKKwlpZiAoc29jKSB7CiAJCXVuc2lnbmVkIGludCBzaXplOwogCQl2b2lkICpwcm9wID0gZ2V0X3Byb3BlcnR5KHNvYywgInJlZyIsICZzaXplKTsKIAkJaW1tcmJhc2UgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhzb2MsIHByb3ApOwpAQCAtNDksMjEgKzQ5LDIwIEBACiAKIAlyZXR1cm4gaW1tcmJhc2U7CiB9CisKIEVYUE9SVF9TWU1CT0woZ2V0X2ltbXJiYXNlKTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKiBnZmFyX3R4X2ludHIgPSAidHgiOwotc3RhdGljIGNvbnN0IGNoYXIgKiBnZmFyX3J4X2ludHIgPSAicngiOwotc3RhdGljIGNvbnN0IGNoYXIgKiBnZmFyX2Vycl9pbnRyID0gImVycm9yIjsKLQotc3RhdGljIGludCBfX2luaXQgZ2Zhcl9vZl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBnZmFyX21kaW9fb2ZfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWRpb19kZXYsICpnZmFyX2RldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptZGlvX2RldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCWludCByZXQ7CiAKLQlmb3IgKG5wID0gTlVMTCwgaSA9IDA7IChucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLCAibWRpbyIsICJnaWFuZmFyIikpICE9IE5VTEw7IGkrKykgeworCWZvciAobnAgPSBOVUxMLCBpID0gMDsKKwkgICAgIChucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLCAibWRpbyIsICJnaWFuZmFyIikpICE9IE5VTEw7CisJICAgICBpKyspIHsKIAkJaW50IGs7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMOwogCQlzdHJ1Y3QgZ2lhbmZhcl9tZGlvX2RhdGEgbWRpb19kYXRhOwpAQCAtNzMsMTIgKzcyLDE0IEBACiAKIAkJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG1kaW9fZXJyOworCQkJZ290byBlcnI7CiAKLQkJbWRpb19kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJmc2wtZ2lhbmZhcl9tZGlvIiwgcmVzLnN0YXJ0LCAmcmVzLCAxKTsKKwkJbWRpb19kZXYgPQorCQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZnNsLWdpYW5mYXJfbWRpbyIsCisJCQkJCQkgICAgcmVzLnN0YXJ0LCAmcmVzLCAxKTsKIAkJaWYgKElTX0VSUihtZGlvX2RldikpIHsKIAkJCXJldCA9IFBUUl9FUlIobWRpb19kZXYpOwotCQkJZ290byBtZGlvX2VycjsKKwkJCWdvdG8gZXJyOwogCQl9CiAKIAkJZm9yIChrID0gMDsgayA8IDMyOyBrKyspCkBAIC04NiwxNyArODcsNDQgQEAKIAogCQl3aGlsZSAoKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTCkgewogCQkJaWYgKGNoaWxkLT5uX2ludHJzKSB7Ci0JCQkJdTMyICppZCA9ICh1MzIgKikgZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7CisJCQkJdTMyICppZCA9CisJCQkJICAgICh1MzIgKikgZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7CiAJCQkJbWRpb19kYXRhLmlycVsqaWRdID0gY2hpbGQtPmludHJzWzBdLmxpbmU7CiAJCQl9CiAJCX0KIAotCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEobWRpb19kZXYsICZtZGlvX2RhdGEsIHNpemVvZihzdHJ1Y3QgZ2lhbmZhcl9tZGlvX2RhdGEpKTsKKwkJcmV0ID0KKwkJICAgIHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShtZGlvX2RldiwgJm1kaW9fZGF0YSwKKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IGdpYW5mYXJfbWRpb19kYXRhKSk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG1kaW9fdW5yZWc7CisJCQlnb3RvIHVucmVnOwogCX0KIAotCWZvciAobnAgPSBOVUxMLCBpID0gMDsgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJuZXR3b3JrIiwgImdpYW5mYXIiKSkgIT0gTlVMTDsgaSsrKSB7CisJcmV0dXJuIDA7CisKK3VucmVnOgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1kaW9fZGV2KTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKGdmYXJfbWRpb19vZl9pbml0KTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmdmYXJfdHhfaW50ciA9ICJ0eCI7CitzdGF0aWMgY29uc3QgY2hhciAqZ2Zhcl9yeF9pbnRyID0gInJ4IjsKK3N0YXRpYyBjb25zdCBjaGFyICpnZmFyX2Vycl9pbnRyID0gImVycm9yIjsKKworc3RhdGljIGludCBfX2luaXQgZ2Zhcl9vZl9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnZmFyX2RldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWludCByZXQ7CisKKwlmb3IgKG5wID0gTlVMTCwgaSA9IDA7CisJICAgICAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwgIm5ldHdvcmsiLCAiZ2lhbmZhciIpKSAhPSBOVUxMOworCSAgICAgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZSByWzRdOwogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeSwgKm1kaW87CiAJCXN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgZ2Zhcl9kYXRhOwpAQCAtMTEwLDcgKzEzOCw3IEBACiAKIAkJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJbMF0pOwogCQlpZiAocmV0KQotCQkJZ290byBnZmFyX2VycjsKKwkJCWdvdG8gZXJyOwogCiAJCXJbMV0uc3RhcnQgPSBucC0+aW50cnNbMF0ubGluZTsKIAkJclsxXS5lbmQgPSBucC0+aW50cnNbMF0ubGluZTsKQEAgLTEzMywxMSArMTYxLDEzIEBACiAJCQlyWzNdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CiAJCX0KIAotCQlnZmFyX2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImZzbC1naWFuZmFyIiwgaSwgJnJbMF0sIG5wLT5uX2ludHJzICsgMSk7CisJCWdmYXJfZGV2ID0KKwkJICAgIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImZzbC1naWFuZmFyIiwgaSwgJnJbMF0sCisJCQkJCQkgICAgbnAtPm5faW50cnMgKyAxKTsKIAogCQlpZiAoSVNfRVJSKGdmYXJfZGV2KSkgewogCQkJcmV0ID0gUFRSX0VSUihnZmFyX2Rldik7Ci0JCQlnb3RvIGdmYXJfZXJyOworCQkJZ290byBlcnI7CiAJCX0KIAogCQltYWNfYWRkciA9IGdldF9wcm9wZXJ0eShucCwgImFkZHJlc3MiLCBOVUxMKTsKQEAgLTE0NSwyNiArMTc1LDI2IEBACiAKIAkJaWYgKG1vZGVsICYmICFzdHJjYXNlY21wKG1vZGVsLCAiVFNFQyIpKQogCQkJZ2Zhcl9kYXRhLmRldmljZV9mbGFncyA9Ci0JCQkJRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUIHwKLQkJCQlGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFIHwKLQkJCQlGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04gfAotCQkJCUZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUjsKKwkJCSAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQgfAorCQkJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UgfAorCQkJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8CisJCQkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSOwogCQlpZiAobW9kZWwgJiYgIXN0cmNhc2VjbXAobW9kZWwsICJlVFNFQyIpKQogCQkJZ2Zhcl9kYXRhLmRldmljZV9mbGFncyA9Ci0JCQkJRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUIHwKLQkJCQlGU0xfR0lBTkZBUl9ERVZfSEFTX0NPQUxFU0NFIHwKLQkJCQlGU0xfR0lBTkZBUl9ERVZfSEFTX1JNT04gfAotCQkJCUZTTF9HSUFORkFSX0RFVl9IQVNfTVVMVElfSU5UUiB8Ci0JCQkJRlNMX0dJQU5GQVJfREVWX0hBU19DU1VNIHwKLQkJCQlGU0xfR0lBTkZBUl9ERVZfSEFTX1ZMQU4gfAotCQkJCUZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSDsKKwkJCSAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0dJR0FCSVQgfAorCQkJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UgfAorCQkJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfUk1PTiB8CisJCQkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19NVUxUSV9JTlRSIHwKKwkJCSAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0gfAorCQkJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfVkxBTiB8CisJCQkgICAgRlNMX0dJQU5GQVJfREVWX0hBU19FWFRFTkRFRF9IQVNIOwogCiAJCXBoID0gKHBoYW5kbGUgKikgZ2V0X3Byb3BlcnR5KG5wLCAicGh5LWhhbmRsZSIsIE5VTEwpOwogCQlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOwogCiAJCWlmIChwaHkgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT0RFVjsKLQkJCWdvdG8gZ2Zhcl91bnJlZzsKKwkJCWdvdG8gdW5yZWc7CiAJCX0KIAogCQltZGlvID0gb2ZfZ2V0X3BhcmVudChwaHkpOwpAQCAtMTc0LDcgKzIwNCw3IEBACiAJCWlmIChyZXQpIHsKIAkJCW9mX25vZGVfcHV0KHBoeSk7CiAJCQlvZl9ub2RlX3B1dChtZGlvKTsKLQkJCWdvdG8gZ2Zhcl91bnJlZzsKKwkJCWdvdG8gdW5yZWc7CiAJCX0KIAogCQlnZmFyX2RhdGEucGh5X2lkID0gKmlkOwpAQCAtMTgzLDIzICsyMTMsMjIgQEAKIAkJb2Zfbm9kZV9wdXQocGh5KTsKIAkJb2Zfbm9kZV9wdXQobWRpbyk7CiAKLQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGdmYXJfZGV2LCAmZ2Zhcl9kYXRhLCBzaXplb2Yoc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSkpOworCQlyZXQgPQorCQkgICAgcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGdmYXJfZGV2LCAmZ2Zhcl9kYXRhLAorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QKKwkJCQkJCSAgICBnaWFuZmFyX3BsYXRmb3JtX2RhdGEpKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gZ2Zhcl91bnJlZzsKKwkJCWdvdG8gdW5yZWc7CiAJfQogCiAJcmV0dXJuIDA7CiAKLW1kaW9fdW5yZWc6Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWRpb19kZXYpOwotbWRpb19lcnI6Ci0JcmV0dXJuIHJldDsKLQotZ2Zhcl91bnJlZzoKK3VucmVnOgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdmYXJfZGV2KTsKLWdmYXJfZXJyOgorZXJyOgogCXJldHVybiByZXQ7CiB9CisKIGFyY2hfaW5pdGNhbGwoZ2Zhcl9vZl9pbml0KTsKIAogc3RhdGljIGludCBfX2luaXQgZnNsX2kyY19vZl9pbml0KHZvaWQpCkBAIC0yMDksMTcgKzIzOCwxOSBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmkyY19kZXY7CiAJaW50IHJldDsKIAotCWZvciAobnAgPSBOVUxMLCBpID0gMDsgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJpMmMiLCAiZnNsLWkyYyIpKSAhPSBOVUxMOyBpKyspIHsKKwlmb3IgKG5wID0gTlVMTCwgaSA9IDA7CisJICAgICAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwgImkyYyIsICJmc2wtaTJjIikpICE9IE5VTEw7CisJICAgICBpKyspIHsKIAkJc3RydWN0IHJlc291cmNlIHJbMl07CiAJCXN0cnVjdCBmc2xfaTJjX3BsYXRmb3JtX2RhdGEgaTJjX2RhdGE7Ci0JCXVuc2lnbmVkIGNoYXIgKiBmbGFncyA9IE5VTEw7CisJCXVuc2lnbmVkIGNoYXIgKmZsYWdzID0gTlVMTDsKIAogCQltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CiAJCW1lbXNldCgmaTJjX2RhdGEsIDAsIHNpemVvZihpMmNfZGF0YSkpOwogCiAJCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyWzBdKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gaTJjX2VycjsKKwkJCWdvdG8gZXJyOwogCiAJCXJbMV0uc3RhcnQgPSBucC0+aW50cnNbMF0ubGluZTsKIAkJclsxXS5lbmQgPSBucC0+aW50cnNbMF0ubGluZTsKQEAgLTIyOCw3ICsyNTksNyBAQAogCQlpMmNfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZnNsLWkyYyIsIGksIHIsIDIpOwogCQlpZiAoSVNfRVJSKGkyY19kZXYpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGkyY19kZXYpOwotCQkJZ290byBpMmNfZXJyOworCQkJZ290byBlcnI7CiAJCX0KIAogCQlpMmNfZGF0YS5kZXZpY2VfZmxhZ3MgPSAwOwpAQCAtMjQwLDE4ICsyNzEsMjIgQEAKIAkJaWYgKGZsYWdzKQogCQkJaTJjX2RhdGEuZGV2aWNlX2ZsYWdzIHw9IEZTTF9JMkNfREVWX0NMT0NLXzUyMDA7CiAKLQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGkyY19kZXYsICZpMmNfZGF0YSwgc2l6ZW9mKHN0cnVjdCBmc2xfaTJjX3BsYXRmb3JtX2RhdGEpKTsKKwkJcmV0ID0KKwkJICAgIHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShpMmNfZGV2LCAmaTJjX2RhdGEsCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdAorCQkJCQkJICAgIGZzbF9pMmNfcGxhdGZvcm1fZGF0YSkpOwogCQlpZiAocmV0KQotCQkJZ290byBpMmNfdW5yZWc7CisJCQlnb3RvIHVucmVnOwogCX0KIAogCXJldHVybiAwOwogCi1pMmNfdW5yZWc6Cit1bnJlZzoKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihpMmNfZGV2KTsKLWkyY19lcnI6CitlcnI6CiAJcmV0dXJuIHJldDsKIH0KKwogYXJjaF9pbml0Y2FsbChmc2xfaTJjX29mX2luaXQpOwogCiAjaWZkZWYgQ09ORklHX1BQQ184M3h4CkBAIC0yNjcsNTEgKzMwMiwxOTIgQEAKIAogCWlmICghbnApIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBtcGM4M3h4X3dkdF9ub2RldjsKKwkJZ290byBub2RldjsKIAl9CiAKIAlzb2MgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAic29jIik7CiAKIAlpZiAoIXNvYykgewogCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG1wYzgzeHhfd2R0X25vc29jOworCQlnb3RvIG5vc29jOwogCX0KIAogCWZyZXEgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KHNvYywgImJ1cy1mcmVxdWVuY3kiLCBOVUxMKTsKIAlpZiAoIWZyZXEpIHsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBtcGM4M3h4X3dkdF9lcnI7CisJCWdvdG8gZXJyOwogCX0KIAogCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKIAogCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKTsKIAlpZiAocmV0KQotCQlnb3RvIG1wYzgzeHhfd2R0X2VycjsKKwkJZ290byBlcnI7CiAKIAlkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJtcGM4M3h4X3dkdCIsIDAsICZyLCAxKTsKIAlpZiAoSVNfRVJSKGRldikpIHsKIAkJcmV0ID0gUFRSX0VSUihkZXYpOwotCQlnb3RvIG1wYzgzeHhfd2R0X2VycjsKKwkJZ290byBlcnI7CiAJfQogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGRldiwgZnJlcSwgc2l6ZW9mKGludCkpOwogCWlmIChyZXQpCi0JCWdvdG8gbXBjODN4eF93ZHRfdW5yZWc7CisJCWdvdG8gdW5yZWc7CiAKIAlvZl9ub2RlX3B1dChzb2MpOwogCW9mX25vZGVfcHV0KG5wKTsKIAogCXJldHVybiAwOwogCi1tcGM4M3h4X3dkdF91bnJlZzoKK3VucmVnOgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldik7Ci1tcGM4M3h4X3dkdF9lcnI6CitlcnI6CiAJb2Zfbm9kZV9wdXQoc29jKTsKLW1wYzgzeHhfd2R0X25vc29jOgorbm9zb2M6CiAJb2Zfbm9kZV9wdXQobnApOwotbXBjODN4eF93ZHRfbm9kZXY6Citub2RldjoKIAlyZXR1cm4gcmV0OwogfQorCiBhcmNoX2luaXRjYWxsKG1wYzgzeHhfd2R0X2luaXQpOwogI2VuZGlmCisKK3N0YXRpYyBlbnVtIGZzbF91c2IyX3BoeV9tb2RlcyBkZXRlcm1pbmVfdXNiX3BoeShjaGFyICogcGh5X3R5cGUpCit7CisJaWYgKCFwaHlfdHlwZSkKKwkJcmV0dXJuIEZTTF9VU0IyX1BIWV9OT05FOworCWlmICghc3RyY2FzZWNtcChwaHlfdHlwZSwgInVscGkiKSkKKwkJcmV0dXJuIEZTTF9VU0IyX1BIWV9VTFBJOworCWlmICghc3RyY2FzZWNtcChwaHlfdHlwZSwgInV0bWkiKSkKKwkJcmV0dXJuIEZTTF9VU0IyX1BIWV9VVE1JOworCWlmICghc3RyY2FzZWNtcChwaHlfdHlwZSwgInV0bWlfd2lkZSIpKQorCQlyZXR1cm4gRlNMX1VTQjJfUEhZX1VUTUlfV0lERTsKKwlpZiAoIXN0cmNhc2VjbXAocGh5X3R5cGUsICJzZXJpYWwiKSkKKwkJcmV0dXJuIEZTTF9VU0IyX1BIWV9TRVJJQUw7CisKKwlyZXR1cm4gRlNMX1VTQjJfUEhZX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZzbF91c2Jfb2ZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXNiX2RldjsKKwlpbnQgcmV0OworCisJZm9yIChucCA9IE5VTEwsIGkgPSAwOworCSAgICAgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJ1c2IiLCAiZnNsLXVzYjItbXBoIikpICE9IE5VTEw7CisJICAgICBpKyspIHsKKwkJc3RydWN0IHJlc291cmNlIHJbMl07CisJCXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9kYXRhOworCQl1bnNpZ25lZCBjaGFyICpwcm9wID0gTlVMTDsKKworCQltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CisJCW1lbXNldCgmdXNiX2RhdGEsIDAsIHNpemVvZih1c2JfZGF0YSkpOworCisJCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyWzBdKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCXJbMV0uc3RhcnQgPSBucC0+aW50cnNbMF0ubGluZTsKKwkJclsxXS5lbmQgPSBucC0+aW50cnNbMF0ubGluZTsKKwkJclsxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROworCisJCXVzYl9kZXYgPQorCQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiZnNsLXVzYjItbXBoIiwgaSwgciwgMik7CisJCWlmIChJU19FUlIodXNiX2RldikpIHsKKwkJCXJldCA9IFBUUl9FUlIodXNiX2Rldik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXVzYl9kZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTDsKKwkJdXNiX2Rldi0+ZGV2LmRtYV9tYXNrID0gJnVzYl9kZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzazsKKworCQl1c2JfZGF0YS5vcGVyYXRpbmdfbW9kZSA9IEZTTF9VU0IyX01QSF9IT1NUOworCisJCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJwb3J0MCIsIE5VTEwpOworCQlpZiAocHJvcCkKKwkJCXVzYl9kYXRhLnBvcnRfZW5hYmxlcyB8PSBGU0xfVVNCMl9QT1JUMF9FTkFCTEVEOworCisJCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJwb3J0MSIsIE5VTEwpOworCQlpZiAocHJvcCkKKwkJCXVzYl9kYXRhLnBvcnRfZW5hYmxlcyB8PSBGU0xfVVNCMl9QT1JUMV9FTkFCTEVEOworCisJCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJwaHlfdHlwZSIsIE5VTEwpOworCQl1c2JfZGF0YS5waHlfbW9kZSA9IGRldGVybWluZV91c2JfcGh5KHByb3ApOworCisJCXJldCA9CisJCSAgICBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEodXNiX2RldiwgJnVzYl9kYXRhLAorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QKKwkJCQkJCSAgICBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhKSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucmVnOworCX0KKworCXJldHVybiAwOworCit1bnJlZzoKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih1c2JfZGV2KTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKGZzbF91c2Jfb2ZfaW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGZzbF91c2JfZHJfb2ZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXNiX2RldjsKKwlpbnQgcmV0OworCisJZm9yIChucCA9IE5VTEwsIGkgPSAwOworCSAgICAgKG5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAsICJ1c2IiLCAiZnNsLXVzYjItZHIiKSkgIT0gTlVMTDsKKwkgICAgIGkrKykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgclsyXTsKKwkJc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX2RhdGE7CisJCXVuc2lnbmVkIGNoYXIgKnByb3AgPSBOVUxMOworCisJCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKKwkJbWVtc2V0KCZ1c2JfZGF0YSwgMCwgc2l6ZW9mKHVzYl9kYXRhKSk7CisKKwkJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJbMF0pOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJclsxXS5zdGFydCA9IG5wLT5pbnRyc1swXS5saW5lOworCQlyWzFdLmVuZCA9IG5wLT5pbnRyc1swXS5saW5lOworCQlyWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CisKKwkJdXNiX2RldiA9CisJCSAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJmc2wtdXNiMi1kciIsIGksIHIsIDIpOworCQlpZiAoSVNfRVJSKHVzYl9kZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHVzYl9kZXYpOworCQkJZ290byBlcnI7CisJCX0KKworCQl1c2JfZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUw7CisJCXVzYl9kZXYtPmRldi5kbWFfbWFzayA9ICZ1c2JfZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2s7CisKKwkJdXNiX2RhdGEub3BlcmF0aW5nX21vZGUgPSBGU0xfVVNCMl9EUl9IT1NUOworCisJCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJwaHlfdHlwZSIsIE5VTEwpOworCQl1c2JfZGF0YS5waHlfbW9kZSA9IGRldGVybWluZV91c2JfcGh5KHByb3ApOworCisJCXJldCA9CisJCSAgICBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEodXNiX2RldiwgJnVzYl9kYXRhLAorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QKKwkJCQkJCSAgICBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhKSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucmVnOworCX0KKworCXJldHVybiAwOworCit1bnJlZzoKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih1c2JfZGV2KTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKGZzbF91c2JfZHJfb2ZfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5oCmluZGV4IGE3Y2U3ZGEuLmE2MGM5ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2tlcm5lbC9pcGljLmgKLSAqCiAgKiBJUElDIHByaXZhdGUgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHVyZS4KICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCA0ZjI2MzA0Li43ZGNkZmNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1waWMtPmZpeHVwX2xvY2ssIGZsYWdzKTsKIAl3cml0ZWIoMHgxMCArIDIgKiBmaXh1cC0+aW5kZXgsIGZpeHVwLT5iYXNlICsgMik7CiAJdG1wID0gcmVhZGwoZml4dXAtPmJhc2UgKyA0KTsKLQl0bXAgJj0gfjFVOworCXRtcCB8PSAxOwogCXdyaXRlbCh0bXAsIGZpeHVwLT5iYXNlICsgNCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpYy0+Zml4dXBfbG9jaywgZmxhZ3MpOwogfQpAQCAtNDQ2LDE0ICs0NDYsMTUgQEAKICNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fVTMKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgc3JjID0gaXJxIC0gbXBpYy0+aXJxX29mZnNldDsKLQotCWlmIChtcGljX2lzX2h0X2ludGVycnVwdChtcGljLCBzcmMpKQotCQltcGljX3N0YXJ0dXBfaHRfaW50ZXJydXB0KG1waWMsIHNyYywgaXJxX2Rlc2NbaXJxXS5zdGF0dXMpOwotCiAjZW5kaWYgLyogQ09ORklHX01QSUNfQlJPS0VOX1UzICovCiAKIAltcGljX2VuYWJsZV9pcnEoaXJxKTsKIAorI2lmZGVmIENPTkZJR19NUElDX0JST0tFTl9VMworCWlmIChtcGljX2lzX2h0X2ludGVycnVwdChtcGljLCBzcmMpKQorCQltcGljX3N0YXJ0dXBfaHRfaW50ZXJydXB0KG1waWMsIHNyYywgaXJxX2Rlc2NbaXJxXS5zdGF0dXMpOworI2VuZGlmIC8qIENPTkZJR19NUElDX0JST0tFTl9VMyAqLworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCA3ZDAyZmEyLi40NzM1YjQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC0xOTEsNiArMTkxLDcgQEAKICAgZGkJZHVtcCBpbnN0cnVjdGlvbnNcblwKICAgZGYJZHVtcCBmbG9hdCB2YWx1ZXNcblwKICAgZGQJZHVtcCBkb3VibGUgdmFsdWVzXG5cCisgIGRyCWR1bXAgc3RyZWFtIG9mIHJhdyBieXRlc1xuXAogICBlCXByaW50IGV4Y2VwdGlvbiBpbmZvcm1hdGlvblxuXAogICBmCWZsdXNoIGNhY2hlXG5cCiAgIGxhCWxvb2t1cCBzeW1ib2wrb2Zmc2V0IG9mIHNwZWNpZmllZCBhZGRyZXNzXG5cCkBAIC0xOTM4LDYgKzE5MzksMjggQEAKIAlyZXR1cm4gYzsKIH0KIAorc3RhdGljIHZvaWQgeG1vbl9yYXdkdW1wICh1bnNpZ25lZCBsb25nIGFkcnMsIGxvbmcgbmR1bXApCit7CisJbG9uZyBuLCBtLCByLCBucjsKKwl1bnNpZ25lZCBjaGFyIHRlbXBbMTZdOworCisJZm9yIChuID0gbmR1bXA7IG4gPiAwOykgeworCQlyID0gbiA8IDE2PyBuOiAxNjsKKwkJbnIgPSBtcmVhZChhZHJzLCB0ZW1wLCByKTsKKwkJYWRycyArPSBucjsKKwkJZm9yIChtID0gMDsgbSA8IHI7ICsrbSkgeworCQkJaWYgKG0gPCBucikKKwkJCQlwcmludGYoIiUuMngiLCB0ZW1wW21dKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiVzIiwgZmF1bHRfY2hhcnNbZmF1bHRfdHlwZV0pOworCQl9CisJCW4gLT0gcjsKKwkJaWYgKG5yIDwgcikKKwkJCWJyZWFrOworCX0KKwlwcmludGYoIlxuIik7Cit9CisKICNkZWZpbmUgaXN4ZGlnaXQoYykJKCgnMCcgPD0gKGMpICYmIChjKSA8PSAnOScpIFwKIAkJCSB8fCAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2YnKSBcCiAJCQkgfHwgKCdBJyA8PSAoYykgJiYgKGMpIDw9ICdGJykpCkBAIC0xOTYwLDYgKzE5ODMsMTMgQEAKIAkJCW5pZHVtcCA9IE1BWF9EVU1QOwogCQlhZHJzICs9IHBwY19pbnN0X2R1bXAoYWRycywgbmlkdW1wLCAxKTsKIAkJbGFzdF9jbWQgPSAiZGlcbiI7CisJfSBlbHNlIGlmIChjID09ICdyJykgeworCQlzY2FuaGV4KCZuZHVtcCk7CisJCWlmIChuZHVtcCA9PSAwKQorCQkJbmR1bXAgPSA2NDsKKwkJeG1vbl9yYXdkdW1wKGFkcnMsIG5kdW1wKTsKKwkJYWRycyArPSBuZHVtcDsKKwkJbGFzdF9jbWQgPSAiZHJcbiI7CiAJfSBlbHNlIHsKIAkJc2NhbmhleCgmbmR1bXApOwogCQlpZiAobmR1bXAgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjLzR4eF9pby9zZXJpYWxfc2ljYy5jIGIvYXJjaC9wcGMvNHh4X2lvL3NlcmlhbF9zaWNjLmMKaW5kZXggOGFjZTJhMS4uOThiMjVmYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvNHh4X2lvL3NlcmlhbF9zaWNjLmMKKysrIGIvYXJjaC9wcGMvNHh4X2lvL3NlcmlhbF9zaWNjLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjLzR4eF9pby9zZXJpYWxfc2ljYy5jCi0gKgogICogIERyaXZlciBmb3IgSUJNIFNUQjN4eHggU0lDQyBzZXJpYWwgcG9ydAogICoKICAqICBCYXNlZCBvbiBkcml2ZXJzL2NoYXIvc2VyaWFsX2FtYmEuYywgYnkgQVJNIEx0ZC4KQEAgLTE2MzksOSArMTYzNyw4IEBACiAgICAgc3RhdGUtPmNvdW50Kys7CiAgICAgaWYgKHN0YXRlLT5pbmZvKQogICAgICAgICByZXR1cm4gc3RhdGUtPmluZm87Ci0gICAgaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBTSUNDX2luZm8pLCBHRlBfS0VSTkVMKTsKKyAgICBpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IFNJQ0NfaW5mbyksIEdGUF9LRVJORUwpOwogICAgIGlmIChpbmZvKSB7Ci0gICAgICAgIG1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IFNJQ0NfaW5mbykpOwogICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwogICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jbG9zZV93YWl0KTsKICAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvOHh4X2lvL2NvbW1wcm9jLmMgYi9hcmNoL3BwYy84eHhfaW8vY29tbXByb2MuYwppbmRleCA1NzljZDQwLi4xMmI4NGNhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy84eHhfaW8vY29tbXByb2MuYworKysgYi9hcmNoL3BwYy84eHhfaW8vY29tbXByb2MuYwpAQCAtNzMsNyArNzMsNyBAQAogewogCWludCBjcG1fdmVjID0gaXJxIC0gQ1BNX0lSUV9PRkZTRVQ7CiAKLQlvdXRfYmUzMigmKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fY3BpYy5jcGljX2NpbXIsIGluX2JlMzIoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2NwaWMuY3BpY19jaW1yKSAmIH4oMSA8PCBjcG1fdmVjKSk7CisJY2xyYml0czMyKCYoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9jcGljLmNwaWNfY2ltciwgKDEgPDwgY3BtX3ZlYykpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtODEsNyArODEsNyBAQAogewogCWludCBjcG1fdmVjID0gaXJxIC0gQ1BNX0lSUV9PRkZTRVQ7CiAKLQlvdXRfYmUzMigmKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fY3BpYy5jcGljX2NpbXIsIGluX2JlMzIoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2NwaWMuY3BpY19jaW1yKSB8ICgxIDw8IGNwbV92ZWMpKTsKKwlzZXRiaXRzMzIoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2NwaWMuY3BpY19jaW1yLCAoMSA8PCBjcG1fdmVjKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlpZiAoc2V0dXBfaXJxKENQTV9JUlFfT0ZGU0VUICsgQ1BNVkVDX0VSUk9SLCAmY3BtX2Vycm9yX2lycWFjdGlvbikpCiAJCXBhbmljKCJDb3VsZCBub3QgYWxsb2NhdGUgQ1BNIGVycm9yIElSUSEiKTsKIAotCW91dF9iZTMyKCYoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9jcGljLmNwaWNfY2ljciwgaW5fYmUzMigmKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fY3BpYy5jcGljX2NpY3IpIHwgQ0lDUl9JRU4pOworCXNldGJpdHMzMigmKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fY3BpYy5jcGljX2NpY3IsIENJQ1JfSUVOKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjLzh4eF9pby9jczQyMThfdGRtLmMgYi9hcmNoL3BwYy84eHhfaW8vY3M0MjE4X3RkbS5jCmluZGV4IDQ5ZWIyYTcuLmE4OTIzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjLzh4eF9pby9jczQyMThfdGRtLmMKKysrIGIvYXJjaC9wcGMvOHh4X2lvL2NzNDIxOF90ZG0uYwpAQCAtMTI2LDExICsxMjYsMTEgQEAKICovCiBzdGF0aWMgdm9sYXRpbGUgY2JkX3QJKnJ4X2Jhc2UsICpyeF9jdXIsICp0eF9iYXNlLCAqdHhfY3VyOwogCi1NT0RVTEVfUEFSTShjYXRjaFJhZGl1cywgImkiKTsKLU1PRFVMRV9QQVJNKG51bUJ1ZnMsICJpIik7Ci1NT0RVTEVfUEFSTShidWZTaXplLCAiaSIpOwotTU9EVUxFX1BBUk0obnVtcmVhZEJ1ZnMsICJpIik7Ci1NT0RVTEVfUEFSTShyZWFkYnVmU2l6ZSwgImkiKTsKK21vZHVsZV9wYXJhbShjYXRjaFJhZGl1cywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShudW1CdWZzLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGJ1ZlNpemUsIGludCwgMCk7Cittb2R1bGVfcGFyYW0obnVtcmVhZEJ1ZnMsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocmVhZGJ1ZlNpemUsIGludCwgMCk7CiAKICNkZWZpbmUgYXJyYXlzaXplKHgpCShzaXplb2YoeCkvc2l6ZW9mKCooeCkpKQogI2RlZmluZSBsZTJiZTE2KHgpCSgoKHgpPDw4ICYgMHhmZjAwKSB8ICgoeCk+PjggJiAweDAwZmYpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvS2NvbmZpZyBiL2FyY2gvcHBjL0tjb25maWcKaW5kZXggMTE4OTlmMC4uNTRhMGE5YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvS2NvbmZpZworKysgYi9hcmNoL3BwYy9LY29uZmlnCkBAIC00ODEsNiArNDgxLDUzIEBACiAKIGVuZGNob2ljZQogCittZW51ICJGcmVlc2NhbGUgRXRoZXJuZXQgZHJpdmVyIHBsYXRmb3JtLXNwZWNpZmljIG9wdGlvbnMiCisJZGVwZW5kcyBvbiBGU19FTkVUCisKKwljb25maWcgTVBDOHh4X1NFQ09ORF9FVEgKKwlib29sICJTZWNvbmQgRXRoZXJuZXQgY2hhbm5lbCIKKwlkZXBlbmRzIG9uIChNUEM4ODVBRFMgfHwgTVBDODZYQURTKQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzZWNvbmQgRXRoZXJuZXQgb24gTVBDODg1QURTIGFuZCBNUEM4NnhBRFMgYm9hcmRzLgorCSAgVGhlIGxhdHRlciB3aWxsIHVzZSBTQ0MxLCBmb3IgODg1QURTIHlvdSBjYW4gc2VsZWN0IGl0IGJlbG93LgorCisJY2hvaWNlCisJCXByb21wdCAiU2Vjb25kIEV0aGVybmV0IGNoYW5uZWwiCisJCWRlcGVuZHMgb24gTVBDOHh4X1NFQ09ORF9FVEgKKwkJZGVmYXVsdCBNUEM4eHhfU0VDT05EX0VUSF9GRUMyCisKKwkJY29uZmlnIE1QQzh4eF9TRUNPTkRfRVRIX0ZFQzIKKwkJYm9vbCAiRkVDMiIKKwkJZGVwZW5kcyBvbiBNUEM4ODVBRFMKKwkJaGVscAorCQkgIEVuYWJsZSBGRUMyIHRvIHNlcnZlIGFzIDItbmQgRXRoZXJuZXQgY2hhbm5lbC4gTm90ZSB0aGF0IFNNQzIKKwkJICAob2Z0ZW4gMi1uZCBVQVJUKSB3aWxsIG5vdCB3b3JrIGlmIHRoaXMgaXMgZW5hYmxlZC4KKworCQljb25maWcgTVBDOHh4X1NFQ09ORF9FVEhfU0NDMQorCQlib29sICJTQ0MxIgorCQlkZXBlbmRzIG9uIE1QQzg2WEFEUworCQlzZWxlY3QgTVBDOHh4X1NDQ19FTkVUX0ZJWEVECisJCWhlbHAKKwkJICBFbmFibGUgU0NDMSB0byBzZXJ2ZSBhcyAyLW5kIEV0aGVybmV0IGNoYW5uZWwuIE5vdGUgdGhhdCBTTUMxCisJCSAgKG9mdGVuIDEtbmQgVUFSVCkgd2lsbCBub3Qgd29yayBpZiB0aGlzIGlzIGVuYWJsZWQuCisKKwkJY29uZmlnIE1QQzh4eF9TRUNPTkRfRVRIX1NDQzMKKwkJYm9vbCAiU0NDMyIKKwkJZGVwZW5kcyBvbiBNUEM4ODVBRFMKKwkJaGVscAorCQkgIEVuYWJsZSBTQ0MzIHRvIHNlcnZlIGFzIDItbmQgRXRoZXJuZXQgY2hhbm5lbC4gTm90ZSB0aGF0IFNNQzEKKwkJICAob2Z0ZW4gMS1uZCBVQVJUKSB3aWxsIG5vdCB3b3JrIGlmIHRoaXMgaXMgZW5hYmxlZC4KKworCWVuZGNob2ljZQorCisJY29uZmlnIE1QQzh4eF9TQ0NfRU5FVF9GSVhFRAorCWRlcGVuZHMgb24gTVBDOHh4X1NFQ09ORF9FVEhfU0NDCisJZGVmYXVsdCBuCisJYm9vbCAiVXNlIGZpeGVkIE1JSS1sZXNzIG1vZGUgZm9yIFNDQyBFdGhlcm5ldCIKKworZW5kbWVudQorCiBjaG9pY2UKIAlwcm9tcHQgIk1hY2hpbmUgVHlwZSIKIAlkZXBlbmRzIG9uIDZ4eCB8fCBQT1dFUjMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL0tjb25maWcuZGVidWcgYi9hcmNoL3BwYy9LY29uZmlnLmRlYnVnCmluZGV4IDYxNjUzY2IuLjhjYzc1YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wcGMvS2NvbmZpZy5kZWJ1ZwpAQCAtNjcsNyArNjcsNyBAQAogCiBjb25maWcgUFBDX09DUAogCWJvb2wKLQlkZXBlbmRzIG9uIElCTV9PQ1AgfHwgWElMSU5YX09DUAorCWRlcGVuZHMgb24gSUJNX09DUAogCWRlZmF1bHQgeQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9hbWlnYS9hbWlpbnRzLmMgYi9hcmNoL3BwYy9hbWlnYS9hbWlpbnRzLmMKaW5kZXggNWYzNWNmMy4uYjJiYmEwNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYW1pZ2EvYW1paW50cy5jCisrKyBiL2FyY2gvcHBjL2FtaWdhL2FtaWludHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL3BwYy9hbWlnYS9hbWlpbnRzLmMgLS0gQW1pZ2EgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUKKyAqIEFtaWdhIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBjb2RlCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9hbWlnYS9ib290aW5mby5jIGIvYXJjaC9wcGMvYW1pZ2EvYm9vdGluZm8uYwppbmRleCBlMmU5NjU2Li5lZmQ4NjlhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9hbWlnYS9ib290aW5mby5jCisrKyBiL2FyY2gvcHBjL2FtaWdhL2Jvb3RpbmZvLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL2FtaWdhL2Jvb3RpbmZvLmMKLSAqCiAgKiAgRXh0cmFjdGVkIGZyb20gYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jLgogICogIFNob3VsZCBiZSBwcm9wZXJseSBnZW5lcmFsaXplZCBhbmQgcHV0IHNvbWV3aGVyZSBlbHNlLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKZXNwZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2FtaWdhL2NpYS5jIGIvYXJjaC9wcGMvYW1pZ2EvY2lhLmMKaW5kZXggNDQzMWM1OC4uOTU1OGYyZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYW1pZ2EvY2lhLmMKKysrIGIvYXJjaC9wcGMvYW1pZ2EvY2lhLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL2FtaWdhL2NpYS5jIC0gQ0lBIHN1cHBvcnQKLSAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJvbWFuIFppcHBlbAogICoKICAqICBUaGUgY29uY2VwdCBvZiBzb21lIGZ1bmN0aW9ucyBiYXNlcyBvbiB0aGUgb3JpZ2luYWwgQW1pZ2EgT1MgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9wcGMvYW1pZ2EvY29uZmlnLmMKaW5kZXggNjBlMmRhMS4uYmJlNDdjOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYW1pZ2EvY29uZmlnLmMKKysrIGIvYXJjaC9wcGMvYW1pZ2EvY29uZmlnLmMKQEAgLTEsOCArMSw2IEBACiAjZGVmaW5lIG02OGtfZGVidWdfZGV2aWNlIGRlYnVnX2RldmljZQogCiAvKgotICogIGFyY2gvcHBjL2FtaWdhL2NvbmZpZy5jCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5MyBIYW1pc2ggTWFjZG9uYWxkCiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2FtaWdhL2ludHMuYyBiL2FyY2gvcHBjL2FtaWdhL2ludHMuYwppbmRleCA1ZDMxOGU0Li4wODNhMTc0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9hbWlnYS9pbnRzLmMKKysrIGIvYXJjaC9wcGMvYW1pZ2EvaW50cy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9hbWlnYS9pbnRzLmMKLSAqCiAgKiAgTGludXgvbTY4ayBnZW5lcmFsIGludGVycnVwdCBoYW5kbGluZyBjb2RlIGZyb20gYXJjaC9tNjhrL2tlcm5lbC9pbnRzLmMKICAqICBOZWVkZWQgdG8gZHJpdmUgdGhlIG02OGsgZW11bGF0aW5nIElSUSBoYXJkd2FyZSBvbiB0aGUgUG93ZXJVcCBib2FyZHMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvY29tbW9uL01ha2VmaWxlIGIvYXJjaC9wcGMvYm9vdC9jb21tb24vTWFrZWZpbGUKaW5kZXggZjg4ZDY0Ny4uYTJlODVlMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9jb21tb24vTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvYm9vdC9jb21tb24vTWFrZWZpbGUKQEAgLTEsNiArMSwzIEBACi0jCi0jIGFyY2gvcHBjL2Jvb3QvY29tbW9uL01ha2VmaWxlCi0jCiAjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICMgZm9yIG1vcmUgZGV0YWlscy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3QvY29tbW9uL2Jvb3RpbmZvLmMgYi9hcmNoL3BwYy9ib290L2NvbW1vbi9ib290aW5mby5jCmluZGV4IDljNmU1MjguLmY0ZGM5YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3QvY29tbW9uL2Jvb3RpbmZvLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9jb21tb24vYm9vdGluZm8uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9jb21tb24vYm9vdGluZm8uYwotICoKICAqIEdlbmVyYWwgYm9vdGluZm8gcmVjb3JkIHV0aWxpdGllcwogICogQXV0aG9yOiBSYW5keSBWaW5zb24gPHJ2aW5zb25AbXZpc3RhLmNvbT4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L2NvbW1vbi9taXNjLWNvbW1vbi5jIGIvYXJjaC9wcGMvYm9vdC9jb21tb24vbWlzYy1jb21tb24uYwppbmRleCBlNzllNmIzLi4wNzM4MzBhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L2NvbW1vbi9taXNjLWNvbW1vbi5jCisrKyBiL2FyY2gvcHBjL2Jvb3QvY29tbW9uL21pc2MtY29tbW9uLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC9jb21tb24vbWlzYy1jb21tb24uYwotICoKICAqIE1pc2MuIGJvb3Rsb2FkZXIgY29kZSAoYWxtb3N0KSBhbGwgcGxhdGZvcm1zIGNhbiB1c2UKICAqCiAgKiBBdXRob3I6IEpvaG5uaWUgUGV0ZXJzIDxqcGV0ZXJzQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L2NvbW1vbi9uczE2NTUwLmMgYi9hcmNoL3BwYy9ib290L2NvbW1vbi9uczE2NTUwLmMKaW5kZXggMjY4MThiYi4uNGYwMGM5MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9jb21tb24vbnMxNjU1MC5jCisrKyBiL2FyY2gvcHBjL2Jvb3QvY29tbW9uL25zMTY1NTAuYwpAQCAtOCw2ICs4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8YXNtL3NlcmlhbC5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfWElMSU5YX1ZJUlRFWCkKKyNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L3hwYXJhbWV0ZXJzL3hwYXJhbWV0ZXJzLmg+CisjZW5kaWYKICNpbmNsdWRlICJub25zdGRpby5oIgogI2luY2x1ZGUgInNlcmlhbC5oIgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L2NvbW1vbi9zZXJpYWxfc3R1Yi5jIGIvYXJjaC9wcGMvYm9vdC9jb21tb24vc2VyaWFsX3N0dWIuYwppbmRleCAwM2RmYWEwLi41Y2M5YWU2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L2NvbW1vbi9zZXJpYWxfc3R1Yi5jCisrKyBiL2FyY2gvcHBjL2Jvb3QvY29tbW9uL3NlcmlhbF9zdHViLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC9jb21tb24vc2VyaWFsX3N0dWIuYwotICoKICAqIFRoaXMgaXMgYSBmZXcgc3R1YiByb3V0aW5lcyB0byBtYWtlIHRoZSBib290IGNvZGUgY2xlYW5lciBsb29raW5nIHdoZW4KICAqIHRoZXJlIGlzIG5vIHNlcmlhbCBwb3J0IHN1cHBvcnQgZG9lc24ndCBuZWVkIHRvIGJlIGNsb3NlZCwgZm9yIGV4YW1wbGUuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9jb21tb24vdXRpbC5TIGIvYXJjaC9wcGMvYm9vdC9jb21tb24vdXRpbC5TCmluZGV4IDM2OGVjMDMuLjBjNWU0M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3QvY29tbW9uL3V0aWwuUworKysgYi9hcmNoL3BwYy9ib290L2NvbW1vbi91dGlsLlMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC9jb21tb24vdXRpbC5TCi0gKgogICogVXNlZnVsIGJvb3R1cCBmdW5jdGlvbnMsIHdoaWNoIGFyZSBtb3JlIGVhc2lseSBkb25lIGluIGFzbSB0aGFuIEMuCiAgKgogICogTk9URTogIEJlIHZlcnkgdmVyeSBjYXJlZnVsIGFib3V0IHRoZSByZWdpc3RlcnMgeW91IHVzZSBoZXJlLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9pbmNsdWRlL21wYzEweC5oIGIvYXJjaC9wcGMvYm9vdC9pbmNsdWRlL21wYzEweC5oCmluZGV4IDZjZDQwZWMuLjZlNWQ1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3QvaW5jbHVkZS9tcGMxMHguaAorKysgYi9hcmNoL3BwYy9ib290L2luY2x1ZGUvbXBjMTB4LmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC9pbmNsdWRlL21wYzEwLmgKLSAqCiAgKiBDb21tb24gZGVmaW5lcyBmb3IgdGhlIE1vdG9yb2xhIFNQUyBNUEMxMDYvODI0MC8xMDcgSG9zdCBicmlkZ2UvTWVtCiAgKiBjdHJsL0VQSUMvZXRjLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL01ha2VmaWxlIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvTWFrZWZpbGUKaW5kZXggOTUzM2Y4ZC4uMjhiZTAxYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvTWFrZWZpbGUKQEAgLTE5Miw2ICsxOTIsNyBAQAogYm9vdC0kKENPTkZJR184MjYwKQkJKz0gZW1iZWRfY29uZmlnLm8KIGJvb3QtJChDT05GSUdfRVA0MDUpCQkrPSBlbWJlZF9jb25maWcubwogYm9vdC0kKENPTkZJR19YSUxJTlhfTUwzMDApCSs9IGVtYmVkX2NvbmZpZy5vCitib290LSQoQ09ORklHX1hJTElOWF9NTDQwMykJKz0gZW1iZWRfY29uZmlnLm8KIGJvb3QtJChDT05GSUdfQlNFSVApCQkrPSBpaWMubwogYm9vdC0kKENPTkZJR19NQlgpCQkrPSBpaWMubyBwY2kubyBxc3Bhbl9wY2kubwogYm9vdC0kKENPTkZJR19NVjY0WDYwKQkJKz0gbWlzYy1tdjY0eDYwLm8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2NwYzcwMF9tZW1vcnkuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2NwYzcwMF9tZW1vcnkuYwppbmRleCA4Yzc1Y2Y2Li5kNzU0MjBhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9jcGM3MDBfbWVtb3J5LmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvY3BjNzAwX21lbW9yeS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2Jvb3QvY29tbW9uL2NwYzcwMF9tZW1vcnkuYwotICoKICAqIEZpbmQgbWVtb3J5IGJhc2VkIHVwb24gc2V0dGluZ3MgaW4gdGhlIENQQzcwMCBicmlkZ2UKICAqCiAgKiBBdXRob3I6IERhbiBDb3gKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2VtYmVkX2NvbmZpZy5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvZW1iZWRfY29uZmlnLmMKaW5kZXggNDkxYTY5MS4uM2E1MWIxMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvZW1iZWRfY29uZmlnLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvZW1iZWRfY29uZmlnLmMKQEAgLTIxLDYgKzIxLDkgQEAKICNpZmRlZiBDT05GSUdfNDB4CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfWElMSU5YX1ZJUlRFWAorI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnMuaD4KKyNlbmRpZgogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGltZWJhc2VfcGVyaW9kX25zOwogCiAvKiBGb3IgdGhvc2UgYm9hcmRzIHRoYXQgZG9uJ3QgcHJvdmlkZSBvbmUuCkBAIC03NDIsNyArNzQ1LDcgQEAKIH0KICNlbmRpZiAvKiBXSUxMT1cgKi8KIAotI2lmZGVmIENPTkZJR19YSUxJTlhfTUwzMDAKKyNpZiBkZWZpbmVkKENPTkZJR19YSUxJTlhfTUwzMDApIHx8IGRlZmluZWQoQ09ORklHX1hJTElOWF9NTDQwMykKIHZvaWQKIGVtYmVkX2NvbmZpZyhiZF90ICoqIGJkcCkKIHsKQEAgLTc3OSw3ICs3ODIsNyBAQAogCXRpbWViYXNlX3BlcmlvZF9ucyA9IDEwMDAwMDAwMDAgLyBiZC0+YmlfdGJmcmVxOwogCS8qIHNlZSBiaV90YmZyZXEgZGVmaW5pdGlvbiBpbiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDMwMC5oICovCiB9Ci0jZW5kaWYgLyogQ09ORklHX1hJTElOWF9NTDMwMCAqLworI2VuZGlmIC8qIENPTkZJR19YSUxJTlhfTUwzMDAgfHwgQ09ORklHX1hJTElOWF9NTDQwMyAqLwogCiAjaWZkZWYgQ09ORklHX0lCTV9PUEVOQklPUwogLyogVGhpcyBjb3VsZCBwb3NzaWJseSB3b3JrIGZvciBhbGwgdHJlZWJvb3Qgcm9tcy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2hlYWQuUyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL2hlYWQuUwppbmRleCA1ZTRhZGMyLi4xNjBkYTEwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9oZWFkLlMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvaGVhZC5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2Jvb3Qvc2ltcGxlL2hlYWQuUwotICoKICAqIEluaXRpYWwgYm9hcmQgYnJpbmd1cCBjb2RlIGZvciBtYW55IGRpZmZlcmVudCBib2FyZHMuCiAgKgogICogQXV0aG9yOiBUb20gUmluaQpAQCAtNjUsNiArNjMsMTMgQEAKIAkJCSAqLwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19YSUxJTlhfVklSVEVYXzRfRlgpCisJLyogUFBDIGVycmF0YSAyMTM6IG9ubHkgZm9yIFZpcnRleC00IEZYICovCisJbWZjY3IwICAwCisJb3JpcyAgICAwLDAsMHg1MDAwMDAwMEBoCisJbXRjY3IwICAwCisjZW5kaWYKKwogCW1mbHIJcjMJLyogU2F2ZSBvdXIgYWN0dWFsIHN0YXJ0aW5nIGFkZHJlc3MuICovCiAKIAkvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3ZSBjYWxsIG11c3Qgbm90IG1vZGlmeSByMyBvciByNC4uLi4uCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNoZXN0bnV0LmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNoZXN0bnV0LmMKaW5kZXggMGRjZTdmMy4uYjk0ZTE0MiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1jaGVzdG51dC5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtY2hlc3RudXQuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNoZXN0bnV0LmMKLSAqCiAgKiBTZXR1cCBmb3IgdGhlIElCTSBDaGVzdG51dCAoaWJtLTc1MGZ4Z3hfZXZhbCkKICAqCiAgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1jcGNpNjkwLmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNwY2k2OTAuYwppbmRleCAyNjg2MDMwLi44YTg2MTRkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNwY2k2OTAuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNwY2k2OTAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWNwY2k2OTAuYwotICoKICAqIEFkZCBiaXJlYyBkYXRhIGZvciBGb3JjZSBDUENJNjkwIGJvYXJkLgogICoKICAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8c291cmNlQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQyNjAuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZXY2NDI2MC5jCmluZGV4IDUyZWNlNjkuLjI2NzhjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZXY2NDI2MC5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZXY2NDI2MC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtZXY2NDI2MC5jCi0gKgogICogSG9zdCBicmlkZ2UgaW5pdCBjb2RlIGZvciB0aGUgTWFydmVsbC9HYWxpbGVvIEVWLTY0MjYwLUJQIGV2YWx1YXRpb24gYm9hcmQKICAqIHdpdGggYSBHVDY0MjYwIG9uYm9hcmQuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1ldjY0MzYwLmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQzNjAuYwppbmRleCBjZDFjY2YyLi5hMjEyYjViIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQzNjAuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQzNjAuYwpAQCAtMSw1ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWV2NjQzNjAuYwogICogQ29weXJpZ2h0IChDKSAyMDA1IExlZSBOaWNrcyA8YWxsaW51eEBnbWFpbC5jb20+CiAgKgogICogQmFzZWQgb24gYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1rYXRhbmEuYyBmcm9tOgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1rYXRhbmEuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2Mta2F0YW5hLmMKaW5kZXggZWM5NGExMS4uZDk3ZjJlZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1rYXRhbmEuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLWthdGFuYS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2Mta2F0YW5hLmMKLSAqCiAgKiBTZXQgdXAgTVBTQyB2YWx1ZXMgdG8gYm9vdHdyYXBwZXIgY2FuIHByb21wdCB1c2VyLgogICoKICAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8c291cmNlQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLW12NjR4NjAuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtbXY2NHg2MC5jCmluZGV4IDI1OGQ0NTkuLjcxZmYyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtbXY2NHg2MC5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtbXY2NHg2MC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtbXY2NHg2MC5jCi0gKgogICogUmVsb2NhdGUgYnJpZGdlJ3MgcmVnaXN0ZXIgYmFzZSBhbmQgY2FsbCBib2FyZCBzcGVjaWZpYyByb3V0aW5lLgogICoKICAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8c291cmNlQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLXByZXAuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtcHJlcC5jCmluZGV4IDc1MzgwYWMuLjYzZGVmOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtcHJlcC5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtcHJlcC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtcHJlcC5jCi0gKgogICogTWFpbnRhaW5lcjogVG9tIFJpbmkgPHRyaW5pQGtlcm5lbC5jcmFzaGluZy5vcmc+CiAgKgogICogSW4gdGhlIHBhc3Q6IEdhcnkgVGhvbWFzLCBDb3J0IERvdWdhbiA8Y29ydEBjcy5ubXQuZWR1PgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1yYWRzdG9uZV9wcGM3ZC5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1yYWRzdG9uZV9wcGM3ZC5jCmluZGV4IDU2OWUwZDQuLjBmMzAyZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MtcmFkc3RvbmVfcHBjN2QuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLXJhZHN0b25lX3BwYzdkLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1yYWRzdG9uZV9wcGM3ZC5jCi0gKgogICogTWlzYyBkYXRhIGZvciBSYWRzdG9uZSBQUEM3RCBib2FyZC4KICAqCiAgKiBBdXRob3I6IEphbWVzIENoYXBtYW4gPGpjaGFwbWFuQGthdGFsaXguY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1zcHJ1Y2UuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2Mtc3BydWNlLmMKaW5kZXggZDAxMmMzOS4uMGNhZDJmNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy1zcHJ1Y2UuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLXNwcnVjZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2Jvb3Qvc3BydWNlL21pc2MuYwotICoKICAqIE1pc2MuIGJvb3Rsb2FkZXIgY29kZSBmb3IgSUJNIFNwcnVjZSByZWZlcmVuY2UgcGxhdGZvcm0KICAqCiAgKiBBdXRob3JzOiBKb2hubmllIFBldGVycyA8anBldGVyc0BtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbWlzYy5jCmluZGV4IGY0MTVkNmMuLjNkNzg1NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21pc2MuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9taXNjLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc2ltcGxlL21pc2MuYwotICoKICAqIE1pc2MuIGJvb3Rsb2FkZXIgY29kZSBmb3IgbWFueSBtYWNoaW5lcy4gIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhcmUgdXNpbmcKICAqIGEgNnh4Lzd4eC83NHh4IENQVSBpbiB5b3VyIG1hY2hpbmUuICBUaGlzIGFzc3VtZXMgdGhlIGNodW5rIG9mIG1lbW9yeQogICogYmVsb3cgOE1CIGlzIGZyZWUuICBGaW5hbGx5LCBpdCBhc3N1bWVzIHlvdSBoYXZlIGEgTlMxNjU1MC1zdHlsZSB1YXJ0IGZvcgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXBjMTB4X21lbW9yeS5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXBjMTB4X21lbW9yeS5jCmluZGV4IDIwZDkyYTMuLmMyNDI5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21wYzEweF9tZW1vcnkuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9tcGMxMHhfbWVtb3J5LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC9jb21tb24vbXBjMTB4X2NvbW1vbi5jCi0gKgogICogQSByb3V0aW5lIHRvIGZpbmQgb3V0IGhvdyBtdWNoIG1lbW9yeSB0aGUgbWFjaGluZSBoYXMuCiAgKgogICogQmFzZWQgb246CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9tcGM1Mnh4X3R0eS5jIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXBjNTJ4eF90dHkuYwppbmRleCAzYWNjNmI3Li4xOTY0NDkzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9tcGM1Mnh4X3R0eS5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL21wYzUyeHhfdHR5LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXBjNTJ4eF90dHkuYwotICoKICAqIE1pbmltYWwgc2VyaWFsIGZ1bmN0aW9ucyBuZWVkZWQgdG8gc2VuZCBtZXNzYWdlcyBvdXQgYSBNUEM1Mnh4CiAgKiBQcm9ncmFtbWFibGUgU2VyaWFsIENvbnRyb2xsZXIgKFBTQykuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXY2NHg2MF90dHkuYyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL212NjR4NjBfdHR5LmMKaW5kZXggYjljMjRkNC4uMGM1MmY1YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9zaW1wbGUvbXY2NHg2MF90dHkuYworKysgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9tdjY0eDYwX3R0eS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2Jvb3Qvc2ltcGxlL212NjR4NjBfdHR5LmMKLSAqCiAgKiBCb290bG9hZGVyIHZlcnNpb24gb2YgdGhlIGVtYmVkZGVkIE1QU0MvVUFSVCBkcml2ZXIgZm9yIHRoZSBNYXJ2ZWxsIDY0eDYwLgogICogTm90ZTogRHVlIHRvIGEgR1Q2NDI2MEEgZXJyYXR1bSwgRE1BIHdpbGwgYmUgdXNlZCBmb3IgVUFSVCBpbnB1dCAodmlhIFNETUEpLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL29wZW5iaW9zLmMgYi9hcmNoL3BwYy9ib290L3NpbXBsZS9vcGVuYmlvcy5jCmluZGV4IDgxZjExZDguLjNmMmVkNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL29wZW5iaW9zLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvb3BlbmJpb3MuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9ib290L3NpbXBsZS9vcGVuYmlvcy5jCi0gKgogICogQ29weXJpZ2h0IChjKSAyMDA1IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKICAqIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3NpbXBsZS9yZWxvY2F0ZS5TIGIvYXJjaC9wcGMvYm9vdC9zaW1wbGUvcmVsb2NhdGUuUwppbmRleCA1NTVhMjE2Li43ZWZkZGM1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3NpbXBsZS9yZWxvY2F0ZS5TCisrKyBiL2FyY2gvcHBjL2Jvb3Qvc2ltcGxlL3JlbG9jYXRlLlMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC9zaW1wbGUvcmVsb2NhdGUuUwotICoKICAqIFRoaXMgaXMgdGhlIGNvbW1vbiBwYXJ0IG9mIHRoZSBsb2FkZXIgcmVsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24KICAqIHByb2Nlc3MuICBBbGwgb2YgdGhlIGJvYXJkL3Byb2Nlc3NvciBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBpcwogICogZG9uZSBiZWZvcmUgd2UgZ2V0IGhlcmUuCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L3V0aWxzL21rYnVnYm9vdC5jIGIvYXJjaC9wcGMvYm9vdC91dGlscy9ta2J1Z2Jvb3QuYwppbmRleCA4ODYxMjIyLi4yOTExNWUwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L3V0aWxzL21rYnVnYm9vdC5jCisrKyBiL2FyY2gvcHBjL2Jvb3QvdXRpbHMvbWtidWdib290LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvYm9vdC91dGlscy9ta2J1Z2Jvb3QuYwotICoKICAqIE1ha2VzIGEgTW90b3JvbGEgUFBDQlVHIFJPTSBib290YWJsZSBpbWFnZSB3aGljaCBjYW4gYmUgZmxhc2hlZAogICogaW50byBvbmUgb2YgdGhlIEZMQVNIIGJhbmtzIG9uIGEgTW90b3JvbGEgUG93ZXJQbHVzIGJvYXJkLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2NvbmZpZ3MvbWwzMDBfZGVmY29uZmlnIGIvYXJjaC9wcGMvY29uZmlncy9tbDMwMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzM2FjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL2NvbmZpZ3MvbWwzMDBfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzM5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYtcmMxCisjIFdlZCBKYW4gMTggMDA6NDk6MjAgMjAwNgorIworQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19QUEM9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0NMRUFOX0NPTVBJTEU9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCitDT05GSUdfU0xBQj15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfS01PRD15CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKK0NPTkZJR19MQkQ9eQorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIworIyBQcm9jZXNzb3IKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CitDT05GSUdfNDB4PXkKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUjMgaXMgbm90IHNldAorIyBDT05GSUdfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfNHh4PXkKKyMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBJQk0gNHh4IG9wdGlvbnMKKyMKKyMgQ09ORklHX0JVQklOR0EgaXMgbm90IHNldAorIyBDT05GSUdfQ1BDSTQwNSBpcyBub3Qgc2V0CisjIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SRURXT09EXzUgaXMgbm90IHNldAorIyBDT05GSUdfUkVEV09PRF82IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZQ0FNT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0CitDT05GSUdfWElMSU5YX01MMzAwPXkKK0NPTkZJR19JQk00MDVfRVJSNzc9eQorQ09ORklHX0lCTTQwNV9FUlI1MT15CitDT05GSUdfWElMSU5YX1ZJUlRFWD15CitDT05GSUdfRU1CRURERURCT09UPXkKKyMgQ09ORklHX1BQQzR4eF9ETUEgaXMgbm90IHNldAorQ09ORklHX1BQQ19HRU41NTA9eQorQ09ORklHX1VBUlQwX1RUWVMwPXkKKyMgQ09ORklHX1VBUlQwX1RUWVMxIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorCisjCisjIFBsYXRmb3JtIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCw5NjAwIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU09GVFdBUkVfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA0MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj15CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX0VNQUMgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworCisjCisjIFNOIERldmljZXMKKyMKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorCisjCisjIElCTSA0MHggb3B0aW9ucworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19YTU9OPXkKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvY29uZmlncy9tbDQwM19kZWZjb25maWcgYi9hcmNoL3BwYy9jb25maWdzL21sNDAzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZkMjUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMvY29uZmlncy9tbDQwM19kZWZjb25maWcKQEAgLTAsMCArMSw3NDAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzEKKyMgV2VkIEphbiAxOCAwMToxMTo0MSAyMDA2CisjCitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX1BQQz15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworQ09ORklHX0xCRD15CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIFByb2Nlc3NvcgorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKK0NPTkZJR180MHg9eQorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSMyBpcyBub3Qgc2V0CisjIENPTkZJR184eHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKK0NPTkZJR180eHg9eQorIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIElCTSA0eHggb3B0aW9ucworIworIyBDT05GSUdfQlVCSU5HQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUENJNDA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQNDA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0RfNSBpcyBub3Qgc2V0CisjIENPTkZJR19SRURXT09EXzYgaXMgbm90IHNldAorIyBDT05GSUdfU1lDQU1PUkUgaXMgbm90IHNldAorIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9NTDMwMCBpcyBub3Qgc2V0CitDT05GSUdfWElMSU5YX01MNDAzPXkKK0NPTkZJR19JQk00MDVfRVJSNzc9eQorQ09ORklHX0lCTTQwNV9FUlI1MT15CitDT05GSUdfWElMSU5YX1ZJUlRFWD15CitDT05GSUdfRU1CRURERURCT09UPXkKKyMgQ09ORklHX1BQQzR4eF9ETUEgaXMgbm90IHNldAorQ09ORklHX1BQQ19HRU41NTA9eQorQ09ORklHX1VBUlQwX1RUWVMwPXkKKyMgQ09ORklHX1VBUlQwX1RUWVMxIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorCisjCisjIFBsYXRmb3JtIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCw5NjAwIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfU09GVFdBUkVfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19ISUdITUVNX1NUQVJUPTB4ZmUwMDAwMDAKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfQk9PVF9MT0FEPTB4MDA0MDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19XSU5ERkFSTSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj15CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCisjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX0VNQUMgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworCisjCisjIFNOIERldmljZXMKKyMKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorCisjCisjIElCTSA0MHggb3B0aW9ucworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19YTU9OPXkKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA3OTY0YmY2Li43N2U0ZGM3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTMxLDcgKzEzMSw2IEBACiAJREVGSU5FKENQVV9TUEVDX0ZFQVRVUkVTLCBvZmZzZXRvZihzdHJ1Y3QgY3B1X3NwZWMsIGNwdV9mZWF0dXJlcykpOwogCURFRklORShDUFVfU1BFQ19TRVRVUCwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfc2V0dXApKTsKIAotCURFRklORShUSV9TSUdGUkFNRSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBudmdwcnNfZnJhbWUpKTsKIAlERUZJTkUoVElfVEFTSywgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCB0YXNrKSk7CiAJREVGSU5FKFRJX0VYRUNET01BSU4sIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZXhlY19kb21haW4pKTsKIAlERUZJTkUoVElfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9kbWEtbWFwcGluZy5jIGIvYXJjaC9wcGMva2VybmVsL2RtYS1tYXBwaW5nLmMKaW5kZXggNjg1ZmQwZC4uNjE0NjVlYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL2RtYS1tYXBwaW5nLmMKQEAgLTIyMyw2ICsyMjMsOCBAQAogCQlwdGVfdCAqcHRlID0gY29uc2lzdGVudF9wdGUgKyBDT05TSVNURU5UX09GRlNFVCh2YWRkcik7CiAJCXN0cnVjdCBwYWdlICplbmQgPSBwYWdlICsgKDEgPDwgb3JkZXIpOwogCisJCXNwbGl0X3BhZ2UocGFnZSwgb3JkZXIpOworCiAJCS8qCiAJCSAqIFNldCB0aGUgImRtYSBoYW5kbGUiCiAJCSAqLwpAQCAtMjMxLDcgKzIzMyw2IEBACiAJCWRvIHsKIAkJCUJVR19PTighcHRlX25vbmUoKnB0ZSkpOwogCi0JCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKIAkJCVNldFBhZ2VSZXNlcnZlZChwYWdlKTsKIAkJCXNldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLAogCQkJCSAgIHB0ZSwgbWtfcHRlKHBhZ2UsIHBncHJvdF9ub25jYWNoZWQoUEFHRV9LRVJORUwpKSk7CkBAIC0yNDQsNyArMjQ1LDYgQEAKIAkJICogRnJlZSB0aGUgb3RoZXJ3aXNlIHVudXNlZCBwYWdlcy4KIAkJICovCiAJCXdoaWxlIChwYWdlIDwgZW5kKSB7Ci0JCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKIAkJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQkJcGFnZSsrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCmluZGV4IGE0OGI5NTAuLjNhMjgxNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9lbnRyeS5TCkBAIC0yMjcsNyArMjI3LDcgQEAKIAlNVE1TUkQocjEwKQogCWx3eglyOSxUSV9GTEFHUyhyMTIpCiAJbGkJcjgsLV9MQVNUX0VSUk5PCi0JYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSUdQRU5ESU5HfF9USUZfTkVFRF9SRVNDSEVEfF9USUZfUkVTVE9SRUFMTCkKKwlhbmRpLglyMCxyOSwoX1RJRl9TWVNDQUxMX1RfT1JfQXxfVElGX1NJTkdMRVNURVB8X1RJRl9VU0VSX1dPUktfTUFTS3xfVElGX1BFUlNZU0NBTExfTUFTSykKIAlibmUtCXN5c2NhbGxfZXhpdF93b3JrCiAJY21wbHcJMCxyMyxyOAogCWJsdCsJc3lzY2FsbF9leGl0X2NvbnQKQEAgLTI4Nyw4ICsyODcsMTAgQEAKIAogc3lzY2FsbF9leGl0X3dvcms6CiAJYW5kaS4JcjAscjksX1RJRl9SRVNUT1JFQUxMCi0JYm5lLQkyZgotCWNtcGx3CTAscjMscjgKKwliZXErCTBmCisJUkVTVF9OVkdQUlMocjEpCisJYgkyZgorMDoJY21wbHcJMCxyMyxyOAogCWJsdCsJMWYKIAlhbmRpLglyMCxyOSxfVElGX05PRVJST1IKIAlibmUtCTFmCkBAIC0zMDIsOSArMzA0LDcgQEAKIDI6CWFuZGkuCXIwLHI5LChfVElGX1BFUlNZU0NBTExfTUFTSykKIAliZXEJNGYKIAotCS8qIENsZWFyIHBlci1zeXNjYWxsIFRJRiBmbGFncyBpZiBhbnkgYXJlIHNldCwgYnV0IF9sZWF2ZV8KLQlfVElGX1NBVkVfTlZHUFJTIHNldCBpbiByOSBzaW5jZSB3ZSBoYXZlbid0IGRlYWx0IHdpdGggdGhhdAotCXlldC4gICovCisJLyogQ2xlYXIgcGVyLXN5c2NhbGwgVElGIGZsYWdzIGlmIGFueSBhcmUgc2V0LiAgKi8KIAogCWxpCXIxMSxfVElGX1BFUlNZU0NBTExfTUFTSwogCWFkZGkJcjEyLHIxMixUSV9GTEFHUwpAQCAtMzE4LDggKzMxOCwxMyBAQAogCXN1YmkJcjEyLHIxMixUSV9GTEFHUwogCQogNDoJLyogQW55dGhpbmcgd2hpY2ggcmVxdWlyZXMgZW5hYmxpbmcgaW50ZXJydXB0cz8gKi8KLQlhbmRpLglyMCxyOSwoX1RJRl9TWVNDQUxMX1RfT1JfQXxfVElGX1NJTkdMRVNURVB8X1RJRl9TQVZFX05WR1BSUykKLQliZXEJN2YKKwlhbmRpLglyMCxyOSwoX1RJRl9TWVNDQUxMX1RfT1JfQXxfVElGX1NJTkdMRVNURVApCisJYmVxCXJldF9mcm9tX2V4Y2VwdAorCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMgKi8KKwlvcmkJcjEwLHIxMCxNU1JfRUUKKwlTWU5DCisJTVRNU1JEKHIxMCkKIAogCS8qIFNhdmUgTlZHUFJTIGlmIHRoZXkncmUgbm90IHNhdmVkIGFscmVhZHkgKi8KIAlsd3oJcjQsVFJBUChyMSkKQEAgLTMyOCw3MSArMzMzLDExIEBACiAJU0FWRV9OVkdQUlMocjEpCiAJbGkJcjQsMHhjMDAKIAlzdHcJcjQsVFJBUChyMSkKLQotCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCi01OglvcmkJcjEwLHIxMCxNU1JfRUUKLQlTWU5DCi0JTVRNU1JEKHIxMCkKLQotCWFuZGkuCXIwLHI5LF9USUZfU0FWRV9OVkdQUlMKLQlibmUJc2F2ZV91c2VyX252Z3BycwotCi1zYXZlX3VzZXJfbnZncHJzX2NvbnQ6Ci0JYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQKQotCWJlcQk3ZgotCis1OgogCWFkZGkJcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlibAlkb19zeXNjYWxsX3RyYWNlX2xlYXZlCi0JUkVTVF9OVkdQUlMocjEpCisJYglyZXRfZnJvbV9leGNlcHRfZnVsbAogCi02Oglsd3oJcjMsR1BSMyhyMSkKLQlMT0FEX01TUl9LRVJORUwocjEwLE1TUl9LRVJORUwpCS8qIGRvZXNuJ3QgaW5jbHVkZSBNU1JfRUUgKi8KLQlTWU5DCi0JTVRNU1JEKHIxMCkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAqLwotCXJsd2lubQlyMTIscjEsMCwwLDE4CS8qIGN1cnJlbnRfdGhyZWFkX2luZm8oKSAqLwotCWx3eglyOSxUSV9GTEFHUyhyMTIpCi03OgotCWFuZGkuCXIwLHI5LF9USUZfTkVFRF9SRVNDSEVECi0JYm5lCThmCi0JbHd6CXI1LF9NU1IocjEpCi0JYW5kaS4JcjUscjUsTVNSX1BSCi0JYmVxCXJldF9mcm9tX2V4Y2VwdAotCWFuZGkuCXIwLHI5LF9USUZfU0lHUEVORElORwotCWJlcQlyZXRfZnJvbV9leGNlcHQKLQliCWRvX3VzZXJfc2lnbmFsCi04OgotCW9yaQlyMTAscjEwLE1TUl9FRQotCVNZTkMKLQlNVE1TUkQocjEwKQkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgKi8KLQlibAlzY2hlZHVsZQotCWIJNmIKLQotc2F2ZV91c2VyX252Z3ByczoKLQlsd3oJcjgsVElfU0lHRlJBTUUocjEyKQotCi0ubWFjcm8gc2F2ZXdvcmRzIHN0YXJ0LCBlbmQKLSAgMToJc3R3IFxzdGFydCw0Kihcc3RhcnQpKHI4KQotCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLmFsaWduCTIKLQkubG9uZwkxYixzYXZlX3VzZXJfbnZncHJzX2ZhdWx0Ci0JLnByZXZpb3VzCi0JLmlmIFxlbmQgLSBcc3RhcnQKLQlzYXZld29yZHMgIihcc3RhcnQrMSkiLFxlbmQKLQkuZW5kaWYKLS5lbmRtCQotCXNhdmV3b3JkcyAxNCwzMQotCWIJc2F2ZV91c2VyX252Z3Byc19jb250Ci0KLQkKLXNhdmVfdXNlcl9udmdwcnNfZmF1bHQ6Ci0JbGkJcjMsMTEJCS8qIFNJR1NFR1YgKi8KLQlsd3oJcjQsVElfVEFTSyhyMTIpCi0JYmwJZm9yY2Vfc2lnc2VndgotCi0Jcmx3aW5tCXIxMixyMSwwLDAsMTgJLyogY3VycmVudF90aHJlYWRfaW5mbygpICovCi0JbHd6CXI5LFRJX0ZMQUdTKHIxMikKLQliCXNhdmVfdXNlcl9udmdwcnNfY29udAotCQogI2lmZGVmIFNIT1dfU1lTQ0FMTFMKIGRvX3Nob3dfc3lzY2FsbDoKICNpZmRlZiBTSE9XX1NZU0NBTExTX1RBU0sKQEAgLTQ5MCw2ICs0MzUsMTQgQEAKIAlzdHcJcjAsVFJBUChyMSkJCS8qIHJlZ2lzdGVyIHNldCBzYXZlZCAqLwogCWIJc3lzX2Nsb25lCiAKKwkuZ2xvYmwJcHBjX3N3YXBjb250ZXh0CitwcGNfc3dhcGNvbnRleHQ6CisJU0FWRV9OVkdQUlMocjEpCisJbHd6CXIwLFRSQVAocjEpCisJcmx3aW5tCXIwLHIwLDAsMCwzMAkJLyogY2xlYXIgTFNCIHRvIGluZGljYXRlIGZ1bGwgKi8KKwlzdHcJcjAsVFJBUChyMSkJCS8qIHJlZ2lzdGVyIHNldCBzYXZlZCAqLworCWIJc3lzX3N3YXBjb250ZXh0CisKIC8qCiAgKiBUb3AtbGV2ZWwgcGFnZSBmYXVsdCBoYW5kbGluZy4KICAqIFRoaXMgaXMgaW4gYXNzZW1ibGVyIGJlY2F1c2UgaWYgZG9fcGFnZV9mYXVsdCB0ZWxscyB1cyB0aGF0CkBAIC02ODMsNyArNjM2LDcgQEAKIAkvKiBDaGVjayBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzICovCiAJcmx3aW5tCXI5LHIxLDAsMCwxOAogCWx3eglyOSxUSV9GTEFHUyhyOSkKLQlhbmRpLglyMCxyOSwoX1RJRl9TSUdQRU5ESU5HfF9USUZfTkVFRF9SRVNDSEVEfF9USUZfUkVTVE9SRUFMTCkKKwlhbmRpLglyMCxyOSwoX1RJRl9TSUdQRU5ESU5HfF9USUZfUkVTVE9SRV9TSUdNQVNLfF9USUZfTkVFRF9SRVNDSEVEKQogCWJuZQlkb193b3JrCiAKIHJlc3RvcmVfdXNlcjoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZC5TCmluZGV4IGM1YTg5MGQuLjUzZWE4NDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWQuUwpAQCAtNzUxLDYgKzc1MSw3IEBACiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIAlibmUJbG9hZF91cF9hbHRpdmVjCQkvKiBpZiBmcm9tIHVzZXIsIGp1c3QgbG9hZCBpdCB1cCAqLwogI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCisJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAogCUVYQ19YRkVSX0VFX0xJVEUoMHhmMjAsIGFsdGl2ZWNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKQogCiAjaWZkZWYgQ09ORklHX1BQQzY0QlJJREdFCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF80NHguUyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzQ0eC5TCmluZGV4IDY3N2M1NzEuLjBkOGI4ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzQ0eC5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkXzQ0eC5TCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2tlcm5lbC9oZWFkXzQ0eC5TCi0gKgogICogS2VybmVsIGV4ZWN1dGlvbiBlbnRyeSBwb2ludCBjb2RlLgogICoKICAqICAgIENvcHlyaWdodCAoYykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIDxnZHRAbGludXhwcGMub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2hlYWRfOHh4LlMgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF84eHguUwppbmRleCBjMWU4OWFkLi5lYzUzYzdkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF84eHguUworKysgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF84eHguUwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGMva2VybmVsL2V4Y2VwdF84eHguUwotICoKICAqICBQb3dlclBDIHZlcnNpb24KICAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQogICogIFJld3JpdHRlbiBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KSBmb3IgUFJlUApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwppbmRleCA4ZDYwZmE5Li5kZDg2YmJlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUwotICoKICAqIEtlcm5lbCBleGVjdXRpb24gZW50cnkgcG9pbnQgY29kZS4KICAqCiAgKiAgICBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyA8Z2R0QGxpbnV4cHBjLm9yZz4KQEAgLTMxNiw2ICszMTQsNyBAQAogCSAqLwogCWxpcwlyMixEQkNSMF9JRE1AaAogCW10c3ByCVNQUk5fREJDUjAscjIKKwlpc3luYwogCS8qIGNsZWFyIGFueSByZXNpZHVhbCBkZWJ1ZyBldmVudHMgKi8KIAlsaQlyMiwtMQogCW10c3ByCVNQUk5fREJTUixyMgpAQCAtMTAwMiwxMiArMTAwMSwxNSBAQAogX0dMT0JBTChhYm9ydCkKIAlsaQlyMTMsMAogICAgICAgICBtdHNwciAgIFNQUk5fREJDUjAscjEzCQkvKiBkaXNhYmxlIGFsbCBkZWJ1ZyBldmVudHMgKi8KKwlpc3luYwogCW1mbXNyCXIxMwogCW9yaQlyMTMscjEzLE1TUl9ERUBsCS8qIEVuYWJsZSBEZWJ1ZyBFdmVudHMgKi8KIAltdG1zcglyMTMKKwlpc3luYwogICAgICAgICBtZnNwciAgIHIxMyxTUFJOX0RCQ1IwCiAgICAgICAgIGxpcwlyMTMsKERCQ1IwX0lETXxEQkNSMF9SU1RfQ0hJUClAaAogICAgICAgICBtdHNwciAgIFNQUk5fREJDUjAscjEzCisJaXN5bmMKIAogX0dMT0JBTChzZXRfY29udGV4dCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IDE1YmQ5YjQuLjgyYWRiNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTkzLDE1ICs5Myw4IEBACiBFWFBPUlRfU1lNQk9MKHN0cmNweSk7CiBFWFBPUlRfU1lNQk9MKHN0cm5jcHkpOwogRVhQT1JUX1NZTUJPTChzdHJjYXQpOwotRVhQT1JUX1NZTUJPTChzdHJuY2F0KTsKLUVYUE9SVF9TWU1CT0woc3RyY2hyKTsKLUVYUE9SVF9TWU1CT0woc3RycmNocik7Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwotRVhQT1JUX1NZTUJPTChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTChzdHJsZW4pOwotRVhQT1JUX1NZTUJPTChzdHJubGVuKTsKIEVYUE9SVF9TWU1CT0woc3RyY21wKTsKLUVYUE9SVF9TWU1CT0woc3RybmNtcCk7CiBFWFBPUlRfU1lNQk9MKHN0cmNhc2VjbXApOwogRVhQT1JUX1NZTUJPTChfX2RpdjY0XzMyKTsKIApAQCAtMjUzLDcgKzI0Niw2IEBACiBFWFBPUlRfU1lNQk9MKGNhY2hlYWJsZV9tZW1jcHkpOwogRVhQT1JUX1NZTUJPTChtZW1zZXQpOwogRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKLUVYUE9SVF9TWU1CT0wobWVtc2Nhbik7CiBFWFBPUlRfU1lNQk9MKG1lbWNtcCk7CiBFWFBPUlRfU1lNQk9MKG1lbWNocik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKaW5kZXggYzA4YWI0MzIuLjUzZTlkZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCkBAIC0xNjgsOSArMTY4LDggQEAKIAkJLyogU2hvdyBzdW1tYXJ5IGluZm9ybWF0aW9uICovCiAjaWZkZWYgQ09ORklHX1NNUAogCQl1bnNpZ25lZCBsb25nIGJvZ29zdW0gPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgKytpKQotCQkJaWYgKGNwdV9vbmxpbmUoaSkpCi0JCQkJYm9nb3N1bSArPSBjcHVfZGF0YVtpXS5sb29wc19wZXJfamlmZnk7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJCWJvZ29zdW0gKz0gY3B1X2RhdGFbaV0ubG9vcHNfcGVyX2ppZmZ5OwogCQlzZXFfcHJpbnRmKG0sICJ0b3RhbCBib2dvbWlwc1x0OiAlbHUuJTAybHVcbiIsCiAJCQkgICBib2dvc3VtLyg1MDAwMDAvSFopLCBib2dvc3VtLyg1MDAwL0haKSAlIDEwMCk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpAQCAtNzEyLDkgKzcxMSw4IEBACiAJaWYgKCBwcGNfbWQucHJvZ3Jlc3MgKSBwcGNfbWQucHJvZ3Jlc3MoIiAgICAgICAgICAgICAiLCAweGZmZmYpOwogCiAJLyogcmVnaXN0ZXIgQ1BVIGRldmljZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQotCQlpZiAoY3B1X3Bvc3NpYmxlKGkpKQotCQkJcmVnaXN0ZXJfY3B1KCZjcHVfZGV2aWNlc1tpXSwgaSwgTlVMTCk7CisJZm9yX2VhY2hfY3B1KGkpCisJCXJlZ2lzdGVyX2NwdSgmY3B1X2RldmljZXNbaV0sIGksIE5VTEwpOwogCiAJLyogY2FsbCBwbGF0Zm9ybSBpbml0ICovCiAJaWYgKHBwY19tZC5pbml0ICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zbXAtdGJzeW5jLmMgYi9hcmNoL3BwYy9rZXJuZWwvc21wLXRic3luYy5jCmluZGV4IDJjOWNkOTUuLjZhNTY5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9zbXAtdGJzeW5jLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NtcC10YnN5bmMuYwpAQCAtMTI2LDggKzEyNiw3IEBACiAJcHJpbnRrKCJTeW5jaHJvbml6aW5nIHRpbWViYXNlXG4iKTsKIAogCS8qIGlmIHRoaXMgZmFpbHMgdGhlbiB0aGlzIGtlcm5lbCB3b24ndCB3b3JrIGFueXdheS4uLiAqLwotCXRic3luYyA9IGttYWxsb2MoIHNpemVvZigqdGJzeW5jKSwgR0ZQX0tFUk5FTCApOwotCW1lbXNldCggdGJzeW5jLCAwLCBzaXplb2YoKnRic3luYykgKTsKKwl0YnN5bmMgPSBremFsbG9jKCBzaXplb2YoKnRic3luYyksIEdGUF9LRVJORUwgKTsKIAltYigpOwogCXJ1bm5pbmcgPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDZkMGExODMuLjFjMGQ2ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiAgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2xpYi9yaGVhcC5jIGIvYXJjaC9wcGMvbGliL3JoZWFwLmMKaW5kZXggNDJjNWRlMi4uMzFlNTExOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbGliL3JoZWFwLmMKKysrIGIvYXJjaC9wcGMvbGliL3JoZWFwLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL3JoZWFwLmMKLSAqCiAgKiBBIFJlbW90ZSBIZWFwLiAgUmVtb3RlIG1lYW5zIHRoYXQgd2UgZG9uJ3QgdG91Y2ggdGhlIG1lbW9yeSB0aGF0IHRoZQogICogaGVhcCBwb2ludHMgdG8uIE5vcm1hbCBoZWFwIGltcGxlbWVudGF0aW9ucyB1c2UgdGhlIG1lbW9yeSB0aGV5IG1hbmFnZQogICogdG8gcGxhY2UgdGhlaXIgbGlzdC4gV2UgY2Fubm90IGRvIHRoYXQgYmVjYXVzZSB0aGUgbWVtb3J5IHdlIG1hbmFnZSBtYXkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21hdGgtZW11L21hdGguYyBiL2FyY2gvcHBjL21hdGgtZW11L21hdGguYwppbmRleCBiN2RmZjUzLi41ODkxNTM0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9tYXRoLWVtdS9tYXRoLmMKKysrIGIvYXJjaC9wcGMvbWF0aC1lbXUvbWF0aC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL21hdGgtZW11L21hdGguYwotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSAgRWRkaWUgQy4gRG9zdCAgKGVjZEBhdGVjb20uY29tKQogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21tLzQ0eF9tbXUuYyBiL2FyY2gvcHBjL21tLzQ0eF9tbXUuYwppbmRleCAzZDc5Y2UyLi5lMDE1MmE5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9tbS80NHhfbW11LmMKKysrIGIvYXJjaC9wcGMvbW0vNDR4X21tdS5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogCS8qIERldGVybWluZSBudW1iZXIgb2YgZW50cmllcyBuZWNlc3NhcnkgdG8gY292ZXIgbG93bWVtICovCiAJcGlubmVkX3RsYnMgPSAodW5zaWduZWQgaW50KQotCQkoX0FMSUdOKHRvdGFsX2xvd21lbSwgUFBDNDR4X1BJTl9TSVpFKSA+PiBQUEM0NHhfUElOX1NISUZUKTsKKwkJKF9BTElHTih0b3RhbF9sb3dtZW0sIFBQQ19QSU5fU0laRSkgPj4gUFBDNDR4X1BJTl9TSElGVCk7CiAKIAkvKiBXcml0ZSB1cHBlciB3YXRlcm1hcmsgdG8gc2F2ZSBsb2NhdGlvbiAqLwogCXRsYl80NHhfaHdhdGVyID0gUFBDNDR4X0xPV19TTE9UIC0gcGlubmVkX3RsYnM7CkBAIC0xMTIsNyArMTEyLDcgQEAKIAkvKiBJZiBuZWNlc3NhcnksIHNldCBhZGRpdGlvbmFsIHBpbm5lZCBUTEJzICovCiAJaWYgKHBpbm5lZF90bGJzID4gMSkKIAkJZm9yIChpID0gKFBQQzQ0eF9MT1dfU0xPVC0ocGlubmVkX3RsYnMtMSkpOyBpIDwgUFBDNDR4X0xPV19TTE9UOyBpKyspIHsKLQkJCXVuc2lnbmVkIGludCBwaHlzX2FkZHIgPSAoUFBDNDR4X0xPV19TTE9ULWkpICogUFBDNDR4X1BJTl9TSVpFOworCQkJdW5zaWduZWQgaW50IHBoeXNfYWRkciA9IChQUEM0NHhfTE9XX1NMT1QtaSkgKiBQUENfUElOX1NJWkU7CiAJCQlwcGM0NHhfcGluX3RsYihpLCBwaHlzX2FkZHIrUEFHRV9PRkZTRVQsIHBoeXNfYWRkcik7CiAJCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vZmF1bHQuYyBiL2FyY2gvcHBjL21tL2ZhdWx0LmMKaW5kZXggZWU1ZTlmMi4uMDIxNzE4OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wcGMvbW0vZmF1bHQuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGMvbW0vZmF1bHQuYwotICoKICAqICBQb3dlclBDIHZlcnNpb24KICAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21tL2hhc2h0YWJsZS5TIGIvYXJjaC9wcGMvbW0vaGFzaHRhYmxlLlMKaW5kZXggM2VjODdjOS4uZjA5ZmE4OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vaGFzaHRhYmxlLlMKKysrIGIvYXJjaC9wcGMvbW0vaGFzaHRhYmxlLlMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL2tlcm5lbC9oYXNodGFibGUuUwotICoKICAqICAkSWQ6IGhhc2h0YWJsZS5TLHYgMS42IDE5OTkvMTAvMDggMDE6NTY6MTUgcGF1bHVzIEV4cCAkCiAgKgogICogIFBvd2VyUEMgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vaW5pdC5jIGIvYXJjaC9wcGMvbW0vaW5pdC5jCmluZGV4IDEzNGRiNWMuLmNiMWMyOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL21tL2luaXQuYworKysgYi9hcmNoL3BwYy9tbS9pbml0LmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwogCQlmcmVlX3BhZ2Uoc3RhcnQpOwogCQljbnQrKzsKIAkJc3RhcnQgKz0gUEFHRV9TSVpFOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKIAkJZnJlZV9wYWdlKHN0YXJ0KTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CkBAIC00NDEsNyArNDQxLDcgQEAKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gbWVtX21hcCArIHBmbjsKIAogCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJCWluaXRfcGFnZV9jb3VudChwYWdlKTsKIAkJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQkJdG90YWxoaWdoX3BhZ2VzKys7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvS2NvbmZpZyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvS2NvbmZpZwppbmRleCBkODgzNzkxLi4xNzRkZGJjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L0tjb25maWcKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9LY29uZmlnCkBAIC01Nyw2ICs1NywxMCBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBNTDMwMCBldmFsdWF0aW9uIGJvYXJkLgogCitjb25maWcgWElMSU5YX01MNDAzCisJYm9vbCAiWGlsaW54LU1MNDAzIgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBNTDQwMyBldmFsdWF0aW9uIGJvYXJkLgogZW5kY2hvaWNlCiAKIGNob2ljZQpAQCAtMTcyLDExICsxNzYsNiBAQAogCWRlcGVuZHMgb24gQVNIIHx8IEJBTUJPTyB8fCBCVUJJTkdBIHx8IENQQ0k0MDUgfHwgRUJPTlkgfHwgRVA0MDUgfHwgTFVBTiB8fCBZVUNDQSB8fCBPQ09URUEgfHwgUkVEV09PRF81IHx8IFJFRFdPT0RfNiB8fCBTWUNBTU9SRSB8fCBXQUxOVVQKIAlkZWZhdWx0IHkKIAotY29uZmlnIFhJTElOWF9PQ1AKLQlib29sCi0JZGVwZW5kcyBvbiBYSUxJTlhfTUwzMDAKLQlkZWZhdWx0IHkKLQogY29uZmlnIElCTV9FTUFDNAogCWJvb2wKIAlkZXBlbmRzIG9uIDQ0MEdYIHx8IDQ0MFNQIHx8IDQ0MFNQRQpAQCAtMjA4LDExICsyMDcsMjEgQEAKIAlkZXBlbmRzIG9uIFNZQ0FNT1JFCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBWSVJURVhfSUlfUFJPCitjb25maWcgWElMSU5YX1ZJUlRFWF9JSV9QUk8KIAlib29sCiAJZGVwZW5kcyBvbiBYSUxJTlhfTUwzMDAKIAlkZWZhdWx0IHkKIAorY29uZmlnIFhJTElOWF9WSVJURVhfNF9GWAorCWJvb2wKKwlkZXBlbmRzIG9uIFhJTElOWF9NTDQwMworCWRlZmF1bHQgeQorCitjb25maWcgWElMSU5YX1ZJUlRFWAorCWJvb2wKKwlkZXBlbmRzIG9uIFhJTElOWF9WSVJURVhfSUlfUFJPIHx8IFhJTElOWF9WSVJURVhfNF9GWAorCWRlZmF1bHQgeQorCiBjb25maWcgU1RCMDN4eHgKIAlib29sCiAJZGVwZW5kcyBvbiBSRURXT09EXzUgfHwgUkVEV09PRF82CkBAIC0yMjAsNyArMjI5LDcgQEAKIAogY29uZmlnIEVNQkVEREVEQk9PVAogCWJvb2wKLQlkZXBlbmRzIG9uIEVQNDA1IHx8IFhJTElOWF9NTDMwMAorCWRlcGVuZHMgb24gRVA0MDUgfHwgWElMSU5YX01MMzAwIHx8IFhJTElOWF9NTDQwMwogCWRlZmF1bHQgeQogCiBjb25maWcgSUJNX09QRU5CSU9TCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L01ha2VmaWxlIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9NYWtlZmlsZQppbmRleCBjOWJiNjExLi5hMDRhMGQwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKIG9iai0kKENPTkZJR19TWUNBTU9SRSkJCSs9IHN5Y2Ftb3JlLm8KIG9iai0kKENPTkZJR19XQUxOVVQpCQkrPSB3YWxudXQubwogb2JqLSQoQ09ORklHX1hJTElOWF9NTDMwMCkJKz0geGlsaW54X21sMzAwLm8KK29iai0kKENPTkZJR19YSUxJTlhfTUw0MDMpCSs9IHhpbGlueF9tbDQwMy5vCiAKIG9iai0kKENPTkZJR180MDVHUCkJCSs9IGlibTQwNWdwLm8KIG9iai0kKENPTkZJR19SRURXT09EXzUpCQkrPSBpYm1zdGI0Lm8KQEAgLTI2LDQgKzI3LDUgQEAKIG9iai0kKENPTkZJR180NDBTUEUpCQkrPSBwcGM0NDBzcGUubwogb2JqLSQoQ09ORklHXzQwNUVQKQkJKz0gaWJtNDA1ZXAubwogb2JqLSQoQ09ORklHXzQwNUdQUikJCSs9IGlibTQwNWdwci5vCi1vYmotJChDT05GSUdfVklSVEVYX0lJX1BSTykJKz0gdmlydGV4LWlpX3Byby5vCitvYmotJChDT05GSUdfWElMSU5YX1ZJUlRFWCkJKz0gdmlydGV4Lm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYmFtYm9vLmMKaW5kZXggMGVjNTNmMC4uYjk0MGNmZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYmFtYm9vLmMKLSAqCiAgKiBCYW1ib28gYm9hcmQgc3BlY2lmaWMgcm91dGluZXMKICAqCiAgKiBXYWRlIEZhcm5zd29ydGggPHdmYXJuc3dvcnRoQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9iYW1ib28uaAppbmRleCA1YzAxOTI4Li4zMWMwZGQ2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2JhbWJvby5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvYmFtYm9vLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL2JhbWJvby5oCi0gKgogICogQmFtYm9vIGJvYXJkIGRlZmluaXRpb25zCiAgKgogICogV2FkZSBGYXJuc3dvcnRoIDx3ZmFybnN3b3J0aEBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9idWJpbmdhLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuaAppbmRleCBiNTM4MGNmLi42MDZhYTlmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2J1YmluZ2EuaAotICoKICAqIEJ1YmluZ2EgYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9jcGNpNDA1LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2NwY2k0MDUuYwppbmRleCBmZjk2Njc3Li42NTcxZTM5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2NwY2k0MDUuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2NwY2k0MDUuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvY3BjaTQwNS5jCi0gKgogICogQm9hcmQgc2V0dXAgcm91dGluZXMgZm9yIHRoZSBlc2QgQ1BDSS00MDUgY1BDSSBCb2FyZC4KICAqCiAgKiBBdXRob3I6IFN0ZWZhbiBSb2VzZQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jCmluZGV4IDlhODI4YjYuLmI0ZWNiOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2Vib255LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5jCi0gKgogICogRWJvbnkgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMKICAqCiAgKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lYm9ueS5oCmluZGV4IGI5MWFkNDIuLjI3YjJlNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZWJvbnkuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2Vib255LmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL2Vib255LmgKLSAqCiAgKiBFYm9ueSBib2FyZCBkZWZpbml0aW9ucwogICoKICAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2VwNDA1LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2VwNDA1LmMKaW5kZXggMjZhMDdjZC4uNmVmYTkxZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lcDQwNS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZXA0MDUuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2VwNDA1LmMKLSAqCiAgKiBFbWJlZGRlZCBQbGFuZXQgNDA1R1AgYm9hcmQKICAqIGh0dHA6Ly93d3cuZW1iZWRkZWRwbGFuZXQuY29tCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lcDQwNS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lcDQwNS5oCmluZGV4IGVhM2ViMjEuLjk4MTRmYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvZXA0MDUuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2VwNDA1LmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9lcDQwNS5oCi0gKgogICogRW1iZWRkZWQgUGxhbmV0IDQwNUdQIGJvYXJkCiAgKiBodHRwOi8vd3d3LmVtYmVkZGVkcGxhbmV0LmNvbQogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1ZXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1ZXAuYwppbmRleCAwOTNiMjhkLi41NWFmNzY5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVlcC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9pYm00MDVlcC5jCi0gKgogICogU3VwcG9ydCBmb3IgSUJNIFBQQyA0MDVFUCBwcm9jZXNzb3JzLgogICoKICAqIEF1dGhvcjogU0FXIChJQk0pLCBkZXJpdmVkIGZyb20gaWJtbnA0MDVsLmMuCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWVwLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWVwLmgKaW5kZXggZTA1MWUzZi4uZmU0NjY0MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVlcC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1ZXAuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWVwLmgKLSAqCiAgKiBJQk0gUFBDIDQwNUVQIHByb2Nlc3NvciBkZWZpbmVzLgogICoKICAqIEF1dGhvcjogU0FXIChJQk0pLCBkZXJpdmVkIGZyb20gaWJtNDA1Z3AuaC4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1Z3AuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1Z3AuaAppbmRleCBiMmI2NDJlLi5lYWYwZWY1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1Z3AuaAotICoKICAqIEF1dGhvcjogQXJtaW4gS3VzdGVyIGFrdXN0ZXJAbXZpc3RhLmNvbQogICoKICAqIDIwMDEgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1Z3ByLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwci5jCmluZGV4IGNkMGQwMGQuLjQ5ZGE2MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1Z3ByLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncHIuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwci5jCi0gKgogICogQXV0aG9yOiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KICAqCiAgKiAyMDAyIChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwci5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncHIuaAppbmRleCA0NTQxMmZiLi5lOTBjNWRkZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00MDVncHIuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQwNWdwci5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDA1Z3ByLmgKLSAqCiAgKiBBdXRob3I6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgogICoKICAqIDIwMDIgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZXAuYwppbmRleCA2NWFjMGI5Li4xZmVkNjYzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBlcC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZXAuYwotICoKICAqIFBQQzQ0MEVQIEkvTyBkZXNjcmlwdGlvbnMKICAqCiAgKiBXYWRlIEZhcm5zd29ydGggPHdmYXJuc3dvcnRoQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGVwLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGVwLmgKaW5kZXggOTdjODBiOC4uNjE3MTdlOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBlcC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZXAuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGVwLmgKLSAqCiAgKiBQUEM0NDBFUCBkZWZpbml0aW9ucwogICoKICAqIFdhZGUgRmFybnN3b3J0aCA8d2Zhcm5zd29ydGhAbXZpc3RhLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZ3AuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZ3AuYwppbmRleCBkOTI2MjQ1Li5iNjdhNzJlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGdwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBncC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZ3AuYwotICoKICAqIFBQQzQ0MEdQIEkvTyBkZXNjcmlwdGlvbnMKICAqCiAgKiBNYXR0IFBvcnRlciA8bXBvcnRlckBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBncC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBncC5oCmluZGV4IGFlMWVmYzAuLjdiMjc2M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZ3AuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGdwLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBncC5oCi0gKgogICogUFBDNDQwR1AgZGVmaW5pdGlvbnMKICAqCiAgKiBSb2xhbmQgRHJlaWVyIDxyb2xhbmRAZGlnaXRhbHZhbXBpcmUub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBneC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBneC5jCmluZGV4IGQyNGMwOWUuLjY4NWFiZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZ3guYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGd4LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBneC5jCi0gKgogICogUFBDNDQwR1ggSS9PIGRlc2NyaXB0aW9ucwogICoKICAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGd4LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MGd4LmgKaW5kZXggMGI1OWQ4ZC4uMDcwYTM0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBneC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwZ3guaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvaWJtNDQwZ3guaAotICoKICAqIFBQQzQ0MEdYIGRlZmluaXRpb25zCiAgKgogICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAbXZpc3RhLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwc3AuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwc3AuYwppbmRleCA3MWEwMTE3Li5kZThmN2FjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MHNwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBzcC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwc3AuYwotICoKICAqIFBQQzQ0MFNQIEkvTyBkZXNjcmlwdGlvbnMKICAqCiAgKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBzcC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBzcC5oCmluZGV4IGM3MWU0NmEuLjc3ZThiYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtNDQwc3AuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MHNwLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm00NDBzcC5oCi0gKgogICogUFBDNDQwU1AgZGVmaW5pdGlvbnMKICAqCiAgKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtbnA0MDVoLmMKaW5kZXggYTQ3N2E3OC4uZjFkY2IwYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libW5wNDA1aC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtbnA0MDVoLmMKLSAqCiAgKiBBdXRob3I6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgogICoKICAqIDIwMDAtMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtbnA0MDVoLmgKaW5kZXggZTJjMmIwNi4uMmM2ODNmNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1ucDQwNWguaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libW5wNDA1aC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtbnA0MDVoLmgKLSAqCiAgKiBBdXRob3I6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgogICoKICAqIDIwMDIgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtc3RiNC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGI0LmMKaW5kZXggN2UzM2JiNi4uNzk5YTJlYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGI0LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGI0LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGI0LmMKLSAqCiAgKiBBdXRob3I6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgogICoKICAqIDIwMDAtMjAwMSAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGI0LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libXN0YjQuaAppbmRleCA5ZjIxZDRjLi45ZGU0MjY1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libXN0YjQuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libXN0YjQuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libXN0YjQuaAotICoKICAqIEF1dGhvcjogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CiAgKgogICogMjAwMSAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGJ4MjUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtc3RieDI1LmMKaW5kZXggYjg5NWI5Yy4uMDkwZGRjYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGJ4MjUuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libXN0YngyNS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtc3RieDI1LmMKLSAqCiAgKiBBdXRob3I6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgogICoKICAqIDIwMDAtMjAwMiAoYykgTW9udGFWaXN0YSwgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGJ4MjUuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtc3RieDI1LmgKaW5kZXggOWEyZWZjMy4uNjg4NGE0OSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9pYm1zdGJ4MjUuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libXN0YngyNS5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvaWJtc3RieDI1LmgKLSAqCiAgKiBBdXRob3I6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgogICoKICAqIDIwMDIgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvbHVhbi5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmMKaW5kZXggMjFkMjkxMy4uNWMzN2RlMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmMKLSAqCiAgKiBMdWFuIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCiAgKgogICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvbHVhbi5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmgKaW5kZXggYmJlN2QwNy4uZTBkYjZhOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9sdWFuLmgKLSAqCiAgKiBMdWFuIGJvYXJkIGRlZmluaXRpb25zCiAgKgogICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jCmluZGV4IDRmMzU1YjZhLi5mODQxOTcyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuYwotICoKICAqIE9jb3RlYSBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwogICoKICAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9vY290ZWEuaAppbmRleCAzMzI1MTE1Li43Yzc5OWE5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L29jb3RlYS5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvb2NvdGVhLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL29jb3RlYS5oCi0gKgogICogT2NvdGVhIGJvYXJkIGRlZmluaXRpb25zCiAgKgogICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcHBjNDQwc3BlLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3BwYzQ0MHNwZS5jCmluZGV4IDYxMzlhMGIuLjFiZTVkMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcHBjNDQwc3BlLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9wcGM0NDBzcGUuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3BwYzQ0MHNwZS5jCi0gKgogICogUFBDNDQwU1BlIEkvTyBkZXNjcmlwdGlvbnMKICAqCiAgKiBSb2xhbmQgRHJlaWVyIDxyb2xhbmRkQGNpc2NvLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcHBjNDQwc3BlLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3BwYzQ0MHNwZS5oCmluZGV4IDIyMTY4NDYuLmQzYTYyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcHBjNDQwc3BlLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9wcGM0NDBzcGUuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L2libTQ0MHNwZS5oCi0gKgogICogUFBDNDQwU1BlIGRlZmluaXRpb25zCiAgKgogICogUm9sYW5kIERyZWllciA8cm9sYW5kZEBjaXNjby5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q1LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q1LmMKaW5kZXggNjExYWM4Ni4uNTNkYTJiNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9yZWR3b29kNS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcmVkd29vZDUuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q1LmMKLSAqCiAgKiBTdXBwb3J0IGZvciB0aGUgSUJNIHJlZHdvb2Q1IGV2YWwgYm9hcmQgZmlsZQogICoKICAqIEF1dGhvcjogQXJtaW4gS3VzdGVyIDxha3VzdGVyQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q1LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q1LmgKaW5kZXggMjY0ZTM0Zi4uNDllZGQ0OCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9yZWR3b29kNS5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcmVkd29vZDUuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q1LmgKLSAqCiAgKiBNYWNyb3MsIGRlZmluaXRpb25zLCBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHNwZWNpZmljIHRvIHRoZSBJQk0gUG93ZXJQQwogICogU1RCMDN4eHggIlJlZHdvb2QiIGV2YWx1YXRpb24gYm9hcmQuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9yZWR3b29kNi5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9yZWR3b29kNi5jCmluZGV4IGIxMzExNjYuLjQxYjI3ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcmVkd29vZDYuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q2LmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9yZWR3b29kNi5jCi0gKgogICogQXV0aG9yOiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KICAqCiAgKiAyMDAyIChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q2LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q2LmgKaW5kZXggMTgxNGI5Zi4uMWVkY2JlNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9yZWR3b29kNi5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvcmVkd29vZDYuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3JlZHdvb2Q2LmgKLSAqCiAgKiBNYWNyb3MsIGRlZmluaXRpb25zLCBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHNwZWNpZmljIHRvIHRoZSBJQk0gUG93ZXJQQwogICogU1RCeDI1eHggIlJlZHdvb2Q2IiBldmFsdWF0aW9uIGJvYXJkLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvc3ljYW1vcmUuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvc3ljYW1vcmUuYwppbmRleCAyODFiNGEyLi5iYWIzMWViIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3N5Y2Ftb3JlLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9zeWNhbW9yZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvc3ljYW1vcmUuYwotICoKICAqIEFyY2hpdGVjdHVyZS0gLyBwbGF0Zm9ybS1zcGVjaWZpYyBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gY29kZSBmb3IKICAqIElCTSBQb3dlclBDIDR4eCBiYXNlZCBib2FyZHMuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9zeWNhbW9yZS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9zeWNhbW9yZS5oCmluZGV4IDFjZDZjODIuLmRhZTAxNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvc3ljYW1vcmUuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3N5Y2Ftb3JlLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC9zeWNhbW9yZS5oCi0gKgogICogU3ljYW1vcmUgYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXgtaWlfcHJvLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3ZpcnRleC1paV9wcm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3Y2M5ZDUuLjAwMDAwMDAKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXgtaWlfcHJvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXgtaWlfcHJvLmMKLSAqCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiAyMDAyLTIwMDQgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQKLSAqICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL29jcC5oPgotI2luY2x1ZGUgInZpcnRleC1paV9wcm8uaCIKLQotLyogSGF2ZSBPQ1AgdGFrZSBjYXJlIG9mIHRoZSBzZXJpYWwgcG9ydHMuICovCi1zdHJ1Y3Qgb2NwX2RlZiBjb3JlX29jcFtdID0gewotI2lmZGVmIFhQQVJfVUFSVE5TNTUwXzBfQkFTRUFERFIKLQl7IC52ZW5kb3IJPSBPQ1BfVkVORE9SX1hJTElOWCwKLQkgIC5mdW5jdGlvbgk9IE9DUF9GVU5DXzE2NTUwLAotCSAgLmluZGV4CT0gMCwKLQkgIC5wYWRkcgk9IFhQQVJfVUFSVE5TNTUwXzBfQkFTRUFERFIsCi0JICAuaXJxCQk9IFhQQVJfSU5UQ18wX1VBUlROUzU1MF8wX1ZFQ19JRCwKLQkgIC5wbQkJPSBPQ1BfQ1BNX05BCi0JfSwKLSNpZmRlZiBYUEFSX1VBUlROUzU1MF8xX0JBU0VBRERSCi0JeyAudmVuZG9yCT0gT0NQX1ZFTkRPUl9YSUxJTlgsCi0JICAuZnVuY3Rpb24JPSBPQ1BfRlVOQ18xNjU1MCwKLQkgIC5pbmRleAk9IDEsCi0JICAucGFkZHIJPSBYUEFSX1VBUlROUzU1MF8xX0JBU0VBRERSLAotCSAgLmlycQkJPSBYUEFSX0lOVENfMF9VQVJUTlM1NTBfMV9WRUNfSUQsCi0JICAucG0JCT0gT0NQX0NQTV9OQQotCX0sCi0jaWZkZWYgWFBBUl9VQVJUTlM1NTBfMl9CQVNFQUREUgotCXsgLnZlbmRvcgk9IE9DUF9WRU5ET1JfWElMSU5YLAotCSAgLmZ1bmN0aW9uCT0gT0NQX0ZVTkNfMTY1NTAsCi0JICAuaW5kZXgJPSAyLAotCSAgLnBhZGRyCT0gWFBBUl9VQVJUTlM1NTBfMl9CQVNFQUREUiwKLQkgIC5pcnEJCT0gWFBBUl9JTlRDXzBfVUFSVE5TNTUwXzJfVkVDX0lELAotCSAgLnBtCQk9IE9DUF9DUE1fTkEKLQl9LAotI2lmZGVmIFhQQVJfVUFSVE5TNTUwXzNfQkFTRUFERFIKLQl7IC52ZW5kb3IJPSBPQ1BfVkVORE9SX1hJTElOWCwKLQkgIC5mdW5jdGlvbgk9IE9DUF9GVU5DXzE2NTUwLAotCSAgLmluZGV4CT0gMywKLQkgIC5wYWRkcgk9IFhQQVJfVUFSVE5TNTUwXzNfQkFTRUFERFIsCi0JICAuaXJxCQk9IFhQQVJfSU5UQ18wX1VBUlROUzU1MF8zX1ZFQ19JRCwKLQkgIC5wbQkJPSBPQ1BfQ1BNX05BCi0JfSwKLSNpZmRlZiBYUEFSX1VBUlROUzU1MF80X0JBU0VBRERSCi0jZXJyb3IgRWRpdCB0aGlzIGZpbGUgdG8gYWRkIG1vcmUgZGV2aWNlcy4KLSNlbmRpZgkJCS8qIDQgKi8KLSNlbmRpZgkJCS8qIDMgKi8KLSNlbmRpZgkJCS8qIDIgKi8KLSNlbmRpZgkJCS8qIDEgKi8KLSNlbmRpZgkJCS8qIDAgKi8KLQl7IC52ZW5kb3IJPSBPQ1BfVkVORE9SX0lOVkFMSUQKLQl9Ci19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXgtaWlfcHJvLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3ZpcnRleC1paV9wcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAxNGM0OC4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3ZpcnRleC1paV9wcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3ZpcnRleC1paV9wcm8uaAotICoKLSAqIEluY2x1ZGUgZmlsZSB0aGF0IGRlZmluZXMgdGhlIFhpbGlueCBWaXJ0ZXgtSUkgUHJvIHByb2Nlc3NvcgotICoKLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqIDIwMDItMjAwNCAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZAotICogImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX19BU01fVklSVEVYSUlQUk9fSF9fCi0jZGVmaW5lIF9fQVNNX1ZJUlRFWElJUFJPX0hfXwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3hwYXJhbWV0ZXJzLmg+Ci0KLS8qIHNlcmlhbCBkZWZpbmVzICovCi0KLSNkZWZpbmUgUlNfVEFCTEVfU0laRSAgNAkvKiBjaGFuZ2UgdGhpcyBhbmQgYWRkIG1vcmUgZGV2aWNlcyBiZWxvdwotCQkJCSAgIGlmIHlvdSBoYXZlIG1vcmUgdGhlbiA0IDE2eDUwIFVBUlRzICovCi0KLSNkZWZpbmUgQkFTRV9CQVVECQkoWFBBUl9VQVJUTlM1NTBfMF9DTE9DS19GUkVRX0haLzE2KQotCi0vKiBUaGUgc2VyaWFsIHBvcnRzIGluIHRoZSBWaXJ0ZXgtSUkgUHJvIGhhdmUgZWFjaCBJL08gYnl0ZSBpbiB0aGUKLSAqIExTQnl0ZSBvZiBhIHdvcmQuICBUaGlzIG1lYW5zIHRoYXQgaW9tZW1fcmVnX3NoaWZ0IG5lZWRzIHRvIGJlIDIgdG8KLSAqIGNoYW5nZSB0aGUgYnl0ZSBvZmZzZXRzIGludG8gd29yZCBvZmZzZXRzLiAgSW4gYWRkaXRpb24gdGhlIGJhc2UKLSAqIGFkZHJlc3NlcyBuZWVkIHRvIGhhdmUgMyBhZGRlZCB0byB0aGVtIHRvIGdldCB0byB0aGUgTFNCeXRlLgotICovCi0jZGVmaW5lIFNURF9VQVJUX09QKG51bSkJCQkJCQkgXAotCXsgMCwgQkFTRV9CQVVELCAwLCBYUEFSX0lOVENfMF9VQVJUTlM1NTBfIyNudW0jI19WRUNfSUQsCSBcCi0JCUFTWU5DX0JPT1RfQVVUT0NPTkYsCQkgCQkJIFwKLQkJLmlvbWVtX2Jhc2UgPSAodTggKilYUEFSX1VBUlROUzU1MF8jI251bSMjX0JBU0VBRERSICsgMywgXAotCQkuaW9tZW1fcmVnX3NoaWZ0ID0gMiwJCQkJCSBcCi0JCS5pb190eXBlID0gU0VSSUFMX0lPX01FTX0sCi0KLSNpZiBkZWZpbmVkKFhQQVJfSU5UQ18wX1VBUlROUzU1MF8wX1ZFQ19JRCkKLSNkZWZpbmUgTUwzMDBfVUFSVDAgU1REX1VBUlRfT1AoMCkKLSNlbHNlCi0jZGVmaW5lIE1MMzAwX1VBUlQwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoWFBBUl9JTlRDXzBfVUFSVE5TNTUwXzFfVkVDX0lEKQotI2RlZmluZSBNTDMwMF9VQVJUMSBTVERfVUFSVF9PUCgxKQotI2Vsc2UKLSNkZWZpbmUgTUwzMDBfVUFSVDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChYUEFSX0lOVENfMF9VQVJUTlM1NTBfMl9WRUNfSUQpCi0jZGVmaW5lIE1MMzAwX1VBUlQyIFNURF9VQVJUX09QKDIpCi0jZWxzZQotI2RlZmluZSBNTDMwMF9VQVJUMgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFhQQVJfSU5UQ18wX1VBUlROUzU1MF8zX1ZFQ19JRCkKLSNkZWZpbmUgTUwzMDBfVUFSVDMgU1REX1VBUlRfT1AoMykKLSNlbHNlCi0jZGVmaW5lIE1MMzAwX1VBUlQzCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoWFBBUl9JTlRDXzBfVUFSVE5TNTUwXzRfVkVDX0lEKQotI2Vycm9yIEVkaXQgdGhpcyBmaWxlIHRvIGFkZCBtb3JlIGRldmljZXMuCi0jZWxpZiBkZWZpbmVkKFhQQVJfSU5UQ18wX1VBUlROUzU1MF8zX1ZFQ19JRCkKLSNkZWZpbmUgTlJfU0VSX1BPUlRTCTQKLSNlbGlmIGRlZmluZWQoWFBBUl9JTlRDXzBfVUFSVE5TNTUwXzJfVkVDX0lEKQotI2RlZmluZSBOUl9TRVJfUE9SVFMJMwotI2VsaWYgZGVmaW5lZChYUEFSX0lOVENfMF9VQVJUTlM1NTBfMV9WRUNfSUQpCi0jZGVmaW5lIE5SX1NFUl9QT1JUUwkyCi0jZWxpZiBkZWZpbmVkKFhQQVJfSU5UQ18wX1VBUlROUzU1MF8wX1ZFQ19JRCkKLSNkZWZpbmUgTlJfU0VSX1BPUlRTCTEKLSNlbHNlCi0jZGVmaW5lIE5SX1NFUl9QT1JUUwkwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1VBUlQwX1RUWVMwKQotI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TCVwKLQlNTDMwMF9VQVJUMAkJXAotCU1MMzAwX1VBUlQxCQlcCi0JTUwzMDBfVUFSVDIJCVwKLQlNTDMwMF9VQVJUMwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VQVJUMF9UVFlTMSkKLSNkZWZpbmUgU0VSSUFMX1BPUlRfREZOUwlcCi0JTUwzMDBfVUFSVDEJCVwKLQlNTDMwMF9VQVJUMAkJXAotCU1MMzAwX1VBUlQyCQlcCi0JTUwzMDBfVUFSVDMKLSNlbmRpZgotCi0jZGVmaW5lIERDUk5fQ1BNRlJfQkFTRQkwCi0KLSNpbmNsdWRlIDxhc20vaWJtNDA1Lmg+Ci0KLSNlbmRpZgkJCQkvKiBfX0FTTV9WSVJURVhJSVBST19IX18gKi8KLSNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3ZpcnRleC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNhODMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXguYwpAQCAtMCwwICsxLDU2IEBACisvKgorICogVmlydGV4LUlJIFBybyAmIFZpcnRleC00IEZYIGNvbW1vbiBpbmZyYXN0cnVjdHVyZQorICoKKyAqIE1haW50YWluZXI6IEdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKiBDb3B5cmlnaHQgMjAwNSBHZW5lcmFsIER5bmFtaWNzIENhbmFkYSBMdGQuCisgKiBDb3B5cmlnaHQgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L3ZpcnRleC5oPgorI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnMuaD4KKworI2RlZmluZSBYUEFSX1VBUlQobnVtKSB7IFwKKwkJLm1hcGJhc2UgID0gWFBBUl9VQVJUTlM1NTBfIyNudW0jI19CQVNFQUREUiArIDMsIFwKKwkJLmlycQkgID0gWFBBUl9JTlRDXzBfVUFSVE5TNTUwXyMjbnVtIyNfVkVDX0lELCBcCisJCS5pb3R5cGUJICA9IFVQSU9fTUVNLCBcCisJCS51YXJ0Y2xrICA9IFhQQVJfVUFSVE5TNTUwXyMjbnVtIyNfQ0xPQ0tfRlJFUV9IWiwgXAorCQkuZmxhZ3MJICA9IFVQRl9CT09UX0FVVE9DT05GLCBcCisJCS5yZWdzaGlmdCA9IDIsIFwKKwl9CisKK3N0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworI2lmZGVmIFhQQVJfVUFSVE5TNTUwXzBfQkFTRUFERFIKKwlYUEFSX1VBUlQoMCksCisjZW5kaWYKKyNpZmRlZiBYUEFSX1VBUlROUzU1MF8xX0JBU0VBRERSCisJWFBBUl9VQVJUKDEpLAorI2VuZGlmCisjaWZkZWYgWFBBUl9VQVJUTlM1NTBfMl9CQVNFQUREUgorCVhQQVJfVUFSVCgyKSwKKyNlbmRpZgorI2lmZGVmIFhQQVJfVUFSVE5TNTUwXzNfQkFTRUFERFIKKwlYUEFSX1VBUlQoMyksCisjZW5kaWYKKwl7IH0sIC8qIHRlcm1pbmF0ZWQgYnkgZW1wdHkgcmVjb3JkICovCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tdID0geworCVtWSVJURVhfVUFSVF0gPSB7CisJCS5uYW1lCQk9ICJzZXJpYWw4MjUwIiwKKwkJLmlkCQk9IDAsCisJCS5kZXYucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3ZpcnRleC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTQzMjVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXguaApAQCAtMCwwICsxLDM1IEBACisvKgorICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC92aXJ0ZXguaAorICoKKyAqIEluY2x1ZGUgZmlsZSB0aGF0IGRlZmluZXMgdGhlIFhpbGlueCBWaXJ0ZXgtSUkgUHJvIHByb2Nlc3NvcgorICoKKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqIDIwMDItMjAwNCAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZAorICogImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU01fVklSVEVYX0hfXworI2RlZmluZSBfX0FTTV9WSVJURVhfSF9fCisKKy8qIHNlcmlhbCBkZWZpbmVzICovCisKKyNpbmNsdWRlIDxhc20vaWJtNDA1Lmg+CisKKy8qIFVnbHksIHVnbHksIHVnbHkhIEJBU0VfQkFVRCBkZWZpbmVkIGhlcmUgdG8ga2VlcCA4MjUwLmMgaGFwcHkuICovCisjaWYgIWRlZmluZWQoQkFTRV9CQVVEKQorICNkZWZpbmUgQkFTRV9CQVVECQkoMCkgLyogZHVtbXkgdmFsdWU7IG5vdCB1c2VkICovCisjZW5kaWYKKyAgCisvKiBEZXZpY2UgdHlwZSBlbnVtZXJhdGlvbiBmb3IgcGxhdGZvcm0gYnVzIGRlZmluaXRpb25zICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZW51bSBwcGNfc3lzX2RldmljZXMgeworCVZJUlRFWF9VQVJULCBOVU1fUFBDX1NZU19ERVZTLAorfTsKKyNlbmRpZgorICAKKyNlbmRpZgkJCQkvKiBfX0FTTV9WSVJURVhfSF9fICovCisjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC93YWxudXQuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmMKaW5kZXggNzRjYjMzMS4uNmJkNzc5MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC93YWxudXQuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3dhbG51dC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmMKLSAqCiAgKiBBcmNoaXRlY3R1cmUtIC8gcGxhdGZvcm0tc3BlY2lmaWMgYm9vdC10aW1lIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yCiAgKiBJQk0gUG93ZXJQQyA0eHggYmFzZWQgYm9hcmRzLiBBZGFwdGVkIGZyb20gb3JpZ2luYWwKICAqIGNvZGUgYnkgR2FyeSBUaG9tYXMsIENvcnQgRG91Z2FuIDxjb3J0QGZzbWxhYnMuY29tPiwgYW5kIERhbiBNYWxlawpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC93YWxudXQuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmgKaW5kZXggZGNmMjY5MS4uZjEzYTU3NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC93YWxudXQuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3dhbG51dC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgvd2FsbnV0LmgKLSAqCiAgKiBXYWxudXQgYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWwzMDAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sMzAwLmMKaW5kZXggZTkwZDk3Zi4uZDk3YTdmMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWwzMDAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDMwMC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sMzAwLmMKLSAqCiAgKiBYaWxpbnggTUwzMDAgZXZhbHVhdGlvbiBib2FyZCBpbml0aWFsaXphdGlvbgogICoKICAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgpAQCAtMTcsMTIgKzE1LDE0IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbFAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9vY3AuaD4KKyNpbmNsdWRlIDxhc20vcHBjX3N5cy5oPgogCi0jaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC92aXJ0ZXgtaWlfcHJvLmg+CS8qIGZvciBOUl9TRVJfUE9SVFMgKi8KKyNpbmNsdWRlIDxzeXNsaWIvZ2VuNTUwLmg+CisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC94cGFyYW1ldGVycy94cGFyYW1ldGVycy5oPgogCiAvKgogICogQXMgYW4gb3ZlcnZpZXcgb2YgaG93IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIChwbGF0Zm9ybV9pbml0LApAQCAtNTQsNiArNTQsMjIgQEAKICAqICAgICAgICAgIHBwYzR4eF9waWNfaW5pdAkJCWFyY2gvcHBjL3N5c2xpYi94aWxpbnhfcGljLmMKICAqLwogCisvKiBCb2FyZCBzcGVjaWZpY2F0aW9ucyBzdHJ1Y3R1cmVzICovCitzdHJ1Y3QgcHBjX3N5c19zcGVjICpjdXJfcHBjX3N5c19zcGVjOworc3RydWN0IHBwY19zeXNfc3BlYyBwcGNfc3lzX3NwZWNzW10gPSB7CisJeworCQkvKiBPbmx5IG9uZSBlbnRyeSwgYWx3YXlzIGFzc3VtZSB0aGUgc2FtZSBkZXNpZ24gKi8KKwkJLnBwY19zeXNfbmFtZQk9ICJYaWxpbnggTUwzMDAgUmVmZXJlbmNlIERlc2lnbiIsCisJCS5tYXNrIAkJPSAweDAwMDAwMDAwLAorCQkudmFsdWUgCQk9IDB4MDAwMDAwMDAsCisJCS5udW1fZGV2aWNlcwk9IDEsCisJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQorCQl7CisJCQlWSVJURVhfVUFSVCwKKwkJfSwKKwl9LAorfTsKKwogI2lmIGRlZmluZWQoWFBBUl9QT1dFUl8wX1BPV0VSRE9XTl9CQVNFQUREUikKIAogc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkICpwb3dlcmRvd25fYmFzZSA9CkBAIC04MCwyOCArOTYsMzkgQEAKICNlbmRpZgogfQogCisvKiBFYXJseSBzZXJpYWwgc3VwcG9ydCBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIF9faW5pdAorbWwzMDBfZWFybHlfc2VyaWFsX2luaXQoaW50IG51bSwgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwZGF0YSkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfVEVYVF9ERUJVRykgfHwgZGVmaW5lZChDT05GSUdfS0dEQikKKwlzdHJ1Y3QgdWFydF9wb3J0IHNlcmlhbF9yZXE7CisKKwltZW1zZXQoJnNlcmlhbF9yZXEsIDAsIHNpemVvZihzZXJpYWxfcmVxKSk7CisJc2VyaWFsX3JlcS5tYXBiYXNlCT0gcGRhdGEtPm1hcGJhc2U7CisJc2VyaWFsX3JlcS5tZW1iYXNlCT0gcGRhdGEtPm1lbWJhc2U7CisJc2VyaWFsX3JlcS5pcnEJCT0gcGRhdGEtPmlycTsKKwlzZXJpYWxfcmVxLnVhcnRjbGsJPSBwZGF0YS0+dWFydGNsazsKKwlzZXJpYWxfcmVxLnJlZ3NoaWZ0CT0gcGRhdGEtPnJlZ3NoaWZ0OworCXNlcmlhbF9yZXEuaW90eXBlCT0gcGRhdGEtPmlvdHlwZTsKKwlzZXJpYWxfcmVxLmZsYWdzCT0gcGRhdGEtPmZsYWdzOworCWdlbjU1MF9pbml0KG51bSwgJnNlcmlhbF9yZXEpOworI2VuZGlmCit9CisKK3ZvaWQgX19pbml0CiBtbDMwMF9lYXJseV9zZXJpYWxfbWFwKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCi0Jc3RydWN0IHNlcmlhbF9zdGF0ZSBvbGRfcG9ydHNbXSA9IHsgU0VSSUFMX1BPUlRfREZOUyB9OwotCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKLQlpbnQgaTsKKwlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnBkYXRhOworCWludCBpID0gMDsKIAotCS8qIFNldHVwIGlvcmVtYXBwZWQgc2VyaWFsIHBvcnQgYWNjZXNzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2xkX3BvcnRzKTsgaSsrICkgewotCQltZW1zZXQoJnBvcnQsIDAsIHNpemVvZihwb3J0KSk7Ci0JCXBvcnQubWVtYmFzZSA9IGlvcmVtYXAoKHBoeXNfYWRkcl90KShvbGRfcG9ydHNbaV0uaW9tZW1fYmFzZSksIDE2KTsKLQkJcG9ydC5pcnEgPSBvbGRfcG9ydHNbaV0uaXJxOwotCQlwb3J0LnVhcnRjbGsgPSBvbGRfcG9ydHNbaV0uYmF1ZF9iYXNlICogMTY7Ci0JCXBvcnQucmVnc2hpZnQgPSBvbGRfcG9ydHNbaV0uaW9tZW1fcmVnX3NoaWZ0OwotCQlwb3J0LmlvdHlwZSA9IFVQSU9fTUVNOwotCQlwb3J0LmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUOwotCQlwb3J0LmxpbmUgPSBpOwotCi0JCWlmIChlYXJseV9zZXJpYWxfc2V0dXAoJnBvcnQpICE9IDApIHsKLQkJCXByaW50aygiRWFybHkgc2VyaWFsIGluaXQgb2YgcG9ydCAlZCBmYWlsZWRcbiIsIGkpOwotCQl9CisJcGRhdGEgPSAoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICopIHBwY19zeXNfZ2V0X3BkYXRhKFZJUlRFWF9VQVJUKTsKKwl3aGlsZShwZGF0YSAmJiBwZGF0YS0+ZmxhZ3MpCisJeworCQlwZGF0YS0+bWVtYmFzZSA9IGlvcmVtYXAocGRhdGEtPm1hcGJhc2UsIDB4MTAwKTsKKwkJbWwzMDBfZWFybHlfc2VyaWFsX2luaXQoaSwgcGRhdGEpOworCQlwZGF0YSsrOworCQlpKys7CiAJfQogI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfODI1MCAqLwogfQpAQCAtMTA5LDkgKzEzNiw4IEBACiB2b2lkIF9faW5pdAogbWwzMDBfc2V0dXBfYXJjaCh2b2lkKQogewotCXBwYzR4eF9zZXR1cF9hcmNoKCk7CS8qIGNhbGxzIHBwYzR4eF9maW5kX2JyaWRnZXMoKSAqLwotCiAJbWwzMDBfZWFybHlfc2VyaWFsX21hcCgpOworCXBwYzR4eF9zZXR1cF9hcmNoKCk7CS8qIGNhbGxzIHBwYzR4eF9maW5kX2JyaWRnZXMoKSAqLwogCiAJLyogSWRlbnRpZnkgdGhlIHN5c3RlbSAqLwogCXByaW50ayhLRVJOX0lORk8gIlhpbGlueCBWaXJ0ZXgtSUkgUHJvIHBvcnRcbiIpOwpAQCAtMTMxLDYgKzE1Nyw4IEBACiB7CiAJcHBjNHh4X2luaXQocjMsIHI0LCByNSwgcjYsIHI3KTsKIAorCWlkZW50aWZ5X3BwY19zeXNfYnlfaWQobWZzcHIoU1BSTl9QVlIpKTsKKwogCXBwY19tZC5zZXR1cF9hcmNoID0gbWwzMDBfc2V0dXBfYXJjaDsKIAlwcGNfbWQuc2V0dXBfaW9fbWFwcGluZ3MgPSBtbDMwMF9tYXBfaW87CiAJcHBjX21kLmluaXRfSVJRID0gbWwzMDBfaW5pdF9pcnE7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDMwMC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWwzMDAuaAppbmRleCBmOGM1ODg0Li4zZDU3MzMyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDMwMC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sMzAwLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWwzMDAuaAotICoKICAqIEluY2x1ZGUgZmlsZSB0aGF0IGRlZmluZXMgdGhlIFhpbGlueCBNTDMwMCBldmFsdWF0aW9uIGJvYXJkCiAgKgogICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCkBAIC0xNiw3ICsxNCw3IEBACiAjZGVmaW5lIF9fQVNNX1hJTElOWF9NTDMwMF9IX18KIAogLyogTUwzMDAgaGFzIGEgWGlsaW54IFZpcnRleC1JSSBQcm8gcHJvY2Vzc29yICovCi0jaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC92aXJ0ZXgtaWlfcHJvLmg+CisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC92aXJ0ZXguaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtNDEsNyArMzksNyBAQAogI2RlZmluZSBQUEM0eHhfT05CX0lPX1ZBRERSCTB1CiAjZGVmaW5lIFBQQzR4eF9PTkJfSU9fU0laRQkwdQogCi0jZGVmaW5lIFBQQzR4eF9NQUNISU5FX05BTUUgIlhpbGlueCBNTDMwMCIKKyNkZWZpbmUgUFBDNHh4X01BQ0hJTkVfTkFNRSAiWGlsaW54IE1MMzAwIFJlZmVyZW5jZSBTeXN0ZW0iCiAKICNlbmRpZiAvKiBfX0FTTV9YSUxJTlhfTUwzMDBfSF9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWw0MDMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sNDAzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwYzdlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sNDAzLmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDQwMy5jCisgKgorICogWGlsaW54IE1MNDAzIGV2YWx1YXRpb24gYm9hcmQgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBBdXRob3I6IEdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KKyAqCisgKiAyMDA1IChjKSBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKiAyMDAyLTIwMDQgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxQLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcHBjX3N5cy5oPgorCisjaW5jbHVkZSA8c3lzbGliL2dlbjU1MC5oPgorI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnMuaD4KKworLyoKKyAqIEFzIGFuIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyAocGxhdGZvcm1faW5pdCwKKyAqIG1sNDAzX21hcF9pbywgbWw0MDNfc2V0dXBfYXJjaCBhbmQgbWw0MDNfaW5pdF9JUlEpIGZpdCBpbnRvIHRoZQorICoga2VybmVsIHN0YXJ0dXAgcHJvY2VkdXJlLCBoZXJlJ3MgYSBjYWxsIHRyZWU6CisgKgorICogc3RhcnRfaGVyZQkJCQkJYXJjaC9wcGMva2VybmVsL2hlYWRfNHh4LlMKKyAqICBlYXJseV9pbml0CQkJCQlhcmNoL3BwYy9rZXJuZWwvc2V0dXAuYworICogIG1hY2hpbmVfaW5pdAkJCQlhcmNoL3BwYy9rZXJuZWwvc2V0dXAuYworICogICAgcGxhdGZvcm1faW5pdAkJCQl0aGlzIGZpbGUKKyAqICAgICAgcHBjNHh4X2luaXQJCQkJYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZXR1cC5jCisgKiAgICAgICAgcGFyc2VfYm9vdGluZm8KKyAqICAgICAgICAgIGZpbmRfYm9vdGluZm8KKyAqICAgICAgICAic2V0dXAgc29tZSBkZWZhdWx0IHBwY19tZCBwb2ludGVycyIKKyAqICBNTVVfaW5pdAkJCQkJYXJjaC9wcGMvbW0vaW5pdC5jCisgKiAgICAqcHBjX21kLnNldHVwX2lvX21hcHBpbmdzID09IG1sNDAzX21hcF9pbwl0aGlzIGZpbGUKKyAqICAgICAgcHBjNHh4X21hcF9pbwkJCQlhcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NldHVwLmMKKyAqICBzdGFydF9rZXJuZWwJCQkJaW5pdC9tYWluLmMKKyAqICAgIHNldHVwX2FyY2gJCQkJYXJjaC9wcGMva2VybmVsL3NldHVwLmMKKyAqICNpZiBkZWZpbmVkKENPTkZJR19LR0RCKQorICogICAgICAqcHBjX21kLmtnZGJfbWFwX3NjYygpID09IGdlbjU1MF9rZ2RiX21hcF9zY2MKKyAqICNlbmRpZgorICogICAgICAqcHBjX21kLnNldHVwX2FyY2ggPT0gbWw0MDNfc2V0dXBfYXJjaAl0aGlzIGZpbGUKKyAqICAgICAgICBwcGM0eHhfc2V0dXBfYXJjaAkJCWFyY2gvcHBjL3N5c2xpYi9wcGM0eHhfc2V0dXAuYworICogICAgICAgICAgcHBjNHh4X2ZpbmRfYnJpZGdlcwkJCWFyY2gvcHBjL3N5c2xpYi9wcGM0MDVfcGNpLmMKKyAqICAgIGluaXRfSVJRCQkJCQlhcmNoL3BwYy9rZXJuZWwvaXJxLmMKKyAqICAgICAgKnBwY19tZC5pbml0X0lSUSA9PSBtbDQwM19pbml0X0lSUQl0aGlzIGZpbGUKKyAqICAgICAgICBwcGM0eHhfaW5pdF9JUlEJCQlhcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NldHVwLmMKKyAqICAgICAgICAgIHBwYzR4eF9waWNfaW5pdAkJCWFyY2gvcHBjL3N5c2xpYi94aWxpbnhfcGljLmMKKyAqLworCisvKiBCb2FyZCBzcGVjaWZpY2F0aW9ucyBzdHJ1Y3R1cmVzICovCitzdHJ1Y3QgcHBjX3N5c19zcGVjICpjdXJfcHBjX3N5c19zcGVjOworc3RydWN0IHBwY19zeXNfc3BlYyBwcGNfc3lzX3NwZWNzW10gPSB7CisJeworCQkvKiBPbmx5IG9uZSBlbnRyeSwgYWx3YXlzIGFzc3VtZSB0aGUgc2FtZSBkZXNpZ24gKi8KKwkJLnBwY19zeXNfbmFtZQk9ICJYaWxpbnggTUw0MDMgUmVmZXJlbmNlIERlc2lnbiIsCisJCS5tYXNrIAkJPSAweDAwMDAwMDAwLAorCQkudmFsdWUgCQk9IDB4MDAwMDAwMDAsCisJCS5udW1fZGV2aWNlcwk9IDEsCisJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQorCQl7CisJCQlWSVJURVhfVUFSVCwKKwkJfSwKKwl9LAorfTsKKworI2lmIGRlZmluZWQoWFBBUl9QT1dFUl8wX1BPV0VSRE9XTl9CQVNFQUREUikKKworc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkICpwb3dlcmRvd25fYmFzZSA9CisgICAgKHZvbGF0aWxlIHVuc2lnbmVkICopIFhQQVJfUE9XRVJfMF9QT1dFUkRPV05fQkFTRUFERFI7CisKK3N0YXRpYyB2b2lkCit4aWxpbnhfcG93ZXJfb2ZmKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlvdXRfYmUzMihwb3dlcmRvd25fYmFzZSwgWFBBUl9QT1dFUl8wX1BPV0VSRE9XTl9WQUxVRSk7CisJd2hpbGUgKDEpIDsKK30KKyNlbmRpZgorCit2b2lkIF9faW5pdAorbWw0MDNfbWFwX2lvKHZvaWQpCit7CisJcHBjNHh4X21hcF9pbygpOworCisjaWYgZGVmaW5lZChYUEFSX1BPV0VSXzBfUE9XRVJET1dOX0JBU0VBRERSKQorCXBvd2VyZG93bl9iYXNlID0gaW9yZW1hcCgodW5zaWduZWQgbG9uZykgcG93ZXJkb3duX2Jhc2UsCisJCQkJIFhQQVJfUE9XRVJfMF9QT1dFUkRPV05fSElHSEFERFIgLQorCQkJCSBYUEFSX1BPV0VSXzBfUE9XRVJET1dOX0JBU0VBRERSICsgMSk7CisjZW5kaWYKK30KKworLyogRWFybHkgc2VyaWFsIHN1cHBvcnQgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCBfX2luaXQKK21sNDAzX2Vhcmx5X3NlcmlhbF9pbml0KGludCBudW0sIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcGRhdGEpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX0tHREIpCisJc3RydWN0IHVhcnRfcG9ydCBzZXJpYWxfcmVxOworCisJbWVtc2V0KCZzZXJpYWxfcmVxLCAwLCBzaXplb2Yoc2VyaWFsX3JlcSkpOworCXNlcmlhbF9yZXEubWFwYmFzZQk9IHBkYXRhLT5tYXBiYXNlOworCXNlcmlhbF9yZXEubWVtYmFzZQk9IHBkYXRhLT5tZW1iYXNlOworCXNlcmlhbF9yZXEuaXJxCQk9IHBkYXRhLT5pcnE7CisJc2VyaWFsX3JlcS51YXJ0Y2xrCT0gcGRhdGEtPnVhcnRjbGs7CisJc2VyaWFsX3JlcS5yZWdzaGlmdAk9IHBkYXRhLT5yZWdzaGlmdDsKKwlzZXJpYWxfcmVxLmlvdHlwZQk9IHBkYXRhLT5pb3R5cGU7CisJc2VyaWFsX3JlcS5mbGFncwk9IHBkYXRhLT5mbGFnczsKKwlnZW41NTBfaW5pdChudW0sICZzZXJpYWxfcmVxKTsKKyNlbmRpZgorfQorCit2b2lkIF9faW5pdAorbWw0MDNfZWFybHlfc2VyaWFsX21hcCh2b2lkKQoreworI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MAorCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcGRhdGE7CisJaW50IGkgPSAwOworCisJcGRhdGEgPSAoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICopIHBwY19zeXNfZ2V0X3BkYXRhKFZJUlRFWF9VQVJUKTsKKwl3aGlsZShwZGF0YSAmJiBwZGF0YS0+ZmxhZ3MpCisJeworCQlwZGF0YS0+bWVtYmFzZSA9IGlvcmVtYXAocGRhdGEtPm1hcGJhc2UsIDB4MTAwKTsKKwkJbWw0MDNfZWFybHlfc2VyaWFsX2luaXQoaSwgcGRhdGEpOworCQlwZGF0YSsrOworCQlpKys7CisJfQorI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfODI1MCAqLworfQorCit2b2lkIF9faW5pdAorbWw0MDNfc2V0dXBfYXJjaCh2b2lkKQoreworCW1sNDAzX2Vhcmx5X3NlcmlhbF9tYXAoKTsKKwlwcGM0eHhfc2V0dXBfYXJjaCgpOwkvKiBjYWxscyBwcGM0eHhfZmluZF9icmlkZ2VzKCkgKi8KKworCS8qIElkZW50aWZ5IHRoZSBzeXN0ZW0gKi8KKwlwcmludGsoS0VSTl9JTkZPICJYaWxpbnggTUw0MDMgUmVmZXJlbmNlIFN5c3RlbSAoVmlydGV4LTQgRlgpXG4iKTsKK30KKworLyogQ2FsbGVkIGFmdGVyIGJvYXJkX3NldHVwX2lycSBmcm9tIHBwYzR4eF9pbml0X0lSUSgpLiAqLwordm9pZCBfX2luaXQKK21sNDAzX2luaXRfaXJxKHZvaWQpCit7CisJcHBjNHh4X2luaXRfSVJRKCk7Cit9CisKK3ZvaWQgX19pbml0CitwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKK3sKKwlwcGM0eHhfaW5pdChyMywgcjQsIHI1LCByNiwgcjcpOworCisJaWRlbnRpZnlfcHBjX3N5c19ieV9pZChtZnNwcihTUFJOX1BWUikpOworCisJcHBjX21kLnNldHVwX2FyY2ggPSBtbDQwM19zZXR1cF9hcmNoOworCXBwY19tZC5zZXR1cF9pb19tYXBwaW5ncyA9IG1sNDAzX21hcF9pbzsKKwlwcGNfbWQuaW5pdF9JUlEgPSBtbDQwM19pbml0X2lycTsKKworI2lmIGRlZmluZWQoWFBBUl9QT1dFUl8wX1BPV0VSRE9XTl9CQVNFQUREUikKKwlwcGNfbWQucG93ZXJfb2ZmID0geGlsaW54X3Bvd2VyX29mZjsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tHREIKKwlwcGNfbWQuZWFybHlfc2VyaWFsX21hcCA9IG1sNDAzX2Vhcmx5X3NlcmlhbF9tYXA7CisjZW5kaWYKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94aWxpbnhfbWw0MDMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sNDAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczNTk2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sNDAzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIGFyY2gvcHBjL3BsYXRmb3Jtcy80eHgveGlsaW54X21sNDAzLmgKKyAqCisgKiBJbmNsdWRlIGZpbGUgdGhhdCBkZWZpbmVzIHRoZSBYaWxpbnggTUw0MDMgcmVmZXJlbmNlIGRlc2lnbgorICoKKyAqIEF1dGhvcjogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorICoKKyAqIDIwMDUgKGMpIFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqIDIwMDItMjAwNCAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNNX1hJTElOWF9NTDQwM19IX18KKyNkZWZpbmUgX19BU01fWElMSU5YX01MNDAzX0hfXworCisvKiBNTDQwMyBoYXMgYSBYaWxpbnggVmlydGV4LTQgRlBHQSB3aXRoIGEgUFBDNDA1IGhhcmQgY29yZSAqLworI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvdmlydGV4Lmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCit0eXBlZGVmIHN0cnVjdCBib2FyZF9pbmZvIHsKKwl1bnNpZ25lZCBpbnQJIGJpX21lbXNpemU7CQkvKiBEUkFNIGluc3RhbGxlZCwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBjaGFyCSBiaV9lbmV0YWRkcls2XTsJLyogTG9jYWwgRXRoZXJuZXQgTUFDIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQJIGJpX2ludGZyZXE7CQkvKiBQcm9jZXNzb3Igc3BlZWQsIGluIEh6ICovCisJdW5zaWduZWQgaW50CSBiaV9idXNmcmVxOwkJLyogUExCIEJ1cyBzcGVlZCwgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQJIGJpX3BjaV9idXNmcmVxOwkvKiBQQ0kgQnVzIHNwZWVkLCBpbiBIeiAqLworfSBiZF90OworCisvKiBTb21lIDR4eCBwYXJ0cyB1c2UgYSBkaWZmZXJlbnQgdGltZWJhc2UgZnJlcXVlbmN5IGZyb20gdGhlIGludGVybmFsIGNsb2NrLgorKi8KKyNkZWZpbmUgYmlfdGJmcmVxIGJpX2ludGZyZXEKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogV2UgZG9uJ3QgbmVlZCBhbnl0aGluZyBtYXBwZWQuICBTaXplIG9mIHplcm8gd2lsbCBhY2NvbXBsaXNoIHRoYXQuICovCisjZGVmaW5lIFBQQzR4eF9PTkJfSU9fUEFERFIJMHUKKyNkZWZpbmUgUFBDNHh4X09OQl9JT19WQUREUgkwdQorI2RlZmluZSBQUEM0eHhfT05CX0lPX1NJWkUJMHUKKworI2RlZmluZSBQUEM0eHhfTUFDSElORV9OQU1FICJYaWxpbnggTUw0MDMgUmVmZXJlbmNlIERlc2lnbiIKKworI2VuZGlmIC8qIF9fQVNNX1hJTElOWF9NTDQwM19IX18gKi8KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hwYXJhbWV0ZXJzL3hwYXJhbWV0ZXJzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3hwYXJhbWV0ZXJzL3hwYXJhbWV0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmMjFmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnMuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL3hwYXJhbWV0ZXJzLmgKKyAqCisgKiBUaGlzIGZpbGUgaW5jbHVkZXMgdGhlIGNvcnJlY3QgeHBhcmFtZXRlcnMuaCBmb3IgdGhlIENPTkZJRydlZCBib2FyZCBwbHVzCisgKiBmaXh1cHMgdG8gdHJhbnNsYXRlIGJvYXJkIHNwZWNpZmljIFhQQVIgdmFsdWVzIHRvIGEgY29tbW9uIHNldCBvZiBuYW1lcworICoKKyAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogICAgICAgICBzb3VyY2VAbXZpc3RhLmNvbQorICoKKyAqIDIwMDQgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQKKyAqICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1hJTElOWF9NTDMwMCkKKyAgI2luY2x1ZGUgInhwYXJhbWV0ZXJzX21sMzAwLmgiCisjZWxpZiBkZWZpbmVkKENPTkZJR19YSUxJTlhfTUw0MDMpCisgICNpbmNsdWRlICJ4cGFyYW1ldGVyc19tbDQwMy5oIgorI2Vsc2UKKyAgLyogQWRkIG90aGVyIGJvYXJkIHhwYXJhbWV0ZXIgaW5jbHVkZXMgaGVyZSBiZWZvcmUgdGhlICNlbHNlICovCisgICNlcnJvciBObyB4cGFyYW1ldGVyc18qLmggZmlsZSBpbmNsdWRlZAorI2VuZGlmCisKKyNpZm5kZWYgU0VSSUFMX1BPUlRfREZOUworICAvKiB6SW1hZ2Ugc2VyaWFsIHBvcnQgZGVmaW5pdGlvbnMgKi8KKyAgI2RlZmluZSBSU19UQUJMRV9TSVpFIDEKKyAgI2RlZmluZSBTRVJJQUxfUE9SVF9ERk5TIHsJCQkJCQlcCisJLmJhdWRfYmFzZQkgPSBYUEFSX1VBUlROUzU1MF8wX0NMT0NLX0ZSRVFfSFovMTYsCQlcCisJLmlycQkJID0gWFBBUl9JTlRDXzBfVUFSVE5TNTUwXzBfVkVDX0lELAkJXAorCS5mbGFncwkJID0gQVNZTkNfQk9PVF9BVVRPQ09ORiwJCQkJXAorCS5pb21lbV9iYXNlCSA9ICh1OCAqKVhQQVJfVUFSVE5TNTUwXzBfQkFTRUFERFIgKyAzLAkJXAorCS5pb21lbV9yZWdfc2hpZnQgPSAyLAkJCQkJCVwKKwkuaW9fdHlwZQkgPSBTRVJJQUxfSU9fTUVNLAkJCQlcCisgIH0sCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnNfbWw0MDMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnNfbWw0MDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2FjZGNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC94cGFyYW1ldGVycy94cGFyYW1ldGVyc19tbDQwMy5oCkBAIC0wLDAgKzEsMjQzIEBACisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIENBVVRJT046IFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBsaWJnZW4uCisqIFZlcnNpb246IFhpbGlueCBFREsgNy4xLjIgRURLX0guMTIuNS4xCisqIERPIE5PVCBFRElULgorKgorKiBDb3B5cmlnaHQgKGMpIDIwMDUgWGlsaW54LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyogCisqIERlc2NyaXB0aW9uOiBEcml2ZXIgcGFyYW1ldGVycworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBYUEFSX1BMQl9CUkFNX0lGX0NOVExSXzBfQkFTRUFERFIgMHhGRkZGMDAwMAorI2RlZmluZSBYUEFSX1BMQl9CUkFNX0lGX0NOVExSXzBfSElHSEFERFIgMHhGRkZGRkZGRgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfT1BCX0VNQ18wX01FTTBfQkFTRUFERFIgMHgyMDAwMDAwMAorI2RlZmluZSBYUEFSX09QQl9FTUNfMF9NRU0wX0hJR0hBRERSIDB4MjAwRkZGRkYKKyNkZWZpbmUgWFBBUl9PUEJfRU1DXzBfTUVNMV9CQVNFQUREUiAweDI4MDAwMDAwCisjZGVmaW5lIFhQQVJfT1BCX0VNQ18wX01FTTFfSElHSEFERFIgMHgyODdGRkZGRgorI2RlZmluZSBYUEFSX09QQl9BQzk3X0NPTlRST0xMRVJfUkVGXzBfQkFTRUFERFIgMHhBNjAwMDAwMAorI2RlZmluZSBYUEFSX09QQl9BQzk3X0NPTlRST0xMRVJfUkVGXzBfSElHSEFERFIgMHhBNjAwMDBGRgorI2RlZmluZSBYUEFSX09QQl9FTUNfVVNCXzBfTUVNMF9CQVNFQUREUiAweEE1MDAwMDAwCisjZGVmaW5lIFhQQVJfT1BCX0VNQ19VU0JfMF9NRU0wX0hJR0hBRERSIDB4QTUwMDAwRkYKKyNkZWZpbmUgWFBBUl9QTEJfRERSXzBfTUVNMF9CQVNFQUREUiAweDAwMDAwMDAwCisjZGVmaW5lIFhQQVJfUExCX0REUl8wX01FTTBfSElHSEFERFIgMHgwRkZGRkZGRgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfWEVNQUNfTlVNX0lOU1RBTkNFUyAxCisjZGVmaW5lIFhQQVJfT1BCX0VUSEVSTkVUXzBfQkFTRUFERFIgMHg2MDAwMDAwMAorI2RlZmluZSBYUEFSX09QQl9FVEhFUk5FVF8wX0hJR0hBRERSIDB4NjAwMDNGRkYKKyNkZWZpbmUgWFBBUl9PUEJfRVRIRVJORVRfMF9ERVZJQ0VfSUQgMAorI2RlZmluZSBYUEFSX09QQl9FVEhFUk5FVF8wX0VSUl9DT1VOVF9FWElTVCAxCisjZGVmaW5lIFhQQVJfT1BCX0VUSEVSTkVUXzBfRE1BX1BSRVNFTlQgMQorI2RlZmluZSBYUEFSX09QQl9FVEhFUk5FVF8wX01JSV9FWElTVCAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgWFBBUl9YVUFSVE5TNTUwX05VTV9JTlNUQU5DRVMgMQorI2RlZmluZSBYUEFSX1hVQVJUTlM1NTBfQ0xPQ0tfSFogMTAwMDAwMDAwCisjZGVmaW5lIFhQQVJfT1BCX1VBUlQxNjU1MF8wX0JBU0VBRERSIDB4QTAwMDAwMDAKKyNkZWZpbmUgWFBBUl9PUEJfVUFSVDE2NTUwXzBfSElHSEFERFIgMHhBMDAwMUZGRgorI2RlZmluZSBYUEFSX09QQl9VQVJUMTY1NTBfMF9ERVZJQ0VfSUQgMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfWEdQSU9fTlVNX0lOU1RBTkNFUyAzCisjZGVmaW5lIFhQQVJfT1BCX0dQSU9fMF9CQVNFQUREUiAweDkwMDAwMDAwCisjZGVmaW5lIFhQQVJfT1BCX0dQSU9fMF9ISUdIQUREUiAweDkwMDAwMUZGCisjZGVmaW5lIFhQQVJfT1BCX0dQSU9fMF9ERVZJQ0VfSUQgMAorI2RlZmluZSBYUEFSX09QQl9HUElPXzBfSU5URVJSVVBUX1BSRVNFTlQgMAorI2RlZmluZSBYUEFSX09QQl9HUElPXzBfSVNfRFVBTCAxCisjZGVmaW5lIFhQQVJfT1BCX0dQSU9fRVhQX0hEUl8wX0JBU0VBRERSIDB4OTAwMDEwMDAKKyNkZWZpbmUgWFBBUl9PUEJfR1BJT19FWFBfSERSXzBfSElHSEFERFIgMHg5MDAwMTFGRgorI2RlZmluZSBYUEFSX09QQl9HUElPX0VYUF9IRFJfMF9ERVZJQ0VfSUQgMQorI2RlZmluZSBYUEFSX09QQl9HUElPX0VYUF9IRFJfMF9JTlRFUlJVUFRfUFJFU0VOVCAwCisjZGVmaW5lIFhQQVJfT1BCX0dQSU9fRVhQX0hEUl8wX0lTX0RVQUwgMQorI2RlZmluZSBYUEFSX09QQl9HUElPX0NIQVJfTENEXzBfQkFTRUFERFIgMHg5MDAwMjAwMAorI2RlZmluZSBYUEFSX09QQl9HUElPX0NIQVJfTENEXzBfSElHSEFERFIgMHg5MDAwMjFGRgorI2RlZmluZSBYUEFSX09QQl9HUElPX0NIQVJfTENEXzBfREVWSUNFX0lEIDIKKyNkZWZpbmUgWFBBUl9PUEJfR1BJT19DSEFSX0xDRF8wX0lOVEVSUlVQVF9QUkVTRU5UIDAKKyNkZWZpbmUgWFBBUl9PUEJfR1BJT19DSEFSX0xDRF8wX0lTX0RVQUwgMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfWFBTMl9OVU1fSU5TVEFOQ0VTIDIKKyNkZWZpbmUgWFBBUl9PUEJfUFMyX0RVQUxfUkVGXzBfREVWSUNFX0lEXzAgMAorI2RlZmluZSBYUEFSX09QQl9QUzJfRFVBTF9SRUZfMF9CQVNFQUREUl8wIDB4QTkwMDAwMDAKKyNkZWZpbmUgWFBBUl9PUEJfUFMyX0RVQUxfUkVGXzBfSElHSEFERFJfMCAoMHhBOTAwMDAwMCsweDNGKQorI2RlZmluZSBYUEFSX09QQl9QUzJfRFVBTF9SRUZfMF9ERVZJQ0VfSURfMSAxCisjZGVmaW5lIFhQQVJfT1BCX1BTMl9EVUFMX1JFRl8wX0JBU0VBRERSXzEgKDB4QTkwMDAwMDArMHgxMDAwKQorI2RlZmluZSBYUEFSX09QQl9QUzJfRFVBTF9SRUZfMF9ISUdIQUREUl8xICgweEE5MDAwMDAwKzB4MTAzRikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBYUEFSX1hJSUNfTlVNX0lOU1RBTkNFUyAxCisjZGVmaW5lIFhQQVJfT1BCX0lJQ18wX0JBU0VBRERSIDB4QTgwMDAwMDAKKyNkZWZpbmUgWFBBUl9PUEJfSUlDXzBfSElHSEFERFIgMHhBODAwMDFGRgorI2RlZmluZSBYUEFSX09QQl9JSUNfMF9ERVZJQ0VfSUQgMAorI2RlZmluZSBYUEFSX09QQl9JSUNfMF9URU5fQklUX0FEUiAwCisjZGVmaW5lIFhQQVJfT1BCX0lJQ18wX0dQT19XSURUSCAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgWFBBUl9JTlRDX01BWF9OVU1fSU5UUl9JTlBVVFMgMTAKKyNkZWZpbmUgWFBBUl9YSU5UQ19IQVNfSVBSIDEKKyNkZWZpbmUgWFBBUl9YSU5UQ19VU0VfRENSIDAKKyNkZWZpbmUgWFBBUl9YSU5UQ19OVU1fSU5TVEFOQ0VTIDEKKyNkZWZpbmUgWFBBUl9PUEJfSU5UQ18wX0JBU0VBRERSIDB4RDEwMDBGQzAKKyNkZWZpbmUgWFBBUl9PUEJfSU5UQ18wX0hJR0hBRERSIDB4RDEwMDBGREYKKyNkZWZpbmUgWFBBUl9PUEJfSU5UQ18wX0RFVklDRV9JRCAwCisjZGVmaW5lIFhQQVJfT1BCX0lOVENfMF9LSU5EX09GX0lOVFIgMHgwMDAwMDAwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfSU5UQ19TSU5HTEVfQkFTRUFERFIgMHhEMTAwMEZDMAorI2RlZmluZSBYUEFSX0lOVENfU0lOR0xFX0hJR0hBRERSIDB4RDEwMDBGREYKKyNkZWZpbmUgWFBBUl9JTlRDX1NJTkdMRV9ERVZJQ0VfSUQgWFBBUl9PUEJfSU5UQ18wX0RFVklDRV9JRAorI2RlZmluZSBYUEFSX09QQl9FVEhFUk5FVF8wX0lQMklOVENfSVJQVF9NQVNLIDBYMDAwMDAxCisjZGVmaW5lIFhQQVJfT1BCX0lOVENfMF9PUEJfRVRIRVJORVRfMF9JUDJJTlRDX0lSUFRfSU5UUiAwCisjZGVmaW5lIFhQQVJfU1lTVEVNX1VTQl9IUElfSU5UX01BU0sgMFgwMDAwMDIKKyNkZWZpbmUgWFBBUl9PUEJfSU5UQ18wX1NZU1RFTV9VU0JfSFBJX0lOVF9JTlRSIDEKKyNkZWZpbmUgWFBBUl9NSVNDX0xPR0lDXzBfUEhZX01JSV9JTlRfTUFTSyAwWDAwMDAwNAorI2RlZmluZSBYUEFSX09QQl9JTlRDXzBfTUlTQ19MT0dJQ18wX1BIWV9NSUlfSU5UX0lOVFIgMgorI2RlZmluZSBYUEFSX09QQl9TWVNBQ0VfMF9TWVNBQ0VfSVJRX01BU0sgMFgwMDAwMDgKKyNkZWZpbmUgWFBBUl9PUEJfSU5UQ18wX09QQl9TWVNBQ0VfMF9TWVNBQ0VfSVJRX0lOVFIgMworI2RlZmluZSBYUEFSX09QQl9BQzk3X0NPTlRST0xMRVJfUkVGXzBfUkVDT1JEX0lOVEVSUlVQVF9NQVNLIDBYMDAwMDEwCisjZGVmaW5lIFhQQVJfT1BCX0lOVENfMF9PUEJfQUM5N19DT05UUk9MTEVSX1JFRl8wX1JFQ09SRF9JTlRFUlJVUFRfSU5UUiA0CisjZGVmaW5lIFhQQVJfT1BCX0FDOTdfQ09OVFJPTExFUl9SRUZfMF9QTEFZQkFDS19JTlRFUlJVUFRfTUFTSyAwWDAwMDAyMAorI2RlZmluZSBYUEFSX09QQl9JTlRDXzBfT1BCX0FDOTdfQ09OVFJPTExFUl9SRUZfMF9QTEFZQkFDS19JTlRFUlJVUFRfSU5UUiA1CisjZGVmaW5lIFhQQVJfT1BCX0lJQ18wX0lQMklOVENfSVJQVF9NQVNLIDBYMDAwMDQwCisjZGVmaW5lIFhQQVJfT1BCX0lOVENfMF9PUEJfSUlDXzBfSVAySU5UQ19JUlBUX0lOVFIgNgorI2RlZmluZSBYUEFSX09QQl9QUzJfRFVBTF9SRUZfMF9TWVNfSU5UUjJfTUFTSyAwWDAwMDA4MAorI2RlZmluZSBYUEFSX09QQl9JTlRDXzBfT1BCX1BTMl9EVUFMX1JFRl8wX1NZU19JTlRSMl9JTlRSIDcKKyNkZWZpbmUgWFBBUl9PUEJfUFMyX0RVQUxfUkVGXzBfU1lTX0lOVFIxX01BU0sgMFgwMDAxMDAKKyNkZWZpbmUgWFBBUl9PUEJfSU5UQ18wX09QQl9QUzJfRFVBTF9SRUZfMF9TWVNfSU5UUjFfSU5UUiA4CisjZGVmaW5lIFhQQVJfT1BCX1VBUlQxNjU1MF8wX0lQMklOVENfSVJQVF9NQVNLIDBYMDAwMjAwCisjZGVmaW5lIFhQQVJfT1BCX0lOVENfMF9PUEJfVUFSVDE2NTUwXzBfSVAySU5UQ19JUlBUX0lOVFIgOQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfWFRGVF9OVU1fSU5TVEFOQ0VTIDEKKyNkZWZpbmUgWFBBUl9QTEJfVEZUX0NOVExSX1JFRl8wX0RDUl9CQVNFQUREUiAweEQwMDAwMjAwCisjZGVmaW5lIFhQQVJfUExCX1RGVF9DTlRMUl9SRUZfMF9EQ1JfSElHSEFERFIgMHhEMDAwMDIwNworI2RlZmluZSBYUEFSX1BMQl9URlRfQ05UTFJfUkVGXzBfREVWSUNFX0lEIDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBYUEFSX1hTWVNBQ0VfTUVNX1dJRFRIIDE2CisjZGVmaW5lIFhQQVJfWFNZU0FDRV9OVU1fSU5TVEFOQ0VTIDEKKyNkZWZpbmUgWFBBUl9PUEJfU1lTQUNFXzBfQkFTRUFERFIgMHhDRjAwMDAwMAorI2RlZmluZSBYUEFSX09QQl9TWVNBQ0VfMF9ISUdIQUREUiAweENGMDAwMUZGCisjZGVmaW5lIFhQQVJfT1BCX1NZU0FDRV8wX0RFVklDRV9JRCAwCisjZGVmaW5lIFhQQVJfT1BCX1NZU0FDRV8wX01FTV9XSURUSCAxNgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfQ1BVX1BQQzQwNV9DT1JFX0NMT0NLX0ZSRVFfSFogMzAwMDAwMDAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTGludXggUmVkZWZpbmVzICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgWFBBUl9VQVJUTlM1NTBfMF9CQVNFQUREUiAoWFBBUl9PUEJfVUFSVDE2NTUwXzBfQkFTRUFERFIrMHgxMDAwKQorI2RlZmluZSBYUEFSX1VBUlROUzU1MF8wX0hJR0hBRERSIFhQQVJfT1BCX1VBUlQxNjU1MF8wX0hJR0hBRERSCisjZGVmaW5lIFhQQVJfVUFSVE5TNTUwXzBfQ0xPQ0tfRlJFUV9IWiBYUEFSX1hVQVJUTlM1NTBfQ0xPQ0tfSFoKKyNkZWZpbmUgWFBBUl9VQVJUTlM1NTBfMF9ERVZJQ0VfSUQgWFBBUl9PUEJfVUFSVDE2NTUwXzBfREVWSUNFX0lECisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgWFBBUl9JTlRDXzBfQkFTRUFERFIgWFBBUl9PUEJfSU5UQ18wX0JBU0VBRERSCisjZGVmaW5lIFhQQVJfSU5UQ18wX0hJR0hBRERSIFhQQVJfT1BCX0lOVENfMF9ISUdIQUREUgorI2RlZmluZSBYUEFSX0lOVENfMF9LSU5EX09GX0lOVFIgWFBBUl9PUEJfSU5UQ18wX0tJTkRfT0ZfSU5UUgorI2RlZmluZSBYUEFSX0lOVENfMF9ERVZJQ0VfSUQgWFBBUl9PUEJfSU5UQ18wX0RFVklDRV9JRAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfSU5UQ18wX0VNQUNfMF9WRUNfSUQgWFBBUl9PUEJfSU5UQ18wX09QQl9FVEhFUk5FVF8wX0lQMklOVENfSVJQVF9JTlRSCisjZGVmaW5lIFhQQVJfSU5UQ18wX1NZU0FDRV8wX1ZFQ19JRCBYUEFSX09QQl9JTlRDXzBfT1BCX1NZU0FDRV8wX1NZU0FDRV9JUlFfSU5UUgorI2RlZmluZSBYUEFSX0lOVENfMF9JSUNfMF9WRUNfSUQgWFBBUl9PUEJfSU5UQ18wX09QQl9JSUNfMF9JUDJJTlRDX0lSUFRfSU5UUgorI2RlZmluZSBYUEFSX0lOVENfMF9QUzJfMV9WRUNfSUQgWFBBUl9PUEJfSU5UQ18wX09QQl9QUzJfRFVBTF9SRUZfMF9TWVNfSU5UUjJfSU5UUgorI2RlZmluZSBYUEFSX0lOVENfMF9QUzJfMF9WRUNfSUQgWFBBUl9PUEJfSU5UQ18wX09QQl9QUzJfRFVBTF9SRUZfMF9TWVNfSU5UUjFfSU5UUgorI2RlZmluZSBYUEFSX0lOVENfMF9VQVJUTlM1NTBfMF9WRUNfSUQgWFBBUl9PUEJfSU5UQ18wX09QQl9VQVJUMTY1NTBfMF9JUDJJTlRDX0lSUFRfSU5UUgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfVEZUXzBfQkFTRUFERFIgWFBBUl9QTEJfVEZUX0NOVExSX1JFRl8wX0RDUl9CQVNFQUREUgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfRU1BQ18wX0JBU0VBRERSIFhQQVJfT1BCX0VUSEVSTkVUXzBfQkFTRUFERFIKKyNkZWZpbmUgWFBBUl9FTUFDXzBfSElHSEFERFIgWFBBUl9PUEJfRVRIRVJORVRfMF9ISUdIQUREUgorI2RlZmluZSBYUEFSX0VNQUNfMF9ETUFfUFJFU0VOVCBYUEFSX09QQl9FVEhFUk5FVF8wX0RNQV9QUkVTRU5UCisjZGVmaW5lIFhQQVJfRU1BQ18wX01JSV9FWElTVCBYUEFSX09QQl9FVEhFUk5FVF8wX01JSV9FWElTVAorI2RlZmluZSBYUEFSX0VNQUNfMF9FUlJfQ09VTlRfRVhJU1QgWFBBUl9PUEJfRVRIRVJORVRfMF9FUlJfQ09VTlRfRVhJU1QKKyNkZWZpbmUgWFBBUl9FTUFDXzBfREVWSUNFX0lEIFhQQVJfT1BCX0VUSEVSTkVUXzBfREVWSUNFX0lECisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgWFBBUl9HUElPXzBfQkFTRUFERFIgWFBBUl9PUEJfR1BJT18wX0JBU0VBRERSXzAKKyNkZWZpbmUgWFBBUl9HUElPXzBfSElHSEFERFIgWFBBUl9PUEJfR1BJT18wX0hJR0hBRERSXzAKKyNkZWZpbmUgWFBBUl9HUElPXzBfREVWSUNFX0lEIFhQQVJfT1BCX0dQSU9fMF9ERVZJQ0VfSURfMAorI2RlZmluZSBYUEFSX0dQSU9fMV9CQVNFQUREUiBYUEFSX09QQl9HUElPXzBfQkFTRUFERFJfMQorI2RlZmluZSBYUEFSX0dQSU9fMV9ISUdIQUREUiBYUEFSX09QQl9HUElPXzBfSElHSEFERFJfMQorI2RlZmluZSBYUEFSX0dQSU9fMV9ERVZJQ0VfSUQgWFBBUl9PUEJfR1BJT18wX0RFVklDRV9JRF8xCisjZGVmaW5lIFhQQVJfR1BJT18yX0JBU0VBRERSIFhQQVJfT1BCX0dQSU9fRVhQX0hEUl8wX0JBU0VBRERSXzAKKyNkZWZpbmUgWFBBUl9HUElPXzJfSElHSEFERFIgWFBBUl9PUEJfR1BJT19FWFBfSERSXzBfSElHSEFERFJfMAorI2RlZmluZSBYUEFSX0dQSU9fMl9ERVZJQ0VfSUQgWFBBUl9PUEJfR1BJT19FWFBfSERSXzBfREVWSUNFX0lEXzAKKyNkZWZpbmUgWFBBUl9HUElPXzNfQkFTRUFERFIgWFBBUl9PUEJfR1BJT19FWFBfSERSXzBfQkFTRUFERFJfMQorI2RlZmluZSBYUEFSX0dQSU9fM19ISUdIQUREUiBYUEFSX09QQl9HUElPX0VYUF9IRFJfMF9ISUdIQUREUl8xCisjZGVmaW5lIFhQQVJfR1BJT18zX0RFVklDRV9JRCBYUEFSX09QQl9HUElPX0VYUF9IRFJfMF9ERVZJQ0VfSURfMQorI2RlZmluZSBYUEFSX0dQSU9fNF9CQVNFQUREUiBYUEFSX09QQl9HUElPX0NIQVJfTENEXzBfQkFTRUFERFIKKyNkZWZpbmUgWFBBUl9HUElPXzRfSElHSEFERFIgWFBBUl9PUEJfR1BJT19DSEFSX0xDRF8wX0hJR0hBRERSCisjZGVmaW5lIFhQQVJfR1BJT180X0RFVklDRV9JRCBYUEFSX09QQl9HUElPX0NIQVJfTENEXzBfREVWSUNFX0lECisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgWFBBUl9QUzJfMF9CQVNFQUREUiBYUEFSX09QQl9QUzJfRFVBTF9SRUZfMF9CQVNFQUREUl8wCisjZGVmaW5lIFhQQVJfUFMyXzBfSElHSEFERFIgWFBBUl9PUEJfUFMyX0RVQUxfUkVGXzBfSElHSEFERFJfMAorI2RlZmluZSBYUEFSX1BTMl8wX0RFVklDRV9JRCBYUEFSX09QQl9QUzJfRFVBTF9SRUZfMF9ERVZJQ0VfSURfMAorI2RlZmluZSBYUEFSX1BTMl8xX0JBU0VBRERSIFhQQVJfT1BCX1BTMl9EVUFMX1JFRl8wX0JBU0VBRERSXzEKKyNkZWZpbmUgWFBBUl9QUzJfMV9ISUdIQUREUiBYUEFSX09QQl9QUzJfRFVBTF9SRUZfMF9ISUdIQUREUl8xCisjZGVmaW5lIFhQQVJfUFMyXzFfREVWSUNFX0lEIFhQQVJfT1BCX1BTMl9EVUFMX1JFRl8wX0RFVklDRV9JRF8xCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgWFBBUl9TWVNBQ0VfMF9CQVNFQUREUiBYUEFSX09QQl9TWVNBQ0VfMF9CQVNFQUREUgorI2RlZmluZSBYUEFSX1NZU0FDRV8wX0hJR0hBRERSIFhQQVJfT1BCX1NZU0FDRV8wX0hJR0hBRERSCisjZGVmaW5lIFhQQVJfU1lTQUNFXzBfREVWSUNFX0lEIFhQQVJfT1BCX1NZU0FDRV8wX0RFVklDRV9JRAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfSUlDXzBfQkFTRUFERFIgWFBBUl9PUEJfSUlDXzBfQkFTRUFERFIKKyNkZWZpbmUgWFBBUl9JSUNfMF9ISUdIQUREUiBYUEFSX09QQl9JSUNfMF9ISUdIQUREUgorI2RlZmluZSBYUEFSX0lJQ18wX1RFTl9CSVRfQURSIFhQQVJfT1BCX0lJQ18wX1RFTl9CSVRfQURSCisjZGVmaW5lIFhQQVJfSUlDXzBfREVWSUNFX0lEIFhQQVJfT1BCX0lJQ18wX0RFVklDRV9JRAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfUExCX0NMT0NLX0ZSRVFfSFogMTAwMDAwMDAwCisjZGVmaW5lIFhQQVJfQ09SRV9DTE9DS19GUkVRX0haIFhQQVJfQ1BVX1BQQzQwNV9DT1JFX0NMT0NLX0ZSRVFfSFoKKyNkZWZpbmUgWFBBUl9ERFJfMF9TSVpFIDB4NDAwMDAwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFhQQVJfUEVSU0lTVEVOVF8wX0lJQ18wX0JBU0VBRERSIDB4MDAwMDA0MDAKKyNkZWZpbmUgWFBBUl9QRVJTSVNURU5UXzBfSUlDXzBfSElHSEFERFIgMHgwMDAwMDdGRgorI2RlZmluZSBYUEFSX1BFUlNJU1RFTlRfMF9JSUNfMF9FRVBST01BRERSIDB4QTAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBYUEFSX1BDSV8wX0NMT0NLX0ZSRVFfSFogICAgMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmMKaW5kZXggYjA2NWI4Yi4uZjI4N2RjZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC95dWNjYS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveXVjY2EuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmMKLSAqCiAgKiBZdWNjYSBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwogICoKICAqIFJvbGFuZCBEcmVpZXIgPHJvbGFuZGRAY2lzY28uY29tPiAoYmFzZWQgb24gbHVhbi5jIGJ5IE1hdHQgUG9ydGVyKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC95dWNjYS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC95dWNjYS5oCmluZGV4IDAxYTRhZmUuLjdhZTIzMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy80eHgveXVjY2EuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvNHh4L3l1Y2NhLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzR4eC95dWNjYS5oCi0gKgogICogWXVjY2EgYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBSb2xhbmQgRHJlaWVyIDxyb2xhbmRkQGNpc2NvLmNvbT4gKGJhc2VkIG9uIGx1YW4uaCBieSBNYXR0IFBvcnRlcikKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jCmluZGV4IDFhNjU5YmIuLjExNjI2ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jCi0gKgogICogTVBDODM0eCBTWVMgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmgKaW5kZXggMmU1MTRkMy4uNjcyN2JiZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9zeXMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmgKLSAqCiAgKiBNUEM4MzRYIFNZUyBjb21tb24gYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpAQCAtMjUsNyArMjMsNyBAQAogI2RlZmluZSBWSVJUX0lNTVJCQVIJCSgodWludCkweGZlMDAwMDAwKQogCiAjZGVmaW5lIEJDU1JfUEhZU19BRERSCQkoKHVpbnQpMHhmODAwMDAwMCkKLSNkZWZpbmUgQkNTUl9TSVpFCQkoKHVpbnQpKDEyOCAqIDEwMjQpKQorI2RlZmluZSBCQ1NSX1NJWkUJCSgodWludCkoMzIgKiAxMDI0KSkKIAogI2RlZmluZSBCQ1NSX01JU0NfUkVHMl9PRkYJMHgwNwogI2RlZmluZSBCQ1NSX01JU0NfUkVHMl9QT1JFU0VUCTB4MDEKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5jCmluZGV4IDQwOGQ2NGYuLjliMDE0ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5jCi0gKgogICogTVBDODU0MEFEUyBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwogICoKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuaAppbmRleCBlNDhjYTNhOS4uMGI1ZTdmZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU0MF9hZHMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTQwX2Fkcy5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NDBfYWRzLmgKLSAqCiAgKiBNUEM4NTQwQURTIGJvYXJkIGRlZmluaXRpb25zCiAgKgogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NTVfY2RzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTU1X2Nkcy5oCmluZGV4IDFhOGU2YzYuLjk3NTRkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NTVfY2RzLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU1NV9jZHMuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODU1NV9jZHMuaAotICoKICAqIE1QQzg1NTVDRFMgYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmMKaW5kZXggNDQyYzdmZi4uMGNiMmU4NiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTYwX2Fkcy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmMKLSAqCiAgKiBNUEM4NTYwQURTIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCiAgKgogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTYwX2Fkcy5oCmluZGV4IDE0M2FlN2UuLmMyMjQ3YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODU2MF9hZHMuaAotICoKICAqIE1QQzg1NDBBRFMgYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uYwppbmRleCAxN2NlNDhmLi44ZmQ5ZDc2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uYwotICoKICAqIE1QQzg1eHggQURTIGJvYXJkIGNvbW1vbiByb3V0aW5lcwogICoKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzX2NvbW1vbi5oCmluZGV4IDE5OGE2YTAuLmRlOGQ0MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzX2NvbW1vbi5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzX2NvbW1vbi5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzX2NvbW1vbi5oCi0gKgogICogTVBDODVYWCBBRFMgY29tbW9uIGJvYXJkIGRlZmluaXRpb25zCiAgKgogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzX2NvbW1vbi5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmMKaW5kZXggMTgwMWFiMy4uYzllMGFlZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm0vODV4eC9tcGM4NXh4X2Nkc19jb21tb24uYwotICoKICAqIE1QQzg1eHggQ0RTIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCiAgKgogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzX2NvbW1vbi5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmgKaW5kZXggNWI1ODhjZi4uNjJkZjU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHNfY29tbW9uLmgKLSAqCiAgKiBNUEM4NXh4IENEUyBib2FyZCBkZWZpbml0aW9ucwogICoKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKaW5kZXggOGE3MjIyMS4uYjczNzc4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKLSAqIAogICogV2luZCBSaXZlciBTQkM4NTYwIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzCiAgKiAKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaAppbmRleCA1ZTFiMDBjLi40NGZmYWEyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaAotICoKICAqIFdpbmQgUml2ZXIgU0JDODU2MCBib2FyZCBkZWZpbml0aW9ucwogICoKICAqIENvcHlyaWdodCAyMDAzIE1vdG9yb2xhIEluYy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguYwppbmRleCBjMDJmMTEwLi5kM2ZmMjgwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NXh4LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODV4eC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3JtLzg1eHgvc2JjODV4eC5jCi0gKiAKICAqIFdpbmRSaXZlciBQb3dlclFVSUNDIElJSSBTQkM4NXh4IGJvYXJkIGNvbW1vbiByb3V0aW5lcwogICoKICAqIENvcHlyaWdodCAyMDAyLCAyMDAzIE1vdG9yb2xhIEluYy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguaAppbmRleCA3YWY5M2M2Li41ZGQ4YjZhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NXh4LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODV4eC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguaAotICoKICAqIFdpbmRSaXZlciBQb3dlclFVSUNDIElJSSBTQkM4NXh4IGNvbW1vbiBib2FyZCBkZWZpbml0aW9ucwogICoKICAqIENvcHlyaWdodCAyMDAzIE1vdG9yb2xhIEluYy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwppbmRleCAwNjFiYjdjLi44ZDdiYWE5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwotICoKICAqIFNUeCBHUDMgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMKICAqCiAgKiBEYW4gTWFsZWsgPGRhbkBlbWJlZGRlZGVkZ2UuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5oCmluZGV4IDJmMjViNTEuLjNmNzFmOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL3N0eDg1NjBfZ3AzLmgKLSAqCiAgKiBTVHggR1AzIGJvYXJkIGRlZmluaXRpb25zCiAgKgogICogRGFuIE1hbGVrIChkYW5AZW1iZWRkZWRlZGdlLmNvbSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYwppbmRleCBhNWUzOGJhLi4wMGFmMTMyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYwotICoKICAqIFRRTTg1eHggKDQwLzQxLzU1LzYwKSBib2FyZCBzcGVjaWZpYyByb3V0aW5lcwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmgKaW5kZXggMzc3NWViMy4uNjEyZDgwNSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmgKLSAqCiAgKiBUUU04NXh4ICg0MC80MS81NS82MCkgYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL01ha2VmaWxlIGIvYXJjaC9wcGMvcGxhdGZvcm1zL01ha2VmaWxlCmluZGV4IDUxNDMwZTIuLmU4YjkxYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKQEAgLTM3LDYgKzM3LDkgQEAKIG9iai0kKENPTkZJR19TUFJVQ0UpCQkrPSBzcHJ1Y2Uubwogb2JqLSQoQ09ORklHX0xJVEU1MjAwKQkJKz0gbGl0ZTUyMDAubwogb2JqLSQoQ09ORklHX0VWNjQzNjApCQkrPSBldjY0MzYwLm8KK29iai0kKENPTkZJR19NUEM4NlhBRFMpCQkrPSBtcGM4NjZhZHNfc2V0dXAubworb2JqLSQoQ09ORklHX01QQzg4NUFEUykJCSs9IG1wYzg4NWFkc19zZXR1cC5vCitvYmotJChDT05GSUdfQURTODI3MikJCSs9IG1wYzgyNzJhZHNfc2V0dXAubwogCiBpZmVxICgkKENPTkZJR19TTVApLHkpCiBvYmotJChDT05GSUdfUFBDX0NIUlApCQkrPSBjaHJwX3NtcC5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvYXB1c19zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2FwdXNfc2V0dXAuYwppbmRleCBjNDJjNTAwLi5mZTBjZGMwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvYXB1c19zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9hcHVzX3NldHVwLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL3BsYXRmb3Jtcy9hcHVzX3NldHVwLmMKLSAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5ICBKZXNwZXIgU2tvdgogICoKICAqICBCYXNpY2FsbHkgd2hhdCBpcyBuZWVkZWQgdG8gcmVwbGFjZSBmdW5jdGlvbmFsaXR5IGZvdW5kIGluCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hlc3RudXQuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaGVzdG51dC5jCmluZGV4IGFlZmNjMGUuLmYzMjRmNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaGVzdG51dC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaGVzdG51dC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9jaGVzdG51dC5jCi0gKgogICogQm9hcmQgc2V0dXAgcm91dGluZXMgZm9yIElCTSBDaGVzdG51dAogICoKICAqIEF1dGhvcjogPHNvdXJjZUBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hlc3RudXQuaAppbmRleCAwNDAwYjJiLi5lMDBmZDlmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hlc3RudXQuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hlc3RudXQuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvY2hlc3RudXQuaAotICoKICAqIERlZmluaXRpb25zIGZvciBJQk0gNzUwRlhHWCBFdmFsIChDaGVzdG51dCkKICAqCiAgKiBBdXRob3I6IDxzb3VyY2VAbXZpc3RhLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3BlZ2Fzb3NfZXRoLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF9wZWdhc29zX2V0aC5jCmluZGV4IDEwOGE2ZTIuLjkzMDVjOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3BlZ2Fzb3NfZXRoLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfcGVnYXNvc19ldGguYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfcGVnYXNvc19ldGguYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU3ZlbiBMdXRoZXIgPHNsQGJwbGFuLWdtYmguZGU+CiAgKiAgVGhhbmtzIHRvIDoKICAqCURhbGUgRmFybnN3b3J0aCA8ZGFsZUBmYXJuc3dvcnRoLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF9zZXR1cC5jCmluZGV4IDQ4OTk2YjcuLmY5ZmQzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3NldHVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfc2V0dXAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGMvcGxhdGZvcm1zL3NldHVwLmMKLSAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwogICogIEFkYXB0ZWQgZnJvbSAnYWxwaGEnIHZlcnNpb24gYnkgR2FyeSBUaG9tYXMKICAqICBNb2RpZmllZCBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfdGltZS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NocnBfdGltZS5jCmluZGV4IDU3NzUzYTUuLmM4NjI3NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3RpbWUuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY2hycF90aW1lLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL3BsYXRmb3Jtcy9jaHJwX3RpbWUuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKgogICogQWRhcHRlZCBmb3IgUG93ZXJQQyAoUFJlUCkgYnkgR2FyeSBUaG9tYXMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jcGNpNjkwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY3BjaTY5MC5jCmluZGV4IDZjYTdiY2EuLjc5MDQ3NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jcGNpNjkwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NwY2k2OTAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvY3BjaTY5MC5jCi0gKgogICogQm9hcmQgc2V0dXAgcm91dGluZXMgZm9yIHRoZSBGb3JjZSBDUENJNjkwIGJvYXJkLgogICoKICAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8bWdyZWVyQG12aXN0YS5jb20+CkBAIC0yOTAsNyArMjg4LDcgQEAKIAlwZGF0YS0+YnJnX2Nsa19mcmVxID0gY3BjaTY5MF9nZXRfYnVzX2ZyZXEoKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQKIGNwY2k2OTBfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdGF0aWMgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jcGNpNjkwLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvY3BjaTY5MC5oCmluZGV4IDQ5NTg0YzkuLjBmYTVhNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jcGNpNjkwLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NwY2k2OTAuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvY3BjaTY5MC5oCi0gKgogICogRGVmaW5pdGlvbnMgZm9yIEZvcmNlIENQQ0k2OTAKICAqCiAgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQyNjAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MjYwLmMKaW5kZXggZmZkZThmNi4uMzFlOGUyMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQyNjAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDI2MC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MjYwLmMKLSAqCiAgKiBCb2FyZCBzZXR1cCByb3V0aW5lcyBmb3IgdGhlIE1hcnZlbGwvR2FsaWxlbyBFVi02NDI2MC1CUCBFdmFsdWF0aW9uIEJvYXJkLgogICoKICAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8bWdyZWVyQG12aXN0YS5jb20+CkBAIC00MTYsNyArNDE0LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50CiBldjY0MjYwX3BsYXRmb3JtX25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RhdGljIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDI2MC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQyNjAuaAppbmRleCBiZWRmZmNlLi40NGQ5MGQ1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDI2MC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MjYwLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQyNjAuaAotICoKICAqIERlZmluaXRpb25zIGZvciBNYXJ2ZWxsL0dhbGlsZW8gRVYtNjQyNjAtQlAgRXZhbHVhdGlvbiBCb2FyZC4KICAqCiAgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQzNjAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MzYwLmMKaW5kZXggYjlkODQ0Zi4uMTA0YWM5YiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQzNjAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDM2MC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MzYwLmMKLSAqCiAgKiBCb2FyZCBzZXR1cCByb3V0aW5lcyBmb3IgdGhlIE1hcnZlbGwgRVYtNjQzNjAtQlAgRXZhbHVhdGlvbiBCb2FyZC4KICAqCiAgKiBBdXRob3I6IExlZSBOaWNrcyA8YWxsaW51eEBnbWFpbC5jb20+CkBAIC0zMDAsNyArMjk4LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludAogZXY2NDM2MF9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0YXRpYyBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQzNjAuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MzYwLmgKaW5kZXggNjhlYWJlNC4uYjMwZjQ3MiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2V2NjQzNjAuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZXY2NDM2MC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9ldjY0MzYwLmgKLSAqCiAgKiBEZWZpbml0aW9ucyBmb3IgTWFydmVsbCBFVi02NDM2MC1CUCBFdmFsdWF0aW9uIEJvYXJkLgogICoKICAqIEF1dGhvcjogTGVlIE5pY2tzIDxhbGxpbnV4QGdtYWlsLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9mYWRzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZmFkcy5oCmluZGV4IGE0OGZiOGQuLmUxYzBiMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9mYWRzLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2ZhZHMuaApAQCAtMTEyLDcgKzExMiw3IEBACiAKIC8qIENQTSBFdGhlcm5ldCB0aHJvdWdoIFNDQzEgb3IgU0NDMiAqLwogCi0jaWZkZWYgQ09ORklHX1NDQzFfRU5FVAkJLyogUHJvYmFibHkgODYwIHZhcmlhbnQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TQ0MxX0VORVQpIHx8IGRlZmluZWQoQ09ORklHX01QQzh4eF9TRUNPTkRfRVRIX1NDQzEpCQkvKiBQcm9iYWJseSA4NjAgdmFyaWFudCAqLwogLyogQml0cyBpbiBwYXJhbGxlbCBJL08gcG9ydCByZWdpc3RlcnMgdGhhdCBoYXZlIHRvIGJlIHNldC9jbGVhcmVkCiAgKiB0byBjb25maWd1cmUgdGhlIHBpbnMgZm9yIFNDQzEgdXNlLgogICogVENMSyAtIENMSzEsIFJDTEsgLSBDTEsyLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaS5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaS5oCmluZGV4IDA2ZGU1OTIuLjU1MjhmZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmkuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pLmgKQEAgLTEsNyArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmkuaAotICoKLSAqCiAgKiAgT25ib2FyZCByZWdpc3RlcnMgYW5kIGRlc2NyaXB0aW9ucyBmb3IgU3luZXJneSBNaWNyb3N5c3RlbXMnCiAgKiAgIkdlbWluaSIgYm9hcmRzLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmlfcHJvbS5TIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9wcm9tLlMKaW5kZXggOGM1MDY1ZC4uYjE4MWYyMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9wcm9tLlMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9wcm9tLlMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL3BsYXRmb3Jtcy9nZW1pbmlfcHJvbS5TCi0gKgogICogIE5vdCByZWFsbHkgcHJvbSBzdXBwb3J0IGNvZGUgKHlldCksIGJ1dCBzb3J0IG9mIGFudGktcHJvbSBjb2RlLiAgVGhlIGN1cnJlbnQKICAqICBib290bG9hZGVyIGRvZXMgYSBudW1iZXIgb2YgdGhpbmdzIGl0IHNob3VsZG4ndCBhbmQgZG9lc24ndCBkbyB0aGluZ3MgdGhhdCBpdAogICogIHNob3VsZC4gIFRoZSBzdHVmZiBpbiBoZXJlIGlzIG1haW5seSBhIGhvZGdlLXBvZGdlIGNvbGxlY3Rpb24gb2Ygc2V0dXAgY29kZQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9zZXR1cC5jCmluZGV4IDcyOTg5N2MuLjAwOTBmZjE1IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3NldHVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2dlbWluaV9zZXR1cC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9wbGF0Zm9ybXMvZ2VtaW5pX3NldHVwLmMKLSAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk1IExpbnVzIFRvcnZhbGRzCiAgKiAgQWRhcHRlZCBmcm9tICdhbHBoYScgdmVyc2lvbiBieSBHYXJ5IFRob21hcwogICogIE1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIChjb3J0QGNzLm5tdC5lZHUpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2hkcHUuYwppbmRleCA1MDAzOWEyLi43NWRjMmVlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9oZHB1LmMKQEAgLTEsNyArMSw0IEBACi0KIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdV9zZXR1cC5jCi0gKgogICogQm9hcmQgc2V0dXAgcm91dGluZXMgZm9yIHRoZSBTa3kgQ29tcHV0ZXJzIEhEUFUgQ29tcHV0ZSBCbGFkZS4KICAqCiAgKiBXcml0dGVuIGJ5IEJyaWFuIFdhaXRlIDx3YWl0ZUBza3ljb21wdXRlcnMuY29tPgpAQCAtMzE5LDExICszMTYsMTAgQEAKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX3BkOwogCWV0aF9wZCA9IHBkLT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCWV0aF9wZC0+cG9ydF9zZXJpYWxfY29udHJvbCA9Ci0JICAgIG12NjR4NjBfcmVhZCgmYmgsIE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBkLT5pZCkgJiB+MSk7Ci0KIAlldGhfcGQtPmZvcmNlX3BoeV9hZGRyID0gMTsKIAlldGhfcGQtPnBoeV9hZGRyID0gcGQtPmlkOworCWV0aF9wZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJZXRoX3BkLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAlldGhfcGQtPnR4X3F1ZXVlX3NpemUgPSA0MDA7CiAJZXRoX3BkLT5yeF9xdWV1ZV9zaXplID0gODAwOwogfQpAQCAtMzU0LDcgKzM1MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgaGRwdV9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBoZHB1X3BsYXRmb3JtX25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RhdGljIHN0cnVjdCB7CiAJCWNoYXIgKmJ1c19pZDsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9oZHB1LmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5oCmluZGV4IDA3YzNjZmYuLmY5ZTAyMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9oZHB1LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2hkcHUuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvaGRwdS5oCi0gKgogICogRGVmaW5pdGlvbnMgZm9yIFNreSBDb21wdXRlcnMgSERQVSBib2FyZC4KICAqCiAgKiBCcmlhbiBXYWl0ZSA8d2FpdGVAc2t5Y29tcHV0ZXJzLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuYwppbmRleCA2ZTU4ZTMwLi5hZDIxMjgwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMva2F0YW5hLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2thdGFuYS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuYwotICoKICAqIEJvYXJkIHNldHVwIHJvdXRpbmVzIGZvciB0aGUgQXJ0ZXN5biBLYXRhbmEgY1BDSSBib2FyZHMuCiAgKgogICogQXV0aG9yOiBUaW0gTW9udGdvbWVyeSA8dGltbUBhcnRlc3luY3AuY29tPgpAQCAtNTk4LDcgKzU5Niw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQKIGthdGFuYV9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0YXRpYyBzdHJ1Y3QgewpAQCAtNjY0LDEyICs2NjIsMTEgQEAKIAogCXB0YmxfZW50cmllcyA9IChzaXplID49ICg2NCpNQikpID8gNiA6IDQ7CiAKLQlpZiAoKHB0YmwgPSBrbWFsbG9jKHB0YmxfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXRkX3BhcnRpdGlvbiksCisJaWYgKChwdGJsID0ga2NhbGxvYyhwdGJsX2VudHJpZXMsIHNpemVvZihzdHJ1Y3QgbXRkX3BhcnRpdGlvbiksCiAJCQlHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBhbGxvYyBNVEQgcGFydGl0aW9uIHRhYmxlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChwdGJsLCAwLCBwdGJsX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IG10ZF9wYXJ0aXRpb24pKTsKIAogCXB0YmxbMF0ubmFtZSA9ICJNb25pdG9yIjsKIAlwdGJsWzBdLnNpemUgPSBLQVRBTkFfTVREX01PTklUT1JfU0laRTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuaAppbmRleCA1OTcyNTdlLi4wYTliMDM2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMva2F0YW5hLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2thdGFuYS5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9rYXRhbmEuaAotICoKICAqIERlZmluaXRpb25zIGZvciBBcnRlc3luIEthdGFuYTc1MGkvMzc1MCBib2FyZC4KICAqCiAgKiBBdXRob3I6IFRpbSBNb250Z29tZXJ5IDx0aW1tQGFydGVzeW5jcC5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9saXRlNTIwMC5jCmluZGV4IDdlZDUyZGMzLi41MTcxYjUzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuYwotICoKICAqIFBsYXRmb3JtIHN1cHBvcnQgZmlsZSBmb3IgdGhlIEZyZWVzY2FsZSBMSVRFNTIwMCBiYXNlZCBvbiBNUEM1Mnh4LgogICogQSBtYXhpbXVtIG9mIHRoaXMgZmlsZSBzaG91bGQgYmUgbW92ZWQgdG8gc3lzbGliL21wYzUyeHhfPz8/Pz8KICAqIHNvIHRoYXQgbmV3IHBsYXRmb3JtIGJhc2VkIG9uIE1QQzUyeHggbmVlZCBhIG1pbmltYWwgcGxhdGZvcm0gZmlsZQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL2xpdGU1MjAwLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuaAppbmRleCBjMWRlMmFhLi44NTJhMThlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvbGl0ZTUyMDAuaAotICogCiAgKiBEZWZpbml0aW9ucyBmb3IgRnJlZXNjYWxlIExJVEU1MjAwIDogTVBDNTJ4eCBTdGFuZGFyZCBEZXZlbG9wbWVudAogICogUGxhdGZvcm0gYm9hcmQgc3VwcG9ydAogICogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbG9wZWMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9sb3BlYy5jCmluZGV4IDA2ZDI0N2MuLmM2NDQ1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9sb3BlYy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9sb3BlYy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9sb3BlYy5jCi0gKgogICogU2V0dXAgcm91dGluZXMgZm9yIHRoZSBNb3Rvcm9sYSBMb1BFQy4KICAqCiAgKiBBdXRob3I6IERhbiBDb3gKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4MjcyYWRzX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODI3MmFkc19zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOWI5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODI3MmFkc19zZXR1cC5jCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogYXJjaC9wcGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzX3BkLmMKKyAqCisgKiBNUEM4Mnh4IEJvYXJkLXNwZWNpZmljIFBsYXRmb3JtRGV2aWNlIGRlc2NyaXB0aW9ucworICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIFZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19lbmV0X3BkLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbXBjODI2MC5oPgorI2luY2x1ZGUgPGFzbS9jcG0yLmg+CisjaW5jbHVkZSA8YXNtL2ltbWFwX2NwbTIuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KKyNpbmNsdWRlIDxhc20vcHBjYm9vdC5oPgorCisjaW5jbHVkZSAicHEyYWRzX3BkLmgiCisKK3N0YXRpYyB2b2lkIGluaXRfZmNjMV9pb3BvcnRzKHZvaWQpOworc3RhdGljIHZvaWQgaW5pdF9mY2MyX2lvcG9ydHModm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvIG1paV9idXNfaW5mbyA9IHsKKwkubWV0aG9kICAgICAgICAgICAgICAgICA9IGZzbWlpX2JpdGJhbmcsCisJLmlkICAgICAgICAgICAgICAgICAgICAgPSAwLAorCS5pLmJpdGJhbmcgPSB7CisJCS5tZGlvX3BvcnQJPSBmc2lvcF9wb3J0YywKKwkJLm1kaW9fYml0CT0gMTgsCisJCS5tZGNfcG9ydAk9IGZzaW9wX3BvcnRjLAorCQkubWRjX2JpdAk9IDE5LAorCQkuZGVsYXkJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvIG1wYzgyeHhfZmNjMV9wZGF0YSA9IHsKKwkuZnNfbm8JCT0gZnNpZF9mY2MxLAorCS5jcF9wYWdlCT0gQ1BNX0NSX0ZDQzFfUEFHRSwKKwkuY3BfYmxvY2sgCT0gQ1BNX0NSX0ZDQzFfU0JMT0NLLAorCS5jbGtfdHJ4IAk9IChQQ19GMVJYQ0xLIHwgUENfRjFUWENMSyksCisJLmNsa19yb3V0ZQk9IENNWDFfQ0xLX1JPVVRFLAorCS5jbGtfbWFzawk9IENNWDFfQ0xLX01BU0ssCisJLmluaXRfaW9wb3J0cyAJPSBpbml0X2ZjYzFfaW9wb3J0cywKKworCS5waHlfYWRkcgk9IDAsCisjaWZkZWYgUEhZX0lOVEVSUlVQVAorCS5waHlfaXJxCT0gUEhZX0lOVEVSUlVQVCwKKyNlbHNlCisJLnBoeV9pcnEJPSAtMTsKKyNlbmRpZgorCS5tZW1fb2Zmc2V0CT0gRkNDMV9NRU1fT0ZGU0VULAorCS5idXNfaW5mbwk9ICZtaWlfYnVzX2luZm8sCisJLnJ4X3JpbmcJPSAzMiwKKwkudHhfcmluZwk9IDMyLAorCS5yeF9jb3B5YnJlYWsJPSAyNDAsCisJLnVzZV9uYXBpCT0gMCwKKwkubmFwaV93ZWlnaHQJPSAxNywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyBtcGM4Mnh4X2ZjYzJfcGRhdGEgPSB7CisJLmZzX25vCQk9IGZzaWRfZmNjMiwKKwkuY3BfcGFnZQk9IENQTV9DUl9GQ0MyX1BBR0UsCisJLmNwX2Jsb2NrIAk9IENQTV9DUl9GQ0MyX1NCTE9DSywKKwkuY2xrX3RyeCAJPSAoUENfRjJSWENMSyB8IFBDX0YyVFhDTEspLAorCS5jbGtfcm91dGUJPSBDTVgyX0NMS19ST1VURSwKKwkuY2xrX21hc2sJPSBDTVgyX0NMS19NQVNLLAorCS5pbml0X2lvcG9ydHMJPSBpbml0X2ZjYzJfaW9wb3J0cywKKworCS5waHlfYWRkcgk9IDMsCisjaWZkZWYgUEhZX0lOVEVSUlVQVAorCS5waHlfaXJxCT0gUEhZX0lOVEVSUlVQVCwKKyNlbHNlCisJLnBoeV9pcnEJPSAtMTsKKyNlbmRpZgorCS5tZW1fb2Zmc2V0CT0gRkNDMl9NRU1fT0ZGU0VULAorCS5idXNfaW5mbwk9ICZtaWlfYnVzX2luZm8sCisJLnJ4X3JpbmcJPSAzMiwKKwkudHhfcmluZwk9IDMyLAorCS5yeF9jb3B5YnJlYWsJPSAyNDAsCisJLnVzZV9uYXBpCT0gMCwKKwkubmFwaV93ZWlnaHQJPSAxNywKK307CisKK3N0YXRpYyB2b2lkIGluaXRfZmNjMV9pb3BvcnRzKHZvaWQpCit7CisJc3RydWN0IGlvX3BvcnQgKmlvOworCXUzMiB0ZW1wdmFsOworCWNwbTJfbWFwX3QqIGltbWFwID0gaW9yZW1hcChDUE1fTUFQX0FERFIsIHNpemVvZihjcG0yX21hcF90KSk7CisJdTMyICpiY3NyID0gaW9yZW1hcChCQ1NSX0FERFIrNCwgc2l6ZW9mKHUzMikpOworCisJaW8gPSAmaW1tYXAtPmltX2lvcG9ydDsKKworCS8qIEVuYWJsZSB0aGUgUEhZICovCisJY2xyYml0czMyKGJjc3IsIEJDU1IxX0ZFVEhJRU4pOworCXNldGJpdHMzMihiY3NyLCBCQ1NSMV9GRVRIX1JTVCk7CisKKwkvKiBGQ0MxIHBpbnMgYXJlIG9uIHBvcnQgQS9DLiAqLworCS8qIENvbmZpZ3VyZSBwb3J0IEEgYW5kIEMgcGlucyBmb3IgRkNDMSBFdGhlcm5ldC4gKi8KKworCXRlbXB2YWwgPSBpbl9iZTMyKCZpby0+aW9wX3BkaXJhKTsKKwl0ZW1wdmFsICY9IH5QQTFfRElSQTA7CisJdGVtcHZhbCB8PSBQQTFfRElSQTE7CisJb3V0X2JlMzIoJmlvLT5pb3BfcGRpcmEsIHRlbXB2YWwpOworCisJdGVtcHZhbCA9IGluX2JlMzIoJmlvLT5pb3BfcHNvcmEpOworCXRlbXB2YWwgJj0gflBBMV9QU09SQTA7CisJdGVtcHZhbCB8PSBQQTFfUFNPUkExOworCW91dF9iZTMyKCZpby0+aW9wX3Bzb3JhLCB0ZW1wdmFsKTsKKworCXNldGJpdHMzMigmaW8tPmlvcF9wcGFyYSxQQTFfRElSQTAgfCBQQTFfRElSQTEpOworCisJLyogQWx0ZXIgY2xvY2tzICovCisJdGVtcHZhbCA9IFBDX0YxVFhDTEt8UENfRjFSWENMSzsKKworCWNscmJpdHMzMigmaW8tPmlvcF9wc29yYywgdGVtcHZhbCk7CisJY2xyYml0czMyKCZpby0+aW9wX3BkaXJjLCB0ZW1wdmFsKTsKKwlzZXRiaXRzMzIoJmlvLT5pb3BfcHBhcmMsIHRlbXB2YWwpOworCisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtdXguY214X2ZjciwgQ01YMV9DTEtfTUFTSyk7CisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtdXguY214X2ZjciwgQ01YMV9DTEtfUk9VVEUpOworCWlvdW5tYXAoYmNzcik7CisJaW91bm1hcChpbW1hcCk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZmNjMl9pb3BvcnRzKHZvaWQpCit7CisJY3BtMl9tYXBfdCogaW1tYXAgPSBpb3JlbWFwKENQTV9NQVBfQUREUiwgc2l6ZW9mKGNwbTJfbWFwX3QpKTsKKwl1MzIgKmJjc3IgPSBpb3JlbWFwKEJDU1JfQUREUisxMiwgc2l6ZW9mKHUzMikpOworCisJc3RydWN0IGlvX3BvcnQgKmlvOworCXUzMiB0ZW1wdmFsOworCisJaW1tYXAgPSBjcG0yX2ltbXI7CisKKwlpbyA9ICZpbW1hcC0+aW1faW9wb3J0OworCisJLyogRW5hYmxlIHRoZSBQSFkgKi8KKwljbHJiaXRzMzIoYmNzciwgQkNTUjNfRkVUSElFTjIpOworCXNldGJpdHMzMihiY3NyLCBCQ1NSM19GRVRIMl9SU1QpOworCisJLyogRkNDMiBhcmUgcG9ydCBCL0MuICovCisJLyogQ29uZmlndXJlIHBvcnQgQSBhbmQgQyBwaW5zIGZvciBGQ0MyIEV0aGVybmV0LiAqLworCisJdGVtcHZhbCA9IGluX2JlMzIoJmlvLT5pb3BfcGRpcmIpOworCXRlbXB2YWwgJj0gflBCMl9ESVJCMDsKKwl0ZW1wdmFsIHw9IFBCMl9ESVJCMTsKKwlvdXRfYmUzMigmaW8tPmlvcF9wZGlyYiwgdGVtcHZhbCk7CisKKwl0ZW1wdmFsID0gaW5fYmUzMigmaW8tPmlvcF9wc29yYik7CisJdGVtcHZhbCAmPSB+UEIyX1BTT1JCMDsKKwl0ZW1wdmFsIHw9IFBCMl9QU09SQjE7CisJb3V0X2JlMzIoJmlvLT5pb3BfcHNvcmIsIHRlbXB2YWwpOworCisJc2V0Yml0czMyKCZpby0+aW9wX3BwYXJiLFBCMl9ESVJCMCB8IFBCMl9ESVJCMSk7CisKKwl0ZW1wdmFsID0gUENfRjJSWENMS3xQQ19GMlRYQ0xLOworCisJLyogQWx0ZXIgY2xvY2tzICovCisJY2xyYml0czMyKCZpby0+aW9wX3Bzb3JjLHRlbXB2YWwpOworCWNscmJpdHMzMigmaW8tPmlvcF9wZGlyYyx0ZW1wdmFsKTsKKwlzZXRiaXRzMzIoJmlvLT5pb3BfcHBhcmMsdGVtcHZhbCk7CisKKwljbHJiaXRzMzIoJmltbWFwLT5pbV9jcG11eC5jbXhfZmNyLCBDTVgyX0NMS19NQVNLKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG11eC5jbXhfZmNyLCBDTVgyX0NMS19ST1VURSk7CisKKwlpb3VubWFwKGJjc3IpOworCWlvdW5tYXAoaW1tYXApOworfQorCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4MjcyYWRzX2ZpeHVwX2VuZXRfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkJICAgICAgaW50IGlkeCkKK3sKKwliZF90KiBiaSA9ICh2b2lkKilfX3JlczsKKwlpbnQgZnNfbm8gPSBmc2lkX2ZjYzErcGRldi0+aWQtMTsKKworCW1wYzgyeHhfZmNjMV9wZGF0YS5kcHJhbV9vZmZzZXQgPSBtcGM4Mnh4X2ZjYzJfcGRhdGEuZHByYW1fb2Zmc2V0ID0gKHUzMiljcG0yX2ltbXItPmltX2RwcmFtYmFzZTsKKwltcGM4Mnh4X2ZjYzFfcGRhdGEuZmNjX3JlZ3NfYyA9IG1wYzgyeHhfZmNjMl9wZGF0YS5mY2NfcmVnc19jID0gKHUzMiljcG0yX2ltbXItPmltX2ZjY19jOworCisJc3dpdGNoKGZzX25vKSB7CisJCWNhc2UgZnNpZF9mY2MxOgorCQkJbWVtY3B5KCZtcGM4Mnh4X2ZjYzFfcGRhdGEubWFjYWRkcixiaS0+YmlfZW5ldGFkZHIsNik7CisJCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9ICZtcGM4Mnh4X2ZjYzFfcGRhdGE7CisJCWJyZWFrOworCQljYXNlIGZzaWRfZmNjMjoKKwkJCW1lbWNweSgmbXBjODJ4eF9mY2MyX3BkYXRhLm1hY2FkZHIsYmktPmJpX2VuZXRhZGRyLDYpOworCQkJbXBjODJ4eF9mY2MyX3BkYXRhLm1hY2FkZHJbNV0gXj0gMTsKKwkJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gJm1wYzgyeHhfZmNjMl9wZGF0YTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG1wYzgyNzJhZHNfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX25vdGlmeV9kZXZfbWFwIGRldl9tYXBbXSA9IHsKKwkJeworCQkJLmJ1c19pZCA9ICJmc2wtY3BtLWZjYyIsCisJCQkucnRuID0gbXBjODI3MmFkc19maXh1cF9lbmV0X3BkYXRhCisJCX0sCisJCXsKKwkJCS5idXNfaWQgPSBOVUxMCisJCX0KKwl9OworCXBsYXRmb3JtX25vdGlmeV9tYXAoZGV2X21hcCxkZXYpOworCisJcmV0dXJuIDA7CisKK30KKworaW50IF9faW5pdCBtcGM4MjcyYWRzX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgIm1wYzgyNzJhZHM6IEluaXRcbiIpOworCisJcGxhdGZvcm1fbm90aWZ5ID0gbXBjODI3MmFkc19wbGF0Zm9ybV9ub3RpZnk7CisKKwlwcGNfc3lzX2RldmljZV9pbml0ZnVuYygpOworCisJcHBjX3N5c19kZXZpY2VfZGlzYWJsZV9hbGwoKTsKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDODJ4eF9DUE1fRkNDMSk7CisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzgyeHhfQ1BNX0ZDQzIpOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwobXBjODI3MmFkc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NjZhZHNfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NjZhZHNfc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzhmY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkc19zZXR1cC5jCkBAIC0wLDAgKzEsMjczIEBACisvKmFyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHMtc2V0dXAuYworICoKKyAqIFBsYXRmb3JtIHNldHVwIGZvciB0aGUgRnJlZXNjYWxlIG1wYzg4NWFkcyBib2FyZAorICoKKyAqIFZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2ZzX2VuZXRfcGQuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKworI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KKyNpbmNsdWRlIDxhc20vOHh4X2ltbWFwLmg+CisjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+CisjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KKyNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIF9fcmVzW107CisKK3N0YXRpYyBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvIGZlY19taWlfYnVzX2luZm8gPSB7CisJLm1ldGhvZCA9IGZzbWlpX2ZlYywKKwkuaWQgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBmc19taWlfYnVzX2luZm8gc2NjX21paV9idXNfaW5mbyA9IHsKKwkubWV0aG9kID0gZnNtaWlfZml4ZWQsCisJLmlkID0gMCwKKwkuaS5maXhlZC5zcGVlZCA9IDEwLAorCS5pLmZpeGVkLmR1cGxleCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gbXBjOHh4X2ZlY19wZGF0YVtdID0geworCXsKKwkgLnJ4X3JpbmcgPSAxMjgsCisJIC50eF9yaW5nID0gMTYsCisJIC5yeF9jb3B5YnJlYWsgPSAyNDAsCisKKwkgLnVzZV9uYXBpID0gMSwKKwkgLm5hcGlfd2VpZ2h0ID0gMTcsCisKKwkgLnBoeV9hZGRyID0gMTUsCisJIC5waHlfaXJxID0gLTEsCisKKwkgLnVzZV9ybWlpID0gMCwKKworCSAuYnVzX2luZm8gPSAmZmVjX21paV9idXNfaW5mbywKKwkgfQorfTsKKworc3RhdGljIHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvIG1wYzh4eF9zY2NfcGRhdGEgPSB7CisJLnJ4X3JpbmcgPSA2NCwKKwkudHhfcmluZyA9IDgsCisJLnJ4X2NvcHlicmVhayA9IDI0MCwKKworCS51c2VfbmFwaSA9IDEsCisJLm5hcGlfd2VpZ2h0ID0gMTcsCisKKwkucGh5X2FkZHIgPSAtMSwKKwkucGh5X2lycSA9IC0xLAorCisJLmJ1c19pbmZvID0gJnNjY19taWlfYnVzX2luZm8sCit9OworCit2b2lkIF9faW5pdCBib2FyZF9pbml0KHZvaWQpCit7CisJdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtcDsKKwl1bnNpZ25lZCAqYmNzcl9pbzsKKworCWJjc3JfaW8gPSBpb3JlbWFwKEJDU1IxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisJaWYgKGJjc3JfaW8gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgcmVtYXAgQkNTUjFcbiIpOworCQlyZXR1cm47CisJfQorI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEKKwljcC0+Y3Bfc2ltb2RlICY9IH4oMHhlMDAwMDAwMCA+PiAxNyk7CS8qIGJyZzEgKi8KKwljbHJiaXRzMzIoYmNzcl9pbywoMHg4MDAwMDAwMCA+PiA3KSk7CisjZWxzZQorCXNldGJpdHMzMihiY3NyX2lvLCgweDgwMDAwMDAwID4+IDcpKTsKKworCWNwLT5jcF9wYnBhciAmPSB+KDB4MDAwMDAwYzApOworCWNwLT5jcF9wYmRpciB8PSAweDAwMDAwMGMwOworCWNwLT5jcF9zbWNbMF0uc21jX3NtY21yID0gMDsKKwljcC0+Y3Bfc21jWzBdLnNtY19zbWNlID0gMDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NFUklBTF9DUE1fU01DMgorCWNwLT5jcF9zaW1vZGUgJj0gfigweGUwMDAwMDAwID4+IDEpOworCWNwLT5jcF9zaW1vZGUgfD0gKDB4MjAwMDAwMDAgPj4gMSk7CS8qIGJyZzIgKi8KKwljbHJiaXRzMzIoYmNzcl9pbywoMHg4MDAwMDAwMCA+PiAxMykpOworI2Vsc2UKKwljbHJiaXRzMzIoYmNzcl9pbywoMHg4MDAwMDAwMCA+PiAxMykpOworCWNwLT5jcF9wYnBhciAmPSB+KDB4MDAwMDBjMDApOworCWNwLT5jcF9wYmRpciB8PSAweDAwMDAwYzAwOworCWNwLT5jcF9zbWNbMV0uc21jX3NtY21yID0gMDsKKwljcC0+Y3Bfc21jWzFdLnNtY19zbWNlID0gMDsKKyNlbmRpZgorCWlvdW5tYXAoYmNzcl9pbyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2ZlYzFfaW9wb3J0cyh2b2lkKQoreworCWltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgSU1BUF9BRERSOworCisJc2V0Yml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wZHBhciwgMHgxZmZmKTsKKwlzZXRiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BkZGlyLCAweDFmZmYpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9zY2MxX2lvcG9ydHModm9pZCkKK3sKKwlpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsKKwl1bnNpZ25lZCAqYmNzcl9pbzsKKworCWJjc3JfaW8gPSBpb3JlbWFwKEJDU1IxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCisJaWYgKGJjc3JfaW8gPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9DUklUICJDb3VsZCBub3QgcmVtYXAgQkNTUjFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogRW5hYmxlIHRoZSBQSFkuCisJICovCisJY2xyYml0czMyKGJjc3JfaW8sQkNTUjFfRVRIRU4pOworCisJLyogQ29uZmlndXJlIHBvcnQgQSBwaW5zIGZvciBUeGQgYW5kIFJ4ZC4KKwkgKi8KKwkvKiBEaXNhYmxlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGluIGNhc2UgRVBQQy1CdWcgc3RhcnRlZCBpdC4KKwkgKi8KKwlzZXRiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyLCBQQV9FTkVUX1JYRCB8IFBBX0VORVRfVFhEKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BhZGlyLCBQQV9FTkVUX1JYRCB8IFBBX0VORVRfVFhEKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3Bhb2RyLCBQQV9FTkVUX1RYRCk7CisKKwkvKiBDb25maWd1cmUgcG9ydCBDIHBpbnMgdG8gZW5hYmxlIENMU04gYW5kIFJFTkEuCisJICovCisJY2xyYml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wY3BhciwgUENfRU5FVF9DTFNOIHwgUENfRU5FVF9SRU5BKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BjZGlyLCBQQ19FTkVUX0NMU04gfCBQQ19FTkVUX1JFTkEpOworCXNldGJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNzbywgUENfRU5FVF9DTFNOIHwgUENfRU5FVF9SRU5BKTsKKwkvKiBDb25maWd1cmUgcG9ydCBBIGZvciBUQ0xLIGFuZCBSQ0xLLgorCSAqLworCXNldGJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFwYXIsIFBBX0VORVRfVENMSyB8IFBBX0VORVRfUkNMSyk7CisJY2xyYml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciwgUEFfRU5FVF9UQ0xLIHwgUEFfRU5FVF9SQ0xLKTsKKwljbHJiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3BfcGJwYXIsIFBCX0VORVRfVEVOQSk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BiZGlyLCBQQl9FTkVUX1RFTkEpOworCisJLyogQ29uZmlndXJlIFNlcmlhbCBJbnRlcmZhY2UgY2xvY2sgcm91dGluZy4KKwkgKiBGaXJzdCwgY2xlYXIgYWxsIFNDQyBiaXRzIHRvIHplcm8sIHRoZW4gc2V0IHRoZSBvbmVzIHdlIHdhbnQuCisJICovCisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3NpY3IsIFNJQ1JfRU5FVF9NQVNLKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3Bfc2ljciwgU0lDUl9FTkVUX0NMS1JUKTsKKworCS8qIEluIHRoZSBvcmlnaW5hbCBTQ0MgZW5ldCBkcml2ZXIgdGhlIGZvbGxvd2luZyBjb2RlIGlzIHBsYWNlZCBhdAorCXRoZSBlbmQgb2YgdGhlIGluaXRpYWxpemF0aW9uICovCisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BicGFyLCBQQl9FTkVUX1RFTkEpOworCXNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wYmRpciwgUEJfRU5FVF9URU5BKTsKKworfQorCitzdGF0aWMgdm9pZCBtcGM4NjZhZHNfZml4dXBfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZnNfbm8pCit7CisJc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJdm9sYXRpbGUgY3BtOHh4X3QgKmNwOworCWJkX3QgKmJkID0gKGJkX3QgKikgX19yZXM7CisJY2hhciAqZTsKKwlpbnQgaTsKKworCS8qIEdldCBwb2ludGVyIHRvIENvbW11bmljYXRpb24gUHJvY2Vzc29yICovCisJY3AgPSBjcG1wOworCXN3aXRjaCAoZnNfbm8pIHsKKwljYXNlIGZzaWRfZmVjMToKKwkJZnBpID0gJm1wYzh4eF9mZWNfcGRhdGFbMF07CisJCWZwaS0+aW5pdF9pb3BvcnRzID0gJnNldHVwX2ZlYzFfaW9wb3J0czsKKworCQlicmVhazsKKwljYXNlIGZzaWRfc2NjMToKKwkJZnBpID0gJm1wYzh4eF9zY2NfcGRhdGE7CisJCWZwaS0+aW5pdF9pb3BvcnRzID0gJnNldHVwX3NjYzFfaW9wb3J0czsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HIkRldmljZSAlcyBpcyBub3Qgc3VwcG9ydGVkIVxuIiwgcGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGZwaTsKKwlmcGktPmZzX25vID0gZnNfbm87CisKKwllID0gKHVuc2lnbmVkIGNoYXIgKikmYmQtPmJpX2VuZXRhZGRyOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWZwaS0+bWFjYWRkcltpXSA9ICplKys7CisKKwlmcGktPm1hY2FkZHJbNSAtIHBkZXYtPmlkXSsrOworCit9CisKK3N0YXRpYyB2b2lkIG1wYzg2NmFkc19maXh1cF9mZWNfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQkgICBpbnQgaWR4KQoreworCS8qIFRoaXMgaXMgZm9yIEZFQyBkZXZpY2VzIG9ubHkgKi8KKwlpZiAoIXBkZXYgfHwgIXBkZXYtPm5hbWUgfHwgKCFzdHJzdHIocGRldi0+bmFtZSwgImZzbC1jcG0tZmVjIikpKQorCQlyZXR1cm47CisJbXBjODY2YWRzX2ZpeHVwX2VuZXRfcGRhdGEocGRldiwgZnNpZF9mZWMxICsgcGRldi0+aWQgLSAxKTsKK30KKworc3RhdGljIHZvaWQgbXBjODY2YWRzX2ZpeHVwX3NjY19lbmV0X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCSAgIGludCBpZHgpCit7CisJLyogVGhpcyBpcyBmb3IgU0NDIGRldmljZXMgb25seSAqLworCWlmICghcGRldiB8fCAhcGRldi0+bmFtZSB8fCAoIXN0cnN0cihwZGV2LT5uYW1lLCAiZnNsLWNwbS1zY2MiKSkpCisJCXJldHVybjsKKworCW1wYzg2NmFkc19maXh1cF9lbmV0X3BkYXRhKHBkZXYsIGZzaWRfc2NjMSArIHBkZXYtPmlkIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgbXBjODY2YWRzX3BsYXRmb3JtX25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9ub3RpZnlfZGV2X21hcCBkZXZfbWFwW10gPSB7CisJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWNwbS1mZWMiLAorCQkJLnJ0biA9IG1wYzg2NmFkc19maXh1cF9mZWNfZW5ldF9wZGF0YSwKKwkJfSwKKwkJeworCQkJLmJ1c19pZCA9ICJmc2wtY3BtLXNjYyIsCisJCQkucnRuID0gbXBjODY2YWRzX2ZpeHVwX3NjY19lbmV0X3BkYXRhLAorCQl9LAorCQl7CisJCQkuYnVzX2lkID0gTlVMTAorCQl9CisJfTsKKworCXBsYXRmb3JtX25vdGlmeV9tYXAoZGV2X21hcCxkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgbXBjODY2YWRzX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgIm1wYzg2NmFkczogSW5pdFxuIik7CisKKwlwbGF0Zm9ybV9ub3RpZnkgPSBtcGM4NjZhZHNfcGxhdGZvcm1fbm90aWZ5OworCisJcHBjX3N5c19kZXZpY2VfaW5pdGZ1bmMoKTsKKwlwcGNfc3lzX2RldmljZV9kaXNhYmxlX2FsbCgpOworCisjaWZkZWYgTVBDOHh4X1NFQ09ORF9FVEhfU0NDMQorCXBwY19zeXNfZGV2aWNlX2VuYWJsZShNUEM4eHhfQ1BNX1NDQzEpOworI2VuZGlmCisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fRkVDMSk7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChtcGM4NjZhZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODg1YWRzX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODg1YWRzX3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhOTllNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHNfc2V0dXAuYwpAQCAtMCwwICsxLDM4OSBAQAorLyphcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODg1YWRzLXNldHVwLmMKKyAqCisgKiBQbGF0Zm9ybSBzZXR1cCBmb3IgdGhlIEZyZWVzY2FsZSBtcGM4ODVhZHMgYm9hcmQKKyAqCisgKiBWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9mc19lbmV0X3BkLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisKKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNib290Lmg+CisjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgorI2luY2x1ZGUgPGFzbS9jb21tcHJvYy5oPgorI2luY2x1ZGUgPGFzbS9wcGNfc3lzLmg+CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIF9fcmVzW107CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtcGM4ODVhZHNfc2NjX3BoeV9pbml0KGNoYXIpOworCitzdGF0aWMgc3RydWN0IGZzX21paV9idXNfaW5mbyBmZWNfbWlpX2J1c19pbmZvID0geworCS5tZXRob2QgPSBmc21paV9mZWMsCisJLmlkID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvIHNjY19taWlfYnVzX2luZm8gPSB7CisjaWZkZWYgQ09ORklHX1NDQ19FTkVUXzh4eF9GSVhFRAorCS5tZXRob2QgPSBmc21paV9maXhlZCwKKyNlbHNlCisJLm1ldGhvZCA9IGZzbWlpX2ZlYywKKyNlbmRpZgorCisJLmlkID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyBtcGM4eHhfZmVjX3BkYXRhW10gPSB7CisJeworCSAucnhfcmluZyA9IDEyOCwKKwkgLnR4X3JpbmcgPSAxNiwKKwkgLnJ4X2NvcHlicmVhayA9IDI0MCwKKworCSAudXNlX25hcGkgPSAxLAorCSAubmFwaV93ZWlnaHQgPSAxNywKKworCSAucGh5X2FkZHIgPSAwLAorCSAucGh5X2lycSA9IFNJVV9JUlE3LAorCisJIC5idXNfaW5mbyA9ICZmZWNfbWlpX2J1c19pbmZvLAorCSB9LCB7CisJICAgICAucnhfcmluZyA9IDEyOCwKKwkgICAgIC50eF9yaW5nID0gMTYsCisJICAgICAucnhfY29weWJyZWFrID0gMjQwLAorCisJICAgICAudXNlX25hcGkgPSAxLAorCSAgICAgLm5hcGlfd2VpZ2h0ID0gMTcsCisKKwkgICAgIC5waHlfYWRkciA9IDEsCisJICAgICAucGh5X2lycSA9IFNJVV9JUlE3LAorCisJICAgICAuYnVzX2luZm8gPSAmZmVjX21paV9idXNfaW5mbywKKwkgICAgIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyBtcGM4eHhfc2NjX3BkYXRhID0geworCS5yeF9yaW5nID0gNjQsCisJLnR4X3JpbmcgPSA4LAorCS5yeF9jb3B5YnJlYWsgPSAyNDAsCisKKwkudXNlX25hcGkgPSAxLAorCS5uYXBpX3dlaWdodCA9IDE3LAorCisJLnBoeV9hZGRyID0gMiwKKyNpZmRlZiBDT05GSUdfTVBDOHh4X1NDQ19FTkVUX0ZJWEVECisJLnBoeV9pcnEgPSAtMSwKKyNlbHNlCisJLnBoeV9pcnEgPSBTSVVfSVJRNywKKyNlbmRpZgorCisJLmJ1c19pbmZvID0gJnNjY19taWlfYnVzX2luZm8sCit9OworCit2b2lkIF9faW5pdCBib2FyZF9pbml0KHZvaWQpCit7CisJdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtcDsKKwl1bnNpZ25lZCBpbnQgKmJjc3JfaW87CisKKyNpZmRlZiBDT05GSUdfRlNfRU5FVAorCWltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgSU1BUF9BRERSOworI2VuZGlmCisJYmNzcl9pbyA9IGlvcmVtYXAoQkNTUjEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwlpZiAoYmNzcl9pbyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIkNvdWxkIG5vdCByZW1hcCBCQ1NSXG4iKTsKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMxCisJY3AtPmNwX3NpbW9kZSAmPSB+KDB4ZTAwMDAwMDAgPj4gMTcpOwkvKiBicmcxICovCisJY2xyYml0czMyKGJjc3JfaW8sIEJDU1IxX1JTMjMyRU5fMSk7CisjZWxzZQorCXNldGJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMSk7CisJY3AtPmNwX3NtY1swXS5zbWNfc21jbXIgPSAwOworCWNwLT5jcF9zbWNbMF0uc21jX3NtY2UgPSAwOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0NQTV9TTUMyCisJY3AtPmNwX3NpbW9kZSAmPSB+KDB4ZTAwMDAwMDAgPj4gMSk7CisJY3AtPmNwX3NpbW9kZSB8PSAoMHgyMDAwMDAwMCA+PiAxKTsJLyogYnJnMiAqLworCWNscmJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMik7CisjZWxzZQorCXNldGJpdHMzMihiY3NyX2lvLEJDU1IxX1JTMjMyRU5fMik7CisJY3AtPmNwX3NtY1sxXS5zbWNfc21jbXIgPSAwOworCWNwLT5jcF9zbWNbMV0uc21jX3NtY2UgPSAwOworI2VuZGlmCisJaW91bm1hcChiY3NyX2lvKTsKKworI2lmZGVmIENPTkZJR19GU19FTkVUCisJLyogdXNlIE1EQyBmb3IgTUlJIChjb21tb24pICovCisJc2V0Yml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wZHBhciwgMHgwMDgwKTsKKwljbHJiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BkZGlyLCAweDAwODApOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2ZlYzFfaW9wb3J0cyh2b2lkKQoreworCWltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgSU1BUF9BRERSOworCisJLyogY29uZmlndXJlIEZFQzEgcGlucyAgKi8KKwlzZXRiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BhcGFyLCAweGY4MzApOworCXNldGJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkaXIsIDB4MDgzMCk7CisJY2xyYml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wYWRpciwgMHhmMDAwKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3BfcGJwYXIsIDB4MDAwMDEwMDEpOworCisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BiZGlyLCAweDAwMDAxMDAxKTsKKwlzZXRiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BjcGFyLCAweDAwMGMpOworCWNscmJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNkaXIsIDB4MDAwYyk7CisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BlcGFyLCAweDAwMDAwMDAzKTsKKworCXNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wZWRpciwgMHgwMDAwMDAwMyk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3Blc28sIDB4MDAwMDAwMDMpOworCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9jcHRyLCAweDAwMDAwMTAwKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZmVjMl9pb3BvcnRzKHZvaWQpCit7CisJaW1tYXBfdCAqaW1tYXAgPSAoaW1tYXBfdCAqKSBJTUFQX0FERFI7CisKKwkvKiBjb25maWd1cmUgRkVDMiBwaW5zICovCisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BlcGFyLCAweDAwMDNmZmZjKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3BfcGVkaXIsIDB4MDAwM2ZmZmMpOworCXNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wZXNvLCAweDAwMDM3ODAwKTsKKwljbHJiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3BfcGVzbywgMHgwMDAwODdmYyk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX2NwdHIsIDB4MDAwMDAwODApOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9zY2MzX2lvcG9ydHModm9pZCkKK3sKKwlpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsKKwl1bnNpZ25lZCAqYmNzcl9pbzsKKworCWJjc3JfaW8gPSBpb3JlbWFwKEJDU1JfQUREUiwgQkNTUl9TSVpFKTsKKworCWlmIChiY3NyX2lvID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiQ291bGQgbm90IHJlbWFwIEJDU1JcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogRW5hYmxlIHRoZSBQSFkuCisJICovCisJc2V0Yml0czMyKGJjc3JfaW8rNCwgQkNTUjRfRVRIMTBfUlNUKTsKKwkvKiBDb25maWd1cmUgcG9ydCBBIHBpbnMgZm9yIFR4ZCBhbmQgUnhkLgorCSAqLworCXNldGJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFwYXIsIFBBX0VORVRfUlhEIHwgUEFfRU5FVF9UWEQpOworCWNscmJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGFkaXIsIFBBX0VORVRfUlhEIHwgUEFfRU5FVF9UWEQpOworCisJLyogQ29uZmlndXJlIHBvcnQgQyBwaW5zIHRvIGVuYWJsZSBDTFNOIGFuZCBSRU5BLgorCSAqLworCWNscmJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGNwYXIsIFBDX0VORVRfQ0xTTiB8IFBDX0VORVRfUkVOQSk7CisJY2xyYml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wY2RpciwgUENfRU5FVF9DTFNOIHwgUENfRU5FVF9SRU5BKTsKKwlzZXRiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3Bjc28sIFBDX0VORVRfQ0xTTiB8IFBDX0VORVRfUkVOQSk7CisKKwkvKiBDb25maWd1cmUgcG9ydCBFIGZvciBUQ0xLIGFuZCBSQ0xLLgorCSAqLworCXNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wZXBhciwgUEVfRU5FVF9UQ0xLIHwgUEVfRU5FVF9SQ0xLKTsKKwljbHJiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3BfcGVwYXIsIFBFX0VORVRfVEVOQSk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BlZGlyLAorCQkgIFBFX0VORVRfVENMSyB8IFBFX0VORVRfUkNMSyB8IFBFX0VORVRfVEVOQSk7CisJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3Blc28sIFBFX0VORVRfVENMSyB8IFBFX0VORVRfUkNMSyk7CisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3Blc28sIFBFX0VORVRfVEVOQSk7CisKKwkvKiBDb25maWd1cmUgU2VyaWFsIEludGVyZmFjZSBjbG9jayByb3V0aW5nLgorCSAqIEZpcnN0LCBjbGVhciBhbGwgU0NDIGJpdHMgdG8gemVybywgdGhlbiBzZXQgdGhlIG9uZXMgd2Ugd2FudC4KKwkgKi8KKwljbHJiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3Bfc2ljciwgU0lDUl9FTkVUX01BU0spOworCXNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9zaWNyLCBTSUNSX0VORVRfQ0xLUlQpOworCisJLyogRGlzYWJsZSBSeCBhbmQgVHguIFNNQzEgc3Nob3VsZCBiZSBzdG9wcGVkIGlmIFNDQzMgZXRlcm5ldCBhcmUgdXNlZC4KKwkgKi8KKwlpbW1hcC0+aW1fY3BtLmNwX3NtY1swXS5zbWNfc21jbXIgJj0gfihTTUNNUl9SRU4gfCBTTUNNUl9URU4pOworCS8qIE9uIHRoZSBNUEM4ODVBRFMgU0NDIGV0aGVybmV0IFBIWSBpcyBpbml0aWFsaXplZCBpbiB0aGUgZnVsbCBkdXBsZXggbW9kZQorCSAqIGJ5IEgvVyBzZXR0aW5nIGFmdGVyIHJlc2V0LiBTQ0MgZXRoZXJuZXQgY29udHJvbGxlciBzdXBwb3J0IG9ubHkgaGFsZiBkdXBsZXguCisJICogVGhpcyBkaXNjcmVwYW5jeSBvZiBtb2RlcyBjYXVzZXMgYSBsb3Qgb2YgY2FycmllciBsb3N0IGVycm9ycy4KKwkgKi8KKworCS8qIEluIHRoZSBvcmlnaW5hbCBTQ0MgZW5ldCBkcml2ZXIgdGhlIGZvbGxvd2luZyBjb2RlIGlzIHBsYWNlZCBhdAorCSAgIHRoZSBlbmQgb2YgdGhlIGluaXRpYWxpemF0aW9uICovCisJc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BlcGFyLCBQRV9FTkVUX1RFTkEpOworCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wZWRpciwgUEVfRU5FVF9URU5BKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3BfcGVzbywgUEVfRU5FVF9URU5BKTsKKworCXNldGJpdHMzMihiY3NyX2lvKzEsIEJDU1IxX0VUSEVOKTsKKwlpb3VubWFwKGJjc3JfaW8pOworfQorCitzdGF0aWMgdm9pZCBtcGM4ODVhZHNfZml4dXBfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZnNfbm8pCit7CisJc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJdm9sYXRpbGUgY3BtOHh4X3QgKmNwOworCWJkX3QgKmJkID0gKGJkX3QgKikgX19yZXM7CisJY2hhciAqZTsKKwlpbnQgaTsKKworCS8qIEdldCBwb2ludGVyIHRvIENvbW11bmljYXRpb24gUHJvY2Vzc29yICovCisJY3AgPSBjcG1wOworCXN3aXRjaCAoZnNfbm8pIHsKKwljYXNlIGZzaWRfZmVjMToKKwkJZnBpID0gJm1wYzh4eF9mZWNfcGRhdGFbMF07CisJCWZwaS0+aW5pdF9pb3BvcnRzID0gJnNldHVwX2ZlYzFfaW9wb3J0czsKKwkJYnJlYWs7CisJY2FzZSBmc2lkX2ZlYzI6CisJCWZwaSA9ICZtcGM4eHhfZmVjX3BkYXRhWzFdOworCQlmcGktPmluaXRfaW9wb3J0cyA9ICZzZXR1cF9mZWMyX2lvcG9ydHM7CisJCWJyZWFrOworCWNhc2UgZnNpZF9zY2MzOgorCQlmcGkgPSAmbXBjOHh4X3NjY19wZGF0YTsKKwkJZnBpLT5pbml0X2lvcG9ydHMgPSAmc2V0dXBfc2NjM19pb3BvcnRzOworCQltcGM4ODVhZHNfc2NjX3BoeV9pbml0KGZwaS0+cGh5X2FkZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorICAgIAkgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkciRGV2aWNlICVzIGlzIG5vdCBzdXBwb3J0ZWQhXG4iLCBwZGV2LT5uYW1lKTsKKwkgICAgICAgIHJldHVybjsKKwl9CisKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGZwaTsKKwlmcGktPmZzX25vID0gZnNfbm87CisKKwllID0gKHVuc2lnbmVkIGNoYXIgKikmYmQtPmJpX2VuZXRhZGRyOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWZwaS0+bWFjYWRkcltpXSA9ICplKys7CisKKwlmcGktPm1hY2FkZHJbNSAtIHBkZXYtPmlkXSsrOworCit9CisKK3N0YXRpYyB2b2lkIG1wYzg4NWFkc19maXh1cF9mZWNfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQkgICBpbnQgaWR4KQoreworCS8qIFRoaXMgaXMgZm9yIEZFQyBkZXZpY2VzIG9ubHkgKi8KKwlpZiAoIXBkZXYgfHwgIXBkZXYtPm5hbWUgfHwgKCFzdHJzdHIocGRldi0+bmFtZSwgImZzbC1jcG0tZmVjIikpKQorCQlyZXR1cm47CisJbXBjODg1YWRzX2ZpeHVwX2VuZXRfcGRhdGEocGRldiwgZnNpZF9mZWMxICsgcGRldi0+aWQgLSAxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1wYzg4NWFkc19maXh1cF9zY2NfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQkJICBpbnQgaWR4KQoreworCS8qIFRoaXMgaXMgZm9yIFNDQyBkZXZpY2VzIG9ubHkgKi8KKwlpZiAoIXBkZXYgfHwgIXBkZXYtPm5hbWUgfHwgKCFzdHJzdHIocGRldi0+bmFtZSwgImZzbC1jcG0tc2NjIikpKQorCQlyZXR1cm47CisKKwltcGM4ODVhZHNfZml4dXBfZW5ldF9wZGF0YShwZGV2LCBmc2lkX3NjYzEgKyBwZGV2LT5pZCAtIDEpOworfQorCisvKiBTQ0MgZXRoZXJuZXQgY29udHJvbGxlciBkb2VzIG5vdCBoYXZlIE1JSSBtYW5hZ2VtZW50IGNoYW5uZWwuIEZFQzEgTUlJCisgKiBjaGFubmVsIGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgMTBNYml0IFBIWS4KKyAqLworCisjZGVmaW5lIE1JSV9FQ05UUkxfUElOTVVYICAgICAgICAweDQKKyNkZWZpbmUgRkVDX0VDTlRSTF9QSU5NVVggICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRkVDX1JDTlRSTF9NSUlfTU9ERSAgICAgICAgMHgwMDAwMDAwNAorCisvKiBNYWtlIE1JSSByZWFkL3dyaXRlIGNvbW1hbmRzLgorICovCisjZGVmaW5lIG1rX21paV93cml0ZShSRUcsIFZBTCwgUEhZX0FERFIpICAgICgweDUwMDIwMDAwIHwgKCgoUkVHKSAmIDB4MWYpIDw8IDE4KSB8IFwKKyAgICAgICAgICAgICAgICAoKFZBTCkgJiAweGZmZmYpIHwgKChQSFlfQUREUikgPDwgMjMpKQorCitzdGF0aWMgdm9pZCBtcGM4ODVhZHNfc2NjX3BoeV9pbml0KGNoYXIgcGh5X2FkZHIpCit7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW1tYXA7CisJdm9sYXRpbGUgZmVjX3QgKmZlY3A7CisJYmRfdCAqYmQ7CisKKwliZCA9IChiZF90ICopIF9fcmVzOworCWltbWFwID0gKGltbWFwX3QgKikgSU1BUF9BRERSOwkvKiBwb2ludGVyIHRvIGludGVybmFsIHJlZ2lzdGVycyAqLworCWZlY3AgPSAmKGltbWFwLT5pbV9jcG0uY3BfZmVjKTsKKworCS8qIEVuYWJsZSBNSUkgcGlucyBvZiB0aGUgRkVDMQorCSAqLworCXNldGJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRwYXIsIDB4MDA4MCk7CisJY2xyYml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGRpciwgMHgwMDgwKTsKKwkvKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKKwkgKi8KKwlvdXRfYmUzMigmZmVjcC0+ZmVjX21paV9zcGVlZCwKKwkJICgoKChiZC0+YmlfaW50ZnJlcSArIDQ5OTk5OTkpIC8gMjUwMDAwMCkgLyAyKSAmIDB4M0YpIDw8IDEpOworCisJLyogRW5hYmxlIEZFQyBwaW4gTVVYCisJICovCisJc2V0Yml0czMyKCZmZWNwLT5mZWNfZWNudHJsLCBNSUlfRUNOVFJMX1BJTk1VWCk7CisJc2V0Yml0czMyKCZmZWNwLT5mZWNfcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CisKKwlvdXRfYmUzMigmZmVjcC0+ZmVjX21paV9kYXRhLAorCQkgbWtfbWlpX3dyaXRlKE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIHBoeV9hZGRyKSk7CisJdWRlbGF5KDEwMCk7CisJb3V0X2JlMzIoJmZlY3AtPmZlY19taWlfZGF0YSwKKwkJIG1rX21paV93cml0ZShNSUlfQURWRVJUSVNFLAorCQkJICAgICAgQURWRVJUSVNFXzEwSEFMRiB8IEFEVkVSVElTRV9DU01BLCBwaHlfYWRkcikpOworCXVkZWxheSgxMDApOworCisJLyogRGlzYWJsZSBGRUMgTUlJIHNldHRpbmdzCisJICovCisJY2xyYml0czMyKCZmZWNwLT5mZWNfZWNudHJsLCBNSUlfRUNOVFJMX1BJTk1VWCk7CisJY2xyYml0czMyKCZmZWNwLT5mZWNfcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CisJb3V0X2JlMzIoJmZlY3AtPmZlY19taWlfc3BlZWQsIDApOworfQorCitzdGF0aWMgaW50IG1wYzg4NWFkc19wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQoreworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9ub3RpZnlfZGV2X21hcCBkZXZfbWFwW10gPSB7CisJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWNwbS1mZWMiLAorCQkJLnJ0biA9IG1wYzg4NWFkc19maXh1cF9mZWNfZW5ldF9wZGF0YSwKKwkJfSwKKwkJeworCQkJLmJ1c19pZCA9ICJmc2wtY3BtLXNjYyIsCisJCQkucnRuID0gbXBjODg1YWRzX2ZpeHVwX3NjY19lbmV0X3BkYXRhLAorCQl9LAorCQl7CisJCQkuYnVzX2lkID0gTlVMTAorCQl9CisJfTsKKworCXBsYXRmb3JtX25vdGlmeV9tYXAoZGV2X21hcCxkZXYpOworCit9CisKK2ludCBfX2luaXQgbXBjODg1YWRzX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9OT1RJQ0UgIm1wYzg4NWFkczogSW5pdFxuIik7CisKKwlwbGF0Zm9ybV9ub3RpZnkgPSBtcGM4ODVhZHNfcGxhdGZvcm1fbm90aWZ5OworCisJcHBjX3N5c19kZXZpY2VfaW5pdGZ1bmMoKTsKKwlwcGNfc3lzX2RldmljZV9kaXNhYmxlX2FsbCgpOworCisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fRkVDMSk7CisKKyNpZmRlZiBDT05GSUdfTVBDOHh4X1NFQ09ORF9FVEhfU0NDMworCXBwY19zeXNfZGV2aWNlX2VuYWJsZShNUEM4eHhfQ1BNX1NDQzEpOworCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTVBDOHh4X1NFQ09ORF9FVEhfRkVDMgorCXBwY19zeXNfZGV2aWNlX2VuYWJsZShNUEM4eHhfQ1BNX0ZFQzIpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChtcGM4ODVhZHNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXZtZTUxMDAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCmluZGV4IDEwOGViMTguLmM3MTdjZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9tdm1lNTEwMC5jCi0gKgogICogQm9hcmQgc2V0dXAgcm91dGluZXMgZm9yIHRoZSBNb3Rvcm9sYSBNVk1FNTEwMC4KICAqCiAgKiBBdXRob3I6IE1hdHQgUG9ydGVyIDxtcG9ydGVyQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNC5oIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BhbDQuaAppbmRleCA2NDFhMTFhLi44NTY5YzQyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wYWw0LmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL3BhbDQuaAotICoKICAqIERlZmluaXRpb25zIGZvciBTQlMgUGFsb21hciBJViBib2FyZAogICoKICAqIEF1dGhvcjogRGFuIENveApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BhbDRfcGNpLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9wY2kuYwppbmRleCBjM2IxYjc1Li5kODFhZTFjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9wY2kuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9wY2kuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9wY2kuYwotICoKICAqIFBDSSBzdXBwb3J0IGZvciBTQlMgUGFsb21hciBJVgogICoKICAqIEF1dGhvcjogRGFuIENveApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BhbDRfc2VyaWFsLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9zZXJpYWwuaAppbmRleCBhNzE1YzY2Li5hNzUzNDMyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9zZXJpYWwuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9zZXJpYWwuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9zZXJpYWwuaAotICoKICAqIERlZmluaXRpb25zIGZvciBTQlMgUGFsb21hcklWIHNlcmlhbCBzdXBwb3J0CiAgKgogICogQXV0aG9yOiBEYW4gQ294CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BhbDRfc2V0dXAuYwppbmRleCBmOTNhM2Y4Li4zYzNkODgxIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcGFsNF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wYWw0X3NldHVwLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL3BhbDRfc2V0dXAuYwotICoKICAqIEJvYXJkIHNldHVwIHJvdXRpbmVzIGZvciB0aGUgU0JTIFBhbG9tYXJJVi4KICAqCiAgKiBBdXRob3I6IERhbiBDb3gKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wb3dlcnBtYzI1MC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3Bvd2VycG1jMjUwLmMKaW5kZXggZTZiNTIwZS4uYzNhODZiZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3Bvd2VycG1jMjUwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3Bvd2VycG1jMjUwLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL3Bvd2VycG1jMjUwLmMKLSAqCiAgKiBCb2FyZCBzZXR1cCByb3V0aW5lcyBmb3IgRm9yY2UgUG93ZXJQTUMtMjUwIFByb2Nlc3NvciBQTUMKICAqCiAgKiBBdXRob3I6IFRyb3kgQmVuamVnZXJkZXMgPHRiZW5qZWdlcmRlc0BtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BwbHVzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuYwppbmRleCAyMmJkNDBjLi5kZTI3NjFlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuYwotICoKICAqIEJvYXJkIGFuZCBQQ0kgc2V0dXAgcm91dGluZXMgZm9yIE1DRyBQb3dlclBsdXMKICAqCiAgKiBBdXRob3I6IFJhbmR5IFZpbnNvbiA8cnZpbnNvbkBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BwbHVzLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuaAppbmRleCA5MGYwY2IyLi5hMDdjYmJkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuaAorKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvcHBsdXMuaAotICoKICAqIERlZmluaXRpb25zIGZvciBNb3Rvcm9sYSBNQ0cgRmFsY29uL1JhdmVuICYgSEFXSyBOb3J0aCBCcmlkZ2UgJiBNZW1vcnkgY3Rsci4KICAqCiAgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXJpbmNsdWRlL2FzbS1wcGMvaGF3ay5oCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzLmMKaW5kZXggNzFjOWZjYS4uMzM2NWZkNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BxMmFkcy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzLmMKLSAqCiAgKiBQUTJBRFMgcGxhdGZvcm0gc3VwcG9ydAogICoKICAqIEF1dGhvcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHMuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHMuaAppbmRleCAwNjdkOWE1Li42YjI2ZGQzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BxMmFkcy5oCkBAIC0xMyw2ICsxMywxMCBAQAogCiAjaW5jbHVkZSA8YXNtL3BwY2Jvb3QuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX0FEUzgyNzIpCisjZGVmaW5lIEJPQVJEX0NISVBfTkFNRSAiODI3MiIKKyNlbmRpZgorCiAvKiBNZW1vcnkgbWFwIGlzIGNvbmZpZ3VyZWQgYnkgdGhlIFBST00gc3RhcnR1cC4KICAqIFdlIGp1c3QgbWFwIGEgZmV3IHRoaW5ncyB3ZSBuZWVkLiAgVGhlIENTUiBpcyBhY3R1YWxseSA0IGJ5dGUtd2lkZQogICogcmVnaXN0ZXJzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFzIDgtLCAxNi0sIG9yIDMyLWJpdCB2YWx1ZXMuCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzX3BkLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzX3BkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxNGE0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHNfcGQuaApAQCAtMCwwICsxLDExNCBAQAorI2lmbmRlZiBfX1BRMkFEU19QRF9ICisjZGVmaW5lIF9fUFEyQURTX1BEX0gKKy8qCisgKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODJ4eC9wcTJhZHNfcGQuaAorICoKKyAqIFNvbWUgZGVmaW5lcyBmb3IgTVBDODJ4eCBib2FyZC1zcGVjaWZpYyBQbGF0Zm9ybURldmljZSBkZXNjcmlwdGlvbnMKKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvKiBGQ0MxIENsb2NrIFNvdXJjZSBDb25maWd1cmF0aW9uLiAgVGhlc2UgY2FuIGJlIHJlZGVmaW5lZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMgZmlsZS4KKyAgIENhbiBvbmx5IGNob29zZSBmcm9tIENMSzktMTIgKi8KKworI2RlZmluZSBGMV9SWENMSwkxMQorI2RlZmluZSBGMV9UWENMSwkxMAorCisvKiBGQ0MyIENsb2NrIFNvdXJjZSBDb25maWd1cmF0aW9uLiAgVGhlc2UgY2FuIGJlIHJlZGVmaW5lZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMgZmlsZS4KKyAgIENhbiBvbmx5IGNob29zZSBmcm9tIENMSzEzLTE2ICovCisjZGVmaW5lIEYyX1JYQ0xLCTE1CisjZGVmaW5lIEYyX1RYQ0xLCTE2CisKKy8qIEZDQzMgQ2xvY2sgU291cmNlIENvbmZpZ3VyYXRpb24uICBUaGVzZSBjYW4gYmUgcmVkZWZpbmVkIGluIHRoZSBib2FyZCBzcGVjaWZpYyBmaWxlLgorICAgQ2FuIG9ubHkgY2hvb3NlIGZyb20gQ0xLMTMtMTYgKi8KKyNkZWZpbmUgRjNfUlhDTEsJMTMKKyNkZWZpbmUgRjNfVFhDTEsJMTQKKworLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZXMgcmVnaXN0ZXIgY29uZmlndXJhdGlvbnMgKi8KKyNkZWZpbmUgUENfQ0xLKHgpCSgodWludCkoMTw8KHgtMSkpKQkvKiBGQ0MgQ0xLIEkvTyBwb3J0cyAqLworCisjZGVmaW5lIENNWEZDUl9SRjFDUyh4KQkoKHVpbnQpKCh4LTUpPDwyNykpCS8qIEZDQzEgUmVjZWl2ZSBDbG9jayBTb3VyY2UgKi8KKyNkZWZpbmUgQ01YRkNSX1RGMUNTKHgpCSgodWludCkoKHgtNSk8PDI0KSkJLyogRkNDMSBUcmFuc21pdCBDbG9jayBTb3VyY2UgKi8KKyNkZWZpbmUgQ01YRkNSX1JGMkNTKHgpCSgodWludCkoKHgtOSk8PDE5KSkJLyogRkNDMiBSZWNlaXZlIENsb2NrIFNvdXJjZSAqLworI2RlZmluZSBDTVhGQ1JfVEYyQ1MoeCkgKCh1aW50KSgoeC05KTw8MTYpKQkvKiBGQ0MyIFRyYW5zbWl0IENsb2NrIFNvdXJjZSAqLworI2RlZmluZSBDTVhGQ1JfUkYzQ1MoeCkJKCh1aW50KSgoeC05KTw8MTEpKQkvKiBGQ0MzIFJlY2VpdmUgQ2xvY2sgU291cmNlICovCisjZGVmaW5lIENNWEZDUl9URjNDUyh4KSAoKHVpbnQpKCh4LTkpPDw4KSkJLyogRkNDMyBUcmFuc21pdCBDbG9jayBTb3VyY2UgKi8KKworI2RlZmluZSBQQ19GMVJYQ0xLCVBDX0NMSyhGMV9SWENMSykKKyNkZWZpbmUgUENfRjFUWENMSwlQQ19DTEsoRjFfVFhDTEspCisjZGVmaW5lIENNWDFfQ0xLX1JPVVRFCShDTVhGQ1JfUkYxQ1MoRjFfUlhDTEspIHwgQ01YRkNSX1RGMUNTKEYxX1RYQ0xLKSkKKyNkZWZpbmUgQ01YMV9DTEtfTUFTSwkoKHVpbnQpMHhmZjAwMDAwMCkKKworI2RlZmluZSBQQ19GMlJYQ0xLCVBDX0NMSyhGMl9SWENMSykKKyNkZWZpbmUgUENfRjJUWENMSwlQQ19DTEsoRjJfVFhDTEspCisjZGVmaW5lIENNWDJfQ0xLX1JPVVRFCShDTVhGQ1JfUkYyQ1MoRjJfUlhDTEspIHwgQ01YRkNSX1RGMkNTKEYyX1RYQ0xLKSkKKyNkZWZpbmUgQ01YMl9DTEtfTUFTSwkoKHVpbnQpMHgwMGZmMDAwMCkKKworI2RlZmluZSBQQ19GM1JYQ0xLCVBDX0NMSyhGM19SWENMSykKKyNkZWZpbmUgUENfRjNUWENMSwlQQ19DTEsoRjNfVFhDTEspCisjZGVmaW5lIENNWDNfQ0xLX1JPVVRFCShDTVhGQ1JfUkYzQ1MoRjNfUlhDTEspIHwgQ01YRkNSX1RGM0NTKEYzX1RYQ0xLKSkKKyNkZWZpbmUgQ01YM19DTEtfTUFTSwkoKHVpbnQpMHgwMDAwZmYwMCkKKworLyogSS9PIFBpbiBhc3NpZ25tZW50IGZvciBGQ0MxLiAgSSBkb24ndCB5ZXQga25vdyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcywKKyAqIGJ1dCB0aGVyZSBpcyBsaXR0bGUgdmFyaWF0aW9uIGFtb25nIHRoZSBjaG9pY2VzLgorICovCisjZGVmaW5lIFBBMV9DT0wJCTB4MDAwMDAwMDFVCisjZGVmaW5lIFBBMV9DUlMJCTB4MDAwMDAwMDJVCisjZGVmaW5lIFBBMV9UWEVSCTB4MDAwMDAwMDRVCisjZGVmaW5lIFBBMV9UWEVOCTB4MDAwMDAwMDhVCisjZGVmaW5lIFBBMV9SWERWCTB4MDAwMDAwMTBVCisjZGVmaW5lIFBBMV9SWEVSCTB4MDAwMDAwMjBVCisjZGVmaW5lIFBBMV9UWERBVAkweDAwMDAzYzAwVQorI2RlZmluZSBQQTFfUlhEQVQJMHgwMDAzYzAwMFUKKyNkZWZpbmUgUEExX1BTT1JBMAkoUEExX1JYREFUIHwgUEExX1RYREFUKQorI2RlZmluZSBQQTFfUFNPUkExCShQQTFfQ09MIHwgUEExX0NSUyB8IFBBMV9UWEVSIHwgUEExX1RYRU4gfCBcCisJCVBBMV9SWERWIHwgUEExX1JYRVIpCisjZGVmaW5lIFBBMV9ESVJBMAkoUEExX1JYREFUIHwgUEExX0NSUyB8IFBBMV9DT0wgfCBQQTFfUlhFUiB8IFBBMV9SWERWKQorI2RlZmluZSBQQTFfRElSQTEJKFBBMV9UWERBVCB8IFBBMV9UWEVOIHwgUEExX1RYRVIpCisKKworLyogSS9PIFBpbiBhc3NpZ25tZW50IGZvciBGQ0MyLiAgSSBkb24ndCB5ZXQga25vdyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcywKKyAqIGJ1dCB0aGVyZSBpcyBsaXR0bGUgdmFyaWF0aW9uIGFtb25nIHRoZSBjaG9pY2VzLgorICovCisjZGVmaW5lIFBCMl9UWEVSCTB4MDAwMDAwMDFVCisjZGVmaW5lIFBCMl9SWERWCTB4MDAwMDAwMDJVCisjZGVmaW5lIFBCMl9UWEVOCTB4MDAwMDAwMDRVCisjZGVmaW5lIFBCMl9SWEVSCTB4MDAwMDAwMDhVCisjZGVmaW5lIFBCMl9DT0wJCTB4MDAwMDAwMTBVCisjZGVmaW5lIFBCMl9DUlMJCTB4MDAwMDAwMjBVCisjZGVmaW5lIFBCMl9UWERBVAkweDAwMDAwM2MwVQorI2RlZmluZSBQQjJfUlhEQVQJMHgwMDAwM2MwMFUKKyNkZWZpbmUgUEIyX1BTT1JCMAkoUEIyX1JYREFUIHwgUEIyX1RYREFUIHwgUEIyX0NSUyB8IFBCMl9DT0wgfCBcCisJCVBCMl9SWEVSIHwgUEIyX1JYRFYgfCBQQjJfVFhFUikKKyNkZWZpbmUgUEIyX1BTT1JCMQkoUEIyX1RYRU4pCisjZGVmaW5lIFBCMl9ESVJCMAkoUEIyX1JYREFUIHwgUEIyX0NSUyB8IFBCMl9DT0wgfCBQQjJfUlhFUiB8IFBCMl9SWERWKQorI2RlZmluZSBQQjJfRElSQjEJKFBCMl9UWERBVCB8IFBCMl9UWEVOIHwgUEIyX1RYRVIpCisKKworLyogSS9PIFBpbiBhc3NpZ25tZW50IGZvciBGQ0MzLiAgSSBkb24ndCB5ZXQga25vdyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcywKKyAqIGJ1dCB0aGVyZSBpcyBsaXR0bGUgdmFyaWF0aW9uIGFtb25nIHRoZSBjaG9pY2VzLgorICovCisjZGVmaW5lIFBCM19SWERWCTB4MDAwMDQwMDBVCisjZGVmaW5lIFBCM19SWEVSCTB4MDAwMDgwMDBVCisjZGVmaW5lIFBCM19UWEVSCTB4MDAwMTAwMDBVCisjZGVmaW5lIFBCM19UWEVOCTB4MDAwMjAwMDBVCisjZGVmaW5lIFBCM19DT0wJCTB4MDAwNDAwMDBVCisjZGVmaW5lIFBCM19DUlMJCTB4MDAwODAwMDBVCisjZGVmaW5lIFBCM19UWERBVAkweDBmMDAwMDAwVQorI2RlZmluZSBQQjNfUlhEQVQJMHgwMGYwMDAwMFUKKyNkZWZpbmUgUEIzX1BTT1JCMAkoUEIzX1JYREFUIHwgUEIzX1RYREFUIHwgUEIzX0NSUyB8IFBCM19DT0wgfCBcCisJCVBCM19SWEVSIHwgUEIzX1JYRFYgfCBQQjNfVFhFUiB8IFBCM19UWEVOKQorI2RlZmluZSBQQjNfUFNPUkIxCTAKKyNkZWZpbmUgUEIzX0RJUkIwCShQQjNfUlhEQVQgfCBQQjNfQ1JTIHwgUEIzX0NPTCB8IFBCM19SWEVSIHwgUEIzX1JYRFYpCisjZGVmaW5lIFBCM19ESVJCMQkoUEIzX1RYREFUIHwgUEIzX1RYRU4gfCBQQjNfVFhFUikKKworI2RlZmluZSBGQ0NfTUVNX09GRlNFVCh4KSAoQ1BNX0ZDQ19TUEVDSUFMX0JBU0UgKyAoeCoxMjgpKQorI2RlZmluZSBGQ0MxX01FTV9PRkZTRVQgRkNDX01FTV9PRkZTRVQoMCkKKyNkZWZpbmUgRkNDMl9NRU1fT0ZGU0VUIEZDQ19NRU1fT0ZGU0VUKDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMKaW5kZXggZDA2NTM1OC4uYTBmYzYyOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9wbGF0Zm9ybXMvc2V0dXAuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKiAgQWRhcHRlZCBmcm9tICdhbHBoYScgdmVyc2lvbiBieSBHYXJ5IFRob21hcwogICogIE1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIChjb3J0QGNzLm5tdC5lZHUpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM3NTAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCmluZGV4IDBiYjE0YTUuLmNkZDljZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9wcnBtYzc1MF9zZXR1cC5jCi0gKgogICogQm9hcmQgc2V0dXAgcm91dGluZXMgZm9yIE1vdG9yb2xhIFByUE1DNzUwCiAgKgogICogQXV0aG9yOiBNYXR0IFBvcnRlciA8bXBvcnRlckBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BycG1jODAwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYwppbmRleCBkZTdiYWVmLi5lNDU5YTE5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvcHJwbWM4MDAuYwotICoKICAqIEF1dGhvcjogRGFsZSBGYXJuc3dvcnRoIDxkYWxlLmZhcm5zd29ydGhAbXZpc3RhLmNvbT4KICAqCiAgKiAyMDAxLTIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKaW5kZXggODcyYzBhMy4uYmMyNmI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL3JhZHN0b25lX3BwYzdkLmMKLSAqCiAgKiBCb2FyZCBzZXR1cCByb3V0aW5lcyBmb3IgdGhlIFJhZHN0b25lIFBQQzdEIGJvYXJkcy4KICAqCiAgKiBBdXRob3I6IEphbWVzIENoYXBtYW4gPGpjaGFwbWFuQGthdGFsaXguY29tPgpAQCAtNjg1LDExICs2ODMsMTAgQEAKIAogCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYgKHBkYXRhID09IE5VTEwpIHsKLQkJcGRhdGEgPSBrbWFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKwkJcGRhdGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHBkYXRhID09IE5VTEwpCiAJCQlyZXR1cm47CiAKLQkJbWVtc2V0KHBkYXRhLCAwLCBzaXplb2YoKnBkYXRhKSk7CiAJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7CiAJfQogCkBAIC03MTIsNyArNzA5LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBwcGM3ZF9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBwcGM3ZF9wbGF0Zm9ybV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0YXRpYyBzdHJ1Y3QgewogCQljaGFyICpidXNfaWQ7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcmFkc3RvbmVfcHBjN2QuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5oCmluZGV4IDkzODM3NTUuLjJiYjA5M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9yYWRzdG9uZV9wcGM3ZC5oCi0gKgogICogQm9hcmQgZGVmaW5pdGlvbnMgZm9yIHRoZSBSYWRzdG9uZSBQUEM3RCBib2FyZHMuCiAgKgogICogQXV0aG9yOiBKYW1lcyBDaGFwbWFuIDxqY2hhcG1hbkBrYXRhbGl4LmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYwppbmRleCA5ZWVlZDM1Li42ZGM0NTlkZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50X3NldHVwLmMKLSAqCiAgKiBCb2FyZCBzZXR1cCByb3V0aW5lcyBmb3IgdGhlIE1vdG9yb2xhIFNQUyBTYW5kcG9pbnQgVGVzdCBQbGF0Zm9ybS4KICAqCiAgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuaAppbmRleCBmNGU5ODJjLi4zYjY0ZTY0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvc2FuZHBvaW50LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NhbmRwb2ludC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9zYW5kcG9pbnQuaAotICoKICAqIERlZmluaXRpb25zIGZvciBNb3Rvcm9sYSBTUFMgU2FuZHBvaW50IFRlc3QgUGxhdGZvcm0KICAqCiAgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYmM4Mnh4LmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc2JjODJ4eC5jCmluZGV4IDc0YzlmZjcuLjg2NjgwN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9zYmM4Mnh4LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3NiYzgyeHguYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvc2JjODJ4eC5jCi0gKgogICogU0JDODJYWCBwbGF0Zm9ybSBzdXBwb3J0CiAgKgogICogQXV0aG9yOiBHdXkgU3RyZWV0ZXIgPHN0cmVldGVyQHJlZGhhdC5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvc3BydWNlLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvc3BydWNlLmMKaW5kZXggNjllMWRlNy4uMzc4M2RlYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3NwcnVjZS5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9zcHJ1Y2UuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvc3BydWNlLmMKLSAqCiAgKiBCb2FyZCBhbmQgUENJIHNldHVwIHJvdXRpbmVzIGZvciBJQk0gU3BydWNlCiAgKgogICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlIDxzb3VyY2VAbXZpc3RhLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy90cW04MjYwX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvdHFtODI2MF9zZXR1cC5jCmluZGV4IDM0MDkxMzkuLmI3NjYzMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy90cW04MjYwX3NldHVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3RxbTgyNjBfc2V0dXAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvdHFtODI2MF9zZXR1cC5jCi0gKgogICogVFFNODI2MCBwbGF0Zm9ybSBzdXBwb3J0CiAgKgogICogQXV0aG9yOiBBbGxlbiBDdXJ0aXMgPGFjdXJ0aXNAb256LmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZSBiL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZQppbmRleCAxNTlkY2Q5Li41Y2I2MmM2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlCkBAIC0xNyw4ICsxNyw4IEBACiBvYmotJChDT05GSUdfNDQwU1ApCQkrPSBpYm00NDBneF9jb21tb24ubyBpYm00NDBzcF9jb21tb24ubwogb2JqLSQoQ09ORklHXzQ0MFNQRSkJCSs9IGlibTQ0MGd4X2NvbW1vbi5vIGlibTQ0MHNwX2NvbW1vbi5vIHBwYzQ0MHNwZV9wY2llLm8KIGlmZXEgKCQoQ09ORklHXzR4eCkseSkKLWlmZXEgKCQoQ09ORklHX1ZJUlRFWF9JSV9QUk8pLHkpCi1vYmotJChDT05GSUdfNDB4KQkJKz0geGlsaW54X3BpYy5vCitpZmVxICgkKENPTkZJR19YSUxJTlhfVklSVEVYKSx5KQorb2JqLSQoQ09ORklHXzQweCkJCSs9IHhpbGlueF9waWMubyBwcGNfc3lzLm8KIGVsc2UKIGlmZXEgKCQoQ09ORklHXzQwMykseSkKIG9iai0kKENPTkZJR180MHgpCQkrPSBwcGM0MDNfcGljLm8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9jcGM3MDAuaCBiL2FyY2gvcHBjL3N5c2xpYi9jcGM3MDAuaAppbmRleCBmMmMwMDI1Li4wYThhNWQ4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvY3BjNzAwLmgKKysrIGIvYXJjaC9wcGMvc3lzbGliL2NwYzcwMC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9jcGM3MDAuaAotICoKICAqIEhlYWRlciBmaWxlIGZvciBJQk0gQ1BDNzAwIEhvc3QgQnJpZGdlLCBldC4gYWwuCiAgKgogICogQXV0aG9yOiBNYXJrIEEuIEdyZWVyCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvY3BjNzAwX3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL2NwYzcwMF9waWMuYwppbmRleCA3NWZlOGViLi41YWRkMGE5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvY3BjNzAwX3BpYy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9jcGM3MDBfcGljLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL2NwYzcwMF9waWMuYwotICoKICAqIEludGVycnVwdCBjb250cm9sbGVyIHN1cHBvcnQgZm9yIElCTSBTcHJ1Y2UKICAqCiAgKiBBdXRob3JzOiBNYXJrIEdyZWVyLCBNYXR0IFBvcnRlciwgYW5kIEpvaG5uaWUgUGV0ZXJzCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvY3BjNzEwLmggYi9hcmNoL3BwYy9zeXNsaWIvY3BjNzEwLmgKaW5kZXggY2MwYWZkOC4uNTI5OWJmOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2NwYzcxMC5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9jcGM3MTAuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvY3BjNzEwLmgKLSAqCiAgKiBEZWZpbml0aW9ucyBmb3IgdGhlIElCTSBDUEM3MTAgUENJIEhvc3QgQnJpZGdlCiAgKgogICogQXV0aG9yOiBNYXR0IFBvcnRlciA8bXBvcnRlckBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2dlbjU1MC5oIGIvYXJjaC9wcGMvc3lzbGliL2dlbjU1MC5oCmluZGV4IDAzOWQyNDkuLjUyNTRkM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9nZW41NTAuaAorKysgYi9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL2dlbjU1MC5oCi0gKgogICogZ2VuNTUwIHByb3RvdHlwZXMKICAqCiAgKiBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2dlbjU1MF9kYmcuYyBiL2FyY2gvcHBjL3N5c2xpYi9nZW41NTBfZGJnLmMKaW5kZXggOWVmMDExMy4uOWZjZmY3NCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2dlbjU1MF9kYmcuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2RiZy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9nZW41NTBfZGJnLmMKLSAqCiAgKiBBIGxpYnJhcnkgb2YgcG9sbGVkIDE2NTUwIHNlcmlhbCByb3V0aW5lcy4gIFRoZXNlIGFyZSBpbnRlbmRlZCB0bwogICogYmUgdXNlZCB0byBzdXBwb3J0IHByb2dyZXNzIG1lc3NhZ2VzLCB4bW9uLCBrZ2RiLCBldGMuIG9uIGEKICAqIHZhcmlldHkgb2YgcGxhdGZvcm1zLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2dlbjU1MF9rZ2RiLmMgYi9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2tnZGIuYwppbmRleCA3MjM5ZDVkLi44NzQwNzhhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2tnZGIuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2tnZGIuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvZ2VuNTUwX2tnZGIuYwotICoKICAqIEdlbmVyaWMgMTY1NTAga2dkYiBzdXBwb3J0IGludGVuZGVkIHRvIGJlIHVzZWZ1bCBvbiBhIHZhcmlldHkKICAqIG9mIHBsYXRmb3Jtcy4gIFRvIGVuYWJsZSB0aGlzIHN1cHBvcnQsIGl0IGlzIG5lY2Vzc2FyeSB0byBzZXQKICAqIHRoZSBDT05GSUdfR0VONTUwIG9wdGlvbi4gIEFueSB2aXJ0dWFsIG1hcHBpbmcgb2YgdGhlIHNlcmlhbApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2d0NjQyNjBfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvZ3Q2NDI2MF9waWMuYwppbmRleCBmOTdiM2E5Li5kYzNiZDllIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvZ3Q2NDI2MF9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvZ3Q2NDI2MF9waWMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvZ3Q2NDI2MF9waWMuYwotICoKICAqIEludGVycnVwdCBjb250cm9sbGVyIHN1cHBvcnQgZm9yIEdhbGlsZW8ncyBHVDY0MjYwLgogICoKICAqIEF1dGhvcjogQ2hyaXMgWmFua2VsIDxzb3VyY2VAbXZpc3RhLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9oYXJyaWVyLmMgYi9hcmNoL3BwYy9zeXNsaWIvaGFycmllci5jCmluZGV4IGE2YjNmODY0Li5jMTU4M2Y0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaGFycmllci5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9oYXJyaWVyLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL2hhcnJpZXIuYwotICoKICAqIE1vdG9yb2xhIE1DRyBIYXJyaWVyIG5vcnRoYnJpZGdlL21lbW9yeSBjb250cm9sbGVyIHN1cHBvcnQKICAqCiAgKiBBdXRob3I6IERhbGUgRmFybnN3b3J0aApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2hhd2tfY29tbW9uLmMgYi9hcmNoL3BwYy9zeXNsaWIvaGF3a19jb21tb24uYwppbmRleCBhOTkxMWRjLi5jNWJmMTZiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaGF3a19jb21tb24uYworKysgYi9hcmNoL3BwYy9zeXNsaWIvaGF3a19jb21tb24uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvaGF3a19jb21tb24uYwotICoKICAqIENvbW1vbiBNb3Rvcm9sYSBQb3dlclBsdXMgUGxhdGZvcm0tLXJlYWxseSBGYWxjb24vUmF2ZW4gb3IgSEFXSy4KICAqCiAgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBncF9jb21tb24uYyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBncF9jb21tb24uYwppbmRleCAwZDZiZTJkLi5mYmFhZTVmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3BfY29tbW9uLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0MGdwX2NvbW1vbi5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9pYm00NDBncF9jb21tb24uYwotICoKICAqIFBQQzQ0MEdQIHN5c3RlbSBsaWJyYXJ5CiAgKgogICogTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAbXZpc3RhLmNvbT4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBncF9jb21tb24uaCBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBncF9jb21tb24uaAppbmRleCBhMDU0ZDgzLi5mNDg1MjlmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3BfY29tbW9uLmgKKysrIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0MGdwX2NvbW1vbi5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2tlcm5lbC9pYm00NDBncF9jb21tb24uaAotICoKICAqIFBQQzQ0MEdQIHN5c3RlbSBsaWJyYXJ5CiAgKgogICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5jIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5jCmluZGV4IGMzNmRiMjcuLmE3ZGQ1NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBneF9jb21tb24uYworKysgYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMva2VybmVsL2libTQ0MGd4X2NvbW1vbi5jCi0gKgogICogUFBDNDQwR1ggc3lzdGVtIGxpYnJhcnkKICAqCiAgKiBFdWdlbmUgU3Vyb3ZlZ2luIDxldWdlbmUuc3Vyb3ZlZ2luQHp1bHR5cy5jb20+IG9yIDxlYnNAZWJzaG9tZS5uZXQ+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmggYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwZ3hfY29tbW9uLmgKaW5kZXggZTczYWEwNC4uYTJhYjlmYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MGd4X2NvbW1vbi5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBneF9jb21tb24uaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9rZXJuZWwvaWJtNDQwZ3hfY29tbW9uLmgKLSAqCiAgKiBQUEM0NDBHWCBzeXN0ZW0gbGlicmFyeQogICoKICAqIEV1Z2VuZSBTdXJvdmVnaW4gPGV1Z2VuZS5zdXJvdmVnaW5AenVsdHlzLmNvbT4gb3IgPGVic0BlYnNob21lLm5ldD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBzcF9jb21tb24uYyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBzcF9jb21tb24uYwppbmRleCBjZGFmZGExLi4yOTNlNDEzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwc3BfY29tbW9uLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0MHNwX2NvbW1vbi5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9pYm00NDBzcF9jb21tb24uYwotICoKICAqIFBQQzQ0MFNQL1BQQzQ0MFNQZSBzeXN0ZW0gbGlicmFyeQogICoKICAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwc3BfY29tbW9uLmggYi9hcmNoL3BwYy9zeXNsaWIvaWJtNDQwc3BfY29tbW9uLmgKaW5kZXggYTIxYTk5MC4uODA3N2JmOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL2libTQ0MHNwX2NvbW1vbi5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NDBzcF9jb21tb24uaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvaWJtNDQwc3BfY29tbW9uLmgKLSAqCiAgKiBQUEM0NDBTUCBzeXN0ZW0gbGlicmFyeQogICoKICAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDR4X2NvbW1vbi5jIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0eF9jb21tb24uYwppbmRleCA3MWRiMTFkLi4xNGE5ODFhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDR4X2NvbW1vbi5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NHhfY29tbW9uLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL2libTQ0eF9jb21tb24uYwotICoKICAqIFBQQzQ0eCBzeXN0ZW0gbGlicmFyeQogICoKICAqIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDR4X2NvbW1vbi5oIGIvYXJjaC9wcGMvc3lzbGliL2libTQ0eF9jb21tb24uaAppbmRleCBiMjVhODk5Li5mMTc5ZGI4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvaWJtNDR4X2NvbW1vbi5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pYm00NHhfY29tbW9uLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMva2VybmVsL2libTQ0eF9jb21tb24uaAotICoKICAqIFBQQzQ0eCBzeXN0ZW0gbGlicmFyeQogICoKICAqIEV1Z2VuZSBTdXJvdmVnaW4gPGV1Z2VuZS5zdXJvdmVnaW5AenVsdHlzLmNvbT4gb3IgPGVic0BlYnNob21lLm5ldD4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9wY2lfZXJyYXR1bTkuYyBiL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9wY2lfZXJyYXR1bTkuYwppbmRleCAxZGM3ZTRlLi45OWU0YmMwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbTgyNjBfcGNpX2VycmF0dW05LmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL204MjYwX3BjaV9lcnJhdHVtOS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4MjYwX3BjaTkuYwotICoKICAqIFdvcmthcm91bmQgZm9yIGRldmljZSBlcnJhdHVtIFBDSSA5LgogICogU2VlIE1vdG9yb2xhJ3MgIlhQQzgyNnhBIEZhbWlseSBEZXZpY2UgRXJyYXRhIFJlZmVyZW5jZS4iCiAgKiBUaGUgZXJyYXR1bSBhcHBsaWVzIHRvIGFsbCA4MjYwIGZhbWlseSBIaXA0IHByb2Nlc3NvcnMuICBJdCBpcyBzY2hlZHVsZWQgCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbTgyNjBfc2V0dXAuYyBiL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9zZXR1cC5jCmluZGV4IDc2YTJhYTQuLmI3YTZjYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9zZXR1cC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9zeXNsaWIvbTgyNjBfc2V0dXAuYwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCiAgKiAgQWRhcHRlZCBmcm9tICdhbHBoYScgdmVyc2lvbiBieSBHYXJ5IFRob21hcwogICogIE1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIChjb3J0QGNzLm5tdC5lZHUpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbTh4eF9zZXR1cC5jIGIvYXJjaC9wcGMvc3lzbGliL204eHhfc2V0dXAuYwppbmRleCA2ODg2MTZkLi5kYWU5YWY3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbTh4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tOHh4X3NldHVwLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5NSAgTGludXMgVG9ydmFsZHMKICAqICBBZGFwdGVkIGZyb20gJ2FscGhhJyB2ZXJzaW9uIGJ5IEdhcnkgVGhvbWFzCiAgKiAgTW9kaWZpZWQgYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkKQEAgLTM0LDYgKzMyLDEzIEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfTVREKSAmJiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkKKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vcmVzaWR1YWwuaD4KQEAgLTQ5LDYgKzU0LDM0IEBACiAKICNpbmNsdWRlICJwcGM4eHhfcGljLmgiCiAKKyNpZmRlZiBDT05GSUdfTVREX1BIWVNNQVAKKyNkZWZpbmUgTVBDOHh4QURTX0JBTktfV0lEVEggNAorI2VuZGlmCisKKyNkZWZpbmUgTVBDOHh4QURTX1VfQk9PVF9TSVpFICAgICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgTVBDOHh4QURTX0ZSRUVfQVJFQV9PRkZTRVQgICAgIE1QQzh4eEFEU19VX0JPT1RfU0laRQorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BBUlRJVElPTlMpCisgLyoKKyAgIE5PVEU6IGJhbmsgd2lkdGggYW5kIGludGVybGVhdmUgcmVsYXRpdmUgdG8gdGhlIGluc3RhbGxlZCBmbGFzaAorICAgc2hvdWxkIGhhdmUgYmVlbiBjaG9zZW4gd2l0aGluIE1URF9DRklfR0VPTUVUUlkgb3B0aW9ucy4KKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG1wYzh4eGFkc19wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJib290bG9hZGVyIiwKKwkJLnNpemUgPSBNUEM4eHhBRFNfVV9CT09UX1NJWkUsCisJCS5vZmZzZXQgPSAwLAorCQkubWFza19mbGFncyAgID0gTVREX1dSSVRFQUJMRSwgIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sIHsKKwkJLm5hbWUgPSAiVXNlciBGUyIsCisJCS5vZmZzZXQgPSBNUEM4eHhBRFNfRlJFRV9BUkVBX09GRlNFVAorCX0KK307CisKKyNkZWZpbmUgbXBjOHh4YWRzX3BhcnRfbnVtIChzaXplb2YgKG1wYzh4eGFkc19wYXJ0aXRpb25zKSAvIHNpemVvZiAobXBjOHh4YWRzX3BhcnRpdGlvbnNbMF0pKQorCisjZW5kaWYKKwogc3RhdGljIGludCBtOHh4X3NldF9ydGNfdGltZSh1bnNpZ25lZCBsb25nIHRpbWUpOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbTh4eF9nZXRfcnRjX3RpbWUodm9pZCk7CiB2b2lkIG04eHhfY2FsaWJyYXRlX2RlY3Iodm9pZCk7CkBAIC03MSw2ICsxMDQsMTAgQEAKIHZvaWQgX19pbml0CiBtOHh4X3NldHVwX2FyY2godm9pZCkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19NVEQpICYmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKQorCWJkX3QgKmJpbmZvID0gKGJkX3QgKilfX3JlczsKKyNlbmRpZgorCiAJLyogUmVzZXQgdGhlIENvbW11bmljYXRpb24gUHJvY2Vzc29yIE1vZHVsZS4KIAkqLwogCW04eHhfY3BtX3Jlc2V0KCk7CkBAIC0xMDYsNiArMTQzLDE3IEBACiAJfQogI2VuZGlmCiAjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19NUEM4NlhBRFMpIHx8IGRlZmluZWQgKENPTkZJR19NUEM4ODVBRFMpCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApCisgICAgICAgcGh5c21hcF9jb25maWd1cmUoYmluZm8tPmJpX2ZsYXNoc3RhcnQsIGJpbmZvLT5iaV9mbGFzaHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QQzh4eEFEU19CQU5LX1dJRFRILCBOVUxMKTsKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKyAgICAgICBwaHlzbWFwX3NldF9wYXJ0aXRpb25zKG1wYzh4eGFkc19wYXJ0aXRpb25zLCBtcGM4eHhhZHNfcGFydF9udW0pOworI2VuZGlmIC8qIENPTkZJR19NVERfUEFSVElUSU9OUyAqLworI2VuZGlmIC8qIENPTkZJR19NVERfUEhZU01BUCAqLworI2VuZGlmCisKIAlib2FyZF9pbml0KCk7CiB9CiAKQEAgLTE0MCw5ICsxODgsMTEgQEAKIGluaXRfaW50ZXJuYWxfcnRjKHZvaWQpCiB7CiAJLyogRGlzYWJsZSB0aGUgUlRDIG9uZSBzZWNvbmQgYW5kIGFsYXJtIGludGVycnVwdHMuICovCi0Jb3V0X2JlMTYoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX3NpdC5zaXRfcnRjc2MsIGluX2JlMTYoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX3NpdC5zaXRfcnRjc2MpICYgfihSVENTQ19TSUUgfCBSVENTQ19BTEUpKTsKKwljbHJiaXRzMTYoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX3NpdC5zaXRfcnRjc2MsIChSVENTQ19TSUUgfCBSVENTQ19BTEUpKTsKKwogCS8qIEVuYWJsZSB0aGUgUlRDICovCi0Jb3V0X2JlMTYoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX3NpdC5zaXRfcnRjc2MsIGluX2JlMTYoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX3NpdC5zaXRfcnRjc2MpIHwgKFJUQ1NDX1JURiB8IFJUQ1NDX1JURSkpOworCXNldGJpdHMxNigmKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fc2l0LnNpdF9ydGNzYywgKFJUQ1NDX1JURiB8IFJUQ1NDX1JURSkpOworCiB9CiAKIC8qIFRoZSBkZWNyZW1lbnRlciBjb3VudHMgYXQgdGhlIHN5c3RlbSAoaW50ZXJuYWwpIGNsb2NrIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5CkBAIC0xNTksOCArMjA5LDcgQEAKIAlvdXRfYmUzMigmKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fY2xrcnN0ay5jYXJrX3NjY3JrLCBLQVBXUl9LRVkpOwogCiAJLyogRm9yY2UgYWxsIDh4eCBwcm9jZXNzb3JzIHRvIHVzZSBkaXZpZGUgYnkgMTYgcHJvY2Vzc29yIGNsb2NrLiAqLwotCW91dF9iZTMyKCYoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9jbGtyc3QuY2FyX3NjY3IsCi0JCWluX2JlMzIoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2Nsa3JzdC5jYXJfc2Njcil8MHgwMjAwMDAwMCk7CisJc2V0Yml0czMyKCYoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9jbGtyc3QuY2FyX3NjY3IsIDB4MDIwMDAwMDApOwogCS8qIFByb2Nlc3NvciBmcmVxdWVuY3kgaXMgTUh6LgogCSAqIFRoZSB2YWx1ZSAnZnAnIGlzIHRoZSBudW1iZXIgb2YgZGVjcmVtZW50ZXIgdGlja3MgcGVyIHNlY29uZC4KIAkgKi8KQEAgLTIzOSw4ICsyODgsOCBAQAogCV9fdm9sYXRpbGVfXyB1bnNpZ25lZCBjaGFyIGR1bW15OwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlvdXRfYmUzMigmKChpbW1hcF90ICopSU1BUF9BRERSKS0+aW1fY2xrcnN0LmNhcl9wbHByY3IsIGluX2JlMzIoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2Nsa3JzdC5jYXJfcGxwcmNyKSB8IDB4MDAwMDAwODApOwogCisJc2V0Yml0czMyKCYoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9jbGtyc3QuY2FyX3BscHJjciwgMHgwMDAwMDA4MCk7CiAJLyogQ2xlYXIgdGhlIE1FIGJpdCBpbiBNU1IgdG8gY2F1c2UgY2hlY2tzdG9wIG9uIG1hY2hpbmUgY2hlY2sKIAkqLwogCW10bXNyKG1mbXNyKCkgJiB+MHgxMDAwKTsKQEAgLTMxMCw4ICszNTksOCBAQAogCWk4MjU5X2luaXQoMCk7CiAKIAkvKiBUaGUgaTgyNTkgY2FzY2FkZSBpbnRlcnJ1cHQgbXVzdCBiZSBsZXZlbCBzZW5zaXRpdmUuICovCi0Jb3V0X2JlMzIoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX3NpdV9jb25mLnNjX3NpZWwsIGluX2JlMzIoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX3NpdV9jb25mLnNjX3NpZWwgJiB+KDB4ODAwMDAwMDAgPj4gSVNBX0JSSURHRV9JTlQpKSk7CiAKKwljbHJiaXRzMzIoJigoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX3NpdV9jb25mLnNjX3NpZWwsICgweDgwMDAwMDAwID4+IElTQV9CUklER0VfSU5UKSk7CiAJaWYgKHNldHVwX2lycShJU0FfQlJJREdFX0lOVCwgJm1ieF9pODI1OV9pcnFhY3Rpb24pKQogCQllbmFibGVfaXJxKElTQV9CUklER0VfSU5UKTsKICNlbmRpZgkvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbTh4eF93ZHQuYyBiL2FyY2gvcHBjL3N5c2xpYi9tOHh4X3dkdC5jCmluZGV4IGRmNmM5NTUuLmFjMTFkN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tOHh4X3dkdC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tOHh4X3dkdC5jCkBAIC00MSw4ICs0MSw3IEBACiAKIAltOHh4X3dkdF9yZXNldCgpOwogCi0Jb3V0X2JlMTYoJmltYXAtPmltX3NpdC5zaXRfcGlzY3IsIGluX2JlMTYoJmltYXAtPmltX3NpdC5zaXRfcGlzY3IpIHwgUElTQ1JfUFMpOwkvKiBjbGVhciBpcnEgKi8KLQorCXNldGJpdHMxNigmaW1hcC0+aW1fc2l0LnNpdF9waXNjciwgUElTQ1JfUFMpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL21wYzEweF9jb21tb24uYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGMxMHhfY29tbW9uLmMKaW5kZXggM2UwMzk3MC4uMmZjN2M0MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzEweF9jb21tb24uYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjMTB4X2NvbW1vbi5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9tcGMxMHhfY29tbW9uLmMKLSAqCiAgKiBDb21tb24gcm91dGluZXMgZm9yIHRoZSBNb3Rvcm9sYSBTUFMgTVBDMTA2LCBNUEMxMDcgYW5kIE1QQzgyNDAgSG9zdCBicmlkZ2UsCiAgKiBNZW0gY3RsciwgRVBJQywgZXRjLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X2RldmljZXMuYwppbmRleCBkYTNjNzRiLi43NDg3NTM5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9kZXZpY2VzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfZGV2aWNlcy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X2RldmljZXMuYwotICoKICAqIEZyZWVzY2FsZSBNUEM1Mnh4IGRldmljZSBkZXNjcmlwdGlvbnMKICAqCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfcGNpLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYwppbmRleCAzMTNjOTZlLi45ZWM1MjVmIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuYwotICoKICAqIFBDSSBjb2RlIGZvciB0aGUgRnJlZXNjYWxlIE1QQzUyeHggZW1iZWRkZWQgQ1BVLgogICoKICAqCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9wY2kuaCBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3BjaS5oCmluZGV4IDA0YjUwOWEuLjc3ZDQ3ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3BjaS5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3BjaS5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3BjaS5oCi0gKgogICogUENJIEluY2x1ZGUgZmlsZSB0aGUgRnJlZXNjYWxlIE1QQzUyeHggZW1iZWRkZWQgY3B1IGNoaXBzCiAgKgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfcGljLmMKaW5kZXggNGM0NDk3ZS4uYzQ0MDZmOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfcGljLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfcGljLmMKLSAqCiAgKiBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIgZnVuY3Rpb25zIGZvciB0aGUgRnJlZXNjYWxlIE1QQzUyeHggCiAgKiBlbWJlZGRlZCBDUFUuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfc2V0dXAuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3NldHVwLmMKaW5kZXggYTRhNGIwMi4uMmVlNDhjZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzUyeHhfc2V0dXAuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9zZXR1cC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3NldHVwLmMKLSAqCiAgKiBDb21tb24gY29kZSBmb3IgdGhlIGJvYXJkcyBiYXNlZCBvbiBGcmVlc2NhbGUgTVBDNTJ4eCBlbWJlZGRlZCBDUFUuCiAgKgogICogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjNTJ4eF9zeXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3N5cy5jCmluZGV4IDlhMGY5MGEuLmI0ZTZmOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3N5cy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3N5cy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9tcGM1Mnh4X3N5cy5jCi0gKgogICogRnJlZXNjYWxlIE1QQzUyeHggc3lzdGVtIGRlc2NyaXB0aW9ucwogICoKICAqCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjODN4eF9kZXZpY2VzLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjODN4eF9kZXZpY2VzLmMKaW5kZXggZjliOTVkZS4uMWFmMmMwMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzgzeHhfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X2RldmljZXMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4X2RldmljZXMuYwotICoKICAqIE1QQzgzeHggRGV2aWNlIGRlc2NyaXB0aW9ucwogICoKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjODN4eF9zeXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X3N5cy5jCmluZGV4IDgyY2YzYWIuLjA0OThhZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X3N5cy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4M3h4X3N5cy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHhfc3lzLmMKLSAqCiAgKiBNUEM4M3h4IFN5c3RlbSBkZXNjcmlwdGlvbnMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL21wYzg1eHhfZGV2aWNlcy5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzg1eHhfZGV2aWNlcy5jCmluZGV4IDAwZTliNmZmLi43NzM1MzM2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzg1eHhfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X2RldmljZXMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RldmljZXMuYwotICoKICAqIE1QQzg1eHggRGV2aWNlIGRlc2NyaXB0aW9ucwogICoKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjODV4eF9zeXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X3N5cy5jCmluZGV4IDM5N2NmYmMuLmQ5NmE5M2RiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjODV4eF9zeXMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXBjODV4eF9zeXMuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X3N5cy5jCi0gKgogICogTVBDODV4eCBTeXN0ZW0gZGVzY3JpcHRpb25zCiAgKgogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMKaW5kZXggOTJkYzk4Yi4uYmQ0MWVkOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL21wYzh4eF9kZXZpY2VzLmMKLSAqCiAgKiBNUEM4eHggRGV2aWNlIGRlc2NyaXB0aW9ucwogICoKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X3N5cy5jIGIvYXJjaC9wcGMvc3lzbGliL21wYzh4eF9zeXMuYwppbmRleCBkM2M2MTc1Li5lZWUyMTMyIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X3N5cy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfc3lzLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvcGxhdGZvcm1zL21wYzh4eF9zeXMuYwotICoKICAqIE1QQzh4eCBTeXN0ZW0gZGVzY3JpcHRpb25zCiAgKgogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tdjY0MzYwX3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL212NjQzNjBfcGljLmMKaW5kZXggNThiMGFhOC4uNWExOTY5NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL212NjQzNjBfcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL212NjQzNjBfcGljLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMva2VybmVsL212NjQzNjBfcGljLmMKLSAqCiAgKiBJbnRlcnJ1cHQgY29udHJvbGxlciBzdXBwb3J0IGZvciBNYXJ2ZWxsJ3MgTVY2NDM2MC4KICAqCiAgKiBBdXRob3I6IFJhYmVlaCBLaG91cnkgPHJhYmVlaEBnYWxpbGVvLmNvLmlsPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL212NjR4NjAuYyBiL2FyY2gvcHBjL3N5c2xpYi9tdjY0eDYwLmMKaW5kZXggMWYwMWI3ZS4uM2IwMzljMyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL212NjR4NjAuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MC5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9tdjY0eDYwLmMKLSAqCiAgKiBDb21tb24gcm91dGluZXMgZm9yIHRoZSBNYXJ2ZWxsL0dhbGlsZW8gRGlzY292ZXJ5IGxpbmUgb2YgaG9zdCBicmlkZ2VzCiAgKiAoZ3Q2NDI2MCwgbXY2NDM2MCwgbXY2NDQ2MCwgLi4uKS4KICAqCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MF9kYmcuYyBiL2FyY2gvcHBjL3N5c2xpYi9tdjY0eDYwX2RiZy5jCmluZGV4IGZhNWIyZTQuLjljZjE4NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tdjY0eDYwX2RiZy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tdjY0eDYwX2RiZy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9tdjY0eDYwX2RiZy5jCi0gKgogICogS0dEQiBhbmQgcHJvZ3Jlc3Mgcm91dGluZXMgZm9yIHRoZSBNYXJ2ZWxsL0dhbGlsZW8gTVY2NHg2MCAoRGlzY292ZXJ5KS4KICAqCiAgKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL212NjR4NjBfd2luLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MF93aW4uYwppbmRleCA1YjgyN2UyLi40YmYxYWQxIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MF93aW4uYworKysgYi9hcmNoL3BwYy9zeXNsaWIvbXY2NHg2MF93aW4uYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvbXY2NHg2MF93aW4uYwotICoKICAqIFRhYmxlcyB3aXRoIGluZm8gb24gaG93IHRvIG1hbmlwdWxhdGUgdGhlIDMyICYgNjQgYml0IHdpbmRvd3Mgb24gdGhlCiAgKiB2YXJpb3VzIHR5cGVzIG9mIE1hcnZlbGwgYnJpZGdlIGNoaXBzLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9vY3AuYyBiL2FyY2gvcHBjL3N5c2xpYi9vY3AuYwppbmRleCAyZmUyOGRlLi5hNGVjYzJlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvb2NwLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL29jcC5jCkBAIC00NTEsMTAgKzQ1MSw5IEBACiAJREJHKCgib2NwOiBvY3BfZHJpdmVyX2luaXQoKS4uLlxuIikpOwogCiAJLyogQWxsb2NhdGUvcmVnaXN0ZXIgcHJpbWFyeSBPQ1AgYnVzICovCi0Jb2NwX2J1cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlvY3BfYnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChvY3BfYnVzID09IE5VTEwpCiAJCXJldHVybiAxOwotCW1lbXNldChvY3BfYnVzLCAwLCBzaXplb2Yoc3RydWN0IGRldmljZSkpOwogCXN0cmNweShvY3BfYnVzLT5idXNfaWQsICJvY3AiKTsKIAogCWJ1c19yZWdpc3Rlcigmb2NwX2J1c190eXBlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYy5jIGIvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljLmMKaW5kZXggODk0Nzc5Ny4uMzhlNWI5MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL2tlcm5lbC9vcGVuX3BpYy5jIC0tIE9wZW5QSUMgSW50ZXJydXB0IEhhbmRsaW5nCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5NyBHZWVydCBVeXR0ZXJob2V2ZW4KICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYzIuYyBiL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpYzIuYwppbmRleCAxYzQwMDQ5Li5iY2JlNDBkIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWMyLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljMi5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYy9rZXJuZWwvb3Blbl9waWMuYyAtLSBPcGVuUElDIEludGVycnVwdCBIYW5kbGluZwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTcgR2VlcnQgVXl0dGVyaG9ldmVuCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWNfZGVmcy5oIGIvYXJjaC9wcGMvc3lzbGliL29wZW5fcGljX2RlZnMuaAppbmRleCA2Yzk0ZTcxLi4zYTI1ZGU3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvb3Blbl9waWNfZGVmcy5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9vcGVuX3BpY19kZWZzLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGFyY2gvcHBjL2tlcm5lbC9vcGVuX3BpY19kZWZzLmggLS0gT3BlblBJQyBkZWZpbml0aW9ucwotICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTcgR2VlcnQgVXl0dGVyaG9ldmVuCiAgKgogICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcGNpX2F1dG8uYyBiL2FyY2gvcHBjL3N5c2xpYi9wY2lfYXV0by5jCmluZGV4IGQ2NDIwN2MuLmVlMjBhODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wY2lfYXV0by5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wY2lfYXV0by5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9wY2lfYXV0by5jCi0gKgogICogUENJIGF1dG9jb25maWd1cmF0aW9uIGxpYnJhcnkKICAqCiAgKiBBdXRob3I6IE1hdHQgUG9ydGVyIDxtcG9ydGVyQG12aXN0YS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X2RtYS5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9kbWEuYwppbmRleCAwNWNjZDU5Li5iNDBiOTZhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X2RtYS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfZG1hLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMva2VybmVsL3BwYzR4eF9kbWEuYwotICoKICAqIElCTSBQUEM0eHggRE1BIGVuZ2luZSBjb3JlIGxpYnJhcnkKICAqCiAgKiBDb3B5cmlnaHQgMjAwMC0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9waWMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfcGljLmMKaW5kZXggYWE0MTY1MS4uZmQ5YWYwZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3BpYy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9wcGM0eHhfcGljLmMKLSAqCiAgKiBJbnRlcnJ1cHQgY29udHJvbGxlciBkcml2ZXIgZm9yIFBvd2VyUEMgNHh4LWJhc2VkIHByb2Nlc3NvcnMuCiAgKgogICogRXVnZW5lIFN1cm92ZWdpbiA8ZXVnZW5lLnN1cm92ZWdpbkB6dWx0eXMuY29tPiBvciA8ZWJzQGVic2hvbWUubmV0PgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9wbS5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9wbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGE0NzkyLi4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM0eHhfcG0uYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBBdXRob3I6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgotICoKLSAqIDIwMDIgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCi0gKgotICogVGhpcyBhbiBhdHRlbXB0IHRvIGdldCBQb3dlciBNYW5hZ2VtZW50IGdvaW5nIGZvciB0aGUgSUJNIDR4eCBwcm9jZXNzb3IuCi0gKiBUaGlzIHdhcyBkZXJpdmVkIGZyb20gdGhlIHBwYzR4eC5fc2V0dXAuYyBmaWxlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KLQotdm9pZCBfX2luaXQKLXBwYzR4eF9wbV9pbml0KHZvaWQpCi17Ci0KLQl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOwotCi0JLyogdHVybiBvZmYgdW51c2VkIGhhcmR3YXJlIHRvIHNhdmUgcG93ZXIgKi8KLSNpZmRlZiBDT05GSUdfNDA1R1AKLQl2YWx1ZSB8PSBDUE1fRENQOwkvKiBDb2RlUGFjayAqLwotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfSUJNX09DUF9HUElPKQotCXZhbHVlIHw9IENQTV9HUElPMDsKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX1BQQzQwNV9JMkNfQURBUCkKLQl2YWx1ZSB8PSBDUE1fSUlDMDsKLSNpZmRlZiBDT05GSUdfU1RCMDN4eHgKLQl2YWx1ZSB8PSBDUE1fSUlDMTsKLSNlbmRpZgotI2VuZGlmCi0KLQotI2lmICFkZWZpbmVkKENPTkZJR180MDVfRE1BKQotCXZhbHVlIHw9IENQTV9ETUE7Ci0jZW5kaWYKLQotCW10ZGNyKERDUk5fQ1BNRlIsIHZhbHVlKTsKLQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZ2RtYS5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZ2RtYS5jCmluZGV4IDlmNzZlOGUuLjI4MGVhMDEwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjNHh4X3NnZG1hLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzR4eF9zZ2RtYS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2tlcm5lbC9wcGM0eHhfc2dkbWEuYwotICoKICAqIElCTSBQUEM0eHggRE1BIGVuZ2luZSBzY2F0dGVyL2dhdGhlciBsaWJyYXJ5CiAgKgogICogQ29weXJpZ2h0IDIwMDItMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4M3h4X3NldHVwLmMgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODN4eF9zZXR1cC5jCmluZGV4IDdiYWRhODIuLjI2YWZkNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4M3h4X3NldHVwLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzgzeHhfc2V0dXAuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvcHBjODN4eF9zZXR1cC5jCi0gKgogICogTVBDODNYWCBjb21tb24gYm9hcmQgY29kZQogICoKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjODN4eF9zZXR1cC5oIGIvYXJjaC9wcGMvc3lzbGliL3BwYzgzeHhfc2V0dXAuaAppbmRleCBhMTIyYTczLi40NzhiMDExIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjODN4eF9zZXR1cC5oCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4M3h4X3NldHVwLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL3BwYzgzeHhfc2V0dXAuaAotICoKICAqIE1QQzgzWFggY29tbW9uIGJvYXJkIGRlZmluaXRpb25zCiAgKgogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X2NvbW1vbi5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfY29tbW9uLmMKaW5kZXggMTlhZDUzNy4uMDE0NWM5NiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfY29tbW9uLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfY29tbW9uLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfY29tbW9uLmMKLSAqCiAgKiBNUEM4NXh4IHN1cHBvcnQgcm91dGluZXMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfY29tbW9uLmggYi9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9jb21tb24uaAppbmRleCA5NGVkZjMyLi4xODI3NDRhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9jb21tb24uaAorKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9jb21tb24uaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9jb21tb24uaAotICoKICAqIE1QQzg1eHggc3VwcG9ydCByb3V0aW5lcwogICoKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5jIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuYwppbmRleCBlNGRkYTQzLi43OWI3MDg5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuYwotICoKICAqIE1QQzg1WFggY29tbW9uIGJvYXJkIGNvZGUKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpAQCAtMjM3LDcgKzIzNSw3IEBACiAJICAgKF9faWxvZzIoTVBDODVYWF9QQ0kyX1VQUEVSX01FTSAtIE1QQzg1WFhfUENJMl9MT1dFUl9NRU0gKyAxKSAtIDEpOwogCiAJLyogU2V0dXAgb3V0Ym91bmQgSU8gd2luZG93cyBAIE1QQzg1WFhfUENJMl9JT19CQVNFICovCi0JcGNpLT5wb3RhcjIgPSAoTVBDODVYWF9QQ0kyX0xPV0VSX0lPID4+IDEyKSAmIDB4MDAwZmZmZmY7OworCXBjaS0+cG90YXIyID0gKE1QQzg1WFhfUENJMl9MT1dFUl9JTyA+PiAxMikgJiAweDAwMGZmZmZmOwogCXBjaS0+cG90ZWFyMiA9IDB4MDAwMDAwMDA7CiAJcGNpLT5wb3diYXIyID0gKE1QQzg1WFhfUENJMl9JT19CQVNFID4+IDEyKSAmIDB4MDAwZmZmZmY7CiAJLyogRW5hYmxlLCBJTyBSL1cgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmggYi9hcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5oCmluZGV4IGUzNDBiMDUuLmY1NWI4MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcGM4NXh4X3NldHVwLmgKKysrIGIvYXJjaC9wcGMvc3lzbGliL3BwYzg1eHhfc2V0dXAuaApAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvcHBjODV4eF9zZXR1cC5oCi0gKgogICogTVBDODVYWCBjb21tb24gYm9hcmQgZGVmaW5pdGlvbnMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BwY19zeXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcGNfc3lzLmMKaW5kZXggYzBiOTNjNC4uNjBjNzI0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BwY19zeXMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHBjX3N5cy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9wcGNfc3lzLmMKLSAqCiAgKiBQUEMgU3lzdGVtIGxpYnJhcnkgZnVuY3Rpb25zCiAgKgogICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KQEAgLTE1LDExICsxMywyMiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8YXNtL3BwY19zeXMuaD4KIAogaW50ICgqcHBjX3N5c19kZXZpY2VfZml4dXApIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogcGRldik7CiAKIHN0YXRpYyBpbnQgcHBjX3N5c19pbml0ZWQ7CitzdGF0aWMgaW50IHBwY19zeXNfZnVuY19pbml0ZWQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcGNfc3lzX2Z1bmNfbmFtZXNbXSA9IHsKKwlbUFBDX1NZU19GVU5DX0RVTU1ZXSA9ICJkdW1teSIsCisJW1BQQ19TWVNfRlVOQ19FVEhdID0gImV0aCIsCisJW1BQQ19TWVNfRlVOQ19VQVJUXSA9ICJ1YXJ0IiwKKwlbUFBDX1NZU19GVU5DX0hMRENdID0gImhsZGMiLAorCVtQUENfU1lTX0ZVTkNfVVNCXSA9ICJ1c2IiLAorCVtQUENfU1lTX0ZVTkNfSVJEQV0gPSAiaXJkYSIsCit9OwogCiB2b2lkIF9faW5pdCBpZGVudGlmeV9wcGNfc3lzX2J5X2lkKHUzMiBpZCkKIHsKQEAgLTM4LDEzICs0NywxMyBAQAogdm9pZCBfX2luaXQgaWRlbnRpZnlfcHBjX3N5c19ieV9uYW1lKGNoYXIgKm5hbWUpCiB7CiAJdW5zaWduZWQgaW50IGkgPSAwOwotCXdoaWxlIChwcGNfc3lzX3NwZWNzW2ldLnBwY19zeXNfbmFtZVswXSkKLQl7CisJd2hpbGUgKHBwY19zeXNfc3BlY3NbaV0ucHBjX3N5c19uYW1lWzBdKSB7CiAJCWlmICghc3RyY21wKHBwY19zeXNfc3BlY3NbaV0ucHBjX3N5c19uYW1lLCBuYW1lKSkKIAkJCWJyZWFrOwogCQlpKys7CiAJfQogCWN1cl9wcGNfc3lzX3NwZWMgPSAmcHBjX3N5c19zcGVjc1tpXTsKKwogCXJldHVybjsKIH0KIApAQCAtMTI4LDYgKzEzNywxNjUgQEAKIAl9CiB9CiAKKy8qIFBsYXRmb3JtLW5vdGlmeSBtYXBwaW5nCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIEJTUCBjb2RlIHRvIGFzc2lnbiBib2FyZC1zcGVjaWZpYyBwbGF0Zm9tLWRpdmljZSBiaXRzCisgKi8KKwordm9pZCBwbGF0Zm9ybV9ub3RpZnlfbWFwKGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9ub3RpZnlfZGV2X21hcCAqbWFwLAorCQkJIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCBsZW4sIGlkeDsKKwljb25zdCBjaGFyICpzOworCisJLyogZG8gbm90aGluZyBpZiBubyBkZXZpY2Ugb3Igbm8gYnVzX2lkICovCisJaWYgKCFkZXYgfHwgIWRldi0+YnVzX2lkKQorCQlyZXR1cm47CisKKwkvKiBjYWxsIHBlciBkZXZpY2UgbWFwICovCisJd2hpbGUgKG1hcC0+YnVzX2lkICE9IE5VTEwpIHsKKwkJaWR4ID0gLTE7CisJCXMgPSBzdHJyY2hyKGRldi0+YnVzX2lkLCAnLicpOworCQlpZiAocyAhPSBOVUxMKQorCQkJaWR4ID0gKGludClzaW1wbGVfc3RydG9sKHMgKyAxLCBOVUxMLCAxMCk7CisJCWVsc2UKKwkJCXMgPSBkZXYtPmJ1c19pZDsKKworCQlsZW4gPSBzIC0gZGV2LT5idXNfaWQ7CisKKwkJaWYgKCFzdHJuY21wKGRldi0+YnVzX2lkLCBtYXAtPmJ1c19pZCwgbGVuKSkgeworCQkJcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJCQltYXAtPnJ0bihwZGV2LCBpZHgpOworCQl9CisJCW1hcCsrOworCX0KK30KKworLyoKKyAgIEZ1bmN0aW9uIGFzc2lnbm1lbnQgc3R1ZmYuCisgSW50ZW5kZWQgdG8gd29yayBhcyBmb2xsb3dzOgorIHRoZSBkZXZpY2UgbmFtZSBkZWZpbmVkIGluIGZvb19kZXZpY2VzLmMgd2lsbCBiZSBjb25jYXRlbmF0ZWQgd2l0aCA6ImZ1bmMiLAorIHdoZXJlIGZ1bmMgaXMgc3RyaW5nIG1hcCBvZiByZXNwZWN0aXZlIGZ1bmN0aW9uIGZyb20gcGxhdGZvbV9kZXZpY2VfZnVuYyBlbnVtCisKKyBUaGUgUFBDX1NZU19GVU5DX0RVTU1ZIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgYXNzaWdubWVudHMsIG1ha2luZyB0aGUgZGV2aWNlIHRvIGFwcGVhcgorIGluIHBsYXRmb3JtIGJ1cyB3aXRoIHVubW9kaWZpZWQgbmFtZS4KKyAqLworCisvKgorICAgSGVyZSB3ZSdsbCByZXBsYWNlIC5uYW1lIHBvaW50ZXJzIHdpdGggZml4ZWQtbGVuZ2h0IHN0cmluZ3MKKyAgIEhlcmVieSwgdGhpcyBzaG91bGQgYmUgY2FsbGVkICpiZWZvcmUqIGFueSBmdW5jIHN0dWZmIHRyaWdnZWRlZC4KKyAqLwordm9pZCBwcGNfc3lzX2RldmljZV9pbml0ZnVuYyh2b2lkKQoreworCWludCBpOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RhdGljIGNoYXIgbmV3X25hbWVzW05VTV9QUENfU1lTX0RFVlNdW0JVU19JRF9TSVpFXTsKKwllbnVtIHBwY19zeXNfZGV2aWNlcyBjdXJfZGV2OworCisJLyogSWYgaW5pdGVkIHlldCwgZG8gbm90aGluZyAqLworCWlmIChwcGNfc3lzX2Z1bmNfaW5pdGVkKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgY3VyX3BwY19zeXNfc3BlYy0+bnVtX2RldmljZXM7IGkrKykgeworCQlpZiAoKGN1cl9kZXYgPSBjdXJfcHBjX3N5c19zcGVjLT5kZXZpY2VfbGlzdFtpXSkgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tjdXJfZGV2XS5uYW1lKSB7CisJCQkvKmJhY2t1cCBuYW1lICovCisJCQluYW1lID0gcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW2N1cl9kZXZdLm5hbWU7CisJCQlzdHJsY3B5KG5ld19uYW1lc1tpXSwgbmFtZSwgQlVTX0lEX1NJWkUpOworCQkJcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW2N1cl9kZXZdLm5hbWUgPSBuZXdfbmFtZXNbaV07CisJCX0KKwl9CisKKwlwcGNfc3lzX2Z1bmNfaW5pdGVkID0gMTsKK30KKworLypUaGUgImVuZ2luZSIgb2YgdGhlIGZ1bmMgc3R1ZmYuIEhlcmUgd2UgZWl0aGVyIGNvbmNhdCBzcGVjaWZpZWQgZnVuY3Rpb24gc3RyaW5nIGRlc2NyaXB0aW9uCisgdG8gdGhlIG5hbWUsIG9yIHJlbW92ZSBpdCBpZiBQUENfU1lTX0ZVTkNfRFVNTVkgcGFyYW1ldGVyIGlzIHBhc3NlZCBoZXJlKi8KK3ZvaWQgcHBjX3N5c19kZXZpY2Vfc2V0ZnVuYyhlbnVtIHBwY19zeXNfZGV2aWNlcyBkZXYsCisJCQkgICAgZW51bSBwbGF0Zm9ybV9kZXZpY2VfZnVuYyBmdW5jKQoreworCWNoYXIgKnM7CisJY2hhciAqbmFtZSA9IChjaGFyICopcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW2Rldl0ubmFtZTsKKwljaGFyIHRtcFtCVVNfSURfU0laRV07CisKKwlpZiAoIXBwY19zeXNfZnVuY19pbml0ZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWx0ZXIgZnVuY3Rpb24gLSBub3QgaW5pdGVkIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocHBjX3N5c19pbml0ZWQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tkZXZdKTsKKwl9CisKKwlpZiAoKHMgPSAoY2hhciAqKXN0cmNocihuYW1lLCAnOicpKSAhPSBOVUxMKSB7CS8qIHJlYXNzaWduICovCisJCS8qIEVpdGhlciBjaGFuZ2UgdGhlIG5hbWUgYWZ0ZXIgJzonIG9yIHJlbW92ZSBmdW5jIG1vZGlmaWNhdGlvbnMgKi8KKwkJaWYgKGZ1bmMgIT0gUFBDX1NZU19GVU5DX0RVTU1ZKQorCQkJc3RybGNweShzICsgMSwgcHBjX3N5c19mdW5jX25hbWVzW2Z1bmNdLCBCVVNfSURfU0laRSk7CisJCWVsc2UKKwkJCSpzID0gMDsKKwl9IGVsc2UgaWYgKGZ1bmMgIT0gUFBDX1NZU19GVU5DX0RVTU1ZKSB7CisJCS8qIGRvIGFzc2lnbm1lbnQgaWYgaXQgaXMgbm90IGp1c3QgImNsZWFyIiAgcmVxdWVzdCAqLworCQlzcHJpbnRmKHRtcCwgIiVzOiVzIiwgbmFtZSwgcHBjX3N5c19mdW5jX25hbWVzW2Z1bmNdKTsKKwkJc3RybGNweShuYW1lLCB0bXAsIEJVU19JRF9TSVpFKTsKKwl9CisKKwlpZiAocHBjX3N5c19pbml0ZWQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbZGV2XSk7CisJfQorfQorCit2b2lkIHBwY19zeXNfZGV2aWNlX2Rpc2FibGUoZW51bSBwcGNfc3lzX2RldmljZXMgZGV2KQoreworCUJVR19PTihjdXJfcHBjX3N5c19zcGVjID09IE5VTEwpOworCisJLypDaGVjayBpZiBpdCBpcyBlbmFibGVkKi8KKwlpZighKGN1cl9wcGNfc3lzX3NwZWMtPmNvbmZpZ1tkZXZdICYgUFBDX1NZU19DT05GSUdfRElTQUJMRUQpKSB7CisJCWlmIChwcGNfc3lzX2luaXRlZCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tkZXZdKTsKKwkJfQorCQljdXJfcHBjX3N5c19zcGVjLT5jb25maWdbZGV2XSB8PSBQUENfU1lTX0NPTkZJR19ESVNBQkxFRDsKKwl9Cit9CisKK3ZvaWQgcHBjX3N5c19kZXZpY2VfZW5hYmxlKGVudW0gcHBjX3N5c19kZXZpY2VzIGRldikKK3sKKwlCVUdfT04oY3VyX3BwY19zeXNfc3BlYyA9PSBOVUxMKTsKKworCS8qQ2hlY2sgaWYgaXQgaXMgZGlzYWJsZWQqLworCWlmKGN1cl9wcGNfc3lzX3NwZWMtPmNvbmZpZ1tkZXZdICYgUFBDX1NZU19DT05GSUdfRElTQUJMRUQpIHsKKwkJaWYgKHBwY19zeXNfaW5pdGVkKSB7CisJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlc1tkZXZdKTsKKwkJfQorCQljdXJfcHBjX3N5c19zcGVjLT5jb25maWdbZGV2XSAmPSB+UFBDX1NZU19DT05GSUdfRElTQUJMRUQ7CisJfQorCit9CisKK3ZvaWQgcHBjX3N5c19kZXZpY2VfZW5hYmxlX2FsbCh2b2lkKQoreworCWVudW0gcHBjX3N5c19kZXZpY2VzIGN1cl9kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3VyX3BwY19zeXNfc3BlYy0+bnVtX2RldmljZXM7IGkrKykgeworCQljdXJfZGV2ID0gY3VyX3BwY19zeXNfc3BlYy0+ZGV2aWNlX2xpc3RbaV07CisJCXBwY19zeXNfZGV2aWNlX2VuYWJsZShjdXJfZGV2KTsKKwl9Cit9CisKK3ZvaWQgcHBjX3N5c19kZXZpY2VfZGlzYWJsZV9hbGwodm9pZCkKK3sKKwllbnVtIHBwY19zeXNfZGV2aWNlcyBjdXJfZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGN1cl9wcGNfc3lzX3NwZWMtPm51bV9kZXZpY2VzOyBpKyspIHsKKwkJY3VyX2RldiA9IGN1cl9wcGNfc3lzX3NwZWMtPmRldmljZV9saXN0W2ldOworCQlwcGNfc3lzX2RldmljZV9kaXNhYmxlKGN1cl9kZXYpOworCX0KK30KKworCiBzdGF0aWMgaW50IF9faW5pdCBwcGNfc3lzX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgZGV2X2lkLCByZXQgPSAwOwpAQCAtMTM2LDcgKzMwNCw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY3VyX3BwY19zeXNfc3BlYy0+bnVtX2RldmljZXM7IGkrKykgewogCQlkZXZfaWQgPSBjdXJfcHBjX3N5c19zcGVjLT5kZXZpY2VfbGlzdFtpXTsKLQkJaWYgKGRldl9pZCAhPSAtMSkgeworCQlpZiAoKGRldl9pZCAhPSAtMSkgJiYKKwkJIShjdXJfcHBjX3N5c19zcGVjLT5jb25maWdbZGV2X2lkXSAmIFBQQ19TWVNfQ09ORklHX0RJU0FCTEVEKSkgewogCQkJaWYgKHBwY19zeXNfZGV2aWNlX2ZpeHVwICE9IE5VTEwpCiAJCQkJcHBjX3N5c19kZXZpY2VfZml4dXAoJnBwY19zeXNfcGxhdGZvcm1fZGV2aWNlcwogCQkJCQkJICAgICBbZGV2X2lkXSk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHEyX2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCmluZGV4IDZmZjNhYWIuLjA2MzZhZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCi0gKgogICogUFEyIERldmljZSBkZXNjcmlwdGlvbnMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfc3lzLmMKaW5kZXggMzZkNmUyMS4uNzVlNjRmMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHEyX3N5cy5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCi0gKgogICogUFEyIFN5c3RlbSBkZXNjcmlwdGlvbnMKICAqCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL3ByZXBfbnZyYW0uYyBiL2FyY2gvcHBjL3N5c2xpYi9wcmVwX252cmFtLmMKaW5kZXggMmM2MzY0ZC4uNDc0ZGNjYiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3ByZXBfbnZyYW0uYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHJlcF9udnJhbS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2tlcm5lbC9wcmVwX252cmFtLmMKLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTggIENvcmV5IE1pbnlhcmQKICAqCiAgKiBUaGlzIHJlYWRzIHRoZSBOdlJBTSBvbiBQUmVQIGNvbXBsaWFudCBtYWNoaW5lcyAoZ2VuZXJhbGx5IGZyb20gSUJNIG9yCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvdG9kY190aW1lLmMgYi9hcmNoL3BwYy9zeXNsaWIvdG9kY190aW1lLmMKaW5kZXggMTMyM2M2NC4uYTgxNjhiOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL3RvZGNfdGltZS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi90b2RjX3RpbWUuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBhcmNoL3BwYy9zeXNsaWIvdG9kY190aW1lLmMKLSAqCiAgKiBUaW1lIG9mIERheSBDbG9jayBzdXBwb3J0IGZvciB0aGUgTTQ4VDM1LCBNNDhUMzcsIE00OFQ1OSwgYW5kIE1DMTQ2ODE4CiAgKiBSZWFsIFRpbWUgQ2xvY2tzL1RpbWVrZWVwZXJzLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi94aWxpbnhfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIveGlsaW54X3BpYy5jCmluZGV4IDQ3ZjA0YzcuLmU2NzJiNjAwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIveGlsaW54X3BpYy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi94aWxpbnhfcGljLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMvc3lzbGliL3hpbGlueF9waWMuYwotICoKICAqIEludGVycnVwdCBjb250cm9sbGVyIGRyaXZlciBmb3IgWGlsaW54IFZpcnRleC1JSSBQcm8uCiAgKgogICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCkBAIC0xNSw3ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS94cGFyYW1ldGVycy5oPgorI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnMuaD4KICNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMveG1vbi9hZGIuYyBiL2FyY2gvcHBjL3htb24vYWRiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MTM4NGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9wcGMveG1vbi9hZGIuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzLgotICovCi0jaW5jbHVkZSAibm9uc3RkaW8uaCIKLSNpbmNsdWRlICJwcml2aW5zdC5oIgotCi0jZGVmaW5lIHNjYW5oZXgJeG1vbl9zY2FuaGV4Ci0jZGVmaW5lIHNraXBibAl4bW9uX3NraXBibAotCi0jZGVmaW5lIEFEQl9CCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhmMzAxNjAwMCkKLSNkZWZpbmUgQURCX1NSCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhmMzAxNzQwMCkKLSNkZWZpbmUgQURCX0FDUgkJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4ZjMwMTc2MDApCi0jZGVmaW5lIEFEQl9JRlIJCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweGYzMDE3YTAwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZWllaW8odm9pZCkgeyBhc20gdm9sYXRpbGUgKCJlaWVpbyIgOiA6KTsgfQotCi0jZGVmaW5lIE5fQURCX0xPRwkxMDAwCi1zdHJ1Y3QgYWRiX2xvZyB7Ci0gICAgdW5zaWduZWQgY2hhciBiOwotICAgIHVuc2lnbmVkIGNoYXIgaWZyOwotICAgIHVuc2lnbmVkIGNoYXIgYWNyOwotICAgIHVuc2lnbmVkIGludCB0aW1lOwotfSBhZGJfbG9nW05fQURCX0xPR107Ci1pbnQgbl9hZGJfbG9nOwotCi12b2lkCi1pbml0X2FkYl9sb2codm9pZCkKLXsKLSAgICBhZGJfbG9nWzBdLmIgPSBBREJfQjsKLSAgICBhZGJfbG9nWzBdLmlmciA9IEFEQl9JRlI7Ci0gICAgYWRiX2xvZ1swXS5hY3IgPSBBREJfQUNSOwotICAgIGFkYl9sb2dbMF0udGltZSA9IGdldF9kZWMoKTsKLSAgICBuX2FkYl9sb2cgPSAwOwotfQotCi12b2lkCi1kdW1wX2FkYl9sb2codm9pZCkKLXsKLSAgICB1bnNpZ25lZCB0LCB0MDsKLSAgICBzdHJ1Y3QgYWRiX2xvZyAqYXA7Ci0gICAgaW50IGk7Ci0KLSAgICBhcCA9IGFkYl9sb2c7Ci0gICAgdDAgPSBhcC0+dGltZTsKLSAgICBmb3IgKGkgPSAwOyBpIDw9IG5fYWRiX2xvZzsgKytpLCArK2FwKSB7Ci0JdCA9IHQwIC0gYXAtPnRpbWU7Ci0JcHJpbnRmKCJiPSV4IGlmcj0leCBhY3I9JXggYXQgJWQuJS43ZFxuIiwgYXAtPmIsIGFwLT5pZnIsIGFwLT5hY3IsCi0JICAgICAgIHQgLyAxMDAwMDAwMDAwLCAodCAlIDEwMDAwMDAwMDApIC8gMTAwKTsKLSAgICB9Ci19Ci0KLXZvaWQKLWFkYl9jaGtsb2codm9pZCkKLXsKLSAgICBzdHJ1Y3QgYWRiX2xvZyAqYXAgPSAmYWRiX2xvZ1tuX2FkYl9sb2cgKyAxXTsKLQotICAgIGFwLT5iID0gQURCX0I7Ci0gICAgYXAtPmlmciA9IEFEQl9JRlI7Ci0gICAgYXAtPmFjciA9IEFEQl9BQ1I7Ci0gICAgaWYgKGFwLT5iICE9IGFwWy0xXS5iIHx8IChhcC0+aWZyICYgNCkgIT0gKGFwWy0xXS5pZnIgJiA0KQotCXx8IGFwLT5hY3IgIT0gYXBbLTFdLmFjcikgewotCWFwLT50aW1lID0gZ2V0X2RlYygpOwotCSsrbl9hZGJfbG9nOwotICAgIH0KLX0KLQotaW50Ci1hZGJfYml0d2FpdChpbnQgYm1hc2ssIGludCBidmFsLCBpbnQgZm1hc2ssIGludCBmdmFsKQotewotICAgIGludCBpOwotICAgIHN0cnVjdCBhZGJfbG9nICphcDsKLQotICAgIGZvciAoaSA9IDEwMDAwOyBpID4gMDsgLS1pKSB7Ci0JYWRiX2Noa2xvZygpOwotCWFwID0gJmFkYl9sb2dbbl9hZGJfbG9nXTsKLQlpZiAoKGFwLT5iICYgYm1hc2spID09IGJ2YWwgJiYgKGFwLT5pZnIgJiBmbWFzaykgPT0gZnZhbCkKLQkgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotaW50Ci1hZGJfd2FpdCh2b2lkKQotewotICAgIGlmIChhZGJfYml0d2FpdCgwLCAwLCA0LCA0KSA8IDApIHsKLQlwcmludGYoImFkYjogcmVhZHkgd2FpdCB0aW1lb3V0XG4iKTsKLQlyZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi12b2lkCi1hZGJfcmVhZGluKHZvaWQpCi17Ci0gICAgaW50IGksIGo7Ci0gICAgdW5zaWduZWQgY2hhciBkWzY0XTsKLQotICAgIGlmIChBREJfQiAmIDgpIHsKLQlwcmludGYoIkFEQl9COiAleFxuIiwgQURCX0IpOwotCXJldHVybjsKLSAgICB9Ci0gICAgaSA9IDA7Ci0gICAgYWRiX3dhaXQoKTsKLSAgICBqID0gQURCX1NSOwotICAgIGVpZWlvKCk7Ci0gICAgQURCX0IgJj0gfjB4MjA7Ci0gICAgZWllaW8oKTsKLSAgICBmb3IgKDs7KSB7Ci0JaWYgKGFkYl93YWl0KCkgPCAwKQotCSAgICBicmVhazsKLQlkW2krK10gPSBBREJfU1I7Ci0JZWllaW8oKTsKLQlpZiAoQURCX0IgJiA4KQotCSAgICBicmVhazsKLQlBREJfQiBePSAweDEwOwotCWVpZWlvKCk7Ci0gICAgfQotICAgIEFEQl9CIHw9IDB4MzA7Ci0gICAgaWYgKGFkYl93YWl0KCkgPT0gMCkKLQlqID0gQURCX1NSOwotICAgIGZvciAoaiA9IDA7IGogPCBpOyArK2opCi0JcHJpbnRmKCIlLjJ4ICIsIGRbal0pOwotICAgIHByaW50ZigiXG4iKTsKLX0KLQotaW50Ci1hZGJfd3JpdGUodW5zaWduZWQgY2hhciAqZCwgaW50IGkpCi17Ci0gICAgaW50IGo7Ci0gICAgdW5zaWduZWQgeDsKLQotICAgIGlmICgoQURCX0IgJiA4KSA9PSAwKSB7Ci0JcHJpbnRmKCJyOiAiKTsKLQlhZGJfcmVhZGluKCk7Ci0gICAgfQotICAgIGZvciAoOzspIHsKLQlBREJfQUNSID0gMHgxYzsKLQllaWVpbygpOwotCUFEQl9TUiA9IGRbMF07Ci0JZWllaW8oKTsKLQlBREJfQiAmPSB+MHgyMDsKLQllaWVpbygpOwotCWlmIChBREJfQiAmIDgpCi0JICAgIGJyZWFrOwotCUFEQl9BQ1IgPSAweGM7Ci0JZWllaW8oKTsKLQlBREJfQiB8PSAweDIwOwotCWVpZWlvKCk7Ci0JYWRiX3JlYWRpbigpOwotICAgIH0KLSAgICBhZGJfd2FpdCgpOwotICAgIGZvciAoaiA9IDE7IGogPCBpOyArK2opIHsKLQlBREJfU1IgPSBkW2pdOwotCWVpZWlvKCk7Ci0JQURCX0IgXj0gMHgxMDsKLQllaWVpbygpOwotCWlmIChhZGJfd2FpdCgpIDwgMCkKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgIEFEQl9BQ1IgPSAweGM7Ci0gICAgZWllaW8oKTsKLSAgICB4ID0gQURCX1NSOwotICAgIGVpZWlvKCk7Ci0gICAgQURCX0IgfD0gMHgzMDsKLSAgICByZXR1cm4gajsKLX0KLQotdm9pZAotYWRiY21kcyh2b2lkKQotewotICAgIGNoYXIgY21kOwotICAgIHVuc2lnbmVkIHJ0Y3UsIHJ0Y2wsIGRlYywgcGRlYywgeDsKLSAgICBpbnQgaSwgajsKLSAgICB1bnNpZ25lZCBjaGFyIGRbNjRdOwotCi0gICAgY21kID0gc2tpcGJsKCk7Ci0gICAgc3dpdGNoIChjbWQpIHsKLSAgICBjYXNlICd0JzoKLQlmb3IgKDs7KSB7Ci0JICAgIHJ0Y2wgPSBnZXRfcnRjbCgpOwotCSAgICBydGN1ID0gZ2V0X3J0Y3UoKTsKLQkgICAgZGVjID0gZ2V0X2RlYygpOwotCSAgICBwcmludGYoInJ0YyB1PSV1IGw9JXUgZGVjPSV4ICglZCA9ICVkLiUuN2QpXG4iLAotCQkgICBydGN1LCBydGNsLCBkZWMsIHBkZWMgLSBkZWMsIChwZGVjIC0gZGVjKSAvIDEwMDAwMDAwMDAsCi0JCSAgICgocGRlYyAtIGRlYykgJSAxMDAwMDAwMDAwKSAvIDEwMCk7Ci0JICAgIHBkZWMgPSBkZWM7Ci0JICAgIGlmIChjbWQgPT0gJ3gnKQotCQlicmVhazsKLQkgICAgd2hpbGUgKHhtb25fcmVhZChzdGRpbiwgJmNtZCwgMSkgIT0gMSkKLQkJOwotCX0KLQlicmVhazsKLSAgICBjYXNlICdyJzoKLQlpbml0X2FkYl9sb2coKTsKLQl3aGlsZSAoYWRiX2JpdHdhaXQoOCwgMCwgMCwgMCkgPT0gMCkKLQkgICAgYWRiX3JlYWRpbigpOwotCWJyZWFrOwotICAgIGNhc2UgJ3cnOgotCWkgPSAwOwotCXdoaWxlIChzY2FuaGV4KCZ4KSkKLQkgICAgZFtpKytdID0geDsKLQlpbml0X2FkYl9sb2coKTsKLQlqID0gYWRiX3dyaXRlKGQsIGkpOwotCXByaW50Zigic2VudCAlZCBieXRlc1xuIiwgaik7Ci0Jd2hpbGUgKGFkYl9iaXR3YWl0KDgsIDAsIDAsIDApID09IDApCi0JICAgIGFkYl9yZWFkaW4oKTsKLQlicmVhazsKLSAgICBjYXNlICdsJzoKLQlkdW1wX2FkYl9sb2coKTsKLQlicmVhazsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BwYy94bW9uL3N0YXJ0LmMgYi9hcmNoL3BwYy94bW9uL3N0YXJ0LmMKaW5kZXggNDM0NGNiZS4uZmY4NmIyZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMveG1vbi9zdGFydC5jCisrKyBiL2FyY2gvcHBjL3htb24vc3RhcnQuYwpAQCAtNiwxNiArNiwxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9hZGIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9jdWRhLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vYm9vdHguaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTI2LDkgKzIxLDcgQEAKIHVuc2lnbmVkIGludCBUWFJEWSwgUlhSRFksIERMQUI7CiBzdGF0aWMgaW50IHhtb25fZXhwZWN0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHRpbWVvdXQpOwogCi1zdGF0aWMgaW50IHVzZV9zY3JlZW47CiBzdGF0aWMgaW50IHZpYV9tb2RlbTsKLXN0YXRpYyBpbnQgeG1vbl91c2Vfc2NjYjsKIAogI2RlZmluZSBUQl9TUEVFRAkyNTAwMDAwMAogCkBAIC00Niw0NyArMzksNiBAQAogCQlzY2NkWzNdICY9IH5ETEFCOwkvKiByZXNldCBETEFCICovCiB9CiAKLWV4dGVybiBpbnQgYWRiX2luaXQodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfUFBDX0NIUlAKLS8qCi0gKiBUaGlzIGxvb2tzIGluIHRoZSAicmFuZ2VzIiBwcm9wZXJ0eSBmb3IgdGhlIHByaW1hcnkgUENJIGhvc3QgYnJpZGdlCi0gKiB0byBmaW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiBQQ0kvSVNBIEkvTyBzcGFjZS4KLSAqIEl0IGlzIGJhc2ljYWxseSBhIGN1dC1kb3duIHZlcnNpb24gb2YgcGNpX3Byb2Nlc3NfYnJpZGdlX09GX3Jhbmdlcy4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2hycF9maW5kX3BoeXNfaW9fYmFzZSh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQl1bnNpZ25lZCBpbnQgKnJhbmdlczsKLQl1bnNpZ25lZCBsb25nIGJhc2UgPSBDSFJQX0lTQV9JT19CQVNFOwotCWludCBybGVuID0gMDsKLQlpbnQgbnA7Ci0KLQlub2RlID0gZmluZF9kZXZpY2VzKCJpc2EiKTsKLQlpZiAobm9kZSAhPSBOVUxMKSB7Ci0JCW5vZGUgPSBub2RlLT5wYXJlbnQ7Ci0JCWlmIChub2RlID09IE5VTEwgfHwgbm9kZS0+dHlwZSA9PSBOVUxMCi0JCSAgICB8fCBzdHJjbXAobm9kZS0+dHlwZSwgInBjaSIpICE9IDApCi0JCQlub2RlID0gTlVMTDsKLQl9Ci0JaWYgKG5vZGUgPT0gTlVMTCkKLQkJbm9kZSA9IGZpbmRfZGV2aWNlcygicGNpIik7Ci0JaWYgKG5vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIGJhc2U7Ci0KLQlyYW5nZXMgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShub2RlLCAicmFuZ2VzIiwgJnJsZW4pOwotCW5wID0gcHJvbV9uX2FkZHJfY2VsbHMobm9kZSkgKyA1OwotCXdoaWxlICgocmxlbiAtPSBucCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSA+PSAwKSB7Ci0JCWlmICgocmFuZ2VzWzBdID4+IDI0KSA9PSAxICYmIHJhbmdlc1syXSA9PSAwKSB7Ci0JCQkvKiBJL08gc3BhY2Ugc3RhcnRpbmcgYXQgMCwgZ3JhYiB0aGUgcGh5cyBiYXNlICovCi0JCQliYXNlID0gcmFuZ2VzW25wIC0gM107Ci0JCQlicmVhazsKLQkJfQotCQlyYW5nZXMgKz0gbnA7Ci0JfQotCXJldHVybiBiYXNlOwotfQotI2VuZGlmIC8qIENPTkZJR19QUENfQ0hSUCAqLwogCiAjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfeG1vbihpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKQEAgLTEwOSwyMiArNjEsNiBAQAogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmJhc2U7CiAKLSNpZmRlZiBDT05GSUdfUFBDX0NIUlAKLQliYXNlID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgaXNhX2lvX2Jhc2U7Ci0JaWYgKF9tYWNoaW5lID09IF9NQUNIX2NocnApCi0JCWJhc2UgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKQotCQkJaW9yZW1hcChjaHJwX2ZpbmRfcGh5c19pb19iYXNlKCksIDB4MTAwMCk7Ci0KLQlzY2NjID0gYmFzZSArIDB4M2ZkOwotCXNjY2QgPSBiYXNlICsgMHgzZjg7Ci0JaWYgKHhtb25fdXNlX3NjY2IpIHsKLQkJc2NjYyAtPSAweDEwMDsKLQkJc2NjZCAtPSAweDEwMDsKLQl9Ci0JVFhSRFkgPSAweDIwOwotCVJYUkRZID0gMTsKLQlETEFCID0gMHg4MDsKLSNlbmRpZiAvKiBDT05GSUdfUFBDX0NIUlAgKi8KICNlbGlmIGRlZmluZWQoQ09ORklHX0dFTUlOSSkKIAkvKiBzaG91bGQgYWxyZWFkeSBiZSBtYXBwZWQgYnkgdGhlIGtlcm5lbCBib290ICovCiAJc2NjYyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIDB4ZmZlZmZiMGQ7CkBAIC0xNDMsMjIgKzc5LDkgQEAKIAlyZWdpc3Rlcl9zeXNycV9rZXkoJ3gnLCAmc3lzcnFfeG1vbl9vcCk7CiB9CiAKLXN0YXRpYyBpbnQgc2NjX2luaXRpYWxpemVkID0gMDsKK3N0YXRpYyBpbnQgc2NjX2luaXRpYWxpemVkOwogCiB2b2lkIHhtb25faW5pdF9zY2Modm9pZCk7Ci1leHRlcm4gdm9pZCBjdWRhX3BvbGwodm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkb19wb2xsX2FkYih2b2lkKQotewotI2lmZGVmIENPTkZJR19BREJfUE1VCi0JaWYgKHN5c19jdHJsZXIgPT0gU1lTX0NUUkxFUl9QTVUpCi0JCXBtdV9wb2xsX2FkYigpOwotI2VuZGlmIC8qIENPTkZJR19BREJfUE1VICovCi0jaWZkZWYgQ09ORklHX0FEQl9DVURBCi0JaWYgKHN5c19jdHJsZXIgPT0gU1lTX0NUUkxFUl9DVURBKQotCQljdWRhX3BvbGwoKTsKLSNlbmRpZiAvKiBDT05GSUdfQURCX0NVREEgKi8KLX0KIAogaW50CiB4bW9uX3dyaXRlKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpCkBAIC0xNzYsMjAgKzk5LDEyIEBACiAJCQlicmVhazsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0JPT1RYX1RFWFQKLQlpZiAodXNlX3NjcmVlbikgewotCQkvKiB3cml0ZSBpdCBvbiB0aGUgc2NyZWVuICovCi0JCWZvciAoaSA9IDA7IGkgPCBuYjsgKytpKQotCQkJYnRleHRfZHJhd2NoYXIoKnArKyk7Ci0JCWdvdG8gb3V0OwotCX0KLSNlbmRpZgogCWlmICghc2NjX2luaXRpYWxpemVkKQogCQl4bW9uX2luaXRfc2NjKCk7CiAJY3QgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBuYjsgKytpKSB7CiAJCXdoaWxlICgoKnNjY2MgJiBUWFJEWSkgPT0gMCkKLQkJCWRvX3BvbGxfYWRiKCk7CisJCQk7CiAJCWMgPSBwW2ldOwogCQlpZiAoYyA9PSAnXG4nICYmICFjdCkgewogCQkJYyA9ICdccic7CkBAIC0yMDMsNyArMTE4LDYgQEAKIAkJZWllaW8oKTsKIAl9CiAKLSBvdXQ6CiAjaWZkZWYgQ09ORklHX1NNUAogCWlmICghbG9ja2VkKQogCQljbGVhcl9iaXQoMCwgJnhtb25fd3JpdGVfbG9jayk7CkBAIC0yMTIsNjUgKzEyNiw3IEBACiB9CiAKIGludCB4bW9uX3dhbnRzX2tleTsKLWludCB4bW9uX2FkYl9rZXljb2RlOwogCi0jaWZkZWYgQ09ORklHX0JPT1RYX1RFWFQKLXN0YXRpYyBpbnQgeG1vbl9hZGJfc2hpZnRzdGF0ZTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgeG1vbl9rZXl0YWJbMTI4XSA9Ci0JImFzZGZoZ3p4Y3ZcMDAwYnF3ZXIiCQkJCS8qIDB4MDAgLSAweDBmICovCi0JInl0MTIzNDY1PTk3LTgwXW8iCQkJCS8qIDB4MTAgLSAweDFmICovCi0JInVbaXBccmxqJ2s7XFwsL25tLiIJCQkJLyogMHgyMCAtIDB4MmYgKi8KLQkiXHQgYFwxNzdcMFwwMzNcMFwwXDBcMFwwXDBcMFwwXDBcMCIJCS8qIDB4MzAgLSAweDNmICovCi0JIlwwLlwwKlwwK1wwXDBcMFwwXDAvXHJcMC1cMCIJCQkvKiAweDQwIC0gMHg0ZiAqLwotCSJcMFwwMDAwMTIzNDU2Nzg5XDBcMFwwIjsJCQkvKiAweDUwIC0gMHg1ZiAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciB4bW9uX3NoaWZ0X2tleXRhYlsxMjhdID0KLQkiQVNERkhHWlhDVlwwMDBCUVdFUiIJCQkJLyogMHgwMCAtIDB4MGYgKi8KLQkiWVQhQCMkXiUrKCZfKil9TyIJCQkJLyogMHgxMCAtIDB4MWYgKi8KLQkiVXtJUFxyTEpcIks6fDw/Tk0+IgkJCQkvKiAweDIwIC0gMHgyZiAqLwotCSJcdCB+XDE3N1wwXDAzM1wwXDBcMFwwXDBcMFwwXDBcMFwwIgkJLyogMHgzMCAtIDB4M2YgKi8KLQkiXDAuXDAqXDArXDBcMFwwXDBcMC9cclwwLVwwIgkJCS8qIDB4NDAgLSAweDRmICovCi0JIlwwXDAwMDAxMjM0NTY3ODlcMFwwXDAiOwkJCS8qIDB4NTAgLSAweDVmICovCi0KLXN0YXRpYyBpbnQKLXhtb25fZ2V0X2FkYl9rZXkodm9pZCkKLXsKLQlpbnQgaywgdCwgb247Ci0KLQl4bW9uX3dhbnRzX2tleSA9IDE7Ci0JZm9yICg7OykgewotCQl4bW9uX2FkYl9rZXljb2RlID0gLTE7Ci0JCXQgPSAwOwotCQlvbiA9IDA7Ci0JCWRvIHsKLQkJCWlmICgtLXQgPCAwKSB7Ci0JCQkJb24gPSAxIC0gb247Ci0JCQkJYnRleHRfZHJhd2NoYXIob24/IDB4ZGI6IDB4MjApOwotCQkJCWJ0ZXh0X2RyYXdjaGFyKCdcYicpOwotCQkJCXQgPSAyMDAwMDA7Ci0JCQl9Ci0JCQlkb19wb2xsX2FkYigpOwotCQl9IHdoaWxlICh4bW9uX2FkYl9rZXljb2RlID09IC0xKTsKLQkJayA9IHhtb25fYWRiX2tleWNvZGU7Ci0JCWlmIChvbikKLQkJCWJ0ZXh0X2RyYXdzdHJpbmcoIiBcYiIpOwotCi0JCS8qIHRlc3QgZm9yIHNoaWZ0IGtleXMgKi8KLQkJaWYgKChrICYgMHg3ZikgPT0gMHgzOCB8fCAoayAmIDB4N2YpID09IDB4N2IpIHsKLQkJCXhtb25fYWRiX3NoaWZ0c3RhdGUgPSAoayAmIDB4ODApID09IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoayA+PSAweDgwKQotCQkJY29udGludWU7CS8qIGlnbm9yZSB1cCB0cmFuc2l0aW9ucyAqLwotCQlrID0gKHhtb25fYWRiX3NoaWZ0c3RhdGU/IHhtb25fc2hpZnRfa2V5dGFiOiB4bW9uX2tleXRhYilba107Ci0JCWlmIChrICE9IDApCi0JCQlicmVhazsKLQl9Ci0JeG1vbl93YW50c19rZXkgPSAwOwotCXJldHVybiBrOwotfQotI2VuZGlmIC8qIENPTkZJR19CT09UWF9URVhUICovCiAKIGludAogeG1vbl9yZWFkKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpCkBAIC0yNzgsMTggKzEzNCwxMSBAQAogICAgIGNoYXIgKnAgPSBwdHI7CiAgICAgaW50IGk7CiAKLSNpZmRlZiBDT05GSUdfQk9PVFhfVEVYVAotICAgIGlmICh1c2Vfc2NyZWVuKSB7Ci0JZm9yIChpID0gMDsgaSA8IG5iOyArK2kpCi0JICAgICpwKysgPSB4bW9uX2dldF9hZGJfa2V5KCk7Ci0JcmV0dXJuIGk7Ci0gICAgfQotI2VuZGlmCiAgICAgaWYgKCFzY2NfaW5pdGlhbGl6ZWQpCiAJeG1vbl9pbml0X3NjYygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuYjsgKytpKSB7CiAJd2hpbGUgKCgqc2NjYyAmIFJYUkRZKSA9PSAwKQotCSAgICBkb19wb2xsX2FkYigpOworCSAgICA7CiAJYnVmX2FjY2VzcygpOwogCSpwKysgPSAqc2NjZDsKICAgICB9CkBAIC0zMDAsNyArMTQ5LDcgQEAKIHhtb25fcmVhZF9wb2xsKHZvaWQpCiB7CiAJaWYgKCgqc2NjYyAmIFJYUkRZKSA9PSAwKSB7Ci0JCWRvX3BvbGxfYWRiKCk7CisJCTsKIAkJcmV0dXJuIC0xOwogCX0KIAlidWZfYWNjZXNzKCk7CkBAIC0zMTAsMTUgKzE1OSw2IEBACiB2b2lkCiB4bW9uX2luaXRfc2NjKHZvaWQpCiB7Ci0JaWYgKCBfbWFjaGluZSA9PSBfTUFDSF9jaHJwICkKLQl7Ci0JCXNjY2RbM10gPSAweDgzOyBlaWVpbygpOwkvKiBMQ1IgPSA4TjEgKyBETEFCICovCi0JCXNjY2RbMF0gPSAxMjsgZWllaW8oKTsJCS8qIERMTCA9IDk2MDAgYmF1ZCAqLwotCQlzY2NkWzFdID0gMDsgZWllaW8oKTsKLQkJc2NjZFsyXSA9IDA7IGVpZWlvKCk7CQkvKiBGQ1IgPSAwICovCi0JCXNjY2RbM10gPSAzOyBlaWVpbygpOwkJLyogTENSID0gOE4xICovCi0JCXNjY2RbMV0gPSAwOyBlaWVpbygpOwkJLyogSUVSID0gMCAqLwotCX0KIAlzY2NfaW5pdGlhbGl6ZWQgPSAxOwogCWlmICh2aWFfbW9kZW0pIHsKIAkJZm9yICg7OykgewpAQCAtMzM0LDIyICsxNzQsNiBAQAogCX0KIH0KIAotI2lmIDAKLWV4dGVybiBpbnQgKCpwcm9tX2VudHJ5KSh2b2lkICopOwotCi1pbnQKLXhtb25fZXhpdCh2b2lkKQotewotICAgIHN0cnVjdCBwcm9tX2FyZ3MgewotCWNoYXIgKnNlcnZpY2U7Ci0gICAgfSBhcmdzOwotCi0gICAgZm9yICg7OykgewotCWFyZ3Muc2VydmljZSA9ICJleGl0IjsKLQkoKnByb21fZW50cnkpKCZhcmdzKTsKLSAgICB9Ci19Ci0jZW5kaWYKIAogdm9pZCAqeG1vbl9zdGRpbjsKIHZvaWQgKnhtb25fc3Rkb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMveG1vbi94bW9uLmMgYi9hcmNoL3BwYy94bW9uL3htb24uYwppbmRleCBiZGFmNjU5Li4wNmZhNDRiIDEwMDY0NAotLS0gYS9hcmNoL3BwYy94bW9uL3htb24uYworKysgYi9hcmNoL3BwYy94bW9uL3htb24uYwpAQCAtMTIsOCArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9ib290eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlICJub25zdGRpby5oIgpAQCAtMTAxLDkgKzk5LDYgQEAKIHN0YXRpYyB2b2lkIGNwdV9jbWQodm9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogc3RhdGljIHZvaWQgY3N1bSh2b2lkKTsKLSNpZmRlZiBDT05GSUdfQk9PVFhfVEVYVAotc3RhdGljIHZvaWQgdmlkY21kcyh2b2lkKTsKLSNlbmRpZgogc3RhdGljIHZvaWQgYm9vdGNtZHModm9pZCk7CiBzdGF0aWMgdm9pZCBwcm9jY2FsbCh2b2lkKTsKIHN0YXRpYyB2b2lkIHByaW50dGltZSh2b2lkKTsKQEAgLTUyMiwxMSArNTE3LDYgQEAKIAkJCWNwdV9jbWQoKTsKIAkJCWJyZWFrOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLSNpZmRlZiBDT05GSUdfQk9PVFhfVEVYVAotCQljYXNlICd2JzoKLQkJCXZpZGNtZHMoKTsKLQkJCWJyZWFrOwotI2VuZGlmCiAJCWNhc2UgJ3onOgogCQkJYm9vdGNtZHMoKTsKIAkJCWJyZWFrOwpAQCAtNjE4LDQzICs2MDgsNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2lmZGVmIENPTkZJR19CT09UWF9URVhUCi1leHRlcm4gYm9vdF9pbmZvc190IGRpc3BfYmk7Ci0KLXN0YXRpYyB2b2lkIHZpZGNtZHModm9pZCkKLXsKLQlpbnQgYyA9IGluY2hhcigpOwotCXVuc2lnbmVkIGludCB2YWwsIHc7Ci0JZXh0ZXJuIGludCBib290X3RleHRfbWFwcGVkOwotCi0JaWYgKCFib290X3RleHRfbWFwcGVkKQotCQlyZXR1cm47Ci0JaWYgKGMgIT0gJ1xuJyAmJiBzY2FuaGV4KCZ2YWwpKSB7Ci0JCXN3aXRjaCAoYykgewotCQljYXNlICdkJzoKLQkJCXcgPSBkaXNwX2JpLmRpc3BEZXZpY2VSb3dCeXRlcwotCQkJCS8gKGRpc3BfYmkuZGlzcERldmljZURlcHRoID4+IDMpOwotCQkJZGlzcF9iaS5kaXNwRGV2aWNlRGVwdGggPSB2YWw7Ci0JCQlkaXNwX2JpLmRpc3BEZXZpY2VSb3dCeXRlcyA9IHcgKiAodmFsID4+IDMpOwotCQkJcmV0dXJuOwotCQljYXNlICdwJzoKLQkJCWRpc3BfYmkuZGlzcERldmljZVJvd0J5dGVzID0gdmFsOwotCQkJcmV0dXJuOwotCQljYXNlICd3JzoKLQkJCWRpc3BfYmkuZGlzcERldmljZVJlY3RbMl0gPSB2YWw7Ci0JCQlyZXR1cm47Ci0JCWNhc2UgJ2gnOgotCQkJZGlzcF9iaS5kaXNwRGV2aWNlUmVjdFszXSA9IHZhbDsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlwcmludGYoIlcgPSAlZCAoMHgleCkgSCA9ICVkICgweCV4KSBEID0gJWQgKDB4JXgpIFAgPSAlZCAoMHgleClcbiIsCi0JICAgICAgIGRpc3BfYmkuZGlzcERldmljZVJlY3RbMl0sIGRpc3BfYmkuZGlzcERldmljZVJlY3RbMl0sCi0JICAgICAgIGRpc3BfYmkuZGlzcERldmljZVJlY3RbM10sIGRpc3BfYmkuZGlzcERldmljZVJlY3RbM10sCi0JICAgICAgIGRpc3BfYmkuZGlzcERldmljZURlcHRoLCBkaXNwX2JpLmRpc3BEZXZpY2VEZXB0aCwKLQkgICAgICAgZGlzcF9iaS5kaXNwRGV2aWNlUm93Qnl0ZXMsIGRpc3BfYmkuZGlzcERldmljZVJvd0J5dGVzKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfQk9PVFhfVEVYVCAqLwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZmNzdGFiWzI1Nl0gPSB7CiAJMHgwMDAwLCAweDExODksIDB4MjMxMiwgMHgzMjliLCAweDQ2MjQsIDB4NTdhZCwgMHg2NTM2LCAweDc0YmYsCkBAIC0xMDIwLDcgKzk3Myw2IEBACiB9CiAjZWxzZQogCi0jaWZuZGVmIENPTkZJR19QUEM2NEJSSURHRQogc3RhdGljIHZvaWQKIGR1bXBfaGFzaF90YWJsZV9zZWcodW5zaWduZWQgc2VnLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQogewpAQCAtMTA3OSw2NiArMTAzMSw2IEBACiAJCXByaW50ZigiIC4uLiAleFxuIiwgbGFzdF92YSk7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19QUEM2NEJSSURHRSAqLwotc3RhdGljIHZvaWQKLWR1bXBfaGFzaF90YWJsZV9zZWcodW5zaWduZWQgc2VnLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQotewotCWV4dGVybiB2b2lkICpIYXNoOwotCWV4dGVybiB1bnNpZ25lZCBsb25nIEhhc2hfc2l6ZTsKLQl1bnNpZ25lZCAqaHRhYiA9IEhhc2g7Ci0JdW5zaWduZWQgaHNpemUgPSBIYXNoX3NpemU7Ci0JdW5zaWduZWQgdiwgaG1hc2ssIHZhLCBsYXN0X3ZhOwotCWludCBmb3VuZCwgbGFzdF9mb3VuZCwgaTsKLQl1bnNpZ25lZCAqaGcsIHcxLCBsYXN0X3cyLCBsYXN0X3ZhMDsKLQotCWxhc3RfZm91bmQgPSAwOwotCWhtYXNrID0gaHNpemUgLyAxMjggLSAxOwotCXZhID0gc3RhcnQ7Ci0Jc3RhcnQgPSAoc3RhcnQgPj4gMTIpICYgMHhmZmZmOwotCWVuZCA9IChlbmQgPj4gMTIpICYgMHhmZmZmOwotCWZvciAodiA9IHN0YXJ0OyB2IDwgZW5kOyArK3YpIHsKLQkJZm91bmQgPSAwOwotCQloZyA9IGh0YWIgKyAoKCh2IF4gc2VnKSAmIGhtYXNrKSAqIDMyKTsKLQkJdzEgPSAxIHwgKHNlZyA8PCAxMikgfCAoKHYgJiAweGY4MDApID4+IDQpOwotCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpLCBoZyArPSA0KSB7Ci0JCQlpZiAoaGdbMV0gPT0gdzEpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmb3VuZCkgewotCQkJdzEgXj0gMjsKLQkJCWhnID0gaHRhYiArICgofih2IF4gc2VnKSAmIGhtYXNrKSAqIDMyKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2ksIGhnICs9IDQpIHsKLQkJCQlpZiAoaGdbMV0gPT0gdzEpIHsKLQkJCQkJZm91bmQgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKCEobGFzdF9mb3VuZCAmJiBmb3VuZCAmJiAoaGdbM10gJiB+MHgxODApID09IGxhc3RfdzIgKyA0MDk2KSkgewotCQkJaWYgKGxhc3RfZm91bmQpIHsKLQkJCQlpZiAobGFzdF92YSAhPSBsYXN0X3ZhMCkKLQkJCQkJcHJpbnRmKCIgLi4uICV4IiwgbGFzdF92YSk7Ci0JCQkJcHJpbnRmKCJcbiIpOwotCQkJfQotCQkJaWYgKGZvdW5kKSB7Ci0JCQkJcHJpbnRmKCIleCB0byAleCIsIHZhLCBoZ1szXSk7Ci0JCQkJbGFzdF92YTAgPSB2YTsKLQkJCX0KLQkJCWxhc3RfZm91bmQgPSBmb3VuZDsKLQkJfQotCQlpZiAoZm91bmQpIHsKLQkJCWxhc3RfdzIgPSBoZ1szXSAmIH4weDE4MDsKLQkJCWxhc3RfdmEgPSB2YTsKLQkJfQotCQl2YSArPSA0MDk2OwotCX0KLQlpZiAobGFzdF9mb3VuZCkKLQkJcHJpbnRmKCIgLi4uICV4XG4iLCBsYXN0X3ZhKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUFBDNjRCUklER0UgKi8KLQogc3RhdGljIHVuc2lnbmVkIGhhc2hfY3R4Owogc3RhdGljIHVuc2lnbmVkIGhhc2hfc3RhcnQ7CiBzdGF0aWMgdW5zaWduZWQgaGFzaF9lbmQ7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGI3Y2E1YmYuLjJiNzM2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC00NjAsNiArNDYwLDggQEAKIAogc291cmNlICJkcml2ZXJzL2Jhc2UvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvc2NzaS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvczM5MC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYyBiL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKaW5kZXggZDA2YThkNy4uNTRkMzVjMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYworKysgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCkBAIC01MzEsMTIgKzUzMSwxMSBAQAogCQlQX0VSUk9SKCJjdGxfbnIgJWkgYWxyZWFkeSBpbiB1c2UhXG4iLCBvcHMtPmN0bF9ucik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCW9wcy0+Y3RsX3RhYmxlID0ga21hbGxvYyg0KnNpemVvZihzdHJ1Y3QgY3RsX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJb3BzLT5jdGxfdGFibGUgPSBremFsbG9jKDQqc2l6ZW9mKHN0cnVjdCBjdGxfdGFibGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAob3BzLT5jdGxfdGFibGUgPT0gTlVMTCkgewogCQlQX0VSUk9SKCJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgJXMgY3RsX3RhYmxlIVxuIiwgb3BzLT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChvcHMtPmN0bF90YWJsZSwgMCwgNCpzaXplb2Yoc3RydWN0IGN0bF90YWJsZSkpOwogCiAJc3Bpbl9sb2NrKCZhcHBsZGF0YV9vcHNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChsaCwgJmFwcGxkYXRhX29wc19saXN0KSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKaW5kZXggNjE1OTY0Yy4uNTBlODAxMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtMTU1Miw2ICsxNTUyLDcgQEAKIAlsbGd0cgklcjMsJXIzCQkJIyBjb25zdCBjaGFyICoKIAlsZ2ZyCSVyNCwlcjQJCQkjIGludAogCWxsZ3RyCSVyNSwlcjUJCQkjIGNvbnN0IGNoYXIgKgorCWxnZnIJJXI2LCVyNgkJCSMgaW50CiAJamcJc3lzX2xpbmthdAogCiAJLmdsb2JsIHN5c19zeW1saW5rYXRfd3JhcHBlcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCmluZGV4IDg5NmQzOWQuLjA2YTNmYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKQEAgLTIwNCwxNiArMjA0LDEzIEBACiAJCQlnb3RvIGZhaWxfbWFsbG9jX2FyZWFzMjsKIAkJfQogCQlmb3IoaiA9IDA7IGogPCBwYWdlc19wZXJfYXJlYTsgaisrKSB7Ci0JCQlhcmVhc1tpXVtqXSA9IChkZWJ1Z19lbnRyeV90KilrbWFsbG9jKFBBR0VfU0laRSwKLQkJCQkJCUdGUF9LRVJORUwpOworCQkJYXJlYXNbaV1bal0gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CiAJCQlpZighYXJlYXNbaV1bal0pIHsKIAkJCQlmb3Ioai0tOyBqID49MCA7IGotLSkgewogCQkJCQlrZnJlZShhcmVhc1tpXVtqXSk7CiAJCQkJfQogCQkJCWtmcmVlKGFyZWFzW2ldKTsKIAkJCQlnb3RvIGZhaWxfbWFsbG9jX2FyZWFzMjsKLQkJCX0gZWxzZSB7Ci0JCQkJbWVtc2V0KGFyZWFzW2ldW2pdLDAsUEFHRV9TSVpFKTsKIAkJCX0KIAkJfQogCX0KQEAgLTI0OSwxNCArMjQ2LDEyIEBACiAJcmMgPSAoZGVidWdfaW5mb190Kikga21hbGxvYyhzaXplb2YoZGVidWdfaW5mb190KSwgR0ZQX0tFUk5FTCk7CiAJaWYoIXJjKQogCQlnb3RvIGZhaWxfbWFsbG9jX3JjOwotCXJjLT5hY3RpdmVfZW50cmllcyA9IChpbnQqKWttYWxsb2MobnJfYXJlYXMgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CisJcmMtPmFjdGl2ZV9lbnRyaWVzID0ga2NhbGxvYyhucl9hcmVhcywgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwogCWlmKCFyYy0+YWN0aXZlX2VudHJpZXMpCiAJCWdvdG8gZmFpbF9tYWxsb2NfYWN0aXZlX2VudHJpZXM7Ci0JbWVtc2V0KHJjLT5hY3RpdmVfZW50cmllcywgMCwgbnJfYXJlYXMgKiBzaXplb2YoaW50KSk7Ci0JcmMtPmFjdGl2ZV9wYWdlcyA9IChpbnQqKWttYWxsb2MobnJfYXJlYXMgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CisJcmMtPmFjdGl2ZV9wYWdlcyA9IGtjYWxsb2MobnJfYXJlYXMsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKIAlpZighcmMtPmFjdGl2ZV9wYWdlcykKIAkJZ290byBmYWlsX21hbGxvY19hY3RpdmVfcGFnZXM7Ci0JbWVtc2V0KHJjLT5hY3RpdmVfcGFnZXMsIDAsIG5yX2FyZWFzICogc2l6ZW9mKGludCkpOwogCWlmKChtb2RlID09IEFMTF9BUkVBUykgJiYgKHBhZ2VzX3Blcl9hcmVhICE9IDApKXsKIAkJcmMtPmFyZWFzID0gZGVidWdfYXJlYXNfYWxsb2MocGFnZXNfcGVyX2FyZWEsIG5yX2FyZWFzKTsKIAkJaWYoIXJjLT5hcmVhcykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZGE2ZmJhZS4uOTkxODJhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIC8qCiAgKiBUaGUgaWRsZSBsb29wIG9uIGEgUzM5MC4uLgogICovCi12b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQorc3RhdGljIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7CiAJaW50IGNwdSwgcmM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwppbmRleCAyNGY2MmYxLi4wYTA0ZTRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCkBAIC03OCw4ICs3OCw2IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotc3RhdGljIGNoYXIgY29tbWFuZF9saW5lW0NPTU1BTkRfTElORV9TSVpFXSA9IHsgMCwgfTsKLQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2RlX3Jlc291cmNlID0gewogCS5uYW1lICA9ICJLZXJuZWwgY29kZSIsCiAJLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpICZfdGV4dCwKQEAgLTMzNSw2MyArMzMzLDM4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQKLXBhcnNlX2NtZGxpbmVfZWFybHkoY2hhciAqKmNtZGxpbmVfcCkKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcnNlX21lbShjaGFyICpwKQogewotCWNoYXIgYyA9ICcgJywgY24sICp0byA9IGNvbW1hbmRfbGluZSwgKmZyb20gPSBDT01NQU5EX0xJTkU7CisJbWVtb3J5X2VuZCA9IG1lbXBhcnNlKHAsICZwKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9wYXJzZV9tZW0pOworCisvKgorICogImlwbGRlbGF5PVhYWFtzbV0iIHNldHMgaXBsIGRlbGF5IGluIHNlY29uZHMgb3IgbWludXRlcworICovCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9wYXJzZV9pcGxkZWxheShjaGFyICpwKQorewogCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOwogCi0JLyogU2F2ZSB1bnBhcnNlZCBjb21tYW5kIGxpbmUgY29weSBmb3IgL3Byb2MvY21kbGluZSAqLwotCW1lbWNweShzYXZlZF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORSwgQ09NTUFORF9MSU5FX1NJWkUpOwotCXNhdmVkX2NvbW1hbmRfbGluZVtDT01NQU5EX0xJTkVfU0laRS0xXSA9ICdcMCc7CisJZGVsYXkgPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMCk7CiAKLQlmb3IgKDs7KSB7Ci0JCS8qCi0JCSAqICJtZW09WFhYW2tLbU1dIiBzZXRzIG1lbXNpemUKLQkJICovCi0JCWlmIChjID09ICcgJyAmJiBzdHJuY21wKGZyb20sICJtZW09IiwgNCkgPT0gMCkgewotCQkJbWVtb3J5X2VuZCA9IHNpbXBsZV9zdHJ0b3VsKGZyb20rNCwgJmZyb20sIDApOwotCQkJaWYgKCAqZnJvbSA9PSAnSycgfHwgKmZyb20gPT0gJ2snICkgewotCQkJCW1lbW9yeV9lbmQgPSBtZW1vcnlfZW5kIDw8IDEwOwotCQkJCWZyb20rKzsKLQkJCX0gZWxzZSBpZiAoICpmcm9tID09ICdNJyB8fCAqZnJvbSA9PSAnbScgKSB7Ci0JCQkJbWVtb3J5X2VuZCA9IG1lbW9yeV9lbmQgPDwgMjA7Ci0JCQkJZnJvbSsrOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqICJpcGxkZWxheT1YWFhbc21dIiBzZXRzIGlwbCBkZWxheSBpbiBzZWNvbmRzIG9yIG1pbnV0ZXMKLQkJICovCi0JCWlmIChjID09ICcgJyAmJiBzdHJuY21wKGZyb20sICJpcGxkZWxheT0iLCA5KSA9PSAwKSB7Ci0JCQlkZWxheSA9IHNpbXBsZV9zdHJ0b3VsKGZyb20rOSwgJmZyb20sIDApOwotCQkJaWYgKCpmcm9tID09ICdzJyB8fCAqZnJvbSA9PSAnUycpIHsKLQkJCQlkZWxheSA9IGRlbGF5KjEwMDAwMDA7Ci0JCQkJZnJvbSsrOwotCQkJfSBlbHNlIGlmICgqZnJvbSA9PSAnbScgfHwgKmZyb20gPT0gJ00nKSB7Ci0JCQkJZGVsYXkgPSBkZWxheSo2MCoxMDAwMDAwOwotCQkJCWZyb20rKzsKLQkJCX0KLQkJCS8qIG5vdyB3YWl0IGZvciB0aGUgcmVxdWVzdGVkIGFtb3VudCBvZiB0aW1lICovCi0JCQl1ZGVsYXkoZGVsYXkpOwotCQl9Ci0JCWNuID0gKihmcm9tKyspOwotCQlpZiAoIWNuKQotCQkJYnJlYWs7Ci0JCWlmIChjbiA9PSAnXG4nKQotCQkJY24gPSAnICc7ICAvKiByZXBsYWNlIG5ld2xpbmVzIHdpdGggc3BhY2UgKi8KLQkJaWYgKGNuID09IDB4MGQpCi0JCQljbiA9ICcgJzsgIC8qIHJlcGxhY2UgMHgwZCB3aXRoIHNwYWNlICovCi0JCWlmIChjbiA9PSAnICcgJiYgYyA9PSAnICcpCi0JCQljb250aW51ZTsgIC8qIHJlbW92ZSBhZGRpdGlvbmFsIHNwYWNlcyAqLwotCQljID0gY247Ci0JCWlmICh0byAtIGNvbW1hbmRfbGluZSA+PSBDT01NQU5EX0xJTkVfU0laRSkKLQkJCWJyZWFrOwotCQkqKHRvKyspID0gYzsKKwlzd2l0Y2ggKCpwKSB7CisJY2FzZSAncyc6CisJY2FzZSAnUyc6CisJCWRlbGF5ICo9IDEwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgJ20nOgorCWNhc2UgJ00nOgorCQlkZWxheSAqPSA2MCAqIDEwMDAwMDA7CiAJfQotCWlmIChjID09ICcgJyAmJiB0byA+IGNvbW1hbmRfbGluZSkgdG8tLTsKLQkqdG8gPSAnXDAnOwotCSpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7CisKKwkvKiBub3cgd2FpdCBmb3IgdGhlIHJlcXVlc3RlZCBhbW91bnQgb2YgdGltZSAqLworCXVkZWxheShkZWxheSk7CisKKwlyZXR1cm4gMDsKIH0KK2Vhcmx5X3BhcmFtKCJpcGxkZWxheSIsIGVhcmx5X3BhcnNlX2lwbGRlbGF5KTsKIAogc3RhdGljIHZvaWQgX19pbml0CiBzZXR1cF9sb3djb3JlKHZvaWQpCkBAIC01ODAsOSArNTUzLDI2IEBACiAJICAgICAgICJXZSBhcmUgcnVubmluZyBuYXRpdmUgKDY0IGJpdCBtb2RlKVxuIik7CiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKKwkvKiBTYXZlIHVucGFyc2VkIGNvbW1hbmQgbGluZSBjb3B5IGZvciAvcHJvYy9jbWRsaW5lICovCisJc3RybGNweShzYXZlZF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORSwgQ09NTUFORF9MSU5FX1NJWkUpOworCisJKmNtZGxpbmVfcCA9IENPTU1BTkRfTElORTsKKwkqKCpjbWRsaW5lX3AgKyBDT01NQU5EX0xJTkVfU0laRSAtIDEpID0gJ1wwJzsKKwogICAgICAgICBST09UX0RFViA9IFJvb3RfUkFNMDsKKworCWluaXRfbW0uc3RhcnRfY29kZSA9IFBBR0VfT0ZGU0VUOworCWluaXRfbW0uZW5kX2NvZGUgPSAodW5zaWduZWQgbG9uZykgJl9ldGV4dDsKKwlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZfZWRhdGE7CisJaW5pdF9tbS5icmsgPSAodW5zaWduZWQgbG9uZykgJl9lbmQ7CisKKwltZW1vcnlfZW5kID0gbWVtb3J5X3NpemU7CisKKwlwYXJzZV9lYXJseV9wYXJhbSgpOworCiAjaWZuZGVmIENPTkZJR182NEJJVAotCW1lbW9yeV9lbmQgPSBtZW1vcnlfc2l6ZSAmIH4weDQwMDAwMFVMOyAgLyogYWxpZ24gbWVtb3J5IGVuZCB0byA0TUIgKi8KKwltZW1vcnlfZW5kICY9IH4weDQwMDAwMFVMOworCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdlIG5lZWQgc29tZSBmcmVlIHZpcnR1YWwgc3BhY2UgdG8gYmUgYWJsZSB0byBkbyB2bWFsbG9jLgogICAgICAgICAgKiBPbiBhIG1hY2hpbmUgd2l0aCAyR0IgbWVtb3J5IHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYXQKQEAgLTU5MSwxNyArNTgxLDkgQEAKICAgICAgICAgaWYgKG1lbW9yeV9lbmQgPiAxOTIwKjEwMjQqMTAyNCkKICAgICAgICAgICAgICAgICBtZW1vcnlfZW5kID0gMTkyMCoxMDI0KjEwMjQ7CiAjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KLQltZW1vcnlfZW5kID0gbWVtb3J5X3NpemUgJiB+MHgyMDAwMDBVTDsgIC8qIGRldGVjdGVkIGluIGhlYWQucyAqLworCW1lbW9yeV9lbmQgJj0gfjB4MjAwMDAwVUw7CiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKLQlpbml0X21tLnN0YXJ0X2NvZGUgPSBQQUdFX09GRlNFVDsKLQlpbml0X21tLmVuZF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpICZfZXRleHQ7Ci0JaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmX2VkYXRhOwotCWluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kOwotCi0JcGFyc2VfY21kbGluZV9lYXJseShjbWRsaW5lX3ApOwotCXBhcnNlX2Vhcmx5X3BhcmFtKCk7Ci0KIAlzZXR1cF9tZW1vcnkoKTsKIAlzZXR1cF9yZXNvdXJjZXMoKTsKIAlzZXR1cF9sb3djb3JlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCA3ZGJlMDBjLi4yYjg4NDFmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTY2NSw3ICs2NjUsOSBAQAogICAgICAgICBjcHVfbG93Y29yZS0+Y3VycmVudF90YXNrID0gKHVuc2lnbmVkIGxvbmcpIGlkbGU7CiAgICAgICAgIGNwdV9sb3djb3JlLT5jcHVfZGF0YS5jcHVfbnIgPSBjcHU7CiAJZWllaW8oKTsKLQlzaWduYWxfcHJvY2Vzc29yKGNwdSxzaWdwX3Jlc3RhcnQpOworCisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoY3B1LHNpZ3BfcmVzdGFydCkgPT0gc2lncF9idXN5KQorCQl1ZGVsYXkoMTApOwogCiAJd2hpbGUgKCFjcHVfb25saW5lKGNwdSkpCiAJCWNwdV9yZWxheCgpOwpAQCAtNzk5LDkgKzgwMSw3IEBACiAgICAgICAgICAqLwogCXByaW50X2NwdV9pbmZvKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEpOwogCi0gICAgICAgIGZvcihpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNwdV9wb3NzaWJsZShpKSkKLQkJCWNvbnRpbnVlOworICAgICAgICBmb3JfZWFjaF9jcHUoaSkgewogCQlsb3djb3JlX3B0cltpXSA9IChzdHJ1Y3QgX2xvd2NvcmUgKikKIAkJCV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxHRlBfRE1BLCAKIAkJCQkJc2l6ZW9mKHZvaWQqKSA9PSA4ID8gMSA6IDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jIGIvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCmluZGV4IDYwZjgwYTQuLmI5Yjc5NTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYworKysgYi9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKQEAgLTIsOCArMiw3IEBACiAgKiAgYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCiAgKiAgICBPdXQgb2YgbGluZSBzcGlubG9jayBjb2RlLgogICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMjAwNCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA0LCAyMDA2CiAgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSkKICAqLwogCkBAIC00NCw2ICs0Myw4IEBACiAJCQlfZGlhZzQ0KCk7CiAJCQljb3VudCA9IHNwaW5fcmV0cnk7CiAJCX0KKwkJaWYgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxwKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+bG9jaywgMCwgcGMpID09IDApCiAJCQlyZXR1cm47CiAJfQpAQCAtNTYsNiArNTcsOCBAQAogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAKIAl3aGlsZSAoY291bnQtLSA+IDApIHsKKwkJaWYgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxwKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+bG9jaywgMCwgcGMpID09IDApCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC03NCw2ICs3Nyw4IEBACiAJCQlfZGlhZzQ0KCk7CiAJCQljb3VudCA9IHNwaW5fcmV0cnk7CiAJCX0KKwkJaWYgKCFfX3Jhd19yZWFkX2Nhbl9sb2NrKHJ3KSkKKwkJCWNvbnRpbnVlOwogCQlvbGQgPSBydy0+bG9jayAmIDB4N2ZmZmZmZmZVOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgb2xkLCBvbGQgKyAxKSA9PSBvbGQpCiAJCQlyZXR1cm47CkBAIC04OCw2ICs5Myw4IEBACiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIAogCXdoaWxlIChjb3VudC0tID4gMCkgeworCQlpZiAoIV9fcmF3X3JlYWRfY2FuX2xvY2socncpKQorCQkJY29udGludWU7CiAJCW9sZCA9IHJ3LT5sb2NrICYgMHg3ZmZmZmZmZlU7CiAJCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJnJ3LT5sb2NrLCBvbGQsIG9sZCArIDEpID09IG9sZCkKIAkJCXJldHVybiAxOwpAQCAtMTA2LDYgKzExMyw4IEBACiAJCQlfZGlhZzQ0KCk7CiAJCQljb3VudCA9IHNwaW5fcmV0cnk7CiAJCX0KKwkJaWYgKCFfX3Jhd193cml0ZV9jYW5fbG9jayhydykpCisJCQljb250aW51ZTsKIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIDAsIDB4ODAwMDAwMDApID09IDApCiAJCQlyZXR1cm47CiAJfQpAQCAtMTE4LDYgKzEyNyw4IEBACiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIAogCXdoaWxlIChjb3VudC0tID4gMCkgeworCQlpZiAoIV9fcmF3X3dyaXRlX2Nhbl9sb2NrKHJ3KSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgMCwgMHg4MDAwMDAwMCkgPT0gMCkKIAkJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzcy5TIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzLlMKaW5kZXggODhmYzk0Zi4uNWQ1OWUyNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzcy5TCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzcy5TCkBAIC0xOTgsMTIgKzE5OCwxMiBAQAogMDoJc3JzdAklcjIsJXIxCiAJam8JMGIKIAlzYWNmCTAKLQlqaAkxZgkJIyBcMCBmb3VuZCBpbiBzdHJpbmcgPwogCWFoaQklcjIsMQkJIyBzdHJubGVuX3VzZXIgcmVzdWx0IGluY2x1ZGVzIHRoZSBcMAotMToJc2xyCSVyMiwlcjMKKwkJCQkjIG9yIHJldHVybiBjb3VudCsxIGlmIFwwIG5vdCBmb3VuZAorCXNscgklcjIsJXIzCiAJYnIJJXIxNAogMjoJc2FjZgkwCi0JbGhpCSVyMiwtRUZBVUxUCisJc2xyCSVyMiwlcjIJCSMgcmV0dXJuIDAgb24gZXhjZXB0aW9uCiAJYnIJJXIxNAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLmxvbmcJMGIsMmIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2VzczY0LlMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3M2NC5TCmluZGV4IDUwMjE5NzguLjE5YjQxYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2VzczY0LlMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzNjQuUwpAQCAtMTk0LDEyICsxOTQsMTIgQEAKIDA6CXNyc3QJJXIyLCVyMQogCWpvCTBiCiAJc2FjZgkwCi0JamgJMWYJCSMgXDAgZm91bmQgaW4gc3RyaW5nID8KIAlhZ2hpCSVyMiwxCQkjIHN0cm5sZW5fdXNlciByZXN1bHQgaW5jbHVkZXMgdGhlIFwwCi0xOglzbGdyCSVyMiwlcjMKKwkJCQkjIG9yIHJldHVybiBjb3VudCsxIGlmIFwwIG5vdCBmb3VuZAorCXNsZ3IJJXIyLCVyMwogCWJyCSVyMTQKIDI6CXNhY2YJMAotCWxnaGkJJXIyLC1FRkFVTFQKKwlzbGdyCSVyMiwlcjIJCSMgcmV0dXJuIDAgb24gZXhjZXB0aW9uCiAJYnIJJXIxNAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLnF1YWQJMGIsMmIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9jbW0uYyBiL2FyY2gvczM5MC9tbS9jbW0uYwppbmRleCBiMDc1YWI0Li41MTU5NmY0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vY21tLmMKKysrIGIvYXJjaC9zMzkwL21tL2NtbS5jCkBAIC0zMzksMTkgKzMzOSwxOSBAQAogCXsKIAkJLmN0bF9uYW1lCT0gVk1fQ01NX1BBR0VTLAogCQkucHJvY25hbWUJPSAiY21tX3BhZ2VzIiwKLQkJLm1vZGUJCT0gMDYwMCwKKwkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZjbW1fcGFnZXNfaGFuZGxlciwKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gVk1fQ01NX1RJTUVEX1BBR0VTLAogCQkucHJvY25hbWUJPSAiY21tX3RpbWVkX3BhZ2VzIiwKLQkJLm1vZGUJCT0gMDYwMCwKKwkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZjbW1fcGFnZXNfaGFuZGxlciwKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gVk1fQ01NX1RJTUVPVVQsCiAJCS5wcm9jbmFtZQk9ICJjbW1fdGltZW91dCIsCi0JCS5tb2RlCQk9IDA2MDAsCisJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmY21tX3RpbWVvdXRfaGFuZGxlciwKIAl9LAogCXsgLmN0bF9uYW1lID0gMCB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vaW5pdC5jIGIvYXJjaC9zMzkwL21tL2luaXQuYwppbmRleCBkZjk1MzM4Li5hMDU1ODk0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vaW5pdC5jCisrKyBiL2FyY2gvczM5MC9tbS9pbml0LmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pOwogICAgICAgICBmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlmcmVlX3BhZ2UoYWRkcik7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAgICAgICAgIH0KQEAgLTMwNyw3ICszMDcsNyBAQAogICAgICAgICAgICAgICAgIHByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7CiAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7CiAgICAgICAgICAgICAgICAgQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSwgMSk7CisgICAgICAgICAgICAgICAgaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwogICAgICAgICAgICAgICAgIGZyZWVfcGFnZShzdGFydCk7CiAgICAgICAgICAgICAgICAgdG90YWxyYW1fcGFnZXMrKzsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IGU3MzYyMWQuLmU5YjI3NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTM5Miw5ICszOTIsOSBAQAogCiBlbmRtZW51CiAKLXNvdXJjZSAiYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9LY29uZmlnIgorI3NvdXJjZSAiYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9LY29uZmlnIgogCi1zb3VyY2UgImFyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9LY29uZmlnIgorI3NvdXJjZSAiYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL0tjb25maWciCiAKIGNvbmZpZyBTSF9QQ0xLX0ZSRVEKIAlpbnQgIlBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikiCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDY4ODNjMDAuLmI1NmU3OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC0zNSw5ICszNSw4IEBACiAKIAlpZiAoaSA9PSAwKSB7CiAJCXNlcV9wdXRzKHAsICIgICAgICAgICAgICIpOwotCQlmb3IgKGo9MDsgajxOUl9DUFVTOyBqKyspCi0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLGopOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICJDUFUlZCAgICAgICAiLGopOwogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5ZmQxNzIzLi4yMmRjOWMyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGEwNjdhMzQuLmMwZTc5ODQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTQwNCw5ICs0MDQsOCBAQAogewogCWludCBjcHVfaWQ7CiAKLQlmb3IgKGNwdV9pZCA9IDA7IGNwdV9pZCA8IE5SX0NQVVM7IGNwdV9pZCsrKQotCQlpZiAoY3B1X3Bvc3NpYmxlKGNwdV9pZCkpCi0JCQlyZWdpc3Rlcl9jcHUoJmNwdVtjcHVfaWRdLCBjcHVfaWQsIE5VTEwpOworCWZvcl9lYWNoX2NwdShjcHVfaWQpCisJCXJlZ2lzdGVyX2NwdSgmY3B1W2NwdV9pZF0sIGNwdV9pZCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY29uc2lzdGVudC5jIGIvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKaW5kZXggZGYzYTllNC4uZWU3M2UzMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKKysrIGIvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMKQEAgLTIzLDYgKzIzLDcgQEAKIAlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwLCBvcmRlcik7CiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gTlVMTDsKKwlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKIAogCXJldCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAkqaGFuZGxlID0gdmlydF90b19waHlzKHJldCk7CkBAIC0zNyw4ICszOCw2IEBACiAJZW5kICA9IHBhZ2UgKyAoMSA8PCBvcmRlcik7CiAKIAl3aGlsZSAoKytwYWdlIDwgZW5kKSB7Ci0JCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwotCiAJCS8qIEZyZWUgYW55IHVudXNlZCBwYWdlcyAqLwogCQlpZiAocGFnZSA+PSBmcmVlKSB7CiAJCQlfX2ZyZWVfcGFnZShwYWdlKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvc2gvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA2YjdhNzY4Li5hMzU2OGZkIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jCkBAIC04NCwxOCArODQsNiBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBwcm9wZXIgYWxpZ25tZW50IG9mIGlucHV0IGFkZHIgYW5kIGxlbiBwYXJhbWV0ZXJzLgotICovCi1pbnQgaXNfYWxpZ25lZF9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCWlmIChsZW4gJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGFkZHIgJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2luaXQuYyBiL2FyY2gvc2gvbW0vaW5pdC5jCmluZGV4IGUzNDI1NjVmLi43N2I0YTgzIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2luaXQuYworKysgYi9hcmNoL3NoL21tL2luaXQuYwpAQCAtMjczLDcgKzI3Myw3IEBACiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2JlZ2luKTsKIAlmb3IgKDsgYWRkciA8ICh1bnNpZ25lZCBsb25nKSgmX19pbml0X2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShhZGRyKSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwogCQlmcmVlX3BhZ2UoYWRkcik7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJfQpAQCAtMjg2LDcgKzI4Niw3IEBACiAJdW5zaWduZWQgbG9uZyBwOwogCWZvciAocCA9IHN0YXJ0OyBwIDwgZW5kOyBwICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocCkpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UocCksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHApKTsKIAkJZnJlZV9wYWdlKHApOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NoNjQva2VybmVsL2lycS5jCmluZGV4IDlmYzJiNzEuLmQ2OTg3OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaDY0L2tlcm5lbC9pcnEuYwpAQCAtNTMsOSArNTMsOCBAQAogCiAJaWYgKGkgPT0gMCkgewogCQlzZXFfcHV0cyhwLCAiICAgICAgICAgICAiKTsKLQkJZm9yIChqPTA7IGo8TlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvc2g2NC9tbS9odWdldGxicGFnZS5jCmluZGV4IGVkNmE1MDUuLjNkODlmMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvc2g2NC9tbS9odWdldGxicGFnZS5jCkBAIC04NCwxOCArODQsNiBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBwcm9wZXIgYWxpZ25tZW50IG9mIGlucHV0IGFkZHIgYW5kIGxlbiBwYXJhbWV0ZXJzLgotICovCi1pbnQgaXNfYWxpZ25lZF9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCWlmIChsZW4gJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGFkZHIgJiB+SFBBR0VfTUFTSykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbW0vaW5pdC5jIGIvYXJjaC9zaDY0L21tL2luaXQuYwppbmRleCBhNjVlOGJiLi4xMTY5NzU3IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvc2g2NC9tbS9pbml0LmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbik7CiAJZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpOyBhZGRyICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkciksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKIAkJZnJlZV9wYWdlKGFkZHIpOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCX0KQEAgLTE4Niw3ICsxODYsNyBAQAogCXVuc2lnbmVkIGxvbmcgcDsKIAlmb3IgKHAgPSBzdGFydDsgcCA8IGVuZDsgcCArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHApKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHApLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShwKSk7CiAJCWZyZWVfcGFnZShwKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggZjk0NGI1OC4uN2M1OGZjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMjMsNyArMjMsNiBAQAogCiBjb25maWcgU01QCiAJYm9vbCAiU3ltbWV0cmljIG11bHRpLXByb2Nlc3Npbmcgc3VwcG9ydCAoZG9lcyBub3Qgd29yayBvbiBzdW40L3N1bjRjKSIKLQlkZXBlbmRzIG9uIEJST0tFTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUuIElmIHlvdSBoYXZlCiAJICBhIHN5c3RlbSB3aXRoIG9ubHkgb25lIENQVSwgc2F5IE4uIElmIHlvdSBoYXZlIGEgc3lzdGVtIHdpdGggbW9yZQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYwppbmRleCBkMzljOWYyLi40NjBmNzJlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJdW5zaWduZWQgbG9uZyBwbGVuOwogCiAJcGxlbiA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7Ci0JaWYgKChwbGVuICYgKFBBR0VfU0laRS0xKSkgIT0gMCkgQlVHKCk7CisJQlVHX09OKChwbGVuICYgKFBBR0VfU0laRS0xKSkgIT0gMCk7CiAJc3BhcmNfdW5tYXBpb3JhbmdlKHJlcy0+c3RhcnQsIHBsZW4pOwogCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKIH0KQEAgLTUxMiw4ICs1MTIsNyBAQAogZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCiAgICAgaW50IGRpcmVjdGlvbikKIHsKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwogCS8qIElJZXAgaXMgd3JpdGUtdGhyb3VnaCwgbm90IGZsdXNoaW5nLiAqLwogCXJldHVybiB2aXJ0X3RvX3BoeXMocHRyKTsKIH0KQEAgLTUyOCw4ICs1MjcsNyBAQAogdm9pZCBwY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBiYSwgc2l6ZV90IHNpemUsCiAgICAgaW50IGRpcmVjdGlvbikKIHsKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwogCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgewogCQltbXVfaW52YWxfZG1hX2FyZWEoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KGJhKSwKIAkJICAgIChzaXplICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLKTsKQEAgLTU0Miw4ICs1NDAsNyBAQAogZG1hX2FkZHJfdCBwY2lfbWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKIHsKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwogCS8qIElJZXAgaXMgd3JpdGUtdGhyb3VnaCwgbm90IGZsdXNoaW5nLiAqLwogCXJldHVybiBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CiB9CkBAIC01NTEsOCArNTQ4LDcgQEAKIHZvaWQgcGNpX3VubWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAogCQkJZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCiB7Ci0JaWYgKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpCi0JCUJVRygpOworCUJVR19PTihkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKTsKIAkvKiBtbXVfaW52YWxfZG1hX2FyZWEgWFhYICovCiB9CiAKQEAgLTU3NiwxMSArNTcyLDEwIEBACiB7CiAJaW50IG47CiAKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwogCS8qIElJZXAgaXMgd3JpdGUtdGhyb3VnaCwgbm90IGZsdXNoaW5nLiAqLwogCWZvciAobiA9IDA7IG4gPCBuZW50czsgbisrKSB7Ci0JCWlmIChwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpID09IE5VTEwpIEJVRygpOworCQlCVUdfT04ocGFnZV9hZGRyZXNzKHNnLT5wYWdlKSA9PSBOVUxMKTsKIAkJc2ctPmR2bWFfYWRkcmVzcyA9IHZpcnRfdG9fcGh5cyhwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpKTsKIAkJc2ctPmR2bWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAkJc2crKzsKQEAgLTU5NywxMSArNTkyLDEwIEBACiB7CiAJaW50IG47CiAKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwogCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgewogCQlmb3IgKG4gPSAwOyBuIDwgbmVudHM7IG4rKykgewotCQkJaWYgKHBhZ2VfYWRkcmVzcyhzZy0+cGFnZSkgPT0gTlVMTCkgQlVHKCk7CisJCQlCVUdfT04ocGFnZV9hZGRyZXNzKHNnLT5wYWdlKSA9PSBOVUxMKTsKIAkJCW1tdV9pbnZhbF9kbWFfYXJlYSgKIAkJCSAgICAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHNnLT5wYWdlKSwKIAkJCSAgICAoc2ctPmxlbmd0aCArIFBBR0VfU0laRS0xKSAmIFBBR0VfTUFTSyk7CkBAIC02MjIsOCArNjE2LDcgQEAKICAqLwogdm9pZCBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGJhLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKIHsKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwogCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgewogCQltbXVfaW52YWxfZG1hX2FyZWEoKHVuc2lnbmVkIGxvbmcpcGh5c190b192aXJ0KGJhKSwKIAkJICAgIChzaXplICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLKTsKQEAgLTYzMiw4ICs2MjUsNyBAQAogCiB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgYmEsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQogewotCWlmIChkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKQotCQlCVUcoKTsKKwlCVUdfT04oZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSk7CiAJaWYgKGRpcmVjdGlvbiAhPSBQQ0lfRE1BX1RPREVWSUNFKSB7CiAJCW1tdV9pbnZhbF9kbWFfYXJlYSgodW5zaWduZWQgbG9uZylwaHlzX3RvX3ZpcnQoYmEpLAogCQkgICAgKHNpemUgKyBQQUdFX1NJWkUtMSkgJiBQQUdFX01BU0spOwpAQCAtNjUwLDExICs2NDIsMTAgQEAKIHsKIAlpbnQgbjsKIAotCWlmIChkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKQotCQlCVUcoKTsKKwlCVUdfT04oZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSk7CiAJaWYgKGRpcmVjdGlvbiAhPSBQQ0lfRE1BX1RPREVWSUNFKSB7CiAJCWZvciAobiA9IDA7IG4gPCBuZW50czsgbisrKSB7Ci0JCQlpZiAocGFnZV9hZGRyZXNzKHNnLT5wYWdlKSA9PSBOVUxMKSBCVUcoKTsKKwkJCUJVR19PTihwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpID09IE5VTEwpOwogCQkJbW11X2ludmFsX2RtYV9hcmVhKAogCQkJICAgICh1bnNpZ25lZCBsb25nKSBwYWdlX2FkZHJlc3Moc2ctPnBhZ2UpLAogCQkJICAgIChzZy0+bGVuZ3RoICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLKTsKQEAgLTY2NywxMSArNjU4LDEwIEBACiB7CiAJaW50IG47CiAKLQlpZiAoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkKLQkJQlVHKCk7CisJQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwogCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkgewogCQlmb3IgKG4gPSAwOyBuIDwgbmVudHM7IG4rKykgewotCQkJaWYgKHBhZ2VfYWRkcmVzcyhzZy0+cGFnZSkgPT0gTlVMTCkgQlVHKCk7CisJCQlCVUdfT04ocGFnZV9hZGRyZXNzKHNnLT5wYWdlKSA9PSBOVUxMKTsKIAkJCW1tdV9pbnZhbF9kbWFfYXJlYSgKIAkJCSAgICAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHNnLT5wYWdlKSwKIAkJCSAgICAoc2ctPmxlbmd0aCArIFBBR0VfU0laRS0xKSAmIFBBR0VfTUFTSyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lycS5jCmluZGV4IDQxMGI5YTcuLmFhYzhhZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lycS5jCkBAIC0xNTQsOSArMTU0LDExIEBACiBzdHJ1Y3QgaXJxYWN0aW9uIHN0YXRpY19pcnFhY3Rpb25bTUFYX1NUQVRJQ19BTExPQ107CiBpbnQgc3RhdGljX2lycV9jb3VudDsKIAotc3RydWN0IGlycWFjdGlvbiAqaXJxX2FjdGlvbltOUl9JUlFTXSA9IHsKLQlbMCAuLi4gKE5SX0lSUVMtMSldID0gTlVMTAotfTsKK3N0cnVjdCB7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworCWludCBmbGFnczsKK30gc3BhcmNfaXJxW05SX0lSUVNdOworI2RlZmluZSBTUEFSQ19JUlFfSU5QUk9HUkVTUyAxCiAKIC8qIFVzZWQgdG8gcHJvdGVjdCB0aGUgSVJRIGFjdGlvbiBsaXN0cyAqLwogREVGSU5FX1NQSU5MT0NLKGlycV9hY3Rpb25fbG9jayk7CkBAIC0xNzcsMTcgKzE3OSwxNiBAQAogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2FjdGlvbl9sb2NrLCBmbGFncyk7CiAJaWYgKGkgPCBOUl9JUlFTKSB7Ci0JICAgICAgICBhY3Rpb24gPSAqKGkgKyBpcnFfYWN0aW9uKTsKKwkJYWN0aW9uID0gc3BhcmNfaXJxW2ldLmFjdGlvbjsKIAkJaWYgKCFhY3Rpb24pIAogCQkJZ290byBvdXRfdW5sb2NrOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKSB7Ci0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJICAgIGtzdGF0X2NwdShjcHVfbG9naWNhbF9tYXAoaikpLmlycXNbaV0pOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKKwkJCQkgICAga3N0YXRfY3B1KGopLmlycXNbaV0pOwogCQl9CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICVjICVzIiwKQEAgLTIwOCw3ICsyMDksNyBAQAogdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogdG1wID0gTlVMTDsKKwlzdHJ1Y3QgaXJxYWN0aW9uICoqYWN0aW9ucDsKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY3B1X2lycTsKIAkKQEAgLTIyNiw3ICsyMjcsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwogCi0JYWN0aW9uID0gKihjcHVfaXJxICsgaXJxX2FjdGlvbik7CisJYWN0aW9ucCA9ICZzcGFyY19pcnFbY3B1X2lycV0uYWN0aW9uOworCWFjdGlvbiA9ICphY3Rpb25wOwogCiAJaWYgKCFhY3Rpb24tPmhhbmRsZXIpIHsKIAkJcHJpbnRrKCJUcnlpbmcgdG8gZnJlZSBmcmVlIElSUSVkXG4iLGlycSk7CkBAIC0yMzYsNyArMjM4LDcgQEAKIAkJZm9yICg7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KSB7CiAJCQlpZiAoYWN0aW9uLT5kZXZfaWQgPT0gZGV2X2lkKQogCQkJCWJyZWFrOwotCQkJdG1wID0gYWN0aW9uOworCQkJYWN0aW9ucCA9ICZhY3Rpb24tPm5leHQ7CiAJCX0KIAkJaWYgKCFhY3Rpb24pIHsKIAkJCXByaW50aygiVHJ5aW5nIHRvIGZyZWUgZnJlZSBzaGFyZWQgSVJRJWRcbiIsaXJxKTsKQEAgLTI1NSwxMSArMjU3LDggQEAKIAkJICAgICAgIGlycSwgYWN0aW9uLT5uYW1lKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQkKLQlpZiAoYWN0aW9uICYmIHRtcCkKLQkJdG1wLT5uZXh0ID0gYWN0aW9uLT5uZXh0OwotCWVsc2UKLQkJKihjcHVfaXJxICsgaXJxX2FjdGlvbikgPSBhY3Rpb24tPm5leHQ7CisKKwkqYWN0aW9ucCA9IGFjdGlvbi0+bmV4dDsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9hY3Rpb25fbG9jaywgZmxhZ3MpOwogCkBAIC0yNjksNyArMjY4LDcgQEAKIAogCWtmcmVlKGFjdGlvbik7CiAKLQlpZiAoISgqKGNwdV9pcnEgKyBpcnFfYWN0aW9uKSkpCisJaWYgKCFzcGFyY19pcnFbY3B1X2lycV0uYWN0aW9uKQogCQlkaXNhYmxlX2lycShpcnEpOwogCiBvdXRfdW5sb2NrOgpAQCAtMjg4LDggKzI4NywxMSBAQAogI2lmZGVmIENPTkZJR19TTVAKIHZvaWQgc3luY2hyb25pemVfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJpbnRrKCJzeW5jaHJvbml6ZV9pcnEgc2F5czogaW1wbGVtZW50IG1lIVxuIik7Ci0JQlVHKCk7CisJdW5zaWduZWQgaW50IGNwdV9pcnE7CisKKwljcHVfaXJxID0gaXJxICYgKE5SX0lSUVMgLSAxKTsKKwl3aGlsZSAoc3BhcmNfaXJxW2NwdV9pcnFdLmZsYWdzICYgU1BBUkNfSVJRX0lOUFJPR1JFU1MpCisJCWNwdV9yZWxheCgpOwogfQogI2VuZGlmIC8qIFNNUCAqLwogCkBAIC0zMDAsNyArMzAyLDcgQEAKIAl1bnNpZ25lZCBpbnQgY3B1X2lycTsKIAkKIAljcHVfaXJxID0gaXJxICYgKE5SX0lSUVMgLSAxKTsKLQlhY3Rpb24gPSAqKGNwdV9pcnEgKyBpcnFfYWN0aW9uKTsKKwlhY3Rpb24gPSBzcGFyY19pcnFbY3B1X2lycV0uYWN0aW9uOwogCiAgICAgICAgIHByaW50aygiSU8gZGV2aWNlIGludGVycnVwdCwgaXJxID0gJWRcbiIsIGlycSk7CiAgICAgICAgIHByaW50aygiUEMgPSAlMDhseCBOUEMgPSAlMDhseCBGUD0lMDhseFxuIiwgcmVncy0+cGMsIApAQCAtMzMxLDcgKzMzMyw4IEBACiAJaWYoaXJxIDwgMTApCiAJCXNtcDRtX2lycV9yb3RhdGUoY3B1KTsKICNlbmRpZgotCWFjdGlvbiA9ICooaXJxICsgaXJxX2FjdGlvbik7CisJYWN0aW9uID0gc3BhcmNfaXJxW2lycV0uYWN0aW9uOworCXNwYXJjX2lycVtpcnFdLmZsYWdzIHw9IFNQQVJDX0lSUV9JTlBST0dSRVNTOwogCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOwogCWRvIHsKIAkJaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi0+aGFuZGxlcikKQEAgLTMzOSw2ICszNDIsNyBAQAogCQlhY3Rpb24tPmhhbmRsZXIoaXJxLCBhY3Rpb24tPmRldl9pZCwgcmVncyk7CiAJCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKIAl9IHdoaWxlIChhY3Rpb24pOworCXNwYXJjX2lycVtpcnFdLmZsYWdzICY9IH5TUEFSQ19JUlFfSU5QUk9HUkVTUzsKIAllbmFibGVfcGlsX2lycShpcnEpOwogCWlycV9leGl0KCk7CiB9CkBAIC0zOTAsNyArMzk0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYWN0aW9uX2xvY2ssIGZsYWdzKTsKIAotCWFjdGlvbiA9ICooY3B1X2lycSArIGlycV9hY3Rpb24pOworCWFjdGlvbiA9IHNwYXJjX2lycVtjcHVfaXJxXS5hY3Rpb247CiAJaWYoYWN0aW9uKSB7CiAJCWlmKGFjdGlvbi0+ZmxhZ3MgJiBTQV9TSElSUSkKIAkJCXBhbmljKCJUcnlpbmcgdG8gcmVnaXN0ZXIgZmFzdCBpcnEgd2hlbiBhbHJlYWR5IHNoYXJlZC5cbiIpOwpAQCAtNDUzLDcgKzQ1Nyw3IEBACiAJYWN0aW9uLT5kZXZfaWQgPSBOVUxMOwogCWFjdGlvbi0+bmV4dCA9IE5VTEw7CiAKLQkqKGNwdV9pcnEgKyBpcnFfYWN0aW9uKSA9IGFjdGlvbjsKKwlzcGFyY19pcnFbY3B1X2lycV0uYWN0aW9uID0gYWN0aW9uOwogCiAJZW5hYmxlX2lycShpcnEpOwogCkBAIC00NjgsNyArNDcyLDcgQEAKIAkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCiAJCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsIGNvbnN0IGNoYXIgKiBkZXZuYW1lLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbiwgKnRtcCA9IE5VTEw7CisJc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbiwgKiphY3Rpb25wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNwdV9pcnE7CiAJaW50IHJldDsKQEAgLTQ5MSwyMCArNDk1LDIwIEBACiAJICAgIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYWN0aW9uX2xvY2ssIGZsYWdzKTsKIAotCWFjdGlvbiA9ICooY3B1X2lycSArIGlycV9hY3Rpb24pOworCWFjdGlvbnAgPSAmc3BhcmNfaXJxW2NwdV9pcnFdLmFjdGlvbjsKKwlhY3Rpb24gPSAqYWN0aW9ucDsKIAlpZiAoYWN0aW9uKSB7Ci0JCWlmICgoYWN0aW9uLT5mbGFncyAmIFNBX1NISVJRKSAmJiAoaXJxZmxhZ3MgJiBTQV9TSElSUSkpIHsKLQkJCWZvciAodG1wID0gYWN0aW9uOyB0bXAtPm5leHQ7IHRtcCA9IHRtcC0+bmV4dCk7Ci0JCX0gZWxzZSB7CisJCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBTQV9TSElSUSkgfHwgIShpcnFmbGFncyAmIFNBX1NISVJRKSkgewogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JCWlmICgoYWN0aW9uLT5mbGFncyAmIFNBX0lOVEVSUlVQVCkgXiAoaXJxZmxhZ3MgJiBTQV9JTlRFUlJVUFQpKSB7CisJCWlmICgoYWN0aW9uLT5mbGFncyAmIFNBX0lOVEVSUlVQVCkgIT0gKGlycWZsYWdzICYgU0FfSU5URVJSVVBUKSkgewogCQkJcHJpbnRrKCJBdHRlbXB0IHRvIG1peCBmYXN0IGFuZCBzbG93IGludGVycnVwdHMgb24gSVJRJWQgZGVuaWVkXG4iLCBpcnEpOwogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBvdXRfdW5sb2NrOwotCQl9ICAgCi0JCWFjdGlvbiA9IE5VTEw7CQkvKiBPciBlbHNlISAqLworCQl9CisJCWZvciAoIDsgYWN0aW9uOyBhY3Rpb24gPSAqYWN0aW9ucCkKKwkJCWFjdGlvbnAgPSAmYWN0aW9uLT5uZXh0OwogCX0KIAogCS8qIElmIHRoaXMgaXMgZmxhZ2dlZCBhcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0aGVuIHdlIHVzZSBvdXIKQEAgLTUzMywxMCArNTM3LDcgQEAKIAlhY3Rpb24tPm5leHQgPSBOVUxMOwogCWFjdGlvbi0+ZGV2X2lkID0gZGV2X2lkOwogCi0JaWYgKHRtcCkKLQkJdG1wLT5uZXh0ID0gYWN0aW9uOwotCWVsc2UKLQkJKihjcHVfaXJxICsgaXJxX2FjdGlvbikgPSBhY3Rpb247CisJKmFjdGlvbnAgPSBhY3Rpb247CiAKIAllbmFibGVfaXJxKGlycSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKaW5kZXggYzZlNzIxZC4uMmJlODEyMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogY3B1bWFza190IGNwdV9vbmxpbmVfbWFwID0gQ1BVX01BU0tfTk9ORTsKIGNwdW1hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcCA9IENQVV9NQVNLX05PTkU7CitjcHVtYXNrX3Qgc21wX2NvbW1lbmNlZF9tYXNrID0gQ1BVX01BU0tfTk9ORTsKIAogLyogVGhlIG9ubHkgZ3VhcmFudGVlZCBsb2NraW5nIHByaW1pdGl2ZSBhdmFpbGFibGUgb24gYWxsIFNwYXJjCiAgKiBwcm9jZXNzb3JzIGlzICdsZHN0dWIgWyVyZWcgKyBpbW1lZGlhdGVdLCAlZGVzdF9yZWcnIHdoaWNoIGF0b21pY2FsbHkKQEAgLTU3LDExICs1OCw2IEBACiAvKiBVc2VkIHRvIG1ha2UgYml0b3BzIGF0b21pYyAqLwogdW5zaWduZWQgY2hhciBiaXRvcHNfc3BpbmxvY2sgPSAwOwogCi12b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlwaV9jb3VudDsKLQotdm9sYXRpbGUgaW50IHNtcF9wcm9jZXNzX2F2YWlsYWJsZT0wOwotdm9sYXRpbGUgaW50IHNtcF9jb21tZW5jZWQgPSAwOwotCiB2b2lkIF9faW5pdCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKQogewogCWludCBjcHVfbm9kZTsKQEAgLTc5LDYgKzc1LDIyIEBACiAKIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQogeworCWV4dGVybiB2b2lkIHNtcDRtX3NtcF9kb25lKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgYm9nb3N1bSA9IDA7CisJaW50IGNwdSwgbnVtOworCisJZm9yIChjcHUgPSAwLCBudW0gPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykKKwkJaWYgKGNwdV9vbmxpbmUoY3B1KSkgeworCQkJbnVtKys7CisJCQlib2dvc3VtICs9IGNwdV9kYXRhKGNwdSkudWRlbGF5X3ZhbDsKKwkJfQorCisJcHJpbnRrKCJUb3RhbCBvZiAlZCBwcm9jZXNzb3JzIGFjdGl2YXRlZCAoJWx1LiUwMmx1IEJvZ29NSVBTKS5cbiIsCisJCW51bSwgYm9nb3N1bS8oNTAwMDAwL0haKSwKKwkJKGJvZ29zdW0vKDUwMDAvSFopKSUxMDApOworCisJQlVHX09OKHNwYXJjX2NwdV9tb2RlbCAhPSBzdW40bSk7CisJc21wNG1fc21wX2RvbmUoKTsKIH0KIAogdm9pZCBjcHVfcGFuaWModm9pZCkKQEAgLTg5LDE3ICsxMDEsNiBAQAogCiBzdHJ1Y3QgbGludXhfcHJvbV9yZWdpc3RlcnMgc21wX3Blbmd1aW5fY3RhYmxlIF9faW5pdGRhdGEgPSB7IDAgfTsKIAotdm9pZCBfX2luaXQgc21wX2Jvb3RfY3B1cyh2b2lkKQotewotCWV4dGVybiB2b2lkIHNtcDRtX2Jvb3RfY3B1cyh2b2lkKTsKLQlleHRlcm4gdm9pZCBzbXA0ZF9ib290X2NwdXModm9pZCk7Ci0JCi0JaWYgKHNwYXJjX2NwdV9tb2RlbCA9PSBzdW40bSkKLQkJc21wNG1fYm9vdF9jcHVzKCk7Ci0JZWxzZQotCQlzbXA0ZF9ib290X2NwdXMoKTsKLX0KLQogdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCiB7CiAJLyogU2VlIHNwYXJjNjQgKi8KQEAgLTI0Myw5ICsyNDQsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9mX3NldHVwX2xvY2ssIGZsYWdzKTsKLQlmb3IoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJaWYgKGNwdV9wb3NzaWJsZShpKSkKLQkJCWxvYWRfcHJvZmlsZV9pcnEoaSwgbHZsMTRfcmVzb2x1dGlvbiAvIG11bHRpcGxpZXIpOworCWZvcl9lYWNoX2NwdShpKSB7CisJCWxvYWRfcHJvZmlsZV9pcnEoaSwgbHZsMTRfcmVzb2x1dGlvbiAvIG11bHRpcGxpZXIpOwogCQlwcm9mX211bHRpcGxpZXIoaSkgPSBtdWx0aXBsaWVyOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9mX3NldHVwX2xvY2ssIGZsYWdzKTsKQEAgLTI1MywzMyArMjUzLDczIEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heGNwdXMpCit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlleHRlcm4gdm9pZCBzbXA0bV9ib290X2NwdXModm9pZCk7CisJaW50IGksIGNwdWlkLCBuY3B1cywgZXh0cmE7CisKKwlCVUdfT04oc3BhcmNfY3B1X21vZGVsICE9IHN1bjRtKTsKKwlwcmludGsoIkVudGVyaW5nIFNNUCBNb2RlLi4uXG4iKTsKKworCW5jcHVzID0gMTsKKwlleHRyYSA9IDA7CisJZm9yIChpID0gMDsgIWNwdV9maW5kX2J5X2luc3RhbmNlKGksIE5VTEwsICZjcHVpZCk7IGkrKykgeworCQlpZiAoY3B1aWQgPT0gYm9vdF9jcHVfaWQpCisJCQljb250aW51ZTsKKwkJaWYgKGNwdWlkIDwgTlJfQ1BVUyAmJiBuY3B1cysrIDwgbWF4X2NwdXMpCisJCQljcHVfc2V0KGNwdWlkLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJCWVsc2UKKwkJCWV4dHJhKys7CisJfQorCWlmIChtYXhfY3B1cyA+PSBOUl9DUFVTICYmIGV4dHJhKQorCQlwcmludGsoIldhcm5pbmc6IE5SX0NQVVMgaXMgdG9vIGxvdyB0byBzdGFydCBhbGwgY3B1c1xuIik7CisKKwlzbXBfc3RvcmVfY3B1X2luZm8oYm9vdF9jcHVfaWQpOworCisJc21wNG1fYm9vdF9jcHVzKCk7CiB9CiAKIHZvaWQgX19kZXZpbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiB7Ci0JY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJaW50IGNwdWlkID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoY3B1aWQgPj0gTlJfQ1BVUykgeworCQlwcm9tX3ByaW50ZigiU2VyaW91cyBwcm9ibGVtLCBib290IGNwdSBpZCA+PSBOUl9DUFVTXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCWlmIChjcHVpZCAhPSAwKQorCQlwcmludGsoImJvb3QgY3B1IGlkICE9IDAsIHRoaXMgY291bGQgd29yayBidXQgaXMgdW50ZXN0ZWRcbiIpOworCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBjcHVpZDsKKwljcHVfc2V0KGNwdWlkLCBjcHVfb25saW5lX21hcCk7CisJY3B1X3NldChjcHVpZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwogfQogCiBpbnQgX19kZXZpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JcGFuaWMoInNtcCBkb2Vzbid0IHdvcmtcbiIpOworCWV4dGVybiBpbnQgc21wNG1fYm9vdF9vbmVfY3B1KGludCk7CisJaW50IHJldDsKKworCXJldCA9IHNtcDRtX2Jvb3Rfb25lX2NwdShjcHUpOworCisJaWYgKCFyZXQpIHsKKwkJY3B1X3NldChjcHUsIHNtcF9jb21tZW5jZWRfbWFzayk7CisJCXdoaWxlICghY3B1X29ubGluZShjcHUpKQorCQkJbWIoKTsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBzbXBfYm9nbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJaW50IGk7CiAJCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoY3B1X29ubGluZShpKSkKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAiQ3B1JWRCb2dvXHQ6ICVsdS4lMDJsdVxuIiwgCi0JCQkJICAgaSwKLQkJCQkgICBjcHVfZGF0YShpKS51ZGVsYXlfdmFsLyg1MDAwMDAvSFopLAotCQkJCSAgIChjcHVfZGF0YShpKS51ZGVsYXlfdmFsLyg1MDAwL0haKSklMTAwKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJc2VxX3ByaW50ZihtLAorCQkJICAgIkNwdSVkQm9nb1x0OiAlbHUuJTAybHVcbiIsCisJCQkgICBpLAorCQkJICAgY3B1X2RhdGEoaSkudWRlbGF5X3ZhbC8oNTAwMDAwL0haKSwKKwkJCSAgIChjcHVfZGF0YShpKS51ZGVsYXlfdmFsLyg1MDAwL0haKSklMTAwKTsKIAl9CiB9CiAKQEAgLTI4OCw4ICszMjgsNiBAQAogCWludCBpOwogCiAJc2VxX3ByaW50ZihtLCAiU3RhdGU6XG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmIChjcHVfb25saW5lKGkpKQotCQkJc2VxX3ByaW50ZihtLCAiQ1BVJWRcdFx0OiBvbmxpbmVcbiIsIGkpOwotCX0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCisJCXNlcV9wcmludGYobSwgIkNQVSVkXHRcdDogb25saW5lXG4iLCBpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zcGFyY19rc3ltcy5jCmluZGV4IDE5YjI1MzkuLjJjMjFkNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NwYXJjX2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3BhcmNfa3N5bXMuYwpAQCAtMTM2LDEwICsxMzYsNiBAQAogLyogSVJRIGltcGxlbWVudGF0aW9uLiAqLwogRVhQT1JUX1NZTUJPTChzeW5jaHJvbml6ZV9pcnEpOwogCi0vKiBNaXNjIFNNUCBpbmZvcm1hdGlvbiAqLwotRVhQT1JUX1NZTUJPTChfX2NwdV9udW1iZXJfbWFwKTsKLUVYUE9SVF9TWU1CT0woX19jcHVfbG9naWNhbF9tYXApOwotCiAvKiBDUFUgb25saW5lIG1hcCBhbmQgYWN0aXZlIGNvdW50LiAqLwogRVhQT1JUX1NZTUJPTChjcHVfb25saW5lX21hcCk7CiBFWFBPUlRfU1lNQk9MKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKaW5kZXggNTI2MjEzNC4uY2E2NTZkOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMKQEAgLTU0LDcgKzU0LDcgQEAKIHVuc2lnbmVkIGNoYXIgc2J1c190aWRbMzJdOwogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3QgaXJxYWN0aW9uICppcnFfYWN0aW9uW107CitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiAqaXJxX2FjdGlvbltOUl9JUlFTXTsKIGV4dGVybiBzcGlubG9ja190IGlycV9hY3Rpb25fbG9jazsKIAogc3RydWN0IHNidXNfYWN0aW9uIHsKQEAgLTEwMywxMSArMTAzLDkgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKLQkJZm9yICh4ID0gMDsgeCA8IE5SX0NQVVM7IHgrKykgewotCQkJaWYgKGNwdV9vbmxpbmUoeCkpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCSAgICAgICBrc3RhdF9jcHUoY3B1X2xvZ2ljYWxfbWFwKHgpKS5pcnFzW2ldKTsKLQkJfQorCQlmb3JfZWFjaF9vbmxpbmVfY3B1KHgpCisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCisJCQkgICAgICAga3N0YXRfY3B1KGNwdV9sb2dpY2FsX21hcCh4KSkuaXJxc1tpXSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiJWMgJXMiLAogCQkJKGFjdGlvbi0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpID8gJysnIDogJyAnLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwppbmRleCA0MGQ0MjZjLi5iMTQxYjdlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwpAQCAtNDYsMTQgKzQ2LDE2IEBACiBleHRlcm4gaW50IHNtcF9udW1fY3B1czsKIHN0YXRpYyBpbnQgc21wX2hpZ2hlc3RfY3B1OwogZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3B1X2NhbGxpbl9tYXBbTlJfQ1BVU107Ci1leHRlcm4gc3RydWN0IGNwdWluZm9fc3BhcmMgY3B1X2RhdGFbTlJfQ1BVU107CitleHRlcm4gY3B1aW5mb19zcGFyYyBjcHVfZGF0YVtOUl9DUFVTXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOwogZXh0ZXJuIGludCBzbXBfYWN0aXZhdGVkOwogZXh0ZXJuIHZvbGF0aWxlIGludCBfX2NwdV9udW1iZXJfbWFwW05SX0NQVVNdOwogZXh0ZXJuIHZvbGF0aWxlIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsKIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlwaV9jb3VudDsKIGV4dGVybiB2b2xhdGlsZSBpbnQgc21wX3Byb2Nlc3NfYXZhaWxhYmxlOwotZXh0ZXJuIHZvbGF0aWxlIGludCBzbXBfY29tbWVuY2VkOworCitleHRlcm4gY3B1bWFza190IHNtcF9jb21tZW5jZWRfbWFzazsKKwogZXh0ZXJuIGludCBfX3NtcDRkX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKIAogLyogI2RlZmluZSBTTVBfREVCVUcgKi8KQEAgLTEzNiw3ICsxMzgsNyBAQAogCQogCWxvY2FsX2lycV9lbmFibGUoKTsJLyogV2UgZG9uJ3QgYWxsb3cgUElMIDE0IHlldCAqLwogCQotCXdoaWxlKCFzbXBfY29tbWVuY2VkKQorCXdoaWxlICghY3B1X2lzc2V0KGNwdWlkLCBzbXBfY29tbWVuY2VkX21hc2spKQogCQliYXJyaWVyKCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3VuNGRfaW1za19sb2NrLCBmbGFncyk7CkBAIC0yNDksMTEgKzI1MSw5IEBACiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgbG9uZyBib2dvc3VtID0gMDsKIAkJCi0JCWZvcihpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQkJaWYgKGNwdV9pc3NldChpLCBjcHVfcHJlc2VudF9tYXApKSB7Ci0JCQkJYm9nb3N1bSArPSBjcHVfZGF0YShpKS51ZGVsYXlfdmFsOwotCQkJCXNtcF9oaWdoZXN0X2NwdSA9IGk7Ci0JCQl9CisJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGkpIHsKKwkJCWJvZ29zdW0gKz0gY3B1X2RhdGEoaSkudWRlbGF5X3ZhbDsKKwkJCXNtcF9oaWdoZXN0X2NwdSA9IGk7CiAJCX0KIAkJU01QX1BSSU5USygoIlRvdGFsIG9mICVkIFByb2Nlc3NvcnMgYWN0aXZhdGVkICglbHUuJTAybHUgQm9nb01JUFMpLlxuIiwgY3B1Y291bnQgKyAxLCBib2dvc3VtLyg1MDAwMDAvSFopLCAoYm9nb3N1bS8oNTAwMC9IWikpJTEwMCkpOwogCQlwcmludGsoIlRvdGFsIG9mICVkIFByb2Nlc3NvcnMgYWN0aXZhdGVkICglbHUuJTAybHUgQm9nb01JUFMpLlxuIiwKQEAgLTI2NiwxOSArMjY2LDE5IEBACiAKIAkvKiBGcmVlIHVubmVlZGVkIHRyYXAgdGFibGVzICovCiAJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHRyYXBiYXNlX2NwdTEpKTsKLQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UodHJhcGJhc2VfY3B1MSksIDEpOworCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UodHJhcGJhc2VfY3B1MSkpOwogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0cmFwYmFzZV9jcHUxKTsKIAl0b3RhbHJhbV9wYWdlcysrOwogCW51bV9waHlzcGFnZXMrKzsKIAogCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZSh0cmFwYmFzZV9jcHUyKSk7Ci0Jc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHRyYXBiYXNlX2NwdTIpLCAxKTsKKwlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHRyYXBiYXNlX2NwdTIpKTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdHJhcGJhc2VfY3B1Mik7CiAJdG90YWxyYW1fcGFnZXMrKzsKIAludW1fcGh5c3BhZ2VzKys7CiAKIAlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UodHJhcGJhc2VfY3B1MykpOwotCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZSh0cmFwYmFzZV9jcHUzKSwgMSk7CisJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZSh0cmFwYmFzZV9jcHUzKSk7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRyYXBiYXNlX2NwdTMpOwogCXRvdGFscmFtX3BhZ2VzKys7CiAJbnVtX3BoeXNwYWdlcysrOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwppbmRleCBhMjFmMjdkLi43MGIzNzVhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwpAQCAtNDAsMTUgKzQwLDExIEBACiBleHRlcm4gdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCk7CiAKIGV4dGVybiB2b2xhdGlsZSBpbnQgc21wX3Byb2Nlc3NvcnNfcmVhZHk7Ci1leHRlcm4gaW50IHNtcF9udW1fY3B1czsKIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNwdV9jYWxsaW5fbWFwW05SX0NQVVNdOwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYm9vdF9jcHVfaWQ7Ci1leHRlcm4gaW50IHNtcF9hY3RpdmF0ZWQ7Ci1leHRlcm4gdm9sYXRpbGUgaW50IF9fY3B1X251bWJlcl9tYXBbTlJfQ1BVU107Ci1leHRlcm4gdm9sYXRpbGUgaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOwotZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaXBpX2NvdW50OwotZXh0ZXJuIHZvbGF0aWxlIGludCBzbXBfcHJvY2Vzc19hdmFpbGFibGU7Ci1leHRlcm4gdm9sYXRpbGUgaW50IHNtcF9jb21tZW5jZWQ7CisKK2V4dGVybiBjcHVtYXNrX3Qgc21wX2NvbW1lbmNlZF9tYXNrOworCiBleHRlcm4gaW50IF9fc21wNG1fcHJvY2Vzc29yX2lkKHZvaWQpOwogCiAvKiNkZWZpbmUgU01QX0RFQlVHKi8KQEAgLTc3LDggKzczLDYgQEAKIAlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAKLQlzZXRfaXJxX3VkdChib290X2NwdV9pZCk7Ci0KIAkvKiBHZXQgb3VyIGxvY2FsIHRpY2tlciBnb2luZy4gKi8KIAlzbXBfc2V0dXBfcGVyY3B1X3RpbWVyKCk7CiAKQEAgLTk1LDggKzg5LDkgQEAKIAkgKiB0byBjYWxsIHRoZSBzY2hlZHVsZXIgY29kZS4KIAkgKi8KIAkvKiBBbGxvdyBtYXN0ZXIgdG8gY29udGludWUuICovCi0Jc3dhcCgodW5zaWduZWQgbG9uZyAqKSZjcHVfY2FsbGluX21hcFtjcHVpZF0sIDEpOworCXN3YXAoJmNwdV9jYWxsaW5fbWFwW2NwdWlkXSwgMSk7CiAKKwkvKiBYWFg6IFdoYXQncyB1cCB3aXRoIGFsbCB0aGUgZmx1c2hlcz8gKi8KIAlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAJCkBAIC0xMTEsMTMgKzEwNiwxNCBAQAogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwogCWN1cnJlbnQtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwogCi0Jd2hpbGUoIXNtcF9jb21tZW5jZWQpCi0JCWJhcnJpZXIoKTsKLQotCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOwotCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKKwl3aGlsZSAoIWNwdV9pc3NldChjcHVpZCwgc21wX2NvbW1lbmNlZF9tYXNrKSkKKwkJbWIoKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKKworCWNwdV9zZXQoY3B1aWQsIGNwdV9vbmxpbmVfbWFwKTsKKwkvKiBsYXN0IG9uZSBpbiBnZXRzIGFsbCB0aGUgaW50ZXJydXB0cyAoZm9yIHRlc3RpbmcpICovCisJc2V0X2lycV91ZHQoYm9vdF9jcHVfaWQpOwogfQogCiBleHRlcm4gdm9pZCBpbml0X0lSUSh2b2lkKTsKQEAgLTEzNCwxMjAgKzEzMCw5MiBAQAogCiB2b2lkIF9faW5pdCBzbXA0bV9ib290X2NwdXModm9pZCkKIHsKLQlpbnQgY3B1Y291bnQgPSAwOwotCWludCBpLCBtaWQ7Ci0KLQlwcmludGsoIkVudGVyaW5nIFNNUCBNb2RlLi4uXG4iKTsKLQotCWxvY2FsX2lycV9lbmFibGUoKTsKLQljcHVzX2NsZWFyKGNwdV9wcmVzZW50X21hcCk7Ci0KLQlmb3IgKGkgPSAwOyAhY3B1X2ZpbmRfYnlfaW5zdGFuY2UoaSwgTlVMTCwgJm1pZCk7IGkrKykKLQkJY3B1X3NldChtaWQsIGNwdV9wcmVzZW50X21hcCk7Ci0KLQlmb3IoaT0wOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCV9fY3B1X251bWJlcl9tYXBbaV0gPSAtMTsKLQkJX19jcHVfbG9naWNhbF9tYXBbaV0gPSAtMTsKLQl9Ci0KLQlfX2NwdV9udW1iZXJfbWFwW2Jvb3RfY3B1X2lkXSA9IDA7Ci0JX19jcHVfbG9naWNhbF9tYXBbMF0gPSBib290X2NwdV9pZDsKLQljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGJvb3RfY3B1X2lkOwotCi0Jc21wX3N0b3JlX2NwdV9pbmZvKGJvb3RfY3B1X2lkKTsKLQlzZXRfaXJxX3VkdChib290X2NwdV9pZCk7CiAJc21wX3NldHVwX3BlcmNwdV90aW1lcigpOwogCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOwotCWlmKGNwdV9maW5kX2J5X2luc3RhbmNlKDEsIE5VTEwsIE5VTEwpKQotCQlyZXR1cm47ICAvKiBOb3QgYW4gTVAgYm94LiAqLwotCWZvcihpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZihpID09IGJvb3RfY3B1X2lkKQotCQkJY29udGludWU7Cit9CiAKLQkJaWYgKGNwdV9pc3NldChpLCBjcHVfcHJlc2VudF9tYXApKSB7Ci0JCQlleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40bV9jcHVfc3RhcnR1cDsKLQkJCXVuc2lnbmVkIGxvbmcgKmVudHJ5ID0gJnN1bjRtX2NwdV9zdGFydHVwOwotCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCQkJaW50IHRpbWVvdXQ7CitpbnQgc21wNG1fYm9vdF9vbmVfY3B1KGludCBpKQoreworCWV4dGVybiB1bnNpZ25lZCBsb25nIHN1bjRtX2NwdV9zdGFydHVwOworCXVuc2lnbmVkIGxvbmcgKmVudHJ5ID0gJnN1bjRtX2NwdV9zdGFydHVwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwlpbnQgdGltZW91dDsKKwlpbnQgY3B1X25vZGU7CiAKLQkJCS8qIENvb2sgdXAgYW4gaWRsZXIgZm9yIHRoaXMgZ3V5LiAqLwotCQkJcCA9IGZvcmtfaWRsZShpKTsKLQkJCWNwdWNvdW50Kys7Ci0JCQljdXJyZW50X3NldFtpXSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7Ci0JCQkvKiBTZWUgdHJhbXBvbGluZS5TIGZvciBkZXRhaWxzLi4uICovCi0JCQllbnRyeSArPSAoKGktMSkgKiAzKTsKKwljcHVfZmluZF9ieV9taWQoaSwgJmNwdV9ub2RlKTsKIAotCQkJLyoKLQkJCSAqIEluaXRpYWxpemUgdGhlIGNvbnRleHRzIHRhYmxlCi0JCQkgKiBTaW5jZSB0aGUgY2FsbCB0byBwcm9tX3N0YXJ0Y3B1KCkgdHJhc2hlcyB0aGUgc3RydWN0dXJlLAotCQkJICogd2UgbmVlZCB0byByZS1pbml0aWFsaXplIGl0IGZvciBlYWNoIGNwdQotCQkJICovCi0JCQlzbXBfcGVuZ3Vpbl9jdGFibGUud2hpY2hfaW8gPSAwOwotCQkJc21wX3Blbmd1aW5fY3RhYmxlLnBoeXNfYWRkciA9ICh1bnNpZ25lZCBpbnQpIHNybW11X2N0eF90YWJsZV9waHlzOwotCQkJc21wX3Blbmd1aW5fY3RhYmxlLnJlZ19zaXplID0gMDsKKwkvKiBDb29rIHVwIGFuIGlkbGVyIGZvciB0aGlzIGd1eS4gKi8KKwlwID0gZm9ya19pZGxlKGkpOworCWN1cnJlbnRfc2V0W2ldID0gdGFza190aHJlYWRfaW5mbyhwKTsKKwkvKiBTZWUgdHJhbXBvbGluZS5TIGZvciBkZXRhaWxzLi4uICovCisJZW50cnkgKz0gKChpLTEpICogMyk7CiAKLQkJCS8qIHdoaXJyciwgd2hpcnJyLCB3aGlycnJycnJycnIuLi4gKi8KLQkJCXByaW50aygiU3RhcnRpbmcgQ1BVICVkIGF0ICVwXG4iLCBpLCBlbnRyeSk7Ci0JCQlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKLQkJCXByb21fc3RhcnRjcHUoY3B1X2RhdGEoaSkucHJvbV9ub2RlLAotCQkJCSAgICAgICZzbXBfcGVuZ3Vpbl9jdGFibGUsIDAsIChjaGFyICopZW50cnkpOworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgY29udGV4dHMgdGFibGUKKwkgKiBTaW5jZSB0aGUgY2FsbCB0byBwcm9tX3N0YXJ0Y3B1KCkgdHJhc2hlcyB0aGUgc3RydWN0dXJlLAorCSAqIHdlIG5lZWQgdG8gcmUtaW5pdGlhbGl6ZSBpdCBmb3IgZWFjaCBjcHUKKwkgKi8KKwlzbXBfcGVuZ3Vpbl9jdGFibGUud2hpY2hfaW8gPSAwOworCXNtcF9wZW5ndWluX2N0YWJsZS5waHlzX2FkZHIgPSAodW5zaWduZWQgaW50KSBzcm1tdV9jdHhfdGFibGVfcGh5czsKKwlzbXBfcGVuZ3Vpbl9jdGFibGUucmVnX3NpemUgPSAwOwogCi0JCQkvKiB3aGVlZS4uLiBpdCdzIGdvaW5nLi4uICovCi0JCQlmb3IodGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDAwMDsgdGltZW91dCsrKSB7Ci0JCQkJaWYoY3B1X2NhbGxpbl9tYXBbaV0pCi0JCQkJCWJyZWFrOwotCQkJCXVkZWxheSgyMDApOwotCQkJfQotCQkJaWYoY3B1X2NhbGxpbl9tYXBbaV0pIHsKLQkJCQkvKiBBbm90aGVyICJSZWQgU25hcHBlciIuICovCi0JCQkJX19jcHVfbnVtYmVyX21hcFtpXSA9IGk7Ci0JCQkJX19jcHVfbG9naWNhbF9tYXBbaV0gPSBpOwotCQkJfSBlbHNlIHsKLQkJCQljcHVjb3VudC0tOwotCQkJCXByaW50aygiUHJvY2Vzc29yICVkIGlzIHN0dWNrLlxuIiwgaSk7Ci0JCQl9Ci0JCX0KLQkJaWYoIShjcHVfY2FsbGluX21hcFtpXSkpIHsKLQkJCWNwdV9jbGVhcihpLCBjcHVfcHJlc2VudF9tYXApOwotCQkJX19jcHVfbnVtYmVyX21hcFtpXSA9IC0xOwotCQl9Ci0JfQorCS8qIHdoaXJyciwgd2hpcnJyLCB3aGlycnJycnJycnIuLi4gKi8KKwlwcmludGsoIlN0YXJ0aW5nIENQVSAlZCBhdCAlcFxuIiwgaSwgZW50cnkpOwogCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOwotCWlmKGNwdWNvdW50ID09IDApIHsKLQkJcHJpbnRrKCJFcnJvcjogb25seSBvbmUgUHJvY2Vzc29yIGZvdW5kLlxuIik7Ci0JCWNwdV9wcmVzZW50X21hcCA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JfSBlbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBib2dvc3VtID0gMDsKLQkJZm9yKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCQlpZiAoY3B1X2lzc2V0KGksIGNwdV9wcmVzZW50X21hcCkpCi0JCQkJYm9nb3N1bSArPSBjcHVfZGF0YShpKS51ZGVsYXlfdmFsOwotCQl9Ci0JCXByaW50aygiVG90YWwgb2YgJWQgUHJvY2Vzc29ycyBhY3RpdmF0ZWQgKCVsdS4lMDJsdSBCb2dvTUlQUykuXG4iLAotCQkgICAgICAgY3B1Y291bnQgKyAxLAotCQkgICAgICAgYm9nb3N1bS8oNTAwMDAwL0haKSwKLQkJICAgICAgIChib2dvc3VtLyg1MDAwL0haKSklMTAwKTsKLQkJc21wX2FjdGl2YXRlZCA9IDE7Ci0JCXNtcF9udW1fY3B1cyA9IGNwdWNvdW50ICsgMTsKKwlwcm9tX3N0YXJ0Y3B1KGNwdV9ub2RlLAorCQkgICAgICAmc21wX3Blbmd1aW5fY3RhYmxlLCAwLCAoY2hhciAqKWVudHJ5KTsKKworCS8qIHdoZWVlLi4uIGl0J3MgZ29pbmcuLi4gKi8KKwlmb3IodGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDAwMDsgdGltZW91dCsrKSB7CisJCWlmKGNwdV9jYWxsaW5fbWFwW2ldKQorCQkJYnJlYWs7CisJCXVkZWxheSgyMDApOwogCX0KIAorCWlmICghKGNwdV9jYWxsaW5fbWFwW2ldKSkgeworCQlwcmludGsoIlByb2Nlc3NvciAlZCBpcyBzdHVjay5cbiIsIGkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgc21wNG1fc21wX2RvbmUodm9pZCkKK3sKKwlpbnQgaSwgZmlyc3Q7CisJaW50ICpwcmV2OworCisJLyogc2V0dXAgY3B1IGxpc3QgZm9yIGlycSByb3RhdGlvbiAqLworCWZpcnN0ID0gMDsKKwlwcmV2ID0gJmZpcnN0OworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJaWYgKGNwdV9vbmxpbmUoaSkpIHsKKwkJCSpwcmV2ID0gaTsKKwkJCXByZXYgPSAmY3B1X2RhdGEoaSkubmV4dDsKKwkJfQorCX0KKwkqcHJldiA9IGZpcnN0OworCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOworCiAJLyogRnJlZSB1bm5lZWRlZCB0cmFwIHRhYmxlcyAqLwotCWlmICghY3B1X2lzc2V0KGksIGNwdV9wcmVzZW50X21hcCkpIHsKKwlpZiAoIWNwdV9pc3NldCgxLCBjcHVfcHJlc2VudF9tYXApKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZSh0cmFwYmFzZV9jcHUxKSk7Ci0JCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZSh0cmFwYmFzZV9jcHUxKSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UodHJhcGJhc2VfY3B1MSkpOwogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdHJhcGJhc2VfY3B1MSk7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCW51bV9waHlzcGFnZXMrKzsKIAl9CiAJaWYgKCFjcHVfaXNzZXQoMiwgY3B1X3ByZXNlbnRfbWFwKSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UodHJhcGJhc2VfY3B1MikpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UodHJhcGJhc2VfY3B1MiksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHRyYXBiYXNlX2NwdTIpKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRyYXBiYXNlX2NwdTIpOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCQludW1fcGh5c3BhZ2VzKys7CiAJfQogCWlmICghY3B1X2lzc2V0KDMsIGNwdV9wcmVzZW50X21hcCkpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHRyYXBiYXNlX2NwdTMpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHRyYXBiYXNlX2NwdTMpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZSh0cmFwYmFzZV9jcHUzKSk7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0cmFwYmFzZV9jcHUzKTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAkJbnVtX3BoeXNwYWdlcysrOwpAQCAtMjY1LDYgKzIzMyw5IEBACiAgKi8KIHZvaWQgc21wNG1faXJxX3JvdGF0ZShpbnQgY3B1KQogeworCWludCBuZXh0ID0gY3B1X2RhdGEoY3B1KS5uZXh0OworCWlmIChuZXh0ICE9IGNwdSkKKwkJc2V0X2lycV91ZHQobmV4dCk7CiB9CiAKIC8qIENyb3NzIGNhbGxzLCBpbiBvcmRlciB0byB3b3JrIGVmZmljaWVudGx5IGFuZCBhdG9taWNhbGx5IGRvIGFsbApAQCAtMjkxLDcgKzI2Miw3IEBACiAKIAlzbXBfY3B1X2luX21zZ1ttZV0rKzsKIAlpZih0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRiB8fCB0YXJnZXQgPT0gTVNHX0FMTCkgewotCQltYXNrID0gY3B1X3ByZXNlbnRfbWFwOworCQltYXNrID0gY3B1X29ubGluZV9tYXA7CiAJCWlmKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGKQogCQkJY3B1X2NsZWFyKG1lLCBtYXNrKTsKIAkJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0zMTYsOCArMjg3LDggQEAKIAl1bnNpZ25lZCBsb25nIGFyZzM7CiAJdW5zaWduZWQgbG9uZyBhcmc0OwogCXVuc2lnbmVkIGxvbmcgYXJnNTsKLQl1bnNpZ25lZCBsb25nIHByb2Nlc3NvcnNfaW5bTlJfQ1BVU107ICAvKiBTZXQgd2hlbiBpcGkgZW50ZXJlZC4gKi8KLQl1bnNpZ25lZCBsb25nIHByb2Nlc3NvcnNfb3V0W05SX0NQVVNdOyAvKiBTZXQgd2hlbiBpcGkgZXhpdGVkLiAqLworCXVuc2lnbmVkIGxvbmcgcHJvY2Vzc29yc19pbltTVU40TV9OQ1BVU107ICAvKiBTZXQgd2hlbiBpcGkgZW50ZXJlZC4gKi8KKwl1bnNpZ25lZCBsb25nIHByb2Nlc3NvcnNfb3V0W1NVTjRNX05DUFVTXTsgLyogU2V0IHdoZW4gaXBpIGV4aXRlZC4gKi8KIH0gY2NhbGxfaW5mbzsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhjcm9zc19jYWxsX2xvY2spOwpAQCAtMzI2LDggKzI5Nyw3IEBACiB2b2lkIHNtcDRtX2Nyb3NzX2NhbGwoc21wZnVuY190IGZ1bmMsIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLAogCQkgICAgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQsIHVuc2lnbmVkIGxvbmcgYXJnNSkKIHsKLQlpZihzbXBfcHJvY2Vzc29yc19yZWFkeSkgewotCQlyZWdpc3RlciBpbnQgbmNwdXMgPSBzbXBfbnVtX2NwdXM7CisJCXJlZ2lzdGVyIGludCBuY3B1cyA9IFNVTjRNX05DUFVTOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjcm9zc19jYWxsX2xvY2ssIGZsYWdzKTsKQEAgLTM0Miw3ICszMTIsNyBAQAogCiAJCS8qIEluaXQgcmVjZWl2ZS9jb21wbGV0ZSBtYXBwaW5nLCBwbHVzIGZpcmUgdGhlIElQSSdzIG9mZi4gKi8KIAkJewotCQkJY3B1bWFza190IG1hc2sgPSBjcHVfcHJlc2VudF9tYXA7CisJCQljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOwogCQkJcmVnaXN0ZXIgaW50IGk7CiAKIAkJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOwpAQCAtMzc1LDcgKzM0NSw2IEBACiAJCX0KIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcm9zc19jYWxsX2xvY2ssIGZsYWdzKTsKLQl9CiB9CiAKIC8qIFJ1bm5pbmcgY3Jvc3MgY2FsbHMuICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2dlbmVyaWMuYyBiL2FyY2gvc3BhcmMvbW0vZ2VuZXJpYy5jCmluZGV4IDJjYjA3MjguLjFlZjdmYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vZ2VuZXJpYy5jCisrKyBiL2FyY2gvc3BhcmMvbW0vZ2VuZXJpYy5jCkBAIC03Niw3ICs3Niw2IEBACiAJdm1hLT52bV9wZ29mZiA9IChvZmZzZXQgPj4gUEFHRV9TSElGVCkgfAogCQkoKHVuc2lnbmVkIGxvbmcpc3BhY2UgPDwgMjhVTCk7CiAKLQlwcm90ID0gX19wZ3Byb3QocGdfaW9iaXRzKTsKIAlvZmZzZXQgLT0gZnJvbTsKIAlkaXIgPSBwZ2Rfb2Zmc2V0KG1tLCBmcm9tKTsKIAlmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIGJlZywgZW5kKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vaW5pdC5jIGIvYXJjaC9zcGFyYy9tbS9pbml0LmMKaW5kZXggYzAzYmFiYS4uODk4NjY5NyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9pbml0LmMKQEAgLTM4Myw3ICszODMsNyBAQAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHRtcCk7CiAKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQlpbml0X3BhZ2VfY291bnQocGFnZSk7CiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQl0b3RhbGhpZ2hfcGFnZXMrKzsKIAl9CkBAIC00ODAsNyArNDgwLDcgQEAKIAkJcCA9IHZpcnRfdG9fcGFnZShhZGRyKTsKIAogCQlDbGVhclBhZ2VSZXNlcnZlZChwKTsKLQkJc2V0X3BhZ2VfY291bnQocCwgMSk7CisJCWluaXRfcGFnZV9jb3VudChwKTsKIAkJX19mcmVlX3BhZ2UocCk7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCW51bV9waHlzcGFnZXMrKzsKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCQlzdHJ1Y3QgcGFnZSAqcCA9IHZpcnRfdG9fcGFnZShzdGFydCk7CiAKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQocCk7Ci0JCXNldF9wYWdlX2NvdW50KHAsIDEpOworCQlpbml0X3BhZ2VfY291bnQocCk7CiAJCV9fZnJlZV9wYWdlKHApOwogCQludW1fcGh5c3BhZ2VzKys7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9sb2FkbW11LmMgYi9hcmNoL3NwYXJjL21tL2xvYWRtbXUuYwppbmRleCBlOWY5NTcxLi4zNmI0ZDI0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2xvYWRtbXUuYworKysgYi9hcmNoL3NwYXJjL21tL2xvYWRtbXUuYwpAQCAtMjIsOCArMjIsNiBAQAogc3RydWN0IGN0eF9saXN0IGN0eF9mcmVlOwogc3RydWN0IGN0eF9saXN0IGN0eF91c2VkOwogCi11bnNpZ25lZCBpbnQgcGdfaW9iaXRzOwotCiBleHRlcm4gdm9pZCBsZF9tbXVfc3VuNGModm9pZCk7CiBleHRlcm4gdm9pZCBsZF9tbXVfc3JtbXUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwppbmRleCBjNjY0Yjk2Li41OGM2NWNjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCkBAIC0xMzAyLDcgKzEzMDIsMTIgQEAKIAogCWZsdXNoX2NhY2hlX2FsbCgpOwogCXNybW11X3NldF9jdGFibGVfcHRyKCh1bnNpZ25lZCBsb25nKXNybW11X2N0eF90YWJsZV9waHlzKTsKKyNpZmRlZiBDT05GSUdfU01QCisJLyogU3RvcCBmcm9tIGhhbmdpbmcgaGVyZS4uLiAqLworCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKKyNlbHNlCiAJZmx1c2hfdGxiX2FsbCgpOworI2VuZGlmCiAJcG9rZV9zcm1tdSgpOwogCiAjaWZkZWYgQ09ORklHX1NVTl9JTwpAQCAtMTQxOSw2ICsxNDI0LDcgQEAKIAkJCQltYXhfc2l6ZSA9IHZhY19jYWNoZV9zaXplOwogCQkJaWYodmFjX2xpbmVfc2l6ZSA8IG1pbl9saW5lX3NpemUpCiAJCQkJbWluX2xpbmVfc2l6ZSA9IHZhY19saW5lX3NpemU7CisJCQkvL0ZJWE1FOiBjcHVzIG5vdCBjb250aWd1b3VzISEKIAkJCWNwdSsrOwogCQkJaWYgKGNwdSA+PSBOUl9DUFVTIHx8ICFjcHVfb25saW5lKGNwdSkpCiAJCQkJYnJlYWs7CkBAIC0yMTMwLDYgKzIxMzYsMTMgQEAKIAlyZXR1cm4gcHRlX3ZhbChwdGUpID4+IFNSTU1VX1BURV9GSUxFX1NISUZUOwogfQogCitzdGF0aWMgcGdwcm90X3Qgc3JtbXVfcGdwcm90X25vbmNhY2hlZChwZ3Byb3RfdCBwcm90KQoreworCXByb3QgJj0gfl9fcGdwcm90KFNSTU1VX0NBQ0hFKTsKKworCXJldHVybiBwcm90OworfQorCiAvKiBMb2FkIHVwIHJvdXRpbmVzIGFuZCBjb25zdGFudHMgZm9yIHN1bjRtIGFuZCBzdW40ZCBtbXUgKi8KIHZvaWQgX19pbml0IGxkX21tdV9zcm1tdSh2b2lkKQogewpAQCAtMjE1MCw5ICsyMTYzLDkgQEAKIAlCVEZJWFVQU0VUX0lOVChwYWdlX3JlYWRvbmx5LCBwZ3Byb3RfdmFsKFNSTU1VX1BBR0VfUkRPTkxZKSk7CiAJQlRGSVhVUFNFVF9JTlQocGFnZV9rZXJuZWwsIHBncHJvdF92YWwoU1JNTVVfUEFHRV9LRVJORUwpKTsKIAlwYWdlX2tlcm5lbCA9IHBncHJvdF92YWwoU1JNTVVfUEFHRV9LRVJORUwpOwotCXBnX2lvYml0cyA9IFNSTU1VX1ZBTElEIHwgU1JNTVVfV1JJVEUgfCBTUk1NVV9SRUY7CiAKIAkvKiBGdW5jdGlvbnMgKi8KKwlCVEZJWFVQU0VUX0NBTEwocGdwcm90X25vbmNhY2hlZCwgc3JtbXVfcGdwcm90X25vbmNhY2hlZCwgQlRGSVhVUENBTExfTk9STSk7CiAjaWZuZGVmIENPTkZJR19TTVAJCiAJQlRGSVhVUFNFVF9DQUxMKF9fX3hjaGczMiwgX19feGNoZzMyX3N1bjRtZCwgQlRGSVhVUENBTExfU1dBUEcxRzIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3N1bjRjLmMgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKaW5kZXggNzMxZjE5Ni4uNDlmMjhjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3VuNGMuYwpAQCAtMTU4OSw3ICsxNTg5LDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdW40Y19tYXBpb2FkZHIodW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyB2aXJ0X2FkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBwYWdlX2VudHJ5OworCXVuc2lnbmVkIGxvbmcgcGFnZV9lbnRyeSwgcGdfaW9iaXRzOworCisJcGdfaW9iaXRzID0gX1NVTjRDX1BBR0VfUFJFU0VOVCB8IF9TVU40Q19SRUFEQUJMRSB8IF9TVU40Q19XUklURUFCTEUgfAorCQkgICAgX1NVTjRDX1BBR0VfSU8gfCBfU1VONENfUEFHRV9OT0NBQ0hFOwogCiAJcGFnZV9lbnRyeSA9ICgocGh5c2FkZHIgPj4gUEFHRV9TSElGVCkgJiBTVU40Q19QRk5fTUFTSyk7CiAJcGFnZV9lbnRyeSB8PSAoKHBnX2lvYml0cyB8IF9TVU40Q19QQUdFX1BSSVYpICYgfihfU1VONENfUEFHRV9QUkVTRU5UKSk7CkBAIC0yMTM0LDYgKzIxMzcsMTMgQEAKIAlwcmludGsoIlNVTjRDOiAlZCBtbXUgZW50cmllcyBmb3IgdGhlIGtlcm5lbFxuIiwgY250KTsKIH0KIAorc3RhdGljIHBncHJvdF90IHN1bjRjX3BncHJvdF9ub25jYWNoZWQocGdwcm90X3QgcHJvdCkKK3sKKwlwcm90IHw9IF9fcGdwcm90KF9TVU40Q19QQUdFX0lPIHwgX1NVTjRDX1BBR0VfTk9DQUNIRSk7CisKKwlyZXR1cm4gcHJvdDsKK30KKwogLyogTG9hZCB1cCByb3V0aW5lcyBhbmQgY29uc3RhbnRzIGZvciBzdW40YyBtbXUgKi8KIHZvaWQgX19pbml0IGxkX21tdV9zdW40Yyh2b2lkKQogewpAQCAtMjE1NiwxMCArMjE2Niw5IEBACiAJQlRGSVhVUFNFVF9JTlQocGFnZV9yZWFkb25seSwgcGdwcm90X3ZhbChTVU40Q19QQUdFX1JFQURPTkxZKSk7CiAJQlRGSVhVUFNFVF9JTlQocGFnZV9rZXJuZWwsIHBncHJvdF92YWwoU1VONENfUEFHRV9LRVJORUwpKTsKIAlwYWdlX2tlcm5lbCA9IHBncHJvdF92YWwoU1VONENfUEFHRV9LRVJORUwpOwotCXBnX2lvYml0cyA9IF9TVU40Q19QQUdFX1BSRVNFTlQgfCBfU1VONENfUkVBREFCTEUgfCBfU1VONENfV1JJVEVBQkxFIHwKLQkJICAgIF9TVU40Q19QQUdFX0lPIHwgX1NVTjRDX1BBR0VfTk9DQUNIRTsKIAogCS8qIEZ1bmN0aW9ucyAqLworCUJURklYVVBTRVRfQ0FMTChwZ3Byb3Rfbm9uY2FjaGVkLCBzdW40Y19wZ3Byb3Rfbm9uY2FjaGVkLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoX19feGNoZzMyLCBfX194Y2hnMzJfc3VuNGMsIEJURklYVVBDQUxMX05PUk0pOwogCUJURklYVVBTRVRfQ0FMTChkb19jaGVja19wZ3RfY2FjaGUsIHN1bjRjX2NoZWNrX3BndF9jYWNoZSwgQlRGSVhVUENBTExfTk9STSk7CiAJCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCmluZGV4IGFiNzMzYmUuLjI2N2FmZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnCkBAIC0xNzUsMTcgKzE3NSwyNiBAQAogCWJvb2wgIjRNQiIKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzUxMksKLQlkZXBlbmRzIG9uICFTUEFSQzY0X1BBR0VfU0laRV80TUIKKwlkZXBlbmRzIG9uICFTUEFSQzY0X1BBR0VfU0laRV80TUIgJiYgIVNQQVJDNjRfUEFHRV9TSVpFXzUxMktCCiAJYm9vbCAiNTEySyIKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0SwotCWRlcGVuZHMgb24gIVNQQVJDNjRfUEFHRV9TSVpFXzRNQiAmJiAhU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IKKwlkZXBlbmRzIG9uICFTUEFSQzY0X1BBR0VfU0laRV80TUIgJiYgIVNQQVJDNjRfUEFHRV9TSVpFXzUxMktCICYmICFTUEFSQzY0X1BBR0VfU0laRV82NEsKIAlib29sICI2NEsiCiAKIGVuZGNob2ljZQogCiBlbmRtZW51CiAKK2NvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUCisJZGVmX2Jvb2wgeQorCitjb25maWcgTEFSR0VfQUxMT0NTCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGNvbmZpZyBHRU5FUklDX0lTQV9ETUEKQEAgLTM1MCw2ICszNTksMTUgQEAKIAogZW5kbWVudQogCitjb25maWcgU0NIRURfU01UCisJYm9vbCAiU01UIChIeXBlcnRocmVhZGluZykgc2NoZWR1bGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTTVAKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTTVQgc2NoZWR1bGVyIHN1cHBvcnQgaW1wcm92ZXMgdGhlIENQVSBzY2hlZHVsZXIncyBkZWNpc2lvbiBtYWtpbmcKKwkgIHdoZW4gZGVhbGluZyB3aXRoIFVsdHJhU1BBUkMgY3B1cyBhdCBhIGNvc3Qgb2Ygc2xpZ2h0bHkgaW5jcmVhc2VkCisJICBvdmVyaGVhZCBpbiBzb21lIHBsYWNlcy4gSWYgdW5zdXJlIHNheSBOIGhlcmUuCisKIGNvbmZpZyBDTURMSU5FX0JPT0wKIAlib29sICJEZWZhdWx0IGJvb3Rsb2FkZXIga2VybmVsIGFyZ3VtZW50cyIKIApAQCAtMzgzLDYgKzQwMSw3IEBACiAKIGNvbmZpZyBLUFJPQkVTCiAJYm9vbCAiS3Byb2JlcyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBNT0RVTEVTCiAJaGVscAogCSAgS3Byb2JlcyBhbGxvd3MgeW91IHRvIHRyYXAgYXQgYWxtb3N0IGFueSBrZXJuZWwgYWRkcmVzcyBhbmQKIAkgIGV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbi4gIHJlZ2lzdGVyX2twcm9iZSgpIGVzdGFibGlzaGVzCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCmluZGV4IDNlMzFiZTQuLmFmZTBhNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnCkBAIC0yNCw3ICsyNCw3IEBACiAJYm9vbCAiRGVidWcgQk9PVE1FTSBpbml0aWFsaXphdGlvbiIKIAogY29uZmlnIERFQlVHX1BBR0VBTExPQwotCWJvb2wgIlBhZ2UgYWxsb2MgZGVidWdnaW5nIgorCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFTT0ZUV0FSRV9TVVNQRU5ECiAJaGVscAogCSAgVW5tYXAgcGFnZXMgZnJvbSB0aGUga2VybmVsIGxpbmVhciBtYXBwaW5nIGFmdGVyIGZyZWVfcGFnZXMoKS4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcgYi9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCmluZGV4IDA2OWQ0OTcuLmY4MTlhOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzIKLSMgVHVlIEZlYiAgNyAxNzo0NzoxOCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYKKyMgTW9uIE1hciAyMCAwMToyMzoyMSAyMDA2CiAjCiBDT05GSUdfU1BBUkM9eQogQ09ORklHX1NQQVJDNjQ9eQpAQCAtMTE1LDE0ICsxMTUsMjAgQEAKIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUI9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEsgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15CitDT05GSUdfTEFSR0VfQUxMT0NTPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQorQ09ORklHX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQogQ09ORklHX1NCVVM9eQogQ09ORklHX1NCVVNDSEFSPXkKQEAgLTY1NSw2ICs2NjEsNyBAQAogQ09ORklHX1NFUklBTF9TVU5TVT15CiBDT05GSUdfU0VSSUFMX1NVTlNVX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9TVU5TQUI9bQorQ09ORklHX1NFUklBTF9TVU5IVj15CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CkBAIC0xMTE2LDExICsxMTIzLDcgQEAKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKLSMKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiAjCiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDgzZDY3ZWIuLjZmNjgxNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTEsMTAgKzExLDEyIEBACiAJCSAgIHRyYXBzLm8gZGV2aWNlcy5vIGF1eGlvLm8gdW5hX2FzbS5vIFwKIAkJICAgaXJxLm8gcHRyYWNlLm8gdGltZS5vIHN5c19zcGFyYy5vIHNpZ25hbC5vIFwKIAkJICAgdW5hbGlnbmVkLm8gY2VudHJhbC5vIHBjaS5vIHN0YXJmaXJlLm8gc2VtYXBob3JlLm8gXAotCQkgICBwb3dlci5vIHNidXMubyBpb21tdV9jb21tb24ubyBzcGFyYzY0X2tzeW1zLm8gY2htYy5vCisJCSAgIHBvd2VyLm8gc2J1cy5vIGlvbW11X2NvbW1vbi5vIHNwYXJjNjRfa3N5bXMubyBjaG1jLm8gXAorCQkgICB2aXNlbXVsLm8KIAogb2JqLSQoQ09ORklHX1BDSSkJICs9IGVidXMubyBpc2EubyBwY2lfY29tbW9uLm8gcGNpX2lvbW11Lm8gXAotCQkJICAgIHBjaV9wc3ljaG8ubyBwY2lfc2FicmUubyBwY2lfc2NoaXpvLm8KKwkJCSAgICBwY2lfcHN5Y2hvLm8gcGNpX3NhYnJlLm8gcGNpX3NjaGl6by5vIFwKKwkJCSAgICBwY2lfc3VuNHYubyBwY2lfc3VuNHZfYXNtLm8KIG9iai0kKENPTkZJR19TTVApCSArPSBzbXAubyB0cmFtcG9saW5lLm8KIG9iai0kKENPTkZJR19TUEFSQzMyX0NPTVBBVCkgKz0gc3lzMzIubyBzeXNfc3BhcmMzMi5vIHNpZ25hbDMyLm8KIG9iai0kKENPTkZJR19CSU5GTVRfRUxGMzIpICs9IGJpbmZtdF9lbGYzMi5vCkBAIC0zOCw1ICs0MCw1IEBACiAgIENNT0RFTF9DRkxBRyA6PSAtbTY0IC1tY21vZGVsPW1lZGxvdwogZW5kaWYKIAotaGVhZC5vOiBoZWFkLlMgdHRhYmxlLlMgaXRsYl9iYXNlLlMgZHRsYl9iYXNlLlMgZHRsYl9iYWNrZW5kLlMgZHRsYl9wcm90LlMgXAoraGVhZC5vOiBoZWFkLlMgdHRhYmxlLlMgaXRsYl9taXNzLlMgZHRsYl9taXNzLlMga3RsYi5TIHRzYi5TIFwKIAlldHJhcC5TIHJ0cmFwLlMgd2luZml4dXAuUyBlbnRyeS5TCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2JpbmZtdF9hb3V0MzIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvYmluZm10X2FvdXQzMi5jCmluZGV4IDIwMmE4MGMuLmQ3Y2FhNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYmluZm10X2FvdXQzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvYmluZm10X2FvdXQzMi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAogc3RhdGljIGludCBsb2FkX2FvdXQzMl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwogc3RhdGljIGludCBsb2FkX2FvdXQzMl9saWJyYXJ5KHN0cnVjdCBmaWxlKik7CkBAIC0yMzgsNiArMjM5LDggQEAKIAkJKGN1cnJlbnQtPm1tLT5zdGFydF9kYXRhID0gTl9EQVRBRERSKGV4KSk7CiAJY3VycmVudC0+bW0tPmJyayA9IGV4LmFfYnNzICsKIAkJKGN1cnJlbnQtPm1tLT5zdGFydF9icmsgPSBOX0JTU0FERFIoZXgpKTsKKwljdXJyZW50LT5tbS0+ZnJlZV9hcmVhX2NhY2hlID0gY3VycmVudC0+bW0tPm1tYXBfYmFzZTsKKwljdXJyZW50LT5tbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CiAKIAljdXJyZW50LT5tbS0+bW1hcCA9IE5VTEw7CiAJY29tcHV0ZV9jcmVkcyhicHJtKTsKQEAgLTMyOSwxNSArMzMyLDggQEAKIAogCWN1cnJlbnQtPm1tLT5zdGFydF9zdGFjayA9CiAJCSh1bnNpZ25lZCBsb25nKSBjcmVhdGVfYW91dDMyX3RhYmxlcygoY2hhciBfX3VzZXIgKilicHJtLT5wLCBicHJtKTsKLQlpZiAoIShvcmlnX3Rocl9mbGFncyAmIF9USUZfMzJCSVQpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcGdkX2NhY2hlID0gZ2V0X3BnZF9jYWNoZShjdXJyZW50LT5tbS0+cGdkKTsKKwl0c2JfY29udGV4dF9zd2l0Y2goY3VycmVudC0+bW0pOwogCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhXHQlMCwgWyUxXSAlMlxuXHQiCi0JCQkJICAgICAibWVtYmFyICNTeW5jIgotCQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkJICAgICA6ICJyIiAocGdkX2NhY2hlKSwKLQkJCQkgICAgICAgInIiIChUU0JfUkVHKSwgImkiIChBU0lfRE1NVSkpOwotCX0KIAlzdGFydF90aHJlYWQzMihyZWdzLCBleC5hX2VudHJ5LCBjdXJyZW50LT5tbS0+c3RhcnRfc3RhY2spOwogCWlmIChjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKQogCQlzZW5kX3NpZyhTSUdUUkFQLCBjdXJyZW50LCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYmluZm10X2VsZjMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2JpbmZtdF9lbGYzMi5jCmluZGV4IGExYTEyZDIuLjhhMmFiY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9iaW5mbXRfZWxmMzIuYwpAQCAtMTUzLDcgKzE1Myw5IEBACiAjdW5kZWYgTU9EVUxFX0RFU0NSSVBUSU9OCiAjdW5kZWYgTU9EVUxFX0FVVEhPUgogCisjaW5jbHVkZSA8YXNtL2Eub3V0Lmg+CisKICN1bmRlZiBUQVNLX1NJWkUKLSNkZWZpbmUgVEFTS19TSVpFIDB4ZjAwMDAwMDAKKyNkZWZpbmUgVEFTS19TSVpFIFNUQUNLX1RPUDMyCiAKICNpbmNsdWRlICIuLi8uLi8uLi9mcy9iaW5mbXRfZWxmLmMiCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2NwdS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jcHUuYwppbmRleCAwMGVlZDg4Li4xMWNjMGNhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2NwdS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvY3B1LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KKyNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KIAogREVGSU5FX1BFUl9DUFUoY3B1aW5mb19zcGFyYywgX19jcHVfZGF0YSkgPSB7IDAgfTsKIApAQCAtNzEsNiArNzIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIHZlciwgZnB1X3ZlcnMsIG1hbnVmLCBpbXBsLCBmcHJzOwogCWludCBpOwogCQorCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CisJCXNwYXJjX2NwdV90eXBlID0gIlVsdHJhU3BhcmMgVDEgKE5pYWdhcmEpIjsKKwkJc3BhcmNfZnB1X3R5cGUgPSAiVWx0cmFTcGFyYyBUMSBpbnRlZ3JhdGVkIEZQVSI7CisJCXJldHVybjsKKwl9CisKIAlmcHJzID0gZnByc19yZWFkKCk7CiAJZnByc193cml0ZShGUFJTX0ZFRik7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyZHByICUldmVyLCAlMDsgc3R4ICUlZnNyLCBbJTFdIgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9kZXZpY2VzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYwppbmRleCBkZjlhMWNhLi4wMDdlODkyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2RldmljZXMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgpAQCAtMjAsNiArMjEsOCBAQAogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CisjaW5jbHVkZSA8YXNtL3ZkZXYuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAKIC8qIFVzZWQgdG8gc3luY2hyb25pemUgYWNjZXNlcyB0byBOYXRTZW1pIFNVUEVSIEkvTyBjaGlwIGNvbmZpZ3VyZQogICogb3BlcmF0aW9ucyBpbiBhc20vbnM4NzMwMy5oCkBAIC0yOSwxMyArMzIsMTU4IEBACiBleHRlcm4gdm9pZCBjcHVfcHJvYmUodm9pZCk7CiBleHRlcm4gdm9pZCBjZW50cmFsX3Byb2JlKHZvaWQpOwogCi1zdGF0aWMgY2hhciAqY3B1X21pZF9wcm9wKHZvaWQpCit1MzIgc3VuNHZfdmRldl9kZXZoYW5kbGU7CitpbnQgc3VuNHZfdmRldl9yb290OworCitzdHJ1Y3QgdmRldl9pbnRtYXAgeworCXVuc2lnbmVkIGludCBwaHlzOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IGNub2RlOworCXVuc2lnbmVkIGludCBjaW50ZXJydXB0OworfTsKKworc3RydWN0IHZkZXZfaW50bWFzayB7CisJdW5zaWduZWQgaW50IHBoeXM7CisJdW5zaWduZWQgaW50IGludGVycnVwdDsKKwl1bnNpZ25lZCBpbnQgX191bnVzZWQ7Cit9OworCitzdGF0aWMgc3RydWN0IHZkZXZfaW50bWFwICp2ZGV2X2ludG1hcDsKK3N0YXRpYyBpbnQgdmRldl9udW1faW50bWFwOworc3RhdGljIHN0cnVjdCB2ZGV2X2ludG1hc2sgdmRldl9pbnRtYXNrOworCitzdGF0aWMgdm9pZCBfX2luaXQgc3VuNHZfdmlydHVhbF9kZXZpY2VfcHJvYmUodm9pZCkKK3sKKwlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyByZWdzOworCXN0cnVjdCB2ZGV2X2ludG1hcCAqaXA7CisJaW50IG5vZGUsIHN6LCBlcnI7CisKKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikKKwkJcmV0dXJuOworCisJbm9kZSA9IHByb21fZ2V0Y2hpbGQocHJvbV9yb290X25vZGUpOworCW5vZGUgPSBwcm9tX3NlYXJjaHNpYmxpbmdzKG5vZGUsICJ2aXJ0dWFsLWRldmljZXMiKTsKKwlpZiAoIW5vZGUpIHsKKwkJcHJvbV9wcmludGYoIlNVTjRWOiBGYXRhbCBlcnJvciwgbm8gdmlydHVhbC1kZXZpY2VzIG5vZGUuXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJc3VuNHZfdmRldl9yb290ID0gbm9kZTsKKworCXByb21fZ2V0cHJvcGVydHkobm9kZSwgInJlZyIsIChjaGFyICopJnJlZ3MsIHNpemVvZihyZWdzKSk7CisJc3VuNHZfdmRldl9kZXZoYW5kbGUgPSAocmVncy5waHlzX2FkZHIgPj4gMzJVTCkgJiAweDBmZmZmZmZmOworCisJc3ogPSBwcm9tX2dldHByb3BsZW4obm9kZSwgImludGVycnVwdC1tYXAiKTsKKwlpZiAoc3ogPD0gMCkgeworCQlwcm9tX3ByaW50ZigiU1VONFY6IEVycm9yLCBubyB2ZGV2IGludGVycnVwdC1tYXAuXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJaWYgKChzeiAlIHNpemVvZigqaXApKSAhPSAwKSB7CisJCXByb21fcHJpbnRmKCJTVU40VjogQm9ndXMgaW50ZXJydXB0LW1hcCBwcm9wZXJ0eSBzaXplICVkXG4iLAorCQkJICAgIHN6KTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJdmRldl9pbnRtYXAgPSBpcCA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKHN6KTsKKwlpZiAoIXZkZXZfaW50bWFwKSB7CisJCXByb21fcHJpbnRmKCJTVU40VjogRXJyb3IsIGNhbm5vdCBhbGxvY2F0ZSB2ZGV2X2ludG1hcC5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwllcnIgPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsICJpbnRlcnJ1cHQtbWFwIiwgKGNoYXIgKikgaXAsIHN6KTsKKwlpZiAoZXJyID09IC0xKSB7CisJCXByb21fcHJpbnRmKCJTVU40VjogRmF0YWwgZXJyb3IsIG5vIHZkZXYgaW50ZXJydXB0LW1hcC5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisJaWYgKGVyciAhPSBzeikgeworCQlwcm9tX3ByaW50ZigiU1VONFY6IEluY29uc2lzdGVudCBpbnRlcnJ1cHQtbWFwIHNpemUsICIKKwkJCSAgICAicHJvcGxlbiglZCkgdnMgZ2V0cHJvcCglZCkuXG4iLCBzeixlcnIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwl2ZGV2X251bV9pbnRtYXAgPSBlcnIgLyBzaXplb2YoKmlwKTsKKworCWVyciA9IHByb21fZ2V0cHJvcGVydHkobm9kZSwgImludGVycnVwdC1tYXAtbWFzayIsCisJCQkgICAgICAgKGNoYXIgKikgJnZkZXZfaW50bWFzaywKKwkJCSAgICAgICBzaXplb2YodmRldl9pbnRtYXNrKSk7CisJaWYgKGVyciA8PSAwKSB7CisJCXByb21fcHJpbnRmKCJTVU40VjogRmF0YWwgZXJyb3IsIG5vIHZkZXYgIgorCQkJICAgICJpbnRlcnJ1cHQtbWFwLW1hc2suXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCWlmIChlcnIgJSBzaXplb2YodmRldl9pbnRtYXNrKSkgeworCQlwcm9tX3ByaW50ZigiU1VONFY6IEJvZ3VzIGludGVycnVwdC1tYXAtbWFzayAiCisJCQkgICAgInByb3BlcnR5IHNpemUgJWRcbiIsIGVycik7CisJCXByb21faGFsdCgpOworCX0KKworCXByaW50aygiU1VONFY6IHZpcnR1YWwtZGV2aWNlcyBkZXZoYW5kbGVbJXhdXG4iLAorCSAgICAgICBzdW40dl92ZGV2X2RldmhhbmRsZSk7Cit9CisKK3Vuc2lnbmVkIGludCBzdW40dl92ZGV2X2RldmljZV9pbnRlcnJ1cHQodW5zaWduZWQgaW50IGRldl9ub2RlKQoreworCXVuc2lnbmVkIGludCBpcnEsIHJlZzsKKwlpbnQgZXJyLCBpOworCisJZXJyID0gcHJvbV9nZXRwcm9wZXJ0eShkZXZfbm9kZSwgImludGVycnVwdHMiLAorCQkJICAgICAgIChjaGFyICopICZpcnEsIHNpemVvZihpcnEpKTsKKwlpZiAoZXJyIDw9IDApIHsKKwkJcHJpbnRrKCJWREVWOiBDYW5ub3QgZ2V0IFwiaW50ZXJydXB0c1wiICIKKwkJICAgICAgICJwcm9wZXJ0eSBmb3IgT0JQIG5vZGUgJXhcbiIsIGRldl9ub2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyID0gcHJvbV9nZXRwcm9wZXJ0eShkZXZfbm9kZSwgInJlZyIsCisJCQkgICAgICAgKGNoYXIgKikgJnJlZywgc2l6ZW9mKHJlZykpOworCWlmIChlcnIgPD0gMCkgeworCQlwcmludGsoIlZERVY6IENhbm5vdCBnZXQgXCJyZWdcIiAiCisJCSAgICAgICAicHJvcGVydHkgZm9yIE9CUCBub2RlICV4XG4iLCBkZXZfbm9kZSk7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2X251bV9pbnRtYXA7IGkrKykgeworCQlpZiAodmRldl9pbnRtYXBbaV0ucGh5cyA9PSAocmVnICYgdmRldl9pbnRtYXNrLnBoeXMpICYmCisJCSAgICB2ZGV2X2ludG1hcFtpXS5pcnEgPT0gKGlycSAmIHZkZXZfaW50bWFzay5pbnRlcnJ1cHQpKSB7CisJCQlpcnEgPSB2ZGV2X2ludG1hcFtpXS5jaW50ZXJydXB0OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSB2ZGV2X251bV9pbnRtYXApIHsKKwkJcHJpbnRrKCJWREVWOiBObyBtYXRjaGluZyBpbnRlcnJ1cHQgbWFwIGVudHJ5ICIKKwkJICAgICAgICJmb3IgT0JQIG5vZGUgJXhcbiIsIGRldl9ub2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHN1bjR2X2J1aWxkX2lycShzdW40dl92ZGV2X2RldmhhbmRsZSwgaXJxLCA1LCAwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9taWRfcHJvcCh2b2lkKQogewogCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkKIAkJcmV0dXJuICJ1cGEtcG9ydGlkIjsKIAlyZXR1cm4gInBvcnRpZCI7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X2NwdV9taWQoaW50IHByb21fbm9kZSkKK3sKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgeworCQlzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyByZWc7CisKKwkJaWYgKHByb21fZ2V0cHJvcGxlbihwcm9tX25vZGUsICJjcHVpZCIpID09IDQpCisJCQlyZXR1cm4gcHJvbV9nZXRpbnRkZWZhdWx0KHByb21fbm9kZSwgImNwdWlkIiwgMCk7CisKKwkJcHJvbV9nZXRwcm9wZXJ0eShwcm9tX25vZGUsICJyZWciLCAoY2hhciAqKSAmcmVnLCBzaXplb2YocmVnKSk7CisJCXJldHVybiAocmVnLnBoeXNfYWRkciA+PiAzMikgJiAweDBmZmZmZmZmVUw7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqcHJvcF9uYW1lID0gY3B1X21pZF9wcm9wKCk7CisKKwkJcmV0dXJuIHByb21fZ2V0aW50ZGVmYXVsdChwcm9tX25vZGUsIHByb3BfbmFtZSwgMCk7CisJfQorfQorCiBzdGF0aWMgaW50IGNoZWNrX2NwdV9ub2RlKGludCBuZCwgaW50ICpjdXJfaW5zdCwKIAkJCSAgaW50ICgqY29tcGFyZSkoaW50LCBpbnQsIHZvaWQgKiksIHZvaWQgKmNvbXBhcmVfYXJnLAogCQkJICBpbnQgKnByb21fbm9kZSwgaW50ICptaWQpCkBAIC01MCw3ICsxOTgsNyBAQAogCQlpZiAocHJvbV9ub2RlKQogCQkJKnByb21fbm9kZSA9IG5kOwogCQlpZiAobWlkKQotCQkJKm1pZCA9IHByb21fZ2V0aW50ZGVmYXVsdChuZCwgY3B1X21pZF9wcm9wKCksIDApOworCQkJKm1pZCA9IGdldF9jcHVfbWlkKG5kKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMDUsNyArMjUzLDcgQEAKIAlpbnQgZGVzaXJlZF9taWQgPSAoaW50KSAobG9uZykgX2FyZzsKIAlpbnQgdGhpc19taWQ7CiAKLQl0aGlzX21pZCA9IHByb21fZ2V0aW50ZGVmYXVsdChuZCwgY3B1X21pZF9wcm9wKCksIDApOworCXRoaXNfbWlkID0gZ2V0X2NwdV9taWQobmQpOwogCWlmICh0aGlzX21pZCA9PSBkZXNpcmVkX21pZCkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMjYsNyArMjc0LDggQEAKIAogI2lmbmRlZiBDT05GSUdfU01QCiAJewotCQlpbnQgZXJyLCBjcHVfbm9kZTsKKwkJaW50IGVyciwgY3B1X25vZGUsIGRlZjsKKwogCQllcnIgPSBjcHVfZmluZF9ieV9pbnN0YW5jZSgwLCAmY3B1X25vZGUsIE5VTEwpOwogCQlpZiAoZXJyKSB7CiAJCQlwcm9tX3ByaW50ZigiTm8gY3B1IG5vZGVzLCBjYW5ub3QgY29udGludWVcbiIpOwpAQCAtMTM1LDIxICsyODQsNDAgQEAKIAkJY3B1X2RhdGEoMCkuY2xvY2tfdGljayA9IHByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwKIAkJCQkJCQkgICAgImNsb2NrLWZyZXF1ZW5jeSIsCiAJCQkJCQkJICAgIDApOworCisJCWRlZiA9ICgodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgPworCQkgICAgICAgKDggKiAxMDI0KSA6CisJCSAgICAgICAoMTYgKiAxMDI0KSk7CiAJCWNwdV9kYXRhKDApLmRjYWNoZV9zaXplID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLAogCQkJCQkJCSAgICAgImRjYWNoZS1zaXplIiwKLQkJCQkJCQkgICAgIDE2ICogMTAyNCk7CisJCQkJCQkJICAgICBkZWYpOworCisJCWRlZiA9IDMyOwogCQljcHVfZGF0YSgwKS5kY2FjaGVfbGluZV9zaXplID0KLQkJCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImRjYWNoZS1saW5lLXNpemUiLCAzMik7CisJCQlwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJkY2FjaGUtbGluZS1zaXplIiwKKwkJCQkJICAgZGVmKTsKKworCQlkZWYgPSAxNiAqIDEwMjQ7CiAJCWNwdV9kYXRhKDApLmljYWNoZV9zaXplID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLAogCQkJCQkJCSAgICAgImljYWNoZS1zaXplIiwKLQkJCQkJCQkgICAgIDE2ICogMTAyNCk7CisJCQkJCQkJICAgICBkZWYpOworCisJCWRlZiA9IDMyOwogCQljcHVfZGF0YSgwKS5pY2FjaGVfbGluZV9zaXplID0KLQkJCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImljYWNoZS1saW5lLXNpemUiLCAzMik7CisJCQlwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJpY2FjaGUtbGluZS1zaXplIiwKKwkJCQkJICAgZGVmKTsKKworCQlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KKwkJICAgICAgICgzICogMTAyNCAqIDEwMjQpIDoKKwkJICAgICAgICg0ICogMTAyNCAqIDEwMjQpKTsKIAkJY3B1X2RhdGEoMCkuZWNhY2hlX3NpemUgPSBwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsCiAJCQkJCQkJICAgICAiZWNhY2hlLXNpemUiLAotCQkJCQkJCSAgICAgNCAqIDEwMjQgKiAxMDI0KTsKKwkJCQkJCQkgICAgIGRlZik7CisKKwkJZGVmID0gNjQ7CiAJCWNwdV9kYXRhKDApLmVjYWNoZV9saW5lX3NpemUgPQotCQkJcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiZWNhY2hlLWxpbmUtc2l6ZSIsIDY0KTsKKwkJCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImVjYWNoZS1saW5lLXNpemUiLAorCQkJCQkgICBkZWYpOwogCQlwcmludGsoIkNQVVswXTogQ2FjaGVzICIKIAkJICAgICAgICJEW3N6KCVkKTpsaW5lX3N6KCVkKV0gIgogCQkgICAgICAgIklbc3ooJWQpOmxpbmVfc3ooJWQpXSAiCkBAIC0xNjAsNiArMzI4LDcgQEAKIAl9CiAjZW5kaWYKIAorCXN1bjR2X3ZpcnR1YWxfZGV2aWNlX3Byb2JlKCk7CiAJY2VudHJhbF9wcm9iZSgpOwogCiAJY3B1X3Byb2JlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfYmFja2VuZC5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX2JhY2tlbmQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNjODg5YS4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfYmFja2VuZC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qICRJZDogZHRsYl9iYWNrZW5kLlMsdiAxLjE2IDIwMDEvMTAvMDkgMDQ6MDI6MTEgZGF2ZW0gRXhwICQKLSAqIGR0bGJfYmFja2VuZC5TOiBCYWNrIGVuZCB0byBEVExCIG1pc3MgcmVwbGFjZW1lbnQgc3RyYXRlZ3kuCi0gKiAgICAgICAgICAgICAgICAgVGhpcyBpcyBpbmNsdWRlZCBkaXJlY3RseSBpbnRvIHRoZSB0cmFwIHRhYmxlLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMTk5NywxOTk4IEpha3ViIEplbGluZWsgICAoampAdWx0cmEubGludXguY3opCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL21tdS5oPgotCi0jZGVmaW5lIFZBTElEX1NaX0JJVFMJKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1pCSVRTKQotCi0jZGVmaW5lIFZQVEVfQklUUwkJKF9QQUdFX0NQIHwgX1BBR0VfQ1YgfCBfUEFHRV9QICkKLSNkZWZpbmUgVlBURV9TSElGVAkJKFBBR0VfU0hJRlQgLSAzKQotCi0vKiBXYXlzIHdlIGNhbiBnZXQgaGVyZToKLSAqCi0gKiAxKSBOdWNsZXVzIGxvYWRzIGFuZCBzdG9yZXMgdG8vZnJvbSBQQS0tPlZBIGRpcmVjdCBtYXBwaW5ncyBhdCB0bD4xLgotICogMikgTnVjbGV1cyBsb2FkcyBhbmQgc3RvcmVzIHRvL2Zyb20gdXNlci9rZXJuZWwgd2luZG93IHNhdmUgYXJlYXMuCi0gKiAzKSBWUFRFIG1pc3NlcyBmcm9tIGR0bGJfYmFzZSBhbmQgaXRsYl9iYXNlLgotICoKLSAqIFdlIG5lZWQgdG8gZXh0cmFjdCBvdXQgdGhlIFBNRCBhbmQgUEdESVIgaW5kZXhlcyBmcm9tIHRoZQotICogbGluZWFyIHZpcnR1YWwgcGFnZSB0YWJsZSBhY2Nlc3MgYWRkcmVzcy4gIFRoZSBQVEUgaW5kZXgKLSAqIGlzIGF0IHRoZSBib3R0b20sIGJ1dCB3ZSBhcmUgbm90IGNvbmNlcm5lZCB3aXRoIGl0LiAgQml0cwotICogMCB0byAyIGFyZSBjbGVhciBzaW5jZSBlYWNoIFBURSBpcyA4IGJ5dGVzIGluIHNpemUuICBFYWNoCi0gKiBQTUQgYW5kIFBHRElSIGVudHJ5IGFyZSA0IGJ5dGVzIGluIHNpemUuICAgVGh1cywgdGhpcwotICogYWRkcmVzcyBsb29rcyBzb21ldGhpbmcgbGlrZToKLSAqCi0gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotICogfCAgLi4uICAgfCAgICBQR0RJUiBpbmRleCAgICB8ICAgIFBNRCBpbmRleCAgICB8IFBURSBpbmRleCAgfCAgIHwKLSAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0gKiAgIDYzICAgRiAgIEUgICAgICAgICAgICAgICBEICAgQyAgICAgICAgICAgICBCICAgQSAgICAgICAgIDMgMiAwICA8LSBiaXQgbnIKLSAqCi0gKiAgVGhlIHZhcmlhYmxlIGJpdHMgYWJvdmUgYXJlIGRlZmluZWQgYXM6Ci0gKiAgQSAtLT4gMyArIChQQUdFX1NISUZUIC0gbG9nMig4KSkKLSAqICAgIC0tPiAzICsgKFBBR0VfU0hJRlQgLSAzKSAtIDEKLSAqICAgICAgICAoaWUuIHRoaXMgaXMgImJpdCAzIiArIFBBR0VfU0laRSAtIHNpemUgb2YgUFRFIGVudHJ5IGluIGJpdHMgLSAxKQotICogIEIgLS0+IEEgKyAxCi0gKiAgQyAtLT4gQiArIChQQUdFX1NISUZUIC0gbG9nMig0KSkKLSAqICAgIC0tPiAgQiArIChQQUdFX1NISUZUIC0gMikgLSAxCi0gKiAgICAgICAgKGllLiB0aGlzIGlzICJiaXQgQiIgKyBQQUdFX1NJWkUgLSBzaXplIG9mIFBNRCBlbnRyeSBpbiBiaXRzIC0gMSkKLSAqICBEIC0tPiBDICsgMQotICogIEUgLS0+IEQgKyAoUEFHRV9TSElGVCAtIGxvZzIoNCkpCi0gKiAgICAtLT4gRCArIChQQUdFX1NISUZUIC0gMikgLSAxCi0gKiAgICAgICAgKGllLiB0aGlzIGlzICJiaXQgRCIgKyBQQUdFX1NJWkUgLSBzaXplIG9mIFBHRElSIGVudHJ5IGluIGJpdHMgLSAxKQotICogIEYgLS0+IEUgKyAxCi0gKgotICogKE5vdGUgaG93ICJCIiBhbHdheXMgZXZhbHV0ZXMgdG8gUEFHRV9TSElGVCwgYWxsIHRoZSBvdGhlciBjb25zdGFudHMKLSAqICBjYW5jZWwgb3V0LikKLSAqCi0gKiBGb3IgOEsgUEFHRV9TSVpFICh0aHVzLCBQQUdFX1NISUZUIG9mIDEzKSB0aGUgYml0IG51bWJlcnMgYXJlOgotICogQSAtLT4gMTIKLSAqIEIgLS0+IDEzCi0gKiBDIC0tPiAyMwotICogRCAtLT4gMjQKLSAqIEUgLS0+IDM0Ci0gKiBGIC0tPiAzNQotICoKLSAqIEZvciA2NEsgUEFHRV9TSVpFICh0aHVzLCBQQUdFX1NISUZUIG9mIDE2KSB0aGUgYml0IG51bWJlcnMgYXJlOgotICogQSAtLT4gMTUKLSAqIEIgLS0+IDE2Ci0gKiBDIC0tPiAyOQotICogRCAtLT4gMzAKLSAqIEUgLS0+IDQzCi0gKiBGIC0tPiA0NAotICoKLSAqIEJlY2F1c2UgYml0cyBib3RoIGFib3ZlIGFuZCBiZWxvdyBlYWNoIFBHRElSIGFuZCBQTUQgaW5kZXggbmVlZCB0bwotICogYmUgbWFza2VkIG91dCwgYW5kIHRoZSBpbmRleCBjYW4gYmUgYXMgbG9uZyBhcyAxNCBiaXRzICh3aGVuIHVzaW5nIGEKLSAqIDY0SyBQQUdFX1NJWkUsIGFuZCB0aHVzIGEgUEFHRV9TSElGVCBvZiAxNiksIHdlIG5lZWQgMyBpbnN0cnVjdGlvbnMKLSAqIHRvIGV4dHJhY3QgZWFjaCBpbmRleCBvdXQuCi0gKgotICogU2hpZnRzIGRvIG5vdCBwYWlyIHZlcnkgd2VsbCBvbiBVbHRyYVNQQVJDLUksIElJLCBJSWksIGFuZCBJSWUsIHNvCi0gKiB3ZSB0cnkgdG8gYXZvaWQgdXNpbmcgdGhlbSBmb3IgdGhlIGVudGlyZSBvcGVyYXRpb24uICBXZSBjb3VsZCBzZXR1cAotICogYSBtYXNrIGFueXdoZXJlIGZyb20gYml0IDMxIGRvd24gdG8gYml0IDEwIHVzaW5nIHRoZSBzZXRoaSBpbnN0cnVjdGlvbi4KLSAqCi0gKiBXZSBuZWVkIGEgbWFzayBjb3ZlcmluZyBiaXRzIEIgLS0+IEMgYW5kIG9uZSBjb3ZlcmluZyBEIC0tPiBFLgotICogRm9yIDhLIFBBR0VfU0laRSB0aGVzZSBtYXNrcyBhcmUgMHgwMGZmZTAwMCBhbmQgMHg3ZmYwMDAwMDAuCi0gKiBGb3IgNjRLIFBBR0VfU0laRSB0aGVzZSBtYXNrcyBhcmUgMHgzZmZmMDAwMCBhbmQgMHhmZmZjMDAwMDAwMC4KLSAqIFRoZSBzZWNvbmQgaW4gZWFjaCBzZXQgY2Fubm90IGJlIGxvYWRlZCB3aXRoIGEgc2luZ2xlIHNldGhpCi0gKiBpbnN0cnVjdGlvbiwgYmVjYXVzZSB0aGUgdXBwZXIgYml0cyBhcmUgcGFzdCBiaXQgMzIuICBXZSB3b3VsZAotICogbmVlZCB0byB1c2UgYSBzZXRoaSArIGEgc2hpZnQuCi0gKgotICogRm9yIHRoZSB0aW1lIGJlaW5nLCB3ZSB1c2UgMiBzaGlmdHMgYW5kIGEgc2ltcGxlICJhbmQiIG1hc2suCi0gKiBXZSBzaGlmdCBsZWZ0IHRvIGNsZWFyIHRoZSBiaXRzIGFib3ZlIHRoZSBpbmRleCwgd2Ugc2hpZnQgZG93bgotICogdG8gY2xlYXIgdGhlIGJpdHMgYmVsb3cgdGhlIGluZGV4IChzYW5zIHRoZSBsb2cyKDQgb3IgOCkgYml0cykKLSAqIGFuZCBhIG1hc2sgdG8gY2xlYXIgdGhlIGxvZzIoNCBvciA4KSBiaXRzLiAgV2UgbmVlZCB0aGVyZWZvcmUKLSAqIGRlZmluZSA0IHNoaWZ0IGNvdW50cywgYWxsIG9mIHdoaWNoIGFyZSByZWxhdGl2ZSB0byBQQUdFX1NISUZULgotICoKLSAqIEFsdGhvdWdoIHVuc3VwcG9ydGFibGUgZm9yIG90aGVyIHJlYXNvbnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQKLSAqIDUxMksgYW5kIDRNQiBwYWdlIHNpemVzIHdvdWxkIGJlIGdlbmVyYWFsbHkgc3VwcG9ydGVkIGJ5IHRoZQotICoga2VybmVsLiAgKEVMRiBiaW5hcmllcyB3b3VsZCBicmVhayB3aXRoID4gNjRLIFBBR0VfU0laRSBzaW5jZQotICogdGhlIHNlY3Rpb25zIGFyZSBvbmx5IGFsaWduZWQgdGhhdCBzdHJvbmdseSkuCi0gKgotICogVGhlIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGZvciBleHRyYWN0aW9uIGFyZSB0aHVzOgotICoKLSAqICAgICAgKChYIDw8IEZPT19TSElGVF9MRUZUKSA+PiBGT09fU0hJRlRfUklHSFQpICYgfjB4MwotICoKLSAqLwotCi0jZGVmaW5lIEEgKDMgKyAoUEFHRV9TSElGVCAtIDMpIC0gMSkKLSNkZWZpbmUgQiAoQSArIDEpCi0jZGVmaW5lIEMgKEIgKyAoUEFHRV9TSElGVCAtIDIpIC0gMSkKLSNkZWZpbmUgRCAoQyArIDEpCi0jZGVmaW5lIEUgKEQgKyAoUEFHRV9TSElGVCAtIDIpIC0gMSkKLSNkZWZpbmUgRiAoRSArIDEpCi0KLSNkZWZpbmUgUE1EX1NISUZUX0xFRlQJCSg2NCAtIEQpCi0jZGVmaW5lIFBNRF9TSElGVF9SSUdIVAkJKDY0IC0gKEQgLSBCKSAtIDIpCi0jZGVmaW5lIFBHRElSX1NISUZUX0xFRlQgCSg2NCAtIEYpCi0jZGVmaW5lIFBHRElSX1NISUZUX1JJR0hUCSg2NCAtIChGIC0gRCkgLSAyKQotI2RlZmluZSBMT1dfTUFTS19CSVRTCQkweDMKLQotLyogVExCMSAqKiBJQ0FDSEUgbGluZSAxOiB0bDEgRFRMQiBhbmQgcXVpY2sgVlBURSBtaXNzCSovCi0JbGR4YQkJWyVnMSArICVnMV0gQVNJX0RNTVUsICVnNAkhIEdldCBUQUdfQUNDRVNTCi0JYWRkCQklZzMsICVnMywgJWc1CQkJISBDb21wdXRlIFZQVEUgYmFzZQotCWNtcAkJJWc0LCAlZzUJCQkhIFZQVEUgbWlzcz8KLQliZ2V1LHB0CQkleGNjLCAxZgkJCSEgQ29udGludWUgaGVyZQotCSBhbmRjYwkJJWc0LCBUQUdfQ09OVEVYVF9CSVRTLCAlZzUJISB0bDAgbWlzcyBOdWNsZXVzIHRlc3QKLQliYSxhLHB0CQkleGNjLCBmcm9tX3RsMV90cmFwCQkhIEZhbGwgdG8gdGwwIG1pc3MKLTE6CXNsbHgJCSVnNiwgVlBURV9TSElGVCwgJWc0CQkhIFBvc2l0aW9uIFRBR19BQ0NFU1MKLQlvcgkJJWc0LCAlZzUsICVnNAkJCSEgUHJlcGFyZSBUQUdfQUNDRVNTCi0KLS8qIFRMQjEgKiogSUNBQ0hFIGxpbmUgMjogUXVpY2sgVlBURSBtaXNzCSAgCSovCi0JbW92CQlUU0JfUkVHLCAlZzEJCQkhIEdyYWIgVFNCIHJlZwotCWxkeGEJCVslZzFdIEFTSV9ETU1VLCAlZzUJCSEgRG9pbmcgUEdEIGNhY2hpbmc/Ci0Jc2xseAkJJWc2LCBQTURfU0hJRlRfTEVGVCwgJWcxCSEgUG9zaXRpb24gUE1EIG9mZnNldAotCWJlLHBuCQkleGNjLCBzcGFyYzY0X3ZwdGVfbnVjbGV1cwkhIElzIGl0IGZyb20gTnVjbGV1cz8KLQkgc3JseAkJJWcxLCBQTURfU0hJRlRfUklHSFQsICVnMQkhIE1hc2sgUE1EIG9mZnNldCBiaXRzCi0JYnJueixwdAkJJWc1LCBzcGFyYzY0X3ZwdGVfY29udGludWUJISBZZXAsIGdvIGxpa2Ugc21va2UKLQkgYW5kbgkJJWcxLCBMT1dfTUFTS19CSVRTLCAlZzEJCSEgRmluYWwgUE1EIG1hc2sKLQlzbGx4CQklZzYsIFBHRElSX1NISUZUX0xFRlQsICVnNQkhIFBvc2l0aW9uIFBHRCBvZmZzZXQKLQotLyogVExCMSAqKiBJQ0FDSEUgbGluZSAzOiBRdWljayBWUFRFIG1pc3MJICAJKi8KLQlzcmx4CQklZzUsIFBHRElSX1NISUZUX1JJR0hULCAlZzUJISBNYXNrIFBHRCBvZmZzZXQgYml0cwotCWFuZG4JCSVnNSwgTE9XX01BU0tfQklUUywgJWc1CQkhIEZpbmFsIFBHRCBtYXNrCi0JbGR1d2EJCVslZzcgKyAlZzVdIEFTSV9QSFlTX1VTRV9FQywgJWc1ISBMb2FkIFBHRAotCWJyeixwbgkJJWc1LCB2cHRlX25vZW50CQkJISBWYWxpZD8KLXNwYXJjNjRfa3B0ZV9jb250aW51ZToKLQkgc2xseAkJJWc1LCAxMSwgJWc1CQkJISBTaGlmdCBpbnRvIHBsYWNlCi1zcGFyYzY0X3ZwdGVfY29udGludWU6Ci0JbGR1d2EJCVslZzUgKyAlZzFdIEFTSV9QSFlTX1VTRV9FQywgJWc1ISBMb2FkIFBNRAotCXNsbHgJCSVnNSwgMTEsICVnNQkJCSEgU2hpZnQgaW50byBwbGFjZQotCWJyeixwbgkJJWc1LCB2cHRlX25vZW50CQkJISBWYWxpZD8KLQotLyogVExCMSAqKiBJQ0FDSEUgbGluZSA0OiBRdWljayBWUFRFIG1pc3MJICAJKi8KLQkgbW92CQkoVkFMSURfU1pfQklUUyA+PiA2MSksICVnMQkhIHVwcGVyIHZwdGUgaW50byAlZzEKLQlzbGx4CQklZzEsIDYxLCAlZzEJCQkhIGZpbmlzaCBjYWxjCi0Jb3IJCSVnNSwgVlBURV9CSVRTLCAlZzUJCSEgUHJlcGFyZSBWUFRFIGRhdGEKLQlvcgkJJWc1LCAlZzEsICVnNQkJCSEgLi4uCi0JbW92CQlUTEJfU0ZTUiwgJWcxCQkJISBSZXN0b3JlICVnMSB2YWx1ZQotCXN0eGEJCSVnNSwgWyVnMF0gQVNJX0RUTEJfREFUQV9JTgkhIExvYWQgVlBURSBpbnRvIFRMQgotCXN0eGEJCSVnNCwgWyVnMSArICVnMV0gQVNJX0RNTVUJISBSZXN0b3JlIHByZXZpb3VzIFRBR19BQ0NFU1MKLQlyZXRyeQkJCQkJCSEgTG9hZCBQVEUgb25jZSBhZ2FpbgotCi0jdW5kZWYgVkFMSURfU1pfQklUUwotI3VuZGVmIFZQVEVfU0hJRlQKLSN1bmRlZiBWUFRFX0JJVFMKLSN1bmRlZiBBCi0jdW5kZWYgQgotI3VuZGVmIEMKLSN1bmRlZiBECi0jdW5kZWYgRQotI3VuZGVmIEYKLSN1bmRlZiBQTURfU0hJRlRfTEVGVAotI3VuZGVmIFBNRF9TSElGVF9SSUdIVAotI3VuZGVmIFBHRElSX1NISUZUX0xFRlQKLSN1bmRlZiBQR0RJUl9TSElGVF9SSUdIVAotI3VuZGVmIExPV19NQVNLX0JJVFMKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX2Jhc2UuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHRsYl9iYXNlLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1Mjg3ODYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9kdGxiX2Jhc2UuUworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKiAkSWQ6IGR0bGJfYmFzZS5TLHYgMS4xNyAyMDAxLzEwLzExIDIyOjMzOjUyIGRhdmVtIEV4cCAkCi0gKiBkdGxiX2Jhc2UuUzoJRnJvbnQgZW5kIHRvIERUTEIgbWlzcyByZXBsYWNlbWVudCBzdHJhdGVneS4KLSAqICAgICAgICAgICAgICBUaGlzIGlzIGluY2x1ZGVkIGRpcmVjdGx5IGludG8gdGhlIHRyYXAgdGFibGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2LDE5OTggRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQotICogQ29weXJpZ2h0IChDKSAxOTk3LDE5OTggSmFrdWIgSmVsaW5layAgIChqakB1bHRyYS5saW51eC5jeikKLSAqLwotCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vbW11Lmg+Ci0KLS8qICVnMQlUTEJfU0ZTUgkoJWcxICsgJWcxID09IFRMQl9UQUdfQUNDRVNTKQotICogJWcyCShLRVJOX0hJR0hCSVRTIHwgS0VSTl9MT1dCSVRTKQotICogJWczICBWUFRFIGJhc2UJKDB4ZmZmZmZmZmUwMDAwMDAwMCkJU3BpdGZpcmUvQmxhY2tiaXJkICg0NC1iaXQgVkEgc3BhY2UpCi0gKgkJCSgweGZmZTAwMDAwMDAwMDAwMDApCUNoZWV0YWgJCSAgICg2NC1iaXQgVkEgc3BhY2UpCi0gKiAlZzcJX19wYShjdXJyZW50LT5tbS0+cGdkKQotICoKLSAqIFRoZSBWUFRFIGJhc2UgdmFsdWUgaXMgY29tcGxldGVseSBtYWdpYywgYnV0IG5vdGUgdGhhdAotICogZmV3IHBsYWNlcyBpbiB0aGUga2VybmVsIG90aGVyIHRoYW4gdGhlc2UgVExCIG1pc3MKLSAqIGhhbmRsZXJzIGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIFZQVEUgbWVjaGFuaXNtIG9yCi0gKiBob3cgaXQgd29ya3MgKHNlZSBWUFRFX1NJWkUsIFRBU0tfU0laRSBhbmQgUFRSU19QRVJfUEdEKS4KLSAqIENvbnNpZGVyIHRoZSA0NC1iaXQgVkFERFIgVWx0cmEtSS9JSSBjYXNlIGFzIGFuIGV4YW1wbGU6Ci0gKgotICogVkFbMCA6ICAoMTw8NDMpXSBwcm9kdWNlIFZQVEUgaW5kZXggWyVnMyAgICAgICAgICAgICAgICAgICAgICAgIDogICAwXQotICogVkFbMCA6IC0oMTw8NDMpXSBwcm9kdWNlIFZQVEUgaW5kZXggWyVnMy0oMTw8KDQzLVBBR0VfU0hJRlQrMykpIDogJWczXQotICoKLSAqIEZvciBDaGVldGFoJ3MgNjQtYml0IFZBRERSIHNwYWNlIHRoaXMgaXM6Ci0gKgotICogVkFbMCA6ICAoMTw8NjMpXSBwcm9kdWNlIFZQVEUgaW5kZXggWyVnMyAgICAgICAgICAgICAgICAgICAgICAgIDogICAwXQotICogVkFbMCA6IC0oMTw8NjMpXSBwcm9kdWNlIFZQVEUgaW5kZXggWyVnMy0oMTw8KDYzLVBBR0VfU0hJRlQrMykpIDogJWczXQotICoKLSAqIElmIHlvdSdyZSBwYXlpbmcgYXR0ZW50aW9uIHlvdSdsbCBub3RpY2UgdGhhdCB0aGlzIG1lYW5zIGhhbGYgb2YKLSAqIHRoZSBWUFRFIHRhYmxlIGlzIGFib3ZlICVnMyBhbmQgaGFsZiBpcyBiZWxvdywgbG93IFZBIGFkZHJlc3NlcwotICogbWFwIHByb2dyZXNzaXZlbHkgdXB3YXJkcyBmcm9tICVnMywgYW5kIGhpZ2ggVkEgYWRkcmVzc2VzIG1hcAotICogcHJvZ3Jlc3NpdmVseSB1cHdhcmRzIHRvd2FyZHMgJWczLiAgVGhpcyB0cmljayB3YXMgbmVlZGVkIHRvIG1ha2UKLSAqIHRoZSBzYW1lIDggaW5zdHJ1Y3Rpb24gaGFuZGxlciB3b3JrIGJvdGggZm9yIFNwaXRmaXJlL0JsYWNrYmlyZCdzCi0gKiBwZWN1bGlhciBWQSBzcGFjZSBob2xlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBmdWxsIDY0LWJpdCBWQSBzcGFjZQotICogb25lIG9mIENoZWV0YWggYXQgdGhlIHNhbWUgdGltZS4KLSAqLwotCi0vKiBXYXlzIHdlIGNhbiBnZXQgaGVyZToKLSAqCi0gKiAxKSBOdWNsZXVzIGxvYWRzIGFuZCBzdG9yZXMgdG8vZnJvbSBQQS0tPlZBIGRpcmVjdCBtYXBwaW5ncy4KLSAqIDIpIE51Y2xldXMgbG9hZHMgYW5kIHN0b3JlcyB0by9mcm9tIHZtYWxsb2MoKSBhcmVhcy4KLSAqIDMpIFVzZXIgbG9hZHMgYW5kIHN0b3Jlcy4KLSAqIDQpIFVzZXIgc3BhY2UgYWNjZXNzZXMgYnkgbnVjbGV1cyBhdCB0bDAKLSAqLwotCi0jaWYgUEFHRV9TSElGVCA9PSAxMwotLyoKLSAqIFRvIGNvbXB1dGUgdnB0ZSBvZmZzZXQsIHdlIG5lZWQgdG8gZG8gKChhZGRyID4+IDEzKSA8PCAzKSwKLSAqIHdoaWNoIGNhbiBiZSBvcHRpbWl6ZWQgdG8gKGFkZHIgPj4gMTApIGlmIGJpdHMgMTAvMTEvMTIgY2FuCi0gKiBiZSBndWFyYW50ZWVkIHRvIGJlIDAgLi4uIG1tdV9jb250ZXh0LmggZG9lcyBndWFyYW50ZWUgdGhpcwotICogYnkgb25seSB1c2luZyAxMCBiaXRzIGluIHRoZSBod2NvbnRleHQgdmFsdWUuCi0gKi8KLSNkZWZpbmUgQ1JFQVRFX1ZQVEVfT0ZGU0VUMShyMSwgcjIpIG5vcAotI2RlZmluZSBDUkVBVEVfVlBURV9PRkZTRVQyKHIxLCByMikgXAotCQkJCXNyYXgJcjEsIDEwLCByMgotI2Vsc2UKLSNkZWZpbmUgQ1JFQVRFX1ZQVEVfT0ZGU0VUMShyMSwgcjIpIFwKLQkJCQlzcmF4CXIxLCBQQUdFX1NISUZULCByMgotI2RlZmluZSBDUkVBVEVfVlBURV9PRkZTRVQyKHIxLCByMikgXAotCQkJCXNsbHgJcjIsIDMsIHIyCi0jZW5kaWYKLQotLyogRFRMQiAqKiBJQ0FDSEUgbGluZSAxOiBRdWljayB1c2VyIFRMQiBtaXNzZXMJCSovCi0JbW92CQlUTEJfU0ZTUiwgJWcxCi0JbGR4YQkJWyVnMSArICVnMV0gQVNJX0RNTVUsICVnNAkhIEdldCBUQUdfQUNDRVNTCi0JYW5kY2MJCSVnNCwgVEFHX0NPTlRFWFRfQklUUywgJWcwCSEgRnJvbSBOdWNsZXVzPwotZnJvbV90bDFfdHJhcDoKLQlyZHByCQkldGwsICVnNQkJCSEgRm9yIFRMPT0zIHRlc3QKLQlDUkVBVEVfVlBURV9PRkZTRVQxKCVnNCwgJWc2KQkJCSEgQ3JlYXRlIFZQVEUgb2Zmc2V0Ci0JYmUscG4JCSV4Y2MsIGt2bWFwCQkJISBZZXAsIHNwZWNpYWwgcHJvY2Vzc2luZwotCSBDUkVBVEVfVlBURV9PRkZTRVQyKCVnNCwgJWc2KQkJCSEgQ3JlYXRlIFZQVEUgb2Zmc2V0Ci0JY21wCQklZzUsIDQJCQkJISBMYXN0IHRyYXAgbGV2ZWw/Ci0KLS8qIERUTEIgKiogSUNBQ0hFIGxpbmUgMjogVXNlciBmaW5pc2ggKyBxdWljayBrZXJuZWwgVExCIG1pc3NlcwkqLwotCWJlLHBuCQkleGNjLCBsb25ncGF0aAkJCSEgWWVwLCBjYW5ub3QgcmlzayBWUFRFIG1pc3MKLQkgbm9wCQkJCQkJISBkZWxheSBzbG90Ci0JbGR4YQkJWyVnMyArICVnNl0gQVNJX1MsICVnNQkJISBMb2FkIFZQVEUKLTE6CWJyZ2V6LHBuCSVnNSwgbG9uZ3BhdGgJCQkhIEludmFsaWQsIGJyYW5jaCBvdXQKLQkgbm9wCQkJCQkJISBEZWxheS1zbG90Ci05OglzdHhhCQklZzUsIFslZzBdIEFTSV9EVExCX0RBVEFfSU4JISBSZWxvYWQgVExCCi0JcmV0cnkJCQkJCQkhIFRyYXAgcmV0dXJuCi0Jbm9wCi0KLS8qIERUTEIgKiogSUNBQ0hFIGxpbmUgMzogd2luZml4dXBzK3JlYWxfZmF1bHRzCQkqLwotbG9uZ3BhdGg6Ci0JcmRwcgkJJXBzdGF0ZSwgJWc1CQkJISBNb3ZlIGludG8gYWx0ZXJuYXRlIGdsb2JhbHMKLQl3cnByCQklZzUsIFBTVEFURV9BR3xQU1RBVEVfTUcsICVwc3RhdGUKLQlyZHByCQkldGwsICVnNAkJCSEgU2VlIHdoZXJlIHdlIGNhbWUgZnJvbS4KLQljbXAJCSVnNCwgMQkJCQkhIElzIGV0cmFwL3J0cmFwIHdpbmRvdyBmYXVsdD8KLQltb3YJCVRMQl9UQUdfQUNDRVNTLCAlZzQJCSEgUHJlcGFyZSBmb3IgZmF1bHQgcHJvY2Vzc2luZwotCWxkeGEJCVslZzRdIEFTSV9ETU1VLCAlZzUJCSEgTG9hZCBmYXVsdGluZyBWQSBwYWdlCi0JYmUscHQJCSV4Y2MsIHNwYXJjNjRfcmVhbGZhdWx0X2NvbW1vbgkhIEp1bXAgdG8gbm9ybWFsIGZhdWx0IGhhbmRsaW5nCi0JIG1vdgkJRkFVTFRfQ09ERV9EVExCLCAlZzQJCSEgSXQgd2FzIHJlYWQgZnJvbSBEVExCCi0KLS8qIERUTEIgKiogSUNBQ0hFIGxpbmUgNDogVW51c2VkLi4uCSovCi0JYmEsYSxwdAkJJXhjYywgd2luZml4X3RyYW1wb2xpbmUJCSEgQ2FsbCB3aW5kb3cgZml4dXAgY29kZQotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCi0jdW5kZWYgQ1JFQVRFX1ZQVEVfT0ZGU0VUMQotI3VuZGVmIENSRUFURV9WUFRFX09GRlNFVDIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZHRsYl9taXNzLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfbWlzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YTZhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2R0bGJfbWlzcy5TCkBAIC0wLDAgKzEsMzkgQEAKKy8qIERUTEIgKiogSUNBQ0hFIGxpbmUgMTogQ29udGV4dCAwIGNoZWNrIGFuZCBUU0IgbG9hZAkqLworCWxkeGEJWyVnMF0gQVNJX0RNTVVfVFNCXzhLQl9QVFIsICVnMQkhIEdldCBUU0IgOEsgcG9pbnRlcgorCWxkeGEJWyVnMF0gQVNJX0RNTVUsICVnNgkJISBHZXQgVEFHIFRBUkdFVAorCXNybHgJJWc2LCA0OCwgJWc1CQkJISBHZXQgY29udGV4dAorCXNsbHgJJWc2LCAyMiwgJWc2CQkJISBaZXJvIG91dCBjb250ZXh0CisJYnJ6LHBuCSVnNSwga3ZtYXBfZHRsYgkJCSEgQ29udGV4dCAwIHByb2Nlc3NpbmcKKwkgc3JseAklZzYsIDIyLCAlZzYJCQkhIERlbGF5IHNsb3QKKwlUU0JfTE9BRF9RVUFEKCVnMSwgJWc0KQkJCSEgTG9hZCBUU0IgZW50cnkKKwljbXAJJWc0LCAlZzYJCQkhIENvbXBhcmUgVEFHCisKKy8qIERUTEIgKiogSUNBQ0hFIGxpbmUgMjogVFNCIGNvbXBhcmUgYW5kIFRMQiBsb2FkCSovCisJYm5lLHBuCSV4Y2MsIHRzYl9taXNzX2R0bGIJCSEgTWlzcworCSBtb3YJRkFVTFRfQ09ERV9EVExCLCAlZzMKKwlzdHhhCSVnNSwgWyVnMF0gQVNJX0RUTEJfREFUQV9JTgkhIExvYWQgVExCCisJcmV0cnkJCQkJCSEgVHJhcCBkb25lCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisKKy8qIERUTEIgKiogSUNBQ0hFIGxpbmUgMzoJCQkJKi8KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKworLyogRFRMQiAqKiBJQ0FDSEUgbGluZSA0OiAJCQkJKi8KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZWJ1cy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lYnVzLmMKaW5kZXggNzk5MWU5MS4uYzY5NTA0YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lYnVzLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9lYnVzLmMKQEAgLTI3NywxMCArMjc3LDkgQEAKIHsKIAl2b2lkICptZW07CiAKLQltZW0gPSBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworCW1lbSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFtZW0pCiAJCXBhbmljKCJlYnVzX2FsbG9jOiBvdXQgb2YgbWVtb3J5Iik7Ci0JbWVtc2V0KChjaGFyICopbWVtLCAwLCBzaXplKTsKIAlyZXR1cm4gbWVtOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2VudHJ5LlMKaW5kZXggYTczNTUzYS4uNmQwYjNlZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvZW50cnkuUwpAQCAtNTAsNyArNTAsOCBAQAogCWFkZAkJJWcwLCAlZzAsICVnMAogCWJhLGEscHQJCSV4Y2MsIHJ0cmFwX2Nscl9sNgogCi0xOglsZHViCQlbJWc2ICsgVElfRlBTQVZFRF0sICVnNQorMToJVFJBUF9MT0FEX1RIUkVBRF9SRUcoJWc2LCAlZzEpCisJbGR1YgkJWyVnNiArIFRJX0ZQU0FWRURdLCAlZzUKIAl3cgkJJWcwLCBGUFJTX0ZFRiwgJWZwcnMKIAlhbmRjYwkJJWc1LCBGUFJTX0ZFRiwgJWcwCiAJYmUsYSxwdAkJJWljYywgMWYKQEAgLTk2LDEwICs5NywyMiBAQAogCWFkZAkJJWc2LCBUSV9GUFJFR1MgKyAweDgwLCAlZzEKIAlmYWRkZAkJJWYwLCAlZjIsICVmNAogCWZtdWxkCQklZjAsICVmMiwgJWY2Ci0JbGR4YQkJWyVnM10gQVNJX0RNTVUsICVnNQorCis2NjE6CWxkeGEJCVslZzNdIEFTSV9ETU1VLCAlZzUKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCWxkeGEJCVslZzNdIEFTSV9NTVUsICVnNQorCS5wcmV2aW91cworCiAJc2V0aGkJCSVoaShzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQpLCAlZzIKIAlsZHgJCVslZzIgKyAlbG8oc3BhcmM2NF9rZXJuX3NlY19jb250ZXh0KV0sICVnMgotCXN0eGEJCSVnMiwgWyVnM10gQVNJX0RNTVUKKworNjYxOglzdHhhCQklZzIsIFslZzNdIEFTSV9ETU1VCisJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCAiYXgiCisJLndvcmQJCTY2MWIKKwlzdHhhCQklZzIsIFslZzNdIEFTSV9NTVUKKwkucHJldmlvdXMKKwogCW1lbWJhcgkJI1N5bmMKIAlhZGQJCSVnNiwgVElfRlBSRUdTICsgMHhjMCwgJWcyCiAJZmFkZGQJCSVmMCwgJWYyLCAlZjgKQEAgLTEyNSwxMSArMTM4LDIzIEBACiAJIGZ6ZXJvCQklZjMyCiAJbW92CQlTRUNPTkRBUllfQ09OVEVYVCwgJWczCiAJZnplcm8JCSVmMzQKLQlsZHhhCQlbJWczXSBBU0lfRE1NVSwgJWc1CisKKzY2MToJbGR4YQkJWyVnM10gQVNJX0RNTVUsICVnNQorCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQk2NjFiCisJbGR4YQkJWyVnM10gQVNJX01NVSwgJWc1CisJLnByZXZpb3VzCisKIAlhZGQJCSVnNiwgVElfRlBSRUdTLCAlZzEKIAlzZXRoaQkJJWhpKHNwYXJjNjRfa2Vybl9zZWNfY29udGV4dCksICVnMgogCWxkeAkJWyVnMiArICVsbyhzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQpXSwgJWcyCi0Jc3R4YQkJJWcyLCBbJWczXSBBU0lfRE1NVQorCis2NjE6CXN0eGEJCSVnMiwgWyVnM10gQVNJX0RNTVUKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCXN0eGEJCSVnMiwgWyVnM10gQVNJX01NVQorCS5wcmV2aW91cworCiAJbWVtYmFyCQkjU3luYwogCWFkZAkJJWc2LCBUSV9GUFJFR1MgKyAweDQwLCAlZzIKIAlmYWRkZAkJJWYzMiwgJWYzNCwgJWYzNgpAQCAtMTU0LDEwICsxNzksMjIgQEAKIAkgbm9wCiAzOgltb3YJCVNFQ09OREFSWV9DT05URVhULCAlZzMKIAlhZGQJCSVnNiwgVElfRlBSRUdTLCAlZzEKLQlsZHhhCQlbJWczXSBBU0lfRE1NVSwgJWc1CisKKzY2MToJbGR4YQkJWyVnM10gQVNJX0RNTVUsICVnNQorCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQk2NjFiCisJbGR4YQkJWyVnM10gQVNJX01NVSwgJWc1CisJLnByZXZpb3VzCisKIAlzZXRoaQkJJWhpKHNwYXJjNjRfa2Vybl9zZWNfY29udGV4dCksICVnMgogCWxkeAkJWyVnMiArICVsbyhzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQpXSwgJWcyCi0Jc3R4YQkJJWcyLCBbJWczXSBBU0lfRE1NVQorCis2NjE6CXN0eGEJCSVnMiwgWyVnM10gQVNJX0RNTVUKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCXN0eGEJCSVnMiwgWyVnM10gQVNJX01NVQorCS5wcmV2aW91cworCiAJbWVtYmFyCQkjU3luYwogCW1vdgkJMHg0MCwgJWcyCiAJbWVtYmFyCQkjU3luYwpAQCAtMTY4LDcgKzIwNSwxMyBAQAogCWxkZGEJCVslZzEgKyAlZzJdIEFTSV9CTEtfUywgJWY0OAogCW1lbWJhcgkJI1N5bmMKIGZwZGlzX2V4aXQ6Ci0Jc3R4YQkJJWc1LCBbJWczXSBBU0lfRE1NVQorCis2NjE6CXN0eGEJCSVnNSwgWyVnM10gQVNJX0RNTVUKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCXN0eGEJCSVnNSwgWyVnM10gQVNJX01NVQorCS5wcmV2aW91cworCiAJbWVtYmFyCQkjU3luYwogZnBkaXNfZXhpdDI6CiAJd3IJCSVnNywgMCwgJWdzcgpAQCAtMTg5LDYgKzIzMiw3IEBACiAJLmdsb2JsCQlkb19mcG90aGVyX2NoZWNrX2ZpdG9zCiAJLmFsaWduCQkzMgogZG9fZnBvdGhlcl9jaGVja19maXRvczoKKwlUUkFQX0xPQURfVEhSRUFEX1JFRyglZzYsICVnMSkKIAlzZXRoaQkJJWhpKGZwX290aGVyX2JvdW5jZSAtIDQpLCAlZzcKIAlvcgkJJWc3LCAlbG8oZnBfb3RoZXJfYm91bmNlIC0gNCksICVnNwogCkBAIC0zMTIsNiArMzU2LDcgQEAKIAkuZ2xvYmwJCWRvX2ZwdHJhcAogCS5hbGlnbgkJMzIKIGRvX2ZwdHJhcDoKKwlUUkFQX0xPQURfVEhSRUFEX1JFRyglZzYsICVnMSkKIAlzdHgJCSVmc3IsIFslZzYgKyBUSV9YRlNSXQogZG9fZnB0cmFwX2FmdGVyX2ZzcjoKIAlsZHViCQlbJWc2ICsgVElfRlBTQVZFRF0sICVnMwpAQCAtMzIxLDEwICszNjYsMjIgQEAKIAlyZAkJJWdzciwgJWczCiAJc3R4CQklZzMsIFslZzYgKyBUSV9HU1JdCiAJbW92CQlTRUNPTkRBUllfQ09OVEVYVCwgJWczCi0JbGR4YQkJWyVnM10gQVNJX0RNTVUsICVnNQorCis2NjE6CWxkeGEJCVslZzNdIEFTSV9ETU1VLCAlZzUKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCWxkeGEJCVslZzNdIEFTSV9NTVUsICVnNQorCS5wcmV2aW91cworCiAJc2V0aGkJCSVoaShzcGFyYzY0X2tlcm5fc2VjX2NvbnRleHQpLCAlZzIKIAlsZHgJCVslZzIgKyAlbG8oc3BhcmM2NF9rZXJuX3NlY19jb250ZXh0KV0sICVnMgotCXN0eGEJCSVnMiwgWyVnM10gQVNJX0RNTVUKKworNjYxOglzdHhhCQklZzIsIFslZzNdIEFTSV9ETU1VCisJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCAiYXgiCisJLndvcmQJCTY2MWIKKwlzdHhhCQklZzIsIFslZzNdIEFTSV9NTVUKKwkucHJldmlvdXMKKwogCW1lbWJhcgkJI1N5bmMKIAlhZGQJCSVnNiwgVElfRlBSRUdTLCAlZzIKIAlhbmRjYwkJJWcxLCBGUFJTX0RMLCAlZzAKQEAgLTMzOSw3ICszOTYsMTMgQEAKIAlzdGRhCQklZjQ4LCBbJWcyICsgJWczXSBBU0lfQkxLX1MKIDU6CW1vdgkJU0VDT05EQVJZX0NPTlRFWFQsICVnMQogCW1lbWJhcgkJI1N5bmMKLQlzdHhhCQklZzUsIFslZzFdIEFTSV9ETU1VCisKKzY2MToJc3R4YQkJJWc1LCBbJWcxXSBBU0lfRE1NVQorCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQk2NjFiCisJc3R4YQkJJWc1LCBbJWcxXSBBU0lfTU1VCisJLnByZXZpb3VzCisKIAltZW1iYXIJCSNTeW5jCiAJYmEscHQJCSV4Y2MsIGV0cmFwCiAJIHdyCQklZzAsIDAsICVmcHJzCkBAIC0zNTMsOCArNDE2LDYgQEAKIAkgKgogCSAqIFdpdGggdGhpcyBtZXRob2Qgd2UgY2FuIGRvIG1vc3Qgb2YgdGhlIGNyb3NzLWNhbGwgdGxiL2NhY2hlCiAJICogZmx1c2hpbmcgdmVyeSBxdWlja2x5LgotCSAqCi0JICogQ3VycmVudCBDUFUncyBJUlEgd29ya2xpc3QgdGFibGUgaXMgbG9ja2VkIGludG8gJWc2LCBkb24ndCB0b3VjaC4KIAkgKi8KIAkudGV4dAogCS5hbGlnbgkJMzIKQEAgLTM3OCw2ICs0MzksOCBAQAogCXNsbHgJCSVnMiwgJWc0LCAlZzIKIAlzbGx4CQklZzQsIDIsICVnNAogCisJVFJBUF9MT0FEX0lSUV9XT1JLKCVnNiwgJWcxKQorCiAJbGR1dwkJWyVnNiArICVnNF0sICVnNQkvKiBnNSA9IGlycV93b3JrKGNwdSwgcGlsKSAqLwogCXN0dwkJJWc1LCBbJWczICsgMHgwMF0JLyogYnVja2V0LT5pcnFfY2hhaW4gPSBnNSAqLwogCXN0dwkJJWczLCBbJWc2ICsgJWc0XQkvKiBpcnFfd29yayhjcHUsIHBpbCkgPSBidWNrZXQgKi8KQEAgLTM5OSw3NiArNDYyLDYgQEAKIDE6CWptcGwJCSVnMywgJWcwCiAJIG5vcAogCi0JLmdsb2JsCQlzYXZlX2FsdGVybmF0ZV9nbG9iYWxzCi1zYXZlX2FsdGVybmF0ZV9nbG9iYWxzOiAvKiAlbzAgPSBzYXZlX2FyZWEgKi8KLQlyZHByCQklcHN0YXRlLCAlbzUKLQlhbmRuCQklbzUsIFBTVEFURV9JRSwgJW8xCi0Jd3JwcgkJJW8xLCBQU1RBVEVfQUcsICVwc3RhdGUKLQlzdHgJCSVnMCwgWyVvMCArIDB4MDBdCi0Jc3R4CQklZzEsIFslbzAgKyAweDA4XQotCXN0eAkJJWcyLCBbJW8wICsgMHgxMF0KLQlzdHgJCSVnMywgWyVvMCArIDB4MThdCi0Jc3R4CQklZzQsIFslbzAgKyAweDIwXQotCXN0eAkJJWc1LCBbJW8wICsgMHgyOF0KLQlzdHgJCSVnNiwgWyVvMCArIDB4MzBdCi0Jc3R4CQklZzcsIFslbzAgKyAweDM4XQotCXdycHIJCSVvMSwgUFNUQVRFX0lHLCAlcHN0YXRlCi0Jc3R4CQklZzAsIFslbzAgKyAweDQwXQotCXN0eAkJJWcxLCBbJW8wICsgMHg0OF0KLQlzdHgJCSVnMiwgWyVvMCArIDB4NTBdCi0Jc3R4CQklZzMsIFslbzAgKyAweDU4XQotCXN0eAkJJWc0LCBbJW8wICsgMHg2MF0KLQlzdHgJCSVnNSwgWyVvMCArIDB4NjhdCi0Jc3R4CQklZzYsIFslbzAgKyAweDcwXQotCXN0eAkJJWc3LCBbJW8wICsgMHg3OF0KLQl3cnByCQklbzEsIFBTVEFURV9NRywgJXBzdGF0ZQotCXN0eAkJJWcwLCBbJW8wICsgMHg4MF0KLQlzdHgJCSVnMSwgWyVvMCArIDB4ODhdCi0Jc3R4CQklZzIsIFslbzAgKyAweDkwXQotCXN0eAkJJWczLCBbJW8wICsgMHg5OF0KLQlzdHgJCSVnNCwgWyVvMCArIDB4YTBdCi0Jc3R4CQklZzUsIFslbzAgKyAweGE4XQotCXN0eAkJJWc2LCBbJW8wICsgMHhiMF0KLQlzdHgJCSVnNywgWyVvMCArIDB4YjhdCi0Jd3JwcgkJJW81LCAweDAsICVwc3RhdGUKLQlyZXRsCi0JIG5vcAotCi0JLmdsb2JsCQlyZXN0b3JlX2FsdGVybmF0ZV9nbG9iYWxzCi1yZXN0b3JlX2FsdGVybmF0ZV9nbG9iYWxzOiAvKiAlbzAgPSBzYXZlX2FyZWEgKi8KLQlyZHByCQklcHN0YXRlLCAlbzUKLQlhbmRuCQklbzUsIFBTVEFURV9JRSwgJW8xCi0Jd3JwcgkJJW8xLCBQU1RBVEVfQUcsICVwc3RhdGUKLQlsZHgJCVslbzAgKyAweDAwXSwgJWcwCi0JbGR4CQlbJW8wICsgMHgwOF0sICVnMQotCWxkeAkJWyVvMCArIDB4MTBdLCAlZzIKLQlsZHgJCVslbzAgKyAweDE4XSwgJWczCi0JbGR4CQlbJW8wICsgMHgyMF0sICVnNAotCWxkeAkJWyVvMCArIDB4MjhdLCAlZzUKLQlsZHgJCVslbzAgKyAweDMwXSwgJWc2Ci0JbGR4CQlbJW8wICsgMHgzOF0sICVnNwotCXdycHIJCSVvMSwgUFNUQVRFX0lHLCAlcHN0YXRlCi0JbGR4CQlbJW8wICsgMHg0MF0sICVnMAotCWxkeAkJWyVvMCArIDB4NDhdLCAlZzEKLQlsZHgJCVslbzAgKyAweDUwXSwgJWcyCi0JbGR4CQlbJW8wICsgMHg1OF0sICVnMwotCWxkeAkJWyVvMCArIDB4NjBdLCAlZzQKLQlsZHgJCVslbzAgKyAweDY4XSwgJWc1Ci0JbGR4CQlbJW8wICsgMHg3MF0sICVnNgotCWxkeAkJWyVvMCArIDB4NzhdLCAlZzcKLQl3cnByCQklbzEsIFBTVEFURV9NRywgJXBzdGF0ZQotCWxkeAkJWyVvMCArIDB4ODBdLCAlZzAKLQlsZHgJCVslbzAgKyAweDg4XSwgJWcxCi0JbGR4CQlbJW8wICsgMHg5MF0sICVnMgotCWxkeAkJWyVvMCArIDB4OThdLCAlZzMKLQlsZHgJCVslbzAgKyAweGEwXSwgJWc0Ci0JbGR4CQlbJW8wICsgMHhhOF0sICVnNQotCWxkeAkJWyVvMCArIDB4YjBdLCAlZzYKLQlsZHgJCVslbzAgKyAweGI4XSwgJWc3Ci0Jd3JwcgkJJW81LCAweDAsICVwc3RhdGUKLQlyZXRsCi0JIG5vcAotCiAJLmdsb2JsCQlnZXRjYywgc2V0Y2MKIGdldGNjOgogCWxkeAkJWyVvMCArIFBUX1Y5X1RTVEFURV0sICVvMQpAQCAtNDg4LDkgKzQ4MSwyNCBAQAogCXJldGwKIAkgc3R4CQklbzEsIFslbzAgKyBQVF9WOV9UU1RBVEVdCiAKLQkuZ2xvYmwJCXV0cmFwLCB1dHJhcF9pbGwKLXV0cmFwOglicnoscG4JCSVnMSwgZXRyYXAKKwkuZ2xvYmwJCXV0cmFwX3RyYXAKK3V0cmFwX3RyYXA6CQkvKiAlZzM9aGFuZGxlciwlZzQ9bGV2ZWwgKi8KKwlUUkFQX0xPQURfVEhSRUFEX1JFRyglZzYsICVnMSkKKwlsZHgJCVslZzYgKyBUSV9VVFJBUFNdLCAlZzEKKwlicm56LHB0CQklZzEsIGludm9rZV91dHJhcAogCSBub3AKKworCWJhLHB0CQkleGNjLCBldHJhcAorCSByZAkJJXBjLCAlZzcKKwltb3YJCSVsNCwgJW8xCisgICAgICAgIGNhbGwJCWJhZF90cmFwCisJIGFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKKwliYSxwdAkJJXhjYywgcnRyYXAKKwkgY2xyCQklbDYKKworaW52b2tlX3V0cmFwOgorCXNsbHgJCSVnMywgMywgJWczCisJbGR4CQlbJWcxICsgJWczXSwgJWcxCiAJc2F2ZQkJJXNwLCAtMTI4LCAlc3AKIAlyZHByCQkldHN0YXRlLCAlbDYKIAlyZHByCQklY3dwLCAlbDcKQEAgLTUwMCwxNyArNTA4LDYgQEAKIAlyZHByCQkldG5wYywgJWw3CiAJd3JwcgkJJWcxLCAwLCAldG5wYwogCWRvbmUKLXV0cmFwX2lsbDoKLSAgICAgICAgY2FsbAkJYmFkX3RyYXAKLQkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMAotCWJhLHB0CQkleGNjLCBydHJhcAotCSBjbHIJCSVsNgotCi0JLyogWFhYIEhlcmUgaXMgc3R1ZmYgd2Ugc3RpbGwgbmVlZCB0byB3cml0ZS4uLiAtRGF2ZU0gWFhYICovCi0JLmdsb2JsCQluZXRic2Rfc3lzY2FsbAotbmV0YnNkX3N5c2NhbGw6Ci0JcmV0bAotCSBub3AKIAogCS8qIFdlIG5lZWQgdG8gY2FyZWZ1bGx5IHJlYWQgdGhlIGVycm9yIHN0YXR1cywgQUNLCiAJICogdGhlIGVycm9ycywgcHJldmVudCByZWN1cnNpdmUgdHJhcHMsIGFuZCBwYXNzIHRoZQpAQCAtMTAwMSw3ICs5OTgsNyBAQAogCSAqICVnMzoJCXNjcmF0Y2gKIAkgKiAlZzQ6CQlBRlNSCiAJICogJWc1OgkJQUZBUgotCSAqICVnNjoJCWN1cnJlbnQgdGhyZWFkIHB0cgorCSAqICVnNjoJCXVudXNlZCwgd2lsbCBoYXZlIGN1cnJlbnQgdGhyZWFkIHB0ciBhZnRlciBldHJhcAogCSAqICVnNzoJCXNjcmF0Y2gKIAkgKi8KIF9fY2hlZXRhaF9sb2dfZXJyb3I6CkBAIC0xNTM5LDEzICsxNTM2LDE0IEBACiAKIDE6CQliLHB0CQkleGNjLCByZXRfc3lzX2NhbGwKIAkJIGxkeAkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JMF0sICVvMAotc3BhcmNfZXhpdDoJd3JwcgkJJWcwLCAoUFNUQVRFX1JNTyB8IFBTVEFURV9QRUYgfCBQU1RBVEVfUFJJViksICVwc3RhdGUKK3NwYXJjX2V4aXQ6CXJkcHIJCSVwc3RhdGUsICVnMgorCQl3cnByCQklZzIsIFBTVEFURV9JRSwgJXBzdGF0ZQogCQlyZHByCQklb3RoZXJ3aW4sICVnMQogCQlyZHByCQklY2Fuc2F2ZSwgJWczCiAJCWFkZAkJJWczLCAlZzEsICVnMwogCQl3cnByCQklZzMsIDB4MCwgJWNhbnNhdmUKIAkJd3JwcgkJJWcwLCAweDAsICVvdGhlcndpbgotCQl3cnByCQklZzAsIChQU1RBVEVfUk1PIHwgUFNUQVRFX1BFRiB8IFBTVEFURV9QUklWIHwgUFNUQVRFX0lFKSwgJXBzdGF0ZQorCQl3cnByCQklZzIsIDB4MCwgJXBzdGF0ZQogCQliYSxwdAkJJXhjYywgc3lzX2V4aXQKIAkJIHN0YgkJJWcwLCBbJWc2ICsgVElfV1NBVkVEXQogCkBAIC0xNjkwLDMgKzE2ODgsMTM4IEBACiAJIHJlc3RvcmUJJWcwLCAlZzAsICVnMAogMjoJcmV0bAogCSBub3AKKworI2lmZGVmIENPTkZJR19TTVAKKwkuZ2xvYmwJCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZAoraGFyZF9zbXBfcHJvY2Vzc29yX2lkOgorI2VuZGlmCisJLmdsb2JsCQlyZWFsX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZAorcmVhbF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQ6CisJX19HRVRfQ1BVSUQoJW8wKQorCXJldGwKKwkgbm9wCisKKwkvKiAlbzA6IGRldmhhbmRsZQorCSAqICVvMToJZGV2aW5vCisJICoKKwkgKiByZXR1cm5zICVvMDogc3lzaW5vCisJICovCisJLmdsb2JsCXN1bjR2X2Rldmlub190b19zeXNpbm8KK3N1bjR2X2Rldmlub190b19zeXNpbm86CisJbW92CUhWX0ZBU1RfSU5UUl9ERVZJTk8yU1lTSU5PLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG1vdgklbzEsICVvMAorCisJLyogJW8wOiBzeXNpbm8KKwkgKgorCSAqIHJldHVybnMgJW8wOiBpbnRyX2VuYWJsZWQgKEhWX0lOVFJfe0RJU0FCTEVELEVOQUJMRUR9KQorCSAqLworCS5nbG9ibAlzdW40dl9pbnRyX2dldGVuYWJsZWQKK3N1bjR2X2ludHJfZ2V0ZW5hYmxlZDoKKwltb3YJSFZfRkFTVF9JTlRSX0dFVEVOQUJMRUQsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXJldGwKKwkgbW92CSVvMSwgJW8wCisKKwkvKiAlbzA6IHN5c2lubworCSAqICVvMTogaW50cl9lbmFibGVkIChIVl9JTlRSX3tESVNBQkxFRCxFTkFCTEVEfSkKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfaW50cl9zZXRlbmFibGVkCitzdW40dl9pbnRyX3NldGVuYWJsZWQ6CisJbW92CUhWX0ZBU1RfSU5UUl9TRVRFTkFCTEVELCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCisJLyogJW8wOiBzeXNpbm8KKwkgKgorCSAqIHJldHVybnMgJW8wOiBpbnRyX3N0YXRlIChIVl9JTlRSX1NUQVRFXyopCisJICovCisJLmdsb2JsCXN1bjR2X2ludHJfZ2V0c3RhdGUKK3N1bjR2X2ludHJfZ2V0c3RhdGU6CisJbW92CUhWX0ZBU1RfSU5UUl9HRVRTVEFURSwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBtb3YJJW8xLCAlbzAKKworCS8qICVvMDogc3lzaW5vCisJICogJW8xOiBpbnRyX3N0YXRlIChIVl9JTlRSX1NUQVRFXyopCisJICovCisJLmdsb2JsCXN1bjR2X2ludHJfc2V0c3RhdGUKK3N1bjR2X2ludHJfc2V0c3RhdGU6CisJbW92CUhWX0ZBU1RfSU5UUl9TRVRTVEFURSwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKworCS8qICVvMDogc3lzaW5vCisJICoKKwkgKiByZXR1cm5zICVvMDogY3B1aWQKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfaW50cl9nZXR0YXJnZXQKK3N1bjR2X2ludHJfZ2V0dGFyZ2V0OgorCW1vdglIVl9GQVNUX0lOVFJfR0VUVEFSR0VULCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG1vdgklbzEsICVvMAorCisJLyogJW8wOiBzeXNpbm8KKwkgKiAlbzE6IGNwdWlkCisJICovCisJLmdsb2JsCXN1bjR2X2ludHJfc2V0dGFyZ2V0CitzdW40dl9pbnRyX3NldHRhcmdldDoKKwltb3YJSFZfRkFTVF9JTlRSX1NFVFRBUkdFVCwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKworCS8qICVvMDoJdHlwZQorCSAqICVvMToJcXVldWUgcGFkZHIKKwkgKiAlbzI6CW51bSBxdWV1ZSBlbnRyaWVzCisJICoKKwkgKiByZXR1cm5zICVvMDoJc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X2NwdV9xY29uZgorc3VuNHZfY3B1X3Fjb25mOgorCW1vdglIVl9GQVNUX0NQVV9RQ09ORiwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKworCS8qIHJldHVybnMgJW8wOglzdGF0dXMKKwkgKi8KKwkuZ2xvYmwJc3VuNHZfY3B1X3lpZWxkCitzdW40dl9jcHVfeWllbGQ6CisJbW92CUhWX0ZBU1RfQ1BVX1lJRUxELCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG5vcAorCisJLyogJW8wOgludW0gY3B1cyBpbiBjcHUgbGlzdAorCSAqICVvMToJY3B1IGxpc3QgcGFkZHIKKwkgKiAlbzI6CW1vbmRvIGJsb2NrIHBhZGRyCisJICoKKwkgKiByZXR1cm5zICVvMDogc3RhdHVzCisJICovCisJLmdsb2JsCXN1bjR2X2NwdV9tb25kb19zZW5kCitzdW40dl9jcHVfbW9uZG9fc2VuZDoKKwltb3YJSFZfRkFTVF9DUFVfTU9ORE9fU0VORCwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJcmV0bAorCSBub3AKKworCS8qICVvMDoJQ1BVIElECisJICoKKwkgKiByZXR1cm5zICVvMDoJLXN0YXR1cyBpZiBzdGF0dXMgbm9uLXplcm8sIGVsc2UKKwkgKiAgICAgICAgICVvMDoJY3B1IHN0YXRlIGFzIEhWX0NQVV9TVEFURV8qCisJICovCisJLmdsb2JsCXN1bjR2X2NwdV9zdGF0ZQorc3VuNHZfY3B1X3N0YXRlOgorCW1vdglIVl9GQVNUX0NQVV9TVEFURSwgJW81CisJdGEJSFZfRkFTVF9UUkFQCisJYnJueixwbgklbzAsIDFmCisJIHN1YgklZzAsICVvMCwgJW8wCisJbW92CSVvMSwgJW8wCisxOglyZXRsCisJIG5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9ldHJhcC5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9ldHJhcC5TCmluZGV4IDBkOGViYTIuLjE0OTM4MzggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvZXRyYXAuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2V0cmFwLlMKQEAgLTMxLDYgKzMxLDcgQEAKIAkJLmdsb2JsCWV0cmFwLCBldHJhcF9pcnEsIGV0cmFwdGwxCiBldHJhcDoJCXJkcHIJJXBpbCwgJWcyCiBldHJhcF9pcnE6CisJCVRSQVBfTE9BRF9USFJFQURfUkVHKCVnNiwgJWcxKQogCQlyZHByCSV0c3RhdGUsICVnMQogCQlzbGx4CSVnMiwgMjAsICVnMwogCQlhbmRjYwklZzEsIFRTVEFURV9QUklWLCAlZzAKQEAgLTU0LDcgKzU1LDMxIEBACiAJCXJkCSV5LCAlZzMKIAkJc3R4CSVnMSwgWyVnMiArIFNUQUNLRlJBTUVfU1ogKyBQVF9WOV9UTlBDXQogCQlzdAklZzMsIFslZzIgKyBTVEFDS0ZSQU1FX1NaICsgUFRfVjlfWV0KLQkJc2F2ZQklZzIsIC1TVEFDS19CSUFTLCAlc3AJISBPcmRlcmluZyBoZXJlIGlzIGNyaXRpY2FsCisKKwkJcmRwcgklY2Fuc2F2ZSwgJWcxCisJCWJybnoscHQgJWcxLCBldHJhcF9zYXZlCisJCSBub3AKKworCQlyZHByCSVjd3AsICVnMQorCQlhZGQJJWcxLCAyLCAlZzEKKwkJd3JwcgklZzEsICVjd3AKKwkJYmUscHQJJXhjYywgZXRyYXBfdXNlcl9zcGlsbAorCQkgbW92CUFTSV9BSVVQLCAlZzMKKworCQlyZHByCSVvdGhlcndpbiwgJWczCisJCWJyegklZzMsIGV0cmFwX2tlcm5lbF9zcGlsbAorCQkgbW92CUFTSV9BSVVTLCAlZzMKKworZXRyYXBfdXNlcl9zcGlsbDoKKworCQl3cgklZzMsIDB4MCwgJWFzaQorCQlsZHgJWyVnNiArIFRJX0ZMQUdTXSwgJWczCisJCWFuZAklZzMsIF9USUZfMzJCSVQsICVnMworCQlicm56LHB0CSVnMywgZXRyYXBfdXNlcl9zcGlsbF8zMmJpdAorCQkgbm9wCisJCWJhLGEscHQJJXhjYywgZXRyYXBfdXNlcl9zcGlsbF82NGJpdAorCitldHJhcF9zYXZlOglzYXZlCSVnMiwgLVNUQUNLX0JJQVMsICVzcAogCQltb3YJJWc2LCAlbDYKIAogCQlibmUscG4JJXhjYywgM2YKQEAgLTcwLDQyICs5NSw1NiBAQAogCQl3cnByCSVnMiwgMCwgJXdzdGF0ZQogCQlzZXRoaQklaGkoc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KSwgJWcyCiAJCWxkeAlbJWcyICsgJWxvKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCldLCAlZzMKLQkJc3R4YQklZzMsIFslbDRdIEFTSV9ETU1VCi0JCWZsdXNoCSVsNgotCQl3cgklZzAsIEFTSV9BSVVTLCAlYXNpCi0yOgkJd3JwcgklZzAsIDB4MCwgJXRsCi0JCW1vdgklZzQsICVsNAotCQltb3YJJWc1LCAlbDUKIAotCQltb3YJJWc3LCAlbDIKLQkJd3JwcgklZzAsIEVUUkFQX1BTVEFURTEsICVwc3RhdGUKKzY2MToJCXN0eGEJJWczLCBbJWw0XSBBU0lfRE1NVQorCQkuc2VjdGlvbiAuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkJLndvcmQJNjYxYgorCQlzdHhhCSVnMywgWyVsNF0gQVNJX01NVQorCQkucHJldmlvdXMKKworCQlzZXRoaQklaGkoS0VSTkJBU0UpLCAlbDQKKwkJZmx1c2gJJWw0CisJCW1vdglBU0lfQUlVUywgJWw3CisyOgkJbW92CSVnNCwgJWw0CisJCW1vdgklZzUsICVsNQorCQlhZGQJJWc3LCA0LCAlbDIKKworCQkvKiBHbyB0byB0cmFwIHRpbWUgZ2xvYmFscyBzbyB3ZSBjYW4gc2F2ZSB0aGVtLiAgKi8KKzY2MToJCXdycHIJJWcwLCBFVFJBUF9QU1RBVEUxLCAlcHN0YXRlCisJCS5zZWN0aW9uIC5zdW40dl8xaW5zbl9wYXRjaCwgImF4IgorCQkud29yZAk2NjFiCisJCVNFVF9HTCgwKQorCQkucHJldmlvdXMKKwogCQlzdHgJJWcxLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0cxXQogCQlzdHgJJWcyLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0cyXQorCQlzbGx4CSVsNywgMjQsICVsNwogCQlzdHgJJWczLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0czXQorCQlyZHByCSVjd3AsICVsMAogCQlzdHgJJWc0LCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0c0XQogCQlzdHgJJWc1LCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0c1XQogCQlzdHgJJWc2LCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0c2XQotCiAJCXN0eAklZzcsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfRzddCisJCW9yCSVsNywgJWwwLCAlbDcKKwkJc2V0aGkJJWhpKFRTVEFURV9STU8gfCBUU1RBVEVfUEVGKSwgJWwwCisJCW9yCSVsNywgJWwwLCAlbDcKKwkJd3JwcgklbDIsICV0bnBjCisJCXdycHIJJWw3LCAoVFNUQVRFX1BSSVYgfCBUU1RBVEVfSUUpLCAldHN0YXRlCiAJCXN0eAklaTAsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTBdCiAJCXN0eAklaTEsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTFdCiAJCXN0eAklaTIsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTJdCiAJCXN0eAklaTMsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTNdCiAJCXN0eAklaTQsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTRdCiAJCXN0eAklaTUsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTVdCi0KIAkJc3R4CSVpNiwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JNl0KLQkJc3R4CSVpNywgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JN10KLQkJd3JwcgklZzAsIEVUUkFQX1BTVEFURTIsICVwc3RhdGUKIAkJbW92CSVsNiwgJWc2Ci0jaWZkZWYgQ09ORklHX1NNUAotCQltb3YJVFNCX1JFRywgJWczCi0JCWxkeGEJWyVnM10gQVNJX0lNTVUsICVnNQotI2VuZGlmCi0JCWptcGwJJWwyICsgMHg0LCAlZzAKLQkJIGxkeAlbJWc2ICsgVElfVEFTS10sICVnNAorCQlzdHgJJWk3LCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0k3XQorCQlMT0FEX1BFUl9DUFVfQkFTRSglZzUsICVnNiwgJWc0LCAlZzMsICVsMSkKKwkJbGR4CVslZzYgKyBUSV9UQVNLXSwgJWc0CisJCWRvbmUKIAotMzoJCWxkdWIJWyVsNiArIFRJX0ZQREVQVEhdLCAlbDUKKzM6CQltb3YJQVNJX1AsICVsNworCQlsZHViCVslbDYgKyBUSV9GUERFUFRIXSwgJWw1CiAJCWFkZAklbDYsIFRJX0ZQU0FWRUQgKyAxLCAlbDQKIAkJc3JsCSVsNSwgMSwgJWwzCiAJCWFkZAklbDUsIDIsICVsNQpAQCAtMTI1LDYgKzE2NCw3IEBACiAJCSAqCTB4NTgJVEw0J3MgVFQKIAkJICoJMHg2MAlUTAogCQkgKi8KKwkJVFJBUF9MT0FEX1RIUkVBRF9SRUcoJWc2LCAlZzEpCiAJCXN1Ygklc3AsICgoNCAqIDgpICogNCkgKyA4LCAlZzIKIAkJcmRwcgkldGwsICVnMQogCkBAIC0xNDgsNiArMTg4LDExIEBACiAJCXJkcHIJJXR0LCAlZzMKIAkJc3R4CSVnMywgWyVnMiArIFNUQUNLX0JJQVMgKyAweDM4XQogCisJCXNldGhpCSVoaShpc19zdW40diksICVnMworCQlsZHV3CVslZzMgKyAlbG8oaXNfc3VuNHYpXSwgJWczCisJCWJybnoscG4JJWczLCBmaW5pc2hfdGwxX2NhcHR1cmUKKwkJIG5vcAorCiAJCXdycHIJJWcwLCAzLCAldGwKIAkJcmRwcgkldHN0YXRlLCAlZzMKIAkJc3R4CSVnMywgWyVnMiArIFNUQUNLX0JJQVMgKyAweDQwXQpAQCAtMTY4LDkxICsyMTMsMjAgQEAKIAkJcmRwcgkldHQsICVnMwogCQlzdHgJJWczLCBbJWcyICsgU1RBQ0tfQklBUyArIDB4NzhdCiAKLQkJd3JwcgklZzEsICV0bAogCQlzdHgJJWcxLCBbJWcyICsgU1RBQ0tfQklBUyArIDB4ODBdCiAKK2ZpbmlzaF90bDFfY2FwdHVyZToKKwkJd3JwcgklZzAsIDEsICV0bAorNjYxOgkJbm9wCisJCS5zZWN0aW9uIC5zdW40dl8xaW5zbl9wYXRjaCwgImF4IgorCQkud29yZAk2NjFiCisJCVNFVF9HTCgxKQorCQkucHJldmlvdXMKKwogCQlyZHByCSV0c3RhdGUsICVnMQogCQlzdWIJJWcyLCBTVEFDS0ZSQU1FX1NaICsgVFJBQ0VSRUdfU1ogLSBTVEFDS19CSUFTLCAlZzIKIAkJYmEscHQJJXhjYywgMWIKIAkJIGFuZGNjCSVnMSwgVFNUQVRFX1BSSVYsICVnMAogCi0JCS5hbGlnbgk2NAotCQkuZ2xvYmwJc2NldHJhcAotc2NldHJhcDoJcmRwcgklcGlsLCAlZzIKLQkJcmRwcgkldHN0YXRlLCAlZzEKLQkJc2xseAklZzIsIDIwLCAlZzMKLQkJYW5kY2MJJWcxLCBUU1RBVEVfUFJJViwgJWcwCi0JCW9yCSVnMSwgJWczLCAlZzEKLQkJYm5lLHBuCSV4Y2MsIDFmCi0JCSBzdWIJJXNwLCAoU1RBQ0tGUkFNRV9TWitUUkFDRVJFR19TWi1TVEFDS19CSUFTKSwgJWcyCi0JCXdycHIJJWcwLCA3LCAlY2xlYW53aW4KLQotCQlzbGx4CSVnMSwgNTEsICVnMwotCQlzZXRoaQklaGkoVEFTS19SRUdPRkYpLCAlZzIKLQkJb3IJJWcyLCAlbG8oVEFTS19SRUdPRkYpLCAlZzIKLQkJYnJseixwbgklZzMsIDFmCi0JCSBhZGQJJWc2LCAlZzIsICVnMgotCQl3cgklZzAsIDAsICVmcHJzCi0xOgkJcmRwcgkldHBjLCAlZzMKLQkJc3R4CSVnMSwgWyVnMiArIFNUQUNLRlJBTUVfU1ogKyBQVF9WOV9UU1RBVEVdCi0KLQkJcmRwcgkldG5wYywgJWcxCi0JCXN0eAklZzMsIFslZzIgKyBTVEFDS0ZSQU1FX1NaICsgUFRfVjlfVFBDXQotCQlzdHgJJWcxLCBbJWcyICsgU1RBQ0tGUkFNRV9TWiArIFBUX1Y5X1ROUENdCi0JCXNhdmUJJWcyLCAtU1RBQ0tfQklBUywgJXNwCSEgT3JkZXJpbmcgaGVyZSBpcyBjcml0aWNhbAotCQltb3YJJWc2LCAlbDYKLQkJYm5lLHBuCSV4Y2MsIDJmCi0JCSBtb3YJQVNJX1AsICVsNwotCQlyZHByCSVjYW5yZXN0b3JlLCAlZzMKLQotCQlyZHByCSV3c3RhdGUsICVnMgotCQl3cnByCSVnMCwgMCwgJWNhbnJlc3RvcmUKLQkJc2xsCSVnMiwgMywgJWcyCi0JCW1vdglQUklNQVJZX0NPTlRFWFQsICVsNAotCQl3cnByCSVnMywgMCwgJW90aGVyd2luCi0JCXdycHIJJWcyLCAwLCAld3N0YXRlCi0JCXNldGhpCSVoaShzcGFyYzY0X2tlcm5fcHJpX2NvbnRleHQpLCAlZzIKLQkJbGR4CVslZzIgKyAlbG8oc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KV0sICVnMwotCQlzdHhhCSVnMywgWyVsNF0gQVNJX0RNTVUKLQkJZmx1c2gJJWw2Ci0KLQkJbW92CUFTSV9BSVVTLCAlbDcKLTI6CQltb3YJJWc0LCAlbDQKLQkJbW92CSVnNSwgJWw1Ci0JCWFkZAklZzcsIDB4NCwgJWwyCi0JCXdycHIJJWcwLCBFVFJBUF9QU1RBVEUxLCAlcHN0YXRlCi0JCXN0eAklZzEsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfRzFdCi0JCXN0eAklZzIsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfRzJdCi0JCXNsbHgJJWw3LCAyNCwgJWw3Ci0KLQkJc3R4CSVnMywgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9HM10KLQkJcmRwcgklY3dwLCAlbDAKLQkJc3R4CSVnNCwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9HNF0KLQkJc3R4CSVnNSwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9HNV0KLQkJc3R4CSVnNiwgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9HNl0KLQkJc3R4CSVnNywgWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9HN10KLQkJb3IJJWw3LCAlbDAsICVsNwotCQlzZXRoaQklaGkoVFNUQVRFX1JNTyB8IFRTVEFURV9QRUYpLCAlbDAKLQotCQlvcgklbDcsICVsMCwgJWw3Ci0JCXdycHIJJWwyLCAldG5wYwotCQl3cnByCSVsNywgKFRTVEFURV9QUklWIHwgVFNUQVRFX0lFKSwgJXRzdGF0ZQotCQlzdHgJJWkwLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0kwXQotCQlzdHgJJWkxLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0kxXQotCQlzdHgJJWkyLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0kyXQotCQlzdHgJJWkzLCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0kzXQotCQlzdHgJJWk0LCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0k0XQotCi0JCXN0eAklaTUsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTVdCi0JCXN0eAklaTYsIFslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTZdCi0JCW1vdgklbDYsICVnNgotCQlzdHgJJWk3LCBbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0k3XQotI2lmZGVmIENPTkZJR19TTVAKLQkJbW92CVRTQl9SRUcsICVnMwotCQlsZHhhCVslZzNdIEFTSV9JTU1VLCAlZzUKLSNlbmRpZgotCQlsZHgJWyVnNiArIFRJX1RBU0tdLCAlZzQKLQkJZG9uZQotCiAjdW5kZWYgVEFTS19SRUdPRkYKICN1bmRlZiBFVFJBUF9QU1RBVEUxCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCmluZGV4IGI0OWRjZDQuLjNlYWRhYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaGVhZC5TCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL2hlYWQuaD4KICNpbmNsdWRlIDxhc20vdHRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CiAJCiAvKiBUaGlzIHNlY3Rpb24gZnJvbSBmcm9tIF9zdGFydCB0byBzcGFyYzY0X2Jvb3RfZW5kIHNob3VsZCBmaXQgaW50bwogICogMHgwMDAwMDAwMDAwNDA0MDAwIHRvIDB4MDAwMDAwMDAwMDQwODAwMC4KQEAgLTk0LDEyICs5NSwxNyBAQAogCXdycHIJJWcxLCAweDAsICVwc3RhdGUKIAliYSxhLHB0CSV4Y2MsIDFmCiAKLQkuZ2xvYmwJcHJvbV9maW5kZGV2X25hbWUsIHByb21fY2hvc2VuX3BhdGgKLQkuZ2xvYmwJcHJvbV9nZXRwcm9wX25hbWUsIHByb21fbW11X25hbWUKLQkuZ2xvYmwJcHJvbV9jYWxsbWV0aG9kX25hbWUsIHByb21fdHJhbnNsYXRlX25hbWUKKwkuZ2xvYmwJcHJvbV9maW5kZGV2X25hbWUsIHByb21fY2hvc2VuX3BhdGgsIHByb21fcm9vdF9ub2RlCisJLmdsb2JsCXByb21fZ2V0cHJvcF9uYW1lLCBwcm9tX21tdV9uYW1lLCBwcm9tX3BlZXJfbmFtZQorCS5nbG9ibAlwcm9tX2NhbGxtZXRob2RfbmFtZSwgcHJvbV90cmFuc2xhdGVfbmFtZSwgcHJvbV9yb290X2NvbXBhdGlibGUKIAkuZ2xvYmwJcHJvbV9tYXBfbmFtZSwgcHJvbV91bm1hcF9uYW1lLCBwcm9tX21tdV9paGFuZGxlX2NhY2hlCiAJLmdsb2JsCXByb21fYm9vdF9tYXBwZWRfcGMsIHByb21fYm9vdF9tYXBwaW5nX21vZGUKIAkuZ2xvYmwJcHJvbV9ib290X21hcHBpbmdfcGh5c19oaWdoLCBwcm9tX2Jvb3RfbWFwcGluZ19waHlzX2xvdworCS5nbG9ibAlpc19zdW40dgorcHJvbV9wZWVyX25hbWU6CisJLmFzY2l6CSJwZWVyIgorcHJvbV9jb21wYXRpYmxlX25hbWU6CisJLmFzY2l6CSJjb21wYXRpYmxlIgogcHJvbV9maW5kZGV2X25hbWU6CiAJLmFzY2l6CSJmaW5kZGV2aWNlIgogcHJvbV9jaG9zZW5fcGF0aDoKQEAgLTExNiw3ICsxMjIsMTMgQEAKIAkuYXNjaXoJIm1hcCIKIHByb21fdW5tYXBfbmFtZToKIAkuYXNjaXoJInVubWFwIgorcHJvbV9zdW40dl9uYW1lOgorCS5hc2Npegkic3VuNHYiCiAJLmFsaWduCTQKK3Byb21fcm9vdF9jb21wYXRpYmxlOgorCS5za2lwCTY0Citwcm9tX3Jvb3Rfbm9kZToKKwkud29yZAkwCiBwcm9tX21tdV9paGFuZGxlX2NhY2hlOgogCS53b3JkCTAKIHByb21fYm9vdF9tYXBwZWRfcGM6CkBAIC0xMjgsOCArMTQwLDU0IEBACiAJLnh3b3JkCTAKIHByb21fYm9vdF9tYXBwaW5nX3BoeXNfbG93OgogCS54d29yZAkwCitpc19zdW40djoKKwkud29yZAkwCiAxOgogCXJkCSVwYywgJWwwCisKKwltb3YJKDFiIC0gcHJvbV9wZWVyX25hbWUpLCAlbDEKKwlzdWIJJWwwLCAlbDEsICVsMQorCW1vdgkwLCAlbDIKKworCS8qIHByb21fcm9vdF9ub2RlID0gcHJvbV9wZWVyKDApICovCisJc3R4CSVsMSwgWyVzcCArIDIwNDcgKyAxMjggKyAweDAwXQkhIHNlcnZpY2UsICJwZWVyIgorCW1vdgkxLCAlbDMKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MDhdCSEgbnVtX2FyZ3MsIDEKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MTBdCSEgbnVtX3JldHMsIDEKKwlzdHgJJWwyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MThdCSEgYXJnMSwgMAorCXN0eAklZzAsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgyMF0JISByZXQxCisJY2FsbAklbDcKKwkgYWRkCSVzcCwgKDIwNDcgKyAxMjgpLCAlbzAJCSEgYXJndW1lbnQgYXJyYXkKKworCWxkeAlbJXNwICsgMjA0NyArIDEyOCArIDB4MjBdLCAlbDQJISBwcm9tIHJvb3Qgbm9kZQorCW1vdgkoMWIgLSBwcm9tX3Jvb3Rfbm9kZSksICVsMQorCXN1YgklbDAsICVsMSwgJWwxCisJc3R3CSVsNCwgWyVsMV0KKworCW1vdgkoMWIgLSBwcm9tX2dldHByb3BfbmFtZSksICVsMQorCW1vdgkoMWIgLSBwcm9tX2NvbXBhdGlibGVfbmFtZSksICVsMgorCW1vdgkoMWIgLSBwcm9tX3Jvb3RfY29tcGF0aWJsZSksICVsNQorCXN1YgklbDAsICVsMSwgJWwxCisJc3ViCSVsMCwgJWwyLCAlbDIKKwlzdWIJJWwwLCAlbDUsICVsNQorCisJLyogcHJvbV9nZXRwcm9wZXJ0eShwcm9tX3Jvb3Rfbm9kZSwgImNvbXBhdGlibGUiLAorCSAqICAgICAgICAgICAgICAgICAgJnByb21fcm9vdF9jb21wYXRpYmxlLCA2NCkKKwkgKi8KKwlzdHgJJWwxLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MDBdCSEgc2VydmljZSwgImdldHByb3AiCisJbW92CTQsICVsMworCXN0eAklbDMsIFslc3AgKyAyMDQ3ICsgMTI4ICsgMHgwOF0JISBudW1fYXJncywgNAorCW1vdgkxLCAlbDMKKwlzdHgJJWwzLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MTBdCSEgbnVtX3JldHMsIDEKKwlzdHgJJWw0LCBbJXNwICsgMjA0NyArIDEyOCArIDB4MThdCSEgYXJnMSwgcHJvbV9yb290X25vZGUKKwlzdHgJJWwyLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MjBdCSEgYXJnMiwgImNvbXBhdGlibGUiCisJc3R4CSVsNSwgWyVzcCArIDIwNDcgKyAxMjggKyAweDI4XQkhIGFyZzMsICZwcm9tX3Jvb3RfY29tcGF0aWJsZQorCW1vdgk2NCwgJWwzCisJc3R4CSVsMywgWyVzcCArIDIwNDcgKyAxMjggKyAweDMwXQkhIGFyZzQsIHNpemUKKwlzdHgJJWcwLCBbJXNwICsgMjA0NyArIDEyOCArIDB4MzhdCSEgcmV0MQorCWNhbGwJJWw3CisJIGFkZAklc3AsICgyMDQ3ICsgMTI4KSwgJW8wCQkhIGFyZ3VtZW50IGFycmF5CisKIAltb3YJKDFiIC0gcHJvbV9maW5kZGV2X25hbWUpLCAlbDEKIAltb3YJKDFiIC0gcHJvbV9jaG9zZW5fcGF0aCksICVsMgogCW1vdgkoMWIgLSBwcm9tX2Jvb3RfbWFwcGVkX3BjKSwgJWwzCkBAIC0yMzgsNiArMjk2LDI3IEBACiAJYWRkCSVzcCwgKDE5MiArIDEyOCksICVzcAogCiBzcGFyYzY0X2Jvb3RfYWZ0ZXJfcmVtYXA6CisJc2V0aGkJJWhpKHByb21fcm9vdF9jb21wYXRpYmxlKSwgJWcxCisJb3IJJWcxLCAlbG8ocHJvbV9yb290X2NvbXBhdGlibGUpLCAlZzEKKwlzZXRoaQklaGkocHJvbV9zdW40dl9uYW1lKSwgJWc3CisJb3IJJWc3LCAlbG8ocHJvbV9zdW40dl9uYW1lKSwgJWc3CisJbW92CTUsICVnMworMToJbGR1YglbJWc3XSwgJWcyCisJbGR1YglbJWcxXSwgJWc0CisJY21wCSVnMiwgJWc0CisJYm5lLHBuCSVpY2MsIDJmCisJIGFkZAklZzcsIDEsICVnNworCXN1YmNjCSVnMywgMSwgJWczCisJYm5lLHB0CSV4Y2MsIDFiCisJIGFkZAklZzEsIDEsICVnMQorCisJc2V0aGkJJWhpKGlzX3N1bjR2KSwgJWcxCisJb3IJJWcxLCAlbG8oaXNfc3VuNHYpLCAlZzEKKwltb3YJMSwgJWc3CisJc3R3CSVnNywgWyVnMV0KKworMjoKKwlCUkFOQ0hfSUZfU1VONFYoZzEsIGp1bXBfdG9fc3VuNHVfaW5pdCkKIAlCUkFOQ0hfSUZfQ0hFRVRBSF9CQVNFKGcxLGc3LGNoZWV0YWhfYm9vdCkKIAlCUkFOQ0hfSUZfQ0hFRVRBSF9QTFVTX09SX0ZPTExPV09OKGcxLGc3LGNoZWV0YWhfcGx1c19ib290KQogCWJhLHB0CSV4Y2MsIHNwaXRmaXJlX2Jvb3QKQEAgLTMwMSwyMCArMzgwLDU4IEBACiAJIG5vcAogCiBzdW40dV9pbml0OgorCUJSQU5DSF9JRl9TVU40VihnMSwgc3VuNHZfaW5pdCkKKwogCS8qIFNldCBjdHggMCAqLwotCW1vdglQUklNQVJZX0NPTlRFWFQsICVnNwotCXN0eGEJJWcwLCBbJWc3XSBBU0lfRE1NVQorCW1vdgkJUFJJTUFSWV9DT05URVhULCAlZzcKKwlzdHhhCQklZzAsIFslZzddIEFTSV9ETU1VCisJbWVtYmFyCQkjU3luYworCisJbW92CQlTRUNPTkRBUllfQ09OVEVYVCwgJWc3CisJc3R4YQkJJWcwLCBbJWc3XSBBU0lfRE1NVQogCW1lbWJhcgkjU3luYwogCi0JbW92CVNFQ09OREFSWV9DT05URVhULCAlZzcKLQlzdHhhCSVnMCwgWyVnN10gQVNJX0RNTVUKLQltZW1iYXIJI1N5bmMKKwliYSxwdAkJJXhjYywgc3VuNHVfY29udGludWUKKwkgbm9wCiAKLQlCUkFOQ0hfSUZfQU5ZX0NIRUVUQUgoZzEsZzcsY2hlZXRhaF90bGJfZml4dXApCitzdW40dl9pbml0OgorCS8qIFNldCBjdHggMCAqLworCW1vdgkJUFJJTUFSWV9DT05URVhULCAlZzcKKwlzdHhhCQklZzAsIFslZzddIEFTSV9NTVUKKwltZW1iYXIJCSNTeW5jCisKKwltb3YJCVNFQ09OREFSWV9DT05URVhULCAlZzcKKwlzdHhhCQklZzAsIFslZzddIEFTSV9NTVUKKwltZW1iYXIJCSNTeW5jCisJYmEscHQJCSV4Y2MsIG5pYWdhcmFfdGxiX2ZpeHVwCisJIG5vcAorCitzdW40dV9jb250aW51ZToKKwlCUkFOQ0hfSUZfQU5ZX0NIRUVUQUgoZzEsIGc3LCBjaGVldGFoX3RsYl9maXh1cCkKIAogCWJhLHB0CSV4Y2MsIHNwaXRmaXJlX3RsYl9maXh1cAogCSBub3AKIAorbmlhZ2FyYV90bGJfZml4dXA6CisJbW92CTMsICVnMgkJLyogU2V0IFRMQiB0eXBlIHRvIGh5cGVydmlzb3IuICovCisJc2V0aGkJJWhpKHRsYl90eXBlKSwgJWcxCisJc3R3CSVnMiwgWyVnMSArICVsbyh0bGJfdHlwZSldCisKKwkvKiBQYXRjaCBjb3B5L2NsZWFyIG9wcy4gICovCisJY2FsbAluaWFnYXJhX3BhdGNoX2NvcHlvcHMKKwkgbm9wCisJY2FsbAluaWFnYXJhX3BhdGNoX2J6ZXJvCisJIG5vcAorCWNhbGwJbmlhZ2FyYV9wYXRjaF9wYWdlb3BzCisJIG5vcAorCisJLyogUGF0Y2ggVExCL2NhY2hlIG9wcy4gICovCisJY2FsbAloeXBlcnZpc29yX3BhdGNoX2NhY2hldGxib3BzCisJIG5vcAorCisJYmEscHQJJXhjYywgdGxiX2ZpeHVwX2RvbmUKKwkgbm9wCisKIGNoZWV0YWhfdGxiX2ZpeHVwOgogCW1vdgkyLCAlZzIJCS8qIFNldCBUTEIgdHlwZSB0byBjaGVldGFoKy4gKi8KIAlCUkFOQ0hfSUZfQ0hFRVRBSF9QTFVTX09SX0ZPTExPV09OKGcxLGc3LDFmKQpAQCAtNDExLDg1ICs1MjgsNTUgQEAKIAl3cnByCSVnMCwgMTUsICVwaWwKIAogCS8qIE1ha2UgdGhlIGZpcm13YXJlIGNhbGwgdG8ganVtcCBvdmVyIHRvIHRoZSBMaW51eCB0cmFwIHRhYmxlLiAgKi8KLQljYWxsCXByb21fc2V0X3RyYXBfdGFibGUKKwlzZXRoaQklaGkoaXNfc3VuNHYpLCAlbzAKKwlsZHV3CVslbzAgKyAlbG8oaXNfc3VuNHYpXSwgJW8wCisJYnJ6LHB0CSVvMCwgMWYKKwkgbm9wCisKKwlUUkFQX0xPQURfVFJBUF9CTE9DSyglZzIsICVnMykKKwlhZGQJJWcyLCBUUkFQX1BFUl9DUFVfRkFVTFRfSU5GTywgJWcyCisJc3R4YQklZzIsIFslZzBdIEFTSV9TQ1JBVENIUEFECisKKwkvKiBDb21wdXRlIHBoeXNpY2FsIGFkZHJlc3M6CisJICoKKwkgKiBwYWRkciA9IGtlcm5fYmFzZSArIChtbWZzYV92YWRkciAtIEtFUk5CQVNFKQorCSAqLworCXNldGhpCSVoaShLRVJOQkFTRSksICVnMworCXN1YgklZzIsICVnMywgJWcyCisJc2V0aGkJJWhpKGtlcm5fYmFzZSksICVnMworCWxkeAlbJWczICsgJWxvKGtlcm5fYmFzZSldLCAlZzMKKwlhZGQJJWcyLCAlZzMsICVvMQorCisJY2FsbAlwcm9tX3NldF90cmFwX3RhYmxlX3N1bjR2CisJIHNldGhpCSVoaShzcGFyYzY0X3R0YWJsZV90bDApLCAlbzAKKworCWJhLHB0CSV4Y2MsIDJmCisJIG5vcAorCisxOgljYWxsCXByb21fc2V0X3RyYXBfdGFibGUKIAkgc2V0aGkJJWhpKHNwYXJjNjRfdHRhYmxlX3RsMCksICVvMAogCiAJLyogU3RhcnQgdXNpbmcgcHJvcGVyIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MgaW4gY3R4IHJlZ2lzdGVyLiAgKi8KLQlzZXRoaQklaGkoc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KSwgJWczCisyOglzZXRoaQklaGkoc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KSwgJWczCiAJbGR4CVslZzMgKyAlbG8oc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KV0sICVnMgotCW1vdglQUklNQVJZX0NPTlRFWFQsICVnMQotCXN0eGEJJWcyLCBbJWcxXSBBU0lfRE1NVQorCisJbW92CQlQUklNQVJZX0NPTlRFWFQsICVnMQorCis2NjE6CXN0eGEJCSVnMiwgWyVnMV0gQVNJX0RNTVUKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCXN0eGEJCSVnMiwgWyVnMV0gQVNJX01NVQorCS5wcmV2aW91cworCiAJbWVtYmFyCSNTeW5jCiAKLQkvKiBUaGUgTGludXggdHJhcCBoYW5kbGVycyBleHBlY3QgdmFyaW91cyB0cmFwIGdsb2JhbCByZWdpc3RlcnMKLQkgKiB0byBiZSBzZXR1cCB3aXRoIHNvbWUgZml4ZWQgdmFsdWVzLiAgU28gaGVyZSB3ZSBzZXQgdGhlc2UKLQkgKiB1cCB2ZXJ5IGNhcmVmdWxseS4gIFRoZXNlIGdsb2JhbHMgYXJlOgotCSAqCi0JICogQWx0ZXJuYXRlIEdsb2JhbHMgKFBTVEFURV9BRyk6Ci0JICoKLQkgKiAlZzYJCQktLT4gY3VycmVudF90aHJlYWRfaW5mbygpCi0JICoKLQkgKiBNTVUgR2xvYmFscyAoUFNUQVRFX01HKToKLQkgKgotCSAqICVnMQkJCS0tPiBUTEJfU0ZTUgotCSAqICVnMgkJCS0tPiAoKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1o0TUIgfAotCSAqCQkJICAgICAgX1BBR0VfQ1AgfCBfUEFHRV9DViB8IF9QQUdFX1AgfCBfUEFHRV9XKQotCSAqCQkJICAgICBeIDB4ZmZmZmY4MDAwMDAwMDAwMCkKLQkgKiAodGhpcyAlZzIgdmFsdWUgaXMgdXNlZCBmb3IgY29tcHV0aW5nIHRoZSBQQUdFX09GRlNFVCBrZXJuZWwKLQkgKiAgVExCIGVudHJpZXMgcXVpY2tseSwgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZmF1bHQgWE9SJ2QKLQkgKiAgd2l0aCB0aGlzICVnMiB2YWx1ZSBpcyB0aGUgUFRFIHRvIGxvYWQgaW50byB0aGUgVExCKQotCSAqICVnMwkJCS0tPiBWUFRFX0JBU0VfQ0hFRVRBSCBvciBWUFRFX0JBU0VfU1BJVEZJUkUKLQkgKgotCSAqIEludGVycnVwdCBHbG9iYWxzIChQU1RBVEVfSUcsIHNldHVwIGJ5IGluaXRfaXJxd29ya19jdXJjcHUoKSk6Ci0JICoKLQkgKiAlZzYJCQktLT4gX19pcnFfd29ya1tzbXBfcHJvY2Vzc29yX2lkKCldCi0JICovCi0KLQlyZHByCSVwc3RhdGUsICVvMQotCW1vdgklZzYsICVvMgotCXdycHIJJW8xLCBQU1RBVEVfQUcsICVwc3RhdGUKLQltb3YJJW8yLCAlZzYKLQotI2RlZmluZSBLRVJOX0hJR0hCSVRTCQkoKF9QQUdFX1ZBTElEfF9QQUdFX1NaNE1CKV4weGZmZmZmODAwMDAwMDAwMDApCi0jZGVmaW5lIEtFUk5fTE9XQklUUwkJKF9QQUdFX0NQIHwgX1BBR0VfQ1YgfCBfUEFHRV9QIHwgX1BBR0VfVykKLQl3cnByCSVvMSwgUFNUQVRFX01HLCAlcHN0YXRlCi0JbW92CVRTQl9SRUcsICVnMQotCXN0eGEJJWcwLCBbJWcxXSBBU0lfRE1NVQotCW1lbWJhcgkjU3luYwotCXN0eGEJJWcwLCBbJWcxXSBBU0lfSU1NVQotCW1lbWJhcgkjU3luYwotCW1vdglUTEJfU0ZTUiwgJWcxCi0Jc2V0aGkJJXVoaShLRVJOX0hJR0hCSVRTKSwgJWcyCi0Jb3IJJWcyLCAldWxvKEtFUk5fSElHSEJJVFMpLCAlZzIKLQlzbGx4CSVnMiwgMzIsICVnMgotCW9yCSVnMiwgS0VSTl9MT1dCSVRTLCAlZzIKLQotCUJSQU5DSF9JRl9BTllfQ0hFRVRBSChnMyxnNyw4ZikKLQliYSxwdAkleGNjLCA5ZgotCSBub3AKLQotODoKLQlzZXRoaQkJJXVoaShWUFRFX0JBU0VfQ0hFRVRBSCksICVnMwotCW9yCQklZzMsICV1bG8oVlBURV9CQVNFX0NIRUVUQUgpLCAlZzMKLQliYSxwdAkJJXhjYywgMmYKLQkgc2xseAkJJWczLCAzMiwgJWczCi0KLTk6Ci0Jc2V0aGkJCSV1aGkoVlBURV9CQVNFX1NQSVRGSVJFKSwgJWczCi0Jb3IJCSVnMywgJXVsbyhWUFRFX0JBU0VfU1BJVEZJUkUpLCAlZzMKLQlzbGx4CQklZzMsIDMyLCAlZzMKLQotMjoKLQljbHIJJWc3Ci0jdW5kZWYgS0VSTl9ISUdIQklUUwotI3VuZGVmIEtFUk5fTE9XQklUUwotCiAJLyogS2lsbCBQUk9NIHRpbWVyICovCiAJc2V0aGkJJWhpKDB4ODAwMDAwMDApLCAlbzIKIAlzbGx4CSVvMiwgMzIsICVvMgogCXdyCSVvMiwgMCwgJXRpY2tfY21wcgogCi0JQlJBTkNIX0lGX0FOWV9DSEVFVEFIKG8yLG8zLDFmKQorCUJSQU5DSF9JRl9TVU40VihvMiwgMWYpCisJQlJBTkNIX0lGX0FOWV9DSEVFVEFIKG8yLCBvMywgMWYpCiAKIAliYSxwdAkleGNjLCAyZgogCSBub3AKQEAgLTUwMiw3ICs1ODksNiBAQAogCiAyOgogCXdycHIJJWcwLCAlZzAsICV3c3RhdGUKLQl3cnByCSVvMSwgMHgwLCAlcHN0YXRlCiAKIAljYWxsCWluaXRfaXJxd29ya19jdXJjcHUKIAkgbm9wCkBAIC01MTcsNyArNjAzLDcgQEAKIAkgcmVzdG9yZQogCiAJLmdsb2JsCXNldHVwX3RiYQotc2V0dXBfdGJhOgkvKiBpMCA9IGlzX3N0YXJmaXJlICovCitzZXR1cF90YmE6CiAJc2F2ZQklc3AsIC0xOTIsICVzcAogCiAJLyogVGhlIGJvb3QgcHJvY2Vzc29yIGlzIHRoZSBvbmx5IGNwdSB3aGljaCBpbnZva2VzIHRoaXMKQEAgLTUzNiwzMSArNjIyLDM1IEBACiAJIHJlc3RvcmUKIHNwYXJjNjRfYm9vdF9lbmQ6CiAKLSNpbmNsdWRlICJzeXN0YmxzLlMiCiAjaW5jbHVkZSAia3RsYi5TIgorI2luY2x1ZGUgInRzYi5TIgogI2luY2x1ZGUgImV0cmFwLlMiCiAjaW5jbHVkZSAicnRyYXAuUyIKICNpbmNsdWRlICJ3aW5maXh1cC5TIgogI2luY2x1ZGUgImVudHJ5LlMiCisjaW5jbHVkZSAic3VuNHZfdGxiX21pc3MuUyIKKyNpbmNsdWRlICJzdW40dl9pdmVjLlMiCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIHNraXAgbWFrZXMgc3VyZSB0aGUgdHJhcCB0YWJsZSBpbiB0dGFibGUuUyBpcyBhbGlnbmVkCiAgKiBvbiBhIDMySyBib3VuZGFyeSBhcyByZXF1aXJlZCBieSB0aGUgdjkgc3BlY3MgZm9yIFRCQSByZWdpc3Rlci4KKyAqCisgKiBXZSBhbGlnbiB0byBhIDMySyBib3VuZGFyeSwgdGhlbiB3ZSBoYXZlIHRoZSAzMksga2VybmVsIFRTQiwKKyAqIHRoZW4gdGhlIDMySyBhbGlnbmVkIHRyYXAgdGFibGUuCiAgKi8KIDE6CiAJLnNraXAJMHg0MDAwICsgX3N0YXJ0IC0gMWIKIAotI2lmZGVmIENPTkZJR19TQlVTCi0vKiBUaGlzIGlzIGp1c3QgYSBoYWNrIHRvIGZvb2wgbWFrZSBkZXBlbmQgY29uZmlnLmggZGlzY292ZXJpbmcKLSAgIHN0cmF0ZWd5OiBBcyB0aGUgLlMgZmlsZXMgYmVsb3cgbmVlZCBjb25maWcuaCwgYnV0Ci0gICBtYWtlIGRlcGVuZCBkb2VzIG5vdCBmaW5kIGl0IGZvciB0aGVtLCB3ZSBpbmNsdWRlIGNvbmZpZy5oCi0gICBpbiBoZWFkLlMgKi8KLSNlbmRpZgorCS5nbG9ibAlzd2FwcGVyX3RzYgorc3dhcHBlcl90c2I6CisJLnNraXAJKDMyICogMTAyNCkKIAogISAweDAwMDAwMDAwMDA0MDgwMDAKIAogI2luY2x1ZGUgInR0YWJsZS5TIgogCisjaW5jbHVkZSAic3lzdGJscy5TIgorCiAJLmRhdGEKIAkuYWxpZ24JOAogCS5nbG9ibAlwcm9tX3RiYSwgdGxiX3R5cGUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCmluZGV4IDIzMzUyNmIuLjExZTY0NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTM5LDYgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogI2luY2x1ZGUgPGFzbS9hdXhpby5oPgorI2luY2x1ZGUgPGFzbS9oZWFkLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdm9pZCBkaXN0cmlidXRlX2lycXModm9pZCk7CkBAIC0xMTUsOSArMTE3LDcgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKLQkJZm9yIChqID0gMDsgaiA8IE5SX0NQVVM7IGorKykgewotCQkJaWYgKCFjcHVfb25saW5lKGopKQotCQkJCWNvbnRpbnVlOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKIAkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKIAkJCQkgICBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAJCX0KQEAgLTEzNiwxMiArMTM2LDQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlYWxfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bjR1X2NvbXB1dGVfdGlkKHVuc2lnbmVkIGxvbmcgaW1hcCwgdW5zaWduZWQgbG9uZyBjcHVpZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGlkOworCisJaWYgKHRoaXNfaXNfc3RhcmZpcmUpIHsKKwkJdGlkID0gc3RhcmZpcmVfdHJhbnNsYXRlKGltYXAsIGNwdWlkKTsKKwkJdGlkIDw8PSBJTUFQX1RJRF9TSElGVDsKKwkJdGlkICY9IElNQVBfVElEX1VQQTsKKwl9IGVsc2UgeworCQlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdmVyOworCisJCQlfX2FzbV9fICgicmRwciAlJXZlciwgJTAiIDogIj1yIiAodmVyKSk7CisJCQlpZiAoKHZlciA+PiAzMlVMKSA9PSBfX0pBTEFQRU5PX0lEIHx8CisJCQkgICAgKHZlciA+PiAzMlVMKSA9PSBfX1NFUlJBTk9fSUQpIHsKKwkJCQl0aWQgPSBjcHVpZCA8PCBJTUFQX1RJRF9TSElGVDsKKwkJCQl0aWQgJj0gSU1BUF9USURfSkJVUzsKKwkJCX0gZWxzZSB7CisJCQkJdW5zaWduZWQgaW50IGEgPSBjcHVpZCAmIDB4MWY7CisJCQkJdW5zaWduZWQgaW50IG4gPSAoY3B1aWQgPj4gNSkgJiAweDFmOworCisJCQkJdGlkID0gKChhIDw8IElNQVBfQUlEX1NISUZUKSB8CisJCQkJICAgICAgIChuIDw8IElNQVBfTklEX1NISUZUKSk7CisJCQkJdGlkICY9IChJTUFQX0FJRF9TQUZBUkkgfAorCQkJCQlJTUFQX05JRF9TQUZBUkkpOzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXRpZCA9IGNwdWlkIDw8IElNQVBfVElEX1NISUZUOworCQkJdGlkICY9IElNQVBfVElEX1VQQTsKKwkJfQorCX0KKworCXJldHVybiB0aWQ7Cit9CisKIC8qIE5vdyB0aGVzZSBhcmUgYWx3YXlzIHBhc3NlZCBhIHRydWUgZnVsbHkgc3BlY2lmaWVkIHN1bjR1IElOTy4gKi8KIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXN0cnVjdCBpbm9fYnVja2V0ICpidWNrZXQgPSBfX2J1Y2tldChpcnEpOwotCXVuc2lnbmVkIGxvbmcgaW1hcDsKLQl1bnNpZ25lZCBsb25nIHRpZDsKKwl1bnNpZ25lZCBsb25nIGltYXAsIGNwdWlkOwogCiAJaW1hcCA9IGJ1Y2tldC0+aW1hcDsKIAlpZiAoaW1hcCA9PSAwVUwpCkBAIC0xNDksNDYgKzE4NSwzNyBAQAogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKLQkJdW5zaWduZWQgbG9uZyB2ZXI7Ci0KLQkJX19hc21fXyAoInJkcHIgJSV2ZXIsICUwIiA6ICI9ciIgKHZlcikpOwotCQlpZiAoKHZlciA+PiAzMikgPT0gMHgwMDNlMDAxNikgewotCQkJLyogV2Ugc2V0IGl0IHRvIG91ciBKQlVTIElELiAqLwotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEgWyUlZzBdICUxLCAlMCIKLQkJCQkJICAgICA6ICI9ciIgKHRpZCkKLQkJCQkJICAgICA6ICJpIiAoQVNJX0pCVVNfQ09ORklHKSk7Ci0JCQl0aWQgPSAoKHRpZCAmICgweDFmVUw8PDE3KSkgPDwgOSk7Ci0JCQl0aWQgJj0gSU1BUF9USURfSkJVUzsKLQkJfSBlbHNlIHsKLQkJCS8qIFdlIHNldCBpdCB0byBvdXIgU2FmYXJpIEFJRC4gKi8KLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhIFslJWcwXSAlMSwgJTAiCi0JCQkJCSAgICAgOiAiPXIiICh0aWQpCi0JCQkJCSAgICAgOiAiaSIgKEFTSV9TQUZBUklfQ09ORklHKSk7Ci0JCQl0aWQgPSAoKHRpZCAmICgweDNmZlVMPDwxNykpIDw8IDkpOwotCQkJdGlkICY9IElNQVBfQUlEX1NBRkFSSTsKLQkJfQotCX0gZWxzZSBpZiAodGhpc19pc19zdGFyZmlyZSA9PSAwKSB7Ci0JCS8qIFdlIHNldCBpdCB0byBvdXIgVVBBIE1JRC4gKi8KLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkeGEgWyUlZzBdICUxLCAlMCIKLQkJCQkgICAgIDogIj1yIiAodGlkKQotCQkJCSAgICAgOiAiaSIgKEFTSV9VUEFfQ09ORklHKSk7Ci0JCXRpZCA9ICgodGlkICYgVVBBX0NPTkZJR19NSUQpIDw8IDkpOwotCQl0aWQgJj0gSU1BUF9USURfVVBBOwotCX0gZWxzZSB7Ci0JCXRpZCA9IChzdGFyZmlyZV90cmFuc2xhdGUoaW1hcCwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA8PCAyNik7Ci0JCXRpZCAmPSBJTUFQX1RJRF9VUEE7Ci0JfQotCi0JLyogTk9URSBOT1RFIE5PVEUsIElHTiBhbmQgSU5PIGFyZSByZWFkLW9ubHksIElHTiBpcyBhIHByb2R1Y3QKLQkgKiBvZiB0aGlzIFNZU0lPJ3MgcHJlY29uZmlndXJlZCBJR04gaW4gdGhlIFNZU0lPIENvbnRyb2wKLQkgKiBSZWdpc3RlciwgdGhlIGhhcmR3YXJlIGp1c3QgbWlycm9ycyB0aGF0IHZhbHVlIGhlcmUuCi0JICogSG93ZXZlciBmb3IgR3JhcGhpY3MgYW5kIFVQQSBTbGF2ZSBkZXZpY2VzIHRoZSBmdWxsCi0JICogSU1BUF9JTlIgZmllbGQgY2FuIGJlIHNldCBieSB0aGUgcHJvZ3JhbW1lciBoZXJlLgotCSAqCi0JICogVGhpbmdzIGxpa2UgRkZCIGNhbiBub3cgYmUgaGFuZGxlZCB2aWEgdGhlIG5ldyBJUlEgbWVjaGFuaXNtLgorCS8qIFRoaXMgZ2V0cyB0aGUgcGh5c2ljYWwgcHJvY2Vzc29yIElELCBldmVuIG9uIHVuaXByb2Nlc3NvciwKKwkgKiBzbyB3ZSBjYW4gYWx3YXlzIHByb2dyYW0gdGhlIGludGVycnVwdCB0YXJnZXQgY29ycmVjdGx5LgogCSAqLwotCXVwYV93cml0ZWwodGlkIHwgSU1BUF9WQUxJRCwgaW1hcCk7CisJY3B1aWQgPSByZWFsX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJdW5zaWduZWQgaW50IGlubyA9IF9faXJxX2lubyhpcnEpOworCQlpbnQgZXJyOworCisJCWVyciA9IHN1bjR2X2ludHJfc2V0dGFyZ2V0KGlubywgY3B1aWQpOworCQlpZiAoZXJyICE9IEhWX0VPSykKKwkJCXByaW50aygic3VuNHZfaW50cl9zZXR0YXJnZXQoJXgsJWx1KTogZXJyKCVkKVxuIiwKKwkJCSAgICAgICBpbm8sIGNwdWlkLCBlcnIpOworCQllcnIgPSBzdW40dl9pbnRyX3NldGVuYWJsZWQoaW5vLCBIVl9JTlRSX0VOQUJMRUQpOworCQlpZiAoZXJyICE9IEhWX0VPSykKKwkJCXByaW50aygic3VuNHZfaW50cl9zZXRlbmFibGVkKCV4KTogZXJyKCVkKVxuIiwKKwkJCSAgICAgICBpbm8sIGVycik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IHRpZCA9IHN1bjR1X2NvbXB1dGVfdGlkKGltYXAsIGNwdWlkKTsKKworCQkvKiBOT1RFIE5PVEUgTk9URSwgSUdOIGFuZCBJTk8gYXJlIHJlYWQtb25seSwgSUdOIGlzIGEgcHJvZHVjdAorCQkgKiBvZiB0aGlzIFNZU0lPJ3MgcHJlY29uZmlndXJlZCBJR04gaW4gdGhlIFNZU0lPIENvbnRyb2wKKwkJICogUmVnaXN0ZXIsIHRoZSBoYXJkd2FyZSBqdXN0IG1pcnJvcnMgdGhhdCB2YWx1ZSBoZXJlLgorCQkgKiBIb3dldmVyIGZvciBHcmFwaGljcyBhbmQgVVBBIFNsYXZlIGRldmljZXMgdGhlIGZ1bGwKKwkJICogSU1BUF9JTlIgZmllbGQgY2FuIGJlIHNldCBieSB0aGUgcHJvZ3JhbW1lciBoZXJlLgorCQkgKgorCQkgKiBUaGluZ3MgbGlrZSBGRkIgY2FuIG5vdyBiZSBoYW5kbGVkIHZpYSB0aGUgbmV3IElSUQorCQkgKiBtZWNoYW5pc20uCisJCSAqLworCQl1cGFfd3JpdGVsKHRpZCB8IElNQVBfVkFMSUQsIGltYXApOworCX0KIAogCXByZWVtcHRfZW5hYmxlKCk7CiB9CkBAIC0yMDEsMTYgKzIyOCwyNiBAQAogCiAJaW1hcCA9IGJ1Y2tldC0+aW1hcDsKIAlpZiAoaW1hcCAhPSAwVUwpIHsKLQkJdTMyIHRtcDsKKwkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJCXVuc2lnbmVkIGludCBpbm8gPSBfX2lycV9pbm8oaXJxKTsKKwkJCWludCBlcnI7CiAKLQkJLyogTk9URTogV2UgZG8gbm90IHdhbnQgdG8gZnV0eiB3aXRoIHRoZSBJUlEgY2xlYXIgcmVnaXN0ZXJzCi0JCSAqICAgICAgIGFuZCBtb3ZlIHRoZSBzdGF0ZSB0byBJRExFLCB0aGUgU0NTSSBjb2RlIGRvZXMgY2FsbAotCQkgKiAgICAgICBkaXNhYmxlX2lycSgpIHRvIGFzc3VyZSBhdG9taWNpdHkgaW4gdGhlIHF1ZXVlIGNtZAotCQkgKiAgICAgICBTQ1NJIGFkYXB0ZXIgZHJpdmVyIGNvZGUuICBUaHVzIHdlJ2QgbG9zZSBpbnRlcnJ1cHRzLgotCQkgKi8KLQkJdG1wID0gdXBhX3JlYWRsKGltYXApOwotCQl0bXAgJj0gfklNQVBfVkFMSUQ7Ci0JCXVwYV93cml0ZWwodG1wLCBpbWFwKTsKKwkJCWVyciA9IHN1bjR2X2ludHJfc2V0ZW5hYmxlZChpbm8sIEhWX0lOVFJfRElTQUJMRUQpOworCQkJaWYgKGVyciAhPSBIVl9FT0spCisJCQkJcHJpbnRrKCJzdW40dl9pbnRyX3NldGVuYWJsZWQoJXgpOiAiCisJCQkJICAgICAgICJlcnIoJWQpXG4iLCBpbm8sIGVycik7CisJCX0gZWxzZSB7CisJCQl1MzIgdG1wOworCisJCQkvKiBOT1RFOiBXZSBkbyBub3Qgd2FudCB0byBmdXR6IHdpdGggdGhlIElSUSBjbGVhciByZWdpc3RlcnMKKwkJCSAqICAgICAgIGFuZCBtb3ZlIHRoZSBzdGF0ZSB0byBJRExFLCB0aGUgU0NTSSBjb2RlIGRvZXMgY2FsbAorCQkJICogICAgICAgZGlzYWJsZV9pcnEoKSB0byBhc3N1cmUgYXRvbWljaXR5IGluIHRoZSBxdWV1ZSBjbWQKKwkJCSAqICAgICAgIFNDU0kgYWRhcHRlciBkcml2ZXIgY29kZS4gIFRodXMgd2UnZCBsb3NlIGludGVycnVwdHMuCisJCQkgKi8KKwkJCXRtcCA9IHVwYV9yZWFkbChpbWFwKTsKKwkJCXRtcCAmPSB+SU1BUF9WQUxJRDsKKwkJCXVwYV93cml0ZWwodG1wLCBpbWFwKTsKKwkJfQogCX0KIH0KIApAQCAtMjQ4LDYgKzI4NSw4IEBACiAJCXJldHVybiBfX2lycSgmcGlsMF9kdW1teV9idWNrZXQpOwogCX0KIAorCUJVR19PTih0bGJfdHlwZSA9PSBoeXBlcnZpc29yKTsKKwogCS8qIFJVTEU6IEJvdGggbXVzdCBiZSBzcGVjaWZpZWQgaW4gYWxsIG90aGVyIGNhc2VzLiAqLwogCWlmIChpY2xyID09IDBVTCB8fCBpbWFwID09IDBVTCkgewogCQlwcm9tX3ByaW50ZigiSW52YWxpZCBidWlsZF9pcnEgJWQgJWQgJTAxNmx4ICUwMTZseFxuIiwKQEAgLTI3NSwxMiArMzE0LDExIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWJ1Y2tldC0+aXJxX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxX2Rlc2MpLCBHRlBfQVRPTUlDKTsKKwlidWNrZXQtPmlycV9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlycV9kZXNjKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWNrZXQtPmlycV9pbmZvKSB7CiAJCXByb21fcHJpbnRmKCJJUlE6IEVycm9yLCBrbWFsbG9jKGlycV9kZXNjKSBmYWlsZWQuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW1lbXNldChidWNrZXQtPmlycV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGlycV9kZXNjKSk7CiAKIAkvKiBPaywgbG9va3MgZ29vZCwgc2V0IGl0IHVwLiAgRG9uJ3QgdG91Y2ggdGhlIGlycV9jaGFpbiBvcgogCSAqIHRoZSBwZW5kaW5nIGZsYWcuCkBAIC0yOTQsNiArMzMyLDM3IEBACiAJcmV0dXJuIF9faXJxKGJ1Y2tldCk7CiB9CiAKK3Vuc2lnbmVkIGludCBzdW40dl9idWlsZF9pcnEodTMyIGRldmhhbmRsZSwgdW5zaWduZWQgaW50IGRldmlubywgaW50IHBpbCwgdW5zaWduZWQgY2hhciBmbGFncykKK3sKKwlzdHJ1Y3QgaW5vX2J1Y2tldCAqYnVja2V0OworCXVuc2lnbmVkIGxvbmcgc3lzaW5vOworCisJc3lzaW5vID0gc3VuNHZfZGV2aW5vX3RvX3N5c2lubyhkZXZoYW5kbGUsIGRldmlubyk7CisKKwlidWNrZXQgPSAmaXZlY3Rvcl90YWJsZVtzeXNpbm9dOworCisJLyogQ2F0Y2ggYWNjaWRlbnRhbCBhY2Nlc3NlcyB0byB0aGVzZSB0aGluZ3MuICBJTUFQL0lDTFIgaGFuZGxpbmcKKwkgKiBpcyBkb25lIGJ5IGh5cGVydmlzb3IgY2FsbHMgb24gc3VuNHYgcGxhdGZvcm1zLCBub3QgYnkgZGlyZWN0CisJICogcmVnaXN0ZXIgYWNjZXNzZXMuCisJICoKKwkgKiBCdXQgd2UgbmVlZCB0byBtYWtlIHRoZW0gbG9vayB1bmlxdWUgZm9yIHRoZSBkaXNhYmxlX2lycSgpIGxvZ2ljCisJICogaW4gZnJlZV9pcnEoKS4KKwkgKi8KKwlidWNrZXQtPmltYXAgPSB+MFVMIC0gc3lzaW5vOworCWJ1Y2tldC0+aWNsciA9IH4wVUwgLSBzeXNpbm87CisKKwlidWNrZXQtPnBpbCA9IHBpbDsKKwlidWNrZXQtPmZsYWdzID0gZmxhZ3M7CisKKwlidWNrZXQtPmlycV9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlycV9kZXNjKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWNrZXQtPmlycV9pbmZvKSB7CisJCXByb21fcHJpbnRmKCJJUlE6IEVycm9yLCBrbWFsbG9jKGlycV9kZXNjKSBmYWlsZWQuXG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJcmV0dXJuIF9faXJxKGJ1Y2tldCk7Cit9CisKIHN0YXRpYyB2b2lkIGF0b21pY19idWNrZXRfaW5zZXJ0KHN0cnVjdCBpbm9fYnVja2V0ICpidWNrZXQpCiB7CiAJdW5zaWduZWQgbG9uZyBwc3RhdGU7CkBAIC00ODIsNyArNTUxLDYgQEAKIAlidWNrZXQgPSBfX2J1Y2tldChpcnEpOwogCWlmIChidWNrZXQgIT0gJnBpbDBfZHVtbXlfYnVja2V0KSB7CiAJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGJ1Y2tldC0+aXJxX2luZm87Ci0JCXVuc2lnbmVkIGxvbmcgaW1hcCA9IGJ1Y2tldC0+aW1hcDsKIAkJaW50IGVudCwgaTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lSUV9ERVNDX0FDVElPTjsgaSsrKSB7CkBAIC00OTUsNiArNTYzLDggQEAKIAkJfQogCiAJCWlmICghZGVzYy0+YWN0aW9uX2FjdGl2ZV9tYXNrKSB7CisJCQl1bnNpZ25lZCBsb25nIGltYXAgPSBidWNrZXQtPmltYXA7CisKIAkJCS8qIFRoaXMgdW5pcXVlIGludGVycnVwdCBzb3VyY2UgaXMgbm93IGluYWN0aXZlLiAqLwogCQkJYnVja2V0LT5mbGFncyAmPSB+SUJGX0FDVElWRTsKIApAQCAtNTkyLDcgKzY2MiwxOCBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChicC0+cGlsICE9IDApIHsKLQkJdXBhX3dyaXRlbChJQ0xSX0lETEUsIGJwLT5pY2xyKTsKKwkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJCXVuc2lnbmVkIGludCBpbm8gPSBfX2lycV9pbm8oYnApOworCQkJaW50IGVycjsKKworCQkJZXJyID0gc3VuNHZfaW50cl9zZXRzdGF0ZShpbm8sIEhWX0lOVFJfU1RBVEVfSURMRSk7CisJCQlpZiAoZXJyICE9IEhWX0VPSykKKwkJCQlwcmludGsoInN1bjR2X2ludHJfc2V0c3RhdGUoJXgpOiAiCisJCQkJICAgICAgICJlcnIoJWQpXG4iLCBpbm8sIGVycik7CisJCX0gZWxzZSB7CisJCQl1cGFfd3JpdGVsKElDTFJfSURMRSwgYnAtPmljbHIpOworCQl9CisKIAkJLyogVGVzdCBhbmQgYWRkIGVudHJvcHkgKi8KIAkJaWYgKHJhbmRvbSAmIFNBX1NBTVBMRV9SQU5ET00pCiAJCQlhZGRfaW50ZXJydXB0X3JhbmRvbW5lc3MoaXJxKTsKQEAgLTY0Niw3ICs3MjcsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfRkQKLWV4dGVybiBpcnFyZXR1cm5fdCBmbG9wcHlfaW50ZXJydXB0KGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTs7CitleHRlcm4gaXJxcmV0dXJuX3QgZmxvcHB5X2ludGVycnVwdChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiAKIC8qIFhYWCBObyBlYXN5IHdheSB0byBpbmNsdWRlIGFzbS9mbG9wcHkuaCBYWFggKi8KIGV4dGVybiB1bnNpZ25lZCBjaGFyICpwZG1hX3ZhZGRyOwpAQCAtNjk0LDcgKzc3NSw3IEBACiAJCXZhbCA9IHJlYWRiKGF1eGlvX3JlZ2lzdGVyKTsKIAkJdmFsIHw9IEFVWElPX0FVWDFfRlRDTlQ7CiAJCXdyaXRlYih2YWwsIGF1eGlvX3JlZ2lzdGVyKTsKLQkJdmFsICY9IEFVWElPX0FVWDFfRlRDTlQ7CisJCXZhbCAmPSB+QVVYSU9fQVVYMV9GVENOVDsKIAkJd3JpdGViKHZhbCwgYXV4aW9fcmVnaXN0ZXIpOwogCiAJCWRvaW5nX3BkbWEgPSAwOwpAQCAtNzI3LDI1ICs4MDgsMjMgQEAKIHN0YXRpYyBpbnQgcmV0YXJnZXRfb25lX2lycShzdHJ1Y3QgaXJxYWN0aW9uICpwLCBpbnQgZ29hbF9jcHUpCiB7CiAJc3RydWN0IGlub19idWNrZXQgKmJ1Y2tldCA9IGdldF9pbm9faW5faXJxYWN0aW9uKHApICsgaXZlY3Rvcl90YWJsZTsKLQl1bnNpZ25lZCBsb25nIGltYXAgPSBidWNrZXQtPmltYXA7Ci0JdW5zaWduZWQgaW50IHRpZDsKIAogCXdoaWxlICghY3B1X29ubGluZShnb2FsX2NwdSkpIHsKIAkJaWYgKCsrZ29hbF9jcHUgPj0gTlJfQ1BVUykKIAkJCWdvYWxfY3B1ID0gMDsKIAl9CiAKLQlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKLQkJdGlkID0gZ29hbF9jcHUgPDwgMjY7Ci0JCXRpZCAmPSBJTUFQX0FJRF9TQUZBUkk7Ci0JfSBlbHNlIGlmICh0aGlzX2lzX3N0YXJmaXJlID09IDApIHsKLQkJdGlkID0gZ29hbF9jcHUgPDwgMjY7Ci0JCXRpZCAmPSBJTUFQX1RJRF9VUEE7CisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJdW5zaWduZWQgaW50IGlubyA9IF9faXJxX2lubyhidWNrZXQpOworCisJCXN1bjR2X2ludHJfc2V0dGFyZ2V0KGlubywgZ29hbF9jcHUpOworCQlzdW40dl9pbnRyX3NldGVuYWJsZWQoaW5vLCBIVl9JTlRSX0VOQUJMRUQpOwogCX0gZWxzZSB7Ci0JCXRpZCA9IChzdGFyZmlyZV90cmFuc2xhdGUoaW1hcCwgZ29hbF9jcHUpIDw8IDI2KTsKLQkJdGlkICY9IElNQVBfVElEX1VQQTsKKwkJdW5zaWduZWQgbG9uZyBpbWFwID0gYnVja2V0LT5pbWFwOworCQl1bnNpZ25lZCBpbnQgdGlkID0gc3VuNHVfY29tcHV0ZV90aWQoaW1hcCwgZ29hbF9jcHUpOworCisJCXVwYV93cml0ZWwodGlkIHwgSU1BUF9WQUxJRCwgaW1hcCk7CiAJfQotCXVwYV93cml0ZWwodGlkIHwgSU1BUF9WQUxJRCwgaW1hcCk7CiAKIAlkbyB7CiAJCWlmICgrK2dvYWxfY3B1ID49IE5SX0NQVVMpCkBAIC04NDgsMzMgKzkyNywxMTQgQEAKIAogdm9pZCBpbml0X2lycXdvcmtfY3VyY3B1KHZvaWQpCiB7Ci0JcmVnaXN0ZXIgc3RydWN0IGlycV93b3JrX3N0cnVjdCAqd29ya3AgYXNtKCJvMiIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdG1wIGFzbSgibzMiKTsKIAlpbnQgY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQltZW1zZXQoX19pcnFfd29yayArIGNwdSwgMCwgc2l6ZW9mKCp3b3JrcCkpOworCW1lbXNldChfX2lycV93b3JrICsgY3B1LCAwLCBzaXplb2Yoc3RydWN0IGlycV93b3JrX3N0cnVjdCkpOworfQogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBjYWxsZWQgd2l0aCBQU1RBVEVfSUUgZGlzYWJsZWQuICAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHByCSUlcHN0YXRlLCAlMFxuXHQiCi0JCQkgICAgIDogIj1yIiAodG1wKSk7Ci0JaWYgKHRtcCAmIFBTVEFURV9JRSkgewotCQlwcm9tX3ByaW50ZigiQlVHOiBpbml0X2lycXdvcmtfY3VyY3B1KCkgY2FsbGVkIHdpdGggIgotCQkJICAgICJQU1RBVEVfSUUgZW5hYmxlZCwgYmFpbGluZy5cbiIpOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92CSUlaTcsICUwXG5cdCIKLQkJCQkgICAgIDogIj1yIiAodG1wKSk7Ci0JCXByb21fcHJpbnRmKCJCVUc6IENhbGxlZCBmcm9tICVseFxuIiwgdG1wKTsKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByZWdpc3Rlcl9vbmVfbW9uZG8odW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgbnVtX2VudHJpZXMgPSAxMjg7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisKKwlzdGF0dXMgPSBzdW40dl9jcHVfcWNvbmYodHlwZSwgcGFkZHIsIG51bV9lbnRyaWVzKTsKKwlpZiAoc3RhdHVzICE9IEhWX0VPSykgeworCQlwcm9tX3ByaW50ZigiU1VONFY6IHN1bjR2X2NwdV9xY29uZiglbHU6JWx4OiVsdSkgZmFpbGVkLCAiCisJCQkgICAgImVyciAlbHVcbiIsIHR5cGUsIHBhZGRyLCBudW1fZW50cmllcywgc3RhdHVzKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgc3VuNHZfcmVnaXN0ZXJfbW9uZG9fcXVldWVzKGludCB0aGlzX2NwdSkKK3sKKwlzdHJ1Y3QgdHJhcF9wZXJfY3B1ICp0YiA9ICZ0cmFwX2Jsb2NrW3RoaXNfY3B1XTsKKworCXJlZ2lzdGVyX29uZV9tb25kbyh0Yi0+Y3B1X21vbmRvX3BhLCBIVl9DUFVfUVVFVUVfQ1BVX01PTkRPKTsKKwlyZWdpc3Rlcl9vbmVfbW9uZG8odGItPmRldl9tb25kb19wYSwgSFZfQ1BVX1FVRVVFX0RFVklDRV9NT05ETyk7CisJcmVnaXN0ZXJfb25lX21vbmRvKHRiLT5yZXN1bV9tb25kb19wYSwgSFZfQ1BVX1FVRVVFX1JFU19FUlJPUik7CisJcmVnaXN0ZXJfb25lX21vbmRvKHRiLT5ub25yZXN1bV9tb25kb19wYSwgSFZfQ1BVX1FVRVVFX05PTlJFU19FUlJPUik7Cit9CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBhbGxvY19vbmVfbW9uZG8odW5zaWduZWQgbG9uZyAqcGFfcHRyLCBpbnQgdXNlX2Jvb3RtZW0pCit7CisJdm9pZCAqcGFnZTsKKworCWlmICh1c2VfYm9vdG1lbSkKKwkJcGFnZSA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJZWxzZQorCQlwYWdlID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOworCisJaWYgKCFwYWdlKSB7CisJCXByb21fcHJpbnRmKCJTVU40VjogRXJyb3IsIGNhbm5vdCBhbGxvY2F0ZSBtb25kbyBxdWV1ZS5cbiIpOwogCQlwcm9tX2hhbHQoKTsKIAl9CiAKLQkvKiBTZXQgaW50ZXJydXB0IGdsb2JhbHMuICAqLwotCXdvcmtwID0gJl9faXJxX3dvcmtbY3B1XTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkicmRwcgklJXBzdGF0ZSwgJTBcblx0IgotCSJ3cnByCSUwLCAlMSwgJSVwc3RhdGVcblx0IgotCSJtb3YJJTIsICUlZzZcblx0IgotCSJ3cnByCSUwLCAweDAsICUlcHN0YXRlXG5cdCIKLQk6ICI9JnIiICh0bXApCi0JOiAiaSIgKFBTVEFURV9JRyksICJyIiAod29ya3ApKTsKKwkqcGFfcHRyID0gX19wYShwYWdlKTsKK30KKworc3RhdGljIHZvaWQgX19jcHVpbml0IGFsbG9jX29uZV9rYnVmKHVuc2lnbmVkIGxvbmcgKnBhX3B0ciwgaW50IHVzZV9ib290bWVtKQoreworCXZvaWQgKnBhZ2U7CisKKwlpZiAodXNlX2Jvb3RtZW0pCisJCXBhZ2UgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOworCWVsc2UKKwkJcGFnZSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKworCWlmICghcGFnZSkgeworCQlwcm9tX3ByaW50ZigiU1VONFY6IEVycm9yLCBjYW5ub3QgYWxsb2NhdGUga2J1ZiBwYWdlLlxuIik7CisJCXByb21faGFsdCgpOworCX0KKworCSpwYV9wdHIgPSBfX3BhKHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9jcHVfc2VuZF9tb25kb19pbmZvKHN0cnVjdCB0cmFwX3Blcl9jcHUgKnRiLCBpbnQgdXNlX2Jvb3RtZW0pCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXZvaWQgKnBhZ2U7CisKKwlCVUlMRF9CVUdfT04oKE5SX0NQVVMgKiBzaXplb2YodTE2KSkgPiAoUEFHRV9TSVpFIC0gNjQpKTsKKworCWlmICh1c2VfYm9vdG1lbSkKKwkJcGFnZSA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJZWxzZQorCQlwYWdlID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOworCisJaWYgKCFwYWdlKSB7CisJCXByb21fcHJpbnRmKCJTVU40VjogRXJyb3IsIGNhbm5vdCBhbGxvY2F0ZSBjcHUgbW9uZG8gcGFnZS5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwl0Yi0+Y3B1X21vbmRvX2Jsb2NrX3BhID0gX19wYShwYWdlKTsKKwl0Yi0+Y3B1X2xpc3RfcGEgPSBfX3BhKHBhZ2UgKyA2NCk7CisjZW5kaWYKK30KKworLyogQWxsb2NhdGUgYW5kIHJlZ2lzdGVyIHRoZSBtb25kbyBhbmQgZXJyb3IgcXVldWVzIGZvciB0aGlzIGNwdS4gICovCit2b2lkIF9fY3B1aW5pdCBzdW40dl9pbml0X21vbmRvX3F1ZXVlcyhpbnQgdXNlX2Jvb3RtZW0sIGludCBjcHUsIGludCBhbGxvYywgaW50IGxvYWQpCit7CisJc3RydWN0IHRyYXBfcGVyX2NwdSAqdGIgPSAmdHJhcF9ibG9ja1tjcHVdOworCisJaWYgKGFsbG9jKSB7CisJCWFsbG9jX29uZV9tb25kbygmdGItPmNwdV9tb25kb19wYSwgdXNlX2Jvb3RtZW0pOworCQlhbGxvY19vbmVfbW9uZG8oJnRiLT5kZXZfbW9uZG9fcGEsIHVzZV9ib290bWVtKTsKKwkJYWxsb2Nfb25lX21vbmRvKCZ0Yi0+cmVzdW1fbW9uZG9fcGEsIHVzZV9ib290bWVtKTsKKwkJYWxsb2Nfb25lX2tidWYoJnRiLT5yZXN1bV9rZXJuZWxfYnVmX3BhLCB1c2VfYm9vdG1lbSk7CisJCWFsbG9jX29uZV9tb25kbygmdGItPm5vbnJlc3VtX21vbmRvX3BhLCB1c2VfYm9vdG1lbSk7CisJCWFsbG9jX29uZV9rYnVmKCZ0Yi0+bm9ucmVzdW1fa2VybmVsX2J1Zl9wYSwgdXNlX2Jvb3RtZW0pOworCisJCWluaXRfY3B1X3NlbmRfbW9uZG9faW5mbyh0YiwgdXNlX2Jvb3RtZW0pOworCX0KKworCWlmIChsb2FkKSB7CisJCWlmIChjcHUgIT0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkpIHsKKwkJCXByb21fcHJpbnRmKCJTVU40VjogaW5pdCBtb25kbyBvbiBjcHUgJWQgbm90ICVkXG4iLAorCQkJCSAgICBjcHUsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJCXByb21faGFsdCgpOworCQl9CisJCXN1bjR2X3JlZ2lzdGVyX21vbmRvX3F1ZXVlcyhjcHUpOworCX0KIH0KIAogLyogT25seSBpbnZva2VkIG9uIGJvb3QgcHJvY2Vzc29yLiAqLwpAQCAtODg0LDYgKzEwNDQsOSBAQAogCWtpbGxfcHJvbV90aW1lcigpOwogCW1lbXNldCgmaXZlY3Rvcl90YWJsZVswXSwgMCwgc2l6ZW9mKGl2ZWN0b3JfdGFibGUpKTsKIAorCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQlzdW40dl9pbml0X21vbmRvX3F1ZXVlcygxLCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSwgMSwgMSk7CisKIAkvKiBXZSBuZWVkIHRvIGNsZWFyIGFueSBJUlEncyBwZW5kaW5nIGluIHRoZSBzb2Z0IGludGVycnVwdAogCSAqIHJlZ2lzdGVycywgYSBzcHVyaW91cyBvbmUgY291bGQgYmUgbGVmdCBhcm91bmQgZnJvbSB0aGUKIAkgKiBQUk9NIHRpbWVyIHdoaWNoIHdlIGp1c3QgZGlzYWJsZWQuCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2l0bGJfYmFzZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pdGxiX2Jhc2UuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk1MWZmOC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2l0bGJfYmFzZS5TCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyogJElkOiBpdGxiX2Jhc2UuUyx2IDEuMTIgMjAwMi8wMi8wOSAxOTo0OTozMCBkYXZlbSBFeHAgJAotICogaXRsYl9iYXNlLlM6CUZyb250IGVuZCB0byBJVExCIG1pc3MgcmVwbGFjZW1lbnQgc3RyYXRlZ3kuCi0gKiAgICAgICAgICAgICAgVGhpcyBpcyBpbmNsdWRlZCBkaXJlY3RseSBpbnRvIHRoZSB0cmFwIHRhYmxlLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk4IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMTk5NywxOTk4IEpha3ViIEplbGluZWsgICAoampAdWx0cmEubGludXguY3opCi0gKi8KLQotI2lmIFBBR0VfU0hJRlQgPT0gMTMKLS8qCi0gKiBUbyBjb21wdXRlIHZwdGUgb2Zmc2V0LCB3ZSBuZWVkIHRvIGRvICgoYWRkciA+PiAxMykgPDwgMyksCi0gKiB3aGljaCBjYW4gYmUgb3B0aW1pemVkIHRvIChhZGRyID4+IDEwKSBpZiBiaXRzIDEwLzExLzEyIGNhbgotICogYmUgZ3VhcmFudGVlZCB0byBiZSAwIC4uLiBtbXVfY29udGV4dC5oIGRvZXMgZ3VhcmFudGVlIHRoaXMKLSAqIGJ5IG9ubHkgdXNpbmcgMTAgYml0cyBpbiB0aGUgaHdjb250ZXh0IHZhbHVlLgotICovCi0jZGVmaW5lIENSRUFURV9WUFRFX09GRlNFVDEocjEsIHIyKSBcCi0JCQkJc3JheAlyMSwgMTAsIHIyCi0jZGVmaW5lIENSRUFURV9WUFRFX09GRlNFVDIocjEsIHIyKSBub3AKLSNlbHNlIC8qIFBBR0VfU0hJRlQgKi8KLSNkZWZpbmUgQ1JFQVRFX1ZQVEVfT0ZGU0VUMShyMSwgcjIpIFwKLQkJCQlzcmF4CXIxLCBQQUdFX1NISUZULCByMgotI2RlZmluZSBDUkVBVEVfVlBURV9PRkZTRVQyKHIxLCByMikgXAotCQkJCXNsbHgJcjIsIDMsIHIyCi0jZW5kaWYgLyogUEFHRV9TSElGVCAqLwotCi0KLS8qIFdheXMgd2UgY2FuIGdldCBoZXJlOgotICoKLSAqIDEpIE51Y2xldXMgaW5zdHJ1Y3Rpb24gbWlzc2VzIGZyb20gbW9kdWxlIGNvZGUuCi0gKiAyKSBBbGwgdXNlciBpbnN0cnVjdGlvbiBtaXNzZXMuCi0gKgotICogQWxsIHJlYWwgcGFnZSBmYXVsdHMgbWVyZ2UgdGhlaXIgY29kZSBwYXRocyB0byB0aGUKLSAqIHNwYXJjNjRfcmVhbGZhdWx0X2NvbW1vbiBsYWJlbCBiZWxvdy4KLSAqLwotCi0vKiBJVExCICoqIElDQUNIRSBsaW5lIDE6IFF1aWNrIHVzZXIgVExCIG1pc3NlcwkJKi8KLQltb3YJCVRMQl9TRlNSLCAlZzEKLQlsZHhhCQlbJWcxICsgJWcxXSBBU0lfSU1NVSwgJWc0CSEgR2V0IFRBR19BQ0NFU1MKLQlDUkVBVEVfVlBURV9PRkZTRVQxKCVnNCwgJWc2KQkJCSEgQ3JlYXRlIFZQVEUgb2Zmc2V0Ci0JQ1JFQVRFX1ZQVEVfT0ZGU0VUMiglZzQsICVnNikJCQkhIENyZWF0ZSBWUFRFIG9mZnNldAotCWxkeGEJCVslZzMgKyAlZzZdIEFTSV9QLCAlZzUJCSEgTG9hZCBWUFRFCi0xOglicmdleixwbgklZzUsIDNmCQkJCSEgTm90IHZhbGlkLCBicmFuY2ggb3V0Ci0JIHNldGhpCQklaGkoX1BBR0VfRVhFQyksICVnNAkJISBEZWxheS1zbG90Ci0JYW5kY2MJCSVnNSwgJWc0LCAlZzAJCQkhIEV4ZWN1dGFibGU/Ci0KLS8qIElUTEIgKiogSUNBQ0hFIGxpbmUgMjogUmVhbCBmYXVsdHMJCQkqLwotCWJlLHBuCQkleGNjLCAzZgkJCSEgTm9wZSwgYnJhbmNoLgotCSBub3AJCQkJCQkhIERlbGF5LXNsb3QKLTI6CXN0eGEJCSVnNSwgWyVnMF0gQVNJX0lUTEJfREFUQV9JTgkhIExvYWQgUFRFIGludG8gVExCCi0JcmV0cnkJCQkJCQkhIFRyYXAgcmV0dXJuCi0zOglyZHByCQklcHN0YXRlLCAlZzQJCQkhIE1vdmUgaW50byBhbHQtZ2xvYmFscwotCXdycHIJCSVnNCwgUFNUQVRFX0FHfFBTVEFURV9NRywgJXBzdGF0ZQotCXJkcHIJCSV0cGMsICVnNQkJCSEgQW5kIGxvYWQgZmF1bHRpbmcgVkEKLQltb3YJCUZBVUxUX0NPREVfSVRMQiwgJWc0CQkhIEl0IHdhcyByZWFkIGZyb20gSVRMQgotCi0vKiBJVExCICoqIElDQUNIRSBsaW5lIDM6IEZpbmlzaCBmYXVsdHMJKi8KLXNwYXJjNjRfcmVhbGZhdWx0X2NvbW1vbjoJCQkJISBDYWxsZWQgYnkgZHRsYl9taXNzCi0Jc3RiCQklZzQsIFslZzYgKyBUSV9GQVVMVF9DT0RFXQotCXN0eAkJJWc1LCBbJWc2ICsgVElfRkFVTFRfQUREUl0KLQliYSxwdAkJJXhjYywgZXRyYXAJCQkhIFNhdmUgc3RhdGUKLTE6CSByZAkJJXBjLCAlZzcJCQkhIC4uLgotCWNhbGwJCWRvX3NwYXJjNjRfZmF1bHQJCSEgQ2FsbCBmYXVsdCBoYW5kbGVyCi0JIGFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAhIENvbXB1dGUgcHRfcmVncyBhcmcKLQliYSxwdAkJJXhjYywgcnRyYXBfY2xyX2w2CQkhIFJlc3RvcmUgY3B1IHN0YXRlCi0JIG5vcAotCi0vKiBJVExCICoqIElDQUNIRSBsaW5lIDQ6IFdpbmRvdyBmaXh1cHMgKi8KLXdpbmZpeF90cmFtcG9saW5lOgotCXJkcHIJCSV0cGMsICVnMwkJCSEgUHJlcGFyZSB3aW5maXh1cCBUTlBDCi0Jb3IJCSVnMywgMHg3YywgJWczCQkJISBDb21wdXRlIGJyYW5jaCBvZmZzZXQKLQl3cnByCQklZzMsICV0bnBjCQkJISBXcml0ZSBpdCBpbnRvIFROUEMKLQlkb25lCQkJCQkJISBEbyBpdCB0byBpdAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCi0jdW5kZWYgQ1JFQVRFX1ZQVEVfT0ZGU0VUMQotI3VuZGVmIENSRUFURV9WUFRFX09GRlNFVDIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXRsYl9taXNzLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL2l0bGJfbWlzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDZlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL2l0bGJfbWlzcy5TCkBAIC0wLDAgKzEsMzkgQEAKKy8qIElUTEIgKiogSUNBQ0hFIGxpbmUgMTogQ29udGV4dCAwIGNoZWNrIGFuZCBUU0IgbG9hZAkqLworCWxkeGEJWyVnMF0gQVNJX0lNTVVfVFNCXzhLQl9QVFIsICVnMQkhIEdldCBUU0IgOEsgcG9pbnRlcgorCWxkeGEJWyVnMF0gQVNJX0lNTVUsICVnNgkJISBHZXQgVEFHIFRBUkdFVAorCXNybHgJJWc2LCA0OCwgJWc1CQkJISBHZXQgY29udGV4dAorCXNsbHgJJWc2LCAyMiwgJWc2CQkJISBaZXJvIG91dCBjb250ZXh0CisJYnJ6LHBuCSVnNSwga3ZtYXBfaXRsYgkJCSEgQ29udGV4dCAwIHByb2Nlc3NpbmcKKwkgc3JseAklZzYsIDIyLCAlZzYJCQkhIERlbGF5IHNsb3QKKwlUU0JfTE9BRF9RVUFEKCVnMSwgJWc0KQkJCSEgTG9hZCBUU0IgZW50cnkKKwljbXAJJWc0LCAlZzYJCQkhIENvbXBhcmUgVEFHCisKKy8qIElUTEIgKiogSUNBQ0hFIGxpbmUgMjogVFNCIGNvbXBhcmUgYW5kIFRMQiBsb2FkCSovCisJYm5lLHBuCSV4Y2MsIHRzYl9taXNzX2l0bGIJCSEgTWlzcworCSBtb3YJRkFVTFRfQ09ERV9JVExCLCAlZzMKKwlhbmRjYwklZzUsIF9QQUdFX0VYRUNfNFUsICVnMAkJISBFeGVjdXRhYmxlPworCWJlLHBuCSV4Y2MsIHRzYl9kb19mYXVsdAorCSBub3AJCQkJCSEgRGVsYXkgc2xvdCwgZmlsbCBtZQorCXN0eGEJJWc1LCBbJWcwXSBBU0lfSVRMQl9EQVRBX0lOCSEgTG9hZCBUTEIKKwlyZXRyeQkJCQkJISBUcmFwIGRvbmUKKwlub3AKKworLyogSVRMQiAqKiBJQ0FDSEUgbGluZSAzOiAJCQkJKi8KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKworLyogSVRMQiAqKiBJQ0FDSEUgbGluZSA0OiAJCQkJKi8KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwva3RsYi5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9rdGxiLlMKaW5kZXggZDkyNDRkMy4uMzFkYTFlNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9rdGxiLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9rdGxiLlMKQEAgLTQsMTkxICs0LDI3NiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2IEVkZGllIEMuIERvc3QgICAgICAgIChlY2RAYnJhaW5haWQuZGUpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYgTWlndWVsIGRlIEljYXphICAgICAgKG1pZ3VlbEBudWNsZWN1LnVuYW0ubXgpCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYsOTgsOTkgSmFrdWIgSmVsaW5layAgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0qLworICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RzYi5oPgogCiAJLnRleHQKIAkuYWxpZ24JCTMyCiAKLS8qCi0gKiBPbiBhIHNlY29uZCBsZXZlbCB2cHRlIG1pc3MsIGNoZWNrIHdoZXRoZXIgdGhlIG9yaWdpbmFsIGZhdWx0IGlzIHRvIHRoZSBPQlAgCi0gKiByYW5nZSAobm90ZSB0aGF0IHRoaXMgaXMgb25seSBwb3NzaWJsZSBmb3IgaW5zdHJ1Y3Rpb24gbWlzcywgZGF0YSBtaXNzZXMgdG8KLSAqIG9icCByYW5nZSBkbyBub3QgdXNlIHZwdGUpLiBJZiBzbywgZ28gYmFjayBkaXJlY3RseSB0byB0aGUgZmF1bHRpbmcgYWRkcmVzcy4KLSAqIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIHJlYWQgdGhlIHRwYywgb3RoZXJ3aXNlIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcKLSAqIHRoZSA4ayBhbGlnbmVkIGZhdWx0aW5nIGFkZHJlc3MgaWYgd2UgYXJlIHVzaW5nID44ayBrZXJuZWwgcGFnZXNpemUuIFRoaXMKLSAqIGFsc28gZW5zdXJlcyBubyB2cHRlIHJhbmdlIGFkZHJlc3NlcyBhcmUgZHJvcHBlZCBpbnRvIHRsYiB3aGlsZSBvYnAgaXMKLSAqIGV4ZWN1dGluZyAoc2VlIGluaGVyaXRfbG9ja2VkX3Byb21fbWFwcGluZ3MoKSByYW50KS4KLSAqLwotc3BhcmM2NF92cHRlX251Y2xldXM6Ci0JLyogTm90ZSB0aGF0IGt2bWFwIGJlbG93IGhhcyB2ZXJpZmllZCB0aGF0IHRoZSBhZGRyZXNzIGlzCi0JICogaW4gdGhlIHJhbmdlIE1PRFVMRVNfVkFERFIgLS0+IFZNQUxMT0NfRU5EIGFscmVhZHkuICBTbwotCSAqIGhlcmUgd2UgbmVlZCBvbmx5IGNoZWNrIGlmIGl0IGlzIGFuIE9CUCBhZGRyZXNzIG9yIG5vdC4KK2t2bWFwX2l0bGI6CisJLyogZzY6IFRBRyBUQVJHRVQgKi8KKwltb3YJCVRMQl9UQUdfQUNDRVNTLCAlZzQKKwlsZHhhCQlbJWc0XSBBU0lfSU1NVSwgJWc0CisKKwkvKiBzdW40dl9pdGxiX21pc3MgYnJhbmNoZXMgaGVyZSB3aXRoIHRoZSBtaXNzaW5nIHZpcnR1YWwKKwkgKiBhZGRyZXNzIGFscmVhZHkgbG9hZGVkIGludG8gJWc0CiAJICovCitrdm1hcF9pdGxiXzR2OgorCitrdm1hcF9pdGxiX25vbmxpbmVhcjoKKwkvKiBDYXRjaCBrZXJuZWwgTlVMTCBwb2ludGVyIGNhbGxzLiAgKi8KKwlzZXRoaQkJJWhpKFBBR0VfU0laRSksICVnNQorCWNtcAkJJWc0LCAlZzUKKwlibGV1LHBuCQkleGNjLCBrdm1hcF9kdGxiX2xvbmdwYXRoCisJIG5vcAorCisJS0VSTl9UU0JfTE9PS1VQX1RMMSglZzQsICVnNiwgJWc1LCAlZzEsICVnMiwgJWczLCBrdm1hcF9pdGxiX2xvYWQpCisKK2t2bWFwX2l0bGJfdHNiX21pc3M6CiAJc2V0aGkJCSVoaShMT1dfT0JQX0FERFJFU1MpLCAlZzUKIAljbXAJCSVnNCwgJWc1Ci0JYmx1LHBuCQkleGNjLCBrZXJuX3ZwdGUKKwlibHUscG4JCSV4Y2MsIGt2bWFwX2l0bGJfdm1hbGxvY19hZGRyCiAJIG1vdgkJMHgxLCAlZzUKIAlzbGx4CQklZzUsIDMyLCAlZzUKIAljbXAJCSVnNCwgJWc1Ci0JYmx1LHBuCQkleGNjLCB2cHRlX2luc25fb2JwCisJYmx1LHBuCQkleGNjLCBrdm1hcF9pdGxiX29icAogCSBub3AKIAotCS8qIFRoZXNlIHR3byBpbnN0cnVjdGlvbnMgYXJlIHBhdGNoZWQgYnkgcGFnaW5pZ19pbml0KCkuICAqLwota2Vybl92cHRlOgotCXNldGhpCQklaGkoc3dhcHBlcl9wZ2RfemVybyksICVnNQotCWxkdXcJCVslZzUgKyAlbG8oc3dhcHBlcl9wZ2RfemVybyldLCAlZzUKK2t2bWFwX2l0bGJfdm1hbGxvY19hZGRyOgorCUtFUk5fUEdUQUJMRV9XQUxLKCVnNCwgJWc1LCAlZzIsIGt2bWFwX2l0bGJfbG9uZ3BhdGgpCiAKLQkvKiBXaXRoIGtlcm5lbCBQR0QgaW4gJWc1LCBicmFuY2ggYmFjayBpbnRvIGR0bGJfYmFja2VuZC4gICovCi0JYmEscHQJCSV4Y2MsIHNwYXJjNjRfa3B0ZV9jb250aW51ZQotCSBhbmRuCQklZzEsIDB4MywgJWcxCS8qIEZpbmlzaCBQTUQgb2Zmc2V0IGFkanVzdG1lbnQuICAqLworCUtUU0JfTE9DS19UQUcoJWcxLCAlZzIsICVnNykKIAotdnB0ZV9ub2VudDoKLQkvKiBSZXN0b3JlIHByZXZpb3VzIFRBR19BQ0NFU1MsICVnNSBpcyB6ZXJvLCBhbmQgd2Ugd2lsbAotCSAqIHNraXAgb3ZlciB0aGUgdHJhcCBpbnN0cnVjdGlvbiBzbyB0aGF0IHRoZSB0b3AgbGV2ZWwKLQkgKiBUTEIgbWlzcyBoYW5kbGVyIHdpbGwgdGhpbmcgdGhpcyAlZzUgdmFsdWUgaXMganVzdCBhbgotCSAqIGludmFsaWQgUFRFLCB0aHVzIGJyYW5jaGluZyB0byBmdWxsIGZhdWx0IHByb2Nlc3NpbmcuCisJLyogTG9hZCBhbmQgY2hlY2sgUFRFLiAgKi8KKwlsZHhhCQlbJWc1XSBBU0lfUEhZU19VU0VfRUMsICVnNQorCW1vdgkJMSwgJWc3CisJc2xseAkJJWc3LCBUU0JfVEFHX0lOVkFMSURfQklULCAlZzcKKwlicmdleixhLHBuCSVnNSwga3ZtYXBfaXRsYl9sb25ncGF0aAorCSBLVFNCX1NUT1JFKCVnMSwgJWc3KQorCisJS1RTQl9XUklURSglZzEsICVnNSwgJWc2KQorCisJLyogZmFsbHRocm91Z2ggdG8gVExCIGxvYWQgKi8KKwora3ZtYXBfaXRsYl9sb2FkOgorCis2NjE6CXN0eGEJCSVnNSwgWyVnMF0gQVNJX0lUTEJfREFUQV9JTgorCXJldHJ5CisJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCAiYXgiCisJLndvcmQJCTY2MWIKKwlub3AKKwlub3AKKwkucHJldmlvdXMKKworCS8qIEZvciBzdW40diB0aGUgQVNJX0lUTEJfREFUQV9JTiBzdG9yZSBhbmQgdGhlIHJldHJ5CisJICogaW5zdHJ1Y3Rpb24gZ2V0IG5vcCdkIG91dCBhbmQgd2UgZ2V0IGhlcmUgdG8gYnJhbmNoCisJICogdG8gdGhlIHN1bjR2IHRsYiBsb2FkIGNvZGUuICBUaGUgcmVnaXN0ZXJzIGFyZSBzZXR1cAorCSAqIGFzIGZvbGxvd3M6CisJICoKKwkgKiAlZzQ6IHZhZGRyCisJICogJWc1OiBQVEUKKwkgKiAlZzY6CVRBRworCSAqCisJICogVGhlIHN1bjR2IFRMQiBsb2FkIHdhbnRzIHRoZSBQVEUgaW4gJWczIHNvIHdlIGZpeCB0aGF0CisJICogdXAgaGVyZS4KIAkgKi8KLQltb3YJCVRMQl9TRlNSLCAlZzEKLQlzdHhhCQklZzQsIFslZzEgKyAlZzFdIEFTSV9ETU1VCi0JZG9uZQorCWJhLHB0CQkleGNjLCBzdW40dl9pdGxiX2xvYWQKKwkgbW92CQklZzUsICVnMwogCi12cHRlX2luc25fb2JwOgotCS8qIEJlaGF2ZSBhcyBpZiB3ZSBhcmUgYXQgVEwwLiAgKi8KLQl3cnByCQklZzAsIDEsICV0bAotCXJkcHIJCSV0cGMsICVnNAkvKiBGaW5kIG9yaWdpbmFsIGZhdWx0aW5nIGlhZGRyICovCi0Jc3JseAkJJWc0LCAxMywgJWc0CS8qIFRocm93IG91dCBjb250ZXh0IGJpdHMgKi8KLQlzbGx4CQklZzQsIDEzLCAlZzQJLyogZzQgaGFzIHZwbiArIGN0eDAgbm93ICovCitrdm1hcF9pdGxiX2xvbmdwYXRoOgogCi0JLyogUmVzdG9yZSBwcmV2aW91cyBUQUdfQUNDRVNTLiAgKi8KLQltb3YJCVRMQl9TRlNSLCAlZzEKLQlzdHhhCQklZzQsIFslZzEgKyAlZzFdIEFTSV9JTU1VCis2NjE6CXJkcHIJJXBzdGF0ZSwgJWc1CisJd3JwcgklZzUsIFBTVEFURV9BRyB8IFBTVEFURV9NRywgJXBzdGF0ZQorCS5zZWN0aW9uIC5zdW40dl8yaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCTY2MWIKKwlTRVRfR0woMSkKKwlub3AKKwkucHJldmlvdXMKIAotCXNldGhpCQklaGkocHJvbV90cmFucyksICVnNQotCW9yCQklZzUsICVsbyhwcm9tX3RyYW5zKSwgJWc1CisJcmRwcgkldHBjLCAlZzUKKwliYSxwdAkleGNjLCBzcGFyYzY0X3JlYWxmYXVsdF9jb21tb24KKwkgbW92CUZBVUxUX0NPREVfSVRMQiwgJWc0CiAKLTE6CWxkeAkJWyVnNSArIDB4MDBdLCAlZzYJISBiYXNlCi0JYnJ6LGEscG4JJWc2LCBsb25ncGF0aAkJISBubyBtb3JlIGVudHJpZXMsIGZhaWwKLQkgbW92CQlUTEJfU0ZTUiwgJWcxCQkhIGFuZCByZXN0b3JlICVnMQotCWxkeAkJWyVnNSArIDB4MDhdLCAlZzEJISBsZW4KLQlhZGQJCSVnNiwgJWcxLCAlZzEJCSEgZW5kCi0JY21wCQklZzYsICVnNAotCWJndSxwdAkJJXhjYywgMmYKLQkgY21wCQklZzQsICVnMQotCWJnZXUscHQJCSV4Y2MsIDJmCi0JIGxkeAkJWyVnNSArIDB4MTBdLCAlZzEJISBQVEUKK2t2bWFwX2l0bGJfb2JwOgorCU9CUF9UUkFOU19MT09LVVAoJWc0LCAlZzUsICVnMiwgJWczLCBrdm1hcF9pdGxiX2xvbmdwYXRoKQogCi0JLyogVExCIGxvYWQsIHJlc3RvcmUgJWcxLCBhbmQgcmV0dXJuIGZyb20gdHJhcC4gICovCi0Jc3ViCQklZzQsICVnNiwgJWc2Ci0JYWRkCQklZzEsICVnNiwgJWc1Ci0JbW92CQlUTEJfU0ZTUiwgJWcxCi0Jc3R4YQkJJWc1LCBbJWcwXSBBU0lfSVRMQl9EQVRBX0lOCi0JcmV0cnkKKwlLVFNCX0xPQ0tfVEFHKCVnMSwgJWcyLCAlZzcpCiAKLTI6CWJhLHB0CQkleGNjLCAxYgotCSBhZGQJCSVnNSwgKDMgKiA4KSwgJWc1CSEgbmV4dCBlbnRyeQorCUtUU0JfV1JJVEUoJWcxLCAlZzUsICVnNikKIAota3ZtYXBfZG9fb2JwOgotCXNldGhpCQklaGkocHJvbV90cmFucyksICVnNQotCW9yCQklZzUsICVsbyhwcm9tX3RyYW5zKSwgJWc1Ci0Jc3JseAkJJWc0LCAxMywgJWc0Ci0Jc2xseAkJJWc0LCAxMywgJWc0Ci0KLTE6CWxkeAkJWyVnNSArIDB4MDBdLCAlZzYJISBiYXNlCi0JYnJ6LGEscG4JJWc2LCBsb25ncGF0aAkJISBubyBtb3JlIGVudHJpZXMsIGZhaWwKLQkgbW92CQlUTEJfU0ZTUiwgJWcxCQkhIGFuZCByZXN0b3JlICVnMQotCWxkeAkJWyVnNSArIDB4MDhdLCAlZzEJISBsZW4KLQlhZGQJCSVnNiwgJWcxLCAlZzEJCSEgZW5kCi0JY21wCQklZzYsICVnNAotCWJndSxwdAkJJXhjYywgMmYKLQkgY21wCQklZzQsICVnMQotCWJnZXUscHQJCSV4Y2MsIDJmCi0JIGxkeAkJWyVnNSArIDB4MTBdLCAlZzEJISBQVEUKLQotCS8qIFRMQiBsb2FkLCByZXN0b3JlICVnMSwgYW5kIHJldHVybiBmcm9tIHRyYXAuICAqLwotCXN1YgkJJWc0LCAlZzYsICVnNgotCWFkZAkJJWcxLCAlZzYsICVnNQotCW1vdgkJVExCX1NGU1IsICVnMQotCXN0eGEJCSVnNSwgWyVnMF0gQVNJX0RUTEJfREFUQV9JTgotCXJldHJ5Ci0KLTI6CWJhLHB0CQkleGNjLCAxYgotCSBhZGQJCSVnNSwgKDMgKiA4KSwgJWc1CSEgbmV4dCBlbnRyeQotCi0vKgotICogT24gYSBmaXJzdCBsZXZlbCBkYXRhIG1pc3MsIGNoZWNrIHdoZXRoZXIgdGhpcyBpcyB0byB0aGUgT0JQIHJhbmdlIChub3RlCi0gKiB0aGF0IHN1Y2ggYWNjZXNzZXMgY2FuIGJlIG1hZGUgYnkgcHJvbSwgYXMgd2VsbCBhcyBieSBrZXJuZWwgdXNpbmcKLSAqIHByb21fZ2V0cHJvcGVydHkgb24gImFkZHJlc3MiKSwgYW5kIGlmIHNvLCBkbyBub3QgdXNlIHZwdGUgYWNjZXNzIC4uLgotICogcmF0aGVyLCB1c2UgaW5mb3JtYXRpb24gc2F2ZWQgZHVyaW5nIGluaGVyaXRfcHJvbV9tYXBwaW5ncygpIHVzaW5nIDhrCi0gKiBwYWdlc2l6ZS4KLSAqLwotCS5hbGlnbgkJMzIKLWt2bWFwOgotCWJyZ2V6LHBuCSVnNCwga3ZtYXBfbm9ubGluZWFyCisJYmEscHQJCSV4Y2MsIGt2bWFwX2l0bGJfbG9hZAogCSBub3AKIAotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKK2t2bWFwX2R0bGJfb2JwOgorCU9CUF9UUkFOU19MT09LVVAoJWc0LCAlZzUsICVnMiwgJWczLCBrdm1hcF9kdGxiX2xvbmdwYXRoKQorCisJS1RTQl9MT0NLX1RBRyglZzEsICVnMiwgJWc3KQorCisJS1RTQl9XUklURSglZzEsICVnNSwgJWc2KQorCisJYmEscHQJCSV4Y2MsIGt2bWFwX2R0bGJfbG9hZAorCSBub3AKKworCS5hbGlnbgkJMzIKK2t2bWFwX2R0bGJfdHNiNG1fbG9hZDoKKwlLVFNCX0xPQ0tfVEFHKCVnMSwgJWcyLCAlZzcpCisJS1RTQl9XUklURSglZzEsICVnNSwgJWc2KQorCWJhLHB0CQkleGNjLCBrdm1hcF9kdGxiX2xvYWQKKwkgbm9wCisKK2t2bWFwX2R0bGI6CisJLyogJWc2OiBUQUcgVEFSR0VUICovCisJbW92CQlUTEJfVEFHX0FDQ0VTUywgJWc0CisJbGR4YQkJWyVnNF0gQVNJX0RNTVUsICVnNAorCisJLyogc3VuNHZfZHRsYl9taXNzIGJyYW5jaGVzIGhlcmUgd2l0aCB0aGUgbWlzc2luZyB2aXJ0dWFsCisJICogYWRkcmVzcyBhbHJlYWR5IGxvYWRlZCBpbnRvICVnNAorCSAqLwora3ZtYXBfZHRsYl80djoKKwlicmdleixwbgklZzQsIGt2bWFwX2R0bGJfbm9ubGluZWFyCisJIG5vcAorCisJLyogQ29ycmVjdCBUQUdfVEFSR0VUIGlzIGFscmVhZHkgaW4gJWc2LCBjaGVjayA0bWIgVFNCLiAgKi8KKwlLRVJOX1RTQjRNX0xPT0tVUF9UTDEoJWc2LCAlZzUsICVnMSwgJWcyLCAlZzMsIGt2bWFwX2R0bGJfbG9hZCkKKworCS8qIFRTQiBlbnRyeSBhZGRyZXNzIGxlZnQgaW4gJWcxLCBsb29rdXAgbGluZWFyIFBURS4KKwkgKiBNdXN0IHByZXNlcnZlICVnMSBhbmQgJWc2IChUQUcpLgorCSAqLwora3ZtYXBfZHRsYl90c2I0bV9taXNzOgorCXNldGhpCQklaGkoa3B0ZV9saW5lYXJfYml0bWFwKSwgJWcyCisJb3IJCSVnMiwgJWxvKGtwdGVfbGluZWFyX2JpdG1hcCksICVnMgorCisJLyogQ2xlYXIgdGhlIFBBR0VfT0ZGU0VUIHRvcCB2aXJ0dWFsIGJpdHMsIHRoZW4gc2hpZnQKKwkgKiBkb3duIHRvIGdldCBhIDI1Nk1CIHBoeXNpY2FsIGFkZHJlc3MgaW5kZXguCisJICovCisJc2xseAkJJWc0LCAyMSwgJWc1CisJbW92CQkxLCAlZzcKKwlzcmx4CQklZzUsIDIxICsgMjgsICVnNQorCisJLyogRG9uJ3QgdHJ5IHRoaXMgYXQgaG9tZSBraWRzLi4uIHRoaXMgZGVwZW5kcyB1cG9uIHNybHgKKwkgKiBvbmx5IHRha2luZyB0aGUgbG93IDYgYml0cyBvZiB0aGUgc2hpZnQgY291bnQgaW4gJWc1LgorCSAqLworCXNsbHgJCSVnNywgJWc1LCAlZzcKKworCS8qIERpdmlkZSBieSA2NCB0byBnZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBiaXRtYXNrLiAgKi8KKwlzcmx4CQklZzUsIDYsICVnNQorCXNsbHgJCSVnNSwgMywgJWc1CisKKwkvKiBrZXJuX2xpbmVhcl9wdGVfeG9yWygobWFzayAmIGJpdCkgPyAxIDogMCldICovCisJbGR4CQlbJWcyICsgJWc1XSwgJWcyCisJYW5kY2MJCSVnMiwgJWc3LCAlZzAKKwlzZXRoaQkJJWhpKGtlcm5fbGluZWFyX3B0ZV94b3IpLCAlZzUKKwlvcgkJJWc1LCAlbG8oa2Vybl9saW5lYXJfcHRlX3hvciksICVnNQorCWJuZSxhLHB0CSV4Y2MsIDFmCisJIGFkZAkJJWc1LCA4LCAlZzUKKworMToJbGR4CQlbJWc1XSwgJWcyCisKIAkuZ2xvYmwJCWt2bWFwX2xpbmVhcl9wYXRjaAoga3ZtYXBfbGluZWFyX3BhdGNoOgotI2VuZGlmCi0JYmEscHQJCSV4Y2MsIGt2bWFwX2xvYWQKKwliYSxwdAkJJXhjYywga3ZtYXBfZHRsYl90c2I0bV9sb2FkCiAJIHhvcgkJJWcyLCAlZzQsICVnNQogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCXNldGhpCQklaGkoc3dhcHBlcl9wZ19kaXIpLCAlZzUKLQlvcgkJJWc1LCAlbG8oc3dhcHBlcl9wZ19kaXIpLCAlZzUKLQlzbGx4CQklZzQsIDY0IC0gKFBHRElSX1NISUZUICsgUEdESVJfQklUUyksICVnNgotCXNybHgJCSVnNiwgNjQgLSBQQUdFX1NISUZULCAlZzYKLQlhbmRuCQklZzYsIDB4MywgJWc2Ci0JbGR1dwkJWyVnNSArICVnNl0sICVnNQotCWJyeixwbgkJJWc1LCBsb25ncGF0aAotCSBzbGx4CQklZzQsIDY0IC0gKFBNRF9TSElGVCArIFBNRF9CSVRTKSwgJWc2Ci0Jc3JseAkJJWc2LCA2NCAtIFBBR0VfU0hJRlQsICVnNgotCXNsbHgJCSVnNSwgMTEsICVnNQotCWFuZG4JCSVnNiwgMHgzLCAlZzYKLQlsZHV3YQkJWyVnNSArICVnNl0gQVNJX1BIWVNfVVNFX0VDLCAlZzUKLQlicnoscG4JCSVnNSwgbG9uZ3BhdGgKLQkgc2xseAkJJWc0LCA2NCAtIFBNRF9TSElGVCwgJWc2Ci0Jc3JseAkJJWc2LCA2NCAtIFBBR0VfU0hJRlQsICVnNgotCXNsbHgJCSVnNSwgMTEsICVnNQotCWFuZG4JCSVnNiwgMHg3LCAlZzYKLQlsZHhhCQlbJWc1ICsgJWc2XSBBU0lfUEhZU19VU0VfRUMsICVnNQotCWJyeixwbgkJJWc1LCBsb25ncGF0aAotCSBub3AKLQliYSxhLHB0CQkleGNjLCBrdm1hcF9sb2FkCi0jZW5kaWYKK2t2bWFwX2R0bGJfdm1hbGxvY19hZGRyOgorCUtFUk5fUEdUQUJMRV9XQUxLKCVnNCwgJWc1LCAlZzIsIGt2bWFwX2R0bGJfbG9uZ3BhdGgpCiAKLWt2bWFwX25vbmxpbmVhcjoKKwlLVFNCX0xPQ0tfVEFHKCVnMSwgJWcyLCAlZzcpCisKKwkvKiBMb2FkIGFuZCBjaGVjayBQVEUuICAqLworCWxkeGEJCVslZzVdIEFTSV9QSFlTX1VTRV9FQywgJWc1CisJbW92CQkxLCAlZzcKKwlzbGx4CQklZzcsIFRTQl9UQUdfSU5WQUxJRF9CSVQsICVnNworCWJyZ2V6LGEscG4JJWc1LCBrdm1hcF9kdGxiX2xvbmdwYXRoCisJIEtUU0JfU1RPUkUoJWcxLCAlZzcpCisKKwlLVFNCX1dSSVRFKCVnMSwgJWc1LCAlZzYpCisKKwkvKiBmYWxsdGhyb3VnaCB0byBUTEIgbG9hZCAqLworCitrdm1hcF9kdGxiX2xvYWQ6CisKKzY2MToJc3R4YQkJJWc1LCBbJWcwXSBBU0lfRFRMQl9EQVRBX0lOCSEgUmVsb2FkIFRMQgorCXJldHJ5CisJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCAiYXgiCisJLndvcmQJCTY2MWIKKwlub3AKKwlub3AKKwkucHJldmlvdXMKKworCS8qIEZvciBzdW40diB0aGUgQVNJX0RUTEJfREFUQV9JTiBzdG9yZSBhbmQgdGhlIHJldHJ5CisJICogaW5zdHJ1Y3Rpb24gZ2V0IG5vcCdkIG91dCBhbmQgd2UgZ2V0IGhlcmUgdG8gYnJhbmNoCisJICogdG8gdGhlIHN1bjR2IHRsYiBsb2FkIGNvZGUuICBUaGUgcmVnaXN0ZXJzIGFyZSBzZXR1cAorCSAqIGFzIGZvbGxvd3M6CisJICoKKwkgKiAlZzQ6IHZhZGRyCisJICogJWc1OiBQVEUKKwkgKiAlZzY6CVRBRworCSAqCisJICogVGhlIHN1bjR2IFRMQiBsb2FkIHdhbnRzIHRoZSBQVEUgaW4gJWczIHNvIHdlIGZpeCB0aGF0CisJICogdXAgaGVyZS4KKwkgKi8KKwliYSxwdAkJJXhjYywgc3VuNHZfZHRsYl9sb2FkCisJIG1vdgkJJWc1LCAlZzMKKwora3ZtYXBfZHRsYl9ub25saW5lYXI6CisJLyogQ2F0Y2gga2VybmVsIE5VTEwgcG9pbnRlciBkZXJlZnMuICAqLworCXNldGhpCQklaGkoUEFHRV9TSVpFKSwgJWc1CisJY21wCQklZzQsICVnNQorCWJsZXUscG4JCSV4Y2MsIGt2bWFwX2R0bGJfbG9uZ3BhdGgKKwkgbm9wCisKKwlLRVJOX1RTQl9MT09LVVBfVEwxKCVnNCwgJWc2LCAlZzUsICVnMSwgJWcyLCAlZzMsIGt2bWFwX2R0bGJfbG9hZCkKKwora3ZtYXBfZHRsYl90c2JtaXNzOgogCXNldGhpCQklaGkoTU9EVUxFU19WQUREUiksICVnNQogCWNtcAkJJWc0LCAlZzUKLQlibHUscG4JCSV4Y2MsIGxvbmdwYXRoCisJYmx1LHBuCQkleGNjLCBrdm1hcF9kdGxiX2xvbmdwYXRoCiAJIG1vdgkJKFZNQUxMT0NfRU5EID4+IDI0KSwgJWc1CiAJc2xseAkJJWc1LCAyNCwgJWc1CiAJY21wCQklZzQsICVnNQotCWJnZXUscG4JCSV4Y2MsIGxvbmdwYXRoCisJYmdldSxwbgkJJXhjYywga3ZtYXBfZHRsYl9sb25ncGF0aAogCSBub3AKIAoga3ZtYXBfY2hlY2tfb2JwOgogCXNldGhpCQklaGkoTE9XX09CUF9BRERSRVNTKSwgJWc1CiAJY21wCQklZzQsICVnNQotCWJsdSxwbgkJJXhjYywga3ZtYXBfdm1hbGxvY19hZGRyCisJYmx1LHBuCQkleGNjLCBrdm1hcF9kdGxiX3ZtYWxsb2NfYWRkcgogCSBtb3YJCTB4MSwgJWc1CiAJc2xseAkJJWc1LCAzMiwgJWc1CiAJY21wCQklZzQsICVnNQotCWJsdSxwbgkJJXhjYywga3ZtYXBfZG9fb2JwCisJYmx1LHBuCQkleGNjLCBrdm1hcF9kdGxiX29icAorCSBub3AKKwliYSxwdAkJJXhjYywga3ZtYXBfZHRsYl92bWFsbG9jX2FkZHIKIAkgbm9wCiAKLWt2bWFwX3ZtYWxsb2NfYWRkcjoKLQkvKiBJZiB3ZSBnZXQgaGVyZSwgYSB2bWFsbG9jIGFkZHIgd2FzIGFjY2Vzc2VkLCBsb2FkIGtlcm5lbCBWUFRFLiAgKi8KLQlsZHhhCQlbJWczICsgJWc2XSBBU0lfTiwgJWc1Ci0JYnJnZXoscG4JJWc1LCBsb25ncGF0aAotCSBub3AKK2t2bWFwX2R0bGJfbG9uZ3BhdGg6CiAKLWt2bWFwX2xvYWQ6Ci0JLyogUFRFIGlzIHZhbGlkLCBsb2FkIGludG8gVExCIGFuZCByZXR1cm4gZnJvbSB0cmFwLiAgKi8KLQlzdHhhCQklZzUsIFslZzBdIEFTSV9EVExCX0RBVEFfSU4JISBSZWxvYWQgVExCCi0JcmV0cnkKKzY2MToJcmRwcgklcHN0YXRlLCAlZzUKKwl3cnByCSVnNSwgUFNUQVRFX0FHIHwgUFNUQVRFX01HLCAlcHN0YXRlCisJLnNlY3Rpb24gLnN1bjR2XzJpbnNuX3BhdGNoLCAiYXgiCisJLndvcmQJNjYxYgorCVNFVF9HTCgxKQorCWxkeGEJCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzUKKwkucHJldmlvdXMKKworCXJkcHIJJXRsLCAlZzMKKwljbXAJJWczLCAxCisKKzY2MToJbW92CVRMQl9UQUdfQUNDRVNTLCAlZzQKKwlsZHhhCVslZzRdIEFTSV9ETU1VLCAlZzUKKwkuc2VjdGlvbiAuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKKwkud29yZAk2NjFiCisJbGR4CVslZzUgKyBIVl9GQVVMVF9EX0FERFJfT0ZGU0VUXSwgJWc1CisJbm9wCisJLnByZXZpb3VzCisKKwliZSxwdAkleGNjLCBzcGFyYzY0X3JlYWxmYXVsdF9jb21tb24KKwkgbW92CUZBVUxUX0NPREVfRFRMQiwgJWc0CisJYmEscHQJJXhjYywgd2luZml4X3RyYW1wb2xpbmUKKwkgbm9wCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2kuYwppbmRleCAyZmY3YzMyLi5kZmNjZmYyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpLmMKQEAgLTE4OCw2ICsxODgsNyBAQAogZXh0ZXJuIHZvaWQgc2NoaXpvX2luaXQoaW50LCBjaGFyICopOwogZXh0ZXJuIHZvaWQgc2NoaXpvX3BsdXNfaW5pdChpbnQsIGNoYXIgKik7CiBleHRlcm4gdm9pZCB0b21hdGlsbG9faW5pdChpbnQsIGNoYXIgKik7CitleHRlcm4gdm9pZCBzdW40dl9wY2lfaW5pdChpbnQsIGNoYXIgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgewogCWNoYXIgKm1vZGVsX25hbWU7CkBAIC0yMDQsNiArMjA1LDcgQEAKIAl7ICJwY2kxMDhlLDgwMDIiLCBzY2hpem9fcGx1c19pbml0IH0sCiAJeyAiU1VOVyx0b21hdGlsbG8iLCB0b21hdGlsbG9faW5pdCB9LAogCXsgInBjaTEwOGUsYTgwMSIsIHRvbWF0aWxsb19pbml0IH0sCisJeyAiU1VOVyxzdW40di1wY2kiLCBzdW40dl9wY2lfaW5pdCB9LAogfTsKICNkZWZpbmUgUENJX05VTV9DT05UUk9MTEVSX1RZUEVTIChzaXplb2YocGNpX2NvbnRyb2xsZXJfdGFibGUpIC8gXAogCQkJCSAgc2l6ZW9mKHBjaV9jb250cm9sbGVyX3RhYmxlWzBdKSkKQEAgLTI4Myw2ICsyODUsMTIgQEAKIAlyZXR1cm4gcGNpX2NvbnRyb2xsZXJfc2NhbihwY2lfaXNfY29udHJvbGxlcik7CiB9CiAKK3N0cnVjdCBwY2lfaW9tbXVfb3BzICpwY2lfaW9tbXVfb3BzOworRVhQT1JUX1NZTUJPTChwY2lfaW9tbXVfb3BzKTsKKworZXh0ZXJuIHN0cnVjdCBwY2lfaW9tbXVfb3BzIHBjaV9zdW40dV9pb21tdV9vcHMsCisJcGNpX3N1bjR2X2lvbW11X29wczsKKwogLyogRmluZCBlYWNoIGNvbnRyb2xsZXIgaW4gdGhlIHN5c3RlbSwgYXR0YWNoIGFuZCBpbml0aWFsaXplCiAgKiBzb2Z0d2FyZSBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIGVhY2ggYW5kIGxpbmsgaW50byB0aGUKICAqIHBjaV9jb250cm9sbGVyX3Jvb3QuICBTZXR1cCB0aGUgY29udHJvbGxlciBlbm91Z2ggc3VjaApAQCAtMjkwLDYgKzI5OCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNpX2NvbnRyb2xsZXJfcHJvYmUodm9pZCkKIHsKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJcGNpX2lvbW11X29wcyA9ICZwY2lfc3VuNHZfaW9tbXVfb3BzOworCWVsc2UKKwkJcGNpX2lvbW11X29wcyA9ICZwY2lfc3VuNHVfaW9tbXVfb3BzOworCiAJcHJpbnRrKCJQQ0k6IFByb2JpbmcgZm9yIGNvbnRyb2xsZXJzLlxuIik7CiAKIAlwY2lfY29udHJvbGxlcl9zY2FuKHBjaV9jb250cm9sbGVyX2luaXQpOwpAQCAtNjQzLDYgKzY1Niw3IEBACiAJX19wY2lfbW1hcF9zZXRfZmxhZ3MoZGV2LCB2bWEsIG1tYXBfc3RhdGUpOwogCV9fcGNpX21tYXBfc2V0X3BncHJvdChkZXYsIHZtYSwgbW1hcF9zdGF0ZSk7CiAKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOwogCXJldCA9IGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCiAJCQkJIHZtYS0+dm1fcGdvZmYsCiAJCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKQEAgLTY1MCw3ICs2NjQsNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2NvbW1vbi5jCmluZGV4IDU4MzEwYWEuLjMzZGVkYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2NvbW1vbi5jCkBAIC0zOSw2ICszOSw4IEBACiB7CiAJaW50IG5vZGU7CiAKKwkqbnJlZ3MgPSAwOworCiAJLyoKIAkgKiBSZXR1cm4gdGhlIFBCTSdzIFBST00gbm9kZSBpbiBjYXNlIHdlIGFyZSBpdCdzIFBDSSBkZXZpY2UsCiAJICogYXMgdGhlIFBCTSdzIHJlZyBwcm9wZXJ0eSBpcyBkaWZmZXJlbnQgdG8gc3RhbmRhcmQgUENJIHJlZwpAQCAtNTEsMTAgKzUzLDggQEAKIAkgICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NVTl9TQ0hJWk8gfHwKIAkgICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NVTl9UT01BVElMTE8gfHwKIAkgICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NVTl9TQUJSRSB8fAotCSAgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU1VOX0hVTU1JTkdCSVJEKSkgewotCQkqbnJlZ3MgPSAwOworCSAgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU1VOX0hVTU1JTkdCSVJEKSkKIAkJcmV0dXJuIGJ1c19wcm9tX25vZGU7Ci0JfQogCiAJbm9kZSA9IHByb21fZ2V0Y2hpbGQoYnVzX3Byb21fbm9kZSk7CiAJd2hpbGUgKG5vZGUgIT0gMCkgewpAQCAtNTQxLDEzNSArNTQxLDE4MyBAQAogCQlwY2lfYXNzaWduX3VuYXNzaWduZWQocGJtLCBidXMpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBwY2lfaW50bWFwX21hdGNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgKmludGVycnVwdCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBjaV9zbG90X3N3aXZlbChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCisJCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICp0b3BsZXZlbF9wZGV2LAorCQkJCQkgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICAgdW5zaWduZWQgaW50IGludGVycnVwdCkKIHsKLQlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFwIGJyaWRnZV9sb2NhbF9pbnRtYXBbUFJPTV9QQ0lJTUFQX01BWF0sICppbnRtYXA7Ci0Jc3RydWN0IGxpbnV4X3Byb21fcGNpX2ludG1hc2sgYnJpZGdlX2xvY2FsX2ludG1hc2ssICppbnRtYXNrOwotCXN0cnVjdCBwY2lkZXZfY29va2llICpkZXZfcGNwID0gcGRldi0+c3lzZGF0YTsKLQlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBkZXZfcGNwLT5wYm07Ci0Jc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyAqcHJlZ3MgPSBkZXZfcGNwLT5wcm9tX3JlZ3M7Ci0JdW5zaWduZWQgaW50IGhpLCBtaWQsIGxvLCBpcnE7Ci0JaW50IGksIG51bV9pbnRtYXAsIG1hcF9zbG90OworCXVuc2lnbmVkIGludCByZXQ7CiAKLQlpbnRtYXAgPSAmcGJtLT5wYm1faW50bWFwWzBdOwotCWludG1hc2sgPSAmcGJtLT5wYm1faW50bWFzazsKLQludW1faW50bWFwID0gcGJtLT5udW1fcGJtX2ludG1hcDsKLQltYXBfc2xvdCA9IDA7CisJaWYgKHVubGlrZWx5KGludGVycnVwdCA8IDEgfHwgaW50ZXJydXB0ID4gNCkpIHsKKwkJcHJpbnRrKCIlczogRGV2aWNlICVzIGludGVycnVwdCB2YWx1ZSBvZiAldSBpcyBzdHJhbmdlLlxuIiwKKwkJICAgICAgIHBibS0+bmFtZSwgcGNpX25hbWUocGRldiksIGludGVycnVwdCk7CisJCXJldHVybiBpbnRlcnJ1cHQ7CisJfQogCi0JLyogSWYgd2UgYXJlIHVuZGVybmVhdGggYSBQQ0kgYnJpZGdlLCB1c2UgUFJPTSByZWdpc3RlcgotCSAqIHByb3BlcnR5IG9mIHRoZSBwYXJlbnQgYnJpZGdlIHdoaWNoIGlzIGNsb3Nlc3QgdG8KLQkgKiB0aGUgUEJNLgotCSAqCi0JICogSG93ZXZlciBpZiB0aGF0IHBhcmVudCBicmlkZ2UgaGFzIGludGVycnVwdCBtYXAvbWFzawotCSAqIHByb3BlcnRpZXMgb2YgaXRzIG93biB3ZSB1c2UgdGhlIFBST00gcmVnaXN0ZXIgcHJvcGVydHkKLQkgKiBvZiB0aGUgbmV4dCBjaGlsZCBkZXZpY2Ugb24gdGhlIHBhdGggdG8gUERFVi4KLQkgKgotCSAqIEluIGRldGFpbCB0aGUgdHdvIGNhc2VzIGFyZSAobm90ZSB0aGF0IHRoZSAnWCcgYmVsb3cgaXMgdGhlCi0JICogJ25leHQgY2hpbGQgb24gdGhlIHBhdGggdG8gUERFVicgbWVudGlvbmVkIGFib3ZlKToKLQkgKgotCSAqIDEpIFBCTSAtLT4gUENJIGJ1cyBsYWNraW5nIGludHttYXAsbWFza30gLS0+IFggLi4uIFBERVYKLQkgKgotCSAqICAgIEhlcmUgd2UgdXNlIHJlZ3Mgb2YgJ1BDSSBidXMnIGRldmljZS4KLQkgKgotCSAqIDIpIFBCTSAtLT4gUENJIGJ1cyB3aXRoIGludHttYXAsbWFza30gLS0+IFggLi4uIFBERVYKLQkgKgotCSAqICAgIEhlcmUgd2UgdXNlIHJlZ3Mgb2YgJ1gnLiAgTm90ZSB0aGF0IFggY2FuIGJlIFBERVYuCi0JICovCi0JaWYgKHBkZXYtPmJ1cy0+bnVtYmVyICE9IHBibS0+cGNpX2ZpcnN0X2J1c25vKSB7Ci0JCXN0cnVjdCBwY2lkZXZfY29va2llICpidXNfcGNwLCAqcmVnc19wY3A7Ci0JCXN0cnVjdCBwY2lfZGV2ICpidXNfZGV2LCAqcmVnc19kZXY7CisJcmV0ID0gKChpbnRlcnJ1cHQgLSAxICsgKFBDSV9TTE9UKHBkZXYtPmRldmZuKSAmIDMpKSAmIDMpICsgMTsKKworCXByaW50aygiJXM6ICVzIElSUSBTd2l2ZWwgJXMgWyV4OiV4XSAtPiBbJXhdXG4iLAorCSAgICAgICBwYm0tPm5hbWUsIHBjaV9uYW1lKHRvcGxldmVsX3BkZXYpLCBwY2lfbmFtZShwZGV2KSwKKwkgICAgICAgaW50ZXJydXB0LCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwY2lfYXBwbHlfaW50bWFwKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSwKKwkJCQkJICAgIHN0cnVjdCBwY2lfZGV2ICp0b3BsZXZlbF9wZGV2LAorCQkJCQkgICAgc3RydWN0IHBjaV9kZXYgKnBidXMsCisJCQkJCSAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBpbnRlcnJ1cHQsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmNub2RlKQoreworCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXAgaW1hcFtQUk9NX1BDSUlNQVBfTUFYXTsKKwlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFzayBpbWFzazsKKwlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGJ1c19wY3AgPSBwYnVzLT5zeXNkYXRhOworCXN0cnVjdCBwY2lkZXZfY29va2llICpwZGV2X3BjcCA9IHBkZXYtPnN5c2RhdGE7CisJc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycyAqcHJlZ3MgPSBwZGV2X3BjcC0+cHJvbV9yZWdzOworCWludCBwbGVuLCBudW1faW1hcCwgaTsKKwl1bnNpZ25lZCBpbnQgaGksIG1pZCwgbG8sIGlycSwgb3JpZ19pbnRlcnJ1cHQ7CisKKwkqY25vZGUgPSBwYnVzX3BjcC0+cHJvbV9ub2RlOworCisJcGxlbiA9IHByb21fZ2V0cHJvcGVydHkocGJ1c19wY3AtPnByb21fbm9kZSwgImludGVycnVwdC1tYXAiLAorCQkJCShjaGFyICopICZpbWFwWzBdLCBzaXplb2YoaW1hcCkpOworCWlmIChwbGVuIDw9IDAgfHwKKwkgICAgKHBsZW4gJSBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fcGNpX2ludG1hcCkpICE9IDApIHsKKwkJcHJpbnRrKCIlczogRGV2aWNlICVzIGludGVycnVwdC1tYXAgaGFzIGJhZCBsZW4gJWRcbiIsCisJCSAgICAgICBwYm0tPm5hbWUsIHBjaV9uYW1lKHBidXMpLCBwbGVuKTsKKwkJZ290byBub19pbnRtYXA7CisJfQorCW51bV9pbWFwID0gcGxlbiAvIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFwKTsKKworCXBsZW4gPSBwcm9tX2dldHByb3BlcnR5KHBidXNfcGNwLT5wcm9tX25vZGUsICJpbnRlcnJ1cHQtbWFwLW1hc2siLAorCQkJCShjaGFyICopICZpbWFzaywgc2l6ZW9mKGltYXNrKSk7CisJaWYgKHBsZW4gPD0gMCB8fAorCSAgICAocGxlbiAlIHNpemVvZihzdHJ1Y3QgbGludXhfcHJvbV9wY2lfaW50bWFzaykpICE9IDApIHsKKwkJcHJpbnRrKCIlczogRGV2aWNlICVzIGludGVycnVwdC1tYXAtbWFzayBoYXMgYmFkIGxlbiAlZFxuIiwKKwkJICAgICAgIHBibS0+bmFtZSwgcGNpX25hbWUocGJ1cyksIHBsZW4pOworCQlnb3RvIG5vX2ludG1hcDsKKwl9CisKKwlvcmlnX2ludGVycnVwdCA9IGludGVycnVwdDsKKworCWhpICAgPSBwcmVncy0+cGh5c19oaSAmIGltYXNrLnBoeXNfaGk7CisJbWlkICA9IHByZWdzLT5waHlzX21pZCAmIGltYXNrLnBoeXNfbWlkOworCWxvICAgPSBwcmVncy0+cGh5c19sbyAmIGltYXNrLnBoeXNfbG87CisJaXJxICA9IGludGVycnVwdCAmIGltYXNrLmludGVycnVwdDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1faW1hcDsgaSsrKSB7CisJCWlmIChpbWFwW2ldLnBoeXNfaGkgID09IGhpICAgJiYKKwkJICAgIGltYXBbaV0ucGh5c19taWQgPT0gbWlkICAmJgorCQkgICAgaW1hcFtpXS5waHlzX2xvICA9PSBsbyAgICYmCisJCSAgICBpbWFwW2ldLmludGVycnVwdCA9PSBpcnEpIHsKKwkJCSpjbm9kZSA9IGltYXBbaV0uY25vZGU7CisJCQlpbnRlcnJ1cHQgPSBpbWFwW2ldLmNpbnRlcnJ1cHQ7CisJCX0KKwl9CisKKwlwcmludGsoIiVzOiAlcyBNQVAgQlVTICVzIERFViAlcyBbJXhdIC0+IFsleF1cbiIsCisJICAgICAgIHBibS0+bmFtZSwgcGNpX25hbWUodG9wbGV2ZWxfcGRldiksCisJICAgICAgIHBjaV9uYW1lKHBidXMpLCBwY2lfbmFtZShwZGV2KSwKKwkgICAgICAgb3JpZ19pbnRlcnJ1cHQsIGludGVycnVwdCk7CisKK25vX2ludG1hcDoKKwlyZXR1cm4gaW50ZXJydXB0OworfQorCisvKiBGb3IgZWFjaCBQQ0kgYnVzIG9uIHRoZSB3YXkgdG8gdGhlIHJvb3Q6CisgKiAxKSBJZiBpdCBoYXMgYW4gaW50ZXJydXB0LW1hcCBwcm9wZXJ0eSwgYXBwbHkgaXQuCisgKiAyKSBFbHNlLCBzd2l2ZWwgdGhlIGludGVycnVwdCBudW1iZXIgYmFzZWQgdXBvbiB0aGUgUENJIGRldmljZSBudW1iZXIuCisgKgorICogUmV0dXJuIHRoZSAiSVJRIGNvbnRyb2xsZXIiIG5vZGUuICBJZiB0aGlzIGlzIHRoZSBQQk0ncyBkZXZpY2Ugbm9kZSwKKyAqIGFsbCBpbnRlcnJ1cHQgdHJhbnNsYXRpb25zIGFyZSBjb21wbGV0ZSwgZWxzZSB3ZSBzaG91bGQgdXNlIHRoYXQgbm9kZSdzCisgKiAicmVnIiBwcm9wZXJ0eSB0byBhcHBseSB0aGUgUEJNJ3MgImludGVycnVwdC17bWFwLG1hc2t9IiB0byB0aGUgaW50ZXJydXB0LgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBwY2lfaW50bWFwX21hdGNoX3RvX3Jvb3Qoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAorCQkJCQkJICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkJICAgIHVuc2lnbmVkIGludCAqaW50ZXJydXB0KQoreworCXN0cnVjdCBwY2lfZGV2ICp0b3BsZXZlbF9wZGV2ID0gcGRldjsKKwlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqdG9wbGV2ZWxfcGNwID0gdG9wbGV2ZWxfcGRldi0+c3lzZGF0YTsKKwl1bnNpZ25lZCBpbnQgY25vZGUgPSB0b3BsZXZlbF9wY3AtPnByb21fbm9kZTsKKworCXdoaWxlIChwZGV2LT5idXMtPm51bWJlciAhPSBwYm0tPnBjaV9maXJzdF9idXNubykgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGJ1cyA9IHBkZXYtPmJ1cy0+c2VsZjsKKwkJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcCA9IHBidXMtPnN5c2RhdGE7CiAJCWludCBwbGVuOwogCi0JCWJ1c19kZXYgPSBwZGV2LT5idXMtPnNlbGY7Ci0JCXJlZ3NfZGV2ID0gcGRldjsKLQotCQl3aGlsZSAoYnVzX2Rldi0+YnVzICYmCi0JCSAgICAgICBidXNfZGV2LT5idXMtPm51bWJlciAhPSBwYm0tPnBjaV9maXJzdF9idXNubykgewotCQkJcmVnc19kZXYgPSBidXNfZGV2OwotCQkJYnVzX2RldiA9IGJ1c19kZXYtPmJ1cy0+c2VsZjsKLQkJfQotCi0JCXJlZ3NfcGNwID0gcmVnc19kZXYtPnN5c2RhdGE7Ci0JCXByZWdzID0gcmVnc19wY3AtPnByb21fcmVnczsKLQotCQlidXNfcGNwID0gYnVzX2Rldi0+c3lzZGF0YTsKLQotCQkvKiBCdXQgaWYgdGhlIFBDSSBicmlkZ2UgaGFzIGl0J3Mgb3duIGludGVycnVwdCBtYXAKLQkJICogYW5kIG1hc2sgcHJvcGVydGllcywgdXNlIHRoYXQgYW5kIHRoZSByZWdzIG9mIHRoZQotCQkgKiBQQ0kgZW50aXR5IGF0IHRoZSBuZXh0IGxldmVsIGRvd24gb24gdGhlIHBhdGggdG8gdGhlCi0JCSAqIGRldmljZS4KLQkJICovCi0JCXBsZW4gPSBwcm9tX2dldHByb3BlcnR5KGJ1c19wY3AtPnByb21fbm9kZSwgImludGVycnVwdC1tYXAiLAotCQkJCQkoY2hhciAqKSAmYnJpZGdlX2xvY2FsX2ludG1hcFswXSwKLQkJCQkJc2l6ZW9mKGJyaWRnZV9sb2NhbF9pbnRtYXApKTsKLQkJaWYgKHBsZW4gIT0gLTEpIHsKLQkJCWludG1hcCA9ICZicmlkZ2VfbG9jYWxfaW50bWFwWzBdOwotCQkJbnVtX2ludG1hcCA9IHBsZW4gLyBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fcGNpX2ludG1hcCk7Ci0JCQlwbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShidXNfcGNwLT5wcm9tX25vZGUsCi0JCQkJCQkiaW50ZXJydXB0LW1hcC1tYXNrIiwKLQkJCQkJCShjaGFyICopICZicmlkZ2VfbG9jYWxfaW50bWFzaywKLQkJCQkJCXNpemVvZihicmlkZ2VfbG9jYWxfaW50bWFzaykpOwotCQkJaWYgKHBsZW4gPT0gLTEpIHsKLQkJCQlwcmludGsoInBjaV9pbnRtYXBfbWF0Y2g6IFdhcm5pbmchIEJyaWRnZSBoYXMgaW50bWFwICIKLQkJCQkgICAgICAgImJ1dCBubyBpbnRtYXNrLlxuIik7Ci0JCQkJcHJpbnRrKCJwY2lfaW50bWFwX21hdGNoOiBUcnlpbmcgdG8gcmVjb3Zlci5cbiIpOwotCQkJCXJldHVybiAwOwotCQkJfQotCi0JCQlpZiAocGRldi0+YnVzLT5zZWxmICE9IGJ1c19kZXYpCi0JCQkJbWFwX3Nsb3QgPSAxOworCQlwbGVuID0gcHJvbV9nZXRwcm9wbGVuKHBjcC0+cHJvbV9ub2RlLCAiaW50ZXJydXB0LW1hcCIpOworCQlpZiAocGxlbiA8PSAwKSB7CisJCQkqaW50ZXJydXB0ID0gcGNpX3Nsb3Rfc3dpdmVsKHBibSwgdG9wbGV2ZWxfcGRldiwKKwkJCQkJCSAgICAgcGRldiwgKmludGVycnVwdCk7CisJCQljbm9kZSA9IHBjcC0+cHJvbV9ub2RlOwogCQl9IGVsc2UgewotCQkJcHJlZ3MgPSBidXNfcGNwLT5wcm9tX3JlZ3M7Ci0JCQltYXBfc2xvdCA9IDE7CisJCQkqaW50ZXJydXB0ID0gcGNpX2FwcGx5X2ludG1hcChwYm0sIHRvcGxldmVsX3BkZXYsCisJCQkJCQkgICAgICBwYnVzLCBwZGV2LAorCQkJCQkJICAgICAgKmludGVycnVwdCwgJmNub2RlKTsKKworCQkJd2hpbGUgKHBjcC0+cHJvbV9ub2RlICE9IGNub2RlICYmCisJCQkgICAgICAgcGJ1cy0+YnVzLT5udW1iZXIgIT0gcGJtLT5wY2lfZmlyc3RfYnVzbm8pIHsKKwkJCQlwYnVzID0gcGJ1cy0+YnVzLT5zZWxmOworCQkJCXBjcCA9IHBidXMtPnN5c2RhdGE7CisJCQl9CisJCX0KKwkJcGRldiA9IHBidXM7CisKKwkJaWYgKGNub2RlID09IHBibS0+cHJvbV9ub2RlKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNub2RlOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwY2lfaW50bWFwX21hdGNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgKmludGVycnVwdCkKK3sKKwlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqZGV2X3BjcCA9IHBkZXYtPnN5c2RhdGE7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gZGV2X3BjcC0+cGJtOworCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9yZWdpc3RlcnMgcmVnW1BST01SRUdfTUFYXTsKKwl1bnNpZ25lZCBpbnQgaGksIG1pZCwgbG8sIGlycTsKKwlpbnQgaSwgY25vZGUsIHBsZW47CisKKwljbm9kZSA9IHBjaV9pbnRtYXBfbWF0Y2hfdG9fcm9vdChwYm0sIHBkZXYsIGludGVycnVwdCk7CisJaWYgKGNub2RlID09IHBibS0+cHJvbV9ub2RlKQorCQlnb3RvIHN1Y2Nlc3M7CisKKwlwbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShjbm9kZSwgInJlZyIsIChjaGFyICopIHJlZywgc2l6ZW9mKHJlZykpOworCWlmIChwbGVuIDw9IDAgfHwKKwkgICAgKHBsZW4gJSBzaXplb2Yoc3RydWN0IGxpbnV4X3Byb21fcGNpX3JlZ2lzdGVycykpICE9IDApIHsKKwkJcHJpbnRrKCIlczogT0JQIG5vZGUgJXggcmVnIHByb3BlcnR5IGhhcyBiYWQgbGVuICVkXG4iLAorCQkgICAgICAgcGJtLT5uYW1lLCBjbm9kZSwgcGxlbik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwloaSAgID0gcmVnWzBdLnBoeXNfaGkgJiBwYm0tPnBibV9pbnRtYXNrLnBoeXNfaGk7CisJbWlkICA9IHJlZ1swXS5waHlzX21pZCAmIHBibS0+cGJtX2ludG1hc2sucGh5c19taWQ7CisJbG8gICA9IHJlZ1swXS5waHlzX2xvICYgcGJtLT5wYm1faW50bWFzay5waHlzX2xvOworCWlycSAgPSAqaW50ZXJydXB0ICYgcGJtLT5wYm1faW50bWFzay5pbnRlcnJ1cHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGJtLT5udW1fcGJtX2ludG1hcDsgaSsrKSB7CisJCXN0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXAgKmludG1hcDsKKworCQlpbnRtYXAgPSAmcGJtLT5wYm1faW50bWFwW2ldOworCisJCWlmIChpbnRtYXAtPnBoeXNfaGkgID09IGhpICAmJgorCQkgICAgaW50bWFwLT5waHlzX21pZCA9PSBtaWQgJiYKKwkJICAgIGludG1hcC0+cGh5c19sbyAgPT0gbG8gICYmCisJCSAgICBpbnRtYXAtPmludGVycnVwdCA9PSBpcnEpIHsKKwkJCSppbnRlcnJ1cHQgPSBpbnRtYXAtPmNpbnRlcnJ1cHQ7CisJCQlnb3RvIHN1Y2Nlc3M7CiAJCX0KIAl9CiAKLQlpZiAobWFwX3Nsb3QpIHsKLQkJKmludGVycnVwdCA9ICgoKmludGVycnVwdAotCQkJICAgICAgIC0gMQotCQkJICAgICAgICsgUENJX1NMT1QocGRldi0+ZGV2Zm4pKSAmIDB4MykgKyAxOwotCX0KLQotCWhpICAgPSBwcmVncy0+cGh5c19oaSAmIGludG1hc2stPnBoeXNfaGk7Ci0JbWlkICA9IHByZWdzLT5waHlzX21pZCAmIGludG1hc2stPnBoeXNfbWlkOwotCWxvICAgPSBwcmVncy0+cGh5c19sbyAmIGludG1hc2stPnBoeXNfbG87Ci0JaXJxICA9ICppbnRlcnJ1cHQgJiBpbnRtYXNrLT5pbnRlcnJ1cHQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludG1hcDsgaSsrKSB7Ci0JCWlmIChpbnRtYXBbaV0ucGh5c19oaSAgPT0gaGkJJiYKLQkJICAgIGludG1hcFtpXS5waHlzX21pZCA9PSBtaWQJJiYKLQkJICAgIGludG1hcFtpXS5waHlzX2xvICA9PSBsbwkmJgotCQkgICAgaW50bWFwW2ldLmludGVycnVwdCA9PSBpcnEpIHsKLQkJCSppbnRlcnJ1cHQgPSBpbnRtYXBbaV0uY2ludGVycnVwdDsKLQkJCXByaW50aygiUENJLUlSUTogUm91dGluZyBidXNbJTJ4XSBzbG90WyUyeF0gbWFwWyVkXSB0byBJTk9bJTAyeF1cbiIsCi0JCQkgICAgICAgcGRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwKLQkJCSAgICAgICBtYXBfc2xvdCwgKmludGVycnVwdCk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCS8qIFdlIHdpbGwgcnVuIHRoaXMgY29kZSBldmVuIGlmIHBibS0+bnVtX3BibV9pbnRtYXAgaXMgemVybywganVzdCBzbwotCSAqIHdlIGNhbiBhcHBseSB0aGUgc2xvdCBtYXBwaW5nIHRvIHRoZSBQUk9NIGludGVycnVwdCBwcm9wZXJ0eSB2YWx1ZS4KLQkgKiBTbyBkbyBub3Qgc3BpdCBvdXQgdGhlc2Ugd2FybmluZ3MgaW4gdGhhdCBjYXNlLgotCSAqLwotCWlmIChudW1faW50bWFwICE9IDApIHsKLQkJLyogUHJpbnQgaXQgYm90aCB0byBPQlAgY29uc29sZSBhbmQga2VybmVsIG9uZSBzbyB0aGF0IGlmIGJvb3R1cAotCQkgKiBoYW5ncyBoZXJlIHRoZSB1c2VyIGhhcyB0aGUgaW5mb3JtYXRpb24gdG8gcmVwb3J0LgotCQkgKi8KLQkJcHJvbV9wcmludGYoInBjaV9pbnRtYXBfbWF0Y2g6IGJ1cyAlMDJ4LCBkZXZmbiAlMDJ4OiAiLAotCQkJICAgIHBkZXYtPmJ1cy0+bnVtYmVyLCBwZGV2LT5kZXZmbik7Ci0JCXByb21fcHJpbnRmKCJJUlEgWyUwOHguJTA4eC4lMDh4LiUwOHhdIG5vdCBmb3VuZCBpbiBpbnRlcnJ1cHQtbWFwXG4iLAotCQkJICAgIHByZWdzLT5waHlzX2hpLCBwcmVncy0+cGh5c19taWQsIHByZWdzLT5waHlzX2xvLCAqaW50ZXJydXB0KTsKLQkJcHJvbV9wcmludGYoIlBsZWFzZSBlbWFpbCB0aGlzIGluZm9ybWF0aW9uIHRvIGRhdmVtQHJlZGhhdC5jb21cbiIpOwotCi0JCXByaW50aygicGNpX2ludG1hcF9tYXRjaDogYnVzICUwMngsIGRldmZuICUwMng6ICIsCi0JCSAgICAgICBwZGV2LT5idXMtPm51bWJlciwgcGRldi0+ZGV2Zm4pOwotCQlwcmludGsoIklSUSBbJTA4eC4lMDh4LiUwOHguJTA4eF0gbm90IGZvdW5kIGluIGludGVycnVwdC1tYXBcbiIsCi0JCSAgICAgICBwcmVncy0+cGh5c19oaSwgcHJlZ3MtPnBoeXNfbWlkLCBwcmVncy0+cGh5c19sbywgKmludGVycnVwdCk7Ci0JCXByaW50aygiUGxlYXNlIGVtYWlsIHRoaXMgaW5mb3JtYXRpb24gdG8gZGF2ZW1AcmVkaGF0LmNvbVxuIik7Ci0JfQotCitmYWlsOgogCXJldHVybiAwOworCitzdWNjZXNzOgorCXByaW50aygiUENJLUlSUTogUm91dGluZyBidXNbJTJ4XSBzbG90WyUyeF0gdG8gSU5PWyUwMnhdXG4iLAorCSAgICAgICBwZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QocGRldi0+ZGV2Zm4pLAorCSAgICAgICAqaW50ZXJydXB0KTsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHBkZXZfZml4dXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtNzAzLDE2ICs3NTEsMTggQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIEZ1bGx5IHNwZWNpZmllZCBhbHJlYWR5PyAqLwotCWlmICgoKHByb21faXJxICYgUENJX0lSUV9JR04pID4+IDYpID09IHBvcnRpZCkgewotCQlwZGV2LT5pcnEgPSBwLT5pcnFfYnVpbGQocGJtLCBwZGV2LCBwcm9tX2lycSk7Ci0JCWdvdG8gaGF2ZV9pcnE7Ci0JfQorCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yKSB7CisJCS8qIEZ1bGx5IHNwZWNpZmllZCBhbHJlYWR5PyAqLworCQlpZiAoKChwcm9tX2lycSAmIFBDSV9JUlFfSUdOKSA+PiA2KSA9PSBwb3J0aWQpIHsKKwkJCXBkZXYtPmlycSA9IHAtPmlycV9idWlsZChwYm0sIHBkZXYsIHByb21faXJxKTsKKwkJCWdvdG8gaGF2ZV9pcnE7CisJCX0KIAotCS8qIEFuIG9uYm9hcmQgZGV2aWNlPyAoYml0IDUgc2V0KSAqLwotCWlmICgocHJvbV9pcnEgJiBQQ0lfSVJRX0lOTykgJiAweDIwKSB7Ci0JCXBkZXYtPmlycSA9IHAtPmlycV9idWlsZChwYm0sIHBkZXYsIChwb3J0aWQgPDwgNiB8IHByb21faXJxKSk7Ci0JCWdvdG8gaGF2ZV9pcnE7CisJCS8qIEFuIG9uYm9hcmQgZGV2aWNlPyAoYml0IDUgc2V0KSAqLworCQlpZiAoKHByb21faXJxICYgUENJX0lSUV9JTk8pICYgMHgyMCkgeworCQkJcGRldi0+aXJxID0gcC0+aXJxX2J1aWxkKHBibSwgcGRldiwgKHBvcnRpZCA8PCA2IHwgcHJvbV9pcnEpKTsKKwkJCWdvdG8gaGF2ZV9pcnE7CisJCX0KIAl9CiAKIAkvKiBDYW4gd2UgZmluZCBhIG1hdGNoaW5nIGVudHJ5IGluIHRoZSBpbnRlcnJ1cHQtbWFwPyAqLwpAQCAtOTI3LDMzICs5NzcsMzAgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnA7CiAKIAkvKiBWR0EgVmlkZW8gUkFNLiAqLwotCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCXAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwogCWlmICghcCkKIAkJcmV0dXJuOwogCi0JbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwogCXAtPm5hbWUgPSAiVmlkZW8gUkFNIGFyZWEiOwogCXAtPnN0YXJ0ID0gbWVtX3Jlcy0+c3RhcnQgKyAweGEwMDAwVUw7CiAJcC0+ZW5kID0gcC0+c3RhcnQgKyAweDFmZmZmVUw7CiAJcC0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1k7CiAJcmVxdWVzdF9yZXNvdXJjZShtZW1fcmVzLCBwKTsKIAotCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCXAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwogCWlmICghcCkKIAkJcmV0dXJuOwogCi0JbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwogCXAtPm5hbWUgPSAiU3lzdGVtIFJPTSI7CiAJcC0+c3RhcnQgPSBtZW1fcmVzLT5zdGFydCArIDB4ZjAwMDBVTDsKIAlwLT5lbmQgPSBwLT5zdGFydCArIDB4ZmZmZlVMOwogCXAtPmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZOwogCXJlcXVlc3RfcmVzb3VyY2UobWVtX3JlcywgcCk7CiAKLQlwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXApCiAJCXJldHVybjsKIAotCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKIAlwLT5uYW1lID0gIlZpZGVvIFJPTSI7CiAJcC0+c3RhcnQgPSBtZW1fcmVzLT5zdGFydCArIDB4YzAwMDBVTDsKIAlwLT5lbmQgPSBwLT5zdGFydCArIDB4N2ZmZlVMOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW9tbXUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggYTExOTEwYi4uOGVmYmMxMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfaW9tbXUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9pb21tdS5jCkBAIC0xMzksMTIgKzEzOSwxMSBAQAogCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBmcmVlIGFyZWEgbWFwLiAgKi8KIAlzeiA9IG51bV90c2JfZW50cmllcyAvIDg7CiAJc3ogPSAoc3ogKyA3VUwpICYgfjdVTDsKLQlpb21tdS0+YXJlbmEubWFwID0ga21hbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaW9tbXUtPmFyZW5hLm1hcCA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOwogCWlmICghaW9tbXUtPmFyZW5hLm1hcCkgewogCQlwcm9tX3ByaW50ZigiUENJX0lPTU1VOiBFcnJvciwga21hbGxvYyhhcmVuYS5tYXApIGZhaWxlZC5cbiIpOwogCQlwcm9tX2hhbHQoKTsKIAl9Ci0JbWVtc2V0KGlvbW11LT5hcmVuYS5tYXAsIDAsIHN6KTsKIAlpb21tdS0+YXJlbmEubGltaXQgPSBudW1fdHNiX2VudHJpZXM7CiAKIAkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgZHVtbXkgcGFnZSB3aGljaCB3ZQpAQCAtMjE5LDcgKzIxOCw3IEBACiAgKiBETUEgZm9yIFBDSSBkZXZpY2UgUERFVi4gIFJldHVybiBub24tTlVMTCBjcHUtc2lkZSBhZGRyZXNzIGlmCiAgKiBzdWNjZXNzZnVsIGFuZCBzZXQgKkRNQV9BRERSUCB0byB0aGUgUENJIHNpZGUgZG1hIGFkZHJlc3MuCiAgKi8KLXZvaWQgKnBjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2FkZHJwKQorc3RhdGljIHZvaWQgKnBjaV80dV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2FkZHJwKQogewogCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3A7CiAJc3RydWN0IHBjaV9pb21tdSAqaW9tbXU7CkBAIC0yNjcsNyArMjY2LDcgQEAKIH0KIAogLyogRnJlZSBhbmQgdW5tYXAgYSBjb25zaXN0ZW50IERNQSB0cmFuc2xhdGlvbi4gKi8KLXZvaWQgcGNpX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdSwgZG1hX2FkZHJfdCBkdm1hKQorc3RhdGljIHZvaWQgcGNpXzR1X2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdSwgZG1hX2FkZHJfdCBkdm1hKQogewogCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3A7CiAJc3RydWN0IHBjaV9pb21tdSAqaW9tbXU7CkBAIC0yOTQsNyArMjkzLDcgQEAKIC8qIE1hcCBhIHNpbmdsZSBidWZmZXIgYXQgUFRSIG9mIFNaIGJ5dGVzIGZvciBQQ0kgRE1BCiAgKiBpbiBzdHJlYW1pbmcgbW9kZS4KICAqLwotZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc3osIGludCBkaXJlY3Rpb24pCitzdGF0aWMgZG1hX2FkZHJfdCBwY2lfNHVfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc3osIGludCBkaXJlY3Rpb24pCiB7CiAJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcDsKIAlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKQEAgLTQxNSw3ICs0MTQsNyBAQAogfQogCiAvKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICovCi12b2lkIHBjaV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsIHNpemVfdCBzeiwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHBjaV80dV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsIHNpemVfdCBzeiwgaW50IGRpcmVjdGlvbikKIHsKIAlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwOwogCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11OwpAQCAtNTQ4LDcgKzU0Nyw3IEBACiAgKiBXaGVuIG1ha2luZyBjaGFuZ2VzIGhlcmUsIGluc3BlY3QgdGhlIGFzc2VtYmx5IG91dHB1dC4gSSB3YXMgaGF2aW5nCiAgKiBoYXJkIHRpbWUgdG8ga2VwcCB0aGlzIHJvdXRpbmUgb3V0IG9mIHVzaW5nIHN0YWNrIHNsb3RzIGZvciBob2xkaW5nIHZhcmlhYmxlcy4KICAqLwotaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIGludCBwY2lfNHVfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKIHsKIAlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwOwogCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11OwpAQCAtNTYyLDkgKzU2MSw5IEBACiAJLyogRmFzdCBwYXRoIHNpbmdsZSBlbnRyeSBzY2F0dGVybGlzdHMuICovCiAJaWYgKG5lbGVtcyA9PSAxKSB7CiAJCXNnbGlzdC0+ZG1hX2FkZHJlc3MgPQotCQkJcGNpX21hcF9zaW5nbGUocGRldiwKLQkJCQkgICAgICAgKHBhZ2VfYWRkcmVzcyhzZ2xpc3QtPnBhZ2UpICsgc2dsaXN0LT5vZmZzZXQpLAotCQkJCSAgICAgICBzZ2xpc3QtPmxlbmd0aCwgZGlyZWN0aW9uKTsKKwkJCXBjaV80dV9tYXBfc2luZ2xlKHBkZXYsCisJCQkJCSAgKHBhZ2VfYWRkcmVzcyhzZ2xpc3QtPnBhZ2UpICsgc2dsaXN0LT5vZmZzZXQpLAorCQkJCQkgIHNnbGlzdC0+bGVuZ3RoLCBkaXJlY3Rpb24pOwogCQlpZiAodW5saWtlbHkoc2dsaXN0LT5kbWFfYWRkcmVzcyA9PSBQQ0lfRE1BX0VSUk9SX0NPREUpKQogCQkJcmV0dXJuIDA7CiAJCXNnbGlzdC0+ZG1hX2xlbmd0aCA9IHNnbGlzdC0+bGVuZ3RoOwpAQCAtNjM1LDcgKzYzNCw3IEBACiB9CiAKIC8qIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuICovCi12b2lkIHBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBwY2lfNHVfdW5tYXBfc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQogewogCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3A7CiAJc3RydWN0IHBjaV9pb21tdSAqaW9tbXU7CkBAIC02OTUsNyArNjk0LDcgQEAKIC8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2luZ2xlCiAgKiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24gYWZ0ZXIgYSB0cmFuc2Zlci4KICAqLwotdm9pZCBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsIHNpemVfdCBzeiwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHBjaV80dV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hX2FkZHJfdCBidXNfYWRkciwgc2l6ZV90IHN6LCBpbnQgZGlyZWN0aW9uKQogewogCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3A7CiAJc3RydWN0IHBjaV9pb21tdSAqaW9tbXU7CkBAIC03MzUsNyArNzM0LDcgQEAKIC8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2V0IG9mIHN0cmVhbWluZwogICogbW9kZSBETUEgdHJhbnNsYXRpb25zIGFmdGVyIGEgdHJhbnNmZXIuCiAgKi8KLXZvaWQgcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgcGNpXzR1X2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQogewogCXN0cnVjdCBwY2lkZXZfY29va2llICpwY3A7CiAJc3RydWN0IHBjaV9pb21tdSAqaW9tbXU7CkBAIC03NzYsNiArNzc1LDE3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKIH0KIAorc3RydWN0IHBjaV9pb21tdV9vcHMgcGNpX3N1bjR1X2lvbW11X29wcyA9IHsKKwkuYWxsb2NfY29uc2lzdGVudAkJPSBwY2lfNHVfYWxsb2NfY29uc2lzdGVudCwKKwkuZnJlZV9jb25zaXN0ZW50CQk9IHBjaV80dV9mcmVlX2NvbnNpc3RlbnQsCisJLm1hcF9zaW5nbGUJCQk9IHBjaV80dV9tYXBfc2luZ2xlLAorCS51bm1hcF9zaW5nbGUJCQk9IHBjaV80dV91bm1hcF9zaW5nbGUsCisJLm1hcF9zZwkJCQk9IHBjaV80dV9tYXBfc2csCisJLnVubWFwX3NnCQkJPSBwY2lfNHVfdW5tYXBfc2csCisJLmRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CT0gcGNpXzR1X2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1LAorCS5kbWFfc3luY19zZ19mb3JfY3B1CQk9IHBjaV80dV9kbWFfc3luY19zZ19mb3JfY3B1LAorfTsKKwogc3RhdGljIHZvaWQgYWxpX3NvdW5kX2RtYV9oYWNrKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgc2V0X2JpdCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqYWxpX2lzYV9icmlkZ2U7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9wc3ljaG8uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3BzeWNoby5jCmluZGV4IGMwM2VkNWYuLmQxNzg3OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3BzeWNoby5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3BzeWNoby5jCkBAIC0yODYsMTcgKzI4NiwxNyBAQAogLyoweDE0Ki8wLCAwLCAwLCAwLAkvKiBQQ0kgQiBzbG90IDEgIEludCBBLCBCLCBDLCBEICovCiAvKjB4MTgqLzAsIDAsIDAsIDAsCS8qIFBDSSBCIHNsb3QgMiAgSW50IEEsIEIsIEMsIEQgKi8KIC8qMHgxYyovMCwgMCwgMCwgMCwJLyogUENJIEIgc2xvdCAzICBJbnQgQSwgQiwgQywgRCAqLwotLyoweDIwKi80LAkJLyogU0NTSQkJCQkqLworLyoweDIwKi81LAkJLyogU0NTSQkJCQkqLwogLyoweDIxKi81LAkJLyogRXRoZXJuZXQJCQkqLwogLyoweDIyKi84LAkJLyogUGFyYWxsZWwgUG9ydAkJKi8KIC8qMHgyMyovMTMsCQkvKiBBdWRpbyBSZWNvcmQJCQkqLwogLyoweDI0Ki8xNCwJCS8qIEF1ZGlvIFBsYXliYWNrCQkqLwogLyoweDI1Ki8xNSwJCS8qIFBvd2VyRmFpbAkJCSovCi0vKjB4MjYqLzQsCQkvKiBzZWNvbmQgU0NTSQkJCSovCisvKjB4MjYqLzUsCQkvKiBzZWNvbmQgU0NTSQkJCSovCiAvKjB4MjcqLzExLAkJLyogRmxvcHB5CQkJKi8KLS8qMHgyOCovNCwJCS8qIFNwYXJlIEhhcmR3YXJlCQkqLworLyoweDI4Ki81LAkJLyogU3BhcmUgSGFyZHdhcmUJCSovCiAvKjB4MjkqLzksCQkvKiBLZXlib2FyZAkJCSovCi0vKjB4MmEqLzQsCQkvKiBNb3VzZQkJCSovCisvKjB4MmEqLzUsCQkvKiBNb3VzZQkJCSovCiAvKjB4MmIqLzEyLAkJLyogU2VyaWFsCQkJKi8KIC8qMHgyYyovMTAsCQkvKiBUaW1lciAwCQkJKi8KIC8qMHgyZCovMTEsCQkvKiBUaW1lciAxCQkJKi8KQEAgLTMxMywxMSArMzEzLDExIEBACiAKIAlyZXQgPSBwc3ljaG9fcGlsX3RhYmxlW2lub107CiAJaWYgKHJldCA9PSAwICYmIHBkZXYgPT0gTlVMTCkgewotCQlyZXQgPSA0OworCQlyZXQgPSA1OwogCX0gZWxzZSBpZiAocmV0ID09IDApIHsKIAkJc3dpdGNoICgocGRldi0+Y2xhc3MgPj4gMTYpICYgMHhmZikgewogCQljYXNlIFBDSV9CQVNFX0NMQVNTX1NUT1JBR0U6Ci0JCQlyZXQgPSA0OworCQkJcmV0ID0gNTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUENJX0JBU0VfQ0xBU1NfTkVUV09SSzoKQEAgLTMzNiw3ICszMzYsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXJldCA9IDQ7CisJCQlyZXQgPSA1OwogCQkJYnJlYWs7CiAJCX07CiAJfQpAQCAtMTE2NCw3ICsxMTY0LDcgQEAKIHN0YXRpYyB2b2lkIHBibV9zY2FuX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKIAkJCSBzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7Ci0Jc3RydWN0IHBjaWRldl9jb29raWUgKmNvb2tpZSA9IGttYWxsb2Moc2l6ZW9mKCpjb29raWUpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqY29va2llID0ga3phbGxvYyhzaXplb2YoKmNvb2tpZSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFjb29raWUpIHsKIAkJcHJvbV9wcmludGYoIlBTWUNITzogQ3JpdGljYWwgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIik7CkBAIC0xMTcyLDcgKzExNzIsNiBAQAogCX0KIAogCS8qIEFsbCB3ZSBjYXJlIGFib3V0IGlzIHRoZSBQQk0uICovCi0JbWVtc2V0KGNvb2tpZSwgMCwgc2l6ZW9mKCpjb29raWUpKTsKIAljb29raWUtPnBibSA9IHBibTsKIAogCXBibS0+cGNpX2J1cyA9IHBjaV9zY2FuX2J1cyhwYm0tPnBjaV9maXJzdF9idXNubywKQEAgLTE0NjUsMTggKzE0NjQsMTYgQEAKIAkJfQogCX0KIAotCXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyksIEdGUF9BVE9NSUMpOworCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyksIEdGUF9BVE9NSUMpOwogCWlmICghcCkgewogCQlwcm9tX3ByaW50ZigiUFNZQ0hPOiBGYXRhbCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci5cbiIpOwogCQlwcm9tX2hhbHQoKTsKIAl9Ci0JbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCWlvbW11ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9pb21tdSksIEdGUF9BVE9NSUMpOworCWlvbW11ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9pb21tdSksIEdGUF9BVE9NSUMpOwogCWlmICghaW9tbXUpIHsKIAkJcHJvbV9wcmludGYoIlBTWUNITzogRmF0YWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW1lbXNldChpb21tdSwgMCwgc2l6ZW9mKCppb21tdSkpOwogCXAtPnBibV9BLmlvbW11ID0gcC0+cGJtX0IuaW9tbXUgPSBpb21tdTsKIAogCXAtPm5leHQgPSBwY2lfY29udHJvbGxlcl9yb290OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2FicmUuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NhYnJlLmMKaW5kZXggZGE4ZTEzNi4uZjY3YmI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc2FicmUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zYWJyZS5jCkBAIC01MzMsMTcgKzUzMywxNyBAQAogLyoweDE0Ki8wLCAwLCAwLCAwLAkvKiBQQ0kgQiBzbG90IDEgIEludCBBLCBCLCBDLCBEICovCiAvKjB4MTgqLzAsIDAsIDAsIDAsCS8qIFBDSSBCIHNsb3QgMiAgSW50IEEsIEIsIEMsIEQgKi8KIC8qMHgxYyovMCwgMCwgMCwgMCwJLyogUENJIEIgc2xvdCAzICBJbnQgQSwgQiwgQywgRCAqLwotLyoweDIwKi80LAkJLyogU0NTSQkJCQkqLworLyoweDIwKi81LAkJLyogU0NTSQkJCQkqLwogLyoweDIxKi81LAkJLyogRXRoZXJuZXQJCQkqLwogLyoweDIyKi84LAkJLyogUGFyYWxsZWwgUG9ydAkJKi8KIC8qMHgyMyovMTMsCQkvKiBBdWRpbyBSZWNvcmQJCQkqLwogLyoweDI0Ki8xNCwJCS8qIEF1ZGlvIFBsYXliYWNrCQkqLwogLyoweDI1Ki8xNSwJCS8qIFBvd2VyRmFpbAkJCSovCi0vKjB4MjYqLzQsCQkvKiBzZWNvbmQgU0NTSQkJCSovCisvKjB4MjYqLzUsCQkvKiBzZWNvbmQgU0NTSQkJCSovCiAvKjB4MjcqLzExLAkJLyogRmxvcHB5CQkJKi8KLS8qMHgyOCovNCwJCS8qIFNwYXJlIEhhcmR3YXJlCQkqLworLyoweDI4Ki81LAkJLyogU3BhcmUgSGFyZHdhcmUJCSovCiAvKjB4MjkqLzksCQkvKiBLZXlib2FyZAkJCSovCi0vKjB4MmEqLzQsCQkvKiBNb3VzZQkJCSovCisvKjB4MmEqLzUsCQkvKiBNb3VzZQkJCSovCiAvKjB4MmIqLzEyLAkJLyogU2VyaWFsCQkJKi8KIC8qMHgyYyovMTAsCQkvKiBUaW1lciAwCQkJKi8KIC8qMHgyZCovMTEsCQkvKiBUaW1lciAxCQkJKi8KQEAgLTU2NSwxMSArNTY1LDExIEBACiAKIAlyZXQgPSBzYWJyZV9waWxfdGFibGVbaW5vXTsKIAlpZiAocmV0ID09IDAgJiYgcGRldiA9PSBOVUxMKSB7Ci0JCXJldCA9IDQ7CisJCXJldCA9IDU7CiAJfSBlbHNlIGlmIChyZXQgPT0gMCkgewogCQlzd2l0Y2ggKChwZGV2LT5jbGFzcyA+PiAxNikgJiAweGZmKSB7CiAJCWNhc2UgUENJX0JBU0VfQ0xBU1NfU1RPUkFHRToKLQkJCXJldCA9IDQ7CisJCQlyZXQgPSA1OwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQQ0lfQkFTRV9DTEFTU19ORVRXT1JLOgpAQCAtNTg4LDcgKzU4OCw3IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcmV0ID0gNDsKKwkJCXJldCA9IDU7CiAJCQlicmVhazsKIAkJfTsKIAl9CkBAIC0xMTY3LDcgKzExNjcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaWRldl9jb29raWUgKmFsbG9jX2JyaWRnZV9jb29raWUoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQogewotCXN0cnVjdCBwY2lkZXZfY29va2llICpjb29raWUgPSBrbWFsbG9jKHNpemVvZigqY29va2llKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHBjaWRldl9jb29raWUgKmNvb2tpZSA9IGt6YWxsb2Moc2l6ZW9mKCpjb29raWUpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghY29va2llKSB7CiAJCXByb21fcHJpbnRmKCJTQUJSRTogQ3JpdGljYWwgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIik7CkBAIC0xMTc1LDcgKzExNzUsNiBAQAogCX0KIAogCS8qIEFsbCB3ZSBjYXJlIGFib3V0IGlzIHRoZSBQQk0uICovCi0JbWVtc2V0KGNvb2tpZSwgMCwgc2l6ZW9mKCpjb29raWUpKTsKIAljb29raWUtPnBibSA9IHBibTsKIAogCXJldHVybiBjb29raWU7CkBAIC0xNTU2LDE5ICsxNTU1LDE3IEBACiAJCX0KIAl9CiAKLQlwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfQVRPTUlDKTsKKwlwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXApIHsKIAkJcHJvbV9wcmludGYoIlNBQlJFOiBFcnJvciwga21hbGxvYyhwY2lfY29udHJvbGxlcl9pbmZvKSBmYWlsZWQuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKIAotCWlvbW11ID0ga21hbGxvYyhzaXplb2YoKmlvbW11KSwgR0ZQX0FUT01JQyk7CisJaW9tbXUgPSBremFsbG9jKHNpemVvZigqaW9tbXUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWlvbW11KSB7CiAJCXByb21fcHJpbnRmKCJTQUJSRTogRXJyb3IsIGttYWxsb2MocGNpX2lvbW11KSBmYWlsZWQuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW1lbXNldChpb21tdSwgMCwgc2l6ZW9mKCppb21tdSkpOwogCXAtPnBibV9BLmlvbW11ID0gcC0+cGJtX0IuaW9tbXUgPSBpb21tdTsKIAogCXVwYV9wb3J0aWQgPSBwcm9tX2dldGludGRlZmF1bHQocG5vZGUsICJ1cGEtcG9ydGlkIiwgMHhmZik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zY2hpem8uYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCmluZGV4IGQ4YzRlMDkuLjdmZTRkZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3NjaGl6by5jCkBAIC0yNDMsOCArMjQzLDggQEAKIC8qMHgwYyovMCwgMCwgMCwgMCwJLyogUENJIHNsb3QgMyAgSW50IEEsIEIsIEMsIEQJKi8KIC8qMHgxMCovMCwgMCwgMCwgMCwJLyogUENJIHNsb3QgNCAgSW50IEEsIEIsIEMsIEQJKi8KIC8qMHgxNCovMCwgMCwgMCwgMCwJLyogUENJIHNsb3QgNSAgSW50IEEsIEIsIEMsIEQJKi8KLS8qMHgxOCovNCwJCS8qIFNDU0kJCQkJKi8KLS8qMHgxOSovNCwJCS8qIHNlY29uZCBTQ1NJCQkJKi8KKy8qMHgxOCovNSwJCS8qIFNDU0kJCQkJKi8KKy8qMHgxOSovNSwJCS8qIHNlY29uZCBTQ1NJCQkJKi8KIC8qMHgxYSovMCwJCS8qIFVOS05PV04JCQkqLwogLyoweDFiKi8wLAkJLyogVU5LTk9XTgkJCSovCiAvKjB4MWMqLzgsCQkvKiBQYXJhbGxlbAkJCSovCkBAIC0yNTQsNyArMjU0LDcgQEAKIC8qMHgyMCovMTMsCQkvKiBBdWRpbyBSZWNvcmQJCQkqLwogLyoweDIxKi8xNCwJCS8qIEF1ZGlvIFBsYXliYWNrCQkqLwogLyoweDIyKi8xMiwJCS8qIFNlcmlhbAkJCSovCi0vKjB4MjMqLzQsCQkvKiBFQlVTIEkyQyAJCQkqLworLyoweDIzKi81LAkJLyogRUJVUyBJMkMgCQkJKi8KIC8qMHgyNCovMTAsCQkvKiBSVEMgQ2xvY2sJCQkqLwogLyoweDI1Ki8xMSwJCS8qIEZsb3BweQkJCSovCiAvKjB4MjYqLzAsCQkvKiBVTktOT1dOCQkJKi8KQEAgLTI5NiwxMSArMjk2LDExIEBACiAKIAlyZXQgPSBzY2hpem9fcGlsX3RhYmxlW2lub107CiAJaWYgKHJldCA9PSAwICYmIHBkZXYgPT0gTlVMTCkgewotCQlyZXQgPSA0OworCQlyZXQgPSA1OwogCX0gZWxzZSBpZiAocmV0ID09IDApIHsKIAkJc3dpdGNoICgocGRldi0+Y2xhc3MgPj4gMTYpICYgMHhmZikgewogCQljYXNlIFBDSV9CQVNFX0NMQVNTX1NUT1JBR0U6Ci0JCQlyZXQgPSA0OworCQkJcmV0ID0gNTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUENJX0JBU0VfQ0xBU1NfTkVUV09SSzoKQEAgLTMxOSw3ICszMTksNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXJldCA9IDQ7CisJCQlyZXQgPSA1OwogCQkJYnJlYWs7CiAJCX07CiAJfQpAQCAtMTUyNSw3ICsxNTI1LDcgQEAKIHN0YXRpYyB2b2lkIHBibV9zY2FuX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKIAkJCSBzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCiB7Ci0Jc3RydWN0IHBjaWRldl9jb29raWUgKmNvb2tpZSA9IGttYWxsb2Moc2l6ZW9mKCpjb29raWUpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqY29va2llID0ga3phbGxvYyhzaXplb2YoKmNvb2tpZSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFjb29raWUpIHsKIAkJcHJvbV9wcmludGYoIiVzOiBDcml0aWNhbCBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBwYm0tPm5hbWUpOwpAQCAtMTUzMyw3ICsxNTMzLDYgQEAKIAl9CiAKIAkvKiBBbGwgd2UgY2FyZSBhYm91dCBpcyB0aGUgUEJNLiAqLwotCW1lbXNldChjb29raWUsIDAsIHNpemVvZigqY29va2llKSk7CiAJY29va2llLT5wYm0gPSBwYm07CiAKIAlwYm0tPnBjaV9idXMgPSBwY2lfc2Nhbl9idXMocGJtLT5wY2lfZmlyc3RfYnVzbm8sCkBAIC0yMTIwLDI3ICsyMTE5LDI0IEBACiAJCX0KIAl9CiAKLQlwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8pLCBHRlBfQVRPTUlDKTsKKwlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8pLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXApIHsKIAkJcHJvbV9wcmludGYoIlNDSElaTzogRmF0YWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKIAotCWlvbW11ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9pb21tdSksIEdGUF9BVE9NSUMpOworCWlvbW11ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9pb21tdSksIEdGUF9BVE9NSUMpOwogCWlmICghaW9tbXUpIHsKIAkJcHJvbV9wcmludGYoIlNDSElaTzogRmF0YWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQotCW1lbXNldChpb21tdSwgMCwgc2l6ZW9mKCppb21tdSkpOwogCXAtPnBibV9BLmlvbW11ID0gaW9tbXU7CiAKLQlpb21tdSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9tbXUpLCBHRlBfQVRPTUlDKTsKKwlpb21tdSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9tbXUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWlvbW11KSB7CiAJCXByb21fcHJpbnRmKCJTQ0hJWk86IEZhdGFsIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLlxuIik7CiAJCXByb21faGFsdCgpOwogCX0KLQltZW1zZXQoaW9tbXUsIDAsIHNpemVvZigqaW9tbXUpKTsKIAlwLT5wYm1fQi5pb21tdSA9IGlvbW11OwogCiAJcC0+bmV4dCA9IHBjaV9jb250cm9sbGVyX3Jvb3Q7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzcyZDRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuYwpAQCAtMCwwICsxLDExNDcgQEAKKy8qIHBjaV9zdW40di5jOiBTVU40ViBzcGVjaWZpYyBQQ0kgY29udHJvbGxlciBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworI2luY2x1ZGUgPGFzbS9wYm0uaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3VwYS5oPgorI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorCisjaW5jbHVkZSAicGNpX2ltcGwuaCIKKyNpbmNsdWRlICJpb21tdV9jb21tb24uaCIKKworI2luY2x1ZGUgInBjaV9zdW40di5oIgorCisjZGVmaW5lIFBHTElTVF9ORU5UUwkoUEFHRV9TSVpFIC8gc2l6ZW9mKHU2NCkpCisKK3N0cnVjdCBwY2lfaW9tbXVfYmF0Y2ggeworCXN0cnVjdCBwY2lfZGV2CSpwZGV2OwkJLyogRGV2aWNlIG1hcHBpbmcgaXMgZm9yLgkqLworCXVuc2lnbmVkIGxvbmcJcHJvdDsJCS8qIElPTU1VIHBhZ2UgcHJvdGVjdGlvbnMJKi8KKwl1bnNpZ25lZCBsb25nCWVudHJ5OwkJLyogSW5kZXggaW50byBJT1RTQi4JCSovCisJdTY0CQkqcGdsaXN0OwkvKiBMaXN0IG9mIHBoeXNpY2FsIHBhZ2VzCSovCisJdW5zaWduZWQgbG9uZwlucGFnZXM7CQkvKiBOdW1iZXIgb2YgcGFnZXMgaW4gbGlzdC4JKi8KK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGNpX2lvbW11X2JhdGNoLCBwY2lfaW9tbXVfYmF0Y2gpOworCisvKiBJbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQuICAqLworc3RhdGljIGlubGluZSB2b2lkIHBjaV9pb21tdV9iYXRjaF9zdGFydChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGVudHJ5KQoreworCXN0cnVjdCBwY2lfaW9tbXVfYmF0Y2ggKnAgPSAmX19nZXRfY3B1X3ZhcihwY2lfaW9tbXVfYmF0Y2gpOworCisJcC0+cGRldgkJPSBwZGV2OworCXAtPnByb3QJCT0gcHJvdDsKKwlwLT5lbnRyeQk9IGVudHJ5OworCXAtPm5wYWdlcwk9IDA7Cit9CisKKy8qIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZC4gICovCitzdGF0aWMgbG9uZyBwY2lfaW9tbXVfYmF0Y2hfZmx1c2goc3RydWN0IHBjaV9pb21tdV9iYXRjaCAqcCkKK3sKKwlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwID0gcC0+cGRldi0+c3lzZGF0YTsKKwl1bnNpZ25lZCBsb25nIGRldmhhbmRsZSA9IHBjcC0+cGJtLT5kZXZoYW5kbGU7CisJdW5zaWduZWQgbG9uZyBwcm90ID0gcC0+cHJvdDsKKwl1bnNpZ25lZCBsb25nIGVudHJ5ID0gcC0+ZW50cnk7CisJdTY0ICpwZ2xpc3QgPSBwLT5wZ2xpc3Q7CisJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBwLT5ucGFnZXM7CisKKwl3aGlsZSAobnBhZ2VzICE9IDApIHsKKwkJbG9uZyBudW07CisKKwkJbnVtID0gcGNpX3N1bjR2X2lvbW11X21hcChkZXZoYW5kbGUsIEhWX1BDSV9UU0JJRCgwLCBlbnRyeSksCisJCQkJCSAgbnBhZ2VzLCBwcm90LCBfX3BhKHBnbGlzdCkpOworCQlpZiAodW5saWtlbHkobnVtIDwgMCkpIHsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKCJwY2lfaW9tbXVfYmF0Y2hfZmx1c2g6IElPTU1VIG1hcCBvZiAiCisJCQkJICAgICAgICJbJTA4bHg6JTA4bHg6JWx4OiVseDolbHhdIGZhaWxlZCB3aXRoICIKKwkJCQkgICAgICAgInN0YXR1cyAlbGRcbiIsCisJCQkJICAgICAgIGRldmhhbmRsZSwgSFZfUENJX1RTQklEKDAsIGVudHJ5KSwKKwkJCQkgICAgICAgbnBhZ2VzLCBwcm90LCBfX3BhKHBnbGlzdCksIG51bSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQllbnRyeSArPSBudW07CisJCW5wYWdlcyAtPSBudW07CisJCXBnbGlzdCArPSBudW07CisJfQorCisJcC0+ZW50cnkgPSBlbnRyeTsKKwlwLT5ucGFnZXMgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZC4gICovCitzdGF0aWMgaW5saW5lIGxvbmcgcGNpX2lvbW11X2JhdGNoX2FkZCh1NjQgcGh5c19wYWdlKQoreworCXN0cnVjdCBwY2lfaW9tbXVfYmF0Y2ggKnAgPSAmX19nZXRfY3B1X3ZhcihwY2lfaW9tbXVfYmF0Y2gpOworCisJQlVHX09OKHAtPm5wYWdlcyA+PSBQR0xJU1RfTkVOVFMpOworCisJcC0+cGdsaXN0W3AtPm5wYWdlcysrXSA9IHBoeXNfcGFnZTsKKwlpZiAocC0+bnBhZ2VzID09IFBHTElTVF9ORU5UUykKKwkJcmV0dXJuIHBjaV9pb21tdV9iYXRjaF9mbHVzaChwKTsKKworCXJldHVybiAwOworfQorCisvKiBJbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWQuICAqLworc3RhdGljIGlubGluZSBsb25nIHBjaV9pb21tdV9iYXRjaF9lbmQodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2lvbW11X2JhdGNoICpwID0gJl9fZ2V0X2NwdV92YXIocGNpX2lvbW11X2JhdGNoKTsKKworCUJVR19PTihwLT5ucGFnZXMgPj0gUEdMSVNUX05FTlRTKTsKKworCXJldHVybiBwY2lfaW9tbXVfYmF0Y2hfZmx1c2gocCk7Cit9CisKK3N0YXRpYyBsb25nIHBjaV9hcmVuYV9hbGxvYyhzdHJ1Y3QgcGNpX2lvbW11X2FyZW5hICphcmVuYSwgdW5zaWduZWQgbG9uZyBucGFnZXMpCit7CisJdW5zaWduZWQgbG9uZyBuLCBpLCBzdGFydCwgZW5kLCBsaW1pdDsKKwlpbnQgcGFzczsKKworCWxpbWl0ID0gYXJlbmEtPmxpbWl0OworCXN0YXJ0ID0gYXJlbmEtPmhpbnQ7CisJcGFzcyA9IDA7CisKK2FnYWluOgorCW4gPSBmaW5kX25leHRfemVyb19iaXQoYXJlbmEtPm1hcCwgbGltaXQsIHN0YXJ0KTsKKwllbmQgPSBuICsgbnBhZ2VzOworCWlmICh1bmxpa2VseShlbmQgPj0gbGltaXQpKSB7CisJCWlmIChsaWtlbHkocGFzcyA8IDEpKSB7CisJCQlsaW1pdCA9IHN0YXJ0OworCQkJc3RhcnQgPSAwOworCQkJcGFzcysrOworCQkJZ290byBhZ2FpbjsKKwkJfSBlbHNlIHsKKwkJCS8qIFNjYW5uZWQgdGhlIHdob2xlIHRoaW5nLCBnaXZlIHVwLiAqLworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJZm9yIChpID0gbjsgaSA8IGVuZDsgaSsrKSB7CisJCWlmICh0ZXN0X2JpdChpLCBhcmVuYS0+bWFwKSkgeworCQkJc3RhcnQgPSBpICsgMTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwl9CisKKwlmb3IgKGkgPSBuOyBpIDwgZW5kOyBpKyspCisJCV9fc2V0X2JpdChpLCBhcmVuYS0+bWFwKTsKKworCWFyZW5hLT5oaW50ID0gZW5kOworCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9hcmVuYV9mcmVlKHN0cnVjdCBwY2lfaW9tbXVfYXJlbmEgKmFyZW5hLCB1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IGJhc2U7IGkgPCAoYmFzZSArIG5wYWdlcyk7IGkrKykKKwkJX19jbGVhcl9iaXQoaSwgYXJlbmEtPm1hcCk7Cit9CisKK3N0YXRpYyB2b2lkICpwY2lfNHZfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9hZGRycCkKK3sKKwlzdHJ1Y3QgcGNpZGV2X2Nvb2tpZSAqcGNwOworCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11OworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9yZGVyLCBmaXJzdF9wYWdlLCBucGFnZXMsIG47CisJdm9pZCAqcmV0OworCWxvbmcgZW50cnk7CisKKwlzaXplID0gSU9fUEFHRV9BTElHTihzaXplKTsKKwlvcmRlciA9IGdldF9vcmRlcihzaXplKTsKKwlpZiAodW5saWtlbHkob3JkZXIgPj0gTUFYX09SREVSKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlucGFnZXMgPSBzaXplID4+IElPX1BBR0VfU0hJRlQ7CisKKwlmaXJzdF9wYWdlID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDLCBvcmRlcik7CisJaWYgKHVubGlrZWx5KGZpcnN0X3BhZ2UgPT0gMFVMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoKGNoYXIgKilmaXJzdF9wYWdlLCAwLCBQQUdFX1NJWkUgPDwgb3JkZXIpOworCisJcGNwID0gcGRldi0+c3lzZGF0YTsKKwlpb21tdSA9IHBjcC0+cGJtLT5pb21tdTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCWVudHJ5ID0gcGNpX2FyZW5hX2FsbG9jKCZpb21tdS0+YXJlbmEsIG5wYWdlcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKworCWlmICh1bmxpa2VseShlbnRyeSA8IDBMKSkKKwkJZ290byBhcmVuYV9hbGxvY19mYWlsOworCisJKmRtYV9hZGRycCA9IChpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSArCisJCSAgICAgIChlbnRyeSA8PCBJT19QQUdFX1NISUZUKSk7CisJcmV0ID0gKHZvaWQgKikgZmlyc3RfcGFnZTsKKwlmaXJzdF9wYWdlID0gX19wYShmaXJzdF9wYWdlKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXBjaV9pb21tdV9iYXRjaF9zdGFydChwZGV2LAorCQkJICAgICAgKEhWX1BDSV9NQVBfQVRUUl9SRUFEIHwKKwkJCSAgICAgICBIVl9QQ0lfTUFQX0FUVFJfV1JJVEUpLAorCQkJICAgICAgZW50cnkpOworCisJZm9yIChuID0gMDsgbiA8IG5wYWdlczsgbisrKSB7CisJCWxvbmcgZXJyID0gcGNpX2lvbW11X2JhdGNoX2FkZChmaXJzdF9wYWdlICsgKG4gKiBQQUdFX1NJWkUpKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDBMKSkKKwkJCWdvdG8gaW9tbXVfbWFwX2ZhaWw7CisJfQorCisJaWYgKHVubGlrZWx5KHBjaV9pb21tdV9iYXRjaF9lbmQoKSA8IDBMKSkKKwkJZ290byBpb21tdV9tYXBfZmFpbDsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXQ7CisKK2lvbW11X21hcF9mYWlsOgorCS8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkLiAgKi8KKwlzcGluX2xvY2soJmlvbW11LT5sb2NrKTsKKwlwY2lfYXJlbmFfZnJlZSgmaW9tbXUtPmFyZW5hLCBlbnRyeSwgbnBhZ2VzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCithcmVuYV9hbGxvY19mYWlsOgorCWZyZWVfcGFnZXMoZmlyc3RfcGFnZSwgb3JkZXIpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwY2lfNHZfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1LCBkbWFfYWRkcl90IGR2bWEpCit7CisJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcDsKKwlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBvcmRlciwgbnBhZ2VzLCBlbnRyeTsKKwl1MzIgZGV2aGFuZGxlOworCisJbnBhZ2VzID0gSU9fUEFHRV9BTElHTihzaXplKSA+PiBJT19QQUdFX1NISUZUOworCXBjcCA9IHBkZXYtPnN5c2RhdGE7CisJaW9tbXUgPSBwY3AtPnBibS0+aW9tbXU7CisJZGV2aGFuZGxlID0gcGNwLT5wYm0tPmRldmhhbmRsZTsKKwllbnRyeSA9ICgoZHZtYSAtIGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlKSA+PiBJT19QQUdFX1NISUZUKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCisJcGNpX2FyZW5hX2ZyZWUoJmlvbW11LT5hcmVuYSwgZW50cnksIG5wYWdlcyk7CisKKwlkbyB7CisJCXVuc2lnbmVkIGxvbmcgbnVtOworCisJCW51bSA9IHBjaV9zdW40dl9pb21tdV9kZW1hcChkZXZoYW5kbGUsIEhWX1BDSV9UU0JJRCgwLCBlbnRyeSksCisJCQkJCSAgICBucGFnZXMpOworCQllbnRyeSArPSBudW07CisJCW5wYWdlcyAtPSBudW07CisJfSB3aGlsZSAobnBhZ2VzICE9IDApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKworCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCWlmIChvcmRlciA8IDEwKQorCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNwdSwgb3JkZXIpOworfQorCitzdGF0aWMgZG1hX2FkZHJfdCBwY2lfNHZfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc3osIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcDsKKwlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBucGFnZXMsIG9hZGRyOworCXVuc2lnbmVkIGxvbmcgaSwgYmFzZV9wYWRkcjsKKwl1MzIgYnVzX2FkZHIsIHJldDsKKwl1bnNpZ25lZCBsb25nIHByb3Q7CisJbG9uZyBlbnRyeTsKKworCXBjcCA9IHBkZXYtPnN5c2RhdGE7CisJaW9tbXUgPSBwY3AtPnBibS0+aW9tbXU7CisKKwlpZiAodW5saWtlbHkoZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSkpCisJCWdvdG8gYmFkOworCisJb2FkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7CisJbnBhZ2VzID0gSU9fUEFHRV9BTElHTihvYWRkciArIHN6KSAtIChvYWRkciAmIElPX1BBR0VfTUFTSyk7CisJbnBhZ2VzID4+PSBJT19QQUdFX1NISUZUOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisJZW50cnkgPSBwY2lfYXJlbmFfYWxsb2MoJmlvbW11LT5hcmVuYSwgbnBhZ2VzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KGVudHJ5IDwgMEwpKQorCQlnb3RvIGJhZDsKKworCWJ1c19hZGRyID0gKGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlICsKKwkJICAgIChlbnRyeSA8PCBJT19QQUdFX1NISUZUKSk7CisJcmV0ID0gYnVzX2FkZHIgfCAob2FkZHIgJiB+SU9fUEFHRV9NQVNLKTsKKwliYXNlX3BhZGRyID0gX19wYShvYWRkciAmIElPX1BBR0VfTUFTSyk7CisJcHJvdCA9IEhWX1BDSV9NQVBfQVRUUl9SRUFEOworCWlmIChkaXJlY3Rpb24gIT0gUENJX0RNQV9UT0RFVklDRSkKKwkJcHJvdCB8PSBIVl9QQ0lfTUFQX0FUVFJfV1JJVEU7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlwY2lfaW9tbXVfYmF0Y2hfc3RhcnQocGRldiwgcHJvdCwgZW50cnkpOworCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrLCBiYXNlX3BhZGRyICs9IElPX1BBR0VfU0laRSkgeworCQlsb25nIGVyciA9IHBjaV9pb21tdV9iYXRjaF9hZGQoYmFzZV9wYWRkcik7CisJCWlmICh1bmxpa2VseShlcnIgPCAwTCkpCisJCQlnb3RvIGlvbW11X21hcF9mYWlsOworCX0KKwlpZiAodW5saWtlbHkocGNpX2lvbW11X2JhdGNoX2VuZCgpIDwgMEwpKQorCQlnb3RvIGlvbW11X21hcF9mYWlsOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldDsKKworYmFkOgorCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCVdBUk5fT04oMSk7CisJcmV0dXJuIFBDSV9ETUFfRVJST1JfQ09ERTsKKworaW9tbXVfbWFwX2ZhaWw6CisJLyogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuICAqLworCXNwaW5fbG9jaygmaW9tbXUtPmxvY2spOworCXBjaV9hcmVuYV9mcmVlKCZpb21tdS0+YXJlbmEsIGVudHJ5LCBucGFnZXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gUENJX0RNQV9FUlJPUl9DT0RFOworfQorCitzdGF0aWMgdm9pZCBwY2lfNHZfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLCBzaXplX3Qgc3osIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcDsKKwlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBucGFnZXM7CisJbG9uZyBlbnRyeTsKKwl1MzIgZGV2aGFuZGxlOworCisJaWYgKHVubGlrZWx5KGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJcGNwID0gcGRldi0+c3lzZGF0YTsKKwlpb21tdSA9IHBjcC0+cGJtLT5pb21tdTsKKwlkZXZoYW5kbGUgPSBwY3AtPnBibS0+ZGV2aGFuZGxlOworCisJbnBhZ2VzID0gSU9fUEFHRV9BTElHTihidXNfYWRkciArIHN6KSAtIChidXNfYWRkciAmIElPX1BBR0VfTUFTSyk7CisJbnBhZ2VzID4+PSBJT19QQUdFX1NISUZUOworCWJ1c19hZGRyICY9IElPX1BBR0VfTUFTSzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCisJZW50cnkgPSAoYnVzX2FkZHIgLSBpb21tdS0+cGFnZV90YWJsZV9tYXBfYmFzZSkgPj4gSU9fUEFHRV9TSElGVDsKKwlwY2lfYXJlbmFfZnJlZSgmaW9tbXUtPmFyZW5hLCBlbnRyeSwgbnBhZ2VzKTsKKworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBudW07CisKKwkJbnVtID0gcGNpX3N1bjR2X2lvbW11X2RlbWFwKGRldmhhbmRsZSwgSFZfUENJX1RTQklEKDAsIGVudHJ5KSwKKwkJCQkJICAgIG5wYWdlcyk7CisJCWVudHJ5ICs9IG51bTsKKwkJbnBhZ2VzIC09IG51bTsKKwl9IHdoaWxlIChucGFnZXMgIT0gMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworfQorCisjZGVmaW5lIFNHX0VOVF9QSFlTX0FERFJFU1MoU0cpCVwKKwkoX19wYShwYWdlX2FkZHJlc3MoKFNHKS0+cGFnZSkpICsgKFNHKS0+b2Zmc2V0KQorCitzdGF0aWMgaW5saW5lIGxvbmcgZmlsbF9zZyhsb25nIGVudHJ5LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICBpbnQgbnVzZWQsIGludCBuZWxlbXMsIHVuc2lnbmVkIGxvbmcgcHJvdCkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRtYV9zZyA9IHNnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZW5kID0gc2cgKyBuZWxlbXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXBjaV9pb21tdV9iYXRjaF9zdGFydChwZGV2LCBwcm90LCBlbnRyeSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVzZWQ7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHB0ZXZhbCA9IH4wVUw7CisJCXUzMiBkbWFfbnBhZ2VzOworCisJCWRtYV9ucGFnZXMgPSAoKGRtYV9zZy0+ZG1hX2FkZHJlc3MgJiAoSU9fUEFHRV9TSVpFIC0gMVVMKSkgKworCQkJICAgICAgZG1hX3NnLT5kbWFfbGVuZ3RoICsKKwkJCSAgICAgICgoSU9fUEFHRV9TSVpFIC0gMVVMKSkpID4+IElPX1BBR0VfU0hJRlQ7CisJCWRvIHsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCQkJc2lnbmVkIGludCBsZW47CisKKwkJCS8qIElmIHdlIGFyZSBoZXJlLCB3ZSBrbm93IHdlIGhhdmUgYXQgbGVhc3Qgb25lCisJCQkgKiBtb3JlIHBhZ2UgdG8gbWFwLiAgU28gd2FsayBmb3J3YXJkIHVudGlsIHdlCisJCQkgKiBoaXQgYSBwYWdlIGNyb3NzaW5nLCBhbmQgYmVnaW4gY3JlYXRpbmcgbmV3CisJCQkgKiBtYXBwaW5ncyBmcm9tIHRoYXQgc3BvdC4KKwkJCSAqLworCQkJZm9yICg7OykgeworCQkJCXVuc2lnbmVkIGxvbmcgdG1wOworCisJCQkJdG1wID0gU0dfRU5UX1BIWVNfQUREUkVTUyhzZyk7CisJCQkJbGVuID0gc2ctPmxlbmd0aDsKKwkJCQlpZiAoKCh0bXAgXiBwdGV2YWwpID4+IElPX1BBR0VfU0hJRlQpICE9IDBVTCkgeworCQkJCQlwdGV2YWwgPSB0bXAgJiBJT19QQUdFX01BU0s7CisJCQkJCW9mZnNldCA9IHRtcCAmIChJT19QQUdFX1NJWkUgLSAxVUwpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKCgodG1wIF4gKHRtcCArIGxlbiAtIDFVTCkpID4+IElPX1BBR0VfU0hJRlQpICE9IDBVTCkgeworCQkJCQlwdGV2YWwgPSAodG1wICsgSU9fUEFHRV9TSVpFKSAmIElPX1BBR0VfTUFTSzsKKwkJCQkJb2Zmc2V0ID0gMFVMOworCQkJCQlsZW4gLT0gKElPX1BBR0VfU0laRSAtICh0bXAgJiAoSU9fUEFHRV9TSVpFIC0gMVVMKSkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2crKzsKKwkJCX0KKworCQkJcHRldmFsID0gKHB0ZXZhbCAmIElPUFRFX1BBR0UpOworCQkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCQlsb25nIGVycjsKKworCQkJCWVyciA9IHBjaV9pb21tdV9iYXRjaF9hZGQocHRldmFsKTsKKwkJCQlpZiAodW5saWtlbHkoZXJyIDwgMEwpKQorCQkJCQlnb3RvIGlvbW11X21hcF9mYWlsZWQ7CisKKwkJCQlwdGV2YWwgKz0gSU9fUEFHRV9TSVpFOworCQkJCWxlbiAtPSAoSU9fUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKwkJCQlvZmZzZXQgPSAwOworCQkJCWRtYV9ucGFnZXMtLTsKKwkJCX0KKworCQkJcHRldmFsID0gKHB0ZXZhbCAmIElPUFRFX1BBR0UpICsgbGVuOworCQkJc2crKzsKKworCQkJLyogU2tpcCBvdmVyIGFueSB0YWlsIG1hcHBpbmdzIHdlJ3ZlIGZ1bGx5IG1hcHBlZCwKKwkJCSAqIGFkanVzdGluZyBwdGV2YWwgYWxvbmcgdGhlIHdheS4gIFN0b3Agd2hlbiB3ZQorCQkJICogZGV0ZWN0IGEgcGFnZSBjcm9zc2luZyBldmVudC4KKwkJCSAqLworCQkJd2hpbGUgKHNnIDwgc2dfZW5kICYmCisJCQkgICAgICAgKHB0ZXZhbCA8PCAoNjQgLSBJT19QQUdFX1NISUZUKSkgIT0gMFVMICYmCisJCQkgICAgICAgKHB0ZXZhbCA9PSBTR19FTlRfUEhZU19BRERSRVNTKHNnKSkgJiYKKwkJCSAgICAgICAoKHB0ZXZhbCBeCisJCQkJIChTR19FTlRfUEhZU19BRERSRVNTKHNnKSArIHNnLT5sZW5ndGggLSAxVUwpKSA+PiBJT19QQUdFX1NISUZUKSA9PSAwVUwpIHsKKwkJCQlwdGV2YWwgKz0gc2ctPmxlbmd0aDsKKwkJCQlzZysrOworCQkJfQorCQkJaWYgKChwdGV2YWwgPDwgKDY0IC0gSU9fUEFHRV9TSElGVCkpID09IDBVTCkKKwkJCQlwdGV2YWwgPSB+MFVMOworCQl9IHdoaWxlIChkbWFfbnBhZ2VzICE9IDApOworCQlkbWFfc2crKzsKKwl9CisKKwlpZiAodW5saWtlbHkocGNpX2lvbW11X2JhdGNoX2VuZCgpIDwgMEwpKQorCQlnb3RvIGlvbW11X21hcF9mYWlsZWQ7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7CisKK2lvbW11X21hcF9mYWlsZWQ6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAtMUw7Cit9CisKK3N0YXRpYyBpbnQgcGNpXzR2X21hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcDsKKwlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBucGFnZXMsIHByb3Q7CisJdTMyIGRtYV9iYXNlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2d0bXA7CisJbG9uZyBlbnRyeSwgZXJyOworCWludCB1c2VkOworCisJLyogRmFzdCBwYXRoIHNpbmdsZSBlbnRyeSBzY2F0dGVybGlzdHMuICovCisJaWYgKG5lbGVtcyA9PSAxKSB7CisJCXNnbGlzdC0+ZG1hX2FkZHJlc3MgPQorCQkJcGNpXzR2X21hcF9zaW5nbGUocGRldiwKKwkJCQkJICAocGFnZV9hZGRyZXNzKHNnbGlzdC0+cGFnZSkgKyBzZ2xpc3QtPm9mZnNldCksCisJCQkJCSAgc2dsaXN0LT5sZW5ndGgsIGRpcmVjdGlvbik7CisJCWlmICh1bmxpa2VseShzZ2xpc3QtPmRtYV9hZGRyZXNzID09IFBDSV9ETUFfRVJST1JfQ09ERSkpCisJCQlyZXR1cm4gMDsKKwkJc2dsaXN0LT5kbWFfbGVuZ3RoID0gc2dsaXN0LT5sZW5ndGg7CisJCXJldHVybiAxOworCX0KKworCXBjcCA9IHBkZXYtPnN5c2RhdGE7CisJaW9tbXUgPSBwY3AtPnBibS0+aW9tbXU7CisJCisJaWYgKHVubGlrZWx5KGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpKQorCQlnb3RvIGJhZDsKKworCS8qIFN0ZXAgMTogUHJlcGFyZSBzY2F0dGVyIGxpc3QuICovCisJbnBhZ2VzID0gcHJlcGFyZV9zZyhzZ2xpc3QsIG5lbGVtcyk7CisKKwkvKiBTdGVwIDI6IEFsbG9jYXRlIGEgY2x1c3RlciBhbmQgY29udGV4dCwgaWYgbmVjZXNzYXJ5LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCWVudHJ5ID0gcGNpX2FyZW5hX2FsbG9jKCZpb21tdS0+YXJlbmEsIG5wYWdlcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKworCWlmICh1bmxpa2VseShlbnRyeSA8IDBMKSkKKwkJZ290byBiYWQ7CisKKwlkbWFfYmFzZSA9IGlvbW11LT5wYWdlX3RhYmxlX21hcF9iYXNlICsKKwkJKGVudHJ5IDw8IElPX1BBR0VfU0hJRlQpOworCisJLyogU3RlcCAzOiBOb3JtYWxpemUgRE1BIGFkZHJlc3Nlcy4gKi8KKwl1c2VkID0gbmVsZW1zOworCisJc2d0bXAgPSBzZ2xpc3Q7CisJd2hpbGUgKHVzZWQgJiYgc2d0bXAtPmRtYV9sZW5ndGgpIHsKKwkJc2d0bXAtPmRtYV9hZGRyZXNzICs9IGRtYV9iYXNlOworCQlzZ3RtcCsrOworCQl1c2VkLS07CisJfQorCXVzZWQgPSBuZWxlbXMgLSB1c2VkOworCisJLyogU3RlcCA0OiBDcmVhdGUgdGhlIG1hcHBpbmdzLiAqLworCXByb3QgPSBIVl9QQ0lfTUFQX0FUVFJfUkVBRDsKKwlpZiAoZGlyZWN0aW9uICE9IFBDSV9ETUFfVE9ERVZJQ0UpCisJCXByb3QgfD0gSFZfUENJX01BUF9BVFRSX1dSSVRFOworCisJZXJyID0gZmlsbF9zZyhlbnRyeSwgcGRldiwgc2dsaXN0LCB1c2VkLCBuZWxlbXMsIHByb3QpOworCWlmICh1bmxpa2VseShlcnIgPCAwTCkpCisJCWdvdG8gaW9tbXVfbWFwX2ZhaWxlZDsKKworCXJldHVybiB1c2VkOworCitiYWQ6CisJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJV0FSTl9PTigxKTsKKwlyZXR1cm4gMDsKKworaW9tbXVfbWFwX2ZhaWxlZDoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKwlwY2lfYXJlbmFfZnJlZSgmaW9tbXUtPmFyZW5hLCBlbnRyeSwgbnBhZ2VzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV80dl91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcDsKKwlzdHJ1Y3QgcGNpX2lvbW11ICppb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBpLCBucGFnZXM7CisJbG9uZyBlbnRyeTsKKwl1MzIgZGV2aGFuZGxlLCBidXNfYWRkcjsKKworCWlmICh1bmxpa2VseShkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKSkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJV0FSTl9PTigxKTsKKwl9CisKKwlwY3AgPSBwZGV2LT5zeXNkYXRhOworCWlvbW11ID0gcGNwLT5wYm0tPmlvbW11OworCWRldmhhbmRsZSA9IHBjcC0+cGJtLT5kZXZoYW5kbGU7CisJCisJYnVzX2FkZHIgPSBzZ2xpc3QtPmRtYV9hZGRyZXNzICYgSU9fUEFHRV9NQVNLOworCisJZm9yIChpID0gMTsgaSA8IG5lbGVtczsgaSsrKQorCQlpZiAoc2dsaXN0W2ldLmRtYV9sZW5ndGggPT0gMCkKKwkJCWJyZWFrOworCWktLTsKKwlucGFnZXMgPSAoSU9fUEFHRV9BTElHTihzZ2xpc3RbaV0uZG1hX2FkZHJlc3MgKyBzZ2xpc3RbaV0uZG1hX2xlbmd0aCkgLQorCQkgIGJ1c19hZGRyKSA+PiBJT19QQUdFX1NISUZUOworCisJZW50cnkgPSAoKGJ1c19hZGRyIC0gaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UpID4+IElPX1BBR0VfU0hJRlQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisKKwlwY2lfYXJlbmFfZnJlZSgmaW9tbXUtPmFyZW5hLCBlbnRyeSwgbnBhZ2VzKTsKKworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBudW07CisKKwkJbnVtID0gcGNpX3N1bjR2X2lvbW11X2RlbWFwKGRldmhhbmRsZSwgSFZfUENJX1RTQklEKDAsIGVudHJ5KSwKKwkJCQkJICAgIG5wYWdlcyk7CisJCWVudHJ5ICs9IG51bTsKKwkJbnBhZ2VzIC09IG51bTsKKwl9IHdoaWxlIChucGFnZXMgIT0gMCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBwY2lfNHZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYV9hZGRyX3QgYnVzX2FkZHIsIHNpemVfdCBzeiwgaW50IGRpcmVjdGlvbikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvLi4uICovCit9CisKK3N0YXRpYyB2b2lkIHBjaV80dl9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKKwkvKiBOb3RoaW5nIHRvIGRvLi4uICovCit9CisKK3N0cnVjdCBwY2lfaW9tbXVfb3BzIHBjaV9zdW40dl9pb21tdV9vcHMgPSB7CisJLmFsbG9jX2NvbnNpc3RlbnQJCT0gcGNpXzR2X2FsbG9jX2NvbnNpc3RlbnQsCisJLmZyZWVfY29uc2lzdGVudAkJPSBwY2lfNHZfZnJlZV9jb25zaXN0ZW50LAorCS5tYXBfc2luZ2xlCQkJPSBwY2lfNHZfbWFwX3NpbmdsZSwKKwkudW5tYXBfc2luZ2xlCQkJPSBwY2lfNHZfdW5tYXBfc2luZ2xlLAorCS5tYXBfc2cJCQkJPSBwY2lfNHZfbWFwX3NnLAorCS51bm1hcF9zZwkJCT0gcGNpXzR2X3VubWFwX3NnLAorCS5kbWFfc3luY19zaW5nbGVfZm9yX2NwdQk9IHBjaV80dl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSwKKwkuZG1hX3N5bmNfc2dfZm9yX2NwdQkJPSBwY2lfNHZfZG1hX3N5bmNfc2dfZm9yX2NwdSwKK307CisKKy8qIFNVTjRWIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFjY2Vzc29ycy4gKi8KKworc3RhdGljIGlubGluZSBpbnQgcGNpX3N1bjR2X291dF9vZl9yYW5nZShzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sIHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZpY2UsIHVuc2lnbmVkIGludCBmdW5jKQoreworCWlmIChidXMgPT0gcGJtLT5wY2lfZmlyc3RfYnVzbm8pIHsKKwkJaWYgKGRldmljZSA9PSAwICYmIGZ1bmMgPT0gMCkKKwkJCXJldHVybiAwOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoYnVzIDwgcGJtLT5wY2lfZmlyc3RfYnVzbm8gfHwKKwkgICAgYnVzID4gcGJtLT5wY2lfbGFzdF9idXNubykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX3N1bjR2X3JlYWRfcGNpX2NmZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzX2RldiwgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0gPSBidXNfZGV2LT5zeXNkYXRhOworCXUzMiBkZXZoYW5kbGUgPSBwYm0tPmRldmhhbmRsZTsKKwl1bnNpZ25lZCBpbnQgYnVzID0gYnVzX2Rldi0+bnVtYmVyOworCXVuc2lnbmVkIGludCBkZXZpY2UgPSBQQ0lfU0xPVChkZXZmbik7CisJdW5zaWduZWQgaW50IGZ1bmMgPSBQQ0lfRlVOQyhkZXZmbik7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlpZiAocGNpX3N1bjR2X291dF9vZl9yYW5nZShwYm0sIGJ1cywgZGV2aWNlLCBmdW5jKSkgeworCQlyZXQgPSB+MFVMOworCX0gZWxzZSB7CisJCXJldCA9IHBjaV9zdW40dl9jb25maWdfZ2V0KGRldmhhbmRsZSwKKwkJCQlIVl9QQ0lfREVWSUNFX0JVSUxEKGJ1cywgZGV2aWNlLCBmdW5jKSwKKwkJCQl3aGVyZSwgc2l6ZSk7CisjaWYgMAorCQlwcmludGsoInJjZmc6IFsleDoleDoleDolZF09WyVseF1cbiIsCisJCSAgICAgICBkZXZoYW5kbGUsIEhWX1BDSV9ERVZJQ0VfQlVJTEQoYnVzLCBkZXZpY2UsIGZ1bmMpLAorCQkgICAgICAgd2hlcmUsIHNpemUsIHJldCk7CisjZW5kaWYKKwl9CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQkqdmFsdWUgPSByZXQgJiAweGZmOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWx1ZSA9IHJldCAmIDB4ZmZmZjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQkqdmFsdWUgPSByZXQgJiAweGZmZmZmZmZmOworCQlicmVhazsKKwl9OworCisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IHBjaV9zdW40dl93cml0ZV9wY2lfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXNfZGV2LCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IGJ1c19kZXYtPnN5c2RhdGE7CisJdTMyIGRldmhhbmRsZSA9IHBibS0+ZGV2aGFuZGxlOworCXVuc2lnbmVkIGludCBidXMgPSBidXNfZGV2LT5udW1iZXI7CisJdW5zaWduZWQgaW50IGRldmljZSA9IFBDSV9TTE9UKGRldmZuKTsKKwl1bnNpZ25lZCBpbnQgZnVuYyA9IFBDSV9GVU5DKGRldmZuKTsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCWlmIChwY2lfc3VuNHZfb3V0X29mX3JhbmdlKHBibSwgYnVzLCBkZXZpY2UsIGZ1bmMpKSB7CisJCS8qIERvIG5vdGhpbmcuICovCisJfSBlbHNlIHsKKwkJcmV0ID0gcGNpX3N1bjR2X2NvbmZpZ19wdXQoZGV2aGFuZGxlLAorCQkJCUhWX1BDSV9ERVZJQ0VfQlVJTEQoYnVzLCBkZXZpY2UsIGZ1bmMpLAorCQkJCXdoZXJlLCBzaXplLCB2YWx1ZSk7CisjaWYgMAorCQlwcmludGsoIndjZmc6IFsleDoleDoleDolZF0gdlsleF0gPT0gWyVseF1cbiIsCisJCSAgICAgICBkZXZoYW5kbGUsIEhWX1BDSV9ERVZJQ0VfQlVJTEQoYnVzLCBkZXZpY2UsIGZ1bmMpLAorCQkgICAgICAgd2hlcmUsIHNpemUsIHZhbHVlLCByZXQpOworI2VuZGlmCisJfQorCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBwY2lfc3VuNHZfb3BzID0geworCS5yZWFkID0JCXBjaV9zdW40dl9yZWFkX3BjaV9jZmcsCisJLndyaXRlID0JcGNpX3N1bjR2X3dyaXRlX3BjaV9jZmcsCit9OworCisKK3N0YXRpYyB2b2lkIHBibV9zY2FuX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwKKwkJCSBzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0pCit7CisJc3RydWN0IHBjaWRldl9jb29raWUgKmNvb2tpZSA9IGttYWxsb2Moc2l6ZW9mKCpjb29raWUpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY29va2llKSB7CisJCXByb21fcHJpbnRmKCIlczogQ3JpdGljYWwgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgcGJtLT5uYW1lKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJLyogQWxsIHdlIGNhcmUgYWJvdXQgaXMgdGhlIFBCTS4gKi8KKwltZW1zZXQoY29va2llLCAwLCBzaXplb2YoKmNvb2tpZSkpOworCWNvb2tpZS0+cGJtID0gcGJtOworCisJcGJtLT5wY2lfYnVzID0gcGNpX3NjYW5fYnVzKHBibS0+cGNpX2ZpcnN0X2J1c25vLCBwLT5wY2lfb3BzLCBwYm0pOworI2lmIDAKKwlwY2lfZml4dXBfaG9zdF9icmlkZ2Vfc2VsZihwYm0tPnBjaV9idXMpOworCXBibS0+cGNpX2J1cy0+c2VsZi0+c3lzZGF0YSA9IGNvb2tpZTsKKyNlbmRpZgorCXBjaV9maWxsX2luX3BibV9jb29raWVzKHBibS0+cGNpX2J1cywgcGJtLAorCQkJCXBibS0+cHJvbV9ub2RlKTsKKwlwY2lfcmVjb3JkX2Fzc2lnbm1lbnRzKHBibSwgcGJtLT5wY2lfYnVzKTsKKwlwY2lfYXNzaWduX3VuYXNzaWduZWQocGJtLCBwYm0tPnBjaV9idXMpOworCXBjaV9maXh1cF9pcnEocGJtLCBwYm0tPnBjaV9idXMpOworCXBjaV9kZXRlcm1pbmVfNjZtaHpfZGlzcG9zaXRpb24ocGJtLCBwYm0tPnBjaV9idXMpOworCXBjaV9zZXR1cF9idXNtYXN0ZXJpbmcocGJtLCBwYm0tPnBjaV9idXMpOworfQorCitzdGF0aWMgdm9pZCBwY2lfc3VuNHZfc2Nhbl9idXMoc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnApCit7CisJaWYgKHAtPnBibV9BLnByb21fbm9kZSkgeworCQlwLT5wYm1fQS5pc182Nm1oel9jYXBhYmxlID0KKwkJCXByb21fZ2V0Ym9vbChwLT5wYm1fQS5wcm9tX25vZGUsICI2Nm1oei1jYXBhYmxlIik7CisKKwkJcGJtX3NjYW5fYnVzKHAsICZwLT5wYm1fQSk7CisJfQorCWlmIChwLT5wYm1fQi5wcm9tX25vZGUpIHsKKwkJcC0+cGJtX0IuaXNfNjZtaHpfY2FwYWJsZSA9CisJCQlwcm9tX2dldGJvb2wocC0+cGJtX0IucHJvbV9ub2RlLCAiNjZtaHotY2FwYWJsZSIpOworCisJCXBibV9zY2FuX2J1cyhwLCAmcC0+cGJtX0IpOworCX0KKworCS8qIFhYWCByZWdpc3RlciBlcnJvciBpbnRlcnJ1cHQgaGFuZGxlcnMgWFhYICovCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNpX3N1bjR2X2lycV9idWlsZChzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm0sCisJCQkJCXN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQl1bnNpZ25lZCBpbnQgZGV2aW5vKQoreworCXUzMiBkZXZoYW5kbGUgPSBwYm0tPmRldmhhbmRsZTsKKwlpbnQgcGlsOworCisJcGlsID0gNTsKKwlpZiAocGRldikgeworCQlzd2l0Y2ggKChwZGV2LT5jbGFzcyA+PiAxNikgJiAweGZmKSB7CisJCWNhc2UgUENJX0JBU0VfQ0xBU1NfU1RPUkFHRToKKwkJCXBpbCA9IDU7CisJCQlicmVhazsKKworCQljYXNlIFBDSV9CQVNFX0NMQVNTX05FVFdPUks6CisJCQlwaWwgPSA2OworCQkJYnJlYWs7CisKKwkJY2FzZSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZOgorCQkJcGlsID0gOTsKKwkJCWJyZWFrOworCisJCWNhc2UgUENJX0JBU0VfQ0xBU1NfTVVMVElNRURJQToKKwkJY2FzZSBQQ0lfQkFTRV9DTEFTU19NRU1PUlk6CisJCWNhc2UgUENJX0JBU0VfQ0xBU1NfQlJJREdFOgorCQljYXNlIFBDSV9CQVNFX0NMQVNTX1NFUklBTDoKKwkJCXBpbCA9IDEwOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXBpbCA9IDU7CisJCQlicmVhazsKKwkJfTsKKwl9CisJQlVHX09OKFBJTF9SRVNFUlZFRChwaWwpKTsKKworCXJldHVybiBzdW40dl9idWlsZF9pcnEoZGV2aGFuZGxlLCBkZXZpbm8sIHBpbCwgSUJGX1BDSSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9zdW40dl9iYXNlX2FkZHJlc3NfdXBkYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcmVzb3VyY2UpCit7CisJc3RydWN0IHBjaWRldl9jb29raWUgKnBjcCA9IHBkZXYtPnN5c2RhdGE7CisJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtID0gcGNwLT5wYm07CisJc3RydWN0IHJlc291cmNlICpyZXMsICpyb290OworCXUzMiByZWc7CisJaW50IHdoZXJlLCBzaXplLCBpc182NGJpdDsKKworCXJlcyA9ICZwZGV2LT5yZXNvdXJjZVtyZXNvdXJjZV07CisJaWYgKHJlc291cmNlIDwgNikgeworCQl3aGVyZSA9IFBDSV9CQVNFX0FERFJFU1NfMCArIChyZXNvdXJjZSAqIDQpOworCX0gZWxzZSBpZiAocmVzb3VyY2UgPT0gUENJX1JPTV9SRVNPVVJDRSkgeworCQl3aGVyZSA9IHBkZXYtPnJvbV9iYXNlX3JlZzsKKwl9IGVsc2UgeworCQkvKiBTb21lYm9keSBtaWdodCBoYXZlIGFza2VkIGFsbG9jYXRpb24gb2YgYSBub24tc3RhbmRhcmQgcmVzb3VyY2UgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIFhYWCA2NC1iaXQgTUVNIGhhbmRsaW5nIGlzIG5vdCAlMTAwIGNvcnJlY3QuLi4gWFhYICovCisJaXNfNjRiaXQgPSAwOworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJcm9vdCA9ICZwYm0tPmlvX3NwYWNlOworCWVsc2UgeworCQlyb290ID0gJnBibS0+bWVtX3NwYWNlOworCQlpZiAoKHJlcy0+ZmxhZ3MgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFX01BU0spCisJCSAgICA9PSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0KQorCQkJaXNfNjRiaXQgPSAxOworCX0KKworCXNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQ7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHdoZXJlLCAmcmVnKTsKKwlyZWcgPSAoKHJlZyAmIHNpemUpIHwKKwkgICAgICAgKCgodTMyKShyZXMtPnN0YXJ0IC0gcm9vdC0+c3RhcnQpKSAmIH5zaXplKSk7CisJaWYgKHJlc291cmNlID09IFBDSV9ST01fUkVTT1VSQ0UpIHsKKwkJcmVnIHw9IFBDSV9ST01fQUREUkVTU19FTkFCTEU7CisJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9ST01fRU5BQkxFOworCX0KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIHdoZXJlLCByZWcpOworCisJLyogVGhpcyBrbm93cyB0aGF0IHRoZSB1cHBlciAzMi1iaXRzIG9mIHRoZSBhZGRyZXNzCisJICogbXVzdCBiZSB6ZXJvLiAgT3VyIFBDSSBjb21tb24gbGF5ZXIgZW5mb3JjZXMgdGhpcy4KKwkgKi8KKwlpZiAoaXNfNjRiaXQpCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgd2hlcmUgKyA0LCAwKTsKK30KKworc3RhdGljIHZvaWQgcGNpX3N1bjR2X3Jlc291cmNlX2FkanVzdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQkgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QpCit7CisJcmVzLT5zdGFydCArPSByb290LT5zdGFydDsKKwlyZXMtPmVuZCArPSByb290LT5zdGFydDsKK30KKworLyogVXNlIHJhbmdlcyBwcm9wZXJ0eSB0byBkZXRlcm1pbmUgd2hlcmUgUENJIE1FTSwgSS9PLCBhbmQgQ29uZmlnCisgKiBzcGFjZSBhcmUgZm9yIHRoaXMgUENJIGJ1cyBtb2R1bGUuCisgKi8KK3N0YXRpYyB2b2lkIHBjaV9zdW40dl9kZXRlcm1pbmVfbWVtX2lvX3NwYWNlKHN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSkKK3sKKwlpbnQgaSwgc2F3X21lbSwgc2F3X2lvOworCisJc2F3X21lbSA9IHNhd19pbyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBibS0+bnVtX3BibV9yYW5nZXM7IGkrKykgeworCQlzdHJ1Y3QgbGludXhfcHJvbV9wY2lfcmFuZ2VzICpwciA9ICZwYm0tPnBibV9yYW5nZXNbaV07CisJCXVuc2lnbmVkIGxvbmcgYTsKKwkJaW50IHR5cGU7CisKKwkJdHlwZSA9IChwci0+Y2hpbGRfcGh5c19oaSA+PiAyNCkgJiAweDM7CisJCWEgPSAoKCh1bnNpZ25lZCBsb25nKXByLT5wYXJlbnRfcGh5c19oaSA8PCAzMlVMKSB8CisJCSAgICAgKCh1bnNpZ25lZCBsb25nKXByLT5wYXJlbnRfcGh5c19sbyAgPDwgIDBVTCkpOworCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIDE6CisJCQkvKiAxNi1iaXQgSU8gc3BhY2UsIDE2TUIgKi8KKwkJCXBibS0+aW9fc3BhY2Uuc3RhcnQgPSBhOworCQkJcGJtLT5pb19zcGFjZS5lbmQgPSBhICsgKCgxNlVMKjEwMjRVTCoxMDI0VUwpIC0gMVVMKTsKKwkJCXBibS0+aW9fc3BhY2UuZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCQkJc2F3X2lvID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgMjoKKwkJCS8qIDMyLWJpdCBNRU0gc3BhY2UsIDJHQiAqLworCQkJcGJtLT5tZW1fc3BhY2Uuc3RhcnQgPSBhOworCQkJcGJtLT5tZW1fc3BhY2UuZW5kID0gYSArICgweDgwMDAwMDAwVUwgLSAxVUwpOworCQkJcGJtLT5tZW1fc3BhY2UuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwkJCXNhd19tZW0gPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSAzOgorCQkJLyogWFhYIDY0LWJpdCBNRU0gaGFuZGxpbmcgWFhYICovCisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9OworCX0KKworCWlmICghc2F3X2lvIHx8ICFzYXdfbWVtKSB7CisJCXByb21fcHJpbnRmKCIlczogRmF0YWwgZXJyb3IsIG1pc3NpbmcgJXMgUEJNIHJhbmdlLlxuIiwKKwkJCSAgICBwYm0tPm5hbWUsCisJCQkgICAgKCFzYXdfaW8gPyAiSU8iIDogIk1FTSIpKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJcHJpbnRrKCIlczogUENJIElPWyVseF0gTUVNWyVseF1cbiIsCisJICAgICAgIHBibS0+bmFtZSwKKwkgICAgICAgcGJtLT5pb19zcGFjZS5zdGFydCwKKwkgICAgICAgcGJtLT5tZW1fc3BhY2Uuc3RhcnQpOworfQorCitzdGF0aWMgdm9pZCBwYm1fcmVnaXN0ZXJfdG9wbGV2ZWxfcmVzb3VyY2VzKHN0cnVjdCBwY2lfY29udHJvbGxlcl9pbmZvICpwLAorCQkJCQkgICAgc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQoreworCXBibS0+aW9fc3BhY2UubmFtZSA9IHBibS0+bWVtX3NwYWNlLm5hbWUgPSBwYm0tPm5hbWU7CisKKwlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZwYm0tPmlvX3NwYWNlKTsKKwlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnBibS0+bWVtX3NwYWNlKTsKKwlwY2lfcmVnaXN0ZXJfbGVnYWN5X3JlZ2lvbnMoJnBibS0+aW9fc3BhY2UsCisJCQkJICAgICZwYm0tPm1lbV9zcGFjZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByb2JlX2V4aXN0aW5nX2VudHJpZXMoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtLAorCQkJCQkgICAgc3RydWN0IHBjaV9pb21tdSAqaW9tbXUpCit7CisJc3RydWN0IHBjaV9pb21tdV9hcmVuYSAqYXJlbmEgPSAmaW9tbXUtPmFyZW5hOworCXVuc2lnbmVkIGxvbmcgaSwgY250ID0gMDsKKwl1MzIgZGV2aGFuZGxlOworCisJZGV2aGFuZGxlID0gcGJtLT5kZXZoYW5kbGU7CisJZm9yIChpID0gMDsgaSA8IGFyZW5hLT5saW1pdDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgcmV0LCBpb19hdHRycywgcmE7CisKKwkJcmV0ID0gcGNpX3N1bjR2X2lvbW11X2dldG1hcChkZXZoYW5kbGUsCisJCQkJCSAgICAgSFZfUENJX1RTQklEKDAsIGkpLAorCQkJCQkgICAgICZpb19hdHRycywgJnJhKTsKKwkJaWYgKHJldCA9PSBIVl9FT0spIHsKKwkJCWNudCsrOworCQkJX19zZXRfYml0KGksIGFyZW5hLT5tYXApOworCQl9CisJfQorCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIHZvaWQgcGNpX3N1bjR2X2lvbW11X2luaXQoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQoreworCXN0cnVjdCBwY2lfaW9tbXUgKmlvbW11ID0gcGJtLT5pb21tdTsKKwl1bnNpZ25lZCBsb25nIG51bV90c2JfZW50cmllcywgc3o7CisJdTMyIHZkbWFbMl0sIGRtYV9tYXNrLCBkbWFfb2Zmc2V0OworCWludCBlcnIsIHRzYnNpemU7CisKKwllcnIgPSBwcm9tX2dldHByb3BlcnR5KHBibS0+cHJvbV9ub2RlLCAidmlydHVhbC1kbWEiLAorCQkJICAgICAgIChjaGFyICopJnZkbWFbMF0sIHNpemVvZih2ZG1hKSk7CisJaWYgKGVyciA9PSAwIHx8IGVyciA9PSAtMSkgeworCQkvKiBObyBwcm9wZXJ0eSwgdXNlIGRlZmF1bHQgdmFsdWVzLiAqLworCQl2ZG1hWzBdID0gMHg4MDAwMDAwMDsKKwkJdmRtYVsxXSA9IDB4ODAwMDAwMDA7CisJfQorCisJZG1hX21hc2sgPSB2ZG1hWzBdOworCXN3aXRjaCAodmRtYVsxXSkgeworCQljYXNlIDB4MjAwMDAwMDA6CisJCQlkbWFfbWFzayB8PSAweDFmZmZmZmZmOworCQkJdHNic2l6ZSA9IDY0OworCQkJYnJlYWs7CisKKwkJY2FzZSAweDQwMDAwMDAwOgorCQkJZG1hX21hc2sgfD0gMHgzZmZmZmZmZjsKKwkJCXRzYnNpemUgPSAxMjg7CisJCQlicmVhazsKKworCQljYXNlIDB4ODAwMDAwMDA6CisJCQlkbWFfbWFzayB8PSAweDdmZmZmZmZmOworCQkJdHNic2l6ZSA9IDI1NjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcm9tX3ByaW50ZigiUENJLVNVTjRWOiBzdHJhbmdlIHZpcnR1YWwtZG1hIHNpemUuXG4iKTsKKwkJCXByb21faGFsdCgpOworCX07CisKKwl0c2JzaXplICo9ICg4ICogMTAyNCk7CisKKwludW1fdHNiX2VudHJpZXMgPSB0c2JzaXplIC8gc2l6ZW9mKGlvcHRlX3QpOworCisJZG1hX29mZnNldCA9IHZkbWFbMF07CisKKwkvKiBTZXR1cCBpbml0aWFsIHNvZnR3YXJlIElPTU1VIHN0YXRlLiAqLworCXNwaW5fbG9ja19pbml0KCZpb21tdS0+bG9jayk7CisJaW9tbXUtPmN0eF9sb3dlc3RfZnJlZSA9IDE7CisJaW9tbXUtPnBhZ2VfdGFibGVfbWFwX2Jhc2UgPSBkbWFfb2Zmc2V0OworCWlvbW11LT5kbWFfYWRkcl9tYXNrID0gZG1hX21hc2s7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgZnJlZSBhcmVhIG1hcC4gICovCisJc3ogPSBudW1fdHNiX2VudHJpZXMgLyA4OworCXN6ID0gKHN6ICsgN1VMKSAmIH43VUw7CisJaW9tbXUtPmFyZW5hLm1hcCA9IGttYWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghaW9tbXUtPmFyZW5hLm1hcCkgeworCQlwcm9tX3ByaW50ZigiUENJX0lPTU1VOiBFcnJvciwga21hbGxvYyhhcmVuYS5tYXApIGZhaWxlZC5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CisJbWVtc2V0KGlvbW11LT5hcmVuYS5tYXAsIDAsIHN6KTsKKwlpb21tdS0+YXJlbmEubGltaXQgPSBudW1fdHNiX2VudHJpZXM7CisKKwlzeiA9IHByb2JlX2V4aXN0aW5nX2VudHJpZXMocGJtLCBpb21tdSk7CisKKwlwcmludGsoIiVzOiBUU0IgZW50cmllcyBbJWx1XSwgZXhpc3RpbmcgbWFwaW5ncyBbJWx1XVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLCBudW1fdHNiX2VudHJpZXMsIHN6KTsKK30KKworc3RhdGljIHZvaWQgcGNpX3N1bjR2X2dldF9idXNfcmFuZ2Uoc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtKQoreworCXVuc2lnbmVkIGludCBidXNyYW5nZVsyXTsKKwlpbnQgcHJvbV9ub2RlID0gcGJtLT5wcm9tX25vZGU7CisJaW50IGVycjsKKworCWVyciA9IHByb21fZ2V0cHJvcGVydHkocHJvbV9ub2RlLCAiYnVzLXJhbmdlIiwKKwkJCSAgICAgICAoY2hhciAqKSZidXNyYW5nZVswXSwKKwkJCSAgICAgICBzaXplb2YoYnVzcmFuZ2UpKTsKKwlpZiAoZXJyID09IDAgfHwgZXJyID09IC0xKSB7CisJCXByb21fcHJpbnRmKCIlczogRmF0YWwgZXJyb3IsIG5vIGJ1cy1yYW5nZS5cbiIsIHBibS0+bmFtZSk7CisJCXByb21faGFsdCgpOworCX0KKworCXBibS0+cGNpX2ZpcnN0X2J1c25vID0gYnVzcmFuZ2VbMF07CisJcGJtLT5wY2lfbGFzdF9idXNubyA9IGJ1c3JhbmdlWzFdOworCit9CisKK3N0YXRpYyB2b2lkIHBjaV9zdW40dl9wYm1faW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyAqcCwgaW50IHByb21fbm9kZSwgdTMyIGRldmhhbmRsZSkKK3sKKwlzdHJ1Y3QgcGNpX3BibV9pbmZvICpwYm07CisJaW50IGVyciwgaTsKKworCWlmIChkZXZoYW5kbGUgJiAweDQwKQorCQlwYm0gPSAmcC0+cGJtX0I7CisJZWxzZQorCQlwYm0gPSAmcC0+cGJtX0E7CisKKwlwYm0tPnBhcmVudCA9IHA7CisJcGJtLT5wcm9tX25vZGUgPSBwcm9tX25vZGU7CisJcGJtLT5wY2lfZmlyc3Rfc2xvdCA9IDE7CisKKwlwYm0tPmRldmhhbmRsZSA9IGRldmhhbmRsZTsKKworCXNwcmludGYocGJtLT5uYW1lLCAiU1VONFYtUENJJWQgUEJNJWMiLAorCQlwLT5pbmRleCwgKHBibSA9PSAmcC0+cGJtX0EgPyAnQScgOiAnQicpKTsKKworCXByaW50aygiJXM6IGRldmhhbmRsZVsleF0gcHJvbV9ub2RlWyV4OiV4XVxuIiwKKwkgICAgICAgcGJtLT5uYW1lLCBwYm0tPmRldmhhbmRsZSwKKwkgICAgICAgcGJtLT5wcm9tX25vZGUsIHByb21fZ2V0Y2hpbGQocGJtLT5wcm9tX25vZGUpKTsKKworCXByb21fZ2V0c3RyaW5nKHByb21fbm9kZSwgIm5hbWUiLAorCQkgICAgICAgcGJtLT5wcm9tX25hbWUsIHNpemVvZihwYm0tPnByb21fbmFtZSkpOworCisJZXJyID0gcHJvbV9nZXRwcm9wZXJ0eShwcm9tX25vZGUsICJyYW5nZXMiLAorCQkJICAgICAgIChjaGFyICopIHBibS0+cGJtX3JhbmdlcywKKwkJCSAgICAgICBzaXplb2YocGJtLT5wYm1fcmFuZ2VzKSk7CisJaWYgKGVyciA9PSAwIHx8IGVyciA9PSAtMSkgeworCQlwcm9tX3ByaW50ZigiJXM6IEZhdGFsIGVycm9yLCBubyByYW5nZXMgcHJvcGVydHkuXG4iLAorCQkJICAgIHBibS0+bmFtZSk7CisJCXByb21faGFsdCgpOworCX0KKworCXBibS0+bnVtX3BibV9yYW5nZXMgPQorCQkoZXJyIC8gc2l6ZW9mKHN0cnVjdCBsaW51eF9wcm9tX3BjaV9yYW5nZXMpKTsKKworCS8qIE1hc2sgb3V0IHRoZSB0b3AgOCBiaXRzIG9mIHRoZSByYW5nZXMsIGxlYXZpbmcgdGhlIHJlYWwKKwkgKiBwaHlzaWNhbCBhZGRyZXNzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwYm0tPm51bV9wYm1fcmFuZ2VzOyBpKyspCisJCXBibS0+cGJtX3Jhbmdlc1tpXS5wYXJlbnRfcGh5c19oaSAmPSAweDBmZmZmZmZmOworCisJcGNpX3N1bjR2X2RldGVybWluZV9tZW1faW9fc3BhY2UocGJtKTsKKwlwYm1fcmVnaXN0ZXJfdG9wbGV2ZWxfcmVzb3VyY2VzKHAsIHBibSk7CisKKwllcnIgPSBwcm9tX2dldHByb3BlcnR5KHByb21fbm9kZSwgImludGVycnVwdC1tYXAiLAorCQkJICAgICAgIChjaGFyICopcGJtLT5wYm1faW50bWFwLAorCQkJICAgICAgIHNpemVvZihwYm0tPnBibV9pbnRtYXApKTsKKwlpZiAoZXJyID09IDAgfHwgZXJyID09IC0xKSB7CisJCXByb21fcHJpbnRmKCIlczogRmF0YWwgZXJyb3IsIG5vIGludGVycnVwdC1tYXAgcHJvcGVydHkuXG4iLAorCQkJICAgIHBibS0+bmFtZSk7CisJCXByb21faGFsdCgpOworCX0KKworCXBibS0+bnVtX3BibV9pbnRtYXAgPSAoZXJyIC8gc2l6ZW9mKHN0cnVjdCBsaW51eF9wcm9tX3BjaV9pbnRtYXApKTsKKwllcnIgPSBwcm9tX2dldHByb3BlcnR5KHByb21fbm9kZSwgImludGVycnVwdC1tYXAtbWFzayIsCisJCQkgICAgICAgKGNoYXIgKikmcGJtLT5wYm1faW50bWFzaywKKwkJCSAgICAgICBzaXplb2YocGJtLT5wYm1faW50bWFzaykpOworCWlmIChlcnIgPT0gMCB8fCBlcnIgPT0gLTEpIHsKKwkJcHJvbV9wcmludGYoIiVzOiBGYXRhbCBlcnJvciwgbm8gaW50ZXJydXB0LW1hcC1tYXNrLlxuIiwKKwkJCSAgICBwYm0tPm5hbWUpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwlwY2lfc3VuNHZfZ2V0X2J1c19yYW5nZShwYm0pOworCXBjaV9zdW40dl9pb21tdV9pbml0KHBibSk7Cit9CisKK3ZvaWQgc3VuNHZfcGNpX2luaXQoaW50IG5vZGUsIGNoYXIgKm1vZGVsX25hbWUpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyX2luZm8gKnA7CisJc3RydWN0IHBjaV9pb21tdSAqaW9tbXU7CisJc3RydWN0IGxpbnV4X3Byb202NF9yZWdpc3RlcnMgcmVnczsKKwl1MzIgZGV2aGFuZGxlOworCWludCBpOworCisJcHJvbV9nZXRwcm9wZXJ0eShub2RlLCAicmVnIiwgKGNoYXIgKikmcmVncywgc2l6ZW9mKHJlZ3MpKTsKKwlkZXZoYW5kbGUgPSAocmVncy5waHlzX2FkZHIgPj4gMzJVTCkgJiAweDBmZmZmZmZmOworCisJZm9yIChwID0gcGNpX2NvbnRyb2xsZXJfcm9vdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOworCisJCWlmIChwLT5wYm1fQS5wcm9tX25vZGUgJiYgcC0+cGJtX0IucHJvbV9ub2RlKQorCQkJY29udGludWU7CisKKwkJcGJtID0gKHAtPnBibV9BLnByb21fbm9kZSA/CisJCSAgICAgICAmcC0+cGJtX0EgOgorCQkgICAgICAgJnAtPnBibV9CKTsKKworCQlpZiAocGJtLT5kZXZoYW5kbGUgPT0gKGRldmhhbmRsZSBeIDB4NDApKSB7CisJCQlwY2lfc3VuNHZfcGJtX2luaXQocCwgbm9kZSwgZGV2aGFuZGxlKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWZvcl9lYWNoX2NwdShpKSB7CisJCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKworCQlpZiAoIXBhZ2UpCisJCQlnb3RvIGZhdGFsX21lbW9yeV9lcnJvcjsKKworCQlwZXJfY3B1KHBjaV9pb21tdV9iYXRjaCwgaSkucGdsaXN0ID0gKHU2NCAqKSBwYWdlOworCX0KKworCXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXJfaW5mbyksIEdGUF9BVE9NSUMpOworCWlmICghcCkKKwkJZ290byBmYXRhbF9tZW1vcnlfZXJyb3I7CisKKwltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CisKKwlpb21tdSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9tbXUpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWlvbW11KQorCQlnb3RvIGZhdGFsX21lbW9yeV9lcnJvcjsKKworCW1lbXNldChpb21tdSwgMCwgc2l6ZW9mKCppb21tdSkpOworCXAtPnBibV9BLmlvbW11ID0gaW9tbXU7CisKKwlpb21tdSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaW9tbXUpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWlvbW11KQorCQlnb3RvIGZhdGFsX21lbW9yeV9lcnJvcjsKKworCW1lbXNldChpb21tdSwgMCwgc2l6ZW9mKCppb21tdSkpOworCXAtPnBibV9CLmlvbW11ID0gaW9tbXU7CisKKwlwLT5uZXh0ID0gcGNpX2NvbnRyb2xsZXJfcm9vdDsKKwlwY2lfY29udHJvbGxlcl9yb290ID0gcDsKKworCXAtPmluZGV4ID0gcGNpX251bV9jb250cm9sbGVycysrOworCXAtPnBibXNfc2FtZV9kb21haW4gPSAwOworCisJcC0+c2Nhbl9idXMgPSBwY2lfc3VuNHZfc2Nhbl9idXM7CisJcC0+aXJxX2J1aWxkID0gcGNpX3N1bjR2X2lycV9idWlsZDsKKwlwLT5iYXNlX2FkZHJlc3NfdXBkYXRlID0gcGNpX3N1bjR2X2Jhc2VfYWRkcmVzc191cGRhdGU7CisJcC0+cmVzb3VyY2VfYWRqdXN0ID0gcGNpX3N1bjR2X3Jlc291cmNlX2FkanVzdDsKKwlwLT5wY2lfb3BzID0gJnBjaV9zdW40dl9vcHM7CisKKwkvKiBMaWtlIFBTWUNITyBhbmQgU0NISVpPIHdlIGhhdmUgYSAyR0IgYWxpZ25lZCBhcmVhCisJICogZm9yIG1lbW9yeSBzcGFjZS4KKwkgKi8KKwlwY2lfbWVtc3BhY2VfbWFzayA9IDB4N2ZmZmZmZmZVTDsKKworCXBjaV9zdW40dl9wYm1faW5pdChwLCBub2RlLCBkZXZoYW5kbGUpOworCXJldHVybjsKKworZmF0YWxfbWVtb3J5X2Vycm9yOgorCXByb21fcHJpbnRmKCJTVU40Vl9QQ0k6IEZhdGFsIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLlxuIik7CisJcHJvbV9oYWx0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9zdW40di5oIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRkMjVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHYuaApAQCAtMCwwICsxLDMxIEBACisvKiBwY2lfc3VuNHYuaDogU1VONFYgc3BlY2lmaWMgUENJIGNvbnRyb2xsZXIgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQorICovCisKKyNpZm5kZWYgX1BDSV9TVU40Vl9ICisjZGVmaW5lIF9QQ0lfU1VONFZfSAorCitleHRlcm4gbG9uZyBwY2lfc3VuNHZfaW9tbXVfbWFwKHVuc2lnbmVkIGxvbmcgZGV2aGFuZGxlLAorCQkJCXVuc2lnbmVkIGxvbmcgdHNiaWQsCisJCQkJdW5zaWduZWQgbG9uZyBudW1fdHRlcywKKwkJCQl1bnNpZ25lZCBsb25nIGlvX2F0dHJpYnV0ZXMsCisJCQkJdW5zaWduZWQgbG9uZyBpb19wYWdlX2xpc3RfcGEpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX3N1bjR2X2lvbW11X2RlbWFwKHVuc2lnbmVkIGxvbmcgZGV2aGFuZGxlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHRzYmlkLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIG51bV90dGVzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9zdW40dl9pb21tdV9nZXRtYXAodW5zaWduZWQgbG9uZyBkZXZoYW5kbGUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHRzYmlkLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqaW9fYXR0cmlidXRlcywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnJlYWxfYWRkcmVzcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfc3VuNHZfY29uZmlnX2dldCh1bnNpZ25lZCBsb25nIGRldmhhbmRsZSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHBjaV9kZXZpY2UsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBjb25maWdfb2Zmc2V0LAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gaW50IHBjaV9zdW40dl9jb25maWdfcHV0KHVuc2lnbmVkIGxvbmcgZGV2aGFuZGxlLAorCQkJCXVuc2lnbmVkIGxvbmcgcGNpX2RldmljZSwKKwkJCQl1bnNpZ25lZCBsb25nIGNvbmZpZ19vZmZzZXQsCisJCQkJdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKyNlbmRpZiAvKiAhKF9QQ0lfU1VONFZfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2X2FzbS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfc3VuNHZfYXNtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwNGZkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcGNpX3N1bjR2X2FzbS5TCkBAIC0wLDAgKzEsOTUgQEAKKy8qIHBjaV9zdW40dl9hc206IEh5cGVydmlzb3IgY2FsbHMgZm9yIFBDSSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CisKKwkvKiAlbzA6IGRldmhhbmRsZQorCSAqICVvMToJdHNiaWQKKwkgKiAlbzI6CW51bSB0dGVzCisJICogJW8zOglpb19hdHRyaWJ1dGVzCisJICogJW80Oglpb19wYWdlX2xpc3QgcGh5cyBhZGRyZXNzCisJICoKKwkgKiByZXR1cm5zICVvMDoJLXN0YXR1cyBpZiBzdGF0dXMgd2FzIG5vbi16ZXJvLCBlbHNlCisJICogICAgICAgICAlbzA6CW51bSBwYWdlcyBtYXBwZWQKKwkgKi8KKwkuZ2xvYmwJcGNpX3N1bjR2X2lvbW11X21hcAorcGNpX3N1bjR2X2lvbW11X21hcDoKKwltb3YJJW81LCAlZzEKKwltb3YJSFZfRkFTVF9QQ0lfSU9NTVVfTUFQLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlicm56LHBuICVvMCwgMWYKKwkgc3ViCSVnMCwgJW8wLCAlbzAKKwltb3YJJW8xLCAlbzAKKzE6CXJldGwKKwkgbm9wCisKKwkvKiAlbzA6IGRldmhhbmRsZQorCSAqICVvMToJdHNiaWQKKwkgKiAlbzI6CW51bSB0dGVzCisJICoKKwkgKiByZXR1cm5zICVvMDoJbnVtIHR0ZXMgZGVtYXBwZWQKKwkgKi8KKwkuZ2xvYmwJcGNpX3N1bjR2X2lvbW11X2RlbWFwCitwY2lfc3VuNHZfaW9tbXVfZGVtYXA6CisJbW92CUhWX0ZBU1RfUENJX0lPTU1VX0RFTUFQLCAlbzUKKwl0YQlIVl9GQVNUX1RSQVAKKwlyZXRsCisJIG1vdgklbzEsICVvMAorCisJLyogJW8wOiBkZXZoYW5kbGUKKwkgKiAlbzE6CXRzYmlkCisJICogJW8yOgkmaW9fYXR0cmlidXRlcworCSAqICVvMzoJJnJlYWxfYWRkcmVzcworCSAqCisJICogcmV0dXJucyAlbzA6CXN0YXR1cworCSAqLworCS5nbG9ibAlwY2lfc3VuNHZfaW9tbXVfZ2V0bWFwCitwY2lfc3VuNHZfaW9tbXVfZ2V0bWFwOgorCW1vdgklbzIsICVvNAorCW1vdglIVl9GQVNUX1BDSV9JT01NVV9HRVRNQVAsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCXN0eAklbzEsIFslbzRdCisJc3R4CSVvMiwgWyVvM10KKwlyZXRsCisJIG1vdgklbzAsICVvMAorCisJLyogJW8wOiBkZXZoYW5kbGUKKwkgKiAlbzE6CXBjaV9kZXZpY2UKKwkgKiAlbzI6CXBjaV9jb25maWdfb2Zmc2V0CisJICogJW8zOglzaXplCisJICoKKwkgKiByZXR1cm5zICVvMDoJZGF0YQorCSAqCisJICogSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKKwkgKiBhcyBhbGwgMSdzLgorCSAqLworCS5nbG9ibAlwY2lfc3VuNHZfY29uZmlnX2dldAorcGNpX3N1bjR2X2NvbmZpZ19nZXQ6CisJbW92CUhWX0ZBU1RfUENJX0NPTkZJR19HRVQsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCWJybnosYSxwbiAlbzEsIDFmCisJIG1vdgktMSwgJW8yCisxOglyZXRsCisJIG1vdgklbzIsICVvMAorCisJLyogJW8wOiBkZXZoYW5kbGUKKwkgKiAlbzE6CXBjaV9kZXZpY2UKKwkgKiAlbzI6CXBjaV9jb25maWdfb2Zmc2V0CisJICogJW8zOglzaXplCisJICogJW80OglkYXRhCisJICoKKwkgKiByZXR1cm5zICVvMDoJc3RhdHVzCisJICoKKwkgKiBzdGF0dXMgd2lsbCBiZSB6ZXJvIGlmIHRoZSBvcGVyYXRpb24gY29tcGxldGVkCisJICogc3VjY2Vzc2Z1bGx5LCBlbHNlIC0xIGlmIG5vdAorCSAqLworCS5nbG9ibAlwY2lfc3VuNHZfY29uZmlnX3B1dAorcGNpX3N1bjR2X2NvbmZpZ19wdXQ6CisJbW92CUhWX0ZBU1RfUENJX0NPTkZJR19QVVQsICVvNQorCXRhCUhWX0ZBU1RfVFJBUAorCWJybnosYSxwbiAlbzEsIDFmCisJIG1vdgktMSwgJW8xCisxOglyZXRsCisJIG1vdgklbzEsICVvMApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwNTliMGQwLi4xYzdjYTJmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDQsODMgKzQ0LDYxIEBACiAjaW5jbHVkZSA8YXNtL2ZwdW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL2hlYWQuaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogCiAvKiAjZGVmaW5lIFZFUkJPU0VfU0hPV1JFR1MgKi8KIAotLyoKLSAqIE5vdGhpbmcgc3BlY2lhbCB5ZXQuLi4KLSAqLwotdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKK3N0YXRpYyB2b2lkIHNwYXJjNjRfeWllbGQodm9pZCkKIHsKLX0KKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikKKwkJcmV0dXJuOwogCi0jaWZuZGVmIENPTkZJR19TTVAKKwljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAKLS8qCi0gKiB0aGUgaWRsZSBsb29wIG9uIGEgU3BhcmMuLi4gOykKLSAqLwotdm9pZCBjcHVfaWRsZSh2b2lkKQotewotCS8qIGVuZGxlc3MgaWRsZSBsb29wIHdpdGggbm8gcHJpb3JpdHkgYXQgYWxsICovCi0JZm9yICg7OykgewotCQkvKiBJZiBjdXJyZW50LT53b3JrLm5lZWRfcmVzY2hlZCBpcyB6ZXJvIHdlIHNob3VsZCByZWFsbHkKLQkJICogc2V0dXAgZm9yIGEgc3lzdGVtIHdha3VwIGV2ZW50IGFuZCBleGVjdXRlIGEgc2h1dGRvd24KLQkJICogaW5zdHJ1Y3Rpb24uCi0JCSAqCi0JCSAqIEJ1dCB0aGlzIHJlcXVpcmVzIHdyaXRpbmcgYmFjayB0aGUgY29udGVudHMgb2YgdGhlCi0JCSAqIEwyIGNhY2hlIGV0Yy4gc28gaW1wbGVtZW50IHRoaXMgbGF0ZXIuIC1EYXZlTQotCQkgKi8KLQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKLQkJCWJhcnJpZXIoKTsKKwl3aGlsZSAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCXVuc2lnbmVkIGxvbmcgcHN0YXRlOwogCi0JCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKLQkJc2NoZWR1bGUoKTsKLQkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCWNoZWNrX3BndF9jYWNoZSgpOworCQkvKiBEaXNhYmxlIGludGVycnVwdHMuICovCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJInJkcHIgJSVwc3RhdGUsICUwXG5cdCIKKwkJCSJhbmRuICUwLCAlMSwgJTBcblx0IgorCQkJIndycHIgJTAsICUlZzAsICUlcHN0YXRlIgorCQkJOiAiPSZyIiAocHN0YXRlKQorCQkJOiAiaSIgKFBTVEFURV9JRSkpOworCisJCWlmICghbmVlZF9yZXNjaGVkKCkpCisJCQlzdW40dl9jcHVfeWllbGQoKTsKKworCQkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8KKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkicmRwciAlJXBzdGF0ZSwgJTBcblx0IgorCQkJIm9yICUwLCAlMSwgJTBcblx0IgorCQkJIndycHIgJTAsICUlZzAsICUlcHN0YXRlIgorCQkJOiAiPSZyIiAocHN0YXRlKQorCQkJOiAiaSIgKFBTVEFURV9JRSkpOwogCX0KKworCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogfQogCi0jZWxzZQotCi0vKgotICogdGhlIGlkbGUgbG9vcCBvbiBhIFVsdHJhTXVsdGlQZW5ndWluLi4uCi0gKgotICogVElGX1BPTExJTkdfTlJGTEFHIGlzIHNldCBiZWNhdXNlIHdlIGRvIG5vdCBzbGVlcCB0aGUgY3B1Ci0gKiBpbnNpZGUgb2YgdGhlIGlkbGVyIHRhc2ssIHNvIGFuIGludGVycnVwdCBpcyBub3QgbmVlZGVkCi0gKiB0byBnZXQgYSBjbGVhbiBmYXN0IHJlc3BvbnNlLgotICoKLSAqIFhYWCBSZXZlcmlmeSB0aGlzIGFzc3VtcHRpb24uLi4gLURhdmVNCi0gKgotICogQWRkZW5kdW06IFdlIGRvIHdhbnQgaXQgdG8gZG8gc29tZXRoaW5nIGZvciB0aGUgc2lnbmFsCi0gKiAgICAgICAgICAgZGVsaXZlcnkgY2FzZSwgd2UgZGV0ZWN0IHRoYXQgYnkganVzdCBzZWVpbmcKLSAqICAgICAgICAgICBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHNlbmQgdGhpcyB0byBhbiBpZGxlciBvciBub3QuCi0gKi8KKy8qIFRoZSBpZGxlIGxvb3Agb24gc3BhcmM2NC4gKi8KIHZvaWQgY3B1X2lkbGUodm9pZCkKIHsKLQljcHVpbmZvX3NwYXJjICpjcHVpbmZvID0gJmxvY2FsX2NwdV9kYXRhKCk7CiAJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAKIAl3aGlsZSgxKSB7CiAJCWlmIChuZWVkX3Jlc2NoZWQoKSkgewotCQkJY3B1aW5mby0+aWRsZV92b2x1bWUgPSAwOwogCQkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQkJc2NoZWR1bGUoKTsKIAkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQkJY2hlY2tfcGd0X2NhY2hlKCk7CiAJCX0KLQkJY3B1aW5mby0+aWRsZV92b2x1bWUrKzsKLQotCQkvKiBUaGUgc3RvcmUgb3JkZXJpbmcgaXMgc28gdGhhdCBJUlEgaGFuZGxlcnMgb24KLQkJICogb3RoZXIgY3B1cyBzZWUgb3VyIGluY3JlYXNpbmcgaWRsZW5lc3MgZm9yIHRoZSBidWRkeQotCQkgKiByZWRpc3RyaWJ1dGlvbiBhbGdvcml0aG0uICAtRGF2ZU0KLQkJICovCi0JCW1lbWJhcl9zdG9yZWxvYWRfc3RvcmVzdG9yZSgpOworCQlzcGFyYzY0X3lpZWxkKCk7CiAJfQogfQogCi0jZW5kaWYKLQogZXh0ZXJuIGNoYXIgcmVib290X2NvbW1hbmQgW107CiAKIGV4dGVybiB2b2lkICgqcHJvbV9wYWxldHRlKShpbnQpOwpAQCAtMzU0LDYgKzMzMiw3IEBACiAJZXh0ZXJuIGxvbmcgZXRyYXAsIGV0cmFwdGwxOwogI2VuZGlmCiAJX19zaG93X3JlZ3MocmVncyk7CisjaWYgMAogI2lmZGVmIENPTkZJR19TTVAKIAl7CiAJCWV4dGVybiB2b2lkIHNtcF9yZXBvcnRfcmVncyh2b2lkKTsKQEAgLTM2MSw2ICszNDAsNyBAQAogCQlzbXBfcmVwb3J0X3JlZ3MoKTsKIAl9CiAjZW5kaWYKKyNlbmRpZgogCiAjaWZkZWYgVkVSQk9TRV9TSE9XUkVHUwkKIAlpZiAocmVncy0+dHBjID49ICZldHJhcCAmJiByZWdzLT50cGMgPCAmZXRyYXB0bDEgJiYKQEAgLTQzMywzMCArNDEzLDE1IEBACiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAogCWlmICh0LT5mbGFncyAmIF9USUZfQUJJX1BFTkRJTkcpCiAJCXQtPmZsYWdzIF49IChfVElGX0FCSV9QRU5ESU5HIHwgX1RJRl8zMkJJVCk7CiAKLQlpZiAodC0+dGFzay0+bW0pIHsKLQkJdW5zaWduZWQgbG9uZyBwZ2RfY2FjaGUgPSAwVUw7Ci0JCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKLQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdC0+dGFzay0+bW07Ci0JCQlwZ2RfdCAqcGdkMCA9ICZtbS0+cGdkWzBdOwotCQkJcHVkX3QgKnB1ZDAgPSBwdWRfb2Zmc2V0KHBnZDAsIDApOworCW1tID0gdC0+dGFzay0+bW07CisJaWYgKG1tKQorCQl0c2JfY29udGV4dF9zd2l0Y2gobW0pOwogCi0JCQlpZiAocHVkX25vbmUoKnB1ZDApKSB7Ci0JCQkJcG1kX3QgKnBhZ2UgPSBwbWRfYWxsb2Nfb25lKG1tLCAwKTsKLQkJCQlwdWRfc2V0KHB1ZDAsIHBhZ2UpOwotCQkJfQotCQkJcGdkX2NhY2hlID0gZ2V0X3BnZF9jYWNoZShwZ2QwKTsKLQkJfQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YSAlMCwgWyUxXSAlMlxuXHQiCi0JCQkJICAgICAibWVtYmFyICNTeW5jIgotCQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkJICAgICA6ICJyIiAocGdkX2NhY2hlKSwKLQkJCQkgICAgICJyIiAoVFNCX1JFRyksCi0JCQkJICAgICAiaSIgKEFTSV9ETU1VKSk7Ci0JfQogCXNldF90aHJlYWRfd3NhdmVkKDApOwogCiAJLyogVHVybiBvZmYgcGVyZm9ybWFuY2UgY291bnRlcnMgaWYgb24uICovCkBAIC01NTUsNiArNTIwLDE4IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzdGFja191bmFsaWduZWQodW5zaWduZWQgbG9uZyBzcCkKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKworCWluZm8uc2lfc2lnbm8gPSBTSUdCVVM7CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlID0gQlVTX0FEUkFMTjsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgc3A7CisJaW5mby5zaV90cmFwbm8gPSAwOworCWZvcmNlX3NpZ19pbmZvKFNJR0JVUywgJmluZm8sIGN1cnJlbnQpOworfQorCiB2b2lkIGZhdWx0X2luX3VzZXJfd2luZG93cyh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKQEAgLTU3MCwxMyArNTQ3LDE3IEBACiAJZmx1c2hfdXNlcl93aW5kb3dzKCk7CiAJd2luZG93ID0gZ2V0X3RocmVhZF93c2F2ZWQoKTsKIAotCWlmICh3aW5kb3cgIT0gMCkgeworCWlmIChsaWtlbHkod2luZG93ICE9IDApKSB7CiAJCXdpbmRvdyAtPSAxOwogCQlkbyB7CiAJCQl1bnNpZ25lZCBsb25nIHNwID0gKHQtPnJ3YnVmX3N0a3B0cnNbd2luZG93XSArIGJpYXMpOwogCQkJc3RydWN0IHJlZ193aW5kb3cgKnJ3aW4gPSAmdC0+cmVnX3dpbmRvd1t3aW5kb3ddOwogCi0JCQlpZiAoY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKXNwLCByd2luLCB3aW5zaXplKSkKKwkJCWlmICh1bmxpa2VseShzcCAmIDB4N1VMKSkKKwkJCQlzdGFja191bmFsaWduZWQoc3ApOworCisJCQlpZiAodW5saWtlbHkoY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKXNwLAorCQkJCQkJICByd2luLCB3aW5zaXplKSkpCiAJCQkJZ290byBiYXJmOwogCQl9IHdoaWxlICh3aW5kb3ctLSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvcHRyYWNlLmMKaW5kZXggM2Y5NzQ2Zi4uZWI5M2U5YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3B0cmFjZS5jCkBAIC0xMjQsNiArMTI0LDkgQEAKIHsKIAlCVUdfT04obGVuID4gUEFHRV9TSVpFKTsKIAorCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQlyZXR1cm47CisKICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKIAkvKiBJZiBiaXQgMTMgb2YgdGhlIGtlcm5lbCBhZGRyZXNzIHdlIHVzZWQgdG8gYWNjZXNzIHRoZQogCSAqIHVzZXIgcGFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgdmlydHVhbCBhZGRyZXNzIHRoYXQgcGFnZQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9ydHJhcC5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9ydHJhcC5TCmluZGV4IGI4MGViYTAuLjcxMzBlODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvcnRyYXAuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3J0cmFwLlMKQEAgLTIyMywxMiArMjIzLDI2IEBACiAJCWxkeAkJCVslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfRzNdLCAlZzMKIAkJbGR4CQkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9HNF0sICVnNAogCQlsZHgJCQlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0c1XSwgJWc1Ci0JCW1vdgkJCVRTQl9SRUcsICVnNgotCQlicm56LGEscG4JCSVsMywgMWYKLQkJIGxkeGEJCQlbJWc2XSBBU0lfSU1NVSwgJWc1Ci0xOgkJbGR4CQkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9HNl0sICVnNgorCQlicnoscHQJCQklbDMsIDFmCisJCW1vdgkJCSVnNiwgJWwyCisKKwkJLyogTXVzdCBkbyB0aGlzIGJlZm9yZSB0aHJlYWQgcmVnIGlzIGNsb2JiZXJlZCBiZWxvdy4gICovCisJCUxPQURfUEVSX0NQVV9CQVNFKCVnNSwgJWc2LCAlaTAsICVpMSwgJWkyKQorMToKKwkJbGR4CQkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9HNl0sICVnNgogCQlsZHgJCQlbJXNwICsgUFRSRUdTX09GRiArIFBUX1Y5X0c3XSwgJWc3Ci0JCXdycHIJCQklZzAsIFJUUkFQX1BTVEFURV9BR19JUlFPRkYsICVwc3RhdGUKKworCQkvKiBOb3JtYWwgZ2xvYmFscyBhcmUgcmVzdG9yZWQsIGdvIHRvIHRyYXAgZ2xvYmFscy4gICovCis2NjE6CQl3cnByCQkJJWcwLCBSVFJBUF9QU1RBVEVfQUdfSVJRT0ZGLCAlcHN0YXRlCisJCW5vcAorCQkuc2VjdGlvbgkJLnN1bjR2XzJpbnNuX3BhdGNoLCAiYXgiCisJCS53b3JkCQkJNjYxYgorCQl3cnByCQkJJWcwLCBSVFJBUF9QU1RBVEVfSVJRT0ZGLCAlcHN0YXRlCisJCVNFVF9HTCgxKQorCQkucHJldmlvdXMKKworCQltb3YJCQklbDIsICVnNgorCiAJCWxkeAkJCVslc3AgKyBQVFJFR1NfT0ZGICsgUFRfVjlfSTBdLCAlaTAKIAkJbGR4CQkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JMV0sICVpMQogCkBAIC0yNTIsMjcgKzI2NiwxMDggQEAKIAogCQlicm56LHBuCQkJJWwzLCBrZXJuX3J0dAogCQkgbW92CQkJUFJJTUFSWV9DT05URVhULCAlbDcKLQkJbGR4YQkJCVslbDcgKyAlbDddIEFTSV9ETU1VLCAlbDAKKworNjYxOgkJbGR4YQkJCVslbDcgKyAlbDddIEFTSV9ETU1VLCAlbDAKKwkJLnNlY3Rpb24JCS5zdW40dl8xaW5zbl9wYXRjaCwgImF4IgorCQkud29yZAkJCTY2MWIKKwkJbGR4YQkJCVslbDcgKyAlbDddIEFTSV9NTVUsICVsMAorCQkucHJldmlvdXMKKwogCQlzZXRoaQkJCSVoaShzcGFyYzY0X2tlcm5fcHJpX251Y19iaXRzKSwgJWwxCiAJCWxkeAkJCVslbDEgKyAlbG8oc3BhcmM2NF9rZXJuX3ByaV9udWNfYml0cyldLCAlbDEKIAkJb3IJCQklbDAsICVsMSwgJWwwCi0JCXN0eGEJCQklbDAsIFslbDddIEFTSV9ETU1VCi0JCWZsdXNoCQkJJWc2CisKKzY2MToJCXN0eGEJCQklbDAsIFslbDddIEFTSV9ETU1VCisJCS5zZWN0aW9uCQkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkJLndvcmQJCQk2NjFiCisJCXN0eGEJCQklbDAsIFslbDddIEFTSV9NTVUKKwkJLnByZXZpb3VzCisKKwkJc2V0aGkJCQklaGkoS0VSTkJBU0UpLCAlbDcKKwkJZmx1c2gJCQklbDcKIAkJcmRwcgkJCSV3c3RhdGUsICVsMQogCQlyZHByCQkJJW90aGVyd2luLCAlbDIKIAkJc3JsCQkJJWwxLCAzLCAlbDEKIAogCQl3cnByCQkJJWwyLCAlZzAsICVjYW5yZXN0b3JlCiAJCXdycHIJCQklbDEsICVnMCwgJXdzdGF0ZQotCQl3cnByCQkJJWcwLCAlZzAsICVvdGhlcndpbgorCQlicm56LHB0CQkJJWwyLCB1c2VyX3J0dF9yZXN0b3JlCisJCSB3cnByCQkJJWcwLCAlZzAsICVvdGhlcndpbgorCisJCWxkeAkJCVslZzYgKyBUSV9GTEFHU10sICVnMworCQl3cgkJCSVnMCwgQVNJX0FJVVAsICVhc2kKKwkJcmRwcgkJCSVjd3AsICVnMQorCQlhbmRjYwkJCSVnMywgX1RJRl8zMkJJVCwgJWcwCisJCXN1YgkJCSVnMSwgMSwgJWcxCisJCWJuZSxwdAkJCSV4Y2MsIHVzZXJfcnR0X2ZpbGxfMzJiaXQKKwkJIHdycHIJCQklZzEsICVjd3AKKwkJYmEsYSxwdAkJCSV4Y2MsIHVzZXJfcnR0X2ZpbGxfNjRiaXQKKwordXNlcl9ydHRfZmlsbF9maXh1cDoKKwkJcmRwcgklY3dwLCAlZzEKKwkJYWRkCSVnMSwgMSwgJWcxCisJCXdycHIJJWcxLCAweDAsICVjd3AKKworCQlyZHByCSV3c3RhdGUsICVnMgorCQlzbGwJJWcyLCAzLCAlZzIKKwkJd3JwcgklZzIsIDB4MCwgJXdzdGF0ZQorCisJCS8qIFdlIGtub3cgJWNhbnJlc3RvcmUgYW5kICVvdGhlcndpbiBhcmUgYm90aCB6ZXJvLiAgKi8KKworCQlzZXRoaQklaGkoc3BhcmM2NF9rZXJuX3ByaV9jb250ZXh0KSwgJWcyCisJCWxkeAlbJWcyICsgJWxvKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCldLCAlZzIKKwkJbW92CVBSSU1BUllfQ09OVEVYVCwgJWcxCisKKzY2MToJCXN0eGEJJWcyLCBbJWcxXSBBU0lfRE1NVQorCQkuc2VjdGlvbiAuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkJLndvcmQJNjYxYgorCQlzdHhhCSVnMiwgWyVnMV0gQVNJX01NVQorCQkucHJldmlvdXMKKworCQlzZXRoaQklaGkoS0VSTkJBU0UpLCAlZzEKKwkJZmx1c2gJJWcxCisKKwkJb3IJJWc0LCBGQVVMVF9DT0RFX1dJTkZJWFVQLCAlZzQKKwkJc3RiCSVnNCwgWyVnNiArIFRJX0ZBVUxUX0NPREVdCisJCXN0eAklZzUsIFslZzYgKyBUSV9GQVVMVF9BRERSXQorCisJCW1vdgklZzYsICVsMQorCQl3cnByCSVnMCwgMHgwLCAldGwKKworNjYxOgkJbm9wCisJCS5zZWN0aW9uCQkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkJLndvcmQJCQk2NjFiCisJCVNFVF9HTCgwKQorCQkucHJldmlvdXMKKworCQl3cnByCSVnMCwgUlRSQVBfUFNUQVRFLCAlcHN0YXRlCisKKwkJbW92CSVsMSwgJWc2CisJCWxkeAlbJWc2ICsgVElfVEFTS10sICVnNAorCQlMT0FEX1BFUl9DUFVfQkFTRSglZzUsICVnNiwgJWcxLCAlZzIsICVnMykKKwkJY2FsbAlkb19zcGFyYzY0X2ZhdWx0CisJCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKKwkJYmEscHQJJXhjYywgcnRyYXAKKwkJIG5vcAorCit1c2VyX3J0dF9wcmVfcmVzdG9yZToKKwkJYWRkCQkJJWcxLCAxLCAlZzEKKwkJd3JwcgkJCSVnMSwgMHgwLCAlY3dwCisKK3VzZXJfcnR0X3Jlc3RvcmU6CiAJCXJlc3RvcmUKIAkJcmRwcgkJCSVjYW5yZXN0b3JlLCAlZzEKIAkJd3JwcgkJCSVnMSwgMHgwLCAlY2xlYW53aW4KIAkJcmV0cnkKIAkJbm9wCiAKLWtlcm5fcnR0OglyZXN0b3JlCitrZXJuX3J0dDoJcmRwcgkJCSVjYW5yZXN0b3JlLCAlZzEKKwkJYnJ6LHBuCQkJJWcxLCBrZXJuX3J0dF9maWxsCisJCSBub3AKK2tlcm5fcnR0X3Jlc3RvcmU6CisJCXJlc3RvcmUKIAkJcmV0cnkKKwogdG9fa2VybmVsOgogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJCWxkc3cJCQlbJWc2ICsgVElfUFJFX0NPVU5UXSwgJWw1CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NidXMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2J1cy5jCmluZGV4IGQ5NWExYmMuLjFkNmZmZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2J1cy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2J1cy5jCkBAIC02OTMsMTEgKzY5MywxMSBAQAogCiAvKiBTQlVTIFNZU0lPIElOTyBudW1iZXIgdG8gU3BhcmMgUElMIGxldmVsLiAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgc3lzaW9faW5vX3RvX3BpbFtdID0gewotCTAsIDQsIDQsIDcsIDUsIDcsIDgsIDksCQkvKiBTQlVTIHNsb3QgMCAqLwotCTAsIDQsIDQsIDcsIDUsIDcsIDgsIDksCQkvKiBTQlVTIHNsb3QgMSAqLwotCTAsIDQsIDQsIDcsIDUsIDcsIDgsIDksCQkvKiBTQlVTIHNsb3QgMiAqLwotCTAsIDQsIDQsIDcsIDUsIDcsIDgsIDksCQkvKiBTQlVTIHNsb3QgMyAqLwotCTQsIC8qIE9uYm9hcmQgU0NTSSAqLworCTAsIDUsIDUsIDcsIDUsIDcsIDgsIDksCQkvKiBTQlVTIHNsb3QgMCAqLworCTAsIDUsIDUsIDcsIDUsIDcsIDgsIDksCQkvKiBTQlVTIHNsb3QgMSAqLworCTAsIDUsIDUsIDcsIDUsIDcsIDgsIDksCQkvKiBTQlVTIHNsb3QgMiAqLworCTAsIDUsIDUsIDcsIDUsIDcsIDgsIDksCQkvKiBTQlVTIHNsb3QgMyAqLworCTUsIC8qIE9uYm9hcmQgU0NTSSAqLwogCTUsIC8qIE9uYm9hcmQgRXRoZXJuZXQgKi8KIC8qWFhYKi8JOCwgLyogT25ib2FyZCBCUFAgKi8KIAkwLCAvKiBCb2dvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDA1NDQ2MWUuLjdkMGU2N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKQEAgLTY0LDEyICs2NCw2IEBACiAJMTYgICAgICAgICAgICAgICAgICAgICAgLyogb3JpZy12aWRlby1wb2ludHMgKi8KIH07CiAKLS8qIFR5cGluZyBzeW5jIGF0IHRoZSBwcm9tIHByb21wdCBjYWxscyB0aGUgZnVuY3Rpb24gcG9pbnRlZCB0byBieQotICogdGhlIHN5bmMgY2FsbGJhY2sgd2hpY2ggSSBzZXQgdG8gdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KLSAqIFRoaXMgc2hvdWxkIHN5bmMgYWxsIGZpbGVzeXN0ZW1zIGFuZCByZXR1cm4sIGZvciBub3cgaXQganVzdAotICogcHJpbnRzIG91dCBwcmV0dHkgbWVzc2FnZXMgYW5kIHJldHVybnMuCi0gKi8KLQogdm9pZCAoKnByb21fcGFsZXR0ZSkoaW50KTsKIHZvaWQgKCpwcm9tX2tleWJvYXJkKSh2b2lkKTsKIApAQCAtNzksMjU5ICs3Myw2IEBACiAJcHJvbV93cml0ZShzLCBuKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjb25zb2xlIHByb21fY29uc29sZSA9IHsKLQkubmFtZSA9CQkicHJvbSIsCi0JLndyaXRlID0JcHJvbV9jb25zb2xlX3dyaXRlLAotCS5mbGFncyA9CUNPTl9DT05TREVWIHwgQ09OX0VOQUJMRUQsCi0JLmluZGV4ID0JLTEsCi19OwotCi0jZGVmaW5lIFBST01fVFJVRQktMQotI2RlZmluZSBQUk9NX0ZBTFNFCTAKLQotLyogUHJldHR5IHNpY2sgZWg/ICovCi1pbnQgcHJvbV9jYWxsYmFjayhsb25nICphcmdzKQotewotCXN0cnVjdCBjb25zb2xlICpjb25zLCAqc2F2ZWRfY29uc29sZSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyICpjbWQ7Ci0JZXh0ZXJuIHNwaW5sb2NrX3QgcHJvbV9lbnRyeV9sb2NrOwotCi0JaWYgKCFhcmdzKQotCQlyZXR1cm4gLTE7Ci0JaWYgKCEoY21kID0gKGNoYXIgKilhcmdzWzBdKSkKLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBUaGUgY2FsbGJhY2sgY2FuIGJlIGludm9rZWQgb24gdGhlIGNwdSB0aGF0IGZpcnN0IGRyb3BwZWQgCi0JICogaW50byBwcm9tX2NtZGxpbmUgYWZ0ZXIgdGFraW5nIHRoZSBzZXJpYWwgaW50ZXJydXB0LCBvciBvbiAKLQkgKiBhIHNsYXZlIHByb2Nlc3NvciB0aGF0IHdhcyBzbXBfY2FwdHVyZWQoKSBpZiB0aGUgCi0JICogYWRtaW5pc3RyYXRvciBoYXMgZG9uZSBhIHN3aXRjaC1jcHUgaW5zaWRlIG9icC4gSW4gZWl0aGVyIAotCSAqIGNhc2UsIHRoZSBjcHUgaXMgbWFya2VkIGFzIGluLWludGVycnVwdC4gRHJvcCBJUlEgbG9ja3MuCi0JICovCi0JaXJxX2V4aXQoKTsKLQotCS8qIFhYWCBSZXZpc2l0IHRoZSBsb2NraW5nIGhlcmUgc29tZWRheS4gIFRoaXMgaXMgYSBkZWJ1Z2dpbmcKLQkgKiBYWFggZmVhdHVyZSBzbyBpdCBpc250IGFsbCB0aGF0IGNyaXRpY2FsLiAgLURhdmVNCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0Jc3Bpbl91bmxvY2soJnByb21fZW50cnlfbG9jayk7Ci0JY29ucyA9IGNvbnNvbGVfZHJpdmVyczsKLQl3aGlsZSAoY29ucykgewotCQl1bnJlZ2lzdGVyX2NvbnNvbGUoY29ucyk7Ci0JCWNvbnMtPmZsYWdzICY9IH4oQ09OX1BSSU5UQlVGRkVSKTsKLQkJY29ucy0+bmV4dCA9IHNhdmVkX2NvbnNvbGU7Ci0JCXNhdmVkX2NvbnNvbGUgPSBjb25zOwotCQljb25zID0gY29uc29sZV9kcml2ZXJzOwotCX0KLQlyZWdpc3Rlcl9jb25zb2xlKCZwcm9tX2NvbnNvbGUpOwotCWlmICghc3RyY21wKGNtZCwgInN5bmMiKSkgewotCQlwcm9tX3ByaW50ZigiUFJPTSBgJXMnIGNvbW1hbmQuLi5cbiIsIGNtZCk7Ci0JCXNob3dfZnJlZV9hcmVhcygpOwotCQlpZiAoY3VycmVudC0+cGlkICE9IDApIHsKLQkJCWxvY2FsX2lycV9lbmFibGUoKTsKLQkJCXN5c19zeW5jKCk7Ci0JCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQl9Ci0JCWFyZ3NbMl0gPSAwOwotCQlhcmdzW2FyZ3NbMV0gKyAzXSA9IC0xOwotCQlwcm9tX3ByaW50ZigiUmV0dXJuaW5nIHRvIFBST01cbiIpOwotCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJ2YT50dGUtZGF0YSIpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgY3R4LCB2YTsKLQkJdW5zaWduZWQgbG9uZyB0dGUgPSAwOwotCQlsb25nIHJlcyA9IFBST01fRkFMU0U7Ci0KLQkJY3R4ID0gYXJnc1szXTsKLQkJdmEgPSBhcmdzWzRdOwotCQlpZiAoY3R4KSB7Ci0JCQkvKgotCQkJICogRmluZCBwcm9jZXNzIG93bmluZyBjdHgsIGxvb2t1cCBtYXBwaW5nLgotCQkJICovCi0JCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0JCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7Ci0JCQlwZ2RfdCAqcGdkcDsKLQkJCXB1ZF90ICpwdWRwOwotCQkJcG1kX3QgKnBtZHA7Ci0JCQlwdGVfdCAqcHRlcDsKLQkJCXB0ZV90IHB0ZTsKLQotCQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7Ci0JCQkJbW0gPSBwLT5tbTsKLQkJCQlpZiAoQ1RYX05SQklUUyhtbS0+Y29udGV4dCkgPT0gY3R4KQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICghbW0gfHwKLQkJCSAgICBDVFhfTlJCSVRTKG1tLT5jb250ZXh0KSAhPSBjdHgpCi0JCQkJZ290byBkb25lOwotCi0JCQlwZ2RwID0gcGdkX29mZnNldChtbSwgdmEpOwotCQkJaWYgKHBnZF9ub25lKCpwZ2RwKSkKLQkJCQlnb3RvIGRvbmU7Ci0JCQlwdWRwID0gcHVkX29mZnNldChwZ2RwLCB2YSk7Ci0JCQlpZiAocHVkX25vbmUoKnB1ZHApKQotCQkJCWdvdG8gZG9uZTsKLQkJCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIHZhKTsKLQkJCWlmIChwbWRfbm9uZSgqcG1kcCkpCi0JCQkJZ290byBkb25lOwotCi0JCQkvKiBQcmVlbXB0aW9uIGltcGxpY2l0bHkgZGlzYWJsZWQgYnkgdmlydHVlIG9mCi0JCQkgKiBiZWluZyBjYWxsZWQgZnJvbSBpbnNpZGUgT0JQLgotCQkJICovCi0JCQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kcCwgdmEpOwotCQkJcHRlID0gKnB0ZXA7Ci0JCQlpZiAocHRlX3ByZXNlbnQocHRlKSkgewotCQkJCXR0ZSA9IHB0ZV92YWwocHRlKTsKLQkJCQlyZXMgPSBQUk9NX1RSVUU7Ci0JCQl9Ci0JCQlwdGVfdW5tYXAocHRlcCk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQlpZiAoKHZhID49IEtFUk5CQVNFKSAmJiAodmEgPCAoS0VSTkJBU0UgKyAoNCAqIDEwMjQgKiAxMDI0KSkpKSB7Ci0JCQlleHRlcm4gdW5zaWduZWQgbG9uZyBzcGFyYzY0X2tlcm5fcHJpX2NvbnRleHQ7Ci0KLQkJCS8qIFNwaXRmaXJlIEVycmF0YSAjMzIgd29ya2Fyb3VuZCAqLwotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgotCQkJCQkgICAgICJmbHVzaAklJWc2IgotCQkJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJCQkgICAgIDogInIiIChzcGFyYzY0X2tlcm5fcHJpX2NvbnRleHQpLAotCQkJCQkgICAgICAgInIiIChQUklNQVJZX0NPTlRFWFQpLAotCQkJCQkgICAgICAgImkiIChBU0lfRE1NVSkpOwotCi0JCQkvKgotCQkJICogTG9ja2VkIGRvd24gdGxiIGVudHJ5LgotCQkJICovCi0KLQkJCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkKLQkJCQl0dGUgPSBzcGl0ZmlyZV9nZXRfZHRsYl9kYXRhKFNQSVRGSVJFX0hJR0hFU1RfTE9DS0VEX1RMQkVOVCk7Ci0JCQllbHNlIGlmICh0bGJfdHlwZSA9PSBjaGVldGFoIHx8IHRsYl90eXBlID09IGNoZWV0YWhfcGx1cykKLQkJCQl0dGUgPSBjaGVldGFoX2dldF9sZHRsYl9kYXRhKENIRUVUQUhfSElHSEVTVF9MT0NLRURfVExCRU5UKTsKLQotCQkJcmVzID0gUFJPTV9UUlVFOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJaWYgKHZhIDwgUEdESVJfU0laRSkgewotCQkJLyoKLQkJCSAqIHZtYWxsb2Mgb3IgcHJvbV9pbmhlcml0ZWQgbWFwcGluZy4KLQkJCSAqLwotCQkJcGdkX3QgKnBnZHA7Ci0JCQlwdWRfdCAqcHVkcDsKLQkJCXBtZF90ICpwbWRwOwotCQkJcHRlX3QgKnB0ZXA7Ci0JCQlwdGVfdCBwdGU7Ci0JCQlpbnQgZXJyb3I7Ci0KLQkJCWlmICgodmEgPj0gTE9XX09CUF9BRERSRVNTKSAmJiAodmEgPCBISV9PQlBfQUREUkVTUykpIHsKLQkJCQl0dGUgPSBwcm9tX3ZpcnRfdG9fcGh5cyh2YSwgJmVycm9yKTsKLQkJCQlpZiAoIWVycm9yKQotCQkJCQlyZXMgPSBQUk9NX1RSVUU7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJcGdkcCA9IHBnZF9vZmZzZXRfayh2YSk7Ci0JCQlpZiAocGdkX25vbmUoKnBnZHApKQotCQkJCWdvdG8gZG9uZTsKLQkJCXB1ZHAgPSBwdWRfb2Zmc2V0KHBnZHAsIHZhKTsKLQkJCWlmIChwdWRfbm9uZSgqcHVkcCkpCi0JCQkJZ290byBkb25lOwotCQkJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgdmEpOwotCQkJaWYgKHBtZF9ub25lKCpwbWRwKSkKLQkJCQlnb3RvIGRvbmU7Ci0KLQkJCS8qIFByZWVtcHRpb24gaW1wbGljaXRseSBkaXNhYmxlZCBieSB2aXJ0dWUgb2YKLQkJCSAqIGJlaW5nIGNhbGxlZCBmcm9tIGluc2lkZSBPQlAuCi0JCQkgKi8KLQkJCXB0ZXAgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwLCB2YSk7Ci0JCQlwdGUgPSAqcHRlcDsKLQkJCWlmIChwdGVfcHJlc2VudChwdGUpKSB7Ci0JCQkJdHRlID0gcHRlX3ZhbChwdGUpOwotCQkJCXJlcyA9IFBST01fVFJVRTsKLQkJCX0KLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWlmICh2YSA8IFBBR0VfT0ZGU0VUKSB7Ci0JCQkvKgotCQkJICogTm8gbWFwcGluZ3MgaGVyZS4KLQkJCSAqLwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJaWYgKHZhICYgKDFVTCA8PCA0MCkpIHsKLQkJCS8qCi0JCQkgKiBJL08gcGFnZS4KLQkJCSAqLwotCi0JCQl0dGUgPSAoX19wYSh2YSkgJiBfUEFHRV9QQUREUikgfAotCQkJICAgICAgX1BBR0VfVkFMSUQgfCBfUEFHRV9TWjRNQiB8Ci0JCQkgICAgICBfUEFHRV9FIHwgX1BBR0VfUCB8IF9QQUdFX1c7Ci0JCQlyZXMgPSBQUk9NX1RSVUU7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQkvKgotCQkgKiBOb3JtYWwgcGFnZS4KLQkJICovCi0JCXR0ZSA9IChfX3BhKHZhKSAmIF9QQUdFX1BBRERSKSB8Ci0JCSAgICAgIF9QQUdFX1ZBTElEIHwgX1BBR0VfU1o0TUIgfAotCQkgICAgICBfUEFHRV9DUCB8IF9QQUdFX0NWIHwgX1BBR0VfUCB8IF9QQUdFX1c7Ci0JCXJlcyA9IFBST01fVFJVRTsKLQotCWRvbmU6Ci0JCWlmIChyZXMgPT0gUFJPTV9UUlVFKSB7Ci0JCQlhcmdzWzJdID0gMzsKLQkJCWFyZ3NbYXJnc1sxXSArIDNdID0gMDsKLQkJCWFyZ3NbYXJnc1sxXSArIDRdID0gcmVzOwotCQkJYXJnc1thcmdzWzFdICsgNV0gPSB0dGU7Ci0JCX0gZWxzZSB7Ci0JCQlhcmdzWzJdID0gMjsKLQkJCWFyZ3NbYXJnc1sxXSArIDNdID0gMDsKLQkJCWFyZ3NbYXJnc1sxXSArIDRdID0gcmVzOwotCQl9Ci0JfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi5zb2Z0MSIpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdHRlOwotCi0JCXR0ZSA9IGFyZ3NbM107Ci0JCXByb21fcHJpbnRmKCIlbHg6XCIlcyVzJXMlcyVzXCIgIiwKLQkJCSAgICAodHRlICYgX1BBR0VfU09GVCkgPj4gNywKLQkJCSAgICB0dGUgJiBfUEFHRV9NT0RJRklFRCA/ICJNIiA6ICItIiwKLQkJCSAgICB0dGUgJiBfUEFHRV9BQ0NFU1NFRCA/ICJBIiA6ICItIiwKLQkJCSAgICB0dGUgJiBfUEFHRV9SRUFEICAgICA/ICJXIiA6ICItIiwKLQkJCSAgICB0dGUgJiBfUEFHRV9XUklURSAgICA/ICJSIiA6ICItIiwKLQkJCSAgICB0dGUgJiBfUEFHRV9QUkVTRU5UICA/ICJQIiA6ICItIik7Ci0KLQkJYXJnc1syXSA9IDI7Ci0JCWFyZ3NbYXJnc1sxXSArIDNdID0gMDsKLQkJYXJnc1thcmdzWzFdICsgNF0gPSBQUk9NX1RSVUU7Ci0JfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi5zb2Z0MiIpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdHRlOwotCi0JCXR0ZSA9IGFyZ3NbM107Ci0JCXByb21fcHJpbnRmKCIlbHggIiwgKHR0ZSAmIDB4MDdGQzAwMDAwMDAwMDAwMFVMKSA+PiA1MCk7Ci0KLQkJYXJnc1syXSA9IDI7Ci0JCWFyZ3NbYXJnc1sxXSArIDNdID0gMDsKLQkJYXJnc1thcmdzWzFdICsgNF0gPSBQUk9NX1RSVUU7Ci0JfSBlbHNlIHsKLQkJcHJvbV9wcmludGYoInVua25vd24gUFJPTSBgJXMnIGNvbW1hbmQuLi5cbiIsIGNtZCk7Ci0JfQotCXVucmVnaXN0ZXJfY29uc29sZSgmcHJvbV9jb25zb2xlKTsKLQl3aGlsZSAoc2F2ZWRfY29uc29sZSkgewotCQljb25zID0gc2F2ZWRfY29uc29sZTsKLQkJc2F2ZWRfY29uc29sZSA9IGNvbnMtPm5leHQ7Ci0JCXJlZ2lzdGVyX2NvbnNvbGUoY29ucyk7Ci0JfQotCXNwaW5fbG9jaygmcHJvbV9lbnRyeV9sb2NrKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKgotCSAqIFJlc3RvcmUgaW4taW50ZXJydXB0IHN0YXR1cyBmb3IgYSByZXN1bWUgZnJvbSBvYnAuCi0JICovCi0JaXJxX2VudGVyKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHVuc2lnbmVkIGludCBib290X2ZsYWdzID0gMDsKICNkZWZpbmUgQk9PVE1FX0RFQlVHICAweDEKICNkZWZpbmUgQk9PVE1FX1NJTkdMRSAweDIKQEAgLTQ3OSwxNSArMjIwLDk5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcHRfcmVncyBmYWtlX3N3YXBwZXJfcmVncyA9IHsgeyAwLCB9LCAwLCAwLCAwLCAwIH07CiAKLXZvaWQgcmVnaXN0ZXJfcHJvbV9jYWxsYmFja3Modm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBwZXJfY3B1X3BhdGNoKHZvaWQpCiB7Ci0JcHJvbV9zZXRjYWxsYmFjayhwcm9tX2NhbGxiYWNrKTsKLQlwcm9tX2ZldmFsKCI6IGxpbnV4LXZhPnR0ZS1kYXRhIDIgXCIgdmE+dHRlLWRhdGFcIiAkY2FsbGJhY2sgZHJvcCA7ICIKLQkJICAgIicgbGludXgtdmE+dHRlLWRhdGEgdG8gdmE+dHRlLWRhdGEiKTsKLQlwcm9tX2ZldmFsKCI6IGxpbnV4LS5zb2Z0MSAxIFwiIC5zb2Z0MVwiICRjYWxsYmFjayAyZHJvcCA7ICIKLQkJICAgIicgbGludXgtLnNvZnQxIHRvIC5zb2Z0MSIpOwotCXByb21fZmV2YWwoIjogbGludXgtLnNvZnQyIDEgXCIgLnNvZnQyXCIgJGNhbGxiYWNrIDJkcm9wIDsgIgotCQkgICAiJyBsaW51eC0uc29mdDIgdG8gLnNvZnQyIik7CisJc3RydWN0IGNwdWlkX3BhdGNoX2VudHJ5ICpwOworCXVuc2lnbmVkIGxvbmcgdmVyOworCWludCBpc19qYnVzOworCisJaWYgKHRsYl90eXBlID09IHNwaXRmaXJlICYmICF0aGlzX2lzX3N0YXJmaXJlKQorCQlyZXR1cm47CisKKwlpc19qYnVzID0gMDsKKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikgeworCQlfX2FzbV9fICgicmRwciAlJXZlciwgJTAiIDogIj1yIiAodmVyKSk7CisJCWlzX2pidXMgPSAoKHZlciA+PiAzMlVMKSA9PSBfX0pBTEFQRU5PX0lEIHx8CisJCQkgICAodmVyID4+IDMyVUwpID09IF9fU0VSUkFOT19JRCk7CisJfQorCisJcCA9ICZfX2NwdWlkX3BhdGNoOworCXdoaWxlIChwIDwgJl9fY3B1aWRfcGF0Y2hfZW5kKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IHAtPmFkZHI7CisJCXVuc2lnbmVkIGludCAqaW5zbnM7CisKKwkJc3dpdGNoICh0bGJfdHlwZSkgeworCQljYXNlIHNwaXRmaXJlOgorCQkJaW5zbnMgPSAmcC0+c3RhcmZpcmVbMF07CisJCQlicmVhazsKKwkJY2FzZSBjaGVldGFoOgorCQljYXNlIGNoZWV0YWhfcGx1czoKKwkJCWlmIChpc19qYnVzKQorCQkJCWluc25zID0gJnAtPmNoZWV0YWhfamJ1c1swXTsKKwkJCWVsc2UKKwkJCQlpbnNucyA9ICZwLT5jaGVldGFoX3NhZmFyaVswXTsKKwkJCWJyZWFrOworCQljYXNlIGh5cGVydmlzb3I6CisJCQlpbnNucyA9ICZwLT5zdW40dlswXTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJvbV9wcmludGYoIlVua25vd24gY3B1IHR5cGUsIGhhbHRpbmcuXG4iKTsKKwkJCXByb21faGFsdCgpOworCQl9OworCisJCSoodW5zaWduZWQgaW50ICopIChhZGRyICsgIDApID0gaW5zbnNbMF07CisJCXdtYigpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2gJJTAiIDogOiAiciIgKGFkZHIgKyAgMCkpOworCisJCSoodW5zaWduZWQgaW50ICopIChhZGRyICsgIDQpID0gaW5zbnNbMV07CisJCXdtYigpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2gJJTAiIDogOiAiciIgKGFkZHIgKyAgNCkpOworCisJCSoodW5zaWduZWQgaW50ICopIChhZGRyICsgIDgpID0gaW5zbnNbMl07CisJCXdtYigpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2gJJTAiIDogOiAiciIgKGFkZHIgKyAgOCkpOworCisJCSoodW5zaWduZWQgaW50ICopIChhZGRyICsgMTIpID0gaW5zbnNbM107CisJCXdtYigpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2gJJTAiIDogOiAiciIgKGFkZHIgKyAxMikpOworCisJCXArKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzdW40dl9wYXRjaCh2b2lkKQoreworCXN0cnVjdCBzdW40dl8xaW5zbl9wYXRjaF9lbnRyeSAqcDE7CisJc3RydWN0IHN1bjR2XzJpbnNuX3BhdGNoX2VudHJ5ICpwMjsKKworCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yKQorCQlyZXR1cm47CisKKwlwMSA9ICZfX3N1bjR2XzFpbnNuX3BhdGNoOworCXdoaWxlIChwMSA8ICZfX3N1bjR2XzFpbnNuX3BhdGNoX2VuZCkgeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBwMS0+YWRkcjsKKworCQkqKHVuc2lnbmVkIGludCAqKSAoYWRkciArICAwKSA9IHAxLT5pbnNuOworCQl3bWIoKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImZsdXNoCSUwIiA6IDogInIiIChhZGRyICsgIDApKTsKKworCQlwMSsrOworCX0KKworCXAyID0gJl9fc3VuNHZfMmluc25fcGF0Y2g7CisJd2hpbGUgKHAyIDwgJl9fc3VuNHZfMmluc25fcGF0Y2hfZW5kKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IHAyLT5hZGRyOworCisJCSoodW5zaWduZWQgaW50ICopIChhZGRyICsgIDApID0gcDItPmluc25zWzBdOworCQl3bWIoKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImZsdXNoCSUwIiA6IDogInIiIChhZGRyICsgIDApKTsKKworCQkqKHVuc2lnbmVkIGludCAqKSAoYWRkciArICA0KSA9IHAyLT5pbnNuc1sxXTsKKwkJd21iKCk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaAklMCIgOiA6ICJyIiAoYWRkciArICA0KSk7CisKKwkJcDIrKzsKKwl9CiB9CiAKIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKQEAgLTQ5Niw3ICszMjEsMTAgQEAKIAkqY21kbGluZV9wID0gcHJvbV9nZXRib290YXJncygpOwogCXN0cmNweShzYXZlZF9jb21tYW5kX2xpbmUsICpjbWRsaW5lX3ApOwogCi0JcHJpbnRrKCJBUkNIOiBTVU40VVxuIik7CisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCXByaW50aygiQVJDSDogU1VONFZcbiIpOworCWVsc2UKKwkJcHJpbnRrKCJBUkNIOiBTVU40VVxuIik7CiAKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwpAQCAtNTA3LDYgKzMzNSwxMyBAQAogCS8qIFdvcmsgb3V0IGlmIHdlIGFyZSBzdGFyZmlyZSBlYXJseSBvbiAqLwogCWNoZWNrX2lmX3N0YXJmaXJlKCk7CiAKKwkvKiBOb3cgd2Uga25vdyBlbm91Z2ggdG8gcGF0Y2ggdGhlIGdldF9jcHVpZCBzZXF1ZW5jZXMKKwkgKiB1c2VkIGJ5IHRyYXAgY29kZS4KKwkgKi8KKwlwZXJfY3B1X3BhdGNoKCk7CisKKwlzdW40dl9wYXRjaCgpOworCiAJYm9vdF9mbGFnc19pbml0KCpjbWRsaW5lX3ApOwogCiAJaWRwcm9tX2luaXQoKTsKQEAgLTUxNCw3ICszNDksNyBAQAogCWlmICghcm9vdF9mbGFncykKIAkJcm9vdF9tb3VudGZsYWdzICY9IH5NU19SRE9OTFk7CiAJUk9PVF9ERVYgPSBvbGRfZGVjb2RlX2Rldihyb290X2Rldik7Ci0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisjaWZkZWYgQ09ORklHX0JMS19ERVZfUkFNCiAJcmRfaW1hZ2Vfc3RhcnQgPSByYW1fZmxhZ3MgJiBSQU1ESVNLX0lNQUdFX1NUQVJUX01BU0s7CiAJcmRfcHJvbXB0ID0gKChyYW1fZmxhZ3MgJiBSQU1ESVNLX1BST01QVF9GTEFHKSAhPSAwKTsKIAlyZF9kb2xvYWQgPSAoKHJhbV9mbGFncyAmIFJBTURJU0tfTE9BRF9GTEFHKSAhPSAwKTsJCkBAIC01NDIsNiArMzc3LDExIEBACiAJfQogI2VuZGlmCiAKKwlzbXBfc2V0dXBfY3B1X3Bvc3NpYmxlX21hcCgpOworCisJLyogR2V0IGJvb3QgcHJvY2Vzc29yIHRyYXBfYmxvY2tbXSBzZXR1cC4gICovCisJaW5pdF9jdXJfY3B1X3RyYXAoY3VycmVudF90aHJlYWRfaW5mbygpKTsKKwogCXBhZ2luZ19pbml0KCk7CiB9CiAKQEAgLTU2Myw2ICs0MDMsMTIgQEAKIAkJc2VyaWFsX2NvbnNvbGUgPSAyOwogCX0gZWxzZSBpZiAoaWRldiA9PSBQUk9NREVWX0lSU0MgJiYgb2RldiA9PSBQUk9NREVWX09SU0MpIHsKIAkJc2VyaWFsX2NvbnNvbGUgPSAzOworCX0gZWxzZSBpZiAoaWRldiA9PSBQUk9NREVWX0lWQ09OUyAmJiBvZGV2ID09IFBST01ERVZfT1ZDT05TKSB7CisJCS8qIHN1bmh2X2NvbnNvbGVfaW5pdCgpIGRvZXNuJ3QgY2hlY2sgdGhlIHNlcmlhbF9jb25zb2xlCisJCSAqIHZhbHVlIGFueXdheXMuLi4KKwkJICovCisJCXNlcmlhbF9jb25zb2xlID0gNDsKKwkJcmV0dXJuIGFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5SFYiLCAwLCBOVUxMKTsKIAl9IGVsc2UgewogCQlwcm9tX3ByaW50ZigiSW5jb25zaXN0ZW50IGNvbnNvbGU6ICIKIAkJCSAgICAiaW5wdXQgJWQsIG91dHB1dCAlZFxuIiwKQEAgLTU5Niw5ICs0NDIsOCBAQAogCXNlcV9wcmludGYobSwgCiAJCSAgICJjcHVcdFx0OiAlc1xuIgogCQkgICAiZnB1XHRcdDogJXNcbiIKLQkJICAgInByb21saWJcdFx0OiBWZXJzaW9uIDMgUmV2aXNpb24gJWRcbiIKLQkJICAgInByb21cdFx0OiAlZC4lZC4lZFxuIgotCQkgICAidHlwZVx0XHQ6IHN1bjR1XG4iCisJCSAgICJwcm9tXHRcdDogJXNcbiIKKwkJICAgInR5cGVcdFx0OiAlc1xuIgogCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVkXG4iCiAJCSAgICJuY3B1cyBhY3RpdmVcdDogJWRcbiIKIAkJICAgIkQkIHBhcml0eSB0bDFcdDogJXVcbiIKQEAgLTYxMCwxMCArNDU1LDEwIEBACiAJCSAgICwKIAkJICAgc3BhcmNfY3B1X3R5cGUsCiAJCSAgIHNwYXJjX2ZwdV90eXBlLAotCQkgICBwcm9tX3JldiwKLQkJICAgcHJvbV9wcmV2ID4+IDE2LAotCQkgICAocHJvbV9wcmV2ID4+IDgpICYgMHhmZiwKLQkJICAgcHJvbV9wcmV2ICYgMHhmZiwKKwkJICAgcHJvbV92ZXJzaW9uLAorCQkgICAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KKwkJICAgICJzdW40diIgOgorCQkgICAgInN1bjR1IiksCiAJCSAgIG5jcHVzX3Byb2JlZCwKIAkJICAgbnVtX29ubGluZV9jcHVzKCksCiAJCSAgIGRjYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkLApAQCAtNjkwLDE1ICs1MzUsMTEgQEAKIAl3aGlsZSAoIWNwdV9maW5kX2J5X2luc3RhbmNlKG5jcHVzX3Byb2JlZCwgTlVMTCwgTlVMTCkpCiAJCW5jcHVzX3Byb2JlZCsrOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoY3B1X3Bvc3NpYmxlKGkpKSB7Ci0JCQlzdHJ1Y3QgY3B1ICpwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKLQotCQkJaWYgKHApIHsKLQkJCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCQkJcmVnaXN0ZXJfY3B1KHAsIGksIE5VTEwpOwotCQkJCWVyciA9IDA7Ci0JCQl9CisJZm9yX2VhY2hfY3B1KGkpIHsKKwkJc3RydWN0IGNwdSAqcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwKSB7CisJCQlyZWdpc3Rlcl9jcHUocCwgaSwgTlVMTCk7CisJCQllcnIgPSAwOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwppbmRleCAxZmI2MzIzLi4xYjZlMmFkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZXIuaD4KICNpbmNsdWRlIDxhc20vc3RhcmZpcmUuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKIGV4dGVybiB2b2lkIGNhbGlicmF0ZV9kZWxheSh2b2lkKTsKIApAQCAtNDYsNiArNDcsOCBAQAogCiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXAgX19yZWFkX21vc3RseSA9IENQVV9NQVNLX05PTkU7CiBjcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXAgX19yZWFkX21vc3RseSA9IENQVV9NQVNLX05PTkU7CitjcHVtYXNrX3QgY3B1X3NpYmxpbmdfbWFwW05SX0NQVVNdIF9fcmVhZF9tb3N0bHkgPQorCXsgWzAgLi4uIE5SX0NQVVMtMV0gPSBDUFVfTUFTS19OT05FIH07CiBzdGF0aWMgY3B1bWFza190IHNtcF9jb21tZW5jZWRfbWFzazsKIHN0YXRpYyBjcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwogCkBAIC01NCwzMCArNTcsMjYgQEAKIAlpbnQgaTsKIAkKIAlzZXFfcHJpbnRmKG0sICJTdGF0ZTpcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJaWYgKGNwdV9vbmxpbmUoaSkpCi0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgIkNQVSVkOlx0XHRvbmxpbmVcbiIsIGkpOwotCX0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCisJCXNlcV9wcmludGYobSwgIkNQVSVkOlx0XHRvbmxpbmVcbiIsIGkpOwogfQogCiB2b2lkIHNtcF9ib2dvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlpbnQgaTsKIAkKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQotCQlpZiAoY3B1X29ubGluZShpKSkKLQkJCXNlcV9wcmludGYobSwKLQkJCQkgICAiQ3B1JWRCb2dvXHQ6ICVsdS4lMDJsdVxuIgotCQkJCSAgICJDcHUlZENsa1Rja1x0OiAlMDE2bHhcbiIsCi0JCQkJICAgaSwgY3B1X2RhdGEoaSkudWRlbGF5X3ZhbCAvICg1MDAwMDAvSFopLAotCQkJCSAgIChjcHVfZGF0YShpKS51ZGVsYXlfdmFsIC8gKDUwMDAvSFopKSAlIDEwMCwKLQkJCQkgICBpLCBjcHVfZGF0YShpKS5jbG9ja190aWNrKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCisJCXNlcV9wcmludGYobSwKKwkJCSAgICJDcHUlZEJvZ29cdDogJWx1LiUwMmx1XG4iCisJCQkgICAiQ3B1JWRDbGtUY2tcdDogJTAxNmx4XG4iLAorCQkJICAgaSwgY3B1X2RhdGEoaSkudWRlbGF5X3ZhbCAvICg1MDAwMDAvSFopLAorCQkJICAgKGNwdV9kYXRhKGkpLnVkZWxheV92YWwgLyAoNTAwMC9IWikpICUgMTAwLAorCQkJICAgaSwgY3B1X2RhdGEoaSkuY2xvY2tfdGljayk7CiB9CiAKIHZvaWQgX19pbml0IHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpCiB7Ci0JaW50IGNwdV9ub2RlOworCWludCBjcHVfbm9kZSwgZGVmOwogCiAJLyogbXVsdGlwbGllciBhbmQgY291bnRlciBzZXQgYnkKIAkgICBzbXBfc2V0dXBfcGVyY3B1X3RpbWVyKCkgICovCkBAIC04NywyNCArODYsMzIgQEAKIAljcHVfZGF0YShpZCkuY2xvY2tfdGljayA9IHByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwKIAkJCQkJCSAgICAgImNsb2NrLWZyZXF1ZW5jeSIsIDApOwogCi0JY3B1X2RhdGEoaWQpLnBnY2FjaGVfc2l6ZQkJPSAwOwotCWNwdV9kYXRhKGlkKS5wdGVfY2FjaGVbMF0JCT0gTlVMTDsKLQljcHVfZGF0YShpZCkucHRlX2NhY2hlWzFdCQk9IE5VTEw7Ci0JY3B1X2RhdGEoaWQpLnBnZF9jYWNoZQkJCT0gTlVMTDsKLQljcHVfZGF0YShpZCkuaWRsZV92b2x1bWUJCT0gMTsKLQorCWRlZiA9ICgodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgPyAoOCAqIDEwMjQpIDogKDE2ICogMTAyNCkpOwogCWNwdV9kYXRhKGlkKS5kY2FjaGVfc2l6ZSA9IHByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImRjYWNoZS1zaXplIiwKLQkJCQkJCSAgICAgIDE2ICogMTAyNCk7CisJCQkJCQkgICAgICBkZWYpOworCisJZGVmID0gMzI7CiAJY3B1X2RhdGEoaWQpLmRjYWNoZV9saW5lX3NpemUgPQotCQlwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJkY2FjaGUtbGluZS1zaXplIiwgMzIpOworCQlwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJkY2FjaGUtbGluZS1zaXplIiwgZGVmKTsKKworCWRlZiA9IDE2ICogMTAyNDsKIAljcHVfZGF0YShpZCkuaWNhY2hlX3NpemUgPSBwcm9tX2dldGludGRlZmF1bHQoY3B1X25vZGUsICJpY2FjaGUtc2l6ZSIsCi0JCQkJCQkgICAgICAxNiAqIDEwMjQpOworCQkJCQkJICAgICAgZGVmKTsKKworCWRlZiA9IDMyOwogCWNwdV9kYXRhKGlkKS5pY2FjaGVfbGluZV9zaXplID0KLQkJcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiaWNhY2hlLWxpbmUtc2l6ZSIsIDMyKTsKKwkJcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiaWNhY2hlLWxpbmUtc2l6ZSIsIGRlZik7CisKKwlkZWYgPSAoKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8KKwkgICAgICAgKDMgKiAxMDI0ICogMTAyNCkgOgorCSAgICAgICAoNCAqIDEwMjQgKiAxMDI0KSk7CiAJY3B1X2RhdGEoaWQpLmVjYWNoZV9zaXplID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLCAiZWNhY2hlLXNpemUiLAotCQkJCQkJICAgICAgNCAqIDEwMjQgKiAxMDI0KTsKKwkJCQkJCSAgICAgIGRlZik7CisKKwlkZWYgPSA2NDsKIAljcHVfZGF0YShpZCkuZWNhY2hlX2xpbmVfc2l6ZSA9Ci0JCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImVjYWNoZS1saW5lLXNpemUiLCA2NCk7CisJCXByb21fZ2V0aW50ZGVmYXVsdChjcHVfbm9kZSwgImVjYWNoZS1saW5lLXNpemUiLCBkZWYpOworCiAJcHJpbnRrKCJDUFVbJWRdOiBDYWNoZXMgIgogCSAgICAgICAiRFtzeiglZCk6bGluZV9zeiglZCldICIKIAkgICAgICAgIklbc3ooJWQpOmxpbmVfc3ooJWQpXSAiCkBAIC0xMTksMjggKzEyNiwxNyBAQAogCiBzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjYWxsaW5fZmxhZyA9IDA7CiAKLWV4dGVybiB2b2lkIGluaGVyaXRfbG9ja2VkX3Byb21fbWFwcGluZ3MoaW50IHNhdmVfcCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVfc2V0dXBfcGVyY3B1X2Jhc2UodW5zaWduZWQgbG9uZyBjcHVfaWQpCi17Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdgklMCwgJSVnNVxuXHQiCi0JCQkgICAgICJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCSAgICAgIm1lbWJhcgkjU3luYyIKLQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkgICAgIDogInIiIChfX3Blcl9jcHVfb2Zmc2V0KGNwdV9pZCkpLAotCQkJICAgICAgICJyIiAoVFNCX1JFRyksICJpIiAoQVNJX0lNTVUpKTsKLX0KLQogdm9pZCBfX2luaXQgc21wX2NhbGxpbih2b2lkKQogewogCWludCBjcHVpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JaW5oZXJpdF9sb2NrZWRfcHJvbV9tYXBwaW5ncygwKTsKKwlfX2xvY2FsX3Blcl9jcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldChjcHVpZCk7CisKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJc3VuNHZfa3RzYl9yZWdpc3RlcigpOwogCiAJX19mbHVzaF90bGJfYWxsKCk7CiAKLQljcHVfc2V0dXBfcGVyY3B1X2Jhc2UoY3B1aWQpOwotCiAJc21wX3NldHVwX3BlcmNwdV90aW1lcigpOwogCiAJaWYgKGNoZWV0YWhfcGNhY2hlX2ZvcmNlZF9vbikKQEAgLTMxNiw2ICszMTIsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml0Y19zeW5jX2xvY2ssIGZsYWdzKTsKIH0KIAorZXh0ZXJuIHZvaWQgc3VuNHZfaW5pdF9tb25kb19xdWV1ZXMoaW50IHVzZV9ib290bWVtLCBpbnQgY3B1LCBpbnQgYWxsb2MsIGludCBsb2FkKTsKKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3BhcmM2NF9jcHVfc3RhcnR1cDsKIAogLyogVGhlIE9CUCBjcHUgc3RhcnR1cCBjYWxsYmFjayB0cnVuY2F0ZXMgdGhlIDNyZCBhcmcgY29va2llIHRvCkBAIC0zMzEsMjEgKzMyOSwzMSBAQAogCXVuc2lnbmVkIGxvbmcgY29va2llID0KIAkJKHVuc2lnbmVkIGxvbmcpKCZjcHVfbmV3X3RocmVhZCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCWludCB0aW1lb3V0LCByZXQsIGNwdV9ub2RlOworCWludCB0aW1lb3V0LCByZXQ7CiAKIAlwID0gZm9ya19pZGxlKGNwdSk7CiAJY2FsbGluX2ZsYWcgPSAwOwogCWNwdV9uZXdfdGhyZWFkID0gdGFza190aHJlYWRfaW5mbyhwKTsKIAljcHVfc2V0KGNwdSwgY3B1X2NhbGxvdXRfbWFwKTsKIAotCWNwdV9maW5kX2J5X21pZChjcHUsICZjcHVfbm9kZSk7Ci0JcHJvbV9zdGFydGNwdShjcHVfbm9kZSwgZW50cnksIGNvb2tpZSk7CisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJLyogQWxsb2MgdGhlIG1vbmRvIHF1ZXVlcywgY3B1IHdpbGwgbG9hZCB0aGVtLiAgKi8KKwkJc3VuNHZfaW5pdF9tb25kb19xdWV1ZXMoMCwgY3B1LCAxLCAwKTsKKworCQlwcm9tX3N0YXJ0Y3B1X2NwdWlkKGNwdSwgZW50cnksIGNvb2tpZSk7CisJfSBlbHNlIHsKKwkJaW50IGNwdV9ub2RlOworCisJCWNwdV9maW5kX2J5X21pZChjcHUsICZjcHVfbm9kZSk7CisJCXByb21fc3RhcnRjcHUoY3B1X25vZGUsIGVudHJ5LCBjb29raWUpOworCX0KIAogCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCA1MDAwMDAwOyB0aW1lb3V0KyspIHsKIAkJaWYgKGNhbGxpbl9mbGFnKQogCQkJYnJlYWs7CiAJCXVkZWxheSgxMDApOwogCX0KKwogCWlmIChjYWxsaW5fZmxhZykgewogCQlyZXQgPSAwOwogCX0gZWxzZSB7CkBAIC00NDEsNyArNDQ5LDcgQEAKIHN0YXRpYyB2b2lkIGNoZWV0YWhfeGNhbGxfZGVsaXZlcih1NjQgZGF0YTAsIHU2NCBkYXRhMSwgdTY0IGRhdGEyLCBjcHVtYXNrX3QgbWFzaykKIHsKIAl1NjQgcHN0YXRlLCB2ZXI7Ci0JaW50IG5hY2tfYnVzeV9pZCwgaXNfamFsYXBlbm87CisJaW50IG5hY2tfYnVzeV9pZCwgaXNfamJ1czsKIAogCWlmIChjcHVzX2VtcHR5KG1hc2spKQogCQlyZXR1cm47CkBAIC00NTEsNyArNDU5LDggQEAKIAkgKiBkZXJpdmF0aXZlIHByb2Nlc3Nvci4KIAkgKi8KIAlfX2FzbV9fICgicmRwciAlJXZlciwgJTAiIDogIj1yIiAodmVyKSk7Ci0JaXNfamFsYXBlbm8gPSAoKHZlciA+PiAzMikgPT0gMHgwMDNlMDAxNik7CisJaXNfamJ1cyA9ICgodmVyID4+IDMyKSA9PSBfX0pBTEFQRU5PX0lEIHx8CisJCSAgICh2ZXIgPj4gMzIpID09IF9fU0VSUkFOT19JRCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmRwciAlJXBzdGF0ZSwgJTAiIDogIj1yIiAocHN0YXRlKSk7CiAKQEAgLTQ3Niw3ICs0ODUsNyBAQAogCQlmb3JfZWFjaF9jcHVfbWFzayhpLCBtYXNrKSB7CiAJCQl1NjQgdGFyZ2V0ID0gKGkgPDwgMTQpIHwgMHg3MDsKIAotCQkJaWYgKCFpc19qYWxhcGVubykKKwkJCWlmICghaXNfamJ1cykKIAkJCQl0YXJnZXQgfD0gKG5hY2tfYnVzeV9pZCA8PCAyNCk7CiAJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJCQkic3R4YQklJWcwLCBbJTBdICUxXG5cdCIKQEAgLTUyOSw3ICs1MzgsNyBAQAogCQkJZm9yX2VhY2hfY3B1X21hc2soaSwgbWFzaykgewogCQkJCXU2NCBjaGVja19tYXNrOwogCi0JCQkJaWYgKGlzX2phbGFwZW5vKQorCQkJCWlmIChpc19qYnVzKQogCQkJCQljaGVja19tYXNrID0gKDB4MlVMIDw8ICgyKmkpKTsKIAkJCQllbHNlCiAJCQkJCWNoZWNrX21hc2sgPSAoMHgyVUwgPDwKQEAgLTU0NCw2ICs1NTMsMTU1IEBACiAJfQogfQogCisvKiBNdWx0aS1jcHUgbGlzdCB2ZXJzaW9uLiAgKi8KK3N0YXRpYyB2b2lkIGh5cGVydmlzb3JfeGNhbGxfZGVsaXZlcih1NjQgZGF0YTAsIHU2NCBkYXRhMSwgdTY0IGRhdGEyLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlzdHJ1Y3QgdHJhcF9wZXJfY3B1ICp0YjsKKwl1MTYgKmNwdV9saXN0OworCXU2NCAqbW9uZG87CisJY3B1bWFza190IGVycm9yX21hc2s7CisJdW5zaWduZWQgbG9uZyBmbGFncywgc3RhdHVzOworCWludCBjbnQsIHJldHJpZXMsIHRoaXNfY3B1LCBwcmV2X3NlbnQsIGk7CisKKwkvKiBXZSBoYXZlIHRvIGRvIHRoaXMgd2hvbGUgdGhpbmcgd2l0aCBpbnRlcnJ1cHRzIGZ1bGx5IGRpc2FibGVkLgorCSAqIE90aGVyd2lzZSBpZiB3ZSBzZW5kIGFuIHhjYWxsIGZyb20gaW50ZXJydXB0IGNvbnRleHQgaXQgd2lsbAorCSAqIGNvcnJ1cHQgYm90aCBvdXIgbW9uZG8gYmxvY2sgYW5kIGNwdSBsaXN0IHN0YXRlLgorCSAqCisJICogT25lIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMgdGhhdCB3ZSBjYW5ub3QgdXNlIHRpbWVvdXQgbWVjaGFuaXNtcworCSAqIHRoYXQgZGVwZW5kIHVwb24gaW50ZXJydXB0cyBiZWluZyBkZWxpdmVyZWQgbG9jYWxseS4gIFNvLCBmb3IKKwkgKiBleGFtcGxlLCB3ZSBjYW5ub3Qgc2FtcGxlIGppZmZpZXMgYW5kIGV4cGVjdCBpdCB0byBhZHZhbmNlLgorCSAqCisJICogRm9ydHVuYXRlbHksIHVkZWxheSgpIHVzZXMgJXN0aWNrLyV0aWNrIHNvIHdlIGNhbiB1c2UgdGhhdC4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl0YiA9ICZ0cmFwX2Jsb2NrW3RoaXNfY3B1XTsKKworCW1vbmRvID0gX192YSh0Yi0+Y3B1X21vbmRvX2Jsb2NrX3BhKTsKKwltb25kb1swXSA9IGRhdGEwOworCW1vbmRvWzFdID0gZGF0YTE7CisJbW9uZG9bMl0gPSBkYXRhMjsKKwl3bWIoKTsKKworCWNwdV9saXN0ID0gX192YSh0Yi0+Y3B1X2xpc3RfcGEpOworCisJLyogU2V0dXAgdGhlIGluaXRpYWwgY3B1IGxpc3QuICAqLworCWNudCA9IDA7CisJZm9yX2VhY2hfY3B1X21hc2soaSwgbWFzaykKKwkJY3B1X2xpc3RbY250KytdID0gaTsKKworCWNwdXNfY2xlYXIoZXJyb3JfbWFzayk7CisJcmV0cmllcyA9IDA7CisJcHJldl9zZW50ID0gMDsKKwlkbyB7CisJCWludCBmb3J3YXJkX3Byb2dyZXNzLCBuX3NlbnQ7CisKKwkJc3RhdHVzID0gc3VuNHZfY3B1X21vbmRvX3NlbmQoY250LAorCQkJCQkgICAgICB0Yi0+Y3B1X2xpc3RfcGEsCisJCQkJCSAgICAgIHRiLT5jcHVfbW9uZG9fYmxvY2tfcGEpOworCisJCS8qIEhWX0VPSyBtZWFucyBhbGwgY3B1cyByZWNlaXZlZCB0aGUgeGNhbGwsIHdlJ3JlIGRvbmUuICAqLworCQlpZiAobGlrZWx5KHN0YXR1cyA9PSBIVl9FT0spKQorCQkJYnJlYWs7CisKKwkJLyogRmlyc3QsIHNlZSBpZiB3ZSBtYWRlIGFueSBmb3J3YXJkIHByb2dyZXNzLgorCQkgKgorCQkgKiBUaGUgaHlwZXJ2aXNvciBpbmRpY2F0ZXMgc3VjY2Vzc2Z1bCBzZW5kcyBieSBzZXR0aW5nCisJCSAqIGNwdSBsaXN0IGVudHJpZXMgdG8gdGhlIHZhbHVlIDB4ZmZmZi4KKwkJICovCisJCW5fc2VudCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJaWYgKGxpa2VseShjcHVfbGlzdFtpXSA9PSAweGZmZmYpKQorCQkJCW5fc2VudCsrOworCQl9CisKKwkJZm9yd2FyZF9wcm9ncmVzcyA9IDA7CisJCWlmIChuX3NlbnQgPiBwcmV2X3NlbnQpCisJCQlmb3J3YXJkX3Byb2dyZXNzID0gMTsKKworCQlwcmV2X3NlbnQgPSBuX3NlbnQ7CisKKwkJLyogSWYgd2UgZ2V0IGEgSFZfRUNQVUVSUk9SLCB0aGVuIG9uZSBvciBtb3JlIG9mIHRoZSBjcHVzCisJCSAqIGluIHRoZSBsaXN0IGFyZSBpbiBlcnJvciBzdGF0ZS4gIFVzZSB0aGUgY3B1X3N0YXRlKCkKKwkJICogaHlwZXJ2aXNvciBjYWxsIHRvIGZpbmQgb3V0IHdoaWNoIGNwdXMgYXJlIGluIGVycm9yIHN0YXRlLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSBIVl9FQ1BVRVJST1IpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCQlsb25nIGVycjsKKwkJCQl1MTYgY3B1OworCisJCQkJY3B1ID0gY3B1X2xpc3RbaV07CisJCQkJaWYgKGNwdSA9PSAweGZmZmYpCisJCQkJCWNvbnRpbnVlOworCisJCQkJZXJyID0gc3VuNHZfY3B1X3N0YXRlKGNwdSk7CisJCQkJaWYgKGVyciA+PSAwICYmCisJCQkJICAgIGVyciA9PSBIVl9DUFVfU1RBVEVfRVJST1IpIHsKKwkJCQkJY3B1X2xpc3RbaV0gPSAweGZmZmY7CisJCQkJCWNwdV9zZXQoY3B1LCBlcnJvcl9tYXNrKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAodW5saWtlbHkoc3RhdHVzICE9IEhWX0VXT1VMREJMT0NLKSkKKwkJCWdvdG8gZmF0YWxfbW9uZG9fZXJyb3I7CisKKwkJLyogRG9uJ3QgYm90aGVyIHJld3JpdGluZyB0aGUgQ1BVIGxpc3QsIGp1c3QgbGVhdmUgdGhlCisJCSAqIDB4ZmZmZiBhbmQgbm9uLTB4ZmZmZiBlbnRyaWVzIGluIHRoZXJlIGFuZCB0aGUKKwkJICogaHlwZXJ2aXNvciB3aWxsIGRvIHRoZSByaWdodCB0aGluZy4KKwkJICoKKwkJICogT25seSBhZHZhbmNlIHRpbWVvdXQgc3RhdGUgaWYgd2UgZGlkbid0IG1ha2UgYW55CisJCSAqIGZvcndhcmQgcHJvZ3Jlc3MuCisJCSAqLworCQlpZiAodW5saWtlbHkoIWZvcndhcmRfcHJvZ3Jlc3MpKSB7CisJCQlpZiAodW5saWtlbHkoKytyZXRyaWVzID4gMTAwMDApKQorCQkJCWdvdG8gZmF0YWxfbW9uZG9fdGltZW91dDsKKworCQkJLyogRGVsYXkgYSBsaXR0bGUgYml0IHRvIGxldCBvdGhlciBjcHVzIGNhdGNoIHVwCisJCQkgKiBvbiB0aGVpciBjcHUgbW9uZG8gcXVldWUgd29yay4KKwkJCSAqLworCQkJdWRlbGF5KDIgKiBjbnQpOworCQl9CisJfSB3aGlsZSAoMSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAodW5saWtlbHkoIWNwdXNfZW1wdHkoZXJyb3JfbWFzaykpKQorCQlnb3RvIGZhdGFsX21vbmRvX2NwdV9lcnJvcjsKKworCXJldHVybjsKKworZmF0YWxfbW9uZG9fY3B1X2Vycm9yOgorCXByaW50ayhLRVJOX0NSSVQgIkNQVVslZF06IFNVTjRWIG1vbmRvIGNwdSBlcnJvciwgc29tZSB0YXJnZXQgY3B1cyAiCisJICAgICAgICJ3ZXJlIGluIGVycm9yIHN0YXRlXG4iLAorCSAgICAgICB0aGlzX2NwdSk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVWyVkXTogRXJyb3IgbWFzayBbICIsIHRoaXNfY3B1KTsKKwlmb3JfZWFjaF9jcHVfbWFzayhpLCBlcnJvcl9tYXNrKQorCQlwcmludGsoIiVkICIsIGkpOworCXByaW50aygiXVxuIik7CisJcmV0dXJuOworCitmYXRhbF9tb25kb190aW1lb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmludGsoS0VSTl9DUklUICJDUFVbJWRdOiBTVU40ViBtb25kbyB0aW1lb3V0LCBubyBmb3J3YXJkICIKKwkgICAgICAgIiBwcm9ncmVzcyBhZnRlciAlZCByZXRyaWVzLlxuIiwKKwkgICAgICAgdGhpc19jcHUsIHJldHJpZXMpOworCWdvdG8gZHVtcF9jcHVfbGlzdF9hbmRfb3V0OworCitmYXRhbF9tb25kb19lcnJvcjoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVWyVkXTogVW5leHBlY3RlZCBTVU40ViBtb25kbyBlcnJvciAlbHVcbiIsCisJICAgICAgIHRoaXNfY3B1LCBzdGF0dXMpOworCXByaW50ayhLRVJOX0NSSVQgIkNQVVslZF06IEFyZ3Mgd2VyZSBjbnQoJWQpIGNwdWxpc3RfcGEoJWx4KSAiCisJICAgICAgICJtb25kb19ibG9ja19wYSglbHgpXG4iLAorCSAgICAgICB0aGlzX2NwdSwgY250LCB0Yi0+Y3B1X2xpc3RfcGEsIHRiLT5jcHVfbW9uZG9fYmxvY2tfcGEpOworCitkdW1wX2NwdV9saXN0X2FuZF9vdXQ6CisJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVWyVkXTogQ1BVIGxpc3QgWyAiLCB0aGlzX2NwdSk7CisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQlwcmludGsoIiV1ICIsIGNwdV9saXN0W2ldKTsKKwlwcmludGsoIl1cbiIpOworfQorCiAvKiBTZW5kIGNyb3NzIGNhbGwgdG8gYWxsIHByb2Nlc3NvcnMgbWVudGlvbmVkIGluIE1BU0sKICAqIGV4Y2VwdCBzZWxmLgogICovCkBAIC01NTcsOCArNzE1LDEwIEBACiAKIAlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpCiAJCXNwaXRmaXJlX3hjYWxsX2RlbGl2ZXIoZGF0YTAsIGRhdGExLCBkYXRhMiwgbWFzayk7Ci0JZWxzZQorCWVsc2UgaWYgKHRsYl90eXBlID09IGNoZWV0YWggfHwgdGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKQogCQljaGVldGFoX3hjYWxsX2RlbGl2ZXIoZGF0YTAsIGRhdGExLCBkYXRhMiwgbWFzayk7CisJZWxzZQorCQloeXBlcnZpc29yX3hjYWxsX2RlbGl2ZXIoZGF0YTAsIGRhdGExLCBkYXRhMiwgbWFzayk7CiAJLyogTk9URTogQ2FsbGVyIHJ1bnMgbG9jYWwgY29weSBvbiBtYXN0ZXIuICovCiAKIAlwdXRfY3B1KCk7CkBAIC01OTQsMTYgKzc1NCwxMyBAQAogICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCiAgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KICAqLwotaW50IHNtcF9jYWxsX2Z1bmN0aW9uKHZvaWQgKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKLQkJICAgICAgaW50IG5vbmF0b21pYywgaW50IHdhaXQpCitzdGF0aWMgaW50IHNtcF9jYWxsX2Z1bmN0aW9uX21hc2sodm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAorCQkJCSAgaW50IG5vbmF0b21pYywgaW50IHdhaXQsIGNwdW1hc2tfdCBtYXNrKQogewogCXN0cnVjdCBjYWxsX2RhdGFfc3RydWN0IGRhdGE7Ci0JaW50IGNwdXMgPSBudW1fb25saW5lX2NwdXMoKSAtIDE7CisJaW50IGNwdXM7CiAJbG9uZyB0aW1lb3V0OwogCi0JaWYgKCFjcHVzKQotCQlyZXR1cm4gMDsKLQogCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CiAKQEAgLTYxNCw5ICs3NzEsMTQgQEAKIAogCXNwaW5fbG9jaygmY2FsbF9sb2NrKTsKIAorCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOworCWNwdXMgPSBjcHVzX3dlaWdodChtYXNrKTsKKwlpZiAoIWNwdXMpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCWNhbGxfZGF0YSA9ICZkYXRhOwogCi0Jc21wX2Nyb3NzX2NhbGwoJnhjYWxsX2NhbGxfZnVuY3Rpb24sIDAsIDAsIDApOworCXNtcF9jcm9zc19jYWxsX21hc2tlZCgmeGNhbGxfY2FsbF9mdW5jdGlvbiwgMCwgMCwgMCwgbWFzayk7CiAKIAkvKiAKIAkgKiBXYWl0IGZvciBvdGhlciBjcHVzIHRvIGNvbXBsZXRlIGZ1bmN0aW9uIG9yIGF0CkBAIC02MzAsMTggKzc5MiwyNSBAQAogCQl1ZGVsYXkoMSk7CiAJfQogCitvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOwogCiAJcmV0dXJuIDA7CiAKIG91dF90aW1lb3V0OgogCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOwotCXByaW50aygiWENBTEw6IFJlbW90ZSBjcHVzIG5vdCByZXNwb25kaW5nLCBuY3B1cz0lbGQgZmluaXNoZWQ9JWxkXG4iLAotCSAgICAgICAobG9uZykgbnVtX29ubGluZV9jcHVzKCkgLSAxTCwKLQkgICAgICAgKGxvbmcpIGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSk7CisJcHJpbnRrKCJYQ0FMTDogUmVtb3RlIGNwdXMgbm90IHJlc3BvbmRpbmcsIG5jcHVzPSVkIGZpbmlzaGVkPSVkXG4iLAorCSAgICAgICBjcHVzLCBhdG9taWNfcmVhZCgmZGF0YS5maW5pc2hlZCkpOwogCXJldHVybiAwOwogfQogCitpbnQgc21wX2NhbGxfZnVuY3Rpb24odm9pZCAoKmZ1bmMpKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAorCQkgICAgICBpbnQgbm9uYXRvbWljLCBpbnQgd2FpdCkKK3sKKwlyZXR1cm4gc21wX2NhbGxfZnVuY3Rpb25fbWFzayhmdW5jLCBpbmZvLCBub25hdG9taWMsIHdhaXQsCisJCQkJICAgICAgY3B1X29ubGluZV9tYXApOworfQorCiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2NsaWVudChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pID0gY2FsbF9kYXRhLT5mdW5jOwpAQCAtNjU5LDEzICs4MjgsMjUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHRzYl9zeW5jKHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBpbmZvOworCisJaWYgKGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkKKwkJdHNiX2NvbnRleHRfc3dpdGNoKG1tKTsKK30KKwordm9pZCBzbXBfdHNiX3N5bmMoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc21wX2NhbGxfZnVuY3Rpb25fbWFzayh0c2Jfc3luYywgbW0sIDAsIDEsIG1tLT5jcHVfdm1fbWFzayk7Cit9CisKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX2ZsdXNoX3RsYl9tbTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGNhbGxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX2ZsdXNoX3RsYl9hbGxfc3BpdGZpcmU7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9mbHVzaF90bGJfYWxsX2NoZWV0YWg7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9yZXBvcnRfcmVnczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX3JlY2VpdmVfc2lnbmFsOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGNhbGxfbmV3X21tdV9jb250ZXh0X3ZlcnNpb247CiAKICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhjYWxsX2ZsdXNoX2RjYWNoZV9wYWdlX2NoZWV0YWg7CkBAIC02OTMsMTEgKzg3NCwxNyBAQAogdm9pZCBzbXBfZmx1c2hfZGNhY2hlX3BhZ2VfaW1wbChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNwdSkKIHsKIAljcHVtYXNrX3QgbWFzayA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7Ci0JaW50IHRoaXNfY3B1ID0gZ2V0X2NwdSgpOworCWludCB0aGlzX2NwdTsKKworCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQlyZXR1cm47CiAKICNpZmRlZiBDT05GSUdfREVCVUdfRENGTFVTSAogCWF0b21pY19pbmMoJmRjcGFnZV9mbHVzaGVzKTsKICNlbmRpZgorCisJdGhpc19jcHUgPSBnZXRfY3B1KCk7CisKIAlpZiAoY3B1ID09IHRoaXNfY3B1KSB7CiAJCV9fbG9jYWxfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJfSBlbHNlIGlmIChjcHVfb25saW5lKGNwdSkpIHsKQEAgLTcxMyw3ICs5MDAsNyBAQAogCQkJCQkgICAgICAgX19wYShwZ19hZGRyKSwKIAkJCQkJICAgICAgICh1NjQpIHBnX2FkZHIsCiAJCQkJCSAgICAgICBtYXNrKTsKLQkJfSBlbHNlIHsKKwkJfSBlbHNlIGlmICh0bGJfdHlwZSA9PSBjaGVldGFoIHx8IHRsYl90eXBlID09IGNoZWV0YWhfcGx1cykgewogI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQogCQkJZGF0YTAgPQogCQkJCSgodTY0KSZ4Y2FsbF9mbHVzaF9kY2FjaGVfcGFnZV9jaGVldGFoKTsKQEAgLTczNSw3ICs5MjIsMTIgQEAKIAl2b2lkICpwZ19hZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7CiAJdTY0IGRhdGEwOwotCWludCB0aGlzX2NwdSA9IGdldF9jcHUoKTsKKwlpbnQgdGhpc19jcHU7CisKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJcmV0dXJuOworCisJdGhpc19jcHUgPSBnZXRfY3B1KCk7CiAKIAljcHVfY2xlYXIodGhpc19jcHUsIG1hc2spOwogCkBAIC03NTIsNyArOTQ0LDcgQEAKIAkJCQkgICAgICAgX19wYShwZ19hZGRyKSwKIAkJCQkgICAgICAgKHU2NCkgcGdfYWRkciwKIAkJCQkgICAgICAgbWFzayk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKHRsYl90eXBlID09IGNoZWV0YWggfHwgdGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKSB7CiAjaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFCiAJCWRhdGEwID0gKCh1NjQpJnhjYWxsX2ZsdXNoX2RjYWNoZV9wYWdlX2NoZWV0YWgpOwogCQljaGVldGFoX3hjYWxsX2RlbGl2ZXIoZGF0YTAsCkBAIC03NjksNDAgKzk2MSw2MCBAQAogCXB1dF9jcHUoKTsKIH0KIAorc3RhdGljIHZvaWQgX19zbXBfcmVjZWl2ZV9zaWduYWxfbWFzayhjcHVtYXNrX3QgbWFzaykKK3sKKwlzbXBfY3Jvc3NfY2FsbF9tYXNrZWQoJnhjYWxsX3JlY2VpdmVfc2lnbmFsLCAwLCAwLCAwLCBtYXNrKTsKK30KKwogdm9pZCBzbXBfcmVjZWl2ZV9zaWduYWwoaW50IGNwdSkKIHsKIAljcHVtYXNrX3QgbWFzayA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAKLQlpZiAoY3B1X29ubGluZShjcHUpKSB7Ci0JCXU2NCBkYXRhMCA9ICgoKHU2NCkmeGNhbGxfcmVjZWl2ZV9zaWduYWwpICYgMHhmZmZmZmZmZik7Ci0KLQkJaWYgKHRsYl90eXBlID09IHNwaXRmaXJlKQotCQkJc3BpdGZpcmVfeGNhbGxfZGVsaXZlcihkYXRhMCwgMCwgMCwgbWFzayk7Ci0JCWVsc2UKLQkJCWNoZWV0YWhfeGNhbGxfZGVsaXZlcihkYXRhMCwgMCwgMCwgbWFzayk7Ci0JfQorCWlmIChjcHVfb25saW5lKGNwdSkpCisJCV9fc21wX3JlY2VpdmVfc2lnbmFsX21hc2sobWFzayk7CiB9CiAKIHZvaWQgc21wX3JlY2VpdmVfc2lnbmFsX2NsaWVudChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQkvKiBKdXN0IHJldHVybiwgcnRyYXAgdGFrZXMgY2FyZSBvZiB0aGUgcmVzdC4gKi8KIAljbGVhcl9zb2Z0aW50KDEgPDwgaXJxKTsKIH0KIAordm9pZCBzbXBfbmV3X21tdV9jb250ZXh0X3ZlcnNpb25fY2xpZW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljbGVhcl9zb2Z0aW50KDEgPDwgaXJxKTsKKworCS8qIFNlZSBpZiB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IFRMQiBjb250ZXh0IGJlY2F1c2UKKwkgKiB0aGUgdmVyc2lvbiBvZiB0aGUgb25lIHdlIGFyZSB1c2luZyBpcyBub3cgb3V0IG9mIGRhdGUuCisJICovCisJbW0gPSBjdXJyZW50LT5hY3RpdmVfbW07CisJaWYgKHVubGlrZWx5KCFtbSB8fCAobW0gPT0gJmluaXRfbW0pKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1tLT5jb250ZXh0LmxvY2ssIGZsYWdzKTsKKworCWlmICh1bmxpa2VseSghQ1RYX1ZBTElEKG1tLT5jb250ZXh0KSkpCisJCWdldF9uZXdfbW11X2NvbnRleHQobW0pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOworCisJbG9hZF9zZWNvbmRhcnlfY29udGV4dChtbSk7CisJX19mbHVzaF90bGJfbW0oQ1RYX0hXQklUUyhtbS0+Y29udGV4dCksCisJCSAgICAgICBTRUNPTkRBUllfQ09OVEVYVCk7Cit9CisKK3ZvaWQgc21wX25ld19tbXVfY29udGV4dF92ZXJzaW9uKHZvaWQpCit7CisJc21wX2Nyb3NzX2NhbGwoJnhjYWxsX25ld19tbXVfY29udGV4dF92ZXJzaW9uLCAwLCAwLCAwKTsKK30KKwogdm9pZCBzbXBfcmVwb3J0X3JlZ3Modm9pZCkKIHsKIAlzbXBfY3Jvc3NfY2FsbCgmeGNhbGxfcmVwb3J0X3JlZ3MsIDAsIDAsIDApOwogfQogCi12b2lkIHNtcF9mbHVzaF90bGJfYWxsKHZvaWQpCi17Ci0JaWYgKHRsYl90eXBlID09IHNwaXRmaXJlKQotCQlzbXBfY3Jvc3NfY2FsbCgmeGNhbGxfZmx1c2hfdGxiX2FsbF9zcGl0ZmlyZSwgMCwgMCwgMCk7Ci0JZWxzZQotCQlzbXBfY3Jvc3NfY2FsbCgmeGNhbGxfZmx1c2hfdGxiX2FsbF9jaGVldGFoLCAwLCAwLCAwKTsKLQlfX2ZsdXNoX3RsYl9hbGwoKTsKLX0KLQogLyogV2Uga25vdyB0aGF0IHRoZSB3aW5kb3cgZnJhbWVzIG9mIHRoZSB1c2VyIGhhdmUgYmVlbiBmbHVzaGVkCiAgKiB0byB0aGUgc3RhY2sgYmVmb3JlIHdlIGdldCBoZXJlIGJlY2F1c2UgYWxsIGNhbGxlcnMgb2YgdXMKICAqIGFyZSBmbHVzaF90bGJfKigpIHJvdXRpbmVzLCBhbmQgdGhlc2UgcnVuIGFmdGVyIGZsdXNoX2NhY2hlXyooKQpAQCAtOTQ0LDI0ICsxMTU2LDE5IEBACiAgKiBjYW4gc2VydmljZSB0bGIgZmx1c2ggeGNhbGxzLi4uCiAgKi8KIGV4dGVybiB2b2lkIHByb21fd29ybGQoaW50KTsKLWV4dGVybiB2b2lkIHNhdmVfYWx0ZXJuYXRlX2dsb2JhbHModW5zaWduZWQgbG9uZyAqKTsKLWV4dGVybiB2b2lkIHJlc3RvcmVfYWx0ZXJuYXRlX2dsb2JhbHModW5zaWduZWQgbG9uZyAqKTsKKwogdm9pZCBzbXBfcGVuZ3Vpbl9qYWlsY2VsbChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl1bnNpZ25lZCBsb25nIGdsb2JhbF9zYXZlWzI0XTsKLQogCWNsZWFyX3NvZnRpbnQoMSA8PCBpcnEpOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2h3Iik7Ci0Jc2F2ZV9hbHRlcm5hdGVfZ2xvYmFscyhnbG9iYWxfc2F2ZSk7CiAJcHJvbV93b3JsZCgxKTsKIAlhdG9taWNfaW5jKCZzbXBfY2FwdHVyZV9yZWdpc3RyeSk7CiAJbWVtYmFyX3N0b3JlbG9hZF9zdG9yZXN0b3JlKCk7CiAJd2hpbGUgKHBlbmd1aW5zX2FyZV9kb2luZ190aW1lKQogCQlybWIoKTsKLQlyZXN0b3JlX2FsdGVybmF0ZV9nbG9iYWxzKGdsb2JhbF9zYXZlKTsKIAlhdG9taWNfZGVjKCZzbXBfY2FwdHVyZV9yZWdpc3RyeSk7CiAJcHJvbV93b3JsZCgwKTsKIApAQCAtMTA3MSw3ICsxMjc4LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJvZl9zZXR1cF9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKKwlmb3JfZWFjaF9jcHUoaSkKIAkJcHJvZl9tdWx0aXBsaWVyKGkpID0gbXVsdGlwbGllcjsKIAljdXJyZW50X3RpY2tfb2Zmc2V0ID0gKHRpbWVyX3RpY2tfb2Zmc2V0IC8gbXVsdGlwbGllcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvZl9zZXR1cF9sb2NrLCBmbGFncyk7CkBAIC0xMDc5LDE4ICsxMjg2LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIENvbnN0cmFpbiB0aGUgbnVtYmVyIG9mIGNwdXMgdG8gbWF4X2NwdXMuICAqLwogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7Ci0JaW50IGluc3RhbmNlLCBtaWQ7Ci0KLQlpbnN0YW5jZSA9IDA7Ci0Jd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShpbnN0YW5jZSwgTlVMTCwgJm1pZCkpIHsKLQkJaWYgKG1pZCA8IG1heF9jcHVzKQotCQkJY3B1X3NldChtaWQsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKLQkJaW5zdGFuY2UrKzsKLQl9CisJaW50IGk7CiAKIAlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IG1heF9jcHVzKSB7CisJCWludCBpbnN0YW5jZSwgbWlkOworCiAJCWluc3RhbmNlID0gMDsKIAkJd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShpbnN0YW5jZSwgTlVMTCwgJm1pZCkpIHsKIAkJCWlmIChtaWQgIT0gYm9vdF9jcHVfaWQpIHsKQEAgLTExMDIsMTcgKzEzMDUsNTAgQEAKIAkJfQogCX0KIAorCWZvcl9lYWNoX2NwdShpKSB7CisJCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CisJCQlpbnQgajsKKworCQkJLyogWFhYIGdldCB0aGlzIG1hcHBpbmcgZnJvbSBtYWNoaW5lIGRlc2NyaXB0aW9uICovCisJCQlmb3JfZWFjaF9jcHUoaikgeworCQkJCWlmICgoaiA+PiAyKSA9PSAoaSA+PiAyKSkKKwkJCQkJY3B1X3NldChqLCBjcHVfc2libGluZ19tYXBbaV0pOworCQkJfQorCQl9IGVsc2UgeworCQkJY3B1X3NldChpLCBjcHVfc2libGluZ19tYXBbaV0pOworCQl9CisJfQorCiAJc21wX3N0b3JlX2NwdV9pbmZvKGJvb3RfY3B1X2lkKTsKIH0KIAorLyogU2V0IHRoaXMgdXAgZWFybHkgc28gdGhhdCB0aGluZ3MgbGlrZSB0aGUgc2NoZWR1bGVyIGNhbiBpbml0CisgKiBwcm9wZXJseS4gIFdlIHVzZSB0aGUgc2FtZSBjcHUgbWFzayBmb3IgYm90aCB0aGUgcHJlc2VudCBhbmQKKyAqIHBvc3NpYmxlIGNwdSBtYXAuCisgKi8KK3ZvaWQgX19pbml0IHNtcF9zZXR1cF9jcHVfcG9zc2libGVfbWFwKHZvaWQpCit7CisJaW50IGluc3RhbmNlLCBtaWQ7CisKKwlpbnN0YW5jZSA9IDA7CisJd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShpbnN0YW5jZSwgTlVMTCwgJm1pZCkpIHsKKwkJaWYgKG1pZCA8IE5SX0NQVVMpCisJCQljcHVfc2V0KG1pZCwgcGh5c19jcHVfcHJlc2VudF9tYXApOworCQlpbnN0YW5jZSsrOworCX0KK30KKwogdm9pZCBfX2RldmluaXQgc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKIHsKLQlpZiAoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgPj0gTlJfQ1BVUykgeworCWludCBjcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChjcHUgPj0gTlJfQ1BVUykgewogCQlwcm9tX3ByaW50ZigiU2VyaW91cyBwcm9ibGVtLCBib290IGNwdSBpZCA+PSBOUl9DUFVTXG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQogCi0JY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGNwdTsKKwlfX2xvY2FsX3Blcl9jcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldChjcHUpOwogCiAJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKIAljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwpAQCAtMTEyOSw3ICsxMzY1LDExIEBACiAJCWlmICghY3B1X2lzc2V0KGNwdSwgY3B1X29ubGluZV9tYXApKSB7CiAJCQlyZXQgPSAtRU5PREVWOwogCQl9IGVsc2UgewotCQkJc21wX3N5bmNocm9uaXplX29uZV90aWNrKGNwdSk7CisJCQkvKiBPbiBTVU40Viwgd3JpdGVzIHRvICV0aWNrIGFuZCAlc3RpY2sgYXJlCisJCQkgKiBub3QgYWxsb3dlZC4KKwkJCSAqLworCQkJaWYgKHRsYl90eXBlICE9IGh5cGVydmlzb3IpCisJCQkJc21wX3N5bmNocm9uaXplX29uZV90aWNrKGNwdSk7CiAJCX0KIAl9CiAJcmV0dXJuIHJldDsKQEAgLTExNDAsMTAgKzEzODAsOCBAQAogCXVuc2lnbmVkIGxvbmcgYm9nb3N1bSA9IDA7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmIChjcHVfb25saW5lKGkpKQotCQkJYm9nb3N1bSArPSBjcHVfZGF0YShpKS51ZGVsYXlfdmFsOwotCX0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCisJCWJvZ29zdW0gKz0gY3B1X2RhdGEoaSkudWRlbGF5X3ZhbDsKIAlwcmludGsoIlRvdGFsIG9mICVsZCBwcm9jZXNzb3JzIGFjdGl2YXRlZCAiCiAJICAgICAgICIoJWx1LiUwMmx1IEJvZ29NSVBTKS5cbiIsCiAJICAgICAgIChsb25nKSBudW1fb25saW5lX2NwdXMoKSwKQEAgLTExNzMsMTIgKzE0MTEsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZ29hbCwgc2l6ZSwgaTsKIAljaGFyICpwdHI7Ci0JLyogQ3JlYXRlZCBieSBsaW5rZXIgbWFnaWMgKi8KLQlleHRlcm4gY2hhciBfX3Blcl9jcHVfc3RhcnRbXSwgX19wZXJfY3B1X2VuZFtdOwogCiAJLyogQ29weSBzZWN0aW9uIGZvciBlYWNoIENQVSAod2UgZGlzY2FyZCB0aGUgb3JpZ2luYWwpICovCi0JZ29hbCA9IEFMSUdOKF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQsIFBBR0VfU0laRSk7Ci0KKwlnb2FsID0gQUxJR04oX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydCwgU01QX0NBQ0hFX0JZVEVTKTsKICNpZmRlZiBDT05GSUdfTU9EVUxFUwogCWlmIChnb2FsIDwgUEVSQ1BVX0VOT1VHSF9ST09NKQogCQlnb2FsID0gUEVSQ1BVX0VOT1VHSF9ST09NOwpAQCAtMTE4NywzMSArMTQyMiwxMCBAQAogCWZvciAoc2l6ZSA9IDFVTDsgc2l6ZSA8IGdvYWw7IHNpemUgPDw9IDFVTCkKIAkJX19wZXJfY3B1X3NoaWZ0Kys7CiAKLQkvKiBNYWtlIHN1cmUgdGhlIHJlc3VsdGluZyBfX3Blcl9jcHVfYmFzZSB2YWx1ZQotCSAqIHdpbGwgZml0IGluIHRoZSA0My1iaXQgc2lnbiBleHRlbmRlZCBJTU1VCi0JICogVFNCIHJlZ2lzdGVyLgotCSAqLwotCXB0ciA9IF9fYWxsb2NfYm9vdG1lbShzaXplICogTlJfQ1BVUywgUEFHRV9TSVpFLAotCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIF9fcGVyX2NwdV9zdGFydCk7CisJcHRyID0gYWxsb2NfYm9vdG1lbShzaXplICogTlJfQ1BVUyk7CiAKIAlfX3Blcl9jcHVfYmFzZSA9IHB0ciAtIF9fcGVyX2NwdV9zdGFydDsKIAotCWlmICgoX19wZXJfY3B1X3NoaWZ0IDwgUEFHRV9TSElGVCkgfHwKLQkgICAgKF9fcGVyX2NwdV9iYXNlICYgflBBR0VfTUFTSykgfHwKLQkgICAgKF9fcGVyX2NwdV9iYXNlICE9ICgoKGxvbmcpIF9fcGVyX2NwdV9iYXNlIDw8IDIwKSA+PiAyMCkpKSB7Ci0JCXByb21fcHJpbnRmKCJQRVJfQ1BVOiBJbnZhbGlkIGxheW91dCwgIgotCQkJICAgICJwdHJbJXBdIHNoaWZ0WyVseF0gYmFzZVslbHhdXG4iLAotCQkJICAgIHB0ciwgX19wZXJfY3B1X3NoaWZ0LCBfX3Blcl9jcHVfYmFzZSk7Ci0JCXByb21faGFsdCgpOwotCX0KLQogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyssIHB0ciArPSBzaXplKQogCQltZW1jcHkocHRyLCBfX3Blcl9jcHVfc3RhcnQsIF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQpOwotCi0JLyogRmluYWxseSwgbG9hZCBpbiB0aGUgYm9vdCBjcHUncyBiYXNlIHZhbHVlLgotCSAqIFdlIGFidXNlIHRoZSBJTU1VIFRTQiByZWdpc3RlciBmb3IgdHJhcCBoYW5kbGVyCi0JICogZW50cnkgYW5kIGV4aXQgbG9hZGluZyBvZiAlZzUuICBUaGF0IGlzIHdoeSBpdAotCSAqIGhhcyB0byBiZSBwYWdlIGFsaWduZWQuCi0JICovCi0JY3B1X3NldHVwX3BlcmNwdV9iYXNlKGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3BhcmM2NF9rc3ltcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKaW5kZXggM2MwNmJmYi4uOTkxNGExNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zcGFyYzY0X2tzeW1zLmMKQEAgLTk1LDkgKzk1LDYgQEAKIAogZXh0ZXJuIGludCBkdW1wX2ZwdSAoc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBlbGZfZnByZWdzZXRfdCAqIGZwcmVncyk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfYmFzZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHBmbl9iYXNlOwotCiBleHRlcm4gdW5zaWduZWQgaW50IHN5c19jYWxsX3RhYmxlW107CiAKIGV4dGVybiB2b2lkIHhvcl92aXNfMih1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CkBAIC0xMDgsNiArMTA1LDE0IEBACiBleHRlcm4gdm9pZCB4b3JfdmlzXzUodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOwogCitleHRlcm4gdm9pZCB4b3JfbmlhZ2FyYV8yKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIHhvcl9uaWFnYXJhXzModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCisJCQkgIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfbmlhZ2FyYV80KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkJICB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfbmlhZ2FyYV81KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkJICB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKKwogLyogUGVyLUNQVSBpbmZvcm1hdGlvbiB0YWJsZSAqLwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKF9fY3B1X2RhdGEpOwogCkBAIC0yNDEsMTAgKzI0Niw2IEBACiAjZW5kaWYKIAogRVhQT1JUX1NZTUJPTChkdW1wX2ZwdSk7Ci1FWFBPUlRfU1lNQk9MKHB0ZV9hbGxvY19vbmVfa2VybmVsKTsKLSNpZm5kZWYgQ09ORklHX1NNUAotRVhQT1JUX1NZTUJPTChwZ3RfcXVpY2tsaXN0cyk7Ci0jZW5kaWYKIEVYUE9SVF9TWU1CT0wocHV0X2ZzX3N0cnVjdCk7CiAKIC8qIG1hdGgtZW11IHdhbnRzIHRoaXMgKi8KQEAgLTMzOSwxNCArMzQwLDEwIEBACiBFWFBPUlRfU1lNQk9MKGNvcHlfZnJvbV91c2VyX2ZpeHVwKTsKIEVYUE9SVF9TWU1CT0woY29weV9pbl91c2VyX2ZpeHVwKTsKIEVYUE9SVF9TWU1CT0woX19zdHJuY3B5X2Zyb21fdXNlcik7Ci1FWFBPUlRfU1lNQk9MKF9fYnplcm9fbm9hc2kpOworRVhQT1JUX1NZTUJPTChfX2NsZWFyX3VzZXIpOwogCiAvKiBWYXJpb3VzIGFkZHJlc3MgY29udmVyc2lvbiBtYWNyb3MgdXNlIHRoaXMuICovCi1FWFBPUlRfU1lNQk9MKHBoeXNfYmFzZSk7Ci1FWFBPUlRfU1lNQk9MKHBmbl9iYXNlKTsKIEVYUE9SVF9TWU1CT0woc3BhcmM2NF92YWxpZF9hZGRyX2JpdG1hcCk7Ci1FWFBPUlRfU1lNQk9MKHBhZ2VfdG9fcGZuKTsKLUVYUE9SVF9TWU1CT0wocGZuX3RvX3BhZ2UpOwogCiAvKiBObyB2ZXJzaW9uIGluZm9ybWF0aW9uIG9uIHRoaXMsIGhlYXZpbHkgdXNlZCBpbiBpbmxpbmUgYXNtLAogICogYW5kIHdpbGwgYWx3YXlzIGJlICd2b2lkIF9fcmV0X2VmYXVsdCh2b2lkKScuCkBAIC0zOTIsNCArMzg5LDkgQEAKIEVYUE9SVF9TWU1CT0woeG9yX3Zpc180KTsKIEVYUE9SVF9TWU1CT0woeG9yX3Zpc181KTsKIAorRVhQT1JUX1NZTUJPTCh4b3JfbmlhZ2FyYV8yKTsKK0VYUE9SVF9TWU1CT0woeG9yX25pYWdhcmFfMyk7CitFWFBPUlRfU1lNQk9MKHhvcl9uaWFnYXJhXzQpOworRVhQT1JUX1NZTUJPTCh4b3JfbmlhZ2FyYV81KTsKKwogRVhQT1JUX1NZTUJPTChwcm9tX3BhbGV0dGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl9pdmVjLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N1bjR2X2l2ZWMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDlhNjhiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl9pdmVjLlMKQEAgLTAsMCArMSwzMzQgQEAKKy8qIHN1bjR2X2l2ZWMuUzogU3VuNHYgaW50ZXJydXB0IHZlY3RvciBoYW5kbGluZy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CisjaW5jbHVkZSA8YXNtL2ludHJfcXVldWUuaD4KKworCS50ZXh0CisJLmFsaWduCTMyCisKK3N1bjR2X2NwdV9tb25kbzoKKwkvKiBIZWFkIG9mZnNldCBpbiAlZzIsIHRhaWwgb2Zmc2V0IGluICVnNC4KKwkgKiBJZiB0aGV5IGFyZSB0aGUgc2FtZSwgbm8gd29yay4KKwkgKi8KKwltb3YJSU5UUlFfQ1BVX01PTkRPX0hFQUQsICVnMgorCWxkeGEJWyVnMl0gQVNJX1FVRVVFLCAlZzIKKwltb3YJSU5UUlFfQ1BVX01PTkRPX1RBSUwsICVnNAorCWxkeGEJWyVnNF0gQVNJX1FVRVVFLCAlZzQKKwljbXAJJWcyLCAlZzQKKwliZSxwbgkleGNjLCBzdW40dl9jcHVfbW9uZG9fcXVldWVfZW1wdHkKKwkgbm9wCisKKwkvKiBHZXQgJnRyYXBfYmxvY2tbc21wX3Byb2Nlc3Nvcl9pZCgpXSBpbnRvICVnMy4gICovCisJbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWczCisJc3ViCSVnMywgVFJBUF9QRVJfQ1BVX0ZBVUxUX0lORk8sICVnMworCisJLyogR2V0IENQVSBtb25kbyBxdWV1ZSBiYXNlIHBoeXMgYWRkcmVzcyBpbnRvICVnNy4gICovCisJbGR4CVslZzMgKyBUUkFQX1BFUl9DUFVfQ1BVX01PTkRPX1BBXSwgJWc3CisKKwkvKiBOb3cgZ2V0IHRoZSBjcm9zcy1jYWxsIGFyZ3VtZW50cyBhbmQgaGFuZGxlciBQQywgc2FtZQorCSAqIGxheW91dCBhcyBzdW40dToKKwkgKgorCSAqIDFzdCA2NC1iaXQgd29yZDogbG93IGhhbGYgaXMgMzItYml0IFBDLCBwdXQgaW50byAlZzMgYW5kIGptcGwgdG8gaXQKKwkgKiAgICAgICAgICAgICAgICAgIGhpZ2ggaGFsZiBpcyBjb250ZXh0IGFyZyB0byBNTVUgZmx1c2hlcywgaW50byAlZzUKKwkgKiAybmQgNjQtYml0IHdvcmQ6IDY0LWJpdCBhcmcsIGxvYWQgaW50byAlZzEKKwkgKiAzcmQgNjQtYml0IHdvcmQ6IDY0LWJpdCBhcmcsIGxvYWQgaW50byAlZzcKKwkgKi8KKwlsZHhhCVslZzcgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQywgJWczCisJYWRkCSVnMiwgMHg4LCAlZzIKKwlzcmx4CSVnMywgMzIsICVnNQorCWxkeGEJWyVnNyArICVnMl0gQVNJX1BIWVNfVVNFX0VDLCAlZzEKKwlhZGQJJWcyLCAweDgsICVnMgorCXNybAklZzMsIDAsICVnMworCWxkeGEJWyVnNyArICVnMl0gQVNJX1BIWVNfVVNFX0VDLCAlZzcKKwlhZGQJJWcyLCAweDQwIC0gMHg4IC0gMHg4LCAlZzIKKworCS8qIFVwZGF0ZSBxdWV1ZSBoZWFkIHBvaW50ZXIuICAqLworCXNldGhpCSVoaSg4MTkyIC0gMSksICVnNAorCW9yCSVnNCwgJWxvKDgxOTIgLSAxKSwgJWc0CisJYW5kCSVnMiwgJWc0LCAlZzIKKworCW1vdglJTlRSUV9DUFVfTU9ORE9fSEVBRCwgJWc0CisJc3R4YQklZzIsIFslZzRdIEFTSV9RVUVVRQorCW1lbWJhcgkjU3luYworCisJam1wbAklZzMsICVnMAorCSBub3AKKworc3VuNHZfY3B1X21vbmRvX3F1ZXVlX2VtcHR5OgorCXJldHJ5CisKK3N1bjR2X2Rldl9tb25kbzoKKwkvKiBIZWFkIG9mZnNldCBpbiAlZzIsIHRhaWwgb2Zmc2V0IGluICVnNC4gICovCisJbW92CUlOVFJRX0RFVklDRV9NT05ET19IRUFELCAlZzIKKwlsZHhhCVslZzJdIEFTSV9RVUVVRSwgJWcyCisJbW92CUlOVFJRX0RFVklDRV9NT05ET19UQUlMLCAlZzQKKwlsZHhhCVslZzRdIEFTSV9RVUVVRSwgJWc0CisJY21wCSVnMiwgJWc0CisJYmUscG4JJXhjYywgc3VuNHZfZGV2X21vbmRvX3F1ZXVlX2VtcHR5CisJIG5vcAorCisJLyogR2V0ICZ0cmFwX2Jsb2NrW3NtcF9wcm9jZXNzb3JfaWQoKV0gaW50byAlZzMuICAqLworCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnMworCXN1YgklZzMsIFRSQVBfUEVSX0NQVV9GQVVMVF9JTkZPLCAlZzMKKworCS8qIEdldCBERVYgbW9uZG8gcXVldWUgYmFzZSBwaHlzIGFkZHJlc3MgaW50byAlZzUuICAqLworCWxkeAlbJWczICsgVFJBUF9QRVJfQ1BVX0RFVl9NT05ET19QQV0sICVnNQorCisJLyogTG9hZCBJVkVDIGludG8gJWczLiAgKi8KKwlsZHhhCVslZzUgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQywgJWczCisJYWRkCSVnMiwgMHg0MCwgJWcyCisKKwkvKiBYWFggVGhlcmUgY2FuIGJlIGEgZnVsbCA2NC1ieXRlIGJsb2NrIG9mIGRhdGEgaGVyZS4KKwkgKiBYWFggVGhpcyBpcyBob3cgd2UgY2FuIGdldCBhdCBNU0kgdmVjdG9yIGRhdGEuCisJICogWFhYIEN1cnJlbnQgd2UgZG8gbm90IGNhcHR1cmUgdGhpcywgYnV0IHdoZW4gd2UgZG8gd2UnbGwKKwkgKiBYWFggbmVlZCB0byBhZGQgYSA2NC1ieXRlIHN0b3JhZ2UgYXJlYSBpbiB0aGUgc3RydWN0IGlub19idWNrZXQKKwkgKiBYWFggb3IgdGhlIHN0cnVjdCBpcnFfZGVzYy4KKwkgKi8KKworCS8qIFVwZGF0ZSBxdWV1ZSBoZWFkIHBvaW50ZXIsIHRoaXMgZnJlZXMgdXAgc29tZSByZWdpc3RlcnMuICAqLworCXNldGhpCSVoaSg4MTkyIC0gMSksICVnNAorCW9yCSVnNCwgJWxvKDgxOTIgLSAxKSwgJWc0CisJYW5kCSVnMiwgJWc0LCAlZzIKKworCW1vdglJTlRSUV9ERVZJQ0VfTU9ORE9fSEVBRCwgJWc0CisJc3R4YQklZzIsIFslZzRdIEFTSV9RVUVVRQorCW1lbWJhcgkjU3luYworCisJLyogR2V0ICZfX2lycV93b3JrW3NtcF9wcm9jZXNzb3JfaWQoKV0gaW50byAlZzEuICAqLworCVRSQVBfTE9BRF9JUlFfV09SSyglZzEsICVnNCkKKworCS8qIEdldCAmaXZlY3Rvcl90YWJsZVtJVkVDXSBpbnRvICVnNC4gICovCisJc2V0aGkJJWhpKGl2ZWN0b3JfdGFibGUpLCAlZzQKKwlzbGx4CSVnMywgNSwgJWczCisJb3IJJWc0LCAlbG8oaXZlY3Rvcl90YWJsZSksICVnNAorCWFkZAklZzQsICVnMywgJWc0CisKKwkvKiBMb2FkIElSUSAlcGlsIGludG8gJWc1LiAgKi8KKwlsZHViCVslZzQgKyAweDA0XSwgJWc1CisKKwkvKiBJbnNlcnQgaXZlY3Rvcl90YWJsZVtdIGVudHJ5IGludG8gX19pcnFfd29ya1tdIHF1ZXVlLiAgKi8KKwlzbGx4CSVnNSwgMiwgJWczCisJbGR1dwlbJWcxICsgJWczXSwgJWcyCS8qIGcyID0gaXJxX3dvcmsoY3B1LCBwaWwpICovCisJc3R3CSVnMiwgWyVnNCArIDB4MDBdCS8qIGJ1Y2tldC0+aXJxX2NoYWluID0gZzIgKi8KKwlzdHcJJWc0LCBbJWcxICsgJWczXQkvKiBpcnFfd29yayhjcHUsIHBpbCkgPSBidWNrZXQgKi8KKworCS8qIFNpZ25hbCB0aGUgaW50ZXJydXB0IGJ5IHNldHRpbmcgKDEgPDwgcGlsKSBpbiAlc29mdGludC4gICovCisJbW92CTEsICVnMgorCXNsbHgJJWcyLCAlZzUsICVnMgorCXdyCSVnMiwgMHgwLCAlc2V0X3NvZnRpbnQKKworc3VuNHZfZGV2X21vbmRvX3F1ZXVlX2VtcHR5OgorCXJldHJ5CisKK3N1bjR2X3Jlc19tb25kbzoKKwkvKiBIZWFkIG9mZnNldCBpbiAlZzIsIHRhaWwgb2Zmc2V0IGluICVnNC4gICovCisJbW92CUlOVFJRX1JFU1VNX01PTkRPX0hFQUQsICVnMgorCWxkeGEJWyVnMl0gQVNJX1FVRVVFLCAlZzIKKwltb3YJSU5UUlFfUkVTVU1fTU9ORE9fVEFJTCwgJWc0CisJbGR4YQlbJWc0XSBBU0lfUVVFVUUsICVnNAorCWNtcAklZzIsICVnNAorCWJlLHBuCSV4Y2MsIHN1bjR2X3Jlc19tb25kb19xdWV1ZV9lbXB0eQorCSBub3AKKworCS8qIEdldCAmdHJhcF9ibG9ja1tzbXBfcHJvY2Vzc29yX2lkKCldIGludG8gJWczLiAgKi8KKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzMKKwlzdWIJJWczLCBUUkFQX1BFUl9DUFVfRkFVTFRfSU5GTywgJWczCisKKwkvKiBHZXQgUkVTIG1vbmRvIHF1ZXVlIGJhc2UgcGh5cyBhZGRyZXNzIGludG8gJWc1LiAgKi8KKwlsZHgJWyVnMyArIFRSQVBfUEVSX0NQVV9SRVNVTV9NT05ET19QQV0sICVnNQorCisJLyogR2V0IFJFUyBrZXJuZWwgYnVmZmVyIGJhc2UgcGh5cyBhZGRyZXNzIGludG8gJWc3LiAgKi8KKwlsZHgJWyVnMyArIFRSQVBfUEVSX0NQVV9SRVNVTV9LQlVGX1BBXSwgJWc3CisKKwkvKiBJZiB0aGUgZmlyc3Qgd29yZCBpcyBub24temVybywgcXVldWUgaXMgZnVsbC4gICovCisJbGR4YQlbJWc3ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMsICVnMQorCWJybnoscG4JJWcxLCBzdW40dl9yZXNfbW9uZG9fcXVldWVfZnVsbAorCSBub3AKKworCS8qIFJlbWVtYmVyIHRoaXMgZW50cnkncyBvZmZzZXQgaW4gJWcxLiAgKi8KKwltb3YJJWcyLCAlZzEKKworCS8qIENvcHkgNjQtYnl0ZSBxdWV1ZSBlbnRyeSBpbnRvIGtlcm5lbCBidWZmZXIuICAqLworCWxkeGEJWyVnNSArICVnMl0gQVNJX1BIWVNfVVNFX0VDLCAlZzMKKwlzdHhhCSVnMywgWyVnNyArICVnMl0gQVNJX1BIWVNfVVNFX0VDCisJYWRkCSVnMiwgMHgwOCwgJWcyCisJbGR4YQlbJWc1ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMsICVnMworCXN0eGEJJWczLCBbJWc3ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMKKwlhZGQJJWcyLCAweDA4LCAlZzIKKwlsZHhhCVslZzUgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQywgJWczCisJc3R4YQklZzMsIFslZzcgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQworCWFkZAklZzIsIDB4MDgsICVnMgorCWxkeGEJWyVnNSArICVnMl0gQVNJX1BIWVNfVVNFX0VDLCAlZzMKKwlzdHhhCSVnMywgWyVnNyArICVnMl0gQVNJX1BIWVNfVVNFX0VDCisJYWRkCSVnMiwgMHgwOCwgJWcyCisJbGR4YQlbJWc1ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMsICVnMworCXN0eGEJJWczLCBbJWc3ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMKKwlhZGQJJWcyLCAweDA4LCAlZzIKKwlsZHhhCVslZzUgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQywgJWczCisJc3R4YQklZzMsIFslZzcgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQworCWFkZAklZzIsIDB4MDgsICVnMgorCWxkeGEJWyVnNSArICVnMl0gQVNJX1BIWVNfVVNFX0VDLCAlZzMKKwlzdHhhCSVnMywgWyVnNyArICVnMl0gQVNJX1BIWVNfVVNFX0VDCisJYWRkCSVnMiwgMHgwOCwgJWcyCisJbGR4YQlbJWc1ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMsICVnMworCXN0eGEJJWczLCBbJWc3ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMKKwlhZGQJJWcyLCAweDA4LCAlZzIKKworCS8qIFVwZGF0ZSBxdWV1ZSBoZWFkIHBvaW50ZXIuICAqLworCXNldGhpCSVoaSg4MTkyIC0gMSksICVnNAorCW9yCSVnNCwgJWxvKDgxOTIgLSAxKSwgJWc0CisJYW5kCSVnMiwgJWc0LCAlZzIKKworCW1vdglJTlRSUV9SRVNVTV9NT05ET19IRUFELCAlZzQKKwlzdHhhCSVnMiwgWyVnNF0gQVNJX1FVRVVFCisJbWVtYmFyCSNTeW5jCisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgYW5kIHNhdmUgcmVnaXN0ZXIgc3RhdGUgc28gd2UgY2FuIGNhbGwKKwkgKiBDIGNvZGUuICBUaGUgZXRyYXAgaGFuZGxpbmcgd2lsbCBsZWF2ZSAlZzQgaW4gJWw0IGZvciB1cworCSAqIHdoZW4gaXQncyBkb25lLgorCSAqLworCXJkcHIJJXBpbCwgJWcyCisJd3JwcgklZzAsIDE1LCAlcGlsCisJbW92CSVnMSwgJWc0CisJYmEscHQJJXhjYywgZXRyYXBfaXJxCisJIHJkCSVwYywgJWc3CisKKwkvKiBMb2cgdGhlIGV2ZW50LiAgKi8KKwlhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKKwljYWxsCXN1bjR2X3Jlc3VtX2Vycm9yCisJIG1vdgklbDQsICVvMQorCisJLyogUmV0dXJuIGZyb20gdHJhcC4gICovCisJYmEscHQJJXhjYywgcnRyYXBfaXJxCisJIG5vcAorCitzdW40dl9yZXNfbW9uZG9fcXVldWVfZW1wdHk6CisJcmV0cnkKKworc3VuNHZfcmVzX21vbmRvX3F1ZXVlX2Z1bGw6CisJLyogVGhlIHF1ZXVlIGlzIGZ1bGwsIGNvbnNvbGlkYXRlIG91ciBkYW1hZ2UgYnkgc2V0dGluZworCSAqIHRoZSBoZWFkIGVxdWFsIHRvIHRoZSB0YWlsLiAgV2UnbGwganVzdCB0cmFwIGFnYWluIG90aGVyd2lzZS4KKwkgKiBDYWxsIEMgY29kZSB0byBsb2cgdGhlIGV2ZW50LgorCSAqLworCW1vdglJTlRSUV9SRVNVTV9NT05ET19IRUFELCAlZzIKKwlzdHhhCSVnNCwgWyVnMl0gQVNJX1FVRVVFCisJbWVtYmFyCSNTeW5jCisKKwlyZHByCSVwaWwsICVnMgorCXdycHIJJWcwLCAxNSwgJXBpbAorCWJhLHB0CSV4Y2MsIGV0cmFwX2lycQorCSByZAklcGMsICVnNworCisJY2FsbAlzdW40dl9yZXN1bV9vdmVyZmxvdworCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKKworCWJhLHB0CSV4Y2MsIHJ0cmFwX2lycQorCSBub3AKKworc3VuNHZfbm9ucmVzX21vbmRvOgorCS8qIEhlYWQgb2Zmc2V0IGluICVnMiwgdGFpbCBvZmZzZXQgaW4gJWc0LiAgKi8KKwltb3YJSU5UUlFfTk9OUkVTVU1fTU9ORE9fSEVBRCwgJWcyCisJbGR4YQlbJWcyXSBBU0lfUVVFVUUsICVnMgorCW1vdglJTlRSUV9OT05SRVNVTV9NT05ET19UQUlMLCAlZzQKKwlsZHhhCVslZzRdIEFTSV9RVUVVRSwgJWc0CisJY21wCSVnMiwgJWc0CisJYmUscG4JJXhjYywgc3VuNHZfbm9ucmVzX21vbmRvX3F1ZXVlX2VtcHR5CisJIG5vcAorCisJLyogR2V0ICZ0cmFwX2Jsb2NrW3NtcF9wcm9jZXNzb3JfaWQoKV0gaW50byAlZzMuICAqLworCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnMworCXN1YgklZzMsIFRSQVBfUEVSX0NQVV9GQVVMVF9JTkZPLCAlZzMKKworCS8qIEdldCBSRVMgbW9uZG8gcXVldWUgYmFzZSBwaHlzIGFkZHJlc3MgaW50byAlZzUuICAqLworCWxkeAlbJWczICsgVFJBUF9QRVJfQ1BVX05PTlJFU1VNX01PTkRPX1BBXSwgJWc1CisKKwkvKiBHZXQgUkVTIGtlcm5lbCBidWZmZXIgYmFzZSBwaHlzIGFkZHJlc3MgaW50byAlZzcuICAqLworCWxkeAlbJWczICsgVFJBUF9QRVJfQ1BVX05PTlJFU1VNX0tCVUZfUEFdLCAlZzcKKworCS8qIElmIHRoZSBmaXJzdCB3b3JkIGlzIG5vbi16ZXJvLCBxdWV1ZSBpcyBmdWxsLiAgKi8KKwlsZHhhCVslZzcgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQywgJWcxCisJYnJueixwbgklZzEsIHN1bjR2X25vbnJlc19tb25kb19xdWV1ZV9mdWxsCisJIG5vcAorCisJLyogUmVtZW1iZXIgdGhpcyBlbnRyeSdzIG9mZnNldCBpbiAlZzEuICAqLworCW1vdgklZzIsICVnMQorCisJLyogQ29weSA2NC1ieXRlIHF1ZXVlIGVudHJ5IGludG8ga2VybmVsIGJ1ZmZlci4gICovCisJbGR4YQlbJWc1ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMsICVnMworCXN0eGEJJWczLCBbJWc3ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMKKwlhZGQJJWcyLCAweDA4LCAlZzIKKwlsZHhhCVslZzUgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQywgJWczCisJc3R4YQklZzMsIFslZzcgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQworCWFkZAklZzIsIDB4MDgsICVnMgorCWxkeGEJWyVnNSArICVnMl0gQVNJX1BIWVNfVVNFX0VDLCAlZzMKKwlzdHhhCSVnMywgWyVnNyArICVnMl0gQVNJX1BIWVNfVVNFX0VDCisJYWRkCSVnMiwgMHgwOCwgJWcyCisJbGR4YQlbJWc1ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMsICVnMworCXN0eGEJJWczLCBbJWc3ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMKKwlhZGQJJWcyLCAweDA4LCAlZzIKKwlsZHhhCVslZzUgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQywgJWczCisJc3R4YQklZzMsIFslZzcgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQworCWFkZAklZzIsIDB4MDgsICVnMgorCWxkeGEJWyVnNSArICVnMl0gQVNJX1BIWVNfVVNFX0VDLCAlZzMKKwlzdHhhCSVnMywgWyVnNyArICVnMl0gQVNJX1BIWVNfVVNFX0VDCisJYWRkCSVnMiwgMHgwOCwgJWcyCisJbGR4YQlbJWc1ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMsICVnMworCXN0eGEJJWczLCBbJWc3ICsgJWcyXSBBU0lfUEhZU19VU0VfRUMKKwlhZGQJJWcyLCAweDA4LCAlZzIKKwlsZHhhCVslZzUgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQywgJWczCisJc3R4YQklZzMsIFslZzcgKyAlZzJdIEFTSV9QSFlTX1VTRV9FQworCWFkZAklZzIsIDB4MDgsICVnMgorCisJLyogVXBkYXRlIHF1ZXVlIGhlYWQgcG9pbnRlci4gICovCisJc2V0aGkJJWhpKDgxOTIgLSAxKSwgJWc0CisJb3IJJWc0LCAlbG8oODE5MiAtIDEpLCAlZzQKKwlhbmQJJWcyLCAlZzQsICVnMgorCisJbW92CUlOVFJRX05PTlJFU1VNX01PTkRPX0hFQUQsICVnNAorCXN0eGEJJWcyLCBbJWc0XSBBU0lfUVVFVUUKKwltZW1iYXIJI1N5bmMKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgc2F2ZSByZWdpc3RlciBzdGF0ZSBzbyB3ZSBjYW4gY2FsbAorCSAqIEMgY29kZS4gIFRoZSBldHJhcCBoYW5kbGluZyB3aWxsIGxlYXZlICVnNCBpbiAlbDQgZm9yIHVzCisJICogd2hlbiBpdCdzIGRvbmUuCisJICovCisJcmRwcgklcGlsLCAlZzIKKwl3cnByCSVnMCwgMTUsICVwaWwKKwltb3YJJWcxLCAlZzQKKwliYSxwdAkleGNjLCBldHJhcF9pcnEKKwkgcmQJJXBjLCAlZzcKKworCS8qIExvZyB0aGUgZXZlbnQuICAqLworCWFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWNhbGwJc3VuNHZfbm9ucmVzdW1fZXJyb3IKKwkgbW92CSVsNCwgJW8xCisKKwkvKiBSZXR1cm4gZnJvbSB0cmFwLiAgKi8KKwliYSxwdAkleGNjLCBydHJhcF9pcnEKKwkgbm9wCisKK3N1bjR2X25vbnJlc19tb25kb19xdWV1ZV9lbXB0eToKKwlyZXRyeQorCitzdW40dl9ub25yZXNfbW9uZG9fcXVldWVfZnVsbDoKKwkvKiBUaGUgcXVldWUgaXMgZnVsbCwgY29uc29saWRhdGUgb3VyIGRhbWFnZSBieSBzZXR0aW5nCisJICogdGhlIGhlYWQgZXF1YWwgdG8gdGhlIHRhaWwuICBXZSdsbCBqdXN0IHRyYXAgYWdhaW4gb3RoZXJ3aXNlLgorCSAqIENhbGwgQyBjb2RlIHRvIGxvZyB0aGUgZXZlbnQuCisJICovCisJbW92CUlOVFJRX05PTlJFU1VNX01PTkRPX0hFQUQsICVnMgorCXN0eGEJJWc0LCBbJWcyXSBBU0lfUVVFVUUKKwltZW1iYXIJI1N5bmMKKworCXJkcHIJJXBpbCwgJWcyCisJd3JwcgklZzAsIDE1LCAlcGlsCisJYmEscHQJJXhjYywgZXRyYXBfaXJxCisJIHJkCSVwYywgJWc3CisKKwljYWxsCXN1bjR2X25vbnJlc3VtX292ZXJmbG93CisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCisJYmEscHQJJXhjYywgcnRyYXBfaXJxCisJIG5vcApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl90bGJfbWlzcy5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zdW40dl90bGJfbWlzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MzE4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N1bjR2X3RsYl9taXNzLlMKQEAgLTAsMCArMSw0MjYgQEAKKy8qIHN1bjR2X3RsYl9taXNzLlM6IFN1bjR2IFRMQiBtaXNzIGhhbmRsZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKyAqLworCisJLnRleHQKKwkuYWxpZ24JMzIKKworCS8qIExvYWQgSVRMQiBmYXVsdCBpbmZvcm1hdGlvbiBpbnRvIFZBRERSIGFuZCBDVFgsIHVzaW5nIEJBU0UuICAqLworI2RlZmluZSBMT0FEX0lUTEJfSU5GTyhCQVNFLCBWQUREUiwgQ1RYKSBcCisJbGR4CVtCQVNFICsgSFZfRkFVTFRfSV9BRERSX09GRlNFVF0sIFZBRERSOyBcCisJbGR4CVtCQVNFICsgSFZfRkFVTFRfSV9DVFhfT0ZGU0VUXSwgQ1RYOworCisJLyogTG9hZCBEVExCIGZhdWx0IGluZm9ybWF0aW9uIGludG8gVkFERFIgYW5kIENUWCwgdXNpbmcgQkFTRS4gICovCisjZGVmaW5lIExPQURfRFRMQl9JTkZPKEJBU0UsIFZBRERSLCBDVFgpIFwKKwlsZHgJW0JBU0UgKyBIVl9GQVVMVF9EX0FERFJfT0ZGU0VUXSwgVkFERFI7IFwKKwlsZHgJW0JBU0UgKyBIVl9GQVVMVF9EX0NUWF9PRkZTRVRdLCBDVFg7CisKKwkvKiBERVNUID0gKFZBRERSID4+IDIyKQorCSAqCisJICogQnJhbmNoIHRvIFpFUk9fQ1RYX0xBQkVMIGlmIGNvbnRleHQgaXMgemVyby4KKwkgKi8KKyNkZWZpbmUJQ09NUFVURV9UQUdfVEFSR0VUKERFU1QsIFZBRERSLCBDVFgsIFpFUk9fQ1RYX0xBQkVMKSBcCisJc3JseAlWQUREUiwgMjIsIERFU1Q7IFwKKwlicnoscG4JQ1RYLCBaRVJPX0NUWF9MQUJFTDsgXAorCSBub3A7CisKKwkvKiBDcmVhdGUgVFNCIHBvaW50ZXIuICBUaGlzIGlzIHNvbWV0aGluZyBsaWtlOgorCSAqCisJICogaW5kZXhfbWFzayA9ICg1MTIgPDwgKHRzYl9yZWcgJiAweDdVTCkpIC0gMVVMOworCSAqIHRzYl9iYXNlID0gdHNiX3JlZyAmIH4weDdVTDsKKwkgKiB0c2JfaW5kZXggPSAoKHZhZGRyID4+IEhBU0hfU0hJRlQpICYgdHNiX21hc2spOworCSAqIHRzYl9wdHIgPSB0c2JfYmFzZSArICh0c2JfaW5kZXggKiAxNik7CisJICovCisjZGVmaW5lIENPTVBVVEVfVFNCX1BUUihUU0JfUFRSLCBWQUREUiwgSEFTSF9TSElGVCwgVE1QMSwgVE1QMikgXAorCWFuZAlUU0JfUFRSLCAweDcsIFRNUDE7CQkJXAorCW1vdgk1MTIsIFRNUDI7CQkJCVwKKwlhbmRuCVRTQl9QVFIsIDB4NywgVFNCX1BUUjsJCQlcCisJc2xseAlUTVAyLCBUTVAxLCBUTVAyOwkJCVwKKwlzcmx4CVZBRERSLCBIQVNIX1NISUZULCBUTVAxOwkJXAorCXN1YglUTVAyLCAxLCBUTVAyOwkJCQlcCisJYW5kCVRNUDEsIFRNUDIsIFRNUDE7CQkJXAorCXNsbHgJVE1QMSwgNCwgVE1QMTsJCQkJXAorCWFkZAlUU0JfUFRSLCBUTVAxLCBUU0JfUFRSOworCitzdW40dl9pdGxiX21pc3M6CisJLyogTG9hZCBNTVUgTWlzcyBiYXNlIGludG8gJWcyLiAgKi8KKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzIKKwkKKwkvKiBMb2FkIFVUU0IgcmVnIGludG8gJWcxLiAgKi8KKwltb3YJU0NSQVRDSFBBRF9VVFNCUkVHMSwgJWcxCisJbGR4YQlbJWcxXSBBU0lfU0NSQVRDSFBBRCwgJWcxCisKKwlMT0FEX0lUTEJfSU5GTyglZzIsICVnNCwgJWc1KQorCUNPTVBVVEVfVEFHX1RBUkdFVCglZzYsICVnNCwgJWc1LCBrdm1hcF9pdGxiXzR2KQorCUNPTVBVVEVfVFNCX1BUUiglZzEsICVnNCwgUEFHRV9TSElGVCwgJWczLCAlZzcpCisKKwkvKiBMb2FkIFRTQiB0YWcvcHRlIGludG8gJWcyLyVnMyBhbmQgY29tcGFyZSB0aGUgdGFnLiAgKi8KKwlsZGRhCVslZzFdIEFTSV9RVUFEX0xERF9QSFlTXzRWLCAlZzIKKwljbXAJJWcyLCAlZzYKKwlibmUsYSxwbiAleGNjLCB0c2JfbWlzc19wYWdlX3RhYmxlX3dhbGsKKwkgbW92CUZBVUxUX0NPREVfSVRMQiwgJWczCisJYW5kY2MJJWczLCBfUEFHRV9FWEVDXzRWLCAlZzAKKwliZSxhLHBuCSV4Y2MsIHRzYl9kb19mYXVsdAorCSBtb3YJRkFVTFRfQ09ERV9JVExCLCAlZzMKKworCS8qIFdlIGhhdmUgYSB2YWxpZCBlbnRyeSwgbWFrZSBoeXBlcnZpc29yIGNhbGwgdG8gbG9hZAorCSAqIEktVExCIGFuZCByZXR1cm4gZnJvbSB0cmFwLgorCSAqCisJICogJWczOglQVEUKKwkgKiAlZzQ6CXZhZGRyCisJICovCitzdW40dl9pdGxiX2xvYWQ6CisJbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWc2CisJbW92CSVvMCwgJWcxCQkhIHNhdmUgJW8wCisJbW92CSVvMSwgJWcyCQkhIHNhdmUgJW8xCisJbW92CSVvMiwgJWc1CQkhIHNhdmUgJW8yCisJbW92CSVvMywgJWc3CQkhIHNhdmUgJW8zCisJbW92CSVnNCwgJW8wCQkhIHZhZGRyCisJbGR4CVslZzYgKyBIVl9GQVVMVF9JX0NUWF9PRkZTRVRdLCAlbzEJISBjdHgKKwltb3YJJWczLCAlbzIJCSEgUFRFCisJbW92CUhWX01NVV9JTU1VLCAlbzMJISBmbGFncworCXRhCUhWX01NVV9NQVBfQUREUl9UUkFQCisJYnJueixwbgklbzAsIHN1bjR2X2l0bGJfZXJyb3IKKwkgbW92CSVnMiwgJW8xCQkhIHJlc3RvcmUgJW8xCisJbW92CSVnMSwgJW8wCQkhIHJlc3RvcmUgJW8wCisJbW92CSVnNSwgJW8yCQkhIHJlc3RvcmUgJW8yCisJbW92CSVnNywgJW8zCQkhIHJlc3RvcmUgJW8zCisKKwlyZXRyeQorCitzdW40dl9kdGxiX21pc3M6CisJLyogTG9hZCBNTVUgTWlzcyBiYXNlIGludG8gJWcyLiAgKi8KKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzIKKwkKKwkvKiBMb2FkIFVUU0IgcmVnIGludG8gJWcxLiAgKi8KKwltb3YJU0NSQVRDSFBBRF9VVFNCUkVHMSwgJWcxCisJbGR4YQlbJWcxXSBBU0lfU0NSQVRDSFBBRCwgJWcxCisKKwlMT0FEX0RUTEJfSU5GTyglZzIsICVnNCwgJWc1KQorCUNPTVBVVEVfVEFHX1RBUkdFVCglZzYsICVnNCwgJWc1LCBrdm1hcF9kdGxiXzR2KQorCUNPTVBVVEVfVFNCX1BUUiglZzEsICVnNCwgUEFHRV9TSElGVCwgJWczLCAlZzcpCisKKwkvKiBMb2FkIFRTQiB0YWcvcHRlIGludG8gJWcyLyVnMyBhbmQgY29tcGFyZSB0aGUgdGFnLiAgKi8KKwlsZGRhCVslZzFdIEFTSV9RVUFEX0xERF9QSFlTXzRWLCAlZzIKKwljbXAJJWcyLCAlZzYKKwlibmUsYSxwbiAleGNjLCB0c2JfbWlzc19wYWdlX3RhYmxlX3dhbGsKKwkgbW92CUZBVUxUX0NPREVfRFRMQiwgJWczCisKKwkvKiBXZSBoYXZlIGEgdmFsaWQgZW50cnksIG1ha2UgaHlwZXJ2aXNvciBjYWxsIHRvIGxvYWQKKwkgKiBELVRMQiBhbmQgcmV0dXJuIGZyb20gdHJhcC4KKwkgKgorCSAqICVnMzoJUFRFCisJICogJWc0Ogl2YWRkcgorCSAqLworc3VuNHZfZHRsYl9sb2FkOgorCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnNgorCW1vdgklbzAsICVnMQkJISBzYXZlICVvMAorCW1vdgklbzEsICVnMgkJISBzYXZlICVvMQorCW1vdgklbzIsICVnNQkJISBzYXZlICVvMgorCW1vdgklbzMsICVnNwkJISBzYXZlICVvMworCW1vdgklZzQsICVvMAkJISB2YWRkcgorCWxkeAlbJWc2ICsgSFZfRkFVTFRfRF9DVFhfT0ZGU0VUXSwgJW8xCSEgY3R4CisJbW92CSVnMywgJW8yCQkhIFBURQorCW1vdglIVl9NTVVfRE1NVSwgJW8zCSEgZmxhZ3MKKwl0YQlIVl9NTVVfTUFQX0FERFJfVFJBUAorCWJybnoscG4JJW8wLCBzdW40dl9kdGxiX2Vycm9yCisJIG1vdgklZzIsICVvMQkJISByZXN0b3JlICVvMQorCW1vdgklZzEsICVvMAkJISByZXN0b3JlICVvMAorCW1vdgklZzUsICVvMgkJISByZXN0b3JlICVvMgorCW1vdgklZzcsICVvMwkJISByZXN0b3JlICVvMworCisJcmV0cnkKKworc3VuNHZfZHRsYl9wcm90OgorCVNFVF9HTCgxKQorCisJLyogTG9hZCBNTVUgTWlzcyBiYXNlIGludG8gJWc1LiAgKi8KKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzUKKwkKKwlsZHgJWyVnNSArIEhWX0ZBVUxUX0RfQUREUl9PRkZTRVRdLCAlZzUKKwlyZHByCSV0bCwgJWcxCisJY21wCSVnMSwgMQorCWJndSxwbgkleGNjLCB3aW5maXhfdHJhbXBvbGluZQorCSBub3AKKwliYSxwdAkleGNjLCBzcGFyYzY0X3JlYWxmYXVsdF9jb21tb24KKwkgbW92CUZBVUxUX0NPREVfRFRMQiB8IEZBVUxUX0NPREVfV1JJVEUsICVnNAorCisJLyogQ2FsbGVkIGZyb20gdHJhcCB0YWJsZToKKwkgKiAlZzQ6CXZhZGRyCisJICogJWc1Ogljb250ZXh0CisJICogJWc2OiBUQUcgVEFSR0VUCisJICovCitzdW40dl9pdHNiX21pc3M6CisJbW92CVNDUkFUQ0hQQURfVVRTQlJFRzEsICVnMQorCWxkeGEJWyVnMV0gQVNJX1NDUkFUQ0hQQUQsICVnMQorCWJyeixwbgklZzUsIGt2bWFwX2l0bGJfNHYKKwkgbW92CUZBVUxUX0NPREVfSVRMQiwgJWczCisJYmEsYSxwdAkleGNjLCBzdW40dl90c2JfbWlzc19jb21tb24KKworCS8qIENhbGxlZCBmcm9tIHRyYXAgdGFibGU6CisJICogJWc0Ogl2YWRkcgorCSAqICVnNToJY29udGV4dAorCSAqICVnNjogVEFHIFRBUkdFVAorCSAqLworc3VuNHZfZHRzYl9taXNzOgorCW1vdglTQ1JBVENIUEFEX1VUU0JSRUcxLCAlZzEKKwlsZHhhCVslZzFdIEFTSV9TQ1JBVENIUEFELCAlZzEKKwlicnoscG4JJWc1LCBrdm1hcF9kdGxiXzR2CisJIG1vdglGQVVMVF9DT0RFX0RUTEIsICVnMworCisJLyogZmFsbHRocm91Z2ggKi8KKworc3VuNHZfdHNiX21pc3NfY29tbW9uOgorCUNPTVBVVEVfVFNCX1BUUiglZzEsICVnNCwgUEFHRV9TSElGVCwgJWc1LCAlZzcpCisKKwlzdWIJJWcyLCBUUkFQX1BFUl9DUFVfRkFVTFRfSU5GTywgJWcyCisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJbW92CVNDUkFUQ0hQQURfVVRTQlJFRzIsICVnNQorCWxkeGEJWyVnNV0gQVNJX1NDUkFUQ0hQQUQsICVnNQorCWNtcAklZzUsIC0xCisJYmUscHQJJXhjYywgODBmCisJIG5vcAorCUNPTVBVVEVfVFNCX1BUUiglZzUsICVnNCwgSFBBR0VfU0hJRlQsICVnMiwgJWc3KQorCisJLyogVGhhdCBjbG9iYmVyZWQgJWcyLCByZWxvYWQgaXQuICAqLworCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnMgorCXN1YgklZzIsIFRSQVBfUEVSX0NQVV9GQVVMVF9JTkZPLCAlZzIKKworODA6CXN0eAklZzUsIFslZzIgKyBUUkFQX1BFUl9DUFVfVFNCX0hVR0VfVEVNUF0KKyNlbmRpZgorCisJYmEscHQJJXhjYywgdHNiX21pc3NfcGFnZV90YWJsZV93YWxrX3N1bjR2X2Zhc3RwYXRoCisJIGxkeAlbJWcyICsgVFJBUF9QRVJfQ1BVX1BHRF9QQUREUl0sICVnNworCitzdW40dl9pdGxiX2Vycm9yOgorCXNldGhpCSVoaShzdW40dl9lcnJfaXRsYl92YWRkciksICVnMQorCXN0eAklZzQsIFslZzEgKyAlbG8oc3VuNHZfZXJyX2l0bGJfdmFkZHIpXQorCXNldGhpCSVoaShzdW40dl9lcnJfaXRsYl9jdHgpLCAlZzEKKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzYKKwlsZHgJWyVnNiArIEhWX0ZBVUxUX0lfQ1RYX09GRlNFVF0sICVvMQorCXN0eAklbzEsIFslZzEgKyAlbG8oc3VuNHZfZXJyX2l0bGJfY3R4KV0KKwlzZXRoaQklaGkoc3VuNHZfZXJyX2l0bGJfcHRlKSwgJWcxCisJc3R4CSVnMywgWyVnMSArICVsbyhzdW40dl9lcnJfaXRsYl9wdGUpXQorCXNldGhpCSVoaShzdW40dl9lcnJfaXRsYl9lcnJvciksICVnMQorCXN0eAklbzAsIFslZzEgKyAlbG8oc3VuNHZfZXJyX2l0bGJfZXJyb3IpXQorCisJcmRwcgkldGwsICVnNAorCWNtcAklZzQsIDEKKwlibGUscHQJJWljYywgMWYKKwkgc2V0aGkJJWhpKDJmKSwgJWc3CisJYmEscHQJJXhjYywgZXRyYXB0bDEKKwkgb3IJJWc3LCAlbG8oMmYpLCAlZzcKKworMToJYmEscHQJJXhjYywgZXRyYXAKKzI6CSBvcgklZzcsICVsbygyYiksICVnNworCWNhbGwJc3VuNHZfaXRsYl9lcnJvcl9yZXBvcnQKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wCisKKwkvKiBOT1RSRUFDSEVEICovCisKK3N1bjR2X2R0bGJfZXJyb3I6CisJc2V0aGkJJWhpKHN1bjR2X2Vycl9kdGxiX3ZhZGRyKSwgJWcxCisJc3R4CSVnNCwgWyVnMSArICVsbyhzdW40dl9lcnJfZHRsYl92YWRkcildCisJc2V0aGkJJWhpKHN1bjR2X2Vycl9kdGxiX2N0eCksICVnMQorCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnNgorCWxkeAlbJWc2ICsgSFZfRkFVTFRfRF9DVFhfT0ZGU0VUXSwgJW8xCisJc3R4CSVvMSwgWyVnMSArICVsbyhzdW40dl9lcnJfZHRsYl9jdHgpXQorCXNldGhpCSVoaShzdW40dl9lcnJfZHRsYl9wdGUpLCAlZzEKKwlzdHgJJWczLCBbJWcxICsgJWxvKHN1bjR2X2Vycl9kdGxiX3B0ZSldCisJc2V0aGkJJWhpKHN1bjR2X2Vycl9kdGxiX2Vycm9yKSwgJWcxCisJc3R4CSVvMCwgWyVnMSArICVsbyhzdW40dl9lcnJfZHRsYl9lcnJvcildCisKKwlyZHByCSV0bCwgJWc0CisJY21wCSVnNCwgMQorCWJsZSxwdAklaWNjLCAxZgorCSBzZXRoaQklaGkoMmYpLCAlZzcKKwliYSxwdAkleGNjLCBldHJhcHRsMQorCSBvcgklZzcsICVsbygyZiksICVnNworCisxOgliYSxwdAkleGNjLCBldHJhcAorMjoJIG9yCSVnNywgJWxvKDJiKSwgJWc3CisJY2FsbAlzdW40dl9kdGxiX2Vycm9yX3JlcG9ydAorCSBhZGQJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKKworCS8qIE5PVFJFQUNIRUQgKi8KKworCS8qIEluc3RydWN0aW9uIEFjY2VzcyBFeGNlcHRpb24sIHRsMC4gKi8KK3N1bjR2X2lhY2M6CisJbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWcyCisJbGR4CVslZzIgKyBIVl9GQVVMVF9JX1RZUEVfT0ZGU0VUXSwgJWczCisJbGR4CVslZzIgKyBIVl9GQVVMVF9JX0FERFJfT0ZGU0VUXSwgJWc0CisJbGR4CVslZzIgKyBIVl9GQVVMVF9JX0NUWF9PRkZTRVRdLCAlZzUKKwlzbGx4CSVnMywgMTYsICVnMworCW9yCSVnNSwgJWczLCAlZzUKKwliYSxwdAkleGNjLCBldHJhcAorCSByZAklcGMsICVnNworCW1vdgklbDQsICVvMQorCW1vdgklbDUsICVvMgorCWNhbGwJc3VuNHZfaW5zbl9hY2Nlc3NfZXhjZXB0aW9uCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKKwkvKiBJbnN0cnVjdGlvbiBBY2Nlc3MgRXhjZXB0aW9uLCB0bDEuICovCitzdW40dl9pYWNjX3RsMToKKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzIKKwlsZHgJWyVnMiArIEhWX0ZBVUxUX0lfVFlQRV9PRkZTRVRdLCAlZzMKKwlsZHgJWyVnMiArIEhWX0ZBVUxUX0lfQUREUl9PRkZTRVRdLCAlZzQKKwlsZHgJWyVnMiArIEhWX0ZBVUxUX0lfQ1RYX09GRlNFVF0sICVnNQorCXNsbHgJJWczLCAxNiwgJWczCisJb3IJJWc1LCAlZzMsICVnNQorCWJhLHB0CSV4Y2MsIGV0cmFwdGwxCisJIHJkCSVwYywgJWc3CisJbW92CSVsNCwgJW8xCisJbW92CSVsNSwgJW8yCisJY2FsbAlzdW40dl9pbnNuX2FjY2Vzc19leGNlcHRpb25fdGwxCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKKwkvKiBEYXRhIEFjY2VzcyBFeGNlcHRpb24sIHRsMC4gKi8KK3N1bjR2X2RhY2M6CisJbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWcyCisJbGR4CVslZzIgKyBIVl9GQVVMVF9EX1RZUEVfT0ZGU0VUXSwgJWczCisJbGR4CVslZzIgKyBIVl9GQVVMVF9EX0FERFJfT0ZGU0VUXSwgJWc0CisJbGR4CVslZzIgKyBIVl9GQVVMVF9EX0NUWF9PRkZTRVRdLCAlZzUKKwlzbGx4CSVnMywgMTYsICVnMworCW9yCSVnNSwgJWczLCAlZzUKKwliYSxwdAkleGNjLCBldHJhcAorCSByZAklcGMsICVnNworCW1vdgklbDQsICVvMQorCW1vdgklbDUsICVvMgorCWNhbGwJc3VuNHZfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKKwkvKiBEYXRhIEFjY2VzcyBFeGNlcHRpb24sIHRsMS4gKi8KK3N1bjR2X2RhY2NfdGwxOgorCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnMgorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9UWVBFX09GRlNFVF0sICVnMworCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9BRERSX09GRlNFVF0sICVnNAorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9DVFhfT0ZGU0VUXSwgJWc1CisJc2xseAklZzMsIDE2LCAlZzMKKwlvcgklZzUsICVnMywgJWc1CisJYmEscHQJJXhjYywgZXRyYXB0bDEKKwkgcmQJJXBjLCAlZzcKKwltb3YJJWw0LCAlbzEKKwltb3YJJWw1LCAlbzIKKwljYWxsCXN1bjR2X2RhdGFfYWNjZXNzX2V4Y2VwdGlvbl90bDEKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wCisJYmEsYSxwdAkleGNjLCBydHJhcF9jbHJfbDYKKworCS8qIE1lbW9yeSBBZGRyZXNzIFVuYWxpZ25lZC4gICovCitzdW40dl9tbmE6CisJLyogV2luZG93IGZpeHVwPyAqLworCXJkcHIJJXRsLCAlZzIKKwljbXAJJWcyLCAxCisJYmxlLHB0CSVpY2MsIDFmCisJIG5vcAorCisJU0VUX0dMKDEpCisJbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWcyCisJbGR4CVslZzIgKyBIVl9GQVVMVF9EX0FERFJfT0ZGU0VUXSwgJWc1CisJbW92CUhWX0ZBVUxUX1RZUEVfVU5BTElHTkVELCAlZzMKKwlsZHgJWyVnMiArIEhWX0ZBVUxUX0RfQ1RYX09GRlNFVF0sICVnNAorCXNsbHgJJWczLCAxNiwgJWczCisJb3IJJWc0LCAlZzMsICVnNAorCWJhLHB0CSV4Y2MsIHdpbmZpeF9tbmEKKwkgcmRwcgkldHBjLCAlZzMKKwkvKiBub3QgcmVhY2hlZCAqLworCisxOglsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzIKKwltb3YJSFZfRkFVTFRfVFlQRV9VTkFMSUdORUQsICVnMworCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9BRERSX09GRlNFVF0sICVnNAorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9DVFhfT0ZGU0VUXSwgJWc1CisJc2xseAklZzMsIDE2LCAlZzMKKwlvcgklZzUsICVnMywgJWc1CisKKwliYSxwdAkleGNjLCBldHJhcAorCSByZAklcGMsICVnNworCW1vdgklbDQsICVvMQorCW1vdgklbDUsICVvMgorCWNhbGwJc3VuNHZfZG9fbW5hCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKKwkvKiBQcml2aWxlZ2VkIEFjdGlvbi4gICovCitzdW40dl9wcml2YWN0OgorCWJhLHB0CSV4Y2MsIGV0cmFwCisJIHJkCSVwYywgJWc3CisJY2FsbAlkb19wcml2YWN0CisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKKwkvKiBVbmFsaWduZWQgbGRkIGZsb2F0LCB0bDAuICovCitzdW40dl9sZGRmbW5hOgorCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnMgorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9UWVBFX09GRlNFVF0sICVnMworCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9BRERSX09GRlNFVF0sICVnNAorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9DVFhfT0ZGU0VUXSwgJWc1CisJc2xseAklZzMsIDE2LCAlZzMKKwlvcgklZzUsICVnMywgJWc1CisJYmEscHQJJXhjYywgZXRyYXAKKwkgcmQJJXBjLCAlZzcKKwltb3YJJWw0LCAlbzEKKwltb3YJJWw1LCAlbzIKKwljYWxsCWhhbmRsZV9sZGRmbW5hCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKKwkvKiBVbmFsaWduZWQgc3RkIGZsb2F0LCB0bDAuICovCitzdW40dl9zdGRmbW5hOgorCWxkeGEJWyVnMF0gQVNJX1NDUkFUQ0hQQUQsICVnMgorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9UWVBFX09GRlNFVF0sICVnMworCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9BRERSX09GRlNFVF0sICVnNAorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9DVFhfT0ZGU0VUXSwgJWc1CisJc2xseAklZzMsIDE2LCAlZzMKKwlvcgklZzUsICVnMywgJWc1CisJYmEscHQJJXhjYywgZXRyYXAKKwkgcmQJJXBjLCAlZzcKKwltb3YJJWw0LCAlbzEKKwltb3YJJWw1LCAlbzIKKwljYWxsCWhhbmRsZV9zdGRmbW5hCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKKyNkZWZpbmUgQlJBTkNIX0FMV0FZUwkweDEwNjgwMDAwCisjZGVmaW5lIE5PUAkJMHgwMTAwMDAwMAorI2RlZmluZSBTVU40Vl9ET19QQVRDSChPTEQsIE5FVykJXAorCXNldGhpCSVoaShORVcpLCAlZzE7IFwKKwlvcgklZzEsICVsbyhORVcpLCAlZzE7IFwKKwlzZXRoaQklaGkoT0xEKSwgJWcyOyBcCisJb3IJJWcyLCAlbG8oT0xEKSwgJWcyOyBcCisJc3ViCSVnMSwgJWcyLCAlZzE7IFwKKwlzZXRoaQklaGkoQlJBTkNIX0FMV0FZUyksICVnMzsgXAorCXNsbAklZzEsIDExLCAlZzE7IFwKKwlzcmwJJWcxLCAxMSArIDIsICVnMTsgXAorCW9yCSVnMywgJWxvKEJSQU5DSF9BTFdBWVMpLCAlZzM7IFwKKwlvcgklZzMsICVnMSwgJWczOyBcCisJc3R3CSVnMywgWyVnMl07IFwKKwlzZXRoaQklaGkoTk9QKSwgJWczOyBcCisJb3IJJWczLCAlbG8oTk9QKSwgJWczOyBcCisJc3R3CSVnMywgWyVnMiArIDB4NF07IFwKKwlmbHVzaAklZzI7CisKKwkuZ2xvYmwJc3VuNHZfcGF0Y2hfdGxiX2hhbmRsZXJzCisJLnR5cGUJc3VuNHZfcGF0Y2hfdGxiX2hhbmRsZXJzLCNmdW5jdGlvbgorc3VuNHZfcGF0Y2hfdGxiX2hhbmRsZXJzOgorCVNVTjRWX0RPX1BBVENIKHRsMF9pYW1pc3MsIHN1bjR2X2l0bGJfbWlzcykKKwlTVU40Vl9ET19QQVRDSCh0bDFfaWFtaXNzLCBzdW40dl9pdGxiX21pc3MpCisJU1VONFZfRE9fUEFUQ0godGwwX2RhbWlzcywgc3VuNHZfZHRsYl9taXNzKQorCVNVTjRWX0RPX1BBVENIKHRsMV9kYW1pc3MsIHN1bjR2X2R0bGJfbWlzcykKKwlTVU40Vl9ET19QQVRDSCh0bDBfZGFwcm90LCBzdW40dl9kdGxiX3Byb3QpCisJU1VONFZfRE9fUEFUQ0godGwxX2RhcHJvdCwgc3VuNHZfZHRsYl9wcm90KQorCVNVTjRWX0RPX1BBVENIKHRsMF9pYXgsIHN1bjR2X2lhY2MpCisJU1VONFZfRE9fUEFUQ0godGwxX2lheCwgc3VuNHZfaWFjY190bDEpCisJU1VONFZfRE9fUEFUQ0godGwwX2RheCwgc3VuNHZfZGFjYykKKwlTVU40Vl9ET19QQVRDSCh0bDFfZGF4LCBzdW40dl9kYWNjX3RsMSkKKwlTVU40Vl9ET19QQVRDSCh0bDBfbW5hLCBzdW40dl9tbmEpCisJU1VONFZfRE9fUEFUQ0godGwxX21uYSwgc3VuNHZfbW5hKQorCVNVTjRWX0RPX1BBVENIKHRsMF9sZGRmbW5hLCBzdW40dl9sZGRmbW5hKQorCVNVTjRWX0RPX1BBVENIKHRsMF9zdGRmbW5hLCBzdW40dl9zdGRmbW5hKQorCVNVTjRWX0RPX1BBVENIKHRsMF9wcml2YWN0LCBzdW40dl9wcml2YWN0KQorCXJldGwKKwkgbm9wCisJLnNpemUJc3VuNHZfcGF0Y2hfdGxiX2hhbmRsZXJzLC4tc3VuNHZfcGF0Y2hfdGxiX2hhbmRsZXJzCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5czMyLlMKaW5kZXggNjBiNTkzNy4uYzRhMWNlZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXMzMi5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzMzIuUwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJbm9wCiAJbm9wCiAKLQkuc2VjdGlvbglfX2V4X3RhYmxlCisJLnNlY3Rpb24JX19leF90YWJsZSwiYSIKIAkuYWxpZ24JCTQKIAkud29yZAkJMWIsIF9fcmV0bF9lZmF1bHQsIDJiLCBfX3JldGxfZWZhdWx0CiAJLndvcmQJCTNiLCBfX3JldGxfZWZhdWx0LCA0YiwgX19yZXRsX2VmYXVsdApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMKaW5kZXggNWY4YzgyMi4uN2E4NjkxMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCkBAIC0yNSwyNSArMjUsOTMgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pcGMuaD4KICNpbmNsdWRlIDxhc20vdXRyYXAuaD4KICNpbmNsdWRlIDxhc20vcGVyZmN0ci5oPgorI2luY2x1ZGUgPGFzbS9hLm91dC5oPgogCiAvKiAjZGVmaW5lIERFQlVHX1VOSU1QX1NZU0NBTEwgKi8KIAotLyogWFhYIE1ha2UgdGhpcyBwZXItYmluYXJ5IHR5cGUsIHRoaXMgd2F5IHdlIGNhbiBkZXRlY3QgdGhlIHR5cGUgb2YKLSAqIFhYWCBhIGJpbmFyeS4gIEV2ZXJ5IFNwYXJjIGV4ZWN1dGFibGUgY2FsbHMgdGhpcyB2ZXJ5IGVhcmx5IG9uLgotICovCiBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX2dldHBhZ2VzaXplKHZvaWQpCiB7CiAJcmV0dXJuIFBBR0VfU0laRTsKIH0KIAotI2RlZmluZSBDT0xPVVJfQUxJR04oYWRkcixwZ29mZikJCVwKLQkoKCgoYWRkcikrU0hNTEJBLTEpJn4oU0hNTEJBLTEpKSArCVwKLQkgKCgocGdvZmYpPDxQQUdFX1NISUZUKSAmIChTSE1MQkEtMSkpKQorI2RlZmluZSBWQV9FWENMVURFX1NUQVJUICgweDAwMDAwODAwMDAwMDAwMDBVTCAtICgxVUwgPDwgMzJVTCkpCisjZGVmaW5lIFZBX0VYQ0xVREVfRU5EICAgKDB4ZmZmZmY4MDAwMDAwMDAwMFVMICsgKDFVTCA8PCAzMlVMKSkKKworLyogRG9lcyBhZGRyIC0tPiBhZGRyK2xlbiBmYWxsIHdpdGhpbiA0R0Igb2YgdGhlIFZBLXNwYWNlIGhvbGUgb3IKKyAqIG92ZXJmbG93IHBhc3QgdGhlIGVuZCBvZiB0aGUgNjQtYml0IGFkZHJlc3Mgc3BhY2U/CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGludmFsaWRfNjRiaXRfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIHZhX2V4Y2x1ZGVfc3RhcnQsIHZhX2V4Y2x1ZGVfZW5kOworCisJdmFfZXhjbHVkZV9zdGFydCA9IFZBX0VYQ0xVREVfU1RBUlQ7CisJdmFfZXhjbHVkZV9lbmQgICA9IFZBX0VYQ0xVREVfRU5EOworCisJaWYgKHVubGlrZWx5KGxlbiA+PSB2YV9leGNsdWRlX3N0YXJ0KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAodW5saWtlbHkoKGFkZHIgKyBsZW4pIDwgYWRkcikpCisJCXJldHVybiAxOworCisJaWYgKHVubGlrZWx5KChhZGRyID49IHZhX2V4Y2x1ZGVfc3RhcnQgJiYgYWRkciA8IHZhX2V4Y2x1ZGVfZW5kKSB8fAorCQkgICAgICgoYWRkciArIGxlbikgPj0gdmFfZXhjbHVkZV9zdGFydCAmJgorCQkgICAgICAoYWRkciArIGxlbikgPCB2YV9leGNsdWRlX2VuZCkpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKiBEb2VzIHN0YXJ0LGVuZCBzdHJhZGRsZSB0aGUgVkEtc3BhY2UgaG9sZT8gICovCitzdGF0aWMgaW5saW5lIGludCBzdHJhZGRsZXNfNjRiaXRfdmFfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhX2V4Y2x1ZGVfc3RhcnQsIHZhX2V4Y2x1ZGVfZW5kOworCisJdmFfZXhjbHVkZV9zdGFydCA9IFZBX0VYQ0xVREVfU1RBUlQ7CisJdmFfZXhjbHVkZV9lbmQgICA9IFZBX0VYQ0xVREVfRU5EOworCisJaWYgKGxpa2VseShzdGFydCA8IHZhX2V4Y2x1ZGVfc3RhcnQgJiYgZW5kIDwgdmFfZXhjbHVkZV9zdGFydCkpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseShzdGFydCA+PSB2YV9leGNsdWRlX2VuZCAmJiBlbmQgPj0gdmFfZXhjbHVkZV9lbmQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKiBUaGVzZSBmdW5jdGlvbnMgZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGluCisgKiBtbS9tbWFwLmMgaW4gdHdvIHdheXM6CisgKgorICogMSkgRm9yIGZpbGUgYmFja2VkIE1BUF9TSEFSRUQgbW1hcCgpJ3Mgd2UgRC1jYWNoZSBjb2xvciBhbGlnbiwKKyAqICAgIGZvciBmaXhlZCBzdWNoIG1hcHBpbmdzIHdlIGp1c3QgdmFsaWRhdGUgd2hhdCB0aGUgdXNlciBnYXZlIHVzLgorICogMikgRm9yIDY0LWJpdCB0YXNrcyB3ZSBhdm9pZCBtYXBwaW5nIGFueXRoaW5nIHdpdGhpbiA0R0Igb2YKKyAqICAgIHRoZSBzcGl0ZmlyZS9uaWFnYXJhIFZBLWhvbGUuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIENPTE9VUl9BTElHTih1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSB1bnNpZ25lZCBsb25nIHBnb2ZmKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IChhZGRyK1NITUxCQS0xKSZ+KFNITUxCQS0xKTsKKwl1bnNpZ25lZCBsb25nIG9mZiA9IChwZ29mZjw8UEFHRV9TSElGVCkgJiAoU0hNTEJBLTEpOworCisJcmV0dXJuIGJhc2UgKyBvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBDT0xPVVJfQUxJR05fRE9XTih1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gYWRkciAmIH4oU0hNTEJBLTEpOworCXVuc2lnbmVkIGxvbmcgb2ZmID0gKHBnb2ZmPDxQQUdFX1NISUZUKSAmIChTSE1MQkEtMSk7CisKKwlpZiAoYmFzZSArIG9mZiA8PSBhZGRyKQorCQlyZXR1cm4gYmFzZSArIG9mZjsKKwlyZXR1cm4gYmFzZSAtIG9mZjsKK30KIAogdW5zaWduZWQgbG9uZyBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtNjQsOCArMTMyLDggQEAKIAl9CiAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQotCQl0YXNrX3NpemUgPSAweGYwMDAwMDAwVUw7Ci0JaWYgKGxlbiA+IHRhc2tfc2l6ZSB8fCBsZW4gPiAtUEFHRV9PRkZTRVQpCisJCXRhc2tfc2l6ZSA9IFNUQUNLX1RPUDMyOworCWlmICh1bmxpa2VseShsZW4gPiB0YXNrX3NpemUgfHwgbGVuID49IFZBX0VYQ0xVREVfU1RBUlQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRvX2NvbG9yX2FsaWduID0gMDsKQEAgLTg0LDExICsxNTIsMTIgQEAKIAkJCXJldHVybiBhZGRyOwogCX0KIAotCWlmIChsZW4gPD0gbW0tPmNhY2hlZF9ob2xlX3NpemUpIHsKKwlpZiAobGVuID4gbW0tPmNhY2hlZF9ob2xlX3NpemUpIHsKKwkgICAgICAgIHN0YXJ0X2FkZHIgPSBhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwl9IGVsc2UgeworCSAgICAgICAgc3RhcnRfYWRkciA9IGFkZHIgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CiAJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7Ci0JCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CiAJfQotCXN0YXJ0X2FkZHIgPSBhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKIAogCXRhc2tfc2l6ZSAtPSBsZW47CiAKQEAgLTEwMCwxMSArMTY5LDEyIEBACiAKIAlmb3IgKHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsgOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKIAkJLyogQXQgdGhpcyBwb2ludDogICghdm1hIHx8IGFkZHIgPCB2bWEtPnZtX2VuZCkuICovCi0JCWlmIChhZGRyIDwgUEFHRV9PRkZTRVQgJiYgLVBBR0VfT0ZGU0VUIC0gbGVuIDwgYWRkcikgewotCQkJYWRkciA9IFBBR0VfT0ZGU0VUOwotCQkJdm1hID0gZmluZF92bWEobW0sIFBBR0VfT0ZGU0VUKTsKKwkJaWYgKGFkZHIgPCBWQV9FWENMVURFX1NUQVJUICYmCisJCSAgICAoYWRkciArIGxlbikgPj0gVkFfRVhDTFVERV9TVEFSVCkgeworCQkJYWRkciA9IFZBX0VYQ0xVREVfRU5EOworCQkJdm1hID0gZmluZF92bWEobW0sIFZBX0VYQ0xVREVfRU5EKTsKIAkJfQotCQlpZiAodGFza19zaXplIDwgYWRkcikgeworCQlpZiAodW5saWtlbHkodGFza19zaXplIDwgYWRkcikpIHsKIAkJCWlmIChzdGFydF9hZGRyICE9IFRBU0tfVU5NQVBQRURfQkFTRSkgewogCQkJCXN0YXJ0X2FkZHIgPSBhZGRyID0gVEFTS19VTk1BUFBFRF9CQVNFOwogCQkJCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKQEAgLTExMiw3ICsxODIsNyBAQAogCQkJfQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJaWYgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSB7CisJCWlmIChsaWtlbHkoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKSB7CiAJCQkvKgogCQkJICogUmVtZW1iZXIgdGhlIHBsYWNlIHdoZXJlIHdlIHN0b3BwZWQgdGhlIHNlYXJjaDoKIAkJCSAqLwpAQCAtMTI4LDYgKzE5OCwxMjEgQEAKIAl9CiB9CiAKK3Vuc2lnbmVkIGxvbmcKK2FyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyMCwKKwkJCSAgY29uc3QgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IHVuc2lnbmVkIGxvbmcgcGdvZmYsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIHRhc2tfc2l6ZSA9IFNUQUNLX1RPUDMyOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwOworCWludCBkb19jb2xvcl9hbGlnbjsKKworCS8qIFRoaXMgc2hvdWxkIG9ubHkgZXZlciBydW4gZm9yIDMyLWJpdCBwcm9jZXNzZXMuICAqLworCUJVR19PTighdGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKTsKKworCWlmIChmbGFncyAmIE1BUF9GSVhFRCkgeworCQkvKiBXZSBkbyBub3QgYWNjZXB0IGEgc2hhcmVkIG1hcHBpbmcgaWYgaXQgd291bGQgdmlvbGF0ZQorCQkgKiBjYWNoZSBhbGlhc2luZyBjb25zdHJhaW50cy4KKwkJICovCisJCWlmICgoZmxhZ3MgJiBNQVBfU0hBUkVEKSAmJgorCQkgICAgKChhZGRyIC0gKHBnb2ZmIDw8IFBBR0VfU0hJRlQpKSAmIChTSE1MQkEgLSAxKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGFkZHI7CisJfQorCisJaWYgKHVubGlrZWx5KGxlbiA+IHRhc2tfc2l6ZSkpCisJCXJldHVybiAtRU5PTUVNOworCisJZG9fY29sb3JfYWxpZ24gPSAwOworCWlmIChmaWxwIHx8IChmbGFncyAmIE1BUF9TSEFSRUQpKQorCQlkb19jb2xvcl9hbGlnbiA9IDE7CisKKwkvKiByZXF1ZXN0aW5nIGEgc3BlY2lmaWMgYWRkcmVzcyAqLworCWlmIChhZGRyKSB7CisJCWlmIChkb19jb2xvcl9hbGlnbikKKwkJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOworCQllbHNlCisJCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKKworCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CisJCWlmICh0YXNrX3NpemUgLSBsZW4gPj0gYWRkciAmJgorCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJCXJldHVybiBhZGRyOworCX0KKworCS8qIGNoZWNrIGlmIGZyZWVfYXJlYV9jYWNoZSBpcyB1c2VmdWwgZm9yIHVzICovCisJaWYgKGxlbiA8PSBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgeworIAkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKKyAJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBtbS0+bW1hcF9iYXNlOworIAl9CisKKwkvKiBlaXRoZXIgbm8gYWRkcmVzcyByZXF1ZXN0ZWQgb3IgY2FuJ3QgZml0IGluIHJlcXVlc3RlZCBhZGRyZXNzIGhvbGUgKi8KKwlhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwlpZiAoZG9fY29sb3JfYWxpZ24pIHsKKwkJdW5zaWduZWQgbG9uZyBiYXNlID0gQ09MT1VSX0FMSUdOX0RPV04oYWRkci1sZW4sIHBnb2ZmKTsKKworCQlhZGRyID0gYmFzZSArIGxlbjsKKwl9CisKKwkvKiBtYWtlIHN1cmUgaXQgY2FuIGZpdCBpbiB0aGUgcmVtYWluaW5nIGFkZHJlc3Mgc3BhY2UgKi8KKwlpZiAobGlrZWx5KGFkZHIgPiBsZW4pKSB7CisJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyLWxlbik7CisJCWlmICghdm1hIHx8IGFkZHIgPD0gdm1hLT52bV9zdGFydCkgeworCQkJLyogcmVtZW1iZXIgdGhlIGFkZHJlc3MgYXMgYSBoaW50IGZvciBuZXh0IHRpbWUgKi8KKwkJCXJldHVybiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHItbGVuKTsKKwkJfQorCX0KKworCWlmICh1bmxpa2VseShtbS0+bW1hcF9iYXNlIDwgbGVuKSkKKwkJZ290byBib3R0b211cDsKKworCWFkZHIgPSBtbS0+bW1hcF9iYXNlLWxlbjsKKwlpZiAoZG9fY29sb3JfYWxpZ24pCisJCWFkZHIgPSBDT0xPVVJfQUxJR05fRE9XTihhZGRyLCBwZ29mZik7CisKKwlkbyB7CisJCS8qCisJCSAqIExvb2t1cCBmYWlsdXJlIG1lYW5zIG5vIHZtYSBpcyBhYm92ZSB0aGlzIGFkZHJlc3MsCisJCSAqIGVsc2UgaWYgbmV3IHJlZ2lvbiBmaXRzIGJlbG93IHZtYS0+dm1fc3RhcnQsCisJCSAqIHJldHVybiB3aXRoIHN1Y2Nlc3M6CisJCSAqLworCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CisJCWlmIChsaWtlbHkoIXZtYSB8fCBhZGRyK2xlbiA8PSB2bWEtPnZtX3N0YXJ0KSkgeworCQkJLyogcmVtZW1iZXIgdGhlIGFkZHJlc3MgYXMgYSBoaW50IGZvciBuZXh0IHRpbWUgKi8KKwkJCXJldHVybiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIpOworCQl9CisKKyAJCS8qIHJlbWVtYmVyIHRoZSBsYXJnZXN0IGhvbGUgd2Ugc2F3IHNvIGZhciAqLworIAkJaWYgKGFkZHIgKyBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA8IHZtYS0+dm1fc3RhcnQpCisgCQkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gdm1hLT52bV9zdGFydCAtIGFkZHI7CisKKwkJLyogdHJ5IGp1c3QgYmVsb3cgdGhlIGN1cnJlbnQgdm1hLT52bV9zdGFydCAqLworCQlhZGRyID0gdm1hLT52bV9zdGFydC1sZW47CisJCWlmIChkb19jb2xvcl9hbGlnbikKKwkJCWFkZHIgPSBDT0xPVVJfQUxJR05fRE9XTihhZGRyLCBwZ29mZik7CisJfSB3aGlsZSAobGlrZWx5KGxlbiA8IHZtYS0+dm1fc3RhcnQpKTsKKworYm90dG9tdXA6CisJLyoKKwkgKiBBIGZhaWxlZCBtbWFwKCkgdmVyeSBsaWtlbHkgY2F1c2VzIGFwcGxpY2F0aW9uIGZhaWx1cmUsCisJICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpbworCSAqIGNhbiBoYXBwZW4gd2l0aCBsYXJnZSBzdGFjayBsaW1pdHMgYW5kIGxhcmdlIG1tYXAoKQorCSAqIGFsbG9jYXRpb25zLgorCSAqLworCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gfjBVTDsKKyAgCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJYWRkciA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzKTsKKwkvKgorCSAqIFJlc3RvcmUgdGhlIHRvcGRvd24gYmFzZToKKwkgKi8KKwltbS0+ZnJlZV9hcmVhX2NhY2hlID0gbW0tPm1tYXBfYmFzZTsKKwltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CisKKwlyZXR1cm4gYWRkcjsKK30KKwogLyogVHJ5IHRvIGFsaWduIG1hcHBpbmcgc3VjaCB0aGF0IHdlIGFsaWduIGl0IGFzIG11Y2ggYXMgcG9zc2libGUuICovCiB1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIG9yaWdfYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC0xNzEsMTUgKzM1Niw1NyBAQAogCXJldHVybiBhZGRyOwogfQogCisvKiBFc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBQb3dlclBDLi4uICovCit2b2lkIGFyY2hfcGlja19tbWFwX2xheW91dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIHJhbmRvbV9mYWN0b3IgPSAwVUw7CisKKwlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpIHsKKwkJcmFuZG9tX2ZhY3RvciA9IGdldF9yYW5kb21faW50KCk7CisJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpCisJCQlyYW5kb21fZmFjdG9yICY9ICgoMSAqIDEwMjQgKiAxMDI0KSAtIDEpOworCQllbHNlCisJCQlyYW5kb21fZmFjdG9yID0gKChyYW5kb21fZmFjdG9yIDw8IFBBR0VfU0hJRlQpICYKKwkJCQkJIDB4ZmZmZmZmZmZVTCk7CisJfQorCisJLyoKKwkgKiBGYWxsIGJhY2sgdG8gdGhlIHN0YW5kYXJkIGxheW91dCBpZiB0aGUgcGVyc29uYWxpdHkKKwkgKiBiaXQgaXMgc2V0LCBvciBpZiB0aGUgZXhwZWN0ZWQgc3RhY2sgZ3Jvd3RoIGlzIHVubGltaXRlZDoKKwkgKi8KKwlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSB8fAorCSAgICAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0NPTVBBVF9MQVlPVVQpIHx8CisJICAgIGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkgfHwKKwkgICAgc3lzY3RsX2xlZ2FjeV92YV9sYXlvdXQpIHsKKwkJbW0tPm1tYXBfYmFzZSA9IFRBU0tfVU5NQVBQRURfQkFTRSArIHJhbmRvbV9mYWN0b3I7CisJCW1tLT5nZXRfdW5tYXBwZWRfYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWE7CisJCW1tLT51bm1hcF9hcmVhID0gYXJjaF91bm1hcF9hcmVhOworCX0gZWxzZSB7CisJCS8qIFdlIGtub3cgaXQncyAzMi1iaXQgKi8KKwkJdW5zaWduZWQgbG9uZyB0YXNrX3NpemUgPSBTVEFDS19UT1AzMjsKKwkJdW5zaWduZWQgbG9uZyBnYXA7CisKKwkJZ2FwID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXI7CisJCWlmIChnYXAgPCAxMjggKiAxMDI0ICogMTAyNCkKKwkJCWdhcCA9IDEyOCAqIDEwMjQgKiAxMDI0OworCQlpZiAoZ2FwID4gKHRhc2tfc2l6ZSAvIDYgKiA1KSkKKwkJCWdhcCA9ICh0YXNrX3NpemUgLyA2ICogNSk7CisKKwkJbW0tPm1tYXBfYmFzZSA9IFBBR0VfQUxJR04odGFza19zaXplIC0gZ2FwIC0gcmFuZG9tX2ZhY3Rvcik7CisJCW1tLT5nZXRfdW5tYXBwZWRfYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bjsKKwkJbW0tPnVubWFwX2FyZWEgPSBhcmNoX3VubWFwX2FyZWFfdG9wZG93bjsKKwl9Cit9CisKIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzcGFyY19icmsodW5zaWduZWQgbG9uZyBicmspCiB7CiAJLyogUGVvcGxlIGNvdWxkIHRyeSB0byBiZSBuYXN0eSBhbmQgdXNlIHRhIDB4NmQgaW4gMzJiaXQgcHJvZ3JhbXMgKi8KLQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpICYmCi0JICAgIGJyayA+PSAweGYwMDAwMDAwVUwpCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSAmJiBicmsgPj0gU1RBQ0tfVE9QMzIpCiAJCXJldHVybiBjdXJyZW50LT5tbS0+YnJrOwogCi0JaWYgKChjdXJyZW50LT5tbS0+YnJrICYgUEFHRV9PRkZTRVQpICE9IChicmsgJiBQQUdFX09GRlNFVCkpCisJaWYgKHVubGlrZWx5KHN0cmFkZGxlc182NGJpdF92YV9ob2xlKGN1cnJlbnQtPm1tLT5icmssIGJyaykpKQogCQlyZXR1cm4gY3VycmVudC0+bW0tPmJyazsKKwogCXJldHVybiBzeXNfYnJrKGJyayk7CiB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNDAsMTMgKzU2NywxNiBAQAogCXJldHZhbCA9IC1FSU5WQUw7CiAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKSB7Ci0JCWlmIChsZW4gPiAweGYwMDAwMDAwVUwgfHwKLQkJICAgICgoZmxhZ3MgJiBNQVBfRklYRUQpICYmIGFkZHIgPiAweGYwMDAwMDAwVUwgLSBsZW4pKQorCQlpZiAobGVuID49IFNUQUNLX1RPUDMyKQorCQkJZ290byBvdXRfcHV0ZjsKKworCQlpZiAoKGZsYWdzICYgTUFQX0ZJWEVEKSAmJiBhZGRyID4gU1RBQ0tfVE9QMzIgLSBsZW4pCiAJCQlnb3RvIG91dF9wdXRmOwogCX0gZWxzZSB7Ci0JCWlmIChsZW4gPiAtUEFHRV9PRkZTRVQgfHwKLQkJICAgICgoZmxhZ3MgJiBNQVBfRklYRUQpICYmCi0JCSAgICAgYWRkciA8IFBBR0VfT0ZGU0VUICYmIGFkZHIgKyBsZW4gPiAtUEFHRV9PRkZTRVQpKQorCQlpZiAobGVuID49IFZBX0VYQ0xVREVfU1RBUlQpCisJCQlnb3RvIG91dF9wdXRmOworCisJCWlmICgoZmxhZ3MgJiBNQVBfRklYRUQpICYmIGludmFsaWRfNjRiaXRfcmFuZ2UoYWRkciwgbGVuKSkKIAkJCWdvdG8gb3V0X3B1dGY7CiAJfQogCkBAIC0zNjUsOSArNTk1LDkgQEAKIHsKIAlsb25nIHJldDsKIAotCWlmIChsZW4gPiAtUEFHRV9PRkZTRVQgfHwKLQkgICAgKGFkZHIgPCBQQUdFX09GRlNFVCAmJiBhZGRyICsgbGVuID4gLVBBR0VfT0ZGU0VUKSkKKwlpZiAoaW52YWxpZF82NGJpdF9yYW5nZShhZGRyLCBsZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKKwogCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJcmV0ID0gZG9fbXVubWFwKGN1cnJlbnQtPm1tLCBhZGRyLCBsZW4pOwogCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwpAQCAtMzg0LDE4ICs2MTQsMTkgQEAKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAl1bnNpZ25lZCBsb25nIHJldCA9IC1FSU5WQUw7CisKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQogCQlnb3RvIG91dDsKLQlpZiAob2xkX2xlbiA+IC1QQUdFX09GRlNFVCB8fCBuZXdfbGVuID4gLVBBR0VfT0ZGU0VUKQorCWlmICh1bmxpa2VseShuZXdfbGVuID49IFZBX0VYQ0xVREVfU1RBUlQpKQogCQlnb3RvIG91dDsKLQlpZiAoYWRkciA8IFBBR0VfT0ZGU0VUICYmIGFkZHIgKyBvbGRfbGVuID4gLVBBR0VfT0ZGU0VUKQorCWlmICh1bmxpa2VseShpbnZhbGlkXzY0Yml0X3JhbmdlKGFkZHIsIG9sZF9sZW4pKSkKIAkJZ290byBvdXQ7CisKIAlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChmbGFncyAmIE1SRU1BUF9GSVhFRCkgewotCQlpZiAobmV3X2FkZHIgPCBQQUdFX09GRlNFVCAmJgotCQkgICAgbmV3X2FkZHIgKyBuZXdfbGVuID4gLVBBR0VfT0ZGU0VUKQorCQlpZiAoaW52YWxpZF82NGJpdF9yYW5nZShuZXdfYWRkciwgbmV3X2xlbikpCiAJCQlnb3RvIG91dF9zZW07Ci0JfSBlbHNlIGlmIChhZGRyIDwgUEFHRV9PRkZTRVQgJiYgYWRkciArIG5ld19sZW4gPiAtUEFHRV9PRkZTRVQpIHsKKwl9IGVsc2UgaWYgKGludmFsaWRfNjRiaXRfcmFuZ2UoYWRkciwgbmV3X2xlbikpIHsKIAkJdW5zaWduZWQgbG9uZyBtYXBfZmxhZ3MgPSAwOwogCQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7CiAKQEAgLTU1NCwxMiArNzg1LDEwIEBACiAJfQogCWlmICghY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMpIHsKIAkJY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHMgPQotCQkJa21hbGxvYygoVVRfVFJBUF9JTlNUUlVDVElPTl8zMSsxKSpzaXplb2YobG9uZyksIEdGUF9LRVJORUwpOworCQkJa3phbGxvYygoVVRfVFJBUF9JTlNUUlVDVElPTl8zMSsxKSpzaXplb2YobG9uZyksIEdGUF9LRVJORUwpOwogCQlpZiAoIWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzWzBdID0gMTsKLQkJbWVtc2V0KGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzKzEsIDAsCi0JCSAgICAgICBVVF9UUkFQX0lOU1RSVUNUSU9OXzMxKnNpemVvZihsb25nKSk7CiAJfSBlbHNlIHsKIAkJaWYgKCh1dHJhcF9oYW5kbGVyX3QpY3VycmVudF90aHJlYWRfaW5mbygpLT51dHJhcHNbdHlwZV0gIT0gbmV3X3AgJiYKIAkJICAgIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXRyYXBzWzBdID4gMSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCmluZGV4IDQxNzcyN2IuLjBlNDFkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2Eub3V0Lmg+CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9jaG93bjE2KGNvbnN0IGNoYXIgX191c2VyICogZmlsZW5hbWUsIHUxNiB1c2VyLCB1MTYgZ3JvdXApCiB7CkBAIC0xMDM5LDE1ICsxMDQwLDE1IEBACiAJdW5zaWduZWQgbG9uZyByZXQgPSAtRUlOVkFMOwogCXVuc2lnbmVkIGxvbmcgbmV3X2FkZHIgPSBfX25ld19hZGRyOwogCi0JaWYgKG9sZF9sZW4gPiAweGYwMDAwMDAwVUwgfHwgbmV3X2xlbiA+IDB4ZjAwMDAwMDBVTCkKKwlpZiAob2xkX2xlbiA+IFNUQUNLX1RPUDMyIHx8IG5ld19sZW4gPiBTVEFDS19UT1AzMikKIAkJZ290byBvdXQ7Ci0JaWYgKGFkZHIgPiAweGYwMDAwMDAwVUwgLSBvbGRfbGVuKQorCWlmIChhZGRyID4gU1RBQ0tfVE9QMzIgLSBvbGRfbGVuKQogCQlnb3RvIG91dDsKIAlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChmbGFncyAmIE1SRU1BUF9GSVhFRCkgewotCQlpZiAobmV3X2FkZHIgPiAweGYwMDAwMDAwVUwgLSBuZXdfbGVuKQorCQlpZiAobmV3X2FkZHIgPiBTVEFDS19UT1AzMiAtIG5ld19sZW4pCiAJCQlnb3RvIG91dF9zZW07Ci0JfSBlbHNlIGlmIChhZGRyID4gMHhmMDAwMDAwMFVMIC0gbmV3X2xlbikgeworCX0gZWxzZSBpZiAoYWRkciA+IFNUQUNLX1RPUDMyIC0gbmV3X2xlbikgewogCQl1bnNpZ25lZCBsb25nIG1hcF9mbGFncyA9IDA7CiAJCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RpbWUuYwppbmRleCBhMjI5MzBkLi43ZDYxZjFiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RpbWUuYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogCiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CiAjaW5jbHVkZSA8YXNtL21vc3Rlay5oPgpAQCAtNDUsNiArNDcsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIERFRklORV9TUElOTE9DSyhtb3N0ZWtfbG9jayk7CiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwpAQCAtMTkzLDE2ICsxOTYsMjIgQEAKIAogc3RhdGljIHZvaWQgc3RpY2tfaW5pdF90aWNrKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewotCXRpY2tfZGlzYWJsZV9wcm90ZWN0aW9uKCk7CisJLyogV3JpdGVzIHRvIHRoZSAldGljayBhbmQgJXN0aWNrIHJlZ2lzdGVyIGFyZSBub3QKKwkgKiBhbGxvd2VkIG9uIHN1bjR2LiAgVGhlIEh5cGVydmlzb3IgY29udHJvbHMgdGhhdAorCSAqIGJpdCwgcGVyLXN0cmFuZC4KKwkgKi8KKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikgeworCQl0aWNrX2Rpc2FibGVfcHJvdGVjdGlvbigpOwogCi0JLyogTGV0IHRoZSB1c2VyIGdldCBhdCBTVElDSyB0b28uICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglyZAklJWFzcjI0LCAlJWcyXG4iCi0JIglhbmRuCSUlZzIsICUwLCAlJWcyXG4iCi0JIgl3cgklJWcyLCAwLCAlJWFzcjI0IgotCTogLyogbm8gb3V0cHV0cyAqLwotCTogInIiIChUSUNLX1BSSVZfQklUKQotCTogImcxIiwgImcyIik7CisJCS8qIExldCB0aGUgdXNlciBnZXQgYXQgU1RJQ0sgdG9vLiAqLworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIglyZAklJWFzcjI0LCAlJWcyXG4iCisJCSIJYW5kbgklJWcyLCAlMCwgJSVnMlxuIgorCQkiCXdyCSUlZzIsIDAsICUlYXNyMjQiCisJCTogLyogbm8gb3V0cHV0cyAqLworCQk6ICJyIiAoVElDS19QUklWX0JJVCkKKwkJOiAiZzEiLCAiZzIiKTsKKwl9CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkiCXJkCSUlYXNyMjQsICUlZzFcbiIKQEAgLTY4Myw2ICs2OTIsODMgQEAKIAl9CiB9CiAKKy8qIGRhdmVtIHN1Z2dlc3RzIHdlIGtlZXAgdGhpcyB3aXRoaW4gdGhlIDRNIGxvY2tlZCBrZXJuZWwgaW1hZ2UgKi8KK3N0YXRpYyB1MzIgc3RhcmZpcmVfZ2V0X3RpbWUodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBvYnBfZ2V0dG9kWzMyXTsKKwlzdGF0aWMgdTMyIHVuaXhfdG9kOworCisJc3ByaW50ZihvYnBfZ2V0dG9kLCAiaCMgJTA4eCB1bml4LWdldHRvZCIsCisJCSh1bnNpZ25lZCBpbnQpIChsb25nKSAmdW5peF90b2QpOworCXByb21fZmV2YWwob2JwX2dldHRvZCk7CisKKwlyZXR1cm4gdW5peF90b2Q7Cit9CisKK3N0YXRpYyBpbnQgc3RhcmZpcmVfc2V0X3RpbWUodTMyIHZhbCkKK3sKKwkvKiBEbyBub3RoaW5nLCB0aW1lIGlzIHNldCB1c2luZyB0aGUgc2VydmljZSBwcm9jZXNzb3IKKwkgKiBjb25zb2xlIG9uIHRoaXMgcGxhdGZvcm0uCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgaHlwZXJ2aXNvcl9nZXRfdGltZSh2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZnVuYyBhc20oIiVvNSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYXJnMCBhc20oIiVvMCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYXJnMSBhc20oIiVvMSIpOworCWludCByZXRyaWVzID0gMTAwMDA7CisKK3JldHJ5OgorCWZ1bmMgPSBIVl9GQVNUX1RPRF9HRVQ7CisJYXJnMCA9IDA7CisJYXJnMSA9IDA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInRhCSU2IgorCQkJICAgICA6ICI9JnIiIChmdW5jKSwgIj0mciIgKGFyZzApLCAiPSZyIiAoYXJnMSkKKwkJCSAgICAgOiAiMCIgKGZ1bmMpLCAiMSIgKGFyZzApLCAiMiIgKGFyZzEpLAorCQkJICAgICAgICJpIiAoSFZfRkFTVF9UUkFQKSk7CisJaWYgKGFyZzAgPT0gSFZfRU9LKQorCQlyZXR1cm4gYXJnMTsKKwlpZiAoYXJnMCA9PSBIVl9FV09VTERCTE9DSykgeworCQlpZiAoLS1yZXRyaWVzID4gMCkgeworCQkJdWRlbGF5KDEwMCk7CisJCQlnb3RvIHJldHJ5OworCQl9CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNVTjRWOiB0b2RfZ2V0KCkgdGltZWQgb3V0LlxuIik7CisJCXJldHVybiAwOworCX0KKwlwcmludGsoS0VSTl9XQVJOSU5HICJTVU40VjogdG9kX2dldCgpIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoeXBlcnZpc29yX3NldF90aW1lKHUzMiBzZWNzKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZnVuYyBhc20oIiVvNSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYXJnMCBhc20oIiVvMCIpOworCWludCByZXRyaWVzID0gMTAwMDA7CisKK3JldHJ5OgorCWZ1bmMgPSBIVl9GQVNUX1RPRF9TRVQ7CisJYXJnMCA9IHNlY3M7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInRhCSU0IgorCQkJICAgICA6ICI9JnIiIChmdW5jKSwgIj0mciIgKGFyZzApCisJCQkgICAgIDogIjAiIChmdW5jKSwgIjEiIChhcmcwKSwKKwkJCSAgICAgICAiaSIgKEhWX0ZBU1RfVFJBUCkpOworCWlmIChhcmcwID09IEhWX0VPSykKKwkJcmV0dXJuIDA7CisJaWYgKGFyZzAgPT0gSFZfRVdPVUxEQkxPQ0spIHsKKwkJaWYgKC0tcmV0cmllcyA+IDApIHsKKwkJCXVkZWxheSgxMDApOworCQkJZ290byByZXRyeTsKKwkJfQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJTVU40VjogdG9kX3NldCgpIHRpbWVkIG91dC5cbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJcHJpbnRrKEtFUk5fV0FSTklORyAiU1VONFY6IHRvZF9zZXQoKSBub3Qgc3VwcG9ydGVkLlxuIik7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCiB2b2lkIF9faW5pdCBjbG9ja19wcm9iZSh2b2lkKQogewogCXN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyBjbGtfcmVnWzJdOwpAQCAtNzAyLDE0ICs3ODgsMTQgQEAKIAogCiAJaWYgKHRoaXNfaXNfc3RhcmZpcmUpIHsKLQkJLyogZGF2ZW0gc3VnZ2VzdHMgd2Uga2VlcCB0aGlzIHdpdGhpbiB0aGUgNE0gbG9ja2VkIGtlcm5lbCBpbWFnZSAqLwotCQlzdGF0aWMgY2hhciBvYnBfZ2V0dG9kWzI1Nl07Ci0JCXN0YXRpYyB1MzIgdW5peF90b2Q7Ci0KLQkJc3ByaW50ZihvYnBfZ2V0dG9kLCAiaCMgJTA4eCB1bml4LWdldHRvZCIsCi0JCQkodW5zaWduZWQgaW50KSAobG9uZykgJnVuaXhfdG9kKTsKLQkJcHJvbV9mZXZhbChvYnBfZ2V0dG9kKTsKLQkJeHRpbWUudHZfc2VjID0gdW5peF90b2Q7CisJCXh0aW1lLnR2X3NlYyA9IHN0YXJmaXJlX2dldF90aW1lKCk7CisJCXh0aW1lLnR2X25zZWMgPSAoSU5JVElBTF9KSUZGSUVTICUgSFopICogKE5TRUNfUEVSX1NFQyAvIEhaKTsKKwkJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CisJCXJldHVybjsKKwl9CisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJeHRpbWUudHZfc2VjID0gaHlwZXJ2aXNvcl9nZXRfdGltZSgpOwogCQl4dGltZS50dl9uc2VjID0gKElOSVRJQUxfSklGRklFUyAlIEhaKSAqIChOU0VDX1BFUl9TRUMgLyBIWik7CiAJCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwpAQCAtOTgxLDExICsxMDY3LDEwIEBACiB9CiAKIHN0cnVjdCBmcmVxX3RhYmxlIHsKLQl1bnNpZ25lZCBsb25nIHVkZWxheV92YWxfcmVmOwogCXVuc2lnbmVkIGxvbmcgY2xvY2tfdGlja19yZWY7CiAJdW5zaWduZWQgaW50IHJlZl9mcmVxOwogfTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZnJlcV90YWJsZSwgc3BhcmM2NF9mcmVxX3RhYmxlKSA9IHsgMCwgMCwgMCB9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBmcmVxX3RhYmxlLCBzcGFyYzY0X2ZyZXFfdGFibGUpID0geyAwLCAwIH07CiAKIHVuc2lnbmVkIGxvbmcgc3BhcmM2NF9nZXRfY2xvY2tfdGljayh1bnNpZ25lZCBpbnQgY3B1KQogewpAQCAtMTAwNywxNiArMTA5MiwxMSBAQAogCiAJaWYgKCFmdC0+cmVmX2ZyZXEpIHsKIAkJZnQtPnJlZl9mcmVxID0gZnJlcS0+b2xkOwotCQlmdC0+dWRlbGF5X3ZhbF9yZWYgPSBjcHVfZGF0YShjcHUpLnVkZWxheV92YWw7CiAJCWZ0LT5jbG9ja190aWNrX3JlZiA9IGNwdV9kYXRhKGNwdSkuY2xvY2tfdGljazsKIAl9CiAJaWYgKCh2YWwgPT0gQ1BVRlJFUV9QUkVDSEFOR0UgICYmIGZyZXEtPm9sZCA8IGZyZXEtPm5ldykgfHwKIAkgICAgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UgJiYgZnJlcS0+b2xkID4gZnJlcS0+bmV3KSB8fAogCSAgICAodmFsID09IENQVUZSRVFfUkVTVU1FQ0hBTkdFKSkgewotCQljcHVfZGF0YShjcHUpLnVkZWxheV92YWwgPQotCQkJY3B1ZnJlcV9zY2FsZShmdC0+dWRlbGF5X3ZhbF9yZWYsCi0JCQkJICAgICAgZnQtPnJlZl9mcmVxLAotCQkJCSAgICAgIGZyZXEtPm5ldyk7CiAJCWNwdV9kYXRhKGNwdSkuY2xvY2tfdGljayA9CiAJCQljcHVmcmVxX3NjYWxlKGZ0LT5jbG9ja190aWNrX3JlZiwKIAkJCQkgICAgICBmdC0+cmVmX2ZyZXEsCkBAIC0xMTc5LDMgKzEyNTksMjQ2IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogfQorCisjZGVmaW5lIFJUQ19JU19PUEVOCQkweDAxCS8qIG1lYW5zIC9kZXYvcnRjIGlzIGluIHVzZQkqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluaV9ydGNfc3RhdHVzOwkvKiBiaXRtYXBwZWQgc3RhdHVzIGJ5dGUuCSovCisKKy8qIG1vbnRocyBzdGFydCBhdCAwIG5vdyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGF5c19pbl9tb1tdID0KK3szMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxfTsKKworI2RlZmluZSBGRUJSVUFSWQkyCisjZGVmaW5lCVNUQVJUT0ZUSU1FCTE5NzAKKyNkZWZpbmUgU0VDREFZCQk4NjQwMEwKKyNkZWZpbmUgU0VDWVIJCShTRUNEQVkgKiAzNjUpCisjZGVmaW5lCWxlYXB5ZWFyKHllYXIpCQkoKHllYXIpICUgNCA9PSAwICYmIFwKKwkJCQkgKCh5ZWFyKSAlIDEwMCAhPSAwIHx8ICh5ZWFyKSAlIDQwMCA9PSAwKSkKKyNkZWZpbmUJZGF5c19pbl95ZWFyKGEpIAkobGVhcHllYXIoYSkgPyAzNjYgOiAzNjUpCisjZGVmaW5lCWRheXNfaW5fbW9udGgoYSkgCShtb250aF9kYXlzWyhhKSAtIDFdKQorCitzdGF0aWMgaW50IG1vbnRoX2RheXNbMTJdID0geworCTMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEKK307CisKKy8qCisgKiBUaGlzIG9ubHkgd29ya3MgZm9yIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgLSBpLmUuIGFmdGVyIDE3NTIgKGluIHRoZSBVSykKKyAqLworc3RhdGljIHZvaWQgR3JlZ29yaWFuRGF5KHN0cnVjdCBydGNfdGltZSAqIHRtKQoreworCWludCBsZWFwc1RvRGF0ZTsKKwlpbnQgbGFzdFllYXI7CisJaW50IGRheTsKKwlpbnQgTW9udGhPZmZzZXRbXSA9IHsgMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQgfTsKKworCWxhc3RZZWFyID0gdG0tPnRtX3llYXIgLSAxOworCisJLyoKKwkgKiBOdW1iZXIgb2YgbGVhcCBjb3JyZWN0aW9ucyB0byBhcHBseSB1cCB0byBlbmQgb2YgbGFzdCB5ZWFyCisJICovCisJbGVhcHNUb0RhdGUgPSBsYXN0WWVhciAvIDQgLSBsYXN0WWVhciAvIDEwMCArIGxhc3RZZWFyIC8gNDAwOworCisJLyoKKwkgKiBUaGlzIHllYXIgaXMgYSBsZWFwIHllYXIgaWYgaXQgaXMgZGl2aXNpYmxlIGJ5IDQgZXhjZXB0IHdoZW4gaXQgaXMKKwkgKiBkaXZpc2libGUgYnkgMTAwIHVubGVzcyBpdCBpcyBkaXZpc2libGUgYnkgNDAwCisJICoKKwkgKiBlLmcuIDE5MDQgd2FzIGEgbGVhcCB5ZWFyLCAxOTAwIHdhcyBub3QsIDE5OTYgaXMsIGFuZCAyMDAwIHdhcworCSAqLworCWRheSA9IHRtLT50bV9tb24gPiAyICYmIGxlYXB5ZWFyKHRtLT50bV95ZWFyKTsKKworCWRheSArPSBsYXN0WWVhciozNjUgKyBsZWFwc1RvRGF0ZSArIE1vbnRoT2Zmc2V0W3RtLT50bV9tb24tMV0gKworCQkgICB0bS0+dG1fbWRheTsKKworCXRtLT50bV93ZGF5ID0gZGF5ICUgNzsKK30KKworc3RhdGljIHZvaWQgdG9fdG0oaW50IHRpbSwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlyZWdpc3RlciBpbnQgICAgaTsKKwlyZWdpc3RlciBsb25nICAgaG1zLCBkYXk7CisKKwlkYXkgPSB0aW0gLyBTRUNEQVk7CisJaG1zID0gdGltICUgU0VDREFZOworCisJLyogSG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgYXJlIGVhc3kgKi8KKwl0bS0+dG1faG91ciA9IGhtcyAvIDM2MDA7CisJdG0tPnRtX21pbiA9IChobXMgJSAzNjAwKSAvIDYwOworCXRtLT50bV9zZWMgPSAoaG1zICUgMzYwMCkgJSA2MDsKKworCS8qIE51bWJlciBvZiB5ZWFycyBpbiBkYXlzICovCisJZm9yIChpID0gU1RBUlRPRlRJTUU7IGRheSA+PSBkYXlzX2luX3llYXIoaSk7IGkrKykKKwkJZGF5IC09IGRheXNfaW5feWVhcihpKTsKKwl0bS0+dG1feWVhciA9IGk7CisKKwkvKiBOdW1iZXIgb2YgbW9udGhzIGluIGRheXMgbGVmdCAqLworCWlmIChsZWFweWVhcih0bS0+dG1feWVhcikpCisJCWRheXNfaW5fbW9udGgoRkVCUlVBUlkpID0gMjk7CisJZm9yIChpID0gMTsgZGF5ID49IGRheXNfaW5fbW9udGgoaSk7IGkrKykKKwkJZGF5IC09IGRheXNfaW5fbW9udGgoaSk7CisJZGF5c19pbl9tb250aChGRUJSVUFSWSkgPSAyODsKKwl0bS0+dG1fbW9uID0gaTsKKworCS8qIERheXMgYXJlIHdoYXQgaXMgbGVmdCBvdmVyICgrMSkgZnJvbSBhbGwgdGhhdC4gKi8KKwl0bS0+dG1fbWRheSA9IGRheSArIDE7CisKKwkvKgorCSAqIERldGVybWluZSB0aGUgZGF5IG9mIHdlZWsKKwkgKi8KKwlHcmVnb3JpYW5EYXkodG0pOworfQorCisvKiBCb3RoIFN0YXJmaXJlIGFuZCBTVU40ViBnaXZlIHVzIHNlY29uZHMgc2luY2UgSmFuIDFzdCwgMTk3MCwKKyAqIGFrYSBVbml4IHRpbWUuICBTbyB3ZSBoYXZlIHRvIGNvbnZlcnQgdG8vZnJvbSBydGNfdGltZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1pbmlfZ2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzZWNvbmRzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CisJc2Vjb25kcyA9IDA7CisJaWYgKHRoaXNfaXNfc3RhcmZpcmUpCisJCXNlY29uZHMgPSBzdGFyZmlyZV9nZXRfdGltZSgpOworCWVsc2UgaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCXNlY29uZHMgPSBoeXBlcnZpc29yX2dldF90aW1lKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKKworCXRvX3RtKHNlY29uZHMsIHRpbWUpOworCXRpbWUtPnRtX3llYXIgLT0gMTkwMDsKKwl0aW1lLT50bV9tb24gLT0gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWluaV9zZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0aW1lKQoreworCXUzMiBzZWNvbmRzID0gbWt0aW1lKHRpbWUtPnRtX3llYXIgKyAxOTAwLCB0aW1lLT50bV9tb24gKyAxLAorCQkJICAgICB0aW1lLT50bV9tZGF5LCB0aW1lLT50bV9ob3VyLAorCQkJICAgICB0aW1lLT50bV9taW4sIHRpbWUtPnRtX3NlYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CisJZXJyID0gLUVOT0RFVjsKKwlpZiAodGhpc19pc19zdGFyZmlyZSkKKwkJZXJyID0gc3RhcmZpcmVfc2V0X3RpbWUoc2Vjb25kcyk7CisJZWxzZSAgaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCWVyciA9IGh5cGVydmlzb3Jfc2V0X3RpbWUoc2Vjb25kcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWluaV9ydGNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBydGNfdGltZSB3dGltZTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIFJUQ19QTExfR0VUOgorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhc2UgUlRDX1BMTF9TRVQ6CisJCXJldHVybiAtRUlOVkFMOworCisJY2FzZSBSVENfVUlFX09GRjoJLyogZGlzYWJsZSBpbnRzIGZyb20gUlRDIHVwZGF0ZXMuCSovCisJCXJldHVybiAwOworCisJY2FzZSBSVENfVUlFX09OOgkvKiBlbmFibGUgaW50cyBmb3IgUlRDIHVwZGF0ZXMuCSovCisJICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworCWNhc2UgUlRDX1JEX1RJTUU6CS8qIFJlYWQgdGhlIHRpbWUvZGF0ZSBmcm9tIFJUQwkqLworCQkvKiB0aGlzIGRvZXNuJ3QgZ2V0IHdlZWstZGF5LCB3aG8gY2FyZXMgKi8KKwkJbWVtc2V0KCZ3dGltZSwgMCwgc2l6ZW9mKHd0aW1lKSk7CisJCW1pbmlfZ2V0X3J0Y190aW1lKCZ3dGltZSk7CisKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmd3RpbWUsIHNpemVvZih3dGltZSkpID8gLUVGQVVMVCA6IDA7CisKKwljYXNlIFJUQ19TRVRfVElNRToJLyogU2V0IHRoZSBSVEMgKi8KKwkgICAgeworCQlpbnQgeWVhcjsKKwkJdW5zaWduZWQgY2hhciBsZWFwX3lyOworCisJCWlmICghY2FwYWJsZShDQVBfU1lTX1RJTUUpKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ3dGltZSwgYXJncCwgc2l6ZW9mKHd0aW1lKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQl5ZWFyID0gd3RpbWUudG1feWVhciArIDE5MDA7CisJCWxlYXBfeXIgPSAoKCEoeWVhciAlIDQpICYmICh5ZWFyICUgMTAwKSkgfHwKKwkJCSAgICEoeWVhciAlIDQwMCkpOworCisJCWlmICgod3RpbWUudG1fbW9uIDwgMCB8fCB3dGltZS50bV9tb24gPiAxMSkgfHwgKHd0aW1lLnRtX21kYXkgPCAxKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICh3dGltZS50bV9tZGF5IDwgMCB8fCB3dGltZS50bV9tZGF5ID4KKwkJICAgIChkYXlzX2luX21vW3d0aW1lLnRtX21vbl0gKyAoKHd0aW1lLnRtX21vbiA9PSAxKSAmJiBsZWFwX3lyKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAod3RpbWUudG1faG91ciA8IDAgfHwgd3RpbWUudG1faG91ciA+PSAyNCB8fAorCQkgICAgd3RpbWUudG1fbWluIDwgMCB8fCB3dGltZS50bV9taW4gPj0gNjAgfHwKKwkJICAgIHd0aW1lLnRtX3NlYyA8IDAgfHwgd3RpbWUudG1fc2VjID49IDYwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0dXJuIG1pbmlfc2V0X3J0Y190aW1lKCZ3dGltZSk7CisJICAgIH0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBtaW5pX3J0Y19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChtaW5pX3J0Y19zdGF0dXMgJiBSVENfSVNfT1BFTikKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1pbmlfcnRjX3N0YXR1cyB8PSBSVENfSVNfT1BFTjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pbmlfcnRjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJbWluaV9ydGNfc3RhdHVzICY9IH5SVENfSVNfT1BFTjsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5pX3J0Y19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuaW9jdGwJCT0gbWluaV9ydGNfaW9jdGwsCisJLm9wZW4JCT0gbWluaV9ydGNfb3BlbiwKKwkucmVsZWFzZQk9IG1pbmlfcnRjX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgcnRjX21pbmlfZGV2ID0KK3sKKwkubWlub3IJCT0gUlRDX01JTk9SLAorCS5uYW1lCQk9ICJydGMiLAorCS5mb3BzCQk9ICZtaW5pX3J0Y19mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcnRjX21pbmlfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvciAmJiAhdGhpc19pc19zdGFyZmlyZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcmludGsoS0VSTl9JTkZPICJNaW5pIFJUQyBEcml2ZXJcbiIpOworCisJcmV0dmFsID0gbWlzY19yZWdpc3RlcigmcnRjX21pbmlfZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcnRjX21pbmlfZXhpdCh2b2lkKQoreworCW1pc2NfZGVyZWdpc3RlcigmcnRjX21pbmlfZGV2KTsKK30KKworCittb2R1bGVfaW5pdChydGNfbWluaV9pbml0KTsKK21vZHVsZV9leGl0KHJ0Y19taW5pX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFtcG9saW5lLlMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYW1wb2xpbmUuUwppbmRleCA5NDc4NTUxLi5hNGRjMDFhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYW1wb2xpbmUuUworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYW1wb2xpbmUuUwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogCiAJLmRhdGEKIAkuYWxpZ24JOApAQCAtMjgsMTQgKzMwLDE5IEBACiBkdGxiX2xvYWQ6CiAJLmFzY2l6CSJTVU5XLGR0bGItbG9hZCIKIAorCS8qIFhYWCBfX2NwdWluaXQgdGhpcyB0aGluZyBYWFggKi8KKyNkZWZpbmUgVFJBTVBfU1RBQ0tfU0laRQkxMDI0CisJLmFsaWduCTE2Cit0cmFtcF9zdGFjazoKKwkuc2tpcAlUUkFNUF9TVEFDS19TSVpFCisKIAkudGV4dAogCS5hbGlnbgkJOAogCS5nbG9ibAkJc3BhcmM2NF9jcHVfc3RhcnR1cCwgc3BhcmM2NF9jcHVfc3RhcnR1cF9lbmQKIHNwYXJjNjRfY3B1X3N0YXJ0dXA6Ci0JZmx1c2h3Ci0KLQlCUkFOQ0hfSUZfQ0hFRVRBSF9CQVNFKGcxLGc1LGNoZWV0YWhfc3RhcnR1cCkKLQlCUkFOQ0hfSUZfQ0hFRVRBSF9QTFVTX09SX0ZPTExPV09OKGcxLGc1LGNoZWV0YWhfcGx1c19zdGFydHVwKQorCUJSQU5DSF9JRl9TVU40VihnMSwgbmlhZ2FyYV9zdGFydHVwKQorCUJSQU5DSF9JRl9DSEVFVEFIX0JBU0UoZzEsIGc1LCBjaGVldGFoX3N0YXJ0dXApCisJQlJBTkNIX0lGX0NIRUVUQUhfUExVU19PUl9GT0xMT1dPTihnMSwgZzUsIGNoZWV0YWhfcGx1c19zdGFydHVwKQogCiAJYmEscHQJJXhjYywgc3BpdGZpcmVfc3RhcnR1cAogCSBub3AKQEAgLTU1LDYgKzYyLDcgQEAKIAlvcgklZzUsIERDVV9ETSB8IERDVV9JTSB8IERDVV9EQyB8IERDVV9JQywgJWc1CiAJc3R4YQklZzUsIFslZzBdIEFTSV9EQ1VfQ09OVFJPTF9SRUcKIAltZW1iYXIJI1N5bmMKKwkvKiBmYWxsdGhydSAqLwogCiBjaGVldGFoX2dlbmVyaWNfc3RhcnR1cDoKIAltb3YJVFNCX0VYVEVOU0lPTl9QLCAlZzMKQEAgLTcwLDcgKzc4LDkgQEAKIAlzdHhhCSVnMCwgWyVnM10gQVNJX0RNTVUKIAlzdHhhCSVnMCwgWyVnM10gQVNJX0lNTVUKIAltZW1iYXIJI1N5bmMKKwkvKiBmYWxsdGhydSAqLwogCituaWFnYXJhX3N0YXJ0dXA6CiAJLyogRGlzYWJsZSBTVElDS19JTlQgaW50ZXJydXB0cy4gKi8KIAlzZXRoaQkJJWhpKDB4ODAwMDAwMDApLCAlZzUKIAlzbGx4CQklZzUsIDMyLCAlZzUKQEAgLTg1LDE3ICs5NSwxNyBAQAogCW1lbWJhcgkJI1N5bmMKIAogc3RhcnR1cF9jb250aW51ZToKLQl3cnByCQklZzAsIDE1LCAlcGlsCi0KIAlzZXRoaQkJJWhpKDB4ODAwMDAwMDApLCAlZzIKIAlzbGx4CQklZzIsIDMyLCAlZzIKIAl3cgkJJWcyLCAwLCAldGlja19jbXByCiAKKwltb3YJCSVvMCwgJWwwCisKKwlCUkFOQ0hfSUZfU1VONFYoZzEsIG5pYWdhcmFfbG9ja190bGIpCisKIAkvKiBDYWxsIE9CUCBieSBoYW5kIHRvIGxvY2sgS0VSTkJBU0UgaW50byBpL2QgdGxicy4KIAkgKiBXZSBsb2NrIDIgY29uc2VxdWV0aXZlIGVudHJpZXMgaWYgd2UgYXJlICdiaWdrZXJuZWwnLgogCSAqLwotCW1vdgkJJW8wLCAlbDAKLQogCXNldGhpCQklaGkocHJvbV9lbnRyeV9sb2NrKSwgJWcyCiAxOglsZHN0dWIJCVslZzIgKyAlbG8ocHJvbV9lbnRyeV9sb2NrKV0sICVnMQogCW1lbWJhcgkJI1N0b3JlTG9hZCB8ICNTdG9yZVN0b3JlCkBAIC0xMDUsNyArMTE1LDYgQEAKIAlzZXRoaQkJJWhpKHAxMjc1YnVmKSwgJWcyCiAJb3IJCSVnMiwgJWxvKHAxMjc1YnVmKSwgJWcyCiAJbGR4CQlbJWcyICsgMHgxMF0sICVsMgotCW1vdgkJJXNwLCAlbDEKIAlhZGQJCSVsMiwgLSgxOTIgKyAxMjgpLCAlc3AKIAlmbHVzaHcKIApAQCAtMTQyLDggKzE1MSw3IEBACiAKIAlzZXRoaQkJJWhpKGJpZ2tlcm5lbCksICVnMgogCWxkdXcJCVslZzIgKyAlbG8oYmlna2VybmVsKV0sICVnMgotCWNtcAkJJWcyLCAwCi0JYmUscHQJCSVpY2MsIGRvX2R0bGIKKwlicnoscHQJCSVnMiwgZG9fZHRsYgogCSBub3AKIAogCXNldGhpCQklaGkoY2FsbF9tZXRob2QpLCAlZzIKQEAgLTIxNCw4ICsyMjIsNyBAQAogCiAJc2V0aGkJCSVoaShiaWdrZXJuZWwpLCAlZzIKIAlsZHV3CQlbJWcyICsgJWxvKGJpZ2tlcm5lbCldLCAlZzIKLQljbXAJCSVnMiwgMAotCWJlLHB0CQklaWNjLCBkb191bmxvY2sKKwlicnoscHQJCSVnMiwgZG9fdW5sb2NrCiAJIG5vcAogCiAJc2V0aGkJCSVoaShjYWxsX21ldGhvZCksICVnMgpAQCAtMjU3LDk5ICsyNjQsMTgwIEBACiAJc3RiCQklZzAsIFslZzIgKyAlbG8ocHJvbV9lbnRyeV9sb2NrKV0KIAltZW1iYXIJCSNTdG9yZVN0b3JlIHwgI1N0b3JlTG9hZAogCi0JbW92CQklbDEsICVzcAotCWZsdXNodworCWJhLHB0CQkleGNjLCBhZnRlcl9sb2NrX3RsYgorCSBub3AKIAotCW1vdgkJJWwwLCAlbzAKK25pYWdhcmFfbG9ja190bGI6CisJbW92CQlIVl9GQVNUX01NVV9NQVBfUEVSTV9BRERSLCAlbzUKKwlzZXRoaQkJJWhpKEtFUk5CQVNFKSwgJW8wCisJY2xyCQklbzEKKwlzZXRoaQkJJWhpKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKSwgJW8yCisJbGR4CQlbJW8yICsgJWxvKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKV0sICVvMgorCW1vdgkJSFZfTU1VX0lNTVUsICVvMworCXRhCQlIVl9GQVNUX1RSQVAKIAorCW1vdgkJSFZfRkFTVF9NTVVfTUFQX1BFUk1fQUREUiwgJW81CisJc2V0aGkJCSVoaShLRVJOQkFTRSksICVvMAorCWNscgkJJW8xCisJc2V0aGkJCSVoaShrZXJuX2xvY2tlZF90dGVfZGF0YSksICVvMgorCWxkeAkJWyVvMiArICVsbyhrZXJuX2xvY2tlZF90dGVfZGF0YSldLCAlbzIKKwltb3YJCUhWX01NVV9ETU1VLCAlbzMKKwl0YQkJSFZfRkFTVF9UUkFQCisKKwlzZXRoaQkJJWhpKGJpZ2tlcm5lbCksICVnMgorCWxkdXcJCVslZzIgKyAlbG8oYmlna2VybmVsKV0sICVnMgorCWJyeixwdAkJJWcyLCBhZnRlcl9sb2NrX3RsYgorCSBub3AKKworCW1vdgkJSFZfRkFTVF9NTVVfTUFQX1BFUk1fQUREUiwgJW81CisJc2V0aGkJCSVoaShLRVJOQkFTRSArIDB4NDAwMDAwKSwgJW8wCisJY2xyCQklbzEKKwlzZXRoaQkJJWhpKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKSwgJW8yCisJbGR4CQlbJW8yICsgJWxvKGtlcm5fbG9ja2VkX3R0ZV9kYXRhKV0sICVvMgorCXNldGhpCQklaGkoMHg0MDAwMDApLCAlbzMKKwlhZGQJCSVvMiwgJW8zLCAlbzIKKwltb3YJCUhWX01NVV9JTU1VLCAlbzMKKwl0YQkJSFZfRkFTVF9UUkFQCisKKwltb3YJCUhWX0ZBU1RfTU1VX01BUF9QRVJNX0FERFIsICVvNQorCXNldGhpCQklaGkoS0VSTkJBU0UgKyAweDQwMDAwMCksICVvMAorCWNscgkJJW8xCisJc2V0aGkJCSVoaShrZXJuX2xvY2tlZF90dGVfZGF0YSksICVvMgorCWxkeAkJWyVvMiArICVsbyhrZXJuX2xvY2tlZF90dGVfZGF0YSldLCAlbzIKKwlzZXRoaQkJJWhpKDB4NDAwMDAwKSwgJW8zCisJYWRkCQklbzIsICVvMywgJW8yCisJbW92CQlIVl9NTVVfRE1NVSwgJW8zCisJdGEJCUhWX0ZBU1RfVFJBUAorCithZnRlcl9sb2NrX3RsYjoKIAl3cnByCQklZzAsIChQU1RBVEVfUFJJViB8IFBTVEFURV9QRUYpLCAlcHN0YXRlCiAJd3IJCSVnMCwgMCwgJWZwcnMKIAotCS8qIFhYWCBCdWdneSBQUk9NLi4uICovCi0Jc3JsCQklbzAsIDAsICVvMAotCWxkeAkJWyVvMF0sICVnNgotCiAJd3IJCSVnMCwgQVNJX1AsICVhc2kKIAogCW1vdgkJUFJJTUFSWV9DT05URVhULCAlZzcKLQlzdHhhCQklZzAsIFslZzddIEFTSV9ETU1VCisKKzY2MToJc3R4YQkJJWcwLCBbJWc3XSBBU0lfRE1NVQorCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQk2NjFiCisJc3R4YQkJJWcwLCBbJWc3XSBBU0lfTU1VCisJLnByZXZpb3VzCisKIAltZW1iYXIJCSNTeW5jCiAJbW92CQlTRUNPTkRBUllfQ09OVEVYVCwgJWc3Ci0Jc3R4YQkJJWcwLCBbJWc3XSBBU0lfRE1NVQorCis2NjE6CXN0eGEJCSVnMCwgWyVnN10gQVNJX0RNTVUKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCXN0eGEJCSVnMCwgWyVnN10gQVNJX01NVQorCS5wcmV2aW91cworCiAJbWVtYmFyCQkjU3luYwogCisJLyogRXZlcnl0aGluZyB3ZSBkbyBoZXJlLCB1bnRpbCB3ZSBwcm9wZXJseSB0YWtlIG92ZXIgdGhlCisJICogdHJhcCB0YWJsZSwgbXVzdCBiZSBkb25lIHdpdGggZXh0cmVtZSBjYXJlLiAgV2UgY2Fubm90CisJICogbWFrZSBhbnkgcmVmZXJlbmNlcyB0byAlZzYgKGN1cnJlbnQgdGhyZWFkIHBvaW50ZXIpLAorCSAqICVnNCAoY3VycmVudCB0YXNrIHBvaW50ZXIpLCBvciAlZzUgKGJhc2Ugb2YgY3VycmVudCBjcHUncworCSAqIHBlci1jcHUgYXJlYSkgdW50aWwgd2UgcHJvcGVybHkgdGFrZSBvdmVyIHRoZSB0cmFwIHRhYmxlCisJICogZnJvbSB0aGUgZmlybXdhcmUgYW5kIGh5cGVydmlzb3IuCisJICoKKwkgKiBHZXQgb250byB0ZW1wb3Jhcnkgc3RhY2sgd2hpY2ggaXMgaW4gdGhlIGxvY2tlZCBrZXJuZWwgaW1hZ2UuCisJICovCisJc2V0aGkJCSVoaSh0cmFtcF9zdGFjayksICVnMQorCW9yCQklZzEsICVsbyh0cmFtcF9zdGFjayksICVnMQorCWFkZAkJJWcxLCBUUkFNUF9TVEFDS19TSVpFLCAlZzEKKwlzdWIJCSVnMSwgU1RBQ0tGUkFNRV9TWiArIFNUQUNLX0JJQVMsICVzcAorCW1vdgkJMCwgJWZwCisKKwkvKiBQdXQgZ2FyYmFnZSBpbiB0aGVzZSByZWdpc3RlcnMgdG8gdHJhcCBhbnkgYWNjZXNzIHRvIHRoZW0uICAqLworCXNldAkJMHhkZWFkYmVlZiwgJWc0CisJc2V0CQkweGRlYWRiZWVmLCAlZzUKKwlzZXQJCTB4ZGVhZGJlZWYsICVnNgorCisJY2FsbAkJaW5pdF9pcnF3b3JrX2N1cmNwdQorCSBub3AKKworCXNldGhpCQklaGkodGxiX3R5cGUpLCAlZzMKKwlsZHV3CQlbJWczICsgJWxvKHRsYl90eXBlKV0sICVnMgorCWNtcAkJJWcyLCAzCisJYm5lLHB0CQklaWNjLCAxZgorCSBub3AKKworCWNhbGwJCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZAorCSBub3AKKwkKKwltb3YJCSVvMCwgJW8xCisJbW92CQkwLCAlbzAKKwltb3YJCTAsICVvMgorCWNhbGwJCXN1bjR2X2luaXRfbW9uZG9fcXVldWVzCisJIG1vdgkJMSwgJW8zCisKKzE6CWNhbGwJCWluaXRfY3VyX2NwdV90cmFwCisJIGxkeAkJWyVsMF0sICVvMAorCisJLyogU3RhcnQgdXNpbmcgcHJvcGVyIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MgaW4gY3R4IHJlZ2lzdGVyLiAgKi8KKwlzZXRoaQkJJWhpKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCksICVnMworCWxkeAkJWyVnMyArICVsbyhzcGFyYzY0X2tlcm5fcHJpX2NvbnRleHQpXSwgJWcyCisJbW92CQlQUklNQVJZX0NPTlRFWFQsICVnMQorCis2NjE6CXN0eGEJCSVnMiwgWyVnMV0gQVNJX0RNTVUKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCXN0eGEJCSVnMiwgWyVnMV0gQVNJX01NVQorCS5wcmV2aW91cworCisJbWVtYmFyCQkjU3luYworCisJd3JwcgkJJWcwLCAwLCAld3N0YXRlCisKKwkvKiBBcyBhIGhhY2ssIHB1dCAmaW5pdF90aHJlYWRfdW5pb24gaW50byAlZzYuCisJICogcHJvbV93b3JsZCgpIGxvYWRzIGZyb20gaGVyZSB0byByZXN0b3JlIHRoZSAlYXNpCisJICogcmVnaXN0ZXIuCisJICovCisJc2V0aGkJCSVoaShpbml0X3RocmVhZF91bmlvbiksICVnNgorCW9yCQklZzYsICVsbyhpbml0X3RocmVhZF91bmlvbiksICVnNgorCisJc2V0aGkJCSVoaShpc19zdW40diksICVvMAorCWxkdXcJCVslbzAgKyAlbG8oaXNfc3VuNHYpXSwgJW8wCisJYnJ6LHB0CQklbzAsIDFmCisJIG5vcAorCisJVFJBUF9MT0FEX1RSQVBfQkxPQ0soJWcyLCAlZzMpCisJYWRkCQklZzIsIFRSQVBfUEVSX0NQVV9GQVVMVF9JTkZPLCAlZzIKKwlzdHhhCQklZzIsIFslZzBdIEFTSV9TQ1JBVENIUEFECisKKwkvKiBDb21wdXRlIHBoeXNpY2FsIGFkZHJlc3M6CisJICoKKwkgKiBwYWRkciA9IGtlcm5fYmFzZSArIChtbWZzYV92YWRkciAtIEtFUk5CQVNFKQorCSAqLworCXNldGhpCQklaGkoS0VSTkJBU0UpLCAlZzMKKwlzdWIJCSVnMiwgJWczLCAlZzIKKwlzZXRoaQkJJWhpKGtlcm5fYmFzZSksICVnMworCWxkeAkJWyVnMyArICVsbyhrZXJuX2Jhc2UpXSwgJWczCisJYWRkCQklZzIsICVnMywgJW8xCisKKwljYWxsCQlwcm9tX3NldF90cmFwX3RhYmxlX3N1bjR2CisJIHNldGhpCQklaGkoc3BhcmM2NF90dGFibGVfdGwwKSwgJW8wCisKKwliYSxwdAkJJXhjYywgMmYKKwkgbm9wCisKKzE6CWNhbGwJCXByb21fc2V0X3RyYXBfdGFibGUKKwkgc2V0aGkJCSVoaShzcGFyYzY0X3R0YWJsZV90bDApLCAlbzAKKworMjoJbGR4CQlbJWwwXSwgJWc2CisJbGR4CQlbJWc2ICsgVElfVEFTS10sICVnNAorCiAJbW92CQkxLCAlZzUKIAlzbGx4CQklZzUsIFRIUkVBRF9TSElGVCwgJWc1CiAJc3ViCQklZzUsIChTVEFDS0ZSQU1FX1NaICsgU1RBQ0tfQklBUyksICVnNQogCWFkZAkJJWc2LCAlZzUsICVzcAogCW1vdgkJMCwgJWZwCiAKLQl3cnByCQklZzAsIDAsICV3c3RhdGUKLQl3cnByCQklZzAsIDAsICV0bAotCi0JLyogU2V0dXAgdGhlIHRyYXAgZ2xvYmFscywgdGhlbiB3ZSBjYW4gcmVzdXJmYWNlLiAqLwotCXJkcHIJCSVwc3RhdGUsICVvMQotCW1vdgkJJWc2LCAlbzIKLQl3cnByCQklbzEsIFBTVEFURV9BRywgJXBzdGF0ZQotCXNldGhpCQklaGkoc3BhcmM2NF90dGFibGVfdGwwKSwgJWc1Ci0Jd3JwcgkJJWc1LCAldGJhCi0JbW92CQklbzIsICVnNgotCi0Jd3JwcgkJJW8xLCBQU1RBVEVfTUcsICVwc3RhdGUKLSNkZWZpbmUgS0VSTl9ISUdIQklUUwkJKChfUEFHRV9WQUxJRHxfUEFHRV9TWjRNQileMHhmZmZmZjgwMDAwMDAwMDAwKQotI2RlZmluZSBLRVJOX0xPV0JJVFMJCShfUEFHRV9DUCB8IF9QQUdFX0NWIHwgX1BBR0VfUCB8IF9QQUdFX1cpCi0KLQltb3YJCVRTQl9SRUcsICVnMQotCXN0eGEJCSVnMCwgWyVnMV0gQVNJX0RNTVUKLQltZW1iYXIJCSNTeW5jCi0JbW92CQlUTEJfU0ZTUiwgJWcxCi0Jc2V0aGkJCSV1aGkoS0VSTl9ISUdIQklUUyksICVnMgotCW9yCQklZzIsICV1bG8oS0VSTl9ISUdIQklUUyksICVnMgotCXNsbHgJCSVnMiwgMzIsICVnMgotCW9yCQklZzIsIEtFUk5fTE9XQklUUywgJWcyCi0KLQlCUkFOQ0hfSUZfQU5ZX0NIRUVUQUgoZzMsZzcsOWYpCi0KLQliYSxwdAkJJXhjYywgMWYKLQkgbm9wCi0KLTk6Ci0Jc2V0aGkJCSV1aGkoVlBURV9CQVNFX0NIRUVUQUgpLCAlZzMKLQlvcgkJJWczLCAldWxvKFZQVEVfQkFTRV9DSEVFVEFIKSwgJWczCi0JYmEscHQJCSV4Y2MsIDJmCi0JIHNsbHgJCSVnMywgMzIsICVnMwotMToKLQlzZXRoaQkJJXVoaShWUFRFX0JBU0VfU1BJVEZJUkUpLCAlZzMKLQlvcgkJJWczLCAldWxvKFZQVEVfQkFTRV9TUElURklSRSksICVnMwotCXNsbHgJCSVnMywgMzIsICVnMwotCi0yOgotCWNscgklZzcKLSN1bmRlZiBLRVJOX0hJR0hCSVRTCi0jdW5kZWYgS0VSTl9MT1dCSVRTCi0KLQl3cnByCQklbzEsIDB4MCwgJXBzdGF0ZQotCWxkeAkJWyVnNiArIFRJX1RBU0tdLCAlZzQKLQotCXdycHIJCSVnMCwgMCwgJXdzdGF0ZQotCi0JY2FsbAkJaW5pdF9pcnF3b3JrX2N1cmNwdQotCSBub3AKLQotCS8qIFN0YXJ0IHVzaW5nIHByb3BlciBwYWdlIHNpemUgZW5jb2RpbmdzIGluIGN0eCByZWdpc3Rlci4gICovCi0Jc2V0aGkJJWhpKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCksICVnMwotCWxkeAlbJWczICsgJWxvKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCldLCAlZzIKLQltb3YJUFJJTUFSWV9DT05URVhULCAlZzEKLQlzdHhhCSVnMiwgWyVnMV0gQVNJX0RNTVUKLQltZW1iYXIJI1N5bmMKLQogCXJkcHIJCSVwc3RhdGUsICVvMQogCW9yCQklbzEsIFBTVEFURV9JRSwgJW8xCiAJd3JwcgkJJW8xLCAwLCAlcHN0YXRlCiAKLQljYWxsCQlwcm9tX3NldF90cmFwX3RhYmxlCi0JIHNldGhpCQklaGkoc3BhcmM2NF90dGFibGVfdGwwKSwgJW8wCi0KIAljYWxsCQlzbXBfY2FsbGluCiAJIG5vcAogCWNhbGwJCWNwdV9pZGxlCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKaW5kZXggOGQ0NGFlNS4uZGY2MTJlNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KICNpbmNsdWRlIDxhc20va2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL2hlYWQuaD4KICNpZmRlZiBDT05GSUdfS01PRAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNlbmRpZgpAQCAtNzIsMTIgKzczLDE0IEBACiAKIHN0YXRpYyB2b2lkIGR1bXBfdGwxX3RyYXBsb2coc3RydWN0IHRsMV90cmFwbG9nICpwKQogewotCWludCBpOworCWludCBpLCBsaW1pdDsKIAotCXByaW50aygiVFJBUExPRzogRXJyb3IgYXQgdHJhcCBsZXZlbCAweCVseCwgZHVtcGluZyB0cmFjayBzdGFjay5cbiIsCi0JICAgICAgIHAtPnRsKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQKKwlwcmludGsoS0VSTl9FTUVSRyAiVFJBUExPRzogRXJyb3IgYXQgdHJhcCBsZXZlbCAweCVseCwgIgorCSAgICAgICAiZHVtcGluZyB0cmFjayBzdGFjay5cbiIsIHAtPnRsKTsKKworCWxpbWl0ID0gKHRsYl90eXBlID09IGh5cGVydmlzb3IpID8gMiA6IDQ7CisJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcKIAkJICAgICAgICJUUkFQTE9HOiBUcmFwIGxldmVsICVkIFRTVEFURVslMDE2bHhdIFRQQ1slMDE2bHhdICIKIAkJICAgICAgICJUTlBDWyUwMTZseF0gVFRbJWx4XVxuIiwKIAkJICAgICAgIGkgKyAxLApAQCAtMTc5LDYgKzE4Miw0NSBAQAogCXNwaXRmaXJlX2luc25fYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCBzZnNyLCBzZmFyKTsKIH0KIAordm9pZCBzdW40dl9pbnNuX2FjY2Vzc19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyB0eXBlX2N0eCkKK3sKKwl1bnNpZ25lZCBzaG9ydCB0eXBlID0gKHR5cGVfY3R4ID4+IDE2KTsKKwl1bnNpZ25lZCBzaG9ydCBjdHggID0gKHR5cGVfY3R4ICYgMHhmZmZmKTsKKwlzaWdpbmZvX3QgaW5mbzsKKworCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAiaW5zdHJ1Y3Rpb24gYWNjZXNzIGV4Y2VwdGlvbiIsIHJlZ3MsCisJCSAgICAgICAwLCAweDgsIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisKKwlpZiAocmVncy0+dHN0YXRlICYgVFNUQVRFX1BSSVYpIHsKKwkJcHJpbnRrKCJzdW40dl9pbnNuX2FjY2Vzc19leGNlcHRpb246IEFERFJbJTAxNmx4XSAiCisJCSAgICAgICAiQ1RYWyUwNHhdIFRZUEVbJTA0eF0sIGdvaW5nLlxuIiwKKwkJICAgICAgIGFkZHIsIGN0eCwgdHlwZSk7CisJCWRpZV9pZl9rZXJuZWwoIklheCIsIHJlZ3MpOworCX0KKworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKKwkJcmVncy0+dHBjICY9IDB4ZmZmZmZmZmY7CisJCXJlZ3MtPnRucGMgJj0gMHhmZmZmZmZmZjsKKwl9CisJaW5mby5zaV9zaWdubyA9IFNJR1NFR1Y7CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlID0gU0VHVl9NQVBFUlI7CisJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopIGFkZHI7CisJaW5mby5zaV90cmFwbm8gPSAwOworCWZvcmNlX3NpZ19pbmZvKFNJR1NFR1YsICZpbmZvLCBjdXJyZW50KTsKK30KKwordm9pZCBzdW40dl9pbnNuX2FjY2Vzc19leGNlcHRpb25fdGwxKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgdHlwZV9jdHgpCit7CisJaWYgKG5vdGlmeV9kaWUoRElFX1RSQVBfVEwxLCAiaW5zdHJ1Y3Rpb24gYWNjZXNzIGV4Y2VwdGlvbiB0bDEiLCByZWdzLAorCQkgICAgICAgMCwgMHg4LCBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJZHVtcF90bDFfdHJhcGxvZygoc3RydWN0IHRsMV90cmFwbG9nICopKHJlZ3MgKyAxKSk7CisJc3VuNHZfaW5zbl9hY2Nlc3NfZXhjZXB0aW9uKHJlZ3MsIGFkZHIsIHR5cGVfY3R4KTsKK30KKwogdm9pZCBzcGl0ZmlyZV9kYXRhX2FjY2Vzc19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgc2ZzciwgdW5zaWduZWQgbG9uZyBzZmFyKQogewogCXNpZ2luZm9fdCBpbmZvOwpAQCAtMjI3LDYgKzI2OSw0NSBAQAogCXNwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCBzZnNyLCBzZmFyKTsKIH0KIAordm9pZCBzdW40dl9kYXRhX2FjY2Vzc19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyB0eXBlX2N0eCkKK3sKKwl1bnNpZ25lZCBzaG9ydCB0eXBlID0gKHR5cGVfY3R4ID4+IDE2KTsKKwl1bnNpZ25lZCBzaG9ydCBjdHggID0gKHR5cGVfY3R4ICYgMHhmZmZmKTsKKwlzaWdpbmZvX3QgaW5mbzsKKworCWlmIChub3RpZnlfZGllKERJRV9UUkFQLCAiZGF0YSBhY2Nlc3MgZXhjZXB0aW9uIiwgcmVncywKKwkJICAgICAgIDAsIDB4OCwgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKworCWlmIChyZWdzLT50c3RhdGUgJiBUU1RBVEVfUFJJVikgeworCQlwcmludGsoInN1bjR2X2RhdGFfYWNjZXNzX2V4Y2VwdGlvbjogQUREUlslMDE2bHhdICIKKwkJICAgICAgICJDVFhbJTA0eF0gVFlQRVslMDR4XSwgZ29pbmcuXG4iLAorCQkgICAgICAgYWRkciwgY3R4LCB0eXBlKTsKKwkJZGllX2lmX2tlcm5lbCgiRGF4IiwgcmVncyk7CisJfQorCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQlyZWdzLT50cGMgJj0gMHhmZmZmZmZmZjsKKwkJcmVncy0+dG5wYyAmPSAweGZmZmZmZmZmOworCX0KKwlpbmZvLnNpX3NpZ25vID0gU0lHU0VHVjsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2NvZGUgPSBTRUdWX01BUEVSUjsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgYWRkcjsKKwlpbmZvLnNpX3RyYXBubyA9IDA7CisJZm9yY2Vfc2lnX2luZm8oU0lHU0VHViwgJmluZm8sIGN1cnJlbnQpOworfQorCit2b2lkIHN1bjR2X2RhdGFfYWNjZXNzX2V4Y2VwdGlvbl90bDEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyB0eXBlX2N0eCkKK3sKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUF9UTDEsICJkYXRhIGFjY2VzcyBleGNlcHRpb24gdGwxIiwgcmVncywKKwkJICAgICAgIDAsIDB4OCwgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKworCWR1bXBfdGwxX3RyYXBsb2coKHN0cnVjdCB0bDFfdHJhcGxvZyAqKShyZWdzICsgMSkpOworCXN1bjR2X2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCBhZGRyLCB0eXBlX2N0eCk7Cit9CisKICNpZmRlZiBDT05GSUdfUENJCiAvKiBUaGlzIGlzIHJlYWxseSBwYXRoZXRpYy4uLiAqLwogZXh0ZXJuIHZvbGF0aWxlIGludCBwY2lfcG9rZV9pbl9wcm9ncmVzczsKQEAgLTc4OCw3ICs4NjksOCBAQAogCQljaGVldGFoX2Vycm9yX2xvZ1tpXS5hZnNyID0gQ0hBRlNSX0lOVkFMSUQ7CiAKIAlfX2FzbV9fICgicmRwciAlJXZlciwgJTAiIDogIj1yIiAodmVyKSk7Ci0JaWYgKCh2ZXIgPj4gMzIpID09IDB4MDAzZTAwMTYpIHsKKwlpZiAoKHZlciA+PiAzMikgPT0gX19KQUxBUEVOT19JRCB8fAorCSAgICAodmVyID4+IDMyKSA9PSBfX1NFUlJBTk9fSUQpIHsKIAkJY2hlZXRhaF9lcnJvcl90YWJsZSA9ICZfX2phbGFwZW5vX2Vycm9yX3RhYmxlWzBdOwogCQljaGVldGFoX2Fmc3JfZXJyb3JzID0gSlBBRlNSX0VSUk9SUzsKIAl9IGVsc2UgaWYgKCh2ZXIgPj4gMzIpID09IDB4MDAzZTAwMTUpIHsKQEAgLTE2NjYsNiArMTc0OCwyMzggQEAKIAkgICAgICAgcmVncy0+dHBjKTsKIH0KIAorc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5IHsKKwl1NjQJCWVycl9oYW5kbGU7CisJdTY0CQllcnJfc3RpY2s7CisKKwl1MzIJCWVycl90eXBlOworI2RlZmluZSBTVU40Vl9FUlJfVFlQRV9VTkRFRklORUQJMAorI2RlZmluZSBTVU40Vl9FUlJfVFlQRV9VTkNPUlJFQ1RFRF9SRVMJMQorI2RlZmluZSBTVU40Vl9FUlJfVFlQRV9QUkVDSVNFX05PTlJFUwkyCisjZGVmaW5lIFNVTjRWX0VSUl9UWVBFX0RFRkVSUkVEX05PTlJFUwkzCisjZGVmaW5lIFNVTjRWX0VSUl9UWVBFX1dBUk5JTkdfUkVTCTQKKworCXUzMgkJZXJyX2F0dHJzOworI2RlZmluZSBTVU40Vl9FUlJfQVRUUlNfUFJPQ0VTU09SCTB4MDAwMDAwMDEKKyNkZWZpbmUgU1VONFZfRVJSX0FUVFJTX01FTU9SWQkJMHgwMDAwMDAwMgorI2RlZmluZSBTVU40Vl9FUlJfQVRUUlNfUElPCQkweDAwMDAwMDA0CisjZGVmaW5lIFNVTjRWX0VSUl9BVFRSU19JTlRfUkVHSVNURVJTCTB4MDAwMDAwMDgKKyNkZWZpbmUgU1VONFZfRVJSX0FUVFJTX0ZQVV9SRUdJU1RFUlMJMHgwMDAwMDAxMAorI2RlZmluZSBTVU40Vl9FUlJfQVRUUlNfVVNFUl9NT0RFCTB4MDEwMDAwMDAKKyNkZWZpbmUgU1VONFZfRVJSX0FUVFJTX1BSSVZfTU9ERQkweDAyMDAwMDAwCisjZGVmaW5lIFNVTjRWX0VSUl9BVFRSU19SRVNfUVVFVUVfRlVMTAkweDgwMDAwMDAwCisKKwl1NjQJCWVycl9yYWRkcjsKKwl1MzIJCWVycl9zaXplOworCXUxNgkJZXJyX2NwdTsKKwl1MTYJCWVycl9wYWQ7Cit9OworCitzdGF0aWMgYXRvbWljX3Qgc3VuNHZfcmVzdW1fb2Zsb3dfY250ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgYXRvbWljX3Qgc3VuNHZfbm9ucmVzdW1fb2Zsb3dfY250ID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzdW40dl9lcnJfdHlwZV90b19zdHIodTMyIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTVU40Vl9FUlJfVFlQRV9VTkRFRklORUQ6CisJCXJldHVybiAidW5kZWZpbmVkIjsKKwljYXNlIFNVTjRWX0VSUl9UWVBFX1VOQ09SUkVDVEVEX1JFUzoKKwkJcmV0dXJuICJ1bmNvcnJlY3RlZCByZXN1bWFibGUiOworCWNhc2UgU1VONFZfRVJSX1RZUEVfUFJFQ0lTRV9OT05SRVM6CisJCXJldHVybiAicHJlY2lzZSBub25yZXN1bWFibGUiOworCWNhc2UgU1VONFZfRVJSX1RZUEVfREVGRVJSRURfTk9OUkVTOgorCQlyZXR1cm4gImRlZmVycmVkIG5vbnJlc3VtYWJsZSI7CisJY2FzZSBTVU40Vl9FUlJfVFlQRV9XQVJOSU5HX1JFUzoKKwkJcmV0dXJuICJ3YXJuaW5nIHJlc3VtYWJsZSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9OworfQorCitzdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5ICplbnQsIGludCBjcHUsIGNvbnN0IGNoYXIgKnBmeCwgYXRvbWljX3QgKm9jbnQpCit7CisJaW50IGNudDsKKworCXByaW50aygiJXM6IFJlcG9ydGluZyBvbiBjcHUgJWRcbiIsIHBmeCwgY3B1KTsKKwlwcmludGsoIiVzOiBlcnJfaGFuZGxlWyVseF0gZXJyX3N0aWNrWyVseF0gZXJyX3R5cGVbJTA4eDolc11cbiIsCisJICAgICAgIHBmeCwKKwkgICAgICAgZW50LT5lcnJfaGFuZGxlLCBlbnQtPmVycl9zdGljaywKKwkgICAgICAgZW50LT5lcnJfdHlwZSwKKwkgICAgICAgc3VuNHZfZXJyX3R5cGVfdG9fc3RyKGVudC0+ZXJyX3R5cGUpKTsKKwlwcmludGsoIiVzOiBlcnJfYXR0cnNbJTA4eDolcyAlcyAlcyAlcyAlcyAlcyAlcyAlc11cbiIsCisJICAgICAgIHBmeCwKKwkgICAgICAgZW50LT5lcnJfYXR0cnMsCisJICAgICAgICgoZW50LT5lcnJfYXR0cnMgJiBTVU40Vl9FUlJfQVRUUlNfUFJPQ0VTU09SKSA/CisJCSJwcm9jZXNzb3IiIDogIiIpLAorCSAgICAgICAoKGVudC0+ZXJyX2F0dHJzICYgU1VONFZfRVJSX0FUVFJTX01FTU9SWSkgPworCQkibWVtb3J5IiA6ICIiKSwKKwkgICAgICAgKChlbnQtPmVycl9hdHRycyAmIFNVTjRWX0VSUl9BVFRSU19QSU8pID8KKwkJInBpbyIgOiAiIiksCisJICAgICAgICgoZW50LT5lcnJfYXR0cnMgJiBTVU40Vl9FUlJfQVRUUlNfSU5UX1JFR0lTVEVSUykgPworCQkiaW50ZWdlci1yZWdzIiA6ICIiKSwKKwkgICAgICAgKChlbnQtPmVycl9hdHRycyAmIFNVTjRWX0VSUl9BVFRSU19GUFVfUkVHSVNURVJTKSA/CisJCSJmcHUtcmVncyIgOiAiIiksCisJICAgICAgICgoZW50LT5lcnJfYXR0cnMgJiBTVU40Vl9FUlJfQVRUUlNfVVNFUl9NT0RFKSA/CisJCSJ1c2VyIiA6ICIiKSwKKwkgICAgICAgKChlbnQtPmVycl9hdHRycyAmIFNVTjRWX0VSUl9BVFRSU19QUklWX01PREUpID8KKwkJInByaXZpbGVnZWQiIDogIiIpLAorCSAgICAgICAoKGVudC0+ZXJyX2F0dHJzICYgU1VONFZfRVJSX0FUVFJTX1JFU19RVUVVRV9GVUxMKSA/CisJCSJxdWV1ZS1mdWxsIiA6ICIiKSk7CisJcHJpbnRrKCIlczogZXJyX3JhZGRyWyUwMTZseF0gZXJyX3NpemVbJXVdIGVycl9jcHVbJXVdXG4iLAorCSAgICAgICBwZngsCisJICAgICAgIGVudC0+ZXJyX3JhZGRyLCBlbnQtPmVycl9zaXplLCBlbnQtPmVycl9jcHUpOworCisJaWYgKChjbnQgPSBhdG9taWNfcmVhZChvY250KSkgIT0gMCkgeworCQlhdG9taWNfc2V0KG9jbnQsIDApOworCQl3bWIoKTsKKwkJcHJpbnRrKCIlczogUXVldWUgb3ZlcmZsb3dlZCAlZCB0aW1lcy5cbiIsCisJCSAgICAgICBwZngsIGNudCk7CisJfQorfQorCisvKiBXZSBydW4gd2l0aCAlcGlsIHNldCB0byAxNSBhbmQgUFNUQVRFX0lFIGVuYWJsZWQgaW4gJXBzdGF0ZS4KKyAqIExvZyB0aGUgZXZlbnQgYW5kIGNsZWFyIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBlbnRyeS4KKyAqLwordm9pZCBzdW40dl9yZXN1bV9lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5ICplbnQsIGxvY2FsX2NvcHk7CisJc3RydWN0IHRyYXBfcGVyX2NwdSAqdGI7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKwlpbnQgY3B1OworCisJY3B1ID0gZ2V0X2NwdSgpOworCisJdGIgPSAmdHJhcF9ibG9ja1tjcHVdOworCXBhZGRyID0gdGItPnJlc3VtX2tlcm5lbF9idWZfcGEgKyBvZmZzZXQ7CisJZW50ID0gX192YShwYWRkcik7CisKKwltZW1jcHkoJmxvY2FsX2NvcHksIGVudCwgc2l6ZW9mKHN0cnVjdCBzdW40dl9lcnJvcl9lbnRyeSkpOworCisJLyogV2UgaGF2ZSBhIGxvY2FsIGNvcHkgbm93LCBzbyByZWxlYXNlIHRoZSBlbnRyeS4gICovCisJZW50LT5lcnJfaGFuZGxlID0gMDsKKwl3bWIoKTsKKworCXB1dF9jcHUoKTsKKworCXN1bjR2X2xvZ19lcnJvcigmbG9jYWxfY29weSwgY3B1LAorCQkJS0VSTl9FUlIgIlJFU1VNQUJMRSBFUlJPUiIsCisJCQkmc3VuNHZfcmVzdW1fb2Zsb3dfY250KTsKK30KKworLyogSWYgd2UgdHJ5IHRvIHByaW50aygpIHdlJ2xsIHByb2JhYmx5IG1ha2UgbWF0dGVycyB3b3JzZSwgYnkgdHJ5aW5nCisgKiB0byByZXRha2UgbG9ja3MgdGhpcyBjcHUgYWxyZWFkeSBob2xkcyBvciBjYXVzaW5nIG1vcmUgZXJyb3JzLiBTbworICoganVzdCBidW1wIGEgY291bnRlciwgYW5kIHdlJ2xsIHJlcG9ydCB0aGVzZSBjb3VudGVyIGJ1bXBzIGFib3ZlLgorICovCit2b2lkIHN1bjR2X3Jlc3VtX292ZXJmbG93KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWF0b21pY19pbmMoJnN1bjR2X3Jlc3VtX29mbG93X2NudCk7Cit9CisKKy8qIFdlIHJ1biB3aXRoICVwaWwgc2V0IHRvIDE1IGFuZCBQU1RBVEVfSUUgZW5hYmxlZCBpbiAlcHN0YXRlLgorICogTG9nIHRoZSBldmVudCwgY2xlYXIgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGVudHJ5LCBhbmQgZGllLgorICovCit2b2lkIHN1bjR2X25vbnJlc3VtX2Vycm9yKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgc3VuNHZfZXJyb3JfZW50cnkgKmVudCwgbG9jYWxfY29weTsKKwlzdHJ1Y3QgdHJhcF9wZXJfY3B1ICp0YjsKKwl1bnNpZ25lZCBsb25nIHBhZGRyOworCWludCBjcHU7CisKKwljcHUgPSBnZXRfY3B1KCk7CisKKwl0YiA9ICZ0cmFwX2Jsb2NrW2NwdV07CisJcGFkZHIgPSB0Yi0+bm9ucmVzdW1fa2VybmVsX2J1Zl9wYSArIG9mZnNldDsKKwllbnQgPSBfX3ZhKHBhZGRyKTsKKworCW1lbWNweSgmbG9jYWxfY29weSwgZW50LCBzaXplb2Yoc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5KSk7CisKKwkvKiBXZSBoYXZlIGEgbG9jYWwgY29weSBub3csIHNvIHJlbGVhc2UgdGhlIGVudHJ5LiAgKi8KKwllbnQtPmVycl9oYW5kbGUgPSAwOworCXdtYigpOworCisJcHV0X2NwdSgpOworCisjaWZkZWYgQ09ORklHX1BDSQorCS8qIENoZWNrIGZvciB0aGUgc3BlY2lhbCBQQ0kgcG9rZSBzZXF1ZW5jZS4gKi8KKwlpZiAocGNpX3Bva2VfaW5fcHJvZ3Jlc3MgJiYgcGNpX3Bva2VfY3B1ID09IGNwdSkgeworCQlwY2lfcG9rZV9mYXVsdGVkID0gMTsKKwkJcmVncy0+dHBjICs9IDQ7CisJCXJlZ3MtPnRucGMgPSByZWdzLT50cGMgKyA0OworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlzdW40dl9sb2dfZXJyb3IoJmxvY2FsX2NvcHksIGNwdSwKKwkJCUtFUk5fRU1FUkcgIk5PTi1SRVNVTUFCTEUgRVJST1IiLAorCQkJJnN1bjR2X25vbnJlc3VtX29mbG93X2NudCk7CisKKwlwYW5pYygiTm9uLXJlc3VtYWJsZSBlcnJvci4iKTsKK30KKworLyogSWYgd2UgdHJ5IHRvIHByaW50aygpIHdlJ2xsIHByb2JhYmx5IG1ha2UgbWF0dGVycyB3b3JzZSwgYnkgdHJ5aW5nCisgKiB0byByZXRha2UgbG9ja3MgdGhpcyBjcHUgYWxyZWFkeSBob2xkcyBvciBjYXVzaW5nIG1vcmUgZXJyb3JzLiBTbworICoganVzdCBidW1wIGEgY291bnRlciwgYW5kIHdlJ2xsIHJlcG9ydCB0aGVzZSBjb3VudGVyIGJ1bXBzIGFib3ZlLgorICovCit2b2lkIHN1bjR2X25vbnJlc3VtX292ZXJmbG93KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIFhYWCBBY3R1YWxseSBldmVuIHRoaXMgY2FuIG1ha2Ugbm90IHRoYXQgbXVjaCBzZW5zZS4gIFBlcmhhcHMKKwkgKiBYWFggd2Ugc2hvdWxkIGp1c3QgcHVsbCB0aGUgcGx1ZyBhbmQgcGFuaWMgZGlyZWN0bHkgZnJvbSBoZXJlPworCSAqLworCWF0b21pY19pbmMoJnN1bjR2X25vbnJlc3VtX29mbG93X2NudCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc3VuNHZfZXJyX2l0bGJfdmFkZHI7Cit1bnNpZ25lZCBsb25nIHN1bjR2X2Vycl9pdGxiX2N0eDsKK3Vuc2lnbmVkIGxvbmcgc3VuNHZfZXJyX2l0bGJfcHRlOwordW5zaWduZWQgbG9uZyBzdW40dl9lcnJfaXRsYl9lcnJvcjsKKwordm9pZCBzdW40dl9pdGxiX2Vycm9yX3JlcG9ydChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRsKQoreworCWlmICh0bCA+IDEpCisJCWR1bXBfdGwxX3RyYXBsb2coKHN0cnVjdCB0bDFfdHJhcGxvZyAqKShyZWdzICsgMSkpOworCisJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLUlUTEI6IEVycm9yIGF0IFRQQ1slbHhdLCB0bCAlZFxuIiwKKwkgICAgICAgcmVncy0+dHBjLCB0bCk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlNVTjRWLUlUTEI6IHZhZGRyWyVseF0gY3R4WyVseF0gIgorCSAgICAgICAicHRlWyVseF0gZXJyb3JbJWx4XVxuIiwKKwkgICAgICAgc3VuNHZfZXJyX2l0bGJfdmFkZHIsIHN1bjR2X2Vycl9pdGxiX2N0eCwKKwkgICAgICAgc3VuNHZfZXJyX2l0bGJfcHRlLCBzdW40dl9lcnJfaXRsYl9lcnJvcik7CisKKwlwcm9tX2hhbHQoKTsKK30KKwordW5zaWduZWQgbG9uZyBzdW40dl9lcnJfZHRsYl92YWRkcjsKK3Vuc2lnbmVkIGxvbmcgc3VuNHZfZXJyX2R0bGJfY3R4OwordW5zaWduZWQgbG9uZyBzdW40dl9lcnJfZHRsYl9wdGU7Cit1bnNpZ25lZCBsb25nIHN1bjR2X2Vycl9kdGxiX2Vycm9yOworCit2b2lkIHN1bjR2X2R0bGJfZXJyb3JfcmVwb3J0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdGwpCit7CisJaWYgKHRsID4gMSkKKwkJZHVtcF90bDFfdHJhcGxvZygoc3RydWN0IHRsMV90cmFwbG9nICopKHJlZ3MgKyAxKSk7CisKKwlwcmludGsoS0VSTl9FTUVSRyAiU1VONFYtRFRMQjogRXJyb3IgYXQgVFBDWyVseF0sIHRsICVkXG4iLAorCSAgICAgICByZWdzLT50cGMsIHRsKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiU1VONFYtRFRMQjogdmFkZHJbJWx4XSBjdHhbJWx4XSAiCisJICAgICAgICJwdGVbJWx4XSBlcnJvclslbHhdXG4iLAorCSAgICAgICBzdW40dl9lcnJfZHRsYl92YWRkciwgc3VuNHZfZXJyX2R0bGJfY3R4LAorCSAgICAgICBzdW40dl9lcnJfZHRsYl9wdGUsIHN1bjR2X2Vycl9kdGxiX2Vycm9yKTsKKworCXByb21faGFsdCgpOworfQorCit2b2lkIGh5cGVydmlzb3JfdGxib3BfZXJyb3IodW5zaWduZWQgbG9uZyBlcnIsIHVuc2lnbmVkIGxvbmcgb3ApCit7CisJcHJpbnRrKEtFUk5fQ1JJVCAiU1VONFY6IFRMQiBodiBjYWxsIGVycm9yICVsdSBmb3Igb3AgJWx1XG4iLAorCSAgICAgICBlcnIsIG9wKTsKK30KKwordm9pZCBoeXBlcnZpc29yX3RsYm9wX2Vycm9yX3hjYWxsKHVuc2lnbmVkIGxvbmcgZXJyLCB1bnNpZ25lZCBsb25nIG9wKQoreworCXByaW50ayhLRVJOX0NSSVQgIlNVTjRWOiBYQ0FMTCBUTEIgaHYgY2FsbCBlcnJvciAlbHUgZm9yIG9wICVsdVxuIiwKKwkgICAgICAgZXJyLCBvcCk7Cit9CisKIHZvaWQgZG9fZnBlX2NvbW1vbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpZiAocmVncy0+dHN0YXRlICYgVFNUQVRFX1BSSVYpIHsKQEAgLTE5MjQsMTAgKzIyMzgsMTEgQEAKIAkJfQogCQl1c2VyX2luc3RydWN0aW9uX2R1bXAgKCh1bnNpZ25lZCBpbnQgX191c2VyICopIHJlZ3MtPnRwYyk7CiAJfQorI2lmIDAKICNpZmRlZiBDT05GSUdfU01QCiAJc21wX3JlcG9ydF9yZWdzKCk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkKIAlpZiAocmVncy0+dHN0YXRlICYgVFNUQVRFX1BSSVYpCiAJCWRvX2V4aXQoU0lHS0lMTCk7CiAJZG9fZXhpdChTSUdTRUdWKTsKQEAgLTE5NTgsNiArMjI3MywxMSBAQAogCQl9IGVsc2UgaWYgKChpbnNuICYgMHhjMTU4MDAwMCkgPT0gMHhjMTEwMDAwMCkgLyogTERRL1NUUSAqLyB7CiAJCQlpZiAoaGFuZGxlX2xkZl9zdHEoaW5zbiwgcmVncykpCiAJCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJCWV4dGVybiBpbnQgdmlzX2VtdWwoc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgaW50KTsKKworCQkJaWYgKCF2aXNfZW11bChyZWdzLCBpbnNuKSkKKwkJCQlyZXR1cm47CiAJCX0KIAl9CiAJaW5mby5zaV9zaWdubyA9IFNJR0lMTDsKQEAgLTE5NjgsNiArMjI4OCw4IEBACiAJZm9yY2Vfc2lnX2luZm8oU0lHSUxMLCAmaW5mbywgY3VycmVudCk7CiB9CiAKK2V4dGVybiB2b2lkIGtlcm5lbF91bmFsaWduZWRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc24pOworCiB2b2lkIG1lbV9hZGRyZXNzX3VuYWxpZ25lZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBzZmFyLCB1bnNpZ25lZCBsb25nIHNmc3IpCiB7CiAJc2lnaW5mb190IGluZm87CkBAIC0xOTc3LDEzICsyMjk5LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QUklWKSB7Ci0JCWV4dGVybiB2b2lkIGtlcm5lbF91bmFsaWduZWRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkJCSAgdW5zaWduZWQgaW50IGluc24sIAotCQkJCQkJICB1bnNpZ25lZCBsb25nIHNmYXIsCi0JCQkJCQkgIHVuc2lnbmVkIGxvbmcgc2Zzcik7Ci0KLQkJa2VybmVsX3VuYWxpZ25lZF90cmFwKHJlZ3MsICooKHVuc2lnbmVkIGludCAqKXJlZ3MtPnRwYyksCi0JCQkJICAgICAgc2Zhciwgc2Zzcik7CisJCWtlcm5lbF91bmFsaWduZWRfdHJhcChyZWdzLCAqKCh1bnNpZ25lZCBpbnQgKilyZWdzLT50cGMpKTsKIAkJcmV0dXJuOwogCX0KIAlpbmZvLnNpX3NpZ25vID0gU0lHQlVTOwpAQCAtMTk5NCw2ICsyMzEwLDI2IEBACiAJZm9yY2Vfc2lnX2luZm8oU0lHQlVTLCAmaW5mbywgY3VycmVudCk7CiB9CiAKK3ZvaWQgc3VuNHZfZG9fbW5hKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgdHlwZV9jdHgpCit7CisJc2lnaW5mb190IGluZm87CisKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgIm1lbW9yeSBhZGRyZXNzIHVuYWxpZ25lZCIsIHJlZ3MsCisJCSAgICAgICAwLCAweDM0LCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJaWYgKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QUklWKSB7CisJCWtlcm5lbF91bmFsaWduZWRfdHJhcChyZWdzLCAqKCh1bnNpZ25lZCBpbnQgKilyZWdzLT50cGMpKTsKKwkJcmV0dXJuOworCX0KKwlpbmZvLnNpX3NpZ25vID0gU0lHQlVTOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfY29kZSA9IEJVU19BRFJBTE47CisJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopIGFkZHI7CisJaW5mby5zaV90cmFwbm8gPSAwOworCWZvcmNlX3NpZ19pbmZvKFNJR0JVUywgJmluZm8sIGN1cnJlbnQpOworfQorCiB2b2lkIGRvX3ByaXZvcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzaWdpbmZvX3QgaW5mbzsKQEAgLTIxMzAsNyArMjQ2NiwyMyBAQAogCX0KIH0KIAorc3RydWN0IHRyYXBfcGVyX2NwdSB0cmFwX2Jsb2NrW05SX0NQVVNdOworCisvKiBUaGlzIGNhbiBnZXQgaW52b2tlZCBiZWZvcmUgc2NoZWRfaW5pdCgpIHNvIHBsYXkgaXQgc3VwZXIgc2FmZQorICogYW5kIHVzZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKS4KKyAqLwordm9pZCBpbml0X2N1cl9jcHVfdHJhcChzdHJ1Y3QgdGhyZWFkX2luZm8gKnQpCit7CisJaW50IGNwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCB0cmFwX3Blcl9jcHUgKnAgPSAmdHJhcF9ibG9ja1tjcHVdOworCisJcC0+dGhyZWFkID0gdDsKKwlwLT5wZ2RfcGFkZHIgPSAwOworfQorCiBleHRlcm4gdm9pZCB0aHJlYWRfaW5mb19vZmZzZXRzX2FyZV9ib2xpeGVkX2RhdmUodm9pZCk7CitleHRlcm4gdm9pZCB0cmFwX3Blcl9jcHVfb2Zmc2V0c19hcmVfYm9saXhlZF9kYXZlKHZvaWQpOworZXh0ZXJuIHZvaWQgdHNiX2NvbmZpZ19vZmZzZXRzX2FyZV9ib2xpeGVkX2RhdmUodm9pZCk7CiAKIC8qIE9ubHkgaW52b2tlZCBvbiBib290IHByb2Nlc3Nvci4gKi8KIHZvaWQgX19pbml0IHRyYXBfaW5pdCh2b2lkKQpAQCAtMjE1NCw3ICsyNTA2LDYgQEAKIAkgICAgVElfS0VSTl9DTlREMCAhPSBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGtlcm5lbF9jbnRkMCkgfHwKIAkgICAgVElfS0VSTl9DTlREMSAhPSBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGtlcm5lbF9jbnRkMSkgfHwKIAkgICAgVElfUENSICE9IG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgcGNyX3JlZykgfHwKLQkgICAgVElfQ0VFX1NUVUZGICE9IG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY2VlX3N0dWZmKSB8fAogCSAgICBUSV9QUkVfQ09VTlQgIT0gb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KSB8fAogCSAgICBUSV9ORVdfQ0hJTEQgIT0gb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBuZXdfY2hpbGQpIHx8CiAJICAgIFRJX1NZU19OT0VSUk9SICE9IG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgc3lzY2FsbF9ub2Vycm9yKSB8fApAQCAtMjE2NSw2ICsyNTE2LDQ3IEBACiAJICAgIChUSV9GUFJFR1MgJiAoNjQgLSAxKSkpCiAJCXRocmVhZF9pbmZvX29mZnNldHNfYXJlX2JvbGl4ZWRfZGF2ZSgpOwogCisJaWYgKFRSQVBfUEVSX0NQVV9USFJFQUQgIT0gb2Zmc2V0b2Yoc3RydWN0IHRyYXBfcGVyX2NwdSwgdGhyZWFkKSB8fAorCSAgICAoVFJBUF9QRVJfQ1BVX1BHRF9QQUREUiAhPQorCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHRyYXBfcGVyX2NwdSwgcGdkX3BhZGRyKSkgfHwKKwkgICAgKFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fUEEgIT0KKwkgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFwX3Blcl9jcHUsIGNwdV9tb25kb19wYSkpIHx8CisJICAgIChUUkFQX1BFUl9DUFVfREVWX01PTkRPX1BBICE9CisJICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhcF9wZXJfY3B1LCBkZXZfbW9uZG9fcGEpKSB8fAorCSAgICAoVFJBUF9QRVJfQ1BVX1JFU1VNX01PTkRPX1BBICE9CisJICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhcF9wZXJfY3B1LCByZXN1bV9tb25kb19wYSkpIHx8CisJICAgIChUUkFQX1BFUl9DUFVfUkVTVU1fS0JVRl9QQSAhPQorCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHRyYXBfcGVyX2NwdSwgcmVzdW1fa2VybmVsX2J1Zl9wYSkpIHx8CisJICAgIChUUkFQX1BFUl9DUFVfTk9OUkVTVU1fTU9ORE9fUEEgIT0KKwkgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFwX3Blcl9jcHUsIG5vbnJlc3VtX21vbmRvX3BhKSkgfHwKKwkgICAgKFRSQVBfUEVSX0NQVV9OT05SRVNVTV9LQlVGX1BBICE9CisJICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhcF9wZXJfY3B1LCBub25yZXN1bV9rZXJuZWxfYnVmX3BhKSkgfHwKKwkgICAgKFRSQVBfUEVSX0NQVV9GQVVMVF9JTkZPICE9CisJICAgICBvZmZzZXRvZihzdHJ1Y3QgdHJhcF9wZXJfY3B1LCBmYXVsdF9pbmZvKSkgfHwKKwkgICAgKFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fQkxPQ0tfUEEgIT0KKwkgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFwX3Blcl9jcHUsIGNwdV9tb25kb19ibG9ja19wYSkpIHx8CisJICAgIChUUkFQX1BFUl9DUFVfQ1BVX0xJU1RfUEEgIT0KKwkgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFwX3Blcl9jcHUsIGNwdV9saXN0X3BhKSkgfHwKKwkgICAgKFRSQVBfUEVSX0NQVV9UU0JfSFVHRSAhPQorCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHRyYXBfcGVyX2NwdSwgdHNiX2h1Z2UpKSB8fAorCSAgICAoVFJBUF9QRVJfQ1BVX1RTQl9IVUdFX1RFTVAgIT0KKwkgICAgIG9mZnNldG9mKHN0cnVjdCB0cmFwX3Blcl9jcHUsIHRzYl9odWdlX3RlbXApKSkKKwkJdHJhcF9wZXJfY3B1X29mZnNldHNfYXJlX2JvbGl4ZWRfZGF2ZSgpOworCisJaWYgKChUU0JfQ09ORklHX1RTQiAhPQorCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHRzYl9jb25maWcsIHRzYikpIHx8CisJICAgIChUU0JfQ09ORklHX1JTU19MSU1JVCAhPQorCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHRzYl9jb25maWcsIHRzYl9yc3NfbGltaXQpKSB8fAorCSAgICAoVFNCX0NPTkZJR19ORU5UUklFUyAhPQorCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHRzYl9jb25maWcsIHRzYl9uZW50cmllcykpIHx8CisJICAgIChUU0JfQ09ORklHX1JFR19WQUwgIT0KKwkgICAgIG9mZnNldG9mKHN0cnVjdCB0c2JfY29uZmlnLCB0c2JfcmVnX3ZhbCkpIHx8CisJICAgIChUU0JfQ09ORklHX01BUF9WQUREUiAhPQorCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHRzYl9jb25maWcsIHRzYl9tYXBfdmFkZHIpKSB8fAorCSAgICAoVFNCX0NPTkZJR19NQVBfUFRFICE9CisJICAgICBvZmZzZXRvZihzdHJ1Y3QgdHNiX2NvbmZpZywgdHNiX21hcF9wdGUpKSkKKwkJdHNiX2NvbmZpZ19vZmZzZXRzX2FyZV9ib2xpeGVkX2RhdmUoKTsKKwogCS8qIEF0dGFjaCB0byB0aGUgYWRkcmVzcyBzcGFjZSBvZiBpbml0X3Rhc2suICBPbiBTTVAgd2UKIAkgKiBkbyB0aGlzIGluIHNtcC5jOnNtcF9jYWxsaW4gZm9yIG90aGVyIGNwdXMuCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3RzYi5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90c2IuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGM4YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90c2IuUwpAQCAtMCwwICsxLDU1MiBAQAorLyogdHNiLlM6IFNwYXJjNjQgVFNCIHRhYmxlIGhhbmRsaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8YXNtL3RzYi5oPgorI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworCS50ZXh0CisJLmFsaWduCTMyCisKKwkvKiBJbnZva2VkIGZyb20gVExCIG1pc3MgaGFuZGxlciwgd2UgYXJlIGluIHRoZQorCSAqIE1NVSBnbG9iYWwgcmVnaXN0ZXJzIGFuZCB0aGV5IGFyZSBzZXR1cCBsaWtlCisJICogdGhpczoKKwkgKgorCSAqICVnMTogVFNCIGVudHJ5IHBvaW50ZXIKKwkgKiAlZzI6CWF2YWlsYWJsZSB0ZW1wb3JhcnkKKwkgKiAlZzM6CUZBVUxUX0NPREVfe0QsSX1UTEIKKwkgKiAlZzQ6CWF2YWlsYWJsZSB0ZW1wb3JhcnkKKwkgKiAlZzU6CWF2YWlsYWJsZSB0ZW1wb3JhcnkKKwkgKiAlZzY6IFRBRyBUQVJHRVQKKwkgKiAlZzc6CWF2YWlsYWJsZSB0ZW1wb3JhcnksIHdpbGwgYmUgbG9hZGVkIGJ5IHVzIHdpdGgKKwkgKiAgICAgIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJhc2Ugb2YgdGhlIGxpbnV4IHBhZ2UKKwkgKiAgICAgIHRhYmxlcyBmb3IgdGhlIGN1cnJlbnQgYWRkcmVzcyBzcGFjZQorCSAqLwordHNiX21pc3NfZHRsYjoKKwltb3YJCVRMQl9UQUdfQUNDRVNTLCAlZzQKKwliYSxwdAkJJXhjYywgdHNiX21pc3NfcGFnZV90YWJsZV93YWxrCisJIGxkeGEJCVslZzRdIEFTSV9ETU1VLCAlZzQKKwordHNiX21pc3NfaXRsYjoKKwltb3YJCVRMQl9UQUdfQUNDRVNTLCAlZzQKKwliYSxwdAkJJXhjYywgdHNiX21pc3NfcGFnZV90YWJsZV93YWxrCisJIGxkeGEJCVslZzRdIEFTSV9JTU1VLCAlZzQKKworCS8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZToKKwkgKiAlZzEgLS0JUEFHRV9TSVpFIFRTQiBlbnRyeSBhZGRyZXNzCisJICogJWczIC0tCUZBVUxUX0NPREVfe0QsSX1UTEIKKwkgKiAlZzQgLS0JbWlzc2luZyB2aXJ0dWFsIGFkZHJlc3MKKwkgKiAlZzYgLS0JVEFHIFRBUkdFVCAodmFkZHIgPj4gMjIpCisJICovCit0c2JfbWlzc19wYWdlX3RhYmxlX3dhbGs6CisJVFJBUF9MT0FEX1RSQVBfQkxPQ0soJWc3LCAlZzUpCisKKwkvKiBCZWZvcmUgY29tbWl0dGluZyB0byBhIGZ1bGwgcGFnZSB0YWJsZSB3YWxrLAorCSAqIGNoZWNrIHRoZSBodWdlIHBhZ2UgVFNCLgorCSAqLworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKworNjYxOglsZHgJCVslZzcgKyBUUkFQX1BFUl9DUFVfVFNCX0hVR0VdLCAlZzUKKwlub3AKKwkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCW1vdgkJU0NSQVRDSFBBRF9VVFNCUkVHMiwgJWc1CisJbGR4YQkJWyVnNV0gQVNJX1NDUkFUQ0hQQUQsICVnNQorCS5wcmV2aW91cworCisJY21wCQklZzUsIC0xCisJYmUscHQJCSV4Y2MsIDgwZgorCSBub3AKKworCS8qIFdlIG5lZWQgYW4gYWxpZ25lZCBwYWlyIG9mIHJlZ2lzdGVycyBjb250YWluaW5nIDIgdmFsdWVzCisJICogd2hpY2ggY2FuIGJlIGVhc2lseSByZW1hdGVyaWFsaXplZC4gICVnNiBhbmQgJWc3IGZvb3QgdGhlCisJICogYmlsbCBqdXN0IG5pY2VseS4gIFdlJ2xsIHNhdmUgJWc2IGF3YXkgaW50byAlZzIgZm9yIHRoZQorCSAqIGh1Z2UgcGFnZSBUU0IgVEFHIGNvbXBhcmlzb24uCisJICoKKwkgKiBQZXJmb3JtIGEgaHVnZSBwYWdlIFRTQiBsb29rdXAuCisJICovCisJbW92CQklZzYsICVnMgorCWFuZAkJJWc1LCAweDcsICVnNgorCW1vdgkJNTEyLCAlZzcKKwlhbmRuCQklZzUsIDB4NywgJWc1CisJc2xseAkJJWc3LCAlZzYsICVnNworCXNybHgJCSVnNCwgSFBBR0VfU0hJRlQsICVnNgorCXN1YgkJJWc3LCAxLCAlZzcKKwlhbmQJCSVnNiwgJWc3LCAlZzYKKwlzbGx4CQklZzYsIDQsICVnNgorCWFkZAkJJWc1LCAlZzYsICVnNQorCisJVFNCX0xPQURfUVVBRCglZzUsICVnNikKKwljbXAJCSVnNiwgJWcyCisJYmUsYSxwdAkJJXhjYywgdHNiX3RsYl9yZWxvYWQKKwkgbW92CQklZzcsICVnNQorCisJLyogTm8gbWF0Y2gsIHJlbWVtYmVyIHRoZSBodWdlIHBhZ2UgVFNCIGVudHJ5IGFkZHJlc3MsCisJICogYW5kIHJlc3RvcmUgJWc2IGFuZCAlZzcuCisJICovCisJVFJBUF9MT0FEX1RSQVBfQkxPQ0soJWc3LCAlZzYpCisJc3JseAkJJWc0LCAyMiwgJWc2Cis4MDoJc3R4CQklZzUsIFslZzcgKyBUUkFQX1BFUl9DUFVfVFNCX0hVR0VfVEVNUF0KKworI2VuZGlmCisKKwlsZHgJCVslZzcgKyBUUkFQX1BFUl9DUFVfUEdEX1BBRERSXSwgJWc3CisKKwkvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmU6CisJICogJWcxIC0tCVRTQiBlbnRyeSBhZGRyZXNzCisJICogJWczIC0tCUZBVUxUX0NPREVfe0QsSX1UTEIKKwkgKiAlZzQgLS0JbWlzc2luZyB2aXJ0dWFsIGFkZHJlc3MKKwkgKiAlZzYgLS0JVEFHIFRBUkdFVCAodmFkZHIgPj4gMjIpCisJICogJWc3IC0tCXBhZ2UgdGFibGUgcGh5c2ljYWwgYWRkcmVzcworCSAqCisJICogV2Uga25vdyB0aGF0IGJvdGggdGhlIGJhc2UgUEFHRV9TSVpFIFRTQiBhbmQgdGhlIEhQQUdFX1NJWkUKKwkgKiBUU0IgYm90aCBsYWNrIGEgbWF0Y2hpbmcgZW50cnkuCisJICovCit0c2JfbWlzc19wYWdlX3RhYmxlX3dhbGtfc3VuNHZfZmFzdHBhdGg6CisJVVNFUl9QR1RBQkxFX1dBTEtfVEwxKCVnNCwgJWc3LCAlZzUsICVnMiwgdHNiX2RvX2ZhdWx0KQorCisJLyogTG9hZCBhbmQgY2hlY2sgUFRFLiAgKi8KKwlsZHhhCQlbJWc1XSBBU0lfUEhZU19VU0VfRUMsICVnNQorCWJyZ2V6LHBuCSVnNSwgdHNiX2RvX2ZhdWx0CisJIG5vcAorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorNjYxOglzZXRoaQkJJXVoaShfUEFHRV9TWkFMTF80VSksICVnNworCXNsbHgJCSVnNywgMzIsICVnNworCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQk2NjFiCisJbW92CQlfUEFHRV9TWkFMTF80ViwgJWc3CisJbm9wCisJLnByZXZpb3VzCisKKwlhbmQJCSVnNSwgJWc3LCAlZzIKKworNjYxOglzZXRoaQkJJXVoaShfUEFHRV9TWkhVR0VfNFUpLCAlZzcKKwlzbGx4CQklZzcsIDMyLCAlZzcKKwkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCW1vdgkJX1BBR0VfU1pIVUdFXzRWLCAlZzcKKwlub3AKKwkucHJldmlvdXMKKworCWNtcAkJJWcyLCAlZzcKKwlibmUscHQJCSV4Y2MsIDYwZgorCSBub3AKKworCS8qIEl0IGlzIGEgaHVnZSBwYWdlLCB1c2UgaHVnZSBwYWdlIFRTQiBlbnRyeSBhZGRyZXNzIHdlCisJICogY2FsY3VsYXRlZCBhYm92ZS4KKwkgKi8KKwlUUkFQX0xPQURfVFJBUF9CTE9DSyglZzcsICVnMikKKwlsZHgJCVslZzcgKyBUUkFQX1BFUl9DUFVfVFNCX0hVR0VfVEVNUF0sICVnMgorCWNtcAkJJWcyLCAtMQorCW1vdm5lCQkleGNjLCAlZzIsICVnMQorNjA6CisjZW5kaWYKKworCS8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZToKKwkgKiAlZzEgLS0JVFNCIGVudHJ5IGFkZHJlc3MKKwkgKiAlZzMgLS0JRkFVTFRfQ09ERV97RCxJfVRMQgorCSAqICVnNSAtLQl2YWxpZCBQVEUKKwkgKiAlZzYgLS0JVEFHIFRBUkdFVCAodmFkZHIgPj4gMjIpCisJICovCit0c2JfcmVsb2FkOgorCVRTQl9MT0NLX1RBRyglZzEsICVnMiwgJWc3KQorCVRTQl9XUklURSglZzEsICVnNSwgJWc2KQorCisJLyogRmluYWxseSwgbG9hZCBUTEIgYW5kIHJldHVybiBmcm9tIHRyYXAuICAqLwordHNiX3RsYl9yZWxvYWQ6CisJY21wCQklZzMsIEZBVUxUX0NPREVfRFRMQgorCWJuZSxwbgkJJXhjYywgdHNiX2l0bGJfbG9hZAorCSBub3AKKwordHNiX2R0bGJfbG9hZDoKKworNjYxOglzdHhhCQklZzUsIFslZzBdIEFTSV9EVExCX0RBVEFfSU4KKwlyZXRyeQorCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQk2NjFiCisJbm9wCisJbm9wCisJLnByZXZpb3VzCisKKwkvKiBGb3Igc3VuNHYgdGhlIEFTSV9EVExCX0RBVEFfSU4gc3RvcmUgYW5kIHRoZSByZXRyeQorCSAqIGluc3RydWN0aW9uIGdldCBub3AnZCBvdXQgYW5kIHdlIGdldCBoZXJlIHRvIGJyYW5jaAorCSAqIHRvIHRoZSBzdW40diB0bGIgbG9hZCBjb2RlLiAgVGhlIHJlZ2lzdGVycyBhcmUgc2V0dXAKKwkgKiBhcyBmb2xsb3dzOgorCSAqCisJICogJWc0OiB2YWRkcgorCSAqICVnNTogUFRFCisJICogJWc2OglUQUcKKwkgKgorCSAqIFRoZSBzdW40diBUTEIgbG9hZCB3YW50cyB0aGUgUFRFIGluICVnMyBzbyB3ZSBmaXggdGhhdAorCSAqIHVwIGhlcmUuCisJICovCisJYmEscHQJCSV4Y2MsIHN1bjR2X2R0bGJfbG9hZAorCSBtb3YJCSVnNSwgJWczCisKK3RzYl9pdGxiX2xvYWQ6CisJLyogRXhlY3V0YWJsZSBiaXQgbXVzdCBiZSBzZXQuICAqLworNjYxOglhbmRjYwkJJWc1LCBfUEFHRV9FWEVDXzRVLCAlZzAKKwkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCWFuZGNjCQklZzUsIF9QQUdFX0VYRUNfNFYsICVnMAorCS5wcmV2aW91cworCisJYmUscG4JCSV4Y2MsIHRzYl9kb19mYXVsdAorCSBub3AKKworNjYxOglzdHhhCQklZzUsIFslZzBdIEFTSV9JVExCX0RBVEFfSU4KKwlyZXRyeQorCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgImF4IgorCS53b3JkCQk2NjFiCisJbm9wCisJbm9wCisJLnByZXZpb3VzCisKKwkvKiBGb3Igc3VuNHYgdGhlIEFTSV9JVExCX0RBVEFfSU4gc3RvcmUgYW5kIHRoZSByZXRyeQorCSAqIGluc3RydWN0aW9uIGdldCBub3AnZCBvdXQgYW5kIHdlIGdldCBoZXJlIHRvIGJyYW5jaAorCSAqIHRvIHRoZSBzdW40diB0bGIgbG9hZCBjb2RlLiAgVGhlIHJlZ2lzdGVycyBhcmUgc2V0dXAKKwkgKiBhcyBmb2xsb3dzOgorCSAqCisJICogJWc0OiB2YWRkcgorCSAqICVnNTogUFRFCisJICogJWc2OglUQUcKKwkgKgorCSAqIFRoZSBzdW40diBUTEIgbG9hZCB3YW50cyB0aGUgUFRFIGluICVnMyBzbyB3ZSBmaXggdGhhdAorCSAqIHVwIGhlcmUuCisJICovCisJYmEscHQJCSV4Y2MsIHN1bjR2X2l0bGJfbG9hZAorCSBtb3YJCSVnNSwgJWczCisKKwkvKiBObyB2YWxpZCBlbnRyeSBpbiB0aGUgcGFnZSB0YWJsZXMsIGRvIGZ1bGwgZmF1bHQKKwkgKiBwcm9jZXNzaW5nLgorCSAqLworCisJLmdsb2JsCQl0c2JfZG9fZmF1bHQKK3RzYl9kb19mYXVsdDoKKwljbXAJCSVnMywgRkFVTFRfQ09ERV9EVExCCisKKzY2MToJcmRwcgkJJXBzdGF0ZSwgJWc1CisJd3JwcgkJJWc1LCBQU1RBVEVfQUcgfCBQU1RBVEVfTUcsICVwc3RhdGUKKwkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCVNFVF9HTCgxKQorCWxkeGEJCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzQKKwkucHJldmlvdXMKKworCWJuZSxwbgkJJXhjYywgdHNiX2RvX2l0bGJfZmF1bHQKKwkgbm9wCisKK3RzYl9kb19kdGxiX2ZhdWx0OgorCXJkcHIJJXRsLCAlZzMKKwljbXAJJWczLCAxCisKKzY2MToJbW92CVRMQl9UQUdfQUNDRVNTLCAlZzQKKwlsZHhhCVslZzRdIEFTSV9ETU1VLCAlZzUKKwkuc2VjdGlvbiAuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKKwkud29yZAk2NjFiCisJbGR4CVslZzQgKyBIVl9GQVVMVF9EX0FERFJfT0ZGU0VUXSwgJWc1CisJbm9wCisJLnByZXZpb3VzCisKKwliZSxwdAkleGNjLCBzcGFyYzY0X3JlYWxmYXVsdF9jb21tb24KKwkgbW92CUZBVUxUX0NPREVfRFRMQiwgJWc0CisJYmEscHQJJXhjYywgd2luZml4X3RyYW1wb2xpbmUKKwkgbm9wCisKK3RzYl9kb19pdGxiX2ZhdWx0OgorCXJkcHIJJXRwYywgJWc1CisJYmEscHQJJXhjYywgc3BhcmM2NF9yZWFsZmF1bHRfY29tbW9uCisJIG1vdglGQVVMVF9DT0RFX0lUTEIsICVnNAorCisJLmdsb2JsCXNwYXJjNjRfcmVhbGZhdWx0X2NvbW1vbgorc3BhcmM2NF9yZWFsZmF1bHRfY29tbW9uOgorCS8qIGZhdWx0IGNvZGUgaW4gJWc0LCBmYXVsdCBhZGRyZXNzIGluICVnNSwgZXRyYXAgd2lsbAorCSAqIHByZXNlcnZlIHRoZXNlIHR3byB2YWx1ZXMgaW4gJWw0IGFuZCAlbDUgcmVzcGVjdGl2ZWx5CisJICovCisJYmEscHQJJXhjYywgZXRyYXAJCQkhIFNhdmUgdHJhcCBzdGF0ZQorMToJIHJkCSVwYywgJWc3CQkJISAuLi4KKwlzdGIJJWw0LCBbJWc2ICsgVElfRkFVTFRfQ09ERV0JISBTYXZlIGZhdWx0IGNvZGUKKwlzdHgJJWw1LCBbJWc2ICsgVElfRkFVTFRfQUREUl0JISBTYXZlIGZhdWx0IGFkZHJlc3MKKwljYWxsCWRvX3NwYXJjNjRfZmF1bHQJCSEgQ2FsbCBmYXVsdCBoYW5kbGVyCisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAkJISBDb21wdXRlIHB0X3JlZ3MgYXJnCisJYmEscHQJJXhjYywgcnRyYXBfY2xyX2w2CQkhIFJlc3RvcmUgY3B1IHN0YXRlCisJIG5vcAkJCQkJISBEZWxheSBzbG90IChmaWxsIG1lKQorCit3aW5maXhfdHJhbXBvbGluZToKKwlyZHByCSV0cGMsICVnMwkJCSEgUHJlcGFyZSB3aW5maXh1cCBUTlBDCisJb3IJJWczLCAweDdjLCAlZzMJCQkhIENvbXB1dGUgYnJhbmNoIG9mZnNldAorCXdycHIJJWczLCAldG5wYwkJCSEgV3JpdGUgaXQgaW50byBUTlBDCisJZG9uZQkJCQkJISBUcmFwIHJldHVybgorCisJLyogSW5zZXJ0IGFuIGVudHJ5IGludG8gdGhlIFRTQi4KKwkgKgorCSAqICVvMDogVFNCIGVudHJ5IHBvaW50ZXIgKHZpcnQgb3IgcGh5cyBhZGRyZXNzKQorCSAqICVvMTogdGFnCisJICogJW8yOglwdGUKKwkgKi8KKwkuYWxpZ24JMzIKKwkuZ2xvYmwJX190c2JfaW5zZXJ0CitfX3RzYl9pbnNlcnQ6CisJcmRwcgklcHN0YXRlLCAlbzUKKwl3cnByCSVvNSwgUFNUQVRFX0lFLCAlcHN0YXRlCisJVFNCX0xPQ0tfVEFHKCVvMCwgJWcyLCAlZzMpCisJVFNCX1dSSVRFKCVvMCwgJW8yLCAlbzEpCisJd3JwcgklbzUsICVwc3RhdGUKKwlyZXRsCisJIG5vcAorCS5zaXplCV9fdHNiX2luc2VydCwgLi1fX3RzYl9pbnNlcnQKKworCS8qIEZsdXNoIHRoZSBnaXZlbiBUU0IgZW50cnkgaWYgaXQgaGFzIHRoZSBtYXRjaGluZworCSAqIHRhZy4KKwkgKgorCSAqICVvMDogVFNCIGVudHJ5IHBvaW50ZXIgKHZpcnQgb3IgcGh5cyBhZGRyZXNzKQorCSAqICVvMToJdGFnCisJICovCisJLmFsaWduCTMyCisJLmdsb2JsCXRzYl9mbHVzaAorCS50eXBlCXRzYl9mbHVzaCwjZnVuY3Rpb24KK3RzYl9mbHVzaDoKKwlzZXRoaQklaGkoVFNCX1RBR19MT0NLX0hJR0gpLCAlZzIKKzE6CVRTQl9MT0FEX1RBRyglbzAsICVnMSkKKwlzcmx4CSVnMSwgMzIsICVvMworCWFuZGNjCSVvMywgJWcyLCAlZzAKKwlibmUscG4JJWljYywgMWIKKwkgbWVtYmFyCSNMb2FkTG9hZAorCWNtcAklZzEsICVvMQorCW1vdgkxLCAlbzMKKwlibmUscHQJJXhjYywgMmYKKwkgc2xseAklbzMsIFRTQl9UQUdfSU5WQUxJRF9CSVQsICVvMworCVRTQl9DQVNfVEFHKCVvMCwgJWcxLCAlbzMpCisJY21wCSVnMSwgJW8zCisJYm5lLHBuCSV4Y2MsIDFiCisJIG5vcAorMjoJcmV0bAorCSBUU0JfTUVNQkFSCisJLnNpemUJdHNiX2ZsdXNoLCAuLXRzYl9mbHVzaAorCisJLyogUmVsb2FkIE1NVSByZWxhdGVkIGNvbnRleHQgc3dpdGNoIHN0YXRlIGF0CisJICogc2NoZWR1bGUoKSB0aW1lLgorCSAqCisJICogJW8wOiBwYWdlIHRhYmxlIHBoeXNpY2FsIGFkZHJlc3MKKwkgKiAlbzE6CVRTQiBiYXNlIGNvbmZpZyBwb2ludGVyCisJICogJW8yOglUU0IgaHVnZSBjb25maWcgcG9pbnRlciwgb3IgTlVMTCBpZiBub25lCisJICogJW8zOglIeXBlcnZpc29yIFRTQiBkZXNjcmlwdG9yIHBoeXNpY2FsIGFkZHJlc3MKKwkgKgorCSAqIFdlIGhhdmUgdG8gcnVuIHRoaXMgd2hvbGUgdGhpbmcgd2l0aCBpbnRlcnJ1cHRzCisJICogZGlzYWJsZWQgc28gdGhhdCB0aGUgY3VycmVudCBjcHUgZG9lc24ndCBjaGFuZ2UKKwkgKiBkdWUgdG8gcHJlZW1wdGlvbi4KKwkgKi8KKwkuYWxpZ24JMzIKKwkuZ2xvYmwJX190c2JfY29udGV4dF9zd2l0Y2gKKwkudHlwZQlfX3RzYl9jb250ZXh0X3N3aXRjaCwjZnVuY3Rpb24KK19fdHNiX2NvbnRleHRfc3dpdGNoOgorCXJkcHIJJXBzdGF0ZSwgJWcxCisJd3JwcgklZzEsIFBTVEFURV9JRSwgJXBzdGF0ZQorCisJVFJBUF9MT0FEX1RSQVBfQkxPQ0soJWcyLCAlZzMpCisKKwlzdHgJJW8wLCBbJWcyICsgVFJBUF9QRVJfQ1BVX1BHRF9QQUREUl0KKworCWxkeAlbJW8xICsgVFNCX0NPTkZJR19SRUdfVkFMXSwgJW8wCisJYnJ6LHB0CSVvMiwgMWYKKwkgbW92CS0xLCAlZzMKKworCWxkeAlbJW8yICsgVFNCX0NPTkZJR19SRUdfVkFMXSwgJWczCisKKzE6CXN0eAklZzMsIFslZzIgKyBUUkFQX1BFUl9DUFVfVFNCX0hVR0VdCisKKwlzZXRoaQklaGkodGxiX3R5cGUpLCAlZzIKKwlsZHV3CVslZzIgKyAlbG8odGxiX3R5cGUpXSwgJWcyCisJY21wCSVnMiwgMworCWJuZSxwdAklaWNjLCA1MGYKKwkgbm9wCisKKwkvKiBIeXBlcnZpc29yIFRTQiBzd2l0Y2guICovCisJbW92CVNDUkFUQ0hQQURfVVRTQlJFRzEsICVvNQorCXN0eGEJJW8wLCBbJW81XSBBU0lfU0NSQVRDSFBBRAorCW1vdglTQ1JBVENIUEFEX1VUU0JSRUcyLCAlbzUKKwlzdHhhCSVnMywgWyVvNV0gQVNJX1NDUkFUQ0hQQUQKKworCW1vdgkyLCAlbzAKKwljbXAJJWczLCAtMQorCW1vdmUJJXhjYywgMSwgJW8wCisKKwltb3YJSFZfRkFTVF9NTVVfVFNCX0NUWE5PTjAsICVvNQorCW1vdgklbzMsICVvMQorCXRhCUhWX0ZBU1RfVFJBUAorCisJLyogRmluaXNoIHVwLiAgKi8KKwliYSxwdAkleGNjLCA5ZgorCSBub3AKKworCS8qIFNVTjRVIFRTQiBzd2l0Y2guICAqLworNTA6CW1vdglUU0JfUkVHLCAlbzUKKwlzdHhhCSVvMCwgWyVvNV0gQVNJX0RNTVUKKwltZW1iYXIJI1N5bmMKKwlzdHhhCSVvMCwgWyVvNV0gQVNJX0lNTVUKKwltZW1iYXIJI1N5bmMKKworMjoJbGR4CVslbzEgKyBUU0JfQ09ORklHX01BUF9WQUREUl0sICVvNAorCWJyegklbzQsIDlmCisJIGxkeAlbJW8xICsgVFNCX0NPTkZJR19NQVBfUFRFXSwgJW81CisKKwlzZXRoaQklaGkoc3BhcmM2NF9oaWdoZXN0X3VubG9ja2VkX3RsYl9lbnQpLCAlZzIKKwltb3YJVExCX1RBR19BQ0NFU1MsICVnMworCWxkdXcJWyVnMiArICVsbyhzcGFyYzY0X2hpZ2hlc3RfdW5sb2NrZWRfdGxiX2VudCldLCAlZzIKKwlzdHhhCSVvNCwgWyVnM10gQVNJX0RNTVUKKwltZW1iYXIJI1N5bmMKKwlzbGx4CSVnMiwgMywgJWcyCisJc3R4YQklbzUsIFslZzJdIEFTSV9EVExCX0RBVEFfQUNDRVNTCisJbWVtYmFyCSNTeW5jCisKKwlicnoscHQJJW8yLCA5ZgorCSBub3AKKworCWxkeAlbJW8yICsgVFNCX0NPTkZJR19NQVBfVkFERFJdLCAlbzQKKwlsZHgJWyVvMiArIFRTQl9DT05GSUdfTUFQX1BURV0sICVvNQorCW1vdglUTEJfVEFHX0FDQ0VTUywgJWczCisJc3R4YQklbzQsIFslZzNdIEFTSV9ETU1VCisJbWVtYmFyCSNTeW5jCisJc3ViCSVnMiwgKDEgPDwgMyksICVnMgorCXN0eGEJJW81LCBbJWcyXSBBU0lfRFRMQl9EQVRBX0FDQ0VTUworCW1lbWJhcgkjU3luYworCis5OgorCXdycHIJJWcxLCAlcHN0YXRlCisKKwlyZXRsCisJIG5vcAorCS5zaXplCV9fdHNiX2NvbnRleHRfc3dpdGNoLCAuLV9fdHNiX2NvbnRleHRfc3dpdGNoCisKKyNkZWZpbmUgVFNCX1BBU1NfQklUUwkoKDEgPDwgVFNCX1RBR19MT0NLX0JJVCkgfCBcCisJCQkgKDEgPDwgVFNCX1RBR19JTlZBTElEX0JJVCkpCisKKwkuYWxpZ24JMzIKKwkuZ2xvYmwJY29weV90c2IKKwkudHlwZQljb3B5X3RzYiwjZnVuY3Rpb24KK2NvcHlfdHNiOgkJLyogJW8wPW9sZF90c2JfYmFzZSwgJW8xPW9sZF90c2Jfc2l6ZQorCQkJICogJW8yPW5ld190c2JfYmFzZSwgJW8zPW5ld190c2Jfc2l6ZQorCQkJICovCisJc2V0aGkJCSV1aGkoVFNCX1BBU1NfQklUUyksICVnNworCXNybHgJCSVvMywgNCwgJW8zCisJYWRkCQklbzAsICVvMSwgJWcxCS8qIGVuZCBvZiBvbGQgdHNiICovCisJc2xseAkJJWc3LCAzMiwgJWc3CisJc3ViCQklbzMsIDEsICVvMwkvKiAlbzMgPT0gbmV3IHRzYiBoYXNoIG1hc2sgKi8KKworNjYxOglwcmVmZXRjaGEJWyVvMF0gQVNJX04sICNvbmVfcmVhZAorCS5zZWN0aW9uCS50c2JfcGh5c19wYXRjaCwgImF4IgorCS53b3JkCQk2NjFiCisJcHJlZmV0Y2hhCVslbzBdIEFTSV9QSFlTX1VTRV9FQywgI29uZV9yZWFkCisJLnByZXZpb3VzCisKKzkwOglhbmRjYwkJJW8wLCAoNjQgLSAxKSwgJWcwCisJYm5lCQkxZgorCSBhZGQJCSVvMCwgNjQsICVvNQorCis2NjE6CXByZWZldGNoYQlbJW81XSBBU0lfTiwgI29uZV9yZWFkCisJLnNlY3Rpb24JLnRzYl9waHlzX3BhdGNoLCAiYXgiCisJLndvcmQJCTY2MWIKKwlwcmVmZXRjaGEJWyVvNV0gQVNJX1BIWVNfVVNFX0VDLCAjb25lX3JlYWQKKwkucHJldmlvdXMKKworMToJVFNCX0xPQURfUVVBRCglbzAsICVnMikJCS8qICVnMi8lZzMgPT0gVFNCIGVudHJ5ICovCisJYW5kY2MJCSVnMiwgJWc3LCAlZzAJLyogTE9DSyBvciBJTlZBTElEIHNldD8gKi8KKwlibmUscG4JCSV4Y2MsIDgwZgkvKiBTa2lwIGl0ICovCisJIHNsbHgJCSVnMiwgMjIsICVvNAkvKiBUQUcgLS0+IFZBRERSICovCisKKwkvKiBUaGlzIGNhbiBkZWZpbml0ZWx5IGJlIGNvbXB1dGVkIGZhc3Rlci4uLiAqLworCXNybHgJCSVvMCwgNCwgJW81CS8qIEJ1aWxkIGluZGV4ICovCisJYW5kCQklbzUsIDUxMSwgJW81CS8qIE1hc2sgaW5kZXggKi8KKwlzbGx4CQklbzUsIFBBR0VfU0hJRlQsICVvNSAvKiBQdXQgaW50byB2YWRkciBwb3NpdGlvbiAqLworCW9yCQklbzQsICVvNSwgJW80CS8qIEZ1bGwgVkFERFIuICovCisJc3JseAkJJW80LCBQQUdFX1NISUZULCAlbzQgLyogU2hpZnQgZG93biB0byBjcmVhdGUgaW5kZXggKi8KKwlhbmQJCSVvNCwgJW8zLCAlbzQJLyogTWFzayB3aXRoIG5ld190c2JfbmVudHMtMSAqLworCXNsbHgJCSVvNCwgNCwgJW80CS8qIFNoaWZ0IGJhY2sgdXAgaW50byB0c2IgZW50IG9mZnNldCAqLworCVRTQl9TVE9SRSglbzIgKyAlbzQsICVnMikJLyogU3RvcmUgVEFHICovCisJYWRkCQklbzQsIDB4OCwgJW80CS8qIEFkdmFuY2UgdG8gVFRFICovCisJVFNCX1NUT1JFKCVvMiArICVvNCwgJWczKQkvKiBTdG9yZSBUVEUgKi8KKworODA6CWFkZAkJJW8wLCAxNiwgJW8wCisJY21wCQklbzAsICVnMQorCWJuZSxwdAkJJXhjYywgOTBiCisJIG5vcAorCisJcmV0bAorCSBUU0JfTUVNQkFSCisJLnNpemUJCWNvcHlfdHNiLCAuLWNvcHlfdHNiCisKKwkvKiBTZXQgdGhlIGludmFsaWQgYml0IGluIGFsbCBUU0IgZW50cmllcy4gICovCisJLmFsaWduCQkzMgorCS5nbG9ibAkJdHNiX2luaXQKKwkudHlwZQkJdHNiX2luaXQsI2Z1bmN0aW9uCit0c2JfaW5pdDoJCS8qICVvMCA9IFRTQiB2YWRkciwgJW8xID0gc2l6ZSBpbiBieXRlcyAqLworCXByZWZldGNoCVslbzAgKyAweDAwMF0sICNuX3dyaXRlcworCW1vdgkJMSwgJWcxCisJcHJlZmV0Y2gJWyVvMCArIDB4MDQwXSwgI25fd3JpdGVzCisJc2xseAkJJWcxLCBUU0JfVEFHX0lOVkFMSURfQklULCAlZzEKKwlwcmVmZXRjaAlbJW8wICsgMHgwODBdLCAjbl93cml0ZXMKKzE6CXByZWZldGNoCVslbzAgKyAweDBjMF0sICNuX3dyaXRlcworCXN0eAkJJWcxLCBbJW8wICsgMHgwMF0KKwlzdHgJCSVnMSwgWyVvMCArIDB4MTBdCisJc3R4CQklZzEsIFslbzAgKyAweDIwXQorCXN0eAkJJWcxLCBbJW8wICsgMHgzMF0KKwlwcmVmZXRjaAlbJW8wICsgMHgxMDBdLCAjbl93cml0ZXMKKwlzdHgJCSVnMSwgWyVvMCArIDB4NDBdCisJc3R4CQklZzEsIFslbzAgKyAweDUwXQorCXN0eAkJJWcxLCBbJW8wICsgMHg2MF0KKwlzdHgJCSVnMSwgWyVvMCArIDB4NzBdCisJcHJlZmV0Y2gJWyVvMCArIDB4MTQwXSwgI25fd3JpdGVzCisJc3R4CQklZzEsIFslbzAgKyAweDgwXQorCXN0eAkJJWcxLCBbJW8wICsgMHg5MF0KKwlzdHgJCSVnMSwgWyVvMCArIDB4YTBdCisJc3R4CQklZzEsIFslbzAgKyAweGIwXQorCXByZWZldGNoCVslbzAgKyAweDE4MF0sICNuX3dyaXRlcworCXN0eAkJJWcxLCBbJW8wICsgMHhjMF0KKwlzdHgJCSVnMSwgWyVvMCArIDB4ZDBdCisJc3R4CQklZzEsIFslbzAgKyAweGUwXQorCXN0eAkJJWcxLCBbJW8wICsgMHhmMF0KKwlzdWJjYwkJJW8xLCAweDEwMCwgJW8xCisJYm5lLHB0CQkleGNjLCAxYgorCSBhZGQJCSVvMCwgMHgxMDAsICVvMAorCXJldGwKKwkgbm9wCisJbm9wCisJbm9wCisJLnNpemUJCXRzYl9pbml0LCAuLXRzYl9pbml0CisKKwkuZ2xvYmwJCU5HdHNiX2luaXQKKwkudHlwZQkJTkd0c2JfaW5pdCwjZnVuY3Rpb24KK05HdHNiX2luaXQ6CisJcmQJCSVhc2ksICVnMgorCW1vdgkJMSwgJWcxCisJd3IJCSVnMCwgQVNJX0JMS19JTklUX1FVQURfTEREX1AsICVhc2kKKwlzbGx4CQklZzEsIFRTQl9UQUdfSU5WQUxJRF9CSVQsICVnMQorMToJc3R4YQkJJWcxLCBbJW8wICsgMHgwMF0gJWFzaQorCXN0eGEJCSVnMSwgWyVvMCArIDB4MTBdICVhc2kKKwlzdHhhCQklZzEsIFslbzAgKyAweDIwXSAlYXNpCisJc3R4YQkJJWcxLCBbJW8wICsgMHgzMF0gJWFzaQorCXN0eGEJCSVnMSwgWyVvMCArIDB4NDBdICVhc2kKKwlzdHhhCQklZzEsIFslbzAgKyAweDUwXSAlYXNpCisJc3R4YQkJJWcxLCBbJW8wICsgMHg2MF0gJWFzaQorCXN0eGEJCSVnMSwgWyVvMCArIDB4NzBdICVhc2kKKwlzdHhhCQklZzEsIFslbzAgKyAweDgwXSAlYXNpCisJc3R4YQkJJWcxLCBbJW8wICsgMHg5MF0gJWFzaQorCXN0eGEJCSVnMSwgWyVvMCArIDB4YTBdICVhc2kKKwlzdHhhCQklZzEsIFslbzAgKyAweGIwXSAlYXNpCisJc3R4YQkJJWcxLCBbJW8wICsgMHhjMF0gJWFzaQorCXN0eGEJCSVnMSwgWyVvMCArIDB4ZDBdICVhc2kKKwlzdHhhCQklZzEsIFslbzAgKyAweGUwXSAlYXNpCisJc3R4YQkJJWcxLCBbJW8wICsgMHhmMF0gJWFzaQorCXN1YmNjCQklbzEsIDB4MTAwLCAlbzEKKwlibmUscHQJCSV4Y2MsIDFiCisJIGFkZAkJJW8wLCAweDEwMCwgJW8wCisJcmV0bAorCSB3cgkJJWcyLCAweDAsICVhc2kKKwkuc2l6ZQkJTkd0c2JfaW5pdCwgLi1OR3RzYl9pbml0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90dGFibGUuUwppbmRleCA4MzY1YmMxLi41ZDkwMTUxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3R0YWJsZS5TCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHRhYmxlLlMKQEAgLTEsNyArMSw2IEBACi0vKiAkSWQ6IHR0YWJsZS5TLHYgMS4zOCAyMDAyLzAyLzA5IDE5OjQ5OjMwIGRhdmVtIEV4cCAkCi0gKiB0dGFibGUuUzogU3BhcmMgVjkgVHJhcCBUYWJsZShzKSB3aXRoIFNwaXRGaXJlL0NoZWV0YWggZXh0ZW5zaW9ucy4KKy8qIHR0YWJsZS5TOiBTcGFyYyBWOSBUcmFwIFRhYmxlKHMpIHdpdGggU3BpdEZpcmUvQ2hlZXRhaC9TVU40ViBleHRlbnNpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMjAwMSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDIwMDEsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTE5LDcgKzE4LDcgQEAKIHRsMF9yZXN2MDA0OglCVFJBUCgweDQpICBCVFJBUCgweDUpIEJUUkFQKDB4NikgQlRSQVAoMHg3KQogdGwwX2lheDoJbWVtYmFyICNTeW5jCiAJCVRSQVBfTk9TQVZFXzdJTlNOUyhfX3NwaXRmaXJlX2luc25fYWNjZXNzX2V4Y2VwdGlvbikKLXRsMF9yZXN2MDA5OglCVFJBUCgweDkpCit0bDBfaXRzYl80djoJU1VONFZfSVRTQl9NSVNTCiB0bDBfaWFlOgltZW1iYXIgI1N5bmMKIAkJVFJBUF9OT1NBVkVfN0lOU05TKF9fc3BpdGZpcmVfYWNjZXNzX2Vycm9yKQogdGwwX3Jlc3YwMGI6CUJUUkFQKDB4YikgQlRSQVAoMHhjKSBCVFJBUCgweGQpIEJUUkFQKDB4ZSkgQlRSQVAoMHhmKQpAQCAtMzgsNyArMzcsNyBAQAogdGwwX3Jlc3YwMjk6CUJUUkFQKDB4MjkpIEJUUkFQKDB4MmEpIEJUUkFQKDB4MmIpIEJUUkFQKDB4MmMpIEJUUkFQKDB4MmQpIEJUUkFQKDB4MmUpCiB0bDBfcmVzdjAyZjoJQlRSQVAoMHgyZikKIHRsMF9kYXg6CVRSQVBfTk9TQVZFKF9fc3BpdGZpcmVfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKQotdGwwX3Jlc3YwMzE6CUJUUkFQKDB4MzEpCit0bDBfZHRzYl80djoJU1VONFZfRFRTQl9NSVNTCiB0bDBfZGFlOgltZW1iYXIgI1N5bmMKIAkJVFJBUF9OT1NBVkVfN0lOU05TKF9fc3BpdGZpcmVfYWNjZXNzX2Vycm9yKQogdGwwX3Jlc3YwMzM6CUJUUkFQKDB4MzMpCkBAIC01MiwxMiArNTEsMTMgQEAKIHRsMF9pcnExOglUUkFQX0lSUShzbXBfY2FsbF9mdW5jdGlvbl9jbGllbnQsIDEpCiB0bDBfaXJxMjoJVFJBUF9JUlEoc21wX3JlY2VpdmVfc2lnbmFsX2NsaWVudCwgMikKIHRsMF9pcnEzOglUUkFQX0lSUShzbXBfcGVuZ3Vpbl9qYWlsY2VsbCwgMykKK3RsMF9pcnE0OglUUkFQX0lSUShzbXBfbmV3X21tdV9jb250ZXh0X3ZlcnNpb25fY2xpZW50LCA0KQogI2Vsc2UKIHRsMF9pcnExOglCVFJBUCgweDQxKQogdGwwX2lycTI6CUJUUkFQKDB4NDIpCiB0bDBfaXJxMzoJQlRSQVAoMHg0MykKK3RsMF9pcnE0OglCVFJBUCgweDQ0KQogI2VuZGlmCi10bDBfaXJxNDoJVFJBUF9JUlEoaGFuZGxlcl9pcnEsIDQpCiB0bDBfaXJxNToJVFJBUF9JUlEoaGFuZGxlcl9pcnEsIDUpICBUUkFQX0lSUShoYW5kbGVyX2lycSwgNikKIHRsMF9pcnE3OglUUkFQX0lSUShoYW5kbGVyX2lycSwgNykgIFRSQVBfSVJRKGhhbmRsZXJfaXJxLCA4KQogdGwwX2lycTk6CVRSQVBfSVJRKGhhbmRsZXJfaXJxLCA5KSAgVFJBUF9JUlEoaGFuZGxlcl9pcnEsIDEwKQpAQCAtNzgsOSArNzgsOSBAQAogdGwwX2NlZToJbWVtYmFyICNTeW5jCiAJCVRSQVBfTk9TQVZFXzdJTlNOUyhfX3NwaXRmaXJlX2NlZV90cmFwKQogdGwwX2lhbWlzczoKLSNpbmNsdWRlCSJpdGxiX2Jhc2UuUyIKKyNpbmNsdWRlCSJpdGxiX21pc3MuUyIKIHRsMF9kYW1pc3M6Ci0jaW5jbHVkZQkiZHRsYl9iYXNlLlMiCisjaW5jbHVkZQkiZHRsYl9taXNzLlMiCiB0bDBfZGFwcm90OgogI2luY2x1ZGUJImR0bGJfcHJvdC5TIgogdGwwX2ZlY2M6CUJUUkFQKDB4NzApCS8qIEZhc3QtRUNDIG9uIENoZWV0YWggKi8KQEAgLTg4LDE1ICs4OCwxOCBAQAogdGwwX2ljcGU6CUJUUkFQKDB4NzIpCS8qIEktY2FjaGUgUGFyaXR5IEVycm9yIG9uIENoZWV0YWgrICovCiB0bDBfcmVzdjA3MzoJQlRSQVAoMHg3MykgQlRSQVAoMHg3NCkgQlRSQVAoMHg3NSkKIHRsMF9yZXN2MDc2OglCVFJBUCgweDc2KSBCVFJBUCgweDc3KSBCVFJBUCgweDc4KSBCVFJBUCgweDc5KSBCVFJBUCgweDdhKSBCVFJBUCgweDdiKQotdGwwX3Jlc3YwN2M6CUJUUkFQKDB4N2MpIEJUUkFQKDB4N2QpIEJUUkFQKDB4N2UpIEJUUkFQKDB4N2YpCit0bDBfY3B1X21vbmRvOglUUkFQX05PU0FWRShzdW40dl9jcHVfbW9uZG8pCit0bDBfZGV2X21vbmRvOglUUkFQX05PU0FWRShzdW40dl9kZXZfbW9uZG8pCit0bDBfcmVzX21vbmRvOglUUkFQX05PU0FWRShzdW40dl9yZXNfbW9uZG8pCit0bDBfbnJlc19tb25kbzoJVFJBUF9OT1NBVkUoc3VuNHZfbm9ucmVzX21vbmRvKQogdGwwX3MwbjoJU1BJTExfMF9OT1JNQUwKIHRsMF9zMW46CVNQSUxMXzFfTk9STUFMCiB0bDBfczJuOglTUElMTF8yX05PUk1BTAotdGwwX3MzbjoJU1BJTExfM19OT1JNQUwKLXRsMF9zNG46CVNQSUxMXzRfTk9STUFMCi10bDBfczVuOglTUElMTF81X05PUk1BTAotdGwwX3M2bjoJU1BJTExfNl9OT1JNQUwKLXRsMF9zN246CVNQSUxMXzdfTk9STUFMCit0bDBfczNuOglTUElMTF8wX05PUk1BTF9FVFJBUAordGwwX3M0bjoJU1BJTExfMV9HRU5FUklDX0VUUkFQCit0bDBfczVuOglTUElMTF8xX0dFTkVSSUNfRVRSQVBfRklYVVAKK3RsMF9zNm46CVNQSUxMXzJfR0VORVJJQ19FVFJBUAordGwwX3M3bjoJU1BJTExfMl9HRU5FUklDX0VUUkFQX0ZJWFVQCiB0bDBfczBvOglTUElMTF8wX09USEVSCiB0bDBfczFvOglTUElMTF8xX09USEVSCiB0bDBfczJvOglTUElMTF8yX09USEVSCkBAIC0xMTAsOSArMTEzLDkgQEAKIHRsMF9mMm46CUZJTExfMl9OT1JNQUwKIHRsMF9mM246CUZJTExfM19OT1JNQUwKIHRsMF9mNG46CUZJTExfNF9OT1JNQUwKLXRsMF9mNW46CUZJTExfNV9OT1JNQUwKLXRsMF9mNm46CUZJTExfNl9OT1JNQUwKLXRsMF9mN246CUZJTExfN19OT1JNQUwKK3RsMF9mNW46CUZJTExfMF9OT1JNQUxfUlRSQVAKK3RsMF9mNm46CUZJTExfMV9HRU5FUklDX1JUUkFQCit0bDBfZjduOglGSUxMXzJfR0VORVJJQ19SVFJBUAogdGwwX2YwbzoJRklMTF8wX09USEVSCiB0bDBfZjFvOglGSUxMXzFfT1RIRVIKIHRsMF9mMm86CUZJTExfMl9PVEhFUgpAQCAtMTI4LDcgKzEzMSw3IEBACiB0bDBfcmVzdjEwNDoJQlRSQVAoMHgxMDQpIEJUUkFQKDB4MTA1KSBCVFJBUCgweDEwNikgQlRSQVAoMHgxMDcpCiAJCS5nbG9ibCB0bDBfc29sYXJpcwogdGwwX3NvbGFyaXM6CVNPTEFSSVNfU1lTQ0FMTF9UUkFQCi10bDBfbmV0YnNkOglORVRCU0RfU1lTQ0FMTF9UUkFQCit0bDBfcmVzdjEwOToJQlRSQVAoMHgxMDkpCiB0bDBfcmVzdjEwYToJQlRSQVAoMHgxMGEpIEJUUkFQKDB4MTBiKSBCVFJBUCgweDEwYykgQlRSQVAoMHgxMGQpIEJUUkFQKDB4MTBlKQogdGwwX3Jlc3YxMGY6CUJUUkFQKDB4MTBmKQogdGwwX2xpbnV4MzI6CUxJTlVYXzMyQklUX1NZU0NBTExfVFJBUApAQCAtMTc5LDcgKzE4Miw3IEBACiB0bDFfcmVzdjAwMDoJQk9PVF9LRVJORUwgICAgQlRSQVBUTDEoMHgxKSBCVFJBUFRMMSgweDIpIEJUUkFQVEwxKDB4MykKIHRsMV9yZXN2MDA0OglCVFJBUFRMMSgweDQpICBCVFJBUFRMMSgweDUpIEJUUkFQVEwxKDB4NikgQlRSQVBUTDEoMHg3KQogdGwxX2lheDoJVFJBUF9OT1NBVkUoX19zcGl0ZmlyZV9pbnNuX2FjY2Vzc19leGNlcHRpb25fdGwxKQotdGwxX3Jlc3YwMDk6CUJUUkFQVEwxKDB4OSkKK3RsMV9pdHNiXzR2OglTVU40Vl9JVFNCX01JU1MKIHRsMV9pYWU6CW1lbWJhciAjU3luYwogCQlUUkFQX05PU0FWRV83SU5TTlMoX19zcGl0ZmlyZV9hY2Nlc3NfZXJyb3IpCiB0bDFfcmVzdjAwYjoJQlRSQVBUTDEoMHhiKSBCVFJBUFRMMSgweGMpIEJUUkFQVEwxKDB4ZCkgQlRSQVBUTDEoMHhlKSBCVFJBUFRMMSgweGYpCkBAIC0xOTgsNyArMjAxLDcgQEAKIHRsMV9yZXN2MDI5OglCVFJBUFRMMSgweDI5KSBCVFJBUFRMMSgweDJhKSBCVFJBUFRMMSgweDJiKSBCVFJBUFRMMSgweDJjKQogdGwxX3Jlc3YwMmQ6CUJUUkFQVEwxKDB4MmQpIEJUUkFQVEwxKDB4MmUpIEJUUkFQVEwxKDB4MmYpCiB0bDFfZGF4OglUUkFQX05PU0FWRShfX3NwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbl90bDEpCi10bDFfcmVzdjAzMToJQlRSQVBUTDEoMHgzMSkKK3RsMV9kdHNiXzR2OglTVU40Vl9EVFNCX01JU1MKIHRsMV9kYWU6CW1lbWJhciAjU3luYwogCQlUUkFQX05PU0FWRV83SU5TTlMoX19zcGl0ZmlyZV9hY2Nlc3NfZXJyb3IpCiB0bDFfcmVzdjAzMzoJQlRSQVBUTDEoMHgzMykKQEAgLTIyMiwyNiArMjI1LDEwIEBACiB0bDFfaXZlYzoJVFJBUF9JVkVDCiB0bDFfcGF3OglUUkFQVEwxKGRvX3Bhd190bDEpCiB0bDFfdmF3OglUUkFQVEwxKGRvX3Zhd190bDEpCi0KLQkJLyogVGhlIGdyb3R0eSB0cmljayB0byBzYXZlICVnMSBpbnRvIGN1cnJlbnQtPnRocmVhZC5jZWVfc3R1ZmYKLQkJICogaXMgYmVjYXVzZSB3aGVuIHdlIHRha2UgdGhpcyB0cmFwIHdlIGNvdWxkIGJlIGludGVycnVwdGluZwotCQkgKiB0cmFwIGNvZGUgYWxyZWFkeSB1c2luZyB0aGUgdHJhcCBhbHRlcm5hdGUgZ2xvYmFsIHJlZ2lzdGVycy4KLQkJICoKLQkJICogV2UgY3Jvc3Mgb3VyIGZpbmdlcnMgYW5kIHByYXkgdGhhdCB0aGlzIHN0b3JlL2xvYWQgZG9lcwotCQkgKiBub3QgY2F1c2UgeWV0IGFub3RoZXIgQ0VFIHRyYXAuCi0JCSAqLwotdGwxX2NlZToJbWVtYmFyCSNTeW5jCi0JCXN0eAklZzEsIFslZzYgKyBUSV9DRUVfU1RVRkZdCi0JCWxkeGEJWyVnMF0gQVNJX0FGU1IsICVnMQotCQltZW1iYXIJI1N5bmMKLQkJc3R4YQklZzEsIFslZzBdIEFTSV9BRlNSCi0JCW1lbWJhcgkjU3luYwotCQlsZHgJWyVnNiArIFRJX0NFRV9TVFVGRl0sICVnMQotCQlyZXRyeQotCit0bDFfY2VlOglCVFJBUFRMMSgweDYzKQogdGwxX2lhbWlzczoJQlRSQVBUTDEoMHg2NCkgQlRSQVBUTDEoMHg2NSkgQlRSQVBUTDEoMHg2NikgQlRSQVBUTDEoMHg2NykKIHRsMV9kYW1pc3M6Ci0jaW5jbHVkZQkiZHRsYl9iYWNrZW5kLlMiCisjaW5jbHVkZQkiZHRsYl9taXNzLlMiCiB0bDFfZGFwcm90OgogI2luY2x1ZGUJImR0bGJfcHJvdC5TIgogdGwxX2ZlY2M6CUJUUkFQVEwxKDB4NzApCS8qIEZhc3QtRUNDIG9uIENoZWV0YWggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hX2FzbS5TIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFfYXNtLlMKaW5kZXggMWY1YjViNy4uYmUxODNmZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFfYXNtLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFfYXNtLlMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAkgbW92CTAsICVvMAogCS5zaXplCV9fZG9faW50X3N0b3JlLCAuLV9fZG9faW50X3N0b3JlCiAKLQkuc2VjdGlvbglfX2V4X3RhYmxlCisJLnNlY3Rpb24JX19leF90YWJsZSwiYSIKIAkud29yZAkJNGIsIF9fcmV0bF9lZmF1bHQKIAkud29yZAkJNWIsIF9fcmV0bF9lZmF1bHQKIAkud29yZAkJNmIsIF9fcmV0bF9lZmF1bHQKQEAgLTEyOSw3ICsxMjksNyBAQAogCSBtb3YJMCwgJW8wCiAJLnNpemUJX19kb19pbnRfbG9hZCwgLi1fX2RvX2ludF9sb2FkCiAKLQkuc2VjdGlvbglfX2V4X3RhYmxlCisJLnNlY3Rpb24JX19leF90YWJsZSwiYSIKIAkud29yZAkJNGIsIF9fcmV0bF9lZmF1bHQKIAkud29yZAkJNWIsIF9fcmV0bF9lZmF1bHQKIAkud29yZAkJNmIsIF9fcmV0bF9lZmF1bHQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IDcwZmFmNjMuLjAwMWU4NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJcmVncy0+dHN0YXRlIHw9IChBU0lfQUlVUyA8PCAyNFVMKTsKIH0KIAotYXNtbGlua2FnZSB2b2lkIGtlcm5lbF91bmFsaWduZWRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc24sIHVuc2lnbmVkIGxvbmcgc2ZhciwgdW5zaWduZWQgbG9uZyBzZnNyKQorYXNtbGlua2FnZSB2b2lkIGtlcm5lbF91bmFsaWduZWRfdHJhcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc24pCiB7CiAJZW51bSBkaXJlY3Rpb24gZGlyID0gZGVjb2RlX2RpcmVjdGlvbihpbnNuKTsKIAlpbnQgc2l6ZSA9IGRlY29kZV9hY2Nlc3Nfc2l6ZShpbnNuKTsKQEAgLTQwNSw2ICs0MDUsOSBAQAogZXh0ZXJuIHZvaWQgc3BpdGZpcmVfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHNmc3IsCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgc2Zhcik7CitleHRlcm4gdm9pZCBzdW40dl9kYXRhX2FjY2Vzc19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJdW5zaWduZWQgbG9uZyB0eXBlX2N0eCk7CiAKIGludCBoYW5kbGVfbGRmX3N0cSh1MzIgaW5zbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC00NDcsMTQgKzQ1MCwyMCBAQAogCQkJCWJyZWFrOwogCQkJfQogCQlkZWZhdWx0OgotCQkJc3BpdGZpcmVfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKHJlZ3MsIDAsIGFkZHIpOworCQkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCQkJc3VuNHZfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKHJlZ3MsIGFkZHIsIDApOworCQkJZWxzZQorCQkJCXNwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCAwLCBhZGRyKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmIChwdXRfdXNlciAoZmlyc3QgPj4gMzIsICh1MzIgX191c2VyICopYWRkcikgfHwKIAkJICAgIF9fcHV0X3VzZXIgKCh1MzIpZmlyc3QsICh1MzIgX191c2VyICopKGFkZHIgKyA0KSkgfHwKIAkJICAgIF9fcHV0X3VzZXIgKHNlY29uZCA+PiAzMiwgKHUzMiBfX3VzZXIgKikoYWRkciArIDgpKSB8fAogCQkgICAgX19wdXRfdXNlciAoKHUzMilzZWNvbmQsICh1MzIgX191c2VyICopKGFkZHIgKyAxMikpKSB7Ci0JCSAgICAJc3BpdGZpcmVfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKHJlZ3MsIDAsIGFkZHIpOworCQkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCQkJc3VuNHZfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKHJlZ3MsIGFkZHIsIDApOworCQkJZWxzZQorCQkJCXNwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCAwLCBhZGRyKTsKIAkJICAgIAlyZXR1cm4gMTsKIAkJfQogCX0gZWxzZSB7CkBAIC00NjcsNyArNDc2LDEwIEBACiAJCQlkb19wcml2YWN0KHJlZ3MpOwogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSBpZiAoYXNpID4gQVNJX1NORkwpIHsKLQkJCXNwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCAwLCBhZGRyKTsKKwkJCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQkJCXN1bjR2X2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCBhZGRyLCAwKTsKKwkJCWVsc2UKKwkJCQlzcGl0ZmlyZV9kYXRhX2FjY2Vzc19leGNlcHRpb24ocmVncywgMCwgYWRkcik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlzd2l0Y2ggKGluc24gJiAweDE4MDAwMCkgewpAQCAtNDg0LDcgKzQ5NiwxMCBAQAogCQkJCWVyciB8PSBfX2dldF91c2VyIChkYXRhW2ldLCAodTMyIF9fdXNlciAqKShhZGRyICsgNCppKSk7CiAJCX0KIAkJaWYgKGVyciAmJiAhKGFzaSAmIDB4MiAvKiBORiAqLykpIHsKLQkJCXNwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCAwLCBhZGRyKTsKKwkJCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQkJCXN1bjR2X2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCBhZGRyLCAwKTsKKwkJCWVsc2UKKwkJCQlzcGl0ZmlyZV9kYXRhX2FjY2Vzc19leGNlcHRpb24ocmVncywgMCwgYWRkcik7CiAJCQlyZXR1cm4gMTsKIAkJfQogCQlpZiAoYXNpICYgMHg4KSAvKiBMaXR0bGUgKi8gewpAQCAtNTQ4LDcgKzU2Myw3IEBACiAJdTMyIGluc247CiAJdTMyIGZpcnN0LCBzZWNvbmQ7CiAJdTY0IHZhbHVlOwotCXU4IGFzaSwgZnJlZzsKKwl1OCBmcmVnOwogCWludCBmbGFnOwogCXN0cnVjdCBmcHVzdGF0ZSAqZiA9IEZQVVNUQVRFOwogCkBAIC01NTcsNyArNTcyLDcgQEAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQogCQlwYyA9ICh1MzIpcGM7CiAJaWYgKGdldF91c2VyKGluc24sICh1MzIgX191c2VyICopIHBjKSAhPSAtRUZBVUxUKSB7Ci0JCWFzaSA9IHNmc3IgPj4gMTY7CisJCWludCBhc2kgPSBkZWNvZGVfYXNpKGluc24sIHJlZ3MpOwogCQlpZiAoKGFzaSA+IEFTSV9TTkZMKSB8fAogCQkgICAgKGFzaSA8IEFTSV9QKSkKIAkJCWdvdG8gZGFleDsKQEAgLTU4Nyw3ICs2MDIsMTEgQEAKIAkJKih1NjQgKikoZi0+cmVncyArIGZyZWcpID0gdmFsdWU7CiAJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZnBzYXZlZFswXSB8PSBmbGFnOwogCX0gZWxzZSB7Ci1kYWV4OgkJc3BpdGZpcmVfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKHJlZ3MsIHNmc3IsIHNmYXIpOworZGFleDoKKwkJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCQlzdW40dl9kYXRhX2FjY2Vzc19leGNlcHRpb24ocmVncywgc2Zhciwgc2Zzcik7CisJCWVsc2UKKwkJCXNwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCBzZnNyLCBzZmFyKTsKIAkJcmV0dXJuOwogCX0KIAlhZHZhbmNlKHJlZ3MpOwpAQCAtNjAwLDcgKzYxOSw3IEBACiAJdW5zaWduZWQgbG9uZyB0c3RhdGUgPSByZWdzLT50c3RhdGU7CiAJdTMyIGluc247CiAJdTY0IHZhbHVlOwotCXU4IGFzaSwgZnJlZzsKKwl1OCBmcmVnOwogCWludCBmbGFnOwogCXN0cnVjdCBmcHVzdGF0ZSAqZiA9IEZQVVNUQVRFOwogCkBAIC02MDksOCArNjI4LDggQEAKIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQogCQlwYyA9ICh1MzIpcGM7CiAJaWYgKGdldF91c2VyKGluc24sICh1MzIgX191c2VyICopIHBjKSAhPSAtRUZBVUxUKSB7CisJCWludCBhc2kgPSBkZWNvZGVfYXNpKGluc24sIHJlZ3MpOwogCQlmcmVnID0gKChpbnNuID4+IDI1KSAmIDB4MWUpIHwgKChpbnNuID4+IDIwKSAmIDB4MjApOwotCQlhc2kgPSBzZnNyID4+IDE2OwogCQl2YWx1ZSA9IDA7CiAJCWZsYWcgPSAoZnJlZyA8IDMyKSA/IEZQUlNfREwgOiBGUFJTX0RVOwogCQlpZiAoKGFzaSA+IEFTSV9TTkZMKSB8fApAQCAtNjMxLDcgKzY1MCwxMSBAQAogCQkgICAgX19wdXRfdXNlciAoKHUzMil2YWx1ZSwgKHUzMiBfX3VzZXIgKikoc2ZhciArIDQpKSkKIAkJCWdvdG8gZGFleDsKIAl9IGVsc2UgewotZGFleDoJCXNwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbihyZWdzLCBzZnNyLCBzZmFyKTsKK2RhZXg6CisJCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQkJc3VuNHZfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uKHJlZ3MsIHNmYXIsIHNmc3IpOworCQllbHNlCisJCQlzcGl0ZmlyZV9kYXRhX2FjY2Vzc19leGNlcHRpb24ocmVncywgc2Zzciwgc2Zhcik7CiAJCXJldHVybjsKIAl9CiAJYWR2YW5jZShyZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMyZV9jcHVmcmVxLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VzMmVfY3B1ZnJlcS5jCmluZGV4IGIzNWRjOGQuLjFmODNmZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMyZV9jcHVmcmVxLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91czJlX2NwdWZyZXEuYwpAQCAtMzQ2LDYgKzM0Niw5IEBACiAJdW5zaWduZWQgbG9uZyBtYW51ZiwgaW1wbCwgdmVyOwogCWludCByZXQ7CiAKKwlpZiAodGxiX3R5cGUgIT0gc3BpdGZpcmUpCisJCXJldHVybiAtRU5PREVWOworCiAJX19hc21fXygicmRwciAlJXZlciwgJTAiIDogIj1yIiAodmVyKSk7CiAJbWFudWYgPSAoKHZlciA+PiA0OCkgJiAweGZmZmYpOwogCWltcGwgID0gKCh2ZXIgPj4gMzIpICYgMHhmZmZmKTsKQEAgLTM1NCwyMCArMzU3LDE2IEBACiAJCXN0cnVjdCBjcHVmcmVxX2RyaXZlciAqZHJpdmVyOwogCiAJCXJldCA9IC1FTk9NRU07Ci0JCWRyaXZlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2RyaXZlciksIEdGUF9LRVJORUwpOworCQlkcml2ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkcml2ZXIpCiAJCQlnb3RvIGVycl9vdXQ7Ci0JCW1lbXNldChkcml2ZXIsIDAsIHNpemVvZigqZHJpdmVyKSk7CiAKLQkJdXMyZV9mcmVxX3RhYmxlID0ga21hbGxvYygKKwkJdXMyZV9mcmVxX3RhYmxlID0ga3phbGxvYygKIAkJCShOUl9DUFVTICogc2l6ZW9mKHN0cnVjdCB1czJlX2ZyZXFfcGVyY3B1X2luZm8pKSwKIAkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXVzMmVfZnJlcV90YWJsZSkKIAkJCWdvdG8gZXJyX291dDsKIAotCQltZW1zZXQodXMyZV9mcmVxX3RhYmxlLCAwLAotCQkgICAgICAgKE5SX0NQVVMgKiBzaXplb2Yoc3RydWN0IHVzMmVfZnJlcV9wZXJjcHVfaW5mbykpKTsKLQogCQlkcml2ZXItPmluaXQgPSB1czJlX2ZyZXFfY3B1X2luaXQ7CiAJCWRyaXZlci0+dmVyaWZ5ID0gdXMyZV9mcmVxX3ZlcmlmeTsKIAkJZHJpdmVyLT50YXJnZXQgPSB1czJlX2ZyZXFfdGFyZ2V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC91czNfY3B1ZnJlcS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC91czNfY3B1ZnJlcS5jCmluZGV4IDZkMWY5YTMuLjQ3ZTNhY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdXMzX2NwdWZyZXEuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3VzM19jcHVmcmVxLmMKQEAgLTIwMyw2ICsyMDMsOSBAQAogCXVuc2lnbmVkIGxvbmcgbWFudWYsIGltcGwsIHZlcjsKIAlpbnQgcmV0OwogCisJaWYgKHRsYl90eXBlICE9IGNoZWV0YWggJiYgdGxiX3R5cGUgIT0gY2hlZXRhaF9wbHVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCV9fYXNtX18oInJkcHIgJSV2ZXIsICUwIiA6ICI9ciIgKHZlcikpOwogCW1hbnVmID0gKCh2ZXIgPj4gNDgpICYgMHhmZmZmKTsKIAlpbXBsICA9ICgodmVyID4+IDMyKSAmIDB4ZmZmZik7CkBAIC0yMTUsMjAgKzIxOCwxNiBAQAogCQlzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgKmRyaXZlcjsKIAogCQlyZXQgPSAtRU5PTUVNOwotCQlkcml2ZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIpLCBHRlBfS0VSTkVMKTsKKwkJZHJpdmVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZHJpdmVyKQogCQkJZ290byBlcnJfb3V0OwotCQltZW1zZXQoZHJpdmVyLCAwLCBzaXplb2YoKmRyaXZlcikpOwogCi0JCXVzM19mcmVxX3RhYmxlID0ga21hbGxvYygKKwkJdXMzX2ZyZXFfdGFibGUgPSBremFsbG9jKAogCQkJKE5SX0NQVVMgKiBzaXplb2Yoc3RydWN0IHVzM19mcmVxX3BlcmNwdV9pbmZvKSksCiAJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCF1czNfZnJlcV90YWJsZSkKIAkJCWdvdG8gZXJyX291dDsKIAotCQltZW1zZXQodXMzX2ZyZXFfdGFibGUsIDAsCi0JCSAgICAgICAoTlJfQ1BVUyAqIHNpemVvZihzdHJ1Y3QgdXMzX2ZyZXFfcGVyY3B1X2luZm8pKSk7Ci0KIAkJZHJpdmVyLT5pbml0ID0gdXMzX2ZyZXFfY3B1X2luaXQ7CiAJCWRyaXZlci0+dmVyaWZ5ID0gdXMzX2ZyZXFfdmVyaWZ5OwogCQlkcml2ZXItPnRhcmdldCA9IHVzM19mcmVxX3RhcmdldDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdmlzZW11bC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC92aXNlbXVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmZWRhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdmlzZW11bC5jCkBAIC0wLDAgKzEsODk0IEBACisvKiB2aXNlbXVsLmM6IEVtdWxhdGlvbiBvZiBWSVMgaW5zdHJ1Y3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vZnB1bWFjcm8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKiBPUEYgZmllbGQgb2YgdmFyaW91cyBWSVMgaW5zdHJ1Y3Rpb25zLiAgKi8KKworLyogMDAwMTExMDExIC0gZm91ciAxNi1iaXQgcGFja3MgICovCisjZGVmaW5lIEZQQUNLMTZfT1BGCTB4MDNiCisKKy8qIDAwMDExMTAxMCAtIHR3byAzMi1iaXQgcGFja3MgICovCisjZGVmaW5lIEZQQUNLMzJfT1BGCTB4MDNhCisKKy8qIDAwMDExMTEwMSAtIGZvdXIgMTYtYml0IHBhY2tzICAqLworI2RlZmluZSBGUEFDS0ZJWF9PUEYJMHgwM2QKKworLyogMDAxMDAxMTAxIC0gZm91ciAxNi1iaXQgZXhwYW5kcyAgKi8KKyNkZWZpbmUgRkVYUEFORF9PUEYJMHgwNGQKKworLyogMDAxMDAxMDExIC0gdHdvIDMyLWJpdCBtZXJnZXMgKi8KKyNkZWZpbmUgRlBNRVJHRV9PUEYJMHgwNGIKKworLyogMDAwMTEwMDAxIC0gOC1ieS0xNi1iaXQgcGFydGl0b25lZCBwcm9kdWN0ICAqLworI2RlZmluZSBGTVVMOHgxNl9PUEYJMHgwMzEKKworLyogMDAwMTEwMDExIC0gOC1ieS0xNi1iaXQgdXBwZXIgYWxwaGEgcGFydGl0aW9uZWQgcHJvZHVjdCAgKi8KKyNkZWZpbmUgRk1VTDh4MTZBVV9PUEYJMHgwMzMKKworLyogMDAwMTEwMTAxIC0gOC1ieS0xNi1iaXQgbG93ZXIgYWxwaGEgcGFydGl0aW9uZWQgcHJvZHVjdCAgKi8KKyNkZWZpbmUgRk1VTDh4MTZBTF9PUEYJMHgwMzUKKworLyogMDAwMTEwMTEwIC0gdXBwZXIgOC1ieS0xNi1iaXQgcGFydGl0aW9uZWQgcHJvZHVjdCAgKi8KKyNkZWZpbmUgRk1VTDhTVXgxNl9PUEYJMHgwMzYKKworLyogMDAwMTEwMTExIC0gbG93ZXIgOC1ieS0xNi1iaXQgcGFydGl0aW9uZWQgcHJvZHVjdCAgKi8KKyNkZWZpbmUgRk1VTDhVTHgxNl9PUEYJMHgwMzcKKworLyogMDAwMTExMDAwIC0gdXBwZXIgOC1ieS0xNi1iaXQgcGFydGl0aW9uZWQgcHJvZHVjdCAgKi8KKyNkZWZpbmUgRk1VTEQ4U1V4MTZfT1BGCTB4MDM4CisKKy8qIDAwMDExMTAwMSAtIGxvd2VyIHVuc2lnbmVkIDgtYnktMTYtYml0IHBhcnRpdGlvbmVkIHByb2R1Y3QgICovCisjZGVmaW5lIEZNVUxEOFVMeDE2X09QRgkweDAzOQorCisvKiAwMDAxMDEwMDAgLSBmb3VyIDE2LWJpdCBjb21wYXJlOyBzZXQgcmQgaWYgc3JjMSA+IHNyYzIgICovCisjZGVmaW5lIEZDTVBHVDE2X09QRgkweDAyOAorCisvKiAwMDAxMDExMDAgLSB0d28gMzItYml0IGNvbXBhcmU7IHNldCByZCBpZiBzcmMxID4gc3JjMiAgKi8KKyNkZWZpbmUgRkNNUEdUMzJfT1BGCTB4MDJjCisKKy8qIDAwMDEwMDAwMCAtIGZvdXIgMTYtYml0IGNvbXBhcmU7IHNldCByZCBpZiBzcmMxIDw9IHNyYzIgICovCisjZGVmaW5lIEZDTVBMRTE2X09QRgkweDAyMAorCisvKiAwMDAxMDAxMDAgLSB0d28gMzItYml0IGNvbXBhcmU7IHNldCByZCBpZiBzcmMxIDw9IHNyYzIgICovCisjZGVmaW5lIEZDTVBMRTMyX09QRgkweDAyNAorCisvKiAwMDAxMDAwMTAgLSBmb3VyIDE2LWJpdCBjb21wYXJlOyBzZXQgcmQgaWYgc3JjMSAhPSBzcmMyICAqLworI2RlZmluZSBGQ01QTkUxNl9PUEYJMHgwMjIKKworLyogMDAwMTAwMTEwIC0gdHdvIDMyLWJpdCBjb21wYXJlOyBzZXQgcmQgaWYgc3JjMSAhPSBzcmMyICAqLworI2RlZmluZSBGQ01QTkUzMl9PUEYJMHgwMjYKKworLyogMDAwMTAxMDEwIC0gZm91ciAxNi1iaXQgY29tcGFyZTsgc2V0IHJkIGlmIHNyYzEgPT0gc3JjMiAgKi8KKyNkZWZpbmUgRkNNUEVRMTZfT1BGCTB4MDJhCisKKy8qIDAwMDEwMTExMCAtIHR3byAzMi1iaXQgY29tcGFyZTsgc2V0IHJkIGlmIHNyYzEgPT0gc3JjMiAgKi8KKyNkZWZpbmUgRkNNUEVRMzJfT1BGCTB4MDJlCisKKy8qIDAwMDAwMDAwMCAtIEVpZ2h0IDgtYml0IGVkZ2UgYm91bmRhcnkgcHJvY2Vzc2luZyAgKi8KKyNkZWZpbmUgRURHRThfT1BGCTB4MDAwCisKKy8qIDAwMDAwMDAwMSAtIEVpZ2h0IDgtYml0IGVkZ2UgYm91bmRhcnkgcHJvY2Vzc2luZywgbm8gQ0MgKi8KKyNkZWZpbmUgRURHRThOX09QRgkweDAwMQorCisvKiAwMDAwMDAwMTAgLSBFaWdodCA4LWJpdCBlZGdlIGJvdW5kYXJ5IHByb2Nlc3NpbmcsIGxpdHRsZS1lbmRpYW4gICovCisjZGVmaW5lIEVER0U4TF9PUEYJMHgwMDIKKworLyogMDAwMDAwMDExIC0gRWlnaHQgOC1iaXQgZWRnZSBib3VuZGFyeSBwcm9jZXNzaW5nLCBsaXR0bGUtZW5kaWFuLCBubyBDQyAgKi8KKyNkZWZpbmUgRURHRThMTl9PUEYJMHgwMDMKKworLyogMDAwMDAwMTAwIC0gRm91ciAxNi1iaXQgZWRnZSBib3VuZGFyeSBwcm9jZXNzaW5nICAqLworI2RlZmluZSBFREdFMTZfT1BGCTB4MDA0CisKKy8qIDAwMDAwMDEwMSAtIEZvdXIgMTYtYml0IGVkZ2UgYm91bmRhcnkgcHJvY2Vzc2luZywgbm8gQ0MgICovCisjZGVmaW5lIEVER0UxNk5fT1BGCTB4MDA1CisKKy8qIDAwMDAwMDExMCAtIEZvdXIgMTYtYml0IGVkZ2UgYm91bmRhcnkgcHJvY2Vzc2luZywgbGl0dGxlLWVuZGlhbiAgKi8KKyNkZWZpbmUgRURHRTE2TF9PUEYJMHgwMDYKKworLyogMDAwMDAwMTExIC0gRm91ciAxNi1iaXQgZWRnZSBib3VuZGFyeSBwcm9jZXNzaW5nLCBsaXR0bGUtZW5kaWFuLCBubyBDQyAgKi8KKyNkZWZpbmUgRURHRTE2TE5fT1BGCTB4MDA3CisKKy8qIDAwMDAwMTAwMCAtIFR3byAzMi1iaXQgZWRnZSBib3VuZGFyeSBwcm9jZXNzaW5nICAqLworI2RlZmluZSBFREdFMzJfT1BGCTB4MDA4CisKKy8qIDAwMDAwMTAwMSAtIFR3byAzMi1iaXQgZWRnZSBib3VuZGFyeSBwcm9jZXNzaW5nLCBubyBDQyAgKi8KKyNkZWZpbmUgRURHRTMyTl9PUEYJMHgwMDkKKworLyogMDAwMDAxMDEwIC0gVHdvIDMyLWJpdCBlZGdlIGJvdW5kYXJ5IHByb2Nlc3NpbmcsIGxpdHRsZS1lbmRpYW4gICovCisjZGVmaW5lIEVER0UzMkxfT1BGCTB4MDBhCisKKy8qIDAwMDAwMTAxMSAtIFR3byAzMi1iaXQgZWRnZSBib3VuZGFyeSBwcm9jZXNzaW5nLCBsaXR0bGUtZW5kaWFuLCBubyBDQyAgKi8KKyNkZWZpbmUgRURHRTMyTE5fT1BGCTB4MDBiCisKKy8qIDAwMDExMTExMCAtIGRpc3RhbmNlIGJldHdlZW4gOCA4LWJpdCBjb21wb25lbnRzICAqLworI2RlZmluZSBQRElTVF9PUEYJMHgwM2UKKworLyogMDAwMDEwMDAwIC0gY29udmVydCA4LWJpdCAzLUQgYWRkcmVzcyB0byBibG9ja2VkIGJ5dGUgYWRkcmVzcyAgKi8KKyNkZWZpbmUgQVJSQVk4X09QRgkweDAxMAorCisvKiAwMDAwMTAwMTAgLSBjb252ZXJ0IDE2LWJpdCAzLUQgYWRkcmVzcyB0byBibG9ja2VkIGJ5dGUgYWRkcmVzcyAgKi8KKyNkZWZpbmUgQVJSQVkxNl9PUEYJMHgwMTIKKworLyogMDAwMDEwMTAwIC0gY29udmVydCAzMi1iaXQgMy1EIGFkZHJlc3MgdG8gYmxvY2tlZCBieXRlIGFkZHJlc3MgICovCisjZGVmaW5lIEFSUkFZMzJfT1BGCTB4MDE0CisKKy8qIDAwMDAxMTAwMSAtIFNldCB0aGUgR1NSLk1BU0sgZmllbGQgaW4gcHJlcGFyYXRpb24gZm9yIGEgQlNIVUZGTEUgICovCisjZGVmaW5lIEJNQVNLX09QRgkweDAxOQorCisvKiAwMDEwMDExMDAgLSBQZXJtdXRlIGJ5dGVzIGFzIHNwZWNpZmllZCBieSBHU1IuTUFTSyAgKi8KKyNkZWZpbmUgQlNIVUZGTEVfT1BGCTB4MDRjCisKKyNkZWZpbmUgVklTX09QQ09ERV9NQVNLCSgoMHgzIDw8IDMwKSB8ICgweDNmIDw8IDE5KSkKKyNkZWZpbmUgVklTX09QQ09ERV9WQUwJKCgweDIgPDwgMzApIHwgKDB4MzYgPDwgMTkpKQorCisjZGVmaW5lIFZJU19PUEZfU0hJRlQJNQorI2RlZmluZSBWSVNfT1BGX01BU0sJKDB4MWZmIDw8IFZJU19PUEZfU0hJRlQpCisKKyNkZWZpbmUgUlMxKElOU04pCSgoKElOU04pID4+IDI0KSAmIDB4MWYpCisjZGVmaW5lIFJTMihJTlNOKQkoKChJTlNOKSA+PiAgMCkgJiAweDFmKQorI2RlZmluZSBSRChJTlNOKQkoKChJTlNOKSA+PiAyNSkgJiAweDFmKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWF5YmVfZmx1c2hfd2luZG93cyh1bnNpZ25lZCBpbnQgcnMxLCB1bnNpZ25lZCBpbnQgcnMyLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmQsIGludCBmcm9tX2tlcm5lbCkKK3sKKwlpZiAocnMyID49IDE2IHx8IHJzMSA+PSAxNiB8fCByZCA+PSAxNikgeworCQlpZiAoZnJvbV9rZXJuZWwgIT0gMCkKKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaHciKTsKKwkJZWxzZQorCQkJZmx1c2h3X3VzZXIoKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZldGNoX3JlZyh1bnNpZ25lZCBpbnQgcmVnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCQorCWlmIChyZWcgPCAxNikKKwkJcmV0dXJuICghcmVnID8gMCA6IHJlZ3MtPnVfcmVnc1tyZWddKTsKKwlpZiAocmVncy0+dHN0YXRlICYgVFNUQVRFX1BSSVYpIHsKKwkJc3RydWN0IHJlZ193aW5kb3cgKndpbjsKKwkJd2luID0gKHN0cnVjdCByZWdfd2luZG93ICopKHJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSArIFNUQUNLX0JJQVMpOworCQl2YWx1ZSA9IHdpbi0+bG9jYWxzW3JlZyAtIDE2XTsKKwl9IGVsc2UgaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQlzdHJ1Y3QgcmVnX3dpbmRvdzMyIF9fdXNlciAqd2luMzI7CisJCXdpbjMyID0gKHN0cnVjdCByZWdfd2luZG93MzIgX191c2VyICopKCh1bnNpZ25lZCBsb25nKSgodTMyKXJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSkpOworCQlnZXRfdXNlcih2YWx1ZSwgJndpbjMyLT5sb2NhbHNbcmVnIC0gMTZdKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcmVnX3dpbmRvdyBfX3VzZXIgKndpbjsKKwkJd2luID0gKHN0cnVjdCByZWdfd2luZG93IF9fdXNlciAqKShyZWdzLT51X3JlZ3NbVVJFR19GUF0gKyBTVEFDS19CSUFTKTsKKwkJZ2V0X3VzZXIodmFsdWUsICZ3aW4tPmxvY2Fsc1tyZWcgLSAxNl0pOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3VzZXIgKl9fZmV0Y2hfcmVnX2FkZHJfdXNlcih1bnNpZ25lZCBpbnQgcmVnLAorCQkJCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJQlVHX09OKHJlZyA8IDE2KTsKKwlCVUdfT04ocmVncy0+dHN0YXRlICYgVFNUQVRFX1BSSVYpOworCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQlzdHJ1Y3QgcmVnX3dpbmRvdzMyIF9fdXNlciAqd2luMzI7CisJCXdpbjMyID0gKHN0cnVjdCByZWdfd2luZG93MzIgX191c2VyICopKCh1bnNpZ25lZCBsb25nKSgodTMyKXJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSkpOworCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgX191c2VyICopJndpbjMyLT5sb2NhbHNbcmVnIC0gMTZdOworCX0gZWxzZSB7CisJCXN0cnVjdCByZWdfd2luZG93IF9fdXNlciAqd2luOworCQl3aW4gPSAoc3RydWN0IHJlZ193aW5kb3cgX191c2VyICopKHJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSArIFNUQUNLX0JJQVMpOworCQlyZXR1cm4gJndpbi0+bG9jYWxzW3JlZyAtIDE2XTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqX19mZXRjaF9yZWdfYWRkcl9rZXJuKHVuc2lnbmVkIGludCByZWcsCisJCQkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlCVUdfT04ocmVnID49IDE2KTsKKwlCVUdfT04ocmVncy0+dHN0YXRlICYgVFNUQVRFX1BSSVYpOworCisJcmV0dXJuICZyZWdzLT51X3JlZ3NbcmVnXTsKK30KKworc3RhdGljIHZvaWQgc3RvcmVfcmVnKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgbG9uZyByZCkKK3sKKwlpZiAocmQgPCAxNikgeworCQl1bnNpZ25lZCBsb25nICpyZF9rZXJuID0gX19mZXRjaF9yZWdfYWRkcl9rZXJuKHJkLCByZWdzKTsKKworCQkqcmRfa2VybiA9IHZhbDsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIF9fdXNlciAqcmRfdXNlciA9IF9fZmV0Y2hfcmVnX2FkZHJfdXNlcihyZCwgcmVncyk7CisKKwkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkKKwkJCV9fcHV0X3VzZXIoKHUzMil2YWwsICh1MzIgX191c2VyICopcmRfdXNlcik7CisJCWVsc2UKKwkJCV9fcHV0X3VzZXIodmFsLCByZF91c2VyKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmcGRfcmVndmFsKHN0cnVjdCBmcHVzdGF0ZSAqZiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGluc25fcmVnbnVtKQoreworCWluc25fcmVnbnVtID0gKCgoaW5zbl9yZWdudW0gJiAxKSA8PCA1KSB8CisJCSAgICAgICAoaW5zbl9yZWdudW0gJiAweDFlKSk7CisKKwlyZXR1cm4gKih1bnNpZ25lZCBsb25nICopICZmLT5yZWdzW2luc25fcmVnbnVtXTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICpmcGRfcmVnYWRkcihzdHJ1Y3QgZnB1c3RhdGUgKmYsCisJCQkJCSB1bnNpZ25lZCBpbnQgaW5zbl9yZWdudW0pCit7CisJaW5zbl9yZWdudW0gPSAoKChpbnNuX3JlZ251bSAmIDEpIDw8IDUpIHwKKwkJICAgICAgIChpbnNuX3JlZ251bSAmIDB4MWUpKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZyAqKSAmZi0+cmVnc1tpbnNuX3JlZ251bV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZwc19yZWd2YWwoc3RydWN0IGZwdXN0YXRlICpmLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbnNuX3JlZ251bSkKK3sKKwlyZXR1cm4gZi0+cmVnc1tpbnNuX3JlZ251bV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50ICpmcHNfcmVnYWRkcihzdHJ1Y3QgZnB1c3RhdGUgKmYsCisJCQkJCXVuc2lnbmVkIGludCBpbnNuX3JlZ251bSkKK3sKKwlyZXR1cm4gJmYtPnJlZ3NbaW5zbl9yZWdudW1dOworfQorCitzdHJ1Y3QgZWRnZV90YWIgeworCXUxNiBsZWZ0LCByaWdodDsKK307CitzdHJ1Y3QgZWRnZV90YWIgZWRnZThfdGFiWzhdID0geworCXsgMHhmZiwgMHg4MCB9LAorCXsgMHg3ZiwgMHhjMCB9LAorCXsgMHgzZiwgMHhlMCB9LAorCXsgMHgxZiwgMHhmMCB9LAorCXsgMHgwZiwgMHhmOCB9LAorCXsgMHgwNywgMHhmYyB9LAorCXsgMHgwMywgMHhmZSB9LAorCXsgMHgwMSwgMHhmZiB9LAorfTsKK3N0cnVjdCBlZGdlX3RhYiBlZGdlOF90YWJfbFs4XSA9IHsKKwl7IDB4ZmYsIDB4MDEgfSwKKwl7IDB4ZmUsIDB4MDMgfSwKKwl7IDB4ZmMsIDB4MDcgfSwKKwl7IDB4ZjgsIDB4MGYgfSwKKwl7IDB4ZjAsIDB4MWYgfSwKKwl7IDB4ZTAsIDB4M2YgfSwKKwl7IDB4YzAsIDB4N2YgfSwKKwl7IDB4ODAsIDB4ZmYgfSwKK307CitzdHJ1Y3QgZWRnZV90YWIgZWRnZTE2X3RhYls0XSA9IHsKKwl7IDB4ZiwgMHg4IH0sCisJeyAweDcsIDB4YyB9LAorCXsgMHgzLCAweGUgfSwKKwl7IDB4MSwgMHhmIH0sCit9Oworc3RydWN0IGVkZ2VfdGFiIGVkZ2UxNl90YWJfbFs0XSA9IHsKKwl7IDB4ZiwgMHgxIH0sCisJeyAweGUsIDB4MyB9LAorCXsgMHhjLCAweDcgfSwKKwl7IDB4OCwgMHhmIH0sCit9Oworc3RydWN0IGVkZ2VfdGFiIGVkZ2UzMl90YWJbMl0gPSB7CisJeyAweDMsIDB4MiB9LAorCXsgMHgxLCAweDMgfSwKK307CitzdHJ1Y3QgZWRnZV90YWIgZWRnZTMyX3RhYl9sWzJdID0geworCXsgMHgzLCAweDEgfSwKKwl7IDB4MiwgMHgzIH0sCit9OworCitzdGF0aWMgdm9pZCBlZGdlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKK3sKKwl1bnNpZ25lZCBsb25nIG9yaWdfcnMxLCByczEsIG9yaWdfcnMyLCByczIsIHJkX3ZhbDsKKwl1MTYgbGVmdCwgcmlnaHQ7CisKKwltYXliZV9mbHVzaF93aW5kb3dzKFJTMShpbnNuKSwgUlMyKGluc24pLCBSRChpbnNuKSwgMCk7CisJb3JpZ19yczEgPSByczEgPSBmZXRjaF9yZWcoUlMxKGluc24pLCByZWdzKTsKKwlvcmlnX3JzMiA9IHJzMiA9IGZldGNoX3JlZyhSUzIoaW5zbiksIHJlZ3MpOworCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQlyczEgPSByczEgJiAweGZmZmZmZmZmOworCQlyczIgPSByczIgJiAweGZmZmZmZmZmOworCX0KKwlzd2l0Y2ggKG9wZikgeworCWRlZmF1bHQ6CisJY2FzZSBFREdFOF9PUEY6CisJY2FzZSBFREdFOE5fT1BGOgorCQlsZWZ0ID0gZWRnZThfdGFiW3JzMSAmIDB4N10ubGVmdDsKKwkJcmlnaHQgPSBlZGdlOF90YWJbcnMyICYgMHg3XS5yaWdodDsKKwkJYnJlYWs7CisJY2FzZSBFREdFOExfT1BGOgorCWNhc2UgRURHRThMTl9PUEY6CisJCWxlZnQgPSBlZGdlOF90YWJfbFtyczEgJiAweDddLmxlZnQ7CisJCXJpZ2h0ID0gZWRnZThfdGFiX2xbcnMyICYgMHg3XS5yaWdodDsKKwkJYnJlYWs7CisKKwljYXNlIEVER0UxNl9PUEY6CisJY2FzZSBFREdFMTZOX09QRjoKKwkJbGVmdCA9IGVkZ2UxNl90YWJbKHJzMSA+PiAxKSAmIDB4M10ubGVmdDsKKwkJcmlnaHQgPSBlZGdlMTZfdGFiWyhyczIgPj4gMSkgJiAweDNdLnJpZ2h0OworCQlicmVhazsKKworCWNhc2UgRURHRTE2TF9PUEY6CisJY2FzZSBFREdFMTZMTl9PUEY6CisJCWxlZnQgPSBlZGdlMTZfdGFiX2xbKHJzMSA+PiAxKSAmIDB4M10ubGVmdDsKKwkJcmlnaHQgPSBlZGdlMTZfdGFiX2xbKHJzMiA+PiAxKSAmIDB4M10ucmlnaHQ7CisJCWJyZWFrOworCisJY2FzZSBFREdFMzJfT1BGOgorCWNhc2UgRURHRTMyTl9PUEY6CisJCWxlZnQgPSBlZGdlMzJfdGFiWyhyczEgPj4gMikgJiAweDFdLmxlZnQ7CisJCXJpZ2h0ID0gZWRnZTMyX3RhYlsocnMyID4+IDIpICYgMHgxXS5yaWdodDsKKwkJYnJlYWs7CisKKwljYXNlIEVER0UzMkxfT1BGOgorCWNhc2UgRURHRTMyTE5fT1BGOgorCQlsZWZ0ID0gZWRnZTMyX3RhYl9sWyhyczEgPj4gMikgJiAweDFdLmxlZnQ7CisJCXJpZ2h0ID0gZWRnZTMyX3RhYl9sWyhyczIgPj4gMikgJiAweDFdLnJpZ2h0OworCQlicmVhazsKKwl9OworCisJaWYgKChyczEgJiB+MHg3VUwpID09IChyczIgJiB+MHg3VUwpKQorCQlyZF92YWwgPSByaWdodCAmIGxlZnQ7CisJZWxzZQorCQlyZF92YWwgPSBsZWZ0OworCisJc3RvcmVfcmVnKHJlZ3MsIHJkX3ZhbCwgUkQoaW5zbikpOworCisJc3dpdGNoIChvcGYpIHsKKwljYXNlIEVER0U4X09QRjoKKwljYXNlIEVER0U4TF9PUEY6CisJY2FzZSBFREdFMTZfT1BGOgorCWNhc2UgRURHRTE2TF9PUEY6CisJY2FzZSBFREdFMzJfT1BGOgorCWNhc2UgRURHRTMyTF9PUEY6IHsKKwkJdW5zaWduZWQgbG9uZyBjY3IsIHRzdGF0ZTsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3ViY2MJJTEsICUyLCAlJWcwXG5cdCIKKwkJCQkgICAgICJyZAklJWNjciwgJTAiCisJCQkJICAgICA6ICI9ciIgKGNjcikKKwkJCQkgICAgIDogInIiIChvcmlnX3JzMSksICJyIiAob3JpZ19yczIpCisJCQkJICAgICA6ICJjYyIpOworCQl0c3RhdGUgPSByZWdzLT50c3RhdGUgJiB+KFRTVEFURV9YQ0MgfCBUU1RBVEVfSUNDKTsKKwkJcmVncy0+dHN0YXRlID0gdHN0YXRlIHwgKGNjciA8PCAzMlVMKTsKKwl9CisJfTsKK30KKworc3RhdGljIHZvaWQgYXJyYXkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuLCB1bnNpZ25lZCBpbnQgb3BmKQoreworCXVuc2lnbmVkIGxvbmcgcnMxLCByczIsIHJkX3ZhbDsKKwl1bnNpZ25lZCBpbnQgYml0cywgYml0c19tYXNrOworCisJbWF5YmVfZmx1c2hfd2luZG93cyhSUzEoaW5zbiksIFJTMihpbnNuKSwgUkQoaW5zbiksIDApOworCXJzMSA9IGZldGNoX3JlZyhSUzEoaW5zbiksIHJlZ3MpOworCXJzMiA9IGZldGNoX3JlZyhSUzIoaW5zbiksIHJlZ3MpOworCisJYml0cyA9IChyczIgPiA1ID8gNSA6IHJzMik7CisJYml0c19tYXNrID0gKDFVTCA8PCBiaXRzKSAtIDFVTDsKKworCXJkX3ZhbCA9ICgoKChyczEgPj4gMTEpICYgMHgzKSA8PCAgMCkgfAorCQkgICgoKHJzMSA+PiAzMykgJiAweDMpIDw8ICAyKSB8CisJCSAgKCgocnMxID4+IDU1KSAmIDB4MSkgPDwgIDQpIHwKKwkJICAoKChyczEgPj4gMTMpICYgMHhmKSA8PCAgNSkgfAorCQkgICgoKHJzMSA+PiAzNSkgJiAweGYpIDw8ICA5KSB8CisJCSAgKCgocnMxID4+IDU2KSAmIDB4ZikgPDwgMTMpIHwKKwkJICAoKChyczEgPj4gMTcpICYgYml0c19tYXNrKSA8PCAxNykgfAorCQkgICgoKHJzMSA+PiAzOSkgJiBiaXRzX21hc2spIDw8ICgxNyArIGJpdHMpKSB8CisJCSAgKCgocnMxID4+IDYwKSAmIDB4ZikgICAgICAgPDwgKDE3ICsgKDIqYml0cykpKSk7CisKKwlzd2l0Y2ggKG9wZikgeworCWNhc2UgQVJSQVkxNl9PUEY6CisJCXJkX3ZhbCA8PD0gMTsKKwkJYnJlYWs7CisKKwljYXNlIEFSUkFZMzJfT1BGOgorCQlyZF92YWwgPDw9IDI7CisJfTsKKworCXN0b3JlX3JlZyhyZWdzLCByZF92YWwsIFJEKGluc24pKTsKK30KKworc3RhdGljIHZvaWQgYm1hc2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuKQoreworCXVuc2lnbmVkIGxvbmcgcnMxLCByczIsIHJkX3ZhbCwgZ3NyOworCisJbWF5YmVfZmx1c2hfd2luZG93cyhSUzEoaW5zbiksIFJTMihpbnNuKSwgUkQoaW5zbiksIDApOworCXJzMSA9IGZldGNoX3JlZyhSUzEoaW5zbiksIHJlZ3MpOworCXJzMiA9IGZldGNoX3JlZyhSUzIoaW5zbiksIHJlZ3MpOworCXJkX3ZhbCA9IHJzMSArIHJzMjsKKworCXN0b3JlX3JlZyhyZWdzLCByZF92YWwsIFJEKGluc24pKTsKKworCWdzciA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Z3NyWzBdICYgMHhmZmZmZmZmZjsKKwlnc3IgfD0gcmRfdmFsIDw8IDMyVUw7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT5nc3JbMF0gPSBnc3I7Cit9CisKK3N0YXRpYyB2b2lkIGJzaHVmZmxlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbikKK3sKKwlzdHJ1Y3QgZnB1c3RhdGUgKmYgPSBGUFVTVEFURTsKKwl1bnNpZ25lZCBsb25nIHJzMSwgcnMyLCByZF92YWw7CisJdW5zaWduZWQgbG9uZyBibWFzaywgaTsKKworCWJtYXNrID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5nc3JbMF0gPj4gMzJVTDsKKworCXJzMSA9IGZwZF9yZWd2YWwoZiwgUlMxKGluc24pKTsKKwlyczIgPSBmcGRfcmVndmFsKGYsIFJTMihpbnNuKSk7CisKKwlyZF92YWwgPSAwVUw7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHdoaWNoID0gKGJtYXNrID4+IChpICogNCkpICYgMHhmOworCQl1bnNpZ25lZCBsb25nIGJ5dGU7CisKKwkJaWYgKHdoaWNoIDwgOCkKKwkJCWJ5dGUgPSAocnMxID4+ICh3aGljaCAqIDgpKSAmIDB4ZmY7CisJCWVsc2UKKwkJCWJ5dGUgPSAocnMyID4+ICgod2hpY2gtOCkqOCkpICYgMHhmZjsKKwkJcmRfdmFsIHw9IChieXRlIDw8IChpICogOCkpOworCX0KKworCSpmcGRfcmVnYWRkcihmLCBSRChpbnNuKSkgPSByZF92YWw7Cit9CisKK3N0YXRpYyB2b2lkIHBkaXN0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbikKK3sKKwlzdHJ1Y3QgZnB1c3RhdGUgKmYgPSBGUFVTVEFURTsKKwl1bnNpZ25lZCBsb25nIHJzMSwgcnMyLCAqcmQsIHJkX3ZhbDsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlyczEgPSBmcGRfcmVndmFsKGYsIFJTMShpbnNuKSk7CisJcnMyID0gZnBkX3JlZ3ZhbChmLCBSUzEoaW5zbikpOworCXJkID0gZnBkX3JlZ2FkZHIoZiwgUkQoaW5zbikpOworCisJcmRfdmFsID0gKnJkOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzMTYgczEsIHMyOworCisJCXMxID0gKHJzMSA+PiAoNTYgLSAoaSAqIDgpKSkgJiAweGZmOworCQlzMiA9IChyczIgPj4gKDU2IC0gKGkgKiA4KSkpICYgMHhmZjsKKworCQkvKiBBYnNvbHV0ZSB2YWx1ZSBvZiBkaWZmZXJlbmNlLiAqLworCQlzMSAtPSBzMjsKKwkJaWYgKHMxIDwgMCkKKwkJCXMxID0gfnMxICsgMTsKKworCQlyZF92YWwgKz0gczE7CisJfQorCisJKnJkID0gcmRfdmFsOworfQorCitzdGF0aWMgdm9pZCBwZm9ybWF0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKK3sKKwlzdHJ1Y3QgZnB1c3RhdGUgKmYgPSBGUFVTVEFURTsKKwl1bnNpZ25lZCBsb25nIHJzMSwgcnMyLCBnc3IsIHNjYWxlLCByZF92YWw7CisKKwlnc3IgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmdzclswXTsKKwlzY2FsZSA9IChnc3IgPj4gMykgJiAob3BmID09IEZQQUNLMTZfT1BGID8gMHhmIDogMHgxZik7CisJc3dpdGNoIChvcGYpIHsKKwljYXNlIEZQQUNLMTZfT1BGOiB7CisJCXVuc2lnbmVkIGxvbmcgYnl0ZTsKKworCQlyczIgPSBmcGRfcmVndmFsKGYsIFJTMihpbnNuKSk7CisJCXJkX3ZhbCA9IDA7CisJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCA0OyBieXRlKyspIHsKKwkJCXVuc2lnbmVkIGludCB2YWw7CisJCQlzMTYgc3JjID0gKHJzMiA+PiAoYnl0ZSAqIDE2VUwpKSAmIDB4ZmZmZlVMOworCQkJaW50IHNjYWxlZCA9IHNyYyA8PCBzY2FsZTsKKwkJCWludCBmcm9tX2ZpeGVkID0gc2NhbGVkID4+IDc7CisKKwkJCXZhbCA9ICgoZnJvbV9maXhlZCA8IDApID8KKwkJCSAgICAgICAwIDoKKwkJCSAgICAgICAoZnJvbV9maXhlZCA+IDI1NSkgPworCQkJICAgICAgIDI1NSA6IGZyb21fZml4ZWQpOworCisJCQlyZF92YWwgfD0gKHZhbCA8PCAoOCAqIGJ5dGUpKTsKKwkJfQorCQkqZnBzX3JlZ2FkZHIoZiwgUkQoaW5zbikpID0gcmRfdmFsOworCQlicmVhazsKKwl9CisKKwljYXNlIEZQQUNLMzJfT1BGOiB7CisJCXVuc2lnbmVkIGxvbmcgd29yZDsKKworCQlyczEgPSBmcGRfcmVndmFsKGYsIFJTMShpbnNuKSk7CisJCXJzMiA9IGZwZF9yZWd2YWwoZiwgUlMyKGluc24pKTsKKwkJcmRfdmFsID0gKHJzMSA8PCA4KSAmIH4oMHgwMDAwMDBmZjAwMDAwMGZmVUwpOworCQlmb3IgKHdvcmQgPSAwOyB3b3JkIDwgMjsgd29yZCsrKSB7CisJCQl1bnNpZ25lZCBsb25nIHZhbDsKKwkJCXMzMiBzcmMgPSAocnMyID4+ICh3b3JkICogMzJVTCkpOworCQkJczY0IHNjYWxlZCA9IHNyYyA8PCBzY2FsZTsKKwkJCXM2NCBmcm9tX2ZpeGVkID0gc2NhbGVkID4+IDIzOworCisJCQl2YWwgPSAoKGZyb21fZml4ZWQgPCAwKSA/CisJCQkgICAgICAgMCA6CisJCQkgICAgICAgKGZyb21fZml4ZWQgPiAyNTUpID8KKwkJCSAgICAgICAyNTUgOiBmcm9tX2ZpeGVkKTsKKworCQkJcmRfdmFsIHw9ICh2YWwgPDwgKDMyICogd29yZCkpOworCQl9CisJCSpmcGRfcmVnYWRkcihmLCBSRChpbnNuKSkgPSByZF92YWw7CisJCWJyZWFrOworCX0KKworCWNhc2UgRlBBQ0tGSVhfT1BGOiB7CisJCXVuc2lnbmVkIGxvbmcgd29yZDsKKworCQlyczIgPSBmcGRfcmVndmFsKGYsIFJTMihpbnNuKSk7CisKKwkJcmRfdmFsID0gMDsKKwkJZm9yICh3b3JkID0gMDsgd29yZCA8IDI7IHdvcmQrKykgeworCQkJbG9uZyB2YWw7CisJCQlzMzIgc3JjID0gKHJzMiA+PiAod29yZCAqIDMyVUwpKTsKKwkJCXM2NCBzY2FsZWQgPSBzcmMgPDwgc2NhbGU7CisJCQlzNjQgZnJvbV9maXhlZCA9IHNjYWxlZCA+PiAxNjsKKworCQkJdmFsID0gKChmcm9tX2ZpeGVkIDwgLTMyNzY4KSA/CisJCQkgICAgICAgLTMyNzY4IDoKKwkJCSAgICAgICAoZnJvbV9maXhlZCA+IDMyNzY3KSA/CisJCQkgICAgICAgMzI3NjcgOiBmcm9tX2ZpeGVkKTsKKworCQkJcmRfdmFsIHw9ICgodmFsICYgMHhmZmZmKSA8PCAod29yZCAqIDE2KSk7CisJCX0KKwkJKmZwc19yZWdhZGRyKGYsIFJEKGluc24pKSA9IHJkX3ZhbDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBGRVhQQU5EX09QRjogeworCQl1bnNpZ25lZCBsb25nIGJ5dGU7CisKKwkJcnMyID0gZnBzX3JlZ3ZhbChmLCBSUzIoaW5zbikpOworCisJCXJkX3ZhbCA9IDA7CisJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCA0OyBieXRlKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgdmFsOworCQkJdTggc3JjID0gKHJzMiA+PiAoYnl0ZSAqIDgpKSAmIDB4ZmY7CisKKwkJCXZhbCA9IHNyYyA8PCA0OworCisJCQlyZF92YWwgfD0gKHZhbCA8PCAoYnl0ZSAqIDE2KSk7CisJCX0KKwkJKmZwZF9yZWdhZGRyKGYsIFJEKGluc24pKSA9IHJkX3ZhbDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBGUE1FUkdFX09QRjogeworCQlyczEgPSBmcHNfcmVndmFsKGYsIFJTMShpbnNuKSk7CisJCXJzMiA9IGZwc19yZWd2YWwoZiwgUlMyKGluc24pKTsKKworCQlyZF92YWwgPSAoKChyczIgJiAweDAwMDAwMGZmKSA8PCAgMCkgfAorCQkJICAoKHJzMSAmIDB4MDAwMDAwZmYpIDw8ICA4KSB8CisJCQkgICgocnMyICYgMHgwMDAwZmYwMCkgPDwgIDgpIHwKKwkJCSAgKChyczEgJiAweDAwMDBmZjAwKSA8PCAxNikgfAorCQkJICAoKHJzMiAmIDB4MDBmZjAwMDApIDw8IDE2KSB8CisJCQkgICgocnMxICYgMHgwMGZmMDAwMCkgPDwgMjQpIHwKKwkJCSAgKChyczIgJiAweGZmMDAwMDAwKSA8PCAyNCkgfAorCQkJICAoKHJzMSAmIDB4ZmYwMDAwMDApIDw8IDMyKSk7CisJCSpmcGRfcmVnYWRkcihmLCBSRChpbnNuKSkgPSByZF92YWw7CisJCWJyZWFrOworCX0KKwl9OworfQorCitzdGF0aWMgdm9pZCBwbXVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKK3sKKwlzdHJ1Y3QgZnB1c3RhdGUgKmYgPSBGUFVTVEFURTsKKwl1bnNpZ25lZCBsb25nIHJzMSwgcnMyLCByZF92YWw7CisKKwlzd2l0Y2ggKG9wZikgeworCWNhc2UgRk1VTDh4MTZfT1BGOiB7CisJCXVuc2lnbmVkIGxvbmcgYnl0ZTsKKworCQlyczEgPSBmcHNfcmVndmFsKGYsIFJTMShpbnNuKSk7CisJCXJzMiA9IGZwZF9yZWd2YWwoZiwgUlMyKGluc24pKTsKKworCQlyZF92YWwgPSAwOworCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgNDsgYnl0ZSsrKSB7CisJCQl1MTYgc3JjMSA9IChyczEgPj4gKGJ5dGUgKiAgOCkpICYgMHgwMGZmOworCQkJczE2IHNyYzIgPSAocnMyID4+IChieXRlICogMTYpKSAmIDB4ZmZmZjsKKwkJCXUzMiBwcm9kID0gc3JjMSAqIHNyYzI7CisJCQl1MTYgc2NhbGVkID0gKChwcm9kICYgMHgwMGZmZmYwMCkgPj4gOCk7CisKKwkJCS8qIFJvdW5kIHVwLiAgKi8KKwkJCWlmIChwcm9kICYgMHg4MCkKKwkJCQlzY2FsZWQrKzsKKwkJCXJkX3ZhbCB8PSAoKHNjYWxlZCAmIDB4ZmZmZlVMKSA8PCAoYnl0ZSAqIDE2VUwpKTsKKwkJfQorCisJCSpmcGRfcmVnYWRkcihmLCBSRChpbnNuKSkgPSByZF92YWw7CisJCWJyZWFrOworCX0KKworCWNhc2UgRk1VTDh4MTZBVV9PUEY6CisJY2FzZSBGTVVMOHgxNkFMX09QRjogeworCQl1bnNpZ25lZCBsb25nIGJ5dGU7CisJCXMxNiBzcmMyOworCisJCXJzMSA9IGZwc19yZWd2YWwoZiwgUlMxKGluc24pKTsKKwkJcnMyID0gZnBzX3JlZ3ZhbChmLCBSUzIoaW5zbikpOworCisJCXJkX3ZhbCA9IDA7CisJCXNyYzIgPSAocnMyID4+IChvcGYgPT0gRk1VTDh4MTZBVV9PUEYpID8gMTYgOiAwKTsKKwkJZm9yIChieXRlID0gMDsgYnl0ZSA8IDQ7IGJ5dGUrKykgeworCQkJdTE2IHNyYzEgPSAocnMxID4+IChieXRlICogOCkpICYgMHgwMGZmOworCQkJdTMyIHByb2QgPSBzcmMxICogc3JjMjsKKwkJCXUxNiBzY2FsZWQgPSAoKHByb2QgJiAweDAwZmZmZjAwKSA+PiA4KTsKKworCQkJLyogUm91bmQgdXAuICAqLworCQkJaWYgKHByb2QgJiAweDgwKQorCQkJCXNjYWxlZCsrOworCQkJcmRfdmFsIHw9ICgoc2NhbGVkICYgMHhmZmZmVUwpIDw8IChieXRlICogMTZVTCkpOworCQl9CisKKwkJKmZwZF9yZWdhZGRyKGYsIFJEKGluc24pKSA9IHJkX3ZhbDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBGTVVMOFNVeDE2X09QRjoKKwljYXNlIEZNVUw4VUx4MTZfT1BGOiB7CisJCXVuc2lnbmVkIGxvbmcgYnl0ZSwgdXNoaWZ0OworCisJCXJzMSA9IGZwZF9yZWd2YWwoZiwgUlMxKGluc24pKTsKKwkJcnMyID0gZnBkX3JlZ3ZhbChmLCBSUzIoaW5zbikpOworCisJCXJkX3ZhbCA9IDA7CisJCXVzaGlmdCA9IChvcGYgPT0gRk1VTDhTVXgxNl9PUEYpID8gOCA6IDA7CisJCWZvciAoYnl0ZSA9IDA7IGJ5dGUgPCA0OyBieXRlKyspIHsKKwkJCXUxNiBzcmMxOworCQkJczE2IHNyYzI7CisJCQl1MzIgcHJvZDsKKwkJCXUxNiBzY2FsZWQ7CisKKwkJCXNyYzEgPSAoKHJzMSA+PiAoKDE2ICogYnl0ZSkgKyB1c2hpZnQpKSAmIDB4MDBmZik7CisJCQlzcmMyID0gKChyczIgPj4gKDE2ICogYnl0ZSkpICYgMHhmZmZmKTsKKwkJCXByb2QgPSBzcmMxICogc3JjMjsKKwkJCXNjYWxlZCA9ICgocHJvZCAmIDB4MDBmZmZmMDApID4+IDgpOworCisJCQkvKiBSb3VuZCB1cC4gICovCisJCQlpZiAocHJvZCAmIDB4ODApCisJCQkJc2NhbGVkKys7CisJCQlyZF92YWwgfD0gKChzY2FsZWQgJiAweGZmZmZVTCkgPDwgKGJ5dGUgKiAxNlVMKSk7CisJCX0KKworCQkqZnBkX3JlZ2FkZHIoZiwgUkQoaW5zbikpID0gcmRfdmFsOworCQlicmVhazsKKwl9CisKKwljYXNlIEZNVUxEOFNVeDE2X09QRjoKKwljYXNlIEZNVUxEOFVMeDE2X09QRjogeworCQl1bnNpZ25lZCBsb25nIGJ5dGUsIHVzaGlmdDsKKworCQlyczEgPSBmcHNfcmVndmFsKGYsIFJTMShpbnNuKSk7CisJCXJzMiA9IGZwc19yZWd2YWwoZiwgUlMyKGluc24pKTsKKworCQlyZF92YWwgPSAwOworCQl1c2hpZnQgPSAob3BmID09IEZNVUxEOFNVeDE2X09QRikgPyA4IDogMDsKKwkJZm9yIChieXRlID0gMDsgYnl0ZSA8IDI7IGJ5dGUrKykgeworCQkJdTE2IHNyYzE7CisJCQlzMTYgc3JjMjsKKwkJCXUzMiBwcm9kOworCQkJdTE2IHNjYWxlZDsKKworCQkJc3JjMSA9ICgocnMxID4+ICgoMTYgKiBieXRlKSArIHVzaGlmdCkpICYgMHgwMGZmKTsKKwkJCXNyYzIgPSAoKHJzMiA+PiAoMTYgKiBieXRlKSkgJiAweGZmZmYpOworCQkJcHJvZCA9IHNyYzEgKiBzcmMyOworCQkJc2NhbGVkID0gKChwcm9kICYgMHgwMGZmZmYwMCkgPj4gOCk7CisKKwkJCS8qIFJvdW5kIHVwLiAgKi8KKwkJCWlmIChwcm9kICYgMHg4MCkKKwkJCQlzY2FsZWQrKzsKKwkJCXJkX3ZhbCB8PSAoKHNjYWxlZCAmIDB4ZmZmZlVMKSA8PAorCQkJCSAgICgoYnl0ZSAqIDMyVUwpICsgN1VMKSk7CisJCX0KKwkJKmZwZF9yZWdhZGRyKGYsIFJEKGluc24pKSA9IHJkX3ZhbDsKKwkJYnJlYWs7CisJfQorCX07Cit9CisKK3N0YXRpYyB2b2lkIHBjbXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuLCB1bnNpZ25lZCBpbnQgb3BmKQoreworCXN0cnVjdCBmcHVzdGF0ZSAqZiA9IEZQVVNUQVRFOworCXVuc2lnbmVkIGxvbmcgcnMxLCByczIsIHJkX3ZhbCwgaTsKKworCXJzMSA9IGZwZF9yZWd2YWwoZiwgUlMxKGluc24pKTsKKwlyczIgPSBmcGRfcmVndmFsKGYsIFJTMihpbnNuKSk7CisKKwlyZF92YWwgPSAwOworCisJc3dpdGNoIChvcGYpIHsKKwljYXNlIEZDTVBHVDE2X09QRjoKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJczE2IGEgPSAocnMxID4+IChpICogMTYpKSAmIDB4ZmZmZjsKKwkJCXMxNiBiID0gKHJzMiA+PiAoaSAqIDE2KSkgJiAweGZmZmY7CisKKwkJCWlmIChhID4gYikKKwkJCQlyZF92YWwgfD0gMSA8PCBpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQ01QR1QzMl9PUEY6CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXMzMiBhID0gKHJzMSA+PiAoaSAqIDMyKSkgJiAweGZmZmY7CisJCQlzMzIgYiA9IChyczIgPj4gKGkgKiAzMikpICYgMHhmZmZmOworCisJCQlpZiAoYSA+IGIpCisJCQkJcmRfdmFsIHw9IDEgPDwgaTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkNNUExFMTZfT1BGOgorCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlzMTYgYSA9IChyczEgPj4gKGkgKiAxNikpICYgMHhmZmZmOworCQkJczE2IGIgPSAocnMyID4+IChpICogMTYpKSAmIDB4ZmZmZjsKKworCQkJaWYgKGEgPD0gYikKKwkJCQlyZF92YWwgfD0gMSA8PCBpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQ01QTEUzMl9PUEY6CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXMzMiBhID0gKHJzMSA+PiAoaSAqIDMyKSkgJiAweGZmZmY7CisJCQlzMzIgYiA9IChyczIgPj4gKGkgKiAzMikpICYgMHhmZmZmOworCisJCQlpZiAoYSA8PSBiKQorCQkJCXJkX3ZhbCB8PSAxIDw8IGk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZDTVBORTE2X09QRjoKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJczE2IGEgPSAocnMxID4+IChpICogMTYpKSAmIDB4ZmZmZjsKKwkJCXMxNiBiID0gKHJzMiA+PiAoaSAqIDE2KSkgJiAweGZmZmY7CisKKwkJCWlmIChhICE9IGIpCisJCQkJcmRfdmFsIHw9IDEgPDwgaTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkNNUE5FMzJfT1BGOgorCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlzMzIgYSA9IChyczEgPj4gKGkgKiAzMikpICYgMHhmZmZmOworCQkJczMyIGIgPSAocnMyID4+IChpICogMzIpKSAmIDB4ZmZmZjsKKworCQkJaWYgKGEgIT0gYikKKwkJCQlyZF92YWwgfD0gMSA8PCBpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQ01QRVExNl9PUEY6CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXMxNiBhID0gKHJzMSA+PiAoaSAqIDE2KSkgJiAweGZmZmY7CisJCQlzMTYgYiA9IChyczIgPj4gKGkgKiAxNikpICYgMHhmZmZmOworCisJCQlpZiAoYSA9PSBiKQorCQkJCXJkX3ZhbCB8PSAxIDw8IGk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZDTVBFUTMyX09QRjoKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJczMyIGEgPSAocnMxID4+IChpICogMzIpKSAmIDB4ZmZmZjsKKwkJCXMzMiBiID0gKHJzMiA+PiAoaSAqIDMyKSkgJiAweGZmZmY7CisKKwkJCWlmIChhID09IGIpCisJCQkJcmRfdmFsIHw9IDEgPDwgaTsKKwkJfQorCQlicmVhazsKKwl9OworCisJbWF5YmVfZmx1c2hfd2luZG93cygwLCAwLCBSRChpbnNuKSwgMCk7CisJc3RvcmVfcmVnKHJlZ3MsIHJkX3ZhbCwgUkQoaW5zbikpOworfQorCisvKiBFbXVsYXRlIHRoZSBWSVMgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4KKyAqIGhhcmR3YXJlIG9uIE5pYWdhcmEuCisgKi8KK2ludCB2aXNfZW11bChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc24pCit7CisJdW5zaWduZWQgbG9uZyBwYyA9IHJlZ3MtPnRwYzsKKwl1bnNpZ25lZCBpbnQgb3BmOworCisJQlVHX09OKHJlZ3MtPnRzdGF0ZSAmIFRTVEFURV9QUklWKTsKKworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpCisJCXBjID0gKHUzMilwYzsKKworCWlmIChnZXRfdXNlcihpbnNuLCAodTMyIF9fdXNlciAqKSBwYykpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKChpbnNuICYgVklTX09QQ09ERV9NQVNLKSAhPSBWSVNfT1BDT0RFX1ZBTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvcGYgPSAoaW5zbiAmIFZJU19PUEZfTUFTSykgPj4gVklTX09QRl9TSElGVDsKKwlzd2l0Y2ggKG9wZikgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCisJLyogUGl4ZWwgRm9ybWF0dGluZyBJbnN0cnVjdGlvbnMuICAqLworCWNhc2UgRlBBQ0sxNl9PUEY6CisJY2FzZSBGUEFDSzMyX09QRjoKKwljYXNlIEZQQUNLRklYX09QRjoKKwljYXNlIEZFWFBBTkRfT1BGOgorCWNhc2UgRlBNRVJHRV9PUEY6CisJCXBmb3JtYXQocmVncywgaW5zbiwgb3BmKTsKKwkJYnJlYWs7CisKKwkvKiBQYXJ0aXRpb25lZCBNdWx0aXBseSBJbnN0cnVjdGlvbnMgICovCisJY2FzZSBGTVVMOHgxNl9PUEY6CisJY2FzZSBGTVVMOHgxNkFVX09QRjoKKwljYXNlIEZNVUw4eDE2QUxfT1BGOgorCWNhc2UgRk1VTDhTVXgxNl9PUEY6CisJY2FzZSBGTVVMOFVMeDE2X09QRjoKKwljYXNlIEZNVUxEOFNVeDE2X09QRjoKKwljYXNlIEZNVUxEOFVMeDE2X09QRjoKKwkJcG11bChyZWdzLCBpbnNuLCBvcGYpOworCQlicmVhazsKKworCS8qIFBpeGVsIENvbXBhcmUgSW5zdHJ1Y3Rpb25zICAqLworCWNhc2UgRkNNUEdUMTZfT1BGOgorCWNhc2UgRkNNUEdUMzJfT1BGOgorCWNhc2UgRkNNUExFMTZfT1BGOgorCWNhc2UgRkNNUExFMzJfT1BGOgorCWNhc2UgRkNNUE5FMTZfT1BGOgorCWNhc2UgRkNNUE5FMzJfT1BGOgorCWNhc2UgRkNNUEVRMTZfT1BGOgorCWNhc2UgRkNNUEVRMzJfT1BGOgorCQlwY21wKHJlZ3MsIGluc24sIG9wZik7CisJCWJyZWFrOworCisJLyogRWRnZSBIYW5kbGluZyBJbnN0cnVjdGlvbnMgICovCisJY2FzZSBFREdFOF9PUEY6CisJY2FzZSBFREdFOE5fT1BGOgorCWNhc2UgRURHRThMX09QRjoKKwljYXNlIEVER0U4TE5fT1BGOgorCWNhc2UgRURHRTE2X09QRjoKKwljYXNlIEVER0UxNk5fT1BGOgorCWNhc2UgRURHRTE2TF9PUEY6CisJY2FzZSBFREdFMTZMTl9PUEY6CisJY2FzZSBFREdFMzJfT1BGOgorCWNhc2UgRURHRTMyTl9PUEY6CisJY2FzZSBFREdFMzJMX09QRjoKKwljYXNlIEVER0UzMkxOX09QRjoKKwkJZWRnZShyZWdzLCBpbnNuLCBvcGYpOworCQlicmVhazsKKworCS8qIFBpeGVsIENvbXBvbmVudCBEaXN0YW5jZSAgKi8KKwljYXNlIFBESVNUX09QRjoKKwkJcGRpc3QocmVncywgaW5zbik7CisJCWJyZWFrOworCisJLyogVGhyZWUtRGltZW5zaW9uYWwgQXJyYXkgQWRkcmVzc2luZyBJbnN0cnVjdGlvbnMgICovCisJY2FzZSBBUlJBWThfT1BGOgorCWNhc2UgQVJSQVkxNl9PUEY6CisJY2FzZSBBUlJBWTMyX09QRjoKKwkJYXJyYXkocmVncywgaW5zbiwgb3BmKTsKKwkJYnJlYWs7CisKKwkvKiBCeXRlIE1hc2sgYW5kIFNodWZmbGUgSW5zdHJ1Y3Rpb25zICAqLworCWNhc2UgQk1BU0tfT1BGOgorCQlibWFzayhyZWdzLCBpbnNuKTsKKwkJYnJlYWs7CisKKwljYXNlIEJTSFVGRkxFX09QRjoKKwkJYnNodWZmbGUocmVncywgaW5zbik7CisJCWJyZWFrOworCX07CisKKwlyZWdzLT50cGMgPSByZWdzLT50bnBjOworCXJlZ3MtPnRucGMgKz0gNDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA0NjdkMTNhLi5iMDk3Mzc5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC03MCw2ICs3MCwyMiBAQAogICAuY29uX2luaXRjYWxsLmluaXQgOiB7ICooLmNvbl9pbml0Y2FsbC5pbml0KSB9CiAgIF9fY29uX2luaXRjYWxsX2VuZCA9IC47CiAgIFNFQ1VSSVRZX0lOSVQKKyAgLiA9IEFMSUdOKDQpOworICBfX3RzYl9sZHF1YWRfcGh5c19wYXRjaCA9IC47CisgIC50c2JfbGRxdWFkX3BoeXNfcGF0Y2ggOiB7ICooLnRzYl9sZHF1YWRfcGh5c19wYXRjaCkgfQorICBfX3RzYl9sZHF1YWRfcGh5c19wYXRjaF9lbmQgPSAuOworICBfX3RzYl9waHlzX3BhdGNoID0gLjsKKyAgLnRzYl9waHlzX3BhdGNoIDogeyAqKC50c2JfcGh5c19wYXRjaCkgfQorICBfX3RzYl9waHlzX3BhdGNoX2VuZCA9IC47CisgIF9fY3B1aWRfcGF0Y2ggPSAuOworICAuY3B1aWRfcGF0Y2ggOiB7ICooLmNwdWlkX3BhdGNoKSB9CisgIF9fY3B1aWRfcGF0Y2hfZW5kID0gLjsKKyAgX19zdW40dl8xaW5zbl9wYXRjaCA9IC47CisgIC5zdW40dl8xaW5zbl9wYXRjaCA6IHsgKiguc3VuNHZfMWluc25fcGF0Y2gpIH0KKyAgX19zdW40dl8xaW5zbl9wYXRjaF9lbmQgPSAuOworICBfX3N1bjR2XzJpbnNuX3BhdGNoID0gLjsKKyAgLnN1bjR2XzJpbnNuX3BhdGNoIDogeyAqKC5zdW40dl8yaW5zbl9wYXRjaCkgfQorICBfX3N1bjR2XzJpbnNuX3BhdGNoX2VuZCA9IC47CiAgIC4gPSBBTElHTig4MTkyKTsgCiAgIF9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKICAgLmluaXQucmFtZnMgOiB7ICooLmluaXQucmFtZnMpIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvd2luZml4dXAuUyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvd2luZml4dXAuUwppbmRleCAzOTE2MDkyLi5jNGFhMTEwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3dpbmZpeHVwLlMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC93aW5maXh1cC5TCkBAIC0xLDggKzEsNiBAQAotLyogJElkOiB3aW5maXh1cC5TLHYgMS4zMCAyMDAyLzAyLzA5IDE5OjQ5OjMwIGRhdmVtIEV4cCAkCisvKiB3aW5maXh1cC5TOiBIYW5kbGUgY2FzZXMgd2hlcmUgdXNlciBzdGFjayBwb2ludGVyIGlzIGZvdW5kIHRvIGJlIGJvZ3VzLgogICoKLSAqIHdpbmZpeHVwLlM6IEhhbmRsZSBjYXNlcyB3aGVyZSB1c2VyIHN0YWNrIHBvaW50ZXIgaXMgZm91bmQgdG8gYmUgYm9ndXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqIENvcHlyaWdodCAoQykgMTk5NywgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9hc2kuaD4KQEAgLTE1LDM3NCArMTMsMTQ0IEBACiAKIAkudGV4dAogCi1zZXRfcGNvbnRleHQ6Ci0Jc2V0aGkJJWhpKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCksICVsMQotCWxkeAlbJWwxICsgJWxvKHNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCldLCAlbDEKLQltb3YJUFJJTUFSWV9DT05URVhULCAlZzEKLQlzdHhhCSVsMSwgWyVnMV0gQVNJX0RNTVUKLQlmbHVzaAklZzYKLQlyZXRsCi0JIG5vcAorCS8qIEl0IHVzZWQgdG8gYmUgdGhlIGNhc2UgdGhhdCB0aGVzZSByZWdpc3RlciB3aW5kb3cgZmF1bHQKKwkgKiBoYW5kbGVycyBjb3VsZCBydW4gdmlhIHRoZSBzYXZlIGFuZCByZXN0b3JlIGluc3RydWN0aW9ucworCSAqIGRvbmUgYnkgdGhlIHRyYXAgZW50cnkgYW5kIGV4aXQgY29kZS4gIFRoZXkgbm93IGRvIHRoZQorCSAqIHdpbmRvdyBzcGlsbC9maWxsIGJ5IGhhbmQsIHNvIHRoYXQgY2FzZSBubyBsb25nZXIgY2FuIG9jY3VyLgorCSAqLwogCiAJLmFsaWduCTMyCi0KLQkvKiBIZXJlIGFyZSB0aGUgcnVsZXMsIHBheSBhdHRlbnRpb24uCi0JICoKLQkgKiBUaGUga2VybmVsIGlzIGRpc2FsbG93ZWQgZnJvbSB0b3VjaGluZyB1c2VyIHNwYWNlIHdoaWxlCi0JICogdGhlIHRyYXAgbGV2ZWwgaXMgZ3JlYXRlciB0aGFuIHplcm8sIGV4Y2VwdCBmb3IgZnJvbSB3aXRoaW4KLQkgKiB0aGUgd2luZG93IHNwaWxsL2ZpbGwgaGFuZGxlcnMuICBUaGlzIG11c3QgYmUgZm9sbG93ZWQKLQkgKiBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgZGV0ZWN0IHRoZSBjYXNlIHdoZXJlIHdlIHRyaWVkIHRvCi0JICogc3BpbGwvZmlsbCB3aXRoIGEgYm9ndXMgKG9yIHVubWFwcGVkKSB1c2VyIHN0YWNrIHBvaW50ZXIuCi0JICoKLQkgKiBUaGVzZSBhcmUgbGF5ZWQgb3V0IGluIGEgc3BlY2lhbCB3YXkgZm9yIGNhY2hlIHJlYXNvbnMsCi0JICogZG9uJ3QgdG91Y2guLi4KLQkgKi8KLQkuZ2xvYmwJZmlsbF9maXh1cCwgc3BpbGxfZml4dXAKIGZpbGxfZml4dXA6Ci0JcmRwcgkJJXRzdGF0ZSwgJWcxCi0JYW5kY2MJCSVnMSwgVFNUQVRFX1BSSVYsICVnMAotCW9yCQklZzQsIEZBVUxUX0NPREVfV0lORklYVVAsICVnNAotCWJlLHB0CQkleGNjLCB3aW5kb3dfc2NoZWlzc2VfZnJvbV91c2VyX2NvbW1vbgotCSBhbmQJCSVnMSwgVFNUQVRFX0NXUCwgJWcxCi0KLQkvKiBUaGlzIGlzIHRoZSBleHRyZW1lbHkgY29tcGxleCBjYXNlLCBidXQgaXQgZG9lcyBoYXBwZW4gZnJvbQotCSAqIHRpbWUgdG8gdGltZSBpZiB0aGluZ3MgYXJlIGp1c3QgcmlnaHQuICBFc3NlbnRpYWxseSB0aGUgcmVzdG9yZQotCSAqIGRvbmUgaW4gcnRyYXAgcmlnaHQgYmVmb3JlIGdvaW5nIGJhY2sgdG8gdXNlciBtb2RlLCB3aXRoIHRsPTEKLQkgKiBhbmQgdGhhdCBsZXZlbHMgdHJhcCBzdGFjayByZWdpc3RlcnMgYWxsIHNldHVwLCB0b29rIGEgZmlsbCB0cmFwLAotCSAqIHRoZSB1c2VyIHN0YWNrIHdhcyBub3QgbWFwcGVkIGluIHRoZSB0bGIsIGFuZCB0bGIgbWlzcyBvY2N1cnJlZCwKLQkgKiB0aGUgcHRlIGZvdW5kIHdhcyBub3QgdmFsaWQsIGFuZCBhIHNpbXBsZSByZWYgYml0IHdhdGNoIHVwZGF0ZQotCSAqIGNvdWxkIG5vdCBzYXRpc2Z5IHRoZSBtaXNzLCBzbyB3ZSBnb3QgaGVyZS4KLQkgKgotCSAqIFdlIG11c3QgY2FyZWZ1bGx5IHVud2luZCB0aGUgc3RhdGUgc28gd2UgZ2V0IGJhY2sgdG8gdGw9MCwgcHJlc2VydmUKLQkgKiBhbGwgdGhlIHJlZ2lzdGVyIHZhbHVlcyB3ZSB3ZXJlIGdvaW5nIHRvIGdpdmUgdG8gdGhlIHVzZXIuICBMdWNraWx5Ci0JICogbW9zdCB0aGluZ3MgYXJlIHdoZXJlIHRoZXkgbmVlZCB0byBiZSwgd2UgYWxzbyBoYXZlIHRoZSBhZGRyZXNzCi0JICogd2hpY2ggdHJpZ2dlcmVkIHRoZSBmYXVsdCBoYW5keSBhcyB3ZWxsLgotCSAqCi0JICogQWxzbyBub3RlIHRoYXQgd2UgbXVzdCBwcmVzZXJ2ZSAlbDUgYW5kICVsNi4gIElmIHRoZSB1c2VyIHdhcwotCSAqIHJldHVybmluZyBmcm9tIGEgc3lzdGVtIGNhbGwsIHdlIG11c3QgbWFrZSBpdCBsb29rIHRoaXMgd2F5Ci0JICogYWZ0ZXIgd2UgcHJvY2VzcyB0aGUgZmlsbCBmYXVsdCBvbiB0aGUgdXNlcnMgc3RhY2suCi0JICoKLQkgKiBGaXJzdCwgZ2V0IGludG8gdGhlIHdpbmRvdyB3aGVyZSB0aGUgb3JpZ2luYWwgcmVzdG9yZSB3YXMgZXhlY3V0ZWQuCi0JICovCi0KLQlyZHByCQkld3N0YXRlLCAlZzIJCQkhIEdyYWIgdXNlciBtb2RlIHdzdGF0ZS4KLQl3cnByCQklZzEsICVjd3AJCQkhIEdldCBpbnRvIHRoZSByaWdodCB3aW5kb3cuCi0Jc2xsCQklZzIsIDMsICVnMgkJCSEgTk9STUFMLS0+T1RIRVIKLQotCXdycHIJCSVnMCwgMHgwLCAlY2FucmVzdG9yZQkJISBTdGFuZGFyZCBldHJhcCBzdHVmZi4KLQl3cnByCQklZzIsIDB4MCwgJXdzdGF0ZQkJISBUaGlzIG11c3QgYmUgY29uc2lzdGVudC4KLQl3cnByCQklZzAsIDB4MCwgJW90aGVyd2luCQkhIFdlIGtub3cgdGhpcy4KLQljYWxsCQlzZXRfcGNvbnRleHQJCQkhIENoYW5nZSBjb250ZXh0cy4uLgorCVRSQVBfTE9BRF9USFJFQURfUkVHKCVnNiwgJWcxKQorCXJkcHIJJXRzdGF0ZSwgJWcxCisJYW5kCSVnMSwgVFNUQVRFX0NXUCwgJWcxCisJb3IJJWc0LCBGQVVMVF9DT0RFX1dJTkZJWFVQLCAlZzQKKwlzdGIJJWc0LCBbJWc2ICsgVElfRkFVTFRfQ09ERV0KKwlzdHgJJWc1LCBbJWc2ICsgVElfRkFVTFRfQUREUl0KKwl3cnByCSVnMSwgJWN3cAorCWJhLHB0CSV4Y2MsIGV0cmFwCisJIHJkCSVwYywgJWc3CisJY2FsbAlkb19zcGFyYzY0X2ZhdWx0CisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLHB0CSV4Y2MsIHJ0cmFwX2Nscl9sNgogCSBub3AKLQlyZHByCQklcHN0YXRlLCAlbDEJCQkhIFByZXBhcmUgdG8gY2hhbmdlIGdsb2JhbHMuCi0JbW92CQklZzYsICVvNwkJCSEgR2V0IGN1cnJlbnQuCiAKLQlhbmRuCQklbDEsIFBTVEFURV9NTSwgJWwxCQkhIFdlIHdhbnQgdG8gYmUgaW4gUk1PCi0Jc3RiCQklZzQsIFslZzYgKyBUSV9GQVVMVF9DT0RFXQotCXN0eAkJJWc1LCBbJWc2ICsgVElfRkFVTFRfQUREUl0KLQl3cnByCQklZzAsIDB4MCwgJXRsCQkJISBPdXQgb2YgdHJhcCBsZXZlbHMuCi0Jd3JwcgkJJWwxLCAoUFNUQVRFX0lFIHwgUFNUQVRFX0FHIHwgUFNUQVRFX1JNTyksICVwc3RhdGUKLQltb3YJCSVvNywgJWc2Ci0JbGR4CQlbJWc2ICsgVElfVEFTS10sICVnNAotI2lmZGVmIENPTkZJR19TTVAKLQltb3YJCVRTQl9SRUcsICVnMQotCWxkeGEJCVslZzFdIEFTSV9JTU1VLCAlZzUKLSNlbmRpZgotCi0JLyogVGhpcyBpcyB0aGUgc2FtZSBhcyBiZWxvdywgZXhjZXB0IHdlIGhhbmRsZSB0aGlzIGEgYml0IHNwZWNpYWwKLQkgKiBzaW5jZSB3ZSBtdXN0IHByZXNlcnZlICVsNSBhbmQgJWw2LCBzZWUgY29tbWVudCBhYm92ZS4KLQkgKi8KLQljYWxsCQlkb19zcGFyYzY0X2ZhdWx0Ci0JIGFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKLQliYSxwdAkJJXhjYywgcnRyYXAKLQkgbm9wCQkJCQkJISB5ZXMsIG5vcCBpcyBjb3JyZWN0Ci0KLQkvKiBCZSB2ZXJ5IGNhcmVmdWwgYWJvdXQgdXNhZ2Ugb2YgdGhlIGFsdGVybmF0ZSBnbG9iYWxzIGhlcmUuCi0JICogWW91IGNhbm5vdCB0b3VjaCAlZzQvJWc1IGFzIHRoYXQgaGFzIHRoZSBmYXVsdCBpbmZvcm1hdGlvbgotCSAqIHNob3VsZCB0aGlzIGJlIGZyb20gdXNlcm1vZGUuICBBbHNvIGJlIGNhcmVmdWwgZm9yIHRoZSBjYXNlCi0JICogd2hlcmUgd2UgZ2V0IGhlcmUgZnJvbSB0aGUgc2F2ZSBpbnN0cnVjdGlvbiBpbiBldHJhcC5TIHdoZW4KLQkgKiBjb21pbmcgZnJvbSBlaXRoZXIgdXNlciBvciBrZXJuZWwgKGRvZXMgbm90IG1hdHRlciB3aGljaCwgaXQKLQkgKiBpcyB0aGUgc2FtZSBwcm9ibGVtIGluIGJvdGggY2FzZXMpLiAgRXNzZW50aWFsbHkgdGhpcyBtZWFucwotCSAqIGRvIG5vdCB0b3VjaCAlZzcgb3IgJWcyIHNvIHdlIGhhbmRsZSB0aGUgdHdvIGNhc2VzIGZpbmUuCisJLyogQmUgdmVyeSBjYXJlZnVsIGFib3V0IHVzYWdlIG9mIHRoZSB0cmFwIGdsb2JhbHMgaGVyZS4KKwkgKiBZb3UgY2Fubm90IHRvdWNoICVnNSBhcyB0aGF0IGhhcyB0aGUgZmF1bHQgaW5mb3JtYXRpb24uCiAJICovCiBzcGlsbF9maXh1cDoKLQlsZHgJCVslZzYgKyBUSV9GTEFHU10sICVnMQotCWFuZGNjCQklZzEsIF9USUZfMzJCSVQsICVnMAotCWxkdWIJCVslZzYgKyBUSV9XU0FWRURdLCAlZzEKLQotCXNsbAkJJWcxLCAzLCAlZzMKLQlhZGQJCSVnNiwgJWczLCAlZzMKLQlzdHgJCSVzcCwgWyVnMyArIFRJX1JXSU5fU1BUUlNdCi0Jc2xsCQklZzEsIDcsICVnMwotCWJuZSxwdAkJJXhjYywgMWYKLQkgYWRkCQklZzYsICVnMywgJWczCi0Jc3R4CQklbDAsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwMF0KLQlzdHgJCSVsMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDA4XQotCi0Jc3R4CQklbDIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxMF0KLQlzdHgJCSVsMywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDE4XQotCXN0eAkJJWw0LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjBdCi0Jc3R4CQklbDUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyOF0KLQlzdHgJCSVsNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDMwXQotCXN0eAkJJWw3LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MzhdCi0Jc3R4CQklaTAsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg0MF0KLQlzdHgJCSVpMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDQ4XQotCi0Jc3R4CQklaTIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg1MF0KLQlzdHgJCSVpMywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDU4XQotCXN0eAkJJWk0LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NjBdCi0Jc3R4CQklaTUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg2OF0KLQlzdHgJCSVpNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDcwXQotCWIscHQJCSV4Y2MsIDJmCi0JIHN0eAkJJWk3LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NzhdCi0xOglzdHcJCSVsMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDAwXQotCi0Jc3R3CQklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwNF0KLQlzdHcJCSVsMiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDA4XQotCXN0dwkJJWwzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MGNdCi0Jc3R3CQklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxMF0KLQlzdHcJCSVsNSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDE0XQotCXN0dwkJJWw2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MThdCi0Jc3R3CQklbDcsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxY10KLQlzdHcJCSVpMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDIwXQotCi0Jc3R3CQklaTEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyNF0KLQlzdHcJCSVpMiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDI4XQotCXN0dwkJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MmNdCi0Jc3R3CQklaTQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzMF0KLQlzdHcJCSVpNSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDM0XQotCXN0dwkJJWk2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MzhdCi0Jc3R3CQklaTcsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzY10KLTI6CWFkZAkJJWcxLCAxLCAlZzEKLQotCXN0YgkJJWcxLCBbJWc2ICsgVElfV1NBVkVEXQotCXJkcHIJCSV0c3RhdGUsICVnMQotCWFuZGNjCQklZzEsIFRTVEFURV9QUklWLCAlZzAKLQlzYXZlZAotCWFuZAkJJWcxLCBUU1RBVEVfQ1dQLCAlZzEKLQliZSxwbgkJJXhjYywgd2luZG93X3NjaGVpc3NlX2Zyb21fdXNlcl9jb21tb24KLQkgbW92CQlGQVVMVF9DT0RFX1dSSVRFIHwgRkFVTFRfQ09ERV9EVExCIHwgRkFVTFRfQ09ERV9XSU5GSVhVUCwgJWc0Ci0JcmV0cnkKLQotd2luZG93X3NjaGVpc3NlX2Zyb21fdXNlcl9jb21tb246Ci0Jc3RiCQklZzQsIFslZzYgKyBUSV9GQVVMVF9DT0RFXQotCXN0eAkJJWc1LCBbJWc2ICsgVElfRkFVTFRfQUREUl0KLQl3cnByCQklZzEsICVjd3AKLQliYSxwdAkJJXhjYywgZXRyYXAKLQkgcmQJCSVwYywgJWc3Ci0JY2FsbAkJZG9fc3BhcmM2NF9mYXVsdAotCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCi0JYmEsYSxwdAkJJXhjYywgcnRyYXBfY2xyX2w2Ci0KLQkuZ2xvYmwJCXdpbmZpeF9tbmEsIGZpbGxfZml4dXBfbW5hLCBzcGlsbF9maXh1cF9tbmEKLXdpbmZpeF9tbmE6Ci0JYW5kbgkJJWczLCAweDdmLCAlZzMKLQlhZGQJCSVnMywgMHg3OCwgJWczCi0Jd3JwcgkJJWczLCAldG5wYwotCWRvbmUKLWZpbGxfZml4dXBfbW5hOgotCXJkcHIJCSV0c3RhdGUsICVnMQotCWFuZGNjCQklZzEsIFRTVEFURV9QUklWLCAlZzAKLQliZSxwdAkJJXhjYywgd2luZG93X21uYV9mcm9tX3VzZXJfY29tbW9uCi0JIGFuZAkJJWcxLCBUU1RBVEVfQ1dQLCAlZzEKLQotCS8qIFBsZWFzZSwgc2VlIGZpbGxfZml4dXAgY29tbWVudGFyeSBhYm91dCB3aHkgd2UgbXVzdCBwcmVzZXJ2ZQotCSAqICVsNSBhbmQgJWw2IHRvIHByZXNlcnZlIGFic29sdXRlIGNvcnJlY3Qgc2VtYW50aWNzLgotCSAqLwotCXJkcHIJCSV3c3RhdGUsICVnMgkJCSEgR3JhYiB1c2VyIG1vZGUgd3N0YXRlLgotCXdycHIJCSVnMSwgJWN3cAkJCSEgR2V0IGludG8gdGhlIHJpZ2h0IHdpbmRvdy4KLQlzbGwJCSVnMiwgMywgJWcyCQkJISBOT1JNQUwtLT5PVEhFUgotCXdycHIJCSVnMCwgMHgwLCAlY2FucmVzdG9yZQkJISBTdGFuZGFyZCBldHJhcCBzdHVmZi4KLQotCXdycHIJCSVnMiwgMHgwLCAld3N0YXRlCQkhIFRoaXMgbXVzdCBiZSBjb25zaXN0ZW50LgotCXdycHIJCSVnMCwgMHgwLCAlb3RoZXJ3aW4JCSEgV2Uga25vdyB0aGlzLgotCWNhbGwJCXNldF9wY29udGV4dAkJCSEgQ2hhbmdlIGNvbnRleHRzLi4uCi0JIG5vcAotCXJkcHIJCSVwc3RhdGUsICVsMQkJCSEgUHJlcGFyZSB0byBjaGFuZ2UgZ2xvYmFscy4KLQltb3YJCSVnNCwgJW8yCQkJISBTZXR1cCBhcmdzIGZvcgotCW1vdgkJJWc1LCAlbzEJCQkhIGZpbmFsIGNhbGwgdG8gbWVtX2FkZHJlc3NfdW5hbGlnbmVkLgotCWFuZG4JCSVsMSwgUFNUQVRFX01NLCAlbDEJCSEgV2Ugd2FudCB0byBiZSBpbiBSTU8KLQotCW1vdgkJJWc2LCAlbzcJCQkhIFN0YXNoIGF3YXkgY3VycmVudC4KLQl3cnByCQklZzAsIDB4MCwgJXRsCQkJISBPdXQgb2YgdHJhcCBsZXZlbHMuCi0Jd3JwcgkJJWwxLCAoUFNUQVRFX0lFIHwgUFNUQVRFX0FHIHwgUFNUQVRFX1JNTyksICVwc3RhdGUKLQltb3YJCSVvNywgJWc2CQkJISBHZXQgY3VycmVudCBiYWNrLgotCWxkeAkJWyVnNiArIFRJX1RBU0tdLCAlZzQJCSEgRmluaXNoIGl0LgotI2lmZGVmIENPTkZJR19TTVAKLQltb3YJCVRTQl9SRUcsICVnMQotCWxkeGEJCVslZzFdIEFTSV9JTU1VLCAlZzUKLSNlbmRpZgotCWNhbGwJCW1lbV9hZGRyZXNzX3VuYWxpZ25lZAotCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCi0KLQliLHB0CQkleGNjLCBydHJhcAotCSBub3AJCQkJCQkhIHllcywgdGhlIG5vcCBpcyBjb3JyZWN0CiBzcGlsbF9maXh1cF9tbmE6Ci0JbGR4CQlbJWc2ICsgVElfRkxBR1NdLCAlZzEKLQlhbmRjYwkJJWcxLCBfVElGXzMyQklULCAlZzAKLQlsZHViCQlbJWc2ICsgVElfV1NBVkVEXSwgJWcxCi0Jc2xsCQklZzEsIDMsICVnMwotCWFkZAkJJWc2LCAlZzMsICVnMwotCXN0eAkJJXNwLCBbJWczICsgVElfUldJTl9TUFRSU10KLQotCXNsbAkJJWcxLCA3LCAlZzMKLQlibmUscHQJCSV4Y2MsIDFmCi0JIGFkZAkJJWc2LCAlZzMsICVnMwotCXN0eAkJJWwwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDBdCi0Jc3R4CQklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwOF0KLQlzdHgJCSVsMiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDEwXQotCXN0eAkJJWwzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MThdCi0Jc3R4CQklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyMF0KLQotCXN0eAkJJWw1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjhdCi0Jc3R4CQklbDYsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzMF0KLQlzdHgJCSVsNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDM4XQotCXN0eAkJJWkwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NDBdCi0Jc3R4CQklaTEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg0OF0KLQlzdHgJCSVpMiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDUwXQotCXN0eAkJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NThdCi0Jc3R4CQklaTQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg2MF0KLQotCXN0eAkJJWk1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NjhdCi0Jc3R4CQklaTYsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg3MF0KLQlzdHgJCSVpNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDc4XQotCWIscHQJCSV4Y2MsIDJmCi0JIGFkZAkJJWcxLCAxLCAlZzEKLTE6CXN0ZAkJJWwwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDBdCi0Jc3RkCQklbDIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwOF0KLQlzdGQJCSVsNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDEwXQotCi0Jc3RkCQklbDYsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxOF0KLQlzdGQJCSVpMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDIwXQotCXN0ZAkJJWkyLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjhdCi0Jc3RkCQklaTQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzMF0KLQlzdGQJCSVpNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDM4XQotCWFkZAkJJWcxLCAxLCAlZzEKLTI6CXN0YgkJJWcxLCBbJWc2ICsgVElfV1NBVkVEXQotCXJkcHIJCSV0c3RhdGUsICVnMQotCi0JYW5kY2MJCSVnMSwgVFNUQVRFX1BSSVYsICVnMAotCXNhdmVkCi0JYmUscG4JCSV4Y2MsIHdpbmRvd19tbmFfZnJvbV91c2VyX2NvbW1vbgotCSBhbmQJCSVnMSwgVFNUQVRFX0NXUCwgJWcxCi0JcmV0cnkKLXdpbmRvd19tbmFfZnJvbV91c2VyX2NvbW1vbjoKLQl3cnByCQklZzEsICVjd3AKLQlzZXRoaQkJJWhpKDEwOWYpLCAlZzcKLQliYSxwdAkJJXhjYywgZXRyYXAKLTEwOToJIG9yCQklZzcsICVsbygxMDliKSwgJWc3Ci0JbW92CQklbDQsICVvMgotCW1vdgkJJWw1LCAlbzEKLQljYWxsCQltZW1fYWRkcmVzc191bmFsaWduZWQKLQkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMAotCWJhLHB0CQkleGNjLCBydHJhcAotCSBjbHIJCSVsNgotCQotCS8qIFRoZXNlIGFyZSBvbmx5IG5lZWRlZCBmb3IgNjQtYml0IG1vZGUgcHJvY2Vzc2VzIHdoaWNoCi0JICogcHV0IHRoZWlyIHN0YWNrIHBvaW50ZXIgaW50byB0aGUgVlBURSBhcmVhIGFuZCB0aGVyZQotCSAqIGhhcHBlbnMgdG8gYmUgYSBWUFRFIHRsYiBlbnRyeSBtYXBwZWQgdGhlcmUgZHVyaW5nCi0JICogYSBzcGlsbC9maWxsIHRyYXAgdG8gdGhhdCBzdGFjayBmcmFtZS4KLQkgKi8KLQkuZ2xvYmwJCXdpbmZpeF9kYXgsIGZpbGxfZml4dXBfZGF4LCBzcGlsbF9maXh1cF9kYXgKLXdpbmZpeF9kYXg6Ci0JYW5kbgkJJWczLCAweDdmLCAlZzMKLQlhZGQJCSVnMywgMHg3NCwgJWczCi0Jd3JwcgkJJWczLCAldG5wYwotCWRvbmUKLWZpbGxfZml4dXBfZGF4OgotCXJkcHIJCSV0c3RhdGUsICVnMQotCWFuZGNjCQklZzEsIFRTVEFURV9QUklWLCAlZzAKLQliZSxwdAkJJXhjYywgd2luZG93X2RheF9mcm9tX3VzZXJfY29tbW9uCi0JIGFuZAkJJWcxLCBUU1RBVEVfQ1dQLCAlZzEKLQotCS8qIFBsZWFzZSwgc2VlIGZpbGxfZml4dXAgY29tbWVudGFyeSBhYm91dCB3aHkgd2UgbXVzdCBwcmVzZXJ2ZQotCSAqICVsNSBhbmQgJWw2IHRvIHByZXNlcnZlIGFic29sdXRlIGNvcnJlY3Qgc2VtYW50aWNzLgotCSAqLwotCXJkcHIJCSV3c3RhdGUsICVnMgkJCSEgR3JhYiB1c2VyIG1vZGUgd3N0YXRlLgotCXdycHIJCSVnMSwgJWN3cAkJCSEgR2V0IGludG8gdGhlIHJpZ2h0IHdpbmRvdy4KLQlzbGwJCSVnMiwgMywgJWcyCQkJISBOT1JNQUwtLT5PVEhFUgotCXdycHIJCSVnMCwgMHgwLCAlY2FucmVzdG9yZQkJISBTdGFuZGFyZCBldHJhcCBzdHVmZi4KLQotCXdycHIJCSVnMiwgMHgwLCAld3N0YXRlCQkhIFRoaXMgbXVzdCBiZSBjb25zaXN0ZW50LgotCXdycHIJCSVnMCwgMHgwLCAlb3RoZXJ3aW4JCSEgV2Uga25vdyB0aGlzLgotCWNhbGwJCXNldF9wY29udGV4dAkJCSEgQ2hhbmdlIGNvbnRleHRzLi4uCi0JIG5vcAotCXJkcHIJCSVwc3RhdGUsICVsMQkJCSEgUHJlcGFyZSB0byBjaGFuZ2UgZ2xvYmFscy4KLQltb3YJCSVnNCwgJW8xCQkJISBTZXR1cCBhcmdzIGZvcgotCW1vdgkJJWc1LCAlbzIJCQkhIGZpbmFsIGNhbGwgdG8gc3BpdGZpcmVfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uLgotCWFuZG4JCSVsMSwgUFNUQVRFX01NLCAlbDEJCSEgV2Ugd2FudCB0byBiZSBpbiBSTU8KLQotCW1vdgkJJWc2LCAlbzcJCQkhIFN0YXNoIGF3YXkgY3VycmVudC4KLQl3cnByCQklZzAsIDB4MCwgJXRsCQkJISBPdXQgb2YgdHJhcCBsZXZlbHMuCi0Jd3JwcgkJJWwxLCAoUFNUQVRFX0lFIHwgUFNUQVRFX0FHIHwgUFNUQVRFX1JNTyksICVwc3RhdGUKLQltb3YJCSVvNywgJWc2CQkJISBHZXQgY3VycmVudCBiYWNrLgotCWxkeAkJWyVnNiArIFRJX1RBU0tdLCAlZzQJCSEgRmluaXNoIGl0LgotI2lmZGVmIENPTkZJR19TTVAKLQltb3YJCVRTQl9SRUcsICVnMQotCWxkeGEJCVslZzFdIEFTSV9JTU1VLCAlZzUKLSNlbmRpZgotCWNhbGwJCXNwaXRmaXJlX2RhdGFfYWNjZXNzX2V4Y2VwdGlvbgotCSBhZGQJCSVzcCwgUFRSRUdTX09GRiwgJW8wCi0KLQliLHB0CQkleGNjLCBydHJhcAotCSBub3AJCQkJCQkhIHllcywgdGhlIG5vcCBpcyBjb3JyZWN0CiBzcGlsbF9maXh1cF9kYXg6Ci0JbGR4CQlbJWc2ICsgVElfRkxBR1NdLCAlZzEKLQlhbmRjYwkJJWcxLCBfVElGXzMyQklULCAlZzAKLQlsZHViCQlbJWc2ICsgVElfV1NBVkVEXSwgJWcxCi0Jc2xsCQklZzEsIDMsICVnMwotCWFkZAkJJWc2LCAlZzMsICVnMwotCXN0eAkJJXNwLCBbJWczICsgVElfUldJTl9TUFRSU10KLQotCXNsbAkJJWcxLCA3LCAlZzMKLQlibmUscHQJCSV4Y2MsIDFmCi0JIGFkZAkJJWc2LCAlZzMsICVnMwotCXN0eAkJJWwwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDBdCi0Jc3R4CQklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwOF0KLQlzdHgJCSVsMiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDEwXQotCXN0eAkJJWwzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MThdCi0Jc3R4CQklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyMF0KLQotCXN0eAkJJWw1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjhdCi0Jc3R4CQklbDYsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzMF0KLQlzdHgJCSVsNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDM4XQotCXN0eAkJJWkwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NDBdCi0Jc3R4CQklaTEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg0OF0KLQlzdHgJCSVpMiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDUwXQotCXN0eAkJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NThdCi0Jc3R4CQklaTQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg2MF0KLQotCXN0eAkJJWk1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NjhdCi0Jc3R4CQklaTYsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg3MF0KLQlzdHgJCSVpNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDc4XQotCWIscHQJCSV4Y2MsIDJmCi0JIGFkZAkJJWcxLCAxLCAlZzEKLTE6CXN0ZAkJJWwwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDBdCi0Jc3RkCQklbDIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwOF0KLQlzdGQJCSVsNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDEwXQotCi0Jc3RkCQklbDYsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxOF0KLQlzdGQJCSVpMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDIwXQotCXN0ZAkJJWkyLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjhdCi0Jc3RkCQklaTQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzMF0KLQlzdGQJCSVpNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDM4XQotCWFkZAkJJWcxLCAxLCAlZzEKLTI6CXN0YgkJJWcxLCBbJWc2ICsgVElfV1NBVkVEXQotCXJkcHIJCSV0c3RhdGUsICVnMQotCi0JYW5kY2MJCSVnMSwgVFNUQVRFX1BSSVYsICVnMAorCVRSQVBfTE9BRF9USFJFQURfUkVHKCVnNiwgJWcxKQorCWxkeAlbJWc2ICsgVElfRkxBR1NdLCAlZzEKKwlhbmRjYwklZzEsIF9USUZfMzJCSVQsICVnMAorCWxkdWIJWyVnNiArIFRJX1dTQVZFRF0sICVnMQorCXNsbAklZzEsIDMsICVnMworCWFkZAklZzYsICVnMywgJWczCisJc3R4CSVzcCwgWyVnMyArIFRJX1JXSU5fU1BUUlNdCisJc2xsCSVnMSwgNywgJWczCisJYm5lLHB0CSV4Y2MsIDFmCisJIGFkZAklZzYsICVnMywgJWczCisJc3R4CSVsMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDAwXQorCXN0eAklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwOF0KKwlzdHgJJWwyLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MTBdCisJc3R4CSVsMywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDE4XQorCXN0eAklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyMF0KKwlzdHgJJWw1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjhdCisJc3R4CSVsNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDMwXQorCXN0eAklbDcsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzOF0KKwlzdHgJJWkwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NDBdCisJc3R4CSVpMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDQ4XQorCXN0eAklaTIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg1MF0KKwlzdHgJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NThdCisJc3R4CSVpNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDYwXQorCXN0eAklaTUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg2OF0KKwlzdHgJJWk2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NzBdCisJYmEscHQJJXhjYywgMmYKKwkgc3R4CSVpNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDc4XQorMToJc3R3CSVsMCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDAwXQorCXN0dwklbDEsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwNF0KKwlzdHcJJWwyLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDhdCisJc3R3CSVsMywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDBjXQorCXN0dwklbDQsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxMF0KKwlzdHcJJWw1LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MTRdCisJc3R3CSVsNiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDE4XQorCXN0dwklbDcsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxY10KKwlzdHcJJWkwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjBdCisJc3R3CSVpMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDI0XQorCXN0dwklaTIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyOF0KKwlzdHcJJWkzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MmNdCisJc3R3CSVpNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDMwXQorCXN0dwklaTUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzNF0KKwlzdHcJJWk2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MzhdCisJc3R3CSVpNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDNjXQorMjoJYWRkCSVnMSwgMSwgJWcxCisJc3RiCSVnMSwgWyVnNiArIFRJX1dTQVZFRF0KKwlyZHByCSV0c3RhdGUsICVnMQorCWFuZGNjCSVnMSwgVFNUQVRFX1BSSVYsICVnMAogCXNhdmVkCi0JYmUscG4JCSV4Y2MsIHdpbmRvd19kYXhfZnJvbV91c2VyX2NvbW1vbgotCSBhbmQJCSVnMSwgVFNUQVRFX0NXUCwgJWcxCisJYmUscG4JJXhjYywgMWYKKwkgYW5kCSVnMSwgVFNUQVRFX0NXUCwgJWcxCiAJcmV0cnkKLXdpbmRvd19kYXhfZnJvbV91c2VyX2NvbW1vbjoKLQl3cnByCQklZzEsICVjd3AKLQlzZXRoaQkJJWhpKDEwOWYpLCAlZzcKLQliYSxwdAkJJXhjYywgZXRyYXAKLTEwOToJIG9yCQklZzcsICVsbygxMDliKSwgJWc3Ci0JbW92CQklbDQsICVvMQotCW1vdgkJJWw1LCAlbzIKLQljYWxsCQlzcGl0ZmlyZV9kYXRhX2FjY2Vzc19leGNlcHRpb24KLQkgYWRkCQklc3AsIFBUUkVHU19PRkYsICVvMAotCWJhLHB0CQkleGNjLCBydHJhcAotCSBjbHIJCSVsNgorMToJbW92CUZBVUxUX0NPREVfV1JJVEUgfCBGQVVMVF9DT0RFX0RUTEIgfCBGQVVMVF9DT0RFX1dJTkZJWFVQLCAlZzQKKwlzdGIJJWc0LCBbJWc2ICsgVElfRkFVTFRfQ09ERV0KKwlzdHgJJWc1LCBbJWc2ICsgVElfRkFVTFRfQUREUl0KKwl3cnByCSVnMSwgJWN3cAorCWJhLHB0CSV4Y2MsIGV0cmFwCisJIHJkCSVwYywgJWc3CisJY2FsbAlkb19zcGFyYzY0X2ZhdWx0CisJIGFkZAklc3AsIFBUUkVHU19PRkYsICVvMAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKK3dpbmZpeF9tbmE6CisJYW5kbgklZzMsIDB4N2YsICVnMworCWFkZAklZzMsIDB4NzgsICVnMworCXdycHIJJWczLCAldG5wYworCWRvbmUKKworZmlsbF9maXh1cF9tbmE6CisJcmRwcgkldHN0YXRlLCAlZzEKKwlhbmQJJWcxLCBUU1RBVEVfQ1dQLCAlZzEKKwl3cnByCSVnMSwgJWN3cAorCWJhLHB0CSV4Y2MsIGV0cmFwCisJIHJkCSVwYywgJWc3CisJc2V0aGkJJWhpKHRsYl90eXBlKSwgJWcxCisJbGR1dwlbJWcxICsgJWxvKHRsYl90eXBlKV0sICVnMQorCWNtcAklZzEsIDMKKwlibmUscHQJJWljYywgMWYKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wCisJbW92CSVsNCwgJW8yCisJY2FsbAlzdW40dl9kb19tbmEKKwkgbW92CSVsNSwgJW8xCisJYmEsYSxwdAkleGNjLCBydHJhcF9jbHJfbDYKKzE6CW1vdgklbDQsICVvMQorCW1vdgklbDUsICVvMgorCWNhbGwJbWVtX2FkZHJlc3NfdW5hbGlnbmVkCisJIG5vcAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CisKK3dpbmZpeF9kYXg6CisJYW5kbgklZzMsIDB4N2YsICVnMworCWFkZAklZzMsIDB4NzQsICVnMworCXdycHIJJWczLCAldG5wYworCWRvbmUKKworZmlsbF9maXh1cF9kYXg6CisJcmRwcgkldHN0YXRlLCAlZzEKKwlhbmQJJWcxLCBUU1RBVEVfQ1dQLCAlZzEKKwl3cnByCSVnMSwgJWN3cAorCWJhLHB0CSV4Y2MsIGV0cmFwCisJIHJkCSVwYywgJWc3CisJc2V0aGkJJWhpKHRsYl90eXBlKSwgJWcxCisJbW92CSVsNCwgJW8xCisJbGR1dwlbJWcxICsgJWxvKHRsYl90eXBlKV0sICVnMQorCW1vdgklbDUsICVvMgorCWNtcAklZzEsIDMKKwlibmUscHQJJWljYywgMWYKKwkgYWRkCSVzcCwgUFRSRUdTX09GRiwgJW8wCisJY2FsbAlzdW40dl9kYXRhX2FjY2Vzc19leGNlcHRpb24KKwkgbm9wCisJYmEsYSxwdAkleGNjLCBydHJhcF9jbHJfbDYKKzE6CWNhbGwJc3BpdGZpcmVfZGF0YV9hY2Nlc3NfZXhjZXB0aW9uCisJIG5vcAorCWJhLGEscHQJJXhjYywgcnRyYXBfY2xyX2w2CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L2xpYi9NYWtlZmlsZQppbmRleCBjMjk1ODA2Li44ODEyZGVkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvTWFrZWZpbGUKQEAgLTExLDYgKzExLDggQEAKIAkgVklTc2F2ZS5vIGF0b21pYy5vIGJpdG9wcy5vIFwKIAkgVTFtZW1jcHkubyBVMWNvcHlfZnJvbV91c2VyLm8gVTFjb3B5X3RvX3VzZXIubyBcCiAJIFUzbWVtY3B5Lm8gVTNjb3B5X2Zyb21fdXNlci5vIFUzY29weV90b191c2VyLm8gVTNwYXRjaC5vIFwKKwkgTkdtZW1jcHkubyBOR2NvcHlfZnJvbV91c2VyLm8gTkdjb3B5X3RvX3VzZXIubyBOR3BhdGNoLm8gXAorCSBOR3BhZ2UubyBOR2J6ZXJvLm8gXAogCSBjb3B5X2luX3VzZXIubyB1c2VyX2ZpeHVwLm8gbWVtbW92ZS5vIFwKIAkgbWNvdW50Lm8gaXBjc3VtLm8gcndzZW0ubyB4b3IubyBmaW5kX2JpdC5vIGRlbGF5Lm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9OR2J6ZXJvLlMgYi9hcmNoL3NwYXJjNjQvbGliL05HYnplcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODZiYWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9OR2J6ZXJvLlMKQEAgLTAsMCArMSwxNjMgQEAKKy8qIE5HYnplcm8uUzogTmlhZ2FyYSBvcHRpbWl6ZWQgbWVtc2V0L2NsZWFyX3VzZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKKyAqLworI2luY2x1ZGUgPGFzbS9hc2kuaD4KKworI2RlZmluZSBFWF9TVCh4LHkpCQlcCis5ODoJeCx5OwkJCVwKKwkuc2VjdGlvbiAuZml4dXA7CVwKKwkuYWxpZ24gNDsJCVwKKzk5OglyZXRsOwkJCVwKKwkgbW92CSVvMSwgJW8wOwlcCisJLnNlY3Rpb24gX19leF90YWJsZTsJXAorCS5hbGlnbiA0OwkJXAorCS53b3JkIDk4YiwgOTliOwkJXAorCS50ZXh0OwkJCVwKKwkuYWxpZ24gNDsKKworCS50ZXh0CisKKwkuZ2xvYmwJCU5HbWVtc2V0CisJLnR5cGUJCU5HbWVtc2V0LCAjZnVuY3Rpb24KK05HbWVtc2V0OgkJLyogJW8wPWJ1ZiwgJW8xPXBhdCwgJW8yPWxlbiAqLworCWFuZAkJJW8xLCAweGZmLCAlbzMKKwltb3YJCSVvMiwgJW8xCisJc2xseAkJJW8zLCA4LCAlZzEKKwlvcgkJJWcxLCAlbzMsICVvMgorCXNsbHgJCSVvMiwgMTYsICVnMQorCW9yCQklZzEsICVvMiwgJW8yCisJc2xseAkJJW8yLCAzMiwgJWcxCisJYmEscHQJCSV4Y2MsIDFmCisJIG9yCQklZzEsICVvMiwgJW8yCisKKwkuZ2xvYmwJCU5HYnplcm8KKwkudHlwZQkJTkdiemVybywgI2Z1bmN0aW9uCitOR2J6ZXJvOgorCWNscgkJJW8yCisxOglicnoscG4JCSVvMSwgTkdiemVyb19yZXR1cm4KKwkgbW92CQklbzAsICVvMworCisJLyogJW81OiBzYXZlZCAlYXNpLCByZXN0b3JlZCBhdCBOR2J6ZXJvX2RvbmUKKwkgKiAlZzc6IHN0b3JlLWluaXQgJWFzaSB0byB1c2UKKwkgKiAlbzQ6CW5vbi1zdG9yZS1pbml0ICVhc2kgdG8gdXNlCisJICovCisJcmQJCSVhc2ksICVvNQorCW1vdgkJQVNJX0JMS19JTklUX1FVQURfTEREX1AsICVnNworCW1vdgkJQVNJX1AsICVvNAorCXdyCQklbzQsIDB4MCwgJWFzaQorCitOR2J6ZXJvX2Zyb21fY2xlYXJfdXNlcjoKKwljbXAJCSVvMSwgMTUKKwlibCxwbgkJJWljYywgTkdiemVyb190aW55CisJIGFuZGNjCQklbzAsIDB4NywgJWcxCisJYmUscHQJCSV4Y2MsIDJmCisJIG1vdgkJOCwgJWcyCisJc3ViCQklZzIsICVnMSwgJWcxCisJc3ViCQklbzEsICVnMSwgJW8xCisxOglFWF9TVChzdGJhICVvMiwgWyVvMCArIDB4MDBdICVhc2kpCisJc3ViY2MJCSVnMSwgMSwgJWcxCisJYm5lLHB0CQkleGNjLCAxYgorCSBhZGQJCSVvMCwgMSwgJW8wCisyOgljbXAJCSVvMSwgMTI4CisJYmwscG4JCSVpY2MsIE5HYnplcm9fbWVkaXVtCisJIGFuZGNjCQklbzAsICg2NCAtIDEpLCAlZzEKKwliZSxwdAkJJXhjYywgTkdiemVyb19wcmVfbG9vcAorCSBtb3YJCTY0LCAlZzIKKwlzdWIJCSVnMiwgJWcxLCAlZzEKKwlzdWIJCSVvMSwgJWcxLCAlbzEKKzE6CUVYX1NUKHN0eGEgJW8yLCBbJW8wICsgMHgwMF0gJWFzaSkKKwlzdWJjYwkJJWcxLCA4LCAlZzEKKwlibmUscHQJCSV4Y2MsIDFiCisJIGFkZAkJJW8wLCA4LCAlbzAKKworTkdiemVyb19wcmVfbG9vcDoKKwl3cgkJJWc3LCAweDAsICVhc2kKKwlhbmRuCQklbzEsICg2NCAtIDEpLCAlZzEKKwlzdWIJCSVvMSwgJWcxLCAlbzEKK05HYnplcm9fbG9vcDoKKwlFWF9TVChzdHhhICVvMiwgWyVvMCArIDB4MDBdICVhc2kpCisJRVhfU1Qoc3R4YSAlbzIsIFslbzAgKyAweDA4XSAlYXNpKQorCUVYX1NUKHN0eGEgJW8yLCBbJW8wICsgMHgxMF0gJWFzaSkKKwlFWF9TVChzdHhhICVvMiwgWyVvMCArIDB4MThdICVhc2kpCisJRVhfU1Qoc3R4YSAlbzIsIFslbzAgKyAweDIwXSAlYXNpKQorCUVYX1NUKHN0eGEgJW8yLCBbJW8wICsgMHgyOF0gJWFzaSkKKwlFWF9TVChzdHhhICVvMiwgWyVvMCArIDB4MzBdICVhc2kpCisJRVhfU1Qoc3R4YSAlbzIsIFslbzAgKyAweDM4XSAlYXNpKQorCXN1YmNjCQklZzEsIDY0LCAlZzEKKwlibmUscHQJCSV4Y2MsIE5HYnplcm9fbG9vcAorCSBhZGQJCSVvMCwgNjQsICVvMAorCisJd3IJCSVvNCwgMHgwLCAlYXNpCisJYnJ6LHBuCQklbzEsIE5HYnplcm9fZG9uZQorTkdiemVyb19tZWRpdW06CisJIGFuZG5jYwkJJW8xLCAweDcsICVnMQorCWJlLHBuCQkleGNjLCAyZgorCSBzdWIJCSVvMSwgJWcxLCAlbzEKKzE6CUVYX1NUKHN0eGEgJW8yLCBbJW8wICsgMHgwMF0gJWFzaSkKKwlzdWJjYwkJJWcxLCA4LCAlZzEKKwlibmUscHQJCSV4Y2MsIDFiCisJIGFkZAkJJW8wLCA4LCAlbzAKKzI6CWJyeixwdAkJJW8xLCBOR2J6ZXJvX2RvbmUKKwkgbm9wCisKK05HYnplcm9fdGlueToKKzE6CUVYX1NUKHN0YmEgJW8yLCBbJW8wICsgMHgwMF0gJWFzaSkKKwlzdWJjYwkJJW8xLCAxLCAlbzEKKwlibmUscHQJCSVpY2MsIDFiCisJIGFkZAkJJW8wLCAxLCAlbzAKKworCS8qIGZhbGx0aHJvdWdoICovCisKK05HYnplcm9fZG9uZToKKwl3cgkJJW81LCAweDAsICVhc2kKKworTkdiemVyb19yZXR1cm46CisJcmV0bAorCSBtb3YJCSVvMywgJW8wCisJLnNpemUJCU5HYnplcm8sIC4tTkdiemVybworCS5zaXplCQlOR21lbXNldCwgLi1OR21lbXNldAorCisJLmdsb2JsCQlOR2NsZWFyX3VzZXIKKwkudHlwZQkJTkdjbGVhcl91c2VyLCAjZnVuY3Rpb24KK05HY2xlYXJfdXNlcjoJCS8qICVvMD1idWYsICVvMT1sZW4gKi8KKwlyZAkJJWFzaSwgJW81CisJYnJ6LHBuCQklbzEsIE5HYnplcm9fZG9uZQorCSBjbHIJCSVvMworCWNtcAkJJW81LCBBU0lfQUlVUworCWJuZSxwbgkJJWljYywgTkdiemVybworCSBjbHIJCSVvMgorCW1vdgkJQVNJX0JMS19JTklUX1FVQURfTEREX0FJVVMsICVnNworCWJhLHB0CQkleGNjLCBOR2J6ZXJvX2Zyb21fY2xlYXJfdXNlcgorCSBtb3YJCUFTSV9BSVVTLCAlbzQKKwkuc2l6ZQkJTkdjbGVhcl91c2VyLCAuLU5HY2xlYXJfdXNlcgorCisjZGVmaW5lIEJSQU5DSF9BTFdBWVMJMHgxMDY4MDAwMAorI2RlZmluZSBOT1AJCTB4MDEwMDAwMDAKKyNkZWZpbmUgTkdfRE9fUEFUQ0goT0xELCBORVcpCVwKKwlzZXRoaQklaGkoTkVXKSwgJWcxOyBcCisJb3IJJWcxLCAlbG8oTkVXKSwgJWcxOyBcCisJc2V0aGkJJWhpKE9MRCksICVnMjsgXAorCW9yCSVnMiwgJWxvKE9MRCksICVnMjsgXAorCXN1YgklZzEsICVnMiwgJWcxOyBcCisJc2V0aGkJJWhpKEJSQU5DSF9BTFdBWVMpLCAlZzM7IFwKKwlzbGwJJWcxLCAxMSwgJWcxOyBcCisJc3JsCSVnMSwgMTEgKyAyLCAlZzE7IFwKKwlvcgklZzMsICVsbyhCUkFOQ0hfQUxXQVlTKSwgJWczOyBcCisJb3IJJWczLCAlZzEsICVnMzsgXAorCXN0dwklZzMsIFslZzJdOyBcCisJc2V0aGkJJWhpKE5PUCksICVnMzsgXAorCW9yCSVnMywgJWxvKE5PUCksICVnMzsgXAorCXN0dwklZzMsIFslZzIgKyAweDRdOyBcCisJZmx1c2gJJWcyOworCisJLmdsb2JsCW5pYWdhcmFfcGF0Y2hfYnplcm8KKwkudHlwZQluaWFnYXJhX3BhdGNoX2J6ZXJvLCNmdW5jdGlvbgorbmlhZ2FyYV9wYXRjaF9iemVybzoKKwlOR19ET19QQVRDSChtZW1zZXQsIE5HbWVtc2V0KQorCU5HX0RPX1BBVENIKF9fYnplcm8sIE5HYnplcm8pCisJTkdfRE9fUEFUQ0goX19jbGVhcl91c2VyLCBOR2NsZWFyX3VzZXIpCisJTkdfRE9fUEFUQ0godHNiX2luaXQsIE5HdHNiX2luaXQpCisJcmV0bAorCSBub3AKKwkuc2l6ZQluaWFnYXJhX3BhdGNoX2J6ZXJvLC4tbmlhZ2FyYV9wYXRjaF9iemVybwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9OR2NvcHlfZnJvbV91c2VyLlMgYi9hcmNoL3NwYXJjNjQvbGliL05HY29weV9mcm9tX3VzZXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDkzNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9OR2NvcHlfZnJvbV91c2VyLlMKQEAgLTAsMCArMSwzNyBAQAorLyogTkdjb3B5X2Zyb21fdXNlci5TOiBOaWFnYXJhIG9wdGltaXplZCBjb3B5IGZyb20gdXNlcnNwYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2RlZmluZSBFWF9MRCh4KQkJXAorOTg6CXg7CQkJXAorCS5zZWN0aW9uIC5maXh1cDsJXAorCS5hbGlnbiA0OwkJXAorOTk6CXdyCSVnMCwgQVNJX0FJVVMsICVhc2k7XAorCXJldGw7CQkJXAorCSBtb3YJMSwgJW8wOwkJXAorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiO1wKKwkuYWxpZ24gNDsJCVwKKwkud29yZCA5OGIsIDk5YjsJCVwKKwkudGV4dDsJCQlcCisJLmFsaWduIDQ7CisKKyNpZm5kZWYgQVNJX0FJVVMKKyNkZWZpbmUgQVNJX0FJVVMJMHgxMQorI2VuZGlmCisKKyNkZWZpbmUgRlVOQ19OQU1FCQlOR2NvcHlfZnJvbV91c2VyCisjZGVmaW5lIExPQUQodHlwZSxhZGRyLGRlc3QpCXR5cGUjI2EgW2FkZHJdIEFTSV9BSVVTLCBkZXN0CisjZGVmaW5lIExPQURfVFdJTihhZGRyX3JlZyxkZXN0MCxkZXN0MSkJXAorCWxkZGEgW2FkZHJfcmVnXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfQUlVUywgZGVzdDAKKyNkZWZpbmUgRVhfUkVUVkFMKHgpCQkwCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFBSRUFNQkxFCQkJCQlcCisJcmQJCSVhc2ksICVnMTsJCQlcCisJY21wCQklZzEsIEFTSV9BSVVTOwkJCVwKKwlibmUscG4JCSVpY2MsIG1lbWNweV91c2VyX3N0dWI7CQlcCisJIG5vcAorI2VuZGlmCisKKyNpbmNsdWRlICJOR21lbWNweS5TIgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9OR2NvcHlfdG9fdXNlci5TIGIvYXJjaC9zcGFyYzY0L2xpYi9OR2NvcHlfdG9fdXNlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MTEyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjNjQvbGliL05HY29weV90b191c2VyLlMKQEAgLTAsMCArMSw0MCBAQAorLyogTkdjb3B5X3RvX3VzZXIuUzogTmlhZ2FyYSBvcHRpbWl6ZWQgY29weSB0byB1c2Vyc3BhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKKyAqLworCisjZGVmaW5lIEVYX1NUKHgpCQlcCis5ODoJeDsJCQlcCisJLnNlY3Rpb24gLmZpeHVwOwlcCisJLmFsaWduIDQ7CQlcCis5OToJd3IJJWcwLCBBU0lfQUlVUywgJWFzaTtcCisJcmV0bDsJCQlcCisJIG1vdgkxLCAlbzA7CQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAorCS5hbGlnbiA0OwkJXAorCS53b3JkIDk4YiwgOTliOwkJXAorCS50ZXh0OwkJCVwKKwkuYWxpZ24gNDsKKworI2lmbmRlZiBBU0lfQUlVUworI2RlZmluZSBBU0lfQUlVUwkweDExCisjZW5kaWYKKworI2RlZmluZSBGVU5DX05BTUUJCU5HY29weV90b191c2VyCisjZGVmaW5lIFNUT1JFKHR5cGUsc3JjLGFkZHIpCXR5cGUjI2Egc3JjLCBbYWRkcl0gQVNJX0FJVVMKKyNkZWZpbmUgU1RPUkVfQVNJCQlBU0lfQkxLX0lOSVRfUVVBRF9MRERfQUlVUworI2RlZmluZSBFWF9SRVRWQUwoeCkJCTAKKworI2lmZGVmIF9fS0VSTkVMX18KKwkvKiBXcml0aW5nIHRvICVhc2kgaXMgX2V4cGVuc2l2ZV8gc28gd2UgaGFyZGNvZGUgaXQuCisJICogUmVhZGluZyAlYXNpIHRvIGNoZWNrIGZvciBLRVJORUxfRFMgaXMgY29tcGFyYXRpdmVseQorCSAqIGNoZWFwLgorCSAqLworI2RlZmluZSBQUkVBTUJMRQkJCQkJXAorCXJkCQklYXNpLCAlZzE7CQkJXAorCWNtcAkJJWcxLCBBU0lfQUlVUzsJCQlcCisJYm5lLHBuCQklaWNjLCBtZW1jcHlfdXNlcl9zdHViOwkJXAorCSBub3AKKyNlbmRpZgorCisjaW5jbHVkZSAiTkdtZW1jcHkuUyIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvTkdtZW1jcHkuUyBiL2FyY2gvc3BhcmM2NC9saWIvTkdtZW1jcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTUyMmIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9OR21lbWNweS5TCkBAIC0wLDAgKzEsMzY4IEBACisvKiBOR21lbWNweS5TOiBOaWFnYXJhIG9wdGltaXplZCBtZW1jcHkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKKyAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNkZWZpbmUgR0xPQkFMX1NQQVJFCSVnNworI2RlZmluZSBSRVNUT1JFX0FTSShUTVApCVwKKwlsZHViCVslZzYgKyBUSV9DVVJSRU5UX0RTXSwgVE1QOyAgXAorCXdyCVRNUCwgMHgwLCAlYXNpOworI2Vsc2UKKyNkZWZpbmUgR0xPQkFMX1NQQVJFCSVnNQorI2RlZmluZSBSRVNUT1JFX0FTSShUTVApCVwKKwl3cgklZzAsIEFTSV9QTkYsICVhc2kKKyNlbmRpZgorCisjaWZuZGVmIFNUT1JFX0FTSQorI2RlZmluZSBTVE9SRV9BU0kJQVNJX0JMS19JTklUX1FVQURfTEREX1AKKyNlbmRpZgorCisjaWZuZGVmIEVYX0xECisjZGVmaW5lIEVYX0xEKHgpCXgKKyNlbmRpZgorCisjaWZuZGVmIEVYX1NUCisjZGVmaW5lIEVYX1NUKHgpCXgKKyNlbmRpZgorCisjaWZuZGVmIEVYX1JFVFZBTAorI2RlZmluZSBFWF9SRVRWQUwoeCkJeAorI2VuZGlmCisKKyNpZm5kZWYgTE9BRAorI2lmbmRlZiBNRU1DUFlfREVCVUcKKyNkZWZpbmUgTE9BRCh0eXBlLGFkZHIsZGVzdCkJdHlwZSBbYWRkcl0sIGRlc3QKKyNlbHNlCisjZGVmaW5lIExPQUQodHlwZSxhZGRyLGRlc3QpCXR5cGUjI2EgW2FkZHJdIDB4ODAsIGRlc3QKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTE9BRF9UV0lOCisjZGVmaW5lIExPQURfVFdJTihhZGRyX3JlZyxkZXN0MCxkZXN0MSkJXAorCWxkZGEgW2FkZHJfcmVnXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUCwgZGVzdDAKKyNlbmRpZgorCisjaWZuZGVmIFNUT1JFCisjZGVmaW5lIFNUT1JFKHR5cGUsc3JjLGFkZHIpCXR5cGUgc3JjLCBbYWRkcl0KKyNlbmRpZgorCisjaWZuZGVmIFNUT1JFX0lOSVQKKyNkZWZpbmUgU1RPUkVfSU5JVChzcmMsYWRkcikJc3R4YSBzcmMsIFthZGRyXSAlYXNpCisjZW5kaWYKKworI2lmbmRlZiBGVU5DX05BTUUKKyNkZWZpbmUgRlVOQ19OQU1FCU5HbWVtY3B5CisjZW5kaWYKKworI2lmbmRlZiBQUkVBTUJMRQorI2RlZmluZSBQUkVBTUJMRQorI2VuZGlmCisKKyNpZm5kZWYgWENDCisjZGVmaW5lIFhDQyB4Y2MKKyNlbmRpZgorCisJLnJlZ2lzdGVyCSVnMiwjc2NyYXRjaAorCS5yZWdpc3RlcgklZzMsI3NjcmF0Y2gKKworCS50ZXh0CisJLmFsaWduCQk2NAorCisJLmdsb2JsCUZVTkNfTkFNRQorCS50eXBlCUZVTkNfTkFNRSwjZnVuY3Rpb24KK0ZVTkNfTkFNRToJLyogJW8wPWRzdCwgJW8xPXNyYywgJW8yPWxlbiAqLworCXNybHgJCSVvMiwgMzEsICVnMgorCWNtcAkJJWcyLCAwCisJdG5lCQkleGNjLCA1CisJUFJFQU1CTEUKKwltb3YJCSVvMCwgR0xPQkFMX1NQQVJFCisJY21wCQklbzIsIDAKKwliZSxwbgkJJVhDQywgODVmCisJIG9yCQklbzAsICVvMSwgJW8zCisJY21wCQklbzIsIDE2CisJYmx1LGEscG4JJVhDQywgODBmCisJIG9yCQklbzMsICVvMiwgJW8zCisKKwkvKiAyIGJsb2NrcyAoMTI4IGJ5dGVzKSBpcyB0aGUgbWluaW11bSB3ZSBjYW4gZG8gdGhlIGJsb2NrCisJICogY29weSB3aXRoLiAgV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSdsbCBpdGVyYXRlIGF0IGxlYXN0CisJICogb25jZSBpbiB0aGUgYmxvY2sgY29weSBsb29wLiAgQXQgd29yc3Qgd2UnbGwgbmVlZCB0byBhbGlnbgorCSAqIHRoZSBkZXN0aW5hdGlvbiB0byBhIDY0LWJ5dGUgYm91bmRhcnkgd2hpY2ggY2FuIGNoZXcgdXAKKwkgKiB0byAoNjQgLSAxKSBieXRlcyBmcm9tIHRoZSBsZW5ndGggYmVmb3JlIHdlIHBlcmZvcm0gdGhlCisJICogYmxvY2sgY29weSBsb29wLgorCSAqLworCWNtcAkJJW8yLCAoMiAqIDY0KQorCWJsdSxwdAkJJVhDQywgNzBmCisJIGFuZGNjCQklbzMsIDB4NywgJWcwCisKKwkvKiAlbzA6CWRzdAorCSAqICVvMToJc3JjCisJICogJW8yOglsZW4gIChrbm93biB0byBiZSA+PSAxMjgpCisJICoKKwkgKiBUaGUgYmxvY2sgY29weSBsb29wcyB3aWxsIHVzZSAlbzQvJW81LCVnMi8lZzMgYXMKKwkgKiB0ZW1wb3JhcmllcyB3aGlsZSBjb3B5aW5nIHRoZSBkYXRhLgorCSAqLworCisJTE9BRChwcmVmZXRjaCwgJW8xLCAjb25lX3JlYWQpCisJd3IJCSVnMCwgU1RPUkVfQVNJLCAlYXNpCisKKwkvKiBBbGlnbiBkZXN0aW5hdGlvbiBvbiA2NC1ieXRlIGJvdW5kYXJ5LiAgKi8KKwlhbmRjYwkJJW8wLCAoNjQgLSAxKSwgJW80CisJYmUscHQJCSVYQ0MsIDJmCisJIHN1YgkJJW80LCA2NCwgJW80CisJc3ViCQklZzAsICVvNCwgJW80CSEgYnl0ZXMgdG8gYWxpZ24gZHN0CisJc3ViCQklbzIsICVvNCwgJW8yCisxOglzdWJjYwkJJW80LCAxLCAlbzQKKwlFWF9MRChMT0FEKGxkdWIsICVvMSwgJWcxKSkKKwlFWF9TVChTVE9SRShzdGIsICVnMSwgJW8wKSkKKwlhZGQJCSVvMSwgMSwgJW8xCisJYm5lLHB0CQklWENDLCAxYgorCWFkZAkJJW8wLCAxLCAlbzAKKworCS8qIElmIHRoZSBzb3VyY2UgaXMgb24gYSAxNi1ieXRlIGJvdW5kYXJ5IHdlIGNhbiBkbworCSAqIHRoZSBkaXJlY3QgYmxvY2sgY29weSBsb29wLiAgSWYgaXQgaXMgOC1ieXRlIGFsaWduZWQKKwkgKiB3ZSBjYW4gZG8gdGhlIDE2LWJ5dGUgbG9hZHMgb2Zmc2V0IGJ5IC04IGJ5dGVzIGFuZCB0aGUKKwkgKiBpbml0IHN0b3JlcyBvZmZzZXQgYnkgb25lIHJlZ2lzdGVyLgorCSAqCisJICogSWYgdGhlIHNvdXJjZSBpcyBub3QgZXZlbiA4LWJ5dGUgYWxpZ25lZCwgd2UgbmVlZCB0byBkbworCSAqIHNoaWZ0aW5nIGFuZCBtYXNraW5nIChiYXNpY2FsbHkgaW50ZWdlciBmYWxpZ25kYXRhKS4KKwkgKgorCSAqIFRoZSBjYXJlZnVsIGJpdCB3aXRoIGluaXQgc3RvcmVzIGlzIHRoYXQgaWYgd2Ugc3RvcmUKKwkgKiB0byBhbnkgcGFydCBvZiB0aGUgY2FjaGUgbGluZSB3ZSBoYXZlIHRvIHN0b3JlIHRoZSB3aG9sZQorCSAqIGNhY2hlbGluZSBlbHNlIHdlIGNhbiBlbmQgdXAgd2l0aCBjb3JydXB0IEwyIGNhY2hlIGxpbmUKKwkgKiBjb250ZW50cy4gIFNpbmNlIHRoZSBsb29wIHdvcmtzIG9uIDY0LWJ5dGVzIG9mIDY0LWJ5dGUKKwkgKiBhbGlnbmVkIHN0b3JlIGRhdGEgYXQgYSB0aW1lLCB0aGlzIGlzIGVhc3kgdG8gZW5zdXJlLgorCSAqLworMjoKKwlhbmRjYwkJJW8xLCAoMTYgLSAxKSwgJW80CisJYW5kbgkJJW8yLCAoNjQgLSAxKSwgJWcxCSEgYmxvY2sgY29weSBsb29wIGl0ZXJhdG9yCisJc3ViCQklbzIsICVnMSwgJW8yCQkhIGZpbmFsIHN1Yi1ibG9jayBjb3B5IGJ5dGVzCisJYmUscHQJCSVYQ0MsIDUwZgorCSBjbXAJCSVvNCwgOAorCWJlLGEscHQJCSVYQ0MsIDEwZgorCSBzdWIJCSVvMSwgMHg4LCAlbzEKKworCS8qIE5laXRoZXIgOC1ieXRlIG5vciAxNi1ieXRlIGFsaWduZWQsIHNoaWZ0IGFuZCBtYXNrLiAgKi8KKwltb3YJCSVnMSwgJW80CisJYW5kCQklbzEsIDB4NywgJWcxCisJc2xsCQklZzEsIDMsICVnMQorCW1vdgkJNjQsICVvMworCWFuZG4JCSVvMSwgMHg3LCAlbzEKKwlFWF9MRChMT0FEKGxkeCwgJW8xLCAlZzIpKQorCXN1YgkJJW8zLCAlZzEsICVvMworCXNsbHgJCSVnMiwgJWcxLCAlZzIKKworI2RlZmluZSBTV0lWRUxfT05FX0RXT1JEKFNSQywgVE1QMSwgVE1QMiwgUFJFX1ZBTCwgUFJFX1NISUZULCBQT1NUX1NISUZULCBEU1QpXAorCUVYX0xEKExPQUQobGR4LCBTUkMsIFRNUDEpKTsgXAorCXNybHgJCVRNUDEsIFBSRV9TSElGVCwgVE1QMjsgXAorCW9yCQlUTVAyLCBQUkVfVkFMLCBUTVAyOyBcCisJRVhfU1QoU1RPUkVfSU5JVChUTVAyLCBEU1QpKTsgXAorCXNsbHgJCVRNUDEsIFBPU1RfU0hJRlQsIFBSRV9WQUw7CisKKzE6CWFkZAkJJW8xLCAweDgsICVvMQorCVNXSVZFTF9PTkVfRFdPUkQoJW8xLCAlZzMsICVvNSwgJWcyLCAlbzMsICVnMSwgJW8wICsgMHgwMCkKKwlhZGQJCSVvMSwgMHg4LCAlbzEKKwlTV0lWRUxfT05FX0RXT1JEKCVvMSwgJWczLCAlbzUsICVnMiwgJW8zLCAlZzEsICVvMCArIDB4MDgpCisJYWRkCQklbzEsIDB4OCwgJW8xCisJU1dJVkVMX09ORV9EV09SRCglbzEsICVnMywgJW81LCAlZzIsICVvMywgJWcxLCAlbzAgKyAweDEwKQorCWFkZAkJJW8xLCAweDgsICVvMQorCVNXSVZFTF9PTkVfRFdPUkQoJW8xLCAlZzMsICVvNSwgJWcyLCAlbzMsICVnMSwgJW8wICsgMHgxOCkKKwlhZGQJCSVvMSwgMzIsICVvMQorCUxPQUQocHJlZmV0Y2gsICVvMSwgI29uZV9yZWFkKQorCXN1YgkJJW8xLCAzMiAtIDgsICVvMQorCVNXSVZFTF9PTkVfRFdPUkQoJW8xLCAlZzMsICVvNSwgJWcyLCAlbzMsICVnMSwgJW8wICsgMHgyMCkKKwlhZGQJCSVvMSwgOCwgJW8xCisJU1dJVkVMX09ORV9EV09SRCglbzEsICVnMywgJW81LCAlZzIsICVvMywgJWcxLCAlbzAgKyAweDI4KQorCWFkZAkJJW8xLCA4LCAlbzEKKwlTV0lWRUxfT05FX0RXT1JEKCVvMSwgJWczLCAlbzUsICVnMiwgJW8zLCAlZzEsICVvMCArIDB4MzApCisJYWRkCQklbzEsIDgsICVvMQorCVNXSVZFTF9PTkVfRFdPUkQoJW8xLCAlZzMsICVvNSwgJWcyLCAlbzMsICVnMSwgJW8wICsgMHgzOCkKKwlzdWJjYwkJJW80LCA2NCwgJW80CisJYm5lLHB0CQklWENDLCAxYgorCSBhZGQJCSVvMCwgNjQsICVvMAorCisjdW5kZWYgU1dJVkVMX09ORV9EV09SRAorCisJc3JsCQklZzEsIDMsICVnMQorCWJhLHB0CQklWENDLCA2MGYKKwkgYWRkCQklbzEsICVnMSwgJW8xCisKKzEwOgkvKiBEZXN0aW5hdGlvbiBpcyA2NC1ieXRlIGFsaWduZWQsIHNvdXJjZSB3YXMgb25seSA4LWJ5dGUKKwkgKiBhbGlnbmVkIGJ1dCBpdCBoYXMgYmVlbiBzdWJ0cmFjdGVkIGJ5IDggYW5kIHdlIHBlcmZvcm0KKwkgKiBvbmUgdHdpbiBsb2FkIGFoZWFkLCB0aGVuIGFkZCA4IGJhY2sgaW50byBzb3VyY2Ugd2hlbgorCSAqIHdlIGZpbmlzaCB0aGUgbG9vcC4KKwkgKi8KKwlFWF9MRChMT0FEX1RXSU4oJW8xLCAlbzQsICVvNSkpCisxOglhZGQJCSVvMSwgMTYsICVvMQorCUVYX0xEKExPQURfVFdJTiglbzEsICVnMiwgJWczKSkKKwlhZGQJCSVvMSwgMTYgKyAzMiwgJW8xCisJTE9BRChwcmVmZXRjaCwgJW8xLCAjb25lX3JlYWQpCisJc3ViCQklbzEsIDMyLCAlbzEKKwlFWF9TVChTVE9SRV9JTklUKCVvNSwgJW8wICsgMHgwMCkpCSEgaW5pdGlhbGl6ZXMgY2FjaGUgbGluZQorCUVYX1NUKFNUT1JFX0lOSVQoJWcyLCAlbzAgKyAweDA4KSkKKwlFWF9MRChMT0FEX1RXSU4oJW8xLCAlbzQsICVvNSkpCisJYWRkCQklbzEsIDE2LCAlbzEKKwlFWF9TVChTVE9SRV9JTklUKCVnMywgJW8wICsgMHgxMCkpCisJRVhfU1QoU1RPUkVfSU5JVCglbzQsICVvMCArIDB4MTgpKQorCUVYX0xEKExPQURfVFdJTiglbzEsICVnMiwgJWczKSkKKwlhZGQJCSVvMSwgMTYsICVvMQorCUVYX1NUKFNUT1JFX0lOSVQoJW81LCAlbzAgKyAweDIwKSkKKwlFWF9TVChTVE9SRV9JTklUKCVnMiwgJW8wICsgMHgyOCkpCisJRVhfTEQoTE9BRF9UV0lOKCVvMSwgJW80LCAlbzUpKQorCUVYX1NUKFNUT1JFX0lOSVQoJWczLCAlbzAgKyAweDMwKSkKKwlFWF9TVChTVE9SRV9JTklUKCVvNCwgJW8wICsgMHgzOCkpCisJc3ViY2MJCSVnMSwgNjQsICVnMQorCWJuZSxwdAkJJVhDQywgMWIKKwkgYWRkCQklbzAsIDY0LCAlbzAKKworCWJhLHB0CQklWENDLCA2MGYKKwkgYWRkCQklbzEsIDB4OCwgJW8xCisKKzUwOgkvKiBEZXN0aW5hdGlvbiBpcyA2NC1ieXRlIGFsaWduZWQsIGFuZCBzb3VyY2UgaXMgMTYtYnl0ZQorCSAqIGFsaWduZWQuCisJICovCisxOglFWF9MRChMT0FEX1RXSU4oJW8xLCAlbzQsICVvNSkpCisJYWRkCSVvMSwgMTYsICVvMQorCUVYX0xEKExPQURfVFdJTiglbzEsICVnMiwgJWczKSkKKwlhZGQJJW8xLCAxNiArIDMyLCAlbzEKKwlMT0FEKHByZWZldGNoLCAlbzEsICNvbmVfcmVhZCkKKwlzdWIJJW8xLCAzMiwgJW8xCisJRVhfU1QoU1RPUkVfSU5JVCglbzQsICVvMCArIDB4MDApKQkhIGluaXRpYWxpemVzIGNhY2hlIGxpbmUKKwlFWF9TVChTVE9SRV9JTklUKCVvNSwgJW8wICsgMHgwOCkpCisJRVhfTEQoTE9BRF9UV0lOKCVvMSwgJW80LCAlbzUpKQorCWFkZAklbzEsIDE2LCAlbzEKKwlFWF9TVChTVE9SRV9JTklUKCVnMiwgJW8wICsgMHgxMCkpCisJRVhfU1QoU1RPUkVfSU5JVCglZzMsICVvMCArIDB4MTgpKQorCUVYX0xEKExPQURfVFdJTiglbzEsICVnMiwgJWczKSkKKwlhZGQJJW8xLCAxNiwgJW8xCisJRVhfU1QoU1RPUkVfSU5JVCglbzQsICVvMCArIDB4MjApKQorCUVYX1NUKFNUT1JFX0lOSVQoJW81LCAlbzAgKyAweDI4KSkKKwlFWF9TVChTVE9SRV9JTklUKCVnMiwgJW8wICsgMHgzMCkpCisJRVhfU1QoU1RPUkVfSU5JVCglZzMsICVvMCArIDB4MzgpKQorCXN1YmNjCSVnMSwgNjQsICVnMQorCWJuZSxwdAklWENDLCAxYgorCSBhZGQJJW8wLCA2NCwgJW8wCisJLyogZmFsbCB0aHJvdWdoICovCisKKzYwOgkKKwkvKiAlbzIgY29udGFpbnMgYW55IGZpbmFsIGJ5dGVzIHN0aWxsIG5lZWRlZCB0byBiZSBjb3BpZWQKKwkgKiBvdmVyLiBJZiBhbnl0aGluZyBpcyBsZWZ0LCB3ZSBjb3B5IGl0IG9uZSBieXRlIGF0IGEgdGltZS4KKwkgKi8KKwlSRVNUT1JFX0FTSSglbzMpCisJYnJ6LHB0CQklbzIsIDg1ZgorCSBzdWIJCSVvMCwgJW8xLCAlbzMKKwliYSxhLHB0CQklWENDLCA5MGYKKworCS5hbGlnbgkJNjQKKzcwOiAvKiAxNiA8IGxlbiA8PSA2NCAqLworCWJuZSxwbgkJJVhDQywgNzVmCisJIHN1YgkJJW8wLCAlbzEsICVvMworCis3MjoKKwlhbmRuCQklbzIsIDB4ZiwgJW80CisJYW5kCQklbzIsIDB4ZiwgJW8yCisxOglzdWJjYwkJJW80LCAweDEwLCAlbzQKKwlFWF9MRChMT0FEKGxkeCwgJW8xLCAlbzUpKQorCWFkZAkJJW8xLCAweDA4LCAlbzEKKwlFWF9MRChMT0FEKGxkeCwgJW8xLCAlZzEpKQorCXN1YgkJJW8xLCAweDA4LCAlbzEKKwlFWF9TVChTVE9SRShzdHgsICVvNSwgJW8xICsgJW8zKSkKKwlhZGQJCSVvMSwgMHg4LCAlbzEKKwlFWF9TVChTVE9SRShzdHgsICVnMSwgJW8xICsgJW8zKSkKKwliZ3UscHQJCSVYQ0MsIDFiCisJIGFkZAkJJW8xLCAweDgsICVvMQorNzM6CWFuZGNjCQklbzIsIDB4OCwgJWcwCisJYmUscHQJCSVYQ0MsIDFmCisJIG5vcAorCXN1YgkJJW8yLCAweDgsICVvMgorCUVYX0xEKExPQUQobGR4LCAlbzEsICVvNSkpCisJRVhfU1QoU1RPUkUoc3R4LCAlbzUsICVvMSArICVvMykpCisJYWRkCQklbzEsIDB4OCwgJW8xCisxOglhbmRjYwkJJW8yLCAweDQsICVnMAorCWJlLHB0CQklWENDLCAxZgorCSBub3AKKwlzdWIJCSVvMiwgMHg0LCAlbzIKKwlFWF9MRChMT0FEKGxkdXcsICVvMSwgJW81KSkKKwlFWF9TVChTVE9SRShzdHcsICVvNSwgJW8xICsgJW8zKSkKKwlhZGQJCSVvMSwgMHg0LCAlbzEKKzE6CWNtcAkJJW8yLCAwCisJYmUscHQJCSVYQ0MsIDg1ZgorCSBub3AKKwliYSxwdAkJJXhjYywgOTBmCisJIG5vcAorCis3NToKKwlhbmRjYwkJJW8wLCAweDcsICVnMQorCXN1YgkJJWcxLCAweDgsICVnMQorCWJlLHBuCQklaWNjLCAyZgorCSBzdWIJCSVnMCwgJWcxLCAlZzEKKwlzdWIJCSVvMiwgJWcxLCAlbzIKKworMToJc3ViY2MJCSVnMSwgMSwgJWcxCisJRVhfTEQoTE9BRChsZHViLCAlbzEsICVvNSkpCisJRVhfU1QoU1RPUkUoc3RiLCAlbzUsICVvMSArICVvMykpCisJYmd1LHB0CQklaWNjLCAxYgorCSBhZGQJCSVvMSwgMSwgJW8xCisKKzI6CWFkZAkJJW8xLCAlbzMsICVvMAorCWFuZGNjCQklbzEsIDB4NywgJWcxCisJYm5lLHB0CQklaWNjLCA4ZgorCSBzbGwJCSVnMSwgMywgJWcxCisKKwljbXAJCSVvMiwgMTYKKwliZ2V1LHB0CQklaWNjLCA3MmIKKwkgbm9wCisJYmEsYSxwdAkJJXhjYywgNzNiCisKKzg6CW1vdgkJNjQsICVvMworCWFuZG4JCSVvMSwgMHg3LCAlbzEKKwlFWF9MRChMT0FEKGxkeCwgJW8xLCAlZzIpKQorCXN1YgkJJW8zLCAlZzEsICVvMworCWFuZG4JCSVvMiwgMHg3LCAlbzQKKwlzbGx4CQklZzIsICVnMSwgJWcyCisxOglhZGQJCSVvMSwgMHg4LCAlbzEKKwlFWF9MRChMT0FEKGxkeCwgJW8xLCAlZzMpKQorCXN1YmNjCQklbzQsIDB4OCwgJW80CisJc3JseAkJJWczLCAlbzMsICVvNQorCW9yCQklbzUsICVnMiwgJW81CisJRVhfU1QoU1RPUkUoc3R4LCAlbzUsICVvMCkpCisJYWRkCQklbzAsIDB4OCwgJW8wCisJYmd1LHB0CQklaWNjLCAxYgorCSBzbGx4CQklZzMsICVnMSwgJWcyCisKKwlzcmwJCSVnMSwgMywgJWcxCisJYW5kY2MJCSVvMiwgMHg3LCAlbzIKKwliZSxwbgkJJWljYywgODVmCisJIGFkZAkJJW8xLCAlZzEsICVvMQorCWJhLHB0CQkleGNjLCA5MGYKKwkgc3ViCQklbzAsICVvMSwgJW8zCisKKwkuYWxpZ24JCTY0Cis4MDogLyogMCA8IGxlbiA8PSAxNiAqLworCWFuZGNjCQklbzMsIDB4MywgJWcwCisJYm5lLHBuCQklWENDLCA5MGYKKwkgc3ViCQklbzAsICVvMSwgJW8zCisKKzE6CisJc3ViY2MJCSVvMiwgNCwgJW8yCisJRVhfTEQoTE9BRChsZHV3LCAlbzEsICVnMSkpCisJRVhfU1QoU1RPUkUoc3R3LCAlZzEsICVvMSArICVvMykpCisJYmd1LHB0CQklWENDLCAxYgorCSBhZGQJCSVvMSwgNCwgJW8xCisKKzg1OglyZXRsCisJIG1vdgkJRVhfUkVUVkFMKEdMT0JBTF9TUEFSRSksICVvMAorCisJLmFsaWduCQkzMgorOTA6CisJc3ViY2MJCSVvMiwgMSwgJW8yCisJRVhfTEQoTE9BRChsZHViLCAlbzEsICVnMSkpCisJRVhfU1QoU1RPUkUoc3RiLCAlZzEsICVvMSArICVvMykpCisJYmd1LHB0CQklWENDLCA5MGIKKwkgYWRkCQklbzEsIDEsICVvMQorCXJldGwKKwkgbW92CQlFWF9SRVRWQUwoR0xPQkFMX1NQQVJFKSwgJW8wCisKKwkuc2l6ZQkJRlVOQ19OQU1FLCAuLUZVTkNfTkFNRQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9OR3BhZ2UuUyBiL2FyY2gvc3BhcmM2NC9saWIvTkdwYWdlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3YzNiYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvTkdwYWdlLlMKQEAgLTAsMCArMSw5NiBAQAorLyogTkdwYWdlLlM6IE5pYWdhcmEgb3B0aW1pemUgY2xlYXIgYW5kIGNvcHkgcGFnZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCisgKi8KKworI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisJLnRleHQKKwkuYWxpZ24JMzIKKworCS8qIFRoaXMgaXMgaGVhdmlseSBzaW1wbGlmaWVkIGZyb20gdGhlIHN1bjR1IHZhcmlhbnRzCisJICogYmVjYXVzZSBOaWFnYXJhIGRvZXMgbm90IGhhdmUgYW55IEQtY2FjaGUgYWxpYXNpbmcgaXNzdWVzCisJICogYW5kIGFsc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgdGhlIEZQVSBpbiBvcmRlciB0byBpbXBsZW1lbnQKKwkgKiBhbiBvcHRpbWFsIHBhZ2UgY29weS9jbGVhci4KKwkgKi8KKworTkdjb3B5X3VzZXJfcGFnZToJLyogJW8wPWRlc3QsICVvMT1zcmMsICVvMj12YWRkciAqLworCXByZWZldGNoCVslbzEgKyAweDAwXSwgI29uZV9yZWFkCisJbW92CQk4LCAlZzEKKwltb3YJCTE2LCAlZzIKKwltb3YJCTI0LCAlZzMKKwlzZXQJCVBBR0VfU0laRSwgJWc3CisKKzE6CWxkZGEJCVslbzEgKyAlZzBdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QLCAlbzIKKwlsZGRhCQlbJW8xICsgJWcyXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUCwgJW80CisJcHJlZmV0Y2gJWyVvMSArIDB4NDBdLCAjb25lX3JlYWQKKwlhZGQJCSVvMSwgMzIsICVvMQorCXN0eGEJCSVvMiwgWyVvMCArICVnMF0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKKwlzdHhhCQklbzMsIFslbzAgKyAlZzFdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCisJbGRkYQkJWyVvMSArICVnMF0gQVNJX0JMS19JTklUX1FVQURfTEREX1AsICVvMgorCXN0eGEJCSVvNCwgWyVvMCArICVnMl0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKKwlzdHhhCQklbzUsIFslbzAgKyAlZzNdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCisJbGRkYQkJWyVvMSArICVnMl0gQVNJX0JMS19JTklUX1FVQURfTEREX1AsICVvNAorCWFkZAkJJW8xLCAzMiwgJW8xCisJYWRkCQklbzAsIDMyLCAlbzAKKwlzdHhhCQklbzIsIFslbzAgKyAlZzBdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCisJc3R4YQkJJW8zLCBbJW8wICsgJWcxXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAorCXN0eGEJCSVvNCwgWyVvMCArICVnMl0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKKwlzdHhhCQklbzUsIFslbzAgKyAlZzNdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCisJc3ViY2MJCSVnNywgNjQsICVnNworCWJuZSxwdAkJJXhjYywgMWIKKwkgYWRkCQklbzAsIDMyLCAlbzAKKwlyZXRsCisJIG5vcAorCitOR2NsZWFyX3BhZ2U6CQkvKiAlbzA9ZGVzdCAqLworTkdjbGVhcl91c2VyX3BhZ2U6CS8qICVvMD1kZXN0LCAlbzE9dmFkZHIgKi8KKwltb3YJCTgsICVnMQorCW1vdgkJMTYsICVnMgorCW1vdgkJMjQsICVnMworCXNldAkJUEFHRV9TSVpFLCAlZzcKKworMToJc3R4YQkJJWcwLCBbJW8wICsgJWcwXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAorCXN0eGEJCSVnMCwgWyVvMCArICVnMV0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKKwlzdHhhCQklZzAsIFslbzAgKyAlZzJdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCisJc3R4YQkJJWcwLCBbJW8wICsgJWczXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAorCWFkZAkJJW8wLCAzMiwgJW8wCisJc3R4YQkJJWcwLCBbJW8wICsgJWcwXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAorCXN0eGEJCSVnMCwgWyVvMCArICVnMV0gQVNJX0JMS19JTklUX1FVQURfTEREX1AKKwlzdHhhCQklZzAsIFslbzAgKyAlZzJdIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QCisJc3R4YQkJJWcwLCBbJW8wICsgJWczXSBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUAorCXN1YmNjCQklZzcsIDY0LCAlZzcKKwlibmUscHQJCSV4Y2MsIDFiCisJIGFkZAkJJW8wLCAzMiwgJW8wCisJcmV0bAorCSBub3AKKworI2RlZmluZSBCUkFOQ0hfQUxXQVlTCTB4MTA2ODAwMDAKKyNkZWZpbmUgTk9QCQkweDAxMDAwMDAwCisjZGVmaW5lIE5HX0RPX1BBVENIKE9MRCwgTkVXKQlcCisJc2V0aGkJJWhpKE5FVyksICVnMTsgXAorCW9yCSVnMSwgJWxvKE5FVyksICVnMTsgXAorCXNldGhpCSVoaShPTEQpLCAlZzI7IFwKKwlvcgklZzIsICVsbyhPTEQpLCAlZzI7IFwKKwlzdWIJJWcxLCAlZzIsICVnMTsgXAorCXNldGhpCSVoaShCUkFOQ0hfQUxXQVlTKSwgJWczOyBcCisJc2xsCSVnMSwgMTEsICVnMTsgXAorCXNybAklZzEsIDExICsgMiwgJWcxOyBcCisJb3IJJWczLCAlbG8oQlJBTkNIX0FMV0FZUyksICVnMzsgXAorCW9yCSVnMywgJWcxLCAlZzM7IFwKKwlzdHcJJWczLCBbJWcyXTsgXAorCXNldGhpCSVoaShOT1ApLCAlZzM7IFwKKwlvcgklZzMsICVsbyhOT1ApLCAlZzM7IFwKKwlzdHcJJWczLCBbJWcyICsgMHg0XTsgXAorCWZsdXNoCSVnMjsKKworCS5nbG9ibAluaWFnYXJhX3BhdGNoX3BhZ2VvcHMKKwkudHlwZQluaWFnYXJhX3BhdGNoX3BhZ2VvcHMsI2Z1bmN0aW9uCituaWFnYXJhX3BhdGNoX3BhZ2VvcHM6CisJTkdfRE9fUEFUQ0goY29weV91c2VyX3BhZ2UsIE5HY29weV91c2VyX3BhZ2UpCisJTkdfRE9fUEFUQ0goX2NsZWFyX3BhZ2UsIE5HY2xlYXJfcGFnZSkKKwlOR19ET19QQVRDSChjbGVhcl91c2VyX3BhZ2UsIE5HY2xlYXJfdXNlcl9wYWdlKQorCXJldGwKKwkgbm9wCisJLnNpemUJbmlhZ2FyYV9wYXRjaF9wYWdlb3BzLC4tbmlhZ2FyYV9wYXRjaF9wYWdlb3BzCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL05HcGF0Y2guUyBiL2FyY2gvc3BhcmM2NC9saWIvTkdwYXRjaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDY3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjNjQvbGliL05HcGF0Y2guUwpAQCAtMCwwICsxLDMzIEBACisvKiBOR3BhdGNoLlM6IFBhdGNoIFVsdHJhLUkgcm91dGluZXMgd2l0aCBOaWFnYXJhIHZhcmlhbnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKyAqLworCisjZGVmaW5lIEJSQU5DSF9BTFdBWVMJMHgxMDY4MDAwMAorI2RlZmluZSBOT1AJCTB4MDEwMDAwMDAKKyNkZWZpbmUgTkdfRE9fUEFUQ0goT0xELCBORVcpCVwKKwlzZXRoaQklaGkoTkVXKSwgJWcxOyBcCisJb3IJJWcxLCAlbG8oTkVXKSwgJWcxOyBcCisJc2V0aGkJJWhpKE9MRCksICVnMjsgXAorCW9yCSVnMiwgJWxvKE9MRCksICVnMjsgXAorCXN1YgklZzEsICVnMiwgJWcxOyBcCisJc2V0aGkJJWhpKEJSQU5DSF9BTFdBWVMpLCAlZzM7IFwKKwlzbGwJJWcxLCAxMSwgJWcxOyBcCisJc3JsCSVnMSwgMTEgKyAyLCAlZzE7IFwKKwlvcgklZzMsICVsbyhCUkFOQ0hfQUxXQVlTKSwgJWczOyBcCisJb3IJJWczLCAlZzEsICVnMzsgXAorCXN0dwklZzMsIFslZzJdOyBcCisJc2V0aGkJJWhpKE5PUCksICVnMzsgXAorCW9yCSVnMywgJWxvKE5PUCksICVnMzsgXAorCXN0dwklZzMsIFslZzIgKyAweDRdOyBcCisJZmx1c2gJJWcyOworCisJLmdsb2JsCW5pYWdhcmFfcGF0Y2hfY29weW9wcworCS50eXBlCW5pYWdhcmFfcGF0Y2hfY29weW9wcywjZnVuY3Rpb24KK25pYWdhcmFfcGF0Y2hfY29weW9wczoKKwlOR19ET19QQVRDSChtZW1jcHksIE5HbWVtY3B5KQorCU5HX0RPX1BBVENIKF9fX2NvcHlfZnJvbV91c2VyLCBOR2NvcHlfZnJvbV91c2VyKQorCU5HX0RPX1BBVENIKF9fX2NvcHlfdG9fdXNlciwgTkdjb3B5X3RvX3VzZXIpCisJcmV0bAorCSBub3AKKwkuc2l6ZQluaWFnYXJhX3BhdGNoX2NvcHlvcHMsLi1uaWFnYXJhX3BhdGNoX2NvcHlvcHMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvVTFjb3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYzY0L2xpYi9VMWNvcHlfZnJvbV91c2VyLlMKaW5kZXggOTMxNDZhOC4uMzE5MmIwYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9VMWNvcHlfZnJvbV91c2VyLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9VMWNvcHlfZnJvbV91c2VyLlMKQEAgLTksNyArOSw3IEBACiAJLmFsaWduIDQ7CQlcCiA5OToJcmV0bDsJCQlcCiAJIG1vdgkxLCAlbzA7CQlcCi0JLnNlY3Rpb24gX19leF90YWJsZTsJXAorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiO1wKIAkuYWxpZ24gNDsJCVwKIAkud29yZCA5OGIsIDk5YjsJCVwKIAkudGV4dDsJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL1UxY29weV90b191c2VyLlMgYi9hcmNoL3NwYXJjNjQvbGliL1UxY29weV90b191c2VyLlMKaW5kZXggMWZjY2M1Mi4uZDEyMTBmZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9VMWNvcHlfdG9fdXNlci5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvVTFjb3B5X3RvX3VzZXIuUwpAQCAtOSw3ICs5LDcgQEAKIAkuYWxpZ24gNDsJCVwKIDk5OglyZXRsOwkJCVwKIAkgbW92CTEsICVvMDsJCVwKLQkuc2VjdGlvbiBfX2V4X3RhYmxlOwlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAogCS5hbGlnbiA0OwkJXAogCS53b3JkIDk4YiwgOTliOwkJXAogCS50ZXh0OwkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvVTNjb3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYzY0L2xpYi9VM2NvcHlfZnJvbV91c2VyLlMKaW5kZXggZGY2MDBiNi4uZjViZmM4ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvVTNjb3B5X2Zyb21fdXNlci5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvVTNjb3B5X2Zyb21fdXNlci5TCkBAIC05LDcgKzksNyBAQAogCS5hbGlnbiA0OwkJXAogOTk6CXJldGw7CQkJXAogCSBtb3YJMSwgJW8wOwkJXAotCS5zZWN0aW9uIF9fZXhfdGFibGU7CVwKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIjtcCiAJLmFsaWduIDQ7CQlcCiAJLndvcmQgOThiLCA5OWI7CQlcCiAJLnRleHQ7CQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9VM2NvcHlfdG9fdXNlci5TIGIvYXJjaC9zcGFyYzY0L2xpYi9VM2NvcHlfdG9fdXNlci5TCmluZGV4IGYzMzdmMjIuLjIzMzRmMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvVTNjb3B5X3RvX3VzZXIuUworKysgYi9hcmNoL3NwYXJjNjQvbGliL1UzY29weV90b191c2VyLlMKQEAgLTksNyArOSw3IEBACiAJLmFsaWduIDQ7CQlcCiA5OToJcmV0bDsJCQlcCiAJIG1vdgkxLCAlbzA7CQlcCi0JLnNlY3Rpb24gX19leF90YWJsZTsJXAorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiO1wKIAkuYWxpZ24gNDsJCVwKIAkud29yZCA5OGIsIDk5YjsJCVwKIAkudGV4dDsJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL1UzcGF0Y2guUyBiL2FyY2gvc3BhcmM2NC9saWIvVTNwYXRjaC5TCmluZGV4IGUyYjZjNWUuLmVjYzMwMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9saWIvVTNwYXRjaC5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvVTNwYXRjaC5TCkBAIC0xMiw3ICsxMiw4IEBACiAJb3IJJWcyLCAlbG8oT0xEKSwgJWcyOyBcCiAJc3ViCSVnMSwgJWcyLCAlZzE7IFwKIAlzZXRoaQklaGkoQlJBTkNIX0FMV0FZUyksICVnMzsgXAotCXNybAklZzEsIDIsICVnMTsgXAorCXNsbAklZzEsIDExLCAlZzE7IFwKKwlzcmwJJWcxLCAxMSArIDIsICVnMTsgXAogCW9yCSVnMywgJWxvKEJSQU5DSF9BTFdBWVMpLCAlZzM7IFwKIAlvcgklZzMsICVnMSwgJWczOyBcCiAJc3R3CSVnMywgWyVnMl07IFwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvYnplcm8uUyBiL2FyY2gvc3BhcmM2NC9saWIvYnplcm8uUwppbmRleCAyMWE5MzNmLi5jN2JiYWU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2J6ZXJvLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9iemVyby5TCkBAIC05MiwxOCArOTIsMTggQEAKIAkuYWxpZ24gNDsJCVwKIDk5OglyZXRsOwkJCVwKIAkgbW92CSVvMSwgJW8wOwlcCi0JLnNlY3Rpb24gX19leF90YWJsZTsJXAorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiO1wKIAkuYWxpZ24gNDsJCVwKIAkud29yZCA5OGIsIDk5YjsJCVwKIAkudGV4dDsJCQlcCiAJLmFsaWduIDQ7CiAKLQkuZ2xvYmwJX19iemVyb19ub2FzaQotCS50eXBlCV9fYnplcm9fbm9hc2ksICNmdW5jdGlvbgotX19iemVyb19ub2FzaToJCS8qICVvMD1idWYsICVvMT1sZW4gKi8KLQlicnoscG4JCSVvMSwgX19iemVyb19ub2FzaV9kb25lCisJLmdsb2JsCV9fY2xlYXJfdXNlcgorCS50eXBlCV9fY2xlYXJfdXNlciwgI2Z1bmN0aW9uCitfX2NsZWFyX3VzZXI6CQkvKiAlbzA9YnVmLCAlbzE9bGVuICovCisJYnJ6LHBuCQklbzEsIF9fY2xlYXJfdXNlcl9kb25lCiAJIGNtcAkJJW8xLCAxNgotCWJsLHBuCQklaWNjLCBfX2J6ZXJvX25vYXNpX3RpbnkKKwlibCxwbgkJJWljYywgX19jbGVhcl91c2VyX3RpbnkKIAkgRVhfU1QocHJlZmV0Y2hhIFslbzAgKyAweDAwXSAlYXNpLCAjbl93cml0ZXMpCiAJYW5kY2MJCSVvMCwgMHgzLCAlZzAKIAliZSxwdAkJJWljYywgMmYKQEAgLTE0NSwxNCArMTQ1LDE0IEBACiAJc3ViY2MJCSVnMSwgOCwgJWcxCiAJYm5lLHB0CQklaWNjLCA1YgogCSBhZGQJCSVvMCwgMHg4LCAlbzAKLTY6CWJyeixwdAkJJW8xLCBfX2J6ZXJvX25vYXNpX2RvbmUKKzY6CWJyeixwdAkJJW8xLCBfX2NsZWFyX3VzZXJfZG9uZQogCSBub3AKLV9fYnplcm9fbm9hc2lfdGlueToKK19fY2xlYXJfdXNlcl90aW55OgogMToJRVhfU1Qoc3RiYQklZzAsIFslbzAgKyAweDAwXSAlYXNpKQogCXN1YmNjCQklbzEsIDEsICVvMQogCWJuZSxwdAkJJWljYywgMWIKIAkgYWRkCQklbzAsIDEsICVvMAotX19iemVyb19ub2FzaV9kb25lOgorX19jbGVhcl91c2VyX2RvbmU6CiAJcmV0bAogCSBjbHIJCSVvMAotCS5zaXplCQlfX2J6ZXJvX25vYXNpLCAuLV9fYnplcm9fbm9hc2kKKwkuc2l6ZQkJX19jbGVhcl91c2VyLCAuLV9fY2xlYXJfdXNlcgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9jbGVhcl9wYWdlLlMgYi9hcmNoL3NwYXJjNjQvbGliL2NsZWFyX3BhZ2UuUwppbmRleCBiNTk4ODRlLi43N2U1MzFmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2NsZWFyX3BhZ2UuUworKysgYi9hcmNoL3NwYXJjNjQvbGliL2NsZWFyX3BhZ2UuUwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CisjaW5jbHVkZSA8YXNtL2hlYWQuaD4KIAogCS8qIFdoYXQgd2UgdXNlZCB0byBkbyB3YXMgbG9jayBhIFRMQiBlbnRyeSBpbnRvIGEgc3BlY2lmaWMKIAkgKiBUTEIgc2xvdCwgY2xlYXIgdGhlIHBhZ2Ugd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB0aGVuCkBAIC0yMiw5ICsyMyw2IEBACiAJICogZGlzYWJsZSBwcmVlbXB0aW9uIGR1cmluZyB0aGUgY2xlYXIuCiAJICovCiAKLSNkZWZpbmUgVFRFX0JJVFNfVE9QCShfUEFHRV9WQUxJRCB8IF9QQUdFX1NaQklUUykKLSNkZWZpbmUgVFRFX0JJVFNfQk9UVE9NCShfUEFHRV9DUCB8IF9QQUdFX0NWIHwgX1BBR0VfUCB8IF9QQUdFX0wgfCBfUEFHRV9XKQotCiAJLnRleHQKIAogCS5nbG9ibAkJX2NsZWFyX3BhZ2UKQEAgLTQzLDEyICs0MSwxMSBAQAogCXNldGhpCQklaGkoUEFHRV9TSVpFKSwgJW80CiAKIAlzbGx4CQklZzIsIDMyLCAlZzIKLQlzZXRoaQkJJXVoaShUVEVfQklUU19UT1ApLCAlZzMKKwlzZXRoaQkJJWhpKFBBR0VfS0VSTkVMX0xPQ0tFRCksICVnMwogCi0Jc2xseAkJJWczLCAzMiwgJWczCisJbGR4CQlbJWczICsgJWxvKFBBR0VfS0VSTkVMX0xPQ0tFRCldLCAlZzMKIAlzdWIJCSVvMCwgJWcyLCAlZzEJCSEgcGFkZHIKIAotCW9yCQklZzMsIFRURV9CSVRTX0JPVFRPTSwgJWczCiAJYW5kCQklbzEsICVvNCwgJW8wCQkhIHZhZGRyIEQtY2FjaGUgYWxpYXMgYml0CiAKIAlvcgkJJWcxLCAlZzMsICVnMQkJISBUVEUgZGF0YQpAQCAtNjYsNyArNjMsOCBAQAogCXdycHIJCSVvNCwgUFNUQVRFX0lFLCAlcHN0YXRlCiAJc3R4YQkJJW8wLCBbJWczXSBBU0lfRE1NVQogCXN0eGEJCSVnMSwgWyVnMF0gQVNJX0RUTEJfREFUQV9JTgotCWZsdXNoCQklZzYKKwlzZXRoaQkJJWhpKEtFUk5CQVNFKSwgJWcxCisJZmx1c2gJCSVnMQogCXdycHIJCSVvNCwgMHgwLCAlcHN0YXRlCiAKIAltb3YJCTEsICVvNApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi9jb3B5X2luX3VzZXIuUyBiL2FyY2gvc3BhcmM2NC9saWIvY29weV9pbl91c2VyLlMKaW5kZXggODE2MDc2Yy4uNjUwYWYzZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9jb3B5X2luX3VzZXIuUworKysgYi9hcmNoL3NwYXJjNjQvbGliL2NvcHlfaW5fdXNlci5TCkBAIC0xMyw3ICsxMyw3IEBACiAJLmFsaWduIDQ7CQlcCiA5OToJcmV0bDsJCQlcCiAJIG1vdiAxLCAlbzA7CQlcCi0JLnNlY3Rpb24gX19leF90YWJsZTsJXAorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiO1wKIAkuYWxpZ24gNDsJCVwKIAkud29yZCA5OGIsIDk5YjsJCVwKIAkudGV4dDsJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2NvcHlfcGFnZS5TIGIvYXJjaC9zcGFyYzY0L2xpYi9jb3B5X3BhZ2UuUwppbmRleCBmZWViYjE0Li4zNzQ2MDY2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2NvcHlfcGFnZS5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvY29weV9wYWdlLlMKQEAgLTIzLDggKzIzLDYgQEAKIAkgKiBkaXNhYmxlIHByZWVtcHRpb24gZHVyaW5nIHRoZSBjbGVhci4KIAkgKi8KIAotI2RlZmluZSBUVEVfQklUU19UT1AJKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1pCSVRTKQotI2RlZmluZSBUVEVfQklUU19CT1RUT00JKF9QQUdFX0NQIHwgX1BBR0VfQ1YgfCBfUEFHRV9QIHwgX1BBR0VfTCB8IF9QQUdFX1cpCiAjZGVmaW5lCURDQUNIRV9TSVpFCShQQUdFX1NJWkUgKiAyKQogCiAjaWYgKFBBR0VfU0hJRlQgPT0gMTMpIHx8IChQQUdFX1NISUZUID09IDE5KQpAQCAtNTIsMTMgKzUwLDEyIEBACiAJc2V0aGkJCSVoaShQQUdFX1NJWkUpLCAlbzMKIAogCXNsbHgJCSVnMiwgMzIsICVnMgotCXNldGhpCQkldWhpKFRURV9CSVRTX1RPUCksICVnMworCXNldGhpCQklaGkoUEFHRV9LRVJORUxfTE9DS0VEKSwgJWczCiAKLQlzbGx4CQklZzMsIDMyLCAlZzMKKwlsZHgJCVslZzMgKyAlbG8oUEFHRV9LRVJORUxfTE9DS0VEKV0sICVnMwogCXN1YgkJJW8wLCAlZzIsICVnMQkJISBkZXN0IHBhZGRyCiAKIAlzdWIJCSVvMSwgJWcyLCAlZzIJCSEgc3JjIHBhZGRyCi0Jb3IJCSVnMywgVFRFX0JJVFNfQk9UVE9NLCAlZzMKIAogCWFuZAkJJW8yLCAlbzMsICVvMAkJISB2YWRkciBELWNhY2hlIGFsaWFzIGJpdAogCW9yCQklZzEsICVnMywgJWcxCQkhIGRlc3QgVFRFIGRhdGEKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvY3N1bV9jb3B5X2Zyb21fdXNlci5TIGIvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHlfZnJvbV91c2VyLlMKaW5kZXggODE3ZWJkYS4uYTIyZWRkYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHlfZnJvbV91c2VyLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHlfZnJvbV91c2VyLlMKQEAgLTksNyArOSw3IEBACiAJLmFsaWduIDQ7CQlcCiA5OToJcmV0bDsJCQlcCiAJIG1vdgktMSwgJW8wOwlcCi0JLnNlY3Rpb24gX19leF90YWJsZTsJXAorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiO1wKIAkuYWxpZ24gNDsJCVwKIAkud29yZCA5OGIsIDk5YjsJCVwKIAkudGV4dDsJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2NzdW1fY29weV90b191c2VyLlMgYi9hcmNoL3NwYXJjNjQvbGliL2NzdW1fY29weV90b191c2VyLlMKaW5kZXggYzJmOTQ2My4uZDViMTJmNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi9jc3VtX2NvcHlfdG9fdXNlci5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvY3N1bV9jb3B5X3RvX3VzZXIuUwpAQCAtOSw3ICs5LDcgQEAKIAkuYWxpZ24gNDsJCVwKIDk5OglyZXRsOwkJCVwKIAkgbW92CS0xLCAlbzA7CVwKLQkuc2VjdGlvbiBfX2V4X3RhYmxlOwlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7XAogCS5hbGlnbiA0OwkJXAogCS53b3JkIDk4YiwgOTliOwkJXAogCS50ZXh0OwkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvZGVsYXkuYyBiL2FyY2gvc3BhcmM2NC9saWIvZGVsYXkuYwppbmRleCBlODgwODcyLi5mYjI3ZTU0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9kZWxheS5jCkBAIC0xLDYgKzEsNiBAQAogLyogZGVsYXkuYzogRGVsYXkgbG9vcHMgZm9yIHNwYXJjNjQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KICAqCiAgKiBCYXNlZCBoZWF2aWx5IHVwb24geDg2IHZhcmlhbnQgd2hpY2ggaXM6CiAgKglDb3B5cmlnaHQgKEMpIDE5OTMgTGludXMgVG9ydmFsZHMKQEAgLTgsMTkgKzgsMTYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KIAogdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iCWIscHQJJSV4Y2MsIDFmXG4iCi0iCSBjbXAJJTAsIDBcbiIKLSIJLmFsaWduCTMyXG4iCi0iMTpcbiIKLSIJYm5lLHB0CSUleGNjLCAxYlxuIgotIgkgc3ViY2MJJTAsIDEsICUwXG4iCi0JOiAiPSZyIiAobG9vcHMpCi0JOiAiMCIgKGxvb3BzKQotCTogImNjIik7CisJdW5zaWduZWQgbG9uZyBiY2xvY2ssIG5vdzsKKwkKKwliY2xvY2sgPSB0aWNrX29wcy0+Z2V0X3RpY2soKTsKKwlkbyB7CisJCW5vdyA9IHRpY2tfb3BzLT5nZXRfdGljaygpOworCX0gd2hpbGUgKChub3ctYmNsb2NrKSA8IGxvb3BzKTsKIH0KIAogLyogV2UgdXNlZCB0byBtdWx0aXBseSBieSBIWiBhZnRlciBzaGlmdGluZyBkb3duIGJ5IDMyIGJpdHMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvc3RybGVuX3VzZXIuUyBiL2FyY2gvc3BhcmM2NC9saWIvc3RybGVuX3VzZXIuUwppbmRleCA5ZWQ1NGJhLi4xMTRlZDExIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL3N0cmxlbl91c2VyLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9zdHJsZW5fdXNlci5TCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIHJldGwKICAgICAgICAgIGNsciAgICAlbzAKIAotCS5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKIAkuYWxpZ24JNAogCiAJLndvcmQJMTBiLCAzMGIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9saWIvc3RybmNweV9mcm9tX3VzZXIuUyBiL2FyY2gvc3BhcmM2NC9saWIvc3RybmNweV9mcm9tX3VzZXIuUwppbmRleCBlMTI2NDY1Li5iMmY0OTlmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL3N0cm5jcHlfZnJvbV91c2VyLlMKKysrIGIvYXJjaC9zcGFyYzY0L2xpYi9zdHJuY3B5X2Zyb21fdXNlci5TCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkgYWRkCSVvMiwgJW8zLCAlbzAKIAkuc2l6ZQlfX3N0cm5jcHlfZnJvbV91c2VyLCAuLV9fc3RybmNweV9mcm9tX3VzZXIKIAotCS5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKIAkuYWxpZ24JNAogCS53b3JkCTYwYiwgX19yZXRsX2VmYXVsdAogCS53b3JkCTYxYiwgX19yZXRsX2VmYXVsdApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2xpYi94b3IuUyBiL2FyY2gvc3BhcmM2NC9saWIveG9yLlMKaW5kZXggNGNkNWQyYi4uYTc5Yzg4OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2xpYi94b3IuUworKysgYi9hcmNoL3NwYXJjNjQvbGliL3hvci5TCkBAIC0yLDkgKzIsMTAgQEAKICAqIGFyY2gvc3BhcmM2NC9saWIveG9yLlMKICAqCiAgKiBIaWdoIHNwZWVkIHhvcl9ibG9jayBvcGVyYXRpb24gZm9yIFJBSUQ0LzUgdXRpbGl6aW5nIHRoZQotICogVWx0cmFTcGFyYyBWaXN1YWwgSW5zdHJ1Y3Rpb24gU2V0LgorICogVWx0cmFTcGFyYyBWaXN1YWwgSW5zdHJ1Y3Rpb24gU2V0IGFuZCBOaWFnYXJhIHN0b3JlLWluaXQvdHdpbi1sb2FkLgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CiAgKi8KIAogI2luY2x1ZGUgPGFzbS92aXNhc20uaD4KQEAgLTE5LDYgKzIwLDggQEAKICAqLwogCS50ZXh0CiAJLmFsaWduCTMyCisKKwkvKiBWSVMgdmVyc2lvbnMuICovCiAJLmdsb2JsCXhvcl92aXNfMgogCS50eXBlCXhvcl92aXNfMiwjZnVuY3Rpb24KIHhvcl92aXNfMjoKQEAgLTM1MiwzICszNTUsMjk4IEBACiAJcmV0CiAJIHJlc3RvcmUKIAkuc2l6ZQl4b3JfdmlzXzUsIC4teG9yX3Zpc181CisKKwkvKiBOaWFnYXJhIHZlcnNpb25zLiAqLworCS5nbG9ibAkJeG9yX25pYWdhcmFfMgorCS50eXBlCQl4b3JfbmlhZ2FyYV8yLCNmdW5jdGlvbgoreG9yX25pYWdhcmFfMjoJCS8qICVvMD1ieXRlcywgJW8xPWRlc3QsICVvMj1zcmMgKi8KKwlzYXZlCQklc3AsIC0xOTIsICVzcAorCXByZWZldGNoCVslaTFdLCAjbl93cml0ZXMKKwlwcmVmZXRjaAlbJWkyXSwgI29uZV9yZWFkCisJcmQJCSVhc2ksICVnNworCXdyCQklZzAsIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9QLCAlYXNpCisJc3JseAkJJWkwLCA2LCAlZzEKKwltb3YJCSVpMSwgJWkwCisJbW92CQklaTIsICVpMQorMToJbGRkYQkJWyVpMSArIDB4MDBdICVhc2ksICVpMgkvKiAlaTIvJWkzID0gc3JjICArIDB4MDAgKi8KKwlsZGRhCQlbJWkxICsgMHgxMF0gJWFzaSwgJWk0CS8qICVpNC8laTUgPSBzcmMgICsgMHgxMCAqLworCWxkZGEJCVslaTEgKyAweDIwXSAlYXNpLCAlZzIJLyogJWcyLyVnMyA9IHNyYyAgKyAweDIwICovCisJbGRkYQkJWyVpMSArIDB4MzBdICVhc2ksICVsMAkvKiAlbDAvJWwxID0gc3JjICArIDB4MzAgKi8KKwlwcmVmZXRjaAlbJWkxICsgMHg0MF0sICNvbmVfcmVhZAorCWxkZGEJCVslaTAgKyAweDAwXSAlYXNpLCAlbzAgIC8qICVvMC8lbzEgPSBkZXN0ICsgMHgwMCAqLworCWxkZGEJCVslaTAgKyAweDEwXSAlYXNpLCAlbzIgIC8qICVvMi8lbzMgPSBkZXN0ICsgMHgxMCAqLworCWxkZGEJCVslaTAgKyAweDIwXSAlYXNpLCAlbzQgIC8qICVvNC8lbzUgPSBkZXN0ICsgMHgyMCAqLworCWxkZGEJCVslaTAgKyAweDMwXSAlYXNpLCAlbDIgIC8qICVsMi8lbDMgPSBkZXN0ICsgMHgzMCAqLworCXByZWZldGNoCVslaTAgKyAweDQwXSwgI25fd3JpdGVzCisJeG9yCQklbzAsICVpMiwgJW8wCisJeG9yCQklbzEsICVpMywgJW8xCisJc3R4YQkJJW8wLCBbJWkwICsgMHgwMF0gJWFzaQorCXN0eGEJCSVvMSwgWyVpMCArIDB4MDhdICVhc2kKKwl4b3IJCSVvMiwgJWk0LCAlbzIKKwl4b3IJCSVvMywgJWk1LCAlbzMKKwlzdHhhCQklbzIsIFslaTAgKyAweDEwXSAlYXNpCisJc3R4YQkJJW8zLCBbJWkwICsgMHgxOF0gJWFzaQorCXhvcgkJJW80LCAlZzIsICVvNAorCXhvcgkJJW81LCAlZzMsICVvNQorCXN0eGEJCSVvNCwgWyVpMCArIDB4MjBdICVhc2kKKwlzdHhhCQklbzUsIFslaTAgKyAweDI4XSAlYXNpCisJeG9yCQklbDIsICVsMCwgJWwyCisJeG9yCQklbDMsICVsMSwgJWwzCisJc3R4YQkJJWwyLCBbJWkwICsgMHgzMF0gJWFzaQorCXN0eGEJCSVsMywgWyVpMCArIDB4MzhdICVhc2kKKwlhZGQJCSVpMCwgMHg0MCwgJWkwCisJc3ViY2MJCSVnMSwgMSwgJWcxCisJYm5lLHB0CQkleGNjLCAxYgorCSBhZGQJCSVpMSwgMHg0MCwgJWkxCisJbWVtYmFyCQkjU3luYworCXdyCQklZzcsIDB4MCwgJWFzaQorCXJldAorCSByZXN0b3JlCisJLnNpemUJCXhvcl9uaWFnYXJhXzIsIC4teG9yX25pYWdhcmFfMgorCisJLmdsb2JsCQl4b3JfbmlhZ2FyYV8zCisJLnR5cGUJCXhvcl9uaWFnYXJhXzMsI2Z1bmN0aW9uCit4b3JfbmlhZ2FyYV8zOgkJLyogJW8wPWJ5dGVzLCAlbzE9ZGVzdCwgJW8yPXNyYzEsICVvMz1zcmMyICovCisJc2F2ZQkJJXNwLCAtMTkyLCAlc3AKKwlwcmVmZXRjaAlbJWkxXSwgI25fd3JpdGVzCisJcHJlZmV0Y2gJWyVpMl0sICNvbmVfcmVhZAorCXByZWZldGNoCVslaTNdLCAjb25lX3JlYWQKKwlyZAkJJWFzaSwgJWc3CisJd3IJCSVnMCwgQVNJX0JMS19JTklUX1FVQURfTEREX1AsICVhc2kKKwlzcmx4CQklaTAsIDYsICVnMQorCW1vdgkJJWkxLCAlaTAKKwltb3YJCSVpMiwgJWkxCisJbW92CQklaTMsICVsNworMToJbGRkYQkJWyVpMSArIDB4MDBdICVhc2ksICVpMgkvKiAlaTIvJWkzID0gc3JjMSArIDB4MDAgKi8KKwlsZGRhCQlbJWkxICsgMHgxMF0gJWFzaSwgJWk0CS8qICVpNC8laTUgPSBzcmMxICsgMHgxMCAqLworCWxkZGEJCVslbDcgKyAweDAwXSAlYXNpLCAlZzIJLyogJWcyLyVnMyA9IHNyYzIgKyAweDAwICovCisJbGRkYQkJWyVsNyArIDB4MTBdICVhc2ksICVsMAkvKiAlbDAvJWwxID0gc3JjMiArIDB4MTAgKi8KKwlsZGRhCQlbJWkwICsgMHgwMF0gJWFzaSwgJW8wICAvKiAlbzAvJW8xID0gZGVzdCArIDB4MDAgKi8KKwlsZGRhCQlbJWkwICsgMHgxMF0gJWFzaSwgJW8yICAvKiAlbzIvJW8zID0gZGVzdCArIDB4MTAgKi8KKwl4b3IJCSVnMiwgJWkyLCAlZzIKKwl4b3IJCSVnMywgJWkzLCAlZzMKKwl4b3IJCSVvMCwgJWcyLCAlbzAKKwl4b3IJCSVvMSwgJWczLCAlbzEKKwlzdHhhCQklbzAsIFslaTAgKyAweDAwXSAlYXNpCisJc3R4YQkJJW8xLCBbJWkwICsgMHgwOF0gJWFzaQorCWxkZGEJCVslaTEgKyAweDIwXSAlYXNpLCAlaTIJLyogJWkyLyVpMyA9IHNyYzEgKyAweDIwICovCisJbGRkYQkJWyVsNyArIDB4MjBdICVhc2ksICVnMgkvKiAlZzIvJWczID0gc3JjMiArIDB4MjAgKi8KKwlsZGRhCQlbJWkwICsgMHgyMF0gJWFzaSwgJW8wCS8qICVvMC8lbzEgPSBkZXN0ICsgMHgyMCAqLworCXhvcgkJJWwwLCAlaTQsICVsMAorCXhvcgkJJWwxLCAlaTUsICVsMQorCXhvcgkJJW8yLCAlbDAsICVvMgorCXhvcgkJJW8zLCAlbDEsICVvMworCXN0eGEJCSVvMiwgWyVpMCArIDB4MTBdICVhc2kKKwlzdHhhCQklbzMsIFslaTAgKyAweDE4XSAlYXNpCisJbGRkYQkJWyVpMSArIDB4MzBdICVhc2ksICVpNAkvKiAlaTQvJWk1ID0gc3JjMSArIDB4MzAgKi8KKwlsZGRhCQlbJWw3ICsgMHgzMF0gJWFzaSwgJWwwCS8qICVsMC8lbDEgPSBzcmMyICsgMHgzMCAqLworCWxkZGEJCVslaTAgKyAweDMwXSAlYXNpLCAlbzIJLyogJW8yLyVvMyA9IGRlc3QgKyAweDMwICovCisJcHJlZmV0Y2gJWyVpMSArIDB4NDBdLCAjb25lX3JlYWQKKwlwcmVmZXRjaAlbJWw3ICsgMHg0MF0sICNvbmVfcmVhZAorCXByZWZldGNoCVslaTAgKyAweDQwXSwgI25fd3JpdGVzCisJeG9yCQklZzIsICVpMiwgJWcyCisJeG9yCQklZzMsICVpMywgJWczCisJeG9yCQklbzAsICVnMiwgJW8wCisJeG9yCQklbzEsICVnMywgJW8xCisJc3R4YQkJJW8wLCBbJWkwICsgMHgyMF0gJWFzaQorCXN0eGEJCSVvMSwgWyVpMCArIDB4MjhdICVhc2kKKwl4b3IJCSVsMCwgJWk0LCAlbDAKKwl4b3IJCSVsMSwgJWk1LCAlbDEKKwl4b3IJCSVvMiwgJWwwLCAlbzIKKwl4b3IJCSVvMywgJWwxLCAlbzMKKwlzdHhhCQklbzIsIFslaTAgKyAweDMwXSAlYXNpCisJc3R4YQkJJW8zLCBbJWkwICsgMHgzOF0gJWFzaQorCWFkZAkJJWkwLCAweDQwLCAlaTAKKwlhZGQJCSVpMSwgMHg0MCwgJWkxCisJc3ViY2MJCSVnMSwgMSwgJWcxCisJYm5lLHB0CQkleGNjLCAxYgorCSBhZGQJCSVsNywgMHg0MCwgJWw3CisJbWVtYmFyCQkjU3luYworCXdyCQklZzcsIDB4MCwgJWFzaQorCXJldAorCSByZXN0b3JlCisJLnNpemUJCXhvcl9uaWFnYXJhXzMsIC4teG9yX25pYWdhcmFfMworCisJLmdsb2JsCQl4b3JfbmlhZ2FyYV80CisJLnR5cGUJCXhvcl9uaWFnYXJhXzQsI2Z1bmN0aW9uCit4b3JfbmlhZ2FyYV80OgkJLyogJW8wPWJ5dGVzLCAlbzE9ZGVzdCwgJW8yPXNyYzEsICVvMz1zcmMyLCAlbzQ9c3JjMyAqLworCXNhdmUJCSVzcCwgLTE5MiwgJXNwCisJcHJlZmV0Y2gJWyVpMV0sICNuX3dyaXRlcworCXByZWZldGNoCVslaTJdLCAjb25lX3JlYWQKKwlwcmVmZXRjaAlbJWkzXSwgI29uZV9yZWFkCisJcHJlZmV0Y2gJWyVpNF0sICNvbmVfcmVhZAorCXJkCQklYXNpLCAlZzcKKwl3cgkJJWcwLCBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUCwgJWFzaQorCXNybHgJCSVpMCwgNiwgJWcxCisJbW92CQklaTEsICVpMAorCW1vdgkJJWkyLCAlaTEKKwltb3YJCSVpMywgJWw3CisJbW92CQklaTQsICVsNgorMToJbGRkYQkJWyVpMSArIDB4MDBdICVhc2ksICVpMgkvKiAlaTIvJWkzID0gc3JjMSArIDB4MDAgKi8KKwlsZGRhCQlbJWw3ICsgMHgwMF0gJWFzaSwgJWk0CS8qICVpNC8laTUgPSBzcmMyICsgMHgwMCAqLworCWxkZGEJCVslbDYgKyAweDAwXSAlYXNpLCAlZzIJLyogJWcyLyVnMyA9IHNyYzMgKyAweDAwICovCisJbGRkYQkJWyVpMCArIDB4MDBdICVhc2ksICVsMAkvKiAlbDAvJWwxID0gZGVzdCArIDB4MDAgKi8KKwl4b3IJCSVpNCwgJWkyLCAlaTQKKwl4b3IJCSVpNSwgJWkzLCAlaTUKKwlsZGRhCQlbJWkxICsgMHgxMF0gJWFzaSwgJWkyCS8qICVpMi8laTMgPSBzcmMxICsgMHgxMCAqLworCXhvcgkJJWcyLCAlaTQsICVnMgorCXhvcgkJJWczLCAlaTUsICVnMworCWxkZGEJCVslaTcgKyAweDEwXSAlYXNpLCAlaTQJLyogJWk0LyVpNSA9IHNyYzIgKyAweDEwICovCisJeG9yCQklbDAsICVnMiwgJWwwCisJeG9yCQklbDEsICVnMywgJWwxCisJc3R4YQkJJWwwLCBbJWkwICsgMHgwMF0gJWFzaQorCXN0eGEJCSVsMSwgWyVpMCArIDB4MDhdICVhc2kKKwlsZGRhCQlbJWk2ICsgMHgxMF0gJWFzaSwgJWcyCS8qICVnMi8lZzMgPSBzcmMzICsgMHgxMCAqLworCWxkZGEJCVslaTAgKyAweDEwXSAlYXNpLCAlbDAJLyogJWwwLyVsMSA9IGRlc3QgKyAweDEwICovCisKKwl4b3IJCSVpNCwgJWkyLCAlaTQKKwl4b3IJCSVpNSwgJWkzLCAlaTUKKwlsZGRhCQlbJWkxICsgMHgyMF0gJWFzaSwgJWkyCS8qICVpMi8laTMgPSBzcmMxICsgMHgyMCAqLworCXhvcgkJJWcyLCAlaTQsICVnMgorCXhvcgkJJWczLCAlaTUsICVnMworCWxkZGEJCVslaTcgKyAweDIwXSAlYXNpLCAlaTQJLyogJWk0LyVpNSA9IHNyYzIgKyAweDIwICovCisJeG9yCQklbDAsICVnMiwgJWwwCisJeG9yCQklbDEsICVnMywgJWwxCisJc3R4YQkJJWwwLCBbJWkwICsgMHgxMF0gJWFzaQorCXN0eGEJCSVsMSwgWyVpMCArIDB4MThdICVhc2kKKwlsZGRhCQlbJWk2ICsgMHgyMF0gJWFzaSwgJWcyCS8qICVnMi8lZzMgPSBzcmMzICsgMHgyMCAqLworCWxkZGEJCVslaTAgKyAweDIwXSAlYXNpLCAlbDAJLyogJWwwLyVsMSA9IGRlc3QgKyAweDIwICovCisKKwl4b3IJCSVpNCwgJWkyLCAlaTQKKwl4b3IJCSVpNSwgJWkzLCAlaTUKKwlsZGRhCQlbJWkxICsgMHgzMF0gJWFzaSwgJWkyCS8qICVpMi8laTMgPSBzcmMxICsgMHgzMCAqLworCXhvcgkJJWcyLCAlaTQsICVnMgorCXhvcgkJJWczLCAlaTUsICVnMworCWxkZGEJCVslaTcgKyAweDMwXSAlYXNpLCAlaTQJLyogJWk0LyVpNSA9IHNyYzIgKyAweDMwICovCisJeG9yCQklbDAsICVnMiwgJWwwCisJeG9yCQklbDEsICVnMywgJWwxCisJc3R4YQkJJWwwLCBbJWkwICsgMHgyMF0gJWFzaQorCXN0eGEJCSVsMSwgWyVpMCArIDB4MjhdICVhc2kKKwlsZGRhCQlbJWk2ICsgMHgzMF0gJWFzaSwgJWcyCS8qICVnMi8lZzMgPSBzcmMzICsgMHgzMCAqLworCWxkZGEJCVslaTAgKyAweDMwXSAlYXNpLCAlbDAJLyogJWwwLyVsMSA9IGRlc3QgKyAweDMwICovCisKKwlwcmVmZXRjaAlbJWkxICsgMHg0MF0sICNvbmVfcmVhZAorCXByZWZldGNoCVslbDcgKyAweDQwXSwgI29uZV9yZWFkCisJcHJlZmV0Y2gJWyVsNiArIDB4NDBdLCAjb25lX3JlYWQKKwlwcmVmZXRjaAlbJWkwICsgMHg0MF0sICNuX3dyaXRlcworCisJeG9yCQklaTQsICVpMiwgJWk0CisJeG9yCQklaTUsICVpMywgJWk1CisJeG9yCQklZzIsICVpNCwgJWcyCisJeG9yCQklZzMsICVpNSwgJWczCisJeG9yCQklbDAsICVnMiwgJWwwCisJeG9yCQklbDEsICVnMywgJWwxCisJc3R4YQkJJWwwLCBbJWkwICsgMHgzMF0gJWFzaQorCXN0eGEJCSVsMSwgWyVpMCArIDB4MzhdICVhc2kKKworCWFkZAkJJWkwLCAweDQwLCAlaTAKKwlhZGQJCSVpMSwgMHg0MCwgJWkxCisJYWRkCQklbDcsIDB4NDAsICVsNworCXN1YmNjCQklZzEsIDEsICVnMQorCWJuZSxwdAkJJXhjYywgMWIKKwkgYWRkCQklbDYsIDB4NDAsICVsNgorCW1lbWJhcgkJI1N5bmMKKwl3cgkJJWc3LCAweDAsICVhc2kKKwlyZXQKKwkgcmVzdG9yZQorCS5zaXplCQl4b3JfbmlhZ2FyYV80LCAuLXhvcl9uaWFnYXJhXzQKKworCS5nbG9ibAkJeG9yX25pYWdhcmFfNQorCS50eXBlCQl4b3JfbmlhZ2FyYV81LCNmdW5jdGlvbgoreG9yX25pYWdhcmFfNToJCS8qICVvMD1ieXRlcywgJW8xPWRlc3QsICVvMj1zcmMxLCAlbzM9c3JjMiwgJW80PXNyYzMsICVvNT1zcmM0ICovCisJc2F2ZQkJJXNwLCAtMTkyLCAlc3AKKwlwcmVmZXRjaAlbJWkxXSwgI25fd3JpdGVzCisJcHJlZmV0Y2gJWyVpMl0sICNvbmVfcmVhZAorCXByZWZldGNoCVslaTNdLCAjb25lX3JlYWQKKwlwcmVmZXRjaAlbJWk0XSwgI29uZV9yZWFkCisJcHJlZmV0Y2gJWyVpNV0sICNvbmVfcmVhZAorCXJkCQklYXNpLCAlZzcKKwl3cgkJJWcwLCBBU0lfQkxLX0lOSVRfUVVBRF9MRERfUCwgJWFzaQorCXNybHgJCSVpMCwgNiwgJWcxCisJbW92CQklaTEsICVpMAorCW1vdgkJJWkyLCAlaTEKKwltb3YJCSVpMywgJWw3CisJbW92CQklaTQsICVsNgorCW1vdgkJJWk1LCAlbDUKKzE6CWxkZGEJCVslaTEgKyAweDAwXSAlYXNpLCAlaTIJLyogJWkyLyVpMyA9IHNyYzEgKyAweDAwICovCisJbGRkYQkJWyVsNyArIDB4MDBdICVhc2ksICVpNAkvKiAlaTQvJWk1ID0gc3JjMiArIDB4MDAgKi8KKwlsZGRhCQlbJWw2ICsgMHgwMF0gJWFzaSwgJWcyCS8qICVnMi8lZzMgPSBzcmMzICsgMHgwMCAqLworCWxkZGEJCVslbDUgKyAweDAwXSAlYXNpLCAlbDAJLyogJWwwLyVsMSA9IHNyYzQgKyAweDAwICovCisJbGRkYQkJWyVpMCArIDB4MDBdICVhc2ksICVsMgkvKiAlbDIvJWwzID0gZGVzdCArIDB4MDAgKi8KKwl4b3IJCSVpNCwgJWkyLCAlaTQKKwl4b3IJCSVpNSwgJWkzLCAlaTUKKwlsZGRhCQlbJWkxICsgMHgxMF0gJWFzaSwgJWkyCS8qICVpMi8laTMgPSBzcmMxICsgMHgxMCAqLworCXhvcgkJJWcyLCAlaTQsICVnMgorCXhvcgkJJWczLCAlaTUsICVnMworCWxkZGEJCVslbDcgKyAweDEwXSAlYXNpLCAlaTQJLyogJWk0LyVpNSA9IHNyYzIgKyAweDEwICovCisJeG9yCQklbDAsICVnMiwgJWwwCisJeG9yCQklbDEsICVnMywgJWwxCisJbGRkYQkJWyVsNiArIDB4MTBdICVhc2ksICVnMgkvKiAlZzIvJWczID0gc3JjMyArIDB4MTAgKi8KKwl4b3IJCSVsMiwgJWwwLCAlbDIKKwl4b3IJCSVsMywgJWwxLCAlbDMKKwlzdHhhCQklbDIsIFslaTAgKyAweDAwXSAlYXNpCisJc3R4YQkJJWwzLCBbJWkwICsgMHgwOF0gJWFzaQorCWxkZGEJCVslbDUgKyAweDEwXSAlYXNpLCAlbDAJLyogJWwwLyVsMSA9IHNyYzQgKyAweDEwICovCisJbGRkYQkJWyVpMCArIDB4MTBdICVhc2ksICVsMgkvKiAlbDIvJWwzID0gZGVzdCArIDB4MTAgKi8KKworCXhvcgkJJWk0LCAlaTIsICVpNAorCXhvcgkJJWk1LCAlaTMsICVpNQorCWxkZGEJCVslaTEgKyAweDIwXSAlYXNpLCAlaTIJLyogJWkyLyVpMyA9IHNyYzEgKyAweDIwICovCisJeG9yCQklZzIsICVpNCwgJWcyCisJeG9yCQklZzMsICVpNSwgJWczCisJbGRkYQkJWyVsNyArIDB4MjBdICVhc2ksICVpNAkvKiAlaTQvJWk1ID0gc3JjMiArIDB4MjAgKi8KKwl4b3IJCSVsMCwgJWcyLCAlbDAKKwl4b3IJCSVsMSwgJWczLCAlbDEKKwlsZGRhCQlbJWw2ICsgMHgyMF0gJWFzaSwgJWcyCS8qICVnMi8lZzMgPSBzcmMzICsgMHgyMCAqLworCXhvcgkJJWwyLCAlbDAsICVsMgorCXhvcgkJJWwzLCAlbDEsICVsMworCXN0eGEJCSVsMiwgWyVpMCArIDB4MTBdICVhc2kKKwlzdHhhCQklbDMsIFslaTAgKyAweDE4XSAlYXNpCisJbGRkYQkJWyVsNSArIDB4MjBdICVhc2ksICVsMAkvKiAlbDAvJWwxID0gc3JjNCArIDB4MjAgKi8KKwlsZGRhCQlbJWkwICsgMHgyMF0gJWFzaSwgJWwyCS8qICVsMi8lbDMgPSBkZXN0ICsgMHgyMCAqLworCisJeG9yCQklaTQsICVpMiwgJWk0CisJeG9yCQklaTUsICVpMywgJWk1CisJbGRkYQkJWyVpMSArIDB4MzBdICVhc2ksICVpMgkvKiAlaTIvJWkzID0gc3JjMSArIDB4MzAgKi8KKwl4b3IJCSVnMiwgJWk0LCAlZzIKKwl4b3IJCSVnMywgJWk1LCAlZzMKKwlsZGRhCQlbJWw3ICsgMHgzMF0gJWFzaSwgJWk0CS8qICVpNC8laTUgPSBzcmMyICsgMHgzMCAqLworCXhvcgkJJWwwLCAlZzIsICVsMAorCXhvcgkJJWwxLCAlZzMsICVsMQorCWxkZGEJCVslbDYgKyAweDMwXSAlYXNpLCAlZzIJLyogJWcyLyVnMyA9IHNyYzMgKyAweDMwICovCisJeG9yCQklbDIsICVsMCwgJWwyCisJeG9yCQklbDMsICVsMSwgJWwzCisJc3R4YQkJJWwyLCBbJWkwICsgMHgyMF0gJWFzaQorCXN0eGEJCSVsMywgWyVpMCArIDB4MjhdICVhc2kKKwlsZGRhCQlbJWw1ICsgMHgzMF0gJWFzaSwgJWwwCS8qICVsMC8lbDEgPSBzcmM0ICsgMHgzMCAqLworCWxkZGEJCVslaTAgKyAweDMwXSAlYXNpLCAlbDIJLyogJWwyLyVsMyA9IGRlc3QgKyAweDMwICovCisKKwlwcmVmZXRjaAlbJWkxICsgMHg0MF0sICNvbmVfcmVhZAorCXByZWZldGNoCVslbDcgKyAweDQwXSwgI29uZV9yZWFkCisJcHJlZmV0Y2gJWyVsNiArIDB4NDBdLCAjb25lX3JlYWQKKwlwcmVmZXRjaAlbJWw1ICsgMHg0MF0sICNvbmVfcmVhZAorCXByZWZldGNoCVslaTAgKyAweDQwXSwgI25fd3JpdGVzCisKKwl4b3IJCSVpNCwgJWkyLCAlaTQKKwl4b3IJCSVpNSwgJWkzLCAlaTUKKwl4b3IJCSVnMiwgJWk0LCAlZzIKKwl4b3IJCSVnMywgJWk1LCAlZzMKKwl4b3IJCSVsMCwgJWcyLCAlbDAKKwl4b3IJCSVsMSwgJWczLCAlbDEKKwl4b3IJCSVsMiwgJWwwLCAlbDIKKwl4b3IJCSVsMywgJWwxLCAlbDMKKwlzdHhhCQklbDIsIFslaTAgKyAweDMwXSAlYXNpCisJc3R4YQkJJWwzLCBbJWkwICsgMHgzOF0gJWFzaQorCisJYWRkCQklaTAsIDB4NDAsICVpMAorCWFkZAkJJWkxLCAweDQwLCAlaTEKKwlhZGQJCSVsNywgMHg0MCwgJWw3CisJYWRkCQklbDYsIDB4NDAsICVsNgorCXN1YmNjCQklZzEsIDEsICVnMQorCWJuZSxwdAkJJXhjYywgMWIKKwkgYWRkCQklbDUsIDB4NDAsICVsNQorCW1lbWJhcgkJI1N5bmMKKwl3cgkJJWc3LCAweDAsICVhc2kKKwlyZXQKKwkgcmVzdG9yZQorCS5zaXplCQl4b3JfbmlhZ2FyYV81LCAuLXhvcl9uaWFnYXJhXzUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tYXRoLWVtdS9tYXRoLmMgYi9hcmNoL3NwYXJjNjQvbWF0aC1lbXUvbWF0aC5jCmluZGV4IDJhZTA1Y2QuLjZlZTQ5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tYXRoLWVtdS9tYXRoLmMKKysrIGIvYXJjaC9zcGFyYzY0L21hdGgtZW11L21hdGguYwpAQCAtMjA2LDkgKzIwNiwyOSBAQAogCQkJY2FzZSBGU1RPUTogVFlQRSgzLDMsMSwxLDEsMCwwKTsgYnJlYWs7CiAJCQljYXNlIEZEVE9ROiBUWVBFKDMsMywxLDIsMSwwLDApOyBicmVhazsKIAkJCWNhc2UgRlFUT0k6IFRZUEUoMywxLDAsMywxLDAsMCk7IGJyZWFrOworCisJCQkvKiBXZSBjYW4gZ2V0IGVpdGhlciB1bmltcGxlbWVudGVkIG9yIHVuZmluaXNoZWQKKwkJCSAqIGZvciB0aGVzZSBjYXNlcy4gIFByZS1OaWFnYXJhIHN5c3RlbXMgZ2VuZXJhdGUKKwkJCSAqIHVuZmluaXNoZWQgZnBvcCBmb3IgU1VCTk9STUFMIGNhc2VzLCBhbmQgTmlhZ2FyYQorCQkJICogYWx3YXlzIGdpdmVzIHVuaW1wbGVtZW50ZWQgZnBvcCBmb3IgZnNxcnR7cyxkfS4KKwkJCSAqLworCQkJY2FzZSBGU1FSVFM6IHsKKwkJCQl1bnNpZ25lZCBsb25nIHggPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPnhmc3JbMF07CisKKwkJCQl4ID0gKHggPj4gMTQpICYgMHhmOworCQkJCVRZUEUoeCwxLDEsMSwxLDAsMCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWNhc2UgRlNRUlREOiB7CisJCQkJdW5zaWduZWQgbG9uZyB4ID0gY3VycmVudF90aHJlYWRfaW5mbygpLT54ZnNyWzBdOworCisJCQkJeCA9ICh4ID4+IDE0KSAmIDB4ZjsKKwkJCQlUWVBFKHgsMiwxLDIsMSwwLDApOworCQkJCWJyZWFrOworCQkJfQorCiAJCQkvKiBTVUJOT1JNQUwgLSBmdHQgPT0gMiAqLwotCQkJY2FzZSBGU1FSVFM6IFRZUEUoMiwxLDEsMSwxLDAsMCk7IGJyZWFrOwotCQkJY2FzZSBGU1FSVEQ6IFRZUEUoMiwyLDEsMiwxLDAsMCk7IGJyZWFrOwogCQkJY2FzZSBGQURERDoKIAkJCWNhc2UgRlNVQkQ6CiAJCQljYXNlIEZNVUxEOgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL01ha2VmaWxlIGIvYXJjaC9zcGFyYzY0L21tL01ha2VmaWxlCmluZGV4IDlkMDk2MGUuLmU0MTViZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjNjQvbW0vTWFrZWZpbGUKQEAgLTUsNiArNSw2IEBACiBFWFRSQV9BRkxBR1MgOj0gLWFuc2kKIEVYVFJBX0NGTEFHUyA6PSAtV2Vycm9yCiAKLW9iai15ICAgIDo9IHVsdHJhLm8gdGxiLm8gZmF1bHQubyBpbml0Lm8gZ2VuZXJpYy5vCitvYmoteSAgICA6PSB1bHRyYS5vIHRsYi5vIHRzYi5vIGZhdWx0Lm8gaW5pdC5vIGdlbmVyaWMubwogCiBvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vZmF1bHQuYyBiL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCmluZGV4IDZmMDUzOWEuLmQyMWZmMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc3BhcmM2NC9tbS9mYXVsdC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL2xzdS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAogLyoKICAqIFRvIGRlYnVnIGtlcm5lbCB0byBjYXRjaCBhY2Nlc3NlcyB0byBjZXJ0YWluIHZpcnR1YWwvcGh5c2ljYWwgYWRkcmVzc2VzLgpAQCAtOTEsMTIgKzkyLDEzIEBACiAJZGllX2lmX2tlcm5lbCgiT29wcyIsIHJlZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBiYWRfa2VybmVsX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgYmFkX2tlcm5lbF9wYyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKIAl1bnNpZ25lZCBsb25nICprc3A7CiAKIAlwcmludGsoS0VSTl9DUklUICJPT1BTOiBCb2d1cyBrZXJuZWwgUEMgWyUwMTZseF0gaW4gZmF1bHQgaGFuZGxlclxuIiwKIAkgICAgICAgcmVncy0+dHBjKTsKKwlwcmludGsoS0VSTl9DUklUICJPT1BTOiBGYXVsdCB3YXMgdG8gdmFkZHJbJWx4XVxuIiwgdmFkZHIpOwogCV9fYXNtX18oIm1vdiAlJXNwLCAlMCIgOiAiPXIiIChrc3ApKTsKIAlzaG93X3N0YWNrKGN1cnJlbnQsIGtzcCk7CiAJdW5oYW5kbGVkX2ZhdWx0KHJlZ3MtPnRwYywgY3VycmVudCwgcmVncyk7CkBAIC0xMzcsNyArMTM5LDcgQEAKIAlpZiAoIXB0ZV9wcmVzZW50KHB0ZSkpCiAJCWdvdG8gb3V0OwogCi0JcGEgID0gKHB0ZV92YWwocHRlKSAmIF9QQUdFX1BBRERSKTsKKwlwYSAgPSAocHRlX3BmbihwdGUpIDw8IFBBR0VfU0hJRlQpOwogCXBhICs9ICh0cGMgJiB+UEFHRV9NQVNLKTsKIAogCS8qIFVzZSBwaHlzIGJ5cGFzcyBzbyB3ZSBkb24ndCBwb2xsdXRlIGR0bGIvZGNhY2hlLiAqLwpAQCAtMjU3LDcgKzI1OSw3IEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgaW50IGluc24gPSAwOwogCWludCBzaV9jb2RlLCBmYXVsdF9jb2RlOwotCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIG1tX3JzczsKIAogCWZhdWx0X2NvZGUgPSBnZXRfdGhyZWFkX2ZhdWx0X2NvZGUoKTsKIApAQCAtMjgwLDcgKzI4Miw3IEBACiAJCSAgICAodHBjID49IE1PRFVMRVNfVkFERFIgJiYgdHBjIDwgTU9EVUxFU19FTkQpKSB7CiAJCQkvKiBWYWxpZCwgbm8gcHJvYmxlbXMuLi4gKi8KIAkJfSBlbHNlIHsKLQkJCWJhZF9rZXJuZWxfcGMocmVncyk7CisJCQliYWRfa2VybmVsX3BjKHJlZ3MsIGFkZHJlc3MpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtNDA2LDYgKzQwOCwyMCBAQAogCX0KIAogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwltbV9yc3MgPSBnZXRfbW1fcnNzKG1tKTsKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJbW1fcnNzIC09IChtbS0+Y29udGV4dC5odWdlX3B0ZV9jb3VudCAqIChIUEFHRV9TSVpFIC8gUEFHRV9TSVpFKSk7CisjZW5kaWYKKwlpZiAodW5saWtlbHkobW1fcnNzID49CisJCSAgICAgbW0tPmNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9CQVNFXS50c2JfcnNzX2xpbWl0KSkKKwkJdHNiX2dyb3cobW0sIE1NX1RTQl9CQVNFLCBtbV9yc3MpOworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwltbV9yc3MgPSBtbS0+Y29udGV4dC5odWdlX3B0ZV9jb3VudDsKKwlpZiAodW5saWtlbHkobW1fcnNzID49CisJCSAgICAgbW0tPmNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9IVUdFXS50c2JfcnNzX2xpbWl0KSkKKwkJdHNiX2dyb3cobW0sIE1NX1RTQl9IVUdFLCBtbV9yc3MpOworI2VuZGlmCiAJcmV0dXJuOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9nZW5lcmljLmMgYi9hcmNoL3NwYXJjNjQvbW0vZ2VuZXJpYy5jCmluZGV4IDU4MGI2M2QuLjhjYjA2MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9nZW5lcmljLmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2dlbmVyaWMuYwpAQCAtMTUsMTUgKzE1LDYgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi1zdGF0aWMgaW5saW5lIHB0ZV90IG1rX3B0ZV9pbyh1bnNpZ25lZCBsb25nIHBhZ2UsIHBncHJvdF90IHByb3QsIGludCBzcGFjZSkKLXsKLQlwdGVfdCBwdGU7Ci0JcHRlX3ZhbChwdGUpID0gKCgocGFnZSkgfCBwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfRSkgJgotCQkJfih1bnNpZ25lZCBsb25nKV9QQUdFX0NBQ0hFKTsKLQlwdGVfdmFsKHB0ZSkgfD0gKCgodW5zaWduZWQgbG9uZylzcGFjZSkgPDwgMzIpOwotCXJldHVybiBwdGU7Ci19Ci0KIC8qIFJlbWFwIElPIG1lbW9yeSwgdGhlIHNhbWUgd2F5IGFzIHJlbWFwX3Bmbl9yYW5nZSgpLCBidXQgdXNlCiAgKiB0aGUgb2JpbyBtZW1vcnkgc3BhY2UuCiAgKgpAQCAtNDgsMjQgKzM5LDI5IEBACiAJCXB0ZV90IGVudHJ5OwogCQl1bnNpZ25lZCBsb25nIGN1cmVuZCA9IGFkZHJlc3MgKyBQQUdFX1NJWkU7CiAJCQotCQllbnRyeSA9IG1rX3B0ZV9pbyhvZmZzZXQsIHByb3QsIHNwYWNlKTsKKwkJZW50cnkgPSBta19wdGVfaW8ob2Zmc2V0LCBwcm90LCBzcGFjZSwgUEFHRV9TSVpFKTsKIAkJaWYgKCEoYWRkcmVzcyAmIDB4ZmZmZikpIHsKLQkJCWlmICghKGFkZHJlc3MgJiAweDNmZmZmZikgJiYgIShvZmZzZXQgJiAweDNmZmZmZSkgJiYgZW5kID49IGFkZHJlc3MgKyAweDQwMDAwMCkgewotCQkJCWVudHJ5ID0gbWtfcHRlX2lvKG9mZnNldCwKLQkJCQkJCSAgX19wZ3Byb3QocGdwcm90X3ZhbCAocHJvdCkgfCBfUEFHRV9TWjRNQiksCi0JCQkJCQkgIHNwYWNlKTsKKwkJCWlmIChQQUdFX1NJWkUgPCAoNCAqIDEwMjQgKiAxMDI0KSAmJgorCQkJICAgICEoYWRkcmVzcyAmIDB4M2ZmZmZmKSAmJgorCQkJICAgICEob2Zmc2V0ICYgMHgzZmZmZmUpICYmCisJCQkgICAgZW5kID49IGFkZHJlc3MgKyAweDQwMDAwMCkgeworCQkJCWVudHJ5ID0gbWtfcHRlX2lvKG9mZnNldCwgcHJvdCwgc3BhY2UsCisJCQkJCQkgIDQgKiAxMDI0ICogMTAyNCk7CiAJCQkJY3VyZW5kID0gYWRkcmVzcyArIDB4NDAwMDAwOwogCQkJCW9mZnNldCArPSAweDQwMDAwMDsKLQkJCX0gZWxzZSBpZiAoIShhZGRyZXNzICYgMHg3ZmZmZikgJiYgIShvZmZzZXQgJiAweDdmZmZlKSAmJiBlbmQgPj0gYWRkcmVzcyArIDB4ODAwMDApIHsKLQkJCQllbnRyeSA9IG1rX3B0ZV9pbyhvZmZzZXQsCi0JCQkJCQkgIF9fcGdwcm90KHBncHJvdF92YWwgKHByb3QpIHwgX1BBR0VfU1o1MTJLKSwKLQkJCQkJCSAgc3BhY2UpOworCQkJfSBlbHNlIGlmIChQQUdFX1NJWkUgPCAoNTEyICogMTAyNCkgJiYKKwkJCQkgICAhKGFkZHJlc3MgJiAweDdmZmZmKSAmJgorCQkJCSAgICEob2Zmc2V0ICYgMHg3ZmZmZSkgJiYKKwkJCQkgICBlbmQgPj0gYWRkcmVzcyArIDB4ODAwMDApIHsKKwkJCQllbnRyeSA9IG1rX3B0ZV9pbyhvZmZzZXQsIHByb3QsIHNwYWNlLAorCQkJCQkJICA1MTIgKiAxMDI0ICogMTAyNCk7CiAJCQkJY3VyZW5kID0gYWRkcmVzcyArIDB4ODAwMDA7CiAJCQkJb2Zmc2V0ICs9IDB4ODAwMDA7Ci0JCQl9IGVsc2UgaWYgKCEob2Zmc2V0ICYgMHhmZmZlKSAmJiBlbmQgPj0gYWRkcmVzcyArIDB4MTAwMDApIHsKLQkJCQllbnRyeSA9IG1rX3B0ZV9pbyhvZmZzZXQsCi0JCQkJCQkgIF9fcGdwcm90KHBncHJvdF92YWwgKHByb3QpIHwgX1BBR0VfU1o2NEspLAotCQkJCQkJICBzcGFjZSk7CisJCQl9IGVsc2UgaWYgKFBBR0VfU0laRSA8ICg2NCAqIDEwMjQpICYmCisJCQkJICAgIShvZmZzZXQgJiAweGZmZmUpICYmCisJCQkJICAgZW5kID49IGFkZHJlc3MgKyAweDEwMDAwKSB7CisJCQkJZW50cnkgPSBta19wdGVfaW8ob2Zmc2V0LCBwcm90LCBzcGFjZSwKKwkJCQkJCSAgNjQgKiAxMDI0KTsKIAkJCQljdXJlbmQgPSBhZGRyZXNzICsgMHgxMDAwMDsKIAkJCQlvZmZzZXQgKz0gMHgxMDAwMDsKIAkJCX0gZWxzZQpAQCAtMTQ0LDcgKzE0MCw2IEBACiAJdm1hLT52bV9mbGFncyB8PSBWTV9JTyB8IFZNX1JFU0VSVkVEIHwgVk1fUEZOTUFQOwogCXZtYS0+dm1fcGdvZmYgPSBwaHlzX2Jhc2UgPj4gUEFHRV9TSElGVDsKIAotCXByb3QgPSBfX3BncHJvdChwZ19pb2JpdHMpOwogCW9mZnNldCAtPSBmcm9tOwogCWRpciA9IHBnZF9vZmZzZXQobW0sIGZyb20pOwogCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYmVnLCBlbmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3NwYXJjNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA2MjVjYmIzLi4wNzQ2MjBkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBTUEFSQzY0IEh1Z2UgVExCIHBhZ2Ugc3VwcG9ydC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA2IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0yMiw2ICsyMiwxNzUgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCisvKiBTbGlnaHRseSBzaW1wbGlmaWVkIGZyb20gdGhlIG5vbi1odWdlcGFnZSB2YXJpYW50IGJlY2F1c2UgYnkKKyAqIGRlZmluaXRpb24gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhbnkgcGFnZSBjb2xvcmluZyBzdHVmZgorICovCisjZGVmaW5lIFZBX0VYQ0xVREVfU1RBUlQgKDB4MDAwMDA4MDAwMDAwMDAwMFVMIC0gKDFVTCA8PCAzMlVMKSkKKyNkZWZpbmUgVkFfRVhDTFVERV9FTkQgICAoMHhmZmZmZjgwMDAwMDAwMDAwVUwgKyAoMVVMIDw8IDMyVUwpKQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhX2JvdHRvbXVwKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIHBnb2ZmLAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7CisJdW5zaWduZWQgbG9uZyB0YXNrX3NpemUgPSBUQVNLX1NJWkU7CisJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOworCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkKKwkJdGFza19zaXplID0gU1RBQ0tfVE9QMzI7CisJaWYgKHVubGlrZWx5KGxlbiA+PSBWQV9FWENMVURFX1NUQVJUKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAobGVuID4gbW0tPmNhY2hlZF9ob2xlX3NpemUpIHsKKwkgICAgICAgIHN0YXJ0X2FkZHIgPSBhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZTsKKwl9IGVsc2UgeworCSAgICAgICAgc3RhcnRfYWRkciA9IGFkZHIgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJICAgICAgICBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CisJfQorCisJdGFza19zaXplIC09IGxlbjsKKworZnVsbF9zZWFyY2g6CisJYWRkciA9IEFMSUdOKGFkZHIsIEhQQUdFX1NJWkUpOworCisJZm9yICh2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7IDsgdm1hID0gdm1hLT52bV9uZXh0KSB7CisJCS8qIEF0IHRoaXMgcG9pbnQ6ICAoIXZtYSB8fCBhZGRyIDwgdm1hLT52bV9lbmQpLiAqLworCQlpZiAoYWRkciA8IFZBX0VYQ0xVREVfU1RBUlQgJiYKKwkJICAgIChhZGRyICsgbGVuKSA+PSBWQV9FWENMVURFX1NUQVJUKSB7CisJCQlhZGRyID0gVkFfRVhDTFVERV9FTkQ7CisJCQl2bWEgPSBmaW5kX3ZtYShtbSwgVkFfRVhDTFVERV9FTkQpOworCQl9CisJCWlmICh1bmxpa2VseSh0YXNrX3NpemUgPCBhZGRyKSkgeworCQkJaWYgKHN0YXJ0X2FkZHIgIT0gVEFTS19VTk1BUFBFRF9CQVNFKSB7CisJCQkJc3RhcnRfYWRkciA9IGFkZHIgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJCQkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSAwOworCQkJCWdvdG8gZnVsbF9zZWFyY2g7CisJCQl9CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlpZiAobGlrZWx5KCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkgeworCQkJLyoKKwkJCSAqIFJlbWVtYmVyIHRoZSBwbGFjZSB3aGVyZSB3ZSBzdG9wcGVkIHRoZSBzZWFyY2g6CisJCQkgKi8KKwkJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBhZGRyICsgbGVuOworCQkJcmV0dXJuIGFkZHI7CisJCX0KKwkJaWYgKGFkZHIgKyBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSA8IHZtYS0+dm1fc3RhcnQpCisJCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKKworCQlhZGRyID0gQUxJR04odm1hLT52bV9lbmQsIEhQQUdFX1NJWkUpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK2h1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyMCwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCSAgY29uc3QgdW5zaWduZWQgbG9uZyBwZ29mZiwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBhZGRyMDsKKworCS8qIFRoaXMgc2hvdWxkIG9ubHkgZXZlciBydW4gZm9yIDMyLWJpdCBwcm9jZXNzZXMuICAqLworCUJVR19PTighdGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKTsKKworCS8qIGNoZWNrIGlmIGZyZWVfYXJlYV9jYWNoZSBpcyB1c2VmdWwgZm9yIHVzICovCisJaWYgKGxlbiA8PSBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgeworIAkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKKyAJCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBtbS0+bW1hcF9iYXNlOworIAl9CisKKwkvKiBlaXRoZXIgbm8gYWRkcmVzcyByZXF1ZXN0ZWQgb3IgY2FuJ3QgZml0IGluIHJlcXVlc3RlZCBhZGRyZXNzIGhvbGUgKi8KKwlhZGRyID0gbW0tPmZyZWVfYXJlYV9jYWNoZSAmIEhQQUdFX01BU0s7CisKKwkvKiBtYWtlIHN1cmUgaXQgY2FuIGZpdCBpbiB0aGUgcmVtYWluaW5nIGFkZHJlc3Mgc3BhY2UgKi8KKwlpZiAobGlrZWx5KGFkZHIgPiBsZW4pKSB7CisJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyLWxlbik7CisJCWlmICghdm1hIHx8IGFkZHIgPD0gdm1hLT52bV9zdGFydCkgeworCQkJLyogcmVtZW1iZXIgdGhlIGFkZHJlc3MgYXMgYSBoaW50IGZvciBuZXh0IHRpbWUgKi8KKwkJCXJldHVybiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHItbGVuKTsKKwkJfQorCX0KKworCWlmICh1bmxpa2VseShtbS0+bW1hcF9iYXNlIDwgbGVuKSkKKwkJZ290byBib3R0b211cDsKKworCWFkZHIgPSAobW0tPm1tYXBfYmFzZS1sZW4pICYgSFBBR0VfTUFTSzsKKworCWRvIHsKKwkJLyoKKwkJICogTG9va3VwIGZhaWx1cmUgbWVhbnMgbm8gdm1hIGlzIGFib3ZlIHRoaXMgYWRkcmVzcywKKwkJICogZWxzZSBpZiBuZXcgcmVnaW9uIGZpdHMgYmVsb3cgdm1hLT52bV9zdGFydCwKKwkJICogcmV0dXJuIHdpdGggc3VjY2VzczoKKwkJICovCisJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKKwkJaWYgKGxpa2VseSghdm1hIHx8IGFkZHIrbGVuIDw9IHZtYS0+dm1fc3RhcnQpKSB7CisJCQkvKiByZW1lbWJlciB0aGUgYWRkcmVzcyBhcyBhIGhpbnQgZm9yIG5leHQgdGltZSAqLworCQkJcmV0dXJuIChtbS0+ZnJlZV9hcmVhX2NhY2hlID0gYWRkcik7CisJCX0KKworIAkJLyogcmVtZW1iZXIgdGhlIGxhcmdlc3QgaG9sZSB3ZSBzYXcgc28gZmFyICovCisgCQlpZiAoYWRkciArIG1tLT5jYWNoZWRfaG9sZV9zaXplIDwgdm1hLT52bV9zdGFydCkKKyAJCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKKworCQkvKiB0cnkganVzdCBiZWxvdyB0aGUgY3VycmVudCB2bWEtPnZtX3N0YXJ0ICovCisJCWFkZHIgPSAodm1hLT52bV9zdGFydC1sZW4pICYgSFBBR0VfTUFTSzsKKwl9IHdoaWxlIChsaWtlbHkobGVuIDwgdm1hLT52bV9zdGFydCkpOworCitib3R0b211cDoKKwkvKgorCSAqIEEgZmFpbGVkIG1tYXAoKSB2ZXJ5IGxpa2VseSBjYXVzZXMgYXBwbGljYXRpb24gZmFpbHVyZSwKKwkgKiBzbyBmYWxsIGJhY2sgdG8gdGhlIGJvdHRvbS11cCBmdW5jdGlvbiBoZXJlLiBUaGlzIHNjZW5hcmlvCisJICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpCisJICogYWxsb2NhdGlvbnMuCisJICovCisJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB+MFVMOworICAJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwlhZGRyID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MpOworCS8qCisJICogUmVzdG9yZSB0aGUgdG9wZG93biBiYXNlOgorCSAqLworCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBtbS0+bW1hcF9iYXNlOworCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gfjBVTDsKKworCXJldHVybiBhZGRyOworfQorCit1bnNpZ25lZCBsb25nCitodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyB0YXNrX3NpemUgPSBUQVNLX1NJWkU7CisKKwlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQorCQl0YXNrX3NpemUgPSBTVEFDS19UT1AzMjsKKworCWlmIChsZW4gJiB+SFBBR0VfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGxlbiA+IHRhc2tfc2l6ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWRkcikgeworCQlhZGRyID0gQUxJR04oYWRkciwgSFBBR0VfU0laRSk7CisJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKKwkJaWYgKHRhc2tfc2l6ZSAtIGxlbiA+PSBhZGRyICYmCisJCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQorCQkJcmV0dXJuIGFkZHI7CisJfQorCWlmIChtbS0+Z2V0X3VubWFwcGVkX2FyZWEgPT0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSkKKwkJcmV0dXJuIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFfYm90dG9tdXAoZmlsZSwgYWRkciwgbGVuLAorCQkJCXBnb2ZmLCBmbGFncyk7CisJZWxzZQorCQlyZXR1cm4gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbGUsIGFkZHIsIGxlbiwKKwkJCQlwZ29mZiwgZmxhZ3MpOworfQorCiBwdGVfdCAqaHVnZV9wdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOwpAQCAtMzAsMTMgKzE5OSwxMSBAQAogCXB0ZV90ICpwdGUgPSBOVUxMOwogCiAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7Ci0JaWYgKHBnZCkgewotCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7Ci0JCWlmIChwdWQpIHsKLQkJCXBtZCA9IHBtZF9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKLQkJCWlmIChwbWQpCi0JCQkJcHRlID0gcHRlX2FsbG9jX21hcChtbSwgcG1kLCBhZGRyKTsKLQkJfQorCXB1ZCA9IHB1ZF9hbGxvYyhtbSwgcGdkLCBhZGRyKTsKKwlpZiAocHVkKSB7CisJCXBtZCA9IHBtZF9hbGxvYyhtbSwgcHVkLCBhZGRyKTsKKwkJaWYgKHBtZCkKKwkJCXB0ZSA9IHB0ZV9hbGxvY19tYXAobW0sIHBtZCwgYWRkcik7CiAJfQogCXJldHVybiBwdGU7CiB9CkBAIC00OCwyNSArMjE1LDI4IEBACiAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlID0gTlVMTDsKIAorCWFkZHIgJj0gSFBBR0VfTUFTSzsKKwogCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwotCWlmIChwZ2QpIHsKKwlpZiAoIXBnZF9ub25lKCpwZ2QpKSB7CiAJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKLQkJaWYgKHB1ZCkgeworCQlpZiAoIXB1ZF9ub25lKCpwdWQpKSB7CiAJCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7Ci0JCQlpZiAocG1kKQorCQkJaWYgKCFwbWRfbm9uZSgqcG1kKSkKIAkJCQlwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHIpOwogCQl9CiAJfQogCXJldHVybiBwdGU7CiB9CiAKLSNkZWZpbmUgbWtfcHRlX2h1Z2UoZW50cnkpIGRvIHsgcHRlX3ZhbChlbnRyeSkgfD0gX1BBR0VfU1pIVUdFOyB9IHdoaWxlICgwKQotCiB2b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSkKIHsKIAlpbnQgaTsKIAorCWlmICghcHRlX3ByZXNlbnQoKnB0ZXApICYmIHB0ZV9wcmVzZW50KGVudHJ5KSkKKwkJbW0tPmNvbnRleHQuaHVnZV9wdGVfY291bnQrKzsKKwogCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBIVUdFVExCX1BBR0VfT1JERVIpOyBpKyspIHsKIAkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgZW50cnkpOwogCQlwdGVwKys7CkBAIC04Miw2ICsyNTIsOCBAQAogCWludCBpOwogCiAJZW50cnkgPSAqcHRlcDsKKwlpZiAocHRlX3ByZXNlbnQoZW50cnkpKQorCQltbS0+Y29udGV4dC5odWdlX3B0ZV9jb3VudC0tOwogCiAJZm9yIChpID0gMDsgaSA8ICgxIDw8IEhVR0VUTEJfUEFHRV9PUkRFUik7IGkrKykgewogCQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwpAQCAtOTIsMTggKzI2NCw2IEBACiAJcmV0dXJuIGVudHJ5OwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHByb3BlciBhbGlnbm1lbnQgb2YgaW5wdXQgYWRkciBhbmQgbGVuIHBhcmFtZXRlcnMuCi0gKi8KLWludCBpc19hbGlnbmVkX2h1Z2VwYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JaWYgKGxlbiAmIH5IUEFHRV9NQVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoYWRkciAmIH5IUEFHRV9NQVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLQogc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZSkKIHsKQEAgLTEzMSw2ICsyOTEsMTUgQEAKIAogdm9pZCBodWdldGxiX3ByZWZhdWx0X2FyY2hfaG9vayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKwlzdHJ1Y3QgdHNiX2NvbmZpZyAqdHAgPSAmbW0tPmNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9IVUdFXTsKKworCWlmIChsaWtlbHkodHAtPnRzYiAhPSBOVUxMKSkKKwkJcmV0dXJuOworCisJdHNiX2dyb3cobW0sIE1NX1RTQl9IVUdFLCAwKTsKKwl0c2JfY29udGV4dF9zd2l0Y2gobW0pOworCXNtcF90c2Jfc3luYyhtbSk7CisKIAkvKiBPbiBVbHRyYVNQQVJDLUlJSSsgYW5kIGxhdGVyLCBjb25maWd1cmUgdGhlIHNlY29uZCBoYWxmIG9mCiAJICogdGhlIERhdGEtVExCIGZvciBodWdlIHBhZ2VzLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL2luaXQuYyBiL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMKaW5kZXggMWU0NGVlMi4uMTUzOWE4MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL2luaXQuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jCkBAIC02LDYgKzYsNyBAQAogICovCiAgCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTM5LDkgKzQwLDI3IEBACiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS90c2IuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogCiBleHRlcm4gdm9pZCBkZXZpY2Vfc2Nhbih2b2lkKTsKIAorI2RlZmluZSBNQVhfUEhZU19BRERSRVNTCSgxVUwgPDwgNDJVTCkKKyNkZWZpbmUgS1BURV9CSVRNQVBfQ0hVTktfU1oJKDI1NlVMICogMTAyNFVMICogMTAyNFVMKQorI2RlZmluZSBLUFRFX0JJVE1BUF9CWVRFUwlcCisJKChNQVhfUEhZU19BRERSRVNTIC8gS1BURV9CSVRNQVBfQ0hVTktfU1opIC8gOCkKKwordW5zaWduZWQgbG9uZyBrZXJuX2xpbmVhcl9wdGVfeG9yWzJdIF9fcmVhZF9tb3N0bHk7CisKKy8qIEEgYml0bWFwLCBvbmUgYml0IGZvciBldmVyeSAyNTZNQiBvZiBwaHlzaWNhbCBtZW1vcnkuICBJZiB0aGUgYml0CisgKiBpcyBjbGVhciwgd2Ugc2hvdWxkIHVzZSBhIDRNQiBwYWdlICh2aWEga2Vybl9saW5lYXJfcHRlX3hvclswXSkgZWxzZQorICogaWYgc2V0IHdlIHNob3VsZCB1c2UgYSAyNTZNQiBwYWdlICh2aWEga2Vybl9saW5lYXJfcHRlX3hvclsxXSkuCisgKi8KK3Vuc2lnbmVkIGxvbmcga3B0ZV9saW5lYXJfYml0bWFwW0tQVEVfQklUTUFQX0JZVEVTIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKworLyogQSBzcGVjaWFsIGtlcm5lbCBUU0IgZm9yIDRNQiBhbmQgMjU2TUIgbGluZWFyIG1hcHBpbmdzLiAgKi8KK3N0cnVjdCB0c2Igc3dhcHBlcl80bV90c2JbS0VSTkVMX1RTQjRNX05FTlRSSUVTXTsKKwogI2RlZmluZSBNQVhfQkFOS1MJMzIKIAogc3RhdGljIHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzIHBhdmFpbFtNQVhfQkFOS1NdIF9faW5pdGRhdGE7CkBAIC0xMTEsMTEgKzEzMCw5IEBACiAKIHVuc2lnbmVkIGxvbmcgKnNwYXJjNjRfdmFsaWRfYWRkcl9iaXRtYXAgX19yZWFkX21vc3RseTsKIAotLyogVWdseSwgYnV0IG5lY2Vzc2FyeS4uLiAtRGF2ZU0gKi8KLXVuc2lnbmVkIGxvbmcgcGh5c19iYXNlIF9fcmVhZF9tb3N0bHk7CisvKiBLZXJuZWwgcGh5c2ljYWwgYWRkcmVzcyBiYXNlIGFuZCBzaXplIGluIGJ5dGVzLiAgKi8KIHVuc2lnbmVkIGxvbmcga2Vybl9iYXNlIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBsb25nIGtlcm5fc2l6ZSBfX3JlYWRfbW9zdGx5OwotdW5zaWduZWQgbG9uZyBwZm5fYmFzZSBfX3JlYWRfbW9zdGx5OwogCiAvKiBnZXRfbmV3X21tdV9jb250ZXh0KCkgdXNlcyAiY2FjaGUgKyAxIi4gICovCiBERUZJTkVfU1BJTkxPQ0soY3R4X2FsbG9jX2xvY2spOwpAQCAtMTQxLDI0ICsxNTgsMjggQEAKIAogaW50IGJpZ2tlcm5lbCA9IDA7CiAKLS8qIFhYWCBUdW5lIHRoaXMuLi4gKi8KLSNkZWZpbmUgUEdUX0NBQ0hFX0xPVwkyNQotI2RlZmluZSBQR1RfQ0FDSEVfSElHSAk1MAora21lbV9jYWNoZV90ICpwZ3RhYmxlX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAKLXZvaWQgY2hlY2tfcGd0X2NhY2hlKHZvaWQpCitzdGF0aWMgdm9pZCB6ZXJvX2N0b3Iodm9pZCAqYWRkciwga21lbV9jYWNoZV90ICpjYWNoZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAocGd0YWJsZV9jYWNoZV9zaXplID4gUEdUX0NBQ0hFX0hJR0gpIHsKLQkJZG8gewotCQkJaWYgKHBnZF9xdWlja2xpc3QpCi0JCQkJZnJlZV9wZ2Rfc2xvdyhnZXRfcGdkX2Zhc3QoKSk7Ci0JCQlpZiAocHRlX3F1aWNrbGlzdFswXSkKLQkJCQlmcmVlX3B0ZV9zbG93KHB0ZV9hbGxvY19vbmVfZmFzdChOVUxMLCAwKSk7Ci0JCQlpZiAocHRlX3F1aWNrbGlzdFsxXSkKLQkJCQlmcmVlX3B0ZV9zbG93KHB0ZV9hbGxvY19vbmVfZmFzdChOVUxMLCAxIDw8IChQQUdFX1NISUZUICsgMTApKSk7Ci0JCX0gd2hpbGUgKHBndGFibGVfY2FjaGVfc2l6ZSA+IFBHVF9DQUNIRV9MT1cpOworCWNsZWFyX3BhZ2UoYWRkcik7Cit9CisKK2V4dGVybiB2b2lkIHRzYl9jYWNoZV9pbml0KHZvaWQpOworCit2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKQoreworCXBndGFibGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicGd0YWJsZV9jYWNoZSIsCisJCQkJCSAgUEFHRV9TSVpFLCBQQUdFX1NJWkUsCisJCQkJCSAgU0xBQl9IV0NBQ0hFX0FMSUdOIHwKKwkJCQkJICBTTEFCX01VU1RfSFdDQUNIRV9BTElHTiwKKwkJCQkJICB6ZXJvX2N0b3IsCisJCQkJCSAgTlVMTCk7CisJaWYgKCFwZ3RhYmxlX2NhY2hlKSB7CisJCXByb21fcHJpbnRmKCJDb3VsZCBub3QgY3JlYXRlIHBndGFibGVfY2FjaGVcbiIpOworCQlwcm9tX2hhbHQoKTsKIAl9Ci0JcHJlZW1wdF9lbmFibGUoKTsKKwl0c2JfY2FjaGVfaW5pdCgpOwogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0RDRkxVU0gKQEAgLTE2OCw4ICsxODksOSBAQAogI2VuZGlmCiAjZW5kaWYKIAotX19pbmxpbmVfXyB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlX2ltcGwoc3RydWN0IHBhZ2UgKnBhZ2UpCitpbmxpbmUgdm9pZCBmbHVzaF9kY2FjaGVfcGFnZV9pbXBsKHN0cnVjdCBwYWdlICpwYWdlKQogeworCUJVR19PTih0bGJfdHlwZSA9PSBoeXBlcnZpc29yKTsKICNpZmRlZiBDT05GSUdfREVCVUdfRENGTFVTSAogCWF0b21pY19pbmMoJmRjcGFnZV9mbHVzaGVzKTsKICNlbmRpZgpAQCAtMTg2LDggKzIwOCw4IEBACiB9CiAKICNkZWZpbmUgUEdfZGNhY2hlX2RpcnR5CQlQR19hcmNoXzEKLSNkZWZpbmUgUEdfZGNhY2hlX2NwdV9zaGlmdAkyNAotI2RlZmluZSBQR19kY2FjaGVfY3B1X21hc2sJKDI1NiAtIDEpCisjZGVmaW5lIFBHX2RjYWNoZV9jcHVfc2hpZnQJMjRVTAorI2RlZmluZSBQR19kY2FjaGVfY3B1X21hc2sJKDI1NlVMIC0gMVVMKQogCiAjaWYgTlJfQ1BVUyA+IDI1NgogI2Vycm9yIEQtY2FjaGUgZGlydHkgdHJhY2tpbmcgYW5kIHRocmVhZF9pbmZvLT5jcHUgbmVlZCBmaXhpbmcgZm9yID4gMjU2IGNwdXMKQEAgLTI0MywzMiArMjY1LDc4IEBACiAJCQkgICAgIDogImcxIiwgImc3Iik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB0c2JfaW5zZXJ0KHN0cnVjdCB0c2IgKmVudCwgdW5zaWduZWQgbG9uZyB0YWcsIHVuc2lnbmVkIGxvbmcgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgdHNiX2FkZHIgPSAodW5zaWduZWQgbG9uZykgZW50OworCisJaWYgKHRsYl90eXBlID09IGNoZWV0YWhfcGx1cyB8fCB0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQl0c2JfYWRkciA9IF9fcGEodHNiX2FkZHIpOworCisJX190c2JfaW5zZXJ0KHRzYl9hZGRyLCB0YWcsIHB0ZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgX1BBR0VfQUxMX1NaX0JJVFMgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGxvbmcgX1BBR0VfU1pCSVRTIF9fcmVhZF9tb3N0bHk7CisKIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0JdW5zaWduZWQgbG9uZyBwZ19mbGFnczsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgdHNiICp0c2I7CisJdW5zaWduZWQgbG9uZyB0YWcsIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LCB0c2JfaGFzaF9zaGlmdDsKIAotCXBmbiA9IHB0ZV9wZm4ocHRlKTsKLQlpZiAocGZuX3ZhbGlkKHBmbikgJiYKLQkgICAgKHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pLCBwYWdlX21hcHBpbmcocGFnZSkpICYmCi0JICAgICgocGdfZmxhZ3MgPSBwYWdlLT5mbGFncykgJiAoMVVMIDw8IFBHX2RjYWNoZV9kaXJ0eSkpKSB7Ci0JCWludCBjcHUgPSAoKHBnX2ZsYWdzID4+IFBHX2RjYWNoZV9jcHVfc2hpZnQpICYKLQkJCSAgIFBHX2RjYWNoZV9jcHVfbWFzayk7Ci0JCWludCB0aGlzX2NwdSA9IGdldF9jcHUoKTsKKwlpZiAodGxiX3R5cGUgIT0gaHlwZXJ2aXNvcikgeworCQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKKwkJdW5zaWduZWQgbG9uZyBwZ19mbGFnczsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQkJLyogVGhpcyBpcyBqdXN0IHRvIG9wdGltaXplIGF3YXkgc29tZSBmdW5jdGlvbiBjYWxscwotCQkgKiBpbiB0aGUgU01QIGNhc2UuCi0JCSAqLwotCQlpZiAoY3B1ID09IHRoaXNfY3B1KQotCQkJZmx1c2hfZGNhY2hlX3BhZ2VfaW1wbChwYWdlKTsKLQkJZWxzZQotCQkJc21wX2ZsdXNoX2RjYWNoZV9wYWdlX2ltcGwocGFnZSwgY3B1KTsKKwkJaWYgKHBmbl92YWxpZChwZm4pICYmCisJCSAgICAocGFnZSA9IHBmbl90b19wYWdlKHBmbiksIHBhZ2VfbWFwcGluZyhwYWdlKSkgJiYKKwkJICAgICgocGdfZmxhZ3MgPSBwYWdlLT5mbGFncykgJiAoMVVMIDw8IFBHX2RjYWNoZV9kaXJ0eSkpKSB7CisJCQlpbnQgY3B1ID0gKChwZ19mbGFncyA+PiBQR19kY2FjaGVfY3B1X3NoaWZ0KSAmCisJCQkJICAgUEdfZGNhY2hlX2NwdV9tYXNrKTsKKwkJCWludCB0aGlzX2NwdSA9IGdldF9jcHUoKTsKIAotCQljbGVhcl9kY2FjaGVfZGlydHlfY3B1KHBhZ2UsIGNwdSk7CisJCQkvKiBUaGlzIGlzIGp1c3QgdG8gb3B0aW1pemUgYXdheSBzb21lIGZ1bmN0aW9uIGNhbGxzCisJCQkgKiBpbiB0aGUgU01QIGNhc2UuCisJCQkgKi8KKwkJCWlmIChjcHUgPT0gdGhpc19jcHUpCisJCQkJZmx1c2hfZGNhY2hlX3BhZ2VfaW1wbChwYWdlKTsKKwkJCWVsc2UKKwkJCQlzbXBfZmx1c2hfZGNhY2hlX3BhZ2VfaW1wbChwYWdlLCBjcHUpOwogCi0JCXB1dF9jcHUoKTsKKwkJCWNsZWFyX2RjYWNoZV9kaXJ0eV9jcHUocGFnZSwgY3B1KTsKKworCQkJcHV0X2NwdSgpOworCQl9CiAJfQorCisJbW0gPSB2bWEtPnZtX21tOworCisJdHNiX2luZGV4ID0gTU1fVFNCX0JBU0U7CisJdHNiX2hhc2hfc2hpZnQgPSBQQUdFX1NISUZUOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1tLT5jb250ZXh0LmxvY2ssIGZsYWdzKTsKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwlpZiAobW0tPmNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9IVUdFXS50c2IgIT0gTlVMTCkgeworCQlpZiAoKHRsYl90eXBlID09IGh5cGVydmlzb3IgJiYKKwkJICAgICAocHRlX3ZhbChwdGUpICYgX1BBR0VfU1pBTExfNFYpID09IF9QQUdFX1NaSFVHRV80VikgfHwKKwkJICAgICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yICYmCisJCSAgICAgKHB0ZV92YWwocHRlKSAmIF9QQUdFX1NaQUxMXzRVKSA9PSBfUEFHRV9TWkhVR0VfNFUpKSB7CisJCQl0c2JfaW5kZXggPSBNTV9UU0JfSFVHRTsKKwkJCXRzYl9oYXNoX3NoaWZ0ID0gSFBBR0VfU0hJRlQ7CisJCX0KKwl9CisjZW5kaWYKKworCXRzYiA9IG1tLT5jb250ZXh0LnRzYl9ibG9ja1t0c2JfaW5kZXhdLnRzYjsKKwl0c2IgKz0gKChhZGRyZXNzID4+IHRzYl9oYXNoX3NoaWZ0KSAmCisJCShtbS0+Y29udGV4dC50c2JfYmxvY2tbdHNiX2luZGV4XS50c2JfbmVudHJpZXMgLSAxVUwpKTsKKwl0YWcgPSAoYWRkcmVzcyA+PiAyMlVMKTsKKwl0c2JfaW5zZXJ0KHRzYiwgdGFnLCBwdGVfdmFsKHB0ZSkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMjc2LDYgKzM0NCw5IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJaW50IHRoaXNfY3B1OwogCisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCXJldHVybjsKKwogCS8qIERvIG5vdCBib3RoZXIgd2l0aCB0aGUgZXhwZW5zaXZlIEQtY2FjaGUgZmx1c2ggaWYgaXQKIAkgKiBpcyBtZXJlbHkgdGhlIHplcm8gcGFnZS4gIFRoZSAnYmlnY29yZScgdGVzdGNhc2UgaW4gR0RCCiAJICogY2F1c2VzIHRoaXMgY2FzZSB0byBydW4gbWlsbGlvbnMgb2YgdGltZXMuCkBAIC0zMTEsNyArMzgyLDcgQEAKIAogdm9pZCBfX2twcm9iZXMgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCS8qIENoZWV0YWggaGFzIGNvaGVyZW50IEktY2FjaGUuICovCisJLyogQ2hlZXRhaCBhbmQgSHlwZXJ2aXNvciBwbGF0Zm9ybSBjcHVzIGhhdmUgY29oZXJlbnQgSS1jYWNoZS4gKi8KIAlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpIHsKIAkJdW5zaWduZWQgbG9uZyBrYWRkcjsKIApAQCAtMzIwLDE2ICszOTEsNiBAQAogCX0KIH0KIAotdW5zaWduZWQgbG9uZyBwYWdlX3RvX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpICgocGFnZSAtIG1lbV9tYXApICsgcGZuX2Jhc2UpOwotfQotCi1zdHJ1Y3QgcGFnZSAqcGZuX3RvX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JcmV0dXJuIChtZW1fbWFwICsgKHBmbiAtIHBmbl9iYXNlKSk7Ci19Ci0KIHZvaWQgc2hvd19tZW0odm9pZCkKIHsKIAlwcmludGsoIk1lbS1pbmZvOlxuIik7CkBAIC0zMzgsNyArMzk5LDYgQEAKIAkgICAgICAgbnJfc3dhcF9wYWdlcyA8PCAoUEFHRV9TSElGVC0xMCkpOwogCXByaW50aygiJWxkIHBhZ2VzIG9mIFJBTVxuIiwgbnVtX3BoeXNwYWdlcyk7CiAJcHJpbnRrKCIlZCBmcmVlIHBhZ2VzXG4iLCBucl9mcmVlX3BhZ2VzKCkpOwotCXByaW50aygiJWQgcGFnZXMgaW4gcGFnZSB0YWJsZSBjYWNoZVxuIixwZ3RhYmxlX2NhY2hlX3NpemUpOwogfQogCiB2b2lkIG1tdV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTM0OSw2ICs0MDksOCBAQAogCQlzZXFfcHJpbnRmKG0sICJNTVUgVHlwZVx0OiBDaGVldGFoK1xuIik7CiAJZWxzZSBpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpCiAJCXNlcV9wcmludGYobSwgIk1NVSBUeXBlXHQ6IFNwaXRmaXJlXG4iKTsKKwllbHNlIGlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQlzZXFfcHJpbnRmKG0sICJNTVUgVHlwZVx0OiBIeXBlcnZpc29yIChzdW40dilcbiIpOwogCWVsc2UKIAkJc2VxX3ByaW50ZihtLCAiTU1VIFR5cGVcdDogPz8/XG4iKTsKIApAQCAtMzcxLDQ1ICs0MzMsMTMgQEAKIC8qIEV4cG9ydGVkIGZvciBrZXJuZWwgVExCIG1pc3MgaGFuZGxpbmcgaW4ga3RsYi5TICovCiBzdHJ1Y3QgbGludXhfcHJvbV90cmFuc2xhdGlvbiBwcm9tX3RyYW5zWzUxMl0gX19yZWFkX21vc3RseTsKIHVuc2lnbmVkIGludCBwcm9tX3RyYW5zX2VudHMgX19yZWFkX21vc3RseTsKLXVuc2lnbmVkIGludCBzd2FwcGVyX3BnZF96ZXJvIF9fcmVhZF9tb3N0bHk7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHByb21fYm9vdF9wYWdlOwotZXh0ZXJuIHZvaWQgcHJvbV9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNwYWdlLCB1bnNpZ25lZCBsb25nIHZpcnRwYWdlLCBpbnQgbW11X2loYW5kbGUpOwotZXh0ZXJuIGludCBwcm9tX2dldF9tbXVfaWhhbmRsZSh2b2lkKTsKLWV4dGVybiB2b2lkIHJlZ2lzdGVyX3Byb21fY2FsbGJhY2tzKHZvaWQpOwogCiAvKiBFeHBvcnRlZCBmb3IgU01QIGJvb3R1cCBwdXJwb3Nlcy4gKi8KIHVuc2lnbmVkIGxvbmcga2Vybl9sb2NrZWRfdHRlX2RhdGE7CiAKLS8qCi0gKiBUcmFuc2xhdGUgUFJPTSdzIG1hcHBpbmcgd2UgY2FwdHVyZSBhdCBib290IHRpbWUgaW50byBwaHlzaWNhbCBhZGRyZXNzLgotICogVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgb25seSBzZXQgZnJvbSBwcm9tX2NhbGxiYWNrKCkgaW52b2NhdGlvbnMuCi0gKi8KLXVuc2lnbmVkIGxvbmcgcHJvbV92aXJ0X3RvX3BoeXModW5zaWduZWQgbG9uZyBwcm9tdmEsIGludCAqZXJyb3IpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJvbV90cmFuc19lbnRzOyBpKyspIHsKLQkJc3RydWN0IGxpbnV4X3Byb21fdHJhbnNsYXRpb24gKnAgPSAmcHJvbV90cmFuc1tpXTsKLQotCQlpZiAocHJvbXZhID49IHAtPnZpcnQgJiYKLQkJICAgIHByb212YSA8IChwLT52aXJ0ICsgcC0+c2l6ZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHAtPmRhdGEgJiBfUEFHRV9QQUREUjsKLQotCQkJaWYgKGVycm9yKQotCQkJCSplcnJvciA9IDA7Ci0JCQlyZXR1cm4gYmFzZSArIChwcm9tdmEgJiAoODE5MiAtIDEpKTsKLQkJfQotCX0KLQlpZiAoZXJyb3IpCi0JCSplcnJvciA9IDE7Ci0JcmV0dXJuIDBVTDsKLX0KLQogLyogVGhlIG9icCB0cmFuc2xhdGlvbnMgYXJlIHNhdmVkIGJhc2VkIG9uIDhrIHBhZ2VzaXplLCBzaW5jZSBvYnAgY2FuCiAgKiB1c2UgYSBtaXh0dXJlIG9mIHBhZ2VzaXplcy4gTWlzc2VzIHRvIHRoZSBMT1dfT0JQX0FERFJFU1MgLT4KLSAqIEhJX09CUF9BRERSRVNTIHJhbmdlIGFyZSBoYW5kbGVkIGluIGt0bGIuUyBhbmQgZG8gbm90IHVzZSB0aGUgdnB0ZQotICogc2NoZW1lIChhbHNvLCBzZWUgcmFudCBpbiBpbmhlcml0X2xvY2tlZF9wcm9tX21hcHBpbmdzKCkpLgorICogSElfT0JQX0FERFJFU1MgcmFuZ2UgYXJlIGhhbmRsZWQgaW4ga3RsYi5TLgogICovCiBzdGF0aWMgaW5saW5lIGludCBpbl9vYnBfcmFuZ2UodW5zaWduZWQgbG9uZyB2YWRkcikKIHsKQEAgLTQ5MCw2ICs1MjAsMzYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBoeXBlcnZpc29yX3RsYl9sb2NrKHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcHRlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1tdSkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGZ1bmMgYXNtKCIlbzUiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzAgYXNtKCIlbzAiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzEgYXNtKCIlbzEiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzIgYXNtKCIlbzIiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzMgYXNtKCIlbzMiKTsKKworCWZ1bmMgPSBIVl9GQVNUX01NVV9NQVBfUEVSTV9BRERSOworCWFyZzAgPSB2YWRkcjsKKwlhcmcxID0gMDsKKwlhcmcyID0gcHRlOworCWFyZzMgPSBtbXU7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInRhCTB4ODAiCisJCQkgICAgIDogIj0mciIgKGZ1bmMpLCAiPSZyIiAoYXJnMCksCisJCQkgICAgICAgIj0mciIgKGFyZzEpLCAiPSZyIiAoYXJnMiksCisJCQkgICAgICAgIj0mciIgKGFyZzMpCisJCQkgICAgIDogIjAiIChmdW5jKSwgIjEiIChhcmcwKSwgIjIiIChhcmcxKSwKKwkJCSAgICAgICAiMyIgKGFyZzIpLCAiNCIgKGFyZzMpKTsKKwlpZiAoYXJnMCAhPSAwKSB7CisJCXByb21fcHJpbnRmKCJoeXBlcnZpc29yX3RsYl9sb2NrWyVseDolbHg6JWx4OiVseF06ICIKKwkJCSAgICAiZXJyb3JzIHdpdGggJWx4XG4iLCB2YWRkciwgMCwgcHRlLCBtbXUsIGFyZzApOworCQlwcm9tX2hhbHQoKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtlcm5fbGFyZ2VfdHRlKHVuc2lnbmVkIGxvbmcgcGFkZHIpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVtYXBfa2VybmVsKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBwaHlzX3BhZ2UsIHR0ZV92YWRkciwgdHRlX2RhdGE7CkBAIC00OTcsMjUgKzU1NywzNCBAQAogCiAJdHRlX3ZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIEtFUk5CQVNFOwogCXBoeXNfcGFnZSA9IChwcm9tX2Jvb3RfbWFwcGluZ19waHlzX2xvdyA+PiAyMlVMKSA8PCAyMlVMOwotCXR0ZV9kYXRhID0gKHBoeXNfcGFnZSB8IChfUEFHRV9WQUxJRCB8IF9QQUdFX1NaNE1CIHwKLQkJCQkgX1BBR0VfQ1AgfCBfUEFHRV9DViB8IF9QQUdFX1AgfAotCQkJCSBfUEFHRV9MIHwgX1BBR0VfVykpOworCXR0ZV9kYXRhID0ga2Vybl9sYXJnZV90dGUocGh5c19wYWdlKTsKIAogCWtlcm5fbG9ja2VkX3R0ZV9kYXRhID0gdHRlX2RhdGE7CiAKLQkvKiBOb3cgbG9jayB1cyBpbnRvIHRoZSBUTEJzIHZpYSBPQlAuICovCi0JcHJvbV9kdGxiX2xvYWQodGxiX2VudCwgdHRlX2RhdGEsIHR0ZV92YWRkcik7Ci0JcHJvbV9pdGxiX2xvYWQodGxiX2VudCwgdHRlX2RhdGEsIHR0ZV92YWRkcik7Ci0JaWYgKGJpZ2tlcm5lbCkgewotCQl0bGJfZW50IC09IDE7Ci0JCXByb21fZHRsYl9sb2FkKHRsYl9lbnQsCi0JCQkgICAgICAgdHRlX2RhdGEgKyAweDQwMDAwMCwgCi0JCQkgICAgICAgdHRlX3ZhZGRyICsgMHg0MDAwMDApOwotCQlwcm9tX2l0bGJfbG9hZCh0bGJfZW50LAotCQkJICAgICAgIHR0ZV9kYXRhICsgMHg0MDAwMDAsIAotCQkJICAgICAgIHR0ZV92YWRkciArIDB4NDAwMDAwKTsKKwkvKiBOb3cgbG9jayB1cyBpbnRvIHRoZSBUTEJzIHZpYSBIeXBlcnZpc29yIG9yIE9CUC4gKi8KKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgeworCQloeXBlcnZpc29yX3RsYl9sb2NrKHR0ZV92YWRkciwgdHRlX2RhdGEsIEhWX01NVV9ETU1VKTsKKwkJaHlwZXJ2aXNvcl90bGJfbG9jayh0dGVfdmFkZHIsIHR0ZV9kYXRhLCBIVl9NTVVfSU1NVSk7CisJCWlmIChiaWdrZXJuZWwpIHsKKwkJCXR0ZV92YWRkciArPSAweDQwMDAwMDsKKwkJCXR0ZV9kYXRhICs9IDB4NDAwMDAwOworCQkJaHlwZXJ2aXNvcl90bGJfbG9jayh0dGVfdmFkZHIsIHR0ZV9kYXRhLCBIVl9NTVVfRE1NVSk7CisJCQloeXBlcnZpc29yX3RsYl9sb2NrKHR0ZV92YWRkciwgdHRlX2RhdGEsIEhWX01NVV9JTU1VKTsKKwkJfQorCX0gZWxzZSB7CisJCXByb21fZHRsYl9sb2FkKHRsYl9lbnQsIHR0ZV9kYXRhLCB0dGVfdmFkZHIpOworCQlwcm9tX2l0bGJfbG9hZCh0bGJfZW50LCB0dGVfZGF0YSwgdHRlX3ZhZGRyKTsKKwkJaWYgKGJpZ2tlcm5lbCkgeworCQkJdGxiX2VudCAtPSAxOworCQkJcHJvbV9kdGxiX2xvYWQodGxiX2VudCwKKwkJCQkgICAgICAgdHRlX2RhdGEgKyAweDQwMDAwMCwgCisJCQkJICAgICAgIHR0ZV92YWRkciArIDB4NDAwMDAwKTsKKwkJCXByb21faXRsYl9sb2FkKHRsYl9lbnQsCisJCQkJICAgICAgIHR0ZV9kYXRhICsgMHg0MDAwMDAsIAorCQkJCSAgICAgICB0dGVfdmFkZHIgKyAweDQwMDAwMCk7CisJCX0KKwkJc3BhcmM2NF9oaWdoZXN0X3VubG9ja2VkX3RsYl9lbnQgPSB0bGJfZW50IC0gMTsKIAl9Ci0Jc3BhcmM2NF9oaWdoZXN0X3VubG9ja2VkX3RsYl9lbnQgPSB0bGJfZW50IC0gMTsKIAlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKSB7CiAJCXNwYXJjNjRfa2Vybl9wcmlfY29udGV4dCA9IChDVFhfQ0hFRVRBSF9QTFVTX0NUWDAgfAogCQkJCQkgICAgQ1RYX0NIRUVUQUhfUExVU19OVUMpOwpAQCAtNTMzLDM3MiArNjAyLDE0IEBACiAJcHJvbV9wcmludGYoIlJlbWFwcGluZyB0aGUga2VybmVsLi4uICIpOwogCXJlbWFwX2tlcm5lbCgpOwogCXByb21fcHJpbnRmKCJkb25lLlxuIik7Ci0KLQlwcm9tX3ByaW50ZigiUmVnaXN0ZXJpbmcgY2FsbGJhY2tzLi4uICIpOwotCXJlZ2lzdGVyX3Byb21fY2FsbGJhY2tzKCk7Ci0JcHJvbV9wcmludGYoImRvbmUuXG4iKTsKIH0KIAotLyogVGhlIE9CUCBzcGVjaWZpY2F0aW9ucyBmb3Igc3VuNHUgbWFyayAweGZmZmZmZmZjMDAwMDAwMDAgYW5kCi0gKiB1cHdhcmRzIGFzIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIGZpcm13YXJlIChJIHdvbmRlciBpZiB0aGlzCi0gKiB3aWxsIGJlIHRoZSBzYW1lIG9uIENoZWV0YWguLi4pLiAgV2UgdXNlIHRoaXMgdmlydHVhbCBhZGRyZXNzCi0gKiByYW5nZSBmb3IgdGhlIFZQVEUgdGFibGUgbWFwcGluZ3Mgb2YgdGhlIG51Y2xldXMgc28gd2UgbmVlZAotICogdG8gemFwIHRoZW0gd2hlbiB3ZSBlbnRlciB0aGUgUFJPTS4gIC1EYXZlTQotICovCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX251Y2xldXNfdnB0ZXModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHByb21fcmVzZXJ2ZWRfYmFzZSA9IDB4ZmZmZmZmZmMwMDAwMDAwMFVMOwotCWludCBpOwotCi0JLyogT25seSBEVExCIG11c3QgYmUgY2hlY2tlZCBmb3IgVlBURSBlbnRyaWVzLiAqLwotCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgNjM7IGkrKykgewotCQkJdW5zaWduZWQgbG9uZyB0YWc7Ci0KLQkJCS8qIFNwaXRmaXJlIEVycmF0YSAjMzIgd29ya2Fyb3VuZCAqLwotCQkJLyogTk9URTogQWx3YXlzIHJ1bnMgb24gc3BpdGZpcmUsIHNvIG5vIGNoZWV0YWgrCi0JCQkgKiAgICAgICBwYWdlIHNpemUgZW5jb2RpbmdzLgotCQkJICovCi0JCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCi0JCQkJCSAgICAgImZsdXNoCSUlZzYiCi0JCQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkJCSAgICAgOiAiciIgKDApLAotCQkJCQkgICAgICJyIiAoUFJJTUFSWV9DT05URVhUKSwgImkiIChBU0lfRE1NVSkpOwotCi0JCQl0YWcgPSBzcGl0ZmlyZV9nZXRfZHRsYl90YWcoaSk7Ci0JCQlpZiAoKCh0YWcgJiB+KFBBR0VfTUFTSykpID09IDApICYmCi0JCQkgICAgKCh0YWcgJiAgKFBBR0VfTUFTSykpID49IHByb21fcmVzZXJ2ZWRfYmFzZSkpIHsKLQkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YSAlJWcwLCBbJTBdICUxXG5cdCIKLQkJCQkJCSAgICAgIm1lbWJhciAjU3luYyIKLQkJCQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkJCQkgICAgIDogInIiIChUTEJfVEFHX0FDQ0VTUyksICJpIiAoQVNJX0RNTVUpKTsKLQkJCQlzcGl0ZmlyZV9wdXRfZHRsYl9kYXRhKGksIDB4MFVMKTsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKLQkJZm9yIChpID0gMDsgaSA8IDUxMjsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHRhZyA9IGNoZWV0YWhfZ2V0X2R0bGJfdGFnKGksIDIpOwotCi0JCQlpZiAoKHRhZyAmIH5QQUdFX01BU0spID09IDAgJiYKLQkJCSAgICAodGFnICYgUEFHRV9NQVNLKSA+PSBwcm9tX3Jlc2VydmVkX2Jhc2UpIHsKLQkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YSAlJWcwLCBbJTBdICUxXG5cdCIKLQkJCQkJCSAgICAgIm1lbWJhciAjU3luYyIKLQkJCQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCi0JCQkJCQkgICAgIDogInIiIChUTEJfVEFHX0FDQ0VTUyksICJpIiAoQVNJX0RNTVUpKTsKLQkJCQljaGVldGFoX3B1dF9kdGxiX2RhdGEoaSwgMHgwVUwsIDIpOwotCQkJfQotCi0JCQlpZiAodGxiX3R5cGUgIT0gY2hlZXRhaF9wbHVzKQotCQkJCWNvbnRpbnVlOwotCi0JCQl0YWcgPSBjaGVldGFoX2dldF9kdGxiX3RhZyhpLCAzKTsKLQotCQkJaWYgKCh0YWcgJiB+UEFHRV9NQVNLKSA9PSAwICYmCi0JCQkgICAgKHRhZyAmIFBBR0VfTUFTSykgPj0gcHJvbV9yZXNlcnZlZF9iYXNlKSB7Ci0JCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEgJSVnMCwgWyUwXSAlMVxuXHQiCi0JCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJCQkJICAgICA6ICJyIiAoVExCX1RBR19BQ0NFU1MpLCAiaSIgKEFTSV9ETU1VKSk7Ci0JCQkJY2hlZXRhaF9wdXRfZHRsYl9kYXRhKGksIDB4MFVMLCAzKTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEltcGxlbWVudCBtZSA6LSkgKi8KLQkJQlVHKCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHByb21fZGl0bGJfc2V0Owotc3RydWN0IHByb21fdGxiX2VudHJ5IHsKLQlpbnQJCXRsYl9lbnQ7Ci0JdW5zaWduZWQgbG9uZwl0bGJfdGFnOwotCXVuc2lnbmVkIGxvbmcJdGxiX2RhdGE7Ci19Owotc3RydWN0IHByb21fdGxiX2VudHJ5IHByb21faXRsYlsxNl0sIHByb21fZHRsYlsxNl07Ci0KIHZvaWQgcHJvbV93b3JsZChpbnQgZW50ZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBwc3RhdGU7Ci0JaW50IGk7Ci0KIAlpZiAoIWVudGVyKQogCQlzZXRfZnMoKG1tX3NlZ21lbnRfdCkgeyBnZXRfdGhyZWFkX2N1cnJlbnRfZHMoKSB9KTsKIAotCWlmICghcHJvbV9kaXRsYl9zZXQpCi0JCXJldHVybjsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIHJ1bnMgYXRvbWljYWxseS4gKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2h3XG5cdCIKLQkJCSAgICAgInJkcHIJJSVwc3RhdGUsICUwXG5cdCIKLQkJCSAgICAgIndycHIJJTAsICUxLCAlJXBzdGF0ZSIKLQkJCSAgICAgOiAiPXIiIChwc3RhdGUpCi0JCQkgICAgIDogImkiIChQU1RBVEVfSUUpKTsKLQotCWlmIChlbnRlcikgewotCQkvKiBLaWNrIG91dCBudWNsZXVzIFZQVEVzLiAqLwotCQlfX2ZsdXNoX251Y2xldXNfdnB0ZXMoKTsKLQotCQkvKiBJbnN0YWxsIFBST00gd29ybGQuICovCi0JCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCQlpZiAocHJvbV9kdGxiW2ldLnRsYl9lbnQgIT0gLTEpIHsKLQkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YSAlMCwgWyUxXSAlMlxuXHQiCi0JCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJCTogOiAiciIgKHByb21fZHRsYltpXS50bGJfdGFnKSwgInIiIChUTEJfVEFHX0FDQ0VTUyksCi0JCQkJCSJpIiAoQVNJX0RNTVUpKTsKLQkJCQlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpCi0JCQkJCXNwaXRmaXJlX3B1dF9kdGxiX2RhdGEocHJvbV9kdGxiW2ldLnRsYl9lbnQsCi0JCQkJCQkJICAgICAgIHByb21fZHRsYltpXS50bGJfZGF0YSk7Ci0JCQkJZWxzZSBpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpCi0JCQkJCWNoZWV0YWhfcHV0X2xkdGxiX2RhdGEocHJvbV9kdGxiW2ldLnRsYl9lbnQsCi0JCQkJCQkJICAgICAgIHByb21fZHRsYltpXS50bGJfZGF0YSk7Ci0JCQl9Ci0JCQlpZiAocHJvbV9pdGxiW2ldLnRsYl9lbnQgIT0gLTEpIHsKLQkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YSAlMCwgWyUxXSAlMlxuXHQiCi0JCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJCQkgICAgIDogOiAiciIgKHByb21faXRsYltpXS50bGJfdGFnKSwKLQkJCQkJCSAgICAgInIiIChUTEJfVEFHX0FDQ0VTUyksCi0JCQkJCQkgICAgICJpIiAoQVNJX0lNTVUpKTsKLQkJCQlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpCi0JCQkJCXNwaXRmaXJlX3B1dF9pdGxiX2RhdGEocHJvbV9pdGxiW2ldLnRsYl9lbnQsCi0JCQkJCQkJICAgICAgIHByb21faXRsYltpXS50bGJfZGF0YSk7Ci0JCQkJZWxzZSBpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpCi0JCQkJCWNoZWV0YWhfcHV0X2xpdGxiX2RhdGEocHJvbV9pdGxiW2ldLnRsYl9lbnQsCi0JCQkJCQkJICAgICAgIHByb21faXRsYltpXS50bGJfZGF0YSk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQkJaWYgKHByb21fZHRsYltpXS50bGJfZW50ICE9IC0xKSB7Ci0JCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEgJSVnMCwgWyUwXSAlMVxuXHQiCi0JCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJCTogOiAiciIgKFRMQl9UQUdfQUNDRVNTKSwgImkiIChBU0lfRE1NVSkpOwotCQkJCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkKLQkJCQkJc3BpdGZpcmVfcHV0X2R0bGJfZGF0YShwcm9tX2R0bGJbaV0udGxiX2VudCwgMHgwVUwpOwotCQkJCWVsc2UKLQkJCQkJY2hlZXRhaF9wdXRfbGR0bGJfZGF0YShwcm9tX2R0bGJbaV0udGxiX2VudCwgMHgwVUwpOwotCQkJfQotCQkJaWYgKHByb21faXRsYltpXS50bGJfZW50ICE9IC0xKSB7Ci0JCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEgJSVnMCwgWyUwXSAlMVxuXHQiCi0JCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJCQkgICAgIDogOiAiciIgKFRMQl9UQUdfQUNDRVNTKSwKLQkJCQkJCSAgICAgImkiIChBU0lfSU1NVSkpOwotCQkJCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkKLQkJCQkJc3BpdGZpcmVfcHV0X2l0bGJfZGF0YShwcm9tX2l0bGJbaV0udGxiX2VudCwgMHgwVUwpOwotCQkJCWVsc2UKLQkJCQkJY2hlZXRhaF9wdXRfbGl0bGJfZGF0YShwcm9tX2l0bGJbaV0udGxiX2VudCwgMHgwVUwpOwotCQkJfQotCQl9Ci0JfQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJ3cnByCSUwLCAwLCAlJXBzdGF0ZSIKLQkJCSAgICAgOiA6ICJyIiAocHN0YXRlKSk7Ci19Ci0KLXZvaWQgaW5oZXJpdF9sb2NrZWRfcHJvbV9tYXBwaW5ncyhpbnQgc2F2ZV9wKQotewotCWludCBpOwotCWludCBkdGxiX3NlZW4gPSAwOwotCWludCBpdGxiX3NlZW4gPSAwOwotCi0JLyogRnVja2luZyBsb3NpbmcgUFJPTSBoYXMgbW9yZSBtYXBwaW5ncyBpbiB0aGUgVExCLCBidXQKLQkgKiBpdCAoY29udmVuaWVudGx5KSBmYWlscyB0byBtZW50aW9uIGFueSBvZiB0aGVzZSBpbiB0aGUKLQkgKiB0cmFuc2xhdGlvbnMgcHJvcGVydHkuICBUaGUgb25seSBvbmVzIHRoYXQgbWF0dGVyIGFyZQotCSAqIHRoZSBsb2NrZWQgUFJPTSB0bGIgZW50cmllcywgc28gd2UgaW1wb3NlIHRoZSBmb2xsb3dpbmcKLQkgKiBpcnJlY292YWJsZSBydWxlIG9uIHRoZSBQUk9NLCBpdCBpcyBhbGxvd2VkIDggbG9ja2VkCi0JICogZW50cmllcyBpbiB0aGUgSVRMQiBhbmQgOCBpbiB0aGUgRFRMQi4KLQkgKgotCSAqIFN1cHBvc2VkbHkgdGhlIHVwcGVyIDE2R0Igb2YgdGhlIGFkZHJlc3Mgc3BhY2UgaXMKLQkgKiByZXNlcnZlZCBmb3IgT0JQLCBCVVQgSSBXSVNIIFRISVMgV0FTIERPQ1VNRU5URUQKLQkgKiBTT01FV0hFUkUhISEhISEhISEhISEhISEhISAgRnVydGhlcm1vcmUgdGhlIGVudGlyZSBpbnRlcmZhY2UKLQkgKiB1c2VkIGJldHdlZW4gdGhlIGNsaWVudCBwcm9ncmFtIGFuZCB0aGUgZmlybXdhcmUgb24gc3VuNQotCSAqIHN5c3RlbXMgdG8gY29vcmRpbmF0ZSBtbXUgbWFwcGluZ3MgaXMgYWxzbyBDT01QTEVURUxZCi0JICogVU5ET0NVTUVOVEVEISEhISEhIFRoYW5rcyBTKHQpdW4hCi0JICovCi0JaWYgKHNhdmVfcCkgewotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQkJcHJvbV9pdGxiW2ldLnRsYl9lbnQgPSAtMTsKLQkJCXByb21fZHRsYltpXS50bGJfZW50ID0gLTE7Ci0JCX0KLQl9Ci0JaWYgKHRsYl90eXBlID09IHNwaXRmaXJlKSB7Ci0JCWludCBoaWdoID0gc3BhcmM2NF9oaWdoZXN0X3VubG9ja2VkX3RsYl9lbnQ7Ci0JCWZvciAoaSA9IDA7IGkgPD0gaGlnaDsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGRhdGE7Ci0KLQkJCS8qIFNwaXRmaXJlIEVycmF0YSAjMzIgd29ya2Fyb3VuZCAqLwotCQkJLyogTk9URTogQWx3YXlzIHJ1bnMgb24gc3BpdGZpcmUsIHNvIG5vIGNoZWV0YWgrCi0JCQkgKiAgICAgICBwYWdlIHNpemUgZW5jb2RpbmdzLgotCQkJICovCi0JCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiCi0JCQkJCSAgICAgImZsdXNoCSUlZzYiCi0JCQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkJCSAgICAgOiAiciIgKDApLAotCQkJCQkgICAgICJyIiAoUFJJTUFSWV9DT05URVhUKSwgImkiIChBU0lfRE1NVSkpOwotCi0JCQlkYXRhID0gc3BpdGZpcmVfZ2V0X2R0bGJfZGF0YShpKTsKLQkJCWlmICgoZGF0YSAmIChfUEFHRV9MfF9QQUdFX1ZBTElEKSkgPT0gKF9QQUdFX0x8X1BBR0VfVkFMSUQpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyB0YWc7Ci0KLQkJCQkvKiBTcGl0ZmlyZSBFcnJhdGEgIzMyIHdvcmthcm91bmQgKi8KLQkJCQkvKiBOT1RFOiBBbHdheXMgcnVucyBvbiBzcGl0ZmlyZSwgc28gbm8KLQkJCQkgKiAgICAgICBjaGVldGFoKyBwYWdlIHNpemUgZW5jb2RpbmdzLgotCQkJCSAqLwotCQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCQkJCSAgICAgImZsdXNoCSUlZzYiCi0JCQkJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJCQkJICAgICA6ICJyIiAoMCksCi0JCQkJCQkgICAgICJyIiAoUFJJTUFSWV9DT05URVhUKSwgImkiIChBU0lfRE1NVSkpOwotCi0JCQkJdGFnID0gc3BpdGZpcmVfZ2V0X2R0bGJfdGFnKGkpOwotCQkJCWlmIChzYXZlX3ApIHsKLQkJCQkJcHJvbV9kdGxiW2R0bGJfc2Vlbl0udGxiX2VudCA9IGk7Ci0JCQkJCXByb21fZHRsYltkdGxiX3NlZW5dLnRsYl90YWcgPSB0YWc7Ci0JCQkJCXByb21fZHRsYltkdGxiX3NlZW5dLnRsYl9kYXRhID0gZGF0YTsKLQkJCQl9Ci0JCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEgJSVnMCwgWyUwXSAlMVxuXHQiCi0JCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJCQkgICAgIDogOiAiciIgKFRMQl9UQUdfQUNDRVNTKSwgImkiIChBU0lfRE1NVSkpOwotCQkJCXNwaXRmaXJlX3B1dF9kdGxiX2RhdGEoaSwgMHgwVUwpOwotCi0JCQkJZHRsYl9zZWVuKys7Ci0JCQkJaWYgKGR0bGJfc2VlbiA+IDE1KQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCBoaWdoOyBpKyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgZGF0YTsKLQotCQkJLyogU3BpdGZpcmUgRXJyYXRhICMzMiB3b3JrYXJvdW5kICovCi0JCQkvKiBOT1RFOiBBbHdheXMgcnVucyBvbiBzcGl0ZmlyZSwgc28gbm8KLQkJCSAqICAgICAgIGNoZWV0YWgrIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MuCi0JCQkgKi8KLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCQkJICAgICAiZmx1c2gJJSVnNiIKLQkJCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KLQkJCQkJICAgICA6ICJyIiAoMCksCi0JCQkJCSAgICAgInIiIChQUklNQVJZX0NPTlRFWFQpLCAiaSIgKEFTSV9ETU1VKSk7Ci0KLQkJCWRhdGEgPSBzcGl0ZmlyZV9nZXRfaXRsYl9kYXRhKGkpOwotCQkJaWYgKChkYXRhICYgKF9QQUdFX0x8X1BBR0VfVkFMSUQpKSA9PSAoX1BBR0VfTHxfUEFHRV9WQUxJRCkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHRhZzsKLQotCQkJCS8qIFNwaXRmaXJlIEVycmF0YSAjMzIgd29ya2Fyb3VuZCAqLwotCQkJCS8qIE5PVEU6IEFsd2F5cyBydW5zIG9uIHNwaXRmaXJlLCBzbyBubwotCQkJCSAqICAgICAgIGNoZWV0YWgrIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MuCi0JCQkJICovCi0JCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgotCQkJCQkJICAgICAiZmx1c2gJJSVnNiIKLQkJCQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovCi0JCQkJCQkgICAgIDogInIiICgwKSwKLQkJCQkJCSAgICAgInIiIChQUklNQVJZX0NPTlRFWFQpLCAiaSIgKEFTSV9ETU1VKSk7Ci0KLQkJCQl0YWcgPSBzcGl0ZmlyZV9nZXRfaXRsYl90YWcoaSk7Ci0JCQkJaWYgKHNhdmVfcCkgewotCQkJCQlwcm9tX2l0bGJbaXRsYl9zZWVuXS50bGJfZW50ID0gaTsKLQkJCQkJcHJvbV9pdGxiW2l0bGJfc2Vlbl0udGxiX3RhZyA9IHRhZzsKLQkJCQkJcHJvbV9pdGxiW2l0bGJfc2Vlbl0udGxiX2RhdGEgPSBkYXRhOwotCQkJCX0KLQkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YSAlJWcwLCBbJTBdICUxXG5cdCIKLQkJCQkJCSAgICAgIm1lbWJhciAjU3luYyIKLQkJCQkJCSAgICAgOiA6ICJyIiAoVExCX1RBR19BQ0NFU1MpLCAiaSIgKEFTSV9JTU1VKSk7Ci0JCQkJc3BpdGZpcmVfcHV0X2l0bGJfZGF0YShpLCAweDBVTCk7Ci0KLQkJCQlpdGxiX3NlZW4rKzsKLQkJCQlpZiAoaXRsYl9zZWVuID4gMTUpCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmICh0bGJfdHlwZSA9PSBjaGVldGFoIHx8IHRsYl90eXBlID09IGNoZWV0YWhfcGx1cykgewotCQlpbnQgaGlnaCA9IHNwYXJjNjRfaGlnaGVzdF91bmxvY2tlZF90bGJfZW50OwotCi0JCWZvciAoaSA9IDA7IGkgPD0gaGlnaDsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGRhdGE7Ci0KLQkJCWRhdGEgPSBjaGVldGFoX2dldF9sZHRsYl9kYXRhKGkpOwotCQkJaWYgKChkYXRhICYgKF9QQUdFX0x8X1BBR0VfVkFMSUQpKSA9PSAoX1BBR0VfTHxfUEFHRV9WQUxJRCkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHRhZzsKLQotCQkJCXRhZyA9IGNoZWV0YWhfZ2V0X2xkdGxiX3RhZyhpKTsKLQkJCQlpZiAoc2F2ZV9wKSB7Ci0JCQkJCXByb21fZHRsYltkdGxiX3NlZW5dLnRsYl9lbnQgPSBpOwotCQkJCQlwcm9tX2R0bGJbZHRsYl9zZWVuXS50bGJfdGFnID0gdGFnOwotCQkJCQlwcm9tX2R0bGJbZHRsYl9zZWVuXS50bGJfZGF0YSA9IGRhdGE7Ci0JCQkJfQotCQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhICUlZzAsIFslMF0gJTFcblx0IgotCQkJCQkJICAgICAibWVtYmFyICNTeW5jIgotCQkJCQkJICAgICA6IDogInIiIChUTEJfVEFHX0FDQ0VTUyksICJpIiAoQVNJX0RNTVUpKTsKLQkJCQljaGVldGFoX3B1dF9sZHRsYl9kYXRhKGksIDB4MFVMKTsKLQotCQkJCWR0bGJfc2VlbisrOwotCQkJCWlmIChkdGxiX3NlZW4gPiAxNSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgaGlnaDsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGRhdGE7Ci0KLQkJCWRhdGEgPSBjaGVldGFoX2dldF9saXRsYl9kYXRhKGkpOwotCQkJaWYgKChkYXRhICYgKF9QQUdFX0x8X1BBR0VfVkFMSUQpKSA9PSAoX1BBR0VfTHxfUEFHRV9WQUxJRCkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHRhZzsKLQotCQkJCXRhZyA9IGNoZWV0YWhfZ2V0X2xpdGxiX3RhZyhpKTsKLQkJCQlpZiAoc2F2ZV9wKSB7Ci0JCQkJCXByb21faXRsYltpdGxiX3NlZW5dLnRsYl9lbnQgPSBpOwotCQkJCQlwcm9tX2l0bGJbaXRsYl9zZWVuXS50bGJfdGFnID0gdGFnOwotCQkJCQlwcm9tX2l0bGJbaXRsYl9zZWVuXS50bGJfZGF0YSA9IGRhdGE7Ci0JCQkJfQotCQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhICUlZzAsIFslMF0gJTFcblx0IgotCQkJCQkJICAgICAibWVtYmFyICNTeW5jIgotCQkJCQkJICAgICA6IDogInIiIChUTEJfVEFHX0FDQ0VTUyksICJpIiAoQVNJX0lNTVUpKTsKLQkJCQljaGVldGFoX3B1dF9saXRsYl9kYXRhKGksIDB4MFVMKTsKLQotCQkJCWl0bGJfc2VlbisrOwotCQkJCWlmIChpdGxiX3NlZW4gPiAxNSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJbXBsZW1lbnQgbWUgOi0pICovCi0JCUJVRygpOwotCX0KLQlpZiAoc2F2ZV9wKQotCQlwcm9tX2RpdGxiX3NldCA9IDE7Ci19Ci0KLS8qIEdpdmUgUFJPTSBiYWNrIGhpcyB3b3JsZCwgZG9uZSBkdXJpbmcgcmVib290cy4uLiAqLwotdm9pZCBwcm9tX3JlbG9hZF9sb2NrZWQodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWlmIChwcm9tX2R0bGJbaV0udGxiX2VudCAhPSAtMSkgewotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEgJTAsIFslMV0gJTJcblx0IgotCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJOiA6ICJyIiAocHJvbV9kdGxiW2ldLnRsYl90YWcpLCAiciIgKFRMQl9UQUdfQUNDRVNTKSwKLQkJCQkiaSIgKEFTSV9ETU1VKSk7Ci0JCQlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpCi0JCQkJc3BpdGZpcmVfcHV0X2R0bGJfZGF0YShwcm9tX2R0bGJbaV0udGxiX2VudCwKLQkJCQkJCSAgICAgICBwcm9tX2R0bGJbaV0udGxiX2RhdGEpOwotCQkJZWxzZSBpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpCi0JCQkJY2hlZXRhaF9wdXRfbGR0bGJfZGF0YShwcm9tX2R0bGJbaV0udGxiX2VudCwKLQkJCQkJCSAgICAgIHByb21fZHRsYltpXS50bGJfZGF0YSk7Ci0JCX0KLQotCQlpZiAocHJvbV9pdGxiW2ldLnRsYl9lbnQgIT0gLTEpIHsKLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhICUwLCBbJTFdICUyXG5cdCIKLQkJCQkJICAgICAibWVtYmFyICNTeW5jIgotCQkJCQkgICAgIDogOiAiciIgKHByb21faXRsYltpXS50bGJfdGFnKSwKLQkJCQkJICAgICAiciIgKFRMQl9UQUdfQUNDRVNTKSwKLQkJCQkJICAgICAiaSIgKEFTSV9JTU1VKSk7Ci0JCQlpZiAodGxiX3R5cGUgPT0gc3BpdGZpcmUpCi0JCQkJc3BpdGZpcmVfcHV0X2l0bGJfZGF0YShwcm9tX2l0bGJbaV0udGxiX2VudCwKLQkJCQkJCSAgICAgICBwcm9tX2l0bGJbaV0udGxiX2RhdGEpOwotCQkJZWxzZQotCQkJCWNoZWV0YWhfcHV0X2xpdGxiX2RhdGEocHJvbV9pdGxiW2ldLnRsYl9lbnQsCi0JCQkJCQkgICAgICAgcHJvbV9pdGxiW2ldLnRsYl9kYXRhKTsKLQkJfQotCX0KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2h3Iik7CiB9CiAKICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKQEAgLTkxNCw3ICs2MjUsNyBAQAogCQkJaWYgKCsrbiA+PSA1MTIpCiAJCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgeworCX0gZWxzZSBpZiAodGxiX3R5cGUgPT0gY2hlZXRhaCB8fCB0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMpIHsKIAkJc3RhcnQgPSBfX3BhKHN0YXJ0KTsKIAkJZW5kID0gX19wYShlbmQpOwogCQlmb3IgKHZhID0gc3RhcnQ7IHZhIDwgZW5kOyB2YSArPSAzMikKQEAgLTkyNyw2MyArNjM4LDYgQEAKIH0KICNlbmRpZiAvKiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUgKi8KIAotLyogSWYgbm90IGxvY2tlZCwgemFwIGl0LiAqLwotdm9pZCBfX2ZsdXNoX3RsYl9hbGwodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHBzdGF0ZTsKLQlpbnQgaTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaHdcblx0IgotCQkJICAgICAicmRwcgklJXBzdGF0ZSwgJTBcblx0IgotCQkJICAgICAid3JwcgklMCwgJTEsICUlcHN0YXRlIgotCQkJICAgICA6ICI9ciIgKHBzdGF0ZSkKLQkJCSAgICAgOiAiaSIgKFBTVEFURV9JRSkpOwotCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQkJLyogU3BpdGZpcmUgRXJyYXRhICMzMiB3b3JrYXJvdW5kICovCi0JCQkvKiBOT1RFOiBBbHdheXMgcnVucyBvbiBzcGl0ZmlyZSwgc28gbm8KLQkJCSAqICAgICAgIGNoZWV0YWgrIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MuCi0JCQkgKi8KLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKLQkJCQkJICAgICAiZmx1c2gJJSVnNiIKLQkJCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KLQkJCQkJICAgICA6ICJyIiAoMCksCi0JCQkJCSAgICAgInIiIChQUklNQVJZX0NPTlRFWFQpLCAiaSIgKEFTSV9ETU1VKSk7Ci0KLQkJCWlmICghKHNwaXRmaXJlX2dldF9kdGxiX2RhdGEoaSkgJiBfUEFHRV9MKSkgewotCQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhICUlZzAsIFslMF0gJTFcblx0IgotCQkJCQkJICAgICAibWVtYmFyICNTeW5jIgotCQkJCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJCQkJCSAgICAgOiAiciIgKFRMQl9UQUdfQUNDRVNTKSwgImkiIChBU0lfRE1NVSkpOwotCQkJCXNwaXRmaXJlX3B1dF9kdGxiX2RhdGEoaSwgMHgwVUwpOwotCQkJfQotCi0JCQkvKiBTcGl0ZmlyZSBFcnJhdGEgIzMyIHdvcmthcm91bmQgKi8KLQkJCS8qIE5PVEU6IEFsd2F5cyBydW5zIG9uIHNwaXRmaXJlLCBzbyBubwotCQkJICogICAgICAgY2hlZXRhaCsgcGFnZSBzaXplIGVuY29kaW5ncy4KLQkJCSAqLwotCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgotCQkJCQkgICAgICJmbHVzaAklJWc2IgotCQkJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLwotCQkJCQkgICAgIDogInIiICgwKSwKLQkJCQkJICAgICAiciIgKFBSSU1BUllfQ09OVEVYVCksICJpIiAoQVNJX0RNTVUpKTsKLQotCQkJaWYgKCEoc3BpdGZpcmVfZ2V0X2l0bGJfZGF0YShpKSAmIF9QQUdFX0wpKSB7Ci0JCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEgJSVnMCwgWyUwXSAlMVxuXHQiCi0JCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCi0JCQkJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLwotCQkJCQkJICAgICA6ICJyIiAoVExCX1RBR19BQ0NFU1MpLCAiaSIgKEFTSV9JTU1VKSk7Ci0JCQkJc3BpdGZpcmVfcHV0X2l0bGJfZGF0YShpLCAweDBVTCk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKHRsYl90eXBlID09IGNoZWV0YWggfHwgdGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKSB7Ci0JCWNoZWV0YWhfZmx1c2hfZHRsYl9hbGwoKTsKLQkJY2hlZXRhaF9mbHVzaF9pdGxiX2FsbCgpOwotCX0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3JwcgklMCwgMCwgJSVwc3RhdGUiCi0JCQkgICAgIDogOiAiciIgKHBzdGF0ZSkpOwotfQotCiAvKiBDYWxsZXIgZG9lcyBUTEIgY29udGV4dCBmbHVzaGluZyBvbiBsb2NhbCBDUFUgaWYgbmVjZXNzYXJ5LgogICogVGhlIGNhbGxlciBhbHNvIGVuc3VyZXMgdGhhdCBDVFhfVkFMSUQobW0tPmNvbnRleHQpIGlzIGZhbHNlLgogICoKQEAgLTk5MSwxNyArNjQ1LDIxIEBACiAgKiBsZXQgdGhlIHVzZXIgaGF2ZSBDVFggMCAobnVjbGV1cykgb3Igd2UgZXZlciB1c2UgYSBDVFgKICAqIHZlcnNpb24gb2YgemVybyAoYW5kIHRodXMgTk9fQ09OVEVYVCB3b3VsZCBub3QgYmUgY2F1Z2h0CiAgKiBieSB2ZXJzaW9uIG1pcy1tYXRjaCB0ZXN0cyBpbiBtbXVfY29udGV4dC5oKS4KKyAqCisgKiBBbHdheXMgaW52b2tlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHZvaWQgZ2V0X25ld19tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAl1bnNpZ25lZCBsb25nIGN0eCwgbmV3X2N0eDsKIAl1bnNpZ25lZCBsb25nIG9yaWdfcGdzel9iaXRzOwotCQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG5ld192ZXJzaW9uOwogCi0Jc3Bpbl9sb2NrKCZjdHhfYWxsb2NfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eF9hbGxvY19sb2NrLCBmbGFncyk7CiAJb3JpZ19wZ3N6X2JpdHMgPSAobW0tPmNvbnRleHQuc3BhcmM2NF9jdHhfdmFsICYgQ1RYX1BHU1pfTUFTSyk7CiAJY3R4ID0gKHRsYl9jb250ZXh0X2NhY2hlICsgMSkgJiBDVFhfTlJfTUFTSzsKIAluZXdfY3R4ID0gZmluZF9uZXh0X3plcm9fYml0KG1tdV9jb250ZXh0X2JtYXAsIDEgPDwgQ1RYX05SX0JJVFMsIGN0eCk7CisJbmV3X3ZlcnNpb24gPSAwOwogCWlmIChuZXdfY3R4ID49ICgxIDw8IENUWF9OUl9CSVRTKSkgewogCQluZXdfY3R4ID0gZmluZF9uZXh0X3plcm9fYml0KG1tdV9jb250ZXh0X2JtYXAsIGN0eCwgMSk7CiAJCWlmIChuZXdfY3R4ID49IGN0eCkgewpAQCAtMTAyNCw2ICs2ODIsNyBAQAogCQkJCW1tdV9jb250ZXh0X2JtYXBbaSArIDJdID0gMDsKIAkJCQltbXVfY29udGV4dF9ibWFwW2kgKyAzXSA9IDA7CiAJCQl9CisJCQluZXdfdmVyc2lvbiA9IDE7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTEwMzIsNzkgKzY5MSwxMCBAQAogb3V0OgogCXRsYl9jb250ZXh0X2NhY2hlID0gbmV3X2N0eDsKIAltbS0+Y29udGV4dC5zcGFyYzY0X2N0eF92YWwgPSBuZXdfY3R4IHwgb3JpZ19wZ3N6X2JpdHM7Ci0Jc3Bpbl91bmxvY2soJmN0eF9hbGxvY19sb2NrKTsKLX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHhfYWxsb2NfbG9jaywgZmxhZ3MpOwogCi0jaWZuZGVmIENPTkZJR19TTVAKLXN0cnVjdCBwZ3RhYmxlX2NhY2hlX3N0cnVjdCBwZ3RfcXVpY2tsaXN0czsKLSNlbmRpZgotCi0vKiBPSywgd2UgaGF2ZSB0byBjb2xvciB0aGVzZSBwYWdlcy4gVGhlIHBhZ2UgdGFibGVzIGFyZSBhY2Nlc3NlZAotICogYnkgbm9uLURjYWNoZSBlbmFibGVkIG1hcHBpbmcgaW4gdGhlIFZQVEUgYXJlYSBieSB0aGUgZHRsYl9iYWNrZW5kLlMKLSAqIGNvZGUsIGFzIHdlbGwgYXMgYnkgUEFHRV9PRkZTRVQgcmFuZ2UgZGlyZWN0LW1hcHBlZCBhZGRyZXNzZXMgYnkgCi0gKiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBCeSBjb2xvcmluZywgd2UgbWFrZSBzdXJlIHRoYXQgdGhlIHRsYm1pc3MgCi0gKiBmYXN0IGhhbmRsZXJzIGRvIG5vdCBnZXQgZGF0YSBmcm9tIG9sZC9nYXJiYWdlIGRjYWNoZSBsaW5lcyB0aGF0IAotICogY29ycmVzcG9uZCB0byBhbiBvbGQvc3RhbGUgdmlydHVhbCBhZGRyZXNzICh1c2VyL2tlcm5lbCkgdGhhdCAKLSAqIHByZXZpb3VzbHkgbWFwcGVkIHRoZSBwYWdldGFibGUgcGFnZSB3aGlsZSBhY2Nlc3NpbmcgdnB0ZSByYW5nZSAKLSAqIGFkZHJlc3Nlcy4gVGhlIGlkZWEgaXMgdGhhdCBpZiB0aGUgdnB0ZSBjb2xvciBhbmQgUEFHRV9PRkZTRVQgcmFuZ2UgCi0gKiBjb2xvciBpcyB0aGUgc2FtZSwgdGhlbiB3aGVuIHRoZSBrZXJuZWwgaW5pdGlhbGl6ZXMgdGhlIHBhZ2V0YWJsZSAKLSAqIHVzaW5nIHRoZSBsYXRlciBhZGRyZXNzIHJhbmdlLCBhY2Nlc3NlcyB3aXRoIHRoZSBmaXJzdCBhZGRyZXNzCi0gKiByYW5nZSB3aWxsIHNlZSB0aGUgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YSByYXRoZXIgdGhhbiB0aGUgZ2FyYmFnZS4KLSAqLwotI2lmZGVmIERDQUNIRV9BTElBU0lOR19QT1NTSUJMRQotI2RlZmluZSBEQ19BTElBU19TSElGVAkxCi0jZWxzZQotI2RlZmluZSBEQ19BTElBU19TSElGVAkwCi0jZW5kaWYKLXB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgY29sb3I7Ci0KLQl7Ci0JCXB0ZV90ICpwdGVwID0gcHRlX2FsbG9jX29uZV9mYXN0KG1tLCBhZGRyZXNzKTsKLQotCQlpZiAocHRlcCkKLQkJCXJldHVybiBwdGVwOwotCX0KLQotCWNvbG9yID0gVlBURV9DT0xPUihhZGRyZXNzKTsKLQlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQsIERDX0FMSUFTX1NISUZUKTsKLQlpZiAocGFnZSkgewotCQl1bnNpZ25lZCBsb25nICp0b19mcmVlOwotCQl1bnNpZ25lZCBsb25nIHBhZGRyOwotCQlwdGVfdCAqcHRlOwotCi0jaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFCi0JCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwotCQlDbGVhclBhZ2VDb21wb3VuZChwYWdlKTsKLQotCQlzZXRfcGFnZV9jb3VudCgocGFnZSArIDEpLCAxKTsKLQkJQ2xlYXJQYWdlQ29tcG91bmQocGFnZSArIDEpOwotI2VuZGlmCi0JCXBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwYWdlKTsKLQkJbWVtc2V0KChjaGFyICopcGFkZHIsIDAsIChQQUdFX1NJWkUgPDwgRENfQUxJQVNfU0hJRlQpKTsKLQotCQlpZiAoIWNvbG9yKSB7Ci0JCQlwdGUgPSAocHRlX3QgKikgcGFkZHI7Ci0JCQl0b19mcmVlID0gKHVuc2lnbmVkIGxvbmcgKikgKHBhZGRyICsgUEFHRV9TSVpFKTsKLQkJfSBlbHNlIHsKLQkJCXB0ZSA9IChwdGVfdCAqKSAocGFkZHIgKyBQQUdFX1NJWkUpOwotCQkJdG9fZnJlZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZGRyOwotCQl9Ci0KLSNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKLQkJLyogTm93IGZyZWUgdGhlIG90aGVyIG9uZSB1cCwgYWRqdXN0IGNhY2hlIHNpemUuICovCi0JCXByZWVtcHRfZGlzYWJsZSgpOwotCQkqdG9fZnJlZSA9ICh1bnNpZ25lZCBsb25nKSBwdGVfcXVpY2tsaXN0W2NvbG9yIF4gMHgxXTsKLQkJcHRlX3F1aWNrbGlzdFtjb2xvciBeIDB4MV0gPSB0b19mcmVlOwotCQlwZ3RhYmxlX2NhY2hlX3NpemUrKzsKLQkJcHJlZW1wdF9lbmFibGUoKTsKLSNlbmRpZgotCi0JCXJldHVybiBwdGU7Ci0JfQotCXJldHVybiBOVUxMOworCWlmICh1bmxpa2VseShuZXdfdmVyc2lvbikpCisJCXNtcF9uZXdfbW11X2NvbnRleHRfdmVyc2lvbigpOwogfQogCiB2b2lkIHNwYXJjX3VsdHJhX2R1bXBfaXRsYih2b2lkKQpAQCAtMTE5Niw5ICs3ODYsNzggQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY21kbGluZV9tZW1vcnlfc2l6ZTsKIAotdW5zaWduZWQgbG9uZyBfX2luaXQgYm9vdG1lbV9pbml0KHVuc2lnbmVkIGxvbmcgKnBhZ2VzX2F2YWlsKQorLyogRmluZCBhIGZyZWUgYXJlYSBmb3IgdGhlIGJvb3RtZW0gbWFwLCBhdm9pZGluZyB0aGUga2VybmVsIGltYWdlCisgKiBhbmQgdGhlIGluaXRpYWwgcmFtZGlzay4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGNob29zZV9ib290bWFwX3Bmbih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKLQl1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZSwgc3RhcnRfcGZuLCBlbmRfcGZuOworCXVuc2lnbmVkIGxvbmcgYXZvaWRfc3RhcnQsIGF2b2lkX2VuZCwgYm9vdG1hcF9zaXplOworCWludCBpOworCisJYm9vdG1hcF9zaXplID0gKChlbmRfcGZuIC0gc3RhcnRfcGZuKSArIDcpIC8gODsKKwlib290bWFwX3NpemUgPSBBTElHTihib290bWFwX3NpemUsIHNpemVvZihsb25nKSk7CisKKwlhdm9pZF9zdGFydCA9IGF2b2lkX2VuZCA9IDA7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJYXZvaWRfc3RhcnQgPSBpbml0cmRfc3RhcnQ7CisJYXZvaWRfZW5kID0gUEFHRV9BTElHTihpbml0cmRfZW5kKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0RFQlVHX0JPT1RNRU0KKwlwcm9tX3ByaW50ZigiY2hvb3NlX2Jvb3RtYXBfcGZuOiBrZXJuWyVseDolbHhdIGF2b2lkWyVseDolbHhdXG4iLAorCQkgICAga2Vybl9iYXNlLCBQQUdFX0FMSUdOKGtlcm5fYmFzZSArIGtlcm5fc2l6ZSksCisJCSAgICBhdm9pZF9zdGFydCwgYXZvaWRfZW5kKTsKKyNlbmRpZgorCWZvciAoaSA9IDA7IGkgPCBwYXZhaWxfZW50czsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKworCQlzdGFydCA9IHBhdmFpbFtpXS5waHlzX2FkZHI7CisJCWVuZCA9IHN0YXJ0ICsgcGF2YWlsW2ldLnJlZ19zaXplOworCisJCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQkJaWYgKHN0YXJ0ID49IGtlcm5fYmFzZSAmJgorCQkJICAgIHN0YXJ0IDwgUEFHRV9BTElHTihrZXJuX2Jhc2UgKyBrZXJuX3NpemUpKSB7CisJCQkJc3RhcnQgPSBQQUdFX0FMSUdOKGtlcm5fYmFzZSArIGtlcm5fc2l6ZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RhcnQgPj0gYXZvaWRfc3RhcnQgJiYgc3RhcnQgPCBhdm9pZF9lbmQpIHsKKwkJCQlzdGFydCA9IGF2b2lkX2VuZDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKChlbmQgLSBzdGFydCkgPCBib290bWFwX3NpemUpCisJCQkJYnJlYWs7CisKKwkJCWlmIChzdGFydCA8IGtlcm5fYmFzZSAmJgorCQkJICAgIChzdGFydCArIGJvb3RtYXBfc2l6ZSkgPiBrZXJuX2Jhc2UpIHsKKwkJCQlzdGFydCA9IFBBR0VfQUxJR04oa2Vybl9iYXNlICsga2Vybl9zaXplKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHN0YXJ0IDwgYXZvaWRfc3RhcnQgJiYKKwkJCSAgICAoc3RhcnQgKyBib290bWFwX3NpemUpID4gYXZvaWRfc3RhcnQpIHsKKwkJCQlzdGFydCA9IGF2b2lkX2VuZDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogT0ssIGl0IGRvZXNuJ3Qgb3ZlcmxhcCBhbnl0aGluZywgdXNlIGl0LiAgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfQk9PVE1FTQorCQkJcHJvbV9wcmludGYoImNob29zZV9ib290bWFwX3BmbjogVXNpbmcgJWx4IFslbHhdXG4iLAorCQkJCSAgICBzdGFydCA+PiBQQUdFX1NISUZULCBzdGFydCk7CisjZW5kaWYKKwkJCXJldHVybiBzdGFydCA+PiBQQUdFX1NISUZUOworCQl9CisJfQorCisJcHJvbV9wcmludGYoIkNhbm5vdCBmaW5kIGZyZWUgYXJlYSBmb3IgYm9vdG1hcCwgYWJvcnRpbmcuXG4iKTsKKwlwcm9tX2hhbHQoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGJvb3RtZW1faW5pdCh1bnNpZ25lZCBsb25nICpwYWdlc19hdmFpbCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlKQoreworCXVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zaXplLCBlbmRfcGZuOwogCXVuc2lnbmVkIGxvbmcgZW5kX29mX3BoeXNfbWVtb3J5ID0gMFVMOwogCXVuc2lnbmVkIGxvbmcgYm9vdG1hcF9wZm4sIGJ5dGVzX2F2YWlsLCBzaXplOwogCWludCBpOwpAQCAtMTIzNiwxNCArODk1LDYgQEAKIAogCSpwYWdlc19hdmFpbCA9IGJ5dGVzX2F2YWlsID4+IFBBR0VfU0hJRlQ7CiAKLQkvKiBTdGFydCB3aXRoIHBhZ2UgYWxpZ25lZCBhZGRyZXNzIG9mIGxhc3Qgc3ltYm9sIGluIGtlcm5lbAotCSAqIGltYWdlLiAgVGhlIGtlcm5lbCBpcyBoYXJkIG1hcHBlZCBiZWxvdyBQQUdFX09GRlNFVCBpbiBhCi0JICogNE1CIGxvY2tlZCBUTEIgdHJhbnNsYXRpb24uCi0JICovCi0Jc3RhcnRfcGZuID0gUEFHRV9BTElHTihrZXJuX2Jhc2UgKyBrZXJuX3NpemUpID4+IFBBR0VfU0hJRlQ7Ci0KLQlib290bWFwX3BmbiA9IHN0YXJ0X3BmbjsKLQogCWVuZF9wZm4gPSBlbmRfb2ZfcGh5c19tZW1vcnkgPj4gUEFHRV9TSElGVDsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApAQCAtMTI2MCwyMyArOTExLDIyIEBACiAJCSAgICAgICAgICAgICAgICAgCSAiKDB4JTAxNmx4ID4gMHglMDE2bHgpXG5kaXNhYmxpbmcgaW5pdHJkXG4iLAogCQkJICAgICAgIGluaXRyZF9lbmQsIGVuZF9vZl9waHlzX21lbW9yeSk7CiAJCQlpbml0cmRfc3RhcnQgPSAwOwotCQl9Ci0JCWlmIChpbml0cmRfc3RhcnQpIHsKLQkJCWlmIChpbml0cmRfc3RhcnQgPj0gKHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUKSAmJgotCQkJICAgIGluaXRyZF9zdGFydCA8IChzdGFydF9wZm4gPDwgUEFHRV9TSElGVCkgKyAyICogUEFHRV9TSVpFKQotCQkJCWJvb3RtYXBfcGZuID0gUEFHRV9BTElHTiAoaW5pdHJkX2VuZCkgPj4gUEFHRV9TSElGVDsKKwkJCWluaXRyZF9lbmQgPSAwOwogCQl9CiAJfQogI2VuZGlmCQogCS8qIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3IuICovCiAJbWF4X3BmbiA9IG1heF9sb3dfcGZuID0gZW5kX3BmbjsKLQltaW5fbG93X3BmbiA9IHBmbl9iYXNlOworCW1pbl9sb3dfcGZuID0gKHBoeXNfYmFzZSA+PiBQQUdFX1NISUZUKTsKKworCWJvb3RtYXBfcGZuID0gY2hvb3NlX2Jvb3RtYXBfcGZuKG1pbl9sb3dfcGZuLCBlbmRfcGZuKTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19CT09UTUVNCiAJcHJvbV9wcmludGYoImluaXRfYm9vdG1lbShtaW5bJWx4XSwgYm9vdG1hcFslbHhdLCBtYXhbJWx4XSlcbiIsCiAJCSAgICBtaW5fbG93X3BmbiwgYm9vdG1hcF9wZm4sIG1heF9sb3dfcGZuKTsKICNlbmRpZgotCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgYm9vdG1hcF9wZm4sIHBmbl9iYXNlLCBlbmRfcGZuKTsKKwlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIGJvb3RtYXBfcGZuLAorCQkJCQkgbWluX2xvd19wZm4sIGVuZF9wZm4pOwogCiAJLyogTm93IHJlZ2lzdGVyIHRoZSBhdmFpbGFibGUgcGh5c2ljYWwgbWVtb3J5IHdpdGggdGhlCiAJICogYWxsb2NhdG9yLgpAQCAtMTMyNCw5ICs5NzQsMjYgQEAKIAlyZXNlcnZlX2Jvb3RtZW0oKGJvb3RtYXBfcGZuIDw8IFBBR0VfU0hJRlQpLCBzaXplKTsKIAkqcGFnZXNfYXZhaWwgLT0gUEFHRV9BTElHTihzaXplKSA+PiBQQUdFX1NISUZUOwogCisJZm9yIChpID0gMDsgaSA8IHBhdmFpbF9lbnRzOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CisKKwkJc3RhcnRfcGZuID0gcGF2YWlsW2ldLnBoeXNfYWRkciA+PiBQQUdFX1NISUZUOworCQllbmRfcGZuID0gKHN0YXJ0X3BmbiArIChwYXZhaWxbaV0ucmVnX3NpemUgPj4gUEFHRV9TSElGVCkpOworI2lmZGVmIENPTkZJR19ERUJVR19CT09UTUVNCisJCXByb21fcHJpbnRmKCJtZW1vcnlfcHJlc2VudCgwLCAlbHgsICVseClcbiIsCisJCQkgICAgc3RhcnRfcGZuLCBlbmRfcGZuKTsKKyNlbmRpZgorCQltZW1vcnlfcHJlc2VudCgwLCBzdGFydF9wZm4sIGVuZF9wZm4pOworCX0KKworCXNwYXJzZV9pbml0KCk7CisKIAlyZXR1cm4gZW5kX3BmbjsKIH0KIAorc3RhdGljIHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzIHBhbGxbTUFYX0JBTktTXSBfX2luaXRkYXRhOworc3RhdGljIGludCBwYWxsX2VudHMgX19pbml0ZGF0YTsKKwogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGtlcm5lbF9tYXBfcmFuZ2UodW5zaWduZWQgbG9uZyBwc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGVuZCwgcGdwcm90X3QgcHJvdCkKIHsKQEAgLTEzODIsMTQgKzEwNDksNDQgQEAKIAlyZXR1cm4gYWxsb2NfYnl0ZXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyBwYWxsW01BWF9CQU5LU10gX19pbml0ZGF0YTsKLXN0YXRpYyBpbnQgcGFsbF9lbnRzIF9faW5pdGRhdGE7Ci0KIGV4dGVybiB1bnNpZ25lZCBpbnQga3ZtYXBfbGluZWFyX3BhdGNoWzFdOworI2VuZGlmIC8qIENPTkZJR19ERUJVR19QQUdFQUxMT0MgKi8KKworc3RhdGljIHZvaWQgX19pbml0IG1hcmtfa3B0ZV9iaXRtYXAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBzaGlmdF8yNTZNQiA9IDI4OworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbWFza18yNTZNQiA9ICgoMVVMIDw8IHNoaWZ0XzI1Nk1CKSAtIDFVTCk7CisJY29uc3QgdW5zaWduZWQgbG9uZyBzaXplXzI1Nk1CID0gKDFVTCA8PCBzaGlmdF8yNTZNQik7CisKKwl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJbG9uZyByZW1haW5zOworCisJCXJlbWFpbnMgPSBlbmQgLSBzdGFydDsKKwkJaWYgKHJlbWFpbnMgPCBzaXplXzI1Nk1CKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0YXJ0ICYgbWFza18yNTZNQikgeworCQkJc3RhcnQgPSAoc3RhcnQgKyBzaXplXzI1Nk1CKSAmIH5tYXNrXzI1Nk1COworCQkJY29udGludWU7CisJCX0KKworCQl3aGlsZSAocmVtYWlucyA+PSBzaXplXzI1Nk1CKSB7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gc3RhcnQgPj4gc2hpZnRfMjU2TUI7CisKKwkJCV9fc2V0X2JpdChpbmRleCwga3B0ZV9saW5lYXJfYml0bWFwKTsKKworCQkJc3RhcnQgKz0gc2l6ZV8yNTZNQjsKKwkJCXJlbWFpbnMgLT0gc2l6ZV8yNTZNQjsKKwkJfQorCX0KK30KIAogc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGksIG1lbV9hbGxvY2VkID0gMFVMOworCXVuc2lnbmVkIGxvbmcgaTsKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisJdW5zaWduZWQgbG9uZyBtZW1fYWxsb2NlZCA9IDBVTDsKKyNlbmRpZgogCiAJcmVhZF9vYnBfbWVtb3J5KCJyZWciLCAmcGFsbFswXSwgJnBhbGxfZW50cyk7CiAKQEAgLTEzOTgsMTAgKzEwOTUsMTYgQEAKIAogCQlwaHlzX3N0YXJ0ID0gcGFsbFtpXS5waHlzX2FkZHI7CiAJCXBoeXNfZW5kID0gcGh5c19zdGFydCArIHBhbGxbaV0ucmVnX3NpemU7CisKKwkJbWFya19rcHRlX2JpdG1hcChwaHlzX3N0YXJ0LCBwaHlzX2VuZCk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCiAJCW1lbV9hbGxvY2VkICs9IGtlcm5lbF9tYXBfcmFuZ2UocGh5c19zdGFydCwgcGh5c19lbmQsCiAJCQkJCQlQQUdFX0tFUk5FTCk7CisjZW5kaWYKIAl9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCiAJcHJpbnRrKCJBbGxvY2F0ZWQgJWxkIGJ5dGVzIGZvciBrZXJuZWwgcGFnZSB0YWJsZXMuXG4iLAogCSAgICAgICBtZW1fYWxsb2NlZCk7CiAKQEAgLTE0MDksOCArMTExMiwxMCBAQAogCWZsdXNoaSgma3ZtYXBfbGluZWFyX3BhdGNoWzBdKTsKIAogCV9fZmx1c2hfdGxiX2FsbCgpOworI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCiB2b2lkIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBoeXNfc3RhcnQgPSBwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUOwpAQCAtMTQxOSw2ICsxMTI0LDkgQEAKIAlrZXJuZWxfbWFwX3JhbmdlKHBoeXNfc3RhcnQsIHBoeXNfZW5kLAogCQkJIChlbmFibGUgPyBQQUdFX0tFUk5FTCA6IF9fcGdwcm90KDApKSk7CiAKKwlmbHVzaF90c2Jfa2VybmVsX3JhbmdlKFBBR0VfT0ZGU0VUICsgcGh5c19zdGFydCwKKwkJCSAgICAgICBQQUdFX09GRlNFVCArIHBoeXNfZW5kKTsKKwogCS8qIHdlIHNob3VsZCBwZXJmb3JtIGFuIElQSSBhbmQgZmx1c2ggYWxsIHRsYnMsCiAJICogYnV0IHRoYXQgY2FuIGRlYWRsb2NrLT5mbHVzaCBvbmx5IGN1cnJlbnQgY3B1LgogCSAqLwpAQCAtMTQzOSwxOCArMTE0NywxNTAgQEAKIAlyZXR1cm4gfjBVTDsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHRzYl9waHlzX3BhdGNoKHZvaWQpCit7CisJc3RydWN0IHRzYl9sZHF1YWRfcGh5c19wYXRjaF9lbnRyeSAqcHF1YWQ7CisJc3RydWN0IHRzYl9waHlzX3BhdGNoX2VudHJ5ICpwOworCisJcHF1YWQgPSAmX190c2JfbGRxdWFkX3BoeXNfcGF0Y2g7CisJd2hpbGUgKHBxdWFkIDwgJl9fdHNiX2xkcXVhZF9waHlzX3BhdGNoX2VuZCkgeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSBwcXVhZC0+YWRkcjsKKworCQlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJCSoodW5zaWduZWQgaW50ICopIGFkZHIgPSBwcXVhZC0+c3VuNHZfaW5zbjsKKwkJZWxzZQorCQkJKih1bnNpZ25lZCBpbnQgKikgYWRkciA9IHBxdWFkLT5zdW40dV9pbnNuOworCQl3bWIoKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oImZsdXNoCSUwIgorCQkJCSAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkJICAgICA6ICJyIiAoYWRkcikpOworCisJCXBxdWFkKys7CisJfQorCisJcCA9ICZfX3RzYl9waHlzX3BhdGNoOworCXdoaWxlIChwIDwgJl9fdHNiX3BoeXNfcGF0Y2hfZW5kKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IHAtPmFkZHI7CisKKwkJKih1bnNpZ25lZCBpbnQgKikgYWRkciA9IHAtPmluc247CisJCXdtYigpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2gJJTAiCisJCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkgICAgIDogInIiIChhZGRyKSk7CisKKwkJcCsrOworCX0KK30KKworLyogRG9uJ3QgbWFyayBhcyBpbml0LCB3ZSBnaXZlIHRoaXMgdG8gdGhlIEh5cGVydmlzb3IuICAqLworc3RhdGljIHN0cnVjdCBodl90c2JfZGVzY3Iga3RzYl9kZXNjclsyXTsKK2V4dGVybiBzdHJ1Y3QgdHNiIHN3YXBwZXJfdHNiW0tFUk5FTF9UU0JfTkVOVFJJRVNdOworCitzdGF0aWMgdm9pZCBfX2luaXQgc3VuNHZfa3RzYl9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBrdHNiX3BhOworCisJLyogRmlyc3QgS1RTQiBmb3IgUEFHRV9TSVpFIG1hcHBpbmdzLiAgKi8KKwlrdHNiX3BhID0ga2Vybl9iYXNlICsgKCh1bnNpZ25lZCBsb25nKSZzd2FwcGVyX3RzYlswXSAtIEtFUk5CQVNFKTsKKworCXN3aXRjaCAoUEFHRV9TSVpFKSB7CisJY2FzZSA4ICogMTAyNDoKKwlkZWZhdWx0OgorCQlrdHNiX2Rlc2NyWzBdLnBnc3pfaWR4ID0gSFZfUEdTWl9JRFhfOEs7CisJCWt0c2JfZGVzY3JbMF0ucGdzel9tYXNrID0gSFZfUEdTWl9NQVNLXzhLOworCQlicmVhazsKKworCWNhc2UgNjQgKiAxMDI0OgorCQlrdHNiX2Rlc2NyWzBdLnBnc3pfaWR4ID0gSFZfUEdTWl9JRFhfNjRLOworCQlrdHNiX2Rlc2NyWzBdLnBnc3pfbWFzayA9IEhWX1BHU1pfTUFTS182NEs7CisJCWJyZWFrOworCisJY2FzZSA1MTIgKiAxMDI0OgorCQlrdHNiX2Rlc2NyWzBdLnBnc3pfaWR4ID0gSFZfUEdTWl9JRFhfNTEySzsKKwkJa3RzYl9kZXNjclswXS5wZ3N6X21hc2sgPSBIVl9QR1NaX01BU0tfNTEySzsKKwkJYnJlYWs7CisKKwljYXNlIDQgKiAxMDI0ICogMTAyNDoKKwkJa3RzYl9kZXNjclswXS5wZ3N6X2lkeCA9IEhWX1BHU1pfSURYXzRNQjsKKwkJa3RzYl9kZXNjclswXS5wZ3N6X21hc2sgPSBIVl9QR1NaX01BU0tfNE1COworCQlicmVhazsKKwl9OworCisJa3RzYl9kZXNjclswXS5hc3NvYyA9IDE7CisJa3RzYl9kZXNjclswXS5udW1fdHRlcyA9IEtFUk5FTF9UU0JfTkVOVFJJRVM7CisJa3RzYl9kZXNjclswXS5jdHhfaWR4ID0gMDsKKwlrdHNiX2Rlc2NyWzBdLnRzYl9iYXNlID0ga3RzYl9wYTsKKwlrdHNiX2Rlc2NyWzBdLnJlc3YgPSAwOworCisJLyogU2Vjb25kIEtUU0IgZm9yIDRNQi8yNTZNQiBtYXBwaW5ncy4gICovCisJa3RzYl9wYSA9IChrZXJuX2Jhc2UgKworCQkgICAoKHVuc2lnbmVkIGxvbmcpJnN3YXBwZXJfNG1fdHNiWzBdIC0gS0VSTkJBU0UpKTsKKworCWt0c2JfZGVzY3JbMV0ucGdzel9pZHggPSBIVl9QR1NaX0lEWF80TUI7CisJa3RzYl9kZXNjclsxXS5wZ3N6X21hc2sgPSAoSFZfUEdTWl9NQVNLXzRNQiB8CisJCQkJICAgSFZfUEdTWl9NQVNLXzI1Nk1CKTsKKwlrdHNiX2Rlc2NyWzFdLmFzc29jID0gMTsKKwlrdHNiX2Rlc2NyWzFdLm51bV90dGVzID0gS0VSTkVMX1RTQjRNX05FTlRSSUVTOworCWt0c2JfZGVzY3JbMV0uY3R4X2lkeCA9IDA7CisJa3RzYl9kZXNjclsxXS50c2JfYmFzZSA9IGt0c2JfcGE7CisJa3RzYl9kZXNjclsxXS5yZXN2ID0gMDsKK30KKwordm9pZCBfX2NwdWluaXQgc3VuNHZfa3RzYl9yZWdpc3Rlcih2b2lkKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgZnVuYyBhc20oIiVvNSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYXJnMCBhc20oIiVvMCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYXJnMSBhc20oIiVvMSIpOworCXVuc2lnbmVkIGxvbmcgcGE7CisKKwlwYSA9IGtlcm5fYmFzZSArICgodW5zaWduZWQgbG9uZykma3RzYl9kZXNjclswXSAtIEtFUk5CQVNFKTsKKworCWZ1bmMgPSBIVl9GQVNUX01NVV9UU0JfQ1RYMDsKKwlhcmcwID0gMjsKKwlhcmcxID0gcGE7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInRhCSU2IgorCQkJICAgICA6ICI9JnIiIChmdW5jKSwgIj0mciIgKGFyZzApLCAiPSZyIiAoYXJnMSkKKwkJCSAgICAgOiAiMCIgKGZ1bmMpLCAiMSIgKGFyZzApLCAiMiIgKGFyZzEpLAorCQkJICAgICAgICJpIiAoSFZfRkFTVF9UUkFQKSk7Cit9CisKIC8qIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMgKi8KIAogZXh0ZXJuIHZvaWQgY2hlZXRhaF9lY2FjaGVfZmx1c2hfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHN1bjR2X3BhdGNoX3RsYl9oYW5kbGVycyh2b2lkKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZF9wZm47CiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsyMDQ4XTsKIAorc3RhdGljIHZvaWQgc3VuNHVfcGdwcm90X2luaXQodm9pZCk7CitzdGF0aWMgdm9pZCBzdW40dl9wZ3Byb3RfaW5pdCh2b2lkKTsKKwogdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHBhZ2VzX2F2YWlsLCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHBhZ2VzX2F2YWlsLCBzaGlmdCwgcGh5c19iYXNlOwogCXVuc2lnbmVkIGxvbmcgcmVhbF9lbmQsIGk7CiAKKwlrZXJuX2Jhc2UgPSAocHJvbV9ib290X21hcHBpbmdfcGh5c19sb3cgPj4gMjJVTCkgPDwgMjJVTDsKKwlrZXJuX3NpemUgPSAodW5zaWduZWQgbG9uZykmX2VuZCAtICh1bnNpZ25lZCBsb25nKUtFUk5CQVNFOworCisJLyogSW52YWxpZGF0ZSBib3RoIGtlcm5lbCBUU0JzLiAgKi8KKwltZW1zZXQoc3dhcHBlcl90c2IsIDB4NDAsIHNpemVvZihzd2FwcGVyX3RzYikpOworCW1lbXNldChzd2FwcGVyXzRtX3RzYiwgMHg0MCwgc2l6ZW9mKHN3YXBwZXJfNG1fdHNiKSk7CisKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJc3VuNHZfcGdwcm90X2luaXQoKTsKKwllbHNlCisJCXN1bjR1X3BncHJvdF9pbml0KCk7CisKKwlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzIHx8CisJICAgIHRsYl90eXBlID09IGh5cGVydmlzb3IpCisJCXRzYl9waHlzX3BhdGNoKCk7CisKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgeworCQlzdW40dl9wYXRjaF90bGJfaGFuZGxlcnMoKTsKKwkJc3VuNHZfa3RzYl9pbml0KCk7CisJfQorCiAJLyogRmluZCBhdmFpbGFibGUgcGh5c2ljYWwgbWVtb3J5Li4uICovCiAJcmVhZF9vYnBfbWVtb3J5KCJhdmFpbGFibGUiLCAmcGF2YWlsWzBdLCAmcGF2YWlsX2VudHMpOwogCkBAIC0xNDU4LDExICsxMjk4LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcGF2YWlsX2VudHM7IGkrKykKIAkJcGh5c19iYXNlID0gbWluKHBoeXNfYmFzZSwgcGF2YWlsW2ldLnBoeXNfYWRkcik7CiAKLQlwZm5fYmFzZSA9IHBoeXNfYmFzZSA+PiBQQUdFX1NISUZUOwotCi0Ja2Vybl9iYXNlID0gKHByb21fYm9vdF9tYXBwaW5nX3BoeXNfbG93ID4+IDIyVUwpIDw8IDIyVUw7Ci0Ja2Vybl9zaXplID0gKHVuc2lnbmVkIGxvbmcpJl9lbmQgLSAodW5zaWduZWQgbG9uZylLRVJOQkFTRTsKLQogCXNldF9iaXQoMCwgbW11X2NvbnRleHRfYm1hcCk7CiAKIAlzaGlmdCA9IGtlcm5fYmFzZSArIFBBR0VfT0ZGU0VUIC0gKCh1bnNpZ25lZCBsb25nKUtFUk5CQVNFKTsKQEAgLTE0ODYsNDcgKzEzMjEsMzggQEAKIAlwdWRfc2V0KHB1ZF9vZmZzZXQoJnN3YXBwZXJfcGdfZGlyWzBdLCAwKSwKIAkJc3dhcHBlcl9sb3dfcG1kX2RpciArIChzaGlmdCAvIHNpemVvZihwZ2RfdCkpKTsKIAkKLQlzd2FwcGVyX3BnZF96ZXJvID0gcGdkX3ZhbChzd2FwcGVyX3BnX2RpclswXSk7Ci0JCiAJaW5oZXJpdF9wcm9tX21hcHBpbmdzKCk7CiAJCi0JLyogT2ssIHdlIGNhbiB1c2Ugb3VyIFRMQiBtaXNzIGFuZCB3aW5kb3cgdHJhcCBoYW5kbGVycyBzYWZlbHkuCi0JICogV2UgbmVlZCB0byBkbyBhIHF1aWNrIHBlZWsgaGVyZSB0byBzZWUgaWYgd2UgYXJlIG9uIFN0YXJGaXJlCi0JICogb3Igbm90LCBzbyBzZXR1cF90YmEgY2FuIHNldHVwIHRoZSBJUlEgZ2xvYmFscyBjb3JyZWN0bHkgKGl0Ci0JICogbmVlZHMgdG8gZ2V0IHRoZSBoYXJkIHNtcCBwcm9jZXNzb3IgaWQgY29ycmVjdGx5KS4KLQkgKi8KLQl7Ci0JCWV4dGVybiB2b2lkIHNldHVwX3RiYShpbnQpOwotCQlzZXR1cF90YmEodGhpc19pc19zdGFyZmlyZSk7Ci0JfQotCi0JaW5oZXJpdF9sb2NrZWRfcHJvbV9tYXBwaW5ncygxKTsKKwkvKiBPaywgd2UgY2FuIHVzZSBvdXIgVExCIG1pc3MgYW5kIHdpbmRvdyB0cmFwIGhhbmRsZXJzIHNhZmVseS4gICovCisJc2V0dXBfdGJhKCk7CiAKIAlfX2ZsdXNoX3RsYl9hbGwoKTsKIAorCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQlzdW40dl9rdHNiX3JlZ2lzdGVyKCk7CisKIAkvKiBTZXR1cCBib290bWVtLi4uICovCiAJcGFnZXNfYXZhaWwgPSAwOwotCWxhc3RfdmFsaWRfcGZuID0gZW5kX3BmbiA9IGJvb3RtZW1faW5pdCgmcGFnZXNfYXZhaWwpOworCWxhc3RfdmFsaWRfcGZuID0gZW5kX3BmbiA9IGJvb3RtZW1faW5pdCgmcGFnZXNfYXZhaWwsIHBoeXNfYmFzZSk7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisJbWF4X21hcG5yID0gbGFzdF92YWxpZF9wZm47CisKIAlrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KCk7Ci0jZW5kaWYKIAogCXsKIAkJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU107CiAJCXVuc2lnbmVkIGxvbmcgemhvbGVzX3NpemVbTUFYX05SX1pPTkVTXTsKLQkJdW5zaWduZWQgbG9uZyBucGFnZXM7CiAJCWludCB6bnVtOwogCiAJCWZvciAoem51bSA9IDA7IHpudW0gPCBNQVhfTlJfWk9ORVM7IHpudW0rKykKIAkJCXpvbmVzX3NpemVbem51bV0gPSB6aG9sZXNfc2l6ZVt6bnVtXSA9IDA7CiAKLQkJbnBhZ2VzID0gZW5kX3BmbiAtIHBmbl9iYXNlOwotCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG5wYWdlczsKLQkJemhvbGVzX3NpemVbWk9ORV9ETUFdID0gbnBhZ2VzIC0gcGFnZXNfYXZhaWw7CisJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gZW5kX3BmbjsKKwkJemhvbGVzX3NpemVbWk9ORV9ETUFdID0gZW5kX3BmbiAtIHBhZ2VzX2F2YWlsOwogCiAJCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgJmNvbnRpZ19wYWdlX2RhdGEsIHpvbmVzX3NpemUsCi0JCQkJICAgIHBoeXNfYmFzZSA+PiBQQUdFX1NISUZULCB6aG9sZXNfc2l6ZSk7CisJCQkJICAgIF9fcGEoUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQsCisJCQkJICAgIHpob2xlc19zaXplKTsKIAl9CiAKIAlkZXZpY2Vfc2NhbigpOwpAQCAtMTU5Niw3ICsxNDIyLDYgQEAKIAogCXRhaW50X3JlYWxfcGFnZXMoKTsKIAotCW1heF9tYXBuciA9IGxhc3RfdmFsaWRfcGZuIC0gcGZuX2Jhc2U7CiAJaGlnaF9tZW1vcnkgPSBfX3ZhKGxhc3RfdmFsaWRfcGZuIDw8IFBBR0VfU0hJRlQpOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JPT1RNRU0KQEAgLTE2NTMsNyArMTQ3OCw3IEBACiAJCXAgPSB2aXJ0X3RvX3BhZ2UocGFnZSk7CiAKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQocCk7Ci0JCXNldF9wYWdlX2NvdW50KHAsIDEpOworCQlpbml0X3BhZ2VfY291bnQocCk7CiAJCV9fZnJlZV9wYWdlKHApOwogCQludW1fcGh5c3BhZ2VzKys7CiAJCXRvdGFscmFtX3BhZ2VzKys7CkBAIC0xNjY5LDEwICsxNDk0LDM0OSBAQAogCQlzdHJ1Y3QgcGFnZSAqcCA9IHZpcnRfdG9fcGFnZShzdGFydCk7CiAKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQocCk7Ci0JCXNldF9wYWdlX2NvdW50KHAsIDEpOworCQlpbml0X3BhZ2VfY291bnQocCk7CiAJCV9fZnJlZV9wYWdlKHApOwogCQludW1fcGh5c3BhZ2VzKys7CiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJfQogfQogI2VuZGlmCisKKyNkZWZpbmUgX1BBR0VfQ0FDSEVfNFUJKF9QQUdFX0NQXzRVIHwgX1BBR0VfQ1ZfNFUpCisjZGVmaW5lIF9QQUdFX0NBQ0hFXzRWCShfUEFHRV9DUF80ViB8IF9QQUdFX0NWXzRWKQorI2RlZmluZSBfX0RJUlRZX0JJVFNfNFUJIChfUEFHRV9NT0RJRklFRF80VSB8IF9QQUdFX1dSSVRFXzRVIHwgX1BBR0VfV180VSkKKyNkZWZpbmUgX19ESVJUWV9CSVRTXzRWCSAoX1BBR0VfTU9ESUZJRURfNFYgfCBfUEFHRV9XUklURV80ViB8IF9QQUdFX1dfNFYpCisjZGVmaW5lIF9fQUNDRVNTX0JJVFNfNFUgKF9QQUdFX0FDQ0VTU0VEXzRVIHwgX1BBR0VfUkVBRF80VSB8IF9QQUdFX1IpCisjZGVmaW5lIF9fQUNDRVNTX0JJVFNfNFYgKF9QQUdFX0FDQ0VTU0VEXzRWIHwgX1BBR0VfUkVBRF80ViB8IF9QQUdFX1IpCisKK3BncHJvdF90IFBBR0VfS0VSTkVMIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKFBBR0VfS0VSTkVMKTsKKworcGdwcm90X3QgUEFHRV9LRVJORUxfTE9DS0VEIF9fcmVhZF9tb3N0bHk7CitwZ3Byb3RfdCBQQUdFX0NPUFkgX19yZWFkX21vc3RseTsKKworcGdwcm90X3QgUEFHRV9TSEFSRUQgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0woUEFHRV9TSEFSRUQpOworCitwZ3Byb3RfdCBQQUdFX0VYRUMgX19yZWFkX21vc3RseTsKK3Vuc2lnbmVkIGxvbmcgcGdfaW9iaXRzIF9fcmVhZF9tb3N0bHk7CisKK3Vuc2lnbmVkIGxvbmcgX1BBR0VfSUUgX19yZWFkX21vc3RseTsKKwordW5zaWduZWQgbG9uZyBfUEFHRV9FIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKF9QQUdFX0UpOworCit1bnNpZ25lZCBsb25nIF9QQUdFX0NBQ0hFIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKF9QQUdFX0NBQ0hFKTsKKworc3RhdGljIHZvaWQgcHJvdF9pbml0X2NvbW1vbih1bnNpZ25lZCBsb25nIHBhZ2Vfbm9uZSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NoYXJlZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX2NvcHksCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9yZWFkb25seSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX2V4ZWNfYml0KQoreworCVBBR0VfQ09QWSA9IF9fcGdwcm90KHBhZ2VfY29weSk7CisJUEFHRV9TSEFSRUQgPSBfX3BncHJvdChwYWdlX3NoYXJlZCk7CisKKwlwcm90ZWN0aW9uX21hcFsweDBdID0gX19wZ3Byb3QocGFnZV9ub25lKTsKKwlwcm90ZWN0aW9uX21hcFsweDFdID0gX19wZ3Byb3QocGFnZV9yZWFkb25seSAmIH5wYWdlX2V4ZWNfYml0KTsKKwlwcm90ZWN0aW9uX21hcFsweDJdID0gX19wZ3Byb3QocGFnZV9jb3B5ICYgfnBhZ2VfZXhlY19iaXQpOworCXByb3RlY3Rpb25fbWFwWzB4M10gPSBfX3BncHJvdChwYWdlX2NvcHkgJiB+cGFnZV9leGVjX2JpdCk7CisJcHJvdGVjdGlvbl9tYXBbMHg0XSA9IF9fcGdwcm90KHBhZ2VfcmVhZG9ubHkpOworCXByb3RlY3Rpb25fbWFwWzB4NV0gPSBfX3BncHJvdChwYWdlX3JlYWRvbmx5KTsKKwlwcm90ZWN0aW9uX21hcFsweDZdID0gX19wZ3Byb3QocGFnZV9jb3B5KTsKKwlwcm90ZWN0aW9uX21hcFsweDddID0gX19wZ3Byb3QocGFnZV9jb3B5KTsKKwlwcm90ZWN0aW9uX21hcFsweDhdID0gX19wZ3Byb3QocGFnZV9ub25lKTsKKwlwcm90ZWN0aW9uX21hcFsweDldID0gX19wZ3Byb3QocGFnZV9yZWFkb25seSAmIH5wYWdlX2V4ZWNfYml0KTsKKwlwcm90ZWN0aW9uX21hcFsweGFdID0gX19wZ3Byb3QocGFnZV9zaGFyZWQgJiB+cGFnZV9leGVjX2JpdCk7CisJcHJvdGVjdGlvbl9tYXBbMHhiXSA9IF9fcGdwcm90KHBhZ2Vfc2hhcmVkICYgfnBhZ2VfZXhlY19iaXQpOworCXByb3RlY3Rpb25fbWFwWzB4Y10gPSBfX3BncHJvdChwYWdlX3JlYWRvbmx5KTsKKwlwcm90ZWN0aW9uX21hcFsweGRdID0gX19wZ3Byb3QocGFnZV9yZWFkb25seSk7CisJcHJvdGVjdGlvbl9tYXBbMHhlXSA9IF9fcGdwcm90KHBhZ2Vfc2hhcmVkKTsKKwlwcm90ZWN0aW9uX21hcFsweGZdID0gX19wZ3Byb3QocGFnZV9zaGFyZWQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc3VuNHVfcGdwcm90X2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZ2Vfbm9uZSwgcGFnZV9zaGFyZWQsIHBhZ2VfY29weSwgcGFnZV9yZWFkb25seTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VfZXhlY19iaXQ7CisKKwlQQUdFX0tFUk5FTCA9IF9fcGdwcm90IChfUEFHRV9QUkVTRU5UXzRVIHwgX1BBR0VfVkFMSUQgfAorCQkJCV9QQUdFX0NBQ0hFXzRVIHwgX1BBR0VfUF80VSB8CisJCQkJX19BQ0NFU1NfQklUU180VSB8IF9fRElSVFlfQklUU180VSB8CisJCQkJX1BBR0VfRVhFQ180VSk7CisJUEFHRV9LRVJORUxfTE9DS0VEID0gX19wZ3Byb3QgKF9QQUdFX1BSRVNFTlRfNFUgfCBfUEFHRV9WQUxJRCB8CisJCQkJICAgICAgIF9QQUdFX0NBQ0hFXzRVIHwgX1BBR0VfUF80VSB8CisJCQkJICAgICAgIF9fQUNDRVNTX0JJVFNfNFUgfCBfX0RJUlRZX0JJVFNfNFUgfAorCQkJCSAgICAgICBfUEFHRV9FWEVDXzRVIHwgX1BBR0VfTF80VSk7CisJUEFHRV9FWEVDID0gX19wZ3Byb3QoX1BBR0VfRVhFQ180VSk7CisKKwlfUEFHRV9JRSA9IF9QQUdFX0lFXzRVOworCV9QQUdFX0UgPSBfUEFHRV9FXzRVOworCV9QQUdFX0NBQ0hFID0gX1BBR0VfQ0FDSEVfNFU7CisKKwlwZ19pb2JpdHMgPSAoX1BBR0VfVkFMSUQgfCBfUEFHRV9QUkVTRU5UXzRVIHwgX19ESVJUWV9CSVRTXzRVIHwKKwkJICAgICBfX0FDQ0VTU19CSVRTXzRVIHwgX1BBR0VfRV80VSk7CisKKwlrZXJuX2xpbmVhcl9wdGVfeG9yWzBdID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1o0TUJfNFUpIF4KKwkJMHhmZmZmZjgwMDAwMDAwMDAwOworCWtlcm5fbGluZWFyX3B0ZV94b3JbMF0gfD0gKF9QQUdFX0NQXzRVIHwgX1BBR0VfQ1ZfNFUgfAorCQkJCSAgIF9QQUdFX1BfNFUgfCBfUEFHRV9XXzRVKTsKKworCS8qIFhYWCBTaG91bGQgdXNlIDI1Nk1CIG9uIFBhbnRoZXIuIFhYWCAqLworCWtlcm5fbGluZWFyX3B0ZV94b3JbMV0gPSBrZXJuX2xpbmVhcl9wdGVfeG9yWzBdOworCisJX1BBR0VfU1pCSVRTID0gX1BBR0VfU1pCSVRTXzRVOworCV9QQUdFX0FMTF9TWl9CSVRTID0gIChfUEFHRV9TWjRNQl80VSB8IF9QQUdFX1NaNTEyS180VSB8CisJCQkgICAgICBfUEFHRV9TWjY0S180VSB8IF9QQUdFX1NaOEtfNFUgfAorCQkJICAgICAgX1BBR0VfU1ozMk1CXzRVIHwgX1BBR0VfU1oyNTZNQl80VSk7CisKKworCXBhZ2Vfbm9uZSA9IF9QQUdFX1BSRVNFTlRfNFUgfCBfUEFHRV9BQ0NFU1NFRF80VSB8IF9QQUdFX0NBQ0hFXzRVOworCXBhZ2Vfc2hhcmVkID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfUFJFU0VOVF80VSB8IF9QQUdFX0NBQ0hFXzRVIHwKKwkJICAgICAgIF9fQUNDRVNTX0JJVFNfNFUgfCBfUEFHRV9XUklURV80VSB8IF9QQUdFX0VYRUNfNFUpOworCXBhZ2VfY29weSAgID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfUFJFU0VOVF80VSB8IF9QQUdFX0NBQ0hFXzRVIHwKKwkJICAgICAgIF9fQUNDRVNTX0JJVFNfNFUgfCBfUEFHRV9FWEVDXzRVKTsKKwlwYWdlX3JlYWRvbmx5ICAgPSAoX1BBR0VfVkFMSUQgfCBfUEFHRV9QUkVTRU5UXzRVIHwgX1BBR0VfQ0FDSEVfNFUgfAorCQkJICAgX19BQ0NFU1NfQklUU180VSB8IF9QQUdFX0VYRUNfNFUpOworCisJcGFnZV9leGVjX2JpdCA9IF9QQUdFX0VYRUNfNFU7CisKKwlwcm90X2luaXRfY29tbW9uKHBhZ2Vfbm9uZSwgcGFnZV9zaGFyZWQsIHBhZ2VfY29weSwgcGFnZV9yZWFkb25seSwKKwkJCSBwYWdlX2V4ZWNfYml0KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHN1bjR2X3BncHJvdF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwYWdlX25vbmUsIHBhZ2Vfc2hhcmVkLCBwYWdlX2NvcHksIHBhZ2VfcmVhZG9ubHk7CisJdW5zaWduZWQgbG9uZyBwYWdlX2V4ZWNfYml0OworCisJUEFHRV9LRVJORUwgPSBfX3BncHJvdCAoX1BBR0VfUFJFU0VOVF80ViB8IF9QQUdFX1ZBTElEIHwKKwkJCQlfUEFHRV9DQUNIRV80ViB8IF9QQUdFX1BfNFYgfAorCQkJCV9fQUNDRVNTX0JJVFNfNFYgfCBfX0RJUlRZX0JJVFNfNFYgfAorCQkJCV9QQUdFX0VYRUNfNFYpOworCVBBR0VfS0VSTkVMX0xPQ0tFRCA9IFBBR0VfS0VSTkVMOworCVBBR0VfRVhFQyA9IF9fcGdwcm90KF9QQUdFX0VYRUNfNFYpOworCisJX1BBR0VfSUUgPSBfUEFHRV9JRV80VjsKKwlfUEFHRV9FID0gX1BBR0VfRV80VjsKKwlfUEFHRV9DQUNIRSA9IF9QQUdFX0NBQ0hFXzRWOworCisJa2Vybl9saW5lYXJfcHRlX3hvclswXSA9IChfUEFHRV9WQUxJRCB8IF9QQUdFX1NaNE1CXzRWKSBeCisJCTB4ZmZmZmY4MDAwMDAwMDAwMDsKKwlrZXJuX2xpbmVhcl9wdGVfeG9yWzBdIHw9IChfUEFHRV9DUF80ViB8IF9QQUdFX0NWXzRWIHwKKwkJCQkgICBfUEFHRV9QXzRWIHwgX1BBR0VfV180Vik7CisKKwlrZXJuX2xpbmVhcl9wdGVfeG9yWzFdID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1oyNTZNQl80VikgXgorCQkweGZmZmZmODAwMDAwMDAwMDA7CisJa2Vybl9saW5lYXJfcHRlX3hvclsxXSB8PSAoX1BBR0VfQ1BfNFYgfCBfUEFHRV9DVl80ViB8CisJCQkJICAgX1BBR0VfUF80ViB8IF9QQUdFX1dfNFYpOworCisJcGdfaW9iaXRzID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfUFJFU0VOVF80ViB8IF9fRElSVFlfQklUU180ViB8CisJCSAgICAgX19BQ0NFU1NfQklUU180ViB8IF9QQUdFX0VfNFYpOworCisJX1BBR0VfU1pCSVRTID0gX1BBR0VfU1pCSVRTXzRWOworCV9QQUdFX0FMTF9TWl9CSVRTID0gKF9QQUdFX1NaMTZHQl80ViB8IF9QQUdFX1NaMkdCXzRWIHwKKwkJCSAgICAgX1BBR0VfU1oyNTZNQl80ViB8IF9QQUdFX1NaMzJNQl80ViB8CisJCQkgICAgIF9QQUdFX1NaNE1CXzRWIHwgX1BBR0VfU1o1MTJLXzRWIHwKKwkJCSAgICAgX1BBR0VfU1o2NEtfNFYgfCBfUEFHRV9TWjhLXzRWKTsKKworCXBhZ2Vfbm9uZSA9IF9QQUdFX1BSRVNFTlRfNFYgfCBfUEFHRV9BQ0NFU1NFRF80ViB8IF9QQUdFX0NBQ0hFXzRWOworCXBhZ2Vfc2hhcmVkID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfUFJFU0VOVF80ViB8IF9QQUdFX0NBQ0hFXzRWIHwKKwkJICAgICAgIF9fQUNDRVNTX0JJVFNfNFYgfCBfUEFHRV9XUklURV80ViB8IF9QQUdFX0VYRUNfNFYpOworCXBhZ2VfY29weSAgID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfUFJFU0VOVF80ViB8IF9QQUdFX0NBQ0hFXzRWIHwKKwkJICAgICAgIF9fQUNDRVNTX0JJVFNfNFYgfCBfUEFHRV9FWEVDXzRWKTsKKwlwYWdlX3JlYWRvbmx5ID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfUFJFU0VOVF80ViB8IF9QQUdFX0NBQ0hFXzRWIHwKKwkJCSBfX0FDQ0VTU19CSVRTXzRWIHwgX1BBR0VfRVhFQ180Vik7CisKKwlwYWdlX2V4ZWNfYml0ID0gX1BBR0VfRVhFQ180VjsKKworCXByb3RfaW5pdF9jb21tb24ocGFnZV9ub25lLCBwYWdlX3NoYXJlZCwgcGFnZV9jb3B5LCBwYWdlX3JlYWRvbmx5LAorCQkJIHBhZ2VfZXhlY19iaXQpOworfQorCit1bnNpZ25lZCBsb25nIHB0ZV9zel9iaXRzKHVuc2lnbmVkIGxvbmcgc3opCit7CisJaWYgKHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJc3dpdGNoIChzeikgeworCQljYXNlIDggKiAxMDI0OgorCQlkZWZhdWx0OgorCQkJcmV0dXJuIF9QQUdFX1NaOEtfNFY7CisJCWNhc2UgNjQgKiAxMDI0OgorCQkJcmV0dXJuIF9QQUdFX1NaNjRLXzRWOworCQljYXNlIDUxMiAqIDEwMjQ6CisJCQlyZXR1cm4gX1BBR0VfU1o1MTJLXzRWOworCQljYXNlIDQgKiAxMDI0ICogMTAyNDoKKwkJCXJldHVybiBfUEFHRV9TWjRNQl80VjsKKwkJfTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKHN6KSB7CisJCWNhc2UgOCAqIDEwMjQ6CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gX1BBR0VfU1o4S180VTsKKwkJY2FzZSA2NCAqIDEwMjQ6CisJCQlyZXR1cm4gX1BBR0VfU1o2NEtfNFU7CisJCWNhc2UgNTEyICogMTAyNDoKKwkJCXJldHVybiBfUEFHRV9TWjUxMktfNFU7CisJCWNhc2UgNCAqIDEwMjQgKiAxMDI0OgorCQkJcmV0dXJuIF9QQUdFX1NaNE1CXzRVOworCQl9OworCX0KK30KKworcHRlX3QgbWtfcHRlX2lvKHVuc2lnbmVkIGxvbmcgcGFnZSwgcGdwcm90X3QgcHJvdCwgaW50IHNwYWNlLCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSkKK3sKKwlwdGVfdCBwdGU7CisKKwlwdGVfdmFsKHB0ZSkgID0gcGFnZSB8IHBncHJvdF92YWwocGdwcm90X25vbmNhY2hlZChwcm90KSk7CisJcHRlX3ZhbChwdGUpIHw9ICgoKHVuc2lnbmVkIGxvbmcpc3BhY2UpIDw8IDMyKTsKKwlwdGVfdmFsKHB0ZSkgfD0gcHRlX3N6X2JpdHMocGFnZV9zaXplKTsKKworCXJldHVybiBwdGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGtlcm5fbGFyZ2VfdHRlKHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwl2YWwgPSAoX1BBR0VfVkFMSUQgfCBfUEFHRV9TWjRNQl80VSB8CisJICAgICAgIF9QQUdFX0NQXzRVIHwgX1BBR0VfQ1ZfNFUgfCBfUEFHRV9QXzRVIHwKKwkgICAgICAgX1BBR0VfRVhFQ180VSB8IF9QQUdFX0xfNFUgfCBfUEFHRV9XXzRVKTsKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJdmFsID0gKF9QQUdFX1ZBTElEIHwgX1BBR0VfU1o0TUJfNFYgfAorCQkgICAgICAgX1BBR0VfQ1BfNFYgfCBfUEFHRV9DVl80ViB8IF9QQUdFX1BfNFYgfAorCQkgICAgICAgX1BBR0VfRVhFQ180ViB8IF9QQUdFX1dfNFYpOworCisJcmV0dXJuIHZhbCB8IHBhZGRyOworfQorCisvKgorICogVHJhbnNsYXRlIFBST00ncyBtYXBwaW5nIHdlIGNhcHR1cmUgYXQgYm9vdCB0aW1lIGludG8gcGh5c2ljYWwgYWRkcmVzcy4KKyAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIG9ubHkgc2V0IGZyb20gcHJvbV9jYWxsYmFjaygpIGludm9jYXRpb25zLgorICovCit1bnNpZ25lZCBsb25nIHByb21fdmlydF90b19waHlzKHVuc2lnbmVkIGxvbmcgcHJvbXZhLCBpbnQgKmVycm9yKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwlpbnQgaTsKKworCW1hc2sgPSBfUEFHRV9QQUREUl80VTsKKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJbWFzayA9IF9QQUdFX1BBRERSXzRWOworCisJZm9yIChpID0gMDsgaSA8IHByb21fdHJhbnNfZW50czsgaSsrKSB7CisJCXN0cnVjdCBsaW51eF9wcm9tX3RyYW5zbGF0aW9uICpwID0gJnByb21fdHJhbnNbaV07CisKKwkJaWYgKHByb212YSA+PSBwLT52aXJ0ICYmCisJCSAgICBwcm9tdmEgPCAocC0+dmlydCArIHAtPnNpemUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGJhc2UgPSBwLT5kYXRhICYgbWFzazsKKworCQkJaWYgKGVycm9yKQorCQkJCSplcnJvciA9IDA7CisJCQlyZXR1cm4gYmFzZSArIChwcm9tdmEgJiAoODE5MiAtIDEpKTsKKwkJfQorCX0KKwlpZiAoZXJyb3IpCisJCSplcnJvciA9IDE7CisJcmV0dXJuIDBVTDsKK30KKworLyogWFhYIFdlIHNob3VsZCBraWxsIG9mZiB0aGlzIHVnbHkgdGhpbmcgYXQgc28gbWUgcG9pbnQuIFhYWCAqLwordW5zaWduZWQgbG9uZyBzdW40dV9nZXRfcHRlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwZ2RfdCAqcGdkcDsKKwlwdWRfdCAqcHVkcDsKKwlwbWRfdCAqcG1kcDsKKwlwdGVfdCAqcHRlcDsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBfUEFHRV9QQUREUl80VTsKKworCWlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQltYXNrID0gX1BBR0VfUEFERFJfNFY7CisKKwlpZiAoYWRkciA+PSBQQUdFX09GRlNFVCkKKwkJcmV0dXJuIGFkZHIgJiBtYXNrOworCisJaWYgKChhZGRyID49IExPV19PQlBfQUREUkVTUykgJiYgKGFkZHIgPCBISV9PQlBfQUREUkVTUykpCisJCXJldHVybiBwcm9tX3ZpcnRfdG9fcGh5cyhhZGRyLCBOVUxMKTsKKworCXBnZHAgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisJcHVkcCA9IHB1ZF9vZmZzZXQocGdkcCwgYWRkcik7CisJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7CisJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpOworCisJcmV0dXJuIHB0ZV92YWwoKnB0ZXApICYgbWFzazsKK30KKworLyogSWYgbm90IGxvY2tlZCwgemFwIGl0LiAqLwordm9pZCBfX2ZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBzdGF0ZTsKKwlpbnQgaTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJmbHVzaHdcblx0IgorCQkJICAgICAicmRwcgklJXBzdGF0ZSwgJTBcblx0IgorCQkJICAgICAid3JwcgklMCwgJTEsICUlcHN0YXRlIgorCQkJICAgICA6ICI9ciIgKHBzdGF0ZSkKKwkJCSAgICAgOiAiaSIgKFBTVEFURV9JRSkpOworCWlmICh0bGJfdHlwZSA9PSBzcGl0ZmlyZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQkJLyogU3BpdGZpcmUgRXJyYXRhICMzMiB3b3JrYXJvdW5kICovCisJCQkvKiBOT1RFOiBBbHdheXMgcnVucyBvbiBzcGl0ZmlyZSwgc28gbm8KKwkJCSAqICAgICAgIGNoZWV0YWgrIHBhZ2Ugc2l6ZSBlbmNvZGluZ3MuCisJCQkgKi8KKwkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhCSUwLCBbJTFdICUyXG5cdCIKKwkJCQkJICAgICAiZmx1c2gJJSVnNiIKKwkJCQkJICAgICA6IC8qIE5vIG91dHB1dHMgKi8KKwkJCQkJICAgICA6ICJyIiAoMCksCisJCQkJCSAgICAgInIiIChQUklNQVJZX0NPTlRFWFQpLCAiaSIgKEFTSV9ETU1VKSk7CisKKwkJCWlmICghKHNwaXRmaXJlX2dldF9kdGxiX2RhdGEoaSkgJiBfUEFHRV9MXzRVKSkgeworCQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHhhICUlZzAsIFslMF0gJTFcblx0IgorCQkJCQkJICAgICAibWVtYmFyICNTeW5jIgorCQkJCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkJCSAgICAgOiAiciIgKFRMQl9UQUdfQUNDRVNTKSwgImkiIChBU0lfRE1NVSkpOworCQkJCXNwaXRmaXJlX3B1dF9kdGxiX2RhdGEoaSwgMHgwVUwpOworCQkJfQorCisJCQkvKiBTcGl0ZmlyZSBFcnJhdGEgIzMyIHdvcmthcm91bmQgKi8KKwkJCS8qIE5PVEU6IEFsd2F5cyBydW5zIG9uIHNwaXRmaXJlLCBzbyBubworCQkJICogICAgICAgY2hlZXRhaCsgcGFnZSBzaXplIGVuY29kaW5ncy4KKwkJCSAqLworCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEJJTAsIFslMV0gJTJcblx0IgorCQkJCQkgICAgICJmbHVzaAklJWc2IgorCQkJCQkgICAgIDogLyogTm8gb3V0cHV0cyAqLworCQkJCQkgICAgIDogInIiICgwKSwKKwkJCQkJICAgICAiciIgKFBSSU1BUllfQ09OVEVYVCksICJpIiAoQVNJX0RNTVUpKTsKKworCQkJaWYgKCEoc3BpdGZpcmVfZ2V0X2l0bGJfZGF0YShpKSAmIF9QQUdFX0xfNFUpKSB7CisJCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0eGEgJSVnMCwgWyUwXSAlMVxuXHQiCisJCQkJCQkgICAgICJtZW1iYXIgI1N5bmMiCisJCQkJCQkgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJCQkJICAgICA6ICJyIiAoVExCX1RBR19BQ0NFU1MpLCAiaSIgKEFTSV9JTU1VKSk7CisJCQkJc3BpdGZpcmVfcHV0X2l0bGJfZGF0YShpLCAweDBVTCk7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKHRsYl90eXBlID09IGNoZWV0YWggfHwgdGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzKSB7CisJCWNoZWV0YWhfZmx1c2hfZHRsYl9hbGwoKTsKKwkJY2hlZXRhaF9mbHVzaF9pdGxiX2FsbCgpOworCX0KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3JwcgklMCwgMCwgJSVwc3RhdGUiCisJCQkgICAgIDogOiAiciIgKHBzdGF0ZSkpOworfQorCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCisKK3ZvaWQgb25saW5lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7CisJaW5pdF9wYWdlX2NvdW50KHBhZ2UpOworCV9fZnJlZV9wYWdlKHBhZ2UpOworCXRvdGFscmFtX3BhZ2VzKys7CisJbnVtX3BoeXNwYWdlcysrOworfQorCitpbnQgcmVtb3ZlX21lbW9yeSh1NjQgc3RhcnQsIHU2NCBzaXplKQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbW0vdGxiLmMgYi9hcmNoL3NwYXJjNjQvbW0vdGxiLmMKaW5kZXggOGIxMDRiZS4uYTA3OWNmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS90bGIuYworKysgYi9hcmNoL3NwYXJjNjQvbW0vdGxiLmMKQEAgLTI1LDYgKzI1LDggQEAKIAlzdHJ1Y3QgbW11X2dhdGhlciAqbXAgPSAmX19nZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7CiAKIAlpZiAobXAtPnRsYl9ucikgeworCQlmbHVzaF90c2JfdXNlcihtcCk7CisKIAkJaWYgKENUWF9WQUxJRChtcC0+bW0tPmNvbnRleHQpKSB7CiAjaWZkZWYgQ09ORklHX1NNUAogCQkJc21wX2ZsdXNoX3RsYl9wZW5kaW5nKG1wLT5tbSwgbXAtPnRsYl9uciwKQEAgLTQ3LDcgKzQ5LDggQEAKIAlpZiAocHRlX2V4ZWMob3JpZykpCiAJCXZhZGRyIHw9IDB4MVVMOwogCi0JaWYgKHB0ZV9kaXJ0eShvcmlnKSkgeworCWlmICh0bGJfdHlwZSAhPSBoeXBlcnZpc29yICYmCisJICAgIHB0ZV9kaXJ0eShvcmlnKSkgewogCQl1bnNpZ25lZCBsb25nIHBhZGRyLCBwZm4gPSBwdGVfcGZuKG9yaWcpOwogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC04OSw2MiArOTIsMyBAQAogCWlmIChuciA+PSBUTEJfQkFUQ0hfTlIpCiAJCWZsdXNoX3RsYl9wZW5kaW5nKCk7CiB9Ci0KLXZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlzdHJ1Y3QgbW11X2dhdGhlciAqbXAgPSAmX19nZXRfY3B1X3ZhcihtbXVfZ2F0aGVycyk7Ci0JdW5zaWduZWQgbG9uZyBuciA9IG1wLT50bGJfbnI7Ci0JbG9uZyBzID0gc3RhcnQsIGUgPSBlbmQsIHZwdGVfYmFzZTsKLQotCWlmIChtcC0+ZnVsbG1tKQotCQlyZXR1cm47Ci0KLQkvKiBJZiBzdGFydCBpcyBncmVhdGVyIHRoYW4gZW5kLCB0aGF0IGlzIGEgcmVhbCBwcm9ibGVtLiAgKi8KLQlCVUdfT04oc3RhcnQgPiBlbmQpOwotCi0JLyogSG93ZXZlciwgc3RyYWRkbGluZyB0aGUgVkEgc3BhY2UgaG9sZSBpcyBxdWl0ZSBub3JtYWwuICovCi0JcyAmPSBQTURfTUFTSzsKLQllID0gKGUgKyBQTURfU0laRSAtIDEpICYgUE1EX01BU0s7Ci0KLQl2cHRlX2Jhc2UgPSAodGxiX3R5cGUgPT0gc3BpdGZpcmUgPwotCQkgICAgIFZQVEVfQkFTRV9TUElURklSRSA6Ci0JCSAgICAgVlBURV9CQVNFX0NIRUVUQUgpOwotCi0JaWYgKHVubGlrZWx5KG5yICE9IDAgJiYgbW0gIT0gbXAtPm1tKSkgewotCQlmbHVzaF90bGJfcGVuZGluZygpOwotCQluciA9IDA7Ci0JfQotCi0JaWYgKG5yID09IDApCi0JCW1wLT5tbSA9IG1tOwotCi0Jc3RhcnQgPSB2cHRlX2Jhc2UgKyAocyA+PiAoUEFHRV9TSElGVCAtIDMpKTsKLQllbmQgPSB2cHRlX2Jhc2UgKyAoZSA+PiAoUEFHRV9TSElGVCAtIDMpKTsKLQotCS8qIElmIHRoZSByZXF1ZXN0IHN0cmFkZGxlcyB0aGUgVkEgc3BhY2UgaG9sZSwgd2UKLQkgKiBuZWVkIHRvIHN3YXAgc3RhcnQgYW5kIGVuZC4gIFRoZSByZWFzb24gdGhpcwotCSAqIG9jY3VycyBpcyB0aGF0ICJ2cHRlX2Jhc2UiIGlzIHRoZSBjZW50ZXIgb2YKLQkgKiB0aGUgbGluZWFyIHBhZ2UgdGFibGUgbWFwcGluZyBhcmVhLiAgVGh1cywKLQkgKiBoaWdoIGFkZHJlc3NlcyB3aXRoIHRoZSBzaWduIGJpdCBzZXQgbWFwIHRvCi0JICogYWRkcmVzc2VzIGJlbG93IHZwdGVfYmFzZSBhbmQgbm9uLXNpZ24gYml0Ci0JICogYWRkcmVzc2VzIG1hcCB0byBhZGRyZXNzZXMgYWJvdmUgdnB0ZV9iYXNlLgotCSAqLwotCWlmIChlbmQgPCBzdGFydCkgewotCQl1bnNpZ25lZCBsb25nIHRtcCA9IHN0YXJ0OwotCi0JCXN0YXJ0ID0gZW5kOwotCQllbmQgPSB0bXA7Ci0JfQotCi0Jd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCW1wLT52YWRkcnNbbnJdID0gc3RhcnQ7Ci0JCW1wLT50bGJfbnIgPSArK25yOwotCQlpZiAobnIgPj0gVExCX0JBVENIX05SKSB7Ci0JCQlmbHVzaF90bGJfcGVuZGluZygpOwotCQkJbnIgPSAwOwotCQl9Ci0JCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQl9Ci0JaWYgKG5yKQotCQlmbHVzaF90bGJfcGVuZGluZygpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L21tL3RzYi5jIGIvYXJjaC9zcGFyYzY0L21tL3RzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWEwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjNjQvbW0vdHNiLmMKQEAgLTAsMCArMSw1MDAgQEAKKy8qIGFyY2gvc3BhcmM2NC9tbS90c2IuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90c2IuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKworZXh0ZXJuIHN0cnVjdCB0c2Igc3dhcHBlcl90c2JbS0VSTkVMX1RTQl9ORU5UUklFU107CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0c2JfaGFzaCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIGhhc2hfc2hpZnQsIHVuc2lnbmVkIGxvbmcgbmVudHJpZXMpCit7CisJdmFkZHIgPj49IGhhc2hfc2hpZnQ7CisJcmV0dXJuIHZhZGRyICYgKG5lbnRyaWVzIC0gMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRhZ19jb21wYXJlKHVuc2lnbmVkIGxvbmcgdGFnLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXJldHVybiAodGFnID09ICh2YWRkciA+PiAyMikpOworfQorCisvKiBUU0IgZmx1c2hlcyBuZWVkIG9ubHkgb2NjdXIgb24gdGhlIHByb2Nlc3NvciBpbml0aWF0aW5nIHRoZSBhZGRyZXNzCisgKiBzcGFjZSBtb2RpZmljYXRpb24sIG5vdCBvbiBlYWNoIGNwdSB0aGUgYWRkcmVzcyBzcGFjZSBoYXMgcnVuIG9uLgorICogT25seSB0aGUgVExCIGZsdXNoIG5lZWRzIHRoYXQgdHJlYXRtZW50LgorICovCisKK3ZvaWQgZmx1c2hfdHNiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHY7CisKKwlmb3IgKHYgPSBzdGFydDsgdiA8IGVuZDsgdiArPSBQQUdFX1NJWkUpIHsKKwkJdW5zaWduZWQgbG9uZyBoYXNoID0gdHNiX2hhc2godiwgUEFHRV9TSElGVCwKKwkJCQkJICAgICAgS0VSTkVMX1RTQl9ORU5UUklFUyk7CisJCXN0cnVjdCB0c2IgKmVudCA9ICZzd2FwcGVyX3RzYltoYXNoXTsKKworCQlpZiAodGFnX2NvbXBhcmUoZW50LT50YWcsIHYpKSB7CisJCQllbnQtPnRhZyA9ICgxVUwgPDwgVFNCX1RBR19JTlZBTElEX0JJVCk7CisJCQltZW1iYXJfc3RvcmVsb2FkX3N0b3Jlc3RvcmUoKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgX19mbHVzaF90c2Jfb25lKHN0cnVjdCBtbXVfZ2F0aGVyICptcCwgdW5zaWduZWQgbG9uZyBoYXNoX3NoaWZ0LCB1bnNpZ25lZCBsb25nIHRzYiwgdW5zaWduZWQgbG9uZyBuZW50cmllcykKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXAtPnRsYl9ucjsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgdiA9IG1wLT52YWRkcnNbaV07CisJCXVuc2lnbmVkIGxvbmcgdGFnLCBlbnQsIGhhc2g7CisKKwkJdiAmPSB+MHgxVUw7CisKKwkJaGFzaCA9IHRzYl9oYXNoKHYsIGhhc2hfc2hpZnQsIG5lbnRyaWVzKTsKKwkJZW50ID0gdHNiICsgKGhhc2ggKiBzaXplb2Yoc3RydWN0IHRzYikpOworCQl0YWcgPSAodiA+PiAyMlVMKTsKKworCQl0c2JfZmx1c2goZW50LCB0YWcpOworCX0KK30KKwordm9pZCBmbHVzaF90c2JfdXNlcihzdHJ1Y3QgbW11X2dhdGhlciAqbXApCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBtcC0+bW07CisJdW5zaWduZWQgbG9uZyBuZW50cmllcywgYmFzZSwgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOworCisJYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBtbS0+Y29udGV4dC50c2JfYmxvY2tbTU1fVFNCX0JBU0VdLnRzYjsKKwluZW50cmllcyA9IG1tLT5jb250ZXh0LnRzYl9ibG9ja1tNTV9UU0JfQkFTRV0udHNiX25lbnRyaWVzOworCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMgfHwgdGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJYmFzZSA9IF9fcGEoYmFzZSk7CisJX19mbHVzaF90c2Jfb25lKG1wLCBQQUdFX1NISUZULCBiYXNlLCBuZW50cmllcyk7CisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJaWYgKG1tLT5jb250ZXh0LnRzYl9ibG9ja1tNTV9UU0JfSFVHRV0udHNiKSB7CisJCWJhc2UgPSAodW5zaWduZWQgbG9uZykgbW0tPmNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9IVUdFXS50c2I7CisJCW5lbnRyaWVzID0gbW0tPmNvbnRleHQudHNiX2Jsb2NrW01NX1RTQl9IVUdFXS50c2JfbmVudHJpZXM7CisJCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMgfHwgdGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikKKwkJCWJhc2UgPSBfX3BhKGJhc2UpOworCQlfX2ZsdXNoX3RzYl9vbmUobXAsIEhQQUdFX1NISUZULCBiYXNlLCBuZW50cmllcyk7CisJfQorI2VuZGlmCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfOEtCKQorI2RlZmluZSBIVl9QR1NaX0lEWF9CQVNFCUhWX1BHU1pfSURYXzhLCisjZGVmaW5lIEhWX1BHU1pfTUFTS19CQVNFCUhWX1BHU1pfTUFTS184SworI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNjRLQikKKyNkZWZpbmUgSFZfUEdTWl9JRFhfQkFTRQlIVl9QR1NaX0lEWF82NEsKKyNkZWZpbmUgSFZfUEdTWl9NQVNLX0JBU0UJSFZfUEdTWl9NQVNLXzY0SworI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNTEyS0IpCisjZGVmaW5lIEhWX1BHU1pfSURYX0JBU0UJSFZfUEdTWl9JRFhfNTEySworI2RlZmluZSBIVl9QR1NaX01BU0tfQkFTRQlIVl9QR1NaX01BU0tfNTEySworI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkM2NF9QQUdFX1NJWkVfNE1CKQorI2RlZmluZSBIVl9QR1NaX0lEWF9CQVNFCUhWX1BHU1pfSURYXzRNQgorI2RlZmluZSBIVl9QR1NaX01BU0tfQkFTRQlIVl9QR1NaX01BU0tfNE1CCisjZWxzZQorI2Vycm9yIEJyb2tlbiBiYXNlIHBhZ2Ugc2l6ZSBzZXR0aW5nLi4uCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspCisjZGVmaW5lIEhWX1BHU1pfSURYX0hVR0UJSFZfUEdTWl9JRFhfNjRLCisjZGVmaW5lIEhWX1BHU1pfTUFTS19IVUdFCUhWX1BHU1pfTUFTS182NEsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMkspCisjZGVmaW5lIEhWX1BHU1pfSURYX0hVR0UJSFZfUEdTWl9JRFhfNTEySworI2RlZmluZSBIVl9QR1NaX01BU0tfSFVHRQlIVl9QR1NaX01BU0tfNTEySworI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNE1CKQorI2RlZmluZSBIVl9QR1NaX0lEWF9IVUdFCUhWX1BHU1pfSURYXzRNQgorI2RlZmluZSBIVl9QR1NaX01BU0tfSFVHRQlIVl9QR1NaX01BU0tfNE1CCisjZWxzZQorI2Vycm9yIEJyb2tlbiBodWdlIHBhZ2Ugc2l6ZSBzZXR0aW5nLi4uCisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzZXR1cF90c2JfcGFyYW1zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHRzYl9pZHgsIHVuc2lnbmVkIGxvbmcgdHNiX2J5dGVzKQoreworCXVuc2lnbmVkIGxvbmcgdHNiX3JlZywgYmFzZSwgdHNiX3BhZGRyOworCXVuc2lnbmVkIGxvbmcgcGFnZV9zeiwgdHRlOworCisJbW0tPmNvbnRleHQudHNiX2Jsb2NrW3RzYl9pZHhdLnRzYl9uZW50cmllcyA9CisJCXRzYl9ieXRlcyAvIHNpemVvZihzdHJ1Y3QgdHNiKTsKKworCWJhc2UgPSBUU0JNQVBfQkFTRTsKKwl0dGUgPSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX0xPQ0tFRCk7CisJdHNiX3BhZGRyID0gX19wYShtbS0+Y29udGV4dC50c2JfYmxvY2tbdHNiX2lkeF0udHNiKTsKKwlCVUdfT04odHNiX3BhZGRyICYgKHRzYl9ieXRlcyAtIDFVTCkpOworCisJLyogVXNlIHRoZSBzbWFsbGVzdCBwYWdlIHNpemUgdGhhdCBjYW4gbWFwIHRoZSB3aG9sZSBUU0IKKwkgKiBpbiBvbmUgVExCIGVudHJ5LgorCSAqLworCXN3aXRjaCAodHNiX2J5dGVzKSB7CisJY2FzZSA4MTkyIDw8IDA6CisJCXRzYl9yZWcgPSAweDBVTDsKKyNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKKwkJYmFzZSArPSAodHNiX3BhZGRyICYgODE5Mik7CisjZW5kaWYKKwkJcGFnZV9zeiA9IDgxOTI7CisJCWJyZWFrOworCisJY2FzZSA4MTkyIDw8IDE6CisJCXRzYl9yZWcgPSAweDFVTDsKKwkJcGFnZV9zeiA9IDY0ICogMTAyNDsKKwkJYnJlYWs7CisKKwljYXNlIDgxOTIgPDwgMjoKKwkJdHNiX3JlZyA9IDB4MlVMOworCQlwYWdlX3N6ID0gNjQgKiAxMDI0OworCQlicmVhazsKKworCWNhc2UgODE5MiA8PCAzOgorCQl0c2JfcmVnID0gMHgzVUw7CisJCXBhZ2Vfc3ogPSA2NCAqIDEwMjQ7CisJCWJyZWFrOworCisJY2FzZSA4MTkyIDw8IDQ6CisJCXRzYl9yZWcgPSAweDRVTDsKKwkJcGFnZV9zeiA9IDUxMiAqIDEwMjQ7CisJCWJyZWFrOworCisJY2FzZSA4MTkyIDw8IDU6CisJCXRzYl9yZWcgPSAweDVVTDsKKwkJcGFnZV9zeiA9IDUxMiAqIDEwMjQ7CisJCWJyZWFrOworCisJY2FzZSA4MTkyIDw8IDY6CisJCXRzYl9yZWcgPSAweDZVTDsKKwkJcGFnZV9zeiA9IDUxMiAqIDEwMjQ7CisJCWJyZWFrOworCisJY2FzZSA4MTkyIDw8IDc6CisJCXRzYl9yZWcgPSAweDdVTDsKKwkJcGFnZV9zeiA9IDQgKiAxMDI0ICogMTAyNDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9OworCXR0ZSB8PSBwdGVfc3pfYml0cyhwYWdlX3N6KTsKKworCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoX3BsdXMgfHwgdGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgeworCQkvKiBQaHlzaWNhbCBtYXBwaW5nLCBubyBsb2NrZWQgVExCIGVudHJ5IGZvciBUU0IuICAqLworCQl0c2JfcmVnIHw9IHRzYl9wYWRkcjsKKworCQltbS0+Y29udGV4dC50c2JfYmxvY2tbdHNiX2lkeF0udHNiX3JlZ192YWwgPSB0c2JfcmVnOworCQltbS0+Y29udGV4dC50c2JfYmxvY2tbdHNiX2lkeF0udHNiX21hcF92YWRkciA9IDA7CisJCW1tLT5jb250ZXh0LnRzYl9ibG9ja1t0c2JfaWR4XS50c2JfbWFwX3B0ZSA9IDA7CisJfSBlbHNlIHsKKwkJdHNiX3JlZyB8PSBiYXNlOworCQl0c2JfcmVnIHw9ICh0c2JfcGFkZHIgJiAocGFnZV9zeiAtIDFVTCkpOworCQl0dGUgfD0gKHRzYl9wYWRkciAmIH4ocGFnZV9zeiAtIDFVTCkpOworCisJCW1tLT5jb250ZXh0LnRzYl9ibG9ja1t0c2JfaWR4XS50c2JfcmVnX3ZhbCA9IHRzYl9yZWc7CisJCW1tLT5jb250ZXh0LnRzYl9ibG9ja1t0c2JfaWR4XS50c2JfbWFwX3ZhZGRyID0gYmFzZTsKKwkJbW0tPmNvbnRleHQudHNiX2Jsb2NrW3RzYl9pZHhdLnRzYl9tYXBfcHRlID0gdHRlOworCX0KKworCS8qIFNldHVwIHRoZSBIeXBlcnZpc29yIFRTQiBkZXNjcmlwdG9yLiAgKi8KKwlpZiAodGxiX3R5cGUgPT0gaHlwZXJ2aXNvcikgeworCQlzdHJ1Y3QgaHZfdHNiX2Rlc2NyICpocCA9ICZtbS0+Y29udGV4dC50c2JfZGVzY3JbdHNiX2lkeF07CisKKwkJc3dpdGNoICh0c2JfaWR4KSB7CisJCWNhc2UgTU1fVFNCX0JBU0U6CisJCQlocC0+cGdzel9pZHggPSBIVl9QR1NaX0lEWF9CQVNFOworCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorCQljYXNlIE1NX1RTQl9IVUdFOgorCQkJaHAtPnBnc3pfaWR4ID0gSFZfUEdTWl9JRFhfSFVHRTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfTsKKwkJaHAtPmFzc29jID0gMTsKKwkJaHAtPm51bV90dGVzID0gdHNiX2J5dGVzIC8gMTY7CisJCWhwLT5jdHhfaWR4ID0gMDsKKwkJc3dpdGNoICh0c2JfaWR4KSB7CisJCWNhc2UgTU1fVFNCX0JBU0U6CisJCQlocC0+cGdzel9tYXNrID0gSFZfUEdTWl9NQVNLX0JBU0U7CisJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJCWNhc2UgTU1fVFNCX0hVR0U6CisJCQlocC0+cGdzel9tYXNrID0gSFZfUEdTWl9NQVNLX0hVR0U7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX07CisJCWhwLT50c2JfYmFzZSA9IHRzYl9wYWRkcjsKKwkJaHAtPnJlc3YgPSAwOworCX0KK30KKworc3RhdGljIGttZW1fY2FjaGVfdCAqdHNiX2NhY2hlc1s4XSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgY29uc3QgY2hhciAqdHNiX2NhY2hlX25hbWVzWzhdID0geworCSJ0c2JfOEtCIiwKKwkidHNiXzE2S0IiLAorCSJ0c2JfMzJLQiIsCisJInRzYl82NEtCIiwKKwkidHNiXzEyOEtCIiwKKwkidHNiXzI1NktCIiwKKwkidHNiXzUxMktCIiwKKwkidHNiXzFNQiIsCit9OworCit2b2lkIF9faW5pdCB0c2JfY2FjaGVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gODE5MiA8PCBpOworCQljb25zdCBjaGFyICpuYW1lID0gdHNiX2NhY2hlX25hbWVzW2ldOworCisJCXRzYl9jYWNoZXNbaV0gPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLAorCQkJCQkJICBzaXplLCBzaXplLAorCQkJCQkJICBTTEFCX0hXQ0FDSEVfQUxJR04gfAorCQkJCQkJICBTTEFCX01VU1RfSFdDQUNIRV9BTElHTiwKKwkJCQkJCSAgTlVMTCwgTlVMTCk7CisJCWlmICghdHNiX2NhY2hlc1tpXSkgeworCQkJcHJvbV9wcmludGYoIkNvdWxkIG5vdCBjcmVhdGUgJXMgY2FjaGVcbiIsIG5hbWUpOworCQkJcHJvbV9oYWx0KCk7CisJCX0KKwl9Cit9CisKKy8qIFdoZW4gdGhlIFJTUyBvZiBhbiBhZGRyZXNzIHNwYWNlIGV4Y2VlZHMgdHNiX3Jzc19saW1pdCBmb3IgYSBUU0IsCisgKiBkb19zcGFyYzY0X2ZhdWx0KCkgaW52b2tlcyB0aGlzIHJvdXRpbmUgdG8gdHJ5IGFuZCBncm93IGl0LgorICoKKyAqIFdoZW4gd2UgcmVhY2ggdGhlIG1heGltdW0gVFNCIHNpemUgc3VwcG9ydGVkLCB3ZSBzdGljayB+MFVMIGludG8KKyAqIHRzYl9yc3NfbGltaXQgZm9yIHRoYXQgVFNCIHNvIHRoZSBncm93IGNoZWNrcyBpbiBkb19zcGFyYzY0X2ZhdWx0KCkKKyAqIHdpbGwgbm90IHRyaWdnZXIgYW55IGxvbmdlci4KKyAqCisgKiBUaGUgVFNCIGNhbiBiZSBhbnl3aGVyZSBmcm9tIDhLIHRvIDFNQiBpbiBzaXplLCBpbiBpbmNyZWFzaW5nIHBvd2VycworICogb2YgdHdvLiAgVGhlIFRTQiBtdXN0IGJlIGFsaWduZWQgdG8gaXQncyBzaXplLCBzbyBmLmUuIGEgNTEySyBUU0IKKyAqIG11c3QgYmUgNTEySyBhbGlnbmVkLiAgSXQgYWxzbyBtdXN0IGJlIHBoeXNpY2FsbHkgY29udGlndW91cywgc28gd2UKKyAqIGNhbm5vdCB1c2Ugdm1hbGxvYygpLgorICoKKyAqIFRoZSBpZGVhIGhlcmUgaXMgdG8gZ3JvdyB0aGUgVFNCIHdoZW4gdGhlIFJTUyBvZiB0aGUgcHJvY2VzcyBhcHByb2FjaGVzCisgKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCB0aGUgY3VycmVudCBUU0IgY2FuIGhvbGQgYXQgb25jZS4gIEN1cnJlbnRseSwKKyAqIHdlIHRyaWdnZXIgd2hlbiB0aGUgUlNTIGhpdHMgMy80IG9mIHRoZSBUU0IgY2FwYWNpdHkuCisgKi8KK3ZvaWQgdHNiX2dyb3coc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdHNiX2luZGV4LCB1bnNpZ25lZCBsb25nIHJzcykKK3sKKwl1bnNpZ25lZCBsb25nIG1heF90c2Jfc2l6ZSA9IDEgKiAxMDI0ICogMTAyNDsKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplLCBvbGRfc2l6ZSwgZmxhZ3M7CisJc3RydWN0IHRzYiAqb2xkX3RzYiwgKm5ld190c2I7CisJdW5zaWduZWQgbG9uZyBuZXdfY2FjaGVfaW5kZXgsIG9sZF9jYWNoZV9pbmRleDsKKwl1bnNpZ25lZCBsb25nIG5ld19yc3NfbGltaXQ7CisJZ2ZwX3QgZ2ZwX2ZsYWdzOworCisJaWYgKG1heF90c2Jfc2l6ZSA+IChQQUdFX1NJWkUgPDwgTUFYX09SREVSKSkKKwkJbWF4X3RzYl9zaXplID0gKFBBR0VfU0laRSA8PCBNQVhfT1JERVIpOworCisJbmV3X2NhY2hlX2luZGV4ID0gMDsKKwlmb3IgKG5ld19zaXplID0gODE5MjsgbmV3X3NpemUgPCBtYXhfdHNiX3NpemU7IG5ld19zaXplIDw8PSAxVUwpIHsKKwkJdW5zaWduZWQgbG9uZyBuX2VudHJpZXMgPSBuZXdfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgdHNiKTsKKworCQluX2VudHJpZXMgPSAobl9lbnRyaWVzICogMykgLyA0OworCQlpZiAobl9lbnRyaWVzID4gcnNzKQorCQkJYnJlYWs7CisKKwkJbmV3X2NhY2hlX2luZGV4Kys7CisJfQorCisJaWYgKG5ld19zaXplID09IG1heF90c2Jfc2l6ZSkKKwkJbmV3X3Jzc19saW1pdCA9IH4wVUw7CisJZWxzZQorCQluZXdfcnNzX2xpbWl0ID0gKChuZXdfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgdHNiKSkgKiAzKSAvIDQ7CisKK3JldHJ5X3RzYl9hbGxvYzoKKwlnZnBfZmxhZ3MgPSBHRlBfS0VSTkVMOworCWlmIChuZXdfc2l6ZSA+IChQQUdFX1NJWkUgKiAyKSkKKwkJZ2ZwX2ZsYWdzID0gX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWTsKKworCW5ld190c2IgPSBrbWVtX2NhY2hlX2FsbG9jKHRzYl9jYWNoZXNbbmV3X2NhY2hlX2luZGV4XSwgZ2ZwX2ZsYWdzKTsKKwlpZiAodW5saWtlbHkoIW5ld190c2IpKSB7CisJCS8qIE5vdCBiZWluZyBhYmxlIHRvIGZvcmsgZHVlIHRvIGEgaGlnaC1vcmRlciBUU0IKKwkJICogYWxsb2NhdGlvbiBmYWlsdXJlIGlzIHZlcnkgYmFkIGJlaGF2aW9yLiAgSnVzdCBiYWNrCisJCSAqIGRvd24gdG8gYSAwLW9yZGVyIGFsbG9jYXRpb24gYW5kIGZvcmNlIG5vIFRTQgorCQkgKiBncm93aW5nIGZvciB0aGlzIGFkZHJlc3Mgc3BhY2UuCisJCSAqLworCQlpZiAobW0tPmNvbnRleHQudHNiX2Jsb2NrW3RzYl9pbmRleF0udHNiID09IE5VTEwgJiYKKwkJICAgIG5ld19jYWNoZV9pbmRleCA+IDApIHsKKwkJCW5ld19jYWNoZV9pbmRleCA9IDA7CisJCQluZXdfc2l6ZSA9IDgxOTI7CisJCQluZXdfcnNzX2xpbWl0ID0gfjBVTDsKKwkJCWdvdG8gcmV0cnlfdHNiX2FsbG9jOworCQl9CisKKwkJLyogSWYgd2UgZmFpbGVkIG9uIGEgVFNCIGdyb3csIHdlIGFyZSB1bmRlciBzZXJpb3VzCisJCSAqIG1lbW9yeSBwcmVzc3VyZSBzbyBkb24ndCB0cnkgdG8gZ3JvdyBhbnkgbW9yZS4KKwkJICovCisJCWlmIChtbS0+Y29udGV4dC50c2JfYmxvY2tbdHNiX2luZGV4XS50c2IgIT0gTlVMTCkKKwkJCW1tLT5jb250ZXh0LnRzYl9ibG9ja1t0c2JfaW5kZXhdLnRzYl9yc3NfbGltaXQgPSB+MFVMOworCQlyZXR1cm47CisJfQorCisJLyogTWFyayBhbGwgdGFncyBhcyBpbnZhbGlkLiAgKi8KKwl0c2JfaW5pdChuZXdfdHNiLCBuZXdfc2l6ZSk7CisKKwkvKiBPaywgd2UgYXJlIGFib3V0IHRvIGNvbW1pdCB0aGUgY2hhbmdlcy4gIElmIHdlIGFyZQorCSAqIGdyb3dpbmcgYW4gZXhpc3RpbmcgVFNCIHRoZSBsb2NraW5nIGlzIHZlcnkgdHJpY2t5LAorCSAqIHNvIFdBVENIIE9VVCEKKwkgKgorCSAqIFdlIGhhdmUgdG8gaG9sZCBtbS0+Y29udGV4dC5sb2NrIHdoaWxlIGNvbW1pdHRpbmcgdG8gdGhlCisJICogbmV3IFRTQiwgdGhpcyBzeW5jaHJvbml6ZXMgdXMgd2l0aCBwcm9jZXNzb3JzIGluCisJICogZmx1c2hfdHNiX3VzZXIoKSBhbmQgc3dpdGNoX21tKCkgZm9yIHRoaXMgYWRkcmVzcyBzcGFjZS4KKwkgKgorCSAqIEJ1dCBldmVuIHdpdGggdGhhdCBsb2NrIGhlbGQsIHByb2Nlc3NvcnMgcnVuIGFzeW5jaHJvbm91c2x5CisJICogYWNjZXNzaW5nIHRoZSBvbGQgVFNCIHZpYSBUTEIgbWlzcyBoYW5kbGluZy4gIFRoaXMgaXMgT0sKKwkgKiBiZWNhdXNlIHRob3NlIGFjdGlvbnMgYXJlIGp1c3QgcHJvcGFnYXRpbmcgc3RhdGUgZnJvbSB0aGUKKwkgKiBMaW51eCBwYWdlIHRhYmxlcyBpbnRvIHRoZSBUU0IsIHBhZ2UgdGFibGUgbWFwcGluZ3MgYXJlIG5vdAorCSAqIGJlaW5nIGNoYW5nZWQuICBJZiBhIHJlYWwgZmF1bHQgb2NjdXJzLCB0aGUgcHJvY2Vzc29yIHdpbGwKKwkgKiBzeW5jaHJvbml6ZSB3aXRoIHVzIHdoZW4gaXQgaGl0cyBmbHVzaF90c2JfdXNlcigpLCB0aGlzIGlzCisJICogYWxzbyB0cnVlIGZvciB0aGUgY2FzZSB3aGVyZSB2bXNjYW4gaXMgbW9kaWZ5aW5nIHRoZSBwYWdlCisJICogdGFibGVzLiAgVGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggaXMgdG8KKwkgKiBza2lwIGFueSBsb2NrZWQgVFNCIGVudHJpZXMgZHVyaW5nIGNvcHlfdHNiKCkuCisJICoKKwkgKiBXaGVuIHdlIGZpbmlzaCBjb21taXR0aW5nIHRvIHRoZSBuZXcgVFNCLCB3ZSBoYXZlIHRvIGRyb3AKKwkgKiB0aGUgbG9jayBhbmQgYXNrIGFsbCBvdGhlciBjcHVzIHJ1bm5pbmcgdGhpcyBhZGRyZXNzIHNwYWNlCisJICogdG8gcnVuIHRzYl9jb250ZXh0X3N3aXRjaCgpIHRvIHNlZSB0aGUgbmV3IFRTQiB0YWJsZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOworCisJb2xkX3RzYiA9IG1tLT5jb250ZXh0LnRzYl9ibG9ja1t0c2JfaW5kZXhdLnRzYjsKKwlvbGRfY2FjaGVfaW5kZXggPQorCQkobW0tPmNvbnRleHQudHNiX2Jsb2NrW3RzYl9pbmRleF0udHNiX3JlZ192YWwgJiAweDdVTCk7CisJb2xkX3NpemUgPSAobW0tPmNvbnRleHQudHNiX2Jsb2NrW3RzYl9pbmRleF0udHNiX25lbnRyaWVzICoKKwkJICAgIHNpemVvZihzdHJ1Y3QgdHNiKSk7CisKKworCS8qIEhhbmRsZSBtdWx0aXBsZSB0aHJlYWRzIHRyeWluZyB0byBncm93IHRoZSBUU0IgYXQgdGhlIHNhbWUgdGltZS4KKwkgKiBPbmUgd2lsbCBnZXQgaW4gaGVyZSBmaXJzdCwgYW5kIGJ1bXAgdGhlIHNpemUgYW5kIHRoZSBSU1MgbGltaXQuCisJICogVGhlIG90aGVycyB3aWxsIGdldCBpbiBoZXJlIG5leHQgYW5kIGhpdCB0aGlzIGNoZWNrLgorCSAqLworCWlmICh1bmxpa2VseShvbGRfdHNiICYmCisJCSAgICAgKHJzcyA8IG1tLT5jb250ZXh0LnRzYl9ibG9ja1t0c2JfaW5kZXhdLnRzYl9yc3NfbGltaXQpKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbS0+Y29udGV4dC5sb2NrLCBmbGFncyk7CisKKwkJa21lbV9jYWNoZV9mcmVlKHRzYl9jYWNoZXNbbmV3X2NhY2hlX2luZGV4XSwgbmV3X3RzYik7CisJCXJldHVybjsKKwl9CisKKwltbS0+Y29udGV4dC50c2JfYmxvY2tbdHNiX2luZGV4XS50c2JfcnNzX2xpbWl0ID0gbmV3X3Jzc19saW1pdDsKKworCWlmIChvbGRfdHNiKSB7CisJCWV4dGVybiB2b2lkIGNvcHlfdHNiKHVuc2lnbmVkIGxvbmcgb2xkX3RzYl9iYXNlLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvbGRfdHNiX3NpemUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIG5ld190c2JfYmFzZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbmV3X3RzYl9zaXplKTsKKwkJdW5zaWduZWQgbG9uZyBvbGRfdHNiX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgb2xkX3RzYjsKKwkJdW5zaWduZWQgbG9uZyBuZXdfdHNiX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgbmV3X3RzYjsKKworCQlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzIHx8IHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKKwkJCW9sZF90c2JfYmFzZSA9IF9fcGEob2xkX3RzYl9iYXNlKTsKKwkJCW5ld190c2JfYmFzZSA9IF9fcGEobmV3X3RzYl9iYXNlKTsKKwkJfQorCQljb3B5X3RzYihvbGRfdHNiX2Jhc2UsIG9sZF9zaXplLCBuZXdfdHNiX2Jhc2UsIG5ld19zaXplKTsKKwl9CisKKwltbS0+Y29udGV4dC50c2JfYmxvY2tbdHNiX2luZGV4XS50c2IgPSBuZXdfdHNiOworCXNldHVwX3RzYl9wYXJhbXMobW0sIHRzYl9pbmRleCwgbmV3X3NpemUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOworCisJLyogSWYgb2xkX3RzYiBpcyBOVUxMLCB3ZSdyZSBiZWluZyBpbnZva2VkIGZvciB0aGUgZmlyc3QgdGltZQorCSAqIGZyb20gaW5pdF9uZXdfY29udGV4dCgpLgorCSAqLworCWlmIChvbGRfdHNiKSB7CisJCS8qIFJlbG9hZCBpdCBvbiB0aGUgbG9jYWwgY3B1LiAgKi8KKwkJdHNiX2NvbnRleHRfc3dpdGNoKG1tKTsKKworCQkvKiBOb3cgZm9yY2Ugb3RoZXIgcHJvY2Vzc29ycyB0byBkbyB0aGUgc2FtZS4gICovCisJCXNtcF90c2Jfc3luYyhtbSk7CisKKwkJLyogTm93IGl0IGlzIHNhZmUgdG8gZnJlZSB0aGUgb2xkIHRzYi4gICovCisJCWttZW1fY2FjaGVfZnJlZSh0c2JfY2FjaGVzW29sZF9jYWNoZV9pbmRleF0sIG9sZF90c2IpOworCX0KK30KKworaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwl1bnNpZ25lZCBsb25nIGh1Z2VfcHRlX2NvdW50OworI2VuZGlmCisJdW5zaWduZWQgaW50IGk7CisKKwlzcGluX2xvY2tfaW5pdCgmbW0tPmNvbnRleHQubG9jayk7CisKKwltbS0+Y29udGV4dC5zcGFyYzY0X2N0eF92YWwgPSAwVUw7CisKKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCisJLyogV2UgcmVzZXQgaXQgdG8gemVybyBiZWNhdXNlIHRoZSBmb3JrKCkgcGFnZSBjb3B5aW5nCisJICogd2lsbCByZS1pbmNyZW1lbnQgdGhlIGNvdW50ZXJzIGFzIHRoZSBwYXJlbnQgUFRFcyBhcmUKKwkgKiBjb3BpZWQgaW50byB0aGUgY2hpbGQgYWRkcmVzcyBzcGFjZS4KKwkgKi8KKwlodWdlX3B0ZV9jb3VudCA9IG1tLT5jb250ZXh0Lmh1Z2VfcHRlX2NvdW50OworCW1tLT5jb250ZXh0Lmh1Z2VfcHRlX2NvdW50ID0gMDsKKyNlbmRpZgorCisJLyogY29weV9tbSgpIGNvcGllcyBvdmVyIHRoZSBwYXJlbnQncyBtbV9zdHJ1Y3QgYmVmb3JlIGNhbGxpbmcKKwkgKiB1cywgc28gd2UgbmVlZCB0byB6ZXJvIG91dCB0aGUgVFNCIHBvaW50ZXIgb3IgZWxzZSB0c2JfZ3JvdygpCisJICogd2lsbCBiZSBjb25mdXNlZCBhbmQgdGhpbmsgdGhlcmUgaXMgYW4gb2xkZXIgVFNCIHRvIGZyZWUgdXAuCisJICovCisJZm9yIChpID0gMDsgaSA8IE1NX05VTV9UU0JTOyBpKyspCisJCW1tLT5jb250ZXh0LnRzYl9ibG9ja1tpXS50c2IgPSBOVUxMOworCisJLyogSWYgdGhpcyBpcyBmb3JrLCBpbmhlcml0IHRoZSBwYXJlbnQncyBUU0Igc2l6ZS4gIFdlIHdvdWxkCisJICogZ3JvdyBpdCB0byB0aGF0IHNpemUgb24gdGhlIGZpcnN0IHBhZ2UgZmF1bHQgYW55d2F5cy4KKwkgKi8KKwl0c2JfZ3JvdyhtbSwgTU1fVFNCX0JBU0UsIGdldF9tbV9yc3MobW0pKTsKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwlpZiAodW5saWtlbHkoaHVnZV9wdGVfY291bnQpKQorCQl0c2JfZ3JvdyhtbSwgTU1fVFNCX0hVR0UsIGh1Z2VfcHRlX2NvdW50KTsKKyNlbmRpZgorCisJaWYgKHVubGlrZWx5KCFtbS0+Y29udGV4dC50c2JfYmxvY2tbTU1fVFNCX0JBU0VdLnRzYikpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRzYl9kZXN0cm95X29uZShzdHJ1Y3QgdHNiX2NvbmZpZyAqdHApCit7CisJdW5zaWduZWQgbG9uZyBjYWNoZV9pbmRleDsKKworCWlmICghdHAtPnRzYikKKwkJcmV0dXJuOworCWNhY2hlX2luZGV4ID0gdHAtPnRzYl9yZWdfdmFsICYgMHg3VUw7CisJa21lbV9jYWNoZV9mcmVlKHRzYl9jYWNoZXNbY2FjaGVfaW5kZXhdLCB0cC0+dHNiKTsKKwl0cC0+dHNiID0gTlVMTDsKKwl0cC0+dHNiX3JlZ192YWwgPSAwVUw7Cit9CisKK3ZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTU1fTlVNX1RTQlM7IGkrKykKKwkJdHNiX2Rlc3Ryb3lfb25lKCZtbS0+Y29udGV4dC50c2JfYmxvY2tbaV0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eF9hbGxvY19sb2NrLCBmbGFncyk7CisKKwlpZiAoQ1RYX1ZBTElEKG1tLT5jb250ZXh0KSkgeworCQl1bnNpZ25lZCBsb25nIG5yID0gQ1RYX05SQklUUyhtbS0+Y29udGV4dCk7CisJCW1tdV9jb250ZXh0X2JtYXBbbnI+PjZdICY9IH4oMVVMIDw8IChuciAmIDYzKSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4X2FsbG9jX2xvY2ssIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS91bHRyYS5TIGIvYXJjaC9zcGFyYzY0L21tL3VsdHJhLlMKaW5kZXggZTRjOTE1MS4uZjg0NzlmYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L21tL3VsdHJhLlMKKysrIGIvYXJjaC9zcGFyYzY0L21tL3VsdHJhLlMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vaGVhZC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KIAogCS8qIEJhc2ljYWxseSwgbW9zdCBvZiB0aGUgU3BpdGZpcmUgdnMuIENoZWV0YWggbWFkbmVzcwogCSAqIGhhcyB0byBkbyB3aXRoIHRoZSBmYWN0IHRoYXQgQ2hlZXRhaCBkb2VzIG5vdCBzdXBwb3J0CkBAIC0yOSwxNiArMzAsMTggQEAKIAkudGV4dAogCS5hbGlnbgkJMzIKIAkuZ2xvYmwJCV9fZmx1c2hfdGxiX21tCi1fX2ZsdXNoX3RsYl9tbTogLyogJW8wPShjdHggJiBUQUdfQ09OVEVYVF9CSVRTKSwgJW8xPVNFQ09OREFSWV9DT05URVhUICovCitfX2ZsdXNoX3RsYl9tbToJCS8qIDE4IGluc25zICovCisJLyogJW8wPShjdHggJiBUQUdfQ09OVEVYVF9CSVRTKSwgJW8xPVNFQ09OREFSWV9DT05URVhUICovCiAJbGR4YQkJWyVvMV0gQVNJX0RNTVUsICVnMgogCWNtcAkJJWcyLCAlbzAKIAlibmUscG4JCSVpY2MsIF9fc3BpdGZpcmVfZmx1c2hfdGxiX21tX3Nsb3cKIAkgbW92CQkweDUwLCAlZzMKIAlzdHhhCQklZzAsIFslZzNdIEFTSV9ETU1VX0RFTUFQCiAJc3R4YQkJJWcwLCBbJWczXSBBU0lfSU1NVV9ERU1BUAorCXNldGhpCQklaGkoS0VSTkJBU0UpLCAlZzMKKwlmbHVzaAkJJWczCiAJcmV0bAotCSBmbHVzaAkJJWc2Ci0Jbm9wCisJIG5vcAogCW5vcAogCW5vcAogCW5vcApAQCAtNTEsNyArNTQsNyBAQAogCiAJLmFsaWduCQkzMgogCS5nbG9ibAkJX19mbHVzaF90bGJfcGVuZGluZwotX19mbHVzaF90bGJfcGVuZGluZzoKK19fZmx1c2hfdGxiX3BlbmRpbmc6CS8qIDI2IGluc25zICovCiAJLyogJW8wID0gY29udGV4dCwgJW8xID0gbnIsICVvMiA9IHZhZGRyc1tdICovCiAJcmRwcgkJJXBzdGF0ZSwgJWc3CiAJc2xseAkJJW8xLCAzLCAlbzEKQEAgLTcyLDcgKzc1LDggQEAKIAlicm56LHB0CQklbzEsIDFiCiAJIG5vcAogCXN0eGEJCSVnMiwgWyVvNF0gQVNJX0RNTVUKLQlmbHVzaAkJJWc2CisJc2V0aGkJCSVoaShLRVJOQkFTRSksICVvNAorCWZsdXNoCQklbzQKIAlyZXRsCiAJIHdycHIJCSVnNywgMHgwLCAlcHN0YXRlCiAJbm9wCkBAIC04Miw3ICs4Niw4IEBACiAKIAkuYWxpZ24JCTMyCiAJLmdsb2JsCQlfX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UKLV9fZmx1c2hfdGxiX2tlcm5lbF9yYW5nZToJLyogJW8wPXN0YXJ0LCAlbzE9ZW5kICovCitfX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2U6CS8qIDE2IGluc25zICovCisJLyogJW8wPXN0YXJ0LCAlbzE9ZW5kICovCiAJY21wCQklbzAsICVvMQogCWJlLHBuCQkleGNjLCAyZgogCSBzZXRoaQkJJWhpKFBBR0VfU0laRSksICVvNApAQCAtOTQsOCArOTksMTEgQEAKIAltZW1iYXIJCSNTeW5jCiAJYnJueixwdAkJJW8zLCAxYgogCSBzdWIJCSVvMywgJW80LCAlbzMKLTI6CXJldGwKLQkgZmx1c2gJCSVnNgorMjoJc2V0aGkJCSVoaShLRVJOQkFTRSksICVvMworCWZsdXNoCQklbzMKKwlyZXRsCisJIG5vcAorCW5vcAogCiBfX3NwaXRmaXJlX2ZsdXNoX3RsYl9tbV9zbG93OgogCXJkcHIJCSVwc3RhdGUsICVnMQpAQCAtMTA1LDcgKzExMyw4IEBACiAJc3R4YQkJJWcwLCBbJWczXSBBU0lfSU1NVV9ERU1BUAogCWZsdXNoCQklZzYKIAlzdHhhCQklZzIsIFslbzFdIEFTSV9ETU1VCi0JZmx1c2gJCSVnNgorCXNldGhpCQklaGkoS0VSTkJBU0UpLCAlbzEKKwlmbHVzaAkJJW8xCiAJcmV0bAogCSB3cnByCQklZzEsIDAsICVwc3RhdGUKIApAQCAtMTgxLDcgKzE5MCw3IEBACiAJLnByZXZpb3VzCiAKIAkvKiBDaGVldGFoIHNwZWNpZmljIHZlcnNpb25zLCBwYXRjaGVkIGF0IGJvb3QgdGltZS4gKi8KLV9fY2hlZXRhaF9mbHVzaF90bGJfbW06IC8qIDE4IGluc25zICovCitfX2NoZWV0YWhfZmx1c2hfdGxiX21tOiAvKiAxOSBpbnNucyAqLwogCXJkcHIJCSVwc3RhdGUsICVnNwogCWFuZG4JCSVnNywgUFNUQVRFX0lFLCAlZzIKIAl3cnByCQklZzIsIDB4MCwgJXBzdGF0ZQpAQCAtMTk2LDEyICsyMDUsMTMgQEAKIAlzdHhhCQklZzAsIFslZzNdIEFTSV9ETU1VX0RFTUFQCiAJc3R4YQkJJWcwLCBbJWczXSBBU0lfSU1NVV9ERU1BUAogCXN0eGEJCSVnMiwgWyVvMl0gQVNJX0RNTVUKLQlmbHVzaAkJJWc2CisJc2V0aGkJCSVoaShLRVJOQkFTRSksICVvMgorCWZsdXNoCQklbzIKIAl3cnByCQklZzAsIDAsICV0bAogCXJldGwKIAkgd3JwcgkJJWc3LCAweDAsICVwc3RhdGUKIAotX19jaGVldGFoX2ZsdXNoX3RsYl9wZW5kaW5nOgkvKiAyNiBpbnNucyAqLworX19jaGVldGFoX2ZsdXNoX3RsYl9wZW5kaW5nOgkvKiAyNyBpbnNucyAqLwogCS8qICVvMCA9IGNvbnRleHQsICVvMSA9IG5yLCAlbzIgPSB2YWRkcnNbXSAqLwogCXJkcHIJCSVwc3RhdGUsICVnNwogCXNsbHgJCSVvMSwgMywgJW8xCkBAIC0yMjUsNyArMjM1LDggQEAKIAlicm56LHB0CQklbzEsIDFiCiAJIG5vcAogCXN0eGEJCSVnMiwgWyVvNF0gQVNJX0RNTVUKLQlmbHVzaAkJJWc2CisJc2V0aGkJCSVoaShLRVJOQkFTRSksICVvNAorCWZsdXNoCQklbzQKIAl3cnByCQklZzAsIDAsICV0bAogCXJldGwKIAkgd3JwcgkJJWc3LCAweDAsICVwc3RhdGUKQEAgLTI0NSw3ICsyNTYsNzYgQEAKIAkgbm9wCiAjZW5kaWYgLyogRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFICovCiAKLWNoZWV0YWhfcGF0Y2hfb25lOgorCS8qIEh5cGVydmlzb3Igc3BlY2lmaWMgdmVyc2lvbnMsIHBhdGNoZWQgYXQgYm9vdCB0aW1lLiAgKi8KK19faHlwZXJ2aXNvcl90bGJfdGwwX2Vycm9yOgorCXNhdmUJCSVzcCwgLTE5MiwgJXNwCisJbW92CQklaTAsICVvMAorCWNhbGwJCWh5cGVydmlzb3JfdGxib3BfZXJyb3IKKwkgbW92CQklaTEsICVvMQorCXJldAorCSByZXN0b3JlCisKK19faHlwZXJ2aXNvcl9mbHVzaF90bGJfbW06IC8qIDEwIGluc25zICovCisJbW92CQklbzAsICVvMgkvKiBBUkcyOiBtbXUgY29udGV4dCAqLworCW1vdgkJMCwgJW8wCQkvKiBBUkcwOiBDUFUgbGlzdHMgdW5pbXBsZW1lbnRlZCAqLworCW1vdgkJMCwgJW8xCQkvKiBBUkcxOiBDUFUgbGlzdHMgdW5pbXBsZW1lbnRlZCAqLworCW1vdgkJSFZfTU1VX0FMTCwgJW8zCS8qIEFSRzM6IGZsYWdzICovCisJbW92CQlIVl9GQVNUX01NVV9ERU1BUF9DVFgsICVvNQorCXRhCQlIVl9GQVNUX1RSQVAKKwlicm56LHBuCQklbzAsIF9faHlwZXJ2aXNvcl90bGJfdGwwX2Vycm9yCisJIG1vdgkJSFZfRkFTVF9NTVVfREVNQVBfQ1RYLCAlbzEKKwlyZXRsCisJIG5vcAorCitfX2h5cGVydmlzb3JfZmx1c2hfdGxiX3BlbmRpbmc6IC8qIDE2IGluc25zICovCisJLyogJW8wID0gY29udGV4dCwgJW8xID0gbnIsICVvMiA9IHZhZGRyc1tdICovCisJc2xseAkJJW8xLCAzLCAlZzEKKwltb3YJCSVvMiwgJWcyCisJbW92CQklbzAsICVnMworMToJc3ViCQklZzEsICgxIDw8IDMpLCAlZzEKKwlsZHgJCVslZzIgKyAlZzFdLCAlbzAgICAgICAvKiBBUkcwOiB2YWRkciArIElNTVUtYml0ICovCisJbW92CQklZzMsICVvMQkgICAgICAvKiBBUkcxOiBtbXUgY29udGV4dCAqLworCW1vdgkJSFZfTU1VX0FMTCwgJW8yCSAgICAgIC8qIEFSRzI6IGZsYWdzICovCisJc3JseAkJJW8wLCBQQUdFX1NISUZULCAlbzAKKwlzbGx4CQklbzAsIFBBR0VfU0hJRlQsICVvMAorCXRhCQlIVl9NTVVfVU5NQVBfQUREUl9UUkFQCisJYnJueixwbgkJJW8wLCBfX2h5cGVydmlzb3JfdGxiX3RsMF9lcnJvcgorCSBtb3YJCUhWX01NVV9VTk1BUF9BRERSX1RSQVAsICVvMQorCWJybnoscHQJCSVnMSwgMWIKKwkgbm9wCisJcmV0bAorCSBub3AKKworX19oeXBlcnZpc29yX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2U6IC8qIDE2IGluc25zICovCisJLyogJW8wPXN0YXJ0LCAlbzE9ZW5kICovCisJY21wCQklbzAsICVvMQorCWJlLHBuCQkleGNjLCAyZgorCSBzZXRoaQkJJWhpKFBBR0VfU0laRSksICVnMworCW1vdgkJJW8wLCAlZzEKKwlzdWIJCSVvMSwgJWcxLCAlZzIKKwlzdWIJCSVnMiwgJWczLCAlZzIKKzE6CWFkZAkJJWcxLCAlZzIsICVvMAkvKiBBUkcwOiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwltb3YJCTAsICVvMQkJLyogQVJHMTogbW11IGNvbnRleHQgKi8KKwltb3YJCUhWX01NVV9BTEwsICVvMgkvKiBBUkcyOiBmbGFncyAqLworCXRhCQlIVl9NTVVfVU5NQVBfQUREUl9UUkFQCisJYnJueixwbgkJJW8wLCBfX2h5cGVydmlzb3JfdGxiX3RsMF9lcnJvcgorCSBtb3YJCUhWX01NVV9VTk1BUF9BRERSX1RSQVAsICVvMQorCWJybnoscHQJCSVnMiwgMWIKKwkgc3ViCQklZzIsICVnMywgJWcyCisyOglyZXRsCisJIG5vcAorCisjaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFCisJLyogWFhYIE5pYWdhcmEgYW5kIGZyaWVuZHMgaGF2ZSBhbiA4SyBjYWNoZSwgc28gbm8gYWxpYXNpbmcgaXMKKwkgKiBYWFggcG9zc2libGUsIGJ1dCBub3RoaW5nIGV4cGxpY2l0IGluIHRoZSBIeXBlcnZpc29yIEFQSQorCSAqIFhYWCBndWFyYW50ZWVzIHRoaXMuCisJICovCitfX2h5cGVydmlzb3JfZmx1c2hfZGNhY2hlX3BhZ2U6CS8qIDIgaW5zbnMgKi8KKwlyZXRsCisJIG5vcAorI2VuZGlmCisKK3RsYl9wYXRjaF9vbmU6CiAxOglsZHV3CQlbJW8xXSwgJWcxCiAJc3R3CQklZzEsIFslbzBdCiAJZmx1c2gJCSVvMApAQCAtMjY0LDIyICszNDQsMjIgQEAKIAlvcgkJJW8wLCAlbG8oX19mbHVzaF90bGJfbW0pLCAlbzAKIAlzZXRoaQkJJWhpKF9fY2hlZXRhaF9mbHVzaF90bGJfbW0pLCAlbzEKIAlvcgkJJW8xLCAlbG8oX19jaGVldGFoX2ZsdXNoX3RsYl9tbSksICVvMQotCWNhbGwJCWNoZWV0YWhfcGF0Y2hfb25lCi0JIG1vdgkJMTgsICVvMgorCWNhbGwJCXRsYl9wYXRjaF9vbmUKKwkgbW92CQkxOSwgJW8yCiAKIAlzZXRoaQkJJWhpKF9fZmx1c2hfdGxiX3BlbmRpbmcpLCAlbzAKIAlvcgkJJW8wLCAlbG8oX19mbHVzaF90bGJfcGVuZGluZyksICVvMAogCXNldGhpCQklaGkoX19jaGVldGFoX2ZsdXNoX3RsYl9wZW5kaW5nKSwgJW8xCiAJb3IJCSVvMSwgJWxvKF9fY2hlZXRhaF9mbHVzaF90bGJfcGVuZGluZyksICVvMQotCWNhbGwJCWNoZWV0YWhfcGF0Y2hfb25lCi0JIG1vdgkJMjYsICVvMgorCWNhbGwJCXRsYl9wYXRjaF9vbmUKKwkgbW92CQkyNywgJW8yCiAKICNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKIAlzZXRoaQkJJWhpKF9fZmx1c2hfZGNhY2hlX3BhZ2UpLCAlbzAKIAlvcgkJJW8wLCAlbG8oX19mbHVzaF9kY2FjaGVfcGFnZSksICVvMAogCXNldGhpCQklaGkoX19jaGVldGFoX2ZsdXNoX2RjYWNoZV9wYWdlKSwgJW8xCiAJb3IJCSVvMSwgJWxvKF9fY2hlZXRhaF9mbHVzaF9kY2FjaGVfcGFnZSksICVvMQotCWNhbGwJCWNoZWV0YWhfcGF0Y2hfb25lCisJY2FsbAkJdGxiX3BhdGNoX29uZQogCSBtb3YJCTExLCAlbzIKICNlbmRpZiAvKiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUgKi8KIApAQCAtMjk1LDE2ICszNzUsMTQgQEAKIAkgKiAgICVnMQlhZGRyZXNzIGFyZyAxCSh0bGIgcGFnZSBhbmQgcmFuZ2UgZmx1c2hlcykKIAkgKiAgICVnNwlhZGRyZXNzIGFyZyAyCSh0bGIgcmFuZ2UgZmx1c2ggb25seSkKIAkgKgotCSAqICAgJWc2CWl2ZWN0b3IgdGFibGUsIGRvbid0IHRvdWNoCi0JICogICAlZzIJc2NyYXRjaCAxCi0JICogICAlZzMJc2NyYXRjaCAyCi0JICogICAlZzQJc2NyYXRjaCAzCi0JICoKLQkgKiBUT0RPOiBNYWtlIHhjYWxsIFRMQiByYW5nZSBmbHVzaGVzIHVzZSB0aGUgdHJpY2tzIGFib3ZlLi4uIC1EYXZlTQorCSAqICAgJWc2CXNjcmF0Y2ggMQorCSAqICAgJWcyCXNjcmF0Y2ggMgorCSAqICAgJWczCXNjcmF0Y2ggMworCSAqICAgJWc0CXNjcmF0Y2ggNAogCSAqLwogCS5hbGlnbgkJMzIKIAkuZ2xvYmwJCXhjYWxsX2ZsdXNoX3RsYl9tbQoteGNhbGxfZmx1c2hfdGxiX21tOgoreGNhbGxfZmx1c2hfdGxiX21tOgkvKiAyMSBpbnNucyAqLwogCW1vdgkJUFJJTUFSWV9DT05URVhULCAlZzIKIAlsZHhhCQlbJWcyXSBBU0lfRE1NVSwgJWczCiAJc3JseAkJJWczLCBDVFhfUEdTWjFfTlVDX1NISUZULCAlZzQKQEAgLTMxNiw5ICszOTQsMTkgQEAKIAlzdHhhCQklZzAsIFslZzRdIEFTSV9JTU1VX0RFTUFQCiAJc3R4YQkJJWczLCBbJWcyXSBBU0lfRE1NVQogCXJldHJ5CisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCiAKIAkuZ2xvYmwJCXhjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nCi14Y2FsbF9mbHVzaF90bGJfcGVuZGluZzoKK3hjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nOgkvKiAyMSBpbnNucyAqLwogCS8qICVnNT1jb250ZXh0LCAlZzE9bnIsICVnNz12YWRkcnNbXSAqLwogCXNsbHgJCSVnMSwgMywgJWcxCiAJbW92CQlQUklNQVJZX0NPTlRFWFQsICVnNApAQCAtMzQxLDkgKzQyOSwxMCBAQAogCSBub3AKIAlzdHhhCQklZzIsIFslZzRdIEFTSV9ETU1VCiAJcmV0cnkKKwlub3AKIAogCS5nbG9ibAkJeGNhbGxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZQoteGNhbGxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZToKK3hjYWxsX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2U6CS8qIDI1IGluc25zICovCiAJc2V0aGkJCSVoaShQQUdFX1NJWkUgLSAxKSwgJWcyCiAJb3IJCSVnMiwgJWxvKFBBR0VfU0laRSAtIDEpLCAlZzIKIAlhbmRuCQklZzEsICVnMiwgJWcxCkBAIC0zNjAsMTQgKzQ0OSwzMCBAQAogCXJldHJ5CiAJbm9wCiAJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCiAKIAkvKiBUaGlzIHJ1bnMgaW4gYSB2ZXJ5IGNvbnRyb2xsZWQgZW52aXJvbm1lbnQsIHNvIHdlIGRvCiAJICogbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgQkggcmFjZXMgZXRjLgogCSAqLwogCS5nbG9ibAkJeGNhbGxfc3luY190aWNrCiB4Y2FsbF9zeW5jX3RpY2s6Ci0JcmRwcgkJJXBzdGF0ZSwgJWcyCisKKzY2MToJcmRwcgkJJXBzdGF0ZSwgJWcyCiAJd3JwcgkJJWcyLCBQU1RBVEVfSUcgfCBQU1RBVEVfQUcsICVwc3RhdGUKKwkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsICJheCIKKwkud29yZAkJNjYxYgorCW5vcAorCW5vcAorCS5wcmV2aW91cworCiAJcmRwcgkJJXBpbCwgJWcyCiAJd3JwcgkJJWcwLCAxNSwgJXBpbAogCXNldGhpCQklaGkoMTA5ZiksICVnNwpAQCAtMzkwLDggKzQ5NSwxNSBAQAogCSAqLwogCS5nbG9ibAkJeGNhbGxfcmVwb3J0X3JlZ3MKIHhjYWxsX3JlcG9ydF9yZWdzOgotCXJkcHIJCSVwc3RhdGUsICVnMgorCis2NjE6CXJkcHIJCSVwc3RhdGUsICVnMgogCXdycHIJCSVnMiwgUFNUQVRFX0lHIHwgUFNUQVRFX0FHLCAlcHN0YXRlCisJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCAiYXgiCisJLndvcmQJCTY2MWIKKwlub3AKKwlub3AKKwkucHJldmlvdXMKKwogCXJkcHIJCSVwaWwsICVnMgogCXdycHIJCSVnMCwgMTUsICVwaWwKIAlzZXRoaQkJJWhpKDEwOWYpLCAlZzcKQEAgLTQ1Myw2MiArNTY1LDk2IEBACiAJbm9wCiAJbm9wCiAKLQkuZGF0YQorCS8qICVnNToJZXJyb3IKKwkgKiAlZzY6CXRsYiBvcAorCSAqLworX19oeXBlcnZpc29yX3RsYl94Y2FsbF9lcnJvcjoKKwltb3YJJWc1LCAlZzQKKwltb3YJJWc2LCAlZzUKKwliYSxwdAkleGNjLCBldHJhcAorCSByZAklcGMsICVnNworCW1vdgklbDQsICVvMAorCWNhbGwJaHlwZXJ2aXNvcl90bGJvcF9lcnJvcl94Y2FsbAorCSBtb3YJJWw1LCAlbzEKKwliYSxhLHB0CSV4Y2MsIHJ0cmFwX2Nscl9sNgogCi1lcnJhdGEzMl9od2J1ZzoKLQkueHdvcmQJMAotCi0JLnRleHQKLQotCS8qIFRoZXNlIHR3byBhcmUgbm90IHBlcmZvcm1hbmNlIGNyaXRpY2FsLi4uICovCi0JLmdsb2JsCQl4Y2FsbF9mbHVzaF90bGJfYWxsX3NwaXRmaXJlCi14Y2FsbF9mbHVzaF90bGJfYWxsX3NwaXRmaXJlOgotCS8qIFNwaXRmaXJlIEVycmF0YSAjMzIgd29ya2Fyb3VuZC4gKi8KLQlzZXRoaQkJJWhpKGVycmF0YTMyX2h3YnVnKSwgJWc0Ci0Jc3R4CQklZzAsIFslZzQgKyAlbG8oZXJyYXRhMzJfaHdidWcpXQotCi0JY2xyCQklZzIKLQljbHIJCSVnMwotMToJbGR4YQkJWyVnM10gQVNJX0RUTEJfREFUQV9BQ0NFU1MsICVnNAotCWFuZAkJJWc0LCBfUEFHRV9MLCAlZzUKLQlicm56LHBuCQklZzUsIDJmCi0JIG1vdgkJVExCX1RBR19BQ0NFU1MsICVnNwotCi0Jc3R4YQkJJWcwLCBbJWc3XSBBU0lfRE1NVQorCS5nbG9ibAkJX19oeXBlcnZpc29yX3hjYWxsX2ZsdXNoX3RsYl9tbQorX19oeXBlcnZpc29yX3hjYWxsX2ZsdXNoX3RsYl9tbTogLyogMjEgaW5zbnMgKi8KKwkvKiAlZzU9Y3R4LCBnMSxnMixnMyxnNCxnNz1zY3JhdGNoLCAlZzY9dW51c2FibGUgKi8KKwltb3YJCSVvMCwgJWcyCisJbW92CQklbzEsICVnMworCW1vdgkJJW8yLCAlZzQKKwltb3YJCSVvMywgJWcxCisJbW92CQklbzUsICVnNworCWNscgkJJW8wCQkvKiBBUkcwOiBDUFUgbGlzdHMgdW5pbXBsZW1lbnRlZCAqLworCWNscgkJJW8xCQkvKiBBUkcxOiBDUFUgbGlzdHMgdW5pbXBsZW1lbnRlZCAqLworCW1vdgkJJWc1LCAlbzIJLyogQVJHMjogbW11IGNvbnRleHQgKi8KKwltb3YJCUhWX01NVV9BTEwsICVvMwkvKiBBUkczOiBmbGFncyAqLworCW1vdgkJSFZfRkFTVF9NTVVfREVNQVBfQ1RYLCAlbzUKKwl0YQkJSFZfRkFTVF9UUkFQCisJbW92CQlIVl9GQVNUX01NVV9ERU1BUF9DVFgsICVnNgorCWJybnoscG4JCSVvMCwgX19oeXBlcnZpc29yX3RsYl94Y2FsbF9lcnJvcgorCSBtb3YJCSVvMCwgJWc1CisJbW92CQklZzIsICVvMAorCW1vdgkJJWczLCAlbzEKKwltb3YJCSVnNCwgJW8yCisJbW92CQklZzEsICVvMworCW1vdgkJJWc3LCAlbzUKIAltZW1iYXIJCSNTeW5jCi0Jc3R4YQkJJWcwLCBbJWczXSBBU0lfRFRMQl9EQVRBX0FDQ0VTUwotCW1lbWJhcgkJI1N5bmMKLQotCS8qIFNwaXRmaXJlIEVycmF0YSAjMzIgd29ya2Fyb3VuZC4gKi8KLQlzZXRoaQkJJWhpKGVycmF0YTMyX2h3YnVnKSwgJWc0Ci0Jc3R4CQklZzAsIFslZzQgKyAlbG8oZXJyYXRhMzJfaHdidWcpXQotCi0yOglsZHhhCQlbJWczXSBBU0lfSVRMQl9EQVRBX0FDQ0VTUywgJWc0Ci0JYW5kCQklZzQsIF9QQUdFX0wsICVnNQotCWJybnoscG4JCSVnNSwgMmYKLQkgbW92CQlUTEJfVEFHX0FDQ0VTUywgJWc3Ci0KLQlzdHhhCQklZzAsIFslZzddIEFTSV9JTU1VCi0JbWVtYmFyCQkjU3luYwotCXN0eGEJCSVnMCwgWyVnM10gQVNJX0lUTEJfREFUQV9BQ0NFU1MKLQltZW1iYXIJCSNTeW5jCi0KLQkvKiBTcGl0ZmlyZSBFcnJhdGEgIzMyIHdvcmthcm91bmQuICovCi0Jc2V0aGkJCSVoaShlcnJhdGEzMl9od2J1ZyksICVnNAotCXN0eAkJJWcwLCBbJWc0ICsgJWxvKGVycmF0YTMyX2h3YnVnKV0KLQotMjoJYWRkCQklZzIsIDEsICVnMgotCWNtcAkJJWcyLCBTUElURklSRV9ISUdIRVNUX0xPQ0tFRF9UTEJFTlQKLQlibGUscHQJCSVpY2MsIDFiCi0JIHNsbAkJJWcyLCAzLCAlZzMKLQlmbHVzaAkJJWc2CiAJcmV0cnkKIAotCS5nbG9ibAkJeGNhbGxfZmx1c2hfdGxiX2FsbF9jaGVldGFoCi14Y2FsbF9mbHVzaF90bGJfYWxsX2NoZWV0YWg6Ci0JbW92CQkweDgwLCAlZzIKLQlzdHhhCQklZzAsIFslZzJdIEFTSV9ETU1VX0RFTUFQCi0Jc3R4YQkJJWcwLCBbJWcyXSBBU0lfSU1NVV9ERU1BUAorCS5nbG9ibAkJX19oeXBlcnZpc29yX3hjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nCitfX2h5cGVydmlzb3JfeGNhbGxfZmx1c2hfdGxiX3BlbmRpbmc6IC8qIDIxIGluc25zICovCisJLyogJWc1PWN0eCwgJWcxPW5yLCAlZzc9dmFkZHJzW10sICVnMiwlZzMsJWc0LGc2PXNjcmF0Y2ggKi8KKwlzbGx4CQklZzEsIDMsICVnMQorCW1vdgkJJW8wLCAlZzIKKwltb3YJCSVvMSwgJWczCisJbW92CQklbzIsICVnNAorMToJc3ViCQklZzEsICgxIDw8IDMpLCAlZzEKKwlsZHgJCVslZzcgKyAlZzFdLCAlbzAJLyogQVJHMDogdmlydHVhbCBhZGRyZXNzICovCisJbW92CQklZzUsICVvMQkJLyogQVJHMTogbW11IGNvbnRleHQgKi8KKwltb3YJCUhWX01NVV9BTEwsICVvMgkJLyogQVJHMjogZmxhZ3MgKi8KKwlzcmx4CQklbzAsIFBBR0VfU0hJRlQsICVvMAorCXNsbHgJCSVvMCwgUEFHRV9TSElGVCwgJW8wCisJdGEJCUhWX01NVV9VTk1BUF9BRERSX1RSQVAKKwltb3YJCUhWX01NVV9VTk1BUF9BRERSX1RSQVAsICVnNgorCWJybnosYSxwbgklbzAsIF9faHlwZXJ2aXNvcl90bGJfeGNhbGxfZXJyb3IKKwkgbW92CQklbzAsICVnNQorCWJybnoscHQJCSVnMSwgMWIKKwkgbm9wCisJbW92CQklZzIsICVvMAorCW1vdgkJJWczLCAlbzEKKwltb3YJCSVnNCwgJW8yCisJbWVtYmFyCQkjU3luYworCXJldHJ5CisKKwkuZ2xvYmwJCV9faHlwZXJ2aXNvcl94Y2FsbF9mbHVzaF90bGJfa2VybmVsX3JhbmdlCitfX2h5cGVydmlzb3JfeGNhbGxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZTogLyogMjUgaW5zbnMgKi8KKwkvKiAlZzE9c3RhcnQsICVnNz1lbmQsIGcyLGczLGc0LGc1LGc2PXNjcmF0Y2ggKi8KKwlzZXRoaQkJJWhpKFBBR0VfU0laRSAtIDEpLCAlZzIKKwlvcgkJJWcyLCAlbG8oUEFHRV9TSVpFIC0gMSksICVnMgorCWFuZG4JCSVnMSwgJWcyLCAlZzEKKwlhbmRuCQklZzcsICVnMiwgJWc3CisJc3ViCQklZzcsICVnMSwgJWczCisJYWRkCQklZzIsIDEsICVnMgorCXN1YgkJJWczLCAlZzIsICVnMworCW1vdgkJJW8wLCAlZzIKKwltb3YJCSVvMSwgJWc0CisJbW92CQklbzIsICVnNworMToJYWRkCQklZzEsICVnMywgJW8wCS8qIEFSRzA6IHZpcnR1YWwgYWRkcmVzcyAqLworCW1vdgkJMCwgJW8xCQkvKiBBUkcxOiBtbXUgY29udGV4dCAqLworCW1vdgkJSFZfTU1VX0FMTCwgJW8yCS8qIEFSRzI6IGZsYWdzICovCisJdGEJCUhWX01NVV9VTk1BUF9BRERSX1RSQVAKKwltb3YJCUhWX01NVV9VTk1BUF9BRERSX1RSQVAsICVnNgorCWJybnoscG4JCSVvMCwgX19oeXBlcnZpc29yX3RsYl94Y2FsbF9lcnJvcgorCSBtb3YJCSVvMCwgJWc1CisJc2V0aGkJCSVoaShQQUdFX1NJWkUpLCAlbzIKKwlicm56LHB0CQklZzMsIDFiCisJIHN1YgkJJWczLCAlbzIsICVnMworCW1vdgkJJWcyLCAlbzAKKwltb3YJCSVnNCwgJW8xCisJbW92CQklZzcsICVvMgorCW1lbWJhcgkJI1N5bmMKIAlyZXRyeQogCiAJLyogVGhlc2UganVzdCBnZXQgcmVzY2hlZHVsZWQgdG8gUElMIHZlY3RvcnMuICovCkBAIC01MjcsNCArNjczLDcwIEBACiAJd3IJCSVnMCwgKDEgPDwgUElMX1NNUF9DQVBUVVJFKSwgJXNldF9zb2Z0aW50CiAJcmV0cnkKIAorCS5nbG9ibAkJeGNhbGxfbmV3X21tdV9jb250ZXh0X3ZlcnNpb24KK3hjYWxsX25ld19tbXVfY29udGV4dF92ZXJzaW9uOgorCXdyCQklZzAsICgxIDw8IFBJTF9TTVBfQ1RYX05FV19WRVJTSU9OKSwgJXNldF9zb2Z0aW50CisJcmV0cnkKKwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworCisJLmdsb2JsCQloeXBlcnZpc29yX3BhdGNoX2NhY2hldGxib3BzCitoeXBlcnZpc29yX3BhdGNoX2NhY2hldGxib3BzOgorCXNhdmUJCSVzcCwgLTEyOCwgJXNwCisKKwlzZXRoaQkJJWhpKF9fZmx1c2hfdGxiX21tKSwgJW8wCisJb3IJCSVvMCwgJWxvKF9fZmx1c2hfdGxiX21tKSwgJW8wCisJc2V0aGkJCSVoaShfX2h5cGVydmlzb3JfZmx1c2hfdGxiX21tKSwgJW8xCisJb3IJCSVvMSwgJWxvKF9faHlwZXJ2aXNvcl9mbHVzaF90bGJfbW0pLCAlbzEKKwljYWxsCQl0bGJfcGF0Y2hfb25lCisJIG1vdgkJMTAsICVvMgorCisJc2V0aGkJCSVoaShfX2ZsdXNoX3RsYl9wZW5kaW5nKSwgJW8wCisJb3IJCSVvMCwgJWxvKF9fZmx1c2hfdGxiX3BlbmRpbmcpLCAlbzAKKwlzZXRoaQkJJWhpKF9faHlwZXJ2aXNvcl9mbHVzaF90bGJfcGVuZGluZyksICVvMQorCW9yCQklbzEsICVsbyhfX2h5cGVydmlzb3JfZmx1c2hfdGxiX3BlbmRpbmcpLCAlbzEKKwljYWxsCQl0bGJfcGF0Y2hfb25lCisJIG1vdgkJMTYsICVvMgorCisJc2V0aGkJCSVoaShfX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UpLCAlbzAKKwlvcgkJJW8wLCAlbG8oX19mbHVzaF90bGJfa2VybmVsX3JhbmdlKSwgJW8wCisJc2V0aGkJCSVoaShfX2h5cGVydmlzb3JfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSksICVvMQorCW9yCQklbzEsICVsbyhfX2h5cGVydmlzb3JfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSksICVvMQorCWNhbGwJCXRsYl9wYXRjaF9vbmUKKwkgbW92CQkxNiwgJW8yCisKKyNpZmRlZiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUKKwlzZXRoaQkJJWhpKF9fZmx1c2hfZGNhY2hlX3BhZ2UpLCAlbzAKKwlvcgkJJW8wLCAlbG8oX19mbHVzaF9kY2FjaGVfcGFnZSksICVvMAorCXNldGhpCQklaGkoX19oeXBlcnZpc29yX2ZsdXNoX2RjYWNoZV9wYWdlKSwgJW8xCisJb3IJCSVvMSwgJWxvKF9faHlwZXJ2aXNvcl9mbHVzaF9kY2FjaGVfcGFnZSksICVvMQorCWNhbGwJCXRsYl9wYXRjaF9vbmUKKwkgbW92CQkyLCAlbzIKKyNlbmRpZiAvKiBEQ0FDSEVfQUxJQVNJTkdfUE9TU0lCTEUgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKwlzZXRoaQkJJWhpKHhjYWxsX2ZsdXNoX3RsYl9tbSksICVvMAorCW9yCQklbzAsICVsbyh4Y2FsbF9mbHVzaF90bGJfbW0pLCAlbzAKKwlzZXRoaQkJJWhpKF9faHlwZXJ2aXNvcl94Y2FsbF9mbHVzaF90bGJfbW0pLCAlbzEKKwlvcgkJJW8xLCAlbG8oX19oeXBlcnZpc29yX3hjYWxsX2ZsdXNoX3RsYl9tbSksICVvMQorCWNhbGwJCXRsYl9wYXRjaF9vbmUKKwkgbW92CQkyMSwgJW8yCisKKwlzZXRoaQkJJWhpKHhjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nKSwgJW8wCisJb3IJCSVvMCwgJWxvKHhjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nKSwgJW8wCisJc2V0aGkJCSVoaShfX2h5cGVydmlzb3JfeGNhbGxfZmx1c2hfdGxiX3BlbmRpbmcpLCAlbzEKKwlvcgkJJW8xLCAlbG8oX19oeXBlcnZpc29yX3hjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nKSwgJW8xCisJY2FsbAkJdGxiX3BhdGNoX29uZQorCSBtb3YJCTIxLCAlbzIKKworCXNldGhpCQklaGkoeGNhbGxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSksICVvMAorCW9yCQklbzAsICVsbyh4Y2FsbF9mbHVzaF90bGJfa2VybmVsX3JhbmdlKSwgJW8wCisJc2V0aGkJCSVoaShfX2h5cGVydmlzb3JfeGNhbGxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSksICVvMQorCW9yCQklbzEsICVsbyhfX2h5cGVydmlzb3JfeGNhbGxfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSksICVvMQorCWNhbGwJCXRsYl9wYXRjaF9vbmUKKwkgbW92CQkyNSwgJW8yCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisJcmV0CisJIHJlc3RvcmUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL2NpZi5TIGIvYXJjaC9zcGFyYzY0L3Byb20vY2lmLlMKaW5kZXggMjlkMGFlNy4uNWYyN2FkNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vY2lmLlMKKysrIGIvYXJjaC9zcGFyYzY0L3Byb20vY2lmLlMKQEAgLTEsMTAgKzEsMTIgQEAKIC8qIGNpZi5TOiBQUk9NIGVudHJ5L2V4aXQgYXNzZW1ibGVyIHRyYW1wb2xpbmVzLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IEpha3ViIEplbGluZWsgKGpqQHN1bnNpdGUubWZmLmN1bmkuY3opCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgogICovCiAKICNpbmNsdWRlIDxhc20vcHN0YXRlLmg+CisjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogCS50ZXh0CiAJLmdsb2JsCXByb21fY2lmX2ludGVyZmFjZQpAQCAtMTIsNzggKzE0LDE2IEBACiAJc2V0aGkJJWhpKHAxMjc1YnVmKSwgJW8wCiAJb3IJJW8wLCAlbG8ocDEyNzVidWYpLCAlbzAKIAlsZHgJWyVvMCArIDB4MDEwXSwgJW8xCSEgcHJvbV9jaWZfc3RhY2sKLQlzYXZlCSVvMSwgLTB4MTkwLCAlc3AKKwlzYXZlCSVvMSwgLTE5MiwgJXNwCiAJbGR4CVslaTAgKyAweDAwOF0sICVsMgkhIHByb21fY2lmX2hhbmRsZXIKLQlyZHByCSVwc3RhdGUsICVsNAotCXdycHIJJWcwLCAweDE1LCAlcHN0YXRlCSEgc2F2ZSBhbHRlcm5hdGUgZ2xvYmFscwotCXN0eAklZzEsIFslc3AgKyAyMDQ3ICsgMHgwYjBdCi0Jc3R4CSVnMiwgWyVzcCArIDIwNDcgKyAweDBiOF0KLQlzdHgJJWczLCBbJXNwICsgMjA0NyArIDB4MGMwXQotCXN0eAklZzQsIFslc3AgKyAyMDQ3ICsgMHgwYzhdCi0Jc3R4CSVnNSwgWyVzcCArIDIwNDcgKyAweDBkMF0KLQlzdHgJJWc2LCBbJXNwICsgMjA0NyArIDB4MGQ4XQotCXN0eAklZzcsIFslc3AgKyAyMDQ3ICsgMHgwZTBdCi0Jd3JwcgklZzAsIDB4ODE0LCAlcHN0YXRlCSEgc2F2ZSBpbnRlcnJ1cHQgZ2xvYmFscwotCXN0eAklZzEsIFslc3AgKyAyMDQ3ICsgMHgwZThdCi0Jc3R4CSVnMiwgWyVzcCArIDIwNDcgKyAweDBmMF0KLQlzdHgJJWczLCBbJXNwICsgMjA0NyArIDB4MGY4XQotCXN0eAklZzQsIFslc3AgKyAyMDQ3ICsgMHgxMDBdCi0Jc3R4CSVnNSwgWyVzcCArIDIwNDcgKyAweDEwOF0KLQlzdHgJJWc2LCBbJXNwICsgMjA0NyArIDB4MTEwXQotCXN0eAklZzcsIFslc3AgKyAyMDQ3ICsgMHgxMThdCi0Jd3JwcgklZzAsIDB4MTQsICVwc3RhdGUJISBzYXZlIG5vcm1hbCBnbG9iYWxzCi0Jc3R4CSVnMSwgWyVzcCArIDIwNDcgKyAweDEyMF0KLQlzdHgJJWcyLCBbJXNwICsgMjA0NyArIDB4MTI4XQotCXN0eAklZzMsIFslc3AgKyAyMDQ3ICsgMHgxMzBdCi0Jc3R4CSVnNCwgWyVzcCArIDIwNDcgKyAweDEzOF0KLQlzdHgJJWc1LCBbJXNwICsgMjA0NyArIDB4MTQwXQotCXN0eAklZzYsIFslc3AgKyAyMDQ3ICsgMHgxNDhdCi0Jc3R4CSVnNywgWyVzcCArIDIwNDcgKyAweDE1MF0KLQl3cnByCSVnMCwgMHg0MTQsICVwc3RhdGUJISBzYXZlIG1tdSBnbG9iYWxzCi0Jc3R4CSVnMSwgWyVzcCArIDIwNDcgKyAweDE1OF0KLQlzdHgJJWcyLCBbJXNwICsgMjA0NyArIDB4MTYwXQotCXN0eAklZzMsIFslc3AgKyAyMDQ3ICsgMHgxNjhdCi0Jc3R4CSVnNCwgWyVzcCArIDIwNDcgKyAweDE3MF0KLQlzdHgJJWc1LCBbJXNwICsgMjA0NyArIDB4MTc4XQotCXN0eAklZzYsIFslc3AgKyAyMDQ3ICsgMHgxODBdCi0Jc3R4CSVnNywgWyVzcCArIDIwNDcgKyAweDE4OF0KLQltb3YJJWcxLCAlbDAJCSEgYWxzbyBzYXZlIHRvIGxvY2Fscywgc28gd2UgY2FuIGhhbmRsZQotCW1vdgklZzIsICVsMQkJISB0bGIgZmF1bHRzIGxhdGVyIG9uLCB3aGVuIGFjY2Vzc2luZwotCW1vdgklZzMsICVsMwkJISB0aGUgc3RhY2suCi0JbW92CSVnNywgJWw1Ci0Jd3JwcgklbDQsIFBTVEFURV9JRSwgJXBzdGF0ZQkhIHR1cm4gb2ZmIGludGVycnVwdHMKKwltb3YJJWc0LCAlbDAKKwltb3YJJWc1LCAlbDEKKwltb3YJJWc2LCAlbDMKIAljYWxsCSVsMgogCSBhZGQJJWkwLCAweDAxOCwgJW8wCQkhIHByb21fYXJncwotCXdycHIJJWcwLCAweDQxNCwgJXBzdGF0ZQkhIHJlc3RvcmUgbW11IGdsb2JhbHMKLQltb3YJJWwwLCAlZzEKLQltb3YJJWwxLCAlZzIKLQltb3YJJWwzLCAlZzMKLQltb3YJJWw1LCAlZzcKLQl3cnByCSVnMCwgMHgxNCwgJXBzdGF0ZQkhIHJlc3RvcmUgbm9ybWFsIGdsb2JhbHMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDEyMF0sICVnMQotCWxkeAlbJXNwICsgMjA0NyArIDB4MTI4XSwgJWcyCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxMzBdLCAlZzMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDEzOF0sICVnNAotCWxkeAlbJXNwICsgMjA0NyArIDB4MTQwXSwgJWc1Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxNDhdLCAlZzYKLQlsZHgJWyVzcCArIDIwNDcgKyAweDE1MF0sICVnNwotCXdycHIJJWcwLCAweDgxNCwgJXBzdGF0ZQkhIHJlc3RvcmUgaW50ZXJydXB0IGdsb2JhbHMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDBlOF0sICVnMQotCWxkeAlbJXNwICsgMjA0NyArIDB4MGYwXSwgJWcyCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgwZjhdLCAlZzMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDEwMF0sICVnNAotCWxkeAlbJXNwICsgMjA0NyArIDB4MTA4XSwgJWc1Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxMTBdLCAlZzYKLQlsZHgJWyVzcCArIDIwNDcgKyAweDExOF0sICVnNwotCXdycHIJJWcwLCAweDE1LCAlcHN0YXRlCSEgcmVzdG9yZSBhbHRlcm5hdGUgZ2xvYmFscwotCWxkeAlbJXNwICsgMjA0NyArIDB4MGIwXSwgJWcxCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgwYjhdLCAlZzIKLQlsZHgJWyVzcCArIDIwNDcgKyAweDBjMF0sICVnMwotCWxkeAlbJXNwICsgMjA0NyArIDB4MGM4XSwgJWc0Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgwZDBdLCAlZzUKLQlsZHgJWyVzcCArIDIwNDcgKyAweDBkOF0sICVnNgotCWxkeAlbJXNwICsgMjA0NyArIDB4MGUwXSwgJWc3Ci0Jd3JwcgklbDQsIDAsICVwc3RhdGUJISByZXN0b3JlIG9yaWdpbmFsIHBzdGF0ZQorCW1vdgklbDAsICVnNAorCW1vdgklbDEsICVnNQorCW1vdgklbDMsICVnNgogCXJldAogCSByZXN0b3JlCiAKQEAgLTkxLDEzNSArMzEsMTggQEAKIHByb21fY2lmX2NhbGxiYWNrOgogCXNldGhpCSVoaShwMTI3NWJ1ZiksICVvMQogCW9yCSVvMSwgJWxvKHAxMjc1YnVmKSwgJW8xCi0Jc2F2ZQklc3AsIC0weDI3MCwgJXNwCi0JcmRwcgklcHN0YXRlLCAlbDQKLQl3cnByCSVnMCwgMHgxNSwgJXBzdGF0ZQkhIHNhdmUgUFJPTSBhbHRlcm5hdGUgZ2xvYmFscwotCXN0eAklZzEsIFslc3AgKyAyMDQ3ICsgMHgwYjBdCi0Jc3R4CSVnMiwgWyVzcCArIDIwNDcgKyAweDBiOF0KLQlzdHgJJWczLCBbJXNwICsgMjA0NyArIDB4MGMwXQotCXN0eAklZzQsIFslc3AgKyAyMDQ3ICsgMHgwYzhdCi0Jc3R4CSVnNSwgWyVzcCArIDIwNDcgKyAweDBkMF0KLQlzdHgJJWc2LCBbJXNwICsgMjA0NyArIDB4MGQ4XQotCXN0eAklZzcsIFslc3AgKyAyMDQ3ICsgMHgwZTBdCi0JCQkJCSEgcmVzdG9yZSBMaW51eCBhbHRlcm5hdGUgZ2xvYmFscwotCWxkeAlbJXNwICsgMjA0NyArIDB4MTkwXSwgJWcxCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxOThdLCAlZzIKLQlsZHgJWyVzcCArIDIwNDcgKyAweDFhMF0sICVnMwotCWxkeAlbJXNwICsgMjA0NyArIDB4MWE4XSwgJWc0Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxYjBdLCAlZzUKLQlsZHgJWyVzcCArIDIwNDcgKyAweDFiOF0sICVnNgotCWxkeAlbJXNwICsgMjA0NyArIDB4MWMwXSwgJWc3Ci0Jd3JwcgklZzAsIDB4ODE0LCAlcHN0YXRlCSEgc2F2ZSBQUk9NIGludGVycnVwdCBnbG9iYWxzCi0Jc3R4CSVnMSwgWyVzcCArIDIwNDcgKyAweDBlOF0KLQlzdHgJJWcyLCBbJXNwICsgMjA0NyArIDB4MGYwXQotCXN0eAklZzMsIFslc3AgKyAyMDQ3ICsgMHgwZjhdCi0Jc3R4CSVnNCwgWyVzcCArIDIwNDcgKyAweDEwMF0KLQlzdHgJJWc1LCBbJXNwICsgMjA0NyArIDB4MTA4XQotCXN0eAklZzYsIFslc3AgKyAyMDQ3ICsgMHgxMTBdCi0Jc3R4CSVnNywgWyVzcCArIDIwNDcgKyAweDExOF0KLQkJCQkJISByZXN0b3JlIExpbnV4IGludGVycnVwdCBnbG9iYWxzCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxYzhdLCAlZzEKLQlsZHgJWyVzcCArIDIwNDcgKyAweDFkMF0sICVnMgotCWxkeAlbJXNwICsgMjA0NyArIDB4MWQ4XSwgJWczCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxZTBdLCAlZzQKLQlsZHgJWyVzcCArIDIwNDcgKyAweDFlOF0sICVnNQotCWxkeAlbJXNwICsgMjA0NyArIDB4MWYwXSwgJWc2Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxZjhdLCAlZzcKLQl3cnByCSVnMCwgMHgxNCwgJXBzdGF0ZQkhIHNhdmUgUFJPTSBub3JtYWwgZ2xvYmFscwotCXN0eAklZzEsIFslc3AgKyAyMDQ3ICsgMHgxMjBdCi0Jc3R4CSVnMiwgWyVzcCArIDIwNDcgKyAweDEyOF0KLQlzdHgJJWczLCBbJXNwICsgMjA0NyArIDB4MTMwXQotCXN0eAklZzQsIFslc3AgKyAyMDQ3ICsgMHgxMzhdCi0Jc3R4CSVnNSwgWyVzcCArIDIwNDcgKyAweDE0MF0KLQlzdHgJJWc2LCBbJXNwICsgMjA0NyArIDB4MTQ4XQotCXN0eAklZzcsIFslc3AgKyAyMDQ3ICsgMHgxNTBdCi0JCQkJCSEgcmVzdG9yZSBMaW51eCBub3JtYWwgZ2xvYmFscwotCWxkeAlbJXNwICsgMjA0NyArIDB4MjAwXSwgJWcxCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgyMDhdLCAlZzIKLQlsZHgJWyVzcCArIDIwNDcgKyAweDIxMF0sICVnMwotCWxkeAlbJXNwICsgMjA0NyArIDB4MjE4XSwgJWc0Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgyMjBdLCAlZzUKLQlsZHgJWyVzcCArIDIwNDcgKyAweDIyOF0sICVnNgotCWxkeAlbJXNwICsgMjA0NyArIDB4MjMwXSwgJWc3Ci0Jd3JwcgklZzAsIDB4NDE0LCAlcHN0YXRlCSEgc2F2ZSBQUk9NIG1tdSBnbG9iYWxzCi0Jc3R4CSVnMSwgWyVzcCArIDIwNDcgKyAweDE1OF0KLQlzdHgJJWcyLCBbJXNwICsgMjA0NyArIDB4MTYwXQotCXN0eAklZzMsIFslc3AgKyAyMDQ3ICsgMHgxNjhdCi0Jc3R4CSVnNCwgWyVzcCArIDIwNDcgKyAweDE3MF0KLQlzdHgJJWc1LCBbJXNwICsgMjA0NyArIDB4MTc4XQotCXN0eAklZzYsIFslc3AgKyAyMDQ3ICsgMHgxODBdCi0Jc3R4CSVnNywgWyVzcCArIDIwNDcgKyAweDE4OF0KLQkJCQkJISByZXN0b3JlIExpbnV4IG1tdSBnbG9iYWxzCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgyMzhdLCAlbzAKLQlsZHgJWyVzcCArIDIwNDcgKyAweDI0MF0sICVvMQotCWxkeAlbJXNwICsgMjA0NyArIDB4MjQ4XSwgJWwyCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgyNTBdLCAlbDMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDI1OF0sICVsNQotCWxkeAlbJXNwICsgMjA0NyArIDB4MjYwXSwgJWw2Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgyNjhdLCAlbDcKLQkJCQkJISBzd2l0Y2ggdG8gTGludXggdGJhCi0Jc2V0aGkJJWhpKHNwYXJjNjRfdHRhYmxlX3RsMCksICVsMQotCXJkcHIJJXRiYSwgJWwwCQkhIHNhdmUgUFJPTSB0YmEKLQltb3YJJW8wLCAlZzEKLQltb3YJJW8xLCAlZzIKLQltb3YJJWwyLCAlZzMKLQltb3YJJWwzLCAlZzQKLQltb3YJJWw1LCAlZzUKLQltb3YJJWw2LCAlZzYKLQltb3YJJWw3LCAlZzcKLQl3cnByCSVsMSwgJXRiYQkJISBpbnN0YWxsIExpbnV4IHRiYQotCXdycHIJJWw0LCAwLCAlcHN0YXRlCQkhIHJlc3RvcmUgUFNUQVRFCisJc2F2ZQklc3AsIC0xOTIsICVzcAorCVRSQVBfTE9BRF9USFJFQURfUkVHKCVnNiwgJWcxKQorCUxPQURfUEVSX0NQVV9CQVNFKCVnNSwgJWc2LCAlZzQsICVnMywgJW8wKQorCWxkeAlbJWc2ICsgVElfVEFTS10sICVnNAogCWNhbGwJcHJvbV93b3JsZAotCSBtb3YJJWcwLCAlbzAKKwkgbW92CTAsICVvMAogCWxkeAlbJWkxICsgMHgwMDBdLCAlbDIKIAljYWxsCSVsMgogCSBtb3YJJWkwLCAlbzAKIAltb3YJJW8wLCAlbDEKIAljYWxsCXByb21fd29ybGQKLQkgb3IJJWcwLCAxLCAlbzAKLQl3cnByCSVnMCwgMHgxNCwgJXBzdGF0ZQkhIGludGVycnVwdHMgb2ZmCi0JCQkJCSEgcmVzdG9yZSBQUk9NIG1tdSBnbG9iYWxzCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxNThdLCAlbzAKLQlsZHgJWyVzcCArIDIwNDcgKyAweDE2MF0sICVvMQotCWxkeAlbJXNwICsgMjA0NyArIDB4MTY4XSwgJWwyCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxNzBdLCAlbDMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDE3OF0sICVsNQotCWxkeAlbJXNwICsgMjA0NyArIDB4MTgwXSwgJWw2Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxODhdLCAlbDcKLQl3cnByCSVnMCwgMHg0MTQsICVwc3RhdGUJISByZXN0b3JlIFBST00gbW11IGdsb2JhbHMKLQltb3YJJW8wLCAlZzEKLQltb3YJJW8xLCAlZzIKLQltb3YJJWwyLCAlZzMKLQltb3YJJWwzLCAlZzQKLQltb3YJJWw1LCAlZzUKLQltb3YJJWw2LCAlZzYKLQltb3YJJWw3LCAlZzcKLQl3cnByCSVsMCwgJXRiYQkJISByZXN0b3JlIFBST00gdGJhCi0Jd3JwcgklZzAsIDB4MTQsICVwc3RhdGUJISByZXN0b3JlIFBST00gbm9ybWFsIGdsb2JhbHMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDEyMF0sICVnMQotCWxkeAlbJXNwICsgMjA0NyArIDB4MTI4XSwgJWcyCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxMzBdLCAlZzMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDEzOF0sICVnNAotCWxkeAlbJXNwICsgMjA0NyArIDB4MTQwXSwgJWc1Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxNDhdLCAlZzYKLQlsZHgJWyVzcCArIDIwNDcgKyAweDE1MF0sICVnNwotCXdycHIJJWcwLCAweDgxNCwgJXBzdGF0ZQkhIHJlc3RvcmUgUFJPTSBpbnRlcnJ1cHQgZ2xvYmFscwotCWxkeAlbJXNwICsgMjA0NyArIDB4MGU4XSwgJWcxCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgwZjBdLCAlZzIKLQlsZHgJWyVzcCArIDIwNDcgKyAweDBmOF0sICVnMwotCWxkeAlbJXNwICsgMjA0NyArIDB4MTAwXSwgJWc0Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgxMDhdLCAlZzUKLQlsZHgJWyVzcCArIDIwNDcgKyAweDExMF0sICVnNgotCWxkeAlbJXNwICsgMjA0NyArIDB4MTE4XSwgJWc3Ci0Jd3JwcgklZzAsIDB4MTUsICVwc3RhdGUJISByZXN0b3JlIFBST00gYWx0ZXJuYXRlIGdsb2JhbHMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDBiMF0sICVnMQotCWxkeAlbJXNwICsgMjA0NyArIDB4MGI4XSwgJWcyCi0JbGR4CVslc3AgKyAyMDQ3ICsgMHgwYzBdLCAlZzMKLQlsZHgJWyVzcCArIDIwNDcgKyAweDBjOF0sICVnNAotCWxkeAlbJXNwICsgMjA0NyArIDB4MGQwXSwgJWc1Ci0JbGR4CVslc3AgKyAyMDQ3ICsgMHgwZDhdLCAlZzYKLQlsZHgJWyVzcCArIDIwNDcgKyAweDBlMF0sICVnNwotCXdycHIJJWw0LCAwLCAlcHN0YXRlCisJIG1vdgkxLCAlbzAKIAlyZXQKIAkgcmVzdG9yZSAlbDEsIDAsICVvMAogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvcHJvbS9jb25zb2xlLmMgYi9hcmNoL3NwYXJjNjQvcHJvbS9jb25zb2xlLmMKaW5kZXggYWM2ZDAzNS4uN2MyNWM1NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vY29uc29sZS5jCisrKyBiL2FyY2gvc3BhcmM2NC9wcm9tL2NvbnNvbGUuYwpAQCAtMTAyLDYgKzEwMiw5IEBACiAJaWYgKCFzdHJuY21wIChwcm9wYiwgInJzYyIsIDMpKQogCQlyZXR1cm4gUFJPTURFVl9JUlNDOwogCisJaWYgKCFzdHJuY21wIChwcm9wYiwgInZpcnR1YWwtY29uc29sZSIsIDMpKQorCQlyZXR1cm4gUFJPTURFVl9JVkNPTlM7CisKIAlpZiAoc3RybmNtcCAocHJvcGIsICJ0dHkiLCAzKSB8fCAhcHJvcGJbM10pCiAJCXJldHVybiBQUk9NREVWX0lfVU5LOwogCkBAIC0xNDMsNiArMTQ2LDkgQEAKIAlpZiAoIXN0cm5jbXAgKHByb3BiLCAicnNjIiwgMykpCiAJCXJldHVybiBQUk9NREVWX09SU0M7CiAKKwlpZiAoIXN0cm5jbXAgKHByb3BiLCAidmlydHVhbC1jb25zb2xlIiwgMykpCisJCXJldHVybiBQUk9NREVWX09WQ09OUzsKKwogCWlmIChzdHJuY21wIChwcm9wYiwgInR0eSIsIDMpIHx8ICFwcm9wYlszXSkKIAkJcmV0dXJuIFBST01ERVZfT19VTks7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL2luaXQuYyBiL2FyY2gvc3BhcmM2NC9wcm9tL2luaXQuYwppbmRleCBmM2NjMmQ4Li4xYzBkYjg0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvcHJvbS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYzY0L3Byb20vaW5pdC5jCkBAIC0xNCwxMSArMTQsMTAgQEAKICNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KIAotZW51bSBwcm9tX21ham9yX3ZlcnNpb24gcHJvbV92ZXJzOwotdW5zaWduZWQgaW50IHByb21fcmV2LCBwcm9tX3ByZXY7CisvKiBPQlAgdmVyc2lvbiBzdHJpbmcuICovCitjaGFyIHByb21fdmVyc2lvbls4MF07CiAKIC8qIFRoZSByb290IG5vZGUgb2YgdGhlIHByb20gZGV2aWNlIHRyZWUuICovCi1pbnQgcHJvbV9yb290X25vZGU7CiBpbnQgcHJvbV9zdGRpbiwgcHJvbV9zdGRvdXQ7CiBpbnQgcHJvbV9jaG9zZW5fbm9kZTsKIApAQCAtMzEsNjggKzMwLDI1IEBACiAKIHZvaWQgX19pbml0IHByb21faW5pdCh2b2lkICpjaWZfaGFuZGxlciwgdm9pZCAqY2lmX3N0YWNrKQogewotCWNoYXIgYnVmZmVyWzgwXSwgKnA7Ci0JaW50IGludHNbM107CiAJaW50IG5vZGU7Ci0JaW50IGkgPSAwOwotCWludCBidWZhZGp1c3Q7Ci0KLQlwcm9tX3ZlcnMgPSBQUk9NX1AxMjc1OwogCiAJcHJvbV9jaWZfaW5pdChjaWZfaGFuZGxlciwgY2lmX3N0YWNrKTsKIAotCXByb21fcm9vdF9ub2RlID0gcHJvbV9nZXRzaWJsaW5nKDApOwotCWlmKChwcm9tX3Jvb3Rfbm9kZSA9PSAwKSB8fCAocHJvbV9yb290X25vZGUgPT0gLTEpKQotCQlwcm9tX2hhbHQoKTsKLQogCXByb21fY2hvc2VuX25vZGUgPSBwcm9tX2ZpbmRkZXZpY2UocHJvbV9jaG9zZW5fcGF0aCk7CiAJaWYgKCFwcm9tX2Nob3Nlbl9ub2RlIHx8IHByb21fY2hvc2VuX25vZGUgPT0gLTEpCiAJCXByb21faGFsdCgpOwogCi0JcHJvbV9zdGRpbiA9IHByb21fZ2V0aW50IChwcm9tX2Nob3Nlbl9ub2RlLCAic3RkaW4iKTsKLQlwcm9tX3N0ZG91dCA9IHByb21fZ2V0aW50IChwcm9tX2Nob3Nlbl9ub2RlLCAic3Rkb3V0Iik7CisJcHJvbV9zdGRpbiA9IHByb21fZ2V0aW50KHByb21fY2hvc2VuX25vZGUsICJzdGRpbiIpOworCXByb21fc3Rkb3V0ID0gcHJvbV9nZXRpbnQocHJvbV9jaG9zZW5fbm9kZSwgInN0ZG91dCIpOwogCiAJbm9kZSA9IHByb21fZmluZGRldmljZSgiL29wZW5wcm9tIik7CiAJaWYgKCFub2RlIHx8IG5vZGUgPT0gLTEpCiAJCXByb21faGFsdCgpOwogCi0JcHJvbV9nZXRzdHJpbmcgKG5vZGUsICJ2ZXJzaW9uIiwgYnVmZmVyLCBzaXplb2YgKGJ1ZmZlcikpOworCXByb21fZ2V0c3RyaW5nKG5vZGUsICJ2ZXJzaW9uIiwgcHJvbV92ZXJzaW9uLCBzaXplb2YocHJvbV92ZXJzaW9uKSk7CiAKLQlwcm9tX3ByaW50ZiAoIlxuIik7CisJcHJvbV9wcmludGYoIlxuIik7CiAKLQlpZiAoc3RybmNtcCAoYnVmZmVyLCAiT0JQICIsIDQpKQotCQlnb3RvIHN0cmFuZ2VfdmVyc2lvbjsKLQotCS8qCi0JICogVmVyc2lvbiBmaWVsZCBpcyBleHBlY3RlZCB0byBiZSAnT0JQIHh4Lnl5Lnp6IGRhdGUuLi4nCi0JICogSG93ZXZlciwgU3VuIGNhbid0IHN0aWNrIHRvIHRoaXMgZm9ybWF0IHZlcnkgd2VsbCwgc28KLQkgKiB3ZSBuZWVkIHRvIGNoZWNrIGZvciAnT0JQICB4eC55eS56eiBkYXRlLi4uJyBhbmQgYWRqdXN0Ci0JICogYWNjb3JkaW5nbHkuIC1zcG90Ci0JICovCi0KLQlpZiAoc3RybmNtcCAoYnVmZmVyLCAiT0JQICAiLCA1KSkKLQkJYnVmYWRqdXN0ID0gNDsKLQllbHNlCi0JCWJ1ZmFkanVzdCA9IDU7Ci0KLQlwID0gYnVmZmVyICsgYnVmYWRqdXN0OwotCXdoaWxlIChwICYmIGlzZGlnaXQoKnApICYmIGkgPCAzKSB7Ci0JCWludHNbaSsrXSA9IHNpbXBsZV9zdHJ0b3VsKHAsIE5VTEwsIDApOwotCQlpZiAoKHAgPSBzdHJjaHIocCwgJy4nKSkgIT0gTlVMTCkKLQkJCXArKzsKLQl9Ci0JaWYgKGkgIT0gMykKLQkJZ290byBzdHJhbmdlX3ZlcnNpb247Ci0KLQlwcm9tX3JldiA9IGludHNbMV07Ci0JcHJvbV9wcmV2ID0gKGludHNbMF0gPDwgMTYpIHwgKGludHNbMV0gPDwgOCkgfCBpbnRzWzJdOwotCi0JcHJpbnRrICgiUFJPTUxJQjogU3VuIElFRUUgQm9vdCBQcm9tICVzXG4iLCBidWZmZXIgKyBidWZhZGp1c3QpOwotCi0JLyogSW5pdGlhbGl6YXRpb24gc3VjY2Vzc2Z1bC4gKi8KLQlyZXR1cm47Ci0KLXN0cmFuZ2VfdmVyc2lvbjoKLQlwcm9tX3ByaW50ZiAoIlN0cmFuZ2UgT0JQIHZlcnNpb24gYCVzJy5cbiIsIGJ1ZmZlcik7Ci0JcHJvbV9oYWx0ICgpOworCXByaW50aygiUFJPTUxJQjogU3VuIElFRUUgQm9vdCBQcm9tICclcydcbiIsIHByb21fdmVyc2lvbik7CisJcHJpbnRrKCJQUk9NTElCOiBSb290IG5vZGUgY29tcGF0aWJsZTogJXNcbiIsIHByb21fcm9vdF9jb21wYXRpYmxlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9wcm9tL21pc2MuYyBiL2FyY2gvc3BhcmM2NC9wcm9tL21pc2MuYwppbmRleCA4N2Y1Y2ZjLi41NzdiZGU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvcHJvbS9taXNjLmMKKysrIGIvYXJjaC9zcGFyYzY0L3Byb20vbWlzYy5jCkBAIC0xMTIsMjggKzExMiwyMCBAQAogCXJldHVybiAweGZmOwogfQogCi0vKiBHZXQgdGhlIG1ham9yIHByb20gdmVyc2lvbiBudW1iZXIuICovCi1pbnQgcHJvbV92ZXJzaW9uKHZvaWQpCi17Ci0JcmV0dXJuIFBST01fUDEyNzU7Ci19Ci0KLS8qIEdldCB0aGUgcHJvbSBwbHVnaW4tcmV2aXNpb24uICovCi1pbnQgcHJvbV9nZXRyZXYodm9pZCkKLXsKLQlyZXR1cm4gcHJvbV9yZXY7Ci19Ci0KLS8qIEdldCB0aGUgcHJvbSBmaXJtd2FyZSBwcmludCByZXZpc2lvbi4gKi8KLWludCBwcm9tX2dldHByZXYodm9pZCkKLXsKLQlyZXR1cm4gcHJvbV9wcmV2OwotfQotCiAvKiBJbnN0YWxsIExpbnV4IHRyYXAgdGFibGUgc28gUFJPTSB1c2VzIHRoYXQgaW5zdGVhZCBvZiBpdHMgb3duLiAqLwogdm9pZCBwcm9tX3NldF90cmFwX3RhYmxlKHVuc2lnbmVkIGxvbmcgdGJhKQogewotCXAxMjc1X2NtZCgiU1VOVyxzZXQtdHJhcC10YWJsZSIsIFAxMjc1X0lOT1VUKDEsIDApLCB0YmEpOworCXAxMjc1X2NtZCgiU1VOVyxzZXQtdHJhcC10YWJsZSIsCisJCSAgKFAxMjc1X0FSRygwLCBQMTI3NV9BUkdfSU5fNjRCKSB8CisJCSAgIFAxMjc1X0lOT1VUKDEsIDApKSwgdGJhKTsKK30KKwordm9pZCBwcm9tX3NldF90cmFwX3RhYmxlX3N1bjR2KHVuc2lnbmVkIGxvbmcgdGJhLCB1bnNpZ25lZCBsb25nIG1tZnNhKQoreworCXAxMjc1X2NtZCgiU1VOVyxzZXQtdHJhcC10YWJsZSIsCisJCSAgKFAxMjc1X0FSRygwLCBQMTI3NV9BUkdfSU5fNjRCKSB8CisJCSAgIFAxMjc1X0FSRygxLCBQMTI3NV9BUkdfSU5fNjRCKSB8CisJCSAgIFAxMjc1X0lOT1VUKDIsIDApKSwgdGJhLCBtbWZzYSk7CiB9CiAKIGludCBwcm9tX2dldF9tbXVfaWhhbmRsZSh2b2lkKQpAQCAtMzAzLDkgKzI5NSwyMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotdm9pZCBwcm9tX3N0YXJ0Y3B1KGludCBjcHVub2RlLCB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIG8wKQordm9pZCBwcm9tX3N0YXJ0Y3B1KGludCBjcHVub2RlLCB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlwMTI3NV9jbWQoIlNVTlcsc3RhcnQtY3B1IiwgUDEyNzVfSU5PVVQoMywgMCksIGNwdW5vZGUsIHBjLCBvMCk7CisJcDEyNzVfY21kKCJTVU5XLHN0YXJ0LWNwdSIsIFAxMjc1X0lOT1VUKDMsIDApLCBjcHVub2RlLCBwYywgYXJnKTsKK30KKwordm9pZCBwcm9tX3N0YXJ0Y3B1X2NwdWlkKGludCBjcHVpZCwgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcDEyNzVfY21kKCJTVU5XLHN0YXJ0LWNwdS1ieS1jcHVpZCIsIFAxMjc1X0lOT1VUKDMsIDApLAorCQkgIGNwdWlkLCBwYywgYXJnKTsKK30KKwordm9pZCBwcm9tX3N0b3BjcHVfY3B1aWQoaW50IGNwdWlkKQoreworCXAxMjc1X2NtZCgiU1VOVyxzdG9wLWNwdS1ieS1jcHVpZCIsIFAxMjc1X0lOT1VUKDEsIDApLAorCQkgIGNwdWlkKTsKIH0KIAogdm9pZCBwcm9tX3N0b3BzZWxmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvcHJvbS9wMTI3NS5jIGIvYXJjaC9zcGFyYzY0L3Byb20vcDEyNzUuYwppbmRleCBhNWE3YzU3MS4uMmIzMmM0OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3Byb20vcDEyNzUuYworKysgYi9hcmNoL3NwYXJjNjQvcHJvbS9wMTI3NS5jCkBAIC0zMCwxNiArMzAsNiBAQAogZXh0ZXJuIHZvaWQgcHJvbV9jaWZfaW50ZXJmYWNlKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvbV9jaWZfY2FsbGJhY2sodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzcGl0ZmlyZV9nZXRfcHJpbWFyeV9jb250ZXh0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBjdHg7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJTFdICUyLCAlMCIKLQkJCSAgICAgOiAiPXIiIChjdHgpCi0JCQkgICAgIDogInIiIChQUklNQVJZX0NPTlRFWFQpLCAiaSIgKEFTSV9ETU1VKSk7Ci0JcmV0dXJuIGN0eDsKLX0KLQogLyoKICAqIFRoaXMgcHJvdmlkZXMgU01QIHNhZmV0eSBvbiB0aGUgcDEyNzVidWYuIHByb21fY2FsbGJhY2soKSBkcm9wcyB0aGlzIGxvY2sKICAqIHRvIGFsbG93IHJlY3Vyc3V2ZSBhY3F1aXNpdGlvbi4KQEAgLTU1LDcgKzQ1LDYgQEAKIAlsb25nIGF0dHJzLCB4OwogCQogCXAgPSBwMTI3NWJ1Zi5wcm9tX2J1ZmZlcjsKLQlCVUdfT04oKHNwaXRmaXJlX2dldF9wcmltYXJ5X2NvbnRleHQoKSAmIENUWF9OUl9NQVNLKSAhPSAwKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcm9tX2VudHJ5X2xvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3Byb20vdHJlZS5jIGIvYXJjaC9zcGFyYzY0L3Byb20vdHJlZS5jCmluZGV4IGIxZmY5ZTguLjQ5MDc1YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9wcm9tL3RyZWUuYworKysgYi9hcmNoL3NwYXJjNjQvcHJvbS90cmVlLmMKQEAgLTUxLDcgKzUxLDcgQEAKIF9faW5saW5lX18gaW50CiBfX3Byb21fZ2V0c2libGluZyhpbnQgbm9kZSkKIHsKLQlyZXR1cm4gcDEyNzVfY21kICgicGVlciIsIFAxMjc1X0lOT1VUKDEsIDEpLCBub2RlKTsKKwlyZXR1cm4gcDEyNzVfY21kKHByb21fcGVlcl9uYW1lLCBQMTI3NV9JTk9VVCgxLCAxKSwgbm9kZSk7CiB9CiAKIF9faW5saW5lX18gaW50CkBAIC01OSw5ICs1OSwxMiBAQAogewogCWludCBzaWJub2RlOwogCi0JaWYobm9kZSA9PSAtMSkgcmV0dXJuIDA7CisJaWYgKG5vZGUgPT0gLTEpCisJCXJldHVybiAwOwogCXNpYm5vZGUgPSBfX3Byb21fZ2V0c2libGluZyhub2RlKTsKLQlpZihzaWJub2RlID09IC0xKSByZXR1cm4gMDsKKwlpZiAoc2libm9kZSA9PSAtMSkKKwkJcmV0dXJuIDA7CisKIAlyZXR1cm4gc2libm9kZTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvZW50cnk2NC5TIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvZW50cnk2NC5TCmluZGV4IGViMzE0ZWQuLmYxNzAzMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL2VudHJ5NjQuUworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9lbnRyeTY0LlMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCWJhLHB0CQkleGNjLCByZXRfZnJvbV9zb2xhcmlzCiAJIG5vcAogCi0JLnNlY3Rpb24JX19leF90YWJsZSwjYWxsb2MKKwkuc2VjdGlvbglfX2V4X3RhYmxlLCJhIgogCS5hbGlnbgkJNAogCS53b3JkCQlleGVuLCBleGVuZgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMKaW5kZXggM2FiNDY3Ny4uNTI4NDk5NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCisrKyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL21pc2MuYwpAQCAtOTAsNyArOTAsNyBAQAogCWxlbiA9IFBBR0VfQUxJR04obGVuKTsKIAlpZighKGZsYWdzICYgTUFQX0ZJWEVEKSkKIAkJYWRkciA9IDA7Ci0JZWxzZSBpZiAobGVuID4gMHhmMDAwMDAwMFVMIHx8IGFkZHIgPiAweGYwMDAwMDAwVUwgLSBsZW4pCisJZWxzZSBpZiAobGVuID4gU1RBQ0tfVE9QMzIgfHwgYWRkciA+IFNUQUNLX1RPUDMyIC0gbGVuKQogCQlnb3RvIG91dF9wdXRmOwogCXJldF90eXBlID0gZmxhZ3MgJiBfTUFQX05FVzsKIAlmbGFncyAmPSB+X01BUF9ORVc7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJCSAodW5zaWduZWQgbG9uZykgcHJvdCwgKHVuc2lnbmVkIGxvbmcpIGZsYWdzLCBvZmYpOwogCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmKCFyZXRfdHlwZSkKLQkJcmV0dmFsID0gKChyZXR2YWwgPCAweGYwMDAwMDAwKSA/IDAgOiByZXR2YWwpOworCQlyZXR2YWwgPSAoKHJldHZhbCA8IFNUQUNLX1RPUDMyKSA/IDAgOiByZXR2YWwpOwogCSAgICAgICAgICAgICAgICAgICAgICAgIAogb3V0X3B1dGY6CiAJaWYgKGZpbGUpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvY293LmggYi9hcmNoL3VtL2RyaXZlcnMvY293LmgKaW5kZXggZGMzNmIyMi4uMDRlMzk1OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2Nvdy5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9jb3cuaApAQCAtNDYsNyArNDYsNyBAQAogZXh0ZXJuIGludCByZWFkX2Nvd19oZWFkZXIoaW50ICgqcmVhZGVyKShfX3U2NCwgY2hhciAqLCBpbnQsIHZvaWQgKiksCiAJCQkgICB2b2lkICphcmcsIF9fdTMyICp2ZXJzaW9uX291dCwKIAkJCSAgIGNoYXIgKipiYWNraW5nX2ZpbGVfb3V0LCB0aW1lX3QgKm10aW1lX291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZV9vdXQsIGludCAqc2VjdG9yc2l6ZV9vdXQsCisJCQkgICBfX3U2NCAqc2l6ZV9vdXQsIGludCAqc2VjdG9yc2l6ZV9vdXQsCiAJCQkgICBfX3UzMiAqYWxpZ25fb3V0LCBpbnQgKmJpdG1hcF9vZmZzZXRfb3V0KTsKIAogZXh0ZXJuIGludCB3cml0ZV9jb3dfaGVhZGVyKGNoYXIgKmNvd19maWxlLCBpbnQgZmQsIGNoYXIgKmJhY2tpbmdfZmlsZSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9jb3dfc3lzLmggYi9hcmNoL3VtL2RyaXZlcnMvY293X3N5cy5oCmluZGV4IGM4M2ZjNWQuLjk0ZGU0ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9jb3dfc3lzLmgKKysrIGIvYXJjaC91bS9kcml2ZXJzL2Nvd19zeXMuaApAQCAtMjMsMTcgKzIzLDE3IEBACiAJcmV0dXJuKHVtbF9zdHJkdXAoc3RyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNvd19zZWVrX2ZpbGUoaW50IGZkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0KQorc3RhdGljIGlubGluZSBpbnQgY293X3NlZWtfZmlsZShpbnQgZmQsIF9fdTY0IG9mZnNldCkKIHsKIAlyZXR1cm4ob3Nfc2Vla19maWxlKGZkLCBvZmZzZXQpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY293X2ZpbGVfc2l6ZShjaGFyICpmaWxlLCB1bnNpZ25lZCBsb25nIGxvbmcgKnNpemVfb3V0KQorc3RhdGljIGlubGluZSBpbnQgY293X2ZpbGVfc2l6ZShjaGFyICpmaWxlLCBfX3U2NCAqc2l6ZV9vdXQpCiB7CiAJcmV0dXJuKG9zX2ZpbGVfc2l6ZShmaWxlLCBzaXplX291dCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb3dfd3JpdGVfZmlsZShpbnQgZmQsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBjb3dfd3JpdGVfZmlsZShpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CiAJcmV0dXJuKG9zX3dyaXRlX2ZpbGUoZmQsIGJ1Ziwgc2l6ZSkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2Nvd191c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYwppbmRleCBmYmUyMjE3Li42MTk1MWI3IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvY293X3VzZXIuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJZXJyID0gLUVOT01FTTsKIAloZWFkZXIgPSBjb3dfbWFsbG9jKHNpemVvZigqaGVhZGVyKSk7CiAJaWYoaGVhZGVyID09IE5VTEwpewotCQljb3dfcHJpbnRmKCJGYWlsZWQgdG8gYWxsb2NhdGUgQ09XIFYzIGhlYWRlclxuIik7CisJCWNvd19wcmludGYoIndyaXRlX2Nvd19oZWFkZXIgLSBmYWlsZWQgdG8gYWxsb2NhdGUgQ09XIFYzIGhlYWRlclxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAloZWFkZXItPm1hZ2ljID0gaHRvbmwoQ09XX01BR0lDKTsKQEAgLTE5NiwxNSArMTk2LDE3IEBACiAKIAllcnIgPSBvc19maWxlX21vZHRpbWUoaGVhZGVyLT5iYWNraW5nX2ZpbGUsICZtb2R0aW1lKTsKIAlpZihlcnIgPCAwKXsKLQkJY293X3ByaW50ZigiQmFja2luZyBmaWxlICclcycgbXRpbWUgcmVxdWVzdCBmYWlsZWQsICIKLQkJCSAgICJlcnIgPSAlZFxuIiwgaGVhZGVyLT5iYWNraW5nX2ZpbGUsIC1lcnIpOworCQljb3dfcHJpbnRmKCJ3cml0ZV9jb3dfaGVhZGVyIC0gYmFja2luZyBmaWxlICclcycgbXRpbWUgIgorCQkJICAgInJlcXVlc3QgZmFpbGVkLCBlcnIgPSAlZFxuIiwgaGVhZGVyLT5iYWNraW5nX2ZpbGUsCisJCQkgICAtZXJyKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKIAllcnIgPSBjb3dfZmlsZV9zaXplKGhlYWRlci0+YmFja2luZ19maWxlLCBzaXplKTsKIAlpZihlcnIgPCAwKXsKLQkJY293X3ByaW50ZigiQ291bGRuJ3QgZ2V0IHNpemUgb2YgYmFja2luZyBmaWxlICclcycsICIKLQkJCSAgICJlcnIgPSAlZFxuIiwgaGVhZGVyLT5iYWNraW5nX2ZpbGUsIC1lcnIpOworCQljb3dfcHJpbnRmKCJ3cml0ZV9jb3dfaGVhZGVyIC0gY291bGRuJ3QgZ2V0IHNpemUgb2YgIgorCQkJICAgImJhY2tpbmcgZmlsZSAnJXMnLCBlcnIgPSAlZFxuIiwKKwkJCSAgIGhlYWRlci0+YmFja2luZ19maWxlLCAtZXJyKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKQEAgLTIxNCwxMCArMjE2LDExIEBACiAJaGVhZGVyLT5hbGlnbm1lbnQgPSBodG9ubChhbGlnbm1lbnQpOwogCWhlYWRlci0+Y293X2Zvcm1hdCA9IENPV19CSVRNQVA7CiAKLQllcnIgPSBvc193cml0ZV9maWxlKGZkLCBoZWFkZXIsIHNpemVvZigqaGVhZGVyKSk7CisJZXJyID0gY293X3dyaXRlX2ZpbGUoZmQsIGhlYWRlciwgc2l6ZW9mKCpoZWFkZXIpKTsKIAlpZihlcnIgIT0gc2l6ZW9mKCpoZWFkZXIpKXsKLQkJY293X3ByaW50ZigiV3JpdGUgb2YgaGVhZGVyIHRvIG5ldyBDT1cgZmlsZSAnJXMnIGZhaWxlZCwgIgotCQkJICAgImVyciA9ICVkXG4iLCBjb3dfZmlsZSwgLWVycik7CisJCWNvd19wcmludGYoIndyaXRlX2Nvd19oZWFkZXIgLSB3cml0ZSBvZiBoZWFkZXIgdG8gIgorCQkJICAgIm5ldyBDT1cgZmlsZSAnJXMnIGZhaWxlZCwgZXJyID0gJWRcbiIsIGNvd19maWxlLAorCQkJICAgLWVycik7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCWVyciA9IDA7CkBAIC0yOTksNyArMzAyLDcgQEAKIAl9CiAJZWxzZSBpZih2ZXJzaW9uID09IDMpewogCQlpZihuIDwgc2l6ZW9mKGhlYWRlci0+djMpKXsKLQkJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGZhaWxlZCB0byByZWFkIFYyICIKKwkJCWNvd19wcmludGYoInJlYWRfY293X2hlYWRlciAtIGZhaWxlZCB0byByZWFkIFYzICIKIAkJCQkgICAiaGVhZGVyXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zNTksNyArMzYyLDggQEAKIAlpZihlcnIgIT0gc2l6ZW9mKHplcm8pKXsKIAkJY293X3ByaW50ZigiV3JpdGUgb2YgYml0bWFwIHRvIG5ldyBDT1cgZmlsZSAnJXMnIGZhaWxlZCwgIgogCQkJICAgImVyciA9ICVkXG4iLCBjb3dfZmlsZSwgLWVycik7Ci0JCWVyciA9IC1FSU5WQUw7CisJCWlmIChlcnIgPj0gMCkKKwkJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X3VzZXIuYwppbmRleCAwOThmYTY1Li4wZTJmMDYxOCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKQEAgLTQ3LDEwICs0NywxMiBAQAogCX0KIH0KIAorLyogRG8gcmVsaWFibGUgZXJyb3IgaGFuZGxpbmcgYXMgdGhpcyBmYWlscyBmcmVxdWVudGx5IGVub3VnaC4gKi8KIHZvaWQgcmVhZF9vdXRwdXQoaW50IGZkLCBjaGFyICpvdXRwdXQsIGludCBsZW4pCiB7Ci0JaW50IHJlbWFpbiwgbiwgYWN0dWFsOworCWludCByZW1haW4sIHJldCwgZXhwZWN0ZWQ7CiAJY2hhciBjOworCWNoYXIgKnN0cjsKIAogCWlmKG91dHB1dCA9PSBOVUxMKXsKIAkJb3V0cHV0ID0gJmM7CkBAIC01OCwyMyArNjAsMzEgQEAKIAl9CiAJCQogCSpvdXRwdXQgPSAnXDAnOwotCW4gPSBvc19yZWFkX2ZpbGUoZmQsICZyZW1haW4sIHNpemVvZihyZW1haW4pKTsKLQlpZihuICE9IHNpemVvZihyZW1haW4pKXsKLQkJcHJpbnRrKCJyZWFkX291dHB1dCAtIHJlYWQgb2YgbGVuZ3RoIGZhaWxlZCwgZXJyID0gJWRcbiIsIC1uKTsKLQkJcmV0dXJuOworCXJldCA9IG9zX3JlYWRfZmlsZShmZCwgJnJlbWFpbiwgc2l6ZW9mKHJlbWFpbikpOworCisJaWYgKHJldCAhPSBzaXplb2YocmVtYWluKSkgeworCQlleHBlY3RlZCA9IHNpemVvZihyZW1haW4pOworCQlzdHIgPSAibGVuZ3RoIjsKKwkJZ290byBlcnI7CiAJfQogCiAJd2hpbGUocmVtYWluICE9IDApewotCQluID0gKHJlbWFpbiA8IGxlbikgPyByZW1haW4gOiBsZW47Ci0JCWFjdHVhbCA9IG9zX3JlYWRfZmlsZShmZCwgb3V0cHV0LCBuKTsKLQkJaWYoYWN0dWFsICE9IG4pewotCQkJcHJpbnRrKCJyZWFkX291dHB1dCAtIHJlYWQgb2YgZGF0YSBmYWlsZWQsICIKLQkJCSAgICAgICAiZXJyID0gJWRcbiIsIC1hY3R1YWwpOwotCQkJcmV0dXJuOworCQlleHBlY3RlZCA9IChyZW1haW4gPCBsZW4pID8gcmVtYWluIDogbGVuOworCQlyZXQgPSBvc19yZWFkX2ZpbGUoZmQsIG91dHB1dCwgZXhwZWN0ZWQpOworCQlpZiAocmV0ICE9IGV4cGVjdGVkKSB7CisJCQlzdHIgPSAiZGF0YSI7CisJCQlnb3RvIGVycjsKIAkJfQotCQlyZW1haW4gLT0gYWN0dWFsOworCQlyZW1haW4gLT0gcmV0OwogCX0KKwogCXJldHVybjsKKworZXJyOgorCWlmIChyZXQgPCAwKQorCQlwcmludGsoInJlYWRfb3V0cHV0IC0gcmVhZCBvZiAlcyBmYWlsZWQsIGVycm5vID0gJWRcbiIsIHN0ciwgLXJldCk7CisJZWxzZQorCQlwcmludGsoInJlYWRfb3V0cHV0IC0gcmVhZCBvZiAlcyBmYWlsZWQsIHJlYWQgb25seSAlZCBvZiAlZCBieXRlc1xuIiwgc3RyLCByZXQsIGV4cGVjdGVkKTsKIH0KIAogaW50IG5ldF9yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwppbmRleCAxMDFlZmQyLi5mYTYxN2UwIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtMTEzNSw3ICsxMTM1LDcgQEAKIHN0YXRpYyBpbnQgYmFja2luZ19maWxlX21pc21hdGNoKGNoYXIgKmZpbGUsIF9fdTY0IHNpemUsIHRpbWVfdCBtdGltZSkKIHsKIAl1bnNpZ25lZCBsb25nIG1vZHRpbWU7Ci0JbG9uZyBsb25nIGFjdHVhbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWN0dWFsOwogCWludCBlcnI7CiAKIAllcnIgPSBvc19maWxlX21vZHRpbWUoZmlsZSwgJm1vZHRpbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2luaXQuaCBiL2FyY2gvdW0vaW5jbHVkZS9pbml0LmgKaW5kZXggY2JkNzlhOC4uZDRkZTdjMCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2luaXQuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvaW5pdC5oCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogI2RlZmluZSBfX2V4aXRjYWxsKGZuKSBzdGF0aWMgZXhpdGNhbGxfdCBfX2V4aXRjYWxsXyMjZm4gX19leGl0X2NhbGwgPSBmbgogCi0jZGVmaW5lIF9faW5pdF9jYWxsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsX19zZWN0aW9uX18gKCIuaW5pdGNhbGwuaW5pdCIpKSkKKyNkZWZpbmUgX19pbml0X2NhbGwJX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5pbml0Y2FsbC5pbml0IikpKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL29zLmggYi9hcmNoL3VtL2luY2x1ZGUvb3MuaAppbmRleCBlYjE3MTBiLi4yYTFjNjRkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvb3MuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvb3MuaApAQCAtMTc5LDggKzE3OSwxMSBAQAogZXh0ZXJuIHZvaWQgb3Nfa2lsbF9wcm9jZXNzKGludCBwaWQsIGludCByZWFwX2NoaWxkKTsKIGV4dGVybiB2b2lkIG9zX2tpbGxfcHRyYWNlZF9wcm9jZXNzKGludCBwaWQsIGludCByZWFwX2NoaWxkKTsKIGV4dGVybiB2b2lkIG9zX3VzcjFfcHJvY2VzcyhpbnQgcGlkKTsKK2V4dGVybiBsb25nIG9zX3B0cmFjZV9sZHQobG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKTsKKwogZXh0ZXJuIGludCBvc19nZXRwaWQodm9pZCk7CiBleHRlcm4gaW50IG9zX2dldHBncnAodm9pZCk7CisKIGV4dGVybiB2b2lkIGluaXRfbmV3X3RocmVhZF9zdGFjayh2b2lkICpzaWdfc3RhY2ssIHZvaWQgKCp1c3IxX2hhbmRsZXIpKGludCkpOwogZXh0ZXJuIHZvaWQgaW5pdF9uZXdfdGhyZWFkX3NpZ25hbHMoaW50IGFsdHN0YWNrKTsKIGV4dGVybiBpbnQgcnVuX2tlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZywgdm9pZCAqKmptcF9wdHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvbWVtLmMgYi9hcmNoL3VtL2tlcm5lbC9tZW0uYwppbmRleCBmYTRmOTE1Li45MmNjZTk2IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9tZW0uYworKysgYi9hcmNoL3VtL2tlcm5lbC9tZW0uYwpAQCAtNTcsNyArNTcsNyBAQAogCWZvcihpID0gMDsgaSA8IGhpZ2htZW1fbGVuID4+IFBBR0VfU0hJRlQ7IGkrKyl7CiAJCXBhZ2UgPSAmbWVtX21hcFtoaWdobWVtX3BmbiArIGldOwogCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CisJCWluaXRfcGFnZV9jb3VudChwYWdlKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJfQogfQpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCQkoZW5kIC0gc3RhcnQpID4+IDEwKTsKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKIAkJZnJlZV9wYWdlKHN0YXJ0KTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMgYi9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMKaW5kZXggNTQ0NjY1ZS4uMGU2NTM0MCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvcGh5c21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAKIAlmb3IoaSA9IDA7IGkgPCB0b3RhbF9wYWdlczsgaSsrKXsKIAkJcCA9ICZtYXBbaV07Ci0JCXNldF9wYWdlX2NvdW50KHAsIDApOworCQltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlKSk7CiAJCVNldFBhZ2VSZXNlcnZlZChwKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnAtPmxydSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jIGIvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jCmluZGV4IDI3Y2RmOTEuLjgwYzljMTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYworKysgYi9hcmNoL3VtL2tlcm5lbC91bV9hcmNoLmMKQEAgLTQ5MSw2ICs0OTEsMTYgQEAKIAljaGVja19kZXZhbm9uKCk7CiB9CiAKLXZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit2b2lkIGFwcGx5X2FsdGVybmF0aXZlcyhzdHJ1Y3QgYWx0X2luc3RyICpzdGFydCwgc3RydWN0IGFsdF9pbnN0ciAqZW5kKQoreworfQorCit2b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCisJCQkJIHZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCisJCQkJIHZvaWQgKnRleHQsICB2b2lkICp0ZXh0X2VuZCkKK3sKK30KKwordm9pZCBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKQogewogfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9maWxlLmMgYi9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYwppbmRleCBmNTU3NzNjLi4zYmQxMGRlIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYworKysgYi9hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYwpAQCAtMjcyLDE0ICsyNzIsMjMgQEAKIAlzbnByaW50Zihzb2NrLnN1bl9wYXRoLCBzaXplb2Yoc29jay5zdW5fcGF0aCksICIlcyIsIG5hbWUpOwogCiAJZmQgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApOwotCWlmKGZkIDwgMCkKLQkJcmV0dXJuKGZkKTsKKwlpZihmZCA8IDApIHsKKwkJZXJyID0gLWVycm5vOworCQlnb3RvIG91dDsKKwl9CiAKIAllcnIgPSBjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopICZzb2NrLCBzaXplb2Yoc29jaykpOwotCWlmKGVycikKLQkJcmV0dXJuKC1lcnJubyk7CisJaWYoZXJyKSB7CisJCWVyciA9IC1lcnJubzsKKwkJZ290byBvdXRfY2xvc2U7CisJfQogCi0JcmV0dXJuKGZkKTsKKwlyZXR1cm4gZmQ7CisKK291dF9jbG9zZToKKwljbG9zZShmZCk7CitvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBvc19jbG9zZV9maWxlKGludCBmZCkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvcHJvY2Vzcy5jIGIvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKaW5kZXggN2Y1ZTJkYS4uZDI2MTg4OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9wcm9jZXNzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJpcnFfdXNlci5oIgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgogI2luY2x1ZGUgImxvbmdqbXAuaCIKKyNpbmNsdWRlICJza2FzX3B0cmFjZS5oIgogCiAjZGVmaW5lIEFSQklUUkFSWV9BRERSIC0xCiAjZGVmaW5lIEZBSUxVUkVfUElEICAgIC0xCkBAIC0xMDAsNiArMTAxLDIxIEBACiAJCQogfQogCisvKiBUaGlzIGlzIGhlcmUgdW5pcXVlbHkgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIHVzZXJzcGFjZSBlcnJubywgaS5lLiB0aGUgb25lCisgKiB1c2VkIGJ5IHB0cmFjZSBpbiBjYXNlIG9mIGVycm9yLgorICovCisKK2xvbmcgb3NfcHRyYWNlX2xkdChsb25nIHBpZCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IHB0cmFjZShQVFJBQ0VfTERULCBwaWQsIGFkZHIsIGRhdGEpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiAtZXJybm87CisJcmV0dXJuIHJldDsKK30KKwogLyogS2lsbCBvZmYgYSBwdHJhY2VkIGNoaWxkIGJ5IGFsbCBtZWFucyBhdmFpbGFibGUuICBraWxsIGl0IG5vcm1hbGx5IGZpcnN0LAogICogdGhlbiBQVFJBQ0VfS0lMTCBpdCwgdGhlbiBQVFJBQ0VfQ09OVCBpdCBpbiBjYXNlIGl0J3MgaW4gYSBydW4gc3RhdGUgZnJvbQogICogd2hpY2ggaXQgY2FuJ3QgZXhpdCBkaXJlY3RseS4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvbGR0LmMgYi9hcmNoL3VtL3N5cy1pMzg2L2xkdC5jCmluZGV4IDFmYTA5YTcuLmZlMDg3N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvbGR0LmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9sZHQuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCSAqIFNvIHdlIG5lZWQgdG8gc3dpdGNoIGNoaWxkJ3MgbW0gaW50byBvdXIgdXNlcnNwYWNlLCB0aGVuCiAJCSAqIGxhdGVyIHN3aXRjaCBiYWNrLgogCQkgKgotCQkgKiBOb3RlOiBJJ20gdW5zaHVyZTogc2hvdWxkIGludGVycnVwdHMgYmUgZGlzYWJsZWQgaGVyZT8KKwkJICogTm90ZTogSSdtIHVuc3VyZTogc2hvdWxkIGludGVycnVwdHMgYmUgZGlzYWJsZWQgaGVyZT8KIAkJICovCiAJCWlmKCFjdXJyZW50LT5hY3RpdmVfbW0gfHwgY3VycmVudC0+YWN0aXZlX21tID09ICZpbml0X21tIHx8CiAJCSAgIG1tX2lkcCAhPSAmY3VycmVudC0+YWN0aXZlX21tLT5jb250ZXh0LnNrYXMuaWQpCkBAIC0xMjksOSArMTI5LDcgQEAKIAkJCXBpZCA9IHVzZXJzcGFjZV9waWRbY3B1XTsKIAkJfQogCi0JCXJlcyA9IHB0cmFjZShQVFJBQ0VfTERULCBwaWQsIDAsICh1bnNpZ25lZCBsb25nKSAmbGR0X29wKTsKLQkJaWYocmVzKQotCQkJcmVzID0gZXJybm87CisJCXJlcyA9IG9zX3B0cmFjZV9sZHQocGlkLCAwLCAodW5zaWduZWQgbG9uZykgJmxkdF9vcCk7CiAKIAkJaWYocHJvY19tbSkKIAkJCXB1dF9jcHUoKTsKQEAgLTE4MSw4ICsxNzksNyBAQAogCSAqLwogCiAJY3B1ID0gZ2V0X2NwdSgpOwotCXJlcyA9IHB0cmFjZShQVFJBQ0VfTERULCB1c2Vyc3BhY2VfcGlkW2NwdV0sIDAsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcpICZwdHJhY2VfbGR0KTsKKwlyZXMgPSBvc19wdHJhY2VfbGR0KHVzZXJzcGFjZV9waWRbY3B1XSwgMCwgKHVuc2lnbmVkIGxvbmcpICZwdHJhY2VfbGR0KTsKIAlwdXRfY3B1KCk7CiAJaWYocmVzIDwgMCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvdjg1MC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGViOTA5OTMuLjU3MjE4YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMCwxMSArMzAsMTQgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAordm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCiBleHRlcm4gdm9pZCByZXRfZnJvbV9mb3JrICh2b2lkKTsKIAogCiAvKiBUaGUgaWRsZSBsb29wLiAgKi8KLXZvaWQgZGVmYXVsdF9pZGxlICh2b2lkKQorc3RhdGljIHZvaWQgZGVmYXVsdF9pZGxlICh2b2lkKQogewogCXdoaWxlICghIG5lZWRfcmVzY2hlZCAoKSkKIAkJYXNtICgiaGFsdDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3AiIDo6OiAiY2MiKTsKZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvdjg1MC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA1YmUwNWY0Li41YjJmZmNjIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02NCw2ICs2NCwxMCBAQAogCQlfX19zdGFydF9fX2tzeW10YWJfZ3BsID0gLjsJCQkJICAgICAgXAogCQkJKihfX2tzeW10YWJfZ3BsKQkJCQkgICAgICBcCiAJCV9fX3N0b3BfX19rc3ltdGFiX2dwbCA9IC47CQkJCSAgICAgIFwKKwkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZSBzeW1ib2xzICovCQkgICAgICBcCisJCV9fX3N0YXJ0X19fa3N5bXRhYl9ncGxfZnV0dXJlID0gLjsJCQkgICAgICBcCisJCQkqKF9fa3N5bXRhYl9ncGxfZnV0dXJlKQkJCQkgICAgICBcCisJCV9fX3N0b3BfX19rc3ltdGFiX2dwbF9mdXR1cmUgPSAuOwkJCSAgICAgIFwKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogc3RyaW5ncyAqLwkJCSAgICAgIFwKIAkJCSooX19rc3ltdGFiX3N0cmluZ3MpCQkJCSAgICAgIFwKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHN5bWJvbHMgKi8JCSAgICAgIFwKQEAgLTc0LDYgKzc4LDEwIEBACiAJCV9fX3N0YXJ0X19fa2NyY3RhYl9ncGwgPSAuOwkJCQkgICAgICBcCiAJCQkqKF9fa2NyY3RhYl9ncGwpCQkJCSAgICAgIFwKIAkJX19fc3RvcF9fX2tjcmN0YWJfZ3BsID0gLjsJCQkJICAgICAgXAorCQkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtZnV0dXJlIHN5bWJvbHMgKi8JCSAgICAgIFwKKwkJX19fc3RhcnRfX19rY3JjdGFiX2dwbF9mdXR1cmUgPSAuOwkJCSAgICAgIFwKKwkJCSooX19rY3JjdGFiX2dwbF9mdXR1cmUpCQkJCSAgICAgIFwKKwkJX19fc3RvcF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZSA9IC47CQkJICAgICAgXAogCQkvKiBCdWlsdC1pbiBtb2R1bGUgcGFyYW1ldGVycyAqLwkJCSAgICAgIFwKIAkJLiA9IEFMSUdOICg0KSA7CQkJCQkJICAgICAgXAogCQlfX19zdGFydF9fX3BhcmFtID0gLjsJCQkJCSAgICAgIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L0tjb25maWcgYi9hcmNoL3g4Nl82NC9LY29uZmlnCmluZGV4IDJmOWRlY2EuLmUxOGViNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L0tjb25maWcKKysrIGIvYXJjaC94ODZfNjQvS2NvbmZpZwpAQCAtMzU0LDIxICszNTQsNiBAQAogCSAgYXMgaXQgaXMgb2ZmLWNoaXAuICBZb3UgY2FuIGZpbmQgdGhlIEhQRVQgc3BlYyBhdAogCSAgPGh0dHA6Ly93d3cuaW50ZWwuY29tL2hhcmR3YXJlZGVzaWduL2hwZXRzcGVjLmh0bT4uCiAKLWNvbmZpZyBYODZfUE1fVElNRVIKLQlib29sICJQTSB0aW1lciIgaWYgRU1CRURERUQKLQlkZXBlbmRzIG9uIEFDUEkKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBTdXBwb3J0IHRoZSBBQ1BJIFBNIHRpbWVyIGZvciB0aW1lIGtlZXBpbmcuIFRoaXMgaXMgc2xvdywKLQkgIGJ1dCBpcyB1c2VmdWwgb24gc29tZSBjaGlwc2V0cyB3aXRob3V0IEhQRVQgb24gc3lzdGVtcyB3aXRoIG1vcmUKLQkgIHRoYW4gb25lIENQVS4gT24gYSBzaW5nbGUgcHJvY2Vzc29yIG9yIHNpbmdsZSBzb2NrZXQgbXVsdGkgY29yZQotCSAgc3lzdGVtIGl0IGlzIG5vcm1hbGx5IG5vdCByZXF1aXJlZC4KLQkgIFdoZW4gdGhlIFBNIHRpbWVyIGlzIGFjdGl2ZSA2NGJpdCB2c3lzY2FsbHMgYXJlIGRpc2FibGVkCi0JICBhbmQgc2hvdWxkIG5vdCBiZSBlbmFibGVkICgvcHJvYy9zeXMva2VybmVsL3ZzeXNjYWxsNjQgc2hvdWxkCi0JICBub3QgYmUgY2hhbmdlZCkuCi0JICBUaGUga2VybmVsIHNlbGVjdHMgdGhlIFBNIHRpbWVyIG9ubHkgYXMgYSBsYXN0IHJlc29ydCwgc28gaXQgaXMKLQkgIHVzZWZ1bCB0byBlbmFibGUganVzdCBpbiBjYXNlLgotCiBjb25maWcgSFBFVF9FTVVMQVRFX1JUQwogCWJvb2wgIlByb3ZpZGUgUlRDIGludGVycnVwdCIKIAlkZXBlbmRzIG9uIEhQRVRfVElNRVIgJiYgUlRDPXkKQEAgLTU5Miw2ICs1NzcsNyBAQAogCiBjb25maWcgS1BST0JFUwogCWJvb2wgIktwcm9iZXMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTU9EVUxFUwogCWhlbHAKIAkgIEtwcm9iZXMgYWxsb3dzIHlvdSB0byB0cmFwIGF0IGFsbW9zdCBhbnkga2VybmVsIGFkZHJlc3MgYW5kCiAJICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uICByZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvY3J5cHRvL2Flcy5jIGIvYXJjaC94ODZfNjQvY3J5cHRvL2Flcy5jCmluZGV4IGZiMWI5NjEuLjZmNzdlNzcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9jcnlwdG8vYWVzLmMKKysrIGIvYXJjaC94ODZfNjQvY3J5cHRvL2Flcy5jCkBAIC03NywxMiArNzcsMTEgQEAKIHN0cnVjdCBhZXNfY3R4CiB7CiAJdTMyIGtleV9sZW5ndGg7Ci0JdTMyIEVbNjBdOwotCXUzMiBEWzYwXTsKKwl1MzIgYnVmWzEyMF07CiB9OwogCi0jZGVmaW5lIEVfS0VZIGN0eC0+RQotI2RlZmluZSBEX0tFWSBjdHgtPkQKKyNkZWZpbmUgRV9LRVkgKCZjdHgtPmJ1ZlswXSkKKyNkZWZpbmUgRF9LRVkgKCZjdHgtPmJ1Zls2MF0pCiAKIHN0YXRpYyB1OCBwb3dfdGFiWzI1Nl0gX19pbml0ZGF0YTsKIHN0YXRpYyB1OCBsb2dfdGFiWzI1Nl0gX19pbml0ZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2RlZmNvbmZpZyBiL2FyY2gveDg2XzY0L2RlZmNvbmZpZwppbmRleCBiMzM3MTM2Li5jZTRkZTYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9kZWZjb25maWcKKysrIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjMwotIyBNb24gRmViIDEzIDIyOjMxOjI0IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzMtZ2l0OQorIyBTYXQgRmViIDE4IDAwOjI3OjAzIDIwMDYKICMKIENPTkZJR19YODZfNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTEzMTcsNyArMTMxNyw3IEBACiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC94ODZfNjQvaWEzMi9zeXNfaWEzMi5jCmluZGV4IDJiYzU1YWYuLjJiMmQwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL3g4Nl82NC9pYTMyL3N5c19pYTMyLmMKQEAgLTQzMCwyNCArNDMwLDEyIEBACiAJcmV0dXJuIGVycjsgCiB9CiAKLWV4dGVybiBpbnQgZG9fc2V0aXRpbWVyKGludCB3aGljaCwgc3RydWN0IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOworZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybV9zZXRpdGltZXIodW5zaWduZWQgaW50IHNlY29uZHMpOwogCiBhc21saW5rYWdlIGxvbmcKIHN5czMyX2FsYXJtKHVuc2lnbmVkIGludCBzZWNvbmRzKQogewotCXN0cnVjdCBpdGltZXJ2YWwgaXRfbmV3LCBpdF9vbGQ7Ci0JdW5zaWduZWQgaW50IG9sZGFsYXJtOwotCi0JaXRfbmV3Lml0X2ludGVydmFsLnR2X3NlYyA9IGl0X25ldy5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKLQlpdF9uZXcuaXRfdmFsdWUudHZfc2VjID0gc2Vjb25kczsKLQlpdF9uZXcuaXRfdmFsdWUudHZfdXNlYyA9IDA7Ci0JZG9fc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmaXRfbmV3LCAmaXRfb2xkKTsKLQlvbGRhbGFybSA9IGl0X29sZC5pdF92YWx1ZS50dl9zZWM7Ci0JLyogZWhoaC4uIFdlIGNhbid0IHJldHVybiAwIGlmIHdlIGhhdmUgYW4gYWxhcm0gcGVuZGluZy4uICovCi0JLyogQW5kIHdlJ2QgYmV0dGVyIHJldHVybiB0b28gbXVjaCB0aGFuIHRvbyBsaXR0bGUgYW55d2F5ICovCi0JaWYgKGl0X29sZC5pdF92YWx1ZS50dl91c2VjKQotCQlvbGRhbGFybSsrOwotCXJldHVybiBvbGRhbGFybTsKKwlyZXR1cm4gYWxhcm1fc2V0aXRpbWVyKHNlY29uZHMpOwogfQogCiAvKiBUcmFuc2xhdGlvbnMgZHVlIHRvIHRpbWVfdCBzaXplIGRpZmZlcmVuY2VzLiAgV2hpY2ggYWZmZWN0cyBhbGwKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCA3MmZlNjBjLi5hMDk4YTExIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL01ha2VmaWxlCkBAIC00Myw3ICs0Myw3IEBACiAKIGJvb3RmbGFnLXkJCQkrPSAuLi8uLi9pMzg2L2tlcm5lbC9ib290ZmxhZy5vCiBjcHVpZC0kKHN1YnN0IG0seSwkKENPTkZJR19YODZfQ1BVSUQpKSAgKz0gLi4vLi4vaTM4Ni9rZXJuZWwvY3B1aWQubwotdG9wb2xvZ3kteSAgICAgICAgICAgICAgICAgICAgICs9IC4uLy4uL2kzODYvbWFjaC1kZWZhdWx0L3RvcG9sb2d5Lm8KK3RvcG9sb2d5LXkgICAgICAgICAgICAgICAgICAgICArPSAuLi8uLi9pMzg2L2tlcm5lbC90b3BvbG9neS5vCiBtaWNyb2NvZGUtJChzdWJzdCBtLHksJChDT05GSUdfTUlDUk9DT0RFKSkgICs9IC4uLy4uL2kzODYva2VybmVsL21pY3JvY29kZS5vCiBpbnRlbF9jYWNoZWluZm8teQkJKz0gLi4vLi4vaTM4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5vCiBxdWlya3MteQkJCSs9IC4uLy4uL2kzODYva2VybmVsL3F1aXJrcy5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvYXBlcnR1cmUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCmluZGV4IGU0ZTJiN2QuLmEwZjk1NWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9hcGVydHVyZS5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJLyogR290IHRoZSBhcGVydHVyZSBmcm9tIHRoZSBBR1AgYnJpZGdlICovCiAJfSBlbHNlIGlmIChzd2lvdGxiICYmICF2YWxpZF9hZ3ApIHsKIAkJLyogRG8gbm90aGluZyAqLwotCX0gZWxzZSBpZiAoKCFub19pb21tdSAmJiBlbmRfcGZuID49IE1BWF9ETUEzMl9QRk4pIHx8CisJfSBlbHNlIGlmICgoIW5vX2lvbW11ICYmIGVuZF9wZm4gPiBNQVhfRE1BMzJfUEZOKSB8fAogCQkgICBmb3JjZV9pb21tdSB8fAogCQkgICB2YWxpZF9hZ3AgfHwKIAkJICAgZmFsbGJhY2tfYXBlcl9mb3JjZSkgeyAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCA2ZGZmYjQ5Li4xM2FmOTIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2Vhcmx5X3ByaW50ay5jCkBAIC0xNywxMSArMTcsOCBAQAogI2RlZmluZSBWR0FCQVNFCQkoKHZvaWQgX19pb21lbSAqKTB4ZmZmZmZmZmY4MDBiODAwMFVMKQogI2VuZGlmCiAKLSNkZWZpbmUgTUFYX1lQT1MJbWF4X3lwb3MKLSNkZWZpbmUgTUFYX1hQT1MJbWF4X3hwb3MKLQogc3RhdGljIGludCBtYXhfeXBvcyA9IDI1LCBtYXhfeHBvcyA9IDgwOwotc3RhdGljIGludCBjdXJyZW50X3lwb3MgPSAxLCBjdXJyZW50X3hwb3MgPSAwOyAKK3N0YXRpYyBpbnQgY3VycmVudF95cG9zID0gMjUsIGN1cnJlbnRfeHBvcyA9IDA7CiAKIHN0YXRpYyB2b2lkIGVhcmx5X3ZnYV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIG4pCiB7CkBAIC0yOSwyNiArMjYsMjYgQEAKIAlpbnQgIGksIGssIGo7CiAKIAl3aGlsZSAoKGMgPSAqc3RyKyspICE9ICdcMCcgJiYgbi0tID4gMCkgewotCQlpZiAoY3VycmVudF95cG9zID49IE1BWF9ZUE9TKSB7CisJCWlmIChjdXJyZW50X3lwb3MgPj0gbWF4X3lwb3MpIHsKIAkJCS8qIHNjcm9sbCAxIGxpbmUgdXAgKi8KLQkJCWZvciAoayA9IDEsIGogPSAwOyBrIDwgTUFYX1lQT1M7IGsrKywgaisrKSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IE1BWF9YUE9TOyBpKyspIHsKLQkJCQkJd3JpdGV3KHJlYWR3KFZHQUJBU0UgKyAyKihNQVhfWFBPUyprICsgaSkpLAotCQkJCQkgICAgICAgVkdBQkFTRSArIDIqKE1BWF9YUE9TKmogKyBpKSk7CisJCQlmb3IgKGsgPSAxLCBqID0gMDsgayA8IG1heF95cG9zOyBrKyssIGorKykgeworCQkJCWZvciAoaSA9IDA7IGkgPCBtYXhfeHBvczsgaSsrKSB7CisJCQkJCXdyaXRldyhyZWFkdyhWR0FCQVNFKzIqKG1heF94cG9zKmsraSkpLAorCQkJCQkgICAgICAgVkdBQkFTRSArIDIqKG1heF94cG9zKmogKyBpKSk7CiAJCQkJfQogCQkJfQotCQkJZm9yIChpID0gMDsgaSA8IE1BWF9YUE9TOyBpKyspCi0JCQkJd3JpdGV3KDB4NzIwLCBWR0FCQVNFICsgMiooTUFYX1hQT1MqaiArIGkpKTsKLQkJCWN1cnJlbnRfeXBvcyA9IE1BWF9ZUE9TLTE7CisJCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3hwb3M7IGkrKykKKwkJCQl3cml0ZXcoMHg3MjAsIFZHQUJBU0UgKyAyKihtYXhfeHBvcypqICsgaSkpOworCQkJY3VycmVudF95cG9zID0gbWF4X3lwb3MtMTsKIAkJfQogCQlpZiAoYyA9PSAnXG4nKSB7CiAJCQljdXJyZW50X3hwb3MgPSAwOwogCQkJY3VycmVudF95cG9zKys7CiAJCX0gZWxzZSBpZiAoYyAhPSAnXHInKSAgewogCQkJd3JpdGV3KCgoMHg3IDw8IDgpIHwgKHVuc2lnbmVkIHNob3J0KSBjKSwKLQkJCSAgICAgICBWR0FCQVNFICsgMiooTUFYX1hQT1MqY3VycmVudF95cG9zICsKKwkJCSAgICAgICBWR0FCQVNFICsgMioobWF4X3hwb3MqY3VycmVudF95cG9zICsKIAkJCQkJCWN1cnJlbnRfeHBvcysrKSk7Ci0JCQlpZiAoY3VycmVudF94cG9zID49IE1BWF9YUE9TKSB7CisJCQlpZiAoY3VycmVudF94cG9zID49IG1heF94cG9zKSB7CiAJCQkJY3VycmVudF94cG9zID0gMDsKIAkJCQljdXJyZW50X3lwb3MrKzsKIAkJCX0KQEAgLTYzLDcgKzYwLDcgQEAKIAkuaW5kZXggPQktMSwKIH07CiAKLS8qIFNlcmlhbCBmdW5jdGlvbnMgbG9vc2VseSBiYXNlZCBvbiBhIHNpbWlsYXIgcGFja2FnZSBmcm9tIEtsYXVzIFAuIEdlcmxpY2hlciAqLyAKKy8qIFNlcmlhbCBmdW5jdGlvbnMgbG9vc2VseSBiYXNlZCBvbiBhIHNpbWlsYXIgcGFja2FnZSBmcm9tIEtsYXVzIFAuIEdlcmxpY2hlciAqLwogCiBzdGF0aWMgaW50IGVhcmx5X3NlcmlhbF9iYXNlID0gMHgzZjg7ICAvKiB0dHlTMCAqLwogCkBAIC04MywzMCArODAsMzAgQEAKICNkZWZpbmUgRExMICAgICAgICAgICAgIDAgICAgICAgLyogIERpdmlzb3IgTGF0Y2ggTG93ICAgICAgICAgKi8KICNkZWZpbmUgRExIICAgICAgICAgICAgIDEgICAgICAgLyogIERpdmlzb3IgbGF0Y2ggSGlnaCAgICAgICAgKi8KIAotc3RhdGljIGludCBlYXJseV9zZXJpYWxfcHV0Yyh1bnNpZ25lZCBjaGFyIGNoKSAKLXsgCi0JdW5zaWduZWQgdGltZW91dCA9IDB4ZmZmZjsgCi0Jd2hpbGUgKChpbmIoZWFybHlfc2VyaWFsX2Jhc2UgKyBMU1IpICYgWE1UUkRZKSA9PSAwICYmIC0tdGltZW91dCkgCitzdGF0aWMgaW50IGVhcmx5X3NlcmlhbF9wdXRjKHVuc2lnbmVkIGNoYXIgY2gpCit7CisJdW5zaWduZWQgdGltZW91dCA9IDB4ZmZmZjsKKwl3aGlsZSAoKGluYihlYXJseV9zZXJpYWxfYmFzZSArIExTUikgJiBYTVRSRFkpID09IDAgJiYgLS10aW1lb3V0KQogCQljcHVfcmVsYXgoKTsKIAlvdXRiKGNoLCBlYXJseV9zZXJpYWxfYmFzZSArIFRYUik7CiAJcmV0dXJuIHRpbWVvdXQgPyAwIDogLTE7Ci19IAorfQogCiBzdGF0aWMgdm9pZCBlYXJseV9zZXJpYWxfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgbikKIHsKLQl3aGlsZSAoKnMgJiYgbi0tID4gMCkgeyAKLQkJZWFybHlfc2VyaWFsX3B1dGMoKnMpOyAKLQkJaWYgKCpzID09ICdcbicpIAotCQkJZWFybHlfc2VyaWFsX3B1dGMoJ1xyJyk7IAotCQlzKys7IAotCX0gCi19IAorCXdoaWxlICgqcyAmJiBuLS0gPiAwKSB7CisJCWVhcmx5X3NlcmlhbF9wdXRjKCpzKTsKKwkJaWYgKCpzID09ICdcbicpCisJCQllYXJseV9zZXJpYWxfcHV0YygnXHInKTsKKwkJcysrOworCX0KK30KIAogI2RlZmluZSBERUZBVUxUX0JBVUQgOTYwMAogCiBzdGF0aWMgX19pbml0IHZvaWQgZWFybHlfc2VyaWFsX2luaXQoY2hhciAqcykKIHsKLQl1bnNpZ25lZCBjaGFyIGM7IAorCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBkaXZpc29yOwogCXVuc2lnbmVkIGJhdWQgPSBERUZBVUxUX0JBVUQ7CiAJY2hhciAqZTsKQEAgLTExNSw3ICsxMTIsNyBAQAogCQkrK3M7CiAKIAlpZiAoKnMpIHsKLQkJdW5zaWduZWQgcG9ydDsgCisJCXVuc2lnbmVkIHBvcnQ7CiAJCWlmICghc3RybmNtcChzLCIweCIsMikpIHsKIAkJCWVhcmx5X3NlcmlhbF9iYXNlID0gc2ltcGxlX3N0cnRvdWwocywgJmUsIDE2KTsKIAkJfSBlbHNlIHsKQEAgLTEzOSwxNiArMTM2LDE2IEBACiAJb3V0YigweDMsIGVhcmx5X3NlcmlhbF9iYXNlICsgTUNSKTsJLyogRFRSICsgUlRTICovCiAKIAlpZiAoKnMpIHsKLQkJYmF1ZCA9IHNpbXBsZV9zdHJ0b3VsKHMsICZlLCAwKTsgCi0JCWlmIChiYXVkID09IDAgfHwgcyA9PSBlKSAKKwkJYmF1ZCA9IHNpbXBsZV9zdHJ0b3VsKHMsICZlLCAwKTsKKwkJaWYgKGJhdWQgPT0gMCB8fCBzID09IGUpCiAJCQliYXVkID0gREVGQVVMVF9CQVVEOwotCX0gCi0JCi0JZGl2aXNvciA9IDExNTIwMCAvIGJhdWQ7IAotCWMgPSBpbmIoZWFybHlfc2VyaWFsX2Jhc2UgKyBMQ1IpOyAKLQlvdXRiKGMgfCBETEFCLCBlYXJseV9zZXJpYWxfYmFzZSArIExDUik7IAotCW91dGIoZGl2aXNvciAmIDB4ZmYsIGVhcmx5X3NlcmlhbF9iYXNlICsgRExMKTsgCi0Jb3V0YigoZGl2aXNvciA+PiA4KSAmIDB4ZmYsIGVhcmx5X3NlcmlhbF9iYXNlICsgRExIKTsgCisJfQorCisJZGl2aXNvciA9IDExNTIwMCAvIGJhdWQ7CisJYyA9IGluYihlYXJseV9zZXJpYWxfYmFzZSArIExDUik7CisJb3V0YihjIHwgRExBQiwgZWFybHlfc2VyaWFsX2Jhc2UgKyBMQ1IpOworCW91dGIoZGl2aXNvciAmIDB4ZmYsIGVhcmx5X3NlcmlhbF9iYXNlICsgRExMKTsKKwlvdXRiKChkaXZpc29yID4+IDgpICYgMHhmZiwgZWFybHlfc2VyaWFsX2Jhc2UgKyBETEgpOwogCW91dGIoYyAmIH5ETEFCLCBlYXJseV9zZXJpYWxfYmFzZSArIExDUik7CiB9CiAKQEAgLTIwNSw2NyArMjAyLDY4IEBACiBzdGF0aWMgaW50IGVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQgPSAwOwogCiB2b2lkIGVhcmx5X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKLXsgCi0JY2hhciBidWZbNTEyXTsgCi0JaW50IG47IAoreworCWNoYXIgYnVmWzUxMl07CisJaW50IG47CiAJdmFfbGlzdCBhcDsKIAotCXZhX3N0YXJ0KGFwLGZtdCk7IAorCXZhX3N0YXJ0KGFwLGZtdCk7CiAJbiA9IHZzY25wcmludGYoYnVmLDUxMixmbXQsYXApOwogCWVhcmx5X2NvbnNvbGUtPndyaXRlKGVhcmx5X2NvbnNvbGUsYnVmLG4pOwotCXZhX2VuZChhcCk7IAotfSAKKwl2YV9lbmQoYXApOworfQogCiBzdGF0aWMgaW50IF9faW5pdGRhdGEga2VlcF9lYXJseTsKIAotaW50IF9faW5pdCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqb3B0KSAKLXsgIAoraW50IF9faW5pdCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqb3B0KQorewogCWNoYXIgKnNwYWNlOwotCWNoYXIgYnVmWzI1Nl07IAorCWNoYXIgYnVmWzI1Nl07CiAKIAlpZiAoZWFybHlfY29uc29sZV9pbml0aWFsaXplZCkKIAkJcmV0dXJuIC0xOwogCi0Jc3RybGNweShidWYsb3B0LHNpemVvZihidWYpKTsgCi0Jc3BhY2UgPSBzdHJjaHIoYnVmLCAnICcpOyAKKwlzdHJsY3B5KGJ1ZixvcHQsc2l6ZW9mKGJ1ZikpOworCXNwYWNlID0gc3RyY2hyKGJ1ZiwgJyAnKTsKIAlpZiAoc3BhY2UpCi0JCSpzcGFjZSA9IDA7IAorCQkqc3BhY2UgPSAwOwogCiAJaWYgKHN0cnN0cihidWYsImtlZXAiKSkKLQkJa2VlcF9lYXJseSA9IDE7IAorCQlrZWVwX2Vhcmx5ID0gMTsKIAotCWlmICghc3RybmNtcChidWYsICJzZXJpYWwiLCA2KSkgeyAKKwlpZiAoIXN0cm5jbXAoYnVmLCAic2VyaWFsIiwgNikpIHsKIAkJZWFybHlfc2VyaWFsX2luaXQoYnVmICsgNik7CiAJCWVhcmx5X2NvbnNvbGUgPSAmZWFybHlfc2VyaWFsX2NvbnNvbGU7Ci0JfSBlbHNlIGlmICghc3RybmNtcChidWYsICJ0dHlTIiwgNCkpIHsgCisJfSBlbHNlIGlmICghc3RybmNtcChidWYsICJ0dHlTIiwgNCkpIHsKIAkJZWFybHlfc2VyaWFsX2luaXQoYnVmKTsKLQkJZWFybHlfY29uc29sZSA9ICZlYXJseV9zZXJpYWxfY29uc29sZTsJCQorCQllYXJseV9jb25zb2xlID0gJmVhcmx5X3NlcmlhbF9jb25zb2xlOwogCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAidmdhIiwgMykKIAkgICAgICAgICAgICYmIFNDUkVFTl9JTkZPLm9yaWdfdmlkZW9faXNWR0EgPT0gMSkgewogCQltYXhfeHBvcyA9IFNDUkVFTl9JTkZPLm9yaWdfdmlkZW9fY29sczsKIAkJbWF4X3lwb3MgPSBTQ1JFRU5fSU5GTy5vcmlnX3ZpZGVvX2xpbmVzOwotCQllYXJseV9jb25zb2xlID0gJmVhcmx5X3ZnYV9jb25zb2xlOyAKKwkJY3VycmVudF95cG9zID0gU0NSRUVOX0lORk8ub3JpZ195OworCQllYXJseV9jb25zb2xlID0gJmVhcmx5X3ZnYV9jb25zb2xlOwogIAl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInNpbW5vdyIsIDYpKSB7CiAgCQlzaW1ub3dfaW5pdChidWYgKyA2KTsKICAJCWVhcmx5X2NvbnNvbGUgPSAmc2ltbm93X2NvbnNvbGU7CiAgCQlrZWVwX2Vhcmx5ID0gMTsKIAl9CiAJZWFybHlfY29uc29sZV9pbml0aWFsaXplZCA9IDE7Ci0JcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsgICAgICAgCisJcmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCBfX2luaXQgZGlzYWJsZV9lYXJseV9wcmludGsodm9pZCkKLXsgCit7CiAJaWYgKCFlYXJseV9jb25zb2xlX2luaXRpYWxpemVkIHx8ICFlYXJseV9jb25zb2xlKQogCQlyZXR1cm47CiAJaWYgKCFrZWVwX2Vhcmx5KSB7CiAJCXByaW50aygiZGlzYWJsaW5nIGVhcmx5IGNvbnNvbGVcbiIpOwogCQl1bnJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7CiAJCWVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQgPSAwOwotCX0gZWxzZSB7IAorCX0gZWxzZSB7CiAJCXByaW50aygia2VlcGluZyBlYXJseSBjb25zb2xlXG4iKTsKIAl9Ci19IAorfQogCiBfX3NldHVwKCJlYXJseXByaW50az0iLCBzZXR1cF9lYXJseV9wcmludGspOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9pb19hcGljLmMKaW5kZXggMjU4NWMxZC4uZmZlZDQ2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW9fYXBpYy5jCkBAIC01MCw2ICs1MCw4IEBACiAKIGludCBkaXNhYmxlX3RpbWVyX3Bpbl8xIF9faW5pdGRhdGE7CiAKK2ludCB0aW1lcl9vdmVyXzgyNTQgX19pbml0ZGF0YSA9IDE7CisKIC8qIFdoZXJlIGlmIGFueXdoZXJlIGlzIHRoZSBpODI1OSBjb25uZWN0IGluIGV4dGVybmFsIGludCBtb2RlICovCiBzdGF0aWMgc3RydWN0IHsgaW50IHBpbiwgYXBpYzsgfSBpb2FwaWNfaTgyNTkgPSB7IC0xLCAtMSB9OwogCkBAIC0yNTEsNiArMjUzLDIwIEBACiBfX3NldHVwKCJub2FwaWMiLCBkaXNhYmxlX2lvYXBpY19zZXR1cCk7CiBfX3NldHVwKCJhcGljIiwgZW5hYmxlX2lvYXBpY19zZXR1cCk7CiAKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Rpc2FibGVfODI1NF90aW1lcihjaGFyICpzKQoreworCXRpbWVyX292ZXJfODI1NCA9IC0xOworCXJldHVybiAxOworfQorc3RhdGljIGludCBfX2luaXQgc2V0dXBfZW5hYmxlXzgyNTRfdGltZXIoY2hhciAqcykKK3sKKwl0aW1lcl9vdmVyXzgyNTQgPSAyOworCXJldHVybiAxOworfQorCitfX3NldHVwKCJkaXNhYmxlXzgyNTRfdGltZXIiLCBzZXR1cF9kaXNhYmxlXzgyNTRfdGltZXIpOworX19zZXR1cCgiZW5hYmxlXzgyNTRfdGltZXIiLCBzZXR1cF9lbmFibGVfODI1NF90aW1lcik7CisKICNpbmNsdWRlIDxhc20vcGNpLWRpcmVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTMwOSwyNyArMzI1LDIwIEBACiAjZW5kaWYKIAkJCQkJLyogUkVELVBFTiBza2lwIHRoZW0gb24gbXB0YWJsZXMgdG9vPyAqLwogCQkJCQlyZXR1cm47CisKKwkJCQkvKiBUaGlzIHNob3VsZCBiZSBhY3R1YWxseSBkZWZhdWx0LCBidXQKKwkJCQkgICBmb3IgMi42LjE2IGxldCdzIGRvIGl0IGZvciBBVEkgb25seSB3aGVyZQorCQkJCSAgIGl0J3MgcmVhbGx5IG5lZWRlZC4gKi8KIAkJCQljYXNlIFBDSV9WRU5ET1JfSURfQVRJOgotCQkJCQlpZiAoYXBpY19ydW5zX21haW5fdGltZXIgIT0gMCkKLQkJCQkJCWJyZWFrOwotI2lmZGVmIENPTkZJR19BQ1BJCi0JCQkJCS8qIERvbid0IGRvIHRoaXMgZm9yIGxhcHRvcHMgcmlnaHQKLQkJCQkJICAgcmlnaHQgbm93IGJlY2F1c2UgdGhlaXIgdGltZXIKLQkJCQkJICAgZG9lc24ndCBuZWNlc3NhcmlseSB0aWNrIGluIEMyLzMgKi8KLQkJCQkJaWYgKGFjcGlfZmFkdC5yZXZpc2lvbiA+PSAzICYmCi0JCQkoYWNwaV9mYWR0LnBsdmwyX2xhdCArIGFjcGlfZmFkdC5wbHZsM19sYXQpIDwgMTEwMCkgewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTwotIkFUSSBib2FyZCBkZXRlY3RlZCwgYnV0IHNlZW1zIHRvIGJlIGEgbGFwdG9wLiBUaW1lciBtaWdodCBiZSBzaGFrZXksIHNvcnJ5XG4iKTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0jZW5kaWYJCQkJCQorCQkJCQlpZiAodGltZXJfb3Zlcl84MjU0ID09IDEpIHsJCisJCQkJCQl0aW1lcl9vdmVyXzgyNTQgPSAwOwkKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgIkFUSSBib2FyZCBkZXRlY3RlZC4gVXNpbmcgQVBJQy9QTSB0aW1lci5cbiIpOwotCQkJCQlhcGljX3J1bnNfbWFpbl90aW1lciA9IDE7Ci0JCQkJCW5vaHBldCA9IDE7CisJCSJBVEkgYm9hcmQgZGV0ZWN0ZWQuIERpc2FibGluZyB0aW1lciByb3V0aW5nIG92ZXIgODI1NC5cbiIpOworCQkJCQl9CQogCQkJCQlyZXR1cm47CiAJCQkJfSAKIAorCiAJCQkJLyogTm8gbXVsdGktZnVuY3Rpb24gZGV2aWNlPyAqLwogCQkJCXR5cGUgPSByZWFkX3BjaV9jb25maWdfYnl0ZShudW0sc2xvdCxmdW5jLAogCQkJCQkJCSAgICBQQ0lfSEVBREVSX1RZUEUpOwpAQCAtMTc3Myw2ICsxNzgyLDggQEAKICAqIGEgd2lkZSByYW5nZSBvZiBib2FyZHMgYW5kIEJJT1MgYnVncy4gIEZvcnR1bmF0ZWx5IG9ubHkgdGhlIHRpbWVyIElSUQogICogaXMgc28gc2NyZXd5LiAgVGhhbmtzIHRvIEJyaWFuIFBlcmtpbnMgZm9yIHRlc3RpbmcvaGFja2luZyB0aGlzIGJlYXN0CiAgKiBmYW5hdGljYWxseSBvbiBoaXMgdHJ1bHkgYnVnZ3kgYm9hcmQuCisgKgorICogRklYTUU6IHJlYWxseSBuZWVkIHRvIHJldmFtcCB0aGlzIGZvciBtb2Rlcm4gcGxhdGZvcm1zIG9ubHkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja190aW1lcih2b2lkKQogewpAQCAtMTc5NSw3ICsxODA2LDggQEAKIAkgKi8KIAlhcGljX3dyaXRlKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwgQVBJQ19ETV9FWFRJTlQpOwogCWluaXRfODI1OUEoMSk7Ci0JZW5hYmxlXzgyNTlBX2lycSgwKTsKKwlpZiAodGltZXJfb3Zlcl84MjU0ID4gMCkKKwkJZW5hYmxlXzgyNTlBX2lycSgwKTsKIAogCXBpbjEgID0gZmluZF9pc2FfaXJxX3BpbigwLCBtcF9JTlQpOwogCWFwaWMxID0gZmluZF9pc2FfaXJxX2FwaWMoMCwgbXBfSU5UKTsKQEAgLTE4NTAsNyArMTg2Miw3IEBACiAJfQogCXByaW50aygiIGZhaWxlZC5cbiIpOwogCi0JaWYgKG5taV93YXRjaGRvZykgeworCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAidGltZXIgZG9lc24ndCB3b3JrIHRocm91Z2ggdGhlIElPLUFQSUMgLSBkaXNhYmxpbmcgTk1JIFdhdGNoZG9nIVxuIik7CiAJCW5taV93YXRjaGRvZyA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2lycS5jIGIvYXJjaC94ODZfNjQva2VybmVsL2lycS5jCmluZGV4IDMwZDJhMWUuLmQ4YmQwYjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaXJxLmMKQEAgLTM4LDkgKzM4LDggQEAKIAogCWlmIChpID09IDApIHsKIAkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKLQkJZm9yIChqPTA7IGo8TlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiAJfQogCkBAIC01MywxMCArNTIsOCBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQotCQlmb3IgKGo9MDsgajxOUl9DUFVTOyBqKyspCi0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwKLQkJCQlrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uaGFuZGxlci0+dHlwZW5hbWUpOwogCkBAIC02OCwxNSArNjUsMTMgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7CiAJCXNlcV9wcmludGYocCwgIk5NSTogIik7Ci0JCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCi0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPl9fbm1pX2NvdW50KTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5fX25taV9jb3VudCk7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCQlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBjcHVfcGRhKGopLT5hcGljX3RpbWVyX2lycXMpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGNwdV9wZGEoaiktPmFwaWNfdGltZXJfaXJxcyk7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIkVSUjogJTEwdVxuIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDhiODY2YTguLjE0ZjBjZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2twcm9iZXMuYwpAQCAtMjIyLDkgKzIyMiw5IEBACiAKIHZvaWQgX19rcHJvYmVzIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCWRvd24oJmtwcm9iZV9tdXRleCk7CisJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKIAlmcmVlX2luc25fc2xvdChwLT5haW5zbi5pbnNuKTsKLQl1cCgma3Byb2JlX211dGV4KTsKKwltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggODlmYWI1MWUuLjI1YWM4YTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJCSJcdG1vdmwgJTAsJSVzc1xuIgogCQkiXHRtb3ZsICUwLCUlZnNcbiIKIAkJIlx0bW92bCAlMCwlJWdzXG4iCi0JCTogOiAiYSIgKF9fS0VSTkVMX0RTKQorCQk6IDogImEiIChfX0tFUk5FTF9EUykgOiAibWVtb3J5IgogCQkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKaW5kZXggYjhiOTUyOS4uMDQyODJlZiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYwpAQCAtMTM5LDggKzEzOSw3IEBACiAKIHN0YXRpYyBpbnQgbWNlX2F2YWlsYWJsZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JcmV0dXJuIHRlc3RfYml0KFg4Nl9GRUFUVVJFX01DRSwgJmMtPng4Nl9jYXBhYmlsaXR5KSAmJgotCSAgICAgICB0ZXN0X2JpdChYODZfRkVBVFVSRV9NQ0EsICZjLT54ODZfY2FwYWJpbGl0eSk7CisJcmV0dXJuIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTUNFKSAmJiBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01DQSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtY2VfZ2V0X3JpcChzdHJ1Y3QgbWNlICptLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYwppbmRleCA1YmYxN2U0Li42NmMwMDllIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCkBAIC0xNjIsOSArMTYyLDcgQEAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJbWRlbGF5KCgxMCoxMDAwKS9ubWlfaHopOyAvLyB3YWl0IDEwIHRpY2tzCiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKSB7Ci0JCWlmICghY3B1X29ubGluZShjcHUpKQotCQkJY29udGludWU7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJaWYgKGNwdV9wZGEoY3B1KS0+X19ubWlfY291bnQgLSBjb3VudHNbY3B1XSA8PSA1KSB7CiAJCQllbmRmbGFnID0gMTsKIAkJCXByaW50aygiQ1BVIyVkOiBOTUkgYXBwZWFycyB0byBiZSBzdHVjayAoJWQtPiVkKSFcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jCmluZGV4IGRkMDcxOGQuLjBjM2YwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jCkBAIC0yMjgsMTEgKzIyOCw2IEBACiAJaW50IG1tdSA9IGhpZ2g7CiAJaWYgKGZvcmNlX2lvbW11KSAKIAkJbW11ID0gMTsgCi0JaWYgKG5vX2lvbW11KSB7IAotCQlpZiAoaGlnaCkgCi0JCQlwYW5pYygiUENJLURNQTogaGlnaCBhZGRyZXNzIGJ1dCBubyBJT01NVS5cbiIpOyAKLQkJbW11ID0gMDsgCi0JfSAJCiAJcmV0dXJuIG1tdTsgCiB9CiAKQEAgLTI0MSwxMSArMjM2LDYgQEAKIAl1NjQgbWFzayA9ICpkZXYtPmRtYV9tYXNrOwogCWludCBoaWdoID0gYWRkciArIHNpemUgPj0gbWFzazsKIAlpbnQgbW11ID0gaGlnaDsKLQlpZiAobm9faW9tbXUpIHsgCi0JCWlmIChoaWdoKSAKLQkJCXBhbmljKCJQQ0ktRE1BOiBoaWdoIGFkZHJlc3MgYnV0IG5vIElPTU1VLlxuIik7IAotCQltbXUgPSAwOyAKLQl9IAkKIAlyZXR1cm4gbW11OyAKIH0KIApAQCAtMzEwLDcgKzMwMCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgewogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnMgPSAmc2dbaV07Ci0JCWlmICghcy0+ZG1hX2xlbmd0aCkKKwkJaWYgKCFzLT5kbWFfbGVuZ3RoIHx8ICFzLT5sZW5ndGgpCiAJCQlicmVhazsKIAkJZG1hX3VubWFwX3NpbmdsZShkZXYsIHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLCBkaXIpOwogCX0KQEAgLTM2NCw2ICszNTQsNyBAQAogCQkKIAkJQlVHX09OKGkgPiBzdGFydCAmJiBzLT5vZmZzZXQpOwogCQlpZiAoaSA9PSBzdGFydCkgeworCQkJKnNvdXQgPSAqczsgCiAJCQlzb3V0LT5kbWFfYWRkcmVzcyA9IGlvbW11X2J1c19iYXNlOwogCQkJc291dC0+ZG1hX2FkZHJlc3MgKz0gaW9tbXVfcGFnZSpQQUdFX1NJWkUgKyBzLT5vZmZzZXQ7CiAJCQlzb3V0LT5kbWFfbGVuZ3RoID0gcy0+bGVuZ3RoOwpAQCAtMzkwLDYgKzM4MSw3IEBACiB7CiAJaWYgKCFuZWVkKSB7IAogCQlCVUdfT04oc3RvcGF0IC0gc3RhcnQgIT0gMSk7CisJCSpzb3V0ID0gc2dbc3RhcnRdOyAKIAkJc291dC0+ZG1hX2xlbmd0aCA9IHNnW3N0YXJ0XS5sZW5ndGg7IAogCQlyZXR1cm4gMDsKIAl9IApAQCAtNjMyLDE3ICs2MjQsMTMgQEAKIAkJKGFncF9jb3B5X2luZm8oYWdwX2JyaWRnZSwgJmluZm8pIDwgMCk7CiAjZW5kaWYJCiAKLQlpZiAoc3dpb3RsYikgeyAKLQkJbm9faW9tbXUgPSAxOworCWlmIChzd2lvdGxiKQogCQlyZXR1cm4gLTE7IAotCX0gCi0JCisKIAlpZiAobm9faW9tbXUgfHwKIAkgICAgKCFmb3JjZV9pb21tdSAmJiBlbmRfcGZuIDw9IE1BWF9ETUEzMl9QRk4pIHx8CiAJICAgICFpb21tdV9hcGVydHVyZSB8fAogCSAgICAobm9fYWdwICYmIGluaXRfazhfZ2F0dCgmaW5mbykgPCAwKSkgewotCQlub19pb21tdSA9IDE7Ci0JCW5vX2lvbW11X2luaXQoKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogRGlzYWJsaW5nIElPTU1VLlxuIik7CiAJCWlmIChlbmRfcGZuID4gTUFYX0RNQTMyX1BGTikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HIG1vcmUgdGhhbiA0R0Igb2YgbWVtb3J5ICIKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDIyYTA1ZGUuLjgwYThmMzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAgKiBXZSB1c2UgdGhpcyBpZiB3ZSBkb24ndCBoYXZlIGFueSBiZXR0ZXIKICAqIGlkbGUgcm91dGluZS4uCiAgKi8KLXZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCitzdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKIHsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKaW5kZXggOTQzNWFiNy4uZjIyN2QwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMKQEAgLTQyMyw2ICs0MjMsMTIgQEAKIAkJZWxzZSBpZighbWVtY21wKGZyb20sICJlbGZjb3JlaGRyPSIsIDExKSkKIAkJCWVsZmNvcmVoZHJfYWRkciA9IG1lbXBhcnNlKGZyb20rMTEsICZmcm9tKTsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJCWVsc2UgaWYgKCFtZW1jbXAoZnJvbSwgImFkZGl0aW9uYWxfY3B1cz0iLCAxNikpCisJCQlzZXR1cF9hZGRpdGlvbmFsX2NwdXMoZnJvbSsxNik7CisjZW5kaWYKKwogCW5leHRfY2hhcjoKIAkJYyA9ICooZnJvbSsrKTsKIAkJaWYgKCFjKQpAQCAtMTMzOCw4ICsxMzQ0LDcgQEAKIAl7IAogCQlpbnQgaTsgCiAJCWZvciAoIGkgPSAwIDsgaSA8IDMyKk5DQVBJTlRTIDsgaSsrICkKLQkJCWlmICggdGVzdF9iaXQoaSwgJmMtPng4Nl9jYXBhYmlsaXR5KSAmJgotCQkJICAgICB4ODZfY2FwX2ZsYWdzW2ldICE9IE5VTEwgKQorCQkJaWYgKGNwdV9oYXMoYywgaSkgJiYgeDg2X2NhcF9mbGFnc1tpXSAhPSBOVUxMKQogCQkJCXNlcV9wcmludGYobSwgIiAlcyIsIHg4Nl9jYXBfZmxhZ3NbaV0pOwogCX0KIAkJCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNTg3NmRmMS4uZTVmNWNlNzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2lnbmFsLmMKQEAgLTQ0Myw5ICs0NDMsNiBAQAogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQogCQlyZXR1cm4gMTsKIAotCWlmICh0cnlfdG9fZnJlZXplKCkpCi0JCWdvdG8gbm9fc2lnbmFsOwotCiAJaWYgKCFvbGRzZXQpCiAJCW9sZHNldCA9ICZjdXJyZW50LT5ibG9ja2VkOwogCkBAIC00NjMsNyArNDYwLDYgQEAKIAkJcmV0dXJuIGhhbmRsZV9zaWduYWwoc2lnbnIsICZpbmZvLCAma2EsIG9sZHNldCwgcmVncyk7CiAJfQogCi0gbm9fc2lnbmFsOgogCS8qIERpZCB3ZSBjb21lIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KIAlpZiAoKGxvbmcpcmVncy0+b3JpZ19yYXggPj0gMCkgewogCQkvKiBSZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbCAtIG5vIGhhbmRsZXJzIHByZXNlbnQgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDY3ZTRlMjguLjY2ZTk4NjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtMTE1Miw4ICsxMTUyLDYgQEAKIAlzZXR1cF9pb2FwaWNfZGVzdCgpOwogI2VuZGlmCiAKLQl0aW1lX2luaXRfZ3RvZCgpOwotCiAJY2hlY2tfbm1pX3dhdGNoZG9nKCk7CiB9CiAKQEAgLTEyNDQsNyArMTI0Miw3IEBACiAgCXByaW50ayhLRVJOX0VSUiAiQ1BVICV1IGRpZG4ndCBkaWUuLi5cbiIsIGNwdSk7CiB9CiAKLXN0YXRpYyBfX2luaXQgaW50IHNldHVwX2FkZGl0aW9uYWxfY3B1cyhjaGFyICpzKQorX19pbml0IGludCBzZXR1cF9hZGRpdGlvbmFsX2NwdXMoY2hhciAqcykKIHsKIAlyZXR1cm4gZ2V0X29wdGlvbigmcywgJmFkZGl0aW9uYWxfY3B1cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYwppbmRleCA2Nzg0MWQxLi5lZTVjZTNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKQEAgLTQ4LDYgKzQ4LDggQEAKIGV4dGVybiB2b2lkIGk4MjU0X3RpbWVyX3Jlc3VtZSh2b2lkKTsKIGV4dGVybiBpbnQgdXNpbmdfYXBpY190aW1lcjsKIAorc3RhdGljIGNoYXIgKnRpbWVfaW5pdF9ndG9kKHZvaWQpOworCiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwogREVGSU5FX1NQSU5MT0NLKGk4MjUzX2xvY2spOwogCkBAIC00NzUsNyArNDc3LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3ljMm5zX3NjYWxlOworc3RhdGljIHVuc2lnbmVkIGludCBjeWMybnNfc2NhbGUgX19yZWFkX21vc3RseTsKICNkZWZpbmUgQ1lDMk5TX1NDQUxFX0ZBQ1RPUiAxMCAvKiAyXjEwLCBjYXJlZnVsbHkgY2hvc2VuICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY3ljMm5zX3NjYWxlKHVuc2lnbmVkIGxvbmcgY3B1X2toeikKQEAgLTkwMSw2ICs5MDMsNyBAQAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CiAJY2hhciAqdGltZW5hbWU7CisJY2hhciAqZ3RvZDsKIAogI2lmZGVmIEhQRVRfSEFDS19FTkFCTEVfREFOR0VST1VTCiAgICAgICAgIGlmICghdnh0aW1lLmhwZXRfYWRkcmVzcykgewpAQCAtOTQ1LDIxICs5NDgsMTkgQEAKIAkJdGltZW5hbWUgPSAiUElUIjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJ0aW1lLmM6IFVzaW5nICVsZC4lMDZsZCBNSHogJXMgdGltZXIuXG4iLAotCSAgICAgICB2eHRpbWVfaHogLyAxMDAwMDAwLCB2eHRpbWVfaHogJSAxMDAwMDAwLCB0aW1lbmFtZSk7CisJdnh0aW1lLm1vZGUgPSBWWFRJTUVfVFNDOworCWd0b2QgPSB0aW1lX2luaXRfZ3RvZCgpOworCisJcHJpbnRrKEtFUk5fSU5GTyAidGltZS5jOiBVc2luZyAlbGQuJTA2bGQgTUh6IFdBTEwgJXMgR1RPRCAlcyB0aW1lci5cbiIsCisJICAgICAgIHZ4dGltZV9oeiAvIDEwMDAwMDAsIHZ4dGltZV9oeiAlIDEwMDAwMDAsIHRpbWVuYW1lLCBndG9kKTsKIAlwcmludGsoS0VSTl9JTkZPICJ0aW1lLmM6IERldGVjdGVkICVkLiUwM2QgTUh6IHByb2Nlc3Nvci5cbiIsCiAJCWNwdV9raHogLyAxMDAwLCBjcHVfa2h6ICUgMTAwMCk7Ci0Jdnh0aW1lLm1vZGUgPSBWWFRJTUVfVFNDOwogCXZ4dGltZS5xdW90ID0gKDEwMDAwMDBMIDw8IDMyKSAvIHZ4dGltZV9oejsKIAl2eHRpbWUudHNjX3F1b3QgPSAoMTAwMEwgPDwgMzIpIC8gY3B1X2toejsKIAl2eHRpbWUubGFzdF90c2MgPSBnZXRfY3ljbGVzX3N5bmMoKTsKIAlzZXR1cF9pcnEoMCwgJmlycTApOwogCiAJc2V0X2N5YzJuc19zY2FsZShjcHVfa2h6KTsKLQotI2lmbmRlZiBDT05GSUdfU01QCi0JdGltZV9pbml0X2d0b2QoKTsKLSNlbmRpZgogfQogCiAvKgpAQCAtOTgxLDkgKzk4Miw5IEBACiB9CiAKIC8qCi0gKiBEZWNpZGUgYWZ0ZXIgYWxsIENQVXMgYXJlIGJvb3RlZCB3aGF0IG1vZGUgZ2V0dGltZW9mZGF5IHNob3VsZCB1c2UuCisgKiBEZWNpZGUgd2hhdCBtb2RlIGdldHRpbWVvZmRheSBzaG91bGQgdXNlLgogICovCi12b2lkIF9faW5pdCB0aW1lX2luaXRfZ3RvZCh2b2lkKQorX19pbml0IHN0YXRpYyBjaGFyICp0aW1lX2luaXRfZ3RvZCh2b2lkKQogewogCWNoYXIgKnRpbWV0eXBlOwogCkBAIC0xMDExLDggKzEwMTIsNyBAQAogCQl0aW1ldHlwZSA9IGhwZXRfdXNlX3RpbWVyID8gIkhQRVQvVFNDIiA6ICJQSVQvVFNDIjsKIAkJdnh0aW1lLm1vZGUgPSBWWFRJTUVfVFNDOwogCX0KLQotCXByaW50ayhLRVJOX0lORk8gInRpbWUuYzogVXNpbmcgJXMgYmFzZWQgdGltZWtlZXBpbmcuXG4iLCB0aW1ldHlwZSk7CisJcmV0dXJuIHRpbWV0eXBlOwogfQogCiBfX3NldHVwKCJyZXBvcnRfbG9zdF90aWNrcyIsIHRpbWVfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3g4NjY0X2tzeW1zLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYwppbmRleCAzNDk2YWJjLi5jOWRjN2U0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwveDg2NjRfa3N5bXMuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0woc3RybGVuKTsKK0VYUE9SVF9TWU1CT0woc3RycGJyayk7CiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwogRVhQT1JUX1NZTUJPTChtZW1jcHkpOwogRVhQT1JUX1NZTUJPTChfX21lbWNweSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9pbml0LmMgYi9hcmNoL3g4Nl82NC9tbS9pbml0LmMKaW5kZXggN2FmMTc0Mi4uNDBlZDEzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2XzY0L21tL2luaXQuYwpAQCAtNDg2LDcgKzQ4Niw3IEBACiB2b2lkIG9ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewogCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCWluaXRfcGFnZV9jb3VudChwYWdlKTsKIAlfX2ZyZWVfcGFnZShwYWdlKTsKIAl0b3RhbHJhbV9wYWdlcysrOwogCW51bV9waHlzcGFnZXMrKzsKQEAgLTU5Miw3ICs1OTIsNyBAQAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbik7CiAJZm9yICg7IGFkZHIgPCAodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpOyBhZGRyICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYWRkcikpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2UoYWRkciksIDEpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpKTsKIAkJbWVtc2V0KCh2b2lkICopKGFkZHIgJiB+KFBBR0VfU0laRS0xKSksIDB4Y2MsIFBBR0VfU0laRSk7IAogCQlmcmVlX3BhZ2UoYWRkcik7CiAJCXRvdGFscmFtX3BhZ2VzKys7CkBAIC02MzIsNyArNjMyLDcgQEAKIAlwcmludGsgKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsIChlbmQgLSBzdGFydCkgPj4gMTApOwogCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlzZXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCkpOwogCQlmcmVlX3BhZ2Uoc3RhcnQpOwogCQl0b3RhbHJhbV9wYWdlcysrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Nl82NC9tbS9wYWdlYXR0ci5jCmluZGV4IDM1ZjFmMWEuLjUzMWFkMjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODZfNjQvbW0vcGFnZWF0dHIuYwpAQCAtNDUsNiArNDUsMTMgQEAKIAlwdGVfdCAqcGJhc2U7CiAJaWYgKCFiYXNlKSAKIAkJcmV0dXJuIE5VTEw7CisJLyoKKwkgKiBwYWdlX3ByaXZhdGUgaXMgdXNlZCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4KKwkgKiB0aGUgcGFnZSB0YWJsZSBwYWdlIGhhdmUgbm9uIHN0YW5kYXJkIGF0dHJpYnV0ZXMuCisJICovCisJU2V0UGFnZVByaXZhdGUoYmFzZSk7CisJcGFnZV9wcml2YXRlKGJhc2UpID0gMDsKKwogCWFkZHJlc3MgPSBfX3BhKGFkZHJlc3MpOwogCWFkZHIgPSBhZGRyZXNzICYgTEFSR0VfUEFHRV9NQVNLOyAKIAlwYmFzZSA9IChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhiYXNlKTsKQEAgLTc3LDI2ICs4NCwxMiBAQAogCW9uX2VhY2hfY3B1KGZsdXNoX2tlcm5lbF9tYXAsICh2b2lkICopYWRkcmVzcywgMSwgMSk7CiB9CiAKLXN0cnVjdCBkZWZlcnJlZF9wYWdlIHsgCi0Jc3RydWN0IGRlZmVycmVkX3BhZ2UgKm5leHQ7IAotCXN0cnVjdCBwYWdlICpmcGFnZTsKLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7Ci19OyAKLXN0YXRpYyBzdHJ1Y3QgZGVmZXJyZWRfcGFnZSAqZGZfbGlzdDsgLyogcHJvdGVjdGVkIGJ5IGluaXRfbW0ubW1hcF9zZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZGVmZXJyZWRfcGFnZXM7IC8qIHByb3RlY3RlZCBieSBpbml0X21tLm1tYXBfc2VtICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgcGFnZSAqZnBhZ2UpCitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9wYWdlKHN0cnVjdCBwYWdlICpmcGFnZSkKIHsKLQlzdHJ1Y3QgZGVmZXJyZWRfcGFnZSAqZGY7Ci0JZGYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGVmZXJyZWRfcGFnZSksIEdGUF9LRVJORUwpOyAKLQlpZiAoIWRmKSB7Ci0JCWZsdXNoX21hcChhZGRyZXNzKTsKLQkJX19mcmVlX3BhZ2UoZnBhZ2UpOwotCX0gZWxzZSB7IAotCQlkZi0+bmV4dCA9IGRmX2xpc3Q7Ci0JCWRmLT5mcGFnZSA9IGZwYWdlOwotCQlkZi0+YWRkcmVzcyA9IGFkZHJlc3M7Ci0JCWRmX2xpc3QgPSBkZjsKLQl9IAkJCQorCWZwYWdlLT5scnUubmV4dCA9IChzdHJ1Y3QgbGlzdF9oZWFkICopZGVmZXJyZWRfcGFnZXM7CisJZGVmZXJyZWRfcGFnZXMgPSBmcGFnZTsKIH0KIAogLyogCkBAIC0xMzgsOCArMTMxLDggQEAKIAkJCXNldF9wdGUoa3B0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKIAkJfSBlbHNlIHsKICAJCQkvKgotIAkJCSAqIHNwbGl0X2xhcmdlX3BhZ2Ugd2lsbCB0YWtlIHRoZSByZWZlcmVuY2UgZm9yIHRoaXMgY2hhbmdlX3BhZ2VfYXR0cgotIAkJCSAqIG9uIHRoZSBzcGxpdCBwYWdlLgorCQkJICogc3BsaXRfbGFyZ2VfcGFnZSB3aWxsIHRha2UgdGhlIHJlZmVyZW5jZSBmb3IgdGhpcworCQkJICogY2hhbmdlX3BhZ2VfYXR0ciBvbiB0aGUgc3BsaXQgcGFnZS4KICAJCQkgKi8KIAogCQkJc3RydWN0IHBhZ2UgKnNwbGl0OwpAQCAtMTUxLDIzICsxNDQsMjAgQEAKIAkJCXNldF9wdGUoa3B0ZSxta19wdGUoc3BsaXQsIHJlZl9wcm90MikpOwogCQkJa3B0ZV9wYWdlID0gc3BsaXQ7CiAJCX0JCi0JCWdldF9wYWdlKGtwdGVfcGFnZSk7CisJCXBhZ2VfcHJpdmF0ZShrcHRlX3BhZ2UpKys7CiAJfSBlbHNlIGlmICgoa3B0ZV9mbGFncyAmIF9QQUdFX1BTRSkgPT0gMCkgeyAKIAkJc2V0X3B0ZShrcHRlLCBwZm5fcHRlKHBmbiwgcmVmX3Byb3QpKTsKLQkJX19wdXRfcGFnZShrcHRlX3BhZ2UpOworCQlCVUdfT04ocGFnZV9wcml2YXRlKGtwdGVfcGFnZSkgPT0gMCk7CisJCXBhZ2VfcHJpdmF0ZShrcHRlX3BhZ2UpLS07CiAJfSBlbHNlCiAJCUJVRygpOwogCiAJLyogb24geDg2LTY0IHRoZSBkaXJlY3QgbWFwcGluZyBzZXQgYXQgYm9vdCBpcyBub3QgdXNpbmcgNGsgcGFnZXMgKi8KICAJQlVHX09OKFBhZ2VSZXNlcnZlZChrcHRlX3BhZ2UpKTsKIAotCXN3aXRjaCAocGFnZV9jb3VudChrcHRlX3BhZ2UpKSB7Ci0gCWNhc2UgMToKLQkJc2F2ZV9wYWdlKGFkZHJlc3MsIGtwdGVfcGFnZSk7IAkJICAgICAKKwlpZiAocGFnZV9wcml2YXRlKGtwdGVfcGFnZSkgPT0gMCkgeworCQlzYXZlX3BhZ2Uoa3B0ZV9wYWdlKTsKIAkJcmV2ZXJ0X3BhZ2UoYWRkcmVzcywgcmVmX3Byb3QpOwotCQlicmVhazsKLSAJY2FzZSAwOgotIAkJQlVHKCk7IC8qIG1lbWxlYWsgYW5kIGZhaWxlZCAyTSBwYWdlIHJlZ2VuZXJhdGlvbiAqLwogIAl9CiAJcmV0dXJuIDA7CiB9IApAQCAtMjIwLDE3ICsyMTAsMTggQEAKIAogdm9pZCBnbG9iYWxfZmx1c2hfdGxiKHZvaWQpCiB7IAotCXN0cnVjdCBkZWZlcnJlZF9wYWdlICpkZiwgKm5leHRfZGY7CisJc3RydWN0IHBhZ2UgKmRwYWdlOwogCiAJZG93bl9yZWFkKCZpbml0X21tLm1tYXBfc2VtKTsKLQlkZiA9IHhjaGcoJmRmX2xpc3QsIE5VTEwpOworCWRwYWdlID0geGNoZygmZGVmZXJyZWRfcGFnZXMsIE5VTEwpOwogCXVwX3JlYWQoJmluaXRfbW0ubW1hcF9zZW0pOwotCWZsdXNoX21hcCgoZGYgJiYgIWRmLT5uZXh0KSA/IGRmLT5hZGRyZXNzIDogMCk7Ci0JZm9yICg7IGRmOyBkZiA9IG5leHRfZGYpIHsgCi0JCW5leHRfZGYgPSBkZi0+bmV4dDsKLQkJaWYgKGRmLT5mcGFnZSkgCi0JCQlfX2ZyZWVfcGFnZShkZi0+ZnBhZ2UpOwotCQlrZnJlZShkZik7CisKKwlmbHVzaF9tYXAoKGRwYWdlICYmICFkcGFnZS0+bHJ1Lm5leHQpID8gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGRwYWdlKSA6IDApOworCXdoaWxlIChkcGFnZSkgeworCQlzdHJ1Y3QgcGFnZSAqdG1wID0gZHBhZ2U7CisJCWRwYWdlID0gKHN0cnVjdCBwYWdlICopZHBhZ2UtPmxydS5uZXh0OworCQlDbGVhclBhZ2VQcml2YXRlKHRtcCk7CisJCV9fZnJlZV9wYWdlKHRtcCk7CiAJfSAKIH0gCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L3BjaS9NYWtlZmlsZSBiL2FyY2gveDg2XzY0L3BjaS9NYWtlZmlsZQppbmRleCBhOGY3NWEyLi5hM2Y2YWQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvcGNpL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogCiBvYmoteQkJOj0gaTM4Ni5vCiBvYmotJChDT05GSUdfUENJX0RJUkVDVCkrPSBkaXJlY3Qubwotb2JqLXkJCSs9IGZpeHVwLm8KK29iai15CQkrPSBmaXh1cC5vIGluaXQubwogb2JqLSQoQ09ORklHX0FDUEkpCSs9IGFjcGkubwogb2JqLXkJCQkrPSBsZWdhY3kubyBpcnEubyBjb21tb24ubwogIyBtbWNvbmZpZyBoYXMgYSA2NGJpdCBzcGVjaWFsCkBAIC0yMiwzICsyMiw0IEBACiBjb21tb24teSArPSAuLi8uLi9pMzg2L3BjaS9jb21tb24ubwogZml4dXAteSAgKz0gLi4vLi4vaTM4Ni9wY2kvZml4dXAubwogaTM4Ni15ICArPSAuLi8uLi9pMzg2L3BjaS9pMzg2Lm8KK2luaXQteSArPSAuLi8uLi9pMzg2L3BjaS9pbml0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L3BjaS9tbWNvbmZpZy5jIGIvYXJjaC94ODZfNjQvcGNpL21tY29uZmlnLmMKaW5kZXggMThmMzcxZi4uZTYxNjUwMDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L3BjaS9tbWNvbmZpZy5jCisrKyBiL2FyY2gveDg2XzY0L3BjaS9tbWNvbmZpZy5jCkBAIC01NSw3ICs1NSw3IEBACiBzdGF0aWMgY2hhciBfX2lvbWVtICpwY2lfZGV2X2Jhc2UodW5zaWduZWQgaW50IHNlZywgdW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZuKQogewogCWNoYXIgX19pb21lbSAqYWRkcjsKLQlpZiAoc2VnID09IDAgJiYgYnVzID09IDAgJiYgdGVzdF9iaXQoUENJX1NMT1QoZGV2Zm4pLCAmZmFsbGJhY2tfc2xvdHMpKQorCWlmIChzZWcgPT0gMCAmJiBidXMgPT0gMCAmJiB0ZXN0X2JpdChQQ0lfU0xPVChkZXZmbiksIGZhbGxiYWNrX3Nsb3RzKSkKIAkJcmV0dXJuIE5VTEw7CiAJYWRkciA9IGdldF92aXJ0KHNlZywgYnVzKTsKIAlpZiAoIWFkZHIpCkBAIC0xNDMsMjkgKzE0MywyOSBAQAogCQkJY29udGludWU7CiAJCWFkZHIgPSBwY2lfZGV2X2Jhc2UoMCwgMCwgUENJX0RFVkZOKGksIDApKTsKIAkJaWYgKGFkZHIgPT0gTlVMTHx8IHJlYWRsKGFkZHIpICE9IHZhbDEpIHsKLQkJCXNldF9iaXQoaSwgJmZhbGxiYWNrX3Nsb3RzKTsKKwkJCXNldF9iaXQoaSwgZmFsbGJhY2tfc2xvdHMpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBwY2lfbW1jZmdfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgcGNpX21tY2ZnX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAogCWlmICgocGNpX3Byb2JlICYgUENJX1BST0JFX01NQ09ORikgPT0gMCkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCWFjcGlfdGFibGVfcGFyc2UoQUNQSV9NQ0ZHLCBhY3BpX3BhcnNlX21jZmcpOwogCWlmICgocGNpX21tY2ZnX2NvbmZpZ19udW0gPT0gMCkgfHwKIAkgICAgKHBjaV9tbWNmZ19jb25maWcgPT0gTlVMTCkgfHwKIAkgICAgKHBjaV9tbWNmZ19jb25maWdbMF0uYmFzZV9hZGRyZXNzID09IDApKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJLyogUkVELVBFTiBpMzg2IGRvZXNuJ3QgZG8gX25vY2FjaGUgcmlnaHQgbm93ICovCiAJcGNpX21tY2ZnX3ZpcnQgPSBrbWFsbG9jKHNpemVvZigqcGNpX21tY2ZnX3ZpcnQpICogcGNpX21tY2ZnX2NvbmZpZ19udW0sIEdGUF9LRVJORUwpOwogCWlmIChwY2lfbW1jZmdfdmlydCA9PSBOVUxMKSB7CiAJCXByaW50aygiUENJOiBDYW4gbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbW1jb25maWcgc3RydWN0dXJlc1xuIik7Ci0JCXJldHVybiAwOworCQlyZXR1cm47CiAJfQogCWZvciAoaSA9IDA7IGkgPCBwY2lfbW1jZmdfY29uZmlnX251bTsgKytpKSB7CiAJCXBjaV9tbWNmZ192aXJ0W2ldLmNmZyA9ICZwY2lfbW1jZmdfY29uZmlnW2ldOwpAQCAtMTczLDcgKzE3Myw3IEBACiAJCWlmICghcGNpX21tY2ZnX3ZpcnRbaV0udmlydCkgewogCQkJcHJpbnRrKCJQQ0k6IENhbm5vdCBtYXAgbW1jb25maWcgYXBlcnR1cmUgZm9yIHNlZ21lbnQgJWRcbiIsCiAJCQkgICAgICAgcGNpX21tY2ZnX2NvbmZpZ1tpXS5wY2lfc2VnbWVudF9ncm91cF9udW1iZXIpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm47CiAJCX0KIAkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBVc2luZyBNTUNPTkZJRyBhdCAleFxuIiwgcGNpX21tY2ZnX2NvbmZpZ1tpXS5iYXNlX2FkZHJlc3MpOwogCX0KQEAgLTE4Miw4ICsxODIsNCBAQAogCiAJcmF3X3BjaV9vcHMgPSAmcGNpX21tY2ZnOwogCXBjaV9wcm9iZSA9IChwY2lfcHJvYmUgJiB+UENJX1BST0JFX01BU0spIHwgUENJX1BST0JFX01NQ09ORjsKLQotCXJldHVybiAwOwogfQotCi1hcmNoX2luaXRjYWxsKHBjaV9tbWNmZ19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL0tjb25maWcgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCmluZGV4IDdlZTRhMTQuLmU5MGVmNWQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL0tjb25maWcKKysrIGIvYXJjaC94dGVuc2EvS2NvbmZpZwpAQCAtMjYsNiArMjYsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCisgICAgICAgYm9vbAorICAgICAgIGRlZmF1bHQgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IDRjYmY2ZDkuLjUxZjliZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTgzLDkgKzgzLDggQEAKIAogCWlmIChpID09IDApIHsKIAkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKLQkJZm9yIChqPTA7IGo8TlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CiAJfQogCkBAIC05OCw5ICs5Nyw4IEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCi0JCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCi0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpAQCAtMTEzLDkgKzExMSw4IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgewogCQlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOwotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBubWlfY291bnQoaikpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIG5taV9jb3VudChqKSk7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogCQlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZjFmNTk2Ni4uNjRhNjQ5ZSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC02NCw2ICs2NCw5IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF9zZXRbTlJfQ1BVU10gPSB7JmluaXRfdGFzaywgfTsKIAordm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOworCiAKICNpZiBYQ0hBTF9DUF9OVU0gPiAwCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL2luaXQuYyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwppbmRleCA1YTkxZDZjLi5lMWJlNDIzIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKKysrIGIvYXJjaC94dGVuc2EvbW0vaW5pdC5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIHsKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkgewogCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSwgMSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXN0YXJ0KTsKIAkJdG90YWxyYW1fcGFnZXMrKzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9wZ3RhYmxlLmMgYi9hcmNoL3h0ZW5zYS9tbS9wZ3RhYmxlLmMKaW5kZXggZTVlMTE5Yy4uN2QyODkxNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gveHRlbnNhL21tL3BndGFibGUuYwpAQCAtMTQsMjUgKzE0LDIxIEBACiAKIHB0ZV90KiBwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXB0ZV90ICpwdGUsIHA7CisJcHRlX3QgKnB0ZSA9IE5VTEwsICpwOwogCWludCBjb2xvciA9IEFERFJfQ09MT1IoYWRkcmVzcyk7CiAJaW50IGk7CiAKIAlwID0gKHB0ZV90KikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCwgQ09MT1JfT1JERVIpOwogCiAJaWYgKGxpa2VseShwKSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJc3BsaXRfcGFnZSh2aXJ0X3RvX3BhZ2UocCksIENPTE9SX09SREVSKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQ09MT1JfU0laRTsgaSsrLCBwKyspIHsKLQkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocHRlKTsKLQotCQkJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7Ci0JCQlDbGVhclBhZ2VDb21wb3VuZChwYWdlKTsKLQorCQlmb3IgKGkgPSAwOyBpIDwgQ09MT1JfU0laRTsgaSsrKSB7CiAJCQlpZiAoQUREUl9DT0xPUihwKSA9PSBjb2xvcikKIAkJCQlwdGUgPSBwOwogCQkJZWxzZQogCQkJCWZyZWVfcGFnZShwKTsKKwkJCXAgKz0gUFRSU19QRVJfUFRFOwogCQl9CiAJCWNsZWFyX3BhZ2UocHRlKTsKIAl9CkBAIC00OSwyMCArNDUsMjAgQEAKIAogc3RydWN0IHBhZ2UqIHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZSwgcDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEwsICpwOwogCWludCBjb2xvciA9IEFERFJfQ09MT1IoYWRkcmVzcyk7CiAKIAlwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCwgUFRFX09SREVSKTsKIAogCWlmIChsaWtlbHkocCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IFBBR0VfT1JERVI7IGkrKykgewotCQkJc2V0X3BhZ2VfY291bnQocCwgMSk7Ci0JCQlDbGVhclBhZ2VDb21wb3VuZChwKTsKKwkJc3BsaXRfcGFnZShwLCBDT0xPUl9PUkRFUik7CiAKLQkJCWlmIChQQUREUl9DT0xPUihwYWdlX2FkZHJlc3MocGcpKSA9PSBjb2xvcikKKwkJZm9yIChpID0gMDsgaSA8IFBBR0VfT1JERVI7IGkrKykgeworCQkJaWYgKFBBRERSX0NPTE9SKHBhZ2VfYWRkcmVzcyhwKSkgPT0gY29sb3IpCiAJCQkJcGFnZSA9IHA7CiAJCQllbHNlCi0JCQkJZnJlZV9wYWdlKHApOworCQkJCV9fZnJlZV9wYWdlKHApOworCQkJcCsrOwogCQl9CiAJCWNsZWFyX2hpZ2hwYWdlKHBhZ2UpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvY29uc29sZS5jCmluZGV4IDk0ZmRmZTQuLjJhNTgwZWYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9jb25zb2xlLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL2NvbnNvbGUuYwpAQCAtMzEsMTAgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogCi0jaWZkZWYgU0VSSUFMX0lOTElORQotI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKLSNlbmRpZgotCiAjZGVmaW5lIFNFUklBTF9NQVhfTlVNX0xJTkVTIDEKICNkZWZpbmUgU0VSSUFMX1RJTUVSX1ZBTFVFICgyMCAqIEhaKQogCmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZwppbmRleCAzNzdmNmRkLi45Njc4MzY0IDEwMDY0NAotLS0gYS9ibG9jay9LY29uZmlnCisrKyBiL2Jsb2NrL0tjb25maWcKQEAgLTExLDQgKzExLDE2IEBACiAJICB5b3VyIG1hY2hpbmUsIG9yIGlmIHlvdSB3YW50IHRvIGhhdmUgYSByYWlkIG9yIGxvb3BiYWNrIGRldmljZQogCSAgYmlnZ2VyIHRoYW4gMlRCLiAgT3RoZXJ3aXNlIHNheSBOLgogCitjb25maWcgQkxLX0RFVl9JT19UUkFDRQorCWJvb2wgIlN1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgaW8gYWN0aW9ucyIKKwlzZWxlY3QgUkVMQVkKKwlzZWxlY3QgREVCVUdfRlMKKwloZWxwCisJICBTYXkgWSBoZXJlLCBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNlIHRoZSBibG9jayBsYXllciBhY3Rpb25zCisJICBvbiBhIGdpdmVuIHF1ZXVlLiBUcmFjaW5nIGFsbG93cyB5b3UgdG8gc2VlIGFueSB0cmFmZmljIGhhcHBlbmluZworCSAgb24gYSBibG9jayBkZXZpY2UgcXVldWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIChhbmQgdGhlIHVzZXIgc3BhY2UKKwkgIHN1cHBvcnQgdG9vbHMgbmVlZGVkKSwgZmV0Y2ggdGhlIGJsa3RyYWNlIGFwcCBmcm9tOgorCisJICBnaXQ6Ly9icmljay5rZXJuZWwuZGsvZGF0YS9naXQvYmxrdHJhY2UuZ2l0CisKIHNvdXJjZSBibG9jay9LY29uZmlnLmlvc2NoZWQKZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGUKaW5kZXggN2U0ZjkzZS4uYzA1ZGUwZSAxMDA2NDQKLS0tIGEvYmxvY2svTWFrZWZpbGUKKysrIGIvYmxvY2svTWFrZWZpbGUKQEAgLTgsMyArOCw1IEBACiBvYmotJChDT05GSUdfSU9TQ0hFRF9BUykJKz0gYXMtaW9zY2hlZC5vCiBvYmotJChDT05GSUdfSU9TQ0hFRF9ERUFETElORSkJKz0gZGVhZGxpbmUtaW9zY2hlZC5vCiBvYmotJChDT05GSUdfSU9TQ0hFRF9DRlEpCSs9IGNmcS1pb3NjaGVkLm8KKworb2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpCSs9IGJsa3RyYWNlLm8KZGlmZiAtLWdpdCBhL2Jsb2NrL2FzLWlvc2NoZWQuYyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwppbmRleCA4ZGEzY2Y2Li4yOTY3MDhjIDEwMDY0NAotLS0gYS9ibG9jay9hcy1pb3NjaGVkLmMKKysrIGIvYmxvY2svYXMtaW9zY2hlZC5jCkBAIC0xODIsNiArMTgyLDkgQEAKIAogc3RhdGljIGttZW1fY2FjaGVfdCAqYXJxX3Bvb2w7CiAKK3N0YXRpYyBhdG9taWNfdCBpb2NfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiAqaW9jX2dvbmU7CisKIHN0YXRpYyB2b2lkIGFzX21vdmVfdG9fZGlzcGF0Y2goc3RydWN0IGFzX2RhdGEgKmFkLCBzdHJ1Y3QgYXNfcnEgKmFycSk7CiBzdGF0aWMgdm9pZCBhc19hbnRpY19zdG9wKHN0cnVjdCBhc19kYXRhICphZCk7CiAKQEAgLTE5Myw2ICsxOTYsMTUgQEAKIHN0YXRpYyB2b2lkIGZyZWVfYXNfaW9fY29udGV4dChzdHJ1Y3QgYXNfaW9fY29udGV4dCAqYWljKQogewogCWtmcmVlKGFpYyk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlvY19jb3VudCkgJiYgaW9jX2dvbmUpCisJCWNvbXBsZXRlKGlvY19nb25lKTsKK30KKworc3RhdGljIHZvaWQgYXNfdHJpbShzdHJ1Y3QgaW9fY29udGV4dCAqaW9jKQoreworCWlmIChpb2MtPmFpYykKKwkJZnJlZV9hc19pb19jb250ZXh0KGlvYy0+YWljKTsKKwlpb2MtPmFpYyA9IE5VTEw7CiB9CiAKIC8qIENhbGxlZCB3aGVuIHRoZSB0YXNrIGV4aXRzICovCkBAIC0yMjAsNiArMjMyLDcgQEAKIAkJcmV0LT5zZWVrX3RvdGFsID0gMDsKIAkJcmV0LT5zZWVrX3NhbXBsZXMgPSAwOwogCQlyZXQtPnNlZWtfbWVhbiA9IDA7CisJCWF0b21pY19pbmMoJmlvY19jb3VudCk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE2OTYsMTEgKzE3MDksNiBAQAogLyoKICAqIHN5c2ZzIHBhcnRzIGJlbG93CiAgKi8KLXN0cnVjdCBhc19mc19lbnRyeSB7Ci0Jc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwotCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgYXNfZGF0YSAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGFzX2RhdGEgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwotfTsKIAogc3RhdGljIHNzaXplX3QKIGFzX3Zhcl9zaG93KHVuc2lnbmVkIGludCB2YXIsIGNoYXIgKnBhZ2UpCkBAIC0xNzE3LDggKzE3MjUsOSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgYXNfZXN0X3Nob3coc3RydWN0IGFzX2RhdGEgKmFkLCBjaGFyICpwYWdlKQorc3RhdGljIHNzaXplX3QgZXN0X3RpbWVfc2hvdyhlbGV2YXRvcl90ICplLCBjaGFyICpwYWdlKQogeworCXN0cnVjdCBhc19kYXRhICphZCA9IGUtPmVsZXZhdG9yX2RhdGE7CiAJaW50IHBvcyA9IDA7CiAKIAlwb3MgKz0gc3ByaW50ZihwYWdlK3BvcywgIiVsdSAlJSBleGl0IHByb2JhYmlsaXR5XG4iLApAQCAtMTczNCwyMSArMTc0MywyMyBAQAogfQogCiAjZGVmaW5lIFNIT1dfRlVOQ1RJT04oX19GVU5DLCBfX1ZBUikJCQkJXAotc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBhc19kYXRhICphZCwgY2hhciAqcGFnZSkJCVwKK3N0YXRpYyBzc2l6ZV90IF9fRlVOQyhlbGV2YXRvcl90ICplLCBjaGFyICpwYWdlKQkJXAogewkJCQkJCQkJXAorCXN0cnVjdCBhc19kYXRhICphZCA9IGUtPmVsZXZhdG9yX2RhdGE7CQkJXAogCXJldHVybiBhc192YXJfc2hvdyhqaWZmaWVzX3RvX21zZWNzKChfX1ZBUikpLCAocGFnZSkpOwlcCiB9Ci1TSE9XX0ZVTkNUSU9OKGFzX3JlYWRleHBpcmVfc2hvdywgYWQtPmZpZm9fZXhwaXJlW1JFUV9TWU5DXSk7Ci1TSE9XX0ZVTkNUSU9OKGFzX3dyaXRlZXhwaXJlX3Nob3csIGFkLT5maWZvX2V4cGlyZVtSRVFfQVNZTkNdKTsKLVNIT1dfRlVOQ1RJT04oYXNfYW50aWNleHBpcmVfc2hvdywgYWQtPmFudGljX2V4cGlyZSk7Ci1TSE9XX0ZVTkNUSU9OKGFzX3JlYWRfYmF0Y2hleHBpcmVfc2hvdywgYWQtPmJhdGNoX2V4cGlyZVtSRVFfU1lOQ10pOwotU0hPV19GVU5DVElPTihhc193cml0ZV9iYXRjaGV4cGlyZV9zaG93LCBhZC0+YmF0Y2hfZXhwaXJlW1JFUV9BU1lOQ10pOworU0hPV19GVU5DVElPTihhc19yZWFkX2V4cGlyZV9zaG93LCBhZC0+Zmlmb19leHBpcmVbUkVRX1NZTkNdKTsKK1NIT1dfRlVOQ1RJT04oYXNfd3JpdGVfZXhwaXJlX3Nob3csIGFkLT5maWZvX2V4cGlyZVtSRVFfQVNZTkNdKTsKK1NIT1dfRlVOQ1RJT04oYXNfYW50aWNfZXhwaXJlX3Nob3csIGFkLT5hbnRpY19leHBpcmUpOworU0hPV19GVU5DVElPTihhc19yZWFkX2JhdGNoX2V4cGlyZV9zaG93LCBhZC0+YmF0Y2hfZXhwaXJlW1JFUV9TWU5DXSk7CitTSE9XX0ZVTkNUSU9OKGFzX3dyaXRlX2JhdGNoX2V4cGlyZV9zaG93LCBhZC0+YmF0Y2hfZXhwaXJlW1JFUV9BU1lOQ10pOwogI3VuZGVmIFNIT1dfRlVOQ1RJT04KIAogI2RlZmluZSBTVE9SRV9GVU5DVElPTihfX0ZVTkMsIF9fUFRSLCBNSU4sIE1BWCkJCQkJXAotc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBhc19kYXRhICphZCwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQlcCitzdGF0aWMgc3NpemVfdCBfX0ZVTkMoZWxldmF0b3JfdCAqZSwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQlcCiB7CQkJCQkJCQkJXAotCWludCByZXQgPSBhc192YXJfc3RvcmUoX19QVFIsIChwYWdlKSwgY291bnQpOwkJXAorCXN0cnVjdCBhc19kYXRhICphZCA9IGUtPmVsZXZhdG9yX2RhdGE7CQkJCVwKKwlpbnQgcmV0ID0gYXNfdmFyX3N0b3JlKF9fUFRSLCAocGFnZSksIGNvdW50KTsJCQlcCiAJaWYgKCooX19QVFIpIDwgKE1JTikpCQkJCQkJXAogCQkqKF9fUFRSKSA9IChNSU4pOwkJCQkJXAogCWVsc2UgaWYgKCooX19QVFIpID4gKE1BWCkpCQkJCQlcCkBAIC0xNzU2LDkwICsxNzY3LDI2IEBACiAJKihfX1BUUikgPSBtc2Vjc190b19qaWZmaWVzKCooX19QVFIpKTsJCQkJXAogCXJldHVybiByZXQ7CQkJCQkJCVwKIH0KLVNUT1JFX0ZVTkNUSU9OKGFzX3JlYWRleHBpcmVfc3RvcmUsICZhZC0+Zmlmb19leHBpcmVbUkVRX1NZTkNdLCAwLCBJTlRfTUFYKTsKLVNUT1JFX0ZVTkNUSU9OKGFzX3dyaXRlZXhwaXJlX3N0b3JlLCAmYWQtPmZpZm9fZXhwaXJlW1JFUV9BU1lOQ10sIDAsIElOVF9NQVgpOwotU1RPUkVfRlVOQ1RJT04oYXNfYW50aWNleHBpcmVfc3RvcmUsICZhZC0+YW50aWNfZXhwaXJlLCAwLCBJTlRfTUFYKTsKLVNUT1JFX0ZVTkNUSU9OKGFzX3JlYWRfYmF0Y2hleHBpcmVfc3RvcmUsCitTVE9SRV9GVU5DVElPTihhc19yZWFkX2V4cGlyZV9zdG9yZSwgJmFkLT5maWZvX2V4cGlyZVtSRVFfU1lOQ10sIDAsIElOVF9NQVgpOworU1RPUkVfRlVOQ1RJT04oYXNfd3JpdGVfZXhwaXJlX3N0b3JlLCAmYWQtPmZpZm9fZXhwaXJlW1JFUV9BU1lOQ10sIDAsIElOVF9NQVgpOworU1RPUkVfRlVOQ1RJT04oYXNfYW50aWNfZXhwaXJlX3N0b3JlLCAmYWQtPmFudGljX2V4cGlyZSwgMCwgSU5UX01BWCk7CitTVE9SRV9GVU5DVElPTihhc19yZWFkX2JhdGNoX2V4cGlyZV9zdG9yZSwKIAkJCSZhZC0+YmF0Y2hfZXhwaXJlW1JFUV9TWU5DXSwgMCwgSU5UX01BWCk7Ci1TVE9SRV9GVU5DVElPTihhc193cml0ZV9iYXRjaGV4cGlyZV9zdG9yZSwKK1NUT1JFX0ZVTkNUSU9OKGFzX3dyaXRlX2JhdGNoX2V4cGlyZV9zdG9yZSwKIAkJCSZhZC0+YmF0Y2hfZXhwaXJlW1JFUV9BU1lOQ10sIDAsIElOVF9NQVgpOwogI3VuZGVmIFNUT1JFX0ZVTkNUSU9OCiAKLXN0YXRpYyBzdHJ1Y3QgYXNfZnNfZW50cnkgYXNfZXN0X2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gImVzdF90aW1lIiwgLm1vZGUgPSBTX0lSVUdPIH0sCi0JLnNob3cgPSBhc19lc3Rfc2hvdywKLX07Ci1zdGF0aWMgc3RydWN0IGFzX2ZzX2VudHJ5IGFzX3JlYWRleHBpcmVfZW50cnkgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAicmVhZF9leHBpcmUiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCi0JLnNob3cgPSBhc19yZWFkZXhwaXJlX3Nob3csCi0JLnN0b3JlID0gYXNfcmVhZGV4cGlyZV9zdG9yZSwKLX07Ci1zdGF0aWMgc3RydWN0IGFzX2ZzX2VudHJ5IGFzX3dyaXRlZXhwaXJlX2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gIndyaXRlX2V4cGlyZSIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGFzX3dyaXRlZXhwaXJlX3Nob3csCi0JLnN0b3JlID0gYXNfd3JpdGVleHBpcmVfc3RvcmUsCi19Owotc3RhdGljIHN0cnVjdCBhc19mc19lbnRyeSBhc19hbnRpY2V4cGlyZV9lbnRyeSA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJhbnRpY19leHBpcmUiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCi0JLnNob3cgPSBhc19hbnRpY2V4cGlyZV9zaG93LAotCS5zdG9yZSA9IGFzX2FudGljZXhwaXJlX3N0b3JlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgYXNfZnNfZW50cnkgYXNfcmVhZF9iYXRjaGV4cGlyZV9lbnRyeSA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJyZWFkX2JhdGNoX2V4cGlyZSIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGFzX3JlYWRfYmF0Y2hleHBpcmVfc2hvdywKLQkuc3RvcmUgPSBhc19yZWFkX2JhdGNoZXhwaXJlX3N0b3JlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgYXNfZnNfZW50cnkgYXNfd3JpdGVfYmF0Y2hleHBpcmVfZW50cnkgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAid3JpdGVfYmF0Y2hfZXhwaXJlIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaG93ID0gYXNfd3JpdGVfYmF0Y2hleHBpcmVfc2hvdywKLQkuc3RvcmUgPSBhc193cml0ZV9iYXRjaGV4cGlyZV9zdG9yZSwKLX07CisjZGVmaW5lIEFTX0FUVFIobmFtZSkgXAorCV9fQVRUUihuYW1lLCBTX0lSVUdPfFNfSVdVU1IsIGFzXyMjbmFtZSMjX3Nob3csIGFzXyMjbmFtZSMjX3N0b3JlKQogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGVmYXVsdF9hdHRyc1tdID0gewotCSZhc19lc3RfZW50cnkuYXR0ciwKLQkmYXNfcmVhZGV4cGlyZV9lbnRyeS5hdHRyLAotCSZhc193cml0ZWV4cGlyZV9lbnRyeS5hdHRyLAotCSZhc19hbnRpY2V4cGlyZV9lbnRyeS5hdHRyLAotCSZhc19yZWFkX2JhdGNoZXhwaXJlX2VudHJ5LmF0dHIsCi0JJmFzX3dyaXRlX2JhdGNoZXhwaXJlX2VudHJ5LmF0dHIsCi0JTlVMTCwKLX07Ci0KLSNkZWZpbmUgdG9fYXMoYXRyKSBjb250YWluZXJfb2YoKGF0ciksIHN0cnVjdCBhc19mc19lbnRyeSwgYXR0cikKLQotc3RhdGljIHNzaXplX3QKLWFzX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKLXsKLQllbGV2YXRvcl90ICplID0gY29udGFpbmVyX29mKGtvYmosIGVsZXZhdG9yX3QsIGtvYmopOwotCXN0cnVjdCBhc19mc19lbnRyeSAqZW50cnkgPSB0b19hcyhhdHRyKTsKLQotCWlmICghZW50cnktPnNob3cpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIGVudHJ5LT5zaG93KGUtPmVsZXZhdG9yX2RhdGEsIHBhZ2UpOwotfQotCi1zdGF0aWMgc3NpemVfdAotYXNfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKLQkJICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW5ndGgpCi17Ci0JZWxldmF0b3JfdCAqZSA9IGNvbnRhaW5lcl9vZihrb2JqLCBlbGV2YXRvcl90LCBrb2JqKTsKLQlzdHJ1Y3QgYXNfZnNfZW50cnkgKmVudHJ5ID0gdG9fYXMoYXR0cik7Ci0KLQlpZiAoIWVudHJ5LT5zdG9yZSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gZW50cnktPnN0b3JlKGUtPmVsZXZhdG9yX2RhdGEsIHBhZ2UsIGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGFzX3N5c2ZzX29wcyA9IHsKLQkuc2hvdwk9IGFzX2F0dHJfc2hvdywKLQkuc3RvcmUJPSBhc19hdHRyX3N0b3JlLAotfTsKLQotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgYXNfa3R5cGUgPSB7Ci0JLnN5c2ZzX29wcwk9ICZhc19zeXNmc19vcHMsCi0JLmRlZmF1bHRfYXR0cnMJPSBkZWZhdWx0X2F0dHJzLAorc3RhdGljIHN0cnVjdCBlbHZfZnNfZW50cnkgYXNfYXR0cnNbXSA9IHsKKwlfX0FUVFJfUk8oZXN0X3RpbWUpLAorCUFTX0FUVFIocmVhZF9leHBpcmUpLAorCUFTX0FUVFIod3JpdGVfZXhwaXJlKSwKKwlBU19BVFRSKGFudGljX2V4cGlyZSksCisJQVNfQVRUUihyZWFkX2JhdGNoX2V4cGlyZSksCisJQVNfQVRUUih3cml0ZV9iYXRjaF9leHBpcmUpLAorCV9fQVRUUl9OVUxMCiB9OwogCiBzdGF0aWMgc3RydWN0IGVsZXZhdG9yX3R5cGUgaW9zY2hlZF9hcyA9IHsKQEAgLTE4NjAsOSArMTgwNywxMCBAQAogCQkuZWxldmF0b3JfbWF5X3F1ZXVlX2ZuID0JYXNfbWF5X3F1ZXVlLAogCQkuZWxldmF0b3JfaW5pdF9mbiA9CQlhc19pbml0X3F1ZXVlLAogCQkuZWxldmF0b3JfZXhpdF9mbiA9CQlhc19leGl0X3F1ZXVlLAorCQkudHJpbSA9CQkJCWFzX3RyaW0sCiAJfSwKIAotCS5lbGV2YXRvcl9rdHlwZSA9ICZhc19rdHlwZSwKKwkuZWxldmF0b3JfYXR0cnMgPSBhc19hdHRycywKIAkuZWxldmF0b3JfbmFtZSA9ICJhbnRpY2lwYXRvcnkiLAogCS5lbGV2YXRvcl9vd25lciA9IFRISVNfTU9EVUxFLAogfTsKQEAgLTE4OTMsNyArMTg0MSwxMyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXNfZXhpdCh2b2lkKQogeworCURFQ0xBUkVfQ09NUExFVElPTihhbGxfZ29uZSk7CiAJZWx2X3VucmVnaXN0ZXIoJmlvc2NoZWRfYXMpOworCWlvY19nb25lID0gJmFsbF9nb25lOworCWJhcnJpZXIoKTsKKwlpZiAoYXRvbWljX3JlYWQoJmlvY19jb3VudCkpCisJCWNvbXBsZXRlKGlvY19nb25lKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koYXJxX3Bvb2wpOwogfQogCmRpZmYgLS1naXQgYS9ibG9jay9ibGt0cmFjZS5jIGIvYmxvY2svYmxrdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmYzYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYmxvY2svYmxrdHJhY2UuYwpAQCAtMCwwICsxLDUzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nIGxvbmcsIGJsa190cmFjZV9jcHVfb2Zmc2V0KSA9IHsgMCwgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmxrdHJhY2Vfc2VxIF9fcmVhZF9tb3N0bHkgPSAxOworCisvKgorICogU2VuZCBvdXQgYSBub3RpZnkgZm9yIHRoaXMgcHJvY2VzcywgaWYgd2UgaGF2ZW4ndCBkb25lIHNvIHNpbmNlIGEgdHJhY2UKKyAqIHN0YXJ0ZWQKKyAqLworc3RhdGljIHZvaWQgdHJhY2Vfbm90ZV90c2soc3RydWN0IGJsa190cmFjZSAqYnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7CisKKwl0ID0gcmVsYXlfcmVzZXJ2ZShidC0+cmNoYW4sIHNpemVvZigqdCkgKyBzaXplb2YodHNrLT5jb21tKSk7CisJaWYgKHQpIHsKKwkJdC0+bWFnaWMgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTjsKKwkJdC0+ZGV2aWNlID0gYnQtPmRldjsKKwkJdC0+YWN0aW9uID0gQkxLX1RDX0FDVChCTEtfVENfTk9USUZZKTsKKwkJdC0+cGlkID0gdHNrLT5waWQ7CisJCXQtPmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJdC0+cGR1X2xlbiA9IHNpemVvZih0c2stPmNvbW0pOworCQltZW1jcHkoKHZvaWQgKikgdCArIHNpemVvZigqdCksIHRzay0+Y29tbSwgdC0+cGR1X2xlbik7CisJCXRzay0+YnRyYWNlX3NlcSA9IGJsa3RyYWNlX3NlcTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWN0X2xvZ19jaGVjayhzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdTMyIHdoYXQsIHNlY3Rvcl90IHNlY3RvciwKKwkJCSBwaWRfdCBwaWQpCit7CisJaWYgKCgoYnQtPmFjdF9tYXNrIDw8IEJMS19UQ19TSElGVCkgJiB3aGF0KSA9PSAwKQorCQlyZXR1cm4gMTsKKwlpZiAoc2VjdG9yIDwgYnQtPnN0YXJ0X2xiYSB8fCBzZWN0b3IgPiBidC0+ZW5kX2xiYSkKKwkJcmV0dXJuIDE7CisJaWYgKGJ0LT5waWQgJiYgcGlkICE9IGJ0LT5waWQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEYXRhIGRpcmVjdGlvbiBiaXQgbG9va3VwCisgKi8KK3N0YXRpYyB1MzIgZGRpcl9hY3RbMl0gX19yZWFkX21vc3RseSA9IHsgQkxLX1RDX0FDVChCTEtfVENfUkVBRCksIEJMS19UQ19BQ1QoQkxLX1RDX1dSSVRFKSB9OworCisvKgorICogQmlvIGFjdGlvbiBiaXRzIG9mIGludGVyZXN0CisgKi8KK3N0YXRpYyB1MzIgYmlvX2FjdFszXSBfX3JlYWRfbW9zdGx5ID0geyAwLCBCTEtfVENfQUNUKEJMS19UQ19CQVJSSUVSKSwgQkxLX1RDX0FDVChCTEtfVENfU1lOQykgfTsKKworLyoKKyAqIE1vcmUgY291bGQgYmUgYWRkZWQgYXMgbmVlZGVkLCB0YWtpbmcgY2FyZSB0byBpbmNyZW1lbnQgdGhlIGRlY3JlbWVudGVyCisgKiB0byBnZXQgY29ycmVjdCBpbmRleGluZworICovCisjZGVmaW5lIHRyYWNlX2JhcnJpZXJfYml0KHJ3KQlcCisJKCgocncpICYgKDEgPDwgQklPX1JXX0JBUlJJRVIpKSA+PiAoQklPX1JXX0JBUlJJRVIgLSAwKSkKKyNkZWZpbmUgdHJhY2Vfc3luY19iaXQocncpCVwKKwkoKChydykgJiAoMSA8PCBCSU9fUldfU1lOQykpID4+IChCSU9fUldfU1lOQyAtIDEpKQorCisvKgorICogVGhlIHdvcmtlciBmb3IgdGhlIHZhcmlvdXMgYmxrX2FkZF90cmFjZSooKSB0eXBlcy4gRmlsbHMgb3V0IGEKKyAqIGJsa19pb190cmFjZSBzdHJ1Y3R1cmUgYW5kIHBsYWNlcyBpdCBpbiBhIHBlci1jcHUgc3ViYnVmZmVyLgorICovCit2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsCisJCSAgICAgaW50IHJ3LCB1MzIgd2hhdCwgaW50IGVycm9yLCBpbnQgcGR1X2xlbiwgdm9pZCAqcGR1X2RhdGEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nICpzZXF1ZW5jZTsKKwlwaWRfdCBwaWQ7CisJaW50IGNwdTsKKworCWlmICh1bmxpa2VseShidC0+dHJhY2Vfc3RhdGUgIT0gQmxrdHJhY2VfcnVubmluZykpCisJCXJldHVybjsKKworCXdoYXQgfD0gZGRpcl9hY3RbcncgJiBXUklURV07CisJd2hhdCB8PSBiaW9fYWN0W3RyYWNlX2JhcnJpZXJfYml0KHJ3KV07CisJd2hhdCB8PSBiaW9fYWN0W3RyYWNlX3N5bmNfYml0KHJ3KV07CisKKwlwaWQgPSB0c2stPnBpZDsKKwlpZiAodW5saWtlbHkoYWN0X2xvZ19jaGVjayhidCwgd2hhdCwgc2VjdG9yLCBwaWQpKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBIHdvcmQgYWJvdXQgdGhlIGxvY2tpbmcgaGVyZSAtIHdlIGRpc2FibGUgaW50ZXJydXB0cyB0byByZXNlcnZlCisJICogc29tZSBzcGFjZSBpbiB0aGUgcmVsYXkgcGVyLWNwdSBidWZmZXIsIHRvIHByZXZlbnQgYW4gaXJxCisJICogZnJvbSBjb21pbmcgaW4gYW5kIHN0ZXBwaW5nIG9uIG91ciB0b2VzLiBPbmNlIHJlc2VydmVkLCBpdCdzCisJICogZW5vdWdoIHRvIGdldCBwcmVlbXB0aW9uIGRpc2FibGVkIHRvIHByZXZlbnQgcmVhZCBvZiB0aGlzIGRhdGEKKwkgKiBiZWZvcmUgd2UgYXJlIHRocm91Z2ggZmlsbGluZyBpdC4gZ2V0X2NwdSgpL3B1dF9jcHUoKSBkb2VzIHRoaXMKKwkgKiBmb3IgdXMKKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAodW5saWtlbHkodHNrLT5idHJhY2Vfc2VxICE9IGJsa3RyYWNlX3NlcSkpCisJCXRyYWNlX25vdGVfdHNrKGJ0LCB0c2spOworCisJdCA9IHJlbGF5X3Jlc2VydmUoYnQtPnJjaGFuLCBzaXplb2YoKnQpICsgcGR1X2xlbik7CisJaWYgKHQpIHsKKwkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCQlzZXF1ZW5jZSA9IHBlcl9jcHVfcHRyKGJ0LT5zZXF1ZW5jZSwgY3B1KTsKKworCQl0LT5tYWdpYyA9IEJMS19JT19UUkFDRV9NQUdJQyB8IEJMS19JT19UUkFDRV9WRVJTSU9OOworCQl0LT5zZXF1ZW5jZSA9ICsrKCpzZXF1ZW5jZSk7CisJCXQtPnRpbWUgPSBzY2hlZF9jbG9jaygpIC0gcGVyX2NwdShibGtfdHJhY2VfY3B1X29mZnNldCwgY3B1KTsKKwkJdC0+c2VjdG9yID0gc2VjdG9yOworCQl0LT5ieXRlcyA9IGJ5dGVzOworCQl0LT5hY3Rpb24gPSB3aGF0OworCQl0LT5waWQgPSBwaWQ7CisJCXQtPmRldmljZSA9IGJ0LT5kZXY7CisJCXQtPmNwdSA9IGNwdTsKKwkJdC0+ZXJyb3IgPSBlcnJvcjsKKwkJdC0+cGR1X2xlbiA9IHBkdV9sZW47CisKKwkJaWYgKHBkdV9sZW4pCisJCQltZW1jcHkoKHZvaWQgKikgdCArIHNpemVvZigqdCksIHBkdV9kYXRhLCBwZHVfbGVuKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKF9fYmxrX2FkZF90cmFjZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpibGtfdHJlZV9yb290Oworc3RhdGljIHN0cnVjdCBtdXRleCBibGtfdHJlZV9tdXRleDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm9vdF91c2VyczsKKworc3RhdGljIGlubGluZSB2b2lkIGJsa19yZW1vdmVfcm9vdCh2b2lkKQoreworCWlmIChibGtfdHJlZV9yb290KSB7CisJCWRlYnVnZnNfcmVtb3ZlKGJsa190cmVlX3Jvb3QpOworCQlibGtfdHJlZV9yb290ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJsa19yZW1vdmVfdHJlZShzdHJ1Y3QgZGVudHJ5ICpkaXIpCit7CisJbXV0ZXhfbG9jaygmYmxrX3RyZWVfbXV0ZXgpOworCWRlYnVnZnNfcmVtb3ZlKGRpcik7CisJaWYgKC0tcm9vdF91c2VycyA9PSAwKQorCQlibGtfcmVtb3ZlX3Jvb3QoKTsKKwltdXRleF91bmxvY2soJmJsa190cmVlX211dGV4KTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmJsa19jcmVhdGVfdHJlZShjb25zdCBjaGFyICpibGtfbmFtZSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmYmxrX3RyZWVfbXV0ZXgpOworCisJaWYgKCFibGtfdHJlZV9yb290KSB7CisJCWJsa190cmVlX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImJsb2NrIiwgTlVMTCk7CisJCWlmICghYmxrX3RyZWVfcm9vdCkKKwkJCWdvdG8gZXJyOworCX0KKworCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihibGtfbmFtZSwgYmxrX3RyZWVfcm9vdCk7CisJaWYgKGRpcikKKwkJcm9vdF91c2VycysrOworCWVsc2UKKwkJYmxrX3JlbW92ZV9yb290KCk7CisKK2VycjoKKwltdXRleF91bmxvY2soJmJsa190cmVlX211dGV4KTsKKwlyZXR1cm4gZGlyOworfQorCitzdGF0aWMgdm9pZCBibGtfdHJhY2VfY2xlYW51cChzdHJ1Y3QgYmxrX3RyYWNlICpidCkKK3sKKwlyZWxheV9jbG9zZShidC0+cmNoYW4pOworCWRlYnVnZnNfcmVtb3ZlKGJ0LT5kcm9wcGVkX2ZpbGUpOworCWJsa19yZW1vdmVfdHJlZShidC0+ZGlyKTsKKwlmcmVlX3BlcmNwdShidC0+c2VxdWVuY2UpOworCWtmcmVlKGJ0KTsKK30KKworc3RhdGljIGludCBibGtfdHJhY2VfcmVtb3ZlKHJlcXVlc3RfcXVldWVfdCAqcSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKKworCWJ0ID0geGNoZygmcS0+YmxrX3RyYWNlLCBOVUxMKTsKKwlpZiAoIWJ0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2Vfc2V0dXAgfHwKKwkgICAgYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3N0b3BwZWQpCisJCWJsa190cmFjZV9jbGVhbnVwKGJ0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsa19kcm9wcGVkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBibGtfZHJvcHBlZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwgYXRvbWljX3JlYWQoJmJ0LT5kcm9wcGVkKSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJsa19kcm9wcGVkX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm9wZW4gPQkJYmxrX2Ryb3BwZWRfb3BlbiwKKwkucmVhZCA9CQlibGtfZHJvcHBlZF9yZWFkLAorfTsKKworLyoKKyAqIEtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGltZXMgd2UgZW5jb3VudGVyZWQgYSBmdWxsIHN1YmJ1ZmZlciwgdG8gYWlkCisgKiB0aGUgdXNlciBzcGFjZSBhcHAgaW4gdGVsbGluZyBob3cgbWFueSBsb3N0IGV2ZW50cyB0aGVyZSB3ZXJlLgorICovCitzdGF0aWMgaW50IGJsa19zdWJidWZfc3RhcnRfY2FsbGJhY2soc3RydWN0IHJjaGFuX2J1ZiAqYnVmLCB2b2lkICpzdWJidWYsCisJCQkJICAgICB2b2lkICpwcmV2X3N1YmJ1Ziwgc2l6ZV90IHByZXZfcGFkZGluZykKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKKworCWlmICghcmVsYXlfYnVmX2Z1bGwoYnVmKSkKKwkJcmV0dXJuIDE7CisKKwlidCA9IGJ1Zi0+Y2hhbi0+cHJpdmF0ZV9kYXRhOworCWF0b21pY19pbmMoJmJ0LT5kcm9wcGVkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibGtfcmVtb3ZlX2J1Zl9maWxlX2NhbGxiYWNrKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShkZW50cnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYmxrX2NyZWF0ZV9idWZfZmlsZV9jYWxsYmFjayhjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkJCSAgIGludCBtb2RlLAorCQkJCQkJICAgc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJCQkJICAgaW50ICppc19nbG9iYWwpCit7CisJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2ZpbGUoZmlsZW5hbWUsIG1vZGUsIHBhcmVudCwgYnVmLAorCQkJCQkmcmVsYXlfZmlsZV9vcGVyYXRpb25zKTsKK30KKworc3RhdGljIHN0cnVjdCByY2hhbl9jYWxsYmFja3MgYmxrX3JlbGF5X2NhbGxiYWNrcyA9IHsKKwkuc3ViYnVmX3N0YXJ0CQk9IGJsa19zdWJidWZfc3RhcnRfY2FsbGJhY2ssCisJLmNyZWF0ZV9idWZfZmlsZQk9IGJsa19jcmVhdGVfYnVmX2ZpbGVfY2FsbGJhY2ssCisJLnJlbW92ZV9idWZfZmlsZQk9IGJsa19yZW1vdmVfYnVmX2ZpbGVfY2FsbGJhY2ssCit9OworCisvKgorICogU2V0dXAgZXZlcnl0aGluZyByZXF1aXJlZCB0byBzdGFydCB0cmFjaW5nCisgKi8KK3N0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCSAgIGNoYXIgX191c2VyICphcmcpCit7CisJc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwIGJ1dHM7CisJc3RydWN0IGJsa190cmFjZSAqb2xkX2J0LCAqYnQgPSBOVUxMOworCXN0cnVjdCBkZW50cnkgKmRpciA9IE5VTEw7CisJY2hhciBiW0JERVZOQU1FX1NJWkVdOworCWludCByZXQsIGk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1dHMsIGFyZywgc2l6ZW9mKGJ1dHMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIWJ1dHMuYnVmX3NpemUgfHwgIWJ1dHMuYnVmX25yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweShidXRzLm5hbWUsIGJkZXZuYW1lKGJkZXYsIGIpKTsKKworCS8qCisJICogc29tZSBkZXZpY2UgbmFtZXMgaGF2ZSBsYXJnZXIgcGF0aHMgLSBjb252ZXJ0IHRoZSBzbGFzaGVzCisJICogdG8gdW5kZXJzY29yZXMgZm9yIHRoaXMgdG8gd29yayBhcyBleHBlY3RlZAorCSAqLworCWZvciAoaSA9IDA7IGkgPCBzdHJsZW4oYnV0cy5uYW1lKTsgaSsrKQorCQlpZiAoYnV0cy5uYW1lW2ldID09ICcvJykKKwkJCWJ1dHMubmFtZVtpXSA9ICdfJzsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYnV0cywgc2l6ZW9mKGJ1dHMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSAtRU5PTUVNOworCWJ0ID0ga3phbGxvYyhzaXplb2YoKmJ0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidCkKKwkJZ290byBlcnI7CisKKwlidC0+c2VxdWVuY2UgPSBhbGxvY19wZXJjcHUodW5zaWduZWQgbG9uZyk7CisJaWYgKCFidC0+c2VxdWVuY2UpCisJCWdvdG8gZXJyOworCisJcmV0ID0gLUVOT0VOVDsKKwlkaXIgPSBibGtfY3JlYXRlX3RyZWUoYnV0cy5uYW1lKTsKKwlpZiAoIWRpcikKKwkJZ290byBlcnI7CisKKwlidC0+ZGlyID0gZGlyOworCWJ0LT5kZXYgPSBiZGV2LT5iZF9kZXY7CisJYXRvbWljX3NldCgmYnQtPmRyb3BwZWQsIDApOworCisJcmV0ID0gLUVJTzsKKwlidC0+ZHJvcHBlZF9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZHJvcHBlZCIsIDA0NDQsIGRpciwgYnQsICZibGtfZHJvcHBlZF9mb3BzKTsKKwlpZiAoIWJ0LT5kcm9wcGVkX2ZpbGUpCisJCWdvdG8gZXJyOworCisJYnQtPnJjaGFuID0gcmVsYXlfb3BlbigidHJhY2UiLCBkaXIsIGJ1dHMuYnVmX3NpemUsIGJ1dHMuYnVmX25yLCAmYmxrX3JlbGF5X2NhbGxiYWNrcyk7CisJaWYgKCFidC0+cmNoYW4pCisJCWdvdG8gZXJyOworCWJ0LT5yY2hhbi0+cHJpdmF0ZV9kYXRhID0gYnQ7CisKKwlidC0+YWN0X21hc2sgPSBidXRzLmFjdF9tYXNrOworCWlmICghYnQtPmFjdF9tYXNrKQorCQlidC0+YWN0X21hc2sgPSAodTE2KSAtMTsKKworCWJ0LT5zdGFydF9sYmEgPSBidXRzLnN0YXJ0X2xiYTsKKwlidC0+ZW5kX2xiYSA9IGJ1dHMuZW5kX2xiYTsKKwlpZiAoIWJ0LT5lbmRfbGJhKQorCQlidC0+ZW5kX2xiYSA9IC0xVUxMOworCisJYnQtPnBpZCA9IGJ1dHMucGlkOworCWJ0LT50cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwOworCisJcmV0ID0gLUVCVVNZOworCW9sZF9idCA9IHhjaGcoJnEtPmJsa190cmFjZSwgYnQpOworCWlmIChvbGRfYnQpIHsKKwkJKHZvaWQpIHhjaGcoJnEtPmJsa190cmFjZSwgb2xkX2J0KTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJaWYgKGRpcikKKwkJYmxrX3JlbW92ZV90cmVlKGRpcik7CisJaWYgKGJ0KSB7CisJCWlmIChidC0+ZHJvcHBlZF9maWxlKQorCQkJZGVidWdmc19yZW1vdmUoYnQtPmRyb3BwZWRfZmlsZSk7CisJCWlmIChidC0+c2VxdWVuY2UpCisJCQlmcmVlX3BlcmNwdShidC0+c2VxdWVuY2UpOworCQlpZiAoYnQtPnJjaGFuKQorCQkJcmVsYXlfY2xvc2UoYnQtPnJjaGFuKTsKKwkJa2ZyZWUoYnQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJsa190cmFjZV9zdGFydHN0b3AocmVxdWVzdF9xdWV1ZV90ICpxLCBpbnQgc3RhcnQpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQ7CisJaW50IHJldDsKKworCWlmICgoYnQgPSBxLT5ibGtfdHJhY2UpID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBGb3Igc3RhcnRpbmcgYSB0cmFjZSwgd2UgY2FuIHRyYW5zaXRpb24gZnJvbSBhIHNldHVwIG9yIHN0b3BwZWQKKwkgKiB0cmFjZS4gRm9yIHN0b3BwaW5nIGEgdHJhY2UsIHRoZSBzdGF0ZSBtdXN0IGJlIHJ1bm5pbmcKKwkgKi8KKwlyZXQgPSAtRUlOVkFMOworCWlmIChzdGFydCkgeworCQlpZiAoYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3NldHVwIHx8CisJCSAgICBidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2Vfc3RvcHBlZCkgeworCQkJYmxrdHJhY2Vfc2VxKys7CisJCQlzbXBfbWIoKTsKKwkJCWJ0LT50cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3J1bm5pbmc7CisJCQlyZXQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9ydW5uaW5nKSB7CisJCQlidC0+dHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9zdG9wcGVkOworCQkJcmVsYXlfZmx1c2goYnQtPnJjaGFuKTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGJsa190cmFjZV9pb2N0bDogLSBoYW5kbGUgdGhlIGlvY3RscyBhc3NvY2lhdGVkIHdpdGggdHJhY2luZworICogQGJkZXY6CXRoZSBibG9jayBkZXZpY2UKKyAqIEBjbWQ6IAl0aGUgaW9jdGwgY21kCisgKiBAYXJnOgl0aGUgYXJndW1lbnQgZGF0YSwgaWYgYW55CisgKgorICoqLworaW50IGJsa190cmFjZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBjbWQsIGNoYXIgX191c2VyICphcmcpCit7CisJcmVxdWVzdF9xdWV1ZV90ICpxOworCWludCByZXQsIHN0YXJ0ID0gMDsKKworCXEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKwlpZiAoIXEpCisJCXJldHVybiAtRU5YSU87CisKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQkxLVFJBQ0VTRVRVUDoKKwkJcmV0ID0gYmxrX3RyYWNlX3NldHVwKHEsIGJkZXYsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgQkxLVFJBQ0VTVEFSVDoKKwkJc3RhcnQgPSAxOworCWNhc2UgQkxLVFJBQ0VTVE9QOgorCQlyZXQgPSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KTsKKwkJYnJlYWs7CisJY2FzZSBCTEtUUkFDRVRFQVJET1dOOgorCQlyZXQgPSBibGtfdHJhY2VfcmVtb3ZlKHEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PVFRZOworCQlicmVhazsKKwl9CisKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGJsa190cmFjZV9zaHV0ZG93bjogLSBzdG9wIGFuZCBjbGVhbnVwIHRyYWNlIHN0cnVjdHVyZXMKKyAqIEBxOiAgICB0aGUgcmVxdWVzdCBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZQorICoKKyAqKi8KK3ZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHJlcXVlc3RfcXVldWVfdCAqcSkKK3sKKwlibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIDApOworCWJsa190cmFjZV9yZW1vdmUocSk7Cit9CisKKy8qCisgKiBBdmVyYWdlIG9mZnNldCBvdmVyIHR3byBjYWxscyB0byBzY2hlZF9jbG9jaygpIHdpdGggYSBnZXR0aW1lb2ZkYXkoKQorICogaW4gdGhlIG1pZGRsZQorICovCitzdGF0aWMgdm9pZCBibGtfY2hlY2tfdGltZSh1bnNpZ25lZCBsb25nIGxvbmcgKnQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGEsIGI7CisJc3RydWN0IHRpbWV2YWwgdHY7CisKKwlhID0gc2NoZWRfY2xvY2soKTsKKwlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKKwliID0gc2NoZWRfY2xvY2soKTsKKworCSp0ID0gdHYudHZfc2VjICogMTAwMDAwMDAwMCArIHR2LnR2X3VzZWMgKiAxMDAwOworCSp0IC09IChhICsgYikgLyAyOworfQorCitzdGF0aWMgdm9pZCBibGtfdHJhY2VfY2hlY2tfY3B1X3RpbWUodm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgKnQ7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKworCXQgPSAmcGVyX2NwdShibGtfdHJhY2VfY3B1X29mZnNldCwgY3B1KTsKKworCS8qCisJICogSnVzdCBjYWxsIGl0IHR3aWNlLCBob3BlZnVsbHkgdGhlIHNlY29uZCBjYWxsIHdpbGwgYmUgY2FjaGUgaG90CisJICogYW5kIGEgbGl0dGxlIG1vcmUgcHJlY2lzZQorCSAqLworCWJsa19jaGVja190aW1lKHQpOworCWJsa19jaGVja190aW1lKHQpOworCisJcHV0X2NwdSgpOworfQorCisvKgorICogQ2FsbCBibGtfdHJhY2VfY2hlY2tfY3B1X3RpbWUoKSBvbiBlYWNoIENQVSB0byBjYWxpYnJhdGUgb3VyIGludGVyLUNQVQorICogdGltaW5ncworICovCitzdGF0aWMgdm9pZCBibGtfdHJhY2VfY2FsaWJyYXRlX29mZnNldHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc21wX2NhbGxfZnVuY3Rpb24oYmxrX3RyYWNlX2NoZWNrX2NwdV90aW1lLCBOVUxMLCAxLCAxKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJYmxrX3RyYWNlX2NoZWNrX2NwdV90aW1lKE5VTEwpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldF9odF9vZmZzZXRzKHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQorCWludCBjcHUsIGk7CisKKwkvKgorCSAqIG5vdyBtYWtlIHN1cmUgSFQgc2libGluZ3MgaGF2ZSB0aGUgc2FtZSB0aW1lIG9mZnNldAorCSAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyAqY3B1X29mZiwgKnNpYmxpbmdfb2ZmOworCisJCWZvcl9lYWNoX2NwdV9tYXNrKGksIGNwdV9zaWJsaW5nX21hcFtjcHVdKSB7CisJCQlpZiAoaSA9PSBjcHUpCisJCQkJY29udGludWU7CisKKwkJCWNwdV9vZmYgPSAmcGVyX2NwdShibGtfdHJhY2VfY3B1X29mZnNldCwgY3B1KTsKKwkJCXNpYmxpbmdfb2ZmID0gJnBlcl9jcHUoYmxrX3RyYWNlX2NwdV9vZmZzZXQsIGkpOworCQkJKnNpYmxpbmdfb2ZmID0gKmNwdV9vZmY7CisJCX0KKwl9CisJcHJlZW1wdF9lbmFibGUoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgX19pbml0IGludCBibGtfdHJhY2VfaW5pdCh2b2lkKQoreworCW11dGV4X2luaXQoJmJsa190cmVlX211dGV4KTsKKwlibGtfdHJhY2VfY2FsaWJyYXRlX29mZnNldHMoKTsKKwlibGtfdHJhY2Vfc2V0X2h0X29mZnNldHMoKTsKKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChibGtfdHJhY2VfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDc0ZmFlMmQuLmM0YTBkNWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtNiwyMSArNiwxMyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvZWxldmF0b3IuaD4KLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZWxldmF0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcHJpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogCiAvKgogICogdHVuYWJsZXMKQEAgLTQ3LDYgKzM5LDggQEAKICAqLwogc3RhdGljIGNvbnN0IGludCBjZnFfbWF4X2RlcHRoID0gMjsKIAorc3RhdGljIERFRklORV9SV0xPQ0soY2ZxX2V4aXRfbG9jayk7CisKIC8qCiAgKiBmb3IgdGhlIGhhc2ggb2YgY2ZxcSBpbnNpZGUgdGhlIGNmcWQKICAqLwpAQCAtODksNiArODMsOSBAQAogc3RhdGljIGttZW1fY2FjaGVfdCAqY2ZxX3Bvb2w7CiBzdGF0aWMga21lbV9jYWNoZV90ICpjZnFfaW9jX3Bvb2w7CiAKK3N0YXRpYyBhdG9taWNfdCBpb2NfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiAqaW9jX2dvbmU7CisKICNkZWZpbmUgQ0ZRX1BSSU9fTElTVFMJCUlPUFJJT19CRV9OUgogI2RlZmluZSBjZnFfY2xhc3NfaWRsZShjZnFxKQkoKGNmcXEpLT5pb3ByaW9fY2xhc3MgPT0gSU9QUklPX0NMQVNTX0lETEUpCiAjZGVmaW5lIGNmcV9jbGFzc19iZShjZnFxKQkoKGNmcXEpLT5pb3ByaW9fY2xhc3MgPT0gSU9QUklPX0NMQVNTX0JFKQpAQCAtMTA5LDcgKzEwNiw2IEBACiAgKiBQZXIgYmxvY2sgZGV2aWNlIHF1ZXVlIHN0cnVjdHVyZQogICovCiBzdHJ1Y3QgY2ZxX2RhdGEgewotCWF0b21pY190IHJlZjsKIAlyZXF1ZXN0X3F1ZXVlX3QgKnF1ZXVlOwogCiAJLyoKQEAgLTE3NSw2ICsxNzEsOCBAQAogCXVuc2lnbmVkIGludCBjZnFfc2xpY2VfYXN5bmNfcnE7CiAJdW5zaWduZWQgaW50IGNmcV9zbGljZV9pZGxlOwogCXVuc2lnbmVkIGludCBjZnFfbWF4X2RlcHRoOworCisJc3RydWN0IGxpc3RfaGVhZCBjaWNfbGlzdDsKIH07CiAKIC8qCkBAIC0yMzksNyArMjM3LDYgQEAKIAlDRlFfQ0ZRUV9GTEFHX2ZpZm9fZXhwaXJlLAogCUNGUV9DRlFRX0ZMQUdfaWRsZV93aW5kb3csCiAJQ0ZRX0NGUVFfRkxBR19wcmlvX2NoYW5nZWQsCi0JQ0ZRX0NGUVFfRkxBR19leHBpcmVkLAogfTsKIAogI2RlZmluZSBDRlFfQ0ZRUV9GTlMobmFtZSkJCQkJCQlcCkBAIC0yNjQsNyArMjYxLDYgQEAKIENGUV9DRlFRX0ZOUyhmaWZvX2V4cGlyZSk7CiBDRlFfQ0ZRUV9GTlMoaWRsZV93aW5kb3cpOwogQ0ZRX0NGUVFfRk5TKHByaW9fY2hhbmdlZCk7Ci1DRlFfQ0ZRUV9GTlMoZXhwaXJlZCk7CiAjdW5kZWYgQ0ZRX0NGUVFfRk5TCiAKIGVudW0gY2ZxX3JxX3N0YXRlX2ZsYWdzIHsKQEAgLTI5MCw3ICsyODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX2ZpbmRfY2ZxX2hhc2goc3RydWN0IGNmcV9kYXRhICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgc2hvcnQpOwogc3RhdGljIHZvaWQgY2ZxX2Rpc3BhdGNoX2luc2VydChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGNmcV9ycSAqKTsKLXN0YXRpYyB2b2lkIGNmcV9wdXRfY2ZxZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQpOworc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9nZXRfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCB1bnNpZ25lZCBpbnQga2V5LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgZ2ZwX3QgZ2ZwX21hc2spOwogCiAjZGVmaW5lIHByb2Nlc3Nfc3luYyh0c2spCSgodHNrKS0+ZmxhZ3MgJiBQRl9TWU5DV1JJVEUpCiAKQEAgLTMzNiw3ICszMzIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2ZxX3NjaGVkdWxlX2Rpc3BhdGNoKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCkKIHsKLQlpZiAoIWNmcWQtPnJxX2luX2RyaXZlciAmJiBjZnFkLT5idXN5X3F1ZXVlcykKKwlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMpCiAJCWtibG9ja2Rfc2NoZWR1bGVfd29yaygmY2ZxZC0+dW5wbHVnX3dvcmspOwogfQogCkBAIC03MzYsMTMgKzczMiw2MyBAQAogCQljZnFxLT5zbGljZV9sZWZ0ID0gMDsKIAkJY2ZxX2NsZWFyX2NmcXFfbXVzdF9hbGxvY19zbGljZShjZnFxKTsKIAkJY2ZxX2NsZWFyX2NmcXFfZmlmb19leHBpcmUoY2ZxcSk7Ci0JCWNmcV9jbGVhcl9jZnFxX2V4cGlyZWQoY2ZxcSk7CiAJfQogCiAJY2ZxZC0+YWN0aXZlX3F1ZXVlID0gY2ZxcTsKIH0KIAogLyoKKyAqIGN1cnJlbnQgY2ZxcSBleHBpcmVkIGl0cyBzbGljZSAob3Igd2FzIHRvbyBpZGxlKSwgc2VsZWN0IG5ldyBvbmUKKyAqLworc3RhdGljIHZvaWQKK19fY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAorCQkgICAgaW50IHByZWVtcHRlZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisKKwlpZiAoY2ZxX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpKQorCQlkZWxfdGltZXIoJmNmcWQtPmlkbGVfc2xpY2VfdGltZXIpOworCisJaWYgKCFwcmVlbXB0ZWQgJiYgIWNmcV9jZnFxX2Rpc3BhdGNoZWQoY2ZxcSkpIHsKKwkJY2ZxcS0+c2VydmljZV9sYXN0ID0gbm93OworCQljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7CisJfQorCisJY2ZxX2NsZWFyX2NmcXFfbXVzdF9kaXNwYXRjaChjZnFxKTsKKwljZnFfY2xlYXJfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7CisKKwkvKgorCSAqIHN0b3JlIHdoYXQgd2FzIGxlZnQgb2YgdGhpcyBzbGljZSwgaWYgdGhlIHF1ZXVlIGlkbGVkIG91dAorCSAqIG9yIHdhcyBwcmVlbXB0ZWQKKwkgKi8KKwlpZiAodGltZV9hZnRlcihjZnFxLT5zbGljZV9lbmQsIG5vdykpCisJCWNmcXEtPnNsaWNlX2xlZnQgPSBjZnFxLT5zbGljZV9lbmQgLSBub3c7CisJZWxzZQorCQljZnFxLT5zbGljZV9sZWZ0ID0gMDsKKworCWlmIChjZnFfY2ZxcV9vbl9ycihjZnFxKSkKKwkJY2ZxX3Jlc29ydF9ycl9saXN0KGNmcXEsIHByZWVtcHRlZCk7CisKKwlpZiAoY2ZxcSA9PSBjZnFkLT5hY3RpdmVfcXVldWUpCisJCWNmcWQtPmFjdGl2ZV9xdWV1ZSA9IE5VTEw7CisKKwlpZiAoY2ZxZC0+YWN0aXZlX2NpYykgeworCQlwdXRfaW9fY29udGV4dChjZnFkLT5hY3RpdmVfY2ljLT5pb2MpOworCQljZnFkLT5hY3RpdmVfY2ljID0gTlVMTDsKKwl9CisKKwljZnFkLT5kaXNwYXRjaF9zbGljZSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjZnFfc2xpY2VfZXhwaXJlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCBwcmVlbXB0ZWQpCit7CisJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKKworCWlmIChjZnFxKQorCQlfX2NmcV9zbGljZV9leHBpcmVkKGNmcWQsIGNmcXEsIHByZWVtcHRlZCk7Cit9CisKKy8qCiAgKiAwCiAgKiAwLDEKICAqIDAsMSwyCkBAIC04MDEsMTYgKzg0Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFfc2V0X2FjdGl2ZV9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQpCiB7Ci0Jc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKLQotCS8qCi0JICogaWYgY3VycmVudCBxdWV1ZSBpcyBleHBpcmVkIGJ1dCBub3QgZG9uZSB3aXRoIGl0cyByZXF1ZXN0cyB5ZXQsCi0JICogd2FpdCBmb3IgdGhhdCB0byBoYXBwZW4KLQkgKi8KLQlpZiAoKGNmcXEgPSBjZnFkLT5hY3RpdmVfcXVldWUpICE9IE5VTEwpIHsKLQkJaWYgKGNmcV9jZnFxX2V4cGlyZWQoY2ZxcSkgJiYgY2ZxX2NmcXFfZGlzcGF0Y2hlZChjZnFxKSkKLQkJCXJldHVybiBOVUxMOwotCX0KKwlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gTlVMTDsKIAogCS8qCiAJICogaWYgY3VycmVudCBsaXN0IGlzIG5vbi1lbXB0eSwgZ3JhYiBmaXJzdCBlbnRyeS4gaWYgaXQgaXMgZW1wdHksCkBAIC04MzcsNjYgKzg3NCwxMSBAQAogCXJldHVybiBjZnFxOwogfQogCi0vKgotICogY3VycmVudCBjZnFxIGV4cGlyZWQgaXRzIHNsaWNlIChvciB3YXMgdG9vIGlkbGUpLCBzZWxlY3QgbmV3IG9uZQotICovCi1zdGF0aWMgdm9pZAotX19jZnFfc2xpY2VfZXhwaXJlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCi0JCSAgICBpbnQgcHJlZW1wdGVkKQotewotCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQotCWlmIChjZnFfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSkpCi0JCWRlbF90aW1lcigmY2ZxZC0+aWRsZV9zbGljZV90aW1lcik7Ci0KLQlpZiAoIXByZWVtcHRlZCAmJiAhY2ZxX2NmcXFfZGlzcGF0Y2hlZChjZnFxKSkKLQkJY2ZxcS0+c2VydmljZV9sYXN0ID0gbm93OwotCi0JY2ZxX2NsZWFyX2NmcXFfbXVzdF9kaXNwYXRjaChjZnFxKTsKLQljZnFfY2xlYXJfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7Ci0KLQkvKgotCSAqIHN0b3JlIHdoYXQgd2FzIGxlZnQgb2YgdGhpcyBzbGljZSwgaWYgdGhlIHF1ZXVlIGlkbGVkIG91dAotCSAqIG9yIHdhcyBwcmVlbXB0ZWQKLQkgKi8KLQlpZiAodGltZV9hZnRlcihjZnFxLT5zbGljZV9lbmQsIG5vdykpCi0JCWNmcXEtPnNsaWNlX2xlZnQgPSBjZnFxLT5zbGljZV9lbmQgLSBub3c7Ci0JZWxzZQotCQljZnFxLT5zbGljZV9sZWZ0ID0gMDsKLQotCWlmIChjZnFfY2ZxcV9vbl9ycihjZnFxKSkKLQkJY2ZxX3Jlc29ydF9ycl9saXN0KGNmcXEsIHByZWVtcHRlZCk7Ci0KLQlpZiAoY2ZxcSA9PSBjZnFkLT5hY3RpdmVfcXVldWUpCi0JCWNmcWQtPmFjdGl2ZV9xdWV1ZSA9IE5VTEw7Ci0KLQlpZiAoY2ZxZC0+YWN0aXZlX2NpYykgewotCQlwdXRfaW9fY29udGV4dChjZnFkLT5hY3RpdmVfY2ljLT5pb2MpOwotCQljZnFkLT5hY3RpdmVfY2ljID0gTlVMTDsKLQl9Ci0KLQljZnFkLT5kaXNwYXRjaF9zbGljZSA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjZnFfc2xpY2VfZXhwaXJlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCBwcmVlbXB0ZWQpCi17Ci0Jc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKLQotCWlmIChjZnFxKSB7Ci0JCS8qCi0JCSAqIHVzZSBkZWZlcnJlZCBleHBpcnksIGlmIHRoZXJlIGFyZSByZXF1ZXN0cyBpbiBwcm9ncmVzcyBhcwotCQkgKiBub3QgdG8gZGlzdHVyYiB0aGUgc2xpY2Ugb2YgdGhlIG5leHQgcXVldWUKLQkJICovCi0JCWlmIChjZnFfY2ZxcV9kaXNwYXRjaGVkKGNmcXEpKQotCQkJY2ZxX21hcmtfY2ZxcV9leHBpcmVkKGNmcXEpOwotCQllbHNlCi0JCQlfX2NmcV9zbGljZV9leHBpcmVkKGNmcWQsIGNmcXEsIHByZWVtcHRlZCk7Ci0JfQotfQotCiBzdGF0aWMgaW50IGNmcV9hcm1fc2xpY2VfdGltZXIoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogCiB7CisJdW5zaWduZWQgbG9uZyBzbDsKKwogCVdBUk5fT04oIVJCX0VNUFRZKCZjZnFxLT5zb3J0X2xpc3QpKTsKIAlXQVJOX09OKGNmcXEgIT0gY2ZxZC0+YWN0aXZlX3F1ZXVlKTsKIApAQCAtOTE2LDEzICs4OTgsOCBAQAogCWNmcV9tYXJrX2NmcXFfbXVzdF9kaXNwYXRjaChjZnFxKTsKIAljZnFfbWFya19jZnFxX3dhaXRfcmVxdWVzdChjZnFxKTsKIAotCWlmICghdGltZXJfcGVuZGluZygmY2ZxZC0+aWRsZV9zbGljZV90aW1lcikpIHsKLQkJdW5zaWduZWQgbG9uZyBzbGljZV9sZWZ0ID0gbWluKGNmcXEtPnNsaWNlX2VuZCAtIDEsICh1bnNpZ25lZCBsb25nKSBjZnFkLT5jZnFfc2xpY2VfaWRsZSk7Ci0KLQkJY2ZxZC0+aWRsZV9zbGljZV90aW1lci5leHBpcmVzID0gamlmZmllcyArIHNsaWNlX2xlZnQ7Ci0JCWFkZF90aW1lcigmY2ZxZC0+aWRsZV9zbGljZV90aW1lcik7Ci0JfQotCisJc2wgPSBtaW4oY2ZxcS0+c2xpY2VfZW5kIC0gMSwgKHVuc2lnbmVkIGxvbmcpIGNmcWQtPmNmcV9zbGljZV9pZGxlKTsKKwltb2RfdGltZXIoJmNmcWQtPmlkbGVfc2xpY2VfdGltZXIsIGppZmZpZXMgKyBzbCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEwMDYsOSArOTgzLDYgQEAKIAlpZiAoIWNmcXEpCiAJCWdvdG8gbmV3X3F1ZXVlOwogCi0JaWYgKGNmcV9jZnFxX2V4cGlyZWQoY2ZxcSkpCi0JCWdvdG8gbmV3X3F1ZXVlOwotCiAJLyoKIAkgKiBzbGljZSBoYXMgZXhwaXJlZAogCSAqLwpAQCAtMTE4MSwxMiArMTE1NSw4IEBACiAJQlVHX09OKGNmcXEtPmFsbG9jYXRlZFtSRUFEXSArIGNmcXEtPmFsbG9jYXRlZFtXUklURV0pOwogCUJVR19PTihjZnFfY2ZxcV9vbl9ycihjZnFxKSk7CiAKLQlpZiAodW5saWtlbHkoY2ZxZC0+YWN0aXZlX3F1ZXVlID09IGNmcXEpKSB7CisJaWYgKHVubGlrZWx5KGNmcWQtPmFjdGl2ZV9xdWV1ZSA9PSBjZnFxKSkKIAkJX19jZnFfc2xpY2VfZXhwaXJlZChjZnFkLCBjZnFxLCAwKTsKLQkJY2ZxX3NjaGVkdWxlX2Rpc3BhdGNoKGNmcWQpOwotCX0KLQotCWNmcV9wdXRfY2ZxZChjZnFxLT5jZnFkKTsKIAogCS8qCiAJICogaXQncyBvbiB0aGUgZW1wdHkgbGlzdCBhbmQgc3RpbGwgaGFzaGVkCkBAIC0xMjA1LDcgKzExNzUsNyBAQAogCiAJaGxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgaGFzaF9saXN0KSB7CiAJCXN0cnVjdCBjZnFfcXVldWUgKl9fY2ZxcSA9IGxpc3RfZW50cnlfcWhhc2goZW50cnkpOwotCQljb25zdCB1bnNpZ25lZCBzaG9ydCBfX3AgPSBJT1BSSU9fUFJJT19WQUxVRShfX2NmcXEtPmlvcHJpb19jbGFzcywgX19jZnFxLT5pb3ByaW8pOworCQljb25zdCB1bnNpZ25lZCBzaG9ydCBfX3AgPSBJT1BSSU9fUFJJT19WQUxVRShfX2NmcXEtPm9yZ19pb3ByaW9fY2xhc3MsIF9fY2ZxcS0+b3JnX2lvcHJpbyk7CiAKIAkJaWYgKF9fY2ZxcS0+a2V5ID09IGtleSAmJiAoX19wID09IHByaW8gfHwgcHJpbyA9PSBDRlFfS0VZX0FOWSkpCiAJCQlyZXR1cm4gX19jZnFxOwpAQCAtMTIyNCwxMyArMTE5NCwyNCBAQAogewogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqX19jaWM7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpuZXh0OworCWludCBmcmVlZCA9IDE7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsICZjaWMtPmxpc3QpIHsKIAkJX19jaWMgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsIGxpc3QpOwogCQlrbWVtX2NhY2hlX2ZyZWUoY2ZxX2lvY19wb29sLCBfX2NpYyk7CisJCWZyZWVkKys7CiAJfQogCiAJa21lbV9jYWNoZV9mcmVlKGNmcV9pb2NfcG9vbCwgY2ljKTsKKwlpZiAoYXRvbWljX3N1Yl9hbmRfdGVzdChmcmVlZCwgJmlvY19jb3VudCkgJiYgaW9jX2dvbmUpCisJCWNvbXBsZXRlKGlvY19nb25lKTsKK30KKworc3RhdGljIHZvaWQgY2ZxX3RyaW0oc3RydWN0IGlvX2NvbnRleHQgKmlvYykKK3sKKwlpb2MtPnNldF9pb3ByaW8gPSBOVUxMOworCWlmIChpb2MtPmNpYykKKwkJY2ZxX2ZyZWVfaW9fY29udGV4dChpb2MtPmNpYyk7CiB9CiAKIC8qCkBAIC0xMjM4LDI3ICsxMjE5LDM3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNmcV9leGl0X3NpbmdsZV9pb19jb250ZXh0KHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljKQogewotCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IGNpYy0+Y2ZxcS0+Y2ZxZDsKLQlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSBjZnFkLT5xdWV1ZTsKKwlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBjaWMtPmtleTsKKwlyZXF1ZXN0X3F1ZXVlX3QgKnE7CisKKwlpZiAoIWNmcWQpCisJCXJldHVybjsKKworCXEgPSBjZnFkLT5xdWV1ZTsKIAogCVdBUk5fT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKIAlzcGluX2xvY2socS0+cXVldWVfbG9jayk7CiAKLQlpZiAodW5saWtlbHkoY2ljLT5jZnFxID09IGNmcWQtPmFjdGl2ZV9xdWV1ZSkpIHsKLQkJX19jZnFfc2xpY2VfZXhwaXJlZChjZnFkLCBjaWMtPmNmcXEsIDApOwotCQljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7CisJaWYgKGNpYy0+Y2ZxcVtBU1lOQ10pIHsKKwkJaWYgKHVubGlrZWx5KGNpYy0+Y2ZxcVtBU1lOQ10gPT0gY2ZxZC0+YWN0aXZlX3F1ZXVlKSkKKwkJCV9fY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgY2ljLT5jZnFxW0FTWU5DXSwgMCk7CisJCWNmcV9wdXRfcXVldWUoY2ljLT5jZnFxW0FTWU5DXSk7CisJCWNpYy0+Y2ZxcVtBU1lOQ10gPSBOVUxMOwogCX0KIAotCWNmcV9wdXRfcXVldWUoY2ljLT5jZnFxKTsKLQljaWMtPmNmcXEgPSBOVUxMOworCWlmIChjaWMtPmNmcXFbU1lOQ10pIHsKKwkJaWYgKHVubGlrZWx5KGNpYy0+Y2ZxcVtTWU5DXSA9PSBjZnFkLT5hY3RpdmVfcXVldWUpKQorCQkJX19jZnFfc2xpY2VfZXhwaXJlZChjZnFkLCBjaWMtPmNmcXFbU1lOQ10sIDApOworCQljZnFfcHV0X3F1ZXVlKGNpYy0+Y2ZxcVtTWU5DXSk7CisJCWNpYy0+Y2ZxcVtTWU5DXSA9IE5VTEw7CisJfQorCisJY2ljLT5rZXkgPSBOVUxMOworCWxpc3RfZGVsX2luaXQoJmNpYy0+cXVldWVfbGlzdCk7CiAJc3Bpbl91bmxvY2socS0+cXVldWVfbG9jayk7CiB9CiAKLS8qCi0gKiBBbm90aGVyIHRhc2sgbWF5IHVwZGF0ZSB0aGUgdGFzayBjaWMgbGlzdCwgaWYgaXQgaXMgZG9pbmcgYSBxdWV1ZSBsb29rdXAKLSAqIG9uIGl0cyBiZWhhbGYuIGNmcV9jaWNfbG9jayBleGNsdWRlcyBzdWNoIGNvbmN1cnJlbnQgdXBkYXRlcwotICovCiBzdGF0aWMgdm9pZCBjZnFfZXhpdF9pb19jb250ZXh0KHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljKQogewogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqX19jaWM7CkBAIC0xMjcwLDEyICsxMjYxLDE0IEBACiAJLyoKIAkgKiBwdXQgdGhlIHJlZmVyZW5jZSB0aGlzIHRhc2sgaXMgaG9sZGluZyB0byB0aGUgdmFyaW91cyBxdWV1ZXMKIAkgKi8KKwlyZWFkX2xvY2soJmNmcV9leGl0X2xvY2spOwogCWxpc3RfZm9yX2VhY2goZW50cnksICZjaWMtPmxpc3QpIHsKIAkJX19jaWMgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsIGxpc3QpOwogCQljZnFfZXhpdF9zaW5nbGVfaW9fY29udGV4dChfX2NpYyk7CiAJfQogCiAJY2ZxX2V4aXRfc2luZ2xlX2lvX2NvbnRleHQoY2ljKTsKKwlyZWFkX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0xMjg2LDcgKzEyNzksOCBAQAogCiAJaWYgKGNpYykgewogCQlJTklUX0xJU1RfSEVBRCgmY2ljLT5saXN0KTsKLQkJY2ljLT5jZnFxID0gTlVMTDsKKwkJY2ljLT5jZnFxW0FTWU5DXSA9IE5VTEw7CisJCWNpYy0+Y2ZxcVtTWU5DXSA9IE5VTEw7CiAJCWNpYy0+a2V5ID0gTlVMTDsKIAkJY2ljLT5sYXN0X2VuZF9yZXF1ZXN0ID0gamlmZmllczsKIAkJY2ljLT50dGltZV90b3RhbCA9IDA7CkBAIC0xMjk0LDYgKzEyODgsOCBAQAogCQljaWMtPnR0aW1lX21lYW4gPSAwOwogCQljaWMtPmR0b3IgPSBjZnFfZnJlZV9pb19jb250ZXh0OwogCQljaWMtPmV4aXQgPSBjZnFfZXhpdF9pb19jb250ZXh0OworCQlJTklUX0xJU1RfSEVBRCgmY2ljLT5xdWV1ZV9saXN0KTsKKwkJYXRvbWljX2luYygmaW9jX2NvdW50KTsKIAl9CiAKIAlyZXR1cm4gY2ljOwpAQCAtMTM0NiwxNCArMTM0MiwyNyBAQAogCWNmcV9jbGVhcl9jZnFxX3ByaW9fY2hhbmdlZChjZnFxKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZWRfaW9wcmlvKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlZF9pb3ByaW8oc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMpCiB7Ci0JaWYgKGNmcXEpIHsKLQkJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gY2ZxcS0+Y2ZxZDsKLQorCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IGNpYy0+a2V5OworCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CisJaWYgKGNmcWQpIHsKIAkJc3Bpbl9sb2NrKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKLQkJY2ZxX21hcmtfY2ZxcV9wcmlvX2NoYW5nZWQoY2ZxcSk7Ci0JCWNmcV9pbml0X3ByaW9fZGF0YShjZnFxKTsKKwkJY2ZxcSA9IGNpYy0+Y2ZxcVtBU1lOQ107CisJCWlmIChjZnFxKSB7CisJCQlzdHJ1Y3QgY2ZxX3F1ZXVlICpuZXdfY2ZxcTsKKwkJCW5ld19jZnFxID0gY2ZxX2dldF9xdWV1ZShjZnFkLCBDRlFfS0VZX0FTWU5DLAorCQkJCQkJY2ljLT5pb2MtPnRhc2ssIEdGUF9BVE9NSUMpOworCQkJaWYgKG5ld19jZnFxKSB7CisJCQkJY2ljLT5jZnFxW0FTWU5DXSA9IG5ld19jZnFxOworCQkJCWNmcV9wdXRfcXVldWUoY2ZxcSk7CisJCQl9CisJCX0KKwkJY2ZxcSA9IGNpYy0+Y2ZxcVtTWU5DXTsKKwkJaWYgKGNmcXEpIHsKKwkJCWNmcV9tYXJrX2NmcXFfcHJpb19jaGFuZ2VkKGNmcXEpOworCQkJY2ZxX2luaXRfcHJpb19kYXRhKGNmcXEpOworCQl9CiAJCXNwaW5fdW5sb2NrKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKIAl9CiB9CkBAIC0xMzYzLDI0ICsxMzcyLDMyIEBACiAgKi8KIHN0YXRpYyBpbnQgY2ZxX2lvY19zZXRfaW9wcmlvKHN0cnVjdCBpb19jb250ZXh0ICppb2MsIHVuc2lnbmVkIGludCBpb3ByaW8pCiB7Ci0Jc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBpb2MtPmNpYzsKKwlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKIAotCWNoYW5nZWRfaW9wcmlvKGNpYy0+Y2ZxcSk7CisJd3JpdGVfbG9jaygmY2ZxX2V4aXRfbG9jayk7CisKKwljaWMgPSBpb2MtPmNpYzsKKworCWNoYW5nZWRfaW9wcmlvKGNpYyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNpYywgJmNpYy0+bGlzdCwgbGlzdCkKLQkJY2hhbmdlZF9pb3ByaW8oY2ljLT5jZnFxKTsKKwkJY2hhbmdlZF9pb3ByaW8oY2ljKTsKKworCXdyaXRlX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKgotY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHVuc2lnbmVkIGludCBrZXksIHVuc2lnbmVkIHNob3J0IGlvcHJpbywKK2NmcV9nZXRfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCB1bnNpZ25lZCBpbnQga2V5LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkgICAgICBnZnBfdCBnZnBfbWFzaykKIHsKIAljb25zdCBpbnQgaGFzaHZhbCA9IGhhc2hfbG9uZyhrZXksIENGUV9RSEFTSF9TSElGVCk7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgKm5ld19jZnFxID0gTlVMTDsKKwl1bnNpZ25lZCBzaG9ydCBpb3ByaW87CiAKIHJldHJ5OgorCWlvcHJpbyA9IHRzay0+aW9wcmlvOwogCWNmcXEgPSBfX2NmcV9maW5kX2NmcV9oYXNoKGNmcWQsIGtleSwgaW9wcmlvLCBoYXNodmFsKTsKIAogCWlmICghY2ZxcSkgewpAQCAtMTQwOSw3ICsxNDI2LDYgQEAKIAkJaGxpc3RfYWRkX2hlYWQoJmNmcXEtPmNmcV9oYXNoLCAmY2ZxZC0+Y2ZxX2hhc2hbaGFzaHZhbF0pOwogCQlhdG9taWNfc2V0KCZjZnFxLT5yZWYsIDApOwogCQljZnFxLT5jZnFkID0gY2ZxZDsKLQkJYXRvbWljX2luYygmY2ZxZC0+cmVmKTsKIAkJY2ZxcS0+c2VydmljZV9sYXN0ID0gMDsKIAkJLyoKIAkJICogc2V0IC0+c2xpY2VfbGVmdCB0byBhbGxvdyBwcmVlbXB0aW9uIGZvciBhIG5ldyBwcm9jZXNzCkBAIC0xNDQ3LDYgKzE0NjMsNyBAQAogCWlmICghaW9jKQogCQlyZXR1cm4gTlVMTDsKIAorcmVzdGFydDoKIAlpZiAoKGNpYyA9IGlvYy0+Y2ljKSA9PSBOVUxMKSB7CiAJCWNpYyA9IGNmcV9hbGxvY19pb19jb250ZXh0KGNmcWQsIGdmcF9tYXNrKTsKIApAQCAtMTQ1NywxMSArMTQ3NCwxMyBAQAogCQkgKiBtYW51YWxseSBpbmNyZW1lbnQgZ2VuZXJpYyBpb19jb250ZXh0IHVzYWdlIGNvdW50LCBpdAogCQkgKiBjYW5ub3QgZ28gYXdheSBzaW5jZSB3ZSBhcmUgYWxyZWFkeSBob2xkaW5nIG9uZSByZWYgdG8gaXQKIAkJICovCi0JCWlvYy0+Y2ljID0gY2ljOwotCQlpb2MtPnNldF9pb3ByaW8gPSBjZnFfaW9jX3NldF9pb3ByaW87CiAJCWNpYy0+aW9jID0gaW9jOwogCQljaWMtPmtleSA9IGNmcWQ7Ci0JCWF0b21pY19pbmMoJmNmcWQtPnJlZik7CisJCXJlYWRfbG9jaygmY2ZxX2V4aXRfbG9jayk7CisJCWlvYy0+c2V0X2lvcHJpbyA9IGNmcV9pb2Nfc2V0X2lvcHJpbzsKKwkJaW9jLT5jaWMgPSBjaWM7CisJCWxpc3RfYWRkKCZjaWMtPnF1ZXVlX2xpc3QsICZjZnFkLT5jaWNfbGlzdCk7CisJCXJlYWRfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKl9fY2ljOwogCkBAIC0xNDcxLDYgKzE0OTAsMjAgQEAKIAkJaWYgKGNpYy0+a2V5ID09IGNmcWQpCiAJCQlnb3RvIG91dDsKIAorCQlpZiAodW5saWtlbHkoIWNpYy0+a2V5KSkgeworCQkJcmVhZF9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZjaWMtPmxpc3QpKQorCQkJCWlvYy0+Y2ljID0gTlVMTDsKKwkJCWVsc2UKKwkJCQlpb2MtPmNpYyA9IGxpc3RfZW50cnkoY2ljLT5saXN0Lm5leHQsCisJCQkJCQkgICAgICBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsCisJCQkJCQkgICAgICBsaXN0KTsKKwkJCXJlYWRfdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwkJCWttZW1fY2FjaGVfZnJlZShjZnFfaW9jX3Bvb2wsIGNpYyk7CisJCQlhdG9taWNfZGVjKCZpb2NfY291bnQpOworCQkJZ290byByZXN0YXJ0OworCQl9CisKIAkJLyoKIAkJICogY2ljIGV4aXN0cywgY2hlY2sgaWYgd2UgYWxyZWFkeSBhcmUgdGhlcmUuIGxpbmVhciBzZWFyY2gKIAkJICogc2hvdWxkIGJlIG9rIGhlcmUsIHRoZSBsaXN0IHdpbGwgdXN1YWxseSBub3QgYmUgbW9yZSB0aGFuCkBAIC0xNDg1LDYgKzE1MTgsMTQgQEAKIAkJCQljaWMgPSBfX2NpYzsKIAkJCQlnb3RvIG91dDsKIAkJCX0KKwkJCWlmICh1bmxpa2VseSghX19jaWMtPmtleSkpIHsKKwkJCQlyZWFkX2xvY2soJmNmcV9leGl0X2xvY2spOworCQkJCWxpc3RfZGVsKCZfX2NpYy0+bGlzdCk7CisJCQkJcmVhZF91bmxvY2soJmNmcV9leGl0X2xvY2spOworCQkJCWttZW1fY2FjaGVfZnJlZShjZnFfaW9jX3Bvb2wsIF9fY2ljKTsKKwkJCQlhdG9taWNfZGVjKCZpb2NfY291bnQpOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KIAkJfQogCiAJCS8qCkBAIC0xNDk3LDggKzE1MzgsMTAgQEAKIAogCQlfX2NpYy0+aW9jID0gaW9jOwogCQlfX2NpYy0+a2V5ID0gY2ZxZDsKLQkJYXRvbWljX2luYygmY2ZxZC0+cmVmKTsKKwkJcmVhZF9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKIAkJbGlzdF9hZGQoJl9fY2ljLT5saXN0LCAmY2ljLT5saXN0KTsKKwkJbGlzdF9hZGQoJl9fY2ljLT5xdWV1ZV9saXN0LCAmY2ZxZC0+Y2ljX2xpc3QpOworCQlyZWFkX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAJCWNpYyA9IF9fY2ljOwogCX0KIApAQCAtMTcxNSwxMCArMTc1OCw3IEBACiAJCQljZnFxLT5zZXJ2aWNlX2xhc3QgPSBub3c7CiAJCQljZnFfcmVzb3J0X3JyX2xpc3QoY2ZxcSwgMCk7CiAJCX0KLQkJaWYgKGNmcV9jZnFxX2V4cGlyZWQoY2ZxcSkpIHsKLQkJCV9fY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgY2ZxcSwgMCk7Ci0JCQljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7Ci0JCX0KKwkJY2ZxX3NjaGVkdWxlX2Rpc3BhdGNoKGNmcWQpOwogCX0KIAogCWlmIChjZnFfY3JxX2lzX3N5bmMoY3JxKSkKQEAgLTE5MjEsNiArMTk2MSw3IEBACiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKIAlzdHJ1Y3QgY2ZxX3JxICpjcnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaXNfc3luYyA9IGtleSAhPSBDRlFfS0VZX0FTWU5DOwogCiAJbWlnaHRfc2xlZXBfaWYoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKTsKIApAQCAtMTkzMSwxNCArMTk3MiwxNCBAQAogCWlmICghY2ljKQogCQlnb3RvIHF1ZXVlX2ZhaWw7CiAKLQlpZiAoIWNpYy0+Y2ZxcSkgewotCQljZnFxID0gY2ZxX2dldF9xdWV1ZShjZnFkLCBrZXksIHRzay0+aW9wcmlvLCBnZnBfbWFzayk7CisJaWYgKCFjaWMtPmNmcXFbaXNfc3luY10pIHsKKwkJY2ZxcSA9IGNmcV9nZXRfcXVldWUoY2ZxZCwga2V5LCB0c2ssIGdmcF9tYXNrKTsKIAkJaWYgKCFjZnFxKQogCQkJZ290byBxdWV1ZV9mYWlsOwogCi0JCWNpYy0+Y2ZxcSA9IGNmcXE7CisJCWNpYy0+Y2ZxcVtpc19zeW5jXSA9IGNmcXE7CiAJfSBlbHNlCi0JCWNmcXEgPSBjaWMtPmNmcXE7CisJCWNmcXEgPSBjaWMtPmNmcXFbaXNfc3luY107CiAKIAljZnFxLT5hbGxvY2F0ZWRbcnddKys7CiAJY2ZxX2NsZWFyX2NmcXFfbXVzdF9hbGxvYyhjZnFxKTsKQEAgLTE5NTUsNyArMTk5Niw3IEBACiAJCWNycS0+Y2ZxX3F1ZXVlID0gY2ZxcTsKIAkJY3JxLT5pb19jb250ZXh0ID0gY2ljOwogCi0JCWlmIChydyA9PSBSRUFEIHx8IHByb2Nlc3Nfc3luYyh0c2spKQorCQlpZiAoaXNfc3luYykKIAkJCWNmcV9tYXJrX2NycV9pc19zeW5jKGNycSk7CiAJCWVsc2UKIAkJCWNmcV9jbGVhcl9jcnFfaXNfc3luYyhjcnEpOwpAQCAtMjA4NiwxNSArMjEyNywzNSBAQAogCWJsa19zeW5jX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKIH0KIAotc3RhdGljIHZvaWQgY2ZxX3B1dF9jZnFkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCkKK3N0YXRpYyB2b2lkIGNmcV9leGl0X3F1ZXVlKGVsZXZhdG9yX3QgKmUpCiB7CisJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gZS0+ZWxldmF0b3JfZGF0YTsKIAlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSBjZnFkLT5xdWV1ZTsKIAotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmY2ZxZC0+cmVmKSkKLQkJcmV0dXJuOworCWNmcV9zaHV0ZG93bl90aW1lcl93cShjZnFkKTsKKwl3cml0ZV9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCWlmIChjZnFkLT5hY3RpdmVfcXVldWUpCisJCV9fY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgY2ZxZC0+YWN0aXZlX3F1ZXVlLCAwKTsKKwl3aGlsZSghbGlzdF9lbXB0eSgmY2ZxZC0+Y2ljX2xpc3QpKSB7CisJCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljID0gbGlzdF9lbnRyeShjZnFkLT5jaWNfbGlzdC5uZXh0LAorCQkJCQkJCXN0cnVjdCBjZnFfaW9fY29udGV4dCwKKwkJCQkJCQlxdWV1ZV9saXN0KTsKKwkJaWYgKGNpYy0+Y2ZxcVtBU1lOQ10pIHsKKwkJCWNmcV9wdXRfcXVldWUoY2ljLT5jZnFxW0FTWU5DXSk7CisJCQljaWMtPmNmcXFbQVNZTkNdID0gTlVMTDsKKwkJfQorCQlpZiAoY2ljLT5jZnFxW1NZTkNdKSB7CisJCQljZnFfcHV0X3F1ZXVlKGNpYy0+Y2ZxcVtTWU5DXSk7CisJCQljaWMtPmNmcXFbU1lOQ10gPSBOVUxMOworCQl9CisJCWNpYy0+a2V5ID0gTlVMTDsKKwkJbGlzdF9kZWxfaW5pdCgmY2ljLT5xdWV1ZV9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCXdyaXRlX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAKIAljZnFfc2h1dGRvd25fdGltZXJfd3EoY2ZxZCk7Ci0JYmxrX3B1dF9xdWV1ZShxKTsKIAogCW1lbXBvb2xfZGVzdHJveShjZnFkLT5jcnFfcG9vbCk7CiAJa2ZyZWUoY2ZxZC0+Y3JxX2hhc2gpOwpAQCAtMjEwMiwxNCArMjE2Myw2IEBACiAJa2ZyZWUoY2ZxZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNmcV9leGl0X3F1ZXVlKGVsZXZhdG9yX3QgKmUpCi17Ci0Jc3RydWN0IGNmcV9kYXRhICpjZnFkID0gZS0+ZWxldmF0b3JfZGF0YTsKLQotCWNmcV9zaHV0ZG93bl90aW1lcl93cShjZnFkKTsKLQljZnFfcHV0X2NmcWQoY2ZxZCk7Ci19Ci0KIHN0YXRpYyBpbnQgY2ZxX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZDsKQEAgLTIxMjgsNiArMjE4MSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNmcWQtPmN1cl9ycik7CiAJSU5JVF9MSVNUX0hFQUQoJmNmcWQtPmlkbGVfcnIpOwogCUlOSVRfTElTVF9IRUFEKCZjZnFkLT5lbXB0eV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2ZxZC0+Y2ljX2xpc3QpOwogCiAJY2ZxZC0+Y3JxX2hhc2ggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkgKiBDRlFfTUhBU0hfRU5UUklFUywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjZnFkLT5jcnFfaGFzaCkKQEAgLTIxNDksNyArMjIwMyw2IEBACiAJZS0+ZWxldmF0b3JfZGF0YSA9IGNmcWQ7CiAKIAljZnFkLT5xdWV1ZSA9IHE7Ci0JYXRvbWljX2luYygmcS0+cmVmY250KTsKIAogCWNmcWQtPm1heF9xdWV1ZWQgPSBxLT5ucl9yZXF1ZXN0cyAvIDQ7CiAJcS0+bnJfYmF0Y2hpbmcgPSBjZnFfcXVldWVkOwpAQCAtMjE2NCw4ICsyMjE3LDYgQEAKIAogCUlOSVRfV09SSygmY2ZxZC0+dW5wbHVnX3dvcmssIGNmcV9raWNrX3F1ZXVlLCBxKTsKIAotCWF0b21pY19zZXQoJmNmcWQtPnJlZiwgMSk7Ci0KIAljZnFkLT5jZnFfcXVldWVkID0gY2ZxX3F1ZXVlZDsKIAljZnFkLT5jZnFfcXVhbnR1bSA9IGNmcV9xdWFudHVtOwogCWNmcWQtPmNmcV9maWZvX2V4cGlyZVswXSA9IGNmcV9maWZvX2V4cGlyZVswXTsKQEAgLTIyMjQsMTEgKzIyNzUsNiBAQAogLyoKICAqIHN5c2ZzIHBhcnRzIGJlbG93IC0tPgogICovCi1zdHJ1Y3QgY2ZxX2ZzX2VudHJ5IHsKLQlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Ci0Jc3NpemVfdCAoKnNob3cpKHN0cnVjdCBjZnFfZGF0YSAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGNmcV9kYXRhICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLX07CiAKIHN0YXRpYyBzc2l6ZV90CiBjZnFfdmFyX3Nob3codW5zaWduZWQgaW50IHZhciwgY2hhciAqcGFnZSkKQEAgLTIyNDYsOCArMjI5Miw5IEBACiB9CiAKICNkZWZpbmUgU0hPV19GVU5DVElPTihfX0ZVTkMsIF9fVkFSLCBfX0NPTlYpCQkJCVwKLXN0YXRpYyBzc2l6ZV90IF9fRlVOQyhzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGNoYXIgKnBhZ2UpCQlcCitzdGF0aWMgc3NpemVfdCBfX0ZVTkMoZWxldmF0b3JfdCAqZSwgY2hhciAqcGFnZSkJCQlcCiB7CQkJCQkJCQkJXAorCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IGUtPmVsZXZhdG9yX2RhdGE7CQkJXAogCXVuc2lnbmVkIGludCBfX2RhdGEgPSBfX1ZBUjsJCQkJCVwKIAlpZiAoX19DT05WKQkJCQkJCQlcCiAJCV9fZGF0YSA9IGppZmZpZXNfdG9fbXNlY3MoX19kYXRhKTsJCQlcCkBAIC0yMjU3LDggKzIzMDQsOCBAQAogU0hPV19GVU5DVElPTihjZnFfcXVldWVkX3Nob3csIGNmcWQtPmNmcV9xdWV1ZWQsIDApOwogU0hPV19GVU5DVElPTihjZnFfZmlmb19leHBpcmVfc3luY19zaG93LCBjZnFkLT5jZnFfZmlmb19leHBpcmVbMV0sIDEpOwogU0hPV19GVU5DVElPTihjZnFfZmlmb19leHBpcmVfYXN5bmNfc2hvdywgY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlWzBdLCAxKTsKLVNIT1dfRlVOQ1RJT04oY2ZxX2JhY2tfbWF4X3Nob3csIGNmcWQtPmNmcV9iYWNrX21heCwgMCk7Ci1TSE9XX0ZVTkNUSU9OKGNmcV9iYWNrX3BlbmFsdHlfc2hvdywgY2ZxZC0+Y2ZxX2JhY2tfcGVuYWx0eSwgMCk7CitTSE9XX0ZVTkNUSU9OKGNmcV9iYWNrX3NlZWtfbWF4X3Nob3csIGNmcWQtPmNmcV9iYWNrX21heCwgMCk7CitTSE9XX0ZVTkNUSU9OKGNmcV9iYWNrX3NlZWtfcGVuYWx0eV9zaG93LCBjZnFkLT5jZnFfYmFja19wZW5hbHR5LCAwKTsKIFNIT1dfRlVOQ1RJT04oY2ZxX3NsaWNlX2lkbGVfc2hvdywgY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUsIDEpOwogU0hPV19GVU5DVElPTihjZnFfc2xpY2Vfc3luY19zaG93LCBjZnFkLT5jZnFfc2xpY2VbMV0sIDEpOwogU0hPV19GVU5DVElPTihjZnFfc2xpY2VfYXN5bmNfc2hvdywgY2ZxZC0+Y2ZxX3NsaWNlWzBdLCAxKTsKQEAgLTIyNjcsOCArMjMxNCw5IEBACiAjdW5kZWYgU0hPV19GVU5DVElPTgogCiAjZGVmaW5lIFNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBfX0NPTlYpCQkJXAotc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQlcCitzdGF0aWMgc3NpemVfdCBfX0ZVTkMoZWxldmF0b3JfdCAqZSwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQlcCiB7CQkJCQkJCQkJXAorCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IGUtPmVsZXZhdG9yX2RhdGE7CQkJXAogCXVuc2lnbmVkIGludCBfX2RhdGE7CQkJCQkJXAogCWludCByZXQgPSBjZnFfdmFyX3N0b3JlKCZfX2RhdGEsIChwYWdlKSwgY291bnQpOwkJXAogCWlmIChfX2RhdGEgPCAoTUlOKSkJCQkJCQlcCkBAIC0yMjg1LDggKzIzMzMsOCBAQAogU1RPUkVfRlVOQ1RJT04oY2ZxX3F1ZXVlZF9zdG9yZSwgJmNmcWQtPmNmcV9xdWV1ZWQsIDEsIFVJTlRfTUFYLCAwKTsKIFNUT1JFX0ZVTkNUSU9OKGNmcV9maWZvX2V4cGlyZV9zeW5jX3N0b3JlLCAmY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlWzFdLCAxLCBVSU5UX01BWCwgMSk7CiBTVE9SRV9GVU5DVElPTihjZnFfZmlmb19leHBpcmVfYXN5bmNfc3RvcmUsICZjZnFkLT5jZnFfZmlmb19leHBpcmVbMF0sIDEsIFVJTlRfTUFYLCAxKTsKLVNUT1JFX0ZVTkNUSU9OKGNmcV9iYWNrX21heF9zdG9yZSwgJmNmcWQtPmNmcV9iYWNrX21heCwgMCwgVUlOVF9NQVgsIDApOwotU1RPUkVfRlVOQ1RJT04oY2ZxX2JhY2tfcGVuYWx0eV9zdG9yZSwgJmNmcWQtPmNmcV9iYWNrX3BlbmFsdHksIDEsIFVJTlRfTUFYLCAwKTsKK1NUT1JFX0ZVTkNUSU9OKGNmcV9iYWNrX3NlZWtfbWF4X3N0b3JlLCAmY2ZxZC0+Y2ZxX2JhY2tfbWF4LCAwLCBVSU5UX01BWCwgMCk7CitTVE9SRV9GVU5DVElPTihjZnFfYmFja19zZWVrX3BlbmFsdHlfc3RvcmUsICZjZnFkLT5jZnFfYmFja19wZW5hbHR5LCAxLCBVSU5UX01BWCwgMCk7CiBTVE9SRV9GVU5DVElPTihjZnFfc2xpY2VfaWRsZV9zdG9yZSwgJmNmcWQtPmNmcV9zbGljZV9pZGxlLCAwLCBVSU5UX01BWCwgMSk7CiBTVE9SRV9GVU5DVElPTihjZnFfc2xpY2Vfc3luY19zdG9yZSwgJmNmcWQtPmNmcV9zbGljZVsxXSwgMSwgVUlOVF9NQVgsIDEpOwogU1RPUkVfRlVOQ1RJT04oY2ZxX3NsaWNlX2FzeW5jX3N0b3JlLCAmY2ZxZC0+Y2ZxX3NsaWNlWzBdLCAxLCBVSU5UX01BWCwgMSk7CkBAIC0yMjk0LDExMiArMjM0MiwyMiBAQAogU1RPUkVfRlVOQ1RJT04oY2ZxX21heF9kZXB0aF9zdG9yZSwgJmNmcWQtPmNmcV9tYXhfZGVwdGgsIDEsIFVJTlRfTUFYLCAwKTsKICN1bmRlZiBTVE9SRV9GVU5DVElPTgogCi1zdGF0aWMgc3RydWN0IGNmcV9mc19lbnRyeSBjZnFfcXVhbnR1bV9lbnRyeSA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJxdWFudHVtIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaG93ID0gY2ZxX3F1YW50dW1fc2hvdywKLQkuc3RvcmUgPSBjZnFfcXVhbnR1bV9zdG9yZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNmcV9mc19lbnRyeSBjZnFfcXVldWVkX2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gInF1ZXVlZCIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGNmcV9xdWV1ZWRfc2hvdywKLQkuc3RvcmUgPSBjZnFfcXVldWVkX3N0b3JlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2ZxX2ZzX2VudHJ5IGNmcV9maWZvX2V4cGlyZV9zeW5jX2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gImZpZm9fZXhwaXJlX3N5bmMiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCi0JLnNob3cgPSBjZnFfZmlmb19leHBpcmVfc3luY19zaG93LAotCS5zdG9yZSA9IGNmcV9maWZvX2V4cGlyZV9zeW5jX3N0b3JlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2ZxX2ZzX2VudHJ5IGNmcV9maWZvX2V4cGlyZV9hc3luY19lbnRyeSA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJmaWZvX2V4cGlyZV9hc3luYyIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGNmcV9maWZvX2V4cGlyZV9hc3luY19zaG93LAotCS5zdG9yZSA9IGNmcV9maWZvX2V4cGlyZV9hc3luY19zdG9yZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNmcV9mc19lbnRyeSBjZnFfYmFja19tYXhfZW50cnkgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiYmFja19zZWVrX21heCIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGNmcV9iYWNrX21heF9zaG93LAotCS5zdG9yZSA9IGNmcV9iYWNrX21heF9zdG9yZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNmcV9mc19lbnRyeSBjZnFfYmFja19wZW5hbHR5X2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gImJhY2tfc2Vla19wZW5hbHR5IiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaG93ID0gY2ZxX2JhY2tfcGVuYWx0eV9zaG93LAotCS5zdG9yZSA9IGNmcV9iYWNrX3BlbmFsdHlfc3RvcmUsCi19Owotc3RhdGljIHN0cnVjdCBjZnFfZnNfZW50cnkgY2ZxX3NsaWNlX3N5bmNfZW50cnkgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAic2xpY2Vfc3luYyIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGNmcV9zbGljZV9zeW5jX3Nob3csCi0JLnN0b3JlID0gY2ZxX3NsaWNlX3N5bmNfc3RvcmUsCi19Owotc3RhdGljIHN0cnVjdCBjZnFfZnNfZW50cnkgY2ZxX3NsaWNlX2FzeW5jX2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gInNsaWNlX2FzeW5jIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaG93ID0gY2ZxX3NsaWNlX2FzeW5jX3Nob3csCi0JLnN0b3JlID0gY2ZxX3NsaWNlX2FzeW5jX3N0b3JlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2ZxX2ZzX2VudHJ5IGNmcV9zbGljZV9hc3luY19ycV9lbnRyeSA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJzbGljZV9hc3luY19ycSIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGNmcV9zbGljZV9hc3luY19ycV9zaG93LAotCS5zdG9yZSA9IGNmcV9zbGljZV9hc3luY19ycV9zdG9yZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNmcV9mc19lbnRyeSBjZnFfc2xpY2VfaWRsZV9lbnRyeSA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJzbGljZV9pZGxlIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaG93ID0gY2ZxX3NsaWNlX2lkbGVfc2hvdywKLQkuc3RvcmUgPSBjZnFfc2xpY2VfaWRsZV9zdG9yZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNmcV9mc19lbnRyeSBjZnFfbWF4X2RlcHRoX2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gIm1heF9kZXB0aCIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGNmcV9tYXhfZGVwdGhfc2hvdywKLQkuc3RvcmUgPSBjZnFfbWF4X2RlcHRoX3N0b3JlLAotfTsKKyNkZWZpbmUgQ0ZRX0FUVFIobmFtZSkgXAorCV9fQVRUUihuYW1lLCBTX0lSVUdPfFNfSVdVU1IsIGNmcV8jI25hbWUjI19zaG93LCBjZnFfIyNuYW1lIyNfc3RvcmUpCiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7Ci0JJmNmcV9xdWFudHVtX2VudHJ5LmF0dHIsCi0JJmNmcV9xdWV1ZWRfZW50cnkuYXR0ciwKLQkmY2ZxX2ZpZm9fZXhwaXJlX3N5bmNfZW50cnkuYXR0ciwKLQkmY2ZxX2ZpZm9fZXhwaXJlX2FzeW5jX2VudHJ5LmF0dHIsCi0JJmNmcV9iYWNrX21heF9lbnRyeS5hdHRyLAotCSZjZnFfYmFja19wZW5hbHR5X2VudHJ5LmF0dHIsCi0JJmNmcV9zbGljZV9zeW5jX2VudHJ5LmF0dHIsCi0JJmNmcV9zbGljZV9hc3luY19lbnRyeS5hdHRyLAotCSZjZnFfc2xpY2VfYXN5bmNfcnFfZW50cnkuYXR0ciwKLQkmY2ZxX3NsaWNlX2lkbGVfZW50cnkuYXR0ciwKLQkmY2ZxX21heF9kZXB0aF9lbnRyeS5hdHRyLAotCU5VTEwsCi19OwotCi0jZGVmaW5lIHRvX2NmcShhdHIpIGNvbnRhaW5lcl9vZigoYXRyKSwgc3RydWN0IGNmcV9mc19lbnRyeSwgYXR0cikKLQotc3RhdGljIHNzaXplX3QKLWNmcV9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnBhZ2UpCi17Ci0JZWxldmF0b3JfdCAqZSA9IGNvbnRhaW5lcl9vZihrb2JqLCBlbGV2YXRvcl90LCBrb2JqKTsKLQlzdHJ1Y3QgY2ZxX2ZzX2VudHJ5ICplbnRyeSA9IHRvX2NmcShhdHRyKTsKLQotCWlmICghZW50cnktPnNob3cpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIGVudHJ5LT5zaG93KGUtPmVsZXZhdG9yX2RhdGEsIHBhZ2UpOwotfQotCi1zdGF0aWMgc3NpemVfdAotY2ZxX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JICAgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW5ndGgpCi17Ci0JZWxldmF0b3JfdCAqZSA9IGNvbnRhaW5lcl9vZihrb2JqLCBlbGV2YXRvcl90LCBrb2JqKTsKLQlzdHJ1Y3QgY2ZxX2ZzX2VudHJ5ICplbnRyeSA9IHRvX2NmcShhdHRyKTsKLQotCWlmICghZW50cnktPnN0b3JlKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiBlbnRyeS0+c3RvcmUoZS0+ZWxldmF0b3JfZGF0YSwgcGFnZSwgbGVuZ3RoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgY2ZxX3N5c2ZzX29wcyA9IHsKLQkuc2hvdwk9IGNmcV9hdHRyX3Nob3csCi0JLnN0b3JlCT0gY2ZxX2F0dHJfc3RvcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBjZnFfa3R5cGUgPSB7Ci0JLnN5c2ZzX29wcwk9ICZjZnFfc3lzZnNfb3BzLAotCS5kZWZhdWx0X2F0dHJzCT0gZGVmYXVsdF9hdHRycywKK3N0YXRpYyBzdHJ1Y3QgZWx2X2ZzX2VudHJ5IGNmcV9hdHRyc1tdID0geworCUNGUV9BVFRSKHF1YW50dW0pLAorCUNGUV9BVFRSKHF1ZXVlZCksCisJQ0ZRX0FUVFIoZmlmb19leHBpcmVfc3luYyksCisJQ0ZRX0FUVFIoZmlmb19leHBpcmVfYXN5bmMpLAorCUNGUV9BVFRSKGJhY2tfc2Vla19tYXgpLAorCUNGUV9BVFRSKGJhY2tfc2Vla19wZW5hbHR5KSwKKwlDRlFfQVRUUihzbGljZV9zeW5jKSwKKwlDRlFfQVRUUihzbGljZV9hc3luYyksCisJQ0ZRX0FUVFIoc2xpY2VfYXN5bmNfcnEpLAorCUNGUV9BVFRSKHNsaWNlX2lkbGUpLAorCUNGUV9BVFRSKG1heF9kZXB0aCksCisJX19BVFRSX05VTEwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZWxldmF0b3JfdHlwZSBpb3NjaGVkX2NmcSA9IHsKQEAgLTI0MjAsOCArMjM3OCw5IEBACiAJCS5lbGV2YXRvcl9tYXlfcXVldWVfZm4gPQljZnFfbWF5X3F1ZXVlLAogCQkuZWxldmF0b3JfaW5pdF9mbiA9CQljZnFfaW5pdF9xdWV1ZSwKIAkJLmVsZXZhdG9yX2V4aXRfZm4gPQkJY2ZxX2V4aXRfcXVldWUsCisJCS50cmltID0JCQkJY2ZxX3RyaW0sCiAJfSwKLQkuZWxldmF0b3Jfa3R5cGUgPQkmY2ZxX2t0eXBlLAorCS5lbGV2YXRvcl9hdHRycyA9CWNmcV9hdHRycywKIAkuZWxldmF0b3JfbmFtZSA9CSJjZnEiLAogCS5lbGV2YXRvcl9vd25lciA9CVRISVNfTU9EVUxFLAogfTsKQEAgLTI0NTAsNyArMjQwOSwxMyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2ZxX2V4aXQodm9pZCkKIHsKKwlERUNMQVJFX0NPTVBMRVRJT04oYWxsX2dvbmUpOwogCWVsdl91bnJlZ2lzdGVyKCZpb3NjaGVkX2NmcSk7CisJaW9jX2dvbmUgPSAmYWxsX2dvbmU7CisJYmFycmllcigpOworCWlmIChhdG9taWNfcmVhZCgmaW9jX2NvdW50KSkKKwkJY29tcGxldGUoaW9jX2dvbmUpOworCXN5bmNocm9uaXplX3JjdSgpOwogCWNmcV9zbGFiX2tpbGwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jIGIvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCmluZGV4IDI3ZTQ5NGIuLjM5OWZhMWUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYworKysgYi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKQEAgLTY5NCwxMSArNjk0LDYgQEAKIC8qCiAgKiBzeXNmcyBwYXJ0cyBiZWxvdwogICovCi1zdHJ1Y3QgZGVhZGxpbmVfZnNfZW50cnkgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRlYWRsaW5lX2RhdGEgKiwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZWFkbGluZV9kYXRhICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLX07CiAKIHN0YXRpYyBzc2l6ZV90CiBkZWFkbGluZV92YXJfc2hvdyhpbnQgdmFyLCBjaGFyICpwYWdlKQpAQCAtNzE2LDIzICs3MTEsMjUgQEAKIH0KIAogI2RlZmluZSBTSE9XX0ZVTkNUSU9OKF9fRlVOQywgX19WQVIsIF9fQ09OVikJCQkJXAotc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgY2hhciAqcGFnZSkJCVwKK3N0YXRpYyBzc2l6ZV90IF9fRlVOQyhlbGV2YXRvcl90ICplLCBjaGFyICpwYWdlKQkJCVwKIHsJCQkJCQkJCQlcCi0JaW50IF9fZGF0YSA9IF9fVkFSOwkJCQkJXAorCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IGUtPmVsZXZhdG9yX2RhdGE7CQkJXAorCWludCBfX2RhdGEgPSBfX1ZBUjsJCQkJCQlcCiAJaWYgKF9fQ09OVikJCQkJCQkJXAogCQlfX2RhdGEgPSBqaWZmaWVzX3RvX21zZWNzKF9fZGF0YSk7CQkJXAogCXJldHVybiBkZWFkbGluZV92YXJfc2hvdyhfX2RhdGEsIChwYWdlKSk7CQkJXAogfQotU0hPV19GVU5DVElPTihkZWFkbGluZV9yZWFkZXhwaXJlX3Nob3csIGRkLT5maWZvX2V4cGlyZVtSRUFEXSwgMSk7Ci1TSE9XX0ZVTkNUSU9OKGRlYWRsaW5lX3dyaXRlZXhwaXJlX3Nob3csIGRkLT5maWZvX2V4cGlyZVtXUklURV0sIDEpOwotU0hPV19GVU5DVElPTihkZWFkbGluZV93cml0ZXNzdGFydmVkX3Nob3csIGRkLT53cml0ZXNfc3RhcnZlZCwgMCk7Ci1TSE9XX0ZVTkNUSU9OKGRlYWRsaW5lX2Zyb250bWVyZ2VzX3Nob3csIGRkLT5mcm9udF9tZXJnZXMsIDApOwotU0hPV19GVU5DVElPTihkZWFkbGluZV9maWZvYmF0Y2hfc2hvdywgZGQtPmZpZm9fYmF0Y2gsIDApOworU0hPV19GVU5DVElPTihkZWFkbGluZV9yZWFkX2V4cGlyZV9zaG93LCBkZC0+Zmlmb19leHBpcmVbUkVBRF0sIDEpOworU0hPV19GVU5DVElPTihkZWFkbGluZV93cml0ZV9leHBpcmVfc2hvdywgZGQtPmZpZm9fZXhwaXJlW1dSSVRFXSwgMSk7CitTSE9XX0ZVTkNUSU9OKGRlYWRsaW5lX3dyaXRlc19zdGFydmVkX3Nob3csIGRkLT53cml0ZXNfc3RhcnZlZCwgMCk7CitTSE9XX0ZVTkNUSU9OKGRlYWRsaW5lX2Zyb250X21lcmdlc19zaG93LCBkZC0+ZnJvbnRfbWVyZ2VzLCAwKTsKK1NIT1dfRlVOQ1RJT04oZGVhZGxpbmVfZmlmb19iYXRjaF9zaG93LCBkZC0+Zmlmb19iYXRjaCwgMCk7CiAjdW5kZWYgU0hPV19GVU5DVElPTgogCiAjZGVmaW5lIFNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBfX0NPTlYpCQkJXAotc3RhdGljIHNzaXplX3QgX19GVU5DKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQlcCitzdGF0aWMgc3NpemVfdCBfX0ZVTkMoZWxldmF0b3JfdCAqZSwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KQlcCiB7CQkJCQkJCQkJXAorCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IGUtPmVsZXZhdG9yX2RhdGE7CQkJXAogCWludCBfX2RhdGE7CQkJCQkJCVwKIAlpbnQgcmV0ID0gZGVhZGxpbmVfdmFyX3N0b3JlKCZfX2RhdGEsIChwYWdlKSwgY291bnQpOwkJXAogCWlmIChfX2RhdGEgPCAoTUlOKSkJCQkJCQlcCkBAIC03NDUsODMgKzc0MiwyNCBAQAogCQkqKF9fUFRSKSA9IF9fZGF0YTsJCQkJCVwKIAlyZXR1cm4gcmV0OwkJCQkJCQlcCiB9Ci1TVE9SRV9GVU5DVElPTihkZWFkbGluZV9yZWFkZXhwaXJlX3N0b3JlLCAmZGQtPmZpZm9fZXhwaXJlW1JFQURdLCAwLCBJTlRfTUFYLCAxKTsKLVNUT1JFX0ZVTkNUSU9OKGRlYWRsaW5lX3dyaXRlZXhwaXJlX3N0b3JlLCAmZGQtPmZpZm9fZXhwaXJlW1dSSVRFXSwgMCwgSU5UX01BWCwgMSk7Ci1TVE9SRV9GVU5DVElPTihkZWFkbGluZV93cml0ZXNzdGFydmVkX3N0b3JlLCAmZGQtPndyaXRlc19zdGFydmVkLCBJTlRfTUlOLCBJTlRfTUFYLCAwKTsKLVNUT1JFX0ZVTkNUSU9OKGRlYWRsaW5lX2Zyb250bWVyZ2VzX3N0b3JlLCAmZGQtPmZyb250X21lcmdlcywgMCwgMSwgMCk7Ci1TVE9SRV9GVU5DVElPTihkZWFkbGluZV9maWZvYmF0Y2hfc3RvcmUsICZkZC0+Zmlmb19iYXRjaCwgMCwgSU5UX01BWCwgMCk7CitTVE9SRV9GVU5DVElPTihkZWFkbGluZV9yZWFkX2V4cGlyZV9zdG9yZSwgJmRkLT5maWZvX2V4cGlyZVtSRUFEXSwgMCwgSU5UX01BWCwgMSk7CitTVE9SRV9GVU5DVElPTihkZWFkbGluZV93cml0ZV9leHBpcmVfc3RvcmUsICZkZC0+Zmlmb19leHBpcmVbV1JJVEVdLCAwLCBJTlRfTUFYLCAxKTsKK1NUT1JFX0ZVTkNUSU9OKGRlYWRsaW5lX3dyaXRlc19zdGFydmVkX3N0b3JlLCAmZGQtPndyaXRlc19zdGFydmVkLCBJTlRfTUlOLCBJTlRfTUFYLCAwKTsKK1NUT1JFX0ZVTkNUSU9OKGRlYWRsaW5lX2Zyb250X21lcmdlc19zdG9yZSwgJmRkLT5mcm9udF9tZXJnZXMsIDAsIDEsIDApOworU1RPUkVfRlVOQ1RJT04oZGVhZGxpbmVfZmlmb19iYXRjaF9zdG9yZSwgJmRkLT5maWZvX2JhdGNoLCAwLCBJTlRfTUFYLCAwKTsKICN1bmRlZiBTVE9SRV9GVU5DVElPTgogCi1zdGF0aWMgc3RydWN0IGRlYWRsaW5lX2ZzX2VudHJ5IGRlYWRsaW5lX3JlYWRleHBpcmVfZW50cnkgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAicmVhZF9leHBpcmUiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCi0JLnNob3cgPSBkZWFkbGluZV9yZWFkZXhwaXJlX3Nob3csCi0JLnN0b3JlID0gZGVhZGxpbmVfcmVhZGV4cGlyZV9zdG9yZSwKLX07Ci1zdGF0aWMgc3RydWN0IGRlYWRsaW5lX2ZzX2VudHJ5IGRlYWRsaW5lX3dyaXRlZXhwaXJlX2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gIndyaXRlX2V4cGlyZSIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKLQkuc2hvdyA9IGRlYWRsaW5lX3dyaXRlZXhwaXJlX3Nob3csCi0JLnN0b3JlID0gZGVhZGxpbmVfd3JpdGVleHBpcmVfc3RvcmUsCi19Owotc3RhdGljIHN0cnVjdCBkZWFkbGluZV9mc19lbnRyeSBkZWFkbGluZV93cml0ZXNzdGFydmVkX2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gIndyaXRlc19zdGFydmVkIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaG93ID0gZGVhZGxpbmVfd3JpdGVzc3RhcnZlZF9zaG93LAotCS5zdG9yZSA9IGRlYWRsaW5lX3dyaXRlc3N0YXJ2ZWRfc3RvcmUsCi19Owotc3RhdGljIHN0cnVjdCBkZWFkbGluZV9mc19lbnRyeSBkZWFkbGluZV9mcm9udG1lcmdlc19lbnRyeSA9IHsKLQkuYXR0ciA9IHsubmFtZSA9ICJmcm9udF9tZXJnZXMiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCi0JLnNob3cgPSBkZWFkbGluZV9mcm9udG1lcmdlc19zaG93LAotCS5zdG9yZSA9IGRlYWRsaW5lX2Zyb250bWVyZ2VzX3N0b3JlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgZGVhZGxpbmVfZnNfZW50cnkgZGVhZGxpbmVfZmlmb2JhdGNoX2VudHJ5ID0gewotCS5hdHRyID0gey5uYW1lID0gImZpZm9fYmF0Y2giLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCi0JLnNob3cgPSBkZWFkbGluZV9maWZvYmF0Y2hfc2hvdywKLQkuc3RvcmUgPSBkZWFkbGluZV9maWZvYmF0Y2hfc3RvcmUsCi19OworI2RlZmluZSBERF9BVFRSKG5hbWUpIFwKKwlfX0FUVFIobmFtZSwgU19JUlVHT3xTX0lXVVNSLCBkZWFkbGluZV8jI25hbWUjI19zaG93LCBcCisJCQkJICAgICAgZGVhZGxpbmVfIyNuYW1lIyNfc3RvcmUpCiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7Ci0JJmRlYWRsaW5lX3JlYWRleHBpcmVfZW50cnkuYXR0ciwKLQkmZGVhZGxpbmVfd3JpdGVleHBpcmVfZW50cnkuYXR0ciwKLQkmZGVhZGxpbmVfd3JpdGVzc3RhcnZlZF9lbnRyeS5hdHRyLAotCSZkZWFkbGluZV9mcm9udG1lcmdlc19lbnRyeS5hdHRyLAotCSZkZWFkbGluZV9maWZvYmF0Y2hfZW50cnkuYXR0ciwKLQlOVUxMLAotfTsKLQotI2RlZmluZSB0b19kZWFkbGluZShhdHIpIGNvbnRhaW5lcl9vZigoYXRyKSwgc3RydWN0IGRlYWRsaW5lX2ZzX2VudHJ5LCBhdHRyKQotCi1zdGF0aWMgc3NpemVfdAotZGVhZGxpbmVfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQotewotCWVsZXZhdG9yX3QgKmUgPSBjb250YWluZXJfb2Yoa29iaiwgZWxldmF0b3JfdCwga29iaik7Ci0Jc3RydWN0IGRlYWRsaW5lX2ZzX2VudHJ5ICplbnRyeSA9IHRvX2RlYWRsaW5lKGF0dHIpOwotCi0JaWYgKCFlbnRyeS0+c2hvdykKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gZW50cnktPnNob3coZS0+ZWxldmF0b3JfZGF0YSwgcGFnZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1kZWFkbGluZV9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAotCQkgICAgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbmd0aCkKLXsKLQllbGV2YXRvcl90ICplID0gY29udGFpbmVyX29mKGtvYmosIGVsZXZhdG9yX3QsIGtvYmopOwotCXN0cnVjdCBkZWFkbGluZV9mc19lbnRyeSAqZW50cnkgPSB0b19kZWFkbGluZShhdHRyKTsKLQotCWlmICghZW50cnktPnN0b3JlKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiBlbnRyeS0+c3RvcmUoZS0+ZWxldmF0b3JfZGF0YSwgcGFnZSwgbGVuZ3RoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZGVhZGxpbmVfc3lzZnNfb3BzID0gewotCS5zaG93CT0gZGVhZGxpbmVfYXR0cl9zaG93LAotCS5zdG9yZQk9IGRlYWRsaW5lX2F0dHJfc3RvcmUsCi19OwotCi1zdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBkZWFkbGluZV9rdHlwZSA9IHsKLQkuc3lzZnNfb3BzCT0gJmRlYWRsaW5lX3N5c2ZzX29wcywKLQkuZGVmYXVsdF9hdHRycwk9IGRlZmF1bHRfYXR0cnMsCitzdGF0aWMgc3RydWN0IGVsdl9mc19lbnRyeSBkZWFkbGluZV9hdHRyc1tdID0geworCUREX0FUVFIocmVhZF9leHBpcmUpLAorCUREX0FUVFIod3JpdGVfZXhwaXJlKSwKKwlERF9BVFRSKHdyaXRlc19zdGFydmVkKSwKKwlERF9BVFRSKGZyb250X21lcmdlcyksCisJRERfQVRUUihmaWZvX2JhdGNoKSwKKwlfX0FUVFJfTlVMTAogfTsKIAogc3RhdGljIHN0cnVjdCBlbGV2YXRvcl90eXBlIGlvc2NoZWRfZGVhZGxpbmUgPSB7CkBAIC04NDAsNyArNzc4LDcgQEAKIAkJLmVsZXZhdG9yX2V4aXRfZm4gPQkJZGVhZGxpbmVfZXhpdF9xdWV1ZSwKIAl9LAogCi0JLmVsZXZhdG9yX2t0eXBlID0gJmRlYWRsaW5lX2t0eXBlLAorCS5lbGV2YXRvcl9hdHRycyA9IGRlYWRsaW5lX2F0dHJzLAogCS5lbGV2YXRvcl9uYW1lID0gImRlYWRsaW5lIiwKIAkuZWxldmF0b3Jfb3duZXIgPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCAyNGI3MDJkLi41NmMyZWQwIDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTIwLDE1ICsxMjEsMTAgQEAKIAlyZXR1cm4gZTsKIH0KIAotc3RhdGljIGludCBlbGV2YXRvcl9hdHRhY2gocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZSwKLQkJCSAgIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpCitzdGF0aWMgaW50IGVsZXZhdG9yX2F0dGFjaChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSAqZXEpCiB7CiAJaW50IHJldCA9IDA7CiAKLQltZW1zZXQoZXEsIDAsIHNpemVvZigqZXEpKTsKLQllcS0+b3BzID0gJmUtPm9wczsKLQllcS0+ZWxldmF0b3JfdHlwZSA9IGU7Ci0KIAlxLT5lbGV2YXRvciA9IGVxOwogCiAJaWYgKGVxLT5vcHMtPmVsZXZhdG9yX2luaXRfZm4pCkBAIC0xNTQsNiArMTUwLDMyIEBACiAKIF9fc2V0dXAoImVsZXZhdG9yPSIsIGVsZXZhdG9yX3NldHVwKTsKIAorc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgZWx2X2t0eXBlOworCitzdGF0aWMgZWxldmF0b3JfdCAqZWxldmF0b3JfYWxsb2Moc3RydWN0IGVsZXZhdG9yX3R5cGUgKmUpCit7CisJZWxldmF0b3JfdCAqZXEgPSBrbWFsbG9jKHNpemVvZihlbGV2YXRvcl90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVxKSB7CisJCW1lbXNldChlcSwgMCwgc2l6ZW9mKCplcSkpOworCQllcS0+b3BzID0gJmUtPm9wczsKKwkJZXEtPmVsZXZhdG9yX3R5cGUgPSBlOworCQlrb2JqZWN0X2luaXQoJmVxLT5rb2JqKTsKKwkJc25wcmludGYoZXEtPmtvYmoubmFtZSwgS09CSl9OQU1FX0xFTiwgIiVzIiwgImlvc2NoZWQiKTsKKwkJZXEtPmtvYmoua3R5cGUgPSAmZWx2X2t0eXBlOworCQltdXRleF9pbml0KCZlcS0+c3lzZnNfbG9jayk7CisJfSBlbHNlIHsKKwkJZWxldmF0b3JfcHV0KGUpOworCX0KKwlyZXR1cm4gZXE7Cit9CisKK3N0YXRpYyB2b2lkIGVsZXZhdG9yX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJZWxldmF0b3JfdCAqZSA9IGNvbnRhaW5lcl9vZihrb2JqLCBlbGV2YXRvcl90LCBrb2JqKTsKKwllbGV2YXRvcl9wdXQoZS0+ZWxldmF0b3JfdHlwZSk7CisJa2ZyZWUoZSk7Cit9CisKIGludCBlbGV2YXRvcl9pbml0KHJlcXVlc3RfcXVldWVfdCAqcSwgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZSA9IE5VTEw7CkBAIC0xNzYsMjkgKzE5OCwyNiBAQAogCQllID0gZWxldmF0b3JfZ2V0KCJub29wIik7CiAJfQogCi0JZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZWxldmF0b3JfcXVldWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWVxKSB7Ci0JCWVsZXZhdG9yX3B1dChlKTsKKwllcSA9IGVsZXZhdG9yX2FsbG9jKGUpOworCWlmICghZXEpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCXJldCA9IGVsZXZhdG9yX2F0dGFjaChxLCBlLCBlcSk7Ci0JaWYgKHJldCkgewotCQlrZnJlZShlcSk7Ci0JCWVsZXZhdG9yX3B1dChlKTsKLQl9CisJcmV0ID0gZWxldmF0b3JfYXR0YWNoKHEsIGVxKTsKKwlpZiAocmV0KQorCQlrb2JqZWN0X3B1dCgmZXEtPmtvYmopOwogCiAJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBlbGV2YXRvcl9leGl0KGVsZXZhdG9yX3QgKmUpCiB7CisJbXV0ZXhfbG9jaygmZS0+c3lzZnNfbG9jayk7CiAJaWYgKGUtPm9wcy0+ZWxldmF0b3JfZXhpdF9mbikKIAkJZS0+b3BzLT5lbGV2YXRvcl9leGl0X2ZuKGUpOworCWUtPm9wcyA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZlLT5zeXNmc19sb2NrKTsKIAotCWVsZXZhdG9yX3B1dChlLT5lbGV2YXRvcl90eXBlKTsKLQllLT5lbGV2YXRvcl90eXBlID0gTlVMTDsKLQlrZnJlZShlKTsKKwlrb2JqZWN0X3B1dCgmZS0+a29iaik7CiB9CiAKIC8qCkBAIC0zMTUsNiArMzM0LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJdW5zaWduZWQgb3Jkc2VxOwogCisJYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0lOU0VSVCk7CisKIAlycS0+cSA9IHE7CiAKIAlzd2l0Y2ggKHdoZXJlKSB7CkBAIC00ODEsNiArNTAyLDcgQEAKIAkJCSAqIG5vdCBiZSBwYXNzZWQgYnkgbmV3IGluY29taW5nIHJlcXVlc3RzCiAJCQkgKi8KIAkJCXJxLT5mbGFncyB8PSBSRVFfU1RBUlRFRDsKKwkJCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9JU1NVRSk7CiAJCX0KIAogCQlpZiAoIXEtPmJvdW5kYXJ5X3JxIHx8IHEtPmJvdW5kYXJ5X3JxID09IHJxKSB7CkBAIC02MjcsMzQgKzY0OSw4NiBAQAogCX0KIH0KIAorI2RlZmluZSB0b19lbHYoYXRyKSBjb250YWluZXJfb2YoKGF0ciksIHN0cnVjdCBlbHZfZnNfZW50cnksIGF0dHIpCisKK3N0YXRpYyBzc2l6ZV90CitlbHZfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpwYWdlKQoreworCWVsZXZhdG9yX3QgKmUgPSBjb250YWluZXJfb2Yoa29iaiwgZWxldmF0b3JfdCwga29iaik7CisJc3RydWN0IGVsdl9mc19lbnRyeSAqZW50cnkgPSB0b19lbHYoYXR0cik7CisJc3NpemVfdCBlcnJvcjsKKworCWlmICghZW50cnktPnNob3cpCisJCXJldHVybiAtRUlPOworCisJbXV0ZXhfbG9jaygmZS0+c3lzZnNfbG9jayk7CisJZXJyb3IgPSBlLT5vcHMgPyBlbnRyeS0+c2hvdyhlLCBwYWdlKSA6IC1FTk9FTlQ7CisJbXV0ZXhfdW5sb2NrKCZlLT5zeXNmc19sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlbHZfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkgICAgICAgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbmd0aCkKK3sKKwllbGV2YXRvcl90ICplID0gY29udGFpbmVyX29mKGtvYmosIGVsZXZhdG9yX3QsIGtvYmopOworCXN0cnVjdCBlbHZfZnNfZW50cnkgKmVudHJ5ID0gdG9fZWx2KGF0dHIpOworCXNzaXplX3QgZXJyb3I7CisKKwlpZiAoIWVudHJ5LT5zdG9yZSkKKwkJcmV0dXJuIC1FSU87CisKKwltdXRleF9sb2NrKCZlLT5zeXNmc19sb2NrKTsKKwllcnJvciA9IGUtPm9wcyA/IGVudHJ5LT5zdG9yZShlLCBwYWdlLCBsZW5ndGgpIDogLUVOT0VOVDsKKwltdXRleF91bmxvY2soJmUtPnN5c2ZzX2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZWx2X3N5c2ZzX29wcyA9IHsKKwkuc2hvdwk9IGVsdl9hdHRyX3Nob3csCisJLnN0b3JlCT0gZWx2X2F0dHJfc3RvcmUsCit9OworCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBlbHZfa3R5cGUgPSB7CisJLnN5c2ZzX29wcwk9ICZlbHZfc3lzZnNfb3BzLAorCS5yZWxlYXNlCT0gZWxldmF0b3JfcmVsZWFzZSwKK307CisKIGludCBlbHZfcmVnaXN0ZXJfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCWludCBlcnJvcjsKIAotCWUtPmtvYmoucGFyZW50ID0ga29iamVjdF9nZXQoJnEtPmtvYmopOwotCWlmICghZS0+a29iai5wYXJlbnQpCi0JCXJldHVybiAtRUJVU1k7CisJZS0+a29iai5wYXJlbnQgPSAmcS0+a29iajsKIAotCXNucHJpbnRmKGUtPmtvYmoubmFtZSwgS09CSl9OQU1FX0xFTiwgIiVzIiwgImlvc2NoZWQiKTsKLQllLT5rb2JqLmt0eXBlID0gZS0+ZWxldmF0b3JfdHlwZS0+ZWxldmF0b3Jfa3R5cGU7Ci0KLQlyZXR1cm4ga29iamVjdF9yZWdpc3RlcigmZS0+a29iaik7CisJZXJyb3IgPSBrb2JqZWN0X2FkZCgmZS0+a29iaik7CisJaWYgKCFlcnJvcikgeworCQlzdHJ1Y3QgZWx2X2ZzX2VudHJ5ICphdHRyID0gZS0+ZWxldmF0b3JfdHlwZS0+ZWxldmF0b3JfYXR0cnM7CisJCWlmIChhdHRyKSB7CisJCQl3aGlsZSAoYXR0ci0+YXR0ci5uYW1lKSB7CisJCQkJaWYgKHN5c2ZzX2NyZWF0ZV9maWxlKCZlLT5rb2JqLCAmYXR0ci0+YXR0cikpCisJCQkJCWJyZWFrOworCQkJCWF0dHIrKzsKKwkJCX0KKwkJfQorCQlrb2JqZWN0X3VldmVudCgmZS0+a29iaiwgS09CSl9BREQpOworCX0KKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHZvaWQgZWx2X3VucmVnaXN0ZXJfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJaWYgKHEpIHsKIAkJZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOwotCQlrb2JqZWN0X3VucmVnaXN0ZXIoJmUtPmtvYmopOwotCQlrb2JqZWN0X3B1dCgmcS0+a29iaik7CisJCWtvYmplY3RfdWV2ZW50KCZlLT5rb2JqLCBLT0JKX1JFTU9WRSk7CisJCWtvYmplY3RfZGVsKCZlLT5rb2JqKTsKIAl9CiB9CiAKIGludCBlbHZfcmVnaXN0ZXIoc3RydWN0IGVsZXZhdG9yX3R5cGUgKmUpCiB7CiAJc3Bpbl9sb2NrX2lycSgmZWx2X2xpc3RfbG9jayk7Ci0JaWYgKGVsZXZhdG9yX2ZpbmQoZS0+ZWxldmF0b3JfbmFtZSkpCi0JCUJVRygpOworCUJVR19PTihlbGV2YXRvcl9maW5kKGUtPmVsZXZhdG9yX25hbWUpKTsKIAlsaXN0X2FkZF90YWlsKCZlLT5saXN0LCAmZWx2X2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycSgmZWx2X2xpc3RfbG9jayk7CiAKQEAgLTY3NSwyMSArNzQ5LDE1IEBACiAJLyoKIAkgKiBJdGVyYXRlIGV2ZXJ5IHRocmVhZCBpbiB0aGUgcHJvY2VzcyB0byByZW1vdmUgdGhlIGlvIGNvbnRleHRzLgogCSAqLwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JZG9fZWFjaF90aHJlYWQoZywgcCkgewotCQlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jID0gcC0+aW9fY29udGV4dDsKLQkJaWYgKGlvYyAmJiBpb2MtPmNpYykgewotCQkJaW9jLT5jaWMtPmV4aXQoaW9jLT5jaWMpOwotCQkJaW9jLT5jaWMtPmR0b3IoaW9jLT5jaWMpOwotCQkJaW9jLT5jaWMgPSBOVUxMOwotCQl9Ci0JCWlmIChpb2MgJiYgaW9jLT5haWMpIHsKLQkJCWlvYy0+YWljLT5leGl0KGlvYy0+YWljKTsKLQkJCWlvYy0+YWljLT5kdG9yKGlvYy0+YWljKTsKLQkJCWlvYy0+YWljID0gTlVMTDsKLQkJfQotCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCWlmIChlLT5vcHMudHJpbSkgeworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlkb19lYWNoX3RocmVhZChnLCBwKSB7CisJCQl0YXNrX2xvY2socCk7CisJCQllLT5vcHMudHJpbShwLT5pb19jb250ZXh0KTsKKwkJCXRhc2tfdW5sb2NrKHApOworCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJfQogCiAJc3Bpbl9sb2NrX2lycSgmZWx2X2xpc3RfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmZS0+bGlzdCk7CkBAIC03MDMsMTYgKzc3MSwxNiBAQAogICogbmVlZCBmb3IgdGhlIG5ldyBvbmUuIHRoaXMgd2F5IHdlIGhhdmUgYSBjaGFuY2Ugb2YgZ29pbmcgYmFjayB0byB0aGUgb2xkCiAgKiBvbmUsIGlmIHRoZSBuZXcgb25lIGZhaWxzIGluaXQgZm9yIHNvbWUgcmVhc29uLgogICovCi1zdGF0aWMgdm9pZCBlbGV2YXRvcl9zd2l0Y2gocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqbmV3X2UpCitzdGF0aWMgaW50IGVsZXZhdG9yX3N3aXRjaChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBlbGV2YXRvcl90eXBlICpuZXdfZSkKIHsKIAllbGV2YXRvcl90ICpvbGRfZWxldmF0b3IsICplOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBuZXcgZWxldmF0b3IKIAkgKi8KLQllID0ga21hbGxvYyhzaXplb2YoZWxldmF0b3JfdCksIEdGUF9LRVJORUwpOworCWUgPSBlbGV2YXRvcl9hbGxvYyhuZXdfZSk7CiAJaWYgKCFlKQotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gMDsKIAogCS8qCiAJICogVHVybiBvbiBCWVBBU1MgYW5kIGRyYWluIGFsbCByZXF1ZXN0cyB3LyBlbGV2YXRvciBwcml2YXRlIGRhdGEKQEAgLTc0Myw3ICs4MTEsNyBAQAogCS8qCiAJICogYXR0YWNoIGFuZCBzdGFydCBuZXcgZWxldmF0b3IKIAkgKi8KLQlpZiAoZWxldmF0b3JfYXR0YWNoKHEsIG5ld19lLCBlKSkKKwlpZiAoZWxldmF0b3JfYXR0YWNoKHEsIGUpKQogCQlnb3RvIGZhaWw7CiAKIAlpZiAoZWx2X3JlZ2lzdGVyX3F1ZXVlKHEpKQpAQCAtNzU0LDcgKzgyMiw3IEBACiAJICovCiAJZWxldmF0b3JfZXhpdChvbGRfZWxldmF0b3IpOwogCWNsZWFyX2JpdChRVUVVRV9GTEFHX0VMVlNXSVRDSCwgJnEtPnF1ZXVlX2ZsYWdzKTsKLQlyZXR1cm47CisJcmV0dXJuIDE7CiAKIGZhaWxfcmVnaXN0ZXI6CiAJLyoKQEAgLTc2NywxMCArODM1LDkgQEAKIAlxLT5lbGV2YXRvciA9IG9sZF9lbGV2YXRvcjsKIAllbHZfcmVnaXN0ZXJfcXVldWUocSk7CiAJY2xlYXJfYml0KFFVRVVFX0ZMQUdfRUxWU1dJVENILCAmcS0+cXVldWVfZmxhZ3MpOwotCWtmcmVlKGUpOwotZXJyb3I6Ci0JZWxldmF0b3JfcHV0KG5ld19lKTsKLQlwcmludGsoS0VSTl9FUlIgImVsZXZhdG9yOiBzd2l0Y2ggdG8gJXMgZmFpbGVkXG4iLG5ld19lLT5lbGV2YXRvcl9uYW1lKTsKKwlpZiAoZSkKKwkJa29iamVjdF9wdXQoJmUtPmtvYmopOworCXJldHVybiAwOwogfQogCiBzc2l6ZV90IGVsdl9pb3NjaGVkX3N0b3JlKHJlcXVlc3RfcXVldWVfdCAqcSwgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGNvdW50KQpAQCAtNzk3LDcgKzg2NCw4IEBACiAJCXJldHVybiBjb3VudDsKIAl9CiAKLQllbGV2YXRvcl9zd2l0Y2gocSwgZSk7CisJaWYgKCFlbGV2YXRvcl9zd2l0Y2gocSwgZSkpCisJCXByaW50ayhLRVJOX0VSUiAiZWxldmF0b3I6IHN3aXRjaCB0byAlcyBmYWlsZWRcbiIsZWxldmF0b3JfbmFtZSk7CiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCBkYjU3NTQ2Li42NDUxMGZkIDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTE1LDEyICsxNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqX21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBNQVhfUFJPQkVfSEFTSCAyNTUJLyogcmFuZG9tICovCiAKIHN0YXRpYyBzdHJ1Y3Qgc3Vic3lzdGVtIGJsb2NrX3N1YnN5czsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoYmxvY2tfc3Vic3lzX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGJsb2NrX3N1YnN5c19sb2NrKTsKIAogLyoKICAqIENhbiBiZSBkZWxldGVkIGFsdG9nZXRoZXIuIExhdGVyLgpAQCAtNDYsNyArNDcsNyBAQAogLyoKICAqIGl0ZXJhdGUgb3ZlciBhIGxpc3Qgb2YgYmxrZGV2X2luZm8gc3RydWN0dXJlcy4gIGFsbG93cwogICogdGhlIG1ham9yX25hbWVzIGFycmF5IHRvIGJlIGl0ZXJhdGVkIG92ZXIgZnJvbSBvdXRzaWRlIHRoaXMgZmlsZQotICogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmxvY2tfc3Vic3lzX3NlbSBoZWxkCisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBibG9ja19zdWJzeXNfbG9jayBoZWxkCiAgKi8KIHZvaWQgKmdldF9uZXh0X2Jsa2Rldih2b2lkICpkZXYpCiB7CkBAIC04NSwyMCArODYsMjAgQEAKIAogdm9pZCAqYWNxdWlyZV9ibGtkZXZfbGlzdCh2b2lkKQogewotICAgICAgICBkb3duKCZibG9ja19zdWJzeXNfc2VtKTsKKyAgICAgICAgbXV0ZXhfbG9jaygmYmxvY2tfc3Vic3lzX2xvY2spOwogICAgICAgICByZXR1cm4gZ2V0X25leHRfYmxrZGV2KE5VTEwpOwogfQogCiB2b2lkIHJlbGVhc2VfYmxrZGV2X2xpc3Qodm9pZCAqZGV2KQogewotICAgICAgICB1cCgmYmxvY2tfc3Vic3lzX3NlbSk7CisgICAgICAgIG11dGV4X3VubG9jaygmYmxvY2tfc3Vic3lzX2xvY2spOwogICAgICAgICBrZnJlZShkZXYpOwogfQogCiAKIC8qCiAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIGJsa2Rldl9saXN0LgotICogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmxvY2tfc3Vic3lzX3NlbSBoZWxkCisgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBibG9ja19zdWJzeXNfbG9jayBoZWxkCiAgKi8KIGludCBjb3VudF9ibGtkZXZfbGlzdCh2b2lkKQogewpAQCAtMTE4LDcgKzExOSw3IEBACiAvKgogICogZXh0cmFjdCB0aGUgbWFqb3IgYW5kIG5hbWUgdmFsdWVzIGZyb20gYSBibGtkZXZfaW5mbyBzdHJ1Y3QKICAqIHBhc3NlZCBpbiBhcyBhIHZvaWQgdG8gKmRldi4gIE11c3QgYmUgY2FsbGVkIHdpdGgKLSAqIGJsb2NrX3N1YnN5c19zZW0gaGVsZAorICogYmxvY2tfc3Vic3lzX2xvY2sgaGVsZAogICovCiBpbnQgZ2V0X2Jsa2Rldl9pbmZvKHZvaWQgKmRldiwgaW50ICptYWpvciwgY2hhciAqKm5hbWUpCiB7CkBAIC0xMzgsNyArMTM5LDcgQEAKIAlzdHJ1Y3QgYmxrX21ham9yX25hbWUgKipuLCAqcDsKIAlpbnQgaW5kZXgsIHJldCA9IDA7CiAKLQlkb3duKCZibG9ja19zdWJzeXNfc2VtKTsKKwltdXRleF9sb2NrKCZibG9ja19zdWJzeXNfbG9jayk7CiAKIAkvKiB0ZW1wb3JhcnkgKi8KIAlpZiAobWFqb3IgPT0gMCkgewpAQCAtMTgzLDcgKzE4NCw3IEBACiAJCWtmcmVlKHApOwogCX0KIG91dDoKLQl1cCgmYmxvY2tfc3Vic3lzX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZibG9ja19zdWJzeXNfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTk3LDcgKzE5OCw3IEBACiAJaW50IGluZGV4ID0gbWFqb3JfdG9faW5kZXgobWFqb3IpOwogCWludCByZXQgPSAwOwogCi0JZG93bigmYmxvY2tfc3Vic3lzX3NlbSk7CisJbXV0ZXhfbG9jaygmYmxvY2tfc3Vic3lzX2xvY2spOwogCWZvciAobiA9ICZtYWpvcl9uYW1lc1tpbmRleF07ICpuOyBuID0gJigqbiktPm5leHQpCiAJCWlmICgoKm4pLT5tYWpvciA9PSBtYWpvcikKIAkJCWJyZWFrOwpAQCAtMjA3LDcgKzIwOCw3IEBACiAJCXAgPSAqbjsKIAkJKm4gPSBwLT5uZXh0OwogCX0KLQl1cCgmYmxvY2tfc3Vic3lzX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZibG9ja19zdWJzeXNfbG9jayk7CiAJa2ZyZWUocCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzAxLDcgKzMwMiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAlsb2ZmX3QgbCA9ICpwb3M7CiAKLQlkb3duKCZibG9ja19zdWJzeXNfc2VtKTsKKwltdXRleF9sb2NrKCZibG9ja19zdWJzeXNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwLCAmYmxvY2tfc3Vic3lzLmtzZXQubGlzdCkKIAkJaWYgKCFsLS0pCiAJCQlyZXR1cm4gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgZ2VuZGlzaywga29iai5lbnRyeSk7CkBAIC0zMTgsNyArMzE5LDcgQEAKIAogc3RhdGljIHZvaWQgcGFydF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcGFydCwgdm9pZCAqdikKIHsKLQl1cCgmYmxvY2tfc3Vic3lzX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZibG9ja19zdWJzeXNfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgc2hvd19wYXJ0aXRpb24oc3RydWN0IHNlcV9maWxlICpwYXJ0LCB2b2lkICp2KQpAQCAtMzc3LDcgKzM3OCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdlbmhkX2RldmljZV9pbml0KHZvaWQpCiB7Ci0JYmRldl9tYXAgPSBrb2JqX21hcF9pbml0KGJhc2VfcHJvYmUsICZibG9ja19zdWJzeXNfc2VtKTsKKwliZGV2X21hcCA9IGtvYmpfbWFwX2luaXQoYmFzZV9wcm9iZSwgJmJsb2NrX3N1YnN5c19sb2NrKTsKIAlibGtfZGV2X2luaXQoKTsKIAlzdWJzeXN0ZW1fcmVnaXN0ZXIoJmJsb2NrX3N1YnN5cyk7CiAJcmV0dXJuIDA7CkBAIC02MTEsNyArNjEyLDcgQEAKIAlsb2ZmX3QgayA9ICpwb3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAotCWRvd24oJmJsb2NrX3N1YnN5c19zZW0pOworCW11dGV4X2xvY2soJmJsb2NrX3N1YnN5c19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZibG9ja19zdWJzeXMua3NldC5saXN0KQogCQlpZiAoIWstLSkKIAkJCXJldHVybiBsaXN0X2VudHJ5KHAsIHN0cnVjdCBnZW5kaXNrLCBrb2JqLmVudHJ5KTsKQEAgLTYyOCw3ICs2MjksNyBAQAogCiBzdGF0aWMgdm9pZCBkaXNrc3RhdHNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnBhcnQsIHZvaWQgKnYpCiB7Ci0JdXAoJmJsb2NrX3N1YnN5c19zZW0pOworCW11dGV4X3VubG9jaygmYmxvY2tfc3Vic3lzX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGRpc2tzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jCmluZGV4IGUxMTA5NDkuLjljZmEyZTEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2lvY3RsLmMKKysrIGIvYmxvY2svaW9jdGwuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ibGt0cmFjZV9hcGkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdGF0aWMgaW50IGJsa3BnX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBibGtwZ19pb2N0bF9hcmcgX191c2VyICphcmcpCkBAIC00Miw5ICs0Myw5IEBACiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJLyogcGFydGl0aW9uIG51bWJlciBpbiB1c2U/ICovCi0JCQlkb3duKCZiZGV2LT5iZF9zZW0pOworCQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCQkJaWYgKGRpc2stPnBhcnRbcGFydCAtIDFdKSB7Ci0JCQkJdXAoJmJkZXYtPmJkX3NlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJCS8qIG92ZXJsYXA/ICovCkBAIC01NSwxMyArNTYsMTMgQEAKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKCEoc3RhcnQrbGVuZ3RoIDw9IHMtPnN0YXJ0X3NlY3QgfHwKIAkJCQkgICAgICBzdGFydCA+PSBzLT5zdGFydF9zZWN0ICsgcy0+bnJfc2VjdHMpKSB7Ci0JCQkJCXVwKCZiZGV2LT5iZF9zZW0pOworCQkJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKIAkJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCQl9CiAJCQl9CiAJCQkvKiBhbGwgc2VlbXMgT0sgKi8KIAkJCWFkZF9wYXJ0aXRpb24oZGlzaywgcGFydCwgc3RhcnQsIGxlbmd0aCk7Ci0JCQl1cCgmYmRldi0+YmRfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgQkxLUEdfREVMX1BBUlRJVElPTjoKIAkJCWlmICghZGlzay0+cGFydFtwYXJ0LTFdKQpAQCAtNzEsOSArNzIsOSBAQAogCQkJYmRldnAgPSBiZGdldF9kaXNrKGRpc2ssIHBhcnQpOwogCQkJaWYgKCFiZGV2cCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCWRvd24oJmJkZXZwLT5iZF9zZW0pOworCQkJbXV0ZXhfbG9jaygmYmRldnAtPmJkX211dGV4KTsKIAkJCWlmIChiZGV2cC0+YmRfb3BlbmVycykgewotCQkJCXVwKCZiZGV2cC0+YmRfc2VtKTsKKwkJCQltdXRleF91bmxvY2soJmJkZXZwLT5iZF9tdXRleCk7CiAJCQkJYmRwdXQoYmRldnApOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CkBAIC04MSwxMCArODIsMTAgQEAKIAkJCWZzeW5jX2JkZXYoYmRldnApOwogCQkJaW52YWxpZGF0ZV9iZGV2KGJkZXZwLCAwKTsKIAotCQkJZG93bigmYmRldi0+YmRfc2VtKTsKKwkJCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKIAkJCWRlbGV0ZV9wYXJ0aXRpb24oZGlzaywgcGFydCk7Ci0JCQl1cCgmYmRldi0+YmRfc2VtKTsKLQkJCXVwKCZiZGV2cC0+YmRfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZiZGV2cC0+YmRfbXV0ZXgpOwogCQkJYmRwdXQoYmRldnApOwogCiAJCQlyZXR1cm4gMDsKQEAgLTEwMiwxMCArMTAzLDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7Ci0JaWYgKGRvd25fdHJ5bG9jaygmYmRldi0+YmRfc2VtKSkKKwlpZiAoIW11dGV4X3RyeWxvY2soJmJkZXYtPmJkX211dGV4KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAlyZXMgPSByZXNjYW5fcGFydGl0aW9ucyhkaXNrLCBiZGV2KTsKLQl1cCgmYmRldi0+YmRfc2VtKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xODksNiArMTkwLDExIEBACiAJCXJldHVybiBwdXRfdWxvbmcoYXJnLCBiZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDkpOwogCWNhc2UgQkxLR0VUU0laRTY0OgogCQlyZXR1cm4gcHV0X3U2NChhcmcsIGJkZXYtPmJkX2lub2RlLT5pX3NpemUpOworCWNhc2UgQkxLVFJBQ0VTVEFSVDoKKwljYXNlIEJMS1RSQUNFU1RPUDoKKwljYXNlIEJMS1RSQUNFU0VUVVA6CisJY2FzZSBCTEtUUkFDRVRFQVJET1dOOgorCQlyZXR1cm4gYmxrX3RyYWNlX2lvY3RsKGJkZXYsIGNtZCwgKGNoYXIgX191c2VyICopIGFyZyk7CiAJfQogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9sbF9yd19ibGsuYyBiL2Jsb2NrL2xsX3J3X2Jsay5jCmluZGV4IDAzZDljODIuLjA2MjA2N2YgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2xsX3J3X2Jsay5jCisrKyBiL2Jsb2NrL2xsX3J3X2Jsay5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CiAKIC8qCiAgKiBmb3IgbWF4IHNlbnNlIHNpemUKQEAgLTYyNSwyNiArNjI2LDMxIEBACiAgKiAgICBEaWZmZXJlbnQgaGFyZHdhcmUgY2FuIGhhdmUgZGlmZmVyZW50IHJlcXVpcmVtZW50cyBhcyB0byB3aGF0IHBhZ2VzCiAgKiAgICBpdCBjYW4gZG8gSS9PIGRpcmVjdGx5IHRvLiBBIGxvdyBsZXZlbCBkcml2ZXIgY2FuIGNhbGwKICAqICAgIGJsa19xdWV1ZV9ib3VuY2VfbGltaXQgdG8gaGF2ZSBsb3dlciBtZW1vcnkgcGFnZXMgYWxsb2NhdGVkIGFzIGJvdW5jZQotICogICAgYnVmZmVycyBmb3IgZG9pbmcgSS9PIHRvIHBhZ2VzIHJlc2lkaW5nIGFib3ZlIEBwYWdlLiBCeSBkZWZhdWx0Ci0gKiAgICB0aGUgYmxvY2sgbGF5ZXIgc2V0cyB0aGlzIHRvIHRoZSBoaWdoZXN0IG51bWJlcmVkICJsb3ciIG1lbW9yeSBwYWdlLgorICogICAgYnVmZmVycyBmb3IgZG9pbmcgSS9PIHRvIHBhZ2VzIHJlc2lkaW5nIGFib3ZlIEBwYWdlLgogICoqLwogdm9pZCBibGtfcXVldWVfYm91bmNlX2xpbWl0KHJlcXVlc3RfcXVldWVfdCAqcSwgdTY0IGRtYV9hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgYm91bmNlX3BmbiA9IGRtYV9hZGRyID4+IFBBR0VfU0hJRlQ7CisJaW50IGRtYSA9IDA7CiAKLQkvKgotCSAqIHNldCBhcHByb3ByaWF0ZSBib3VuY2UgZ2ZwIG1hc2sgLS0gdW5mb3J0dW5hdGVseSB3ZSBkb24ndCBoYXZlIGEKLQkgKiBmdWxsIDRHQiB6b25lLCBzbyB3ZSBoYXZlIHRvIHJlc29ydCB0byBsb3cgbWVtb3J5IGZvciBhbnkgYm91bmNlcy4KLQkgKiBJU0EgaGFzIGl0cyBvd24gPCAxNk1CIHpvbmUuCi0JICovCi0JaWYgKGJvdW5jZV9wZm4gPCBibGtfbWF4X2xvd19wZm4pIHsKLQkJQlVHX09OKGRtYV9hZGRyIDwgQkxLX0JPVU5DRV9JU0EpOworCXEtPmJvdW5jZV9nZnAgPSBHRlBfTk9JTzsKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJLyogQXNzdW1lIGFueXRoaW5nIDw9IDRHQiBjYW4gYmUgaGFuZGxlZCBieSBJT01NVS4KKwkgICBBY3R1YWxseSBzb21lIElPTU1VcyBjYW4gaGFuZGxlIGV2ZXJ5dGhpbmcsIGJ1dCBJIGRvbid0CisJICAga25vdyBvZiBhIHdheSB0byB0ZXN0IHRoaXMgaGVyZS4gKi8KKwlpZiAoYm91bmNlX3BmbiA8ICgweGZmZmZmZmZmPj5QQUdFX1NISUZUKSkKKwkJZG1hID0gMTsKKwlxLT5ib3VuY2VfcGZuID0gbWF4X2xvd19wZm47CisjZWxzZQorCWlmIChib3VuY2VfcGZuIDwgYmxrX21heF9sb3dfcGZuKQorCQlkbWEgPSAxOworCXEtPmJvdW5jZV9wZm4gPSBib3VuY2VfcGZuOworI2VuZGlmCisJaWYgKGRtYSkgewogCQlpbml0X2VtZXJnZW5jeV9pc2FfcG9vbCgpOwogCQlxLT5ib3VuY2VfZ2ZwID0gR0ZQX05PSU8gfCBHRlBfRE1BOwotCX0gZWxzZQotCQlxLT5ib3VuY2VfZ2ZwID0gR0ZQX05PSU87Ci0KLQlxLT5ib3VuY2VfcGZuID0gYm91bmNlX3BmbjsKKwkJcS0+Ym91bmNlX3BmbiA9IGJvdW5jZV9wZm47CisJfQogfQogCiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9ib3VuY2VfbGltaXQpOwpAQCAtMTU1MSw4ICsxNTU3LDEwIEBACiAJaWYgKHRlc3RfYml0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgJnEtPnF1ZXVlX2ZsYWdzKSkKIAkJcmV0dXJuOwogCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFFVRVVFX0ZMQUdfUExVR0dFRCwgJnEtPnF1ZXVlX2ZsYWdzKSkKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUVVFVUVfRkxBR19QTFVHR0VELCAmcS0+cXVldWVfZmxhZ3MpKSB7CiAJCW1vZF90aW1lcigmcS0+dW5wbHVnX3RpbWVyLCBqaWZmaWVzICsgcS0+dW5wbHVnX2RlbGF5KTsKKwkJYmxrX2FkZF90cmFjZV9nZW5lcmljKHEsIE5VTEwsIDAsIEJMS19UQV9QTFVHKTsKKwl9CiB9CiAKIEVYUE9SVF9TWU1CT0woYmxrX3BsdWdfZGV2aWNlKTsKQEAgLTE2MTYsMTQgKzE2MjQsMjEgQEAKIAkvKgogCSAqIGRldmljZXMgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhbiAtPnVucGx1Z19mbiBkZWZpbmVkCiAJICovCi0JaWYgKHEtPnVucGx1Z19mbikKKwlpZiAocS0+dW5wbHVnX2ZuKSB7CisJCWJsa19hZGRfdHJhY2VfcGR1X2ludChxLCBCTEtfVEFfVU5QTFVHX0lPLCBOVUxMLAorCQkJCQlxLT5ycS5jb3VudFtSRUFEXSArIHEtPnJxLmNvdW50W1dSSVRFXSk7CisKIAkJcS0+dW5wbHVnX2ZuKHEpOworCX0KIH0KIAogc3RhdGljIHZvaWQgYmxrX3VucGx1Z193b3JrKHZvaWQgKmRhdGEpCiB7CiAJcmVxdWVzdF9xdWV1ZV90ICpxID0gZGF0YTsKIAorCWJsa19hZGRfdHJhY2VfcGR1X2ludChxLCBCTEtfVEFfVU5QTFVHX0lPLCBOVUxMLAorCQkJCXEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdKTsKKwogCXEtPnVucGx1Z19mbihxKTsKIH0KIApAQCAtMTYzMSw2ICsxNjQ2LDkgQEAKIHsKIAlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSAocmVxdWVzdF9xdWV1ZV90ICopZGF0YTsKIAorCWJsa19hZGRfdHJhY2VfcGR1X2ludChxLCBCTEtfVEFfVU5QTFVHX1RJTUVSLCBOVUxMLAorCQkJCXEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdKTsKKwogCWtibG9ja2Rfc2NoZWR1bGVfd29yaygmcS0+dW5wbHVnX3dvcmspOwogfQogCkBAIC0xNzM1LDE2ICsxNzUzLDExIEBACiAgKiAgICAgSG9wZWZ1bGx5IHRoZSBsb3cgbGV2ZWwgZHJpdmVyIHdpbGwgaGF2ZSBmaW5pc2hlZCBhbnkKICAqICAgICBvdXRzdGFuZGluZyByZXF1ZXN0cyBmaXJzdC4uLgogICoqLwotdm9pZCBibGtfY2xlYW51cF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKiBxKQorc3RhdGljIHZvaWQgYmxrX3JlbGVhc2VfcXVldWUoc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CisJcmVxdWVzdF9xdWV1ZV90ICpxID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCByZXF1ZXN0X3F1ZXVlLCBrb2JqKTsKIAlzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybCA9ICZxLT5ycTsKIAotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmcS0+cmVmY250KSkKLQkJcmV0dXJuOwotCi0JaWYgKHEtPmVsZXZhdG9yKQotCQllbGV2YXRvcl9leGl0KHEtPmVsZXZhdG9yKTsKLQogCWJsa19zeW5jX3F1ZXVlKHEpOwogCiAJaWYgKHJsLT5ycV9wb29sKQpAQCAtMTc1Myw5ICsxNzY2LDMwIEBACiAJaWYgKHEtPnF1ZXVlX3RhZ3MpCiAJCV9fYmxrX3F1ZXVlX2ZyZWVfdGFncyhxKTsKIAorCWlmIChxLT5ibGtfdHJhY2UpCisJCWJsa190cmFjZV9zaHV0ZG93bihxKTsKKwogCWttZW1fY2FjaGVfZnJlZShyZXF1ZXN0cV9jYWNoZXAsIHEpOwogfQogCit2b2lkIGJsa19wdXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxKQoreworCWtvYmplY3RfcHV0KCZxLT5rb2JqKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX3B1dF9xdWV1ZSk7CisKK3ZvaWQgYmxrX2NsZWFudXBfcXVldWUocmVxdWVzdF9xdWV1ZV90ICogcSkKK3sKKwltdXRleF9sb2NrKCZxLT5zeXNmc19sb2NrKTsKKwlzZXRfYml0KFFVRVVFX0ZMQUdfREVBRCwgJnEtPnF1ZXVlX2ZsYWdzKTsKKwltdXRleF91bmxvY2soJnEtPnN5c2ZzX2xvY2spOworCisJaWYgKHEtPmVsZXZhdG9yKQorCQllbGV2YXRvcl9leGl0KHEtPmVsZXZhdG9yKTsKKworCWJsa19wdXRfcXVldWUocSk7Cit9CisKIEVYUE9SVF9TWU1CT0woYmxrX2NsZWFudXBfcXVldWUpOwogCiBzdGF0aWMgaW50IGJsa19pbml0X2ZyZWVfbGlzdChyZXF1ZXN0X3F1ZXVlX3QgKnEpCkBAIC0xNzgzLDYgKzE4MTcsOCBAQAogfQogRVhQT1JUX1NZTUJPTChibGtfYWxsb2NfcXVldWUpOwogCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBxdWV1ZV9rdHlwZTsKKwogcmVxdWVzdF9xdWV1ZV90ICpibGtfYWxsb2NfcXVldWVfbm9kZShnZnBfdCBnZnBfbWFzaywgaW50IG5vZGVfaWQpCiB7CiAJcmVxdWVzdF9xdWV1ZV90ICpxOwpAQCAtMTc5MywxMSArMTgyOSwxNiBAQAogCiAJbWVtc2V0KHEsIDAsIHNpemVvZigqcSkpOwogCWluaXRfdGltZXIoJnEtPnVucGx1Z190aW1lcik7Ci0JYXRvbWljX3NldCgmcS0+cmVmY250LCAxKTsKKworCXNucHJpbnRmKHEtPmtvYmoubmFtZSwgS09CSl9OQU1FX0xFTiwgIiVzIiwgInF1ZXVlIik7CisJcS0+a29iai5rdHlwZSA9ICZxdWV1ZV9rdHlwZTsKKwlrb2JqZWN0X2luaXQoJnEtPmtvYmopOwogCiAJcS0+YmFja2luZ19kZXZfaW5mby51bnBsdWdfaW9fZm4gPSBibGtfYmFja2luZ19kZXZfdW5wbHVnOwogCXEtPmJhY2tpbmdfZGV2X2luZm8udW5wbHVnX2lvX2RhdGEgPSBxOwogCisJbXV0ZXhfaW5pdCgmcS0+c3lzZnNfbG9jayk7CisKIAlyZXR1cm4gcTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX2FsbG9jX3F1ZXVlX25vZGUpOwpAQCAtMTg0OSw4ICsxODkwLDEwIEBACiAJCXJldHVybiBOVUxMOwogCiAJcS0+bm9kZSA9IG5vZGVfaWQ7Ci0JaWYgKGJsa19pbml0X2ZyZWVfbGlzdChxKSkKLQkJZ290byBvdXRfaW5pdDsKKwlpZiAoYmxrX2luaXRfZnJlZV9saXN0KHEpKSB7CisJCWttZW1fY2FjaGVfZnJlZShyZXF1ZXN0cV9jYWNoZXAsIHEpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAkvKgogCSAqIGlmIGNhbGxlciBkaWRuJ3Qgc3VwcGx5IGEgbG9jaywgdGhleSBnZXQgcGVyLXF1ZXVlIGxvY2tpbmcgd2l0aApAQCAtMTg4Niw5ICsxOTI5LDcgQEAKIAkJcmV0dXJuIHE7CiAJfQogCi0JYmxrX2NsZWFudXBfcXVldWUocSk7Ci1vdXRfaW5pdDoKLQlrbWVtX2NhY2hlX2ZyZWUocmVxdWVzdHFfY2FjaGVwLCBxKTsKKwlibGtfcHV0X3F1ZXVlKHEpOwogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChibGtfaW5pdF9xdWV1ZV9ub2RlKTsKQEAgLTE4OTYsNyArMTkzNyw3IEBACiBpbnQgYmxrX2dldF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpCiB7CiAJaWYgKGxpa2VseSghdGVzdF9iaXQoUVVFVUVfRkxBR19ERUFELCAmcS0+cXVldWVfZmxhZ3MpKSkgewotCQlhdG9taWNfaW5jKCZxLT5yZWZjbnQpOworCQlrb2JqZWN0X2dldCgmcS0+a29iaik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjEwNCw2ICsyMTQ1LDggQEAKIAkKIAlycV9pbml0KHEsIHJxKTsKIAlycS0+cmwgPSBybDsKKworCWJsa19hZGRfdHJhY2VfZ2VuZXJpYyhxLCBiaW8sIHJ3LCBCTEtfVEFfR0VUUlEpOwogb3V0OgogCXJldHVybiBycTsKIH0KQEAgLTIxMzIsNiArMjE3NSw4IEBACiAJCWlmICghcnEpIHsKIAkJCXN0cnVjdCBpb19jb250ZXh0ICppb2M7CiAKKwkJCWJsa19hZGRfdHJhY2VfZ2VuZXJpYyhxLCBiaW8sIHJ3LCBCTEtfVEFfU0xFRVBSUSk7CisKIAkJCV9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHEpOwogCQkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQkJaW9fc2NoZWR1bGUoKTsKQEAgLTIxODUsNiArMjIzMCw4IEBACiAgKi8KIHZvaWQgYmxrX3JlcXVldWVfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKwlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfUkVRVUVVRSk7CisKIAlpZiAoYmxrX3JxX3RhZ2dlZChycSkpCiAJCWJsa19xdWV1ZV9lbmRfdGFnKHEsIHJxKTsKIApAQCAtMjgxOSw2ICsyODY2LDggQEAKIAkJCWlmICghcS0+YmFja19tZXJnZV9mbihxLCByZXEsIGJpbykpCiAJCQkJYnJlYWs7CiAKKwkJCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0JBQ0tNRVJHRSk7CisKIAkJCXJlcS0+YmlvdGFpbC0+YmlfbmV4dCA9IGJpbzsKIAkJCXJlcS0+YmlvdGFpbCA9IGJpbzsKIAkJCXJlcS0+bnJfc2VjdG9ycyA9IHJlcS0+aGFyZF9ucl9zZWN0b3JzICs9IG5yX3NlY3RvcnM7CkBAIC0yODM0LDYgKzI4ODMsOCBAQAogCQkJaWYgKCFxLT5mcm9udF9tZXJnZV9mbihxLCByZXEsIGJpbykpCiAJCQkJYnJlYWs7CiAKKwkJCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0ZST05UTUVSR0UpOworCiAJCQliaW8tPmJpX25leHQgPSByZXEtPmJpbzsKIAkJCXJlcS0+YmlvID0gYmlvOwogCkBAIC0yOTUxLDYgKzMwMDIsNyBAQAogCXJlcXVlc3RfcXVldWVfdCAqcTsKIAlzZWN0b3JfdCBtYXhzZWN0b3I7CiAJaW50IHJldCwgbnJfc2VjdG9ycyA9IGJpb19zZWN0b3JzKGJpbyk7CisJZGV2X3Qgb2xkX2RldjsKIAogCW1pZ2h0X3NsZWVwKCk7CiAJLyogVGVzdCBkZXZpY2Ugb3IgcGFydGl0aW9uIHNpemUsIHdoZW4ga25vd24uICovCkBAIC0yOTc3LDYgKzMwMjksOCBAQAogCSAqIE5PVEU6IHdlIGRvbid0IHJlcGVhdCB0aGUgYmxrX3NpemUgY2hlY2sgZm9yIGVhY2ggbmV3IGRldmljZS4KIAkgKiBTdGFja2luZyBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcuCiAJICovCisJbWF4c2VjdG9yID0gLTE7CisJb2xkX2RldiA9IDA7CiAJZG8gewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKQEAgLTMwMDksNiArMzA2MywxNSBAQAogCQkgKi8KIAkJYmxrX3BhcnRpdGlvbl9yZW1hcChiaW8pOwogCisJCWlmIChtYXhzZWN0b3IgIT0gLTEpCisJCQlibGtfYWRkX3RyYWNlX3JlbWFwKHEsIGJpbywgb2xkX2RldiwgYmlvLT5iaV9zZWN0b3IsIAorCQkJCQkgICAgbWF4c2VjdG9yKTsKKworCQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9RVUVVRSk7CisKKwkJbWF4c2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CisJCW9sZF9kZXYgPSBiaW8tPmJpX2JkZXYtPmJkX2RldjsKKwogCQlyZXQgPSBxLT5tYWtlX3JlcXVlc3RfZm4ocSwgYmlvKTsKIAl9IHdoaWxlIChyZXQpOwogfQpAQCAtMzEyOCw2ICszMTkxLDggQEAKIAlpbnQgdG90YWxfYnl0ZXMsIGJpb19uYnl0ZXMsIGVycm9yLCBuZXh0X2lkeCA9IDA7CiAJc3RydWN0IGJpbyAqYmlvOwogCisJYmxrX2FkZF90cmFjZV9ycShyZXEtPnEsIHJlcSwgQkxLX1RBX0NPTVBMRVRFKTsKKwogCS8qCiAJICogZXh0ZW5kIHVwdG9kYXRlIGJvb2wgdG8gYWxsb3cgPCAwIHZhbHVlIHRvIGJlIGRpcmVjdCBpbyBlcnJvcgogCSAqLwpAQCAtMzQ3MiwxMCArMzUzNywxMiBAQAogCUJVR19PTihhdG9taWNfcmVhZCgmaW9jLT5yZWZjb3VudCkgPT0gMCk7CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW9jLT5yZWZjb3VudCkpIHsKKwkJcmN1X3JlYWRfbG9jaygpOwogCQlpZiAoaW9jLT5haWMgJiYgaW9jLT5haWMtPmR0b3IpCiAJCQlpb2MtPmFpYy0+ZHRvcihpb2MtPmFpYyk7CiAJCWlmIChpb2MtPmNpYyAmJiBpb2MtPmNpYy0+ZHRvcikKIAkJCWlvYy0+Y2ljLT5kdG9yKGlvYy0+Y2ljKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJa21lbV9jYWNoZV9mcmVlKGlvY29udGV4dF9jYWNoZXAsIGlvYyk7CiAJfQpAQCAtMzYwOSwxMCArMzY3NiwxMyBAQAogcXVldWVfcmVxdWVzdHNfc3RvcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybCA9ICZxLT5ycTsKKwl1bnNpZ25lZCBsb25nIG5yOworCWludCByZXQgPSBxdWV1ZV92YXJfc3RvcmUoJm5yLCBwYWdlLCBjb3VudCk7CisJaWYgKG5yIDwgQkxLREVWX01JTl9SUSkKKwkJbnIgPSBCTEtERVZfTUlOX1JROwogCi0JaW50IHJldCA9IHF1ZXVlX3Zhcl9zdG9yZSgmcS0+bnJfcmVxdWVzdHMsIHBhZ2UsIGNvdW50KTsKLQlpZiAocS0+bnJfcmVxdWVzdHMgPCBCTEtERVZfTUlOX1JRKQotCQlxLT5ucl9yZXF1ZXN0cyA9IEJMS0RFVl9NSU5fUlE7CisJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKKwlxLT5ucl9yZXF1ZXN0cyA9IG5yOwogCWJsa19xdWV1ZV9jb25nZXN0aW9uX3RocmVzaG9sZChxKTsKIAogCWlmIChybC0+Y291bnRbUkVBRF0gPj0gcXVldWVfY29uZ2VzdGlvbl9vbl90aHJlc2hvbGQocSkpCkBAIC0zNjM4LDYgKzM3MDgsNyBAQAogCQlibGtfY2xlYXJfcXVldWVfZnVsbChxLCBXUklURSk7CiAJCXdha2VfdXAoJnJsLT53YWl0W1dSSVRFXSk7CiAJfQorCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzUzLDEzICszODI0LDE5IEBACiBxdWV1ZV9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKnBhZ2UpCiB7CiAJc3RydWN0IHF1ZXVlX3N5c2ZzX2VudHJ5ICplbnRyeSA9IHRvX3F1ZXVlKGF0dHIpOwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOworCXJlcXVlc3RfcXVldWVfdCAqcSA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSwga29iaik7CisJc3NpemVfdCByZXM7CiAKLQlxID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCByZXF1ZXN0X3F1ZXVlLCBrb2JqKTsKIAlpZiAoIWVudHJ5LT5zaG93KQogCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiBlbnRyeS0+c2hvdyhxLCBwYWdlKTsKKwltdXRleF9sb2NrKCZxLT5zeXNmc19sb2NrKTsKKwlpZiAodGVzdF9iaXQoUVVFVUVfRkxBR19ERUFELCAmcS0+cXVldWVfZmxhZ3MpKSB7CisJCW11dGV4X3VubG9jaygmcS0+c3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlyZXMgPSBlbnRyeS0+c2hvdyhxLCBwYWdlKTsKKwltdXRleF91bmxvY2soJnEtPnN5c2ZzX2xvY2spOworCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0zNzY3LDEzICszODQ0LDIwIEBACiAJCSAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuZ3RoKQogewogCXN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSAqZW50cnkgPSB0b19xdWV1ZShhdHRyKTsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKKwlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHJlcXVlc3RfcXVldWUsIGtvYmopOwogCi0JcSA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSwga29iaik7CisJc3NpemVfdCByZXM7CisKIAlpZiAoIWVudHJ5LT5zdG9yZSkKIAkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gZW50cnktPnN0b3JlKHEsIHBhZ2UsIGxlbmd0aCk7CisJbXV0ZXhfbG9jaygmcS0+c3lzZnNfbG9jayk7CisJaWYgKHRlc3RfYml0KFFVRVVFX0ZMQUdfREVBRCwgJnEtPnF1ZXVlX2ZsYWdzKSkgeworCQltdXRleF91bmxvY2soJnEtPnN5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJcmVzID0gZW50cnktPnN0b3JlKHEsIHBhZ2UsIGxlbmd0aCk7CisJbXV0ZXhfdW5sb2NrKCZxLT5zeXNmc19sb2NrKTsKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBxdWV1ZV9zeXNmc19vcHMgPSB7CkBAIC0zNzg0LDYgKzM4NjgsNyBAQAogc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgcXVldWVfa3R5cGUgPSB7CiAJLnN5c2ZzX29wcwk9ICZxdWV1ZV9zeXNmc19vcHMsCiAJLmRlZmF1bHRfYXR0cnMJPSBkZWZhdWx0X2F0dHJzLAorCS5yZWxlYXNlCT0gYmxrX3JlbGVhc2VfcXVldWUsCiB9OwogCiBpbnQgYmxrX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBnZW5kaXNrICpkaXNrKQpAQCAtMzc5NiwxOSArMzg4MSwxNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJcS0+a29iai5wYXJlbnQgPSBrb2JqZWN0X2dldCgmZGlzay0+a29iaik7Ci0JaWYgKCFxLT5rb2JqLnBhcmVudCkKLQkJcmV0dXJuIC1FQlVTWTsKIAotCXNucHJpbnRmKHEtPmtvYmoubmFtZSwgS09CSl9OQU1FX0xFTiwgIiVzIiwgInF1ZXVlIik7Ci0JcS0+a29iai5rdHlwZSA9ICZxdWV1ZV9rdHlwZTsKLQotCXJldCA9IGtvYmplY3RfcmVnaXN0ZXIoJnEtPmtvYmopOworCXJldCA9IGtvYmplY3RfYWRkKCZxLT5rb2JqKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCWtvYmplY3RfdWV2ZW50KCZxLT5rb2JqLCBLT0JKX0FERCk7CisKIAlyZXQgPSBlbHZfcmVnaXN0ZXJfcXVldWUocSk7CiAJaWYgKHJldCkgewotCQlrb2JqZWN0X3VucmVnaXN0ZXIoJnEtPmtvYmopOworCQlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9SRU1PVkUpOworCQlrb2JqZWN0X2RlbCgmcS0+a29iaik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0zODIyLDcgKzM5MDUsOCBAQAogCWlmIChxICYmIHEtPnJlcXVlc3RfZm4pIHsKIAkJZWx2X3VucmVnaXN0ZXJfcXVldWUocSk7CiAKLQkJa29iamVjdF91bnJlZ2lzdGVyKCZxLT5rb2JqKTsKKwkJa29iamVjdF91ZXZlbnQoJnEtPmtvYmosIEtPQkpfUkVNT1ZFKTsKKwkJa29iamVjdF9kZWwoJnEtPmtvYmopOwogCQlrb2JqZWN0X3B1dCgmZGlzay0+a29iaik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy5jIGIvY3J5cHRvL2Flcy5jCmluZGV4IDBhNmE1YzEuLmE1MDE3MjkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMuYworKysgYi9jcnlwdG8vYWVzLmMKQEAgLTc1LDEyICs3NSwxMSBAQAogCiBzdHJ1Y3QgYWVzX2N0eCB7CiAJaW50IGtleV9sZW5ndGg7Ci0JdTMyIEVbNjBdOwotCXUzMiBEWzYwXTsKKwl1MzIgYnVmWzEyMF07CiB9OwogCi0jZGVmaW5lIEVfS0VZIGN0eC0+RQotI2RlZmluZSBEX0tFWSBjdHgtPkQKKyNkZWZpbmUgRV9LRVkgKCZjdHgtPmJ1ZlswXSkKKyNkZWZpbmUgRF9LRVkgKCZjdHgtPmJ1Zls2MF0pCiAKIHN0YXRpYyB1OCBwb3dfdGFiWzI1Nl0gX19pbml0ZGF0YTsKIHN0YXRpYyB1OCBsb2dfdGFiWzI1Nl0gX19pbml0ZGF0YTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCBlMjYxNTZmLi44MGJiYTYzIDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIGxlbiArIGFsZy0+Y3JhX2FsaWdubWFzazsKKwlyZXR1cm4gbGVuICsgKGFsZy0+Y3JhX2FsaWdubWFzayAmIH4oY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkgLSAxKSk7CiB9CiAKIHN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBmbGFncykKQEAgLTE3OSwxMiArMTc5LDEwIEBACiAJCWdvdG8gb3V0OwogCiAJdGZtX3NpemUgPSBzaXplb2YoKnRmbSkgKyBjcnlwdG9fY3R4c2l6ZShhbGcsIGZsYWdzKTsKLQl0Zm0gPSBrbWFsbG9jKHRmbV9zaXplLCBHRlBfS0VSTkVMKTsKKwl0Zm0gPSBremFsbG9jKHRmbV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAodGZtID09IE5VTEwpCiAJCWdvdG8gb3V0X3B1dDsKIAotCW1lbXNldCh0Zm0sIDAsIHRmbV9zaXplKTsKLQkKIAl0Zm0tPl9fY3J0X2FsZyA9IGFsZzsKIAkKIAlpZiAoY3J5cHRvX2luaXRfZmxhZ3ModGZtLCBmbGFncykpCmRpZmYgLS1naXQgYS9jcnlwdG8vZGVmbGF0ZS5jIGIvY3J5cHRvL2RlZmxhdGUuYwppbmRleCBiYzczMzQyLi5mMjA5MzY4IDEwMDY0NAotLS0gYS9jcnlwdG8vZGVmbGF0ZS5jCisrKyBiL2NyeXB0by9kZWZsYXRlLmMKQEAgLTczLDEyICs3MywxMSBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5kZWNvbXBfc3RyZWFtOwogCi0Jc3RyZWFtLT53b3Jrc3BhY2UgPSBrbWFsbG9jKHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCksIEdGUF9LRVJORUwpOworCXN0cmVhbS0+d29ya3NwYWNlID0ga3phbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXN0cmVhbS0+d29ya3NwYWNlICkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0JbWVtc2V0KHN0cmVhbS0+d29ya3NwYWNlLCAwLCB6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKIAlyZXQgPSB6bGliX2luZmxhdGVJbml0MihzdHJlYW0sIC1ERUZMQVRFX0RFRl9XSU5CSVRTKTsKIAlpZiAocmV0ICE9IFpfT0spIHsKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2NyeXB0by9kZXMuYyBiL2NyeXB0by9kZXMuYwppbmRleCA3YmI1NDg2Li4yZDc0Y2FiIDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzLmMKKysrIGIvY3J5cHRvL2Rlcy5jCkBAIC05NjUsNiArOTY1LDcgQEAKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlERVMzX0VERV9CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGRlczNfZWRlX2N0eCksCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCisJLmNyYV9hbGlnbm1hc2sJCT0JMywKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoZGVzM19lZGVfYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsgLmNpcGhlciA9IHsKIAkuY2lhX21pbl9rZXlzaXplCT0JREVTM19FREVfS0VZX1NJWkUsCmRpZmYgLS1naXQgYS9jcnlwdG8vc2VycGVudC5jIGIvY3J5cHRvL3NlcnBlbnQuYwppbmRleCA1MmFkMWE0Li5lMzY2NDA2IDEwMDY0NAotLS0gYS9jcnlwdG8vc2VycGVudC5jCisrKyBiL2NyeXB0by9zZXJwZW50LmMKQEAgLTQ4MSw2ICs0ODEsNyBAQAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlTRVJQRU5UX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3Qgc2VycGVudF9jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9CTMsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKHNlcnBlbnRfYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsgLmNpcGhlciA9IHsKZGlmZiAtLWdpdCBhL2NyeXB0by90Y3J5cHQuaCBiL2NyeXB0by90Y3J5cHQuaAppbmRleCA3MzNkMDdlLi4xZjY4M2JhIDEwMDY0NAotLS0gYS9jcnlwdG8vdGNyeXB0LmgKKysrIGIvY3J5cHRvL3RjcnlwdC5oCkBAIC0yNiwzNyArMjYsMzggQEAKICNkZWZpbmUgTUFYX0lWTEVOCQkzMgogCiBzdHJ1Y3QgaGFzaF90ZXN0dmVjIHsKKwkvKiBvbmx5IHVzZWQgd2l0aCBrZXllZCBoYXNoIGFsZ29yaXRobXMgKi8KKwljaGFyIGtleVsxMjhdIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXyg0KSkpOwogCWNoYXIgcGxhaW50ZXh0WzEyOF07Ci0JdW5zaWduZWQgY2hhciBwc2l6ZTsKIAljaGFyIGRpZ2VzdFtNQVhfRElHRVNUX1NJWkVdOwotCXVuc2lnbmVkIGNoYXIgbnA7CiAJdW5zaWduZWQgY2hhciB0YXBbTUFYX1RBUF07Ci0JY2hhciBrZXlbMTI4XTsgLyogb25seSB1c2VkIHdpdGgga2V5ZWQgaGFzaCBhbGdvcml0aG1zICovCisJdW5zaWduZWQgY2hhciBwc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIG5wOwogCXVuc2lnbmVkIGNoYXIga3NpemU7CiB9OwogCiBzdHJ1Y3QgaG1hY190ZXN0dmVjIHsKIAljaGFyIGtleVsxMjhdOwotCXVuc2lnbmVkIGNoYXIga3NpemU7CiAJY2hhciBwbGFpbnRleHRbMTI4XTsKLQl1bnNpZ25lZCBjaGFyIHBzaXplOwogCWNoYXIgZGlnZXN0W01BWF9ESUdFU1RfU0laRV07Ci0JdW5zaWduZWQgY2hhciBucDsKIAl1bnNpZ25lZCBjaGFyIHRhcFtNQVhfVEFQXTsKKwl1bnNpZ25lZCBjaGFyIGtzaXplOworCXVuc2lnbmVkIGNoYXIgcHNpemU7CisJdW5zaWduZWQgY2hhciBucDsKIH07CiAKIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyB7Ci0JdW5zaWduZWQgY2hhciBmYWlsOwotCXVuc2lnbmVkIGNoYXIgd2s7IC8qIHdlYWsga2V5IGZsYWcgKi8KLQljaGFyIGtleVtNQVhfS0VZTEVOXTsKLQl1bnNpZ25lZCBjaGFyIGtsZW47CisJY2hhciBrZXlbTUFYX0tFWUxFTl0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDQpKSk7CiAJY2hhciBpdltNQVhfSVZMRU5dOwogCWNoYXIgaW5wdXRbNDhdOwotCXVuc2lnbmVkIGNoYXIgaWxlbjsKIAljaGFyIHJlc3VsdFs0OF07Ci0JdW5zaWduZWQgY2hhciBybGVuOwotCWludCBucDsKIAl1bnNpZ25lZCBjaGFyIHRhcFtNQVhfVEFQXTsKKwlpbnQgbnA7CisJdW5zaWduZWQgY2hhciBmYWlsOworCXVuc2lnbmVkIGNoYXIgd2s7IC8qIHdlYWsga2V5IGZsYWcgKi8KKwl1bnNpZ25lZCBjaGFyIGtsZW47CisJdW5zaWduZWQgY2hhciBpbGVuOworCXVuc2lnbmVkIGNoYXIgcmxlbjsKIH07CiAKIHN0cnVjdCBjaXBoZXJfc3BlZWQgewpkaWZmIC0tZ2l0IGEvY3J5cHRvL3R3b2Zpc2guYyBiL2NyeXB0by90d29maXNoLmMKaW5kZXggYTI2ZDg4NS4uZGRmZDVhMyAxMDA2NDQKLS0tIGEvY3J5cHRvL3R3b2Zpc2guYworKysgYi9jcnlwdG8vdHdvZmlzaC5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAKIC8qIFRoZSBsYXJnZSBwcmVjb21wdXRlZCB0YWJsZXMgZm9yIHRoZSBUd29maXNoIGNpcGhlciAodHdvZmlzaC5jKQpAQCAtNTQyLDkgKzU0Myw5IEBACiAjZGVmaW5lIENBTENfSyhhLCBqLCBrLCBsLCBtLCBuKSBcCiAgICB4ID0gQ0FMQ19LXzIgKGssIGwsIGssIGwsIDApOyBcCiAgICB5ID0gQ0FMQ19LXzIgKG0sIG4sIG0sIG4sIDQpOyBcCi0gICB5ID0gKHkgPDwgOCkgKyAoeSA+PiAyNCk7IFwKKyAgIHkgPSByb2wzMih5LCA4KTsgXAogICAgeCArPSB5OyB5ICs9IHg7IGN0eC0+YVtqXSA9IHg7IFwKLSAgIGN0eC0+YVsoaikgKyAxXSA9ICh5IDw8IDkpICsgKHkgPj4gMjMpCisgICBjdHgtPmFbKGopICsgMV0gPSByb2wzMih5LCA5KQogCiAjZGVmaW5lIENBTENfSzE5Ml8yKGEsIGIsIGMsIGQsIGopIFwKICAgIENBTENfS18yIChxMFthIF4ga2V5WyhqKSArIDE2XV0sIFwKQEAgLTU1NSw5ICs1NTYsOSBAQAogI2RlZmluZSBDQUxDX0sxOTIoYSwgaiwgaywgbCwgbSwgbikgXAogICAgeCA9IENBTENfSzE5Ml8yIChsLCBsLCBrLCBrLCAwKTsgXAogICAgeSA9IENBTENfSzE5Ml8yIChuLCBuLCBtLCBtLCA0KTsgXAotICAgeSA9ICh5IDw8IDgpICsgKHkgPj4gMjQpOyBcCisgICB5ID0gcm9sMzIoeSwgOCk7IFwKICAgIHggKz0geTsgeSArPSB4OyBjdHgtPmFbal0gPSB4OyBcCi0gICBjdHgtPmFbKGopICsgMV0gPSAoeSA8PCA5KSArICh5ID4+IDIzKQorICAgY3R4LT5hWyhqKSArIDFdID0gcm9sMzIoeSwgOSkKIAogI2RlZmluZSBDQUxDX0syNTZfMihhLCBiLCBqKSBcCiAgICBDQUxDX0sxOTJfMiAocTFbYiBeIGtleVsoaikgKyAyNF1dLCBcCkBAIC01NjgsOSArNTY5LDkgQEAKICNkZWZpbmUgQ0FMQ19LMjU2KGEsIGosIGssIGwsIG0sIG4pIFwKICAgIHggPSBDQUxDX0syNTZfMiAoaywgbCwgMCk7IFwKICAgIHkgPSBDQUxDX0syNTZfMiAobSwgbiwgNCk7IFwKLSAgIHkgPSAoeSA8PCA4KSArICh5ID4+IDI0KTsgXAorICAgeSA9IHJvbDMyKHksIDgpOyBcCiAgICB4ICs9IHk7IHkgKz0geDsgY3R4LT5hW2pdID0geDsgXAotICAgY3R4LT5hWyhqKSArIDFdID0gKHkgPDwgOSkgKyAoeSA+PiAyMykKKyAgIGN0eC0+YVsoaikgKyAxXSA9IHJvbDMyKHksIDkpCiAKIAogLyogTWFjcm9zIHRvIGNvbXB1dGUgdGhlIGcoKSBmdW5jdGlvbiBpbiB0aGUgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbgpAQCAtNTk0LDE1ICs1OTUsMTUgQEAKICAgIHggPSBHMSAoYSk7IHkgPSBHMiAoYik7IFwKICAgIHggKz0geTsgeSArPSB4ICsgY3R4LT5rWzIgKiAobikgKyAxXTsgXAogICAgKGMpIF49IHggKyBjdHgtPmtbMiAqIChuKV07IFwKLSAgIChjKSA9ICgoYykgPj4gMSkgKyAoKGMpIDw8IDMxKTsgXAotICAgKGQpID0gKCgoZCkgPDwgMSkrKChkKSA+PiAzMSkpIF4geQorICAgKGMpID0gcm9yMzIoKGMpLCAxKTsgXAorICAgKGQpID0gcm9sMzIoKGQpLCAxKSBeIHkKIAogI2RlZmluZSBERUNST1VORChuLCBhLCBiLCBjLCBkKSBcCiAgICB4ID0gRzEgKGEpOyB5ID0gRzIgKGIpOyBcCiAgICB4ICs9IHk7IHkgKz0geDsgXAogICAgKGQpIF49IHkgKyBjdHgtPmtbMiAqIChuKSArIDFdOyBcCi0gICAoZCkgPSAoKGQpID4+IDEpICsgKChkKSA8PCAzMSk7IFwKLSAgIChjKSA9ICgoKGMpIDw8IDEpKygoYykgPj4gMzEpKTsgXAorICAgKGQpID0gcm9yMzIoKGQpLCAxKTsgXAorICAgKGMpID0gcm9sMzIoKGMpLCAxKTsgXAogICAgKGMpIF49ICh4ICsgY3R4LT5rWzIgKiAobildKQogCiAvKiBFbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uIGN5Y2xlczsgZWFjaCBvbmUgaXMgc2ltcGx5IHR3byBGZWlzdGVsIHJvdW5kcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCAwY2NlMjhjLi41Y2I5NjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMjA1LDYgKzIwNSwxOCBAQAogCiAJICBJZiB5b3UgaGF2ZSBhbiBJQk0gVGhpbmtQYWQgbGFwdG9wLCBzYXkgWSBvciBNIGhlcmUuCiAKK2NvbmZpZyBBQ1BJX0lCTV9ET0NLCisJYm9vbCAiTGVnYWN5IERvY2tpbmcgU3RhdGlvbiBTdXBwb3J0IgorCWRlcGVuZHMgb24gQUNQSV9JQk0KKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBBbGxvd3MgdGhlIGlibV9hY3BpIGRyaXZlciB0byBoYW5kbGUgZG9ja2luZyBzdGF0aW9uIGV2ZW50cy4KKwkgIFRoaXMgc3VwcG9ydCBpcyBvYnNvbGV0ZWQgYnkgQ09ORklHX0hPVFBMVUdfUENJX0FDUEkuICBJdCB3aWxsCisJICBhbGxvdyBsb2NraW5nIGFuZCByZW1vdmluZyB0aGUgbGFwdG9wIGZyb20gdGhlIGRvY2tpbmcgc3RhdGlvbiwKKwkgIGJ1dCB3aWxsIG5vdCBwcm9wZXJseSBjb25uZWN0IFBDSSBkZXZpY2VzLgorCisJICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgTiBoZXJlLgorCiBjb25maWcgQUNQSV9UT1NISUJBCiAJdHJpc3RhdGUgIlRvc2hpYmEgTGFwdG9wIEV4dHJhcyIKIAlkZXBlbmRzIG9uIFg4NgpAQCAtMjQ0LDEwICsyNTYsMTEgQEAKIAlkZXBlbmRzIG9uIEFDUElfQ1VTVE9NX0RTRFQKIAlkZWZhdWx0ICIiCiAJaGVscAotCSAgRW50ZXIgdGhlIGZ1bGwgcGF0aCBuYW1lIHRvIHRoZSBmaWxlIHdpY2ggaW5jbHVkZXMgdGhlIEFtbENvZGUgZGVjbGFyYXRpb24uCisJICBFbnRlciB0aGUgZnVsbCBwYXRoIG5hbWUgdG8gdGhlIGZpbGUgd2hpY2ggaW5jbHVkZXMgdGhlIEFtbENvZGUKKwkgIGRlY2xhcmF0aW9uLgogCiBjb25maWcgQUNQSV9CTEFDS0xJU1RfWUVBUgotCWludCAiRGlzYWJsZSBBQ1BJIGZvciBzeXN0ZW1zIGJlZm9yZSBKYW4gMXN0IHRoaXMgeWVhciIgaWYgWDg2CisJaW50ICJEaXNhYmxlIEFDUEkgZm9yIHN5c3RlbXMgYmVmb3JlIEphbiAxc3QgdGhpcyB5ZWFyIiBpZiBYODZfMzIKIAlkZWZhdWx0IDAKIAloZWxwCiAJICBlbnRlciBhIDQtZGlnaXQgeWVhciwgZWcuIDIwMDEgdG8gZGlzYWJsZSBBQ1BJIGJ5IGRlZmF1bHQKQEAgLTI4NSw5ICsyOTgsOCBAQAogCSAgZHVtcCB5b3VyIEFDUEkgRFNEVCB0YWJsZSB1c2luZyAvcHJvYy9hY3BpL2RzZHQuCiAKIGNvbmZpZyBYODZfUE1fVElNRVIKLQlib29sICJQb3dlciBNYW5hZ2VtZW50IFRpbWVyIFN1cHBvcnQiCisJYm9vbCAiUG93ZXIgTWFuYWdlbWVudCBUaW1lciBTdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gWDg2Ci0JZGVwZW5kcyBvbiAhWDg2XzY0CiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhlIFBvd2VyIE1hbmFnZW1lbnQgVGltZXIgaXMgYXZhaWxhYmxlIG9uIGFsbCBBQ1BJLWNhcGFibGUsCkBAIC0yOTgsOSArMzEwLDggQEAKIAkgIHZvbHRhZ2Ugc2NhbGluZywgdW5saWtlIHRoZSBjb21tb25seSB1c2VkIFRpbWUgU3RhbXAgQ291bnRlcgogCSAgKFRTQykgdGltaW5nIHNvdXJjZS4KIAotCSAgU28sIGlmIHlvdSBzZWUgbWVzc2FnZXMgbGlrZSAnTG9zaW5nIHRvbyBtYW55IHRpY2tzIScgaW4gdGhlCi0JICBrZXJuZWwgbG9ncywgYW5kL29yIHlvdSBhcmUgdXNpbmcgdGhpcyBvbiBhIG5vdGVib29rIHdoaWNoCi0JICBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBIUEVULCB5b3Ugc2hvdWxkIHNheSAiWSIgaGVyZS4KKwkgIFlvdSBzaG91bGQgbmVhcmx5IGFsd2F5cyBzYXkgWSBoZXJlIGJlY2F1c2UgbWFueSBtb2Rlcm4KKwkgIHN5c3RlbXMgcmVxdWlyZSB0aGlzIHRpbWVyLiAKIAogY29uZmlnIEFDUElfQ09OVEFJTkVSCiAJdHJpc3RhdGUgIkFDUEkwMDA0LFBOUDBBMDUgYW5kIFBOUDBBMDYgQ29udGFpbmVyIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9pYm1fYWNwaS5jIGIvZHJpdmVycy9hY3BpL2libV9hY3BpLmMKaW5kZXggNWNjMDkwMy4uMjYyYjFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2libV9hY3BpLmMKKysrIGIvZHJpdmVycy9hY3BpL2libV9hY3BpLmMKQEAgLTE2MCwxMyArMTYwLDEzIEBACiAJICAgIlxcQ01PUyIsCQkvKiBBM3gsIEc0eCwgUjMyLCBUMjMsIFQzMCwgWDIyLTI0LCBYMzAgKi8KIAkgICAiXFxDTVMiLAkJLyogUjQwLCBSNDBlICovCiAgICAgKTsJCQkJLyogYWxsIG90aGVycyAqLwotCisjaWZkZWYgQ09ORklHX0FDUElfSUJNX0RPQ0sKIElCTV9IQU5ETEUoZG9jaywgcm9vdCwgIlxcX1NCLkdEQ0siLAkvKiBYMzAsIFgzMSwgWDQwICovCiAJICAgIlxcX1NCLlBDSTAuRE9DSyIsCS8qIDYwMGUveCw3NzBlLDc3MHgsQTJ4bS9wLFQyMC0yMixYMjAtMjEgKi8KIAkgICAiXFxfU0IuUENJMC5QQ0kxLkRPQ0siLAkvKiBhbGwgb3RoZXJzICovCiAJICAgIlxcX1NCLlBDSS5JU0EuU0xDRSIsCS8qIDU3MCAqLwogICAgICk7CQkJCS8qIEEyMWUsRzR4LFIzMCxSMzEsUjMyLFI0MCxSNDBlLFI1MGUgKi8KLQorI2VuZGlmCiBJQk1fSEFORExFKGJheSwgcm9vdCwgIlxcX1NCLlBDSS5JREUuU0VDTi5NQVNUIiwJLyogNTcwICovCiAJICAgIlxcX1NCLlBDSTAuSURFMC5JREVTLklEU00iLAkvKiA2MDBlL3gsIDc3MGUsIDc3MHggKi8KIAkgICAiXFxfU0IuUENJMC5JREUwLlNDTkQuTVNUUiIsCS8qIGFsbCBvdGhlcnMgKi8KQEAgLTg0NCw3ICs4NDQsNyBAQAogCiAJcmV0dXJuIHN0YXR1czsKIH0KLQorI2lmZGVmIENPTkZJR19BQ1BJX0lCTV9ET0NLCiAjZGVmaW5lIGRvY2tfZG9ja2VkKCkgKF9zdGEoZG9ja19oYW5kbGUpICYgMSkKIAogc3RhdGljIGludCBkb2NrX3JlYWQoY2hhciAqcCkKQEAgLTkwNyw2ICs5MDcsNyBAQAogCQlhY3BpX2J1c19nZW5lcmF0ZV9ldmVudChpYm0tPmRldmljZSwgZXZlbnQsIDApOwkvKiB1bmtub3duICovCiAJfQogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgYmF5X3N0YXR1c19zdXBwb3J0ZWQ7CiBzdGF0aWMgaW50IGJheV9zdGF0dXMyX3N1cHBvcnRlZDsKQEAgLTE1NzQsNiArMTU3NSw3IEBACiAJIC5yZWFkID0gbGlnaHRfcmVhZCwKIAkgLndyaXRlID0gbGlnaHRfd3JpdGUsCiAJIH0sCisjaWZkZWYgQ09ORklHX0FDUElfSUJNX0RPQ0sKIAl7CiAJIC5uYW1lID0gImRvY2siLAogCSAucmVhZCA9IGRvY2tfcmVhZCwKQEAgLTE1ODksNiArMTU5MSw3IEBACiAJIC5oYW5kbGUgPSAmcGNpX2hhbmRsZSwKIAkgLnR5cGUgPSBBQ1BJX1NZU1RFTV9OT1RJRlksCiAJIH0sCisjZW5kaWYKIAl7CiAJIC5uYW1lID0gImJheSIsCiAJIC5pbml0ID0gYmF5X2luaXQsCkBAIC0xODgwLDcgKzE4ODMsOSBAQAogSUJNX1BBUkFNKGJsdWV0b290aCk7CiBJQk1fUEFSQU0odmlkZW8pOwogSUJNX1BBUkFNKGxpZ2h0KTsKKyNpZmRlZiBDT05GSUdfQUNQSV9JQk1fRE9DSwogSUJNX1BBUkFNKGRvY2spOworI2VuZGlmCiBJQk1fUEFSQU0oYmF5KTsKIElCTV9QQVJBTShjbW9zKTsKIElCTV9QQVJBTShsZWQpOwpAQCAtMTkyNyw3ICsxOTMyLDkgQEAKIAlJQk1fSEFORExFX0lOSVQoaGtleSk7CiAJSUJNX0hBTkRMRV9JTklUKGxnaHQpOwogCUlCTV9IQU5ETEVfSU5JVChjbW9zKTsKKyNpZmRlZiBDT05GSUdfQUNQSV9JQk1fRE9DSwogCUlCTV9IQU5ETEVfSU5JVChkb2NrKTsKKyNlbmRpZgogCUlCTV9IQU5ETEVfSU5JVChwY2kpOwogCUlCTV9IQU5ETEVfSU5JVChiYXkpOwogCWlmIChiYXlfaGFuZGxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggOTI3MWU1Mi4uYTBhYjgyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC0yMyw3ICsyMyw2IEBACiBERUZJTkVfU1BJTkxPQ0soYWNwaV9kZXZpY2VfbG9jayk7CiBMSVNUX0hFQUQoYWNwaV93YWtldXBfZGV2aWNlX2xpc3QpOwogCi1zdGF0aWMgaW50IGFjcGlfYnVzX3RyaW0oc3RydWN0IGFjcGlfZGV2aWNlICpzdGFydCwgaW50IHJtZGV2aWNlKTsKIAogc3RhdGljIHZvaWQgYWNwaV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKQEAgLTEyODQsNyArMTI4Myw3IEBACiAKIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfc3RhcnQpOwogCi1zdGF0aWMgaW50IGFjcGlfYnVzX3RyaW0oc3RydWN0IGFjcGlfZGV2aWNlICpzdGFydCwgaW50IHJtZGV2aWNlKQoraW50IGFjcGlfYnVzX3RyaW0oc3RydWN0IGFjcGlfZGV2aWNlICpzdGFydCwgaW50IHJtZGV2aWNlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCwgKmNoaWxkOwpAQCAtMTMzNyw2ICsxMzM2LDggQEAKIAl9CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfYnVzX3RyaW0pOworCiAKIHN0YXRpYyBpbnQgYWNwaV9idXNfc2Nhbl9maXhlZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKnJvb3QpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuYwppbmRleCAxNGY2YTYyLi4wNTk4M2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCisrKyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKQEAgLTU1NSw3ICs1NTUsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogZm9yZTIwMGVfcGNhX21hcChzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewogICAgIERQUklOVEsoMiwgImRldmljZSAlcyBiZWluZyBtYXBwZWQgaW4gbWVtb3J5XG4iLCBmb3JlMjAwZS0+bmFtZSk7CkBAIC01ODksNyArNTg5LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGZvcmUyMDBlX3BjYV9jb25maWd1cmUoc3RydWN0IGZvcmUyMDBlKiBmb3JlMjAwZSkKIHsKICAgICBzdHJ1Y3QgcGNpX2RldiogcGNpX2RldiA9IChzdHJ1Y3QgcGNpX2RldiopZm9yZTIwMGUtPmJ1c19kZXY7CkBAIC0yMTI1LDcgKzIxMjUsNyBAQAogfQogICAgIAogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGZvcmUyMDBlX2lycV9yZXF1ZXN0KHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCiB7CiAgICAgaWYgKHJlcXVlc3RfaXJxKGZvcmUyMDBlLT5pcnEsIGZvcmUyMDBlX2ludGVycnVwdCwgU0FfU0hJUlEsIGZvcmUyMDBlLT5uYW1lLCBmb3JlMjAwZS0+YXRtX2RldikgPCAwKSB7CkBAIC0yMTQ4LDcgKzIxNDgsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogZm9yZTIwMGVfZ2V0X2VzaShzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewogICAgIHN0cnVjdCBwcm9tX2RhdGEqIHByb20gPSBmb3JlMjAwZV9rbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvbV9kYXRhKSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwpAQCAtMjE4MCw3ICsyMTgwLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGZvcmUyMDBlX2FsbG9jX3J4X2J1ZihzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewogICAgIGludCBzY2hlbWUsIG1hZ24sIG5iciwgc2l6ZSwgaTsKQEAgLTIyNDUsNyArMjI0NSw3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19kZXZpbml0CiBmb3JlMjAwZV9pbml0X2JzX3F1ZXVlKHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCiB7CiAgICAgaW50IHNjaGVtZSwgbWFnbiwgaTsKQEAgLTIzMDgsNyArMjMwOCw3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19kZXZpbml0CiBmb3JlMjAwZV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCiB7CiAgICAgc3RydWN0IGhvc3RfcnhxKiAgICAgcnhxID0gICZmb3JlMjAwZS0+aG9zdF9yeHE7CkBAIC0yMzY4LDcgKzIzNjgsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogZm9yZTIwMGVfaW5pdF90eF9xdWV1ZShzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewogICAgIHN0cnVjdCBob3N0X3R4cSogICAgIHR4cSA9ICAmZm9yZTIwMGUtPmhvc3RfdHhxOwpAQCAtMjQzMSw3ICsyNDMxLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGZvcmUyMDBlX2luaXRfY21kX3F1ZXVlKHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCiB7CiAgICAgc3RydWN0IGhvc3RfY21kcSogICAgIGNtZHEgPSAgJmZvcmUyMDBlLT5ob3N0X2NtZHE7CkBAIC0yNDg3LDcgKzI0ODcsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogZm9yZTIwMGVfaW5pdGlhbGl6ZShzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewogICAgIHN0cnVjdCBjcF9xdWV1ZXMgX19pb21lbSAqIGNwcTsKQEAgLTI1MzksNyArMjUzOSw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgX19pbml0CitzdGF0aWMgdm9pZCBfX2RldmluaXQKIGZvcmUyMDBlX21vbml0b3JfcHV0YyhzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlLCBjaGFyIGMpCiB7CiAgICAgc3RydWN0IGNwX21vbml0b3IgX19pb21lbSAqIG1vbml0b3IgPSBmb3JlMjAwZS0+Y3BfbW9uaXRvcjsKQEAgLTI1NTEsNyArMjU1MSw3IEBACiB9CiAKIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19kZXZpbml0CiBmb3JlMjAwZV9tb25pdG9yX2dldGMoc3RydWN0IGZvcmUyMDBlKiBmb3JlMjAwZSkKIHsKICAgICBzdHJ1Y3QgY3BfbW9uaXRvciBfX2lvbWVtICogbW9uaXRvciA9IGZvcmUyMDBlLT5jcF9tb25pdG9yOwpAQCAtMjU3Niw3ICsyNTc2LDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdAogZm9yZTIwMGVfbW9uaXRvcl9wdXRzKHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUsIGNoYXIqIHN0cikKIHsKICAgICB3aGlsZSAoKnN0cikgewpAQCAtMjU5MSw3ICsyNTkxLDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGZvcmUyMDBlX3N0YXJ0X2Z3KHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgb2s7CkBAIC0yNjIyLDcgKzI2MjIsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogZm9yZTIwMGVfbG9hZF9mdyhzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewogICAgIHUzMiogZndfZGF0YSA9ICh1MzIqKSBmb3JlMjAwZS0+YnVzLT5md19kYXRhOwpAQCAtMjY0OCw3ICsyNjQ4LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGZvcmUyMDBlX3JlZ2lzdGVyKHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUpCiB7CiAgICAgc3RydWN0IGF0bV9kZXYqIGF0bV9kZXY7CkBAIC0yNjc1LDcgKzI2NzUsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogZm9yZTIwMGVfaW5pdChzdHJ1Y3QgZm9yZTIwMGUqIGZvcmUyMDBlKQogewogICAgIGlmIChmb3JlMjAwZV9yZWdpc3Rlcihmb3JlMjAwZSkgPCAwKQpAQCAtMjcyMSw3ICsyNzIxLDcgQEAKIAlyZXR1cm4gLUVCVVNZOwogCiAgICAgZm9yZTIwMGVfc3VwcGx5KGZvcmUyMDBlKTsKLSAgICAKKwogICAgIC8qIGFsbCBkb25lLCBib2FyZCBpbml0aWFsaXphdGlvbiBpcyBub3cgY29tcGxldGUgKi8KICAgICBmb3JlMjAwZS0+c3RhdGUgPSBGT1JFMjAwRV9TVEFURV9DT01QTEVURTsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3N1bmkuYyBiL2RyaXZlcnMvYXRtL3N1bmkuYwppbmRleCAwNjgxN2RlLi5iMWQwNjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9zdW5pLmMKKysrIGIvZHJpdmVycy9hdG0vc3VuaS5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAkJY2FzZSBTT05FVF9HRVRESUFHOgogCQkJcmV0dXJuIGdldF9kaWFnKGRldixhcmcpOwogCQljYXNlIFNPTkVUX1NFVEZSQU1JTkc6Ci0JCQlpZiAoYXJnICE9IFNPTkVUX0ZSQU1FX1NPTkVUKSByZXR1cm4gLUVJTlZBTDsKKwkJCWlmICgoaW50KSh1bnNpZ25lZCBsb25nKWFyZyAhPSBTT05FVF9GUkFNRV9TT05FVCkgcmV0dXJuIC1FSU5WQUw7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBTT05FVF9HRVRGUkFNSU5HOgogCQkJcmV0dXJuIHB1dF91c2VyKFNPTkVUX0ZSQU1FX1NPTkVULChpbnQgX191c2VyICopYXJnKSA/CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggYzMxNDE1Ni4uNDg3MThiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtNTM2LDYgKzUzNiwyOCBAQAogCWJ1c19mb3JfZWFjaF9kZXYoYnVzLCBOVUxMLCBOVUxMLCBidXNfcmVzY2FuX2RldmljZXNfaGVscGVyKTsKIH0KIAorLyoqCisgKiBkZXZpY2VfcmVwcm9iZSAtIHJlbW92ZSBkcml2ZXIgZm9yIGEgZGV2aWNlIGFuZCBwcm9iZSBmb3IgYSBuZXcgZHJpdmVyCisgKiBAZGV2OiB0aGUgZGV2aWNlIHRvIHJlcHJvYmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRldGFjaGVzIHRoZSBhdHRhY2hlZCBkcml2ZXIgKGlmIGFueSkgZm9yIHRoZSBnaXZlbgorICogZGV2aWNlIGFuZCByZXN0YXJ0cyB0aGUgZHJpdmVyIHByb2JpbmcgcHJvY2Vzcy4gIEl0IGlzIGludGVuZGVkCisgKiB0byB1c2UgaWYgcHJvYmluZyBjcml0ZXJpYSBjaGFuZ2VkIGR1cmluZyBhIGRldmljZXMgbGlmZXRpbWUgYW5kCisgKiBkcml2ZXIgYXR0YWNobWVudCBzaG91bGQgY2hhbmdlIGFjY29yZGluZ2x5LgorICovCit2b2lkIGRldmljZV9yZXByb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5kcml2ZXIpIHsKKwkJaWYgKGRldi0+cGFyZW50KSAgICAgICAgLyogTmVlZGVkIGZvciBVU0IgKi8KKwkJCWRvd24oJmRldi0+cGFyZW50LT5zZW0pOworCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2KTsKKwkJaWYgKGRldi0+cGFyZW50KQorCQkJdXAoJmRldi0+cGFyZW50LT5zZW0pOworCX0KKworCWJ1c19yZXNjYW5fZGV2aWNlc19oZWxwZXIoZGV2LCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9yZXByb2JlKTsKIAogc3RydWN0IGJ1c190eXBlICogZ2V0X2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKiBidXMpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY3B1LmMgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKaW5kZXggMDdhN2Y5Ny4uZGQ3MTJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NwdS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jcHUuYwpAQCAtMTksMTEgKzE5LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSAqY3B1X3N5c19kZXZpY2VzW05SX0NQVVNdOwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi1pbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIHNtcF9wcmVwYXJlX2NwdSAoaW50IGNwdSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHNzaXplX3Qgc2hvd19vbmxpbmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7CkBAIC00NCw5ICszOSw3IEBACiAJCQlrb2JqZWN0X3VldmVudCgmZGV2LT5rb2JqLCBLT0JKX09GRkxJTkUpOwogCQlicmVhazsKIAljYXNlICcxJzoKLQkJcmV0ID0gc21wX3ByZXBhcmVfY3B1KGNwdS0+c3lzZGV2LmlkKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXQgPSBjcHVfdXAoY3B1LT5zeXNkZXYuaWQpOworCQlyZXQgPSBjcHVfdXAoY3B1LT5zeXNkZXYuaWQpOwogCQlpZiAoIXJldCkKIAkJCWtvYmplY3RfdWV2ZW50KCZkZXYtPmtvYmosIEtPQkpfT05MSU5FKTsKIAkJYnJlYWs7CkBAIC0xNDEsNyArMTM0LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0cnVjdCBzeXNfZGV2aWNlICpnZXRfY3B1X3N5c2RldihpbnQgY3B1KQorc3RydWN0IHN5c19kZXZpY2UgKmdldF9jcHVfc3lzZGV2KHVuc2lnbmVkIGNwdSkKIHsKIAlpZiAoY3B1IDwgTlJfQ1BVUykKIAkJcmV0dXJuIGNwdV9zeXNfZGV2aWNlc1tjcHVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCBlOTdlOTExLi40NzIzMTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtMjExLDE4ICsyMTEsMjAgQEAKIGZ3X3JlYWxsb2NfYnVmZmVyKHN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2LCBpbnQgbWluX3NpemUpCiB7CiAJdTggKm5ld19kYXRhOworCWludCBuZXdfc2l6ZSA9IGZ3X3ByaXYtPmFsbG9jX3NpemU7CiAKIAlpZiAobWluX3NpemUgPD0gZndfcHJpdi0+YWxsb2Nfc2l6ZSkKIAkJcmV0dXJuIDA7CiAKLQluZXdfZGF0YSA9IHZtYWxsb2MoZndfcHJpdi0+YWxsb2Nfc2l6ZSArIFBBR0VfU0laRSk7CisJbmV3X3NpemUgPSBBTElHTihtaW5fc2l6ZSwgUEFHRV9TSVpFKTsKKwluZXdfZGF0YSA9IHZtYWxsb2MobmV3X3NpemUpOwogCWlmICghbmV3X2RhdGEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGFsbG9jIGJ1ZmZlclxuIiwgX19GVU5DVElPTl9fKTsKIAkJLyogTWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qga2VlcCBpbmNvbXBsZXRlIGRhdGEgKi8KIAkJZndfbG9hZF9hYm9ydChmd19wcml2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWZ3X3ByaXYtPmFsbG9jX3NpemUgKz0gUEFHRV9TSVpFOworCWZ3X3ByaXYtPmFsbG9jX3NpemUgPSBuZXdfc2l6ZTsKIAlpZiAoZndfcHJpdi0+ZnctPmRhdGEpIHsKIAkJbWVtY3B5KG5ld19kYXRhLCBmd19wcml2LT5mdy0+ZGF0YSwgZndfcHJpdi0+ZnctPnNpemUpOwogCQl2ZnJlZShmd19wcml2LT5mdy0+ZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWFwLmMgYi9kcml2ZXJzL2Jhc2UvbWFwLmMKaW5kZXggYjQ0OWRhZS4uZTg3MDE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21hcC5jCisrKyBiL2RyaXZlcnMvYmFzZS9tYXAuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmpfbWFwLmg+CkBAIC0yNSw3ICsyNiw3IEBACiAJCWludCAoKmxvY2spKGRldl90LCB2b2lkICopOwogCQl2b2lkICpkYXRhOwogCX0gKnByb2Jlc1syNTVdOwotCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKKwlzdHJ1Y3QgbXV0ZXggKmxvY2s7CiB9OwogCiBpbnQga29ial9tYXAoc3RydWN0IGtvYmpfbWFwICpkb21haW4sIGRldl90IGRldiwgdW5zaWduZWQgbG9uZyByYW5nZSwKQEAgLTUzLDcgKzU0LDcgQEAKIAkJcC0+cmFuZ2UgPSByYW5nZTsKIAkJcC0+ZGF0YSA9IGRhdGE7CiAJfQotCWRvd24oZG9tYWluLT5zZW0pOworCW11dGV4X2xvY2soZG9tYWluLT5sb2NrKTsKIAlmb3IgKGkgPSAwLCBwIC09IG47IGkgPCBuOyBpKyssIHArKywgaW5kZXgrKykgewogCQlzdHJ1Y3QgcHJvYmUgKipzID0gJmRvbWFpbi0+cHJvYmVzW2luZGV4ICUgMjU1XTsKIAkJd2hpbGUgKCpzICYmICgqcyktPnJhbmdlIDwgcmFuZ2UpCkBAIC02MSw3ICs2Miw3IEBACiAJCXAtPm5leHQgPSAqczsKIAkJKnMgPSBwOwogCX0KLQl1cChkb21haW4tPnNlbSk7CisJbXV0ZXhfdW5sb2NrKGRvbWFpbi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1LDcgKzc2LDcgQEAKIAlpZiAobiA+IDI1NSkKIAkJbiA9IDI1NTsKIAotCWRvd24oZG9tYWluLT5zZW0pOworCW11dGV4X2xvY2soZG9tYWluLT5sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBpbmRleCsrKSB7CiAJCXN0cnVjdCBwcm9iZSAqKnM7CiAJCWZvciAocyA9ICZkb21haW4tPnByb2Jlc1tpbmRleCAlIDI1NV07ICpzOyBzID0gJigqcyktPm5leHQpIHsKQEAgLTg4LDcgKzg5LDcgQEAKIAkJCX0KIAkJfQogCX0KLQl1cChkb21haW4tPnNlbSk7CisJbXV0ZXhfdW5sb2NrKGRvbWFpbi0+bG9jayk7CiAJa2ZyZWUoZm91bmQpOwogfQogCkBAIC05OSw3ICsxMDAsNyBAQAogCXVuc2lnbmVkIGxvbmcgYmVzdCA9IH4wVUw7CiAKIHJldHJ5OgotCWRvd24oZG9tYWluLT5zZW0pOworCW11dGV4X2xvY2soZG9tYWluLT5sb2NrKTsKIAlmb3IgKHAgPSBkb21haW4tPnByb2Jlc1tNQUpPUihkZXYpICUgMjU1XTsgcDsgcCA9IHAtPm5leHQpIHsKIAkJc3RydWN0IGtvYmplY3QgKigqcHJvYmUpKGRldl90LCBpbnQgKiwgdm9pZCAqKTsKIAkJc3RydWN0IG1vZHVsZSAqb3duZXI7CkBAIC0xMjAsNyArMTIxLDcgQEAKIAkJCW1vZHVsZV9wdXQob3duZXIpOwogCQkJY29udGludWU7CiAJCX0KLQkJdXAoZG9tYWluLT5zZW0pOworCQltdXRleF91bmxvY2soZG9tYWluLT5sb2NrKTsKIAkJa29iaiA9IHByb2JlKGRldiwgaW5kZXgsIGRhdGEpOwogCQkvKiBDdXJyZW50bHkgLT5vd25lciBwcm90ZWN0cyBfb25seV8gLT5wcm9iZSgpIGl0c2VsZi4gKi8KIAkJbW9kdWxlX3B1dChvd25lcik7CkBAIC0xMjgsMTEgKzEyOSwxMSBAQAogCQkJcmV0dXJuIGtvYmo7CiAJCWdvdG8gcmV0cnk7CiAJfQotCXVwKGRvbWFpbi0+c2VtKTsKKwltdXRleF91bmxvY2soZG9tYWluLT5sb2NrKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IGtvYmpfbWFwICprb2JqX21hcF9pbml0KGtvYmpfcHJvYmVfdCAqYmFzZV9wcm9iZSwgc3RydWN0IHNlbWFwaG9yZSAqc2VtKQorc3RydWN0IGtvYmpfbWFwICprb2JqX21hcF9pbml0KGtvYmpfcHJvYmVfdCAqYmFzZV9wcm9iZSwgc3RydWN0IG11dGV4ICpsb2NrKQogewogCXN0cnVjdCBrb2JqX21hcCAqcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrb2JqX21hcCksIEdGUF9LRVJORUwpOwogCXN0cnVjdCBwcm9iZSAqYmFzZSA9IGt6YWxsb2Moc2l6ZW9mKCpiYXNlKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNDksNiArMTUwLDYgQEAKIAliYXNlLT5nZXQgPSBiYXNlX3Byb2JlOwogCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykKIAkJcC0+cHJvYmVzW2ldID0gYmFzZTsKLQlwLT5zZW0gPSBzZW07CisJcC0+bG9jayA9IGxvY2s7CiAJcmV0dXJuIHA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDQ2MTU1NGEuLjgzZjVjNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC02MSw3ICs2MSw3IEBACiB7CiAJc3RydWN0IHJlc291cmNlICpyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9JUlEsIG51bSk7CiAKLQlyZXR1cm4gciA/IHItPnN0YXJ0IDogMDsKKwlyZXR1cm4gciA/IHItPnN0YXJ0IDogLUVOWElPOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZ2V0X2lycSk7CiAKQEAgLTk4LDcgKzk4LDcgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9JUlEsIG5hbWUpOwogCi0JcmV0dXJuIHIgPyByLT5zdGFydCA6IDA7CisJcmV0dXJuIHIgPyByLT5zdGFydCA6IC1FTlhJTzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKTsKIApAQCAtMzI2LDcgKzMyNiw3IEBACiAgKglwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBwbGF0Zm9ybS1sZXZlbCBkZXZpY2UKICAqCUBwZGV2OglwbGF0Zm9ybSBkZXZpY2Ugd2UncmUgdW5yZWdpc3RlcmluZwogICoKLSAqCVVucmVnaXN0cmF0aW9uIGlzIGRvbmUgaW4gMiBzdGVwcy4gRmlzcnQgd2UgcmVsZWFzZSBhbGwgcmVzb3VyY2VzCisgKglVbnJlZ2lzdHJhdGlvbiBpcyBkb25lIGluIDIgc3RlcHMuIEZpcnN0IHdlIHJlbGVhc2UgYWxsIHJlc291cmNlcwogICoJYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBzdWJzeXN0ZW0sIHRoZW4gd2UgZHJvcCByZWZlcmVuY2UgY291bnQgYnkKICAqCWNhbGxpbmcgcGxhdGZvcm1fZGV2aWNlX3B1dCgpLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3VzcGVuZC5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N1c3BlbmQuYwppbmRleCA4NjYwNzc5Li5iZGI2MDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3VzcGVuZC5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zdXNwZW5kLmMKQEAgLTgsNiArOCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSAiLi4vYmFzZS5oIgogI2luY2x1ZGUgInBvd2VyLmgiCkBAIC02Miw3ICs2Myw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIC8qKgogICoJZGV2aWNlX3N1c3BlbmQgLSBTYXZlIHN0YXRlIGFuZCBzdG9wIGFsbCBkZXZpY2VzIGluIHN5c3RlbS4KICAqCUBzdGF0ZToJCVBvd2VyIHN0YXRlIHRvIHB1dCBlYWNoIGRldmljZSBpbi4KQEAgLTgyLDYgKzgyLDkgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCisJaWYgKCFpc19jb25zb2xlX3N1c3BlbmRfc2FmZSgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWRvd24oJmRwbV9zZW0pOwogCWRvd24oJmRwbV9saXN0X3NlbSk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fYWN0aXZlKSAmJiBlcnJvciA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCA2ZWRlMWYzLi45YmRlYTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgIkRBQzk2MC5oIgpAQCAtMjI3LDggKzIyOCw3IEBACiAJdm9pZCAqY3B1X2VuZCA9IGxvYWYtPmNwdV9mcmVlICsgbGVuOwogCXZvaWQgKmNwdV9hZGRyID0gbG9hZi0+Y3B1X2ZyZWU7CiAKLQlpZiAoY3B1X2VuZCA+IGxvYWYtPmNwdV9iYXNlICsgbG9hZi0+bGVuZ3RoKQotCQlCVUcoKTsKKwlCVUdfT04oY3B1X2VuZCA+IGxvYWYtPmNwdV9iYXNlICsgbG9hZi0+bGVuZ3RoKTsKIAkqZG1hX2hhbmRsZSA9IGxvYWYtPmRtYV9mcmVlOwogCWxvYWYtPmNwdV9mcmVlID0gY3B1X2VuZDsKIAlsb2FmLT5kbWFfZnJlZSArPSBsZW47CkBAIC0zNDYzLDcgKzM0NjMsNyBAQAogCQlDb21tYW5kLT5TZWdtZW50Q291bnQsIENvbW1hbmQtPkRtYURpcmVjdGlvbik7CiAKIAkgaWYgKCFlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0KFJlcXVlc3QsIFVwVG9EYXRlLCBDb21tYW5kLT5CbG9ja0NvdW50KSkgewotCisJCWFkZF9kaXNrX3JhbmRvbW5lc3MoUmVxdWVzdC0+cnFfZGlzayk7CiAgCSAJZW5kX3RoYXRfcmVxdWVzdF9sYXN0KFJlcXVlc3QsIFVwVG9EYXRlKTsKIAogCQlpZiAoQ29tbWFuZC0+Q29tcGxldGlvbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IDhiMTMzMTYuLmU1N2FjNWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0tjb25maWcKKysrIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCkBAIC00MDEsNyArNDAxLDYgQEAKIAogY29uZmlnIEJMS19ERVZfSU5JVFJECiAJYm9vbCAiSW5pdGlhbCBSQU0gZGlzayAoaW5pdHJkKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQkxLX0RFVl9SQU09eQogCWhlbHAKIAkgIFRoZSBpbml0aWFsIFJBTSBkaXNrIGlzIGEgUkFNIGRpc2sgdGhhdCBpcyBsb2FkZWQgYnkgdGhlIGJvb3QgbG9hZGVyCiAJICAobG9hZGxpbiBvciBsaWxvKSBhbmQgdGhhdCBpcyBtb3VudGVkIGFzIHJvb3QgYmVmb3JlIHRoZSBub3JtYWwgYm9vdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9NYWtlZmlsZSBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKaW5kZXggM2VjMWY4ZC4uNDEwZjI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCkBAIC03LDcgKzcsNiBAQAogCiBvYmotJChDT05GSUdfTUFDX0ZMT1BQWSkJKz0gc3dpbTMubwogb2JqLSQoQ09ORklHX0JMS19ERVZfRkQpCSs9IGZsb3BweS5vCi1vYmotJChDT05GSUdfQkxLX0RFVl9GRDk4KQkrPSBmbG9wcHk5OC5vCiBvYmotJChDT05GSUdfQU1JR0FfRkxPUFBZKQkrPSBhbWlmbG9wLm8KIG9iai0kKENPTkZJR19BVEFSSV9GTE9QUFkpCSs9IGF0YWZsb3Aubwogb2JqLSQoQ09ORklHX0JMS19ERVZfU1dJTV9JT1ApCSs9IHN3aW1faW9wLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggZjhjZTIzNS4uYzM5NjUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTI3MSw3ICsyNzEsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgUGh5c0RNQUJ1ZmZlcjsgICAvKiBwaHlzaWNhbCBhZGRyZXNzICovCiAKIHN0YXRpYyBpbnQgVXNlVHJhY2tidWZmZXIgPSAtMTsJCSAgLyogRG8gdHJhY2sgYnVmZmVyaW5nPyAqLwotTU9EVUxFX1BBUk0oVXNlVHJhY2tidWZmZXIsICJpIik7Cittb2R1bGVfcGFyYW0oVXNlVHJhY2tidWZmZXIsIGludCwgMCk7CiAKIHVuc2lnbmVkIGNoYXIgKlRyYWNrQnVmZmVyOwkJCSAgLyogYnVmZmVyIGZvciByZWFkcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgUGh5c1RyYWNrQnVmZmVyOyAvKiBwaHlzaWNhbCBhZGRyZXNzICovCkBAIC0yOTYsNyArMjk2LDcgQEAKIHN0YXRpYyBpbnQgSXNGb3JtYXR0aW5nID0gMCwgRm9ybWF0RXJyb3I7CiAKIHN0YXRpYyBpbnQgVXNlclN0ZXByYXRlW0ZEX01BWF9VTklUU10gPSB7IC0xLCAtMSB9OwotTU9EVUxFX1BBUk0oVXNlclN0ZXByYXRlLCAiMS0iIF9fTU9EVUxFX1NUUklORyhGRF9NQVhfVU5JVFMpICJpIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoVXNlclN0ZXByYXRlLCBpbnQsIE5VTEwsIDApOwogCiAvKiBTeW5jaHJvbml6YXRpb24gb2YgRkRDIGFjY2Vzcy4gKi8KIHN0YXRpYyB2b2xhdGlsZSBpbnQgZmRjX2J1c3kgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDBkNjUzOTQuLjcxZWM5ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMjEzNyw3ICsyMTM4LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyogR2V0IHRoZSBmcmlzdCBlbnRyeSBmcm9tIHRoZSBSZXF1ZXN0IFEgKi8gCisJCS8qIEdldCB0aGUgZmlyc3QgZW50cnkgZnJvbSB0aGUgUmVxdWVzdCBRICovIAogCQlyZW1vdmVRKCYoaC0+cmVxUSksIGMpOwogCQloLT5RZGVwdGgtLTsKIAkKQEAgLTIzMzEsNiArMjMzMiw3IEBACiAKIAljbWQtPnJxLT5jb21wbGV0aW9uX2RhdGEgPSBjbWQ7CiAJY21kLT5ycS0+ZXJyb3JzID0gc3RhdHVzOworCWJsa19hZGRfdHJhY2VfcnEoY21kLT5ycS0+cSwgY21kLT5ycSwgQkxLX1RBX0NPTVBMRVRFKTsKIAlibGtfY29tcGxldGVfcmVxdWVzdChjbWQtPnJxKTsKIH0KIApAQCAtMjM1OSw4ICsyMzYxLDcgQEAKIAlpZiAoIWNyZXEpCiAJCWdvdG8gc3RhcnRpbzsKIAotCWlmIChjcmVxLT5ucl9waHlzX3NlZ21lbnRzID4gTUFYU0dFTlRSSUVTKQotICAgICAgICAgICAgICAgIEJVRygpOworCUJVR19PTihjcmVxLT5ucl9waHlzX3NlZ21lbnRzID4gTUFYU0dFTlRSSUVTKTsKIAogCWlmICgoIGMgPSBjbWRfYWxsb2MoaCwgMSkpID09IE5VTEwpCiAJCWdvdG8gZnVsbDsKQEAgLTMyNTEsOCArMzI1Miw3IEBACiAKIGNsZWFuNDoKICNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKLQlpZihoYmFbaV0tPnNjc2lfcmVqZWN0cy5jb21wbGV0ZSkKLQkJa2ZyZWUoaGJhW2ldLT5zY3NpX3JlamVjdHMuY29tcGxldGUpOworCWtmcmVlKGhiYVtpXS0+c2NzaV9yZWplY3RzLmNvbXBsZXRlKTsKICNlbmRpZgogCWtmcmVlKGhiYVtpXS0+Y21kX3Bvb2xfYml0cyk7CiAJaWYoaGJhW2ldLT5jbWRfcG9vbCkKQEAgLTMyNjksOCArMzI2OSw4IEBACiAJdW5yZWdpc3Rlcl9ibGtkZXYoaGJhW2ldLT5tYWpvciwgaGJhW2ldLT5kZXZuYW1lKTsKIGNsZWFuMToKIAlyZWxlYXNlX2lvX21lbShoYmFbaV0pOwotCWZyZWVfaGJhKGkpOwogCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAwOworCWZyZWVfaGJhKGkpOwogCXJldHVybigtMSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jIGIvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKaW5kZXggOWUzNWRlMC4uMGU2NmU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKQEAgLTEzMTYsNyArMTMxNiw3IEBACiAKIAljcC0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAltZW1zZXQoY3AtPlJlcXVlc3QuQ0RCLCAwLCBzaXplb2YoY3AtPlJlcXVlc3QuQ0RCKSk7Ci0JaWYgKGNtZC0+Y21kX2xlbiA+IHNpemVvZihjcC0+UmVxdWVzdC5DREIpKSBCVUcoKTsKKwlCVUdfT04oY21kLT5jbWRfbGVuID4gc2l6ZW9mKGNwLT5SZXF1ZXN0LkNEQikpOwogCWNwLT5SZXF1ZXN0LkNEQkxlbiA9IGNtZC0+Y21kX2xlbjsKIAltZW1jcHkoY3AtPlJlcXVlc3QuQ0RCLCBjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbik7CiAJY3AtPlJlcXVlc3QuVHlwZS5UeXBlID0gVFlQRV9DTUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKaW5kZXggODYyYjlhYi4uYjZlYTJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwpAQCAtOTA2LDggKzkwNiw3IEBACiAJaWYgKCFjcmVxKQogCQlnb3RvIHN0YXJ0aW87CiAKLQlpZiAoY3JlcS0+bnJfcGh5c19zZWdtZW50cyA+IFNHX01BWCkKLQkJQlVHKCk7CisJQlVHX09OKGNyZXEtPm5yX3BoeXNfc2VnbWVudHMgPiBTR19NQVgpOwogCiAJaWYgKChjID0gY21kX2FsbG9jKGgsMSkpID09IE5VTEwpCiAJCWdvdG8gc3RhcnRpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGQyM2I1NDMuLjg0MDkxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtMTc5LDYgKzE3OSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4JLyogZm9yIGludmFsaWRhdGVfYnVmZmVycygpICovCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyoKICAqIFBTLzIgZmxvcHBpZXMgaGF2ZSBtdWNoIHNsb3dlciBzdGVwIHJhdGVzIHRoYW4gcmVndWxhciBmbG9wcGllcy4KQEAgLTQxMyw3ICs0MTQsNyBAQAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IG1vdG9yX29mZl90aW1lcltOX0RSSVZFXTsKIHN0YXRpYyBzdHJ1Y3QgZ2VuZGlzayAqZGlza3NbTl9EUklWRV07CiBzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqb3BlbmVkX2JkZXZbTl9EUklWRV07Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChvcGVuX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChvcGVuX2xvY2spOwogc3RhdGljIHN0cnVjdCBmbG9wcHlfcmF3X2NtZCAqcmF3X2NtZCwgZGVmYXVsdF9yYXdfY21kOwogCiAvKgpAQCAtMzMzMyw3ICszMzM0LDcgQEAKIAlpZiAodHlwZSkgewogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwotCQlkb3duKCZvcGVuX2xvY2spOworCQltdXRleF9sb2NrKCZvcGVuX2xvY2spOwogCQlMT0NLX0ZEQyhkcml2ZSwgMSk7CiAJCWZsb3BweV90eXBlW3R5cGVdID0gKmc7CiAJCWZsb3BweV90eXBlW3R5cGVdLm5hbWUgPSAidXNlciBmb3JtYXQiOwpAQCAtMzM0Nyw3ICszMzQ4LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCV9faW52YWxpZGF0ZV9kZXZpY2UoYmRldik7CiAJCX0KLQkJdXAoJm9wZW5fbG9jayk7CisJCW11dGV4X3VubG9jaygmb3Blbl9sb2NrKTsKIAl9IGVsc2UgewogCQlpbnQgb2xkU3RyZXRjaDsKIAkJTE9DS19GREMoZHJpdmUsIDEpOwpAQCAtMzY3NCw3ICszNjc1LDcgQEAKIHsKIAlpbnQgZHJpdmUgPSAobG9uZylpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAKLQlkb3duKCZvcGVuX2xvY2spOworCW11dGV4X2xvY2soJm9wZW5fbG9jayk7CiAJaWYgKFVEUlMtPmZkX3JlZiA8IDApCiAJCVVEUlMtPmZkX3JlZiA9IDA7CiAJZWxzZSBpZiAoIVVEUlMtPmZkX3JlZi0tKSB7CkBAIC0zNjg0LDcgKzM2ODUsNyBAQAogCWlmICghVURSUy0+ZmRfcmVmKQogCQlvcGVuZWRfYmRldltkcml2ZV0gPSBOVUxMOwogCWZsb3BweV9yZWxlYXNlX2lycV9hbmRfZG1hKCk7Ci0JdXAoJm9wZW5fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0zNzAyLDcgKzM3MDMsNyBAQAogCWNoYXIgKnRtcDsKIAogCWZpbHAtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopMDsKLQlkb3duKCZvcGVuX2xvY2spOworCW11dGV4X2xvY2soJm9wZW5fbG9jayk7CiAJb2xkX2RldiA9IFVEUlMtPmZkX2RldmljZTsKIAlpZiAob3BlbmVkX2JkZXZbZHJpdmVdICYmIG9wZW5lZF9iZGV2W2RyaXZlXSAhPSBpbm9kZS0+aV9iZGV2KQogCQlnb3RvIG91dDI7CkBAIC0zNzg1LDcgKzM3ODYsNyBAQAogCQlpZiAoKGZpbHAtPmZfbW9kZSAmIDIpICYmICEoVVRFU1RGKEZEX0RJU0tfV1JJVEFCTEUpKSkKIAkJCWdvdG8gb3V0OwogCX0KLQl1cCgmb3Blbl9sb2NrKTsKKwltdXRleF91bmxvY2soJm9wZW5fbG9jayk7CiAJcmV0dXJuIDA7CiBvdXQ6CiAJaWYgKFVEUlMtPmZkX3JlZiA8IDApCkBAIC0zNzk2LDcgKzM3OTcsNyBAQAogCQlvcGVuZWRfYmRldltkcml2ZV0gPSBOVUxMOwogCWZsb3BweV9yZWxlYXNlX2lycV9hbmRfZG1hKCk7CiBvdXQyOgotCXVwKCZvcGVuX2xvY2spOworCW11dGV4X3VubG9jaygmb3Blbl9sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC00NTkzLDcgKzQ1OTQsNyBAQAogCX0KIH0KIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaWYgKGZsb3BweSkKIAkJcGFyc2VfZmxvcHB5X2NmZ19zdHJpbmcoZmxvcHB5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNWY2ZDFhNS4uNzRiZjAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTExNDQsNyArMTE0NCw3IEBACiAJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCi0JZG93bigmbG8tPmxvX2N0bF9tdXRleCk7CisJbXV0ZXhfbG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIExPT1BfU0VUX0ZEOgogCQllcnIgPSBsb29wX3NldF9mZChsbywgZmlsZSwgaW5vZGUtPmlfYmRldiwgYXJnKTsKQEAgLTExNzAsNyArMTE3MCw3IEBACiAJZGVmYXVsdDoKIAkJZXJyID0gbG8tPmlvY3RsID8gbG8tPmlvY3RsKGxvLCBjbWQsIGFyZykgOiAtRUlOVkFMOwogCX0KLQl1cCgmbG8tPmxvX2N0bF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTc4LDkgKzExNzgsOSBAQAogewogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAKLQlkb3duKCZsby0+bG9fY3RsX211dGV4KTsKKwltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAlsby0+bG9fcmVmY250Kys7Ci0JdXAoJmxvLT5sb19jdGxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExODksOSArMTE4OSw5IEBACiB7CiAJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAotCWRvd24oJmxvLT5sb19jdGxfbXV0ZXgpOworCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCS0tbG8tPmxvX3JlZmNudDsKLQl1cCgmbG8tPmxvX2N0bF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIzMywxMiArMTIzMywxMiBAQAogCXhmZXJfZnVuY3Nbbl0gPSBOVUxMOwogCiAJZm9yIChsbyA9ICZsb29wX2RldlswXTsgbG8gPCAmbG9vcF9kZXZbbWF4X2xvb3BdOyBsbysrKSB7Ci0JCWRvd24oJmxvLT5sb19jdGxfbXV0ZXgpOworCQltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAogCQlpZiAobG8tPmxvX2VuY3J5cHRpb24gPT0geGZlcikKIAkJCWxvb3BfcmVsZWFzZV94ZmVyKGxvKTsKIAotCQl1cCgmbG8tPmxvX2N0bF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMjg1LDcgKzEyODUsNyBAQAogCQlsby0+bG9fcXVldWUgPSBibGtfYWxsb2NfcXVldWUoR0ZQX0tFUk5FTCk7CiAJCWlmICghbG8tPmxvX3F1ZXVlKQogCQkJZ290byBvdXRfbWVtNDsKLQkJaW5pdF9NVVRFWCgmbG8tPmxvX2N0bF9tdXRleCk7CisJCW11dGV4X2luaXQoJmxvLT5sb19jdGxfbXV0ZXgpOwogCQlpbml0X2NvbXBsZXRpb24oJmxvLT5sb19kb25lKTsKIAkJaW5pdF9jb21wbGV0aW9uKCZsby0+bG9fYmhfZG9uZSk7CiAJCWxvLT5sb19udW1iZXIgPSBpOwpAQCAtMTMwNyw3ICsxMzA3LDcgQEAKIAogb3V0X21lbTQ6CiAJd2hpbGUgKGktLSkKLQkJYmxrX3B1dF9xdWV1ZShsb29wX2RldltpXS5sb19xdWV1ZSk7CisJCWJsa19jbGVhbnVwX3F1ZXVlKGxvb3BfZGV2W2ldLmxvX3F1ZXVlKTsKIAlkZXZmc19yZW1vdmUoImxvb3AiKTsKIAlpID0gbWF4X2xvb3A7CiBvdXRfbWVtMzoKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X2xvb3A7IGkrKykgewogCQlkZWxfZ2VuZGlzayhkaXNrc1tpXSk7Ci0JCWJsa19wdXRfcXVldWUobG9vcF9kZXZbaV0ubG9fcXVldWUpOworCQlibGtfY2xlYW51cF9xdWV1ZShsb29wX2RldltpXS5sb19xdWV1ZSk7CiAJCXB1dF9kaXNrKGRpc2tzW2ldKTsKIAl9CiAJZGV2ZnNfcmVtb3ZlKCJsb29wIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCA2OTk3ZDhlLi44YmNhNDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTQ1OSw5ICs0NTksOSBAQAogCQlyZXEtPmVycm9ycyA9IDA7CiAJCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAotCQlkb3duKCZsby0+dHhfbG9jayk7CisJCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKIAkJaWYgKHVubGlrZWx5KCFsby0+c29jaykpIHsKLQkJCXVwKCZsby0+dHhfbG9jayk7CisJCQltdXRleF91bmxvY2soJmxvLT50eF9sb2NrKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEF0dGVtcHRlZCBzZW5kIG9uIGNsb3NlZCBzb2NrZXRcbiIsCiAJCQkgICAgICAgbG8tPmRpc2stPmRpc2tfbmFtZSk7CiAJCQlyZXEtPmVycm9ycysrOwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJCX0KIAogCQlsby0+YWN0aXZlX3JlcSA9IE5VTEw7Ci0JCXVwKCZsby0+dHhfbG9jayk7CisJCW11dGV4X3VubG9jaygmbG8tPnR4X2xvY2spOwogCQl3YWtlX3VwX2FsbCgmbG8tPmFjdGl2ZV93cSk7CiAKIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKQEAgLTUzNCw5ICs1MzQsOSBAQAogIAogCWNhc2UgTkJEX0NMRUFSX1NPQ0s6CiAJCWVycm9yID0gMDsKLQkJZG93bigmbG8tPnR4X2xvY2spOworCQltdXRleF9sb2NrKCZsby0+dHhfbG9jayk7CiAJCWxvLT5zb2NrID0gTlVMTDsKLQkJdXAoJmxvLT50eF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CiAJCWZpbGUgPSBsby0+ZmlsZTsKIAkJbG8tPmZpbGUgPSBOVUxMOwogCQluYmRfY2xlYXJfcXVlKGxvKTsKQEAgLTU5MCw3ICs1OTAsNyBAQAogCQkgKiBGSVhNRTogVGhpcyBjb2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSBzeXNfc2h1dGRvd24sIGJ1dAogCQkgKiB0aGVyZSBzaG91bGQgYmUgYSBtb3JlIGdlbmVyaWMgaW50ZXJmYWNlIHJhdGhlciB0aGFuCiAJCSAqIGNhbGxpbmcgc29ja2V0IG9wcyBkaXJlY3RseSBoZXJlICovCi0JCWRvd24oJmxvLT50eF9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmbG8tPnR4X2xvY2spOwogCQlpZiAobG8tPnNvY2spIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBzaHV0dGluZyBkb3duIHNvY2tldFxuIiwKIAkJCQlsby0+ZGlzay0+ZGlza19uYW1lKTsKQEAgLTU5OCw3ICs1OTgsNyBAQAogCQkJCVNFTkRfU0hVVERPV058UkNWX1NIVVRET1dOKTsKIAkJCWxvLT5zb2NrID0gTlVMTDsKIAkJfQotCQl1cCgmbG8tPnR4X2xvY2spOworCQltdXRleF91bmxvY2soJmxvLT50eF9sb2NrKTsKIAkJZmlsZSA9IGxvLT5maWxlOwogCQlsby0+ZmlsZSA9IE5VTEw7CiAJCW5iZF9jbGVhcl9xdWUobG8pOwpAQCAtNjM5LDEwICs2MzksNyBAQAogCWludCBlcnIgPSAtRU5PTUVNOwogCWludCBpOwogCi0JaWYgKHNpemVvZihzdHJ1Y3QgbmJkX3JlcXVlc3QpICE9IDI4KSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIm5iZDogc2l6ZW9mIG5iZF9yZXF1ZXN0IG5lZWRzIHRvIGJlIDI4IGluIG9yZGVyIHRvIHdvcmshXG4iICk7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuYmRfcmVxdWVzdCkgIT0gMjgpOwogCiAJaWYgKG5iZHNfbWF4ID4gTUFYX05CRCkgewogCQlwcmludGsoS0VSTl9DUklUICJuYmQ6IGNhbm5vdCBhbGxvY2F0ZSBtb3JlIHRoYW4gJXUgbmJkczsgJXUgcmVxdWVzdGVkLlxuIiwgTUFYX05CRCwKQEAgLTY4Myw3ICs2ODAsNyBAQAogCQluYmRfZGV2W2ldLmZsYWdzID0gMDsKIAkJc3Bpbl9sb2NrX2luaXQoJm5iZF9kZXZbaV0ucXVldWVfbG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZuYmRfZGV2W2ldLnF1ZXVlX2hlYWQpOwotCQlpbml0X01VVEVYKCZuYmRfZGV2W2ldLnR4X2xvY2spOworCQltdXRleF9pbml0KCZuYmRfZGV2W2ldLnR4X2xvY2spOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuYmRfZGV2W2ldLmFjdGl2ZV93cSk7CiAJCW5iZF9kZXZbaV0uYmxrc2l6ZSA9IDEwMjQ7CiAJCW5iZF9kZXZbaV0uYnl0ZXNpemUgPSAweDdmZmZmYzAwVUxMIDw8IDEwOyAvKiAyVEIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL2NvbW0uYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL2NvbW0uYwppbmRleCBkODQyOTU2Li40M2Q2MTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9jb21tLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvY29tbS5jCkBAIC02MCw3ICs2MCw3IEBACiAKIAljYXNlIDI6CiAJY2FzZSAzOgotICAgICAgICBjYXNlIDQ6IHczKHIrMHgyMCk7IHIxKCk7IAorICAgICAgICBjYXNlIDQ6IHczKHIrMHgyMCk7ICh2b2lkKXIxKCk7CiAgICAgICAgIAl3MigweDI0KTsgaCA9IHI0KCk7IHcyKDQpOwogICAgICAgICAgICAgICAgIHJldHVybiBoOwogCkBAIC04Miw3ICs4Miw3IEBACiAKIAljYXNlIDI6CiAJY2FzZSAzOgotICAgICAgICBjYXNlIDQ6IHczKHIpOyByMSgpOyB3NCh2YWwpOyAKKyAgICAgICAgY2FzZSA0OiB3MyhyKTsgKHZvaWQpcjEoKTsgdzQodmFsKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogfQpAQCAtMTI2LDE3ICsxMjYsMTcgQEAKIAkJdzIoNCk7CiAJCWJyZWFrOwogCQkKLQljYXNlIDI6IHczKDB4NjgpOyByMSgpOyB3MigweDI0KTsKKwljYXNlIDI6IHczKDB4NjgpOyAodm9pZClyMSgpOyB3MigweDI0KTsKIAkJZm9yIChpPTA7aTxjb3VudDtpKyspIGJ1ZltpXSA9IHI0KCk7CiAJCXcyKDQpOwogCQlicmVhazsKIAotICAgICAgICBjYXNlIDM6IHczKDB4NjgpOyByMSgpOyB3MigweDI0KTsKKyAgICAgICAgY2FzZSAzOiB3MygweDY4KTsgKHZvaWQpcjEoKTsgdzIoMHgyNCk7CiAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTxjb3VudC8yO2krKykgKCh1MTYgKilidWYpW2ldID0gcjR3KCk7CiAgICAgICAgICAgICAgICAgdzIoNCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSA0OiB3MygweDY4KTsgcjEoKTsgdzIoMHgyNCk7CisgICAgICAgIGNhc2UgNDogdzMoMHg2OCk7ICh2b2lkKXIxKCk7IHcyKDB4MjQpOwogICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8Y291bnQvNDtpKyspICgodTMyICopYnVmKVtpXSA9IHI0bCgpOwogICAgICAgICAgICAgICAgIHcyKDQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTYwLDE1ICsxNjAsMTUgQEAKICAgICAgICAgICAgICAgICB3Mig1KTsgdzIoNCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSAyOiB3MygweDQ4KTsgcjEoKTsKKyAgICAgICAgY2FzZSAyOiB3MygweDQ4KTsgKHZvaWQpcjEoKTsKICAgICAgICAgICAgICAgICBmb3IgKGs9MDtrPGNvdW50O2srKykgdzQoYnVmW2teMV0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgMzogdzMoMHg0OCk7IHIxKCk7CisgICAgICAgIGNhc2UgMzogdzMoMHg0OCk7ICh2b2lkKXIxKCk7CiAgICAgICAgICAgICAgICAgZm9yIChrPTA7azxjb3VudC8yO2srKykgdzR3KHBpX3N3YWIxNihidWYsaykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgNDogdzMoMHg0OCk7IHIxKCk7CisgICAgICAgIGNhc2UgNDogdzMoMHg0OCk7ICh2b2lkKXIxKCk7CiAgICAgICAgICAgICAgICAgZm9yIChrPTA7azxjb3VudC80O2srKykgdzRsKHBpX3N3YWIzMihidWYsaykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9vbjI2LmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9vbjI2LmMKaW5kZXggOWY4MzdkOS4uMGY4MzNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvb24yNi5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL29uMjYuYwpAQCAtNjYsNyArNjYsNyBAQAogCWNhc2UgMzoKICAgICAgICAgY2FzZSA0OiB3MygxKTsgdzMoMSk7IHcyKDUpOyB3NChyKTsgdzIoNCk7CiAJCXczKDApOyB3MygwKTsgdzIoMHgyNCk7IGEgPSByNCgpOyB3Mig0KTsKLQkJdzIoMHgyNCk7IHI0KCk7IHcyKDQpOworCQl3MigweDI0KTsgKHZvaWQpcjQoKTsgdzIoNCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CiAKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCA5M2U0NGQwLi4xZDI2MWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtNTYsOCArNTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9pb2N0bC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtODAsNyArODIsNyBAQAogc3RhdGljIHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGt0X2RldnNbTUFYX1dSSVRFUlNdOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGt0X3Byb2M7CiBzdGF0aWMgaW50IHBrdF9tYWpvcjsKLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGN0bF9tdXRleDsJLyogU2VyaWFsaXplIG9wZW4vY2xvc2Uvc2V0dXAvdGVhcmRvd24gKi8KK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggY3RsX211dGV4OwkvKiBTZXJpYWxpemUgb3Blbi9jbG9zZS9zZXR1cC90ZWFyZG93biAqLwogc3RhdGljIG1lbXBvb2xfdCAqcHNkX3Bvb2w7CiAKIApAQCAtMzgwLDYgKzM4Miw3IEBACiAJbWVtY3B5KHJxLT5jbWQsIGNnYy0+Y21kLCBDRFJPTV9QQUNLRVRfU0laRSk7CiAJaWYgKHNpemVvZihycS0+Y21kKSA+IENEUk9NX1BBQ0tFVF9TSVpFKQogCQltZW1zZXQocnEtPmNtZCArIENEUk9NX1BBQ0tFVF9TSVpFLCAwLCBzaXplb2YocnEtPmNtZCkgLSBDRFJPTV9QQUNLRVRfU0laRSk7CisJcnEtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUocnEtPmNtZFswXSk7CiAKIAlycS0+cmVmX2NvdW50Kys7CiAJcnEtPmZsYWdzIHw9IFJFUV9OT01FUkdFOwpAQCAtMTQ5NSw0MCArMTQ5OCw0MiBAQAogfQogCiAvKgotICogMCAtLSB3ZSBjYW4gd3JpdGUgdG8gdGhpcyB0cmFjaywgMSAtLSB3ZSBjYW4ndAorICogMSAtLSB3ZSBjYW4gd3JpdGUgdG8gdGhpcyB0cmFjaywgMCAtLSB3ZSBjYW4ndAogICovCi1zdGF0aWMgaW50IHBrdF9nb29kX3RyYWNrKHRyYWNrX2luZm9ybWF0aW9uICp0aSkKK3N0YXRpYyBpbnQgcGt0X3dyaXRhYmxlX3RyYWNrKHN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQsIHRyYWNrX2luZm9ybWF0aW9uICp0aSkKIHsKLQkvKgotCSAqIG9ubHkgZ29vZCBmb3IgQ0QtUlcgYXQgdGhlIG1vbWVudCwgbm90IERWRC1SVwotCSAqLworCXN3aXRjaCAocGQtPm1tYzNfcHJvZmlsZSkgeworCQljYXNlIDB4MWE6IC8qIERWRCtSVyAqLworCQljYXNlIDB4MTI6IC8qIERWRC1SQU0gKi8KKwkJCS8qIFRoZSB0cmFjayBpcyBhbHdheXMgd3JpdGFibGUgb24gRFZEK1JXL0RWRC1SQU0gKi8KKwkJCXJldHVybiAxOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQogCi0JLyoKLQkgKiBGSVhNRTogb25seSBmb3IgRlAKLQkgKi8KLQlpZiAodGktPmZwID09IDApCisJaWYgKCF0aS0+cGFja2V0IHx8ICF0aS0+ZnApCiAJCXJldHVybiAwOwogCiAJLyoKIAkgKiAiZ29vZCIgc2V0dGluZ3MgYXMgcGVyIE10IEZ1amkuCiAJICovCi0JaWYgKHRpLT5ydCA9PSAwICYmIHRpLT5ibGFuayA9PSAwICYmIHRpLT5wYWNrZXQgPT0gMSkKLQkJcmV0dXJuIDA7CisJaWYgKHRpLT5ydCA9PSAwICYmIHRpLT5ibGFuayA9PSAwKQorCQlyZXR1cm4gMTsKIAotCWlmICh0aS0+cnQgPT0gMCAmJiB0aS0+YmxhbmsgPT0gMSAmJiB0aS0+cGFja2V0ID09IDEpCi0JCXJldHVybiAwOworCWlmICh0aS0+cnQgPT0gMCAmJiB0aS0+YmxhbmsgPT0gMSkKKwkJcmV0dXJuIDE7CiAKLQlpZiAodGktPnJ0ID09IDEgJiYgdGktPmJsYW5rID09IDAgJiYgdGktPnBhY2tldCA9PSAxKQotCQlyZXR1cm4gMDsKKwlpZiAodGktPnJ0ID09IDEgJiYgdGktPmJsYW5rID09IDApCisJCXJldHVybiAxOwogCiAJcHJpbnRrKCJwa3RjZHZkOiBiYWQgc3RhdGUgJWQtJWQtJWRcbiIsIHRpLT5ydCwgdGktPmJsYW5rLCB0aS0+cGFja2V0KTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIDAgLS0gd2UgY2FuIHdyaXRlIHRvIHRoaXMgZGlzYywgMSAtLSB3ZSBjYW4ndAorICogMSAtLSB3ZSBjYW4gd3JpdGUgdG8gdGhpcyBkaXNjLCAwIC0tIHdlIGNhbid0CiAgKi8KLXN0YXRpYyBpbnQgcGt0X2dvb2RfZGlzYyhzdHJ1Y3QgcGt0Y2R2ZF9kZXZpY2UgKnBkLCBkaXNjX2luZm9ybWF0aW9uICpkaSkKK3N0YXRpYyBpbnQgcGt0X3dyaXRhYmxlX2Rpc2Moc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCwgZGlzY19pbmZvcm1hdGlvbiAqZGkpCiB7CiAJc3dpdGNoIChwZC0+bW1jM19wcm9maWxlKSB7CiAJCWNhc2UgMHgwYTogLyogQ0QtUlcgKi8KQEAgLTE1MzcsMTAgKzE1NDIsMTAgQEAKIAkJY2FzZSAweDFhOiAvKiBEVkQrUlcgKi8KIAkJY2FzZSAweDEzOiAvKiBEVkQtUlcgKi8KIAkJY2FzZSAweDEyOiAvKiBEVkQtUkFNICovCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiAxOwogCQlkZWZhdWx0OgogCQkJVlBSSU5USygicGt0Y2R2ZDogV3JvbmcgZGlzYyBwcm9maWxlICgleClcbiIsIHBkLT5tbWMzX3Byb2ZpbGUpOwotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtMTU0OSwyNSArMTU1NCwyNSBAQAogCSAqLwogCWlmIChkaS0+ZGlzY190eXBlID09IDB4ZmYpIHsKIAkJcHJpbnRrKCJwa3RjZHZkOiBVbmtub3duIGRpc2MuIE5vIHRyYWNrP1xuIik7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoZGktPmRpc2NfdHlwZSAhPSAweDIwICYmIGRpLT5kaXNjX3R5cGUgIT0gMCkgewogCQlwcmludGsoInBrdGNkdmQ6IFdyb25nIGRpc2MgdHlwZSAoJXgpXG4iLCBkaS0+ZGlzY190eXBlKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChkaS0+ZXJhc2FibGUgPT0gMCkgewogCQlwcmludGsoInBrdGNkdmQ6IERpc2Mgbm90IGVyYXNhYmxlXG4iKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiAwOwogCX0KIAogCWlmIChkaS0+Ym9yZGVyX3N0YXR1cyA9PSBQQUNLRVRfU0VTU0lPTl9SRVNFUlZFRCkgewogCQlwcmludGsoInBrdGNkdmQ6IENhbid0IHdyaXRlIHRvIGxhc3QgdHJhY2sgKHJlc2VydmVkKVxuIik7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBwa3RfcHJvYmVfc2V0dGluZ3Moc3RydWN0IHBrdGNkdmRfZGV2aWNlICpwZCkKQEAgLTE1OTIsMjMgKzE1OTcsOSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChwa3RfZ29vZF9kaXNjKHBkLCAmZGkpKQotCQlyZXR1cm4gLUVOWElPOworCWlmICghcGt0X3dyaXRhYmxlX2Rpc2MocGQsICZkaSkpCisJCXJldHVybiAtRVJPRlM7CiAKLQlzd2l0Y2ggKHBkLT5tbWMzX3Byb2ZpbGUpIHsKLQkJY2FzZSAweDFhOiAvKiBEVkQrUlcgKi8KLQkJCXByaW50aygicGt0Y2R2ZDogaW5zZXJ0ZWQgbWVkaWEgaXMgRFZEK1JXXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MTM6IC8qIERWRC1SVyAqLwotCQkJcHJpbnRrKCJwa3RjZHZkOiBpbnNlcnRlZCBtZWRpYSBpcyBEVkQtUldcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgxMjogLyogRFZELVJBTSAqLwotCQkJcHJpbnRrKCJwa3RjZHZkOiBpbnNlcnRlZCBtZWRpYSBpcyBEVkQtUkFNXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKCJwa3RjZHZkOiBpbnNlcnRlZCBtZWRpYSBpcyBDRC1SJXNcbiIsIGRpLmVyYXNhYmxlID8gIlciIDogIiIpOwotCQkJYnJlYWs7Ci0JfQogCXBkLT50eXBlID0gZGkuZXJhc2FibGUgPyBQQUNLRVRfQ0RSVyA6IFBBQ0tFVF9DRFI7CiAKIAl0cmFjayA9IDE7IC8qIChkaS5sYXN0X3RyYWNrX21zYiA8PCA4KSB8IGRpLmxhc3RfdHJhY2tfbHNiOyAqLwpAQCAtMTYxNyw5ICsxNjA4LDkgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAocGt0X2dvb2RfdHJhY2soJnRpKSkgeworCWlmICghcGt0X3dyaXRhYmxlX3RyYWNrKHBkLCAmdGkpKSB7CiAJCXByaW50aygicGt0Y2R2ZDogY2FuJ3Qgd3JpdGUgdG8gdGhpcyB0cmFja1xuIik7Ci0JCXJldHVybiAtRU5YSU87CisJCXJldHVybiAtRVJPRlM7CiAJfQogCiAJLyoKQEAgLTE2MzMsNyArMTYyNCw3IEBACiAJfQogCWlmIChwZC0+c2V0dGluZ3Muc2l6ZSA+IFBBQ0tFVF9NQVhfU0VDVE9SUykgewogCQlwcmludGsoInBrdGNkdmQ6IHBhY2tldCBzaXplIGlzIHRvbyBiaWdcbiIpOwotCQlyZXR1cm4gLUVOWElPOworCQlyZXR1cm4gLUVST0ZTOwogCX0KIAlwZC0+c2V0dGluZ3MuZnAgPSB0aS5mcDsKIAlwZC0+b2Zmc2V0ID0gKGJlMzJfdG9fY3B1KHRpLnRyYWNrX3N0YXJ0KSA8PCAyKSAmIChwZC0+c2V0dGluZ3Muc2l6ZSAtIDEpOwpAQCAtMTY3NSw3ICsxNjY2LDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKCJwa3RjZHZkOiB1bmtub3duIGRhdGEgbW9kZVxuIik7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiAtRVJPRlM7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTg4Niw3ICsxODc3LDcgQEAKIAogCWlmICgocmV0ID0gcGt0X3Byb2JlX3NldHRpbmdzKHBkKSkpIHsKIAkJVlBSSU5USygicGt0Y2R2ZDogJXMgZmFpbGVkIHByb2JlXG4iLCBwZC0+bmFtZSk7Ci0JCXJldHVybiAtRVJPRlM7CisJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKChyZXQgPSBwa3Rfc2V0X3dyaXRlX3NldHRpbmdzKHBkKSkpIHsKQEAgLTIwMjgsNyArMjAxOSw3IEBACiAKIAlWUFJJTlRLKCJwa3RjZHZkOiBlbnRlcmluZyBvcGVuXG4iKTsKIAotCWRvd24oJmN0bF9tdXRleCk7CisJbXV0ZXhfbG9jaygmY3RsX211dGV4KTsKIAlwZCA9IHBrdF9maW5kX2Rldl9mcm9tX21pbm9yKGltaW5vcihpbm9kZSkpOwogCWlmICghcGQpIHsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTIwNTQsMTQgKzIwNDUsMTQgQEAKIAkJc2V0X2Jsb2Nrc2l6ZShpbm9kZS0+aV9iZGV2LCBDRF9GUkFNRVNJWkUpOwogCX0KIAotCXVwKCZjdGxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY3RsX211dGV4KTsKIAlyZXR1cm4gMDsKIAogb3V0X2RlYzoKIAlwZC0+cmVmY250LS07CiBvdXQ6CiAJVlBSSU5USygicGt0Y2R2ZDogZmFpbGVkIG9wZW4gKCVkKVxuIiwgcmV0KTsKLQl1cCgmY3RsX211dGV4KTsKKwltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjA3MCwxNCArMjA2MSwxNCBAQAogCXN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKLQlkb3duKCZjdGxfbXV0ZXgpOworCW11dGV4X2xvY2soJmN0bF9tdXRleCk7CiAJcGQtPnJlZmNudC0tOwogCUJVR19PTihwZC0+cmVmY250IDwgMCk7CiAJaWYgKHBkLT5yZWZjbnQgPT0gMCkgewogCQlpbnQgZmx1c2ggPSB0ZXN0X2JpdChQQUNLRVRfV1JJVEFCTEUsICZwZC0+ZmxhZ3MpOwogCQlwa3RfcmVsZWFzZV9kZXYocGQsIGZsdXNoKTsKIAl9Ci0JdXAoJmN0bF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjdGxfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI1MjQsNyArMjUxNSw3IEBACiAJcmV0dXJuIDA7CiAKIG91dF9uZXdfZGV2OgotCWJsa19wdXRfcXVldWUoZGlzay0+cXVldWUpOworCWJsa19jbGVhbnVwX3F1ZXVlKGRpc2stPnF1ZXVlKTsKIG91dF9tZW0yOgogCXB1dF9kaXNrKGRpc2spOwogb3V0X21lbToKQEAgLTI1NjUsNyArMjU1Niw3IEBACiAJRFBSSU5USygicGt0Y2R2ZDogd3JpdGVyICVzIHVubWFwcGVkXG4iLCBwZC0+bmFtZSk7CiAKIAlkZWxfZ2VuZGlzayhwZC0+ZGlzayk7Ci0JYmxrX3B1dF9xdWV1ZShwZC0+ZGlzay0+cXVldWUpOworCWJsa19jbGVhbnVwX3F1ZXVlKHBkLT5kaXNrLT5xdWV1ZSk7CiAJcHV0X2Rpc2socGQtPmRpc2spOwogCiAJcGt0X2RldnNbaWR4XSA9IE5VTEw7CkBAIC0yNjA2LDIxICsyNTk3LDIxIEBACiAJY2FzZSBQS1RfQ1RSTF9DTURfU0VUVVA6CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JCWRvd24oJmN0bF9tdXRleCk7CisJCW11dGV4X2xvY2soJmN0bF9tdXRleCk7CiAJCXJldCA9IHBrdF9zZXR1cF9kZXYoJmN0cmxfY21kKTsKLQkJdXAoJmN0bF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY3RsX211dGV4KTsKIAkJYnJlYWs7CiAJY2FzZSBQS1RfQ1RSTF9DTURfVEVBUkRPV046CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JCWRvd24oJmN0bF9tdXRleCk7CisJCW11dGV4X2xvY2soJmN0bF9tdXRleCk7CiAJCXJldCA9IHBrdF9yZW1vdmVfZGV2KCZjdHJsX2NtZCk7Ci0JCXVwKCZjdGxfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CiAJCWJyZWFrOwogCWNhc2UgUEtUX0NUUkxfQ01EX1NUQVRVUzoKLQkJZG93bigmY3RsX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmY3RsX211dGV4KTsKIAkJcGt0X2dldF9zdGF0dXMoJmN0cmxfY21kKTsKLQkJdXAoJmN0bF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY3RsX211dGV4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CkBAIC0yNjY2LDcgKzI2NTcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpbml0X01VVEVYKCZjdGxfbXV0ZXgpOworCW11dGV4X2luaXQoJmN0bF9tdXRleCk7CiAKIAlwa3RfcHJvYyA9IHByb2NfbWtkaXIoInBrdGNkdmQiLCBwcm9jX3Jvb3RfZHJpdmVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9yZC5jIGIvZHJpdmVycy9ibG9jay9yZC5jCmluZGV4IGZmZDZhYmQuLjk0MGJmZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3JkLmMKQEAgLTE4Niw3ICsxODYsOCBAQAogICovCiBzdGF0aWMgaW50IHJhbWRpc2tfc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JU2V0UGFnZURpcnR5KHBhZ2UpOworCWlmICghVGVzdFNldFBhZ2VEaXJ0eShwYWdlKSkKKwkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMCwxMiArMzExLDEyIEBACiAJICogY2FjaGUKIAkgKi8KIAllcnJvciA9IC1FQlVTWTsKLQlkb3duKCZiZGV2LT5iZF9zZW0pOworCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKIAlpZiAoYmRldi0+YmRfb3BlbmVycyA8PSAyKSB7CiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKGJkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsIDApOwogCQllcnJvciA9IDA7CiAJfQotCXVwKCZiZGV2LT5iZF9zZW0pOworCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IGYwNGQ4NjQuLmY3MzQ0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTgsNyArOCw2IEBACiAgKiBhbmQgaXMgbm90IGxpY2Vuc2VkIHNlcGFyYXRlbHkuIFNlZSBmaWxlIENPUFlJTkcgZm9yIGRldGFpbHMuCiAgKgogICogVE9ETyAoc29ydGVkIGJ5IGRlY3JlYXNpbmcgcHJpb3JpdHkpCi0gKiAgLS0gS2lsbCBmaXJzdF9vcGVuIChBbCBWaXJvIGZpeGVkIHRoZSBibG9jayBsYXllciBub3cpCiAgKiAgLS0gc2V0IHJlYWRvbmx5IGZsYWcgZm9yIENEcywgc2V0IHJlbW92YWJsZSBmbGFnIGZvciBDRiByZWFkZXJzCiAgKiAgLS0gZG8gaW5xdWlyeSBhbmQgdmVyaWZ5IHdlIGdvdCBhIGRpc2sgYW5kIG5vdCBhIHRhcGUgKGZvciBMVU4gbWlzbWF0Y2gpCiAgKiAgLS0gc3BlY2lhbCBjYXNlIHNvbWUgc2Vuc2VzLCBlLmcuIDNhLzAgLT4gbm8gbWVkaWEgcHJlc2VudCwgcmVkdWNlIHJldHJpZXMKQEAgLTE4MSw2ICsxODAsNyBAQAogI2RlZmluZSBVQl9ESVJfSUxMRUdBTDIJMgogI2RlZmluZSBVQl9ESVJfV1JJVEUJMwogCisvKiBQMyAqLwogI2RlZmluZSBVQl9ESVJfQ0hBUihjKSAgKCgoYyk9PVVCX0RJUl9XUklURSk/ICd3JzogXAogCQkJICgoKGMpPT1VQl9ESVJfUkVBRCk/ICdyJzogJ24nKSkKIApAQCAtMTk2LDI0ICsxOTYsMTEgQEAKIAlVQl9DTURTVF9ET05FCQkJLyogRmluYWwgc3RhdGUgKi8KIH07CiAKLXN0YXRpYyBjaGFyICp1Yl9zY3NpX2NtZF9zdG5hbWVbXSA9IHsKLQkiLiAgIiwKLQkiQ21kIiwKLQkiZGF0IiwKLQkiYzJzIiwKLQkic3RzIiwKLQkiY2xyIiwKLQkiY3JzIiwKLQkiU2VuIiwKLQkiZmluIgotfTsKLQogc3RydWN0IHViX3Njc2lfY21kIHsKIAl1bnNpZ25lZCBjaGFyIGNkYltVQl9NQVhfQ0RCX1NJWkVdOwogCXVuc2lnbmVkIGNoYXIgY2RiX2xlbjsKIAogCXVuc2lnbmVkIGNoYXIgZGlyOwkJLyogMCAtIG5vbmUsIDEgLSByZWFkLCAzIC0gd3JpdGUuICovCi0JdW5zaWduZWQgY2hhciB0cmFjZV9pbmRleDsKIAllbnVtIHViX3Njc2lfY21kX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGludCB0YWc7CiAJc3RydWN0IHViX3Njc2lfY21kICpuZXh0OwpAQCAtMjUwLDI4ICsyMzcsNiBAQAogfTsKIAogLyoKLSAqIFRoZSBTQ1NJIGNvbW1hbmQgdHJhY2luZyBzdHJ1Y3R1cmUuCi0gKi8KLQotI2RlZmluZSBTQ01EX1NUX0hJU1RfU1ogICA4Ci0jZGVmaW5lIFNDTURfVFJBQ0VfU1ogICAgNjMJCS8qIExlc3MgdGhhbiA0S0Igb2YgNjEtYnl0ZSBsaW5lcyAqLwotCi1zdHJ1Y3QgdWJfc2NzaV9jbWRfdHJhY2UgewotCWludCBoY3VyOwotCXVuc2lnbmVkIGludCB0YWc7Ci0JdW5zaWduZWQgaW50IHJlcV9zaXplLCBhY3Rfc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIG9wOwotCXVuc2lnbmVkIGNoYXIgZGlyOwotCXVuc2lnbmVkIGNoYXIga2V5LCBhc2MsIGFzY3E7Ci0JY2hhciBzdF9oc3RbU0NNRF9TVF9ISVNUX1NaXTsJCi19OwotCi1zdHJ1Y3QgdWJfc2NzaV90cmFjZSB7Ci0JaW50IGN1cjsKLQlzdHJ1Y3QgdWJfc2NzaV9jbWRfdHJhY2UgdmVjW1NDTURfVFJBQ0VfU1pdOwotfTsKLQotLyoKICAqIFRoaXMgaXMgYSBkaXJlY3QgdGFrZS1vZmYgZnJvbSBsaW51eC9pbmNsdWRlL2NvbXBsZXRpb24uaAogICogVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBJIGRvIG5vdCB3YWl0IG9uIHRoaXMgdGhpbmcsIGp1c3QgcG9sbC4KICAqIFdoZW4gSSB3YW50IHRvIHdhaXQgKHViX3Byb2JlKSwgSSBqdXN0IHVzZSB0aGUgc3RvY2sgY29tcGxldGlvbi4KQEAgLTMzNCw3ICsyOTksNiBAQAogCWludCBjaGFuZ2VkOwkJCS8qIE1lZGlhIHdhcyBjaGFuZ2VkICovCiAJaW50IHJlbW92YWJsZTsKIAlpbnQgcmVhZG9ubHk7Ci0JaW50IGZpcnN0X29wZW47CQkJLyogS2x1ZGdlLiBTZWUgdWJfYmRfb3Blbi4gKi8KIAogCXN0cnVjdCB1Yl9yZXF1ZXN0IHVycTsKIApAQCAtMzkwLDcgKzM1NCw2IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2FpdDsKIAogCWludCBzZ19zdGF0WzZdOwotCXN0cnVjdCB1Yl9zY3NpX3RyYWNlIHRyOwogfTsKIAogLyoKQEAgLTQ2MCwxMzcgKzQyMyw2IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHViX2xvY2spOwkvKiBMb2NrcyBnbG9iYWxzIGFuZCAtPm9wZW5jICovCiAKIC8qCi0gKiBUaGUgU0NTSSBjb21tYW5kIHRyYWNpbmcgcHJvY2VkdXJlcy4KLSAqLwotCi1zdGF0aWMgdm9pZCB1Yl9jbWR0cl9uZXcoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kKQotewotCWludCBuOwotCXN0cnVjdCB1Yl9zY3NpX2NtZF90cmFjZSAqdDsKLQotCWlmICgobiA9IHNjLT50ci5jdXIgKyAxKSA9PSBTQ01EX1RSQUNFX1NaKSBuID0gMDsKLQl0ID0gJnNjLT50ci52ZWNbbl07Ci0KLQltZW1zZXQodCwgMCwgc2l6ZW9mKHN0cnVjdCB1Yl9zY3NpX2NtZF90cmFjZSkpOwotCXQtPnRhZyA9IGNtZC0+dGFnOwotCXQtPm9wID0gY21kLT5jZGJbMF07Ci0JdC0+ZGlyID0gY21kLT5kaXI7Ci0JdC0+cmVxX3NpemUgPSBjbWQtPmxlbjsKLQl0LT5zdF9oc3RbMF0gPSBjbWQtPnN0YXRlOwotCi0Jc2MtPnRyLmN1ciA9IG47Ci0JY21kLT50cmFjZV9pbmRleCA9IG47Ci19Ci0KLXN0YXRpYyB2b2lkIHViX2NtZHRyX3N0YXRlKHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCkKLXsKLQlpbnQgbjsKLQlzdHJ1Y3QgdWJfc2NzaV9jbWRfdHJhY2UgKnQ7Ci0KLQl0ID0gJnNjLT50ci52ZWNbY21kLT50cmFjZV9pbmRleF07Ci0JaWYgKHQtPnRhZyA9PSBjbWQtPnRhZykgewotCQlpZiAoKG4gPSB0LT5oY3VyICsgMSkgPT0gU0NNRF9TVF9ISVNUX1NaKSBuID0gMDsKLQkJdC0+c3RfaHN0W25dID0gY21kLT5zdGF0ZTsKLQkJdC0+aGN1ciA9IG47Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB1Yl9jbWR0cl9hY3RfbGVuKHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCkKLXsKLQlzdHJ1Y3QgdWJfc2NzaV9jbWRfdHJhY2UgKnQ7Ci0KLQl0ID0gJnNjLT50ci52ZWNbY21kLT50cmFjZV9pbmRleF07Ci0JaWYgKHQtPnRhZyA9PSBjbWQtPnRhZykKLQkJdC0+YWN0X3NpemUgPSBjbWQtPmFjdF9sZW47Ci19Ci0KLXN0YXRpYyB2b2lkIHViX2NtZHRyX3NlbnNlKHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCwKLSAgICB1bnNpZ25lZCBjaGFyICpzZW5zZSkKLXsKLQlzdHJ1Y3QgdWJfc2NzaV9jbWRfdHJhY2UgKnQ7Ci0KLQl0ID0gJnNjLT50ci52ZWNbY21kLT50cmFjZV9pbmRleF07Ci0JaWYgKHQtPnRhZyA9PSBjbWQtPnRhZykgewotCQl0LT5rZXkgPSBzZW5zZVsyXSAmIDB4MEY7Ci0JCXQtPmFzYyA9IHNlbnNlWzEyXTsKLQkJdC0+YXNjcSA9IHNlbnNlWzEzXTsKLQl9Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHViX2RpYWdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotICAgIGNoYXIgKnBhZ2UpCi17Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7Ci0Jc3RydWN0IHViX2RldiAqc2M7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKLQlzdHJ1Y3QgdWJfbHVuICpsdW47Ci0JaW50IGNudDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBuYywgbmg7Ci0JaW50IGksIGo7Ci0Jc3RydWN0IHViX3Njc2lfY21kX3RyYWNlICp0OwotCi0JaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKLQlzYyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JaWYgKHNjID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JY250ID0gMDsKLQlzcGluX2xvY2tfaXJxc2F2ZShzYy0+bG9jaywgZmxhZ3MpOwotCi0JY250ICs9IHNwcmludGYocGFnZSArIGNudCwKLQkgICAgInBvaXNvbiAlZCByZXNldCAlZFxuIiwKLQkgICAgYXRvbWljX3JlYWQoJnNjLT5wb2lzb24pLCBzYy0+cmVzZXQpOwotCWNudCArPSBzcHJpbnRmKHBhZ2UgKyBjbnQsCi0JICAgICJxbGVuICVkIHFtYXggJWRcbiIsCi0JICAgIHNjLT5jbWRfcXVldWUucWxlbiwgc2MtPmNtZF9xdWV1ZS5xbWF4KTsKLQljbnQgKz0gc3ByaW50ZihwYWdlICsgY250LAotCSAgICAic2cgJWQgJWQgJWQgJWQgJWQgLi4gJWRcbiIsCi0JICAgIHNjLT5zZ19zdGF0WzBdLAotCSAgICBzYy0+c2dfc3RhdFsxXSwKLQkgICAgc2MtPnNnX3N0YXRbMl0sCi0JICAgIHNjLT5zZ19zdGF0WzNdLAotCSAgICBzYy0+c2dfc3RhdFs0XSwKLQkgICAgc2MtPnNnX3N0YXRbNV0pOwotCi0JbGlzdF9mb3JfZWFjaCAocCwgJnNjLT5sdW5zKSB7Ci0JCWx1biA9IGxpc3RfZW50cnkocCwgc3RydWN0IHViX2x1biwgbGluayk7Ci0JCWNudCArPSBzcHJpbnRmKHBhZ2UgKyBjbnQsCi0JCSAgICAibHVuICV1IGNoYW5nZWQgJWQgcmVtb3ZhYmxlICVkIHJlYWRvbmx5ICVkXG4iLAotCQkgICAgbHVuLT5udW0sIGx1bi0+Y2hhbmdlZCwgbHVuLT5yZW1vdmFibGUsIGx1bi0+cmVhZG9ubHkpOwotCX0KLQotCWlmICgobmMgPSBzYy0+dHIuY3VyICsgMSkgPT0gU0NNRF9UUkFDRV9TWikgbmMgPSAwOwotCWZvciAoaiA9IDA7IGogPCBTQ01EX1RSQUNFX1NaOyBqKyspIHsKLQkJdCA9ICZzYy0+dHIudmVjW25jXTsKLQotCQljbnQgKz0gc3ByaW50ZihwYWdlICsgY250LCAiJTA4eCAlMDJ4IiwgdC0+dGFnLCB0LT5vcCk7Ci0JCWlmICh0LT5vcCA9PSBSRVFVRVNUX1NFTlNFKSB7Ci0JCQljbnQgKz0gc3ByaW50ZihwYWdlICsgY250LCAiIFtzZW5zZSAleCAlMDJ4ICUwMnhdIiwKLQkJCQkJdC0+a2V5LCB0LT5hc2MsIHQtPmFzY3EpOwotCQl9IGVsc2UgewotCQkJY250ICs9IHNwcmludGYocGFnZSArIGNudCwgIiAlYyIsIFVCX0RJUl9DSEFSKHQtPmRpcikpOwotCQkJY250ICs9IHNwcmludGYocGFnZSArIGNudCwgIiBbJTVkICU1ZF0iLAotCQkJCQl0LT5yZXFfc2l6ZSwgdC0+YWN0X3NpemUpOwotCQl9Ci0JCWlmICgobmggPSB0LT5oY3VyICsgMSkgPT0gU0NNRF9TVF9ISVNUX1NaKSBuaCA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBTQ01EX1NUX0hJU1RfU1o7IGkrKykgewotCQkJY250ICs9IHNwcmludGYocGFnZSArIGNudCwgIiAlcyIsCi0JCQkJCXViX3Njc2lfY21kX3N0bmFtZVsoaW50KXQtPnN0X2hzdFtuaF1dKTsKLQkJCWlmICgrK25oID09IFNDTURfU1RfSElTVF9TWikgbmggPSAwOwotCQl9Ci0JCWNudCArPSBzcHJpbnRmKHBhZ2UgKyBjbnQsICJcbiIpOwotCi0JCWlmICgrK25jID09IFNDTURfVFJBQ0VfU1opIG5jID0gMDsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNjLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGNudDsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGRpYWcsIFNfSVJVR08sIHViX2RpYWdfc2hvdywgTlVMTCk7IC8qIE4uQi4gV29ybGQgcmVhZGFibGUgKi8KLQotLyoKICAqIFRoZSBpZCBhbGxvY2F0b3IuCiAgKgogICogVGhpcyBhbHNvIHN0b3JlcyB0aGUgaG9zdCBmb3IgaW5kZXhpbmcgYnkgbWlub3IsIHdoaWNoIGlzIHNvbWV3aGF0IGRpcnR5LgpAQCAtMTA5Miw3ICs5MjQsNiBAQAogCWFkZF90aW1lcigmc2MtPndvcmtfdGltZXIpOwogCiAJY21kLT5zdGF0ZSA9IFVCX0NNRFNUX0NNRDsKLQl1Yl9jbWR0cl9zdGF0ZShzYywgY21kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE0NSwxMiArOTc2LDEwIEBACiAJCQl1Yl9jbWRxX3BvcChzYyk7CiAJCQkoKmNtZC0+ZG9uZSkoc2MsIGNtZCk7CiAJCX0gZWxzZSBpZiAoY21kLT5zdGF0ZSA9PSBVQl9DTURTVF9JTklUKSB7Ci0JCQl1Yl9jbWR0cl9uZXcoc2MsIGNtZCk7CiAJCQlpZiAoKHJjID0gdWJfc2NzaV9jbWRfc3RhcnQoc2MsIGNtZCkpID09IDApCiAJCQkJYnJlYWs7CiAJCQljbWQtPmVycm9yID0gcmM7CiAJCQljbWQtPnN0YXRlID0gVUJfQ01EU1RfRE9ORTsKLQkJCXViX2NtZHRyX3N0YXRlKHNjLCBjbWQpOwogCQl9IGVsc2UgewogCQkJaWYgKCF1Yl9pc19jb21wbGV0ZWQoJnNjLT53b3JrX2RvbmUpKQogCQkJCWJyZWFrOwpAQCAtMTI0Nyw3ICsxMDc2LDYgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQljbWQtPnN0YXRlID0gVUJfQ01EU1RfQ0xFQVI7Ci0JCQl1Yl9jbWR0cl9zdGF0ZShzYywgY21kKTsKIAkJCXJldHVybjsKIAkJY2FzZSAtRVNIVVRET1dOOgkvKiB1bnBsdWcgKi8KIAkJY2FzZSAtRUlMU0VROgkJLyogdW5wbHVnIHRpbWVvdXQgb24gdWhjaSAqLwpAQCAtMTI3OSw3ICsxMTA3LDYgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQljbWQtPnN0YXRlID0gVUJfQ01EU1RfQ0xSMlNUUzsKLQkJCXViX2NtZHRyX3N0YXRlKHNjLCBjbWQpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICh1cmItPnN0YXR1cyA9PSAtRU9WRVJGTE9XKSB7CkBAIC0xMzA0LDcgKzExMzEsNiBAQAogCQkJaWYgKHVyYi0+c3RhdHVzICE9IDAgfHwKIAkJCSAgICBsZW4gIT0gY21kLT5zZ3ZbY21kLT5jdXJyZW50X3NnXS5sZW5ndGgpIHsKIAkJCQljbWQtPmFjdF9sZW4gKz0gbGVuOwotCQkJCXViX2NtZHRyX2FjdF9sZW4oc2MsIGNtZCk7CiAKIAkJCQljbWQtPmVycm9yID0gLUVJTzsKIAkJCQl1Yl9zdGF0ZV9zdGF0KHNjLCBjbWQpOwpAQCAtMTMzMSw3ICsxMTU3LDYgQEAKIAkJfQogCiAJCWNtZC0+YWN0X2xlbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7Ci0JCXViX2NtZHRyX2FjdF9sZW4oc2MsIGNtZCk7CiAKIAkJaWYgKCsrY21kLT5jdXJyZW50X3NnIDwgY21kLT5uc2cpIHsKIAkJCXViX2RhdGFfc3RhcnQoc2MsIGNtZCk7CkBAIC0xMzU3LDcgKzExODIsNiBAQAogCQkJY21kLT5lcnJvciA9IC1FSU87CQkvKiBBIGNoZWFwIHRyaWNrLi4uICovCiAKIAkJCWNtZC0+c3RhdGUgPSBVQl9DTURTVF9DTFJSUzsKLQkJCXViX2NtZHRyX3N0YXRlKHNjLCBjbWQpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTE0NDEsNyArMTI2NSw2IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJY21kLT5zdGF0ZSA9IFVCX0NNRFNUX0RPTkU7Ci0JCXViX2NtZHRyX3N0YXRlKHNjLCBjbWQpOwogCQl1Yl9jbWRxX3BvcChzYyk7CiAJCSgqY21kLT5kb25lKShzYywgY21kKTsKIApAQCAtMTQ5Niw3ICsxMzE5LDYgQEAKIAlhZGRfdGltZXIoJnNjLT53b3JrX3RpbWVyKTsKIAogCWNtZC0+c3RhdGUgPSBVQl9DTURTVF9EQVRBOwotCXViX2NtZHRyX3N0YXRlKHNjLCBjbWQpOwogfQogCiAvKgpAQCAtMTUwOCw3ICsxMzMwLDYgQEAKIAogCWNtZC0+ZXJyb3IgPSByYzsKIAljbWQtPnN0YXRlID0gVUJfQ01EU1RfRE9ORTsKLQl1Yl9jbWR0cl9zdGF0ZShzYywgY21kKTsKIAl1Yl9jbWRxX3BvcChzYyk7CiAJKCpjbWQtPmRvbmUpKHNjLCBjbWQpOwogfQpAQCAtMTU1NCw3ICsxMzc1LDYgQEAKIAogCWNtZC0+c3RhdF9jb3VudCA9IDA7CiAJY21kLT5zdGF0ZSA9IFVCX0NNRFNUX1NUQVQ7Ci0JdWJfY21kdHJfc3RhdGUoc2MsIGNtZCk7CiB9CiAKIC8qCkBAIC0xNTczLDcgKzEzOTMsNiBAQAogCQlyZXR1cm47CiAKIAljbWQtPnN0YXRlID0gVUJfQ01EU1RfU1RBVDsKLQl1Yl9jbWR0cl9zdGF0ZShzYywgY21kKTsKIH0KIAogLyoKQEAgLTE2MTEsNyArMTQzMCw2IEBACiAJc2NtZC0+dGFnID0gc2MtPnRhZ2NudCsrOwogCiAJY21kLT5zdGF0ZSA9IFVCX0NNRFNUX1NFTlNFOwotCXViX2NtZHRyX3N0YXRlKHNjLCBjbWQpOwogCiAJdWJfY21kcV9pbnNlcnQoc2MsIHNjbWQpOwogCXJldHVybjsKQEAgLTE2NjgsMTEgKzE0ODYsNiBAQAogCXN0cnVjdCB1Yl9zY3NpX2NtZCAqY21kOwogCiAJLyoKLQkgKiBJZ25vcmluZyBzY21kLT5hY3RfbGVuLCBiZWNhdXNlIHRoZSBidWZmZXIgd2FzIHByZS16ZXJvZWQuCi0JICovCi0JdWJfY21kdHJfc2Vuc2Uoc2MsIHNjbWQsIHNlbnNlKTsKLQotCS8qCiAJICogRmluZCB0aGUgY29tbWFuZCB3aGljaCB0cmlnZ2VyZWQgdGhlIHVuaXQgYXR0ZW50aW9uIG9yIGEgY2hlY2ssCiAJICogc2F2ZSB0aGUgc2Vuc2UgaW50byBpdCwgYW5kIGFkdmFuY2UgaXRzIHN0YXRlIG1hY2hpbmUuCiAJICovCkBAIC0xNjkzLDYgKzE1MDYsOSBAQAogCQlyZXR1cm47CiAJfQogCisJLyoKKwkgKiBJZ25vcmluZyBzY21kLT5hY3RfbGVuLCBiZWNhdXNlIHRoZSBidWZmZXIgd2FzIHByZS16ZXJvZWQuCisJICovCiAJY21kLT5rZXkgPSBzZW5zZVsyXSAmIDB4MEY7CiAJY21kLT5hc2MgPSBzZW5zZVsxMl07CiAJY21kLT5hc2NxID0gc2Vuc2VbMTNdOwpAQCAtMTg0OSwyNiArMTY2NSw2IEBACiAJc2MtPm9wZW5jKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWJfbG9jaywgZmxhZ3MpOwogCi0JLyoKLQkgKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBzcGVjaWZpYyBwcm9ibGVtIGluIG91ciBibG9jayBsYXllci4KLQkgKiBJbiAyLjYuOSwgcmVnaXN0ZXJfZGlzayBkdXBsaWNhdGVzIHRoZSBjb2RlIGZyb20gcmVzY2FuX3BhcnRpdGlvbnMuCi0JICogSG93ZXZlciwgaWYgd2UgZG8gYWRkX2Rpc2sgd2l0aCBhIGRldmljZSB3aGljaCBwZXJzaXN0ZW50bHkgcmVwb3J0cwotCSAqIGEgY2hhbmdlZCBtZWRpYSwgYWRkX2Rpc2sgY2FsbHMgcmVnaXN0ZXJfZGlzaywgd2hpY2ggZG9lcyBkb19vcGVuLAotCSAqIHdoaWNoIHdpbGwgY2FsbCByZXNjYW5fcGFyaXRpb25zIGZvciBjaGFuZ2VkIG1lZGlhLiBBZnRlciB0aGF0LAotCSAqIHJlZ2lzdGVyX2Rpc2sgYXR0ZW1wdHMgdG8gZG8gaXQgYWxsIGFnYWluIGFuZCBjYXVzZXMgZG91YmxlIGtvYmplY3QKLQkgKiByZWdpc3RyYXRpb24gYW5kIGEgZXZlbnR1YWxseSBhbiBvb3BzIG9uIG1vZHVsZSByZW1vdmFsLgotCSAqCi0JICogVGhlIGJvdHRvbSBsaW5lIGlzLCBBbCBWaXJvIHNheXMgdGhhdCB3ZSBzaG91bGQgbm90IGFsbG93Ci0JICogYmRldi0+YmRfaW52YWxpZGF0ZWQgdG8gYmUgc2V0IHdoZW4gZG9pbmcgYWRkX2Rpc2sgbm8gbWF0dGVyIHdoYXQuCi0JICovCi0JaWYgKGx1bi0+Zmlyc3Rfb3BlbikgewotCQlsdW4tPmZpcnN0X29wZW4gPSAwOwotCQlpZiAobHVuLT5jaGFuZ2VkKSB7Ci0JCQlyYyA9IC1FTk9NRURJVU07Ci0JCQlnb3RvIGVycl9vcGVuOwotCQl9Ci0JfQotCiAJaWYgKGx1bi0+cmVtb3ZhYmxlIHx8IGx1bi0+cmVhZG9ubHkpCiAJCWNoZWNrX2Rpc2tfY2hhbmdlKGlub2RlLT5pX2JkZXYpOwogCkBAIC0yMDA3LDkgKzE4MDMsOCBAQAogCWluaXRfY29tcGxldGlvbigmY29tcGwpOwogCiAJcmMgPSAtRU5PTUVNOwotCWlmICgoY21kID0ga21hbGxvYyhBTExPQ19TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwlpZiAoKGNtZCA9IGt6YWxsb2MoQUxMT0NfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCWdvdG8gZXJyX2FsbG9jOwotCW1lbXNldChjbWQsIDAsIEFMTE9DX1NJWkUpOwogCiAJY21kLT5jZGJbMF0gPSBURVNUX1VOSVRfUkVBRFk7CiAJY21kLT5jZGJfbGVuID0gNjsKQEAgLTIwNjIsOSArMTg1Nyw4IEBACiAJaW5pdF9jb21wbGV0aW9uKCZjb21wbCk7CiAKIAlyYyA9IC1FTk9NRU07Ci0JaWYgKChjbWQgPSBrbWFsbG9jKEFMTE9DX1NJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgoY21kID0ga3phbGxvYyhBTExPQ19TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJZ290byBlcnJfYWxsb2M7Ci0JbWVtc2V0KGNtZCwgMCwgQUxMT0NfU0laRSk7CiAJcCA9IChjaGFyICopY21kICsgc2l6ZW9mKHN0cnVjdCB1Yl9zY3NpX2NtZCk7CiAKIAljbWQtPmNkYlswXSA9IDB4MjU7CkBAIC0yNDA1LDkgKzIxOTksOCBAQAogCQlyZXR1cm4gLUVOWElPOwogCiAJcmMgPSAtRU5PTUVNOwotCWlmICgoc2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdWJfZGV2KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChzYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Yl9kZXYpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJZ290byBlcnJfY29yZTsKLQltZW1zZXQoc2MsIDAsIHNpemVvZihzdHJ1Y3QgdWJfZGV2KSk7CiAJc2MtPmxvY2sgPSB1Yl9uZXh0X2xvY2soKTsKIAlJTklUX0xJU1RfSEVBRCgmc2MtPmx1bnMpOwogCXVzYl9pbml0X3VyYigmc2MtPndvcmtfdXJiKTsKQEAgLTI0MzgsOSArMjIzMSw2IEBACiAJaWYgKHViX2dldF9waXBlcyhzYywgc2MtPmRldiwgaW50ZikgIT0gMCkKIAkJZ290byBlcnJfZGV2X2Rlc2M7CiAKLQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZzYy0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfZGlhZykgIT0gMCkKLQkJZ290byBlcnJfZGlhZzsKLQogCS8qCiAJICogQXQgdGhpcyBwb2ludCwgYWxsIFVTQiBpbml0aWFsaXphdGlvbiBpcyBkb25lLCBkbyB1cHBlciBsYXllci4KIAkgKiBXZSByZWFsbHkgaGF0ZSBoYWxmd2F5IGluaXRpYWxpemVkIHN0cnVjdHVyZXMsIHNvIGZyb20gdGhlCkBAIC0yNDgwLDE5ICsyMjcwLDggQEAKIAogCW5sdW5zID0gMTsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWlmICgocmMgPSB1Yl9zeW5jX2dldG1heGx1bihzYykpIDwgMCkgewotCQkJLyogCi0JCQkgKiBUaGlzIHNlZ21lbnQgaXMgdGFrZW4gZnJvbSB1c2Itc3RvcmFnZS4gVGhleSBzYXkKLQkJCSAqIHRoYXQgWklQLTEwMCBuZWVkcyB0aGlzLCBidXQgbXkgb3duIFpJUC0xMDAgd29ya3MKLQkJCSAqIGZpbmUgd2l0aG91dCB0aGlzLgotCQkJICogU3RpbGwsIGl0IGRvZXMgbm90IHNlZW0gdG8gaHVydCBhbnl0aGluZy4KLQkJCSAqLwotCQkJaWYgKHJjID09IC1FUElQRSkgewotCQkJCXViX3Byb2JlX2NsZWFyX3N0YWxsKHNjLCBzYy0+cmVjdl9idWxrX3BpcGUpOwotCQkJCXViX3Byb2JlX2NsZWFyX3N0YWxsKHNjLCBzYy0+c2VuZF9idWxrX3BpcGUpOwotCQkJfQorCQlpZiAoKHJjID0gdWJfc3luY19nZXRtYXhsdW4oc2MpKSA8IDApCiAJCQlicmVhazsKLQkJfQogCQlpZiAocmMgIT0gMCkgewogCQkJbmx1bnMgPSByYzsKIAkJCWJyZWFrOwpAQCAtMjUwNSw4ICsyMjg0LDYgQEAKIAl9CiAJcmV0dXJuIDA7CiAKLQkvKiBkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNjLT5pbnRmLT5kZXYsICZkZXZfYXR0cl9kaWFnKTsgKi8KLWVycl9kaWFnOgogZXJyX2Rldl9kZXNjOgogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAJLy8gdXNiX3B1dF9pbnRmKHNjLT5pbnRmKTsKQEAgLTI1MjQsOSArMjMwMSw4IEBACiAJaW50IHJjOwogCiAJcmMgPSAtRU5PTUVNOwotCWlmICgobHVuID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHViX2x1biksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCWlmICgobHVuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHViX2x1biksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlnb3RvIGVycl9hbGxvYzsKLQltZW1zZXQobHVuLCAwLCBzaXplb2Yoc3RydWN0IHViX2x1bikpOwogCWx1bi0+bnVtID0gbG51bTsKIAogCXJjID0gLUVOT1NSOwpAQCAtMjU0MSw3ICsyMzE3LDYgQEAKIAogCWx1bi0+cmVtb3ZhYmxlID0gMTsJCS8qIFhYWCBRdWVyeSB0aGlzIGZyb20gdGhlIGRldmljZSAqLwogCWx1bi0+Y2hhbmdlZCA9IDE7CQkvKiB1Yl9yZXZhbGlkYXRlIGNsZWFycyBvbmx5ICovCi0JbHVuLT5maXJzdF9vcGVuID0gMTsKIAl1Yl9yZXZhbGlkYXRlKHNjLCBsdW4pOwogCiAJcmMgPSAtRU5PTUVNOwpAQCAtMjYzNiw3ICsyNDExLDYgQEAKIAkJd2hpbGUgKChjbWQgPSB1Yl9jbWRxX3BlZWsoc2MpKSAhPSBOVUxMKSB7CiAJCQljbWQtPmVycm9yID0gLUVOT1RDT05OOwogCQkJY21kLT5zdGF0ZSA9IFVCX0NNRFNUX0RPTkU7Ci0JCQl1Yl9jbWR0cl9zdGF0ZShzYywgY21kKTsKIAkJCXViX2NtZHFfcG9wKHNjKTsKIAkJCSgqY21kLT5kb25lKShzYywgY21kKTsKIAkJCWNudCsrOwpAQCAtMjY4Nyw3ICsyNDYxLDYgQEAKIAkgKiBhbmQgbm8gVVJCcyBsZWZ0IGluIHRyYW5zaXQuCiAJICovCiAKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNjLT5pbnRmLT5kZXYsICZkZXZfYXR0cl9kaWFnKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCS8vIHVzYl9wdXRfaW50ZihzYy0+aW50Zik7CiAJc2MtPmludGYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91bWVtLmMgYi9kcml2ZXJzL2Jsb2NrL3VtZW0uYwppbmRleCA0YWRhMTI2Li5jMTZlNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VtZW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3VtZW0uYwpAQCAtMTEzMSw3ICsxMTMxLDcgQEAKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChjYXJkLT5kZXYsIFBBR0VfU0laRSoyLAogCQkJCSAgICBjYXJkLT5tbV9wYWdlc1sxXS5kZXNjLAogCQkJCSAgICBjYXJkLT5tbV9wYWdlc1sxXS5wYWdlX2RtYSk7Ci0JYmxrX3B1dF9xdWV1ZShjYXJkLT5xdWV1ZSk7CisJYmxrX2NsZWFudXBfcXVldWUoY2FyZC0+cXVldWUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbW1fcGNpX2lkc1tdID0geyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKaW5kZXggODc5YmJjMi4uYTU5ODc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwpAQCAtNDA3LDcgKzQwNyw2IEBACiAJRU5TVVJFKGdldF9tY24sIENEQ19NQ04pOwogCUVOU1VSRShyZXNldCwgQ0RDX1JFU0VUKTsKIAlFTlNVUkUoYXVkaW9faW9jdGwsIENEQ19QTEFZX0FVRElPKTsKLQlFTlNVUkUoZGV2X2lvY3RsLCBDRENfSU9DVExTKTsKIAlFTlNVUkUoZ2VuZXJpY19wYWNrZXQsIENEQ19HRU5FUklDX1BBQ0tFVCk7CiAJY2RpLT5tY19mbGFncyA9IDA7CiAJY2RvLT5uX21pbm9ycyA9IDA7CkBAIC0yMTk2LDM5NSArMjE5NSw1ODYgQEAKIAlyZXR1cm4gY2Ryb21fcmVhZF9jZGRhX29sZChjZGksIHVidWYsIGxiYSwgbmZyYW1lcyk7CQogfQogCi0vKiBKdXN0IGFib3V0IGV2ZXJ5IGltYWdpbmFibGUgaW9jdGwgaXMgc3VwcG9ydGVkIGluIHRoZSBVbmlmb3JtIGxheWVyCi0gKiB0aGVzZSBkYXlzLiBBVEFQSSAvIFNDU0kgc3BlY2lmaWMgY29kZSBub3cgbWFpbmx5IHJlc2lkZXMgaW4KLSAqIG1tY19pb2N0KCkuCi0gKi8KLWludCBjZHJvbV9pb2N0bChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAotCQlzdHJ1Y3QgaW5vZGUgKmlwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfbXVsdGlzZXNzaW9uKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQl2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgY2Ryb21fZGV2aWNlX29wcyAqY2RvID0gY2RpLT5vcHM7CisJc3RydWN0IGNkcm9tX211bHRpc2Vzc2lvbiBtc19pbmZvOworCXU4IHJlcXVlc3RlZF9mb3JtYXQ7CiAJaW50IHJldDsKIAotCS8qIFRyeSB0aGUgZ2VuZXJpYyBTQ1NJIGNvbW1hbmQgaW9jdGwncyBmaXJzdC4uICovCi0JcmV0ID0gc2NzaV9jbWRfaW9jdGwoZmlsZSwgaXAtPmlfYmRldi0+YmRfZGlzaywgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCWlmIChyZXQgIT0gLUVOT1RUWSkKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTU1VTFRJU0VTU0lPTlxuIik7CisKKwlpZiAoIShjZGktPm9wcy0+Y2FwYWJpbGl0eSAmIENEQ19NVUxUSV9TRVNTSU9OKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJm1zX2luZm8sIGFyZ3AsIHNpemVvZihtc19pbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmVxdWVzdGVkX2Zvcm1hdCA9IG1zX2luZm8uYWRkcl9mb3JtYXQ7CisJaWYgKHJlcXVlc3RlZF9mb3JtYXQgIT0gQ0RST01fTVNGICYmIHJlcXVlc3RlZF9mb3JtYXQgIT0gQ0RST01fTEJBKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltc19pbmZvLmFkZHJfZm9ybWF0ID0gQ0RST01fTEJBOworCisJcmV0ID0gY2RpLT5vcHMtPmdldF9sYXN0X3Nlc3Npb24oY2RpLCAmbXNfaW5mbyk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIHRoZSBmaXJzdCBmZXcgY29tbWFuZHMgZG8gbm90IGRlYWwgd2l0aCBhdWRpbyBkcml2ZV9pbmZvLCBidXQKLQkgICBvbmx5IHdpdGggcm91dGluZXMgaW4gY2Ryb20gZGV2aWNlIG9wZXJhdGlvbnMuICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIENEUk9NTVVMVElTRVNTSU9OOiB7Ci0JCXN0cnVjdCBjZHJvbV9tdWx0aXNlc3Npb24gbXNfaW5mbzsKLQkJdV9jaGFyIHJlcXVlc3RlZF9mb3JtYXQ7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NTVVMVElTRVNTSU9OXG4iKTsgCi0gICAgICAgICAgICAgICAgaWYgKCEoY2RvLT5jYXBhYmlsaXR5ICYgQ0RDX01VTFRJX1NFU1NJT04pKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9TWVM7Ci0JCUlPQ1RMX0lOKGFyZywgc3RydWN0IGNkcm9tX211bHRpc2Vzc2lvbiwgbXNfaW5mbyk7Ci0JCXJlcXVlc3RlZF9mb3JtYXQgPSBtc19pbmZvLmFkZHJfZm9ybWF0OwotCQlpZiAoISgocmVxdWVzdGVkX2Zvcm1hdCA9PSBDRFJPTV9NU0YpIHx8Ci0JCQkocmVxdWVzdGVkX2Zvcm1hdCA9PSBDRFJPTV9MQkEpKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbXNfaW5mby5hZGRyX2Zvcm1hdCA9IENEUk9NX0xCQTsKLQkJaWYgKChyZXQ9Y2RvLT5nZXRfbGFzdF9zZXNzaW9uKGNkaSwgJm1zX2luZm8pKSkKKwlzYW5pdGl6ZV9mb3JtYXQoJm1zX2luZm8uYWRkciwgJm1zX2luZm8uYWRkcl9mb3JtYXQsIHJlcXVlc3RlZF9mb3JtYXQpOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbXNfaW5mbywgc2l6ZW9mKG1zX2luZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJDRFJPTU1VTFRJU0VTU0lPTiBzdWNjZXNzZnVsXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZHJvbV9pb2N0bF9lamVjdChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKK3sKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTUVKRUNUXG4iKTsKKworCWlmICghQ0RST01fQ0FOKENEQ19PUEVOX1RSQVkpKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAoY2RpLT51c2VfY291bnQgIT0gMSB8fCBrZWVwbG9ja2VkKQorCQlyZXR1cm4gLUVCVVNZOworCWlmIChDRFJPTV9DQU4oQ0RDX0xPQ0spKSB7CisJCWludCByZXQgPSBjZGktPm9wcy0+bG9ja19kb29yKGNkaSwgMCk7CisJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlzYW5pdGl6ZV9mb3JtYXQoJm1zX2luZm8uYWRkciwgJm1zX2luZm8uYWRkcl9mb3JtYXQsCi0JCQkJcmVxdWVzdGVkX2Zvcm1hdCk7Ci0JCUlPQ1RMX09VVChhcmcsIHN0cnVjdCBjZHJvbV9tdWx0aXNlc3Npb24sIG1zX2luZm8pOwotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJDRFJPTU1VTFRJU0VTU0lPTiBzdWNjZXNzZnVsXG4iKTsgCi0JCXJldHVybiAwOwotCQl9CisJfQogCi0JY2FzZSBDRFJPTUVKRUNUOiB7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NRUpFQ1RcbiIpOyAKLQkJaWYgKCFDRFJPTV9DQU4oQ0RDX09QRU5fVFJBWSkpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJaWYgKGNkaS0+dXNlX2NvdW50ICE9IDEgfHwga2VlcGxvY2tlZCkKLQkJCXJldHVybiAtRUJVU1k7Ci0JCWlmIChDRFJPTV9DQU4oQ0RDX0xPQ0spKQotCQkJaWYgKChyZXQ9Y2RvLT5sb2NrX2Rvb3IoY2RpLCAwKSkpCi0JCQkJcmV0dXJuIHJldDsKKwlyZXR1cm4gY2RpLT5vcHMtPnRyYXlfbW92ZShjZGksIDEpOworfQogCi0JCXJldHVybiBjZG8tPnRyYXlfbW92ZShjZGksIDEpOwotCQl9CitzdGF0aWMgaW50IGNkcm9tX2lvY3RsX2Nsb3NldHJheShzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKK3sKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTUNMT1NFVFJBWVxuIik7CiAKLQljYXNlIENEUk9NQ0xPU0VUUkFZOiB7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NQ0xPU0VUUkFZXG4iKTsgCi0JCWlmICghQ0RST01fQ0FOKENEQ19DTE9TRV9UUkFZKSkKLQkJCXJldHVybiAtRU5PU1lTOwotCQlyZXR1cm4gY2RvLT50cmF5X21vdmUoY2RpLCAwKTsKLQkJfQorCWlmICghQ0RST01fQ0FOKENEQ19DTE9TRV9UUkFZKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIGNkaS0+b3BzLT50cmF5X21vdmUoY2RpLCAwKTsKK30KIAotCWNhc2UgQ0RST01FSkVDVF9TVzogewotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTUVKRUNUX1NXXG4iKTsgCi0JCWlmICghQ0RST01fQ0FOKENEQ19PUEVOX1RSQVkpKQotCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCWlmIChrZWVwbG9ja2VkKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJY2RpLT5vcHRpb25zICY9IH4oQ0RPX0FVVE9fQ0xPU0UgfCBDRE9fQVVUT19FSkVDVCk7Ci0JCWlmIChhcmcpCi0JCQljZGktPm9wdGlvbnMgfD0gQ0RPX0FVVE9fQ0xPU0UgfCBDRE9fQVVUT19FSkVDVDsKLQkJcmV0dXJuIDA7Ci0JCX0KK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfZWplY3Rfc3coc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NRUpFQ1RfU1dcbiIpOwogCi0JY2FzZSBDRFJPTV9NRURJQV9DSEFOR0VEOiB7Ci0JCXN0cnVjdCBjZHJvbV9jaGFuZ2VyX2luZm8gKmluZm87Ci0JCWludCBjaGFuZ2VkOworCWlmICghQ0RST01fQ0FOKENEQ19PUEVOX1RSQVkpKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAoa2VlcGxvY2tlZCkKKwkJcmV0dXJuIC1FQlVTWTsKIAotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9NRURJQV9DSEFOR0VEXG4iKTsgCi0JCWlmICghQ0RST01fQ0FOKENEQ19NRURJQV9DSEFOR0VEKSkKLQkJCXJldHVybiAtRU5PU1lTOworCWNkaS0+b3B0aW9ucyAmPSB+KENET19BVVRPX0NMT1NFIHwgQ0RPX0FVVE9fRUpFQ1QpOworCWlmIChhcmcpCisJCWNkaS0+b3B0aW9ucyB8PSBDRE9fQVVUT19DTE9TRSB8IENET19BVVRPX0VKRUNUOworCXJldHVybiAwOworfQogCi0JCS8qIGNhbm5vdCBzZWxlY3QgZGlzYyBvciBzZWxlY3QgY3VycmVudCBkaXNjICovCi0JCWlmICghQ0RST01fQ0FOKENEQ19TRUxFQ1RfRElTQykgfHwgYXJnID09IENEU0xfQ1VSUkVOVCkKLQkJCXJldHVybiBtZWRpYV9jaGFuZ2VkKGNkaSwgMSk7CitzdGF0aWMgaW50IGNkcm9tX2lvY3RsX21lZGlhX2NoYW5nZWQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjZHJvbV9jaGFuZ2VyX2luZm8gKmluZm87CisJaW50IHJldDsKIAotCQlpZiAoKHVuc2lnbmVkIGludClhcmcgPj0gY2RpLT5jYXBhY2l0eSkKLQkJCXJldHVybiAtRUlOVkFMOworCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX01FRElBX0NIQU5HRURcbiIpOwogCi0JCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwotCQlpZiAoIWluZm8pCi0JCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIUNEUk9NX0NBTihDRENfTUVESUFfQ0hBTkdFRCkpCisJCXJldHVybiAtRU5PU1lTOwogCi0JCWlmICgocmV0ID0gY2Ryb21fcmVhZF9tZWNoX3N0YXR1cyhjZGksIGluZm8pKSkgewotCQkJa2ZyZWUoaW5mbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJLyogY2Fubm90IHNlbGVjdCBkaXNjIG9yIHNlbGVjdCBjdXJyZW50IGRpc2MgKi8KKwlpZiAoIUNEUk9NX0NBTihDRENfU0VMRUNUX0RJU0MpIHx8IGFyZyA9PSBDRFNMX0NVUlJFTlQpCisJCXJldHVybiBtZWRpYV9jaGFuZ2VkKGNkaSwgMSk7CiAKLQkJY2hhbmdlZCA9IGluZm8tPnNsb3RzW2FyZ10uY2hhbmdlOwotCQlrZnJlZShpbmZvKTsKLQkJcmV0dXJuIGNoYW5nZWQ7Ci0JCX0KKwlpZiAoKHVuc2lnbmVkIGludClhcmcgPj0gY2RpLT5jYXBhY2l0eSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQljYXNlIENEUk9NX1NFVF9PUFRJT05TOiB7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX1NFVF9PUFRJT05TXG4iKTsgCi0JCS8qIG9wdGlvbnMgbmVlZCB0byBiZSBpbiBzeW5jIHdpdGggY2FwYWJpbGl0eS4gdG9vIGxhdGUgZm9yCi0JCSAgIHRoYXQsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZWFjaCBvbmUgc2VwYXJhdGVseS4uLiAqLwotCQlzd2l0Y2ggKGFyZykgewotCQljYXNlIENET19VU0VfRkZMQUdTOgotCQljYXNlIENET19DSEVDS19UWVBFOgotCQkJYnJlYWs7Ci0JCWNhc2UgQ0RPX0xPQ0s6Ci0JCQlpZiAoIUNEUk9NX0NBTihDRENfTE9DSykpCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSAwOgotCQkJcmV0dXJuIGNkaS0+b3B0aW9uczsKLQkJLyogZGVmYXVsdCBpcyBiYXNpY2FsbHkgQ0RPX1tBVVRPX0NMT1NFfEFVVE9fRUpFQ1RdICovCi0JCWRlZmF1bHQ6Ci0JCQlpZiAoIUNEUk9NX0NBTihhcmcpKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQl9Ci0JCWNkaS0+b3B0aW9ucyB8PSAoaW50KSBhcmc7Ci0JCXJldHVybiBjZGktPm9wdGlvbnM7Ci0JCX0KKwlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOwogCi0JY2FzZSBDRFJPTV9DTEVBUl9PUFRJT05TOiB7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0NMRUFSX09QVElPTlNcbiIpOyAKLQkJY2RpLT5vcHRpb25zICY9IH4oaW50KSBhcmc7Ci0JCXJldHVybiBjZGktPm9wdGlvbnM7Ci0JCX0KKwlyZXQgPSBjZHJvbV9yZWFkX21lY2hfc3RhdHVzKGNkaSwgaW5mbyk7CisJaWYgKCFyZXQpCisJCXJldCA9IGluZm8tPnNsb3RzW2FyZ10uY2hhbmdlOworCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7Cit9CiAKLQljYXNlIENEUk9NX1NFTEVDVF9TUEVFRDogewotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9TRUxFQ1RfU1BFRURcbiIpOyAKLQkJaWYgKCFDRFJPTV9DQU4oQ0RDX1NFTEVDVF9TUEVFRCkpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJcmV0dXJuIGNkby0+c2VsZWN0X3NwZWVkKGNkaSwgYXJnKTsKLQkJfQorc3RhdGljIGludCBjZHJvbV9pb2N0bF9zZXRfb3B0aW9ucyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fU0VUX09QVElPTlNcbiIpOwogCi0JY2FzZSBDRFJPTV9TRUxFQ1RfRElTQzogewotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9TRUxFQ1RfRElTQ1xuIik7IAotCQlpZiAoIUNEUk9NX0NBTihDRENfU0VMRUNUX0RJU0MpKQotCQkJcmV0dXJuIC1FTk9TWVM7Ci0KLSAgICAgICAgICAgICAgICBpZiAoKGFyZyAhPSBDRFNMX0NVUlJFTlQpICYmIChhcmcgIT0gQ0RTTF9OT05FKSkKLQkJCWlmICgoaW50KWFyZyA+PSBjZGktPmNhcGFjaXR5KQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIGNkby0+c2VsZWN0X2Rpc2MgaXMgYSBob29rIHRvIGFsbG93IGEgZHJpdmVyLXNwZWNpZmljCi0JCSAqIHdheSBvZiBzZWxldGluZyBkaXNjLiAgSG93ZXZlciwgc2luY2UgdGhlcmUgaXMgbm8KLQkJICogZXF1aXYgaG9vayBmb3IgY2Ryb21fc2xvdF9zdGF0dXMgdGhpcyBtYXkgbm90IAotCQkgKiBhY3R1YWxseSBiZSB1c2VmdWwuLi4KLQkJICovCi0JCWlmIChjZG8tPnNlbGVjdF9kaXNjICE9IE5VTEwpCi0JCQlyZXR1cm4gY2RvLT5zZWxlY3RfZGlzYyhjZGksIGFyZyk7Ci0KLQkJLyogbm8gZHJpdmVyIHNwZWNpZmljIHNlbGVjdF9kaXNjKCksIGNhbGwgb3VyIG93biAqLwotCQljZGluZm8oQ0RfQ0hBTkdFUiwgIlVzaW5nIGdlbmVyaWMgY2Ryb21fc2VsZWN0X2Rpc2MoKVxuIik7IAotCQlyZXR1cm4gY2Ryb21fc2VsZWN0X2Rpc2MoY2RpLCBhcmcpOwotCQl9Ci0KLQljYXNlIENEUk9NUkVTRVQ6IHsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX1JFU0VUXG4iKTsKLQkJaWYgKCFDRFJPTV9DQU4oQ0RDX1JFU0VUKSkKLQkJCXJldHVybiAtRU5PU1lTOwotCQlpbnZhbGlkYXRlX2JkZXYoaXAtPmlfYmRldiwgMCk7Ci0JCXJldHVybiBjZG8tPnJlc2V0KGNkaSk7Ci0JCX0KLQotCWNhc2UgQ0RST01fTE9DS0RPT1I6IHsKLQkJY2RpbmZvKENEX0RPX0lPQ1RMLCAiJXNvY2tpbmcgZG9vci5cbiIsIGFyZyA/ICJMIiA6ICJVbmwiKTsKKwkvKgorCSAqIE9wdGlvbnMgbmVlZCB0byBiZSBpbiBzeW5jIHdpdGggY2FwYWJpbGl0eS4KKwkgKiBUb28gbGF0ZSBmb3IgdGhhdCwgc28gd2UgaGF2ZSB0byBjaGVjayBlYWNoIG9uZSBzZXBhcmF0ZWx5LgorCSAqLworCXN3aXRjaCAoYXJnKSB7CisJY2FzZSBDRE9fVVNFX0ZGTEFHUzoKKwljYXNlIENET19DSEVDS19UWVBFOgorCQlicmVhazsKKwljYXNlIENET19MT0NLOgogCQlpZiAoIUNEUk9NX0NBTihDRENfTE9DSykpCi0JCQlyZXR1cm4gLUVEUklWRV9DQU5UX0RPX1RISVM7Ci0JCWtlZXBsb2NrZWQgPSBhcmcgPyAxIDogMDsKLQkJLyogZG9uJ3QgdW5sb2NrIHRoZSBkb29yIG9uIG11bHRpcGxlIG9wZW5zLGJ1dCBhbGxvdyByb290Ci0JCSAqIHRvIGRvIHNvICovCi0JCWlmICgoY2RpLT51c2VfY291bnQgIT0gMSkgJiYgIWFyZyAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRUJVU1k7Ci0JCXJldHVybiBjZG8tPmxvY2tfZG9vcihjZGksIGFyZyk7Ci0JCX0KKwkJCXJldHVybiAtRU5PU1lTOworCQlicmVhazsKKwljYXNlIDA6CisJCXJldHVybiBjZGktPm9wdGlvbnM7CisJLyogZGVmYXVsdCBpcyBiYXNpY2FsbHkgQ0RPX1tBVVRPX0NMT1NFfEFVVE9fRUpFQ1RdICovCisJZGVmYXVsdDoKKwkJaWYgKCFDRFJPTV9DQU4oYXJnKSkKKwkJCXJldHVybiAtRU5PU1lTOworCX0KKwljZGktPm9wdGlvbnMgfD0gKGludCkgYXJnOworCXJldHVybiBjZGktPm9wdGlvbnM7Cit9CiAKLQljYXNlIENEUk9NX0RFQlVHOiB7Ci0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRUFDQ0VTOwotCQljZGluZm8oQ0RfRE9fSU9DVEwsICIlc2FibGluZyBkZWJ1Zy5cbiIsIGFyZyA/ICJFbiIgOiAiRGlzIik7Ci0JCWRlYnVnID0gYXJnID8gMSA6IDA7Ci0JCXJldHVybiBkZWJ1ZzsKLQkJfQorc3RhdGljIGludCBjZHJvbV9pb2N0bF9jbGVhcl9vcHRpb25zKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9DTEVBUl9PUFRJT05TXG4iKTsKIAotCWNhc2UgQ0RST01fR0VUX0NBUEFCSUxJVFk6IHsKLQkJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fR0VUX0NBUEFCSUxJVFlcbiIpOwotCQlyZXR1cm4gKGNkby0+Y2FwYWJpbGl0eSAmIH5jZGktPm1hc2spOwotCQl9CisJY2RpLT5vcHRpb25zICY9IH4oaW50KSBhcmc7CisJcmV0dXJuIGNkaS0+b3B0aW9uczsKK30KIAotLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCwgYWx0aG91Z2ggdmVyeSBmZXcgYXVkaW8KK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfc2VsZWN0X3NwZWVkKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9TRUxFQ1RfU1BFRURcbiIpOworCisJaWYgKCFDRFJPTV9DQU4oQ0RDX1NFTEVDVF9TUEVFRCkpCisJCXJldHVybiAtRU5PU1lTOworCXJldHVybiBjZGktPm9wcy0+c2VsZWN0X3NwZWVkKGNkaSwgYXJnKTsKK30KKworc3RhdGljIGludCBjZHJvbV9pb2N0bF9zZWxlY3RfZGlzYyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fU0VMRUNUX0RJU0NcbiIpOworCisJaWYgKCFDRFJPTV9DQU4oQ0RDX1NFTEVDVF9ESVNDKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlpZiAoYXJnICE9IENEU0xfQ1VSUkVOVCAmJiBhcmcgIT0gQ0RTTF9OT05FKSB7CisJCWlmICgoaW50KWFyZyA+PSBjZGktPmNhcGFjaXR5KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiAtPnNlbGVjdF9kaXNjIGlzIGEgaG9vayB0byBhbGxvdyBhIGRyaXZlci1zcGVjaWZpYyB3YXkgb2YKKwkgKiBzZWxldGluZyBkaXNjLiAgSG93ZXZlciwgc2luY2UgdGhlcmUgaXMgbm8gZXF1aXZhbGVudCBob29rIGZvcgorCSAqIGNkcm9tX3Nsb3Rfc3RhdHVzIHRoaXMgbWF5IG5vdCBhY3R1YWxseSBiZSB1c2VmdWwuLi4KKwkgKi8KKwlpZiAoY2RpLT5vcHMtPnNlbGVjdF9kaXNjKQorCQlyZXR1cm4gY2RpLT5vcHMtPnNlbGVjdF9kaXNjKGNkaSwgYXJnKTsKKworCWNkaW5mbyhDRF9DSEFOR0VSLCAiVXNpbmcgZ2VuZXJpYyBjZHJvbV9zZWxlY3RfZGlzYygpXG4iKTsKKwlyZXR1cm4gY2Ryb21fc2VsZWN0X2Rpc2MoY2RpLCBhcmcpOworfQorCitzdGF0aWMgaW50IGNkcm9tX2lvY3RsX3Jlc2V0KHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX1JFU0VUXG4iKTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJaWYgKCFDRFJPTV9DQU4oQ0RDX1JFU0VUKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaW52YWxpZGF0ZV9iZGV2KGJkZXYsIDApOworCXJldHVybiBjZGktPm9wcy0+cmVzZXQoY2RpKTsKK30KKworc3RhdGljIGludCBjZHJvbV9pb2N0bF9sb2NrX2Rvb3Ioc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCWNkaW5mbyhDRF9ET19JT0NUTCwgIiVzb2NraW5nIGRvb3IuXG4iLCBhcmcgPyAiTCIgOiAiVW5sIik7CisKKwlpZiAoIUNEUk9NX0NBTihDRENfTE9DSykpCisJCXJldHVybiAtRURSSVZFX0NBTlRfRE9fVEhJUzsKKworCWtlZXBsb2NrZWQgPSBhcmcgPyAxIDogMDsKKworCS8qCisJICogRG9uJ3QgdW5sb2NrIHRoZSBkb29yIG9uIG11bHRpcGxlIG9wZW5zIGJ5IGRlZmF1bHQsIGJ1dCBhbGxvdworCSAqIHJvb3QgdG8gZG8gc28uCisJICovCisJaWYgKGNkaS0+dXNlX2NvdW50ICE9IDEgJiYgIWFyZyAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlyZXR1cm4gY2RpLT5vcHMtPmxvY2tfZG9vcihjZGksIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfZGVidWcoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCWNkaW5mbyhDRF9ET19JT0NUTCwgIiVzYWJsaW5nIGRlYnVnLlxuIiwgYXJnID8gIkVuIiA6ICJEaXMiKTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJZGVidWcgPSBhcmcgPyAxIDogMDsKKwlyZXR1cm4gZGVidWc7Cit9CisKK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfZ2V0X2NhcGFiaWxpdHkoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkpCit7CisJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fR0VUX0NBUEFCSUxJVFlcbiIpOworCXJldHVybiAoY2RpLT5vcHMtPmNhcGFiaWxpdHkgJiB+Y2RpLT5tYXNrKTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQsIGFsdGhvdWdoIHZlcnkgZmV3IGF1ZGlvCiAgKiBkaXNjcyBnaXZlIFVuaXZlcnNhbCBQcm9kdWN0IENvZGUgaW5mb3JtYXRpb24sIHdoaWNoIHNob3VsZCBqdXN0IGJlCiAgKiB0aGUgTWVkaXVtIENhdGFsb2cgTnVtYmVyIG9uIHRoZSBib3guICBOb3RlLCB0aGF0IHRoZSB3YXkgdGhlIGNvZGUKICAqIGlzIHdyaXR0ZW4gb24gdGhlIENEIGlzIC9ub3QvIHVuaWZvcm0gYWNyb3NzIGFsbCBkaXNjcyEKICAqLwotCWNhc2UgQ0RST01fR0VUX01DTjogewotCQlzdHJ1Y3QgY2Ryb21fbWNuIG1jbjsKLQkJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01fR0VUX01DTlxuIik7IAotCQlpZiAoIShjZG8tPmNhcGFiaWxpdHkgJiBDRENfTUNOKSkKLQkJCXJldHVybiAtRU5PU1lTOwotCQlpZiAoKHJldD1jZG8tPmdldF9tY24oY2RpLCAmbWNuKSkpCi0JCQlyZXR1cm4gcmV0OwotCQlJT0NUTF9PVVQoYXJnLCBzdHJ1Y3QgY2Ryb21fbWNuLCBtY24pOwotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJDRFJPTV9HRVRfTUNOIHN1Y2Nlc3NmdWxcbiIpOyAKLQkJcmV0dXJuIDA7Ci0JCX0KK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfZ2V0X21jbihzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKKwkJdm9pZCBfX3VzZXIgKmFyZ3ApCit7CisJc3RydWN0IGNkcm9tX21jbiBtY247CisJaW50IHJldDsKIAotCWNhc2UgQ0RST01fRFJJVkVfU1RBVFVTOiB7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0RSSVZFX1NUQVRVU1xuIik7IAotCQlpZiAoIShjZG8tPmNhcGFiaWxpdHkgJiBDRENfRFJJVkVfU1RBVFVTKSkKLQkJCXJldHVybiAtRU5PU1lTOwotCQlpZiAoIUNEUk9NX0NBTihDRENfU0VMRUNUX0RJU0MpKQotCQkJcmV0dXJuIGNkby0+ZHJpdmVfc3RhdHVzKGNkaSwgQ0RTTF9DVVJSRU5UKTsKLSAgICAgICAgICAgICAgICBpZiAoKGFyZyA9PSBDRFNMX0NVUlJFTlQpIHx8IChhcmcgPT0gQ0RTTF9OT05FKSkgCi0JCQlyZXR1cm4gY2RvLT5kcml2ZV9zdGF0dXMoY2RpLCBDRFNMX0NVUlJFTlQpOwotCQlpZiAoKChpbnQpYXJnID49IGNkaS0+Y2FwYWNpdHkpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBjZHJvbV9zbG90X3N0YXR1cyhjZGksIGFyZyk7Ci0JCX0KKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9HRVRfTUNOXG4iKTsKIAotCS8qIE9rLCB0aGlzIGlzIHdoZXJlIHByb2JsZW1zIHN0YXJ0LiAgVGhlIGN1cnJlbnQgaW50ZXJmYWNlIGZvciB0aGUKLQkgICBDRFJPTV9ESVNDX1NUQVRVUyBpb2N0bCBpcyBmbGF3ZWQuICBJdCBtYWtlcyB0aGUgZmFsc2UgYXNzdW1wdGlvbgotCSAgIHRoYXQgQ0RzIGFyZSBhbGwgQ0RTX0RBVEFfMSBvciBhbGwgQ0RTX0FVRElPLCBldGMuICBVbmZvcnR1bmF0bHksCi0JICAgd2hpbGUgdGhpcyBpcyBvZnRlbiB0aGUgY2FzZSwgaXQgaXMgYWxzbyB2ZXJ5IGNvbW1vbiBmb3IgQ0RzIHRvCi0JICAgaGF2ZSBzb21lIHRyYWNrcyB3aXRoIGRhdGEsIGFuZCBzb21lIHRyYWNrcyB3aXRoIGF1ZGlvLiAgSnVzdCAKLQkgICBiZWNhdXNlIEkgZmVlbCBsaWtlIGl0LCBJIGRlY2xhcmUgdGhlIGZvbGxvd2luZyB0byBiZSB0aGUgYmVzdAotCSAgIHdheSB0byBjb3BlLiAgSWYgdGhlIENEIGhhcyBBTlkgZGF0YSB0cmFja3Mgb24gaXQsIGl0IHdpbGwgYmUKLQkgICByZXR1cm5lZCBhcyBhIGRhdGEgQ0QuICBJZiBpdCBoYXMgYW55IFhBIHRyYWNrcywgSSB3aWxsIHJldHVybgotCSAgIGl0IGFzIHRoYXQuICBOb3cgSSBjb3VsZCBzaW1wbGlmeSB0aGlzIGludGVyZmFjZSBieSBjb21iaW5pbmcgdGhlc2UgCi0JICAgcmV0dXJucyB3aXRoIHRoZSBhYm92ZSwgYnV0IHRoaXMgbW9yZSBjbGVhcmx5IGRlbW9uc3RyYXRlcwotCSAgIHRoZSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnQgaW50ZXJmYWNlLiAgVG9vIGJhZCB0aGlzIHdhc24ndCAKLQkgICBkZXNpZ25lZCB0byB1c2UgYml0bWFza3MuLi4gICAgICAgICAtRXJpayAKKwlpZiAoIShjZGktPm9wcy0+Y2FwYWJpbGl0eSAmIENEQ19NQ04pKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXQgPSBjZGktPm9wcy0+Z2V0X21jbihjZGksICZtY24pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkgICBXZWxsLCBub3cgd2UgaGF2ZSB0aGUgb3B0aW9uIENEU19NSVhFRDogYSBtaXhlZC10eXBlIENELiAKLQkgICBVc2VyIGxldmVsIHByb2dyYW1tZXJzIG1pZ2h0IGZlZWwgdGhlIGlvY3RsIGlzIG5vdCB2ZXJ5IHVzZWZ1bC4KLQkgICAJCQkJCS0tLWRhdmlkCi0JKi8KLQljYXNlIENEUk9NX0RJU0NfU1RBVFVTOiB7Ci0JCXRyYWNrdHlwZSB0cmFja3M7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0RJU0NfU1RBVFVTXG4iKTsgCi0JCWNkcm9tX2NvdW50X3RyYWNrcyhjZGksICZ0cmFja3MpOwotCQlpZiAodHJhY2tzLmVycm9yKSAKLQkJCXJldHVybih0cmFja3MuZXJyb3IpOworCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm1jbiwgc2l6ZW9mKG1jbikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJDRFJPTV9HRVRfTUNOIHN1Y2Nlc3NmdWxcbiIpOworCXJldHVybiAwOworfQogCi0JCS8qIFBvbGljeSBtb2RlIG9uICovCi0JCWlmICh0cmFja3MuYXVkaW8gPiAwKSB7Ci0JCQlpZiAodHJhY2tzLmRhdGE9PTAgJiYgdHJhY2tzLmNkaT09MCAmJiB0cmFja3MueGE9PTApIAotCQkJCXJldHVybiBDRFNfQVVESU87Ci0JCQllbHNlCi0JCQkJcmV0dXJuIENEU19NSVhFRDsKLQkJfQotCQlpZiAodHJhY2tzLmNkaSA+IDApIHJldHVybiBDRFNfWEFfMl8yOwotCQlpZiAodHJhY2tzLnhhID4gMCkgcmV0dXJuIENEU19YQV8yXzE7Ci0JCWlmICh0cmFja3MuZGF0YSA+IDApIHJldHVybiBDRFNfREFUQV8xOwotCQkvKiBQb2xpY3kgbW9kZSBvZmYgKi8KK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfZHJpdmVfc3RhdHVzKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9EUklWRV9TVEFUVVNcbiIpOwogCi0JCWNkaW5mbyhDRF9XQVJOSU5HLCJUaGlzIGRpc2MgZG9lc24ndCBoYXZlIGFueSB0cmFja3MgSSByZWNvZ25pemUhXG4iKTsKLQkJcmV0dXJuIENEU19OT19JTkZPOwotCQl9CisJaWYgKCEoY2RpLT5vcHMtPmNhcGFiaWxpdHkgJiBDRENfRFJJVkVfU1RBVFVTKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKCFDRFJPTV9DQU4oQ0RDX1NFTEVDVF9ESVNDKSB8fAorCSAgICAoYXJnID09IENEU0xfQ1VSUkVOVCB8fCBhcmcgPT0gQ0RTTF9OT05FKSkKKwkJcmV0dXJuIGNkaS0+b3BzLT5kcml2ZV9zdGF0dXMoY2RpLCBDRFNMX0NVUlJFTlQpOworCWlmICgoKGludClhcmcgPj0gY2RpLT5jYXBhY2l0eSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBjZHJvbV9zbG90X3N0YXR1cyhjZGksIGFyZyk7Cit9CiAKLQljYXNlIENEUk9NX0NIQU5HRVJfTlNMT1RTOiB7Ci0JCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NX0NIQU5HRVJfTlNMT1RTXG4iKTsgCi0JCXJldHVybiBjZGktPmNhcGFjaXR5OwotCQl9CisvKgorICogT2ssIHRoaXMgaXMgd2hlcmUgcHJvYmxlbXMgc3RhcnQuICBUaGUgY3VycmVudCBpbnRlcmZhY2UgZm9yIHRoZQorICogQ0RST01fRElTQ19TVEFUVVMgaW9jdGwgaXMgZmxhd2VkLiAgSXQgbWFrZXMgdGhlIGZhbHNlIGFzc3VtcHRpb24gdGhhdAorICogQ0RzIGFyZSBhbGwgQ0RTX0RBVEFfMSBvciBhbGwgQ0RTX0FVRElPLCBldGMuICBVbmZvcnR1bmF0bHksIHdoaWxlIHRoaXMKKyAqIGlzIG9mdGVuIHRoZSBjYXNlLCBpdCBpcyBhbHNvIHZlcnkgY29tbW9uIGZvciBDRHMgdG8gaGF2ZSBzb21lIHRyYWNrcworICogd2l0aCBkYXRhLCBhbmQgc29tZSB0cmFja3Mgd2l0aCBhdWRpby4gIEp1c3QgYmVjYXVzZSBJIGZlZWwgbGlrZSBpdCwKKyAqIEkgZGVjbGFyZSB0aGUgZm9sbG93aW5nIHRvIGJlIHRoZSBiZXN0IHdheSB0byBjb3BlLiAgSWYgdGhlIENEIGhhcyBBTlkKKyAqIGRhdGEgdHJhY2tzIG9uIGl0LCBpdCB3aWxsIGJlIHJldHVybmVkIGFzIGEgZGF0YSBDRC4gIElmIGl0IGhhcyBhbnkgWEEKKyAqIHRyYWNrcywgSSB3aWxsIHJldHVybiBpdCBhcyB0aGF0LiAgTm93IEkgY291bGQgc2ltcGxpZnkgdGhpcyBpbnRlcmZhY2UKKyAqIGJ5IGNvbWJpbmluZyB0aGVzZSAgcmV0dXJucyB3aXRoIHRoZSBhYm92ZSwgYnV0IHRoaXMgbW9yZSBjbGVhcmx5CisgKiBkZW1vbnN0cmF0ZXMgdGhlIHByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbnRlcmZhY2UuICBUb28gYmFkIHRoaXMKKyAqIHdhc24ndCBkZXNpZ25lZCB0byB1c2UgYml0bWFza3MuLi4gICAgICAgICAtRXJpaworICoKKyAqIFdlbGwsIG5vdyB3ZSBoYXZlIHRoZSBvcHRpb24gQ0RTX01JWEVEOiBhIG1peGVkLXR5cGUgQ0QuCisgKiBVc2VyIGxldmVsIHByb2dyYW1tZXJzIG1pZ2h0IGZlZWwgdGhlIGlvY3RsIGlzIG5vdCB2ZXJ5IHVzZWZ1bC4KKyAqCQkJCQktLS1kYXZpZAorICovCitzdGF0aWMgaW50IGNkcm9tX2lvY3RsX2Rpc2Nfc3RhdHVzKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpKQoreworCXRyYWNrdHlwZSB0cmFja3M7CisKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9ESVNDX1NUQVRVU1xuIik7CisKKwljZHJvbV9jb3VudF90cmFja3MoY2RpLCAmdHJhY2tzKTsKKwlpZiAodHJhY2tzLmVycm9yKQorCQlyZXR1cm4gdHJhY2tzLmVycm9yOworCisJLyogUG9saWN5IG1vZGUgb24gKi8KKwlpZiAodHJhY2tzLmF1ZGlvID4gMCkgeworCQlpZiAoIXRyYWNrcy5kYXRhICYmICF0cmFja3MuY2RpICYmICF0cmFja3MueGEpCisJCQlyZXR1cm4gQ0RTX0FVRElPOworCQllbHNlCisJCQlyZXR1cm4gQ0RTX01JWEVEOwogCX0KIAotCS8qIHVzZSB0aGUgaW9jdGxzIHRoYXQgYXJlIGltcGxlbWVudGVkIHRocm91Z2ggdGhlIGdlbmVyaWNfcGFja2V0KCkKLQkgICBpbnRlcmZhY2UuIHRoaXMgbWF5IGxvb2sgYXQgYml0IGZ1bm55LCBidXQgaWYgLUVOT1RUWSBpcwotCSAgIHJldHVybmVkIHRoYXQgcGFydGljdWxhciBpb2N0bCBpcyBub3QgaW1wbGVtZW50ZWQgYW5kIHdlCi0JICAgbGV0IGl0IGdvIHRocm91Z2ggdGhlIGRldmljZSBzcGVjaWZpYyBvbmVzLiAqLworCWlmICh0cmFja3MuY2RpID4gMCkKKwkJcmV0dXJuIENEU19YQV8yXzI7CisJaWYgKHRyYWNrcy54YSA+IDApCisJCXJldHVybiBDRFNfWEFfMl8xOworCWlmICh0cmFja3MuZGF0YSA+IDApCisJCXJldHVybiBDRFNfREFUQV8xOworCS8qIFBvbGljeSBtb2RlIG9mZiAqLworCisJY2RpbmZvKENEX1dBUk5JTkcsIlRoaXMgZGlzYyBkb2Vzbid0IGhhdmUgYW55IHRyYWNrcyBJIHJlY29nbml6ZSFcbiIpOworCXJldHVybiBDRFNfTk9fSU5GTzsKK30KKworc3RhdGljIGludCBjZHJvbV9pb2N0bF9jaGFuZ2VyX25zbG90cyhzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSkKK3sKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTV9DSEFOR0VSX05TTE9UU1xuIik7CisJcmV0dXJuIGNkaS0+Y2FwYWNpdHk7Cit9CisKK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfZ2V0X3N1YmNobmwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCXZvaWQgX191c2VyICphcmdwKQoreworCXN0cnVjdCBjZHJvbV9zdWJjaG5sIHE7CisJdTggcmVxdWVzdGVkLCBiYWNrOworCWludCByZXQ7CisKKwkvKiBjZGluZm8oQ0RfRE9fSU9DVEwsImVudGVyaW5nIENEUk9NU1VCQ0hOTFxuIik7Ki8KKworCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZxLCBhcmdwLCBzaXplb2YocSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJlcXVlc3RlZCA9IHEuY2RzY19mb3JtYXQ7CisJaWYgKHJlcXVlc3RlZCAhPSBDRFJPTV9NU0YgJiYgcmVxdWVzdGVkICE9IENEUk9NX0xCQSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcS5jZHNjX2Zvcm1hdCA9IENEUk9NX01TRjsKKworCXJldCA9IGNkaS0+b3BzLT5hdWRpb19pb2N0bChjZGksIENEUk9NU1VCQ0hOTCwgJnEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwliYWNrID0gcS5jZHNjX2Zvcm1hdDsgLyogbG9jYWwgY29weSAqLworCXNhbml0aXplX2Zvcm1hdCgmcS5jZHNjX2Fic2FkZHIsICZiYWNrLCByZXF1ZXN0ZWQpOworCXNhbml0aXplX2Zvcm1hdCgmcS5jZHNjX3JlbGFkZHIsICZxLmNkc2NfZm9ybWF0LCByZXF1ZXN0ZWQpOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmcSwgc2l6ZW9mKHEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiQ0RST01TVUJDSE5MIHN1Y2Nlc3NmdWxcbiIpOyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkcm9tX2lvY3RsX3JlYWRfdG9jaGRyKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQl2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlzdHJ1Y3QgY2Ryb21fdG9jaGRyIGhlYWRlcjsKKwlpbnQgcmV0OworCisJLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01SRUFEVE9DSERSXG4iKTsgKi8KKworCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZoZWFkZXIsIGFyZ3AsIHNpemVvZihoZWFkZXIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBjZGktPm9wcy0+YXVkaW9faW9jdGwoY2RpLCBDRFJPTVJFQURUT0NIRFIsICZoZWFkZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29weV90b191c2VyKGFyZ3AsICZoZWFkZXIsIHNpemVvZihoZWFkZXIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiQ0RST01SRUFEVE9DSERSIHN1Y2Nlc3NmdWxcbiIpOyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkcm9tX2lvY3RsX3JlYWRfdG9jZW50cnkoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCXZvaWQgX191c2VyICphcmdwKQoreworCXN0cnVjdCBjZHJvbV90b2NlbnRyeSBlbnRyeTsKKwl1OCByZXF1ZXN0ZWRfZm9ybWF0OworCWludCByZXQ7CisKKwkvKiBjZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVJFQURUT0NFTlRSWVxuIik7ICovCisKKwlpZiAoIUNEUk9NX0NBTihDRENfUExBWV9BVURJTykpCisJCXJldHVybiAtRU5PU1lTOworCWlmIChjb3B5X2Zyb21fdXNlcigmZW50cnksIGFyZ3AsIHNpemVvZihlbnRyeSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJlcXVlc3RlZF9mb3JtYXQgPSBlbnRyeS5jZHRlX2Zvcm1hdDsKKwlpZiAocmVxdWVzdGVkX2Zvcm1hdCAhPSBDRFJPTV9NU0YgJiYgcmVxdWVzdGVkX2Zvcm1hdCAhPSBDRFJPTV9MQkEpCisJCXJldHVybiAtRUlOVkFMOworCS8qIG1ha2UgaW50ZXJmYWNlIHRvIGxvdy1sZXZlbCB1bmlmb3JtICovCisJZW50cnkuY2R0ZV9mb3JtYXQgPSBDRFJPTV9NU0Y7CisJcmV0ID0gY2RpLT5vcHMtPmF1ZGlvX2lvY3RsKGNkaSwgQ0RST01SRUFEVE9DRU5UUlksICZlbnRyeSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlzYW5pdGl6ZV9mb3JtYXQoJmVudHJ5LmNkdGVfYWRkciwgJmVudHJ5LmNkdGVfZm9ybWF0LCByZXF1ZXN0ZWRfZm9ybWF0KTsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmVudHJ5LCBzaXplb2YoZW50cnkpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiQ0RST01SRUFEVE9DRU5UUlkgc3VjY2Vzc2Z1bFxuIik7ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfcGxheV9tc2Yoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCXZvaWQgX191c2VyICphcmdwKQoreworCXN0cnVjdCBjZHJvbV9tc2YgbXNmOworCisJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01QTEFZTVNGXG4iKTsKKworCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZtc2YsIGFyZ3AsIHNpemVvZihtc2YpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIGNkaS0+b3BzLT5hdWRpb19pb2N0bChjZGksIENEUk9NUExBWU1TRiwgJm1zZik7Cit9CisKK3N0YXRpYyBpbnQgY2Ryb21faW9jdGxfcGxheV90cmtpbmQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCisJCXZvaWQgX191c2VyICphcmdwKQoreworCXN0cnVjdCBjZHJvbV90aSB0aTsKKwlpbnQgcmV0OworCisJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01QTEFZVFJLSU5EXG4iKTsKKworCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aSwgYXJncCwgc2l6ZW9mKHRpKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gY2hlY2tfZm9yX2F1ZGlvX2Rpc2MoY2RpLCBjZGktPm9wcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gY2RpLT5vcHMtPmF1ZGlvX2lvY3RsKGNkaSwgQ0RST01QTEFZVFJLSU5ELCAmdGkpOworfQorc3RhdGljIGludCBjZHJvbV9pb2N0bF92b2xjdHJsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQl2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlzdHJ1Y3QgY2Ryb21fdm9sY3RybCB2b2x1bWU7CisKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVZPTENUUkxcbiIpOworCisJaWYgKCFDRFJPTV9DQU4oQ0RDX1BMQVlfQVVESU8pKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAoY29weV9mcm9tX3VzZXIoJnZvbHVtZSwgYXJncCwgc2l6ZW9mKHZvbHVtZSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gY2RpLT5vcHMtPmF1ZGlvX2lvY3RsKGNkaSwgQ0RST01WT0xDVFJMLCAmdm9sdW1lKTsKK30KKworc3RhdGljIGludCBjZHJvbV9pb2N0bF92b2xyZWFkKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQl2b2lkIF9fdXNlciAqYXJncCkKK3sKKwlzdHJ1Y3QgY2Ryb21fdm9sY3RybCB2b2x1bWU7CisJaW50IHJldDsKKworCWNkaW5mbyhDRF9ET19JT0NUTCwgImVudGVyaW5nIENEUk9NVk9MUkVBRFxuIik7CisKKwlpZiAoIUNEUk9NX0NBTihDRENfUExBWV9BVURJTykpCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0ID0gY2RpLT5vcHMtPmF1ZGlvX2lvY3RsKGNkaSwgQ0RST01WT0xSRUFELCAmdm9sdW1lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdm9sdW1lLCBzaXplb2Yodm9sdW1lKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNkcm9tX2lvY3RsX2F1ZGlvY3RsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQl1bnNpZ25lZCBpbnQgY21kKQoreworCWludCByZXQ7CisKKwljZGluZm8oQ0RfRE9fSU9DVEwsICJkb2luZyBhdWRpbyBpb2N0bCAoc3RhcnQvc3RvcC9wYXVzZS9yZXN1bWUpXG4iKTsKKworCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJcmV0ID0gY2hlY2tfZm9yX2F1ZGlvX2Rpc2MoY2RpLCBjZGktPm9wcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gY2RpLT5vcHMtPmF1ZGlvX2lvY3RsKGNkaSwgY21kLCBOVUxMKTsKK30KKworLyoKKyAqIEp1c3QgYWJvdXQgZXZlcnkgaW1hZ2luYWJsZSBpb2N0bCBpcyBzdXBwb3J0ZWQgaW4gdGhlIFVuaWZvcm0gbGF5ZXIKKyAqIHRoZXNlIGRheXMuCisgKiBBVEFQSSAvIFNDU0kgc3BlY2lmaWMgY29kZSBub3cgbWFpbmx5IHJlc2lkZXMgaW4gbW1jX2lvY3RsKCkuCisgKi8KK2ludCBjZHJvbV9pb2N0bChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAorCQlzdHJ1Y3QgaW5vZGUgKmlwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBUcnkgdGhlIGdlbmVyaWMgU0NTSSBjb21tYW5kIGlvY3RsJ3MgZmlyc3QuCisJICovCisJcmV0ID0gc2NzaV9jbWRfaW9jdGwoZmlsZSwgaXAtPmlfYmRldi0+YmRfZGlzaywgY21kLCBhcmdwKTsKKwlpZiAocmV0ICE9IC1FTk9UVFkpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0RST01NVUxUSVNFU1NJT046CisJCXJldHVybiBjZHJvbV9pb2N0bF9tdWx0aXNlc3Npb24oY2RpLCBhcmdwKTsKKwljYXNlIENEUk9NRUpFQ1Q6CisJCXJldHVybiBjZHJvbV9pb2N0bF9lamVjdChjZGkpOworCWNhc2UgQ0RST01DTE9TRVRSQVk6CisJCXJldHVybiBjZHJvbV9pb2N0bF9jbG9zZXRyYXkoY2RpKTsKKwljYXNlIENEUk9NRUpFQ1RfU1c6CisJCXJldHVybiBjZHJvbV9pb2N0bF9lamVjdF9zdyhjZGksIGFyZyk7CisJY2FzZSBDRFJPTV9NRURJQV9DSEFOR0VEOgorCQlyZXR1cm4gY2Ryb21faW9jdGxfbWVkaWFfY2hhbmdlZChjZGksIGFyZyk7CisJY2FzZSBDRFJPTV9TRVRfT1BUSU9OUzoKKwkJcmV0dXJuIGNkcm9tX2lvY3RsX3NldF9vcHRpb25zKGNkaSwgYXJnKTsKKwljYXNlIENEUk9NX0NMRUFSX09QVElPTlM6CisJCXJldHVybiBjZHJvbV9pb2N0bF9jbGVhcl9vcHRpb25zKGNkaSwgYXJnKTsKKwljYXNlIENEUk9NX1NFTEVDVF9TUEVFRDoKKwkJcmV0dXJuIGNkcm9tX2lvY3RsX3NlbGVjdF9zcGVlZChjZGksIGFyZyk7CisJY2FzZSBDRFJPTV9TRUxFQ1RfRElTQzoKKwkJcmV0dXJuIGNkcm9tX2lvY3RsX3NlbGVjdF9kaXNjKGNkaSwgYXJnKTsKKwljYXNlIENEUk9NUkVTRVQ6CisJCXJldHVybiBjZHJvbV9pb2N0bF9yZXNldChjZGksIGlwLT5pX2JkZXYpOworCWNhc2UgQ0RST01fTE9DS0RPT1I6CisJCXJldHVybiBjZHJvbV9pb2N0bF9sb2NrX2Rvb3IoY2RpLCBhcmcpOworCWNhc2UgQ0RST01fREVCVUc6CisJCXJldHVybiBjZHJvbV9pb2N0bF9kZWJ1ZyhjZGksIGFyZyk7CisJY2FzZSBDRFJPTV9HRVRfQ0FQQUJJTElUWToKKwkJcmV0dXJuIGNkcm9tX2lvY3RsX2dldF9jYXBhYmlsaXR5KGNkaSk7CisJY2FzZSBDRFJPTV9HRVRfTUNOOgorCQlyZXR1cm4gY2Ryb21faW9jdGxfZ2V0X21jbihjZGksIGFyZ3ApOworCWNhc2UgQ0RST01fRFJJVkVfU1RBVFVTOgorCQlyZXR1cm4gY2Ryb21faW9jdGxfZHJpdmVfc3RhdHVzKGNkaSwgYXJnKTsKKwljYXNlIENEUk9NX0RJU0NfU1RBVFVTOgorCQlyZXR1cm4gY2Ryb21faW9jdGxfZGlzY19zdGF0dXMoY2RpKTsKKwljYXNlIENEUk9NX0NIQU5HRVJfTlNMT1RTOgorCQlyZXR1cm4gY2Ryb21faW9jdGxfY2hhbmdlcl9uc2xvdHMoY2RpKTsKKwl9CisKKwkvKgorCSAqIFVzZSB0aGUgaW9jdGxzIHRoYXQgYXJlIGltcGxlbWVudGVkIHRocm91Z2ggdGhlIGdlbmVyaWNfcGFja2V0KCkKKwkgKiBpbnRlcmZhY2UuIHRoaXMgbWF5IGxvb2sgYXQgYml0IGZ1bm55LCBidXQgaWYgLUVOT1RUWSBpcworCSAqIHJldHVybmVkIHRoYXQgcGFydGljdWxhciBpb2N0bCBpcyBub3QgaW1wbGVtZW50ZWQgYW5kIHdlCisJICogbGV0IGl0IGdvIHRocm91Z2ggdGhlIGRldmljZSBzcGVjaWZpYyBvbmVzLgorCSAqLwogCWlmIChDRFJPTV9DQU4oQ0RDX0dFTkVSSUNfUEFDS0VUKSkgewogCQlyZXQgPSBtbWNfaW9jdGwoY2RpLCBjbWQsIGFyZyk7Ci0JCWlmIChyZXQgIT0gLUVOT1RUWSkgeworCQlpZiAocmV0ICE9IC1FTk9UVFkpCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJfQogCi0JLyogbm90ZTogbW9zdCBvZiB0aGUgY2RpbmZvKCkgY2FsbHMgYXJlIGNvbW1lbnRlZCBvdXQgaGVyZSwKLQkgICBiZWNhdXNlIHRoZXkgZmlsbCB1cCB0aGUgc3lzIGxvZyB3aGVuIENEIHBsYXllcnMgcG9sbAotCSAgIHRoZSBkcml2ZS4gKi8KKwkvKgorCSAqIE5vdGU6IG1vc3Qgb2YgdGhlIGNkaW5mbygpIGNhbGxzIGFyZSBjb21tZW50ZWQgb3V0IGhlcmUsCisJICogYmVjYXVzZSB0aGV5IGZpbGwgdXAgdGhlIHN5cyBsb2cgd2hlbiBDRCBwbGF5ZXJzIHBvbGwKKwkgKiB0aGUgZHJpdmUuCisJICovCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIENEUk9NU1VCQ0hOTDogewotCQlzdHJ1Y3QgY2Ryb21fc3ViY2hubCBxOwotCQl1X2NoYXIgcmVxdWVzdGVkLCBiYWNrOwotCQlpZiAoIUNEUk9NX0NBTihDRENfUExBWV9BVURJTykpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJLyogY2RpbmZvKENEX0RPX0lPQ1RMLCJlbnRlcmluZyBDRFJPTVNVQkNITkxcbiIpOyovIAotCQlJT0NUTF9JTihhcmcsIHN0cnVjdCBjZHJvbV9zdWJjaG5sLCBxKTsKLQkJcmVxdWVzdGVkID0gcS5jZHNjX2Zvcm1hdDsKLQkJaWYgKCEoKHJlcXVlc3RlZCA9PSBDRFJPTV9NU0YpIHx8Ci0JCSAgICAgIChyZXF1ZXN0ZWQgPT0gQ0RST01fTEJBKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcS5jZHNjX2Zvcm1hdCA9IENEUk9NX01TRjsKLQkJaWYgKChyZXQ9Y2RvLT5hdWRpb19pb2N0bChjZGksIGNtZCwgJnEpKSkKLQkJCXJldHVybiByZXQ7Ci0JCWJhY2sgPSBxLmNkc2NfZm9ybWF0OyAvKiBsb2NhbCBjb3B5ICovCi0JCXNhbml0aXplX2Zvcm1hdCgmcS5jZHNjX2Fic2FkZHIsICZiYWNrLCByZXF1ZXN0ZWQpOwotCQlzYW5pdGl6ZV9mb3JtYXQoJnEuY2RzY19yZWxhZGRyLCAmcS5jZHNjX2Zvcm1hdCwgcmVxdWVzdGVkKTsKLQkJSU9DVExfT1VUKGFyZywgc3RydWN0IGNkcm9tX3N1YmNobmwsIHEpOwotCQkvKiBjZGluZm8oQ0RfRE9fSU9DVEwsICJDRFJPTVNVQkNITkwgc3VjY2Vzc2Z1bFxuIik7ICovIAotCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgQ0RST01SRUFEVE9DSERSOiB7Ci0JCXN0cnVjdCBjZHJvbV90b2NoZHIgaGVhZGVyOwotCQlpZiAoIUNEUk9NX0NBTihDRENfUExBWV9BVURJTykpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01SRUFEVE9DSERSXG4iKTsgKi8gCi0JCUlPQ1RMX0lOKGFyZywgc3RydWN0IGNkcm9tX3RvY2hkciwgaGVhZGVyKTsKLQkJaWYgKChyZXQ9Y2RvLT5hdWRpb19pb2N0bChjZGksIGNtZCwgJmhlYWRlcikpKQotCQkJcmV0dXJuIHJldDsKLQkJSU9DVExfT1VUKGFyZywgc3RydWN0IGNkcm9tX3RvY2hkciwgaGVhZGVyKTsKLQkJLyogY2RpbmZvKENEX0RPX0lPQ1RMLCAiQ0RST01SRUFEVE9DSERSIHN1Y2Nlc3NmdWxcbiIpOyAqLyAKLQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIENEUk9NUkVBRFRPQ0VOVFJZOiB7Ci0JCXN0cnVjdCBjZHJvbV90b2NlbnRyeSBlbnRyeTsKLQkJdV9jaGFyIHJlcXVlc3RlZF9mb3JtYXQ7Ci0JCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKLQkJCXJldHVybiAtRU5PU1lTOwotCQkvKiBjZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVJFQURUT0NFTlRSWVxuIik7ICovIAotCQlJT0NUTF9JTihhcmcsIHN0cnVjdCBjZHJvbV90b2NlbnRyeSwgZW50cnkpOwotCQlyZXF1ZXN0ZWRfZm9ybWF0ID0gZW50cnkuY2R0ZV9mb3JtYXQ7Ci0JCWlmICghKChyZXF1ZXN0ZWRfZm9ybWF0ID09IENEUk9NX01TRikgfHwgCi0JCQkocmVxdWVzdGVkX2Zvcm1hdCA9PSBDRFJPTV9MQkEpKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJLyogbWFrZSBpbnRlcmZhY2UgdG8gbG93LWxldmVsIHVuaWZvcm0gKi8KLQkJZW50cnkuY2R0ZV9mb3JtYXQgPSBDRFJPTV9NU0Y7Ci0JCWlmICgocmV0PWNkby0+YXVkaW9faW9jdGwoY2RpLCBjbWQsICZlbnRyeSkpKQotCQkJcmV0dXJuIHJldDsKLQkJc2FuaXRpemVfZm9ybWF0KCZlbnRyeS5jZHRlX2FkZHIsCi0JCSZlbnRyeS5jZHRlX2Zvcm1hdCwgcmVxdWVzdGVkX2Zvcm1hdCk7Ci0JCUlPQ1RMX09VVChhcmcsIHN0cnVjdCBjZHJvbV90b2NlbnRyeSwgZW50cnkpOwotCQkvKiBjZGluZm8oQ0RfRE9fSU9DVEwsICJDRFJPTVJFQURUT0NFTlRSWSBzdWNjZXNzZnVsXG4iKTsgKi8gCi0JCXJldHVybiAwOwotCQl9Ci0JY2FzZSBDRFJPTVBMQVlNU0Y6IHsKLQkJc3RydWN0IGNkcm9tX21zZiBtc2Y7Ci0JCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKLQkJCXJldHVybiAtRU5PU1lTOwotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVBMQVlNU0ZcbiIpOyAKLQkJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fbXNmLCBtc2YpOwotCQlyZXR1cm4gY2RvLT5hdWRpb19pb2N0bChjZGksIGNtZCwgJm1zZik7Ci0JCX0KLQljYXNlIENEUk9NUExBWVRSS0lORDogewotCQlzdHJ1Y3QgY2Ryb21fdGkgdGk7Ci0JCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKLQkJCXJldHVybiAtRU5PU1lTOwotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVBMQVlUUktJTkRcbiIpOyAKLQkJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fdGksIHRpKTsKLQkJQ0hFQ0tBVURJTzsKLQkJcmV0dXJuIGNkby0+YXVkaW9faW9jdGwoY2RpLCBjbWQsICZ0aSk7Ci0JCX0KLQljYXNlIENEUk9NVk9MQ1RSTDogewotCQlzdHJ1Y3QgY2Ryb21fdm9sY3RybCB2b2x1bWU7Ci0JCWlmICghQ0RST01fQ0FOKENEQ19QTEFZX0FVRElPKSkKLQkJCXJldHVybiAtRU5PU1lTOwotCQljZGluZm8oQ0RfRE9fSU9DVEwsICJlbnRlcmluZyBDRFJPTVZPTENUUkxcbiIpOyAKLQkJSU9DVExfSU4oYXJnLCBzdHJ1Y3QgY2Ryb21fdm9sY3RybCwgdm9sdW1lKTsKLQkJcmV0dXJuIGNkby0+YXVkaW9faW9jdGwoY2RpLCBjbWQsICZ2b2x1bWUpOwotCQl9Ci0JY2FzZSBDRFJPTVZPTFJFQUQ6IHsKLQkJc3RydWN0IGNkcm9tX3ZvbGN0cmwgdm9sdW1lOwotCQlpZiAoIUNEUk9NX0NBTihDRENfUExBWV9BVURJTykpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZW50ZXJpbmcgQ0RST01WT0xSRUFEXG4iKTsgCi0JCWlmICgocmV0PWNkby0+YXVkaW9faW9jdGwoY2RpLCBjbWQsICZ2b2x1bWUpKSkKLQkJCXJldHVybiByZXQ7Ci0JCUlPQ1RMX09VVChhcmcsIHN0cnVjdCBjZHJvbV92b2xjdHJsLCB2b2x1bWUpOwotCQlyZXR1cm4gMDsKLQkJfQorCWNhc2UgQ0RST01TVUJDSE5MOgorCQlyZXR1cm4gY2Ryb21faW9jdGxfZ2V0X3N1YmNobmwoY2RpLCBhcmdwKTsKKwljYXNlIENEUk9NUkVBRFRPQ0hEUjoKKwkJcmV0dXJuIGNkcm9tX2lvY3RsX3JlYWRfdG9jaGRyKGNkaSwgYXJncCk7CisJY2FzZSBDRFJPTVJFQURUT0NFTlRSWToKKwkJcmV0dXJuIGNkcm9tX2lvY3RsX3JlYWRfdG9jZW50cnkoY2RpLCBhcmdwKTsKKwljYXNlIENEUk9NUExBWU1TRjoKKwkJcmV0dXJuIGNkcm9tX2lvY3RsX3BsYXlfbXNmKGNkaSwgYXJncCk7CisJY2FzZSBDRFJPTVBMQVlUUktJTkQ6CisJCXJldHVybiBjZHJvbV9pb2N0bF9wbGF5X3Rya2luZChjZGksIGFyZ3ApOworCWNhc2UgQ0RST01WT0xDVFJMOgorCQlyZXR1cm4gY2Ryb21faW9jdGxfdm9sY3RybChjZGksIGFyZ3ApOworCWNhc2UgQ0RST01WT0xSRUFEOgorCQlyZXR1cm4gY2Ryb21faW9jdGxfdm9scmVhZChjZGksIGFyZ3ApOwogCWNhc2UgQ0RST01TVEFSVDoKIAljYXNlIENEUk9NU1RPUDoKIAljYXNlIENEUk9NUEFVU0U6Ci0JY2FzZSBDRFJPTVJFU1VNRTogewotCQlpZiAoIUNEUk9NX0NBTihDRENfUExBWV9BVURJTykpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJY2RpbmZvKENEX0RPX0lPQ1RMLCAiZG9pbmcgYXVkaW8gaW9jdGwgKHN0YXJ0L3N0b3AvcGF1c2UvcmVzdW1lKVxuIik7IAotCQlDSEVDS0FVRElPOwotCQlyZXR1cm4gY2RvLT5hdWRpb19pb2N0bChjZGksIGNtZCwgTlVMTCk7Ci0JCX0KLQl9IC8qIHN3aXRjaCAqLworCWNhc2UgQ0RST01SRVNVTUU6CisJCXJldHVybiBjZHJvbV9pb2N0bF9hdWRpb2N0bChjZGksIGNtZCk7CisJfQogCi0JLyogZG8gdGhlIGRldmljZSBzcGVjaWZpYyBpb2N0bHMgKi8KLQlpZiAoQ0RST01fQ0FOKENEQ19JT0NUTFMpKQotCQlyZXR1cm4gY2RvLT5kZXZfaW9jdGwoY2RpLCBjbWQsIGFyZyk7Ci0JCiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2R1MzFhLmMgYi9kcml2ZXJzL2Nkcm9tL2NkdTMxYS5jCmluZGV4IDM3OGU4OGQuLjcyZmZkNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2R1MzFhLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHUzMWEuYwpAQCAtMjY2OCw3ICsyNjY4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IHNjZF9kZXZfaW9jdGwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCitzdGF0aWMgaW50IHNjZF9yZWFkX2F1ZGlvKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwpAQCAtMjg5NCwxMSArMjg5NCwxMCBAQAogCS5nZXRfbWNuCQk9IHNjZF9nZXRfbWNuLAogCS5yZXNldAkJCT0gc2NkX3Jlc2V0LAogCS5hdWRpb19pb2N0bAkJPSBzY2RfYXVkaW9faW9jdGwsCi0JLmRldl9pb2N0bAkJPSBzY2RfZGV2X2lvY3RsLAogCS5jYXBhYmlsaXR5CQk9IENEQ19PUEVOX1RSQVkgfCBDRENfQ0xPU0VfVFJBWSB8IENEQ19MT0NLIHwKIAkJCQkgIENEQ19TRUxFQ1RfU1BFRUQgfCBDRENfTVVMVElfU0VTU0lPTiB8CiAJCQkJICBDRENfTUNOIHwgQ0RDX01FRElBX0NIQU5HRUQgfCBDRENfUExBWV9BVURJTyB8Ci0JCQkJICBDRENfUkVTRVQgfCBDRENfSU9DVExTIHwgQ0RDX0RSSVZFX1NUQVRVUywKKwkJCQkgIENEQ19SRVNFVCB8IENEQ19EUklWRV9TVEFUVVMsCiAJLm5fbWlub3JzCQk9IDEsCiB9OwogCkBAIC0yOTM2LDYgKzI5MzUsOSBAQAogCQljYXNlIENEUk9NQ0xPU0VUUkFZOgogCQkJcmV0dmFsID0gc2NkX3RyYXlfbW92ZSgmc2NkX2luZm8sIDApOwogCQkJYnJlYWs7CisJCWNhc2UgQ0RST01SRUFEQVVESU86CisJCQlyZXR2YWwgPSBzY2RfcmVhZF9hdWRpbygmc2NkX2luZm8sIENEUk9NUkVBREFVRElPLCBhcmcpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR2YWwgPSBjZHJvbV9pb2N0bChmaWxlLCAmc2NkX2luZm8sIGlub2RlLCBjbWQsIGFyZyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jbTIwNi5jIGIvZHJpdmVycy9jZHJvbS9jbTIwNi5jCmluZGV4IGNlMTI3ZjcuLmY0M2E5ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY20yMDYuYworKysgYi9kcml2ZXJzL2Nkcm9tL2NtMjA2LmMKQEAgLTIxOCwxMiArMjE4LDEyIEBACiBzdGF0aWMgaW50IGNtMjA2X2lycSA9IENNMjA2X0lSUTsKICNpZmRlZiBNT0RVTEUKIHN0YXRpYyBpbnQgY20yMDZbMl0gPSB7IDAsIDAgfTsJLyogZm9yIGNvbXBhdGlibGUgYGluc21vZCcgcGFyYW1ldGVyIHBhc3NpbmcgKi8KK21vZHVsZV9wYXJhbV9hcnJheShjbTIwNiwgaW50LCBOVUxMLCAwKTsJLyogYmFzZSxpcnEgb3IgaXJxLGJhc2UgKi8KICNlbmRpZgogCi1NT0RVTEVfUEFSTShjbTIwNl9iYXNlLCAiaSIpOwkvKiBiYXNlICovCi1NT0RVTEVfUEFSTShjbTIwNl9pcnEsICJpIik7CS8qIGlycSAqLwotTU9EVUxFX1BBUk0oY20yMDYsICIxLTJpIik7CS8qIGJhc2UsaXJxIG9yIGlycSxiYXNlICovCi1NT0RVTEVfUEFSTShhdXRvX3Byb2JlLCAiaSIpOwkvKiBhdXRvIHByb2JlIGJhc2UgYW5kIGlycSAqLworbW9kdWxlX3BhcmFtKGNtMjA2X2Jhc2UsIGludCwgMCk7CS8qIGJhc2UgKi8KK21vZHVsZV9wYXJhbShjbTIwNl9pcnEsIGludCwgMCk7CS8qIGlycSAqLworbW9kdWxlX3BhcmFtKGF1dG9fcHJvYmUsIGJvb2wsIDApOwkvKiBhdXRvIHByb2JlIGJhc2UgYW5kIGlycSAqLwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjZGVmaW5lIFBPTExPT1AgMTAwCQkvKiBtaWxsaXNlY29uZHMgKi8KQEAgLTExNTcsMzIgKzExNTcsNiBAQAogCX0KIH0KIAotLyogSW9jdGwuIFRoZXNlIGlvY3RscyBhcmUgc3BlY2lmaWMgdG8gdGhlIGNtMjA2IGRyaXZlci4gSSBoYXZlIG1hZGUKLSAgIHNvbWUgZHJpdmVyIHN0YXRpc3RpY3MgYWNjZXNzaWJsZSB0aHJvdWdoIGlvY3RsIGNhbGxzLgotICovCi0KLXN0YXRpYyBpbnQgY20yMDZfaW9jdGwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIHVuc2lnbmVkIGludCBjbWQsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotI2lmZGVmIFNUQVRJU1RJQ1MKLQljYXNlIENNMjA2Q1RMX0dFVF9TVEFUOgotCQlpZiAoYXJnID49IE5SX1NUQVRTKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UKLQkJCXJldHVybiBjZC0+c3RhdHNbYXJnXTsKLQljYXNlIENNMjA2Q1RMX0dFVF9MQVNUX1NUQVQ6Ci0JCWlmIChhcmcgPj0gTlJfU1RBVFMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZQotCQkJcmV0dXJuIGNkLT5sYXN0X3N0YXRbYXJnXTsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCWRlYnVnKCgiVW5rbm93biBpb2N0bCBjYWxsIDB4JXhcbiIsIGNtZCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgY20yMDZfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwgaW50IGRpc2NfbnIpCiB7CiAJaWYgKGNkICE9IE5VTEwpIHsKQEAgLTEzMjEsMTEgKzEyOTUsMTAgQEAKIAkuZ2V0X21jbgkJPSBjbTIwNl9nZXRfdXBjLAogCS5yZXNldAkJCT0gY20yMDZfcmVzZXQsCiAJLmF1ZGlvX2lvY3RsCQk9IGNtMjA2X2F1ZGlvX2lvY3RsLAotCS5kZXZfaW9jdGwJCT0gY20yMDZfaW9jdGwsCiAJLmNhcGFiaWxpdHkJCT0gQ0RDX0NMT1NFX1RSQVkgfCBDRENfT1BFTl9UUkFZIHwgQ0RDX0xPQ0sgfAogCQkJCSAgQ0RDX01VTFRJX1NFU1NJT04gfCBDRENfTUVESUFfQ0hBTkdFRCB8CiAJCQkJICBDRENfTUNOIHwgQ0RDX1BMQVlfQVVESU8gfCBDRENfU0VMRUNUX1NQRUVEIHwKLQkJCQkgIENEQ19JT0NUTFMgfCBDRENfRFJJVkVfU1RBVFVTLAorCQkJCSAgQ0RDX0RSSVZFX1NUQVRVUywKIAkubl9taW5vcnMJCT0gMSwKIH07CiAKQEAgLTEzNTAsNiArMTMyMywyMSBAQAogc3RhdGljIGludCBjbTIwNl9ibG9ja19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN3aXRjaCAoY21kKSB7CisjaWZkZWYgU1RBVElTVElDUworCWNhc2UgQ00yMDZDVExfR0VUX1NUQVQ6CisJCWlmIChhcmcgPj0gTlJfU1RBVFMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGNkLT5zdGF0c1thcmddOworCWNhc2UgQ00yMDZDVExfR0VUX0xBU1RfU1RBVDoKKwkJaWYgKGFyZyA+PSBOUl9TVEFUUykKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gY2QtPmxhc3Rfc3RhdFthcmddOworI2VuZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCiAJcmV0dXJuIGNkcm9tX2lvY3RsKGZpbGUsICZjbTIwNl9pbmZvLCBpbm9kZSwgY21kLCBhcmcpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3NicGNkLmMgYi9kcml2ZXJzL2Nkcm9tL3NicGNkLmMKaW5kZXggNDY2ZTljMi4uMDVjOWU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9zYnBjZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vc2JwY2QuYwpAQCAtNDY0LDggKzQ2NCwxMyBAQAogc3RhdGljICBfX2NhY2hlbGluZV9hbGlnbmVkIERFRklORV9TUElOTE9DSyhzYnBjZF9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqc2JwY2RfcXVldWU7CiAKLU1PRFVMRV9QQVJNKHNicGNkLCAiMmkiKTsKLU1PRFVMRV9QQVJNKG1heF9kcml2ZXMsICJpIik7CisvKiBZb3UgY2FuIG9ubHkgc2V0IHRoZSBmaXJzdCBwYWlyLCBmcm9tIG9sZCBNT0RVTEVfUEFSTSBjb2RlLiAgKi8KK3N0YXRpYyBpbnQgc2JwY2Rfc2V0KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJZ2V0X29wdGlvbnMoKGNoYXIgKil2YWwsIDIsIChpbnQgKilzYnBjZCk7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfcGFyYW1fY2FsbChzYnBjZCwgc2JwY2Rfc2V0LCBOVUxMLCBOVUxMLCAwKTsKIAogI2RlZmluZSBOVU1fUFJPQkUgIChzaXplb2Yoc2JwY2QpIC8gc2l6ZW9mKGludCkpCiAKQEAgLTU1Myw2ICs1NTgsNyBAQAogc3RhdGljIGNoYXIgbXNnYnVmWzgwXTsKIAogc3RhdGljIGludCBtYXhfZHJpdmVzID0gTUFYX0RSSVZFUzsKK21vZHVsZV9wYXJhbShtYXhfZHJpdmVzLCBpbnQsIDApOwogI2lmbmRlZiBNT0RVTEUKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNldHVwX2RvbmU7CiBzdGF0aWMgY29uc3QgY2hhciAqc3RyX3NiX2wgPSAic291bmRibGFzdGVyIjsKQEAgLTQxNjAsMTcgKzQxNjYsODk3IEBACiAJcmV0dXJuICAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyoKLSAqIGlvY3RsIHN1cHBvcnQKLSAqLwotc3RhdGljIGludCBzYnBjZF9kZXZfaW9jdGwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIHVfaW50IGNtZCwKLQkJICAgICAgdV9sb25nIGFyZykKK3N0YXRpYyBpbnQgc2JwY2RfYXVkaW9faW9jdGwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIHVfaW50IGNtZCwKKwkJICAgICAgIHZvaWQgKiBhcmcpCiB7CiAJc3RydWN0IHNicGNkX2RyaXZlICpwID0gY2RpLT5oYW5kbGU7Ci0JaW50IGk7CisJaW50IGksIHN0LCBqOwogCQorCW1zZyhEQkdfSU8yLCJpb2N0bCglcywgMHglMDhsWCwgMHglMDhwKVxuIiwgY2RpLT5uYW1lLCBjbWQsIGFyZyk7CisJaWYgKHAtPmRydl9pZD09LTEpIHsKKwkJbXNnKERCR19JTkYsICJpb2N0bDogYmFkIGRldmljZTogJXNcbiIsIGNkaS0+bmFtZSk7CisJCXJldHVybiAoLUVOWElPKTsgICAgICAgICAgICAgLyogbm8gc3VjaCBkcml2ZSAqLworCX0KKwlkb3duKCZpb2N0bF9yZWFkX3NlbSk7CisJaWYgKHAgIT0gY3VycmVudF9kcml2ZSkKKwkJc3dpdGNoX2RyaXZlKHApOworCQorCW1zZyhEQkdfSU8yLCJpb2N0bDogZGV2aWNlICVzLCByZXF1ZXN0ICUwNFhcbiIsY2RpLT5uYW1lLGNtZCk7CisJc3dpdGNoIChjbWQpIAkJLyogU3VuLWNvbXBhdGlibGUgKi8KKwl7CisJCQorCWNhc2UgQ0RST01QQVVTRTogICAgIC8qIFBhdXNlIHRoZSBkcml2ZSAqLworCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NUEFVU0UgZW50ZXJlZC5cbiIpOworCQkvKiBwYXVzZSB0aGUgZHJpdmUgdW5pdCB3aGVuIGl0IGlzIGN1cnJlbnRseSBpbiBQTEFZIG1vZGUsICAgICAgICAgKi8KKwkJLyogb3IgcmVzZXQgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgbG9jYXRpb25zIHdoZW4gaW4gUEFVU0VEIG1vZGUuICovCisJCS8qIElmIGFwcGxpY2FibGUsIGF0IHRoZSBuZXh0IHN0b3BwaW5nIHBvaW50IGl0IHJlYWNoZXMgICAgICAgICAgICAqLworCQkvKiB0aGUgZHJpdmUgd2lsbCBkaXNjb250aW51ZSBwbGF5aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJc3dpdGNoIChjdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZSkKKwkJeworCQljYXNlIGF1ZGlvX3BsYXlpbmc6CisJCQlpZiAoZmFtTF9kcml2ZSkgaT1jY19SZWFkU3ViUSgpOworCQkJZWxzZSBpPWNjX1BhdXNlX1Jlc3VtZSgxKTsKKwkJCWlmIChpPDApIFJFVFVSTl9VUCgtRUlPKTsKKwkJCWlmIChmYW1MX2RyaXZlKSBpPWNjX1BhdXNlX1Jlc3VtZSgxKTsKKwkJCWVsc2UgaT1jY19SZWFkU3ViUSgpOworCQkJaWYgKGk8MCkgUkVUVVJOX1VQKC1FSU8pOworCQkJY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0PWN1cnJlbnRfZHJpdmUtPlN1YlFfcnVuX3RvdDsKKwkJCWN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPWF1ZGlvX3BhdXNpbmc7CisJCQlSRVRVUk5fVVAoMCk7CisJCWNhc2UgYXVkaW9fcGF1c2luZzoKKwkJCWk9Y2NfU2VlayhjdXJyZW50X2RyaXZlLT5wb3NfYXVkaW9fc3RhcnQsMSk7CisJCQlpZiAoaTwwKSBSRVRVUk5fVVAoLUVJTyk7CisJCQlSRVRVUk5fVVAoMCk7CisJCWRlZmF1bHQ6CisJCQlSRVRVUk5fVVAoLUVJTlZBTCk7CisJCX0KKworCWNhc2UgQ0RST01SRVNVTUU6IC8qIHJlc3VtZSBwYXVzZWQgYXVkaW8gcGxheSAqLworCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NUkVTVU1FIGVudGVyZWQuXG4iKTsKKwkJLyogcmVzdW1lIHBsYXlpbmcgYXVkaW8gdHJhY2tzIHdoZW4gYSBwcmV2aW91cyBQTEFZIEFVRElPIGNhbGwgaGFzICAqLworCQkvKiBiZWVuIHBhdXNlZCB3aXRoIGEgUEFVU0UgY29tbWFuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qIEl0IHdpbGwgcmVzdW1lIHBsYXlpbmcgZnJvbSB0aGUgbG9jYXRpb24gc2F2ZWQgaW4gU3ViUV9ydW5fdG90LiAgKi8KKwkJaWYgKGN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlIT1hdWRpb19wYXVzaW5nKSBSRVRVUk5fVVAoLUVJTlZBTCk7CisJCWlmIChmYW1MX2RyaXZlKQorCQkJaT1jY19QbGF5QXVkaW8oY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0LAorCQkJCSAgICAgICBjdXJyZW50X2RyaXZlLT5wb3NfYXVkaW9fZW5kKTsKKwkJZWxzZSBpPWNjX1BhdXNlX1Jlc3VtZSgzKTsKKwkJaWYgKGk8MCkgUkVUVVJOX1VQKC1FSU8pOworCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT1hdWRpb19wbGF5aW5nOworCQlSRVRVUk5fVVAoMCk7CisKKwljYXNlIENEUk9NUExBWU1TRjoKKwkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVBMQVlNU0YgZW50ZXJlZC5cbiIpOworI2lmZGVmIFNBRkVfTUlYRUQKKwkJaWYgKGN1cnJlbnRfZHJpdmUtPmhhc19kYXRhPjEpIFJFVFVSTl9VUCgtRUJVU1kpOworI2VuZGlmIC8qIFNBRkVfTUlYRUQgKi8KKwkJaWYgKGN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPT1hdWRpb19wbGF5aW5nKQorCQl7CisJCQlpPWNjX1BhdXNlX1Jlc3VtZSgxKTsKKwkJCWlmIChpPDApIFJFVFVSTl9VUCgtRUlPKTsKKwkJCWk9Y2NfUmVhZFN1YlEoKTsKKwkJCWlmIChpPDApIFJFVFVSTl9VUCgtRUlPKTsKKwkJCWN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19zdGFydD1jdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90b3Q7CisJCQlpPWNjX1NlZWsoY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0LDEpOworCQl9CisJCW1lbWNweSgmbXNmLCAodm9pZCAqKSBhcmcsIHNpemVvZihzdHJ1Y3QgY2Ryb21fbXNmKSk7CisJCS8qIHZhbHVlcyBjb21lIGFzIG1zZi1iaW4gKi8KKwkJY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0ID0gKG1zZi5jZG1zZl9taW4wPDwxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgKG1zZi5jZG1zZl9zZWMwPDw4KSB8CisJCQkJbXNmLmNkbXNmX2ZyYW1lMDsKKwkJY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX2VuZCA9IChtc2YuY2Rtc2ZfbWluMTw8MTYpIHwKKwkJCShtc2YuY2Rtc2Zfc2VjMTw8OCkgfAorCQkJCW1zZi5jZG1zZl9mcmFtZTE7CisJCW1zZyhEQkdfSU9YLCJpb2N0bDogQ0RST01QTEFZTVNGICUwOFggJTA4WFxuIiwKKwkJICAgIGN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19zdGFydCxjdXJyZW50X2RyaXZlLT5wb3NfYXVkaW9fZW5kKTsKKwkJaT1jY19QbGF5QXVkaW8oY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0LGN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19lbmQpOworCQlpZiAoaTwwKQorCQl7CisJCQltc2coREJHX0lORiwiaW9jdGw6IGNjX1BsYXlBdWRpbyByZXR1cm5zICVkXG4iLGkpOworCQkJRHJpdmVSZXNldCgpOworCQkJY3VycmVudF9kcml2ZS0+YXVkaW9fc3RhdGU9MDsKKwkJCVJFVFVSTl9VUCgtRUlPKTsKKwkJfQorCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT1hdWRpb19wbGF5aW5nOworCQlSRVRVUk5fVVAoMCk7CisJCQorCWNhc2UgQ0RST01QTEFZVFJLSU5EOiAvKiBQbGF5IGEgdHJhY2suICBUaGlzIGN1cnJlbnRseSBpZ25vcmVzIGluZGV4LiAqLworCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NUExBWVRSS0lORCBlbnRlcmVkLlxuIik7CisjaWZkZWYgU0FGRV9NSVhFRAorCQlpZiAoY3VycmVudF9kcml2ZS0+aGFzX2RhdGE+MSkgUkVUVVJOX1VQKC1FQlVTWSk7CisjZW5kaWYgLyogU0FGRV9NSVhFRCAqLworCQlpZiAoY3VycmVudF9kcml2ZS0+YXVkaW9fc3RhdGU9PWF1ZGlvX3BsYXlpbmcpCisJCXsKKwkJCW1zZyhEQkdfSU9YLCJDRFJPTVBMQVlUUktJTkQ6IGFscmVhZHkgYXVkaW9fcGxheWluZy5cbiIpOworI2lmIDEKKwkJCVJFVFVSTl9VUCgwKTsgLyoganVzdCBsZXQgdXMgcGxheSBvbiAqLworI2Vsc2UKKwkJCVJFVFVSTl9VUCgtRUlOVkFMKTsgLyogcGxheSBvbiwgYnV0IHNheSAiZXJyb3IiICovCisjZW5kaWYKKwkJfQorCQltZW1jcHkoJnRpLCh2b2lkICopIGFyZyxzaXplb2Yoc3RydWN0IGNkcm9tX3RpKSk7CisJCW1zZyhEQkdfSU9YLCJpb2N0bDogdHJrMDogJWQsIGluZDA6ICVkLCB0cmsxOiVkLCBpbmQxOiVkXG4iLAorCQkgICAgdGkuY2R0aV90cmswLHRpLmNkdGlfaW5kMCx0aS5jZHRpX3RyazEsdGkuY2R0aV9pbmQxKTsKKwkJaWYgKHRpLmNkdGlfdHJrMDxjdXJyZW50X2RyaXZlLT5uX2ZpcnN0X3RyYWNrKSBSRVRVUk5fVVAoLUVJTlZBTCk7CisJCWlmICh0aS5jZHRpX3RyazA+Y3VycmVudF9kcml2ZS0+bl9sYXN0X3RyYWNrKSBSRVRVUk5fVVAoLUVJTlZBTCk7CisJCWlmICh0aS5jZHRpX3RyazE8dGkuY2R0aV90cmswKSB0aS5jZHRpX3RyazE9dGkuY2R0aV90cmswOworCQlpZiAodGkuY2R0aV90cmsxPmN1cnJlbnRfZHJpdmUtPm5fbGFzdF90cmFjaykgdGkuY2R0aV90cmsxPWN1cnJlbnRfZHJpdmUtPm5fbGFzdF90cmFjazsKKwkJY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0PWN1cnJlbnRfZHJpdmUtPlRvY0J1ZmZlclt0aS5jZHRpX3RyazBdLmFkZHJlc3M7CisJCWN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19lbmQ9Y3VycmVudF9kcml2ZS0+VG9jQnVmZmVyW3RpLmNkdGlfdHJrMSsxXS5hZGRyZXNzOworCQlpPWNjX1BsYXlBdWRpbyhjdXJyZW50X2RyaXZlLT5wb3NfYXVkaW9fc3RhcnQsY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX2VuZCk7CisJCWlmIChpPDApCisJCXsKKwkJCW1zZyhEQkdfSU5GLCJpb2N0bDogY2NfUGxheUF1ZGlvIHJldHVybnMgJWRcbiIsaSk7CisJCQlEcml2ZVJlc2V0KCk7CisJCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT0wOworCQkJUkVUVVJOX1VQKC1FSU8pOworCQl9CisJCWN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPWF1ZGlvX3BsYXlpbmc7CisJCVJFVFVSTl9VUCgwKTsKKwkJCisJY2FzZSBDRFJPTVJFQURUT0NIRFI6ICAgICAgICAvKiBSZWFkIHRoZSB0YWJsZSBvZiBjb250ZW50cyBoZWFkZXIgKi8KKwkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVJFQURUT0NIRFIgZW50ZXJlZC5cbiIpOworCQl0b2NoZHIuY2R0aF90cmswPWN1cnJlbnRfZHJpdmUtPm5fZmlyc3RfdHJhY2s7CisJCXRvY2hkci5jZHRoX3RyazE9Y3VycmVudF9kcml2ZS0+bl9sYXN0X3RyYWNrOworCQltZW1jcHkoKHZvaWQgKikgYXJnLCAmdG9jaGRyLCBzaXplb2Yoc3RydWN0IGNkcm9tX3RvY2hkcikpOworCQlSRVRVUk5fVVAoMCk7CisJCQorCWNhc2UgQ0RST01SRUFEVE9DRU5UUlk6ICAgICAgLyogUmVhZCBhbiBlbnRyeSBpbiB0aGUgdGFibGUgb2YgY29udGVudHMgKi8KKwkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVJFQURUT0NFTlRSWSBlbnRlcmVkLlxuIik7CisJCW1lbWNweSgmdG9jZW50cnksICh2b2lkICopIGFyZywgc2l6ZW9mKHN0cnVjdCBjZHJvbV90b2NlbnRyeSkpOworCQlpPXRvY2VudHJ5LmNkdGVfdHJhY2s7CisJCWlmIChpPT1DRFJPTV9MRUFET1VUKSBpPWN1cnJlbnRfZHJpdmUtPm5fbGFzdF90cmFjaysxOworCQllbHNlIGlmIChpPGN1cnJlbnRfZHJpdmUtPm5fZmlyc3RfdHJhY2t8fGk+Y3VycmVudF9kcml2ZS0+bl9sYXN0X3RyYWNrKQorICAgICAgICAgICAgICAgICAgUkVUVVJOX1VQKC1FSU5WQUwpOworCQl0b2NlbnRyeS5jZHRlX2Fkcj1jdXJyZW50X2RyaXZlLT5Ub2NCdWZmZXJbaV0uY3RsX2FkciYweDBGOworCQl0b2NlbnRyeS5jZHRlX2N0cmw9KGN1cnJlbnRfZHJpdmUtPlRvY0J1ZmZlcltpXS5jdGxfYWRyPj40KSYweDBGOworCQl0b2NlbnRyeS5jZHRlX2RhdGFtb2RlPWN1cnJlbnRfZHJpdmUtPlRvY0J1ZmZlcltpXS5mb3JtYXQ7CisJCWlmICh0b2NlbnRyeS5jZHRlX2Zvcm1hdD09Q0RST01fTVNGKSAvKiBNU0YtYmluIHJlcXVpcmVkICovCisJCXsKKwkJCXRvY2VudHJ5LmNkdGVfYWRkci5tc2YubWludXRlPShjdXJyZW50X2RyaXZlLT5Ub2NCdWZmZXJbaV0uYWRkcmVzcz4+MTYpJjB4MDBGRjsKKwkJCXRvY2VudHJ5LmNkdGVfYWRkci5tc2Yuc2Vjb25kPShjdXJyZW50X2RyaXZlLT5Ub2NCdWZmZXJbaV0uYWRkcmVzcz4+OCkmMHgwMEZGOworCQkJdG9jZW50cnkuY2R0ZV9hZGRyLm1zZi5mcmFtZT1jdXJyZW50X2RyaXZlLT5Ub2NCdWZmZXJbaV0uYWRkcmVzcyYweDAwRkY7CisJCX0KKwkJZWxzZSBpZiAodG9jZW50cnkuY2R0ZV9mb3JtYXQ9PUNEUk9NX0xCQSkgLyogYmxrIHJlcXVpcmVkICovCisJCQl0b2NlbnRyeS5jZHRlX2FkZHIubGJhPW1zZjJibGsoY3VycmVudF9kcml2ZS0+VG9jQnVmZmVyW2ldLmFkZHJlc3MpOworCQllbHNlIFJFVFVSTl9VUCgtRUlOVkFMKTsKKwkJbWVtY3B5KCh2b2lkICopIGFyZywgJnRvY2VudHJ5LCBzaXplb2Yoc3RydWN0IGNkcm9tX3RvY2VudHJ5KSk7CisJCVJFVFVSTl9VUCgwKTsKKwkJCisJY2FzZSBDRFJPTVNUT1A6ICAgICAgLyogU3BpbiBkb3duIHRoZSBkcml2ZSAqLworCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NU1RPUCBlbnRlcmVkLlxuIik7CisjaWZkZWYgU0FGRV9NSVhFRAorCQlpZiAoY3VycmVudF9kcml2ZS0+aGFzX2RhdGE+MSkgUkVUVVJOX1VQKC1FQlVTWSk7CisjZW5kaWYgLyogU0FGRV9NSVhFRCAqLyAKKwkJaT1jY19QYXVzZV9SZXN1bWUoMSk7CisJCWN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPTA7CisjaWYgMAorCQljY19Ecml2ZVJlc2V0KCk7CisjZW5kaWYKKwkJUkVUVVJOX1VQKGkpOworCisJY2FzZSBDRFJPTVNUQVJUOiAgLyogU3BpbiB1cCB0aGUgZHJpdmUgKi8KKwkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVNUQVJUIGVudGVyZWQuXG4iKTsKKwkJY2NfU3BpblVwKCk7CisJCWN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPTA7CisJCVJFVFVSTl9VUCgwKTsKKworCWNhc2UgQ0RST01WT0xDVFJMOiAgIC8qIFZvbHVtZSBjb250cm9sICovCisJCW1zZyhEQkdfSU9DLCJpb2N0bDogQ0RST01WT0xDVFJMIGVudGVyZWQuXG4iKTsKKwkJbWVtY3B5KCZ2b2xjdHJsLChjaGFyICopIGFyZyxzaXplb2Yodm9sY3RybCkpOworCQljdXJyZW50X2RyaXZlLT52b2xfY2hhbjA9MDsKKwkJY3VycmVudF9kcml2ZS0+dm9sX2N0cmwwPXZvbGN0cmwuY2hhbm5lbDA7CisJCWN1cnJlbnRfZHJpdmUtPnZvbF9jaGFuMT0xOworCQljdXJyZW50X2RyaXZlLT52b2xfY3RybDE9dm9sY3RybC5jaGFubmVsMTsKKwkJaT1jY19TZXRWb2x1bWUoKTsKKwkJUkVUVVJOX1VQKDApOworCisJY2FzZSBDRFJPTVZPTFJFQUQ6ICAgLyogcmVhZCBWb2x1bWUgc2V0dGluZ3MgZnJvbSBkcml2ZSAqLworCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NVk9MUkVBRCBlbnRlcmVkLlxuIik7CisJCXN0PWNjX0dldFZvbHVtZSgpOworCQlpZiAoc3Q8MCkgUkVUVVJOX1VQKHN0KTsKKwkJdm9sY3RybC5jaGFubmVsMD1jdXJyZW50X2RyaXZlLT52b2xfY3RybDA7CisJCXZvbGN0cmwuY2hhbm5lbDE9Y3VycmVudF9kcml2ZS0+dm9sX2N0cmwxOworCQl2b2xjdHJsLmNoYW5uZWwyPTA7CisJCXZvbGN0cmwuY2hhbm5lbDI9MDsKKwkJbWVtY3B5KCh2b2lkICopYXJnLCZ2b2xjdHJsLHNpemVvZih2b2xjdHJsKSk7CisJCVJFVFVSTl9VUCgwKTsKKworCWNhc2UgQ0RST01TVUJDSE5MOiAgIC8qIEdldCBzdWJjaGFubmVsIGluZm8gKi8KKwkJbXNnKERCR19JT1MsImlvY3RsOiBDRFJPTVNVQkNITkwgZW50ZXJlZC5cbiIpOworCQkvKiBCb2d1cywgSSBjYW4gZG8gYmV0dGVyIHRoYW4gdGhpcyEgLS1BSksKKwkJaWYgKChzdF9zcGlubmluZyl8fCghc3VicV92YWxpZCkpIHsKKwkJCWk9Y2NfUmVhZFN1YlEoKTsKKwkJCWlmIChpPDApIFJFVFVSTl9VUCgtRUlPKTsKKwkJfQorCQkqLworCQlpPWNjX1JlYWRTdWJRKCk7CisJCWlmIChpPDApIHsKKwkJCWo9Y2NfUmVhZEVycm9yKCk7IC8qIGNsZWFyIG91dCBlcnJvciBzdGF0dXMgZnJvbSBkcml2ZSAqLworCQkJY3VycmVudF9kcml2ZS0+YXVkaW9fc3RhdGU9Q0RST01fQVVESU9fTk9fU1RBVFVTOworCQkJLyogZ2V0IGFuZCBzZXQgdGhlIGRpc2sgc3RhdGUgaGVyZSwKKwkJCXByb2JhYmx5IG5vdCB0aGUgcmlnaHQgcGxhY2UsIGJ1dCB3aG8gY2FyZXMhCisJCQlJdCBtYWtlcyBpdCB3b3JrIHByb3Blcmx5ISAtLUFKSyAqLworCQkJaWYgKGN1cnJlbnRfZHJpdmUtPkNEX2NoYW5nZWQ9PTB4RkYpIHsKKwkJCQltc2coREJHXzAwMCwiRGlzayBjaGFuZ2VkIGRldGVjdFxuIik7CisJCQkJY3VycmVudF9kcml2ZS0+ZGlza3N0YXRlX2ZsYWdzICY9IH5jZF9zaXplX2JpdDsKKwkJCX0KKwkJCVJFVFVSTl9VUCgtRUlPKTsKKwkJfQorCQlpZiAoY3VycmVudF9kcml2ZS0+Q0RfY2hhbmdlZD09MHhGRikgeworCQkJLyogcmVyZWFkIHRoZSBUT0MgYmVjYXVzZSB0aGUgZGlzayBoYXMgY2hhbmdlZCEgLS1BSksgKi8KKwkJCW1zZyhEQkdfMDAwLCJEaXNrIGNoYW5nZWQgU1RJTEwgZGV0ZWN0ZWQsIHJlcmVhZGluZyBUT0MhXG4iKTsKKwkJCWk9RGlza0luZm8oKTsKKwkJCWlmKGk9PTApIHsKKwkJCQljdXJyZW50X2RyaXZlLT5DRF9jaGFuZ2VkPTB4MDA7IC8qIGNkIGhhcyBjaGFuZ2VkLCBwcm9jZWRlLCAqLworCQkJCVJFVFVSTl9VUCgtRUlPKTsgLyogYW5kIGdldCBUT0MsIGV0YyBvbiBuZXh0IHRyeSEgLS1BSksgKi8KKwkJCX0gZWxzZSB7CisJCQkJUkVUVVJOX1VQKC1FSU8pOyAvKiB3ZSB3ZXJlbid0IHJlYWR5IHlldCEgLS1BSksgKi8KKwkJCX0KKwkJfQorCQltZW1jcHkoJlNDLCAodm9pZCAqKSBhcmcsIHNpemVvZihzdHJ1Y3QgY2Ryb21fc3ViY2hubCkpOworCQkvKgorCQkJVGhpcyB2aXJ0dWFsIGNyYXAgaXMgdmVyeSBib2d1cyEKKwkJCUl0IGRvZXNuJ3QgZGV0ZWN0IHdoZW4gdGhlIGNkIGlzIGRvbmUgcGxheWluZyBhdWRpbyEKKwkJCUxldHMgZG8gdGhpcyByaWdodCB3aXRoIHByb3BlciBoYXJkd2FyZSByZWdpc3RlciByZWFkaW5nIQorCQkqLworCQljY19SZWFkU3RhdHVzKCk7CisJCWk9UmVzcG9uc2VTdGF0dXMoKTsKKwkJbXNnKERCR18wMDAsIkRyaXZlIFN0YXR1czogZG9vcl9sb2NrZWQgPSVkLlxuIiwgc3RfZG9vcl9sb2NrZWQpOworCQltc2coREJHXzAwMCwiRHJpdmUgU3RhdHVzOiBkb29yX2Nsb3NlZCA9JWQuXG4iLCBzdF9kb29yX2Nsb3NlZCk7CisJCW1zZyhEQkdfMDAwLCJEcml2ZSBTdGF0dXM6IGNhZGR5X2luID0lZC5cbiIsIHN0X2NhZGR5X2luKTsKKwkJbXNnKERCR18wMDAsIkRyaXZlIFN0YXR1czogZGlza19vayA9JWQuXG4iLCBzdF9kaXNrb2spOworCQltc2coREJHXzAwMCwiRHJpdmUgU3RhdHVzOiBzcGlubmluZyA9JWQuXG4iLCBzdF9zcGlubmluZyk7CisJCW1zZyhEQkdfMDAwLCJEcml2ZSBTdGF0dXM6IGJ1c3kgPSVkLlxuIiwgc3RfYnVzeSk7CisJCS8qIHN0X2J1c3kgaW5kaWNhdGVzIGlmIGl0J3MgX0FDVFVBTExZXyBwbGF5aW5nIGF1ZGlvICovCisJCXN3aXRjaCAoY3VycmVudF9kcml2ZS0+YXVkaW9fc3RhdGUpCisJCXsKKwkJY2FzZSBhdWRpb19wbGF5aW5nOgorCQkJaWYoc3RfYnVzeT09MCkgeworCQkJCS8qIENEIGhhcyBzdG9wcGVkIHBsYXlpbmcgYXVkaW8gLS1BSksgKi8KKwkJCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT1hdWRpb19jb21wbGV0ZWQ7CisJCQkJU0MuY2RzY19hdWRpb3N0YXR1cz1DRFJPTV9BVURJT19DT01QTEVURUQ7CisJCQl9IGVsc2UgeworCQkJCVNDLmNkc2NfYXVkaW9zdGF0dXM9Q0RST01fQVVESU9fUExBWTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIGF1ZGlvX3BhdXNpbmc6CisJCQlTQy5jZHNjX2F1ZGlvc3RhdHVzPUNEUk9NX0FVRElPX1BBVVNFRDsKKwkJCWJyZWFrOworCQljYXNlIGF1ZGlvX2NvbXBsZXRlZDoKKwkJCVNDLmNkc2NfYXVkaW9zdGF0dXM9Q0RST01fQVVESU9fQ09NUExFVEVEOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlTQy5jZHNjX2F1ZGlvc3RhdHVzPUNEUk9NX0FVRElPX05PX1NUQVRVUzsKKwkJCWJyZWFrOworCQl9CisJCVNDLmNkc2NfYWRyPWN1cnJlbnRfZHJpdmUtPlN1YlFfY3RsX2FkcjsKKwkJU0MuY2RzY19jdHJsPWN1cnJlbnRfZHJpdmUtPlN1YlFfY3RsX2Fkcj4+NDsKKwkJU0MuY2RzY190cms9YmNkMmJpbihjdXJyZW50X2RyaXZlLT5TdWJRX3Ryayk7CisJCVNDLmNkc2NfaW5kPWJjZDJiaW4oY3VycmVudF9kcml2ZS0+U3ViUV9wbnRfaWR4KTsKKwkJaWYgKFNDLmNkc2NfZm9ybWF0PT1DRFJPTV9MQkEpCisJCXsKKwkJCVNDLmNkc2NfYWJzYWRkci5sYmE9bXNmMmJsayhjdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90b3QpOworCQkJU0MuY2RzY19yZWxhZGRyLmxiYT1tc2YyYmxrKGN1cnJlbnRfZHJpdmUtPlN1YlFfcnVuX3Ryayk7CisJCX0KKwkJZWxzZSAvKiBub3Qgb25seSBpZiAoU0MuY2RzY19mb3JtYXQ9PUNEUk9NX01TRikgKi8KKwkJeworCQkJU0MuY2RzY19hYnNhZGRyLm1zZi5taW51dGU9KGN1cnJlbnRfZHJpdmUtPlN1YlFfcnVuX3RvdD4+MTYpJjB4MDBGRjsKKwkJCVNDLmNkc2NfYWJzYWRkci5tc2Yuc2Vjb25kPShjdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90b3Q+PjgpJjB4MDBGRjsKKwkJCVNDLmNkc2NfYWJzYWRkci5tc2YuZnJhbWU9Y3VycmVudF9kcml2ZS0+U3ViUV9ydW5fdG90JjB4MDBGRjsKKwkJCVNDLmNkc2NfcmVsYWRkci5tc2YubWludXRlPShjdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90cms+PjE2KSYweDAwRkY7CisJCQlTQy5jZHNjX3JlbGFkZHIubXNmLnNlY29uZD0oY3VycmVudF9kcml2ZS0+U3ViUV9ydW5fdHJrPj44KSYweDAwRkY7CisJCQlTQy5jZHNjX3JlbGFkZHIubXNmLmZyYW1lPWN1cnJlbnRfZHJpdmUtPlN1YlFfcnVuX3RyayYweDAwRkY7CisJCX0KKwkJbWVtY3B5KCh2b2lkICopIGFyZywgJlNDLCBzaXplb2Yoc3RydWN0IGNkcm9tX3N1YmNobmwpKTsKKwkJbXNnKERCR19JT1MsIkNEUk9NU1VCQ0hOTDogJTFYICUwMlggJTA4WCAlMDhYICUwMlggJTAyWCAlMDZYICUwNlhcbiIsCisJCSAgICBTQy5jZHNjX2Zvcm1hdCxTQy5jZHNjX2F1ZGlvc3RhdHVzLAorCQkgICAgU0MuY2RzY19hZHIsU0MuY2RzY19jdHJsLAorCQkgICAgU0MuY2RzY190cmssU0MuY2RzY19pbmQsCisJCSAgICBTQy5jZHNjX2Fic2FkZHIsU0MuY2RzY19yZWxhZGRyKTsKKwkJUkVUVVJOX1VQKDApOworCisJZGVmYXVsdDoKKwkJbXNnKERCR19JT0MsImlvY3RsOiB1bmtub3duIGZ1bmN0aW9uIHJlcXVlc3QgJTA0WFxuIiwgY21kKTsKKwkJUkVUVVJOX1VQKC1FSU5WQUwpOworCX0gLyogZW5kIHN3aXRjaChjbWQpICovCit9CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qCisgKiAgVGFrZSBjYXJlIG9mIHRoZSBkaWZmZXJlbnQgYmxvY2sgc2l6ZXMgYmV0d2VlbiBjZHJvbSBhbmQgTGludXguCisgKi8KK3N0YXRpYyB2b2lkIHNicF90cmFuc2ZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCWxvbmcgb2ZmczsKKworCXdoaWxlICggKHJlcS0+bnJfc2VjdG9ycyA+IDApICYmCisJICAgICAgIChyZXEtPnNlY3Rvci80ID49IGN1cnJlbnRfZHJpdmUtPnNicF9maXJzdF9mcmFtZSkgJiYKKwkgICAgICAgKHJlcS0+c2VjdG9yLzQgPD0gY3VycmVudF9kcml2ZS0+c2JwX2xhc3RfZnJhbWUpICkKKwl7CisJCW9mZnMgPSAocmVxLT5zZWN0b3IgLSBjdXJyZW50X2RyaXZlLT5zYnBfZmlyc3RfZnJhbWUgKiA0KSAqIDUxMjsKKwkJbWVtY3B5KHJlcS0+YnVmZmVyLCBjdXJyZW50X2RyaXZlLT5zYnBfYnVmICsgb2ZmcywgNTEyKTsKKwkJcmVxLT5ucl9zZWN0b3JzLS07CisJCXJlcS0+c2VjdG9yKys7CisJCXJlcS0+YnVmZmVyICs9IDUxMjsKKwl9Cit9CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qCisgKiAgc3BlY2lhbCBlbmRfcmVxdWVzdCBmb3Igc2JwY2QgdG8gc29sdmUgQ1VSUkVOVD09TlVMTCBidWcuIChHVEwpCisgKiAgR1RMID0gR29uemFsbyBUb3JuYXJpYSA8dG9ybmFyaWFAY21hdC5lZHUudXk+CisgKgorICogIFRoaXMgaXMgYSBrbHVkZ2Ugc28gd2UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgZW5kX3JlcXVlc3QuCisgKiAgV2UgcHV0IHRoZSByZXEgd2UgdGFrZSBvdXQgYWZ0ZXIgSU5JVF9SRVFVRVNUIGluIHRoZSByZXF1ZXN0cyBsaXN0LAorICogIHNvIHRoYXQgZW5kX3JlcXVlc3Qgd2lsbCBkaXNjYXJkIGl0LgorICoKKyAqICBUaGUgYnVnIGNvdWxkIGJlIHByZXNlbnQgaW4gb3RoZXIgYmxvY2sgZGV2aWNlcywgcGVyaGFwcyB3ZQorICogIHNob3VsZCBtb2RpZnkgSU5JVF9SRVFVRVNUIGFuZCBlbmRfcmVxdWVzdCBpbnN0ZWFkLCBhbmQKKyAqICBjaGFuZ2UgZXZlcnkgYmxvY2sgZGV2aWNlLi4KKyAqCisgKiAgQ291bGQgYmUgYSByYWNlIGhlcmU/PyBDb3VsZCBlLmcuIGEgdGltZXIgaW50ZXJydXB0IHNjaGVkdWxlKCkgdXM/CisgKiAgSWYgc28sIHdlIHNob3VsZCBjb3B5IGVuZF9yZXF1ZXN0IGhlcmUsIGFuZCBkbyBpdCByaWdodC4uIChvcgorICogIG1vZGlmeSBlbmRfcmVxdWVzdCBhbmQgdGhlIGJsb2NrIGRldmljZXMpLgorICoKKyAqICBJbiBhbnkgY2FzZSwgdGhlIHJhY2UgaGVyZSB3b3VsZCBiZSBtdWNoIHNtYWxsIHRoYW4gaXQgd2FzLCBhbmQKKyAqICBJIGNvdWxkbid0IHJlcHJvZHVjZS4uCisgKgorICogIFRoZSByYWNlIGNvdWxkIGJlOiBzdXBwb3NlIENVUlJFTlQ9PU5VTEwuIFdlIHB1dCBvdXIgcmVxIGluIHRoZSBsaXN0LAorICogIGFuZCB3ZSBhcmUgc2NoZWR1bGVkLiBPdGhlciBwcm9jZXNzIHRha2VzIG92ZXIsIGFuZCBnZXRzIGludG8KKyAqICBkb19zYnBjZF9yZXF1ZXN0LiBJdCBzZWVzIENVUlJFTlQhPU5VTEwgKGl0IGlzID09IHRvIG91ciByZXEpLCBzbworICogIHByb2NlZWRzLiBJdCBlbmRzLCBzbyBDVVJSRU5UIGlzIG5vdyBOVUxMLi4gTm93IHdlIGF3YWtlIHNvbWV3aGVyZSBpbgorICogIGVuZF9yZXF1ZXN0LCBidXQgbm93IENVUlJFTlQ9PU5VTEwuLi4gb29wcyEKKyAqCisgKi8KKyN1bmRlZiBERUJVR19HVEwKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICogIEkvTyByZXF1ZXN0IHJvdXRpbmUsIGNhbGxlZCBmcm9tIExpbnV4IGtlcm5lbC4KKyAqLworc3RhdGljIHZvaWQgZG9fc2JwY2RfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiBxKQoreworCXVfaW50IGJsb2NrOworCXVfaW50IG5zZWN0OworCWludCBzdGF0dXNfdHJpZXMsIGRhdGFfdHJpZXM7CisJc3RydWN0IHJlcXVlc3QgKnJlcTsKKwlzdHJ1Y3Qgc2JwY2RfZHJpdmUgKnA7CisjaWZkZWYgREVCVUdfR1RMCisJc3RhdGljIGludCB4eF9ucj0wOworCWludCB4bnI7CisjZW5kaWYKKworIHJlcXVlc3RfbG9vcDoKKyNpZmRlZiBERUJVR19HVEwKKwl4bnI9Kyt4eF9ucjsKKworCXJlcSA9IGVsdl9uZXh0X3JlcXVlc3QocSk7CisKKwlpZiAoIXJlcSkKKwl7CisJCXByaW50ayggImRvX3NicGNkX3JlcXVlc3RbJWRpXShOVUxMKSwgUGlkOiVkLCBUaW1lOiVsaVxuIiwKKwkJCXhuciwgY3VycmVudC0+cGlkLCBqaWZmaWVzKTsKKwkJcHJpbnRrKCAiZG9fc2JwY2RfcmVxdWVzdFslZG9dKE5VTEwpIGVuZCAwIChudWxsKSwgVGltZTolbGlcbiIsCisJCQl4bnIsIGppZmZpZXMpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKCIgZG9fc2JwY2RfcmVxdWVzdFslZGldKCVwOiVsZCslbGQpLCBQaWQ6JWQsIFRpbWU6JWxpXG4iLAorCQl4bnIsIHJlcSwgcmVxLT5zZWN0b3IsIHJlcS0+bnJfc2VjdG9ycywgY3VycmVudC0+cGlkLCBqaWZmaWVzKTsKKyNlbmRpZgorCisJcmVxID0gZWx2X25leHRfcmVxdWVzdChxKTsJLyogdGFrZSBvdXQgb3VyIHJlcXVlc3Qgc28gbm8gb3RoZXIgKi8KKwlpZiAoIXJlcSkKKwkJcmV0dXJuOworCisJaWYgKHJlcSAtPiBzZWN0b3IgPT0gLTEpCisJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCisJZG93bigmaW9jdGxfcmVhZF9zZW0pOworCWlmIChycV9kYXRhX2RpcihlbHZfbmV4dF9yZXF1ZXN0KHEpKSAhPSBSRUFEKQorCXsKKwkJbXNnKERCR19JTkYsICJiYWQgY21kICVkXG4iLCByZXEtPmNtZFswXSk7CisJCWdvdG8gZXJyX2RvbmU7CisJfQorCXAgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKKyNpZiBPTERfQlVTWQorCXdoaWxlIChidXN5X2F1ZGlvKSBzYnBfc2xlZXAoSFopOyAvKiB3YWl0IGEgYml0ICovCisJYnVzeV9kYXRhPTE7CisjZW5kaWYgLyogT0xEX0JVU1kgKi8KKworCWlmIChwLT5hdWRpb19zdGF0ZT09YXVkaW9fcGxheWluZykgZ290byBlcnJfZG9uZTsKKwlpZiAocCAhPSBjdXJyZW50X2RyaXZlKQorCQlzd2l0Y2hfZHJpdmUocCk7CisKKwlibG9jayA9IHJlcS0+c2VjdG9yOyAvKiBhbHdheXMgbnVtYmVyZWQgYXMgNTEyLWJ5dGUtcGllY2VzICovCisJbnNlY3QgPSByZXEtPm5yX3NlY3RvcnM7IC8qIGFsd2F5cyBjb3VudGVkIGFzIDUxMi1ieXRlLXBpZWNlcyAqLworCisJbXNnKERCR19CU1osInJlYWQgc2VjdG9yICVkICglZCBzZWN0b3JzKVxuIiwgYmxvY2ssIG5zZWN0KTsKKyNpZiAwCisJbXNnKERCR19NVUwsInJlYWQgTEJBICVkXG4iLCBibG9jay80KTsKKyNlbmRpZgorCisJc2JwX3RyYW5zZmVyKHJlcSk7CisJLyogaWYgd2Ugc2F0aXNmaWVkIHRoZSByZXF1ZXN0IGZyb20gdGhlIGJ1ZmZlciwgd2UncmUgZG9uZS4gKi8KKwlpZiAocmVxLT5ucl9zZWN0b3JzID09IDApCisJeworI2lmZGVmIERFQlVHX0dUTAorCQlwcmludGsoIiBkb19zYnBjZF9yZXF1ZXN0WyVkb10oJXA6JWxkKyVsZCkgZW5kIDIsIFRpbWU6JWxpXG4iLAorCQkJeG5yLCByZXEsIHJlcS0+c2VjdG9yLCByZXEtPm5yX3NlY3RvcnMsIGppZmZpZXMpOworI2VuZGlmCisJCXVwKCZpb2N0bF9yZWFkX3NlbSk7CisJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CisJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJCWdvdG8gcmVxdWVzdF9sb29wOworCX0KKworI2lmZGVmIEZVVFVSRQorCWk9cHJlcGFyZSgwLDApOyAvKiBhdCBtb21lbnQgbm90IHJlYWxseSBhIGhhc3NsZSBjaGVjaywgYnV0IC4uLiAqLworCWlmIChpIT0wKQorCQltc2coREJHX0lORiwiXCJwcmVwYXJlXCIgdGVsbHMgZXJyb3IgJWQgLS0gaWdub3JlZFxuIiwgaSk7CisjZW5kaWYgLyogRlVUVVJFICovCisKKwlpZiAoIXN0X3NwaW5uaW5nKSBjY19TcGluVXAoKTsKKworCWZvciAoZGF0YV90cmllcz1uX3JldHJpZXM7IGRhdGFfdHJpZXMgPiAwOyBkYXRhX3RyaWVzLS0pCisJeworCQlmb3IgKHN0YXR1c190cmllcz0zOyBzdGF0dXNfdHJpZXMgPiAwOyBzdGF0dXNfdHJpZXMtLSkKKwkJeworCQkJZmxhZ3NfY21kX291dCB8PSBmX3Jlc3BvMzsKKwkJCWNjX1JlYWRTdGF0dXMoKTsKKwkJCWlmIChzYnBfc3RhdHVzKCkgIT0gMCkgYnJlYWs7CisJCQlpZiAoc3RfY2hlY2spIGNjX1JlYWRFcnJvcigpOworCQkJc2JwX3NsZWVwKDEpOyAgICAvKiB3YWl0IGEgYml0LCB0cnkgYWdhaW4gKi8KKwkJfQorCQlpZiAoc3RhdHVzX3RyaWVzID09IDApCisJCXsKKwkJCW1zZyhEQkdfSU5GLCJzYnBfc3RhdHVzOiBmYWlsZWQgYWZ0ZXIgMyB0cmllcyBpbiBsaW5lICVkXG4iLCBfX0xJTkVfXyk7CisJCQlicmVhazsKKwkJfQorCQkKKwkJc2JwX3JlYWRfY21kKHJlcSk7CisJCXNicF9zbGVlcCgwKTsKKwkJaWYgKHNicF9kYXRhKHJlcSkgIT0gMCkKKwkJeworI2lmZGVmIFNBRkVfTUlYRUQKKwkJCWN1cnJlbnRfZHJpdmUtPmhhc19kYXRhPTI7IC8qIGlzIHJlYWxseSBhIGRhdGEgZGlzayAqLworI2VuZGlmIC8qIFNBRkVfTUlYRUQgKi8KKyNpZmRlZiBERUJVR19HVEwKKwkJCXByaW50aygiIGRvX3NicGNkX3JlcXVlc3RbJWRvXSglcDolbGQrJWxkKSBlbmQgMywgVGltZTolbGlcbiIsCisJCQkJeG5yLCByZXEsIHJlcS0+c2VjdG9yLCByZXEtPm5yX3NlY3RvcnMsIGppZmZpZXMpOworI2VuZGlmCisJCQl1cCgmaW9jdGxfcmVhZF9zZW0pOworCQkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJCQlnb3RvIHJlcXVlc3RfbG9vcDsKKwkJfQorCX0KKworIGVycl9kb25lOgorI2lmIE9MRF9CVVNZCisJYnVzeV9kYXRhPTA7CisjZW5kaWYgLyogT0xEX0JVU1kgKi8KKyNpZmRlZiBERUJVR19HVEwKKwlwcmludGsoIiBkb19zYnBjZF9yZXF1ZXN0WyVkb10oJXA6JWxkKyVsZCkgZW5kIDQgKGVycm9yKSwgVGltZTolbGlcbiIsCisJCXhuciwgcmVxLCByZXEtPnNlY3RvciwgcmVxLT5ucl9zZWN0b3JzLCBqaWZmaWVzKTsKKyNlbmRpZgorCXVwKCZpb2N0bF9yZWFkX3NlbSk7CisJc2JwX3NsZWVwKDApOyAgICAvKiB3YWl0IGEgYml0LCB0cnkgYWdhaW4gKi8KKwlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJZ290byByZXF1ZXN0X2xvb3A7Cit9CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qCisgKiAgYnVpbGQgYW5kIHNlbmQgdGhlIFJFQUQgY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQgc2JwX3JlYWRfY21kKHN0cnVjdCByZXF1ZXN0ICpyZXEpCit7CisjdW5kZWYgT0xECisKKwlpbnQgaTsKKwlpbnQgYmxvY2s7CisKKwljdXJyZW50X2RyaXZlLT5zYnBfZmlyc3RfZnJhbWU9Y3VycmVudF9kcml2ZS0+c2JwX2xhc3RfZnJhbWU9LTE7ICAgICAgLyogcHVyZ2UgYnVmZmVyICovCisJY3VycmVudF9kcml2ZS0+c2JwX2N1cnJlbnQgPSAwOworCWJsb2NrPXJlcS0+c2VjdG9yLzQ7CisJaWYgKGJsb2NrK2N1cnJlbnRfZHJpdmUtPnNicF9idWZzaXogPD0gY3VycmVudF9kcml2ZS0+Q0RzaXplX2ZybSkKKwkJY3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzID0gY3VycmVudF9kcml2ZS0+c2JwX2J1ZnNpejsKKwllbHNlCisJeworCQljdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXM9Y3VycmVudF9kcml2ZS0+Q0RzaXplX2ZybS1ibG9jazsKKwkJLyogYXZvaWQgcmVhZGluZyBwYXN0IGVuZCBvZiBkYXRhICovCisJCWlmIChjdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXMgPCAxKQorCQl7CisJCQltc2coREJHX0lORiwicmVxdWVzdGVkIGZyYW1lICVkLCBDRCBzaXplICVkID8/P1xuIiwKKwkJCSAgICBibG9jaywgY3VycmVudF9kcml2ZS0+Q0RzaXplX2ZybSk7CisJCQljdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXM9MTsKKwkJfQorCX0KKworCWZsYWdzX2NtZF9vdXQgPSBmX3B1dGNtZCB8IGZfcmVzcG8yIHwgZl9SZXNwb25zZVN0YXR1cyB8IGZfb2JleV9wX2NoZWNrOworCWNscl9jbWRidWYoKTsKKwlpZiAoZmFtVl9kcml2ZSkKKwkgIHsKKwkgICAgZHJ2Y21kWzBdPUNNRFZfUkVBRDsKKwkgICAgbGJhMm1zZihibG9jaywmZHJ2Y21kWzFdKTsgLyogbXNmLWJjZCBmb3JtYXQgcmVxdWlyZWQgKi8KKwkgICAgYmluMmJjZHgoJmRydmNtZFsxXSk7CisJICAgIGJpbjJiY2R4KCZkcnZjbWRbMl0pOworCSAgICBiaW4yYmNkeCgmZHJ2Y21kWzNdKTsKKwkgICAgZHJ2Y21kWzRdPWN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcz4+ODsKKwkgICAgZHJ2Y21kWzVdPWN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcyYweGZmOworCSAgICBkcnZjbWRbNl09MHgwMjsgLyogZmxhZyAibXNmLWJjZCIgKi8KKwl9CisJZWxzZSBpZiAoZmFtMExfZHJpdmUpCisJeworCQlmbGFnc19jbWRfb3V0IHw9IGZfbG9wc3RhIHwgZl9nZXRzdGEgfCBmX2JpdDE7CisJCWlmIChjdXJyZW50X2RyaXZlLT54YV9ieXRlPT0weDIwKQorCQl7CisJCQljbWRfdHlwZT1SRUFEX00yOworCQkJZHJ2Y21kWzBdPUNNRDBfUkVBRF9YQTsgLyogInJlYWQgWEEgZnJhbWVzIiwgb2xkIGRyaXZlcyAqLworCQkJZHJ2Y21kWzFdPShibG9jaz4+MTYpJjB4MGZmOworCQkJZHJ2Y21kWzJdPShibG9jaz4+OCkmMHgwZmY7CisJCQlkcnZjbWRbM109YmxvY2smMHgwZmY7CisJCQlkcnZjbWRbNF09KGN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcz4+OCkmMHgwZmY7CisJCQlkcnZjbWRbNV09Y3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzJjB4MGZmOworCQl9CisJCWVsc2UKKwkJeworCQkJZHJ2Y21kWzBdPUNNRDBfUkVBRDsgLyogInJlYWQgZnJhbWVzIiwgb2xkIGRyaXZlcyAqLworCQkJaWYgKGN1cnJlbnRfZHJpdmUtPmRydl90eXBlPj1kcnZfMjAxKQorCQkJeworCQkJCWxiYTJtc2YoYmxvY2ssJmRydmNtZFsxXSk7IC8qIG1zZi1iY2QgZm9ybWF0IHJlcXVpcmVkICovCisJCQkJYmluMmJjZHgoJmRydmNtZFsxXSk7CisJCQkJYmluMmJjZHgoJmRydmNtZFsyXSk7CisJCQkJYmluMmJjZHgoJmRydmNtZFszXSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZHJ2Y21kWzFdPShibG9jaz4+MTYpJjB4MGZmOworCQkJCWRydmNtZFsyXT0oYmxvY2s+PjgpJjB4MGZmOworCQkJCWRydmNtZFszXT1ibG9jayYweDBmZjsKKwkJCX0KKwkJCWRydmNtZFs0XT0oY3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzPj44KSYweDBmZjsKKwkJCWRydmNtZFs1XT1jdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXMmMHgwZmY7CisJCQlkcnZjbWRbNl09KGN1cnJlbnRfZHJpdmUtPmRydl90eXBlPGRydl8yMDEpPzA6MjsgLyogZmxhZyAibGJhIG9yIG1zZi1iY2QgZm9ybWF0IiAqLworCQl9CisJfQorCWVsc2UgaWYgKGZhbTFfZHJpdmUpCisJeworCQlkcnZjbWRbMF09Q01EMV9SRUFEOworCQlsYmEybXNmKGJsb2NrLCZkcnZjbWRbMV0pOyAvKiBtc2YtYmluIGZvcm1hdCByZXF1aXJlZCAqLworCQlkcnZjbWRbNV09KGN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcz4+OCkmMHgwZmY7CisJCWRydmNtZFs2XT1jdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXMmMHgwZmY7CisJfQorCWVsc2UgaWYgKGZhbTJfZHJpdmUpCisJeworCQlkcnZjbWRbMF09Q01EMl9SRUFEOworCQlsYmEybXNmKGJsb2NrLCZkcnZjbWRbMV0pOyAvKiBtc2YtYmluIGZvcm1hdCByZXF1aXJlZCAqLworCQlkcnZjbWRbNF09KGN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcz4+OCkmMHgwZmY7CisJCWRydmNtZFs1XT1jdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXMmMHgwZmY7CisJCWRydmNtZFs2XT0weDAyOworCX0KKwllbHNlIGlmIChmYW1UX2RyaXZlKQorCXsKKwkJZHJ2Y21kWzBdPUNNRFRfUkVBRDsKKwkJZHJ2Y21kWzJdPShibG9jaz4+MjQpJjB4MGZmOworCQlkcnZjbWRbM109KGJsb2NrPj4xNikmMHgwZmY7CisJCWRydmNtZFs0XT0oYmxvY2s+PjgpJjB4MGZmOworCQlkcnZjbWRbNV09YmxvY2smMHgwZmY7CisJCWRydmNtZFs3XT0oY3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzPj44KSYweDBmZjsKKwkJZHJ2Y21kWzhdPWN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcyYweDBmZjsKKwl9CisJZmxhZ3NfY21kX291dD1mX3B1dGNtZDsKKwlyZXNwb25zZV9jb3VudD0wOworCWk9Y21kX291dCgpOworCWlmIChpPDApIG1zZyhEQkdfSU5GLCJlcnJvciBnaXZpbmcgUkVBRCBjb21tYW5kOiAlMGRcbiIsIGkpOworCXJldHVybjsKK30KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyoKKyAqICBDaGVjayB0aGUgY29tcGxldGlvbiBvZiB0aGUgcmVhZC1kYXRhIGNvbW1hbmQuICBPbiBzdWNjZXNzLCByZWFkCisgKiAgdGhlIGN1cnJlbnRfZHJpdmUtPnNicF9idWZzaXogKiAyMDQ4IGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgZGlzayBpbnRvIGJ1ZmZlci4KKyAqLworc3RhdGljIGludCBzYnBfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCWludCBpPTAsIGo9MCwgbCwgZnJhbWU7CisJdV9pbnQgdHJ5PTA7CisJdV9sb25nIHRpbWVvdXQ7CisJdV9jaGFyICpwOworCXVfaW50IGRhdGFfdHJpZXMgPSAwOworCXVfaW50IGRhdGFfd2FpdHMgPSAwOworCXVfaW50IGRhdGFfcmV0cnlpbmcgPSAwOworCWludCBlcnJvcl9mbGFnOworCWludCB4YV9jb3VudDsKKwlpbnQgbWF4X2xhdGVuY3k7CisJaW50IHN1Y2Nlc3M7CisJaW50IHdhaXQ7CisJaW50IGR1cmF0aW9uOworCisJZXJyb3JfZmxhZz0wOworCXN1Y2Nlc3M9MDsKKyNpZiBMT05HX1RJTUlORworCW1heF9sYXRlbmN5PTkqSFo7CisjZWxzZQorCWlmIChjdXJyZW50X2RyaXZlLT5mX211bHRpc2Vzc2lvbikgbWF4X2xhdGVuY3k9MTUqSFo7CisJZWxzZSBtYXhfbGF0ZW5jeT01KkhaOworI2VuZGlmCisJZHVyYXRpb249amlmZmllczsKKwlmb3IgKGZyYW1lPTA7ZnJhbWU8Y3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzJiYhZXJyb3JfZmxhZzsgZnJhbWUrKykKKwl7CisJCVNCUENEX0NMSTsKKworCQlkZWxfdGltZXIoJmRhdGFfdGltZXIpOworCQlkYXRhX3RpbWVyLmV4cGlyZXM9amlmZmllcyttYXhfbGF0ZW5jeTsKKwkJdGltZWRfb3V0X2RhdGE9MDsKKwkJYWRkX3RpbWVyKCZkYXRhX3RpbWVyKTsKKwkJd2hpbGUgKCF0aW1lZF9vdXRfZGF0YSkKKwkJeworCQkJaWYgKGN1cnJlbnRfZHJpdmUtPmZfbXVsdGlzZXNzaW9uKSB0cnk9bWF4dGltX2RhdGEqNDsKKwkJCWVsc2UgdHJ5PW1heHRpbV9kYXRhOworCQkJbXNnKERCR18wMDAsInNicF9kYXRhOiBDRGlfc3RhdHVzIGxvb3A6IHRyeT0lZC5cbiIsdHJ5KTsKKwkJCWZvciAoIDsgdHJ5IT0wO3RyeS0tKQorCQkJeworCQkJCWo9aW5iKENEaV9zdGF0dXMpOworCQkJCWlmICghKGomc19ub3RfZGF0YV9yZWFkeSkpIGJyZWFrOworCQkJCWlmICghKGomc19ub3RfcmVzdWx0X3JlYWR5KSkgYnJlYWs7CisJCQkJaWYgKGZhbTBMVl9kcml2ZSkgaWYgKGomc19hdHRlbnRpb24pIGJyZWFrOworCQkJfQorCQkJaWYgKCEoaiZzX25vdF9kYXRhX3JlYWR5KSkgZ290byBkYXRhX3JlYWR5OworCQkJaWYgKHRyeT09MCkKKwkJCXsKKwkJCQlpZiAoZGF0YV9yZXRyeWluZyA9PSAwKSBkYXRhX3dhaXRzKys7CisJCQkJZGF0YV9yZXRyeWluZyA9IDE7CisJCQkJbXNnKERCR18wMDAsInNicF9kYXRhOiBDRGlfc3RhdHVzIGxvb3A6IHNsZWVwaW5nLlxuIik7CisJCQkJc2JwX3NsZWVwKDEpOworCQkJCXRyeSA9IDE7CisJCQl9CisJCX0KKwkJbXNnKERCR19JTkYsInNicF9kYXRhOiBDRGlfc3RhdHVzIGxvb3AgZXhwaXJlZC5cbiIpOworCWRhdGFfcmVhZHk6CisJCWRlbF90aW1lcigmZGF0YV90aW1lcik7CisKKwkJaWYgKHRpbWVkX291dF9kYXRhKQorCQl7CisJCQltc2coREJHX0lORiwic2JwX2RhdGE6IENEaV9zdGF0dXMgdGltZW91dCAodGltZWRfb3V0X2RhdGEpICglMDJYKS5cbiIsIGopOworCQkJZXJyb3JfZmxhZysrOworCQl9CisJCWlmICh0cnk9PTApCisJCXsKKwkJCW1zZyhEQkdfSU5GLCJzYnBfZGF0YTogQ0RpX3N0YXR1cyB0aW1lb3V0ICh0cnk9MCkgKCUwMlgpLlxuIiwgaik7CisJCQllcnJvcl9mbGFnKys7CisJCX0KKwkJaWYgKCEoaiZzX25vdF9yZXN1bHRfcmVhZHkpKQorCQl7CisJCQltc2coREJHX0lORiwgInNicF9kYXRhOiBSRVNVTFRfUkVBRFkgd2hlcmUgREFUQV9SRUFEWSBhd2FpdGVkICglMDJYKS5cbiIsIGopOworCQkJcmVzcG9uc2VfY291bnQ9MjA7CisJCQlqPVJlc3BvbnNlSW5mbygpOworCQkJaj1pbmIoQ0RpX3N0YXR1cyk7CisJCX0KKwkJaWYgKGomc19ub3RfZGF0YV9yZWFkeSkKKwkJeworCQkJaWYgKChjdXJyZW50X2RyaXZlLT5vcmVkX2N0bF9hZHImMHg0MCk9PTApCisJCQkJbXNnKERCR19JTkYsICJDRCBjb250YWlucyBubyBkYXRhIHRyYWNrcy5cbiIpOworCQkJZWxzZSBtc2coREJHX0lORiwgInNicF9kYXRhOiBEQVRBX1JFQURZIHRpbWVvdXQgKCUwMlgpLlxuIiwgaik7CisJCQllcnJvcl9mbGFnKys7CisJCX0KKwkJU0JQQ0RfU1RJOworCQlpZiAoZXJyb3JfZmxhZykgYnJlYWs7CisKKwkJbXNnKERCR18wMDAsICJzYnBfZGF0YTogYmVnaW5uaW5nIHRvIHJlYWQuXG4iKTsKKwkJcCA9IGN1cnJlbnRfZHJpdmUtPnNicF9idWYgKyBmcmFtZSAqICBDRF9GUkFNRVNJWkU7CisJCWlmIChzYnByb190eXBlPT0xKSBPVVQoQ0RvX3NlbF9pX2QsMSk7CisJCWlmIChjbWRfdHlwZT09UkVBRF9NMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvXzE2Yml0KSBpbnN3KENEaV9kYXRhLCB4YV9oZWFkX2J1ZiwgQ0RfWEFfSEVBRD4+MSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGluc2IoQ0RpX2RhdGEsIHhhX2hlYWRfYnVmLCBDRF9YQV9IRUFEKTsKKwkJfQorCQlpZiAoZG9fMTZiaXQpIGluc3coQ0RpX2RhdGEsIHAsIENEX0ZSQU1FU0laRT4+MSk7CisJCWVsc2UgaW5zYihDRGlfZGF0YSwgcCwgQ0RfRlJBTUVTSVpFKTsKKwkJaWYgKGNtZF90eXBlPT1SRUFEX00yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9fMTZiaXQpIGluc3coQ0RpX2RhdGEsIHhhX3RhaWxfYnVmLCBDRF9YQV9UQUlMPj4xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW5zYihDRGlfZGF0YSwgeGFfdGFpbF9idWYsIENEX1hBX1RBSUwpOworCQl9CisJCWN1cnJlbnRfZHJpdmUtPnNicF9jdXJyZW50Kys7CisJCWlmIChzYnByb190eXBlPT0xKSBPVVQoQ0RvX3NlbF9pX2QsMCk7CisJCWlmIChjbWRfdHlwZT09UkVBRF9NMikKKwkJeworCQkJZm9yICh4YV9jb3VudD0wO3hhX2NvdW50PENEX1hBX0hFQUQ7eGFfY291bnQrKykKKwkJCQlzcHJpbnRmKCZtc2didWZbeGFfY291bnQqM10sICIgJTAyWCIsIHhhX2hlYWRfYnVmW3hhX2NvdW50XSk7CisJCQltc2didWZbeGFfY291bnQqM109MDsKKwkJCW1zZyhEQkdfWEExLCJ4YSBoZWFkOiVzXG4iLCBtc2didWYpOworCQl9CisJCWRhdGFfcmV0cnlpbmcgPSAwOworCQlkYXRhX3RyaWVzKys7CisJCWlmIChkYXRhX3RyaWVzID49IDEwMDApCisJCXsKKwkJCW1zZyhEQkdfSU5GLCJzYnBfZGF0YSgpIHN0YXRpc3RpY3M6ICVkIHdhaXRzIGluICVkIGZyYW1lcy5cbiIsIGRhdGFfd2FpdHMsIGRhdGFfdHJpZXMpOworCQkJZGF0YV93YWl0cyA9IGRhdGFfdHJpZXMgPSAwOworCQl9CisJfQorCWR1cmF0aW9uPWppZmZpZXMtZHVyYXRpb247CisJbXNnKERCR19URUEsInRpbWUgdG8gcmVhZCAlZCBmcmFtZXM6ICVkIGppZmZpZXMgLlxuIixmcmFtZSxkdXJhdGlvbik7CisJaWYgKGZhbVRfZHJpdmUpCisJeworCQl3YWl0PTg7CisJCWRvCisJCXsKKwkJCWlmICh0ZWFjPT0yKQorICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpPUNEaV9zdGF0X2xvb3BfVCgpKSA9PSAtMSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNicF9zbGVlcCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQoQ0RvX3NlbF9pX2QsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaT1pbmIoQ0RpX3N0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCWlmICghKGkmc19ub3RfZGF0YV9yZWFkeSkpCisJCQl7CisJCQkJT1VUKENEb19zZWxfaV9kLDEpOworCQkJCWo9MDsKKwkJCQlkbworCQkJCXsKKwkJCQkJaWYgKGRvXzE2Yml0KSBpPWludyhDRGlfZGF0YSk7CisJCQkJCWVsc2UgaT1pbmIoQ0RpX2RhdGEpOworCQkJCQlqKys7CisJCQkJCWk9aW5iKENEaV9zdGF0dXMpOworCQkJCX0KKwkJCQl3aGlsZSAoIShpJnNfbm90X2RhdGFfcmVhZHkpKTsKKwkJCQltc2coREJHX1RFQSwgIj09PT09PT09PT10b28gbXVjaCBkYXRhICglZCBieXRlcy93b3Jkcyk9PT09PT09PT09PT09PS5cbiIsIGopOworCQkJfQorCQkJaWYgKCEoaSZzX25vdF9yZXN1bHRfcmVhZHkpKQorCQkJeworCQkJCU9VVChDRG9fc2VsX2lfZCwwKTsKKwkJCQlsPTA7CisJCQkJZG8KKwkJCQl7CisJCQkJCWluZm9idWZbbCsrXT1pbmIoQ0RpX2luZm8pOworCQkJCQlpPWluYihDRGlfc3RhdHVzKTsKKwkJCQl9CisJCQkJd2hpbGUgKCEoaSZzX25vdF9yZXN1bHRfcmVhZHkpKTsKKwkJCQlpZiAoaW5mb2J1ZlswXT09MHgwMCkgc3VjY2Vzcz0xOworI2lmIDEKKwkJCQlmb3IgKGo9MDtqPGw7aisrKSBzcHJpbnRmKCZtc2didWZbaiozXSwgIiAlMDJYIiwgaW5mb2J1ZltqXSk7CisJCQkJbXNnYnVmW2oqM109MDsKKwkJCQltc2coREJHX1RFQSwic2JwX2RhdGEgaW5mbyByZXNwb25zZTolc1xuIiwgbXNnYnVmKTsKKyNlbmRpZgorCQkJCWlmIChpbmZvYnVmWzBdPT0weDAyKQorCQkJCXsKKwkJCQkJZXJyb3JfZmxhZysrOworCQkJCQlkbworCQkJCQl7CisJCQkJCQkrK3JlY3Vyc2lvbjsKKwkJCQkJCWlmIChyZWN1cnNpb24+MSkgbXNnKERCR19URUEsImNtZF9vdXRfVCBSRUFEX0VSUiByZWN1cnNpb24gKHNicF9kYXRhKTogJWQgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhXG4iLHJlY3Vyc2lvbik7CisJCQkJCQllbHNlIG1zZyhEQkdfVEVBLCJzYnBfZGF0YTogQ01EVF9SRUFEX0VSUiBuZWNlc3NhcnkuXG4iKTsKKwkJCQkJCWNscl9jbWRidWYoKTsKKwkJCQkJCWRydmNtZFswXT1DTURUX1JFQURfRVJSOworCQkJCQkJaj1jbWRfb3V0X1QoKTsgLyogISEhIHJlY3Vyc2l2ZSBoZXJlICEhISAqLworCQkJCQkJLS1yZWN1cnNpb247CisJCQkJCQlzYnBfc2xlZXAoMSk7CisJCQkJCX0KKwkJCQkJd2hpbGUgKGo8MCk7CisJCQkJCWN1cnJlbnRfZHJpdmUtPmVycm9yX3N0YXRlPWluZm9idWZbMl07CisJCQkJCWN1cnJlbnRfZHJpdmUtPmIzPWluZm9idWZbM107CisJCQkJCWN1cnJlbnRfZHJpdmUtPmI0PWluZm9idWZbNF07CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworI2lmIDAKKwkJCQltc2coREJHX1RFQSwgIj09PT09PT09PT09PT0gd2FpdGluZyBmb3IgcmVzdWx0PT09PT09PT09PT09PT09PT0uXG4iKTsKKwkJCQlzYnBfc2xlZXAoMSk7CisjZW5kaWYKKwkJCX0KKwkJfQorCQl3aGlsZSAod2FpdC0tKTsKKwl9CisKKwlpZiAoZXJyb3JfZmxhZykgLyogbXVzdCBoYXZlIGJlZW4gc3B1cmlvdXMgRF9SRFkgb3IgKEFUVE4mJiFEX1JEWSkgKi8KKwl7CisJCW1zZyhEQkdfVEVBLCAiPT09PT09PT09PT09PT09PWVycm9yIGZsYWc6ICVkPT09PT09PT09PT09PT09PT0uXG4iLCBlcnJvcl9mbGFnKTsKKwkJbXNnKERCR19JTkYsInNicF9kYXRhOiByZWFkIGFib3J0ZWQgYnkgZHJpdmUuXG4iKTsKKyNpZiAxCisJCWk9Y2NfRHJpdmVSZXNldCgpOyAvKiB1Z2x5IGZpeCB0byBwcmV2ZW50IGEgaGFuZyAqLworI2Vsc2UKKwkJaT1jY19SZWFkRXJyb3IoKTsKKyNlbmRpZgorCQlyZXR1cm4gKDApOworCX0KKwkKKwlpZiAoZmFtMExWX2RyaXZlKQorCXsKKwkJU0JQQ0RfQ0xJOworCQlpPW1heHRpbV9kYXRhOworCQlmb3IgKHRpbWVvdXQ9amlmZmllcytIWjsgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCk7IHRpbWVvdXQtLSkKKwkJeworCQkJZm9yICggO2khPTA7aS0tKQorCQkJeworCQkJCWo9aW5iKENEaV9zdGF0dXMpOworCQkJCWlmICghKGomc19ub3RfZGF0YV9yZWFkeSkpIGJyZWFrOworCQkJCWlmICghKGomc19ub3RfcmVzdWx0X3JlYWR5KSkgYnJlYWs7CisJCQkJaWYgKGomc19hdHRlbnRpb24pIGJyZWFrOworCQkJfQorCQkJaWYgKGkgIT0gMCB8fCB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSBicmVhazsKKwkJCXNicF9zbGVlcCgwKTsKKwkJCWkgPSAxOworCQl9CisJCWlmIChpPT0wKSBtc2coREJHX0lORiwic3RhdHVzIHRpbWVvdXQgYWZ0ZXIgUkVBRC5cbiIpOworCQlpZiAoIShqJnNfYXR0ZW50aW9uKSkKKwkJeworCQkJbXNnKERCR19JTkYsInNicF9kYXRhOiB0aW1lb3V0IHdhaXRpbmcgRFJWX0FUVE4gLSByZXRyeWluZy5cbiIpOworCQkJaT1jY19Ecml2ZVJlc2V0KCk7ICAvKiB1Z2x5IGZpeCB0byBwcmV2ZW50IGEgaGFuZyAqLworCQkJU0JQQ0RfU1RJOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlTQlBDRF9TVEk7CisJfQorCisjaWYgMAorCWlmICghc3VjY2VzcykKKyNlbmRpZgorCQlkbworCQl7CisJCQlpZiAoZmFtMExWX2RyaXZlKSBjY19SZWFkU3RhdHVzKCk7CisjaWYgMQorCQkJaWYgKGZhbVRfZHJpdmUpIG1zZyhEQkdfVEVBLCAiPT09PT09PT09PT09PT09PWJlZm9yZSBSZXNwb25zZVN0YXR1cz09PT09PT09PT09PT09PT09LlxuIiwgaSk7CisjZW5kaWYKKwkJCWk9UmVzcG9uc2VTdGF0dXMoKTsgIC8qIGJ1aWxkcyBzdGF0dXNfYml0cywgcmV0dXJucyBvcmlnLiBzdGF0dXMgKG9sZCkgb3IgZmFrZWQgcF9zdWNjZXNzIChuZXcpICovCisjaWYgMQorCQkJaWYgKGZhbVRfZHJpdmUpCW1zZyhEQkdfVEVBLCAiPT09PT09PT09PT09PT09PVJlc3BvbnNlU3RhdHVzOiAlZD09PT09PT09PT09PT09PT09LlxuIiwgaSk7CisjZW5kaWYKKwkJCWlmIChpPDApCisJCQl7CisJCQkJbXNnKERCR19JTkYsImJhZCBjY19SZWFkU3RhdHVzIGFmdGVyIHJlYWQ6ICUwMlhcbiIsIGN1cnJlbnRfZHJpdmUtPnN0YXR1c19iaXRzKTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJCXdoaWxlICgoZmFtMExWX2RyaXZlKSYmKCFzdF9jaGVjaykmJighKGkmcF9zdWNjZXNzKSkpOworCWlmIChzdF9jaGVjaykKKwl7CisJCWk9Y2NfUmVhZEVycm9yKCk7CisJCW1zZyhEQkdfSU5GLCJjY19SZWFkRXJyb3Igd2FzIG5lY2Vzc2FyeSBhZnRlciByZWFkOiAlZFxuIixpKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGZhdGFsX2VycikKKwl7CisJCWZhdGFsX2Vycj0wOworCQljdXJyZW50X2RyaXZlLT5zYnBfZmlyc3RfZnJhbWU9Y3VycmVudF9kcml2ZS0+c2JwX2xhc3RfZnJhbWU9LTE7ICAgICAgLyogcHVyZ2UgYnVmZmVyICovCisJCWN1cnJlbnRfZHJpdmUtPnNicF9jdXJyZW50ID0gMDsKKwkJbXNnKERCR19JTkYsInNicF9kYXRhOiBmYXRhbF9lcnIgLSByZXRyeWluZy5cbiIpOworCQlyZXR1cm4gKDApOworCX0KKwkKKwljdXJyZW50X2RyaXZlLT5zYnBfZmlyc3RfZnJhbWUgPSByZXEgLT4gc2VjdG9yIC8gNDsKKwljdXJyZW50X2RyaXZlLT5zYnBfbGFzdF9mcmFtZSA9IGN1cnJlbnRfZHJpdmUtPnNicF9maXJzdF9mcmFtZSArIGN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcyAtIDE7CisJc2JwX3RyYW5zZmVyKHJlcSk7CisJcmV0dXJuICgxKTsKK30KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IHNicGNkX2Jsb2NrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNicGNkX2RyaXZlICpwID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBjZHJvbV9vcGVuKHAtPnNicGNkX2luZm9wLCBpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgc2JwY2RfYmxvY2tfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc2JwY2RfZHJpdmUgKnAgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIGNkcm9tX3JlbGVhc2UocC0+c2JwY2RfaW5mb3AsIGZpbGUpOworfQorCitzdGF0aWMgaW50IHNicGNkX2Jsb2NrX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNicGNkX2RyaXZlICpwID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpID0gcC0+c2JwY2RfaW5mb3A7CisJaW50IHJldCwgaTsKKworCXJldCA9IGNkcm9tX2lvY3RsKGZpbGUsIHAtPnNicGNkX2luZm9wLCBpbm9kZSwgY21kLCBhcmcpOworCWlmIChyZXQgIT0gLUVOT1NZUykKKwkJcmV0dXJuIHJldDsKKwogCW1zZyhEQkdfSU8yLCJpb2N0bCglcywgMHglMDhsWCwgMHglMDhsWClcbiIsIGNkaS0+bmFtZSwgY21kLCBhcmcpOwogCWlmIChwLT5kcnZfaWQ9PS0xKSB7CiAJCW1zZyhEQkdfSU5GLCAiaW9jdGw6IGJhZCBkZXZpY2U6ICVzXG4iLCBjZGktPm5hbWUpOwpAQCAtNDE5Miw3ICs1MDc4LDcgQEAKIAkJaT1Ecml2ZVJlc2V0KCk7CiAJCWN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPTA7CiAJCVJFVFVSTl9VUChpKTsKLQkJCisKIAljYXNlIENEUk9NUkVBRE1PREUxOgogCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NUkVBRE1PREUxIHJlcXVlc3RlZC5cbiIpOwogI2lmZGVmIFNBRkVfTUlYRUQKQEAgLTQyMDIsNyArNTA4OCw3IEBACiAJCWNjX01vZGVTZW5zZSgpOwogCQljdXJyZW50X2RyaXZlLT5tb2RlPVJFQURfTTE7CiAJCVJFVFVSTl9VUCgwKTsKLQkJCisKIAljYXNlIENEUk9NUkVBRE1PREUyOiAvKiBub3QgdXNhYmxlIGF0IHRoZSBtb21lbnQgKi8KIAkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVJFQURNT0RFMiByZXF1ZXN0ZWQuXG4iKTsKICNpZmRlZiBTQUZFX01JWEVECkBAIC00MjEyLDE0ICs1MDk4LDE0IEBACiAJCWNjX01vZGVTZW5zZSgpOwogCQljdXJyZW50X2RyaXZlLT5tb2RlPVJFQURfTTI7CiAJCVJFVFVSTl9VUCgwKTsKLQkJCisKIAljYXNlIENEUk9NQVVESU9CVUZTSVo6IC8qIGNvbmZpZ3VyZSB0aGUgYXVkaW8gYnVmZmVyIHNpemUgKi8KIAkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTUFVRElPQlVGU0laIGVudGVyZWQuXG4iKTsKIAkJaWYgKGN1cnJlbnRfZHJpdmUtPnNicF9hdWRzaXo+MCkKIAkJCXZmcmVlKGN1cnJlbnRfZHJpdmUtPmF1ZF9idWYpOwogCQljdXJyZW50X2RyaXZlLT5hdWRfYnVmPU5VTEw7CiAJCWN1cnJlbnRfZHJpdmUtPnNicF9hdWRzaXo9YXJnOwotCQkKKwogCQlpZiAoY3VycmVudF9kcml2ZS0+c2JwX2F1ZHNpej4xNikKIAkJewogCQkJY3VycmVudF9kcml2ZS0+c2JwX2F1ZHNpeiA9IDA7CkBAIC00MjQ5LDcgKzUxMzUsNyBAQAogCQl1X2ludCBkYXRhX3JldHJ5aW5nID0gMDsKIAkJaW50IHN0YXR1c190cmllczsKIAkJaW50IGVycm9yX2ZsYWc7Ci0JCQorCiAJCW1zZyhEQkdfSU9DLCJpb2N0bDogQ0RST01SRUFEQVVESU8gZW50ZXJlZC5cbiIpOwogCQlpZiAoZmFtMF9kcml2ZSkgUkVUVVJOX1VQKC1FSU5WQUwpOwogCQlpZiAoZmFtTF9kcml2ZSkgUkVUVVJOX1VQKC1FSU5WQUwpOwpAQCAtNDI1Nyw3ICs1MTQzLDcgQEAKIAkJaWYgKGZhbVRfZHJpdmUpIFJFVFVSTl9VUCgtRUlOVkFMKTsKICNpZmRlZiBTQUZFX01JWEVECiAJCWlmIChjdXJyZW50X2RyaXZlLT5oYXNfZGF0YT4xKSBSRVRVUk5fVVAoLUVCVVNZKTsKLSNlbmRpZiAvKiBTQUZFX01JWEVEICovIAorI2VuZGlmIC8qIFNBRkVfTUlYRUQgKi8KIAkJaWYgKGN1cnJlbnRfZHJpdmUtPmF1ZF9idWY9PU5VTEwpIFJFVFVSTl9VUCgtRUlOVkFMKTsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZWFkX2F1ZGlvLCAodm9pZCBfX3VzZXIgKilhcmcsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvKSkpCkBAIC00MjY2LDcgKzUxNTIsNyBAQAogCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHJlYWRfYXVkaW8uYnVmLAogCQkJICAgICAgcmVhZF9hdWRpby5uZnJhbWVzKkNEX0ZSQU1FU0laRV9SQVcpKQogICAgICAgICAgICAgICAgIAlSRVRVUk5fVVAoLUVGQVVMVCk7Ci0JCQorCiAJCWlmIChyZWFkX2F1ZGlvLmFkZHJfZm9ybWF0PT1DRFJPTV9NU0YpIC8qIE1TRi1iaW4gc3BlY2lmaWNhdGlvbiBvZiB3aGVyZSB0byBzdGFydCAqLwogCQkJYmxvY2s9bXNmMmxiYSgmcmVhZF9hdWRpby5hZGRyLm1zZi5taW51dGUpOwogCQllbHNlIGlmIChyZWFkX2F1ZGlvLmFkZHJfZm9ybWF0PT1DRFJPTV9MQkEpIC8qIGxiYSBzcGVjaWZpY2F0aW9uIG9mIHdoZXJlIHRvIHN0YXJ0ICovCkBAIC00MjgyLDcgKzUxNjgsNyBAQAogI2lmIE9MRF9CVVNZCiAJCXdoaWxlIChidXN5X2RhdGEpIHNicF9zbGVlcChIWi8xMCk7IC8qIHdhaXQgYSBiaXQgKi8KIAkJYnVzeV9hdWRpbz0xOwotI2VuZGlmIC8qIE9MRF9CVVNZICovIAorI2VuZGlmIC8qIE9MRF9CVVNZICovCiAJCWVycm9yX2ZsYWc9MDsKIAkJZm9yIChkYXRhX3RyaWVzPTU7IGRhdGFfdHJpZXM+MDsgZGF0YV90cmllcy0tKQogCQl7CkBAIC00MzA0LDcgKzUxOTAsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJbXNnKERCR19BVUQsInJlYWRfYXVkaW86IHNicF9zdGF0dXM6IG9rLlxuIik7Ci0JCQkKKwogCQkJZmxhZ3NfY21kX291dCA9IGZfcHV0Y21kIHwgZl9yZXNwbzIgfCBmX1Jlc3BvbnNlU3RhdHVzIHwgZl9vYmV5X3BfY2hlY2s7CiAJCQlpZiAoZmFtMExfZHJpdmUpCiAJCQl7CkBAIC00NDcwLDcgKzUzNTYsNyBAQAogCQljdXJyZW50X2RyaXZlLT5tb2RlPVJFQURfTTE7CiAjaWYgT0xEX0JVU1kKIAkJYnVzeV9hdWRpbz0wOwotI2VuZGlmIC8qIE9MRF9CVVNZICovIAorI2VuZGlmIC8qIE9MRF9CVVNZICovCiAJCWlmIChkYXRhX3RyaWVzID09IDApCiAJCXsKIAkJCW1zZyhEQkdfQVVELCJyZWFkX2F1ZGlvOiBmYWlsZWQgYWZ0ZXIgNSB0cmllcyBpbiBsaW5lICVkLlxuIiwgX19MSU5FX18pOwpAQCAtNDQ3OSw5MDAgKzUzNjUsMTMgQEAKIAkJbXNnKERCR19BVUQsInJlYWRfYXVkaW86IHN1Y2Nlc3NmdWwgcmV0dXJuLlxuIik7CiAJCVJFVFVSTl9VUCgwKTsKIAl9IC8qIGVuZCBvZiBDRFJPTVJFQURBVURJTyAqLwotCQkKKwogCWRlZmF1bHQ6CiAJCW1zZyhEQkdfSU9DLCJpb2N0bDogdW5rbm93biBmdW5jdGlvbiByZXF1ZXN0ICUwNFhcbiIsIGNtZCk7CiAJCVJFVFVSTl9VUCgtRUlOVkFMKTsKIAl9IC8qIGVuZCBzd2l0Y2goY21kKSAqLwogfQogCi1zdGF0aWMgaW50IHNicGNkX2F1ZGlvX2lvY3RsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCB1X2ludCBjbWQsCi0JCSAgICAgICB2b2lkICogYXJnKQotewotCXN0cnVjdCBzYnBjZF9kcml2ZSAqcCA9IGNkaS0+aGFuZGxlOwotCWludCBpLCBzdCwgajsKLQkKLQltc2coREJHX0lPMiwiaW9jdGwoJXMsIDB4JTA4bFgsIDB4JTA4cClcbiIsIGNkaS0+bmFtZSwgY21kLCBhcmcpOwotCWlmIChwLT5kcnZfaWQ9PS0xKSB7Ci0JCW1zZyhEQkdfSU5GLCAiaW9jdGw6IGJhZCBkZXZpY2U6ICVzXG4iLCBjZGktPm5hbWUpOwotCQlyZXR1cm4gKC1FTlhJTyk7ICAgICAgICAgICAgIC8qIG5vIHN1Y2ggZHJpdmUgKi8KLQl9Ci0JZG93bigmaW9jdGxfcmVhZF9zZW0pOwotCWlmIChwICE9IGN1cnJlbnRfZHJpdmUpCi0JCXN3aXRjaF9kcml2ZShwKTsKLQkKLQltc2coREJHX0lPMiwiaW9jdGw6IGRldmljZSAlcywgcmVxdWVzdCAlMDRYXG4iLGNkaS0+bmFtZSxjbWQpOwotCXN3aXRjaCAoY21kKSAJCS8qIFN1bi1jb21wYXRpYmxlICovCi0JewotCQkKLQljYXNlIENEUk9NUEFVU0U6ICAgICAvKiBQYXVzZSB0aGUgZHJpdmUgKi8KLQkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVBBVVNFIGVudGVyZWQuXG4iKTsKLQkJLyogcGF1c2UgdGhlIGRyaXZlIHVuaXQgd2hlbiBpdCBpcyBjdXJyZW50bHkgaW4gUExBWSBtb2RlLCAgICAgICAgICovCi0JCS8qIG9yIHJlc2V0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIGxvY2F0aW9ucyB3aGVuIGluIFBBVVNFRCBtb2RlLiAqLwotCQkvKiBJZiBhcHBsaWNhYmxlLCBhdCB0aGUgbmV4dCBzdG9wcGluZyBwb2ludCBpdCByZWFjaGVzICAgICAgICAgICAgKi8KLQkJLyogdGhlIGRyaXZlIHdpbGwgZGlzY29udGludWUgcGxheWluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JCXN3aXRjaCAoY3VycmVudF9kcml2ZS0+YXVkaW9fc3RhdGUpCi0JCXsKLQkJY2FzZSBhdWRpb19wbGF5aW5nOgotCQkJaWYgKGZhbUxfZHJpdmUpIGk9Y2NfUmVhZFN1YlEoKTsKLQkJCWVsc2UgaT1jY19QYXVzZV9SZXN1bWUoMSk7Ci0JCQlpZiAoaTwwKSBSRVRVUk5fVVAoLUVJTyk7Ci0JCQlpZiAoZmFtTF9kcml2ZSkgaT1jY19QYXVzZV9SZXN1bWUoMSk7Ci0JCQllbHNlIGk9Y2NfUmVhZFN1YlEoKTsKLQkJCWlmIChpPDApIFJFVFVSTl9VUCgtRUlPKTsKLQkJCWN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19zdGFydD1jdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90b3Q7Ci0JCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT1hdWRpb19wYXVzaW5nOwotCQkJUkVUVVJOX1VQKDApOwotCQljYXNlIGF1ZGlvX3BhdXNpbmc6Ci0JCQlpPWNjX1NlZWsoY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0LDEpOwotCQkJaWYgKGk8MCkgUkVUVVJOX1VQKC1FSU8pOwotCQkJUkVUVVJOX1VQKDApOwotCQlkZWZhdWx0OgotCQkJUkVUVVJOX1VQKC1FSU5WQUwpOwotCQl9Ci0JCQotCWNhc2UgQ0RST01SRVNVTUU6IC8qIHJlc3VtZSBwYXVzZWQgYXVkaW8gcGxheSAqLwotCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NUkVTVU1FIGVudGVyZWQuXG4iKTsKLQkJLyogcmVzdW1lIHBsYXlpbmcgYXVkaW8gdHJhY2tzIHdoZW4gYSBwcmV2aW91cyBQTEFZIEFVRElPIGNhbGwgaGFzICAqLwotCQkvKiBiZWVuIHBhdXNlZCB3aXRoIGEgUEFVU0UgY29tbWFuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JCS8qIEl0IHdpbGwgcmVzdW1lIHBsYXlpbmcgZnJvbSB0aGUgbG9jYXRpb24gc2F2ZWQgaW4gU3ViUV9ydW5fdG90LiAgKi8KLQkJaWYgKGN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlIT1hdWRpb19wYXVzaW5nKSBSRVRVUk5fVVAoLUVJTlZBTCk7Ci0JCWlmIChmYW1MX2RyaXZlKQotCQkJaT1jY19QbGF5QXVkaW8oY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0LAotCQkJCSAgICAgICBjdXJyZW50X2RyaXZlLT5wb3NfYXVkaW9fZW5kKTsKLQkJZWxzZSBpPWNjX1BhdXNlX1Jlc3VtZSgzKTsKLQkJaWYgKGk8MCkgUkVUVVJOX1VQKC1FSU8pOwotCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT1hdWRpb19wbGF5aW5nOwotCQlSRVRVUk5fVVAoMCk7Ci0JCQotCWNhc2UgQ0RST01QTEFZTVNGOgotCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NUExBWU1TRiBlbnRlcmVkLlxuIik7Ci0jaWZkZWYgU0FGRV9NSVhFRAotCQlpZiAoY3VycmVudF9kcml2ZS0+aGFzX2RhdGE+MSkgUkVUVVJOX1VQKC1FQlVTWSk7Ci0jZW5kaWYgLyogU0FGRV9NSVhFRCAqLyAKLQkJaWYgKGN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPT1hdWRpb19wbGF5aW5nKQotCQl7Ci0JCQlpPWNjX1BhdXNlX1Jlc3VtZSgxKTsKLQkJCWlmIChpPDApIFJFVFVSTl9VUCgtRUlPKTsKLQkJCWk9Y2NfUmVhZFN1YlEoKTsKLQkJCWlmIChpPDApIFJFVFVSTl9VUCgtRUlPKTsKLQkJCWN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19zdGFydD1jdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90b3Q7Ci0JCQlpPWNjX1NlZWsoY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0LDEpOwotCQl9Ci0JCW1lbWNweSgmbXNmLCAodm9pZCAqKSBhcmcsIHNpemVvZihzdHJ1Y3QgY2Ryb21fbXNmKSk7Ci0JCS8qIHZhbHVlcyBjb21lIGFzIG1zZi1iaW4gKi8KLQkJY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0ID0gKG1zZi5jZG1zZl9taW4wPDwxNikgfAotICAgICAgICAgICAgICAgICAgICAgICAgKG1zZi5jZG1zZl9zZWMwPDw4KSB8Ci0JCQkJbXNmLmNkbXNmX2ZyYW1lMDsKLQkJY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX2VuZCA9IChtc2YuY2Rtc2ZfbWluMTw8MTYpIHwKLQkJCShtc2YuY2Rtc2Zfc2VjMTw8OCkgfAotCQkJCW1zZi5jZG1zZl9mcmFtZTE7Ci0JCW1zZyhEQkdfSU9YLCJpb2N0bDogQ0RST01QTEFZTVNGICUwOFggJTA4WFxuIiwKLQkJICAgIGN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19zdGFydCxjdXJyZW50X2RyaXZlLT5wb3NfYXVkaW9fZW5kKTsKLQkJaT1jY19QbGF5QXVkaW8oY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0LGN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19lbmQpOwotCQlpZiAoaTwwKQotCQl7Ci0JCQltc2coREJHX0lORiwiaW9jdGw6IGNjX1BsYXlBdWRpbyByZXR1cm5zICVkXG4iLGkpOwotCQkJRHJpdmVSZXNldCgpOwotCQkJY3VycmVudF9kcml2ZS0+YXVkaW9fc3RhdGU9MDsKLQkJCVJFVFVSTl9VUCgtRUlPKTsKLQkJfQotCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT1hdWRpb19wbGF5aW5nOwotCQlSRVRVUk5fVVAoMCk7Ci0JCQotCWNhc2UgQ0RST01QTEFZVFJLSU5EOiAvKiBQbGF5IGEgdHJhY2suICBUaGlzIGN1cnJlbnRseSBpZ25vcmVzIGluZGV4LiAqLwotCQltc2coREJHX0lPQywiaW9jdGw6IENEUk9NUExBWVRSS0lORCBlbnRlcmVkLlxuIik7Ci0jaWZkZWYgU0FGRV9NSVhFRAotCQlpZiAoY3VycmVudF9kcml2ZS0+aGFzX2RhdGE+MSkgUkVUVVJOX1VQKC1FQlVTWSk7Ci0jZW5kaWYgLyogU0FGRV9NSVhFRCAqLyAKLQkJaWYgKGN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPT1hdWRpb19wbGF5aW5nKQotCQl7Ci0JCQltc2coREJHX0lPWCwiQ0RST01QTEFZVFJLSU5EOiBhbHJlYWR5IGF1ZGlvX3BsYXlpbmcuXG4iKTsKLSNpZiAxCi0JCQlSRVRVUk5fVVAoMCk7IC8qIGp1c3QgbGV0IHVzIHBsYXkgb24gKi8KLSNlbHNlCi0JCQlSRVRVUk5fVVAoLUVJTlZBTCk7IC8qIHBsYXkgb24sIGJ1dCBzYXkgImVycm9yIiAqLwotI2VuZGlmCi0JCX0KLQkJbWVtY3B5KCZ0aSwodm9pZCAqKSBhcmcsc2l6ZW9mKHN0cnVjdCBjZHJvbV90aSkpOwotCQltc2coREJHX0lPWCwiaW9jdGw6IHRyazA6ICVkLCBpbmQwOiAlZCwgdHJrMTolZCwgaW5kMTolZFxuIiwKLQkJICAgIHRpLmNkdGlfdHJrMCx0aS5jZHRpX2luZDAsdGkuY2R0aV90cmsxLHRpLmNkdGlfaW5kMSk7Ci0JCWlmICh0aS5jZHRpX3RyazA8Y3VycmVudF9kcml2ZS0+bl9maXJzdF90cmFjaykgUkVUVVJOX1VQKC1FSU5WQUwpOwotCQlpZiAodGkuY2R0aV90cmswPmN1cnJlbnRfZHJpdmUtPm5fbGFzdF90cmFjaykgUkVUVVJOX1VQKC1FSU5WQUwpOwotCQlpZiAodGkuY2R0aV90cmsxPHRpLmNkdGlfdHJrMCkgdGkuY2R0aV90cmsxPXRpLmNkdGlfdHJrMDsKLQkJaWYgKHRpLmNkdGlfdHJrMT5jdXJyZW50X2RyaXZlLT5uX2xhc3RfdHJhY2spIHRpLmNkdGlfdHJrMT1jdXJyZW50X2RyaXZlLT5uX2xhc3RfdHJhY2s7Ci0JCWN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19zdGFydD1jdXJyZW50X2RyaXZlLT5Ub2NCdWZmZXJbdGkuY2R0aV90cmswXS5hZGRyZXNzOwotCQljdXJyZW50X2RyaXZlLT5wb3NfYXVkaW9fZW5kPWN1cnJlbnRfZHJpdmUtPlRvY0J1ZmZlclt0aS5jZHRpX3RyazErMV0uYWRkcmVzczsKLQkJaT1jY19QbGF5QXVkaW8oY3VycmVudF9kcml2ZS0+cG9zX2F1ZGlvX3N0YXJ0LGN1cnJlbnRfZHJpdmUtPnBvc19hdWRpb19lbmQpOwotCQlpZiAoaTwwKQotCQl7Ci0JCQltc2coREJHX0lORiwiaW9jdGw6IGNjX1BsYXlBdWRpbyByZXR1cm5zICVkXG4iLGkpOwotCQkJRHJpdmVSZXNldCgpOwotCQkJY3VycmVudF9kcml2ZS0+YXVkaW9fc3RhdGU9MDsKLQkJCVJFVFVSTl9VUCgtRUlPKTsKLQkJfQotCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT1hdWRpb19wbGF5aW5nOwotCQlSRVRVUk5fVVAoMCk7Ci0JCQotCWNhc2UgQ0RST01SRUFEVE9DSERSOiAgICAgICAgLyogUmVhZCB0aGUgdGFibGUgb2YgY29udGVudHMgaGVhZGVyICovCi0JCW1zZyhEQkdfSU9DLCJpb2N0bDogQ0RST01SRUFEVE9DSERSIGVudGVyZWQuXG4iKTsKLQkJdG9jaGRyLmNkdGhfdHJrMD1jdXJyZW50X2RyaXZlLT5uX2ZpcnN0X3RyYWNrOwotCQl0b2NoZHIuY2R0aF90cmsxPWN1cnJlbnRfZHJpdmUtPm5fbGFzdF90cmFjazsKLQkJbWVtY3B5KCh2b2lkICopIGFyZywgJnRvY2hkciwgc2l6ZW9mKHN0cnVjdCBjZHJvbV90b2NoZHIpKTsKLQkJUkVUVVJOX1VQKDApOwotCQkKLQljYXNlIENEUk9NUkVBRFRPQ0VOVFJZOiAgICAgIC8qIFJlYWQgYW4gZW50cnkgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzICovCi0JCW1zZyhEQkdfSU9DLCJpb2N0bDogQ0RST01SRUFEVE9DRU5UUlkgZW50ZXJlZC5cbiIpOwotCQltZW1jcHkoJnRvY2VudHJ5LCAodm9pZCAqKSBhcmcsIHNpemVvZihzdHJ1Y3QgY2Ryb21fdG9jZW50cnkpKTsKLQkJaT10b2NlbnRyeS5jZHRlX3RyYWNrOwotCQlpZiAoaT09Q0RST01fTEVBRE9VVCkgaT1jdXJyZW50X2RyaXZlLT5uX2xhc3RfdHJhY2srMTsKLQkJZWxzZSBpZiAoaTxjdXJyZW50X2RyaXZlLT5uX2ZpcnN0X3RyYWNrfHxpPmN1cnJlbnRfZHJpdmUtPm5fbGFzdF90cmFjaykKLSAgICAgICAgICAgICAgICAgIFJFVFVSTl9VUCgtRUlOVkFMKTsKLQkJdG9jZW50cnkuY2R0ZV9hZHI9Y3VycmVudF9kcml2ZS0+VG9jQnVmZmVyW2ldLmN0bF9hZHImMHgwRjsKLQkJdG9jZW50cnkuY2R0ZV9jdHJsPShjdXJyZW50X2RyaXZlLT5Ub2NCdWZmZXJbaV0uY3RsX2Fkcj4+NCkmMHgwRjsKLQkJdG9jZW50cnkuY2R0ZV9kYXRhbW9kZT1jdXJyZW50X2RyaXZlLT5Ub2NCdWZmZXJbaV0uZm9ybWF0OwotCQlpZiAodG9jZW50cnkuY2R0ZV9mb3JtYXQ9PUNEUk9NX01TRikgLyogTVNGLWJpbiByZXF1aXJlZCAqLwotCQl7Ci0JCQl0b2NlbnRyeS5jZHRlX2FkZHIubXNmLm1pbnV0ZT0oY3VycmVudF9kcml2ZS0+VG9jQnVmZmVyW2ldLmFkZHJlc3M+PjE2KSYweDAwRkY7Ci0JCQl0b2NlbnRyeS5jZHRlX2FkZHIubXNmLnNlY29uZD0oY3VycmVudF9kcml2ZS0+VG9jQnVmZmVyW2ldLmFkZHJlc3M+PjgpJjB4MDBGRjsKLQkJCXRvY2VudHJ5LmNkdGVfYWRkci5tc2YuZnJhbWU9Y3VycmVudF9kcml2ZS0+VG9jQnVmZmVyW2ldLmFkZHJlc3MmMHgwMEZGOwotCQl9Ci0JCWVsc2UgaWYgKHRvY2VudHJ5LmNkdGVfZm9ybWF0PT1DRFJPTV9MQkEpIC8qIGJsayByZXF1aXJlZCAqLwotCQkJdG9jZW50cnkuY2R0ZV9hZGRyLmxiYT1tc2YyYmxrKGN1cnJlbnRfZHJpdmUtPlRvY0J1ZmZlcltpXS5hZGRyZXNzKTsKLQkJZWxzZSBSRVRVUk5fVVAoLUVJTlZBTCk7Ci0JCW1lbWNweSgodm9pZCAqKSBhcmcsICZ0b2NlbnRyeSwgc2l6ZW9mKHN0cnVjdCBjZHJvbV90b2NlbnRyeSkpOwotCQlSRVRVUk5fVVAoMCk7Ci0JCQotCWNhc2UgQ0RST01TVE9QOiAgICAgIC8qIFNwaW4gZG93biB0aGUgZHJpdmUgKi8KLQkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVNUT1AgZW50ZXJlZC5cbiIpOwotI2lmZGVmIFNBRkVfTUlYRUQKLQkJaWYgKGN1cnJlbnRfZHJpdmUtPmhhc19kYXRhPjEpIFJFVFVSTl9VUCgtRUJVU1kpOwotI2VuZGlmIC8qIFNBRkVfTUlYRUQgKi8gCi0JCWk9Y2NfUGF1c2VfUmVzdW1lKDEpOwotCQljdXJyZW50X2RyaXZlLT5hdWRpb19zdGF0ZT0wOwotI2lmIDAKLQkJY2NfRHJpdmVSZXNldCgpOwotI2VuZGlmCi0JCVJFVFVSTl9VUChpKTsKLQkJCi0JY2FzZSBDRFJPTVNUQVJUOiAgLyogU3BpbiB1cCB0aGUgZHJpdmUgKi8KLQkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVNUQVJUIGVudGVyZWQuXG4iKTsKLQkJY2NfU3BpblVwKCk7Ci0JCWN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPTA7Ci0JCVJFVFVSTl9VUCgwKTsKLQkJCi0JY2FzZSBDRFJPTVZPTENUUkw6ICAgLyogVm9sdW1lIGNvbnRyb2wgKi8KLQkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVZPTENUUkwgZW50ZXJlZC5cbiIpOwotCQltZW1jcHkoJnZvbGN0cmwsKGNoYXIgKikgYXJnLHNpemVvZih2b2xjdHJsKSk7Ci0JCWN1cnJlbnRfZHJpdmUtPnZvbF9jaGFuMD0wOwotCQljdXJyZW50X2RyaXZlLT52b2xfY3RybDA9dm9sY3RybC5jaGFubmVsMDsKLQkJY3VycmVudF9kcml2ZS0+dm9sX2NoYW4xPTE7Ci0JCWN1cnJlbnRfZHJpdmUtPnZvbF9jdHJsMT12b2xjdHJsLmNoYW5uZWwxOwotCQlpPWNjX1NldFZvbHVtZSgpOwotCQlSRVRVUk5fVVAoMCk7Ci0JCQotCWNhc2UgQ0RST01WT0xSRUFEOiAgIC8qIHJlYWQgVm9sdW1lIHNldHRpbmdzIGZyb20gZHJpdmUgKi8KLQkJbXNnKERCR19JT0MsImlvY3RsOiBDRFJPTVZPTFJFQUQgZW50ZXJlZC5cbiIpOwotCQlzdD1jY19HZXRWb2x1bWUoKTsKLQkJaWYgKHN0PDApIFJFVFVSTl9VUChzdCk7Ci0JCXZvbGN0cmwuY2hhbm5lbDA9Y3VycmVudF9kcml2ZS0+dm9sX2N0cmwwOwotCQl2b2xjdHJsLmNoYW5uZWwxPWN1cnJlbnRfZHJpdmUtPnZvbF9jdHJsMTsKLQkJdm9sY3RybC5jaGFubmVsMj0wOwotCQl2b2xjdHJsLmNoYW5uZWwyPTA7Ci0JCW1lbWNweSgodm9pZCAqKWFyZywmdm9sY3RybCxzaXplb2Yodm9sY3RybCkpOwotCQlSRVRVUk5fVVAoMCk7Ci0KLQljYXNlIENEUk9NU1VCQ0hOTDogICAvKiBHZXQgc3ViY2hhbm5lbCBpbmZvICovCi0JCW1zZyhEQkdfSU9TLCJpb2N0bDogQ0RST01TVUJDSE5MIGVudGVyZWQuXG4iKTsKLQkJLyogQm9ndXMsIEkgY2FuIGRvIGJldHRlciB0aGFuIHRoaXMhIC0tQUpLCi0JCWlmICgoc3Rfc3Bpbm5pbmcpfHwoIXN1YnFfdmFsaWQpKSB7Ci0JCQlpPWNjX1JlYWRTdWJRKCk7Ci0JCQlpZiAoaTwwKSBSRVRVUk5fVVAoLUVJTyk7Ci0JCX0KLQkJKi8KLQkJaT1jY19SZWFkU3ViUSgpOwotCQlpZiAoaTwwKSB7Ci0JCQlqPWNjX1JlYWRFcnJvcigpOyAvKiBjbGVhciBvdXQgZXJyb3Igc3RhdHVzIGZyb20gZHJpdmUgKi8KLQkJCWN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlPUNEUk9NX0FVRElPX05PX1NUQVRVUzsKLQkJCS8qIGdldCBhbmQgc2V0IHRoZSBkaXNrIHN0YXRlIGhlcmUsIAotCQkJcHJvYmFibHkgbm90IHRoZSByaWdodCBwbGFjZSwgYnV0IHdobyBjYXJlcyEKLQkJCUl0IG1ha2VzIGl0IHdvcmsgcHJvcGVybHkhIC0tQUpLICovCi0JCQlpZiAoY3VycmVudF9kcml2ZS0+Q0RfY2hhbmdlZD09MHhGRikgewotCQkJCW1zZyhEQkdfMDAwLCJEaXNrIGNoYW5nZWQgZGV0ZWN0XG4iKTsKLQkJCQljdXJyZW50X2RyaXZlLT5kaXNrc3RhdGVfZmxhZ3MgJj0gfmNkX3NpemVfYml0OwotCQkJfQotCQkJUkVUVVJOX1VQKC1FSU8pOwotCQl9Ci0JCWlmIChjdXJyZW50X2RyaXZlLT5DRF9jaGFuZ2VkPT0weEZGKSB7Ci0JCQkvKiByZXJlYWQgdGhlIFRPQyBiZWNhdXNlIHRoZSBkaXNrIGhhcyBjaGFuZ2VkISAtLUFKSyAqLwotCQkJbXNnKERCR18wMDAsIkRpc2sgY2hhbmdlZCBTVElMTCBkZXRlY3RlZCwgcmVyZWFkaW5nIFRPQyFcbiIpOwotCQkJaT1EaXNrSW5mbygpOwotCQkJaWYoaT09MCkgewotCQkJCWN1cnJlbnRfZHJpdmUtPkNEX2NoYW5nZWQ9MHgwMDsgLyogY2QgaGFzIGNoYW5nZWQsIHByb2NlZGUsICovCi0JCQkJUkVUVVJOX1VQKC1FSU8pOyAvKiBhbmQgZ2V0IFRPQywgZXRjIG9uIG5leHQgdHJ5ISAtLUFKSyAqLwotCQkJfSBlbHNlIHsKLQkJCQlSRVRVUk5fVVAoLUVJTyk7IC8qIHdlIHdlcmVuJ3QgcmVhZHkgeWV0ISAtLUFKSyAqLwotCQkJfQotCQl9Ci0JCW1lbWNweSgmU0MsICh2b2lkICopIGFyZywgc2l6ZW9mKHN0cnVjdCBjZHJvbV9zdWJjaG5sKSk7Ci0JCS8qIAotCQkJVGhpcyB2aXJ0dWFsIGNyYXAgaXMgdmVyeSBib2d1cyEgCi0JCQlJdCBkb2Vzbid0IGRldGVjdCB3aGVuIHRoZSBjZCBpcyBkb25lIHBsYXlpbmcgYXVkaW8hCi0JCQlMZXRzIGRvIHRoaXMgcmlnaHQgd2l0aCBwcm9wZXIgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZGluZyEKLQkJKi8KLQkJY2NfUmVhZFN0YXR1cygpOwotCQlpPVJlc3BvbnNlU3RhdHVzKCk7Ci0JCW1zZyhEQkdfMDAwLCJEcml2ZSBTdGF0dXM6IGRvb3JfbG9ja2VkID0lZC5cbiIsIHN0X2Rvb3JfbG9ja2VkKTsKLQkJbXNnKERCR18wMDAsIkRyaXZlIFN0YXR1czogZG9vcl9jbG9zZWQgPSVkLlxuIiwgc3RfZG9vcl9jbG9zZWQpOwotCQltc2coREJHXzAwMCwiRHJpdmUgU3RhdHVzOiBjYWRkeV9pbiA9JWQuXG4iLCBzdF9jYWRkeV9pbik7Ci0JCW1zZyhEQkdfMDAwLCJEcml2ZSBTdGF0dXM6IGRpc2tfb2sgPSVkLlxuIiwgc3RfZGlza29rKTsKLQkJbXNnKERCR18wMDAsIkRyaXZlIFN0YXR1czogc3Bpbm5pbmcgPSVkLlxuIiwgc3Rfc3Bpbm5pbmcpOwotCQltc2coREJHXzAwMCwiRHJpdmUgU3RhdHVzOiBidXN5ID0lZC5cbiIsIHN0X2J1c3kpOwotCQkvKiBzdF9idXN5IGluZGljYXRlcyBpZiBpdCdzIF9BQ1RVQUxMWV8gcGxheWluZyBhdWRpbyAqLwotCQlzd2l0Y2ggKGN1cnJlbnRfZHJpdmUtPmF1ZGlvX3N0YXRlKQotCQl7Ci0JCWNhc2UgYXVkaW9fcGxheWluZzoKLQkJCWlmKHN0X2J1c3k9PTApIHsKLQkJCQkvKiBDRCBoYXMgc3RvcHBlZCBwbGF5aW5nIGF1ZGlvIC0tQUpLICovCi0JCQkJY3VycmVudF9kcml2ZS0+YXVkaW9fc3RhdGU9YXVkaW9fY29tcGxldGVkOwotCQkJCVNDLmNkc2NfYXVkaW9zdGF0dXM9Q0RST01fQVVESU9fQ09NUExFVEVEOwotCQkJfSBlbHNlIHsKLQkJCQlTQy5jZHNjX2F1ZGlvc3RhdHVzPUNEUk9NX0FVRElPX1BMQVk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBhdWRpb19wYXVzaW5nOgotCQkJU0MuY2RzY19hdWRpb3N0YXR1cz1DRFJPTV9BVURJT19QQVVTRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBhdWRpb19jb21wbGV0ZWQ6Ci0JCQlTQy5jZHNjX2F1ZGlvc3RhdHVzPUNEUk9NX0FVRElPX0NPTVBMRVRFRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJU0MuY2RzY19hdWRpb3N0YXR1cz1DRFJPTV9BVURJT19OT19TVEFUVVM7Ci0JCQlicmVhazsKLQkJfQotCQlTQy5jZHNjX2Fkcj1jdXJyZW50X2RyaXZlLT5TdWJRX2N0bF9hZHI7Ci0JCVNDLmNkc2NfY3RybD1jdXJyZW50X2RyaXZlLT5TdWJRX2N0bF9hZHI+PjQ7Ci0JCVNDLmNkc2NfdHJrPWJjZDJiaW4oY3VycmVudF9kcml2ZS0+U3ViUV90cmspOwotCQlTQy5jZHNjX2luZD1iY2QyYmluKGN1cnJlbnRfZHJpdmUtPlN1YlFfcG50X2lkeCk7Ci0JCWlmIChTQy5jZHNjX2Zvcm1hdD09Q0RST01fTEJBKQotCQl7Ci0JCQlTQy5jZHNjX2Fic2FkZHIubGJhPW1zZjJibGsoY3VycmVudF9kcml2ZS0+U3ViUV9ydW5fdG90KTsKLQkJCVNDLmNkc2NfcmVsYWRkci5sYmE9bXNmMmJsayhjdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90cmspOwotCQl9Ci0JCWVsc2UgLyogbm90IG9ubHkgaWYgKFNDLmNkc2NfZm9ybWF0PT1DRFJPTV9NU0YpICovCi0JCXsKLQkJCVNDLmNkc2NfYWJzYWRkci5tc2YubWludXRlPShjdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90b3Q+PjE2KSYweDAwRkY7Ci0JCQlTQy5jZHNjX2Fic2FkZHIubXNmLnNlY29uZD0oY3VycmVudF9kcml2ZS0+U3ViUV9ydW5fdG90Pj44KSYweDAwRkY7Ci0JCQlTQy5jZHNjX2Fic2FkZHIubXNmLmZyYW1lPWN1cnJlbnRfZHJpdmUtPlN1YlFfcnVuX3RvdCYweDAwRkY7Ci0JCQlTQy5jZHNjX3JlbGFkZHIubXNmLm1pbnV0ZT0oY3VycmVudF9kcml2ZS0+U3ViUV9ydW5fdHJrPj4xNikmMHgwMEZGOwotCQkJU0MuY2RzY19yZWxhZGRyLm1zZi5zZWNvbmQ9KGN1cnJlbnRfZHJpdmUtPlN1YlFfcnVuX3Ryaz4+OCkmMHgwMEZGOwotCQkJU0MuY2RzY19yZWxhZGRyLm1zZi5mcmFtZT1jdXJyZW50X2RyaXZlLT5TdWJRX3J1bl90cmsmMHgwMEZGOwotCQl9Ci0JCW1lbWNweSgodm9pZCAqKSBhcmcsICZTQywgc2l6ZW9mKHN0cnVjdCBjZHJvbV9zdWJjaG5sKSk7Ci0JCW1zZyhEQkdfSU9TLCJDRFJPTVNVQkNITkw6ICUxWCAlMDJYICUwOFggJTA4WCAlMDJYICUwMlggJTA2WCAlMDZYXG4iLAotCQkgICAgU0MuY2RzY19mb3JtYXQsU0MuY2RzY19hdWRpb3N0YXR1cywKLQkJICAgIFNDLmNkc2NfYWRyLFNDLmNkc2NfY3RybCwKLQkJICAgIFNDLmNkc2NfdHJrLFNDLmNkc2NfaW5kLAotCQkgICAgU0MuY2RzY19hYnNhZGRyLFNDLmNkc2NfcmVsYWRkcik7Ci0JCVJFVFVSTl9VUCgwKTsKLQkJCi0JZGVmYXVsdDoKLQkJbXNnKERCR19JT0MsImlvY3RsOiB1bmtub3duIGZ1bmN0aW9uIHJlcXVlc3QgJTA0WFxuIiwgY21kKTsKLQkJUkVUVVJOX1VQKC1FSU5WQUwpOwotCX0gLyogZW5kIHN3aXRjaChjbWQpICovCi19Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qCi0gKiAgVGFrZSBjYXJlIG9mIHRoZSBkaWZmZXJlbnQgYmxvY2sgc2l6ZXMgYmV0d2VlbiBjZHJvbSBhbmQgTGludXguCi0gKi8KLXN0YXRpYyB2b2lkIHNicF90cmFuc2ZlcihzdHJ1Y3QgcmVxdWVzdCAqcmVxKQotewotCWxvbmcgb2ZmczsKLQkKLQl3aGlsZSAoIChyZXEtPm5yX3NlY3RvcnMgPiAwKSAmJgotCSAgICAgICAocmVxLT5zZWN0b3IvNCA+PSBjdXJyZW50X2RyaXZlLT5zYnBfZmlyc3RfZnJhbWUpICYmCi0JICAgICAgIChyZXEtPnNlY3Rvci80IDw9IGN1cnJlbnRfZHJpdmUtPnNicF9sYXN0X2ZyYW1lKSApCi0JewotCQlvZmZzID0gKHJlcS0+c2VjdG9yIC0gY3VycmVudF9kcml2ZS0+c2JwX2ZpcnN0X2ZyYW1lICogNCkgKiA1MTI7Ci0JCW1lbWNweShyZXEtPmJ1ZmZlciwgY3VycmVudF9kcml2ZS0+c2JwX2J1ZiArIG9mZnMsIDUxMik7Ci0JCXJlcS0+bnJfc2VjdG9ycy0tOwotCQlyZXEtPnNlY3RvcisrOwotCQlyZXEtPmJ1ZmZlciArPSA1MTI7Ci0JfQotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKgotICogIHNwZWNpYWwgZW5kX3JlcXVlc3QgZm9yIHNicGNkIHRvIHNvbHZlIENVUlJFTlQ9PU5VTEwgYnVnLiAoR1RMKQotICogIEdUTCA9IEdvbnphbG8gVG9ybmFyaWEgPHRvcm5hcmlhQGNtYXQuZWR1LnV5PgotICoKLSAqICBUaGlzIGlzIGEga2x1ZGdlIHNvIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGVuZF9yZXF1ZXN0LgotICogIFdlIHB1dCB0aGUgcmVxIHdlIHRha2Ugb3V0IGFmdGVyIElOSVRfUkVRVUVTVCBpbiB0aGUgcmVxdWVzdHMgbGlzdCwKLSAqICBzbyB0aGF0IGVuZF9yZXF1ZXN0IHdpbGwgZGlzY2FyZCBpdC4gCi0gKgotICogIFRoZSBidWcgY291bGQgYmUgcHJlc2VudCBpbiBvdGhlciBibG9jayBkZXZpY2VzLCBwZXJoYXBzIHdlCi0gKiAgc2hvdWxkIG1vZGlmeSBJTklUX1JFUVVFU1QgYW5kIGVuZF9yZXF1ZXN0IGluc3RlYWQsIGFuZAotICogIGNoYW5nZSBldmVyeSBibG9jayBkZXZpY2UuLiAKLSAqCi0gKiAgQ291bGQgYmUgYSByYWNlIGhlcmU/PyBDb3VsZCBlLmcuIGEgdGltZXIgaW50ZXJydXB0IHNjaGVkdWxlKCkgdXM/Ci0gKiAgSWYgc28sIHdlIHNob3VsZCBjb3B5IGVuZF9yZXF1ZXN0IGhlcmUsIGFuZCBkbyBpdCByaWdodC4uIChvcgotICogIG1vZGlmeSBlbmRfcmVxdWVzdCBhbmQgdGhlIGJsb2NrIGRldmljZXMpLgotICoKLSAqICBJbiBhbnkgY2FzZSwgdGhlIHJhY2UgaGVyZSB3b3VsZCBiZSBtdWNoIHNtYWxsIHRoYW4gaXQgd2FzLCBhbmQKLSAqICBJIGNvdWxkbid0IHJlcHJvZHVjZS4uCi0gKgotICogIFRoZSByYWNlIGNvdWxkIGJlOiBzdXBwb3NlIENVUlJFTlQ9PU5VTEwuIFdlIHB1dCBvdXIgcmVxIGluIHRoZSBsaXN0LAotICogIGFuZCB3ZSBhcmUgc2NoZWR1bGVkLiBPdGhlciBwcm9jZXNzIHRha2VzIG92ZXIsIGFuZCBnZXRzIGludG8KLSAqICBkb19zYnBjZF9yZXF1ZXN0LiBJdCBzZWVzIENVUlJFTlQhPU5VTEwgKGl0IGlzID09IHRvIG91ciByZXEpLCBzbwotICogIHByb2NlZWRzLiBJdCBlbmRzLCBzbyBDVVJSRU5UIGlzIG5vdyBOVUxMLi4gTm93IHdlIGF3YWtlIHNvbWV3aGVyZSBpbgotICogIGVuZF9yZXF1ZXN0LCBidXQgbm93IENVUlJFTlQ9PU5VTEwuLi4gb29wcyEKLSAqCi0gKi8KLSN1bmRlZiBERUJVR19HVEwKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKgotICogIEkvTyByZXF1ZXN0IHJvdXRpbmUsIGNhbGxlZCBmcm9tIExpbnV4IGtlcm5lbC4KLSAqLwotc3RhdGljIHZvaWQgZG9fc2JwY2RfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiBxKQotewotCXVfaW50IGJsb2NrOwotCXVfaW50IG5zZWN0OwotCWludCBzdGF0dXNfdHJpZXMsIGRhdGFfdHJpZXM7Ci0Jc3RydWN0IHJlcXVlc3QgKnJlcTsKLQlzdHJ1Y3Qgc2JwY2RfZHJpdmUgKnA7Ci0jaWZkZWYgREVCVUdfR1RMCi0Jc3RhdGljIGludCB4eF9ucj0wOwotCWludCB4bnI7Ci0jZW5kaWYKLQotIHJlcXVlc3RfbG9vcDoKLSNpZmRlZiBERUJVR19HVEwKLQl4bnI9Kyt4eF9ucjsKLQotCXJlcSA9IGVsdl9uZXh0X3JlcXVlc3QocSk7Ci0KLQlpZiAoIXJlcSkKLQl7Ci0JCXByaW50ayggImRvX3NicGNkX3JlcXVlc3RbJWRpXShOVUxMKSwgUGlkOiVkLCBUaW1lOiVsaVxuIiwKLQkJCXhuciwgY3VycmVudC0+cGlkLCBqaWZmaWVzKTsKLQkJcHJpbnRrKCAiZG9fc2JwY2RfcmVxdWVzdFslZG9dKE5VTEwpIGVuZCAwIChudWxsKSwgVGltZTolbGlcbiIsCi0JCQl4bnIsIGppZmZpZXMpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpbnRrKCIgZG9fc2JwY2RfcmVxdWVzdFslZGldKCVwOiVsZCslbGQpLCBQaWQ6JWQsIFRpbWU6JWxpXG4iLAotCQl4bnIsIHJlcSwgcmVxLT5zZWN0b3IsIHJlcS0+bnJfc2VjdG9ycywgY3VycmVudC0+cGlkLCBqaWZmaWVzKTsKLSNlbmRpZgotCi0JcmVxID0gZWx2X25leHRfcmVxdWVzdChxKTsJLyogdGFrZSBvdXQgb3VyIHJlcXVlc3Qgc28gbm8gb3RoZXIgKi8KLQlpZiAoIXJlcSkKLQkJcmV0dXJuOwotCi0JaWYgKHJlcSAtPiBzZWN0b3IgPT0gLTEpCi0JCWVuZF9yZXF1ZXN0KHJlcSwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCi0JZG93bigmaW9jdGxfcmVhZF9zZW0pOwotCWlmIChycV9kYXRhX2RpcihlbHZfbmV4dF9yZXF1ZXN0KHEpKSAhPSBSRUFEKQotCXsKLQkJbXNnKERCR19JTkYsICJiYWQgY21kICVkXG4iLCByZXEtPmNtZFswXSk7Ci0JCWdvdG8gZXJyX2RvbmU7Ci0JfQotCXAgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLSNpZiBPTERfQlVTWQotCXdoaWxlIChidXN5X2F1ZGlvKSBzYnBfc2xlZXAoSFopOyAvKiB3YWl0IGEgYml0ICovCi0JYnVzeV9kYXRhPTE7Ci0jZW5kaWYgLyogT0xEX0JVU1kgKi8KLQkKLQlpZiAocC0+YXVkaW9fc3RhdGU9PWF1ZGlvX3BsYXlpbmcpIGdvdG8gZXJyX2RvbmU7Ci0JaWYgKHAgIT0gY3VycmVudF9kcml2ZSkKLQkJc3dpdGNoX2RyaXZlKHApOwotCi0JYmxvY2sgPSByZXEtPnNlY3RvcjsgLyogYWx3YXlzIG51bWJlcmVkIGFzIDUxMi1ieXRlLXBpZWNlcyAqLwotCW5zZWN0ID0gcmVxLT5ucl9zZWN0b3JzOyAvKiBhbHdheXMgY291bnRlZCBhcyA1MTItYnl0ZS1waWVjZXMgKi8KLQkKLQltc2coREJHX0JTWiwicmVhZCBzZWN0b3IgJWQgKCVkIHNlY3RvcnMpXG4iLCBibG9jaywgbnNlY3QpOwotI2lmIDAKLQltc2coREJHX01VTCwicmVhZCBMQkEgJWRcbiIsIGJsb2NrLzQpOwotI2VuZGlmCi0JCi0Jc2JwX3RyYW5zZmVyKHJlcSk7Ci0JLyogaWYgd2Ugc2F0aXNmaWVkIHRoZSByZXF1ZXN0IGZyb20gdGhlIGJ1ZmZlciwgd2UncmUgZG9uZS4gKi8KLQlpZiAocmVxLT5ucl9zZWN0b3JzID09IDApCi0JewotI2lmZGVmIERFQlVHX0dUTAotCQlwcmludGsoIiBkb19zYnBjZF9yZXF1ZXN0WyVkb10oJXA6JWxkKyVsZCkgZW5kIDIsIFRpbWU6JWxpXG4iLAotCQkJeG5yLCByZXEsIHJlcS0+c2VjdG9yLCByZXEtPm5yX3NlY3RvcnMsIGppZmZpZXMpOwotI2VuZGlmCi0JCXVwKCZpb2N0bF9yZWFkX3NlbSk7Ci0JCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JCWVuZF9yZXF1ZXN0KHJlcSwgMSk7Ci0JCWdvdG8gcmVxdWVzdF9sb29wOwotCX0KLQotI2lmZGVmIEZVVFVSRQotCWk9cHJlcGFyZSgwLDApOyAvKiBhdCBtb21lbnQgbm90IHJlYWxseSBhIGhhc3NsZSBjaGVjaywgYnV0IC4uLiAqLwotCWlmIChpIT0wKQotCQltc2coREJHX0lORiwiXCJwcmVwYXJlXCIgdGVsbHMgZXJyb3IgJWQgLS0gaWdub3JlZFxuIiwgaSk7Ci0jZW5kaWYgLyogRlVUVVJFICovIAotCQotCWlmICghc3Rfc3Bpbm5pbmcpIGNjX1NwaW5VcCgpOwotCQotCWZvciAoZGF0YV90cmllcz1uX3JldHJpZXM7IGRhdGFfdHJpZXMgPiAwOyBkYXRhX3RyaWVzLS0pCi0JewotCQlmb3IgKHN0YXR1c190cmllcz0zOyBzdGF0dXNfdHJpZXMgPiAwOyBzdGF0dXNfdHJpZXMtLSkKLQkJewotCQkJZmxhZ3NfY21kX291dCB8PSBmX3Jlc3BvMzsKLQkJCWNjX1JlYWRTdGF0dXMoKTsKLQkJCWlmIChzYnBfc3RhdHVzKCkgIT0gMCkgYnJlYWs7Ci0JCQlpZiAoc3RfY2hlY2spIGNjX1JlYWRFcnJvcigpOwotCQkJc2JwX3NsZWVwKDEpOyAgICAvKiB3YWl0IGEgYml0LCB0cnkgYWdhaW4gKi8KLQkJfQotCQlpZiAoc3RhdHVzX3RyaWVzID09IDApCi0JCXsKLQkJCW1zZyhEQkdfSU5GLCJzYnBfc3RhdHVzOiBmYWlsZWQgYWZ0ZXIgMyB0cmllcyBpbiBsaW5lICVkXG4iLCBfX0xJTkVfXyk7Ci0JCQlicmVhazsKLQkJfQotCQkKLQkJc2JwX3JlYWRfY21kKHJlcSk7Ci0JCXNicF9zbGVlcCgwKTsKLQkJaWYgKHNicF9kYXRhKHJlcSkgIT0gMCkKLQkJewotI2lmZGVmIFNBRkVfTUlYRUQKLQkJCWN1cnJlbnRfZHJpdmUtPmhhc19kYXRhPTI7IC8qIGlzIHJlYWxseSBhIGRhdGEgZGlzayAqLwotI2VuZGlmIC8qIFNBRkVfTUlYRUQgKi8gCi0jaWZkZWYgREVCVUdfR1RMCi0JCQlwcmludGsoIiBkb19zYnBjZF9yZXF1ZXN0WyVkb10oJXA6JWxkKyVsZCkgZW5kIDMsIFRpbWU6JWxpXG4iLAotCQkJCXhuciwgcmVxLCByZXEtPnNlY3RvciwgcmVxLT5ucl9zZWN0b3JzLCBqaWZmaWVzKTsKLSNlbmRpZgotCQkJdXAoJmlvY3RsX3JlYWRfc2VtKTsKLQkJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JCQllbmRfcmVxdWVzdChyZXEsIDEpOwotCQkJZ290byByZXF1ZXN0X2xvb3A7Ci0JCX0KLQl9Ci0JCi0gZXJyX2RvbmU6Ci0jaWYgT0xEX0JVU1kKLQlidXN5X2RhdGE9MDsKLSNlbmRpZiAvKiBPTERfQlVTWSAqLwotI2lmZGVmIERFQlVHX0dUTAotCXByaW50aygiIGRvX3NicGNkX3JlcXVlc3RbJWRvXSglcDolbGQrJWxkKSBlbmQgNCAoZXJyb3IpLCBUaW1lOiVsaVxuIiwKLQkJeG5yLCByZXEsIHJlcS0+c2VjdG9yLCByZXEtPm5yX3NlY3RvcnMsIGppZmZpZXMpOwotI2VuZGlmCi0JdXAoJmlvY3RsX3JlYWRfc2VtKTsKLQlzYnBfc2xlZXAoMCk7ICAgIC8qIHdhaXQgYSBiaXQsIHRyeSBhZ2FpbiAqLwotCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JZW5kX3JlcXVlc3QocmVxLCAwKTsKLQlnb3RvIHJlcXVlc3RfbG9vcDsKLX0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyoKLSAqICBidWlsZCBhbmQgc2VuZCB0aGUgUkVBRCBjb21tYW5kLgotICovCi1zdGF0aWMgdm9pZCBzYnBfcmVhZF9jbWQoc3RydWN0IHJlcXVlc3QgKnJlcSkKLXsKLSN1bmRlZiBPTEQKLQotCWludCBpOwotCWludCBibG9jazsKLQkKLQljdXJyZW50X2RyaXZlLT5zYnBfZmlyc3RfZnJhbWU9Y3VycmVudF9kcml2ZS0+c2JwX2xhc3RfZnJhbWU9LTE7ICAgICAgLyogcHVyZ2UgYnVmZmVyICovCi0JY3VycmVudF9kcml2ZS0+c2JwX2N1cnJlbnQgPSAwOwotCWJsb2NrPXJlcS0+c2VjdG9yLzQ7Ci0JaWYgKGJsb2NrK2N1cnJlbnRfZHJpdmUtPnNicF9idWZzaXogPD0gY3VycmVudF9kcml2ZS0+Q0RzaXplX2ZybSkKLQkJY3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzID0gY3VycmVudF9kcml2ZS0+c2JwX2J1ZnNpejsKLQllbHNlCi0JewotCQljdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXM9Y3VycmVudF9kcml2ZS0+Q0RzaXplX2ZybS1ibG9jazsKLQkJLyogYXZvaWQgcmVhZGluZyBwYXN0IGVuZCBvZiBkYXRhICovCi0JCWlmIChjdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXMgPCAxKQotCQl7Ci0JCQltc2coREJHX0lORiwicmVxdWVzdGVkIGZyYW1lICVkLCBDRCBzaXplICVkID8/P1xuIiwKLQkJCSAgICBibG9jaywgY3VycmVudF9kcml2ZS0+Q0RzaXplX2ZybSk7Ci0JCQljdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXM9MTsKLQkJfQotCX0KLQkKLQlmbGFnc19jbWRfb3V0ID0gZl9wdXRjbWQgfCBmX3Jlc3BvMiB8IGZfUmVzcG9uc2VTdGF0dXMgfCBmX29iZXlfcF9jaGVjazsKLQljbHJfY21kYnVmKCk7Ci0JaWYgKGZhbVZfZHJpdmUpCi0JICB7Ci0JICAgIGRydmNtZFswXT1DTURWX1JFQUQ7Ci0JICAgIGxiYTJtc2YoYmxvY2ssJmRydmNtZFsxXSk7IC8qIG1zZi1iY2QgZm9ybWF0IHJlcXVpcmVkICovCi0JICAgIGJpbjJiY2R4KCZkcnZjbWRbMV0pOwotCSAgICBiaW4yYmNkeCgmZHJ2Y21kWzJdKTsKLQkgICAgYmluMmJjZHgoJmRydmNtZFszXSk7Ci0JICAgIGRydmNtZFs0XT1jdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXM+Pjg7Ci0JICAgIGRydmNtZFs1XT1jdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXMmMHhmZjsKLQkgICAgZHJ2Y21kWzZdPTB4MDI7IC8qIGZsYWcgIm1zZi1iY2QiICovCi0JfQotCWVsc2UgaWYgKGZhbTBMX2RyaXZlKQotCXsKLQkJZmxhZ3NfY21kX291dCB8PSBmX2xvcHN0YSB8IGZfZ2V0c3RhIHwgZl9iaXQxOwotCQlpZiAoY3VycmVudF9kcml2ZS0+eGFfYnl0ZT09MHgyMCkKLQkJewotCQkJY21kX3R5cGU9UkVBRF9NMjsKLQkJCWRydmNtZFswXT1DTUQwX1JFQURfWEE7IC8qICJyZWFkIFhBIGZyYW1lcyIsIG9sZCBkcml2ZXMgKi8KLQkJCWRydmNtZFsxXT0oYmxvY2s+PjE2KSYweDBmZjsKLQkJCWRydmNtZFsyXT0oYmxvY2s+PjgpJjB4MGZmOwotCQkJZHJ2Y21kWzNdPWJsb2NrJjB4MGZmOwotCQkJZHJ2Y21kWzRdPShjdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXM+PjgpJjB4MGZmOwotCQkJZHJ2Y21kWzVdPWN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcyYweDBmZjsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWRydmNtZFswXT1DTUQwX1JFQUQ7IC8qICJyZWFkIGZyYW1lcyIsIG9sZCBkcml2ZXMgKi8KLQkJCWlmIChjdXJyZW50X2RyaXZlLT5kcnZfdHlwZT49ZHJ2XzIwMSkKLQkJCXsKLQkJCQlsYmEybXNmKGJsb2NrLCZkcnZjbWRbMV0pOyAvKiBtc2YtYmNkIGZvcm1hdCByZXF1aXJlZCAqLwotCQkJCWJpbjJiY2R4KCZkcnZjbWRbMV0pOwotCQkJCWJpbjJiY2R4KCZkcnZjbWRbMl0pOwotCQkJCWJpbjJiY2R4KCZkcnZjbWRbM10pOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWRydmNtZFsxXT0oYmxvY2s+PjE2KSYweDBmZjsKLQkJCQlkcnZjbWRbMl09KGJsb2NrPj44KSYweDBmZjsKLQkJCQlkcnZjbWRbM109YmxvY2smMHgwZmY7Ci0JCQl9Ci0JCQlkcnZjbWRbNF09KGN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcz4+OCkmMHgwZmY7Ci0JCQlkcnZjbWRbNV09Y3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzJjB4MGZmOwotCQkJZHJ2Y21kWzZdPShjdXJyZW50X2RyaXZlLT5kcnZfdHlwZTxkcnZfMjAxKT8wOjI7IC8qIGZsYWcgImxiYSBvciBtc2YtYmNkIGZvcm1hdCIgKi8KLQkJfQotCX0KLQllbHNlIGlmIChmYW0xX2RyaXZlKQotCXsKLQkJZHJ2Y21kWzBdPUNNRDFfUkVBRDsKLQkJbGJhMm1zZihibG9jaywmZHJ2Y21kWzFdKTsgLyogbXNmLWJpbiBmb3JtYXQgcmVxdWlyZWQgKi8KLQkJZHJ2Y21kWzVdPShjdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXM+PjgpJjB4MGZmOwotCQlkcnZjbWRbNl09Y3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzJjB4MGZmOwotCX0KLQllbHNlIGlmIChmYW0yX2RyaXZlKQotCXsKLQkJZHJ2Y21kWzBdPUNNRDJfUkVBRDsKLQkJbGJhMm1zZihibG9jaywmZHJ2Y21kWzFdKTsgLyogbXNmLWJpbiBmb3JtYXQgcmVxdWlyZWQgKi8KLQkJZHJ2Y21kWzRdPShjdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXM+PjgpJjB4MGZmOwotCQlkcnZjbWRbNV09Y3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzJjB4MGZmOwotCQlkcnZjbWRbNl09MHgwMjsKLQl9Ci0JZWxzZSBpZiAoZmFtVF9kcml2ZSkKLQl7Ci0JCWRydmNtZFswXT1DTURUX1JFQUQ7Ci0JCWRydmNtZFsyXT0oYmxvY2s+PjI0KSYweDBmZjsKLQkJZHJ2Y21kWzNdPShibG9jaz4+MTYpJjB4MGZmOwotCQlkcnZjbWRbNF09KGJsb2NrPj44KSYweDBmZjsKLQkJZHJ2Y21kWzVdPWJsb2NrJjB4MGZmOwotCQlkcnZjbWRbN109KGN1cnJlbnRfZHJpdmUtPnNicF9yZWFkX2ZyYW1lcz4+OCkmMHgwZmY7Ci0JCWRydmNtZFs4XT1jdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXMmMHgwZmY7Ci0JfQotCWZsYWdzX2NtZF9vdXQ9Zl9wdXRjbWQ7Ci0JcmVzcG9uc2VfY291bnQ9MDsKLQlpPWNtZF9vdXQoKTsKLQlpZiAoaTwwKSBtc2coREJHX0lORiwiZXJyb3IgZ2l2aW5nIFJFQUQgY29tbWFuZDogJTBkXG4iLCBpKTsKLQlyZXR1cm47Ci19Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qCi0gKiAgQ2hlY2sgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHJlYWQtZGF0YSBjb21tYW5kLiAgT24gc3VjY2VzcywgcmVhZAotICogIHRoZSBjdXJyZW50X2RyaXZlLT5zYnBfYnVmc2l6ICogMjA0OCBieXRlcyBvZiBkYXRhIGZyb20gdGhlIGRpc2sgaW50byBidWZmZXIuCi0gKi8KLXN0YXRpYyBpbnQgc2JwX2RhdGEoc3RydWN0IHJlcXVlc3QgKnJlcSkKLXsKLQlpbnQgaT0wLCBqPTAsIGwsIGZyYW1lOwotCXVfaW50IHRyeT0wOwotCXVfbG9uZyB0aW1lb3V0OwotCXVfY2hhciAqcDsKLQl1X2ludCBkYXRhX3RyaWVzID0gMDsKLQl1X2ludCBkYXRhX3dhaXRzID0gMDsKLQl1X2ludCBkYXRhX3JldHJ5aW5nID0gMDsKLQlpbnQgZXJyb3JfZmxhZzsKLQlpbnQgeGFfY291bnQ7Ci0JaW50IG1heF9sYXRlbmN5OwotCWludCBzdWNjZXNzOwotCWludCB3YWl0OwotCWludCBkdXJhdGlvbjsKLQkKLQllcnJvcl9mbGFnPTA7Ci0Jc3VjY2Vzcz0wOwotI2lmIExPTkdfVElNSU5HCi0JbWF4X2xhdGVuY3k9OSpIWjsKLSNlbHNlCi0JaWYgKGN1cnJlbnRfZHJpdmUtPmZfbXVsdGlzZXNzaW9uKSBtYXhfbGF0ZW5jeT0xNSpIWjsKLQllbHNlIG1heF9sYXRlbmN5PTUqSFo7Ci0jZW5kaWYKLQlkdXJhdGlvbj1qaWZmaWVzOwotCWZvciAoZnJhbWU9MDtmcmFtZTxjdXJyZW50X2RyaXZlLT5zYnBfcmVhZF9mcmFtZXMmJiFlcnJvcl9mbGFnOyBmcmFtZSsrKQotCXsKLQkJU0JQQ0RfQ0xJOwotCQkKLQkJZGVsX3RpbWVyKCZkYXRhX3RpbWVyKTsKLQkJZGF0YV90aW1lci5leHBpcmVzPWppZmZpZXMrbWF4X2xhdGVuY3k7Ci0JCXRpbWVkX291dF9kYXRhPTA7Ci0JCWFkZF90aW1lcigmZGF0YV90aW1lcik7Ci0JCXdoaWxlICghdGltZWRfb3V0X2RhdGEpIAotCQl7Ci0JCQlpZiAoY3VycmVudF9kcml2ZS0+Zl9tdWx0aXNlc3Npb24pIHRyeT1tYXh0aW1fZGF0YSo0OwotCQkJZWxzZSB0cnk9bWF4dGltX2RhdGE7Ci0JCQltc2coREJHXzAwMCwic2JwX2RhdGE6IENEaV9zdGF0dXMgbG9vcDogdHJ5PSVkLlxuIix0cnkpOwotCQkJZm9yICggOyB0cnkhPTA7dHJ5LS0pCi0JCQl7Ci0JCQkJaj1pbmIoQ0RpX3N0YXR1cyk7Ci0JCQkJaWYgKCEoaiZzX25vdF9kYXRhX3JlYWR5KSkgYnJlYWs7Ci0JCQkJaWYgKCEoaiZzX25vdF9yZXN1bHRfcmVhZHkpKSBicmVhazsKLQkJCQlpZiAoZmFtMExWX2RyaXZlKSBpZiAoaiZzX2F0dGVudGlvbikgYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoIShqJnNfbm90X2RhdGFfcmVhZHkpKSBnb3RvIGRhdGFfcmVhZHk7Ci0JCQlpZiAodHJ5PT0wKQotCQkJewotCQkJCWlmIChkYXRhX3JldHJ5aW5nID09IDApIGRhdGFfd2FpdHMrKzsKLQkJCQlkYXRhX3JldHJ5aW5nID0gMTsKLQkJCQltc2coREJHXzAwMCwic2JwX2RhdGE6IENEaV9zdGF0dXMgbG9vcDogc2xlZXBpbmcuXG4iKTsKLQkJCQlzYnBfc2xlZXAoMSk7Ci0JCQkJdHJ5ID0gMTsKLQkJCX0KLQkJfQotCQltc2coREJHX0lORiwic2JwX2RhdGE6IENEaV9zdGF0dXMgbG9vcCBleHBpcmVkLlxuIik7Ci0JZGF0YV9yZWFkeToKLQkJZGVsX3RpbWVyKCZkYXRhX3RpbWVyKTsKLQotCQlpZiAodGltZWRfb3V0X2RhdGEpCi0JCXsKLQkJCW1zZyhEQkdfSU5GLCJzYnBfZGF0YTogQ0RpX3N0YXR1cyB0aW1lb3V0ICh0aW1lZF9vdXRfZGF0YSkgKCUwMlgpLlxuIiwgaik7Ci0JCQllcnJvcl9mbGFnKys7Ci0JCX0KLQkJaWYgKHRyeT09MCkKLQkJewotCQkJbXNnKERCR19JTkYsInNicF9kYXRhOiBDRGlfc3RhdHVzIHRpbWVvdXQgKHRyeT0wKSAoJTAyWCkuXG4iLCBqKTsKLQkJCWVycm9yX2ZsYWcrKzsKLQkJfQotCQlpZiAoIShqJnNfbm90X3Jlc3VsdF9yZWFkeSkpCi0JCXsKLQkJCW1zZyhEQkdfSU5GLCAic2JwX2RhdGE6IFJFU1VMVF9SRUFEWSB3aGVyZSBEQVRBX1JFQURZIGF3YWl0ZWQgKCUwMlgpLlxuIiwgaik7Ci0JCQlyZXNwb25zZV9jb3VudD0yMDsKLQkJCWo9UmVzcG9uc2VJbmZvKCk7Ci0JCQlqPWluYihDRGlfc3RhdHVzKTsKLQkJfQotCQlpZiAoaiZzX25vdF9kYXRhX3JlYWR5KQotCQl7Ci0JCQlpZiAoKGN1cnJlbnRfZHJpdmUtPm9yZWRfY3RsX2FkciYweDQwKT09MCkKLQkJCQltc2coREJHX0lORiwgIkNEIGNvbnRhaW5zIG5vIGRhdGEgdHJhY2tzLlxuIik7Ci0JCQllbHNlIG1zZyhEQkdfSU5GLCAic2JwX2RhdGE6IERBVEFfUkVBRFkgdGltZW91dCAoJTAyWCkuXG4iLCBqKTsKLQkJCWVycm9yX2ZsYWcrKzsKLQkJfQotCQlTQlBDRF9TVEk7Ci0JCWlmIChlcnJvcl9mbGFnKSBicmVhazsKLQotCQltc2coREJHXzAwMCwgInNicF9kYXRhOiBiZWdpbm5pbmcgdG8gcmVhZC5cbiIpOwotCQlwID0gY3VycmVudF9kcml2ZS0+c2JwX2J1ZiArIGZyYW1lICogIENEX0ZSQU1FU0laRTsKLQkJaWYgKHNicHJvX3R5cGU9PTEpIE9VVChDRG9fc2VsX2lfZCwxKTsKLQkJaWYgKGNtZF90eXBlPT1SRUFEX00yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9fMTZiaXQpIGluc3coQ0RpX2RhdGEsIHhhX2hlYWRfYnVmLCBDRF9YQV9IRUFEPj4xKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW5zYihDRGlfZGF0YSwgeGFfaGVhZF9idWYsIENEX1hBX0hFQUQpOwotCQl9Ci0JCWlmIChkb18xNmJpdCkgaW5zdyhDRGlfZGF0YSwgcCwgQ0RfRlJBTUVTSVpFPj4xKTsKLQkJZWxzZSBpbnNiKENEaV9kYXRhLCBwLCBDRF9GUkFNRVNJWkUpOwotCQlpZiAoY21kX3R5cGU9PVJFQURfTTIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb18xNmJpdCkgaW5zdyhDRGlfZGF0YSwgeGFfdGFpbF9idWYsIENEX1hBX1RBSUw+PjEpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpbnNiKENEaV9kYXRhLCB4YV90YWlsX2J1ZiwgQ0RfWEFfVEFJTCk7Ci0JCX0KLQkJY3VycmVudF9kcml2ZS0+c2JwX2N1cnJlbnQrKzsKLQkJaWYgKHNicHJvX3R5cGU9PTEpIE9VVChDRG9fc2VsX2lfZCwwKTsKLQkJaWYgKGNtZF90eXBlPT1SRUFEX00yKQotCQl7Ci0JCQlmb3IgKHhhX2NvdW50PTA7eGFfY291bnQ8Q0RfWEFfSEVBRDt4YV9jb3VudCsrKQotCQkJCXNwcmludGYoJm1zZ2J1Zlt4YV9jb3VudCozXSwgIiAlMDJYIiwgeGFfaGVhZF9idWZbeGFfY291bnRdKTsKLQkJCW1zZ2J1Zlt4YV9jb3VudCozXT0wOwotCQkJbXNnKERCR19YQTEsInhhIGhlYWQ6JXNcbiIsIG1zZ2J1Zik7Ci0JCX0KLQkJZGF0YV9yZXRyeWluZyA9IDA7Ci0JCWRhdGFfdHJpZXMrKzsKLQkJaWYgKGRhdGFfdHJpZXMgPj0gMTAwMCkKLQkJewotCQkJbXNnKERCR19JTkYsInNicF9kYXRhKCkgc3RhdGlzdGljczogJWQgd2FpdHMgaW4gJWQgZnJhbWVzLlxuIiwgZGF0YV93YWl0cywgZGF0YV90cmllcyk7Ci0JCQlkYXRhX3dhaXRzID0gZGF0YV90cmllcyA9IDA7Ci0JCX0KLQl9Ci0JZHVyYXRpb249amlmZmllcy1kdXJhdGlvbjsKLQltc2coREJHX1RFQSwidGltZSB0byByZWFkICVkIGZyYW1lczogJWQgamlmZmllcyAuXG4iLGZyYW1lLGR1cmF0aW9uKTsKLQlpZiAoZmFtVF9kcml2ZSkKLQl7Ci0JCXdhaXQ9ODsKLQkJZG8KLQkJewotCQkJaWYgKHRlYWM9PTIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGk9Q0RpX3N0YXRfbG9vcF9UKCkpID09IC0xKSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JwX3NsZWVwKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVChDRG9fc2VsX2lfZCwwKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaT1pbmIoQ0RpX3N0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIH0gCi0JCQlpZiAoIShpJnNfbm90X2RhdGFfcmVhZHkpKQotCQkJewotCQkJCU9VVChDRG9fc2VsX2lfZCwxKTsKLQkJCQlqPTA7Ci0JCQkJZG8KLQkJCQl7Ci0JCQkJCWlmIChkb18xNmJpdCkgaT1pbncoQ0RpX2RhdGEpOwotCQkJCQllbHNlIGk9aW5iKENEaV9kYXRhKTsKLQkJCQkJaisrOwotCQkJCQlpPWluYihDRGlfc3RhdHVzKTsKLQkJCQl9Ci0JCQkJd2hpbGUgKCEoaSZzX25vdF9kYXRhX3JlYWR5KSk7Ci0JCQkJbXNnKERCR19URUEsICI9PT09PT09PT09dG9vIG11Y2ggZGF0YSAoJWQgYnl0ZXMvd29yZHMpPT09PT09PT09PT09PT0uXG4iLCBqKTsKLQkJCX0KLQkJCWlmICghKGkmc19ub3RfcmVzdWx0X3JlYWR5KSkKLQkJCXsKLQkJCQlPVVQoQ0RvX3NlbF9pX2QsMCk7Ci0JCQkJbD0wOwotCQkJCWRvCi0JCQkJewotCQkJCQlpbmZvYnVmW2wrK109aW5iKENEaV9pbmZvKTsKLQkJCQkJaT1pbmIoQ0RpX3N0YXR1cyk7Ci0JCQkJfQotCQkJCXdoaWxlICghKGkmc19ub3RfcmVzdWx0X3JlYWR5KSk7Ci0JCQkJaWYgKGluZm9idWZbMF09PTB4MDApIHN1Y2Nlc3M9MTsKLSNpZiAxCi0JCQkJZm9yIChqPTA7ajxsO2orKykgc3ByaW50ZigmbXNnYnVmW2oqM10sICIgJTAyWCIsIGluZm9idWZbal0pOwotCQkJCW1zZ2J1ZltqKjNdPTA7Ci0JCQkJbXNnKERCR19URUEsInNicF9kYXRhIGluZm8gcmVzcG9uc2U6JXNcbiIsIG1zZ2J1Zik7Ci0jZW5kaWYKLQkJCQlpZiAoaW5mb2J1ZlswXT09MHgwMikKLQkJCQl7Ci0JCQkJCWVycm9yX2ZsYWcrKzsKLQkJCQkJZG8KLQkJCQkJewotCQkJCQkJKytyZWN1cnNpb247Ci0JCQkJCQlpZiAocmVjdXJzaW9uPjEpIG1zZyhEQkdfVEVBLCJjbWRfb3V0X1QgUkVBRF9FUlIgcmVjdXJzaW9uIChzYnBfZGF0YSk6ICVkICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIVxuIixyZWN1cnNpb24pOwotCQkJCQkJZWxzZSBtc2coREJHX1RFQSwic2JwX2RhdGE6IENNRFRfUkVBRF9FUlIgbmVjZXNzYXJ5LlxuIik7Ci0JCQkJCQljbHJfY21kYnVmKCk7Ci0JCQkJCQlkcnZjbWRbMF09Q01EVF9SRUFEX0VSUjsKLQkJCQkJCWo9Y21kX291dF9UKCk7IC8qICEhISByZWN1cnNpdmUgaGVyZSAhISEgKi8KLQkJCQkJCS0tcmVjdXJzaW9uOwotCQkJCQkJc2JwX3NsZWVwKDEpOwotCQkJCQl9Ci0JCQkJCXdoaWxlIChqPDApOwotCQkJCQljdXJyZW50X2RyaXZlLT5lcnJvcl9zdGF0ZT1pbmZvYnVmWzJdOwotCQkJCQljdXJyZW50X2RyaXZlLT5iMz1pbmZvYnVmWzNdOwotCQkJCQljdXJyZW50X2RyaXZlLT5iND1pbmZvYnVmWzRdOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLSNpZiAwCi0JCQkJbXNnKERCR19URUEsICI9PT09PT09PT09PT09IHdhaXRpbmcgZm9yIHJlc3VsdD09PT09PT09PT09PT09PT09LlxuIik7Ci0JCQkJc2JwX3NsZWVwKDEpOwotI2VuZGlmCi0JCQl9Ci0JCX0KLQkJd2hpbGUgKHdhaXQtLSk7Ci0JfQotCi0JaWYgKGVycm9yX2ZsYWcpIC8qIG11c3QgaGF2ZSBiZWVuIHNwdXJpb3VzIERfUkRZIG9yIChBVFROJiYhRF9SRFkpICovCi0JewotCQltc2coREJHX1RFQSwgIj09PT09PT09PT09PT09PT1lcnJvciBmbGFnOiAlZD09PT09PT09PT09PT09PT09LlxuIiwgZXJyb3JfZmxhZyk7Ci0JCW1zZyhEQkdfSU5GLCJzYnBfZGF0YTogcmVhZCBhYm9ydGVkIGJ5IGRyaXZlLlxuIik7Ci0jaWYgMQotCQlpPWNjX0RyaXZlUmVzZXQoKTsgLyogdWdseSBmaXggdG8gcHJldmVudCBhIGhhbmcgKi8KLSNlbHNlCi0JCWk9Y2NfUmVhZEVycm9yKCk7Ci0jZW5kaWYKLQkJcmV0dXJuICgwKTsKLQl9Ci0JCi0JaWYgKGZhbTBMVl9kcml2ZSkKLQl7Ci0JCVNCUENEX0NMSTsKLQkJaT1tYXh0aW1fZGF0YTsKLQkJZm9yICh0aW1lb3V0PWppZmZpZXMrSFo7IHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpOyB0aW1lb3V0LS0pCi0JCXsKLQkJCWZvciAoIDtpIT0wO2ktLSkKLQkJCXsKLQkJCQlqPWluYihDRGlfc3RhdHVzKTsKLQkJCQlpZiAoIShqJnNfbm90X2RhdGFfcmVhZHkpKSBicmVhazsKLQkJCQlpZiAoIShqJnNfbm90X3Jlc3VsdF9yZWFkeSkpIGJyZWFrOwotCQkJCWlmIChqJnNfYXR0ZW50aW9uKSBicmVhazsKLQkJCX0KLQkJCWlmIChpICE9IDAgfHwgdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkgYnJlYWs7Ci0JCQlzYnBfc2xlZXAoMCk7Ci0JCQlpID0gMTsKLQkJfQotCQlpZiAoaT09MCkgbXNnKERCR19JTkYsInN0YXR1cyB0aW1lb3V0IGFmdGVyIFJFQUQuXG4iKTsKLQkJaWYgKCEoaiZzX2F0dGVudGlvbikpCi0JCXsKLQkJCW1zZyhEQkdfSU5GLCJzYnBfZGF0YTogdGltZW91dCB3YWl0aW5nIERSVl9BVFROIC0gcmV0cnlpbmcuXG4iKTsKLQkJCWk9Y2NfRHJpdmVSZXNldCgpOyAgLyogdWdseSBmaXggdG8gcHJldmVudCBhIGhhbmcgKi8KLQkJCVNCUENEX1NUSTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJU0JQQ0RfU1RJOwotCX0KLQkKLSNpZiAwCi0JaWYgKCFzdWNjZXNzKQotI2VuZGlmCi0JCWRvCi0JCXsKLQkJCWlmIChmYW0wTFZfZHJpdmUpIGNjX1JlYWRTdGF0dXMoKTsKLSNpZiAxCi0JCQlpZiAoZmFtVF9kcml2ZSkgbXNnKERCR19URUEsICI9PT09PT09PT09PT09PT09YmVmb3JlIFJlc3BvbnNlU3RhdHVzPT09PT09PT09PT09PT09PT0uXG4iLCBpKTsKLSNlbmRpZgotCQkJaT1SZXNwb25zZVN0YXR1cygpOyAgLyogYnVpbGRzIHN0YXR1c19iaXRzLCByZXR1cm5zIG9yaWcuIHN0YXR1cyAob2xkKSBvciBmYWtlZCBwX3N1Y2Nlc3MgKG5ldykgKi8KLSNpZiAxCi0JCQlpZiAoZmFtVF9kcml2ZSkJbXNnKERCR19URUEsICI9PT09PT09PT09PT09PT09UmVzcG9uc2VTdGF0dXM6ICVkPT09PT09PT09PT09PT09PT0uXG4iLCBpKTsKLSNlbmRpZgotCQkJaWYgKGk8MCkKLQkJCXsKLQkJCQltc2coREJHX0lORiwiYmFkIGNjX1JlYWRTdGF0dXMgYWZ0ZXIgcmVhZDogJTAyWFxuIiwgY3VycmVudF9kcml2ZS0+c3RhdHVzX2JpdHMpOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKChmYW0wTFZfZHJpdmUpJiYoIXN0X2NoZWNrKSYmKCEoaSZwX3N1Y2Nlc3MpKSk7Ci0JaWYgKHN0X2NoZWNrKQotCXsKLQkJaT1jY19SZWFkRXJyb3IoKTsKLQkJbXNnKERCR19JTkYsImNjX1JlYWRFcnJvciB3YXMgbmVjZXNzYXJ5IGFmdGVyIHJlYWQ6ICVkXG4iLGkpOwotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAoZmF0YWxfZXJyKQotCXsKLQkJZmF0YWxfZXJyPTA7Ci0JCWN1cnJlbnRfZHJpdmUtPnNicF9maXJzdF9mcmFtZT1jdXJyZW50X2RyaXZlLT5zYnBfbGFzdF9mcmFtZT0tMTsgICAgICAvKiBwdXJnZSBidWZmZXIgKi8KLQkJY3VycmVudF9kcml2ZS0+c2JwX2N1cnJlbnQgPSAwOwotCQltc2coREJHX0lORiwic2JwX2RhdGE6IGZhdGFsX2VyciAtIHJldHJ5aW5nLlxuIik7Ci0JCXJldHVybiAoMCk7Ci0JfQotCQotCWN1cnJlbnRfZHJpdmUtPnNicF9maXJzdF9mcmFtZSA9IHJlcSAtPiBzZWN0b3IgLyA0OwotCWN1cnJlbnRfZHJpdmUtPnNicF9sYXN0X2ZyYW1lID0gY3VycmVudF9kcml2ZS0+c2JwX2ZpcnN0X2ZyYW1lICsgY3VycmVudF9kcml2ZS0+c2JwX3JlYWRfZnJhbWVzIC0gMTsKLQlzYnBfdHJhbnNmZXIocmVxKTsKLQlyZXR1cm4gKDEpOwotfQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBpbnQgc2JwY2RfYmxvY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc2JwY2RfZHJpdmUgKnAgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIGNkcm9tX29wZW4ocC0+c2JwY2RfaW5mb3AsIGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIGludCBzYnBjZF9ibG9ja19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzYnBjZF9kcml2ZSAqcCA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gY2Ryb21fcmVsZWFzZShwLT5zYnBjZF9pbmZvcCwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2JwY2RfYmxvY2tfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3Qgc2JwY2RfZHJpdmUgKnAgPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIGNkcm9tX2lvY3RsKGZpbGUsIHAtPnNicGNkX2luZm9wLCBpbm9kZSwgY21kLCBhcmcpOwotfQotCiBzdGF0aWMgaW50IHNicGNkX2Jsb2NrX21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJc3RydWN0IHNicGNkX2RyaXZlICpwID0gZGlzay0+cHJpdmF0ZV9kYXRhOwpAQCAtNTQ3OCwxMCArNTQ3Nyw5IEBACiAJLmdldF9tY24JCT0gc2JwY2RfZ2V0X21jbiwKIAkucmVzZXQJCQk9IHNicGNkX3Jlc2V0LAogCS5hdWRpb19pb2N0bAkJPSBzYnBjZF9hdWRpb19pb2N0bCwKLQkuZGV2X2lvY3RsCQk9IHNicGNkX2Rldl9pb2N0bCwKIAkuY2FwYWJpbGl0eQkJPSBDRENfQ0xPU0VfVFJBWSB8IENEQ19PUEVOX1RSQVkgfCBDRENfTE9DSyB8CiAJCQkJQ0RDX01VTFRJX1NFU1NJT04gfCBDRENfTUVESUFfQ0hBTkdFRCB8Ci0JCQkJQ0RDX01DTiB8IENEQ19QTEFZX0FVRElPIHwgQ0RDX0lPQ1RMUywKKwkJCQlDRENfTUNOIHwgQ0RDX1BMQVlfQVVESU8sCiAJLm5fbWlub3JzCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKaW5kZXggZTI3NjE3Mi4uYzBmODE3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS92aW9jZC5jCisrKyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwpAQCAtNjI3LDcgKzYyNyw3IEBACiAJLm1lZGlhX2NoYW5nZWQgPSB2aW9jZF9tZWRpYV9jaGFuZ2VkLAogCS5sb2NrX2Rvb3IgPSB2aW9jZF9sb2NrX2Rvb3IsCiAJLmdlbmVyaWNfcGFja2V0ID0gdmlvY2RfcGFja2V0LAotCS5jYXBhYmlsaXR5ID0gQ0RDX0NMT1NFX1RSQVkgfCBDRENfT1BFTl9UUkFZIHwgQ0RDX0xPQ0sgfCBDRENfU0VMRUNUX1NQRUVEIHwgQ0RDX1NFTEVDVF9ESVNDIHwgQ0RDX01VTFRJX1NFU1NJT04gfCBDRENfTUNOIHwgQ0RDX01FRElBX0NIQU5HRUQgfCBDRENfUExBWV9BVURJTyB8IENEQ19SRVNFVCB8IENEQ19JT0NUTFMgfCBDRENfRFJJVkVfU1RBVFVTIHwgQ0RDX0dFTkVSSUNfUEFDS0VUIHwgQ0RDX0NEX1IgfCBDRENfQ0RfUlcgfCBDRENfRFZEIHwgQ0RDX0RWRF9SIHwgQ0RDX0RWRF9SQU0gfCBDRENfUkFNCisJLmNhcGFiaWxpdHkgPSBDRENfQ0xPU0VfVFJBWSB8IENEQ19PUEVOX1RSQVkgfCBDRENfTE9DSyB8IENEQ19TRUxFQ1RfU1BFRUQgfCBDRENfU0VMRUNUX0RJU0MgfCBDRENfTVVMVElfU0VTU0lPTiB8IENEQ19NQ04gfCBDRENfTUVESUFfQ0hBTkdFRCB8IENEQ19QTEFZX0FVRElPIHwgQ0RDX1JFU0VUIHwgQ0RDX0RSSVZFX1NUQVRVUyB8IENEQ19HRU5FUklDX1BBQ0tFVCB8IENEQ19DRF9SIHwgQ0RDX0NEX1JXIHwgQ0RDX0RWRCB8IENEQ19EVkRfUiB8IENEQ19EVkRfUkFNIHwgQ0RDX1JBTQogfTsKIAogc3RhdGljIGludCBfX2luaXQgZmluZF9jYXBhYmlsaXR5KGNvbnN0IGNoYXIgKnR5cGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDA1YmE0MTAuLjU5ODBmM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC0yOTAsNyArMjkwLDcgQEAKIAogY29uZmlnIFJJTwogCXRyaXN0YXRlICJTcGVjaWFsaXggUklPIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIEJST0tFTl9PTl9TTVAgJiYgITY0QklUCisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgITY0QklUCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNwZWNpYWxpeCBSSU8sIGEgc21hcnQgc2VyaWFsIGNhcmQgd2hpY2gKIAkgIGRyaXZlcyBhbiBvdXRib2FyZCBib3ggdGhhdCBjYW4gc3VwcG9ydCB1cCB0byAxMjggcG9ydHMuICBQcm9kdWN0CkBAIC02OTUsNyArNjk1LDcgQEAKIAogY29uZmlnIFJUQwogCXRyaXN0YXRlICJFbmhhbmNlZCBSZWFsIFRpbWUgQ2xvY2sgU3VwcG9ydCIKLQlkZXBlbmRzIG9uICFQUEMzMiAmJiAhUEFSSVNDICYmICFJQTY0ICYmICFNNjhLICYmICghU1BBUkMgfHwgUENJKSAmJiAhRlJWCisJZGVwZW5kcyBvbiAhUFBDICYmICFQQVJJU0MgJiYgIUlBNjQgJiYgIU02OEsgJiYgKCFTUEFSQyB8fCBQQ0kpICYmICFGUlYKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgY3JlYXRlIGEgY2hhcmFjdGVyIHNwZWNpYWwgZmlsZSAvZGV2L3J0YyB3aXRoCiAJICBtYWpvciBudW1iZXIgMTAgYW5kIG1pbm9yIG51bWJlciAxMzUgdXNpbmcgbWtub2QgKCJtYW4gbWtub2QiKSwgeW91CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggNTAzZGQ5MC4uYjJhMTEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMzEsNyArMzEsNyBAQAogb2JqLSQoQ09ORklHX0EyMjMyKQkJKz0gc2VyX2EyMjMyLm8gZ2VuZXJpY19zZXJpYWwubwogb2JqLSQoQ09ORklHX0FUQVJJX0RTUDU2SykJKz0gZHNwNTZrLm8KIG9iai0kKENPTkZJR19NT1hBX1NNQVJUSU8pCSs9IG14c2VyLm8KLW9iai0kKENPTkZJR19DT01QVVRPTkUpCQkrPSBpcDIubyBpcDJtYWluLm8KK29iai0kKENPTkZJR19DT01QVVRPTkUpCQkrPSBpcDIvCiBvYmotJChDT05GSUdfUklTQ09NOCkJCSs9IHJpc2NvbTgubwogb2JqLSQoQ09ORklHX0lTSSkJCSs9IGlzaWNvbS5vCiBvYmotJChDT05GSUdfU1lOQ0xJTkspCQkrPSBzeW5jbGluay5vCkBAIC00NSw1NiArNDUsNTcgQEAKIG9iai0kKENPTkZJR19SQVdfRFJJVkVSKQkrPSByYXcubwogb2JqLSQoQ09ORklHX1NHSV9TTlNDKQkJKz0gc25zYy5vIHNuc2NfZXZlbnQubwogb2JqLSQoQ09ORklHX01NVElNRVIpCQkrPSBtbXRpbWVyLm8KLW9iai0kKENPTkZJR19WSU9DT05TKSArPSB2aW9jb25zLm8KK29iai0kKENPTkZJR19WSU9DT05TKQkJKz0gdmlvY29ucy5vCiBvYmotJChDT05GSUdfVklPVEFQRSkJCSs9IHZpb3RhcGUubwogb2JqLSQoQ09ORklHX0hWQ1MpCQkrPSBodmNzLm8KIG9iai0kKENPTkZJR19TR0lfTUJDUykJCSs9IG1iY3MubwogCi1vYmotJChDT05GSUdfUFJJTlRFUikgKz0gbHAubwotb2JqLSQoQ09ORklHX1RJUEFSKSArPSB0aXBhci5vCitvYmotJChDT05GSUdfUFJJTlRFUikJCSs9IGxwLm8KK29iai0kKENPTkZJR19USVBBUikJCSs9IHRpcGFyLm8KIAotb2JqLSQoQ09ORklHX0RUTEspICs9IGR0bGsubwotb2JqLSQoQ09ORklHX1IzOTY0KSArPSBuX3IzOTY0Lm8KLW9iai0kKENPTkZJR19BUFBMSUNPTSkgKz0gYXBwbGljb20ubwotb2JqLSQoQ09ORklHX1NPTllQSSkgKz0gc29ueXBpLm8KLW9iai0kKENPTkZJR19SVEMpICs9IHJ0Yy5vCi1vYmotJChDT05GSUdfSFBFVCkgKz0gaHBldC5vCi1vYmotJChDT05GSUdfR0VOX1JUQykgKz0gZ2VucnRjLm8KLW9iai0kKENPTkZJR19FRklfUlRDKSArPSBlZmlydGMubwotb2JqLSQoQ09ORklHX1NHSV9EUzEyODYpICs9IGRzMTI4Ni5vCi1vYmotJChDT05GSUdfU0dJX0lQMjdfUlRDKSArPSBpcDI3LXJ0Yy5vCi1vYmotJChDT05GSUdfRFMxMzAyKSArPSBkczEzMDIubwotb2JqLSQoQ09ORklHX1MzQzI0MTBfUlRDKSArPSBzM2MyNDEwLXJ0Yy5vCi1vYmotJChDT05GSUdfUlRDX1ZSNDFYWCkgKz0gdnI0MXh4X3J0Yy5vCitvYmotJChDT05GSUdfRFRMSykJCSs9IGR0bGsubworb2JqLSQoQ09ORklHX1IzOTY0KQkJKz0gbl9yMzk2NC5vCitvYmotJChDT05GSUdfQVBQTElDT00pCQkrPSBhcHBsaWNvbS5vCitvYmotJChDT05GSUdfU09OWVBJKQkJKz0gc29ueXBpLm8KK29iai0kKENPTkZJR19SVEMpCQkrPSBydGMubworb2JqLSQoQ09ORklHX0hQRVQpCQkrPSBocGV0Lm8KK29iai0kKENPTkZJR19HRU5fUlRDKQkJKz0gZ2VucnRjLm8KK29iai0kKENPTkZJR19FRklfUlRDKQkJKz0gZWZpcnRjLm8KK29iai0kKENPTkZJR19TR0lfRFMxMjg2KQkrPSBkczEyODYubworb2JqLSQoQ09ORklHX1NHSV9JUDI3X1JUQykJKz0gaXAyNy1ydGMubworb2JqLSQoQ09ORklHX0RTMTMwMikJCSs9IGRzMTMwMi5vCitvYmotJChDT05GSUdfUzNDMjQxMF9SVEMpCSs9IHMzYzI0MTAtcnRjLm8KK29iai0kKENPTkZJR19SVENfVlI0MVhYKQkrPSB2cjQxeHhfcnRjLm8KIGlmZXEgKCQoQ09ORklHX0dFTkVSSUNfTlZSQU0pLHkpCi0gIG9iai0kKENPTkZJR19OVlJBTSkgKz0gZ2VuZXJpY19udnJhbS5vCisgIG9iai0kKENPTkZJR19OVlJBTSkJKz0gZ2VuZXJpY19udnJhbS5vCiBlbHNlCi0gIG9iai0kKENPTkZJR19OVlJBTSkgKz0gbnZyYW0ubworICBvYmotJChDT05GSUdfTlZSQU0pCSs9IG52cmFtLm8KIGVuZGlmCi1vYmotJChDT05GSUdfVE9TSElCQSkgKz0gdG9zaGliYS5vCi1vYmotJChDT05GSUdfSThLKSArPSBpOGsubwotb2JqLSQoQ09ORklHX0RTMTYyMCkgKz0gZHMxNjIwLm8KLW9iai0kKENPTkZJR19IV19SQU5ET00pICs9IGh3X3JhbmRvbS5vCi1vYmotJChDT05GSUdfRlRBUEUpICs9IGZ0YXBlLwotb2JqLSQoQ09ORklHX0NPQkFMVF9MQ0QpICs9IGxjZC5vCi1vYmotJChDT05GSUdfUFBERVYpICs9IHBwZGV2Lm8KLW9iai0kKENPTkZJR19OV0JVVFRPTikgKz0gbndidXR0b24ubwotb2JqLSQoQ09ORklHX05XRkxBU0gpICs9IG53Zmxhc2gubwotb2JqLSQoQ09ORklHX1NDeDIwMF9HUElPKSArPSBzY3gyMDBfZ3Bpby5vCi1vYmotJChDT05GSUdfQ1M1NTM1X0dQSU8pICs9IGNzNTUzNV9ncGlvLm8KLW9iai0kKENPTkZJR19HUElPX1ZSNDFYWCkgKz0gdnI0MXh4X2dpdS5vCi1vYmotJChDT05GSUdfVEFOQkFDX1RCMDIxOSkgKz0gdGIwMjE5Lm8KLW9iai0kKENPTkZJR19URUxDTE9DSykgKz0gdGxjbGsubworb2JqLSQoQ09ORklHX1RPU0hJQkEpCQkrPSB0b3NoaWJhLm8KK29iai0kKENPTkZJR19JOEspCQkrPSBpOGsubworb2JqLSQoQ09ORklHX0RTMTYyMCkJCSs9IGRzMTYyMC5vCitvYmotJChDT05GSUdfSFdfUkFORE9NKQkJKz0gaHdfcmFuZG9tLm8KK29iai0kKENPTkZJR19GVEFQRSkJCSs9IGZ0YXBlLworb2JqLSQoQ09ORklHX0NPQkFMVF9MQ0QpCSs9IGxjZC5vCitvYmotJChDT05GSUdfUFBERVYpCQkrPSBwcGRldi5vCitvYmotJChDT05GSUdfTldCVVRUT04pCQkrPSBud2J1dHRvbi5vCitvYmotJChDT05GSUdfTldGTEFTSCkJCSs9IG53Zmxhc2gubworb2JqLSQoQ09ORklHX1NDeDIwMF9HUElPKQkrPSBzY3gyMDBfZ3Bpby5vCitvYmotJChDT05GSUdfQ1M1NTM1X0dQSU8pCSs9IGNzNTUzNV9ncGlvLm8KK29iai0kKENPTkZJR19HUElPX1ZSNDFYWCkJKz0gdnI0MXh4X2dpdS5vCitvYmotJChDT05GSUdfVEFOQkFDX1RCMDIxOSkJKz0gdGIwMjE5Lm8KK29iai0kKENPTkZJR19URUxDTE9DSykJCSs9IHRsY2xrLm8KIAotb2JqLSQoQ09ORklHX1dBVENIRE9HKQkrPSB3YXRjaGRvZy8KLW9iai0kKENPTkZJR19NV0FWRSkgKz0gbXdhdmUvCi1vYmotJChDT05GSUdfQUdQKSArPSBhZ3AvCi1vYmotJChDT05GSUdfRFJNKSArPSBkcm0vCi1vYmotJChDT05GSUdfUENNQ0lBKSArPSBwY21jaWEvCi1vYmotJChDT05GSUdfSVBNSV9IQU5ETEVSKSArPSBpcG1pLworb2JqLSQoQ09ORklHX1dBVENIRE9HKQkJKz0gd2F0Y2hkb2cvCitvYmotJChDT05GSUdfTVdBVkUpCQkrPSBtd2F2ZS8KK29iai0kKENPTkZJR19BR1ApCQkrPSBhZ3AvCitvYmotJChDT05GSUdfRFJNKQkJKz0gZHJtLworb2JqLSQoQ09ORklHX1BDTUNJQSkJCSs9IHBjbWNpYS8KK29iai0kKENPTkZJR19JUE1JX0hBTkRMRVIpCSs9IGlwbWkvCiAKLW9iai0kKENPTkZJR19IQU5HQ0hFQ0tfVElNRVIpICs9IGhhbmdjaGVjay10aW1lci5vCi1vYmotJChDT05GSUdfVENHX1RQTSkgKz0gdHBtLworb2JqLSQoQ09ORklHX0hBTkdDSEVDS19USU1FUikJKz0gaGFuZ2NoZWNrLXRpbWVyLm8KK29iai0kKENPTkZJR19UQ0dfVFBNKQkJKz0gdHBtLworCiAjIEZpbGVzIGdlbmVyYXRlZCB0aGF0IHNoYWxsIGJlIHJlbW92ZWQgdXBvbiBtYWtlIGNsZWFuCiBjbGVhbi1maWxlcyA6PSBjb25zb2xlbWFwX2RlZnRibC5jIGRlZmtleW1hcC5jIHF0cm9uaXhtYXAuYwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKaW5kZXggNDg2ZWQ4YS4uYTRkNDI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwpAQCAtMTUsMjIgKzE1LDIzIEBACiAJICBkdWUgdG8ga2VybmVsIGFsbG9jYXRpb24gaXNzdWVzKSwgeW91IGNvdWxkIHVzZSBQQ0kgYWNjZXNzZXMKIAkgIGFuZCBoYXZlIHVwIHRvIGEgY291cGxlIGdpZ3Mgb2YgdGV4dHVyZSBzcGFjZS4KIAotCSAgTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgbWVhbnMgdG8gaGF2ZSBYRnJlZTQvR0xYIHVzZQorCSAgTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgbWVhbnMgdG8gaGF2ZSBYL0dMWCB1c2UKIAkgIHdyaXRlLWNvbWJpbmluZyB3aXRoIE1UUlIgc3VwcG9ydCBvbiB0aGUgQUdQIGJ1cy4gV2l0aG91dCBpdCwgT3BlbkdMCiAJICBkaXJlY3QgcmVuZGVyaW5nIHdpbGwgYmUgYSBsb3Qgc2xvd2VyIGJ1dCBzdGlsbCBmYXN0ZXIgdGhhbiBQSU8uCiAKLQkgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZiB5b3UgdXNlIFhGcmVlODYgMy4zLjYgb3IgNC54IGFuZCB3YW50IHRvCi0JICB1c2UgR0xYIG9yIERSSS4gIElmIHVuc3VyZSwgc2F5IE4uCi0KIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFncGdhcnQuCiAKKwkgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgR0xYIG9yIERSSS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIEFHUF9BTEkKIAl0cmlzdGF0ZSAiQUxJIGNoaXBzZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFHUCAmJiBYODZfMzIKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mCi0JICBYRnJlZTg2IDQueCBvbiB0aGUgZm9sbG93aW5nIEFMaSBjaGlwc2V0cy4gIFRoZSBzdXBwb3J0ZWQgY2hpcHNldHMKKwkgIFggb24gdGhlIGZvbGxvd2luZyBBTGkgY2hpcHNldHMuICBUaGUgc3VwcG9ydGVkIGNoaXBzZXRzCiAJICBpbmNsdWRlIE0xNTQxLCBNMTYyMSwgTTE2MzEsIE0xNjMyLCBNMTY0MSxNMTY0NyxhbmQgTTE2NTEuCiAJICBGb3IgdGhlIEFMaS1jaGlwc2V0IHF1ZXN0aW9uLCBBTGkgc3VnZ2VzdHMgeW91IHJlZmVyIHRvCiAJICA8aHR0cDovL3d3dy5hbGkuY29tLnR3L2VuZy9zdXBwb3J0L2luZGV4LnNodG1sPi4KQEAgLTQwLDI4ICs0MSwxOSBAQAogCSAgdGltaW5nIGlzc3VlcywgdGhpcyBjaGlwc2V0IGNhbm5vdCBkbyBBR1AgMnggd2l0aCB0aGUgRzIwMC4KIAkgIFRoaXMgaXMgYSBoYXJkd2FyZSBsaW1pdGF0aW9uLiBBR1AgMXggc2VlbXMgdG8gYmUgZmluZSwgdGhvdWdoLgogCi0JICBZb3Ugc2hvdWxkIHNheSBZIGhlcmUgaWYgeW91IHVzZSBYRnJlZTg2IDMuMy42IG9yIDQueCBhbmQgd2FudCB0bwotCSAgdXNlIEdMWCBvciBEUkkuICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgQUdQX0FUSQogCXRyaXN0YXRlICJBVEkgY2hpcHNldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQUdQICYmIFg4Nl8zMgogCS0tLWhlbHAtLS0KLSAgICAgIFRoaXMgb3B0aW9uIGdpdmVzIHlvdSBBR1Agc3VwcG9ydCBmb3IgdGhlIEdMWCBjb21wb25lbnQgb2YKLSAgICAgIFhGcmVlODYgNC54IG9uIHRoZSBBVEkgUmFkZW9uSUdQIGZhbWlseSBvZiBjaGlwc2V0cy4KLQotICAgICAgWW91IHNob3VsZCBzYXkgWSBoZXJlIGlmIHlvdSB1c2UgWEZyZWU4NiAzLjMuNiBvciA0LnggYW5kIHdhbnQgdG8KLSAgICAgIHVzZSBHTFggb3IgRFJJLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwkgIFRoaXMgb3B0aW9uIGdpdmVzIHlvdSBBR1Agc3VwcG9ydCBmb3IgdGhlIEdMWCBjb21wb25lbnQgb2YKKwkgIFggb24gdGhlIEFUSSBSYWRlb25JR1AgZmFtaWx5IG9mIGNoaXBzZXRzLgogCiBjb25maWcgQUdQX0FNRAogCXRyaXN0YXRlICJBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBR1AgJiYgWDg2XzMyCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZgotCSAgWEZyZWU4NiA0Lnggb24gQU1EIElyb25nYXRlLCA3NjEsIGFuZCA3NjIgY2hpcHNldHMuCi0KLQkgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZiB5b3UgdXNlIFhGcmVlODYgMy4zLjYgb3IgNC54IGFuZCB3YW50IHRvCi0JICB1c2UgR0xYIG9yIERSSS4gIElmIHVuc3VyZSwgc2F5IE4uCisJICBYIG9uIEFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXRzLgogCiBjb25maWcgQUdQX0FNRDY0CiAJdHJpc3RhdGUgIkFNRCBPcHRlcm9uL0F0aGxvbjY0IG9uLUNQVSBHQVJUIHN1cHBvcnQiIGlmICFHQVJUX0lPTU1VCkBAIC02OSw0NSArNjEsMzggQEAKIAlkZWZhdWx0IHkgaWYgR0FSVF9JT01NVQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGdpdmVzIHlvdSBBR1Agc3VwcG9ydCBmb3IgdGhlIEdMWCBjb21wb25lbnQgb2YKLQkgIFhGcmVlODYgNC54IHVzaW5nIHRoZSBvbi1DUFUgbm9ydGhicmlkZ2Ugb2YgdGhlIEFNRCBBdGhsb242NC9PcHRlcm9uIENQVXMuCisJICBYIHVzaW5nIHRoZSBvbi1DUFUgbm9ydGhicmlkZ2Ugb2YgdGhlIEFNRCBBdGhsb242NC9PcHRlcm9uIENQVXMuCiAJICBZb3Ugc3RpbGwgbmVlZCBhbiBleHRlcm5hbCBBR1AgYnJpZGdlIGxpa2UgdGhlIEFNRCA4MTUxLCBWSUEKICAgICAgICAgICBLOFQ0MDBNLCBTaVM3NTUuIEl0IG1heSBhbHNvIHN1cHBvcnQgb3RoZXIgQUdQIGJyaWRnZXMgd2hlbiBsb2FkZWQKIAkgIHdpdGggYWdwX3RyeV91bnN1cHBvcnRlZD0xLgotCSAgWW91IHNob3VsZCBzYXkgWSBoZXJlIGlmIHlvdSB1c2UgWEZyZWU4NiAzLjMuNiBvciA0LnggYW5kIHdhbnQgdG8KLQkgIHVzZSBHTFggb3IgRFJJLiAgSWYgdW5zdXJlLCBzYXkgWQogCiBjb25maWcgQUdQX0lOVEVMCiAJdHJpc3RhdGUgIkludGVsIDQ0MExYL0JYL0dYLCBJOHh4IGFuZCBFN3gwNSBjaGlwc2V0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBR1AgJiYgWDg2CiAJaGVscAotCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZiBYRnJlZTg2IDQueAorCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZiBYCiAJICBvbiBJbnRlbCA0NDBMWC9CWC9HWCwgODE1LCA4MjAsIDgzMCwgODQwLCA4NDUsIDg1MCwgODYwLCA4NzUsCi0JICBFNzIwNSBhbmQgRTc1MDUgY2hpcHNldHMgYW5kIGZ1bGwgc3VwcG9ydCBmb3IgdGhlIDgxMCwgODE1LCA4MzBNLCA4NDVHLAotCSAgODUyR00sIDg1NUdNLCA4NjVHIGFuZCBJOTE1IGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHNldHMuCisJICBFNzIwNSBhbmQgRTc1MDUgY2hpcHNldHMgYW5kIGZ1bGwgc3VwcG9ydCBmb3IgdGhlIDgxMCwgODE1LCA4MzBNLAorCSAgODQ1RywgODUyR00sIDg1NUdNLCA4NjVHIGFuZCBJOTE1IGludGVncmF0ZWQgZ3JhcGhpY3MgY2hpcHNldHMuCiAKLQkgIFlvdSBzaG91bGQgc2F5IFkgaGVyZSBpZiB5b3UgdXNlIFhGcmVlODYgMy4zLjYgb3IgNC54IGFuZCB3YW50IHRvCi0JICB1c2UgR0xYIG9yIERSSSwgb3IgaWYgeW91IGhhdmUgYW55IEludGVsIGludGVncmF0ZWQgZ3JhcGhpY3MKLQkgIGNoaXBzZXRzLiAgSWYgdW5zdXJlLCBzYXkgWS4KKwogCiBjb25maWcgQUdQX05WSURJQQogCXRyaXN0YXRlICJOVklESUEgbkZvcmNlL25Gb3JjZTIgY2hpcHNldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQUdQICYmIFg4Nl8zMgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGdpdmVzIHlvdSBBR1Agc3VwcG9ydCBmb3IgdGhlIEdMWCBjb21wb25lbnQgb2YKLQkgIFhGcmVlODYgNC54IG9uIHRoZSBmb2xsb3dpbmcgTlZJRElBIGNoaXBzZXRzLiAgVGhlIHN1cHBvcnRlZCBjaGlwc2V0cwotCSAgaW5jbHVkZSBuRm9yY2UgYW5kIG5Gb3JjZTIKKwkgIFggb24gTlZJRElBIGNoaXBzZXRzIGluY2x1ZGluZyBuRm9yY2UgYW5kIG5Gb3JjZTIKIAogY29uZmlnIEFHUF9TSVMKIAl0cmlzdGF0ZSAiU2lTIGNoaXBzZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFHUCAmJiBYODZfMzIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBnaXZlcyB5b3UgQUdQIHN1cHBvcnQgZm9yIHRoZSBHTFggY29tcG9uZW50IG9mCi0JICBYRnJlZTg2IDQueCBvbiBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBbU2lTXSBjaGlwc2V0cy4KKwkgIFggb24gU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgW1NpU10gY2hpcHNldHMuCiAKIAkgIE5vdGUgdGhhdCA1NTkxLzU1OTIgQUdQIGNoaXBzZXRzIGFyZSBOT1Qgc3VwcG9ydGVkLgogCi0JICBZb3Ugc2hvdWxkIHNheSBZIGhlcmUgaWYgeW91IHVzZSBYRnJlZTg2IDMuMy42IG9yIDQueCBhbmQgd2FudCB0bwotCSAgdXNlIEdMWCBvciBEUkkuICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQUdQX1NXT1JLUwogCXRyaXN0YXRlICJTZXJ2ZXJ3b3JrcyBMRS9IRSBjaGlwc2V0IHN1cHBvcnQiCkBAIC0xMjEsMTAgKzEwNiw3IEBACiAJZGVwZW5kcyBvbiBBR1AgJiYgWDg2XzMyCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZgotCSAgWEZyZWU4NiA0Lnggb24gVklBIE1WUDMvQXBvbGxvIFBybyBjaGlwc2V0cy4KLQotCSAgWW91IHNob3VsZCBzYXkgWSBoZXJlIGlmIHlvdSB1c2UgWEZyZWU4NiAzLjMuNiBvciA0LnggYW5kIHdhbnQgdG8KLQkgIHVzZSBHTFggb3IgRFJJLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwkgIFggb24gVklBIE1WUDMvQXBvbGxvIFBybyBjaGlwc2V0cy4KIAogY29uZmlnIEFHUF9JNDYwCiAJdHJpc3RhdGUgIkludGVsIDQ2MEdYIGNoaXBzZXQgc3VwcG9ydCIKQEAgLTE1OSw5ICsxNDEsNiBAQAogCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgVHJhbnNtZXRhIEVmZmljZW9uCiAJICBzZXJpZXMgcHJvY2Vzc29ycyB3aXRoIGludGVncmF0ZWQgbm9ydGhicmlkZ2VzLgogCi0JICBZb3Ugc2hvdWxkIHNheSBZIGhlcmUgaWYgeW91IHVzZSBYRnJlZTg2IDMuMy42IG9yIDQueCBhbmQgd2FudCB0bwotCSAgdXNlIEdMWCBvciBEUkkuICBJZiB1bnN1cmUsIHNheSBZLgotCiBjb25maWcgQUdQX1NHSV9USU9DQQogICAgICAgICB0cmlzdGF0ZSAiU0dJIFRJTyBjaGlwc2V0IEFHUCBzdXBwb3J0IgogICAgICAgICBkZXBlbmRzIG9uIEFHUCAmJiAoSUE2NF9TR0lfU04yIHx8IElBNjRfR0VORVJJQykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IDk5NjRjNTAuLjEyNTFiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtNTE2LDggKzUxNiwxMCBAQAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAoaGFtbWVyc1swXSwgQU1ENjRfR0FSVEFQRVJUVVJFQkFTRSwgJmFwYmFzZSk7CiAKIAkvKiBpZiB4ODYtNjQgYXBlcnR1cmUgYmFzZSBpcyBiZXlvbmQgNEcsIGV4aXQgaGVyZSAqLwotCWlmICggKGFwYmFzZSAmIDB4N2ZmZikgPj4gKDMyIC0gMjUpICkKLQkJIHJldHVybiAtRU5PREVWOworCWlmICggKGFwYmFzZSAmIDB4N2ZmZikgPj4gKDMyIC0gMjUpICkgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiYXBlcnR1cmUgYmFzZSA+IDRHXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJYXBiYXNlID0gKGFwYmFzZSAmIDB4N2ZmZikgPDwgMjU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKaW5kZXggMjY4Zjc4ZC4uZWZlZjk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKQEAgLTQ2OCw5ICs0NjgsNyBAQAogCiAJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKIAljYXNlIDB4MDAwNjoKLQkJLyogU2VydmVyV29ya3MgQ05CMjBIRQotCQlGYWlsIHNpbGVudGx5LiovCi0JCXByaW50ayAoS0VSTl9FUlIgUEZYICJEZXRlY3RlZCBTZXJ2ZXJXb3JrcyBDTkIyMEhFIGNoaXBzZXQ6IE5vIEFHUCBwcmVzZW50LlxuIik7CisJCXByaW50ayAoS0VSTl9FUlIgUEZYICJTZXJ2ZXJXb3JrcyBDTkIyMEhFIGlzIHVuc3VwcG9ydGVkIGR1ZSB0byBsYWNrIG9mIGRvY3VtZW50YXRpb24uXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljYXNlIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSEU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKaW5kZXggN2FjMzY1Yi4uNjYwMmIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYwpAQCAtNDYsOCArNDYsNiBAQAogCiAvKiBTYW5pdHkgY2hlY2tzICovCiAKLSNkZWZpbmUgU0VSSUFMX0lOTElORQotICAKICNpZiBkZWZpbmVkKE1PRFVMRSkgJiYgZGVmaW5lZChTRVJJQUxfREVCVUdfTUNPVU5UKQogI2RlZmluZSBEQkdfQ05UKHMpIHByaW50aygiKCVzKTogWyV4XSByZWZjPSVkLCBzZXJjPSVkLCB0dHljPSVkIC0+ICVzXG4iLCBcCiAgdHR5LT5uYW1lLCAoaW5mby0+ZmxhZ3MpLCBzZXJpYWxfZHJpdmVyLT5yZWZjb3VudCxpbmZvLT5jb3VudCx0dHktPmNvdW50LHMpCkBAIC05NSwxMCArOTMsNiBAQAogI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CiAjaW5jbHVkZSA8YXNtL2FtaWdhaW50cy5oPgogCi0jaWZkZWYgU0VSSUFMX0lOTElORQotI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKLSNlbmRpZgotCiAjZGVmaW5lIGN1c3RvbSBhbWlnYV9jdXN0b20KIHN0YXRpYyBjaGFyICpzZXJpYWxfbmFtZSA9ICJBbWlnYS1idWlsdGluIHNlcmlhbCBkcml2ZXIiOwogCkBAIC0yNTMsMTQgKzI0NywxNCBAQAogICogVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIHNjaGVkdWxlCiAgKiBwcm9jZXNzaW5nIGluIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgcG9ydGlvbiBvZiB0aGUgZHJpdmVyLgogICovCi1zdGF0aWMgX0lOTElORV8gdm9pZCByc19zY2hlZF9ldmVudChzdHJ1Y3QgYXN5bmNfc3RydWN0ICppbmZvLAotCQkJCSAgaW50IGV2ZW50KQorc3RhdGljIHZvaWQgcnNfc2NoZWRfZXZlbnQoc3RydWN0IGFzeW5jX3N0cnVjdCAqaW5mbywKKwkJCSAgIGludCBldmVudCkKIHsKIAlpbmZvLT5ldmVudCB8PSAxIDw8IGV2ZW50OwogCXRhc2tsZXRfc2NoZWR1bGUoJmluZm8tPnRsZXQpOwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCBhc3luY19zdHJ1Y3QgKmluZm8pCitzdGF0aWMgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCBhc3luY19zdHJ1Y3QgKmluZm8pCiB7CiAgICAgICAgIGludCBzdGF0dXM7CiAJaW50IHNlcmRhdHI7CkBAIC0zNDksNyArMzQzLDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBfSU5MSU5FXyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCBhc3luY19zdHJ1Y3QgKmluZm8pCitzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgYXN5bmNfc3RydWN0ICppbmZvKQogewogCWN1c3RvbS5pbnRyZXEgPSBJRl9UQkU7CiAJbWIoKTsKQEAgLTM4OSw3ICszODMsNyBAQAogCX0KIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQgY2hlY2tfbW9kZW1fc3RhdHVzKHN0cnVjdCBhc3luY19zdHJ1Y3QgKmluZm8pCitzdGF0aWMgdm9pZCBjaGVja19tb2RlbV9zdGF0dXMoc3RydWN0IGFzeW5jX3N0cnVjdCAqaW5mbykKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1cyA9IGNpYWIucHJhICYgKFNFUl9EQ0QgfCBTRVJfQ1RTIHwgU0VSX0RTUik7CiAJdW5zaWduZWQgY2hhciBkc3RhdHVzOwpAQCAtMTk1OSw3ICsxOTUzLDcgQEAKICAqIG51bWJlciwgYW5kIGlkZW50aWZpZXMgd2hpY2ggb3B0aW9ucyB3ZXJlIGNvbmZpZ3VyZWQgaW50byB0aGlzCiAgKiBkcml2ZXIuCiAgKi8KLXN0YXRpYyBfSU5MSU5FXyB2b2lkIHNob3dfc2VyaWFsX3ZlcnNpb24odm9pZCkKK3N0YXRpYyB2b2lkIHNob3dfc2VyaWFsX3ZlcnNpb24odm9pZCkKIHsKICAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdmVyc2lvbiAlc1xuIiwgc2VyaWFsX25hbWUsIHNlcmlhbF92ZXJzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9kcm0vS2NvbmZpZwppbmRleCA1NmFjZTlkLi41Mjc4YzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2RybS9LY29uZmlnCkBAIC0zNyw4ICszNyw4IEBACiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIEFUSSBSYWRlb24gZ3JhcGhpY3MgY2FyZC4gIFRoZXJlCiAJICBhcmUgYm90aCBQQ0kgYW5kIEFHUCB2ZXJzaW9ucy4gIFlvdSBkb24ndCBuZWVkIHRvIGNob29zZSB0aGlzIHRvCi0JICBydW4gdGhlIFJhZGVvbiBpbiBwbGFpbiBWR0EgbW9kZS4gIFRoZXJlIGlzIGEgcHJvZHVjdCBwYWdlIGF0Ci0JICA8aHR0cDovL3d3dy5hdGkuY29tL25hL3BhZ2VzL3Byb2R1Y3RzL3BjL3JhZGVvbjMyL2luZGV4Lmh0bWw+LgorCSAgcnVuIHRoZSBSYWRlb24gaW4gcGxhaW4gVkdBIG1vZGUuCisJICAKIAkgIElmIE0gaXMgc2VsZWN0ZWQsIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmFkZW9uLgogCiBjb25maWcgRFJNX0k4MTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jCmluZGV4IDAyOTFjZDYuLmZmZDA4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYwpAQCAtNjE5LDYgKzYxOSw3IEBACiAjZW5kaWYKIAkJb2Zmc2V0ID0gZGV2LT5kcml2ZXItPmdldF9yZWdfb2ZzKGRldik7CiAjaWZkZWYgX19zcGFyY19fCisJCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJCWlmIChpb19yZW1hcF9wZm5fcmFuZ2UoRFJNX1JQUl9BUkcodm1hKSB2bWEtPnZtX3N0YXJ0LAogCQkJCSAgICAgICAobWFwLT5vZmZzZXQgKyBvZmZzZXQpID4+IFBBR0VfU0hJRlQsCiAJCQkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pcnEuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pcnEuYwppbmRleCBhMTM4MWM2Li5kMzg3OWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lycS5jCkBAIC0yMDIsMTAgKzIwMiwxNSBAQAogdm9pZCBpOTE1X2RyaXZlcl9pcnFfdW5pbnN0YWxsKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXUxNiB0ZW1wOworCiAJaWYgKCFkZXZfcHJpdikKIAkJcmV0dXJuOwogCiAJSTkxNV9XUklURTE2KEk5MTVSRUdfSFdTVEFNLCAweGZmZmYpOwogCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9NQVNLX1IsIDB4ZmZmZik7CiAJSTkxNV9XUklURTE2KEk5MTVSRUdfSU5UX0VOQUJMRV9SLCAweDApOworCisJdGVtcCA9IEk5MTVfUkVBRDE2KEk5MTVSRUdfSU5UX0lERU5USVRZX1IpOworCUk5MTVfV1JJVEUxNihJOTE1UkVHX0lOVF9JREVOVElUWV9SLCB0ZW1wKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9jbWRidWYuYyBiL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9jbWRidWYuYwppbmRleCAyOTFkYmY0Li5jMDhmYTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfY21kYnVmLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMzAwX2NtZGJ1Zi5jCkBAIC0xNjEsNiArMTYxLDcgQEAKIAlBRERfUkFOR0UoUjMwMF9WQVBfUFZTX0NOVExfMSwgMyk7CiAJQUREX1JBTkdFKFIzMDBfR0JfRU5BQkxFLCAxKTsKIAlBRERfUkFOR0UoUjMwMF9HQl9NU1BPUzAsIDUpOworCUFERF9SQU5HRShSMzAwX1RYX0NOVEwsIDEpOwogCUFERF9SQU5HRShSMzAwX1RYX0VOQUJMRSwgMSk7CiAJQUREX1JBTkdFKDB4NDIwMCwgNCk7CiAJQUREX1JBTkdFKDB4NDIxNCwgMSk7CkBAIC00ODksNiArNDkwLDUwIEBACiAKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfYml0Ymx0X211bHRpKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwKKwkJCQkJICAgICBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKmNtZGJ1ZikKK3sKKwl1MzIgKmNtZCA9ICh1MzIgKikgY21kYnVmLT5idWY7CisJaW50IGNvdW50LCByZXQ7CisJUklOR19MT0NBTFM7CisKKwljb3VudD0oY21kWzBdPj4xNikgJiAweDNmZmY7CisKKwlpZiAoY21kWzBdICYgMHg4MDAwKSB7CisJCXUzMiBvZmZzZXQ7CisKKwkJaWYgKGNtZFsxXSAmIChSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTCAKKwkJCSAgICAgIHwgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwpKSB7CisJCQlvZmZzZXQgPSBjbWRbMl0gPDwgMTA7CisJCQlyZXQgPSByMzAwX2NoZWNrX29mZnNldChkZXZfcHJpdiwgb2Zmc2V0KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlEUk1fRVJST1IoIkludmFsaWQgYml0Ymx0IGZpcnN0IG9mZnNldCBpcyAlMDhYXG4iLCBvZmZzZXQpOworCQkJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJCQl9CisJCX0KKworCQlpZiAoKGNtZFsxXSAmIFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMKSAmJgorCQkgICAgKGNtZFsxXSAmIFJBREVPTl9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMKSkgeworCQkJb2Zmc2V0ID0gY21kWzNdIDw8IDEwOworCQkJcmV0ID0gcjMwMF9jaGVja19vZmZzZXQoZGV2X3ByaXYsIG9mZnNldCk7CisJCQlpZiAocmV0KSB7CisJCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGJpdGJsdCBzZWNvbmQgb2Zmc2V0IGlzICUwOFhcbiIsIG9mZnNldCk7CisJCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJCX0KKwkJCQorCQl9CisJfQorCisJQkVHSU5fUklORyhjb3VudCsyKTsKKwlPVVRfUklORyhjbWRbMF0pOworCU9VVF9SSU5HX1RBQkxFKChpbnQgKikoY21kYnVmLT5idWYgKyA0KSwgY291bnQgKyAxKTsKKwlBRFZBTkNFX1JJTkcoKTsKKworCWNtZGJ1Zi0+YnVmICs9IChjb3VudCsyKSo0OworCWNtZGJ1Zi0+YnVmc3ogLT0gKGNvdW50KzIpKjQ7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIF9faW5saW5lX18gaW50IHIzMDBfZW1pdF9yYXdfcGFja2V0Myhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCiAJCQkJCSAgICBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyX3QgKmNtZGJ1ZikKQEAgLTUyNyw2ICs1NzIsOSBAQAogCWNhc2UgUkFERU9OXzNEX0xPQURfVkJQTlRSOgkvKiBsb2FkIHZlcnRleCBhcnJheSBwb2ludGVycyAqLwogCQlyZXR1cm4gcjMwMF9lbWl0XzNkX2xvYWRfdmJwbnRyKGRldl9wcml2LCBjbWRidWYsIGhlYWRlcik7CiAKKwljYXNlIFJBREVPTl9DTlRMX0JJVEJMVF9NVUxUSToKKwkJcmV0dXJuIHIzMDBfZW1pdF9iaXRibHRfbXVsdGkoZGV2X3ByaXYsIGNtZGJ1Zik7CisKIAljYXNlIFJBREVPTl9DUF8zRF9EUkFXX0lNTURfMjoJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbi1wYWNrZXQgdmVydGV4IGRhdGEgKi8KIAljYXNlIFJBREVPTl9DUF8zRF9EUkFXX1ZCVUZfMjoJLyogdHJpZ2dlcnMgZHJhd2luZyBvZiB2ZXJ0ZXggYnVmZmVycyBzZXR1cCBlbHNld2hlcmUgKi8KIAljYXNlIFJBREVPTl9DUF8zRF9EUkFXX0lORFhfMjoJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9yZWcuaCBiL2RyaXZlcnMvY2hhci9kcm0vcjMwMF9yZWcuaAppbmRleCBhMGVkMjBlLi5kMWUxOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3IzMDBfcmVnLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yMzAwX3JlZy5oCkBAIC00NTEsNiArNDUxLDkgQEAKIC8qIEVORCAqLwogCiAvKiBnYXAgKi8KKy8qIFplcm8gdG8gZmx1c2ggY2FjaGVzLiAqLworI2RlZmluZSBSMzAwX1RYX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDQxMDAKKwogLyogVGhlIHVwcGVyIGVuYWJsZSBiaXRzIGFyZSBndWVzc2VkLCBiYXNlZCBvbiBmZ2xyeCByZXBvcnRlZCBsaW1pdHMuICovCiAjZGVmaW5lIFIzMDBfVFhfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4NDEwNAogIyAgICAgICBkZWZpbmUgUjMwMF9UWF9FTkFCTEVfMCAgICAgICAgICAgICAgICAgICgxIDw8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCmluZGV4IDQ5OGIxOWIuLjFmN2QyYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5oCkBAIC05MCw5ICs5MCwxMCBAQAogICogMS4xOS0gQWRkIHN1cHBvcnQgZm9yIGdhcnQgdGFibGUgaW4gRkIgbWVtb3J5IGFuZCBQQ0lFIHIzMDAKICAqIDEuMjAtIEFkZCBzdXBwb3J0IGZvciByMzAwIHRleHJlY3QKICAqIDEuMjEtIEFkZCBzdXBwb3J0IGZvciBjYXJkIHR5cGUgZ2V0cGFyYW0KKyAqIDEuMjItIEFkZCBzdXBwb3J0IGZvciB0ZXh0dXJlIGNhY2hlIGZsdXNoZXMgKFIzMDBfVFhfQ05UTCkKICAqLwogI2RlZmluZSBEUklWRVJfTUFKT1IJCTEKLSNkZWZpbmUgRFJJVkVSX01JTk9SCQkyMQorI2RlZmluZSBEUklWRVJfTUlOT1IJCTIyCiAjZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTAKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKaW5kZXggZTM4YTVmMC4uNWU1OWMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMKQEAgLTQ4LDggKzQ4LDggQEAKICNkZWZpbmUgTkVXX1dSSVRFX0xPQ0tJTkcgMQogI2lmIE5FV19XUklURV9MT0NLSU5HCiAjZGVmaW5lIERFQ0wgICAgICAvKiBOb3RoaW5nICovCi0jZGVmaW5lIExPQ0tJVCAgICBkb3duICgmIHBvcnQtPnBvcnRfd3JpdGVfc2VtKTsKLSNkZWZpbmUgUkVMRUFTRUlUIHVwICgmcG9ydC0+cG9ydF93cml0ZV9zZW0pOworI2RlZmluZSBMT0NLSVQgICAgbXV0ZXhfbG9jaygmIHBvcnQtPnBvcnRfd3JpdGVfbXV0ZXgpOworI2RlZmluZSBSRUxFQVNFSVQgbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0X3dyaXRlX211dGV4KTsKICNlbHNlCiAjZGVmaW5lIERFQ0wgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogI2RlZmluZSBMT0NLSVQgICAgc2F2ZV9mbGFncyAoZmxhZ3MpO2NsaSAoKQpAQCAtMTI0LDE0ICsxMjQsMTQgQEAKIAkvKiBnZXQgZXhjbHVzaXZlICJ3cml0ZSIgYWNjZXNzIHRvIHRoaXMgcG9ydCAocHJvYmxlbSAzKSAqLwogCS8qIFRoaXMgaXMgbm90IGEgc3BpbmxvY2sgYmVjYXVzZSB3ZSBjYW4gaGF2ZSBhIGRpc2sgYWNjZXNzIChwYWdlIAogCQkgZmF1bHQpIGluIGNvcHlfZnJvbV91c2VyICovCi0JZG93biAoJiBwb3J0LT5wb3J0X3dyaXRlX3NlbSk7CisJbXV0ZXhfbG9jaygmIHBvcnQtPnBvcnRfd3JpdGVfbXV0ZXgpOwogCiAJd2hpbGUgKDEpIHsKIAogCQljID0gY291bnQ7CiAgCiAJCS8qIFRoaXMgaXMgc2FmZSBiZWNhdXNlIHdlICJPV04iIHRoZSAiaGVhZCIuIE5vb25lIGVsc2UgY2FuIAotCQkgICBjaGFuZ2UgdGhlICJoZWFkIjogd2Ugb3duIHRoZSBwb3J0X3dyaXRlX3NlbS4gKi8KKwkJICAgY2hhbmdlIHRoZSAiaGVhZCI6IHdlIG93biB0aGUgcG9ydF93cml0ZV9tdXRleC4gKi8KIAkJLyogRG9uJ3Qgb3ZlcnJ1biB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KIAkJdCA9IFNFUklBTF9YTUlUX1NJWkUgLSBwb3J0LT54bWl0X2hlYWQ7CiAJCWlmICh0IDwgYykgYyA9IHQ7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJY291bnQgLT0gYzsKIAkJdG90YWwgKz0gYzsKIAl9Ci0JdXAgKCYgcG9ydC0+cG9ydF93cml0ZV9zZW0pOworCW11dGV4X3VubG9jaygmIHBvcnQtPnBvcnRfd3JpdGVfbXV0ZXgpOwogCiAJZ3NfZHByaW50ayAoR1NfREVCVUdfV1JJVEUsICJ3cml0ZTogaW50ZXJydXB0cyBhcmUgJXNcbiIsIAogCSAgICAgICAgICAgIChwb3J0LT5mbGFncyAmIEdTX1RYX0lOVEVOKT8iZW5hYmxlZCI6ICJkaXNhYmxlZCIpOyAKQEAgLTIxNCw3ICsyMTQsNyBAQAogCQljID0gY291bnQ7CiAKIAkJLyogVGhpcyBpcyBzYWZlIGJlY2F1c2Ugd2UgIk9XTiIgdGhlICJoZWFkIi4gTm9vbmUgZWxzZSBjYW4gCi0JCSAgIGNoYW5nZSB0aGUgImhlYWQiOiB3ZSBvd24gdGhlIHBvcnRfd3JpdGVfc2VtLiAqLworCQkgICBjaGFuZ2UgdGhlICJoZWFkIjogd2Ugb3duIHRoZSBwb3J0X3dyaXRlX211dGV4LiAqLwogCQkvKiBEb24ndCBvdmVycnVuIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwogCQl0ID0gU0VSSUFMX1hNSVRfU0laRSAtIHBvcnQtPnhtaXRfaGVhZDsKIAkJaWYgKHQgPCBjKSBjID0gdDsKQEAgLTg4OCw3ICs4ODgsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlICgmcG9ydC0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAlpZiAocG9ydC0+dHR5KSAKIAkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnBvcnQtPnR0eS0+ZmxhZ3MpOwotCWluaXRfTVVURVgoJnBvcnQtPnBvcnRfd3JpdGVfc2VtKTsKKwltdXRleF9pbml0KCZwb3J0LT5wb3J0X3dyaXRlX211dGV4KTsKIAlwb3J0LT54bWl0X2NudCA9IHBvcnQtPnhtaXRfaGVhZCA9IHBvcnQtPnhtaXRfdGFpbCA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAlnc19zZXRfdGVybWlvcyhwb3J0LT50dHksIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYwppbmRleCAxOTk0YTkyZC4uZjY1YjJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTMzNSw2ICszMzUsOCBAQAogCX0gLyogZWxzZSBjb3VudCA9PSAwICovCiAKIAl0dHktPmRyaXZlcl9kYXRhID0gaHA7CisJdHR5LT5sb3dfbGF0ZW5jeSA9IDE7IC8qIE1ha2VzIGZsdXNoZXMgdG8gbGRpc2Mgc3luY2hyb25vdXMuICovCisKIAlocC0+dHR5ID0gdHR5OwogCS8qIFNhdmUgZm9yIHJlcXVlc3RfaXJxIG91dHNpZGUgb2Ygc3Bpbl9sb2NrLiAqLwogCWlycSA9IGhwLT5pcnE7CkBAIC02MzMsOSArNjM1LDYgQEAKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgYnVmW2ldLCAwKTsKIAkJfQogCi0JCWlmIChjb3VudCkKLQkJCXR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7Ci0KIAkJLyoKIAkJICogQWNjb3VudCBmb3IgdGhlIHRvdGFsIGFtb3VudCByZWFkIGluIG9uZSBsb29wLCBhbmQgaWYgYWJvdmUKIAkJICogNjQgYnl0ZXMsIHdlIGRvIGEgcXVpY2sgc2NoZWR1bGUgbG9vcCB0byBsZXQgdGhlIHR0eSBncm9rCkBAIC02NTYsNiArNjU1LDkgQEAKICBiYWlsOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwLT5sb2NrLCBmbGFncyk7CiAKKwlpZiAocmVhZF90b3RhbCkKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkKIAlyZXR1cm4gcG9sbF9tYXNrOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjcy5jIGIvZHJpdmVycy9jaGFyL2h2Y3MuYwppbmRleCA4MzFlYjRlLi5mN2FjMzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjcy5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNzLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogICogdGhlIGh2Y3NfZmluYWxfY2xvc2UoKSBmdW5jdGlvbiBpbiBvcmRlciB0byBnZXQgaXQgb3V0IG9mIHRoZSBzcGlubG9jay4KICAqIFJlYXJyYW5nZWQgaHZjc19jbG9zZSgpLiAgQ2xlYW5lZCB1cCBzb21lIHByaW50a3MgYW5kIGRpZCBzb21lIGhvdXNla2VlcGluZwogICogb24gdGhlIGNoYW5nZWxvZy4gIFJlbW92ZWQgbG9jYWwgQ0xDX0xFTkdUSCBhbmQgdXNlZCBIVkNTX0NMQ19MRU5HVEggZnJvbQotICogYXJjaC9wcGM2NC9odmNzZXJ2ZXIuaC4KKyAqIGluY2x1ZGUvYXNtLXBvd2VycGMvaHZjc2VydmVyLmggCiAgKgogICogMS4zLjIgLT4gMS4zLjMgUmVwbGFjZWQgeWllbGQoKSBpbiBodmNzX2Nsb3NlKCkgd2l0aCB0dHlfd2FpdF91bnRpbF9zZW50KCkgdG8KICAqIHByZXZlbnQgcG9zc2libGUgbG9ja3VwIHdpdGggcmVhbHRpbWUgc2NoZWR1bGluZyBhcyBzaW1pbGFyaWx5IHBvaW50ZWQgb3V0IGJ5CkBAIC0xNjgsOSArMTY4LDEwIEBACiAKIC8qCiAgKiBUaGUgaGNhbGwgaW50ZXJmYWNlIGludm9sdmVzIHB1dHRpbmcgOCBjaGFycyBpbnRvIGVhY2ggb2YgdHdvIHJlZ2lzdGVycy4KLSAqIFdlIGxvYWQgdXAgdGhvc2UgMiByZWdpc3RlcnMgKGluIGFyY2gvcHBjNjQvaHZjb25zb2xlLmMpIGJ5IGNhc3RpbmcgY2hhclsxNl0KLSAqIHRvIGxvbmdbMl0uICBJdCB3b3VsZCB3b3JrIHdpdGhvdXQgX19BTElHTkVEX18sIGJ1dCBhIGxpdHRsZSAodGlueSkgYml0Ci0gKiBzbG93ZXIgYmVjYXVzZSBhbiB1bmFsaWduZWQgbG9hZCBpcyBzbG93ZXIgdGhhbiBhbGlnbmVkIGxvYWQuCisgKiBXZSBsb2FkIHVwIHRob3NlIDIgcmVnaXN0ZXJzIChpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjb25zb2xlLmMpCisgKiBieSBjYXN0aW5nIGNoYXJbMTZdIHRvIGxvbmdbMl0uICBJdCB3b3VsZCB3b3JrIHdpdGhvdXQgX19BTElHTkVEX18sIGJ1dCBhIAorICogbGl0dGxlICh0aW55KSBiaXQgc2xvd2VyIGJlY2F1c2UgYW4gdW5hbGlnbmVkIGxvYWQgaXMgc2xvd2VyIHRoYW4gYWxpZ25lZCAKKyAqIGxvYWQuCiAgKi8KICNkZWZpbmUgX19BTElHTkVEX18JX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oOCkpKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tLmMKaW5kZXggYjNiYzJlMy4uMjlkYzg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20uYwpAQCAtMTMxLDcgKzEzMSw5IEBACiAJcm5nX2h3X25vbmUsCiAJcm5nX2h3X2ludGVsLAogCXJuZ19od19hbWQsCisjaWZkZWYgX19pMzg2X18KIAlybmdfaHdfdmlhLAorI2VuZGlmCiAJcm5nX2h3X2dlb2RlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9pcDIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgQ29tcHV0b25lIEludGVsbGlQb3J0IFBsdXMgRHJpdmVyCisjCisKK29iai0kKENPTkZJR19DT01QVVRPTkUpICAgICAgICAgKz0gaXAyLm8gaXAybWFpbi5vCisKK2lwMi1vYmpzCQkJOj0gaXAyYmFzZS5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIuYyBiL2RyaXZlcnMvY2hhci9pcDIvaXAyYmFzZS5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci9pcDIuYwpyZW5hbWUgdG8gZHJpdmVycy9jaGFyL2lwMi9pcDJiYXNlLmMKaW5kZXggN2NhZGZjNi4uNDM1Y2NmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaXAyYmFzZS5jCkBAIC0yMCwxNCArMjAsMTQgQEAKICNkZWZpbmUgX19pbml0ZGF0YQogI2VuZGlmCiAKLSNpbmNsdWRlICIuL2lwMi9pcDJ0eXBlcy5oIgkJCi0jaW5jbHVkZSAiLi9pcDIvZmlwX2Zpcm0uaCIJCS8vIHRoZSBtZWF0CisjaW5jbHVkZSAiaXAydHlwZXMuaCIJCQorI2luY2x1ZGUgImZpcF9maXJtLmgiCQkvLyB0aGUgbWVhdAogCiBpbnQKIGlwMl9sb2FkbWFpbihpbnQgKiwgaW50ICAqLCB1bnNpZ25lZCBjaGFyICosIGludCApOyAvLyByZWYgaW50byBpcDJtYWluLmMKIAogLyogTm90ZTogQWRkIGNvbXBpbGVkIGluIGRlZmF1bHRzIHRvIHRoZXNlIGFycmF5cywgbm90IHRvIHRoZSBzdHJ1Y3R1cmUKLQlpbiBpcDIvaXAyLmggYW55IGxvbmdlci4gIFRoYXQgc3RydWN0dXJlIFdJTEwgZ2V0IG92ZXJyaWRkZW4KKwlpbiBpcDIuaCBhbnkgbG9uZ2VyLiAgVGhhdCBzdHJ1Y3R1cmUgV0lMTCBnZXQgb3ZlcnJpZGRlbgogCWJ5IHRoZXNlIHZhbHVlcywgb3IgY29tbWFuZCBsaW5lIHZhbHVlcywgb3IgaW5zbW9kIHZhbHVlcyEhISAgPW1odz0KICovCiBzdGF0aWMgaW50IGlvW0lQMl9NQVhfQk9BUkRTXT0geyAwLCAwLCAwLCAwIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAybWFpbi5jIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL2lwMm1haW4uYwpyZW5hbWUgdG8gZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKaW5kZXggNDhmY2ZiYS4uMDNkYjFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMm1haW4uYworKysgYi9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYwpAQCAtMzUsNyArMzUsNyBAQAogLy8gQ2xlYW4gdXAgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMKIC8vIENsZWFuIHVwIGRldmZzIHJlZ2lzdHJhdGlvbgogLy8gQWRkIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyc2luZyBmb3IgaW8gYW5kIGlycQotLy8JQ29tcGlsZSBkZWZhdWx0cyBmb3IgaW8gYW5kIGlycSBhcmUgbm93IHNldCBpbiBpcDIuYyBub3QgaXAyL2lwMi5oIQorLy8JQ29tcGlsZSBkZWZhdWx0cyBmb3IgaW8gYW5kIGlycSBhcmUgbm93IHNldCBpbiBpcDIuYyBub3QgaXAyLmghCiAvLyBSZXdvcmtlZCBwb2xsX29ubHkgaGFjayBmb3IgZXhwbGljaXQgcGFyYW1ldGVyIHNldHRpbmcKIC8vCVlvdSBtdXN0IG5vdyBFWFBMSUNJVExZIHNldCBwb2xsX29ubHkgPSAxIG9yIHNldCBhbGwgaXJxcyB0byAwCiAvLyBNZXJnZWQgaXAyX2xvYWRtYWluIGFuZCBvbGRfaXAyX2luaXQKQEAgLTEyMywxMiArMTIzLDEyIEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAiLi9pcDIvaXAydHlwZXMuaCIKLSNpbmNsdWRlICIuL2lwMi9pcDJ0cmFjZS5oIgotI2luY2x1ZGUgIi4vaXAyL2lwMmlvY3RsLmgiCi0jaW5jbHVkZSAiLi9pcDIvaXAyLmgiCi0jaW5jbHVkZSAiLi9pcDIvaTJlbGxpcy5oIgotI2luY2x1ZGUgIi4vaXAyL2kybGliLmgiCisjaW5jbHVkZSAiaXAydHlwZXMuaCIKKyNpbmNsdWRlICJpcDJ0cmFjZS5oIgorI2luY2x1ZGUgImlwMmlvY3RsLmgiCisjaW5jbHVkZSAiaXAyLmgiCisjaW5jbHVkZSAiaTJlbGxpcy5oIgorI2luY2x1ZGUgImkybGliLmgiCiAKIC8qKioqKioqKioqKioqKioqKgogICogL3Byb2MvaXAybWVtICAqCkBAIC0yODIsOSArMjgyLDkgQEAKIC8qIENvZGUgKi8KIC8qKioqKioqKi8KIAotI2luY2x1ZGUgIi4vaXAyL2kyZWxsaXMuYyIgICAgLyogRXh0cmVtZWx5IGxvdy1sZXZlbCBpbnRlcmZhY2Ugc2VydmljZXMgKi8KLSNpbmNsdWRlICIuL2lwMi9pMmNtZC5jIiAgICAgIC8qIFN0YW5kYXJkIGxvYWR3YXJlIGNvbW1hbmQgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlICIuL2lwMi9pMmxpYi5jIiAgICAgIC8qIEhpZ2ggbGV2ZWwgaW50ZXJmYWNlIHNlcnZpY2VzICovCisjaW5jbHVkZSAiaTJlbGxpcy5jIiAgICAvKiBFeHRyZW1lbHkgbG93LWxldmVsIGludGVyZmFjZSBzZXJ2aWNlcyAqLworI2luY2x1ZGUgImkyY21kLmMiICAgICAgLyogU3RhbmRhcmQgbG9hZHdhcmUgY29tbWFuZCBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgImkybGliLmMiICAgICAgLyogSGlnaCBsZXZlbCBpbnRlcmZhY2Ugc2VydmljZXMgKi8KIAogLyogQ29uZmlndXJhdGlvbiBhcmVhIGZvciBtb2Rwcm9iZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IGQ3NDUwMDQuLmFiZDRjNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC03MzYsNyArNzM2LDggQEAKIAlpbnRmID0gaXBtaV9pbnRlcmZhY2VzW2lmX251bV07CiAJaWYgKChpZl9udW0gPj0gTUFYX0lQTUlfSU5URVJGQUNFUykgfHwgSVBNSV9JTlZBTElEX0lOVEVSRkFDRShpbnRmKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRlcmZhY2VzX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJ2ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfa2ZyZWU7CiAJfQogCiAJLyogTm90ZSB0aGF0IGVhY2ggZXhpc3RpbmcgdXNlciBob2xkcyBhIHJlZmNvdW50IHRvIHRoZSBpbnRlcmZhY2UuICovCkBAIC03NTEsMTQgKzc1MiwxNCBAQAogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChpbnRmLT5oYW5kbGVycy0+b3duZXIpKSB7CiAJCXJ2ID0gLUVOT0RFVjsKLQkJZ290byBvdXRfZXJyOworCQlnb3RvIG91dF9rcmVmOwogCX0KIAogCWlmIChpbnRmLT5oYW5kbGVycy0+aW5jX3VzZWNvdW50KSB7CiAJCXJ2ID0gaW50Zi0+aGFuZGxlcnMtPmluY191c2Vjb3VudChpbnRmLT5zZW5kX2luZm8pOwogCQlpZiAocnYpIHsKIAkJCW1vZHVsZV9wdXQoaW50Zi0+aGFuZGxlcnMtPm93bmVyKTsKLQkJCWdvdG8gb3V0X2VycjsKKwkJCWdvdG8gb3V0X2tyZWY7CiAJCX0KIAl9CiAKQEAgLTc2OSw5ICs3NzAsMTAgQEAKIAkqdXNlciA9IG5ld191c2VyOwogCXJldHVybiAwOwogCi0gb3V0X2VycjoKLQlrZnJlZShuZXdfdXNlcik7CitvdXRfa3JlZjoKIAlrcmVmX3B1dCgmaW50Zi0+cmVmY291bnQsIGludGZfZnJlZSk7CitvdXRfa2ZyZWU6CisJa2ZyZWUobmV3X3VzZXIpOwogCXJldHVybiBydjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9wb3dlcm9mZi5jCmluZGV4IDQ5YzA5YWUuLmU4ZWQyNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfcG93ZXJvZmYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3Bvd2Vyb2ZmLmMKQEAgLTM3LDE1ICszNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9pcG1pLmg+CiAjaW5jbHVkZSA8bGludXgvaXBtaV9zbWkuaD4KIAogI2RlZmluZSBQRlggIklQTUkgcG93ZXJvZmY6ICIKIAotLyogV2hlcmUgdG8gd2UgaW5zZXJ0IG91ciBwb3dlcm9mZiBmdW5jdGlvbj8gKi8KLWV4dGVybiB2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKLQogLyogRGVmaW5pdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHBvd2VyIG9mZiAoaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBpdCkuICBJdAogICogY29udmVuaWVudGx5IG1hdGNoZXMgdGhlIElQTUkgY2hhc3NpcyBjb250cm9sIHZhbHVlcy4gKi8KICNkZWZpbmUgSVBNSV9DSEFTU0lTX1BPV0VSX0RPV04JCTAJLyogcG93ZXIgZG93biwgdGhlIGRlZmF1bHQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKaW5kZXggMjhjNWEzMS4uZTUyNDdmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYwpAQCAtMTgxLDcgKzE4MSw2IEBACiAgKglpcyBhbHJlYWR5IHN3YXBwaW5nIGEgc2hhcmVkIGJ1ZmZlciB3b24ndCBtYWtlIHRoaW5ncyBhbnkgd29yc2UuCiAgKi8KIHN0YXRpYyBjaGFyCQkJKnN0bGlfdG1wd3JpdGVidWY7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChzdGxpX3RtcHdyaXRlc2VtKTsKIAogI2RlZmluZQlTVExJX1RYQlVGU0laRQkJNDA5NgogCkBAIC0zNzksMTMgKzM3OCwxMyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAKLU1PRFVMRV9QQVJNKGJvYXJkMCwgIjEtM3MiKTsKK21vZHVsZV9wYXJhbV9hcnJheShib2FyZDAsIGNoYXJwLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYm9hcmQwLCAiQm9hcmQgMCBjb25maWcgLT4gbmFtZVssaW9hZGRyWyxtZW1hZGRyXSIpOwotTU9EVUxFX1BBUk0oYm9hcmQxLCAiMS0zcyIpOworbW9kdWxlX3BhcmFtX2FycmF5KGJvYXJkMSwgY2hhcnAsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhib2FyZDEsICJCb2FyZCAxIGNvbmZpZyAtPiBuYW1lWyxpb2FkZHJbLG1lbWFkZHJdIik7Ci1NT0RVTEVfUEFSTShib2FyZDIsICIxLTNzIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoYm9hcmQyLCBjaGFycCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJvYXJkMiwgIkJvYXJkIDIgY29uZmlnIC0+IG5hbWVbLGlvYWRkclssbWVtYWRkcl0iKTsKLU1PRFVMRV9QQVJNKGJvYXJkMywgIjEtM3MiKTsKK21vZHVsZV9wYXJhbV9hcnJheShib2FyZDMsIGNoYXJwLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYm9hcmQzLCAiQm9hcmQgMyBjb25maWcgLT4gbmFtZVssaW9hZGRyWyxtZW1hZGRyXSIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9tZW0uYyBiL2RyaXZlcnMvY2hhci9tZW0uYwppbmRleCAyOWM0MWY0Li4yNmQwMTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWVtLmMKKysrIGIvZHJpdmVycy9jaGFyL21lbS5jCkBAIC0yMTYsMTEgKzIxNiw5IEBACiAKIAkJY29waWVkID0gY29weV9mcm9tX3VzZXIocHRyLCBidWYsIHN6KTsKIAkJaWYgKGNvcGllZCkgewotCQkJc3NpemVfdCByZXQ7Ci0KLQkJCXJldCA9IHdyaXR0ZW4gKyAoc3ogLSBjb3BpZWQpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OworCQkJd3JpdHRlbiArPSBzeiAtIGNvcGllZDsKKwkJCWlmICh3cml0dGVuKQorCQkJCWJyZWFrOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJYnVmICs9IHN6OwpAQCAtNDU2LDExICs0NTQsOSBAQAogCiAJCWNvcGllZCA9IGNvcHlfZnJvbV91c2VyKHB0ciwgYnVmLCBzeik7CiAJCWlmIChjb3BpZWQpIHsKLQkJCXNzaXplX3QgcmV0OwotCi0JCQlyZXQgPSB3cml0dGVuICsgKHN6IC0gY29waWVkKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKKwkJCXdyaXR0ZW4gKz0gc3ogLSBjb3BpZWQ7CisJCQlpZiAod3JpdHRlbikKKwkJCQlicmVhazsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAJCWJ1ZiArPSBzejsKQEAgLTUxNCwxMSArNTEwLDEwIEBACiAJCQlpZiAobGVuKSB7CiAJCQkJd3JpdHRlbiA9IGNvcHlfZnJvbV91c2VyKGtidWYsIGJ1ZiwgbGVuKTsKIAkJCQlpZiAod3JpdHRlbikgewotCQkJCQlzc2l6ZV90IHJldDsKLQorCQkJCQlpZiAod3JvdGUgKyB2aXJ0cikKKwkJCQkJCWJyZWFrOwogCQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpa2J1Zik7Ci0JCQkJCXJldCA9IHdyb3RlICsgdmlydHIgKyAobGVuIC0gd3JpdHRlbik7Ci0JCQkJCXJldHVybiByZXQgPyByZXQgOiAtRUZBVUxUOworCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQl9CiAJCQl9CiAJCQlsZW4gPSB2d3JpdGUoa2J1ZiwgKGNoYXIgKilwLCBsZW4pOwpAQCAtNTYzLDggKzU1OCwxMSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl3aGlsZSAoY291bnQtLSA+IDAgJiYgaSA8IDY1NTM2KSB7CiAJCWNoYXIgYzsKLQkJaWYgKF9fZ2V0X3VzZXIoYywgdG1wKSkgCisJCWlmIChfX2dldF91c2VyKGMsIHRtcCkpIHsKKwkJCWlmICh0bXAgPiBidWYpCisJCQkJYnJlYWs7CiAJCQlyZXR1cm4gLUVGQVVMVDsgCisJCX0KIAkJb3V0YihjLGkpOwogCQlpKys7CiAJCXRtcCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21tdGltZXIuYyBiL2RyaXZlcnMvY2hhci9tbXRpbWVyLmMKaW5kZXggYzkyMzc4MS4uMWIwNWZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21tdGltZXIuYworKysgYi9kcml2ZXJzL2NoYXIvbW10aW1lci5jCkBAIC02NzUsNyArNjc1LDcgQEAKIAljbm9kZWlkX3Qgbm9kZSwgbWF4biA9IC0xOwogCiAJaWYgKCFpYTY0X3BsYXRmb3JtX2lzKCJzbjIiKSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKIAogCS8qCiAJICogU2FuaXR5IGNoZWNrIHRoZSBjeWNsZXMvc2VjIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXIuYyBiL2RyaXZlcnMvY2hhci9teHNlci5jCmluZGV4IGVhNzI1YTkuLjBmYjJmYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9teHNlci5jCisrKyBiL2RyaXZlcnMvY2hhci9teHNlci5jCkBAIC0yNDMsMTAgKzI0MywxMCBAQAogCiBNT0RVTEVfQVVUSE9SKCJDYXNwZXIgWWFuZyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNT1hBIFNtYXJ0aW8vSW5kdXN0aW8gRmFtaWx5IE11bHRpcG9ydCBCb2FyZCBEZXZpY2UgRHJpdmVyIik7Ci1NT0RVTEVfUEFSTShpb2FkZHIsICIxLTRpIik7Ci1NT0RVTEVfUEFSTSh0dHltYWpvciwgImkiKTsKLU1PRFVMRV9QQVJNKGNhbGxvdXRtYWpvciwgImkiKTsKLU1PRFVMRV9QQVJNKHZlcmJvc2UsICJpIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaW9hZGRyLCBpbnQsIE5VTEwsIDApOworbW9kdWxlX3BhcmFtKHR0eW1ham9yLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGNhbGxvdXRtYWpvciwgaW50LCAwKTsKK21vZHVsZV9wYXJhbSh2ZXJib3NlLCBib29sLCAwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RydWN0IG14c2VyX2xvZyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbl90dHkuYyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCmluZGV4IGNjYWQ3YWUuLmVkZTM2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKICAqCVdlIHRlc3QgdGhlIFRUWV9USFJPVFRMRUQgYml0IGZpcnN0IHNvIHRoYXQgaXQgYWx3YXlzCiAgKglpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSBkZWNpc2lvbiBhYm91dCB3aGV0aGVyCiAgKglpdCBpcyB3b3J0aCBhbGxvd2luZyBtb3JlIGlucHV0IGhhcyBiZWVuIHRha2VuIGJ5IHRoZSBjYWxsZXIuCi0gKglDYW4gc2xlZXAsIG1heSBiZSBjYWxsZWQgdW5kZXIgdGhlIGF0b21pY19yZWFkIHNlbWFwaG9yZSBidXQKKyAqCUNhbiBzbGVlcCwgbWF5IGJlIGNhbGxlZCB1bmRlciB0aGUgYXRvbWljX3JlYWRfbG9jayBtdXRleCBidXQKICAqCXRoaXMgaXMgbm90IGd1YXJhbnRlZWQuCiAgKi8KICAKQEAgLTExMzIsNyArMTEzMiw3IEBACiAgKglidWZmZXIsIGFuZCBvbmNlIHRvIGRyYWluIHRoZSBzcGFjZSBmcm9tIHRoZSAocGh5c2ljYWwpIGJlZ2lubmluZyBvZgogICoJdGhlIGJ1ZmZlciB0byBoZWFkIHBvaW50ZXIuCiAgKgotICoJQ2FsbGVkIHVuZGVyIHRoZSB0dHktPmF0b21pY19yZWFkIHNlbSBhbmQgd2l0aCBUVFlfRE9OVF9GTElQIHNldAorICoJQ2FsbGVkIHVuZGVyIHRoZSB0dHktPmF0b21pY19yZWFkX2xvY2sgc2VtIGFuZCB3aXRoIFRUWV9ET05UX0ZMSVAgc2V0CiAgKgogICovCiAgCkBAIC0xMjYyLDExICsxMjYyLDExIEBACiAJICoJSW50ZXJuYWwgc2VyaWFsaXphdGlvbiBvZiByZWFkcy4KIAkgKi8KIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJaWYgKGRvd25fdHJ5bG9jaygmdHR5LT5hdG9taWNfcmVhZCkpCisJCWlmICghbXV0ZXhfdHJ5bG9jaygmdHR5LT5hdG9taWNfcmVhZF9sb2NrKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KIAllbHNlIHsKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdHR5LT5hdG9taWNfcmVhZCkpCisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnR0eS0+YXRvbWljX3JlYWRfbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCX0KIApAQCAtMTM5Myw3ICsxMzkzLDcgQEAKIAkJCXRpbWVvdXQgPSB0aW1lOwogCX0KIAljbGVhcl9iaXQoVFRZX0RPTlRfRkxJUCwgJnR0eS0+ZmxhZ3MpOwotCXVwKCZ0dHktPmF0b21pY19yZWFkKTsKKwltdXRleF91bmxvY2soJnR0eS0+YXRvbWljX3JlYWRfbG9jayk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnR0eS0+cmVhZF93YWl0LCAmd2FpdCk7CiAKIAlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJnR0eS0+cmVhZF93YWl0KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ud2ZsYXNoLmMgYi9kcml2ZXJzL2NoYXIvbndmbGFzaC5jCmluZGV4IGNhNDFkNjIuLjg4NjUzODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ud2ZsYXNoLmMKKysrIGIvZHJpdmVycy9jaGFyL253Zmxhc2guYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWMyMTI4NS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNTYsNyArNTcsNyBAQAogc3RhdGljIGludCBnYldyaXRlQmFzZTY0RW5hYmxlOwogc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKkZMQVNIX0JBU0U7CiBzdGF0aWMgaW50IGdiRmxhc2hTaXplID0gS0ZMQVNIX1NJWkU7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChud2ZsYXNoX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKG53Zmxhc2hfbXV0ZXgpOwogCiBleHRlcm4gc3BpbmxvY2tfdCBncGlvX2xvY2s7CiAKQEAgLTE0MCw3ICsxNDEsNyBAQAogCQkvKgogCQkgKiBXZSBub3cgbG9jayBhZ2FpbnN0IHJlYWRzIGFuZCB3cml0ZXMuIC0tcm1rCiAJCSAqLwotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZud2ZsYXNoX3NlbSkpCisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm53Zmxhc2hfbXV0ZXgpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCQlyZXQgPSBjb3B5X3RvX3VzZXIoYnVmLCAodm9pZCAqKShGTEFTSF9CQVNFICsgcCksIGNvdW50KTsKQEAgLTE0OSw3ICsxNTAsNyBAQAogCQkJKnBwb3MgKz0gY291bnQ7CiAJCX0gZWxzZQogCQkJcmV0ID0gLUVGQVVMVDsKLQkJdXAoJm53Zmxhc2hfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZud2ZsYXNoX211dGV4KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4OCw3ICsxODksNyBAQAogCS8qCiAJICogV2Ugbm93IGxvY2sgYWdhaW5zdCByZWFkcyBhbmQgd3JpdGVzLiAtLXJtawogCSAqLwotCWlmIChkb3duX2ludGVycnVwdGlibGUoJm53Zmxhc2hfc2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZud2ZsYXNoX211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCXdyaXR0ZW4gPSAwOwpAQCAtMjc3LDcgKzI3OCw3IEBACiAJICovCiAJbGVkc19ldmVudChsZWRfcmVsZWFzZSk7CiAKLQl1cCgmbndmbGFzaF9zZW0pOworCW11dGV4X3VubG9jaygmbndmbGFzaF9tdXRleCk7CiAKIAlyZXR1cm4gd3JpdHRlbjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCmluZGV4IDY0OTY3N2IuLjVmZGYxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwpAQCAtMTMsMTEgKzEzLDEyIEBACiAgICoKICAgKiAoQykgMjAwMCwyMDAxLDIwMDIsMjAwMywyMDA0IE9tbmlrZXkgQUcKICAgKgotICAqIChDKSAyMDA1IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgICogKEMpIDIwMDUtMjAwNiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgogICAqIAktIEFkaGVyZSB0byBLZXJuZWwgQ29kaW5nU3R5bGUKICAgKiAJLSBQb3J0IHRvIDIuNi4xMyAibmV3IiBzdHlsZSBQQ01DSUEKICAgKiAJLSBDaGVjayBmb3IgY29weV97ZnJvbSx0b31fdXNlciByZXR1cm4gdmFsdWVzCiAgICogCS0gVXNlIG5vbnNlZWthYmxlX29wZW4oKQorICAqIAktIGFkZCBjbGFzcyBpbnRlcmZhY2UgZm9yIHVkZXYgZGV2aWNlIGNyZWF0aW9uCiAgICoKICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBMaWNlbnNlZCB1bmRlciBkdWFsIEJTRC9HUEwgbGljZW5zZS4KICAgKi8KQEAgLTU2LDcgKzU3LDcgQEAKICNlbHNlCiAjZGVmaW5lIERFQlVHUChuLCByZHIsIHgsIGFyZ3MuLi4pCiAjZW5kaWYKLXN0YXRpYyBjaGFyICp2ZXJzaW9uID0gImNtNDAwMF9jcy5jIHYyLjQuMGdtNSAtIEFsbCBidWdzIGFkZGVkIGJ5IEhhcmFsZCBXZWx0ZSI7CitzdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJjbTQwMDBfY3MuYyB2Mi40LjBnbTYgLSBBbGwgYnVncyBhZGRlZCBieSBIYXJhbGQgV2VsdGUiOwogCiAjZGVmaW5lCVRfMVNFQwkJKEhaKQogI2RlZmluZQlUXzEwTVNFQwltc2Vjc190b19qaWZmaWVzKDEwKQpAQCAtMTU2LDYgKzE1Nyw3IEBACiAJCS8qcXVldWUqLyA0KnNpemVvZih3YWl0X3F1ZXVlX2hlYWRfdCkpCiAKIHN0YXRpYyBkZXZfbGlua190ICpkZXZfdGFibGVbQ000MDAwX01BWF9ERVZdOworc3RhdGljIHN0cnVjdCBjbGFzcyAqY21tX2NsYXNzOwogCiAvKiBUaGlzIHRhYmxlIGRvZXNuJ3QgdXNlIHNwYWNlcyBhZnRlciB0aGUgY29tbWEgYmV0d2VlbiBmaWVsZHMgYW5kIHRodXMKICAqIHZpb2xhdGVzIENvZGluZ1N0eWxlLiAgSG93ZXZlciwgSSBkb24ndCByZWFsbHkgdGhpbmsgd3JhcHBpbmcgaXQgYXJvdW5kIHdpbGwKQEAgLTE5MzcsNiArMTkzOSw5IEBACiAJbGluay0+c3RhdGUgfD0gREVWX1BSRVNFTlQgfCBERVZfQ09ORklHX1BFTkRJTkc7CiAJY200MDAwX2NvbmZpZyhsaW5rLCBpKTsKIAorCWNsYXNzX2RldmljZV9jcmVhdGUoY21tX2NsYXNzLCBOVUxMLCBNS0RFVihtYWpvciwgaSksIE5VTEwsCisJCQkgICAgImNtbSVkIiwgaSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk2Miw2ICsxOTY3LDggQEAKIAlkZXZfdGFibGVbZGV2bm9dID0gTlVMTDsKICAJa2ZyZWUoZGV2KTsKIAorCWNsYXNzX2RldmljZV9kZXN0cm95KGNtbV9jbGFzcywgTUtERVYobWFqb3IsIGRldm5vKSk7CisKIAlyZXR1cm47CiB9CiAKQEAgLTE5OTUsOCArMjAwMiwxOCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjbW1faW5pdCh2b2lkKQogeworCWludCByYzsKKwogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCB2ZXJzaW9uKTsKLQlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZjbTQwMDBfZHJpdmVyKTsKKworCWNtbV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImNhcmRtYW5fNDAwMCIpOworCWlmICghY21tX2NsYXNzKQorCQlyZXR1cm4gLTE7CisKKwlyYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmNtNDAwMF9kcml2ZXIpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwogCW1ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIERFVklDRV9OQU1FLCAmY200MDAwX2ZvcHMpOwogCWlmIChtYWpvciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRQpAQCAtMjAxMiw2ICsyMDI5LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FICI6IHVubG9hZGluZ1xuIik7CiAJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZjbTQwMDBfZHJpdmVyKTsKIAl1bnJlZ2lzdGVyX2NocmRldihtYWpvciwgREVWSUNFX05BTUUpOworCWNsYXNzX2Rlc3Ryb3koY21tX2NsYXNzKTsKIH07CiAKIG1vZHVsZV9pbml0KGNtbV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCmluZGV4IDQ2ZWIzNzEuLjQ2NmUzM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYwpAQCAtMywxMiArMywxMyBAQAogICoKICAqIChjKSAyMDAwLTIwMDQgT21uaWtleSBBRyAoaHR0cDovL3d3dy5vbW5pa2V5LmNvbS8pCiAgKgotICogKEMpIDIwMDUgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqIChDKSAyMDA1LTIwMDYgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KICAqIAktIGFkZCBzdXBwb3J0IGZvciBwb2xsKCkKICAqIAktIGRyaXZlciBjbGVhbnVwCiAgKiAJLSBhZGQgd2FpdHF1ZXVlcwogICogCS0gYWRoZXJlIHRvIGxpbnV4IGtlcm5lbCBjb2Rpbmcgc3R5bGUgYW5kIHBvbGljaWVzCiAgKiAJLSBzdXBwb3J0IDIuNi4xMyAibmV3IHN0eWxlIiBwY21jaWEgaW50ZXJmYWNlCisgKiAJLSBhZGQgY2xhc3MgaW50ZXJmYWNlIGZvciB1ZGV2IGRldmljZSBjcmVhdGlvbgogICoKICAqIFRoZSBkZXZpY2UgYmFzaWNhbGx5IGlzIGEgVVNCIENDSUQgY29tcGxpYW50IGRldmljZSB0aGF0IGhhcyBiZWVuCiAgKiBhdHRhY2hlZCB0byBhbiBJL08tTWFwcGVkIEZJRk8uCkBAIC01Myw3ICs1NCw3IEBACiAjZW5kaWYKIAogc3RhdGljIGNoYXIgKnZlcnNpb24gPQotIk9NTklLRVkgQ2FyZE1hbiA0MDQwIHYxLjEuMGdtNCAtIEFsbCBidWdzIGFkZGVkIGJ5IEhhcmFsZCBXZWx0ZSI7CisiT01OSUtFWSBDYXJkTWFuIDQwNDAgdjEuMS4wZ201IC0gQWxsIGJ1Z3MgYWRkZWQgYnkgSGFyYWxkIFdlbHRlIjsKIAogI2RlZmluZQlDQ0lEX0RSSVZFUl9CVUxLX0RFRkFVTFRfVElNRU9VVCAgCSgxNTAqSFopCiAjZGVmaW5lCUNDSURfRFJJVkVSX0FTWU5DX1BPV0VSVVBfVElNRU9VVCAJKDM1KkhaKQpAQCAtNjcsNiArNjgsNyBAQAogc3RhdGljIHZvaWQgcmVhZGVyX3JlbGVhc2UoZGV2X2xpbmtfdCAqbGluayk7CiAKIHN0YXRpYyBpbnQgbWFqb3I7CitzdGF0aWMgc3RydWN0IGNsYXNzICpjbXhfY2xhc3M7CiAKICNkZWZpbmUJCUJTX1JFQURBQkxFCTB4MDEKICNkZWZpbmUJCUJTX1dSSVRBQkxFCTB4MDIKQEAgLTY5Niw2ICs2OTgsOSBAQAogCWxpbmstPnN0YXRlIHw9IERFVl9QUkVTRU5UIHwgREVWX0NPTkZJR19QRU5ESU5HOwogCXJlYWRlcl9jb25maWcobGluaywgaSk7CiAKKwljbGFzc19kZXZpY2VfY3JlYXRlKGNteF9jbGFzcywgTlVMTCwgTUtERVYobWFqb3IsIGkpLCBOVUxMLAorCQkJICAgICJjbXglZCIsIGkpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcyMSw2ICs3MjYsOCBAQAogCWRldl90YWJsZVtkZXZub10gPSBOVUxMOwogCWtmcmVlKGRldik7CiAKKwljbGFzc19kZXZpY2VfZGVzdHJveShjbXhfY2xhc3MsIE1LREVWKG1ham9yLCBkZXZubykpOworCiAJcmV0dXJuOwogfQogCkBAIC03NTUsOCArNzYyLDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNtNDA0MF9pbml0KHZvaWQpCiB7CisJaW50IHJjOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHZlcnNpb24pOwotCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJlYWRlcl9kcml2ZXIpOworCWNteF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImNhcmRtYW5fNDA0MCIpOworCWlmICghY214X2NsYXNzKQorCQlyZXR1cm4gLTE7CisKKwlyYyA9IHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnJlYWRlcl9kcml2ZXIpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwogCW1ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIERFVklDRV9OQU1FLCAmcmVhZGVyX2ZvcHMpOwogCWlmIChtYWpvciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRQpAQCAtNzcxLDYgKzc4Nyw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRSAiOiB1bmxvYWRpbmdcbiIpOwogCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmcmVhZGVyX2RyaXZlcik7CiAJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIERFVklDRV9OQU1FKTsKKwljbGFzc19kZXN0cm95KGNteF9jbGFzcyk7CiB9CiAKIG1vZHVsZV9pbml0KGNtNDA0MF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwppbmRleCA4YThjYTMyLi5lNmI3MTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCkBAIC00MTgxLDcgKzQxODEsNyBAQAogCX0KIAogCWluZm8tPnBhcmFtcy5lbmNvZGluZyA9IG5ld19lbmNvZGluZzsKLQlpbmZvLT5wYXJhbXMuY3JjX3R5cGUgPSBuZXdfY3JjdHlwZTs7CisJaW5mby0+cGFyYW1zLmNyY190eXBlID0gbmV3X2NyY3R5cGU7CiAKIAkvKiBpZiBuZXR3b3JrIGludGVyZmFjZSB1cCwgcmVwcm9ncmFtIGhhcmR3YXJlICovCiAJaWYgKGluZm8tPm5ldGNvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BwZGV2LmMgYi9kcml2ZXJzL2NoYXIvcHBkZXYuYwppbmRleCAzMDZlZTBmLi5iZWU2YzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcHBkZXYuYworKysgYi9kcml2ZXJzL2NoYXIvcHBkZXYuYwpAQCAtNjUsMTAgKzY1LDExIEBACiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9wcGRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBQUF9WRVJTSU9OICJwcGRldjogdXNlci1zcGFjZSBwYXJhbGxlbCBwb3J0IGRyaXZlciIKICNkZWZpbmUgQ0hSREVWICJwcGRldiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYXcuYyBiL2RyaXZlcnMvY2hhci9yYXcuYwppbmRleCAzMGU0Y2JlLi4xNWE3YjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmF3LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jhdy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0yOSw3ICszMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnJhd19jbGFzczsKIHN0YXRpYyBzdHJ1Y3QgcmF3X2RldmljZV9kYXRhIHJhd19kZXZpY2VzW01BWF9SQVdfTUlOT1JTXTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKHJhd19tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHJhd19tdXRleCk7CiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYXdfY3RsX2ZvcHM7CSAgICAgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogCiAvKgpAQCAtNTMsNyArNTQsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlkb3duKCZyYXdfbXV0ZXgpOworCW11dGV4X2xvY2soJnJhd19tdXRleCk7CiAKIAkvKgogCSAqIEFsbCB3ZSBuZWVkIHRvIGRvIG9uIG9wZW4gaXMgY2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlzIGJvdW5kLgpAQCAtNzgsNyArNzksNyBAQAogCQlmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nID0KIAkJCWJkZXYtPmJkX2lub2RlLT5pX21hcHBpbmc7CiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gYmRldjsKLQl1cCgmcmF3X211dGV4KTsKKwltdXRleF91bmxvY2soJnJhd19tdXRleCk7CiAJcmV0dXJuIDA7CiAKIG91dDI6CkBAIC04Niw3ICs4Nyw3IEBACiBvdXQxOgogCWJsa2Rldl9wdXQoYmRldik7CiBvdXQ6Ci0JdXAoJnJhd19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyYXdfbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTk5LDE0ICsxMDAsMTQgQEAKIAljb25zdCBpbnQgbWlub3I9IGltaW5vcihpbm9kZSk7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAotCWRvd24oJnJhd19tdXRleCk7CisJbXV0ZXhfbG9jaygmcmF3X211dGV4KTsKIAliZGV2ID0gcmF3X2RldmljZXNbbWlub3JdLmJpbmRpbmc7CiAJaWYgKC0tcmF3X2RldmljZXNbbWlub3JdLmludXNlID09IDApIHsKIAkJLyogSGVyZSAgaW5vZGUtPmlfbWFwcGluZyA9PSBiZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nICAqLwogCQlpbm9kZS0+aV9tYXBwaW5nID0gJmlub2RlLT5pX2RhdGE7CiAJCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOwogCX0KLQl1cCgmcmF3X211dGV4KTsKKwltdXRleF91bmxvY2soJnJhd19tdXRleCk7CiAKIAliZF9yZWxlYXNlKGJkZXYpOwogCWJsa2Rldl9wdXQoYmRldik7CkBAIC0xODcsOSArMTg4LDkgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAotCQkJZG93bigmcmF3X211dGV4KTsKKwkJCW11dGV4X2xvY2soJnJhd19tdXRleCk7CiAJCQlpZiAocmF3ZGV2LT5pbnVzZSkgewotCQkJCXVwKCZyYXdfbXV0ZXgpOworCQkJCW11dGV4X3VubG9jaygmcmF3X211dGV4KTsKIAkJCQllcnIgPSAtRUJVU1k7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0yMTEsMTEgKzIxMiwxMSBAQAogCQkJCQliaW5kX2RldmljZSgmcnEpOwogCQkJCX0KIAkJCX0KLQkJCXVwKCZyYXdfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZyYXdfbXV0ZXgpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAotCQkJZG93bigmcmF3X211dGV4KTsKKwkJCW11dGV4X2xvY2soJnJhd19tdXRleCk7CiAJCQliZGV2ID0gcmF3ZGV2LT5iaW5kaW5nOwogCQkJaWYgKGJkZXYpIHsKIAkJCQlycS5ibG9ja19tYWpvciA9IE1BSk9SKGJkZXYtPmJkX2Rldik7CkBAIC0yMjMsNyArMjI0LDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJcnEuYmxvY2tfbWFqb3IgPSBycS5ibG9ja19taW5vciA9IDA7CiAJCQl9Ci0JCQl1cCgmcmF3X211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmcmF3X211dGV4KTsKIAkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmcnEsIHNpemVvZihycSkpKSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvcmlvL01ha2VmaWxlCmluZGV4IGJjZTJiZDEuLjJkMWM1YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9NYWtlZmlsZQpAQCAtOSw0ICs5LDQgQEAKIG9iai0kKENPTkZJR19SSU8pICs9IHJpby5vCiAKIHJpby1vYmpzIDo9IHJpb19saW51eC5vIHJpb2luaXQubyByaW9ib290Lm8gcmlvY21kLm8gcmlvY3RybC5vIHJpb2ludHIubyBcCi0gICAgICAgICAgICByaW9wYXJhbS5vIHJpb3BjaWNvcHkubyByaW9yb3V0ZS5vIHJpb3RhYmxlLm8gcmlvdHR5Lm8KKyAgICAgICAgICAgIHJpb3BhcmFtLm8gcmlvcm91dGUubyByaW90YWJsZS5vIHJpb3R0eS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2JvYXJkLmggYi9kcml2ZXJzL2NoYXIvcmlvL2JvYXJkLmgKaW5kZXggMjljOTgwMi4uYmRlYTYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9ib2FyZC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vYm9hcmQuaApAQCAtMzMsMTAgKzMzLDYgQEAKICNpZm5kZWYJX19yaW9fYm9hcmRfaF9fCiAjZGVmaW5lCV9fcmlvX2JvYXJkX2hfXwogCi0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfYm9hcmRfaF9zY2NzXyA9ICJAKCMpYm9hcmQuaAkxLjIiOwotI2VuZGlmCi0KIC8qCiAqKiBib2FyZC5oIGNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhlICpoYXJkd2FyZSogb2YgdGhlIGhvc3QgY2FyZHMuCiAqKiBJdCBkZXNjcmliZXMgdGhlIG1lbW9yeSBvdmVybGF5IGZvciB0aGUgZHVhbCBwb3J0IFJBTSBhcmVhLgpAQCAtNTMsMjkgKzQ5LDI5IEBACiAqKglUaGUgc2hhcGUgb2YgdGhlIEhvc3QgQ29udHJvbCBhcmVhLCBhdCBvZmZzZXQgMHg3QzAwLCBXcml0ZSBPbmx5CiAqLwogc3RydWN0IHNfQ3RybCB7Ci0JQllURSBEcEN0bDsJCS8qIDdDMDAgKi8KLQlCWVRFIERwX1VudXNlZDJfWzEyN107Ci0JQllURSBEcEludFNldDsJCS8qIDdDODAgKi8KLQlCWVRFIERwX1VudXNlZDNfWzEyN107Ci0JQllURSBEcFRwdVJlc2V0OwkvKiA3RDAwICovCi0JQllURSBEcF9VbnVzZWQ0X1sxMjddOwotCUJZVEUgRHBJbnRSZXNldDsJLyogN0Q4MCAqLwotCUJZVEUgRHBfVW51c2VkNV9bMTI3XTsKKwl1OCBEcEN0bDsJCS8qIDdDMDAgKi8KKwl1OCBEcF9VbnVzZWQyX1sxMjddOworCXU4IERwSW50U2V0OwkJLyogN0M4MCAqLworCXU4IERwX1VudXNlZDNfWzEyN107CisJdTggRHBUcHVSZXNldDsJLyogN0QwMCAqLworCXU4IERwX1VudXNlZDRfWzEyN107CisJdTggRHBJbnRSZXNldDsJLyogN0Q4MCAqLworCXU4IERwX1VudXNlZDVfWzEyN107CiB9OwogCiAvKgogKiogVGhlIFBST00gZGF0YSBhcmVhIG9uIHRoZSBob3N0ICgweDdDMDApLCBSZWFkIE9ubHkKICovCiBzdHJ1Y3Qgc19Qcm9tIHsKLQlXT1JEIERwU2x4Q29kZVsyXTsKLQlXT1JEIERwUmV2OwotCVdPUkQgRHBfVW51c2VkNl87Ci0JV09SRCBEcFVuaXFbNF07Ci0JV09SRCBEcEphaHJlOwotCVdPUkQgRHBXb2NoZTsKLQlXT1JEIERwSHdGZWF0dXJlWzVdOwotCVdPUkQgRHBPZW1JZDsKLQlXT1JEIERwU2lnZ3lbMTZdOworCXUxNiBEcFNseENvZGVbMl07CisJdTE2IERwUmV2OworCXUxNiBEcF9VbnVzZWQ2XzsKKwl1MTYgRHBVbmlxWzRdOworCXUxNiBEcEphaHJlOworCXUxNiBEcFdvY2hlOworCXUxNiBEcEh3RmVhdHVyZVs1XTsKKwl1MTYgRHBPZW1JZDsKKwl1MTYgRHBTaWdneVsxNl07CiB9OwogCiAvKgpAQCAtOTAsMTkgKzg2LDE5IEBACiAqKiBUaGUgdG9wIGVuZCBvZiBtZW1vcnkhCiAqLwogc3RydWN0IHNfUGFybU1hcFMgewkJLyogQXJlYSBjb250YWluaW5nIFBhcm0gTWFwIFBvaW50ZXIgKi8KLQlCWVRFIERwX1VudXNlZDhfW0RQX1BBUk1NQVBfQUREUl07Ci0JV09SRCBEcFBhcm1NYXBBZDsKKwl1OCBEcF9VbnVzZWQ4X1tEUF9QQVJNTUFQX0FERFJdOworCXUxNiBEcFBhcm1NYXBBZDsKIH07CiAKIHN0cnVjdCBzX1N0YXJ0VXBTIHsKLQlCWVRFIERwX1VudXNlZDlfW0RQX1NUQVJUVVBfQUREUl07Ci0JQllURSBEcF9Mb25nSnVtcFsweDRdOwotCUJZVEUgRHBfVW51c2VkMTBfWzJdOwotCUJZVEUgRHBfU2hvcnRKdW1wWzB4Ml07CisJdTggRHBfVW51c2VkOV9bRFBfU1RBUlRVUF9BRERSXTsKKwl1OCBEcF9Mb25nSnVtcFsweDRdOworCXU4IERwX1VudXNlZDEwX1syXTsKKwl1OCBEcF9TaG9ydEp1bXBbMHgyXTsKIH07CiAKIHVuaW9uIHVfU3JhbTJQYXJtTWFwIHsJCS8qIFRoaXMgaXMgdGhlIHRvcCBvZiBtZW1vcnkgKDB4N0UwMC0weDdGRkYpICovCi0JQllURSBEcFNyYW1NZW1bRFBfU1JBTTJfU0laRV07CisJdTggRHBTcmFtTWVtW0RQX1NSQU0yX1NJWkVdOwogCXN0cnVjdCBzX1Bhcm1NYXBTIERwUGFybU1hcFM7CiAJc3RydWN0IHNfU3RhcnRVcFMgRHBTdGFydFVwUzsKIH07CkBAIC0xMTEsMTEgKzEwNywxMSBAQAogKioJVGhpcyBpcyB0aGUgRFAgUkFNIG92ZXJsYXkuCiAqLwogc3RydWN0IERwUmFtIHsKLQlCWVRFIERwU3JhbTFbRFBfU1JBTTFfU0laRV07CS8qIDAwMDAgLSA3QkZGICovCisJdTggRHBTcmFtMVtEUF9TUkFNMV9TSVpFXTsJLyogMDAwMCAtIDdCRkYgKi8KIAl1bmlvbiB1X0N0cmxQcm9tIERwQ3RybFByb207CS8qIDdDMDAgLSA3REZGICovCiAJdW5pb24gdV9TcmFtMlBhcm1NYXAgRHBTcmFtMlBhcm1NYXA7CS8qIDdFMDAgLSA3RkZGICovCi0JQllURSBEcFNjcmF0Y2hbRFBfU0NSQVRDSF9TSVpFXTsJLyogODAwMCAtIDhGRkYgKi8KLQlCWVRFIERwU3JhbTNbRFBfU1JBTTNfU0laRV07CS8qIDkwMDAgLSBGRkZGICovCisJdTggRHBTY3JhdGNoW0RQX1NDUkFUQ0hfU0laRV07CS8qIDgwMDAgLSA4RkZGICovCisJdTggRHBTcmFtM1tEUF9TUkFNM19TSVpFXTsJLyogOTAwMCAtIEZGRkYgKi8KIH07CiAKICNkZWZpbmUJRHBDb250cm9sCURwQ3RybFByb20uRHBDdHJsLkRwQ3RsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2Jvb3Rwa3QuaCBiL2RyaXZlcnMvY2hhci9yaW8vYm9vdHBrdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDIyNjZlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vYm9vdHBrdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgIEIgTyBPIFQgICAgUCBBIEMgSyBFIFQgICBIIEUgQSBEIEUgUiAgIEYgSSBMIEUKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gQXV0aG9yICA6IElhbiBOYW5kaHJhCi0gRGF0ZSAgICA6Ci0KLSAqCi0gKiAgKEMpIDE5OTAgLSAyMDAwIFNwZWNpYWxpeCBJbnRlcm5hdGlvbmFsIEx0ZC4sIEJ5ZmxlZXQsIFN1cnJleSwgVUsuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gVmVyc2lvbiA6IDAuMDEKLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kcwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRGF0ZSAgICAgQnkgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX3BrdF9oCi0jZGVmaW5lIF9wa3RfaCAxCi0KLSNpZm5kZWYgbGludAotI2lmZGVmIFNDQ1MKLXN0YXRpYyBjaGFyICpfcmlvX2Jvb3Rwa3RfaF9zY2NzID0gIkAoIylib290cGt0LmgJMS4xIjsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAqIE92ZXJsYXllZCBvbnRvIHRoZSBEYXRhIGZpZWxkcyBvZiBhIHJlZ3VsYXIKLSAgICAgKiBQYWNrZXQKLSAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgQk9PVF9QS1QgQk9PVF9QS1Q7Ci1zdHJ1Y3QgQk9PVF9QS1QgewotCXNob3J0IHNlcV9udW07Ci0JY2hhciBkYXRhWzEwXTsKLX07Ci0KLQotI2VuZGlmCi0KLS8qKioqKioqKioqKiBlbmQgb2YgZmlsZSAqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vY2lycnVzLmggYi9kcml2ZXJzL2NoYXIvcmlvL2NpcnJ1cy5oCmluZGV4IDg5YmQ5NGUuLmY0ZjgzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vY2lycnVzLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9jaXJydXMuaApAQCAtNDAsNzMgKzQwLDcgQEAKICNlbmRpZgogI2RlZmluZSBfY2lycnVzX2ggMQogCi0KLQotLyogQml0IGZpZWxkcyBmb3IgcGFydGljdWxhciByZWdpc3RlcnMgKi8KLQotLyogR0NSICovCi0jZGVmaW5lIEdDUl9TRVJJQUwJMHgwMAkvKiBDb25maWd1cmUgYXMgc2VyaWFsIGNoYW5uZWwgKi8KLSNkZWZpbmUgR0NSX1BBUkFMTEVMCTB4ODAJLyogQ29uZmlndXJlIGFzIHBhcmFsbGVsIGNoYW5uZWwgKi8KLQotLyogUkRTUiAtIHdoZW4gc3RhdHVzIHJlYWQgZnJvbSBGSUZPICovCi0jZGVmaW5lCVJEU1JfQlJFQUsJCTB4MDgJLyogQnJlYWsgcmVjZWl2ZWQgKi8KLSNkZWZpbmUgUkRTUl9USU1FT1VUICAgIAkweDgwCS8qIE5vIG5ldyBkYXRhIHRpbWVvdXQgKi8KLSNkZWZpbmUgUkRTUl9TQzEgIAkgIAkweDEwCS8qIFNwZWNpYWwgY2hhciAxICh0eCBYT04pIG1hdGNoZWQgKi8KLSNkZWZpbmUgUkRTUl9TQzIgIAkgIAkweDIwCS8qIFNwZWNpYWwgY2hhciAyICh0eCBYT0ZGKSBtYXRjaGVkICovCi0jZGVmaW5lIFJEU1JfU0MxMl9NQVNLCSAgCTB4MzAJLyogTWFzayBmb3Igc3BlY2lhbCBjaGFycyAxIGFuZCAyICovCi0KLS8qIFBQUiAqLwotI2RlZmluZSBQUFJfREVGQVVMVAkweDMxCS8qIERlZmF1bHQgdmFsdWUgLSBmb3IgYSAyNU1oeiBjbG9jayBnaXZlcwotCQkJCSAgIGEgdGltZW91dCBwZXJpb2Qgb2YgMW1zICovCi0KLS8qIExJVlIgKi8KLSNkZWZpbmUJTElWUl9FWENFUFRJT04JMHgwNwkvKiBSZWNlaXZlIGV4Y2VwdGlvbiBpbnRlcnJ1cHQgKi8KLQotLyogQ0NSICovCi0jZGVmaW5lCUNDUl9SRVNFVAkweDgwCS8qIFJlc2V0IGNoYW5uZWwgKi8KLSNkZWZpbmUJQ0NSX0NIQU5HRQkweDRlCS8qIENPUidzIGhhdmUgY2hhbmdlZCAtIE5CIGFsd2F5cyBjaGFuZ2UgYWxsCi0JCQkJICAgQ09SJ3MgKi8KLSNkZWZpbmUJQ0NSX1dGTFVTSAkweDgyCS8qIEZsdXNoIHRyYW5zbWl0IEZJRk8gYW5kIFRTUiAvIFRIUiAqLwotCi0jZGVmaW5lCUNDUl9TRU5EU0MxCTB4MjEJLyogU2VuZCBzcGVjaWFsIGNoYXJhY3RlciBvbmUgKi8KLSNkZWZpbmUgQ0NSX1NFTkRTQzIJMHgyMgkvKiBTZW5kIHNwZWNpYWwgY2hhcmFjdGVyIHR3byAqLwotI2RlZmluZSBDQ1JfU0VORFNDMwkweDIzCS8qIFNlbmQgc3BlY2lhbCBjaGFyYWN0ZXIgdGhyZWUgKi8KLSNkZWZpbmUgQ0NSX1NFTkRTQzQJMHgyNAkvKiBTZW5kIHNwZWNpYWwgY2hhcmFjdGVyIGZvdXIgKi8KLQotI2RlZmluZSBDQ1JfVEVOQUJMRQkweDE4CS8qIEVuYWJsZSB0cmFuc21pdHRlciAqLwotI2RlZmluZQlDQ1JfVERJU0FCTEUJMHgxNAkvKiBEaXNhYmxlIHRyYW5zbWl0dGVyICovCi0jZGVmaW5lIENDUl9SRU5BQkxFCTB4MTIJLyogRW5hYmxlIHJlY2VpdmVyICovCi0jZGVmaW5lIENDUl9SRElTQUJMRQkweDExCS8qIERpc2FibGUgcmVjZWl2ZXIgKi8KLQotI2RlZmluZQlDQ1JfUkVBRFkJMHgwMAkvKiBDQ1IgaXMgcmVhZHkgZm9yIGFub3RoZXIgY29tbWFuZCAqLwotCi0vKiBDQ1NSICovCi0jZGVmaW5lIENDU1JfVFhFTkFCTEUJMHgwOAkvKiBUcmFuc21pdHRlciBlbmFibGUgKi8KLSNkZWZpbmUgQ0NTUl9SWEVOQUJMRQkweDgwCS8qIFJlY2VpdmVyIGVuYWJsZSAqLwotI2RlZmluZSBDQ1NSX1RYRkxPV09GRgkweDA0CS8qIFRyYW5zbWl0IGZsb3cgb2ZmICovCi0jZGVmaW5lIENDU1JfVFhGTE9XT04JMHgwMgkvKiBUcmFuc21pdCBmbG93IG9uICovCi0KLS8qIFNWUlIgKi8KLSNkZWZpbmUJU1ZSUl9SRUNFSVZFCTB4MDEJLyogUmVjZWl2ZSBpbnRlcnJ1cHQgcGVuZGluZyAqLwotI2RlZmluZQlTVlJSX1RSQU5TTUlUCTB4MDIJLyogVHJhbnNtaXQgaW50ZXJydXB0IHBlbmRpbmcgKi8KLSNkZWZpbmUJU1ZSUl9NT0RFTQkweDA0CS8qIE1vZGVtIGludGVycnVwdCBwZW5kaW5nICovCi0KLS8qIENBUiAqLwotI2RlZmluZSBDQVJfUE9SVFMJMHgwMwkvKiBCaXQgZmllbGRzIGZvciBwb3J0cyAqLwotCi0vKiBJRVIgKi8KLSNkZWZpbmUJSUVSX01PREVNCTB4ODAJLyogQ2hhbmdlIGluIG1vZGVtIHN0YXR1cyAqLwotI2RlZmluZQlJRVJfUkVDRUlWRQkweDEwCS8qIEdvb2QgZGF0YSAvIGRhdGEgZXhjZXB0aW9uICovCi0jZGVmaW5lIElFUl9UUkFOU01JVFIJMHgwNAkvKiBUcmFuc21pdCByZWFkeSAoRklGTyBlbXB0eSkgKi8KLSNkZWZpbmUJSUVSX1RSQU5TTUlURQkweDAyCS8qIFRyYW5zbWl0IGVtcHR5ICovCi0jZGVmaW5lIElFUl9USU1FT1VUCTB4MDEJLyogVGltZW91dCBvbiBubyBkYXRhICovCi0KLSNkZWZpbmUJSUVSX0RFRkFVTFQJMHg5NAkvKiBEZWZhdWx0IHZhbHVlcyAqLwotI2RlZmluZSBJRVJfUEFSQUxMRUwgICAgMHg4NAkvKiBEZWZhdWx0IGZvciBQYXJhbGxlbCAqLwotI2RlZmluZQlJRVJfRU1QVFkJMHg5MgkvKiBUcmFuc21pdHRlciBlbXB0eSByYXRoZXIgdGhhbiByZWFkeSAqLwotCi0vKiBDT1IxIC0gRHJpdmVyIG9ubHkgKi8KLSNkZWZpbmUJQ09SMV9JTlBDSwkweDEwCS8qIENoZWNrIHBhcml0eSBvZiByZWNlaXZlZCBjaGFyYWN0ZXJzICovCisvKiBCaXQgZmllbGRzIGZvciBwYXJ0aWN1bGFyIHJlZ2lzdGVycyBzaGFyZWQgd2l0aCBkcml2ZXIgKi8KIAogLyogQ09SMSAtIGRyaXZlciBhbmQgUlRBICovCiAjZGVmaW5lCUNPUjFfT0RECTB4ODAJLyogT2RkIHBhcml0eSAqLwpAQCAtMjIyLDM1ICsxNTYsNiBAQAogCiAjZGVmaW5lCU1TVlIxX0hPU1QJMHhmMwkvKiBUaGUgYml0cyB0aGUgaG9zdCB3YW50cyAqLwogCi0vKiBNU1ZSMiAqLwotI2RlZmluZQlNU1ZSMl9EU1IJMHgwMgkvKiBEU1Igb3V0cHV0IHBpbiAoRFRSIG9uIENpcnJ1cykgKi8KLQotLyogTUNPUiAqLwotI2RlZmluZQlNQ09SX0NECSAgICAgICAgMHg4MAkvKiBDRCAoRFNSIG9uIENpcnJ1cykgKi8KLSNkZWZpbmUJTUNPUl9SVFMJMHg0MAkvKiBSVFMgKENUUyBvbiBDaXJydXMpICovCi0jZGVmaW5lCU1DT1JfUkkJICAgICAgICAweDIwCS8qIFJJICovCi0jZGVmaW5lCU1DT1JfRFRSCTB4MTAJLyogRFRSIChDRCBvbiBDaXJydXMpICovCi0KLSNkZWZpbmUgTUNPUl9ERUZBVUxUICAgIChNQ09SX0NEIHwgTUNPUl9SVFMgfCBNQ09SX1JJIHwgTUNPUl9EVFIpCi0jZGVmaW5lIE1DT1JfRlVMTE1PREVNICBNQ09SX0RFRkFVTFQKLSNkZWZpbmUgTUNPUl9SSjQ1ICAgICAgIChNQ09SX0NEIHwgTUNPUl9SVFMgfCBNQ09SX0RUUikKLSNkZWZpbmUgTUNPUl9SRVNUUklDVEVEIChNQ09SX0NEIHwgTUNPUl9SVFMpCi0KLS8qIE1vcmUgTUNPUiAtIEgvVyBIYW5kc2hha2UgKGZsb3djb250cm9sKSBzdHVmZiAqLwotI2RlZmluZQlNQ09SX1RIUkVTSDgJMHgwOAkvKiBlaWdodCBjaGFyYWN0ZXJzIHRoZW4gd2Ugc3RvcCAqLwotI2RlZmluZQlNQ09SX1RIUkVTSDkJMHgwOQkvKiBuaW5lIGNoYXJhY3RlcnMgdGhlbiB3ZSBzdG9wICovCi0jZGVmaW5lCU1DT1JfVEhSRVNIMTAJMHgwQQkvKiB0ZW4gY2hhcmFjdGVycyB0aGVuIHdlIHN0b3AgKi8KLSNkZWZpbmUJTUNPUl9USFJFU0gxMQkweDBCCS8qIGVsZXZlbiBjaGFyYWN0ZXJzIHRoZW4gd2Ugc3RvcCAqLwotCi0jZGVmaW5lCU1DT1JfVEhSRVNIQklUUyAweDBGCS8qIG1hc2sgZm9yIEFORGluZyBvdXQgdGhlIGFib3ZlICovCi0KLSNkZWZpbmUJTUNPUl9USFJFU0hPTEQJTUNPUl9USFJFU0g5CS8qIE1VU1QgQkUgR1JFQVRFUiBUSEFOIENPUjNfVEhSRVNIT0xEICovCi0KLQotLyogUlRQUiAqLwotI2RlZmluZSBSVFBSX0RFRkFVTFQJMHgwMgkvKiBEZWZhdWx0ICovCi0KLQogLyogRGVmaW5lcyBmb3IgdGhlIHN1YnNjcmlwdHMgb2YgYSBDT05GSUcgcGFja2V0ICovCiAjZGVmaW5lCUNPTkZJR19DT1IxCTEJLyogT3B0aW9uIHJlZ2lzdGVyIDEgKi8KICNkZWZpbmUJQ09ORklHX0NPUjIJMgkvKiBPcHRpb24gcmVnaXN0ZXIgMiAqLwpAQCAtMjY0LDE5ICsxNjksNiBAQAogI2RlZmluZQlDT05GSUdfVFhCQVVECTEwCS8qIFR4IGJhdWQgcmF0ZSAqLwogI2RlZmluZQlDT05GSUdfUlhCQVVECTExCS8qIFJ4IGJhdWQgcmF0ZSAqLwogCi0vKiBQb3J0IHN0YXR1cyBzdHVmZiAqLwotI2RlZmluZQlJRExFX0NMT1NFRAkwCS8qIENsb3NlZCAqLwotI2RlZmluZSBJRExFX09QRU4JMQkvKiBJZGxlIG9wZW4gKi8KLSNkZWZpbmUgSURMRV9CUkVBSwkyCS8qIElkbGUgb24gYnJlYWsgKi8KLQotLyogU3Vic2NyaXB0IG9mIE1PREVNIFNUQVRVUyBwYWNrZXQgKi8KLSNkZWZpbmUJTU9ERU1fVkFMVUUJMwkvKiBDdXJyZW50IHZhbHVlcyBvZiBoYW5kc2hha2UgcGlucyAqLwotLyogU3Vic2NyaXB0IG9mIFNCUkVBSyBwYWNrZXQgKi8KLSNkZWZpbmUgQlJFQUtfTEVOR1RICTEJLyogTGVuZ3RoIG9mIGEgYnJlYWsgaW4gc2xpY2VzIG9mIDAuMDEgc2Vjb25kcwotCQkJCSAgIDAgPSBzdGF5IG9uIGJyZWFrIHVudGlsIGFuIEVCUkVBSyBjb21tYW5kCi0JCQkJICAgaXMgc2VudCAqLwotCi0KICNkZWZpbmUJUFJFX0VNUFRJVkUJMHg4MAkvKiBQcmUtZW1wdGl2ZSBiaXQgaW4gY29tbWFuZCBmaWVsZCAqLwogCiAvKiBQYWNrZXQgdHlwZXMgZ29pbmcgZnJvbSBIb3N0IHRvIHJlbW90ZSAtIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBPUEVOLCBNT1BFTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vY21kYmxrLmggYi9kcml2ZXJzL2NoYXIvcmlvL2NtZGJsay5oCmluZGV4IGE5YThjNDUuLmM0NmIyZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vY21kYmxrLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9jbWRibGsuaApAQCAtNDgsMTAgKzQ4LDEwIEBACiAJc3RydWN0IENtZEJsayAqTmV4dFA7CS8qIFBvaW50ZXIgdG8gbmV4dCBjb21tYW5kIGJsb2NrICovCiAJc3RydWN0IFBLVCBQYWNrZXQ7CS8qIEEgcGFja2V0LCB0byBjb3B5IHRvIHRoZSBydXAgKi8KIAkvKiBUaGUgZnVuYyB0byBjYWxsIHRvIGNoZWNrIGlmIE9LICovCi0JaW50ICgqUHJlRnVuY1ApIChpbnQsIHN0cnVjdCBDbWRCbGsgKik7CisJaW50ICgqUHJlRnVuY1ApICh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgQ21kQmxrICopOwogCWludCBQcmVBcmc7CQkvKiBUaGUgYXJnIGZvciB0aGUgZnVuYyAqLwogCS8qIFRoZSBmdW5jIHRvIGNhbGwgd2hlbiBjb21wbGV0ZWQgKi8KLQlpbnQgKCpQb3N0RnVuY1ApIChpbnQsIHN0cnVjdCBDbWRCbGsgKik7CisJaW50ICgqUG9zdEZ1bmNQKSAodW5zaWduZWQgbG9uZywgc3RydWN0IENtZEJsayAqKTsKIAlpbnQgUG9zdEFyZzsJCS8qIFRoZSBhcmcgZm9yIHRoZSBmdW5jICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2NtZHBrdC5oIGIvZHJpdmVycy9jaGFyL3Jpby9jbWRwa3QuaAppbmRleCA3N2NlZThkLi4zNTdhZTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2NtZHBrdC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vY21kcGt0LmgKQEAgLTU1LDI0ICs1NSwyNCBAQAogKiogYXQgRGF0YVsyXSBpbiB0aGUgYWN0dWFsIHBrdCEKICovCiBzdHJ1Y3QgQm9vdFNlcXVlbmNlIHsKLQlXT1JEIE51bVBhY2tldHM7Ci0JV09SRCBMb2FkQmFzZTsKLQlXT1JEIENvZGVTaXplOworCXUxNiBOdW1QYWNrZXRzOworCXUxNiBMb2FkQmFzZTsKKwl1MTYgQ29kZVNpemU7CiB9OwogCiAjZGVmaW5lCUJPT1RfU0VRVUVOQ0VfTEVOCTgKIAogc3RydWN0IFNhbVRvcCB7Ci0JQllURSBVbml0OwotCUJZVEUgTGluazsKKwl1OCBVbml0OworCXU4IExpbms7CiB9OwogCiBzdHJ1Y3QgQ21kSGRyIHsKLQlCWVRFIFBjQ29tbWFuZDsKKwl1OCBQY0NvbW1hbmQ7CiAJdW5pb24gewotCQlCWVRFIFBjUGhiTnVtOwotCQlCWVRFIFBjTGlua051bTsKLQkJQllURSBQY0lETnVtOworCQl1OCBQY1BoYk51bTsKKwkJdTggUGNMaW5rTnVtOworCQl1OCBQY0lETnVtOwogCX0gVTA7CiB9OwogCkBAIC04NCwyOCArODQsMjggQEAKIAkJCXN0cnVjdCBCb290U2VxdWVuY2UgUGNCb290U2VxdWVuY2U7CiAJCX0gUzE7CiAJCXN0cnVjdCB7Ci0JCQlXT1JEIFBjU2VxdWVuY2U7Ci0JCQlCWVRFIFBjQm9vdERhdGFbUlRBX0JPT1RfREFUQV9TSVpFXTsKKwkJCXUxNiBQY1NlcXVlbmNlOworCQkJdTggUGNCb290RGF0YVtSVEFfQk9PVF9EQVRBX1NJWkVdOwogCQl9IFMyOwogCQlzdHJ1Y3QgewotCQkJV09SRCBfX2NydWRfXzsKLQkJCUJZVEUgUGNVbmlxTnVtWzRdOwkvKiB0aGlzIGlzIHJlYWxseSBhIHVpbnQuICovCi0JCQlCWVRFIFBjTW9kdWxlVHlwZXM7CS8qIHdoYXQgbW9kdWxlcyBhcmUgZml0dGVkICovCisJCQl1MTYgX19jcnVkX187CisJCQl1OCBQY1VuaXFOdW1bNF07CS8qIHRoaXMgaXMgcmVhbGx5IGEgdWludC4gKi8KKwkJCXU4IFBjTW9kdWxlVHlwZXM7CS8qIHdoYXQgbW9kdWxlcyBhcmUgZml0dGVkICovCiAJCX0gUzM7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgQ21kSGRyIENtZEhkcjsKLQkJCUJZVEUgX191bmRlZmluZWRfXzsKLQkJCUJZVEUgUGNNb2RlbVN0YXR1czsKLQkJCUJZVEUgUGNQb3J0U3RhdHVzOwotCQkJQllURSBQY1N1YkNvbW1hbmQ7CS8qIGNvbW1hbmRzIGxpa2UgbWVtIG9yIHJlZ2lzdGVyIGR1bXAgKi8KLQkJCVdPUkQgUGNTdWJBZGRyOwkvKiBBZGRyZXNzIGZvciBjb21tYW5kICovCi0JCQlCWVRFIFBjU3ViRGF0YVs2NF07CS8qIERhdGUgYXJlYSBmb3IgY29tbWFuZCAqLworCQkJdTggX191bmRlZmluZWRfXzsKKwkJCXU4IFBjTW9kZW1TdGF0dXM7CisJCQl1OCBQY1BvcnRTdGF0dXM7CisJCQl1OCBQY1N1YkNvbW1hbmQ7CS8qIGNvbW1hbmRzIGxpa2UgbWVtIG9yIHJlZ2lzdGVyIGR1bXAgKi8KKwkJCXUxNiBQY1N1YkFkZHI7CS8qIEFkZHJlc3MgZm9yIGNvbW1hbmQgKi8KKwkJCXU4IFBjU3ViRGF0YVs2NF07CS8qIERhdGUgYXJlYSBmb3IgY29tbWFuZCAqLwogCQl9IFM0OwogCQlzdHJ1Y3QgewogCQkJc3RydWN0IENtZEhkciBDbWRIZHI7Ci0JCQlCWVRFIFBjQ29tbWFuZFRleHRbMV07Ci0JCQlCWVRFIF9fY3J1ZF9fWzIwXTsKLQkJCUJZVEUgUGNJRE51bTI7CS8qIEl0IGhhZCB0byBnbyBzb21ld2hlcmUhICovCisJCQl1OCBQY0NvbW1hbmRUZXh0WzFdOworCQkJdTggX19jcnVkX19bMjBdOworCQkJdTggUGNJRE51bTI7CS8qIEl0IGhhZCB0byBnbyBzb21ld2hlcmUhICovCiAJCX0gUzU7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgQ21kSGRyIENtZEhkcjsKQEAgLTExOCw0NSArMTE4LDQ1IEBACiAJdW5pb24gewogCQlzdHJ1Y3QgewogCQkJc3RydWN0IHsKLQkJCQl1Y2hhciBQY0NvbW1hbmQ7CisJCQkJdTggUGNDb21tYW5kOwogCQkJCXVuaW9uIHsKLQkJCQkJdWNoYXIgUGNQaGJOdW07Ci0JCQkJCXVjaGFyIFBjTGlua051bTsKLQkJCQkJdWNoYXIgUGNJRE51bTsKKwkJCQkJdTggUGNQaGJOdW07CisJCQkJCXU4IFBjTGlua051bTsKKwkJCQkJdTggUGNJRE51bTsKIAkJCQl9IFUwOwogCQkJfSBDbWRIZHI7CiAJCQlzdHJ1Y3QgewotCQkJCXVzaG9ydCBOdW1QYWNrZXRzOwotCQkJCXVzaG9ydCBMb2FkQmFzZTsKLQkJCQl1c2hvcnQgQ29kZVNpemU7CisJCQkJdTE2IE51bVBhY2tldHM7CisJCQkJdTE2IExvYWRCYXNlOworCQkJCXUxNiBDb2RlU2l6ZTsKIAkJCX0gUGNCb290U2VxdWVuY2U7CiAJCX0gUzE7CiAJCXN0cnVjdCB7Ci0JCQl1c2hvcnQgUGNTZXF1ZW5jZTsKLQkJCXVjaGFyIFBjQm9vdERhdGFbUlRBX0JPT1RfREFUQV9TSVpFXTsKKwkJCXUxNiBQY1NlcXVlbmNlOworCQkJdTggUGNCb290RGF0YVtSVEFfQk9PVF9EQVRBX1NJWkVdOwogCQl9IFMyOwogCQlzdHJ1Y3QgewotCQkJdXNob3J0IF9fY3J1ZF9fOwotCQkJdWNoYXIgUGNVbmlxTnVtWzRdOwkvKiB0aGlzIGlzIHJlYWxseSBhIHVpbnQuICovCi0JCQl1Y2hhciBQY01vZHVsZVR5cGVzOwkvKiB3aGF0IG1vZHVsZXMgYXJlIGZpdHRlZCAqLworCQkJdTE2IF9fY3J1ZF9fOworCQkJdTggUGNVbmlxTnVtWzRdOwkvKiB0aGlzIGlzIHJlYWxseSBhIHVpbnQuICovCisJCQl1OCBQY01vZHVsZVR5cGVzOwkvKiB3aGF0IG1vZHVsZXMgYXJlIGZpdHRlZCAqLwogCQl9IFMzOwogCQlzdHJ1Y3QgewotCQkJdXNob3J0IF9fY21kX2hkcl9fOwotCQkJdWNoYXIgX191bmRlZmluZWRfXzsKLQkJCXVjaGFyIFBjTW9kZW1TdGF0dXM7Ci0JCQl1Y2hhciBQY1BvcnRTdGF0dXM7Ci0JCQl1Y2hhciBQY1N1YkNvbW1hbmQ7Ci0JCQl1c2hvcnQgUGNTdWJBZGRyOwotCQkJdWNoYXIgUGNTdWJEYXRhWzY0XTsKKwkJCXUxNiBfX2NtZF9oZHJfXzsKKwkJCXU4IF9fdW5kZWZpbmVkX187CisJCQl1OCBQY01vZGVtU3RhdHVzOworCQkJdTggUGNQb3J0U3RhdHVzOworCQkJdTggUGNTdWJDb21tYW5kOworCQkJdTE2IFBjU3ViQWRkcjsKKwkJCXU4IFBjU3ViRGF0YVs2NF07CiAJCX0gUzQ7CiAJCXN0cnVjdCB7Ci0JCQl1c2hvcnQgX19jbWRfaGRyX187Ci0JCQl1Y2hhciBQY0NvbW1hbmRUZXh0WzFdOwotCQkJdWNoYXIgX19jcnVkX19bMjBdOwotCQkJdWNoYXIgUGNJRE51bTI7CS8qIFRhY2tlZCBvbiBlbmQgKi8KKwkJCXUxNiBfX2NtZF9oZHJfXzsKKwkJCXU4IFBjQ29tbWFuZFRleHRbMV07CisJCQl1OCBfX2NydWRfX1syMF07CisJCQl1OCBQY0lETnVtMjsJLyogVGFja2VkIG9uIGVuZCAqLwogCQl9IFM1OwogCQlzdHJ1Y3QgewotCQkJdXNob3J0IF9fY21kX2hkcl9fOworCQkJdTE2IF9fY21kX2hkcl9fOwogCQkJc3RydWN0IFRvcCBUb3BvbG9neVtMSU5LU19QRVJfVU5JVF07CiAJCX0gUzY7CiAJfSBVMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vY29udHJvbC5oIGIvZHJpdmVycy9jaGFyL3Jpby9jb250cm9sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NTNkMDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9jb250cm9sLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgQyBPIE4gVCBSIE8gTCAgIFAgQSBDIEsgRSBUICAgSCBFIEEgRCBFIFIgUwotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSm9uIEJyYXduCi0gRGF0ZSAgICA6Ci0KLSAqCi0gKiAgKEMpIDE5OTAgLSAyMDAwIFNwZWNpYWxpeCBJbnRlcm5hdGlvbmFsIEx0ZC4sIEJ5ZmxlZXQsIFN1cnJleSwgVUsuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gVmVyc2lvbiA6IDAuMDEKLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kcwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRGF0ZSAgICAgQnkgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfY29udHJvbF9oCi0jZGVmaW5lIF9jb250cm9sX2gKLQotI2lmbmRlZiBsaW50Ci0vKiBzdGF0aWMgY2hhciAqX3Jpb19jb250cm9sX2hfc2NjcyA9ICJAKCMpY29udHJvbC5oCTEuNCI7ICovCi0jZW5kaWYKLQotI2RlZmluZQlDT05UUk9MCQknXicKLSNkZWZpbmUgSUZPQUQJCSggQ09OVFJPTCArIDEgKQotI2RlZmluZQlJREVOVElGWQkoIENPTlRST0wgKyAyICkKLSNkZWZpbmUJWk9NQklFCQkoIENPTlRST0wgKyAzICkKLSNkZWZpbmUJVUZPQUQJCSggQ09OVFJPTCArIDQgKQotI2RlZmluZSBJV0FJVAkJKCBDT05UUk9MICsgNSApCi0KLSNkZWZpbmUJSUZPQURfTUFHSUMJMHhGMEFECS8qIG9mIGNvdXJzZSAqLwotI2RlZmluZQlaT01CSUVfTUFHSUMJKH4weERFQUQpCS8qIG5vdCBkZWFkIC0+IHpvbWJpZSAqLwotI2RlZmluZQlVRk9BRF9NQUdJQwkweEQxRQkvKiBraWxsLXlvdXItbmVpZ2hib3VyICovCi0jZGVmaW5lCUlXQUlUX01BR0lDCTB4QjFERQkvKiBCaWRlIHlvdXIgdGltZSAqLwotCi0jZW5kaWYKLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9kYWVtb24uaCBiL2RyaXZlcnMvY2hhci9yaW8vZGFlbW9uLmgKaW5kZXggMjhhOTkxYmQuLjU4MThhOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vZGFlbW9uLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9kYWVtb24uaApAQCAtNDUsMTUgKzQ1LDE1IEBACiAqLwogCiBzdHJ1Y3QgRXJyb3IgewotCXVpbnQgRXJyb3I7Ci0JdWludCBFbnRyeTsKLQl1aW50IE90aGVyOworCXVuc2lnbmVkIGludCBFcnJvcjsKKwl1bnNpZ25lZCBpbnQgRW50cnk7CisJdW5zaWduZWQgaW50IE90aGVyOwogfTsKIAogc3RydWN0IERvd25Mb2FkIHsKIAljaGFyICpEYXRhUDsKLQl1aW50IENvdW50OwotCXVpbnQgUHJvZHVjdENvZGU7CisJdW5zaWduZWQgaW50IENvdW50OworCXVuc2lnbmVkIGludCBQcm9kdWN0Q29kZTsKIH07CiAKIC8qCkBAIC02OCw2OSArNjgsNjQgQEAKICNlbmRpZgogCiBzdHJ1Y3QgUG9ydFNldHVwIHsKLQl1aW50IEZyb207CQkvKiBTZXQvQ2xlYXIgWFAgJiBJWEFOWSBDb250cm9sIGZyb20gdGhpcyBwb3J0Li4uLiAqLwotCXVpbnQgVG87CQkvKiAuLi4uIHRvIHRoaXMgcG9ydCAqLwotCXVpbnQgWHBDcHM7CQkvKiBhdCB0aGlzIHNwZWVkICovCisJdW5zaWduZWQgaW50IEZyb207CQkvKiBTZXQvQ2xlYXIgWFAgJiBJWEFOWSBDb250cm9sIGZyb20gdGhpcyBwb3J0Li4uLiAqLworCXVuc2lnbmVkIGludCBUbzsJCS8qIC4uLi4gdG8gdGhpcyBwb3J0ICovCisJdW5zaWduZWQgaW50IFhwQ3BzOwkJLyogYXQgdGhpcyBzcGVlZCAqLwogCWNoYXIgWHBPbltNQVhfWFBfQ1RSTF9MRU5dOwkvKiB0aGlzIGlzIHRoZSBzdGFydCBzdHJpbmcgKi8KIAljaGFyIFhwT2ZmW01BWF9YUF9DVFJMX0xFTl07CS8qIHRoaXMgaXMgdGhlIHN0b3Agc3RyaW5nICovCi0JdWNoYXIgSXhBbnk7CQkvKiBlbmFibGUvZGlzYWJsZSBJWEFOWSAqLwotCXVjaGFyIEl4T247CQkvKiBlbmFibGUvZGlzYWJsZSBJWE9OICovCi0JdWNoYXIgTG9jazsJCS8qIGxvY2sgcG9ydCBwYXJhbXMgKi8KLQl1Y2hhciBTdG9yZTsJCS8qIHN0b3JlIHBhcmFtcyBhY3Jvc3MgY2xvc2VzICovCi0JdWNoYXIgRHJhaW47CQkvKiBjbG9zZSBvbmx5IHdoZW4gZHJhaW5lZCAqLworCXU4IEl4QW55OwkJCS8qIGVuYWJsZS9kaXNhYmxlIElYQU5ZICovCisJdTggSXhPbjsJCQkvKiBlbmFibGUvZGlzYWJsZSBJWE9OICovCisJdTggTG9jazsJCQkvKiBsb2NrIHBvcnQgcGFyYW1zICovCisJdTggU3RvcmU7CQkJLyogc3RvcmUgcGFyYW1zIGFjcm9zcyBjbG9zZXMgKi8KKwl1OCBEcmFpbjsJCQkvKiBjbG9zZSBvbmx5IHdoZW4gZHJhaW5lZCAqLwogfTsKIAogc3RydWN0IExwYlJlcSB7Ci0JdWludCBIb3N0OwotCXVpbnQgTGluazsKKwl1bnNpZ25lZCBpbnQgSG9zdDsKKwl1bnNpZ25lZCBpbnQgTGluazsKIAlzdHJ1Y3QgTFBCICpMcGJQOwogfTsKIAogc3RydWN0IFJ1cFJlcSB7Ci0JdWludCBIb3N0TnVtOwotCXVpbnQgUnVwTnVtOworCXVuc2lnbmVkIGludCBIb3N0TnVtOworCXVuc2lnbmVkIGludCBSdXBOdW07CiAJc3RydWN0IFJVUCAqUnVwUDsKIH07CiAKIHN0cnVjdCBQb3J0UmVxIHsKLQl1aW50IFN5c1BvcnQ7CisJdW5zaWduZWQgaW50IFN5c1BvcnQ7CiAJc3RydWN0IFBvcnQgKlBvcnRQOwogfTsKIAogc3RydWN0IFN0cmVhbUluZm8gewotCXVpbnQgU3lzUG9ydDsKLSNpZiAwCi0JcXVldWVfdCBSUXVldWU7Ci0JcXVldWVfdCBXUXVldWU7Ci0jZWxzZQorCXVuc2lnbmVkIGludCBTeXNQb3J0OwogCWludCBSUXVldWU7CiAJaW50IFdRdWV1ZTsKLSNlbmRpZgogfTsKIAogc3RydWN0IEhvc3RSZXEgewotCXVpbnQgSG9zdE51bTsKKwl1bnNpZ25lZCBpbnQgSG9zdE51bTsKIAlzdHJ1Y3QgSG9zdCAqSG9zdFA7CiB9OwogCiBzdHJ1Y3QgSG9zdERwUmFtIHsKLQl1aW50IEhvc3ROdW07CisJdW5zaWduZWQgaW50IEhvc3ROdW07CiAJc3RydWN0IERwUmFtICpEcFJhbVA7CiB9OwogCiBzdHJ1Y3QgRGVidWdDdHJsIHsKLQl1aW50IFN5c1BvcnQ7Ci0JdWludCBEZWJ1ZzsKLQl1aW50IFdhaXQ7CisJdW5zaWduZWQgaW50IFN5c1BvcnQ7CisJdW5zaWduZWQgaW50IERlYnVnOworCXVuc2lnbmVkIGludCBXYWl0OwogfTsKIAogc3RydWN0IE1hcEluZm8gewotCXVpbnQgRmlyc3RQb3J0OwkJLyogOCBwb3J0cywgc3RhcnRpbmcgZnJvbSB0aGlzICh0dHkpIG51bWJlciAqLwotCXVpbnQgUnRhVW5pcXVlOwkJLyogcmVzaWRlIG9uIHRoaXMgUlRBICh1bmlxdWUgbnVtYmVyKSAqLworCXVuc2lnbmVkIGludCBGaXJzdFBvcnQ7CQkvKiA4IHBvcnRzLCBzdGFydGluZyBmcm9tIHRoaXMgKHR0eSkgbnVtYmVyICovCisJdW5zaWduZWQgaW50IFJ0YVVuaXF1ZTsJCS8qIHJlc2lkZSBvbiB0aGlzIFJUQSAodW5pcXVlIG51bWJlcikgKi8KIH07CiAKIHN0cnVjdCBNYXBJbiB7Ci0JdWludCBOdW1FbnRyaWVzOwkvKiBIb3cgbWFueSBwb3J0IHNldHMgYXJlIHdlIG1hcHBpbmc/ICovCisJdW5zaWduZWQgaW50IE51bUVudHJpZXM7CS8qIEhvdyBtYW55IHBvcnQgc2V0cyBhcmUgd2UgbWFwcGluZz8gKi8KIAlzdHJ1Y3QgTWFwSW5mbyAqTWFwSW5mb1A7CS8qIFBvaW50ZXIgdG8gKHVzZXIgc3BhY2UpIGluZm8gKi8KIH07CiAKQEAgLTE0NywxMyArMTQyLDEzIEBACiB9OwogCiBzdHJ1Y3QgSWRlbnRpZnlSdGEgewotCXVsb25nIFJ0YVVuaXF1ZTsKLQl1Y2hhciBJRDsKKwl1bnNpZ25lZCBsb25nIFJ0YVVuaXF1ZTsKKwl1OCBJRDsKIH07CiAKIHN0cnVjdCBLaWxsTmVpZ2hib3VyIHsKLQl1bG9uZyBVbmlxdWVOdW07Ci0JdWNoYXIgTGluazsKKwl1bnNpZ25lZCBsb25nIFVuaXF1ZU51bTsKKwl1OCBMaW5rOwogfTsKIAogc3RydWN0IHJpb1ZlcnNpb24gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9kZWZhdWx0cy5oIGIvZHJpdmVycy9jaGFyL3Jpby9kZWZhdWx0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTVjMmY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9yaW8vZGVmYXVsdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgIEQgRSBGIEEgVSBMIFQgUwotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBsaW50Ci0jaWZkZWYgU0NDUwotc3RhdGljIGNoYXIgKl9yaW9fZGVmYXVsdHNfaF9zY2NzID0gIkAoIylkZWZhdWx0cy5oCTEuMSI7Ci0jZW5kaWYKLSNlbmRpZgotCi0KLSNkZWZpbmUgTUlMTElTRUNPTkQgICAgICAgICAgIChpbnQpICgxMDAwLzY0KQkvKiAxNS42MjUgbG93IHRpY2tzICovCi0jZGVmaW5lIFNFQ09ORCAgICAgICAgICAgICAgICAoaW50KSAxNTYyNQkvKiBMb3cgcHJpb3JpdHkgdGlja3MgKi8KLQotI2RlZmluZSBMSU5LX1RJTUVPVVQgICAgICAgICAgKGludCkgKFBPTExfUEVSSU9EIC8gMikKLQotCi0vKioqKioqKioqKiogZW5kIG9mIGZpbGUgKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2Vycm9yLmggYi9kcml2ZXJzL2NoYXIvcmlvL2Vycm9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMGYwNzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9lcnJvci5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqICAgICBFIFIgUiBPIFIgIEggRSBBIEQgRSBSICAgRiBJIEwgRQotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBsaW50Ci0vKiBzdGF0aWMgY2hhciAqX3Jpb19lcnJvcl9oX3NjY3MgPSAiQCgjKWVycm9yLmgJMS4zIjsgKi8KLSNlbmRpZgotCi0jZGVmaW5lIEVfTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSAwKQotI2RlZmluZSBFX1BST0NFU1NfTk9UX0lOSVQgICAgICAgICAgICAgICAoKHVzaG9ydCkgMSkKLSNkZWZpbmUgRV9MSU5LX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDIpCi0jZGVmaW5lIEVfTk9fUk9VVEUgICAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSAzKQotI2RlZmluZSBFX0NPTkZVU0VEICAgICAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgNCkKLSNkZWZpbmUgRV9IT01FICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDUpCi0jZGVmaW5lIEVfQ1NVTV9GQUlMICAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSA2KQotI2RlZmluZSBFX0RJU0NPTk5FQ1RFRCAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgNykKLSNkZWZpbmUgRV9CQURfUlVQICAgICAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDgpCi0jZGVmaW5lIEVfTk9fVklSR0lOICAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSA5KQotI2RlZmluZSBFX0JPT1RfUlVQX0JVU1kgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgMTApCi0KLQotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiBQYXJzZWQgdG8gbWVtX2hhbHQoKQotICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIEVfQ0hBTkFMTE9DICAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSAweDgwKQotI2RlZmluZSBFX1BPTExfQUxMT0MgICAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgMHg4MSkKLSNkZWZpbmUgRV9MVFRXQUtFICAgICAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDB4ODIpCi0jZGVmaW5lIEVfTFRUX0FMTE9DICAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSAweDgzKQotI2RlZmluZSBFX0xSVF9BTExPQyAgICAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgMHg4NCkKLSNkZWZpbmUgRV9DSVJSVVMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDB4ODUpCi0jZGVmaW5lIEVfTU9OSVRPUiAgICAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSAweDg2KQotI2RlZmluZSBFX1BIQl9BTExPQyAgICAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgMHg4NykKLSNkZWZpbmUgRV9BUlJBWV9BTExPQyAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDB4ODgpCi0jZGVmaW5lIEVfUUJVRl9BTExPQyAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSAweDg5KQotI2RlZmluZSBFX1BLVF9BTExPQyAgICAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgMHg4YSkKLSNkZWZpbmUgRV9HRVRfVFhfUV9CVUYgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDB4OGIpCi0jZGVmaW5lIEVfR0VUX1JYX1FfQlVGICAgICAgICAgICAgICAgICAgICgodXNob3J0KSAweDhjKQotI2RlZmluZSBFX01FTV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgMHg4ZCkKLSNkZWZpbmUgRV9NTVVfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDB4OGUpCi0jZGVmaW5lIEVfTFRUX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICgodXNob3J0KSAweDhmKQotI2RlZmluZSBFX0xSVF9JTklUICAgICAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgMHg5MCkKLSNkZWZpbmUgRV9MSU5LX1JVTiAgICAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDB4OTEpCi0jZGVmaW5lIEVfTU9OSVRPUl9BTExPQyAgICAgICAgICAgICAgICAgICgodXNob3J0KSAweDkyKQotI2RlZmluZSBFX01PTklUT1JfSU5JVCAgICAgICAgICAgICAgICAgICAoKHVzaG9ydCkgMHg5MykKLSNkZWZpbmUgRV9QT0xMX0lOSVQgICAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDB4OTQpCi0KLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9mdW5jLmggYi9kcml2ZXJzL2NoYXIvcmlvL2Z1bmMuaAppbmRleCBiNDc3ODQxLi5lNjRmZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2Z1bmMuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2Z1bmMuaApAQCAtNDMsMzUgKzQzLDMzIEBACiAKIC8qIHJpb2Jvb3QuYyAqLwogaW50IFJJT0Jvb3RDb2RlUlRBKHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgRG93bkxvYWQgKik7Ci1pbnQgUklPQm9vdENvZGVIT1NUKHN0cnVjdCByaW9faW5mbyAqLCByZWdpc3RlciBzdHJ1Y3QgRG93bkxvYWQgKik7CitpbnQgUklPQm9vdENvZGVIT1NUKHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgRG93bkxvYWQgKik7CiBpbnQgUklPQm9vdENvZGVVTktOT1dOKHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgRG93bkxvYWQgKik7CiB2b2lkIG1zZWNfdGltZW91dChzdHJ1Y3QgSG9zdCAqKTsKLWludCBSSU9Cb290UnVwKHN0cnVjdCByaW9faW5mbyAqLCB1aW50LCBzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgUEtUICopOwotaW50IFJJT0Jvb3RPayhzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdWxvbmcpOwotaW50IFJJT1J0YUJvdW5kKHN0cnVjdCByaW9faW5mbyAqLCB1aW50KTsKLXZvaWQgRmlsbFNsb3QoaW50LCBpbnQsIHVpbnQsIHN0cnVjdCBIb3N0ICopOworaW50IFJJT0Jvb3RSdXAoc3RydWN0IHJpb19pbmZvICosIHVuc2lnbmVkIGludCwgc3RydWN0IEhvc3QgKiwgc3RydWN0IFBLVCAqKTsKK2ludCBSSU9Cb290T2soc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBIb3N0ICosIHVuc2lnbmVkIGxvbmcpOworaW50IFJJT1J0YUJvdW5kKHN0cnVjdCByaW9faW5mbyAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCByaW9fZmlsbF9ob3N0X3Nsb3QoaW50LCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IEhvc3QgKik7CiAKIC8qIHJpb2NtZC5jICovCiBpbnQgUklPRm9hZFJ0YShzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgTWFwICopOwogaW50IFJJT1pvbWJpZVJ0YShzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgTWFwICopOwotaW50IFJJT0NvbW1hbmRSdGEoc3RydWN0IHJpb19pbmZvICosIHVpbnQsIGludCAoKmZ1bmMpIChzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgTWFwICopKTsKLWludCBSSU9JZGVudGlmeVJ0YShzdHJ1Y3QgcmlvX2luZm8gKiwgY2FkZHJfdCk7Ci1pbnQgUklPS2lsbE5laWdoYm91cihzdHJ1Y3QgcmlvX2luZm8gKiwgY2FkZHJfdCk7CitpbnQgUklPQ29tbWFuZFJ0YShzdHJ1Y3QgcmlvX2luZm8gKiwgdW5zaWduZWQgbG9uZywgaW50ICgqZnVuYykgKHN0cnVjdCBIb3N0ICosIHN0cnVjdCBNYXAgKikpOworaW50IFJJT0lkZW50aWZ5UnRhKHN0cnVjdCByaW9faW5mbyAqLCB2b2lkICopOworaW50IFJJT0tpbGxOZWlnaGJvdXIoc3RydWN0IHJpb19pbmZvICosIHZvaWQgKik7CiBpbnQgUklPU3VzcGVuZEJvb3RSdGEoc3RydWN0IEhvc3QgKiwgaW50LCBpbnQpOwogaW50IFJJT0ZvYWRXYWtldXAoc3RydWN0IHJpb19pbmZvICopOwogc3RydWN0IENtZEJsayAqUklPR2V0Q21kQmxrKHZvaWQpOwogdm9pZCBSSU9GcmVlQ21kQmxrKHN0cnVjdCBDbWRCbGsgKik7Ci1pbnQgUklPUXVldWVDbWRCbGsoc3RydWN0IEhvc3QgKiwgdWludCwgc3RydWN0IENtZEJsayAqKTsKK2ludCBSSU9RdWV1ZUNtZEJsayhzdHJ1Y3QgSG9zdCAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBDbWRCbGsgKik7CiB2b2lkIFJJT1BvbGxIb3N0Q29tbWFuZHMoc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBIb3N0ICopOwotaW50IFJJT1dGbHVzaE1hcmsoaW50LCBzdHJ1Y3QgQ21kQmxrICopOwotaW50IFJJT1JGbHVzaEVuYWJsZShpbnQsIHN0cnVjdCBDbWRCbGsgKik7Ci1pbnQgUklPVW5Vc2UoaW50LCBzdHJ1Y3QgQ21kQmxrICopOwotdm9pZCBTaG93UGFja2V0KHVpbnQsIHN0cnVjdCBQS1QgKik7CitpbnQgUklPV0ZsdXNoTWFyayh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgQ21kQmxrICopOworaW50IFJJT1JGbHVzaEVuYWJsZSh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgQ21kQmxrICopOworaW50IFJJT1VuVXNlKHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBDbWRCbGsgKik7CiAKIC8qIHJpb2N0cmwuYyAqLwotaW50IGNvcHlpbihpbnQsIGNhZGRyX3QsIGludCk7CiBpbnQgcmlvY29udHJvbChzdHJ1Y3QgcmlvX2luZm8gKiwgZGV2X3QsIGludCwgY2FkZHJfdCwgaW50KTsKLWludCBSSU9QcmVlbXB0aXZlQ21kKHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgUG9ydCAqLCB1Y2hhcik7CitpbnQgUklPUHJlZW1wdGl2ZUNtZChzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IFBvcnQgKiwgdW5zaWduZWQgY2hhcik7CiAKIC8qIHJpb2luaXQuYyAqLwogdm9pZCByaW9pbml0KHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgUmlvSG9zdEluZm8gKik7CkBAIC04MCwxOSArNzgsMTcgQEAKIGludCBSSU9Eb0FUKHN0cnVjdCByaW9faW5mbyAqLCBpbnQsIGludCk7CiBjYWRkcl90IFJJT0NoZWNrRm9yQVRDYXJkKGludCk7CiBpbnQgUklPQXNzaWduQVQoc3RydWN0IHJpb19pbmZvICosIGludCwgY2FkZHJfdCwgaW50KTsKLWludCBSSU9Cb2FyZFRlc3QocGFkZHJfdCwgY2FkZHJfdCwgdWNoYXIsIGludCk7CitpbnQgUklPQm9hcmRUZXN0KHVuc2lnbmVkIGxvbmcsIGNhZGRyX3QsIHVuc2lnbmVkIGNoYXIsIGludCk7CiB2b2lkIFJJT0FsbG9jRGF0YVN0cnVjdHMoc3RydWN0IHJpb19pbmZvICopOwogdm9pZCBSSU9TZXR1cERhdGFTdHJ1Y3RzKHN0cnVjdCByaW9faW5mbyAqKTsKLWludCBSSU9EZWZhdWx0TmFtZShzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdWludCk7CitpbnQgUklPRGVmYXVsdE5hbWUoc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBIb3N0ICosIHVuc2lnbmVkIGludCk7CiBzdHJ1Y3QgcmlvVmVyc2lvbiAqUklPVmVyc2lkKHZvaWQpOwotaW50IFJJT01hcGluKHBhZGRyX3QsIGludCwgY2FkZHJfdCAqKTsKLXZvaWQgUklPTWFwb3V0KHBhZGRyX3QsIGxvbmcsIGNhZGRyX3QpOwotdm9pZCBSSU9Ib3N0UmVzZXQodWludCwgdm9sYXRpbGUgc3RydWN0IERwUmFtICosIHVpbnQpOwordm9pZCBSSU9Ib3N0UmVzZXQodW5zaWduZWQgaW50LCBzdHJ1Y3QgRHBSYW0gKiwgdW5zaWduZWQgaW50KTsKIAogLyogcmlvaW50ci5jICovCiB2b2lkIFJJT1R4RW5hYmxlKGNoYXIgKik7CiB2b2lkIFJJT1NlcnZpY2VIb3N0KHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgSG9zdCAqLCBpbnQpOwotaW50IHJpb3Rwcm9jKHN0cnVjdCByaW9faW5mbyAqLCByZWdpc3RlciBzdHJ1Y3QgdHR5c3RhdGljcyAqLCBpbnQsIGludCk7CitpbnQgcmlvdHByb2Moc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCB0dHlzdGF0aWNzICosIGludCwgaW50KTsKIAogLyogcmlvcGFyYW0uYyAqLwogaW50IFJJT1BhcmFtKHN0cnVjdCBQb3J0ICosIGludCwgaW50LCBpbnQpOwpAQCAtMTA2LDE4ICsxMDIsMTggQEAKIHZvaWQgcmVtb3ZlX3JlY2VpdmUoc3RydWN0IFBvcnQgKik7CiAKIC8qIHJpb3JvdXRlLmMgKi8KLWludCBSSU9Sb3V0ZVJ1cChzdHJ1Y3QgcmlvX2luZm8gKiwgdWludCwgc3RydWN0IEhvc3QgKiwgc3RydWN0IFBLVCAqKTsKLXZvaWQgUklPRml4UGhicyhzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdWludCk7Ci11aW50IEdldFVuaXRUeXBlKHVpbnQpOworaW50IFJJT1JvdXRlUnVwKHN0cnVjdCByaW9faW5mbyAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBIb3N0ICosIHN0cnVjdCBQS1QgKik7Cit2b2lkIFJJT0ZpeFBoYnMoc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBIb3N0ICosIHVuc2lnbmVkIGludCk7Cit1bnNpZ25lZCBpbnQgR2V0VW5pdFR5cGUodW5zaWduZWQgaW50KTsKIGludCBSSU9TZXRDaGFuZ2Uoc3RydWN0IHJpb19pbmZvICopOwotaW50IFJJT0ZpbmRGcmVlSUQoc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBIb3N0ICosIHVpbnQgKiwgdWludCAqKTsKK2ludCBSSU9GaW5kRnJlZUlEKHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgSG9zdCAqLCB1bnNpZ25lZCBpbnQgKiwgdW5zaWduZWQgaW50ICopOwogCiAKIC8qIHJpb3R0eS5jICovCiAKIGludCByaW90b3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CiBpbnQgcmlvdGNsb3NlKHZvaWQgKnB0cik7Ci1pbnQgcmlvdGlvY3RsKHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqLCByZWdpc3RlciBpbnQsIHJlZ2lzdGVyIGNhZGRyX3QpOworaW50IHJpb3Rpb2N0bChzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IHR0eV9zdHJ1Y3QgKiwgaW50LCBjYWRkcl90KTsKIHZvaWQgdHR5c2V0aChzdHJ1Y3QgUG9ydCAqLCBzdHJ1Y3QgdHR5c3RhdGljcyAqLCBzdHJ1Y3Qgb2xkX3NndHR5YiAqc2cpOwogCiAvKiByaW90YWJsZS5jICovCkBAIC0xMzEsNyArMTI3LDcgQEAKICNpZiAwCiAvKiByaW9kcnZyLmMgKi8KIHN0cnVjdCByaW9faW5mbyAqcmlvX2luc3RhbGwoc3RydWN0IFJpb0hvc3RJbmZvICopOwotaW50IHJpb191bmluc3RhbGwocmVnaXN0ZXIgc3RydWN0IHJpb19pbmZvICopOworaW50IHJpb191bmluc3RhbGwoc3RydWN0IHJpb19pbmZvICopOwogaW50IHJpb19vcGVuKHN0cnVjdCByaW9faW5mbyAqLCBpbnQsIHN0cnVjdCBmaWxlICopOwogaW50IHJpb19jbG9zZShzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IGZpbGUgKik7CiBpbnQgcmlvX3JlYWQoc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBmaWxlICosIGNoYXIgKiwgaW50KTsKQEAgLTE0Myw3ICsxMzksNyBAQAogc3RydWN0IHJpb19pbmZvICpyaW9faW5mb19zdG9yZShpbnQgY21kLCBzdHJ1Y3QgcmlvX2luZm8gKnApOwogI2VuZGlmCiAKLWV4dGVybiBpbnQgcmlvX3BjaWNvcHkoY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBuKTsKK2V4dGVybiB2b2lkIHJpb19jb3B5X3RvX2NhcmQodm9pZCAqdG8sIHZvaWQgKmZyb20sIGludCBsZW4pOwogZXh0ZXJuIGludCByaW9fbWlub3Ioc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBleHRlcm4gaW50IHJpb19pc21vZGVtKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaCBiL2RyaXZlcnMvY2hhci9yaW8vaG9zdC5oCmluZGV4IGY3ZGZjZWQuLjNlYzczZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vaG9zdC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vaG9zdC5oCkBAIC01MCwyMiArNTAsMjAgQEAKICoqICAgIHRoZSBob3N0LgogKi8KIHN0cnVjdCBIb3N0IHsKLQl1Y2hhciBUeXBlOwkJLyogUklPX0VJU0EsIFJJT19NQ0EsIC4uLiAqLwotCXVjaGFyIEl2ZWM7CQkvKiBQT0xMRUQgb3IgaXZlYyBudW1iZXIgKi8KLQl1Y2hhciBNb2RlOwkJLyogQ29udHJvbCBzdHVmZiAqLwotCXVjaGFyIFNsb3Q7CQkvKiBTbG90ICovCi0Jdm9sYXRpbGUgY2FkZHJfdCBDYWRkcjsJLyogS1YgYWRkcmVzcyBvZiBEUFJBTSAqLwotCXZvbGF0aWxlIHN0cnVjdCBEcFJhbSAqQ2FyZFA7CS8qIEtWIGFkZHJlc3Mgb2YgRFBSQU0sIHdpdGggb3ZlcmxheSAqLwotCXBhZGRyX3QgUGFkZHJQOwkJLyogUGh5cy4gYWRkcmVzcyBvZiBEUFJBTSAqLworCXVuc2lnbmVkIGNoYXIgVHlwZTsJCS8qIFJJT19FSVNBLCBSSU9fTUNBLCAuLi4gKi8KKwl1bnNpZ25lZCBjaGFyIEl2ZWM7CQkvKiBQT0xMRUQgb3IgaXZlYyBudW1iZXIgKi8KKwl1bnNpZ25lZCBjaGFyIE1vZGU7CQkvKiBDb250cm9sIHN0dWZmICovCisJdW5zaWduZWQgY2hhciBTbG90OwkJLyogU2xvdCAqLworCWNhZGRyX3QgQ2FkZHI7CQkJLyogS1YgYWRkcmVzcyBvZiBEUFJBTSAqLworCXN0cnVjdCBEcFJhbSAqQ2FyZFA7CQkvKiBLViBhZGRyZXNzIG9mIERQUkFNLCB3aXRoIG92ZXJsYXkgKi8KKwl1bnNpZ25lZCBsb25nIFBhZGRyUDsJCS8qIFBoeXMuIGFkZHJlc3Mgb2YgRFBSQU0gKi8KIAljaGFyIE5hbWVbTUFYX05BTUVfTEVOXTsJLyogVGhlIG5hbWUgb2YgdGhlIGhvc3QgKi8KLQl1aW50IFVuaXF1ZU51bTsJCS8qIGhvc3QgdW5pcXVlIG51bWJlciAqLworCXVuc2lnbmVkIGludCBVbmlxdWVOdW07CQkvKiBob3N0IHVuaXF1ZSBudW1iZXIgKi8KIAlzcGlubG9ja190IEhvc3RMb2NrOwkvKiBMb2NrIHN0cnVjdHVyZSBmb3IgTVBYICovCi0JLypzdHJ1Y3QgcGNpX2RldmluZm8gICAgUGNpRGV2SW5mbzsgKi8vKiBQQ0kgQnVzL0RldmljZS9GdW5jdGlvbiBzdHVmZiAqLwotCS8qc3RydWN0IGxvY2tiICAgICAgICAgIEhvc3RMb2NrOyAgKi8vKiBMb2NrIHN0cnVjdHVyZSBmb3IgTVBYICovCi0JdWludCBXb3JrVG9CZURvbmU7CS8qIHNldCB0byB0cnVlIGVhY2ggaW50ZXJydXB0ICovCi0JdWludCBJbkludHI7CQkvKiBCZWluZyBzZXJ2aWNlZD8gKi8KLQl1aW50IEludFNydkRvbmU7CS8qIGhvc3QncyBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VydmljZWQgKi8KLQlpbnQgKCpDb3B5KSAoY2FkZHJfdCwgY2FkZHJfdCwgaW50KTsJLyogY29weSBmdW5jICovCisJdW5zaWduZWQgaW50IFdvcmtUb0JlRG9uZTsJLyogc2V0IHRvIHRydWUgZWFjaCBpbnRlcnJ1cHQgKi8KKwl1bnNpZ25lZCBpbnQgSW5JbnRyOwkJLyogQmVpbmcgc2VydmljZWQ/ICovCisJdW5zaWduZWQgaW50IEludFNydkRvbmU7CS8qIGhvc3QncyBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VydmljZWQgKi8KKwl2b2lkICgqQ29weSkgKHZvaWQgKiwgdm9pZCAqLCBpbnQpOwkvKiBjb3B5IGZ1bmMgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAkvKgogCSAqKiAgICAgICAgICAgICAgIEkgTSBQIE8gUiBUIEEgTiBUICEKQEAgLTc0LDcgKzcyLDcgQEAKIAkgKiogYSBSSU9fSE9TVF9GT0FEIGNvbW1hbmQuCiAJICovCiAKLQl1bG9uZyBGbGFnczsJCS8qIFdoYXRzIGdvaW5nIGRvd24gKi8KKwl1bnNpZ25lZCBsb25nIEZsYWdzOwkJCS8qIFdoYXRzIGdvaW5nIGRvd24gKi8KICNkZWZpbmUgUkNfV0FJVElORyAgICAgICAgICAgIDAKICNkZWZpbmUgUkNfU1RBUlRVUCAgICAgICAgICAgIDEKICNkZWZpbmUgUkNfUlVOTklORyAgICAgICAgICAgIDIKQEAgLTg4LDI4ICs4NiwyOCBAQAogKiogQm9vdCBtb2RlIGFwcGxpZXMgdG8gdGhlIHdheSBpbiB3aGljaCBob3N0cyBpbiB0aGlzIHN5c3RlbSB3aWxsCiAqKiBib290IFJUQXMKICovCi0jZGVmaW5lIFJDX0JPT1RfQUxMICAgICAgICAgICAweDgJLyogQm9vdCBhbGwgUlRBcyBhdHRhY2hlZCAqLwotI2RlZmluZSBSQ19CT09UX09XTiAgICAgICAgICAgMHgxMAkvKiBPbmx5IGJvb3QgUlRBcyBib3VuZCB0byB0aGlzIHN5c3RlbSAqLwotI2RlZmluZSBSQ19CT09UX05PTkUgICAgICAgICAgMHgyMAkvKiBEb24ndCBib290IGFueSBSVEFzIChzbGF2ZSBtb2RlKSAqLworI2RlZmluZSBSQ19CT09UX0FMTCAgICAgICAgICAgMHg4CQkvKiBCb290IGFsbCBSVEFzIGF0dGFjaGVkICovCisjZGVmaW5lIFJDX0JPT1RfT1dOICAgICAgICAgICAweDEwCQkvKiBPbmx5IGJvb3QgUlRBcyBib3VuZCB0byB0aGlzIHN5c3RlbSAqLworI2RlZmluZSBSQ19CT09UX05PTkUgICAgICAgICAgMHgyMAkJLyogRG9uJ3QgYm9vdCBhbnkgUlRBcyAoc2xhdmUgbW9kZSkgKi8KIAogCXN0cnVjdCBUb3AgVG9wb2xvZ3lbTElOS1NfUEVSX1VOSVRdOwkvKiBvbmUgcGVyIGxpbmsgKi8KLQlzdHJ1Y3QgTWFwIE1hcHBpbmdbTUFYX1JVUF07CS8qIE1hcHBpbmdzIGZvciBob3N0ICovCi0Jc3RydWN0IFBIQiAqUGhiUDsJLyogUG9pbnRlciB0byB0aGUgUEhCIGFycmF5ICovCi0JdXNob3J0ICpQaGJOdW1QOwkvKiBQdHIgdG8gTnVtYmVyIG9mIFBIQidzICovCi0Jc3RydWN0IExQQiAqTGlua1N0clA7CS8qIExpbmsgU3RydWN0dXJlIEFycmF5ICovCi0Jc3RydWN0IFJVUCAqUnVwUDsJLyogU2l4dGVlbiByZWFsIHJ1cHMgaGVyZSAqLwotCXN0cnVjdCBQQVJNX01BUCAqUGFybU1hcFA7CS8qIHBvaW50cyB0byB0aGUgcGFybW1hcCAqLwotCXVpbnQgRXh0cmFVbml0c1tNQVhfRVhUUkFfVU5JVFNdOwkvKiB1bmtub3duIHRoaW5ncyAqLwotCXVpbnQgTnVtRXh0cmFCb290ZWQ7CS8qIGhvdyBtYW55IG9mIHRoZSBhYm92ZSAqLworCXN0cnVjdCBNYXAgTWFwcGluZ1tNQVhfUlVQXTsJCS8qIE1hcHBpbmdzIGZvciBob3N0ICovCisJc3RydWN0IFBIQiAqUGhiUDsJCQkvKiBQb2ludGVyIHRvIHRoZSBQSEIgYXJyYXkgKi8KKwl1bnNpZ25lZCBzaG9ydCAqUGhiTnVtUDsJCS8qIFB0ciB0byBOdW1iZXIgb2YgUEhCJ3MgKi8KKwlzdHJ1Y3QgTFBCICpMaW5rU3RyUDsJCQkvKiBMaW5rIFN0cnVjdHVyZSBBcnJheSAqLworCXN0cnVjdCBSVVAgKlJ1cFA7CQkJLyogU2l4dGVlbiByZWFsIHJ1cHMgaGVyZSAqLworCXN0cnVjdCBQQVJNX01BUCAqUGFybU1hcFA7CQkvKiBwb2ludHMgdG8gdGhlIHBhcm1tYXAgKi8KKwl1bnNpZ25lZCBpbnQgRXh0cmFVbml0c1tNQVhfRVhUUkFfVU5JVFNdOwkvKiB1bmtub3duIHRoaW5ncyAqLworCXVuc2lnbmVkIGludCBOdW1FeHRyYUJvb3RlZDsJCS8qIGhvdyBtYW55IG9mIHRoZSBhYm92ZSAqLwogCS8qCiAJICoqIFR3ZW50eSBsb2dpY2FsIHJ1cHMuCiAJICoqIFRoZSBmaXJzdCBzaXh0ZWVuIGFyZSB0aGUgcmVhbCBSdXAgZW50cmllcyAoYWJvdmUpLCB0aGUgbGFzdCBmb3VyCiAJICoqIGFyZSB0aGUgbGluayBSVVBzLgogCSAqLwogCXN0cnVjdCBVbml4UnVwIFVuaXhSdXBzW01BWF9SVVAgKyBMSU5LU19QRVJfVU5JVF07Ci0JaW50IHRpbWVvdXRfaWQ7CQkvKiBGb3IgY2FsbGluZyAxMDAgbXMgZGVsYXlzICovCi0JaW50IHRpbWVvdXRfc2VtOwkvKiBGb3IgY2FsbGluZyAxMDAgbXMgZGVsYXlzICovCi0JbG9uZyBsb2NrczsJCS8qIGxvbmcgcmVxJ2QgZm9yIHNldF9iaXQgLS1SUiAqLworCWludCB0aW1lb3V0X2lkOwkJCQkvKiBGb3IgY2FsbGluZyAxMDAgbXMgZGVsYXlzICovCisJaW50IHRpbWVvdXRfc2VtOwkJCS8qIEZvciBjYWxsaW5nIDEwMCBtcyBkZWxheXMgKi8KKwlsb25nIGxvY2tzOwkJCQkvKiBsb25nIHJlcSdkIGZvciBzZXRfYml0IC0tUlIgKi8KIAljaGFyIF9fX19lbmRfbWFya2VyX19fXzsKIH07CiAjZGVmaW5lIENvbnRyb2wgICAgICBDYXJkUC0+RHBDb250cm9sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL2xpbmsuaCBiL2RyaXZlcnMvY2hhci9yaW8vbGluay5oCmluZGV4IDQ4ZDY4Y2EuLmYzYmYxMWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2xpbmsuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2xpbmsuaApAQCAtMzcsMzggKzM3LDkgQEAKICNpZm5kZWYgX2xpbmtfaAogI2RlZmluZSBfbGlua19oIDEKIAotI2lmbmRlZiBsaW50Ci0jaWZkZWYgU0NDU19MQUJFTFMKLS8qIHN0YXRpYyBjaGFyICpfcmlvX2xpbmtfaF9zY2NzID0gIkAoIylsaW5rLmgJMS4xNSI7ICovCi0jZW5kaWYKLSNlbmRpZgotCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIERlZmluZSB0aGUgTGluayBTdGF0dXMgc3R1ZmYKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIExSVF9BQ1RJVkUgICAgICAgICAoKHVzaG9ydCkgMHgwMSkKLSNkZWZpbmUgTFJUX1NQQVJFMSAgICAgICAgICgodXNob3J0KSAweDAyKQotI2RlZmluZSBJTlRST19SQ1ZEICAgICAgICAgKCh1c2hvcnQpIDB4MDQpCi0jZGVmaW5lIEZPUkNFRF9ESVNDT05ORUNUICAoKHVzaG9ydCkgMHgwOCkKLSNkZWZpbmUgTFJUX1NQQVJFMgkgICAoKHVzaG9ydCkgMHg4MCkKLQotI2RlZmluZSBUT1BfT0ZfUlRBX1JBTSAgICAgKCh1c2hvcnQpIDB4NzAwMCkKLSNkZWZpbmUgSE9TVF9TRVJJQUxfUE9JTlRFUiAodW5zaWduZWQgY2hhciAqKikgKFRPUF9PRl9SVEFfUkFNIC0gMiAqIHNpemVvZiAodXNob3J0KSkKLQotLyogRmxhZ3MgZm9yIGx0dF9zdGF0dXMgKi8KLSNkZWZpbmUgIFdBSVRJTkdfQUNLCQkodXNob3J0KSAweDAwMDEKLSNkZWZpbmUgIERBVEFfU0VOVAkJKHVzaG9ydCkgMHgwMDAyCi0jZGVmaW5lICBXQUlUSU5HX1JVUAkJKHVzaG9ydCkgMHgwMDA0Ci0jZGVmaW5lICBXQUlUSU5HX1JFVFJZCQkodXNob3J0KSAweDAwMDgKLSNkZWZpbmUgIFdBSVRJTkdfVE9QT0xPR1kJKHVzaG9ydCkgMHgwMDEwCi0jZGVmaW5lICBTRU5EX1NZTkMJCSh1c2hvcnQpIDB4MDAyMAotI2RlZmluZSAgRk9BRF9USElTX0xJTksJCSh1c2hvcnQpIDB4MDA0MAotI2RlZmluZSAgUkVRVUVTVF9TWU5DCQkodXNob3J0KSAweDAwODAKLSNkZWZpbmUgIFJFTU9URV9EWUlORwkJKHVzaG9ydCkgMHgwMTAwCi0jZGVmaW5lICBESUVfTk9XCQkodXNob3J0KSAweDAyMDAKLQogLyogQm9vdCByZXF1ZXN0IHN0dWZmICovCiAjZGVmaW5lIEJPT1RfUkVRVUVTVCAgICAgICAoKHVzaG9ydCkgMCkJLyogUmVxdWVzdCBmb3IgYSBib290ICovCiAjZGVmaW5lIEJPT1RfQUJPUlQgICAgICAgICAoKHVzaG9ydCkgMSkJLyogQWJvcnQgYSBib290ICovCkBAIC03Niw3NyArNDcsNDggQEAKIAkJCQkJICAgYW5kIGxvYWQgYWRkcmVzcyAqLwogI2RlZmluZSBCT09UX0NPTVBMRVRFRCAgICAgKCh1c2hvcnQpIDMpCS8qIEJvb3QgY29tcGxldGVkICovCiAKLS8qIFN0YXRlcyB0aGF0IGEgbGluayBjYW4gYmUgaW4gKi8KLSNkZWZpbmUJTElOS19ESVNDT05ORUNURUQgICgodXNob3J0KSAwKQkvKiBEaXNjb25uZWN0ZWQgKi8KLSNkZWZpbmUgTElOS19CT09UMSAgICAgICAgICgodXNob3J0KSAxKQkvKiBUcnlpbmcgdG8gc2VuZCAxc3Qgc3RhZ2UgYm9vdCAqLwotI2RlZmluZSBMSU5LX0JPT1QyICAgICAgICAgKCh1c2hvcnQpIDIpCS8qIFRyeWluZyB0byBzZW5kIDJuZCBzdGFnZSBib290ICovCi0jZGVmaW5lIExJTktfQk9PVDJXQUlUICAgICAoKHVzaG9ydCkgMykJLyogV2FpdGluZyBmb3Igc2VsZnRlc3QgcmVzdWx0cyAqLwotI2RlZmluZSBMSU5LX0JPT1QzICAgICAgICAgKCh1c2hvcnQpIDQpCS8qIFRyeWluZyB0byBzZW5kIDNyZCBzdGFnZSBib290cyAqLwotI2RlZmluZSBMSU5LX1NZTkMgICAgICAgICAgKCh1c2hvcnQpIDUpCS8qIFN5bmNpbmcgKi8KLQotI2RlZmluZSBMSU5LX0lOVFJPICAgICAgICAgKCh1c2hvcnQpIDEwKQkvKiBJbnRyb2R1Y3RvcnkgcGFja2V0ICovCi0jZGVmaW5lIExJTktfU1VQUExZSUQgICAgICAoKHVzaG9ydCkgMTEpCS8qIFRyeWluZyB0byBzdXBwbHkgYW4gSUQgKi8KLSNkZWZpbmUgTElOS19UT1BPTE9HWSAgICAgICgodXNob3J0KSAxMikJLyogU2VuZCBhIHRvcG9sb2d5IHVwZGF0ZSAqLwotI2RlZmluZSBMSU5LX1JFUVVFU1RJRCAgICAgKCh1c2hvcnQpIDEzKQkvKiBXYWl0aW5nIGZvciBhbiBJRCAqLwotI2RlZmluZSBMSU5LX0NPTk5FQ1RFRCAgICAgKCh1c2hvcnQpIDE0KQkvKiBDb25uZWN0ZWQgKi8KLQotI2RlZmluZSBMSU5LX0lOVEVSQ09OTkVDVCAgKCh1c2hvcnQpIDIwKQkvKiBTdWJuZXRzIGludGVyY29ubmVjdGVkICovCi0KLSNkZWZpbmUgTElOS19TUEFSRQkgICAoKHVzaG9ydCkgNDApCi0KLS8qCi0qKiBTZXQgdGhlIGRlZmF1bHQgdGltZW91dCBmb3IgbGluayBjb21tdW5pY2F0aW9ucy4KLSovCi0jZGVmaW5lCUxJTktUSU1FT1VUCQkoNDAwICogTUlMTElTRUNPTkQpCi0KLS8qCi0qKiBMRUQgc3R1ZmYKLSovCi0jZGVmaW5lIExFRF9TRVRfQ09MT1VSKGNvbG91cikKLSNkZWZpbmUgTEVEX09SX0NPTE9VUihjb2xvdXIpCi0jZGVmaW5lIExFRF9USU1FT1VUKHRpbWUpCiAKIHN0cnVjdCBMUEIgewotCVdPUkQgbGlua19udW1iZXI7CS8qIExpbmsgTnVtYmVyICovCi0JQ2hhbm5lbF9wdHIgaW5fY2g7CS8qIExpbmsgSW4gQ2hhbm5lbCAqLwotCUNoYW5uZWxfcHRyIG91dF9jaDsJLyogTGluayBPdXQgQ2hhbm5lbCAqLwotCUJZVEUgYXR0YWNoZWRfc2VyaWFsWzRdOwkvKiBBdHRhY2hlZCBzZXJpYWwgbnVtYmVyICovCi0JQllURSBhdHRhY2hlZF9ob3N0X3NlcmlhbFs0XTsKKwl1MTYgbGlua19udW1iZXI7CS8qIExpbmsgTnVtYmVyICovCisJdTE2IGluX2NoOwkvKiBMaW5rIEluIENoYW5uZWwgKi8KKwl1MTYgb3V0X2NoOwkvKiBMaW5rIE91dCBDaGFubmVsICovCisJdTggYXR0YWNoZWRfc2VyaWFsWzRdOyAgLyogQXR0YWNoZWQgc2VyaWFsIG51bWJlciAqLworCXU4IGF0dGFjaGVkX2hvc3Rfc2VyaWFsWzRdOwogCS8qIFNlcmlhbCBudW1iZXIgb2YgSG9zdCB3aG8KIAkgICBib290ZWQgdGhlIG90aGVyIGVuZCAqLwotCVdPUkQgZGVzY2hlZHVsZWQ7CS8qIEN1cnJlbnRseSBEZXNjaGVkdWxlZCAqLwotCVdPUkQgc3RhdGU7CQkvKiBDdXJyZW50IHN0YXRlICovCi0JV09SRCBzZW5kX3BvbGw7CQkvKiBTZW5kIGEgUG9sbCBQYWNrZXQgKi8KLQlQcm9jZXNzX3B0ciBsdHRfcDsJLyogUHJvY2VzcyBEZXNjcmlwdG9yICovCi0JUHJvY2Vzc19wdHIgbHJ0X3A7CS8qIFByb2Nlc3MgRGVzY3JpcHRvciAqLwotCVdPUkQgbHJ0X3N0YXR1czsJLyogQ3VycmVudCBscnQgc3RhdHVzICovCi0JV09SRCBsdHRfc3RhdHVzOwkvKiBDdXJyZW50IGx0dCBzdGF0dXMgKi8KLQlXT1JEIHRpbWVvdXQ7CQkvKiBUaW1lb3V0IHZhbHVlICovCi0JV09SRCB0b3BvbG9neTsJCS8qIFRvcG9sb2d5IGJpdHMgKi8KLQlXT1JEIG1vbl9sdHQ7Ci0JV09SRCBtb25fbHJ0OwotCVdPUkQgV2FpdE5vQm9vdDsJLyogU2VjcyB0byBob2xkIG9mZiBib290aW5nICovCi0JUEtUX3B0ciBhZGRfcGFja2V0X2xpc3Q7CS8qIEFkZCBwYWNrZXRzIHRvIGhlcmUgKi8KLQlQS1RfcHRyIHJlbW92ZV9wYWNrZXRfbGlzdDsJLyogU2VuZCBwYWNrZXRzIGZyb20gaGVyZSAqLworCXUxNiBkZXNjaGVkdWxlZDsJLyogQ3VycmVudGx5IERlc2NoZWR1bGVkICovCisJdTE2IHN0YXRlOwkJLyogQ3VycmVudCBzdGF0ZSAqLworCXUxNiBzZW5kX3BvbGw7CQkvKiBTZW5kIGEgUG9sbCBQYWNrZXQgKi8KKwl1MTYgbHR0X3A7CS8qIFByb2Nlc3MgRGVzY3JpcHRvciAqLworCXUxNiBscnRfcDsJLyogUHJvY2VzcyBEZXNjcmlwdG9yICovCisJdTE2IGxydF9zdGF0dXM7CQkvKiBDdXJyZW50IGxydCBzdGF0dXMgKi8KKwl1MTYgbHR0X3N0YXR1czsJCS8qIEN1cnJlbnQgbHR0IHN0YXR1cyAqLworCXUxNiB0aW1lb3V0OwkJLyogVGltZW91dCB2YWx1ZSAqLworCXUxNiB0b3BvbG9neTsJCS8qIFRvcG9sb2d5IGJpdHMgKi8KKwl1MTYgbW9uX2x0dDsKKwl1MTYgbW9uX2xydDsKKwl1MTYgV2FpdE5vQm9vdDsJLyogU2VjcyB0byBob2xkIG9mZiBib290aW5nICovCisJdTE2IGFkZF9wYWNrZXRfbGlzdDsJLyogQWRkIHBhY2tldHMgdG8gaGVyZSAqLworCXUxNiByZW1vdmVfcGFja2V0X2xpc3Q7CS8qIFNlbmQgcGFja2V0cyBmcm9tIGhlcmUgKi8KIAotCUNoYW5uZWxfcHRyIGxydF9mYWlsX2NoYW47CS8qIExydCdzIGZhaWx1cmUgY2hhbm5lbCAqLwotCUNoYW5uZWxfcHRyIGx0dF9mYWlsX2NoYW47CS8qIEx0dCdzIGZhaWx1cmUgY2hhbm5lbCAqLworCXUxNiBscnRfZmFpbF9jaGFuOwkvKiBMcnQncyBmYWlsdXJlIGNoYW5uZWwgKi8KKwl1MTYgbHR0X2ZhaWxfY2hhbjsJLyogTHR0J3MgZmFpbHVyZSBjaGFubmVsICovCiAKIAkvKiBSVVAgc3RydWN0dXJlIGZvciBIT1NUIHRvIGRyaXZlciBjb21tdW5pY2F0aW9ucyAqLwogCXN0cnVjdCBSVVAgcnVwOwogCXN0cnVjdCBSVVAgbGlua19ydXA7CS8qIFJVUCBmb3IgdGhlIGxpbmsgKFBPTEwsCiAJCQkJICAgdG9wb2xvZ3kgZXRjLikgKi8KLQlXT1JEIGF0dGFjaGVkX2xpbms7CS8qIE51bWJlciBvZiBhdHRhY2hlZCBsaW5rICovCi0JV09SRCBjc3VtX2Vycm9yczsJLyogY3N1bSBlcnJvcnMgKi8KLQlXT1JEIG51bV9kaXNjb25uZWN0czsJLyogbnVtYmVyIG9mIGRpc2Nvbm5lY3RzICovCi0JV09SRCBudW1fc3luY19yY3ZkOwkvKiAjIHN5bmMncyByZWNlaXZlZCAqLwotCVdPUkQgbnVtX3N5bmNfcnFzdDsJLyogIyBzeW5jIHJlcXVlc3RzICovCi0JV09SRCBudW1fdHg7CQkvKiBOdW0gcGt0cyBzZW50ICovCi0JV09SRCBudW1fcng7CQkvKiBOdW0gcGt0cyByZWNlaXZlZCAqLwotCVdPUkQgbW9kdWxlX2F0dGFjaGVkOwkvKiBNb2R1bGUgdHB5ZXMgb2YgYXR0YWNoZWQgKi8KLQlXT1JEIGxlZF90aW1lb3V0OwkvKiBMRUQgdGltZW91dCAqLwotCVdPUkQgZmlyc3RfcG9ydDsJLyogRmlyc3QgcG9ydCB0byBzZXJ2aWNlICovCi0JV09SRCBsYXN0X3BvcnQ7CQkvKiBMYXN0IHBvcnQgdG8gc2VydmljZSAqLworCXUxNiBhdHRhY2hlZF9saW5rOwkvKiBOdW1iZXIgb2YgYXR0YWNoZWQgbGluayAqLworCXUxNiBjc3VtX2Vycm9yczsJLyogY3N1bSBlcnJvcnMgKi8KKwl1MTYgbnVtX2Rpc2Nvbm5lY3RzOwkvKiBudW1iZXIgb2YgZGlzY29ubmVjdHMgKi8KKwl1MTYgbnVtX3N5bmNfcmN2ZDsJLyogIyBzeW5jJ3MgcmVjZWl2ZWQgKi8KKwl1MTYgbnVtX3N5bmNfcnFzdDsJLyogIyBzeW5jIHJlcXVlc3RzICovCisJdTE2IG51bV90eDsJCS8qIE51bSBwa3RzIHNlbnQgKi8KKwl1MTYgbnVtX3J4OwkJLyogTnVtIHBrdHMgcmVjZWl2ZWQgKi8KKwl1MTYgbW9kdWxlX2F0dGFjaGVkOwkvKiBNb2R1bGUgdHB5ZXMgb2YgYXR0YWNoZWQgKi8KKwl1MTYgbGVkX3RpbWVvdXQ7CS8qIExFRCB0aW1lb3V0ICovCisJdTE2IGZpcnN0X3BvcnQ7CQkvKiBGaXJzdCBwb3J0IHRvIHNlcnZpY2UgKi8KKwl1MTYgbGFzdF9wb3J0OwkJLyogTGFzdCBwb3J0IHRvIHNlcnZpY2UgKi8KIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9saW51eF9jb21wYXQuaCBiL2RyaXZlcnMvY2hhci9yaW8vbGludXhfY29tcGF0LmgKaW5kZXggMTdhMTRjNC4uMzRjMGQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9saW51eF9jb21wYXQuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2xpbnV4X2NvbXBhdC5oCkBAIC0xOSw1NiArMTksMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogCi0jZGVmaW5lIGRpc2FibGUob2xkc3BsKSBzYXZlX2ZsYWdzIChvbGRzcGwpCi0jZGVmaW5lIHJlc3RvcmUob2xkc3BsKSByZXN0b3JlX2ZsYWdzIChvbGRzcGwpCi0KLSNkZWZpbmUgc3lzYnJrKHgpIGttYWxsb2MgKCh4KSxpbl9pbnRlcnJ1cHQoKT8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpCi0jZGVmaW5lIHN5c2ZyZWUocCxzaXplKSBrZnJlZSAoKHApKQotCi0jZGVmaW5lIFdCWVRFKHAsdikgd3JpdGViKHYsICZwKQotI2RlZmluZSBSQllURShwKSAgIHJlYWRiICgmcCkKLSNkZWZpbmUgV1dPUkQocCx2KSB3cml0ZXcodiwgJnApCi0jZGVmaW5lIFJXT1JEKHApICAgcmVhZHcoJnApCi0jZGVmaW5lIFdJTkRXKHAsdikgd3JpdGV3KHYsIHApCi0jZGVmaW5lIFJJTkRXKHApICAgcmVhZHcocCkKLQogI2RlZmluZSBERUJVR19BTEwKIAotI2RlZmluZSBjcHJpbnRmIHByaW50awotCi0jaWZkZWYgX19LRVJORUxfXwotI2RlZmluZSBJTktFUk5FTAotI2VuZGlmCi0KIHN0cnVjdCB0dHlzdGF0aWNzIHsKIAlzdHJ1Y3QgdGVybWlvcyB0bTsKIH07CiAKLSNkZWZpbmUgYnplcm8oZCwgbikgICAgICAgICBtZW1zZXQoKGQpLCAwLCAobikpCi0jZGVmaW5lIGJjb3B5KHNyYywgZGVzdCwgbikgbWVtY3B5ICgoZGVzdCksIChzcmMpLCAobikpCi0KLSNkZWZpbmUgU0VNX1NJR0lHTk9SRSAweDEyMzQKLQotI2lmZGVmIERFQlVHX1NFTQotI2RlZmluZSBzd2FpdChhLGIpICAgICAgcHJpbnRrICgid2FpdGluZzogICAgIiBfX0ZJTEVfXyAiIGxpbmUgJWRcbiIsIF9fTElORV9fKQotI2RlZmluZSBzc2lnbmFsKHNlbSkgICAgcHJpbnRrICgic2lnbmFsbGluZzogIiBfX0ZJTEVfXyAiIGxpbmUgJWRcbiIsIF9fTElORV9fKQotCi0jZGVmaW5lIHNyZXNldChzZW0pICAgICBwcmludGsgKCJzcmVzZXQ6ICAgICAiIF9fRklMRV9fICJcbiIpCi0jZGVmaW5lIHNlbV9pbml0KHNlbSx2KSBwcmludGsgKCJzcmVzZXQ6ICAgICAiIF9fRklMRV9fICJcbiIpCi0jZW5kaWYKLQotCi0jZGVmaW5lIGdldHBpZCgpICAgIChjdXJyZW50LT5waWQpCi0KLSNkZWZpbmUgUVNJWkUgU0VSSUFMX1hNSVRfU0laRQotCi0jZGVmaW5lIHBzZXRlcnIoZXJybm8pIHJldHVybiAoLSBlcnJubykKLQotI2RlZmluZSBWX0NCQVVEIENCQVVECi0KLS8qIEZvciBvbmUgcmVhc29uIG9yIGFub3RoZXIgcmlvYm9vdC5jIHVzZXMgZGVsYXkgaW5zdGVhZCBvZiBSSU9EZWxheS4gKi8KLSNkZWZpbmUgZGVsYXkoeCx5KSBSSU9EZWxheShOVUxMLCB5KQotCiBleHRlcm4gaW50IHJpb19kZWJ1ZzsKIAogI2RlZmluZSBSSU9fREVCVUdfSU5JVCAgICAgICAgIDB4MDAwMDAxCkBAIC05MSw2ICs0Nyw3IEBACiAjZGVmaW5lIFJJT19ERUJVR19ERUxBWSAgICAgICAgMHgwMjAwMDAKICNkZWZpbmUgUklPX0RFQlVHX01PRF9DT1VOVCAgICAweDA0MDAwMAogCisKIC8qIENvcGllZCBvdmVyIGZyb20gcmlvd2luaWYuaCAuIFRoaXMgaXMgdWdseS4gVGhlIHdpbmlmIGZpbGUgZGVjbGFyZXMKIGFsc28gbXVjaCBvdGhlciBzdHVmZiB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgaGVhZGVycyBmcm9tCiB0aGUgb2xkZXIgZHJpdmVyLiBUaGUgb2xkZXIgZHJpdmVyIGluY2x1ZGVzICJicmF0ZXMuaCIgd2hpY2ggc2hhZG93cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9saXN0LmggYi9kcml2ZXJzL2NoYXIvcmlvL2xpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzliODUzMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2xpc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgTCBJIFMgVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gQXV0aG9yICA6IEplcmVteSBSb2xscy4KLSBEYXRlICAgIDogMDQtTm92LTE5OTAKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX2xpc3RfaAotI2RlZmluZSBfbGlzdF9oIDEKLQotI2lmZGVmIFNDQ1NfTEFCRUxTCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyICpfcmlvX2xpc3RfaF9zY2NzID0gIkAoIylsaXN0LmgJMS45IjsKLSNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgUEtUX0lOX1VTRSAgICAweDEKLQotI2RlZmluZSBaRVJPX1BUUiAodXNob3J0KSAweDgwMDAKLSNkZWZpbmUJQ2FECVBvcnRQLT5DYWRkcgotCi0vKgotKiogV2UgY2FuIGFkZCBhbm90aGVyIHBhY2tldCB0byBhIHRyYW5zbWl0IHF1ZXVlIGlmIHRoZSBwYWNrZXQgcG9pbnRlciBwb2ludGVkCi0qKiB0byBieSB0aGUgVHhBZGQgcG9pbnRlciBoYXMgUEtUX0lOX1VTRSBjbGVhciBpbiBpdHMgYWRkcmVzcy4KLSovCi0KLSNlbmRpZgkJCQkvKiBpZm5kZWYgX2xpc3QuaCAqLwotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9tYXAuaCBiL2RyaXZlcnMvY2hhci9yaW8vbWFwLmgKaW5kZXggOTdmZTI4Ny4uYmRiY2QwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9tYXAuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL21hcC5oCkBAIC00NywxNyArNDcsMTcgQEAKICNkZWZpbmUJTUFYX05BTUVfTEVOIDMyCiAKIHN0cnVjdCBNYXAgewotCXVpbnQgSG9zdFVuaXF1ZU51bTsJLyogU3VwcG9ydGluZyBob3N0cyB1bmlxdWUgbnVtYmVyICovCi0JdWludCBSdGFVbmlxdWVOdW07CS8qIFVuaXF1ZSBudW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgSG9zdFVuaXF1ZU51bTsJLyogU3VwcG9ydGluZyBob3N0cyB1bmlxdWUgbnVtYmVyICovCisJdW5zaWduZWQgaW50IFJ0YVVuaXF1ZU51bTsJLyogVW5pcXVlIG51bWJlciAqLwogCS8qCiAJICoqIFRoZSBuZXh0IHR3byBJRHMgbXVzdCBiZSBzd2FwcGVkIG9uIGJpZy1lbmRpYW4gYXJjaGl0ZWN0dXJlcwogCSAqKiB3aGVuIHVzaW5nIGEgdjIuMDQgL2V0Yy9yaW8vY29uZmlnIHdpdGggYSB2My4wMCBkcml2ZXIgKHdoZW4KIAkgKiogdXBncmFkaW5nIGZvciBleGFtcGxlKS4KIAkgKi8KLQl1c2hvcnQgSUQ7CQkvKiBJRCB1c2VkIGluIHRoZSBzdWJuZXQgKi8KLQl1c2hvcnQgSUQyOwkJLyogSUQgb2YgMm5kIGJsb2NrIG9mIDggZm9yIDE2IHBvcnQgKi8KLQl1bG9uZyBGbGFnczsJCS8qIEJvb3RlZCwgSUQgR2l2ZW4sIERpc2Nvbm5lY3RlZCAqLwotCXVsb25nIFN5c1BvcnQ7CQkvKiBGaXJzdCB0dHkgbWFwcGVkIHRvIHRoaXMgcG9ydCAqLworCXVuc2lnbmVkIHNob3J0IElEOwkJLyogSUQgdXNlZCBpbiB0aGUgc3VibmV0ICovCisJdW5zaWduZWQgc2hvcnQgSUQyOwkJLyogSUQgb2YgMm5kIGJsb2NrIG9mIDggZm9yIDE2IHBvcnQgKi8KKwl1bnNpZ25lZCBsb25nIEZsYWdzOwkJLyogQm9vdGVkLCBJRCBHaXZlbiwgRGlzY29ubmVjdGVkICovCisJdW5zaWduZWQgbG9uZyBTeXNQb3J0OwkJLyogRmlyc3QgdHR5IG1hcHBlZCB0byB0aGlzIHBvcnQgKi8KIAlzdHJ1Y3QgVG9wIFRvcG9sb2d5W0xJTktTX1BFUl9VTklUXTsJLyogSUQgY29ubmVjdGVkIHRvIGVhY2ggbGluayAqLwogCWNoYXIgTmFtZVtNQVhfTkFNRV9MRU5dOwkvKiBDdXRlIG5hbWUgYnkgd2hpY2ggUlRBIGlzIGtub3duICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9wYXJhbS5oIGIvZHJpdmVycy9jaGFyL3Jpby9wYXJhbS5oCmluZGV4IGRlN2U1NzEuLjY3NWMyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcGFyYW0uaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3BhcmFtLmgKQEAgLTQzLDE4ICs0MywxOCBAQAogKi8KIAogc3RydWN0IHBoYl9wYXJhbSB7Ci0JQllURSBDbWQ7CQkvKiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0aGF0IHRoZXNlIGxpbmUgdXAgKi8KLQlCWVRFIENvcjE7CQkvKiB3aXRoIHdoYXQgaXMgZXhwZWN0ZWQgYXQgdGhlIG90aGVyIGVuZC4gKi8KLQlCWVRFIENvcjI7CQkvKiB0byBjb25maXJtIHRoYXQgeW91J3ZlIGdvdCBpdCByaWdodCwgICAgKi8KLQlCWVRFIENvcjQ7CQkvKiBjaGVjayB3aXRoIGNpcnJ1cy9jaXJydXMuaCAgICAgICAgICAgICAgKi8KLQlCWVRFIENvcjU7Ci0JQllURSBUeFhvbjsJCS8qIFRyYW5zbWl0IFgtT24gY2hhcmFjdGVyICovCi0JQllURSBUeFhvZmY7CQkvKiBUcmFuc21pdCBYLU9mZiBjaGFyYWN0ZXIgKi8KLQlCWVRFIFJ4WG9uOwkJLyogUmVjZWl2ZSBYLU9uIGNoYXJhY3RlciAqLwotCUJZVEUgUnhYb2ZmOwkJLyogUmVjZWl2ZSBYLU9mZiBjaGFyYWN0ZXIgKi8KLQlCWVRFIExOZXh0OwkJLyogTGl0ZXJhbC1uZXh0IGNoYXJhY3RlciAqLwotCUJZVEUgVHhCYXVkOwkJLyogVHJhbnNtaXQgYmF1ZHJhdGUgKi8KLQlCWVRFIFJ4QmF1ZDsJCS8qIFJlY2VpdmUgYmF1ZHJhdGUgKi8KKwl1OCBDbWQ7CQkJLyogSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGVzZSBsaW5lIHVwICovCisJdTggQ29yMTsJCS8qIHdpdGggd2hhdCBpcyBleHBlY3RlZCBhdCB0aGUgb3RoZXIgZW5kLiAqLworCXU4IENvcjI7CQkvKiB0byBjb25maXJtIHRoYXQgeW91J3ZlIGdvdCBpdCByaWdodCwgICAgKi8KKwl1OCBDb3I0OwkJLyogY2hlY2sgd2l0aCBjaXJydXMvY2lycnVzLmggICAgICAgICAgICAgICovCisJdTggQ29yNTsKKwl1OCBUeFhvbjsJCS8qIFRyYW5zbWl0IFgtT24gY2hhcmFjdGVyICovCisJdTggVHhYb2ZmOwkJLyogVHJhbnNtaXQgWC1PZmYgY2hhcmFjdGVyICovCisJdTggUnhYb247CQkvKiBSZWNlaXZlIFgtT24gY2hhcmFjdGVyICovCisJdTggUnhYb2ZmOwkJLyogUmVjZWl2ZSBYLU9mZiBjaGFyYWN0ZXIgKi8KKwl1OCBMTmV4dDsJCS8qIExpdGVyYWwtbmV4dCBjaGFyYWN0ZXIgKi8KKwl1OCBUeEJhdWQ7CQkvKiBUcmFuc21pdCBiYXVkcmF0ZSAqLworCXU4IFJ4QmF1ZDsJCS8qIFJlY2VpdmUgYmF1ZHJhdGUgKi8KIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9wYXJtbWFwLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Bhcm1tYXAuaAppbmRleCBlMjRhY2MxLi45NzY0ZWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Bhcm1tYXAuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Bhcm1tYXAuaApAQCAtNDcsNDAgKzQ3LDQwIEBACiB0eXBlZGVmIHN0cnVjdCBQQVJNX01BUCBQQVJNX01BUDsKIAogc3RydWN0IFBBUk1fTUFQIHsKLQlQSEJfcHRyIHBoYl9wdHI7CS8qIFBvaW50ZXIgdG8gdGhlIFBIQiBhcnJheSAqLwotCVdPUkRfcHRyIHBoYl9udW1fcHRyOwkvKiBQdHIgdG8gTnVtYmVyIG9mIFBIQidzICovCi0JRlJFRV9MSVNUX3B0ciBmcmVlX2xpc3Q7CS8qIEZyZWUgTGlzdCBwb2ludGVyICovCi0JRlJFRV9MSVNUX3B0ciBmcmVlX2xpc3RfZW5kOwkvKiBGcmVlIExpc3QgRW5kIHBvaW50ZXIgKi8KLQlRX0JVRl9wdHJfcHRyIHFfZnJlZV9saXN0X3B0cjsJLyogUHRyIHRvIFFfQlVGIHZhcmlhYmxlICovCi0JQllURV9wdHIgdW5pdF9pZF9wdHI7CS8qIFVuaXQgSWQgKi8KLQlMUEJfcHRyIGxpbmtfc3RyX3B0cjsJLyogTGluayBTdHJ1Y3R1cmUgQXJyYXkgKi8KLQlCWVRFX3B0ciBib290bG9hZGVyXzE7CS8qIDFzdCBTdGFnZSBCb290IExvYWRlciAqLwotCUJZVEVfcHRyIGJvb3Rsb2FkZXJfMjsJLyogMm5kIFN0YWdlIEJvb3QgTG9hZGVyICovCi0JV09SRF9wdHIgcG9ydF9yb3V0ZV9tYXBfcHRyOwkvKiBQb3J0IFJvdXRlIE1hcCAqLwotCVJPVVRFX1NUUl9wdHIgcm91dGVfcHRyOwkvKiBVbml0IFJvdXRlIE1hcCAqLwotCU5VTUJFUl9wdHIgbWFwX3ByZXNlbnQ7CS8qIFJvdXRlIE1hcCBwcmVzZW50ICovCi0JTlVNQkVSIHBrdF9udW07CQkvKiBUb3RhbCBudW1iZXIgb2YgcGFja2V0cyAqLwotCU5VTUJFUiBxX251bTsJCS8qIFRvdGFsIG51bWJlciBvZiBRIHBhY2tldHMgKi8KLQlXT1JEIGJ1ZmZlcnNfcGVyX3BvcnQ7CS8qIE51bWJlciBvZiBidWZmZXJzIHBlciBwb3J0ICovCi0JV09SRCBoZWFwX3NpemU7CQkvKiBJbml0aWFsIHNpemUgb2YgaGVhcCAqLwotCVdPUkQgaGVhcF9sZWZ0OwkJLyogQ3VycmVudCBIZWFwIGxlZnQgKi8KLQlXT1JEIGVycm9yOwkJLyogRXJyb3IgY29kZSAqLwotCVdPUkQgdHhfbWF4OwkJLyogTWF4IG51bWJlciBvZiB0eCBwa3RzIHBlciBwaGIgKi8KLQlXT1JEIHJ4X21heDsJCS8qIE1heCBudW1iZXIgb2YgcnggcGt0cyBwZXIgcGhiICovCi0JV09SRCByeF9saW1pdDsJCS8qIEZvciBoaWdoIC8gbG93IHdhdGVybWFya3MgKi8KLQlOVU1CRVIgbGlua3M7CQkvKiBMaW5rcyB0byB1c2UgKi8KLQlOVU1CRVIgdGltZXI7CQkvKiBJbnRlcnJ1cHRzIHBlciBzZWNvbmQgKi8KLQlSVVBfcHRyIHJ1cHM7CQkvKiBQb2ludGVyIHRvIHRoZSBSVVBzICovCi0JV09SRCBtYXhfcGhiOwkJLyogTW9zdGx5IGZvciBkZWJ1Z2dpbmcgKi8KLQlXT1JEIGxpdmluZzsJCS8qIEp1c3QgaW5jcmVtZW50cyEhICovCi0JV09SRCBpbml0X2RvbmU7CQkvKiBJbml0aWFsaXNhdGlvbiBvdmVyICovCi0JV09SRCBib290aW5nX2xpbms7Ci0JV09SRCBpZGxlX2NvdW50OwkvKiBJZGxlIHRpbWUgY291bnRlciAqLwotCVdPUkQgYnVzeV9jb3VudDsJLyogQnVzeSBjb3VudGVyICovCi0JV09SRCBpZGxlX2NvbnRyb2w7CS8qIENvbnRyb2wgSWRsZSBQcm9jZXNzICovCi0JV09SRCB0eF9pbnRyOwkJLyogVFggaW50ZXJydXB0IHBlbmRpbmcgKi8KLQlXT1JEIHJ4X2ludHI7CQkvKiBSWCBpbnRlcnJ1cHQgcGVuZGluZyAqLwotCVdPUkQgcnVwX2ludHI7CQkvKiBSVVAgaW50ZXJydXB0IHBlbmRpbmcgKi8KKwl1MTYgcGhiX3B0cjsJLyogUG9pbnRlciB0byB0aGUgUEhCIGFycmF5ICovCisJdTE2IHBoYl9udW1fcHRyOwkvKiBQdHIgdG8gTnVtYmVyIG9mIFBIQidzICovCisJdTE2IGZyZWVfbGlzdDsJLyogRnJlZSBMaXN0IHBvaW50ZXIgKi8KKwl1MTYgZnJlZV9saXN0X2VuZDsJLyogRnJlZSBMaXN0IEVuZCBwb2ludGVyICovCisJdTE2IHFfZnJlZV9saXN0X3B0cjsJLyogUHRyIHRvIFFfQlVGIHZhcmlhYmxlICovCisJdTE2IHVuaXRfaWRfcHRyOwkvKiBVbml0IElkICovCisJdTE2IGxpbmtfc3RyX3B0cjsJLyogTGluayBTdHJ1Y3R1cmUgQXJyYXkgKi8KKwl1MTYgYm9vdGxvYWRlcl8xOwkvKiAxc3QgU3RhZ2UgQm9vdCBMb2FkZXIgKi8KKwl1MTYgYm9vdGxvYWRlcl8yOwkvKiAybmQgU3RhZ2UgQm9vdCBMb2FkZXIgKi8KKwl1MTYgcG9ydF9yb3V0ZV9tYXBfcHRyOwkvKiBQb3J0IFJvdXRlIE1hcCAqLworCXUxNiByb3V0ZV9wdHI7CQkvKiBVbml0IFJvdXRlIE1hcCAqLworCXUxNiBtYXBfcHJlc2VudDsJLyogUm91dGUgTWFwIHByZXNlbnQgKi8KKwlzMTYgcGt0X251bTsJCS8qIFRvdGFsIG51bWJlciBvZiBwYWNrZXRzICovCisJczE2IHFfbnVtOwkJLyogVG90YWwgbnVtYmVyIG9mIFEgcGFja2V0cyAqLworCXUxNiBidWZmZXJzX3Blcl9wb3J0OwkvKiBOdW1iZXIgb2YgYnVmZmVycyBwZXIgcG9ydCAqLworCXUxNiBoZWFwX3NpemU7CQkvKiBJbml0aWFsIHNpemUgb2YgaGVhcCAqLworCXUxNiBoZWFwX2xlZnQ7CQkvKiBDdXJyZW50IEhlYXAgbGVmdCAqLworCXUxNiBlcnJvcjsJCS8qIEVycm9yIGNvZGUgKi8KKwl1MTYgdHhfbWF4OwkJLyogTWF4IG51bWJlciBvZiB0eCBwa3RzIHBlciBwaGIgKi8KKwl1MTYgcnhfbWF4OwkJLyogTWF4IG51bWJlciBvZiByeCBwa3RzIHBlciBwaGIgKi8KKwl1MTYgcnhfbGltaXQ7CQkvKiBGb3IgaGlnaCAvIGxvdyB3YXRlcm1hcmtzICovCisJczE2IGxpbmtzOwkJLyogTGlua3MgdG8gdXNlICovCisJczE2IHRpbWVyOwkJLyogSW50ZXJydXB0cyBwZXIgc2Vjb25kICovCisJdTE2IHJ1cHM7CQkvKiBQb2ludGVyIHRvIHRoZSBSVVBzICovCisJdTE2IG1heF9waGI7CQkvKiBNb3N0bHkgZm9yIGRlYnVnZ2luZyAqLworCXUxNiBsaXZpbmc7CQkvKiBKdXN0IGluY3JlbWVudHMhISAqLworCXUxNiBpbml0X2RvbmU7CQkvKiBJbml0aWFsaXNhdGlvbiBvdmVyICovCisJdTE2IGJvb3RpbmdfbGluazsKKwl1MTYgaWRsZV9jb3VudDsJCS8qIElkbGUgdGltZSBjb3VudGVyICovCisJdTE2IGJ1c3lfY291bnQ7CQkvKiBCdXN5IGNvdW50ZXIgKi8KKwl1MTYgaWRsZV9jb250cm9sOwkvKiBDb250cm9sIElkbGUgUHJvY2VzcyAqLworCXUxNiB0eF9pbnRyOwkJLyogVFggaW50ZXJydXB0IHBlbmRpbmcgKi8KKwl1MTYgcnhfaW50cjsJCS8qIFJYIGludGVycnVwdCBwZW5kaW5nICovCisJdTE2IHJ1cF9pbnRyOwkJLyogUlVQIGludGVycnVwdCBwZW5kaW5nICovCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcGhiLmggYi9kcml2ZXJzL2NoYXIvcmlvL3BoYi5oCmluZGV4IDI2NjNjYTAuLmE0YzQ4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcGhiLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9waGIuaApAQCAtMzcsMTMgKzM3LDYgQEAKICNpZm5kZWYgX3BoYl9oCiAjZGVmaW5lIF9waGJfaCAxCiAKLSNpZmRlZiBTQ0NTX0xBQkVMUwotI2lmbmRlZiBsaW50Ci0vKiBzdGF0aWMgY2hhciAqX3Jpb19waGJfaF9zY2NzID0gIkAoIylwaGIuaAkxLjEyIjsgKi8KLSNlbmRpZgotI2VuZGlmCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEhhbmRzaGFrZSBhc3NlcnRlZC4gRGVhc3NlcnRlZCBieSB0aGUgTFRUKHMpCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTI0LDIzICsxMTcsMjMgQEAKICAqIHRoZSBzdGFydC4gVGhlIHBvaW50ZXIgdHhfYWRkIHBvaW50cyB0byBhIFNQQUNFIHRvIHB1dCBhIFBhY2tldC4KICAqIFRoZSBwb2ludGVyIHR4X3JlbW92ZSBwb2ludHMgdG8gdGhlIG5leHQgUGFja2V0IHRvIHJlbW92ZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBQSEIgUEhCOwotc3RydWN0IFBIQiB7Ci0JV09SRCBzb3VyY2U7Ci0JV09SRCBoYW5kc2hha2U7Ci0JV09SRCBzdGF0dXM7Ci0JTlVNQkVSIHRpbWVvdXQ7CQkvKiBNYXhpbXVtIG9mIDEuOSBzZWNvbmRzICovCi0JV09SRCBsaW5rOwkJLyogU2VuZCBkb3duIHRoaXMgbGluayAqLwotCVdPUkQgZGVzdGluYXRpb247Ci0JUEtUX3B0cl9wdHIgdHhfc3RhcnQ7Ci0JUEtUX3B0cl9wdHIgdHhfZW5kOwotCVBLVF9wdHJfcHRyIHR4X2FkZDsKLQlQS1RfcHRyX3B0ciB0eF9yZW1vdmU7CiAKLQlQS1RfcHRyX3B0ciByeF9zdGFydDsKLQlQS1RfcHRyX3B0ciByeF9lbmQ7Ci0JUEtUX3B0cl9wdHIgcnhfYWRkOwotCVBLVF9wdHJfcHRyIHJ4X3JlbW92ZTsKK3N0cnVjdCBQSEIgeworCXU4IHNvdXJjZTsKKwl1OCBoYW5kc2hha2U7CisJdTggc3RhdHVzOworCXUxNiB0aW1lb3V0OwkJLyogTWF4aW11bSBvZiAxLjkgc2Vjb25kcyAqLworCXU4IGxpbms7CQkvKiBTZW5kIGRvd24gdGhpcyBsaW5rICovCisJdTggZGVzdGluYXRpb247CisJdTE2IHR4X3N0YXJ0OworCXUxNiB0eF9lbmQ7CisJdTE2IHR4X2FkZDsKKwl1MTYgdHhfcmVtb3ZlOworCisJdTE2IHJ4X3N0YXJ0OworCXUxNiByeF9lbmQ7CisJdTE2IHJ4X2FkZDsKKwl1MTYgcnhfcmVtb3ZlOwogCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3BrdC5oIGIvZHJpdmVycy9jaGFyL3Jpby9wa3QuaAppbmRleCA3MDExZTUyLi5hOTQ1ODE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3BrdC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcGt0LmgKQEAgLTM3LDE0ICszNyw2IEBACiAjaWZuZGVmIF9wa3RfaAogI2RlZmluZSBfcGt0X2ggMQogCi0KLSNpZmRlZiBTQ0NTX0xBQkVMUwotI2lmbmRlZiBsaW50Ci0vKiBzdGF0aWMgY2hhciAqX3Jpb19wa3RfaF9zY2NzID0gIkAoIylwa3QuaAkxLjgiOyAqLwotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBNQVhfVFRMICAgICAgICAgMHhmCiAjZGVmaW5lIFBLVF9DTURfQklUICAgICAoKHVzaG9ydCkgMHgwODApCiAjZGVmaW5lIFBLVF9DTURfREFUQSAgICAoKHVzaG9ydCkgMHgwODApCiAKQEAgLTcwLDE1ICs2MiwxNSBAQAogI2RlZmluZSBDT05UUk9MX0RBVEFfV05EVyAgKERBVEFfV05EVyA8PCA4KQogCiBzdHJ1Y3QgUEtUIHsKLQlCWVRFIGRlc3RfdW5pdDsJCS8qIERlc3RpbmF0aW9uIFVuaXQgSWQgKi8KLQlCWVRFIGRlc3RfcG9ydDsJCS8qIERlc3RpbmF0aW9uIFBPcnQgKi8KLQlCWVRFIHNyY191bml0OwkJLyogU291cmNlIFVuaXQgSWQgKi8KLQlCWVRFIHNyY19wb3J0OwkJLyogU291cmNlIFBPcnQgKi8KLQlCWVRFIGxlbjsKLQlCWVRFIGNvbnRyb2w7Ci0JQllURSBkYXRhW1BLVF9NQVhfREFUQV9MRU5dOworCXU4IGRlc3RfdW5pdDsJCS8qIERlc3RpbmF0aW9uIFVuaXQgSWQgKi8KKwl1OCBkZXN0X3BvcnQ7CQkvKiBEZXN0aW5hdGlvbiBQT3J0ICovCisJdTggc3JjX3VuaXQ7CQkvKiBTb3VyY2UgVW5pdCBJZCAqLworCXU4IHNyY19wb3J0OwkJLyogU291cmNlIFBPcnQgKi8KKwl1OCBsZW47CisJdTggY29udHJvbDsKKwl1OCBkYXRhW1BLVF9NQVhfREFUQV9MRU5dOwogCS8qIEFjdHVhbCBkYXRhIDotKSAqLwotCVdPUkQgY3N1bTsJCS8qIEMtU1VNICovCisJdTE2IGNzdW07CQkvKiBDLVNVTSAqLwogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3BvcnQuaCBiL2RyaXZlcnMvY2hhci9yaW8vcG9ydC5oCmluZGV4IGM5OWIxZTcuLjliNWZhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcG9ydC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcG9ydC5oCkBAIC0zMyw5MSArMzMsMzcgQEAKICNpZm5kZWYJX19yaW9fcG9ydF9oX18KICNkZWZpbmUJX19yaW9fcG9ydF9oX18KIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3BvcnRfaF9zY2NzXyA9ICJAKCMpcG9ydC5oCTEuMyI7Ci0jZW5kaWYKLQotCi0jdW5kZWYgVlBJWAotCi0KLS8qCi0qKiB0aGUgcG9ydCBkYXRhIHN0cnVjdHVyZSAtIG9uZSBwZXIgcG9ydCBpbiB0aGUgc3lzdGVtCi0qLwotCi0jaWZkZWYgU1RBVFMKLXN0cnVjdCBSSU9TdGF0cyB7Ci0JLyoKLQkgKiogaW50ZXJydXB0IHN0YXRpc3RpY3MKLQkgKi8KLQl1aW50IEJyZWFrSW50Q250OwotCXVpbnQgTW9kZW1PZmZDbnQ7Ci0JdWludCBNb2RlbU9uQ250OwotCXVpbnQgUnhJbnRDbnQ7Ci0JdWludCBUeEludENudDsKLQkvKgotCSAqKiB0aHJvdWdocHV0IHN0YXRpc3RpY3MKLQkgKi8KLQl1aW50IFJ4Q2hhckNudDsKLQl1aW50IFJ4UGt0Q250OwotCXVpbnQgUnhTYXZlQ250OwotCXVpbnQgVHhDaGFyQ250OwotCXVpbnQgVHhQa3RDbnQ7Ci0JLyoKLQkgKiogZHJpdmVyIGVudHJ5IHN0YXRpc3RpY3MKLQkgKi8KLQl1aW50IENsb3NlQ250OwotCXVpbnQgSW9jdGxDbnQ7Ci0JdWludCBPcGVuQ250OwotCXVpbnQgUmVhZENudDsKLQl1aW50IFdyaXRlQ250OwotCS8qCi0JICoqIHByb2Mgc3RhdGlzdGljcwotCSAqLwotCXVpbnQgQmxvY2tDbnQ7Ci0JdWludCBPdXRwdXRDbnQ7Ci0JdWludCBSZXN1bWVDbnQ7Ci0JdWludCBSZmx1c2hDbnQ7Ci0JdWludCBTdXNwZW5kQ250OwotCXVpbnQgVGJyZWFrQ250OwotCXVpbnQgVGltZW91dENudDsKLQl1aW50IFVuYmxvY2tDbnQ7Ci0JdWludCBXZmx1c2hDbnQ7Ci0JdWludCBXRkJvZGdlQ250OwotfTsKLSNlbmRpZgotCiAvKgogKioJUG9ydCBkYXRhIHN0cnVjdHVyZQogKi8KIHN0cnVjdCBQb3J0IHsKIAlzdHJ1Y3QgZ3NfcG9ydCBnczsKLQlpbnQgUG9ydE51bTsJCS8qIFJJTyBwb3J0IG5vLiwgMC01MTEgKi8KKwlpbnQgUG9ydE51bTsJCQkvKiBSSU8gcG9ydCBuby4sIDAtNTExICovCiAJc3RydWN0IEhvc3QgKkhvc3RQOwotCXZvbGF0aWxlIGNhZGRyX3QgQ2FkZHI7Ci0JdXNob3J0IEhvc3RQb3J0OwkvKiBQb3J0IG51bWJlciBvbiBob3N0IGNhcmQgKi8KLQl1Y2hhciBSdXBOdW07CQkvKiBOdW1iZXIgb2YgUlVQIGZvciBwb3J0ICovCi0JdWNoYXIgSUQyOwkJLyogU2Vjb25kIElEIG9mIFJUQSBmb3IgcG9ydCAqLwotCXVsb25nIFN0YXRlOwkJLyogRkxBR1MgZm9yIG9wZW4gJiB4b3BlbiAqLwotI2RlZmluZQlSSU9fTE9QRU4JMHgwMDAwMQkvKiBMb2NhbCBvcGVuICovCi0jZGVmaW5lCVJJT19NT1BFTgkweDAwMDAyCS8qIE1vZGVtIG9wZW4gKi8KLSNkZWZpbmUJUklPX1dPUEVOCTB4MDAwMDQJLyogV2FpdGluZyBmb3Igb3BlbiAqLwotI2RlZmluZQlSSU9fQ0xPU0lORwkweDAwMDA4CS8qIFRoZSBwb3J0IGlzIGJlaW5nIGNsb3NlICovCi0jZGVmaW5lCVJJT19YUEJVU1kJMHgwMDAxMAkvKiBUcmFuc3BhcmVudCBwcmludGVyIGJ1c3kgKi8KLSNkZWZpbmUJUklPX0JSRUFLSU5HCTB4MDAwMjAJLyogQnJlYWsgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUJUklPX0RJUkVDVAkweDAwMDQwCS8qIERvaW5nIERpcmVjdCBvdXRwdXQgKi8KLSNkZWZpbmUJUklPX0VYQ0xVU0lWRQkweDAwMDgwCS8qIFN0cmVhbSBvcGVuIGZvciBleGNsdXNpdmUgdXNlICovCi0jZGVmaW5lCVJJT19OREVMQVkJMHgwMDEwMAkvKiBTdHJlYW0gaXMgb3BlbiBGTkRFTEFZICovCi0jZGVmaW5lCVJJT19DQVJSX09OCTB4MDAyMDAJLyogU3RyZWFtIGhhcyBjYXJyaWVyIHByZXNlbnQgKi8KLSNkZWZpbmUJUklPX1hQV0FOVFIJMHgwMDQwMAkvKiBTdHJlYW0gd2FudGVkIGJ5IFhwcmludCAqLwotI2RlZmluZQlSSU9fUkJMSwkweDAwODAwCS8qIFN0cmVhbSBpcyByZWFkLWJsb2NrZWQgKi8KLSNkZWZpbmUJUklPX0JVU1kJMHgwMTAwMAkvKiBTdHJlYW0gaXMgQlVTWSBmb3Igd3JpdGUgKi8KLSNkZWZpbmUJUklPX1RJTUVPVVQJMHgwMjAwMAkvKiBTdHJlYW0gdGltZW91dCBpbiBwcm9ncmVzcyAqLwotI2RlZmluZQlSSU9fVFhTVE9QCTB4MDQwMDAJLyogU3RyZWFtIG91dHB1dCBpcyBzdG9wcGVkICovCi0jZGVmaW5lCVJJT19XQUlURkxVU0gJMHgwODAwMAkvKiBTdHJlYW0gd2FpdGluZyBmb3IgZmx1c2ggKi8KLSNkZWZpbmUJUklPX0RZTk9ST0QJMHgxMDAwMAkvKiBEcmFpbiBmYWlsZWQgKi8KLSNkZWZpbmUJUklPX0RFTEVURUQJMHgyMDAwMAkvKiBSVEEgaGFzIGJlZW4gZGVsZXRlZCAqLwotI2RlZmluZSBSSU9fSVNTQ0FOQ09ERQkweDQwMDAwCS8qIFRoaXMgbGluZSBpcyBpbiBzY2FuY29kZSBtb2RlICovCisJY2FkZHJfdCBDYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCBIb3N0UG9ydDsJLyogUG9ydCBudW1iZXIgb24gaG9zdCBjYXJkICovCisJdW5zaWduZWQgY2hhciBSdXBOdW07CQkvKiBOdW1iZXIgb2YgUlVQIGZvciBwb3J0ICovCisJdW5zaWduZWQgY2hhciBJRDI7CQkvKiBTZWNvbmQgSUQgb2YgUlRBIGZvciBwb3J0ICovCisJdW5zaWduZWQgbG9uZyBTdGF0ZTsJCS8qIEZMQUdTIGZvciBvcGVuICYgeG9wZW4gKi8KKyNkZWZpbmUJUklPX0xPUEVOCTB4MDAwMDEJCS8qIExvY2FsIG9wZW4gKi8KKyNkZWZpbmUJUklPX01PUEVOCTB4MDAwMDIJCS8qIE1vZGVtIG9wZW4gKi8KKyNkZWZpbmUJUklPX1dPUEVOCTB4MDAwMDQJCS8qIFdhaXRpbmcgZm9yIG9wZW4gKi8KKyNkZWZpbmUJUklPX0NMT1NJTkcJMHgwMDAwOAkJLyogVGhlIHBvcnQgaXMgYmVpbmcgY2xvc2UgKi8KKyNkZWZpbmUJUklPX1hQQlVTWQkweDAwMDEwCQkvKiBUcmFuc3BhcmVudCBwcmludGVyIGJ1c3kgKi8KKyNkZWZpbmUJUklPX0JSRUFLSU5HCTB4MDAwMjAJCS8qIEJyZWFrIGluIHByb2dyZXNzICovCisjZGVmaW5lCVJJT19ESVJFQ1QJMHgwMDA0MAkJLyogRG9pbmcgRGlyZWN0IG91dHB1dCAqLworI2RlZmluZQlSSU9fRVhDTFVTSVZFCTB4MDAwODAJCS8qIFN0cmVhbSBvcGVuIGZvciBleGNsdXNpdmUgdXNlICovCisjZGVmaW5lCVJJT19OREVMQVkJMHgwMDEwMAkJLyogU3RyZWFtIGlzIG9wZW4gRk5ERUxBWSAqLworI2RlZmluZQlSSU9fQ0FSUl9PTgkweDAwMjAwCQkvKiBTdHJlYW0gaGFzIGNhcnJpZXIgcHJlc2VudCAqLworI2RlZmluZQlSSU9fWFBXQU5UUgkweDAwNDAwCQkvKiBTdHJlYW0gd2FudGVkIGJ5IFhwcmludCAqLworI2RlZmluZQlSSU9fUkJMSwkweDAwODAwCQkvKiBTdHJlYW0gaXMgcmVhZC1ibG9ja2VkICovCisjZGVmaW5lCVJJT19CVVNZCTB4MDEwMDAJCS8qIFN0cmVhbSBpcyBCVVNZIGZvciB3cml0ZSAqLworI2RlZmluZQlSSU9fVElNRU9VVAkweDAyMDAwCQkvKiBTdHJlYW0gdGltZW91dCBpbiBwcm9ncmVzcyAqLworI2RlZmluZQlSSU9fVFhTVE9QCTB4MDQwMDAJCS8qIFN0cmVhbSBvdXRwdXQgaXMgc3RvcHBlZCAqLworI2RlZmluZQlSSU9fV0FJVEZMVVNICTB4MDgwMDAJCS8qIFN0cmVhbSB3YWl0aW5nIGZvciBmbHVzaCAqLworI2RlZmluZQlSSU9fRFlOT1JPRAkweDEwMDAwCQkvKiBEcmFpbiBmYWlsZWQgKi8KKyNkZWZpbmUJUklPX0RFTEVURUQJMHgyMDAwMAkJLyogUlRBIGhhcyBiZWVuIGRlbGV0ZWQgKi8KKyNkZWZpbmUgUklPX0lTU0NBTkNPREUJMHg0MDAwMAkJLyogVGhpcyBsaW5lIGlzIGluIHNjYW5jb2RlIG1vZGUgKi8KICNkZWZpbmUJUklPX1VTSU5HX0VVQwkweDEwMDAwMAkvKiBVc2luZyBleHRlbmRlZCBVbml4IGNoYXJzICovCiAjZGVmaW5lCVJJT19DQU5fQ09PSwkweDIwMDAwMAkvKiBUaGlzIGxpbmUgY2FuIGRvIGNvb2tpbmcgKi8KICNkZWZpbmUgUklPX1RSSUFEX01PREUgIDB4NDAwMDAwCS8qIEVuYWJsZSBUUklBRCBzcGVjaWFsIG9wcy4gKi8KQEAgLTEyNSwxNSArNzEsMTUgQEAKICNkZWZpbmUgUklPX1RSSUFEX0ZVTkMgIDB4MTAwMDAwMAkvKiBTZWVuIGEgZnVuY3Rpb24ga2V5IGNvbWluZyBpbiAqLwogI2RlZmluZSBSSU9fVEhST1RUTEVfUlggMHgyMDAwMDAwCS8qIFJYIG5lZWRzIHRvIGJlIHRocm90dGxlZC4gKi8KIAotCXVsb25nIENvbmZpZzsJCS8qIEZMQUdTIGZvciBOT1JFQUQuLi4uICovCi0jZGVmaW5lCVJJT19OT1JFQUQJMHgwMDAxCS8qIEFyZSBub3QgYWxsb3dlZCB0byByZWFkIHBvcnQgKi8KLSNkZWZpbmUJUklPX05PV1JJVEUJMHgwMDAyCS8qIEFyZSBub3QgYWxsb3dlZCB0byB3cml0ZSBwb3J0ICovCi0jZGVmaW5lCVJJT19OT1hQUklOVAkweDAwMDQJLyogQXJlIG5vdCBhbGxvd2VkIHRvIHhwcmludCBwb3J0ICovCi0jZGVmaW5lCVJJT19OT01BU0sJMHgwMDA3CS8qIEFsbCBub3QgYWxsb3dlZCB0aGluZ3MgKi8KLSNkZWZpbmUgUklPX0lYQU5ZCTB4MDAwOAkvKiBQb3J0IGlzIGFsbG93ZWQgaXhhbnkgKi8KLSNkZWZpbmUJUklPX01PREVNCTB4MDAxMAkvKiBTdHJlYW0gaXMgYSBtb2RlbSBkZXZpY2UgKi8KLSNkZWZpbmUJUklPX0lYT04JMHgwMDIwCS8qIFBvcnQgaXMgYWxsb3dlZCBpeG9uICovCi0jZGVmaW5lIFJJT19XQUlURFJBSU4JMHgwMDQwCS8qIFdhaXQgZm9yIHBvcnQgdG8gY29tcGxldGVseSBkcmFpbiAqLworCXVuc2lnbmVkIGxvbmcgQ29uZmlnOwkJLyogRkxBR1MgZm9yIE5PUkVBRC4uLi4gKi8KKyNkZWZpbmUJUklPX05PUkVBRAkweDAwMDEJCS8qIEFyZSBub3QgYWxsb3dlZCB0byByZWFkIHBvcnQgKi8KKyNkZWZpbmUJUklPX05PV1JJVEUJMHgwMDAyCQkvKiBBcmUgbm90IGFsbG93ZWQgdG8gd3JpdGUgcG9ydCAqLworI2RlZmluZQlSSU9fTk9YUFJJTlQJMHgwMDA0CQkvKiBBcmUgbm90IGFsbG93ZWQgdG8geHByaW50IHBvcnQgKi8KKyNkZWZpbmUJUklPX05PTUFTSwkweDAwMDcJCS8qIEFsbCBub3QgYWxsb3dlZCB0aGluZ3MgKi8KKyNkZWZpbmUgUklPX0lYQU5ZCTB4MDAwOAkJLyogUG9ydCBpcyBhbGxvd2VkIGl4YW55ICovCisjZGVmaW5lCVJJT19NT0RFTQkweDAwMTAJCS8qIFN0cmVhbSBpcyBhIG1vZGVtIGRldmljZSAqLworI2RlZmluZQlSSU9fSVhPTgkweDAwMjAJCS8qIFBvcnQgaXMgYWxsb3dlZCBpeG9uICovCisjZGVmaW5lIFJJT19XQUlURFJBSU4JMHgwMDQwCQkvKiBXYWl0IGZvciBwb3J0IHRvIGNvbXBsZXRlbHkgZHJhaW4gKi8KICNkZWZpbmUgUklPX01BUF81MF9UT181MAkweDAwODAJLyogTWFwIDUwIGJhdWQgdG8gNTAgYmF1ZCAqLwogI2RlZmluZSBSSU9fTUFQXzExMF9UT18xMTAJMHgwMTAwCS8qIE1hcCAxMTAgYmF1ZCB0byAxMTAgYmF1ZCAqLwogCkBAIC0xNDIsMzYgKzg4LDM2IEBACiAqKiBBcyBMeW54T1MgZG9lcyBub3QgYXBwZWFyIHRvIHN1cHBvcnQgSGFyZHdhcmUgRmxvdyBDb250cm9sIC4uLi4uCiAqKiBEZWZpbmUgb3VyIG93biBmbG93IGNvbnRyb2wgZmxhZ3MgaW4gJ0NvbmZpZycuCiAqLwotI2RlZmluZSBSSU9fQ1RTRkxPVwkweDAyMDAJLyogUklPJ3Mgb3duIENUU0ZMT1cgZmxhZyAqLwotI2RlZmluZSBSSU9fUlRTRkxPVwkweDA0MDAJLyogUklPJ3Mgb3duIFJUU0ZMT1cgZmxhZyAqLworI2RlZmluZSBSSU9fQ1RTRkxPVwkweDAyMDAJCS8qIFJJTydzIG93biBDVFNGTE9XIGZsYWcgKi8KKyNkZWZpbmUgUklPX1JUU0ZMT1cJMHgwNDAwCQkvKiBSSU8ncyBvd24gUlRTRkxPVyBmbGFnICovCiAKIAotCXN0cnVjdCBQSEIgKlBoYlA7CS8qIHBvaW50ZXIgdG8gUEhCIGZvciBwb3J0ICovCi0JV09SRCAqVHhBZGQ7CQkvKiBBZGQgcGFja2V0cyBoZXJlICovCi0JV09SRCAqVHhTdGFydDsJCS8qIFN0YXJ0IG9mIGFkZCBhcnJheSAqLwotCVdPUkQgKlR4RW5kOwkJLyogRW5kIG9mIGFkZCBhcnJheSAqLwotCVdPUkQgKlJ4UmVtb3ZlOwkJLyogUmVtb3ZlIHBhY2tldHMgaGVyZSAqLwotCVdPUkQgKlJ4U3RhcnQ7CQkvKiBTdGFydCBvZiByZW1vdmUgYXJyYXkgKi8KLQlXT1JEICpSeEVuZDsJCS8qIEVuZCBvZiByZW1vdmUgYXJyYXkgKi8KLQl1aW50IFJ0YVVuaXF1ZU51bTsJLyogVW5pcXVlIG51bWJlciBvZiBSVEEgKi8KLQl1c2hvcnQgUG9ydFN0YXRlOwkvKiBzdGF0dXMgb2YgcG9ydCAqLwotCXVzaG9ydCBNb2RlbVN0YXRlOwkvKiBzdGF0dXMgb2YgbW9kZW0gbGluZXMgKi8KLQl1bG9uZyBNb2RlbUxpbmVzOwkvKiBNb2RlbSBiaXRzIHNlbnQgdG8gUlRBICovCi0JdWNoYXIgQ29va01vZGU7CQkvKiB3aG8gZXhwYW5kcyBDUi9MRj8gKi8KLQl1Y2hhciBQYXJhbVNlbTsJCS8qIFByZXZlbnQgd3JpdGUgZHVyaW5nIHBhcmFtICovCi0JdWNoYXIgTWFwcGVkOwkJLyogaWYgcG9ydCBtYXBwZWQgb250byBob3N0ICovCi0JdWNoYXIgU2Vjb25kQmxvY2s7CS8qIGlmIHBvcnQgYmVsb25ncyB0byAybmQgYmxvY2sKLQkJCQkgICBvZiAxNiBwb3J0IFJUQSAqLwotCXVjaGFyIEluVXNlOwkJLyogaG93IG1hbnkgcHJlLWVtcHRpdmUgY21kcyAqLwotCXVjaGFyIExvY2s7CQkvKiBpZiBwYXJhbXMgbG9ja2VkICovCi0JdWNoYXIgU3RvcmU7CQkvKiBpZiBwYXJhbXMgc3RvcmVkIGFjcm9zcyBjbG9zZXMgKi8KLQl1Y2hhciBGaXJzdE9wZW47CS8qIFRSVUUgaWYgZmlyc3QgdGltZSBwb3J0IG9wZW5lZCAqLwotCXVjaGFyIEZsdXNoQ21kQm9kZ2U7CS8qIGlmIGRvaW5nIGEgKG5vbilmbHVzaCAqLwotCXVjaGFyIE1hZ2ljRmxhZ3M7CS8qIHJlcXVpcmUgaW50ciBwcm9jZXNzaW5nICovCi0jZGVmaW5lCU1BR0lDX0ZMVVNICTB4MDEJLyogbWlycm9yIG9mIFdmbHVzaEZsYWcgKi8KLSNkZWZpbmUJTUFHSUNfUkVCT09UCTB4MDIJLyogUlRBIHJlLWJvb3RlZCwgcmUtb3BlbiBwb3J0cyAqLwotI2RlZmluZQlNT1JFX09VVFBVVF9FWUdPUiAweDA0CS8qIHJpb3Rwcm9jIGZhaWxlZCB0byBlbXB0eSBjbGlzdHMgKi8KLQl1Y2hhciBXZmx1c2hGbGFnOwkvKiAxIEhvdyBtYW55IFdGTFVTSHMgYWN0aXZlICovCisJc3RydWN0IFBIQiAqUGhiUDsJCS8qIHBvaW50ZXIgdG8gUEhCIGZvciBwb3J0ICovCisJdTE2ICpUeEFkZDsJCQkvKiBBZGQgcGFja2V0cyBoZXJlICovCisJdTE2ICpUeFN0YXJ0OwkJCS8qIFN0YXJ0IG9mIGFkZCBhcnJheSAqLworCXUxNiAqVHhFbmQ7CQkJLyogRW5kIG9mIGFkZCBhcnJheSAqLworCXUxNiAqUnhSZW1vdmU7CQkJLyogUmVtb3ZlIHBhY2tldHMgaGVyZSAqLworCXUxNiAqUnhTdGFydDsJCQkvKiBTdGFydCBvZiByZW1vdmUgYXJyYXkgKi8KKwl1MTYgKlJ4RW5kOwkJCS8qIEVuZCBvZiByZW1vdmUgYXJyYXkgKi8KKwl1bnNpZ25lZCBpbnQgUnRhVW5pcXVlTnVtOwkvKiBVbmlxdWUgbnVtYmVyIG9mIFJUQSAqLworCXVuc2lnbmVkIHNob3J0IFBvcnRTdGF0ZTsJLyogc3RhdHVzIG9mIHBvcnQgKi8KKwl1bnNpZ25lZCBzaG9ydCBNb2RlbVN0YXRlOwkvKiBzdGF0dXMgb2YgbW9kZW0gbGluZXMgKi8KKwl1bnNpZ25lZCBsb25nIE1vZGVtTGluZXM7CS8qIE1vZGVtIGJpdHMgc2VudCB0byBSVEEgKi8KKwl1bnNpZ25lZCBjaGFyIENvb2tNb2RlOwkJLyogd2hvIGV4cGFuZHMgQ1IvTEY/ICovCisJdW5zaWduZWQgY2hhciBQYXJhbVNlbTsJCS8qIFByZXZlbnQgd3JpdGUgZHVyaW5nIHBhcmFtICovCisJdW5zaWduZWQgY2hhciBNYXBwZWQ7CQkvKiBpZiBwb3J0IG1hcHBlZCBvbnRvIGhvc3QgKi8KKwl1bnNpZ25lZCBjaGFyIFNlY29uZEJsb2NrOwkvKiBpZiBwb3J0IGJlbG9uZ3MgdG8gMm5kIGJsb2NrCisJCQkJICAgCQlvZiAxNiBwb3J0IFJUQSAqLworCXVuc2lnbmVkIGNoYXIgSW5Vc2U7CQkvKiBob3cgbWFueSBwcmUtZW1wdGl2ZSBjbWRzICovCisJdW5zaWduZWQgY2hhciBMb2NrOwkJLyogaWYgcGFyYW1zIGxvY2tlZCAqLworCXVuc2lnbmVkIGNoYXIgU3RvcmU7CQkvKiBpZiBwYXJhbXMgc3RvcmVkIGFjcm9zcyBjbG9zZXMgKi8KKwl1bnNpZ25lZCBjaGFyIEZpcnN0T3BlbjsJLyogVFJVRSBpZiBmaXJzdCB0aW1lIHBvcnQgb3BlbmVkICovCisJdW5zaWduZWQgY2hhciBGbHVzaENtZEJvZGdlOwkvKiBpZiBkb2luZyBhIChub24pZmx1c2ggKi8KKwl1bnNpZ25lZCBjaGFyIE1hZ2ljRmxhZ3M7CS8qIHJlcXVpcmUgaW50ciBwcm9jZXNzaW5nICovCisjZGVmaW5lCU1BR0lDX0ZMVVNICTB4MDEJCS8qIG1pcnJvciBvZiBXZmx1c2hGbGFnICovCisjZGVmaW5lCU1BR0lDX1JFQk9PVAkweDAyCQkvKiBSVEEgcmUtYm9vdGVkLCByZS1vcGVuIHBvcnRzICovCisjZGVmaW5lCU1PUkVfT1VUUFVUX0VZR09SIDB4MDQJCS8qIHJpb3Rwcm9jIGZhaWxlZCB0byBlbXB0eSBjbGlzdHMgKi8KKwl1bnNpZ25lZCBjaGFyIFdmbHVzaEZsYWc7CS8qIDEgSG93IG1hbnkgV0ZMVVNIcyBhY3RpdmUgKi8KIC8qCiAqKiBUcmFuc3BhcmVudCBwcmludCBzdHVmZgogKi8KQEAgLTE3OSw2MyArMTI1LDU1IEBACiAjaWZuZGVmIE1BWF9YUF9DVFJMX0xFTgogI2RlZmluZSBNQVhfWFBfQ1RSTF9MRU4JCTE2CS8qIEFMU08gSU4gREFFTU9OLkggKi8KICNlbmRpZgotCQl1aW50IFhwQ3BzOworCQl1bnNpZ25lZCBpbnQgWHBDcHM7CiAJCWNoYXIgWHBPbltNQVhfWFBfQ1RSTF9MRU5dOwogCQljaGFyIFhwT2ZmW01BWF9YUF9DVFJMX0xFTl07Ci0JCXVzaG9ydCBYcExlbjsJLyogc3RybGVuKFhwT24pK3N0cmxlbihYcE9mZikgKi8KLQkJdWNoYXIgWHBBY3RpdmU7Ci0JCXVjaGFyIFhwTGFzdFRpY2tPazsJLyogVFJVRSBpZiB3ZSBjYW4gcHJvY2VzcyAqLworCQl1bnNpZ25lZCBzaG9ydCBYcExlbjsJLyogc3RybGVuKFhwT24pK3N0cmxlbihYcE9mZikgKi8KKwkJdW5zaWduZWQgY2hhciBYcEFjdGl2ZTsKKwkJdW5zaWduZWQgY2hhciBYcExhc3RUaWNrT2s7CS8qIFRSVUUgaWYgd2UgY2FuIHByb2Nlc3MgKi8KICNkZWZpbmUJWFBfT1BFTgkJMDAwMDEKICNkZWZpbmUJWFBfUlVOQUJMRQkwMDAwMgogCQlzdHJ1Y3QgdHR5c3RhdGljcyAqWHR0eVA7CiAJfSBYcHJpbnQ7Ci0jaWZkZWYgVlBJWAotCXY4Nl90ICpTdGFzaFA7Ci0JdWludCBJbnRNYXNrOwotCXN0cnVjdCB0ZXJtc3MgVnBpeFNzOwotCXVjaGFyIE1vZGVtU3RhdHVzUmVnOwkvKiBNb2RlbSBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNlbmRpZgotCXVjaGFyIFJ4RGF0YVN0YXJ0OwotCXVjaGFyIENvcjJDb3B5OwkJLyogY29weSBvZiBDT1IyICovCi0JY2hhciAqTmFtZTsJCS8qIHBvaW50cyB0byB0aGUgUnRhJ3MgbmFtZSAqLwotI2lmZGVmIFNUQVRTCi0Jc3RydWN0IFJJT1N0YXRzIFN0YXQ7CS8qIHBvcnRzIHN0YXRpc3RpY3MgKi8KLSNlbmRpZgorCXVuc2lnbmVkIGNoYXIgUnhEYXRhU3RhcnQ7CisJdW5zaWduZWQgY2hhciBDb3IyQ29weTsJCS8qIGNvcHkgb2YgQ09SMiAqLworCWNoYXIgKk5hbWU7CQkJLyogcG9pbnRzIHRvIHRoZSBSdGEncyBuYW1lICovCiAJY2hhciAqVHhSaW5nQnVmZmVyOwotCXVzaG9ydCBUeEJ1ZmZlckluOwkvKiBOZXcgZGF0YSBhcnJpdmVzIGhlcmUgKi8KLQl1c2hvcnQgVHhCdWZmZXJPdXQ7CS8qIEludHIgcmVtb3ZlcyBkYXRhIGhlcmUgKi8KLQl1c2hvcnQgT2xkVHhCdWZmZXJPdXQ7CS8qIEluZGljYXRlcyBpZiBkcmFpbmluZyAqLwotCWludCBUaW1lb3V0SWQ7CQkvKiBUaW1lb3V0IElEICovCi0JdWludCBEZWJ1ZzsKLQl1Y2hhciBXYWl0VW50aWxCb290ZWQ7CS8qIFRydWUgaWYgb3BlbiBzaG91bGQgYmxvY2sgKi8KLQl1aW50IHN0YXRzR2F0aGVyOwkvKiBUcnVlIGlmIGdhdGhlcmluZyBzdGF0cyAqLwotCXVsb25nIHR4Y2hhcnM7CQkvKiBDaGFycyB0cmFuc21pdHRlZCAqLwotCXVsb25nIHJ4Y2hhcnM7CQkvKiBDaGFycyByZWNlaXZlZCAqLwotCXVsb25nIG9wZW5zOwkJLyogcG9ydCBvcGVuIGNvdW50ICovCi0JdWxvbmcgY2xvc2VzOwkJLyogcG9ydCBjbG9zZSBjb3VudCAqLwotCXVsb25nIGlvY3RsczsJCS8qIGlvY3RsIGNvdW50ICovCi0JdWNoYXIgTGFzdFJ4VGdsOwkvKiBMYXN0IHN0YXRlIG9mIHJ4IHRvZ2dsZSBiaXQgKi8KLQlzcGlubG9ja190IHBvcnRTZW07CS8qIExvY2sgdXNpbmcgdGhpcyBzZW0gKi8KLQlpbnQgTW9uaXRvclRzdGF0ZTsJLyogTW9uaXRvcmluZyA/ICovCi0JaW50IHRpbWVvdXRfaWQ7CQkvKiBGb3IgY2FsbGluZyAxMDAgbXMgZGVsYXlzICovCi0JaW50IHRpbWVvdXRfc2VtOwkvKiBGb3IgY2FsbGluZyAxMDAgbXMgZGVsYXlzICovCi0JaW50IGZpcnN0T3BlbjsJCS8qIEZpcnN0IHRpbWUgb3BlbiA/ICovCi0JY2hhciAqcDsJCS8qIHNhdmUgdGhlIGdsb2JhbCBzdHJ1YyBoZXJlIC4uICovCisJdW5zaWduZWQgc2hvcnQgVHhCdWZmZXJJbjsJLyogTmV3IGRhdGEgYXJyaXZlcyBoZXJlICovCisJdW5zaWduZWQgc2hvcnQgVHhCdWZmZXJPdXQ7CS8qIEludHIgcmVtb3ZlcyBkYXRhIGhlcmUgKi8KKwl1bnNpZ25lZCBzaG9ydCBPbGRUeEJ1ZmZlck91dDsJLyogSW5kaWNhdGVzIGlmIGRyYWluaW5nICovCisJaW50IFRpbWVvdXRJZDsJCQkvKiBUaW1lb3V0IElEICovCisJdW5zaWduZWQgaW50IERlYnVnOworCXVuc2lnbmVkIGNoYXIgV2FpdFVudGlsQm9vdGVkOwkvKiBUcnVlIGlmIG9wZW4gc2hvdWxkIGJsb2NrICovCisJdW5zaWduZWQgaW50IHN0YXRzR2F0aGVyOwkvKiBUcnVlIGlmIGdhdGhlcmluZyBzdGF0cyAqLworCXVuc2lnbmVkIGxvbmcgdHhjaGFyczsJCS8qIENoYXJzIHRyYW5zbWl0dGVkICovCisJdW5zaWduZWQgbG9uZyByeGNoYXJzOwkJLyogQ2hhcnMgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIG9wZW5zOwkJLyogcG9ydCBvcGVuIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBjbG9zZXM7CQkvKiBwb3J0IGNsb3NlIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBpb2N0bHM7CQkvKiBpb2N0bCBjb3VudCAqLworCXVuc2lnbmVkIGNoYXIgTGFzdFJ4VGdsOwkvKiBMYXN0IHN0YXRlIG9mIHJ4IHRvZ2dsZSBiaXQgKi8KKwlzcGlubG9ja190IHBvcnRTZW07CQkvKiBMb2NrIHVzaW5nIHRoaXMgc2VtICovCisJaW50IE1vbml0b3JUc3RhdGU7CQkvKiBNb25pdG9yaW5nID8gKi8KKwlpbnQgdGltZW91dF9pZDsJCQkvKiBGb3IgY2FsbGluZyAxMDAgbXMgZGVsYXlzICovCisJaW50IHRpbWVvdXRfc2VtOwkJLyogRm9yIGNhbGxpbmcgMTAwIG1zIGRlbGF5cyAqLworCWludCBmaXJzdE9wZW47CQkJLyogRmlyc3QgdGltZSBvcGVuID8gKi8KKwljaGFyICpwOwkJCS8qIHNhdmUgdGhlIGdsb2JhbCBzdHJ1YyBoZXJlIC4uICovCiB9OwogCiBzdHJ1Y3QgTW9kdWxlSW5mbyB7CiAJY2hhciAqTmFtZTsKLQl1aW50IEZsYWdzWzRdOwkJLyogb25lIHBlciBwb3J0IG9uIGEgbW9kdWxlICovCisJdW5zaWduZWQgaW50IEZsYWdzWzRdOwkJLyogb25lIHBlciBwb3J0IG9uIGEgbW9kdWxlICovCiB9OwotI2VuZGlmCiAKIC8qCiAqKiBUaGlzIHN0cnVjdCBpcyByZXF1aXJlZCBiZWNhdXNlIHRyeWluZyB0byBncmFiIGFuIGVudGlyZSBQb3J0IHN0cnVjdHVyZQogKiogcnVucyBpbnRvIHByb2JsZW1zIHdpdGggZGlmZmVyaW5nIHN0cnVjdCBzaXplcyBiZXR3ZWVuIGRyaXZlciBhbmQgY29uZmlnLgogKi8KIHN0cnVjdCBQb3J0UGFyYW1zIHsKLQl1aW50IFBvcnQ7Ci0JdWxvbmcgQ29uZmlnOwotCXVsb25nIFN0YXRlOworCXVuc2lnbmVkIGludCBQb3J0OworCXVuc2lnbmVkIGxvbmcgQ29uZmlnOworCXVuc2lnbmVkIGxvbmcgU3RhdGU7CiAJc3RydWN0IHR0eXN0YXRpY3MgKlR0eVA7CiB9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcWJ1Zi5oIGIvZHJpdmVycy9jaGFyL3Jpby9xYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MWZmYzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9xYnVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgUSBVIEUgVSBFICAgIEIgVSBGIEYgRSBSICAgUyBUIFIgVSBDIFQgVSBSIEUgUwotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEgLyBKZXJlbXkgUm9sbHMKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfcWJ1Zl9oCi0jZGVmaW5lIF9xYnVmX2ggMQotCi0jaWZuZGVmIGxpbnQKLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9yaW9fcWJ1Zl9oX3NjY3MgPSAiQCgjKXFidWYuaAkxLjEiOwotI2VuZGlmCi0jZW5kaWYKLQotCi0KLSNkZWZpbmUgUEtUU19QRVJfQlVGRkVSICAgICgyMjAgLyBQS1RfTEVOR1RIKQotCi10eXBlZGVmIHN0cnVjdCBRX0JVRiBRX0JVRjsKLXN0cnVjdCBRX0JVRiB7Ci0JUV9CVUZfcHRyIG5leHQ7Ci0JUV9CVUZfcHRyIHByZXY7Ci0JUEtUX3B0ciBidWZbUEtUU19QRVJfQlVGRkVSXTsKLX07Ci0KLQotI2VuZGlmCi0KLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW8uaCBiL2RyaXZlcnMvY2hhci9yaW8vcmlvLmgKaW5kZXggN2Y0NWUxYS4uYjRjOTE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW8uaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpby5oCkBAIC0zMywzOCArMzMsNiBAQAogI2lmbmRlZglfX3Jpb19yaW9faF9fCiAjZGVmaW5lCV9fcmlvX3Jpb19oX18KIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3Jpb19oX3NjY3NfID0gIkAoIylyaW8uaAkxLjMiOwotI2VuZGlmCi0KLS8qCi0qKiAzMC4wOS4xOTk4IEFSRyAtCi0qKiBJbnRyb2R1Y2VkIGRyaXZlciB2ZXJzaW9uIGFuZCBob3N0IGNhcmQgdHlwZSBzdHJpbmdzCi0qLwotI2RlZmluZSBSSU9fRFJWX1NUUiAiU3BlY2lhbGl4IFJJTyBEcml2ZXIiCi0jZGVmaW5lIFJJT19BVF9IT1NUX1NUUiAiSVNBIgotI2RlZmluZSBSSU9fUENJX0hPU1RfU1RSICJQQ0kiCi0KLQotLyoKLSoqIHJpb19pbmZvX3N0b3JlKCkgY29tbWFuZHMgKGFyYml0YXJ5IHZhbHVlcykgOgotKi8KLSNkZWZpbmUgUklPX0lORk9fUFVUCTB4QTRCM0MyRDEKLSNkZWZpbmUgUklPX0lORk9fR0VUCTB4RjFFMkQzQzQKLQotCi0vKgotKiogYW55dGhpbmcgdGhhdCBJIGNvdWxkbid0IGNyYW0gaW4gc29tZXdoZXJlIGVsc2UKLSovCi0vKgotI2lmbmRlZiBSSU9ERUJVRwotI2RlZmluZSBkZWJ1ZwotI2Vsc2UKLSNkZWZpbmUgZGVidWcgcmlvcHJpbnQKLSNlbmRpZgotKi8KLQotCiAvKgogKioJTWF4aW11bSBudW1iZXJzIG9mIHRoaW5ncwogKi8KQEAgLTEwMSw5ICs2OSw4IEBACiAvKgogKioJRmxhZyB2YWx1ZXMgcmV0dXJuZWQgYnkgZnVuY3Rpb25zCiAqLworCiAjZGVmaW5lCVJJT19GQUlMCS0xCi0jZGVmaW5lCVJJT19TVUNDRVNTCTAKLSNkZWZpbmUJQ09QWUZBSUwJLTEJLyogY29weVtpbnxvdXRdIGZhaWxlZCAqLwogCiAvKgogKiogU3lzUG9ydCB2YWx1ZSBmb3Igc29tZXRoaW5nIHRoYXQgaGFzbid0IGFueSBwb3J0cwpAQCAtMTQyLDMwICsxMDksOCBAQAogLyoKICoqCUdlbmVyYWxseSB1c2VmdWwgY29uc3RhbnRzCiAqLwotI2RlZmluZQlIQUxGX0FfU0VDT05ECQkoKEhaKT4+MSkKLSNkZWZpbmUJQV9TRUNPTkQJCShIWikKLSNkZWZpbmUJSFVORFJFRF9IWgkJKChIWi8xMDApPyhIWi8xMDApOjEpCi0jZGVmaW5lCUZJRlRZX0haCQkoKEhaLzUwKT8oSFovNTApOjEpCi0jZGVmaW5lCVRXRU5UWV9IWgkJKChIWi8yMCk/KEhaLzIwKToxKQotI2RlZmluZQlURU5fSFoJCQkoKEhaLzEwKT8oSFovMTApOjEpCi0jZGVmaW5lCUZJVkVfSFoJCQkoKEhaLzUpPyhIWi81KToxKQotI2RlZmluZQlIVU5EUkVEX01TCQlURU5fSFoKLSNkZWZpbmUJRklGVFlfTVMJCVRXRU5UWV9IWgotI2RlZmluZQlUV0VOVFlfTVMJCUZJRlRZX0haCi0jZGVmaW5lCVRFTl9NUwkJCUhVTkRSRURfSFoKLSNkZWZpbmUJVFdPX1NFQ09ORFMJCSgoQV9TRUNPTkQpKjIpCi0jZGVmaW5lCUZJVkVfU0VDT05EUwkJKChBX1NFQ09ORCkqNSkKLSNkZWZpbmUJVEVOX1NFQ09ORFMJCSgoQV9TRUNPTkQpKjEwKQotI2RlZmluZQlGSUZURUVOX1NFQ09ORFMJCSgoQV9TRUNPTkQpKjE1KQotI2RlZmluZQlUV0VOVFlfU0VDT05EUwkJKChBX1NFQ09ORCkqMjApCi0jZGVmaW5lCUhBTEZfQV9NSU5VVEUJCShBX01JTlVURT4+MSkKLSNkZWZpbmUJQV9NSU5VVEUJCShBX1NFQ09ORCo2MCkKLSNkZWZpbmUJRklWRV9NSU5VVEVTCQkoQV9NSU5VVEUqNSkKLSNkZWZpbmUJUVVBUlRFUl9IT1VSCQkoQV9NSU5VVEUqMTUpCi0jZGVmaW5lCUhBTEZfSE9VUgkJKEFfTUlOVVRFKjMwKQotI2RlZmluZQlIT1VSCQkJKEFfTUlOVVRFKjYwKQogCi0jZGVmaW5lCVNJWFRFRU5fTUVHCQkweDEwMDAwMDAKKyNkZWZpbmUJSFVORFJFRF9NUwkJKChIWi8xMCk/KEhaLzEwKToxKQogI2RlZmluZQlPTkVfTUVHCQkJMHgxMDAwMDAKICNkZWZpbmUJU0lYVFlfRk9VUl9LCQkweDEwMDAwCiAKQEAgLTE3Myw4ICsxMTgsNiBAQAogI2RlZmluZQlSSU9fRUlTQV9NRU1fU0laRQlTSVhUWV9GT1VSX0sKICNkZWZpbmUJUklPX01DQV9NRU1fU0laRQlTSVhUWV9GT1VSX0sKIAotI2RlZmluZQlQT0xMX1ZFQ1RPUgkJMHgxMDAKLQogI2RlZmluZQlDT09LX1dFTEwJCTAKICNkZWZpbmUJQ09PS19NRURJVU0JCTEKICNkZWZpbmUJQ09PS19SQVcJCTIKQEAgLTE4Niw2OSArMTI5LDI2IEBACiAqKglSSU9fT0JKIHRha2VzIGhvc3RwLT5DYWRkciBhbmQgYSBVTklYIHBvaW50ZXIgdG8gYW4gb2JqZWN0IGFuZAogKioJcmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIERQIFJBTSBhcmVhLgogKi8KLSNkZWZpbmUJUklPX1BUUihDLE8pICgoKGNhZGRyX3QpKEMpKSsoMHhGRkZGJihPKSkpCi0jZGVmaW5lCVJJT19PRkYoQyxPKSAoKGludCkoTyktKGludCkoQykpCisjZGVmaW5lCVJJT19QVFIoQyxPKSAoKCh1bnNpZ25lZCBjaGFyICopKEMpKSsoMHhGRkZGJihPKSkpCisjZGVmaW5lCVJJT19PRkYoQyxPKSAoKGxvbmcpKE8pLShsb25nKShDKSkKIAogLyoKICoqCUhvdyB0byBjb252ZXJ0IGZyb20gdmFyaW91cyBkaWZmZXJlbnQgZGV2aWNlIG51bWJlciBmb3JtYXRzOgogKioJREVWIGlzIGEgZGV2IG51bWJlciwgYXMgcGFzc2VkIHRvIG9wZW4sIGNsb3NlIGV0YyAtIE5PVCBhIG1pbm9yCiAqKgludW1iZXIhCi0qKgotKioJTm90ZToJTHlueE9TIG9ubHkgZ2l2ZXMgdXMgOCBiaXRzIGZvciB0aGUgZGV2aWNlIG1pbm9yIG51bWJlciwKLSoqCQlzbyBhbGwgdGhpcyBjcmFwIGhlcmUgdG8gZGVhbCB3aXRoICdtb2RlbScgYml0cyBldGMuIGlzCi0qKgkJanVzdCBhIGxvYWQgb2YgaXJyZWxldmFudCBvbGQgYnVua3VtIQotKioJCVRoaXMgaG93ZXZlciBkb2VzIG5vdCBzdG9wIHVzIG5lZWRpbmcgdG8gZGVmaW5lIGEgdmFsdWUKLSoqCQlmb3IgUklPX01PREVNT0ZGU0VUIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRoZSAncmlvbWtkZXYnCi0qKgkJdXRpbGl0eSBpbiB0aGUgTmV3IENvbmZpZyBVdGlsaXRpZXMgc3VpdGUuCi0qLwotLyogMC01MTE6IGRpcmVjdCA1MTItMTAyMzogbW9kZW0gKi8KLSNkZWZpbmUJUklPX01PREVNT0ZGU0VUCQkweDIwMAkvKiBkb2Vzbid0IG1lYW4gYW55dGhpbmcgKi8KKyoqLworCiAjZGVmaW5lCVJJT19NT0RFTV9NQVNLCQkweDFGRgogI2RlZmluZQlSSU9fTU9ERU1fQklUCQkweDIwMAogI2RlZmluZQlSSU9fVU5NT0RFTShERVYpCShNSU5PUihERVYpICYgUklPX01PREVNX01BU0spCiAjZGVmaW5lCVJJT19JU01PREVNKERFVikJKE1JTk9SKERFVikgJiBSSU9fTU9ERU1fQklUKQogI2RlZmluZSBSSU9fUE9SVChERVYsRklSU1RfTUFKKQkoIChNQUpPUihERVYpIC0gRklSU1RfTUFKKSAqIFBPUlRTX1BFUl9IT1NUKSBcCiAJCQkJCSsgTUlOT1IoREVWKQotCi0jZGVmaW5lCXNwbHJpbwlzcGx0dHkKLQotI2RlZmluZQlSSU9fSVBMCTUKLSNkZWZpbmUJUklPX1BSSQkoUFpFUk8rMTApCi0jZGVmaW5lIFJJT19DTE9TRV9QUkkJUFpFUk8tMQkvKiB1bmludGVycnVwdGlibGUgc2xlZXBzIGZvciBjbG9zZSAqLwotCi10eXBlZGVmIHN0cnVjdCBEYkluZiB7Ci0JdWludCBGbGFnOwotCWNoYXIgTmFtZVs4XTsKLX0gRGJJbmY7Ci0KLSNpZm5kZWYgVFJVRQotI2RlZmluZQlUUlVFICgxPT0xKQotI2VuZGlmCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lCUZBTFNFCSghVFJVRSkKLSNlbmRpZgotCi0jZGVmaW5lIENTVU0ocGt0X3B0cikgICgoKHVzaG9ydCAqKShwa3RfcHRyKSlbMF0gKyAoKHVzaG9ydCAqKShwa3RfcHRyKSlbMV0gKyBcCi0JCQkoKHVzaG9ydCAqKShwa3RfcHRyKSlbMl0gKyAoKHVzaG9ydCAqKShwa3RfcHRyKSlbM10gKyBcCi0JCQkoKHVzaG9ydCAqKShwa3RfcHRyKSlbNF0gKyAoKHVzaG9ydCAqKShwa3RfcHRyKSlbNV0gKyBcCi0JCQkoKHVzaG9ydCAqKShwa3RfcHRyKSlbNl0gKyAoKHVzaG9ydCAqKShwa3RfcHRyKSlbN10gKyBcCi0JCQkoKHVzaG9ydCAqKShwa3RfcHRyKSlbOF0gKyAoKHVzaG9ydCAqKShwa3RfcHRyKSlbOV0gKQotCi0vKgotKiogVGhpcyBoYXBweSBsaXR0bGUgbWFjcm8gY29waWVzIFNJWkUgYnl0ZXMgb2YgZGF0YSBmcm9tIEZST00gdG8gVE8KLSoqIHF1aXRlIHdlbGwuIFNJWkUgbXVzdCBiZSBhIGNvbnN0YW50LgotKi8KLSNkZWZpbmUgQ0NPUFkoIEZST00sIFRPLCBTSVpFICkgeyAqKHN0cnVjdCBzIHsgY2hhciBkYXRhW1NJWkVdOyB9ICopKFRPKSA9ICooc3RydWN0IHMgKikoRlJPTSk7IH0KLQotLyoKLSoqIGluY3JlbWVudCBhIGJ1ZmZlciBwb2ludGVyIG1vZHVsbyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLi4uCi0qLwotI2RlZmluZQlCVU1QKCBQLCBJICkJKChQKSA9ICgoKFApKyhJKSkgJiBSSU9CdWZmZXJNYXNrKSkKLQotI2RlZmluZSBJTklUX1BBQ0tFVCggUEssIFBQICkgXAoteyBcCi0JKigodWludCAqKVBLKSAgICA9IFBQLT5QYWNrZXRJbmZvOyBcCi19CisjZGVmaW5lIENTVU0ocGt0X3B0cikgICgoKHUxNiAqKShwa3RfcHRyKSlbMF0gKyAoKHUxNiAqKShwa3RfcHRyKSlbMV0gKyBcCisJCQkoKHUxNiAqKShwa3RfcHRyKSlbMl0gKyAoKHUxNiAqKShwa3RfcHRyKSlbM10gKyBcCisJCQkoKHUxNiAqKShwa3RfcHRyKSlbNF0gKyAoKHUxNiAqKShwa3RfcHRyKSlbNV0gKyBcCisJCQkoKHUxNiAqKShwa3RfcHRyKSlbNl0gKyAoKHUxNiAqKShwa3RfcHRyKSlbN10gKyBcCisJCQkoKHUxNiAqKShwa3RfcHRyKSlbOF0gKyAoKHUxNiAqKShwa3RfcHRyKSlbOV0gKQogCiAjZGVmaW5lCVJJT19MSU5LX0VOQUJMRQkweDgwRkYJLyogRkYgaXMgYSBoYWNrLCBtYWlubHkgZm9yIE1pcHMsIHRvICAgICAgICAqLwogCQkJICAgICAgIC8qIHByZXZlbnQgYSByZWFsbHkgc3R1cGlkIHJhY2UgY29uZGl0aW9uLiAgKi8KQEAgLTI2NywyNyArMTY3LDQyIEBACiAjZGVmaW5lCURJU0NPTk5FQ1QJMAogI2RlZmluZQlDT05ORUNUCQkxCiAKKy8qIC0tLS0tLSBDb250cm9sIENvZGVzIC0tLS0tLSAqLwogCi0vKgotKiogTWFjaGluZSB0eXBlcyAtIHRoZXNlIG11c3QgTk9UIG92ZXJsYXAgd2l0aCBwcm9kdWN0IGNvZGVzIDAtMTUKLSovCi0jZGVmaW5lCVJJT19NSVBTX1IzMjMwCTMxCi0jZGVmaW5lCVJJT19NSVBTX1I0MDMwCTMyCisjZGVmaW5lCUNPTlRST0wJCSdeJworI2RlZmluZSBJRk9BRAkJKCBDT05UUk9MICsgMSApCisjZGVmaW5lCUlERU5USUZZCSggQ09OVFJPTCArIDIgKQorI2RlZmluZQlaT01CSUUJCSggQ09OVFJPTCArIDMgKQorI2RlZmluZQlVRk9BRAkJKCBDT05UUk9MICsgNCApCisjZGVmaW5lIElXQUlUCQkoIENPTlRST0wgKyA1ICkKIAotI2RlZmluZQlSSU9fSU9fVU5LTk9XTgktMgorI2RlZmluZQlJRk9BRF9NQUdJQwkweEYwQUQJLyogb2YgY291cnNlICovCisjZGVmaW5lCVpPTUJJRV9NQUdJQwkofjB4REVBRCkJLyogbm90IGRlYWQgLT4gem9tYmllICovCisjZGVmaW5lCVVGT0FEX01BR0lDCTB4RDFFCS8qIGtpbGwteW91ci1uZWlnaGJvdXIgKi8KKyNkZWZpbmUJSVdBSVRfTUFHSUMJMHhCMURFCS8qIEJpZGUgeW91ciB0aW1lICovCiAKLSN1bmRlZglNT0RFUk4KLSNkZWZpbmUJRVJST1IoIEUgKQlkbyB7IHUudV9lcnJvciA9IEU7IHJldHVybiBPUEVORkFJTCB9IHdoaWxlICggMCApCisvKiAtLS0tLS0gRXJyb3IgQ29kZXMgLS0tLS0tICovCiAKLS8qIERlZmluZXMgZm9yIE1QWCBsaW5lIGRpc2NpcGxpbmUgcm91dGluZXMgKi8KKyNkZWZpbmUgRV9OT19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgKCh1c2hvcnQpIDApCiAKLSNkZWZpbmUgRElTVF9MSU5FU1dfT1BFTgkweDAxCi0jZGVmaW5lIERJU1RfTElORVNXX0NMT1NFCTB4MDIKLSNkZWZpbmUgRElTVF9MSU5FU1dfUkVBRAkweDA0Ci0jZGVmaW5lIERJU1RfTElORVNXX1dSSVRFCTB4MDgKLSNkZWZpbmUgRElTVF9MSU5FU1dfSU9DVEwJMHgxMAotI2RlZmluZSBESVNUX0xJTkVTV19JTlBVVAkweDIwCi0jZGVmaW5lIERJU1RfTElORVNXX09VVFBVVAkweDQwCi0jZGVmaW5lIERJU1RfTElORVNXX01ETUlOVAkweDgwCisvKiAtLS0tLS0gRnJlZSBMaXN0cyAtLS0tLS0gKi8KKworc3RydWN0IHJpb19mcmVlX2xpc3QgeworCXUxNiBuZXh0OworCXUxNiBwcmV2OworfTsKKworLyogTlVMTCBmb3IgY2FyZCBzaWRlIGxpbmtlZCBsaXN0cyAqLworI2RlZmluZQlUUE5VTEwJKCh1c2hvcnQpKDB4ODAwMCkpCisvKiBXZSBjYW4gYWRkIGFub3RoZXIgcGFja2V0IHRvIGEgdHJhbnNtaXQgcXVldWUgaWYgdGhlIHBhY2tldCBwb2ludGVyIHBvaW50ZWQKKyAqIHRvIGJ5IHRoZSBUeEFkZCBwb2ludGVyIGhhcyBQS1RfSU5fVVNFIGNsZWFyIGluIGl0cyBhZGRyZXNzLiAqLworI2RlZmluZSBQS1RfSU5fVVNFICAgIDB4MQorCisvKiAtLS0tLS0gVG9wb2xvZ3kgLS0tLS0tICovCisKK3N0cnVjdCBUb3AgeworCXU4IFVuaXQ7CisJdTggTGluazsKK307CiAKICNlbmRpZgkJCQkvKiBfX3Jpb19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCmluZGV4IGM5YWYyODMuLjc4ZGQ4NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYwpAQCAtNTcsMTUgKzU3LDEyIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImxpbnV4X2NvbXBhdC5oIgotI2luY2x1ZGUgInR5cGRlZi5oIgogI2luY2x1ZGUgInBrdC5oIgogI2luY2x1ZGUgImRhZW1vbi5oIgogI2luY2x1ZGUgInJpby5oIgogI2luY2x1ZGUgInJpb3NwYWNlLmgiCi0jaW5jbHVkZSAidG9wLmgiCiAjaW5jbHVkZSAiY21kcGt0LmgiCiAjaW5jbHVkZSAibWFwLmgiCi0jaW5jbHVkZSAicmlvdHlwZXMuaCIKICNpbmNsdWRlICJydXAuaCIKICNpbmNsdWRlICJwb3J0LmgiCiAjaW5jbHVkZSAicmlvZHJ2ci5oIgpAQCAtNzgsMTcgKzc1LDEzIEBACiAjaW5jbHVkZSAidW5peHJ1cC5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImVycm9yLmgiCiAjaW5jbHVkZSAicGhiLmgiCiAjaW5jbHVkZSAibGluay5oIgogI2luY2x1ZGUgImNtZGJsay5oIgogI2luY2x1ZGUgInJvdXRlLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgImNpcnJ1cy5oIgogI2luY2x1ZGUgInJpb2lvY3RsLmgiCiAjaW5jbHVkZSAicGFyYW0uaCIKLSNpbmNsdWRlICJsaXN0LmgiCi0jaW5jbHVkZSAic2FtLmgiCiAjaW5jbHVkZSAicHJvdHN0cy5oIgogI2luY2x1ZGUgInJpb2JvYXJkLmgiCiAKQEAgLTI5Nyw3ICsyOTAsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmFkZHIgPSBhZDsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMTYpIHsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAiJTA4eCAiLCAoaW50KSBhZGRyICsgaSk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QQVJBTSwgIiUwOGx4ICIsICh1bnNpZ25lZCBsb25nKSBhZGRyICsgaSk7CiAJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICIlMDJ4ICVzIiwgYWRkcltqICsgaV0sIChqID09IDcpID8gIiAiIDogIiIpOwogCQl9CkBAIC0zNDAsMzQgKzMzMywxOSBAQAogCXJldHVybiAhUklPX0ZBSUw7CiB9CiAKK3ZvaWQgcmlvX2NvcHlfdG9fY2FyZCh2b2lkICp0bywgdm9pZCAqZnJvbSwgaW50IGxlbikKK3sKKwlyaW9fbWVtY3B5X3RvaW8oTlVMTCwgdG8sIGZyb20sIGxlbik7Cit9CiAKIGludCByaW9fbWlub3Ioc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlyZXR1cm4gdHR5LT5pbmRleCArICh0dHktPmRyaXZlciA9PSByaW9fZHJpdmVyKSA/IDAgOiAyNTY7CiB9CiAKLQotaW50IHJpb19pc21vZGVtKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLQogc3RhdGljIGludCByaW9fc2V0X3JlYWxfdGVybWlvcyh2b2lkICpwdHIpCiB7Ci0JaW50IHJ2LCBtb2RlbTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCWZ1bmNfZW50ZXIoKTsKLQotCXR0eSA9ICgoc3RydWN0IFBvcnQgKikgcHRyKS0+Z3MudHR5OwotCi0JbW9kZW0gPSByaW9faXNtb2RlbSh0dHkpOwotCi0JcnYgPSBSSU9QYXJhbSgoc3RydWN0IFBvcnQgKikgcHRyLCBDT05GSUcsIG1vZGVtLCAxKTsKLQotCWZ1bmNfZXhpdCgpOwotCi0JcmV0dXJuIHJ2OworCXJldHVybiBSSU9QYXJhbSgoc3RydWN0IFBvcnQgKikgcHRyLCBDT05GSUcsIDEsIDEpOwogfQogCiAKQEAgLTM3OSw3ICszNTcsNyBAQAogCWNhc2UgUklPX0FUOgogCWNhc2UgUklPX01DQToKIAljYXNlIFJJT19QQ0k6Ci0JCVdCWVRFKEhvc3RQLT5SZXNldEludCwgMHhmZik7CisJCXdyaXRlYigweEZGLCAmSG9zdFAtPlJlc2V0SW50KTsKIAl9CiAKIAlmdW5jX2V4aXQoKTsKQEAgLTM5Nyw5ICszNzUsNiBAQAogCS8qIEFBYXJnaCEgVGhlIG9yZGVyIGluIHdoaWNoIHRvIGRvIHRoZXNlIHRoaW5ncyBpcyBlc3NlbnRpYWwgYW5kCiAJICAgbm90IHRyaXZpYWwuCiAKLQkgICAtIFJhdGUgbGltaXQgZ29lcyBiZWZvcmUgInJlY3Vyc2l2ZSIuIE90aGVyd2lzZSBhIHNlcmllcyBvZgotCSAgIHJlY3Vyc2l2ZSBjYWxscyB3aWxsIGhhbmcgdGhlIG1hY2hpbmUgaW4gdGhlIGludGVycnVwdCByb3V0aW5lLgotCiAJICAgLSBoYXJkd2FyZSB0d2lkZGxpbmcgZ29lcyBiZWZvcmUgInJlY3Vyc2l2ZSIuIE90aGVyd2lzZSB3aGVuIHdlCiAJICAgcG9sbCB0aGUgY2FyZCwgYW5kIGEgcmVjdXJzaXZlIGludGVycnVwdCBoYXBwZW5zLCB3ZSB3b24ndAogCSAgIGFjayB0aGUgY2FyZCwgc28gaXQgbWlnaHQga2VlcCBvbiBpbnRlcnJ1cHRpbmcgdXMuIChlc3BlY2lhbGx5CkBAIC00MTQsMjYgKzM4OSw2IEBACiAJICAgLSBUaGUgaW5pdGlhbGl6ZWQgdGVzdCBnb2VzIGJlZm9yZSByZWN1cnNpdmUuCiAJICovCiAKLQotCi0jaWZkZWYgSVJRX1JBVEVfTElNSVQKLQkvKiBBYWFyZ2ghIEknbSBhc2hhbWVkLiBUaGlzIGNvc3RzIG1vcmUgbGluZXMtb2YtY29kZSB0aGFuIHRoZQotCSAgIGFjdHVhbCBpbnRlcnJ1cHQgcm91dGluZSEuIChXZWxsLCB1c2VkIHRvIHdoZW4gSSB3cm90ZSB0aGF0IGNvbW1lbnQpICovCi0JewotCQlzdGF0aWMgaW50IGxhc3RqaWY7Ci0JCXN0YXRpYyBpbnQgbmludHIgPSAwOwotCi0JCWlmIChsYXN0amlmID09IGppZmZpZXMpIHsKLQkJCWlmICgrK25pbnRyID4gSVJRX1JBVEVfTElNSVQpIHsKLQkJCQlmcmVlX2lycShIb3N0UC0+SXZlYywgcHRyKTsKLQkJCQlwcmludGsoS0VSTl9FUlIgInJpbzogVG9vIG1hbnkgaW50ZXJydXB0cy4gVHVybmluZyBvZmYgaW50ZXJydXB0ICVkLlxuIiwgSG9zdFAtPkl2ZWMpOwotCQkJfQotCQl9IGVsc2UgewotCQkJbGFzdGppZiA9IGppZmZpZXM7Ci0JCQluaW50ciA9IDA7Ci0JCX0KLQl9Ci0jZW5kaWYKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfSUZMT1csICJyaW86IFdlJ3ZlIGhhdmUgbm90aWNlZCB0aGUgaW50ZXJydXB0XG4iKTsKIAlpZiAoSG9zdFAtPkl2ZWMgPT0gaXJxKSB7CiAJCS8qIFRlbGwgdGhlIGNhcmQgd2UndmUgbm90aWNlZCB0aGUgaW50ZXJydXB0LiAqLwpAQCAtNDQ0LDEzICszOTksMTMgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoUklPX0JPQVJEX0lOVFJfTE9DSywgJkhvc3RQLT5sb2NrcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJSZWN1cnNpdmUgaW50ZXJydXB0ISAoaG9zdCAlZC9pcnElZClcbiIsIChpbnQpIHB0ciwgSG9zdFAtPkl2ZWMpOworCQlwcmludGsoS0VSTl9FUlIgIlJlY3Vyc2l2ZSBpbnRlcnJ1cHQhIChob3N0ICVwL2lycSVkKVxuIiwgcHRyLCBIb3N0UC0+SXZlYyk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKIAlSSU9TZXJ2aWNlSG9zdChwLCBIb3N0UCwgaXJxKTsKIAotCXJpb19kcHJpbnRrKFJJT19ERUJVR19JRkxPVywgInJpb2ludHIoKSBkb2luZyBob3N0ICVkIHR5cGUgJWRcbiIsIChpbnQpIHB0ciwgSG9zdFAtPlR5cGUpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19JRkxPVywgInJpb2ludHIoKSBkb2luZyBob3N0ICVwIHR5cGUgJWRcbiIsIHB0ciwgSG9zdFAtPlR5cGUpOwogCiAJY2xlYXJfYml0KFJJT19CT0FSRF9JTlRSX0xPQ0ssICZIb3N0UC0+bG9ja3MpOwogCXJpb19kcHJpbnRrKFJJT19ERUJVR19JRkxPVywgInJpbzogZXhpdCByaW9faW50ZXJydXB0ICglZC8lZClcbiIsIGlycSwgSG9zdFAtPkl2ZWMpOwpAQCAtODczLDcgKzgyOCw3IEBACiAjZGVmaW5lIEhPU1RfU1ogc2l6ZW9mKHN0cnVjdCBIb3N0KQogI2RlZmluZSBQT1JUX1NaIHNpemVvZihzdHJ1Y3QgUG9ydCAqKQogI2RlZmluZSBUTUlPX1NaIHNpemVvZihzdHJ1Y3QgdGVybWlvcyAqKQotCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTklULCAiZ2V0dGluZyA6ICVkICVkICVkICVkICVkIGJ5dGVzXG4iLCBSSV9TWiwgUklPX0hPU1RTICogSE9TVF9TWiwgUklPX1BPUlRTICogUE9SVF9TWiwgUklPX1BPUlRTICogVE1JT19TWiwgUklPX1BPUlRTICogVE1JT19TWik7CisJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOSVQsICJnZXR0aW5nIDogJVpkICVaZCAlWmQgJVpkICVaZCBieXRlc1xuIiwgUklfU1osIFJJT19IT1NUUyAqIEhPU1RfU1osIFJJT19QT1JUUyAqIFBPUlRfU1osIFJJT19QT1JUUyAqIFRNSU9fU1osIFJJT19QT1JUUyAqIFRNSU9fU1opOwogCiAJaWYgKCEocCA9IGNrbWFsbG9jKFJJX1NaKSkpCiAJCWdvdG8gZnJlZTA7CkBAIC05NjMsMjIgKzkxOCwyMSBAQAogCiBzdGF0aWMgdm9pZCBmaXhfcmlvX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQl1bnNpZ25lZCBpbnQgaHdiYXNlOwotCXVuc2lnbmVkIGxvbmcgcmViYXNlOworCXVuc2lnbmVkIGxvbmcgaHdiYXNlOworCXVuc2lnbmVkIGNoYXIgKnJlYmFzZTsKIAl1bnNpZ25lZCBpbnQgdDsKIAogI2RlZmluZSBDTlRSTF9SRUdfT0ZGU0VUICAgICAgICAweDUwCiAjZGVmaW5lIENOVFJMX1JFR19HT09EVkFMVUUgICAgIDB4MTgyNjAwMDAKIAotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsICZod2Jhc2UpOwotCWh3YmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwotCXJlYmFzZSA9ICh1bG9uZykgaW9yZW1hcChod2Jhc2UsIDB4ODApOworCWh3YmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlyZWJhc2UgPSBpb3JlbWFwKGh3YmFzZSwgMHg4MCk7CiAJdCA9IHJlYWRsKHJlYmFzZSArIENOVFJMX1JFR19PRkZTRVQpOwogCWlmICh0ICE9IENOVFJMX1JFR19HT09EVkFMVUUpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInJpbzogcGVyZm9ybWluZyBjbnRybCByZWcgZml4OiAlMDh4IC0+ICUwOHhcbiIsIHQsIENOVFJMX1JFR19HT09EVkFMVUUpOwogCQl3cml0ZWwoQ05UUkxfUkVHX0dPT0RWQUxVRSwgcmViYXNlICsgQ05UUkxfUkVHX09GRlNFVCk7CiAJfQotCWlvdW5tYXAoKGNoYXIgKikgcmViYXNlKTsKKwlpb3VubWFwKHJlYmFzZSk7CiB9CiAjZW5kaWYKIApAQCAtOTk0LDcgKzk0OCw2IEBACiAKICNpZmRlZiBDT05GSUdfUENJCiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwotCXVuc2lnbmVkIGludCB0aW50OwogCXVuc2lnbmVkIHNob3J0IHRzaG9ydDsKICNlbmRpZgogCkBAIC0xMDE5LDYgKzk3Miw4IEBACiAjaWZkZWYgQ09ORklHX1BDSQogCS8qIEZpcnN0IGxvb2sgZm9yIHRoZSBKRVQgZGV2aWNlczogKi8KIAl3aGlsZSAoKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NQRUNJQUxJWCwgUENJX0RFVklDRV9JRF9TUEVDSUFMSVhfU1hfWElPX0lPOCwgcGRldikpKSB7CisJCXUzMiB0aW50OworCiAJCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xMDI5LDcgKzk4NCw2IEBACiAJCSAgIEFsc28sIHJlYWRpbmcgYSBub24tYWxpZ25lZCBkd29yZCBkb2Vzbid0IHdvcmsuIFNvIHdlIHJlYWQgdGhlCiAJCSAgIHdob2xlIGR3b3JkIGF0IDB4MmMgYW5kIGV4dHJhY3QgdGhlIHdvcmQgYXQgMHgyZSAoU1VCU1lTVEVNX0lEKQogCQkgICBvdXJzZWx2ZXMgKi8KLQkJLyogSSBkb24ndCBrbm93IHdoeSB0aGUgZGVmaW5lIGRvZXNuJ3Qgd29yaywgY29uc3RhbnQgMHgyYyBkb2VzIC0tUkVXICovCiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDJjLCAmdGludCk7CiAJCXRzaG9ydCA9ICh0aW50ID4+IDE2KSAmIDB4ZmZmZjsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BST0JFLCAiR290IGEgc3BlY2lhbGl4IGNhcmQ6ICV4LlxuIiwgdGludCk7CkBAIC0xMDM5LDMzICs5OTMsMzEgQEAKIAkJfQogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUFJPQkUsICJjcDFcbiIpOwogCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzIsICZ0aW50KTsKLQogCQlocCA9ICZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c107Ci0JCWhwLT5QYWRkclAgPSB0aW50ICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKKwkJaHAtPlBhZGRyUCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKTsKIAkJaHAtPkl2ZWMgPSBwZGV2LT5pcnE7CiAJCWlmICgoKDEgPDwgaHAtPkl2ZWMpICYgcmlvX2lycW1hc2spID09IDApCiAJCQlocC0+SXZlYyA9IDA7CiAJCWhwLT5DYWRkciA9IGlvcmVtYXAocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlBhZGRyUCwgUklPX1dJTkRPV19MRU4pOwogCQlocC0+Q2FyZFAgPSAoc3RydWN0IERwUmFtICopIGhwLT5DYWRkcjsKIAkJaHAtPlR5cGUgPSBSSU9fUENJOwotCQlocC0+Q29weSA9IHJpb19wY2ljb3B5OworCQlocC0+Q29weSA9IHJpb19jb3B5X3RvX2NhcmQ7CiAJCWhwLT5Nb2RlID0gUklPX1BDSV9CT09UX0ZST01fUkFNOwogCQlzcGluX2xvY2tfaW5pdCgmaHAtPkhvc3RMb2NrKTsKIAkJcmlvX3Jlc2V0X2ludGVycnVwdChocCk7CiAJCXJpb19zdGFydF9jYXJkX3J1bm5pbmcoaHApOwogCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QUk9CRSwgIkdvaW5nIHRvIHRlc3QgaXQgKCVwLyVwKS5cbiIsICh2b2lkICopIHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5QYWRkclAsIHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYWRkcik7Ci0JCWlmIChSSU9Cb2FyZFRlc3QocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlBhZGRyUCwgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNhZGRyLCBSSU9fUENJLCAwKSA9PSBSSU9fU1VDQ0VTUykgeworCQlpZiAoUklPQm9hcmRUZXN0KHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5QYWRkclAsIHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYWRkciwgUklPX1BDSSwgMCkgPT0gMCkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOSVQsICJEb25lIFJJT0JvYXJkVGVzdFxuIik7Ci0JCQlXQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUmVzZXRJbnQsIDB4ZmYpOworCQkJd3JpdGViKDB4RkYsICZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUmVzZXRJbnQpOwogCQkJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSA9Ci0JCQkgICAgKChSQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzBdKSAmIDB4RkYpIDw8IDApIHwKLQkJCSAgICAoKFJCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5VbmlxdWVbMV0pICYgMHhGRikgPDwgOCkgfCAoKFJCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5VbmlxdWVbMl0pICYgMHhGRikgPDwgMTYpIHwgKChSQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzNdKSAmIDB4RkYpIDw8IDI0KTsKKwkJCSAgICAoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzBdKSAmIDB4RkYpIDw8IDApIHwKKwkJCSAgICAoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzFdKSAmIDB4RkYpIDw8IDgpIHwgKChyZWFkYigmcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZVsyXSkgJiAweEZGKSA8PCAxNikgfCAoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzNdKSAmIDB4RkYpIDw8IDI0KTsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QUk9CRSwgIkhtbSBUZXN0ZWQgb2ssIHVuaXFpZCA9ICV4LlxuIiwgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSk7CiAKIAkJCWZpeF9yaW9fcGNpKHBkZXYpOwotCQkJcC0+UklPTGFzdFBDSVNlYXJjaCA9IFJJT19TVUNDRVNTOworCQkJcC0+UklPTGFzdFBDSVNlYXJjaCA9IDA7CiAJCQlwLT5SSU9OdW1Ib3N0cysrOwogCQkJZm91bmQrKzsKIAkJfSBlbHNlIHsKQEAgLTEwODgsMTAgKzEwNDAsOCBAQAogCQkJY29udGludWU7CiAKICNpZmRlZiBDT05GSUdfUklPX09MRFBDSQotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0JBU0VfQUREUkVTU18wLCAmdGludCk7Ci0KIAkJaHAgPSAmcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdOwotCQlocC0+UGFkZHJQID0gdGludCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7CisJCWhwLT5QYWRkclAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJCWhwLT5JdmVjID0gcGRldi0+aXJxOwogCQlpZiAoKCgxIDw8IGhwLT5JdmVjKSAmIHJpb19pcnFtYXNrKSA9PSAwKQogCQkJaHAtPkl2ZWMgPSAwOwpAQCAtMTA5OSw3ICsxMDQ5LDcgQEAKIAkJaHAtPkNhZGRyID0gaW9yZW1hcChwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUGFkZHJQLCBSSU9fV0lORE9XX0xFTik7CiAJCWhwLT5DYXJkUCA9IChzdHJ1Y3QgRHBSYW0gKikgaHAtPkNhZGRyOwogCQlocC0+VHlwZSA9IFJJT19QQ0k7Ci0JCWhwLT5Db3B5ID0gcmlvX3BjaWNvcHk7CisJCWhwLT5Db3B5ID0gcmlvX2NvcHlfdG9fY2FyZDsKIAkJaHAtPk1vZGUgPSBSSU9fUENJX0JPT1RfRlJPTV9SQU07CiAJCXNwaW5fbG9ja19pbml0KCZocC0+SG9zdExvY2spOwogCkBAIC0xMTA5LDE0ICsxMDU5LDE0IEBACiAJCXJpb19yZXNldF9pbnRlcnJ1cHQoaHApOwogCQlyaW9fc3RhcnRfY2FyZF9ydW5uaW5nKGhwKTsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BST0JFLCAiR29pbmcgdG8gdGVzdCBpdCAoJXAvJXApLlxuIiwgKHZvaWQgKikgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlBhZGRyUCwgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNhZGRyKTsKLQkJaWYgKFJJT0JvYXJkVGVzdChwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUGFkZHJQLCBwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ2FkZHIsIFJJT19QQ0ksIDApID09IFJJT19TVUNDRVNTKSB7Ci0JCQlXQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUmVzZXRJbnQsIDB4ZmYpOworCQlpZiAoUklPQm9hcmRUZXN0KHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5QYWRkclAsIHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYWRkciwgUklPX1BDSSwgMCkgPT0gMCkgeworCQkJd3JpdGViKDB4RkYsICZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUmVzZXRJbnQpOwogCQkJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSA9Ci0JCQkgICAgKChSQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzBdKSAmIDB4RkYpIDw8IDApIHwKLQkJCSAgICAoKFJCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5VbmlxdWVbMV0pICYgMHhGRikgPDwgOCkgfCAoKFJCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5VbmlxdWVbMl0pICYgMHhGRikgPDwgMTYpIHwgKChSQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzNdKSAmIDB4RkYpIDw8IDI0KTsKKwkJCSAgICAoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzBdKSAmIDB4RkYpIDw8IDApIHwKKwkJCSAgICAoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzFdKSAmIDB4RkYpIDw8IDgpIHwgKChyZWFkYigmcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZVsyXSkgJiAweEZGKSA8PCAxNikgfCAoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzNdKSAmIDB4RkYpIDw8IDI0KTsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QUk9CRSwgIkhtbSBUZXN0ZWQgb2ssIHVuaXFpZCA9ICV4LlxuIiwgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSk7CiAKLQkJCXAtPlJJT0xhc3RQQ0lTZWFyY2ggPSBSSU9fU1VDQ0VTUzsKKwkJCXAtPlJJT0xhc3RQQ0lTZWFyY2ggPSAwOwogCQkJcC0+UklPTnVtSG9zdHMrKzsKIAkJCWZvdW5kKys7CiAJCX0gZWxzZSB7CkBAIC0xMTM3LDggKzEwODcsOCBAQAogCQlocC0+Q2FkZHIgPSBpb3JlbWFwKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5QYWRkclAsIFJJT19XSU5ET1dfTEVOKTsKIAkJaHAtPkNhcmRQID0gKHN0cnVjdCBEcFJhbSAqKSBocC0+Q2FkZHI7CiAJCWhwLT5UeXBlID0gUklPX0FUOwotCQlocC0+Q29weSA9IHJpb19wY2ljb3B5OwkvKiBBVCBjYXJkIFBDST8/Pz8gLSBQVkRMCi0JCQkJCSAqIC0tIFlFUyEgdGhpcyBpcyBub3cgYSBub3JtYWwgY29weS4gT25seSB0aGUKKwkJaHAtPkNvcHkgPSByaW9fY29weV90b19jYXJkOwkvKiBBVCBjYXJkIFBDST8/Pz8gLSBQVkRMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0gWUVTISB0aGlzIGlzIG5vdyBhIG5vcm1hbCBjb3B5LiBPbmx5IHRoZQogCQkJCQkgKiBvbGQgUENJIGNhcmQgdXNlcyB0aGUgc3BlY2lhbCBQQ0kgY29weS4KIAkJCQkJICogTW9yZW92ZXIsIHRoZSBJU0EgY2FyZCB3aWxsIHdvcmsgd2l0aCB0aGUKIAkJCQkJICogc3BlY2lhbCBQQ0kgY29weSBhbnl3YXkuIC0tIFJFVyAqLwpAQCAtMTE1MCw3ICsxMTAwLDcgQEAKIAkJb2tib2FyZCA9IDA7CiAJCWlmICgoc3RybmNtcCh2cGRwLT5pZGVudGlmaWVyLCBSSU9fSVNBX0lERU5ULCAxNikgPT0gMCkgfHwgKHN0cm5jbXAodnBkcC0+aWRlbnRpZmllciwgUklPX0lTQTJfSURFTlQsIDE2KSA9PSAwKSB8fCAoc3RybmNtcCh2cGRwLT5pZGVudGlmaWVyLCBSSU9fSVNBM19JREVOVCwgMTYpID09IDApKSB7CiAJCQkvKiBCb2FyZCBpcyBwcmVzZW50Li4uICovCi0JCQlpZiAoUklPQm9hcmRUZXN0KGhwLT5QYWRkclAsIGhwLT5DYWRkciwgUklPX0FULCAwKSA9PSBSSU9fU1VDQ0VTUykgeworCQkJaWYgKFJJT0JvYXJkVGVzdChocC0+UGFkZHJQLCBocC0+Q2FkZHIsIFJJT19BVCwgMCkgPT0gMCkgewogCQkJCS8qIC4uLiBhbmQgZmVlbGluZyBmaW5lISEhISAqLwogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QUk9CRSwgIkhtbSBUZXN0ZWQgb2ssIHVuaXFpZCA9ICV4LlxuIiwgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSk7CiAJCQkJaWYgKFJJT0Fzc2lnbkFUKHAsIGhwLT5QYWRkclAsIGhwLT5DYWRkciwgMCkpIHsKQEAgLTEyNTIsMjQgKzEyMDIsMyBAQAogCiBtb2R1bGVfaW5pdChyaW9faW5pdCk7CiBtb2R1bGVfZXhpdChyaW9fZXhpdCk7Ci0KLS8qCi0gKiBBbnlib2R5IHdobyBrbm93cyB3aHkgdGhpcyBkb2Vzbid0IHdvcmsgZm9yIG1lLCBwbGVhc2UgdGVsbCBtZSAtLSBSRVcuCi0gKiBTbmF0Y2hlZCBmcm9tIHNjc2kuYyAoZml4ZWQgb25lIHNwZWxsaW5nIGVycm9yKToKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMnIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCBWYXJpYWJsZXM6Ci0gKiBjLWluZGVudC1sZXZlbDogNAotICogYy1icmFjZS1pbWFnaW5hcnktb2Zmc2V0OiAwCi0gKiBjLWJyYWNlLW9mZnNldDogLTQKLSAqIGMtYXJnZGVjbC1pbmRlbnQ6IDQKLSAqIGMtbGFiZWwtb2Zmc2V0OiAtNAotICogYy1jb250aW51ZWQtc3RhdGVtZW50LW9mZnNldDogNAotICogYy1jb250aW51ZWQtYnJhY2Utb2Zmc2V0OiAwCi0gKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKLSAqIHRhYi13aWR0aDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCmluZGV4IDkyZGY0MzUuLmFjZGE5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCkBAIC0zMCwzOCArMzAsMjkgQEAKICoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwogCi0jaWZkZWYgU0NDU19MQUJFTFMKLXN0YXRpYyBjaGFyICpfcmlvYm9vdF9jX3NjY3NfID0gIkAoIylyaW9ib290LmMJMS4zIjsKLSNlbmRpZgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuZXJpY19zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0KLQotI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfc2VyaWFsLmg+Ci0KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAKICNpbmNsdWRlICJsaW51eF9jb21wYXQuaCIKICNpbmNsdWRlICJyaW9fbGludXguaCIKLSNpbmNsdWRlICJ0eXBkZWYuaCIKICNpbmNsdWRlICJwa3QuaCIKICNpbmNsdWRlICJkYWVtb24uaCIKICNpbmNsdWRlICJyaW8uaCIKICNpbmNsdWRlICJyaW9zcGFjZS5oIgotI2luY2x1ZGUgInRvcC5oIgogI2luY2x1ZGUgImNtZHBrdC5oIgogI2luY2x1ZGUgIm1hcC5oIgotI2luY2x1ZGUgInJpb3R5cGVzLmgiCiAjaW5jbHVkZSAicnVwLmgiCiAjaW5jbHVkZSAicG9ydC5oIgogI2luY2x1ZGUgInJpb2RydnIuaCIKQEAgLTc0LDE2MSArNjUsMTMwIEBACiAjaW5jbHVkZSAidW5peHJ1cC5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImVycm9yLmgiCiAjaW5jbHVkZSAicGhiLmgiCiAjaW5jbHVkZSAibGluay5oIgogI2luY2x1ZGUgImNtZGJsay5oIgogI2luY2x1ZGUgInJvdXRlLmgiCiAKLXN0YXRpYyBpbnQgUklPQm9vdENvbXBsZXRlKCBzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgdWludCBSdXAsIHN0cnVjdCBQa3RDbWQgKlBrdENtZFAgKTsKK3N0YXRpYyBpbnQgUklPQm9vdENvbXBsZXRlKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IEhvc3QgKkhvc3RQLCB1bnNpZ25lZCBpbnQgUnVwLCBzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQKTsKIAotc3RhdGljIHVjaGFyCi1SSU9BdFZlYzJDdHJsW10gPQotewotCS8qIDAgKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDEgKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDIgKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDMgKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDQgKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDUgKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDYgKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDcgKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDggKi8gIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDkgKi8gIElSUV85fElOVEVSUlVQVF9FTkFCTEUsCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBSSU9BdFZlYzJDdHJsW10gPSB7CisJLyogMCAqLyBJTlRFUlJVUFRfRElTQUJMRSwKKwkvKiAxICovIElOVEVSUlVQVF9ESVNBQkxFLAorCS8qIDIgKi8gSU5URVJSVVBUX0RJU0FCTEUsCisJLyogMyAqLyBJTlRFUlJVUFRfRElTQUJMRSwKKwkvKiA0ICovIElOVEVSUlVQVF9ESVNBQkxFLAorCS8qIDUgKi8gSU5URVJSVVBUX0RJU0FCTEUsCisJLyogNiAqLyBJTlRFUlJVUFRfRElTQUJMRSwKKwkvKiA3ICovIElOVEVSUlVQVF9ESVNBQkxFLAorCS8qIDggKi8gSU5URVJSVVBUX0RJU0FCTEUsCisJLyogOSAqLyBJUlFfOSB8IElOVEVSUlVQVF9FTkFCTEUsCiAJLyogMTAgKi8gSU5URVJSVVBUX0RJU0FCTEUsCi0JLyogMTEgKi8gSVJRXzExfElOVEVSUlVQVF9FTkFCTEUsCi0JLyogMTIgKi8gSVJRXzEyfElOVEVSUlVQVF9FTkFCTEUsCisJLyogMTEgKi8gSVJRXzExIHwgSU5URVJSVVBUX0VOQUJMRSwKKwkvKiAxMiAqLyBJUlFfMTIgfCBJTlRFUlJVUFRfRU5BQkxFLAogCS8qIDEzICovIElOVEVSUlVQVF9ESVNBQkxFLAogCS8qIDE0ICovIElOVEVSUlVQVF9ESVNBQkxFLAotCS8qIDE1ICovIElSUV8xNXxJTlRFUlJVUFRfRU5BQkxFCisJLyogMTUgKi8gSVJRXzE1IHwgSU5URVJSVVBUX0VOQUJMRQogfTsKIAotLyoKLSoqIExvYWQgaW4gdGhlIFJUQSBib290IGNvZGUuCi0qLwotaW50Ci1SSU9Cb290Q29kZVJUQShwLCByYnApCi1zdHJ1Y3QgcmlvX2luZm8gKglwOwotc3RydWN0IERvd25Mb2FkICoJcmJwOyAKKy8qKgorICoJUklPQm9vdENvZGVSVEEJCS0JTG9hZCBSVEEgYm9vdCBjb2RlCisgKglAcDogUklPIHRvIGxvYWQKKyAqCUByYnA6IERvd25sb2FkIGRlc2NyaXB0b3IKKyAqCisgKglDYWxsZWQgd2hlbiB0aGUgdXNlciBwcm9jZXNzIGluaXRpYXRlcyBib290aW5nIG9mIHRoZSBjYXJkIGZpcm13YXJlLgorICoJTGFkcyB0aGUgZmlybXdhcmUKKyAqLworCitpbnQgUklPQm9vdENvZGVSVEEoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgRG93bkxvYWQgKiByYnApCiB7CiAJaW50IG9mZnNldDsKIAotCWZ1bmNfZW50ZXIgKCk7CisJZnVuY19lbnRlcigpOwogCi0JLyogTGludXggZG9lc24ndCBhbGxvdyB5b3UgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGR1cmluZyBhCi0JICAgImNvcHlpbiIuIChDcmFzaCB3aGVuIGEgcGFnZWZhdWx0IG9jY3VycykuICovCi0JLyogZGlzYWJsZShvbGRzcGwpOyAqLwotCQotCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIkRhdGEgYXQgdXNlciBhZGRyZXNzIDB4JXhcbiIsKGludClyYnAtPkRhdGFQKTsKKwlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIkRhdGEgYXQgdXNlciBhZGRyZXNzICVwXG4iLCByYnAtPkRhdGFQKTsKIAogCS8qCi0JKiogQ2hlY2sgdGhhdCB3ZSBoYXZlIHNldCBhc3NpZGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhpcwotCSovCi0JaWYgKCByYnAtPkNvdW50ID4gU0lYVFlfRk9VUl9LICkgewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJSVEEgQm9vdCBDb2RlIFRvbyBMYXJnZSFcbiIpOworCSAqKiBDaGVjayB0aGF0IHdlIGhhdmUgc2V0IGFzc2lkZSBlbm91Z2ggbWVtb3J5IGZvciB0aGlzCisJICovCisJaWYgKHJicC0+Q291bnQgPiBTSVhUWV9GT1VSX0spIHsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJSVEEgQm9vdCBDb2RlIFRvbyBMYXJnZSFcbiIpOwogCQlwLT5SSU9FcnJvci5FcnJvciA9IEhPU1RfRklMRV9UT09fTEFSR0U7Ci0JCS8qIHJlc3RvcmUob2xkc3BsKTsgKi8KLQkJZnVuY19leGl0ICgpOworCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKCBwLT5SSU9Cb290aW5nICkgewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJSVEEgQm9vdCBDb2RlIDogQlVTWSBCVVNZIEJVU1khXG4iKTsKKwlpZiAocC0+UklPQm9vdGluZykgeworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlJUQSBCb290IENvZGUgOiBCVVNZIEJVU1kgQlVTWSFcbiIpOwogCQlwLT5SSU9FcnJvci5FcnJvciA9IEJPT1RfSU5fUFJPR1JFU1M7Ci0JCS8qIHJlc3RvcmUob2xkc3BsKTsgKi8KLQkJZnVuY19leGl0ICgpOworCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAkvKgotCSoqIFRoZSBkYXRhIHdlIGxvYWQgaW4gbXVzdCBlbmQgb24gYSAoUlRBX0JPT1RfREFUQV9TSVpFKSBieXRlIGJvdW5kYXJ5LAotCSoqIHNvIGNhbGN1bGF0ZSBob3cgZmFyIHdlIGhhdmUgdG8gbW92ZSB0aGUgZGF0YSB1cCB0aGUgYnVmZmVyCi0JKiogdG8gYWNoaWV2ZSB0aGlzLgotCSovCi0Jb2Zmc2V0ID0gKFJUQV9CT09UX0RBVEFfU0laRSAtIChyYnAtPkNvdW50ICUgUlRBX0JPT1RfREFUQV9TSVpFKSkgJSAKLQkJCQkJCQlSVEFfQk9PVF9EQVRBX1NJWkU7CisJICoqIFRoZSBkYXRhIHdlIGxvYWQgaW4gbXVzdCBlbmQgb24gYSAoUlRBX0JPT1RfREFUQV9TSVpFKSBieXRlIGJvdW5kYXJ5LAorCSAqKiBzbyBjYWxjdWxhdGUgaG93IGZhciB3ZSBoYXZlIHRvIG1vdmUgdGhlIGRhdGEgdXAgdGhlIGJ1ZmZlcgorCSAqKiB0byBhY2hpZXZlIHRoaXMuCisJICovCisJb2Zmc2V0ID0gKFJUQV9CT09UX0RBVEFfU0laRSAtIChyYnAtPkNvdW50ICUgUlRBX0JPT1RfREFUQV9TSVpFKSkgJSBSVEFfQk9PVF9EQVRBX1NJWkU7CiAKIAkvKgotCSoqIEJlIGNsZWFuLCBhbmQgY2xlYXIgdGhlICd1bnVzZWQnIHBvcnRpb24gb2YgdGhlIGJvb3QgYnVmZmVyLAotCSoqIGJlY2F1c2UgaXQgd2lsbCAoZXZlbnR1YWxseSkgYmUgcGFydCBvZiB0aGUgUnRhIHJ1biB0aW1lIGVudmlyb25tZW50Ci0JKiogYW5kIHNvIHNob3VsZCBiZSB6ZXJvZWQuCi0JKi8KLQliemVybyggKGNhZGRyX3QpcC0+UklPQm9vdFBhY2tldHMsIG9mZnNldCApOworCSAqKiBCZSBjbGVhbiwgYW5kIGNsZWFyIHRoZSAndW51c2VkJyBwb3J0aW9uIG9mIHRoZSBib290IGJ1ZmZlciwKKwkgKiogYmVjYXVzZSBpdCB3aWxsIChldmVudHVhbGx5KSBiZSBwYXJ0IG9mIHRoZSBSdGEgcnVuIHRpbWUgZW52aXJvbm1lbnQKKwkgKiogYW5kIHNvIHNob3VsZCBiZSB6ZXJvZWQuCisJICovCisJbWVtc2V0KHAtPlJJT0Jvb3RQYWNrZXRzLCAwLCBvZmZzZXQpOwogCiAJLyoKLQkqKiBDb3B5IHRoZSBkYXRhIGZyb20gdXNlciBzcGFjZS4KLQkqLworCSAqKiBDb3B5IHRoZSBkYXRhIGZyb20gdXNlciBzcGFjZSBpbnRvIHRoZSBhcnJheQorCSAqLwogCi0JaWYgKCBjb3B5aW4oKGludClyYnAtPkRhdGFQLCgoY2FkZHJfdCkocC0+UklPQm9vdFBhY2tldHMpKStvZmZzZXQsCi0JCQkJcmJwLT5Db3VudCkgPT1DT1BZRkFJTCApIHsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiQmFkIGRhdGEgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOworCWlmIChjb3B5X2Zyb21fdXNlcigoKHU4ICopcC0+UklPQm9vdFBhY2tldHMpICsgb2Zmc2V0LCByYnAtPkRhdGFQLCByYnAtPkNvdW50KSkgeworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIkJhZCBkYXRhIGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKIAkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwotCQkvKiByZXN0b3JlKG9sZHNwbCk7ICovCi0JCWZ1bmNfZXhpdCAoKTsKKwkJZnVuY19leGl0KCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCS8qCi0JKiogTWFrZSBzdXJlIHRoYXQgb3VyIGNvcHkgb2YgdGhlIHNpemUgaW5jbHVkZXMgdGhhdCBvZmZzZXQgd2UgZGlzY3Vzc2VkCi0JKiogZWFybGllci4KLQkqLwotCXAtPlJJT051bUJvb3RQa3RzID0gKHJicC0+Q291bnQrb2Zmc2V0KS9SVEFfQk9PVF9EQVRBX1NJWkU7Ci0JcC0+UklPQm9vdENvdW50ICAgPSByYnAtPkNvdW50OworCSAqKiBNYWtlIHN1cmUgdGhhdCBvdXIgY29weSBvZiB0aGUgc2l6ZSBpbmNsdWRlcyB0aGF0IG9mZnNldCB3ZSBkaXNjdXNzZWQKKwkgKiogZWFybGllci4KKwkgKi8KKwlwLT5SSU9OdW1Cb290UGt0cyA9IChyYnAtPkNvdW50ICsgb2Zmc2V0KSAvIFJUQV9CT09UX0RBVEFfU0laRTsKKwlwLT5SSU9Cb290Q291bnQgPSByYnAtPkNvdW50OwogCi0JLyogcmVzdG9yZShvbGRzcGwpOyAqLwogCWZ1bmNfZXhpdCgpOwogCXJldHVybiAwOwogfQogCi12b2lkIHJpb19zdGFydF9jYXJkX3J1bm5pbmcgKHN0cnVjdCBIb3N0ICogSG9zdFApCisvKioKKyAqCXJpb19zdGFydF9jYXJkX3J1bm5pbmcJCS0JaG9zdCBjYXJkIHN0YXJ0CisgKglASG9zdFA6IFRoZSBSSU8gdG8ga2ljayBvZmYKKyAqCisgKglTdGFydCBhIFJJTyBwcm9jZXNzb3IgdW5pdCBydW5uaW5nLiBFbmNhcHN1bGF0ZXMgdGhlIGtub3dsZWRnZQorICoJb2YgdGhlIGNhcmQgdHlwZS4KKyAqLworCit2b2lkIHJpb19zdGFydF9jYXJkX3J1bm5pbmcoc3RydWN0IEhvc3QgKkhvc3RQKQogewotCWZ1bmNfZW50ZXIgKCk7Ci0KLQlzd2l0Y2ggKCBIb3N0UC0+VHlwZSApIHsKKwlzd2l0Y2ggKEhvc3RQLT5UeXBlKSB7CiAJY2FzZSBSSU9fQVQ6Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlN0YXJ0IElTQSBjYXJkIHJ1bm5pbmdcbiIpOwotCQlXQllURShIb3N0UC0+Q29udHJvbCwgCi0JCSAgICAgIEJPT1RfRlJPTV9SQU0gfCBFWFRFUk5BTF9CVVNfT04KLQkJICAgICAgfCBIb3N0UC0+TW9kZQotCQkgICAgICB8IFJJT0F0VmVjMkN0cmxbSG9zdFAtPkl2ZWMgJiAweEZdICk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiU3RhcnQgSVNBIGNhcmQgcnVubmluZ1xuIik7CisJCXdyaXRlYihCT09UX0ZST01fUkFNIHwgRVhURVJOQUxfQlVTX09OIHwgSG9zdFAtPk1vZGUgfCBSSU9BdFZlYzJDdHJsW0hvc3RQLT5JdmVjICYgMHhGXSwgJkhvc3RQLT5Db250cm9sKTsKIAkJYnJlYWs7Ci0JCQotI2lmZGVmIEZVVFVSRV9SRUxFQVNFCi0JY2FzZSBSSU9fTUNBOgotCQkJCS8qCi0JCQkJKiogTUNBIGhhbmRsZXMgSVJRIHZlY3RvcnMgZGlmZmVyZW50bHksIHNvIHdlIGRvbid0IHdyaXRlIAotCQkJCSoqIHRoZW0gdG8gdGhpcyByZWdpc3Rlci4KLQkJCQkqLwotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJTdGFydCBNQ0EgY2FyZCBydW5uaW5nXG4iKTsKLQkJV0JZVEUoSG9zdFAtPkNvbnRyb2wsIE1jYVRwQm9vdEZyb21SYW0gfCBNY2FUcEJ1c0VuYWJsZSB8IEhvc3RQLT5Nb2RlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFJJT19FSVNBOgotCQkJCS8qCi0JCQkJKiogRUlTQSBpcyB0b3RhbGx5IGRpZmZlcmVudCBhbmQgZXhwZWN0cyBPVVRCWnMgdG8gdHVybiBpdCBvbi4KLQkJCQkqLwotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJTdGFydCBFSVNBIGNhcmQgcnVubmluZ1xuIik7Ci0JCU9VVEJaKCBIb3N0UC0+U2xvdCwgRUlTQV9DT05UUk9MX1BPUlQsIEhvc3RQLT5Nb2RlIHwgUklPRWlzYVZlYzJDdHJsW0hvc3RQLT5JdmVjXSB8IEVJU0FfVFBfUlVOIHwgRUlTQV9UUF9CVVNfRU5BQkxFIHwgRUlTQV9UUF9CT09UX0ZST01fUkFNICk7Ci0JCWJyZWFrOwotI2VuZGlmCi0KIAljYXNlIFJJT19QQ0k6Ci0JCQkJLyoKLQkJCQkqKiBQQ0kgaXMgbXVjaCB0aGUgc2FtZSBhcyBNQ0EuIEV2ZXJ5dGhpbmcgaXMgb25jZSBhZ2FpbiBtZW1vcnkKLQkJCQkqKiBtYXBwZWQsIHNvIHdlIGFyZSB3cml0aW5nIHRvIG1lbW9yeSByZWdpc3RlcnMgaW5zdGVhZCBvZiBpbwotCQkJCSoqIHBvcnRzLgotCQkJCSovCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlN0YXJ0IFBDSSBjYXJkIHJ1bm5pbmdcbiIpOwotCQlXQllURShIb3N0UC0+Q29udHJvbCwgUENJVHBCb290RnJvbVJhbSB8IFBDSVRwQnVzRW5hYmxlIHwgSG9zdFAtPk1vZGUpOworCQkvKgorCQkgKiogUENJIGlzIG11Y2ggdGhlIHNhbWUgYXMgTUNBLiBFdmVyeXRoaW5nIGlzIG9uY2UgYWdhaW4gbWVtb3J5CisJCSAqKiBtYXBwZWQsIHNvIHdlIGFyZSB3cml0aW5nIHRvIG1lbW9yeSByZWdpc3RlcnMgaW5zdGVhZCBvZiBpbworCQkgKiogcG9ydHMuCisJCSAqLworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlN0YXJ0IFBDSSBjYXJkIHJ1bm5pbmdcbiIpOworCQl3cml0ZWIoUENJVHBCb290RnJvbVJhbSB8IFBDSVRwQnVzRW5hYmxlIHwgSG9zdFAtPk1vZGUsICZIb3N0UC0+Q29udHJvbCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlVua25vd24gaG9zdCB0eXBlICVkXG4iLCBIb3N0UC0+VHlwZSk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiVW5rbm93biBob3N0IHR5cGUgJWRcbiIsIEhvc3RQLT5UeXBlKTsKIAkJYnJlYWs7CiAJfQotLyogCi0JcHJpbnRrIChLRVJOX0lORk8gIkRvbmUgd2l0aCBzdGFydGluZyB0aGUgY2FyZFxuIik7Ci0JZnVuY19leGl0ICgpOwotKi8KIAlyZXR1cm47CiB9CiAKQEAgLTIzOSwzNzAgKzE5OSwzNTAgQEAKICoqIFB1dCB5b3VyIHJ1YmJlciBwYW50cyBvbiBiZWZvcmUgbWVzc2luZyB3aXRoIHRoaXMgY29kZSAtIGV2ZW4gdGhlIG1hZ2ljCiAqKiBudW1iZXJzIGhhdmUgdHJvdWJsZSB1bmRlcnN0YW5kaW5nIHdoYXQgdGhleSBhcmUgZG9pbmcgaGVyZS4KICovCi1pbnQKLVJJT0Jvb3RDb2RlSE9TVChwLCByYnApCi1zdHJ1Y3QgcmlvX2luZm8gKglwOwotcmVnaXN0ZXIgc3RydWN0IERvd25Mb2FkICpyYnA7CisKK2ludCBSSU9Cb290Q29kZUhPU1Qoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgRG93bkxvYWQgKnJicCkKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgSG9zdCAqSG9zdFA7Ci0JcmVnaXN0ZXIgY2FkZHJfdCBDYWQ7Ci0JcmVnaXN0ZXIgUEFSTV9NQVAgKlBhcm1NYXBQOwotCXJlZ2lzdGVyIGludCBSdXBOOworCXN0cnVjdCBIb3N0ICpIb3N0UDsKKwl1OCAqQ2FkOworCVBBUk1fTUFQICpQYXJtTWFwUDsKKwlpbnQgUnVwTjsKIAlpbnQgUG9ydE47Ci0JdWludCBob3N0OwotCWNhZGRyX3QgU3RhcnRQOwotCUJZVEUgKkRlc3RQOworCXVuc2lnbmVkIGludCBob3N0OworCXU4ICpTdGFydFA7CisJdTggKkRlc3RQOwogCWludCB3YWl0X2NvdW50OwotCXVzaG9ydCBPbGRQYXJtTWFwOwotCXVzaG9ydCBvZmZzZXQ7CS8qIEl0IGlzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhIHVzaG9ydCAqLwotCS8qIHVpbnQgYnl0ZTsgKi8KLQljYWRkcl90IERvd25Db2RlID0gTlVMTDsKKwl1MTYgT2xkUGFybU1hcDsKKwl1MTYgb2Zmc2V0OwkJLyogSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGlzIGlzIGEgdTE2ICovCisJdTggKkRvd25Db2RlID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JSG9zdFAgPSBOVUxMOyAvKiBBc3N1cmUgdGhlIGNvbXBpbGVyIHdlJ3ZlIGluaXRpYWxpemVkIGl0ICovCi0JZm9yICggaG9zdD0wOyBob3N0PHAtPlJJT051bUhvc3RzOyBob3N0KysgKSB7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIkF0dGVtcHQgdG8gYm9vdCBob3N0ICVkXG4iLGhvc3QpOworCUhvc3RQID0gTlVMTDsJCS8qIEFzc3VyZSB0aGUgY29tcGlsZXIgd2UndmUgaW5pdGlhbGl6ZWQgaXQgKi8KKworCisJLyogV2FsayB0aGUgaG9zdHMgKi8KKwlmb3IgKGhvc3QgPSAwOyBob3N0IDwgcC0+UklPTnVtSG9zdHM7IGhvc3QrKykgeworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIkF0dGVtcHQgdG8gYm9vdCBob3N0ICVkXG4iLCBob3N0KTsKIAkJSG9zdFAgPSAmcC0+UklPSG9zdHNbaG9zdF07Ci0JCQotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICAiSG9zdCBUeXBlID0gMHgleCwgTW9kZSA9IDB4JXgsIElWZWMgPSAweCV4XG4iLAotCQkgICAgSG9zdFAtPlR5cGUsIEhvc3RQLT5Nb2RlLCBIb3N0UC0+SXZlYyk7CiAKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJIb3N0IFR5cGUgPSAweCV4LCBNb2RlID0gMHgleCwgSVZlYyA9IDB4JXhcbiIsIEhvc3RQLT5UeXBlLCBIb3N0UC0+TW9kZSwgSG9zdFAtPkl2ZWMpOwogCi0JCWlmICggKEhvc3RQLT5GbGFncyAmIFJVTl9TVEFURSkgIT0gUkNfV0FJVElORyApIHsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIiVzICVkIGFscmVhZHkgcnVubmluZ1xuIiwiSG9zdCIsaG9zdCk7CisJCS8qIERvbid0IGJvb3QgaG9zdHMgYWxyZWFkeSBydW5uaW5nICovCisJCWlmICgoSG9zdFAtPkZsYWdzICYgUlVOX1NUQVRFKSAhPSBSQ19XQUlUSU5HKSB7CisJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIiVzICVkIGFscmVhZHkgcnVubmluZ1xuIiwgIkhvc3QiLCBob3N0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyoKLQkJKiogR3JhYiBhIDMyIGJpdCBwb2ludGVyIHRvIHRoZSBjYXJkLgotCQkqLworCQkgKiogR3JhYiBhIHBvaW50ZXIgdG8gdGhlIGNhcmQgKGlvcmVtYXBwZWQpCisJCSAqLwogCQlDYWQgPSBIb3N0UC0+Q2FkZHI7CiAKIAkJLyoKLQkJKiogV2UgYXJlIGdvaW5nIHRvICh0cnkpIGFuZCBsb2FkIGluIHJicC0+Q291bnQgYnl0ZXMuCi0JCSoqIFRoZSBsYXN0IGJ5dGUgd2lsbCByZXNpZGUgYXQgcC0+UklPQ29uZi5Ib3N0TG9hZEJhc2UtMTsKLQkJKiogVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIHN0YXJ0IGNvcHlpbmcgYXQgYWRkcmVzcwotCQkqKiAoY2FkZHIrcC0+UklPQ29uZi5Ib3N0TG9hZEJhc2UtcmJwLT5Db3VudCkKLQkJKi8KLQkJU3RhcnRQID0gKGNhZGRyX3QpJkNhZFtwLT5SSU9Db25mLkhvc3RMb2FkQmFzZS1yYnAtPkNvdW50XTsKKwkJICoqIFdlIGFyZSBnb2luZyB0byAodHJ5KSBhbmQgbG9hZCBpbiByYnAtPkNvdW50IGJ5dGVzLgorCQkgKiogVGhlIGxhc3QgYnl0ZSB3aWxsIHJlc2lkZSBhdCBwLT5SSU9Db25mLkhvc3RMb2FkQmFzZS0xOworCQkgKiogVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIHN0YXJ0IGNvcHlpbmcgYXQgYWRkcmVzcworCQkgKiogKGNhZGRyK3AtPlJJT0NvbmYuSG9zdExvYWRCYXNlLXJicC0+Q291bnQpCisJCSAqLworCQlTdGFydFAgPSAmQ2FkW3AtPlJJT0NvbmYuSG9zdExvYWRCYXNlIC0gcmJwLT5Db3VudF07CiAKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAia2VybmVsIHZpcnR1YWwgYWRkcmVzcyBmb3IgaG9zdCBpcyAweCV4XG4iLCAoaW50KUNhZCApOwotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJrZXJuZWwgdmlydHVhbCBhZGRyZXNzIGZvciBkb3dubG9hZCBpcyAweCV4XG4iLCAoaW50KVN0YXJ0UCk7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgImhvc3QgbG9hZGJhc2UgaXMgMHgleFxuIixwLT5SSU9Db25mLkhvc3RMb2FkQmFzZSk7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgInNpemUgb2YgZG93bmxvYWQgaXMgMHgleFxuIiwgcmJwLT5Db3VudCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAia2VybmVsIHZpcnR1YWwgYWRkcmVzcyBmb3IgaG9zdCBpcyAlcFxuIiwgQ2FkKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJrZXJuZWwgdmlydHVhbCBhZGRyZXNzIGZvciBkb3dubG9hZCBpcyAlcFxuIiwgU3RhcnRQKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJob3N0IGxvYWRiYXNlIGlzIDB4JXhcbiIsIHAtPlJJT0NvbmYuSG9zdExvYWRCYXNlKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJzaXplIG9mIGRvd25sb2FkIGlzIDB4JXhcbiIsIHJicC0+Q291bnQpOwogCi0JCWlmICggcC0+UklPQ29uZi5Ib3N0TG9hZEJhc2UgPCByYnAtPkNvdW50ICkgewotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiQmluIHRvbyBsYXJnZVxuIik7CisJCS8qIE1ha2Ugc3VyZSBpdCBmaXRzICovCisJCWlmIChwLT5SSU9Db25mLkhvc3RMb2FkQmFzZSA8IHJicC0+Q291bnQpIHsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiQmluIHRvbyBsYXJnZVxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IEhPU1RfRklMRV9UT09fTEFSR0U7Ci0JCQlmdW5jX2V4aXQgKCk7CisJCQlmdW5jX2V4aXQoKTsKIAkJCXJldHVybiAtRUZCSUc7CiAJCX0KIAkJLyoKLQkJKiogRW5zdXJlIHRoYXQgdGhlIGhvc3QgcmVhbGx5IGlzIHN0b3BwZWQuCi0JCSoqIERpc2FibGUgaXQncyBleHRlcm5hbCBidXMgJiB0d2FuZyBpdHMgcmVzZXQgbGluZS4KLQkJKi8KLQkJUklPSG9zdFJlc2V0KCBIb3N0UC0+VHlwZSwgKHN0cnVjdCBEcFJhbSAqKUhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTsKKwkJICoqIEVuc3VyZSB0aGF0IHRoZSBob3N0IHJlYWxseSBpcyBzdG9wcGVkLgorCQkgKiogRGlzYWJsZSBpdCdzIGV4dGVybmFsIGJ1cyAmIHR3YW5nIGl0cyByZXNldCBsaW5lLgorCQkgKi8KKwkJUklPSG9zdFJlc2V0KEhvc3RQLT5UeXBlLCAoc3RydWN0IERwUmFtICopIEhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QpOwogCiAJCS8qCi0JCSoqIENvcHkgdGhlIGRhdGEgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlIHRvIHRoZSBTUkFNLgotCQkqKiBUaGlzIGFpbid0IGdvaW5nIHRvIGJlIG5vbmUgdG9vIGNsZXZlciBpZiB0aGUgZG93bmxvYWQKLQkJKiogY29kZSBpcyBiaWdnZXIgdGhhbiB0aGlzIHNlZ21lbnQuCi0JCSovCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIkNvcHkgaW4gY29kZVxuIik7CisJCSAqKiBDb3B5IHRoZSBkYXRhIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSB0byB0aGUgU1JBTS4KKwkJICoqIFRoaXMgYWluJ3QgZ29pbmcgdG8gYmUgbm9uZSB0b28gY2xldmVyIGlmIHRoZSBkb3dubG9hZAorCQkgKiogY29kZSBpcyBiaWdnZXIgdGhhbiB0aGlzIHNlZ21lbnQuCisJCSAqLworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIkNvcHkgaW4gY29kZVxuIik7CiAKLQkJLyoKLQkJKiogUENJIGhvc3RjYXJkIGNhbid0IGNvcGUgd2l0aCAzMiBiaXQgYWNjZXNzZXMgYW5kIHNvIG5lZWQgdG8gY29weSAKLQkJKiogZGF0YSB0byBhIGxvY2FsIGJ1ZmZlciwgYW5kIHRoZW4gZHJpcGZlZWQgdGhlIGNhcmQuCi0JCSovCi0JCWlmICggSG9zdFAtPlR5cGUgPT0gUklPX1BDSSApIHsKLQkJICAvKiBpbnQgb2Zmc2V0OyAqLworCQkvKiBCdWZmZXIgdG8gbG9jYWwgbWVtb3J5IGFzIHdlIHdhbnQgdG8gdXNlIEkvTyBzcGFjZSBhbmQKKwkJICAgc29tZSBjYXJkcyBvbmx5IGRvIDggb3IgMTYgYml0IEkvTyAqLwogCi0JCQlEb3duQ29kZSA9IHN5c2JyayhyYnAtPkNvdW50KTsKLQkJCWlmICggIURvd25Db2RlICkgewotCQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIk5vIHN5c3RlbSBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKLQkJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9FTk9VR0hfQ09SRV9GT1JfUENJX0NPUFk7Ci0JCQkJZnVuY19leGl0ICgpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJYnplcm8oRG93bkNvZGUsIHJicC0+Q291bnQpOwotCi0JCQlpZiAoIGNvcHlpbigoaW50KXJicC0+RGF0YVAsRG93bkNvZGUscmJwLT5Db3VudCk9PUNPUFlGQUlMICkgewotCQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIkJhZCBjb3B5aW4gb2YgaG9zdCBkYXRhXG4iKTsKLQkJCQlzeXNmcmVlKCBEb3duQ29kZSwgcmJwLT5Db3VudCApOwotCQkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKLQkJCQlmdW5jX2V4aXQgKCk7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0KLQkJCUhvc3RQLT5Db3B5KCBEb3duQ29kZSwgU3RhcnRQLCByYnAtPkNvdW50ICk7Ci0KLQkJCXN5c2ZyZWUoIERvd25Db2RlLCByYnAtPkNvdW50ICk7CisJCURvd25Db2RlID0gdm1hbGxvYyhyYnAtPkNvdW50KTsKKwkJaWYgKCFEb3duQ29kZSkgeworCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfRU5PVUdIX0NPUkVfRk9SX1BDSV9DT1BZOworCQkJZnVuY19leGl0KCk7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQllbHNlIGlmICggY29weWluKChpbnQpcmJwLT5EYXRhUCxTdGFydFAscmJwLT5Db3VudCk9PUNPUFlGQUlMICkgewotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiQmFkIGNvcHlpbiBvZiBob3N0IGRhdGFcbiIpOworCQlpZiAoY29weV9mcm9tX3VzZXIocmJwLT5EYXRhUCwgRG93bkNvZGUsIHJicC0+Q291bnQpKSB7CisJCQlrZnJlZShEb3duQ29kZSk7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7Ci0JCQlmdW5jX2V4aXQgKCk7CisJCQlmdW5jX2V4aXQoKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CisJCUhvc3RQLT5Db3B5KERvd25Db2RlLCBTdGFydFAsIHJicC0+Q291bnQpOworCQl2ZnJlZShEb3duQ29kZSk7CiAKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiQ29weSBjb21wbGV0ZWRcbiIpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIkNvcHkgY29tcGxldGVkXG4iKTsKIAogCQkvKgotCQkqKgkJCVMgVCBPIFAgIQotCQkqKgotCQkqKiBVcHRvIHRoaXMgcG9pbnQgdGhlIGNvZGUgaGFzIGJlZW4gZmFpcmx5IHJhdGlvbmFsLCBhbmQgcG9zc2libHkKLQkJKiogZXZlbiBzdHJhaWdodCBmb3J3YXJkLiBXaGF0IGZvbGxvd3MgaXMgYSBwaWxlIG9mIGNydWQgdGhhdCB3aWxsCi0JCSoqIG1hZ2ljYWxseSB0dXJuIGludG8gc2l4IGJ5dGVzIG9mIHRyYW5zcHV0ZXIgYXNzZW1ibGVyLiBOb3JtYWxseQotCQkqKiB5b3Ugd291bGQgZXhwZWN0IGFuIGFycmF5IG9yIHNvbWV0aGluZywgYnV0LCBiZWluZyBtZSwgSSBoYXZlCi0JCSoqIGNob3NlbiBbYmVlbiB0b2xkXSB0byB1c2UgYSB0ZWNobmlxdWUgd2hlcmVieSB0aGUgc3RhcnR1cCBjb2RlCi0JCSoqIHdpbGwgYmUgY29ycmVjdCBpZiB3ZSBjaGFuZ2UgdGhlIGxvYWRiYXNlIGZvciB0aGUgY29kZS4gV2hpY2gKLQkJKiogYnJpbmdzIHVzIG9udG8gYW5vdGhlciBpc3N1ZSAtIHRoZSBsb2FkYmFzZSBpcyB0aGUgKmVuZCogb2YgdGhlCi0JCSoqIGNvZGUsIG5vdCB0aGUgc3RhcnQuCi0JCSoqCi0JCSoqIElmIEkgd2VyZSB5b3UgSSB3b3VsZG4ndCBzdGFydCBmcm9tIGhlcmUuCi0JCSovCisJCSAqKiAgICAgICAgICAgICAgICAgICAgIFMgVCBPIFAgIQorCQkgKioKKwkJICoqIFVwdG8gdGhpcyBwb2ludCB0aGUgY29kZSBoYXMgYmVlbiBmYWlybHkgcmF0aW9uYWwsIGFuZCBwb3NzaWJseQorCQkgKiogZXZlbiBzdHJhaWdodCBmb3J3YXJkLiBXaGF0IGZvbGxvd3MgaXMgYSBwaWxlIG9mIGNydWQgdGhhdCB3aWxsCisJCSAqKiBtYWdpY2FsbHkgdHVybiBpbnRvIHNpeCBieXRlcyBvZiB0cmFuc3B1dGVyIGFzc2VtYmxlci4gTm9ybWFsbHkKKwkJICoqIHlvdSB3b3VsZCBleHBlY3QgYW4gYXJyYXkgb3Igc29tZXRoaW5nLCBidXQsIGJlaW5nIG1lLCBJIGhhdmUKKwkJICoqIGNob3NlbiBbYmVlbiB0b2xkXSB0byB1c2UgYSB0ZWNobmlxdWUgd2hlcmVieSB0aGUgc3RhcnR1cCBjb2RlCisJCSAqKiB3aWxsIGJlIGNvcnJlY3QgaWYgd2UgY2hhbmdlIHRoZSBsb2FkYmFzZSBmb3IgdGhlIGNvZGUuIFdoaWNoCisJCSAqKiBicmluZ3MgdXMgb250byBhbm90aGVyIGlzc3VlIC0gdGhlIGxvYWRiYXNlIGlzIHRoZSAqZW5kKiBvZiB0aGUKKwkJICoqIGNvZGUsIG5vdCB0aGUgc3RhcnQuCisJCSAqKgorCQkgKiogSWYgSSB3ZXJlIHlvdSBJIHdvdWxkbid0IHN0YXJ0IGZyb20gaGVyZS4KKwkJICovCiAKIAkJLyoKLQkJKiogV2Ugbm93IG5lZWQgdG8gaW5zZXJ0IGEgc2hvcnQgYm9vdCBzZWN0aW9uIGludG8KLQkJKiogdGhlIG1lbW9yeSBhdCB0aGUgZW5kIG9mIFNyYW0yLiBUaGlzIGlzIG5vcm1hbGx5IChkZSljb21wb3NlZAotCQkqKiBvZiB0aGUgbGFzdCBlaWdodCBieXRlcyBvZiB0aGUgZG93bmxvYWQgY29kZS4gVGhlCi0JCSoqIGRvd25sb2FkIGhhcyBiZWVuIGFzc2VtYmxlZC9jb21waWxlZCB0byBleHBlY3QgdG8gYmUKLQkJKiogbG9hZGVkIGZyb20gMHg3RkZGIGRvd253YXJkcy4gV2UgaGF2ZSBsb2FkZWQgaXQKLQkJKiogYXQgc29tZSBvdGhlciBhZGRyZXNzLiBUaGUgc3RhcnR1cCBjb2RlIGdvZXMgaW50byB0aGUgc21hbGwKLQkJKiogcmFtIHdpbmRvdyBhdCBTcmFtMiwgaW4gdGhlIGxhc3QgOCBieXRlcywgd2hpY2ggYXJlIHJlYWxseQotCQkqKiBhdCBhZGRyZXNzZXMgMHg3RkY4LTB4N0ZGRi4KLQkJKioKLQkJKiogSWYgdGhlIGxvYWRiYXNlIGlzLCBzYXksIDB4N0MwMCwgdGhlbiB3ZSBuZWVkIHRvIGJyYW5jaCB0bwotCQkqKiBhZGRyZXNzIDB4N0JGRSB0byBydW4gdGhlIGhvc3QuYmluIHN0YXJ0dXAgY29kZS4gV2UgYXNzZW1ibGUKLQkJKiogdGhpcyBqdW1wIG1hbnVhbGx5LgotCQkqKgotCQkqKiBUaGUgdHdvIGJ5dGUgc2VxdWVuY2UgNjAgMDggaXMgbG9hZGVkIGludG8gbWVtb3J5IGF0IGFkZHJlc3MKLQkJKiogMHg3RkZFLEYuIFRoaXMgaXMgYSBsb2NhbCBicmFuY2ggdG8gbG9jYXRpb24gMHg3RkY4ICg2MCBpcyBuZml4IDAsCi0JCSoqIHdoaWNoIGFkZHMgJzAnIHRvIHRoZSAuTyByZWdpc3RlciwgY29tcGxlbWVudHMgLk8sIGFuZCB0aGVuIHNoaWZ0cwotCQkqKiBpdCBsZWZ0IGJ5IDQgYml0IHBvc2l0aW9ucywgMDggaXMgYSBqdW1wIC5PKzggaW5zdHJ1Y3Rpb24uIFRoaXMgd2lsbAotCQkqKiBhZGQgOCB0byAuTyAod2hpY2ggd2FzIDB4RkZGMCksIGFuZCB3aWxsIGJyYW5jaCBSRUxBVElWRSB0byB0aGUgbmV3Ci0JCSoqIGxvY2F0aW9uLiBOb3csIHRoZSBicmFuY2ggc3RhcnRzIGZyb20gdGhlIHZhbHVlIG9mIC5QQyAob3IgLklQIG9yCi0JCSoqIHdoYXRldmVyIHRoZSBibG9vZHkgcmVnaXN0ZXIgaXMgY2FsbGVkIG9uIHRoaXMgY2hpcCksIGFuZCB0aGUgLlBDCi0JCSoqIHdpbGwgYmUgcG9pbnRpbmcgdG8gdGhlIGxvY2F0aW9uIEFGVEVSIHRoZSBicmFuY2gsIGluIHRoaXMgY2FzZQotCQkqKiAuUEMgPT0gMHg4MDAwLCBzbyB0aGUgYnJhbmNoIHdpbGwgYmUgdG8gMHg4MDAwKzB4RkZGOCA9IDB4N0ZGOC4KLQkJKioKLQkJKiogQSBsb25nIGJyYW5jaCBpcyBjb2RlZCBhdCAweDdGRjguIFRoaXMgY29uc2lzdHMgb2YgbG9hZGluZyBhIGZvdXIKLQkJKiogYnl0ZSBvZmZzZXQgaW50byAuTyB1c2luZyBuZml4IChhcyBhYm92ZSkgYW5kIHBmaXggb3BlcmF0b3JzLiBUaGUKLQkJKiogcGZpeCBvcGVyYXRlcyBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyB0aGUgbmZpeCBvcGVyYXRvciwgYnV0Ci0JCSoqIHdpdGhvdXQgdGhlIGNvbXBsZW1lbnQgb3BlcmF0aW9uLiBUaGUgb2Zmc2V0LCBvZiBjb3Vyc2UsIG11c3QgYmUKLQkJKiogcmVsYXRpdmUgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGJ5dGUgQUZURVIgdGhlIGJyYW5jaCBpbnN0cnVjdGlvbiwKLQkJKiogd2hpY2ggd2lsbCBiZSAodXJtKSAweDdGRkMsIHNvLCBvdXIgZmluYWwgZGVzdGluYXRpb24gb2YgdGhlIGJyYW5jaAotCQkqKiAobG9hZGJhc2UtMiksIGhhcyB0byBiZSByZWFjaGVkIGZyb20gaGVyZS4gSW1hZ2luZSB0aGF0IHRoZSBsb2FkYmFzZQotCQkqKiBpcyAweDdDMDAgKHdoaWNoIGl0IGlzKSwgdGhlbiB3ZSB3aWxsIG5lZWQgdG8gYnJhbmNoIHRvIDB4N0JGRSAod2hpY2gKLQkJKiogaXMgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGluaXRpYWwgdHdvIGJ5dGUgc2hvcnQgbG9jYWwgYnJhbmNoIG9mIHRoZQotCQkqKiBkb3dubG9hZCBjb2RlKS4KLQkJKioKLQkJKiogVG8gY29kZSBhIGp1bXAgZnJvbSAweDdGRkMgKHdoaWNoIGlzIHdoZXJlIHRoZSBicmFuY2ggd2lsbCBzdGFydAotCQkqKiBmcm9tKSB0byAweDdCRkUsIHdlIHdpbGwgbmVlZCB0byBicmFuY2ggMHhGQzAyIGJ5dGVzICgweDdGRkMrMHhGQzAyKT0KLQkJKiogMHg3QkZFLgotCQkqKiBUaGlzIHdpbGwgYmUgY29kZWQgYXMgZm91ciBieXRlczoKLQkJKiogNjAgMkMgMjAgMDIKLQkJKiogYmVpbmcgbmZpeCAuTyswCi0JCSoqCSAgIHBmaXggLk8rQwotCQkqKgkgICBwZml4IC5PKzAKLQkJKioJICAganVtcCAuTysyCi0JCSoqCi0JCSoqIFRoZSBuZml4IG9wZXJhdG9yIGlzIHVzZWQsIHNvIHRoYXQgdGhlIHN0YXJ0dXAgY29kZSB3aWxsIGJlCi0JCSoqIGNvbXBhdGlibGUgd2l0aCB0aGUgd2hvbGUgVHAgZmFtaWx5LiAobGllcywgZGFtbiBsaWVzLCBpdCdsbCBuZXZlcgotCQkqKiB3b3JrIGluIGEgbW9udGggb2YgU3VuZGF5cykuCi0JCSoqCi0JCSoqIFRoZSBuZml4IG55YmxlIGlzIHRoZSAxcyBjb21wbGVtZW50IG9mIHRoZSBueWJsZSB2YWx1ZSB5b3UKLQkJKiogd2FudCB0byBsb2FkIC0gaW4gdGhpcyBjYXNlIHdlIHdhbnRlZCAnRicgc28gd2UgbmZpeCBsb2FkZWQgJzAnLgotCQkqLworCQkgKiogV2Ugbm93IG5lZWQgdG8gaW5zZXJ0IGEgc2hvcnQgYm9vdCBzZWN0aW9uIGludG8KKwkJICoqIHRoZSBtZW1vcnkgYXQgdGhlIGVuZCBvZiBTcmFtMi4gVGhpcyBpcyBub3JtYWxseSAoZGUpY29tcG9zZWQKKwkJICoqIG9mIHRoZSBsYXN0IGVpZ2h0IGJ5dGVzIG9mIHRoZSBkb3dubG9hZCBjb2RlLiBUaGUKKwkJICoqIGRvd25sb2FkIGhhcyBiZWVuIGFzc2VtYmxlZC9jb21waWxlZCB0byBleHBlY3QgdG8gYmUKKwkJICoqIGxvYWRlZCBmcm9tIDB4N0ZGRiBkb3dud2FyZHMuIFdlIGhhdmUgbG9hZGVkIGl0CisJCSAqKiBhdCBzb21lIG90aGVyIGFkZHJlc3MuIFRoZSBzdGFydHVwIGNvZGUgZ29lcyBpbnRvIHRoZSBzbWFsbAorCQkgKiogcmFtIHdpbmRvdyBhdCBTcmFtMiwgaW4gdGhlIGxhc3QgOCBieXRlcywgd2hpY2ggYXJlIHJlYWxseQorCQkgKiogYXQgYWRkcmVzc2VzIDB4N0ZGOC0weDdGRkYuCisJCSAqKgorCQkgKiogSWYgdGhlIGxvYWRiYXNlIGlzLCBzYXksIDB4N0MwMCwgdGhlbiB3ZSBuZWVkIHRvIGJyYW5jaCB0bworCQkgKiogYWRkcmVzcyAweDdCRkUgdG8gcnVuIHRoZSBob3N0LmJpbiBzdGFydHVwIGNvZGUuIFdlIGFzc2VtYmxlCisJCSAqKiB0aGlzIGp1bXAgbWFudWFsbHkuCisJCSAqKgorCQkgKiogVGhlIHR3byBieXRlIHNlcXVlbmNlIDYwIDA4IGlzIGxvYWRlZCBpbnRvIG1lbW9yeSBhdCBhZGRyZXNzCisJCSAqKiAweDdGRkUsRi4gVGhpcyBpcyBhIGxvY2FsIGJyYW5jaCB0byBsb2NhdGlvbiAweDdGRjggKDYwIGlzIG5maXggMCwKKwkJICoqIHdoaWNoIGFkZHMgJzAnIHRvIHRoZSAuTyByZWdpc3RlciwgY29tcGxlbWVudHMgLk8sIGFuZCB0aGVuIHNoaWZ0cworCQkgKiogaXQgbGVmdCBieSA0IGJpdCBwb3NpdGlvbnMsIDA4IGlzIGEganVtcCAuTys4IGluc3RydWN0aW9uLiBUaGlzIHdpbGwKKwkJICoqIGFkZCA4IHRvIC5PICh3aGljaCB3YXMgMHhGRkYwKSwgYW5kIHdpbGwgYnJhbmNoIFJFTEFUSVZFIHRvIHRoZSBuZXcKKwkJICoqIGxvY2F0aW9uLiBOb3csIHRoZSBicmFuY2ggc3RhcnRzIGZyb20gdGhlIHZhbHVlIG9mIC5QQyAob3IgLklQIG9yCisJCSAqKiB3aGF0ZXZlciB0aGUgYmxvb2R5IHJlZ2lzdGVyIGlzIGNhbGxlZCBvbiB0aGlzIGNoaXApLCBhbmQgdGhlIC5QQworCQkgKiogd2lsbCBiZSBwb2ludGluZyB0byB0aGUgbG9jYXRpb24gQUZURVIgdGhlIGJyYW5jaCwgaW4gdGhpcyBjYXNlCisJCSAqKiAuUEMgPT0gMHg4MDAwLCBzbyB0aGUgYnJhbmNoIHdpbGwgYmUgdG8gMHg4MDAwKzB4RkZGOCA9IDB4N0ZGOC4KKwkJICoqCisJCSAqKiBBIGxvbmcgYnJhbmNoIGlzIGNvZGVkIGF0IDB4N0ZGOC4gVGhpcyBjb25zaXN0cyBvZiBsb2FkaW5nIGEgZm91cgorCQkgKiogYnl0ZSBvZmZzZXQgaW50byAuTyB1c2luZyBuZml4IChhcyBhYm92ZSkgYW5kIHBmaXggb3BlcmF0b3JzLiBUaGUKKwkJICoqIHBmaXggb3BlcmF0ZXMgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIG5maXggb3BlcmF0b3IsIGJ1dAorCQkgKiogd2l0aG91dCB0aGUgY29tcGxlbWVudCBvcGVyYXRpb24uIFRoZSBvZmZzZXQsIG9mIGNvdXJzZSwgbXVzdCBiZQorCQkgKiogcmVsYXRpdmUgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGJ5dGUgQUZURVIgdGhlIGJyYW5jaCBpbnN0cnVjdGlvbiwKKwkJICoqIHdoaWNoIHdpbGwgYmUgKHVybSkgMHg3RkZDLCBzbywgb3VyIGZpbmFsIGRlc3RpbmF0aW9uIG9mIHRoZSBicmFuY2gKKwkJICoqIChsb2FkYmFzZS0yKSwgaGFzIHRvIGJlIHJlYWNoZWQgZnJvbSBoZXJlLiBJbWFnaW5lIHRoYXQgdGhlIGxvYWRiYXNlCisJCSAqKiBpcyAweDdDMDAgKHdoaWNoIGl0IGlzKSwgdGhlbiB3ZSB3aWxsIG5lZWQgdG8gYnJhbmNoIHRvIDB4N0JGRSAod2hpY2gKKwkJICoqIGlzIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBpbml0aWFsIHR3byBieXRlIHNob3J0IGxvY2FsIGJyYW5jaCBvZiB0aGUKKwkJICoqIGRvd25sb2FkIGNvZGUpLgorCQkgKioKKwkJICoqIFRvIGNvZGUgYSBqdW1wIGZyb20gMHg3RkZDICh3aGljaCBpcyB3aGVyZSB0aGUgYnJhbmNoIHdpbGwgc3RhcnQKKwkJICoqIGZyb20pIHRvIDB4N0JGRSwgd2Ugd2lsbCBuZWVkIHRvIGJyYW5jaCAweEZDMDIgYnl0ZXMgKDB4N0ZGQysweEZDMDIpPQorCQkgKiogMHg3QkZFLgorCQkgKiogVGhpcyB3aWxsIGJlIGNvZGVkIGFzIGZvdXIgYnl0ZXM6CisJCSAqKiA2MCAyQyAyMCAwMgorCQkgKiogYmVpbmcgbmZpeCAuTyswCisJCSAqKiAgICAgICAgcGZpeCAuTytDCisJCSAqKiAgICAgICAgcGZpeCAuTyswCisJCSAqKiAgICAgICAganVtcCAuTysyCisJCSAqKgorCQkgKiogVGhlIG5maXggb3BlcmF0b3IgaXMgdXNlZCwgc28gdGhhdCB0aGUgc3RhcnR1cCBjb2RlIHdpbGwgYmUKKwkJICoqIGNvbXBhdGlibGUgd2l0aCB0aGUgd2hvbGUgVHAgZmFtaWx5LiAobGllcywgZGFtbiBsaWVzLCBpdCdsbCBuZXZlcgorCQkgKiogd29yayBpbiBhIG1vbnRoIG9mIFN1bmRheXMpLgorCQkgKioKKwkJICoqIFRoZSBuZml4IG55YmxlIGlzIHRoZSAxcyBjb21wbGVtZW50IG9mIHRoZSBueWJsZSB2YWx1ZSB5b3UKKwkJICoqIHdhbnQgdG8gbG9hZCAtIGluIHRoaXMgY2FzZSB3ZSB3YW50ZWQgJ0YnIHNvIHdlIG5maXggbG9hZGVkICcwJy4KKwkJICovCiAKIAogCQkvKgotCQkqKiBEZXN0IHBvaW50cyB0byB0aGUgdG9wIDggYnl0ZXMgb2YgU3JhbTIuIFRoZSBUcCBqdW1wcwotCQkqKiB0byAweDdGRkUgYXQgcmVzZXQgdGltZSwgYW5kIHN0YXJ0cyBleGVjdXRpbmcuIFRoaXMgaXMKLQkJKiogYSBzaG9ydCBicmFuY2ggdG8gMHg3RkY4LCB3aGVyZSBhIGxvbmcgYnJhbmNoIGlzIGNvZGVkLgotCQkqLworCQkgKiogRGVzdCBwb2ludHMgdG8gdGhlIHRvcCA4IGJ5dGVzIG9mIFNyYW0yLiBUaGUgVHAganVtcHMKKwkJICoqIHRvIDB4N0ZGRSBhdCByZXNldCB0aW1lLCBhbmQgc3RhcnRzIGV4ZWN1dGluZy4gVGhpcyBpcworCQkgKiogYSBzaG9ydCBicmFuY2ggdG8gMHg3RkY4LCB3aGVyZSBhIGxvbmcgYnJhbmNoIGlzIGNvZGVkLgorCQkgKi8KIAotCQlEZXN0UCA9IChCWVRFICopJkNhZFsweDdGRjhdOwkvKiA8PDwtLS0tIFJFQUQgVEhFIEFCT1ZFIENPTU1FTlRTICovCisJCURlc3RQID0gKHU4ICopICZDYWRbMHg3RkY4XTsJLyogPDw8LS0tLSBSRUFEIFRIRSBBQk9WRSBDT01NRU5UUyAqLwogCiAjZGVmaW5lCU5GSVgoTikJKDB4NjAgfCAoTikpCS8qIC5PICA9ICh+KC5PICsgTikpPDw0ICovCiAjZGVmaW5lCVBGSVgoTikJKDB4MjAgfCAoTikpCS8qIC5PICA9ICAgKC5PICsgTik8PDQgICovCi0jZGVmaW5lCUpVTVAoTikJKDB4MDAgfCAoTikpCS8qIC5QQyA9ICAgLlBDICsgLk8JICovCisjZGVmaW5lCUpVTVAoTikJKDB4MDAgfCAoTikpCS8qIC5QQyA9ICAgLlBDICsgLk8gICAgICAqLwogCiAJCS8qCi0JCSoqIDB4N0ZGQyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHRoZSBsYXN0IGJ5dGUgb2YKLQkJKiogdGhlIGZvdXIgYnl0ZSBqdW1wIGluc3RydWN0aW9uLgotCQkqKiBSRUFEIFRIRSBBQk9WRSBDT01NRU5UUwotCQkqKgotCQkqKiBvZmZzZXQgaXMgKFRPLUZST00pICUgTUVNU0laRSwgYnV0IHdpdGggY29tcG91bmQgYnVnZ2VyaW5nIGFib3V0LgotCQkqKiBNZW1zaXplIGlzIDY0SyBmb3IgdGhpcyByYW5nZSBvZiBUcCwgc28gb2Zmc2V0IGlzIGEgc2hvcnQgKHVuc2lnbmVkLAotCQkqKiBjb3MgSSBkb24ndCB1bmRlcnN0YW5kIDIncyBjb21wbGVtZW50KS4KLQkJKi8KLQkJb2Zmc2V0ID0gKHAtPlJJT0NvbmYuSG9zdExvYWRCYXNlLTIpLTB4N0ZGQzsKLQkJV0JZVEUoIERlc3RQWzBdICwgTkZJWCgoKHVzaG9ydCkofm9mZnNldCkgPj4gKHVzaG9ydCkxMikgJiAweEYpICk7Ci0JCVdCWVRFKCBEZXN0UFsxXSAsIFBGSVgoKCBvZmZzZXQgPj4gOCkgJiAweEYpICk7Ci0JCVdCWVRFKCBEZXN0UFsyXSAsIFBGSVgoKCBvZmZzZXQgPj4gNCkgJiAweEYpICk7Ci0JCVdCWVRFKCBEZXN0UFszXSAsIEpVTVAoIG9mZnNldCAmIDB4RikgKTsKKwkJICoqIDB4N0ZGQyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgbG9jYXRpb24gZm9sbG93aW5nIHRoZSBsYXN0IGJ5dGUgb2YKKwkJICoqIHRoZSBmb3VyIGJ5dGUganVtcCBpbnN0cnVjdGlvbi4KKwkJICoqIFJFQUQgVEhFIEFCT1ZFIENPTU1FTlRTCisJCSAqKgorCQkgKiogb2Zmc2V0IGlzIChUTy1GUk9NKSAlIE1FTVNJWkUsIGJ1dCB3aXRoIGNvbXBvdW5kIGJ1Z2dlcmluZyBhYm91dC4KKwkJICoqIE1lbXNpemUgaXMgNjRLIGZvciB0aGlzIHJhbmdlIG9mIFRwLCBzbyBvZmZzZXQgaXMgYSBzaG9ydCAodW5zaWduZWQsCisJCSAqKiBjb3MgSSBkb24ndCB1bmRlcnN0YW5kIDIncyBjb21wbGVtZW50KS4KKwkJICovCisJCW9mZnNldCA9IChwLT5SSU9Db25mLkhvc3RMb2FkQmFzZSAtIDIpIC0gMHg3RkZDOwogCi0JCVdCWVRFKCBEZXN0UFs2XSAsIE5GSVgoMCkgKTsKLQkJV0JZVEUoIERlc3RQWzddICwgSlVNUCg4KSApOworCQl3cml0ZWIoTkZJWCgoKHVuc2lnbmVkIHNob3J0KSAofm9mZnNldCkgPj4gKHVuc2lnbmVkIHNob3J0KSAxMikgJiAweEYpLCBEZXN0UCk7CisJCXdyaXRlYihQRklYKChvZmZzZXQgPj4gOCkgJiAweEYpLCBEZXN0UCArIDEpOworCQl3cml0ZWIoUEZJWCgob2Zmc2V0ID4+IDQpICYgMHhGKSwgRGVzdFAgKyAyKTsKKwkJd3JpdGViKEpVTVAob2Zmc2V0ICYgMHhGKSwgRGVzdFAgKyAzKTsKIAotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJob3N0IGxvYWRiYXNlIGlzIDB4JXhcbiIscC0+UklPQ29uZi5Ib3N0TG9hZEJhc2UpOwotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJzdGFydHVwIG9mZnNldCBpcyAweCV4XG4iLG9mZnNldCk7CisJCXdyaXRlYihORklYKDApLCBEZXN0UCArIDYpOworCQl3cml0ZWIoSlVNUCg4KSwgRGVzdFAgKyA3KTsKKworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgImhvc3QgbG9hZGJhc2UgaXMgMHgleFxuIiwgcC0+UklPQ29uZi5Ib3N0TG9hZEJhc2UpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgInN0YXJ0dXAgb2Zmc2V0IGlzIDB4JXhcbiIsIG9mZnNldCk7CiAKIAkJLyoKLQkJKiogRmxhZyB3aGF0IGlzIGdvaW5nIG9uCi0JCSovCisJCSAqKiBGbGFnIHdoYXQgaXMgZ29pbmcgb24KKwkJICovCiAJCUhvc3RQLT5GbGFncyAmPSB+UlVOX1NUQVRFOwogCQlIb3N0UC0+RmxhZ3MgfD0gUkNfU1RBUlRVUDsKIAogCQkvKgotCQkqKiBHcmFiIGEgY29weSBvZiB0aGUgY3VycmVudCBQYXJtTWFwIHBvaW50ZXIsIHNvIHdlCi0JCSoqIGNhbiB0ZWxsIHdoZW4gaXQgaGFzIGNoYW5nZWQuCi0JCSovCi0JCU9sZFBhcm1NYXAgPSBSV09SRChIb3N0UC0+X19QYXJtTWFwUik7CisJCSAqKiBHcmFiIGEgY29weSBvZiB0aGUgY3VycmVudCBQYXJtTWFwIHBvaW50ZXIsIHNvIHdlCisJCSAqKiBjYW4gdGVsbCB3aGVuIGl0IGhhcyBjaGFuZ2VkLgorCQkgKi8KKwkJT2xkUGFybU1hcCA9IHJlYWR3KCZIb3N0UC0+X19QYXJtTWFwUik7CiAKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiT3JpZ2luYWwgcGFybW1hcCBpcyAweCV4XG4iLE9sZFBhcm1NYXApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIk9yaWdpbmFsIHBhcm1tYXAgaXMgMHgleFxuIiwgT2xkUGFybU1hcCk7CiAKIAkJLyoKLQkJKiogQW5kIHN0YXJ0IGl0IHJ1bm5pbmcgKEkgaG9wZSkuCi0JCSoqIEFzIHRoZXJlIGlzIG5vdGhpbmcgZG9kZ3kgb3Igb2JzY3VyZSBhYm91dCB0aGUKLQkJKiogYWJvdmUgY29kZSwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIHdvcmsgZXZlcnkgdGltZS4KLQkJKi8KLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAgIkhvc3QgVHlwZSA9IDB4JXgsIE1vZGUgPSAweCV4LCBJVmVjID0gMHgleFxuIiwKLQkJICAgIEhvc3RQLT5UeXBlLCBIb3N0UC0+TW9kZSwgSG9zdFAtPkl2ZWMpOworCQkgKiogQW5kIHN0YXJ0IGl0IHJ1bm5pbmcgKEkgaG9wZSkuCisJCSAqKiBBcyB0aGVyZSBpcyBub3RoaW5nIGRvZGd5IG9yIG9ic2N1cmUgYWJvdXQgdGhlCisJCSAqKiBhYm92ZSBjb2RlLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gd29yayBldmVyeSB0aW1lLgorCQkgKi8KKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJIb3N0IFR5cGUgPSAweCV4LCBNb2RlID0gMHgleCwgSVZlYyA9IDB4JXhcbiIsIEhvc3RQLT5UeXBlLCBIb3N0UC0+TW9kZSwgSG9zdFAtPkl2ZWMpOwogCiAJCXJpb19zdGFydF9jYXJkX3J1bm5pbmcoSG9zdFApOwogCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlNldCBjb250cm9sIHBvcnRcbiIpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlNldCBjb250cm9sIHBvcnRcbiIpOwogCiAJCS8qCi0JCSoqIE5vdywgd2FpdCBmb3IgdXB0byBmaXZlIHNlY29uZHMgZm9yIHRoZSBUcCB0byBzZXR1cCB0aGUgcGFybW1hcAotCQkqKiBwb2ludGVyOgotCQkqLwotCQlmb3IgKCB3YWl0X2NvdW50PTA7ICh3YWl0X2NvdW50PHAtPlJJT0NvbmYuU3RhcnR1cFRpbWUpJiYKLQkJCShSV09SRChIb3N0UC0+X19QYXJtTWFwUik9PU9sZFBhcm1NYXApOyB3YWl0X2NvdW50KysgKSB7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJDaGVja291dCAlZCwgMHgleFxuIix3YWl0X2NvdW50LFJXT1JEKEhvc3RQLT5fX1Bhcm1NYXBSKSk7Ci0JCQlkZWxheShIb3N0UCwgSFVORFJFRF9NUyk7CisJCSAqKiBOb3csIHdhaXQgZm9yIHVwdG8gZml2ZSBzZWNvbmRzIGZvciB0aGUgVHAgdG8gc2V0dXAgdGhlIHBhcm1tYXAKKwkJICoqIHBvaW50ZXI6CisJCSAqLworCQlmb3IgKHdhaXRfY291bnQgPSAwOyAod2FpdF9jb3VudCA8IHAtPlJJT0NvbmYuU3RhcnR1cFRpbWUpICYmIChyZWFkdygmSG9zdFAtPl9fUGFybU1hcFIpID09IE9sZFBhcm1NYXApOyB3YWl0X2NvdW50KyspIHsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiQ2hlY2tvdXQgJWQsIDB4JXhcbiIsIHdhaXRfY291bnQsIHJlYWR3KCZIb3N0UC0+X19QYXJtTWFwUikpOworCQkJbWRlbGF5KDEwMCk7CiAKIAkJfQogCiAJCS8qCi0JCSoqIElmIHRoZSBwYXJtbWFwIHBvaW50ZXIgaXMgdW5jaGFuZ2VkLCB0aGVuIHRoZSBob3N0IGNvZGUKLQkJKiogaGFzIGNyYXNoZWQgJiBidXJuZWQgaW4gYSByZWFsbHkgc3BlY3RhY3VsYXIgd2F5Ci0JCSovCi0JCWlmICggUldPUkQoSG9zdFAtPl9fUGFybU1hcFIpID09IE9sZFBhcm1NYXAgKSB7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJwYXJtbWFwIDB4JXhcbiIsIFJXT1JEKEhvc3RQLT5fX1Bhcm1NYXBSKSk7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJSSU8gTWVzZyBSdW4gRmFpbFxuIik7Ci0KLSNkZWZpbmUJSE9TVF9ESVNBQkxFIFwKLQkJSG9zdFAtPkZsYWdzICY9IH5SVU5fU1RBVEU7IFwKLQkJSG9zdFAtPkZsYWdzIHw9IFJDX1NUVUZGRUQ7IFwKLQkJUklPSG9zdFJlc2V0KCBIb3N0UC0+VHlwZSwgKHN0cnVjdCBEcFJhbSAqKUhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTtcCi0JCWNvbnRpbnVlCi0KLQkJCUhPU1RfRElTQUJMRTsKKwkJICoqIElmIHRoZSBwYXJtbWFwIHBvaW50ZXIgaXMgdW5jaGFuZ2VkLCB0aGVuIHRoZSBob3N0IGNvZGUKKwkJICoqIGhhcyBjcmFzaGVkICYgYnVybmVkIGluIGEgcmVhbGx5IHNwZWN0YWN1bGFyIHdheQorCQkgKi8KKwkJaWYgKHJlYWR3KCZIb3N0UC0+X19QYXJtTWFwUikgPT0gT2xkUGFybU1hcCkgeworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJwYXJtbWFwIDB4JXhcbiIsIHJlYWR3KCZIb3N0UC0+X19QYXJtTWFwUikpOworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJSSU8gTWVzZyBSdW4gRmFpbFxuIik7CisJCQlIb3N0UC0+RmxhZ3MgJj0gflJVTl9TVEFURTsKKwkJCUhvc3RQLT5GbGFncyB8PSBSQ19TVFVGRkVEOworCQkJUklPSG9zdFJlc2V0KCBIb3N0UC0+VHlwZSwgKHN0cnVjdCBEcFJhbSAqKUhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiUnVubmluZyAweCV4XG4iLCBSV09SRChIb3N0UC0+X19QYXJtTWFwUikpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlJ1bm5pbmcgMHgleFxuIiwgcmVhZHcoJkhvc3RQLT5fX1Bhcm1NYXBSKSk7CiAKIAkJLyoKLQkJKiogV2VsbCwgdGhlIGJvYXJkIHRob3VnaHQgaXQgd2FzIE9LLCBhbmQgc2V0dXAgaXRzIHBhcm1tYXAKLQkJKiogcG9pbnRlci4gRm9yIHRoZSB0aW1lIGJlaW5nLCB3ZSB3aWxsIHByZXRlbmQgdGhhdCB0aGlzCi0JCSoqIGJvYXJkIGlzIHJ1bm5pbmcsIGFuZCBjaGVjayBvdXQgd2hhdCB0aGUgZXJyb3IgZmxhZyBzYXlzLgotCQkqLworCQkgKiogV2VsbCwgdGhlIGJvYXJkIHRob3VnaHQgaXQgd2FzIE9LLCBhbmQgc2V0dXAgaXRzIHBhcm1tYXAKKwkJICoqIHBvaW50ZXIuIEZvciB0aGUgdGltZSBiZWluZywgd2Ugd2lsbCBwcmV0ZW5kIHRoYXQgdGhpcworCQkgKiogYm9hcmQgaXMgcnVubmluZywgYW5kIGNoZWNrIG91dCB3aGF0IHRoZSBlcnJvciBmbGFnIHNheXMuCisJCSAqLwogCiAJCS8qCi0JCSoqIEdyYWIgYSAzMiBiaXQgcG9pbnRlciB0byB0aGUgcGFybW1hcCBzdHJ1Y3R1cmUKLQkJKi8KLQkJUGFybU1hcFAgPSAoUEFSTV9NQVAgKilSSU9fUFRSKENhZCxSV09SRChIb3N0UC0+X19QYXJtTWFwUikpOwotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJQYXJtTWFwUCA6ICV4XG4iLCAoaW50KVBhcm1NYXBQKTsKLQkJUGFybU1hcFAgPSAoUEFSTV9NQVAgKikoKHVuc2lnbmVkIGxvbmcpQ2FkICsgCi0JCQkJCQkodW5zaWduZWQgbG9uZykoKFJXT1JEKChIb3N0UC0+X19QYXJtTWFwUikpKSAmIDB4RkZGRikpOyAKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiUGFybU1hcFAgOiAleFxuIiwgKGludClQYXJtTWFwUCk7CisJCSAqKiBHcmFiIGEgMzIgYml0IHBvaW50ZXIgdG8gdGhlIHBhcm1tYXAgc3RydWN0dXJlCisJCSAqLworCQlQYXJtTWFwUCA9IChQQVJNX01BUCAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJkhvc3RQLT5fX1Bhcm1NYXBSKSk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiUGFybU1hcFAgOiAlcFxuIiwgUGFybU1hcFApOworCQlQYXJtTWFwUCA9IChQQVJNX01BUCAqKSAoKHVuc2lnbmVkIGxvbmcpIENhZCArIHJlYWR3KCZIb3N0UC0+X19QYXJtTWFwUikpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlBhcm1NYXBQIDogJXBcbiIsIFBhcm1NYXBQKTsKIAogCQkvKgotCQkqKiBUaGUgbGlua3MgZW50cnkgc2hvdWxkIGJlIDB4RkZGRjsgd2Ugc2V0IGl0IHVwCi0JCSoqIHdpdGggYSBtYXNrIHRvIHNheSBob3cgbWFueSBQSEJzIHRvIHVzZSwgYW5kIAotCQkqKiB3aGljaCBsaW5rcyB0byB1c2UuCi0JCSovCi0JCWlmICggKFJXT1JEKFBhcm1NYXBQLT5saW5rcykgJiAweEZGRkYpICE9IDB4RkZGRiApIHsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlJJTyBNZXNnIFJ1biBGYWlsICVzXG4iLCBIb3N0UC0+TmFtZSk7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJMaW5rcyA9IDB4JXhcbiIsUldPUkQoUGFybU1hcFAtPmxpbmtzKSk7Ci0JCQlIT1NUX0RJU0FCTEU7CisJCSAqKiBUaGUgbGlua3MgZW50cnkgc2hvdWxkIGJlIDB4RkZGRjsgd2Ugc2V0IGl0IHVwCisJCSAqKiB3aXRoIGEgbWFzayB0byBzYXkgaG93IG1hbnkgUEhCcyB0byB1c2UsIGFuZAorCQkgKiogd2hpY2ggbGlua3MgdG8gdXNlLgorCQkgKi8KKwkJaWYgKHJlYWR3KCZQYXJtTWFwUC0+bGlua3MpICE9IDB4RkZGRikgeworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJSSU8gTWVzZyBSdW4gRmFpbCAlc1xuIiwgSG9zdFAtPk5hbWUpOworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJMaW5rcyA9IDB4JXhcbiIsIHJlYWR3KCZQYXJtTWFwUC0+bGlua3MpKTsKKwkJCUhvc3RQLT5GbGFncyAmPSB+UlVOX1NUQVRFOworCQkJSG9zdFAtPkZsYWdzIHw9IFJDX1NUVUZGRUQ7CisJCQlSSU9Ib3N0UmVzZXQoIEhvc3RQLT5UeXBlLCAoc3RydWN0IERwUmFtICopSG9zdFAtPkNhcmRQLCBIb3N0UC0+U2xvdCApOworCQkJY29udGludWU7CiAJCX0KIAotCQlXV09SRChQYXJtTWFwUC0+bGlua3MgLCBSSU9fTElOS19FTkFCTEUpOworCQl3cml0ZXcoUklPX0xJTktfRU5BQkxFLCAmUGFybU1hcFAtPmxpbmtzKTsKIAogCQkvKgotCQkqKiBub3cgd2FpdCBmb3IgdGhlIGNhcmQgdG8gc2V0IGFsbCB0aGUgcGFybW1hcC0+WFhYIHN0dWZmCi0JCSoqIHRoaXMgaXMgYSB3YWl0IG9mIHVwdG8gdHdvIHNlY29uZHMuLi4uCi0JCSovCi0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIkxvb2tpbmcgZm9yIGluaXRfZG9uZSAtICVkIHRpY2tzXG4iLHAtPlJJT0NvbmYuU3RhcnR1cFRpbWUpOworCQkgKiogbm93IHdhaXQgZm9yIHRoZSBjYXJkIHRvIHNldCBhbGwgdGhlIHBhcm1tYXAtPlhYWCBzdHVmZgorCQkgKiogdGhpcyBpcyBhIHdhaXQgb2YgdXB0byB0d28gc2Vjb25kcy4uLi4KKwkJICovCisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiTG9va2luZyBmb3IgaW5pdF9kb25lIC0gJWQgdGlja3NcbiIsIHAtPlJJT0NvbmYuU3RhcnR1cFRpbWUpOwogCQlIb3N0UC0+dGltZW91dF9pZCA9IDA7Ci0JCWZvciAoIHdhaXRfY291bnQ9MDsgKHdhaXRfY291bnQ8cC0+UklPQ29uZi5TdGFydHVwVGltZSkgJiYgCi0JCQkJCQkhUldPUkQoUGFybU1hcFAtPmluaXRfZG9uZSk7IHdhaXRfY291bnQrKyApIHsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIldhaXRpbmcgZm9yIGluaXRfZG9uZVxuIik7Ci0JCQlkZWxheShIb3N0UCwgSFVORFJFRF9NUyk7CisJCWZvciAod2FpdF9jb3VudCA9IDA7ICh3YWl0X2NvdW50IDwgcC0+UklPQ29uZi5TdGFydHVwVGltZSkgJiYgIXJlYWR3KCZQYXJtTWFwUC0+aW5pdF9kb25lKTsgd2FpdF9jb3VudCsrKSB7CisJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIldhaXRpbmcgZm9yIGluaXRfZG9uZVxuIik7CisJCQltZGVsYXkoMTAwKTsKIAkJfQotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJPSyEgaW5pdF9kb25lIVxuIik7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiT0shIGluaXRfZG9uZSFcbiIpOwogCi0JCWlmIChSV09SRChQYXJtTWFwUC0+ZXJyb3IpICE9IEVfTk9fRVJST1IgfHwgCi0JCQkJCQkJIVJXT1JEKFBhcm1NYXBQLT5pbml0X2RvbmUpICkgewotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiUklPIE1lc2cgUnVuIEZhaWwgJXNcbiIsIEhvc3RQLT5OYW1lKTsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlRpbWVkb3V0IHdhaXRpbmcgZm9yIGluaXRfZG9uZVxuIik7Ci0JCQlIT1NUX0RJU0FCTEU7CisJCWlmIChyZWFkdygmUGFybU1hcFAtPmVycm9yKSAhPSBFX05PX0VSUk9SIHx8ICFyZWFkdygmUGFybU1hcFAtPmluaXRfZG9uZSkpIHsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiUklPIE1lc2cgUnVuIEZhaWwgJXNcbiIsIEhvc3RQLT5OYW1lKTsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiVGltZWRvdXQgd2FpdGluZyBmb3IgaW5pdF9kb25lXG4iKTsKKwkJCUhvc3RQLT5GbGFncyAmPSB+UlVOX1NUQVRFOworCQkJSG9zdFAtPkZsYWdzIHw9IFJDX1NUVUZGRUQ7CisJCQlSSU9Ib3N0UmVzZXQoIEhvc3RQLT5UeXBlLCAoc3RydWN0IERwUmFtICopSG9zdFAtPkNhcmRQLCBIb3N0UC0+U2xvdCApOworCQkJY29udGludWU7CiAJCX0KIAotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJHb3QgaW5pdF9kb25lXG4iKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJHb3QgaW5pdF9kb25lXG4iKTsKIAogCQkvKgotCQkqKiBJdCBydW5zISBJdCBydW5zIQotCQkqLwotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJIb3N0IElEICV4IFJ1bm5pbmdcbiIsSG9zdFAtPlVuaXF1ZU51bSk7CisJCSAqKiBJdCBydW5zISBJdCBydW5zIQorCQkgKi8KKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJIb3N0IElEICV4IFJ1bm5pbmdcbiIsIEhvc3RQLT5VbmlxdWVOdW0pOwogCiAJCS8qCi0JCSoqIHNldCB0aGUgdGltZSBwZXJpb2QgYmV0d2VlbiBpbnRlcnJ1cHRzLgotCQkqLwotCQlXV09SRChQYXJtTWFwUC0+dGltZXIsIChzaG9ydClwLT5SSU9Db25mLlRpbWVyICk7CisJCSAqKiBzZXQgdGhlIHRpbWUgcGVyaW9kIGJldHdlZW4gaW50ZXJydXB0cy4KKwkJICovCisJCXdyaXRldyhwLT5SSU9Db25mLlRpbWVyLCAmUGFybU1hcFAtPnRpbWVyKTsKIAogCQkvKgotCQkqKiBUcmFuc2xhdGUgYWxsIHRoZSAxNiBiaXQgcG9pbnRlcnMgaW4gdGhlIF9fUGFybU1hcFIgaW50bwotCQkqKiAzMiBiaXQgcG9pbnRlcnMgZm9yIHRoZSBkcml2ZXIuCi0JCSovCi0JCUhvc3RQLT5QYXJtTWFwUAkgPQlQYXJtTWFwUDsKLQkJSG9zdFAtPlBoYlAJCSA9CShQSEIqKVJJT19QVFIoQ2FkLFJXT1JEKFBhcm1NYXBQLT5waGJfcHRyKSk7Ci0JCUhvc3RQLT5SdXBQCQkgPQkoUlVQKilSSU9fUFRSKENhZCxSV09SRChQYXJtTWFwUC0+cnVwcykpOwotCQlIb3N0UC0+UGhiTnVtUAkgID0gKHVzaG9ydCopUklPX1BUUihDYWQsUldPUkQoUGFybU1hcFAtPnBoYl9udW1fcHRyKSk7Ci0JCUhvc3RQLT5MaW5rU3RyUAkgPQkoTFBCKilSSU9fUFRSKENhZCxSV09SRChQYXJtTWFwUC0+bGlua19zdHJfcHRyKSk7CisJCSAqKiBUcmFuc2xhdGUgYWxsIHRoZSAxNiBiaXQgcG9pbnRlcnMgaW4gdGhlIF9fUGFybU1hcFIgaW50bworCQkgKiogMzIgYml0IHBvaW50ZXJzIGZvciB0aGUgZHJpdmVyIGluIGlvcmVtYXAgc3BhY2UuCisJCSAqLworCQlIb3N0UC0+UGFybU1hcFAgPSBQYXJtTWFwUDsKKwkJSG9zdFAtPlBoYlAgPSAoc3RydWN0IFBIQiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBhcm1NYXBQLT5waGJfcHRyKSk7CisJCUhvc3RQLT5SdXBQID0gKHN0cnVjdCBSVVAgKikgUklPX1BUUihDYWQsIHJlYWR3KCZQYXJtTWFwUC0+cnVwcykpOworCQlIb3N0UC0+UGhiTnVtUCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBhcm1NYXBQLT5waGJfbnVtX3B0cikpOworCQlIb3N0UC0+TGlua1N0clAgPSAoc3RydWN0IExQQiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBhcm1NYXBQLT5saW5rX3N0cl9wdHIpKTsKIAogCQkvKgotCQkqKiBwb2ludCB0aGUgVW5peFJ1cHMgYXQgdGhlIHJlYWwgUnVwcwotCQkqLwotCQlmb3IgKCBSdXBOID0gMDsgUnVwTjxNQVhfUlVQOyBSdXBOKysgKSB7Ci0JCQlIb3N0UC0+VW5peFJ1cHNbUnVwTl0uUnVwUAkJPSAmSG9zdFAtPlJ1cFBbUnVwTl07Ci0JCQlIb3N0UC0+VW5peFJ1cHNbUnVwTl0uSWQJCSAgPSBSdXBOKzE7CisJCSAqKiBwb2ludCB0aGUgVW5peFJ1cHMgYXQgdGhlIHJlYWwgUnVwcworCQkgKi8KKwkJZm9yIChSdXBOID0gMDsgUnVwTiA8IE1BWF9SVVA7IFJ1cE4rKykgeworCQkJSG9zdFAtPlVuaXhSdXBzW1J1cE5dLlJ1cFAgPSAmSG9zdFAtPlJ1cFBbUnVwTl07CisJCQlIb3N0UC0+VW5peFJ1cHNbUnVwTl0uSWQgPSBSdXBOICsgMTsKIAkJCUhvc3RQLT5Vbml4UnVwc1tSdXBOXS5CYXNlU3lzUG9ydCA9IE5PX1BPUlQ7CiAJCQlzcGluX2xvY2tfaW5pdCgmSG9zdFAtPlVuaXhSdXBzW1J1cE5dLlJ1cExvY2spOwogCQl9CiAKLQkJZm9yICggUnVwTiA9IDA7IFJ1cE48TElOS1NfUEVSX1VOSVQ7IFJ1cE4rKyApIHsKLQkJCUhvc3RQLT5Vbml4UnVwc1tSdXBOK01BWF9SVVBdLlJ1cFAJPSAmSG9zdFAtPkxpbmtTdHJQW1J1cE5dLnJ1cDsKLQkJCUhvc3RQLT5Vbml4UnVwc1tSdXBOK01BWF9SVVBdLklkICA9IDA7Ci0JCQlIb3N0UC0+VW5peFJ1cHNbUnVwTitNQVhfUlVQXS5CYXNlU3lzUG9ydCA9IE5PX1BPUlQ7Ci0JCQlzcGluX2xvY2tfaW5pdCgmSG9zdFAtPlVuaXhSdXBzW1J1cE4rTUFYX1JVUF0uUnVwTG9jayk7CisJCWZvciAoUnVwTiA9IDA7IFJ1cE4gPCBMSU5LU19QRVJfVU5JVDsgUnVwTisrKSB7CisJCQlIb3N0UC0+VW5peFJ1cHNbUnVwTiArIE1BWF9SVVBdLlJ1cFAgPSAmSG9zdFAtPkxpbmtTdHJQW1J1cE5dLnJ1cDsKKwkJCUhvc3RQLT5Vbml4UnVwc1tSdXBOICsgTUFYX1JVUF0uSWQgPSAwOworCQkJSG9zdFAtPlVuaXhSdXBzW1J1cE4gKyBNQVhfUlVQXS5CYXNlU3lzUG9ydCA9IE5PX1BPUlQ7CisJCQlzcGluX2xvY2tfaW5pdCgmSG9zdFAtPlVuaXhSdXBzW1J1cE4gKyBNQVhfUlVQXS5SdXBMb2NrKTsKIAkJfQogCiAJCS8qCi0JCSoqIHBvaW50IHRoZSBQb3J0UC0+UGhicyBhdCB0aGUgcmVhbCBQaGJzCi0JCSovCi0JCWZvciAoIFBvcnROPXAtPlJJT0ZpcnN0UG9ydHNNYXBwZWQ7IAotCQkJCVBvcnROPHAtPlJJT0xhc3RQb3J0c01hcHBlZCtQT1JUU19QRVJfUlRBOyBQb3J0TisrICkgewotCQkJaWYgKCBwLT5SSU9Qb3J0cFtQb3J0Tl0tPkhvc3RQID09IEhvc3RQICkgeworCQkgKiogcG9pbnQgdGhlIFBvcnRQLT5QaGJzIGF0IHRoZSByZWFsIFBoYnMKKwkJICovCisJCWZvciAoUG9ydE4gPSBwLT5SSU9GaXJzdFBvcnRzTWFwcGVkOyBQb3J0TiA8IHAtPlJJT0xhc3RQb3J0c01hcHBlZCArIFBPUlRTX1BFUl9SVEE7IFBvcnROKyspIHsKKwkJCWlmIChwLT5SSU9Qb3J0cFtQb3J0Tl0tPkhvc3RQID09IEhvc3RQKSB7CiAJCQkJc3RydWN0IFBvcnQgKlBvcnRQID0gcC0+UklPUG9ydHBbUG9ydE5dOwogCQkJCXN0cnVjdCBQSEIgKlBoYlA7CiAJCQkJLyogaW50IG9sZHNwbDsgKi8KIAotCQkJCWlmICggIVBvcnRQLT5NYXBwZWQgKQorCQkJCWlmICghUG9ydFAtPk1hcHBlZCkKIAkJCQkJY29udGludWU7CiAKIAkJCQlQaGJQID0gJkhvc3RQLT5QaGJQW1BvcnRQLT5Ib3N0UG9ydF07CkBAIC02MTAsNjQxICs1NTAsNTIyIEBACiAKIAkJCQlQb3J0UC0+UGhiUCA9IFBoYlA7CiAKLQkJCQlQb3J0UC0+VHhBZGQJPSAoV09SRCAqKVJJT19QVFIoQ2FkLFJXT1JEKFBoYlAtPnR4X2FkZCkpOwotCQkJCVBvcnRQLT5UeFN0YXJ0ICA9IChXT1JEICopUklPX1BUUihDYWQsUldPUkQoUGhiUC0+dHhfc3RhcnQpKTsKLQkJCQlQb3J0UC0+VHhFbmQJPSAoV09SRCAqKVJJT19QVFIoQ2FkLFJXT1JEKFBoYlAtPnR4X2VuZCkpOwotCQkJCVBvcnRQLT5SeFJlbW92ZSA9IChXT1JEICopUklPX1BUUihDYWQsUldPUkQoUGhiUC0+cnhfcmVtb3ZlKSk7Ci0JCQkJUG9ydFAtPlJ4U3RhcnQgID0gKFdPUkQgKilSSU9fUFRSKENhZCxSV09SRChQaGJQLT5yeF9zdGFydCkpOwotCQkJCVBvcnRQLT5SeEVuZAk9IChXT1JEICopUklPX1BUUihDYWQsUldPUkQoUGhiUC0+cnhfZW5kKSk7CisJCQkJUG9ydFAtPlR4QWRkID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnR4X2FkZCkpOworCQkJCVBvcnRQLT5UeFN0YXJ0ID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnR4X3N0YXJ0KSk7CisJCQkJUG9ydFAtPlR4RW5kID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnR4X2VuZCkpOworCQkJCVBvcnRQLT5SeFJlbW92ZSA9ICh1MTYgKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT5yeF9yZW1vdmUpKTsKKwkJCQlQb3J0UC0+UnhTdGFydCA9ICh1MTYgKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT5yeF9zdGFydCkpOworCQkJCVBvcnRQLT5SeEVuZCA9ICh1MTYgKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT5yeF9lbmQpKTsKIAogCQkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCQkJCS8qCi0JCQkJKiogcG9pbnQgdGhlIFVuaXhSdXAgYXQgdGhlIGJhc2UgU3lzUG9ydAotCQkJCSovCi0JCQkJaWYgKCAhKFBvcnROICUgUE9SVFNfUEVSX1JUQSkgKQorCQkJCSAqKiBwb2ludCB0aGUgVW5peFJ1cCBhdCB0aGUgYmFzZSBTeXNQb3J0CisJCQkJICovCisJCQkJaWYgKCEoUG9ydE4gJSBQT1JUU19QRVJfUlRBKSkKIAkJCQkJSG9zdFAtPlVuaXhSdXBzW1BvcnRQLT5SdXBOdW1dLkJhc2VTeXNQb3J0ID0gUG9ydE47CiAJCQl9CiAJCX0KIAotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJTZXQgdGhlIGNhcmQgcnVubmluZy4uLiBcbiIpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlNldCB0aGUgY2FyZCBydW5uaW5nLi4uIFxuIik7CiAJCS8qCi0JCSoqIGxhc3QgdGhpbmcgLSBzaG93IHRoZSB3b3JsZCB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UKLQkJKi8KKwkJICoqIGxhc3QgdGhpbmcgLSBzaG93IHRoZSB3b3JsZCB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UKKwkJICovCiAJCUhvc3RQLT5GbGFncyAmPSB+UlVOX1NUQVRFOwogCQlIb3N0UC0+RmxhZ3MgfD0gUkNfUlVOTklORzsKIAl9CiAJLyoKLQkqKiBNUFggYWx3YXlzIHVzZXMgYSBwb2xsZXIuIFRoaXMgaXMgYWN0dWFsbHkgcGF0Y2hlZCBpbnRvIHRoZSBzeXN0ZW0KLQkqKiBjb25maWd1cmF0aW9uIGFuZCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBlYWNoIGNsb2NrIHRpY2suCi0JKioKLQkqLworCSAqKiBNUFggYWx3YXlzIHVzZXMgYSBwb2xsZXIuIFRoaXMgaXMgYWN0dWFsbHkgcGF0Y2hlZCBpbnRvIHRoZSBzeXN0ZW0KKwkgKiogY29uZmlndXJhdGlvbiBhbmQgY2FsbGVkIGRpcmVjdGx5IGZyb20gZWFjaCBjbG9jayB0aWNrLgorCSAqKgorCSAqLwogCXAtPlJJT1BvbGxpbmcgPSAxOwogCiAJcC0+UklPU3lzdGVtVXArKzsKLQkKLQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJEb25lIGV2ZXJ5dGhpbmcgJXhcbiIsIEhvc3RQLT5JdmVjKTsKLQlmdW5jX2V4aXQgKCk7CisKKwlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIkRvbmUgZXZlcnl0aGluZyAleFxuIiwgSG9zdFAtPkl2ZWMpOworCWZ1bmNfZXhpdCgpOwogCXJldHVybiAwOwogfQogCiAKIAotLyoKLSoqIEJvb3QgYW4gUlRBLiBJZiB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgdGhpcyBib290LCB0aGVuCi0qKiByZXR1cm4gMS4gSWYgd2UgaGF2ZW50LCB0aGVuIHJldHVybiAwLgotKi8KLWludAotUklPQm9vdFJ1cCggcCwgUnVwLCBIb3N0UCwgUGFja2V0UCkKLXN0cnVjdCByaW9faW5mbyAqCXA7Ci11aW50IFJ1cDsKLXN0cnVjdCBIb3N0ICpIb3N0UDsKLXN0cnVjdCBQS1QgKlBhY2tldFA7IAorLyoqCisgKglSSU9Cb290UnVwCQktCUJvb3QgYW4gUlRBCisgKglAcDogcmlvIHdlIGFyZSB3b3JraW5nIHdpdGgKKyAqCUBSdXA6IFJ1cCBudW1iZXIKKyAqCUBIb3N0UDogaG9zdCBvYmplY3QKKyAqCUBQYWNrZXRQOiBwYWNrZXQgdG8gdXNlCisgKgorICoJSWYgd2UgaGF2ZSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIHRoaXMgYm9vdCwgdGhlbgorICoJcmV0dXJuIDEuIElmIHdlIGhhdmVudCwgdGhlbiByZXR1cm4gMC4KKyAqLworCitpbnQgUklPQm9vdFJ1cChzdHJ1Y3QgcmlvX2luZm8gKnAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgc3RydWN0IFBLVCAqUGFja2V0UCkKIHsKLQlzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWQgKilQYWNrZXRQLT5kYXRhOworCXN0cnVjdCBQa3RDbWQgKlBrdENtZFAgPSAoc3RydWN0IFBrdENtZCAqKSBQYWNrZXRQLT5kYXRhOwogCXN0cnVjdCBQa3RDbWRfTSAqUGt0UmVwbHlQOwogCXN0cnVjdCBDbWRCbGsgKkNtZEJsa1A7Ci0JdWludCBzZXF1ZW5jZTsKKwl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7CiAKIAkvKgotCSoqIElmIHdlIGhhdmVuJ3QgYmVlbiB0b2xkIHdoYXQgdG8gYm9vdCwgd2UgY2FuJ3QgYm9vdCBpdC4KLQkqLwotCWlmICggcC0+UklPTnVtQm9vdFBrdHMgPT0gMCApIHsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiTm8gUlRBIGNvZGUgdG8gZG93bmxvYWQgeWV0XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogcmlvX2RwcmludChSSU9fREVCVUdfQk9PVCwgTlVMTCxEQkdfQk9PVCwiSW5jb21pbmcgY29tbWFuZCBwYWNrZXRcbiIpOyAqLwotCS8qIFNob3dQYWNrZXQoIERCR19CT09ULCBQYWNrZXRQICk7ICovCi0KLQkvKgotCSoqIFNwZWNpYWwgY2FzZSBvZiBib290IGNvbXBsZXRlZCAtIGlmIHdlIGdldCBvbmUgb2YgdGhlc2UgdGhlbiB3ZQotCSoqIGRvbid0IG5lZWQgYSBjb21tYW5kIGJsb2NrLiBGb3IgYWxsIG90aGVyIGNhc2VzIHdlIGRvLCBzbyBoYW5kbGUKLQkqKiB0aGlzIGZpcnN0IGFuZCB0aGVuIGdldCBhIGNvbW1hbmQgYmxvY2ssIHRoZW4gaGFuZGxlIGV2ZXJ5IG90aGVyCi0JKiogY2FzZSwgcmVsaW5xdWlzaGluZyB0aGUgY29tbWFuZCBibG9jayBpZiBkaXNhc3RlciBzdHJpa2VzIQotCSovCi0JaWYgKCAoUkJZVEUoUGFja2V0UC0+bGVuKSAmIFBLVF9DTURfQklUKSAmJiAKLQkJCShSQllURShQa3RDbWRQLT5Db21tYW5kKT09Qk9PVF9DT01QTEVURUQpICkKLQkJcmV0dXJuIFJJT0Jvb3RDb21wbGV0ZShwLCBIb3N0UCwgUnVwLCBQa3RDbWRQICk7Ci0KLQkvKgotCSoqIHRyeSB0byB1bmhvb2sgYSBjb21tYW5kIGJsb2NrIGZyb20gdGhlIGNvbW1hbmQgZnJlZSBsaXN0LgotCSovCi0JaWYgKCAhKENtZEJsa1AgPSBSSU9HZXRDbWRCbGsoKSkgKSB7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIk5vIGNvbW1hbmQgYmxvY2tzIHRvIGJvb3QgUlRBISBjb21lIGJhY2sgbGF0ZXIuXG4iKTsKKwkgKiogSWYgd2UgaGF2ZW4ndCBiZWVuIHRvbGQgd2hhdCB0byBib290LCB3ZSBjYW4ndCBib290IGl0LgorCSAqLworCWlmIChwLT5SSU9OdW1Cb290UGt0cyA9PSAwKSB7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiTm8gUlRBIGNvZGUgdG8gZG93bmxvYWQgeWV0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyoKLQkqKiBGaWxsIGluIHRoZSBkZWZhdWx0IGluZm8gb24gdGhlIGNvbW1hbmQgYmxvY2sKLQkqLwotCUNtZEJsa1AtPlBhY2tldC5kZXN0X3VuaXQgPSBSdXAgPCAodXNob3J0KU1BWF9SVVAgPyBSdXAgOiAwOworCSAqKiBTcGVjaWFsIGNhc2Ugb2YgYm9vdCBjb21wbGV0ZWQgLSBpZiB3ZSBnZXQgb25lIG9mIHRoZXNlIHRoZW4gd2UKKwkgKiogZG9uJ3QgbmVlZCBhIGNvbW1hbmQgYmxvY2suIEZvciBhbGwgb3RoZXIgY2FzZXMgd2UgZG8sIHNvIGhhbmRsZQorCSAqKiB0aGlzIGZpcnN0IGFuZCB0aGVuIGdldCBhIGNvbW1hbmQgYmxvY2ssIHRoZW4gaGFuZGxlIGV2ZXJ5IG90aGVyCisJICoqIGNhc2UsIHJlbGlucXVpc2hpbmcgdGhlIGNvbW1hbmQgYmxvY2sgaWYgZGlzYXN0ZXIgc3RyaWtlcyEKKwkgKi8KKwlpZiAoKHJlYWRiKCZQYWNrZXRQLT5sZW4pICYgUEtUX0NNRF9CSVQpICYmIChyZWFkYigmUGt0Q21kUC0+Q29tbWFuZCkgPT0gQk9PVF9DT01QTEVURUQpKQorCQlyZXR1cm4gUklPQm9vdENvbXBsZXRlKHAsIEhvc3RQLCBSdXAsIFBrdENtZFApOworCisJLyoKKwkgKiogVHJ5IHRvIGFsbG9jYXRlIGEgY29tbWFuZCBibG9jay4gVGhpcyBpcyBpbiBrZXJuZWwgc3BhY2UKKwkgKi8KKwlpZiAoIShDbWRCbGtQID0gUklPR2V0Q21kQmxrKCkpKSB7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiTm8gY29tbWFuZCBibG9ja3MgdG8gYm9vdCBSVEEhIGNvbWUgYmFjayBsYXRlci5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqKiBGaWxsIGluIHRoZSBkZWZhdWx0IGluZm8gb24gdGhlIGNvbW1hbmQgYmxvY2sKKwkgKi8KKwlDbWRCbGtQLT5QYWNrZXQuZGVzdF91bml0ID0gUnVwIDwgKHVuc2lnbmVkIHNob3J0KSBNQVhfUlVQID8gUnVwIDogMDsKIAlDbWRCbGtQLT5QYWNrZXQuZGVzdF9wb3J0ID0gQk9PVF9SVVA7Ci0JQ21kQmxrUC0+UGFja2V0LnNyY191bml0ICA9IDA7Ci0JQ21kQmxrUC0+UGFja2V0LnNyY19wb3J0ICA9IEJPT1RfUlVQOworCUNtZEJsa1AtPlBhY2tldC5zcmNfdW5pdCA9IDA7CisJQ21kQmxrUC0+UGFja2V0LnNyY19wb3J0ID0gQk9PVF9SVVA7CiAKIAlDbWRCbGtQLT5QcmVGdW5jUCA9IENtZEJsa1AtPlBvc3RGdW5jUCA9IE5VTEw7Ci0JUGt0UmVwbHlQID0gKHN0cnVjdCBQa3RDbWRfTSAqKUNtZEJsa1AtPlBhY2tldC5kYXRhOworCVBrdFJlcGx5UCA9IChzdHJ1Y3QgUGt0Q21kX00gKikgQ21kQmxrUC0+UGFja2V0LmRhdGE7CiAKIAkvKgotCSoqIHByb2Nlc3MgQ09NTUFORFMgb24gdGhlIGJvb3QgcnVwIQotCSovCi0JaWYgKCBSQllURShQYWNrZXRQLT5sZW4pICYgUEtUX0NNRF9CSVQgKSB7CisJICoqIHByb2Nlc3MgQ09NTUFORFMgb24gdGhlIGJvb3QgcnVwIQorCSAqLworCWlmIChyZWFkYigmUGFja2V0UC0+bGVuKSAmIFBLVF9DTURfQklUKSB7CiAJCS8qCi0JCSoqIFdlIG9ubHkgZXhwZWN0IG9uZSB0eXBlIG9mIGNvbW1hbmQgLSBhIEJPT1RfUkVRVUVTVCEKLQkJKi8KLQkJaWYgKCBSQllURShQa3RDbWRQLT5Db21tYW5kKSAhPSBCT09UX1JFUVVFU1QgKSB7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJVbmV4cGVjdGVkIGNvbW1hbmQgJWQgb24gQk9PVCBSVVAgJWQgb2YgaG9zdCAlZFxuIiwgCi0JCQkJCQlQa3RDbWRQLT5Db21tYW5kLFJ1cCxIb3N0UC1wLT5SSU9Ib3N0cyk7Ci0JCQlTaG93UGFja2V0KCBEQkdfQk9PVCwgUGFja2V0UCApOwotCQkJUklPRnJlZUNtZEJsayggQ21kQmxrUCApOworCQkgKiogV2Ugb25seSBleHBlY3Qgb25lIHR5cGUgb2YgY29tbWFuZCAtIGEgQk9PVF9SRVFVRVNUIQorCQkgKi8KKwkJaWYgKHJlYWRiKCZQa3RDbWRQLT5Db21tYW5kKSAhPSBCT09UX1JFUVVFU1QpIHsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiVW5leHBlY3RlZCBjb21tYW5kICVkIG9uIEJPT1QgUlVQICVkIG9mIGhvc3QgJVpkXG4iLCByZWFkYigmUGt0Q21kUC0+Q29tbWFuZCksIFJ1cCwgSG9zdFAgLSBwLT5SSU9Ib3N0cyk7CisJCQlSSU9GcmVlQ21kQmxrKENtZEJsa1ApOwogCQkJcmV0dXJuIDE7CiAJCX0KIAogCQkvKgotCQkqKiBCdWlsZCBhIEJvb3QgU2VxdWVuY2UgY29tbWFuZCBibG9jawotCQkqKgotCQkqKiAwMi4wMy4xOTk5IEFSRyAtIEVTSUwgMDgyMCBmaXgKLQkJKiogV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gdXNlICJCb290IE1vZGUiLCB3ZSdsbCBhbHdheXMgYWxsb3cKLQkJKiogYm9vdCByZXF1ZXN0cyAtIHRoZSBib290IHdpbGwgbm90IGNvbXBsZXRlIGlmIHRoZSBkZXZpY2UKLQkJKiogYXBwZWFycyBpbiB0aGUgYmluZGluZ3MgdGFibGUuCi0JCSoqIFNvLCB0aGlzIGNvbmRpdGlvbmFsIGlzIG5vdCByZXF1aXJlZCAuLi4KLQkJKioKLQkJaWYgKHAtPlJJT0Jvb3RNb2RlID09IFJDX0JPT1RfTk9ORSkKLQkJCSoqCi0JCQkqKiBJZiB0aGUgc3lzdGVtIGlzIGluIHNsYXZlIG1vZGUsIGFuZCBhIGJvb3QgcmVxdWVzdCBpcwotCQkJKiogcmVjZWl2ZWQsIHNldCBjb21tYW5kIHRvIEJPT1RfQUJPUlQgc28gdGhhdCB0aGUgYm9vdAotCQkJKiogd2lsbCBub3QgY29tcGxldGUuCi0JCQkqKgotCQkJUGt0UmVwbHlQLT5Db21tYW5kCQkJID0gQk9PVF9BQk9SVDsKLQkJZWxzZQotCQkqKgotCQkqKiBXZSdsbCBqdXN0IChhbHdheXMpIHNldCB0aGUgY29tbWFuZCBmaWVsZCBpbiBwYWNrZXQgcmVwbHkKLQkJKiogdG8gYWxsb3cgYW4gYXR0ZW1wdGVkIGJvb3Qgc2VxdWVuY2UgOgotCQkqLworCQkgKiogQnVpbGQgYSBCb290IFNlcXVlbmNlIGNvbW1hbmQgYmxvY2sKKwkJICoqCisJCSAqKiBXZSBubyBsb25nZXIgbmVlZCB0byB1c2UgIkJvb3QgTW9kZSIsIHdlJ2xsIGFsd2F5cyBhbGxvdworCQkgKiogYm9vdCByZXF1ZXN0cyAtIHRoZSBib290IHdpbGwgbm90IGNvbXBsZXRlIGlmIHRoZSBkZXZpY2UKKwkJICoqIGFwcGVhcnMgaW4gdGhlIGJpbmRpbmdzIHRhYmxlLgorCQkgKioKKwkJICoqIFdlJ2xsIGp1c3QgKGFsd2F5cykgc2V0IHRoZSBjb21tYW5kIGZpZWxkIGluIHBhY2tldCByZXBseQorCQkgKiogdG8gYWxsb3cgYW4gYXR0ZW1wdGVkIGJvb3Qgc2VxdWVuY2UgOgorCQkgKi8KIAkJUGt0UmVwbHlQLT5Db21tYW5kID0gQk9PVF9TRVFVRU5DRTsKIAogCQlQa3RSZXBseVAtPkJvb3RTZXF1ZW5jZS5OdW1QYWNrZXRzID0gcC0+UklPTnVtQm9vdFBrdHM7Ci0JCVBrdFJlcGx5UC0+Qm9vdFNlcXVlbmNlLkxvYWRCYXNlICAgPSBwLT5SSU9Db25mLlJ0YUxvYWRCYXNlOwotCQlQa3RSZXBseVAtPkJvb3RTZXF1ZW5jZS5Db2RlU2l6ZSAgID0gcC0+UklPQm9vdENvdW50OworCQlQa3RSZXBseVAtPkJvb3RTZXF1ZW5jZS5Mb2FkQmFzZSA9IHAtPlJJT0NvbmYuUnRhTG9hZEJhc2U7CisJCVBrdFJlcGx5UC0+Qm9vdFNlcXVlbmNlLkNvZGVTaXplID0gcC0+UklPQm9vdENvdW50OwogCi0JCUNtZEJsa1AtPlBhY2tldC5sZW4JCQkJPSBCT09UX1NFUVVFTkNFX0xFTiB8IFBLVF9DTURfQklUOworCQlDbWRCbGtQLT5QYWNrZXQubGVuID0gQk9PVF9TRVFVRU5DRV9MRU4gfCBQS1RfQ01EX0JJVDsKIAotCQliY29weSgiQk9PVCIsKHZvaWQgKikmQ21kQmxrUC0+UGFja2V0LmRhdGFbQk9PVF9TRVFVRU5DRV9MRU5dLDQpOworCQltZW1jcHkoKHZvaWQgKikgJkNtZEJsa1AtPlBhY2tldC5kYXRhW0JPT1RfU0VRVUVOQ0VfTEVOXSwgIkJPT1QiLCA0KTsKIAotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJCb290IFJUQSBvbiBIb3N0ICVkIFJ1cCAlZCAtICVkICgweCV4KSBwYWNrZXRzIHRvIDB4JXhcbiIsCi0JCQlIb3N0UC1wLT5SSU9Ib3N0cywgUnVwLCBwLT5SSU9OdW1Cb290UGt0cywgcC0+UklPTnVtQm9vdFBrdHMsIAotCQkJCQkJCQlwLT5SSU9Db25mLlJ0YUxvYWRCYXNlKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJCb290IFJUQSBvbiBIb3N0ICVaZCBSdXAgJWQgLSAlZCAoMHgleCkgcGFja2V0cyB0byAweCV4XG4iLCBIb3N0UCAtIHAtPlJJT0hvc3RzLCBSdXAsIHAtPlJJT051bUJvb3RQa3RzLCBwLT5SSU9OdW1Cb290UGt0cywgcC0+UklPQ29uZi5SdGFMb2FkQmFzZSk7CiAKIAkJLyoKLQkJKiogSWYgdGhpcyBob3N0IGlzIGluIHNsYXZlIG1vZGUsIHNlbmQgdGhlIFJUQSBhbiBpbnZhbGlkIGJvb3QKLQkJKiogc2VxdWVuY2UgY29tbWFuZCBibG9jayB0byBmb3JjZSBpdCB0byBraWxsIHRoZSBib290LiBXZSB3YWl0Ci0JCSoqIGZvciBoYWxmIGEgc2Vjb25kIGJlZm9yZSBzZW5kaW5nIHRoaXMgcGFja2V0IHRvIHByZXZlbnQgdGhlIFJUQQotCQkqKiBhdHRlbXB0aW5nIHRvIGJvb3QgdG9vIG9mdGVuLiBUaGUgbWFzdGVyIGhvc3Qgc2hvdWxkIHRoZW4gZ3JhYgotCQkqKiB0aGUgUlRBIGFuZCBtYWtlIGl0IGl0cyBvd24uCi0JCSovCisJCSAqKiBJZiB0aGlzIGhvc3QgaXMgaW4gc2xhdmUgbW9kZSwgc2VuZCB0aGUgUlRBIGFuIGludmFsaWQgYm9vdAorCQkgKiogc2VxdWVuY2UgY29tbWFuZCBibG9jayB0byBmb3JjZSBpdCB0byBraWxsIHRoZSBib290LiBXZSB3YWl0CisJCSAqKiBmb3IgaGFsZiBhIHNlY29uZCBiZWZvcmUgc2VuZGluZyB0aGlzIHBhY2tldCB0byBwcmV2ZW50IHRoZSBSVEEKKwkJICoqIGF0dGVtcHRpbmcgdG8gYm9vdCB0b28gb2Z0ZW4uIFRoZSBtYXN0ZXIgaG9zdCBzaG91bGQgdGhlbiBncmFiCisJCSAqKiB0aGUgUlRBIGFuZCBtYWtlIGl0IGl0cyBvd24uCisJCSAqLwogCQlwLT5SSU9Cb290aW5nKys7Ci0JCVJJT1F1ZXVlQ21kQmxrKCBIb3N0UCwgUnVwLCBDbWRCbGtQICk7CisJCVJJT1F1ZXVlQ21kQmxrKEhvc3RQLCBSdXAsIENtZEJsa1ApOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKgotCSoqIEl0IGlzIGEgcmVxdWVzdCBmb3IgYm9vdCBkYXRhLgotCSovCi0Jc2VxdWVuY2UgPSBSV09SRChQa3RDbWRQLT5TZXF1ZW5jZSk7CisJICoqIEl0IGlzIGEgcmVxdWVzdCBmb3IgYm9vdCBkYXRhLgorCSAqLworCXNlcXVlbmNlID0gcmVhZHcoJlBrdENtZFAtPlNlcXVlbmNlKTsKIAotCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIkJvb3QgYmxvY2sgJWQgb24gSG9zdCAlZCBSdXAlZFxuIixzZXF1ZW5jZSxIb3N0UC1wLT5SSU9Ib3N0cyxSdXApOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiQm9vdCBibG9jayAlZCBvbiBIb3N0ICVaZCBSdXAlZFxuIiwgc2VxdWVuY2UsIEhvc3RQIC0gcC0+UklPSG9zdHMsIFJ1cCk7CiAKLQlpZiAoIHNlcXVlbmNlID49IHAtPlJJT051bUJvb3RQa3RzICkgewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJHb3QgYSByZXF1ZXN0IGZvciBwYWNrZXQgJWQsIG1heCBpcyAlZFxuIiwgc2VxdWVuY2UsIAotCQkJCQlwLT5SSU9OdW1Cb290UGt0cyk7Ci0JCVNob3dQYWNrZXQoIERCR19CT09ULCBQYWNrZXRQICk7CisJaWYgKHNlcXVlbmNlID49IHAtPlJJT051bUJvb3RQa3RzKSB7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiR290IGEgcmVxdWVzdCBmb3IgcGFja2V0ICVkLCBtYXggaXMgJWRcbiIsIHNlcXVlbmNlLCBwLT5SSU9OdW1Cb290UGt0cyk7CiAJfQogCiAJUGt0UmVwbHlQLT5TZXF1ZW5jZSA9IHNlcXVlbmNlOwotCi0JYmNvcHkoIHAtPlJJT0Jvb3RQYWNrZXRzWyBwLT5SSU9OdW1Cb290UGt0cyAtIHNlcXVlbmNlIC0gMSBdLCAKLQkJCQlQa3RSZXBseVAtPkJvb3REYXRhLCBSVEFfQk9PVF9EQVRBX1NJWkUgKTsKLQorCW1lbWNweShQa3RSZXBseVAtPkJvb3REYXRhLCBwLT5SSU9Cb290UGFja2V0c1twLT5SSU9OdW1Cb290UGt0cyAtIHNlcXVlbmNlIC0gMV0sIFJUQV9CT09UX0RBVEFfU0laRSk7CiAJQ21kQmxrUC0+UGFja2V0LmxlbiA9IFBLVF9NQVhfREFUQV9MRU47Ci0JU2hvd1BhY2tldCggREJHX0JPT1QsICZDbWRCbGtQLT5QYWNrZXQgKTsKLQlSSU9RdWV1ZUNtZEJsayggSG9zdFAsIFJ1cCwgQ21kQmxrUCApOworCVJJT1F1ZXVlQ21kQmxrKEhvc3RQLCBSdXAsIENtZEJsa1ApOwogCXJldHVybiAxOwogfQogCi0vKgotKiogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbiBSVEEgYmVlbiBib290ZWQuCi0qKiBJZiBib290ZWQgYnkgYSBob3N0LCBIb3N0UC0+SG9zdFVuaXF1ZU51bSBpcyB0aGUgYm9vdGluZyBob3N0LgotKiogSWYgYm9vdGVkIGJ5IGFuIFJUQSwgSG9zdFAtPk1hcHBpbmdbUnVwXS5SdGFVbmlxdWVOdW0gaXMgdGhlIGJvb3RpbmcgUlRBLgotKiogUnRhVW5pcSBpcyB0aGUgYm9vdGVkIFJUQS4KLSovCi1zdGF0aWMgaW50IFJJT0Jvb3RDb21wbGV0ZSggc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHVpbnQgUnVwLCBzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQICkKLXsKLQlzdHJ1Y3QgTWFwCSpNYXBQID0gTlVMTDsKLQlzdHJ1Y3QgTWFwCSpNYXBQMiA9IE5VTEw7Ci0JaW50CUZsYWc7Ci0JaW50CWZvdW5kOwotCWludAlob3N0LCBydGE7Ci0JaW50CUVtcHR5U2xvdCA9IC0xOwotCWludAllbnRyeSwgZW50cnkyOwotCWNoYXIJKk15VHlwZSwgKk15TmFtZTsKLQl1aW50CU15TGluazsKLQl1c2hvcnQJUnRhVHlwZTsKLQl1aW50CVJ0YVVuaXEgPSAoUkJZVEUoUGt0Q21kUC0+VW5pcU51bVswXSkpICsKLQkJCSAgKFJCWVRFKFBrdENtZFAtPlVuaXFOdW1bMV0pIDw8IDgpICsKLQkJCSAgKFJCWVRFKFBrdENtZFAtPlVuaXFOdW1bMl0pIDw8IDE2KSArCi0JCQkgIChSQllURShQa3RDbWRQLT5VbmlxTnVtWzNdKSA8PCAyNCk7CisvKioKKyAqCVJJT0Jvb3RDb21wbGV0ZQkJLQlSVEEgYm9vdCBpcyBkb25lCisgKglAcDogUklPIHdlIGFyZSB3b3JraW5nIHdpdGgKKyAqCUBIb3N0UDogSG9zdCBzdHJ1Y3R1cmUKKyAqCUBSdXA6IFJVUCBiZWluZyB1c2VkCisgKglAUGt0Q21kUDogUGFja2V0IGNvbW1hbmQgdGhhdCB3YXMgdXNlZAorICoKKyAqCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gUlRBIGJlZW4gYm9vdGVkLgorICoJSWYgYm9vdGVkIGJ5IGEgaG9zdCwgSG9zdFAtPkhvc3RVbmlxdWVOdW0gaXMgdGhlIGJvb3RpbmcgaG9zdC4KKyAqCUlmIGJvb3RlZCBieSBhbiBSVEEsIEhvc3RQLT5NYXBwaW5nW1J1cF0uUnRhVW5pcXVlTnVtIGlzIHRoZSBib290aW5nIFJUQS4KKyAqCVJ0YVVuaXEgaXMgdGhlIGJvb3RlZCBSVEEuCisgKi8KIAotCS8qIFdhcyBSSU9Cb290aW5nLS0gLiBUaGF0J3MgYmFkLiBJZiBhbiBSVEEgc2VuZHMgdHdvIG9mIHRoZW0sIHRoZQotCSAgIGRyaXZlciB3aWxsIG5ldmVyIHRoaW5rIHRoYXQgdGhlIFJUQSBoYXMgYm9vdGVkLi4uIC0tIFJFVyAqLworc3RhdGljIGludCBSSU9Cb290Q29tcGxldGUoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBQa3RDbWQgKlBrdENtZFApCit7CisJc3RydWN0IE1hcCAqTWFwUCA9IE5VTEw7CisJc3RydWN0IE1hcCAqTWFwUDIgPSBOVUxMOworCWludCBGbGFnOworCWludCBmb3VuZDsKKwlpbnQgaG9zdCwgcnRhOworCWludCBFbXB0eVNsb3QgPSAtMTsKKwlpbnQgZW50cnksIGVudHJ5MjsKKwljaGFyICpNeVR5cGUsICpNeU5hbWU7CisJdW5zaWduZWQgaW50IE15TGluazsKKwl1bnNpZ25lZCBzaG9ydCBSdGFUeXBlOworCXUzMiBSdGFVbmlxID0gKHJlYWRiKCZQa3RDbWRQLT5VbmlxTnVtWzBdKSkgKyAocmVhZGIoJlBrdENtZFAtPlVuaXFOdW1bMV0pIDw8IDgpICsgKHJlYWRiKCZQa3RDbWRQLT5VbmlxTnVtWzJdKSA8PCAxNikgKyAocmVhZGIoJlBrdENtZFAtPlVuaXFOdW1bM10pIDw8IDI0KTsKKwogCXAtPlJJT0Jvb3RpbmcgPSAwOwogCi0JcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiUlRBIEJvb3QgY29tcGxldGVkIC0gQm9vdEluUHJvZ3Jlc3Mgbm93ICVkXG4iLCBwLT5SSU9Cb290aW5nKTsKKwlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlJUQSBCb290IGNvbXBsZXRlZCAtIEJvb3RJblByb2dyZXNzIG5vdyAlZFxuIiwgcC0+UklPQm9vdGluZyk7CiAKIAkvKgotCSoqIERldGVybWluZSB0eXBlIG9mIHVuaXQgKDE2LzggcG9ydCBSVEEpLgotCSovCisJICoqIERldGVybWluZSB0eXBlIG9mIHVuaXQgKDE2LzggcG9ydCBSVEEpLgorCSAqLworCiAJUnRhVHlwZSA9IEdldFVuaXRUeXBlKFJ0YVVuaXEpOwotICAgICAgICBpZiAoIFJ1cCA+PSAodXNob3J0KU1BWF9SVVAgKSB7Ci0JICAgIHJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlJJTzogSG9zdCAlcyBoYXMgYm9vdGVkIGFuIFJUQSglZCkgb24gbGluayAlY1xuIiwKLQkgICAgIEhvc3RQLT5OYW1lLCA4ICogUnRhVHlwZSwgUkJZVEUoUGt0Q21kUC0+TGlua051bSkrJ0EnKTsKLQl9IGVsc2UgewotCSAgICByaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJSSU86IFJUQSAlcyBoYXMgYm9vdGVkIGFuIFJUQSglZCkgb24gbGluayAlY1xuIiwKLQkgICAgIEhvc3RQLT5NYXBwaW5nW1J1cF0uTmFtZSwgOCAqIFJ0YVR5cGUsCi0JICAgICBSQllURShQa3RDbWRQLT5MaW5rTnVtKSsnQScpOwotCX0KLQotCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlVuaXFOdW0gaXMgMHgleFxuIixSdGFVbmlxKTsKLQotICAgICAgICBpZiAoICggUnRhVW5pcSA9PSAweDAwMDAwMDAwICkgfHwgKCBSdGFVbmlxID09IDB4ZmZmZmZmZmYgKSApCi0JewotCSAgICByaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJJbGxlZ2FsIFJUQSBVbmlxIE51bWJlclxuIik7Ci0JICAgIHJldHVybiBUUlVFOwotCX0KLQotCS8qCi0JKiogSWYgdGhpcyBSVEEgaGFzIGp1c3QgYm9vdGVkIGFuIFJUQSB3aGljaCBkb2Vzbid0IGJlbG9uZyB0byB0aGlzCi0JKiogc3lzdGVtLCBvciB0aGUgc3lzdGVtIGlzIGluIHNsYXZlIG1vZGUsIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZQotCSoqIGEgbmV3IHRhYmxlIGVudHJ5IGZvciBpdC4KLQkqLwotCWlmICghUklPQm9vdE9rKHAsIEhvc3RQLCBSdGFVbmlxKSkKLQl7Ci0JICAgIE15TGluayA9IFJCWVRFKFBrdENtZFAtPkxpbmtOdW0pOwotCSAgICBpZiAoUnVwIDwgKHVzaG9ydCkgTUFYX1JVUCkKLQkgICAgewotCQkvKgotCQkqKiBSdGFVbmlxIHdhcyBjbG9uZSBib290ZWQgKGJ5IHRoaXMgUlRBKS4gSW5zdHJ1Y3QgdGhpcyBSVEEKLQkJKiogdG8gaG9sZCBvZmYgZnVydGhlciBhdHRlbXB0cyB0byBib290IG9uIHRoaXMgbGluayBmb3IgMzAKLQkJKiogc2Vjb25kcy4KLQkJKi8KLQkJaWYgKFJJT1N1c3BlbmRCb290UnRhKEhvc3RQLCBIb3N0UC0+TWFwcGluZ1tSdXBdLklELCBNeUxpbmspKQotCQl7Ci0JCSAgICByaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJSVEEgZmFpbGVkIHRvIHN1c3BlbmQgYm9vdGluZyBvbiBsaW5rICVjXG4iLAotCQkgICAgICdBJyArIE15TGluayk7Ci0JCX0KLQkgICAgfQotCSAgICBlbHNlCi0JICAgIHsKLQkJLyoKLQkJKiogUnRhVW5pcSB3YXMgYm9vdGVkIGJ5IHRoaXMgaG9zdC4gU2V0IHRoZSBib290aW5nIGxpbmsKLQkJKiogdG8gaG9sZCBvZmYgZm9yIDMwIHNlY29uZHMgdG8gZ2l2ZSBhbm90aGVyIHVuaXQgYQotCQkqKiBjaGFuY2UgdG8gYm9vdCBpdC4KLQkJKi8KLQkJV1dPUkQoSG9zdFAtPkxpbmtTdHJQW015TGlua10uV2FpdE5vQm9vdCwgMzApOwotCSAgICB9Ci0JICAgIHJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlJUQSAleCBub3Qgb3duZWQgLSBzdXNwZW5kIGJvb3RpbmcgZG93biBsaW5rICVjIG9uIHVuaXQgJXhcbiIsCi0JICAgICAgUnRhVW5pcSwgJ0EnICsgTXlMaW5rLCBIb3N0UC0+TWFwcGluZ1tSdXBdLlJ0YVVuaXF1ZU51bSk7Ci0JICAgIHJldHVybiBUUlVFOwotCX0KLQotCS8qCi0JKiogQ2hlY2sgZm9yIGEgU0xPVF9JTl9VU0UgZW50cnkgZm9yIHRoaXMgUlRBIGF0dGFjaGVkIHRvIHRoZQotCSoqIGN1cnJlbnQgaG9zdCBjYXJkIGluIHRoZSBkcml2ZXIgdGFibGUuCi0JKioKLQkqKiBJZiBpdCBleGlzdHMsIG1ha2UgYSBub3RlIHRoYXQgd2UgaGF2ZSBib290ZWQgaXQuIE90aGVyIHBhcnRzIG9mCi0JKiogdGhlIGRyaXZlciBhcmUgaW50ZXJlc3RlZCBpbiB0aGlzIGluZm9ybWF0aW9uIGF0IGEgbGF0ZXIgZGF0ZSwKLQkqKiBpbiBwYXJ0aWN1bGFyIHdoZW4gdGhlIGJvb3RpbmcgUlRBIGFza3MgZm9yIGFuIElEIGZvciB0aGlzIHVuaXQsCi0JKiogd2UgbXVzdCBoYXZlIHNldCB0aGUgQk9PVEVEIGZsYWcsIGFuZCB0aGUgTkVXQk9PVCBmbGFnIGlzIHVzZWQKLQkqKiB0byBmb3JjZSBhbiBvcGVuIG9uIGFueSBwb3J0cyB0aGF0IHdoZXJlIHByZXZpb3VzbHkgb3BlbiBvbiB0aGlzCi0JKiogdW5pdC4KLQkqLwotICAgICAgICBmb3IgKCBlbnRyeT0wOyBlbnRyeTxNQVhfUlVQOyBlbnRyeSsrICkKLQl7Ci0JICAgIHVpbnQgc3lzcG9ydDsKLQotCSAgICBpZiAoKEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5GbGFncyAmIFNMT1RfSU5fVVNFKSAmJiAKLQkgICAgICAgKEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5SdGFVbmlxdWVOdW09PVJ0YVVuaXEpKQotCSAgICB7Ci0JICAgICAgICBIb3N0UC0+TWFwcGluZ1tlbnRyeV0uRmxhZ3MgfD0gUlRBX0JPT1RFRHxSVEFfTkVXQk9PVDsKLSNpZmRlZiBORUVEX1RPX0ZJWAotCQlSSU9fU1ZfQlJPQURDQVNUKEhvc3RQLT5zdkZsYWdzW2VudHJ5XSk7Ci0jZW5kaWYKLQkJaWYgKCAoc3lzcG9ydD1Ib3N0UC0+TWFwcGluZ1tlbnRyeV0uU3lzUG9ydCkgIT0gTk9fUE9SVCApCi0JCXsKLQkJICAgaWYgKCBzeXNwb3J0IDwgcC0+UklPRmlyc3RQb3J0c0Jvb3RlZCApCi0JCQlwLT5SSU9GaXJzdFBvcnRzQm9vdGVkID0gc3lzcG9ydDsKLQkJICAgaWYgKCBzeXNwb3J0ID4gcC0+UklPTGFzdFBvcnRzQm9vdGVkICkKLQkJCXAtPlJJT0xhc3RQb3J0c0Jvb3RlZCA9IHN5c3BvcnQ7Ci0JCSAgIC8qCi0JCSAgICoqIEZvciBhIDE2IHBvcnQgUlRBLCBjaGVjayB0aGUgc2Vjb25kIGJhbmsgb2YgOCBwb3J0cwotCQkgICAqLwotCQkgICBpZiAoUnRhVHlwZSA9PSBUWVBFX1JUQTE2KQotCQkgICB7Ci0JCQllbnRyeTIgPSBIb3N0UC0+TWFwcGluZ1tlbnRyeV0uSUQyIC0gMTsKLQkJCUhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uRmxhZ3MgfD0gUlRBX0JPT1RFRHxSVEFfTkVXQk9PVDsKLSNpZmRlZiBORUVEX1RPX0ZJWAotCQkJUklPX1NWX0JST0FEQ0FTVChIb3N0UC0+c3ZGbGFnc1tlbnRyeTJdKTsKLSNlbmRpZgotCQkJc3lzcG9ydCA9IEhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uU3lzUG9ydDsKLQkJCWlmICggc3lzcG9ydCA8IHAtPlJJT0ZpcnN0UG9ydHNCb290ZWQgKQotCQkJICAgIHAtPlJJT0ZpcnN0UG9ydHNCb290ZWQgPSBzeXNwb3J0OwotCQkJaWYgKCBzeXNwb3J0ID4gcC0+UklPTGFzdFBvcnRzQm9vdGVkICkKLQkJCSAgICBwLT5SSU9MYXN0UG9ydHNCb290ZWQgPSBzeXNwb3J0OwotCQkgICB9Ci0JCX0KLQkJaWYgKFJ0YVR5cGUgPT0gVFlQRV9SVEExNikgewotCQkgICByaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJSVEEgd2lsbCBiZSBnaXZlbiBJRHMgJWQrJWRcbiIsCi0JCSAgICBlbnRyeSsxLCBlbnRyeTIrMSk7Ci0JCX0gZWxzZSB7Ci0JCSAgIHJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlJUQSB3aWxsIGJlIGdpdmVuIElEICVkXG4iLGVudHJ5KzEpOwotCQl9Ci0JCXJldHVybiBUUlVFOwotCSAgICB9Ci0JfQotCi0JcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiUlRBIG5vdCBjb25maWd1cmVkIGZvciB0aGlzIGhvc3RcbiIpOwotCi0JaWYgKCBSdXAgPj0gKHVzaG9ydClNQVhfUlVQICkKLQl7Ci0JICAgIC8qCi0JICAgICoqIEl0IHdhcyBhIGhvc3QgdGhhdCBkaWQgdGhlIGJvb3RpbmcKLQkgICAgKi8KLQkgICAgTXlUeXBlID0gIkhvc3QiOwotCSAgICBNeU5hbWUgPSBIb3N0UC0+TmFtZTsKLQl9CisJaWYgKFJ1cCA+PSAodW5zaWduZWQgc2hvcnQpIE1BWF9SVVApCisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiUklPOiBIb3N0ICVzIGhhcyBib290ZWQgYW4gUlRBKCVkKSBvbiBsaW5rICVjXG4iLCBIb3N0UC0+TmFtZSwgOCAqIFJ0YVR5cGUsIHJlYWRiKCZQa3RDbWRQLT5MaW5rTnVtKSArICdBJyk7CiAJZWxzZQotCXsKLQkgICAgLyoKLQkgICAgKiogSXQgd2FzIGFuIFJUQSB0aGF0IGRpZCB0aGUgYm9vdGluZwotCSAgICAqLwotCSAgICBNeVR5cGUgPSAiUlRBIjsKLQkgICAgTXlOYW1lID0gSG9zdFAtPk1hcHBpbmdbUnVwXS5OYW1lOwotCX0KLQlNeUxpbmsgPSBSQllURShQa3RDbWRQLT5MaW5rTnVtKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJSSU86IFJUQSAlcyBoYXMgYm9vdGVkIGFuIFJUQSglZCkgb24gbGluayAlY1xuIiwgSG9zdFAtPk1hcHBpbmdbUnVwXS5OYW1lLCA4ICogUnRhVHlwZSwgcmVhZGIoJlBrdENtZFAtPkxpbmtOdW0pICsgJ0EnKTsKIAotCS8qCi0JKiogVGhlcmUgaXMgbm8gU0xPVF9JTl9VU0UgZW50cnkgZm9yIHRoaXMgUlRBIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50Ci0JKiogaG9zdCBjYXJkIGluIHRoZSBkcml2ZXIgdGFibGUuCi0JKioKLQkqKiBDaGVjayBmb3IgYSBTTE9UX1RFTlRBVElWRSBlbnRyeSBmb3IgdGhpcyBSVEEgYXR0YWNoZWQgdG8gdGhlCi0JKiogY3VycmVudCBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KLQkqKgotCSoqIElmIHdlIGZpbmQgb25lLCB0aGVuIHdlIHJlLXVzZSB0aGF0IHNsb3QuCi0JKi8KLQlmb3IgKCBlbnRyeT0wOyBlbnRyeTxNQVhfUlVQOyBlbnRyeSsrICkKLQl7Ci0JICAgIGlmICggKEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5GbGFncyAmIFNMT1RfVEVOVEFUSVZFKSAmJgotCQkgKEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5SdGFVbmlxdWVOdW0gPT0gUnRhVW5pcSkgKQotCSAgICB7Ci0JCWlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpCi0JCXsKLQkJICAgIGVudHJ5MiA9IEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5JRDIgLSAxOwotCQkgICAgaWYgKCAoSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5GbGFncyAmIFNMT1RfVEVOVEFUSVZFKSAmJgotCQkJIChIb3N0UC0+TWFwcGluZ1tlbnRyeTJdLlJ0YVVuaXF1ZU51bSA9PSBSdGFVbmlxKSApCi0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJGb3VuZCBwcmV2aW91cyB0ZW50YXRpdmUgc2xvdHMgKCVkKyVkKVxuIiwKLQkJCSBlbnRyeSwgZW50cnkyKTsKLQkJICAgIGVsc2UKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWVsc2UKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIkZvdW5kIHByZXZpb3VzIHRlbnRhdGl2ZSBzbG90ICglZClcbiIsZW50cnkpOwotCQlpZiAoISBwLT5SSU9Ob01lc3NhZ2UpCi0JCSAgICBjcHJpbnRmKCJSVEEgY29ubmVjdGVkIHRvICVzICclcycgKCVjKSBub3QgY29uZmlndXJlZC5cbiIsTXlUeXBlLE15TmFtZSxNeUxpbmsrJ0EnKTsKLQkJcmV0dXJuIFRSVUU7Ci0JICAgIH0KKwlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlVuaXFOdW0gaXMgMHgleFxuIiwgUnRhVW5pcSk7CisKKwlpZiAoUnRhVW5pcSA9PSAweDAwMDAwMDAwIHx8IFJ0YVVuaXEgPT0gMHhmZmZmZmZmZikgeworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIklsbGVnYWwgUlRBIFVuaXEgTnVtYmVyXG4iKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyoKLQkqKiBUaGVyZSBpcyBubyBTTE9UX0lOX1VTRSBvciBTTE9UX1RFTlRBVElWRSBlbnRyeSBmb3IgdGhpcyBSVEEKLQkqKiBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KLQkqKgotCSoqIENoZWNrIGlmIHRoZXJlIGlzIGEgU0xPVF9JTl9VU0Ugb3IgU0xPVF9URU5UQVRJVkUgZW50cnkgb24gYW5vdGhlcgotCSoqIGhvc3QgZm9yIHRoaXMgUlRBIGluIHRoZSBkcml2ZXIgdGFibGUuCi0JKioKLQkqKiBGb3IgYSBTTE9UX0lOX1VTRSBlbnRyeSBvbiBhbm90aGVyIGhvc3QsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSBSVEEKLQkqKiBlbnRyeSBmcm9tIHRoZSBvdGhlciBob3N0IGFuZCBhZGQgaXQgdG8gdGhpcyBob3N0ICh1c2luZyBzb21lIG9mCi0JKiogdGhlIGZ1bmN0aW9ucyBmcm9tIHRhYmxlLmMgd2hpY2ggZG8gdGhpcykuCi0JKiogRm9yIGEgU0xPVF9URU5UQVRJVkUgZW50cnkgb24gYW5vdGhlciBob3N0LCB3ZSBtdXN0IGNvcGUgd2l0aCB0aGUKLQkqKiBmb2xsb3dpbmcgc2NlbmFyaW86Ci0JKioKLQkqKiArIFBsdWcgOCBwb3J0IFJUQSBpbnRvIGhvc3QgQS4gKFRoaXMgY3JlYXRlcyBTTE9UX1RFTlRBVElWRSBlbnRyeQotCSoqICAgaW4gdGFibGUpCi0JKiogKyBVbnBsdWcgUlRBIGFuZCBwbHVnIGludG8gaG9zdCBCLiAoV2Ugbm93IGhhdmUgMiBTTE9UX1RFTlRBVElWRQotCSoqICAgZW50cmllcykKLQkqKiArIENvbmZpZ3VyZSBSVEEgb24gaG9zdCBCLiAoVGhpcyBzbG90IG5vdyBiZWNvbWVzIFNMT1RfSU5fVVNFKQotCSoqICsgVW5wbHVnIFJUQSBhbmQgcGx1ZyBiYWNrIGludG8gaG9zdCBBLgotCSoqICsgQ29uZmlndXJlIFJUQSBvbiBob3N0IEEuIFdlIG5vdyBoYXZlIHRoZSBzYW1lIFJUQSBjb25maWd1cmVkCi0JKiogICB3aXRoIGRpZmZlcmVudCBwb3J0cyBvbiB0d28gZGlmZmVyZW50IGhvc3RzLgotCSovCi0JcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiSGF2ZSB3ZSBzZWVuIFJUQSAleCBiZWZvcmU/XG4iLCBSdGFVbmlxICk7Ci0JZm91bmQgPSAwOwotCUZsYWcgPSAwOyAvKiBDb252aW5jZSB0aGUgY29tcGlsZXIgdGhpcyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCAqLwotCWZvciAoIGhvc3QgPSAwOyAhZm91bmQgJiYgKGhvc3QgPCBwLT5SSU9OdW1Ib3N0cyk7IGhvc3QrKyApCi0JewotCSAgICBmb3IgKCBydGE9MDsgcnRhPE1BWF9SVVA7IHJ0YSsrICkKLQkgICAgewotCQlpZiAoKHAtPlJJT0hvc3RzW2hvc3RdLk1hcHBpbmdbcnRhXS5GbGFncyAmCi0JCSAoU0xPVF9JTl9VU0UgfCBTTE9UX1RFTlRBVElWRSkpICYmCi0JCSAocC0+UklPSG9zdHNbaG9zdF0uTWFwcGluZ1tydGFdLlJ0YVVuaXF1ZU51bT09UnRhVW5pcSkpCi0JCXsKLQkJICAgIEZsYWcgPSBwLT5SSU9Ib3N0c1tob3N0XS5NYXBwaW5nW3J0YV0uRmxhZ3M7Ci0JCSAgICBNYXBQID0gJnAtPlJJT0hvc3RzW2hvc3RdLk1hcHBpbmdbcnRhXTsKLQkJICAgIGlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpCi0JCSAgICB7Ci0JCQlNYXBQMiA9ICZwLT5SSU9Ib3N0c1tob3N0XS5NYXBwaW5nW01hcFAtPklEMiAtIDFdOwotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiVGhpcyBSVEEgaXMgdW5pdHMgJWQrJWQgZnJvbSBob3N0ICVzXG4iLAotCQkJIHJ0YSsxLCBNYXBQLT5JRDIsIHAtPlJJT0hvc3RzW2hvc3RdLk5hbWUpOwotCQkgICAgfQotCQkgICAgZWxzZQotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiVGhpcyBSVEEgaXMgdW5pdCAlZCBmcm9tIGhvc3QgJXNcbiIsCi0JCQkgcnRhKzEsIHAtPlJJT0hvc3RzW2hvc3RdLk5hbWUpOwotCQkgICAgZm91bmQgPSAxOwotCQkgICAgYnJlYWs7Ci0JCX0KLQkgICAgfQotCX0KKwkgKiogSWYgdGhpcyBSVEEgaGFzIGp1c3QgYm9vdGVkIGFuIFJUQSB3aGljaCBkb2Vzbid0IGJlbG9uZyB0byB0aGlzCisJICoqIHN5c3RlbSwgb3IgdGhlIHN5c3RlbSBpcyBpbiBzbGF2ZSBtb2RlLCBkbyBub3QgYXR0ZW1wdCB0byBjcmVhdGUKKwkgKiogYSBuZXcgdGFibGUgZW50cnkgZm9yIGl0LgorCSAqLwogCi0JLyoKLQkqKiBUaGVyZSBpcyBubyBTTE9UX0lOX1VTRSBvciBTTE9UX1RFTlRBVElWRSBlbnRyeSBmb3IgdGhpcyBSVEEKLQkqKiBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KLQkqKgotCSoqIElmIHdlIGhhdmUgbm90IGZvdW5kIGEgU0xPVF9JTl9VU0Ugb3IgU0xPVF9URU5UQVRJVkUgZW50cnkgb24KLQkqKiBhbm90aGVyIGhvc3QgZm9yIHRoaXMgUlRBIGluIHRoZSBkcml2ZXIgdGFibGUuLi4KLQkqKgotCSoqIENoZWNrIGZvciBhIFNMT1RfSU5fVVNFIGVudHJ5IGZvciB0aGlzIFJUQSBpbiB0aGUgY29uZmlnIHRhYmxlLgotCSovCi0JaWYgKCAhTWFwUCApCi0JewotCSAgICByaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJMb29rIGZvciBSVEEgJXggaW4gUklPU2F2ZWRUYWJsZVxuIixSdGFVbmlxKTsKLQkgICAgZm9yICggcnRhPTA7IHJ0YSA8IFRPVEFMX01BUF9FTlRSSUVTOyBydGErKyApCi0JICAgIHsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiQ2hlY2sgdGFibGUgZW50cnkgJWQgKCV4KSIsCi0JCSAgICAgIHJ0YSwKLQkJICAgICAgcC0+UklPU2F2ZWRUYWJsZVtydGFdLlJ0YVVuaXF1ZU51bSk7Ci0KLQkJaWYgKCAocC0+UklPU2F2ZWRUYWJsZVtydGFdLkZsYWdzICYgU0xPVF9JTl9VU0UpICYmCi0JCSAocC0+UklPU2F2ZWRUYWJsZVtydGFdLlJ0YVVuaXF1ZU51bSA9PSBSdGFVbmlxKSApCi0JCXsKLQkJICAgIE1hcFAgPSAmcC0+UklPU2F2ZWRUYWJsZVtydGFdOwotCQkgICAgRmxhZyA9IHAtPlJJT1NhdmVkVGFibGVbcnRhXS5GbGFnczsKLQkJICAgIGlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpCi0JCSAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGVudHJ5MiA9IHJ0YSArIDE7IGVudHJ5MiA8IFRPVEFMX01BUF9FTlRSSUVTOwotICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5MisrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLT5SSU9TYXZlZFRhYmxlW2VudHJ5Ml0uUnRhVW5pcXVlTnVtID09IFJ0YVVuaXEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgTWFwUDIgPSAmcC0+UklPU2F2ZWRUYWJsZVtlbnRyeTJdOwotICAgICAgICAgICAgICAgICAgICAgICAgcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiVGhpcyBSVEEgaXMgZnJvbSB0YWJsZSBlbnRyaWVzICVkKyVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRhLCBlbnRyeTIpOwotCQkgICAgfQotCQkgICAgZWxzZQotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiVGhpcyBSVEEgaXMgZnJvbSB0YWJsZSBlbnRyeSAlZFxuIiwgcnRhKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQl9Ci0KLQkvKgotCSoqIFRoZXJlIGlzIG5vIFNMT1RfSU5fVVNFIG9yIFNMT1RfVEVOVEFUSVZFIGVudHJ5IGZvciB0aGlzIFJUQQotCSoqIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50IGhvc3QgY2FyZCBpbiB0aGUgZHJpdmVyIHRhYmxlLgotCSoqCi0JKiogV2UgbWF5IGhhdmUgZm91bmQgYSBTTE9UX0lOX1VTRSBlbnRyeSBvbiBhbm90aGVyIGhvc3QgZm9yIHRoaXMKLQkqKiBSVEEgaW4gdGhlIGNvbmZpZyB0YWJsZSwgb3IgYSBTTE9UX0lOX1VTRSBvciBTTE9UX1RFTlRBVElWRSBlbnRyeQotCSoqIG9uIGFub3RoZXIgaG9zdCBmb3IgdGhpcyBSVEEgaW4gdGhlIGRyaXZlciB0YWJsZS4KLQkqKgotCSoqIENoZWNrIHRoZSBkcml2ZXIgdGFibGUgZm9yIHJvb20gdG8gZml0IHRoaXMgbmV3bHkgZGlzY292ZXJlZCBSVEEuCi0JKiogUklPRmluZEZyZWVJRCgpIGZpcnN0IGxvb2tzIGZvciBmcmVlIHNsb3RzIGFuZCBpZiBpdCBkb2VzIG5vdAotCSoqIGZpbmQgYW55IGZyZWUgc2xvdHMgaXQgd2lsbCB0aGVuIGF0dGVtcHQgdG8gb3VzdCBhbnkKLQkqKiB0ZW50YXRpdmUgZW50cnkgaW4gdGhlIHRhYmxlLgotCSovCi0JRW1wdHlTbG90ID0gMTsKLQlpZiAoUnRhVHlwZSA9PSBUWVBFX1JUQTE2KQotCXsKLQkgICAgaWYgKFJJT0ZpbmRGcmVlSUQocCwgSG9zdFAsICZlbnRyeSwgJmVudHJ5MikgPT0gMCkKLQkgICAgewotCQlSSU9EZWZhdWx0TmFtZShwLCBIb3N0UCwgZW50cnkpOwotCQlGaWxsU2xvdChlbnRyeSwgZW50cnkyLCBSdGFVbmlxLCBIb3N0UCk7Ci0JCUVtcHR5U2xvdCA9IDA7Ci0JICAgIH0KLQl9Ci0JZWxzZQotCXsKLQkgICAgaWYgKFJJT0ZpbmRGcmVlSUQocCwgSG9zdFAsICZlbnRyeSwgTlVMTCkgPT0gMCkKLQkgICAgewotCQlSSU9EZWZhdWx0TmFtZShwLCBIb3N0UCwgZW50cnkpOwotCQlGaWxsU2xvdChlbnRyeSwgMCwgUnRhVW5pcSwgSG9zdFApOwotCQlFbXB0eVNsb3QgPSAwOwotCSAgICB9Ci0JfQotCi0JLyoKLQkqKiBUaGVyZSBpcyBubyBTTE9UX0lOX1VTRSBvciBTTE9UX1RFTlRBVElWRSBlbnRyeSBmb3IgdGhpcyBSVEEKLQkqKiBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KLQkqKgotCSoqIElmIHdlIGZvdW5kIGEgU0xPVF9JTl9VU0UgZW50cnkgb24gYW5vdGhlciBob3N0IGZvciB0aGlzCi0JKiogUlRBIGluIHRoZSBjb25maWcgb3IgZHJpdmVyIHRhYmxlLCBhbmQgdGhlcmUgYXJlIGVub3VnaCBmcmVlCi0JKiogc2xvdHMgaW4gdGhlIGRyaXZlciB0YWJsZSwgdGhlbiB3ZSBuZWVkIHRvIG1vdmUgaXQgb3ZlciBhbmQKLQkqKiBkZWxldGUgaXQgZnJvbSB0aGUgb3RoZXIgaG9zdC4KLQkqKiBJZiB3ZSBmb3VuZCBhIFNMT1RfVEVOVEFUSVZFIGVudHJ5IG9uIGFub3RoZXIgaG9zdCBmb3IgdGhpcwotCSoqIFJUQSBpbiB0aGUgZHJpdmVyIHRhYmxlLCBqdXN0IGRlbGV0ZSB0aGUgb3RoZXIgaG9zdCBlbnRyeS4KLQkqLwotCWlmIChFbXB0eVNsb3QgPT0gMCkKLQl7Ci0JICAgIGlmICggTWFwUCApCi0JICAgIHsKLQkJaWYgKEZsYWcgJiBTTE9UX0lOX1VTRSkKLQkJewotCQkgICAgcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAKLSAgICAiVGhpcyBSVEEgY29uZmlndXJlZCBvbiBhbm90aGVyIGhvc3QgLSBtb3ZlIGVudHJ5IHRvIGN1cnJlbnQgaG9zdCAoMSlcbiIpOwotCQkgICAgSG9zdFAtPk1hcHBpbmdbZW50cnldLlN5c1BvcnQgPSBNYXBQLT5TeXNQb3J0OwotCQkgICAgQ0NPUFkoIE1hcFAtPk5hbWUsIEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5OYW1lLCBNQVhfTkFNRV9MRU4gKTsKLQkJICAgIEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5GbGFncyA9Ci0JCSAgICAgU0xPVF9JTl9VU0UgfCBSVEFfQk9PVEVEIHwgUlRBX05FV0JPT1Q7Ci0jaWZkZWYgTkVFRF9UT19GSVgKLQkJICAgIFJJT19TVl9CUk9BRENBU1QoSG9zdFAtPnN2RmxhZ3NbZW50cnldKTsKLSNlbmRpZgotCQkgICAgUklPUmVNYXBQb3J0cyggcCwgSG9zdFAsICZIb3N0UC0+TWFwcGluZ1tlbnRyeV0gKTsKLQkJICAgIGlmICggSG9zdFAtPk1hcHBpbmdbZW50cnldLlN5c1BvcnQgPCBwLT5SSU9GaXJzdFBvcnRzQm9vdGVkICkKLQkJCXAtPlJJT0ZpcnN0UG9ydHNCb290ZWQgPSBIb3N0UC0+TWFwcGluZ1tlbnRyeV0uU3lzUG9ydDsKLQkJICAgIGlmICggSG9zdFAtPk1hcHBpbmdbZW50cnldLlN5c1BvcnQgPiBwLT5SSU9MYXN0UG9ydHNCb290ZWQgKQotCQkJcC0+UklPTGFzdFBvcnRzQm9vdGVkID0gSG9zdFAtPk1hcHBpbmdbZW50cnldLlN5c1BvcnQ7Ci0JCSAgICByaW9fZHByaW50ayAoUklPX0RFQlVHX0JPT1QsICJTeXNQb3J0ICVkLCBOYW1lICVzXG4iLChpbnQpTWFwUC0+U3lzUG9ydCxNYXBQLT5OYW1lKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJICAgIHJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgCi0gICAiVGhpcyBSVEEgaGFzIGEgdGVudGF0aXZlIGVudHJ5IG9uIGFub3RoZXIgaG9zdCAtIGRlbGV0ZSB0aGF0IGVudHJ5ICgxKVxuIik7Ci0JCSAgICBIb3N0UC0+TWFwcGluZ1tlbnRyeV0uRmxhZ3MgPQotCQkgICAgIFNMT1RfVEVOVEFUSVZFIHwgUlRBX0JPT1RFRCB8IFJUQV9ORVdCT09UOwotI2lmZGVmIE5FRURfVE9fRklYCi0JCSAgICBSSU9fU1ZfQlJPQURDQVNUKEhvc3RQLT5zdkZsYWdzW2VudHJ5XSk7Ci0jZW5kaWYKLQkJfQotCQlpZiAoUnRhVHlwZSA9PSBUWVBFX1JUQTE2KQotCQl7Ci0JCSAgICBpZiAoRmxhZyAmIFNMT1RfSU5fVVNFKQotCQkgICAgewotCQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5GbGFncyA9IFNMT1RfSU5fVVNFIHwKLQkJCSBSVEFfQk9PVEVEIHwgUlRBX05FV0JPT1QgfCBSVEExNl9TRUNPTkRfU0xPVDsKLSNpZmRlZiBORUVEX1RPX0ZJWAotCQkJUklPX1NWX0JST0FEQ0FTVChIb3N0UC0+c3ZGbGFnc1tlbnRyeTJdKTsKLSNlbmRpZgotCQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5TeXNQb3J0ID0gTWFwUDItPlN5c1BvcnQ7CisJaWYgKCFSSU9Cb290T2socCwgSG9zdFAsIFJ0YVVuaXEpKSB7CisJCU15TGluayA9IHJlYWRiKCZQa3RDbWRQLT5MaW5rTnVtKTsKKwkJaWYgKFJ1cCA8ICh1bnNpZ25lZCBzaG9ydCkgTUFYX1JVUCkgewogCQkJLyoKLQkJCSoqIE1hcCBzZWNvbmQgYmxvY2sgb2YgdHR5cyBmb3IgMTYgcG9ydCBSVEEKLQkJCSovCi0JCQlSSU9SZU1hcFBvcnRzKCBwLCBIb3N0UCwgJkhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0gKTsKLQkJICAgICAgIGlmIChIb3N0UC0+TWFwcGluZ1tlbnRyeTJdLlN5c1BvcnQgPCBwLT5SSU9GaXJzdFBvcnRzQm9vdGVkKQotCQkJIHAtPlJJT0ZpcnN0UG9ydHNCb290ZWQgPSBIb3N0UC0+TWFwcGluZ1tlbnRyeTJdLlN5c1BvcnQ7Ci0JCSAgICAgICBpZiAoSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5TeXNQb3J0ID4gcC0+UklPTGFzdFBvcnRzQm9vdGVkKQotCQkJIHAtPlJJT0xhc3RQb3J0c0Jvb3RlZCA9IEhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uU3lzUG9ydDsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfQk9PVCwgIlN5c1BvcnQgJWQsIE5hbWUgJXNcbiIsCi0JCQkgICAgICAgKGludClIb3N0UC0+TWFwcGluZ1tlbnRyeTJdLlN5c1BvcnQsCi0JCQkgICAgICAgSG9zdFAtPk1hcHBpbmdbZW50cnldLk5hbWUpOwotCQkgICAgfQotCQkgICAgZWxzZQotCQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5GbGFncyA9IFNMT1RfVEVOVEFUSVZFIHwKLQkJCSBSVEFfQk9PVEVEIHwgUlRBX05FV0JPT1QgfCBSVEExNl9TRUNPTkRfU0xPVDsKLSNpZmRlZiBORUVEX1RPX0ZJWAotCQkJUklPX1NWX0JST0FEQ0FTVChIb3N0UC0+c3ZGbGFnc1tlbnRyeTJdKTsKLSNlbmRpZgotCQkgICAgYnplcm8oIChjYWRkcl90KU1hcFAyLCBzaXplb2Yoc3RydWN0IE1hcCkgKTsKLQkJfQotCQliemVybyggKGNhZGRyX3QpTWFwUCwgc2l6ZW9mKHN0cnVjdCBNYXApICk7Ci0JCWlmICghIHAtPlJJT05vTWVzc2FnZSkKLQkJICAgIGNwcmludGYoIkFuIG9ycGhhbmVkIFJUQSBoYXMgYmVlbiBhZG9wdGVkIGJ5ICVzICclcycgKCVjKS5cbiIsTXlUeXBlLE15TmFtZSxNeUxpbmsrJ0EnKTsKLQkgICAgfQotCSAgICBlbHNlIGlmICghIHAtPlJJT05vTWVzc2FnZSkKLQkJY3ByaW50ZigiUlRBIGNvbm5lY3RlZCB0byAlcyAnJXMnICglYykgbm90IGNvbmZpZ3VyZWQuXG4iLE15VHlwZSxNeU5hbWUsTXlMaW5rKydBJyk7Ci0JICAgIFJJT1NldENoYW5nZShwKTsKLQkgICAgcmV0dXJuIFRSVUU7CisJCQkgKiogUnRhVW5pcSB3YXMgY2xvbmUgYm9vdGVkIChieSB0aGlzIFJUQSkuIEluc3RydWN0IHRoaXMgUlRBCisJCQkgKiogdG8gaG9sZCBvZmYgZnVydGhlciBhdHRlbXB0cyB0byBib290IG9uIHRoaXMgbGluayBmb3IgMzAKKwkJCSAqKiBzZWNvbmRzLgorCQkJICovCisJCQlpZiAoUklPU3VzcGVuZEJvb3RSdGEoSG9zdFAsIEhvc3RQLT5NYXBwaW5nW1J1cF0uSUQsIE15TGluaykpIHsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlJUQSBmYWlsZWQgdG8gc3VzcGVuZCBib290aW5nIG9uIGxpbmsgJWNcbiIsICdBJyArIE15TGluayk7CisJCQl9CisJCX0gZWxzZQorCQkJLyoKKwkJCSAqKiBSdGFVbmlxIHdhcyBib290ZWQgYnkgdGhpcyBob3N0LiBTZXQgdGhlIGJvb3RpbmcgbGluaworCQkJICoqIHRvIGhvbGQgb2ZmIGZvciAzMCBzZWNvbmRzIHRvIGdpdmUgYW5vdGhlciB1bml0IGEKKwkJCSAqKiBjaGFuY2UgdG8gYm9vdCBpdC4KKwkJCSAqLworCQkJd3JpdGV3KDMwLCAmSG9zdFAtPkxpbmtTdHJQW015TGlua10uV2FpdE5vQm9vdCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiUlRBICV4IG5vdCBvd25lZCAtIHN1c3BlbmQgYm9vdGluZyBkb3duIGxpbmsgJWMgb24gdW5pdCAleFxuIiwgUnRhVW5pcSwgJ0EnICsgTXlMaW5rLCBIb3N0UC0+TWFwcGluZ1tSdXBdLlJ0YVVuaXF1ZU51bSk7CisJCXJldHVybiAxOwogCX0KIAogCS8qCi0JKiogVGhlcmUgaXMgbm8gcm9vbSBpbiB0aGUgZHJpdmVyIHRhYmxlIHRvIG1ha2UgYW4gZW50cnkgZm9yIHRoZQotCSoqIGJvb3RlZCBSVEEuIEtlZXAgYSBub3RlIG9mIGl0cyBVbmlxIE51bSBpbiB0aGUgb3ZlcmZsb3cgdGFibGUsCi0JKiogc28gd2UgY2FuIGlnbm9yZSBpdCdzIElEIHJlcXVlc3RzLgotCSovCi0JaWYgKCEgcC0+UklPTm9NZXNzYWdlKQotCSAgICBjcHJpbnRmKCJUaGUgUlRBIGNvbm5lY3RlZCB0byAlcyAnJXMnICglYykgY2Fubm90IGJlIGNvbmZpZ3VyZWQuICBZb3UgY2Fubm90IGNvbmZpZ3VyZSBtb3JlIHRoYW4gMTI4IHBvcnRzIHRvIG9uZSBob3N0IGNhcmQuXG4iLE15VHlwZSxNeU5hbWUsTXlMaW5rKydBJyk7Ci0JZm9yICggZW50cnk9MDsgZW50cnk8SG9zdFAtPk51bUV4dHJhQm9vdGVkOyBlbnRyeSsrICkKLQl7Ci0JICAgIGlmICggSG9zdFAtPkV4dHJhVW5pdHNbZW50cnldID09IFJ0YVVuaXEgKQotCSAgICB7CisJICoqIENoZWNrIGZvciBhIFNMT1RfSU5fVVNFIGVudHJ5IGZvciB0aGlzIFJUQSBhdHRhY2hlZCB0byB0aGUKKwkgKiogY3VycmVudCBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KKwkgKioKKwkgKiogSWYgaXQgZXhpc3RzLCBtYWtlIGEgbm90ZSB0aGF0IHdlIGhhdmUgYm9vdGVkIGl0LiBPdGhlciBwYXJ0cyBvZgorCSAqKiB0aGUgZHJpdmVyIGFyZSBpbnRlcmVzdGVkIGluIHRoaXMgaW5mb3JtYXRpb24gYXQgYSBsYXRlciBkYXRlLAorCSAqKiBpbiBwYXJ0aWN1bGFyIHdoZW4gdGhlIGJvb3RpbmcgUlRBIGFza3MgZm9yIGFuIElEIGZvciB0aGlzIHVuaXQsCisJICoqIHdlIG11c3QgaGF2ZSBzZXQgdGhlIEJPT1RFRCBmbGFnLCBhbmQgdGhlIE5FV0JPT1QgZmxhZyBpcyB1c2VkCisJICoqIHRvIGZvcmNlIGFuIG9wZW4gb24gYW55IHBvcnRzIHRoYXQgd2hlcmUgcHJldmlvdXNseSBvcGVuIG9uIHRoaXMKKwkgKiogdW5pdC4KKwkgKi8KKwlmb3IgKGVudHJ5ID0gMDsgZW50cnkgPCBNQVhfUlVQOyBlbnRyeSsrKSB7CisJCXVuc2lnbmVkIGludCBzeXNwb3J0OworCisJCWlmICgoSG9zdFAtPk1hcHBpbmdbZW50cnldLkZsYWdzICYgU0xPVF9JTl9VU0UpICYmIChIb3N0UC0+TWFwcGluZ1tlbnRyeV0uUnRhVW5pcXVlTnVtID09IFJ0YVVuaXEpKSB7CisJCQlIb3N0UC0+TWFwcGluZ1tlbnRyeV0uRmxhZ3MgfD0gUlRBX0JPT1RFRCB8IFJUQV9ORVdCT09UOworCQkJaWYgKChzeXNwb3J0ID0gSG9zdFAtPk1hcHBpbmdbZW50cnldLlN5c1BvcnQpICE9IE5PX1BPUlQpIHsKKwkJCQlpZiAoc3lzcG9ydCA8IHAtPlJJT0ZpcnN0UG9ydHNCb290ZWQpCisJCQkJCXAtPlJJT0ZpcnN0UG9ydHNCb290ZWQgPSBzeXNwb3J0OworCQkJCWlmIChzeXNwb3J0ID4gcC0+UklPTGFzdFBvcnRzQm9vdGVkKQorCQkJCQlwLT5SSU9MYXN0UG9ydHNCb290ZWQgPSBzeXNwb3J0OworCQkJCS8qCisJCQkJICoqIEZvciBhIDE2IHBvcnQgUlRBLCBjaGVjayB0aGUgc2Vjb25kIGJhbmsgb2YgOCBwb3J0cworCQkJCSAqLworCQkJCWlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpIHsKKwkJCQkJZW50cnkyID0gSG9zdFAtPk1hcHBpbmdbZW50cnldLklEMiAtIDE7CisJCQkJCUhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uRmxhZ3MgfD0gUlRBX0JPT1RFRCB8IFJUQV9ORVdCT09UOworCQkJCQlzeXNwb3J0ID0gSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5TeXNQb3J0OworCQkJCQlpZiAoc3lzcG9ydCA8IHAtPlJJT0ZpcnN0UG9ydHNCb290ZWQpCisJCQkJCQlwLT5SSU9GaXJzdFBvcnRzQm9vdGVkID0gc3lzcG9ydDsKKwkJCQkJaWYgKHN5c3BvcnQgPiBwLT5SSU9MYXN0UG9ydHNCb290ZWQpCisJCQkJCQlwLT5SSU9MYXN0UG9ydHNCb290ZWQgPSBzeXNwb3J0OworCQkJCX0KKwkJCX0KKwkJCWlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpCisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJSVEEgd2lsbCBiZSBnaXZlbiBJRHMgJWQrJWRcbiIsIGVudHJ5ICsgMSwgZW50cnkyICsgMSk7CisJCQllbHNlCisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJSVEEgd2lsbCBiZSBnaXZlbiBJRCAlZFxuIiwgZW50cnkgKyAxKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJSVEEgbm90IGNvbmZpZ3VyZWQgZm9yIHRoaXMgaG9zdFxuIik7CisKKwlpZiAoUnVwID49ICh1bnNpZ25lZCBzaG9ydCkgTUFYX1JVUCkgewogCQkvKgotCQkqKiBhbHJlYWR5IGdvdCBpdCEKLQkJKi8KLQkJcmV0dXJuIFRSVUU7Ci0JICAgIH0KKwkJICoqIEl0IHdhcyBhIGhvc3QgdGhhdCBkaWQgdGhlIGJvb3RpbmcKKwkJICovCisJCU15VHlwZSA9ICJIb3N0IjsKKwkJTXlOYW1lID0gSG9zdFAtPk5hbWU7CisJfSBlbHNlIHsKKwkJLyoKKwkJICoqIEl0IHdhcyBhbiBSVEEgdGhhdCBkaWQgdGhlIGJvb3RpbmcKKwkJICovCisJCU15VHlwZSA9ICJSVEEiOworCQlNeU5hbWUgPSBIb3N0UC0+TWFwcGluZ1tSdXBdLk5hbWU7CisJfQorCU15TGluayA9IHJlYWRiKCZQa3RDbWRQLT5MaW5rTnVtKTsKKworCS8qCisJICoqIFRoZXJlIGlzIG5vIFNMT1RfSU5fVVNFIGVudHJ5IGZvciB0aGlzIFJUQSBhdHRhY2hlZCB0byB0aGUgY3VycmVudAorCSAqKiBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KKwkgKioKKwkgKiogQ2hlY2sgZm9yIGEgU0xPVF9URU5UQVRJVkUgZW50cnkgZm9yIHRoaXMgUlRBIGF0dGFjaGVkIHRvIHRoZQorCSAqKiBjdXJyZW50IGhvc3QgY2FyZCBpbiB0aGUgZHJpdmVyIHRhYmxlLgorCSAqKgorCSAqKiBJZiB3ZSBmaW5kIG9uZSwgdGhlbiB3ZSByZS11c2UgdGhhdCBzbG90LgorCSAqLworCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IE1BWF9SVVA7IGVudHJ5KyspIHsKKwkJaWYgKChIb3N0UC0+TWFwcGluZ1tlbnRyeV0uRmxhZ3MgJiBTTE9UX1RFTlRBVElWRSkgJiYgKEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5SdGFVbmlxdWVOdW0gPT0gUnRhVW5pcSkpIHsKKwkJCWlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpIHsKKwkJCQllbnRyeTIgPSBIb3N0UC0+TWFwcGluZ1tlbnRyeV0uSUQyIC0gMTsKKwkJCQlpZiAoKEhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uRmxhZ3MgJiBTTE9UX1RFTlRBVElWRSkgJiYgKEhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uUnRhVW5pcXVlTnVtID09IFJ0YVVuaXEpKQorCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIkZvdW5kIHByZXZpb3VzIHRlbnRhdGl2ZSBzbG90cyAoJWQrJWQpXG4iLCBlbnRyeSwgZW50cnkyKTsKKwkJCQllbHNlCisJCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlCisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJGb3VuZCBwcmV2aW91cyB0ZW50YXRpdmUgc2xvdCAoJWQpXG4iLCBlbnRyeSk7CisJCQlpZiAoIXAtPlJJT05vTWVzc2FnZSkKKwkJCQlwcmludGsoIlJUQSBjb25uZWN0ZWQgdG8gJXMgJyVzJyAoJWMpIG5vdCBjb25maWd1cmVkLlxuIiwgTXlUeXBlLCBNeU5hbWUsIE15TGluayArICdBJyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCS8qCisJICoqIFRoZXJlIGlzIG5vIFNMT1RfSU5fVVNFIG9yIFNMT1RfVEVOVEFUSVZFIGVudHJ5IGZvciB0aGlzIFJUQQorCSAqKiBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KKwkgKioKKwkgKiogQ2hlY2sgaWYgdGhlcmUgaXMgYSBTTE9UX0lOX1VTRSBvciBTTE9UX1RFTlRBVElWRSBlbnRyeSBvbiBhbm90aGVyCisJICoqIGhvc3QgZm9yIHRoaXMgUlRBIGluIHRoZSBkcml2ZXIgdGFibGUuCisJICoqCisJICoqIEZvciBhIFNMT1RfSU5fVVNFIGVudHJ5IG9uIGFub3RoZXIgaG9zdCwgd2UgbmVlZCB0byBkZWxldGUgdGhlIFJUQQorCSAqKiBlbnRyeSBmcm9tIHRoZSBvdGhlciBob3N0IGFuZCBhZGQgaXQgdG8gdGhpcyBob3N0ICh1c2luZyBzb21lIG9mCisJICoqIHRoZSBmdW5jdGlvbnMgZnJvbSB0YWJsZS5jIHdoaWNoIGRvIHRoaXMpLgorCSAqKiBGb3IgYSBTTE9UX1RFTlRBVElWRSBlbnRyeSBvbiBhbm90aGVyIGhvc3QsIHdlIG11c3QgY29wZSB3aXRoIHRoZQorCSAqKiBmb2xsb3dpbmcgc2NlbmFyaW86CisJICoqCisJICoqICsgUGx1ZyA4IHBvcnQgUlRBIGludG8gaG9zdCBBLiAoVGhpcyBjcmVhdGVzIFNMT1RfVEVOVEFUSVZFIGVudHJ5CisJICoqICAgaW4gdGFibGUpCisJICoqICsgVW5wbHVnIFJUQSBhbmQgcGx1ZyBpbnRvIGhvc3QgQi4gKFdlIG5vdyBoYXZlIDIgU0xPVF9URU5UQVRJVkUKKwkgKiogICBlbnRyaWVzKQorCSAqKiArIENvbmZpZ3VyZSBSVEEgb24gaG9zdCBCLiAoVGhpcyBzbG90IG5vdyBiZWNvbWVzIFNMT1RfSU5fVVNFKQorCSAqKiArIFVucGx1ZyBSVEEgYW5kIHBsdWcgYmFjayBpbnRvIGhvc3QgQS4KKwkgKiogKyBDb25maWd1cmUgUlRBIG9uIGhvc3QgQS4gV2Ugbm93IGhhdmUgdGhlIHNhbWUgUlRBIGNvbmZpZ3VyZWQKKwkgKiogICB3aXRoIGRpZmZlcmVudCBwb3J0cyBvbiB0d28gZGlmZmVyZW50IGhvc3RzLgorCSAqLworCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiSGF2ZSB3ZSBzZWVuIFJUQSAleCBiZWZvcmU/XG4iLCBSdGFVbmlxKTsKKwlmb3VuZCA9IDA7CisJRmxhZyA9IDA7CQkvKiBDb252aW5jZSB0aGUgY29tcGlsZXIgdGhpcyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCAqLworCWZvciAoaG9zdCA9IDA7ICFmb3VuZCAmJiAoaG9zdCA8IHAtPlJJT051bUhvc3RzKTsgaG9zdCsrKSB7CisJCWZvciAocnRhID0gMDsgcnRhIDwgTUFYX1JVUDsgcnRhKyspIHsKKwkJCWlmICgocC0+UklPSG9zdHNbaG9zdF0uTWFwcGluZ1tydGFdLkZsYWdzICYgKFNMT1RfSU5fVVNFIHwgU0xPVF9URU5UQVRJVkUpKSAmJiAocC0+UklPSG9zdHNbaG9zdF0uTWFwcGluZ1tydGFdLlJ0YVVuaXF1ZU51bSA9PSBSdGFVbmlxKSkgeworCQkJCUZsYWcgPSBwLT5SSU9Ib3N0c1tob3N0XS5NYXBwaW5nW3J0YV0uRmxhZ3M7CisJCQkJTWFwUCA9ICZwLT5SSU9Ib3N0c1tob3N0XS5NYXBwaW5nW3J0YV07CisJCQkJaWYgKFJ0YVR5cGUgPT0gVFlQRV9SVEExNikgeworCQkJCQlNYXBQMiA9ICZwLT5SSU9Ib3N0c1tob3N0XS5NYXBwaW5nW01hcFAtPklEMiAtIDFdOworCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlRoaXMgUlRBIGlzIHVuaXRzICVkKyVkIGZyb20gaG9zdCAlc1xuIiwgcnRhICsgMSwgTWFwUC0+SUQyLCBwLT5SSU9Ib3N0c1tob3N0XS5OYW1lKTsKKwkJCQl9IGVsc2UKKwkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJUaGlzIFJUQSBpcyB1bml0ICVkIGZyb20gaG9zdCAlc1xuIiwgcnRhICsgMSwgcC0+UklPSG9zdHNbaG9zdF0uTmFtZSk7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiogVGhlcmUgaXMgbm8gU0xPVF9JTl9VU0Ugb3IgU0xPVF9URU5UQVRJVkUgZW50cnkgZm9yIHRoaXMgUlRBCisJICoqIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50IGhvc3QgY2FyZCBpbiB0aGUgZHJpdmVyIHRhYmxlLgorCSAqKgorCSAqKiBJZiB3ZSBoYXZlIG5vdCBmb3VuZCBhIFNMT1RfSU5fVVNFIG9yIFNMT1RfVEVOVEFUSVZFIGVudHJ5IG9uCisJICoqIGFub3RoZXIgaG9zdCBmb3IgdGhpcyBSVEEgaW4gdGhlIGRyaXZlciB0YWJsZS4uLgorCSAqKgorCSAqKiBDaGVjayBmb3IgYSBTTE9UX0lOX1VTRSBlbnRyeSBmb3IgdGhpcyBSVEEgaW4gdGhlIGNvbmZpZyB0YWJsZS4KKwkgKi8KKwlpZiAoIU1hcFApIHsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJMb29rIGZvciBSVEEgJXggaW4gUklPU2F2ZWRUYWJsZVxuIiwgUnRhVW5pcSk7CisJCWZvciAocnRhID0gMDsgcnRhIDwgVE9UQUxfTUFQX0VOVFJJRVM7IHJ0YSsrKSB7CisJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIkNoZWNrIHRhYmxlIGVudHJ5ICVkICgleCkiLCBydGEsIHAtPlJJT1NhdmVkVGFibGVbcnRhXS5SdGFVbmlxdWVOdW0pOworCisJCQlpZiAoKHAtPlJJT1NhdmVkVGFibGVbcnRhXS5GbGFncyAmIFNMT1RfSU5fVVNFKSAmJiAocC0+UklPU2F2ZWRUYWJsZVtydGFdLlJ0YVVuaXF1ZU51bSA9PSBSdGFVbmlxKSkgeworCQkJCU1hcFAgPSAmcC0+UklPU2F2ZWRUYWJsZVtydGFdOworCQkJCUZsYWcgPSBwLT5SSU9TYXZlZFRhYmxlW3J0YV0uRmxhZ3M7CisJCQkJaWYgKFJ0YVR5cGUgPT0gVFlQRV9SVEExNikgeworCQkJCQlmb3IgKGVudHJ5MiA9IHJ0YSArIDE7IGVudHJ5MiA8IFRPVEFMX01BUF9FTlRSSUVTOyBlbnRyeTIrKykgeworCQkJCQkJaWYgKHAtPlJJT1NhdmVkVGFibGVbZW50cnkyXS5SdGFVbmlxdWVOdW0gPT0gUnRhVW5pcSkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlNYXBQMiA9ICZwLT5SSU9TYXZlZFRhYmxlW2VudHJ5Ml07CisJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiVGhpcyBSVEEgaXMgZnJvbSB0YWJsZSBlbnRyaWVzICVkKyVkXG4iLCBydGEsIGVudHJ5Mik7CisJCQkJfSBlbHNlCisJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiVGhpcyBSVEEgaXMgZnJvbSB0YWJsZSBlbnRyeSAlZFxuIiwgcnRhKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICoqIFRoZXJlIGlzIG5vIFNMT1RfSU5fVVNFIG9yIFNMT1RfVEVOVEFUSVZFIGVudHJ5IGZvciB0aGlzIFJUQQorCSAqKiBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KKwkgKioKKwkgKiogV2UgbWF5IGhhdmUgZm91bmQgYSBTTE9UX0lOX1VTRSBlbnRyeSBvbiBhbm90aGVyIGhvc3QgZm9yIHRoaXMKKwkgKiogUlRBIGluIHRoZSBjb25maWcgdGFibGUsIG9yIGEgU0xPVF9JTl9VU0Ugb3IgU0xPVF9URU5UQVRJVkUgZW50cnkKKwkgKiogb24gYW5vdGhlciBob3N0IGZvciB0aGlzIFJUQSBpbiB0aGUgZHJpdmVyIHRhYmxlLgorCSAqKgorCSAqKiBDaGVjayB0aGUgZHJpdmVyIHRhYmxlIGZvciByb29tIHRvIGZpdCB0aGlzIG5ld2x5IGRpc2NvdmVyZWQgUlRBLgorCSAqKiBSSU9GaW5kRnJlZUlEKCkgZmlyc3QgbG9va3MgZm9yIGZyZWUgc2xvdHMgYW5kIGlmIGl0IGRvZXMgbm90CisJICoqIGZpbmQgYW55IGZyZWUgc2xvdHMgaXQgd2lsbCB0aGVuIGF0dGVtcHQgdG8gb3VzdCBhbnkKKwkgKiogdGVudGF0aXZlIGVudHJ5IGluIHRoZSB0YWJsZS4KKwkgKi8KKwlFbXB0eVNsb3QgPSAxOworCWlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpIHsKKwkJaWYgKFJJT0ZpbmRGcmVlSUQocCwgSG9zdFAsICZlbnRyeSwgJmVudHJ5MikgPT0gMCkgeworCQkJUklPRGVmYXVsdE5hbWUocCwgSG9zdFAsIGVudHJ5KTsKKwkJCXJpb19maWxsX2hvc3Rfc2xvdChlbnRyeSwgZW50cnkyLCBSdGFVbmlxLCBIb3N0UCk7CisJCQlFbXB0eVNsb3QgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKFJJT0ZpbmRGcmVlSUQocCwgSG9zdFAsICZlbnRyeSwgTlVMTCkgPT0gMCkgeworCQkJUklPRGVmYXVsdE5hbWUocCwgSG9zdFAsIGVudHJ5KTsKKwkJCXJpb19maWxsX2hvc3Rfc2xvdChlbnRyeSwgMCwgUnRhVW5pcSwgSG9zdFApOworCQkJRW1wdHlTbG90ID0gMDsKKwkJfQorCX0KKworCS8qCisJICoqIFRoZXJlIGlzIG5vIFNMT1RfSU5fVVNFIG9yIFNMT1RfVEVOVEFUSVZFIGVudHJ5IGZvciB0aGlzIFJUQQorCSAqKiBhdHRhY2hlZCB0byB0aGUgY3VycmVudCBob3N0IGNhcmQgaW4gdGhlIGRyaXZlciB0YWJsZS4KKwkgKioKKwkgKiogSWYgd2UgZm91bmQgYSBTTE9UX0lOX1VTRSBlbnRyeSBvbiBhbm90aGVyIGhvc3QgZm9yIHRoaXMKKwkgKiogUlRBIGluIHRoZSBjb25maWcgb3IgZHJpdmVyIHRhYmxlLCBhbmQgdGhlcmUgYXJlIGVub3VnaCBmcmVlCisJICoqIHNsb3RzIGluIHRoZSBkcml2ZXIgdGFibGUsIHRoZW4gd2UgbmVlZCB0byBtb3ZlIGl0IG92ZXIgYW5kCisJICoqIGRlbGV0ZSBpdCBmcm9tIHRoZSBvdGhlciBob3N0LgorCSAqKiBJZiB3ZSBmb3VuZCBhIFNMT1RfVEVOVEFUSVZFIGVudHJ5IG9uIGFub3RoZXIgaG9zdCBmb3IgdGhpcworCSAqKiBSVEEgaW4gdGhlIGRyaXZlciB0YWJsZSwganVzdCBkZWxldGUgdGhlIG90aGVyIGhvc3QgZW50cnkuCisJICovCisJaWYgKEVtcHR5U2xvdCA9PSAwKSB7CisJCWlmIChNYXBQKSB7CisJCQlpZiAoRmxhZyAmIFNMT1RfSU5fVVNFKSB7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJUaGlzIFJUQSBjb25maWd1cmVkIG9uIGFub3RoZXIgaG9zdCAtIG1vdmUgZW50cnkgdG8gY3VycmVudCBob3N0ICgxKVxuIik7CisJCQkJSG9zdFAtPk1hcHBpbmdbZW50cnldLlN5c1BvcnQgPSBNYXBQLT5TeXNQb3J0OworCQkJCW1lbWNweShIb3N0UC0+TWFwcGluZ1tlbnRyeV0uTmFtZSwgTWFwUC0+TmFtZSwgTUFYX05BTUVfTEVOKTsKKwkJCQlIb3N0UC0+TWFwcGluZ1tlbnRyeV0uRmxhZ3MgPSBTTE9UX0lOX1VTRSB8IFJUQV9CT09URUQgfCBSVEFfTkVXQk9PVDsKKwkJCQlSSU9SZU1hcFBvcnRzKHAsIEhvc3RQLCAmSG9zdFAtPk1hcHBpbmdbZW50cnldKTsKKwkJCQlpZiAoSG9zdFAtPk1hcHBpbmdbZW50cnldLlN5c1BvcnQgPCBwLT5SSU9GaXJzdFBvcnRzQm9vdGVkKQorCQkJCQlwLT5SSU9GaXJzdFBvcnRzQm9vdGVkID0gSG9zdFAtPk1hcHBpbmdbZW50cnldLlN5c1BvcnQ7CisJCQkJaWYgKEhvc3RQLT5NYXBwaW5nW2VudHJ5XS5TeXNQb3J0ID4gcC0+UklPTGFzdFBvcnRzQm9vdGVkKQorCQkJCQlwLT5SSU9MYXN0UG9ydHNCb290ZWQgPSBIb3N0UC0+TWFwcGluZ1tlbnRyeV0uU3lzUG9ydDsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlN5c1BvcnQgJWQsIE5hbWUgJXNcbiIsIChpbnQpIE1hcFAtPlN5c1BvcnQsIE1hcFAtPk5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlRoaXMgUlRBIGhhcyBhIHRlbnRhdGl2ZSBlbnRyeSBvbiBhbm90aGVyIGhvc3QgLSBkZWxldGUgdGhhdCBlbnRyeSAoMSlcbiIpOworCQkJCUhvc3RQLT5NYXBwaW5nW2VudHJ5XS5GbGFncyA9IFNMT1RfVEVOVEFUSVZFIHwgUlRBX0JPT1RFRCB8IFJUQV9ORVdCT09UOworCQkJfQorCQkJaWYgKFJ0YVR5cGUgPT0gVFlQRV9SVEExNikgeworCQkJCWlmIChGbGFnICYgU0xPVF9JTl9VU0UpIHsKKwkJCQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5GbGFncyA9IFNMT1RfSU5fVVNFIHwgUlRBX0JPT1RFRCB8IFJUQV9ORVdCT09UIHwgUlRBMTZfU0VDT05EX1NMT1Q7CisJCQkJCUhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uU3lzUG9ydCA9IE1hcFAyLT5TeXNQb3J0OworCQkJCQkvKgorCQkJCQkgKiogTWFwIHNlY29uZCBibG9jayBvZiB0dHlzIGZvciAxNiBwb3J0IFJUQQorCQkJCQkgKi8KKwkJCQkJUklPUmVNYXBQb3J0cyhwLCBIb3N0UCwgJkhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0pOworCQkJCQlpZiAoSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5TeXNQb3J0IDwgcC0+UklPRmlyc3RQb3J0c0Jvb3RlZCkKKwkJCQkJCXAtPlJJT0ZpcnN0UG9ydHNCb290ZWQgPSBIb3N0UC0+TWFwcGluZ1tlbnRyeTJdLlN5c1BvcnQ7CisJCQkJCWlmIChIb3N0UC0+TWFwcGluZ1tlbnRyeTJdLlN5c1BvcnQgPiBwLT5SSU9MYXN0UG9ydHNCb290ZWQpCisJCQkJCQlwLT5SSU9MYXN0UG9ydHNCb290ZWQgPSBIb3N0UC0+TWFwcGluZ1tlbnRyeTJdLlN5c1BvcnQ7CisJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19CT09ULCAiU3lzUG9ydCAlZCwgTmFtZSAlc1xuIiwgKGludCkgSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5TeXNQb3J0LCBIb3N0UC0+TWFwcGluZ1tlbnRyeV0uTmFtZSk7CisJCQkJfSBlbHNlCisJCQkJCUhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uRmxhZ3MgPSBTTE9UX1RFTlRBVElWRSB8IFJUQV9CT09URUQgfCBSVEFfTkVXQk9PVCB8IFJUQTE2X1NFQ09ORF9TTE9UOworCQkJCW1lbXNldChNYXBQMiwgMCwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKKwkJCX0KKwkJCW1lbXNldChNYXBQLCAwLCBzaXplb2Yoc3RydWN0IE1hcCkpOworCQkJaWYgKCFwLT5SSU9Ob01lc3NhZ2UpCisJCQkJcHJpbnRrKCJBbiBvcnBoYW5lZCBSVEEgaGFzIGJlZW4gYWRvcHRlZCBieSAlcyAnJXMnICglYykuXG4iLCBNeVR5cGUsIE15TmFtZSwgTXlMaW5rICsgJ0EnKTsKKwkJfSBlbHNlIGlmICghcC0+UklPTm9NZXNzYWdlKQorCQkJcHJpbnRrKCJSVEEgY29ubmVjdGVkIHRvICVzICclcycgKCVjKSBub3QgY29uZmlndXJlZC5cbiIsIE15VHlwZSwgTXlOYW1lLCBNeUxpbmsgKyAnQScpOworCQlSSU9TZXRDaGFuZ2UocCk7CisJCXJldHVybiAxOworCX0KKworCS8qCisJICoqIFRoZXJlIGlzIG5vIHJvb20gaW4gdGhlIGRyaXZlciB0YWJsZSB0byBtYWtlIGFuIGVudHJ5IGZvciB0aGUKKwkgKiogYm9vdGVkIFJUQS4gS2VlcCBhIG5vdGUgb2YgaXRzIFVuaXEgTnVtIGluIHRoZSBvdmVyZmxvdyB0YWJsZSwKKwkgKiogc28gd2UgY2FuIGlnbm9yZSBpdCdzIElEIHJlcXVlc3RzLgorCSAqLworCWlmICghcC0+UklPTm9NZXNzYWdlKQorCQlwcmludGsoIlRoZSBSVEEgY29ubmVjdGVkIHRvICVzICclcycgKCVjKSBjYW5ub3QgYmUgY29uZmlndXJlZC4gIFlvdSBjYW5ub3QgY29uZmlndXJlIG1vcmUgdGhhbiAxMjggcG9ydHMgdG8gb25lIGhvc3QgY2FyZC5cbiIsIE15VHlwZSwgTXlOYW1lLCBNeUxpbmsgKyAnQScpOworCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IEhvc3RQLT5OdW1FeHRyYUJvb3RlZDsgZW50cnkrKykgeworCQlpZiAoSG9zdFAtPkV4dHJhVW5pdHNbZW50cnldID09IFJ0YVVuaXEpIHsKKwkJCS8qCisJCQkgKiogYWxyZWFkeSBnb3QgaXQhCisJCQkgKi8KKwkJCXJldHVybiAxOworCQl9CiAJfQogCS8qCi0JKiogSWYgdGhlcmUgaXMgcm9vbSwgYWRkIHRoZSB1bml0IHRvIHRoZSBsaXN0IG9mIGV4dHJhcwotCSovCi0JaWYgKCBIb3N0UC0+TnVtRXh0cmFCb290ZWQgPCBNQVhfRVhUUkFfVU5JVFMgKQotCSAgICBIb3N0UC0+RXh0cmFVbml0c1tIb3N0UC0+TnVtRXh0cmFCb290ZWQrK10gPSBSdGFVbmlxOwotCXJldHVybiBUUlVFOworCSAqKiBJZiB0aGVyZSBpcyByb29tLCBhZGQgdGhlIHVuaXQgdG8gdGhlIGxpc3Qgb2YgZXh0cmFzCisJICovCisJaWYgKEhvc3RQLT5OdW1FeHRyYUJvb3RlZCA8IE1BWF9FWFRSQV9VTklUUykKKwkJSG9zdFAtPkV4dHJhVW5pdHNbSG9zdFAtPk51bUV4dHJhQm9vdGVkKytdID0gUnRhVW5pcTsKKwlyZXR1cm4gMTsKIH0KIAogCiAvKgogKiogSWYgdGhlIFJUQSBvciBpdHMgaG9zdCBhcHBlYXJzIGluIHRoZSBSSU9CaW5kVGFiW10gc3RydWN0dXJlIHRoZW4KLSoqIHdlIG11c3RuJ3QgYm9vdCB0aGUgUlRBIGFuZCBzaG91bGQgcmV0dXJuIEZBTFNFLgorKiogd2UgbXVzdG4ndCBib290IHRoZSBSVEEgYW5kIHNob3VsZCByZXR1cm4gMC4KICoqIFRoaXMgb3BlcmF0aW9uIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSBvdGhlciBkcml2ZXJzIGZvciBSSU8KICoqIGluIHRoYXQgdGhpcyBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIG5ldyB1dGlsaXRpZXMKICoqIG5vdCBjb25maWcucmlvIGFuZCBpcyBGQVIgU0lNUExFUi4KICoqIFdlIG5vIGxvbmdlciBzdXBwb3J0IHRoZSBSSU9Cb290TW9kZSB2YXJpYWJsZS4gSXQgaXMgYWxsIGRvbmUgZnJvbSB0aGUKICoqICJib290L25vYm9vdCIgZmllbGQgaW4gdGhlIHJpby5jZiBmaWxlLgogKi8KLWludAotUklPQm9vdE9rKHAsIEhvc3RQLCBSdGFVbmlxKQotc3RydWN0IHJpb19pbmZvICoJcDsKLXN0cnVjdCBIb3N0ICoJCUhvc3RQOwotdWxvbmcgUnRhVW5pcTsKK2ludCBSSU9Cb290T2soc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHVuc2lnbmVkIGxvbmcgUnRhVW5pcSkKIHsKLSAgICBpbnQJCUVudHJ5OwotICAgIHVpbnQgSG9zdFVuaXEgPSBIb3N0UC0+VW5pcXVlTnVtOworCWludCBFbnRyeTsKKwl1bnNpZ25lZCBpbnQgSG9zdFVuaXEgPSBIb3N0UC0+VW5pcXVlTnVtOwogCiAJLyoKLQkqKiBTZWFyY2ggYmluZGluZ3MgdGFibGUgZm9yIFJUQSBvciBpdHMgcGFyZW50LgotCSoqIElmIGl0IGV4aXN0cywgcmV0dXJuIDAsIGVsc2UgMS4KLQkqLwotCWZvciAoRW50cnkgPSAwOwotCSAgICAoIEVudHJ5IDwgTUFYX1JUQV9CSU5ESU5HUyApICYmICggcC0+UklPQmluZFRhYltFbnRyeV0gIT0gMCApOwotCSAgICBFbnRyeSsrKQotCXsKLQkJaWYgKCAocC0+UklPQmluZFRhYltFbnRyeV0gPT0gSG9zdFVuaXEpIHx8Ci0JCSAgICAgKHAtPlJJT0JpbmRUYWJbRW50cnldID09IFJ0YVVuaXEpICkKKwkgKiogU2VhcmNoIGJpbmRpbmdzIHRhYmxlIGZvciBSVEEgb3IgaXRzIHBhcmVudC4KKwkgKiogSWYgaXQgZXhpc3RzLCByZXR1cm4gMCwgZWxzZSAxLgorCSAqLworCWZvciAoRW50cnkgPSAwOyAoRW50cnkgPCBNQVhfUlRBX0JJTkRJTkdTKSAmJiAocC0+UklPQmluZFRhYltFbnRyeV0gIT0gMCk7IEVudHJ5KyspIHsKKwkJaWYgKChwLT5SSU9CaW5kVGFiW0VudHJ5XSA9PSBIb3N0VW5pcSkgfHwgKHAtPlJJT0JpbmRUYWJbRW50cnldID09IFJ0YVVuaXEpKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtMTI1NSw0NSArMTA3NiwzOCBAQAogKiogc2xvdHMgdGVudGF0aXZlLCBhbmQgdGhlIHNlY29uZCBvbmUgUlRBX1NFQ09ORF9TTE9UIGFzIHdlbGwuCiAqLwogCi12b2lkCi1GaWxsU2xvdChlbnRyeSwgZW50cnkyLCBSdGFVbmlxLCBIb3N0UCkKLWludCBlbnRyeTsKLWludCBlbnRyeTI7Ci11aW50IFJ0YVVuaXE7Ci1zdHJ1Y3QgSG9zdCAqSG9zdFA7Cit2b2lkIHJpb19maWxsX2hvc3Rfc2xvdChpbnQgZW50cnksIGludCBlbnRyeTIsIHVuc2lnbmVkIGludCBydGFfdW5pcSwgc3RydWN0IEhvc3QgKmhvc3QpCiB7Ci0JaW50CQlsaW5rOworCWludCBsaW5rOwogCi0JcmlvX2RwcmludGsgKFJJT19ERUJVR19CT09ULCAiRmlsbFNsb3QoJWQsICVkLCAweCV4Li4uKVxuIiwgZW50cnksIGVudHJ5MiwgUnRhVW5pcSk7CisJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJyaW9fZmlsbF9ob3N0X3Nsb3QoJWQsICVkLCAweCV4Li4uKVxuIiwgZW50cnksIGVudHJ5MiwgcnRhX3VuaXEpOwogCi0JSG9zdFAtPk1hcHBpbmdbZW50cnldLkZsYWdzID0gKFJUQV9CT09URUQgfCBSVEFfTkVXQk9PVCB8IFNMT1RfVEVOVEFUSVZFKTsKLQlIb3N0UC0+TWFwcGluZ1tlbnRyeV0uU3lzUG9ydCA9IE5PX1BPUlQ7Ci0JSG9zdFAtPk1hcHBpbmdbZW50cnldLlJ0YVVuaXF1ZU51bSA9IFJ0YVVuaXE7Ci0JSG9zdFAtPk1hcHBpbmdbZW50cnldLkhvc3RVbmlxdWVOdW0gPSBIb3N0UC0+VW5pcXVlTnVtOwotCUhvc3RQLT5NYXBwaW5nW2VudHJ5XS5JRCA9IGVudHJ5ICsgMTsKLQlIb3N0UC0+TWFwcGluZ1tlbnRyeV0uSUQyID0gMDsKKwlob3N0LT5NYXBwaW5nW2VudHJ5XS5GbGFncyA9IChSVEFfQk9PVEVEIHwgUlRBX05FV0JPT1QgfCBTTE9UX1RFTlRBVElWRSk7CisJaG9zdC0+TWFwcGluZ1tlbnRyeV0uU3lzUG9ydCA9IE5PX1BPUlQ7CisJaG9zdC0+TWFwcGluZ1tlbnRyeV0uUnRhVW5pcXVlTnVtID0gcnRhX3VuaXE7CisJaG9zdC0+TWFwcGluZ1tlbnRyeV0uSG9zdFVuaXF1ZU51bSA9IGhvc3QtPlVuaXF1ZU51bTsKKwlob3N0LT5NYXBwaW5nW2VudHJ5XS5JRCA9IGVudHJ5ICsgMTsKKwlob3N0LT5NYXBwaW5nW2VudHJ5XS5JRDIgPSAwOwogCWlmIChlbnRyeTIpIHsKLQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5GbGFncyA9IChSVEFfQk9PVEVEIHwgUlRBX05FV0JPT1QgfCAKLQkJCQkJCQkJU0xPVF9URU5UQVRJVkUgfCBSVEExNl9TRUNPTkRfU0xPVCk7Ci0JCUhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uU3lzUG9ydCA9IE5PX1BPUlQ7Ci0JCUhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uUnRhVW5pcXVlTnVtID0gUnRhVW5pcTsKLQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5Ib3N0VW5pcXVlTnVtID0gSG9zdFAtPlVuaXF1ZU51bTsKLQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5OYW1lWzBdID0gJ1wwJzsKLQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5JRCA9IGVudHJ5MiArIDE7Ci0JCUhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uSUQyID0gZW50cnkgKyAxOwotCQlIb3N0UC0+TWFwcGluZ1tlbnRyeV0uSUQyID0gZW50cnkyICsgMTsKKwkJaG9zdC0+TWFwcGluZ1tlbnRyeTJdLkZsYWdzID0gKFJUQV9CT09URUQgfCBSVEFfTkVXQk9PVCB8IFNMT1RfVEVOVEFUSVZFIHwgUlRBMTZfU0VDT05EX1NMT1QpOworCQlob3N0LT5NYXBwaW5nW2VudHJ5Ml0uU3lzUG9ydCA9IE5PX1BPUlQ7CisJCWhvc3QtPk1hcHBpbmdbZW50cnkyXS5SdGFVbmlxdWVOdW0gPSBydGFfdW5pcTsKKwkJaG9zdC0+TWFwcGluZ1tlbnRyeTJdLkhvc3RVbmlxdWVOdW0gPSBob3N0LT5VbmlxdWVOdW07CisJCWhvc3QtPk1hcHBpbmdbZW50cnkyXS5OYW1lWzBdID0gJ1wwJzsKKwkJaG9zdC0+TWFwcGluZ1tlbnRyeTJdLklEID0gZW50cnkyICsgMTsKKwkJaG9zdC0+TWFwcGluZ1tlbnRyeTJdLklEMiA9IGVudHJ5ICsgMTsKKwkJaG9zdC0+TWFwcGluZ1tlbnRyeV0uSUQyID0gZW50cnkyICsgMTsKIAl9CiAJLyoKLQkqKiBNdXN0IHNldCB0aGVzZSB1cCwgc28gdGhhdCB1dGlsaXRpZXMgc2hvdwotCSoqIHRvcG9sb2d5IG9mIDE2IHBvcnQgUlRBcyBjb3JyZWN0bHkKLQkqLwotCWZvciAoIGxpbms9MDsgbGluazxMSU5LU19QRVJfVU5JVDsgbGluaysrICkgewotCQlIb3N0UC0+TWFwcGluZ1tlbnRyeV0uVG9wb2xvZ3lbbGlua10uVW5pdCA9IFJPVVRFX0RJU0NPTk5FQ1Q7Ci0JCUhvc3RQLT5NYXBwaW5nW2VudHJ5XS5Ub3BvbG9neVtsaW5rXS5MaW5rID0gTk9fTElOSzsKKwkgKiogTXVzdCBzZXQgdGhlc2UgdXAsIHNvIHRoYXQgdXRpbGl0aWVzIHNob3cKKwkgKiogdG9wb2xvZ3kgb2YgMTYgcG9ydCBSVEFzIGNvcnJlY3RseQorCSAqLworCWZvciAobGluayA9IDA7IGxpbmsgPCBMSU5LU19QRVJfVU5JVDsgbGluaysrKSB7CisJCWhvc3QtPk1hcHBpbmdbZW50cnldLlRvcG9sb2d5W2xpbmtdLlVuaXQgPSBST1VURV9ESVNDT05ORUNUOworCQlob3N0LT5NYXBwaW5nW2VudHJ5XS5Ub3BvbG9neVtsaW5rXS5MaW5rID0gTk9fTElOSzsKIAkJaWYgKGVudHJ5MikgewotCQkJSG9zdFAtPk1hcHBpbmdbZW50cnkyXS5Ub3BvbG9neVtsaW5rXS5Vbml0ID0gUk9VVEVfRElTQ09OTkVDVDsKLQkJCUhvc3RQLT5NYXBwaW5nW2VudHJ5Ml0uVG9wb2xvZ3lbbGlua10uTGluayA9IE5PX0xJTks7CisJCQlob3N0LT5NYXBwaW5nW2VudHJ5Ml0uVG9wb2xvZ3lbbGlua10uVW5pdCA9IFJPVVRFX0RJU0NPTk5FQ1Q7CisJCQlob3N0LT5NYXBwaW5nW2VudHJ5Ml0uVG9wb2xvZ3lbbGlua10uTGluayA9IE5PX0xJTks7CiAJCX0KIAl9CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCmluZGV4IDY5NGJmYjkuLmU2ZDJiMTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpAQCAtNTAsMTUgKzUxLDEyIEBACiAKICNpbmNsdWRlICJsaW51eF9jb21wYXQuaCIKICNpbmNsdWRlICJyaW9fbGludXguaCIKLSNpbmNsdWRlICJ0eXBkZWYuaCIKICNpbmNsdWRlICJwa3QuaCIKICNpbmNsdWRlICJkYWVtb24uaCIKICNpbmNsdWRlICJyaW8uaCIKICNpbmNsdWRlICJyaW9zcGFjZS5oIgotI2luY2x1ZGUgInRvcC5oIgogI2luY2x1ZGUgImNtZHBrdC5oIgogI2luY2x1ZGUgIm1hcC5oIgotI2luY2x1ZGUgInJpb3R5cGVzLmgiCiAjaW5jbHVkZSAicnVwLmgiCiAjaW5jbHVkZSAicG9ydC5oIgogI2luY2x1ZGUgInJpb2RydnIuaCIKQEAgLTcxLDEyICs2OSwxMCBAQAogI2luY2x1ZGUgInVuaXhydXAuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImhvc3QuaCIKLSNpbmNsdWRlICJlcnJvci5oIgogI2luY2x1ZGUgInBoYi5oIgogI2luY2x1ZGUgImxpbmsuaCIKICNpbmNsdWRlICJjbWRibGsuaCIKICNpbmNsdWRlICJyb3V0ZS5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKICNpbmNsdWRlICJjaXJydXMuaCIKIAogCkBAIC0xNDMsMTcgKzEzOSwxNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgUklPQ29tbWFuZFJ0YShzdHJ1Y3QgcmlvX2luZm8gKnAsIHVpbnQgUnRhVW5pcXVlLCBpbnQgKCpmdW5jKSAoc3RydWN0IEhvc3QgKiBIb3N0UCwgc3RydWN0IE1hcCAqIE1hcFApKQoraW50IFJJT0NvbW1hbmRSdGEoc3RydWN0IHJpb19pbmZvICpwLCB1bnNpZ25lZCBsb25nIFJ0YVVuaXF1ZSwgaW50ICgqZnVuYykgKHN0cnVjdCBIb3N0ICogSG9zdFAsIHN0cnVjdCBNYXAgKiBNYXBQKSkKIHsKLQl1aW50IEhvc3Q7CisJdW5zaWduZWQgaW50IEhvc3Q7CiAKLQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQ29tbWFuZCBSVEEgMHgleCBmdW5jIDB4JXhcbiIsIFJ0YVVuaXF1ZSwgKGludCkgZnVuYyk7CisJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNvbW1hbmQgUlRBIDB4JWx4IGZ1bmMgJXBcbiIsIFJ0YVVuaXF1ZSwgZnVuYyk7CiAKIAlpZiAoIVJ0YVVuaXF1ZSkKIAkJcmV0dXJuICgwKTsKIAogCWZvciAoSG9zdCA9IDA7IEhvc3QgPCBwLT5SSU9OdW1Ib3N0czsgSG9zdCsrKSB7Ci0JCXVpbnQgUnRhOworCQl1bnNpZ25lZCBpbnQgUnRhOwogCQlzdHJ1Y3QgSG9zdCAqSG9zdFAgPSAmcC0+UklPSG9zdHNbSG9zdF07CiAKIAkJZm9yIChSdGEgPSAwOyBSdGEgPCBSVEFTX1BFUl9IT1NUOyBSdGErKykgewpAQCAtMTcwLDcgKzE2Niw3IEBACiAJCQkJICoqIGFueSBjb25uZWN0aW9ucywgd2UgY2FuIGdldCB0byBpdC4KIAkJCQkgKi8KIAkJCQlmb3IgKExpbmsgPSAwOyBMaW5rIDwgTElOS1NfUEVSX1VOSVQ7IExpbmsrKykgewotCQkJCQlpZiAoTWFwUC0+VG9wb2xvZ3lbTGlua10uVW5pdCA8PSAodWNoYXIpIE1BWF9SVVApIHsKKwkJCQkJaWYgKE1hcFAtPlRvcG9sb2d5W0xpbmtdLlVuaXQgPD0gKHU4KSBNQVhfUlVQKSB7CiAJCQkJCQkvKgogCQkJCQkJICoqIEl0cyB3b3J0aCB0cnlpbmcgdGhlIG9wZXJhdGlvbi4uLgogCQkJCQkJICovCkBAIC0xODQsMTggKzE4MCwxOCBAQAogfQogCiAKLWludCBSSU9JZGVudGlmeVJ0YShzdHJ1Y3QgcmlvX2luZm8gKnAsIGNhZGRyX3QgYXJnKQoraW50IFJJT0lkZW50aWZ5UnRhKHN0cnVjdCByaW9faW5mbyAqcCwgdm9pZCAqIGFyZykKIHsKLQl1aW50IEhvc3Q7CisJdW5zaWduZWQgaW50IEhvc3Q7CiAKLQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgSWRSdGEsIHNpemVvZihJZFJ0YSkpID09IENPUFlGQUlMKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZJZFJ0YSwgYXJnLCBzaXplb2YoSWRSdGEpKSkgewogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUklPX0lERU5USUZZX1JUQSBjb3B5IGZhaWxlZFxuIik7CiAJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAJZm9yIChIb3N0ID0gMDsgSG9zdCA8IHAtPlJJT051bUhvc3RzOyBIb3N0KyspIHsKLQkJdWludCBSdGE7CisJCXVuc2lnbmVkIGludCBSdGE7CiAJCXN0cnVjdCBIb3N0ICpIb3N0UCA9ICZwLT5SSU9Ib3N0c1tIb3N0XTsKIAogCQlmb3IgKFJ0YSA9IDA7IFJ0YSA8IFJUQVNfUEVSX0hPU1Q7IFJ0YSsrKSB7CkBAIC0yMTEsNyArMjA3LDcgQEAKIAkJCQkgKiogYW55IGNvbm5lY3Rpb25zLCB3ZSBjYW4gZ2V0IHRvIGl0LgogCQkJCSAqLwogCQkJCWZvciAoTGluayA9IDA7IExpbmsgPCBMSU5LU19QRVJfVU5JVDsgTGluaysrKSB7Ci0JCQkJCWlmIChNYXBQLT5Ub3BvbG9neVtMaW5rXS5Vbml0IDw9ICh1Y2hhcikgTUFYX1JVUCkgeworCQkJCQlpZiAoTWFwUC0+VG9wb2xvZ3lbTGlua10uVW5pdCA8PSAodTgpIE1BWF9SVVApIHsKIAkJCQkJCS8qCiAJCQkJCQkgKiogSXRzIHdvcnRoIHRyeWluZyB0aGUgb3BlcmF0aW9uLi4uCiAJCQkJCQkgKi8KQEAgLTI0OSw3ICsyNDUsNyBAQAogfQogCiAKLWludCBSSU9LaWxsTmVpZ2hib3VyKHN0cnVjdCByaW9faW5mbyAqcCwgY2FkZHJfdCBhcmcpCitpbnQgUklPS2lsbE5laWdoYm91cihzdHJ1Y3QgcmlvX2luZm8gKnAsIHZvaWQgKiBhcmcpCiB7CiAJdWludCBIb3N0OwogCXVpbnQgSUQ7CkBAIC0yNTgsNyArMjU0LDcgQEAKIAogCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJLSUxMIEhPU1QgTkVJR0hCT1VSXG4iKTsKIAotCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBLaWxsVW5pdCwgc2l6ZW9mKEtpbGxVbml0KSkgPT0gQ09QWUZBSUwpIHsKKwlpZiAoY29weV9mcm9tX3VzZXIoJktpbGxVbml0LCBhcmcsIHNpemVvZihLaWxsVW5pdCkpKSB7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJSSU9fS0lMTF9ORUlHSEJPVVIgY29weSBmYWlsZWRcbiIpOwogCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMzQ0LDcgKzM0MCw3IEBACiBpbnQgUklPRm9hZFdha2V1cChzdHJ1Y3QgcmlvX2luZm8gKnApCiB7CiAJaW50IHBvcnQ7Ci0JcmVnaXN0ZXIgc3RydWN0IFBvcnQgKlBvcnRQOworCXN0cnVjdCBQb3J0ICpQb3J0UDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFJJT19QT1JUUzsgcG9ydCsrKSB7CkBAIC0zNzQsMTUgKzM3MCwxNSBAQAogLyoKICoqIEluY29taW5nIGNvbW1hbmQgb24gdGhlIENPTU1BTkRfUlVQIHRvIGJlIHByb2Nlc3NlZC4KICovCi1zdGF0aWMgaW50IFJJT0NvbW1hbmRSdXAoc3RydWN0IHJpb19pbmZvICpwLCB1aW50IFJ1cCwgc3RydWN0IEhvc3QgKkhvc3RQLCBQS1QgKiBQYWNrZXRQKQorc3RhdGljIGludCBSSU9Db21tYW5kUnVwKHN0cnVjdCByaW9faW5mbyAqcCwgdWludCBSdXAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgc3RydWN0IFBLVCAqIFBhY2tldFApCiB7CiAJc3RydWN0IFBrdENtZCAqUGt0Q21kUCA9IChzdHJ1Y3QgUGt0Q21kICopIFBhY2tldFAtPmRhdGE7CiAJc3RydWN0IFBvcnQgKlBvcnRQOwogCXN0cnVjdCBVbml4UnVwICpVbml4UnVwUDsKLQl1c2hvcnQgU3lzUG9ydDsKLQl1c2hvcnQgUmVwb3J0ZWRNb2RlbVN0YXR1czsKLQl1c2hvcnQgcnVwOwotCXVzaG9ydCBzdWJDb21tYW5kOworCXVuc2lnbmVkIHNob3J0IFN5c1BvcnQ7CisJdW5zaWduZWQgc2hvcnQgUmVwb3J0ZWRNb2RlbVN0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCBydXA7CisJdW5zaWduZWQgc2hvcnQgc3ViQ29tbWFuZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZnVuY19lbnRlcigpOwpAQCAtMzk1LDE4ICszOTEsMTggQEAKIAkgKiogd2UgY2FuIHVzZSBQaGJOdW0gdG8gZ2V0IHRoZSBydXAgbnVtYmVyIGZvciB0aGUgYXBwcm9wcmlhdGUgOCBwb3J0CiAJICoqIGJsb2NrIChmb3IgdGhlIGZpcnN0IGJsb2NrLCB0aGlzIHNob3VsZCBiZSBlcXVhbCB0byAnUnVwJykuCiAJICovCi0JcnVwID0gUkJZVEUoUGt0Q21kUC0+UGhiTnVtKSAvICh1c2hvcnQpIFBPUlRTX1BFUl9SVEE7CisJcnVwID0gcmVhZGIoJlBrdENtZFAtPlBoYk51bSkgLyAodW5zaWduZWQgc2hvcnQpIFBPUlRTX1BFUl9SVEE7CiAJVW5peFJ1cFAgPSAmSG9zdFAtPlVuaXhSdXBzW3J1cF07Ci0JU3lzUG9ydCA9IFVuaXhSdXBQLT5CYXNlU3lzUG9ydCArIChSQllURShQa3RDbWRQLT5QaGJOdW0pICUgKHVzaG9ydCkgUE9SVFNfUEVSX1JUQSk7CisJU3lzUG9ydCA9IFVuaXhSdXBQLT5CYXNlU3lzUG9ydCArIChyZWFkYigmUGt0Q21kUC0+UGhiTnVtKSAlICh1bnNpZ25lZCBzaG9ydCkgUE9SVFNfUEVSX1JUQSk7CiAJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNvbW1hbmQgb24gcnVwICVkLCBwb3J0ICVkXG4iLCBydXAsIFN5c1BvcnQpOwogCiAJaWYgKFVuaXhSdXBQLT5CYXNlU3lzUG9ydCA9PSBOT19QT1JUKSB7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJPQlNDVVJFIEVSUk9SIVxuIik7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJEaWFnbm9zdGljcyBmb2xsb3cuIFBsZWFzZSBXUklURSBUSEVTRSBET1dOIGFuZCByZXBvcnQgdGhlbSB0byBTcGVjaWFsaXggVGVjaG5pY2FsIFN1cHBvcnRcbiIpOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQ09OVFJPTCBpbmZvcm1hdGlvbjogSG9zdCBudW1iZXIgJWQsIG5hbWUgYGAlcycnXG4iLCBIb3N0UCAtIHAtPlJJT0hvc3RzLCBIb3N0UC0+TmFtZSk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJDT05UUk9MIGluZm9ybWF0aW9uOiBIb3N0IG51bWJlciAlWmQsIG5hbWUgYGAlcycnXG4iLCBIb3N0UCAtIHAtPlJJT0hvc3RzLCBIb3N0UC0+TmFtZSk7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJDT05UUk9MIGluZm9ybWF0aW9uOiBSdXAgbnVtYmVyICAweCV4XG4iLCBydXApOwogCi0JCWlmIChSdXAgPj0gKHVzaG9ydCkgTUFYX1JVUCkgeworCQlpZiAoUnVwID49ICh1bnNpZ25lZCBzaG9ydCkgTUFYX1JVUCkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNPTlRST0wgaW5mb3JtYXRpb246IFRoaXMgaXMgdGhlIFJVUCBmb3IgUlRBIGBgJXMnJ1xuIiwgSG9zdFAtPk1hcHBpbmdbUnVwXS5OYW1lKTsKIAkJfSBlbHNlCiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQ09OVFJPTCBpbmZvcm1hdGlvbjogVGhpcyBpcyB0aGUgUlVQIGZvciBsaW5rIGBgJWMnJyBvZiBob3N0IGBgJXMnJ1xuIiwgKCdBJyArIFJ1cCAtIE1BWF9SVVApLCBIb3N0UC0+TmFtZSk7CkBAIC00MTcsMTYgKzQxMywxNiBAQAogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUEFDS0VUIGluZm9ybWF0aW9uOiBDb250cm9sCSAweCV4ICglZClcbiIsIFBhY2tldFAtPmNvbnRyb2wsIFBhY2tldFAtPmNvbnRyb2wpOwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUEFDS0VUIGluZm9ybWF0aW9uOiBDaGVjawkgICAweCV4ICglZClcbiIsIFBhY2tldFAtPmNzdW0sIFBhY2tldFAtPmNzdW0pOwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQ09NTUFORCBpbmZvcm1hdGlvbjogSG9zdCBQb3J0IE51bWJlciAweCV4LCAiICJDb21tYW5kIENvZGUgMHgleFxuIiwgUGt0Q21kUC0+UGhiTnVtLCBQa3RDbWRQLT5Db21tYW5kKTsKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiAxOwogCX0KIAlQb3J0UCA9IHAtPlJJT1BvcnRwW1N5c1BvcnRdOwogCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQlzd2l0Y2ggKFJCWVRFKFBrdENtZFAtPkNvbW1hbmQpKSB7CisJc3dpdGNoIChyZWFkYigmUGt0Q21kUC0+Q29tbWFuZCkpIHsKIAljYXNlIEJSRUFLX1JFQ0VJVkVEOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUmVjZWl2ZWQgYSBicmVhayFcbiIpOwogCQkvKiBJZiB0aGUgY3VycmVudCBsaW5lIGRpc2MuIGlzIG5vdCBtdWx0aS10aHJlYWRpbmcgYW5kCiAJCSAgIHRoZSBjdXJyZW50IHByb2Nlc3NvciBpcyBub3QgdGhlIGRlZmF1bHQsIHJlc2V0IHJ1cF9pbnRyCi0JCSAgIGFuZCByZXR1cm4gRkFMU0UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbW1hbmQgcGFja2V0IGlzCisJCSAgIGFuZCByZXR1cm4gMCB0byBlbnN1cmUgdGhhdCB0aGUgY29tbWFuZCBwYWNrZXQgaXMKIAkJICAgbm90IGZyZWVkLiAqLwogCQkvKiBDYWxsIHRtZ3IgSEFOR1VQIEhFUkUgKi8KIAkJLyogRml4IHRoaXMgbGF0ZXIgd2hlbiBldmVyeSB0aGluZyB3b3JrcyAhISEhIFJBTVJBSiAqLwpAQCAtNDM0LDE1ICs0MzAsMTUgQEAKIAkJYnJlYWs7CiAKIAljYXNlIENPTVBMRVRFOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQ29tbWFuZCBjb21wbGV0ZSBvbiBwaGIgJWQgaG9zdCAlZFxuIiwgUkJZVEUoUGt0Q21kUC0+UGhiTnVtKSwgSG9zdFAgLSBwLT5SSU9Ib3N0cyk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJDb21tYW5kIGNvbXBsZXRlIG9uIHBoYiAlZCBob3N0ICVaZFxuIiwgcmVhZGIoJlBrdENtZFAtPlBoYk51bSksIEhvc3RQIC0gcC0+UklPSG9zdHMpOwogCQlzdWJDb21tYW5kID0gMTsKLQkJc3dpdGNoIChSQllURShQa3RDbWRQLT5TdWJDb21tYW5kKSkgeworCQlzd2l0Y2ggKHJlYWRiKCZQa3RDbWRQLT5TdWJDb21tYW5kKSkgewogCQljYXNlIE1FTURVTVA6Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiTWVtb3J5IGR1bXAgY21kICgweCV4KSBmcm9tIGFkZHIgMHgleFxuIiwgUkJZVEUoUGt0Q21kUC0+U3ViQ29tbWFuZCksIFJXT1JEKFBrdENtZFAtPlN1YkFkZHIpKTsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJNZW1vcnkgZHVtcCBjbWQgKDB4JXgpIGZyb20gYWRkciAweCV4XG4iLCByZWFkYigmUGt0Q21kUC0+U3ViQ29tbWFuZCksIHJlYWR3KCZQa3RDbWRQLT5TdWJBZGRyKSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRUFEX1JFR0lTVEVSOgotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlJlYWQgcmVnaXN0ZXIgKDB4JXgpXG4iLCBSV09SRChQa3RDbWRQLT5TdWJBZGRyKSk7Ci0JCQlwLT5DZFJlZ2lzdGVyID0gKFJCWVRFKFBrdENtZFAtPk1vZGVtU3RhdHVzKSAmIE1TVlIxX0hPU1QpOworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlJlYWQgcmVnaXN0ZXIgKDB4JXgpXG4iLCByZWFkdygmUGt0Q21kUC0+U3ViQWRkcikpOworCQkJcC0+Q2RSZWdpc3RlciA9IChyZWFkYigmUGt0Q21kUC0+TW9kZW1TdGF0dXMpICYgTVNWUjFfSE9TVCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXN1YkNvbW1hbmQgPSAwOwpAQCAtNDUwLDEwICs0NDYsMTAgQEAKIAkJfQogCQlpZiAoc3ViQ29tbWFuZCkKIAkJCWJyZWFrOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiTmV3IHN0YXR1cyBpcyAweCV4IHdhcyAweCV4XG4iLCBSQllURShQa3RDbWRQLT5Qb3J0U3RhdHVzKSwgUG9ydFAtPlBvcnRTdGF0ZSk7Ci0JCWlmIChQb3J0UC0+UG9ydFN0YXRlICE9IFJCWVRFKFBrdENtZFAtPlBvcnRTdGF0dXMpKSB7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJOZXcgc3RhdHVzIGlzIDB4JXggd2FzIDB4JXhcbiIsIHJlYWRiKCZQa3RDbWRQLT5Qb3J0U3RhdHVzKSwgUG9ydFAtPlBvcnRTdGF0ZSk7CisJCWlmIChQb3J0UC0+UG9ydFN0YXRlICE9IHJlYWRiKCZQa3RDbWRQLT5Qb3J0U3RhdHVzKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIk1hcmsgc3RhdHVzICYgd2FrZXVwXG4iKTsKLQkJCVBvcnRQLT5Qb3J0U3RhdGUgPSBSQllURShQa3RDbWRQLT5Qb3J0U3RhdHVzKTsKKwkJCVBvcnRQLT5Qb3J0U3RhdGUgPSByZWFkYigmUGt0Q21kUC0+UG9ydFN0YXR1cyk7CiAJCQkvKiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlIC4uLgogCQkJICAgd2FrZXVwKCAmUG9ydFAtPlBvcnRTdGF0ZSApOwogCQkJICovCkBAIC00NjcsNyArNDYzLDcgQEAKIAkJICoqIHRvIHRoZSBjaGVjayBmb3IgbW9kZW0gc3RhdHVzIGNoYW5nZSAodGhleSdyZSBqdXN0IHRoZXJlIGJlY2F1c2UKIAkJICoqIGl0J3MgYSBjb252ZW5pZW50IHBsYWNlIHRvIHB1dCB0aGVtISkuCiAJCSAqLwotCQlSZXBvcnRlZE1vZGVtU3RhdHVzID0gUkJZVEUoUGt0Q21kUC0+TW9kZW1TdGF0dXMpOworCQlSZXBvcnRlZE1vZGVtU3RhdHVzID0gcmVhZGIoJlBrdENtZFAtPk1vZGVtU3RhdHVzKTsKIAkJaWYgKChQb3J0UC0+TW9kZW1TdGF0ZSAmIE1TVlIxX0hPU1QpID09IChSZXBvcnRlZE1vZGVtU3RhdHVzICYgTVNWUjFfSE9TVCkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJNb2RlbSBzdGF0dXMgdW5jaGFuZ2VkIDB4JXhcbiIsIFBvcnRQLT5Nb2RlbVN0YXRlKTsKIAkJCS8qCkBAIC01MTQsOSArNTEwLDYgQEAKIAkJCQkJCQkgKi8KIAkJCQkJCQlpZiAoUG9ydFAtPlN0YXRlICYgKFBPUlRfSVNPUEVOIHwgUklPX1dPUEVOKSkKIAkJCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZQb3J0UC0+Z3Mub3Blbl93YWl0KTsKLSNpZmRlZiBTVEFUUwotCQkJCQkJCVBvcnRQLT5TdGF0Lk1vZGVtT25DbnQrKzsKLSNlbmRpZgogCQkJCQkJfQogCQkJCQl9IGVsc2UgewogCQkJCQkJLyoKQEAgLTUyNyw5ICs1MjAsNiBAQAogCQkJCQkJCQl0dHlfaGFuZ3VwKFBvcnRQLT5ncy50dHkpOwogCQkJCQkJCVBvcnRQLT5TdGF0ZSAmPSB+UklPX0NBUlJfT047CiAJCQkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNhcnJpcmVyIGp1c3Qgd2VudCBkb3duXG4iKTsKLSNpZmRlZiBTVEFUUwotCQkJCQkJCVBvcnRQLT5TdGF0Lk1vZGVtT2ZmQ250Kys7Ci0jZW5kaWYKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KQEAgLTUzOSwxNCArNTI5LDE0IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlVua25vd24gY29tbWFuZCAlZCBvbiBDTURfUlVQIG9mIGhvc3QgJWRcbiIsIFJCWVRFKFBrdENtZFAtPkNvbW1hbmQpLCBIb3N0UCAtIHAtPlJJT0hvc3RzKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlVua25vd24gY29tbWFuZCAlZCBvbiBDTURfUlVQIG9mIGhvc3QgJVpkXG4iLCByZWFkYigmUGt0Q21kUC0+Q29tbWFuZCksIEhvc3RQIC0gcC0+UklPSG9zdHMpOwogCQlicmVhazsKIAl9CiAJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7CiAKIAlmdW5jX2V4aXQoKTsKIAotCXJldHVybiBUUlVFOworCXJldHVybiAxOwogfQogCiAvKgpAQCAtNTY2LDEwICs1NTYsOSBAQAogewogCXN0cnVjdCBDbWRCbGsgKkNtZEJsa1A7CiAKLQlDbWRCbGtQID0gKHN0cnVjdCBDbWRCbGsgKikgc3lzYnJrKHNpemVvZihzdHJ1Y3QgQ21kQmxrKSk7CisJQ21kQmxrUCA9IChzdHJ1Y3QgQ21kQmxrICopa21hbGxvYyhzaXplb2Yoc3RydWN0IENtZEJsayksIEdGUF9BVE9NSUMpOwogCWlmIChDbWRCbGtQKQotCQliemVybyhDbWRCbGtQLCBzaXplb2Yoc3RydWN0IENtZEJsaykpOwotCisJCW1lbXNldChDbWRCbGtQLCAwLCBzaXplb2Yoc3RydWN0IENtZEJsaykpOwogCXJldHVybiBDbWRCbGtQOwogfQogCkBAIC01NzgsNyArNTY3LDcgQEAKICovCiB2b2lkIFJJT0ZyZWVDbWRCbGsoc3RydWN0IENtZEJsayAqQ21kQmxrUCkKIHsKLQlzeXNmcmVlKCh2b2lkICopIENtZEJsa1AsIHNpemVvZihzdHJ1Y3QgQ21kQmxrKSk7CisJa2ZyZWUoQ21kQmxrUCk7CiB9CiAKIC8qCkBAIC01OTEsNyArNTgwLDcgQEAKIAlzdHJ1Y3QgVW5peFJ1cCAqVW5peFJ1cFA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChSdXAgPj0gKHVzaG9ydCkgKE1BWF9SVVAgKyBMSU5LU19QRVJfVU5JVCkpIHsKKwlpZiAoUnVwID49ICh1bnNpZ25lZCBzaG9ydCkgKE1BWF9SVVAgKyBMSU5LU19QRVJfVU5JVCkpIHsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIklsbGVnYWwgcnVwIG51bWJlciAlZCBpbiBSSU9RdWV1ZUNtZEJsa1xuIiwgUnVwKTsKIAkJUklPRnJlZUNtZEJsayhDbWRCbGtQKTsKIAkJcmV0dXJuIFJJT19GQUlMOwpAQCAtNjA1LDE0ICs1OTQsMTQgQEAKIAkgKiogSWYgdGhlIFJVUCBpcyBjdXJyZW50bHkgaW5hY3RpdmUsIHRoZW4gcHV0IHRoZSByZXF1ZXN0CiAJICoqIHN0cmFpZ2h0IG9uIHRoZSBSVVAuLi4uCiAJICovCi0JaWYgKChVbml4UnVwUC0+Q21kc1dhaXRpbmdQID09IE5VTEwpICYmIChVbml4UnVwUC0+Q21kUGVuZGluZ1AgPT0gTlVMTCkgJiYgKFJXT1JEKFVuaXhSdXBQLT5SdXBQLT50eGNvbnRyb2wpID09IFRYX1JVUF9JTkFDVElWRSkgJiYgKENtZEJsa1AtPlByZUZ1bmNQID8gKCpDbWRCbGtQLT5QcmVGdW5jUCkgKENtZEJsa1AtPlByZUFyZywgQ21kQmxrUCkKLQkJCQkJCQkJCQkJCQkJCQkJICAgICA6IFRSVUUpKSB7CisJaWYgKChVbml4UnVwUC0+Q21kc1dhaXRpbmdQID09IE5VTEwpICYmIChVbml4UnVwUC0+Q21kUGVuZGluZ1AgPT0gTlVMTCkgJiYgKHJlYWR3KCZVbml4UnVwUC0+UnVwUC0+dHhjb250cm9sKSA9PSBUWF9SVVBfSU5BQ1RJVkUpICYmIChDbWRCbGtQLT5QcmVGdW5jUCA/ICgqQ21kQmxrUC0+UHJlRnVuY1ApIChDbWRCbGtQLT5QcmVBcmcsIENtZEJsa1ApCisJCQkJCQkJCQkJCQkJCQkJCSAgICAgOiAxKSkgewogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUlVQIGluYWN0aXZlLXBsYWNpbmcgY29tbWFuZCBzdHJhaWdodCBvbi4gQ21kIGJ5dGUgaXMgMHgleFxuIiwgQ21kQmxrUC0+UGFja2V0LmRhdGFbMF0pOwogCiAJCS8qCiAJCSAqKiBXaGFtbXkhIGJsYXQgdGhhdCBwYWNrIQogCQkgKi8KLQkJSG9zdFAtPkNvcHkoKGNhZGRyX3QpICYgQ21kQmxrUC0+UGFja2V0LCBSSU9fUFRSKEhvc3RQLT5DYWRkciwgVW5peFJ1cFAtPlJ1cFAtPnR4cGt0KSwgc2l6ZW9mKFBLVCkpOworCQlIb3N0UC0+Q29weSgoY2FkZHJfdCkgJiBDbWRCbGtQLT5QYWNrZXQsIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBVbml4UnVwUC0+UnVwUC0+dHhwa3QpLCBzaXplb2Yoc3RydWN0IFBLVCkpOwogCiAJCS8qCiAJCSAqKiBwbGFjZSBjb21tYW5kIHBhY2tldCBvbiB0aGUgcGVuZGluZyBwb3NpdGlvbi4KQEAgLTYyMiwxMSArNjExLDExIEBACiAJCS8qCiAJCSAqKiBzZXQgdGhlIGNvbW1hbmQgcmVnaXN0ZXIKIAkJICovCi0JCVdXT1JEKFVuaXhSdXBQLT5SdXBQLT50eGNvbnRyb2wsIFRYX1BBQ0tFVF9SRUFEWSk7CisJCXdyaXRldyhUWF9QQUNLRVRfUkVBRFksICZVbml4UnVwUC0+UnVwUC0+dHhjb250cm9sKTsKIAogCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmVW5peFJ1cFAtPlJ1cExvY2ssIGZsYWdzKTsKIAotCQlyZXR1cm4gUklPX1NVQ0NFU1M7CisJCXJldHVybiAwOwogCX0KIAlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUlVQIGFjdGl2ZSAtIGVuLXF1ZWluZ1xuIik7CiAKQEAgLTYzNCwyMCArNjIzLDIwIEBACiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJSdXAgYWN0aXZlIC0gY29tbWFuZCB3YWl0aW5nXG4iKTsKIAlpZiAoVW5peFJ1cFAtPkNtZFBlbmRpbmdQICE9IE5VTEwpCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJSdXAgYWN0aXZlIC0gY29tbWFuZCBwZW5kaW5nXG4iKTsKLQlpZiAoUldPUkQoVW5peFJ1cFAtPlJ1cFAtPnR4Y29udHJvbCkgIT0gVFhfUlVQX0lOQUNUSVZFKQorCWlmIChyZWFkdygmVW5peFJ1cFAtPlJ1cFAtPnR4Y29udHJvbCkgIT0gVFhfUlVQX0lOQUNUSVZFKQogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUnVwIGFjdGl2ZSAtIGNvbW1hbmQgcnVwIG5vdCByZWFkeVxuIik7CiAKIAlCYXNlID0gJlVuaXhSdXBQLT5DbWRzV2FpdGluZ1A7CiAKLQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiRmlyc3QgdHJ5IHRvIHF1ZXVlIGNtZGJsayAweCV4IGF0IDB4JXhcbiIsIChpbnQpIENtZEJsa1AsIChpbnQpIEJhc2UpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJGaXJzdCB0cnkgdG8gcXVldWUgY21kYmxrICVwIGF0ICVwXG4iLCBDbWRCbGtQLCBCYXNlKTsKIAogCXdoaWxlICgqQmFzZSkgewotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQ29tbWFuZCBjbWRibGsgMHgleCBoZXJlXG4iLCAoaW50KSAoKkJhc2UpKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNvbW1hbmQgY21kYmxrICVwIGhlcmVcbiIsICpCYXNlKTsKIAkJQmFzZSA9ICYoKCpCYXNlKS0+TmV4dFApOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiTm93IHRyeSB0byBxdWV1ZSBjbWQgY21kYmxrIDB4JXggYXQgMHgleFxuIiwgKGludCkgQ21kQmxrUCwgKGludCkgQmFzZSk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJOb3cgdHJ5IHRvIHF1ZXVlIGNtZCBjbWRibGsgJXAgYXQgJXBcbiIsIENtZEJsa1AsIEJhc2UpOwogCX0KIAotCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJXaWxsIHF1ZXVlIGNtZGJsayAweCV4IGF0IDB4JXhcbiIsIChpbnQpIENtZEJsa1AsIChpbnQpIEJhc2UpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJXaWxsIHF1ZXVlIGNtZGJsayAlcCBhdCAlcFxuIiwgQ21kQmxrUCwgQmFzZSk7CiAKIAkqQmFzZSA9IENtZEJsa1A7CiAKQEAgLTY1NSw3ICs2NDQsNyBAQAogCiAJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlVuaXhSdXBQLT5SdXBMb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gUklPX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC02NjQsMTAgKzY1MywxMCBAQAogKi8KIHZvaWQgUklPUG9sbEhvc3RDb21tYW5kcyhzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBIb3N0ICpIb3N0UCkKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgQ21kQmxrICpDbWRCbGtQOwotCXJlZ2lzdGVyIHN0cnVjdCBVbml4UnVwICpVbml4UnVwUDsKKwlzdHJ1Y3QgQ21kQmxrICpDbWRCbGtQOworCXN0cnVjdCBVbml4UnVwICpVbml4UnVwUDsKIAlzdHJ1Y3QgUEtUICpQYWNrZXRQOwotCXVzaG9ydCBSdXA7CisJdW5zaWduZWQgc2hvcnQgUnVwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIApAQCAtNjg0LDE2ICs2NzMsMTQgQEAKIAkJLyoKIAkJICoqIEZpcnN0IGNoZWNrIGZvciBpbmNvbWluZyBjb21tYW5kczoKIAkJICovCi0JCWlmIChSV09SRChVbml4UnVwUC0+UnVwUC0+cnhjb250cm9sKSAhPSBSWF9SVVBfSU5BQ1RJVkUpIHsKKwkJaWYgKHJlYWR3KCZVbml4UnVwUC0+UnVwUC0+cnhjb250cm9sKSAhPSBSWF9SVVBfSU5BQ1RJVkUpIHsKIAkJCWludCBGcmVlTWU7CiAKLQkJCVBhY2tldFAgPSAoUEtUICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBSV09SRChVbml4UnVwUC0+UnVwUC0+cnhwa3QpKTsKKwkJCVBhY2tldFAgPSAoc3RydWN0IFBLVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlVuaXhSdXBQLT5SdXBQLT5yeHBrdCkpOwogCi0JCQlTaG93UGFja2V0KERCR19DTUQsIFBhY2tldFApOwotCi0JCQlzd2l0Y2ggKFJCWVRFKFBhY2tldFAtPmRlc3RfcG9ydCkpIHsKKwkJCXN3aXRjaCAocmVhZGIoJlBhY2tldFAtPmRlc3RfcG9ydCkpIHsKIAkJCWNhc2UgQk9PVF9SVVA6Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkluY29taW5nIEJvb3QgJXMgcGFja2V0ICcleCdcbiIsIFJCWVRFKFBhY2tldFAtPmxlbikgJiAweDgwID8gIkNvbW1hbmQiIDogIkRhdGEiLCBSQllURShQYWNrZXRQLT5kYXRhWzBdKSk7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkluY29taW5nIEJvb3QgJXMgcGFja2V0ICcleCdcbiIsIHJlYWRiKCZQYWNrZXRQLT5sZW4pICYgMHg4MCA/ICJDb21tYW5kIiA6ICJEYXRhIiwgcmVhZGIoJlBhY2tldFAtPmRhdGFbMF0pKTsKIAkJCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmVW5peFJ1cFAtPlJ1cExvY2ssIGZsYWdzKTsKIAkJCQlGcmVlTWUgPSBSSU9Cb290UnVwKHAsIFJ1cCwgSG9zdFAsIFBhY2tldFApOwogCQkJCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmVW5peFJ1cFAtPlJ1cExvY2ssIGZsYWdzKTsKQEAgLTcwOCw3ICs2OTUsNyBAQAogCQkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZVbml4UnVwUC0+UnVwTG9jaywgZmxhZ3MpOwogCQkJCUZyZWVNZSA9IFJJT0NvbW1hbmRSdXAocCwgUnVwLCBIb3N0UCwgUGFja2V0UCk7CiAJCQkJaWYgKFBhY2tldFAtPmRhdGFbNV0gPT0gTUVNRFVNUCkgewotCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiTWVtZHVtcCBmcm9tIDB4JXggY29tcGxldGVcbiIsICoodXNob3J0ICopICYgKFBhY2tldFAtPmRhdGFbNl0pKTsKKwkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIk1lbWR1bXAgZnJvbSAweCV4IGNvbXBsZXRlXG4iLCAqKHVuc2lnbmVkIHNob3J0ICopICYgKFBhY2tldFAtPmRhdGFbNl0pKTsKIAkJCQkJSG9zdFAtPkNvcHkoKGNhZGRyX3QpICYgKFBhY2tldFAtPmRhdGFbOF0pLCAoY2FkZHJfdCkgcC0+UklPTWVtRHVtcCwgMzIpOwogCQkJCX0KIAkJCQlyaW9fc3Bpbl9sb2NrX2lycXNhdmUoJlVuaXhSdXBQLT5SdXBMb2NrLCBmbGFncyk7CkBAIC03MjEsNyArNzA4LDcgQEAKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiVW5rbm93biBSVVAgJWRcbiIsIFJCWVRFKFBhY2tldFAtPmRlc3RfcG9ydCkpOworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJVbmtub3duIFJVUCAlZFxuIiwgcmVhZGIoJlBhY2tldFAtPmRlc3RfcG9ydCkpOwogCQkJCUZyZWVNZSA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC03MzAsMTEgKzcxNywxMSBAQAogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJGcmVlIHByb2Nlc3NlZCBpbmNvbWluZyBjb21tYW5kIHBhY2tldFxuIik7CiAJCQkJcHV0X2ZyZWVfZW5kKEhvc3RQLCBQYWNrZXRQKTsKIAotCQkJCVdXT1JEKFVuaXhSdXBQLT5SdXBQLT5yeGNvbnRyb2wsIFJYX1JVUF9JTkFDVElWRSk7CisJCQkJd3JpdGV3KFJYX1JVUF9JTkFDVElWRSwgJlVuaXhSdXBQLT5SdXBQLT5yeGNvbnRyb2wpOwogCi0JCQkJaWYgKFJXT1JEKFVuaXhSdXBQLT5SdXBQLT5oYW5kc2hha2UpID09IFBIQl9IQU5EU0hBS0VfU0VUKSB7CisJCQkJaWYgKHJlYWR3KCZVbml4UnVwUC0+UnVwUC0+aGFuZHNoYWtlKSA9PSBQSEJfSEFORFNIQUtFX1NFVCkgewogCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiSGFuZHNoYWtlIHJ1cCAlZFxuIiwgUnVwKTsKLQkJCQkJV1dPUkQoVW5peFJ1cFAtPlJ1cFAtPmhhbmRzaGFrZSwgUEhCX0hBTkRTSEFLRV9TRVQgfCBQSEJfSEFORFNIQUtFX1JFU0VUKTsKKwkJCQkJd3JpdGV3KFBIQl9IQU5EU0hBS0VfU0VUIHwgUEhCX0hBTkRTSEFLRV9SRVNFVCwgJlVuaXhSdXBQLT5SdXBQLT5oYW5kc2hha2UpOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtNzQ0LDcgKzczMSw3IEBACiAJCSAqKiBhbmQgaXQgaGFzIGNvbXBsZXRlZCwgdGhlbiB0aWR5IGl0IHVwLgogCQkgKi8KIAkJaWYgKChDbWRCbGtQID0gVW5peFJ1cFAtPkNtZFBlbmRpbmdQKSAmJgkvKiBBU1NJR04hICovCi0JCSAgICAoUldPUkQoVW5peFJ1cFAtPlJ1cFAtPnR4Y29udHJvbCkgPT0gVFhfUlVQX0lOQUNUSVZFKSkgeworCQkgICAgKHJlYWR3KCZVbml4UnVwUC0+UnVwUC0+dHhjb250cm9sKSA9PSBUWF9SVVBfSU5BQ1RJVkUpKSB7CiAJCQkvKgogCQkJICoqIHdlIGFyZSBpZGxlLgogCQkJICoqIHRoZXJlIGlzIGEgY29tbWFuZCBpbiBwZW5kaW5nLgpAQCAtNzU1LDcgKzc0Miw3IEBACiAJCQlpZiAoQ21kQmxrUC0+UGFja2V0LmRlc3RfcG9ydCA9PSBCT09UX1JVUCkKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiRnJlZSBCb290ICVzIENvbW1hbmQgQmxvY2sgJyV4J1xuIiwgQ21kQmxrUC0+UGFja2V0LmxlbiAmIDB4ODAgPyAiQ29tbWFuZCIgOiAiRGF0YSIsIENtZEJsa1AtPlBhY2tldC5kYXRhWzBdKTsKIAotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNvbW1hbmQgMHgleCBjb21wbGV0ZWRcbiIsIChpbnQpIENtZEJsa1ApOworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNvbW1hbmQgJXAgY29tcGxldGVkXG4iLCBDbWRCbGtQKTsKIAogCQkJLyoKIAkJCSAqKiBDbGVhciB0aGUgUnVwIGxvY2sgdG8gcHJldmVudCBtdXR1YWwgZXhjbHVzaW9uLgpAQCAtNzgyLDIwICs3NjksMjAgQEAKIAkJICoqIGlzIGlkbGUsIHRoZW4gcHJvY2VzcyB0aGUgY29tbWFuZAogCQkgKi8KIAkJaWYgKChDbWRCbGtQID0gVW5peFJ1cFAtPkNtZHNXYWl0aW5nUCkgJiYJLyogQVNTSUdOISAqLwotCQkgICAgKFVuaXhSdXBQLT5DbWRQZW5kaW5nUCA9PSBOVUxMKSAmJiAoUldPUkQoVW5peFJ1cFAtPlJ1cFAtPnR4Y29udHJvbCkgPT0gVFhfUlVQX0lOQUNUSVZFKSkgeworCQkgICAgKFVuaXhSdXBQLT5DbWRQZW5kaW5nUCA9PSBOVUxMKSAmJiAocmVhZHcoJlVuaXhSdXBQLT5SdXBQLT50eGNvbnRyb2wpID09IFRYX1JVUF9JTkFDVElWRSkpIHsKIAkJCS8qCiAJCQkgKiogaWYgdGhlIHByZS1mdW5jdGlvbiBpcyBub24temVybywgY2FsbCBpdC4KIAkJCSAqKiBJZiBpdCByZXR1cm5zIFJJT19GQUlMIHRoZW4gZG9uJ3QKIAkJCSAqKiBzZW5kIHRoaXMgY29tbWFuZCB5ZXQhCiAJCQkgKi8KLQkJCWlmICghKENtZEJsa1AtPlByZUZ1bmNQID8gKCpDbWRCbGtQLT5QcmVGdW5jUCkgKENtZEJsa1AtPlByZUFyZywgQ21kQmxrUCkgOiBUUlVFKSkgewotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJOb3QgcmVhZHkgdG8gc3RhcnQgY29tbWFuZCAweCV4XG4iLCAoaW50KSBDbWRCbGtQKTsKKwkJCWlmICghKENtZEJsa1AtPlByZUZ1bmNQID8gKCpDbWRCbGtQLT5QcmVGdW5jUCkgKENtZEJsa1AtPlByZUFyZywgQ21kQmxrUCkgOiAxKSkgeworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJOb3QgcmVhZHkgdG8gc3RhcnQgY29tbWFuZCAlcFxuIiwgQ21kQmxrUCk7CiAJCQl9IGVsc2UgewotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJTdGFydCBuZXcgY29tbWFuZCAweCV4IENtZCBieXRlIGlzIDB4JXhcbiIsIChpbnQpIENtZEJsa1AsIENtZEJsa1AtPlBhY2tldC5kYXRhWzBdKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiU3RhcnQgbmV3IGNvbW1hbmQgJXAgQ21kIGJ5dGUgaXMgMHgleFxuIiwgQ21kQmxrUCwgQ21kQmxrUC0+UGFja2V0LmRhdGFbMF0pOwogCQkJCS8qCiAJCQkJICoqIFdoYW1teSEgYmxhdCB0aGF0IHBhY2shCiAJCQkJICovCi0JCQkJSG9zdFAtPkNvcHkoKGNhZGRyX3QpICYgQ21kQmxrUC0+UGFja2V0LCBSSU9fUFRSKEhvc3RQLT5DYWRkciwgVW5peFJ1cFAtPlJ1cFAtPnR4cGt0KSwgc2l6ZW9mKFBLVCkpOworCQkJCUhvc3RQLT5Db3B5KChjYWRkcl90KSAmIENtZEJsa1AtPlBhY2tldCwgUklPX1BUUihIb3N0UC0+Q2FkZHIsIFVuaXhSdXBQLT5SdXBQLT50eHBrdCksIHNpemVvZihzdHJ1Y3QgUEtUKSk7CiAKIAkJCQkvKgogCQkJCSAqKiByZW1vdmUgdGhlIGNvbW1hbmQgZnJvbSB0aGUgcnVwIGNvbW1hbmQgcXVldWUuLi4KQEAgLTgxMCw3ICs3OTcsNyBAQAogCQkJCS8qCiAJCQkJICoqIHNldCB0aGUgY29tbWFuZCByZWdpc3RlcgogCQkJCSAqLwotCQkJCVdXT1JEKFVuaXhSdXBQLT5SdXBQLT50eGNvbnRyb2wsIFRYX1BBQ0tFVF9SRUFEWSk7CisJCQkJd3JpdGV3KFRYX1BBQ0tFVF9SRUFEWSwgJlVuaXhSdXBQLT5SdXBQLT50eGNvbnRyb2wpOwogCiAJCQkJLyoKIAkJCQkgKiogdGhlIGNvbW1hbmQgYmxvY2sgd2lsbCBiZSBmcmVlZApAQCAtODIyLDcgKzgwOSw3IEBACiAJfSB3aGlsZSAoUnVwKTsKIH0KIAotaW50IFJJT1dGbHVzaE1hcmsoaW50IGlQb3J0UCwgc3RydWN0IENtZEJsayAqQ21kQmxrUCkKK2ludCBSSU9XRmx1c2hNYXJrKHVuc2lnbmVkIGxvbmcgaVBvcnRQLCBzdHJ1Y3QgQ21kQmxrICpDbWRCbGtQKQogewogCXN0cnVjdCBQb3J0ICpQb3J0UCA9IChzdHJ1Y3QgUG9ydCAqKSBpUG9ydFA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTgzNCwzMyArODIxLDMyIEBACiAJcmV0dXJuIFJJT1VuVXNlKGlQb3J0UCwgQ21kQmxrUCk7CiB9CiAKLWludCBSSU9SRmx1c2hFbmFibGUoaW50IGlQb3J0UCwgc3RydWN0IENtZEJsayAqQ21kQmxrUCkKK2ludCBSSU9SRmx1c2hFbmFibGUodW5zaWduZWQgbG9uZyBpUG9ydFAsIHN0cnVjdCBDbWRCbGsgKkNtZEJsa1ApCiB7CiAJc3RydWN0IFBvcnQgKlBvcnRQID0gKHN0cnVjdCBQb3J0ICopIGlQb3J0UDsKLQlQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCAqUGFja2V0UDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCiAJd2hpbGUgKGNhbl9yZW1vdmVfcmVjZWl2ZSgmUGFja2V0UCwgUG9ydFApKSB7CiAJCXJlbW92ZV9yZWNlaXZlKFBvcnRQKTsKLQkJU2hvd1BhY2tldChEQkdfUFJPQywgUGFja2V0UCk7CiAJCXB1dF9mcmVlX2VuZChQb3J0UC0+SG9zdFAsIFBhY2tldFApOwogCX0KIAotCWlmIChSV09SRChQb3J0UC0+UGhiUC0+aGFuZHNoYWtlKSA9PSBQSEJfSEFORFNIQUtFX1NFVCkgeworCWlmIChyZWFkdygmUG9ydFAtPlBoYlAtPmhhbmRzaGFrZSkgPT0gUEhCX0hBTkRTSEFLRV9TRVQpIHsKIAkJLyoKIAkJICoqIE1BR0lDISAoQmFzaWNhbGx5LCBoYW5kc2hha2UgdGhlIFJYIGJ1ZmZlciwgc28gdGhhdAogCQkgKiogdGhlIFJUQXMgdXBzdHJlYW0gY2FuIGJlIHJlLWVuYWJsZWQuKQogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlV0aWw6IFNldCBSWCBoYW5kc2hha2UgYml0XG4iKTsKLQkJV1dPUkQoUG9ydFAtPlBoYlAtPmhhbmRzaGFrZSwgUEhCX0hBTkRTSEFLRV9TRVQgfCBQSEJfSEFORFNIQUtFX1JFU0VUKTsKKwkJd3JpdGV3KFBIQl9IQU5EU0hBS0VfU0VUIHwgUEhCX0hBTkRTSEFLRV9SRVNFVCwgJlBvcnRQLT5QaGJQLT5oYW5kc2hha2UpOwogCX0KIAlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAlyZXR1cm4gUklPVW5Vc2UoaVBvcnRQLCBDbWRCbGtQKTsKIH0KIAotaW50IFJJT1VuVXNlKGludCBpUG9ydFAsIHN0cnVjdCBDbWRCbGsgKkNtZEJsa1ApCitpbnQgUklPVW5Vc2UodW5zaWduZWQgbG9uZyBpUG9ydFAsIHN0cnVjdCBDbWRCbGsgKkNtZEJsa1ApCiB7CiAJc3RydWN0IFBvcnQgKlBvcnRQID0gKHN0cnVjdCBQb3J0ICopIGlQb3J0UDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODkwLDcgKzg3Niw3IEBACiAJICoqIFdoZW4gUG9ydFAtPkluVXNlIGJlY29tZXMgTk9UX0lOVVNFLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IGFueSBkYXRhCiAJICoqIGhhbmdpbmcgYXJvdW5kIGluIHRoZSB0cmFuc21pdCBidWZmZXIgaXMgc2VudCBpbW1lZGlhdGVseS4KIAkgKi8KLQlXV09SRChQb3J0UC0+SG9zdFAtPlBhcm1NYXBQLT50eF9pbnRyLCAxKTsKKwl3cml0ZXcoMSwgJlBvcnRQLT5Ib3N0UC0+UGFybU1hcFAtPnR4X2ludHIpOwogCS8qIFdoYXQgdG8gZG8gaGVyZSAuLgogCSAgIHdha2V1cCggKGNhZGRyX3QpJihQb3J0UC0+SW5Vc2UpICk7CiAJICovCkBAIC04OTgsMTAgKzg4NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgU2hvd1BhY2tldCh1aW50IEZsYWdzLCBzdHJ1Y3QgUEtUICpQYWNrZXRQKQotewotfQotCiAvKgogKiogCiAqKiBIb3cgdG8gdXNlIHRoaXMgZmlsZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvY3RybC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKaW5kZXggZmNmMThhMC4uZDMxYWJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMKQEAgLTUxLDE1ICs1MSwxMiBAQAogCiAjaW5jbHVkZSAibGludXhfY29tcGF0LmgiCiAjaW5jbHVkZSAicmlvX2xpbnV4LmgiCi0jaW5jbHVkZSAidHlwZGVmLmgiCiAjaW5jbHVkZSAicGt0LmgiCiAjaW5jbHVkZSAiZGFlbW9uLmgiCiAjaW5jbHVkZSAicmlvLmgiCiAjaW5jbHVkZSAicmlvc3BhY2UuaCIKLSNpbmNsdWRlICJ0b3AuaCIKICNpbmNsdWRlICJjbWRwa3QuaCIKICNpbmNsdWRlICJtYXAuaCIKLSNpbmNsdWRlICJyaW90eXBlcy5oIgogI2luY2x1ZGUgInJ1cC5oIgogI2luY2x1ZGUgInBvcnQuaCIKICNpbmNsdWRlICJyaW9kcnZyLmgiCkBAIC03MiwxMiArNjksMTAgQEAKICNpbmNsdWRlICJ1bml4cnVwLmgiCiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJob3N0LmgiCi0jaW5jbHVkZSAiZXJyb3IuaCIKICNpbmNsdWRlICJwaGIuaCIKICNpbmNsdWRlICJsaW5rLmgiCiAjaW5jbHVkZSAiY21kYmxrLmgiCiAjaW5jbHVkZSAicm91dGUuaCIKLSNpbmNsdWRlICJjb250cm9sLmgiCiAjaW5jbHVkZSAiY2lycnVzLmgiCiAjaW5jbHVkZSAicmlvaW9jdGwuaCIKIApAQCAtMTMxLDMwICsxMjYsNiBAQAogCiAjZGVmaW5lIGRydl9tYWtlZGV2KG1haiwgbWluKSAoKCgodWludCkgbWFqICYgMHhmZikgPDwgOCkgfCAoKHVpbnQpIG1pbiAmIDB4ZmYpKQogCi1pbnQgY29weWluKGludCBhcmcsIGNhZGRyX3QgZHAsIGludCBzaXopCi17Ci0JaW50IHJ2OwotCi0JcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDb3B5aW5nICVkIGJ5dGVzIGZyb20gdXNlciAlcCB0byAlcC5cbiIsIHNpeiwgKHZvaWQgKikgYXJnLCBkcCk7Ci0JcnYgPSBjb3B5X2Zyb21fdXNlcihkcCwgKHZvaWQgKikgYXJnLCBzaXopOwotCWlmIChydikKLQkJcmV0dXJuIENPUFlGQUlMOwotCWVsc2UKLQkJcmV0dXJuIHJ2OwotfQotCi1zdGF0aWMgaW50IGNvcHlvdXQoY2FkZHJfdCBkcCwgaW50IGFyZywgaW50IHNpeikKLXsKLQlpbnQgcnY7Ci0KLQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNvcHlpbmcgJWQgYnl0ZXMgdG8gdXNlciAlcCBmcm9tICVwLlxuIiwgc2l6LCAodm9pZCAqKSBhcmcsIGRwKTsKLQlydiA9IGNvcHlfdG9fdXNlcigodm9pZCAqKSBhcmcsIGRwLCBzaXopOwotCWlmIChydikKLQkJcmV0dXJuIENPUFlGQUlMOwotCWVsc2UKLQkJcmV0dXJuIHJ2OwotfQotCiBpbnQgcmlvY29udHJvbChwLCBkZXYsIGNtZCwgYXJnLCBzdSkKIHN0cnVjdCByaW9faW5mbyAqcDsKIGRldl90IGRldjsKQEAgLTE2OCw3ICsxMzksNyBAQAogCXVzaG9ydCBsb29wOwogCWludCBFbnRyeTsKIAlzdHJ1Y3QgUG9ydCAqUG9ydFA7Ci0JUEtUICpQYWNrZXRQOworCXN0cnVjdCBQS1QgKlBhY2tldFA7CiAJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTc4LDcgKzE0OSw3IEBACiAJSG9zdCA9IDA7CiAJUG9ydFAgPSBOVUxMOwogCi0JcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJjb250cm9sIGlvY3RsIGNtZDogMHgleCBhcmc6IDB4JXhcbiIsIGNtZCwgKGludCkgYXJnKTsKKwlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgImNvbnRyb2wgaW9jdGwgY21kOiAweCV4IGFyZzogJXBcbiIsIGNtZCwgYXJnKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJCS8qCkBAIC0xODksOTAgKzE2MCwzNCBAQAogCQkgKiogb3RoZXJ3aXNlIGp1c3QgdGhlIHNwZWNpZmllZCBob3N0IGNhcmQgd2lsbCBiZSBjaGFuZ2VkLgogCQkgKi8KIAljYXNlIFJJT19TRVRfVElNRVI6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVF9USU1FUiB0byAlZG1zXG4iLCAodWludCkgYXJnKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fU0VUX1RJTUVSIHRvICVsZG1zXG4iLCAodW5zaWduZWQgbG9uZylhcmcpOwogCQl7CiAJCQlpbnQgaG9zdCwgdmFsdWU7Ci0JCQlob3N0ID0gKHVpbnQpIGFyZyA+PiAxNjsKLQkJCXZhbHVlID0gKHVpbnQpIGFyZyAmIDB4MDAwMGZmZmY7CisJCQlob3N0ID0gKCh1bnNpZ25lZCBsb25nKSBhcmcgPj4gMTYpICYgMHgwMDAwRkZGRjsKKwkJCXZhbHVlID0gKHVuc2lnbmVkIGxvbmcpIGFyZyAmIDB4MDAwMGZmZmY7CiAJCQlpZiAoaG9zdCA9PSAtMSkgewogCQkJCWZvciAoaG9zdCA9IDA7IGhvc3QgPCBwLT5SSU9OdW1Ib3N0czsgaG9zdCsrKSB7CiAJCQkJCWlmIChwLT5SSU9Ib3N0c1tob3N0XS5GbGFncyA9PSBSQ19SVU5OSU5HKSB7Ci0JCQkJCQlXV09SRChwLT5SSU9Ib3N0c1tob3N0XS5QYXJtTWFwUC0+dGltZXIsIHZhbHVlKTsKKwkJCQkJCXdyaXRldyh2YWx1ZSwgJnAtPlJJT0hvc3RzW2hvc3RdLlBhcm1NYXBQLT50aW1lcik7CiAJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgaWYgKGhvc3QgPj0gcC0+UklPTnVtSG9zdHMpIHsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHAtPlJJT0hvc3RzW2hvc3RdLkZsYWdzID09IFJDX1JVTk5JTkcpIHsKLQkJCQkJV1dPUkQocC0+UklPSG9zdHNbaG9zdF0uUGFybU1hcFAtPnRpbWVyLCB2YWx1ZSk7CisJCQkJCXdyaXRldyh2YWx1ZSwgJnAtPlJJT0hvc3RzW2hvc3RdLlBhcm1NYXBQLT50aW1lcik7CiAJCQkJfQogCQkJfQogCQl9CiAJCXJldHVybiAwOwogCi0JY2FzZSBSSU9fSURFTlRJRllfRFJJVkVSOgotCQkvKgotCQkgKiogMTUuMTAuMTk5OCBBUkcgLSBFU0lMIDA3NjAgcGFydCBmaXgKLQkJICoqIEFkZGVkIGRyaXZlciBpZGVudCBzdHJpbmcgb3V0cHV0LgotCQkgKioKLQkJICNpZm5kZWYgX19USElTX1JFTEVBU0VfXwotCQkgI3dhcm5pbmcgRHJpdmVyIFZlcnNpb24gc3RyaW5nIG5vdCBkZWZpbmVkICEKLQkJICNlbmRpZgotCQkgY3ByaW50ZigiJXMgJXMgJXMgJXNcbiIsCi0JCSBSSU9fRFJWX1NUUiwKLQkJIF9fVEhJU19SRUxFQVNFX18sCi0JCSBfX0RBVEVfXywgX19USU1FX18gKTsKLQotCQkgcmV0dXJuIDA7Ci0KLQkJIGNhc2UgUklPX0RJU1BMQVlfSE9TVF9DRkc6Ci0JCSAqKgotCQkgKiogMTUuMTAuMTk5OCBBUkcgLSBFU0lMIDA3NjAgcGFydCBmaXgKLQkJICoqIEFkZGVkIGRyaXZlciBob3N0IGNhcmQgaWRlbnQgc3RyaW5nIG91dHB1dC4KLQkJICoqCi0JCSAqKiBOb3RlIHRoYXQgdGhlIG9ubHkgdHlwZXMgY3VycmVudGx5IHN1cHBvcnRlZAotCQkgKiogYXJlIElTQSBhbmQgUENJLiBBbHNvIHRoaXMgZHJpdmVyIGRvZXMgbm90Ci0JCSAqKiAoeWV0KSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBPbGQgUENJIGNhcmQKLQkJICoqIGFuZCB0aGUgSmV0IFBDSSBjYXJkLiBJbiBmYWN0IEkgdGhpbmsgdGhpcwotCQkgKiogZHJpdmVyIG9ubHkgc3VwcG9ydHMgSkVUIFBDSSAhCi0JCSAqKgotCi0JCSBmb3IgKEhvc3QgPSAwOyBIb3N0IDwgcC0+UklPTnVtSG9zdHM7IEhvc3QrKykKLQkJIHsKLQkJIEhvc3RQID0gJihwLT5SSU9Ib3N0c1tIb3N0XSk7Ci0KLQkJIHN3aXRjaCAoIEhvc3RQLT5UeXBlICkKLQkJIHsKLQkJIGNhc2UgUklPX0FUIDoKLQkJIHN0cmNweSggaG9zdF90eXBlLCBSSU9fQVRfSE9TVF9TVFIgKTsKLQkJIGJyZWFrOwotCi0JCSBjYXNlIFJJT19QQ0kgOgotCQkgc3RyY3B5KCBob3N0X3R5cGUsIFJJT19QQ0lfSE9TVF9TVFIgKTsKLQkJIGJyZWFrOwotCi0JCSBkZWZhdWx0IDoKLQkJIHN0cmNweSggaG9zdF90eXBlLCAiVW5rbm93biIgKTsKLQkJIGJyZWFrOwotCQkgfQotCi0JCSBjcHJpbnRmKAotCQkgIlJJTyBIb3N0ICVkIC0gVHlwZTolcyBBZGRyOiVYIElSUTolZFxuIiwKLQkJIEhvc3QsIGhvc3RfdHlwZSwKLQkJICh1aW50KUhvc3RQLT5QYWRkclAsCi0JCSAoaW50KUhvc3RQLT5JdmVjIC0gMzIgICk7Ci0JCSB9Ci0JCSByZXR1cm4gMDsKLQkJICoqCi0JCSAqLwotCiAJY2FzZSBSSU9fRk9BRF9SVEE6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0ZPQURfUlRBXG4iKTsKLQkJcmV0dXJuIFJJT0NvbW1hbmRSdGEocCwgKHVpbnQpIGFyZywgUklPRm9hZFJ0YSk7CisJCXJldHVybiBSSU9Db21tYW5kUnRhKHAsICh1bnNpZ25lZCBsb25nKWFyZywgUklPRm9hZFJ0YSk7CiAKIAljYXNlIFJJT19aT01CSUVfUlRBOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19aT01CSUVfUlRBXG4iKTsKLQkJcmV0dXJuIFJJT0NvbW1hbmRSdGEocCwgKHVpbnQpIGFyZywgUklPWm9tYmllUnRhKTsKKwkJcmV0dXJuIFJJT0NvbW1hbmRSdGEocCwgKHVuc2lnbmVkIGxvbmcpYXJnLCBSSU9ab21iaWVSdGEpOwogCiAJY2FzZSBSSU9fSURFTlRJRllfUlRBOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19JREVOVElGWV9SVEFcbiIpOwpAQCAtMjg3LDcgKzIwMiw3IEBACiAJCQlzdHJ1Y3QgQ21kQmxrICpDbWRCbGtQOwogCiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlNQRUNJQUxfUlVQX0NNRFxuIik7Ci0JCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgU3BlY2lhbFJ1cENtZCwgc2l6ZW9mKFNwZWNpYWxSdXBDbWQpKSA9PSBDT1BZRkFJTCkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZTcGVjaWFsUnVwQ21kLCBhcmcsIHNpemVvZihTcGVjaWFsUnVwQ21kKSkpIHsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlNQRUNJQUxfUlVQX0NNRCBjb3B5IGZhaWxlZFxuIik7CiAJCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtMzAyLDcgKzIxNyw3IEBACiAJCQkJU3BlY2lhbFJ1cENtZC5Ib3N0ID0gMDsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgc3BlY2lhbCBydXAgY29tbWFuZCBmb3IgaG9zdCAlZCBydXAgJWRcbiIsIFNwZWNpYWxSdXBDbWQuSG9zdCwgU3BlY2lhbFJ1cENtZC5SdXBOdW0pOwogCQkJaWYgKFJJT1F1ZXVlQ21kQmxrKCZwLT5SSU9Ib3N0c1tTcGVjaWFsUnVwQ21kLkhvc3RdLCBTcGVjaWFsUnVwQ21kLlJ1cE51bSwgQ21kQmxrUCkgPT0gUklPX0ZBSUwpIHsKLQkJCQljcHJpbnRmKCJGQUlMRUQgVE8gUVVFVUUgU1BFQ0lBTCBSVVAgQ09NTUFORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicmlvOiBGQUlMRUQgVE8gUVVFVUUgU1BFQ0lBTCBSVVAgQ09NTUFORFxuIik7CiAJCQl9CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMzI0LDcgKzIzOSw3IEBACiAJCWlmICgocmV0dmFsID0gUklPQXBlbChwKSkgIT0gMCkKIAkJCXJldHVybiByZXR2YWw7CiAKLQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpIHAtPlJJT0Nvbm5lY3RUYWJsZSwgKGludCkgYXJnLCBUT1RBTF9NQVBfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgTWFwKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsIHAtPlJJT0Nvbm5lY3RUYWJsZSwgVE9UQUxfTUFQX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IE1hcCkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19HRVRfVEFCTEUgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMzY5LDcgKzI4NCw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgcC0+UklPQ29ubmVjdFRhYmxlWzBdLCBUT1RBTF9NQVBfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgTWFwKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLT5SSU9Db25uZWN0VGFibGVbMF0sIGFyZywgVE9UQUxfTUFQX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IE1hcCkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19QVVRfVEFCTEUgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00MTUsNyArMzMwLDcgQEAKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCWlmIChjb3B5b3V0KChjYWRkcl90KSBwLT5SSU9CaW5kVGFiLCAoaW50KSBhcmcsIChzaXplb2YodWxvbmcpICogTUFYX1JUQV9CSU5ESU5HUykpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBwLT5SSU9CaW5kVGFiLCAoc2l6ZW9mKHVsb25nKSAqIE1BWF9SVEFfQklORElOR1MpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0VUX0JJTkRJTkdTIGNvcHkgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQzNCw3ICszNDksNyBAQAogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfU1VQRVJfVVNFUjsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSAmIHAtPlJJT0JpbmRUYWJbMF0sIChzaXplb2YodWxvbmcpICogTUFYX1JUQV9CSU5ESU5HUykpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcC0+UklPQmluZFRhYlswXSwgYXJnLCAoc2l6ZW9mKHVsb25nKSAqIE1BWF9SVEFfQklORElOR1MpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUFVUX0JJTkRJTkdTIGNvcHkgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNDU4LDEyICszNzMsMTIgQEAKIAkJCWZvciAoRW50cnkgPSAwOyBFbnRyeSA8IE1BWF9SVEFfQklORElOR1M7IEVudHJ5KyspIHsKIAkJCQlpZiAoKEVtcHR5U2xvdCA9PSAtMSkgJiYgKHAtPlJJT0JpbmRUYWJbRW50cnldID09IDBMKSkKIAkJCQkJRW1wdHlTbG90ID0gRW50cnk7Ci0JCQkJZWxzZSBpZiAocC0+UklPQmluZFRhYltFbnRyeV0gPT0gKGludCkgYXJnKSB7CisJCQkJZWxzZSBpZiAocC0+UklPQmluZFRhYltFbnRyeV0gPT0gKGxvbmcpYXJnKSB7CiAJCQkJCS8qCiAJCQkJCSAqKiBBbHJlYWR5IGV4aXN0cyAtIGRlbGV0ZQogCQkJCQkgKi8KIAkJCQkJcC0+UklPQmluZFRhYltFbnRyeV0gPSAwTDsKLQkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSZW1vdmluZyBSdGEgJXggZnJvbSBwLT5SSU9CaW5kVGFiXG4iLCAoaW50KSBhcmcpOworCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJlbW92aW5nIFJ0YSAlbGQgZnJvbSBwLT5SSU9CaW5kVGFiXG4iLCAodW5zaWduZWQgbG9uZylhcmcpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CkBAIC00NzEsMTAgKzM4NiwxMCBAQAogCQkJICoqIERvc2VuJ3QgZXhpc3QgLSBhZGQKIAkJCSAqLwogCQkJaWYgKEVtcHR5U2xvdCAhPSAtMSkgewotCQkJCXAtPlJJT0JpbmRUYWJbRW1wdHlTbG90XSA9IChpbnQpIGFyZzsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkFkZGluZyBSdGEgJXggdG8gcC0+UklPQmluZFRhYlxuIiwgKGludCkgYXJnKTsKKwkJCQlwLT5SSU9CaW5kVGFiW0VtcHR5U2xvdF0gPSAodW5zaWduZWQgbG9uZylhcmc7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJBZGRpbmcgUnRhICVseCB0byBwLT5SSU9CaW5kVGFiXG4iLCAodW5zaWduZWQgbG9uZykgYXJnKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJwLT5SSU9CaW5kVGFiIGZ1bGwhIC0gUnRhICV4IG5vdCBhZGRlZFxuIiwgKGludCkgYXJnKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgInAtPlJJT0JpbmRUYWIgZnVsbCEgLSBSdGEgJWx4IG5vdCBhZGRlZFxuIiwgKHVuc2lnbmVkIGxvbmcpIGFyZyk7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CiAJCQlyZXR1cm4gMDsKQEAgLTQ4Miw3ICszOTcsNyBAQAogCiAJY2FzZSBSSU9fUkVTVU1FOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19SRVNVTUVcbiIpOwotCQlwb3J0ID0gKHVpbnQpIGFyZzsKKwkJcG9ydCA9ICh1bnNpZ25lZCBsb25nKSBhcmc7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gNTExKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUkVTVU1FOiBCYWQgcG9ydCBudW1iZXIgJWRcbiIsIHBvcnQpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBQT1JUX05VTUJFUl9PVVRfT0ZfUkFOR0U7CkBAIC01MTgsOCArNDMzLDcgQEAKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBNYXBFbnQsIHNpemVvZihNYXBFbnQpKQotCQkgICAgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZNYXBFbnQsIGFyZywgc2l6ZW9mKE1hcEVudCkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNvcHkgZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTUzMyw4ICs0NDcsNyBAQAogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfU1VQRVJfVVNFUjsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSAmIE1hcEVudCwgc2l6ZW9mKE1hcEVudCkpCi0JCSAgICA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJk1hcEVudCwgYXJnLCBzaXplb2YoTWFwRW50KSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ29weSBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNTQ4LDggKzQ2MSw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgTWFwRW50LCBzaXplb2YoTWFwRW50KSkKLQkJICAgID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmTWFwRW50LCBhcmcsIHNpemVvZihNYXBFbnQpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDb3B5IGZyb20gZGF0YSBzcGFjZSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC01NTcsMzAgKzQ2OSwxNCBAQAogCQlyZXR1cm4gUklPRGVsZXRlUnRhKHAsICZNYXBFbnQpOwogCiAJY2FzZSBSSU9fUVVJQ0tfQ0hFQ0s6Ci0JCS8qCi0JCSAqKiAwOS4xMi4xOTk4IEFSRyAtIEVTSUwgMDc3NiBwYXJ0IGZpeAotCQkgKiogQSBjdXN0b21lciB3YXMgdXNpbmcgdGhpcyB0byBnZXQgdGhlIFJUQXMKLQkJICoqIGNvbm5lY3QvZGlzY29ubmVjdCBzdGF0dXMuCi0JCSAqKiBSSU9Db25Db24oKSBoYWQgYmVlbiBib3RjaGVkIHVzZSBSSU9IYWx0ZWQKLQkJICoqIHRvIGtlZXAgdHJhY2sgb2YgUlRBIGNvbm5lY3Rpb25zIGFuZAotCQkgKiogZGlzY29ubmVjdGlvbnMuIFRoYXQgaGFzIGJlZW4gY2hhbmdlZCBhbmQKLQkJICoqIFJJT1J0YURpc0NvbnMgaW4gdGhlIHJpb19pbmZvIHN0cnVjdCBub3cKLQkJICoqIGRvZXMgdGhlIGpvYi4gU28gd2UgbmVlZCB0byByZXR1cm4gdGhlIHZhbHVlCi0JCSAqKiBvZiBSSU9SdGFDb25zIGluc3RlYWQgb2YgUklPSGFsdGVkLgotCQkgKioKLQkJIGlmIChjb3B5b3V0KChjYWRkcl90KSZwLT5SSU9IYWx0ZWQsKGludClhcmcsCi0JCSBzaXplb2YodWludCkpPT1DT1BZRkFJTCkgewotCQkgKioKLQkJICovCi0KLQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpICYgcC0+UklPUnRhRGlzQ29ucywgKGludCkgYXJnLCBzaXplb2YodWludCkpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPUnRhRGlzQ29ucywgc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJcmV0dXJuIDA7CiAKIAljYXNlIFJJT19MQVNUX0VSUk9SOgotCQlpZiAoY29weW91dCgoY2FkZHJfdCkgJiBwLT5SSU9FcnJvciwgKGludCkgYXJnLCBzaXplb2Yoc3RydWN0IEVycm9yKSkgPT0gQ09QWUZBSUwpCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPRXJyb3IsIHNpemVvZihzdHJ1Y3QgRXJyb3IpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKIApAQCAtNTg5LDcgKzQ4NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2FzZSBSSU9fR0VUX01PRFRZUEU6Ci0JCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBwb3J0LCBzaXplb2YodWludCkpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcG9ydCwgYXJnLCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC02MDksMzYgKzUwNSwxMSBAQAogCQkgKiogUmV0dXJuIG1vZHVsZSB0eXBlIG9mIHBvcnQKIAkJICovCiAJCXBvcnQgPSBQb3J0UC0+SG9zdFAtPlVuaXhSdXBzW1BvcnRQLT5SdXBOdW1dLk1vZFR5cGVzOwotCQlpZiAoY29weW91dCgoY2FkZHJfdCkgJiBwb3J0LCAoaW50KSBhcmcsIHNpemVvZih1aW50KSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwb3J0LCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gKDApOwotCQkvKgotCQkgKiogMDIuMDMuMTk5OSBBUkcgLSBFU0lMIDA4MjAgZml4Ci0JCSAqKiBXZSBhcmUgbm8gbG9uZ2VyIHVzaW5nICJCb290IE1vZGUiLCBzbyB0aGVzZSBpb2N0bHMKLQkJICoqIGFyZSBub3QgcmVxdWlyZWQgOgotCQkgKioKLQkJIGNhc2UgUklPX0dFVF9CT09UX01PREUgOgotCQkgcmlvX2RwcmludChSSU9fREVCVUdfQ1RSTCwgKCJHZXQgYm9vdCBtb2RlIC0gJXhcbiIsIHAtPlJJT0Jvb3RNb2RlKSk7Ci0JCSAqKgotCQkgKiogUmV0dXJuIGJvb3Qgc3RhdGUgb2Ygc3lzdGVtIC0gQk9PVF9BTEwsIEJPT1RfT1dOIG9yIEJPT1RfTk9ORQotCQkgKioKLQkJIGlmIChjb3B5b3V0KChjYWRkcl90KSZwLT5SSU9Cb290TW9kZSwgKGludClhcmcsCi0JCSBzaXplb2YocC0+UklPQm9vdE1vZGUpKSA9PSBDT1BZRkFJTCkgewotCQkgcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKLQkJIHJldHVybiAtRUZBVUxUOwotCQkgfQotCQkgcmV0dXJuKDApOwotCi0JCSBjYXNlIFJJT19TRVRfQk9PVF9NT0RFIDoKLQkJIHAtPlJJT0Jvb3RNb2RlID0gKHVpbnQpIGFyZzsKLQkJIHJpb19kcHJpbnQoUklPX0RFQlVHX0NUUkwsICgiU2V0IGJvb3QgbW9kZSB0byAweCV4XG4iLCBwLT5SSU9Cb290TW9kZSkpOwotCQkgcmV0dXJuKDApOwotCQkgKioKLQkJICoqIEVuZCBFU0lMIDA4MjAgZml4Ci0JCSAqLwotCiAJY2FzZSBSSU9fQkxPQ0tfT1BFTlM6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiT3BlbnMgYmxvY2sgdW50aWwgYm9vdGVkXG4iKTsKIAkJZm9yIChFbnRyeSA9IDA7IEVudHJ5IDwgUklPX1BPUlRTOyBFbnRyeSsrKSB7CkBAIC02NTAsOCArNTIxLDcgQEAKIAogCWNhc2UgUklPX1NFVFVQX1BPUlRTOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlNldHVwIHBvcnRzXG4iKTsKLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSAmIFBvcnRTZXR1cCwgc2l6ZW9mKFBvcnRTZXR1cCkpCi0JCSAgICA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJlBvcnRTZXR1cCwgYXJnLCBzaXplb2YoUG9ydFNldHVwKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiRUZBVUxUIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTY2Nyw3ICs1MzcsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKCFwLT5SSU9Qb3J0cCkgewotCQkJY3ByaW50ZigiTm8gcC0+UklPUG9ydHAgYXJyYXkhXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAicmlvOiBObyBwLT5SSU9Qb3J0cCBhcnJheSFcbiIpOwogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJObyBwLT5SSU9Qb3J0cCBhcnJheSFcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KQEAgLTY4MSw4ICs1NTEsNyBAQAogCiAJY2FzZSBSSU9fR0VUX1BPUlRfU0VUVVA6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiR2V0IHBvcnQgc2V0dXBcbiIpOwotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgUG9ydFNldHVwLCBzaXplb2YoUG9ydFNldHVwKSkKLQkJICAgID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFNldHVwLCBhcmcsIHNpemVvZihQb3J0U2V0dXApKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTY5OCwxMyArNTY3LDEyIEBACiAJCVBvcnRTZXR1cC5TdG9yZSA9IHAtPlJJT1BvcnRwW3BvcnRdLT5TdG9yZTsKIAkJUG9ydFNldHVwLkxvY2sgPSBwLT5SSU9Qb3J0cFtwb3J0XS0+TG9jazsKIAkJUG9ydFNldHVwLlhwQ3BzID0gcC0+UklPUG9ydHBbcG9ydF0tPlhwcmludC5YcENwczsKLQkJYmNvcHkocC0+UklPUG9ydHBbcG9ydF0tPlhwcmludC5YcE9uLCBQb3J0U2V0dXAuWHBPbiwgTUFYX1hQX0NUUkxfTEVOKTsKLQkJYmNvcHkocC0+UklPUG9ydHBbcG9ydF0tPlhwcmludC5YcE9mZiwgUG9ydFNldHVwLlhwT2ZmLCBNQVhfWFBfQ1RSTF9MRU4pOworCQltZW1jcHkoUG9ydFNldHVwLlhwT24sIHAtPlJJT1BvcnRwW3BvcnRdLT5YcHJpbnQuWHBPbiwgTUFYX1hQX0NUUkxfTEVOKTsKKwkJbWVtY3B5KFBvcnRTZXR1cC5YcE9mZiwgcC0+UklPUG9ydHBbcG9ydF0tPlhwcmludC5YcE9mZiwgTUFYX1hQX0NUUkxfTEVOKTsKIAkJUG9ydFNldHVwLlhwT25bTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwogCQlQb3J0U2V0dXAuWHBPZmZbTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwogCi0JCWlmIChjb3B5b3V0KChjYWRkcl90KSAmIFBvcnRTZXR1cCwgKGludCkgYXJnLCBzaXplb2YoUG9ydFNldHVwKSkKLQkJICAgID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmUG9ydFNldHVwLCBzaXplb2YoUG9ydFNldHVwKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNzEyLDcgKzU4MCw3IEBACiAKIAljYXNlIFJJT19HRVRfUE9SVF9QQVJBTVM6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiR2V0IHBvcnQgcGFyYW1zXG4iKTsKLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSAmIFBvcnRQYXJhbXMsIHNpemVvZihzdHJ1Y3QgUG9ydFBhcmFtcykpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFBhcmFtcywgYXJnLCBzaXplb2Yoc3RydWN0IFBvcnRQYXJhbXMpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTcyNSw3ICs1OTMsNyBAQAogCQlQb3J0UGFyYW1zLlN0YXRlID0gUG9ydFAtPlN0YXRlOwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlBvcnQgJWRcbiIsIFBvcnRQYXJhbXMuUG9ydCk7CiAKLQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpICYgUG9ydFBhcmFtcywgKGludCkgYXJnLCBzaXplb2Yoc3RydWN0IFBvcnRQYXJhbXMpKSA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV90b191c2VyKGFyZywgJlBvcnRQYXJhbXMsIHNpemVvZihzdHJ1Y3QgUG9ydFBhcmFtcykpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTczMyw4ICs2MDEsNyBAQAogCiAJY2FzZSBSSU9fR0VUX1BPUlRfVFRZOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkdldCBwb3J0IHR0eVxuIik7Ci0JCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBQb3J0VHR5LCBzaXplb2Yoc3RydWN0IFBvcnRUdHkpKQotCQkgICAgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0VHR5LCBhcmcsIHNpemVvZihzdHJ1Y3QgUG9ydFR0eSkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNzQ1LDE0ICs2MTIsMTQgQEAKIAogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlBvcnQgJWRcbiIsIFBvcnRUdHkucG9ydCk7CiAJCVBvcnRQID0gKHAtPlJJT1BvcnRwW1BvcnRUdHkucG9ydF0pOwotCQlpZiAoY29weW91dCgoY2FkZHJfdCkgJiBQb3J0VHR5LCAoaW50KSBhcmcsIHNpemVvZihzdHJ1Y3QgUG9ydFR0eSkpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmUG9ydFR0eSwgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBSSU9fU0VUX1BPUlRfVFRZOgotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgUG9ydFR0eSwgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0VHR5LCBhcmcsIHNpemVvZihzdHJ1Y3QgUG9ydFR0eSkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNzY3LDggKzYzNCw3IEBACiAKIAljYXNlIFJJT19TRVRfUE9SVF9QQVJBTVM6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiU2V0IHBvcnQgcGFyYW1zXG4iKTsKLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSAmIFBvcnRQYXJhbXMsIHNpemVvZihQb3J0UGFyYW1zKSkKLQkJICAgID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFBhcmFtcywgYXJnLCBzaXplb2YoUG9ydFBhcmFtcykpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNzg0LDcgKzY1MCw3IEBACiAKIAljYXNlIFJJT19HRVRfUE9SVF9TVEFUUzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0VUX1BPUlRfU1RBVFNcbiIpOwotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgcG9ydFN0YXRzLCBzaXplb2Yoc3RydWN0IHBvcnRTdGF0cykpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcG9ydFN0YXRzLCBhcmcsIHNpemVvZihzdHJ1Y3QgcG9ydFN0YXRzKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC03OTksMTQgKzY2NSwxNCBAQAogCQlwb3J0U3RhdHMub3BlbnMgPSBQb3J0UC0+b3BlbnM7CiAJCXBvcnRTdGF0cy5jbG9zZXMgPSBQb3J0UC0+Y2xvc2VzOwogCQlwb3J0U3RhdHMuaW9jdGxzID0gUG9ydFAtPmlvY3RsczsKLQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpICYgcG9ydFN0YXRzLCAoaW50KSBhcmcsIHNpemVvZihzdHJ1Y3QgcG9ydFN0YXRzKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwb3J0U3RhdHMsIHNpemVvZihzdHJ1Y3QgcG9ydFN0YXRzKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBSSU9fUkVTRVRfUE9SVF9TVEFUUzoKLQkJcG9ydCA9ICh1aW50KSBhcmc7CisJCXBvcnQgPSAodW5zaWduZWQgbG9uZykgYXJnOwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19SRVNFVF9QT1JUX1NUQVRTXG4iKTsKIAkJaWYgKHBvcnQgPj0gUklPX1BPUlRTKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IFBPUlRfTlVNQkVSX09VVF9PRl9SQU5HRTsKQEAgLTgyNCw3ICs2OTAsNyBAQAogCiAJY2FzZSBSSU9fR0FUSEVSX1BPUlRfU1RBVFM6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0dBVEhFUl9QT1JUX1NUQVRTXG4iKTsKLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSAmIHBvcnRTdGF0cywgc2l6ZW9mKHN0cnVjdCBwb3J0U3RhdHMpKSA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnBvcnRTdGF0cywgYXJnLCBzaXplb2Yoc3RydWN0IHBvcnRTdGF0cykpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtODQwLDcgKzcwNiw3IEBACiAKIAljYXNlIFJJT19SRUFEX0NPTkZJRzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUkVBRF9DT05GSUdcbiIpOwotCQlpZiAoY29weW91dCgoY2FkZHJfdCkgJiBwLT5SSU9Db25mLCAoaW50KSBhcmcsIHNpemVvZihzdHJ1Y3QgQ29uZikpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPQ29uZiwgc2l6ZW9mKHN0cnVjdCBDb25mKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtODUyLDggKzcxOCw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgcC0+UklPQ29uZiwgc2l6ZW9mKHN0cnVjdCBDb25mKSkKLQkJICAgID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcC0+UklPQ29uZiwgYXJnLCBzaXplb2Yoc3RydWN0IENvbmYpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTg2Miw3ICs3MjcsNyBAQAogCQkgKi8KIAkJZm9yIChIb3N0ID0gMDsgSG9zdCA8IHAtPlJJT051bUhvc3RzOyBIb3N0KyspCiAJCQlpZiAoKHAtPlJJT0hvc3RzW0hvc3RdLkZsYWdzICYgUlVOX1NUQVRFKSA9PSBSQ19SVU5OSU5HKQotCQkJCVdXT1JEKHAtPlJJT0hvc3RzW0hvc3RdLlBhcm1NYXBQLT50aW1lciwgcC0+UklPQ29uZi5UaW1lcik7CisJCQkJd3JpdGV3KHAtPlJJT0NvbmYuVGltZXIsICZwLT5SSU9Ib3N0c1tIb3N0XS5QYXJtTWFwUC0+dGltZXIpOwogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBSSU9fU1RBUlRfUE9MTEVSOgpAQCAtODgxLDggKzc0Niw3IEBACiAJY2FzZSBSSU9fU0VUREVCVUc6CiAJY2FzZSBSSU9fR0VUREVCVUc6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVERFQlVHL1JJT19HRVRERUJVR1xuIik7Ci0JCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBEZWJ1Z0N0cmwsIHNpemVvZihEZWJ1Z0N0cmwpKQotCQkgICAgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZEZWJ1Z0N0cmwsIGFyZywgc2l6ZW9mKERlYnVnQ3RybCkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtODk5LDcgKzc2Myw3IEBACiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJHZXQgZ2xvYmFsIGRlYnVnIDB4JXggd2FpdCAweCV4XG4iLCBwLT5yaW9fZGVidWcsIHAtPlJJT0RlYnVnV2FpdCk7CiAJCQkJRGVidWdDdHJsLkRlYnVnID0gcC0+cmlvX2RlYnVnOwogCQkJCURlYnVnQ3RybC5XYWl0ID0gcC0+UklPRGVidWdXYWl0OwotCQkJCWlmIChjb3B5b3V0KChjYWRkcl90KSAmIERlYnVnQ3RybCwgKGludCkgYXJnLCBzaXplb2YoRGVidWdDdHJsKSkgPT0gQ09QWUZBSUwpIHsKKwkJCQlpZiAoY29weV90b191c2VyKGFyZywgJkRlYnVnQ3RybCwgc2l6ZW9mKERlYnVnQ3RybCkpKSB7CiAJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVC9HRVQgREVCVUc6IGJhZCBwb3J0IG51bWJlciAlZFxuIiwgRGVidWdDdHJsLlN5c1BvcnQpOwogCQkJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTkyMSw3ICs3ODUsNyBAQAogCQl9IGVsc2UgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0VUREVCVUcgMHgleFxuIiwgcC0+UklPUG9ydHBbRGVidWdDdHJsLlN5c1BvcnRdLT5EZWJ1Zyk7CiAJCQlEZWJ1Z0N0cmwuRGVidWcgPSBwLT5SSU9Qb3J0cFtEZWJ1Z0N0cmwuU3lzUG9ydF0tPkRlYnVnOwotCQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpICYgRGVidWdDdHJsLCAoaW50KSBhcmcsIHNpemVvZihEZWJ1Z0N0cmwpKSA9PSBDT1BZRkFJTCkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZEZWJ1Z0N0cmwsIHNpemVvZihEZWJ1Z0N0cmwpKSkgewogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0dFVERFQlVHOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtOTM2LDQzICs4MDAsMjAgQEAKIAkJICoqIHRleHR1YWwgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZy4KIAkJICovCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1ZFUlNJRFxuIik7Ci0JCWlmIChjb3B5b3V0KChjYWRkcl90KSBSSU9WZXJzaWQoKSwgKGludCkgYXJnLCBzaXplb2Yoc3RydWN0IHJpb1ZlcnNpb24pKSA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV90b191c2VyKGFyZywgUklPVmVyc2lkKCksIHNpemVvZihzdHJ1Y3QgcmlvVmVyc2lvbikpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19WRVJTSUQ6IEJhZCBjb3B5IHRvIHVzZXIgc3BhY2UgKGhvc3Q9JWQpXG4iLCBIb3N0KTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gcmV0dmFsOwogCi0JCS8qCi0JCSAqKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCi0JCSAqKiAhISBjb21tZW50ZWQgb3V0IHByZXZpb3VzICdSSU9fVkVSU0lEJyBmdW5jdGlvbmFsaXR5ICEhCi0JCSAqKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCi0JCSAqKgotCQkgY2FzZSBSSU9fVkVSU0lEOgotCQkgKioKLQkJICoqIEVucXVpcmUgYWJvdXQgdGhlIHJlbGVhc2UgYW5kIHZlcnNpb24uCi0JCSAqKiBXZSByZXR1cm4gTUFYX1ZFUlNJT05fTEVOIGJ5dGVzLCBiZWluZyBhIHRleHR1YWwgbnVsbAotCQkgKiogdGVybWluYXRlZCBzdHJpbmcuCi0JCSAqKgotCQkgcmlvX2RwcmludChSSU9fREVCVUdfQ1RSTCwgKCJSSU9fVkVSU0lEXG4iKSk7Ci0JCSBpZiAoY29weW91dCgoY2FkZHJfdClSSU9WZXJzaWQoKSwKLQkJIChpbnQpYXJnLCBNQVhfVkVSU0lPTl9MRU4gKSA9PSBDT1BZRkFJTCApIHsKLQkJIHJpb19kcHJpbnQoUklPX0RFQlVHX0NUUkwsICgiUklPX1ZFUlNJRDogQmFkIGNvcHkgdG8gdXNlciBzcGFjZVxuIixIb3N0KSk7Ci0JCSBwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwotCQkgcmV0dXJuIC1FRkFVTFQ7Ci0JCSB9Ci0JCSByZXR1cm4gcmV0dmFsOwotCQkgKioKLQkJICoqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKLQkJICovCi0KIAljYXNlIFJJT19OVU1fSE9TVFM6CiAJCS8qCiAJCSAqKiBFbnF1aXJlIGFzIHRvIHRoZSBudW1iZXIgb2YgaG9zdHMgbG9jYXRlZAogCQkgKiogYXQgaW5pdCB0aW1lLgogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fTlVNX0hPU1RTXG4iKTsKLQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpICYgcC0+UklPTnVtSG9zdHMsIChpbnQpIGFyZywgc2l6ZW9mKHAtPlJJT051bUhvc3RzKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwLT5SSU9OdW1Ib3N0cywgc2l6ZW9mKHAtPlJJT051bUhvc3RzKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX05VTV9IT1NUUzogQmFkIGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC05ODMsNyArODI0LDcgQEAKIAkJLyoKIAkJICoqIEtpbGwgaG9zdC4gVGhpcyBtYXkgbm90IGJlIGluIHRoZSBmaW5hbCB2ZXJzaW9uLi4uCiAJCSAqLwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0ZPQUQgJWRcbiIsIChpbnQpIGFyZyk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfRk9BRCAlbGRcbiIsICh1bnNpZ25lZCBsb25nKSBhcmcpOwogCQlpZiAoIXN1KSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0ZPQUQ6IE5vdCBzdXBlciB1c2VyXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CkBAIC05OTQsNyArODM1LDcgQEAKIAogCQlmb3IgKEhvc3QgPSAwOyBIb3N0IDwgcC0+UklPTnVtSG9zdHM7IEhvc3QrKykgewogCQkJKHZvaWQpIFJJT0JvYXJkVGVzdChwLT5SSU9Ib3N0c1tIb3N0XS5QYWRkclAsIHAtPlJJT0hvc3RzW0hvc3RdLkNhZGRyLCBwLT5SSU9Ib3N0c1tIb3N0XS5UeXBlLCBwLT5SSU9Ib3N0c1tIb3N0XS5TbG90KTsKLQkJCWJ6ZXJvKChjYWRkcl90KSAmIHAtPlJJT0hvc3RzW0hvc3RdLkZsYWdzLCAoKGludCkgJnAtPlJJT0hvc3RzW0hvc3RdLl9fX19lbmRfbWFya2VyX19fXykgLSAoKGludCkgJnAtPlJJT0hvc3RzW0hvc3RdLkZsYWdzKSk7CisJCQltZW1zZXQoJnAtPlJJT0hvc3RzW0hvc3RdLkZsYWdzLCAwLCAoKGNoYXIgKikgJnAtPlJJT0hvc3RzW0hvc3RdLl9fX19lbmRfbWFya2VyX19fXykgLSAoKGNoYXIgKikgJnAtPlJJT0hvc3RzW0hvc3RdLkZsYWdzKSk7CiAJCQlwLT5SSU9Ib3N0c1tIb3N0XS5GbGFncyA9IFJDX1dBSVRJTkc7CiAJCX0KIAkJUklPRm9hZFdha2V1cChwKTsKQEAgLTEwMTcsNyArODU4LDcgQEAKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBEb3duTG9hZCwgc2l6ZW9mKERvd25Mb2FkKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZEb3duTG9hZCwgYXJnLCBzaXplb2YoRG93bkxvYWQpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fRE9XTkxPQUQ6IENvcHkgaW4gZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEwNDUsOSArODg2LDkgQEAKIAogCWNhc2UgUklPX1BBUk1TOgogCQl7Ci0JCQl1aW50IGhvc3Q7CisJCQl1bnNpZ25lZCBpbnQgaG9zdDsKIAotCQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSAmIGhvc3QsIHNpemVvZihob3N0KSkgPT0gQ09QWUZBSUwpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmaG9zdCwgYXJnLCBzaXplb2YoaG9zdCkpKSB7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9SRVE6IENvcHkgaW4gZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTA1Niw3ICs4OTcsNyBAQAogCQkJICoqIEZldGNoIHRoZSBwYXJtbWFwCiAJCQkgKi8KIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1BBUk1TXG4iKTsKLQkJCWlmIChjb3B5b3V0KChjYWRkcl90KSBwLT5SSU9Ib3N0c1tob3N0XS5QYXJtTWFwUCwgKGludCkgYXJnLCBzaXplb2YoUEFSTV9NQVApKSA9PSBDT1BZRkFJTCkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsIHAtPlJJT0hvc3RzW2hvc3RdLlBhcm1NYXBQLCBzaXplb2YoUEFSTV9NQVApKSkgewogCQkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUEFSTVM6IENvcHkgb3V0IHRvIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEwNjYsNyArOTA3LDcgQEAKIAogCWNhc2UgUklPX0hPU1RfUkVROgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JFUVxuIik7Ci0JCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBIb3N0UmVxLCBzaXplb2YoSG9zdFJlcSkpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmSG9zdFJlcSwgYXJnLCBzaXplb2YoSG9zdFJlcSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JFUTogQ29weSBpbiBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTA3OCw3ICs5MTksNyBAQAogCQl9CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUmVxdWVzdCBmb3IgaG9zdCAlZFxuIiwgSG9zdFJlcS5Ib3N0TnVtKTsKIAotCQlpZiAoY29weW91dCgoY2FkZHJfdCkgJiBwLT5SSU9Ib3N0c1tIb3N0UmVxLkhvc3ROdW1dLCAoaW50KSBIb3N0UmVxLkhvc3RQLCBzaXplb2Yoc3RydWN0IEhvc3QpKSA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV90b191c2VyKEhvc3RSZXEuSG9zdFAsICZwLT5SSU9Ib3N0c1tIb3N0UmVxLkhvc3ROdW1dLCBzaXplb2Yoc3RydWN0IEhvc3QpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfUkVROiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTA4Nyw3ICs5MjgsNyBAQAogCiAJY2FzZSBSSU9fSE9TVF9EUFJBTToKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSZXF1ZXN0IGZvciBEUFJBTVxuIik7Ci0JCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBIb3N0RHBSYW0sIHNpemVvZihIb3N0RHBSYW0pKSA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJkhvc3REcFJhbSwgYXJnLCBzaXplb2YoSG9zdERwUmFtKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfRFBSQU06IENvcHkgaW4gZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMDQsMTMgKzk0NSwxMyBAQAogCQkJLyogSXQncyBoYXJkd2FyZSBsaWtlIHRoaXMgdGhhdCByZWFsbHkgZ2V0cyBvbiBteSB0aXRzLiAqLwogCQkJc3RhdGljIHVuc2lnbmVkIGNoYXIgY29weVtzaXplb2Yoc3RydWN0IERwUmFtKV07CiAJCQlmb3IgKG9mZiA9IDA7IG9mZiA8IHNpemVvZihzdHJ1Y3QgRHBSYW0pOyBvZmYrKykKLQkJCQljb3B5W29mZl0gPSBwLT5SSU9Ib3N0c1tIb3N0RHBSYW0uSG9zdE51bV0uQ2FkZHJbb2ZmXTsKLQkJCWlmIChjb3B5b3V0KChjYWRkcl90KSBjb3B5LCAoaW50KSBIb3N0RHBSYW0uRHBSYW1QLCBzaXplb2Yoc3RydWN0IERwUmFtKSkgPT0gQ09QWUZBSUwpIHsKKwkJCQljb3B5W29mZl0gPSByZWFkYigmcC0+UklPSG9zdHNbSG9zdERwUmFtLkhvc3ROdW1dLkNhZGRyW29mZl0pOworCQkJaWYgKGNvcHlfdG9fdXNlcihIb3N0RHBSYW0uRHBSYW1QLCBjb3B5LCBzaXplb2Yoc3RydWN0IERwUmFtKSkpIHsKIAkJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfRFBSQU06IEJhZCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOwogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQotCQl9IGVsc2UgaWYgKGNvcHlvdXQoKGNhZGRyX3QpIHAtPlJJT0hvc3RzW0hvc3REcFJhbS5Ib3N0TnVtXS5DYWRkciwgKGludCkgSG9zdERwUmFtLkRwUmFtUCwgc2l6ZW9mKHN0cnVjdCBEcFJhbSkpID09IENPUFlGQUlMKSB7CisJCX0gZWxzZSBpZiAoY29weV90b191c2VyKEhvc3REcFJhbS5EcFJhbVAsIHAtPlJJT0hvc3RzW0hvc3REcFJhbS5Ib3N0TnVtXS5DYWRkciwgc2l6ZW9mKHN0cnVjdCBEcFJhbSkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9EUFJBTTogQmFkIGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMTksMTMgKzk2MCwxMyBAQAogCiAJY2FzZSBSSU9fU0VUX0JVU1k6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVF9CVVNZXG4iKTsKLQkJaWYgKChpbnQpIGFyZyA8IDAgfHwgKGludCkgYXJnID4gNTExKSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19TRVRfQlVTWTogQmFkIHBvcnQgbnVtYmVyICVkXG4iLCAoaW50KSBhcmcpOworCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGFyZyA+IDUxMSkgeworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fU0VUX0JVU1k6IEJhZCBwb3J0IG51bWJlciAlbGRcbiIsICh1bnNpZ25lZCBsb25nKSBhcmcpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBQT1JUX05VTUJFUl9PVVRfT0ZfUkFOR0U7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlyaW9fc3Bpbl9sb2NrX2lycXNhdmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXAtPlJJT1BvcnRwWyhpbnQpIGFyZ10tPlN0YXRlIHw9IFJJT19CVVNZOworCQlwLT5SSU9Qb3J0cFsodW5zaWduZWQgbG9uZykgYXJnXS0+U3RhdGUgfD0gUklPX0JVU1k7CiAJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC0xMTM1LDcgKzk3Niw3IEBACiAJCSAqKiAocHJvYmFibHkgZm9yIGRlYnVnIHJlYXNvbnMpCiAJCSAqLwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1BPUlRcbiIpOwotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgUG9ydFJlcSwgc2l6ZW9mKFBvcnRSZXEpKSA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJlBvcnRSZXEsIGFyZywgc2l6ZW9mKFBvcnRSZXEpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9QT1JUOiBDb3B5IGluIGZyb20gdXNlciBzcGFjZSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMTQ3LDcgKzk4OCw3IEBACiAJCQlyZXR1cm4gLUVOWElPOwogCQl9CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUmVxdWVzdCBmb3IgcG9ydCAlZFxuIiwgUG9ydFJlcS5TeXNQb3J0KTsKLQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpIHAtPlJJT1BvcnRwW1BvcnRSZXEuU3lzUG9ydF0sIChpbnQpIFBvcnRSZXEuUG9ydFAsIHNpemVvZihzdHJ1Y3QgUG9ydCkpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoUG9ydFJlcS5Qb3J0UCwgcC0+UklPUG9ydHBbUG9ydFJlcS5TeXNQb3J0XSwgc2l6ZW9mKHN0cnVjdCBQb3J0KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1BPUlQ6IEJhZCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMTYwLDcgKzEwMDEsNyBAQAogCQkgKiogKHByb2JhYmx5IGZvciBkZWJ1ZyByZWFzb25zKQogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9SVVBcbiIpOwotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgUnVwUmVxLCBzaXplb2YoUnVwUmVxKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZSdXBSZXEsIGFyZywgc2l6ZW9mKFJ1cFJlcSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JVUDogQ29weSBpbiBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTE4NCw3ICsxMDI1LDcgQEAKIAkJfQogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJlcXVlc3QgZm9yIHJ1cCAlZCBmcm9tIGhvc3QgJWRcbiIsIFJ1cFJlcS5SdXBOdW0sIFJ1cFJlcS5Ib3N0TnVtKTsKIAotCQlpZiAoY29weW91dCgoY2FkZHJfdCkgSG9zdFAtPlVuaXhSdXBzW1J1cFJlcS5SdXBOdW1dLlJ1cFAsIChpbnQpIFJ1cFJlcS5SdXBQLCBzaXplb2Yoc3RydWN0IFJVUCkpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoSG9zdFAtPlVuaXhSdXBzW1J1cFJlcS5SdXBOdW1dLlJ1cFAsIFJ1cFJlcS5SdXBQLCBzaXplb2Yoc3RydWN0IFJVUCkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9SVVA6IEJhZCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMTk3LDcgKzEwMzgsNyBAQAogCQkgKiogKHByb2JhYmx5IGZvciBkZWJ1ZyByZWFzb25zKQogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9MUEJcbiIpOwotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgTHBiUmVxLCBzaXplb2YoTHBiUmVxKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZMcGJSZXEsIGFyZywgc2l6ZW9mKExwYlJlcSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0xQQjogQmFkIGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTIyMSw3ICsxMDYyLDcgQEAKIAkJfQogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJlcXVlc3QgZm9yIGxwYiAlZCBmcm9tIGhvc3QgJWRcbiIsIExwYlJlcS5MaW5rLCBMcGJSZXEuSG9zdCk7CiAKLQkJaWYgKGNvcHlvdXQoKGNhZGRyX3QpICYgSG9zdFAtPkxpbmtTdHJQW0xwYlJlcS5MaW5rXSwgKGludCkgTHBiUmVxLkxwYlAsIHNpemVvZihzdHJ1Y3QgTFBCKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihMcGJSZXEuTHBiUCwgJkhvc3RQLT5MaW5rU3RyUFtMcGJSZXEuTGlua10sIHNpemVvZihzdHJ1Y3QgTFBCKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfTFBCOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEyNTIsMTIgKzEwOTMsMTMgQEAKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gU0lHTkFMU19BTFJFQURZX1NFVDsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KLQkJcC0+UklPU2lnbmFsUHJvY2VzcyA9IGdldHBpZCgpOworCQkvKiBGSVhNRTogUElEIHRyYWNraW5nICovCisJCXAtPlJJT1NpZ25hbFByb2Nlc3MgPSBjdXJyZW50LT5waWQ7CiAJCXAtPlJJT1ByaW50RGlzYWJsZWQgPSBET05UX1BSSU5UOwogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBSSU9fU0lHTkFMU19PRkY6Ci0JCWlmIChwLT5SSU9TaWduYWxQcm9jZXNzICE9IGdldHBpZCgpKSB7CisJCWlmIChwLT5SSU9TaWduYWxQcm9jZXNzICE9IGN1cnJlbnQtPnBpZCkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfUkVDRUlWSU5HX1BST0NFU1M7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9CkBAIC0xMjk0LDcgKzExMzYsNyBAQAogCWNhc2UgUklPX01BUF9CMTEwX1RPXzExMDoKIAljYXNlIFJJT19NQVBfQjExMF9UT18xMTUyMDA6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQmF1ZCByYXRlIG1hcHBpbmdcbiIpOwotCQlwb3J0ID0gKHVpbnQpIGFyZzsKKwkJcG9ydCA9ICh1bnNpZ25lZCBsb25nKSBhcmc7CiAJCWlmIChwb3J0IDwgMCB8fCBwb3J0ID4gNTExKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkJhdWQgcmF0ZSBtYXBwaW5nOiBCYWQgcG9ydCBudW1iZXIgJWRcbiIsIHBvcnQpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBQT1JUX05VTUJFUl9PVVRfT0ZfUkFOR0U7CkBAIC0xMzI0LDcgKzExNjYsNyBAQAogCiAJY2FzZSBSSU9fU0VORF9QQUNLRVQ6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFTkRfUEFDS0VUXG4iKTsKLQkJaWYgKGNvcHlpbigoaW50KSBhcmcsIChjYWRkcl90KSAmIFNlbmRQYWNrLCBzaXplb2YoU2VuZFBhY2spKSA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJlNlbmRQYWNrLCBhcmcsIHNpemVvZihTZW5kUGFjaykpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19TRU5EX1BBQ0tFVDogQmFkIGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTM0NCw5ICsxMTg2LDkgQEAKIAkJfQogCiAJCWZvciAobG9vcCA9IDA7IGxvb3AgPCAodXNob3J0KSAoU2VuZFBhY2suTGVuICYgMTI3KTsgbG9vcCsrKQotCQkJV0JZVEUoUGFja2V0UC0+ZGF0YVtsb29wXSwgU2VuZFBhY2suRGF0YVtsb29wXSk7CisJCQl3cml0ZWIoU2VuZFBhY2suRGF0YVtsb29wXSwgJlBhY2tldFAtPmRhdGFbbG9vcF0pOwogCi0JCVdCWVRFKFBhY2tldFAtPmxlbiwgU2VuZFBhY2suTGVuKTsKKwkJd3JpdGViKFNlbmRQYWNrLkxlbiwgJlBhY2tldFAtPmxlbik7CiAKIAkJYWRkX3RyYW5zbWl0KFBvcnRQKTsKIAkJLyoKQEAgLTEzNjgsNyArMTIxMCw3IEBACiAJCXJldHVybiBzdSA/IDAgOiAtRVBFUk07CiAKIAljYXNlIFJJT19XSEFUX01FU0c6Ci0JCWlmIChjb3B5b3V0KChjYWRkcl90KSAmIHAtPlJJT05vTWVzc2FnZSwgKGludCkgYXJnLCBzaXplb2YocC0+UklPTm9NZXNzYWdlKSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwLT5SSU9Ob01lc3NhZ2UsIHNpemVvZihwLT5SSU9Ob01lc3NhZ2UpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fV0hBVF9NRVNHOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEzNzYsNyArMTIxOCw3IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBSSU9fTUVNX0RVTVA6Ci0JCWlmIChjb3B5aW4oKGludCkgYXJnLCAoY2FkZHJfdCkgJiBTdWJDbWQsIHNpemVvZihzdHJ1Y3QgU3ViQ21kU3RydWN0KSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZTdWJDbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBTdWJDbWRTdHJ1Y3QpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTE0MDYsNyArMTI0OCw3IEBACiAJCQlQb3J0UC0+U3RhdGUgfD0gUklPX0JVU1k7CiAKIAkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCWlmIChjb3B5b3V0KChjYWRkcl90KSBwLT5SSU9NZW1EdW1wLCAoaW50KSBhcmcsIE1FTURVTVBfU0laRSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsIHAtPlJJT01lbUR1bXAsIE1FTURVTVBfU0laRSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX01FTV9EVU1QIGNvcHkgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE0MTQsMzAgKzEyNTYsMzAgQEAKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFJJT19USUNLOgotCQlpZiAoKGludCkgYXJnIDwgMCB8fCAoaW50KSBhcmcgPj0gcC0+UklPTnVtSG9zdHMpCisJCWlmICgodW5zaWduZWQgbG9uZykgYXJnID49IHAtPlJJT051bUhvc3RzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiU2V0IGludGVycnVwdCBmb3IgaG9zdCAlZFxuIiwgKGludCkgYXJnKTsKLQkJV0JZVEUocC0+UklPSG9zdHNbKGludCkgYXJnXS5TZXRJbnQsIDB4ZmYpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlNldCBpbnRlcnJ1cHQgZm9yIGhvc3QgJWxkXG4iLCAodW5zaWduZWQgbG9uZykgYXJnKTsKKwkJd3JpdGViKDB4RkYsICZwLT5SSU9Ib3N0c1sodW5zaWduZWQgbG9uZykgYXJnXS5TZXRJbnQpOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgUklPX1RPQ0s6Ci0JCWlmICgoaW50KSBhcmcgPCAwIHx8IChpbnQpIGFyZyA+PSBwLT5SSU9OdW1Ib3N0cykKKwkJaWYgKCh1bnNpZ25lZCBsb25nKSBhcmcgPj0gcC0+UklPTnVtSG9zdHMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDbGVhciBpbnRlcnJ1cHQgZm9yIGhvc3QgJWRcbiIsIChpbnQpIGFyZyk7Ci0JCVdCWVRFKChwLT5SSU9Ib3N0c1soaW50KSBhcmddLlJlc2V0SW50KSwgMHhmZik7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ2xlYXIgaW50ZXJydXB0IGZvciBob3N0ICVsZFxuIiwgKHVuc2lnbmVkIGxvbmcpIGFyZyk7CisJCXdyaXRlYigweEZGLCAmcC0+UklPSG9zdHNbKHVuc2lnbmVkIGxvbmcpIGFyZ10uUmVzZXRJbnQpOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgUklPX1JFQURfQ0hFQ0s6CiAJCS8qIENoZWNrIHJlYWRzIGZvciBwa3RzIHdpdGggZGF0YVswXSB0aGUgc2FtZSAqLwogCQlwLT5SSU9SZWFkQ2hlY2sgPSAhcC0+UklPUmVhZENoZWNrOwotCQlpZiAoY29weW91dCgoY2FkZHJfdCkgJiBwLT5SSU9SZWFkQ2hlY2ssIChpbnQpIGFyZywgc2l6ZW9mKHVpbnQpKSA9PSBDT1BZRkFJTCkgeworCQlpZiAoY29weV90b191c2VyKGFyZywgJnAtPlJJT1JlYWRDaGVjaywgc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJcmV0dXJuIDA7CiAKIAljYXNlIFJJT19SRUFEX1JFR0lTVEVSOgotCQlpZiAoY29weWluKChpbnQpIGFyZywgKGNhZGRyX3QpICYgU3ViQ21kLCBzaXplb2Yoc3RydWN0IFN1YkNtZFN0cnVjdCkpID09IENPUFlGQUlMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmU3ViQ21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgU3ViQ21kU3RydWN0KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC0xNDcyLDcgKzEzMTQsNyBAQAogCQkJUG9ydFAtPlN0YXRlIHw9IFJJT19CVVNZOwogCiAJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlpZiAoY29weW91dCgoY2FkZHJfdCkgJiBwLT5DZFJlZ2lzdGVyLCAoaW50KSBhcmcsIHNpemVvZih1aW50KSkgPT0gQ09QWUZBSUwpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwLT5DZFJlZ2lzdGVyLCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1JFQURfUkVHSVNURVIgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTQ4NSwyMSArMTMyNywyMiBAQAogCQkgKi8KIAljYXNlIFJJT19NQUtFX0RFVjoKIAkJewotCQkJdWludCBwb3J0ID0gKHVpbnQpIGFyZyAmIFJJT19NT0RFTV9NQVNLOworCQkJdW5zaWduZWQgaW50IHBvcnQgPSAodW5zaWduZWQgbG9uZykgYXJnICYgUklPX01PREVNX01BU0s7CisJCQl1bnNpZ25lZCBpbnQgcmV0OwogCi0JCQlzd2l0Y2ggKCh1aW50KSBhcmcgJiBSSU9fREVWX01BU0spIHsKKwkJCXN3aXRjaCAoKHVuc2lnbmVkIGxvbmcpIGFyZyAmIFJJT19ERVZfTUFTSykgewogCQkJY2FzZSBSSU9fREVWX0RJUkVDVDoKLQkJCQlhcmcgPSAoY2FkZHJfdCkgZHJ2X21ha2VkZXYoTUFKT1IoZGV2KSwgcG9ydCk7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJNYWtlZGV2IGRpcmVjdCAweCV4IGlzIDB4JXhcbiIsIHBvcnQsIChpbnQpIGFyZyk7Ci0JCQkJcmV0dXJuIChpbnQpIGFyZzsKKwkJCQlyZXQgPSBkcnZfbWFrZWRldihNQUpPUihkZXYpLCBwb3J0KTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIk1ha2VkZXYgZGlyZWN0IDB4JXggaXMgMHgleFxuIiwgcG9ydCwgcmV0KTsKKwkJCQlyZXR1cm4gcmV0OwogCQkJY2FzZSBSSU9fREVWX01PREVNOgotCQkJCWFyZyA9IChjYWRkcl90KSBkcnZfbWFrZWRldihNQUpPUihkZXYpLCAocG9ydCB8IFJJT19NT0RFTV9CSVQpKTsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIk1ha2VkZXYgbW9kZW0gMHgleCBpcyAweCV4XG4iLCBwb3J0LCAoaW50KSBhcmcpOwotCQkJCXJldHVybiAoaW50KSBhcmc7CisJCQkJcmV0ID0gZHJ2X21ha2VkZXYoTUFKT1IoZGV2KSwgKHBvcnQgfCBSSU9fTU9ERU1fQklUKSk7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJNYWtlZGV2IG1vZGVtIDB4JXggaXMgMHgleFxuIiwgcG9ydCwgcmV0KTsKKwkJCQlyZXR1cm4gcmV0OwogCQkJY2FzZSBSSU9fREVWX1hQUklOVDoKLQkJCQlhcmcgPSAoY2FkZHJfdCkgZHJ2X21ha2VkZXYoTUFKT1IoZGV2KSwgcG9ydCk7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJNYWtlZGV2IHByaW50ZXIgMHgleCBpcyAweCV4XG4iLCBwb3J0LCAoaW50KSBhcmcpOwotCQkJCXJldHVybiAoaW50KSBhcmc7CisJCQkJcmV0ID0gZHJ2X21ha2VkZXYoTUFKT1IoZGV2KSwgcG9ydCk7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJNYWtlZGV2IHByaW50ZXIgMHgleCBpcyAweCV4XG4iLCBwb3J0LCByZXQpOworCQkJCXJldHVybiByZXQ7CiAJCQl9CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIk1BS0UgRGV2aWNlIGlzIGNhbGxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1MTMsMTggKzEzNTYsMTkgQEAKIAkJewogCQkJZGV2X3QgZHY7CiAJCQlpbnQgbWlubzsKKwkJCXVuc2lnbmVkIGxvbmcgcmV0OwogCi0JCQlkdiA9IChkZXZfdCkgKChpbnQpIGFyZyk7CisJCQlkdiA9IChkZXZfdCkgKCh1bnNpZ25lZCBsb25nKSBhcmcpOwogCQkJbWlubyA9IFJJT19VTk1PREVNKGR2KTsKIAogCQkJaWYgKFJJT19JU01PREVNKGR2KSkgewogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiTWlub3IgZm9yIGRldmljZSAweCV4OiBtb2RlbSAlZFxuIiwgZHYsIG1pbm8pOwotCQkJCWFyZyA9IChjYWRkcl90KSAobWlubyB8IFJJT19ERVZfTU9ERU0pOworCQkJCXJldCA9IG1pbm8gfCBSSU9fREVWX01PREVNOwogCQkJfSBlbHNlIHsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIk1pbm9yIGZvciBkZXZpY2UgMHgleDogZGlyZWN0ICVkXG4iLCBkdiwgbWlubyk7Ci0JCQkJYXJnID0gKGNhZGRyX3QpIChtaW5vIHwgUklPX0RFVl9ESVJFQ1QpOworCQkJCXJldCA9IG1pbm8gfCBSSU9fREVWX0RJUkVDVDsKIAkJCX0KLQkJCXJldHVybiAoaW50KSBhcmc7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiSU5WQUxJRCBEQUVNT04gSU9DVEwgMHgleFxuIiwgY21kKTsKQEAgLTE1MzcsMTAgKzEzODEsNyBAQAogLyoKICoqIFByZS1lbXB0aXZlIGNvbW1hbmRzIGdvIG9uIFJVUHMgYW5kIGFyZSBvbmx5IG9uZSBieXRlIGxvbmcuCiAqLwotaW50IFJJT1ByZWVtcHRpdmVDbWQocCwgUG9ydFAsIENtZCkKLXN0cnVjdCByaW9faW5mbyAqcDsKLXN0cnVjdCBQb3J0ICpQb3J0UDsKLXVjaGFyIENtZDsKK2ludCBSSU9QcmVlbXB0aXZlQ21kKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IFBvcnQgKlBvcnRQLCB1OCBDbWQpCiB7CiAJc3RydWN0IENtZEJsayAqQ21kQmxrUDsKIAlzdHJ1Y3QgUGt0Q21kX00gKlBrdENtZFA7CkBAIC0xNTU4LDcgKzEzOTksNyBAQAogCQlyZXR1cm4gUklPX0ZBSUw7CiAJfQogCi0JcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDb21tYW5kIGJsayAweCV4IC0gSW5Vc2Ugbm93ICVkXG4iLCAoaW50KSBDbWRCbGtQLCBQb3J0UC0+SW5Vc2UpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ29tbWFuZCBibGsgJXAgLSBJblVzZSBub3cgJWRcbiIsIENtZEJsa1AsIFBvcnRQLT5JblVzZSk7CiAKIAlQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWRfTSAqKSAmQ21kQmxrUC0+UGFja2V0LmRhdGFbMF07CiAKQEAgLTE1NzIsNyArMTQxMyw3IEBACiAJQ21kQmxrUC0+UGFja2V0LmRlc3RfcG9ydCA9IENPTU1BTkRfUlVQOwogCUNtZEJsa1AtPlBhY2tldC5sZW4gPSBQS1RfQ01EX0JJVCB8IDI7CiAJQ21kQmxrUC0+UG9zdEZ1bmNQID0gUklPVW5Vc2U7Ci0JQ21kQmxrUC0+UG9zdEFyZyA9IChpbnQpIFBvcnRQOworCUNtZEJsa1AtPlBvc3RBcmcgPSAodW5zaWduZWQgbG9uZykgUG9ydFA7CiAJUGt0Q21kUC0+Q29tbWFuZCA9IENtZDsKIAlwb3J0ID0gUG9ydFAtPkhvc3RQb3J0ICUgKHVzaG9ydCkgUE9SVFNfUEVSX1JUQTsKIAkvKgpAQCAtMTU4NCwzOCArMTQyNSwzOCBAQAogCiAJc3dpdGNoIChDbWQpIHsKIAljYXNlIE1FTURVTVA6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgTUVNRFVNUCBjb21tYW5kIGJsayAweCV4IChhZGRyIDB4JXgpXG4iLCAoaW50KSBDbWRCbGtQLCAoaW50KSBTdWJDbWQuQWRkcik7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgTUVNRFVNUCBjb21tYW5kIGJsayAlcCAoYWRkciAweCV4KVxuIiwgQ21kQmxrUCwgKGludCkgU3ViQ21kLkFkZHIpOwogCQlQa3RDbWRQLT5TdWJDb21tYW5kID0gTUVNRFVNUDsKIAkJUGt0Q21kUC0+U3ViQWRkciA9IFN1YkNtZC5BZGRyOwogCQlicmVhazsKIAljYXNlIEZDTE9TRToKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBGQ0xPU0UgY29tbWFuZCBibGsgMHgleFxuIiwgKGludCkgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgRkNMT1NFIGNvbW1hbmQgYmxrICVwXG4iLCBDbWRCbGtQKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUFEX1JFR0lTVEVSOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFJFQURfUkVHSVNURVIgKDB4JXgpIGNvbW1hbmQgYmxrIDB4JXhcbiIsIChpbnQpIFN1YkNtZC5BZGRyLCAoaW50KSBDbWRCbGtQKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBSRUFEX1JFR0lTVEVSICgweCV4KSBjb21tYW5kIGJsayAlcFxuIiwgKGludCkgU3ViQ21kLkFkZHIsIENtZEJsa1ApOwogCQlQa3RDbWRQLT5TdWJDb21tYW5kID0gUkVBRF9SRUdJU1RFUjsKIAkJUGt0Q21kUC0+U3ViQWRkciA9IFN1YkNtZC5BZGRyOwogCQlicmVhazsKIAljYXNlIFJFU1VNRToKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJRdWV1ZSBSRVNVTUUgY29tbWFuZCBibGsgMHgleFxuIiwgKGludCkgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgUkVTVU1FIGNvbW1hbmQgYmxrICVwXG4iLCBDbWRCbGtQKTsKIAkJYnJlYWs7CiAJY2FzZSBSRkxVU0g6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgUkZMVVNIIGNvbW1hbmQgYmxrIDB4JXhcbiIsIChpbnQpIENtZEJsa1ApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFJGTFVTSCBjb21tYW5kIGJsayAlcFxuIiwgQ21kQmxrUCk7CiAJCUNtZEJsa1AtPlBvc3RGdW5jUCA9IFJJT1JGbHVzaEVuYWJsZTsKIAkJYnJlYWs7CiAJY2FzZSBTVVNQRU5EOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFNVU1BFTkQgY29tbWFuZCBibGsgMHgleFxuIiwgKGludCkgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgU1VTUEVORCBjb21tYW5kIGJsayAlcFxuIiwgQ21kQmxrUCk7CiAJCWJyZWFrOwogCiAJY2FzZSBNR0VUOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIE1HRVQgY29tbWFuZCBibGsgMHgleFxuIiwgKGludCkgQ21kQmxrUCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgTUdFVCBjb21tYW5kIGJsayAlcFxuIiwgQ21kQmxrUCk7CiAJCWJyZWFrOwogCiAJY2FzZSBNU0VUOgogCWNhc2UgTUJJQzoKIAljYXNlIE1CSVM6CiAJCUNtZEJsa1AtPlBhY2tldC5kYXRhWzRdID0gKGNoYXIpIFBvcnRQLT5Nb2RlbUxpbmVzOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIE1TRVQvTUJJQy9NQklTIGNvbW1hbmQgYmxrIDB4JXhcbiIsIChpbnQpIENtZEJsa1ApOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIE1TRVQvTUJJQy9NQklTIGNvbW1hbmQgYmxrICVwXG4iLCBDbWRCbGtQKTsKIAkJYnJlYWs7CiAKIAljYXNlIFdGTFVTSDoKQEAgLTE2MjksNyArMTQ3MCw3IEBACiAJCQlSSU9GcmVlQ21kQmxrKENtZEJsa1ApOwogCQkJcmV0dXJuIChSSU9fRkFJTCk7CiAJCX0gZWxzZSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlF1ZXVlIFdGTFVTSCBjb21tYW5kIGJsayAweCV4XG4iLCAoaW50KSBDbWRCbGtQKTsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUXVldWUgV0ZMVVNIIGNvbW1hbmQgYmxrICVwXG4iLCBDbWRCbGtQKTsKIAkJCUNtZEJsa1AtPlBvc3RGdW5jUCA9IFJJT1dGbHVzaE1hcms7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2RydnIuaCBiL2RyaXZlcnMvY2hhci9yaW8vcmlvZHJ2ci5oCmluZGV4IDY2M2VlMDkuLjNjZmZlMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvZHJ2ci5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvZHJ2ci5oCkBAIC03Miw0MiArNzIsNDIgQEAKICovCiAJaW50IFJJT0hhbHRlZDsJCS8qIGhhbHRlZCA/ICovCiAJaW50IFJJT1J0YURpc0NvbnM7CS8qIFJUQSBjb25uZWN0aW9ucy9kaXNjb25uZWN0aW9ucyAqLwotCXVpbnQgUklPUmVhZENoZWNrOwkvKiBSaW8gcmVhZCBjaGVjayAqLwotCXVpbnQgUklPTm9NZXNzYWdlOwkvKiBUbyBkaXNwbGF5IG1lc3NhZ2Ugb3Igbm90ICovCi0JdWludCBSSU9OdW1Cb290UGt0czsJLyogaG93IG1hbnkgcGFja2V0cyBmb3IgYW4gUlRBICovCi0JdWludCBSSU9Cb290Q291bnQ7CS8qIHNpemUgb2YgUlRBIGNvZGUgKi8KLQl1aW50IFJJT0Jvb3Rpbmc7CS8qIGNvdW50IG9mIG91dHN0YW5kaW5nIGJvb3RzICovCi0JdWludCBSSU9TeXN0ZW1VcDsJLyogQm9vdGVkID8/ICovCi0JdWludCBSSU9Db3VudGluZzsJLyogZm9yIGNvdW50aW5nIGludGVycnVwdHMgKi8KLQl1aW50IFJJT0ludENvdW50OwkvKiAjIG9mIGludHIgc2luY2UgbGFzdCBjaGVjayAqLwotCXVpbnQgUklPVHhDb3VudDsJLyogbnVtYmVyIG9mIHhtaXQgaW50cnMgICovCi0JdWludCBSSU9SeENvdW50OwkvKiBudW1iZXIgb2YgcnggaW50cnMgKi8KLQl1aW50IFJJT1J1cENvdW50OwkvKiBudW1iZXIgb2YgcnVwIGludHJzICovCisJdW5zaWduZWQgaW50IFJJT1JlYWRDaGVjazsJLyogUmlvIHJlYWQgY2hlY2sgKi8KKwl1bnNpZ25lZCBpbnQgUklPTm9NZXNzYWdlOwkvKiBUbyBkaXNwbGF5IG1lc3NhZ2Ugb3Igbm90ICovCisJdW5zaWduZWQgaW50IFJJT051bUJvb3RQa3RzOwkvKiBob3cgbWFueSBwYWNrZXRzIGZvciBhbiBSVEEgKi8KKwl1bnNpZ25lZCBpbnQgUklPQm9vdENvdW50OwkvKiBzaXplIG9mIFJUQSBjb2RlICovCisJdW5zaWduZWQgaW50IFJJT0Jvb3Rpbmc7CS8qIGNvdW50IG9mIG91dHN0YW5kaW5nIGJvb3RzICovCisJdW5zaWduZWQgaW50IFJJT1N5c3RlbVVwOwkvKiBCb290ZWQgPz8gKi8KKwl1bnNpZ25lZCBpbnQgUklPQ291bnRpbmc7CS8qIGZvciBjb3VudGluZyBpbnRlcnJ1cHRzICovCisJdW5zaWduZWQgaW50IFJJT0ludENvdW50OwkvKiAjIG9mIGludHIgc2luY2UgbGFzdCBjaGVjayAqLworCXVuc2lnbmVkIGludCBSSU9UeENvdW50OwkvKiBudW1iZXIgb2YgeG1pdCBpbnRycyAgKi8KKwl1bnNpZ25lZCBpbnQgUklPUnhDb3VudDsJLyogbnVtYmVyIG9mIHJ4IGludHJzICovCisJdW5zaWduZWQgaW50IFJJT1J1cENvdW50OwkvKiBudW1iZXIgb2YgcnVwIGludHJzICovCiAJaW50IFJJWFRpbWVyOwogCWludCBSSU9CdWZmZXJTaXplOwkvKiBCdWZmZXJzaXplICovCiAJaW50IFJJT0J1ZmZlck1hc2s7CS8qIEJ1ZmZlcnNpemUgKi8KIAogCWludCBSSU9GaXJzdE1ham9yOwkvKiBGaXJzdCBob3N0IGNhcmQncyBtYWpvciBubyAqLwogCi0JdWludCBSSU9MYXN0UG9ydHNNYXBwZWQ7CS8qIGhpZ2hlc3QgcG9ydCBudW1iZXIga25vd24gKi8KLQl1aW50IFJJT0ZpcnN0UG9ydHNNYXBwZWQ7CS8qIGxvd2VzdCBwb3J0IG51bWJlciBrbm93biAqLworCXVuc2lnbmVkIGludCBSSU9MYXN0UG9ydHNNYXBwZWQ7CS8qIGhpZ2hlc3QgcG9ydCBudW1iZXIga25vd24gKi8KKwl1bnNpZ25lZCBpbnQgUklPRmlyc3RQb3J0c01hcHBlZDsJLyogbG93ZXN0IHBvcnQgbnVtYmVyIGtub3duICovCiAKLQl1aW50IFJJT0xhc3RQb3J0c0Jvb3RlZDsJLyogaGlnaGVzdCBwb3J0IG51bWJlciBydW5uaW5nICovCi0JdWludCBSSU9GaXJzdFBvcnRzQm9vdGVkOwkvKiBsb3dlc3QgcG9ydCBudW1iZXIgcnVubmluZyAqLworCXVuc2lnbmVkIGludCBSSU9MYXN0UG9ydHNCb290ZWQ7CS8qIGhpZ2hlc3QgcG9ydCBudW1iZXIgcnVubmluZyAqLworCXVuc2lnbmVkIGludCBSSU9GaXJzdFBvcnRzQm9vdGVkOwkvKiBsb3dlc3QgcG9ydCBudW1iZXIgcnVubmluZyAqLwogCi0JdWludCBSSU9MYXN0UG9ydHNPcGVuZWQ7CS8qIGhpZ2hlc3QgcG9ydCBudW1iZXIgcnVubmluZyAqLwotCXVpbnQgUklPRmlyc3RQb3J0c09wZW5lZDsJLyogbG93ZXN0IHBvcnQgbnVtYmVyIHJ1bm5pbmcgKi8KKwl1bnNpZ25lZCBpbnQgUklPTGFzdFBvcnRzT3BlbmVkOwkvKiBoaWdoZXN0IHBvcnQgbnVtYmVyIHJ1bm5pbmcgKi8KKwl1bnNpZ25lZCBpbnQgUklPRmlyc3RQb3J0c09wZW5lZDsJLyogbG93ZXN0IHBvcnQgbnVtYmVyIHJ1bm5pbmcgKi8KIAogCS8qIEZsYWcgdG8gc2F5IHRoYXQgdGhlIHRvcG9sb2d5IGluZm9ybWF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuICovCi0JdWludCBSSU9RdWlja0NoZWNrOwotCXVpbnQgQ2RSZWdpc3RlcjsJLyogPz8/ICovCisJdW5zaWduZWQgaW50IFJJT1F1aWNrQ2hlY2s7CisJdW5zaWduZWQgaW50IENkUmVnaXN0ZXI7CS8qID8/PyAqLwogCWludCBSSU9TaWduYWxQcm9jZXNzOwkvKiBTaWduYWxsaW5nIHByb2Nlc3MgKi8KIAlpbnQgcmlvX2RlYnVnOwkJLyogVG8gZGVidWcgLi4uICovCiAJaW50IFJJT0RlYnVnV2FpdDsJLyogRm9yIHdoYXQgPz8/ICovCiAJaW50IHRwcmk7CQkvKiBUaHJlYWQgcHJpbyAqLwogCWludCB0aWQ7CQkvKiBUaHJlYWQgaWQgKi8KLQl1aW50IF9SSU9fUG9sbGVkOwkvKiBDb3VudGVyIGZvciBwb2xsaW5nICovCi0JdWludCBfUklPX0ludGVycnVwdGVkOwkvKiBDb3VudGVyIGZvciBpbnRlcnJ1cHQgKi8KKwl1bnNpZ25lZCBpbnQgX1JJT19Qb2xsZWQ7CS8qIENvdW50ZXIgZm9yIHBvbGxpbmcgKi8KKwl1bnNpZ25lZCBpbnQgX1JJT19JbnRlcnJ1cHRlZDsJLyogQ291bnRlciBmb3IgaW50ZXJydXB0ICovCiAJaW50IGludHJfdGlkOwkJLyogaW9pbnRzZXQgcmV0dXJuIHZhbHVlICovCiAJaW50IFR4RW5TZW07CQkvKiBUeEVuYWJsZSBTZW1hcGhvcmUgKi8KIApAQCAtMTIxLDkgKzEyMSw5IEBACiAJc3RydWN0IE1hcCBSSU9TYXZlZFRhYmxlW1RPVEFMX01BUF9FTlRSSUVTXTsKIAogCS8qIFJUQSB0byBob3N0IGJpbmRpbmcgdGFibGUgZm9yIG1hc3Rlci9zbGF2ZSBvcGVyYXRpb24gKi8KLQl1bG9uZyBSSU9CaW5kVGFiW01BWF9SVEFfQklORElOR1NdOworCXVuc2lnbmVkIGxvbmcgUklPQmluZFRhYltNQVhfUlRBX0JJTkRJTkdTXTsKIAkvKiBSVEEgbWVtb3J5IGR1bXAgdmFyaWFibGUgKi8KLQl1Y2hhciBSSU9NZW1EdW1wW01FTURVTVBfU0laRV07CisJdW5zaWduZWQgY2hhciBSSU9NZW1EdW1wW01FTURVTVBfU0laRV07CiAJc3RydWN0IE1vZHVsZUluZm8gUklPTW9kdWxlVHlwZXNbTUFYX01PRFVMRV9UWVBFU107CiAKIH07CkBAIC0xMzgsNyArMTM4LDUgQEAKIAogCiAjZGVmaW5lIFJJT19SRVNFVF9JTlQJMHg3ZDgwCi0jZGVmaW5lIFdSQllURSh4LHkpCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKHgpKSA9IFwKLQkJCQkJKHVuc2lnbmVkIGNoYXIpKHkpCiAKICNlbmRpZgkJCQkvKiBfX3Jpb2RydnIuaCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYwppbmRleCAwZDQ0ZWY0Li4yNGQyOTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYwpAQCAtNTEsMTUgKzUxLDEyIEBACiAKIAogI2luY2x1ZGUgImxpbnV4X2NvbXBhdC5oIgotI2luY2x1ZGUgInR5cGRlZi5oIgogI2luY2x1ZGUgInBrdC5oIgogI2luY2x1ZGUgImRhZW1vbi5oIgogI2luY2x1ZGUgInJpby5oIgogI2luY2x1ZGUgInJpb3NwYWNlLmgiCi0jaW5jbHVkZSAidG9wLmgiCiAjaW5jbHVkZSAiY21kcGt0LmgiCiAjaW5jbHVkZSAibWFwLmgiCi0jaW5jbHVkZSAicmlvdHlwZXMuaCIKICNpbmNsdWRlICJydXAuaCIKICNpbmNsdWRlICJwb3J0LmgiCiAjaW5jbHVkZSAicmlvZHJ2ci5oIgpAQCAtNzIsMjIgKzY5LDE3IEBACiAjaW5jbHVkZSAidW5peHJ1cC5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImVycm9yLmgiCiAjaW5jbHVkZSAicGhiLmgiCiAjaW5jbHVkZSAibGluay5oIgogI2luY2x1ZGUgImNtZGJsay5oIgogI2luY2x1ZGUgInJvdXRlLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgImNpcnJ1cy5oIgogI2luY2x1ZGUgInJpb2lvY3RsLmgiCiAjaW5jbHVkZSAicmlvX2xpbnV4LmgiCiAKLSN1bmRlZiBiY29weQotI2RlZmluZSBiY29weSByaW9fcGNpY29weQotCiBpbnQgUklPUENJaW5pdChzdHJ1Y3QgcmlvX2luZm8gKnAsIGludCBNb2RlKTsKIAotc3RhdGljIGludCBSSU9TY3J1YihpbnQsIEJZVEUgKiwgaW50KTsKK3N0YXRpYyBpbnQgUklPU2NydWIoaW50LCB1OCAqLCBpbnQpOwogCiAKIC8qKgpAQCAtOTksMTIgKzkxLDggQEAKICoqIGJpdHMgPCAwIGluZGljYXRlcyA4IGJpdCBvcGVyYXRpb24gcmVxdWVzdGVkLAogKiogYml0cyA+IDAgaW5kaWNhdGVzIDE2IGJpdCBvcGVyYXRpb24uCiAqLwotaW50Ci1SSU9Bc3NpZ25BVChwLCBCYXNlLCB2aXJ0QWRkciwgbW9kZSkKLXN0cnVjdCByaW9faW5mbyAqCXA7Ci1pbnQJCUJhc2U7Ci1jYWRkcl90CXZpcnRBZGRyOwotaW50CQltb2RlOworCitpbnQgUklPQXNzaWduQVQoc3RydWN0IHJpb19pbmZvICpwLCBpbnQJQmFzZSwgY2FkZHJfdAl2aXJ0QWRkciwgaW50IG1vZGUpCiB7CiAJaW50CQliaXRzOwogCXN0cnVjdCBEcFJhbSAqY2FyZHAgPSAoc3RydWN0IERwUmFtICopdmlydEFkZHI7CkBAIC0xMjQsMjkgKzExMiwyNSBAQAogCS8qCiAJKiogUmV2aXNpb24gMDEgQVQgaG9zdCBjYXJkcyBkb24ndCBzdXBwb3J0IFdPUkQgb3BlcmF0aW9ucywKIAkqLwotCWlmICggUkJZVEUoY2FyZHAtPkRwUmV2aXNpb24pID09IDAxICkKKwlpZiAocmVhZGIoJmNhcmRwLT5EcFJldmlzaW9uKSA9PSAwMSkKIAkJYml0cyA9IEJZVEVfT1BFUkFUSU9OOwogCiAJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlR5cGUgPSBSSU9fQVQ7Ci0JcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNvcHkgPSBiY29weTsKKwlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ29weSA9IHJpb19jb3B5X3RvX2NhcmQ7CiAJCQkJCQkJCQkJCS8qIHNldCB0aGlzIGxhdGVyICovCiAJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlNsb3QgPSAtMTsKIAlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uTW9kZSA9IFNMT1dfTElOS1MgfCBTTE9XX0FUX0JVUyB8IGJpdHM7Ci0JV0JZVEUocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNvbnRyb2wsIAotCQkJQk9PVF9GUk9NX1JBTSB8IEVYVEVSTkFMX0JVU19PRkYgfCAKLQkJCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5Nb2RlIHwgCi0JCQlJTlRFUlJVUFRfRElTQUJMRSApOwotCVdCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5SZXNldEludCwweGZmKTsKLQlXQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ29udHJvbCwKLQkJCUJPT1RfRlJPTV9SQU0gfCBFWFRFUk5BTF9CVVNfT0ZGIHwgCi0JCQlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uTW9kZSB8Ci0JCQlJTlRFUlJVUFRfRElTQUJMRSApOwotCVdCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5SZXNldEludCwweGZmKTsKKwl3cml0ZWIoQk9PVF9GUk9NX1JBTSB8IEVYVEVSTkFMX0JVU19PRkYgfCBwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uTW9kZSB8IElOVEVSUlVQVF9ESVNBQkxFICwKKwkJJnAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5Db250cm9sKTsKKwl3cml0ZWIoMHhGRiwgJnAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5SZXNldEludCk7CisJd3JpdGViKEJPT1RfRlJPTV9SQU0gfCBFWFRFUk5BTF9CVVNfT0ZGIHwgcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLk1vZGUgfCBJTlRFUlJVUFRfRElTQUJMRSwKKwkJJnAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5Db250cm9sKTsKKwl3cml0ZWIoMHhGRiwgJnAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5SZXNldEludCk7CiAJcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZU51bSA9Ci0JCSgoUkJZVEUocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZVswXSkmMHhGRik8PDApfAotCQkoKFJCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5VbmlxdWVbMV0pJjB4RkYpPDw4KXwKLQkJKChSQllURShwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzJdKSYweEZGKTw8MTYpfAotCQkoKFJCWVRFKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5VbmlxdWVbM10pJjB4RkYpPDwyNCk7CisJCSgocmVhZGIoJnAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5VbmlxdWVbMF0pJjB4RkYpPDwwKXwKKwkJKChyZWFkYigmcC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlVuaXF1ZVsxXSkmMHhGRik8PDgpfAorCQkoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzJdKSYweEZGKTw8MTYpfAorCQkoKHJlYWRiKCZwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlWzNdKSYweEZGKTw8MjQpOwogCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBVbmlxdWVudW0gMHgleFxuIixwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uVW5pcXVlTnVtKTsKIAogCXAtPlJJT051bUhvc3RzKys7CkBAIC0xNTQsNyArMTM4LDcgQEAKIAlyZXR1cm4oMSk7CiB9CiAKLXN0YXRpYwl1Y2hhcgl2YWxbXSA9IHsKK3N0YXRpYwl1OAl2YWxbXSA9IHsKICNpZmRlZiBWRVJZX0xPTkdfVEVTVAogCSAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKIAkgIDB4YTUsIDB4ZmYsIDB4NWEsIDB4MDAsIDB4ZmYsIDB4YzksIDB4MzYsIApAQCAtMTY3LDEyICsxNTEsNyBAQAogKiogUkFNIHRlc3QgYSBib2FyZC4gCiAqKiBOb3RoaW5nIHRvbyBjb21wbGljYXRlZCwganVzdCBlbm91Z2ggdG8gY2hlY2sgaXQgb3V0LgogKi8KLWludAotUklPQm9hcmRUZXN0KHBhZGRyLCBjYWRkciwgdHlwZSwgc2xvdCkKLXBhZGRyX3QJcGFkZHI7Ci1jYWRkcl90CWNhZGRyOwotdWNoYXIJdHlwZTsKLWludAkJc2xvdDsKK2ludCBSSU9Cb2FyZFRlc3QodW5zaWduZWQgbG9uZyBwYWRkciwgY2FkZHJfdAljYWRkciwgdW5zaWduZWQgY2hhciB0eXBlLCBpbnQgc2xvdCkKIHsKIAlzdHJ1Y3QgRHBSYW0gKkRwUmFtID0gKHN0cnVjdCBEcFJhbSAqKWNhZGRyOwogCWNoYXIgKnJhbVs0XTsKQEAgLTE4MCw4ICsxNTksOCBAQAogCWludCAgb3AsIGJhbms7CiAJaW50ICBuYmFua3M7CiAKLQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogUmVzZXQgaG9zdCB0eXBlPSVkLCBEcFJhbT0weCV4LCBzbG90PSVkXG4iLAotCQkJdHlwZSwoaW50KURwUmFtLCBzbG90KTsKKwlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogUmVzZXQgaG9zdCB0eXBlPSVkLCBEcFJhbT0lcCwgc2xvdD0lZFxuIiwKKwkJCXR5cGUsIERwUmFtLCBzbG90KTsKIAogCVJJT0hvc3RSZXNldCh0eXBlLCBEcFJhbSwgc2xvdCk7CiAKQEAgLTIwOSwxMiArMTg4LDExIEBACiAKIAogCWlmIChuYmFua3MgPT0gMykgewotCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogTWVtb3J5OiAweCV4KDB4JXgpLCAweCV4KDB4JXgpLCAweCV4KDB4JXgpXG4iLAotCQkJCShpbnQpcmFtWzBdLCBzaXplWzBdLCAoaW50KXJhbVsxXSwgc2l6ZVsxXSwgKGludClyYW1bMl0sIHNpemVbMl0pOworCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogTWVtb3J5OiAlcCgweCV4KSwgJXAoMHgleCksICVwKDB4JXgpXG4iLAorCQkJCXJhbVswXSwgc2l6ZVswXSwgcmFtWzFdLCBzaXplWzFdLCByYW1bMl0sIHNpemVbMl0pOwogCX0gZWxzZSB7Ci0JCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiAweCV4KDB4JXgpLCAweCV4KDB4JXgpLCAweCV4KDB4JXgpLCAweCV4KDB4JXgpXG4iLAotCQkJKGludClyYW1bMF0sIHNpemVbMF0sIChpbnQpcmFtWzFdLCBzaXplWzFdLCAoaW50KXJhbVsyXSwgc2l6ZVsyXSwgKGludClyYW1bM10sIAotCQkJCQlzaXplWzNdKTsKKwkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6ICVwKDB4JXgpLCAlcCgweCV4KSwgJXAoMHgleCksICVwKDB4JXgpXG4iLAorCQkJCXJhbVswXSwgc2l6ZVswXSwgcmFtWzFdLCBzaXplWzFdLCByYW1bMl0sIHNpemVbMl0sIHJhbVszXSwgc2l6ZVszXSk7CiAJfQogCiAJLyoKQEAgLTIyNCw3ICsyMDIsNyBAQAogCSovCiAJZm9yIChvcD0wOyBvcDxURVNUX0VORDsgb3ArKykgewogCQlmb3IgKGJhbms9MDsgYmFuazxuYmFua3M7IGJhbmsrKykgewotCQkJaWYgKFJJT1NjcnViKG9wLCAoQllURSAqKXJhbVtiYW5rXSwgc2l6ZVtiYW5rXSkgPT0gUklPX0ZBSUwpIHsKKwkJCWlmIChSSU9TY3J1YihvcCwgKHU4ICopcmFtW2JhbmtdLCBzaXplW2JhbmtdKSA9PSBSSU9fRkFJTCkgewogCQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBSSU9TY3J1YiBiYW5kICVkLCBvcCAlZCBmYWlsZWRcbiIsIAogCQkJCQkJCWJhbmssIG9wKTsKIAkJCQlyZXR1cm4gUklPX0ZBSUw7CkBAIC0yMzMsNyArMjExLDcgQEAKIAl9CiAKIAlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJUZXN0IGNvbXBsZXRlZFxuIik7Ci0JcmV0dXJuIFJJT19TVUNDRVNTOworCXJldHVybiAwOwogfQogCiAKQEAgLTI0OCwxMyArMjI2LDEwIEBACiAqKiBDYWxsIHdpdGggb3Agbm90IHplcm8sIGFuZCB0aGUgUkFNIHdpbGwgYmUgcmVhZCBhbmQgY29tcGF0ZWQgd2l0aCB2YWxbb3AtMV0KICoqIHRvIGNoZWNrIHRoYXQgdGhlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgcGhhc2Ugd2FzIHJldGFpbmVkLgogKi8KLXN0YXRpYyBpbnQKLVJJT1NjcnViKG9wLCByYW0sIHNpemUpCi1pbnQJCW9wOwotQllURSAqCXJhbTsKLWludAkJc2l6ZTsgCisKK3N0YXRpYyBpbnQgUklPU2NydWIoaW50IG9wLCB1OCAqcmFtLCBpbnQgc2l6ZSkKIHsKLQlpbnQJCQkJb2ZmOworCWludCBvZmY7CiAJdW5zaWduZWQgY2hhcglvbGRieXRlOwogCXVuc2lnbmVkIGNoYXIJbmV3Ynl0ZTsKIAl1bnNpZ25lZCBjaGFyCWludmJ5dGU7CkBAIC0yNzksMTUgKzI1NCwxNSBAQAogCSovCiAJaWYgKG9wKSB7CiAJCWZvciAob2ZmPTA7IG9mZjxzaXplOyBvZmYrKykgewotCQkJaWYgKFJCWVRFKHJhbVtvZmZdKSAhPSBvbGRieXRlKSB7Ci0JCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IEJ5dGUgUHJlIENoZWNrIDE6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG9sZGJ5dGUsIFJCWVRFKHJhbVtvZmZdKSk7CisJCQlpZiAocmVhZGIocmFtICsgb2ZmKSAhPSBvbGRieXRlKSB7CisJCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IEJ5dGUgUHJlIENoZWNrIDE6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG9sZGJ5dGUsIHJlYWRiKHJhbSArIG9mZikpOwogCQkJCXJldHVybiBSSU9fRkFJTDsKIAkJCX0KIAkJfQogCQlmb3IgKG9mZj0wOyBvZmY8c2l6ZTsgb2ZmKz0yKSB7Ci0JCQlpZiAoKih1c2hvcnQgKikmcmFtW29mZl0gIT0gb2xkd29yZCkgewotCQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBXb3JkIFByZSBDaGVjazogV09SRCBhdCBvZmZzZXQgMHgleCBzaG91bGQgaGF2ZSBiZWVuPSV4LCB3YXM9JXhcbiIsb2ZmLG9sZHdvcmQsKih1c2hvcnQgKikmcmFtW29mZl0pOwotCQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBXb3JkIFByZSBDaGVjazogQllURSBhdCBvZmZzZXQgMHgleCBpcyAleCBCWVRFIGF0IG9mZnNldCAweCV4IGlzICV4XG4iLCBvZmYsIFJCWVRFKHJhbVtvZmZdKSwgb2ZmKzEsIFJCWVRFKHJhbVtvZmYrMV0pKTsKKwkJCWlmIChyZWFkdyhyYW0gKyBvZmYpICE9IG9sZHdvcmQpIHsKKwkJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogV29yZCBQcmUgQ2hlY2s6IFdPUkQgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLG9mZixvbGR3b3JkLCByZWFkdyhyYW0gKyBvZmYpKTsKKwkJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogV29yZCBQcmUgQ2hlY2s6IEJZVEUgYXQgb2Zmc2V0IDB4JXggaXMgJXggQllURSBhdCBvZmZzZXQgMHgleCBpcyAleFxuIiwgb2ZmLCByZWFkYihyYW0gKyBvZmYpLCBvZmYrMSwgcmVhZGIocmFtK29mZisxKSk7CiAJCQkJcmV0dXJuIFJJT19GQUlMOwogCQkJfQogCQl9CkBAIC0zMDEsMTMgKzI3NiwxMyBAQAogCSoqIHRoZSBCWVRFIHJlYWQvd3JpdGUgdGVzdC4KIAkqLwogCWZvciAob2ZmPTA7IG9mZjxzaXplOyBvZmYrKykgewotCQlpZiAob3AgJiYgKFJCWVRFKHJhbVtvZmZdKSAhPSBvbGRieXRlKSkgewotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IEJ5dGUgUHJlIENoZWNrIDI6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG9sZGJ5dGUsIFJCWVRFKHJhbVtvZmZdKSk7CisJCWlmIChvcCAmJiAocmVhZGIocmFtICsgb2ZmKSAhPSBvbGRieXRlKSkgeworCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IEJ5dGUgUHJlIENoZWNrIDI6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG9sZGJ5dGUsIHJlYWRiKHJhbSArIG9mZikpOwogCQkJcmV0dXJuIFJJT19GQUlMOwogCQl9Ci0JCVdCWVRFKHJhbVtvZmZdLGludmJ5dGUpOwotCQlpZiAoUkJZVEUocmFtW29mZl0pICE9IGludmJ5dGUpIHsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBCeXRlIEludiBDaGVjazogQllURSBhdCBvZmZzZXQgMHgleCBzaG91bGQgaGF2ZSBiZWVuPSV4LCB3YXM9JXhcbiIsIG9mZiwgaW52Ynl0ZSwgUkJZVEUocmFtW29mZl0pKTsKKwkJd3JpdGViKGludmJ5dGUsIHJhbSArIG9mZik7CisJCWlmIChyZWFkYihyYW0gKyBvZmYpICE9IGludmJ5dGUpIHsKKwkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBCeXRlIEludiBDaGVjazogQllURSBhdCBvZmZzZXQgMHgleCBzaG91bGQgaGF2ZSBiZWVuPSV4LCB3YXM9JXhcbiIsIG9mZiwgaW52Ynl0ZSwgcmVhZGIocmFtICsgb2ZmKSk7CiAJCQlyZXR1cm4gUklPX0ZBSUw7CiAJCX0KIAl9CkBAIC0zMjAsMTYgKzI5NSwxNiBAQAogCSoqIFRoaXMgaXMgdGhlIFdPUkQgb3BlcmF0aW9uIHRlc3QuCiAJKi8KIAlmb3IgKG9mZj0wOyBvZmY8c2l6ZTsgb2ZmKz0yKSB7Ci0JCWlmICgqKHVzaG9ydCAqKSZyYW1bb2ZmXSAhPSBpbnZ3b3JkKSB7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogV29yZCBJbnYgQ2hlY2s6IFdPUkQgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIGludndvcmQsICoodXNob3J0ICopJnJhbVtvZmZdKTsKLQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IFdvcmQgSW52IENoZWNrOiBCWVRFIGF0IG9mZnNldCAweCV4IGlzICV4IEJZVEUgYXQgb2Zmc2V0IDB4JXggaXMgJXhcbiIsIG9mZiwgUkJZVEUocmFtW29mZl0pLCBvZmYrMSwgUkJZVEUocmFtW29mZisxXSkpOworCQlpZiAocmVhZHcocmFtICsgb2ZmKSAhPSBpbnZ3b3JkKSB7CisJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogV29yZCBJbnYgQ2hlY2s6IFdPUkQgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIGludndvcmQsIHJlYWR3KHJhbSArIG9mZikpOworCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IFdvcmQgSW52IENoZWNrOiBCWVRFIGF0IG9mZnNldCAweCV4IGlzICV4IEJZVEUgYXQgb2Zmc2V0IDB4JXggaXMgJXhcbiIsIG9mZiwgcmVhZGIocmFtICsgb2ZmKSwgb2ZmKzEsIHJlYWRiKHJhbStvZmYrMSkpOwogCQkJcmV0dXJuIFJJT19GQUlMOwogCQl9CiAKLQkJKih1c2hvcnQgKikmcmFtW29mZl0gPSBuZXd3b3JkOwotCQlpZiAoICoodXNob3J0ICopJnJhbVtvZmZdICE9IG5ld3dvcmQgKSB7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogUG9zdCBXb3JkIENoZWNrIDE6IFdPUkQgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG5ld3dvcmQsICoodXNob3J0ICopJnJhbVtvZmZdKTsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBQb3N0IFdvcmQgQ2hlY2sgMTogQllURSBhdCBvZmZzZXQgMHgleCBpcyAleCBCWVRFIGF0IG9mZnNldCAweCV4IGlzICV4XG4iLCBvZmYsIFJCWVRFKHJhbVtvZmZdKSwgb2ZmKzEsIFJCWVRFKHJhbVtvZmYrMV0pKTsKKwkJd3JpdGV3KG5ld3dvcmQsIHJhbSArIG9mZik7CisJCWlmICggcmVhZHcocmFtICsgb2ZmKSAhPSBuZXd3b3JkICkgeworCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IFBvc3QgV29yZCBDaGVjayAxOiBXT1JEIGF0IG9mZnNldCAweCV4IHNob3VsZCBoYXZlIGJlZW49JXgsIHdhcz0leFxuIiwgb2ZmLCBuZXd3b3JkLCByZWFkdyhyYW0gKyBvZmYpKTsKKwkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBQb3N0IFdvcmQgQ2hlY2sgMTogQllURSBhdCBvZmZzZXQgMHgleCBpcyAleCBCWVRFIGF0IG9mZnNldCAweCV4IGlzICV4XG4iLCBvZmYsIHJlYWRiKHJhbSArIG9mZiksIG9mZisxLCByZWFkYihyYW0gKyBvZmYgKyAxKSk7CiAJCQlyZXR1cm4gUklPX0ZBSUw7CiAJCX0KIAl9CkBAIC0zNDAsMTYgKzMxNSwxNiBAQAogCSoqIHJlcXVpcmVkIHRlc3QgZGF0YS4KIAkqLwogCWZvciAob2ZmPTA7IG9mZjxzaXplOyBvZmYrKykgewotCQlpZiAoUkJZVEUocmFtW29mZl0pICE9IG5ld2J5dGUpIHsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBQb3N0IEJ5dGUgQ2hlY2s6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG5ld2J5dGUsIFJCWVRFKHJhbVtvZmZdKSk7CisJCWlmIChyZWFkYihyYW0gKyBvZmYpICE9IG5ld2J5dGUpIHsKKwkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBQb3N0IEJ5dGUgQ2hlY2s6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG5ld2J5dGUsIHJlYWRiKHJhbSArIG9mZikpOwogCQkJcmV0dXJuIFJJT19GQUlMOwogCQl9CiAJfQogCiAJZm9yIChvZmY9MDsgb2ZmPHNpemU7IG9mZis9MikgewotCQlpZiAoICoodXNob3J0ICopJnJhbVtvZmZdICE9IG5ld3dvcmQgKSB7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogUG9zdCBXb3JkIENoZWNrIDI6IFdPUkQgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG5ld3dvcmQsICoodXNob3J0ICopJnJhbVtvZmZdKTsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBQb3N0IFdvcmQgQ2hlY2sgMjogQllURSBhdCBvZmZzZXQgMHgleCBpcyAleCBCWVRFIGF0IG9mZnNldCAweCV4IGlzICV4XG4iLCBvZmYsIFJCWVRFKHJhbVtvZmZdKSwgb2ZmKzEsIFJCWVRFKHJhbVtvZmYrMV0pKTsKKwkJaWYgKHJlYWR3KHJhbSArIG9mZikgIT0gbmV3d29yZCApIHsKKwkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBQb3N0IFdvcmQgQ2hlY2sgMjogV09SRCBhdCBvZmZzZXQgMHgleCBzaG91bGQgaGF2ZSBiZWVuPSV4LCB3YXM9JXhcbiIsIG9mZiwgbmV3d29yZCwgcmVhZHcocmFtICsgb2ZmKSk7CisJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogUG9zdCBXb3JkIENoZWNrIDI6IEJZVEUgYXQgb2Zmc2V0IDB4JXggaXMgJXggQllURSBhdCBvZmZzZXQgMHgleCBpcyAleFxuIiwgb2ZmLCByZWFkYihyYW0gKyBvZmYpLCBvZmYrMSwgcmVhZGIocmFtICsgb2ZmICsgMSkpOwogCQkJcmV0dXJuIFJJT19GQUlMOwogCQl9CiAJfQpAQCAtMzYwLDQxICszMzUsMzcgQEAKIAlzd2Fwd29yZCA9IGludmJ5dGUgfCAobmV3Ynl0ZSA8PCA4KTsKIAogCWZvciAob2ZmPTA7IG9mZjxzaXplOyBvZmYrPTIpIHsKLQkJV0JZVEUocmFtW29mZl0saW52Ynl0ZSk7Ci0JCVdCWVRFKHJhbVtvZmYrMV0sbmV3Ynl0ZSk7CisJCXdyaXRlYihpbnZieXRlLCAmcmFtW29mZl0pOworCQl3cml0ZWIobmV3Ynl0ZSwgJnJhbVtvZmYrMV0pOwogCX0KIAogCWZvciAoIG9mZj0wOyBvZmY8c2l6ZTsgb2ZmKz0yICkgewotCQlpZiAoKih1c2hvcnQgKikmcmFtW29mZl0gIT0gc3dhcHdvcmQpIHsKLQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBTd2FwV29yZCBDaGVjayAxOiBXT1JEIGF0IG9mZnNldCAweCV4IHNob3VsZCBoYXZlIGJlZW49JXgsIHdhcz0leFxuIiwgb2ZmLCBzd2Fwd29yZCwgKigodXNob3J0ICopJnJhbVtvZmZdKSk7Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogU3dhcFdvcmQgQ2hlY2sgMTogQllURSBhdCBvZmZzZXQgMHgleCBpcyAleCBCWVRFIGF0IG9mZnNldCAweCV4IGlzICV4XG4iLCBvZmYsIFJCWVRFKHJhbVtvZmZdKSwgb2ZmKzEsIFJCWVRFKHJhbVtvZmYrMV0pKTsKKwkJaWYgKHJlYWR3KHJhbSArIG9mZikgIT0gc3dhcHdvcmQpIHsKKwkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBTd2FwV29yZCBDaGVjayAxOiBXT1JEIGF0IG9mZnNldCAweCV4IHNob3VsZCBoYXZlIGJlZW49JXgsIHdhcz0leFxuIiwgb2ZmLCBzd2Fwd29yZCwgcmVhZHcocmFtICsgb2ZmKSk7CisJCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICJSSU8taW5pdDogU3dhcFdvcmQgQ2hlY2sgMTogQllURSBhdCBvZmZzZXQgMHgleCBpcyAleCBCWVRFIGF0IG9mZnNldCAweCV4IGlzICV4XG4iLCBvZmYsIHJlYWRiKHJhbSArIG9mZiksIG9mZisxLCByZWFkYihyYW0gKyBvZmYgKyAxKSk7CiAJCQlyZXR1cm4gUklPX0ZBSUw7CiAJCX0KLQkJKigodXNob3J0ICopJnJhbVtvZmZdKSA9IH5zd2Fwd29yZDsKKwkJd3JpdGV3KH5zd2Fwd29yZCwgcmFtICsgb2ZmKTsKIAl9CiAKIAlmb3IgKG9mZj0wOyBvZmY8c2l6ZTsgb2ZmKz0yKSB7Ci0JCWlmIChSQllURShyYW1bb2ZmXSkgIT0gbmV3Ynl0ZSkgewotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IFN3YXBXb3JkIENoZWNrIDI6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYsIG5ld2J5dGUsIFJCWVRFKHJhbVtvZmZdKSk7CisJCWlmIChyZWFkYihyYW0gKyBvZmYpICE9IG5ld2J5dGUpIHsKKwkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBTd2FwV29yZCBDaGVjayAyOiBCWVRFIGF0IG9mZnNldCAweCV4IHNob3VsZCBoYXZlIGJlZW49JXgsIHdhcz0leFxuIiwgb2ZmLCBuZXdieXRlLCByZWFkYihyYW0gKyBvZmYpKTsKIAkJCXJldHVybiBSSU9fRkFJTDsKIAkJfQotCQlpZiAoUkJZVEUocmFtW29mZisxXSkgIT0gaW52Ynl0ZSkgewotCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IFN3YXBXb3JkIENoZWNrIDI6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYrMSwgaW52Ynl0ZSwgUkJZVEUocmFtW29mZisxXSkpOworCQlpZiAocmVhZGIocmFtICsgb2ZmICsgMSkgIT0gaW52Ynl0ZSkgeworCQkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiUklPLWluaXQ6IFN3YXBXb3JkIENoZWNrIDI6IEJZVEUgYXQgb2Zmc2V0IDB4JXggc2hvdWxkIGhhdmUgYmVlbj0leCwgd2FzPSV4XG4iLCBvZmYrMSwgaW52Ynl0ZSwgcmVhZGIocmFtICsgb2ZmICsgMSkpOwogCQkJcmV0dXJuIFJJT19GQUlMOwogCQl9Ci0JCSooKHVzaG9ydCAqKSZyYW1bb2ZmXSkgPSBuZXd3b3JkOworCQl3cml0ZXcobmV3d29yZCwgcmFtICsgb2ZmKTsKIAl9Ci0JcmV0dXJuIFJJT19TVUNDRVNTOworCXJldHVybiAwOwogfQogCiAKLWludAotUklPRGVmYXVsdE5hbWUocCwgSG9zdFAsIFVuaXRJZCkKLXN0cnVjdCByaW9faW5mbyAqCXA7Ci1zdHJ1Y3QgSG9zdCAqCUhvc3RQOwotdWludAkJCVVuaXRJZDsKK2ludCBSSU9EZWZhdWx0TmFtZShzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgdW5zaWduZWQgaW50CVVuaXRJZCkKIHsKLQliY29weSgiVU5LTk9XTiBSVEEgWC1YWCIsSG9zdFAtPk1hcHBpbmdbVW5pdElkXS5OYW1lLDE3KTsKKwltZW1jcHkoSG9zdFAtPk1hcHBpbmdbVW5pdElkXS5OYW1lLCAiVU5LTk9XTiBSVEEgWC1YWCIsIDE3KTsKIAlIb3N0UC0+TWFwcGluZ1tVbml0SWRdLk5hbWVbMTJdPScxJysoSG9zdFAtcC0+UklPSG9zdHMpOwogCWlmICgoVW5pdElkKzEpID4gOSkgewogCQlIb3N0UC0+TWFwcGluZ1tVbml0SWRdLk5hbWVbMTRdPScwJysoKFVuaXRJZCsxKS8xMCk7CkBAIC00MTIsOCArMzgzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByaW9WZXJzaW9uCXN0VmVyc2lvbjsKIAotc3RydWN0IHJpb1ZlcnNpb24gKgotUklPVmVyc2lkKHZvaWQpCitzdHJ1Y3QgcmlvVmVyc2lvbiAqUklPVmVyc2lkKHZvaWQpCiB7CiAgICAgc3RybGNweShzdFZlcnNpb24udmVyc2lvbiwgIlJJTyBkcml2ZXIgZm9yIGxpbnV4IFYxLjAiLAogCSAgICBzaXplb2Yoc3RWZXJzaW9uLnZlcnNpb24pKTsKQEAgLTQyMyw0MCArMzkzLDMxIEBACiAgICAgcmV0dXJuICZzdFZlcnNpb247CiB9CiAKLXZvaWQKLVJJT0hvc3RSZXNldChUeXBlLCBEcFJhbVAsIFNsb3QpCi11aW50IFR5cGU7Ci12b2xhdGlsZSBzdHJ1Y3QgRHBSYW0gKkRwUmFtUDsKLXVpbnQgU2xvdDsgCit2b2lkIFJJT0hvc3RSZXNldCh1bnNpZ25lZCBpbnQgVHlwZSwgc3RydWN0IERwUmFtICpEcFJhbVAsIHVuc2lnbmVkIGludCBTbG90KQogewogCS8qCiAJKiogUmVzZXQgdGhlIFRwdQogCSovCiAJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAgIlJJT0hvc3RSZXNldDogdHlwZSAweCV4IiwgVHlwZSk7CiAJc3dpdGNoICggVHlwZSApIHsKLQkJY2FzZSBSSU9fQVQ6Ci0JCQlyaW9fZHByaW50ayAoUklPX0RFQlVHX0lOSVQsICIgKFJJT19BVClcbiIpOwotCQkJV0JZVEUoRHBSYW1QLT5EcENvbnRyb2wsICBCT09UX0ZST01fUkFNIHwgRVhURVJOQUxfQlVTX09GRiB8IAotCQkJCQkgIElOVEVSUlVQVF9ESVNBQkxFIHwgQllURV9PUEVSQVRJT04gfAotCQkJCQkgIFNMT1dfTElOS1MgfCBTTE9XX0FUX0JVUyk7Ci0JCQlXQllURShEcFJhbVAtPkRwUmVzZXRUcHUsIDB4RkYpOwotCQkJdWRlbGF5KDMpOwotCisJY2FzZSBSSU9fQVQ6CisJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIiAoUklPX0FUKVxuIik7CisJCXdyaXRlYihCT09UX0ZST01fUkFNIHwgRVhURVJOQUxfQlVTX09GRiB8IElOVEVSUlVQVF9ESVNBQkxFIHwgQllURV9PUEVSQVRJT04gfAorCQkJU0xPV19MSU5LUyB8IFNMT1dfQVRfQlVTLCAmRHBSYW1QLT5EcENvbnRyb2wpOworCQl3cml0ZWIoMHhGRiwgJkRwUmFtUC0+RHBSZXNldFRwdSk7CisJCXVkZWxheSgzKTsKIAkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgICJSSU9Ib3N0UmVzZXQ6IERvbid0IGtub3cgaWYgaXQgd29ya2VkLiBUcnkgcmVzZXQgYWdhaW5cbiIpOwotCQkJV0JZVEUoRHBSYW1QLT5EcENvbnRyb2wsICBCT09UX0ZST01fUkFNIHwgRVhURVJOQUxfQlVTX09GRiB8Ci0JCQkJCSAgSU5URVJSVVBUX0RJU0FCTEUgfCBCWVRFX09QRVJBVElPTiB8Ci0JCQkJCSAgU0xPV19MSU5LUyB8IFNMT1dfQVRfQlVTKTsKLQkJCVdCWVRFKERwUmFtUC0+RHBSZXNldFRwdSwgMHhGRik7Ci0JCQl1ZGVsYXkoMyk7Ci0JCQlicmVhazsKKwkJd3JpdGViKEJPT1RfRlJPTV9SQU0gfCBFWFRFUk5BTF9CVVNfT0ZGIHwgSU5URVJSVVBUX0RJU0FCTEUgfAorCQkJQllURV9PUEVSQVRJT04gfCBTTE9XX0xJTktTIHwgU0xPV19BVF9CVVMsICZEcFJhbVAtPkRwQ29udHJvbCk7CisJCXdyaXRlYigweEZGLCAmRHBSYW1QLT5EcFJlc2V0VHB1KTsKKwkJdWRlbGF5KDMpOworCQlicmVhazsKIAljYXNlIFJJT19QQ0k6CiAJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIiAoUklPX1BDSSlcbiIpOwotCQlEcFJhbVAtPkRwQ29udHJvbCAgPSBSSU9fUENJX0JPT1RfRlJPTV9SQU07Ci0JCURwUmFtUC0+RHBSZXNldEludCA9IDB4RkY7Ci0JCURwUmFtUC0+RHBSZXNldFRwdSA9IDB4RkY7CisJCXdyaXRlYihSSU9fUENJX0JPT1RfRlJPTV9SQU0sICZEcFJhbVAtPkRwQ29udHJvbCk7CisJCXdyaXRlYigweEZGLCAmRHBSYW1QLT5EcFJlc2V0SW50KTsKKwkJd3JpdGViKDB4RkYsICZEcFJhbVAtPkRwUmVzZXRUcHUpOwogCQl1ZGVsYXkoMTAwKTsKLQkJLyogZm9yIChpPTA7IGk8NjAwMDsgaSsrKTsgICovCi0JCS8qIHN1c3BlbmQoIDMgKTsgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmlvX2RwcmludGsgKFJJT19ERUJVR19JTklULCAiIChVTktOT1dOKVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2ludHIuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCmluZGV4IDM0ZDg3ODcuLjk3ZjBmYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jCkBAIC01NCwxNSArNTQsMTIgQEAKIAogI2luY2x1ZGUgImxpbnV4X2NvbXBhdC5oIgogI2luY2x1ZGUgInJpb19saW51eC5oIgotI2luY2x1ZGUgInR5cGRlZi5oIgogI2luY2x1ZGUgInBrdC5oIgogI2luY2x1ZGUgImRhZW1vbi5oIgogI2luY2x1ZGUgInJpby5oIgogI2luY2x1ZGUgInJpb3NwYWNlLmgiCi0jaW5jbHVkZSAidG9wLmgiCiAjaW5jbHVkZSAiY21kcGt0LmgiCiAjaW5jbHVkZSAibWFwLmgiCi0jaW5jbHVkZSAicmlvdHlwZXMuaCIKICNpbmNsdWRlICJydXAuaCIKICNpbmNsdWRlICJwb3J0LmgiCiAjaW5jbHVkZSAicmlvZHJ2ci5oIgpAQCAtNzUsMTIgKzcyLDEwIEBACiAjaW5jbHVkZSAidW5peHJ1cC5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImVycm9yLmgiCiAjaW5jbHVkZSAicGhiLmgiCiAjaW5jbHVkZSAibGluay5oIgogI2luY2x1ZGUgImNtZGJsay5oIgogI2luY2x1ZGUgInJvdXRlLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgImNpcnJ1cy5oIgogI2luY2x1ZGUgInJpb2lvY3RsLmgiCiAKQEAgLTEwMSw4ICs5Niw3IEBACiAKICNkZWZpbmUJSU5DUiggUCwgSSApCSgoUCkgPSAoKChQKSsoSSkpICYgcC0+UklPQnVmZmVyTWFzaykpCiAvKiBFbmFibGUgYW5kIHN0YXJ0IHRoZSB0cmFuc21pc3Npb24gb2YgcGFja2V0cyAqLwotdm9pZCBSSU9UeEVuYWJsZShlbikKLWNoYXIgKmVuOwordm9pZCBSSU9UeEVuYWJsZShjaGFyICplbikKIHsKIAlzdHJ1Y3QgUG9ydCAqUG9ydFA7CiAJc3RydWN0IHJpb19pbmZvICpwOwpAQCAtMTg2LDEwICsxODAsOCBAQAogc3RhdGljIGludCBSdXBJbnRyOwogc3RhdGljIGludCBSeEludHI7CiBzdGF0aWMgaW50IFR4SW50cjsKLXZvaWQgUklPU2VydmljZUhvc3QocCwgSG9zdFAsIEZyb20pCi1zdHJ1Y3QgcmlvX2luZm8gKnA7Ci1zdHJ1Y3QgSG9zdCAqSG9zdFA7Ci1pbnQgRnJvbTsKKwordm9pZCBSSU9TZXJ2aWNlSG9zdChzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgaW50IEZyb20pCiB7CiAJcmlvX3NwaW5fbG9jaygmSG9zdFAtPkhvc3RMb2NrKTsKIAlpZiAoKEhvc3RQLT5GbGFncyAmIFJVTl9TVEFURSkgIT0gUkNfUlVOTklORykgewpAQCAtMjAxLDIyICsxOTMsMjIgQEAKIAl9CiAJcmlvX3NwaW5fdW5sb2NrKCZIb3N0UC0+SG9zdExvY2spOwogCi0JaWYgKFJXT1JEKEhvc3RQLT5QYXJtTWFwUC0+cnVwX2ludHIpKSB7Ci0JCVdXT1JEKEhvc3RQLT5QYXJtTWFwUC0+cnVwX2ludHIsIDApOworCWlmIChyZWFkdygmSG9zdFAtPlBhcm1NYXBQLT5ydXBfaW50cikpIHsKKwkJd3JpdGV3KDAsICZIb3N0UC0+UGFybU1hcFAtPnJ1cF9pbnRyKTsKIAkJcC0+UklPUnVwQ291bnQrKzsKIAkJUnVwSW50cisrOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgInJpbzogUlVQIGludGVycnVwdCBvbiBob3N0ICVkXG4iLCBIb3N0UCAtIHAtPlJJT0hvc3RzKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJyaW86IFJVUCBpbnRlcnJ1cHQgb24gaG9zdCAlWmRcbiIsIEhvc3RQIC0gcC0+UklPSG9zdHMpOwogCQlSSU9Qb2xsSG9zdENvbW1hbmRzKHAsIEhvc3RQKTsKIAl9CiAKLQlpZiAoUldPUkQoSG9zdFAtPlBhcm1NYXBQLT5yeF9pbnRyKSkgeworCWlmIChyZWFkdygmSG9zdFAtPlBhcm1NYXBQLT5yeF9pbnRyKSkgewogCQlpbnQgcG9ydDsKIAotCQlXV09SRChIb3N0UC0+UGFybU1hcFAtPnJ4X2ludHIsIDApOworCQl3cml0ZXcoMCwgJkhvc3RQLT5QYXJtTWFwUC0+cnhfaW50cik7CiAJCXAtPlJJT1J4Q291bnQrKzsKIAkJUnhJbnRyKys7CiAKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJyaW86IFJYIGludGVycnVwdCBvbiBob3N0ICVkXG4iLCBIb3N0UCAtIHAtPlJJT0hvc3RzKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJyaW86IFJYIGludGVycnVwdCBvbiBob3N0ICVaZFxuIiwgSG9zdFAgLSBwLT5SSU9Ib3N0cyk7CiAJCS8qCiAJCSAqKiBMb29wIHRocm91Z2ggZXZlcnkgcG9ydC4gSWYgdGhlIHBvcnQgaXMgbWFwcGVkIGludG8KIAkJICoqIHRoZSBzeXN0ZW0gKCBpLmUuIGhhcyAvZGV2L3R0eVhYWFggYXNzb2NpYXRlZCApIHRoZW4gaXQgaXMKQEAgLTI3NywyNiArMjY5LDI2IEBACiAJCQkgKiogaXQncyBoYW5kc2hha2UgYml0IGlzIHNldCwgdGhlbiB3ZSBtdXN0IGNsZWFyIHRoZSBoYW5kc2hha2UsCiAJCQkgKiogc28gdGhhdCB0aGF0IGRvd25zdHJlYW0gUlRBIGlzIHJlLWVuYWJsZWQuCiAJCQkgKi8KLQkJCWlmICghY2FuX3JlbW92ZV9yZWNlaXZlKCZQYWNrZXRQLCBQb3J0UCkgJiYgKFJXT1JEKFBvcnRQLT5QaGJQLT5oYW5kc2hha2UpID09IFBIQl9IQU5EU0hBS0VfU0VUKSkgeworCQkJaWYgKCFjYW5fcmVtb3ZlX3JlY2VpdmUoJlBhY2tldFAsIFBvcnRQKSAmJiAocmVhZHcoJlBvcnRQLT5QaGJQLT5oYW5kc2hha2UpID09IFBIQl9IQU5EU0hBS0VfU0VUKSkgewogCQkJCS8qCiAJCQkJICoqIE1BR0lDISAoIEJhc2ljYWxseSwgaGFuZHNoYWtlIHRoZSBSWCBidWZmZXIsIHNvIHRoYXQKIAkJCQkgKiogdGhlIFJUQXMgdXBzdHJlYW0gY2FuIGJlIHJlLWVuYWJsZWQuICkKIAkJCQkgKi8KIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlNldCBSWCBoYW5kc2hha2UgYml0XG4iKTsKLQkJCQlXV09SRChQb3J0UC0+UGhiUC0+aGFuZHNoYWtlLCBQSEJfSEFORFNIQUtFX1NFVCB8IFBIQl9IQU5EU0hBS0VfUkVTRVQpOworCQkJCXdyaXRldyhQSEJfSEFORFNIQUtFX1NFVCB8IFBIQl9IQU5EU0hBS0VfUkVTRVQsICZQb3J0UC0+UGhiUC0+aGFuZHNoYWtlKTsKIAkJCX0KIAkJCXJpb19zcGluX3VubG9jaygmUG9ydFAtPnBvcnRTZW0pOwogCQl9CiAJfQogCi0JaWYgKFJXT1JEKEhvc3RQLT5QYXJtTWFwUC0+dHhfaW50cikpIHsKKwlpZiAocmVhZHcoJkhvc3RQLT5QYXJtTWFwUC0+dHhfaW50cikpIHsKIAkJaW50IHBvcnQ7CiAKLQkJV1dPUkQoSG9zdFAtPlBhcm1NYXBQLT50eF9pbnRyLCAwKTsKKwkJd3JpdGV3KDAsICZIb3N0UC0+UGFybU1hcFAtPnR4X2ludHIpOwogCiAJCXAtPlJJT1R4Q291bnQrKzsKIAkJVHhJbnRyKys7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAicmlvOiBUWCBpbnRlcnJ1cHQgb24gaG9zdCAlZFxuIiwgSG9zdFAgLSBwLT5SSU9Ib3N0cyk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAicmlvOiBUWCBpbnRlcnJ1cHQgb24gaG9zdCAlWmRcbiIsIEhvc3RQIC0gcC0+UklPSG9zdHMpOwogCiAJCS8qCiAJCSAqKiBMb29wIHRocm91Z2ggZXZlcnkgcG9ydC4KQEAgLTM5OSw3ICszOTEsNiBAQAogCQkJLyogRm9yIG5vdyBkb24ndCBoYW5kbGUgUlRBIHJlYm9vdHMuIC0tIFJFVy4KIAkJCSAgIFJlZW5hYmxlZC4gT3RoZXJ3aXNlIFJUQSByZWJvb3RzIGRpZG4ndCB3b3JrLiBEdWguIC0tIFJFVyAqLwogCQkJaWYgKFBvcnRQLT5NYWdpY0ZsYWdzKSB7Ci0jaWYgMQogCQkJCWlmIChQb3J0UC0+TWFnaWNGbGFncyAmIE1BR0lDX1JFQk9PVCkgewogCQkJCQkvKgogCQkJCQkgKiogd2VsbCwgdGhlIFJUQSBoYXMgYmVlbiByZWJvb3RlZCwgYW5kIHRoZXJlIGlzIHJvb20KQEAgLTQxNiwxMyArNDA3LDEyIEBACiAJCQkJCVBvcnRQLT5JblVzZSA9IE5PVF9JTlVTRTsKIAogCQkJCQlyaW9fc3Bpbl91bmxvY2soJlBvcnRQLT5wb3J0U2VtKTsKLQkJCQkJaWYgKFJJT1BhcmFtKFBvcnRQLCBPUEVOLCAoKFBvcnRQLT5Db3IyQ29weSAmIChDT1IyX1JUU0ZMT1cgfCBDT1IyX0NUU0ZMT1cpKSA9PSAoQ09SMl9SVFNGTE9XIHwgQ09SMl9DVFNGTE9XKSkgPyBUUlVFIDogRkFMU0UsIERPTlRfU0xFRVApID09IFJJT19GQUlMKSB7CisJCQkJCWlmIChSSU9QYXJhbShQb3J0UCwgT1BFTiwgKChQb3J0UC0+Q29yMkNvcHkgJiAoQ09SMl9SVFNGTE9XIHwgQ09SMl9DVFNGTE9XKSkgPT0gKENPUjJfUlRTRkxPVyB8IENPUjJfQ1RTRkxPVykpID8gMSA6IDAsIERPTlRfU0xFRVApID09IFJJT19GQUlMKSB7CiAJCQkJCQljb250aW51ZTsJLyogd2l0aCBuZXh0IHBvcnQgKi8KIAkJCQkJfQogCQkJCQlyaW9fc3Bpbl9sb2NrKCZQb3J0UC0+cG9ydFNlbSk7CiAJCQkJCVBvcnRQLT5NYWdpY0ZsYWdzICY9IH5NQUdJQ19SRUJPT1Q7CiAJCQkJfQotI2VuZGlmCiAKIAkJCQkvKgogCQkJCSAqKiBBcyBtZW50aW9uZWQgYWJvdmUsIHRoaXMgaXMgYSB0YWNreSBoYWNrIHRvIGNvcGUKQEAgLTQ0NSw5ICs0MzUsOSBAQAogCQkJCQkgKi8KIAkJCQkJUGt0Q21kUCA9IChzdHJ1Y3QgUGt0Q21kICopICZQYWNrZXRQLT5kYXRhWzBdOwogCi0JCQkJCVdCWVRFKFBrdENtZFAtPkNvbW1hbmQsIFdGTFVTSCk7CisJCQkJCXdyaXRlYihXRkxVU0gsICZQa3RDbWRQLT5Db21tYW5kKTsKIAotCQkJCQlwID0gUG9ydFAtPkhvc3RQb3J0ICUgKHVzaG9ydCkgUE9SVFNfUEVSX1JUQTsKKwkJCQkJcCA9IFBvcnRQLT5Ib3N0UG9ydCAlICh1MTYpIFBPUlRTX1BFUl9SVEE7CiAKIAkJCQkJLyoKIAkJCQkJICoqIElmIHNlY29uZCBibG9jayBvZiBwb3J0cyBmb3IgMTYgcG9ydCBSVEEsIGFkZCA4CkBAIC00NTYsMjcgKzQ0NiwyNyBAQAogCQkJCQlpZiAoUG9ydFAtPlNlY29uZEJsb2NrKQogCQkJCQkJcCArPSBQT1JUU19QRVJfUlRBOwogCi0JCQkJCVdCWVRFKFBrdENtZFAtPlBoYk51bSwgcCk7CisJCQkJCXdyaXRlYihwLCAmUGt0Q21kUC0+UGhiTnVtKTsKIAogCQkJCQkvKgogCQkJCQkgKiogdG8gbWFrZSBkZWJ1Z2dlcnkgZWFzaWVyCiAJCQkJCSAqLwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzJdLCAnVycpOwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzNdLCAnRicpOwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzRdLCAnTCcpOwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzVdLCAnVScpOwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzZdLCAnUycpOwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzddLCAnSCcpOwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzhdLCAnICcpOwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzldLCAnMCcgKyBQb3J0UC0+V2ZsdXNoRmxhZyk7Ci0JCQkJCVdCWVRFKFBhY2tldFAtPmRhdGFbMTBdLCAnICcpOwotCQkJCQlXQllURShQYWNrZXRQLT5kYXRhWzExXSwgJyAnKTsKLQkJCQkJV0JZVEUoUGFja2V0UC0+ZGF0YVsxMl0sICdcMCcpOworCQkJCQl3cml0ZWIoJ1cnLCAmUGFja2V0UC0+ZGF0YVsyXSk7CisJCQkJCXdyaXRlYignRicsICZQYWNrZXRQLT5kYXRhWzNdKTsKKwkJCQkJd3JpdGViKCdMJywgJlBhY2tldFAtPmRhdGFbNF0pOworCQkJCQl3cml0ZWIoJ1UnLCAmUGFja2V0UC0+ZGF0YVs1XSk7CisJCQkJCXdyaXRlYignUycsICZQYWNrZXRQLT5kYXRhWzZdKTsKKwkJCQkJd3JpdGViKCdIJywgJlBhY2tldFAtPmRhdGFbN10pOworCQkJCQl3cml0ZWIoJyAnLCAmUGFja2V0UC0+ZGF0YVs4XSk7CisJCQkJCXdyaXRlYignMCcgKyBQb3J0UC0+V2ZsdXNoRmxhZywgJlBhY2tldFAtPmRhdGFbOV0pOworCQkJCQl3cml0ZWIoJyAnLCAmUGFja2V0UC0+ZGF0YVsxMF0pOworCQkJCQl3cml0ZWIoJyAnLCAmUGFja2V0UC0+ZGF0YVsxMV0pOworCQkJCQl3cml0ZWIoJ1wwJywgJlBhY2tldFAtPmRhdGFbMTJdKTsKIAogCQkJCQkvKgogCQkJCQkgKiogaXRzIHR3byBieXRlcyBsb25nIQogCQkJCQkgKi8KLQkJCQkJV0JZVEUoUGFja2V0UC0+bGVuLCBQS1RfQ01EX0JJVCB8IDIpOworCQkJCQl3cml0ZWIoUEtUX0NNRF9CSVQgfCAyLCAmUGFja2V0UC0+bGVuKTsKIAogCQkJCQkvKgogCQkJCQkgKiogcXVldWUgaXQhCkBAIC01MjksMTkgKzUxOSwxNSBAQAogfQogCiAvKgotKiogUm91dGluZSBmb3IgaGFuZGxpbmcgcmVjZWl2ZWQgZGF0YSBmb3IgY2xpc3QgZHJpdmVycy4KLSoqIE5COiBDYWxsZWQgd2l0aCB0aGUgdHR5IGxvY2tlZC4gVGhlIHNwbCBmcm9tIHRoZSBsb2NrYiggKSBpcyBwYXNzZWQuCi0qKiB3ZSByZXR1cm4gdGhlIHR0eVNwbCBsZXZlbCB0aGF0IHdlIHJlLWxvY2tlZCBhdC4KKyoqIFJvdXRpbmUgZm9yIGhhbmRsaW5nIHJlY2VpdmVkIGRhdGEgZm9yIHR0eSBkcml2ZXJzCiAqLwotc3RhdGljIHZvaWQgUklPUmVjZWl2ZShwLCBQb3J0UCkKLXN0cnVjdCByaW9faW5mbyAqcDsKLXN0cnVjdCBQb3J0ICpQb3J0UDsKK3N0YXRpYyB2b2lkIFJJT1JlY2VpdmUoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgUG9ydCAqUG9ydFApCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKlR0eVA7Ci0JcmVnaXN0ZXIgdXNob3J0IHRyYW5zQ291bnQ7CisJdW5zaWduZWQgc2hvcnQgdHJhbnNDb3VudDsKIAlzdHJ1Y3QgUEtUICpQYWNrZXRQOwotCXJlZ2lzdGVyIHVpbnQgRGF0YUNudDsKLQl1Y2hhciAqcHRyOworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBEYXRhQ250OworCXVuc2lnbmVkIGNoYXIgKnB0cjsKIAl1bnNpZ25lZCBjaGFyICpidWY7CiAJaW50IGNvcGllZCA9IDA7CiAKQEAgLTU5NCw5ICs1ODAsNiBAQAogCQl0cmFuc0NvdW50ID0gMTsKIAkJd2hpbGUgKGNhbl9yZW1vdmVfcmVjZWl2ZSgmUGFja2V0UCwgUG9ydFApCiAJCSAgICAgICAmJiB0cmFuc0NvdW50KSB7Ci0jaWZkZWYgU1RBVFMKLQkJCVBvcnRQLT5TdGF0LlJ4SW50Q250Kys7Ci0jZW5kaWYJCQkJLyogU1RBVFMgKi8KIAkJCVJ4SW50Q250Kys7CiAKIAkJCS8qCkBAIC02NDIsMjggKzYyNSwxNSBAQAogCQkJICoqIHRvICcjZGVmaW5lJywgKHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgX19fREVCVUdfSVRfX18gb2NjdXJzIGluIHRoZQogCQkJICoqIGRyaXZlcikuCiAJCQkgKi8KLSN1bmRlZiBfX19ERUJVR19JVF9fXwotI2lmZGVmIF9fX0RFQlVHX0lUX19fCi0JCQlra3ByaW50ZigiSTolZCBSOiVkIFA6JWQgUTolZCBDOiVkIEY6JXggIiwgaW50Q291bnQsIFJ4SW50Q250LCBQb3J0UC0+UG9ydE51bSwgVHR5UC0+cnhxdWV1ZS5jb3VudCwgdHJhbnNDb3VudCwgVHR5UC0+ZmxhZ3MpOwotI2VuZGlmCi0JCQlwdHIgPSAodWNoYXIgKikgUGFja2V0UC0+ZGF0YSArIFBvcnRQLT5SeERhdGFTdGFydDsKKwkJCXB0ciA9ICh1bnNpZ25lZCBjaGFyICopIFBhY2tldFAtPmRhdGEgKyBQb3J0UC0+UnhEYXRhU3RhcnQ7CiAKIAkJCXR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKFR0eVAsICZidWYsIHRyYW5zQ291bnQpOwogCQkJcmlvX21lbWNweV9mcm9taW8oYnVmLCBwdHIsIHRyYW5zQ291bnQpOwotI2lmZGVmIFNUQVRTCi0JCQkvKgotCQkJICoqIGtlZXAgYSBjb3VudCBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMKLQkJCSAqLwotCQkJUG9ydFAtPlN0YXQuUnhDaGFyQ250ICs9IHRyYW5zQ291bnQ7Ci0jZW5kaWYKIAkJCVBvcnRQLT5SeERhdGFTdGFydCArPSB0cmFuc0NvdW50OwogCQkJUGFja2V0UC0+bGVuIC09IHRyYW5zQ291bnQ7CiAJCQljb3BpZWQgKz0gdHJhbnNDb3VudDsKIAogCi0jaWZkZWYgX19fREVCVUdfSVRfX18KLQkJCWtrcHJpbnRmKCJUOiVkIEw6JWRcbiIsIERhdGFDbnQsIFBhY2tldFAtPmxlbik7Ci0jZW5kaWYKIAogCQkJaWYgKFBhY2tldFAtPmxlbiA9PSAwKSB7CiAJCQkJLyoKQEAgLTY3NCwxMiArNjQ0LDYgQEAKIAkJCQlyZW1vdmVfcmVjZWl2ZShQb3J0UCk7CiAJCQkJcHV0X2ZyZWVfZW5kKFBvcnRQLT5Ib3N0UCwgUGFja2V0UCk7CiAJCQkJUG9ydFAtPlJ4RGF0YVN0YXJ0ID0gMDsKLSNpZmRlZiBTVEFUUwotCQkJCS8qCi0JCQkJICoqIG1vcmUgbGllcyAoIG9vcHMsIEkgbWVhbiBzdGF0aXN0aWNzICkKLQkJCQkgKi8KLQkJCQlQb3J0UC0+U3RhdC5SeFBrdENudCsrOwotI2VuZGlmCQkJCS8qIFNUQVRTICovCiAJCQl9CiAJCX0KIAl9CkBAIC02OTEsMjE1ICs2NTUsMyBAQAogCXJldHVybjsKIH0KIAotI2lmZGVmIEZVVFVSRV9SRUxFQVNFCi0vKgotKiogVGhlIHByb2Mgcm91dGluZSBjYWxsZWQgYnkgdGhlIGxpbmUgZGlzY2lwbGluZSB0byBkbyB0aGUgd29yayBmb3IgaXQuCi0qKiBUaGUgcHJvYyByb3V0aW5lIHdvcmtzIGhhbmQgaW4gaGFuZCB3aXRoIHRoZSBpbnRlcnJ1cHQgcm91dGluZS4KLSovCi1pbnQgcmlvdHByb2MocCwgdHAsIGNtZCwgcG9ydCkKLXN0cnVjdCByaW9faW5mbyAqcDsKLXJlZ2lzdGVyIHN0cnVjdCB0dHlzdGF0aWNzICp0cDsKLWludCBjbWQ7Ci1pbnQgcG9ydDsKLXsKLQlyZWdpc3RlciBzdHJ1Y3QgUG9ydCAqUG9ydFA7Ci0JaW50IFN5c1BvcnQ7Ci0Jc3RydWN0IFBLVCAqUGFja2V0UDsKLQotCVN5c1BvcnQgPSBwb3J0OwkJLyogQmVsaWV2ZSBtZSwgaXQgd29ya3MuICovCi0KLQlpZiAoU3lzUG9ydCA8IDAgfHwgU3lzUG9ydCA+PSBSSU9fUE9SVFMpIHsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJJbGxlZ2FsIHBvcnQgJWQgZGVyaXZlZCBmcm9tIFRUWSBpbiByaW90cHJvYygpXG4iLCBTeXNQb3J0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCVBvcnRQID0gcC0+UklPUG9ydHBbU3lzUG9ydF07Ci0KLQlpZiAoKHVpbnQpIFBvcnRQLT5QaGJQIDwgKHVpbnQpIFBvcnRQLT5DYWRkciB8fCAodWludCkgUG9ydFAtPlBoYlAgPj0gKHVpbnQpIFBvcnRQLT5DYWRkciArIFNJWFRZX0ZPVVJfSykgewotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlJJTzogTlVMTCBvciBCQUQgUGhiUCBvbiBzeXMgcG9ydCAlZCBpbiBwcm9jIHJvdXRpbmVcbiIsIFN5c1BvcnQpOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIgkgUG9ydFAgPSAweCV4XG4iLCBQb3J0UCk7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiCSBQb3J0UC0+UGhiUCA9IDB4JXhcbiIsIFBvcnRQLT5QaGJQKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIJIFBvcnRQLT5DYWRkciA9IDB4JXhcbiIsIFBvcnRQLT5QaGJQKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIJIFBvcnRQLT5Ib3N0UG9ydCA9IDB4JXhcbiIsIFBvcnRQLT5Ib3N0UG9ydCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUX1dGTFVTSDoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJUX1dGTFVTSFxuIik7Ci0JCS8qCi0JCSAqKiBCZWNhdXNlIG9mIHRoZSBzcG9va3kgd2F5IHRoZSBSSU8gd29ya3MsIHdlIGRvbid0IG5lZWQKLQkJICoqIHRvIGlzc3VlIGEgZmx1c2ggY29tbWFuZCBvbiBhbnkgb2YgdGhlIFNFVCpGIGNvbW1hbmRzLAotCQkgKiogYXMgdGhhdCBjYXVzZXMgdHJvdWJsZSB3aXRoIGdldHR5IGFuZCBsb2dpbiwgd2hpY2ggaXNzdWUKLQkJICoqIHRoZXNlIGNvbW1hbmRzIHRvIGluY3VyIGEgUkVBRCBmbHVzaCwgYW5kIHJlbHkgb24gdGhlIGZhY3QKLQkJICoqIHRoYXQgdGhlIGxpbmUgZGlzY2lwbGluZSBkb2VzIGEgd2FpdCBmb3IgZHJhaW4gZm9yIHRoZW0uCi0JCSAqKiBBcyB0aGUgcmlvIGRvZXNuJ3Qgd2FpdCBmb3IgZHJhaW4sIHRoZSB3cml0ZSBmbHVzaCB3b3VsZAotCQkgKiogZGVzdHJveSB0aGUgUGFzc3dvcmQ6IHByb21wdC4gVGhpcyBpc24ndCB2ZXJ5IGZyaWVuZGx5LCBzbwotCQkgKiogaGVyZSB3ZSBvbmx5IGlzc3VlIGEgV0ZMVVNIIGNvbW1hbmQgaWYgd2UgYXJlIGluIHRoZSBpbnRlcnJ1cHQKLQkJICoqIHJvdXRpbmUsIG9yIHdlIGFyZW4ndCBleGVjdXRpbmcgYSBTRVQqRiBjb21tYW5kLgotCQkgKi8KLQkJaWYgKFBvcnRQLT5Ib3N0UC0+SW5JbnRyIHx8ICFQb3J0UC0+Rmx1c2hDbWRCb2RnZSkgewotCQkJLyoKLQkJCSAqKiBmb3JtIGEgd2ZsdXNoIHBhY2tldCAtIDEgYnl0ZSBsb25nLCBubyBkYXRhCi0JCQkgKi8KLQkJCWlmIChQb3J0UC0+U3RhdGUgJiBSSU9fREVMRVRFRCkgewotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiV0ZMVVNIIG9uIGRlbGV0ZWQgUlRBXG4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKFJJT1ByZWVtcHRpdmVDbWQocCwgUG9ydFAsIFdGTFVTSCkgPT0gUklPX0ZBSUwpIHsKLQkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJUX1dGTFVTSCBDb21tYW5kIGZhaWxlZFxuIik7Ci0JCQkJfSBlbHNlCi0JCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiVF9XRkxVU0ggQ29tbWFuZFxuIik7Ci0JCQl9Ci0JCQkvKgotCQkJICoqIFdGTFVTSCBvcGVyYXRpb24gLSBmbHVzaCB0aGUgZGF0YSEKLQkJCSAqLwotCQkJUG9ydFAtPlR4QnVmZmVySW4gPSBQb3J0UC0+VHhCdWZmZXJPdXQgPSAwOwotCQl9IGVsc2UgewotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJUX1dGTFVTSCBDb21tYW5kIGlnbm9yZWRcbiIpOwotCQl9Ci0JCS8qCi0JCSAqKiBzb3J0IG91dCB0aGUgbGluZSBkaXNjaXBsaW5lCi0JCSAqLwotCQlpZiAoUG9ydFAtPkNvb2tNb2RlID09IENPT0tfV0VMTCkKLQkJCWdvdG8gc3RhcnQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBUX1JFU1VNRToKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJUX1JFU1VNRVxuIik7Ci0JCS8qCi0JCSAqKiBzZW5kIHByZS1lbXB0aXZlIHJlc3VtZSBwYWNrZXQKLQkJICovCi0JCWlmIChQb3J0UC0+U3RhdGUgJiBSSU9fREVMRVRFRCkgewotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJSRVNVTUUgb24gZGVsZXRlZCBSVEFcbiIpOwotCQl9IGVsc2UgewotCQkJaWYgKFJJT1ByZWVtcHRpdmVDbWQocCwgUG9ydFAsIFJFU1VNRSkgPT0gUklPX0ZBSUwpIHsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlRfUkVTVU1FIENvbW1hbmQgZmFpbGVkXG4iKTsKLQkJCX0KLQkJfQotCQkvKgotCQkgKiogYW5kIHJlLXN0YXJ0IHRoZSBzZW5kZXIgc29mdHdhcmUhCi0JCSAqLwotCQlpZiAoUG9ydFAtPkNvb2tNb2RlID09IENPT0tfV0VMTCkKLQkJCWdvdG8gc3RhcnQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBUX1RJTUU6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiVF9USU1FXG4iKTsKLQkJLyoKLQkJICoqIFRfVElNRSBpcyBjYWxsZWQgd2hlbiB4RExZIGlzIHNldCBpbiBvZmxhZ3MgYW5kCi0JCSAqKiB0aGUgbGluZSBkaXNjaXBsaW5lIHRpbWVvdXQgaGFzIGV4cGlyZWQuIEl0J3MKLQkJICoqIGZ1bmN0aW9uIGluIGxpZmUgaXMgdG8gY2xlYXIgdGhlIFRJTUVPVVQgZmxhZwotCQkgKiogYW5kIHRvIHJlLXN0YXJ0IG91dHB1dCB0byB0aGUgcG9ydC4KLQkJICovCi0JCS8qCi0JCSAqKiBGYWxsIHRocm91Z2ggYW5kIHJlLXN0YXJ0IG91dHB1dAotCQkgKi8KLQljYXNlIFRfT1VUUFVUOgotCSAgICAgIHN0YXJ0OgotCQlpZiAoUG9ydFAtPk1hZ2ljRmxhZ3MgJiBNQUdJQ19GTFVTSCkgewotCQkJUG9ydFAtPk1hZ2ljRmxhZ3MgfD0gTU9SRV9PVVRQVVRfRVlHT1I7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlSSU9UeEVuYWJsZSgoY2hhciAqKSBQb3J0UCk7Ci0JCVBvcnRQLT5NYWdpY0ZsYWdzICY9IH5NT1JFX09VVFBVVF9FWUdPUjsKLQkJLypyaW9fZHByaW50KFJJT19ERUJVR19JTlRSLCBQb3J0UCxEQkdfUFJPQywiVF9PVVRQVVQgZmluaXNoZWRcbiIpOyAqLwotCQlicmVhazsKLQotCWNhc2UgVF9TVVNQRU5EOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlRfU1VTUEVORFxuIik7Ci0JCS8qCi0JCSAqKiBzZW5kIGEgc3VzcGVuZCBwcmUtZW1wdGl2ZSBwYWNrZXQuCi0JCSAqLwotCQlpZiAoUG9ydFAtPlN0YXRlICYgUklPX0RFTEVURUQpIHsKLQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiU1VTUEVORCBkZWxldGVkIFJUQVxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoUklPUHJlZW1wdGl2ZUNtZChwLCBQb3J0UCwgU1VTUEVORCkgPT0gUklPX0ZBSUwpIHsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlRfU1VTUEVORCBDb21tYW5kIGZhaWxlZFxuIik7Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICoqIGRvbmUhCi0JCSAqLwotCQlicmVhazsKLQotCWNhc2UgVF9CTE9DSzoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJUX0JMT0NLXG4iKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFRfUkZMVVNIOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlRfUkZMVVNIXG4iKTsKLQkJaWYgKFBvcnRQLT5TdGF0ZSAmIFJJT19ERUxFVEVEKSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlJGTFVTSCBvbiBkZWxldGVkIFJUQVxuIik7Ci0JCQlQb3J0UC0+UnhEYXRhU3RhcnQgPSAwOwotCQl9IGVsc2UgewotCQkJaWYgKFJJT1ByZWVtcHRpdmVDbWQocCwgUG9ydFAsIFJGTFVTSCkgPT0gUklPX0ZBSUwpIHsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlRfUkZMVVNIIENvbW1hbmQgZmFpbGVkXG4iKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCVBvcnRQLT5SeERhdGFTdGFydCA9IDA7Ci0JCQl3aGlsZSAoY2FuX3JlbW92ZV9yZWNlaXZlKCZQYWNrZXRQLCBQb3J0UCkpIHsKLQkJCQlyZW1vdmVfcmVjZWl2ZShQb3J0UCk7Ci0JCQkJU2hvd1BhY2tldChEQkdfUFJPQywgUGFja2V0UCk7Ci0JCQkJcHV0X2ZyZWVfZW5kKFBvcnRQLT5Ib3N0UCwgUGFja2V0UCk7Ci0JCQl9Ci0JCQlpZiAoUG9ydFAtPlBoYlAtPmhhbmRzaGFrZSA9PSBQSEJfSEFORFNIQUtFX1NFVCkgewotCQkJCS8qCi0JCQkJICoqIE1BR0lDIQotCQkJCSAqLwotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiU2V0IHJlY2VpdmUgaGFuZHNoYWtlIGJpdFxuIik7Ci0JCQkJUG9ydFAtPlBoYlAtPmhhbmRzaGFrZSB8PSBQSEJfSEFORFNIQUtFX1JFU0VUOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCQkvKiBGQUxMVEhST1VHSCAqLwotCWNhc2UgVF9VTkJMT0NLOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlRfVU5CTE9DS1xuIik7Ci0JCS8qCi0JCSAqKiBJZiB0aGVyZSBpcyBhbnkgZGF0YSB0byByZWNlaXZlIHNldCBhIHRpbWVvdXQgdG8gc2VydmljZSBpdC4KLQkJICovCi0JCVJJT1JlY2VpdmUocCwgUG9ydFApOwotCQlicmVhazsKLQotCWNhc2UgVF9CUkVBSzoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJUX0JSRUFLXG4iKTsKLQkJLyoKLQkJICoqIFNlbmQgYSBicmVhayBjb21tYW5kLiBGb3IgU3lzIFYKLQkJICoqIHRoaXMgaXMgYSB0aW1lZCBicmVhaywgc28gd2UKLQkJICoqIHNlbmQgYSBTQlJFQUtbdGltZV0gcGFja2V0Ci0JCSAqLwotCQkvKgotCQkgKiogQnVpbGQgYSBCUkVBSyBjb21tYW5kCi0JCSAqLwotCQlpZiAoUG9ydFAtPlN0YXRlICYgUklPX0RFTEVURUQpIHsKLQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiQlJFQUsgb24gZGVsZXRlZCBSVEFcbiIpOwotCQl9IGVsc2UgewotCQkJaWYgKFJJT1Nob3J0Q29tbWFuZChQb3J0UCwgU0JSRUFLLCAyLCBwLT5SSU9Db25mLkJyZWFrSW50ZXJ2YWwpID09IFJJT19GQUlMKSB7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJTQlJFQUsgUklPU2hvcnRDb21tYW5kIGZhaWxlZFxuIik7Ci0JCQl9Ci0JCX0KLQotCQkvKgotCQkgKiogZG9uZSEKLQkJICovCi0JCWJyZWFrOwotCi0JY2FzZSBUX0lOUFVUOgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlByb2MgVF9JTlBVVCBjYWxsZWQgLSBJIGRvbid0IGtub3cgd2hhdCB0byBkbyFcbiIpOwotCQlicmVhazsKLQljYXNlIFRfUEFSTToKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJQcm9jIFRfUEFSTSBjYWxsZWQgLSBJIGRvbid0IGtub3cgd2hhdCB0byBkbyFcbiIpOwotCQlicmVhazsKLQotCWNhc2UgVF9TV1RDSDoKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICJQcm9jIFRfU1dUQ0ggY2FsbGVkIC0gSSBkb24ndCBrbm93IHdoYXQgdG8gZG8hXG4iKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIlByb2MgVU5LTk9XTiBjb21tYW5kICVkXG4iLCBjbWQpOwotCX0KLQkvKgotCSAqKiBUX09VVFBVVCByZXR1cm5zIHdpdGhvdXQgcGFzc2luZyB0aHJvdWdoIHRoaXMgcG9pbnQhCi0JICovCi0JLypyaW9fZHByaW50KFJJT19ERUJVR19JTlRSLCBQb3J0UCxEQkdfUFJPQywicmlvdHByb2MgZG9uZVxuIik7ICovCi0JcmV0dXJuICgwKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jCmluZGV4IGM2MjJmNDYuLmQyZTgwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3BhcmFtLmMKQEAgLTUyLDE1ICs1MiwxMiBAQAogCiAjaW5jbHVkZSAibGludXhfY29tcGF0LmgiCiAjaW5jbHVkZSAicmlvX2xpbnV4LmgiCi0jaW5jbHVkZSAidHlwZGVmLmgiCiAjaW5jbHVkZSAicGt0LmgiCiAjaW5jbHVkZSAiZGFlbW9uLmgiCiAjaW5jbHVkZSAicmlvLmgiCiAjaW5jbHVkZSAicmlvc3BhY2UuaCIKLSNpbmNsdWRlICJ0b3AuaCIKICNpbmNsdWRlICJjbWRwa3QuaCIKICNpbmNsdWRlICJtYXAuaCIKLSNpbmNsdWRlICJyaW90eXBlcy5oIgogI2luY2x1ZGUgInJ1cC5oIgogI2luY2x1ZGUgInBvcnQuaCIKICNpbmNsdWRlICJyaW9kcnZyLmgiCkBAIC03MywxNyArNzAsMTMgQEAKICNpbmNsdWRlICJ1bml4cnVwLmgiCiAjaW5jbHVkZSAiYm9hcmQuaCIKICNpbmNsdWRlICJob3N0LmgiCi0jaW5jbHVkZSAiZXJyb3IuaCIKICNpbmNsdWRlICJwaGIuaCIKICNpbmNsdWRlICJsaW5rLmgiCiAjaW5jbHVkZSAiY21kYmxrLmgiCiAjaW5jbHVkZSAicm91dGUuaCIKLSNpbmNsdWRlICJjb250cm9sLmgiCiAjaW5jbHVkZSAiY2lycnVzLmgiCiAjaW5jbHVkZSAicmlvaW9jdGwuaCIKICNpbmNsdWRlICJwYXJhbS5oIgotI2luY2x1ZGUgImxpc3QuaCIKLSNpbmNsdWRlICJzYW0uaCIKIAogCiAKQEAgLTE1NywyMCArMTUwLDE2IEBACiAqKiBOQi4gZm9yIE1QWAogKioJdHR5IGxvY2sgbXVzdCBOT1QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgYWNxdWlyZWQuCiAqLwotaW50IFJJT1BhcmFtKFBvcnRQLCBjbWQsIE1vZGVtLCBTbGVlcEZsYWcpCi1zdHJ1Y3QgUG9ydCAqUG9ydFA7Ci1pbnQgY21kOwotaW50IE1vZGVtOwotaW50IFNsZWVwRmxhZzsKK2ludCBSSU9QYXJhbShzdHJ1Y3QgUG9ydCAqUG9ydFAsIGludCBjbWQsIGludCBNb2RlbSwgaW50IFNsZWVwRmxhZykKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgdHR5X3N0cnVjdCAqVHR5UDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqVHR5UDsKIAlpbnQgcmV0dmFsOwotCXJlZ2lzdGVyIHN0cnVjdCBwaGJfcGFyYW0gKnBoYl9wYXJhbV9wdHI7Ci0JUEtUICpQYWNrZXRQOworCXN0cnVjdCBwaGJfcGFyYW0gKnBoYl9wYXJhbV9wdHI7CisJc3RydWN0IFBLVCAqUGFja2V0UDsKIAlpbnQgcmVzOwotCXVjaGFyIENvcjEgPSAwLCBDb3IyID0gMCwgQ29yNCA9IDAsIENvcjUgPSAwOwotCXVjaGFyIFR4WG9uID0gMCwgVHhYb2ZmID0gMCwgUnhYb24gPSAwLCBSeFhvZmYgPSAwOwotCXVjaGFyIExOZXh0ID0gMCwgVHhCYXVkID0gMCwgUnhCYXVkID0gMDsKKwl1OCBDb3IxID0gMCwgQ29yMiA9IDAsIENvcjQgPSAwLCBDb3I1ID0gMDsKKwl1OCBUeFhvbiA9IDAsIFR4WG9mZiA9IDAsIFJ4WG9uID0gMCwgUnhYb2ZmID0gMDsKKwl1OCBMTmV4dCA9IDAsIFR4QmF1ZCA9IDAsIFJ4QmF1ZCA9IDA7CiAJaW50IHJldHJpZXMgPSAweGZmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTIyNiwxNiArMjE1LDEzIEBACiAJCWlmIChyZXR2YWwgPT0gUklPX0ZBSUwpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QQVJBTSwgIndhaXQgZm9yIGNhbl9hZGRfdHJhbnNtaXQgYnJva2VuIGJ5IHNpZ25hbFxuIik7CiAJCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKLQkJCXBzZXRlcnIoRUlOVFIpOwogCQkJZnVuY19leGl0KCk7Ci0KLQkJCXJldHVybiBSSU9fRkFJTDsKKwkJCXJldHVybiAtRUlOVFI7CiAJCX0KIAkJaWYgKFBvcnRQLT5TdGF0ZSAmIFJJT19ERUxFVEVEKSB7CiAJCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAkJCWZ1bmNfZXhpdCgpOwotCi0JCQlyZXR1cm4gUklPX1NVQ0NFU1M7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIApAQCAtMjQ3LDcgKzIzMyw3IEBACiAJfQogCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAiY2FuX2FkZF90cmFuc21pdCgpIHJldHVybnMgJXhcbiIsIHJlcyk7Ci0JcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAiUGFja2V0IGlzIDB4JXhcbiIsIChpbnQpIFBhY2tldFApOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19QQVJBTSwgIlBhY2tldCBpcyAlcFxuIiwgUGFja2V0UCk7CiAKIAlwaGJfcGFyYW1fcHRyID0gKHN0cnVjdCBwaGJfcGFyYW0gKikgUGFja2V0UC0+ZGF0YTsKIApAQCAtNDc0LDkgKzQ2MCw2IEBACiAJCWUoMTE1MjAwKTsJLyogZSgyMzA0MDApO2UoNDYwODAwKTsgZSg5MjE2MDApOyAgKi8KIAl9CiAKLQkvKiBYWFggTUlzc2luZyBjb252ZXJzaW9uIHRhYmxlLiBYWFggKi8KLQkvKiAgICAgICAoVHR5UC0+dGVybWlvcy0+Y19jZmxhZyAmIFZfQ0JBVUQpOyAqLwotCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1BBUkFNLCAidHggYmF1ZCAweCV4LCByeCBiYXVkIDB4JXhcbiIsIFR4QmF1ZCwgUnhCYXVkKTsKIAogCkBAIC01NTIsMjMgKzUzNSwyMyBAQAogCS8qCiAJICoqIEFjdHVhbGx5IHdyaXRlIHRoZSBpbmZvIGludG8gdGhlIHBhY2tldCB0byBiZSBzZW50CiAJICovCi0JV0JZVEUocGhiX3BhcmFtX3B0ci0+Q21kLCBjbWQpOwotCVdCWVRFKHBoYl9wYXJhbV9wdHItPkNvcjEsIENvcjEpOwotCVdCWVRFKHBoYl9wYXJhbV9wdHItPkNvcjIsIENvcjIpOwotCVdCWVRFKHBoYl9wYXJhbV9wdHItPkNvcjQsIENvcjQpOwotCVdCWVRFKHBoYl9wYXJhbV9wdHItPkNvcjUsIENvcjUpOwotCVdCWVRFKHBoYl9wYXJhbV9wdHItPlR4WG9uLCBUeFhvbik7Ci0JV0JZVEUocGhiX3BhcmFtX3B0ci0+UnhYb24sIFJ4WG9uKTsKLQlXQllURShwaGJfcGFyYW1fcHRyLT5UeFhvZmYsIFR4WG9mZik7Ci0JV0JZVEUocGhiX3BhcmFtX3B0ci0+UnhYb2ZmLCBSeFhvZmYpOwotCVdCWVRFKHBoYl9wYXJhbV9wdHItPkxOZXh0LCBMTmV4dCk7Ci0JV0JZVEUocGhiX3BhcmFtX3B0ci0+VHhCYXVkLCBUeEJhdWQpOwotCVdCWVRFKHBoYl9wYXJhbV9wdHItPlJ4QmF1ZCwgUnhCYXVkKTsKKwl3cml0ZWIoY21kLCAmcGhiX3BhcmFtX3B0ci0+Q21kKTsKKwl3cml0ZWIoQ29yMSwgJnBoYl9wYXJhbV9wdHItPkNvcjEpOworCXdyaXRlYihDb3IyLCAmcGhiX3BhcmFtX3B0ci0+Q29yMik7CisJd3JpdGViKENvcjQsICZwaGJfcGFyYW1fcHRyLT5Db3I0KTsKKwl3cml0ZWIoQ29yNSwgJnBoYl9wYXJhbV9wdHItPkNvcjUpOworCXdyaXRlYihUeFhvbiwgJnBoYl9wYXJhbV9wdHItPlR4WG9uKTsKKwl3cml0ZWIoUnhYb24sICZwaGJfcGFyYW1fcHRyLT5SeFhvbik7CisJd3JpdGViKFR4WG9mZiwgJnBoYl9wYXJhbV9wdHItPlR4WG9mZik7CisJd3JpdGViKFJ4WG9mZiwgJnBoYl9wYXJhbV9wdHItPlJ4WG9mZik7CisJd3JpdGViKExOZXh0LCAmcGhiX3BhcmFtX3B0ci0+TE5leHQpOworCXdyaXRlYihUeEJhdWQsICZwaGJfcGFyYW1fcHRyLT5UeEJhdWQpOworCXdyaXRlYihSeEJhdWQsICZwaGJfcGFyYW1fcHRyLT5SeEJhdWQpOwogCiAJLyoKIAkgKiogU2V0IHRoZSBsZW5ndGgvY29tbWFuZCBmaWVsZAogCSAqLwotCVdCWVRFKFBhY2tldFAtPmxlbiwgMTIgfCBQS1RfQ01EX0JJVCk7CisJd3JpdGViKDEyIHwgUEtUX0NNRF9CSVQsICZQYWNrZXRQLT5sZW4pOwogCiAJLyoKIAkgKiogVGhlIHBhY2tldCBpcyBmb3JtZWQgLSBub3csIHdoYWNrIGl0IG9mZgpAQCAtNTg5LDcgKzU3Miw3IEBACiAJICovCiAJZnVuY19leGl0KCk7CiAKLQlyZXR1cm4gUklPX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtNTk3LDE1ICs1ODAsMTMgQEAKICoqIFdlIGNhbiBhZGQgYW5vdGhlciBwYWNrZXQgdG8gYSB0cmFuc21pdCBxdWV1ZSBpZiB0aGUgcGFja2V0IHBvaW50ZXIgcG9pbnRlZAogKiogdG8gYnkgdGhlIFR4QWRkIHBvaW50ZXIgaGFzIFBLVF9JTl9VU0UgY2xlYXIgaW4gaXRzIGFkZHJlc3MuCiAqLwotaW50IGNhbl9hZGRfdHJhbnNtaXQoUGt0UCwgUG9ydFApCi1QS1QgKipQa3RQOwotc3RydWN0IFBvcnQgKlBvcnRQOworaW50IGNhbl9hZGRfdHJhbnNtaXQoc3RydWN0IFBLVCAqKlBrdFAsIHN0cnVjdCBQb3J0ICpQb3J0UCkKIHsKLQlyZWdpc3RlciBQS1QgKnRwOworCXN0cnVjdCBQS1QgKnRwOwogCi0JKlBrdFAgPSB0cCA9IChQS1QgKikgUklPX1BUUihQb3J0UC0+Q2FkZHIsIFJXT1JEKCpQb3J0UC0+VHhBZGQpKTsKKwkqUGt0UCA9IHRwID0gKHN0cnVjdCBQS1QgKikgUklPX1BUUihQb3J0UC0+Q2FkZHIsIHJlYWR3KFBvcnRQLT5UeEFkZCkpOwogCi0JcmV0dXJuICEoKHVpbnQpIHRwICYgUEtUX0lOX1VTRSk7CisJcmV0dXJuICEoKHVuc2lnbmVkIGxvbmcpIHRwICYgUEtUX0lOX1VTRSk7CiB9CiAKIC8qCkBAIC02MTMsMjcgKzU5NCwyNCBAQAogKiogYW5kIHRoZW4gbW92ZSB0aGUgVHhBZGQgcG9pbnRlciBhbG9uZyBvbmUgcG9zaXRpb24gdG8gcG9pbnQgdG8gdGhlIG5leHQKICoqIHBhY2tldCBwb2ludGVyLiBZb3UgbXVzdCB3cmFwIHRoZSBwb2ludGVyIGZyb20gdGhlIGVuZCBiYWNrIHRvIHRoZSBzdGFydC4KICovCi12b2lkIGFkZF90cmFuc21pdChQb3J0UCkKLXN0cnVjdCBQb3J0ICpQb3J0UDsKK3ZvaWQgYWRkX3RyYW5zbWl0KHN0cnVjdCBQb3J0ICpQb3J0UCkKIHsKLQlpZiAoUldPUkQoKlBvcnRQLT5UeEFkZCkgJiBQS1RfSU5fVVNFKSB7CisJaWYgKHJlYWR3KFBvcnRQLT5UeEFkZCkgJiBQS1RfSU5fVVNFKSB7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QQVJBTSwgImFkZF90cmFuc21pdDogUGFja2V0IGhhcyBiZWVuIHN0b2xlbiEiKTsKIAl9Ci0JV1dPUkQoKih1c2hvcnQgKikgUG9ydFAtPlR4QWRkLCBSV09SRCgqUG9ydFAtPlR4QWRkKSB8IFBLVF9JTl9VU0UpOworCXdyaXRldyhyZWFkdyhQb3J0UC0+VHhBZGQpIHwgUEtUX0lOX1VTRSwgUG9ydFAtPlR4QWRkKTsKIAlQb3J0UC0+VHhBZGQgPSAoUG9ydFAtPlR4QWRkID09IFBvcnRQLT5UeEVuZCkgPyBQb3J0UC0+VHhTdGFydCA6IFBvcnRQLT5UeEFkZCArIDE7Ci0JV1dPUkQoUG9ydFAtPlBoYlAtPnR4X2FkZCwgUklPX09GRihQb3J0UC0+Q2FkZHIsIFBvcnRQLT5UeEFkZCkpOworCXdyaXRldyhSSU9fT0ZGKFBvcnRQLT5DYWRkciwgUG9ydFAtPlR4QWRkKSwgJlBvcnRQLT5QaGJQLT50eF9hZGQpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUHV0IGEgcGFja2V0IG9udG8gdGhlIGVuZCBvZiB0aGUKICAqIGZyZWUgbGlzdAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHB1dF9mcmVlX2VuZChIb3N0UCwgUGt0UCkKLXN0cnVjdCBIb3N0ICpIb3N0UDsKLVBLVCAqUGt0UDsKK3ZvaWQgcHV0X2ZyZWVfZW5kKHN0cnVjdCBIb3N0ICpIb3N0UCwgc3RydWN0IFBLVCAqUGt0UCkKIHsKLQlGUkVFX0xJU1QgKnRtcF9wb2ludGVyOwotCXVzaG9ydCBvbGRfZW5kLCBuZXdfZW5kOworCXN0cnVjdCByaW9fZnJlZV9saXN0ICp0bXBfcG9pbnRlcjsKKwl1bnNpZ25lZCBzaG9ydCBvbGRfZW5kLCBuZXdfZW5kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyaW9fc3Bpbl9sb2NrX2lycXNhdmUoJkhvc3RQLT5Ib3N0TG9jaywgZmxhZ3MpOwpAQCAtNjQzLDIxICs2MjEsMjEgQEAKIAkqCiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JcmlvX2RwcmludGsoUklPX0RFQlVHX1BGRSwgInB1dF9mcmVlX2VuZChQa3RQPSV4KVxuIiwgKGludCkgUGt0UCk7CisJcmlvX2RwcmludGsoUklPX0RFQlVHX1BGRSwgInB1dF9mcmVlX2VuZChQa3RQPSVwKVxuIiwgUGt0UCk7CiAKLQlpZiAoKG9sZF9lbmQgPSBSV09SRChIb3N0UC0+UGFybU1hcFAtPmZyZWVfbGlzdF9lbmQpKSAhPSBUUE5VTEwpIHsKKwlpZiAoKG9sZF9lbmQgPSByZWFkdygmSG9zdFAtPlBhcm1NYXBQLT5mcmVlX2xpc3RfZW5kKSkgIT0gVFBOVUxMKSB7CiAJCW5ld19lbmQgPSBSSU9fT0ZGKEhvc3RQLT5DYWRkciwgUGt0UCk7Ci0JCXRtcF9wb2ludGVyID0gKEZSRUVfTElTVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgb2xkX2VuZCk7Ci0JCVdXT1JEKHRtcF9wb2ludGVyLT5uZXh0LCBuZXdfZW5kKTsKLQkJV1dPUkQoKChGUkVFX0xJU1QgKikgUGt0UCktPnByZXYsIG9sZF9lbmQpOwotCQlXV09SRCgoKEZSRUVfTElTVCAqKSBQa3RQKS0+bmV4dCwgVFBOVUxMKTsKLQkJV1dPUkQoSG9zdFAtPlBhcm1NYXBQLT5mcmVlX2xpc3RfZW5kLCBuZXdfZW5kKTsKKwkJdG1wX3BvaW50ZXIgPSAoc3RydWN0IHJpb19mcmVlX2xpc3QgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIG9sZF9lbmQpOworCQl3cml0ZXcobmV3X2VuZCwgJnRtcF9wb2ludGVyLT5uZXh0KTsKKwkJd3JpdGV3KG9sZF9lbmQsICYoKHN0cnVjdCByaW9fZnJlZV9saXN0ICopIFBrdFApLT5wcmV2KTsKKwkJd3JpdGV3KFRQTlVMTCwgJigoc3RydWN0IHJpb19mcmVlX2xpc3QgKikgUGt0UCktPm5leHQpOworCQl3cml0ZXcobmV3X2VuZCwgJkhvc3RQLT5QYXJtTWFwUC0+ZnJlZV9saXN0X2VuZCk7CiAJfSBlbHNlIHsJCS8qIEZpcnN0IHBhY2tldCBvbiB0aGUgZnJlZSBsaXN0IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1BGRSwgInB1dF9mcmVlX2VuZCgpOiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW5cbiIpOwotCQlXV09SRChIb3N0UC0+UGFybU1hcFAtPmZyZWVfbGlzdF9lbmQsIFJJT19PRkYoSG9zdFAtPkNhZGRyLCBQa3RQKSk7Ci0JCXRtcF9wb2ludGVyID0gKEZSRUVfTElTVCAqKSBQa3RQOwotCQlXV09SRCh0bXBfcG9pbnRlci0+cHJldiwgVFBOVUxMKTsKLQkJV1dPUkQodG1wX3BvaW50ZXItPm5leHQsIFRQTlVMTCk7CisJCXdyaXRldyhSSU9fT0ZGKEhvc3RQLT5DYWRkciwgUGt0UCksICZIb3N0UC0+UGFybU1hcFAtPmZyZWVfbGlzdF9lbmQpOworCQl0bXBfcG9pbnRlciA9IChzdHJ1Y3QgcmlvX2ZyZWVfbGlzdCAqKSBQa3RQOworCQl3cml0ZXcoVFBOVUxMLCAmdG1wX3BvaW50ZXItPnByZXYpOworCQl3cml0ZXcoVFBOVUxMLCAmdG1wX3BvaW50ZXItPm5leHQpOwogCX0KIAlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiQmVmb3JlIHVubG9jazogJXBcbiIsICZIb3N0UC0+SG9zdExvY2spOwogCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZIb3N0UC0+SG9zdExvY2ssIGZsYWdzKTsKQEAgLTY2OSwxMiArNjQ3LDEwIEBACiAqKiByZWxldmFudCBwYWNrZXQsIFtoYXZpbmcgY2xlYXJlZCB0aGUgUEtUX0lOX1VTRSBiaXRdLiBJZiBQS1RfSU5fVVNFIGlzIGNsZWFyLAogKiogdGhlbiBjYW5fcmVtb3ZlX3JlY2VpdmUoKSByZXR1cm5zIDAuCiAqLwotaW50IGNhbl9yZW1vdmVfcmVjZWl2ZShQa3RQLCBQb3J0UCkKLVBLVCAqKlBrdFA7Ci1zdHJ1Y3QgUG9ydCAqUG9ydFA7CitpbnQgY2FuX3JlbW92ZV9yZWNlaXZlKHN0cnVjdCBQS1QgKipQa3RQLCBzdHJ1Y3QgUG9ydCAqUG9ydFApCiB7Ci0JaWYgKFJXT1JEKCpQb3J0UC0+UnhSZW1vdmUpICYgUEtUX0lOX1VTRSkgewotCQkqUGt0UCA9IChQS1QgKikgUklPX1BUUihQb3J0UC0+Q2FkZHIsIFJXT1JEKCpQb3J0UC0+UnhSZW1vdmUpICYgflBLVF9JTl9VU0UpOworCWlmIChyZWFkdyhQb3J0UC0+UnhSZW1vdmUpICYgUEtUX0lOX1VTRSkgeworCQkqUGt0UCA9IChzdHJ1Y3QgUEtUICopIFJJT19QVFIoUG9ydFAtPkNhZGRyLCByZWFkdyhQb3J0UC0+UnhSZW1vdmUpICYgflBLVF9JTl9VU0UpOwogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC02ODUsMTAgKzY2MSw5IEBACiAqKiBhbmQgdGhlbiBidW1wIHRoZSBwb2ludGVycy4gT25jZSB0aGUgcG9pbnRlcnMgZ2V0IHRvIHRoZSBlbmQsIHRoZXkgbXVzdAogKiogYmUgd3JhcHBlZCBiYWNrIHRvIHRoZSBzdGFydC4KICovCi12b2lkIHJlbW92ZV9yZWNlaXZlKFBvcnRQKQotc3RydWN0IFBvcnQgKlBvcnRQOwordm9pZCByZW1vdmVfcmVjZWl2ZShzdHJ1Y3QgUG9ydCAqUG9ydFApCiB7Ci0JV1dPUkQoKlBvcnRQLT5SeFJlbW92ZSwgUldPUkQoKlBvcnRQLT5SeFJlbW92ZSkgJiB+UEtUX0lOX1VTRSk7CisJd3JpdGV3KHJlYWR3KFBvcnRQLT5SeFJlbW92ZSkgJiB+UEtUX0lOX1VTRSwgUG9ydFAtPlJ4UmVtb3ZlKTsKIAlQb3J0UC0+UnhSZW1vdmUgPSAoUG9ydFAtPlJ4UmVtb3ZlID09IFBvcnRQLT5SeEVuZCkgPyBQb3J0UC0+UnhTdGFydCA6IFBvcnRQLT5SeFJlbW92ZSArIDE7Ci0JV1dPUkQoUG9ydFAtPlBoYlAtPnJ4X3JlbW92ZSwgUklPX09GRihQb3J0UC0+Q2FkZHIsIFBvcnRQLT5SeFJlbW92ZSkpOworCXdyaXRldyhSSU9fT0ZGKFBvcnRQLT5DYWRkciwgUG9ydFAtPlJ4UmVtb3ZlKSwgJlBvcnRQLT5QaGJQLT5yeF9yZW1vdmUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9wY2ljb3B5LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3BjaWNvcHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1YWZhYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3BjaWNvcHkuYworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotCi0vKiBZZWFoLiBXZSBoYXZlIGNvcHlyaWdodCBvbiB0aGlzIG9uZS4gU3VyZS4gKi8KLQotdm9pZCByaW9fcGNpY29weShjaGFyICpmcm9tLCBjaGFyICp0bywgaW50IGFtb3VudCkKLXsKLQl3aGlsZSAoYW1vdW50LS0pCi0JCSp0bysrID0gKmZyb20rKzsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYwppbmRleCBmOTg4ODhmLi4zNTcwODUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3JvdXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9yb3V0ZS5jCkBAIC01MCwxNSArNTAsMTIgQEAKIAogI2luY2x1ZGUgImxpbnV4X2NvbXBhdC5oIgogI2luY2x1ZGUgInJpb19saW51eC5oIgotI2luY2x1ZGUgInR5cGRlZi5oIgogI2luY2x1ZGUgInBrdC5oIgogI2luY2x1ZGUgImRhZW1vbi5oIgogI2luY2x1ZGUgInJpby5oIgogI2luY2x1ZGUgInJpb3NwYWNlLmgiCi0jaW5jbHVkZSAidG9wLmgiCiAjaW5jbHVkZSAiY21kcGt0LmgiCiAjaW5jbHVkZSAibWFwLmgiCi0jaW5jbHVkZSAicmlvdHlwZXMuaCIKICNpbmNsdWRlICJydXAuaCIKICNpbmNsdWRlICJwb3J0LmgiCiAjaW5jbHVkZSAicmlvZHJ2ci5oIgpAQCAtNzEsMjkgKzY4LDI1IEBACiAjaW5jbHVkZSAidW5peHJ1cC5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImVycm9yLmgiCiAjaW5jbHVkZSAicGhiLmgiCiAjaW5jbHVkZSAibGluay5oIgogI2luY2x1ZGUgImNtZGJsay5oIgogI2luY2x1ZGUgInJvdXRlLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgImNpcnJ1cy5oIgogI2luY2x1ZGUgInJpb2lvY3RsLmgiCiAjaW5jbHVkZSAicGFyYW0uaCIKLSNpbmNsdWRlICJsaXN0LmgiCi0jaW5jbHVkZSAic2FtLmgiCiAKLXN0YXRpYyBpbnQgUklPQ2hlY2tJc29sYXRlZChzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdWludCk7Ci1zdGF0aWMgaW50IFJJT0lzb2xhdGUoc3RydWN0IHJpb19pbmZvICosIHN0cnVjdCBIb3N0ICosIHVpbnQpOwotc3RhdGljIGludCBSSU9DaGVjayhzdHJ1Y3QgSG9zdCAqLCB1aW50KTsKLXN0YXRpYyB2b2lkIFJJT0NvbkNvbihzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdWludCwgdWludCwgdWludCwgdWludCwgaW50KTsKK3N0YXRpYyBpbnQgUklPQ2hlY2tJc29sYXRlZChzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBpbnQgUklPSXNvbGF0ZShzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyBpbnQgUklPQ2hlY2soc3RydWN0IEhvc3QgKiwgdW5zaWduZWQgaW50KTsKK3N0YXRpYyB2b2lkIFJJT0NvbkNvbihzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBpbnQpOwogCiAKIC8qCiAqKiBJbmNvbWluZyBvbiB0aGUgUk9VVEVfUlVQCiAqKiBJIHdyb3RlIHRoaXMgd2hpbGUgSSB3YXMgdGlyZWQuIEZvcmdpdmUgbWUuCiAqLwotaW50IFJJT1JvdXRlUnVwKHN0cnVjdCByaW9faW5mbyAqcCwgdWludCBSdXAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgUEtUICogUGFja2V0UCkKK2ludCBSSU9Sb3V0ZVJ1cChzdHJ1Y3QgcmlvX2luZm8gKnAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgc3RydWN0IFBLVCAqIFBhY2tldFApCiB7CiAJc3RydWN0IFBrdENtZCAqUGt0Q21kUCA9IChzdHJ1Y3QgUGt0Q21kICopIFBhY2tldFAtPmRhdGE7CiAJc3RydWN0IFBrdENtZF9NICpQa3RSZXBseVA7CkBAIC0xMDQsMTAgKzk3LDEwIEBACiAJaW50IFRoaXNMaW5rLCBUaGlzTGlua01pbiwgVGhpc0xpbmtNYXg7CiAJaW50IHBvcnQ7CiAJaW50IE1vZCwgTW9kMSwgTW9kMjsKLQl1c2hvcnQgUnRhVHlwZTsKLQl1aW50IFJ0YVVuaXE7Ci0JdWludCBUaGlzVW5pdCwgVGhpc1VuaXQyOwkvKiAyIGlkcyB0byBhY2NvbW1vZGF0ZSAxNiBwb3J0IFJUQSAqLwotCXVpbnQgT2xkVW5pdCwgTmV3VW5pdCwgT2xkTGluaywgTmV3TGluazsKKwl1bnNpZ25lZCBzaG9ydCBSdGFUeXBlOworCXVuc2lnbmVkIGludCBSdGFVbmlxOworCXVuc2lnbmVkIGludCBUaGlzVW5pdCwgVGhpc1VuaXQyOwkvKiAyIGlkcyB0byBhY2NvbW1vZGF0ZSAxNiBwb3J0IFJUQSAqLworCXVuc2lnbmVkIGludCBPbGRVbml0LCBOZXdVbml0LCBPbGRMaW5rLCBOZXdMaW5rOwogCWNoYXIgKk15VHlwZSwgKk15TmFtZTsKIAlpbnQgTGllczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTE1LDcgKzEwOCw3IEBACiAJLyoKIAkgKiogSXMgdGhpcyB1bml0IHRlbGxpbmcgdXMgaXQncyBjdXJyZW50IGxpbmsgdG9wb2xvZ3k/CiAJICovCi0JaWYgKFJCWVRFKFBrdENtZFAtPkNvbW1hbmQpID09IFJPVVRFX1RPUE9MT0dZKSB7CisJaWYgKHJlYWRiKCZQa3RDbWRQLT5Db21tYW5kKSA9PSBST1VURV9UT1BPTE9HWSkgewogCQlNYXBQID0gSG9zdFAtPk1hcHBpbmc7CiAKIAkJLyoKQEAgLTEyNSw3ICsxMTgsNyBAQAogCQkgKiogZnJvbSBhbiBSVEEgdGhlbiB3ZSBuZWVkIHRvIGZpbGwgaW4gdGhlIE1hcHBpbmcgc3RydWN0dXJlJ3MKIAkJICoqIFRvcG9sb2d5IGFycmF5IGZvciB0aGUgdW5pdC4KIAkJICovCi0JCWlmIChSdXAgPj0gKHVzaG9ydCkgTUFYX1JVUCkgeworCQlpZiAoUnVwID49ICh1bnNpZ25lZCBzaG9ydCkgTUFYX1JVUCkgewogCQkJVGhpc1VuaXQgPSBIT1NUX0lEOwogCQkJVG9wUCA9IEhvc3RQLT5Ub3BvbG9neTsKIAkJCU15VHlwZSA9ICJIb3N0IjsKQEAgLTE1MSwxMSArMTQ0LDExIEBACiAJCQkgKiogaXQgd29uJ3QgbGllIGFib3V0IG5ldHdvcmsgaW50ZXJjb25uZWN0LCB0b3RhbCBkaXNjb25uZWN0cwogCQkJICoqIGFuZCBuby1JRHMuIChvciBhdCBsZWFzdCwgaXQgZG9lc24ndCAqbWF0dGVyKiBpZiBpdCBkb2VzKQogCQkJICovCi0JCQlpZiAoUkJZVEUoUGt0Q21kUC0+Um91dGVUb3BvbG9neVtUaGlzTGlua10uVW5pdCkgPiAodXNob3J0KSBNQVhfUlVQKQorCQkJaWYgKHJlYWRiKCZQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5W1RoaXNMaW5rXS5Vbml0KSA+ICh1bnNpZ25lZCBzaG9ydCkgTUFYX1JVUCkKIAkJCQljb250aW51ZTsKIAogCQkJZm9yIChOZXdMaW5rID0gVGhpc0xpbmtNaW47IE5ld0xpbmsgPCBUaGlzTGluazsgTmV3TGluaysrKSB7Ci0JCQkJaWYgKChSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5W1RoaXNMaW5rXS5Vbml0KSA9PSBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5W05ld0xpbmtdLlVuaXQpKSAmJiAoUkJZVEUoUGt0Q21kUC0+Um91dGVUb3BvbG9neVtUaGlzTGlua10uTGluaykgPT0gUkJZVEUoUGt0Q21kUC0+Um91dGVUb3BvbG9neVtOZXdMaW5rXS5MaW5rKSkpIHsKKwkJCQlpZiAoKHJlYWRiKCZQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5W1RoaXNMaW5rXS5Vbml0KSA9PSByZWFkYigmUGt0Q21kUC0+Um91dGVUb3BvbG9neVtOZXdMaW5rXS5Vbml0KSkgJiYgKHJlYWRiKCZQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5W1RoaXNMaW5rXS5MaW5rKSA9PSByZWFkYigmUGt0Q21kUC0+Um91dGVUb3BvbG9neVtOZXdMaW5rXS5MaW5rKSkpIHsKIAkJCQkJTGllcysrOwogCQkJCX0KIAkJCX0KQEAgLTE2NCwxMSArMTU3LDExIEBACiAJCWlmIChMaWVzKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUk9VVEUsICJMSUVTISBEQU1OIExJRVMhICVkIExJRVMhXG4iLCBMaWVzKTsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19ST1VURSwgIiVkOiVjICVkOiVjICVkOiVjICVkOiVjXG4iLAotCQkJCSAgICBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzBdLlVuaXQpLAotCQkJCSAgICAnQScgKyBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzBdLkxpbmspLAotCQkJCSAgICBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzFdLlVuaXQpLAotCQkJCSAgICAnQScgKyBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzFdLkxpbmspLCBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzJdLlVuaXQpLCAnQScgKyBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzJdLkxpbmspLCBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzNdLlVuaXQpLCAnQScgKyBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzNdLkxpbmspKTsKLQkJCXJldHVybiBUUlVFOworCQkJCSAgICByZWFkYigmUGt0Q21kUC0+Um91dGVUb3BvbG9neVswXS5Vbml0KSwKKwkJCQkgICAgJ0EnICsgcmVhZGIoJlBrdENtZFAtPlJvdXRlVG9wb2xvZ3lbMF0uTGluayksCisJCQkJICAgIHJlYWRiKCZQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzFdLlVuaXQpLAorCQkJCSAgICAnQScgKyByZWFkYigmUGt0Q21kUC0+Um91dGVUb3BvbG9neVsxXS5MaW5rKSwgcmVhZGIoJlBrdENtZFAtPlJvdXRlVG9wb2xvZ3lbMl0uVW5pdCksICdBJyArIHJlYWRiKCZQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5WzJdLkxpbmspLCByZWFkYigmUGt0Q21kUC0+Um91dGVUb3BvbG9neVszXS5Vbml0KSwgJ0EnICsgcmVhZGIoJlBrdENtZFAtPlJvdXRlVG9wb2xvZ3lbM10uTGluaykpOworCQkJcmV0dXJuIDE7CiAJCX0KIAogCQkvKgpAQCAtMTg0LDggKzE3Nyw4IEBACiAJCQkvKgogCQkJICoqIHRoaXMgaXMgd2hhdCBpdCBpcyBub3cgY29ubmVjdGVkIHRvCiAJCQkgKi8KLQkJCU5ld1VuaXQgPSBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5W1RoaXNMaW5rXS5Vbml0KTsKLQkJCU5ld0xpbmsgPSBSQllURShQa3RDbWRQLT5Sb3V0ZVRvcG9sb2d5W1RoaXNMaW5rXS5MaW5rKTsKKwkJCU5ld1VuaXQgPSByZWFkYigmUGt0Q21kUC0+Um91dGVUb3BvbG9neVtUaGlzTGlua10uVW5pdCk7CisJCQlOZXdMaW5rID0gcmVhZGIoJlBrdENtZFAtPlJvdXRlVG9wb2xvZ3lbVGhpc0xpbmtdLkxpbmspOwogCiAJCQlpZiAoT2xkVW5pdCAhPSBOZXdVbml0IHx8IE9sZExpbmsgIT0gTmV3TGluaykgewogCQkJCS8qCkBAIC0yMTksNyArMjEyLDcgQEAKIAogCQkJCQlpZiAoTmV3VW5pdCA9PSBST1VURV9JTlRFUkNPTk5FQ1QpIHsKIAkJCQkJCWlmICghcC0+UklPTm9NZXNzYWdlKQotCQkJCQkJCWNwcmludGYoIiVzICclcycgKCVjKSBpcyBjb25uZWN0ZWQgdG8gYW5vdGhlciBuZXR3b3JrLlxuIiwgTXlUeXBlLCBNeU5hbWUsICdBJyArIFRoaXNMaW5rKTsKKwkJCQkJCQlwcmludGsoS0VSTl9ERUJVRyAicmlvOiAlcyAnJXMnICglYykgaXMgY29ubmVjdGVkIHRvIGFub3RoZXIgbmV0d29yay5cbiIsIE15VHlwZSwgTXlOYW1lLCAnQScgKyBUaGlzTGluayk7CiAJCQkJCX0KIAogCQkJCQkvKgpAQCAtMjU4LDE4ICsyNTEsMTggQEAKIAkJCQlSSU9DaGVja0lzb2xhdGVkKHAsIEhvc3RQLCBPbGRVbml0KTsKIAkJCX0KIAkJfQotCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyoKIAkgKiogVGhlIG9ubHkgb3RoZXIgY29tbWFuZCB3ZSByZWNvZ25pc2UgaXMgYSByb3V0ZV9yZXF1ZXN0IGNvbW1hbmQKIAkgKi8KLQlpZiAoUkJZVEUoUGt0Q21kUC0+Q29tbWFuZCkgIT0gUk9VVEVfUkVRVUVTVCkgewotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUk9VVEUsICJVbmtub3duIGNvbW1hbmQgJWQgcmVjZWl2ZWQgb24gcnVwICVkIGhvc3QgJWQgUk9VVEVfUlVQXG4iLCBSQllURShQa3RDbWRQLT5Db21tYW5kKSwgUnVwLCAoaW50KSBIb3N0UCk7Ci0JCXJldHVybiBUUlVFOworCWlmIChyZWFkYigmUGt0Q21kUC0+Q29tbWFuZCkgIT0gUk9VVEVfUkVRVUVTVCkgeworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUk9VVEUsICJVbmtub3duIGNvbW1hbmQgJWQgcmVjZWl2ZWQgb24gcnVwICVkIGhvc3QgJXAgUk9VVEVfUlVQXG4iLCByZWFkYigmUGt0Q21kUC0+Q29tbWFuZCksIFJ1cCwgSG9zdFApOworCQlyZXR1cm4gMTsKIAl9CiAKLQlSdGFVbmlxID0gKFJCWVRFKFBrdENtZFAtPlVuaXFOdW1bMF0pKSArIChSQllURShQa3RDbWRQLT5VbmlxTnVtWzFdKSA8PCA4KSArIChSQllURShQa3RDbWRQLT5VbmlxTnVtWzJdKSA8PCAxNikgKyAoUkJZVEUoUGt0Q21kUC0+VW5pcU51bVszXSkgPDwgMjQpOworCVJ0YVVuaXEgPSAocmVhZGIoJlBrdENtZFAtPlVuaXFOdW1bMF0pKSArIChyZWFkYigmUGt0Q21kUC0+VW5pcU51bVsxXSkgPDwgOCkgKyAocmVhZGIoJlBrdENtZFAtPlVuaXFOdW1bMl0pIDw8IDE2KSArIChyZWFkYigmUGt0Q21kUC0+VW5pcU51bVszXSkgPDwgMjQpOwogCiAJLyoKIAkgKiogRGV0ZXJtaW5lIGlmIDggb3IgMTYgcG9ydCBSVEEKQEAgLTI3OCw3ICsyNzEsNyBAQAogCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1JPVVRFLCAiUmVjZWl2ZWQgYSByZXF1ZXN0IGZvciBhbiBJRCBmb3Igc2VyaWFsIG51bWJlciAleFxuIiwgUnRhVW5pcSk7CiAKLQlNb2QgPSBSQllURShQa3RDbWRQLT5Nb2R1bGVUeXBlcyk7CisJTW9kID0gcmVhZGIoJlBrdENtZFAtPk1vZHVsZVR5cGVzKTsKIAlNb2QxID0gTE9OWUJMRShNb2QpOwogCWlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpIHsKIAkJLyoKQEAgLTI5MiwxMCArMjg1LDYgQEAKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1JPVVRFLCAiTW9kdWxlIHR5cGVzIGFyZSAlcyAocG9ydHMgMC0zKSBhbmQgJXMgKHBvcnRzIDQtNylcbiIsIHAtPlJJT01vZHVsZVR5cGVzW01vZDFdLk5hbWUsIHAtPlJJT01vZHVsZVR5cGVzW01vZDJdLk5hbWUpOwogCX0KIAotCWlmIChSdGFVbmlxID09IDB4ZmZmZmZmZmYpIHsKLQkJU2hvd1BhY2tldChEQkdfU1BFQ0lBTCwgUGFja2V0UCk7Ci0JfQotCiAJLyoKIAkgKiogdHJ5IHRvIHVuaG9vayBhIGNvbW1hbmQgYmxvY2sgZnJvbSB0aGUgY29tbWFuZCBmcmVlIGxpc3QuCiAJICovCkBAIC0zMjAsNyArMzA5LDcgQEAKIAkJUGt0UmVwbHlQLT5Db21tYW5kID0gUk9VVEVfRk9BRDsKIAkJSG9zdFAtPkNvcHkoIlJUX0ZPQUQiLCBQa3RSZXBseVAtPkNvbW1hbmRUZXh0LCA3KTsKIAkJUklPUXVldWVDbWRCbGsoSG9zdFAsIFJ1cCwgQ21kQmxrUCk7Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gMTsKIAl9CiAKIAkvKgpAQCAtMzQ4LDEzICszMzcsMTMgQEAKIAkJCWlmICgoSG9zdFAtPk1hcHBpbmdbVGhpc1VuaXRdLkZsYWdzICYgU0xPVF9JTl9VU0UpICYmICEoSG9zdFAtPk1hcHBpbmdbVGhpc1VuaXRdLkZsYWdzICYgUlRBX0JPT1RFRCkpIHsKIAkJCQlpZiAoIShIb3N0UC0+TWFwcGluZ1tUaGlzVW5pdF0uRmxhZ3MgJiBNU0dfRE9ORSkpIHsKIAkJCQkJaWYgKCFwLT5SSU9Ob01lc3NhZ2UpCi0JCQkJCQljcHJpbnRmKCJSVEEgJyVzJyBpcyBiZWluZyB1cGRhdGVkLlxuIiwgSG9zdFAtPk1hcHBpbmdbVGhpc1VuaXRdLk5hbWUpOworCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgInJpbzogUlRBICclcycgaXMgYmVpbmcgdXBkYXRlZC5cbiIsIEhvc3RQLT5NYXBwaW5nW1RoaXNVbml0XS5OYW1lKTsKIAkJCQkJSG9zdFAtPk1hcHBpbmdbVGhpc1VuaXRdLkZsYWdzIHw9IE1TR19ET05FOwogCQkJCX0KIAkJCQlQa3RSZXBseVAtPkNvbW1hbmQgPSBST1VURV9GT0FEOwogCQkJCUhvc3RQLT5Db3B5KCJSVF9GT0FEIiwgUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgNyk7CiAJCQkJUklPUXVldWVDbWRCbGsoSG9zdFAsIFJ1cCwgQ21kQmxrUCk7Ci0JCQkJcmV0dXJuIFRSVUU7CisJCQkJcmV0dXJuIDE7CiAJCQl9CiAKIAkJCS8qCkBAIC00NDcsNyArNDM2LDcgQEAKIAkJCS8qCiAJCQkgKiogSm9iIGRvbmUsIGdldCBvbiB3aXRoIHRoZSBpbnRlcnJ1cHRzIQogCQkJICovCi0JCQlyZXR1cm4gVFJVRTsKKwkJCXJldHVybiAxOwogCQl9CiAJfQogCS8qCkBAIC00NzUsNyArNDY0LDcgQEAKIAogCQlpZiAoIVVua25vd25NZXNnRG9uZSkgewogCQkJaWYgKCFwLT5SSU9Ob01lc3NhZ2UpCi0JCQkJY3ByaW50ZigiT25lIG9yIG1vcmUgdW5rbm93biBSVEFzIGFyZSBiZWluZyB1cGRhdGVkLlxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInJpbzogT25lIG9yIG1vcmUgdW5rbm93biBSVEFzIGFyZSBiZWluZyB1cGRhdGVkLlxuIik7CiAJCQlVbmtub3duTWVzZ0RvbmUgPSAxOwogCQl9CiAKQEAgLTQ5MSwyOCArNDgwLDI1IEBACiAJCWlmIChSdGFUeXBlID09IFRZUEVfUlRBMTYpIHsKIAkJCWlmIChSSU9GaW5kRnJlZUlEKHAsIEhvc3RQLCAmVGhpc1VuaXQsICZUaGlzVW5pdDIpID09IDApIHsKIAkJCQlSSU9EZWZhdWx0TmFtZShwLCBIb3N0UCwgVGhpc1VuaXQpOwotCQkJCUZpbGxTbG90KFRoaXNVbml0LCBUaGlzVW5pdDIsIFJ0YVVuaXEsIEhvc3RQKTsKKwkJCQlyaW9fZmlsbF9ob3N0X3Nsb3QoVGhpc1VuaXQsIFRoaXNVbml0MiwgUnRhVW5pcSwgSG9zdFApOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKFJJT0ZpbmRGcmVlSUQocCwgSG9zdFAsICZUaGlzVW5pdCwgTlVMTCkgPT0gMCkgewogCQkJCVJJT0RlZmF1bHROYW1lKHAsIEhvc3RQLCBUaGlzVW5pdCk7Ci0JCQkJRmlsbFNsb3QoVGhpc1VuaXQsIDAsIFJ0YVVuaXEsIEhvc3RQKTsKKwkJCQlyaW9fZmlsbF9ob3N0X3Nsb3QoVGhpc1VuaXQsIDAsIFJ0YVVuaXEsIEhvc3RQKTsKIAkJCX0KIAkJfQogCQlQa3RSZXBseVAtPkNvbW1hbmQgPSBST1VURV9VU0VEOwogCQlIb3N0UC0+Q29weSgiUlRfVVNFRCIsIFBrdFJlcGx5UC0+Q29tbWFuZFRleHQsIDcpOwogCX0KIAlSSU9RdWV1ZUNtZEJsayhIb3N0UCwgUnVwLCBDbWRCbGtQKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gMTsKIH0KIAogCi12b2lkIFJJT0ZpeFBoYnMocCwgSG9zdFAsIHVuaXQpCi1zdHJ1Y3QgcmlvX2luZm8gKnA7Ci1zdHJ1Y3QgSG9zdCAqSG9zdFA7Ci11aW50IHVuaXQ7Cit2b2lkIFJJT0ZpeFBoYnMoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHVuc2lnbmVkIGludCB1bml0KQogewotCXVzaG9ydCBsaW5rLCBwb3J0OworCXVuc2lnbmVkIHNob3J0IGxpbmssIHBvcnQ7CiAJc3RydWN0IFBvcnQgKlBvcnRQOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IFBvcnROID0gSG9zdFAtPk1hcHBpbmdbdW5pdF0uU3lzUG9ydDsKQEAgLTUyMCwxOSArNTA2LDE5IEBACiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1JPVVRFLCAiUklPRml4UGhicyB1bml0ICVkIHN5c3BvcnQgJWRcbiIsIHVuaXQsIFBvcnROKTsKIAogCWlmIChQb3J0TiAhPSAtMSkgewotCQl1c2hvcnQgZGVzdF91bml0ID0gSG9zdFAtPk1hcHBpbmdbdW5pdF0uSUQyOworCQl1bnNpZ25lZCBzaG9ydCBkZXN0X3VuaXQgPSBIb3N0UC0+TWFwcGluZ1t1bml0XS5JRDI7CiAKIAkJLyoKIAkJICoqIEdldCB0aGUgbGluayBudW1iZXIgdXNlZCBmb3IgdGhlIDFzdCA4IHBoYnMgb24gdGhpcyB1bml0LgogCQkgKi8KIAkJUG9ydFAgPSBwLT5SSU9Qb3J0cFtIb3N0UC0+TWFwcGluZ1tkZXN0X3VuaXQgLSAxXS5TeXNQb3J0XTsKIAotCQlsaW5rID0gUldPUkQoUG9ydFAtPlBoYlAtPmxpbmspOworCQlsaW5rID0gcmVhZHcoJlBvcnRQLT5QaGJQLT5saW5rKTsKIAogCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVFNfUEVSX1JUQTsgcG9ydCsrLCBQb3J0TisrKSB7Ci0JCQl1c2hvcnQgZGVzdF9wb3J0ID0gcG9ydCArIDg7Ci0JCQlXT1JEICpUeFBrdFA7Ci0JCQlQS1QgKlBrdDsKKwkJCXVuc2lnbmVkIHNob3J0IGRlc3RfcG9ydCA9IHBvcnQgKyA4OworCQkJdTE2ICpUeFBrdFA7CisJCQlzdHJ1Y3QgUEtUICpQa3Q7CiAKIAkJCVBvcnRQID0gcC0+UklPUG9ydHBbUG9ydE5dOwogCkBAIC01NjksMTggKzU1NSwxOCBAQAogCQkJCSAqKiBjYXJkLiBUaGlzIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgaW50byBhIDMyIGJpdCBwb2ludGVyCiAJCQkJICoqIHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBkcml2ZXIuCiAJCQkJICovCi0JCQkJUGt0ID0gKFBLVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgUklORFcoVHhQa3RQKSk7CisJCQkJUGt0ID0gKHN0cnVjdCBQS1QgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KFR4UGt0UCkpOwogCiAJCQkJLyoKIAkJCQkgKiogSWYgdGhlIHBhY2tldCBpcyB1c2VkLCByZXNldCBpdC4KIAkJCQkgKi8KLQkJCQlQa3QgPSAoUEtUICopICgodWludCkgUGt0ICYgflBLVF9JTl9VU0UpOwotCQkJCVdCWVRFKFBrdC0+ZGVzdF91bml0LCBkZXN0X3VuaXQpOwotCQkJCVdCWVRFKFBrdC0+ZGVzdF9wb3J0LCBkZXN0X3BvcnQpOworCQkJCVBrdCA9IChzdHJ1Y3QgUEtUICopICgodW5zaWduZWQgbG9uZykgUGt0ICYgflBLVF9JTl9VU0UpOworCQkJCXdyaXRlYihkZXN0X3VuaXQsICZQa3QtPmRlc3RfdW5pdCk7CisJCQkJd3JpdGViKGRlc3RfcG9ydCwgJlBrdC0+ZGVzdF9wb3J0KTsKIAkJCX0KLQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19ST1VURSwgInBoYiBkZXN0OiBPbGQgJXg6JXggTmV3ICV4OiV4XG4iLCBSV09SRChQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24pICYgMHhmZiwgKFJXT1JEKFBvcnRQLT5QaGJQLT5kZXN0aW5hdGlvbikgPj4gOCkgJiAweGZmLCBkZXN0X3VuaXQsIGRlc3RfcG9ydCk7Ci0JCQlXV09SRChQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24sIGRlc3RfdW5pdCArIChkZXN0X3BvcnQgPDwgOCkpOwotCQkJV1dPUkQoUG9ydFAtPlBoYlAtPmxpbmssIGxpbmspOworCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1JPVVRFLCAicGhiIGRlc3Q6IE9sZCAleDoleCBOZXcgJXg6JXhcbiIsIHJlYWR3KCZQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24pICYgMHhmZiwgKHJlYWR3KCZQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24pID4+IDgpICYgMHhmZiwgZGVzdF91bml0LCBkZXN0X3BvcnQpOworCQkJd3JpdGV3KGRlc3RfdW5pdCArIChkZXN0X3BvcnQgPDwgOCksICZQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24pOworCQkJd3JpdGV3KGxpbmssICZQb3J0UC0+UGhiUC0+bGluayk7CiAKIAkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCQl9CkBAIC01OTAsOSArNTc2LDkgQEAKIAkJICovCiAJCWlmIChsaW5rID4gMykKIAkJCXJldHVybjsKLQkJaWYgKCgodW5pdCAqIDgpICsgNykgPiBSV09SRChIb3N0UC0+TGlua1N0clBbbGlua10ubGFzdF9wb3J0KSkgeworCQlpZiAoKCh1bml0ICogOCkgKyA3KSA+IHJlYWR3KCZIb3N0UC0+TGlua1N0clBbbGlua10ubGFzdF9wb3J0KSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1JPVVRFLCAibGFzdCBwb3J0IG9uIGhvc3QgbGluayAlZDogJWRcbiIsIGxpbmssICh1bml0ICogOCkgKyA3KTsKLQkJCVdXT1JEKEhvc3RQLT5MaW5rU3RyUFtsaW5rXS5sYXN0X3BvcnQsICh1bml0ICogOCkgKyA3KTsKKwkJCXdyaXRldygodW5pdCAqIDgpICsgNywgJkhvc3RQLT5MaW5rU3RyUFtsaW5rXS5sYXN0X3BvcnQpOwogCQl9CiAJfQogfQpAQCAtNjAzLDEwICs1ODksNyBAQAogKiogdGhlIHdvcmxkIGFib3V0IGl0LiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRvcgogKiogb25seSBnZXRzIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpcyBnb2luZyBvbi4KICovCi1zdGF0aWMgaW50IFJJT0NoZWNrSXNvbGF0ZWQocCwgSG9zdFAsIFVuaXRJZCkKLXN0cnVjdCByaW9faW5mbyAqcDsKLXN0cnVjdCBIb3N0ICpIb3N0UDsKLXVpbnQgVW5pdElkOworc3RhdGljIGludCBSSU9DaGVja0lzb2xhdGVkKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IEhvc3QgKkhvc3RQLCB1bnNpZ25lZCBpbnQgVW5pdElkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZIb3N0UC0+SG9zdExvY2ssIGZsYWdzKTsKQEAgLTYyOCwxMiArNjExLDkgQEAKICoqIGFsbCB0aGUgdW5pdHMgYXR0YWNoZWQgdG8gaXQuIFRoaXMgd2lsbCBtZWFuIHRoYXQgdGhlIGVudGlyZQogKiogc3VibmV0IHdpbGwgcmUtaW50cm9kdWNlIGl0c2VsZi4KICovCi1zdGF0aWMgaW50IFJJT0lzb2xhdGUocCwgSG9zdFAsIFVuaXRJZCkKLXN0cnVjdCByaW9faW5mbyAqcDsKLXN0cnVjdCBIb3N0ICpIb3N0UDsKLXVpbnQgVW5pdElkOworc3RhdGljIGludCBSSU9Jc29sYXRlKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IEhvc3QgKkhvc3RQLCB1bnNpZ25lZCBpbnQgVW5pdElkKQogewotCXVpbnQgbGluaywgdW5pdDsKKwl1bnNpZ25lZCBpbnQgbGluaywgdW5pdDsKIAogCVVuaXRJZC0tOwkJLyogdGhpcyB0cmljayByZWxpZXMgb24gdGhlIFVuaXQgSWQgYmVpbmcgVU5TSUdORUQhICovCiAKQEAgLTY1OCw5ICs2MzgsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IFJJT0NoZWNrKEhvc3RQLCBVbml0SWQpCi1zdHJ1Y3QgSG9zdCAqSG9zdFA7Ci11aW50IFVuaXRJZDsKK3N0YXRpYyBpbnQgUklPQ2hlY2soc3RydWN0IEhvc3QgKkhvc3RQLCB1bnNpZ25lZCBpbnQgVW5pdElkKQogewogCXVuc2lnbmVkIGNoYXIgbGluazsKIApAQCAtNzE0LDggKzY5Miw3IEBACiAqKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHVuaXQgKGhvc3QsIDE2LzggcG9ydCBSVEEpCiAqLwogCi11aW50IEdldFVuaXRUeXBlKFVuaXEpCi11aW50IFVuaXE7Cit1bnNpZ25lZCBpbnQgR2V0VW5pdFR5cGUodW5zaWduZWQgaW50IFVuaXEpCiB7CiAJc3dpdGNoICgoVW5pcSA+PiAyOCkgJiAweGYpIHsKIAljYXNlIFJJT19BVDoKQEAgLTczNiw4ICs3MTMsNyBAQAogCX0KIH0KIAotaW50IFJJT1NldENoYW5nZShwKQotc3RydWN0IHJpb19pbmZvICpwOworaW50IFJJT1NldENoYW5nZShzdHJ1Y3QgcmlvX2luZm8gKnApCiB7CiAJaWYgKHAtPlJJT1F1aWNrQ2hlY2sgIT0gTk9UX0NIQU5HRUQpCiAJCXJldHVybiAoMCk7CkBAIC03NTEsMTQgKzcyNywxMyBAQAogCXJldHVybiAoMCk7CiB9CiAKLXN0YXRpYyB2b2lkIFJJT0NvbkNvbihwLCBIb3N0UCwgRnJvbUlkLCBGcm9tTGluaywgVG9JZCwgVG9MaW5rLCBDaGFuZ2UpCi1zdHJ1Y3QgcmlvX2luZm8gKnA7Ci1zdHJ1Y3QgSG9zdCAqSG9zdFA7Ci11aW50IEZyb21JZDsKLXVpbnQgRnJvbUxpbms7Ci11aW50IFRvSWQ7Ci11aW50IFRvTGluazsKLWludCBDaGFuZ2U7CitzdGF0aWMgdm9pZCBSSU9Db25Db24oc3RydWN0IHJpb19pbmZvICpwLAorCQkgICAgICBzdHJ1Y3QgSG9zdCAqSG9zdFAsCisJCSAgICAgIHVuc2lnbmVkIGludCBGcm9tSWQsCisJCSAgICAgIHVuc2lnbmVkIGludCBGcm9tTGluaywKKwkJICAgICAgdW5zaWduZWQgaW50IFRvSWQsCisJCSAgICAgIHVuc2lnbmVkIGludCBUb0xpbmssCisJCSAgICAgIGludCBDaGFuZ2UpCiB7CiAJY2hhciAqRnJvbU5hbWU7CiAJY2hhciAqRnJvbVR5cGU7CkBAIC04MTgsNyArNzkzLDcgQEAKIAlUb1R5cGUgPSBUb0lkID8gIlJUQSIgOiAiSE9TVCI7CiAKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfUk9VVEUsICJMaW5rIGJldHdlZW4gJXMgJyVzJyAoJWMpIGFuZCAlcyAnJXMnICglYykgJXMuXG4iLCBGcm9tVHlwZSwgRnJvbU5hbWUsICdBJyArIEZyb21MaW5rLCBUb1R5cGUsIFRvTmFtZSwgJ0EnICsgVG9MaW5rLCAoQ2hhbmdlID09IENPTk5FQ1QpID8gImVzdGFibGlzaGVkIiA6ICJkaXNjb25uZWN0ZWQiKTsKLQljcHJpbnRmKCJMaW5rIGJldHdlZW4gJXMgJyVzJyAoJWMpIGFuZCAlcyAnJXMnICglYykgJXMuXG4iLCBGcm9tVHlwZSwgRnJvbU5hbWUsICdBJyArIEZyb21MaW5rLCBUb1R5cGUsIFRvTmFtZSwgJ0EnICsgVG9MaW5rLCAoQ2hhbmdlID09IENPTk5FQ1QpID8gImVzdGFibGlzaGVkIiA6ICJkaXNjb25uZWN0ZWQiKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicmlvOiBMaW5rIGJldHdlZW4gJXMgJyVzJyAoJWMpIGFuZCAlcyAnJXMnICglYykgJXMuXG4iLCBGcm9tVHlwZSwgRnJvbU5hbWUsICdBJyArIEZyb21MaW5rLCBUb1R5cGUsIFRvTmFtZSwgJ0EnICsgVG9MaW5rLCAoQ2hhbmdlID09IENPTk5FQ1QpID8gImVzdGFibGlzaGVkIiA6ICJkaXNjb25uZWN0ZWQiKTsKIH0KIAogLyoKQEAgLTgzOCw3ICs4MTMsNyBAQAogCSAqLwogCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IFRPVEFMX01BUF9FTlRSSUVTOyBlbnRyeSsrKSB7CiAJCWlmIChwLT5SSU9TYXZlZFRhYmxlW2VudHJ5XS5SdGFVbmlxdWVOdW0gPT0gcE1hcC0+UnRhVW5pcXVlTnVtKSB7Ci0JCQliemVybygoY2FkZHJfdCkgJiBwLT5SSU9TYXZlZFRhYmxlW2VudHJ5XSwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKKwkJCW1lbXNldCgmcC0+UklPU2F2ZWRUYWJsZVtlbnRyeV0sIDAsIHNpemVvZihzdHJ1Y3QgTWFwKSk7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC04OTgsNyArODczLDcgQEAKIAkJaW50IG5PdGhlciA9IChIb3N0UC0+TWFwcGluZ1t1bml0XS5JRDIpIC0gMTsKIAogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfUk9VVEUsICJSaW9GcmVlZGlzIHNlY29uZCBzbG90ICVkLlxuIiwgbk90aGVyKTsKLQkJYnplcm8oKGNhZGRyX3QpICYgSG9zdFAtPk1hcHBpbmdbbk90aGVyXSwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKKwkJbWVtc2V0KCZIb3N0UC0+TWFwcGluZ1tuT3RoZXJdLCAwLCBzaXplb2Yoc3RydWN0IE1hcCkpOwogCX0KIAlSSU9SZW1vdmVGcm9tU2F2ZWRUYWJsZShwLCAmSG9zdFAtPk1hcHBpbmdbdW5pdF0pOwogCkBAIC05MTIsNyArODg3LDggQEAKICoqIFRoaXMgZnVuY3Rpb24gc2NhbnMgdGhlIGdpdmVuIGhvc3QgdGFibGUgZm9yIGVpdGhlciBvbmUKICoqIG9yIHR3byBmcmVlIHVuaXQgSUQncy4KICovCi1pbnQgUklPRmluZEZyZWVJRChzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgdWludCAqIHBJRDEsIHVpbnQgKiBwSUQyKQorCitpbnQgUklPRmluZEZyZWVJRChzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgdW5zaWduZWQgaW50ICogcElEMSwgdW5zaWduZWQgaW50ICogcElEMikKIHsKIAlpbnQgdW5pdCwgdGVtcElEOwogCkBAIC05OTcsNyArOTczLDcgQEAKIAkJCQkvKgogCQkJCSAqKiBDbGVhciBvdXQgdGhpcyBzbG90IG5vdyB0aGF0IHdlIGludGVuZCB0byB1c2UgaXQuCiAJCQkJICovCi0JCQkJYnplcm8oJkhvc3RQLT5NYXBwaW5nW3VuaXRdLCBzaXplb2Yoc3RydWN0IE1hcCkpOworCQkJCW1lbXNldCgmSG9zdFAtPk1hcHBpbmdbdW5pdF0sIDAsIHNpemVvZihzdHJ1Y3QgTWFwKSk7CiAKIAkJCQkvKgogCQkJCSAqKiBJZiB0aGUgc2Vjb25kIElEIGlzIG5vdCBuZWVkZWQgdGhlbiB3ZSBjYW4gcmV0dXJuCkBAIC0xMDE1LDcgKzk5MSw3IEBACiAJCQkJLyoKIAkJCQkgKiogQ2xlYXIgb3V0IHRoaXMgc2xvdCBub3cgdGhhdCB3ZSBpbnRlbmQgdG8gdXNlIGl0LgogCQkJCSAqLwotCQkJCWJ6ZXJvKCZIb3N0UC0+TWFwcGluZ1t1bml0XSwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKKwkJCQltZW1zZXQoJkhvc3RQLT5NYXBwaW5nW3VuaXRdLCAwLCBzaXplb2Yoc3RydWN0IE1hcCkpOwogCiAJCQkJLyogQXQgdGhpcyBwb2ludCB1bmRlciB0aGUgcmlnaHQod3Jvbmc/KSBjb25kaXRpb25zCiAJCQkJICoqIHdlIG1heSBoYXZlIGEgZmlyc3QgdW5pdCBJRCBiZWluZyBoaWdoZXIgdGhhbiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdGFibGUuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdGFibGUuYwppbmRleCBhODZiMjE2Li5kM2FiZTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90YWJsZS5jCkBAIC01MywxNSArNTMsMTIgQEAKIAogI2luY2x1ZGUgImxpbnV4X2NvbXBhdC5oIgogI2luY2x1ZGUgInJpb19saW51eC5oIgotI2luY2x1ZGUgInR5cGRlZi5oIgogI2luY2x1ZGUgInBrdC5oIgogI2luY2x1ZGUgImRhZW1vbi5oIgogI2luY2x1ZGUgInJpby5oIgogI2luY2x1ZGUgInJpb3NwYWNlLmgiCi0jaW5jbHVkZSAidG9wLmgiCiAjaW5jbHVkZSAiY21kcGt0LmgiCiAjaW5jbHVkZSAibWFwLmgiCi0jaW5jbHVkZSAicmlvdHlwZXMuaCIKICNpbmNsdWRlICJydXAuaCIKICNpbmNsdWRlICJwb3J0LmgiCiAjaW5jbHVkZSAicmlvZHJ2ci5oIgpAQCAtNzQsMjUgKzcxLDIwIEBACiAjaW5jbHVkZSAidW5peHJ1cC5oIgogI2luY2x1ZGUgImJvYXJkLmgiCiAjaW5jbHVkZSAiaG9zdC5oIgotI2luY2x1ZGUgImVycm9yLmgiCiAjaW5jbHVkZSAicGhiLmgiCiAjaW5jbHVkZSAibGluay5oIgogI2luY2x1ZGUgImNtZGJsay5oIgogI2luY2x1ZGUgInJvdXRlLmgiCi0jaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgImNpcnJ1cy5oIgogI2luY2x1ZGUgInJpb2lvY3RsLmgiCiAjaW5jbHVkZSAicGFyYW0uaCIKLSNpbmNsdWRlICJsaXN0LmgiCi0jaW5jbHVkZSAic2FtLmgiCiAjaW5jbHVkZSAicHJvdHN0cy5oIgogCiAvKgogKiogQSBjb25maWd1cmF0aW9uIHRhYmxlIGhhcyBiZWVuIGxvYWRlZC4gSXQgaXMgbm93IHVwIHRvIHVzCiAqKiB0byBzb3J0IGl0IG91dCBhbmQgdXNlIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgdGhlcmVpbi4KICovCi1pbnQgUklPTmV3VGFibGUocCkKLXN0cnVjdCByaW9faW5mbyAqcDsKK2ludCBSSU9OZXdUYWJsZShzdHJ1Y3QgcmlvX2luZm8gKnApCiB7CiAJaW50IEhvc3QsIEhvc3QxLCBIb3N0MiwgTmFtZUlzVW5pcXVlLCBFbnRyeSwgU3ViRW50OwogCXN0cnVjdCBNYXAgKk1hcFA7CkBAIC0xMzcsNyArMTI5LDcgQEAKIAkJCWNwdHIgPSBNYXBQLT5OYW1lOwkvKiAoMikgKi8KIAkJCWNwdHJbTUFYX05BTUVfTEVOIC0gMV0gPSAnXDAnOwogCQkJaWYgKGNwdHJbMF0gPT0gJ1wwJykgewotCQkJCWJjb3B5KE1hcFAtPlJ0YVVuaXF1ZU51bSA/ICJSVEEJTk4iIDogIkhPU1QgTk4iLCBNYXBQLT5OYW1lLCA4KTsKKwkJCQltZW1jcHkoTWFwUC0+TmFtZSwgTWFwUC0+UnRhVW5pcXVlTnVtID8gIlJUQQlOTiIgOiAiSE9TVCBOTiIsIDgpOwogCQkJCU1hcFAtPk5hbWVbNV0gPSAnMCcgKyBFbnRyeSAvIDEwOwogCQkJCU1hcFAtPk5hbWVbNl0gPSAnMCcgKyBFbnRyeSAlIDEwOwogCQkJfQpAQCAtMjk4LDkgKzI5MCw5IEBACiAJICovCiAJZm9yIChIb3N0ID0gMDsgSG9zdCA8IFJJT19IT1NUUzsgSG9zdCsrKSB7CiAJCWZvciAoRW50cnkgPSAwOyBFbnRyeSA8IE1BWF9SVVA7IEVudHJ5KyspIHsKLQkJCWJ6ZXJvKChjYWRkcl90KSAmIHAtPlJJT0hvc3RzW0hvc3RdLk1hcHBpbmdbRW50cnldLCBzaXplb2Yoc3RydWN0IE1hcCkpOworCQkJbWVtc2V0KCZwLT5SSU9Ib3N0c1tIb3N0XS5NYXBwaW5nW0VudHJ5XSwgMCwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKIAkJfQotCQliemVybygoY2FkZHJfdCkgJiBwLT5SSU9Ib3N0c1tIb3N0XS5OYW1lWzBdLCBzaXplb2YocC0+UklPSG9zdHNbSG9zdF0uTmFtZSkpOworCQltZW1zZXQoJnAtPlJJT0hvc3RzW0hvc3RdLk5hbWVbMF0sIDAsIHNpemVvZihwLT5SSU9Ib3N0c1tIb3N0XS5OYW1lKSk7CiAJfQogCiAJLyoKQEAgLTMyNiw3ICszMTgsNyBAQAogCQkgKi8KIAkJaWYgKE1hcFAtPklEID09IDApIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UQUJMRSwgIkhvc3QgZW50cnkgZm91bmQuIE5hbWUgJXNcbiIsIE1hcFAtPk5hbWUpOwotCQkJYmNvcHkoTWFwUC0+TmFtZSwgSG9zdFAtPk5hbWUsIE1BWF9OQU1FX0xFTik7CisJCQltZW1jcHkoSG9zdFAtPk5hbWUsIE1hcFAtPk5hbWUsIE1BWF9OQU1FX0xFTik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zNzAsNyArMzYyLDcgQEAKIAkJCX0KIAkJfQogCQlpZiAoIXAtPlJJT0hvc3RzW0hvc3RdLk5hbWVbMF0pIHsKLQkJCWJjb3B5KCJIT1NUIDEiLCBwLT5SSU9Ib3N0c1tIb3N0XS5OYW1lLCA3KTsKKwkJCW1lbWNweShwLT5SSU9Ib3N0c1tIb3N0XS5OYW1lLCAiSE9TVCAxIiwgNyk7CiAJCQlwLT5SSU9Ib3N0c1tIb3N0XS5OYW1lWzVdICs9IEhvc3Q7CiAJCX0KIAkJLyoKQEAgLTM5OCw3ICszOTAsNyBAQAogCQkgKi8KIAkJaWYgKEhvc3QxICE9IEhvc3QpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UQUJMRSwgIkRlZmF1bHQgbmFtZSAlcyBhbHJlYWR5IHVzZWRcbiIsIHAtPlJJT0hvc3RzW0hvc3RdLk5hbWUpOwotCQkJYmNvcHkoIkhPU1QgMSIsIHAtPlJJT0hvc3RzW0hvc3RdLk5hbWUsIDcpOworCQkJbWVtY3B5KHAtPlJJT0hvc3RzW0hvc3RdLk5hbWUsICJIT1NUIDEiLCA3KTsKIAkJCXAtPlJJT0hvc3RzW0hvc3RdLk5hbWVbNV0gKz0gSG9zdDE7CiAJCX0KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RBQkxFLCAiQXNzaWduaW5nIGRlZmF1bHQgbmFtZSAlc1xuIiwgcC0+UklPSG9zdHNbSG9zdF0uTmFtZSk7CkBAIC00MDksOSArNDAxLDEwIEBACiAvKgogKiogVXNlciBwcm9jZXNzIG5lZWRzIHRoZSBjb25maWcgdGFibGUgLSBidWlsZCBpdCBmcm9tIGZpcnN0CiAqKiBwcmluY2lwbGVzLgorKioKKyoJRklYTUU6IFNNUCBsb2NraW5nCiAqLwotaW50IFJJT0FwZWwocCkKLXN0cnVjdCByaW9faW5mbyAqcDsKK2ludCBSSU9BcGVsKHN0cnVjdCByaW9faW5mbyAqcCkKIHsKIAlpbnQgSG9zdDsKIAlpbnQgbGluazsKQEAgLTQxOSwxNyArNDEyLDE3IEBACiAJaW50IE5leHQgPSAwOwogCXN0cnVjdCBNYXAgKk1hcFA7CiAJc3RydWN0IEhvc3QgKkhvc3RQOwotCWxvbmcgb2xkc3BsOwotCi0JZGlzYWJsZShvbGRzcGwpOwkvKiBzdHJhbmdlIGJ1dCB0cnVlISAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJHZW5lcmF0aW5nIGEgdGFibGUgdG8gcmV0dXJuIHRvIGNvbmZpZy5yaW9cbiIpOwogCi0JYnplcm8oKGNhZGRyX3QpICYgcC0+UklPQ29ubmVjdFRhYmxlWzBdLCBzaXplb2Yoc3RydWN0IE1hcCkgKiBUT1RBTF9NQVBfRU5UUklFUyk7CisJbWVtc2V0KCZwLT5SSU9Db25uZWN0VGFibGVbMF0sIDAsIHNpemVvZihzdHJ1Y3QgTWFwKSAqIFRPVEFMX01BUF9FTlRSSUVTKTsKIAogCWZvciAoSG9zdCA9IDA7IEhvc3QgPCBSSU9fSE9TVFM7IEhvc3QrKykgewogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJQcm9jZXNzaW5nIGhvc3QgJWRcbiIsIEhvc3QpOwogCQlIb3N0UCA9ICZwLT5SSU9Ib3N0c1tIb3N0XTsKKwkJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZIb3N0UC0+SG9zdExvY2ssIGZsYWdzKTsKKwogCQlNYXBQID0gJnAtPlJJT0Nvbm5lY3RUYWJsZVtOZXh0KytdOwogCQlNYXBQLT5Ib3N0VW5pcXVlTnVtID0gSG9zdFAtPlVuaXF1ZU51bTsKIAkJaWYgKChIb3N0UC0+RmxhZ3MgJiBSVU5fU1RBVEUpICE9IFJDX1JVTk5JTkcpCkBAIC00NDAsNyArNDMzLDcgQEAKIAkJTWFwUC0+U3lzUG9ydCA9IE5PX1BPUlQ7CiAJCWZvciAobGluayA9IDA7IGxpbmsgPCBMSU5LU19QRVJfVU5JVDsgbGluaysrKQogCQkJTWFwUC0+VG9wb2xvZ3lbbGlua10gPSBIb3N0UC0+VG9wb2xvZ3lbbGlua107Ci0JCWJjb3B5KEhvc3RQLT5OYW1lLCBNYXBQLT5OYW1lLCBNQVhfTkFNRV9MRU4pOworCQltZW1jcHkoTWFwUC0+TmFtZSwgSG9zdFAtPk5hbWUsIE1BWF9OQU1FX0xFTik7CiAJCWZvciAoUnVwID0gMDsgUnVwIDwgTUFYX1JVUDsgUnVwKyspIHsKIAkJCWlmIChIb3N0UC0+TWFwcGluZ1tSdXBdLkZsYWdzICYgKFNMT1RfSU5fVVNFIHwgU0xPVF9URU5UQVRJVkUpKSB7CiAJCQkJcC0+UklPQ29ubmVjdFRhYmxlW05leHRdID0gSG9zdFAtPk1hcHBpbmdbUnVwXTsKQEAgLTQ1Myw4ICs0NDYsOCBAQAogCQkJCU5leHQrKzsKIAkJCX0KIAkJfQorCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmSG9zdFAtPkhvc3RMb2NrLCBmbGFncyk7CiAJfQotCXJlc3RvcmUob2xkc3BsKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYzLDkgKzQ1Niw3IEBACiAqKiBpZiB0aGUgZW50cnkgaXMgc3VpdGFibHkgaW5hY3RpdmUsIHRoZW4gd2UgY2FuIGdvYiBvbiBpdCBhbmQgcmVtb3ZlCiAqKiBpdCBmcm9tIHRoZSB0YWJsZS4KICovCi1pbnQgUklPRGVsZXRlUnRhKHAsIE1hcFApCi1zdHJ1Y3QgcmlvX2luZm8gKnA7Ci1zdHJ1Y3QgTWFwICpNYXBQOworaW50IFJJT0RlbGV0ZVJ0YShzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBNYXAgKk1hcFApCiB7CiAJaW50IGhvc3QsIGVudHJ5LCBwb3J0LCBsaW5rOwogCWludCBTeXNQb3J0OwpAQCAtNTQxLDEwICs1MzIsMTAgQEAKIAkJCQkJCSAqKiB0aGUgcGhiIHRvIHBvcnQgbWFwcGluZ3MgaW4gUklPUm91dGVSdXAuCiAJCQkJCQkgKi8KIAkJCQkJCWlmIChQb3J0UC0+U2Vjb25kQmxvY2spIHsKLQkJCQkJCQl1c2hvcnQgZGVzdF91bml0ID0gSG9zdE1hcFAtPklEOwotCQkJCQkJCXVzaG9ydCBkZXN0X3BvcnQgPSBwb3J0IC0gU3lzUG9ydDsKLQkJCQkJCQlXT1JEICpUeFBrdFA7Ci0JCQkJCQkJUEtUICpQa3Q7CisJCQkJCQkJdTE2IGRlc3RfdW5pdCA9IEhvc3RNYXBQLT5JRDsKKwkJCQkJCQl1MTYgZGVzdF9wb3J0ID0gcG9ydCAtIFN5c1BvcnQ7CisJCQkJCQkJdTE2ICpUeFBrdFA7CisJCQkJCQkJc3RydWN0IFBLVCAqUGt0OwogCiAJCQkJCQkJZm9yIChUeFBrdFAgPSBQb3J0UC0+VHhTdGFydDsgVHhQa3RQIDw9IFBvcnRQLT5UeEVuZDsgVHhQa3RQKyspIHsKIAkJCQkJCQkJLyoKQEAgLTU1NCwxOSArNTQ1LDE5IEBACiAJCQkJCQkJCSAqKiBhIDMyIGJpdCBwb2ludGVyIHNvIGl0IGNhbiBiZQogCQkJCQkJCQkgKiogYWNjZXNzZWQgZnJvbSB0aGUgZHJpdmVyLgogCQkJCQkJCQkgKi8KLQkJCQkJCQkJUGt0ID0gKFBLVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgUldPUkQoKlR4UGt0UCkpOworCQkJCQkJCQlQa3QgPSAoc3RydWN0IFBLVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJipUeFBrdFApKTsKIAkJCQkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RBQkxFLCAiVHggcGFja2V0ICgleCkgZGVzdGluYXRpb246IE9sZCAleDoleCBOZXcgJXg6JXhcbiIsICpUeFBrdFAsIFBrdC0+ZGVzdF91bml0LCBQa3QtPmRlc3RfcG9ydCwgZGVzdF91bml0LCBkZXN0X3BvcnQpOwotCQkJCQkJCQlXV09SRChQa3QtPmRlc3RfdW5pdCwgZGVzdF91bml0KTsKLQkJCQkJCQkJV1dPUkQoUGt0LT5kZXN0X3BvcnQsIGRlc3RfcG9ydCk7CisJCQkJCQkJCXdyaXRldyhkZXN0X3VuaXQsICZQa3QtPmRlc3RfdW5pdCk7CisJCQkJCQkJCXdyaXRldyhkZXN0X3BvcnQsICZQa3QtPmRlc3RfcG9ydCk7CiAJCQkJCQkJfQogCQkJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UQUJMRSwgIlBvcnQgJWQgcGhiIGRlc3RpbmF0aW9uOiBPbGQgJXg6JXggTmV3ICV4OiV4XG4iLCBwb3J0LCBQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24gJiAweGZmLCAoUG9ydFAtPlBoYlAtPmRlc3RpbmF0aW9uID4+IDgpICYgMHhmZiwgZGVzdF91bml0LCBkZXN0X3BvcnQpOwotCQkJCQkJCVdXT1JEKFBvcnRQLT5QaGJQLT5kZXN0aW5hdGlvbiwgZGVzdF91bml0ICsgKGRlc3RfcG9ydCA8PCA4KSk7CisJCQkJCQkJd3JpdGV3KGRlc3RfdW5pdCArIChkZXN0X3BvcnQgPDwgOCksICZQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24pOwogCQkJCQkJfQogCQkJCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBzZW1fZmxhZ3MpOwogCQkJCQl9CiAJCQkJfQogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UQUJMRSwgIkVudHJ5IG51bGxlZC5cbiIpOwotCQkJCWJ6ZXJvKChjaGFyICopIEhvc3RNYXBQLCBzaXplb2Yoc3RydWN0IE1hcCkpOworCQkJCW1lbXNldChIb3N0TWFwUCwgMCwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKIAkJCQl3b3JrX2RvbmUrKzsKIAkJCX0KIAkJfQpAQCAtNTc2LDExICs1NjcsMTEgQEAKIAkvKiBYWFhYWCBsb2NrIG1lIHVwICovCiAJZm9yIChlbnRyeSA9IDA7IGVudHJ5IDwgVE9UQUxfTUFQX0VOVFJJRVM7IGVudHJ5KyspIHsKIAkJaWYgKHAtPlJJT1NhdmVkVGFibGVbZW50cnldLlJ0YVVuaXF1ZU51bSA9PSBNYXBQLT5SdGFVbmlxdWVOdW0pIHsKLQkJCWJ6ZXJvKChjaGFyICopICZwLT5SSU9TYXZlZFRhYmxlW2VudHJ5XSwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKKwkJCW1lbXNldCgmcC0+UklPU2F2ZWRUYWJsZVtlbnRyeV0sIDAsIHNpemVvZihzdHJ1Y3QgTWFwKSk7CiAJCQl3b3JrX2RvbmUrKzsKIAkJfQogCQlpZiAocC0+UklPQ29ubmVjdFRhYmxlW2VudHJ5XS5SdGFVbmlxdWVOdW0gPT0gTWFwUC0+UnRhVW5pcXVlTnVtKSB7Ci0JCQliemVybygoY2hhciAqKSAmcC0+UklPQ29ubmVjdFRhYmxlW2VudHJ5XSwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKKwkJCW1lbXNldCgmcC0+UklPQ29ubmVjdFRhYmxlW2VudHJ5XSwgMCwgc2l6ZW9mKHN0cnVjdCBNYXApKTsKIAkJCXdvcmtfZG9uZSsrOwogCQl9CiAJfQpAQCAtNjAyLDcgKzU5Myw3IEBACiAKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJBc3NpZ24gZW50cnkgb24gaG9zdCAleCwgcnRhICV4LCBJRCAlZCwgU3lzcG9ydCAlZFxuIiwgTWFwUC0+SG9zdFVuaXF1ZU51bSwgTWFwUC0+UnRhVW5pcXVlTnVtLCBNYXBQLT5JRCwgKGludCkgTWFwUC0+U3lzUG9ydCk7CiAKLQlpZiAoKE1hcFAtPklEICE9ICh1c2hvcnQpIC0gMSkgJiYgKChpbnQpIE1hcFAtPklEIDwgKGludCkgMSB8fCAoaW50KSBNYXBQLT5JRCA+IE1BWF9SVVApKSB7CisJaWYgKChNYXBQLT5JRCAhPSAodTE2KSAtIDEpICYmICgoaW50KSBNYXBQLT5JRCA8IChpbnQpIDEgfHwgKGludCkgTWFwUC0+SUQgPiBNQVhfUlVQKSkgewogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJCYWQgSUQgaW4gbWFwIGVudHJ5IVxuIik7CiAJCXAtPlJJT0Vycm9yLkVycm9yID0gSURfTlVNQkVSX09VVF9PRl9SQU5HRTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02NDgsNyArNjM5LDcgQEAKIAkJCSAqKiBOb3cgd2UgaGF2ZSBhIGhvc3Qgd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBJRAogCQkJICoqIGlmIHRoZSBlbnRyeSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgb25lLgogCQkJICovCi0JCQlpZiAoTWFwUC0+SUQgPT0gKHVzaG9ydCkgLSAxKSB7CisJCQlpZiAoTWFwUC0+SUQgPT0gKHUxNikgLSAxKSB7CiAJCQkJaW50IG5OZXdJRDsKIAogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UQUJMRSwgIkF0dGVtcHRpbmcgdG8gZ2V0IGEgbmV3IElEIGZvciBydGEgXCIlc1wiXG4iLCBNYXBQLT5OYW1lKTsKQEAgLTY2Nyw3ICs2NTgsNyBAQAogCQkJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPVUxETlRfRklORF9FTlRSWTsKIAkJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCQl9Ci0JCQkJTWFwUC0+SUQgPSAodXNob3J0KSBuTmV3SUQgKyAxOworCQkJCU1hcFAtPklEID0gKHUxNikgbk5ld0lEICsgMTsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJBbGxvY2F0ZWQgSUQgJWQgZm9yIHRoaXMgbmV3IFJUQS5cbiIsIE1hcFAtPklEKTsKIAkJCQlIb3N0TWFwUCA9ICZwLT5SSU9Ib3N0c1tob3N0XS5NYXBwaW5nW25OZXdJRF07CiAJCQkJSG9zdE1hcFAtPlJ0YVVuaXF1ZU51bSA9IE1hcFAtPlJ0YVVuaXF1ZU51bTsKQEAgLTcwOCw3ICs2OTksNyBAQAogCQkJICovCiAJCQlIb3N0TWFwUC0+U3lzUG9ydCA9IE1hcFAtPlN5c1BvcnQ7CiAJCQlpZiAoKE1hcFAtPkZsYWdzICYgUlRBMTZfU0VDT05EX1NMT1QpID09IDApCi0JCQkJQ0NPUFkoTWFwUC0+TmFtZSwgSG9zdE1hcFAtPk5hbWUsIE1BWF9OQU1FX0xFTik7CisJCQkJbWVtY3B5KEhvc3RNYXBQLT5OYW1lLCBNYXBQLT5OYW1lLCBNQVhfTkFNRV9MRU4pOwogCQkJSG9zdE1hcFAtPkZsYWdzID0gU0xPVF9JTl9VU0UgfCBSVEFfQk9PVEVEOwogI2lmZGVmIE5FRURfVE9fRklYCiAJCQlSSU9fU1ZfQlJPQURDQVNUKHAtPlJJT0hvc3RzW2hvc3RdLnN2RmxhZ3NbTWFwUC0+SUQgLSAxXSk7CkBAIC03NDIsMTYgKzczMywxMyBAQAogfQogCiAKLWludCBSSU9SZU1hcFBvcnRzKHAsIEhvc3RQLCBIb3N0TWFwUCkKLXN0cnVjdCByaW9faW5mbyAqcDsKLXN0cnVjdCBIb3N0ICpIb3N0UDsKLXN0cnVjdCBNYXAgKkhvc3RNYXBQOworaW50IFJJT1JlTWFwUG9ydHMoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHN0cnVjdCBNYXAgKkhvc3RNYXBQKQogewotCXJlZ2lzdGVyIHN0cnVjdCBQb3J0ICpQb3J0UDsKLQl1aW50IFN1YkVudDsKLQl1aW50IEhvc3RQb3J0OwotCXVpbnQgU3lzUG9ydDsKLQl1c2hvcnQgUnRhVHlwZTsKKwlzdHJ1Y3QgUG9ydCAqUG9ydFA7CisJdW5zaWduZWQgaW50IFN1YkVudDsKKwl1bnNpZ25lZCBpbnQgSG9zdFBvcnQ7CisJdW5zaWduZWQgaW50IFN5c1BvcnQ7CisJdTE2IFJ0YVR5cGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJpb19kcHJpbnRrKFJJT19ERUJVR19UQUJMRSwgIk1hcHBpbmcgc3lzcG9ydCAlZCB0byBpZCAlZFxuIiwgKGludCkgSG9zdE1hcFAtPlN5c1BvcnQsIEhvc3RNYXBQLT5JRCk7CkBAIC03OTQsMTIgKzc4MiwxMiBAQAogCQkgKi8KIAkJaWYgKChIb3N0UC0+RmxhZ3MgJiBSVU5fU1RBVEUpID09IFJDX1JVTk5JTkcpIHsKIAkJCXN0cnVjdCBQSEIgKlBoYlAgPSBQb3J0UC0+UGhiUCA9ICZIb3N0UC0+UGhiUFtIb3N0UG9ydF07Ci0JCQlQb3J0UC0+VHhBZGQgPSAoV09SRCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgUldPUkQoUGhiUC0+dHhfYWRkKSk7Ci0JCQlQb3J0UC0+VHhTdGFydCA9IChXT1JEICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBSV09SRChQaGJQLT50eF9zdGFydCkpOwotCQkJUG9ydFAtPlR4RW5kID0gKFdPUkQgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIFJXT1JEKFBoYlAtPnR4X2VuZCkpOwotCQkJUG9ydFAtPlJ4UmVtb3ZlID0gKFdPUkQgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIFJXT1JEKFBoYlAtPnJ4X3JlbW92ZSkpOwotCQkJUG9ydFAtPlJ4U3RhcnQgPSAoV09SRCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgUldPUkQoUGhiUC0+cnhfc3RhcnQpKTsKLQkJCVBvcnRQLT5SeEVuZCA9IChXT1JEICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBSV09SRChQaGJQLT5yeF9lbmQpKTsKKwkJCVBvcnRQLT5UeEFkZCA9ICh1MTYgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT50eF9hZGQpKTsKKwkJCVBvcnRQLT5UeFN0YXJ0ID0gKHUxNiAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnR4X3N0YXJ0KSk7CisJCQlQb3J0UC0+VHhFbmQgPSAodTE2ICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+dHhfZW5kKSk7CisJCQlQb3J0UC0+UnhSZW1vdmUgPSAodTE2ICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+cnhfcmVtb3ZlKSk7CisJCQlQb3J0UC0+UnhTdGFydCA9ICh1MTYgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT5yeF9zdGFydCkpOworCQkJUG9ydFAtPlJ4RW5kID0gKHUxNiAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnJ4X2VuZCkpOwogCQl9IGVsc2UKIAkJCVBvcnRQLT5QaGJQID0gTlVMTDsKIApAQCAtODEzLDEwICs4MDEsMTAgQEAKIAkJUG9ydFAtPlJ1cE51bSA9IEhvc3RNYXBQLT5JRCAtIDE7CiAJCWlmIChIb3N0TWFwUC0+RmxhZ3MgJiBSVEExNl9TRUNPTkRfU0xPVCkgewogCQkJUG9ydFAtPklEMiA9IEhvc3RNYXBQLT5JRDIgLSAxOwotCQkJUG9ydFAtPlNlY29uZEJsb2NrID0gVFJVRTsKKwkJCVBvcnRQLT5TZWNvbmRCbG9jayA9IDE7CiAJCX0gZWxzZSB7CiAJCQlQb3J0UC0+SUQyID0gMDsKLQkJCVBvcnRQLT5TZWNvbmRCbG9jayA9IEZBTFNFOworCQkJUG9ydFAtPlNlY29uZEJsb2NrID0gMDsKIAkJfQogCQlQb3J0UC0+UnRhVW5pcXVlTnVtID0gSG9zdE1hcFAtPlJ0YVVuaXF1ZU51bTsKIApAQCAtODY2LDkgKzg1NCw2IEBACiAJCVBvcnRQLT5SeERhdGFTdGFydCA9IDA7CiAJCVBvcnRQLT5Db3IyQ29weSA9IDA7CiAJCVBvcnRQLT5OYW1lID0gJkhvc3RNYXBQLT5OYW1lWzBdOwotI2lmZGVmIFNUQVRTCi0JCWJ6ZXJvKChjYWRkcl90KSAmIFBvcnRQLT5TdGF0LCBzaXplb2Yoc3RydWN0IFJJT1N0YXRzKSk7Ci0jZW5kaWYKIAkJUG9ydFAtPnN0YXRzR2F0aGVyID0gMDsKIAkJUG9ydFAtPnR4Y2hhcnMgPSAwOwogCQlQb3J0UC0+cnhjaGFycyA9IDA7CkBAIC04NzYsMTAgKzg2MSwxMCBAQAogCQlQb3J0UC0+Y2xvc2VzID0gMDsKIAkJUG9ydFAtPmlvY3RscyA9IDA7CiAJCWlmIChQb3J0UC0+VHhSaW5nQnVmZmVyKQotCQkJYnplcm8oUG9ydFAtPlR4UmluZ0J1ZmZlciwgcC0+UklPQnVmZmVyU2l6ZSk7CisJCQltZW1zZXQoUG9ydFAtPlR4UmluZ0J1ZmZlciwgMCwgcC0+UklPQnVmZmVyU2l6ZSk7CiAJCWVsc2UgaWYgKHAtPlJJT0J1ZmZlclNpemUpIHsKLQkJCVBvcnRQLT5UeFJpbmdCdWZmZXIgPSBzeXNicmsocC0+UklPQnVmZmVyU2l6ZSk7Ci0JCQliemVybyhQb3J0UC0+VHhSaW5nQnVmZmVyLCBwLT5SSU9CdWZmZXJTaXplKTsKKwkJCVBvcnRQLT5UeFJpbmdCdWZmZXIgPSBrbWFsbG9jKHAtPlJJT0J1ZmZlclNpemUsIEdGUF9LRVJORUwpOworCQkJbWVtc2V0KFBvcnRQLT5UeFJpbmdCdWZmZXIsIDAsIHAtPlJJT0J1ZmZlclNpemUpOwogCQl9CiAJCVBvcnRQLT5UeEJ1ZmZlck91dCA9IDA7CiAJCVBvcnRQLT5UeEJ1ZmZlckluID0gMDsKQEAgLTg5MCw3ICs4NzUsNyBAQAogCQkgKiogSWYgdGhlIHNhbWUsIHdlIGhhdmUgcmVjZWl2ZWQgdGhlIHNhbWUgcnggcGt0IGZyb20gdGhlIFJUQQogCQkgKiogdHdpY2UuIEluaXRpYWxpc2UgdG8gYSB2YWx1ZSBub3QgZXF1YWwgdG8gUEhCX1JYX1RHTCBvciAwLgogCQkgKi8KLQkJUG9ydFAtPkxhc3RSeFRnbCA9IH4odWNoYXIpIFBIQl9SWF9UR0w7CisJCVBvcnRQLT5MYXN0UnhUZ2wgPSB+KHU4KSBQSEJfUlhfVEdMOwogCiAJCS8qCiAJCSAqKiBhbmQgbWFyayB0aGUgcG9ydCBhcyB1c2FibGUKQEAgLTkwNiw5ICs4OTEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgUklPQ2hhbmdlTmFtZShwLCBNYXBQKQotc3RydWN0IHJpb19pbmZvICpwOwotc3RydWN0IE1hcCAqTWFwUDsKK2ludCBSSU9DaGFuZ2VOYW1lKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IE1hcCAqTWFwUCkKIHsKIAlpbnQgaG9zdDsKIAlzdHJ1Y3QgTWFwICpIb3N0TWFwUDsKQEAgLTk0MSw3ICs5MjQsNyBAQAogCQkJCXJldHVybiAtRU5YSU87CiAJCQl9CiAJCQlpZiAoTWFwUC0+SUQgPT0gMCkgewotCQkJCUNDT1BZKE1hcFAtPk5hbWUsIHAtPlJJT0hvc3RzW2hvc3RdLk5hbWUsIE1BWF9OQU1FX0xFTik7CisJCQkJbWVtY3B5KHAtPlJJT0hvc3RzW2hvc3RdLk5hbWUsIE1hcFAtPk5hbWUsIE1BWF9OQU1FX0xFTik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAKQEAgLTk1MSw3ICs5MzQsNyBAQAogCQkJCXAtPlJJT0Vycm9yLkVycm9yID0gUlRBX05VTUJFUl9XUk9ORzsKIAkJCQlyZXR1cm4gLUVOWElPOwogCQkJfQotCQkJQ0NPUFkoTWFwUC0+TmFtZSwgSG9zdE1hcFAtPk5hbWUsIE1BWF9OQU1FX0xFTik7CisJCQltZW1jcHkoSG9zdE1hcFAtPk5hbWUsIE1hcFAtPk5hbWUsIE1BWF9OQU1FX0xFTik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCmluZGV4IDYzNzk4MTYuLjIwNDI2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwpAQCAtNTYsMTUgKzU2LDEyIEBACiAKICNpbmNsdWRlICJsaW51eF9jb21wYXQuaCIKICNpbmNsdWRlICJyaW9fbGludXguaCIKLSNpbmNsdWRlICJ0eXBkZWYuaCIKICNpbmNsdWRlICJwa3QuaCIKICNpbmNsdWRlICJkYWVtb24uaCIKICNpbmNsdWRlICJyaW8uaCIKICNpbmNsdWRlICJyaW9zcGFjZS5oIgotI2luY2x1ZGUgInRvcC5oIgogI2luY2x1ZGUgImNtZHBrdC5oIgogI2luY2x1ZGUgIm1hcC5oIgotI2luY2x1ZGUgInJpb3R5cGVzLmgiCiAjaW5jbHVkZSAicnVwLmgiCiAjaW5jbHVkZSAicG9ydC5oIgogI2luY2x1ZGUgInJpb2RydnIuaCIKQEAgLTc3LDY3ICs3NCwyNiBAQAogI2luY2x1ZGUgInVuaXhydXAuaCIKICNpbmNsdWRlICJib2FyZC5oIgogI2luY2x1ZGUgImhvc3QuaCIKLSNpbmNsdWRlICJlcnJvci5oIgogI2luY2x1ZGUgInBoYi5oIgogI2luY2x1ZGUgImxpbmsuaCIKICNpbmNsdWRlICJjbWRibGsuaCIKICNpbmNsdWRlICJyb3V0ZS5oIgotI2luY2x1ZGUgImNvbnRyb2wuaCIKICNpbmNsdWRlICJjaXJydXMuaCIKICNpbmNsdWRlICJyaW9pb2N0bC5oIgogI2luY2x1ZGUgInBhcmFtLmgiCi0jaW5jbHVkZSAibGlzdC5oIgotI2luY2x1ZGUgInNhbS5oIgogCiBzdGF0aWMgdm9pZCBSSU9DbGVhclVwKHN0cnVjdCBQb3J0ICpQb3J0UCk7CisKKy8qIEJlbG93IGJlbG9uZ3MgaW4gZnVuYy5oICovCiBpbnQgUklPU2hvcnRDb21tYW5kKHN0cnVjdCByaW9faW5mbyAqcCwgc3RydWN0IFBvcnQgKlBvcnRQLCBpbnQgY29tbWFuZCwgaW50IGxlbiwgaW50IGFyZyk7CiAKIAotZXh0ZXJuIGludCBjb252X3ZiW107CQkvKiBub3cgZGVmaW5lZCBpbiB0dHltZ3IuYyAqLwotZXh0ZXJuIGludCBjb252X2J2W107CQkvKiBub3cgZGVmaW5lZCBpbiB0dHltZ3IuYyAqLwotCi0vKgotKiogMTYuMDkuMTk5OCBBUkcgLSBGaXggdG8gYnVpbGQgcmlvdHR5LmsubyBmb3IgTW9kdWxhciBLZXJuZWwgU3VwcG9ydAotKioKLSoqIGVwLmRlZi5oIGlzIG5lY2Vzc2FyeSBmb3IgTW9kdWxhciBLZXJuZWwgU3VwcG9ydAotKiogRE8gTk9UIHBsYWNlIGFueSBrZXJuZWwgJ2V4dGVybidzIGFmdGVyIHRoaXMgbGluZQotKiogb3IgdGhpcyBzb3VyY2UgZmlsZSB3aWxsIG5vdCBidWlsZCByaW90dHkuay5vCi0qLwotI2lmZGVmIHVMWU5YCi0jaW5jbHVkZSA8ZXAuZGVmLmg+Ci0jZW5kaWYKLQotI2lmZGVmIE5FRURfVEhJUzIKLXN0YXRpYyBzdHJ1Y3Qgb2xkX3NndHR5YiBkZWZhdWx0X3NnID0gewotCUIxOTIwMCwgQjE5MjAwLAkJLyogaW5wdXQgYW5kIG91dHB1dCBzcGVlZCAqLwotCSdIJyAtICdAJywJCS8qIGVyYXNlIGNoYXIgKi8KLQktMSwJCQkvKiAybmQgZXJhc2UgY2hhciAqLwotCSdVJyAtICdAJywJCS8qIGtpbGwgY2hhciAqLwotCUVDSE8gfCBDUk1PRCwJCS8qIG1vZGUgKi8KLQknQycgLSAnQCcsCQkvKiBpbnRlcnJ1cHQgY2hhcmFjdGVyICovCi0JJ1xcJyAtICdAJywJCS8qIHF1aXQgY2hhciAqLwotCSdRJyAtICdAJywJCS8qIHN0YXJ0IGNoYXIgKi8KLQknUycgLSAnQCcsCQkvKiBzdG9wIGNoYXIgKi8KLQknRCcgLSAnQCcsCQkvKiBFT0YgKi8KLQktMSwJCQkvKiBicmsgKi8KLQkoTENSVEJTIHwgTENSVEVSQSB8IExDUlRLSUwgfCBMQ1RMRUNIKSwJLyogbG9jYWwgbW9kZSB3b3JkICovCi0JJ1onIC0gJ0AnLAkJLyogcHJvY2VzcyBzdG9wICovCi0JJ1knIC0gJ0AnLAkJLyogZGVsYXllZCBzdG9wICovCi0JJ1InIC0gJ0AnLAkJLyogcmVwcmludCBsaW5lICovCi0JJ08nIC0gJ0AnLAkJLyogZmx1c2ggb3V0cHV0ICovCi0JJ1cnIC0gJ0AnLAkJLyogd29yZCBlcmFzZSAqLwotCSdWJyAtICdAJwkJLyogbGl0ZXJhbCBuZXh0IGNoYXIgKi8KLX07Ci0jZW5kaWYKLQotCiBleHRlcm4gc3RydWN0IHJpb19pbmZvICpwOwogCiAKIGludCByaW90b3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlyZWdpc3RlciB1aW50IFN5c1BvcnQ7Ci0JaW50IE1vZGVtOworCXVuc2lnbmVkIGludCBTeXNQb3J0OwogCWludCByZXBlYXRfdGhpcyA9IDI1MDsKIAlzdHJ1Y3QgUG9ydCAqUG9ydFA7CS8qIHBvaW50ZXIgdG8gdGhlIHBvcnQgc3RydWN0dXJlICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1MSwxNiArMTA3LDE0IEBACiAJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAKIAlTeXNQb3J0ID0gcmlvX21pbm9yKHR0eSk7Ci0JTW9kZW0gPSByaW9faXNtb2RlbSh0dHkpOwogCiAJaWYgKHAtPlJJT0ZhaWxlZCkgewogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiU3lzdGVtIGluaXRpYWxpc2F0aW9uIGZhaWxlZFxuIik7Ci0JCXBzZXRlcnIoRU5YSU8pOwogCQlmdW5jX2V4aXQoKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAicG9ydCBvcGVuIFN5c1BvcnQgJWQgKCVzKSAobWFwcGVkOiVkKVxuIiwgU3lzUG9ydCwgTW9kZW0gPyAiTW9kZW0iIDogInR0eSIsIHAtPlJJT1BvcnRwW1N5c1BvcnRdLT5NYXBwZWQpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJwb3J0IG9wZW4gU3lzUG9ydCAlZCAobWFwcGVkOiVkKVxuIiwgU3lzUG9ydCwgcC0+UklPUG9ydHBbU3lzUG9ydF0tPk1hcHBlZCk7CiAKIAkvKgogCSAqKiBWYWxpZGF0ZSB0aGF0IHdlIGhhdmUgcmVjZWl2ZWQgYSBsZWdpdGltYXRlIHJlcXVlc3QuCkBAIC0xNzAsNyArMTI0LDYgQEAKIAkgKi8KIAlpZiAoU3lzUG9ydCA+PSBSSU9fUE9SVFMpIHsJLyogb3V0IG9mIHJhbmdlID8gKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIklsbGVnYWwgcG9ydCBudW1iZXIgJWRcbiIsIFN5c1BvcnQpOwotCQlwc2V0ZXJyKEVOWElPKTsKIAkJZnVuY19leGl0KCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpAQCAtMTg3LDcgKzE0MCw2IEBACiAJCSAqLwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAicG9ydCBub3QgbWFwcGVkIGludG8gc3lzdGVtXG4iKTsKIAkJZnVuY19leGl0KCk7Ci0JCXBzZXRlcnIoRU5YSU8pOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtMjA5LDcgKzE2MSw2IEBACiAJICovCiAJaWYgKChQb3J0UC0+SG9zdFAtPkZsYWdzICYgUlVOX1NUQVRFKSAhPSBSQ19SVU5OSU5HKSB7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJIb3N0IG5vdCBydW5uaW5nXG4iKTsKLQkJcHNldGVycihFTlhJTyk7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KQEAgLTMwOSwxNSArMjYwLDEyIEBACiAJCS8qIFBvcnRQLT5ncy54bWl0X2NudCA9IDA7ICovCiAKIAkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0jaWZkZWYgTkVFRF9USElTCi0JCXR0eXNldGgoUG9ydFAsIHRwLCAoc3RydWN0IG9sZF9zZ3R0eWIgKikgJmRlZmF1bHRfc2cpOwotI2VuZGlmCiAKIAkJLyogU29tZW9uZSBleHBsYWluIHRvIG1lIHdoeSB0aGlzIGRlbGF5L2NvbmZpZyBpcwogCQkgICBoZXJlLiBJZiBJIHJlYWQgdGhlIGRvY3MgY29ycmVjdGx5IHRoZSAib3BlbiIKIAkJICAgY29tbWFuZCBwaWdneWJhY2tzIHRoZSBwYXJhbWV0ZXJzIGltbWVkaWF0ZWx5LgogCQkgICAtLSBSRVcgKi8KLQkJUklPUGFyYW0oUG9ydFAsIE9QRU4sIE1vZGVtLCBPS19UT19TTEVFUCk7CS8qIE9wZW4gdGhlIHBvcnQgKi8KKwkJUklPUGFyYW0oUG9ydFAsIE9QRU4sIDEsIE9LX1RPX1NMRUVQKTsJLyogT3BlbiB0aGUgcG9ydCAqLwogCQlyaW9fc3Bpbl9sb2NrX2lycXNhdmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7CiAKIAkJLyoKQEAgLTMyNSwyMCArMjczLDYgQEAKIAkJICovCiAJCXdoaWxlICghKFBvcnRQLT5Qb3J0U3RhdGUgJiBQT1JUX0lTT1BFTikgJiYgIXAtPlJJT0hhbHRlZCkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIldhaXRpbmcgZm9yIFBPUlRfSVNPUEVOLWN1cnJlbnRseSAleFxuIiwgUG9ydFAtPlBvcnRTdGF0ZSk7Ci0vKgotKiogMTUuMTAuMTk5OCBBUkcgLSBFU0lMIDA3NTkKLSoqIChQYXJ0KSBmaXggZm9yIHBvcnQgYmVpbmcgdHJhc2hlZCB3aGVuIG9wZW5lZCB3aGlsc3QgUlRBICJkaXNjb25uZWN0ZWQiCi0qKiBUYWtlIG91dCB0aGUgbGltaXRlZCB3YWl0IC0gbm93IHdhaXQgZm9yIGV2ZXIgb3IgdW50aWwgdXNlcgotKiogYmFuZ3MgdXMgb3V0LgotKioKLQkJCWlmIChyZXBlYXRfdGhpcyAtLSA8PSAwKSB7Ci0JCQkJcmlvX2RwcmludChSSU9fREVCVUdfVFRZLCAoIldhaXRpbmcgZm9yIG9wZW4gdG8gZmluaXNoIHRpbWVkIG91dC5cbiIpKTsKLQkJCQlSSU9QcmVlbXB0aXZlQ21kKHAsIFBvcnRQLCBGQ0xPU0UgKTsgCi0JCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCQkJcmV0dXJuIC1FSU5UUjsKLQkJCX0KLSoqCi0qLwogCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7CiAJCQlpZiAoUklPRGVsYXkoUG9ydFAsIEhVTkRSRURfTVMpID09IFJJT19GQUlMKSB7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIldhaXRpbmcgZm9yIG9wZW4gdG8gZmluaXNoIGJyb2tlbiBieSBzaWduYWxcbiIpOwpAQCAtMzU4LDgwICsyOTIsNjEgQEAKIAkJfQogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiUE9SVF9JU09QRU4gZm91bmRcbiIpOwogCX0KLSNpZmRlZiBNT0RFTV9TVVBQT1JUCi0JaWYgKE1vZGVtKSB7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJNb2RlbSAtIHRlc3QgZm9yIGNhcnJpZXJcbiIpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJNb2RlbSAtIHRlc3QgZm9yIGNhcnJpZXJcbiIpOworCS8qCisJICoqIEFDVElPTgorCSAqKiBpbnNlcnQgdGVzdCBmb3IgY2FycmllciBoZXJlLiAtLSA/Pz8KKwkgKiogSSBhbHJlYWR5IHNlZSB0aGF0IHRlc3QgaGVyZS4gV2hhdCdzIHRoZSBkZWFsPyAtLSBSRVcKKwkgKi8KKwlpZiAoKFBvcnRQLT5ncy50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpIHx8IChQb3J0UC0+TW9kZW1TdGF0ZSAmIE1TVlIxX0NEKSkgeworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAib3BlbiglZCkgTW9kZW0gY2FyciBvblxuIiwgU3lzUG9ydCk7CiAJCS8qCi0JCSAqKiBBQ1RJT04KLQkJICoqIGluc2VydCB0ZXN0IGZvciBjYXJyaWVyIGhlcmUuIC0tID8/PwotCQkgKiogSSBhbHJlYWR5IHNlZSB0aGF0IHRlc3QgaGVyZS4gV2hhdCdzIHRoZSBkZWFsPyAtLSBSRVcKKwkJICAgdHAtPnRtLmNfc3RhdGUgfD0gQ0FSUl9PTjsKKwkJICAgd2FrZXVwKChjYWRkcl90KSAmdHAtPnRtLmNfY2FucSk7CiAJCSAqLwotCQlpZiAoKFBvcnRQLT5ncy50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpIHx8IChQb3J0UC0+TW9kZW1TdGF0ZSAmIE1TVlIxX0NEKSkgewotCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgIm9wZW4oJWQpIE1vZGVtIGNhcnIgb25cbiIsIFN5c1BvcnQpOworCQlQb3J0UC0+U3RhdGUgfD0gUklPX0NBUlJfT047CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmUG9ydFAtPmdzLm9wZW5fd2FpdCk7CisJfSBlbHNlIHsJLyogbm8gY2FycmllciAtIHdhaXQgZm9yIERDRCAqLwogCQkJLyoKLQkJCSAgIHRwLT50bS5jX3N0YXRlIHw9IENBUlJfT047Ci0JCQkgICB3YWtldXAoKGNhZGRyX3QpICZ0cC0+dG0uY19jYW5xKTsKLQkJCSAqLwotCQkJUG9ydFAtPlN0YXRlIHw9IFJJT19DQVJSX09OOwotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZQb3J0UC0+Z3Mub3Blbl93YWl0KTsKLQkJfSBlbHNlIHsJLyogbm8gY2FycmllciAtIHdhaXQgZm9yIERDRCAqLwotCi0JCQkvKgotCQkJICAgd2hpbGUgKCEoUG9ydFAtPmdzLnR0eS0+dGVybWlvcy0+Y19zdGF0ZSAmIENBUlJfT04pICYmCi0JCQkgICAhKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAhcC0+UklPSGFsdGVkICkKLQkJCSAqLwotCQkJd2hpbGUgKCEoUG9ydFAtPlN0YXRlICYgUklPX0NBUlJfT04pICYmICEoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmICFwLT5SSU9IYWx0ZWQpIHsKLQorCQkgICB3aGlsZSAoIShQb3J0UC0+Z3MudHR5LT50ZXJtaW9zLT5jX3N0YXRlICYgQ0FSUl9PTikgJiYKKwkJICAgIShmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgIXAtPlJJT0hhbHRlZCApCisJCSAqLworCQl3aGlsZSAoIShQb3J0UC0+U3RhdGUgJiBSSU9fQ0FSUl9PTikgJiYgIShmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgIXAtPlJJT0hhbHRlZCkgewogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJvcGVuKCVkKSBzbGVlcGluZyBmb3IgY2FyciBvblxuIiwgU3lzUG9ydCk7CisJCQkvKgorCQkJICAgUG9ydFAtPmdzLnR0eS0+dGVybWlvcy0+Y19zdGF0ZSB8PSBXT1BFTjsKKwkJCSAqLworCQkJUG9ydFAtPlN0YXRlIHw9IFJJT19XT1BFTjsKKwkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOworCQkJaWYgKFJJT0RlbGF5KFBvcnRQLCBIVU5EUkVEX01TKSA9PSBSSU9fRkFJTCkgewogCQkJCS8qCi0JCQkJICAgUG9ydFAtPmdzLnR0eS0+dGVybWlvcy0+Y19zdGF0ZSB8PSBXT1BFTjsKKwkJCQkgKiogQUNUSU9OOiB2ZXJpZnkgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZworCQkJCSAqKiB0byBkbyBoZXJlLiAtLSA/Pz8KKwkJCQkgKiogSSB0aGluayBpdCdzIE9LLiAtLSBSRVcKIAkJCQkgKi8KLQkJCQlQb3J0UC0+U3RhdGUgfD0gUklPX1dPUEVOOworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJvcGVuKCVkKSBzbGVlcGluZyBmb3IgY2FyciBicm9rZW4gYnkgc2lnbmFsXG4iLCBTeXNQb3J0KTsKKwkJCQlSSU9QcmVlbXB0aXZlQ21kKHAsIFBvcnRQLCBGQ0xPU0UpOworCQkJCS8qCisJCQkJICAgdHAtPnRtLmNfc3RhdGUgJj0gfldPUEVOOworCQkJCSAqLworCQkJCVBvcnRQLT5TdGF0ZSAmPSB+UklPX1dPUEVOOwogCQkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQkJCWlmIChSSU9EZWxheShQb3J0UCwgSFVORFJFRF9NUykgPT0gUklPX0ZBSUwpCi0JCQkJCXsKLQkJCQkJCS8qCi0JCQkJCQkgKiogQUNUSU9OOiB2ZXJpZnkgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZwotCQkJCQkJICoqIHRvIGRvIGhlcmUuIC0tID8/PwotCQkJCQkJICoqIEkgdGhpbmsgaXQncyBPSy4gLS0gUkVXCi0JCQkJCQkgKi8KLQkJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJvcGVuKCVkKSBzbGVlcGluZyBmb3IgY2FyciBicm9rZW4gYnkgc2lnbmFsXG4iLCBTeXNQb3J0KTsKLQkJCQkJCVJJT1ByZWVtcHRpdmVDbWQocCwgUG9ydFAsIEZDTE9TRSk7Ci0JCQkJCQkvKgotCQkJCQkJICAgdHAtPnRtLmNfc3RhdGUgJj0gfldPUEVOOwotCQkJCQkJICovCi0JCQkJCQlQb3J0UC0+U3RhdGUgJj0gflJJT19XT1BFTjsKLQkJCQkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQkJCQkJZnVuY19leGl0KCk7Ci0JCQkJCQlyZXR1cm4gLUVJTlRSOwotCQkJCQl9CisJCQkJZnVuY19leGl0KCk7CisJCQkJcmV0dXJuIC1FSU5UUjsKIAkJCX0KLQkJCVBvcnRQLT5TdGF0ZSAmPSB+UklPX1dPUEVOOwogCQl9Ci0JCWlmIChwLT5SSU9IYWx0ZWQpCi0JCQlnb3RvIGJvbWJvdXQ7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJTZXR0aW5nIFJJT19NT1BFTlxuIik7Ci0JCVBvcnRQLT5TdGF0ZSB8PSBSSU9fTU9QRU47Ci0JfSBlbHNlCi0jZW5kaWYKLQl7Ci0JCS8qCi0JCSAqKiBBQ1RJT04KLQkJICoqIERpcmVjdCBsaW5lIG9wZW4gLSBmb3JjZSBjYXJyaWVyICh3aWxsIHByb2JhYmx5IG1lYW4KLQkJICoqIHRoYXQgc2xlZXBpbmcgTW9kZW0gbGluZSBmdWJhcikKLQkJICovCi0JCVBvcnRQLT5TdGF0ZSB8PSBSSU9fTE9QRU47CisJCVBvcnRQLT5TdGF0ZSAmPSB+UklPX1dPUEVOOwogCX0KLQotCWlmIChwLT5SSU9IYWx0ZWQpIHsKKwlpZiAocC0+UklPSGFsdGVkKQogCQlnb3RvIGJvbWJvdXQ7Ci0JfQorCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJTZXR0aW5nIFJJT19NT1BFTlxuIik7CisJUG9ydFAtPlN0YXRlIHw9IFJJT19NT1BFTjsKKworCWlmIChwLT5SSU9IYWx0ZWQpCisJCWdvdG8gYm9tYm91dDsKIAogCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJoaWdoIGxldmVsIG9wZW4gZG9uZVxuIik7CiAKLSNpZmRlZiBTVEFUUwotCVBvcnRQLT5TdGF0Lk9wZW5DbnQrKzsKLSNlbmRpZgogCS8qCiAJICoqIENvdW50IG9wZW5zIGZvciBwb3J0IHN0YXRpc3RpY3MgcmVwb3J0aW5nCiAJICovCkBAIC00NjAsMjMgKzM3NSwyMSBAQAogCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBNb2RlbTsKIAlpbnQgcnYgPSAwOwogCiAJcmlvX2RwcmludGsoUklPX0RFQlVHX1RUWSwgInBvcnQgY2xvc2UgU3lzUG9ydCAlZFxuIiwgUG9ydFAtPlBvcnROdW0pOwogCiAJLyogUG9ydFAgPSBwLT5SSU9Qb3J0cFtTeXNQb3J0XTsgKi8KLQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiUG9ydCBpcyBhdCBhZGRyZXNzIDB4JXhcbiIsIChpbnQpIFBvcnRQKTsKKwlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiUG9ydCBpcyBhdCBhZGRyZXNzICVwXG4iLCBQb3J0UCk7CiAJLyogdHAgPSBQb3J0UC0+VHR5UDsgKi8vKiBHZXQgdHR5ICovCiAJdHR5ID0gUG9ydFAtPmdzLnR0eTsKLQlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiVFRZIGlzIGF0IGFkZHJlc3MgMHgleFxuIiwgKGludCkgdHR5KTsKKwlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiVFRZIGlzIGF0IGFkZHJlc3MgJXBcbiIsIHR0eSk7CiAKIAlpZiAoUG9ydFAtPmdzLmNsb3Npbmdfd2FpdCkKIAkJZW5kX3RpbWUgPSBqaWZmaWVzICsgUG9ydFAtPmdzLmNsb3Npbmdfd2FpdDsKIAllbHNlCiAJCWVuZF90aW1lID0gamlmZmllcyArIE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCi0JTW9kZW0gPSByaW9faXNtb2RlbSh0dHkpOwogCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAogCS8qCkBAIC01MDAsNyArNDEzLDcgQEAKIAkvKgogCSAqKiBjbGVhciB0aGUgb3BlbiBiaXRzIGZvciB0aGlzIGRldmljZQogCSAqLwotCVBvcnRQLT5TdGF0ZSAmPSAoTW9kZW0gPyB+UklPX01PUEVOIDogflJJT19MT1BFTik7CisJUG9ydFAtPlN0YXRlICY9IH5SSU9fTU9QRU47CiAJUG9ydFAtPlN0YXRlICY9IH5SSU9fQ0FSUl9PTjsKIAlQb3J0UC0+TW9kZW1TdGF0ZSAmPSB+TVNWUjFfQ0Q7CiAJLyoKQEAgLTUzNiw3ICs0NDksNiBAQAogCiAJaWYgKCFkZWxldGVkKQogCQl3aGlsZSAoKFBvcnRQLT5JblVzZSAhPSBOT1RfSU5VU0UpICYmICFwLT5SSU9IYWx0ZWQgJiYgKFBvcnRQLT5UeEJ1ZmZlckluICE9IFBvcnRQLT5UeEJ1ZmZlck91dCkpIHsKLQkJCWNwcmludGYoIk5lZWQgdG8gZmx1c2ggdGhlIHR0eXBvcnRcbiIpOwogCQkJaWYgKHJlcGVhdF90aGlzLS0gPD0gMCkgewogCQkJCXJ2ID0gLUVJTlRSOwogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19UVFksICJXYWl0aW5nIGZvciBub3QgaWRsZSBjbG9zZWQgYnJva2VuIGJ5IHNpZ25hbFxuIik7CkBAIC02MTUsMTYgKzUyNywxMyBAQAogKi8KIAlQb3J0UC0+Q29uZmlnICY9IH4oUklPX0NUU0ZMT1cgfCBSSU9fUlRTRkxPVyk7CiAKLSNpZmRlZiBTVEFUUwotCVBvcnRQLT5TdGF0LkNsb3NlQ250Kys7Ci0jZW5kaWYKIAkvKgogCSAqKiBDb3VudCBvcGVucyBmb3IgcG9ydCBzdGF0aXN0aWNzIHJlcG9ydGluZwogCSAqLwogCWlmIChQb3J0UC0+c3RhdHNHYXRoZXIpCiAJCVBvcnRQLT5jbG9zZXMrKzsKIAotICAgICAgY2xvc2VfZW5kOgorY2xvc2VfZW5kOgogCS8qIFhYWDogV2h5IHdvdWxkIGEgIkRFTEVURUQiIGZsYWcgYmUgcmVzZXQgaGVyZT8gSSdkIGhhdmUKIAkgICB0aG91Z2h0IHRoYXQgYSAiZGVsZXRlZCIgZmxhZyBtZWFucyB0aGF0IHRoZSBwb3J0IHdhcwogCSAgIHBlcm1hbmVudGx5IGdvbmUsIGJ1dCBoZXJlIHdlIGNhbiBtYWtlIGl0IHJlYXBwZWFyIGJ5IGl0CkBAIC02NDAsOCArNTQ5LDcgQEAKIAogCiAKLXN0YXRpYyB2b2lkIFJJT0NsZWFyVXAoUG9ydFApCi1zdHJ1Y3QgUG9ydCAqUG9ydFA7CitzdGF0aWMgdm9pZCBSSU9DbGVhclVwKHN0cnVjdCBQb3J0ICpQb3J0UCkKIHsKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfVFRZLCAiUklPSGFsdGVkIHNldFxuIik7CiAJUG9ydFAtPkNvbmZpZyA9IDA7CS8qIERpcmVjdCBzZW1hcGhvcmUgKi8KQEAgLTY2OCw3ICs1NzYsNyBAQAogKi8KIGludCBSSU9TaG9ydENvbW1hbmQoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgUG9ydCAqUG9ydFAsIGludCBjb21tYW5kLCBpbnQgbGVuLCBpbnQgYXJnKQogewotCVBLVCAqUGFja2V0UDsKKwlzdHJ1Y3QgUEtUICpQYWNrZXRQOwogCWludCByZXRyaWVzID0gMjA7CS8qIGF0IDEwIHBlciBzZWNvbmQgLT4gMiBzZWNvbmRzICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzIyLDE1ICs2MzAsMTUgQEAKIAkvKgogCSAqKiBzZXQgdGhlIGNvbW1hbmQgYnl0ZSBhbmQgdGhlIGFyZ3VtZW50IGJ5dGUKIAkgKi8KLQlXQllURShQYWNrZXRQLT5kYXRhWzBdLCBjb21tYW5kKTsKKwl3cml0ZWIoY29tbWFuZCwgJlBhY2tldFAtPmRhdGFbMF0pOwogCiAJaWYgKGxlbiA9PSAyKQotCQlXQllURShQYWNrZXRQLT5kYXRhWzFdLCBhcmcpOworCQl3cml0ZWIoYXJnLCAmUGFja2V0UC0+ZGF0YVsxXSk7CiAKIAkvKgogCSAqKiBzZXQgdGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IGFuZCBzZXQgdGhlIGNvbW1hbmQgYml0LgogCSAqLwotCVdCWVRFKFBhY2tldFAtPmxlbiwgUEtUX0NNRF9CSVQgfCBsZW4pOworCXdyaXRlYihQS1RfQ01EX0JJVCB8IGxlbiwgJlBhY2tldFAtPmxlbik7CiAKIAlhZGRfdHJhbnNtaXQoUG9ydFApOwogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R5cGVzLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MDg0ZDUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICBSIEkgTyBUIFkgUCBFIFMKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gQXV0aG9yICA6IEpvbiBCcmF3bgotIERhdGUgICAgOgotCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotIFZlcnNpb24gOiAwLjAxCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHMKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIERhdGUgICAgIEJ5ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9yaW90eXBlc19oCi0jZGVmaW5lIF9yaW90eXBlc19oIDEKLQotI2lmZGVmIFNDQ1NfTEFCRUxTCi0jaWZuZGVmIGxpbnQKLS8qIHN0YXRpYyBjaGFyICpfcmlvX3Jpb3R5cGVzX2hfc2NjcyA9ICJAKCMpcmlvdHlwZXMuaAkxLjEwIjsgKi8KLSNlbmRpZgotI2VuZGlmCi0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgTlVNQkVSX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09SRF9wdHI7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IEJZVEVfcHRyOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBjaGFyX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgQ2hhbm5lbF9wdHI7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IEZSRUVfTElTVF9wdHJfcHRyOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBGUkVFX0xJU1RfcHRyOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBMUEJfcHRyOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBQcm9jZXNzX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUEhCX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUEtUX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUEtUX3B0cl9wdHI7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFFfQlVGX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUV9CVUZfcHRyX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUk9VVEVfU1RSX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUlVQX3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgc2hvcnRfcHRyOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X3Nob3J0X3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0X3B0cjsKLQotI2VuZGlmCQkJCS8qIF9fcmlvdHlwZXNfXyAqLwotCi0vKioqKioqKioqKiogZW5kIG9mIGZpbGUgKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3JvbS5oIGIvZHJpdmVycy9jaGFyL3Jpby9yb20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThhNzg0My4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3JvbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICBSIE8gTQotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfcm9tX2gKLSNkZWZpbmUgX3JvbV9oIDEKLQotI2lmbmRlZiBsaW50Ci0jaWZkZWYgU0NDUwotc3RhdGljIGNoYXIgKl9yaW9fcm9tX2hfc2NjcyA9ICJAKCMpcm9tLmgJMS4xIjsKLSNlbmRpZgotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IFJPTSBST007Ci1zdHJ1Y3QgUk9NIHsKLQl1X3Nob3J0IHNseDsKLQljaGFyIHBjYl9sZXR0ZXJfcmV2OwotCWNoYXIgcGNiX251bWJlcl9yZXY7Ci0JY2hhciBzZXJpYWxbNF07Ci0JY2hhciB5ZWFyOwotCWNoYXIgd2VlazsKLX07Ci0KLSNlbmRpZgotCi0jZGVmaW5lIEhPU1RfUk9NICAgIChST00gKikgMHg3YzAwCi0jZGVmaW5lIFJUQV9ST00JICAgIChST00gKikgMHg3ODAxCi0jZGVmaW5lIFJPTV9MRU5HVEggIDB4MjAKLQotLyoqKioqKioqKioqIGVuZCBvZiBmaWxlICoqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9ydXAuaCBiL2RyaXZlcnMvY2hhci9yaW8vcnVwLmgKaW5kZXggZjc0ZjY3Yy4uNGFlOTBjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9ydXAuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3J1cC5oCkBAIC0zNywxNCArMzcsNyBAQAogI2lmbmRlZiBfcnVwX2gKICNkZWZpbmUgX3J1cF9oIDEKIAotI2lmZGVmIFNDQ1NfTEFCRUxTCi0jaWZuZGVmIGxpbnQKLS8qIHN0YXRpYyBjaGFyICpfcmlvX3J1cF9oX3NjY3MgPSAiQCgjKXJ1cC5oCTEuNSI7ICovCi0jZW5kaWYKLSNlbmRpZgotCiAjZGVmaW5lIE1BWF9SVVAgICAgICAgICAgKChzaG9ydCkgMTYpCi0KICNkZWZpbmUgUEtUU19QRVJfUlVQICAgICAoKHNob3J0KSAyKQkvKiBUaGV5IGFyZSBhbHdheXMgdXNlZCBpbiBwYWlycyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjAsMTUgKzUzLDE1IEBACiAjZGVmaW5lIFJVUF9OT19PV05FUiAgICAgICAgICAgICAweGZmCS8qIFJVUCBub3Qgb3duZWQgYnkgYW55IHByb2Nlc3MgKi8KIAogc3RydWN0IFJVUCB7Ci0JUEtUX3B0ciB0eHBrdDsJCS8qIE91dGdvaW5nIHBhY2tldCAqLwotCVBLVF9wdHIgcnhwa3Q7CQkvKiBJbmNvbWluZyBwYWNrZXQgKi8KLQlXT1JEIGxpbms7CQkvKiBXaGljaCBsaW5rIHRvIHNlbmQgZG93bj8gKi8KLQlCWVRFIHJ1cF9kZXN0X3VuaXRbMl07CS8qIERlc3RpbmF0aW9uIHVuaXQgKi8KLQlXT1JEIGhhbmRzaGFrZTsJCS8qIEZvciBoYW5kc2hha2luZyAqLwotCVdPUkQgdGltZW91dDsJCS8qIFRpbWVvdXQgKi8KLQlXT1JEIHN0YXR1czsJCS8qIFN0YXR1cyAqLwotCVdPUkQgdHhjb250cm9sOwkJLyogVHJhbnNtaXQgY29udHJvbCAqLwotCVdPUkQgcnhjb250cm9sOwkJLyogUmVjZWl2ZSBjb250cm9sICovCisJdTE2IHR4cGt0OwkJLyogT3V0Z29pbmcgcGFja2V0ICovCisJdTE2IHJ4cGt0OwkJLyogSW5jb21pbmcgcGFja2V0ICovCisJdTE2IGxpbms7CQkvKiBXaGljaCBsaW5rIHRvIHNlbmQgZG93bj8gKi8KKwl1OCBydXBfZGVzdF91bml0WzJdOwkvKiBEZXN0aW5hdGlvbiB1bml0ICovCisJdTE2IGhhbmRzaGFrZTsJCS8qIEZvciBoYW5kc2hha2luZyAqLworCXUxNiB0aW1lb3V0OwkJLyogVGltZW91dCAqLworCXUxNiBzdGF0dXM7CQkvKiBTdGF0dXMgKi8KKwl1MTYgdHhjb250cm9sOwkJLyogVHJhbnNtaXQgY29udHJvbCAqLworCXUxNiByeGNvbnRyb2w7CQkvKiBSZWNlaXZlIGNvbnRyb2wgKi8KIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9zYW0uaCBiL2RyaXZlcnMvY2hhci9yaW8vc2FtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNzU0ZTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9zYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKgotICoqKioqKiogICAgICAgICAgICAgICAgICAgIFMgQSBNIC4gSAotICoqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSBBdXRob3IgIDogSWFuIE5hbmRocmEKLSBEYXRlICAgIDoKLQotICoKLSAqICAoQykgMTk5MCAtIDIwMDAgU3BlY2lhbGl4IEludGVybmF0aW9uYWwgTHRkLiwgQnlmbGVldCwgU3VycmV5LCBVSy4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSBWZXJzaW9uIDogMC4wMQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RzCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBEYXRlICAgICBCeSAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX3NhbV9oCi0jZGVmaW5lIF9zYW1faCAxCi0KLSNpZmRlZiBTQ0NTX0xBQkVMUwotI2lmbmRlZiBsaW50Ci0vKiBzdGF0aWMgY2hhciAqX3Jpb19zYW1faF9zY2NzID0gIkAoIylzYW0uaAkxLjMiOyAqLwotI2VuZGlmCi0jZW5kaWYKLQotCi0jZGVmaW5lIE5VTV9GUkVFX0xJU1RfVU5JVFMgICAgIDUwMAotCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFIChzaG9ydCkgIDB4MDAKLSNlbmRpZgotI2lmbmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgIChzaG9ydCkgICFGQUxTRQotI2VuZGlmCi0KLSNkZWZpbmUgVFggICAgVFJVRQotI2RlZmluZSBSWCAgICBGQUxTRQotCi0KLXR5cGVkZWYgc3RydWN0IEZSRUVfTElTVCBGUkVFX0xJU1Q7Ci1zdHJ1Y3QgRlJFRV9MSVNUIHsKLQlGUkVFX0xJU1RfcHRyIG5leHQ7Ci0JRlJFRV9MSVNUX3B0ciBwcmV2OwotfTsKLQotCi0jZW5kaWYKLS8qKioqKioqKioqKiBlbmQgb2YgZmlsZSAqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vc3BhY2UuaCBiL2RyaXZlcnMvY2hhci9yaW8vc3BhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYxMjY5MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3NwYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKiAgUGVybGUgU3BlY2lhbGl4IGRyaXZlciBmb3IgTGludXgKLSoqICBQb3J0ZWQgZnJvbSBleGlzdGluZyBSSU8gRHJpdmVyIGZvciBTQ08gc291cmNlcy4KLSAqCi0gKiAgKEMpIDE5OTAgLSAyMDAwIFNwZWNpYWxpeCBJbnRlcm5hdGlvbmFsIEx0ZC4sIEJ5ZmxlZXQsIFN1cnJleSwgVUsuCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKioKLSoqCU1vZHVsZQkJOiBzcGFjZS5oCi0qKglTSUQJCTogMS4yCi0qKglMYXN0IE1vZGlmaWVkCTogMTEvNi85OCAxMTozNDoxOQotKioJUmV0cmlldmVkCTogMTEvNi85OCAxMTozNDoyMgotKioKLSoqICBpZGVudCBAKCMpc3BhY2UuaAkxLjIKLSoqCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX3Jpb19zcGFjZV9oX18KLSNkZWZpbmUgX19yaW9fc3BhY2VfaF9fCi0KLSNpZmRlZiBTQ0NTX0xBQkVMUwotc3RhdGljIGNoYXIgKl9zcGFjZV9oX3NjY3NfID0gIkAoIylzcGFjZS5oCTEuMiI7Ci0jZW5kaWYKLQotZXh0ZXJuIGludCByaW9fY250bHM7Ci1leHRlcm4gaW50IHJpb19iYXNlc1tdOwotZXh0ZXJuIGludCByaW9fbGltaXRzW107Ci1leHRlcm4gaW50IHJpb192ZWN0c1tdOwotCi0jZW5kaWYJCQkJLyogX19yaW9fc3BhY2VfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3RvcC5oIGIvZHJpdmVycy9jaGFyL3Jpby90b3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1YTExZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3RvcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKiogIFBlcmxlIFNwZWNpYWxpeCBkcml2ZXIgZm9yIExpbnV4Ci0qKiAgUG9ydGVkIGZyb20gZXhpc3RpbmcgUklPIERyaXZlciBmb3IgU0NPIHNvdXJjZXMuCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSoqCi0qKglNb2R1bGUJCTogdG9wLmgKLSoqCVNJRAkJOiAxLjIKLSoqCUxhc3QgTW9kaWZpZWQJOiAxMS82Lzk4IDExOjM0OjE5Ci0qKglSZXRyaWV2ZWQJOiAxMS82Lzk4IDExOjM0OjIyCi0qKgotKiogIGlkZW50IEAoIyl0b3AuaAkxLjIKLSoqCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX3Jpb190b3BfaF9fCi0jZGVmaW5lIF9fcmlvX3RvcF9oX18KLQotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3RvcF9oX3NjY3NfID0gIkAoIyl0b3AuaAkxLjIiOwotI2VuZGlmCi0KLS8qCi0qKiBUb3BvbG9neSBpbmZvcm1hdGlvbgotKi8KLXN0cnVjdCBUb3AgewotCXVjaGFyIFVuaXQ7Ci0JdWNoYXIgTGluazsKLX07Ci0KLSNlbmRpZgkJCQkvKiBfX3Jpb190b3BfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3R5cGRlZi5oIGIvZHJpdmVycy9jaGFyL3Jpby90eXBkZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg1Yjg4OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3R5cGRlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKiogIFBlcmxlIFNwZWNpYWxpeCBkcml2ZXIgZm9yIExpbnV4Ci0qKiAgUG9ydGVkIGZyb20gZXhpc3RpbmcgUklPIERyaXZlciBmb3IgU0NPIHNvdXJjZXMuCi0gKgotICogIChDKSAxOTkwIC0gMjAwMCBTcGVjaWFsaXggSW50ZXJuYXRpb25hbCBMdGQuLCBCeWZsZWV0LCBTdXJyZXksIFVLLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSoqCi0qKglNb2R1bGUJCTogdHlwZGVmLmgKLSoqCVNJRAkJOiAxLjIKLSoqCUxhc3QgTW9kaWZpZWQJOiAxMS82Lzk4IDExOjM0OjIwCi0qKglSZXRyaWV2ZWQJOiAxMS82Lzk4IDExOjM0OjIyCi0qKgotKiogIGlkZW50IEAoIyl0eXBkZWYuaAkxLjIKLSoqCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotI2lmbmRlZiBfX3Jpb190eXBkZWZfaF9fCi0jZGVmaW5lIF9fcmlvX3R5cGRlZl9oX18KLQotI2lmZGVmIFNDQ1NfTEFCRUxTCi1zdGF0aWMgY2hhciAqX3R5cGRlZl9oX3NjY3NfID0gIkAoIyl0eXBkZWYuaAkxLjIiOwotI2VuZGlmCi0KLSN1bmRlZiBWUElYCi0KLS8qCi0qKiBJVCBJUyBSRUFMTFksIFJFQUxMWSwgSU1QT1JUQU5UIFRIQVQgQllURVMgQVJFIFVOU0lHTkVEIQotKioKLSoqIFRoZXNlIHR5cGVzIGFyZSBPTkxZIHRvIGJlIHVzZWQgZm9yIHJlZmVyaW5nIHRvIGRhdGEgc3RydWN0dXJlcwotKiogb24gdGhlIFJJTyBIb3N0IGNhcmQhCi0qLwotdHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIEJZVEU7Ci10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IFdPUkQ7Ci10eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCBEV09SRDsKLXR5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgUklPUDsKLXR5cGVkZWYgdm9sYXRpbGUgc2hvcnQgTlVNQkVSOwotCi0KLS8qCi0qKiAyNy4wMS4xOTkgQVJHIC0gbW9kcyB0byBjb21waWxlICduZXd1dGlscycgb24gTHl4bk9TIC0KLSoqIFRoZXNlICNkZWZpbmVzIGFyZSBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlICdsaWJmdW5jcycgbGlicmFyeQotKiogb25seS4gVGhleSBhcmUgbm90IG5lY2Vzc2FyaWx5IGNvcnJlY3QgdHlwZSBtYXBwaW5ncyBhbmQKLSoqIGFyZSBoZXJlIG9ubHkgdG8gbWFrZSB0aGUgc291cmNlIGNvbXBpbGUuCi0qLwotLyogdHlwZWRlZiB1bnNpZ25lZCBpbnQJdWludDsgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZ190OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnRfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90OwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHF1ZXVlX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgbWJsa190OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgcGFkZHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcjsKLQotI2RlZmluZQlUUE5VTEwJKCh1c2hvcnQpKDB4ODAwMCkpCi0KLQotLyoKLSoqIFJJTyBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gb3RoZXIgaW5jbHVkZSBmaWxlcy4KLSovCi10eXBlZGVmIHN0cnVjdCBQS1QgUEtUOwotdHlwZWRlZiBzdHJ1Y3QgTFBCIExQQjsKLXR5cGVkZWYgc3RydWN0IFJVUCBSVVA7Ci10eXBlZGVmIHN0cnVjdCBQb3J0IFBvcnQ7Ci10eXBlZGVmIHN0cnVjdCBEcFJhbSBEcFJhbTsKLQotI2VuZGlmCQkJCS8qIF9fcmlvX3R5cGRlZl9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oIGIvZHJpdmVycy9jaGFyL3Jpby91bml4cnVwLmgKaW5kZXggYTEyNmM3Yy4uNDMwNmUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby91bml4cnVwLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby91bml4cnVwLmgKQEAgLTQ1LDkgKzQ1LDkgQEAKIAlzdHJ1Y3QgQ21kQmxrICpDbWRzV2FpdGluZ1A7CS8qIENvbW1hbmRzIHdhaXRpbmcgdG8gYmUgZG9uZSAqLwogCXN0cnVjdCBDbWRCbGsgKkNtZFBlbmRpbmdQOwkvKiBUaGUgY29tbWFuZCBjdXJyZW50bHkgYmVpbmcgc2VudCAqLwogCXN0cnVjdCBSVVAgKlJ1cFA7CS8qIHRoZSBSdXAgdG8gc2VuZCBpdCB0byAqLwotCXVpbnQgSWQ7CQkvKiBJZCBudW1iZXIgKi8KLQl1aW50IEJhc2VTeXNQb3J0OwkvKiBTeXNQb3J0IG9mIGZpcnN0IHR0eSBvbiB0aGlzIFJUQSAqLwotCXVpbnQgTW9kVHlwZXM7CQkvKiBNb2R1bGVzIG9uIHRoaXMgUlRBICovCisJdW5zaWduZWQgaW50IElkOwkJLyogSWQgbnVtYmVyICovCisJdW5zaWduZWQgaW50IEJhc2VTeXNQb3J0OwkvKiBTeXNQb3J0IG9mIGZpcnN0IHR0eSBvbiB0aGlzIFJUQSAqLworCXVuc2lnbmVkIGludCBNb2RUeXBlczsJCS8qIE1vZHVsZXMgb24gdGhpcyBSVEEgKi8KIAlzcGlubG9ja190IFJ1cExvY2s7CS8qIExvY2sgc3RydWN0dXJlIGZvciBNUFggKi8KIAkvKiAgICBzdHJ1Y3QgbG9ja2IgICAgIFJ1cExvY2s7CSovLyogTG9jayBzdHJ1Y3R1cmUgZm9yIE1QWCAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaXNjb204LmMgYi9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCmluZGV4IDExOWU2MjkuLjY1N2MwZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaXNjb204LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpc2NvbTguYwpAQCAtMTc0MywxMCArMTc0MywxMCBAQAogc3RhdGljIGludCBpb2Jhc2UxOwogc3RhdGljIGludCBpb2Jhc2UyOwogc3RhdGljIGludCBpb2Jhc2UzOwotTU9EVUxFX1BBUk0oaW9iYXNlLCAiaSIpOwotTU9EVUxFX1BBUk0oaW9iYXNlMSwgImkiKTsKLU1PRFVMRV9QQVJNKGlvYmFzZTIsICJpIik7Ci1NT0RVTEVfUEFSTShpb2Jhc2UzLCAiaSIpOworbW9kdWxlX3BhcmFtKGlvYmFzZSwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShpb2Jhc2UxLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGlvYmFzZTIsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oaW9iYXNlMywgaW50LCAwKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogI2VuZGlmIC8qIE1PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3MzYzI0MTAtcnRjLmMgYi9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYwppbmRleCAyZTMwODY1Li5iMDAzOGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYwpAQCAtNDQ4LDEzICs0NDgsMTMgQEAKIAkvKiBmaW5kIHRoZSBJUlFzICovCiAKIAlzM2MyNDEwX3J0Y190aWNrbm8gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwotCWlmIChzM2MyNDEwX3J0Y190aWNrbm8gPD0gMCkgeworCWlmIChzM2MyNDEwX3J0Y190aWNrbm8gPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3IgcnRjIHRpY2tcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAlzM2MyNDEwX3J0Y19hbGFybW5vID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoczNjMjQxMF9ydGNfYWxhcm1ubyA8PSAwKSB7CisJaWYgKHMzYzI0MTBfcnRjX2FsYXJtbm8gPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3IgYWxhcm1cbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMgYi9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMKaW5kZXggZmVlNjhjYy4uNTEwYmQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jCisrKyBiL2RyaXZlcnMvY2hhci9zZXJfYTIyMzIuYwpAQCAtOTcsNyArOTcsNyBAQAogI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CiAjaW5jbHVkZSA8bGludXgvem9ycm8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCkBAIC02NTQsNyArNjU0LDcgQEAKIAkJcG9ydC0+Z3MuY2xvc2luZ193YWl0ID0gMzAgKiBIWjsKIAkJcG9ydC0+Z3MucmQgPSAmYTIyMzJfcmVhbF9kcml2ZXI7CiAjaWZkZWYgTkVXX1dSSVRFX0xPQ0tJTkcKLQkJaW5pdF9NVVRFWCgmKHBvcnQtPmdzLnBvcnRfd3JpdGVfc2VtKSk7CisJCWluaXRfTVVURVgoJihwb3J0LT5ncy5wb3J0X3dyaXRlX211dGV4KSk7CiAjZW5kaWYKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+Z3Mub3Blbl93YWl0KTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+Z3MuY2xvc2Vfd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc25zYy5jIGIvZHJpdmVycy9jaGFyL3Nuc2MuYwppbmRleCAwZTdkMjE2Li5iNTQzODIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc25zYy5jCisrKyBiL2RyaXZlcnMvY2hhci9zbnNjLmMKQEAgLTUsNyArNSw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICovCiAKIC8qCkBAIC03Nyw3ICs3Nyw3IEBACiAJc2NkID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBzeXNjdGxfZGF0YV9zLCBzY2RfY2Rldik7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN1YmNoYW5uZWwgZGF0YSAqLwotCXNkID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBzdWJjaF9kYXRhX3MpLCBHRlBfS0VSTkVMKTsKKwlzZCA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc3ViY2hfZGF0YV9zKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNkID09IE5VTEwpIHsKIAkJcHJpbnRrKCIlczogY291bGRuJ3QgYWxsb2NhdGUgc3ViY2hhbm5lbCBkYXRhXG4iLAogCQkgICAgICAgX19GVU5DVElPTl9fKTsKQEAgLTg1LDcgKzg1LDYgQEAKIAl9CiAKIAkvKiBpbml0aWFsaXplIHN1YmNoX2RhdGFfcyBmaWVsZHMgKi8KLQltZW1zZXQoc2QsIDAsIHNpemVvZiAoc3RydWN0IHN1YmNoX2RhdGFfcykpOwogCXNkLT5zZF9uYXNpZCA9IHNjZC0+c2NkX25hc2lkOwogCXNkLT5zZF9zdWJjaCA9IGlhNjRfc25faXJ0cl9vcGVuKHNjZC0+c2NkX25hc2lkKTsKIApAQCAtMzk0LDcgKzM5Myw3IEBACiAJCQlzcHJpbnRmKGRldm5hbWVwLCAiIyVkIiwgZ2VvX3NsYWIoZ2VvaWQpKTsKIAogCQkJLyogYWxsb2NhdGUgc3lzY3RsIGRldmljZSBkYXRhICovCi0JCQlzY2QgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHN5c2N0bF9kYXRhX3MpLAorCQkJc2NkID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBzeXNjdGxfZGF0YV9zKSwKIAkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAkJCWlmICghc2NkKSB7CiAJCQkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBpbmZvIgpAQCAtNDAyLDcgKzQwMSw2IEBACiAJCQkJICAgICAgIFNZU0NUTF9CQVNFTkFNRSwgZGV2bmFtZSk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQltZW1zZXQoc2NkLCAwLCBzaXplb2YgKHN0cnVjdCBzeXNjdGxfZGF0YV9zKSk7CiAKIAkJCS8qIGluaXRpYWxpemUgc3lzY3RsIGRldmljZSBkYXRhIGZpZWxkcyAqLwogCQkJc2NkLT5zY2RfbmFzaWQgPSBjbm9kZWlkX3RvX25hc2lkKGNub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zbnNjLmggYi9kcml2ZXJzL2NoYXIvc25zYy5oCmluZGV4IGE5ZWZjMTMuLjhhOTgxNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zbnNjLmgKKysrIGIvZHJpdmVycy9jaGFyL3Nuc2MuaApAQCAtNSw3ICs1LDcgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCiAvKgpAQCAtNzAsNiArNzAsOSBAQAogI2RlZmluZSBFVl9DTEFTU19URVNUX1dBUk5JTkcJMHg2MDAwdWwKICNkZWZpbmUgRVZfQ0xBU1NfUFdSRF9OT1RJRlkJMHg4MDAwdWwKIAorLyogRU5WIGNsYXNzIGNvZGVzICovCisjZGVmaW5lIEVOVl9QV1JETl9QRU5ECQkweDQxMDF1bAorCiAjZGVmaW5lIEVWX1NFVkVSSVRZX1BPV0VSX1NUQUJMRQkweDAwMDB1bAogI2RlZmluZSBFVl9TRVZFUklUWV9QT1dFUl9MT1dfV0FSTklORwkweDAxMDB1bAogI2RlZmluZSBFVl9TRVZFUklUWV9QT1dFUl9ISUdIX1dBUk5JTkcJMHgwMjAwdWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zbnNjX2V2ZW50LmMgYi9kcml2ZXJzL2NoYXIvc25zY19ldmVudC5jCmluZGV4IGJhYWEzNjUuLmUyMzRkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zbnNjX2V2ZW50LmMKKysrIGIvZHJpdmVycy9jaGFyL3Nuc2NfZXZlbnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCiAvKgpAQCAtMTg3LDcgKzE4Nyw4IEBACiBzdGF0aWMgdm9pZAogc2NkcnZfZGlzcGF0Y2hfZXZlbnQoY2hhciAqZXZlbnQsIGludCBsZW4pCiB7Ci0JaW50IGNvZGUsIGVzcF9jb2RlLCBzcmM7CisJc3RhdGljIGludCBzbnNjX3NodXR0aW5nX2Rvd24gPSAwOworCWludCBjb2RlLCBlc3BfY29kZSwgc3JjLCBjbGFzczsKIAljaGFyIGRlc2NbQ0hVTktTSVpFXTsKIAljaGFyICpzZXZlcml0eTsKIApAQCAtMTk5LDkgKzIwMCwyNSBAQAogCS8qIGhvdyB1cmdlbnQgaXMgdGhlIG1lc3NhZ2U/ICovCiAJc2V2ZXJpdHkgPSBzY2Rydl9ldmVudF9zZXZlcml0eShjb2RlKTsKIAotCWlmICgoY29kZSAmIEVWX0NMQVNTX01BU0spID09IEVWX0NMQVNTX1BXUkRfTk9USUZZKSB7CisJY2xhc3MgPSAoY29kZSAmIEVWX0NMQVNTX01BU0spOworCisJaWYgKGNsYXNzID09IEVWX0NMQVNTX1BXUkRfTk9USUZZIHx8IGNvZGUgPT0gRU5WX1BXUkROX1BFTkQpIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCisJCWlmIChzbnNjX3NodXR0aW5nX2Rvd24pCisJCQlyZXR1cm47CisKKwkJc25zY19zaHV0dGluZ19kb3duID0gMTsKKworCQkvKiBnaXZlIGEgbWVzc2FnZSBmb3IgZWFjaCB0eXBlIG9mIGV2ZW50ICovCisJCWlmIChjbGFzcyA9PSBFVl9DTEFTU19QV1JEX05PVElGWSkKKwkJCXByaW50ayhLRVJOX05PVElDRSAiUG93ZXIgb2ZmIGluZGljYXRpb24gcmVjZWl2ZWQuIgorCQkJICAgICAgICIgU2VuZGluZyBTSUdQV1IgdG8gaW5pdC4uLlxuIik7CisJCWVsc2UgaWYgKGNvZGUgPT0gRU5WX1BXUkROX1BFTkQpCisJCQlwcmludGsoS0VSTl9DUklUICJXQVJOSU5HOiBTaHV0dGluZyBkb3duIHRoZSBzeXN0ZW0iCisJCQkgICAgICAgIiBkdWUgdG8gYSBjcml0aWNhbCBlbnZpcm9ubWVudGFsIGNvbmRpdGlvbi4iCisJCQkgICAgICAgIiBTZW5kaW5nIFNJR1BXUiB0byBpbml0Li4uXG4iKTsKKwogCQkvKiBnaXZlIGEgU0lHUFdSIHNpZ25hbCB0byBpbml0IHByb2MgKi8KIAogCQkvKiBmaXJzdCBmaW5kIGluaXQncyB0YXNrICovCkBAIC0yMTAsMTIgKzIyNywxMSBAQAogCQkJaWYgKHAtPnBpZCA9PSAxKQogCQkJCWJyZWFrOwogCQl9Ci0JCWlmIChwKSB7IC8qIHdlIGZvdW5kIGluaXQncyB0YXNrICovCi0JCQlwcmludGsoS0VSTl9FTUVSRyAiUG93ZXIgb2ZmIGluZGljYXRpb24gcmVjZWl2ZWQuIEluaXRpYXRpbmcgcG93ZXIgZmFpbCBzZXF1ZW5jZS4uLlxuIik7CisJCWlmIChwKSB7CiAJCQlmb3JjZV9zaWcoU0lHUFdSLCBwKTsKLQkJfSBlbHNlIHsgLyogZmFpbGVkIHRvIGZpbmQgaW5pdCdzIHRhc2sgLSBqdXN0IGdpdmUgbWVzc2FnZShzKSAqLwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGZpbmQgaW5pdCBwcm9jIHRvIGhhbmRsZSBwb3dlciBvZmYhXG4iKTsKLQkJCXByaW50aygiJXN8JCgweCV4KSVzXG4iLCBzZXZlcml0eSwgZXNwX2NvZGUsIGRlc2MpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2lnbmFsIGluaXQhXG4iKTsKKwkJCXNuc2Nfc2h1dHRpbmdfZG93biA9IDA7IC8qIHNvIGNhbiB0cnkgYWdhaW4gKD8pICovCiAJCX0KIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCX0gZWxzZSB7CkBAIC0yNzEsNyArMjg3LDcgQEAKIHsKIAlpbnQgcnY7CiAKLQlldmVudF9zZCA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc3ViY2hfZGF0YV9zKSwgR0ZQX0tFUk5FTCk7CisJZXZlbnRfc2QgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IHN1YmNoX2RhdGFfcyksIEdGUF9LRVJORUwpOwogCWlmIChldmVudF9zZCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZG4ndCBhbGxvY2F0ZSBzdWJjaGFubmVsIGluZm8iCiAJCSAgICAgICAiIGZvciBldmVudCBtb25pdG9yaW5nXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMjc5LDcgKzI5NSw2IEBACiAJfQogCiAJLyogaW5pdGlhbGl6ZSBzdWJjaF9kYXRhX3MgZmllbGRzICovCi0JbWVtc2V0KGV2ZW50X3NkLCAwLCBzaXplb2YgKHN0cnVjdCBzdWJjaF9kYXRhX3MpKTsKIAlldmVudF9zZC0+c2RfbmFzaWQgPSBzY2QtPnNjZF9uYXNpZDsKIAlzcGluX2xvY2tfaW5pdCgmZXZlbnRfc2QtPnNkX3Jsb2NrKTsKIApAQCAtMzA1LDUgKzMyMCwzIEBACiAJCXJldHVybjsKIAl9CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwppbmRleCBiZGFhYjY5OS4uM2Y1ZDYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTE0OCw3ICsxNDgsNiBAQAogICoJaXMgYWxyZWFkeSBzd2FwcGluZyBhIHNoYXJlZCBidWZmZXIgd29uJ3QgbWFrZSB0aGluZ3MgYW55IHdvcnNlLgogICovCiBzdGF0aWMgY2hhcgkJCSpzdGxfdG1wd3JpdGVidWY7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChzdGxfdG1wd3JpdGVzZW0pOwogCiAvKgogICoJRGVmaW5lIGEgbG9jYWwgZGVmYXVsdCB0ZXJtaW9zIHN0cnVjdC4gQWxsIHBvcnRzIHdpbGwgYmUgY3JlYXRlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N4LmMgYi9kcml2ZXJzL2NoYXIvc3guYwppbmRleCBjMjQ5MGUyLi4zYjQ3NDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3guYworKysgYi9kcml2ZXJzL2NoYXIvc3guYwpAQCAtMTA5NSwxNyArMTA5NSwxNyBAQAogCiAJCXN4X2RwcmludGsgKFNYX0RFQlVHX1JFQ0VJVkUsICJyeG9wPSVkLCBjID0gJWQuXG4iLCByeF9vcCwgYyk7IAogCisJCS8qIERvbid0IGNvcHkgcGFzdCB0aGUgZW5kIG9mIHRoZSBoYXJkd2FyZSByZWNlaXZlIGJ1ZmZlciAqLworCQlpZiAocnhfb3AgKyBjID4gMHgxMDApIGMgPSAweDEwMCAtIHJ4X29wOworCisJCXN4X2RwcmludGsgKFNYX0RFQlVHX1JFQ0VJVkUsICJjID0gJWQuXG4iLCBjKTsKKwogCQkvKiBEb24ndCBjb3B5IG1vcmUgYnl0ZXMgdGhhbiB0aGVyZSBpcyByb29tIGZvciBpbiB0aGUgYnVmZmVyICovCiAKIAkJYyA9IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKHR0eSwgJnJwLCBjKTsKIAogCQlzeF9kcHJpbnRrIChTWF9ERUJVR19SRUNFSVZFLCAiYyA9ICVkLlxuIiwgYyk7IAogCi0JCS8qIERvbid0IGNvcHkgcGFzdCB0aGUgZW5kIG9mIHRoZSBoYXJkd2FyZSByZWNlaXZlIGJ1ZmZlciAqLwotCQlpZiAocnhfb3AgKyBjID4gMHgxMDApIGMgPSAweDEwMCAtIHJ4X29wOwotCi0JCXN4X2RwcmludGsgKFNYX0RFQlVHX1JFQ0VJVkUsICJjID0gJWQuXG4iLCBjKTsKLQogCQkvKiBJZiBmb3Igb25lIHJlYXNvbiBvciBhbm90aGVyLCB3ZSBjYW4ndCBjb3B5IG1vcmUgZGF0YSwgd2UncmUgZG9uZSEgKi8KIAkJaWYgKGMgPT0gMCkgYnJlYWs7CiAKQEAgLTIxNzMsMTUgKzIxNzMsMTcgQEAKIAlpZiAoIElTX1NJMV9CT0FSRChib2FyZCkpIHsKIAkJLyogVGhpcyBzaG91bGQgYmUgYW4gU0kxIGJvYXJkLCB3aGljaCBoYXMgdGhpcwogCQkgICBsb2NhdGlvbiB3cml0YWJsZS4uLiAqLwotCQlpZiAocmVhZF9zeF9ieXRlIChib2FyZCwgU0kyX0lTQV9JRF9CQVNFKSAhPSAweDEwKQorCQlpZiAocmVhZF9zeF9ieXRlIChib2FyZCwgU0kyX0lTQV9JRF9CQVNFKSAhPSAweDEwKSB7CiAJCQlmdW5jX2V4aXQgKCk7CiAJCQlyZXR1cm4gMDsgCisJCX0KIAl9IGVsc2UgewogCQkvKiBUaGlzIHNob3VsZCBiZSBhbiBTSTIgYm9hcmQsIHdoaWNoIGhhcyB0aGUgYm90dG9tCiAJCSAgIDMgYml0cyBub24td3JpdGFibGUuLi4gKi8KLQkJaWYgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSURfQkFTRSkgPT0gMHgxMCkKKwkJaWYgKHJlYWRfc3hfYnl0ZSAoYm9hcmQsIFNJMl9JU0FfSURfQkFTRSkgPT0gMHgxMCkgewogCQkJZnVuY19leGl0ICgpOwogCQkJcmV0dXJuIDA7IAorCQl9CiAJfQogCiAJLyogTm93IHdlJ3JlIHByZXR0eSBtdWNoIGNvbnZpbmNlZCB0aGF0IHRoZXJlIGlzIGFuIFNJIGJvYXJkIGhlcmUsIApAQCAtMjE5MiwxNSArMjE5NCwxNyBAQAogCWlmICggSVNfU0kxX0JPQVJEKGJvYXJkKSkgewogCQkvKiBUaGlzIHNob3VsZCBiZSBhbiBTSTEgYm9hcmQsIHdoaWNoIGhhcyB0aGlzCiAJCSAgIGxvY2F0aW9uIHdyaXRhYmxlLi4uICovCi0JCWlmIChyZWFkX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UpICE9IDB4MTApCisJCWlmIChyZWFkX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UpICE9IDB4MTApIHsKIAkJCWZ1bmNfZXhpdCgpOwogCQkJcmV0dXJuIDA7IAorCQl9CiAJfSBlbHNlIHsKIAkJLyogVGhpcyBzaG91bGQgYmUgYW4gU0kyIGJvYXJkLCB3aGljaCBoYXMgdGhlIGJvdHRvbQogCQkgICAzIGJpdHMgbm9uLXdyaXRhYmxlLi4uICovCi0JCWlmIChyZWFkX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UpID09IDB4MTApCisJCWlmIChyZWFkX3N4X2J5dGUgKGJvYXJkLCBTSTJfSVNBX0lEX0JBU0UpID09IDB4MTApIHsKIAkJCWZ1bmNfZXhpdCAoKTsKIAkJCXJldHVybiAwOyAKKwkJfQogCX0KIAogCXByaW50aGVhZGVyICgpOwpAQCAtMjMxNCw3ICsyMzE4LDcgQEAKIAkJCXBvcnQtPmJvYXJkID0gYm9hcmQ7CiAJCQlwb3J0LT5ncy5yZCA9ICZzeF9yZWFsX2RyaXZlcjsKICNpZmRlZiBORVdfV1JJVEVfTE9DS0lORwotCQkJcG9ydC0+Z3MucG9ydF93cml0ZV9zZW0gPSBNVVRFWDsKKwkJCXBvcnQtPmdzLnBvcnRfd3JpdGVfbXV0ZXggPSBNVVRFWDsKICNlbmRpZgogCQkJcG9ydC0+Z3MuZHJpdmVyX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwppbmRleCBlZGU2ODhhLi5kNjhiZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwpAQCAtNzc3MCw3ICs3NzcwLDcgQEAKIAl9CiAKIAlpbmZvLT5wYXJhbXMuZW5jb2RpbmcgPSBuZXdfZW5jb2Rpbmc7Ci0JaW5mby0+cGFyYW1zLmNyY190eXBlID0gbmV3X2NyY3R5cGU7OworCWluZm8tPnBhcmFtcy5jcmNfdHlwZSA9IG5ld19jcmN0eXBlOwogCiAJLyogaWYgbmV0d29yayBpbnRlcmZhY2UgdXAsIHJlcHJvZ3JhbSBoYXJkd2FyZSAqLwogCWlmIChpbmZvLT5uZXRjb3VudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKaW5kZXggYTg1YTYwYS4uNzM4ZWMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCWludCB0eF9hY3RpdmU7CiAKIAl1bnNpZ25lZCBjaGFyIHNpZ25hbHM7ICAgIC8qIHNlcmlhbCBzaWduYWwgc3RhdGVzICovCi0JdW5zaWduZWQgaW50IGluaXRfZXJyb3I7ICAvKiBpbml0aWFsaXphdGlvbiBlcnJvciAqLworCWludCBpbml0X2Vycm9yOyAgLyogaW5pdGlhbGl6YXRpb24gZXJyb3IgKi8KIAogCXVuc2lnbmVkIGNoYXIgKnR4X2J1ZjsKIAlpbnQgdHhfY291bnQ7CkBAIC0xMzY1LDcgKzEzNjUsNyBAQAogCX0KIAogCWluZm8tPnBhcmFtcy5lbmNvZGluZyA9IG5ld19lbmNvZGluZzsKLQlpbmZvLT5wYXJhbXMuY3JjX3R5cGUgPSBuZXdfY3JjdHlwZTs7CisJaW5mby0+cGFyYW1zLmNyY190eXBlID0gbmV3X2NyY3R5cGU7CiAKIAkvKiBpZiBuZXR3b3JrIGludGVyZmFjZSB1cCwgcmVwcm9ncmFtIGhhcmR3YXJlICovCiAJaWYgKGluZm8tPm5ldGNvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKaW5kZXggOTYwYWRiMi4uODU4NzQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCkBAIC0xNjUwLDcgKzE2NTAsNyBAQAogCX0KIAogCWluZm8tPnBhcmFtcy5lbmNvZGluZyA9IG5ld19lbmNvZGluZzsKLQlpbmZvLT5wYXJhbXMuY3JjX3R5cGUgPSBuZXdfY3JjdHlwZTs7CisJaW5mby0+cGFyYW1zLmNyY190eXBlID0gbmV3X2NyY3R5cGU7CiAKIAkvKiBpZiBuZXR3b3JrIGludGVyZmFjZSB1cCwgcmVwcm9ncmFtIGhhcmR3YXJlICovCiAJaWYgKGluZm8tPm5ldGNvdW50KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5c3JxLmMgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwppbmRleCA1NzY1ZjY3Li4zNTA4MmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3lzcnEuYworKysgYi9kcml2ZXJzL2NoYXIvc3lzcnEuYwpAQCAtNDIsMTYgKzQyLDE1IEBACiAvKiBXaGV0aGVyIHdlIHJlYWN0IG9uIHN5c3JxIGtleXMgb3IganVzdCBpZ25vcmUgdGhlbSAqLwogaW50IHN5c3JxX2VuYWJsZWQgPSAxOwogCi0vKiBMb2dsZXZlbCBzeXNycSBoYW5kbGVyICovCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfbG9nbGV2ZWwoaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsCi0JCQkJICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSAKKwkJCQkgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJaW50IGk7CiAJaSA9IGtleSAtICcwJzsKIAljb25zb2xlX2xvZ2xldmVsID0gNzsKIAlwcmludGsoIkxvZ2xldmVsIHNldCB0byAlZFxuIiwgaSk7CiAJY29uc29sZV9sb2dsZXZlbCA9IGk7Ci19CQorfQogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfbG9nbGV2ZWxfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfbG9nbGV2ZWwsCiAJLmhlbHBfbXNnCT0gImxvZ2xldmVsMC04IiwKQEAgLTU5LDExICs1OCw5IEBACiAJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX0xPRywKIH07CiAKLQotLyogU0FLIHN5c3JxIGhhbmRsZXIgKi8KICNpZmRlZiBDT05GSUdfVlQKIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9TQUsoaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsCi0JCQkgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAorCQkJICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICh0dHkpCiAJCWRvX1NBSyh0dHkpOwpAQCAtNzUsMTIgKzcyLDEzIEBACiAJLmFjdGlvbl9tc2cJPSAiU0FLIiwKIAkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfS0VZQk9BUkQsCiB9OworI2Vsc2UKKyNkZWZpbmUgc3lzcnFfU0FLX29wICgqKHN0cnVjdCBzeXNycV9rZXlfb3AgKikwKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVlQKLS8qIHVucmF3IHN5c3JxIGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV91bnJhdyhpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKLQkJCSAgICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSAKKwkJCSAgICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBrYmRfc3RydWN0ICprYmQgPSAma2JkX3RhYmxlW2ZnX2NvbnNvbGVdOwogCkBAIC05MywxMCArOTEsMTEgQEAKIAkuYWN0aW9uX21zZwk9ICJLZXlib2FyZCBtb2RlIHNldCB0byBYTEFURSIsCiAJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX0tFWUJPQVJELAogfTsKKyNlbHNlCisjZGVmaW5lIHN5c3JxX3VucmF3X29wICgqKHN0cnVjdCBzeXNycV9rZXlfb3AgKikwKQogI2VuZGlmIC8qIENPTkZJR19WVCAqLwogCiAjaWZkZWYgQ09ORklHX0tFWEVDCi0vKiBjcmFzaGR1bXAgc3lzcnEgaGFuZGxlciAqLwogc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX2NyYXNoZHVtcChpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKIAkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewpAQCAtMTA4LDE2ICsxMDcsMTYgQEAKIAkuYWN0aW9uX21zZwk9ICJUcmlnZ2VyIGEgY3Jhc2hkdW1wIiwKIAkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfRFVNUCwKIH07CisjZWxzZQorI2RlZmluZSBzeXNycV9jcmFzaGR1bXBfb3AgKCooc3RydWN0IHN5c3JxX2tleV9vcCAqKTApCiAjZW5kaWYKIAotLyogcmVib290IHN5c3JxIGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9yZWJvb3QoaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsCi0JCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCisJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJZW1lcmdlbmN5X3Jlc3RhcnQoKTsKIH0KLQogc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfcmVib290X29wID0gewogCS5oYW5kbGVyCT0gc3lzcnFfaGFuZGxlX3JlYm9vdCwKIAkuaGVscF9tc2cJPSAicmVCb290IiwKQEAgLTEyNiwxMSArMTI1LDEwIEBACiB9OwogCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfc3luYyhpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKLQkJCSAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAorCQkJICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAllbWVyZ2VuY3lfc3luYygpOwogfQotCiBzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9zeW5jX29wID0gewogCS5oYW5kbGVyCT0gc3lzcnFfaGFuZGxlX3N5bmMsCiAJLmhlbHBfbXNnCT0gIlN5bmMiLApAQCAtMTM5LDExICsxMzcsMTAgQEAKIH07CiAKIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9tb3VudHJvKGludCBrZXksIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzLAotCQkJCSBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KSAKKwkJCQkgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAllbWVyZ2VuY3lfcmVtb3VudCgpOwogfQotCiBzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9tb3VudHJvX29wID0gewogCS5oYW5kbGVyCT0gc3lzcnFfaGFuZGxlX21vdW50cm8sCiAJLmhlbHBfbXNnCT0gIlVubW91bnQiLApAQCAtMTUxLDI4ICsxNDgsMjMgQEAKIAkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfUkVNT1VOVCwKIH07CiAKLS8qIEVORCBTWU5DIFNZU1JRIEhBTkRMRVJTIEJMT0NLICovCi0KICNpZmRlZiBDT05GSUdfREVCVUdfTVVURVhFUwotCi1zdGF0aWMgdm9pZAotc3lzcnFfaGFuZGxlX3Nob3dsb2NrcyhpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3N0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9zaG93bG9ja3MoaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsCisJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAltdXRleF9kZWJ1Z19zaG93X2FsbF9sb2NrcygpOwogfQotCiBzdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV9zaG93bG9ja3Nfb3AgPSB7CiAJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfc2hvd2xvY2tzLAogCS5oZWxwX21zZwk9ICJzaG93LWFsbC1sb2NrcyhEKSIsCiAJLmFjdGlvbl9tc2cJPSAiU2hvdyBMb2NrcyBIZWxkIiwKIH07Ci0KKyNlbHNlCisjZGVmaW5lIHN5c3JxX3Nob3dsb2Nrc19vcCAoKihzdHJ1Y3Qgc3lzcnFfa2V5X29wICopMCkKICNlbmRpZgogCi0vKiBTSE9XIFNZU1JRIEhBTkRMRVJTIEJMT0NLICovCi0KIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9zaG93cmVncyhpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKLQkJCQkgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAorCQkJCSAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpZiAocHRfcmVncykKIAkJc2hvd19yZWdzKHB0X3JlZ3MpOwpAQCAtMTg0LDkgKzE3Niw4IEBACiAJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX0RVTVAsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9zaG93c3RhdGUoaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsCi0JCQkJICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCisJCQkJICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzaG93X3N0YXRlKCk7CiB9CkBAIC0xOTcsOSArMTg4LDggQEAKIAkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfRFVNUCwKIH07CiAKLQogc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX3Nob3dtZW0oaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsCi0JCQkJIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAorCQkJCSBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXNob3dfbWVtKCk7CiB9CkBAIC0yMTAsMTMgKzIwMCw5IEBACiAJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX0RVTVAsCiB9OwogCi0vKiBTSE9XIFNZU1JRIEhBTkRMRVJTIEJMT0NLICovCi0KLQotLyogU0lHTkFMIFNZU1JRIEhBTkRMRVJTIEJMT0NLICovCi0KLS8qIHNpZ25hbCBzeXNycSBoZWxwZXIgZnVuY3Rpb24KLSAqIFNlbmRzIGEgc2lnbmFsIHRvIGFsbCB1c2VyIHByb2Nlc3NlcyAqLworLyoKKyAqIFNpZ25hbCBzeXNycSBoZWxwZXIgZnVuY3Rpb24uICBTZW5kcyBhIHNpZ25hbCB0byBhbGwgdXNlciBwcm9jZXNzZXMuCisgKi8KIHN0YXRpYyB2b2lkIHNlbmRfc2lnX2FsbChpbnQgc2lnKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTIyOSw3ICsyMTUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfdGVybShpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKLQkJCSAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAorCQkJICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzZW5kX3NpZ19hbGwoU0lHVEVSTSk7CiAJY29uc29sZV9sb2dsZXZlbCA9IDg7CkBAIC0yNDMsNyArMjI5LDggQEAKIAogc3RhdGljIHZvaWQgbW9vbV9jYWxsYmFjayh2b2lkICppZ25vcmVkKQogewotCW91dF9vZl9tZW1vcnkoR0ZQX0tFUk5FTCwgMCk7CisJb3V0X29mX21lbW9yeSgmTk9ERV9EQVRBKDApLT5ub2RlX3pvbmVsaXN0c1taT05FX05PUk1BTF0sCisJCQlHRlBfS0VSTkVMLCAwKTsKIH0KIAogc3RhdGljIERFQ0xBUkVfV09SSyhtb29tX3dvcmssIG1vb21fY2FsbGJhY2ssIE5VTEwpOwpAQCAtMjYwLDcgKzI0Nyw3IEBACiB9OwogCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfa2lsbChpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKLQkJCSAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAorCQkJICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzZW5kX3NpZ19hbGwoU0lHS0lMTCk7CiAJY29uc29sZV9sb2dsZXZlbCA9IDg7CkBAIC0yNzIsOCArMjU5LDYgQEAKIAkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfU0lHTkFMLAogfTsKIAotLyogRU5EIFNJR05BTCBTWVNSUSBIQU5ETEVSUyBCTE9DSyAqLwotCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfdW5ydChpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKIAkJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewpAQCAtMjg4LDExMCArMjczLDk5IEBACiAKIC8qIEtleSBPcGVyYXRpb25zIHRhYmxlIGFuZCBsb2NrICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5c3JxX2tleV90YWJsZV9sb2NrKTsKLSNkZWZpbmUgU1lTUlFfS0VZX1RBQkxFX0xFTkdUSCAzNgotc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3AgKnN5c3JxX2tleV90YWJsZVtTWVNSUV9LRVlfVEFCTEVfTEVOR1RIXSA9IHsKLS8qIDAgKi8JJnN5c3JxX2xvZ2xldmVsX29wLAotLyogMSAqLwkmc3lzcnFfbG9nbGV2ZWxfb3AsCi0vKiAyICovCSZzeXNycV9sb2dsZXZlbF9vcCwKLS8qIDMgKi8JJnN5c3JxX2xvZ2xldmVsX29wLAotLyogNCAqLwkmc3lzcnFfbG9nbGV2ZWxfb3AsCi0vKiA1ICovCSZzeXNycV9sb2dsZXZlbF9vcCwKLS8qIDYgKi8JJnN5c3JxX2xvZ2xldmVsX29wLAotLyogNyAqLwkmc3lzcnFfbG9nbGV2ZWxfb3AsCi0vKiA4ICovCSZzeXNycV9sb2dsZXZlbF9vcCwKLS8qIDkgKi8JJnN5c3JxX2xvZ2xldmVsX29wLAotLyogYSAqLwlOVUxMLCAvKiBEb24ndCB1c2UgZm9yIHN5c3RlbSBwcm92aWRlZCBzeXNycXMsCi0JCSBpdCBpcyBoYW5kbGVkIHNwZWNpYWxseSBvbiB0aGUgc3BhcmMKLQkJIGFuZCB3aWxsIG5ldmVyIGFycml2ZSAqLwotLyogYiAqLwkmc3lzcnFfcmVib290X29wLAotI2lmZGVmIENPTkZJR19LRVhFQwotLyogYyAqLyAmc3lzcnFfY3Jhc2hkdW1wX29wLAotI2Vsc2UKLS8qIGMgKi8JTlVMTCwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCi0vKiBkICovICZzeXNycV9zaG93bG9ja3Nfb3AsCi0jZWxzZQotLyogZCAqLyBOVUxMLAotI2VuZGlmCi0vKiBlICovCSZzeXNycV90ZXJtX29wLAotLyogZiAqLwkmc3lzcnFfbW9vbV9vcCwKLS8qIGcgKi8JTlVMTCwKLS8qIGggKi8JTlVMTCwKLS8qIGkgKi8JJnN5c3JxX2tpbGxfb3AsCi0vKiBqICovCU5VTEwsCi0jaWZkZWYgQ09ORklHX1ZUCi0vKiBrICovCSZzeXNycV9TQUtfb3AsCi0jZWxzZQotLyogayAqLwlOVUxMLAotI2VuZGlmCi0vKiBsICovCU5VTEwsCi0vKiBtICovCSZzeXNycV9zaG93bWVtX29wLAotLyogbiAqLwkmc3lzcnFfdW5ydF9vcCwKLS8qIG8gKi8JTlVMTCwgLyogVGhpcyB3aWxsIG9mdGVuIGJlIHJlZ2lzdGVyZWQKLQkJIGFzICdPZmYnIGF0IGluaXQgdGltZSAqLwotLyogcCAqLwkmc3lzcnFfc2hvd3JlZ3Nfb3AsCi0vKiBxICovCU5VTEwsCi0jaWZkZWYgQ09ORklHX1ZUCi0vKiByICovCSZzeXNycV91bnJhd19vcCwKLSNlbHNlCi0vKiByICovIE5VTEwsCi0jZW5kaWYKLS8qIHMgKi8JJnN5c3JxX3N5bmNfb3AsCi0vKiB0ICovCSZzeXNycV9zaG93c3RhdGVfb3AsCi0vKiB1ICovCSZzeXNycV9tb3VudHJvX29wLAotLyogdiAqLwlOVUxMLCAvKiBNYXkgYmUgYXNzaWduZWQgYXQgaW5pdCB0aW1lIGJ5IFNNUCBWT1lBR0VSICovCi0vKiB3ICovCU5VTEwsCi0vKiB4ICovCU5VTEwsCi0vKiB5ICovCU5VTEwsCi0vKiB6ICovCU5VTEwKKworc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3AgKnN5c3JxX2tleV90YWJsZVszNl0gPSB7CisJJnN5c3JxX2xvZ2xldmVsX29wLAkJLyogMCAqLworCSZzeXNycV9sb2dsZXZlbF9vcCwJCS8qIDEgKi8KKwkmc3lzcnFfbG9nbGV2ZWxfb3AsCQkvKiAyICovCisJJnN5c3JxX2xvZ2xldmVsX29wLAkJLyogMyAqLworCSZzeXNycV9sb2dsZXZlbF9vcCwJCS8qIDQgKi8KKwkmc3lzcnFfbG9nbGV2ZWxfb3AsCQkvKiA1ICovCisJJnN5c3JxX2xvZ2xldmVsX29wLAkJLyogNiAqLworCSZzeXNycV9sb2dsZXZlbF9vcCwJCS8qIDcgKi8KKwkmc3lzcnFfbG9nbGV2ZWxfb3AsCQkvKiA4ICovCisJJnN5c3JxX2xvZ2xldmVsX29wLAkJLyogOSAqLworCisJLyoKKwkgKiBEb24ndCB1c2UgZm9yIHN5c3RlbSBwcm92aWRlZCBzeXNycXMsIGl0IGlzIGhhbmRsZWQgc3BlY2lhbGx5IG9uCisJICogc3BhcmMgYW5kIHdpbGwgbmV2ZXIgYXJyaXZlCisJICovCisJTlVMTCwJCQkJLyogYSAqLworCSZzeXNycV9yZWJvb3Rfb3AsCQkvKiBiICovCisJJnN5c3JxX2NyYXNoZHVtcF9vcCwJCS8qIGMgKi8KKwkmc3lzcnFfc2hvd2xvY2tzX29wLAkJLyogZCAqLworCSZzeXNycV90ZXJtX29wLAkJCS8qIGUgKi8KKwkmc3lzcnFfbW9vbV9vcCwJCQkvKiBmICovCisJTlVMTCwJCQkJLyogZyAqLworCU5VTEwsCQkJCS8qIGggKi8KKwkmc3lzcnFfa2lsbF9vcCwJCQkvKiBpICovCisJTlVMTCwJCQkJLyogaiAqLworCSZzeXNycV9TQUtfb3AsCQkJLyogayAqLworCU5VTEwsCQkJCS8qIGwgKi8KKwkmc3lzcnFfc2hvd21lbV9vcCwJCS8qIG0gKi8KKwkmc3lzcnFfdW5ydF9vcCwJCQkvKiBuICovCisJLyogVGhpcyB3aWxsIG9mdGVuIGJlIHJlZ2lzdGVyZWQgYXMgJ09mZicgYXQgaW5pdCB0aW1lICovCisJTlVMTCwJCQkJLyogbyAqLworCSZzeXNycV9zaG93cmVnc19vcCwJCS8qIHAgKi8KKwlOVUxMLAkJCQkvKiBxICovCisJJnN5c3JxX3VucmF3X29wLAkJCS8qIHIgKi8KKwkmc3lzcnFfc3luY19vcCwJCQkvKiBzICovCisJJnN5c3JxX3Nob3dzdGF0ZV9vcCwJCS8qIHQgKi8KKwkmc3lzcnFfbW91bnRyb19vcCwJCS8qIHUgKi8KKwkvKiBNYXkgYmUgYXNzaWduZWQgYXQgaW5pdCB0aW1lIGJ5IFNNUCBWT1lBR0VSICovCisJTlVMTCwJCQkJLyogdiAqLworCU5VTEwsCQkJCS8qIHcgKi8KKwlOVUxMLAkJCQkvKiB4ICovCisJTlVMTCwJCQkJLyogeSAqLworCU5VTEwJCQkJLyogeiAqLwogfTsKIAogLyoga2V5MmluZGV4IGNhbGN1bGF0aW9uLCAtMSBvbiBpbnZhbGlkIGluZGV4ICovCi1zdGF0aWMgaW50IHN5c3JxX2tleV90YWJsZV9rZXkyaW5kZXgoaW50IGtleSkgeworc3RhdGljIGludCBzeXNycV9rZXlfdGFibGVfa2V5MmluZGV4KGludCBrZXkpCit7CiAJaW50IHJldHZhbDsKLQlpZiAoKGtleSA+PSAnMCcpICYmIChrZXkgPD0gJzknKSkgeworCisJaWYgKChrZXkgPj0gJzAnKSAmJiAoa2V5IDw9ICc5JykpCiAJCXJldHZhbCA9IGtleSAtICcwJzsKLQl9IGVsc2UgaWYgKChrZXkgPj0gJ2EnKSAmJiAoa2V5IDw9ICd6JykpIHsKKwllbHNlIGlmICgoa2V5ID49ICdhJykgJiYgKGtleSA8PSAneicpKQogCQlyZXR2YWwgPSBrZXkgKyAxMCAtICdhJzsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmV0dmFsID0gLTE7Ci0JfQogCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCiAgKiBnZXQgYW5kIHB1dCBmdW5jdGlvbnMgZm9yIHRoZSB0YWJsZSwgZXhwb3NlZCB0byBtb2R1bGVzLgogICovCi0KLXN0cnVjdCBzeXNycV9rZXlfb3AgKl9fc3lzcnFfZ2V0X2tleV9vcCAoaW50IGtleSkgewotICAgICAgICBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcF9wOworc3RydWN0IHN5c3JxX2tleV9vcCAqX19zeXNycV9nZXRfa2V5X29wKGludCBrZXkpCit7CisgICAgICAgIHN0cnVjdCBzeXNycV9rZXlfb3AgKm9wX3AgPSBOVUxMOwogICAgICAgICBpbnQgaTsKLQkKKwogCWkgPSBzeXNycV9rZXlfdGFibGVfa2V5MmluZGV4KGtleSk7Ci0gICAgICAgIG9wX3AgPSAoaSA9PSAtMSkgPyBOVUxMIDogc3lzcnFfa2V5X3RhYmxlW2ldOworCWlmIChpICE9IC0xKQorCSAgICAgICAgb3BfcCA9IHN5c3JxX2tleV90YWJsZVtpXTsKICAgICAgICAgcmV0dXJuIG9wX3A7CiB9CiAKLXN0YXRpYyB2b2lkIF9fc3lzcnFfcHV0X2tleV9vcCAoaW50IGtleSwgc3RydWN0IHN5c3JxX2tleV9vcCAqb3BfcCkgewotICAgICAgICBpbnQgaTsKK3N0YXRpYyB2b2lkIF9fc3lzcnFfcHV0X2tleV9vcChpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICpvcF9wKQoreworICAgICAgICBpbnQgaSA9IHN5c3JxX2tleV90YWJsZV9rZXkyaW5kZXgoa2V5KTsKIAotCWkgPSBzeXNycV9rZXlfdGFibGVfa2V5MmluZGV4KGtleSk7CiAgICAgICAgIGlmIChpICE9IC0xKQogICAgICAgICAgICAgICAgIHN5c3JxX2tleV90YWJsZVtpXSA9IG9wX3A7CiB9CiAKIC8qCi0gKiBUaGlzIGlzIHRoZSBub24tbG9ja2luZyB2ZXJzaW9uIG9mIGhhbmRsZV9zeXNycQotICogSXQgbXVzdC9jYW4gb25seSBiZSBjYWxsZWQgYnkgc3lzcnEga2V5IGhhbmRsZXJzLAotICogYXMgdGhleSBhcmUgaW5zaWRlIG9mIHRoZSBsb2NrCisgKiBUaGlzIGlzIHRoZSBub24tbG9ja2luZyB2ZXJzaW9uIG9mIGhhbmRsZV9zeXNycS4gIEl0IG11c3QvY2FuIG9ubHkgYmUgY2FsbGVkCisgKiBieSBzeXNycSBrZXkgaGFuZGxlcnMsIGFzIHRoZXkgYXJlIGluc2lkZSBvZiB0aGUgbG9jawogICovCi0KLXZvaWQgX19oYW5kbGVfc3lzcnEoaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBjaGVja19tYXNrKQordm9pZCBfX2hhbmRsZV9zeXNycShpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCWludCBjaGVja19tYXNrKQogewogCXN0cnVjdCBzeXNycV9rZXlfb3AgKm9wX3A7CiAJaW50IG9yaWdfbG9nX2xldmVsOwotCWludCBpLCBqOworCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzcnFfa2V5X3RhYmxlX2xvY2ssIGZsYWdzKTsKQEAgLTQwMSwyNiArMzc1LDM0IEBACiAKICAgICAgICAgb3BfcCA9IF9fc3lzcnFfZ2V0X2tleV9vcChrZXkpOwogICAgICAgICBpZiAob3BfcCkgewotCQkvKiBTaG91bGQgd2UgY2hlY2sgZm9yIGVuYWJsZWQgb3BlcmF0aW9ucyAoL3Byb2Mvc3lzcnEtdHJpZ2dlciBzaG91bGQgbm90KQotCQkgKiBhbmQgaXMgdGhlIGludm9rZWQgb3BlcmF0aW9uIGVuYWJsZWQ/ICovCisJCS8qCisJCSAqIFNob3VsZCB3ZSBjaGVjayBmb3IgZW5hYmxlZCBvcGVyYXRpb25zICgvcHJvYy9zeXNycS10cmlnZ2VyCisJCSAqIHNob3VsZCBub3QpIGFuZCBpcyB0aGUgaW52b2tlZCBvcGVyYXRpb24gZW5hYmxlZD8KKwkJICovCiAJCWlmICghY2hlY2tfbWFzayB8fCBzeXNycV9lbmFibGVkID09IDEgfHwKIAkJICAgIChzeXNycV9lbmFibGVkICYgb3BfcC0+ZW5hYmxlX21hc2spKSB7Ci0JCQlwcmludGsgKCIlc1xuIiwgb3BfcC0+YWN0aW9uX21zZyk7CisJCQlwcmludGsoIiVzXG4iLCBvcF9wLT5hY3Rpb25fbXNnKTsKIAkJCWNvbnNvbGVfbG9nbGV2ZWwgPSBvcmlnX2xvZ19sZXZlbDsKIAkJCW9wX3AtPmhhbmRsZXIoa2V5LCBwdF9yZWdzLCB0dHkpOwotCQl9Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXByaW50aygiVGhpcyBzeXNycSBvcGVyYXRpb24gaXMgZGlzYWJsZWQuXG4iKTsKKwkJfQogCX0gZWxzZSB7CiAJCXByaW50aygiSEVMUCA6ICIpOwogCQkvKiBPbmx5IHByaW50IHRoZSBoZWxwIG1zZyBvbmNlIHBlciBoYW5kbGVyICovCi0JCWZvciAoaT0wOyBpPFNZU1JRX0tFWV9UQUJMRV9MRU5HVEg7IGkrKykgCi0JCWlmIChzeXNycV9rZXlfdGFibGVbaV0pIHsKLQkJCWZvciAoaj0wOyBzeXNycV9rZXlfdGFibGVbaV0gIT0gc3lzcnFfa2V5X3RhYmxlW2pdOyBqKyspOwotCQkJaWYgKGogPT0gaSkKLQkJCQlwcmludGsgKCIlcyAiLCBzeXNycV9rZXlfdGFibGVbaV0tPmhlbHBfbXNnKTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3lzcnFfa2V5X3RhYmxlKTsgaSsrKSB7CisJCQlpZiAoc3lzcnFfa2V5X3RhYmxlW2ldKSB7CisJCQkJaW50IGo7CisKKwkJCQlmb3IgKGogPSAwOyBzeXNycV9rZXlfdGFibGVbaV0gIT0KKwkJCQkJCXN5c3JxX2tleV90YWJsZVtqXTsgaisrKQorCQkJCQk7CisJCQkJaWYgKGogIT0gaSkKKwkJCQkJY29udGludWU7CisJCQkJcHJpbnRrKCIlcyAiLCBzeXNycV9rZXlfdGFibGVbaV0tPmhlbHBfbXNnKTsKKwkJCX0KIAkJfQotCQlwcmludGsgKCJcbiIpOworCQlwcmludGsoIlxuIik7CiAJCWNvbnNvbGVfbG9nbGV2ZWwgPSBvcmlnX2xvZ19sZXZlbDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzcnFfa2V5X3RhYmxlX2xvY2ssIGZsYWdzKTsKQEAgLTQzMCwxNiArNDEyLDE3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUga2V5Ym9hcmQgaGFuZGxlciB3aGVuIFN5c1JxIGlzIHByZXNzZWQKICAqIGFuZCBhbnkgb3RoZXIga2V5Y29kZSBhcnJpdmVzLgogICovCi0KIHZvaWQgaGFuZGxlX3N5c3JxKGludCBrZXksIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICghc3lzcnFfZW5hYmxlZCkKIAkJcmV0dXJuOwogCV9faGFuZGxlX3N5c3JxKGtleSwgcHRfcmVncywgdHR5LCAxKTsKIH0KK0VYUE9SVF9TWU1CT0woaGFuZGxlX3N5c3JxKTsKIAogc3RhdGljIGludCBfX3N5c3JxX3N3YXBfa2V5X29wcyhpbnQga2V5LCBzdHJ1Y3Qgc3lzcnFfa2V5X29wICppbnNlcnRfb3BfcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN5c3JxX2tleV9vcCAqcmVtb3ZlX29wX3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN5c3JxX2tleV9vcCAqcmVtb3ZlX29wX3ApCit7CiAKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NTIsNyArNDM1LDYgQEAKIAkJcmV0dmFsID0gLTE7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c3JxX2tleV90YWJsZV9sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00NjAsMTIgKzQ0MiwxMCBAQAogewogCXJldHVybiBfX3N5c3JxX3N3YXBfa2V5X29wcyhrZXksIG9wX3AsIE5VTEwpOwogfQorRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9zeXNycV9rZXkpOwogCiBpbnQgdW5yZWdpc3Rlcl9zeXNycV9rZXkoaW50IGtleSwgc3RydWN0IHN5c3JxX2tleV9vcCAqb3BfcCkKIHsKIAlyZXR1cm4gX19zeXNycV9zd2FwX2tleV9vcHMoa2V5LCBOVUxMLCBvcF9wKTsKIH0KLQotRVhQT1JUX1NZTUJPTChoYW5kbGVfc3lzcnEpOwotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9zeXNycV9rZXkpOwogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3N5c3JxX2tleSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGIwMjE5LmMgYi9kcml2ZXJzL2NoYXIvdGIwMjE5LmMKaW5kZXggYWMyYTI5Ny4uYTgwYzgzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RiMDIxOS5jCisrKyBiL2RyaXZlcnMvY2hhci90YjAyMTkuYwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJdnI0MXh4X3NldF9pcnFfbGV2ZWwoVEIwMjE5X1BDSV9TTE9UM19QSU4sIElSUV9MRVZFTF9MT1cpOwogfQogCi1zdGF0aWMgaW50IHRiMDIxOV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0YjAyMTlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXR2YWw7CiAKQEAgLTMxOSw3ICszMTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRiMDIxOV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgdGIwMjE5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJX21hY2hpbmVfcmVzdGFydCA9IG9sZF9tYWNoaW5lX3Jlc3RhcnQ7CiAKQEAgLTMzNSwxOSArMzM1LDI2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRiMDIxOV9kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSB0YjAyMTlfcHJvYmUsCi0JLnJlbW92ZQkJPSB0YjAyMTlfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGIwMjE5X3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIlRCMDIxOSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB0YW5iYWNfdGIwMjE5X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHRhbmJhY190YjAyMTlfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAKLQl0YjAyMTlfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgiVEIwMjE5IiwgLTEsIE5VTEwsIDApOwotCWlmIChJU19FUlIodGIwMjE5X3BsYXRmb3JtX2RldmljZSkpCi0JCXJldHVybiBQVFJfRVJSKHRiMDIxOV9wbGF0Zm9ybV9kZXZpY2UpOworCXRiMDIxOV9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIlRCMDIxOSIsIC0xKTsKKwlpZiAoIXRiMDIxOV9wbGF0Zm9ybV9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZCh0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHRiMDIxOV9wbGF0Zm9ybV9kZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMzU2LDEwICszNjMsOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB0YW5iYWNfdGIwMjE5X2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0YW5iYWNfdGIwMjE5X2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOwotCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodGIwMjE5X3BsYXRmb3JtX2RldmljZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90b3NoaWJhLmMgYi9kcml2ZXJzL2NoYXIvdG9zaGliYS5jCmluZGV4IDBjNmY1MjEuLmUyZmIyMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90b3NoaWJhLmMKKysrIGIvZHJpdmVycy9jaGFyL3Rvc2hpYmEuYwpAQCAtMzU1LDE0ICszNTUsMTQgQEAKIC8qCiAgKiBHZXQgdGhlIG1hY2hpbmUgaWRlbnRpZmljYXRpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50IG1vZGVsCiAgKi8KLXN0YXRpYyBpbnQgdG9zaF9nZXRfbWFjaGluZV9pZCh2b2lkKQorc3RhdGljIGludCB0b3NoX2dldF9tYWNoaW5lX2lkKHZvaWQgX19pb21lbSAqYmlvcykKIHsKIAlpbnQgaWQ7CiAJU01NUmVnaXN0ZXJzIHJlZ3M7CiAJdW5zaWduZWQgc2hvcnQgYngsY3g7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCi0JaWQgPSAoMHgxMDAqKGludCkgaXNhX3JlYWRiKDB4ZmZmZmUpKSsoKGludCkgaXNhX3JlYWRiKDB4ZmZmZmEpKTsKKwlpZCA9ICgweDEwMCooaW50KSByZWFkYihiaW9zKzB4ZmZmZSkpKygoaW50KSByZWFkYihiaW9zKzB4ZmZmYSkpOwogCiAJLyogZG8gd2UgaGF2ZSBhIFNDVFRhYmxlIG1hY2hpbmUgaWRlbnRpY2F0aW9uIG51bWJlciBvbiBvdXIgaGFuZHMgKi8KIApAQCAtMzg4LDEyICszODgsMTIgQEAKIAogCQkvKiBub3cgdHdpZGRsZSB3aXRoIG91ciBwb2ludGVyIGEgYml0ICovCiAKLQkJYWRkcmVzcyA9IDB4MDAwZjAwMDArYng7Ci0JCWN4ID0gaXNhX3JlYWR3KGFkZHJlc3MpOwotCQlhZGRyZXNzID0gMHgwMDBmMDAwOStieCtjeDsKLQkJY3ggPSBpc2FfcmVhZHcoYWRkcmVzcyk7Ci0JCWFkZHJlc3MgPSAweDAwMGYwMDBhK2N4OwotCQljeCA9IGlzYV9yZWFkdyhhZGRyZXNzKTsKKwkJYWRkcmVzcyA9IGJ4OworCQljeCA9IHJlYWR3KGJpb3MgKyBhZGRyZXNzKTsKKwkJYWRkcmVzcyA9IDkrYngrY3g7CisJCWN4ID0gcmVhZHcoYmlvcyArIGFkZHJlc3MpOworCQlhZGRyZXNzID0gMHhhK2N4OworCQljeCA9IHJlYWR3KGJpb3MgKyBhZGRyZXNzKTsKIAogCQkvKiBub3cgY29uc3RydWN0IG91ciBtYWNoaW5lIGlkZW50aWZpY2F0aW9uIG51bWJlciAqLwogCkBAIC00MTYsMTMgKzQxNiwxOCBAQAogCWludCBpLG1ham9yLG1pbm9yLGRheSx5ZWFyLG1vbnRoLGZsYWc7CiAJdW5zaWduZWQgY2hhciBzaWduYXR1cmVbN10gPSB7IDB4NTQsMHg0ZiwweDUzLDB4NDgsMHg0OSwweDQyLDB4NDEgfTsKIAlTTU1SZWdpc3RlcnMgcmVnczsKKwl2b2lkIF9faW9tZW0gKmJpb3MgPSBpb3JlbWFwKDB4ZjAwMDAsIDB4MTAwMDApOworCisJaWYgKCFiaW9zKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGV4dHJhIHNhbml0eSBjaGVjayBmb3IgdGhlIHN0cmluZyAiVE9TSElCQSIgaW4gdGhlIEJJT1MgYmVjYXVzZQogCSAgIHNvbWUgbWFjaGluZXMgdGhhdCBhcmUgbm90IFRvc2hpYmEncyBwYXNzIHRoZSBuZXh0IHRlc3QgKi8KIAogCWZvciAoaT0wO2k8NztpKyspIHsKLQkJaWYgKGlzYV9yZWFkYigweGZlMDEwK2kpIT1zaWduYXR1cmVbaV0pIHsKKwkJaWYgKHJlYWRiKGJpb3MrMHhlMDEwK2kpIT1zaWduYXR1cmVbaV0pIHsKIAkJCXByaW50aygidG9zaGliYTogbm90IGEgc3VwcG9ydGVkIFRvc2hpYmEgbGFwdG9wXG4iKTsKKwkJCWlvdW5tYXAoYmlvcyk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTQzOCw2ICs0NDMsNyBAQAogCiAJaWYgKChmbGFnPT0xKSB8fCAoKHJlZ3MuZWF4ICYgMHhmZjAwKT09MHg4NjAwKSkgewogCQlwcmludGsoInRvc2hpYmE6IG5vdCBhIHN1cHBvcnRlZCBUb3NoaWJhIGxhcHRvcFxuIik7CisJCWlvdW5tYXAoYmlvcyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDQ3LDE5ICs0NTMsMTkgQEAKIAogCS8qIG5leHQgZ2V0IHRoZSBtYWNoaW5lIElEIG9mIHRoZSBjdXJyZW50IGxhcHRvcCAqLwogCi0JdG9zaF9pZCA9IHRvc2hfZ2V0X21hY2hpbmVfaWQoKTsKKwl0b3NoX2lkID0gdG9zaF9nZXRfbWFjaGluZV9pZChiaW9zKTsKIAogCS8qIGdldCB0aGUgQklPUyB2ZXJzaW9uICovCiAKLQltYWpvciA9IGlzYV9yZWFkYigweGZlMDA5KS0nMCc7Ci0JbWlub3IgPSAoKGlzYV9yZWFkYigweGZlMDBiKS0nMCcpKjEwKSsoaXNhX3JlYWRiKDB4ZmUwMGMpLScwJyk7CisJbWFqb3IgPSByZWFkYihiaW9zKzB4ZTAwOSktJzAnOworCW1pbm9yID0gKChyZWFkYihiaW9zKzB4ZTAwYiktJzAnKSoxMCkrKHJlYWRiKGJpb3MrMHhlMDBjKS0nMCcpOwogCXRvc2hfYmlvcyA9IChtYWpvcioweDEwMCkrbWlub3I7CiAKIAkvKiBnZXQgdGhlIEJJT1MgZGF0ZSAqLwogCi0JZGF5ID0gKChpc2FfcmVhZGIoMHhmZmZmNSktJzAnKSoxMCkrKGlzYV9yZWFkYigweGZmZmY2KS0nMCcpOwotCW1vbnRoID0gKChpc2FfcmVhZGIoMHhmZmZmOCktJzAnKSoxMCkrKGlzYV9yZWFkYigweGZmZmY5KS0nMCcpOwotCXllYXIgPSAoKGlzYV9yZWFkYigweGZmZmZiKS0nMCcpKjEwKSsoaXNhX3JlYWRiKDB4ZmZmZmMpLScwJyk7CisJZGF5ID0gKChyZWFkYihiaW9zKzB4ZmZmNSktJzAnKSoxMCkrKHJlYWRiKGJpb3MrMHhmZmY2KS0nMCcpOworCW1vbnRoID0gKChyZWFkYihiaW9zKzB4ZmZmOCktJzAnKSoxMCkrKHJlYWRiKGJpb3MrMHhmZmY5KS0nMCcpOworCXllYXIgPSAoKHJlYWRiKGJpb3MrMHhmZmZiKS0nMCcpKjEwKSsocmVhZGIoYmlvcysweGZmZmMpLScwJyk7CiAJdG9zaF9kYXRlID0gKCgoeWVhci05MCkgJiAweDFmKTw8MTApIHwgKChtb250aCAmIDB4Zik8PDYpCiAJCXwgKChkYXkgJiAweDFmKTw8MSk7CiAKQEAgLTQ3Niw2ICs0ODIsOCBAQAogCWlmICgodG9zaF9pZD09MHhmY2NiKSB8fCAodG9zaF9pZD09MHhmY2NjKSkKIAkJdG9zaF9mYW4gPSAxOwogCisJaW91bm1hcChiaW9zKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaAppbmRleCBmZDNhNGJlLi5kZWMwMjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiBlbnVtIHRwbV90aW1lb3V0IHsKIAlUUE1fVElNRU9VVCA9IDUsCS8qIG1zZWNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggZTliYmE5NC4uNDhkNzk1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAKIC8qIFNlbWFwaG9yZSB0byBwcm90ZWN0IGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgYSB0dHkuIFRoaXMgaXMgc2hhcmVkIHdpdGgKICAgIHZ0LmMgZm9yIGRlZXBseSBkaXNndXN0aW5nIGhhY2sgcmVhc29ucyAqLwotREVDTEFSRV9NVVRFWCh0dHlfc2VtKTsKK0RFRklORV9NVVRFWCh0dHlfbXV0ZXgpOwogCiAjaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCiBleHRlcm4gc3RydWN0IHR0eV9kcml2ZXIgKnB0bV9kcml2ZXI7CS8qIFVuaXg5OCBwdHkgbWFzdGVyczsgZm9yIC9kZXYvcHRteCAqLwpAQCAtMzAzLDcgKzMwMyw3IEBACiAJCQl0LT5jb21taXQgPSAwOwogCQkJdC0+cmVhZCA9IDA7CiAJCQkvKiBERUJVRyBPTkxZICovCi0JCQltZW1zZXQodC0+ZGF0YSwgJyonLCBzaXplKTsKKy8qCQkJbWVtc2V0KHQtPmRhdGEsICcqJywgc2l6ZSk7ICovCiAvKiAJCQlwcmludGsoIkZsaXAgcmVjeWNsZSAlcFxuIiwgdCk7ICovCiAJCQlyZXR1cm4gdDsKIAkJfQpAQCAtMzU0LDcgKzM1NCw3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKTsKIAotaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqY2hhcnMsIHNpemVfdCBzaXplKQoraW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIHNpemVfdCBzaXplKQogewogCWludCBjb3BpZWQgPSAwOwogCWRvIHsKQEAgLTM3OCw3ICszNzgsNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKTsKIAotaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqY2hhcnMsIGNoYXIgKmZsYWdzLCBzaXplX3Qgc2l6ZSkKK2ludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjb25zdCBjaGFyICpmbGFncywgc2l6ZV90IHNpemUpCiB7CiAJaW50IGNvcGllZCA9IDA7CiAJZG8gewpAQCAtMTE4OCwxMSArMTE4OCwxMSBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAotCWRvd24oJnR0eV9zZW0pOworCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CiAJdHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHk7CiAJaWYgKHR0eSkgewogCQl0dHlfcGdycCA9IHR0eS0+cGdycDsKLQkJdXAoJnR0eV9zZW0pOworCQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJCWlmIChvbl9leGl0ICYmIHR0eS0+ZHJpdmVyLT50eXBlICE9IFRUWV9EUklWRVJfVFlQRV9QVFkpCiAJCQl0dHlfdmhhbmd1cCh0dHkpOwogCX0gZWxzZSB7CkBAIC0xMjAwLDcgKzEyMDAsNyBAQAogCQkJa2lsbF9wZyhjdXJyZW50LT5zaWduYWwtPnR0eV9vbGRfcGdycCwgU0lHSFVQLCBvbl9leGl0KTsKIAkJCWtpbGxfcGcoY3VycmVudC0+c2lnbmFsLT50dHlfb2xkX3BncnAsIFNJR0NPTlQsIG9uX2V4aXQpOwogCQl9Ci0JCXVwKCZ0dHlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCQl1bmxvY2tfa2VybmVsKCk7CQogCQlyZXR1cm47CiAJfQpAQCAtMTIxMSw3ICsxMjExLDcgQEAKIAl9CiAKIAkvKiBNdXN0IGxvY2sgY2hhbmdlcyB0byB0dHlfb2xkX3BncnAgKi8KLQlkb3duKCZ0dHlfc2VtKTsKKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCWN1cnJlbnQtPnNpZ25hbC0+dHR5X29sZF9wZ3JwID0gMDsKIAl0dHktPnNlc3Npb24gPSAwOwogCXR0eS0+cGdycCA9IC0xOwpAQCAtMTIyMiw3ICsxMjIyLDcgQEAKIAkJcC0+c2lnbmFsLT50dHkgPSBOVUxMOwogCX0gd2hpbGVfZWFjaF90YXNrX3BpZChjdXJyZW50LT5zaWduYWwtPnNlc3Npb24sIFBJRFRZUEVfU0lELCBwKTsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JdXAoJnR0eV9zZW0pOworCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAl1bmxvY2tfa2VybmVsKCk7CiB9CiAKQEAgLTEzMDYsNyArMTMwNiw3IEBACiAJc3NpemVfdCByZXQgPSAwLCB3cml0dGVuID0gMDsKIAl1bnNpZ25lZCBpbnQgY2h1bms7CiAJCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdHR5LT5hdG9taWNfd3JpdGUpKSB7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdHR5LT5hdG9taWNfd3JpdGVfbG9jaykpIHsKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAl9CiAKQEAgLTEzMjksNyArMTMyOSw3IEBACiAJaWYgKGNvdW50IDwgY2h1bmspCiAJCWNodW5rID0gY291bnQ7CiAKLQkvKiB3cml0ZV9idWYvd3JpdGVfY250IGlzIHByb3RlY3RlZCBieSB0aGUgYXRvbWljX3dyaXRlIHNlbWFwaG9yZSAqLworCS8qIHdyaXRlX2J1Zi93cml0ZV9jbnQgaXMgcHJvdGVjdGVkIGJ5IHRoZSBhdG9taWNfd3JpdGVfbG9jayBtdXRleCAqLwogCWlmICh0dHktPndyaXRlX2NudCA8IGNodW5rKSB7CiAJCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIApAQCAtMTMzOCw3ICsxMzM4LDcgQEAKIAogCQlidWYgPSBrbWFsbG9jKGNodW5rLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFidWYpIHsKLQkJCXVwKCZ0dHktPmF0b21pY193cml0ZSk7CisJCQltdXRleF91bmxvY2soJnR0eS0+YXRvbWljX3dyaXRlX2xvY2spOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJa2ZyZWUodHR5LT53cml0ZV9idWYpOwpAQCAtMTM3NCw3ICsxMzc0LDcgQEAKIAkJaW5vZGUtPmlfbXRpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOwogCQlyZXQgPSB3cml0dGVuOwogCX0KLQl1cCgmdHR5LT5hdG9taWNfd3JpdGUpOworCW11dGV4X3VubG9jaygmdHR5LT5hdG9taWNfd3JpdGVfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ0Miw4ICsxNDQyLDggQEAKIAogLyoKICAqIFdTSCAwNi8wOS85NzogUmV3cml0dGVuIHRvIHJlbW92ZSByYWNlcyBhbmQgcHJvcGVybHkgY2xlYW4gdXAgYWZ0ZXIgYQotICogZmFpbGVkIG9wZW4uICBUaGUgbmV3IGNvZGUgcHJvdGVjdHMgdGhlIG9wZW4gd2l0aCBhIHNlbWFwaG9yZSwgc28gaXQncwotICogcmVhbGx5IHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZC4gIFRoZSBzZW1hcGhvcmUgbG9ja2luZyBjYW4gcHJvYmFibHkgYmUKKyAqIGZhaWxlZCBvcGVuLiAgVGhlIG5ldyBjb2RlIHByb3RlY3RzIHRoZSBvcGVuIHdpdGggYSBtdXRleCwgc28gaXQncworICogcmVhbGx5IHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZC4gIFRoZSBtdXRleCBsb2NraW5nIGNhbiBwcm9iYWJseSBiZQogICogcmVsYXhlZCBmb3IgdGhlIChtb3N0IGNvbW1vbikgY2FzZSBvZiByZW9wZW5pbmcgYSB0dHkuCiAgKi8KIHN0YXRpYyBpbnQgaW5pdF9kZXYoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgaW50IGlkeCwKQEAgLTE2NDAsNyArMTY0MCw3IEBACiBzdWNjZXNzOgogCSpyZXRfdHR5ID0gdHR5OwogCQotCS8qIEFsbCBwYXRocyBjb21lIHRocm91Z2ggaGVyZSB0byByZWxlYXNlIHRoZSBzZW1hcGhvcmUgKi8KKwkvKiBBbGwgcGF0aHMgY29tZSB0aHJvdWdoIGhlcmUgdG8gcmVsZWFzZSB0aGUgbXV0ZXggKi8KIGVuZF9pbml0OgogCXJldHVybiByZXR2YWw7CiAKQEAgLTE4MzcsNyArMTgzNyw3IEBACiAJCS8qIEd1YXJkIGFnYWluc3QgcmFjZXMgd2l0aCB0dHktPmNvdW50IGNoYW5nZXMgZWxzZXdoZXJlIGFuZAogCQkgICBvcGVucyBvbiAvZGV2L3R0eSAqLwogCQkgICAKLQkJZG93bigmdHR5X3NlbSk7CisJCW11dGV4X2xvY2soJnR0eV9tdXRleCk7CiAJCXR0eV9jbG9zaW5nID0gdHR5LT5jb3VudCA8PSAxOwogCQlvX3R0eV9jbG9zaW5nID0gb190dHkgJiYKIAkJCShvX3R0eS0+Y291bnQgPD0gKHB0eV9tYXN0ZXIgPyAxIDogMCkpOwpAQCAtMTg2OCw3ICsxODY4LDcgQEAKIAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJyZWxlYXNlX2RldjogJXM6IHJlYWQvd3JpdGUgd2FpdCBxdWV1ZSAiCiAJCQkJICAgICJhY3RpdmUhXG4iLCB0dHlfbmFtZSh0dHksIGJ1ZikpOwotCQl1cCgmdHR5X3NlbSk7CisJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJc2NoZWR1bGUoKTsKIAl9CQogCkBAIC0xOTM0LDcgKzE5MzQsNyBAQAogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJfQogCi0JdXAoJnR0eV9zZW0pOworCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAogCS8qIGNoZWNrIHdoZXRoZXIgYm90aCBzaWRlcyBhcmUgY2xvc2luZyAuLi4gKi8KIAlpZiAoIXR0eV9jbG9zaW5nIHx8IChvX3R0eSAmJiAhb190dHlfY2xvc2luZykpCkBAIC0yMDQwLDExICsyMDQwLDExIEBACiAJaW5kZXggID0gLTE7CiAJcmV0dmFsID0gMDsKIAkKLQlkb3duKCZ0dHlfc2VtKTsKKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCiAJaWYgKGRldmljZSA9PSBNS0RFVihUVFlBVVhfTUFKT1IsMCkpIHsKIAkJaWYgKCFjdXJyZW50LT5zaWduYWwtPnR0eSkgewotCQkJdXAoJnR0eV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCQkJcmV0dXJuIC1FTlhJTzsKIAkJfQogCQlkcml2ZXIgPSBjdXJyZW50LT5zaWduYWwtPnR0eS0+ZHJpdmVyOwpAQCAtMjA3MCwxOCArMjA3MCwxOCBAQAogCQkJbm9jdHR5ID0gMTsKIAkJCWdvdG8gZ290X2RyaXZlcjsKIAkJfQotCQl1cCgmdHR5X3NlbSk7CisJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZHJpdmVyID0gZ2V0X3R0eV9kcml2ZXIoZGV2aWNlLCAmaW5kZXgpOwogCWlmICghZHJpdmVyKSB7Ci0JCXVwKCZ0dHlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiBnb3RfZHJpdmVyOgogCXJldHZhbCA9IGluaXRfZGV2KGRyaXZlciwgaW5kZXgsICZ0dHkpOwotCXVwKCZ0dHlfc2VtKTsKKwltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtMjE2Nyw5ICsyMTY3LDkgQEAKIAl9CiAJdXAoJmFsbG9jYXRlZF9wdHlzX2xvY2spOwogCi0JZG93bigmdHR5X3NlbSk7CisJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKIAlyZXR2YWwgPSBpbml0X2RldihwdG1fZHJpdmVyLCBpbmRleCwgJnR0eSk7Ci0JdXAoJnR0eV9zZW0pOworCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKQEAgLTI5MTUsOCArMjkxNSw4IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdHR5LT53cml0ZV93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0dHktPnJlYWRfd2FpdCk7CiAJSU5JVF9XT1JLKCZ0dHktPmhhbmd1cF93b3JrLCBkb190dHlfaGFuZ3VwLCB0dHkpOwotCXNlbWFfaW5pdCgmdHR5LT5hdG9taWNfcmVhZCwgMSk7Ci0Jc2VtYV9pbml0KCZ0dHktPmF0b21pY193cml0ZSwgMSk7CisJbXV0ZXhfaW5pdCgmdHR5LT5hdG9taWNfcmVhZF9sb2NrKTsKKwltdXRleF9pbml0KCZ0dHktPmF0b21pY193cml0ZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmdHR5LT5yZWFkX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0dHktPnR0eV9maWxlcyk7CiAJSU5JVF9XT1JLKCZ0dHktPlNBS193b3JrLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMgYi9kcml2ZXJzL2NoYXIvdm1lX3NjYy5jCmluZGV4IGQ5MzI1MjguLmZkMDA4MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92bWVfc2NjLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZtZV9zY2MuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJCXBvcnQtPmdzLmNsb3Npbmdfd2FpdCA9IDMwICogSFo7CiAJCXBvcnQtPmdzLnJkID0gJnNjY19yZWFsX2RyaXZlcjsKICNpZmRlZiBORVdfV1JJVEVfTE9DS0lORwotCQlwb3J0LT5ncy5wb3J0X3dyaXRlX3NlbSA9IE1VVEVYOworCQlwb3J0LT5ncy5wb3J0X3dyaXRlX211dGV4ID0gTVVURVg7CiAjZW5kaWYKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+Z3Mub3Blbl93YWl0KTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+Z3MuY2xvc2Vfd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwppbmRleCAyMjY3YzdiLi4wNWU2ZTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKQEAgLTYxMyw3ICs2MTMsNyBAQAogCS5yZWxlYXNlCT0gZ3Bpb19yZWxlYXNlLAogfTsKIAotc3RhdGljIGludCBnaXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZ2l1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplLCBmbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IG5yX3BpbnMgPSAwOwpAQCAtNjk3LDcgKzY5Nyw3IEBACiAJcmV0dXJuIGNhc2NhZGVfaXJxKEdJVUlOVF9JUlEsIGdpdV9nZXRfaXJxKTsKIH0KIAotc3RhdGljIGludCBnaXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdpdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWlvdW5tYXAoZ2l1X2Jhc2UpOwogCkBAIC03MTIsOSArNzEyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdpdV9kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBnaXVfcHJvYmUsCi0JLnJlbW92ZQkJPSBnaXVfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ2l1X3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIkdJVSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC03MjIsOSArNzIzLDE1IEBACiB7CiAJaW50IHJldHZhbDsKIAotCWdpdV9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJHSVUiLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihnaXVfcGxhdGZvcm1fZGV2aWNlKSkKLQkJcmV0dXJuIFBUUl9FUlIoZ2l1X3BsYXRmb3JtX2RldmljZSk7CisJZ2l1X3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiR0lVIiwgLTEpOworCWlmICghZ2l1X3BsYXRmb3JtX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGdpdV9wbGF0Zm9ybV9kZXZpY2UpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoZ2l1X3BsYXRmb3JtX2RldmljZSk7CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnaXVfZGV2aWNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYwppbmRleCBiYzFiNGExLi5iMTA5ZDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMKQEAgLTU1OCw3ICs1NTgsNyBAQAogCS5mb3BzCT0gJnJ0Y19mb3BzLAogfTsKIAotc3RhdGljIGludCBydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJ0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXVuc2lnbmVkIGludCBpcnE7CiAJaW50IHJldHZhbDsKQEAgLTYzMSw3ICs2MzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtNjUzLDEzICs2NTMsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRjX2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHJ0Y19wcm9iZSwKLQkucmVtb3ZlCQk9IHJ0Y19yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChydGNfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBydGNfbmFtZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHZyNDF4eF9ydGNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdnI0MXh4X3J0Y19pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtNjg0LDEwICs2ODUsMjAgQEAKIAkJYnJlYWs7CiAJfQogCi0JcnRjX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIlJUQyIsIC0xLAotCQkJICAgICAgcnRjX3Jlc291cmNlLCBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZSkpOwotCWlmIChJU19FUlIocnRjX3BsYXRmb3JtX2RldmljZSkpCi0JCXJldHVybiBQVFJfRVJSKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCXJ0Y19wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIlJUQyIsIC0xKTsKKwlpZiAoIXJ0Y19wbGF0Zm9ybV9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocnRjX3BsYXRmb3JtX2RldmljZSwKKwkJCQlydGNfcmVzb3VyY2UsIEFSUkFZX1NJWkUocnRjX3Jlc291cmNlKSk7CisKKwlpZiAocmV0dmFsID09IDApCisJCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGQocnRjX3BsYXRmb3JtX2RldmljZSk7CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcnRjX2RldmljZV9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtNjk2LDEwICs3MDcsOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2cjQxeHhfcnRjX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB2cjQxeHhfcnRjX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnRjX2RldmljZV9kcml2ZXIpOwotCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggMDkwMGQxZC4uY2E0ODQ0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTI0ODksNyArMjQ4OSw3IEBACiB9CiAKIC8qCi0gKiBXZSB0YWtlIHR0eV9zZW0gaW4gaGVyZSB0byBwcmV2ZW50IGFub3RoZXIgdGhyZWFkIGZyb20gY29taW5nIGluIHZpYSBpbml0X2RldgorICogV2UgdGFrZSB0dHlfbXV0ZXggaW4gaGVyZSB0byBwcmV2ZW50IGFub3RoZXIgdGhyZWFkIGZyb20gY29taW5nIGluIHZpYSBpbml0X2RldgogICogYW5kIHRha2luZyBhIHJlZiBhZ2FpbnN0IHRoZSB0dHkgd2hpbGUgd2UncmUgaW4gdGhlIHByb2Nlc3Mgb2YgZm9yZ2V0dGluZwogICogYWJvdXQgaXQgYW5kIGNsZWFuaW5nIHRoaW5ncyB1cC4KICAqCkBAIC0yNDk3LDcgKzI0OTcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBjb25fY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JZG93bigmdHR5X3NlbSk7CisJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJaWYgKHR0eSAmJiB0dHktPmNvdW50ID09IDEpIHsKIAkJc3RydWN0IHZjX2RhdGEgKnZjID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTI1MDcsMTUgKzI1MDcsMTUgQEAKIAkJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAkJdmNzX3JlbW92ZV9kZXZmcyh0dHkpOwotCQl1cCgmdHR5X3NlbSk7CisJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJLyoKLQkJICogdHR5X3NlbSBpcyByZWxlYXNlZCwgYnV0IHdlIHN0aWxsIGhvbGQgQktMLCBzbyB0aGVyZSBpcworCQkgKiB0dHlfbXV0ZXggaXMgcmVsZWFzZWQsIGJ1dCB3ZSBzdGlsbCBob2xkIEJLTCwgc28gdGhlcmUgaXMKIAkJICogc3RpbGwgZXhjbHVzaW9uIGFnYWluc3QgaW5pdF9kZXYoKQogCQkgKi8KIAkJcmV0dXJuOwogCX0KIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JdXAoJnR0eV9zZW0pOworCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgdmNfaW5pdChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCByb3dzLApAQCAtMjg2OSw5ICsyODY5LDkgQEAKIH0KIAogLyoKLSAqIFdlIGRlZmVyIHRoZSB0aW1lciBibGFua2luZyB0byB3b3JrIHF1ZXVlIHNvIGl0IGNhbiB0YWtlIHRoZSBjb25zb2xlIHNlbWFwaG9yZQorICogV2UgZGVmZXIgdGhlIHRpbWVyIGJsYW5raW5nIHRvIHdvcmsgcXVldWUgc28gaXQgY2FuIHRha2UgdGhlIGNvbnNvbGUgbXV0ZXgKICAqIChjb25zb2xlIG9wZXJhdGlvbnMgY2FuIHN0aWxsIGhhcHBlbiBhdCBpcnEgdGltZSwgYnV0IG9ubHkgZnJvbSBwcmludGsgd2hpY2gKLSAqIGhhcyB0aGUgY29uc29sZSBzZW1hcGhvcmUuIE5vdCBwZXJmZWN0IHlldCwgYnV0IGJldHRlciB0aGFuIG5vIGxvY2tpbmcKKyAqIGhhcyB0aGUgY29uc29sZSBtdXRleC4gTm90IHBlcmZlY3QgeWV0LCBidXQgYmV0dGVyIHRoYW4gbm8gbG9ja2luZwogICovCiBzdGF0aWMgdm9pZCBibGFua19zY3JlZW5fdCh1bnNpZ25lZCBsb25nIGR1bW15KQogewpAQCAtMzIzNCw2ICszMjM0LDE0IEBACiAJfQogfQogCitpbnQgaXNfY29uc29sZV9zdXNwZW5kX3NhZmUodm9pZCkKK3sKKwkvKiBJdCBpcyB1bnNhZmUgdG8gc3VzcGVuZCBkZXZpY2VzIHdoaWxlIFggaGFzIGNvbnRyb2wgb2YgdGhlCisJICogaGFyZHdhcmUuIE1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBvbiBhIGtlcm5lbC1jb250cm9sbGVkIGNvbnNvbGUuCisJICovCisJcmV0dXJuIHZjX2NvbnNbZmdfY29uc29sZV0uZC0+dmNfbW9kZSA9PSBLRF9URVhUOworfQorCiAvKgogICoJVmlzaWJsZSBzeW1ib2xzIGZvciBtb2R1bGVzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKaW5kZXggYzBkZmNmMi4uMTZlOTlkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKQEAgLTE0OCw2ICsxNDgsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1wY29yZV93ZHQuCiAKK2NvbmZpZyBFUDkzWFhfV0FUQ0hET0cKKwl0cmlzdGF0ZSAiRVA5M3h4IFdhdGNoZG9nIgorCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgQVJDSF9FUDkzWFgKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyCisJICBlbWJlZGRlZCBpbiB0aGUgQ2lycnVzIExvZ2ljIEVQOTN4eCBmYW1pbHkgb2YgZGV2aWNlcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXA5M3h4X3dkdC4KKwogIyBYODYgKGkzODYgKyBpYTY0ICsgeDg2XzY0KSBBcmNoaXRlY3R1cmUKIAogY29uZmlnIEFDUVVJUkVfV0RUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggMzZjMGIyOC4uZDZmMjdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMzAsNiArMzAsNyBAQAogb2JqLSQoQ09ORklHX1MzQzI0MTBfV0FUQ0hET0cpICs9IHMzYzI0MTBfd2R0Lm8KIG9iai0kKENPTkZJR19TQTExMDBfV0FUQ0hET0cpICs9IHNhMTEwMF93ZHQubwogb2JqLSQoQ09ORklHX01QQ09SRV9XQVRDSERPRykgKz0gbXBjb3JlX3dkdC5vCitvYmotJChDT05GSUdfRVA5M1hYX1dBVENIRE9HKSArPSBlcDkzeHhfd2R0Lm8KIAogIyBYODYgKGkzODYgKyBpYTY0ICsgeDg2XzY0KSBBcmNoaXRlY3R1cmUKIG9iai0kKENPTkZJR19BQ1FVSVJFX1dEVCkgKz0gYWNxdWlyZXdkdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXA5M3h4X3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2VwOTN4eF93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDIxZGJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2VwOTN4eF93ZHQuYwpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIFdhdGNoZG9nIGRyaXZlciBmb3IgQ2lycnVzIExvZ2ljIEVQOTN4eCBmYW1pbHkgb2YgZGV2aWNlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgUmF5IExlaHRpbmllbWkKKyAqIENvcHlyaWdodCAoYykgMjAwNiBUb3dlciBUZWNobm9sb2dpZXMKKyAqIEJhc2VkIG9uIGVwOTN4eCBkcml2ZXIsIGJpdHMgZnJvbSBhbGltNzEwMV93ZHQuYworICoKKyAqIEF1dGhvcnM6IFJheSBMZWh0aW5pZW1pIDxyYXlsQG1haWwuY29tPiwKKyAqCUFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogVGhpcyB3YXRjaGRvZyBmaXJlcyBhZnRlciAyNTBtc2VjLCB3aGljaCBpcyBhIHRvbyBzaG9ydCBpbnRlcnZhbAorICogZm9yIHVzIHRvIHJlbHkgb24gdGhlIHVzZXIgc3BhY2UgZGFlbW9uIGFsb25lLiBTbyB3ZSBwaW5nIHRoZQorICogd2R0IGVhY2ggfjIwMG1zZWMgYW5kIGV2ZW50dWFsbHkgc3RvcCBkb2luZyBpdCBpZiB0aGUgdXNlciBzcGFjZQorICogZGFlbW9uIGRpZXMuCisgKgorICogVE9ETzoKKyAqCisgKgktIFRlc3QgbGFzdCByZXNldCBmcm9tIHdhdGNoZG9nIHN0YXR1cworICoJLSBBZGQgYSBmZXcgbWlzc2luZyBpb2N0bHMKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2RlZmluZSBXRFRfVkVSU0lPTgkiMC4zIgorI2RlZmluZSBQRlgJCSJlcDkzeHhfd2R0OiAiCisKKy8qIGRlZmF1bHQgdGltZW91dCAoc2VjcykgKi8KKyNkZWZpbmUgV0RUX1RJTUVPVVQgMzAKKworc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOworc3RhdGljIGludCB0aW1lb3V0ID0gV0RUX1RJTUVPVVQ7CisKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5leHRfaGVhcnRiZWF0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X3N0YXR1czsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJvb3Rfc3RhdHVzOworCisjZGVmaW5lIFdEVF9JTl9VU0UJCTAKKyNkZWZpbmUgV0RUX09LX1RPX0NMT1NFCQkxCisKKyNkZWZpbmUgRVA5M1hYX1dEVF9SRUcoeCkJKEVQOTNYWF9XQVRDSERPR19CQVNFICsgKHgpKQorI2RlZmluZSBFUDkzWFhfV0RUX1dBVENIRE9HCUVQOTNYWF9XRFRfUkVHKDB4MDApCisjZGVmaW5lIEVQOTNYWF9XRFRfV0RTVEFUVVMJRVA5M1hYX1dEVF9SRUcoMHgwNCkKKworLyogcmVzZXQgdGhlIHdkdCBldmVyeSB+MjAwbXMgKi8KKyNkZWZpbmUgV0RUX0lOVEVSVkFMIChIWi81KQorCitzdGF0aWMgdm9pZCB3ZHRfZW5hYmxlKHZvaWQpCit7CisJX19yYXdfd3JpdGV3KDB4YWFhYSwgRVA5M1hYX1dEVF9XQVRDSERPRyk7Cit9CisKK3N0YXRpYyB2b2lkIHdkdF9kaXNhYmxlKHZvaWQpCit7CisJX19yYXdfd3JpdGV3KDB4YWE1NSwgRVA5M1hYX1dEVF9XQVRDSERPRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3ZHRfcGluZyh2b2lkKQoreworCV9fcmF3X3dyaXRldygweDU1NTUsIEVQOTNYWF9XRFRfV0FUQ0hET0cpOworfQorCitzdGF0aWMgdm9pZCB3ZHRfc3RhcnR1cCh2b2lkKQoreworCW5leHRfaGVhcnRiZWF0ID0gamlmZmllcyArICh0aW1lb3V0ICogSFopOworCisJd2R0X2VuYWJsZSgpOworCW1vZF90aW1lcigmdGltZXIsIGppZmZpZXMgKyBXRFRfSU5URVJWQUwpOworfQorCitzdGF0aWMgdm9pZCB3ZHRfc2h1dGRvd24odm9pZCkKK3sKKwlkZWxfdGltZXJfc3luYygmdGltZXIpOworCXdkdF9kaXNhYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdkdF9rZWVwYWxpdmUodm9pZCkKK3sKKwkvKiB1c2VyIGxhbmQgcGluZyAqLworCW5leHRfaGVhcnRiZWF0ID0gamlmZmllcyArICh0aW1lb3V0ICogSFopOworfQorCitzdGF0aWMgaW50IGVwOTN4eF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cykpCisJCXJldHVybiAtRUJVU1k7CisKKwljbGVhcl9iaXQoV0RUX09LX1RPX0NMT1NFLCAmd2R0X3N0YXR1cyk7CisKKwl3ZHRfc3RhcnR1cCgpOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgc3NpemVfdAorZXA5M3h4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBsZW4sCisJCSBsb2ZmX3QgKnBwb3MpCit7CisJLyogQ2FuJ3Qgc2VlayAocHdyaXRlKSBvbiB0aGlzIGRldmljZSAqLworCWlmICgqcHBvcyAhPSBmaWxlLT5mX3BvcykKKwkJcmV0dXJuIC1FU1BJUEU7CisKKwlpZiAobGVuKSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQljbGVhcl9iaXQoV0RUX09LX1RPX0NMT1NFLCAmd2R0X3N0YXR1cyk7CisKKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisKKwkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJCWlmIChjID09ICdWJykKKwkJCQkJc2V0X2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKKwkJCQllbHNlCisJCQkJCWNsZWFyX2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKKwkJCX0KKwkJfQorCQl3ZHRfa2VlcGFsaXZlKCk7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCS5vcHRpb25zID0gV0RJT0ZfQ0FSRFJFU0VUIHwgV0RJT0ZfTUFHSUNDTE9TRSwKKwkuaWRlbnRpdHkgPSAiRVA5M3h4IFdhdGNoZG9nIiwKK307CisKK3N0YXRpYyBpbnQKK2VwOTN4eF93ZHRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCSB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldCA9IGNvcHlfdG9fdXNlcigoc3RydWN0IHdhdGNoZG9nX2luZm8gX191c2VyICopYXJnLCAmaWRlbnQsCisJCQkJc2l6ZW9mKGlkZW50KSkgPyAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJcmV0ID0gcHV0X3VzZXIoMCwgKGludCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0ID0gcHV0X3VzZXIoYm9vdF9zdGF0dXMsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCS8qIGFjdHVhbGx5LCBpdCBpcyAwLjI1MCBzZWNvbmRzLi4uLiAqLworCQlyZXQgPSBwdXRfdXNlcigxLCAoaW50IF9fdXNlciAqKWFyZyk7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCXdkdF9rZWVwYWxpdmUoKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICh0ZXN0X2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKSkKKwkJd2R0X3NodXRkb3duKCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9DUklUIFBGWCAiRGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHkgLSAiCisJCQkidGltZXIgd2lsbCBub3Qgc3RvcFxuIik7CisKKwljbGVhcl9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpOworCWNsZWFyX2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDkzeHhfd2R0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBlcDkzeHhfd2R0X3dyaXRlLAorCS5pb2N0bAkJPSBlcDkzeHhfd2R0X2lvY3RsLAorCS5vcGVuCQk9IGVwOTN4eF93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IGVwOTN4eF93ZHRfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBlcDkzeHhfd2R0X21pc2NkZXYgPSB7CisJLm1pbm9yCQk9IFdBVENIRE9HX01JTk9SLAorCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJLmZvcHMJCT0gJmVwOTN4eF93ZHRfZm9wcywKK307CisKK3N0YXRpYyB2b2lkIGVwOTN4eF90aW1lcl9waW5nKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgbmV4dF9oZWFydGJlYXQpKQorCQl3ZHRfcGluZygpOworCisJLyogUmUtc2V0IHRoZSB0aW1lciBpbnRlcnZhbCAqLworCW1vZF90aW1lcigmdGltZXIsIGppZmZpZXMgKyBXRFRfSU5URVJWQUwpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhfd2R0X2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gbWlzY19yZWdpc3RlcigmZXA5M3h4X3dkdF9taXNjZGV2KTsKKworCWJvb3Rfc3RhdHVzID0gX19yYXdfcmVhZGwoRVA5M1hYX1dEVF9XQVRDSERPRykgJiAweDAxID8gMSA6IDA7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRVA5M1hYIHdhdGNoZG9nLCBkcml2ZXIgdmVyc2lvbiAiCisJCVdEVF9WRVJTSU9OICIlc1xuIiwKKwkJKF9fcmF3X3JlYWRsKEVQOTNYWF9XRFRfV0FUQ0hET0cpICYgMHgwOCkKKwkJPyAiIChuQ1MxIGRpc2FibGUgZGV0ZWN0ZWQpIiA6ICIiKTsKKworCWlmICh0aW1lb3V0IDwgMSB8fCB0aW1lb3V0ID4gMzYwMCkgeworCQl0aW1lb3V0ID0gV0RUX1RJTUVPVVQ7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkidGltZW91dCB2YWx1ZSBtdXN0IGJlIDE8PXg8PTM2MDAsIHVzaW5nICVkXG4iLAorCQkJdGltZW91dCk7CisJfQorCisJc2V0dXBfdGltZXIoJnRpbWVyLCBlcDkzeHhfdGltZXJfcGluZywgMSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVwOTN4eF93ZHRfZXhpdCh2b2lkKQoreworCXdkdF9zaHV0ZG93bigpOworCW1pc2NfZGVyZWdpc3RlcigmZXA5M3h4X3dkdF9taXNjZGV2KTsKK30KKworbW9kdWxlX2luaXQoZXA5M3h4X3dkdF9pbml0KTsKK21vZHVsZV9leGl0KGVwOTN4eF93ZHRfZXhpdCk7CisKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQiKTsKKworbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IGluIHNlY29uZHMuICgxPD10aW1lb3V0PD0zNjAwLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1RJTUVPVVQpICIpIik7CisKK01PRFVMRV9BVVRIT1IoIlJheSBMZWh0aW5pZW1pIDxyYXlsQG1haWwuY29tPiwiCisJCSJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRVA5M3h4IFdhdGNoZG9nIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihXRFRfVkVSU0lPTik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYwppbmRleCBiNGQ4NDM0Li4yYzJjNTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTMzOCw2ICszMzgsMTAgQEAKIAogCXdkdC0+ZGV2ID0gJmRldi0+ZGV2OwogCXdkdC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmICh3ZHQtPmlycSA8IDApIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9mcmVlOworCX0KIAl3ZHQtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmICghd2R0LT5iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCmluZGV4IDAwZDllZjAuLmYxYjljZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCkBAIC0yMjgsMTUgKzIyOCwyNSBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiTVY2NHg2MCB3YXRjaGRvZyBkcml2ZXJcbiIpOwogCi0JbXY2NHg2MF93ZHRfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShNVjY0eDYwX1dEVF9OQU1FLAotCQkJCQkJCSAgLTEsIE5VTEwsIDApOwotCWlmIChJU19FUlIobXY2NHg2MF93ZHRfZGV2KSkgewotCQlyZXQgPSBQVFJfRVJSKG12NjR4NjBfd2R0X2Rldik7CisJbXY2NHg2MF93ZHRfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKE1WNjR4NjBfV0RUX05BTUUsIC0xKTsKKwlpZiAoIW12NjR4NjBfd2R0X2RldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKG12NjR4NjBfd2R0X2Rldik7CisJaWYgKHJldCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG12NjR4NjBfd2R0X2Rldik7CiAJCWdvdG8gb3V0OwogCX0KIAogCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKLSAgICAgIG91dDoKKwlpZiAocmV0KSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG12NjR4NjBfd2R0X2Rldik7CisJCWdvdG8gb3V0OworCX0KKworIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3VzYi5jCmluZGV4IDE1MzNmNTYuLjI3MDBjNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3VzYi5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3VzYi5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogCiAjaWZkZWYgQ09ORklHX1VTQl9ERUJVRwpAQCAtMTQzLDcgKzE0NCw3IEBACiBzdGF0aWMgc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkX2RldmljZTsKIAogLyogcHJldmVudCByYWNlcyBiZXR3ZWVuIG9wZW4oKSBhbmQgZGlzY29ubmVjdCgpICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWCAoZGlzY29ubmVjdF9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChkaXNjb25uZWN0X211dGV4KTsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZQkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKQEAgLTcyMyw3ICs3MjQsNyBAQAogCXN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZDsKIAogCS8qIHByZXZlbnQgcmFjZXMgd2l0aCBvcGVuKCkgKi8KLQlkb3duICgmZGlzY29ubmVjdF9zZW0pOworCW11dGV4X2xvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJdXNiX3Bjd2QgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRlcmZhY2UpOwogCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgTlVMTCk7CkBAIC03NDksNyArNzUwLDcgQEAKIAogCWNhcmRzX2ZvdW5kLS07CiAKLQl1cCAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlVTQiBQQyBXYXRjaGRvZyBkaXNjb25uZWN0ZWRcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwppbmRleCA1MDU2NzdmLi4zNTg5NzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogCkBAIC00MSw3ICs0Miw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGNuX2lkeCwgIkNvbm5lY3RvcidzIG1haW4gZGV2aWNlIGlkeC4iKTsKIE1PRFVMRV9QQVJNX0RFU0MoY25fdmFsLCAiQ29ubmVjdG9yJ3MgbWFpbiBkZXZpY2UgdmFsLiIpOwogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChub3RpZnlfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKG5vdGlmeV9sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQobm90aWZ5X2xpc3QpOwogCiBzdGF0aWMgc3RydWN0IGNuX2RldiBjZGV2OwpAQCAtOTcsNiArOTgsOSBAQAogCQlncm91cCA9IF9fZ3JvdXA7CiAJfQogCisJaWYgKCFuZXRsaW5rX2hhc19saXN0ZW5lcnMoZGV2LT5ubHMsIGdyb3VwKSkKKwkJcmV0dXJuIC1FU1JDSDsKKwogCXNpemUgPSBOTE1TR19TUEFDRShzaXplb2YoKm1zZykgKyBtc2ctPmxlbik7CiAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2spOwpAQCAtMTExLDkgKzExNSw3IEBACiAKIAlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gZ3JvdXA7CiAKLQluZXRsaW5rX2Jyb2FkY2FzdChkZXYtPm5scywgc2tiLCAwLCBncm91cCwgZ2ZwX21hc2spOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG5ldGxpbmtfYnJvYWRjYXN0KGRldi0+bmxzLCBza2IsIDAsIGdyb3VwLCBnZnBfbWFzayk7CiAKIG5sbXNnX2ZhaWx1cmU6CiAJa2ZyZWVfc2tiKHNrYik7CkBAIC0yNTksNyArMjYxLDcgQEAKIHsKIAlzdHJ1Y3QgY25fY3RsX2VudHJ5ICplbnQ7CiAKLQlkb3duKCZub3RpZnlfbG9jayk7CisJbXV0ZXhfbG9jaygmbm90aWZ5X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50LCAmbm90aWZ5X2xpc3QsIG5vdGlmeV9lbnRyeSkgewogCQlpbnQgaTsKIAkJc3RydWN0IGNuX25vdGlmeV9yZXEgKnJlcTsKQEAgLTI5Miw3ICsyOTQsNyBAQAogCQkJY25fbmV0bGlua19zZW5kKCZtLCBjdGwtPmdyb3VwLCBHRlBfS0VSTkVMKTsKIAkJfQogCX0KLQl1cCgmbm90aWZ5X2xvY2spOworCW11dGV4X3VubG9jaygmbm90aWZ5X2xvY2spOwogfQogCiAvKgpAQCAtNDA2LDE0ICs0MDgsMTQgQEAKIAlpZiAoY3RsLT5ncm91cCA9PSAwKSB7CiAJCXN0cnVjdCBjbl9jdGxfZW50cnkgKm47CiAKLQkJZG93bigmbm90aWZ5X2xvY2spOworCQltdXRleF9sb2NrKCZub3RpZnlfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnQsIG4sICZub3RpZnlfbGlzdCwgbm90aWZ5X2VudHJ5KSB7CiAJCQlpZiAoY25fY3RsX21zZ19lcXVhbHMoZW50LT5tc2csIGN0bCkpIHsKIAkJCQlsaXN0X2RlbCgmZW50LT5ub3RpZnlfZW50cnkpOwogCQkJCWtmcmVlKGVudCk7CiAJCQl9CiAJCX0KLQkJdXAoJm5vdGlmeV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZub3RpZnlfbG9jayk7CiAKIAkJcmV0dXJuOwogCX0KQEAgLTQyOCw5ICs0MzAsOSBAQAogCiAJbWVtY3B5KGVudC0+bXNnLCBjdGwsIHNpemUgLSBzaXplb2YoKmVudCkpOwogCi0JZG93bigmbm90aWZ5X2xvY2spOworCW11dGV4X2xvY2soJm5vdGlmeV9sb2NrKTsKIAlsaXN0X2FkZCgmZW50LT5ub3RpZnlfZW50cnksICZub3RpZnlfbGlzdCk7Ci0JdXAoJm5vdGlmeV9sb2NrKTsKKwltdXRleF91bmxvY2soJm5vdGlmeV9sb2NrKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgY25faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKaW5kZXggNjQ4MTlhYS4uNTE1OGE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYworKysgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCkBAIC0yODQsNyArMjg0LDExIEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFlc19jdHggKmFlc19jdHgodm9pZCAqY3R4KQogewotCXJldHVybiAoc3RydWN0IGFlc19jdHggKilBTElHTigodW5zaWduZWQgbG9uZyljdHgsIFBBRExPQ0tfQUxJR05NRU5UKTsKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gUEFETE9DS19BTElHTk1FTlQ7CisKKwlpZiAoYWxpZ24gPD0gY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpCisJCWFsaWduID0gMTsKKwlyZXR1cm4gKHN0cnVjdCBhZXNfY3R4ICopQUxJR04oKHVuc2lnbmVkIGxvbmcpY3R4LCBhbGlnbik7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTM0OCwxMCArMzUyLDEwIEBACiAJCWJyZWFrOwogCiAJY2FzZSAzMjoKLQkJRV9LRVlbNF0gPSBsZTMyX3RvX2NwdShpbl9rZXlbNF0pOwotCQlFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGluX2tleVs1XSk7Ci0JCUVfS0VZWzZdID0gbGUzMl90b19jcHUoaW5fa2V5WzZdKTsKLQkJdCA9IEVfS0VZWzddID0gbGUzMl90b19jcHUoaW5fa2V5WzddKTsKKwkJRV9LRVlbNF0gPSBsZTMyX3RvX2NwdShrZXlbNF0pOworCQlFX0tFWVs1XSA9IGxlMzJfdG9fY3B1KGtleVs1XSk7CisJCUVfS0VZWzZdID0gbGUzMl90b19jcHUoa2V5WzZdKTsKKwkJdCA9IEVfS0VZWzddID0gbGUzMl90b19jcHUoa2V5WzddKTsKIAkJZm9yIChpID0gMDsgaSA8IDc7ICsraSkKIAkJCWxvb3A4IChpKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rpby9kaW8tZHJpdmVyLmMgYi9kcml2ZXJzL2Rpby9kaW8tZHJpdmVyLmMKaW5kZXggY2E4ZTY5ZC4uZTRjNDhlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaW8vZGlvLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvZGlvL2Rpby1kcml2ZXIuYwpAQCAtNzEsMjIgKzcxLDE3IEBACiAJICogIEBkcnY6IHRoZSBkcml2ZXIgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCiAJICoKIAkgKiAgQWRkcyB0aGUgZHJpdmVyIHN0cnVjdHVyZSB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGRyaXZlcnMKLQkgKiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIERJTyBkZXZpY2VzIHdoaWNoIHdlcmUgY2xhaW1lZCBieSB0aGUgZHJpdmVyCi0JICogIGR1cmluZyByZWdpc3RyYXRpb24uICBUaGUgZHJpdmVyIHJlbWFpbnMgcmVnaXN0ZXJlZCBldmVuIGlmIHRoZQotCSAqICByZXR1cm4gdmFsdWUgaXMgemVyby4KKwkgKiAgUmV0dXJucyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUuCiAJICovCiAKIGludCBkaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBkaW9fZHJpdmVyICpkcnYpCiB7Ci0JaW50IGNvdW50ID0gMDsKLQogCS8qIGluaXRpYWxpemUgY29tbW9uIGRyaXZlciBmaWVsZHMgKi8KIAlkcnYtPmRyaXZlci5uYW1lID0gZHJ2LT5uYW1lOwogCWRydi0+ZHJpdmVyLmJ1cyA9ICZkaW9fYnVzX3R5cGU7CiAKIAkvKiByZWdpc3RlciB3aXRoIGNvcmUgKi8KLQljb3VudCA9IGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwotCXJldHVybiBjb3VudCA/IGNvdW50IDogMTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCAxOGE0NTU2Li41MmYzZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNiwxNyArNiwyOSBAQAogIyAkSWQ6IEtjb25maWcsdiAxLjQuMi43IDIwMDUvMDcvMDggMjI6MDU6MzggZHNwX2xsbmwgRXhwICQKICMKIAotbWVudSAnRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpJworbWVudSAnRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpJwogCiBjb25maWcgRURBQwotCXRyaXN0YXRlICJFREFDIGNvcmUgc3lzdGVtIGVycm9yIHJlcG9ydGluZyIKLQlkZXBlbmRzIG9uIFg4NgorCXRyaXN0YXRlICJFREFDIGNvcmUgc3lzdGVtIGVycm9yIHJlcG9ydGluZyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFg4NiAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBFREFDIGlzIGRlc2lnbmVkIHRvIHJlcG9ydCBlcnJvcnMgaW4gdGhlIGNvcmUgc3lzdGVtLgogCSAgVGhlc2UgYXJlIGxvdy1sZXZlbCBlcnJvcnMgdGhhdCBhcmUgcmVwb3J0ZWQgaW4gdGhlIENQVSBvcgogCSAgc3VwcG9ydGluZyBjaGlwc2V0OiBtZW1vcnkgZXJyb3JzLCBjYWNoZSBlcnJvcnMsIFBDSSBlcnJvcnMsCiAJICB0aGVybWFsIHRocm90dGxpbmcsIGV0Yy4uICBJZiB1bnN1cmUsIHNlbGVjdCAnWScuCiAKKwkgIElmIHRoaXMgY29kZSBpcyByZXBvcnRpbmcgcHJvYmxlbXMgb24geW91ciBzeXN0ZW0sIHBsZWFzZQorCSAgc2VlIHRoZSBFREFDIHByb2plY3Qgd2ViIHBhZ2VzIGZvciBtb3JlIGluZm9ybWF0aW9uIGF0OgorCisJICA8aHR0cDovL2JsdWVzbW9rZS5zb3VyY2Vmb3JnZS5uZXQvPgorCisJICBhbmQ6CisKKwkgIDxodHRwOi8vYnV0dGVyc2lkZXVwLmNvbS9lZGFjd2lraT4KKworCSAgVGhlcmUgaXMgYWxzbyBhIG1haWxpbmcgbGlzdCBmb3IgdGhlIEVEQUMgcHJvamVjdCwgd2hpY2ggY2FuCisJICBiZSBmb3VuZCB2aWEgdGhlIHNvdXJjZWZvcmdlIHBhZ2UuCisKIAogY29tbWVudCAiUmVwb3J0aW5nIHN1YnN5c3RlbXMiCiAJZGVwZW5kcyBvbiBFREFDCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuYwppbmRleCBiMTBlZTQ2Li45YzIwNTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmMKQEAgLTM4LDYgKzM4LDEyIEBACiAKICNkZWZpbmUJRURBQ19NQ19WRVJTSU9OCSJlZGFjX21jICBWZXI6IDIuMC4wICIgX19EQVRFX18KIAorLyogRm9yIG5vdywgZGlzYWJsZSB0aGUgRURBQyBzeXNmcyBjb2RlLiAgVGhlIHN5c2ZzIGludGVyZmFjZSB0aGF0IEVEQUMKKyAqIHByZXNlbnRzIHRvIHVzZXIgc3BhY2UgbmVlZHMgbW9yZSB0aG91Z2h0LCBhbmQgaXMgbGlrZWx5IHRvIGNoYW5nZQorICogc3Vic3RhbnRpYWxseS4KKyAqLworI2RlZmluZSBESVNBQkxFX0VEQUNfU1lTRlMKKwogI2lmZGVmIENPTkZJR19FREFDX0RFQlVHCiAvKiBWYWx1ZXMgb2YgMCB0byA0IHdpbGwgZ2VuZXJhdGUgb3V0cHV0ICovCiBpbnQgZWRhY19kZWJ1Z19sZXZlbCA9IDE7CkBAIC00Nyw3ICs1Myw3IEBACiAvKiBFREFDIENvbnRyb2xzLCBzZXRhYmxlIGJ5IG1vZHVsZSBwYXJhbWV0ZXIsIGFuZCBzeXNmcyAqLwogc3RhdGljIGludCBsb2dfdWUgPSAxOwogc3RhdGljIGludCBsb2dfY2UgPSAxOwotc3RhdGljIGludCBwYW5pY19vbl91ZSA9IDE7CitzdGF0aWMgaW50IHBhbmljX29uX3VlOwogc3RhdGljIGludCBwb2xsX21zZWMgPSAxMDAwOwogCiBzdGF0aWMgaW50IGNoZWNrX3BjaV9wYXJpdHkgPSAwOwkvKiBkZWZhdWx0IFlFUyBjaGVjayBQQ0kgcGFyaXR5ICovCkBAIC03Nyw2ICs4Myw4IEBACiAKIC8qICBTVEFSVCBzeXNmcyBkYXRhIGFuZCBtZXRob2RzICovCiAKKyNpZm5kZWYgRElTQUJMRV9FREFDX1NZU0ZTCisKIHN0YXRpYyBjb25zdCBjaGFyICptZW1fdHlwZXNbXSA9IHsKIAlbTUVNX0VNUFRZXSA9ICJFbXB0eSIsCiAJW01FTV9SRVNFUlZFRF0gPSAiUmVzZXJ2ZWQiLApAQCAtMTMyLDExICsxNDAsMTMgQEAKICAqIC9zeXMvZGV2aWNlcy9zeXN0ZW0vZWRhYy9tYzsKICAqIAlkYXRhIHN0cnVjdHVyZXMgYW5kIG1ldGhvZHMKICAqLworI2lmIDAKIHN0YXRpYyBzc2l6ZV90IG1lbWN0cmxfc3RyaW5nX3Nob3codm9pZCAqcHRyLCBjaGFyICpidWZmZXIpCiB7CiAJY2hhciAqdmFsdWUgPSAoY2hhciopIHB0cjsKIAlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIlc1xuIiwgdmFsdWUpOwogfQorI2VuZGlmCiAKIHN0YXRpYyBzc2l6ZV90IG1lbWN0cmxfaW50X3Nob3codm9pZCAqcHRyLCBjaGFyICpidWZmZXIpCiB7CkBAIC0yMDcsNyArMjE3LDkgQEAKIH07CiAKIC8qIGN3cm93PGlkPiBhdHRyaWJ1dGUgZiovCisjaWYgMAogTUVNQ1RSTF9TVFJJTkdfQVRUUihtY192ZXJzaW9uLEVEQUNfTUNfVkVSU0lPTixTX0lSVUdPLG1lbWN0cmxfc3RyaW5nX3Nob3csTlVMTCk7CisjZW5kaWYKIAogLyogY3Nyb3c8aWQ+IGNvbnRyb2wgZmlsZXMgKi8KIE1FTUNUUkxfQVRUUihwYW5pY19vbl91ZSxTX0lSVUdPfFNfSVdVU1IsbWVtY3RybF9pbnRfc2hvdyxtZW1jdHJsX2ludF9zdG9yZSk7CkBAIC0yMjIsNyArMjM0LDYgQEAKIAkmYXR0cl9sb2dfdWUsCiAJJmF0dHJfbG9nX2NlLAogCSZhdHRyX3BvbGxfbXNlYywKLQkmYXR0cl9tY192ZXJzaW9uLAogCU5VTEwsCiB9OwogCkBAIC0yMzgsNiArMjQ5LDcgQEAKIAkuZGVmYXVsdF9hdHRycwk9IChzdHJ1Y3QgYXR0cmlidXRlICoqKSBtZW1jdHJsX2F0dHIsCiB9OwogCisjZW5kaWYgIC8qIERJU0FCTEVfRURBQ19TWVNGUyAqLwogCiAvKiBJbml0aWFsaXplIHRoZSBtYWluIHN5c2ZzIGVudHJpZXMgZm9yIGVkYWM6CiAgKiAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vZWRhYwpAQCAtMjQ4LDYgKzI2MCwxMSBAQAogICogICAgICAgICAhMCBGQUlMVVJFCiAgKi8KIHN0YXRpYyBpbnQgZWRhY19zeXNmc19tZW1jdHJsX3NldHVwKHZvaWQpCisjaWZkZWYgRElTQUJMRV9FREFDX1NZU0ZTCit7CisJcmV0dXJuIDA7Cit9CisjZWxzZQogewogCWludCBlcnI9MDsKIApAQCAtMjgwLDYgKzI5Nyw3IEBACiAKIAlyZXR1cm4gZXJyOwogfQorI2VuZGlmICAvKiBESVNBQkxFX0VEQUNfU1lTRlMgKi8KIAogLyoKICAqIE1DIHRlYXJkb3duOgpAQCAtMjg3LDYgKzMwNSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGVkYWNfc3lzZnNfbWVtY3RybF90ZWFyZG93bih2b2lkKQogeworI2lmbmRlZiBESVNBQkxFX0VEQUNfU1lTRlMKIAlkZWJ1Z2YwKCJNQzogIiBfX0ZJTEVfXyAiOiAlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBVbnJlZ2lzdGVyIHRoZSBNQydzIGtvYmplY3QgKi8KQEAgLTI5Nyw4ICszMTYsMTEgQEAKIAogCS8qIFVucmVnaXN0ZXIgdGhlICdlZGFjJyBvYmplY3QgKi8KIAlzeXNkZXZfY2xhc3NfdW5yZWdpc3RlcigmZWRhY19jbGFzcyk7CisjZW5kaWYgIC8qIERJU0FCTEVfRURBQ19TWVNGUyAqLwogfQogCisjaWZuZGVmIERJU0FCTEVfRURBQ19TWVNGUworCiAvKgogICogL3N5cy9kZXZpY2VzL3N5c3RlbS9lZGFjL3BjaTsKICAqIAlkYXRhIHN0cnVjdHVyZXMgYW5kIG1ldGhvZHMKQEAgLTMwOSw2ICszMzEsOCBAQAogCWludCAqY291bnQ7CiB9OwogCisKKyNpZiAwCiAvKiBPdXRwdXQgdGhlIGxpc3QgYXM6ICB2ZW5kb3JfaWQ6ZGV2aWNlOmlkPCx2ZW5kb3JfaWQ6ZGV2aWNlX2lkPiAqLwogc3RhdGljIHNzaXplX3QgZWRhY19wY2lfbGlzdF9zdHJpbmdfc2hvdyh2b2lkICpwdHIsIGNoYXIgKmJ1ZmZlcikKIHsKQEAgLTQzMCw2ICs0NTQsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorI2VuZGlmCiBzdGF0aWMgc3NpemVfdCBlZGFjX3BjaV9pbnRfc2hvdyh2b2lkICpwdHIsIGNoYXIgKmJ1ZmZlcikKIHsKIAlpbnQgKnZhbHVlID0gcHRyOwpAQCAtNDk4LDYgKzUyMyw3IEBACiAJLnN0b3JlICA9IF9zdG9yZSwJCQkJCVwKIH07CiAKKyNpZiAwCiBzdGF0aWMgc3RydWN0IGxpc3RfY29udHJvbCBwY2lfd2hpdGVsaXN0X2NvbnRyb2wgPSB7CiAJLmxpc3QgPSBwY2lfd2hpdGVsaXN0LAogCS5jb3VudCA9ICZwY2lfd2hpdGVsaXN0X2NvdW50CkBAIC01MjAsNiArNTQ2LDcgQEAKIAlTX0lSVUdPfFNfSVdVU1IsCiAJZWRhY19wY2lfbGlzdF9zdHJpbmdfc2hvdywKIAllZGFjX3BjaV9saXN0X3N0cmluZ19zdG9yZSk7CisjZW5kaWYKIAogLyogUENJIFBhcml0eSBjb250cm9sIGZpbGVzICovCiBFREFDX1BDSV9BVFRSKGNoZWNrX3BjaV9wYXJpdHksU19JUlVHT3xTX0lXVVNSLGVkYWNfcGNpX2ludF9zaG93LGVkYWNfcGNpX2ludF9zdG9yZSk7CkBAIC01MzEsOCArNTU4LDYgQEAKIAkmZWRhY19wY2lfYXR0cl9jaGVja19wY2lfcGFyaXR5LAogCSZlZGFjX3BjaV9hdHRyX3BhbmljX29uX3BjaV9wYXJpdHksCiAJJmVkYWNfcGNpX2F0dHJfcGNpX3Bhcml0eV9jb3VudCwKLQkmZWRhY19wY2lfYXR0cl9wY2lfcGFyaXR5X3doaXRlbGlzdCwKLQkmZWRhY19wY2lfYXR0cl9wY2lfcGFyaXR5X2JsYWNrbGlzdCwKIAlOVUxMLAogfTsKIApAQCAtNTQ4LDExICs1NzMsMTggQEAKIAkuZGVmYXVsdF9hdHRycwk9IChzdHJ1Y3QgYXR0cmlidXRlICoqKSBlZGFjX3BjaV9hdHRyLAogfTsKIAorI2VuZGlmICAvKiBESVNBQkxFX0VEQUNfU1lTRlMgKi8KKwogLyoqCiAgKiBlZGFjX3N5c2ZzX3BjaV9zZXR1cCgpCiAgKgogICovCiBzdGF0aWMgaW50IGVkYWNfc3lzZnNfcGNpX3NldHVwKHZvaWQpCisjaWZkZWYgRElTQUJMRV9FREFDX1NZU0ZTCit7CisJcmV0dXJuIDA7Cit9CisjZWxzZQogewogCWludCBlcnI7CiAKQEAgLTU3NiwxNiArNjA4LDIwIEBACiAJfQogCXJldHVybiBlcnI7CiB9Ci0KKyNlbmRpZiAgLyogRElTQUJMRV9FREFDX1NZU0ZTICovCiAKIHN0YXRpYyB2b2lkIGVkYWNfc3lzZnNfcGNpX3RlYXJkb3duKHZvaWQpCiB7CisjaWZuZGVmIERJU0FCTEVfRURBQ19TWVNGUwogCWRlYnVnZjAoIk1DOiAiIF9fRklMRV9fICI6ICVzKClcbiIsIF9fZnVuY19fKTsKIAogCWtvYmplY3RfdW5yZWdpc3RlcigmZWRhY19wY2lfa29iaik7CiAJa29iamVjdF9wdXQoJmVkYWNfcGNpX2tvYmopOworI2VuZGlmCiB9CiAKKyNpZm5kZWYgRElTQUJMRV9FREFDX1NZU0ZTCisKIC8qIEVEQUMgc3lzZnMgQ1NST1cgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZXRob2RzICovCiAKIC8qIFNldCBvZiBtb3JlIGRldGFpbGVkIGNzcm93PGlkPiBhdHRyaWJ1dGUgc2hvdy9zdG9yZSBmdW5jdGlvbnMgKi8KQEAgLTEwMzksNiArMTA3NSw4IEBACiAJLmRlZmF1bHRfYXR0cnMJPSAoc3RydWN0IGF0dHJpYnV0ZSAqKikgbWNpX2F0dHIsCiB9OwogCisjZW5kaWYgIC8qIERJU0FCTEVfRURBQ19TWVNGUyAqLworCiAjZGVmaW5lIEVEQUNfREVWSUNFX1NZTUxJTksJImRldmljZSIKIAogLyoKQEAgLTEwNTAsNiArMTA4OCwxMSBAQAogICoJITAJRmFpbHVyZQogICovCiBzdGF0aWMgaW50IGVkYWNfY3JlYXRlX3N5c2ZzX21jaV9kZXZpY2Uoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQorI2lmZGVmIERJU0FCTEVfRURBQ19TWVNGUworeworCXJldHVybiAwOworfQorI2Vsc2UKIHsKIAlpbnQgaTsKIAlpbnQgZXJyOwpAQCAtMTExOCwxMiArMTE2MSwxNCBAQAogCiAJcmV0dXJuIGVycjsKIH0KKyNlbmRpZiAgLyogRElTQUJMRV9FREFDX1NZU0ZTICovCiAKIC8qCiAgKiByZW1vdmUgYSBNZW1vcnkgQ29udHJvbGxlciBpbnN0YW5jZQogICovCiBzdGF0aWMgdm9pZCBlZGFjX3JlbW92ZV9zeXNmc19tY2lfZGV2aWNlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKIHsKKyNpZm5kZWYgRElTQUJMRV9FREFDX1NZU0ZTCiAJaW50IGk7CiAKIAlkZWJ1Z2YwKCJNQzogIiBfX0ZJTEVfXyAiOiAlcygpXG4iLCBfX2Z1bmNfXyk7CkBAIC0xMTQwLDYgKzExODUsNyBAQAogCiAJa29iamVjdF91bnJlZ2lzdGVyKCZtY2ktPmVkYWNfbWNpX2tvYmopOwogCWtvYmplY3RfcHV0KCZtY2ktPmVkYWNfbWNpX2tvYmopOworI2VuZGlmICAvKiBESVNBQkxFX0VEQUNfU1lTRlMgKi8KIH0KIAogLyogRU5EIE9GIHN5c2ZzIGRhdGEgYW5kIG1ldGhvZHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWlzYS8uZ2l0aWdub3JlIGIvZHJpdmVycy9laXNhLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzMzVjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZWlzYS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK2Rldmxpc3QuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwppbmRleCA0MTk2MTM3Li42MDc4ZTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYworKysgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwpAQCAtMTM1LDEzICsxMzUsOCBAQAogCiBpbnQgZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKHN0cnVjdCBlaXNhX2RyaXZlciAqZWRydikKIHsKLQlpbnQgcjsKLQkKIAllZHJ2LT5kcml2ZXIuYnVzID0gJmVpc2FfYnVzX3R5cGU7Ci0JaWYgKChyID0gZHJpdmVyX3JlZ2lzdGVyICgmZWRydi0+ZHJpdmVyKSkgPCAwKQotCQlyZXR1cm4gcjsKLQotCXJldHVybiAwOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIgKCZlZHJ2LT5kcml2ZXIpOwogfQogCiB2b2lkIGVpc2FfZHJpdmVyX3VucmVnaXN0ZXIgKHN0cnVjdCBlaXNhX2RyaXZlciAqZWRydikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmM0L2ZjLmMgYi9kcml2ZXJzL2ZjNC9mYy5jCmluZGV4IDVjODk0MzUuLjY2ZDAzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmM0L2ZjLmMKKysrIGIvZHJpdmVycy9mYzQvZmMuYwpAQCAtMTA1Myw3ICsxMDUzLDcgQEAKIAlpbnQgaTsKIAogCWZjbWQgPSAmX2ZjbWQ7Ci0JbWVtc2V0KGZjbWQsIDAsIHNpemVvZihmY21kKSk7CisJbWVtc2V0KGZjbWQsIDAsIHNpemVvZihmY3BfY21uZCkpOwogCUZDRCgoIlBMT0dJIFNJRCAlZCBESUQgJWRcbiIsIGZjLT5zaWQsIGFscGEpKQogCWZjaCA9ICZmY21kLT5mY2g7CiAJRklMTF9GQ0hEUl9SQ1RMX0RJRChmY2gsIFJfQ1RMX0VMU19SRVEsIGFscGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYyBiL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMKaW5kZXggOGVkNmRkYi4uZDY1NDNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jCkBAIC0zMywxMyArMzMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlICJkY2RiYXMuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRQkJImRjZGJhcyIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSI1LjYuMC0xIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIjUuNi4wLTIiCiAjZGVmaW5lIERSSVZFUl9ERVNDUklQVElPTgkiRGVsbCBTeXN0ZW1zIE1hbmFnZW1lbnQgQmFzZSBEcml2ZXIiCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkY2RiYXNfcGRldjsKQEAgLTQ4LDcgKzQ5LDcgQEAKIHN0YXRpYyBkbWFfYWRkcl90IHNtaV9kYXRhX2J1Zl9oYW5kbGU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbWlfZGF0YV9idWZfc2l6ZTsKIHN0YXRpYyB1MzIgc21pX2RhdGFfYnVmX3BoeXNfYWRkcjsKLXN0YXRpYyBERUNMQVJFX01VVEVYKHNtaV9kYXRhX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChzbWlfZGF0YV9sb2NrKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBob3N0X2NvbnRyb2xfYWN0aW9uOwogc3RhdGljIHVuc2lnbmVkIGludCBob3N0X2NvbnRyb2xfc21pX3R5cGU7CkBAIC0xMzksOSArMTQwLDkgQEAKIAlidWZfc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCiAJLyogbWFrZSBzdXJlIFNNSSBkYXRhIGJ1ZmZlciBpcyBhdCBsZWFzdCBidWZfc2l6ZSAqLwotCWRvd24oJnNtaV9kYXRhX2xvY2spOworCW11dGV4X2xvY2soJnNtaV9kYXRhX2xvY2spOwogCXJldCA9IHNtaV9kYXRhX2J1Zl9yZWFsbG9jKGJ1Zl9zaXplKTsKLQl1cCgmc21pX2RhdGFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzbWlfZGF0YV9sb2NrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNTQsNyArMTU1LDcgQEAKIAlzaXplX3QgbWF4X3JlYWQ7CiAJc3NpemVfdCByZXQ7CiAKLQlkb3duKCZzbWlfZGF0YV9sb2NrKTsKKwltdXRleF9sb2NrKCZzbWlfZGF0YV9sb2NrKTsKIAogCWlmIChwb3MgPj0gc21pX2RhdGFfYnVmX3NpemUpIHsKIAkJcmV0ID0gMDsKQEAgLTE2NSw3ICsxNjYsNyBAQAogCXJldCA9IG1pbihtYXhfcmVhZCwgY291bnQpOwogCW1lbWNweShidWYsIHNtaV9kYXRhX2J1ZiArIHBvcywgcmV0KTsKIG91dDoKLQl1cCgmc21pX2RhdGFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzbWlfZGF0YV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzQsNyArMTc1LDcgQEAKIHsKIAlzc2l6ZV90IHJldDsKIAotCWRvd24oJnNtaV9kYXRhX2xvY2spOworCW11dGV4X2xvY2soJnNtaV9kYXRhX2xvY2spOwogCiAJcmV0ID0gc21pX2RhdGFfYnVmX3JlYWxsb2MocG9zICsgY291bnQpOwogCWlmIChyZXQpCkBAIC0xODMsNyArMTg0LDcgQEAKIAltZW1jcHkoc21pX2RhdGFfYnVmICsgcG9zLCBidWYsIGNvdW50KTsKIAlyZXQgPSBjb3VudDsKIG91dDoKLQl1cCgmc21pX2RhdGFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzbWlfZGF0YV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEsOSArMjAyLDkgQEAKIAlzc2l6ZV90IHJldDsKIAogCS8qIG1ha2Ugc3VyZSBidWZmZXIgaXMgYXZhaWxhYmxlIGZvciBob3N0IGNvbnRyb2wgY29tbWFuZCAqLwotCWRvd24oJnNtaV9kYXRhX2xvY2spOworCW11dGV4X2xvY2soJnNtaV9kYXRhX2xvY2spOwogCXJldCA9IHNtaV9kYXRhX2J1Zl9yZWFsbG9jKHNpemVvZihzdHJ1Y3QgYXBtX2NtZCkpOwotCXVwKCZzbWlfZGF0YV9sb2NrKTsKKwltdXRleF91bmxvY2soJnNtaV9kYXRhX2xvY2spOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTMwMiw3ICszMDMsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAJc3NpemVfdCByZXQ7CiAKLQlkb3duKCZzbWlfZGF0YV9sb2NrKTsKKwltdXRleF9sb2NrKCZzbWlfZGF0YV9sb2NrKTsKIAogCWlmIChzbWlfZGF0YV9idWZfc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc21pX2NtZCkpIHsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTMzNCw3ICszMzUsNyBAQAogCX0KIAogb3V0OgotCXVwKCZzbWlfZGF0YV9sb2NrKTsKKwltdXRleF91bmxvY2soJnNtaV9kYXRhX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTUzMCwzMCArNTMxLDI3IEBACiBzdGF0aWMgRENEQkFTX0RFVl9BVFRSX1JXKGhvc3RfY29udHJvbF9zbWlfdHlwZSk7CiBzdGF0aWMgRENEQkFTX0RFVl9BVFRSX1JXKGhvc3RfY29udHJvbF9vbl9zaHV0ZG93bik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGNkYmFzX2Rldl9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9zbWlfZGF0YV9idWZfc2l6ZSwKLQkmZGV2X2F0dHJfc21pX2RhdGFfYnVmX3BoeXNfYWRkciwKLQkmZGV2X2F0dHJfc21pX3JlcXVlc3QsCi0JJmRldl9hdHRyX2hvc3RfY29udHJvbF9hY3Rpb24sCi0JJmRldl9hdHRyX2hvc3RfY29udHJvbF9zbWlfdHlwZSwKLQkmZGV2X2F0dHJfaG9zdF9jb250cm9sX29uX3NodXRkb3duLAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRjZGJhc19kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc21pX2RhdGFfYnVmX3NpemUuYXR0ciwKKwkmZGV2X2F0dHJfc21pX2RhdGFfYnVmX3BoeXNfYWRkci5hdHRyLAorCSZkZXZfYXR0cl9zbWlfcmVxdWVzdC5hdHRyLAorCSZkZXZfYXR0cl9ob3N0X2NvbnRyb2xfYWN0aW9uLmF0dHIsCisJJmRldl9hdHRyX2hvc3RfY29udHJvbF9zbWlfdHlwZS5hdHRyLAorCSZkZXZfYXR0cl9ob3N0X2NvbnRyb2xfb25fc2h1dGRvd24uYXR0ciwKIAlOVUxMCiB9OwogCi0vKioKLSAqIGRjZGJhc19pbml0OiBpbml0aWFsaXplIGRyaXZlcgotICovCi1zdGF0aWMgaW50IF9faW5pdCBkY2RiYXNfaW5pdCh2b2lkKQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZGNkYmFzX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gZGNkYmFzX2Rldl9hdHRycywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRjZGJhc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IGk7CisJaW50IGksIGVycm9yOwogCiAJaG9zdF9jb250cm9sX2FjdGlvbiA9IEhDX0FDVElPTl9OT05FOwogCWhvc3RfY29udHJvbF9zbWlfdHlwZSA9IEhDX1NNSVRZUEVfTk9ORTsKIAotCWRjZGJhc19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUklWRVJfTkFNRSwgLTEsIE5VTEwsIDApOwotCWlmIChJU19FUlIoZGNkYmFzX3BkZXYpKQotCQlyZXR1cm4gUFRSX0VSUihkY2RiYXNfcGRldik7Ci0KIAkvKgogCSAqIEJJT1MgU01JIGNhbGxzIHJlcXVpcmUgYnVmZmVyIGFkZHJlc3NlcyBiZSBpbiAzMi1iaXQgYWRkcmVzcyBzcGFjZS4KIAkgKiBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgRE1BIG1hc2sgYmVsb3cuCkBAIC01NjEsMjkgKzU1OSwxMDIgQEAKIAlkY2RiYXNfcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BXzMyQklUX01BU0s7CiAJZGNkYmFzX3BkZXYtPmRldi5kbWFfbWFzayA9ICZkY2RiYXNfcGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrOwogCisJZXJyb3IgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+ZGV2LmtvYmosICZkY2RiYXNfYXR0cl9ncm91cCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBkY2RiYXNfYmluX2F0dHJzW2ldOyBpKyspIHsKKwkJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+ZGV2LmtvYmosCisJCQkJCSAgICAgIGRjZGJhc19iaW5fYXR0cnNbaV0pOworCQlpZiAoZXJyb3IpIHsKKwkJCXdoaWxlICgtLWkgPj0gMCkKKwkJCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmRldi0+ZGV2LmtvYmosCisJCQkJCQkgICAgICBkY2RiYXNfYmluX2F0dHJzW2ldKTsKKwkJCXN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5kZXYua29iaiwgJmRjZGJhc19hdHRyX2dyb3VwKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KKwogCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZGNkYmFzX3JlYm9vdF9uYik7CiAKLQlmb3IgKGkgPSAwOyBkY2RiYXNfYmluX2F0dHJzW2ldOyBpKyspCi0JCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZGNkYmFzX3BkZXYtPmRldi5rb2JqLAotCQkJCSAgICAgIGRjZGJhc19iaW5fYXR0cnNbaV0pOwotCi0JZm9yIChpID0gMDsgZGNkYmFzX2Rldl9hdHRyc1tpXTsgaSsrKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmRjZGJhc19wZGV2LT5kZXYsIGRjZGJhc19kZXZfYXR0cnNbaV0pOwotCi0JZGV2X2luZm8oJmRjZGJhc19wZGV2LT5kZXYsICIlcyAodmVyc2lvbiAlcylcbiIsCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgKHZlcnNpb24gJXMpXG4iLAogCQkgRFJJVkVSX0RFU0NSSVBUSU9OLCBEUklWRVJfVkVSU0lPTik7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2RldmV4aXQgZGNkYmFzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZGNkYmFzX3JlYm9vdF9uYik7CisJZm9yIChpID0gMDsgZGNkYmFzX2Jpbl9hdHRyc1tpXTsgaSsrKQorCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmRldi0+ZGV2LmtvYmosIGRjZGJhc19iaW5fYXR0cnNbaV0pOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5kZXYua29iaiwgJmRjZGJhc19hdHRyX2dyb3VwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkY2RiYXNfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBkY2RiYXNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChkY2RiYXNfcmVtb3ZlKSwKK307CisKKy8qKgorICogZGNkYmFzX2luaXQ6IGluaXRpYWxpemUgZHJpdmVyCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGRjZGJhc19pbml0KHZvaWQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRjZGJhc19kcml2ZXIpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZGNkYmFzX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoRFJJVkVSX05BTUUsIC0xKTsKKwlpZiAoIWRjZGJhc19wZGV2KSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9kcml2ZXI7CisJfQorCisJZXJyb3IgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGRjZGJhc19wZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2ZyZWVfZGV2aWNlOworCisJcmV0dXJuIDA7CisKKyBlcnJfZnJlZV9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChkY2RiYXNfcGRldik7CisgZXJyX3VucmVnaXN0ZXJfZHJpdmVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkY2RiYXNfZHJpdmVyKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKIC8qKgogICogZGNkYmFzX2V4aXQ6IHBlcmZvcm0gZHJpdmVyIGNsZWFudXAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IGRjZGJhc19leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGNkYmFzX3BkZXYpOworCS8qCisJICogbWFrZSBzdXJlIGZ1bmN0aW9ucyB0aGF0IHVzZSBkY2RiYXNfcGRldiBhcmUgY2FsbGVkCisJICogYmVmb3JlIHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyCisJICovCiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmRjZGJhc19yZWJvb3RfbmIpOwogCXNtaV9kYXRhX2J1Zl9mcmVlKCk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGNkYmFzX3BkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkY2RiYXNfZHJpdmVyKTsKKworCS8qCisJICogV2UgaGF2ZSB0byBmcmVlIHRoZSBidWZmZXIgaGVyZSBpbnN0ZWFkIG9mIGRjZGJhc19yZW1vdmUKKwkgKiBiZWNhdXNlIG9ubHkgaW4gbW9kdWxlIGV4aXQgZnVuY3Rpb24gd2UgY2FuIGJlIHN1cmUgdGhhdAorCSAqIGFsbCBzeXNmcyBhdHRyaWJ1dGVzIGJlbG9uZ2luZyB0byB0aGlzIG1vZHVsZSBoYXZlIGJlZW4KKwkgKiByZWxlYXNlZC4KKwkgKi8KKwlzbWlfZGF0YV9idWZfZnJlZSgpOwogfQogCiBtb2R1bGVfaW5pdChkY2RiYXNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNzIzMGQ0ZS4uOTljZGM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNDA2LDEzICs0MDYsMTQgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHc4M2w3ODV0cy4KIAogY29uZmlnIFNFTlNPUlNfVzgzNjI3SEYKLQl0cmlzdGF0ZSAiV2luYm9uZCBXODM2MjdIRiwgVzgzNjI3VEhGLCBXODM2MzdIRiwgVzgzNjk3SEYiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJdHJpc3RhdGUgIldpbmJvbmQgVzgzNjI3SEYsIFc4MzYyN1RIRiwgVzgzNjM3SEYsIFc4MzY4N1RIRiwgVzgzNjk3SEYiCisJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKIAlzZWxlY3QgSTJDX0lTQQogCXNlbGVjdCBIV01PTl9WSUQKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNlg3IHNlcmllcwotCSAgb2Ygc2Vuc29yIGNoaXBzOiB0aGUgVzgzNjI3SEYsIFc4MzYyN1RIRiwgVzgzNjM3SEYsIGFuZCB0aGUgVzgzNjk3SEYKKwkgIG9mIHNlbnNvciBjaGlwczogdGhlIFc4MzYyN0hGLCBXODM2MjdUSEYsIFc4MzYzN0hGLCBXODM2ODdUSEYgYW5kCisJICBXODM2OTdIRi4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdzgzNjI3aGYuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCmluZGV4IDY2NTYxMjcuLjJiNmU3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCkBAIC05Miw3ICs5Myw3IEBACiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwogCWVudW0gY2hpcHMgdHlwZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCkBAIC0xNjIsMTAgKzE2MywxMCBAQAogCXN0cnVjdCBhZG0xMDIxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsJXAogCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQlcCiAJCQkJCQkJCVwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCVwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCVwKIAlkYXRhLT52YWx1ZSA9IFRFTVBfVE9fUkVHKHRlbXApOwkJCVwKIAlhZG0xMDIxX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBkYXRhLT52YWx1ZSk7CQlcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJCVwKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQlcCiAJcmV0dXJuIGNvdW50OwkJCQkJCVwKIH0KIHNldCh0ZW1wX21heCwgQURNMTAyMV9SRUdfVE9TX1cpOwpAQCAtMjc1LDcgKzI3Niw3IEBACiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCB0eXBlX25hbWUsIEkyQ19OQU1FX1NJWkUpOwogCWRhdGEtPnR5cGUgPSBraW5kOwogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQpAQCAtMzUxLDcgKzM1Miw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgYWRtMTAyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKyBIWiAvIDIpCiAJICAgIHx8ICFkYXRhLT52YWxpZCkgewpAQCAtMzc1LDcgKzM3Niw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjUuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNS5jCmluZGV4IDkzMzFjNTYuLmE0Yzg1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNS5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKgogICogQWRkcmVzc2VzIHRvIHNjYW4KQEAgLTEzMyw3ICsxMzQsNyBAQAogc3RydWN0IGFkbTEwMjVfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KIApAQCAtMjA3LDExICsyMDgsMTEgQEAKIAlzdHJ1Y3QgYWRtMTAyNV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7IFwKICBcCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJZGF0YS0+aW5fbWluW29mZnNldF0gPSBJTl9UT19SRUcodmFsLCBpbl9zY2FsZVtvZmZzZXRdKTsgXAogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRE0xMDI1X1JFR19JTl9NSU4ob2Zmc2V0KSwgXAogCQkJCSAgZGF0YS0+aW5fbWluW29mZnNldF0pOyBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCiB9IFwKIHN0YXRpYyBzc2l6ZV90IHNldF9pbiMjb2Zmc2V0IyNfbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwgXApAQCAtMjIxLDExICsyMjIsMTEgQEAKIAlzdHJ1Y3QgYWRtMTAyNV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7IFwKICBcCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJZGF0YS0+aW5fbWF4W29mZnNldF0gPSBJTl9UT19SRUcodmFsLCBpbl9zY2FsZVtvZmZzZXRdKTsgXAogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRE0xMDI1X1JFR19JTl9NQVgob2Zmc2V0KSwgXAogCQkJCSAgZGF0YS0+aW5fbWF4W29mZnNldF0pOyBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCiB9IFwKIHN0YXRpYyBERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgXApAQCAtMjQ3LDExICsyNDgsMTEgQEAKIAlzdHJ1Y3QgYWRtMTAyNV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7IFwKICBcCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJZGF0YS0+dGVtcF9taW5bb2Zmc2V0LTFdID0gVEVNUF9UT19SRUcodmFsKTsgXAogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRE0xMDI1X1JFR19URU1QX0xPVyhvZmZzZXQtMSksIFwKIAkJCQkgIGRhdGEtPnRlbXBfbWluW29mZnNldC0xXSk7IFwKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0gXAogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAjI29mZnNldCMjX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIFwKQEAgLTI2MSwxMSArMjYyLDExIEBACiAJc3RydWN0IGFkbTEwMjVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOyBcCiAgXAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAogCWRhdGEtPnRlbXBfbWF4W29mZnNldC0xXSA9IFRFTVBfVE9fUkVHKHZhbCk7IFwKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURNMTAyNV9SRUdfVEVNUF9ISUdIKG9mZnNldC0xKSwgXAogCQkJCSAgZGF0YS0+dGVtcF9tYXhbb2Zmc2V0LTFdKTsgXAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAogCXJldHVybiBjb3VudDsgXAogfSBcCiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgXApAQCAtNDA0LDcgKzQwNSw3IEBACiAJLyogV2UgY2FuIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzICovCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKQEAgLTUyMyw3ICs1MjQsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGFkbTEwMjVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICogMikgfHwgIWRhdGEtPnZhbGlkKSB7CiAJCWludCBpOwpAQCAtNTU4LDcgKzU1OSw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCmluZGV4IGZlZmU2ZTcuLjZkNGY4YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQgfTsKQEAgLTI2MCwxMCArMjYxLDEwIEBACiBzdHJ1Y3QgYWRtMTAyNl9kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAllbnVtIGNoaXBzIHR5cGU7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAlpbnQgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfcmVhZGluZzsJLyogSW4gamlmZmllcyAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF9jb25maWc7CS8qIEluIGppZmZpZXMgKi8KQEAgLTI5OCw5ICsyOTksOCBAQAogc3RhdGljIGludCBhZG0xMDI2X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAogCWludCBraW5kKTsKIHN0YXRpYyBpbnQgYWRtMTAyNl9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotc3RhdGljIGludCBhZG0xMDI2X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnaXN0ZXIpOwotc3RhdGljIGludCBhZG0xMDI2X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZ2lzdGVyLAotCWludCB2YWx1ZSk7IAorc3RhdGljIGludCBhZG0xMDI2X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKTsKK3N0YXRpYyBpbnQgYWRtMTAyNl93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIGludCB2YWx1ZSk7CiBzdGF0aWMgdm9pZCBhZG0xMDI2X3ByaW50X2dwaW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiBzdGF0aWMgdm9pZCBhZG0xMDI2X2ZpeHVwX2dwaW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7IAogc3RhdGljIHN0cnVjdCBhZG0xMDI2X2RhdGEgKmFkbTEwMjZfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpAQCAtNTc1LDcgKzU3NSw3IEBACiAJaW50IGk7CiAJbG9uZyB2YWx1ZSwgYWxhcm1zLCBncGlvOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAoIWRhdGEtPnZhbGlkCiAJICAgIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF9yZWFkaW5nICsgQURNMTAyNl9EQVRBX0lOVEVSVkFMKSkgewogCQkvKiBUaGluZ3MgdGhhdCBjaGFuZ2UgcXVpY2tseSAqLwpAQCAtNzEwLDcgKzcxMCw3IEBACiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTZXR0aW5nIFZJRCBmcm9tIEdQSU8xMS0xNS5cbiIpOwogCWRhdGEtPnZpZCA9IChkYXRhLT5ncGlvID4+IDExKSAmIDB4MWY7CiAJZGF0YS0+dmFsaWQgPSAxOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGRhdGE7CiB9CiAKQEAgLTczOSwxMCArNzM5LDEwIEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9taW5bbnJdID0gSU5TX1RPX1JFRyhuciwgdmFsKTsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfSU5fTUlOW25yXSwgZGF0YS0+aW5fbWluW25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7IAogfQogc3RhdGljIHNzaXplX3Qgc2hvd19pbl9tYXgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTc2MiwxMCArNzYyLDEwIEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9tYXhbbnJdID0gSU5TX1RPX1JFRyhuciwgdmFsKTsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfSU5fTUFYW25yXSwgZGF0YS0+aW5fbWF4W25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTgxMywxMCArODEzLDEwIEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9taW5bMTZdID0gSU5TX1RPX1JFRygxNiwgdmFsICsgTkVHMTJfT0ZGU0VUKTsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfSU5fTUlOWzE2XSwgZGF0YS0+aW5fbWluWzE2XSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7IAogfQogc3RhdGljIHNzaXplX3Qgc2hvd19pbjE2X21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC04MzEsMTAgKzgzMSwxMCBAQAogCXN0cnVjdCBhZG0xMDI2X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWF4WzE2XSA9IElOU19UT19SRUcoMTYsIHZhbCtORUcxMl9PRkZTRVQpOwogCWFkbTEwMjZfd3JpdGVfdmFsdWUoY2xpZW50LCBBRE0xMDI2X1JFR19JTl9NQVhbMTZdLCBkYXRhLT5pbl9tYXhbMTZdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtODc0LDExICs4NzQsMTEgQEAKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmZhbl9taW5bbnJdID0gRkFOX1RPX1JFRyh2YWwsIGRhdGEtPmZhbl9kaXZbbnJdKTsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfRkFOX01JTihuciksCiAJCWRhdGEtPmZhbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtOTM5LDcgKzkzOSw3IEBACiAJaWYgKG5ld19kaXYgPT0gMCkgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlvcmlnX2RpdiA9IGRhdGEtPmZhbl9kaXZbbnJdOwogCWRhdGEtPmZhbl9kaXZbbnJdID0gRElWX0ZST01fUkVHKG5ld19kaXYpOwogCkBAIC05NTgsNyArOTU4LDcgQEAKIAlpZiAoZGF0YS0+ZmFuX2Rpdltucl0gIT0gb3JpZ19kaXYpIHsKIAkJZml4dXBfZmFuX21pbihkZXYsbnIsb3JpZ19kaXYpOwogCX0KLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTAwMSwxMSArMTAwMSwxMSBAQAogCXN0cnVjdCBhZG0xMDI2X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9taW5bbnJdID0gVEVNUF9UT19SRUcodmFsKTsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfVEVNUF9NSU5bbnJdLAogCQlkYXRhLT50ZW1wX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMTAyNSwxMSArMTAyNSwxMSBAQAogCXN0cnVjdCBhZG0xMDI2X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9tYXhbbnJdID0gVEVNUF9UT19SRUcodmFsKTsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfVEVNUF9NQVhbbnJdLAogCQlkYXRhLT50ZW1wX21heFtucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xMDY0LDExICsxMDY0LDExIEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT50ZW1wX29mZnNldFtucl0gPSBURU1QX1RPX1JFRyh2YWwpOwogCWFkbTEwMjZfd3JpdGVfdmFsdWUoY2xpZW50LCBBRE0xMDI2X1JFR19URU1QX09GRlNFVFtucl0sCiAJCWRhdGEtPnRlbXBfb2Zmc2V0W25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTExMTUsMTEgKzExMTUsMTEgQEAKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfdG1pbltucl0gPSBURU1QX1RPX1JFRyh2YWwpOwogCWFkbTEwMjZfd3JpdGVfdmFsdWUoY2xpZW50LCBBRE0xMDI2X1JFR19URU1QX1RNSU5bbnJdLAogCQlkYXRhLT50ZW1wX3RtaW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTE1MCwxMSArMTE1MCwxMSBAQAogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCiAJaWYgKCh2YWwgPT0gMSkgfHwgKHZhbD09MCkpIHsKLQkJZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJCWRhdGEtPmNvbmZpZzEgPSAoZGF0YS0+Y29uZmlnMSAmIH5DRkcxX1RIRVJNX0hPVCkgfCAodmFsIDw8IDQpOwogCQlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfQ09ORklHMSwgCiAJCQlkYXRhLT5jb25maWcxKTsKLQkJdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJfQogCXJldHVybiBjb3VudDsKIH0KQEAgLTExODQsMTEgKzExODQsMTEgQEAKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfY3JpdFtucl0gPSBURU1QX1RPX1JFRyh2YWwpOwogCWFkbTEwMjZfd3JpdGVfdmFsdWUoY2xpZW50LCBBRE0xMDI2X1JFR19URU1QX1RIRVJNW25yXSwKIAkJZGF0YS0+dGVtcF9jcml0W25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTEyMTIsMTAgKzEyMTIsMTAgQEAKIAlzdHJ1Y3QgYWRtMTAyNl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmFuYWxvZ19vdXQgPSBEQUNfVE9fUkVHKHZhbCk7CiAJYWRtMTAyNl93cml0ZV92YWx1ZShjbGllbnQsIEFETTEwMjZfUkVHX0RBQywgZGF0YS0+YW5hbG9nX291dCk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTEyNjcsNyArMTI2Nyw3IEBACiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5hbGFybV9tYXNrID0gdmFsICYgMHg3ZmZmZmZmZjsKIAltYXNrID0gZGF0YS0+YWxhcm1fbWFzawogCQl8IChkYXRhLT5ncGlvX21hc2sgJiAweDEwMDAwID8gMHg4MDAwMDAwMCA6IDApOwpAQCAtMTI4Miw3ICsxMjgyLDcgQEAKIAltYXNrID4+PSA4OwogCWFkbTEwMjZfd3JpdGVfdmFsdWUoY2xpZW50LCBBRE0xMDI2X1JFR19NQVNLNCwKIAkJbWFzayAmIDB4ZmYpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCWxvbmcgICBncGlvOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5ncGlvID0gdmFsICYgMHgxZmZmZjsKIAlncGlvID0gZGF0YS0+Z3BpbzsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfR1BJT19TVEFUVVNfMF83LGdwaW8gJiAweGZmKTsKQEAgLTEzMTEsNyArMTMxMSw3IEBACiAJYWRtMTAyNl93cml0ZV92YWx1ZShjbGllbnQsIEFETTEwMjZfUkVHX0dQSU9fU1RBVFVTXzhfMTUsZ3BpbyAmIDB4ZmYpOwogCWdwaW8gPSAoKGdwaW8gPj4gMSkgJiAweDgwKSB8IChkYXRhLT5hbGFybXMgPj4gMjQgJiAweDdmKTsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfU1RBVFVTNCxncGlvICYgMHhmZik7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTEzMzEsNyArMTMzMSw3IEBACiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAJbG9uZyAgIG1hc2s7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmdwaW9fbWFzayA9IHZhbCAmIDB4MWZmZmY7CiAJbWFzayA9IGRhdGEtPmdwaW9fbWFzazsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfR1BJT19NQVNLXzBfNyxtYXNrICYgMHhmZik7CkBAIC0xMzM5LDcgKzEzMzksNyBAQAogCWFkbTEwMjZfd3JpdGVfdmFsdWUoY2xpZW50LCBBRE0xMDI2X1JFR19HUElPX01BU0tfOF8xNSxtYXNrICYgMHhmZik7CiAJbWFzayA9ICgobWFzayA+PiAxKSAmIDB4ODApIHwgKGRhdGEtPmFsYXJtX21hc2sgPj4gMjQgJiAweDdmKTsKIAlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfTUFTSzEsbWFzayAmIDB4ZmYpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xMzU5LDEwICsxMzU5LDEwIEBACiAJaWYgKGRhdGEtPnB3bTEuZW5hYmxlID09IDEpIHsKIAkJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQkJZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJCWRhdGEtPnB3bTEucHdtID0gUFdNX1RPX1JFRyh2YWwpOwogCQlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfUFdNLCBkYXRhLT5wd20xLnB3bSk7Ci0JCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCX0KIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xMzc4LDE0ICsxMzc4LDE0IEBACiAJc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5wd20xLmF1dG9fcHdtX21pbiA9IFNFTlNPUlNfTElNSVQodmFsLDAsMjU1KTsKIAlpZiAoZGF0YS0+cHdtMS5lbmFibGUgPT0gMikgeyAvKiBhcHBseSBpbW1lZGlhdGVseSAqLwogCQlkYXRhLT5wd20xLnB3bSA9IFBXTV9UT19SRUcoKGRhdGEtPnB3bTEucHdtICYgMHgwZikgfAogCQkJUFdNX01JTl9UT19SRUcoZGF0YS0+cHdtMS5hdXRvX3B3bV9taW4pKTsgCiAJCWFkbTEwMjZfd3JpdGVfdmFsdWUoY2xpZW50LCBBRE0xMDI2X1JFR19QV00sIGRhdGEtPnB3bTEucHdtKTsKIAl9Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdCBzaG93X2F1dG9fcHdtX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0xNDA2LDcgKzE0MDYsNyBAQAogCWludCAgICAgb2xkX2VuYWJsZTsKIAogCWlmICgodmFsID49IDApICYmICh2YWwgPCAzKSkgewotCQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkJb2xkX2VuYWJsZSA9IGRhdGEtPnB3bTEuZW5hYmxlOwogCQlkYXRhLT5wd20xLmVuYWJsZSA9IHZhbDsKIAkJZGF0YS0+Y29uZmlnMSA9IChkYXRhLT5jb25maWcxICYgfkNGRzFfUFdNX0FGQykKQEAgLTE0MjQsNyArMTQyNCw3IEBACiAJCQlhZG0xMDI2X3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAyNl9SRUdfUFdNLCAKIAkJCQlkYXRhLT5wd20xLnB3bSk7CiAJCX0KLQkJdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJfQogCXJldHVybiBjb3VudDsKIH0KQEAgLTE1NDEsNyArMTU0MSw3IEBACiAJLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgKi8KIAlkYXRhLT50eXBlID0ga2luZDsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtMTAzMS5jIGIvZHJpdmVycy9od21vbi9hZG0xMDMxLmMKaW5kZXggZDA2Mzk3OS4uM2JmMmRhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDMxLmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDMxLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIEZvbGxvd2luZyBtYWNyb3MgdGFrZXMgY2hhbm5lbCBwYXJhbWV0ZXIgc3RhcnRpbmcgZnJvbSAwIHRvIDIgKi8KICNkZWZpbmUgQURNMTAzMV9SRUdfRkFOX1NQRUVEKG5yKQkoMHgwOCArIChucikpCkBAIC03MCw3ICs3MSw3IEBACiBzdHJ1Y3QgYWRtMTAzMV9kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWludCBjaGlwX3R5cGU7CiAJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCkBAIC0yNjIsMTAgKzI2MywxMCBAQAogCiAJb2xkX2Zhbl9tb2RlID0gZGF0YS0+Y29uZjE7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCQogCWlmICgocmV0ID0gZ2V0X2Zhbl9hdXRvX25lYXJlc3QoZGF0YSwgbnIsIHZhbCwgZGF0YS0+Y29uZjEsICZyZWcpKSkgewotCQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKCgoZGF0YS0+Y29uZjEgPSBGQU5fQ0hBTl9UT19SRUcocmVnLCBkYXRhLT5jb25mMSkpICYgQURNMTAzMV9DT05GMV9BVVRPX01PREUpIF4gCkBAIC0yODgsNyArMjg5LDcgQEAKIAl9CiAJZGF0YS0+Y29uZjEgPSBGQU5fQ0hBTl9UT19SRUcocmVnLCBkYXRhLT5jb25mMSk7CiAJYWRtMTAzMV93cml0ZV92YWx1ZShjbGllbnQsIEFETTEwMzFfUkVHX0NPTkYxLCBkYXRhLT5jb25mMSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMyOSwxMSArMzMwLDExIEBACiAJc3RydWN0IGFkbTEwMzFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5hdXRvX3RlbXBbbnJdID0gQVVUT19URU1QX01JTl9UT19SRUcodmFsLCBkYXRhLT5hdXRvX3RlbXBbbnJdKTsKIAlhZG0xMDMxX3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAzMV9SRUdfQVVUT19URU1QKG5yKSwKIAkJCSAgICBkYXRhLT5hdXRvX3RlbXBbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNob3dfYXV0b190ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQpAQCAtMzQ5LDExICszNTAsMTEgQEAKIAlzdHJ1Y3QgYWRtMTAzMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfbWF4W25yXSA9IEFVVE9fVEVNUF9NQVhfVE9fUkVHKHZhbCwgZGF0YS0+YXV0b190ZW1wW25yXSwgZGF0YS0+cHdtW25yXSk7CiAJYWRtMTAzMV93cml0ZV92YWx1ZShjbGllbnQsIEFETTEwMzFfUkVHX0FVVE9fVEVNUChuciksCiAJCQkgICAgZGF0YS0+dGVtcF9tYXhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDA1LDExICs0MDYsMTEgQEAKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAlpbnQgcmVnOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAoKGRhdGEtPmNvbmYxICYgQURNMTAzMV9DT05GMV9BVVRPX01PREUpICYmIAogCSAgICAoKCh2YWw+PjQpICYgMHhmKSAhPSA1KSkgewogCQkvKiBJbiBhdXRvbWF0aWMgbW9kZSwgdGhlIG9ubHkgUFdNIGFjY2VwdGVkIGlzIDMzJSAqLwotCQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWRhdGEtPnB3bVtucl0gPSBQV01fVE9fUkVHKHZhbCk7CkBAIC00MTcsNyArNDE4LDcgQEAKIAlhZG0xMDMxX3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAzMV9SRUdfUFdNLAogCQkJICAgIG5yID8gKChkYXRhLT5wd21bbnJdIDw8IDQpICYgMHhmMCkgfCAocmVnICYgMHhmKQogCQkJICAgIDogKGRhdGEtPnB3bVtucl0gJiAweGYpIHwgKHJlZyAmIDB4ZjApKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNTExLDcgKzUxMiw3IEBACiAJc3RydWN0IGFkbTEwMzFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAodmFsKSB7CiAJCWRhdGEtPmZhbl9taW5bbnJdID0gCiAJCQlGQU5fVE9fUkVHKHZhbCwgRkFOX0RJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOwpAQCAtNTE5LDcgKzUyMCw3IEBACiAJCWRhdGEtPmZhbl9taW5bbnJdID0gMHhmZjsKIAl9CiAJYWRtMTAzMV93cml0ZV92YWx1ZShjbGllbnQsIEFETTEwMzFfUkVHX0ZBTl9NSU4obnIpLCBkYXRhLT5mYW5fbWluW25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdApAQCAtNTQwLDcgKzU0MSw3IEBACiAJaWYgKHRtcCA9PSAweGZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCW9sZF9kaXYgPSBGQU5fRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKTsKIAlkYXRhLT5mYW5fZGl2W25yXSA9ICh0bXAgJiAweEMwKSB8ICgweDNmICYgZGF0YS0+ZmFuX2Rpdltucl0pOwogCW5ld19taW4gPSBkYXRhLT5mYW5fbWluW25yXSAqIG9sZF9kaXYgLyAKQEAgLTU1Myw3ICs1NTQsNyBAQAogCQkJICAgIGRhdGEtPmZhbl9kaXZbbnJdKTsKIAlhZG0xMDMxX3dyaXRlX3ZhbHVlKGNsaWVudCwgQURNMTAzMV9SRUdfRkFOX01JTihuciksIAogCQkJICAgIGRhdGEtPmZhbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNjI3LDExICs2MjgsMTEgQEAKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAJdmFsID0gU0VOU09SU19MSU1JVCh2YWwsIC01NTAwMCwgbnIgPT0gMCA/IDEyNzc1MCA6IDEyNzg3NSk7Ci0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT50ZW1wX21pbltucl0gPSBURU1QX1RPX1JFRyh2YWwpOwogCWFkbTEwMzFfd3JpdGVfdmFsdWUoY2xpZW50LCBBRE0xMDMxX1JFR19URU1QX01JTihuciksCiAJCQkgICAgZGF0YS0+dGVtcF9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90CkBAIC02NDMsMTEgKzY0NCwxMSBAQAogCiAJdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAl2YWwgPSBTRU5TT1JTX0xJTUlUKHZhbCwgLTU1MDAwLCBuciA9PSAwID8gMTI3NzUwIDogMTI3ODc1KTsKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfbWF4W25yXSA9IFRFTVBfVE9fUkVHKHZhbCk7CiAJYWRtMTAzMV93cml0ZV92YWx1ZShjbGllbnQsIEFETTEwMzFfUkVHX1RFTVBfTUFYKG5yKSwKIAkJCSAgICBkYXRhLT50ZW1wX21heFtucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3QKQEAgLTY1OSwxMSArNjYwLDExIEBACiAKIAl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCXZhbCA9IFNFTlNPUlNfTElNSVQodmFsLCAtNTUwMDAsIG5yID09IDAgPyAxMjc3NTAgOiAxMjc4NzUpOwotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9jcml0W25yXSA9IFRFTVBfVE9fUkVHKHZhbCk7CiAJYWRtMTAzMV93cml0ZV92YWx1ZShjbGllbnQsIEFETTEwMzFfUkVHX1RFTVBfQ1JJVChuciksCiAJCQkgICAgZGF0YS0+dGVtcF9jcml0W25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTc3OCw3ICs3NzksNyBAQAogCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKQEAgLTg5MSw3ICs4OTIsNyBAQAogCXN0cnVjdCBhZG0xMDMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgY2hhbjsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKIAkgICAgfHwgIWRhdGEtPnZhbGlkKSB7CkBAIC05NjUsNyArOTY2LDcgQEAKIAkJZGF0YS0+dmFsaWQgPSAxOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gZGF0YTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtOTI0MC5jIGIvZHJpdmVycy9od21vbi9hZG05MjQwLmMKaW5kZXggNWRkYzIyZi4uNDNmNjk5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG05MjQwLmMKKysrIGIvZHJpdmVycy9od21vbi9hZG05MjQwLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXZpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCAweDJmLApAQCAtMTUwLDcgKzE1MSw3IEBACiAJZW51bSBjaGlwcyB0eXBlOwogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZF9tZWFzdXJlOwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkX2NvbmZpZzsKQEAgLTE5NSwxMSArMTk2LDExIEBACiAJc3RydWN0IGFkbTkyNDBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9tYXhbYXR0ci0+aW5kZXhdID0gVEVNUF9UT19SRUcodmFsKTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURNOTI0MF9SRUdfVEVNUF9NQVgoYXR0ci0+aW5kZXgpLAogCQkJZGF0YS0+dGVtcF9tYXhbYXR0ci0+aW5kZXhdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjQ2LDExICsyNDcsMTEgQEAKIAlzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWluW2F0dHItPmluZGV4XSA9IElOX1RPX1JFRyh2YWwsIGF0dHItPmluZGV4KTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURNOTI0MF9SRUdfSU5fTUlOKGF0dHItPmluZGV4KSwKIAkJCWRhdGEtPmluX21pblthdHRyLT5pbmRleF0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0yNjMsMTEgKzI2NCwxMSBAQAogCXN0cnVjdCBhZG05MjQwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9tYXhbYXR0ci0+aW5kZXhdID0gSU5fVE9fUkVHKHZhbCwgYXR0ci0+aW5kZXgpOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRE05MjQwX1JFR19JTl9NQVgoYXR0ci0+aW5kZXgpLAogCQkJZGF0YS0+aW5fbWF4W2F0dHItPmluZGV4XSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM1MCw3ICszNTEsNyBAQAogCWludCBuciA9IGF0dHItPmluZGV4OwogCXU4IG5ld19kaXY7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKCF2YWwpIHsKIAkJZGF0YS0+ZmFuX21pbltucl0gPSAyNTU7CkBAIC0zOTAsNyArMzkxLDcgQEAKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURNOTI0MF9SRUdfRkFOX01JTihuciksCiAJCQlkYXRhLT5mYW5fbWluW25yXSk7CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDM5LDEwICs0NDAsMTAgQEAKIAlzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5hb3V0ID0gQU9VVF9UT19SRUcodmFsKTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURNOTI0MF9SRUdfQU5BTE9HX09VVCwgZGF0YS0+YW91dCk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYW91dF9vdXRwdXQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2FvdXQsIHNldF9hb3V0KTsKQEAgLTUzOSw3ICs1NDAsNyBAQAogCS8qIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBhdHRhY2ggKi8KIAlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCWRhdGEtPnR5cGUgPSBraW5kOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKIAkJZ290byBleGl0X2ZyZWU7CkBAIC02OTEsNyArNjkyLDcgQEAKIAlzdHJ1Y3QgYWRtOTI0MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogbWluaW11bSBtZWFzdXJlbWVudCBjeWNsZTogMS43NSBzZWNvbmRzICovCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkX21lYXN1cmUgKyAoSFogKiA3IC8gNCkpCkBAIC03NzEsNyArNzcyLDcgQEAKIAkJZGF0YS0+bGFzdF91cGRhdGVkX2NvbmZpZyA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gZGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc2IxMDAuYyBiL2RyaXZlcnMvaHdtb24vYXNiMTAwLmMKaW5kZXggYWU5ZGU2My4uNjViMjcwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc2IxMDAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzYjEwMC5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgImxtNzUuaCIKIAogLyoKQEAgLTE4MiwxMCArMTgzLDEwIEBACiBzdHJ1Y3QgYXNiMTAwX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCWVudW0gY2hpcHMgdHlwZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAKIAkvKiBhcnJheSBvZiAyIHBvaW50ZXJzIHRvIHN1YmNsaWVudHMgKi8KQEAgLTI0NSwxMSArMjQ2LDExIEBACiAJc3RydWN0IGFzYjEwMF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOyBcCiAgXAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAogCWRhdGEtPmluXyMjcmVnW25yXSA9IElOX1RPX1JFRyh2YWwpOyBcCiAJYXNiMTAwX3dyaXRlX3ZhbHVlKGNsaWVudCwgQVNCMTAwX1JFR19JTl8jI1JFRyhuciksIFwKIAkJZGF0YS0+aW5fIyNyZWdbbnJdKTsgXAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAogCXJldHVybiBjb3VudDsgXAogfQogCkBAIC0zMzEsMTAgKzMzMiwxMCBAQAogCXN0cnVjdCBhc2IxMDBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXUzMiB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+ZmFuX21pbltucl0gPSBGQU5fVE9fUkVHKHZhbCwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAJYXNiMTAwX3dyaXRlX3ZhbHVlKGNsaWVudCwgQVNCMTAwX1JFR19GQU5fTUlOKG5yKSwgZGF0YS0+ZmFuX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zNTEsNyArMzUyLDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCWludCByZWc7CiAJCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCW1pbiA9IEZBTl9GUk9NX1JFRyhkYXRhLT5mYW5fbWluW25yXSwKIAkJCURJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOwpAQCAtMzgxLDcgKzM4Miw3IEBACiAJCUZBTl9UT19SRUcobWluLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKIAlhc2IxMDBfd3JpdGVfdmFsdWUoY2xpZW50LCBBU0IxMDBfUkVHX0ZBTl9NSU4obnIpLCBkYXRhLT5mYW5fbWluW25yXSk7CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNDYxLDcgKzQ2Miw3IEBACiAJc3RydWN0IGFzYjEwMF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOyBcCiAgXAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAogCXN3aXRjaCAobnIpIHsgXAogCWNhc2UgMTogY2FzZSAyOiBcCiAJCWRhdGEtPnJlZ1tucl0gPSBMTTc1X1RFTVBfVE9fUkVHKHZhbCk7IFwKQEAgLTQ3Miw3ICs0NzMsNyBAQAogCX0gXAogCWFzYjEwMF93cml0ZV92YWx1ZShjbGllbnQsIEFTQjEwMF9SRUdfVEVNUF8jI1JFRyhucisxKSwgXAogCQkJZGF0YS0+cmVnW25yXSk7IFwKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0KIApAQCAtNTc0LDExICs1NzUsMTEgQEAKIAlzdHJ1Y3QgYXNiMTAwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5wd20gJj0gMHg4MDsgLyoga2VlcCB0aGUgZW5hYmxlIGJpdCAqLwogCWRhdGEtPnB3bSB8PSAoMHgwZiAmIEFTQjEwMF9QV01fVE9fUkVHKHZhbCkpOwogCWFzYjEwMF93cml0ZV92YWx1ZShjbGllbnQsIEFTQjEwMF9SRUdfUFdNMSwgZGF0YS0+cHdtKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNTk1LDExICs1OTYsMTEgQEAKIAlzdHJ1Y3QgYXNiMTAwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5wd20gJj0gMHgwZjsgLyoga2VlcCB0aGUgZHV0eSBjeWNsZSBiaXRzICovCiAJZGF0YS0+cHdtIHw9ICh2YWwgPyAweDgwIDogMHgwMCk7CiAJYXNiMTAwX3dyaXRlX3ZhbHVlKGNsaWVudCwgQVNCMTAwX1JFR19QV00xLCBkYXRhLT5wd20pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC03MjksNyArNzMwLDcgQEAKIAl9CiAKIAluZXdfY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpbml0X01VVEVYKCZkYXRhLT5sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKIAlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwgZGF0YSk7CiAJbmV3X2NsaWVudC0+YWRkciA9IGFkZHJlc3M7CiAJbmV3X2NsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CkBAIC03ODksNyArNzkwLDcgQEAKIAlkYXRhLT50eXBlID0ga2luZDsKIAogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQpAQCAtODg1LDcgKzg4Niw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsOwogCWludCByZXMsIGJhbms7CiAKLQlkb3duKCZkYXRhLT5sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAogCWJhbmsgPSAocmVnID4+IDgpICYgMHgwZjsKIAlpZiAoYmFuayA+IDIpCkBAIC05MTksNyArOTIwLDcgQEAKIAlpZiAoYmFuayA+IDIpCiAJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBU0IxMDBfUkVHX0JBTkssIDApOwogCi0JdXAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtOTMwLDcgKzkzMSw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsOwogCWludCBiYW5rOwogCi0JZG93bigmZGF0YS0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAKIAliYW5rID0gKHJlZyA+PiA4KSAmIDB4MGY7CiAJaWYgKGJhbmsgPiAyKQpAQCAtOTYwLDcgKzk2MSw3IEBACiAJaWYgKGJhbmsgPiAyKQogCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQVNCMTAwX1JFR19CQU5LLCAwKTsKIAotCXVwKCZkYXRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBhc2IxMDBfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTk4NCw3ICs5ODUsNyBAQAogCXN0cnVjdCBhc2IxMDBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQogCQl8fCAhZGF0YS0+dmFsaWQpIHsKQEAgLTEwNDIsNyArMTA0Myw3IEBACiAJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiLi4uIGRldmljZSB1cGRhdGUgY29tcGxldGVcbiIpOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gZGF0YTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXR4cDEuYyBiL2RyaXZlcnMvaHdtb24vYXR4cDEuYwppbmRleCBiMGM0OTAwLi43MjhhMWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2F0eHAxLmMKKysrIGIvZHJpdmVycy9od21vbi9hdHhwMS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN5c3RlbSB2b2x0YWdlcyBjb250cm9sIHZpYSBBdHRhbnNpYyBBVFhQMSIpOwpAQCAtNjAsNyArNjEsNyBAQAogc3RydWN0IGF0eHAxX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CiAJdTggdmFsaWQ7CiAJc3RydWN0IHsKQEAgLTgwLDcgKzgxLDcgQEAKIAljbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKIApAQCAtOTMsNyArOTQsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybihkYXRhKTsKIH0KQEAgLTMwOSw3ICszMTAsNyBAQAogCiAJZGF0YS0+dmFsaWQgPSAwOwogCi0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwppbmRleCAyMDNmOWM3Li40NzhlYjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAibG03NS5oIgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwpAQCAtNzIsNyArNzMsNyBAQAogc3RydWN0IGRzMTYyMV9kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KIApAQCAtMTU2LDEwICsxNTcsMTAgQEAKIAlzdHJ1Y3QgZHMxNjIxX2RhdGEgKmRhdGEgPSBkczE2MjFfdXBkYXRlX2NsaWVudChkZXYpOwkJXAogCXUxNiB2YWwgPSBMTTc1X1RFTVBfVE9fUkVHKHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApKTsJXAogCQkJCQkJCQkJXAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJCVwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCQlcCiAJZGF0YS0+dmFsdWUgPSB2YWw7CQkJCQkJXAogCWRzMTYyMV93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+dmFsdWUpOwkJCVwKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOwkJCQkJCVwKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJXAogCXJldHVybiBjb3VudDsJCQkJCQkJXAogfQogCkBAIC0yNDIsNyArMjQzLDcgQEAKIAkvKiBGaWxsIGluIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBwdXQgaXQgaW50byB0aGUgZ2xvYmFsIGxpc3QgKi8KIAlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsICJkczE2MjEiLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKQEAgLTI5Nyw3ICsyOTgsNyBAQAogCXN0cnVjdCBkczE2MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXU4IG5ld19jb25mOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQogCSAgICB8fCAhZGF0YS0+dmFsaWQpIHsKQEAgLTMyNyw3ICszMjgsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mNzE4MDVmLmMgYi9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYwppbmRleCBlMDI5ZTBhLi44ODU0NjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYworKysgYi9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKQEAgLTEzMSwxMCArMTMyLDEwIEBACiBzdHJ1Y3QgZjcxODA1Zl9kYXRhIHsKIAl1bnNpZ25lZCBzaG9ydCBhZGRyOwogCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKIAotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF9saW1pdHM7CS8qIEluIGppZmZpZXMgKi8KQEAgLTIyNCwyMCArMjI1LDIwIEBACiB7CiAJdTggdmFsOwogCi0JZG93bigmZGF0YS0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJb3V0YihyZWcsIGRhdGEtPmFkZHIgKyBBRERSX1JFR19PRkZTRVQpOwogCXZhbCA9IGluYihkYXRhLT5hZGRyICsgREFUQV9SRUdfT0ZGU0VUKTsKLQl1cCgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAogCXJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIGY3MTgwNWZfd3JpdGU4KHN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEsIHU4IHJlZywgdTggdmFsKQogewotCWRvd24oJmRhdGEtPmxvY2spOworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCW91dGIocmVnLCBkYXRhLT5hZGRyICsgQUREUl9SRUdfT0ZGU0VUKTsKIAlvdXRiKHZhbCwgZGF0YS0+YWRkciArIERBVEFfUkVHX09GRlNFVCk7Ci0JdXAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiB9CiAKIC8qIEl0IGlzIGltcG9ydGFudCB0byByZWFkIHRoZSBNU0IgZmlyc3QsIGJlY2F1c2UgZG9pbmcgc28gbGF0Y2hlcyB0aGUKQEAgLTI0NiwyNCArMjQ3LDI0IEBACiB7CiAJdTE2IHZhbDsKIAotCWRvd24oJmRhdGEtPmxvY2spOworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCW91dGIocmVnLCBkYXRhLT5hZGRyICsgQUREUl9SRUdfT0ZGU0VUKTsKIAl2YWwgPSBpbmIoZGF0YS0+YWRkciArIERBVEFfUkVHX09GRlNFVCkgPDwgODsKIAlvdXRiKCsrcmVnLCBkYXRhLT5hZGRyICsgQUREUl9SRUdfT0ZGU0VUKTsKIAl2YWwgfD0gaW5iKGRhdGEtPmFkZHIgKyBEQVRBX1JFR19PRkZTRVQpOwotCXVwKCZkYXRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCiAJcmV0dXJuIHZhbDsKIH0KIAogc3RhdGljIHZvaWQgZjcxODA1Zl93cml0ZTE2KHN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEsIHU4IHJlZywgdTE2IHZhbCkKIHsKLQlkb3duKCZkYXRhLT5sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAlvdXRiKHJlZywgZGF0YS0+YWRkciArIEFERFJfUkVHX09GRlNFVCk7CiAJb3V0Yih2YWwgPj4gOCwgZGF0YS0+YWRkciArIERBVEFfUkVHX09GRlNFVCk7CiAJb3V0YigrK3JlZywgZGF0YS0+YWRkciArIEFERFJfUkVHX09GRlNFVCk7CiAJb3V0Yih2YWwgJiAweGZmLCBkYXRhLT5hZGRyICsgREFUQV9SRUdfT0ZGU0VUKTsKLQl1cCgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmNzE4MDVmX2RhdGEgKmY3MTgwNWZfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0yNzEsNyArMjcyLDcgQEAKIAlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IG5yOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIExpbWl0IHJlZ2lzdGVycyBjYWNoZSBpcyByZWZyZXNoZWQgYWZ0ZXIgNjAgc2Vjb25kcyAqLwogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIDYwICogSFopCkBAIC0zMjMsNyArMzI0LDcgQEAKIAkJZGF0YS0+dmFsaWQgPSAxOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gZGF0YTsKIH0KQEAgLTM2MiwxMCArMzYzLDEwIEBACiAJc3RydWN0IGY3MTgwNWZfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5faGlnaFswXSA9IGluMF90b19yZWcodmFsKTsKIAlmNzE4MDVmX3dyaXRlOChkYXRhLCBGNzE4MDVGX1JFR19JTl9ISUdIKDApLCBkYXRhLT5pbl9oaWdoWzBdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMzc2LDE4ICszNzcsMTQgQEAKIAlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9sb3dbMF0gPSBpbjBfdG9fcmVnKHZhbCk7CiAJZjcxODA1Zl93cml0ZTgoZGF0YSwgRjcxODA1Rl9SRUdfSU5fTE9XKDApLCBkYXRhLT5pbl9sb3dbMF0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBERVZJQ0VfQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4wLCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihpbjBfbWF4LCBTX0lSVUdPfCBTX0lXVVNSLCBzaG93X2luMF9tYXgsIHNldF9pbjBfbWF4KTsKLXN0YXRpYyBERVZJQ0VfQVRUUihpbjBfbWluLCBTX0lSVUdPfCBTX0lXVVNSLCBzaG93X2luMF9taW4sIHNldF9pbjBfbWluKTsKLQogc3RhdGljIHNzaXplX3Qgc2hvd19pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAogCQkgICAgICAgY2hhciAqYnVmKQogewpAQCAtNDI2LDEwICs0MjMsMTAgQEAKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX2hpZ2hbbnJdID0gaW5fdG9fcmVnKHZhbCk7CiAJZjcxODA1Zl93cml0ZTgoZGF0YSwgRjcxODA1Rl9SRUdfSU5fSElHSChuciksIGRhdGEtPmluX2hpZ2hbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNDQyLDMxICs0MzksMTQgQEAKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX2xvd1tucl0gPSBpbl90b19yZWcodmFsKTsKIAlmNzE4MDVmX3dyaXRlOChkYXRhLCBGNzE4MDVGX1JFR19JTl9MT1cobnIpLCBkYXRhLT5pbl9sb3dbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQogCi0jZGVmaW5lIHN5c2ZzX2luKG9mZnNldCkJCQkJCVwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4jI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLAkJXAotCQlzaG93X2luLCBOVUxMLCBvZmZzZXQpOwkJCQlcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluIyNvZmZzZXQjI19tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAlcCi0JCXNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCBvZmZzZXQpOwkJXAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwJXAotCQlzaG93X2luX21pbiwgc2V0X2luX21pbiwgb2Zmc2V0KQotCi1zeXNmc19pbigxKTsKLXN5c2ZzX2luKDIpOwotc3lzZnNfaW4oMyk7Ci1zeXNmc19pbig0KTsKLXN5c2ZzX2luKDUpOwotc3lzZnNfaW4oNik7Ci1zeXNmc19pbig3KTsKLXN5c2ZzX2luKDgpOwotCiBzdGF0aWMgc3NpemVfdCBzaG93X2ZhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAogCQkJY2hhciAqYnVmKQogewpAQCAtNDk1LDI0ICs0NzUsMTQgQEAKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmZhbl9sb3dbbnJdID0gZmFuX3RvX3JlZyh2YWwpOwogCWY3MTgwNWZfd3JpdGUxNihkYXRhLCBGNzE4MDVGX1JFR19GQU5fTE9XKG5yKSwgZGF0YS0+ZmFuX2xvd1tucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc3lzZnNfZmFuKG9mZnNldCkJCQkJCVwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19pbnB1dCwgU19JUlVHTywJCVwKLQkJc2hvd19mYW4sIE5VTEwsIG9mZnNldCAtIDEpOwkJCVwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19taW4sIFNfSVJVR08gfCBTX0lXVVNSLAlcCi0JCXNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIG9mZnNldCAtIDEpCi0KLXN5c2ZzX2ZhbigxKTsKLXN5c2ZzX2ZhbigyKTsKLXN5c2ZzX2ZhbigzKTsKLQogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCiAJCQkgY2hhciAqYnVmKQogewpAQCAtNTYyLDEwICs1MzIsMTAgQEAKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfaGlnaFtucl0gPSB0ZW1wX3RvX3JlZyh2YWwpOwogCWY3MTgwNWZfd3JpdGU4KGRhdGEsIEY3MTgwNUZfUkVHX1RFTVBfSElHSChuciksIGRhdGEtPnRlbXBfaGlnaFtucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC01NzgsMjggKzU0OCwxNCBAQAogCWludCBuciA9IGF0dHItPmluZGV4OwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9oeXN0W25yXSA9IHRlbXBfdG9fcmVnKHZhbCk7CiAJZjcxODA1Zl93cml0ZTgoZGF0YSwgRjcxODA1Rl9SRUdfVEVNUF9IWVNUKG5yKSwgZGF0YS0+dGVtcF9oeXN0W25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KIAotI2RlZmluZSBzeXNmc190ZW1wKG9mZnNldCkJCQkJCQlcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLAkJXAotCQlzaG93X3RlbXAsIE5VTEwsIG9mZnNldCAtIDEpOwkJCQlcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCVwKLQkJc2hvd190ZW1wX21heCwgc2V0X3RlbXBfbWF4LCBvZmZzZXQgLSAxKTsJCVwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLAlcCi0JCXNob3dfdGVtcF9oeXN0LCBzZXRfdGVtcF9oeXN0LCBvZmZzZXQgLSAxKTsJCVwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfdHlwZSwgU19JUlVHTywJCQlcCi0JCXNob3dfdGVtcF90eXBlLCBOVUxMLCBvZmZzZXQgLSAxKQotCi1zeXNmc190ZW1wKDEpOwotc3lzZnNfdGVtcCgyKTsKLXN5c2ZzX3RlbXAoMyk7Ci0KIHN0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm1zX2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKIAkJCSAgICAgICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CkBAIC02MjUsMTAgKzU4MSw2IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT5hbGFybXNbMV0gPj4gMykgJiAweDA3KTsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGFsYXJtc19pbiwgU19JUlVHTywgc2hvd19hbGFybXNfaW4sIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKGFsYXJtc19mYW4sIFNfSVJVR08sIHNob3dfYWxhcm1zX2ZhbiwgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zX3RlbXAsIFNfSVJVR08sIHNob3dfYWxhcm1zX3RlbXAsIE5VTEwpOwotCiBzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQogCQkJICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CkBAIC02MzcsNyArNTg5LDg5IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBmNzE4MDVmX2Rldl9hdHRyW10gPSB7CisJX19BVFRSKGluMF9pbnB1dCwgU19JUlVHTywgc2hvd19pbjAsIE5VTEwpLAorCV9fQVRUUihpbjBfbWF4LCBTX0lSVUdPfCBTX0lXVVNSLCBzaG93X2luMF9tYXgsIHNldF9pbjBfbWF4KSwKKwlfX0FUVFIoaW4wX21pbiwgU19JUlVHT3wgU19JV1VTUiwgc2hvd19pbjBfbWluLCBzZXRfaW4wX21pbiksCisJX19BVFRSKGFsYXJtc19pbiwgU19JUlVHTywgc2hvd19hbGFybXNfaW4sIE5VTEwpLAorCV9fQVRUUihhbGFybXNfZmFuLCBTX0lSVUdPLCBzaG93X2FsYXJtc19mYW4sIE5VTEwpLAorCV9fQVRUUihhbGFybXNfdGVtcCwgU19JUlVHTywgc2hvd19hbGFybXNfdGVtcCwgTlVMTCksCisJX19BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgTlVMTCksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGY3MTgwNWZfc2Vuc29yX2F0dHJbXSA9IHsKKwlTRU5TT1JfQVRUUihpbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKGluMV9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDEpLAorCVNFTlNPUl9BVFRSKGluMV9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDEpLAorCVNFTlNPUl9BVFRSKGluMl9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIoaW4yX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X2luX21heCwgc2V0X2luX21heCwgMiksCisJU0VOU09SX0FUVFIoaW4yX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X2luX21pbiwgc2V0X2luX21pbiwgMiksCisJU0VOU09SX0FUVFIoaW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjNfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCAzKSwKKwlTRU5TT1JfQVRUUihpbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKGluNF9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDQpLAorCVNFTlNPUl9BVFRSKGluNF9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDQpLAorCVNFTlNPUl9BVFRSKGluNV9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIoaW41X21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X2luX21heCwgc2V0X2luX21heCwgNSksCisJU0VOU09SX0FUVFIoaW41X21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X2luX21pbiwgc2V0X2luX21pbiwgNSksCisJU0VOU09SX0FUVFIoaW42X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihpbjZfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCA2KSwKKwlTRU5TT1JfQVRUUihpbjZfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCA2KSwKKwlTRU5TT1JfQVRUUihpbjdfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDcpLAorCVNFTlNPUl9BVFRSKGluN19tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDcpLAorCVNFTlNPUl9BVFRSKGluN19taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDcpLAorCVNFTlNPUl9BVFRSKGluOF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIoaW44X21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X2luX21heCwgc2V0X2luX21heCwgOCksCisJU0VOU09SX0FUVFIoaW44X21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X2luX21pbiwgc2V0X2luX21pbiwgOCksCisKKwlTRU5TT1JfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMV9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd190ZW1wX21heCwgc2V0X3RlbXBfbWF4LCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RlbXBfaHlzdCwgc2V0X3RlbXBfaHlzdCwgMCksCisJU0VOU09SX0FUVFIodGVtcDFfdHlwZSwgU19JUlVHTywgc2hvd190ZW1wX3R5cGUsIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAyX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgsIDEpLAorCVNFTlNPUl9BVFRSKHRlbXAyX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGVtcF9oeXN0LCBzZXRfdGVtcF9oeXN0LCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl90eXBlLCBTX0lSVUdPLCBzaG93X3RlbXBfdHlwZSwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIodGVtcDNfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGVtcF9tYXgsIHNldF90ZW1wX21heCwgMiksCisJU0VOU09SX0FUVFIodGVtcDNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd190ZW1wX2h5c3QsIHNldF90ZW1wX2h5c3QsIDIpLAorCVNFTlNPUl9BVFRSKHRlbXAzX3R5cGUsIFNfSVJVR08sIHNob3dfdGVtcF90eXBlLCBOVUxMLCAyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgZjcxODA1Zl9mYW5fYXR0cltdID0geworCVNFTlNPUl9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUihmYW4xX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAwKSwKKwlTRU5TT1JfQVRUUihmYW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoZmFuMl9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd19mYW5fbWluLCBzZXRfZmFuX21pbiwgMSksCisJU0VOU09SX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKGZhbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIDIpLAorfTsKIAogLyoKICAqIERldmljZSByZWdpc3RyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uCkBAIC02NjgsNyArNzAyLDcgQEAKIHsKIAlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBlcnI7CisJaW50IGksIGVycjsKIAogCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZjcxODA1Zl9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC02NzgsOSArNzEyLDkgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKIAlkYXRhLT5hZGRyID0gcmVzLT5zdGFydDsKLQlpbml0X01VVEVYKCZkYXRhLT5sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKIAlkYXRhLT5uYW1lID0gImY3MTgwNWYiOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIApAQCAtNjk1LDc2ICs3MjksMzEgQEAKIAlmNzE4MDVmX2luaXRfZGV2aWNlKGRhdGEpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaW50ZXJmYWNlIGZpbGVzICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9pbjBfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfaW4wX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9pbjBfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luOF9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW40X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW43X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW44X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW40X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW43X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW44X21pbi5kZXZfYXR0cik7Ci0JaWYgKGRhdGEtPmZhbl9lbmFibGVkICYgKDEgPDwgMCkpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCi0JCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCi0JCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0cik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZjcxODA1Zl9kZXZfYXR0cik7IGkrKykgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmY3MTgwNWZfZGV2X2F0dHJbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2NsYXNzOwogCX0KLQlpZiAoZGF0YS0+ZmFuX2VuYWJsZWQgJiAoMSA8PCAxKSkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKLQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKLQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmNzE4MDVmX3NlbnNvcl9hdHRyKTsgaSsrKSB7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAorCQkJCQkgJmY3MTgwNWZfc2Vuc29yX2F0dHJbaV0uZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2NsYXNzOwogCX0KLQlpZiAoZGF0YS0+ZmFuX2VuYWJsZWQgJiAoMSA8PCAyKSkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKLQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKLQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmNzE4MDVmX2Zhbl9hdHRyKTsgaSsrKSB7CisJCWlmICghKGRhdGEtPmZhbl9lbmFibGVkICYgKDEgPDwgKGkgLyAyKSkpKQorCQkJY29udGludWU7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAorCQkJCQkgJmY3MTgwNWZfZmFuX2F0dHJbaV0uZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X2NsYXNzOwogCX0KLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAotCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAotCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9oeXN0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV90eXBlLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl90eXBlLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wM190eXBlLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2FsYXJtc19pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9hbGFybXNfZmFuKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2FsYXJtc190ZW1wKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOwogCiAJcmV0dXJuIDA7CiAKK2V4aXRfY2xhc3M6CisJZGV2X2VycigmcGRldi0+ZGV2LCAiU3lzZnMgaW50ZXJmYWNlIGNyZWF0aW9uIGZhaWxlZFxuIik7CisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKIGV4aXRfZnJlZToKIAlrZnJlZShkYXRhKTsKIGV4aXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2hlci5jIGIvZHJpdmVycy9od21vbi9mc2NoZXIuYwppbmRleCAyNTQwOTE4Li42YmM3NmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2hlci5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaGVyLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qCiAgKiBBZGRyZXNzZXMgdG8gc2NhbgpAQCAtMTMzLDcgKzEzNCw3IEBACiBzdHJ1Y3QgZnNjaGVyX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBpbiBqaWZmaWVzICovCiAKQEAgLTMzMiw3ICszMzMsNyBAQAogCSAqIGdsb2JhbCBsaXN0ICovCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCAiZnNjaGVyIiwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC00MTcsNyArNDE4LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBmc2NoZXJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIDIgKiBIWikgfHwgIWRhdGEtPnZhbGlkKSB7CiAKQEAgLTQ1Nyw3ICs0NTgsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7ICAgICAgICAgICAgICAgICAKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CkBAIC00NzIsMTAgKzQ3MywxMCBAQAogCS8qIGJpdHMgMC4uMSwgMy4uNyByZXNlcnZlZCA9PiBtYXNrIHdpdGggMHgwNCAqLyAgCiAJdW5zaWduZWQgbG9uZyB2ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgJiAweDA0OwogCQotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+ZmFuX3N0YXR1c1tGQU5fSU5ERVhfRlJPTV9OVU0obnIpXSAmPSB+djsKIAlmc2NoZXJfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIHYpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00OTAsMTAgKzQ5MSwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5mYW5fbWluW0ZBTl9JTkRFWF9GUk9NX05VTShucildID0gdiA+IDB4ZmYgPyAweGZmIDogdjsKIAlmc2NoZXJfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPmZhbl9taW5bRkFOX0lOREVYX0ZST01fTlVNKG5yKV0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC01MTgsMTQgKzUxOSwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogYml0cyAyLi43IHJlc2VydmVkID0+IG1hc2sgd2l0aCAweDAzICovCiAJZGF0YS0+ZmFuX3JpcHBsZVtGQU5fSU5ERVhfRlJPTV9OVU0obnIpXSAmPSB+MHgwMzsKIAlkYXRhLT5mYW5fcmlwcGxlW0ZBTl9JTkRFWF9GUk9NX05VTShucildIHw9IHY7CiAKIAlmc2NoZXJfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPmZhbl9yaXBwbGVbRkFOX0lOREVYX0ZST01fTlVNKG5yKV0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC01NTIsMTAgKzU1MywxMCBAQAogCS8qIGJpdHMgMi4uNyByZXNlcnZlZCwgMCByZWFkIG9ubHkgPT4gbWFzayB3aXRoIDB4MDIgKi8gIAogCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApICYgMHgwMjsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9zdGF0dXNbVEVNUF9JTkRFWF9GUk9NX05VTShucildICY9IH52OwogCWZzY2hlcl93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgdik7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTYwOSwxMCArNjEwLDEwIEBACiAJLyogYml0cyAxLi43IHJlc2VydmVkID0+IG1hc2sgd2l0aCAweDAxICovICAKIAl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAmIDB4MDE7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmdsb2JhbF9jb250cm9sICY9IH52OwogCWZzY2hlcl93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgdik7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTYzMSwxMSArNjMyLDExIEBACiAJLyogYml0cyAwLi4zIHJlc2VydmVkID0+IG1hc2sgd2l0aCAweGYwICovICAKIAl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAmIDB4ZjA7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPndhdGNoZG9nWzJdICY9IH4weGYwOwogCWRhdGEtPndhdGNoZG9nWzJdIHw9IHY7CiAJZnNjaGVyX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBkYXRhLT53YXRjaGRvZ1syXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTY1MSwxMCArNjUyLDEwIEBACiAJLyogYml0cyAwLCAyLi43IHJlc2VydmVkID0+IG1hc2sgd2l0aCAweDAyICovICAKIAl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAmIDB4MDI7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPndhdGNoZG9nWzFdICY9IH52OwogCWZzY2hlcl93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgdik7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTY2OSwxMCArNjcwLDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyB2ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgJiAweGZmOwogCQotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+d2F0Y2hkb2dbMF0gPSB2OwogCWZzY2hlcl93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+d2F0Y2hkb2dbMF0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY3Bvcy5jIGIvZHJpdmVycy9od21vbi9mc2Nwb3MuYwppbmRleCA2ZDAxNDZiLi42ZGM0ODQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mc2Nwb3MuYworKysgYi9kcml2ZXJzL2h3bW9uL2ZzY3Bvcy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyoKICAqIEFkZHJlc3NlcyB0byBzY2FuCkBAIC04OSw4ICs5MCw4IEBACiBzdGF0aWMgaW50IGZzY3Bvc19kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpOwogc3RhdGljIGludCBmc2Nwb3NfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAotc3RhdGljIGludCBmc2Nwb3NfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWdpc3Rlcik7Ci1zdGF0aWMgaW50IGZzY3Bvc193cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWdpc3RlciwgdTggdmFsdWUpOworc3RhdGljIGludCBmc2Nwb3NfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOworc3RhdGljIGludCBmc2Nwb3Nfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSk7CiBzdGF0aWMgc3RydWN0IGZzY3Bvc19kYXRhICpmc2Nwb3NfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZnNjcG9zX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCkBAIC0xMTQsNyArMTE1LDcgQEAKIHN0cnVjdCBmc2Nwb3NfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAJCS8qIDAgdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCkBAIC0yMDgsMTMgKzIwOSwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkvKiBiaXRzIDIuLjcgcmVzZXJ2ZWQgPT4gbWFzayB3aXRoIDB4MDMgKi8KIAlkYXRhLT5mYW5fcmlwcGxlW25yIC0gMV0gJj0gfjB4MDM7CiAJZGF0YS0+ZmFuX3JpcHBsZVtuciAtIDFdIHw9IHY7CiAJCiAJZnNjcG9zX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBkYXRhLT5mYW5fcmlwcGxlW25yIC0gMV0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0yMzIsMTAgKzIzMywxMCBAQAogCWlmICh2IDwgMCkgdiA9IDA7CiAJaWYgKHYgPiAyNTUpIHYgPSAyNTU7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnB3bVtuciAtIDFdID0gdjsKIAlmc2Nwb3Nfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPnB3bVtuciAtIDFdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjc4LDExICsyNzksMTEgQEAKIAkvKiBiaXRzIDAuLjMgcmVzZXJ2ZWQgPT4gbWFzayB3aXRoIDB4ZjAgKi8KIAl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAmIDB4ZjA7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPndkb2dfY29udHJvbCAmPSB+MHhmMDsKIAlkYXRhLT53ZG9nX2NvbnRyb2wgfD0gdjsKIAlmc2Nwb3Nfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPndkb2dfY29udHJvbCk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMwNCwxMCArMzA1LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+d2RvZ19zdGF0ZSAmPSB+djsKIAlmc2Nwb3Nfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIHYpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMjEsMTAgKzMyMiwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApICYgMHhmZjsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+d2RvZ19wcmVzZXQgPSB2OwogCWZzY3Bvc193cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+d2RvZ19wcmVzZXQpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00ODMsNyArNDg0LDcgQEAKIAlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsICJmc2Nwb3MiLCBJMkNfTkFNRV9TSVpFKTsKIAogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQpAQCAtNTc5LDcgKzU4MCw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZnNjcG9zX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyAyICogSFopIHx8ICFkYXRhLT52YWxpZCkgewogCQlpbnQgaTsKQEAgLTYyNSw3ICs2MjYsNyBAQAogCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOwogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGRhdGE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZ2w1MThzbS5jIGIvZHJpdmVycy9od21vbi9nbDUxOHNtLmMKaW5kZXggOWU2ODVlMy4uNjYwNmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9nbDUxOHNtLmMKKysrIGIvZHJpdmVycy9od21vbi9nbDUxOHNtLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtMTIwLDcgKzEyMSw3IEBACiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwogCWVudW0gY2hpcHMgdHlwZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCkBAIC0yMTIsMTAgKzIxMywxMCBAQAogCXN0cnVjdCBnbDUxOF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CQlcCiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwkJCVwKIAkJCQkJCQkJCVwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCQlcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwkJCQkJXAogCWRhdGEtPnZhbHVlID0gdHlwZSMjX1RPX1JFRyh2YWwpOwkJCQlcCiAJZ2w1MThfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPnZhbHVlKTsJCQlcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJCQlcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCVwKIAlyZXR1cm4gY291bnQ7CQkJCQkJCVwKIH0KIApAQCAtMjI4LDEyICsyMjksMTIgQEAKIAlpbnQgcmVndmFsdWU7CQkJCQkJCVwKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJXAogCQkJCQkJCQkJXAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJCVwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCQlcCiAJcmVndmFsdWUgPSBnbDUxOF9yZWFkX3ZhbHVlKGNsaWVudCwgcmVnKTsJCQlcCiAJZGF0YS0+dmFsdWUgPSB0eXBlIyNfVE9fUkVHKHZhbCk7CQkJCVwKIAlyZWd2YWx1ZSA9IChyZWd2YWx1ZSAmIH5tYXNrKSB8IChkYXRhLT52YWx1ZSA8PCBzaGlmdCk7CQlcCiAJZ2w1MThfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIHJlZ3ZhbHVlKTsJCQlcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJCQlcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCVwKIAlyZXR1cm4gY291bnQ7CQkJCQkJCVwKIH0KIApAQCAtMjY1LDcgKzI2Niw3IEBACiAJaW50IHJlZ3ZhbHVlOwogCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJlZ3ZhbHVlID0gZ2w1MThfcmVhZF92YWx1ZShjbGllbnQsIEdMNTE4X1JFR19GQU5fTElNSVQpOwogCWRhdGEtPmZhbl9taW5bMF0gPSBGQU5fVE9fUkVHKHZhbCwKIAkJRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbMF0pKTsKQEAgLTI4MCw3ICsyODEsNyBAQAogCWRhdGEtPmJlZXBfbWFzayAmPSBkYXRhLT5hbGFybV9tYXNrOwogCWdsNTE4X3dyaXRlX3ZhbHVlKGNsaWVudCwgR0w1MThfUkVHX0FMQVJNLCBkYXRhLT5iZWVwX21hc2spOwogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTI5MSw3ICsyOTIsNyBAQAogCWludCByZWd2YWx1ZTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZWd2YWx1ZSA9IGdsNTE4X3JlYWRfdmFsdWUoY2xpZW50LCBHTDUxOF9SRUdfRkFOX0xJTUlUKTsKIAlkYXRhLT5mYW5fbWluWzFdID0gRkFOX1RPX1JFRyh2YWwsCiAJCURJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2WzFdKSk7CkBAIC0zMDYsNyArMzA3LDcgQEAKIAlkYXRhLT5iZWVwX21hc2sgJj0gZGF0YS0+YWxhcm1fbWFzazsKIAlnbDUxOF93cml0ZV92YWx1ZShjbGllbnQsIEdMNTE4X1JFR19BTEFSTSwgZGF0YS0+YmVlcF9tYXNrKTsKIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00MDcsNyArNDA4LDcgQEAKIAlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsICJnbDUxOHNtIiwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dHlwZSA9IGtpbmQ7CiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC01MjUsNyArNTI2LDcgQEAKIAlzdHJ1Y3QgZ2w1MThfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWw7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKyBIWiAvIDIpCiAJICAgIHx8ICFkYXRhLT52YWxpZCkgewpAQCAtNTg2LDcgKzU4Nyw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2dsNTIwc20uYyBiL2RyaXZlcnMvaHdtb24vZ2w1MjBzbS5jCmluZGV4IGJhZWU2MGUuLjE0ZTgxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZ2w1MjBzbS5jCisrKyBiL2RyaXZlcnMvaHdtb24vZ2w1MjBzbS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBUeXBlIG9mIHRoZSBleHRyYSBzZW5zb3IgKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBleHRyYV9zZW5zb3JfdHlwZTsKQEAgLTEyMSw3ICsxMjIsNyBAQAogc3RydWN0IGdsNTIwX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsJCS8qIHplcm8gdW50aWwgdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIGluIGppZmZpZXMgKi8KIApAQCAtMzAzLDcgKzMwNCw3IEBACiAJbG9uZyB2ID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAl1OCByOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmIChuID09IDApCiAJCXIgPSBWRERfVE9fUkVHKHYpOwpAQCAtMzE3LDcgKzMxOCw3IEBACiAJZWxzZQogCQlnbDUyMF93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgcik7CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzMxLDcgKzMzMiw3IEBACiAJZWxzZQogCQlyID0gSU5fVE9fUkVHKHYpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWRhdGEtPmluX21heFtuXSA9IHI7CiAKQEAgLTM0MCw3ICszNDEsNyBAQAogCWVsc2UKIAkJZ2w1MjBfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIHIpOwogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM3Myw3ICszNzQsNyBAQAogCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCXU4IHI7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXIgPSBGQU5fVE9fUkVHKHYsIGRhdGEtPmZhbl9kaXZbbiAtIDFdKTsKIAlkYXRhLT5mYW5fbWluW24gLSAxXSA9IHI7CiAKQEAgLTM5MCw3ICszOTEsNyBAQAogCWRhdGEtPmJlZXBfbWFzayAmPSBkYXRhLT5hbGFybV9tYXNrOwogCWdsNTIwX3dyaXRlX3ZhbHVlKGNsaWVudCwgR0w1MjBfUkVHX0JFRVBfTUFTSywgZGF0YS0+YmVlcF9tYXNrKTsKIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00MDksNyArNDEwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5mYW5fZGl2W24gLSAxXSA9IHI7CiAKIAlpZiAobiA9PSAxKQpAQCAtNDE3LDcgKzQxOCw3IEBACiAJZWxzZQogCQlnbDUyMF93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgKGdsNTIwX3JlYWRfdmFsdWUoY2xpZW50LCByZWcpICYgfjB4MzApIHwgKHIgPDwgNCkpOwogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTQyNSwxMCArNDI2LDEwIEBACiB7CiAJdTggciA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApPzE6MDsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+ZmFuX29mZiA9IHI7CiAJZ2w1MjBfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIChnbDUyMF9yZWFkX3ZhbHVlKGNsaWVudCwgcmVnKSAmIH4weDBjKSB8IChyIDw8IDIpKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDU0LDEwICs0NTUsMTAgQEAKIHsKIAlsb25nIHYgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPnRlbXBfbWF4W24gLSAxXSA9IFRFTVBfVE9fUkVHKHYpOzsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+dGVtcF9tYXhbbiAtIDFdID0gVEVNUF9UT19SRUcodik7CiAJZ2w1MjBfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPnRlbXBfbWF4W24gLSAxXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTQ2NSwxMCArNDY2LDEwIEBACiB7CiAJbG9uZyB2ID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9tYXhfaHlzdFtuIC0gMV0gPSBURU1QX1RPX1JFRyh2KTsKIAlnbDUyMF93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+dGVtcF9tYXhfaHlzdFtuIC0gMV0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00OTEsMTAgKzQ5MiwxMCBAQAogewogCXU4IHIgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKT8wOjE7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmJlZXBfZW5hYmxlID0gIXI7CiAJZ2w1MjBfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIChnbDUyMF9yZWFkX3ZhbHVlKGNsaWVudCwgcmVnKSAmIH4weDA0KSB8IChyIDw8IDIpKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNTAyLDExICs1MDMsMTEgQEAKIHsKIAl1OCByID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAJCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyICY9IGRhdGEtPmFsYXJtX21hc2s7CiAJZGF0YS0+YmVlcF9tYXNrID0gcjsKIAlnbDUyMF93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgcik7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTU2MSw3ICs1NjIsNyBAQAogCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzICovCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCAiZ2w1MjBzbSIsIEkyQ19OQU1FX1NJWkUpOwogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQpAQCAtNjg1LDcgKzY4Niw3IEBACiAJc3RydWN0IGdsNTIwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIDIgKiBIWikgfHwgIWRhdGEtPnZhbGlkKSB7CiAKQEAgLTc1MCw3ICs3NTEsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9oZGFwcy5jIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCmluZGV4IDIzYTllMWUuLjc2MzZjMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYworKysgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgSERBUFNfTE9XX1BPUlQJCTB4MTYwMAkvKiBmaXJzdCBwb3J0IHVzZWQgYnkgaGRhcHMgKi8KQEAgLTcwLDEwICs3MSwxMCBAQAogc3RhdGljIGludCByZXN0X3g7CiBzdGF0aWMgaW50IHJlc3RfeTsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoaGRhcHNfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaGRhcHNfbXV0ZXgpOwogCiAvKgotICogX19nZXRfbGF0Y2ggLSBHZXQgdGhlIHZhbHVlIGZyb20gYSBnaXZlbiBwb3J0LiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgorICogX19nZXRfbGF0Y2ggLSBHZXQgdGhlIHZhbHVlIGZyb20gYSBnaXZlbiBwb3J0LiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXV0ZXguCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTggX19nZXRfbGF0Y2godTE2IHBvcnQpCiB7CkBAIC04Miw3ICs4Myw3IEBACiAKIC8qCiAgKiBfX2NoZWNrX2xhdGNoIC0gQ2hlY2sgYSBwb3J0IGxhdGNoIGZvciBhIGdpdmVuIHZhbHVlLiAgUmV0dXJucyB6ZXJvIGlmIHRoZQotICogcG9ydCBjb250YWlucyB0aGUgZ2l2ZW4gdmFsdWUuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCisgKiBwb3J0IGNvbnRhaW5zIHRoZSBnaXZlbiB2YWx1ZS4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX211dGV4LgogICovCiBzdGF0aWMgaW5saW5lIGludCBfX2NoZWNrX2xhdGNoKHUxNiBwb3J0LCB1OCB2YWwpCiB7CkBAIC05Myw3ICs5NCw3IEBACiAKIC8qCiAgKiBfX3dhaXRfbGF0Y2ggLSBXYWl0IHVwIHRvIDEwMHVzIGZvciBhIHBvcnQgbGF0Y2ggdG8gZ2V0IGEgY2VydGFpbiB2YWx1ZSwKLSAqIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqIHJldHVybmluZyB6ZXJvIGlmIHRoZSB2YWx1ZSBpcyBvYnRhaW5lZC4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX211dGV4LgogICovCiBzdGF0aWMgaW50IF9fd2FpdF9sYXRjaCh1MTYgcG9ydCwgdTggdmFsKQogewpAQCAtMTEwLDcgKzExMSw3IEBACiAKIC8qCiAgKiBfX2RldmljZV9yZWZyZXNoIC0gcmVxdWVzdCBhIHJlZnJlc2ggZnJvbSB0aGUgYWNjZWxlcm9tZXRlci4gIERvZXMgbm90IHdhaXQKLSAqIGZvciByZWZyZXNoIHRvIGNvbXBsZXRlLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfc2VtLgorICogZm9yIHJlZnJlc2ggdG8gY29tcGxldGUuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19tdXRleC4KICAqLwogc3RhdGljIHZvaWQgX19kZXZpY2VfcmVmcmVzaCh2b2lkKQogewpAQCAtMTI0LDcgKzEyNSw3IEBACiAvKgogICogX19kZXZpY2VfcmVmcmVzaF9zeW5jIC0gcmVxdWVzdCBhIHN5bmNocm9ub3VzIHJlZnJlc2ggZnJvbSB0aGUKICAqIGFjY2VsZXJvbWV0ZXIuICBXZSB3YWl0IGZvciB0aGUgcmVmcmVzaCB0byBjb21wbGV0ZS4gIFJldHVybnMgemVybyBpZgotICogc3VjY2Vzc2Z1bCBhbmQgbm9uemVybyBvbiBlcnJvci4gIENhbGxlcnMgbXVzdCBob2xkIGhkYXBzX3NlbS4KKyAqIHN1Y2Nlc3NmdWwgYW5kIG5vbnplcm8gb24gZXJyb3IuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19tdXRleC4KICAqLwogc3RhdGljIGludCBfX2RldmljZV9yZWZyZXNoX3N5bmModm9pZCkKIHsKQEAgLTEzNCw3ICsxMzUsNyBAQAogCiAvKgogICogX19kZXZpY2VfY29tcGxldGUgLSBpbmRpY2F0ZSB0byB0aGUgYWNjZWxlcm9tZXRlciB0aGF0IHdlIGFyZSBkb25lIHJlYWRpbmcKLSAqIGRhdGEsIGFuZCB0aGVuIGluaXRpYXRlIGFuIGFzeW5jIHJlZnJlc2guICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCisgKiBkYXRhLCBhbmQgdGhlbiBpbml0aWF0ZSBhbiBhc3luYyByZWZyZXNoLiAgQ2FsbGVycyBtdXN0IGhvbGQgaGRhcHNfbXV0ZXguCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RldmljZV9jb21wbGV0ZSh2b2lkKQogewpAQCAtMTUyLDcgKzE1Myw3IEBACiB7CiAJaW50IHJldDsKIAotCWRvd24oJmhkYXBzX3NlbSk7CisJbXV0ZXhfbG9jaygmaGRhcHNfbXV0ZXgpOwogCiAJLyogZG8gYSBzeW5jIHJlZnJlc2ggLS0gd2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgd2UgcmVhZCBmcmVzaCBkYXRhICovCiAJcmV0ID0gX19kZXZpY2VfcmVmcmVzaF9zeW5jKCk7CkBAIC0xNjMsNyArMTY0LDcgQEAKIAlfX2RldmljZV9jb21wbGV0ZSgpOwogCiBvdXQ6Ci0JdXAoJmhkYXBzX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZoZGFwc19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTk4LDkgKzE5OSw5IEBACiB7CiAJaW50IHJldDsKIAotCWRvd24oJmhkYXBzX3NlbSk7CisJbXV0ZXhfbG9jaygmaGRhcHNfbXV0ZXgpOwogCXJldCA9IF9faGRhcHNfcmVhZF9wYWlyKHBvcnQxLCBwb3J0MiwgdmFsMSwgdmFsMik7Ci0JdXAoJmhkYXBzX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZoZGFwc19tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjEzLDcgKzIxNCw3IEBACiB7CiAJaW50IHRvdGFsLCByZXQgPSAtRU5YSU87CiAKLQlkb3duKCZoZGFwc19zZW0pOworCW11dGV4X2xvY2soJmhkYXBzX211dGV4KTsKIAogCW91dGIoMHgxMywgMHgxNjEwKTsKIAlvdXRiKDB4MDEsIDB4MTYxZik7CkBAIC0yNzksNyArMjgwLDcgQEAKIAl9CiAKIG91dDoKLQl1cCgmaGRhcHNfc2VtKTsKKwltdXRleF91bmxvY2soJmhkYXBzX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTMsNyArMzE0LDcgQEAKIH07CiAKIC8qCi0gKiBoZGFwc19jYWxpYnJhdGUgLSBTZXQgb3VyICJyZXN0aW5nIiB2YWx1ZXMuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19zZW0uCisgKiBoZGFwc19jYWxpYnJhdGUgLSBTZXQgb3VyICJyZXN0aW5nIiB2YWx1ZXMuICBDYWxsZXJzIG11c3QgaG9sZCBoZGFwc19tdXRleC4KICAqLwogc3RhdGljIHZvaWQgaGRhcHNfY2FsaWJyYXRlKHZvaWQpCiB7CkBAIC0zMjUsNyArMzI2LDcgQEAKIAlpbnQgeCwgeTsKIAogCS8qIENhbm5vdCBzbGVlcC4gIFRyeSBub25ibG9ja2luZ2x5LiAgSWYgd2UgZmFpbCwgdHJ5IGFnYWluIGxhdGVyLiAqLwotCWlmIChkb3duX3RyeWxvY2soJmhkYXBzX3NlbSkpIHsKKwlpZiAoIW11dGV4X3RyeWxvY2soJmhkYXBzX211dGV4KSkgewogCQltb2RfdGltZXIoJmhkYXBzX3RpbWVyLGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRCk7CiAJCXJldHVybjsKIAl9CkBAIC0zNDAsNyArMzQxLDcgQEAKIAltb2RfdGltZXIoJmhkYXBzX3RpbWVyLCBqaWZmaWVzICsgSERBUFNfUE9MTF9QRVJJT0QpOwogCiBvdXQ6Ci0JdXAoJmhkYXBzX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZoZGFwc19tdXRleCk7CiB9CiAKIApAQCAtNDIwLDkgKzQyMSw5IEBACiAJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWRvd24oJmhkYXBzX3NlbSk7CisJbXV0ZXhfbG9jaygmaGRhcHNfbXV0ZXgpOwogCWhkYXBzX2NhbGlicmF0ZSgpOwotCXVwKCZoZGFwc19zZW0pOworCW11dGV4X3VubG9jaygmaGRhcHNfbXV0ZXgpOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9od21vbi12aWQuYyBiL2RyaXZlcnMvaHdtb24vaHdtb24tdmlkLmMKaW5kZXggZTQ5NzI3NC4uYTc0YTQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9od21vbi12aWQuYworKysgYi9kcml2ZXJzL2h3bW9uL2h3bW9uLXZpZC5jCkBAIC01NCw2ICs1NCwxMCBAQAogICAgIChJTVZQLUlJKS4gWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlIGRhdGFzaGVldCBvZiBNYXgxNzE4CiAgICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzI0NTIKIAorICAgIFRoZSAxMyBzcGVjaWZpY2F0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSBJbnRlbCBQZW50aXVtIE0gc2VyaWVzLiBUaGVyZQorICAgIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgbmFtZWQgc3BlY2lmaWNhdGlvbiBmb3IgdGhlc2UuIFRoZSBjb252ZXJzaW9uCisgICAgdGFibGVzIGFyZSBkZXRhaWxlZCBkaXJlY3RseSBpbiB0aGUgdmFyaW91cyBQZW50aXVtIE0gZGF0YXNoZWV0czoKKyAgICBodHRwOi8vd3d3LmludGVsLmNvbS9kZXNpZ24vaW50YXJjaC9wZW50aXVtbS9kb2NzX3BlbnRpdW1tLmh0bQogKi8KIAogLyogdnJtIGlzIHRoZSBWUk0vVlJEIGRvY3VtZW50IHZlcnNpb24gbXVsdGlwbGllZCBieSAxMC4KQEAgLTEwMCw2ICsxMDQsOCBAQAogCWNhc2UgMTc6CQkvKiBJbnRlbCBJTVZQLUlJICovCiAJCXJldHVybih2YWwgJiAweDEwID8gOTc1IC0gKHZhbCAmIDB4RikgKiAyNSA6CiAJCQkJICAgIDE3NTAgLSB2YWwgKiA1MCk7CisJY2FzZSAxMzoKKwkJcmV0dXJuKDE3MDggLSAodmFsICYgMHgzZikgKiAxNik7CiAJZGVmYXVsdDoJCS8qIHJlcG9ydCAwIGZvciB1bmtub3duICovCiAJCXByaW50ayhLRVJOX0lORk8gImh3bW9uLXZpZDogcmVxdWVzdGVkIHVua25vd24gVlJNIHZlcnNpb25cbiIpOwogCQlyZXR1cm4gMDsKQEAgLTEyOSw4ICsxMzUsOSBAQAogc3RhdGljIHN0cnVjdCB2cm1fbW9kZWwgdnJtX21vZGVsc1tdID0gewogCXtYODZfVkVORE9SX0FNRCwgMHg2LCBBTlksIEFOWSwgOTB9LAkJLyogQXRobG9uIER1cm9uIGV0YyAqLwogCXtYODZfVkVORE9SX0FNRCwgMHhGLCBBTlksIEFOWSwgMjR9LAkJLyogQXRobG9uIDY0LCBPcHRlcm9uIGFuZCBhYm92ZSBWUk0gMjQgKi8KLQl7WDg2X1ZFTkRPUl9JTlRFTCwgMHg2LCAweDksIEFOWSwgODV9LAkJLyogMC4xM3VtIHRvbyAqLworCXtYODZfVkVORE9SX0lOVEVMLCAweDYsIDB4OSwgQU5ZLCAxM30sCQkvKiBQZW50aXVtIE0gKDEzMCBubSkgKi8KIAl7WDg2X1ZFTkRPUl9JTlRFTCwgMHg2LCAweEIsIEFOWSwgODV9LAkJLyogVHVhbGF0aW4gKi8KKwl7WDg2X1ZFTkRPUl9JTlRFTCwgMHg2LCAweEQsIEFOWSwgMTN9LAkJLyogUGVudGl1bSBNICg5MCBubSkgKi8KIAl7WDg2X1ZFTkRPUl9JTlRFTCwgMHg2LCBBTlksIEFOWSwgODJ9LAkJLyogYW55IFA2ICovCiAJe1g4Nl9WRU5ET1JfSU5URUwsIDB4NywgQU5ZLCBBTlksIDB9LAkJLyogSXRhbml1bSAqLwogCXtYODZfVkVORE9SX0lOVEVMLCAweEYsIDB4MCwgQU5ZLCA5MH0sCQkvKiBQNCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9od21vbi5jIGIvZHJpdmVycy9od21vbi9od21vbi5jCmluZGV4IGRkZGQzZWIuLjEwNmZhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaHdtb24uYworKysgYi9kcml2ZXJzL2h3bW9uL2h3bW9uLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNkZWZpbmUgSFdNT05fSURfUFJFRklYICJod21vbiIKICNkZWZpbmUgSFdNT05fSURfRk9STUFUIEhXTU9OX0lEX1BSRUZJWCAiJWQiCkBAIC0yNCw2ICsyNSw3IEBACiBzdGF0aWMgc3RydWN0IGNsYXNzICpod21vbl9jbGFzczsKIAogc3RhdGljIERFRklORV9JRFIoaHdtb25faWRyKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaWRyX2xvY2spOwogCiAvKioKICAqIGh3bW9uX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIHcvIGh3bW9uIHN5c2ZzIGNsYXNzCkBAIC0zNywyMCArMzksMzAgQEAKIHN0cnVjdCBjbGFzc19kZXZpY2UgKmh3bW9uX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2RldjsKLQlpbnQgaWQ7CisJaW50IGlkLCBlcnI7CiAKLQlpZiAoaWRyX3ByZV9nZXQoJmh3bW9uX2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkKK2FnYWluOgorCWlmICh1bmxpa2VseShpZHJfcHJlX2dldCgmaHdtb25faWRyLCBHRlBfS0VSTkVMKSA9PSAwKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlpZiAoaWRyX2dldF9uZXcoJmh3bW9uX2lkciwgTlVMTCwgJmlkKSA8IDApCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXNwaW5fbG9jaygmaWRyX2xvY2spOworCWVyciA9IGlkcl9nZXRfbmV3KCZod21vbl9pZHIsIE5VTEwsICZpZCk7CisJc3Bpbl91bmxvY2soJmlkcl9sb2NrKTsKKworCWlmICh1bmxpa2VseShlcnIgPT0gLUVBR0FJTikpCisJCWdvdG8gYWdhaW47CisJZWxzZSBpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAogCWlkID0gaWQgJiBNQVhfSURfTUFTSzsKIAljZGV2ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZShod21vbl9jbGFzcywgTlVMTCwgTUtERVYoMCwwKSwgZGV2LAogCQkJCQlIV01PTl9JRF9GT1JNQVQsIGlkKTsKIAotCWlmIChJU19FUlIoY2RldikpCisJaWYgKElTX0VSUihjZGV2KSkgeworCQlzcGluX2xvY2soJmlkcl9sb2NrKTsKIAkJaWRyX3JlbW92ZSgmaHdtb25faWRyLCBpZCk7CisJCXNwaW5fdW5sb2NrKCZpZHJfbG9jayk7CisJfQogCiAJcmV0dXJuIGNkZXY7CiB9CkBAIC02NCw5ICs3NiwxMSBAQAogewogCWludCBpZDsKIAotCWlmIChzc2NhbmYoY2Rldi0+Y2xhc3NfaWQsIEhXTU9OX0lEX0ZPUk1BVCwgJmlkKSA9PSAxKSB7CisJaWYgKGxpa2VseShzc2NhbmYoY2Rldi0+Y2xhc3NfaWQsIEhXTU9OX0lEX0ZPUk1BVCwgJmlkKSA9PSAxKSkgewogCQljbGFzc19kZXZpY2VfdW5yZWdpc3RlcihjZGV2KTsKKwkJc3Bpbl9sb2NrKCZpZHJfbG9jayk7CiAJCWlkcl9yZW1vdmUoJmh3bW9uX2lkciwgaWQpOworCQlzcGluX3VubG9jaygmaWRyX2xvY2spOwogCX0gZWxzZQogCQlkZXZfZGJnKGNkZXYtPmRldiwKIAkJCSJod21vbl9kZXZpY2VfdW5yZWdpc3RlcigpIGZhaWxlZDogYmFkIGNsYXNzIElEIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IGQ3YTk0MDEuLjA2ZGY5MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAKQEAgLTE5NCwxMCArMTk1LDEwIEBACiBzdHJ1Y3QgaXQ4N19kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAllbnVtIGNoaXBzIHR5cGU7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOwkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KIApAQCAtMjI0LDkgKzIyNSw4IEBACiBzdGF0aWMgaW50IGl0ODdfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKTsKIHN0YXRpYyBpbnQgaXQ4N19kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCi1zdGF0aWMgaW50IGl0ODdfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWdpc3Rlcik7Ci1zdGF0aWMgaW50IGl0ODdfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnaXN0ZXIsCi0JCQl1OCB2YWx1ZSk7CitzdGF0aWMgaW50IGl0ODdfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOworc3RhdGljIGludCBpdDg3X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpOwogc3RhdGljIHN0cnVjdCBpdDg3X2RhdGEgKml0ODdfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpdDg3X2NoZWNrX3B3bShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyB2b2lkIGl0ODdfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IGl0ODdfZGF0YSAqZGF0YSk7CkBAIC0yOTAsMTEgKzI5MCwxMSBAQAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9taW5bbnJdID0gSU5fVE9fUkVHKHZhbCk7CiAJaXQ4N193cml0ZV92YWx1ZShjbGllbnQsIElUODdfUkVHX1ZJTl9NSU4obnIpLCAKIAkJCWRhdGEtPmluX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2V0X2luX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMzA3LDExICszMDcsMTEgQEAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWF4W25yXSA9IElOX1RPX1JFRyh2YWwpOwogCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19WSU5fTUFYKG5yKSwgCiAJCQlkYXRhLT5pbl9tYXhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzgxLDEwICszODEsMTAgQEAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfaGlnaFtucl0gPSBURU1QX1RPX1JFRyh2YWwpOwogCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19URU1QX0hJR0gobnIpLCBkYXRhLT50ZW1wX2hpZ2hbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtMzk3LDEwICszOTcsMTAgQEAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfbG93W25yXSA9IFRFTVBfVE9fUkVHKHZhbCk7CiAJaXQ4N193cml0ZV92YWx1ZShjbGllbnQsIElUODdfUkVHX1RFTVBfTE9XKG5yKSwgZGF0YS0+dGVtcF9sb3dbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KICNkZWZpbmUgc2hvd190ZW1wX29mZnNldChvZmZzZXQpCQkJCQlcCkBAIC00NDAsNyArNDQwLDcgQEAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJZGF0YS0+c2Vuc29yICY9IH4oMSA8PCBucik7CiAJZGF0YS0+c2Vuc29yICY9IH4oOCA8PCBucik7CkBAIC00NTAsMTEgKzQ1MCwxMSBAQAogCWVsc2UgaWYgKHZhbCA9PSAyKQogCSAgICBkYXRhLT5zZW5zb3IgfD0gOCA8PCBucjsKIAllbHNlIGlmICh2YWwgIT0gMCkgewotCQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19URU1QX0VOQUJMRSwgZGF0YS0+c2Vuc29yKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KICNkZWZpbmUgc2hvd19zZW5zb3Jfb2Zmc2V0KG9mZnNldCkJCQkJCVwKQEAgLTUyNCw3ICs1MjQsNyBAQAogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCXU4IHJlZyA9IGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX0ZBTl9ESVYpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlzd2l0Y2ggKG5yKSB7CiAJY2FzZSAwOiBkYXRhLT5mYW5fZGl2W25yXSA9IHJlZyAmIDB4MDc7IGJyZWFrOwogCWNhc2UgMTogZGF0YS0+ZmFuX2Rpdltucl0gPSAocmVnID4+IDMpICYgMHgwNzsgYnJlYWs7CkBAIC01MzMsNyArNTMzLDcgQEAKIAogCWRhdGEtPmZhbl9taW5bbnJdID0gRkFOX1RPX1JFRyh2YWwsIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOwogCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fTUlOKG5yKSwgZGF0YS0+ZmFuX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2V0X2Zhbl9kaXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTU0OCw3ICs1NDgsNyBAQAogCWludCBpLCBtaW5bM107CiAJdTggb2xkOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlvbGQgPSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fRElWKTsKIAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCkBAIC01NzYsNyArNTc2LDcgQEAKIAkJZGF0YS0+ZmFuX21pbltpXT1GQU5fVE9fUkVHKG1pbltpXSwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbaV0pKTsKIAkJaXQ4N193cml0ZV92YWx1ZShjbGllbnQsIElUODdfUkVHX0ZBTl9NSU4oaSksIGRhdGEtPmZhbl9taW5baV0pOwogCX0KLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNldF9wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTU4OSw3ICs1ODksNyBAQAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodmFsID09IDApIHsKIAkJaW50IHRtcDsKQEAgLTYwNiwxMSArNjA2LDExIEBACiAJCS8qIHNldCBzYXZlZCBwd20gdmFsdWUsIGNsZWFyIEZBTl9DVExYIFBXTSBtb2RlIGJpdCAqLwogCQlpdDg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfUFdNKG5yKSwgUFdNX1RPX1JFRyhkYXRhLT5tYW51YWxfcHdtX2N0bFtucl0pKTsKIAl9IGVsc2UgewotCQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdCBzZXRfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC02MjYsMTEgKzYyNiwxMSBAQAogCWlmICh2YWwgPCAwIHx8IHZhbCA+IDI1NSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPm1hbnVhbF9wd21fY3RsW25yXSA9IHZhbDsKIAlpZiAoZGF0YS0+ZmFuX21haW5fY3RybCAmICgxIDw8IG5yKSkKIAkJaXQ4N193cml0ZV92YWx1ZShjbGllbnQsIElUODdfUkVHX1BXTShuciksIFBXTV9UT19SRUcoZGF0YS0+bWFudWFsX3B3bV9jdGxbbnJdKSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTc3Niw3ICs3NzYsNyBAQAogCiAJbmV3X2NsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJaWYgKGlzX2lzYSkKLQkJaW5pdF9NVVRFWCgmZGF0YS0+bG9jayk7CisJCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwogCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKIAluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKIAluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKQEAgLTgyMyw3ICs4MjMsNyBAQAogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dHlwZSA9IGtpbmQ7CiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC05NTAsMTAgKzk1MCwxMCBAQAogCiAJaW50IHJlczsKIAlpZiAoaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KSkgewotCQlkb3duKCZkYXRhLT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIElUODdfQUREUl9SRUdfT0ZGU0VUKTsKIAkJcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgSVQ4N19EQVRBX1JFR19PRkZTRVQpOwotCQl1cCgmZGF0YS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCXJldHVybiByZXM7CiAJfSBlbHNlCiAJCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwpAQCAtOTY5LDEwICs5NjksMTAgQEAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlpZiAoaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KSkgewotCQlkb3duKCZkYXRhLT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIElUODdfQUREUl9SRUdfT0ZGU0VUKTsKIAkJb3V0Yl9wKHZhbHVlLCBjbGllbnQtPmFkZHIgKyBJVDg3X0RBVEFfUkVHX09GRlNFVCk7Ci0JCXVwKCZkYXRhLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCiAJCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKIAkgICAgfHwgIWRhdGEtPnZhbGlkKSB7CkBAIC0xMTYwLDcgKzExNjAsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTYzLmMgYi9kcml2ZXJzL2h3bW9uL2xtNjMuYwppbmRleCA2YjFhYTdlLi4wNzFmMGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNjMuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNjMuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKgogICogQWRkcmVzc2VzIHRvIHNjYW4KQEAgLTE1Myw3ICsxNTQsNyBAQAogc3RydWN0IGxtNjNfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KIApAQCAtMTkyLDEzICsxOTMsMTMgQEAKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+ZmFuWzFdID0gRkFOX1RPX1JFRyh2YWwpOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTYzX1JFR19UQUNIX0xJTUlUX0xTQiwKIAkJCQkgIGRhdGEtPmZhblsxXSAmIDB4RkYpOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTYzX1JFR19UQUNIX0xJTUlUX01TQiwKIAkJCQkgIGRhdGEtPmZhblsxXSA+PiA4KTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjIyLDEyICsyMjMsMTIgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+cHdtMV92YWx1ZSA9IHZhbCA8PSAwID8gMCA6CiAJCQkgICB2YWwgPj0gMjU1ID8gMiAqIGRhdGEtPnB3bTFfZnJlcSA6CiAJCQkgICAodmFsICogZGF0YS0+cHdtMV9mcmVxICogMiArIDEyNykgLyAyNTU7CiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNNjNfUkVHX1BXTV9WQUxVRSwgZGF0YS0+cHdtMV92YWx1ZSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTI1MywxMCArMjU0LDEwIEBACiAJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcDhbMV0gPSBURU1QOF9UT19SRUcodmFsKTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE02M19SRUdfTE9DQUxfSElHSCwgZGF0YS0+dGVtcDhbMV0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0yODQsMTMgKzI4NSwxMyBAQAogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcDExW25yXSA9IFRFTVAxMV9UT19SRUcodmFsKTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMl0sCiAJCQkJICBkYXRhLT50ZW1wMTFbbnJdID4+IDgpOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbKG5yIC0gMSkgKiAyICsgMV0sCiAJCQkJICBkYXRhLT50ZW1wMTFbbnJdICYgMHhmZik7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMxNCwxMSArMzE1LDExIEBACiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCWxvbmcgaHlzdDsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJaHlzdCA9IFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4WzJdKSAtIHZhbDsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE02M19SRUdfUkVNT1RFX1RDUklUX0hZU1QsCiAJCQkJICBIWVNUX1RPX1JFRyhoeXN0KSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTQyNyw3ICs0MjgsNyBAQAogCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCAibG02MyIsIEkyQ19OQU1FX1NJWkUpOwogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQpAQCAtNTMwLDcgKzUzMSw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopIHx8ICFkYXRhLT52YWxpZCkgewogCQlpZiAoZGF0YS0+Y29uZmlnICYgMHgwNCkgeyAvKiB0YWNob21ldGVyIGVuYWJsZWQgICovCkBAIC01ODIsNyArNTgzLDcgQEAKIAkJZGF0YS0+dmFsaWQgPSAxOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gZGF0YTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03NS5jIGIvZHJpdmVycy9od21vbi9sbTc1LmMKaW5kZXggNzRjYTJjOC4uZmMyNWI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTc1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTc1LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAibG03NS5oIgogCiAKQEAgLTQ3LDcgKzQ4LDcgQEAKIHN0cnVjdCBsbTc1X2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50CWNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZQl1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCXVwZGF0ZV9sb2NrOwogCWNoYXIJCQl2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcJCWxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCXUxNgkJCXRlbXBfaW5wdXQ7CS8qIFJlZ2lzdGVyIHZhbHVlcyAqLwpAQCAtOTEsMTAgKzkyLDEwIEBACiAJc3RydWN0IGxtNzVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwlcCiAJaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCVwKIAkJCQkJCQkJXAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJXAorCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJXAogCWRhdGEtPnZhbHVlID0gTE03NV9URU1QX1RPX1JFRyh0ZW1wKTsJCQlcCiAJbG03NV93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+dmFsdWUpOwkJXAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCQlcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCQlcCiAJcmV0dXJuIGNvdW50OwkJCQkJCVwKIH0KIHNldCh0ZW1wX21heCwgTE03NV9SRUdfVEVNUF9PUyk7CkBAIC0xODgsNyArMTg5LDcgQEAKIAkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyBhbmQgcHV0IGl0IGludG8gdGhlIGdsb2JhbCBsaXN0ICovCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKQEAgLTI2NCw3ICsyNjUsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGxtNzVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQogCSAgICB8fCAhZGF0YS0+dmFsaWQpIHsKQEAgLTI3Nyw3ICsyNzgsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc3LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzcuYwppbmRleCBkZjllMDJhLi40NTljYzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzcuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIEkyQ19DTElFTlRfRU5EIH07CkBAIC01MSw3ICs1Miw3IEBACiBzdHJ1Y3QgbG03N19kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudAljbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBzZW1hcGhvcmUJdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4CQl1cGRhdGVfbG9jazsKIAljaGFyCQkJdmFsaWQ7CiAJdW5zaWduZWQgbG9uZwkJbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAJaW50CQkJdGVtcF9pbnB1dDsJLyogVGVtcGVyYXR1cmVzICovCkBAIC0xMzksMTAgKzE0MCwxMCBAQAogCXN0cnVjdCBsbTc3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsJCQlcCiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQkJXAogCQkJCQkJCQkJCVwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCQkJXAorCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJCQlcCiAJZGF0YS0+dmFsdWUgPSB2YWw7CQkJCVwKIAlsbTc3X3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVnLCBMTTc3X1RFTVBfVE9fUkVHKGRhdGEtPnZhbHVlKSk7CQlcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsJCQkJCQkJXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwkJCQkJXAogCXJldHVybiBjb3VudDsJCQkJCQkJCVwKIH0KIApAQCAtMTU3LDExICsxNTgsMTEgQEAKIAlzdHJ1Y3QgbG03N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9oeXN0ID0gZGF0YS0+dGVtcF9jcml0IC0gdmFsOwogCWxtNzdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTc3X1JFR19URU1QX0hZU1QsCiAJCQkgTE03N19URU1QX1RPX1JFRyhkYXRhLT50ZW1wX2h5c3QpKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTczLDcgKzE3NCw3IEBACiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAlpbnQgb2xkY3JpdGh5c3Q7CiAJCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlvbGRjcml0aHlzdCA9IGRhdGEtPnRlbXBfY3JpdCAtIGRhdGEtPnRlbXBfaHlzdDsKIAlkYXRhLT50ZW1wX2NyaXQgPSB2YWw7CiAJZGF0YS0+dGVtcF9oeXN0ID0gZGF0YS0+dGVtcF9jcml0IC0gb2xkY3JpdGh5c3Q7CkBAIC0xODEsNyArMTgyLDcgQEAKIAkJCSBMTTc3X1RFTVBfVE9fUkVHKGRhdGEtPnRlbXBfY3JpdCkpOwogCWxtNzdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTc3X1JFR19URU1QX0hZU1QsCiAJCQkgTE03N19URU1QX1RPX1JFRyhkYXRhLT50ZW1wX2h5c3QpKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzA2LDcgKzMwNyw3IEBACiAJLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgYW5kIHB1dCBpdCBpbnRvIHRoZSBnbG9iYWwgbGlzdCAqLwogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC0zODAsNyArMzgxLDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBsbTc3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKIAkgICAgfHwgIWRhdGEtPnZhbGlkKSB7CkBAIC00MDYsNyArNDA3LDcgQEAKIAkJZGF0YS0+dmFsaWQgPSAxOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gZGF0YTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03OC5jIGIvZHJpdmVycy9od21vbi9sbTc4LmMKaW5kZXggZTQwNDAwMS4uOTRiZTNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTc4LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTc4LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXZpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCkBAIC0xMzEsMTAgKzEzMiwxMCBAQAogc3RydWN0IGxtNzhfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJZW51bSBjaGlwcyB0eXBlOwogCi0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAKQEAgLTE1Nyw4ICsxNTgsOCBAQAogc3RhdGljIGludCBsbTc4X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7CiBzdGF0aWMgaW50IGxtNzhfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAotc3RhdGljIGludCBsbTc4X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnaXN0ZXIpOwotc3RhdGljIGludCBsbTc4X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZ2lzdGVyLCB1OCB2YWx1ZSk7CitzdGF0aWMgaW50IGxtNzhfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOworc3RhdGljIGludCBsbTc4X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpOwogc3RhdGljIHN0cnVjdCBsbTc4X2RhdGEgKmxtNzhfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbG03OF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIApAQCAtMjA3LDEwICsyMDgsMTAgQEAKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWluW25yXSA9IElOX1RPX1JFRyh2YWwpOwogCWxtNzhfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTc4X1JFR19JTl9NSU4obnIpLCBkYXRhLT5pbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjIxLDEwICsyMjIsMTAgQEAKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWF4W25yXSA9IElOX1RPX1JFRyh2YWwpOwogCWxtNzhfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTc4X1JFR19JTl9NQVgobnIpLCBkYXRhLT5pbl9tYXhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIAkKQEAgLTI4OCwxMCArMjg5LDEwIEBACiAJc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9vdmVyID0gVEVNUF9UT19SRUcodmFsKTsKIAlsbTc4X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE03OF9SRUdfVEVNUF9PVkVSLCBkYXRhLT50ZW1wX292ZXIpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMDcsMTAgKzMwOCwxMCBAQAogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfaHlzdCA9IFRFTVBfVE9fUkVHKHZhbCk7CiAJbG03OF93cml0ZV92YWx1ZShjbGllbnQsIExNNzhfUkVHX1RFTVBfSFlTVCwgZGF0YS0+dGVtcF9oeXN0KTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzQyLDEwICszNDMsMTAgQEAKIAlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+ZmFuX21pbltucl0gPSBGQU5fVE9fUkVHKHZhbCwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAJbG03OF93cml0ZV92YWx1ZShjbGllbnQsIExNNzhfUkVHX0ZBTl9NSU4obnIpLCBkYXRhLT5mYW5fbWluW25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTM2OCw3ICszNjksNyBAQAogCXVuc2lnbmVkIGxvbmcgbWluOwogCXU4IHJlZzsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJbWluID0gRkFOX0ZST01fUkVHKGRhdGEtPmZhbl9taW5bbnJdLAogCQkJICAgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAKQEAgLTM4MCw3ICszODEsNyBAQAogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFuX2RpdiB2YWx1ZSAlbGQgbm90ICIKIAkJCSJzdXBwb3J0ZWQuIENob29zZSBvbmUgb2YgMSwgMiwgNCBvciA4IVxuIiwgdmFsKTsKLQkJdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzk4LDcgKzM5OSw3IEBACiAJZGF0YS0+ZmFuX21pbltucl0gPQogCQlGQU5fVE9fUkVHKG1pbiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAJbG03OF93cml0ZV92YWx1ZShjbGllbnQsIExNNzhfUkVHX0ZBTl9NSU4obnIpLCBkYXRhLT5mYW5fbWluW25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTU0OCw3ICs1NDksNyBAQAogCiAJbmV3X2NsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJaWYgKGlzX2lzYSkKLQkJaW5pdF9NVVRFWCgmZGF0YS0+bG9jayk7CisJCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwogCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKIAluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKIAluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKQEAgLTU5OCw3ICs1OTksNyBAQAogCWRhdGEtPnR5cGUgPSBraW5kOwogCiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC02OTcsMTAgKzY5OCwxMCBAQAogCWludCByZXM7CiAJaWYgKGkyY19pc19pc2FfY2xpZW50KGNsaWVudCkpIHsKIAkJc3RydWN0IGxtNzhfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCQlkb3duKCZkYXRhLT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIExNNzhfQUREUl9SRUdfT0ZGU0VUKTsKIAkJcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgTE03OF9EQVRBX1JFR19PRkZTRVQpOwotCQl1cCgmZGF0YS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCXJldHVybiByZXM7CiAJfSBlbHNlCiAJCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwpAQCAtNzE3LDEwICs3MTgsMTAgQEAKIHsKIAlpZiAoaTJjX2lzX2lzYV9jbGllbnQoY2xpZW50KSkgewogCQlzdHJ1Y3QgbG03OF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JCWRvd24oJmRhdGEtPmxvY2spOworCQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAkJb3V0Yl9wKHJlZywgY2xpZW50LT5hZGRyICsgTE03OF9BRERSX1JFR19PRkZTRVQpOwogCQlvdXRiX3AodmFsdWUsIGNsaWVudC0+YWRkciArIExNNzhfREFUQV9SRUdfT0ZGU0VUKTsKLQkJdXAoJmRhdGEtPmxvY2spOworCQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UKIAkJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKQEAgLTc0Miw3ICs3NDMsNyBAQAogCXN0cnVjdCBsbTc4X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKIAkgICAgfHwgIWRhdGEtPnZhbGlkKSB7CkBAIC03ODYsNyArNzg3LDcgQEAKIAkJZGF0YS0+ZmFuX2RpdlsyXSA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTgwLmMgYi9kcml2ZXJzL2h3bW9uL2xtODAuYwppbmRleCBjOWE3Y2RlLi5mNzIxMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODAuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsCkBAIC0xMDgsNyArMTA5LDcgQEAKIHN0cnVjdCBsbTgwX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAKQEAgLTE5MSwxMCArMTkyLDEwIEBACiAJc3RydWN0IGxtODBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOyBcCiAgXAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTtcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spO1wKIAlkYXRhLT52YWx1ZSA9IElOX1RPX1JFRyh2YWwpOyBcCiAJbG04MF93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+dmFsdWUpOyBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTtcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7XAogCXJldHVybiBjb3VudDsgXAogfQogc2V0X2luKG1pbjAsIGluX21pblswXSwgTE04MF9SRUdfSU5fTUlOKDApKTsKQEAgLTI0MSwxMCArMjQyLDEwIEBACiAJc3RydWN0IGxtODBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsgXAogIFwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7XAorCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTtcCiAJZGF0YS0+dmFsdWUgPSBGQU5fVE9fUkVHKHZhbCwgRElWX0ZST01fUkVHKGRhdGEtPmRpdikpOyBcCiAJbG04MF93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+dmFsdWUpOyBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTtcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7XAogCXJldHVybiBjb3VudDsgXAogfQogc2V0X2ZhbihtaW4xLCBmYW5fbWluWzBdLCBMTTgwX1JFR19GQU5fTUlOKDEpLCBmYW5fZGl2WzBdKTsKQEAgLTI2Myw3ICsyNjQsNyBAQAogCXU4IHJlZzsKIAogCS8qIFNhdmUgZmFuX21pbiAqLwotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJbWluID0gRkFOX0ZST01fUkVHKGRhdGEtPmZhbl9taW5bbnJdLAogCQkJICAgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAKQEAgLTI3NSw3ICsyNzYsNyBAQAogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFuX2RpdiB2YWx1ZSAlbGQgbm90ICIKIAkJCSJzdXBwb3J0ZWQuIENob29zZSBvbmUgb2YgMSwgMiwgNCBvciA4IVxuIiwgdmFsKTsKLQkJdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjg2LDcgKzI4Nyw3IEBACiAJLyogUmVzdG9yZSBmYW5fbWluICovCiAJZGF0YS0+ZmFuX21pbltucl0gPSBGQU5fVE9fUkVHKG1pbiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAJbG04MF93cml0ZV92YWx1ZShjbGllbnQsIExNODBfUkVHX0ZBTl9NSU4obnIgKyAxKSwgZGF0YS0+ZmFuX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0zMjUsMTAgKzMyNiwxMCBAQAogCXN0cnVjdCBsbTgwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7IFwKICBcCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJZGF0YS0+dmFsdWUgPSBURU1QX0xJTUlUX1RPX1JFRyh2YWwpOyBcCiAJbG04MF93cml0ZV92YWx1ZShjbGllbnQsIHJlZywgZGF0YS0+dmFsdWUpOyBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCiB9CiBzZXRfdGVtcChob3RfbWF4LCB0ZW1wX2hvdF9tYXgsIExNODBfUkVHX1RFTVBfSE9UX01BWCk7CkBAIC00MzcsNyArNDM4LDcgQEAKIAkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyBhbmQgcHV0IGl0IGludG8gdGhlIGdsb2JhbCBsaXN0ICovCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKQEAgLTU0NSw3ICs1NDYsNyBAQAogCXN0cnVjdCBsbTgwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyAyICogSFopIHx8ICFkYXRhLT52YWxpZCkgewogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGxtODAgdXBkYXRlXG4iKTsKQEAgLTU4NSw3ICs1ODYsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTgzLmMgYi9kcml2ZXJzL2h3bW9uL2xtODMuYwppbmRleCAyNmRmYTllLi5hYWM0ZWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODMuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKgogICogQWRkcmVzc2VzIHRvIHNjYW4KQEAgLTEzOSw3ICsxNDAsNyBAQAogc3RydWN0IGxtODNfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KIApAQCAtMTcxLDExICsxNzIsMTEgQEAKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAJaW50IG5yID0gYXR0ci0+aW5kZXg7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBbbnJdID0gVEVNUF9UT19SRUcodmFsKTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE04M19SRUdfV19ISUdIW25yIC0gNF0sCiAJCQkJICBkYXRhLT50ZW1wW25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMwMCw3ICszMDEsNyBAQAogCS8qIFdlIGNhbiBmaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyAqLwogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC0zNzMsNyArMzc0LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBsbTgzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpIHx8ICFkYXRhLT52YWxpZCkgewogCQlpbnQgbnI7CkBAIC0zOTMsNyArMzk0LDcgQEAKIAkJZGF0YS0+dmFsaWQgPSAxOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gZGF0YTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggNzM4OWEwMS4uMzQyZTk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXZpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCAweDJlLCBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtMzMxLDEwICszMzIsMTAgQEAKIHN0cnVjdCBsbTg1X2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCWVudW0gY2hpcHMgdHlwZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWludCB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF9yZWFkaW5nOwkvKiBJbiBqaWZmaWVzICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X2NvbmZpZzsJLyogSW4gamlmZmllcyAqLwpAQCAtMzczLDggKzM3NCw4IEBACiAJCQlpbnQga2luZCk7CiBzdGF0aWMgaW50IGxtODVfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAotc3RhdGljIGludCBsbTg1X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnaXN0ZXIpOwotc3RhdGljIGludCBsbTg1X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZ2lzdGVyLCBpbnQgdmFsdWUpOworc3RhdGljIGludCBsbTg1X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKTsKK3N0YXRpYyBpbnQgbG04NV93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIGludCB2YWx1ZSk7CiBzdGF0aWMgc3RydWN0IGxtODVfZGF0YSAqbG04NV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBsbTg1X2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCkBAIC00MDcsMTAgKzQwOCwxMCBAQAogCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmZhbl9taW5bbnJdID0gRkFOX1RPX1JFRyh2YWwpOwogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19GQU5fTUlOKG5yKSwgZGF0YS0+ZmFuX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00OTksMTAgKzUwMCwxMCBAQAogCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnB3bVtucl0gPSBQV01fVE9fUkVHKHZhbCk7CiAJbG04NV93cml0ZV92YWx1ZShjbGllbnQsIExNODVfUkVHX1BXTShuciksIGRhdGEtPnB3bVtucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2hvd19wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCkBAIC01NTksMTAgKzU2MCwxMCBAQAogCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX21pbltucl0gPSBJTlNfVE9fUkVHKG5yLCB2YWwpOwogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19JTl9NSU4obnIpLCBkYXRhLT5pbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNob3dfaW5fbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCkBAIC01NzcsMTAgKzU3OCwxMCBAQAogCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX21heFtucl0gPSBJTlNfVE9fUkVHKG5yLCB2YWwpOwogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19JTl9NQVgobnIpLCBkYXRhLT5pbl9tYXhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KICNkZWZpbmUgc2hvd19pbl9yZWcob2Zmc2V0KQkJCQkJCVwKQEAgLTY0MCwxMCArNjQxLDEwIEBACiAJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9taW5bbnJdID0gVEVNUF9UT19SRUcodmFsKTsKIAlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfVEVNUF9NSU4obnIpLCBkYXRhLT50ZW1wX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQpAQCAtNjU4LDEwICs2NTksMTAgQEAKIAlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwkKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9tYXhbbnJdID0gVEVNUF9UT19SRUcodmFsKTsKIAlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfVEVNUF9NQVgobnIpLCBkYXRhLT50ZW1wX21heFtucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogI2RlZmluZSBzaG93X3RlbXBfcmVnKG9mZnNldCkJCQkJCQlcCkBAIC03MTMsMTIgKzcxNCwxMiBAQAogCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7ICAgCiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmF1dG9mYW5bbnJdLmNvbmZpZyA9IChkYXRhLT5hdXRvZmFuW25yXS5jb25maWcgJiAofjB4ZTApKQogCQl8IFpPTkVfVE9fUkVHKHZhbCkgOwogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX0NPTkZJRyhuciksCiAJCWRhdGEtPmF1dG9mYW5bbnJdLmNvbmZpZyk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9hdXRvX3B3bV9taW4oc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKQEAgLTczMywxMSArNzM0LDExIEBACiAJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+YXV0b2Zhbltucl0ubWluX3B3bSA9IFBXTV9UT19SRUcodmFsKTsKIAlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9NSU5QV00obnIpLAogCQlkYXRhLT5hdXRvZmFuW25yXS5taW5fcHdtKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2F1dG9fcHdtX21pbmN0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQpAQCAtNzUyLDcgKzc1Myw3IEBACiAJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+YXV0b2Zhbltucl0ubWluX29mZiA9IHZhbDsKIAlsbTg1X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04NV9SRUdfQUZBTl9TUElLRTEsIGRhdGEtPnNtb290aFswXQogCQl8IGRhdGEtPnN5bmNwd20zCkBAIC03NjAsNyArNzYxLDcgQEAKIAkJfCAoZGF0YS0+YXV0b2ZhblsxXS5taW5fb2ZmID8gMHg0MCA6IDApCiAJCXwgKGRhdGEtPmF1dG9mYW5bMl0ubWluX29mZiA/IDB4ODAgOiAwKQogCSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9hdXRvX3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCkBAIC03NzUsMTMgKzc3NiwxMyBAQAogCXN0cnVjdCBsbTg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmF1dG9mYW5bbnJdLmZyZXEgPSBGUkVRX1RPX1JFRyh2YWwpOwogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKG5yKSwKIAkJKGRhdGEtPnpvbmVbbnJdLnJhbmdlIDw8IDQpCiAJCXwgZGF0YS0+YXV0b2Zhbltucl0uZnJlcQogCSk7IAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogI2RlZmluZSBwd21fYXV0byhvZmZzZXQpCQkJCQkJXApAQCAtODU3LDcgKzg1OCw3IEBACiAJaW50IG1pbjsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCW1pbiA9IFRFTVBfRlJPTV9SRUcoZGF0YS0+em9uZVtucl0ubGltaXQpOwogCWRhdGEtPnpvbmVbbnJdLm9mZl9kZXNpcmVkID0gVEVNUF9UT19SRUcodmFsKTsKIAlkYXRhLT56b25lW25yXS5oeXN0ID0gSFlTVF9UT19SRUcobWluIC0gdmFsKTsKQEAgLTg3MSw3ICs4NzIsNyBAQAogCQkJKGRhdGEtPnpvbmVbMl0uaHlzdCA8PCA0KQogCQkpOwogCX0KLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9hdXRvX3RlbXBfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCkBAIC04ODYsNyArODg3LDcgQEAKIAlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT56b25lW25yXS5saW1pdCA9IFRFTVBfVE9fUkVHKHZhbCk7CiAJbG04NV93cml0ZV92YWx1ZShjbGllbnQsIExNODVfUkVHX0FGQU5fTElNSVQobnIpLAogCQlkYXRhLT56b25lW25yXS5saW1pdCk7CkBAIC05MTMsNyArOTE0LDcgQEAKIAkJCShkYXRhLT56b25lWzJdLmh5c3QgPDwgNCkKIAkJKTsKIAl9Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfYXV0b190ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQpAQCAtOTMwLDcgKzkzMSw3IEBACiAJaW50IG1pbjsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCW1pbiA9IFRFTVBfRlJPTV9SRUcoZGF0YS0+em9uZVtucl0ubGltaXQpOwogCWRhdGEtPnpvbmVbbnJdLm1heF9kZXNpcmVkID0gVEVNUF9UT19SRUcodmFsKTsKIAlkYXRhLT56b25lW25yXS5yYW5nZSA9IFJBTkdFX1RPX1JFRygKQEAgLTkzOCw3ICs5MzksNyBAQAogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX1JBTkdFKG5yKSwKIAkJKChkYXRhLT56b25lW25yXS5yYW5nZSAmIDB4MGYpIDw8IDQpCiAJCXwgKGRhdGEtPmF1dG9mYW5bbnJdLmZyZXEgJiAweDA3KSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfYXV0b190ZW1wX2NyaXQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKQEAgLTk1MywxMSArOTU0LDExIEBACiAJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+em9uZVtucl0uY3JpdGljYWwgPSBURU1QX1RPX1JFRyh2YWwpOwogCWxtODVfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg1X1JFR19BRkFOX0NSSVRJQ0FMKG5yKSwKIAkJZGF0YS0+em9uZVtucl0uY3JpdGljYWwpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogI2RlZmluZSB0ZW1wX2F1dG8ob2Zmc2V0KQkJCQkJCVwKQEAgLTExNDksNyArMTE1MCw3IEBACiAJLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgKi8KIAlkYXRhLT50eXBlID0ga2luZDsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKQEAgLTEzNjgsNyArMTM2OSw3IEBACiAJc3RydWN0IGxtODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICggIWRhdGEtPnZhbGlkIHx8CiAJICAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfcmVhZGluZyArIExNODVfREFUQV9JTlRFUlZBTCkgKSB7CkBAIC0xNTcxLDcgKzE1NzIsNyBAQAogCiAJZGF0YS0+dmFsaWQgPSAxOwogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTg3LmMgYi9kcml2ZXJzL2h3bW9uL2xtODcuYwppbmRleCA2YmEzNGMzLi5lMjI5ZGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODcuYwpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyoKICAqIEFkZHJlc3NlcyB0byBzY2FuCkBAIC0xNzYsNyArMTc3LDcgQEAKIHN0cnVjdCBsbTg3X2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBJbiBqaWZmaWVzICovCiAKQEAgLTI1MywxMSArMjU0LDExIEBACiAJc3RydWN0IGxtODdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWluW25yXSA9IElOX1RPX1JFRyh2YWwsIGRhdGEtPmluX3NjYWxlW25yXSk7CiAJbG04N193cml0ZV92YWx1ZShjbGllbnQsIG5yPDYgPyBMTTg3X1JFR19JTl9NSU4obnIpIDoKIAkJCSBMTTg3X1JFR19BSU5fTUlOKG5yLTYpLCBkYXRhLT5pbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfaW5fbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBpbnQgbnIpCkBAIC0yNjYsMTEgKzI2NywxMSBAQAogCXN0cnVjdCBsbTg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX21heFtucl0gPSBJTl9UT19SRUcodmFsLCBkYXRhLT5pbl9zY2FsZVtucl0pOwogCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBucjw2ID8gTE04N19SRUdfSU5fTUFYKG5yKSA6CiAJCQkgTE04N19SRUdfQUlOX01BWChuci02KSwgZGF0YS0+aW5fbWF4W25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIH0KIAogI2RlZmluZSBzZXRfaW4ob2Zmc2V0KSBcCkBAIC0zMjcsMTAgKzMyOCwxMCBAQAogCXN0cnVjdCBsbTg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfbG93W25yXSA9IFRFTVBfVE9fUkVHKHZhbCk7CiAJbG04N193cml0ZV92YWx1ZShjbGllbnQsIExNODdfUkVHX1RFTVBfTE9XW25yXSwgZGF0YS0+dGVtcF9sb3dbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfdGVtcF9oaWdoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBpbnQgbnIpCkBAIC0zMzksMTAgKzM0MCwxMCBAQAogCXN0cnVjdCBsbTg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfaGlnaFtucl0gPSBURU1QX1RPX1JFRyh2YWwpOwogCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19URU1QX0hJR0hbbnJdLCBkYXRhLT50ZW1wX2hpZ2hbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogfQogCiAjZGVmaW5lIHNldF90ZW1wKG9mZnNldCkgXApAQCAtNDExLDExICs0MTIsMTEgQEAKIAlzdHJ1Y3QgbG04N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5mYW5fbWluW25yXSA9IEZBTl9UT19SRUcodmFsLAogCQkJICAgIEZBTl9ESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKIAlsbTg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfRkFOX01JTihuciksIGRhdGEtPmZhbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogfQogCiAvKiBOb3RlOiB3ZSBzYXZlIGFuZCByZXN0b3JlIHRoZSBmYW4gbWluaW11bSBoZXJlLCBiZWNhdXNlIGl0cyB2YWx1ZSBpcwpAQCAtNDMxLDcgKzQzMiw3IEBACiAJdW5zaWduZWQgbG9uZyBtaW47CiAJdTggcmVnOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAltaW4gPSBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltucl0sCiAJCQkgICBGQU5fRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAKQEAgLTQ0MSw3ICs0NDIsNyBAQAogCWNhc2UgNDogZGF0YS0+ZmFuX2Rpdltucl0gPSAyOyBicmVhazsKIAljYXNlIDg6IGRhdGEtPmZhbl9kaXZbbnJdID0gMzsgYnJlYWs7CiAJZGVmYXVsdDoKLQkJdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDU5LDcgKzQ2MCw3IEBACiAJZGF0YS0+ZmFuX21pbltucl0gPSBGQU5fVE9fUkVHKG1pbiwgdmFsKTsKIAlsbTg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgTE04N19SRUdfRkFOX01JTihuciksCiAJCQkgZGF0YS0+ZmFuX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC01MjIsMTAgKzUyMywxMCBAQAogCXN0cnVjdCBsbTg3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmFvdXQgPSBBT1VUX1RPX1JFRyh2YWwpOwogCWxtODdfd3JpdGVfdmFsdWUoY2xpZW50LCBMTTg3X1JFR19BT1VULCBkYXRhLT5hb3V0KTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihhb3V0X291dHB1dCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYW91dCwgc2V0X2FvdXQpOwpAQCAtNTg5LDcgKzU5MCw3IEBACiAJLyogV2UgY2FuIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzICovCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCAibG04NyIsIEkyQ19OQU1FX1NJWkUpOwogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQpAQCAtNzQ0LDcgKzc0NSw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgbG04N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopIHx8ICFkYXRhLT52YWxpZCkgewogCQlpbnQgaSwgajsKQEAgLTgxMyw3ICs4MTQsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTkwLmMgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwppbmRleCA1Njc5NDY0NC4uZDllZWFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTkwLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTkwLmMKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyoKICAqIEFkZHJlc3NlcyB0byBzY2FuCkBAIC0yMDEsNyArMjAyLDcgQEAKIHN0cnVjdCBsbTkwX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBpbiBqaWZmaWVzICovCiAJaW50IGtpbmQ7CkBAIC0yNDcsMTMgKzI0OCwxMyBAQAogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJaWYgKGRhdGEtPmtpbmQgPT0gYWR0NzQ2MSkKIAkJZGF0YS0+dGVtcDhbbnJdID0gVEVNUDFfVE9fUkVHX0FEVDc0NjEodmFsKTsKIAllbHNlCiAJCWRhdGEtPnRlbXA4W25yXSA9IFRFTVAxX1RPX1JFRyh2YWwpOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWdbbnIgLSAxXSwgZGF0YS0+dGVtcDhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjgxLDcgKzI4Miw3IEBACiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCWludCBuciA9IGF0dHItPmluZGV4OwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQogCQlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDJfVE9fUkVHX0FEVDc0NjEodmFsKTsKIAllbHNlCkBAIC0yOTAsNyArMjkxLDcgQEAKIAkJCQkgIGRhdGEtPnRlbXAxMVtucl0gPj4gOCk7CiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDIgKyAxXSwKIAkJCQkgIGRhdGEtPnRlbXAxMVtucl0gJiAweGZmKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzExLDExICszMTIsMTEgQEAKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAJbG9uZyBoeXN0OwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAloeXN0ID0gVEVNUDFfRlJPTV9SRUcoZGF0YS0+dGVtcDhbM10pIC0gdmFsOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTkwX1JFR19XX1RDUklUX0hZU1QsCiAJCQkJICBIWVNUX1RPX1JFRyhoeXN0KSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTU1OCw3ICs1NTksNyBAQAogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dmFsaWQgPSAwOwogCWRhdGEtPmtpbmQgPSBraW5kOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC02NDYsNyArNjQ3LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBsbTkwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpIHx8ICFkYXRhLT52YWxpZCkgewogCQl1OCBvbGRoLCBuZXdoLCBsOwpAQCAtNjkyLDcgKzY5Myw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTIuYyBiL2RyaXZlcnMvaHdtb24vbG05Mi5jCmluZGV4IGIwYzRjYjcuLjE5N2Y3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05Mi5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05Mi5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBUaGUgTE05MiBhbmQgTUFYNjYzNSBoYXZlIDIgdHdvLXN0YXRlIHBpbnMgZm9yIGFkZHJlc3Mgc2VsZWN0aW9uLAogICAgcmVzdWx0aW5nIGluIDQgcG9zc2libGUgYWRkcmVzc2VzLiAqLwpAQCAtOTYsNyArOTcsNyBAQAogc3RydWN0IGxtOTJfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KIApAQCAtMTE0LDcgKzExNSw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgbG05Ml9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopCiAJIHx8ICFkYXRhLT52YWxpZCkgewpAQCAtMTM0LDcgKzEzNSw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CkBAIC0xNTgsMTAgKzE1OSwxMCBAQAogCXN0cnVjdCBsbTkyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsgXAogIFwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlkYXRhLT52YWx1ZSA9IFRFTVBfVE9fUkVHKHZhbCk7IFwKIAlpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgcmVnLCBzd2FiMTYoZGF0YS0+dmFsdWUpKTsgXAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAogCXJldHVybiBjb3VudDsgXAogfQogc2V0X3RlbXAodGVtcDFfY3JpdCwgTE05Ml9SRUdfVEVNUF9DUklUKTsKQEAgLTE5NCwxMSArMTk1LDExIEBACiAJc3RydWN0IGxtOTJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcDFfaHlzdCA9IFRFTVBfRlJPTV9SRUcoZGF0YS0+dGVtcDFfY3JpdCkgLSB2YWw7CiAJaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIExNOTJfUkVHX1RFTVBfSFlTVCwKIAkJCQkgIHN3YWIxNihURU1QX1RPX1JFRyhkYXRhLT50ZW1wMV9oeXN0KSkpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zNDgsNyArMzQ5LDcgQEAKIAkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyAqLwogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBpMmMgc3Vic3lzdGVtIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMgYi9kcml2ZXJzL2h3bW9uL21heDE2MTkuYwppbmRleCAzYWJlMzMwLi5iNDEzNWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDE2MTkuYworKysgYi9kcml2ZXJzL2h3bW9uL21heDE2MTkuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgxOCwgMHgxOSwgMHgxYSwKIAkJCQkJMHgyOSwgMHgyYSwgMHgyYiwKQEAgLTEwNCw3ICsxMDUsNyBAQAogc3RydWN0IG1heDE2MTlfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KIApAQCAtMTQxLDEwICsxNDIsMTAgQEAKIAlzdHJ1Y3QgbWF4MTYxOV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7IFwKICBcCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJZGF0YS0+dmFsdWUgPSBURU1QX1RPX1JFRyh2YWwpOyBcCiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgZGF0YS0+dmFsdWUpOyBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCiB9CiAKQEAgLTI2Miw3ICsyNjMsNyBAQAogCS8qIFdlIGNhbiBmaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyAqLwogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC0zMzAsNyArMzMxLDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBtYXgxNjE5X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpIHx8ICFkYXRhLT52YWxpZCkgewogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlVwZGF0aW5nIG1heDE2MTkgZGF0YS5cbiIpOwpAQCAtMzUzLDcgKzM1NCw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BjODczNjAuYyBiL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCmluZGV4IGYxNjFlODguLmFlMDVlNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vcGM4NzM2MC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgdTggZGV2aWQ7CkBAIC0xODMsOCArMTg0LDggQEAKIHN0cnVjdCBwYzg3MzYwX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCkBAIC0yODMsNyArMjg0LDcgQEAKIAlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJbG9uZyBmYW5fbWluID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZmFuX21pbiA9IEZBTl9UT19SRUcoZmFuX21pbiwgRkFOX0RJVl9GUk9NX1JFRyhkYXRhLT5mYW5fc3RhdHVzW2F0dHItPmluZGV4XSkpOwogCiAJLyogSWYgaXQgd291bGRuJ3QgZml0LCBjaGFuZ2UgY2xvY2sgZGl2aXNvciAqLwpAQCAtMzAwLDIzICszMDEsMzEgQEAKIAkvKiBXcml0ZSBuZXcgZGl2aWRlciwgcHJlc2VydmUgYWxhcm0gYml0cyAqLwogCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfRkFOLCBOT19CQU5LLCBQQzg3MzYwX1JFR19GQU5fU1RBVFVTKGF0dHItPmluZGV4KSwKIAkJCSAgICBkYXRhLT5mYW5fc3RhdHVzW2F0dHItPmluZGV4XSAmIDB4RjkpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc2hvd19hbmRfc2V0X2ZhbihvZmZzZXQpIFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19pbnB1dCwgU19JUlVHTywgXAotCXNob3dfZmFuX2lucHV0LCBOVUxMLCBvZmZzZXQtMSk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBcCi0Jc2hvd19mYW5fbWluLCBzZXRfZmFuX21pbiwgb2Zmc2V0LTEpOyBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfZGl2LCBTX0lSVUdPLCBcCi0Jc2hvd19mYW5fZGl2LCBOVUxMLCBvZmZzZXQtMSk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19zdGF0dXMsIFNfSVJVR08sIFwKLQlzaG93X2Zhbl9zdGF0dXMsIE5VTEwsIG9mZnNldC0xKTsKLXNob3dfYW5kX3NldF9mYW4oMSkKLXNob3dfYW5kX3NldF9mYW4oMikKLXNob3dfYW5kX3NldF9mYW4oMykKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgZmFuX2lucHV0W10gPSB7CisJU0VOU09SX0FUVFIoZmFuMV9pbnB1dCwgU19JUlVHTywgc2hvd19mYW5faW5wdXQsIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGZhbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuX2lucHV0LCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUihmYW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2Zhbl9pbnB1dCwgTlVMTCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmYW5fc3RhdHVzW10gPSB7CisJU0VOU09SX0FUVFIoZmFuMV9zdGF0dXMsIFNfSVJVR08sIHNob3dfZmFuX3N0YXR1cywgTlVMTCwgMCksCisJU0VOU09SX0FUVFIoZmFuMl9zdGF0dXMsIFNfSVJVR08sIHNob3dfZmFuX3N0YXR1cywgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoZmFuM19zdGF0dXMsIFNfSVJVR08sIHNob3dfZmFuX3N0YXR1cywgTlVMTCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmYW5fZGl2W10gPSB7CisJU0VOU09SX0FUVFIoZmFuMV9kaXYsIFNfSVJVR08sIHNob3dfZmFuX2RpdiwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIoZmFuMl9kaXYsIFNfSVJVR08sIHNob3dfZmFuX2RpdiwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoZmFuM19kaXYsIFNfSVJVR08sIHNob3dfZmFuX2RpdiwgTlVMTCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmYW5fbWluW10gPSB7CisJU0VOU09SX0FUVFIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAwKSwKKwlTRU5TT1JfQVRUUihmYW4yX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIDEpLAorCVNFTlNPUl9BVFRSKGZhbjNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluLCBzZXRfZmFuX21pbiwgMiksCit9OwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zMzUsMjEgKzM0NCwyMCBAQAogCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnB3bVthdHRyLT5pbmRleF0gPSBQV01fVE9fUkVHKHZhbCwKIAkJCSAgICAgIEZBTl9DT05GSUdfSU5WRVJUKGRhdGEtPmZhbl9jb25mLCBhdHRyLT5pbmRleCkpOwogCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfRkFOLCBOT19CQU5LLCBQQzg3MzYwX1JFR19QV00oYXR0ci0+aW5kZXgpLAogCQkJICAgIGRhdGEtPnB3bVthdHRyLT5pbmRleF0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCi0jZGVmaW5lIHNob3dfYW5kX3NldF9wd20ob2Zmc2V0KSBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0LCBTX0lXVVNSIHwgU19JUlVHTywgXAotCXNob3dfcHdtLCBzZXRfcHdtLCBvZmZzZXQtMSk7Ci1zaG93X2FuZF9zZXRfcHdtKDEpCi1zaG93X2FuZF9zZXRfcHdtKDIpCi1zaG93X2FuZF9zZXRfcHdtKDMpCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHB3bVtdID0geworCVNFTlNPUl9BVFRSKHB3bTEsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bSwgc2V0X3B3bSwgMCksCisJU0VOU09SX0FUVFIocHdtMiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAxKSwKKwlTRU5TT1JfQVRUUihwd20zLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHNldF9wd20sIDIpLAorfTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19pbl9pbnB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zODYsMTEgKzM5NCwxMSBAQAogCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX21pblthdHRyLT5pbmRleF0gPSBJTl9UT19SRUcodmFsLCBkYXRhLT5pbl92cmVmKTsKIAlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX0lOLCBhdHRyLT5pbmRleCwgUEM4NzM2NV9SRUdfSU5fTUlOLAogCQkJICAgIGRhdGEtPmluX21pblthdHRyLT5pbmRleF0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2V0X2luX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsCkBAIC00MDEsMzUgKzQwOSw2NyBAQAogCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX21heFthdHRyLT5pbmRleF0gPSBJTl9UT19SRUcodmFsLAogCQkJICAgICAgIGRhdGEtPmluX3ZyZWYpOwogCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIGF0dHItPmluZGV4LCBQQzg3MzY1X1JFR19JTl9NQVgsCiAJCQkgICAgZGF0YS0+aW5fbWF4W2F0dHItPmluZGV4XSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc2hvd19hbmRfc2V0X2luKG9mZnNldCkgXAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sIFwKLQlzaG93X2luX2lucHV0LCBOVUxMLCBvZmZzZXQpOyBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluIyNvZmZzZXQjI19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBcCi0Jc2hvd19pbl9taW4sIHNldF9pbl9taW4sIG9mZnNldCk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4jI29mZnNldCMjX21heCwgU19JV1VTUiB8IFNfSVJVR08sIFwKLQlzaG93X2luX21heCwgc2V0X2luX21heCwgb2Zmc2V0KTsgXAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfc3RhdHVzLCBTX0lSVUdPLCBcCi0Jc2hvd19pbl9zdGF0dXMsIE5VTEwsIG9mZnNldCk7Ci1zaG93X2FuZF9zZXRfaW4oMCkKLXNob3dfYW5kX3NldF9pbigxKQotc2hvd19hbmRfc2V0X2luKDIpCi1zaG93X2FuZF9zZXRfaW4oMykKLXNob3dfYW5kX3NldF9pbig0KQotc2hvd19hbmRfc2V0X2luKDUpCi1zaG93X2FuZF9zZXRfaW4oNikKLXNob3dfYW5kX3NldF9pbig3KQotc2hvd19hbmRfc2V0X2luKDgpCi1zaG93X2FuZF9zZXRfaW4oOSkKLXNob3dfYW5kX3NldF9pbigxMCkKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgaW5faW5wdXRbXSA9IHsKKwlTRU5TT1JfQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGluMV9pbnB1dCwgU19JUlVHTywgc2hvd19pbl9pbnB1dCwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2luX2lucHV0LCBOVUxMLCAyKSwKKwlTRU5TT1JfQVRUUihpbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGluNF9pbnB1dCwgU19JUlVHTywgc2hvd19pbl9pbnB1dCwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoaW41X2lucHV0LCBTX0lSVUdPLCBzaG93X2luX2lucHV0LCBOVUxMLCA1KSwKKwlTRU5TT1JfQVRUUihpbjZfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGluN19pbnB1dCwgU19JUlVHTywgc2hvd19pbl9pbnB1dCwgTlVMTCwgNyksCisJU0VOU09SX0FUVFIoaW44X2lucHV0LCBTX0lSVUdPLCBzaG93X2luX2lucHV0LCBOVUxMLCA4KSwKKwlTRU5TT1JfQVRUUihpbjlfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDkpLAorCVNFTlNPUl9BVFRSKGluMTBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW5faW5wdXQsIE5VTEwsIDEwKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGluX3N0YXR1c1tdID0geworCVNFTlNPUl9BVFRSKGluMF9zdGF0dXMsIFNfSVJVR08sIHNob3dfaW5fc3RhdHVzLCBOVUxMLCAwKSwKKwlTRU5TT1JfQVRUUihpbjFfc3RhdHVzLCBTX0lSVUdPLCBzaG93X2luX3N0YXR1cywgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoaW4yX3N0YXR1cywgU19JUlVHTywgc2hvd19pbl9zdGF0dXMsIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKGluM19zdGF0dXMsIFNfSVJVR08sIHNob3dfaW5fc3RhdHVzLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfc3RhdHVzLCBTX0lSVUdPLCBzaG93X2luX3N0YXR1cywgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoaW41X3N0YXR1cywgU19JUlVHTywgc2hvd19pbl9zdGF0dXMsIE5VTEwsIDUpLAorCVNFTlNPUl9BVFRSKGluNl9zdGF0dXMsIFNfSVJVR08sIHNob3dfaW5fc3RhdHVzLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihpbjdfc3RhdHVzLCBTX0lSVUdPLCBzaG93X2luX3N0YXR1cywgTlVMTCwgNyksCisJU0VOU09SX0FUVFIoaW44X3N0YXR1cywgU19JUlVHTywgc2hvd19pbl9zdGF0dXMsIE5VTEwsIDgpLAorCVNFTlNPUl9BVFRSKGluOV9zdGF0dXMsIFNfSVJVR08sIHNob3dfaW5fc3RhdHVzLCBOVUxMLCA5KSwKKwlTRU5TT1JfQVRUUihpbjEwX3N0YXR1cywgU19JUlVHTywgc2hvd19pbl9zdGF0dXMsIE5VTEwsIDEwKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGluX21pbltdID0geworCVNFTlNPUl9BVFRSKGluMF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc2V0X2luX21pbiwgMCksCisJU0VOU09SX0FUVFIoaW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCAxKSwKKwlTRU5TT1JfQVRUUihpbjJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDIpLAorCVNFTlNPUl9BVFRSKGluM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc2V0X2luX21pbiwgMyksCisJU0VOU09SX0FUVFIoaW40X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCA0KSwKKwlTRU5TT1JfQVRUUihpbjVfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDUpLAorCVNFTlNPUl9BVFRSKGluNl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc2V0X2luX21pbiwgNiksCisJU0VOU09SX0FUVFIoaW43X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCA3KSwKKwlTRU5TT1JfQVRUUihpbjhfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDgpLAorCVNFTlNPUl9BVFRSKGluOV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc2V0X2luX21pbiwgOSksCisJU0VOU09SX0FUVFIoaW4xMF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc2V0X2luX21pbiwgMTApLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgaW5fbWF4W10gPSB7CisJU0VOU09SX0FUVFIoaW4wX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCAwKSwKKwlTRU5TT1JfQVRUUihpbjFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDEpLAorCVNFTlNPUl9BVFRSKGluMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc2V0X2luX21heCwgMiksCisJU0VOU09SX0FUVFIoaW4zX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDQpLAorCVNFTlNPUl9BVFRSKGluNV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc2V0X2luX21heCwgNSksCisJU0VOU09SX0FUVFIoaW42X21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCA2KSwKKwlTRU5TT1JfQVRUUihpbjdfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDcpLAorCVNFTlNPUl9BVFRSKGluOF9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc2V0X2luX21heCwgOCksCisJU0VOU09SX0FUVFIoaW45X21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCA5KSwKKwlTRU5TT1JfQVRUUihpbjEwX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCAxMCksCit9OwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RoZXJtX2lucHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTQ3MywxMSArNTEzLDExIEBACiAJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWluW2F0dHItPmluZGV4XSA9IElOX1RPX1JFRyh2YWwsIGRhdGEtPmluX3ZyZWYpOwogCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIGF0dHItPmluZGV4LCBQQzg3MzY1X1JFR19URU1QX01JTiwKIAkJCSAgICBkYXRhLT5pbl9taW5bYXR0ci0+aW5kZXhdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNldF90aGVybV9tYXgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLApAQCAtNDg4LDExICs1MjgsMTEgQEAKIAlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9tYXhbYXR0ci0+aW5kZXhdID0gSU5fVE9fUkVHKHZhbCwgZGF0YS0+aW5fdnJlZik7CiAJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9JTiwgYXR0ci0+aW5kZXgsIFBDODczNjVfUkVHX1RFTVBfTUFYLAogCQkJICAgIGRhdGEtPmluX21heFthdHRyLT5pbmRleF0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2V0X3RoZXJtX2NyaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLApAQCAtNTAzLDI4ICs1NDMsNTEgQEAKIAlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9jcml0W2F0dHItPmluZGV4LTExXSA9IElOX1RPX1JFRyh2YWwsIGRhdGEtPmluX3ZyZWYpOwogCXBjODczNjBfd3JpdGVfdmFsdWUoZGF0YSwgTERfSU4sIGF0dHItPmluZGV4LCBQQzg3MzY1X1JFR19URU1QX0NSSVQsCiAJCQkgICAgZGF0YS0+aW5fY3JpdFthdHRyLT5pbmRleC0xMV0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCi0jZGVmaW5lIHNob3dfYW5kX3NldF90aGVybShvZmZzZXQpIFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sIFwKLQlzaG93X3RoZXJtX2lucHV0LCBOVUxMLCAxMStvZmZzZXQtNCk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgXAotCXNob3dfdGhlcm1fbWluLCBzZXRfdGhlcm1fbWluLCAxMStvZmZzZXQtNCk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgXAotCXNob3dfdGhlcm1fbWF4LCBzZXRfdGhlcm1fbWF4LCAxMStvZmZzZXQtNCk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIFwKLQlzaG93X3RoZXJtX2NyaXQsIHNldF90aGVybV9jcml0LCAxMStvZmZzZXQtNCk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfc3RhdHVzLCBTX0lSVUdPLCBcCi0Jc2hvd190aGVybV9zdGF0dXMsIE5VTEwsIDExK29mZnNldC00KTsKLXNob3dfYW5kX3NldF90aGVybSg0KQotc2hvd19hbmRfc2V0X3RoZXJtKDUpCi1zaG93X2FuZF9zZXRfdGhlcm0oNikKKy8qIHRoZSArMTEgdGVybSBiZWxvdyByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IFZMTSB1bml0cyAxMSwxMiwxMyBhcmUKKyAgIHVzZWQgaW4gdGhlIGNoaXAgdG8gbWVhc3VyZSB2b2x0YWdlIGFjcm9zcyB0aGUgdGhlcm1pc3RvcnMKKyovCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRoZXJtX2lucHV0W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDRfaW5wdXQsIFNfSVJVR08sIHNob3dfdGhlcm1faW5wdXQsIE5VTEwsIDArMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA1X2lucHV0LCBTX0lSVUdPLCBzaG93X3RoZXJtX2lucHV0LCBOVUxMLCAxKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNl9pbnB1dCwgU19JUlVHTywgc2hvd190aGVybV9pbnB1dCwgTlVMTCwgMisxMSksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0aGVybV9zdGF0dXNbXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wNF9zdGF0dXMsIFNfSVJVR08sIHNob3dfdGhlcm1fc3RhdHVzLCBOVUxMLCAwKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9zdGF0dXMsIFNfSVJVR08sIHNob3dfdGhlcm1fc3RhdHVzLCBOVUxMLCAxKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNl9zdGF0dXMsIFNfSVJVR08sIHNob3dfdGhlcm1fc3RhdHVzLCBOVUxMLCAyKzExKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRoZXJtX21pbltdID0geworCVNFTlNPUl9BVFRSKHRlbXA0X21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RoZXJtX21pbiwgc2V0X3RoZXJtX21pbiwgMCsxMSksCisJU0VOU09SX0FUVFIodGVtcDVfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGhlcm1fbWluLCBzZXRfdGhlcm1fbWluLCAxKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNl9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd190aGVybV9taW4sIHNldF90aGVybV9taW4sIDIrMTEpLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGhlcm1fbWF4W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDRfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGhlcm1fbWF4LCBzZXRfdGhlcm1fbWF4LCAwKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd190aGVybV9tYXgsIHNldF90aGVybV9tYXgsIDErMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA2X21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RoZXJtX21heCwgc2V0X3RoZXJtX21heCwgMisxMSksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0aGVybV9jcml0W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDRfY3JpdCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RoZXJtX2NyaXQsIHNldF90aGVybV9jcml0LCAwKzExKSwKKwlTRU5TT1JfQVRUUih0ZW1wNV9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGhlcm1fY3JpdCwgc2V0X3RoZXJtX2NyaXQsIDErMTEpLAorCVNFTlNPUl9BVFRSKHRlbXA2X2NyaXQsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd190aGVybV9jcml0LCBzZXRfdGhlcm1fY3JpdCwgMisxMSksCit9OwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3ZpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC01OTIsMTEgKzY1NSwxMSBAQAogCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfbWluW2F0dHItPmluZGV4XSA9IFRFTVBfVE9fUkVHKHZhbCk7CiAJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9URU1QLCBhdHRyLT5pbmRleCwgUEM4NzM2NV9SRUdfVEVNUF9NSU4sCiAJCQkgICAgZGF0YS0+dGVtcF9taW5bYXR0ci0+aW5kZXhdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsCkBAIC02MDcsMTEgKzY3MCwxMSBAQAogCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfbWF4W2F0dHItPmluZGV4XSA9IFRFTVBfVE9fUkVHKHZhbCk7CiAJcGM4NzM2MF93cml0ZV92YWx1ZShkYXRhLCBMRF9URU1QLCBhdHRyLT5pbmRleCwgUEM4NzM2NV9SRUdfVEVNUF9NQVgsCiAJCQkgICAgZGF0YS0+dGVtcF9tYXhbYXR0ci0+aW5kZXhdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX2NyaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLApAQCAtNjIyLDI4ICs2ODUsNDggQEAKIAlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT50ZW1wX2NyaXRbYXR0ci0+aW5kZXhdID0gVEVNUF9UT19SRUcodmFsKTsKIAlwYzg3MzYwX3dyaXRlX3ZhbHVlKGRhdGEsIExEX1RFTVAsIGF0dHItPmluZGV4LCBQQzg3MzY1X1JFR19URU1QX0NSSVQsCiAJCQkgICAgZGF0YS0+dGVtcF9jcml0W2F0dHItPmluZGV4XSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc2hvd19hbmRfc2V0X3RlbXAob2Zmc2V0KSBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLCBcCi0Jc2hvd190ZW1wX2lucHV0LCBOVUxMLCBvZmZzZXQtMSk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgXAotCXNob3dfdGVtcF9taW4sIHNldF90ZW1wX21pbiwgb2Zmc2V0LTEpOyBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAjI29mZnNldCMjX21heCwgU19JV1VTUiB8IFNfSVJVR08sIFwKLQlzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgsIG9mZnNldC0xKTsgXAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wIyNvZmZzZXQjI19jcml0LCBTX0lXVVNSIHwgU19JUlVHTywgXAotCXNob3dfdGVtcF9jcml0LCBzZXRfdGVtcF9jcml0LCBvZmZzZXQtMSk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfc3RhdHVzLCBTX0lSVUdPLCBcCi0Jc2hvd190ZW1wX3N0YXR1cywgTlVMTCwgb2Zmc2V0LTEpOwotc2hvd19hbmRfc2V0X3RlbXAoMSkKLXNob3dfYW5kX3NldF90ZW1wKDIpCi1zaG93X2FuZF9zZXRfdGVtcCgzKQorc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX2lucHV0W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcF9pbnB1dCwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcF9pbnB1dCwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcF9pbnB1dCwgTlVMTCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX3N0YXR1c1tdID0geworCVNFTlNPUl9BVFRSKHRlbXAxX3N0YXR1cywgU19JUlVHTywgc2hvd190ZW1wX3N0YXR1cywgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfc3RhdHVzLCBTX0lSVUdPLCBzaG93X3RlbXBfc3RhdHVzLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM19zdGF0dXMsIFNfSVJVR08sIHNob3dfdGVtcF9zdGF0dXMsIE5VTEwsIDIpLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgdGVtcF9taW5bXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wMV9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd190ZW1wX21pbiwgc2V0X3RlbXBfbWluLCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd190ZW1wX21pbiwgc2V0X3RlbXBfbWluLCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM19taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgc2hvd190ZW1wX21pbiwgc2V0X3RlbXBfbWluLCAyKSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHRlbXBfbWF4W10gPSB7CisJU0VOU09SX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGVtcF9tYXgsIHNldF90ZW1wX21heCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGVtcF9tYXgsIHNldF90ZW1wX21heCwgMSksCisJU0VOU09SX0FUVFIodGVtcDNfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGVtcF9tYXgsIHNldF90ZW1wX21heCwgMiksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSB0ZW1wX2NyaXRbXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wMV9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGVtcF9jcml0LCBzZXRfdGVtcF9jcml0LCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMl9jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGVtcF9jcml0LCBzZXRfdGVtcF9jcml0LCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wM19jcml0LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgIHNob3dfdGVtcF9jcml0LCBzZXRfdGVtcF9jcml0LCAyKSwKK307CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9hbGFybXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNzQ5LDIyICs4MzIsMjQgQEAKIHN0YXRpYyBpbnQgcGM4NzM2MF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YTsKIAlpbnQgZXJyID0gMDsKIAljb25zdCBjaGFyICpuYW1lID0gInBjODczNjAiOwogCWludCB1c2VfdGhlcm1pc3RvcnMgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGM4NzM2MF9kYXRhKSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQlpbml0X01VVEVYKCZkYXRhLT5sb2NrKTsKLQluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQluZXdfY2xpZW50LT5kcml2ZXIgPSAmcGM4NzM2MF9kcml2ZXI7Ci0JbmV3X2NsaWVudC0+ZmxhZ3MgPSAwOworCWNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CisJZGV2ID0gJmNsaWVudC0+ZGV2OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9ICZwYzg3MzYwX2RyaXZlcjsKKwljbGllbnQtPmZsYWdzID0gMDsKIAogCWRhdGEtPmZhbm5yID0gMjsKIAlkYXRhLT5pbm5yID0gMDsKQEAgLTc5MiwxNSArODc3LDE1IEBACiAJCWJyZWFrOwogCX0KIAotCXN0cmNweShuZXdfY2xpZW50LT5uYW1lLCBuYW1lKTsKKwlzdHJsY3B5KGNsaWVudC0+bmFtZSwgbmFtZSwgc2l6ZW9mKGNsaWVudC0+bmFtZSkpOwogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQlpZiAoKChkYXRhLT5hZGRyZXNzW2ldID0gZXh0cmFfaXNhW2ldKSkKIAkJICYmICFyZXF1ZXN0X3JlZ2lvbihleHRyYV9pc2FbaV0sIFBDODczNjBfRVhURU5ULAogCQkgCQkgICAgcGM4NzM2MF9kcml2ZXIuZHJpdmVyLm5hbWUpKSB7Ci0JCQlkZXZfZXJyKCZuZXdfY2xpZW50LT5kZXYsICJSZWdpb24gMHgleC0weCV4IGFscmVhZHkgIgorCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJSZWdpb24gMHgleC0weCV4IGFscmVhZHkgIgogCQkJCSJpbiB1c2UhXG4iLCBleHRyYV9pc2FbaV0sCiAJCQkJZXh0cmFfaXNhW2ldK1BDODczNjBfRVhURU5ULTEpOwogCQkJZm9yIChpLS07IGkgPj0gMDsgaS0tKQpAQCAtODE0LDcgKzg5OSw3IEBACiAJaWYgKGRhdGEtPmZhbm5yKQogCQlkYXRhLT5mYW5fY29uZiA9IGNvbmZyZWdbMF0gfCAoY29uZnJlZ1sxXSA8PCA4KTsKIAotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQorCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCWdvdG8gRVJST1IyOwogCiAJLyogVXNlIHRoZSBjb3JyZWN0IHJlZmVyZW5jZSB2b2x0YWdlCkBAIC04MjgsNyArOTEzLDcgQEAKIAkJCQkJCVBDODczNjVfUkVHX1RFTVBfQ09ORklHKTsKIAkJfQogCQlkYXRhLT5pbl92cmVmID0gKGkmMHgwMikgPyAzMDI1IDogMjk2NjsKLQkJZGV2X2RiZygmbmV3X2NsaWVudC0+ZGV2LCAiVXNpbmcgJXMgcmVmZXJlbmNlIHZvbHRhZ2VcbiIsCisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiVXNpbmcgJXMgcmVmZXJlbmNlIHZvbHRhZ2VcbiIsCiAJCQkoaSYweDAyKSA/ICJleHRlcm5hbCIgOiAiaW50ZXJuYWwiKTsKIAogCQlkYXRhLT52aWRfY29uZiA9IGNvbmZyZWdbM107CkBAIC04NDcsMTU0ICs5MzIsNjQgQEAKIAkJaWYgKGRldmlkID09IDB4ZTkgJiYgZGF0YS0+YWRkcmVzc1sxXSkgLyogUEM4NzM2NiAqLwogCQkJdXNlX3RoZXJtaXN0b3JzID0gY29uZnJlZ1syXSAmIDB4NDA7CiAKLQkJcGM4NzM2MF9pbml0X2NsaWVudChuZXdfY2xpZW50LCB1c2VfdGhlcm1pc3RvcnMpOworCQlwYzg3MzYwX2luaXRfY2xpZW50KGNsaWVudCwgdXNlX3RoZXJtaXN0b3JzKTsKIAl9CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwogCQlnb3RvIEVSUk9SMzsKIAl9CiAKIAlpZiAoZGF0YS0+aW5ucikgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjBfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjNfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjVfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjZfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjhfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjlfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjEwX2lucHV0LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjJfbWluLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjVfbWluLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X21pbi5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luN19taW4uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjhfbWluLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW45X21pbi5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTBfbWluLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjJfbWF4LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNF9tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjVfbWF4LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luN19tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjhfbWF4LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW45X21heC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTBfbWF4LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4wX3N0YXR1cy5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMV9zdGF0dXMuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjJfc3RhdHVzLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX3N0YXR1cy5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNF9zdGF0dXMuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjVfc3RhdHVzLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X3N0YXR1cy5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luN19zdGF0dXMuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjhfc3RhdHVzLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW45X3N0YXR1cy5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTBfc3RhdHVzLmRldl9hdHRyKTsKLQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl92cm0pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtc19pbik7CisJCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmaW5faW5wdXRbaV0uZGV2X2F0dHIpOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmluX21pbltpXS5kZXZfYXR0cik7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmaW5fbWF4W2ldLmRldl9hdHRyKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZpbl9zdGF0dXNbaV0uZGV2X2F0dHIpOworCQl9CisJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jcHUwX3ZpZCk7CisJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92cm0pOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYWxhcm1zX2luKTsKIAl9CiAKIAlpZiAoZGF0YS0+dGVtcG5yKSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX3N0YXR1cy5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX3N0YXR1cy5kZXZfYXR0cik7CisJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT50ZW1wbnI7IGkrKykgeworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnRlbXBfaW5wdXRbaV0uZGV2X2F0dHIpOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnRlbXBfbWluW2ldLmRldl9hdHRyKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0ZW1wX21heFtpXS5kZXZfYXR0cik7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmdGVtcF9jcml0W2ldLmRldl9hdHRyKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0ZW1wX3N0YXR1c1tpXS5kZXZfYXR0cik7CisJCX0KKwkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FsYXJtc190ZW1wKTsKKwl9CiAKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXNfdGVtcCk7Ci0JfQotCWlmIChkYXRhLT50ZW1wbnIgPT0gMykgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21pbi5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19zdGF0dXMuZGV2X2F0dHIpOwotCX0KIAlpZiAoZGF0YS0+aW5uciA9PSAxNCkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X2lucHV0LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDZfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9taW4uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9taW4uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9taW4uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9jcml0LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfY3JpdC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXA2X2NyaXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9zdGF0dXMuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9zdGF0dXMuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9zdGF0dXMuZGV2X2F0dHIpOworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmdGhlcm1faW5wdXRbaV0uZGV2X2F0dHIpOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnRoZXJtX21pbltpXS5kZXZfYXR0cik7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmdGhlcm1fbWF4W2ldLmRldl9hdHRyKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0aGVybV9jcml0W2ldLmRldl9hdHRyKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0aGVybV9zdGF0dXNbaV0uZGV2X2F0dHIpOworCQl9CiAJfQogCi0JaWYgKGRhdGEtPmZhbm5yKSB7Ci0JCWlmIChGQU5fQ09ORklHX01PTklUT1IoZGF0YS0+ZmFuX2NvbmYsIDApKSB7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyKTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyKTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyKTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfc3RhdHVzLmRldl9hdHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ZmFubnI7IGkrKykgeworCQlpZiAoRkFOX0NPTkZJR19NT05JVE9SKGRhdGEtPmZhbl9jb25mLCBpKSkgeworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmZhbl9pbnB1dFtpXS5kZXZfYXR0cik7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZmFuX21pbltpXS5kZXZfYXR0cik7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZmFuX2RpdltpXS5kZXZfYXR0cik7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZmFuX3N0YXR1c1tpXS5kZXZfYXR0cik7CiAJCX0KLQotCQlpZiAoRkFOX0NPTkZJR19NT05JVE9SKGRhdGEtPmZhbl9jb25mLCAxKSkgewotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2Rpdi5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX3N0YXR1cy5kZXZfYXR0cik7Ci0JCX0KLQotCQlpZiAoRkFOX0NPTkZJR19DT05UUk9MKGRhdGEtPmZhbl9jb25mLCAwKSkKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIpOwotCQlpZiAoRkFOX0NPTkZJR19DT05UUk9MKGRhdGEtPmZhbl9jb25mLCAxKSkKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIpOwotCX0KLQlpZiAoZGF0YS0+ZmFubnIgPT0gMykgewotCQlpZiAoRkFOX0NPTkZJR19NT05JVE9SKGRhdGEtPmZhbl9jb25mLCAyKSkgewotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2Rpdi5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX3N0YXR1cy5kZXZfYXR0cik7Ci0JCX0KLQotCQlpZiAoRkFOX0NPTkZJR19DT05UUk9MKGRhdGEtPmZhbl9jb25mLCAyKSkKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIpOworCQlpZiAoRkFOX0NPTkZJR19DT05UUk9MKGRhdGEtPmZhbl9jb25mLCBpKSkKKwkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZwd21baV0uZGV2X2F0dHIpOwogCX0KIAogCXJldHVybiAwOwogCiBFUlJPUjM6Ci0JaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIEVSUk9SMjoKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCWlmIChkYXRhLT5hZGRyZXNzW2ldKSB7CkBAIC0xMDMzLDExICsxMDI4LDExIEBACiB7CiAJaW50IHJlczsKIAotCWRvd24oJihkYXRhLT5sb2NrKSk7CisJbXV0ZXhfbG9jaygmKGRhdGEtPmxvY2spKTsKIAlpZiAoYmFuayAhPSBOT19CQU5LKQogCQlvdXRiX3AoYmFuaywgZGF0YS0+YWRkcmVzc1tsZGldICsgUEM4NzM2NV9SRUdfQkFOSyk7CiAJcmVzID0gaW5iX3AoZGF0YS0+YWRkcmVzc1tsZGldICsgcmVnKTsKLQl1cCgmKGRhdGEtPmxvY2spKTsKKwltdXRleF91bmxvY2soJihkYXRhLT5sb2NrKSk7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTA0NSwxMSArMTA0MCwxMSBAQAogc3RhdGljIHZvaWQgcGM4NzM2MF93cml0ZV92YWx1ZShzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhLCB1OCBsZGksIHU4IGJhbmssCiAJCQkJdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlkb3duKCYoZGF0YS0+bG9jaykpOworCW11dGV4X2xvY2soJihkYXRhLT5sb2NrKSk7CiAJaWYgKGJhbmsgIT0gTk9fQkFOSykKIAkJb3V0Yl9wKGJhbmssIGRhdGEtPmFkZHJlc3NbbGRpXSArIFBDODczNjVfUkVHX0JBTkspOwogCW91dGJfcCh2YWx1ZSwgZGF0YS0+YWRkcmVzc1tsZGldICsgcmVnKTsKLQl1cCgmKGRhdGEtPmxvY2spKTsKKwltdXRleF91bmxvY2soJihkYXRhLT5sb2NrKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBjODczNjBfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHVzZV90aGVybWlzdG9ycykKQEAgLTEwNzEsNyArMTA2Niw3IEBACiAJfQogCiAJbnIgPSBkYXRhLT5pbm5yIDwgMTEgPyBkYXRhLT5pbm5yIDogMTE7Ci0JZm9yIChpPTA7IGk8bnI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CiAJCWlmIChpbml0ID49IGluaXRfaW5baV0pIHsKIAkJCS8qIEZvcmNpYmx5IGVuYWJsZSB2b2x0YWdlIGNoYW5uZWwgKi8KIAkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKQEAgLTEwODgsMTQgKzEwODMsMTQgQEAKIAogCS8qIFdlIGNhbid0IGJsaW5kbHkgdHJ1c3QgdGhlIFN1cGVyLUkvTyBzcGFjZSBjb25maWd1cmF0aW9uIGJpdCwKIAkgICBtb3N0IEJJT1Mgd29uJ3Qgc2V0IGl0IHByb3Blcmx5ICovCi0JZm9yIChpPTExOyBpPGRhdGEtPmlubnI7IGkrKykgeworCWZvciAoaSA9IDExOyBpIDwgZGF0YS0+aW5ucjsgaSsrKSB7CiAJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9JTiwgaSwKIAkJCQkJIFBDODczNjVfUkVHX1RFTVBfU1RBVFVTKTsKIAkJdXNlX3RoZXJtaXN0b3JzID0gdXNlX3RoZXJtaXN0b3JzIHx8IChyZWcgJiAweDAxKTsKIAl9CiAKIAlpID0gdXNlX3RoZXJtaXN0b3JzID8gMiA6IDA7Ci0JZm9yICg7IGk8ZGF0YS0+dGVtcG5yOyBpKyspIHsKKwlmb3IgKDsgaSA8IGRhdGEtPnRlbXBucjsgaSsrKSB7CiAJCWlmIChpbml0ID49IGluaXRfdGVtcFtpXSkgewogCQkJLyogRm9yY2libHkgZW5hYmxlIHRlbXBlcmF0dXJlIGNoYW5uZWwgKi8KIAkJCXJlZyA9IHBjODczNjBfcmVhZF92YWx1ZShkYXRhLCBMRF9URU1QLCBpLApAQCAtMTExMSw3ICsxMTA2LDcgQEAKIAl9CiAKIAlpZiAodXNlX3RoZXJtaXN0b3JzKSB7Ci0JCWZvciAoaT0xMTsgaTxkYXRhLT5pbm5yOyBpKyspIHsKKwkJZm9yIChpID0gMTE7IGkgPCBkYXRhLT5pbm5yOyBpKyspIHsKIAkJCWlmIChpbml0ID49IGluaXRfaW5baV0pIHsKIAkJCQkvKiBUaGUgcGluIG1heSBhbHJlYWR5IGJlIHVzZWQgYnkgdGhlcm1hbAogCQkJCSAgIGRpb2RlcyAqLwpAQCAtMTIyMSw3ICsxMjE2LDcgQEAKIAlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdTggaTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAqIDIpIHx8ICFkYXRhLT52YWxpZCkgewogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkRhdGEgdXBkYXRlXG4iKTsKQEAgLTEzMjEsNyArMTMxNiw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3NpczU1OTUuYyBiL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCmluZGV4IDhiZTUxODkuLjZmM2ZkYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAKQEAgLTE2Nyw5ICsxNjgsOSBAQAogc3RydWN0IHNpczU1OTVfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOwkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KIAljaGFyIG1heGluczsJCS8qID09IDMgaWYgdGVtcCBlbmFibGVkLCBvdGhlcndpc2UgPT0gNCAqLwpAQCAtMTkyLDggKzE5Myw4IEBACiBzdGF0aWMgaW50IHNpczU1OTVfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgaW50IHNpczU1OTVfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAotc3RhdGljIGludCBzaXM1NTk1X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnaXN0ZXIpOwotc3RhdGljIGludCBzaXM1NTk1X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZ2lzdGVyLCB1OCB2YWx1ZSk7CitzdGF0aWMgaW50IHNpczU1OTVfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpOworc3RhdGljIGludCBzaXM1NTk1X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpOwogc3RhdGljIHN0cnVjdCBzaXM1NTk1X2RhdGEgKnNpczU1OTVfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2lzNTU5NV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIApAQCAtMjMxLDEwICsyMzIsMTAgQEAKIAlzdHJ1Y3Qgc2lzNTU5NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWluW25yXSA9IElOX1RPX1JFRyh2YWwpOwogCXNpczU1OTVfd3JpdGVfdmFsdWUoY2xpZW50LCBTSVM1NTk1X1JFR19JTl9NSU4obnIpLCBkYXRhLT5pbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjQ1LDEwICsyNDYsMTAgQEAKIAlzdHJ1Y3Qgc2lzNTU5NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWF4W25yXSA9IElOX1RPX1JFRyh2YWwpOwogCXNpczU1OTVfd3JpdGVfdmFsdWUoY2xpZW50LCBTSVM1NTk1X1JFR19JTl9NQVgobnIpLCBkYXRhLT5pbl9tYXhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzEwLDEwICszMTEsMTAgQEAKIAlzdHJ1Y3Qgc2lzNTU5NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT50ZW1wX292ZXIgPSBURU1QX1RPX1JFRyh2YWwpOwogCXNpczU1OTVfd3JpdGVfdmFsdWUoY2xpZW50LCBTSVM1NTk1X1JFR19URU1QX09WRVIsIGRhdGEtPnRlbXBfb3Zlcik7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMyOSwxMCArMzMwLDEwIEBACiAJc3RydWN0IHNpczU1OTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9oeXN0ID0gVEVNUF9UT19SRUcodmFsKTsKIAlzaXM1NTk1X3dyaXRlX3ZhbHVlKGNsaWVudCwgU0lTNTU5NV9SRUdfVEVNUF9IWVNULCBkYXRhLT50ZW1wX2h5c3QpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zNjQsMTAgKzM2NSwxMCBAQAogCXN0cnVjdCBzaXM1NTk1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5mYW5fbWluW25yXSA9IEZBTl9UT19SRUcodmFsLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKIAlzaXM1NTk1X3dyaXRlX3ZhbHVlKGNsaWVudCwgU0lTNTU5NV9SRUdfRkFOX01JTihuciksIGRhdGEtPmZhbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzkwLDcgKzM5MSw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAlpbnQgcmVnOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAltaW4gPSBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltucl0sCiAJCQlESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKIAlyZWcgPSBzaXM1NTk1X3JlYWRfdmFsdWUoY2xpZW50LCBTSVM1NTk1X1JFR19GQU5ESVYpOwpAQCAtNDAzLDcgKzQwNCw3IEBACiAJZGVmYXVsdDoKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYW5fZGl2IHZhbHVlICVsZCBub3QgIgogCQkJInN1cHBvcnRlZC4gQ2hvb3NlIG9uZSBvZiAxLCAyLCA0IG9yIDghXG4iLCB2YWwpOwotCQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCQpAQCAtNDE5LDcgKzQyMCw3IEBACiAJZGF0YS0+ZmFuX21pbltucl0gPQogCQlGQU5fVE9fUkVHKG1pbiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAJc2lzNTU5NV93cml0ZV92YWx1ZShjbGllbnQsIFNJUzU1OTVfUkVHX0ZBTl9NSU4obnIpLCBkYXRhLT5mYW5fbWluW25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTUyNyw3ICs1MjgsNyBAQAogCiAJbmV3X2NsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJbmV3X2NsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+bG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CiAJaTJjX3NldF9jbGllbnRkYXRhKG5ld19jbGllbnQsIGRhdGEpOwogCW5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCW5ld19jbGllbnQtPmRyaXZlciA9ICZzaXM1NTk1X2RyaXZlcjsKQEAgLTU0OCw3ICs1NDksNyBAQAogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgInNpczU1OTUiLCBJMkNfTkFNRV9TSVpFKTsKIAogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQpAQCAtNjM1LDIwICs2MzYsMjAgQEAKIAlpbnQgcmVzOwogCiAJc3RydWN0IHNpczU1OTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWRvd24oJmRhdGEtPmxvY2spOworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIFNJUzU1OTVfQUREUl9SRUdfT0ZGU0VUKTsKIAlyZXMgPSBpbmJfcChjbGllbnQtPmFkZHIgKyBTSVM1NTk1X0RBVEFfUkVHX09GRlNFVCk7Ci0JdXAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludCBzaXM1NTk1X3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHNpczU1OTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWRvd24oJmRhdGEtPmxvY2spOworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCW91dGJfcChyZWcsIGNsaWVudC0+YWRkciArIFNJUzU1OTVfQUREUl9SRUdfT0ZGU0VUKTsKIAlvdXRiX3AodmFsdWUsIGNsaWVudC0+YWRkciArIFNJUzU1OTVfREFUQV9SRUdfT0ZGU0VUKTsKLQl1cCgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY3LDcgKzY2OCw3IEBACiAJc3RydWN0IHNpczU1OTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQogCSAgICB8fCAhZGF0YS0+dmFsaWQpIHsKQEAgLTcwNyw3ICs3MDgsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zbXNjNDdiMzk3LmMgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N2IzOTcuYwppbmRleCA4NjYzYmJiLi5iNjA4NjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3Ntc2M0N2IzOTcuYworKysgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N2IzOTcuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIEFkZHJlc3MgaXMgYXV0b2RldGVjdGVkLCB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlICovCkBAIC05Miw5ICs5Myw5IEBACiBzdHJ1Y3Qgc21zYzQ3YjM5N19kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOyAvKiBpbiBqaWZmaWVzICovCiAJaW50IHZhbGlkOwogCkBAIC0xMDgsMTAgKzEwOSwxMCBAQAogCXN0cnVjdCBzbXNjNDdiMzk3X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgcmVzOwogCi0JZG93bigmZGF0YS0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJb3V0YihyZWcsIGNsaWVudC0+YWRkcik7CiAJcmVzID0gaW5iX3AoY2xpZW50LT5hZGRyICsgMSk7Ci0JdXAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMTIxLDcgKzEyMiw3IEBACiAJc3RydWN0IHNtc2M0N2IzOTdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKIAkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJzdGFydGluZyBkZXZpY2UgdXBkYXRlLi4uXG4iKTsKQEAgLTE0NCw3ICsxNDUsNyBAQAogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIi4uLiBkZXZpY2UgdXBkYXRlIGNvbXBsZXRlXG4iKTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CkBAIC0yNTQsMTQgKzI1NSwxNCBAQAogCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwogCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKIAluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQlpbml0X01VVEVYKCZkYXRhLT5sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKIAluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKIAluZXdfY2xpZW50LT5kcml2ZXIgPSAmc21zYzQ3YjM5N19kcml2ZXI7CiAJbmV3X2NsaWVudC0+ZmxhZ3MgPSAwOwogCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCAic21zYzQ3YjM5NyIsIEkyQ19OQU1FX1NJWkUpOwogCi0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQogCQlnb3RvIGVycm9yX2ZyZWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMKaW5kZXggZDFlM2VjMC4uNzczMmFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zbXNjNDdtMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc21zYzQ3bTEuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIEFkZHJlc3MgaXMgYXV0b2RldGVjdGVkLCB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlICovCkBAIC0xMDIsOSArMTAzLDkgQEAKIHN0cnVjdCBzbXNjNDdtMV9kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwotCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAKIAl1OCBmYW5bMl07CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwpAQCAtMTg4LDE4ICsxODksMTggQEAKIAlzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWxvbmcgcnBtZGl2LCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlycG1kaXYgPSB2YWwgKiBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pOwogCiAJaWYgKDk4MzA0MCA+IDE5MiAqIHJwbWRpdiB8fCAyICogcnBtZGl2ID4gOTgzMDQwKSB7Ci0JCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlkYXRhLT5mYW5fcHJlbG9hZFtucl0gPSAxOTIgLSAoKDk4MzA0MCArIHJwbWRpdiAvIDIpIC8gcnBtZGl2KTsKIAlzbXNjNDdtMV93cml0ZV92YWx1ZShjbGllbnQsIFNNU0M0N00xX1JFR19GQU5fUFJFTE9BRChuciksCiAJCQkgICAgIGRhdGEtPmZhbl9wcmVsb2FkW25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTIyMCwxNCArMjIxLDE0IEBACiAJaWYgKG5ld19kaXYgPT0gb2xkX2RpdikgLyogTm8gY2hhbmdlICovCiAJCXJldHVybiBjb3VudDsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJc3dpdGNoIChuZXdfZGl2KSB7CiAJY2FzZSAxOiBkYXRhLT5mYW5fZGl2W25yXSA9IDA7IGJyZWFrOwogCWNhc2UgMjogZGF0YS0+ZmFuX2Rpdltucl0gPSAxOyBicmVhazsKIAljYXNlIDQ6IGRhdGEtPmZhbl9kaXZbbnJdID0gMjsgYnJlYWs7CiAJY2FzZSA4OiBkYXRhLT5mYW5fZGl2W25yXSA9IDM7IGJyZWFrOwogCWRlZmF1bHQ6Ci0JCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0MSw3ICsyNDIsNyBAQAogCWRhdGEtPmZhbl9wcmVsb2FkW25yXSA9IFNFTlNPUlNfTElNSVQodG1wLCAwLCAxOTEpOwogCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGNsaWVudCwgU01TQzQ3TTFfUkVHX0ZBTl9QUkVMT0FEKG5yKSwKIAkJCSAgICAgZGF0YS0+ZmFuX3ByZWxvYWRbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMjU3LDEyICsyNTgsMTIgQEAKIAlpZiAodmFsIDwgMCB8fCB2YWwgPiAyNTUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5wd21bbnJdICY9IDB4ODE7IC8qIFByZXNlcnZlIGFkZGl0aW9uYWwgYml0cyAqLwogCWRhdGEtPnB3bVtucl0gfD0gUFdNX1RPX1JFRyh2YWwpOwogCXNtc2M0N20xX3dyaXRlX3ZhbHVlKGNsaWVudCwgU01TQzQ3TTFfUkVHX1BXTShuciksCiAJCQkgICAgIGRhdGEtPnB3bVtucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yNzgsMTIgKzI3OSwxMiBAQAogCWlmICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnB3bVtucl0gJj0gMHhGRTsgLyogcHJlc2VydmUgdGhlIG90aGVyIGJpdHMgKi8KIAlkYXRhLT5wd21bbnJdIHw9ICF2YWw7CiAJc21zYzQ3bTFfd3JpdGVfdmFsdWUoY2xpZW50LCBTTVNDNDdNMV9SRUdfUFdNKG5yKSwKIAkJCSAgICAgZGF0YS0+cHdtW25yXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTQwOCwxMyArNDA5LDEzIEBACiAJbmV3X2NsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJaTJjX3NldF9jbGllbnRkYXRhKG5ld19jbGllbnQsIGRhdGEpOwogCW5ld19jbGllbnQtPmFkZHIgPSBhZGRyZXNzOwotCWluaXRfTVVURVgoJmRhdGEtPmxvY2spOworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwogCW5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCW5ld19jbGllbnQtPmRyaXZlciA9ICZzbXNjNDdtMV9kcml2ZXI7CiAJbmV3X2NsaWVudC0+ZmxhZ3MgPSAwOwogCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCAic21zYzQ3bTEiLCBJMkNfTkFNRV9TSVpFKTsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogSWYgbm8gZnVuY3Rpb24gaXMgcHJvcGVybHkgY29uZmlndXJlZCwgdGhlcmUncyBubyBwb2ludCBpbgogCSAgIGFjdHVhbGx5IHJlZ2lzdGVyaW5nIHRoZSBjaGlwLiAqLwpAQCAtNTEyLDE3ICs1MTMsMTcgQEAKIHsKIAlpbnQgcmVzOwogCi0JZG93bigmKChzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqKSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSktPmxvY2spOworCW11dGV4X2xvY2soJigoc3RydWN0IHNtc2M0N20xX2RhdGEgKikgaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpLT5sb2NrKTsKIAlyZXMgPSBpbmJfcChjbGllbnQtPmFkZHIgKyByZWcpOwotCXVwKCYoKHN0cnVjdCBzbXNjNDdtMV9kYXRhICopIGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCYoKHN0cnVjdCBzbXNjNDdtMV9kYXRhICopIGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+bG9jayk7CiAJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIHZvaWQgc21zYzQ3bTFfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlkb3duKCYoKHN0cnVjdCBzbXNjNDdtMV9kYXRhICopIGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+bG9jayk7CisJbXV0ZXhfbG9jaygmKChzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqKSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSktPmxvY2spOwogCW91dGJfcCh2YWx1ZSwgY2xpZW50LT5hZGRyICsgcmVnKTsKLQl1cCgmKChzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqKSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSktPmxvY2spOworCW11dGV4X3VubG9jaygmKChzdHJ1Y3Qgc21zYzQ3bTFfZGF0YSAqKSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSktPmxvY2spOwogfQogCiBzdGF0aWMgc3RydWN0IHNtc2M0N20xX2RhdGEgKnNtc2M0N20xX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LApAQCAtNTMxLDcgKzUzMiw3IEBACiAgCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IHNtc2M0N20xX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikgfHwgaW5pdCkgewogCQlpbnQgaTsKQEAgLTU1OCw3ICs1NTksNyBAQAogCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGRhdGE7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jIGIvZHJpdmVycy9od21vbi92aWE2ODZhLmMKaW5kZXggY2IwMTg0OC4uMTY2Mjk4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi92aWE2ODZhLmMKKysrIGIvZHJpdmVycy9od21vbi92aWE2ODZhLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAKQEAgLTI5Niw3ICsyOTcsNyBAQAogc3RydWN0IHZpYTY4NmFfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOwkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KIApAQCAtMzU1LDExICszNTYsMTEgQEAKIAlzdHJ1Y3QgdmlhNjg2YV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+aW5fbWluW25yXSA9IElOX1RPX1JFRyh2YWwsIG5yKTsKIAl2aWE2ODZhX3dyaXRlX3ZhbHVlKGNsaWVudCwgVklBNjg2QV9SRUdfSU5fTUlOKG5yKSwKIAkJCWRhdGEtPmluX21pbltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2V0X2luX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKQEAgLTM2OCwxMSArMzY5LDExIEBACiAJc3RydWN0IHZpYTY4NmFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX21heFtucl0gPSBJTl9UT19SRUcodmFsLCBucik7CiAJdmlhNjg2YV93cml0ZV92YWx1ZShjbGllbnQsIFZJQTY4NkFfUkVHX0lOX01BWChuciksCiAJCQlkYXRhLT5pbl9tYXhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KICNkZWZpbmUgc2hvd19pbl9vZmZzZXQob2Zmc2V0KQkJCQkJXApAQCAtNDMyLDExICs0MzMsMTEgQEAKIAlzdHJ1Y3QgdmlhNjg2YV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfb3Zlcltucl0gPSBURU1QX1RPX1JFRyh2YWwpOwogCXZpYTY4NmFfd3JpdGVfdmFsdWUoY2xpZW50LCBWSUE2ODZBX1JFR19URU1QX09WRVJbbnJdLAogCQkJICAgIGRhdGEtPnRlbXBfb3Zlcltucl0pOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKQEAgLTQ0NSwxMSArNDQ2LDExIEBACiAJc3RydWN0IHZpYTY4NmFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT50ZW1wX2h5c3RbbnJdID0gVEVNUF9UT19SRUcodmFsKTsKIAl2aWE2ODZhX3dyaXRlX3ZhbHVlKGNsaWVudCwgVklBNjg2QV9SRUdfVEVNUF9IWVNUW25yXSwKIAkJCSAgICBkYXRhLT50ZW1wX2h5c3RbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KICNkZWZpbmUgc2hvd190ZW1wX29mZnNldChvZmZzZXQpCQkJCQlcCkBAIC01MDgsMTAgKzUwOSwxMCBAQAogCXN0cnVjdCB2aWE2ODZhX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+ZmFuX21pbltucl0gPSBGQU5fVE9fUkVHKHZhbCwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAJdmlhNjg2YV93cml0ZV92YWx1ZShjbGllbnQsIFZJQTY4NkFfUkVHX0ZBTl9NSU4obnIrMSksIGRhdGEtPmZhbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNldF9mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLApAQCAtNTIxLDEyICs1MjIsMTIgQEAKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAlpbnQgb2xkOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlvbGQgPSB2aWE2ODZhX3JlYWRfdmFsdWUoY2xpZW50LCBWSUE2ODZBX1JFR19GQU5ESVYpOwogCWRhdGEtPmZhbl9kaXZbbnJdID0gRElWX1RPX1JFRyh2YWwpOwogCW9sZCA9IChvbGQgJiAweDBmKSB8IChkYXRhLT5mYW5fZGl2WzFdIDw8IDYpIHwgKGRhdGEtPmZhbl9kaXZbMF0gPDwgNCk7CiAJdmlhNjg2YV93cml0ZV92YWx1ZShjbGllbnQsIFZJQTY4NkFfUkVHX0ZBTkRJViwgb2xkKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNjM5LDcgKzY0MCw3IEBACiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7CiAKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCiAJCWdvdG8gZXhpdF9mcmVlOwpAQCAtNzMzLDcgKzczNCw3IEBACiAJc3RydWN0IHZpYTY4NmFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQogCSAgICB8fCAhZGF0YS0+dmFsaWQpIHsKQEAgLTc4OCw3ICs3ODksNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi92dDgyMzEuYyBiL2RyaXZlcnMvaHdtb24vdnQ4MjMxLmMKaW5kZXggMjcxZTljYi4uNjg2ZjNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi92dDgyMzEuYworKysgYi9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW50IGZvcmNlX2FkZHI7CkBAIC0xNDgsNyArMTQ5LDcgQEAKIAogc3RydWN0IHZ0ODIzMV9kYXRhIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7Ci0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwpAQCAtMjIzLDEwICsyMjQsMTAgQEAKIAlzdHJ1Y3QgdnQ4MjMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9taW5bbnJdID0gU0VOU09SU19MSU1JVCgoKHZhbCAqIDk1OCkgLyAxMDAwMCkgKyAzLCAwLCAyNTUpOwogCXZ0ODIzMV93cml0ZV92YWx1ZShjbGllbnQsIHJlZ3ZvbHRtaW5bbnJdLCBkYXRhLT5pbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjM5LDEwICsyNDAsMTAgQEAKIAlzdHJ1Y3QgdnQ4MjMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9tYXhbbnJdID0gU0VOU09SU19MSU1JVCgoKHZhbCAqIDk1OCkgLyAxMDAwMCkgKyAzLCAwLCAyNTUpOwogCXZ0ODIzMV93cml0ZV92YWx1ZShjbGllbnQsIHJlZ3ZvbHRtYXhbbnJdLCBkYXRhLT5pbl9tYXhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjgxLDExICsyODIsMTEgQEAKIAlzdHJ1Y3QgdnQ4MjMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9taW5bNV0gPSBTRU5TT1JTX0xJTUlUKCgodmFsICogOTU4ICogMzQpIC8gKDEwMDAwICogNTQpKSArIDMsCiAJCQkJCTAsIDI1NSk7CiAJdnQ4MjMxX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVndm9sdG1pbls1XSwgZGF0YS0+aW5fbWluWzVdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjk2LDExICsyOTcsMTEgQEAKIAlzdHJ1Y3QgdnQ4MjMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9tYXhbNV0gPSBTRU5TT1JTX0xJTUlUKCgodmFsICogOTU4ICogMzQpIC8gKDEwMDAwICogNTQpKSArIDMsCiAJCQkJCTAsIDI1NSk7CiAJdnQ4MjMxX3dyaXRlX3ZhbHVlKGNsaWVudCwgcmVndm9sdG1heFs1XSwgZGF0YS0+aW5fbWF4WzVdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzUxLDEwICszNTIsMTAgQEAKIAlzdHJ1Y3QgdnQ4MjMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9tYXhbMF0gPSBTRU5TT1JTX0xJTUlUKCh2YWwgKyA1MDApIC8gMTAwMCwgMCwgMjU1KTsKIAl2dDgyMzFfd3JpdGVfdmFsdWUoY2xpZW50LCByZWd0ZW1wbWF4WzBdLCBkYXRhLT50ZW1wX21heFswXSk7Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdCBzZXRfdGVtcDBfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0zNjQsMTAgKzM2NSwxMCBAQAogCXN0cnVjdCB2dDgyMzFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT50ZW1wX21pblswXSA9IFNFTlNPUlNfTElNSVQoKHZhbCArIDUwMCkgLyAxMDAwLCAwLCAyNTUpOwogCXZ0ODIzMV93cml0ZV92YWx1ZShjbGllbnQsIHJlZ3RlbXBtaW5bMF0sIGRhdGEtPnRlbXBfbWluWzBdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDA3LDEwICs0MDgsMTAgQEAKIAlzdHJ1Y3QgdnQ4MjMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9tYXhbbnJdID0gU0VOU09SU19MSU1JVChURU1QX01BWE1JTl9UT19SRUcodmFsKSwgMCwgMjU1KTsKIAl2dDgyMzFfd3JpdGVfdmFsdWUoY2xpZW50LCByZWd0ZW1wbWF4W25yXSwgZGF0YS0+dGVtcF9tYXhbbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNDIyLDEwICs0MjMsMTAgQEAKIAlzdHJ1Y3QgdnQ4MjMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9taW5bbnJdID0gU0VOU09SU19MSU1JVChURU1QX01BWE1JTl9UT19SRUcodmFsKSwgMCwgMjU1KTsKIAl2dDgyMzFfd3JpdGVfdmFsdWUoY2xpZW50LCByZWd0ZW1wbWluW25yXSwgZGF0YS0+dGVtcF9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNTIwLDEwICs1MjEsMTAgQEAKIAlzdHJ1Y3QgdnQ4MjMxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmZhbl9taW5bbnJdID0gRkFOX1RPX1JFRyh2YWwsIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOwogCXZ0ODIzMV93cml0ZV92YWx1ZShjbGllbnQsIFZUODIzMV9SRUdfRkFOX01JTihuciksIGRhdGEtPmZhbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNTM5LDcgKzU0MCw3IEBACiAJbG9uZyBtaW4gPSBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltucl0sCiAJCQkJIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgMTogZGF0YS0+ZmFuX2Rpdltucl0gPSAwOyBicmVhazsKIAljYXNlIDI6IGRhdGEtPmZhbl9kaXZbbnJdID0gMTsgYnJlYWs7CkBAIC01NDgsNyArNTQ5LDcgQEAKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhbl9kaXYgdmFsdWUgJWxkIG5vdCBzdXBwb3J0ZWQuIgogCQkgICAgICAgICJDaG9vc2Ugb25lIG9mIDEsIDIsIDQgb3IgOCFcbiIsIHZhbCk7Ci0JCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU1OCw3ICs1NTksNyBAQAogCiAJb2xkID0gKG9sZCAmIDB4MGYpIHwgKGRhdGEtPmZhbl9kaXZbMV0gPDwgNikgfCAoZGF0YS0+ZmFuX2RpdlswXSA8PCA0KTsKIAl2dDgyMzFfd3JpdGVfdmFsdWUoY2xpZW50LCBWVDgyMzFfUkVHX0ZBTkRJViwgb2xkKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNjYwLDcgKzY2MSw3IEBACiAJLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgYW5kIHB1dCBpbnRvIHRoZSBnbG9iYWwgbGlzdCAqLwogCXN0cmxjcHkoY2xpZW50LT5uYW1lLCAidnQ4MjMxIiwgSTJDX05BTUVfU0laRSk7CiAKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCkBAIC03NDUsNyArNzQ2LDcgQEAKIAlpbnQgaTsKIAl1MTYgbG93OwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQogCSAgICB8fCAhZGF0YS0+dmFsaWQpIHsKQEAgLTgwNCw3ICs4MDUsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYyBiL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKaW5kZXggMTJkNzlmNS4uYjZiZDU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCkBAIC00Miw3ICs0Miw5IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlzYS5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgImxtNzUuaCIKIApAQCAtMTc3LDkgKzE3OSw5IEBACiBzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCi0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAKQEAgLTIzMCw3ICsyMzIsNyBAQAogCXN0cnVjdCB3ODM2MjdlaGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXMsIHdvcmRfc2l6ZWQgPSBpc193b3JkX3NpemVkKHJlZyk7CiAKLQlkb3duKCZkYXRhLT5sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAogCXc4MzYyN2VoZl9zZXRfYmFuayhjbGllbnQsIHJlZyk7CiAJb3V0Yl9wKHJlZyAmIDB4ZmYsIGNsaWVudC0+YWRkciArIEFERFJfUkVHX09GRlNFVCk7CkBAIC0yNDIsNyArMjQ0LDcgQEAKIAl9CiAJdzgzNjI3ZWhmX3Jlc2V0X2JhbmsoY2xpZW50LCByZWcpOwogCi0JdXAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtMjUyLDcgKzI1NCw3IEBACiAJc3RydWN0IHc4MzYyN2VoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHdvcmRfc2l6ZWQgPSBpc193b3JkX3NpemVkKHJlZyk7CiAKLQlkb3duKCZkYXRhLT5sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAogCXc4MzYyN2VoZl9zZXRfYmFuayhjbGllbnQsIHJlZyk7CiAJb3V0Yl9wKHJlZyAmIDB4ZmYsIGNsaWVudC0+YWRkciArIEFERFJfUkVHX09GRlNFVCk7CkBAIC0yNjQsNyArMjY2LDcgQEAKIAlvdXRiX3AodmFsdWUgJiAweGZmLCBjbGllbnQtPmFkZHIgKyBEQVRBX1JFR19PRkZTRVQpOwogCXc4MzYyN2VoZl9yZXNldF9iYW5rKGNsaWVudCwgcmVnKTsKIAotCXVwKCZkYXRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0zMjIsNyArMzI0LDcgQEAKIAlzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWikKIAkgfHwgIWRhdGEtPnZhbGlkKSB7CkBAIC0zOTcsNyArMzk5LDcgQEAKIAkJZGF0YS0+dmFsaWQgPSAxOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGRhdGE7CiB9CiAKQEAgLTQwNyw5ICs0MDksMTIgQEAKIAogI2RlZmluZSBzaG93X2Zhbl9yZWcocmVnKSBcCiBzdGF0aWMgc3NpemVfdCBcCi1zaG93XyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpIFwKK3Nob3dfIyNyZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAorCSAgIGNoYXIgKmJ1ZikgXAogeyBcCiAJc3RydWN0IHc4MzYyN2VoZl9kYXRhICpkYXRhID0gdzgzNjI3ZWhmX3VwZGF0ZV9kZXZpY2UoZGV2KTsgXAorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7IFwKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7IFwKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgXAogCQkgICAgICAgZmFuX2Zyb21fcmVnKGRhdGEtPnJlZ1tucl0sIFwKIAkJCQkgICAgZGl2X2Zyb21fcmVnKGRhdGEtPmZhbl9kaXZbbnJdKSkpOyBcCkBAIC00MTgsMjMgKzQyMywyOCBAQAogc2hvd19mYW5fcmVnKGZhbl9taW4pOwogCiBzdGF0aWMgc3NpemVfdAotc2hvd19mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCitzaG93X2Zhbl9kaXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgKmRhdGEgPSB3ODM2MjdlaGZfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLAotCQkgICAgICAgZGl2X2Zyb21fcmVnKGRhdGEtPmZhbl9kaXZbbnJdKSk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRpdl9mcm9tX3JlZyhkYXRhLT5mYW5fZGl2W25yXSkpOwogfQogCiBzdGF0aWMgc3NpemVfdAotc3RvcmVfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgbnIpCitzdG9yZV9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAl1bnNpZ25lZCBpbnQgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAJdW5zaWduZWQgaW50IHJlZzsKIAl1OCBuZXdfZGl2OwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlpZiAoIXZhbCkgewogCQkvKiBObyBtaW4gbGltaXQsIGFsYXJtIGRpc2FibGVkICovCiAJCWRhdGEtPmZhbl9taW5bbnJdID0gMjU1OwpAQCAtNDgyLDYzICs0OTIsNDYgQEAKIAl9CiAJdzgzNjI3ZWhmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNjI3RUhGX1JFR19GQU5fTUlOW25yXSwKIAkJCSAgICAgIGRhdGEtPmZhbl9taW5bbnJdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQogCi0jZGVmaW5lIHN5c2ZzX2Zhbl9vZmZzZXQob2Zmc2V0KSBcCi1zdGF0aWMgc3NpemVfdCBcCi1zaG93X3JlZ19mYW5fIyNvZmZzZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAotCQkgICAgICBjaGFyICpidWYpIFwKLXsgXAotCXJldHVybiBzaG93X2ZhbihkZXYsIGJ1Ziwgb2Zmc2V0LTEpOyBcCi19IFwKLXN0YXRpYyBERVZJQ0VfQVRUUihmYW4jI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLCBcCi0JCSAgIHNob3dfcmVnX2Zhbl8jI29mZnNldCwgTlVMTCk7CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9mYW5faW5wdXRbXSA9IHsKKwlTRU5TT1JfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIoZmFuMl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKGZhbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAyKSwKKwlTRU5TT1JfQVRUUihmYW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMyksCisJU0VOU09SX0FUVFIoZmFuNV9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDQpLAorfTsKIAotI2RlZmluZSBzeXNmc19mYW5fbWluX29mZnNldChvZmZzZXQpIFwKLXN0YXRpYyBzc2l6ZV90IFwKLXNob3dfcmVnX2ZhbiMjb2Zmc2V0IyNfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKLQkJCSAgIGNoYXIgKmJ1ZikgXAoteyBcCi0JcmV0dXJuIHNob3dfZmFuX21pbihkZXYsIGJ1Ziwgb2Zmc2V0LTEpOyBcCi19IFwKLXN0YXRpYyBzc2l6ZV90IFwKLXN0b3JlX3JlZ19mYW4jI29mZnNldCMjX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCi0JCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKLXsgXAotCXJldHVybiBzdG9yZV9mYW5fbWluKGRldiwgYnVmLCBjb3VudCwgb2Zmc2V0LTEpOyBcCi19IFwKLXN0YXRpYyBERVZJQ0VfQVRUUihmYW4jI29mZnNldCMjX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIFwKLQkJICAgc2hvd19yZWdfZmFuIyNvZmZzZXQjI19taW4sIFwKLQkJICAgc3RvcmVfcmVnX2ZhbiMjb2Zmc2V0IyNfbWluKTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX2Zhbl9taW5bXSA9IHsKKwlTRU5TT1JfQVRUUihmYW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwKKwkJICAgIHN0b3JlX2Zhbl9taW4sIDApLAorCVNFTlNPUl9BVFRSKGZhbjJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluLAorCQkgICAgc3RvcmVfZmFuX21pbiwgMSksCisJU0VOU09SX0FUVFIoZmFuM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCisJCSAgICBzdG9yZV9mYW5fbWluLCAyKSwKKwlTRU5TT1JfQVRUUihmYW40X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwKKwkJICAgIHN0b3JlX2Zhbl9taW4sIDMpLAorCVNFTlNPUl9BVFRSKGZhbjVfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluLAorCQkgICAgc3RvcmVfZmFuX21pbiwgNCksCit9OwogCi0jZGVmaW5lIHN5c2ZzX2Zhbl9kaXZfb2Zmc2V0KG9mZnNldCkgXAotc3RhdGljIHNzaXplX3QgXAotc2hvd19yZWdfZmFuIyNvZmZzZXQjI19kaXYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAotCQkJICAgY2hhciAqYnVmKSBcCi17IFwKLQlyZXR1cm4gc2hvd19mYW5fZGl2KGRldiwgYnVmLCBvZmZzZXQgLSAxKTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19kaXYsIFNfSVJVR08sIFwKLQkJICAgc2hvd19yZWdfZmFuIyNvZmZzZXQjI19kaXYsIE5VTEwpOworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfZmFuX2RpdltdID0geworCVNFTlNPUl9BVFRSKGZhbjFfZGl2LCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGZhbjJfZGl2LCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIE5VTEwsIDEpLAorCVNFTlNPUl9BVFRSKGZhbjNfZGl2LCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIE5VTEwsIDIpLAorCVNFTlNPUl9BVFRSKGZhbjRfZGl2LCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGZhbjVfZGl2LCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIE5VTEwsIDQpLAorfTsKIAotc3lzZnNfZmFuX29mZnNldCgxKTsKLXN5c2ZzX2Zhbl9taW5fb2Zmc2V0KDEpOwotc3lzZnNfZmFuX2Rpdl9vZmZzZXQoMSk7Ci1zeXNmc19mYW5fb2Zmc2V0KDIpOwotc3lzZnNfZmFuX21pbl9vZmZzZXQoMik7Ci1zeXNmc19mYW5fZGl2X29mZnNldCgyKTsKLXN5c2ZzX2Zhbl9vZmZzZXQoMyk7Ci1zeXNmc19mYW5fbWluX29mZnNldCgzKTsKLXN5c2ZzX2Zhbl9kaXZfb2Zmc2V0KDMpOwotc3lzZnNfZmFuX29mZnNldCg0KTsKLXN5c2ZzX2Zhbl9taW5fb2Zmc2V0KDQpOwotc3lzZnNfZmFuX2Rpdl9vZmZzZXQoNCk7Ci1zeXNmc19mYW5fb2Zmc2V0KDUpOwotc3lzZnNfZmFuX21pbl9vZmZzZXQoNSk7Ci1zeXNmc19mYW5fZGl2X29mZnNldCg1KTsKK3N0YXRpYyB2b2lkIGRldmljZV9jcmVhdGVfZmlsZV9mYW4oc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaSkKK3sKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2Zhbl9pbnB1dFtpXS5kZXZfYXR0cik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV9mYW5fZGl2W2ldLmRldl9hdHRyKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2Zhbl9taW5baV0uZGV2X2F0dHIpOworfQogCiAjZGVmaW5lIHNob3dfdGVtcDFfcmVnKHJlZykgXAogc3RhdGljIHNzaXplX3QgXApAQCAtNTYxLDI3ICs1NTQsMjQgQEAKIAlzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAogCXUzMiB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsgXAogIFwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlkYXRhLT50ZW1wMV8jI3JlZyA9IHRlbXAxX3RvX3JlZyh2YWwpOyBcCiAJdzgzNjI3ZWhmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNjI3RUhGX1JFR19URU1QMV8jI1JFRywgXAogCQkJICAgICAgZGF0YS0+dGVtcDFfIyNyZWcpOyBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCiB9CiBzdG9yZV90ZW1wMV9yZWcoT1ZFUiwgbWF4KTsKIHN0b3JlX3RlbXAxX3JlZyhIWVNULCBtYXhfaHlzdCk7CiAKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMSwgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPfCBTX0lXVVNSLAotCQkgICBzaG93X3RlbXAxX21heCwgc3RvcmVfdGVtcDFfbWF4KTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHT3wgU19JV1VTUiwKLQkJICAgc2hvd190ZW1wMV9tYXhfaHlzdCwgc3RvcmVfdGVtcDFfbWF4X2h5c3QpOwotCiAjZGVmaW5lIHNob3dfdGVtcF9yZWcocmVnKSBcCiBzdGF0aWMgc3NpemVfdCBcCi1zaG93XyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKSBcCitzaG93XyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkgICBjaGFyICpidWYpIFwKIHsgXAogCXN0cnVjdCB3ODM2MjdlaGZfZGF0YSAqZGF0YSA9IHc4MzYyN2VoZl91cGRhdGVfZGV2aWNlKGRldik7IFwKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOyBcCisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OyBcCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFwKIAkJICAgICAgIExNNzVfVEVNUF9GUk9NX1JFRyhkYXRhLT5yZWdbbnJdKSk7IFwKIH0KQEAgLTU5MSw1NSArNTgxLDQyIEBACiAKICNkZWZpbmUgc3RvcmVfdGVtcF9yZWcoUkVHLCByZWcpIFwKIHN0YXRpYyBzc2l6ZV90IFwKLXN0b3JlXyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgbnIpIFwKK3N0b3JlXyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKIHsgXAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKIAlzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7IFwKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7IFwKIAl1MzIgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7IFwKICBcCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJZGF0YS0+cmVnW25yXSA9IExNNzVfVEVNUF9UT19SRUcodmFsKTsgXAogCXc4MzYyN2VoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4MzYyN0VIRl9SRUdfVEVNUF8jI1JFR1tucl0sIFwKIAkJCSAgICAgIGRhdGEtPnJlZ1tucl0pOyBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCiB9CiBzdG9yZV90ZW1wX3JlZyhPVkVSLCB0ZW1wX21heCk7CiBzdG9yZV90ZW1wX3JlZyhIWVNULCB0ZW1wX21heF9oeXN0KTsKIAotI2RlZmluZSBzeXNmc190ZW1wX29mZnNldChvZmZzZXQpIFwKLXN0YXRpYyBzc2l6ZV90IFwKLXNob3dfcmVnX3RlbXAjI29mZnNldCAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAotCQkgICAgICAgY2hhciAqYnVmKSBcCi17IFwKLQlyZXR1cm4gc2hvd190ZW1wKGRldiwgYnVmLCBvZmZzZXQgLSAyKTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sIFwKLQkJICAgc2hvd19yZWdfdGVtcCMjb2Zmc2V0LCBOVUxMKTsKLQotI2RlZmluZSBzeXNmc190ZW1wX3JlZ19vZmZzZXQocmVnLCBvZmZzZXQpIFwKLXN0YXRpYyBzc2l6ZV90IFwKLXNob3dfcmVnX3RlbXAjI29mZnNldCMjXyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKLQkJCSAgICAgIGNoYXIgKmJ1ZikgXAoteyBcCi0JcmV0dXJuIHNob3dfdGVtcF8jI3JlZyhkZXYsIGJ1Ziwgb2Zmc2V0IC0gMik7IFwKLX0gXAotc3RhdGljIHNzaXplX3QgXAotc3RvcmVfcmVnX3RlbXAjI29mZnNldCMjXyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKLQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAoteyBcCi0JcmV0dXJuIHN0b3JlX3RlbXBfIyNyZWcoZGV2LCBidWYsIGNvdW50LCBvZmZzZXQgLSAyKTsgXAotfSBcCi1zdGF0aWMgREVWSUNFX0FUVFIodGVtcCMjb2Zmc2V0IyNfIyNyZWcsIFNfSVJVR098IFNfSVdVU1IsIFwKLQkJICAgc2hvd19yZWdfdGVtcCMjb2Zmc2V0IyNfIyNyZWcsIFwKLQkJICAgc3RvcmVfcmVnX3RlbXAjI29mZnNldCMjXyMjcmVnKTsKLQotc3lzZnNfdGVtcF9vZmZzZXQoMik7Ci1zeXNmc190ZW1wX3JlZ19vZmZzZXQobWF4LCAyKTsKLXN5c2ZzX3RlbXBfcmVnX29mZnNldChtYXhfaHlzdCwgMik7Ci1zeXNmc190ZW1wX29mZnNldCgzKTsKLXN5c2ZzX3RlbXBfcmVnX29mZnNldChtYXgsIDMpOwotc3lzZnNfdGVtcF9yZWdfb2Zmc2V0KG1heF9oeXN0LCAzKTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBbXSA9IHsKKwlTRU5TT1JfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMSwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCksCisJU0VOU09SX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMV9tYXgsCisJCSAgICBzdG9yZV90ZW1wMV9tYXgsIDApLAorCVNFTlNPUl9BVFRSKHRlbXAyX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcF9tYXgsCisJCSAgICBzdG9yZV90ZW1wX21heCwgMCksCisJU0VOU09SX0FUVFIodGVtcDNfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wX21heCwKKwkJICAgIHN0b3JlX3RlbXBfbWF4LCAxKSwKKwlTRU5TT1JfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcDFfbWF4X2h5c3QsCisJCSAgICBzdG9yZV90ZW1wMV9tYXhfaHlzdCwgMCksCisJU0VOU09SX0FUVFIodGVtcDJfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXBfbWF4X2h5c3QsCisJCSAgICBzdG9yZV90ZW1wX21heF9oeXN0LCAwKSwKKwlTRU5TT1JfQVRUUih0ZW1wM19tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcF9tYXhfaHlzdCwKKwkJICAgIHN0b3JlX3RlbXBfbWF4X2h5c3QsIDEpLAorfTsKIAogLyoKICAqIERyaXZlciBhbmQgY2xpZW50IG1hbmFnZW1lbnQKQEAgLTY3Myw2ICs2NTAsNyBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHc4MzYyN2VoZl9kYXRhICpkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgaSwgZXJyID0gMDsKIAogCWlmICghcmVxdWVzdF9yZWdpb24oYWRkcmVzcyArIFJFR0lPTl9PRkZTRVQsIFJFR0lPTl9MRU5HVEgsCkBAIC02ODksMTQgKzY2NywxNSBAQAogCWNsaWVudCA9ICZkYXRhLT5jbGllbnQ7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CiAJY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQlpbml0X01VVEVYKCZkYXRhLT5sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKIAljbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCWNsaWVudC0+ZHJpdmVyID0gJnc4MzYyN2VoZl9kcml2ZXI7CiAJY2xpZW50LT5mbGFncyA9IDA7CisJZGV2ID0gJmNsaWVudC0+ZGV2OwogCiAJc3RybGNweShjbGllbnQtPm5hbWUsICJ3ODM2MjdlaGYiLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIGkyYyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCkpKQpAQCAtNzIwLDQyICs2OTksMTggQEAKIAkJZGF0YS0+aGFzX2ZhbiB8PSAoMSA8PCA0KTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKIAkJZ290byBleGl0X2RldGFjaDsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjFfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9kaXYpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2Rpdik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjNfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4zX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjNfZGl2KTsKLQotCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMykpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjRfaW5wdXQpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuNF9taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuNF9kaXYpOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCBpKSkKKwkJCWRldmljZV9jcmVhdGVfZmlsZV9mYW4oZGV2LCBpKTsKIAl9Ci0JaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCA0KSkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuNV9pbnB1dCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW41X21pbik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW41X2Rpdik7Ci0JfQotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX21heF9oeXN0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wM19tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wM19tYXhfaHlzdCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3RlbXApOyBpKyspCisJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcFtpXS5kZXZfYXR0cik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM2MjdoZi5jIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCmluZGV4IDdlYTQ0MWQ0Li43MWZiN2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4MzYyN2hmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCkBAIC0yOCw2ICsyOCw3IEBACiAgICAgdzgzNjI3aGYJOQkzCTIJMwkweDIwCTB4NWNhMwlubwl5ZXMoTFBDKQogICAgIHc4MzYyN3RoZgk3CTMJMwkzCTB4OTAJMHg1Y2EzCW5vCXllcyhMUEMpCiAgICAgdzgzNjM3aGYJNwkzCTMJMwkweDgwCTB4NWNhMwlubwl5ZXMoTFBDKQorICAgIHc4MzY4N3RoZgk3CTMJMwkzCTB4OTAJMHg1Y2EzCW5vCXllcyhMUEMpCiAgICAgdzgzNjk3aGYJOAkyCTIJMgkweDYwCTB4NWNhMwlubwl5ZXMoTFBDKQogCiAgICAgRm9yIG90aGVyIHdpbmJvbmQgY2hpcHMsIGFuZCBmb3IgaTJjIHN1cHBvcnQgaW4gdGhlIGFib3ZlIGNoaXBzLApAQCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJsbTc1LmgiCiAKQEAgLTYyLDcgKzY0LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhZGRyZXNzOwogCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotZW51bSBjaGlwcyB7IGFueV9jaGlwLCB3ODM2MjdoZiwgdzgzNjI3dGhmLCB3ODM2OTdoZiwgdzgzNjM3aGYgfTsKK2VudW0gY2hpcHMgeyBhbnlfY2hpcCwgdzgzNjI3aGYsIHc4MzYyN3RoZiwgdzgzNjk3aGYsIHc4MzYzN2hmLCB3ODM2ODd0aGYgfTsKIAogc3RhdGljIGludCByZXNldDsKIG1vZHVsZV9wYXJhbShyZXNldCwgYm9vbCwgMCk7CkBAIC0xMDAsNiArMTAyLDEwIEBACiAjZGVmaW5lIFc4MzYyN1RIRl9HUElPNV9JT1NSCTB4ZjMgLyogdzgzNjI3dGhmIG9ubHkgKi8KICNkZWZpbmUgVzgzNjI3VEhGX0dQSU81X0RSCTB4ZjQgLyogdzgzNjI3dGhmIG9ubHkgKi8KIAorI2RlZmluZSBXODM2ODdUSEZfVklEX0VOCTB4MjkgLyogdzgzNjg3dGhmIG9ubHkgKi8KKyNkZWZpbmUgVzgzNjg3VEhGX1ZJRF9DRkcJMHhGMCAvKiB3ODM2ODd0aGYgb25seSAqLworI2RlZmluZSBXODM2ODdUSEZfVklEX0RBVEEJMHhGMSAvKiB3ODM2ODd0aGYgb25seSAqLworCiBzdGF0aWMgaW5saW5lIHZvaWQKIHN1cGVyaW9fb3V0YihpbnQgcmVnLCBpbnQgdmFsKQogewpAQCAtMTM4LDYgKzE0NCw3IEBACiAjZGVmaW5lIFc2MjdUSEZfREVWSUQgMHg4MgogI2RlZmluZSBXNjk3X0RFVklEIDB4NjAKICNkZWZpbmUgVzYzN19ERVZJRCAweDcwCisjZGVmaW5lIFc2ODdUSEZfREVWSUQgMHg4NQogI2RlZmluZSBXSU5CX0FDVF9SRUcgMHgzMAogI2RlZmluZSBXSU5CX0JBU0VfUkVHIDB4NjAKIC8qIENvbnN0YW50cyBzcGVjaWZpZWQgYmVsb3cgKi8KQEAgLTIwMSwxMSArMjA4LDExIEBACiAjZGVmaW5lIFc4MzYyN0hGX1JFR19QV00xIDB4NUEKICNkZWZpbmUgVzgzNjI3SEZfUkVHX1BXTTIgMHg1QgogCi0jZGVmaW5lIFc4MzYyN1RIRl9SRUdfUFdNMQkJMHgwMQkvKiA2OTdIRiBhbmQgNjM3SEYgdG9vICovCi0jZGVmaW5lIFc4MzYyN1RIRl9SRUdfUFdNMgkJMHgwMwkvKiA2OTdIRiBhbmQgNjM3SEYgdG9vICovCi0jZGVmaW5lIFc4MzYyN1RIRl9SRUdfUFdNMwkJMHgxMQkvKiA2MzdIRiB0b28gKi8KKyNkZWZpbmUgVzgzNjI3VEhGX1JFR19QV00xCQkweDAxCS8qIDY5N0hGLzYzN0hGLzY4N1RIRiB0b28gKi8KKyNkZWZpbmUgVzgzNjI3VEhGX1JFR19QV00yCQkweDAzCS8qIDY5N0hGLzYzN0hGLzY4N1RIRiB0b28gKi8KKyNkZWZpbmUgVzgzNjI3VEhGX1JFR19QV00zCQkweDExCS8qIDYzN0hGLzY4N1RIRiB0b28gKi8KIAotI2RlZmluZSBXODM2MjdUSEZfUkVHX1ZSTV9PVlRfQ0ZHIAkweDE4CS8qIDYzN0hGIHRvbyAqLworI2RlZmluZSBXODM2MjdUSEZfUkVHX1ZSTV9PVlRfQ0ZHIAkweDE4CS8qIDYzN0hGLzY4N1RIRiB0b28gKi8KIAogc3RhdGljIGNvbnN0IHU4IHJlZ3B3bV82MjdoZltdID0geyBXODM2MjdIRl9SRUdfUFdNMSwgVzgzNjI3SEZfUkVHX1BXTTIgfTsKIHN0YXRpYyBjb25zdCB1OCByZWdwd21bXSA9IHsgVzgzNjI3VEhGX1JFR19QV00xLCBXODM2MjdUSEZfUkVHX1BXTTIsCkBAIC0yODUsMTAgKzI5MiwxMCBAQAogc3RydWN0IHc4MzYyN2hmX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCWVudW0gY2hpcHMgdHlwZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgdXBkYXRlX2xvY2s7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwogCkBAIC0zMTgsMTYgKzMyNSwxNSBAQAogCQkJCSAgIERlZmF1bHQgPSAzNDM1LgogCQkJCSAgIE90aGVyIEJldGFzIHVuaW1wbGVtZW50ZWQgKi8KIAl1OCB2cm07Ci0JdTggdnJtX292dDsJCS8qIFJlZ2lzdGVyIHZhbHVlLCA2Mjd0aGYgJiA2MzdoZiBvbmx5ICovCisJdTggdnJtX292dDsJCS8qIFJlZ2lzdGVyIHZhbHVlLCA2MjdUSEYvNjM3SEYvNjg3VEhGIG9ubHkgKi8KIH07CiAKIAogc3RhdGljIGludCB3ODM2MjdoZl9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyBpbnQgdzgzNjI3aGZfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAotc3RhdGljIGludCB3ODM2MjdoZl9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWdpc3Rlcik7Ci1zdGF0aWMgaW50IHc4MzYyN2hmX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWdpc3RlciwKLQkJCSAgICAgICB1MTYgdmFsdWUpOworc3RhdGljIGludCB3ODM2MjdoZl9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcpOworc3RhdGljIGludCB3ODM2MjdoZl93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnLCB1MTYgdmFsdWUpOwogc3RhdGljIHN0cnVjdCB3ODM2MjdoZl9kYXRhICp3ODM2MjdoZl91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB3ODM2MjdoZl9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIApAQCAtMzYwLDEyICszNjYsMTIgQEAKIAkgXAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOyBcCiAJIFwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlkYXRhLT5pbl8jI3JlZ1tucl0gPSBJTl9UT19SRUcodmFsKTsgXAogCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSU5fIyNSRUcobnIpLCBcCiAJCQkgICAgZGF0YS0+aW5fIyNyZWdbbnJdKTsgXAogCSBcCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJcmV0dXJuIGNvdW50OyBcCiB9CiBzdG9yZV9pbl9yZWcoTUlOLCBtaW4pCkBAIC00MTMsNyArNDE5LDggQEAKIAlsb25nIGluMDsKIAogCWlmICgoZGF0YS0+dnJtX292dCAmIDB4MDEpICYmCi0JCSh3ODM2Mjd0aGYgPT0gZGF0YS0+dHlwZSB8fCB3ODM2MzdoZiA9PSBkYXRhLT50eXBlKSkKKwkJKHc4MzYyN3RoZiA9PSBkYXRhLT50eXBlIHx8IHc4MzYzN2hmID09IGRhdGEtPnR5cGUKKwkJIHx8IHc4MzY4N3RoZiA9PSBkYXRhLT50eXBlKSkKIAogCQkvKiB1c2UgVlJNOSBjYWxjdWxhdGlvbiAqLwogCQlpbjAgPSAobG9uZykoKHJlZyAqIDQ4OCArIDcwMDAwICsgNTApIC8gMTAwKTsKQEAgLTQ1MSwxMCArNDU4LDExIEBACiAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJCiAJaWYgKChkYXRhLT52cm1fb3Z0ICYgMHgwMSkgJiYKLQkJKHc4MzYyN3RoZiA9PSBkYXRhLT50eXBlIHx8IHc4MzYzN2hmID09IGRhdGEtPnR5cGUpKQorCQkodzgzNjI3dGhmID09IGRhdGEtPnR5cGUgfHwgdzgzNjM3aGYgPT0gZGF0YS0+dHlwZQorCQkgfHwgdzgzNjg3dGhmID09IGRhdGEtPnR5cGUpKQogCiAJCS8qIHVzZSBWUk05IGNhbGN1bGF0aW9uICovCiAJCWRhdGEtPmluX21pblswXSA9CkBAIC00NjUsNyArNDczLDcgQEAKIAkJZGF0YS0+aW5fbWluWzBdID0gSU5fVE9fUkVHKHZhbCk7CiAKIAl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0lOX01JTigwKSwgZGF0YS0+aW5fbWluWzBdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDc4LDEwICs0ODYsMTEgQEAKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICgoZGF0YS0+dnJtX292dCAmIDB4MDEpICYmCi0JCSh3ODM2Mjd0aGYgPT0gZGF0YS0+dHlwZSB8fCB3ODM2MzdoZiA9PSBkYXRhLT50eXBlKSkKKwkJKHc4MzYyN3RoZiA9PSBkYXRhLT50eXBlIHx8IHc4MzYzN2hmID09IGRhdGEtPnR5cGUKKwkJIHx8IHc4MzY4N3RoZiA9PSBkYXRhLT50eXBlKSkKIAkJCiAJCS8qIHVzZSBWUk05IGNhbGN1bGF0aW9uICovCiAJCWRhdGEtPmluX21heFswXSA9CkBAIC00OTIsNyArNTAxLDcgQEAKIAkJZGF0YS0+aW5fbWF4WzBdID0gSU5fVE9fUkVHKHZhbCk7CiAKIAl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0lOX01BWCgwKSwgZGF0YS0+aW5fbWF4WzBdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNTI5LDEzICs1MzgsMTMgQEAKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5mYW5fbWluW25yIC0gMV0gPQogCSAgICBGQU5fVE9fUkVHKHZhbCwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnIgLSAxXSkpOwogCXc4MzYyN2hmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfRkFOX01JTihuciksCiAJCQkgICAgZGF0YS0+ZmFuX21pbltuciAtIDFdKTsKIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC01OTcsNyArNjA2LDcgQEAKIAkgXAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOyBcCiAJIFwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAkgXAogCWlmIChuciA+PSAyKSB7CS8qIFRFTVAyIGFuZCBURU1QMyAqLyBcCiAJCWRhdGEtPnRlbXBfIyNyZWcjI19hZGRbbnItMl0gPSBMTTc1X1RFTVBfVE9fUkVHKHZhbCk7IFwKQEAgLTYwOSw3ICs2MTgsNyBAQAogCQkJZGF0YS0+dGVtcF8jI3JlZyk7IFwKIAl9IFwKIAkgXAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAogCXJldHVybiBjb3VudDsgXAogfQogc3RvcmVfdGVtcF9yZWcoT1ZFUiwgbWF4KTsKQEAgLTcxOCw3ICs3MjcsNyBAQAogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHVwZGF0ZV9tYXNrID09IEJFRVBfTUFTSykgewkvKiBXZSBhcmUgc3RvcmluZyBiZWVwX21hc2sgKi8KIAkJZGF0YS0+YmVlcF9tYXNrID0gQkVFUF9NQVNLX1RPX1JFRyh2YWwpOwpAQCAtNzM2LDcgKzc0NSw3IEBACiAJdzgzNjI3aGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0lOVFMyLAogCQkJICAgIHZhbDIgfCBkYXRhLT5iZWVwX2VuYWJsZSA8PCA3KTsKIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC03ODMsNyArNzkyLDcgQEAKIAl1OCByZWc7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBTYXZlIGZhbl9taW4gKi8KIAltaW4gPSBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltucl0sCkBAIC04MDUsNyArODE0LDcgQEAKIAlkYXRhLT5mYW5fbWluW25yXSA9IEZBTl9UT19SRUcobWluLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKIAl3ODM2MjdoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0ZBTl9NSU4obnIrMSksIGRhdGEtPmZhbl9taW5bbnJdKTsKIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC04NDgsNyArODU3LDcgQEAKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmIChkYXRhLT50eXBlID09IHc4MzYyN3RoZikgewogCQkvKiBiaXRzIDAtMyBhcmUgcmVzZXJ2ZWQgIGluIDYyN1RIRiAqLwpAQCAtODY1LDcgKzg3NCw3IEBACiAJCQkJICAgICBkYXRhLT5wd21bbnIgLSAxXSk7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTkwNyw3ICs5MTYsNyBAQAogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIDE6CQkvKiBQSUkvQ2VsZXJvbiBkaW9kZSAqLwpAQCAtOTQxLDcgKzk1MCw3IEBACiAJCWJyZWFrOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC05ODAsNyArOTg5LDggQEAKIAlpZih2YWwgIT0gVzYyN19ERVZJRCAmJgogCSAgIHZhbCAhPSBXNjI3VEhGX0RFVklEICYmCiAJICAgdmFsICE9IFc2OTdfREVWSUQgJiYKLQkgICB2YWwgIT0gVzYzN19ERVZJRCkgeworCSAgIHZhbCAhPSBXNjM3X0RFVklEICYmCisJICAgdmFsICE9IFc2ODdUSEZfREVWSUQpIHsKIAkJc3VwZXJpb19leGl0KCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTEwMzQsNiArMTA0NCw4IEBACiAJCWtpbmQgPSB3ODM2Mjd0aGY7CiAJZWxzZSBpZih2YWwgPT0gVzYzN19ERVZJRCkKIAkJa2luZCA9IHc4MzYzN2hmOworCWVsc2UgaWYgKHZhbCA9PSBXNjg3VEhGX0RFVklEKQorCQlraW5kID0gdzgzNjg3dGhmOwogCWVsc2UgewogCQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LAogCQkJICJVbnN1cHBvcnRlZCBjaGlwIChkZXZfaWQ9MHglMDJYKS5cbiIsIHZhbCk7CkBAIC0xMDU3LDcgKzEwNjksNyBAQAogCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwogCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKIAluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQlpbml0X01VVEVYKCZkYXRhLT5sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKIAluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKIAluZXdfY2xpZW50LT5kcml2ZXIgPSAmdzgzNjI3aGZfZHJpdmVyOwogCW5ld19jbGllbnQtPmZsYWdzID0gMDsKQEAgLTEwNzEsMTMgKzEwODMsMTUgQEAKIAkJY2xpZW50X25hbWUgPSAidzgzNjk3aGYiOwogCX0gZWxzZSBpZiAoa2luZCA9PSB3ODM2MzdoZikgewogCQljbGllbnRfbmFtZSA9ICJ3ODM2MzdoZiI7CisJfSBlbHNlIGlmIChraW5kID09IHc4MzY4N3RoZikgeworCQljbGllbnRfbmFtZSA9ICJ3ODM2ODd0aGYiOwogCX0KIAogCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBwdXQgaW50byB0aGUgZ2xvYmFsIGxpc3QgKi8KIAlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT50eXBlID0ga2luZDsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KIAlpZiAoKGVyciA9IGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSkKQEAgLTExMDYsNyArMTEyMCw3IEBACiAJZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDIpOwogCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCAzKTsKIAlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgNCk7Ci0JaWYgKGtpbmQgIT0gdzgzNjI3dGhmICYmIGtpbmQgIT0gdzgzNjM3aGYpIHsKKwlpZiAoa2luZCA9PSB3ODM2MjdoZiB8fCBraW5kID09IHc4MzY5N2hmKSB7CiAJCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCA1KTsKIAkJZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDYpOwogCX0KQEAgLTExMzksNyArMTE1Myw3IEBACiAKIAlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtKG5ld19jbGllbnQsIDEpOwogCWRldmljZV9jcmVhdGVfZmlsZV9wd20obmV3X2NsaWVudCwgMik7Ci0JaWYgKGtpbmQgPT0gdzgzNjI3dGhmIHx8IGtpbmQgPT0gdzgzNjM3aGYpCisJaWYgKGtpbmQgPT0gdzgzNjI3dGhmIHx8IGtpbmQgPT0gdzgzNjM3aGYgfHwga2luZCA9PSB3ODM2ODd0aGYpCiAJCWRldmljZV9jcmVhdGVfZmlsZV9wd20obmV3X2NsaWVudCwgMyk7CiAKIAlkZXZpY2VfY3JlYXRlX2ZpbGVfc2Vuc29yKG5ld19jbGllbnQsIDEpOwpAQCAtMTE4Nyw3ICsxMjAxLDcgQEAKIAlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXMsIHdvcmRfc2l6ZWQ7CiAKLQlkb3duKCZkYXRhLT5sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKIAl3b3JkX3NpemVkID0gKCgocmVnICYgMHhmZjAwKSA9PSAweDEwMCkKIAkJICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKIAkJICAmJiAoKChyZWcgJiAweDAwZmYpID09IDB4NTApCkBAIC0xMjEzLDcgKzEyMjcsNyBAQAogCQkgICAgICAgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9BRERSX1JFR19PRkZTRVQpOwogCQlvdXRiX3AoMCwgY2xpZW50LT5hZGRyICsgVzgzNzgxRF9EQVRBX1JFR19PRkZTRVQpOwogCX0KLQl1cCgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xMjQ3LDEyICsxMjYxLDM5IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIGludCB3ODM2ODd0aGZfcmVhZF92aWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmVzID0gMHhmZjsKKworCXN1cGVyaW9fZW50ZXIoKTsKKwlzdXBlcmlvX3NlbGVjdChXODM2MjdIRl9MRF9IV00pOworCisJLyogTWFrZSBzdXJlIHRoZXNlIEdQSU8gcGlucyBhcmUgZW5hYmxlZCAqLworCWlmICghKHN1cGVyaW9faW5iKFc4MzY4N1RIRl9WSURfRU4pICYgKDEgPDwgMikpKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiVklEIGRpc2FibGVkLCBubyBWSUQgZnVuY3Rpb25cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSBwaW5zIGFyZSBjb25maWd1cmVkIGZvciBpbnB1dCAqLworCWlmICghKHN1cGVyaW9faW5iKFc4MzY4N1RIRl9WSURfQ0ZHKSAmICgxIDw8IDQpKSkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlZJRCBjb25maWd1cmVkIGFzIG91dHB1dCwgIgorCQkJIm5vIFZJRCBmdW5jdGlvblxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXMgPSBzdXBlcmlvX2luYihXODM2ODdUSEZfVklEX0RBVEEpICYgMHgzZjsKKworZXhpdDoKKwlzdXBlcmlvX2V4aXQoKTsKKwlyZXR1cm4gcmVzOworfQorCiBzdGF0aWMgaW50IHc4MzYyN2hmX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHUxNiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB3b3JkX3NpemVkOwogCi0JZG93bigmZGF0YS0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJd29yZF9zaXplZCA9ICgoKHJlZyAmIDB4ZmYwMCkgPT0gMHgxMDApCiAJCSAgIHx8ICgocmVnICYgMHhmZjAwKSA9PSAweDIwMCkpCiAJCSAgJiYgKCgocmVnICYgMHgwMGZmKSA9PSAweDUzKQpAQCAtMTI3Nyw3ICsxMzE4LDcgQEAKIAkJICAgICAgIGNsaWVudC0+YWRkciArIFc4Mzc4MURfQUREUl9SRUdfT0ZGU0VUKTsKIAkJb3V0Yl9wKDAsIGNsaWVudC0+YWRkciArIFc4Mzc4MURfREFUQV9SRUdfT0ZGU0VUKTsKIAl9Ci0JdXAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMjQsMTAgKzEzNjUsMTMgQEAKIAkJZGF0YS0+dmlkID0gKGxvICYgMHgwZikgfCAoKGhpICYgMHgwMSkgPDwgNCk7CiAJfSBlbHNlIGlmICh3ODM2Mjd0aGYgPT0gZGF0YS0+dHlwZSkgewogCQlkYXRhLT52aWQgPSB3ODM2Mjd0aGZfcmVhZF9ncGlvNShjbGllbnQpOworCX0gZWxzZSBpZiAodzgzNjg3dGhmID09IGRhdGEtPnR5cGUpIHsKKwkJZGF0YS0+dmlkID0gdzgzNjg3dGhmX3JlYWRfdmlkKGNsaWVudCk7CiAJfQogCiAJLyogUmVhZCBWUk0gJiBPVlQgQ29uZmlnIG9ubHkgb25jZSAqLwotCWlmICh3ODM2Mjd0aGYgPT0gZGF0YS0+dHlwZSB8fCB3ODM2MzdoZiA9PSBkYXRhLT50eXBlKSB7CisJaWYgKHc4MzYyN3RoZiA9PSBkYXRhLT50eXBlIHx8IHc4MzYzN2hmID09IGRhdGEtPnR5cGUKKwkgfHwgdzgzNjg3dGhmID09IGRhdGEtPnR5cGUpIHsKIAkJZGF0YS0+dnJtX292dCA9IAogCQkJdzgzNjI3aGZfcmVhZF92YWx1ZShjbGllbnQsIFc4MzYyN1RIRl9SRUdfVlJNX09WVF9DRkcpOwogCX0KQEAgLTEzODcsMTQgKzE0MzEsMTQgQEAKIAlzdHJ1Y3QgdzgzNjI3aGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQogCSAgICB8fCAhZGF0YS0+dmFsaWQpIHsKIAkJZm9yIChpID0gMDsgaSA8PSA4OyBpKyspIHsKIAkJCS8qIHNraXAgbWlzc2luZyBzZW5zb3JzICovCiAJCQlpZiAoKChkYXRhLT50eXBlID09IHc4MzY5N2hmKSAmJiAoaSA9PSAxKSkgfHwKLQkJCSAgICAoKGRhdGEtPnR5cGUgPT0gdzgzNjI3dGhmIHx8IGRhdGEtPnR5cGUgPT0gdzgzNjM3aGYpCisJCQkgICAgKChkYXRhLT50eXBlICE9IHc4MzYyN2hmICYmIGRhdGEtPnR5cGUgIT0gdzgzNjk3aGYpCiAJCQkgICAgJiYgKGkgPT0gNSB8fCBpID09IDYpKSkKIAkJCQljb250aW51ZTsKIAkJCWRhdGEtPmluW2ldID0KQEAgLTE0NzAsNyArMTUxNCw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc4MWQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCmluZGV4IDY0YzFmOGEuLmU0YzcwMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgImxtNzUuaCIKIApAQCAtNTYsNiArNTcsMTAgQEAKIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0oZm9yY2Vfc3ViY2xpZW50cywgIkxpc3Qgb2Ygc3ViY2xpZW50IGFkZHJlc3NlczogIgogCQkgICAgIntidXMsIGNsaWVudGFkZHIsIHN1YmNsaWVudGFkZHIxLCBzdWJjbGllbnRhZGRyMn0iKTsKIAorc3RhdGljIGludCByZXNldDsKK21vZHVsZV9wYXJhbShyZXNldCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlc2V0LCAiU2V0IHRvIG9uZSB0byByZXNldCBjaGlwIG9uIGxvYWQiKTsKKwogc3RhdGljIGludCBpbml0ID0gMTsKIG1vZHVsZV9wYXJhbShpbml0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5pdCwgIlNldCB0byB6ZXJvIHRvIGJ5cGFzcyBjaGlwIGluaXRpYWxpemF0aW9uIik7CkBAIC0yMjYsMTAgKzIzMSwxMCBAQAogc3RydWN0IHc4Mzc4MWRfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJZW51bSBjaGlwcyB0eXBlOwogCi0Jc3RydWN0IHNlbWFwaG9yZSB1cGRhdGVfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CiAJY2hhciB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAKQEAgLTI2Nyw5ICsyNzIsOCBAQAogc3RhdGljIGludCB3ODM3ODFkX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCk7CiBzdGF0aWMgaW50IHc4Mzc4MWRfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAotc3RhdGljIGludCB3ODM3ODFkX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZ2lzdGVyKTsKLXN0YXRpYyBpbnQgdzgzNzgxZF93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnaXN0ZXIsCi0JCQkgICAgICAgdTE2IHZhbHVlKTsKK3N0YXRpYyBpbnQgdzgzNzgxZF9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcpOworc3RhdGljIGludCB3ODM3ODFkX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHUxNiB2YWx1ZSk7CiBzdGF0aWMgc3RydWN0IHc4Mzc4MWRfZGF0YSAqdzgzNzgxZF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB3ODM3ODFkX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogCkBAIC0zMTEsMTEgKzMxNSwxMSBAQAogCSBcCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgLyAxMDsgXAogCSBcCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCiAJZGF0YS0+aW5fIyNyZWdbbnJdID0gSU5fVE9fUkVHKHZhbCk7IFwKIAl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfSU5fIyNSRUcobnIpLCBkYXRhLT5pbl8jI3JlZ1tucl0pOyBcCiAJIFwKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0KIHN0b3JlX2luX3JlZyhNSU4sIG1pbik7CkBAIC0zODEsMTMgKzM4NSwxMyBAQAogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmZhbl9taW5bbnIgLSAxXSA9CiAJICAgIEZBTl9UT19SRUcodmFsLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2RpdltuciAtIDFdKSk7CiAJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0ZBTl9NSU4obnIpLAogCQkJICAgIGRhdGEtPmZhbl9taW5bbnIgLSAxXSk7CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNDQ2LDcgKzQ1MCw3IEBACiAJIFwKIAl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOyBcCiAJIFwKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKIAkgXAogCWlmIChuciA+PSAyKSB7CS8qIFRFTVAyIGFuZCBURU1QMyAqLyBcCiAJCWRhdGEtPnRlbXBfIyNyZWcjI19hZGRbbnItMl0gPSBMTTc1X1RFTVBfVE9fUkVHKHZhbCk7IFwKQEAgLTQ1OCw3ICs0NjIsNyBAQAogCQkJZGF0YS0+dGVtcF8jI3JlZyk7IFwKIAl9IFwKIAkgXAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAogCXJldHVybiBjb3VudDsgXAogfQogc3RvcmVfdGVtcF9yZWcoT1ZFUiwgbWF4KTsKQEAgLTU3MSw3ICs1NzUsNyBAQAogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKHVwZGF0ZV9tYXNrID09IEJFRVBfTUFTSykgewkvKiBXZSBhcmUgc3RvcmluZyBiZWVwX21hc2sgKi8KIAkJZGF0YS0+YmVlcF9tYXNrID0gQkVFUF9NQVNLX1RPX1JFRyh2YWwsIGRhdGEtPnR5cGUpOwpAQCAtNTkyLDcgKzU5Niw3IEBACiAJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JFRVBfSU5UUzIsCiAJCQkgICAgdmFsMiB8IGRhdGEtPmJlZXBfZW5hYmxlIDw8IDcpOwogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTYzNyw3ICs2NDEsNyBAQAogCXU4IHJlZzsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkKIAkvKiBTYXZlIGZhbl9taW4gKi8KIAltaW4gPSBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltucl0sCkBAIC02NjIsNyArNjY2LDcgQEAKIAlkYXRhLT5mYW5fbWluW25yXSA9IEZBTl9UT19SRUcobWluLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKIAl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfRkFOX01JTihucisxKSwgZGF0YS0+ZmFuX21pbltucl0pOwogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTcwOSwxMCArNzEzLDEwIEBACiAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+cHdtW25yIC0gMV0gPSBQV01fVE9fUkVHKHZhbCk7CiAJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX1BXTShuciksIGRhdGEtPnB3bVtuciAtIDFdKTsKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNzI1LDcgKzcyOSw3IEBACiAKIAl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgMDoKQEAgLTc0MiwxMSArNzQ2LDExIEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC04MDgsNyArODEyLDcgQEAKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSAxOgkJLyogUElJL0NlbGVyb24gZGlvZGUgKi8KQEAgLTg0MSw3ICs4NDUsNyBAQAogCQlicmVhazsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTA3Myw3ICsxMDc3LDcgQEAKIAluZXdfY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKIAlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwgZGF0YSk7CiAJbmV3X2NsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+bG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CiAJbmV3X2NsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CiAJbmV3X2NsaWVudC0+ZHJpdmVyID0gaXNfaXNhID8gJnc4Mzc4MWRfaXNhX2RyaXZlciA6ICZ3ODM3ODFkX2RyaXZlcjsKIAluZXdfY2xpZW50LT5mbGFncyA9IDA7CkBAIC0xMTc4LDcgKzExODIsNyBAQAogCWRhdGEtPnR5cGUgPSBraW5kOwogCiAJZGF0YS0+dmFsaWQgPSAwOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC0xMzI1LDcgKzEzMjksNyBAQAogCWludCByZXMsIHdvcmRfc2l6ZWQsIGJhbms7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsOwogCi0JZG93bigmZGF0YS0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CiAJaWYgKGkyY19pc19pc2FfY2xpZW50KGNsaWVudCkpIHsKIAkJd29yZF9zaXplZCA9ICgoKHJlZyAmIDB4ZmYwMCkgPT0gMHgxMDApCiAJCQkgICAgICB8fCAoKHJlZyAmIDB4ZmYwMCkgPT0gMHgyMDApKQpAQCAtMTM4Myw3ICsxMzg3LDcgQEAKIAkJaWYgKGJhbmsgPiAyKQogCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssIDApOwogCX0KLQl1cCgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xMzk0LDcgKzEzOTgsNyBAQAogCWludCB3b3JkX3NpemVkLCBiYW5rOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbDsKIAotCWRvd24oJmRhdGEtPmxvY2spOworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwogCWlmIChpMmNfaXNfaXNhX2NsaWVudChjbGllbnQpKSB7CiAJCXdvcmRfc2l6ZWQgPSAoKChyZWcgJiAweGZmMDApID09IDB4MTAwKQogCQkJICAgICAgfHwgKChyZWcgJiAweGZmMDApID09IDB4MjAwKSkKQEAgLTE0NDcsNyArMTQ1MSw3IEBACiAJCWlmIChiYW5rID4gMikKIAkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBXODM3ODFEX1JFR19CQU5LLCAwKTsKIAl9Ci0JdXAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NTksOCArMTQ2MywxNyBAQAogCWludCB0eXBlID0gZGF0YS0+dHlwZTsKIAl1OCB0bXA7CiAKLQlpZiAoaW5pdCAmJiB0eXBlICE9IGFzOTkxMjdmKSB7CS8qIHRoaXMgcmVzZXRzIHJlZ2lzdGVycyB3ZSBkb24ndCBoYXZlCisJaWYgKHJlc2V0ICYmIHR5cGUgIT0gYXM5OTEyN2YpIHsgLyogdGhpcyByZXNldHMgcmVnaXN0ZXJzIHdlIGRvbid0IGhhdmUKIAkJCQkJICAgZG9jdW1lbnRhdGlvbiBmb3Igb24gdGhlIGFzOTkxMjdmICovCisJCS8qIFJlc2V0dGluZyB0aGUgY2hpcCBoYXMgYmVlbiB0aGUgZGVmYXVsdCBmb3IgYSBsb25nIHRpbWUsCisJCSAgIGJ1dCBpdCBjYXVzZXMgdGhlIEJJT1MgaW5pdGlhbGl6YXRpb25zIChmYW4gY2xvY2sgZGl2aWRlcnMsCisJCSAgIHRoZXJtYWwgc2Vuc29yIHR5cGVzLi4uKSB0byBiZSBsb3N0LCBzbyBpdCBpcyBub3cgb3B0aW9uYWwuCisJCSAgIEl0IG1pZ2h0IGV2ZW4gZ28gYXdheSBpZiBub2JvZHkgcmVwb3J0cyBpdCBhcyBiZWluZyB1c2VmdWwsCisJCSAgIGFzIEkgc2VlIHZlcnkgbGl0dGxlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCBiZSBuZWVkZWQgYXQKKwkJICAgYWxsLiAqLworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJJZiByZXNldD0xIHNvbHZlZCBhIHByb2JsZW0geW91IHdlcmUgIgorCQkJICJoYXZpbmcsIHBsZWFzZSByZXBvcnQhXG4iKTsKKwogCQkvKiBzYXZlIHRoZXNlIHJlZ2lzdGVycyAqLwogCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcpOwogCQlwID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfUFdNQ0xLMTIpOwpAQCAtMTQ3Nyw2ICsxNDkwLDEzIEBACiAJCXc4Mzc4MWRfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19CRUVQX0lOVFMyLCAwKTsKIAl9CiAKKwkvKiBEaXNhYmxlIHBvd2VyLW9uIGFibm9ybWFsIGJlZXAsIGFzIGFkdmlzZWQgYnkgdGhlIGRhdGFzaGVldC4KKwkgICBBbHJlYWR5IGRvbmUgaWYgcmVzZXQ9MS4gKi8KKwlpZiAoaW5pdCAmJiAhcmVzZXQgJiYgdHlwZSAhPSBhczk5MTI3ZikgeworCQlpID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcpOworCQl3ODM3ODFkX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQkVFUF9DT05GSUcsIGkgfCAweDgwKTsKKwl9CisKIAlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CiAKIAlpZiAoKHR5cGUgIT0gdzgzNzgxZCkgJiYgKHR5cGUgIT0gYXM5OTEyN2YpKSB7CkBAIC0xNTMzLDcgKzE1NTMsNyBAQAogCXN0cnVjdCB3ODM3ODFkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKIAkgICAgfHwgIWRhdGEtPnZhbGlkKSB7CkBAIC0xNjQxLDcgKzE2NjEsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCXJldHVybiBkYXRhOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYwppbmRleCBhMmY2YmI2Li42ODY1YzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgSTJDX0NMSUVOVF9FTkQgfTsKQEAgLTI3MSw3ICsyNzIsNyBAQAogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKIAllbnVtIGNoaXBzIHR5cGU7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOwkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KIApAQCAtMzgyLDMwICszODMsNDAgQEAKIHN0b3JlX2luX3JlZyhNSU4sIG1pbik7CiBzdG9yZV9pbl9yZWcoTUFYLCBtYXgpOwogCi0jZGVmaW5lIHN5c2ZzX2luX3JlZyhvZmZzZXQpIFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4jI29mZnNldCMjX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBcCi0JCQkJTlVMTCwgb2Zmc2V0KTsgXAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbiMjb2Zmc2V0IyNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwgXAotCQkJCXNob3dfaW5fbWluLCBzdG9yZV9pbl9taW4sIG9mZnNldCk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4jI29mZnNldCMjX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIFwKLQkJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCBvZmZzZXQpOworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfaW5faW5wdXRbXSA9IHsKKwlTRU5TT1JfQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDApLAorCVNFTlNPUl9BVFRSKGluMV9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMSksCisJU0VOU09SX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAyKSwKKwlTRU5TT1JfQVRUUihpbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGluNF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgNCksCisJU0VOU09SX0FUVFIoaW41X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA1KSwKKwlTRU5TT1JfQVRUUihpbjZfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGluN19pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgNyksCisJU0VOU09SX0FUVFIoaW44X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA4KSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9pbl9taW5bXSA9IHsKKyAgICAgICBTRU5TT1JfQVRUUihpbjBfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHN0b3JlX2luX21pbiwgMCksCisgICAgICAgU0VOU09SX0FUVFIoaW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzdG9yZV9pbl9taW4sIDEpLAorICAgICAgIFNFTlNPUl9BVFRSKGluMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCAyKSwKKyAgICAgICBTRU5TT1JfQVRUUihpbjNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHN0b3JlX2luX21pbiwgMyksCisgICAgICAgU0VOU09SX0FUVFIoaW40X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzdG9yZV9pbl9taW4sIDQpLAorICAgICAgIFNFTlNPUl9BVFRSKGluNV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA1KSwKKyAgICAgICBTRU5TT1JfQVRUUihpbjZfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHN0b3JlX2luX21pbiwgNiksCisgICAgICAgU0VOU09SX0FUVFIoaW43X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzdG9yZV9pbl9taW4sIDcpLAorICAgICAgIFNFTlNPUl9BVFRSKGluOF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA4KSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9pbl9tYXhbXSA9IHsKKyAgICAgICBTRU5TT1JfQVRUUihpbjBfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHN0b3JlX2luX21heCwgMCksCisgICAgICAgU0VOU09SX0FUVFIoaW4xX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzdG9yZV9pbl9tYXgsIDEpLAorICAgICAgIFNFTlNPUl9BVFRSKGluMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCAyKSwKKyAgICAgICBTRU5TT1JfQVRUUihpbjNfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHN0b3JlX2luX21heCwgMyksCisgICAgICAgU0VOU09SX0FUVFIoaW40X21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzdG9yZV9pbl9tYXgsIDQpLAorICAgICAgIFNFTlNPUl9BVFRSKGluNV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA1KSwKKyAgICAgICBTRU5TT1JfQVRUUihpbjZfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHN0b3JlX2luX21heCwgNiksCisgICAgICAgU0VOU09SX0FUVFIoaW43X21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzdG9yZV9pbl9tYXgsIDcpLAorICAgICAgIFNFTlNPUl9BVFRSKGluOF9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA4KSwKK307CiAKLXN5c2ZzX2luX3JlZygwKTsKLXN5c2ZzX2luX3JlZygxKTsKLXN5c2ZzX2luX3JlZygyKTsKLXN5c2ZzX2luX3JlZygzKTsKLXN5c2ZzX2luX3JlZyg0KTsKLXN5c2ZzX2luX3JlZyg1KTsKLXN5c2ZzX2luX3JlZyg2KTsKLXN5c2ZzX2luX3JlZyg3KTsKLXN5c2ZzX2luX3JlZyg4KTsKLQotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfaW4oY2xpZW50LCBvZmZzZXQpIFwKLWRvIHsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbiMjb2Zmc2V0IyNfaW5wdXQuZGV2X2F0dHIpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luIyNvZmZzZXQjI19tYXguZGV2X2F0dHIpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luIyNvZmZzZXQjI19taW4uZGV2X2F0dHIpOyBcCi19IHdoaWxlICgwKQogCiAjZGVmaW5lIHNob3dfZmFuX3JlZyhyZWcpIFwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTQ4NiwyOCArNDk3LDMzIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0jZGVmaW5lIHN5c2ZzX2ZhbihvZmZzZXQpIFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIFwKLQkJCQlvZmZzZXQpOyBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfZGl2LCBTX0lSVUdPIHwgU19JV1VTUiwgXAotCQkJCXNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2Rpdiwgb2Zmc2V0KTsgXAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4jI29mZnNldCMjX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIFwKLQkJCQlzaG93X2Zhbl9taW4sIHN0b3JlX2Zhbl9taW4sIG9mZnNldCk7Ci0KLXN5c2ZzX2ZhbigxKTsKLXN5c2ZzX2ZhbigyKTsKLXN5c2ZzX2ZhbigzKTsKLXN5c2ZzX2Zhbig0KTsKLXN5c2ZzX2Zhbig1KTsKLXN5c2ZzX2Zhbig2KTsKLXN5c2ZzX2Zhbig3KTsKLQotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKGNsaWVudCwgb2Zmc2V0KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19pbnB1dC5kZXZfYXR0cik7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19kaXYuZGV2X2F0dHIpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbiMjb2Zmc2V0IyNfbWluLmRldl9hdHRyKTsgXAotfSB3aGlsZSAoMCkKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX2Zhbl9pbnB1dFtdID0geworCVNFTlNPUl9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAxKSwKKwlTRU5TT1JfQVRUUihmYW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMiksCisJU0VOU09SX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDMpLAorCVNFTlNPUl9BVFRSKGZhbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCA0KSwKKwlTRU5TT1JfQVRUUihmYW41X2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIoZmFuNl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGZhbjdfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCA3KSwKK307CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9mYW5fbWluW10gPSB7CisJU0VOU09SX0FUVFIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sIHN0b3JlX2Zhbl9taW4sIDEpLAorCVNFTlNPUl9BVFRSKGZhbjJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCAyKSwKKwlTRU5TT1JfQVRUUihmYW4zX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwgc3RvcmVfZmFuX21pbiwgMyksCisJU0VOU09SX0FUVFIoZmFuNF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sIHN0b3JlX2Zhbl9taW4sIDQpLAorCVNFTlNPUl9BVFRSKGZhbjVfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCA1KSwKKwlTRU5TT1JfQVRUUihmYW42X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwgc3RvcmVfZmFuX21pbiwgNiksCisJU0VOU09SX0FUVFIoZmFuN19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sIHN0b3JlX2Zhbl9taW4sIDcpLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX2Zhbl9kaXZbXSA9IHsKKwlTRU5TT1JfQVRUUihmYW4xX2RpdiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgMSksCisJU0VOU09SX0FUVFIoZmFuMl9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIHN0b3JlX2Zhbl9kaXYsIDIpLAorCVNFTlNPUl9BVFRSKGZhbjNfZGl2LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCAzKSwKKwlTRU5TT1JfQVRUUihmYW40X2RpdiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgNCksCisJU0VOU09SX0FUVFIoZmFuNV9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIHN0b3JlX2Zhbl9kaXYsIDUpLAorCVNFTlNPUl9BVFRSKGZhbjZfZGl2LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCA2KSwKKwlTRU5TT1JfQVRUUihmYW43X2RpdiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgNyksCit9OwogCiAKIC8qIHJlYWQvd3JpdGUgdGhlIHRlbXBlcmF0dXJlMSwgaW5jbHVkZXMgbWVhc3VyZWQgdmFsdWUgYW5kIGxpbWl0cyAqLwpAQCAtNTM5LDIxICs1NTUsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxLCBOVUxMLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMSwKLQkJCQlzdG9yZV90ZW1wMSwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMSwKLQkJCQlzdG9yZV90ZW1wMSwgMik7Ci0KLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3RlbXAxKGNsaWVudCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyKTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9oeXN0LmRldl9hdHRyKTsgXAotfSB3aGlsZSAoMCkKLQotCiAvKiByZWFkL3dyaXRlIHRoZSB0ZW1wZXJhdHVyZTItMywgaW5jbHVkZXMgbWVhc3VyZWQgdmFsdWUgYW5kIGxpbWl0cyAqLwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAyMyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNTkwLDI1ICs1OTEsMjMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc3lzZnNfdGVtcDIzKG5hbWUsaWR4KSBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIobmFtZSMjX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAyMywgTlVMTCwgXAotCQkJCWlkeCwgMCk7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihuYW1lIyNfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgXAotCQkJCXNob3dfdGVtcDIzLCBzdG9yZV90ZW1wMjMsIGlkeCwgMik7IFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihuYW1lIyNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBcCi0JCQkJc2hvd190ZW1wMjMsIHN0b3JlX3RlbXAyMywgaWR4LCA0KTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiBzZGFfdGVtcF9pbnB1dFtdID0geworCVNFTlNPUl9BVFRSXzIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDEsIE5VTEwsIDAsIDApLAorCVNFTlNPUl9BVFRSXzIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDIzLCBOVUxMLCAwLCAwKSwKKwlTRU5TT1JfQVRUUl8yKHRlbXAzX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAyMywgTlVMTCwgMSwgMCksCit9OwogCi1zeXNmc190ZW1wMjModGVtcDIsMCkKLXN5c2ZzX3RlbXAyMyh0ZW1wMywxKQorc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHNkYV90ZW1wX21heFtdID0geworCVNFTlNPUl9BVFRSXzIodGVtcDFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMSwgc3RvcmVfdGVtcDEsIDAsIDEpLAorCVNFTlNPUl9BVFRSXzIodGVtcDJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMjMsIHN0b3JlX3RlbXAyMywgMCwgMiksCisJU0VOU09SX0FUVFJfMih0ZW1wM19tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAyMywgc3RvcmVfdGVtcDIzLCAxLCAyKSwKK307CiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3RlbXBfYWRkKGNsaWVudCwgb2Zmc2V0KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcCMjb2Zmc2V0IyNfaW5wdXQuZGV2X2F0dHIpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAjI29mZnNldCMjX21heC5kZXZfYXR0cik7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsIFwKLSZzZW5zb3JfZGV2X2F0dHJfdGVtcCMjb2Zmc2V0IyNfbWF4X2h5c3QuZGV2X2F0dHIpOyBcCi19IHdoaWxlICgwKQotCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgc2RhX3RlbXBfbWF4X2h5c3RbXSA9IHsKKwlTRU5TT1JfQVRUUl8yKHRlbXAxX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMSwgc3RvcmVfdGVtcDEsIDAsIDIpLAorCVNFTlNPUl9BVFRSXzIodGVtcDJfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAyMywgc3RvcmVfdGVtcDIzLCAwLCA0KSwKKwlTRU5TT1JfQVRUUl8yKHRlbXAzX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMjMsIHN0b3JlX3RlbXAyMywgMSwgNCksCit9OwogCiAvKiBnZXQgcmVhdGltZSBzdGF0dXMgb2YgYWxsIHNlbnNvcnMgaXRlbXM6IHZvbHRhZ2UsIHRlbXAsIGZhbiAqLwogc3RhdGljIHNzaXplX3QKQEAgLTYyMCwxMCArNjE5LDYgQEAKIAogc3RhdGljCiBERVZJQ0VfQVRUUihhbGFybXMsIFNfSVJVR08sIHNob3dfYWxhcm1zX3JlZywgTlVMTCk7Ci0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9hbGFybXMoY2xpZW50KSBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQotCiAKIHN0YXRpYyBzc2l6ZV90CiBzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNzExLDI2ICs3MDYsMTkgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc3lzZnNfcHdtKG9mZnNldCkgXAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCwgU19JUlVHTyB8IFNfSVdVU1IsIFwKLQkJCQlzaG93X3B3bSwgc3RvcmVfcHdtLCBvZmZzZXQpOyBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgXAotCQkJCXNob3dfcHdtZW5hYmxlLCBzdG9yZV9wd21lbmFibGUsIG9mZnNldCk7IFwKLQotc3lzZnNfcHdtKDEpOwotc3lzZnNfcHdtKDIpOwotc3lzZnNfcHdtKDMpOwotCi0KLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3B3bShjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3B3bSMjb2Zmc2V0LmRldl9hdHRyKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtZW5hYmxlKGNsaWVudCwgb2Zmc2V0KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfcHdtIyNvZmZzZXQjI19lbmFibGUuZGV2X2F0dHIpOyBcCi19IHdoaWxlICgwKQorc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfcHdtW10gPSB7CisJU0VOU09SX0FUVFIocHdtMSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzdG9yZV9wd20sIDEpLAorCVNFTlNPUl9BVFRSKHB3bTIsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAyKSwKKwlTRU5TT1JfQVRUUihwd20zLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHN0b3JlX3B3bSwgMyksCit9Oworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfcHdtX2VuYWJsZVtdID0geworCVNFTlNPUl9BVFRSKHB3bTFfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgIHNob3dfcHdtZW5hYmxlLCBzdG9yZV9wd21lbmFibGUsIDEpLAorCVNFTlNPUl9BVFRSKHB3bTJfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgIHNob3dfcHdtZW5hYmxlLCBzdG9yZV9wd21lbmFibGUsIDIpLAorCVNFTlNPUl9BVFRSKHB3bTNfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgIHNob3dfcHdtZW5hYmxlLCBzdG9yZV9wd21lbmFibGUsIDMpLAorfTsKIAogCiBzdGF0aWMgc3NpemVfdApAQCAtNzY0LDE4ICs3NTIsMTQgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc3lzZnNfcHdtX21vZGUob2Zmc2V0KSBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKLQkJCQlzaG93X3B3bV9tb2RlLCBzdG9yZV9wd21fbW9kZSwgb2Zmc2V0KTsKLQotc3lzZnNfcHdtX21vZGUoMSk7Ci1zeXNmc19wd21fbW9kZSgyKTsKLXN5c2ZzX3B3bV9tb2RlKDMpOwotCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9wd21fbW9kZShjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3B3bSMjb2Zmc2V0IyNfbW9kZS5kZXZfYXR0cik7IFwKLX0gd2hpbGUgKDApCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9wd21fbW9kZVtdID0geworCVNFTlNPUl9BVFRSKHB3bTFfbW9kZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgICBzaG93X3B3bV9tb2RlLCBzdG9yZV9wd21fbW9kZSwgMSksCisJU0VOU09SX0FUVFIocHdtMl9tb2RlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgIHNob3dfcHdtX21vZGUsIHN0b3JlX3B3bV9tb2RlLCAyKSwKKwlTRU5TT1JfQVRUUihwd20zX21vZGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkgICAgc2hvd19wd21fbW9kZSwgc3RvcmVfcHdtX21vZGUsIDMpLAorfTsKIAogCiBzdGF0aWMgc3NpemVfdApAQCAtNzg4LDEyICs3NzIsNiBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoY2hhc3NpcywgU19JUlVHTywgc2hvd19yZWdzX2NoYXNzaXMsIE5VTEwpOwogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9jaGFzc2lzKGNsaWVudCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY2hhc3Npcyk7IFwKLX0gd2hpbGUgKDApCi0KLQogc3RhdGljIHNzaXplX3QKIHNob3dfY2hhc3Npc19jbGVhcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC04MjQsMTMgKzgwMiw2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoY2hhc3Npc19jbGVhciwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCXNob3dfY2hhc3Npc19jbGVhciwgc3RvcmVfY2hhc3Npc19jbGVhcik7CiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX2NoYXNzaXNfY2xlYXIoY2xpZW50KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9jaGFzc2lzX2NsZWFyKTsgXAotfSB3aGlsZSAoMCkKLQotCi0KIC8qIEZvciBTbWFydCBGYW4gSSAvIFRoZXJtYWwgQ3J1aXNlICovCiBzdGF0aWMgc3NpemVfdAogc2hvd190aGVybWFsX2NydWlzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtODY0LDIwICs4MzUsMTQgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc3lzZnNfdGhlcm1hbF9jcnVpc2Uob2Zmc2V0KSBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRoZXJtYWxfY3J1aXNlIyNvZmZzZXQsIFNfSVJVR08gfCBTX0lXVVNSLCBcCi0JCQlzaG93X3RoZXJtYWxfY3J1aXNlLCBzdG9yZV90aGVybWFsX2NydWlzZSwgb2Zmc2V0KTsKLQotc3lzZnNfdGhlcm1hbF9jcnVpc2UoMSk7Ci1zeXNmc190aGVybWFsX2NydWlzZSgyKTsKLXN5c2ZzX3RoZXJtYWxfY3J1aXNlKDMpOwotCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV90aGVybWFsX2NydWlzZShjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCBcCi0mc2Vuc29yX2Rldl9hdHRyX3RoZXJtYWxfY3J1aXNlIyNvZmZzZXQuZGV2X2F0dHIpOyBcCi19IHdoaWxlICgwKQotCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90aGVybWFsX2NydWlzZVtdID0geworCVNFTlNPUl9BVFRSKHRoZXJtYWxfY3J1aXNlMSwgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgICBzaG93X3RoZXJtYWxfY3J1aXNlLCBzdG9yZV90aGVybWFsX2NydWlzZSwgMSksCisJU0VOU09SX0FUVFIodGhlcm1hbF9jcnVpc2UyLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgIHNob3dfdGhlcm1hbF9jcnVpc2UsIHN0b3JlX3RoZXJtYWxfY3J1aXNlLCAyKSwKKwlTRU5TT1JfQVRUUih0aGVybWFsX2NydWlzZTMsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkgICAgc2hvd190aGVybWFsX2NydWlzZSwgc3RvcmVfdGhlcm1hbF9jcnVpc2UsIDMpLAorfTsKIAogLyogRm9yIFNtYXJ0IEZhbiBJL1RoZXJtYWwgQ3J1aXNlIGFuZCBTbWFydCBGYW4gSUkgKi8KIHN0YXRpYyBzc2l6ZV90CkBAIC05MTYsMTkgKzg4MSwxNCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotI2RlZmluZSBzeXNmc190b2xlcmFuY2Uob2Zmc2V0KSBcCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRvbGVyYW5jZSMjb2Zmc2V0LCBTX0lSVUdPIHwgU19JV1VTUiwgXAotCQkJCXNob3dfdG9sZXJhbmNlLCBzdG9yZV90b2xlcmFuY2UsIG9mZnNldCk7Ci0KLXN5c2ZzX3RvbGVyYW5jZSgxKTsKLXN5c2ZzX3RvbGVyYW5jZSgyKTsKLXN5c2ZzX3RvbGVyYW5jZSgzKTsKLQotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfdG9sZXJhbmNlKGNsaWVudCwgb2Zmc2V0KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdG9sZXJhbmNlIyNvZmZzZXQuZGV2X2F0dHIpOyBcCi19IHdoaWxlICgwKQotCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90b2xlcmFuY2VbXSA9IHsKKwlTRU5TT1JfQVRUUih0b2xlcmFuY2UxLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgIHNob3dfdG9sZXJhbmNlLCBzdG9yZV90b2xlcmFuY2UsIDEpLAorCVNFTlNPUl9BVFRSKHRvbGVyYW5jZTIsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkgICAgc2hvd190b2xlcmFuY2UsIHN0b3JlX3RvbGVyYW5jZSwgMiksCisJU0VOU09SX0FUVFIodG9sZXJhbmNlMywgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgICBzaG93X3RvbGVyYW5jZSwgc3RvcmVfdG9sZXJhbmNlLCAzKSwKK307CiAKIC8qIEZvciBTbWFydCBGYW4gSUkgKi8KIHN0YXRpYyBzc2l6ZV90CkBAIC05NjQsMjggKzkyNCwzNCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotI2RlZmluZSBzeXNmc19zZjJfcG9pbnQob2Zmc2V0LCBpbmRleCkgXAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHNmMl9wb2ludCMjb2Zmc2V0IyNfZmFuIyNpbmRleCwgU19JUlVHTyB8IFNfSVdVU1IsIFwKLQkJCQlzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCBvZmZzZXQsIGluZGV4KTsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiBzZGFfc2YyX3BvaW50W10gPSB7CisJU0VOU09SX0FUVFJfMihzZjJfcG9pbnQxX2ZhbjEsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICBzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAxLCAxKSwKKwlTRU5TT1JfQVRUUl8yKHNmMl9wb2ludDJfZmFuMSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgIHNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDIsIDEpLAorCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50M19mYW4xLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMywgMSksCisJU0VOU09SX0FUVFJfMihzZjJfcG9pbnQ0X2ZhbjEsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICBzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCA0LCAxKSwKIAotc3lzZnNfc2YyX3BvaW50KDEsIDEpOwkvKiBGYW4xICovCi1zeXNmc19zZjJfcG9pbnQoMiwgMSk7CS8qIEZhbjEgKi8KLXN5c2ZzX3NmMl9wb2ludCgzLCAxKTsJLyogRmFuMSAqLwotc3lzZnNfc2YyX3BvaW50KDQsIDEpOwkvKiBGYW4xICovCi1zeXNmc19zZjJfcG9pbnQoMSwgMik7CS8qIEZhbjIgKi8KLXN5c2ZzX3NmMl9wb2ludCgyLCAyKTsJLyogRmFuMiAqLwotc3lzZnNfc2YyX3BvaW50KDMsIDIpOwkvKiBGYW4yICovCi1zeXNmc19zZjJfcG9pbnQoNCwgMik7CS8qIEZhbjIgKi8KLXN5c2ZzX3NmMl9wb2ludCgxLCAzKTsJLyogRmFuMyAqLwotc3lzZnNfc2YyX3BvaW50KDIsIDMpOwkvKiBGYW4zICovCi1zeXNmc19zZjJfcG9pbnQoMywgMyk7CS8qIEZhbjMgKi8KLXN5c2ZzX3NmMl9wb2ludCg0LCAzKTsJLyogRmFuMyAqLworCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50MV9mYW4yLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMSwgMiksCisJU0VOU09SX0FUVFJfMihzZjJfcG9pbnQyX2ZhbjIsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICBzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAyLCAyKSwKKwlTRU5TT1JfQVRUUl8yKHNmMl9wb2ludDNfZmFuMiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgIHNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDMsIDIpLAorCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50NF9mYW4yLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgNCwgMiksCiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9wb2ludChjbGllbnQsIG9mZnNldCwgaW5kZXgpIFwKLWRvIHsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgXAotJnNlbnNvcl9kZXZfYXR0cl9zZjJfcG9pbnQjI29mZnNldCMjX2ZhbiMjaW5kZXguZGV2X2F0dHIpOyBcCi19IHdoaWxlICgwKQorCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50MV9mYW4zLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMSwgMyksCisJU0VOU09SX0FUVFJfMihzZjJfcG9pbnQyX2ZhbjMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICBzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAyLCAzKSwKKwlTRU5TT1JfQVRUUl8yKHNmMl9wb2ludDNfZmFuMywgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgIHNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDMsIDMpLAorCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50NF9mYW4zLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgNCwgMyksCit9OwogCiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0xMDI2LDI2ICs5OTIsMjggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLSNkZWZpbmUgc3lzZnNfc2YyX2xldmVsKG9mZnNldCwgaW5kZXgpIFwKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihzZjJfbGV2ZWwjI29mZnNldCMjX2ZhbiMjaW5kZXgsIFNfSVJVR08gfCBTX0lXVVNSLCBcCi0JCQkJc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgb2Zmc2V0LCBpbmRleCk7CitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgc2RhX3NmMl9sZXZlbFtdID0geworCVNFTlNPUl9BVFRSXzIoc2YyX2xldmVsMV9mYW4xLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMSwgMSksCisJU0VOU09SX0FUVFJfMihzZjJfbGV2ZWwyX2ZhbjEsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICBzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAyLCAxKSwKKwlTRU5TT1JfQVRUUl8yKHNmMl9sZXZlbDNfZmFuMSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgIHNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDMsIDEpLAogCi1zeXNmc19zZjJfbGV2ZWwoMSwgMSk7CS8qIEZhbjEgKi8KLXN5c2ZzX3NmMl9sZXZlbCgyLCAxKTsJLyogRmFuMSAqLwotc3lzZnNfc2YyX2xldmVsKDMsIDEpOwkvKiBGYW4xICovCi1zeXNmc19zZjJfbGV2ZWwoMSwgMik7CS8qIEZhbjIgKi8KLXN5c2ZzX3NmMl9sZXZlbCgyLCAyKTsJLyogRmFuMiAqLwotc3lzZnNfc2YyX2xldmVsKDMsIDIpOwkvKiBGYW4yICovCi1zeXNmc19zZjJfbGV2ZWwoMSwgMyk7CS8qIEZhbjMgKi8KLXN5c2ZzX3NmMl9sZXZlbCgyLCAzKTsJLyogRmFuMyAqLwotc3lzZnNfc2YyX2xldmVsKDMsIDMpOwkvKiBGYW4zICovCisJU0VOU09SX0FUVFJfMihzZjJfbGV2ZWwxX2ZhbjIsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICBzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAxLCAyKSwKKwlTRU5TT1JfQVRUUl8yKHNmMl9sZXZlbDJfZmFuMiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgIHNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDIsIDIpLAorCVNFTlNPUl9BVFRSXzIoc2YyX2xldmVsM19mYW4yLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMywgMiksCiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9sZXZlbChjbGllbnQsIG9mZnNldCwgaW5kZXgpIFwKLWRvIHsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgXAotJnNlbnNvcl9kZXZfYXR0cl9zZjJfbGV2ZWwjI29mZnNldCMjX2ZhbiMjaW5kZXguZGV2X2F0dHIpOyBcCi19IHdoaWxlICgwKQotCisJU0VOU09SX0FUVFJfMihzZjJfbGV2ZWwxX2ZhbjMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICAgICBzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAxLCAzKSwKKwlTRU5TT1JfQVRUUl8yKHNmMl9sZXZlbDJfZmFuMywgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICAgIHNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDIsIDMpLAorCVNFTlNPUl9BVFRSXzIoc2YyX2xldmVsM19mYW4zLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgICAgc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMywgMyksCit9OwogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuOgogICAgICAqIHc4Mzc5MmRfZHJpdmVyIGlzIGluc2VydGVkICh3aGVuIHRoaXMgbW9kdWxlIGlzIGxvYWRlZCksIGZvciBlYWNoCkBAIC0xMTQ3LDEyICsxMTE1LDE5IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpKQoreworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfZmFuX2lucHV0W2ldLmRldl9hdHRyKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2Zhbl9kaXZbaV0uZGV2X2F0dHIpOworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfZmFuX21pbltpXS5kZXZfYXR0cik7Cit9CiAKIHN0YXRpYyBpbnQKIHc4Mzc5MmRfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQogewogCWludCBpID0gMCwgdmFsMSA9IDAsIHZhbDI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHc4Mzc5MmRfZGF0YSAqZGF0YTsKIAlpbnQgZXJyID0gMDsKIAljb25zdCBjaGFyICpjbGllbnRfbmFtZSA9ICIiOwpAQCAtMTE3MCwxMiArMTE0NSwxMyBAQAogCQlnb3RvIEVSUk9SMDsKIAl9CiAKLQluZXdfY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKLQlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwgZGF0YSk7Ci0JbmV3X2NsaWVudC0+YWRkciA9IGFkZHJlc3M7Ci0JbmV3X2NsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JbmV3X2NsaWVudC0+ZHJpdmVyID0gJnc4Mzc5MmRfZHJpdmVyOwotCW5ld19jbGllbnQtPmZsYWdzID0gMDsKKwljbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCWRldiA9ICZjbGllbnQtPmRldjsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwljbGllbnQtPmFkZHIgPSBhZGRyZXNzOworCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJY2xpZW50LT5kcml2ZXIgPSAmdzgzNzkyZF9kcml2ZXI7CisJY2xpZW50LT5mbGFncyA9IDA7CiAKIAkvKiBOb3csIHdlIGRvIHRoZSByZW1haW5pbmcgZGV0ZWN0aW9uLiAqLwogCkBAIC0xMTg0LDEzICsxMTYwLDEyIEBACiAJICAgZm9yY2VfKj0uLi4gcGFyYW1ldGVyLCBhbmQgdGhlIFdpbmJvbmQgd2lsbCBiZSByZXNldCB0byB0aGUgcmlnaHQKIAkgICBiYW5rLiAqLwogCWlmIChraW5kIDwgMCkgewotCQlpZiAodzgzNzkyZF9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIFc4Mzc5MkRfUkVHX0NPTkZJRykgJiAweDgwKSB7Ci0JCQlkZXZfd2FybigmbmV3X2NsaWVudC0+ZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwICIKLQkJCQkiM1xuIik7CisJCWlmICh3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTJEX1JFR19DT05GSUcpICYgMHg4MCkgeworCQkJZGV2X3dhcm4oZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDNcbiIpOwogCQkJZ290byBFUlJPUjE7CiAJCX0KLQkJdmFsMSA9IHc4Mzc5MmRfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBXODM3OTJEX1JFR19CQU5LKTsKLQkJdmFsMiA9IHc4Mzc5MmRfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBXODM3OTJEX1JFR19DSElQTUFOKTsKKwkJdmFsMSA9IHc4Mzc5MmRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5MkRfUkVHX0JBTkspOworCQl2YWwyID0gdzgzNzkyZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkyRF9SRUdfQ0hJUE1BTik7CiAJCS8qIENoZWNrIGZvciBXaW5ib25kIElEIGlmIGluIGJhbmsgMCAqLwogCQlpZiAoISh2YWwxICYgMHgwNykpIHsgIC8qIGlzIEJhbmswICovCiAJCQlpZiAoKCghKHZhbDEgJiAweDgwKSkgJiYgKHZhbDIgIT0gMHhhMykpIHx8CkBAIC0xMjAwLDM0ICsxMTc1LDMzIEBACiAJCX0KIAkJLyogSWYgV2luYm9uZCBjaGlwLCBhZGRyZXNzIG9mIGNoaXAgYW5kIFc4Mzc5MkRfUkVHX0kyQ19BRERSCiAJCSAgIHNob3VsZCBtYXRjaCAqLwotCQlpZiAodzgzNzkyZF9yZWFkX3ZhbHVlKG5ld19jbGllbnQsCisJCWlmICh3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LAogCQkJCQlXODM3OTJEX1JFR19JMkNfQUREUikgIT0gYWRkcmVzcykgewotCQkJZGV2X3dhcm4oJm5ld19jbGllbnQtPmRldiwgIkRldGVjdGlvbiBmYWlsZWQgIgotCQkJCSJhdCBzdGVwIDVcbiIpOworCQkJZGV2X3dhcm4oZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwIDVcbiIpOwogCQkJZ290byBFUlJPUjE7CiAJCX0KIAl9CiAKIAkvKiBXZSBoYXZlIGVpdGhlciBoYWQgYSBmb3JjZSBwYXJhbWV0ZXIsIG9yIHdlIGhhdmUgYWxyZWFkeSBkZXRlY3RlZCB0aGUKIAkgICBXaW5ib25kLiBQdXQgaXQgbm93IGludG8gYmFuayAwIGFuZCBWZW5kb3IgSUQgSGlnaCBCeXRlICovCi0JdzgzNzkyZF93cml0ZV92YWx1ZShuZXdfY2xpZW50LAorCXc4Mzc5MmRfd3JpdGVfdmFsdWUoY2xpZW50LAogCQkJICAgIFc4Mzc5MkRfUkVHX0JBTkssCi0JCQkgICAgKHc4Mzc5MmRfcmVhZF92YWx1ZShuZXdfY2xpZW50LAorCQkJICAgICh3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LAogCQkJCVc4Mzc5MkRfUkVHX0JBTkspICYgMHg3OCkgfCAweDgwKTsKIAogCS8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiAqLwogCWlmIChraW5kIDw9IDApIHsKIAkJLyogZ2V0IHZlbmRvciBJRCAqLwotCQl2YWwyID0gdzgzNzkyZF9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIFc4Mzc5MkRfUkVHX0NISVBNQU4pOworCQl2YWwyID0gdzgzNzkyZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkyRF9SRUdfQ0hJUE1BTik7CiAJCWlmICh2YWwyICE9IDB4NWMpIHsgIC8qIHRoZSB2ZW5kb3IgaXMgTk9UIFdpbmJvbmQgKi8KIAkJCWdvdG8gRVJST1IxOwogCQl9Ci0JCXZhbDEgPSB3ODM3OTJkX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzkyRF9SRUdfV0NISVBJRCk7CisJCXZhbDEgPSB3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTJEX1JFR19XQ0hJUElEKTsKIAkJaWYgKHZhbDEgPT0gMHg3YSkgewogCQkJa2luZCA9IHc4Mzc5MmQ7CiAJCX0gZWxzZSB7CiAJCQlpZiAoa2luZCA9PSAwKQotCQkJCQlkZXZfd2FybigmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQlkZXZfd2FybihkZXYsCiAJCQkJCSJ3ODM3OTJkOiBJZ25vcmluZyAnZm9yY2UnIHBhcmFtZXRlciBmb3IiCiAJCQkJCSIgdW5rbm93biBjaGlwIGF0IGFkYXB0ZXIgJWQsIGFkZHJlc3MiCiAJCQkJCSIgMHglMDJ4XG4iLCBpMmNfYWRhcHRlcl9pZChhZGFwdGVyKSwKQEAgLTEyMzksMTIwICsxMjEzLDg2IEBACiAJaWYgKGtpbmQgPT0gdzgzNzkyZCkgewogCQljbGllbnRfbmFtZSA9ICJ3ODM3OTJkIjsKIAl9IGVsc2UgewotCQlkZXZfZXJyKCZuZXdfY2xpZW50LT5kZXYsICJ3ODM3OTJkOiBJbnRlcm5hbCBlcnJvcjogdW5rbm93biIKKwkJZGV2X2VycihkZXYsICJ3ODM3OTJkOiBJbnRlcm5hbCBlcnJvcjogdW5rbm93biIKIAkJCQkJICAiIGtpbmQgKCVkKT8hPyIsIGtpbmQpOwogCQlnb3RvIEVSUk9SMTsKIAl9CiAKIAkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyBhbmQgcHV0IGludG8gdGhlIGdsb2JhbCBsaXN0ICovCi0Jc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7CisJc3RybGNweShjbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT50eXBlID0ga2luZDsKIAogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQorCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCWdvdG8gRVJST1IxOwogCiAJaWYgKChlcnIgPSB3ODM3OTJkX2RldGVjdF9zdWJjbGllbnRzKGFkYXB0ZXIsIGFkZHJlc3MsCi0JCQlraW5kLCBuZXdfY2xpZW50KSkpCisJCQlraW5kLCBjbGllbnQpKSkKIAkJZ290byBFUlJPUjI7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCi0JdzgzNzkyZF9pbml0X2NsaWVudChuZXdfY2xpZW50KTsKKwl3ODM3OTJkX2luaXRfY2xpZW50KGNsaWVudCk7CiAKIAkvKiBBIGZldyB2YXJzIG5lZWQgdG8gYmUgZmlsbGVkIHVwb24gc3RhcnR1cCAqLwogCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKLQkJZGF0YS0+ZmFuX21pbltpXSA9IHc4Mzc5MmRfcmVhZF92YWx1ZShuZXdfY2xpZW50LAorCQlkYXRhLT5mYW5fbWluW2ldID0gdzgzNzkyZF9yZWFkX3ZhbHVlKGNsaWVudCwKIAkJCQkJVzgzNzkyRF9SRUdfRkFOX01JTltpXSk7CiAJfQogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKIAkJZ290byBFUlJPUjM7CiAJfQotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCAwKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDIpOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCAzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgNCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDUpOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCA2KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgNyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDgpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKG5ld19jbGllbnQsIDIpOwotCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgMyk7CisJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2luX2lucHV0W2ldLmRldl9hdHRyKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV9pbl9tYXhbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2luX21pbltpXS5kZXZfYXR0cik7CisJfQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWRldmljZV9jcmVhdGVfZmlsZV9mYW4oZGV2LCBpKTsKIAogCS8qIFJlYWQgR1BJTyBlbmFibGUgcmVnaXN0ZXIgdG8gY2hlY2sgaWYgcGlucyBmb3IgZmFuIDQsNSBhcmUgdXNlZCBhcwogCSAgIEdQSU8gKi8KLQl2YWwxID0gdzgzNzkyZF9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIFc4Mzc5MkRfUkVHX0dQSU9fRU4pOworCXZhbDEgPSB3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTJEX1JFR19HUElPX0VOKTsKIAlpZiAoISh2YWwxICYgMHg0MCkpCi0JCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgNCk7CisJCWRldmljZV9jcmVhdGVfZmlsZV9mYW4oZGV2LCAzKTsKIAlpZiAoISh2YWwxICYgMHgyMCkpCi0JCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgNSk7CisJCWRldmljZV9jcmVhdGVfZmlsZV9mYW4oZGV2LCA0KTsKIAotCXZhbDEgPSB3ODM3OTJkX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzkyRF9SRUdfUElOKTsKKwl2YWwxID0gdzgzNzkyZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkyRF9SRUdfUElOKTsKIAlpZiAodmFsMSAmIDB4NDApCi0JCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgNik7CisJCWRldmljZV9jcmVhdGVfZmlsZV9mYW4oZGV2LCA1KTsKIAlpZiAodmFsMSAmIDB4MDQpCi0JCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgNyk7CisJCWRldmljZV9jcmVhdGVfZmlsZV9mYW4oZGV2LCA2KTsKIAotCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wMShuZXdfY2xpZW50KTsJCS8qIFRlbXAxICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3RlbXBfYWRkKG5ld19jbGllbnQsIDIpOwkvKiBUZW1wMiAqLwotCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wX2FkZChuZXdfY2xpZW50LCAzKTsJLyogVGVtcDMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcF9pbnB1dFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcF9tYXhbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3RlbXBfbWF4X2h5c3RbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3RoZXJtYWxfY3J1aXNlW2ldLmRldl9hdHRyKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV90b2xlcmFuY2VbaV0uZGV2X2F0dHIpOworCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZV9hbGFybXMobmV3X2NsaWVudCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3B3bSk7IGkrKykgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3B3bVtpXS5kZXZfYXR0cik7CisJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfcHdtX2VuYWJsZVtpXS5kZXZfYXR0cik7CisJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfcHdtX21vZGVbaV0uZGV2X2F0dHIpOworCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZV9wd20obmV3X2NsaWVudCwgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX3B3bShuZXdfY2xpZW50LCAyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtKG5ld19jbGllbnQsIDMpOworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hbGFybXMpOworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jaGFzc2lzKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2hhc3Npc19jbGVhcik7CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtZW5hYmxlKG5ld19jbGllbnQsIDEpOwotCWRldmljZV9jcmVhdGVfZmlsZV9wd21lbmFibGUobmV3X2NsaWVudCwgMik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX3B3bWVuYWJsZShuZXdfY2xpZW50LCAzKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YyX3BvaW50KTsgaSsrKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3NmMl9wb2ludFtpXS5kZXZfYXR0cik7CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtX21vZGUobmV3X2NsaWVudCwgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX3B3bV9tb2RlKG5ld19jbGllbnQsIDIpOwotCWRldmljZV9jcmVhdGVfZmlsZV9wd21fbW9kZShuZXdfY2xpZW50LCAzKTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9jaGFzc2lzKG5ld19jbGllbnQpOwotCWRldmljZV9jcmVhdGVfZmlsZV9jaGFzc2lzX2NsZWFyKG5ld19jbGllbnQpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3RoZXJtYWxfY3J1aXNlKG5ld19jbGllbnQsIDEpOwotCWRldmljZV9jcmVhdGVfZmlsZV90aGVybWFsX2NydWlzZShuZXdfY2xpZW50LCAyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGhlcm1hbF9jcnVpc2UobmV3X2NsaWVudCwgMyk7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdG9sZXJhbmNlKG5ld19jbGllbnQsIDEpOwotCWRldmljZV9jcmVhdGVfZmlsZV90b2xlcmFuY2UobmV3X2NsaWVudCwgMik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX3RvbGVyYW5jZShuZXdfY2xpZW50LCAzKTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9zZjJfcG9pbnQobmV3X2NsaWVudCwgMSwgMSk7CS8qIEZhbjEgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2YyX3BvaW50KG5ld19jbGllbnQsIDIsIDEpOwkvKiBGYW4xICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9wb2ludChuZXdfY2xpZW50LCAzLCAxKTsJLyogRmFuMSAqLwotCWRldmljZV9jcmVhdGVfZmlsZV9zZjJfcG9pbnQobmV3X2NsaWVudCwgNCwgMSk7CS8qIEZhbjEgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2YyX3BvaW50KG5ld19jbGllbnQsIDEsIDIpOwkvKiBGYW4yICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9wb2ludChuZXdfY2xpZW50LCAyLCAyKTsJLyogRmFuMiAqLwotCWRldmljZV9jcmVhdGVfZmlsZV9zZjJfcG9pbnQobmV3X2NsaWVudCwgMywgMik7CS8qIEZhbjIgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2YyX3BvaW50KG5ld19jbGllbnQsIDQsIDIpOwkvKiBGYW4yICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9wb2ludChuZXdfY2xpZW50LCAxLCAzKTsJLyogRmFuMyAqLwotCWRldmljZV9jcmVhdGVfZmlsZV9zZjJfcG9pbnQobmV3X2NsaWVudCwgMiwgMyk7CS8qIEZhbjMgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2YyX3BvaW50KG5ld19jbGllbnQsIDMsIDMpOwkvKiBGYW4zICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9wb2ludChuZXdfY2xpZW50LCA0LCAzKTsJLyogRmFuMyAqLwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9sZXZlbChuZXdfY2xpZW50LCAxLCAxKTsJLyogRmFuMSAqLwotCWRldmljZV9jcmVhdGVfZmlsZV9zZjJfbGV2ZWwobmV3X2NsaWVudCwgMiwgMSk7CS8qIEZhbjEgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2YyX2xldmVsKG5ld19jbGllbnQsIDMsIDEpOwkvKiBGYW4xICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9sZXZlbChuZXdfY2xpZW50LCAxLCAyKTsJLyogRmFuMiAqLwotCWRldmljZV9jcmVhdGVfZmlsZV9zZjJfbGV2ZWwobmV3X2NsaWVudCwgMiwgMik7CS8qIEZhbjIgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2YyX2xldmVsKG5ld19jbGllbnQsIDMsIDIpOwkvKiBGYW4yICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3NmMl9sZXZlbChuZXdfY2xpZW50LCAxLCAzKTsJLyogRmFuMyAqLwotCWRldmljZV9jcmVhdGVfZmlsZV9zZjJfbGV2ZWwobmV3X2NsaWVudCwgMiwgMyk7CS8qIEZhbjMgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2YyX2xldmVsKG5ld19jbGllbnQsIDMsIDMpOwkvKiBGYW4zICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3NmMl9sZXZlbCk7IGkrKykKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV9zZjJfbGV2ZWxbaV0uZGV2X2F0dHIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEzNjYsNyArMTMwNiw3IEBACiAJCWtmcmVlKGRhdGEtPmxtNzVbMV0pOwogCX0KIEVSUk9SMjoKLQlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKKwlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwogRVJST1IxOgogCWtmcmVlKGRhdGEpOwogRVJST1IwOgpAQCAtMTQzNCw3ICsxMzc0LDcgQEAKIAlpbnQgaSwgajsKIAl1OCByZWdfYXJyYXlfdG1wWzRdLCBwd21fYXJyYXlfdG1wWzddLCByZWdfdG1wOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICh0aW1lX2FmdGVyCiAJICAgIChqaWZmaWVzIC0gZGF0YS0+bGFzdF91cGRhdGVkLCAodW5zaWduZWQgbG9uZykgKEhaICogMykpCkBAIC0xNTQ1LDcgKzE0ODUsNyBAQAogCQlkYXRhLT52YWxpZCA9IDE7CiAJfQogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogI2lmZGVmIERFQlVHCiAJdzgzNzkyZF9wcmludF9kZWJ1ZyhkYXRhLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODNsNzg1dHMuYyBiL2RyaXZlcnMvaHdtb24vdzgzbDc4NXRzLmMKaW5kZXggZjY2YzBjZi4uM2YyYmFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODNsNzg1dHMuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4M2w3ODV0cy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIEhvdyBtYW55IHJldHJpZXMgb24gcmVnaXN0ZXIgcmVhZCBlcnJvciAqLwogI2RlZmluZSBNQVhfUkVUUklFUwk1CkBAIC0xMDcsNyArMTA4LDcgQEAKIHN0cnVjdCB3ODNsNzg1dHNfZGF0YSB7CiAJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KIApAQCAtMjIxLDcgKzIyMiw3IEBACiAJLyogV2UgY2FuIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzLiAqLwogCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgInc4M2w3ODV0cyIsIEkyQ19OQU1FX1NJWkUpOwogCWRhdGEtPnZhbGlkID0gMDsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogRGVmYXVsdCB2YWx1ZXMgaW4gY2FzZSB0aGUgZmlyc3QgcmVhZCBmYWlscyAodW5saWtlbHkpLiAqLwogCWRhdGEtPnRlbXBbMV0gPSBkYXRhLT50ZW1wWzBdID0gMDsKQEAgLTI5OSw3ICszMDAsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IHc4M2w3ODV0c19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJaWYgKCFkYXRhLT52YWxpZCB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICogMikpIHsKIAkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJVcGRhdGluZyB3ODNsNzg1dHMgZGF0YS5cbiIpOwpAQCAtMzEyLDcgKzMxMyw3IEBACiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CiAKLQl1cCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJcmV0dXJuIGRhdGE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IGZmOTI3MzUuLjA4OWM2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0xNjgsMTIgKzE2OCwxNCBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZSBJbnRlbAogCSAgUElJWDQgZmFtaWx5IG9mIG1haW5ib2FyZCBJMkMgaW50ZXJmYWNlcy4gIFNwZWNpZmljYWxseSwgdGhlIGZvbGxvd2luZwotCSAgdmVyc2lvbnMgb2YgdGhlIGNoaXBzZXQgYXJlIHN1cHBvcnRlZDoKKwkgIHZlcnNpb25zIG9mIHRoZSBjaGlwc2V0IGFyZSBzdXBwb3J0ZWQgKG5vdGUgdGhhdCBTZXJ2ZXJ3b3JrcyBpcyBwYXJ0CisJICBvZiBCcm9hZGNvbSk6CiAJICAgIEludGVsIFBJSVg0CiAJICAgIEludGVsIDQ0ME1YCiAJICAgIFNlcnZlcndvcmtzIE9TQjQKIAkgICAgU2VydmVyd29ya3MgQ1NCNQogCSAgICBTZXJ2ZXJ3b3JrcyBDU0I2CisJICAgIFNlcnZlcndvcmtzIEhULTEwMDAKIAkgICAgU01TQyBWaWN0b3J5NjYKIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQpAQCAtMzg5LDEwICszOTEsMTEgQEAKIAkgIGFsc28gYmUgc3BlY2lmaWVkIHdpdGggYSBtb2R1bGUgcGFyYW1ldGVyLgogCiBjb25maWcgU0N4MjAwX0FDQgotCXRyaXN0YXRlICJOYXRTZW1pIFNDeDIwMCBBQ0NFU1MuYnVzIgotCWRlcGVuZHMgb24gSTJDICYmIFBDSQorCXRyaXN0YXRlICJHZW9kZSBBQ0NFU1MuYnVzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBYODZfMzIgJiYgSTJDICYmIFBDSQogCWhlbHAKLQkgIEVuYWJsZSB0aGUgdXNlIG9mIHRoZSBBQ0NFU1MuYnVzIGNvbnRyb2xsZXJzIG9mIGEgU0N4MjAwIHByb2Nlc3Nvci4KKwkgIEVuYWJsZSB0aGUgdXNlIG9mIHRoZSBBQ0NFU1MuYnVzIGNvbnRyb2xsZXJzIG9uIHRoZSBHZW9kZSBTQ3gyMDAgYW5kCisJICBTQzExMDAgcHJvY2Vzc29ycyBhbmQgdGhlIENTNTUzNSBhbmQgQ1M1NTM2IEdlb2RlIGNvbXBhbmlvbiBkZXZpY2VzLgogCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCmluZGV4IDNlYjQ3ODkuLmQzZWY0NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCkBAIC02Myw3ICs2Myw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogCiAvKiBBTEkxNTM1IFNNQnVzIGFkZHJlc3Mgb2Zmc2V0cyAqLwpAQCAtMTM2LDcgKzEzNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbGkxNTM1X2RyaXZlcjsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhbGkxNTM1X3NtYmE7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChpMmNfYWxpMTUzNV9zZW0pOwogCiAvKiBEZXRlY3Qgd2hldGhlciBhIEFMSTE1MzUgY2FuIGJlIGZvdW5kLCBhbmQgaW5pdGlhbGl6ZSBpdCwgd2hlcmUgbmVjZXNzYXJ5LgogICAgTm90ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBrZXJuZWxzIHdpdGggdGhlIG9sZCBQQ0kgQklPUyBpbnRlcmZhY2UgYW5kCkBAIC0zNDUsNyArMzQzLDYgQEAKIAlpbnQgdGltZW91dDsKIAlzMzIgcmVzdWx0ID0gMDsKIAotCWRvd24oJmkyY19hbGkxNTM1X3NlbSk7CiAJLyogbWFrZSBzdXJlIFNNQnVzIGlzIGlkbGUgKi8KIAl0ZW1wID0gaW5iX3AoU01CSFNUU1RTKTsKIAlmb3IgKHRpbWVvdXQgPSAwOwpAQCAtNDYwLDcgKzQ1Nyw2IEBACiAJCWJyZWFrOwogCX0KIEVYSVQ6Ci0JdXAoJmkyY19hbGkxNTM1X3NlbSk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYtczQ4ODIuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LXM0ODgyLmMKaW5kZXggNTZjN2Q5OC4uMDhlOTE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYtczQ4ODIuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni1zNDg4Mi5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBleHRlcm4gc3RydWN0IGkyY19hZGFwdGVyIGFtZDc1Nl9zbWJ1czsKIApAQCAtNDUsNyArNDYsNyBAQAogc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtICpzNDg4Ml9hbGdvOwogCiAvKiBXcmFwcGVyIGFjY2VzcyBmdW5jdGlvbnMgZm9yIG11bHRpcGxleGVkIFNNQnVzICovCi1zdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBhbWQ3NTZfbG9jazsKK3N0YXRpYyBERUZJTkVfTVVURVgoYW1kNzU2X2xvY2spOwogCiBzdGF0aWMgczMyIGFtZDc1Nl9hY2Nlc3NfdmlydDAoc3RydWN0IGkyY19hZGFwdGVyICogYWRhcCwgdTE2IGFkZHIsCiAJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwKQEAgLTU5LDEyICs2MCwxMiBAQAogCSB8fCBhZGRyID09IDB4MTgpCiAJCXJldHVybiAtMTsKIAotCWRvd24oJmFtZDc1Nl9sb2NrKTsKKwltdXRleF9sb2NrKCZhbWQ3NTZfbG9jayk7CiAKIAllcnJvciA9IGFtZDc1Nl9zbWJ1cy5hbGdvLT5zbWJ1c194ZmVyKGFkYXAsIGFkZHIsIGZsYWdzLCByZWFkX3dyaXRlLAogCQkJCQkgICAgICBjb21tYW5kLCBzaXplLCBkYXRhKTsKIAotCXVwKCZhbWQ3NTZfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhbWQ3NTZfbG9jayk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC04Nyw3ICs4OCw3IEBACiAJaWYgKGFkZHIgIT0gMHg0YyAmJiAoYWRkciAmIDB4ZmMpICE9IDB4NTAgJiYgKGFkZHIgJiAweGZjKSAhPSAweDMwKQogCQlyZXR1cm4gLTE7CiAKLQlkb3duKCZhbWQ3NTZfbG9jayk7CisJbXV0ZXhfbG9jaygmYW1kNzU2X2xvY2spOwogCiAJaWYgKGxhc3RfY2hhbm5lbHMgIT0gY2hhbm5lbHMpIHsKIAkJdW5pb24gaTJjX3NtYnVzX2RhdGEgbXBseGRhdGE7CkBAIC0xMDUsNyArMTA2LDcgQEAKIAkJCQkJICAgICAgY29tbWFuZCwgc2l6ZSwgZGF0YSk7CiAKIFVOTE9DSzoKLQl1cCgmYW1kNzU2X2xvY2spOworCW11dGV4X3VubG9jaygmYW1kNzU2X2xvY2spOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTY2LDggKzE2Nyw2IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxpbmcgU01CdXMgbXVsdGlwbGV4aW5nIGZvciBUeWFuIFM0ODgyXG4iKTsKLQlpbml0X01VVEVYKCZhbWQ3NTZfbG9jayk7Ci0KIAkvKiBEZWZpbmUgdGhlIDUgdmlydHVhbCBhZGFwdGVycyBhbmQgYWxnb3JpdGhtcyBzdHJ1Y3R1cmVzICovCiAJaWYgKCEoczQ4ODJfYWRhcHRlciA9IGt6YWxsb2MoNSAqIHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpLAogCQkJCSAgICAgIEdGUF9LRVJORUwpKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1mcm9kby5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1mcm9kby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmY1MmY1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZnJvZG8uYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLQotLyoKLSAqIGxpbnV4L2RyaXZlcnMvaTJjL2kyYy1mcm9kby5jCi0gKgotICogQXV0aG9yOiBBYnJhaGFtIHZhbiBkZXIgTWVyd2UgPGFicmFoYW1AMmQzZC5jby56YT4KLSAqCi0gKiBBbiBJMkMgYWRhcHRlciBkcml2ZXIgZm9yIHRoZSAyZDNELCBJbmMuIFN0cm9uZ0FSTSBTQS0xMTEwCi0gKiBEZXZlbG9wbWVudCBib2FyZCAoRnJvZG8pLgotICoKLSAqIFRoaXMgc291cmNlIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLQotCi1zdGF0aWMgdm9pZCBmcm9kb19zZXRzZGEgKHZvaWQgKmRhdGEsaW50IHN0YXRlKQotewotCWlmIChzdGF0ZSkKLQkJRlJPRE9fQ1BMRF9JMkMgfD0gRlJPRE9fSTJDX1NEQV9PVVQ7Ci0JZWxzZQotCQlGUk9ET19DUExEX0kyQyAmPSB+RlJPRE9fSTJDX1NEQV9PVVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyb2RvX3NldHNjbCAodm9pZCAqZGF0YSxpbnQgc3RhdGUpCi17Ci0JaWYgKHN0YXRlKQotCQlGUk9ET19DUExEX0kyQyB8PSBGUk9ET19JMkNfU0NMX09VVDsKLQllbHNlCi0JCUZST0RPX0NQTERfSTJDICY9IH5GUk9ET19JMkNfU0NMX09VVDsKLX0KLQotc3RhdGljIGludCBmcm9kb19nZXRzZGEgKHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuICgoRlJPRE9fQ1BMRF9JMkMgJiBGUk9ET19JMkNfU0RBX0lOKSAhPSAwKTsKLX0KLQotc3RhdGljIGludCBmcm9kb19nZXRzY2wgKHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuICgoRlJPRE9fQ1BMRF9JMkMgJiBGUk9ET19JMkNfU0NMX0lOKSAhPSAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBiaXRfZnJvZG9fZGF0YSA9IHsKLQkuc2V0c2RhCQk9IGZyb2RvX3NldHNkYSwKLQkuc2V0c2NsCQk9IGZyb2RvX3NldHNjbCwKLQkuZ2V0c2RhCQk9IGZyb2RvX2dldHNkYSwKLQkuZ2V0c2NsCQk9IGZyb2RvX2dldHNjbCwKLQkudWRlbGF5CQk9IDgwLAotCS5tZGVsYXkJCT0gODAsCi0JLnRpbWVvdXQJPSBIWgotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBmcm9kb19vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkuaWQJCQk9IEkyQ19IV19CX0ZST0RPLAotCS5hbGdvX2RhdGEJCT0gJmJpdF9mcm9kb19kYXRhLAotCS5kZXYJCQk9IHsKLQkJLm5hbWUJCT0gIkZyb2RvIGFkYXB0ZXIgZHJpdmVyIiwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaTJjX2Zyb2RvX2luaXQgKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19iaXRfYWRkX2J1cygmZnJvZG9fb3BzKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGkyY19mcm9kb19leGl0ICh2b2lkKQotewotCWkyY19iaXRfZGVsX2J1cygmZnJvZG9fb3BzKTsKLX0KLQotTU9EVUxFX0FVVEhPUiAoIkFicmFoYW0gdmFuIGRlciBNZXJ3ZSA8YWJyYWhhbUAyZDNkLmNvLnphPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiSTJDLUJ1cyBhZGFwdGVyIHJvdXRpbmVzIGZvciBGcm9kbyIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKLQotbW9kdWxlX2luaXQgKGkyY19mcm9kb19pbml0KTsKLW1vZHVsZV9leGl0IChpMmNfZnJvZG9fZXhpdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCmluZGV4IDE0MTQ4NTEuLmQwMGEwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYwpAQCAtNDM0LDcgKzQzNCw3IEBACiBpb3AzeHhfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpcnE7CiAJc3RydWN0IGkyY19hZGFwdGVyICpuZXdfYWRhcHRlcjsKIAlzdHJ1Y3QgaTJjX2FsZ29faW9wM3h4X2RhdGEgKmFkYXB0ZXJfZGF0YTsKIApAQCAtNDcwLDcgKzQ3MCwxMiBAQAogCQlnb3RvIHJlbGVhc2VfcmVnaW9uOwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIGlvcDN4eF9pMmNfaXJxX2hhbmRsZXIsIDAsCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gdW5tYXA7CisJfQorCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgaW9wM3h4X2kyY19pcnFfaGFuZGxlciwgMCwKIAkJCQlwZGV2LT5uYW1lLCBhZGFwdGVyX2RhdGEpOwogCiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2EuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNhLmMKaW5kZXggNDM0NGFlNi4uYzNlMWQzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2EuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGkyY19pc2FfaW5pdCh2b2lkKQogewotCWluaXRfTVVURVgoJmlzYV9hZGFwdGVyLmNsaXN0X2xvY2spOworCW11dGV4X2luaXQoJmlzYV9hZGFwdGVyLmNsaXN0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZpc2FfYWRhcHRlci5jbGllbnRzKTsKIAogCWlzYV9hZGFwdGVyLm5yID0gQU5ZX0kyQ19JU0FfQlVTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pdGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXRlLmMKaW5kZXggNWY1ZDI5NC4uZDgyZTZkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXRlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pdGUuYwpAQCAtMjAwLDkgKzIwMCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pZAkJPSBJMkNfSFdfSV9JSUMsCiAJLmFsZ29fZGF0YQk9ICZpaWNfaXRlX2RhdGEsCi0JLmRldgkJPSB7Ci0JCS5uYW1lCT0gIklURSBJSUMgYWRhcHRlciIsCi0JfSwKKwkubmFtZQkJPSAiSVRFIElJQyBhZGFwdGVyIiwKIH07CiAKIC8qIENhbGxlZCB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiAgVGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYwppbmRleCBlNDIyZDhiLi4yZWQwNzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMKQEAgLTEyNiw2ICsxMjYsNyBAQAogCWRydl9kYXRhLT5hbGdvX2RhdGEudGltZW91dCA9IDEwMDsKIAogCWRydl9kYXRhLT5hZGFwdGVyLmlkID0gSTJDX0hXX0JfSVhQNFhYOworCWRydl9kYXRhLT5hZGFwdGVyLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OOwogCXN0cmxjcHkoZHJ2X2RhdGEtPmFkYXB0ZXIubmFtZSwgcGxhdF9kZXYtPmRldi5kcml2ZXItPm5hbWUsCiAJCUkyQ19OQU1FX1NJWkUpOwogCWRydl9kYXRhLT5hZGFwdGVyLmFsZ29fZGF0YSA9ICZkcnZfZGF0YS0+YWxnb19kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggNWNjZDMzOC4uMjcyMWU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0zMDIsNiArMzAyLDEwIEBACiAJfQogCiAJaTJjLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpMmMtPmlycSA8IDApIHsKKwkJcmVzdWx0ID0gLUVOWElPOworCQlnb3RvIGZhaWxfZ2V0X2lycTsKKwl9CiAJaTJjLT5mbGFncyA9IHBkYXRhLT5kZXZpY2VfZmxhZ3M7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaTJjLT5xdWV1ZSk7CiAKQEAgLTM0MCw2ICszNDQsNyBAQAogICAgICAgZmFpbF9pcnE6CiAJaW91bm1hcChpMmMtPmJhc2UpOwogICAgICAgZmFpbF9tYXA6CisgICAgICBmYWlsX2dldF9pcnE6CiAJa2ZyZWUoaTJjKTsKIAlyZXR1cm4gcmVzdWx0OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKaW5kZXggMjI3ODFkOC4uYWM1Y2RlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKQEAgLTUxNiw2ICs1MTYsMTAgQEAKIAlkcnZfZGF0YS0+ZnJlcV9tID0gcGRhdGEtPmZyZXFfbTsKIAlkcnZfZGF0YS0+ZnJlcV9uID0gcGRhdGEtPmZyZXFfbjsKIAlkcnZfZGF0YS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZCwgMCk7CisJaWYgKGRydl9kYXRhLT5pcnEgPCAwKSB7CisJCXJjID0gLUVOWElPOworCQlnb3RvIGV4aXRfdW5tYXBfcmVnczsKKwl9CiAJZHJ2X2RhdGEtPmFkYXB0ZXIuaWQgPSBJMkNfSFdfTVY2NFhYWDsKIAlkcnZfZGF0YS0+YWRhcHRlci5hbGdvID0gJm12NjR4eHhfaTJjX2FsZ287CiAJZHJ2X2RhdGEtPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCA2OTJmNDczLi5kOWM3YzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC0yMiw3ICsyMiw3IEBACiAvKgogICAgU3VwcG9ydHM6CiAJSW50ZWwgUElJWDQsIDQ0ME1YCi0JU2VydmVyd29ya3MgT1NCNCwgQ1NCNSwgQ1NCNgorCVNlcnZlcndvcmtzIE9TQjQsIENTQjUsIENTQjYsIEhULTEwMDAKIAlTTVNDIFZpY3Rvcnk2NgogCiAgICBOb3RlOiB3ZSBhc3N1bWUgdGhlcmUgY2FuIG9ubHkgYmUgb25lIGRldmljZSwgd2l0aCBvbmUgU01CdXMgaW50ZXJmYWNlLgpAQCAtNDE5LDYgKzQxOSw4IEBACiAJICAuZHJpdmVyX2RhdGEgPSAwIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNiksCiAJICAuZHJpdmVyX2RhdGEgPSAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwU0IpLAorCSAgLmRyaXZlcl9kYXRhID0gMCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMyksCiAJICAuZHJpdmVyX2RhdGEgPSAzIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRUZBUiwgUENJX0RFVklDRV9JRF9FRkFSX1NMQzkwRTY2XzMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggNzU3OWY0YjIuLjUxNTUwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiB9CiAKIC8qCi0gKiBXZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBhZGFwdGVyIGJ1cyBzZW1hcGhvcmUuCisgKiBXZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBhZGFwdGVyIGJ1cyBtdXRleC4KICAqLwogc3RhdGljIGludCBpMmNfcHhhX2RvX3hmZXIoc3RydWN0IHB4YV9pMmMgKmkyYywgc3RydWN0IGkyY19tc2cgKm1zZywgaW50IG51bSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCmluZGV4IGQzNDc4ZTAuLjhiZDMwNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYwpAQCAtMSwyNyArMSwyNiBAQAotLyogIGxpbnV4L2RyaXZlcnMvaTJjL3NjeDIwMF9hY2IuYyAKLQorLyoKICAgICBDb3B5cmlnaHQgKGMpIDIwMDEsMjAwMiBDaHJpc3RlciBXZWluaWdlbCA8d2luZ2VsQG5hbm8tc3lzdGVtLmNvbT4KIAogICAgIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgU0N4MjAwIEFDQ0VTUy5idXMgc3VwcG9ydAotICAgIAorICAgIEFsc28gc3VwcG9ydHMgdGhlIEFNRCBDUzU1MzUgYW5kIEFNRCBDUzU1MzYKKwogICAgIEJhc2VkIG9uIGkyYy1rZXl3ZXN0LmMgd2hpY2ggaXM6CiAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+CiAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMCBQaGlsaXAgRWRlbGJyb2NrIDxwaGlsQHN0aW1weS5uZXRyb2VkZ2UuY29tPgotICAgIAorCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCiAgICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgIAorCiAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgIAorCiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCiAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zMiw3ICszMSw5IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgogCiAjaW5jbHVkZSA8bGludXgvc2N4MjAwLmg+CiAKQEAgLTQ3LDE2ICs0OCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoYmFzZSwgaW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYmFzZSwgIkJhc2UgYWRkcmVzc2VzIGZvciB0aGUgQUNDRVNTLmJ1cyBjb250cm9sbGVycyIpOwogCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIE5BTUUgIjogIiB4KQotI2Vsc2UKLSNkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYKLQotLyogVGhlIGhhcmR3YXJlIHN1cHBvcnRzIGludGVycnVwdCBkcml2ZW4gbW9kZSB0b28sIGJ1dCBJIGhhdmVuJ3QKLSAgIGltcGxlbWVudGVkIHRoYXQuICovCi0jZGVmaW5lIFBPTExFRF9NT0RFIDEKLSNkZWZpbmUgUE9MTF9USU1FT1VUIChIWikKKyNkZWZpbmUgUE9MTF9USU1FT1VUCShIWi81KQogCiBlbnVtIHNjeDIwMF9hY2Jfc3RhdGUgewogCXN0YXRlX2lkbGUsCkBAIC03OSwxMiArNzEsMTEgQEAKIH07CiAKIC8qIFBoeXNpY2FsIGludGVyZmFjZSAqLwotc3RydWN0IHNjeDIwMF9hY2JfaWZhY2UKLXsKK3N0cnVjdCBzY3gyMDBfYWNiX2lmYWNlIHsKIAlzdHJ1Y3Qgc2N4MjAwX2FjYl9pZmFjZSAqbmV4dDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcHRlcjsKIAl1bnNpZ25lZCBiYXNlOwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBtdXRleCBtdXRleDsKIAogCS8qIFN0YXRlIG1hY2hpbmUgZGF0YSAqLwogCWVudW0gc2N4MjAwX2FjYl9zdGF0ZSBzdGF0ZTsKQEAgLTEwMCw3ICs5MSw3IEBACiAjZGVmaW5lIEFDQlNEQQkJKGlmYWNlLT5iYXNlICsgMCkKICNkZWZpbmUgQUNCU1QJCShpZmFjZS0+YmFzZSArIDEpCiAjZGVmaW5lICAgIEFDQlNUX1NEQVNUCQkweDQwIC8qIFNEQSBTdGF0dXMgKi8KLSNkZWZpbmUgICAgQUNCU1RfQkVSCQkweDIwIAorI2RlZmluZSAgICBBQ0JTVF9CRVIJCTB4MjAKICNkZWZpbmUgICAgQUNCU1RfTkVHQUNLCQkweDEwIC8qIE5lZ2F0aXZlIEFja25vd2xlZGdlICovCiAjZGVmaW5lICAgIEFDQlNUX1NUQVNUUgkJMHgwOCAvKiBTdGFsbCBBZnRlciBTdGFydCAqLwogI2RlZmluZSAgICBBQ0JTVF9NQVNURVIJCTB4MDIKQEAgLTEwOSw5ICsxMDAsOSBAQAogI2RlZmluZSBBQ0JDVEwxCQkoaWZhY2UtPmJhc2UgKyAzKQogI2RlZmluZSAgICBBQ0JDVEwxX1NUQVNUUkUJMHg4MAogI2RlZmluZSAgICBBQ0JDVEwxX05NSU5URQkweDQwCi0jZGVmaW5lCSAgIEFDQkNUTDFfQUNLCQkweDEwCi0jZGVmaW5lCSAgIEFDQkNUTDFfU1RPUAkJMHgwMgotI2RlZmluZQkgICBBQ0JDVEwxX1NUQVJUCTB4MDEKKyNkZWZpbmUgICAgQUNCQ1RMMV9BQ0sJCTB4MTAKKyNkZWZpbmUgICAgQUNCQ1RMMV9TVE9QCQkweDAyCisjZGVmaW5lICAgIEFDQkNUTDFfU1RBUlQJMHgwMQogI2RlZmluZSBBQ0JBRERSCQkoaWZhY2UtPmJhc2UgKyA0KQogI2RlZmluZSBBQ0JDVEwyCQkoaWZhY2UtPmJhc2UgKyA1KQogI2RlZmluZSAgICBBQ0JDVEwyX0VOQUJMRQkweDAxCkBAIC0xMjIsOCArMTEzLDggQEAKIHsKIAljb25zdCBjaGFyICplcnJtc2c7CiAKLQlEQkcoInN0YXRlICVzLCBzdGF0dXMgPSAweCUwMnhcbiIsIAotCSAgICBzY3gyMDBfYWNiX3N0YXRlX25hbWVbaWZhY2UtPnN0YXRlXSwgc3RhdHVzKTsKKwlkZXZfZGJnKCZpZmFjZS0+YWRhcHRlci5kZXYsICJzdGF0ZSAlcywgc3RhdHVzID0gMHglMDJ4XG4iLAorCQlzY3gyMDBfYWNiX3N0YXRlX25hbWVbaWZhY2UtPnN0YXRlXSwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBBQ0JTVF9CRVIpIHsKIAkJZXJybXNnID0gImJ1cyBlcnJvciI7CkBAIC0xMzMsOCArMTI0LDE3IEBACiAJCWVycm1zZyA9ICJub3QgbWFzdGVyIjsKIAkJZ290byBlcnJvcjsKIAl9Ci0JaWYgKHN0YXR1cyAmIEFDQlNUX05FR0FDSykKLQkJZ290byBuZWdhY2s7CisJaWYgKHN0YXR1cyAmIEFDQlNUX05FR0FDSykgeworCQlkZXZfZGJnKCZpZmFjZS0+YWRhcHRlci5kZXYsICJuZWdhdGl2ZSBhY2sgaW4gc3RhdGUgJXNcbiIsCisJCQlzY3gyMDBfYWNiX3N0YXRlX25hbWVbaWZhY2UtPnN0YXRlXSk7CisKKwkJaWZhY2UtPnN0YXRlID0gc3RhdGVfaWRsZTsKKwkJaWZhY2UtPnJlc3VsdCA9IC1FTlhJTzsKKworCQlvdXRiKGluYihBQ0JDVEwxKSB8IEFDQkNUTDFfU1RPUCwgQUNCQ1RMMSk7CisJCW91dGIoQUNCU1RfU1RBU1RSIHwgQUNCU1RfTkVHQUNLLCBBQ0JTVCk7CisJCXJldHVybjsKKwl9CiAKIAlzd2l0Y2ggKGlmYWNlLT5zdGF0ZSkgewogCWNhc2Ugc3RhdGVfaWRsZToKQEAgLTE2MCwxMCArMTYwLDEwIEBACiAJY2FzZSBzdGF0ZV9yZXBlYXRfc3RhcnQ6CiAJCW91dGIoaW5iKEFDQkNUTDEpIHwgQUNCQ1RMMV9TVEFSVCwgQUNCQ1RMMSk7CiAJCS8qIGZhbGx0aHJvdWdoICovCi0JCQorCiAJY2FzZSBzdGF0ZV9xdWljazoKIAkJaWYgKGlmYWNlLT5hZGRyZXNzX2J5dGUgJiAxKSB7Ci0JCQlpZiAoaWZhY2UtPmxlbiA9PSAxKSAKKwkJCWlmIChpZmFjZS0+bGVuID09IDEpCiAJCQkJb3V0YihpbmIoQUNCQ1RMMSkgfCBBQ0JDVEwxX0FDSywgQUNCQ1RMMSk7CiAJCQllbHNlCiAJCQkJb3V0YihpbmIoQUNCQ1RMMSkgJiB+QUNCQ1RMMV9BQ0ssIEFDQkNUTDEpOwpAQCAtMjAyLDI2ICsyMDIsMTUgQEAKIAkJCW91dGIoaW5iKEFDQkNUTDEpIHwgQUNCQ1RMMV9TVE9QLCBBQ0JDVEwxKTsKIAkJCWJyZWFrOwogCQl9Ci0JCQorCiAJCW91dGIoKmlmYWNlLT5wdHIrKywgQUNCU0RBKTsKIAkJLS1pZmFjZS0+bGVuOwotCQkKKwogCQlicmVhazsKIAl9CiAKIAlyZXR1cm47CiAKLSBuZWdhY2s6Ci0JREJHKCJuZWdhdGl2ZSBhY2tub3dsZWRnZSBpbiBzdGF0ZSAlc1xuIiwgCi0JICAgIHNjeDIwMF9hY2Jfc3RhdGVfbmFtZVtpZmFjZS0+c3RhdGVdKTsKLQotCWlmYWNlLT5zdGF0ZSA9IHN0YXRlX2lkbGU7Ci0JaWZhY2UtPnJlc3VsdCA9IC1FTlhJTzsKLQotCW91dGIoaW5iKEFDQkNUTDEpIHwgQUNCQ1RMMV9TVE9QLCBBQ0JDVEwxKTsKLQlvdXRiKEFDQlNUX1NUQVNUUiB8IEFDQlNUX05FR0FDSywgQUNCU1QpOwotCXJldHVybjsKLQogIGVycm9yOgogCWRldl9lcnIoJmlmYWNlLT5hZGFwdGVyLmRldiwgIiVzIGluIHN0YXRlICVzXG4iLCBlcnJtc2csCiAJCXNjeDIwMF9hY2Jfc3RhdGVfbmFtZVtpZmFjZS0+c3RhdGVdKTsKQEAgLTIzMSwyMCArMjIwLDkgQEAKIAlpZmFjZS0+bmVlZHNfcmVzZXQgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBzY3gyMDBfYWNiX3RpbWVvdXQoc3RydWN0IHNjeDIwMF9hY2JfaWZhY2UgKmlmYWNlKSAKLXsKLQlkZXZfZXJyKCZpZmFjZS0+YWRhcHRlci5kZXYsICJ0aW1lb3V0IGluIHN0YXRlICVzXG4iLAotCQlzY3gyMDBfYWNiX3N0YXRlX25hbWVbaWZhY2UtPnN0YXRlXSk7Ci0KLQlpZmFjZS0+c3RhdGUgPSBzdGF0ZV9pZGxlOwotCWlmYWNlLT5yZXN1bHQgPSAtRUlPOwotCWlmYWNlLT5uZWVkc19yZXNldCA9IDE7Ci19Ci0KLSNpZmRlZiBQT0xMRURfTU9ERQogc3RhdGljIHZvaWQgc2N4MjAwX2FjYl9wb2xsKHN0cnVjdCBzY3gyMDBfYWNiX2lmYWNlICppZmFjZSkKIHsKLQl1OCBzdGF0dXMgPSAwOworCXU4IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAl0aW1lb3V0ID0gamlmZmllcyArIFBPTExfVElNRU9VVDsKQEAgLTI1NCwxNyArMjMyLDIxIEBACiAJCQlzY3gyMDBfYWNiX21hY2hpbmUoaWZhY2UsIHN0YXR1cyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJbXNsZWVwKDEwKTsKKwkJeWllbGQoKTsKIAl9CiAKLQlzY3gyMDBfYWNiX3RpbWVvdXQoaWZhY2UpOworCWRldl9lcnIoJmlmYWNlLT5hZGFwdGVyLmRldiwgInRpbWVvdXQgaW4gc3RhdGUgJXNcbiIsCisJCXNjeDIwMF9hY2Jfc3RhdGVfbmFtZVtpZmFjZS0+c3RhdGVdKTsKKworCWlmYWNlLT5zdGF0ZSA9IHN0YXRlX2lkbGU7CisJaWZhY2UtPnJlc3VsdCA9IC1FSU87CisJaWZhY2UtPm5lZWRzX3Jlc2V0ID0gMTsKIH0KLSNlbmRpZiAvKiBQT0xMRURfTU9ERSAqLwogCiBzdGF0aWMgdm9pZCBzY3gyMDBfYWNiX3Jlc2V0KHN0cnVjdCBzY3gyMDBfYWNiX2lmYWNlICppZmFjZSkKIHsKIAkvKiBEaXNhYmxlIHRoZSBBQ0NFU1MuYnVzIGRldmljZSBhbmQgQ29uZmlndXJlIHRoZSBTQ0wKLSAgICAgICAgICAgZnJlcXVlbmN5OiAxNiBjbG9jayBjeWNsZXMgKi8KKwkgICBmcmVxdWVuY3k6IDE2IGNsb2NrIGN5Y2xlcyAqLwogCW91dGIoMHg3MCwgQUNCQ1RMMik7CiAJLyogUG9sbGluZyBtb2RlICovCiAJb3V0YigwLCBBQ0JDVEwxKTsKQEAgLTI4Myw5ICsyNjUsOSBAQAogfQogCiBzdGF0aWMgczMyIHNjeDIwMF9hY2Jfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJdTE2IGFkZHJlc3MsIHVuc2lnbmVkIHNob3J0IGZsYWdzLAkKLQkJCQljaGFyIHJ3LCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwgCi0JCQkJdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCisJCQkJIHUxNiBhZGRyZXNzLCB1bnNpZ25lZCBzaG9ydCBmbGFncywKKwkJCQkgY2hhciBydywgdTggY29tbWFuZCwgaW50IHNpemUsCisJCQkJIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQogewogCXN0cnVjdCBzY3gyMDBfYWNiX2lmYWNlICppZmFjZSA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CiAJaW50IGxlbjsKQEAgLTI5NSw1MyArMjc3LDQ3IEBACiAKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIEkyQ19TTUJVU19RVUlDSzoKLQkgICAgCWxlbiA9IDA7Ci0JICAgIAlidWZmZXIgPSBOVUxMOwotCSAgICAJYnJlYWs7CisJCWxlbiA9IDA7CisJCWJ1ZmZlciA9IE5VTEw7CisJCWJyZWFrOworCiAJY2FzZSBJMkNfU01CVVNfQllURToKLQkJaWYgKHJ3ID09IEkyQ19TTUJVU19SRUFEKSB7Ci0JCQlsZW4gPSAxOwotCQkJYnVmZmVyID0gJmRhdGEtPmJ5dGU7Ci0JCX0gZWxzZSB7Ci0JCQlsZW4gPSAxOwotCQkJYnVmZmVyID0gJmNvbW1hbmQ7Ci0JCX0KLQkgICAgCWJyZWFrOworCQlsZW4gPSAxOworCQlidWZmZXIgPSBydyA/ICZkYXRhLT5ieXRlIDogJmNvbW1hbmQ7CisJCWJyZWFrOworCiAJY2FzZSBJMkNfU01CVVNfQllURV9EQVRBOgotCSAgICAJbGVuID0gMTsKLQkgICAgCWJ1ZmZlciA9ICZkYXRhLT5ieXRlOwotCSAgICAJYnJlYWs7CisJCWxlbiA9IDE7CisJCWJ1ZmZlciA9ICZkYXRhLT5ieXRlOworCQlicmVhazsKKwogCWNhc2UgSTJDX1NNQlVTX1dPUkRfREFUQToKIAkJbGVuID0gMjsKLQkgICAgCWN1cl93b3JkID0gY3B1X3RvX2xlMTYoZGF0YS0+d29yZCk7Ci0JICAgIAlidWZmZXIgPSAodTggKikmY3VyX3dvcmQ7CisJCWN1cl93b3JkID0gY3B1X3RvX2xlMTYoZGF0YS0+d29yZCk7CisJCWJ1ZmZlciA9ICh1OCAqKSZjdXJfd29yZDsKIAkJYnJlYWs7CisKIAljYXNlIEkyQ19TTUJVU19CTE9DS19EQVRBOgotCSAgICAJbGVuID0gZGF0YS0+YmxvY2tbMF07Ci0JICAgIAlidWZmZXIgPSAmZGF0YS0+YmxvY2tbMV07CisJCWxlbiA9IGRhdGEtPmJsb2NrWzBdOworCQlidWZmZXIgPSAmZGF0YS0+YmxvY2tbMV07CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKLQkgICAgCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURCRygic2l6ZT0lZCwgYWRkcmVzcz0weCV4LCBjb21tYW5kPTB4JXgsIGxlbj0lZCwgcmVhZD0lZFxuIiwKLQkgICAgc2l6ZSwgYWRkcmVzcywgY29tbWFuZCwgbGVuLCBydyA9PSBJMkNfU01CVVNfUkVBRCk7Ci0KLQlpZiAoIWxlbiAmJiBydyA9PSBJMkNfU01CVVNfUkVBRCkgewotCQlkZXZfd2FybigmYWRhcHRlci0+ZGV2LCAiemVybyBsZW5ndGggcmVhZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChsZW4gJiYgIWJ1ZmZlcikgewotCQlkZXZfd2FybigmYWRhcHRlci0+ZGV2LCAibm9uemVybyBsZW5ndGggYnV0IG5vIGJ1ZmZlclxuIik7Ci0JCXJldHVybiAtRUZBVUxUOworCWRldl9kYmcoJmFkYXB0ZXItPmRldiwKKwkJInNpemU9JWQsIGFkZHJlc3M9MHgleCwgY29tbWFuZD0weCV4LCBsZW49JWQsIHJlYWQ9JWRcbiIsCisJCXNpemUsIGFkZHJlc3MsIGNvbW1hbmQsIGxlbiwgcncpOworCisJaWYgKCFsZW4gJiYgcncgPT0gSTJDX1NNQlVTX1JFQUQpIHsKKwkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiemVybyBsZW5ndGggcmVhZFxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRvd24oJmlmYWNlLT5zZW0pOworCW11dGV4X2xvY2soJmlmYWNlLT5tdXRleCk7CiAKLQlpZmFjZS0+YWRkcmVzc19ieXRlID0gYWRkcmVzczw8MTsKLQlpZiAocncgPT0gSTJDX1NNQlVTX1JFQUQpCi0JCWlmYWNlLT5hZGRyZXNzX2J5dGUgfD0gMTsKKwlpZmFjZS0+YWRkcmVzc19ieXRlID0gKGFkZHJlc3MgPDwgMSkgfCBydzsKIAlpZmFjZS0+Y29tbWFuZCA9IGNvbW1hbmQ7CiAJaWZhY2UtPnB0ciA9IGJ1ZmZlcjsKIAlpZmFjZS0+bGVuID0gbGVuOwpAQCAtMzU1LDI1ICszMzEsMjEgQEAKIAllbHNlCiAJCWlmYWNlLT5zdGF0ZSA9IHN0YXRlX2FkZHJlc3M7CiAKLSNpZmRlZiBQT0xMRURfTU9ERQogCXdoaWxlIChpZmFjZS0+c3RhdGUgIT0gc3RhdGVfaWRsZSkKIAkJc2N4MjAwX2FjYl9wb2xsKGlmYWNlKTsKLSNlbHNlIC8qIFBPTExFRF9NT0RFICovCi0jZXJyb3IgSW50ZXJydXB0IGRyaXZlbiBtb2RlIG5vdCBpbXBsZW1lbnRlZAotI2VuZGlmIC8qIFBPTExFRF9NT0RFICovCQogCiAJaWYgKGlmYWNlLT5uZWVkc19yZXNldCkKIAkJc2N4MjAwX2FjYl9yZXNldChpZmFjZSk7CiAKIAlyYyA9IGlmYWNlLT5yZXN1bHQ7CiAKLQl1cCgmaWZhY2UtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZpZmFjZS0+bXV0ZXgpOwogCiAJaWYgKHJjID09IDAgJiYgc2l6ZSA9PSBJMkNfU01CVVNfV09SRF9EQVRBICYmIHJ3ID09IEkyQ19TTUJVU19SRUFEKQotCSAgICAJZGF0YS0+d29yZCA9IGxlMTZfdG9fY3B1KGN1cl93b3JkKTsKKwkJZGF0YS0+d29yZCA9IGxlMTZfdG9fY3B1KGN1cl93b3JkKTsKIAogI2lmZGVmIERFQlVHCi0JREJHKCI6IHRyYW5zZmVyIGRvbmUsIHJlc3VsdDogJWQiLCByYyk7CisJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAidHJhbnNmZXIgZG9uZSwgcmVzdWx0OiAlZCIsIHJjKTsKIAlpZiAoYnVmZmVyKSB7CiAJCWludCBpOwogCQlwcmludGsoIiBkYXRhOiIpOwpAQCAtNDAwLDE3ICszNzIsMTggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2N4MjAwX2FjYl9pZmFjZSAqc2N4MjAwX2FjYl9saXN0Oworc3RhdGljIERFQ0xBUkVfTVVURVgoc2N4MjAwX2FjYl9saXN0X211dGV4KTsKIAogc3RhdGljIGludCBzY3gyMDBfYWNiX3Byb2JlKHN0cnVjdCBzY3gyMDBfYWNiX2lmYWNlICppZmFjZSkKIHsKIAl1OCB2YWw7CiAKIAkvKiBEaXNhYmxlIHRoZSBBQ0NFU1MuYnVzIGRldmljZSBhbmQgQ29uZmlndXJlIHRoZSBTQ0wKLSAgICAgICAgICAgZnJlcXVlbmN5OiAxNiBjbG9jayBjeWNsZXMgKi8KKwkgICBmcmVxdWVuY3k6IDE2IGNsb2NrIGN5Y2xlcyAqLwogCW91dGIoMHg3MCwgQUNCQ1RMMik7CiAKIAlpZiAoaW5iKEFDQkNUTDIpICE9IDB4NzApIHsKLQkJREJHKCJBQ0JDVEwyIHJlYWRiYWNrIGZhaWxlZFxuIik7CisJCXByX2RlYnVnKE5BTUUgIjogQUNCQ1RMMiByZWFkYmFjayBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtNDE4LDcgKzM5MSw4IEBACiAKIAl2YWwgPSBpbmIoQUNCQ1RMMSk7CiAJaWYgKHZhbCkgewotCQlEQkcoImRpc2FibGVkLCBidXQgQUNCQ1RMMT0weCUwMnhcbiIsIHZhbCk7CisJCXByX2RlYnVnKE5BTUUgIjogZGlzYWJsZWQsIGJ1dCBBQ0JDVEwxPTB4JTAyeFxuIiwKKwkJCXZhbCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCkBAIC00MjgsMTggKzQwMiwxOSBAQAogCiAJdmFsID0gaW5iKEFDQkNUTDEpOwogCWlmICgodmFsICYgQUNCQ1RMMV9OTUlOVEUpICE9IEFDQkNUTDFfTk1JTlRFKSB7Ci0JCURCRygiZW5hYmxlZCwgYnV0IE5NSU5URSB3b24ndCBiZSBzZXQsIEFDQkNUTDE9MHglMDJ4XG4iLCB2YWwpOworCQlwcl9kZWJ1ZyhOQU1FICI6IGVuYWJsZWQsIGJ1dCBOTUlOVEUgd29uJ3QgYmUgc2V0LCAiCisJCQkgIkFDQkNUTDE9MHglMDJ4XG4iLCB2YWwpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50ICBfX2luaXQgc2N4MjAwX2FjYl9jcmVhdGUoaW50IGJhc2UsIGludCBpbmRleCkKK3N0YXRpYyBpbnQgIF9faW5pdCBzY3gyMDBfYWNiX2NyZWF0ZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgYmFzZSwgaW50IGluZGV4KQogewogCXN0cnVjdCBzY3gyMDBfYWNiX2lmYWNlICppZmFjZTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmM7CiAJY2hhciBkZXNjcmlwdGlvbls2NF07CiAKIAlpZmFjZSA9IGt6YWxsb2Moc2l6ZW9mKCppZmFjZSksIEdGUF9LRVJORUwpOwpAQCAtNDUxLDUwICs0MjYsNTEgQEAKIAogCWFkYXB0ZXIgPSAmaWZhY2UtPmFkYXB0ZXI7CiAJaTJjX3NldF9hZGFwZGF0YShhZGFwdGVyLCBpZmFjZSk7Ci0Jc25wcmludGYoYWRhcHRlci0+bmFtZSwgSTJDX05BTUVfU0laRSwgIlNDeDIwMCBBQ0IlZCIsIGluZGV4KTsKKwlzbnByaW50ZihhZGFwdGVyLT5uYW1lLCBJMkNfTkFNRV9TSVpFLCAiJXMgQUNCJWQiLCB0ZXh0LCBpbmRleCk7CiAJYWRhcHRlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlhZGFwdGVyLT5pZCA9IEkyQ19IV19TTUJVU19TQ1gyMDA7CiAJYWRhcHRlci0+YWxnbyA9ICZzY3gyMDBfYWNiX2FsZ29yaXRobTsKIAlhZGFwdGVyLT5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKIAotCWluaXRfTVVURVgoJmlmYWNlLT5zZW0pOworCW11dGV4X2luaXQoJmlmYWNlLT5tdXRleCk7CiAKLQlzbnByaW50ZihkZXNjcmlwdGlvbiwgc2l6ZW9mKGRlc2NyaXB0aW9uKSwgIk5hdFNlbWkgU0N4MjAwIEFDQ0VTUy5idXMgWyVzXSIsIGFkYXB0ZXItPm5hbWUpOworCXNucHJpbnRmKGRlc2NyaXB0aW9uLCBzaXplb2YoZGVzY3JpcHRpb24pLCAiJXMgQUNDRVNTLmJ1cyBbJXNdIiwKKwkJIHRleHQsIGFkYXB0ZXItPm5hbWUpOworCiAJaWYgKHJlcXVlc3RfcmVnaW9uKGJhc2UsIDgsIGRlc2NyaXB0aW9uKSA9PSAwKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgImNhbid0IGFsbG9jYXRlIGlvIDB4JXgtMHgleFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIE5BTUUgIjogY2FuJ3QgYWxsb2NhdGUgaW8gMHgleC0weCV4XG4iLAogCQkJYmFzZSwgYmFzZSArIDgtMSk7CiAJCXJjID0gLUVCVVNZOwotCQlnb3RvIGVycm91dDsKKwkJZ290byBlcnJvdXRfZnJlZTsKIAl9CiAJaWZhY2UtPmJhc2UgPSBiYXNlOwogCiAJcmMgPSBzY3gyMDBfYWNiX3Byb2JlKGlmYWNlKTsKIAlpZiAocmMpIHsKLQkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgInByb2JlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyb3V0OworCQlwcmludGsoS0VSTl9XQVJOSU5HIE5BTUUgIjogcHJvYmUgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvdXRfcmVsZWFzZTsKIAl9CiAKIAlzY3gyMDBfYWNiX3Jlc2V0KGlmYWNlKTsKIAogCWlmIChpMmNfYWRkX2FkYXB0ZXIoYWRhcHRlcikgPCAwKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPmRldiwgImZhaWxlZCB0byByZWdpc3RlclxuIik7CisJCXByaW50ayhLRVJOX0VSUiBOQU1FICI6IGZhaWxlZCB0byByZWdpc3RlclxuIik7CiAJCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJvdXQ7CisJCWdvdG8gZXJyb3V0X3JlbGVhc2U7CiAJfQogCi0JbG9ja19rZXJuZWwoKTsKKwlkb3duKCZzY3gyMDBfYWNiX2xpc3RfbXV0ZXgpOwogCWlmYWNlLT5uZXh0ID0gc2N4MjAwX2FjYl9saXN0OwogCXNjeDIwMF9hY2JfbGlzdCA9IGlmYWNlOwotCXVubG9ja19rZXJuZWwoKTsKKwl1cCgmc2N4MjAwX2FjYl9saXN0X211dGV4KTsKIAogCXJldHVybiAwOwogCisgZXJyb3V0X3JlbGVhc2U6CisJcmVsZWFzZV9yZWdpb24oaWZhY2UtPmJhc2UsIDgpOworIGVycm91dF9mcmVlOgorCWtmcmVlKGlmYWNlKTsKICBlcnJvdXQ6Ci0JaWYgKGlmYWNlKSB7Ci0JCWlmIChpZmFjZS0+YmFzZSkKLQkJCXJlbGVhc2VfcmVnaW9uKGlmYWNlLT5iYXNlLCA4KTsKLQkJa2ZyZWUoaWZhY2UpOwotCX0KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTUwNCw1MCArNDgwLDY5IEBACiAJeyB9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRpdmlsX3BjaVtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05TLCAgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSVNBKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lTQSkgfSwKKwl7IH0gLyogTlVMTCBlbnRyeSAqLworfTsKKworI2RlZmluZSBNU1JfTEJBUl9TTUIJCTB4NTE0MDAwMEIKKworc3RhdGljIGludCBzY3gyMDBfYWRkX2NzNTUzeCh2b2lkKQoreworCXUzMglsb3csIGhpOworCXUzMglzbWJfYmFzZTsKKworCS8qIEdyYWIgJiByZXNlcnZlIHRoZSBTTUIgSS9PIHJhbmdlICovCisJcmRtc3IoTVNSX0xCQVJfU01CLCBsb3csIGhpKTsKKworCS8qIENoZWNrIHRoZSBJTyBtYXNrIGFuZCB3aGV0aGVyIFNNQiBpcyBlbmFibGVkICovCisJaWYgKGhpICE9IDB4MDAwMEYwMDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBOQU1FICI6IFNNQnVzIG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogU01CdXMgSU8gc2l6ZSBpcyA4IGJ5dGVzICovCisJc21iX2Jhc2UgPSBsb3cgJiAweDAwMDBGRkY4OworCisJcmV0dXJuIHNjeDIwMF9hY2JfY3JlYXRlKCJDUzU1MzUiLCBzbWJfYmFzZSwgMCk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNjeDIwMF9hY2JfaW5pdCh2b2lkKQogewogCWludCBpOwotCWludCByYzsKKwlpbnQJcmMgPSAtRU5PREVWOwogCiAJcHJfZGVidWcoTkFNRSAiOiBOYXRTZW1pIFNDeDIwMCBBQ0NFU1MuYnVzIERyaXZlclxuIik7CiAKIAkvKiBWZXJpZnkgdGhhdCB0aGlzIHJlYWxseSBpcyBhIFNDeDIwMCBwcm9jZXNzb3IgKi8KLQlpZiAocGNpX2Rldl9wcmVzZW50KHNjeDIwMCkgPT0gMCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHBjaV9kZXZfcHJlc2VudChzY3gyMDApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfREVWSUNFUzsgKytpKSB7CisJCQlpZiAoYmFzZVtpXSA+IDApCisJCQkJcmMgPSBzY3gyMDBfYWNiX2NyZWF0ZSgiU0N4MjAwIiwgYmFzZVtpXSwgaSk7CisJCX0KKwl9IGVsc2UgaWYgKHBjaV9kZXZfcHJlc2VudChkaXZpbF9wY2kpKQorCQlyYyA9IHNjeDIwMF9hZGRfY3M1NTN4KCk7CiAKLQlyYyA9IC1FTlhJTzsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFVklDRVM7ICsraSkgewotCQlpZiAoYmFzZVtpXSA+IDApCi0JCQlyYyA9IHNjeDIwMF9hY2JfY3JlYXRlKGJhc2VbaV0sIGkpOwotCX0KLQlpZiAoc2N4MjAwX2FjYl9saXN0KQotCQlyZXR1cm4gMDsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzY3gyMDBfYWNiX2NsZWFudXAodm9pZCkKIHsKIAlzdHJ1Y3Qgc2N4MjAwX2FjYl9pZmFjZSAqaWZhY2U7Ci0JbG9ja19rZXJuZWwoKTsKKworCWRvd24oJnNjeDIwMF9hY2JfbGlzdF9tdXRleCk7CiAJd2hpbGUgKChpZmFjZSA9IHNjeDIwMF9hY2JfbGlzdCkgIT0gTlVMTCkgewogCQlzY3gyMDBfYWNiX2xpc3QgPSBpZmFjZS0+bmV4dDsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQl1cCgmc2N4MjAwX2FjYl9saXN0X211dGV4KTsKIAogCQlpMmNfZGVsX2FkYXB0ZXIoJmlmYWNlLT5hZGFwdGVyKTsKIAkJcmVsZWFzZV9yZWdpb24oaWZhY2UtPmJhc2UsIDgpOwogCQlrZnJlZShpZmFjZSk7Ci0JCWxvY2tfa2VybmVsKCk7CisJCWRvd24oJnNjeDIwMF9hY2JfbGlzdF9tdXRleCk7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwl1cCgmc2N4MjAwX2FjYl9saXN0X211dGV4KTsKIH0KIAogbW9kdWxlX2luaXQoc2N4MjAwX2FjYl9pbml0KTsKIG1vZHVsZV9leGl0KHNjeDIwMF9hY2JfY2xlYW51cCk7Ci0KLS8qCi0gICAgTG9jYWwgdmFyaWFibGVzOgotICAgICAgICBjb21waWxlLWNvbW1hbmQ6ICJtYWtlIC1rIC1DIC4uLy4uIFNVQkRJUlM9ZHJpdmVycy9pMmMgbW9kdWxlcyIKLSAgICAgICAgYy1iYXNpYy1vZmZzZXQ6IDgKLSAgICBFbmQ6Ci0qLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9kczEzNzQuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCmluZGV4IDA3MTBiOWQuLjAzZDA5ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2RzMTM3NC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBEUzEzNzRfUkVHX1RPRDAJCTB4MDAKICNkZWZpbmUgRFMxMzc0X1JFR19UT0QxCQkweDAxCkBAIC00MSw3ICs0Miw3IEBACiAKICNkZWZpbmUJRFMxMzc0X0RSVl9OQU1FCQkiZHMxMzc0IgogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChkczEzNzRfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChkczEzNzRfbXV0ZXgpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHMxMzc0X2RyaXZlcjsKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqc2F2ZV9jbGllbnQ7CkBAIC0xMTQsNyArMTE1LDcgQEAKIAl1bG9uZyB0MSwgdDI7CiAJaW50IGxpbWl0ID0gMTA7CQkvKiBhcmJpdHJhcnkgcmV0cnkgbGltaXQgKi8KIAotCWRvd24oJmRzMTM3NF9tdXRleCk7CisJbXV0ZXhfbG9jaygmZHMxMzc0X211dGV4KTsKIAogCS8qCiAJICogU2luY2UgdGhlIHJlYWRzIGFyZSBiZWluZyBwZXJmb3JtZWQgb25lIGJ5dGUgYXQgYSB0aW1lIHVzaW5nCkBAIC0xMjcsNyArMTI4LDcgQEAKIAkJdDIgPSBkczEzNzRfcmVhZF9ydGMoKTsKIAl9IHdoaWxlICh0MSAhPSB0MiAmJiBsaW1pdC0tKTsKIAotCXVwKCZkczEzNzRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZHMxMzc0X211dGV4KTsKIAogCWlmICh0MSAhPSB0MikgewogCQlkZXZfd2Fybigmc2F2ZV9jbGllbnQtPmRldiwKQEAgLTE0NSw3ICsxNDYsNyBAQAogCiAJdDEgPSAqKHVsb25nICopIGFyZzsKIAotCWRvd24oJmRzMTM3NF9tdXRleCk7CisJbXV0ZXhfbG9jaygmZHMxMzc0X211dGV4KTsKIAogCS8qCiAJICogU2luY2UgdGhlIHdyaXRlcyBhcmUgYmVpbmcgcGVyZm9ybWVkIG9uZSBieXRlIGF0IGEgdGltZSB1c2luZwpAQCAtMTU4LDcgKzE1OSw3IEBACiAJCXQyID0gZHMxMzc0X3JlYWRfcnRjKCk7CiAJfSB3aGlsZSAodDEgIT0gdDIgJiYgbGltaXQtLSk7CiAKLQl1cCgmZHMxMzc0X211dGV4KTsKKwltdXRleF91bmxvY2soJmRzMTM3NF9tdXRleCk7CiAKIAlpZiAodDEgIT0gdDIpCiAJCWRldl93YXJuKCZzYXZlX2NsaWVudC0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvZWVwcm9tLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9lZXByb20uYwppbmRleCA0MTExNmI3Li4xM2MxMDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9lZXByb20uYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9lZXByb20uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LApAQCAtNTQsNyArNTUsNyBAQAogLyogRWFjaCBjbGllbnQgaGFzIHRoaXMgYWRkaXRpb25hbCBkYXRhICovCiBzdHJ1Y3QgZWVwcm9tX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAl1OCB2YWxpZDsJCQkvKiBiaXRmaWVsZCwgYml0IT0wIGlmIHNsaWNlIGlzIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWRbOF07CS8qIEluIGppZmZpZXMsIDggc2xpY2VzICovCiAJdTggZGF0YVtFRVBST01fU0laRV07CQkvKiBSZWdpc3RlciB2YWx1ZXMgKi8KQEAgLTgxLDcgKzgyLDcgQEAKIAlzdHJ1Y3QgZWVwcm9tX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaSwgajsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAoIShkYXRhLT52YWxpZCAmICgxIDw8IHNsaWNlKSkgfHwKIAkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWRbc2xpY2VdICsgMzAwICogSFopKSB7CkBAIC0xMDcsNyArMTA4LDcgQEAKIAkJZGF0YS0+dmFsaWQgfD0gKDEgPDwgc2xpY2UpOwogCX0KIGV4aXQ6Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZWVwcm9tX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQpAQCAtMTg3LDcgKzE4OCw3IEBACiAJLyogRmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgKi8KIAlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsICJlZXByb20iLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT52YWxpZCA9IDA7Ci0JaW5pdF9NVVRFWCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5uYXR1cmUgPSBVTktOT1dOOwogCiAJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYwppbmRleCAxMjUxYzdmLi5lNmYxYWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYwpAQCAtMTYzNSw4ICsxNjM1LDYgQEAKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJpc3AxMzAxX29tYXAiLAogCX0sCi0JLmlkCQk9IDEzMDEsCQkvKiBGSVhNRSAib2ZmaWNpYWwiLCBpMmMtaWRzLmggKi8KLQkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAogCS5hdHRhY2hfYWRhcHRlcgk9IGlzcDEzMDFfc2Nhbl9idXMsCiAJLmRldGFjaF9jbGllbnQJPSBpc3AxMzAxX2RldGFjaF9jbGllbnQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvbTQxdDAwLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9tNDF0MDAuYwppbmRleCAyZGMzZDQ4Li5iNWFhYmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9tNDF0MDAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9tNDF0MDAuYwpAQCAtMjQsMTMgKzI0LDE0IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogCiAjZGVmaW5lCU00MVQwMF9EUlZfTkFNRQkJIm00MXQwMCIKIAotc3RhdGljIERFQ0xBUkVfTVVURVgobTQxdDAwX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgobTQxdDAwX211dGV4KTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG00MXQwMF9kcml2ZXI7CiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKnNhdmVfY2xpZW50OwpAQCAtNTQsNyArNTUsNyBAQAogCXNlYyA9IG1pbiA9IGhvdXIgPSBkYXkgPSBtb24gPSB5ZWFyID0gMDsKIAlzZWMxID0gbWluMSA9IGhvdXIxID0gZGF5MSA9IG1vbjEgPSB5ZWFyMSA9IDA7CiAKLQlkb3duKCZtNDF0MDBfbXV0ZXgpOworCW11dGV4X2xvY2soJm00MXQwMF9tdXRleCk7CiAJZG8gewogCQlpZiAoKChzZWMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDApKSA+PSAwKQogCQkJJiYgKChtaW4gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoc2F2ZV9jbGllbnQsIDEpKQpAQCAtODAsNyArODEsNyBAQAogCQltb24xID0gbW9uOwogCQl5ZWFyMSA9IHllYXI7CiAJfSB3aGlsZSAoLS1saW1pdCA+IDApOwotCXVwKCZtNDF0MDBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbTQxdDAwX211dGV4KTsKIAogCWlmIChsaW1pdCA9PSAwKSB7CiAJCWRldl93YXJuKCZzYXZlX2NsaWVudC0+ZGV2LApAQCAtMTI1LDcgKzEyNiw3IEBACiAJQklOX1RPX0JDRCh0bS50bV9tZGF5KTsKIAlCSU5fVE9fQkNEKHRtLnRtX3llYXIpOwogCi0JZG93bigmbTQxdDAwX211dGV4KTsKKwltdXRleF9sb2NrKCZtNDF0MDBfbXV0ZXgpOwogCWlmICgoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgMCwgdG0udG1fc2VjICYgMHg3ZikgPCAwKQogCQl8fCAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzYXZlX2NsaWVudCwgMSwgdG0udG1fbWluICYgMHg3ZikKIAkJCTwgMCkKQEAgLTE0MCw3ICsxNDEsNyBAQAogCiAJCWRldl93YXJuKCZzYXZlX2NsaWVudC0+ZGV2LCJtNDF0MDA6IGNhbid0IHdyaXRlIHRvIHJ0YyBjaGlwXG4iKTsKIAotCXVwKCZtNDF0MDBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbTQxdDAwX211dGV4KTsKIAlyZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL21heDY4NzUuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL21heDY4NzUuYwppbmRleCA2ZDNmZjU4Li44OGQyZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9tYXg2ODc1LmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvbWF4Njg3NS5jCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiBEbyBub3Qgc2NhbiAtIHRoZSBNQVg2ODc1IGFjY2VzcyBtZXRob2Qgd2lsbCB3cml0ZSB0byBzb21lIEVFUFJPTSBjaGlwcyAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHtJMkNfQ0xJRU5UX0VORH07CkBAIC01NCw3ICs1NCw3IEBACiAvKiBFYWNoIGNsaWVudCBoYXMgdGhpcyBhZGRpdGlvbmFsIGRhdGEgKi8KIHN0cnVjdCBtYXg2ODc1X2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50CWNsaWVudDsKLQlzdHJ1Y3Qgc2VtYXBob3JlCXVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleAkJdXBkYXRlX2xvY2s7CiAKIAl1MzIJCQl2YWxpZDsKIAl1OAkJCWRhdGFbVVNFUl9FRVBST01fU0laRV07CkBAIC04Myw3ICs4Myw3IEBACiAJaWYgKHNsaWNlID49IFVTRVJfRUVQUk9NX1NMSUNFUykKIAkJcmV0dXJuOwogCi0JZG93bigmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWJ1ZiA9ICZkYXRhLT5kYXRhW3NsaWNlIDw8IFNMSUNFX0JJVFNdOwogCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJZGF0YS0+dmFsaWQgfD0gKDEgPDwgc2xpY2UpOwogCX0KIGV4aXRfdXA6Ci0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIH0KIAogc3RhdGljIHNzaXplX3QgbWF4Njg3NV9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjaGFyICpidWYsIGxvZmZfdCBvZmYsCkBAIC0xOTYsNyArMTk2LDcgQEAKIAlyZWFsX2NsaWVudC0+ZHJpdmVyID0gJm1heDY4NzVfZHJpdmVyOwogCXJlYWxfY2xpZW50LT5mbGFncyA9IDA7CiAJc3RybGNweShyZWFsX2NsaWVudC0+bmFtZSwgIm1heDY4NzUiLCBJMkNfTkFNRV9TSVpFKTsKLQlpbml0X01VVEVYKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogSW5pdCBmYWtlIGNsaWVudCBkYXRhICovCiAJLyogc2V0IHRoZSBjbGllbnQgZGF0YSB0byB0aGUgaTJjX2NsaWVudCBzbyB0aGF0IGl0IHdpbGwgZ2V0IGZyZWVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMKaW5kZXggMzZjZmYwOS4uOTI1YTZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvcGNmODU5MS5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1OTEuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsCkBAIC03NCw3ICs3NSw3IEBACiAKIHN0cnVjdCBwY2Y4NTkxX2RhdGEgewogCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHVwZGF0ZV9sb2NrOworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAogCXU4IGNvbnRyb2w7CiAJdTggYW91dDsKQEAgLTE0NCwxMyArMTQ1LDEzIEBACiAJc3RydWN0IHBjZjg1OTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKLQlkb3duKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWlmICh2YWwpCiAJCWRhdGEtPmNvbnRyb2wgfD0gUENGODU5MV9DT05UUk9MX0FPRUY7CiAJZWxzZQogCQlkYXRhLT5jb250cm9sICY9IH5QQ0Y4NTkxX0NPTlRST0xfQU9FRjsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIGRhdGEtPmNvbnRyb2wpOwotCXVwKCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0yMDAsNyArMjAxLDcgQEAKIAkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyBhbmQgcHV0IGl0IGludG8gdGhlIGdsb2JhbCAKIAkgICBsaXN0ICovCiAJc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCAicGNmODU5MSIsIEkyQ19OQU1FX1NJWkUpOwotCWluaXRfTVVURVgoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCiAJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCkBAIC0yNjUsNyArMjY2LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBwY2Y4NTkxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWRvd24oJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAlpZiAoKGRhdGEtPmNvbnRyb2wgJiBQQ0Y4NTkxX0NPTlRST0xfQUlDSF9NQVNLKSAhPSBjaGFubmVsKSB7CiAJCWRhdGEtPmNvbnRyb2wgPSAoZGF0YS0+Y29udHJvbCAmIH5QQ0Y4NTkxX0NPTlRST0xfQUlDSF9NQVNLKQpAQCAtMjc4LDcgKzI3OSw3IEBACiAJfQogCXZhbHVlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogCi0JdXAoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAogCWlmICgoY2hhbm5lbCA9PSAyICYmIGlucHV0X21vZGUgPT0gMikgfHwKIAkgICAgKGNoYW5uZWwgIT0gMyAmJiAoaW5wdXRfbW9kZSA9PSAxIHx8IGlucHV0X21vZGUgPT0gMykpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvcnRjODU2NC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvcnRjODU2NC5jCmluZGV4IGNlYWE2YjAuLjBkODY5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL3J0Yzg1NjQuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9ydGM4NTY0LmMKQEAgLTUzLDcgKzUzLDcgQEAKICNkZWZpbmUgQ1RSTDEoYykgX3J0Yzg1NjRfY3RybDEoYykKICNkZWZpbmUgQ1RSTDIoYykgX3J0Yzg1NjRfY3RybDIoYykKIAotc3RhdGljIGludCBkZWJ1Zzs7CitzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0Yzg1NjRfZHJpdmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKaW5kZXggMWFmM2RmYi4uMTc5YjFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTgxLDcgKzgyLDcgQEAKIAogc3RydWN0IHRwczY1MDEwIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudAljbGllbnQ7Ci0Jc3RydWN0IHNlbWFwaG9yZQlsb2NrOworCXN0cnVjdCBtdXRleAkJbG9jazsKIAlpbnQJCQlpcnE7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiAJc3RydWN0IGRlbnRyeQkJKmZpbGU7CkBAIC0yMTgsNyArMjE5LDcgQEAKIAlzZXFfcHJpbnRmKHMsICJkcml2ZXIgICVzXG52ZXJzaW9uICVzXG5jaGlwICAgICVzXG5cbiIsCiAJCQlEUklWRVJfTkFNRSwgRFJJVkVSX1ZFUlNJT04sIGNoaXApOwogCi0JZG93bigmdHBzLT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0cHMtPmxvY2spOwogCiAJLyogRklYTUUgaG93IGNhbiB3ZSB0ZWxsIHdoZXRoZXIgYSBiYXR0ZXJ5IGlzIHByZXNlbnQ/CiAJICogbGlrZWx5IGludm9sdmVzIGEgY2hhcmdlIGdhdWdpbmcgY2hpcCAobGlrZSBCUTI2NTAxKS4KQEAgLTMwMCw3ICszMDEsNyBAQAogCQkJCSh2MiAmICgxIDw8ICg0ICsgaSkpKSA/ICJyaXNpbmciIDogImZhbGxpbmciKTsKIAl9CiAKLQl1cCgmdHBzLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnRwcy0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNiw3ICs0MTcsNyBAQAogewogCXN0cnVjdCB0cHM2NTAxMAkJKnRwcyA9IF90cHM7CiAKLQlkb3duKCZ0cHMtPmxvY2spOworCW11dGV4X2xvY2soJnRwcy0+bG9jayk7CiAKIAl0cHM2NTAxMF9pbnRlcnJ1cHQodHBzKTsKIApAQCAtNDQ0LDcgKzQ0NSw3IEBACiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTEFHX0lSUV9FTkFCTEUsICZ0cHMtPmZsYWdzKSkKIAkJZW5hYmxlX2lycSh0cHMtPmlycSk7CiAKLQl1cCgmdHBzLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnRwcy0+bG9jayk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0cHM2NTAxMF9pcnEoaW50IGlycSwgdm9pZCAqX3Rwcywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC01MDUsNyArNTA2LDcgQEAKIAlpZiAoIXRwcykKIAkJcmV0dXJuIDA7CiAKLQlpbml0X01VVEVYKCZ0cHMtPmxvY2spOworCW11dGV4X2luaXQoJnRwcy0+bG9jayk7CiAJSU5JVF9XT1JLKCZ0cHMtPndvcmssIHRwczY1MDEwX3dvcmssIHRwcyk7CiAJdHBzLT5pcnEgPSAtMTsKIAl0cHMtPmNsaWVudC5hZGRyID0gYWRkcmVzczsKQEAgLTY5NSw3ICs2OTYsNyBAQAogCWlmICgoZ3BpbyA8IEdQSU8xKSB8fCAoZ3BpbyA+IEdQSU80KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZ0aGVfdHBzLT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKIAogCWRlZmdwaW8gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoJnRoZV90cHMtPmNsaWVudCwgVFBTX0RFRkdQSU8pOwogCkBAIC03MjAsNyArNzIxLDcgQEAKIAkJZ3BpbywgdmFsdWUgPyAiaGlnaCIgOiAibG93IiwKIAkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKCZ0aGVfdHBzLT5jbGllbnQsIFRQU19ERUZHUElPKSk7CiAKLQl1cCgmdGhlX3Rwcy0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTCh0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUpOwpAQCAtNzQ1LDcgKzc0Niw3IEBACiAJCWxlZCA9IExFRDI7CiAJfQogCi0JZG93bigmdGhlX3Rwcy0+bG9jayk7CisJbXV0ZXhfbG9jaygmdGhlX3Rwcy0+bG9jayk7CiAKIAlwcl9kZWJ1ZygiJXM6IGxlZCVpX29uICAgMHglMDJ4XG4iLCBEUklWRVJfTkFNRSwgbGVkLAogCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoJnRoZV90cHMtPmNsaWVudCwKQEAgLTc3MSw3ICs3NzIsNyBAQAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFdyb25nIG1vZGUgcGFyYW1ldGVyIGZvciBzZXRfbGVkKClcbiIsCiAJCSAgICAgICBEUklWRVJfTkFNRSk7Ci0JCXVwKCZ0aGVfdHBzLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03ODEsNyArNzgyLDcgQEAKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHdyaXRlIGxlZCVpX29uIHJlZ2lzdGVyXG4iLAogCQkgICAgICAgRFJJVkVSX05BTUUsIGxlZCk7Ci0JCXVwKCZ0aGVfdHBzLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTc5NCw3ICs3OTUsNyBAQAogCWlmIChzdGF0dXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gd3JpdGUgbGVkJWlfcGVyIHJlZ2lzdGVyXG4iLAogCQkgICAgICAgRFJJVkVSX05BTUUsIGxlZCk7Ci0JCXVwKCZ0aGVfdHBzLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTgwMiw3ICs4MDMsNyBAQAogCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoJnRoZV90cHMtPmNsaWVudCwKIAkJCQlUUFNfTEVEMV9QRVIgKyBvZmZzKSk7CiAKLQl1cCgmdGhlX3Rwcy0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC04MjAsNyArODIxLDcgQEAKIAlpZiAoIXRoZV90cHMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZG93bigmdGhlX3Rwcy0+bG9jayk7CisJbXV0ZXhfbG9jaygmdGhlX3Rwcy0+bG9jayk7CiAKIAl2ZGNkYzIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoJnRoZV90cHMtPmNsaWVudCwgVFBTX1ZEQ0RDMik7CiAJdmRjZGMyICY9IH4oMSA8PCAxKTsKQEAgLTgzMSw3ICs4MzIsNyBAQAogCiAJcHJfZGVidWcoIiVzOiB2aWJyYXRvciAlc1xuIiwgRFJJVkVSX05BTUUsIHZhbHVlID8gIm9uIiA6ICJvZmYiKTsKIAotCXVwKCZ0aGVfdHBzLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnRoZV90cHMtPmxvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MKHRwczY1MDEwX3NldF92aWIpOwpAQCAtODQ4LDcgKzg0OSw3IEBACiAJaWYgKCF0aGVfdHBzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRvd24oJnRoZV90cHMtPmxvY2spOworCW11dGV4X2xvY2soJnRoZV90cHMtPmxvY2spOwogCiAJcHJfZGVidWcoIiVzOiAlcyBsb3dfcHdyLCB2ZGNkYzEgMHglMDJ4XG4iLCBEUklWRVJfTkFNRSwKIAkJbW9kZSA/ICJlbmFibGUiIDogImRpc2FibGUiLApAQCAtODc2LDcgKzg3Nyw3IEBACiAJCXByX2RlYnVnKCIlczogdmRjZGMxIDB4JTAyeFxuIiwgRFJJVkVSX05BTUUsCiAJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoJnRoZV90cHMtPmNsaWVudCwgVFBTX1ZEQ0RDMSkpOwogCi0JdXAoJnRoZV90cHMtPmxvY2spOworCW11dGV4X3VubG9jaygmdGhlX3Rwcy0+bG9jayk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtODk0LDcgKzg5NSw3IEBACiAJaWYgKCF0aGVfdHBzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRvd24oJnRoZV90cHMtPmxvY2spOworCW11dGV4X2xvY2soJnRoZV90cHMtPmxvY2spOwogCiAJcHJfZGVidWcoIiVzOiB2cmVnczEgMHglMDJ4XG4iLCBEUklWRVJfTkFNRSwKIAkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgmdGhlX3Rwcy0+Y2xpZW50LCBUUFNfVlJFR1MxKSk7CkBAIC05MDksNyArOTEwLDcgQEAKIAkJcHJfZGVidWcoIiVzOiB2cmVnczEgMHglMDJ4XG4iLCBEUklWRVJfTkFNRSwKIAkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgmdGhlX3Rwcy0+Y2xpZW50LCBUUFNfVlJFR1MxKSk7CiAKLQl1cCgmdGhlX3Rwcy0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC05MzEsNyArOTMyLDcgQEAKIAlpZiAoIXRoZV90cHMgfHwgdGhlX3Rwcy0+cG9yKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRvd24oJnRoZV90cHMtPmxvY2spOworCW11dGV4X2xvY2soJnRoZV90cHMtPmxvY2spOwogCiAJcHJfZGVidWcoIiVzOiAlcyBsb3dfcHdyLCBjaGdjb25maWcgMHglMDJ4IHZkY2RjMSAweCUwMnhcbiIsCiAJCURSSVZFUl9OQU1FLApAQCAtOTU5LDcgKzk2MCw3IEBACiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byB3cml0ZSBjaGNvbmZpZyByZWdpc3RlclxuIiwKIAkgRFJJVkVSX05BTUUpOwotCQl1cCgmdGhlX3Rwcy0+bG9jayk7CisJCW11dGV4X3VubG9jaygmdGhlX3Rwcy0+bG9jayk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCkBAIC05NzcsNyArOTc4LDcgQEAKIAkJcHJfZGVidWcoIiVzOiB2ZGNkYzEgMHglMDJ4XG4iLCBEUklWRVJfTkFNRSwKIAkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSgmdGhlX3Rwcy0+Y2xpZW50LCBUUFNfVkRDREMxKSk7CiAKLQl1cCgmdGhlX3Rwcy0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0aGVfdHBzLT5sb2NrKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCAxYTJjOWFiLi40NWUyY2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTMxLDEyICszMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAKIHN0YXRpYyBMSVNUX0hFQUQoYWRhcHRlcnMpOwogc3RhdGljIExJU1RfSEVBRChkcml2ZXJzKTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKGNvcmVfbGlzdHMpOworc3RhdGljIERFRklORV9NVVRFWChjb3JlX2xpc3RzKTsKIHN0YXRpYyBERUZJTkVfSURSKGkyY19hZGFwdGVyX2lkcik7CiAKIC8qIG1hdGNoIGFsd2F5cyBzdWNjZWVkcywgYXMgd2Ugd2FudCB0aGUgcHJvYmUoKSB0byB0ZWxsIGlmIHdlIHJlYWxseSBhY2NlcHQgdGhpcyBtYXRjaCAqLwpAQCAtMTUzLDcgKzE1NCw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAgICppdGVtOwogCXN0cnVjdCBpMmNfZHJpdmVyICAqZHJpdmVyOwogCi0JZG93bigmY29yZV9saXN0cyk7CisJbXV0ZXhfbG9jaygmY29yZV9saXN0cyk7CiAKIAlpZiAoaWRyX3ByZV9nZXQoJmkyY19hZGFwdGVyX2lkciwgR0ZQX0tFUk5FTCkgPT0gMCkgewogCQlyZXMgPSAtRU5PTUVNOwpAQCAtMTY4LDggKzE2OSw4IEBACiAJfQogCiAJYWRhcC0+bnIgPSAgaWQgJiBNQVhfSURfTUFTSzsKLQlpbml0X01VVEVYKCZhZGFwLT5idXNfbG9jayk7Ci0JaW5pdF9NVVRFWCgmYWRhcC0+Y2xpc3RfbG9jayk7CisJbXV0ZXhfaW5pdCgmYWRhcC0+YnVzX2xvY2spOworCW11dGV4X2luaXQoJmFkYXAtPmNsaXN0X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmFkYXAtPmxpc3QsJmFkYXB0ZXJzKTsKIAlJTklUX0xJU1RfSEVBRCgmYWRhcC0+Y2xpZW50cyk7CiAKQEAgLTIwMyw3ICsyMDQsNyBAQAogCX0KIAogb3V0X3VubG9jazoKLQl1cCgmY29yZV9saXN0cyk7CisJbXV0ZXhfdW5sb2NrKCZjb3JlX2xpc3RzKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0yMTYsNyArMjE3LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCWludCByZXMgPSAwOwogCi0JZG93bigmY29yZV9saXN0cyk7CisJbXV0ZXhfbG9jaygmY29yZV9saXN0cyk7CiAKIAkvKiBGaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGFkYXB0ZXIgd2FzIGV2ZXIgYWRkZWQgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXBfZnJvbV9saXN0LCAmYWRhcHRlcnMsIGxpc3QpIHsKQEAgLTI3Miw3ICsyNzMsNyBAQAogCWRldl9kYmcoJmFkYXAtPmRldiwgImFkYXB0ZXIgWyVzXSB1bnJlZ2lzdGVyZWRcbiIsIGFkYXAtPm5hbWUpOwogCiAgb3V0X3VubG9jazoKLQl1cCgmY29yZV9saXN0cyk7CisJbXV0ZXhfdW5sb2NrKCZjb3JlX2xpc3RzKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0yODcsOSArMjg4LDcgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgKml0ZW07CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCWludCByZXMgPSAwOwotCi0JZG93bigmY29yZV9saXN0cyk7CisJaW50IHJlczsKIAogCS8qIGFkZCB0aGUgZHJpdmVyIHRvIHRoZSBsaXN0IG9mIGkyYyBkcml2ZXJzIGluIHRoZSBkcml2ZXIgY29yZSAqLwogCWRyaXZlci0+ZHJpdmVyLm93bmVyID0gb3duZXI7CkBAIC0yOTcsOCArMjk2LDEwIEBACiAKIAlyZXMgPSBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJpdmVyKTsKIAlpZiAocmVzKQotCQlnb3RvIG91dF91bmxvY2s7CisJCXJldHVybiByZXM7CiAJCisJbXV0ZXhfbG9jaygmY29yZV9saXN0cyk7CisKIAlsaXN0X2FkZF90YWlsKCZkcml2ZXItPmxpc3QsJmRyaXZlcnMpOwogCXByX2RlYnVnKCJpMmMtY29yZTogZHJpdmVyIFslc10gcmVnaXN0ZXJlZFxuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKQEAgLTMxMCw5ICszMTEsOCBAQAogCQl9CiAJfQogCi0gb3V0X3VubG9jazoKLQl1cCgmY29yZV9saXN0cyk7Ci0JcmV0dXJuIHJlczsKKwltdXRleF91bmxvY2soJmNvcmVfbGlzdHMpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpMmNfcmVnaXN0ZXJfZHJpdmVyKTsKIApAQCAtMzI0LDcgKzMyNCw3IEBACiAJCiAJaW50IHJlcyA9IDA7CiAKLQlkb3duKCZjb3JlX2xpc3RzKTsKKwltdXRleF9sb2NrKCZjb3JlX2xpc3RzKTsKIAogCS8qIEhhdmUgYSBsb29rIGF0IGVhY2ggYWRhcHRlciwgaWYgY2xpZW50cyBvZiB0aGlzIGRyaXZlciBhcmUgc3RpbGwKIAkgKiBhdHRhY2hlZC4gSWYgc28sIGRldGFjaCB0aGVtIHRvIGJlIGFibGUgdG8ga2lsbCB0aGUgZHJpdmVyIApAQCAtMzYzLDcgKzM2Myw3IEBACiAJcHJfZGVidWcoImkyYy1jb3JlOiBkcml2ZXIgWyVzXSB1bnJlZ2lzdGVyZWRcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiAgb3V0X3VubG9jazoKLQl1cCgmY29yZV9saXN0cyk7CisJbXV0ZXhfdW5sb2NrKCZjb3JlX2xpc3RzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg0LDkgKzM4NCw5IEBACiB7CiAJaW50IHJ2YWw7CiAKLQlkb3duKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKIAlydmFsID0gX19pMmNfY2hlY2tfYWRkcihhZGFwdGVyLCBhZGRyKTsKLQl1cCgmYWRhcHRlci0+Y2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKIAogCXJldHVybiBydmFsOwogfQpAQCAtMzk1LDEzICszOTUsMTMgQEAKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CiAKLQlkb3duKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKIAlpZiAoX19pMmNfY2hlY2tfYWRkcihjbGllbnQtPmFkYXB0ZXIsIGNsaWVudC0+YWRkcikpIHsKLQkJdXAoJmFkYXB0ZXItPmNsaXN0X2xvY2spOworCQltdXRleF91bmxvY2soJmFkYXB0ZXItPmNsaXN0X2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmxpc3QsJmFkYXB0ZXItPmNsaWVudHMpOwotCXVwKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJmFkYXB0ZXItPmNsaXN0X2xvY2spOwogCQogCWlmIChhZGFwdGVyLT5jbGllbnRfcmVnaXN0ZXIpICB7CiAJCWlmIChhZGFwdGVyLT5jbGllbnRfcmVnaXN0ZXIoY2xpZW50KSkgIHsKQEAgLTQ1MCwxMiArNDUwLDEyIEBACiAJCX0KIAl9CiAKLQlkb3duKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmY2xpZW50LT5saXN0KTsKIAlpbml0X2NvbXBsZXRpb24oJmNsaWVudC0+cmVsZWFzZWQpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9jbGllbnRfbmFtZSk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKLQl1cCgmYWRhcHRlci0+Y2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjbGllbnQtPnJlbGVhc2VkKTsKIAogIG91dDoKQEAgLTUxMywxOSArNTEzLDE5IEBACiAJc3RydWN0IGxpc3RfaGVhZCAgKml0ZW07CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAotCWRvd24oJmFkYXAtPmNsaXN0X2xvY2spOworCW11dGV4X2xvY2soJmFkYXAtPmNsaXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2goaXRlbSwmYWRhcC0+Y2xpZW50cykgewogCQljbGllbnQgPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBpMmNfY2xpZW50LCBsaXN0KTsKIAkJaWYgKCF0cnlfbW9kdWxlX2dldChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoTlVMTCAhPSBjbGllbnQtPmRyaXZlci0+Y29tbWFuZCkgewotCQkJdXAoJmFkYXAtPmNsaXN0X2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZhZGFwLT5jbGlzdF9sb2NrKTsKIAkJCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGNsaWVudCxjbWQsYXJnKTsKLQkJCWRvd24oJmFkYXAtPmNsaXN0X2xvY2spOworCQkJbXV0ZXhfbG9jaygmYWRhcC0+Y2xpc3RfbG9jayk7CiAJCX0KIAkJbW9kdWxlX3B1dChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKICAgICAgICB9Ci0gICAgICAgdXAoJmFkYXAtPmNsaXN0X2xvY2spOworICAgICAgIG11dGV4X3VubG9jaygmYWRhcC0+Y2xpc3RfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGkyY19pbml0KHZvaWQpCkBAIC01NjksOSArNTY5LDkgQEAKIAkJfQogI2VuZGlmCiAKLQkJZG93bigmYWRhcC0+YnVzX2xvY2spOworCQltdXRleF9sb2NrKCZhZGFwLT5idXNfbG9jayk7CiAJCXJldCA9IGFkYXAtPmFsZ28tPm1hc3Rlcl94ZmVyKGFkYXAsbXNncyxudW0pOwotCQl1cCgmYWRhcC0+YnVzX2xvY2spOworCQltdXRleF91bmxvY2soJmFkYXAtPmJ1c19sb2NrKTsKIAogCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CkBAIC03NzksMTIgKzc3OSwxMiBAQAogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKIAkKLQlkb3duKCZjb3JlX2xpc3RzKTsKKwltdXRleF9sb2NrKCZjb3JlX2xpc3RzKTsKIAlhZGFwdGVyID0gKHN0cnVjdCBpMmNfYWRhcHRlciAqKWlkcl9maW5kKCZpMmNfYWRhcHRlcl9pZHIsIGlkKTsKIAlpZiAoYWRhcHRlciAmJiAhdHJ5X21vZHVsZV9nZXQoYWRhcHRlci0+b3duZXIpKQogCQlhZGFwdGVyID0gTlVMTDsKIAotCXVwKCZjb3JlX2xpc3RzKTsKKwltdXRleF91bmxvY2soJmNvcmVfbGlzdHMpOwogCXJldHVybiBhZGFwdGVyOwogfQogCkBAIC05MTksMTIgKzkxOSwxMSBAQAogCQkJICAgICAgIHU4IGxlbmd0aCwgdTggKnZhbHVlcykKIHsKIAl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOwotCWludCBpOworCiAJaWYgKGxlbmd0aCA+IEkyQ19TTUJVU19CTE9DS19NQVgpCiAJCWxlbmd0aCA9IEkyQ19TTUJVU19CTE9DS19NQVg7Ci0JZm9yIChpID0gMTsgaSA8PSBsZW5ndGg7IGkrKykKLQkJZGF0YS5ibG9ja1tpXSA9IHZhbHVlc1tpLTFdOwogCWRhdGEuYmxvY2tbMF0gPSBsZW5ndGg7CisJbWVtY3B5KCZkYXRhLmJsb2NrWzFdLCB2YWx1ZXMsIGxlbmd0aCk7CiAJcmV0dXJuIGkyY19zbWJ1c194ZmVyKGNsaWVudC0+YWRhcHRlcixjbGllbnQtPmFkZHIsY2xpZW50LT5mbGFncywKIAkJCSAgICAgIEkyQ19TTUJVU19XUklURSxjb21tYW5kLAogCQkJICAgICAgSTJDX1NNQlVTX0JMT0NLX0RBVEEsJmRhdGEpOwpAQCAtOTM0LDE2ICs5MzMsMTQgQEAKIHMzMiBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLCB1OCAqdmFsdWVzKQogewogCXVuaW9uIGkyY19zbWJ1c19kYXRhIGRhdGE7Ci0JaW50IGk7CisKIAlpZiAoaTJjX3NtYnVzX3hmZXIoY2xpZW50LT5hZGFwdGVyLGNsaWVudC0+YWRkcixjbGllbnQtPmZsYWdzLAogCSAgICAgICAgICAgICAgICAgICAgICBJMkNfU01CVVNfUkVBRCxjb21tYW5kLAogCSAgICAgICAgICAgICAgICAgICAgICBJMkNfU01CVVNfSTJDX0JMT0NLX0RBVEEsJmRhdGEpKQogCQlyZXR1cm4gLTE7Ci0JZWxzZSB7Ci0JCWZvciAoaSA9IDE7IGkgPD0gZGF0YS5ibG9ja1swXTsgaSsrKQotCQkJdmFsdWVzW2ktMV0gPSBkYXRhLmJsb2NrW2ldOwotCQlyZXR1cm4gZGF0YS5ibG9ja1swXTsKLQl9CisKKwltZW1jcHkodmFsdWVzLCAmZGF0YS5ibG9ja1sxXSwgZGF0YS5ibG9ja1swXSk7CisJcmV0dXJuIGRhdGEuYmxvY2tbMF07CiB9CiAKIHMzMiBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKQEAgLTExMTgsMTAgKzExMTUsMTAgQEAKIAlmbGFncyAmPSBJMkNfTV9URU4gfCBJMkNfQ0xJRU5UX1BFQzsKIAogCWlmIChhZGFwdGVyLT5hbGdvLT5zbWJ1c194ZmVyKSB7Ci0JCWRvd24oJmFkYXB0ZXItPmJ1c19sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYWRhcHRlci0+YnVzX2xvY2spOwogCQlyZXMgPSBhZGFwdGVyLT5hbGdvLT5zbWJ1c194ZmVyKGFkYXB0ZXIsYWRkcixmbGFncyxyZWFkX3dyaXRlLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsc2l6ZSxkYXRhKTsKLQkJdXAoJmFkYXB0ZXItPmJ1c19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7CiAJfSBlbHNlCiAJCXJlcyA9IGkyY19zbWJ1c194ZmVyX2VtdWxhdGVkKGFkYXB0ZXIsYWRkcixmbGFncyxyZWFkX3dyaXRlLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxzaXplLGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCAzMzI1NjYwLi5jNzY3MWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtMzEzLDYgKzMxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgkvKiBGb3IgU0NTSSAtPiBBVEFQSSBjb21tYW5kIGNvbnZlcnNpb24gKi8KIApAQCAtMzI0LDcgKzMyNSw3IEBACiAKICNpbmNsdWRlICJpZGUtY2QuaCIKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoaWRlY2RfcmVmX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGlkZWNkX3JlZl9tdXRleCk7CiAKICNkZWZpbmUgdG9faWRlX2NkKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGNkcm9tX2luZm8sIGtyZWYpIAogCkBAIC0zMzUsMTEgKzMzNiwxMSBAQAogewogCXN0cnVjdCBjZHJvbV9pbmZvICpjZCA9IE5VTEw7CiAKLQlkb3duKCZpZGVjZF9yZWZfc2VtKTsKKwltdXRleF9sb2NrKCZpZGVjZF9yZWZfbXV0ZXgpOwogCWNkID0gaWRlX2NkX2coZGlzayk7CiAJaWYgKGNkKQogCQlrcmVmX2dldCgmY2QtPmtyZWYpOwotCXVwKCZpZGVjZF9yZWZfc2VtKTsKKwltdXRleF91bmxvY2soJmlkZWNkX3JlZl9tdXRleCk7CiAJcmV0dXJuIGNkOwogfQogCkBAIC0zNDcsOSArMzQ4LDkgQEAKIAogc3RhdGljIHZvaWQgaWRlX2NkX3B1dChzdHJ1Y3QgY2Ryb21faW5mbyAqY2QpCiB7Ci0JZG93bigmaWRlY2RfcmVmX3NlbSk7CisJbXV0ZXhfbG9jaygmaWRlY2RfcmVmX211dGV4KTsKIAlrcmVmX3B1dCgmY2QtPmtyZWYsIGlkZV9jZF9yZWxlYXNlKTsKLQl1cCgmaWRlY2RfcmVmX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpZGVjZF9yZWZfbXV0ZXgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjQ3MSw1MiArMjQ3Miw2IEBACiB9CiAKIHN0YXRpYwotaW50IGlkZV9jZHJvbV9kZXZfaW9jdGwgKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAotCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7Ci0JY2hhciBidWZmZXJbMTZdOwotCWludCBzdGF0OwotCi0JaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIENHQ19EQVRBX1VOS05PV04pOwotCi0JLyogVGhlc2Ugd2lsbCBiZSBtb3ZlZCBpbnRvIHRoZSBVbmlmb3JtIGxheWVyIHNob3J0bHkuLi4gKi8KLQlzd2l0Y2ggKGNtZCkgewotIAljYXNlIENEUk9NU0VUU1BJTkRPV046IHsKLSAJCWNoYXIgc3BpbmRvd247Ci0gCi0gCQlpZiAoY29weV9mcm9tX3VzZXIoJnNwaW5kb3duLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YoY2hhcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0gCi0gICAgICAgICAgICAgICAgaWYgKChzdGF0ID0gY2Ryb21fbW9kZV9zZW5zZShjZGksICZjZ2MsIEdQTU9ERV9DRFJPTV9QQUdFLCAwKSkpCi0JCQlyZXR1cm4gc3RhdDsKLQotIAkJYnVmZmVyWzExXSA9IChidWZmZXJbMTFdICYgMHhmMCkgfCAoc3BpbmRvd24gJiAweDBmKTsKLQotIAkJcmV0dXJuIGNkcm9tX21vZGVfc2VsZWN0KGNkaSwgJmNnYyk7Ci0gCX0gCi0gCi0gCWNhc2UgQ0RST01HRVRTUElORE9XTjogewotIAkJY2hhciBzcGluZG93bjsKLSAKLSAgICAgICAgICAgICAgICBpZiAoKHN0YXQgPSBjZHJvbV9tb2RlX3NlbnNlKGNkaSwgJmNnYywgR1BNT0RFX0NEUk9NX1BBR0UsIDApKSkKLQkJCXJldHVybiBzdGF0OwotIAotIAkJc3BpbmRvd24gPSBidWZmZXJbMTFdICYgMHgwZjsKLSAKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLCAmc3BpbmRvd24sIHNpemVvZiAoY2hhcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0gCi0gCQlyZXR1cm4gMDsKLSAJfQotICAKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLX0KLQotc3RhdGljCiBpbnQgaWRlX2Nkcm9tX2F1ZGlvX2lvY3RsIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSwKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIAkJCSAgIApAQCAtMjg1MiwxMiArMjgwNywxMSBAQAogCS5nZXRfbWNuCQk9IGlkZV9jZHJvbV9nZXRfbWNuLAogCS5yZXNldAkJCT0gaWRlX2Nkcm9tX3Jlc2V0LAogCS5hdWRpb19pb2N0bAkJPSBpZGVfY2Ryb21fYXVkaW9faW9jdGwsCi0JLmRldl9pb2N0bAkJPSBpZGVfY2Ryb21fZGV2X2lvY3RsLAogCS5jYXBhYmlsaXR5CQk9IENEQ19DTE9TRV9UUkFZIHwgQ0RDX09QRU5fVFJBWSB8IENEQ19MT0NLIHwKIAkJCQlDRENfU0VMRUNUX1NQRUVEIHwgQ0RDX1NFTEVDVF9ESVNDIHwKIAkJCQlDRENfTVVMVElfU0VTU0lPTiB8IENEQ19NQ04gfAogCQkJCUNEQ19NRURJQV9DSEFOR0VEIHwgQ0RDX1BMQVlfQVVESU8gfCBDRENfUkVTRVQgfAotCQkJCUNEQ19JT0NUTFMgfCBDRENfRFJJVkVfU1RBVFVTIHwgQ0RDX0NEX1IgfAorCQkJCUNEQ19EUklWRV9TVEFUVVMgfCBDRENfQ0RfUiB8CiAJCQkJQ0RDX0NEX1JXIHwgQ0RDX0RWRCB8IENEQ19EVkRfUnwgQ0RDX0RWRF9SQU0gfAogCQkJCUNEQ19HRU5FUklDX1BBQ0tFVCB8IENEQ19NT19EUklWRSB8IENEQ19NUlcgfAogCQkJCUNEQ19NUldfVyB8IENEQ19SQU0sCkBAIC0zMzY3LDYgKzMzMjEsNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZGVjZF9zZXRfc3BpbmRvd24oc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CisJY2hhciBidWZmZXJbMTZdOworCWludCBzdGF0OworCWNoYXIgc3BpbmRvd247CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNwaW5kb3duLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihjaGFyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIENHQ19EQVRBX1VOS05PV04pOworCisJc3RhdCA9IGNkcm9tX21vZGVfc2Vuc2UoY2RpLCAmY2djLCBHUE1PREVfQ0RST01fUEFHRSwgMCk7CisJaWYgKHN0YXQpCisJCXJldHVybiBzdGF0OworCisJYnVmZmVyWzExXSA9IChidWZmZXJbMTFdICYgMHhmMCkgfCAoc3BpbmRvd24gJiAweDBmKTsKKwlyZXR1cm4gY2Ryb21fbW9kZV9zZWxlY3QoY2RpLCAmY2djKTsKK30KKworc3RhdGljIGludCBpZGVjZF9nZXRfc3BpbmRvd24oc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CisJY2hhciBidWZmZXJbMTZdOworCWludCBzdGF0OworIAljaGFyIHNwaW5kb3duOworCisJaW5pdF9jZHJvbV9jb21tYW5kKCZjZ2MsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIENHQ19EQVRBX1VOS05PV04pOworCisJc3RhdCA9IGNkcm9tX21vZGVfc2Vuc2UoY2RpLCAmY2djLCBHUE1PREVfQ0RST01fUEFHRSwgMCk7CisJaWYgKHN0YXQpCisJCXJldHVybiBzdGF0OworCisJc3BpbmRvd24gPSBidWZmZXJbMTFdICYgMHgwZjsKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnNwaW5kb3duLCBzaXplb2YgKGNoYXIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaWRlY2RfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0zMzc0LDcgKzMzNjcsMTYgQEAKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9jZF9nKGJkZXYtPmJkX2Rpc2spOwogCWludCBlcnI7CiAKLQllcnIgID0gZ2VuZXJpY19pZGVfaW9jdGwoaW5mby0+ZHJpdmUsIGZpbGUsIGJkZXYsIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworIAljYXNlIENEUk9NU0VUU1BJTkRPV046CisJCXJldHVybiBpZGVjZF9zZXRfc3BpbmRvd24oJmluZm8tPmRldmluZm8sIGFyZyk7CisgCWNhc2UgQ0RST01HRVRTUElORE9XTjoKKwkJcmV0dXJuIGlkZWNkX2dldF9zcGluZG93bigmaW5mby0+ZGV2aW5mbywgYXJnKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKyAJfQorCisJZXJyID0gZ2VuZXJpY19pZGVfaW9jdGwoaW5mby0+ZHJpdmUsIGZpbGUsIGJkZXYsIGNtZCwgYXJnKTsKIAlpZiAoZXJyID09IC1FSU5WQUwpCiAJCWVyciA9IGNkcm9tX2lvY3RsKGZpbGUsICZpbmZvLT5kZXZpbmZvLCBpbm9kZSwgY21kLCBhcmcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCAwOTA4NmI4Li5jY2Y1MjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgX0lERV9ESVNLCiAKQEAgLTc4LDcgKzc5LDcgQEAKIAlzdHJ1Y3Qga3JlZglrcmVmOwogfTsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoaWRlZGlza19yZWZfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaWRlZGlza19yZWZfbXV0ZXgpOwogCiAjZGVmaW5lIHRvX2lkZV9kaXNrKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGlkZV9kaXNrX29iaiwga3JlZikKIApAQCAtODksMTEgKzkwLDExIEBACiB7CiAJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IE5VTEw7CiAKLQlkb3duKCZpZGVkaXNrX3JlZl9zZW0pOworCW11dGV4X2xvY2soJmlkZWRpc2tfcmVmX211dGV4KTsKIAlpZGtwID0gaWRlX2Rpc2tfZyhkaXNrKTsKIAlpZiAoaWRrcCkKIAkJa3JlZl9nZXQoJmlka3AtPmtyZWYpOwotCXVwKCZpZGVkaXNrX3JlZl9zZW0pOworCW11dGV4X3VubG9jaygmaWRlZGlza19yZWZfbXV0ZXgpOwogCXJldHVybiBpZGtwOwogfQogCkBAIC0xMDEsOSArMTAyLDkgQEAKIAogc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHV0KHN0cnVjdCBpZGVfZGlza19vYmogKmlka3ApCiB7Ci0JZG93bigmaWRlZGlza19yZWZfc2VtKTsKKwltdXRleF9sb2NrKCZpZGVkaXNrX3JlZl9tdXRleCk7CiAJa3JlZl9wdXQoJmlka3AtPmtyZWYsIGlkZV9kaXNrX3JlbGVhc2UpOwotCXVwKCZpZGVkaXNrX3JlZl9zZW0pOworCW11dGV4X3VubG9jaygmaWRlZGlza19yZWZfbXV0ZXgpOwogfQogCiAvKgpAQCAtOTc3LDggKzk3OCw2IEBACiAJCWlkZV9kbWFfdmVyYm9zZShkcml2ZSk7CiAJcHJpbnRrKCJcbiIpOwogCi0JZHJpdmUtPm5vX2lvXzMyYml0ID0gaWQtPmR3b3JkX2lvID8gMSA6IDA7Ci0KIAkvKiB3cml0ZSBjYWNoZSBlbmFibGVkPyAqLwogCWlmICgoaWQtPmNzZm8gJiAxKSB8fCAoaWQtPmNmc19lbmFibGVfMSAmICgxIDw8IDUpKSkKIAkJZHJpdmUtPndjYWNoZSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKaW5kZXggMDUyM2RhNy4uYzQ4MWJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJCQlpZiAocnEtPnJxX2Rpc2spIHsKIAkJCQlpZGVfZHJpdmVyX3QgKmRydjsKIAotCQkJCWRydiA9ICooaWRlX2RyaXZlcl90ICoqKXJxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7OworCQkJCWRydiA9ICooaWRlX2RyaXZlcl90ICoqKXJxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7CiAJCQkJZHJ2LT5lbmRfcmVxdWVzdChkcml2ZSwgMSwgcnEtPm5yX3NlY3RvcnMpOwogCQkJfSBlbHNlCiAJCQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCBycS0+bnJfc2VjdG9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggMWY4ZGI5YS4uYTUzZTNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01MTcsNyArNTE4LDcgQEAKIAl1OAkJcmVzZXJ2ZWRbNF07CiB9IGlkZWZsb3BweV9tb2RlX3BhcmFtZXRlcl9oZWFkZXJfdDsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoaWRlZmxvcHB5X3JlZl9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChpZGVmbG9wcHlfcmVmX211dGV4KTsKIAogI2RlZmluZSB0b19pZGVfZmxvcHB5KG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGlkZV9mbG9wcHlfb2JqLCBrcmVmKQogCkBAIC01MjgsMTEgKzUyOSwxMSBAQAogewogCXN0cnVjdCBpZGVfZmxvcHB5X29iaiAqZmxvcHB5ID0gTlVMTDsKIAotCWRvd24oJmlkZWZsb3BweV9yZWZfc2VtKTsKKwltdXRleF9sb2NrKCZpZGVmbG9wcHlfcmVmX211dGV4KTsKIAlmbG9wcHkgPSBpZGVfZmxvcHB5X2coZGlzayk7CiAJaWYgKGZsb3BweSkKIAkJa3JlZl9nZXQoJmZsb3BweS0+a3JlZik7Ci0JdXAoJmlkZWZsb3BweV9yZWZfc2VtKTsKKwltdXRleF91bmxvY2soJmlkZWZsb3BweV9yZWZfbXV0ZXgpOwogCXJldHVybiBmbG9wcHk7CiB9CiAKQEAgLTU0MCw5ICs1NDEsOSBAQAogCiBzdGF0aWMgdm9pZCBpZGVfZmxvcHB5X3B1dChzdHJ1Y3QgaWRlX2Zsb3BweV9vYmogKmZsb3BweSkKIHsKLQlkb3duKCZpZGVmbG9wcHlfcmVmX3NlbSk7CisJbXV0ZXhfbG9jaygmaWRlZmxvcHB5X3JlZl9tdXRleCk7CiAJa3JlZl9wdXQoJmZsb3BweS0+a3JlZiwgaWRlX2Zsb3BweV9yZWxlYXNlKTsKLQl1cCgmaWRlZmxvcHB5X3JlZl9zZW0pOworCW11dGV4X3VubG9jaygmaWRlZmxvcHB5X3JlZl9tdXRleCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDQyN2QxYzIuLjFiN2I0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC04NTgsNiArODU4LDE1IEBACiAJCQl9CiAJCX0KIAl9CisKKwlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KSB7CisJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CisKKwkJaWYgKGh3aWYtPm5vX2lvXzMyYml0KQorCQkJZHJpdmUtPm5vX2lvXzMyYml0ID0gMTsKKwkJZWxzZQorCQkJZHJpdmUtPm5vX2lvXzMyYml0ID0gZHJpdmUtPmlkLT5kd29yZF9pbyA/IDEgOiAwOworCX0KIH0KIAogc3RhdGljIGludCBod2lmX2luaXQoaWRlX2h3aWZfdCAqaHdpZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwppbmRleCAwMTAxZDBkLi5lYmM1OTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKQEAgLTQ0Myw2ICs0NDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTAxMSw3ICsxMDEyLDcgQEAKICAgICAgICAgIGludCBkZWJ1Z19sZXZlbDsgCiB9IGlkZXRhcGVfdGFwZV90OwogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChpZGV0YXBlX3JlZl9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChpZGV0YXBlX3JlZl9tdXRleCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlkZXRhcGVfc3lzZnNfY2xhc3M7CiAKQEAgLTEwMjQsMTEgKzEwMjUsMTEgQEAKIHsKIAlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gTlVMTDsKIAotCWRvd24oJmlkZXRhcGVfcmVmX3NlbSk7CisJbXV0ZXhfbG9jaygmaWRldGFwZV9yZWZfbXV0ZXgpOwogCXRhcGUgPSBpZGVfdGFwZV9nKGRpc2spOwogCWlmICh0YXBlKQogCQlrcmVmX2dldCgmdGFwZS0+a3JlZik7Ci0JdXAoJmlkZXRhcGVfcmVmX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpZGV0YXBlX3JlZl9tdXRleCk7CiAJcmV0dXJuIHRhcGU7CiB9CiAKQEAgLTEwMzYsOSArMTAzNyw5IEBACiAKIHN0YXRpYyB2b2lkIGlkZV90YXBlX3B1dChzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlKQogewotCWRvd24oJmlkZXRhcGVfcmVmX3NlbSk7CisJbXV0ZXhfbG9jaygmaWRldGFwZV9yZWZfbXV0ZXgpOwogCWtyZWZfcHV0KCZ0YXBlLT5rcmVmLCBpZGVfdGFwZV9yZWxlYXNlKTsKLQl1cCgmaWRldGFwZV9yZWZfc2VtKTsKKwltdXRleF91bmxvY2soJmlkZXRhcGVfcmVmX211dGV4KTsKIH0KIAogLyoKQEAgLTEyOTAsMTEgKzEyOTEsMTEgQEAKIHsKIAlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gTlVMTDsKIAotCWRvd24oJmlkZXRhcGVfcmVmX3NlbSk7CisJbXV0ZXhfbG9jaygmaWRldGFwZV9yZWZfbXV0ZXgpOwogCXRhcGUgPSBpZGV0YXBlX2RldnNbaV07CiAJaWYgKHRhcGUpCiAJCWtyZWZfZ2V0KCZ0YXBlLT5rcmVmKTsKLQl1cCgmaWRldGFwZV9yZWZfc2VtKTsKKwltdXRleF91bmxvY2soJmlkZXRhcGVfcmVmX211dGV4KTsKIAlyZXR1cm4gdGFwZTsKIH0KIApAQCAtNDg3MCwxMSArNDg3MSwxMSBAQAogCiAJZHJpdmUtPmRyaXZlcl9kYXRhID0gdGFwZTsKIAotCWRvd24oJmlkZXRhcGVfcmVmX3NlbSk7CisJbXV0ZXhfbG9jaygmaWRldGFwZV9yZWZfbXV0ZXgpOwogCWZvciAobWlub3IgPSAwOyBpZGV0YXBlX2RldnNbbWlub3JdOyBtaW5vcisrKQogCQk7CiAJaWRldGFwZV9kZXZzW21pbm9yXSA9IHRhcGU7Ci0JdXAoJmlkZXRhcGVfcmVmX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpZGV0YXBlX3JlZl9tdXRleCk7CiAKIAlpZGV0YXBlX3NldHVwKGRyaXZlLCB0YXBlLCBtaW5vcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS5jIGIvZHJpdmVycy9pZGUvaWRlLmMKaW5kZXggYjJjYzQzNy4uM2ZkYWI1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLmMKQEAgLTIwNTgsNyArMjA1OCw3IEBACiAJfQogfQogCi1pbnQgaW5pdF9tb2R1bGUgKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlICh2b2lkKQogewogCXBhcnNlX29wdGlvbnMob3B0aW9ucyk7CiAJcmV0dXJuIGlkZV9pbml0KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKaW5kZXggNGMyYWY5MC4uNjIxM2JkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwpAQCAtNDQ1LDYgKzQ0NSw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlBDTUNJQSIsICJQblBJREUiLCAweDI4MWYxYzVkLCAweDBjNjk0NzI4KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiU0hVVFRMRSBURUNITk9MT0dZIExURC4iLCAiUENDQVJELUlERS9BVEFQSSBBZGFwdGVyIiwgMHg0YTNmMGJhMCwgMHgzMjI1NjBlMSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlRPU0hJQkEiLCAiTUsyMDAxTVBMIiwgMHhiNDU4NWExYSwgMHgzNDg5ZTAwMyksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMSgiVFJBTlNDRU5EICAgIDUxMk0gICAiLCAweGQwOTA5NDQzKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiV0lUIiwgIklERTE2IiwgMHgyNDRlNTk5NCwgMHgzZTIzMjg1MiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMSgiU1RJIEZsYXNoIiwgMHhlNGExMzIwOSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlNUSSIsICJGbGFzaCA1LjAiLCAweGJmMmRmMThkLCAweDhjYjU3YTBlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jIGIvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKaW5kZXggMzI0MzFkYy4uNzFmMjdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvbWlwcy9hdTF4eHgtaWRlLmMKQEAgLTY3NCw2ICs2NzQsMTEgQEAKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQorCWlmIChhaHdpZi0+aXJxIDwgMCkgeworCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIElSUVxuIiwgRFJWX05BTUUsIHBkZXYtPmlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24gKHJlcy0+c3RhcnQsIHJlcy0+ZW5kLXJlcy0+c3RhcnQsIHBkZXYtPm5hbWUpKSB7CiAJCXByX2RlYnVnKCIlczogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIiwgRFJWX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCAxOGQ3ZWRhLi5lY2E5MmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtMTM3LDE1ICsxMzcsMTUgQEAKIC8qCiAgKiBTQ1NJIGlucXVpcnkgaGFjayBmb3IgcmVhbGx5IGJhZGx5IGJlaGF2ZWQgc2JwMiBkZXZpY2VzLiBUdXJuIHRoaXMgb24KICAqIGlmIHlvdXIgc2JwMiBkZXZpY2UgaXMgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRoZSBTQ1NJIGlucXVpcnkgY29tbWFuZC4KLSAqIFRoaXMgaGFjayBtYWtlcyB0aGUgaW5xdWlyeSBsb29rIG1vcmUgbGlrZSBhIHR5cGljYWwgTVMgV2luZG93cwotICogaW5xdWlyeS4KKyAqIFRoaXMgaGFjayBtYWtlcyB0aGUgaW5xdWlyeSBsb29rIG1vcmUgbGlrZSBhIHR5cGljYWwgTVMgV2luZG93cyBpbnF1aXJ5CisgKiBieSBlbmZvcmNpbmcgMzYgYnl0ZSBpbnF1aXJ5IGFuZCBhdm9pZGluZyBhY2Nlc3MgdG8gbW9kZV9zZW5zZSBwYWdlIDguCiAgKgogICogSWYgZm9yY2VfaW5xdWlyeV9oYWNrPTEgaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlIHRvIHdvcmssCiAgKiBwbGVhc2Ugc3VibWl0IHRoZSBsb2dnZWQgc2JwMl9maXJtd2FyZV9yZXZpc2lvbiB2YWx1ZSBvZiB0aGlzIGRldmljZSB0bwogICogdGhlIGxpbnV4MTM5NC1kZXZlbCBtYWlsaW5nIGxpc3QuCiAgKi8KIHN0YXRpYyBpbnQgZm9yY2VfaW5xdWlyeV9oYWNrOwotbW9kdWxlX3BhcmFtKGZvcmNlX2lucXVpcnlfaGFjaywgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShmb3JjZV9pbnF1aXJ5X2hhY2ssIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX2lucXVpcnlfaGFjaywgIkZvcmNlIFNDU0kgaW5xdWlyeSBoYWNrIChkZWZhdWx0ID0gMCkiKTsKIAogLyoKQEAgLTI2NCwxOCArMjY0LDE3IEBACiAJfSwKIH07CiAKLQotLyogTGlzdCBvZiBkZXZpY2UgZmlybXdhcmUncyB0aGF0IHJlcXVpcmUgYSBmb3JjZWQgMzYgYnl0ZSBpbnF1aXJ5LiAgKi8KKy8qCisgKiBMaXN0IG9mIGRldmljZSBmaXJtd2FyZXMgdGhhdCByZXF1aXJlIHRoZSBpbnF1aXJ5IGhhY2suCisgKiBZaWVsZHMgYSBmZXcgZmFsc2UgcG9zaXRpdmVzIGJ1dCBkaWQgbm90IGJyZWFrIG90aGVyIGRldmljZXMgc28gZmFyLgorICovCiBzdGF0aWMgdTMyIHNicDJfYnJva2VuX2lucXVpcnlfbGlzdFtdID0gewotCTB4MDAwMDI4MDAsCS8qIFN0ZWZhbiBSaWNodGVyIDxyaWNodGVzdEBiYXV3ZXNlbi50dS1jb3R0YnVzLmRlPiAqLworCTB4MDAwMDI4MDAsCS8qIFN0ZWZhbiBSaWNodGVyIDxzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlPiAqLwogCQkJLyogRFZpQ08gTW9tb2JheSBDWC0xICovCiAJMHgwMDAwMDIwMAkvKiBBbmRyZWFzIFBsZXNjaCA8cGxlc2NoQGZhcy5oYXJ2YXJkLmVkdT4gKi8KIAkJCS8qIFFQUyBGaXJlIERWREJ1cm5lciAqLwogfTsKIAotI2RlZmluZSBOVU1fQlJPS0VOX0lOUVVJUllfREVWUyBcCi0JKHNpemVvZihzYnAyX2Jyb2tlbl9pbnF1aXJ5X2xpc3QpL3NpemVvZigqc2JwMl9icm9rZW5faW5xdWlyeV9saXN0KSkKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHZW5lcmFsIHV0aWxpdHkgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02NDMsOSArNjQyLDE1IEBACiAJaWYgKCFzY3NpX2lkKQogCQlyZXR1cm4gMDsKIAotCS8qIFRyaWdnZXIgc2h1dGRvd24gZnVuY3Rpb25zIGluIHNjc2kncyBoaWdobGV2ZWwuICovCi0JaWYgKHNjc2lfaWQtPnNjc2lfaG9zdCkKKwlpZiAoc2NzaV9pZC0+c2NzaV9ob3N0KSB7CisJCS8qIEdldCByaWQgb2YgZW5xdWV1ZWQgY29tbWFuZHMgaWYgdGhlcmUgaXMgbm8gY2hhbmNlIHRvCisJCSAqIHNlbmQgdGhlbS4gKi8KKwkJaWYgKCFzYnAydXRpbF9ub2RlX2lzX2F2YWlsYWJsZShzY3NpX2lkKSkKKwkJCXNicDJzY3NpX2NvbXBsZXRlX2FsbF9jb21tYW5kcyhzY3NpX2lkLCBESURfTk9fQ09OTkVDVCk7CisJCS8qIHNjc2lfcmVtb3ZlX2RldmljZSgpIHdpbGwgdHJpZ2dlciBzaHV0ZG93biBmdW5jdGlvbnMgb2YgU0NTSQorCQkgKiBoaWdobGV2ZWwgZHJpdmVycyB3aGljaCB3b3VsZCBkZWFkbG9jayBpZiBibG9ja2VkLiAqLwogCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2NzaV9pZC0+c2NzaV9ob3N0KTsKKwl9CiAJc2RldiA9IHNjc2lfaWQtPnNkZXY7CiAJaWYgKHNkZXYpIHsKIAkJc2NzaV9pZC0+c2RldiA9IE5VTEw7CkBAIC03NDIsMTEgKzc0Nyw2IEBACiAJCWhpLT5ob3N0ID0gdWQtPm5lLT5ob3N0OwogCQlJTklUX0xJU1RfSEVBRCgmaGktPnNjc2lfaWRzKTsKIAotCQkvKiBSZWdpc3RlciBvdXIgc2JwMiBzdGF0dXMgYWRkcmVzcyBzcGFjZS4uLiAqLwotCQlocHNiX3JlZ2lzdGVyX2FkZHJzcGFjZSgmc2JwMl9oaWdobGV2ZWwsIHVkLT5uZS0+aG9zdCwgJnNicDJfb3BzLAotCQkJCQlTQlAyX1NUQVRVU19GSUZPX0FERFJFU1MsCi0JCQkJCVNCUDJfU1RBVFVTX0ZJRk9fQUREUkVTUyArCi0JCQkJCVNCUDJfU1RBVFVTX0ZJRk9fRU5UUllfVE9fT0ZGU0VUKFNCUDJfTUFYX1VEU19QRVJfTk9ERSsxKSk7CiAjaWZkZWYgQ09ORklHX0lFRUUxMzk0X1NCUDJfUEhZU19ETUEKIAkJLyogSGFuZGxlIGRhdGEgbW92ZW1lbnQgaWYgcGh5c2ljYWwgZG1hIGlzIG5vdAogCQkgKiBlbmFibGVkL3N1cHBvcnRlZG9uIGhvc3QgY29udHJvbGxlciAqLwpAQCAtNzU5LDYgKzc1OSwxOCBAQAogCiAJbGlzdF9hZGRfdGFpbCgmc2NzaV9pZC0+c2NzaV9saXN0LCAmaGktPnNjc2lfaWRzKTsKIAorCS8qIFJlZ2lzdGVyIHRoZSBzdGF0dXMgRklGTyBhZGRyZXNzIHJhbmdlLiBXZSBjb3VsZCB1c2UgdGhlIHNhbWUgRklGTworCSAqIGZvciB0YXJnZXRzIGF0IGRpZmZlcmVudCBub2Rlcy4gSG93ZXZlciB3ZSBuZWVkIGRpZmZlcmVudCBGSUZPcyBwZXIKKwkgKiB0YXJnZXQgaW4gb3JkZXIgdG8gc3VwcG9ydCBtdWx0aS11bml0IGRldmljZXMuICovCisJc2NzaV9pZC0+c3RhdHVzX2ZpZm9fYWRkciA9IGhwc2JfYWxsb2NhdGVfYW5kX3JlZ2lzdGVyX2FkZHJzcGFjZSgKKwkJCSZzYnAyX2hpZ2hsZXZlbCwgdWQtPm5lLT5ob3N0LCAmc2JwMl9vcHMsCisJCQlzaXplb2Yoc3RydWN0IHNicDJfc3RhdHVzX2Jsb2NrKSwgc2l6ZW9mKHF1YWRsZXRfdCksCisJCQl+MFVMTCwgfjBVTEwpOworCWlmICghc2NzaV9pZC0+c3RhdHVzX2ZpZm9fYWRkcikgeworCQlTQlAyX0VSUigiZmFpbGVkIHRvIGFsbG9jYXRlIHN0YXR1cyBGSUZPIGFkZHJlc3MgcmFuZ2UiKTsKKwkJZ290byBmYWlsZWRfYWxsb2M7CisJfQorCiAJLyogUmVnaXN0ZXIgb3VyIGhvc3Qgd2l0aCB0aGUgU0NTSSBzdGFjay4gKi8KIAlzY3NpX2hvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJnNjc2lfZHJpdmVyX3RlbXBsYXRlLAogCQkJCSAgICBzaXplb2YodW5zaWduZWQgbG9uZykpOwpAQCAtOTk3LDYgKzEwMDksMTAgQEAKIAkJU0JQMl9ETUFfRlJFRSgic2luZ2xlIHF1ZXJ5IGxvZ2lucyBkYXRhIik7CiAJfQogCisJaWYgKHNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIpCisJCWhwc2JfdW5yZWdpc3Rlcl9hZGRyc3BhY2UoJnNicDJfaGlnaGxldmVsLCBoaS0+aG9zdCwKKwkJCXNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIpOworCiAJc2NzaV9pZC0+dWQtPmRldmljZS5kcml2ZXJfZGF0YSA9IE5VTEw7CiAKIAlTQlAyX0RFQlVHKCJTQlAtMiBkZXZpY2UgcmVtb3ZlZCwgU0NTSSBJRCA9ICVkIiwgc2NzaV9pZC0+dWQtPmlkKTsKQEAgLTEwNzUsMTEgKzEwOTEsMTAgQEAKIAkJT1JCX1NFVF9RVUVSWV9MT0dJTlNfUkVTUF9MRU5HVEgoc2l6ZW9mKHN0cnVjdCBzYnAyX3F1ZXJ5X2xvZ2luc19yZXNwb25zZSkpOwogCVNCUDJfREVCVUcoInNicDJfcXVlcnlfbG9naW5zOiByZXNlcnZlZF9yZXNwX2xlbmd0aCBpbml0aWFsaXplZCIpOwogCi0Jc2NzaV9pZC0+cXVlcnlfbG9naW5zX29yYi0+c3RhdHVzX0ZJRk9fbG8gPSBTQlAyX1NUQVRVU19GSUZPX0FERFJFU1NfTE8gKwotCQkJCQkJICAgIFNCUDJfU1RBVFVTX0ZJRk9fRU5UUllfVE9fT0ZGU0VUKHNjc2lfaWQtPnVkLT5pZCk7Ci0Jc2NzaV9pZC0+cXVlcnlfbG9naW5zX29yYi0+c3RhdHVzX0ZJRk9faGkgPSAoT1JCX1NFVF9OT0RFX0lEKGhpLT5ob3N0LT5ub2RlX2lkKSB8Ci0JCQkJCQkgICAgIFNCUDJfU1RBVFVTX0ZJRk9fQUREUkVTU19ISSk7Ci0JU0JQMl9ERUJVRygic2JwMl9xdWVyeV9sb2dpbnM6IHN0YXR1cyBGSUZPIGluaXRpYWxpemVkIik7CisJc2NzaV9pZC0+cXVlcnlfbG9naW5zX29yYi0+c3RhdHVzX2ZpZm9faGkgPQorCQlPUkJfU0VUX1NUQVRVU19GSUZPX0hJKHNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIsIGhpLT5ob3N0LT5ub2RlX2lkKTsKKwlzY3NpX2lkLT5xdWVyeV9sb2dpbnNfb3JiLT5zdGF0dXNfZmlmb19sbyA9CisJCU9SQl9TRVRfU1RBVFVTX0ZJRk9fTE8oc2NzaV9pZC0+c3RhdHVzX2ZpZm9fYWRkcik7CiAKIAlzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIoc2NzaV9pZC0+cXVlcnlfbG9naW5zX29yYiwgc2l6ZW9mKHN0cnVjdCBzYnAyX3F1ZXJ5X2xvZ2luc19vcmIpKTsKIApAQCAtMTE4NCwxMSArMTE5OSwxMCBAQAogCQlPUkJfU0VUX0xPR0lOX1JFU1BfTEVOR1RIKHNpemVvZihzdHJ1Y3Qgc2JwMl9sb2dpbl9yZXNwb25zZSkpOwogCVNCUDJfREVCVUcoInNicDJfbG9naW5fZGV2aWNlOiBwYXNzd2RfcmVzcF9sZW5ndGhzIGluaXRpYWxpemVkIik7CiAKLQlzY3NpX2lkLT5sb2dpbl9vcmItPnN0YXR1c19GSUZPX2xvID0gU0JQMl9TVEFUVVNfRklGT19BRERSRVNTX0xPICsKLQkJCQkJICAgICBTQlAyX1NUQVRVU19GSUZPX0VOVFJZX1RPX09GRlNFVChzY3NpX2lkLT51ZC0+aWQpOwotCXNjc2lfaWQtPmxvZ2luX29yYi0+c3RhdHVzX0ZJRk9faGkgPSAoT1JCX1NFVF9OT0RFX0lEKGhpLT5ob3N0LT5ub2RlX2lkKSB8Ci0JCQkJCSAgICAgIFNCUDJfU1RBVFVTX0ZJRk9fQUREUkVTU19ISSk7Ci0JU0JQMl9ERUJVRygic2JwMl9sb2dpbl9kZXZpY2U6IHN0YXR1cyBGSUZPIGluaXRpYWxpemVkIik7CisJc2NzaV9pZC0+bG9naW5fb3JiLT5zdGF0dXNfZmlmb19oaSA9CisJCU9SQl9TRVRfU1RBVFVTX0ZJRk9fSEkoc2NzaV9pZC0+c3RhdHVzX2ZpZm9fYWRkciwgaGktPmhvc3QtPm5vZGVfaWQpOworCXNjc2lfaWQtPmxvZ2luX29yYi0+c3RhdHVzX2ZpZm9fbG8gPQorCQlPUkJfU0VUX1NUQVRVU19GSUZPX0xPKHNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIpOwogCiAJLyoKIAkgKiBCeXRlIHN3YXAgT1JCIGlmIG5lY2Vzc2FyeQpAQCAtMTMwMSwxMCArMTMxNSwxMCBAQAogCXNjc2lfaWQtPmxvZ291dF9vcmItPmxvZ2luX0lEX21pc2MgfD0gT1JCX1NFVF9OT1RJRlkoMSk7CiAKIAlzY3NpX2lkLT5sb2dvdXRfb3JiLT5yZXNlcnZlZDUgPSAweDA7Ci0Jc2NzaV9pZC0+bG9nb3V0X29yYi0+c3RhdHVzX0ZJRk9fbG8gPSBTQlAyX1NUQVRVU19GSUZPX0FERFJFU1NfTE8gKwotCQkJCQkgICAgICBTQlAyX1NUQVRVU19GSUZPX0VOVFJZX1RPX09GRlNFVChzY3NpX2lkLT51ZC0+aWQpOwotCXNjc2lfaWQtPmxvZ291dF9vcmItPnN0YXR1c19GSUZPX2hpID0gKE9SQl9TRVRfTk9ERV9JRChoaS0+aG9zdC0+bm9kZV9pZCkgfAotCQkJCQkgICAgICAgU0JQMl9TVEFUVVNfRklGT19BRERSRVNTX0hJKTsKKwlzY3NpX2lkLT5sb2dvdXRfb3JiLT5zdGF0dXNfZmlmb19oaSA9CisJCU9SQl9TRVRfU1RBVFVTX0ZJRk9fSEkoc2NzaV9pZC0+c3RhdHVzX2ZpZm9fYWRkciwgaGktPmhvc3QtPm5vZGVfaWQpOworCXNjc2lfaWQtPmxvZ291dF9vcmItPnN0YXR1c19maWZvX2xvID0KKwkJT1JCX1NFVF9TVEFUVVNfRklGT19MTyhzY3NpX2lkLT5zdGF0dXNfZmlmb19hZGRyKTsKIAogCS8qCiAJICogQnl0ZSBzd2FwIE9SQiBpZiBuZWNlc3NhcnkKQEAgLTEzNjYsMTAgKzEzODAsMTAgQEAKIAlzY3NpX2lkLT5yZWNvbm5lY3Rfb3JiLT5sb2dpbl9JRF9taXNjIHw9IE9SQl9TRVRfTk9USUZZKDEpOwogCiAJc2NzaV9pZC0+cmVjb25uZWN0X29yYi0+cmVzZXJ2ZWQ1ID0gMHgwOwotCXNjc2lfaWQtPnJlY29ubmVjdF9vcmItPnN0YXR1c19GSUZPX2xvID0gU0JQMl9TVEFUVVNfRklGT19BRERSRVNTX0xPICsKLQkJCQkJCSBTQlAyX1NUQVRVU19GSUZPX0VOVFJZX1RPX09GRlNFVChzY3NpX2lkLT51ZC0+aWQpOwotCXNjc2lfaWQtPnJlY29ubmVjdF9vcmItPnN0YXR1c19GSUZPX2hpID0KLQkJKE9SQl9TRVRfTk9ERV9JRChoaS0+aG9zdC0+bm9kZV9pZCkgfCBTQlAyX1NUQVRVU19GSUZPX0FERFJFU1NfSEkpOworCXNjc2lfaWQtPnJlY29ubmVjdF9vcmItPnN0YXR1c19maWZvX2hpID0KKwkJT1JCX1NFVF9TVEFUVVNfRklGT19ISShzY3NpX2lkLT5zdGF0dXNfZmlmb19hZGRyLCBoaS0+aG9zdC0+bm9kZV9pZCk7CisJc2NzaV9pZC0+cmVjb25uZWN0X29yYi0+c3RhdHVzX2ZpZm9fbG8gPQorCQlPUkJfU0VUX1NUQVRVU19GSUZPX0xPKHNjc2lfaWQtPnN0YXR1c19maWZvX2FkZHIpOwogCiAJLyoKIAkgKiBCeXRlIHN3YXAgT1JCIGlmIG5lY2Vzc2FyeQpAQCAtMTU2MCw3ICsxNTc0LDcgQEAKIAkvKiBDaGVjayBmb3IgYSBibGFja2xpc3RlZCBzZXQgb2YgZGV2aWNlcyB0aGF0IHJlcXVpcmUgdXMgdG8gZm9yY2UKIAkgKiBhIDM2IGJ5dGUgaG9zdCBpbnF1aXJ5LiBUaGlzIGNhbiBiZSBvdmVycmlkZW4gYXMgYSBtb2R1bGUgcGFyYW0KIAkgKiAodG8gZm9yY2UgYWxsIGhvc3RzKS4gICovCi0JZm9yIChpID0gMDsgaSA8IE5VTV9CUk9LRU5fSU5RVUlSWV9ERVZTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYnAyX2Jyb2tlbl9pbnF1aXJ5X2xpc3QpOyBpKyspIHsKIAkJaWYgKChmaXJtd2FyZV9yZXZpc2lvbiAmIDB4ZmZmZjAwKSA9PQogCQkJCXNicDJfYnJva2VuX2lucXVpcnlfbGlzdFtpXSkgewogCQkJU0JQMl9XQVJOKCJOb2RlICIgTk9ERV9CVVNfRk1UICI6IFVzaW5nIDM2Ynl0ZSBpbnF1aXJ5IHdvcmthcm91bmQiLApAQCAtMjAwNywxOCArMjAyMSw2IEBACiAJfQogCiAJLyoKLQkgKiBUaGUgc2NzaSBzdGFjayBzZW5kcyBkb3duIGEgcmVxdWVzdF9idWZmbGVuIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZQotCSAqIGxlbmd0aCBmaWVsZCBpbiB0aGUgc2NzaSBjZGIuIFRoaXMgY2F1c2VzIHNvbWUgc2JwMiBkZXZpY2VzIHRvCi0JICogcmVqZWN0IHRoaXMgaW5xdWlyeSBjb21tYW5kLiBGaXggdGhlIHJlcXVlc3RfYnVmZmxlbi4KLQkgKi8KLQlpZiAoKmNtZCA9PSBJTlFVSVJZKSB7Ci0JCWlmIChmb3JjZV9pbnF1aXJ5X2hhY2sgfHwgc2NzaV9pZC0+d29ya2Fyb3VuZHMgJiBTQlAyX0JSRUFLQUdFX0lOUVVJUllfSEFDSykKLQkJCXJlcXVlc3RfYnVmZmxlbiA9IGNtZFs0XSA9IDB4MjQ7Ci0JCWVsc2UKLQkJCXJlcXVlc3RfYnVmZmxlbiA9IGNtZFs0XTsKLQl9Ci0KLQkvKgogCSAqIE5vdyBhY3R1YWxseSBmaWxsIGluIHRoZSBjb21hbW5kIG9yYiBhbmQgc2JwMiBzL2cgbGlzdAogCSAqLwogCXNicDJfY3JlYXRlX2NvbW1hbmRfb3JiKHNjc2lfaWQsIGNvbW1hbmQsIGNtZCwgU0NwbnQtPnVzZV9zZywKQEAgLTIwODIsOSArMjA4NCw3IEBACiAKIAlTQlAyX0RFQlVHKCJzYnAyX2NoZWNrX3NicDJfcmVzcG9uc2UiKTsKIAotCXN3aXRjaCAoU0NwbnQtPmNtbmRbMF0pIHsKLQotCWNhc2UgSU5RVUlSWToKKwlpZiAoU0NwbnQtPmNtbmRbMF0gPT0gSU5RVUlSWSAmJiAoU0NwbnQtPmNtbmRbMV0gJiAzKSA9PSAwKSB7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSBkYXRhIGxlbmd0aCBpcyBvay4gTWluaW11bSBsZW5ndGggaXMgMzYgYnl0ZXMKIAkJICovCkBAIC0yMDk3LDEzICsyMDk3LDcgQEAKIAkJICovCiAJCXNjc2lfYnVmWzJdIHw9IDI7CiAJCXNjc2lfYnVmWzNdID0gKHNjc2lfYnVmWzNdICYgMHhmMCkgfCAyOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7CiAJfQotCXJldHVybjsKIH0KIAogLyoKQEAgLTIxMTQsNyArMjEwOCw2IEBACiB7CiAJc3RydWN0IHNicDJzY3NpX2hvc3RfaW5mbyAqaGk7CiAJc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqc2NzaV9pZCA9IE5VTEwsICpzY3NpX2lkX3RtcDsKLQl1MzIgaWQ7CiAJc3RydWN0IHNjc2lfY21uZCAqU0NwbnQgPSBOVUxMOwogCXUzMiBzY3NpX3N0YXR1cyA9IFNCUDJfU0NTSV9TVEFUVVNfR09PRDsKIAlzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNvbW1hbmQ7CkBAIC0yMTM3LDEyICsyMTMwLDEyIEBACiAJfQogCiAJLyoKLQkgKiBGaW5kIG91ciBzY3NpX2lkIHN0cnVjdHVyZSBieSBsb29raW5nIGF0IHRoZSBzdGF0dXMgZmlmbyBhZGRyZXNzIHdyaXR0ZW4gdG8gYnkKLQkgKiB0aGUgc2JwMiBkZXZpY2UuCisJICogRmluZCBvdXIgc2NzaV9pZCBzdHJ1Y3R1cmUgYnkgbG9va2luZyBhdCB0aGUgc3RhdHVzIGZpZm8gYWRkcmVzcworCSAqIHdyaXR0ZW4gdG8gYnkgdGhlIHNicDIgZGV2aWNlLgogCSAqLwotCWlkID0gU0JQMl9TVEFUVVNfRklGT19PRkZTRVRfVE9fRU5UUlkoKHUzMikoYWRkciAtIFNCUDJfU1RBVFVTX0ZJRk9fQUREUkVTUykpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NzaV9pZF90bXAsICZoaS0+c2NzaV9pZHMsIHNjc2lfbGlzdCkgewotCQlpZiAoc2NzaV9pZF90bXAtPm5lLT5ub2RlaWQgPT0gbm9kZWlkICYmIHNjc2lfaWRfdG1wLT51ZC0+aWQgPT0gaWQpIHsKKwkJaWYgKHNjc2lfaWRfdG1wLT5uZS0+bm9kZWlkID09IG5vZGVpZCAmJgorCQkgICAgc2NzaV9pZF90bXAtPnN0YXR1c19maWZvX2FkZHIgPT0gYWRkcikgewogCQkJc2NzaV9pZCA9IHNjc2lfaWRfdG1wOwogCQkJYnJlYWs7CiAJCX0KQEAgLTI0ODMsNyArMjQ3NiwxNiBAQAogCiBzdGF0aWMgaW50IHNicDJzY3NpX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQkoKHN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YVswXSktPnNkZXYgPSBzZGV2OworCXN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQgPQorCQkoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqKXNkZXYtPmhvc3QtPmhvc3RkYXRhWzBdOworCisJc2NzaV9pZC0+c2RldiA9IHNkZXY7CisKKwlpZiAoZm9yY2VfaW5xdWlyeV9oYWNrIHx8CisJICAgIHNjc2lfaWQtPndvcmthcm91bmRzICYgU0JQMl9CUkVBS0FHRV9JTlFVSVJZX0hBQ0spIHsKKwkJc2Rldi0+aW5xdWlyeV9sZW4gPSAzNjsKKwkJc2Rldi0+c2tpcF9tc19wYWdlXzggPSAxOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmggYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuaAppbmRleCA5MDBlYTFkLi5lMmQzNTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuaApAQCAtMzMsMTUgKzMzLDE3IEBACiAjZGVmaW5lIE9SQl9ESVJFQ1RJT05fTk9fREFUQV9UUkFOU0ZFUiAgMHgyCiAKICNkZWZpbmUgT1JCX1NFVF9OVUxMX1BUUih2YWx1ZSkJCQkoKHZhbHVlICYgMHgxKSA8PCAzMSkKLSNkZWZpbmUgT1JCX1NFVF9OT1RJRlkodmFsdWUpICAgICAgICAgICAgICAgICAgICgodmFsdWUgJiAweDEpIDw8IDMxKQotI2RlZmluZSBPUkJfU0VUX1JRX0ZNVCh2YWx1ZSkgICAgICAgICAgICAgICAgICAgKCh2YWx1ZSAmIDB4MykgPDwgMjkpCS8qIHVudXNlZCA/ICovCisjZGVmaW5lIE9SQl9TRVRfTk9USUZZKHZhbHVlKQkJCSgodmFsdWUgJiAweDEpIDw8IDMxKQorI2RlZmluZSBPUkJfU0VUX1JRX0ZNVCh2YWx1ZSkJCQkoKHZhbHVlICYgMHgzKSA8PCAyOSkJLyogdW51c2VkID8gKi8KICNkZWZpbmUgT1JCX1NFVF9OT0RFX0lEKHZhbHVlKQkJCSgodmFsdWUgJiAweGZmZmYpIDw8IDE2KQotI2RlZmluZSBPUkJfU0VUX0RBVEFfU0laRSh2YWx1ZSkgICAgICAgICAgICAgICAgKHZhbHVlICYgMHhmZmZmKQotI2RlZmluZSBPUkJfU0VUX1BBR0VfU0laRSh2YWx1ZSkgICAgICAgICAgICAgICAgKCh2YWx1ZSAmIDB4NykgPDwgMTYpCi0jZGVmaW5lIE9SQl9TRVRfUEFHRV9UQUJMRV9QUkVTRU5UKHZhbHVlKSAgICAgICAoKHZhbHVlICYgMHgxKSA8PCAxOSkKLSNkZWZpbmUgT1JCX1NFVF9NQVhfUEFZTE9BRCh2YWx1ZSkgICAgICAgICAgICAgICgodmFsdWUgJiAweGYpIDw8IDIwKQotI2RlZmluZSBPUkJfU0VUX1NQRUVEKHZhbHVlKSAgICAgICAgICAgICAgICAgICAgKCh2YWx1ZSAmIDB4NykgPDwgMjQpCi0jZGVmaW5lIE9SQl9TRVRfRElSRUNUSU9OKHZhbHVlKSAgICAgICAgICAgICAgICAoKHZhbHVlICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgT1JCX1NFVF9TVEFUVVNfRklGT19ISSh2YWx1ZSwgaWQpCSh2YWx1ZSA+PiAzMiB8IE9SQl9TRVRfTk9ERV9JRChpZCkpCisjZGVmaW5lIE9SQl9TRVRfU1RBVFVTX0ZJRk9fTE8odmFsdWUpCQkodmFsdWUgJiAweGZmZmZmZmZmKQorI2RlZmluZSBPUkJfU0VUX0RBVEFfU0laRSh2YWx1ZSkJCSh2YWx1ZSAmIDB4ZmZmZikKKyNkZWZpbmUgT1JCX1NFVF9QQUdFX1NJWkUodmFsdWUpCQkoKHZhbHVlICYgMHg3KSA8PCAxNikKKyNkZWZpbmUgT1JCX1NFVF9QQUdFX1RBQkxFX1BSRVNFTlQodmFsdWUpCSgodmFsdWUgJiAweDEpIDw8IDE5KQorI2RlZmluZSBPUkJfU0VUX01BWF9QQVlMT0FEKHZhbHVlKQkJKCh2YWx1ZSAmIDB4ZikgPDwgMjApCisjZGVmaW5lIE9SQl9TRVRfU1BFRUQodmFsdWUpCQkJKCh2YWx1ZSAmIDB4NykgPDwgMjQpCisjZGVmaW5lIE9SQl9TRVRfRElSRUNUSU9OKHZhbHVlKQkJKCh2YWx1ZSAmIDB4MSkgPDwgMjcpCiAKIHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiIHsKIAl2b2xhdGlsZSB1MzIgbmV4dF9PUkJfaGk7CkBAIC03Niw4ICs3OCw4IEBACiAJdTMyIGxvZ2luX3Jlc3BvbnNlX2xvOwogCXUzMiBsdW5fbWlzYzsKIAl1MzIgcGFzc3dkX3Jlc3BfbGVuZ3RoczsKLQl1MzIgc3RhdHVzX0ZJRk9faGk7Ci0JdTMyIHN0YXR1c19GSUZPX2xvOworCXUzMiBzdGF0dXNfZmlmb19oaTsKKwl1MzIgc3RhdHVzX2ZpZm9fbG87CiB9OwogCiAjZGVmaW5lIFJFU1BPTlNFX0dFVF9MT0dJTl9JRCh2YWx1ZSkgICAgICAgICAgICAodmFsdWUgJiAweGZmZmYpCkBAIC0xMDIsOCArMTA0LDggQEAKIAl1MzIgcXVlcnlfcmVzcG9uc2VfbG87CiAJdTMyIGx1bl9taXNjOwogCXUzMiByZXNlcnZlZF9yZXNwX2xlbmd0aDsKLQl1MzIgc3RhdHVzX0ZJRk9faGk7Ci0JdTMyIHN0YXR1c19GSUZPX2xvOworCXUzMiBzdGF0dXNfZmlmb19oaTsKKwl1MzIgc3RhdHVzX2ZpZm9fbG87CiB9OwogCiAjZGVmaW5lIFJFU1BPTlNFX0dFVF9NQVhfTE9HSU5TKHZhbHVlKSAgICAgICAgICAodmFsdWUgJiAweGZmZmYpCkBAIC0xMjMsOCArMTI1LDggQEAKIAl1MzIgcmVzZXJ2ZWQ0OwogCXUzMiBsb2dpbl9JRF9taXNjOwogCXUzMiByZXNlcnZlZDU7Ci0JdTMyIHN0YXR1c19GSUZPX2hpOwotCXUzMiBzdGF0dXNfRklGT19sbzsKKwl1MzIgc3RhdHVzX2ZpZm9faGk7CisJdTMyIHN0YXR1c19maWZvX2xvOwogfTsKIAogc3RydWN0IHNicDJfbG9nb3V0X29yYiB7CkBAIC0xMzQsOCArMTM2LDggQEAKIAl1MzIgcmVzZXJ2ZWQ0OwogCXUzMiBsb2dpbl9JRF9taXNjOwogCXUzMiByZXNlcnZlZDU7Ci0JdTMyIHN0YXR1c19GSUZPX2hpOwotCXUzMiBzdGF0dXNfRklGT19sbzsKKwl1MzIgc3RhdHVzX2ZpZm9faGk7CisJdTMyIHN0YXR1c19maWZvX2xvOwogfTsKIAogI2RlZmluZSBQQUdFX1RBQkxFX1NFVF9TRUdNRU5UX0JBU0VfSEkodmFsdWUpICAgKHZhbHVlICYgMHhmZmZmKQpAQCAtMTk1LDMwICsxOTcsNiBAQAogICogTWlzY2VsbGFuZW91cyBTQlAyIHJlbGF0ZWQgY29uZmlnIHJvbSBkZWZpbmVzCiAgKi8KIAotLyogVGhlIHN0YXR1cyBmaWZvIGFkZHJlc3MgZGVmaW5pdGlvbiBiZWxvdyBpcyB1c2VkIGFzIGEgYmFzZSBmb3IgZWFjaAotICogbm9kZSwgd2hpY2ggYSBjaHVuayBzZXBlcmF0ZWx5IGFzc2lnbmVkIHRvIGVhY2ggdW5pdCBkaXJlY3RvcnkgaW4gdGhlCi0gKiBub2RlLiAgRm9yIGV4YW1wbGUsIDB4ZmZmZTAwMDAwMDAwVUxMIGlzIHVzZWQgZm9yIHRoZSBmaXJzdCBzYnAyIGRldmljZQotICogZGV0ZWN0ZWQgb24gbm9kZSAwLCAweGZmZmUwMDAwMDAyMFVMTCBmb3IgdGhlIG5leHQgc2JwMiBkZXZpY2Ugb24gbm9kZQotICogMCwgYW5kIHNvIG9uLgotICoKLSAqIE5vdGU6IFdlIGNvdWxkIHVzZSBhIHNpbmdsZSBzdGF0dXMgZmlmbyBhZGRyZXNzIGZvciBhbGwgc2JwMiBkZXZpY2VzLAotICogYW5kIGZpZ3VyZSBvdXQgd2hpY2ggc2JwMiBkZXZpY2UgdGhlIHN0YXR1cyBiZWxvbmdzIHRvIGJ5IGxvb2tpbmcgYXQKLSAqIHRoZSBzb3VyY2Ugbm9kZSBpZCBvZiB0aGUgc3RhdHVzIHdyaXRlLi4uIGJ1dCwgdXNpbmcgc2VwYXJhdGUgYWRkcmVzc2VzCi0gKiBmb3IgZWFjaCBzYnAyIHVuaXQgZGlyZWN0b3J5IGFsbG93cyBmb3IgYmV0dGVyIGNvZGUgYW5kIHRoZSBhYmlsaXR5IHRvCi0gKiBzdXBwb3J0IG11bHRpcGxlIGx1bnMgd2l0aGluIGEgc2luZ2xlIDEzOTQgbm9kZS4KLSAqCi0gKiBBbHNvIG5vdGUgdGhhdCB3ZSBjaG9vc2UgdGhlIGFkZHJlc3MgcmFuZ2UgYmVsb3cgYXMgaXQgaXMgYSByZWdpb24KLSAqIHNwZWNpZmllZCBmb3Igd3JpdGUgcG9zdGluZywgd2hlcmUgdGhlIG9oY2kgY29udHJvbGxlciB3aWxsCi0gKiBhdXRvbWF0aWNhbGx5IHNlbmQgYW4gYWNrX2NvbXBsZXRlIHdoZW4gdGhlIHN0YXR1cyBpcyB3cml0dGVuIGJ5IHRoZQotICogc2JwMiBkZXZpY2UuLi4gc2F2aW5nIGEgc3BsaXQgdHJhbnNhY3Rpb24uICAgPSkKLSAqLwotI2RlZmluZSBTQlAyX1NUQVRVU19GSUZPX0FERFJFU1MJCQkJMHhmZmZlMDAwMDAwMDBVTEwKLSNkZWZpbmUgU0JQMl9TVEFUVVNfRklGT19BRERSRVNTX0hJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmUKLSNkZWZpbmUgU0JQMl9TVEFUVVNfRklGT19BRERSRVNTX0xPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKLQotI2RlZmluZSBTQlAyX1NUQVRVU19GSUZPX0VOVFJZX1RPX09GRlNFVChlbnRyeSkJCQkoKGVudHJ5KSA8PCA1KQotI2RlZmluZSBTQlAyX1NUQVRVU19GSUZPX09GRlNFVF9UT19FTlRSWShvZmZzZXQpCQkoKG9mZnNldCkgPj4gNSkKLQogI2RlZmluZSBTQlAyX1VOSVRfRElSRUNUT1JZX09GRlNFVF9LRVkJCQkJMHhkMQogI2RlZmluZSBTQlAyX0NTUl9PRkZTRVRfS0VZCQkJCQkweDU0CiAjZGVmaW5lIFNCUDJfVU5JVF9TUEVDX0lEX0tFWQkJCQkJMHgxMgpAQCAtMjU4LDcgKzIzNiw2IEBACiAgKi8KIAogI2RlZmluZSBTQlAyX01BWF9TR19FTEVNRU5UX0xFTkdUSAkweGYwMDAKLSNkZWZpbmUgU0JQMl9NQVhfVURTX1BFUl9OT0RFCQkxNgkvKiBNYXhpbXVtIHNjc2kgZGV2aWNlcyBwZXIgbm9kZSAqLwogI2RlZmluZSBTQlAyX01BWF9TRUNUT1JTCQkyNTUJLyogTWF4IHNlY3RvcnMgc3VwcG9ydGVkICovCiAjZGVmaW5lIFNCUDJfTUFYX0NNRFMJCQk4CS8qIFRoaXMgc2hvdWxkIGJlIHNhZmUgKi8KIApAQCAtMzM4LDYgKzMxNSwxMSBAQAogCXUzMiBzYnAyX2Zpcm13YXJlX3JldmlzaW9uOwogCiAJLyoKKwkgKiBBZGRyZXNzIGZvciB0aGUgZGV2aWNlIHRvIHdyaXRlIHN0YXR1cyBibG9ja3MgdG8KKwkgKi8KKwl1NjQgc3RhdHVzX2ZpZm9fYWRkcjsKKworCS8qCiAJICogVmFyaWFibGUgdXNlZCBmb3IgbG9naW5zLCByZWNvbm5lY3RzLCBsb2dvdXRzLCBxdWVyeSBsb2dpbnMKIAkgKi8KIAlhdG9taWNfdCBzYnAyX2xvZ2luX2NvbXBsZXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKaW5kZXggMzlmYjg4My4uMjE2ZGJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCkBAIC03NDQsNyArNzQ0LDcgQEAKIAkJCWlmIChpID09IElTT19DSEFOTkVMUykgewogCQkJICAgIFBSSU5UKEtFUk5fRVJSLCBvaGNpLT5ob3N0LT5pZCwgCiAJCQkJICAiTm8gZnJlZSBjaGFubmVsIGZvdW5kIik7Ci0JCQkgICAgcmV0dXJuIEVBR0FJTjsKKwkJCSAgICByZXR1cm4gLUVBR0FJTjsKIAkJCX0KIAkJCWlmICghKG9oY2ktPklTT19jaGFubmVsX3VzYWdlICYgbWFzaykpIHsKIAkJCSAgICB2LmNoYW5uZWwgPSBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWdlbnQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FnZW50LmMKaW5kZXggMzRiNzI0YS4uZWNkMWEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWdlbnQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZ2VudC5jCkBAIC03OCwyNSArNzgsNiBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotaW50IHNtaV9jaGVja19sb2NhbF9kcl9zbXAoc3RydWN0IGliX3NtcCAqc21wLAotCQkJICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAotCQkJICAgaW50IHBvcnRfbnVtKQotewotCXN0cnVjdCBpYl9hZ2VudF9wb3J0X3ByaXZhdGUgKnBvcnRfcHJpdjsKLQotCWlmIChzbXAtPm1nbXRfY2xhc3MgIT0gSUJfTUdNVF9DTEFTU19TVUJOX0RJUkVDVEVEX1JPVVRFKQotCQlyZXR1cm4gMTsKLQotCXBvcnRfcHJpdiA9IGliX2dldF9hZ2VudF9wb3J0KGRldmljZSwgcG9ydF9udW0pOwotCWlmICghcG9ydF9wcml2KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHIFNQRlggInNtaV9jaGVja19sb2NhbF9kcl9zbXAgJXMgcG9ydCAlZCAiCi0JCSAgICAgICAibm90IG9wZW5cbiIsIGRldmljZS0+bmFtZSwgcG9ydF9udW0pOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gc21pX2NoZWNrX2xvY2FsX3NtcChwb3J0X3ByaXYtPmFnZW50WzBdLCBzbXApOwotfQotCiBpbnQgYWdlbnRfc2VuZF9yZXNwb25zZShzdHJ1Y3QgaWJfbWFkICptYWQsIHN0cnVjdCBpYl9ncmggKmdyaCwKIAkJCXN0cnVjdCBpYl93YyAqd2MsIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKIAkJCWludCBwb3J0X251bSwgaW50IHFwbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IDI1MTRkZTMuLjdjZmVkYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAKIAlzdHJ1Y3QgcmJfbm9kZSBzZXJ2aWNlX25vZGU7CiAJc3RydWN0IHJiX25vZGUgc2lkcl9pZF9ub2RlOwotCXNwaW5sb2NrX3QgbG9jazsKKwlzcGlubG9ja190IGxvY2s7CS8qIERvIG5vdCBhY3F1aXJlIGluc2lkZSBjbS5sb2NrICovCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlhdG9taWNfdCByZWZjb3VudDsKIApAQCAtMTU0NywyOCArMTU0Nyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8tPndvcmsucmVtb3RlX2lkID0gcmVwX21zZy0+bG9jYWxfY29tbV9pZDsKLQljbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvLT5yZW1vdGVfY2FfZ3VpZCA9IHJlcF9tc2ctPmxvY2FsX2NhX2d1aWQ7Ci0JY21faWRfcHJpdi0+dGltZXdhaXRfaW5mby0+cmVtb3RlX3FwbiA9IGNtX3JlcF9nZXRfbG9jYWxfcXBuKHJlcF9tc2cpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNtLmxvY2ssIGZsYWdzKTsKLQkvKiBDaGVjayBmb3IgZHVwbGljYXRlIFJFUC4gKi8KLQlpZiAoY21faW5zZXJ0X3JlbW90ZV9pZChjbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbS5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCS8qIENoZWNrIGZvciBhIHN0YWxlIGNvbm5lY3Rpb24uICovCi0JaWYgKGNtX2luc2VydF9yZW1vdGVfcXBuKGNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8pKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtLmxvY2ssIGZsYWdzKTsKLQkJY21faXNzdWVfcmVqKHdvcmstPnBvcnQsIHdvcmstPm1hZF9yZWN2X3djLAotCQkJICAgICBJQl9DTV9SRUpfU1RBTEVfQ09OTiwgQ01fTVNHX1JFU1BPTlNFX1JFUCwKLQkJCSAgICAgTlVMTCwgMCk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtLmxvY2ssIGZsYWdzKTsKLQogCWNtX2Zvcm1hdF9yZXBfZXZlbnQod29yayk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTU4MSw2ICsxNTU5LDM0IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3I7CiAJfQorCisJY21faWRfcHJpdi0+dGltZXdhaXRfaW5mby0+d29yay5yZW1vdGVfaWQgPSByZXBfbXNnLT5sb2NhbF9jb21tX2lkOworCWNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8tPnJlbW90ZV9jYV9ndWlkID0gcmVwX21zZy0+bG9jYWxfY2FfZ3VpZDsKKwljbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvLT5yZW1vdGVfcXBuID0gY21fcmVwX2dldF9sb2NhbF9xcG4ocmVwX21zZyk7CisKKwlzcGluX2xvY2soJmNtLmxvY2spOworCS8qIENoZWNrIGZvciBkdXBsaWNhdGUgUkVQLiAqLworCWlmIChjbV9pbnNlcnRfcmVtb3RlX2lkKGNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8pKSB7CisJCXNwaW5fdW5sb2NrKCZjbS5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKwkvKiBDaGVjayBmb3IgYSBzdGFsZSBjb25uZWN0aW9uLiAqLworCWlmIChjbV9pbnNlcnRfcmVtb3RlX3FwbihjbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvKSkgeworCQlyYl9lcmFzZSgmY21faWRfcHJpdi0+dGltZXdhaXRfaW5mby0+cmVtb3RlX2lkX25vZGUsCisJCQkgJmNtLnJlbW90ZV9pZF90YWJsZSk7CisJCWNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8tPmluc2VydGVkX3JlbW90ZV9pZCA9IDA7CisJCXNwaW5fdW5sb2NrKCZjbS5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQljbV9pc3N1ZV9yZWood29yay0+cG9ydCwgd29yay0+bWFkX3JlY3Zfd2MsCisJCQkgICAgIElCX0NNX1JFSl9TVEFMRV9DT05OLCBDTV9NU0dfUkVTUE9OU0VfUkVQLAorCQkJICAgICBOVUxMLCAwKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisJc3Bpbl91bmxvY2soJmNtLmxvY2spOworCiAJY21faWRfcHJpdi0+aWQuc3RhdGUgPSBJQl9DTV9SRVBfUkNWRDsKIAljbV9pZF9wcml2LT5pZC5yZW1vdGVfaWQgPSByZXBfbXNnLT5sb2NhbF9jb21tX2lkOwogCWNtX2lkX3ByaXYtPnJlbW90ZV9xcG4gPSBjbV9yZXBfZ2V0X2xvY2FsX3FwbihyZXBfbXNnKTsKQEAgLTE2MDMsNyArMTYwOSw3IEBACiAJCWNtX2RlcmVmX2lkKGNtX2lkX3ByaXYpOwogCXJldHVybiAwOwogCi1lcnJvcjoJY21fY2xlYW51cF90aW1ld2FpdChjbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvKTsKK2Vycm9yOgogCWNtX2RlcmVmX2lkKGNtX2lkX3ByaXYpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9mbXJfcG9vbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZm1yX3Bvb2wuYwppbmRleCBkMzRhNmYxLi44MzhiZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9mbXJfcG9vbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2Ztcl9wb29sLmMKQEAgLTI3OCw5ICsyNzgsOSBAQAogCXsKIAkJc3RydWN0IGliX3Bvb2xfZm1yICpmbXI7CiAJCXN0cnVjdCBpYl9mbXJfYXR0ciBhdHRyID0gewotCQkJLm1heF9wYWdlcyA9IHBhcmFtcy0+bWF4X3BhZ2VzX3Blcl9mbXIsCi0JCQkubWF4X21hcHMgID0gSUJfRk1SX01BWF9SRU1BUFMsCi0JCQkucGFnZV9zaXplID0gUEFHRV9TSElGVAorCQkJLm1heF9wYWdlcyAgPSBwYXJhbXMtPm1heF9wYWdlc19wZXJfZm1yLAorCQkJLm1heF9tYXBzICAgPSBJQl9GTVJfTUFYX1JFTUFQUywKKwkJCS5wYWdlX3NoaWZ0ID0gcGFyYW1zLT5wYWdlX3NoaWZ0CiAJCX07CiAKIAkJZm9yIChpID0gMDsgaSA8IHBhcmFtcy0+cG9vbF9zaXplOyArK2kpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKaW5kZXggYzgyZjQ3YS4uZjc4NTRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKQEAgLTMxLDcgKzMxLDcgQEAKICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICAqIFNPRlRXQVJFLgogICoKLSAqICRJZDogbWFkLmMgMjgxNyAyMDA1LTA3LTA3IDExOjI5OjI2WiBoYWxyICQKKyAqICRJZDogbWFkLmMgNTU5NiAyMDA2LTAzLTAzIDAxOjAwOjA3WiBzZWFuLmhlZnR5ICQKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKQEAgLTY3OSw4ICs2NzksOCBAQAogCQlnb3RvIG91dDsKIAl9CiAJLyogQ2hlY2sgdG8gcG9zdCBzZW5kIG9uIFFQIG9yIHByb2Nlc3MgbG9jYWxseSAqLwotCXJldCA9IHNtaV9jaGVja19sb2NhbF9kcl9zbXAoc21wLCBkZXZpY2UsIHBvcnRfbnVtKTsKLQlpZiAoIXJldCB8fCAhZGV2aWNlLT5wcm9jZXNzX21hZCkKKwlyZXQgPSBzbWlfY2hlY2tfbG9jYWxfc21wKHNtcCwgZGV2aWNlKTsKKwlpZiAoIXJldCkKIAkJZ290byBvdXQ7CiAKIAlsb2NhbCA9IGttYWxsb2Moc2l6ZW9mICpsb2NhbCwgR0ZQX0FUT01JQyk7CkBAIC03NjUsMTggKzc2NSw2NyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2J1Zl9sZW5ndGgoaW50IGhkcl9sZW4sIGludCBkYXRhX2xlbikKK3N0YXRpYyBpbnQgZ2V0X3BhZF9zaXplKGludCBoZHJfbGVuLCBpbnQgZGF0YV9sZW4pCiB7CiAJaW50IHNlZ19zaXplLCBwYWQ7CiAKIAlzZWdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWJfbWFkKSAtIGhkcl9sZW47CiAJaWYgKGRhdGFfbGVuICYmIHNlZ19zaXplKSB7CiAJCXBhZCA9IHNlZ19zaXplIC0gZGF0YV9sZW4gJSBzZWdfc2l6ZTsKLQkJaWYgKHBhZCA9PSBzZWdfc2l6ZSkKLQkJCXBhZCA9IDA7CisJCXJldHVybiBwYWQgPT0gc2VnX3NpemUgPyAwIDogcGFkOwogCX0gZWxzZQotCQlwYWQgPSBzZWdfc2l6ZTsKLQlyZXR1cm4gaGRyX2xlbiArIGRhdGFfbGVuICsgcGFkOworCQlyZXR1cm4gc2VnX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc2VuZF9ybXBwX2xpc3Qoc3RydWN0IGliX21hZF9zZW5kX3dyX3ByaXZhdGUgKm1hZF9zZW5kX3dyKQoreworCXN0cnVjdCBpYl9ybXBwX3NlZ21lbnQgKnMsICp0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIHQsICZtYWRfc2VuZF93ci0+cm1wcF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZzLT5saXN0KTsKKwkJa2ZyZWUocyk7CisJfQorfQorCitzdGF0aWMgaW50IGFsbG9jX3NlbmRfcm1wcF9saXN0KHN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlICpzZW5kX3dyLAorCQkJCWdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKnNlbmRfYnVmID0gJnNlbmRfd3ItPnNlbmRfYnVmOworCXN0cnVjdCBpYl9ybXBwX21hZCAqcm1wcF9tYWQgPSBzZW5kX2J1Zi0+bWFkOworCXN0cnVjdCBpYl9ybXBwX3NlZ21lbnQgKnNlZyA9IE5VTEw7CisJaW50IGxlZnQsIHNlZ19zaXplLCBwYWQ7CisKKwlzZW5kX2J1Zi0+c2VnX3NpemUgPSBzaXplb2YgKHN0cnVjdCBpYl9tYWQpIC0gc2VuZF9idWYtPmhkcl9sZW47CisJc2VnX3NpemUgPSBzZW5kX2J1Zi0+c2VnX3NpemU7CisJcGFkID0gc2VuZF93ci0+cGFkOworCisJLyogQWxsb2NhdGUgZGF0YSBzZWdtZW50cy4gKi8KKwlmb3IgKGxlZnQgPSBzZW5kX2J1Zi0+ZGF0YV9sZW4gKyBwYWQ7IGxlZnQgPiAwOyBsZWZ0IC09IHNlZ19zaXplKSB7CisJCXNlZyA9IGttYWxsb2Moc2l6ZW9mICgqc2VnKSArIHNlZ19zaXplLCBnZnBfbWFzayk7CisJCWlmICghc2VnKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImFsbG9jX3NlbmRfcm1wcF9zZWdzOiBSTVBQIG1lbSAiCisJCQkgICAgICAgImFsbG9jIGZhaWxlZCBmb3IgbGVuICV6ZCwgZ2ZwICUjeFxuIiwKKwkJCSAgICAgICBzaXplb2YgKCpzZWcpICsgc2VnX3NpemUsIGdmcF9tYXNrKTsKKwkJCWZyZWVfc2VuZF9ybXBwX2xpc3Qoc2VuZF93cik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzZWctPm51bSA9ICsrc2VuZF9idWYtPnNlZ19jb3VudDsKKwkJbGlzdF9hZGRfdGFpbCgmc2VnLT5saXN0LCAmc2VuZF93ci0+cm1wcF9saXN0KTsKKwl9CisKKwkvKiBaZXJvIGFueSBwYWRkaW5nICovCisJaWYgKHBhZCkKKwkJbWVtc2V0KHNlZy0+ZGF0YSArIHNlZ19zaXplIC0gcGFkLCAwLCBwYWQpOworCisJcm1wcF9tYWQtPnJtcHBfaGRyLnJtcHBfdmVyc2lvbiA9IHNlbmRfd3ItPm1hZF9hZ2VudF9wcml2LT4KKwkJCQkJICBhZ2VudC5ybXBwX3ZlcnNpb247CisJcm1wcF9tYWQtPnJtcHBfaGRyLnJtcHBfdHlwZSA9IElCX01HTVRfUk1QUF9UWVBFX0RBVEE7CisJaWJfc2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkciwgSUJfTUdNVF9STVBQX0ZMQUdfQUNUSVZFKTsKKworCXNlbmRfd3ItPmN1cl9zZWcgPSBjb250YWluZXJfb2Yoc2VuZF93ci0+cm1wcF9saXN0Lm5leHQsCisJCQkJCXN0cnVjdCBpYl9ybXBwX3NlZ21lbnQsIGxpc3QpOworCXNlbmRfd3ItPmxhc3RfYWNrX3NlZyA9IHNlbmRfd3ItPmN1cl9zZWc7CisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKiBpYl9jcmVhdGVfc2VuZF9tYWQoc3RydWN0IGliX21hZF9hZ2VudCAqbWFkX2FnZW50LApAQCAtNzg3LDMyICs4MzYsNDAgQEAKIHsKIAlzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUgKm1hZF9hZ2VudF9wcml2OwogCXN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlICptYWRfc2VuZF93cjsKLQlpbnQgYnVmX3NpemU7CisJaW50IHBhZCwgbWVzc2FnZV9zaXplLCByZXQsIHNpemU7CiAJdm9pZCAqYnVmOwogCiAJbWFkX2FnZW50X3ByaXYgPSBjb250YWluZXJfb2YobWFkX2FnZW50LCBzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUsCiAJCQkJICAgICAgYWdlbnQpOwotCWJ1Zl9zaXplID0gZ2V0X2J1Zl9sZW5ndGgoaGRyX2xlbiwgZGF0YV9sZW4pOworCXBhZCA9IGdldF9wYWRfc2l6ZShoZHJfbGVuLCBkYXRhX2xlbik7CisJbWVzc2FnZV9zaXplID0gaGRyX2xlbiArIGRhdGFfbGVuICsgcGFkOwogCiAJaWYgKCghbWFkX2FnZW50LT5ybXBwX3ZlcnNpb24gJiYKLQkgICAgIChybXBwX2FjdGl2ZSB8fCBidWZfc2l6ZSA+IHNpemVvZihzdHJ1Y3QgaWJfbWFkKSkpIHx8Ci0JICAgICghcm1wcF9hY3RpdmUgJiYgYnVmX3NpemUgPiBzaXplb2Yoc3RydWN0IGliX21hZCkpKQorCSAgICAgKHJtcHBfYWN0aXZlIHx8IG1lc3NhZ2Vfc2l6ZSA+IHNpemVvZihzdHJ1Y3QgaWJfbWFkKSkpIHx8CisJICAgICghcm1wcF9hY3RpdmUgJiYgbWVzc2FnZV9zaXplID4gc2l6ZW9mKHN0cnVjdCBpYl9tYWQpKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlidWYgPSBremFsbG9jKHNpemVvZiAqbWFkX3NlbmRfd3IgKyBidWZfc2l6ZSwgZ2ZwX21hc2spOworCXNpemUgPSBybXBwX2FjdGl2ZSA/IGhkcl9sZW4gOiBzaXplb2Yoc3RydWN0IGliX21hZCk7CisJYnVmID0ga3phbGxvYyhzaXplb2YgKm1hZF9zZW5kX3dyICsgc2l6ZSwgZ2ZwX21hc2spOwogCWlmICghYnVmKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCW1hZF9zZW5kX3dyID0gYnVmICsgYnVmX3NpemU7CisJbWFkX3NlbmRfd3IgPSBidWYgKyBzaXplOworCUlOSVRfTElTVF9IRUFEKCZtYWRfc2VuZF93ci0+cm1wcF9saXN0KTsKIAltYWRfc2VuZF93ci0+c2VuZF9idWYubWFkID0gYnVmOworCW1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5oZHJfbGVuID0gaGRyX2xlbjsKKwltYWRfc2VuZF93ci0+c2VuZF9idWYuZGF0YV9sZW4gPSBkYXRhX2xlbjsKKwltYWRfc2VuZF93ci0+cGFkID0gcGFkOwogCiAJbWFkX3NlbmRfd3ItPm1hZF9hZ2VudF9wcml2ID0gbWFkX2FnZW50X3ByaXY7Ci0JbWFkX3NlbmRfd3ItPnNnX2xpc3RbMF0ubGVuZ3RoID0gYnVmX3NpemU7CisJbWFkX3NlbmRfd3ItPnNnX2xpc3RbMF0ubGVuZ3RoID0gaGRyX2xlbjsKIAltYWRfc2VuZF93ci0+c2dfbGlzdFswXS5sa2V5ID0gbWFkX2FnZW50LT5tci0+bGtleTsKKwltYWRfc2VuZF93ci0+c2dfbGlzdFsxXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGliX21hZCkgLSBoZHJfbGVuOworCW1hZF9zZW5kX3dyLT5zZ19saXN0WzFdLmxrZXkgPSBtYWRfYWdlbnQtPm1yLT5sa2V5OwogCiAJbWFkX3NlbmRfd3ItPnNlbmRfd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZykgbWFkX3NlbmRfd3I7CiAJbWFkX3NlbmRfd3ItPnNlbmRfd3Iuc2dfbGlzdCA9IG1hZF9zZW5kX3dyLT5zZ19saXN0OwotCW1hZF9zZW5kX3dyLT5zZW5kX3dyLm51bV9zZ2UgPSAxOworCW1hZF9zZW5kX3dyLT5zZW5kX3dyLm51bV9zZ2UgPSAyOwogCW1hZF9zZW5kX3dyLT5zZW5kX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CiAJbWFkX3NlbmRfd3ItPnNlbmRfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CiAJbWFkX3NlbmRfd3ItPnNlbmRfd3Iud3IudWQucmVtb3RlX3FwbiA9IHJlbW90ZV9xcG47CkBAIC04MjAsMTMgKzg3NywxMSBAQAogCW1hZF9zZW5kX3dyLT5zZW5kX3dyLndyLnVkLnBrZXlfaW5kZXggPSBwa2V5X2luZGV4OwogCiAJaWYgKHJtcHBfYWN0aXZlKSB7Ci0JCXN0cnVjdCBpYl9ybXBwX21hZCAqcm1wcF9tYWQgPSBtYWRfc2VuZF93ci0+c2VuZF9idWYubWFkOwotCQlybXBwX21hZC0+cm1wcF9oZHIucGF5bGVuX25ld3dpbiA9IGNwdV90b19iZTMyKGhkcl9sZW4gLQotCQkJCQkJICAgSUJfTUdNVF9STVBQX0hEUiArIGRhdGFfbGVuKTsKLQkJcm1wcF9tYWQtPnJtcHBfaGRyLnJtcHBfdmVyc2lvbiA9IG1hZF9hZ2VudC0+cm1wcF92ZXJzaW9uOwotCQlybXBwX21hZC0+cm1wcF9oZHIucm1wcF90eXBlID0gSUJfTUdNVF9STVBQX1RZUEVfREFUQTsKLQkJaWJfc2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkciwKLQkJCQkgIElCX01HTVRfUk1QUF9GTEFHX0FDVElWRSk7CisJCXJldCA9IGFsbG9jX3NlbmRfcm1wcF9saXN0KG1hZF9zZW5kX3dyLCBnZnBfbWFzayk7CisJCWlmIChyZXQpIHsKKwkJCWtmcmVlKGJ1Zik7CisJCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCQl9CiAJfQogCiAJbWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZF9hZ2VudCA9IG1hZF9hZ2VudDsKQEAgLTgzNSwxNCArODkwLDUwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGliX2NyZWF0ZV9zZW5kX21hZCk7CiAKK3ZvaWQgKmliX2dldF9ybXBwX3NlZ21lbnQoc3RydWN0IGliX21hZF9zZW5kX2J1ZiAqc2VuZF9idWYsIGludCBzZWdfbnVtKQoreworCXN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlICptYWRfc2VuZF93cjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJbWFkX3NlbmRfd3IgPSBjb250YWluZXJfb2Yoc2VuZF9idWYsIHN0cnVjdCBpYl9tYWRfc2VuZF93cl9wcml2YXRlLAorCQkJCSAgIHNlbmRfYnVmKTsKKwlsaXN0ID0gJm1hZF9zZW5kX3dyLT5jdXJfc2VnLT5saXN0OworCisJaWYgKG1hZF9zZW5kX3dyLT5jdXJfc2VnLT5udW0gPCBzZWdfbnVtKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobWFkX3NlbmRfd3ItPmN1cl9zZWcsIGxpc3QsIGxpc3QpCisJCQlpZiAobWFkX3NlbmRfd3ItPmN1cl9zZWctPm51bSA9PSBzZWdfbnVtKQorCQkJCWJyZWFrOworCX0gZWxzZSBpZiAobWFkX3NlbmRfd3ItPmN1cl9zZWctPm51bSA+IHNlZ19udW0pIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKG1hZF9zZW5kX3dyLT5jdXJfc2VnLCBsaXN0LCBsaXN0KQorCQkJaWYgKG1hZF9zZW5kX3dyLT5jdXJfc2VnLT5udW0gPT0gc2VnX251bSkKKwkJCQlicmVhazsKKwl9CisJcmV0dXJuIG1hZF9zZW5kX3dyLT5jdXJfc2VnLT5kYXRhOworfQorRVhQT1JUX1NZTUJPTChpYl9nZXRfcm1wcF9zZWdtZW50KTsKKworc3RhdGljIGlubGluZSB2b2lkICppYl9nZXRfcGF5bG9hZChzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqbWFkX3NlbmRfd3IpCit7CisJaWYgKG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5zZWdfY291bnQpCisJCXJldHVybiBpYl9nZXRfcm1wcF9zZWdtZW50KCZtYWRfc2VuZF93ci0+c2VuZF9idWYsCisJCQkJCSAgIG1hZF9zZW5kX3dyLT5zZWdfbnVtKTsKKwllbHNlCisJCXJldHVybiBtYWRfc2VuZF93ci0+c2VuZF9idWYubWFkICsKKwkJICAgICAgIG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5oZHJfbGVuOworfQorCiB2b2lkIGliX2ZyZWVfc2VuZF9tYWQoc3RydWN0IGliX21hZF9zZW5kX2J1ZiAqc2VuZF9idWYpCiB7CiAJc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICptYWRfYWdlbnRfcHJpdjsKKwlzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqbWFkX3NlbmRfd3I7CiAKIAltYWRfYWdlbnRfcHJpdiA9IGNvbnRhaW5lcl9vZihzZW5kX2J1Zi0+bWFkX2FnZW50LAogCQkJCSAgICAgIHN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSwgYWdlbnQpOwotCWtmcmVlKHNlbmRfYnVmLT5tYWQpOworCW1hZF9zZW5kX3dyID0gY29udGFpbmVyX29mKHNlbmRfYnVmLCBzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSwKKwkJCQkgICBzZW5kX2J1Zik7CiAKKwlmcmVlX3NlbmRfcm1wcF9saXN0KG1hZF9zZW5kX3dyKTsKKwlrZnJlZShzZW5kX2J1Zi0+bWFkKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KSkKIAkJd2FrZV91cCgmbWFkX2FnZW50X3ByaXYtPndhaXQpOwogfQpAQCAtODY1LDEwICs5NTYsMTcgQEAKIAogCW1hZF9hZ2VudCA9IG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5tYWRfYWdlbnQ7CiAJc2dlID0gbWFkX3NlbmRfd3ItPnNnX2xpc3Q7Ci0Jc2dlLT5hZGRyID0gZG1hX21hcF9zaW5nbGUobWFkX2FnZW50LT5kZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJICAgbWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZCwgc2dlLT5sZW5ndGgsCi0JCQkJICAgRE1BX1RPX0RFVklDRSk7Ci0JcGNpX3VubWFwX2FkZHJfc2V0KG1hZF9zZW5kX3dyLCBtYXBwaW5nLCBzZ2UtPmFkZHIpOworCXNnZVswXS5hZGRyID0gZG1hX21hcF9zaW5nbGUobWFkX2FnZW50LT5kZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJICAgICBtYWRfc2VuZF93ci0+c2VuZF9idWYubWFkLAorCQkJCSAgICAgc2dlWzBdLmxlbmd0aCwKKwkJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCXBjaV91bm1hcF9hZGRyX3NldChtYWRfc2VuZF93ciwgaGVhZGVyX21hcHBpbmcsIHNnZVswXS5hZGRyKTsKKworCXNnZVsxXS5hZGRyID0gZG1hX21hcF9zaW5nbGUobWFkX2FnZW50LT5kZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJICAgICBpYl9nZXRfcGF5bG9hZChtYWRfc2VuZF93ciksCisJCQkJICAgICBzZ2VbMV0ubGVuZ3RoLAorCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CisJcGNpX3VubWFwX2FkZHJfc2V0KG1hZF9zZW5kX3dyLCBwYXlsb2FkX21hcHBpbmcsIHNnZVsxXS5hZGRyKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxcF9pbmZvLT5zZW5kX3F1ZXVlLmxvY2ssIGZsYWdzKTsKIAlpZiAocXBfaW5mby0+c2VuZF9xdWV1ZS5jb3VudCA8IHFwX2luZm8tPnNlbmRfcXVldWUubWF4X2FjdGl2ZSkgewpAQCAtODg1LDExICs5ODMsMTQgQEAKIAkJbGlzdF9hZGRfdGFpbCgmbWFkX3NlbmRfd3ItPm1hZF9saXN0Lmxpc3QsIGxpc3QpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcF9pbmZvLT5zZW5kX3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKIAkJZG1hX3VubWFwX3NpbmdsZShtYWRfYWdlbnQtPmRldmljZS0+ZG1hX2RldmljZSwKLQkJCQkgcGNpX3VubWFwX2FkZHIobWFkX3NlbmRfd3IsIG1hcHBpbmcpLAotCQkJCSBzZ2UtPmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7Ci0KKwkJCQkgcGNpX3VubWFwX2FkZHIobWFkX3NlbmRfd3IsIGhlYWRlcl9tYXBwaW5nKSwKKwkJCQkgc2dlWzBdLmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUobWFkX2FnZW50LT5kZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkJIHBjaV91bm1hcF9hZGRyKG1hZF9zZW5kX3dyLCBwYXlsb2FkX21hcHBpbmcpLAorCQkJCSBzZ2VbMV0ubGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTY2MSw5ICsxNzYyLDcgQEAKIAkJCQkJICAgIHBvcnRfcHJpdi0+ZGV2aWNlLT5ub2RlX3R5cGUsCiAJCQkJCSAgICBwb3J0X3ByaXYtPnBvcnRfbnVtKSkKIAkJCWdvdG8gb3V0OwotCQlpZiAoIXNtaV9jaGVja19sb2NhbF9kcl9zbXAoJnJlY3YtPm1hZC5zbXAsCi0JCQkJCSAgICBwb3J0X3ByaXYtPmRldmljZSwKLQkJCQkJICAgIHBvcnRfcHJpdi0+cG9ydF9udW0pKQorCQlpZiAoIXNtaV9jaGVja19sb2NhbF9zbXAoJnJlY3YtPm1hZC5zbXAsIHBvcnRfcHJpdi0+ZGV2aWNlKSkKIAkJCWdvdG8gb3V0OwogCX0KIApAQCAtMTg2Miw4ICsxOTYxLDExIEBACiAKIHJldHJ5OgogCWRtYV91bm1hcF9zaW5nbGUobWFkX3NlbmRfd3ItPnNlbmRfYnVmLm1hZF9hZ2VudC0+ZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJIHBjaV91bm1hcF9hZGRyKG1hZF9zZW5kX3dyLCBtYXBwaW5nKSwKKwkJCSBwY2lfdW5tYXBfYWRkcihtYWRfc2VuZF93ciwgaGVhZGVyX21hcHBpbmcpLAogCQkJIG1hZF9zZW5kX3dyLT5zZ19saXN0WzBdLmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CisJZG1hX3VubWFwX3NpbmdsZShtYWRfc2VuZF93ci0+c2VuZF9idWYubWFkX2FnZW50LT5kZXZpY2UtPmRtYV9kZXZpY2UsCisJCQkgcGNpX3VubWFwX2FkZHIobWFkX3NlbmRfd3IsIHBheWxvYWRfbWFwcGluZyksCisJCQkgbWFkX3NlbmRfd3ItPnNnX2xpc3RbMV0ubGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAlxdWV1ZWRfc2VuZF93ciA9IE5VTEw7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbmRfcXVldWUtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmbWFkX2xpc3QtPmxpc3QpOwpAQCAtMjI2Miw4ICsyMzY0LDEyIEBACiBzdGF0aWMgdm9pZCBpYl9tYWRfdGhyZWFkX2NvbXBsZXRpb25faGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGliX21hZF9wb3J0X3ByaXZhdGUgKnBvcnRfcHJpdiA9IGNxLT5jcV9jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlxdWV1ZV93b3JrKHBvcnRfcHJpdi0+d3EsICZwb3J0X3ByaXYtPndvcmspOworCXNwaW5fbG9ja19pcnFzYXZlKCZpYl9tYWRfcG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnBvcnRfcHJpdi0+cG9ydF9saXN0KSkKKwkJcXVldWVfd29yayhwb3J0X3ByaXYtPndxLCAmcG9ydF9wcml2LT53b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYl9tYWRfcG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTI1NzUsMTggKzI2ODEsMjMgQEAKIAl9CiAJSU5JVF9XT1JLKCZwb3J0X3ByaXYtPndvcmssIGliX21hZF9jb21wbGV0aW9uX2hhbmRsZXIsIHBvcnRfcHJpdik7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWJfbWFkX3BvcnRfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmcG9ydF9wcml2LT5wb3J0X2xpc3QsICZpYl9tYWRfcG9ydF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYl9tYWRfcG9ydF9saXN0X2xvY2ssIGZsYWdzKTsKKwogCXJldCA9IGliX21hZF9wb3J0X3N0YXJ0KHBvcnRfcHJpdik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZG4ndCBzdGFydCBwb3J0XG4iKTsKIAkJZ290byBlcnJvcjk7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmliX21hZF9wb3J0X2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJnBvcnRfcHJpdi0+cG9ydF9saXN0LCAmaWJfbWFkX3BvcnRfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWJfbWFkX3BvcnRfbGlzdF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiAKIGVycm9yOToKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWJfbWFkX3BvcnRfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmcG9ydF9wcml2LT5wb3J0X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmliX21hZF9wb3J0X2xpc3RfbG9jaywgZmxhZ3MpOworCiAJZGVzdHJveV93b3JrcXVldWUocG9ydF9wcml2LT53cSk7CiBlcnJvcjg6CiAJZGVzdHJveV9tYWRfcXAoJnBvcnRfcHJpdi0+cXBfaW5mb1sxXSk7CkBAIC0yNjIzLDExICsyNzM0LDkgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUG9ydCAlZCBub3QgZm91bmRcbiIsIHBvcnRfbnVtKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWxpc3RfZGVsKCZwb3J0X3ByaXYtPnBvcnRfbGlzdCk7CisJbGlzdF9kZWxfaW5pdCgmcG9ydF9wcml2LT5wb3J0X2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmliX21hZF9wb3J0X2xpc3RfbG9jaywgZmxhZ3MpOwogCi0JLyogU3RvcCBwcm9jZXNzaW5nIGNvbXBsZXRpb25zLiAqLwotCWZsdXNoX3dvcmtxdWV1ZShwb3J0X3ByaXYtPndxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShwb3J0X3ByaXYtPndxKTsKIAlkZXN0cm95X21hZF9xcCgmcG9ydF9wcml2LT5xcF9pbmZvWzFdKTsKIAlkZXN0cm95X21hZF9xcCgmcG9ydF9wcml2LT5xcF9pbmZvWzBdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oCmluZGV4IDU3MGY3ODYuLmE3MTI1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaApAQCAtMzEsNyArMzEsNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKgotICogJElkOiBtYWRfcHJpdi5oIDI3MzAgMjAwNS0wNi0yOCAxNjo0MzowM1ogc2Vhbi5oZWZ0eSAkCisgKiAkSWQ6IG1hZF9wcml2LmggNTU5NiAyMDA2LTAzLTAzIDAxOjAwOjA3WiBzZWFuLmhlZnR5ICQKICAqLwogCiAjaWZuZGVmIF9fSUJfTUFEX1BSSVZfSF9fCkBAIC04NSw2ICs4NSwxMiBAQAogCX0gbWFkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBpYl9ybXBwX3NlZ21lbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1MzIgbnVtOworCXU4IGRhdGFbMF07Cit9OworCiBzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUgewogCXN0cnVjdCBsaXN0X2hlYWQgYWdlbnRfbGlzdDsKIAlzdHJ1Y3QgaWJfbWFkX2FnZW50IGFnZW50OwpAQCAtMTE5LDcgKzEyNSw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCBhZ2VudF9saXN0OwogCXN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqbWFkX2FnZW50X3ByaXY7CiAJc3RydWN0IGliX21hZF9zZW5kX2J1ZiBzZW5kX2J1ZjsKLQlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpCisJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihoZWFkZXJfbWFwcGluZykKKwlERUNMQVJFX1BDSV9VTk1BUF9BRERSKHBheWxvYWRfbWFwcGluZykKIAlzdHJ1Y3QgaWJfc2VuZF93ciBzZW5kX3dyOwogCXN0cnVjdCBpYl9zZ2Ugc2dfbGlzdFtJQl9NQURfU0VORF9SRVFfTUFYX1NHXTsKIAlfX2JlNjQgdGlkOwpAQCAtMTMwLDExICsxMzcsMTIgQEAKIAllbnVtIGliX3djX3N0YXR1cyBzdGF0dXM7CiAKIAkvKiBSTVBQIGNvbnRyb2wgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJtcHBfbGlzdDsKKwlzdHJ1Y3QgaWJfcm1wcF9zZWdtZW50ICpsYXN0X2Fja19zZWc7CisJc3RydWN0IGliX3JtcHBfc2VnbWVudCAqY3VyX3NlZzsKIAlpbnQgbGFzdF9hY2s7CiAJaW50IHNlZ19udW07CiAJaW50IG5ld3dpbjsKLQlpbnQgdG90YWxfc2VnOwotCWludCBkYXRhX29mZnNldDsKIAlpbnQgcGFkOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKaW5kZXggMzI0OWUxZC4uYmFjZmRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCkBAIC0xMTEsMTQgKzExMSwxNCBAQAogCQlyZXR1cm4gSUJfTUdNVF9STVBQX0hEUjsKIH0KIAotc3RhdGljIHZvaWQgZm9ybWF0X2FjayhzdHJ1Y3QgaWJfcm1wcF9tYWQgKmFjaywKK3N0YXRpYyB2b2lkIGZvcm1hdF9hY2soc3RydWN0IGliX21hZF9zZW5kX2J1ZiAqbXNnLAogCQkgICAgICAgc3RydWN0IGliX3JtcHBfbWFkICpkYXRhLAogCQkgICAgICAgc3RydWN0IG1hZF9ybXBwX3JlY3YgKnJtcHBfcmVjdikKIHsKKwlzdHJ1Y3QgaWJfcm1wcF9tYWQgKmFjayA9IG1zZy0+bWFkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQltZW1jcHkoJmFjay0+bWFkX2hkciwgJmRhdGEtPm1hZF9oZHIsCi0JICAgICAgIGRhdGFfb2Zmc2V0KGRhdGEtPm1hZF9oZHIubWdtdF9jbGFzcykpOworCW1lbWNweShhY2ssICZkYXRhLT5tYWRfaGRyLCBtc2ctPmhkcl9sZW4pOwogCiAJYWNrLT5tYWRfaGRyLm1ldGhvZCBePSBJQl9NR01UX01FVEhPRF9SRVNQOwogCWFjay0+cm1wcF9oZHIucm1wcF90eXBlID0gSUJfTUdNVF9STVBQX1RZUEVfQUNLOwpAQCAtMTM1LDE2ICsxMzUsMTYgQEAKIAkJICAgICBzdHJ1Y3QgaWJfbWFkX3JlY3Zfd2MgKnJlY3Zfd2MpCiB7CiAJc3RydWN0IGliX21hZF9zZW5kX2J1ZiAqbXNnOwotCWludCByZXQ7CisJaW50IHJldCwgaGRyX2xlbjsKIAorCWhkcl9sZW4gPSBkYXRhX29mZnNldChyZWN2X3djLT5yZWN2X2J1Zi5tYWQtPm1hZF9oZHIubWdtdF9jbGFzcyk7CiAJbXNnID0gaWJfY3JlYXRlX3NlbmRfbWFkKCZybXBwX3JlY3YtPmFnZW50LT5hZ2VudCwgcmVjdl93Yy0+d2MtPnNyY19xcCwKLQkJCQkgcmVjdl93Yy0+d2MtPnBrZXlfaW5kZXgsIDEsIElCX01HTVRfUk1QUF9IRFIsCi0JCQkJIElCX01HTVRfUk1QUF9EQVRBLCBHRlBfS0VSTkVMKTsKKwkJCQkgcmVjdl93Yy0+d2MtPnBrZXlfaW5kZXgsIDEsIGhkcl9sZW4sCisJCQkJIDAsIEdGUF9LRVJORUwpOwogCWlmICghbXNnKQogCQlyZXR1cm47CiAKLQlmb3JtYXRfYWNrKG1zZy0+bWFkLCAoc3RydWN0IGliX3JtcHBfbWFkICopIHJlY3Zfd2MtPnJlY3ZfYnVmLm1hZCwKLQkJICAgcm1wcF9yZWN2KTsKKwlmb3JtYXRfYWNrKG1zZywgKHN0cnVjdCBpYl9ybXBwX21hZCAqKSByZWN2X3djLT5yZWN2X2J1Zi5tYWQsIHJtcHBfcmVjdik7CiAJbXNnLT5haCA9IHJtcHBfcmVjdi0+YWg7CiAJcmV0ID0gaWJfcG9zdF9zZW5kX21hZChtc2csIE5VTEwpOwogCWlmIChyZXQpCkBAIC0xNTYsMTYgKzE1NiwxNyBAQAogewogCXN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKm1zZzsKIAlzdHJ1Y3QgaWJfYWggKmFoOworCWludCBoZHJfbGVuOwogCiAJYWggPSBpYl9jcmVhdGVfYWhfZnJvbV93YyhhZ2VudC0+cXAtPnBkLCByZWN2X3djLT53YywKIAkJCQkgIHJlY3Zfd2MtPnJlY3ZfYnVmLmdyaCwgYWdlbnQtPnBvcnRfbnVtKTsKIAlpZiAoSVNfRVJSKGFoKSkKIAkJcmV0dXJuICh2b2lkICopIGFoOwogCisJaGRyX2xlbiA9IGRhdGFfb2Zmc2V0KHJlY3Zfd2MtPnJlY3ZfYnVmLm1hZC0+bWFkX2hkci5tZ210X2NsYXNzKTsKIAltc2cgPSBpYl9jcmVhdGVfc2VuZF9tYWQoYWdlbnQsIHJlY3Zfd2MtPndjLT5zcmNfcXAsCiAJCQkJIHJlY3Zfd2MtPndjLT5wa2V5X2luZGV4LCAxLAotCQkJCSBJQl9NR01UX1JNUFBfSERSLCBJQl9NR01UX1JNUFBfREFUQSwKLQkJCQkgR0ZQX0tFUk5FTCk7CisJCQkJIGhkcl9sZW4sIDAsIEdGUF9LRVJORUwpOwogCWlmIChJU19FUlIobXNnKSkKIAkJaWJfZGVzdHJveV9haChhaCk7CiAJZWxzZQpAQCAtMTk1LDggKzE5Niw3IEBACiAJCXJldHVybjsKIAogCXJtcHBfbWFkID0gbXNnLT5tYWQ7Ci0JbWVtY3B5KHJtcHBfbWFkLCByZWN2X3djLT5yZWN2X2J1Zi5tYWQsCi0JICAgICAgIGRhdGFfb2Zmc2V0KHJlY3Zfd2MtPnJlY3ZfYnVmLm1hZC0+bWFkX2hkci5tZ210X2NsYXNzKSk7CisJbWVtY3B5KHJtcHBfbWFkLCByZWN2X3djLT5yZWN2X2J1Zi5tYWQsIG1zZy0+aGRyX2xlbik7CiAKIAlybXBwX21hZC0+bWFkX2hkci5tZXRob2QgXj0gSUJfTUdNVF9NRVRIT0RfUkVTUDsKIAlybXBwX21hZC0+cm1wcF9oZHIucm1wcF92ZXJzaW9uID0gSUJfTUdNVF9STVBQX1ZFUlNJT047CkBAIC00MzMsNDQgKzQzMyw2IEBACiAJcmV0dXJuIHJtcHBfd2M7CiB9CiAKLXZvaWQgaWJfY29hbGVzY2VfcmVjdl9tYWQoc3RydWN0IGliX21hZF9yZWN2X3djICptYWRfcmVjdl93Yywgdm9pZCAqYnVmKQotewotCXN0cnVjdCBpYl9tYWRfcmVjdl9idWYgKnNlZ19idWY7Ci0Jc3RydWN0IGliX3JtcHBfbWFkICpybXBwX21hZDsKLQl2b2lkICpkYXRhOwotCWludCBzaXplLCBsZW4sIG9mZnNldDsKLQl1OCBmbGFnczsKLQotCWxlbiA9IG1hZF9yZWN2X3djLT5tYWRfbGVuOwotCWlmIChsZW4gPD0gc2l6ZW9mKHN0cnVjdCBpYl9tYWQpKSB7Ci0JCW1lbWNweShidWYsIG1hZF9yZWN2X3djLT5yZWN2X2J1Zi5tYWQsIGxlbik7Ci0JCXJldHVybjsKLQl9Ci0KLQlvZmZzZXQgPSBkYXRhX29mZnNldChtYWRfcmVjdl93Yy0+cmVjdl9idWYubWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZWdfYnVmLCAmbWFkX3JlY3Zfd2MtPnJtcHBfbGlzdCwgbGlzdCkgewotCQlybXBwX21hZCA9IChzdHJ1Y3QgaWJfcm1wcF9tYWQgKilzZWdfYnVmLT5tYWQ7Ci0JCWZsYWdzID0gaWJfZ2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkcik7Ci0KLQkJaWYgKGZsYWdzICYgSUJfTUdNVF9STVBQX0ZMQUdfRklSU1QpIHsKLQkJCWRhdGEgPSBybXBwX21hZDsKLQkJCXNpemUgPSBzaXplb2YoKnJtcHBfbWFkKTsKLQkJfSBlbHNlIHsKLQkJCWRhdGEgPSAodm9pZCAqKSBybXBwX21hZCArIG9mZnNldDsKLQkJCWlmIChmbGFncyAmIElCX01HTVRfUk1QUF9GTEFHX0xBU1QpCi0JCQkJc2l6ZSA9IGxlbjsKLQkJCWVsc2UKLQkJCQlzaXplID0gc2l6ZW9mKCpybXBwX21hZCkgLSBvZmZzZXQ7Ci0JCX0KLQotCQltZW1jcHkoYnVmLCBkYXRhLCBzaXplKTsKLQkJbGVuIC09IHNpemU7Ci0JCWJ1ZiArPSBzaXplOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woaWJfY29hbGVzY2VfcmVjdl9tYWQpOwotCiBzdGF0aWMgc3RydWN0IGliX21hZF9yZWN2X3djICoKIGNvbnRpbnVlX3JtcHAoc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICphZ2VudCwKIAkgICAgICBzdHJ1Y3QgaWJfbWFkX3JlY3Zfd2MgKm1hZF9yZWN2X3djKQpAQCAtNTcwLDUwICs1MzIsMzMgQEAKIAlyZXR1cm4gbWFkX3JlY3Zfd2M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IGdldF9zZWdfYWRkcihzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqbWFkX3NlbmRfd3IpCi17Ci0JcmV0dXJuIG1hZF9zZW5kX3dyLT5zZ19saXN0WzBdLmFkZHIgKyBtYWRfc2VuZF93ci0+ZGF0YV9vZmZzZXQgKwotCSAgICAgICAoc2l6ZW9mKHN0cnVjdCBpYl9ybXBwX21hZCkgLSBtYWRfc2VuZF93ci0+ZGF0YV9vZmZzZXQpICoKLQkgICAgICAgKG1hZF9zZW5kX3dyLT5zZWdfbnVtIC0gMSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2VuZF9uZXh0X3NlZyhzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqbWFkX3NlbmRfd3IpCiB7CiAJc3RydWN0IGliX3JtcHBfbWFkICpybXBwX21hZDsKIAlpbnQgdGltZW91dDsKLQl1MzIgcGF5bGVuOworCXUzMiBwYXlsZW4gPSAwOwogCiAJcm1wcF9tYWQgPSBtYWRfc2VuZF93ci0+c2VuZF9idWYubWFkOwogCWliX3NldF9ybXBwX2ZsYWdzKCZybXBwX21hZC0+cm1wcF9oZHIsIElCX01HTVRfUk1QUF9GTEFHX0FDVElWRSk7Ci0Jcm1wcF9tYWQtPnJtcHBfaGRyLnNlZ19udW0gPSBjcHVfdG9fYmUzMihtYWRfc2VuZF93ci0+c2VnX251bSk7CisJcm1wcF9tYWQtPnJtcHBfaGRyLnNlZ19udW0gPSBjcHVfdG9fYmUzMigrK21hZF9zZW5kX3dyLT5zZWdfbnVtKTsKIAogCWlmIChtYWRfc2VuZF93ci0+c2VnX251bSA9PSAxKSB7CiAJCXJtcHBfbWFkLT5ybXBwX2hkci5ybXBwX3J0aW1lX2ZsYWdzIHw9IElCX01HTVRfUk1QUF9GTEFHX0ZJUlNUOwotCQlwYXlsZW4gPSBtYWRfc2VuZF93ci0+dG90YWxfc2VnICogSUJfTUdNVF9STVBQX0RBVEEgLQorCQlwYXlsZW4gPSBtYWRfc2VuZF93ci0+c2VuZF9idWYuc2VnX2NvdW50ICogSUJfTUdNVF9STVBQX0RBVEEgLQogCQkJIG1hZF9zZW5kX3dyLT5wYWQ7Ci0JCXJtcHBfbWFkLT5ybXBwX2hkci5wYXlsZW5fbmV3d2luID0gY3B1X3RvX2JlMzIocGF5bGVuKTsKLQkJbWFkX3NlbmRfd3ItPnNnX2xpc3RbMF0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpYl9ybXBwX21hZCk7Ci0JfSBlbHNlIHsKLQkJbWFkX3NlbmRfd3ItPnNlbmRfd3IubnVtX3NnZSA9IDI7Ci0JCW1hZF9zZW5kX3dyLT5zZ19saXN0WzBdLmxlbmd0aCA9IG1hZF9zZW5kX3dyLT5kYXRhX29mZnNldDsKLQkJbWFkX3NlbmRfd3ItPnNnX2xpc3RbMV0uYWRkciA9IGdldF9zZWdfYWRkcihtYWRfc2VuZF93cik7Ci0JCW1hZF9zZW5kX3dyLT5zZ19saXN0WzFdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaWJfcm1wcF9tYWQpIC0KLQkJCQkJCSBtYWRfc2VuZF93ci0+ZGF0YV9vZmZzZXQ7Ci0JCW1hZF9zZW5kX3dyLT5zZ19saXN0WzFdLmxrZXkgPSBtYWRfc2VuZF93ci0+c2dfbGlzdFswXS5sa2V5OwotCQlybXBwX21hZC0+cm1wcF9oZHIucGF5bGVuX25ld3dpbiA9IDA7CiAJfQogCi0JaWYgKG1hZF9zZW5kX3dyLT5zZWdfbnVtID09IG1hZF9zZW5kX3dyLT50b3RhbF9zZWcpIHsKKwlpZiAobWFkX3NlbmRfd3ItPnNlZ19udW0gPT0gbWFkX3NlbmRfd3ItPnNlbmRfYnVmLnNlZ19jb3VudCkgewogCQlybXBwX21hZC0+cm1wcF9oZHIucm1wcF9ydGltZV9mbGFncyB8PSBJQl9NR01UX1JNUFBfRkxBR19MQVNUOwogCQlwYXlsZW4gPSBJQl9NR01UX1JNUFBfREFUQSAtIG1hZF9zZW5kX3dyLT5wYWQ7Ci0JCXJtcHBfbWFkLT5ybXBwX2hkci5wYXlsZW5fbmV3d2luID0gY3B1X3RvX2JlMzIocGF5bGVuKTsKIAl9CisJcm1wcF9tYWQtPnJtcHBfaGRyLnBheWxlbl9uZXd3aW4gPSBjcHVfdG9fYmUzMihwYXlsZW4pOwogCiAJLyogMiBzZWNvbmRzIGZvciBhbiBBQ0sgdW50aWwgd2UgY2FuIGZpbmQgdGhlIHBhY2tldCBsaWZldGltZSAqLwogCXRpbWVvdXQgPSBtYWRfc2VuZF93ci0+c2VuZF9idWYudGltZW91dF9tczsKIAlpZiAoIXRpbWVvdXQgfHwgdGltZW91dCA+IDIwMDApCiAJCW1hZF9zZW5kX3dyLT50aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyMDAwKTsKLQltYWRfc2VuZF93ci0+c2VnX251bSsrOworCiAJcmV0dXJuIGliX3NlbmRfbWFkKG1hZF9zZW5kX3dyKTsKIH0KIApAQCAtNjI5LDcgKzU3NCw3IEBACiAJaWYgKCFtYWRfc2VuZF93cikKIAkJZ290byBvdXQ7CS8qIFVubWF0Y2hlZCBzZW5kICovCiAKLQlpZiAoKG1hZF9zZW5kX3dyLT5sYXN0X2FjayA9PSBtYWRfc2VuZF93ci0+dG90YWxfc2VnKSB8fAorCWlmICgobWFkX3NlbmRfd3ItPmxhc3RfYWNrID09IG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5zZWdfY291bnQpIHx8CiAJICAgICghbWFkX3NlbmRfd3ItPnRpbWVvdXQpIHx8IChtYWRfc2VuZF93ci0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpKQogCQlnb3RvIG91dDsJLyogU2VuZCBpcyBhbHJlYWR5IGRvbmUgKi8KIApAQCAtNjQ1LDYgKzU5MCwxOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFnZW50LT5sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfbGFzdF9hY2soc3RydWN0IGliX21hZF9zZW5kX3dyX3ByaXZhdGUgKndyLAorCQkJCSAgIGludCBzZWdfbnVtKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwl3ci0+bGFzdF9hY2sgPSBzZWdfbnVtOworCWxpc3QgPSAmd3ItPmxhc3RfYWNrX3NlZy0+bGlzdDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdyLT5sYXN0X2Fja19zZWcsIGxpc3QsIGxpc3QpCisJCWlmICh3ci0+bGFzdF9hY2tfc2VnLT5udW0gPT0gc2VnX251bSkKKwkJCWJyZWFrOworfQorCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3JtcHBfYWNrKHN0cnVjdCBpYl9tYWRfYWdlbnRfcHJpdmF0ZSAqYWdlbnQsCiAJCQkgICAgIHN0cnVjdCBpYl9tYWRfcmVjdl93YyAqbWFkX3JlY3Zfd2MpCiB7CkBAIC02NzUsMTEgKzYzMiwxMiBAQAogCWlmICghbWFkX3NlbmRfd3IpCiAJCWdvdG8gb3V0OwkvKiBVbm1hdGNoZWQgQUNLICovCiAKLQlpZiAoKG1hZF9zZW5kX3dyLT5sYXN0X2FjayA9PSBtYWRfc2VuZF93ci0+dG90YWxfc2VnKSB8fAorCWlmICgobWFkX3NlbmRfd3ItPmxhc3RfYWNrID09IG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5zZWdfY291bnQpIHx8CiAJICAgICghbWFkX3NlbmRfd3ItPnRpbWVvdXQpIHx8IChtYWRfc2VuZF93ci0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpKQogCQlnb3RvIG91dDsJLyogU2VuZCBpcyBhbHJlYWR5IGRvbmUgKi8KIAotCWlmIChzZWdfbnVtID4gbWFkX3NlbmRfd3ItPnRvdGFsX3NlZyB8fCBzZWdfbnVtID4gbWFkX3NlbmRfd3ItPm5ld3dpbikgeworCWlmIChzZWdfbnVtID4gbWFkX3NlbmRfd3ItPnNlbmRfYnVmLnNlZ19jb3VudCB8fAorCSAgICBzZWdfbnVtID4gbWFkX3NlbmRfd3ItPm5ld3dpbikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZ2VudC0+bG9jaywgZmxhZ3MpOwogCQlhYm9ydF9zZW5kKGFnZW50LCBybXBwX21hZC0+bWFkX2hkci50aWQsCiAJCQkgICBJQl9NR01UX1JNUFBfU1RBVFVTX1MyQik7CkBAIC02OTEsMTEgKzY0OSwxMSBAQAogCQlnb3RvIG91dDsJLyogT2xkIEFDSyAqLwogCiAJaWYgKHNlZ19udW0gPiBtYWRfc2VuZF93ci0+bGFzdF9hY2spIHsKLQkJbWFkX3NlbmRfd3ItPmxhc3RfYWNrID0gc2VnX251bTsKKwkJYWRqdXN0X2xhc3RfYWNrKG1hZF9zZW5kX3dyLCBzZWdfbnVtKTsKIAkJbWFkX3NlbmRfd3ItPnJldHJpZXMgPSBtYWRfc2VuZF93ci0+c2VuZF9idWYucmV0cmllczsKIAl9CiAJbWFkX3NlbmRfd3ItPm5ld3dpbiA9IG5ld3dpbjsKLQlpZiAobWFkX3NlbmRfd3ItPmxhc3RfYWNrID09IG1hZF9zZW5kX3dyLT50b3RhbF9zZWcpIHsKKwlpZiAobWFkX3NlbmRfd3ItPmxhc3RfYWNrID09IG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5zZWdfY291bnQpIHsKIAkJLyogSWYgbm8gcmVzcG9uc2UgaXMgZXhwZWN0ZWQsIHRoZSBBQ0sgY29tcGxldGVzIHRoZSBzZW5kICovCiAJCWlmICghbWFkX3NlbmRfd3ItPnNlbmRfYnVmLnRpbWVvdXRfbXMpIHsKIAkJCXN0cnVjdCBpYl9tYWRfc2VuZF93YyB3YzsKQEAgLTcxNCw3ICs2NzIsNyBAQAogCQkJCQkgICAgIG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi50aW1lb3V0X21zKTsKIAl9IGVsc2UgaWYgKG1hZF9zZW5kX3dyLT5yZWZjb3VudCA9PSAxICYmCiAJCSAgIG1hZF9zZW5kX3dyLT5zZWdfbnVtIDwgbWFkX3NlbmRfd3ItPm5ld3dpbiAmJgotCQkgICBtYWRfc2VuZF93ci0+c2VnX251bSA8PSBtYWRfc2VuZF93ci0+dG90YWxfc2VnKSB7CisJCSAgIG1hZF9zZW5kX3dyLT5zZWdfbnVtIDwgbWFkX3NlbmRfd3ItPnNlbmRfYnVmLnNlZ19jb3VudCkgewogCQkvKiBTZW5kIGZhaWx1cmUgd2lsbCBqdXN0IHJlc3VsdCBpbiBhIHRpbWVvdXQvcmV0cnkgKi8KIAkJcmV0ID0gc2VuZF9uZXh0X3NlZyhtYWRfc2VuZF93cik7CiAJCWlmIChyZXQpCkBAIC04MzgsMzEgKzc5NiwxOSBAQAogaW50IGliX3NlbmRfcm1wcF9tYWQoc3RydWN0IGliX21hZF9zZW5kX3dyX3ByaXZhdGUgKm1hZF9zZW5kX3dyKQogewogCXN0cnVjdCBpYl9ybXBwX21hZCAqcm1wcF9tYWQ7Ci0JaW50IGksIHRvdGFsX2xlbiwgcmV0OworCWludCByZXQ7CiAKIAlybXBwX21hZCA9IG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5tYWQ7CiAJaWYgKCEoaWJfZ2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkcikgJgogCSAgICAgIElCX01HTVRfUk1QUF9GTEFHX0FDVElWRSkpCiAJCXJldHVybiBJQl9STVBQX1JFU1VMVF9VTkhBTkRMRUQ7CiAKLQlpZiAocm1wcF9tYWQtPnJtcHBfaGRyLnJtcHBfdHlwZSAhPSBJQl9NR01UX1JNUFBfVFlQRV9EQVRBKQorCWlmIChybXBwX21hZC0+cm1wcF9oZHIucm1wcF90eXBlICE9IElCX01HTVRfUk1QUF9UWVBFX0RBVEEpIHsKKwkJbWFkX3NlbmRfd3ItPnNlZ19udW0gPSAxOwogCQlyZXR1cm4gSUJfUk1QUF9SRVNVTFRfSU5URVJOQUw7CisJfQogCi0JaWYgKG1hZF9zZW5kX3dyLT5zZW5kX3dyLm51bV9zZ2UgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsJCS8qIFRPRE86IHN1cHBvcnQgbnVtX3NnZSA+IDEgKi8KLQotCW1hZF9zZW5kX3dyLT5zZWdfbnVtID0gMTsKIAltYWRfc2VuZF93ci0+bmV3d2luID0gMTsKLQltYWRfc2VuZF93ci0+ZGF0YV9vZmZzZXQgPSBkYXRhX29mZnNldChybXBwX21hZC0+bWFkX2hkci5tZ210X2NsYXNzKTsKLQotCXRvdGFsX2xlbiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG1hZF9zZW5kX3dyLT5zZW5kX3dyLm51bV9zZ2U7IGkrKykKLQkJdG90YWxfbGVuICs9IG1hZF9zZW5kX3dyLT5zZW5kX3dyLnNnX2xpc3RbaV0ubGVuZ3RoOwotCi0gICAgICAgIG1hZF9zZW5kX3dyLT50b3RhbF9zZWcgPSAodG90YWxfbGVuIC0gbWFkX3NlbmRfd3ItPmRhdGFfb2Zmc2V0KSAvCi0JCQkoc2l6ZW9mKHN0cnVjdCBpYl9ybXBwX21hZCkgLSBtYWRfc2VuZF93ci0+ZGF0YV9vZmZzZXQpOwotCW1hZF9zZW5kX3dyLT5wYWQgPSB0b3RhbF9sZW4gLSBJQl9NR01UX1JNUFBfSERSIC0KLQkJCSAgIGJlMzJfdG9fY3B1KHJtcHBfbWFkLT5ybXBwX2hkci5wYXlsZW5fbmV3d2luKTsKIAogCS8qIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGZpbmFsIEFDSyBldmVuIGlmIHRoZXJlIGlzbid0IGEgcmVzcG9uc2UgKi8KIAltYWRfc2VuZF93ci0+cmVmY291bnQgKz0gKG1hZF9zZW5kX3dyLT50aW1lb3V0ID09IDApOwpAQCAtODkzLDE0ICs4MzksMTQgQEAKIAlpZiAoIW1hZF9zZW5kX3dyLT50aW1lb3V0KQogCQlyZXR1cm4gSUJfUk1QUF9SRVNVTFRfUFJPQ0VTU0VEOyAvKiBSZXNwb25zZSByZWNlaXZlZCAqLwogCi0JaWYgKG1hZF9zZW5kX3dyLT5sYXN0X2FjayA9PSBtYWRfc2VuZF93ci0+dG90YWxfc2VnKSB7CisJaWYgKG1hZF9zZW5kX3dyLT5sYXN0X2FjayA9PSBtYWRfc2VuZF93ci0+c2VuZF9idWYuc2VnX2NvdW50KSB7CiAJCW1hZF9zZW5kX3dyLT50aW1lb3V0ID0KIAkJCW1zZWNzX3RvX2ppZmZpZXMobWFkX3NlbmRfd3ItPnNlbmRfYnVmLnRpbWVvdXRfbXMpOwogCQlyZXR1cm4gSUJfUk1QUF9SRVNVTFRfUFJPQ0VTU0VEOyAvKiBTZW5kIGRvbmUgKi8KIAl9CiAKLQlpZiAobWFkX3NlbmRfd3ItPnNlZ19udW0gPiBtYWRfc2VuZF93ci0+bmV3d2luIHx8Ci0JICAgIG1hZF9zZW5kX3dyLT5zZWdfbnVtID4gbWFkX3NlbmRfd3ItPnRvdGFsX3NlZykKKwlpZiAobWFkX3NlbmRfd3ItPnNlZ19udW0gPT0gbWFkX3NlbmRfd3ItPm5ld3dpbiB8fAorCSAgICBtYWRfc2VuZF93ci0+c2VnX251bSA9PSBtYWRfc2VuZF93ci0+c2VuZF9idWYuc2VnX2NvdW50KQogCQlyZXR1cm4gSUJfUk1QUF9SRVNVTFRfUFJPQ0VTU0VEOyAvKiBXYWl0IGZvciBBQ0sgKi8KIAogCXJldCA9IHNlbmRfbmV4dF9zZWcobWFkX3NlbmRfd3IpOwpAQCAtOTIxLDEwICs4NjcsMTIgQEAKIAkgICAgICBJQl9NR01UX1JNUFBfRkxBR19BQ1RJVkUpKQogCQlyZXR1cm4gSUJfUk1QUF9SRVNVTFRfVU5IQU5ETEVEOyAvKiBSTVBQIG5vdCBhY3RpdmUgKi8KIAotCWlmIChtYWRfc2VuZF93ci0+bGFzdF9hY2sgPT0gbWFkX3NlbmRfd3ItPnRvdGFsX3NlZykKKwlpZiAobWFkX3NlbmRfd3ItPmxhc3RfYWNrID09IG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5zZWdfY291bnQpCiAJCXJldHVybiBJQl9STVBQX1JFU1VMVF9QUk9DRVNTRUQ7CiAKLQltYWRfc2VuZF93ci0+c2VnX251bSA9IG1hZF9zZW5kX3dyLT5sYXN0X2FjayArIDE7CisJbWFkX3NlbmRfd3ItPnNlZ19udW0gPSBtYWRfc2VuZF93ci0+bGFzdF9hY2s7CisJbWFkX3NlbmRfd3ItPmN1cl9zZWcgPSBtYWRfc2VuZF93ci0+bGFzdF9hY2tfc2VnOworCiAJcmV0ID0gc2VuZF9uZXh0X3NlZyhtYWRfc2VuZF93cik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIElCX1JNUFBfUkVTVUxUX1BST0NFU1NFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NtaS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc21pLmgKaW5kZXggMmIzYzQwMS4uMzAxMWJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc21pLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc21pLmgKQEAgLTQ5LDE5ICs0OSwxNiBAQAogZXh0ZXJuIGludCBzbWlfaGFuZGxlX2RyX3NtcF9zZW5kKHN0cnVjdCBpYl9zbXAgKnNtcCwKIAkJCQkgIHU4IG5vZGVfdHlwZSwKIAkJCQkgIGludCBwb3J0X251bSk7Ci1leHRlcm4gaW50IHNtaV9jaGVja19sb2NhbF9kcl9zbXAoc3RydWN0IGliX3NtcCAqc21wLAotCQkJCSAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAotCQkJCSAgaW50IHBvcnRfbnVtKTsKIAogLyoKICAqIFJldHVybiAxIGlmIHRoZSBTTVAgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGxvY2FsIFNNQS9TTSB2aWEgcHJvY2Vzc19tYWQKICAqLwotc3RhdGljIGlubGluZSBpbnQgc21pX2NoZWNrX2xvY2FsX3NtcChzdHJ1Y3QgaWJfbWFkX2FnZW50ICptYWRfYWdlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgIHN0cnVjdCBpYl9zbXAgKnNtcCkKK3N0YXRpYyBpbmxpbmUgaW50IHNtaV9jaGVja19sb2NhbF9zbXAoc3RydWN0IGliX3NtcCAqc21wLAorCQkJCSAgICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIHsKIAkvKiBDMTQtOTozIC0tIFdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIERSIHNlZ21lbnQgb2YgcGF0aCAqLwogCS8qIEMxNC05OjQgLS0gSG9wIFBvaW50ZXIgPSBIb3AgQ291bnQgKyAxIC0+IGdpdmUgdG8gU01BL1NNICovCi0JcmV0dXJuICgobWFkX2FnZW50LT5kZXZpY2UtPnByb2Nlc3NfbWFkICYmCisJcmV0dXJuICgoZGV2aWNlLT5wcm9jZXNzX21hZCAmJgogCQkhaWJfZ2V0X3NtcF9kaXJlY3Rpb24oc21wKSAmJgogCQkoc21wLT5ob3BfcHRyID09IHNtcC0+aG9wX2NudCArIDEpKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwppbmRleCA1OTgyZDY4Li4xNTEyMWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQ6ICVzXG4iLCBhdHRyLnN0YXRlLAotCQkgICAgICAgYXR0ci5zdGF0ZSA+PSAwICYmIGF0dHIuc3RhdGUgPD0gQVJSQVlfU0laRShzdGF0ZV9uYW1lKSA/CisJCSAgICAgICBhdHRyLnN0YXRlID49IDAgJiYgYXR0ci5zdGF0ZSA8IEFSUkFZX1NJWkUoc3RhdGVfbmFtZSkgPwogCQkgICAgICAgc3RhdGVfbmFtZVthdHRyLnN0YXRlXSA6ICJVTktOT1dOIik7CiB9CiAKQEAgLTQ3Miw4ICs0NzIsMTAgQEAKIAkJCWdvdG8gZXJyOwogCiAJCWlmIChzbnByaW50ZihlbGVtZW50LT5uYW1lLCBzaXplb2YoZWxlbWVudC0+bmFtZSksCi0JCQkgICAgICIlZCIsIGkpID49IHNpemVvZihlbGVtZW50LT5uYW1lKSkKKwkJCSAgICAgIiVkIiwgaSkgPj0gc2l6ZW9mKGVsZW1lbnQtPm5hbWUpKSB7CisJCQlrZnJlZShlbGVtZW50KTsKIAkJCWdvdG8gZXJyOworCQl9CiAKIAkJZWxlbWVudC0+YXR0ci5hdHRyLm5hbWUgID0gZWxlbWVudC0+bmFtZTsKIAkJZWxlbWVudC0+YXR0ci5hdHRyLm1vZGUgID0gU19JUlVHTzsKQEAgLTYyOCwxNCArNjMwLDQyIEBACiAJCSAgICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSAmZGV2LT5ub2RlX2d1aWQpWzNdKSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfbm9kZV9kZXNjKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGliX2RldmljZSwgY2xhc3NfZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUuNjRzXG4iLCBkZXYtPm5vZGVfZGVzYyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9ub2RlX2Rlc2Moc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgaWJfZGV2aWNlLCBjbGFzc19kZXYpOworCXN0cnVjdCBpYl9kZXZpY2VfbW9kaWZ5IGRlc2MgPSB7fTsKKwlpbnQgcmV0OworCisJaWYgKCFkZXYtPm1vZGlmeV9kZXZpY2UpCisJCXJldHVybiAtRUlPOworCisJbWVtY3B5KGRlc2Mubm9kZV9kZXNjLCBidWYsIG1pbl90KGludCwgY291bnQsIDY0KSk7CisJcmV0ID0gaWJfbW9kaWZ5X2RldmljZShkZXYsIElCX0RFVklDRV9NT0RJRllfTk9ERV9ERVNDLCAmZGVzYyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG5vZGVfdHlwZSwgU19JUlVHTywgc2hvd19ub2RlX3R5cGUsIE5VTEwpOwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHN5c19pbWFnZV9ndWlkLCBTX0lSVUdPLCBzaG93X3N5c19pbWFnZV9ndWlkLCBOVUxMKTsKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihub2RlX2d1aWQsIFNfSVJVR08sIHNob3dfbm9kZV9ndWlkLCBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihub2RlX2Rlc2MsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X25vZGVfZGVzYywKKwkJCSBzZXRfbm9kZV9kZXNjKTsKIAogc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICppYl9jbGFzc19hdHRyaWJ1dGVzW10gPSB7CiAJJmNsYXNzX2RldmljZV9hdHRyX25vZGVfdHlwZSwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfc3lzX2ltYWdlX2d1aWQsCi0JJmNsYXNzX2RldmljZV9hdHRyX25vZGVfZ3VpZAorCSZjbGFzc19kZXZpY2VfYXR0cl9ub2RlX2d1aWQsCisJJmNsYXNzX2RldmljZV9hdHRyX25vZGVfZGVzYwogfTsKIAogc3RhdGljIHN0cnVjdCBjbGFzcyBpYl9jbGFzcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCmluZGV4IGM5MDhkZTguLmZiNmNkNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwpAQCAtMzEsNyArMzEsNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKgotICogJElkOiB1c2VyX21hZC5jIDQwMTAgMjAwNS0xMS0wOSAyMzoxMTo1Nlogcm9sYW5kICQKKyAqICRJZDogdXNlcl9tYWQuYyA1NTk2IDIwMDYtMDMtMDMgMDE6MDA6MDdaIHNlYW4uaGVmdHkgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEyMSw2ICsxMjEsNyBAQAogCiBzdHJ1Y3QgaWJfdW1hZF9wYWNrZXQgewogCXN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKm1zZzsKKwlzdHJ1Y3QgaWJfbWFkX3JlY3Zfd2MgICpyZWN2X3djOwogCXN0cnVjdCBsaXN0X2hlYWQgICBsaXN0OwogCWludAkJICAgbGVuZ3RoOwogCXN0cnVjdCBpYl91c2VyX21hZCBtYWQ7CkBAIC0xNzYsMzEgKzE3NywzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgZGF0YV9vZmZzZXQodTggbWdtdF9jbGFzcykKK3sKKwlpZiAobWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fQURNKQorCQlyZXR1cm4gSUJfTUdNVF9TQV9IRFI7CisJZWxzZSBpZiAoKG1nbXRfY2xhc3MgPj0gSUJfTUdNVF9DTEFTU19WRU5ET1JfUkFOR0UyX1NUQVJUKSAmJgorCQkgKG1nbXRfY2xhc3MgPD0gSUJfTUdNVF9DTEFTU19WRU5ET1JfUkFOR0UyX0VORCkpCisJCXJldHVybiBJQl9NR01UX1ZFTkRPUl9IRFI7CisJZWxzZQorCQlyZXR1cm4gSUJfTUdNVF9STVBQX0hEUjsKK30KKwogc3RhdGljIHZvaWQgc2VuZF9oYW5kbGVyKHN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50LAogCQkJIHN0cnVjdCBpYl9tYWRfc2VuZF93YyAqc2VuZF93YykKIHsKIAlzdHJ1Y3QgaWJfdW1hZF9maWxlICpmaWxlID0gYWdlbnQtPmNvbnRleHQ7Ci0Jc3RydWN0IGliX3VtYWRfcGFja2V0ICp0aW1lb3V0OwogCXN0cnVjdCBpYl91bWFkX3BhY2tldCAqcGFja2V0ID0gc2VuZF93Yy0+c2VuZF9idWYtPmNvbnRleHRbMF07CiAKIAlpYl9kZXN0cm95X2FoKHBhY2tldC0+bXNnLT5haCk7CiAJaWJfZnJlZV9zZW5kX21hZChwYWNrZXQtPm1zZyk7CiAKIAlpZiAoc2VuZF93Yy0+c3RhdHVzID09IElCX1dDX1JFU1BfVElNRU9VVF9FUlIpIHsKLQkJdGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mICp0aW1lb3V0ICsgSUJfTUdNVF9NQURfSERSLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aW1lb3V0KQotCQkJZ290byBvdXQ7Ci0KLQkJdGltZW91dC0+bGVuZ3RoIAk9IElCX01HTVRfTUFEX0hEUjsKLQkJdGltZW91dC0+bWFkLmhkci5pZCAJPSBwYWNrZXQtPm1hZC5oZHIuaWQ7Ci0JCXRpbWVvdXQtPm1hZC5oZHIuc3RhdHVzID0gRVRJTUVET1VUOwotCQltZW1jcHkodGltZW91dC0+bWFkLmRhdGEsIHBhY2tldC0+bWFkLmRhdGEsCi0JCSAgICAgICBzaXplb2YgKHN0cnVjdCBpYl9tYWRfaGRyKSk7Ci0KLQkJaWYgKHF1ZXVlX3BhY2tldChmaWxlLCBhZ2VudCwgdGltZW91dCkpCi0JCQlrZnJlZSh0aW1lb3V0KTsKKwkJcGFja2V0LT5sZW5ndGggPSBJQl9NR01UX01BRF9IRFI7CisJCXBhY2tldC0+bWFkLmhkci5zdGF0dXMgPSBFVElNRURPVVQ7CisJCWlmICghcXVldWVfcGFja2V0KGZpbGUsIGFnZW50LCBwYWNrZXQpKQorCQkJcmV0dXJuOwogCX0KLW91dDoKIAlrZnJlZShwYWNrZXQpOwogfQogCkBAIC0yMDksMjIgKzIxMSwyMCBAQAogewogCXN0cnVjdCBpYl91bWFkX2ZpbGUgKmZpbGUgPSBhZ2VudC0+Y29udGV4dDsKIAlzdHJ1Y3QgaWJfdW1hZF9wYWNrZXQgKnBhY2tldDsKLQlpbnQgbGVuZ3RoOwogCiAJaWYgKG1hZF9yZWN2X3djLT53Yy0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpCi0JCWdvdG8gb3V0OworCQlnb3RvIGVycjE7CiAKLQlsZW5ndGggPSBtYWRfcmVjdl93Yy0+bWFkX2xlbjsKLQlwYWNrZXQgPSBremFsbG9jKHNpemVvZiAqcGFja2V0ICsgbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlwYWNrZXQgPSBremFsbG9jKHNpemVvZiAqcGFja2V0LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhY2tldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyMTsKIAotCXBhY2tldC0+bGVuZ3RoID0gbGVuZ3RoOwotCi0JaWJfY29hbGVzY2VfcmVjdl9tYWQobWFkX3JlY3Zfd2MsIHBhY2tldC0+bWFkLmRhdGEpOworCXBhY2tldC0+bGVuZ3RoID0gbWFkX3JlY3Zfd2MtPm1hZF9sZW47CisJcGFja2V0LT5yZWN2X3djID0gbWFkX3JlY3Zfd2M7CiAKIAlwYWNrZXQtPm1hZC5oZHIuc3RhdHVzICAgID0gMDsKLQlwYWNrZXQtPm1hZC5oZHIubGVuZ3RoICAgID0gbGVuZ3RoICsgc2l6ZW9mIChzdHJ1Y3QgaWJfdXNlcl9tYWQpOworCXBhY2tldC0+bWFkLmhkci5sZW5ndGggICAgPSBzaXplb2YgKHN0cnVjdCBpYl91c2VyX21hZCkgKworCQkJCSAgICBtYWRfcmVjdl93Yy0+bWFkX2xlbjsKIAlwYWNrZXQtPm1hZC5oZHIucXBuIAkgID0gY3B1X3RvX2JlMzIobWFkX3JlY3Zfd2MtPndjLT5zcmNfcXApOwogCXBhY2tldC0+bWFkLmhkci5saWQgCSAgPSBjcHVfdG9fYmUxNihtYWRfcmVjdl93Yy0+d2MtPnNsaWQpOwogCXBhY2tldC0+bWFkLmhkci5zbCAgCSAgPSBtYWRfcmVjdl93Yy0+d2MtPnNsOwpAQCAtMjQwLDEyICsyNDAsNzkgQEAKIAl9CiAKIAlpZiAocXVldWVfcGFja2V0KGZpbGUsIGFnZW50LCBwYWNrZXQpKQotCQlrZnJlZShwYWNrZXQpOworCQlnb3RvIGVycjI7CisJcmV0dXJuOwogCi1vdXQ6CitlcnIyOgorCWtmcmVlKHBhY2tldCk7CitlcnIxOgogCWliX2ZyZWVfcmVjdl9tYWQobWFkX3JlY3Zfd2MpOwogfQogCitzdGF0aWMgc3NpemVfdCBjb3B5X3JlY3ZfbWFkKGNoYXIgX191c2VyICpidWYsIHN0cnVjdCBpYl91bWFkX3BhY2tldCAqcGFja2V0LAorCQkJICAgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGliX21hZF9yZWN2X2J1ZiAqcmVjdl9idWY7CisJaW50IGxlZnQsIHNlZ19wYXlsb2FkLCBvZmZzZXQsIG1heF9zZWdfcGF5bG9hZDsKKworCS8qIFdlIG5lZWQgZW5vdWdoIHJvb20gdG8gY29weSB0aGUgZmlyc3QgKG9yIG9ubHkpIE1BRCBzZWdtZW50LiAqLworCXJlY3ZfYnVmID0gJnBhY2tldC0+cmVjdl93Yy0+cmVjdl9idWY7CisJaWYgKChwYWNrZXQtPmxlbmd0aCA8PSBzaXplb2YgKCpyZWN2X2J1Zi0+bWFkKSAmJgorCSAgICAgY291bnQgPCBzaXplb2YgKHBhY2tldC0+bWFkKSArIHBhY2tldC0+bGVuZ3RoKSB8fAorCSAgICAocGFja2V0LT5sZW5ndGggPiBzaXplb2YgKCpyZWN2X2J1Zi0+bWFkKSAmJgorCSAgICAgY291bnQgPCBzaXplb2YgKHBhY2tldC0+bWFkKSArIHNpemVvZiAoKnJlY3ZfYnVmLT5tYWQpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgJnBhY2tldC0+bWFkLCBzaXplb2YgKHBhY2tldC0+bWFkKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmICs9IHNpemVvZiAocGFja2V0LT5tYWQpOworCXNlZ19wYXlsb2FkID0gbWluX3QoaW50LCBwYWNrZXQtPmxlbmd0aCwgc2l6ZW9mICgqcmVjdl9idWYtPm1hZCkpOworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCByZWN2X2J1Zi0+bWFkLCBzZWdfcGF5bG9hZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHNlZ19wYXlsb2FkIDwgcGFja2V0LT5sZW5ndGgpIHsKKwkJLyoKKwkJICogTXVsdGlwYWNrZXQgUk1QUCBNQUQgbWVzc2FnZS4gQ29weSByZW1haW5kZXIgb2YgbWVzc2FnZS4KKwkJICogTm90ZSB0aGF0IGxhc3Qgc2VnbWVudCBtYXkgaGF2ZSBhIHNob3J0ZXIgcGF5bG9hZC4KKwkJICovCisJCWlmIChjb3VudCA8IHNpemVvZiAocGFja2V0LT5tYWQpICsgcGFja2V0LT5sZW5ndGgpIHsKKwkJCS8qCisJCQkgKiBUaGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgcmV0dXJuIHRoZSBmaXJzdCBSTVBQIHNlZ21lbnQsCisJCQkgKiB3aGljaCBpbmNsdWRlcyB0aGUgUk1QUCBtZXNzYWdlIGxlbmd0aC4KKwkJCSAqLworCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0KKwkJb2Zmc2V0ID0gZGF0YV9vZmZzZXQocmVjdl9idWYtPm1hZC0+bWFkX2hkci5tZ210X2NsYXNzKTsKKwkJbWF4X3NlZ19wYXlsb2FkID0gc2l6ZW9mIChzdHJ1Y3QgaWJfbWFkKSAtIG9mZnNldDsKKworCQlmb3IgKGxlZnQgPSBwYWNrZXQtPmxlbmd0aCAtIHNlZ19wYXlsb2FkLCBidWYgKz0gc2VnX3BheWxvYWQ7CisJCSAgICAgbGVmdDsgbGVmdCAtPSBzZWdfcGF5bG9hZCwgYnVmICs9IHNlZ19wYXlsb2FkKSB7CisJCQlyZWN2X2J1ZiA9IGNvbnRhaW5lcl9vZihyZWN2X2J1Zi0+bGlzdC5uZXh0LAorCQkJCQkJc3RydWN0IGliX21hZF9yZWN2X2J1ZiwgbGlzdCk7CisJCQlzZWdfcGF5bG9hZCA9IG1pbihsZWZ0LCBtYXhfc2VnX3BheWxvYWQpOworCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsICgodm9pZCAqKSByZWN2X2J1Zi0+bWFkKSArIG9mZnNldCwKKwkJCQkJIHNlZ19wYXlsb2FkKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKwlyZXR1cm4gc2l6ZW9mIChwYWNrZXQtPm1hZCkgKyBwYWNrZXQtPmxlbmd0aDsKK30KKworc3RhdGljIHNzaXplX3QgY29weV9zZW5kX21hZChjaGFyIF9fdXNlciAqYnVmLCBzdHJ1Y3QgaWJfdW1hZF9wYWNrZXQgKnBhY2tldCwKKwkJCSAgICAgc2l6ZV90IGNvdW50KQoreworCXNzaXplX3Qgc2l6ZSA9IHNpemVvZiAocGFja2V0LT5tYWQpICsgcGFja2V0LT5sZW5ndGg7CisKKwlpZiAoY291bnQgPCBzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmcGFja2V0LT5tYWQsIHNpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBzaXplOworfQorCiBzdGF0aWMgc3NpemVfdCBpYl91bWFkX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKQEAgLTI1Myw3ICszMjAsNyBAQAogCXN0cnVjdCBpYl91bWFkX3BhY2tldCAqcGFja2V0OwogCXNzaXplX3QgcmV0OwogCi0JaWYgKGNvdW50IDwgc2l6ZW9mIChzdHJ1Y3QgaWJfdXNlcl9tYWQpICsgc2l6ZW9mIChzdHJ1Y3QgaWJfbWFkKSkKKwlpZiAoY291bnQgPCBzaXplb2YgKHN0cnVjdCBpYl91c2VyX21hZCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycSgmZmlsZS0+cmVjdl9sb2NrKTsKQEAgLTI3NiwyOCArMzQzLDQ0IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmZpbGUtPnJlY3ZfbG9jayk7CiAKLQlpZiAoY291bnQgPCBwYWNrZXQtPmxlbmd0aCArIHNpemVvZiAoc3RydWN0IGliX3VzZXJfbWFkKSkgewotCQkvKiBSZXR1cm4gbGVuZ3RoIG5lZWRlZCAoYW5kIGZpcnN0IFJNUFAgc2VnbWVudCkgaWYgdG9vIHNtYWxsICovCi0JCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmcGFja2V0LT5tYWQsCi0JCQkJIHNpemVvZiAoc3RydWN0IGliX3VzZXJfbWFkKSArIHNpemVvZiAoc3RydWN0IGliX21hZCkpKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0ID0gLUVOT1NQQzsKLQl9IGVsc2UgaWYgKGNvcHlfdG9fdXNlcihidWYsICZwYWNrZXQtPm1hZCwKLQkJCQlwYWNrZXQtPmxlbmd0aCArIHNpemVvZiAoc3RydWN0IGliX3VzZXJfbWFkKSkpCi0JCXJldCA9IC1FRkFVTFQ7CisJaWYgKHBhY2tldC0+cmVjdl93YykKKwkJcmV0ID0gY29weV9yZWN2X21hZChidWYsIHBhY2tldCwgY291bnQpOwogCWVsc2UKLQkJcmV0ID0gcGFja2V0LT5sZW5ndGggKyBzaXplb2YgKHN0cnVjdCBpYl91c2VyX21hZCk7CisJCXJldCA9IGNvcHlfc2VuZF9tYWQoYnVmLCBwYWNrZXQsIGNvdW50KTsKKwogCWlmIChyZXQgPCAwKSB7CiAJCS8qIFJlcXVldWUgcGFja2V0ICovCiAJCXNwaW5fbG9ja19pcnEoJmZpbGUtPnJlY3ZfbG9jayk7CiAJCWxpc3RfYWRkKCZwYWNrZXQtPmxpc3QsICZmaWxlLT5yZWN2X2xpc3QpOwogCQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnJlY3ZfbG9jayk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJaWYgKHBhY2tldC0+cmVjdl93YykKKwkJCWliX2ZyZWVfcmVjdl9tYWQocGFja2V0LT5yZWN2X3djKTsKIAkJa2ZyZWUocGFja2V0KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBjb3B5X3JtcHBfbWFkKHN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKm1zZywgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZikKK3sKKwlpbnQgbGVmdCwgc2VnOworCisJLyogQ29weSBjbGFzcyBzcGVjaWZpYyBoZWFkZXIgKi8KKwlpZiAoKG1zZy0+aGRyX2xlbiA+IElCX01HTVRfUk1QUF9IRFIpICYmCisJICAgIGNvcHlfZnJvbV91c2VyKG1zZy0+bWFkICsgSUJfTUdNVF9STVBQX0hEUiwgYnVmICsgSUJfTUdNVF9STVBQX0hEUiwKKwkJCSAgIG1zZy0+aGRyX2xlbiAtIElCX01HTVRfUk1QUF9IRFIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIEFsbCBoZWFkZXJzIGFyZSBpbiBwbGFjZS4gIENvcHkgZGF0YSBzZWdtZW50cy4gKi8KKwlmb3IgKHNlZyA9IDEsIGxlZnQgPSBtc2ctPmRhdGFfbGVuLCBidWYgKz0gbXNnLT5oZHJfbGVuOyBsZWZ0ID4gMDsKKwkgICAgIHNlZysrLCBsZWZ0IC09IG1zZy0+c2VnX3NpemUsIGJ1ZiArPSBtc2ctPnNlZ19zaXplKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcihpYl9nZXRfcm1wcF9zZWdtZW50KG1zZywgc2VnKSwgYnVmLAorCQkJCSAgIG1pbihsZWZ0LCBtc2ctPnNlZ19zaXplKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGliX3VtYWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CkBAIC0zMDksMTQgKzM5MiwxMiBAQAogCXN0cnVjdCBpYl9ybXBwX21hZCAqcm1wcF9tYWQ7CiAJdTggbWV0aG9kOwogCV9fYmU2NCAqdGlkOwotCWludCByZXQsIGxlbmd0aCwgaGRyX2xlbiwgY29weV9vZmZzZXQ7Ci0JaW50IHJtcHBfYWN0aXZlLCBoYXNfcm1wcF9oZWFkZXI7CisJaW50IHJldCwgZGF0YV9sZW4sIGhkcl9sZW4sIGNvcHlfb2Zmc2V0LCBybXBwX2FjdGl2ZTsKIAogCWlmIChjb3VudCA8IHNpemVvZiAoc3RydWN0IGliX3VzZXJfbWFkKSArIElCX01HTVRfUk1QUF9IRFIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbGVuZ3RoID0gY291bnQgLSBzaXplb2YgKHN0cnVjdCBpYl91c2VyX21hZCk7Ci0JcGFja2V0ID0ga21hbGxvYyhzaXplb2YgKnBhY2tldCArIElCX01HTVRfUk1QUF9IRFIsIEdGUF9LRVJORUwpOworCXBhY2tldCA9IGt6YWxsb2Moc2l6ZW9mICpwYWNrZXQgKyBJQl9NR01UX1JNUFBfSERSLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhY2tldCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM2MywzNSArNDQ0LDI1IEBACiAJaWYgKHJtcHBfbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0FETSkgewogCQloZHJfbGVuID0gSUJfTUdNVF9TQV9IRFI7CiAJCWNvcHlfb2Zmc2V0ID0gSUJfTUdNVF9STVBQX0hEUjsKLQkJaGFzX3JtcHBfaGVhZGVyID0gMTsKKwkJcm1wcF9hY3RpdmUgPSBpYl9nZXRfcm1wcF9mbGFncygmcm1wcF9tYWQtPnJtcHBfaGRyKSAmCisJCQkgICAgICBJQl9NR01UX1JNUFBfRkxBR19BQ1RJVkU7CiAJfSBlbHNlIGlmIChybXBwX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID49IElCX01HTVRfQ0xBU1NfVkVORE9SX1JBTkdFMl9TVEFSVCAmJgogCQkgICBybXBwX21hZC0+bWFkX2hkci5tZ210X2NsYXNzIDw9IElCX01HTVRfQ0xBU1NfVkVORE9SX1JBTkdFMl9FTkQpIHsKLQkJCWhkcl9sZW4gPSBJQl9NR01UX1ZFTkRPUl9IRFI7Ci0JCQljb3B5X29mZnNldCA9IElCX01HTVRfUk1QUF9IRFI7Ci0JCQloYXNfcm1wcF9oZWFkZXIgPSAxOworCQloZHJfbGVuID0gSUJfTUdNVF9WRU5ET1JfSERSOworCQljb3B5X29mZnNldCA9IElCX01HTVRfUk1QUF9IRFI7CisJCXJtcHBfYWN0aXZlID0gaWJfZ2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkcikgJgorCQkJICAgICAgSUJfTUdNVF9STVBQX0ZMQUdfQUNUSVZFOwogCX0gZWxzZSB7CiAJCWhkcl9sZW4gPSBJQl9NR01UX01BRF9IRFI7CiAJCWNvcHlfb2Zmc2V0ID0gSUJfTUdNVF9NQURfSERSOwotCQloYXNfcm1wcF9oZWFkZXIgPSAwOwotCX0KLQotCWlmIChoYXNfcm1wcF9oZWFkZXIpCi0JCXJtcHBfYWN0aXZlID0gaWJfZ2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkcikgJgotCQkJICAgICAgSUJfTUdNVF9STVBQX0ZMQUdfQUNUSVZFOwotCWVsc2UKIAkJcm1wcF9hY3RpdmUgPSAwOwotCi0JLyogVmFsaWRhdGUgdGhhdCB0aGUgbWFuYWdlbWVudCBjbGFzcyBjYW4gc3VwcG9ydCBSTVBQICovCi0JaWYgKHJtcHBfYWN0aXZlICYmICFhZ2VudC0+cm1wcF92ZXJzaW9uKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX2FoOwogCX0KIAorCWRhdGFfbGVuID0gY291bnQgLSBzaXplb2YgKHN0cnVjdCBpYl91c2VyX21hZCkgLSBoZHJfbGVuOwogCXBhY2tldC0+bXNnID0gaWJfY3JlYXRlX3NlbmRfbWFkKGFnZW50LAogCQkJCQkgYmUzMl90b19jcHUocGFja2V0LT5tYWQuaGRyLnFwbiksCi0JCQkJCSAwLCBybXBwX2FjdGl2ZSwKLQkJCQkJIGhkcl9sZW4sIGxlbmd0aCAtIGhkcl9sZW4sCi0JCQkJCSBHRlBfS0VSTkVMKTsKKwkJCQkJIDAsIHJtcHBfYWN0aXZlLCBoZHJfbGVuLAorCQkJCQkgZGF0YV9sZW4sIEdGUF9LRVJORUwpOwogCWlmIChJU19FUlIocGFja2V0LT5tc2cpKSB7CiAJCXJldCA9IFBUUl9FUlIocGFja2V0LT5tc2cpOwogCQlnb3RvIGVycl9haDsKQEAgLTQwMiwxNCArNDczLDIxIEBACiAJcGFja2V0LT5tc2ctPnJldHJpZXMgCT0gcGFja2V0LT5tYWQuaGRyLnJldHJpZXM7CiAJcGFja2V0LT5tc2ctPmNvbnRleHRbMF0gPSBwYWNrZXQ7CiAKLQkvKiBDb3B5IE1BRCBoZWFkZXJzIChSTVBQIGhlYWRlciBpbiBwbGFjZSkgKi8KKwkvKiBDb3B5IE1BRCBoZWFkZXIuICBBbnkgUk1QUCBoZWFkZXIgaXMgYWxyZWFkeSBpbiBwbGFjZS4gKi8KIAltZW1jcHkocGFja2V0LT5tc2ctPm1hZCwgcGFja2V0LT5tYWQuZGF0YSwgSUJfTUdNVF9NQURfSERSKTsKLQkvKiBOb3csIGNvcHkgcmVzdCBvZiBtZXNzYWdlIGZyb20gdXNlciBpbnRvIHNlbmQgYnVmZmVyICovCi0JaWYgKGNvcHlfZnJvbV91c2VyKHBhY2tldC0+bXNnLT5tYWQgKyBjb3B5X29mZnNldCwKLQkJCSAgIGJ1ZiArIHNpemVvZiAoc3RydWN0IGliX3VzZXJfbWFkKSArIGNvcHlfb2Zmc2V0LAotCQkJICAgbGVuZ3RoIC0gY29weV9vZmZzZXQpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX21zZzsKKwlidWYgKz0gc2l6ZW9mIChzdHJ1Y3QgaWJfdXNlcl9tYWQpOworCisJaWYgKCFybXBwX2FjdGl2ZSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIocGFja2V0LT5tc2ctPm1hZCArIGNvcHlfb2Zmc2V0LAorCQkJCSAgIGJ1ZiArIGNvcHlfb2Zmc2V0LAorCQkJCSAgIGhkcl9sZW4gKyBkYXRhX2xlbiAtIGNvcHlfb2Zmc2V0KSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyX21zZzsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IGNvcHlfcm1wcF9tYWQocGFja2V0LT5tc2csIGJ1Zik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9tc2c7CiAJfQogCiAJLyoKQEAgLTQzMywxOCArNTExLDE0IEBACiAJCWdvdG8gZXJyX21zZzsKIAogCXVwX3JlYWQoJmZpbGUtPnBvcnQtPm11dGV4KTsKLQogCXJldHVybiBjb3VudDsKIAogZXJyX21zZzoKIAlpYl9mcmVlX3NlbmRfbWFkKHBhY2tldC0+bXNnKTsKLQogZXJyX2FoOgogCWliX2Rlc3Ryb3lfYWgoYWgpOwotCiBlcnJfdXA6CiAJdXBfcmVhZCgmZmlsZS0+cG9ydC0+bXV0ZXgpOwotCiBlcnI6CiAJa2ZyZWUocGFja2V0KTsKIAlyZXR1cm4gcmV0OwpAQCAtNjI3LDggKzcwMSwxMSBAQAogCWFscmVhZHlfZGVhZCA9IGZpbGUtPmFnZW50c19kZWFkOwogCWZpbGUtPmFnZW50c19kZWFkID0gMTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWNrZXQsIHRtcCwgJmZpbGUtPnJlY3ZfbGlzdCwgbGlzdCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFja2V0LCB0bXAsICZmaWxlLT5yZWN2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHBhY2tldC0+cmVjdl93YykKKwkJCWliX2ZyZWVfcmVjdl9tYWQocGFja2V0LT5yZWN2X3djKTsKIAkJa2ZyZWUocGFja2V0KTsKKwl9CiAKIAlsaXN0X2RlbCgmZmlsZS0+cG9ydF9saXN0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAppbmRleCBmN2VlY2JjLi4zMzcyZDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFZvbHRhaXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0xNzgsMTAgKzE3OCwxMiBAQAogSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKGRlcmVnX21yKTsKIElCX1VWRVJCU19ERUNMQVJFX0NNRChjcmVhdGVfY29tcF9jaGFubmVsKTsKIElCX1VWRVJCU19ERUNMQVJFX0NNRChjcmVhdGVfY3EpOworSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKHJlc2l6ZV9jcSk7CiBJQl9VVkVSQlNfREVDTEFSRV9DTUQocG9sbF9jcSk7CiBJQl9VVkVSQlNfREVDTEFSRV9DTUQocmVxX25vdGlmeV9jcSk7CiBJQl9VVkVSQlNfREVDTEFSRV9DTUQoZGVzdHJveV9jcSk7CiBJQl9VVkVSQlNfREVDTEFSRV9DTUQoY3JlYXRlX3FwKTsKK0lCX1VWRVJCU19ERUNMQVJFX0NNRChxdWVyeV9xcCk7CiBJQl9VVkVSQlNfREVDTEFSRV9DTUQobW9kaWZ5X3FwKTsKIElCX1VWRVJCU19ERUNMQVJFX0NNRChkZXN0cm95X3FwKTsKIElCX1VWRVJCU19ERUNMQVJFX0NNRChwb3N0X3NlbmQpOwpAQCAtMTkzLDYgKzE5NSw3IEBACiBJQl9VVkVSQlNfREVDTEFSRV9DTUQoZGV0YWNoX21jYXN0KTsKIElCX1VWRVJCU19ERUNMQVJFX0NNRChjcmVhdGVfc3JxKTsKIElCX1VWRVJCU19ERUNMQVJFX0NNRChtb2RpZnlfc3JxKTsKK0lCX1VWRVJCU19ERUNMQVJFX0NNRChxdWVyeV9zcnEpOwogSUJfVVZFUkJTX0RFQ0xBUkVfQ01EKGRlc3Ryb3lfc3JxKTsKIAogI2VuZGlmIC8qIFVWRVJCU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKaW5kZXggNDA3YjYyOC4uOWY2OWJkNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKQEAgLTEsNyArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFBhdGhTY2FsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiBNZWxsYW5veCBUZWNobm9sb2dpZXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC02NzUsNiArNjc2LDQ2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3NpemVfdCBpYl91dmVyYnNfcmVzaXplX2NxKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKKwkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgaW5fbGVuLAorCQkJICAgIGludCBvdXRfbGVuKQoreworCXN0cnVjdCBpYl91dmVyYnNfcmVzaXplX2NxCWNtZDsKKwlzdHJ1Y3QgaWJfdXZlcmJzX3Jlc2l6ZV9jcV9yZXNwCXJlc3A7CisJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgICAgICB1ZGF0YTsKKwlzdHJ1Y3QgaWJfY3EJCQkqY3E7CisJaW50CQkJCXJldCA9IC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlJTklUX1VEQVRBKCZ1ZGF0YSwgYnVmICsgc2l6ZW9mIGNtZCwKKwkJICAgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSArIHNpemVvZiByZXNwLAorCQkgICBpbl9sZW4gLSBzaXplb2YgY21kLCBvdXRfbGVuIC0gc2l6ZW9mIHJlc3ApOworCisJbXV0ZXhfbG9jaygmaWJfdXZlcmJzX2lkcl9tdXRleCk7CisKKwljcSA9IGlkcl9maW5kKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlKTsKKwlpZiAoIWNxIHx8IGNxLT51b2JqZWN0LT5jb250ZXh0ICE9IGZpbGUtPnVjb250ZXh0IHx8ICFjcS0+ZGV2aWNlLT5yZXNpemVfY3EpCisJCWdvdG8gb3V0OworCisJcmV0ID0gY3EtPmRldmljZS0+cmVzaXplX2NxKGNxLCBjbWQuY3FlLCAmdWRhdGEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CisJcmVzcC5jcWUgPSBjcS0+Y3FlOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKQorCQlyZXQgPSAtRUZBVUxUOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47Cit9CisKIHNzaXplX3QgaWJfdXZlcmJzX3BvbGxfY3Eoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAogCQkJICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgaW5fbGVuLAogCQkJICBpbnQgb3V0X2xlbikKQEAgLTk1Niw2ICs5OTcsMTA2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3NpemVfdCBpYl91dmVyYnNfcXVlcnlfcXAoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCSAgIGludCBvdXRfbGVuKQoreworCXN0cnVjdCBpYl91dmVyYnNfcXVlcnlfcXAgICAgICBjbWQ7CisJc3RydWN0IGliX3V2ZXJic19xdWVyeV9xcF9yZXNwIHJlc3A7CisJc3RydWN0IGliX3FwICAgICAgICAgICAgICAgICAgICpxcDsKKwlzdHJ1Y3QgaWJfcXBfYXR0ciAgICAgICAgICAgICAgKmF0dHI7CisJc3RydWN0IGliX3FwX2luaXRfYXR0ciAgICAgICAgICppbml0X2F0dHI7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWF0dHIgICAgICA9IGttYWxsb2Moc2l6ZW9mICphdHRyLCBHRlBfS0VSTkVMKTsKKwlpbml0X2F0dHIgPSBrbWFsbG9jKHNpemVvZiAqaW5pdF9hdHRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF0dHIgfHwgIWluaXRfYXR0cikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCXFwID0gaWRyX2ZpbmQoJmliX3V2ZXJic19xcF9pZHIsIGNtZC5xcF9oYW5kbGUpOworCWlmIChxcCAmJiBxcC0+dW9iamVjdC0+Y29udGV4dCA9PSBmaWxlLT51Y29udGV4dCkKKwkJcmV0ID0gaWJfcXVlcnlfcXAocXAsIGF0dHIsIGNtZC5hdHRyX21hc2ssIGluaXRfYXR0cik7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJbXV0ZXhfdW5sb2NrKCZpYl91dmVyYnNfaWRyX211dGV4KTsKKworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YgcmVzcCk7CisKKwlyZXNwLnFwX3N0YXRlICAgICAgICAgICAgICAgPSBhdHRyLT5xcF9zdGF0ZTsKKwlyZXNwLmN1cl9xcF9zdGF0ZSAgICAgICAgICAgPSBhdHRyLT5jdXJfcXBfc3RhdGU7CisJcmVzcC5wYXRoX210dSAgICAgICAgICAgICAgID0gYXR0ci0+cGF0aF9tdHU7CisJcmVzcC5wYXRoX21pZ19zdGF0ZSAgICAgICAgID0gYXR0ci0+cGF0aF9taWdfc3RhdGU7CisJcmVzcC5xa2V5ICAgICAgICAgICAgICAgICAgID0gYXR0ci0+cWtleTsKKwlyZXNwLnJxX3BzbiAgICAgICAgICAgICAgICAgPSBhdHRyLT5ycV9wc247CisJcmVzcC5zcV9wc24gICAgICAgICAgICAgICAgID0gYXR0ci0+c3FfcHNuOworCXJlc3AuZGVzdF9xcF9udW0gICAgICAgICAgICA9IGF0dHItPmRlc3RfcXBfbnVtOworCXJlc3AucXBfYWNjZXNzX2ZsYWdzICAgICAgICA9IGF0dHItPnFwX2FjY2Vzc19mbGFnczsKKwlyZXNwLnBrZXlfaW5kZXggICAgICAgICAgICAgPSBhdHRyLT5wa2V5X2luZGV4OworCXJlc3AuYWx0X3BrZXlfaW5kZXggICAgICAgICA9IGF0dHItPmFsdF9wa2V5X2luZGV4OworCXJlc3AuZW5fc3FkX2FzeW5jX25vdGlmeSAgICA9IGF0dHItPmVuX3NxZF9hc3luY19ub3RpZnk7CisJcmVzcC5tYXhfcmRfYXRvbWljICAgICAgICAgID0gYXR0ci0+bWF4X3JkX2F0b21pYzsKKwlyZXNwLm1heF9kZXN0X3JkX2F0b21pYyAgICAgPSBhdHRyLT5tYXhfZGVzdF9yZF9hdG9taWM7CisJcmVzcC5taW5fcm5yX3RpbWVyICAgICAgICAgID0gYXR0ci0+bWluX3Jucl90aW1lcjsKKwlyZXNwLnBvcnRfbnVtICAgICAgICAgICAgICAgPSBhdHRyLT5wb3J0X251bTsKKwlyZXNwLnRpbWVvdXQgICAgICAgICAgICAgICAgPSBhdHRyLT50aW1lb3V0OworCXJlc3AucmV0cnlfY250ICAgICAgICAgICAgICA9IGF0dHItPnJldHJ5X2NudDsKKwlyZXNwLnJucl9yZXRyeSAgICAgICAgICAgICAgPSBhdHRyLT5ybnJfcmV0cnk7CisJcmVzcC5hbHRfcG9ydF9udW0gICAgICAgICAgID0gYXR0ci0+YWx0X3BvcnRfbnVtOworCXJlc3AuYWx0X3RpbWVvdXQgICAgICAgICAgICA9IGF0dHItPmFsdF90aW1lb3V0OworCisJbWVtY3B5KHJlc3AuZGVzdC5kZ2lkLCBhdHRyLT5haF9hdHRyLmdyaC5kZ2lkLnJhdywgMTYpOworCXJlc3AuZGVzdC5mbG93X2xhYmVsICAgICAgICA9IGF0dHItPmFoX2F0dHIuZ3JoLmZsb3dfbGFiZWw7CisJcmVzcC5kZXN0LnNnaWRfaW5kZXggICAgICAgID0gYXR0ci0+YWhfYXR0ci5ncmguc2dpZF9pbmRleDsKKwlyZXNwLmRlc3QuaG9wX2xpbWl0ICAgICAgICAgPSBhdHRyLT5haF9hdHRyLmdyaC5ob3BfbGltaXQ7CisJcmVzcC5kZXN0LnRyYWZmaWNfY2xhc3MgICAgID0gYXR0ci0+YWhfYXR0ci5ncmgudHJhZmZpY19jbGFzczsKKwlyZXNwLmRlc3QuZGxpZCAgICAgICAgICAgICAgPSBhdHRyLT5haF9hdHRyLmRsaWQ7CisJcmVzcC5kZXN0LnNsICAgICAgICAgICAgICAgID0gYXR0ci0+YWhfYXR0ci5zbDsKKwlyZXNwLmRlc3Quc3JjX3BhdGhfYml0cyAgICAgPSBhdHRyLT5haF9hdHRyLnNyY19wYXRoX2JpdHM7CisJcmVzcC5kZXN0LnN0YXRpY19yYXRlICAgICAgID0gYXR0ci0+YWhfYXR0ci5zdGF0aWNfcmF0ZTsKKwlyZXNwLmRlc3QuaXNfZ2xvYmFsICAgICAgICAgPSAhIShhdHRyLT5haF9hdHRyLmFoX2ZsYWdzICYgSUJfQUhfR1JIKTsKKwlyZXNwLmRlc3QucG9ydF9udW0gICAgICAgICAgPSBhdHRyLT5haF9hdHRyLnBvcnRfbnVtOworCisJbWVtY3B5KHJlc3AuYWx0X2Rlc3QuZGdpZCwgYXR0ci0+YWx0X2FoX2F0dHIuZ3JoLmRnaWQucmF3LCAxNik7CisJcmVzcC5hbHRfZGVzdC5mbG93X2xhYmVsICAgID0gYXR0ci0+YWx0X2FoX2F0dHIuZ3JoLmZsb3dfbGFiZWw7CisJcmVzcC5hbHRfZGVzdC5zZ2lkX2luZGV4ICAgID0gYXR0ci0+YWx0X2FoX2F0dHIuZ3JoLnNnaWRfaW5kZXg7CisJcmVzcC5hbHRfZGVzdC5ob3BfbGltaXQgICAgID0gYXR0ci0+YWx0X2FoX2F0dHIuZ3JoLmhvcF9saW1pdDsKKwlyZXNwLmFsdF9kZXN0LnRyYWZmaWNfY2xhc3MgPSBhdHRyLT5hbHRfYWhfYXR0ci5ncmgudHJhZmZpY19jbGFzczsKKwlyZXNwLmFsdF9kZXN0LmRsaWQgICAgICAgICAgPSBhdHRyLT5hbHRfYWhfYXR0ci5kbGlkOworCXJlc3AuYWx0X2Rlc3Quc2wgICAgICAgICAgICA9IGF0dHItPmFsdF9haF9hdHRyLnNsOworCXJlc3AuYWx0X2Rlc3Quc3JjX3BhdGhfYml0cyA9IGF0dHItPmFsdF9haF9hdHRyLnNyY19wYXRoX2JpdHM7CisJcmVzcC5hbHRfZGVzdC5zdGF0aWNfcmF0ZSAgID0gYXR0ci0+YWx0X2FoX2F0dHIuc3RhdGljX3JhdGU7CisJcmVzcC5hbHRfZGVzdC5pc19nbG9iYWwgICAgID0gISEoYXR0ci0+YWx0X2FoX2F0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpOworCXJlc3AuYWx0X2Rlc3QucG9ydF9udW0gICAgICA9IGF0dHItPmFsdF9haF9hdHRyLnBvcnRfbnVtOworCisJcmVzcC5tYXhfc2VuZF93ciAgICAgICAgICAgID0gaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3I7CisJcmVzcC5tYXhfcmVjdl93ciAgICAgICAgICAgID0gaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3I7CisJcmVzcC5tYXhfc2VuZF9zZ2UgICAgICAgICAgID0gaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlOworCXJlc3AubWF4X3JlY3Zfc2dlICAgICAgICAgICA9IGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZTsKKwlyZXNwLm1heF9pbmxpbmVfZGF0YSAgICAgICAgPSBpbml0X2F0dHItPmNhcC5tYXhfaW5saW5lX2RhdGE7CisJcmVzcC5zcV9zaWdfYWxsICAgICAgICAgICAgID0gaW5pdF9hdHRyLT5zcV9zaWdfdHlwZSA9PSBJQl9TSUdOQUxfQUxMX1dSOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKQorCQlyZXQgPSAtRUZBVUxUOworCitvdXQ6CisJa2ZyZWUoYXR0cik7CisJa2ZyZWUoaW5pdF9hdHRyKTsKKworCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47Cit9CisKIHNzaXplX3QgaWJfdXZlcmJzX21vZGlmeV9xcChzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCiAJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKIAkJCSAgICBpbnQgb3V0X2xlbikKQEAgLTk5MCw3ICsxMTMxLDcgQEAKIAlhdHRyLT5kZXN0X3FwX251bSAJICA9IGNtZC5kZXN0X3FwX251bTsKIAlhdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgCSAgPSBjbWQucXBfYWNjZXNzX2ZsYWdzOwogCWF0dHItPnBrZXlfaW5kZXggCSAgPSBjbWQucGtleV9pbmRleDsKLQlhdHRyLT5hbHRfcGtleV9pbmRleCAJICA9IGNtZC5wa2V5X2luZGV4OworCWF0dHItPmFsdF9wa2V5X2luZGV4IAkgID0gY21kLmFsdF9wa2V5X2luZGV4OwogCWF0dHItPmVuX3NxZF9hc3luY19ub3RpZnkgPSBjbWQuZW5fc3FkX2FzeW5jX25vdGlmeTsKIAlhdHRyLT5tYXhfcmRfYXRvbWljIAkgID0gY21kLm1heF9yZF9hdG9taWM7CiAJYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljICA9IGNtZC5tYXhfZGVzdF9yZF9hdG9taWM7CkBAIC0xMDk0LDggKzEyMzUsOCBAQAogfQogCiBzc2l6ZV90IGliX3V2ZXJic19wb3N0X3NlbmQoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsIGludCBpbl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG91dF9sZW4pCisJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCSAgICBpbnQgb3V0X2xlbikKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3Bvc3Rfc2VuZCAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3Bvc3Rfc2VuZF9yZXNwIHJlc3A7CkBAIC0xMzIzLDggKzE0NjQsOCBAQAogfQogCiBzc2l6ZV90IGliX3V2ZXJic19wb3N0X3JlY3Yoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsIGludCBpbl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG91dF9sZW4pCisJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGluX2xlbiwKKwkJCSAgICBpbnQgb3V0X2xlbikKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3Bvc3RfcmVjdiAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3Bvc3RfcmVjdl9yZXNwIHJlc3A7CkBAIC0xMzc0LDggKzE1MTUsOCBAQAogfQogCiBzc2l6ZV90IGliX3V2ZXJic19wb3N0X3NycV9yZWN2KHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgaW5fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXRfbGVuKQorCQkJCWNvbnN0IGNoYXIgX191c2VyICpidWYsIGludCBpbl9sZW4sCisJCQkJaW50IG91dF9sZW4pCiB7CiAJc3RydWN0IGliX3V2ZXJic19wb3N0X3NycV9yZWN2ICAgICAgY21kOwogCXN0cnVjdCBpYl91dmVyYnNfcG9zdF9zcnFfcmVjdl9yZXNwIHJlc3A7CkBAIC0xNzIzLDYgKzE4NjQsOCBAQAogCQlnb3RvIGVycl9kZXN0cm95OwogCiAJcmVzcC5zcnFfaGFuZGxlID0gdW9iai0+dW9iamVjdC5pZDsKKwlyZXNwLm1heF93ciAgICAgPSBhdHRyLmF0dHIubWF4X3dyOworCXJlc3AubWF4X3NnZSAgICA9IGF0dHIuYXR0ci5tYXhfc2dlOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CkBAIC0xNzgzLDYgKzE5MjYsNDkgQEAKIAlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOwogfQogCitzc2l6ZV90IGliX3V2ZXJic19xdWVyeV9zcnEoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAorCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCit7CisJc3RydWN0IGliX3V2ZXJic19xdWVyeV9zcnEgICAgICBjbWQ7CisJc3RydWN0IGliX3V2ZXJic19xdWVyeV9zcnFfcmVzcCByZXNwOworCXN0cnVjdCBpYl9zcnFfYXR0ciAgICAgICAgICAgICAgYXR0cjsKKwlzdHJ1Y3QgaWJfc3JxICAgICAgICAgICAgICAgICAgICpzcnE7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CisKKwlpZiAob3V0X2xlbiA8IHNpemVvZiByZXNwKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW11dGV4X2xvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJc3JxID0gaWRyX2ZpbmQoJmliX3V2ZXJic19zcnFfaWRyLCBjbWQuc3JxX2hhbmRsZSk7CisJaWYgKHNycSAmJiBzcnEtPnVvYmplY3QtPmNvbnRleHQgPT0gZmlsZS0+dWNvbnRleHQpCisJCXJldCA9IGliX3F1ZXJ5X3NycShzcnEsICZhdHRyKTsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwltdXRleF91bmxvY2soJmliX3V2ZXJic19pZHJfbXV0ZXgpOworCisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKKworCXJlc3AubWF4X3dyICAgID0gYXR0ci5tYXhfd3I7CisJcmVzcC5tYXhfc2dlICAgPSBhdHRyLm1heF9zZ2U7CisJcmVzcC5zcnFfbGltaXQgPSBhdHRyLnNycV9saW1pdDsKKworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCisJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkKKwkJcmV0ID0gLUVGQVVMVDsKKworb3V0OgorCXJldHVybiByZXQgPyByZXQgOiBpbl9sZW47Cit9CisKIHNzaXplX3QgaWJfdXZlcmJzX2Rlc3Ryb3lfc3JxKHN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsIGludCBpbl9sZW4sCiAJCQkgICAgICBpbnQgb3V0X2xlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCmluZGV4IDkwM2Y4NWEuLmZmMDkyYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFZvbHRhaXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUGF0aFNjYWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC05MSwxMCArOTEsMTIgQEAKIAlbSUJfVVNFUl9WRVJCU19DTURfREVSRUdfTVJdICAgICAgCT0gaWJfdXZlcmJzX2RlcmVnX21yLAogCVtJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ09NUF9DSEFOTkVMXSA9IGliX3V2ZXJic19jcmVhdGVfY29tcF9jaGFubmVsLAogCVtJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ1FdICAgICAJPSBpYl91dmVyYnNfY3JlYXRlX2NxLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9SRVNJWkVfQ1FdICAgICAJPSBpYl91dmVyYnNfcmVzaXplX2NxLAogCVtJQl9VU0VSX1ZFUkJTX0NNRF9QT0xMX0NRXSAgICAgCT0gaWJfdXZlcmJzX3BvbGxfY3EsCiAJW0lCX1VTRVJfVkVSQlNfQ01EX1JFUV9OT1RJRllfQ1FdICAgICAJPSBpYl91dmVyYnNfcmVxX25vdGlmeV9jcSwKIAlbSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9DUV0gICAgCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfY3EsCiAJW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9RUF0gICAgIAk9IGliX3V2ZXJic19jcmVhdGVfcXAsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1FQXSAgICAgCT0gaWJfdXZlcmJzX3F1ZXJ5X3FwLAogCVtJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfUVBdICAgICAJPSBpYl91dmVyYnNfbW9kaWZ5X3FwLAogCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1FQXSAgICAJPSBpYl91dmVyYnNfZGVzdHJveV9xcCwKIAlbSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TRU5EXSAgICAJPSBpYl91dmVyYnNfcG9zdF9zZW5kLApAQCAtMTA2LDYgKzEwOCw3IEBACiAJW0lCX1VTRVJfVkVSQlNfQ01EX0RFVEFDSF9NQ0FTVF0gIAk9IGliX3V2ZXJic19kZXRhY2hfbWNhc3QsCiAJW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9TUlFdICAgIAk9IGliX3V2ZXJic19jcmVhdGVfc3JxLAogCVtJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfU1JRXSAgICAJPSBpYl91dmVyYnNfbW9kaWZ5X3NycSwKKwlbSUJfVVNFUl9WRVJCU19DTURfUVVFUllfU1JRXSAgICAgCT0gaWJfdXZlcmJzX3F1ZXJ5X3NycSwKIAlbSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9TUlFdICAgCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfc3JxLAogfTsKIApAQCAtNDYxLDcgKzQ2NCw2IEBACiAJaWJfdXZlcmJzX2FzeW5jX2hhbmRsZXIodW9iai0+dXZlcmJzX2ZpbGUsIHVvYmotPnVvYmplY3QudXNlcl9oYW5kbGUsCiAJCQkJZXZlbnQtPmV2ZW50LCAmdW9iai0+YXN5bmNfbGlzdCwKIAkJCQkmdW9iai0+YXN5bmNfZXZlbnRzX3JlcG9ydGVkKTsKLQkJCQkKIH0KIAogdm9pZCBpYl91dmVyYnNfcXBfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpjb250ZXh0X3B0cikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IGM4NTczNjEuLmNhZTA4NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNCBUb3BzcGluIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNCBWb2x0YWlyZSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0yNDUsNiArMjQ1LDI1OCBAQAogfQogRVhQT1JUX1NZTUJPTChpYl9jcmVhdGVfcXApOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlpbnQJCQl2YWxpZDsKKwllbnVtIGliX3FwX2F0dHJfbWFzawlyZXFfcGFyYW1bSUJfUVBUX1JBV19FVFkgKyAxXTsKKwllbnVtIGliX3FwX2F0dHJfbWFzawlvcHRfcGFyYW1bSUJfUVBUX1JBV19FVFkgKyAxXTsKK30gcXBfc3RhdGVfdGFibGVbSUJfUVBTX0VSUiArIDFdW0lCX1FQU19FUlIgKyAxXSA9IHsKKwlbSUJfUVBTX1JFU0VUXSA9IHsKKwkJW0lCX1FQU19SRVNFVF0gPSB7IC52YWxpZCA9IDEgfSwKKwkJW0lCX1FQU19FUlJdICAgPSB7IC52YWxpZCA9IDEgfSwKKwkJW0lCX1FQU19JTklUXSAgPSB7CisJCQkudmFsaWQgPSAxLAorCQkJLnJlcV9wYXJhbSA9IHsKKwkJCQlbSUJfUVBUX1VEXSAgPSAoSUJfUVBfUEtFWV9JTkRFWAkJfAorCQkJCQkJSUJfUVBfUE9SVAkJCXwKKwkJCQkJCUlCX1FQX1FLRVkpLAorCQkJCVtJQl9RUFRfVUNdICA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJCQlJQl9RUF9QT1JUCQkJfAorCQkJCQkJSUJfUVBfQUNDRVNTX0ZMQUdTKSwKKwkJCQlbSUJfUVBUX1JDXSAgPSAoSUJfUVBfUEtFWV9JTkRFWAkJfAorCQkJCQkJSUJfUVBfUE9SVAkJCXwKKwkJCQkJCUlCX1FQX0FDQ0VTU19GTEFHUyksCisJCQkJW0lCX1FQVF9TTUldID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCQkJCUlCX1FQX1FLRVkpLAorCQkJCVtJQl9RUFRfR1NJXSA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJCQlJQl9RUF9RS0VZKSwKKwkJCX0KKwkJfSwKKwl9LAorCVtJQl9RUFNfSU5JVF0gID0geworCQlbSUJfUVBTX1JFU0VUXSA9IHsgLnZhbGlkID0gMSB9LAorCQlbSUJfUVBTX0VSUl0gPSAgIHsgLnZhbGlkID0gMSB9LAorCQlbSUJfUVBTX0lOSVRdICA9IHsKKwkJCS52YWxpZCA9IDEsCisJCQkub3B0X3BhcmFtID0geworCQkJCVtJQl9RUFRfVURdICA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJCQlJQl9RUF9QT1JUCQkJfAorCQkJCQkJSUJfUVBfUUtFWSksCisJCQkJW0lCX1FQVF9VQ10gID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCQkJCUlCX1FQX1BPUlQJCQl8CisJCQkJCQlJQl9RUF9BQ0NFU1NfRkxBR1MpLAorCQkJCVtJQl9RUFRfUkNdICA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJCQlJQl9RUF9QT1JUCQkJfAorCQkJCQkJSUJfUVBfQUNDRVNTX0ZMQUdTKSwKKwkJCQlbSUJfUVBUX1NNSV0gPSAoSUJfUVBfUEtFWV9JTkRFWAkJfAorCQkJCQkJSUJfUVBfUUtFWSksCisJCQkJW0lCX1FQVF9HU0ldID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCQkJCUlCX1FQX1FLRVkpLAorCQkJfQorCQl9LAorCQlbSUJfUVBTX1JUUl0gICA9IHsKKwkJCS52YWxpZCA9IDEsCisJCQkucmVxX3BhcmFtID0geworCQkJCVtJQl9RUFRfVUNdICA9IChJQl9RUF9BVgkJCXwKKwkJCQkJCUlCX1FQX1BBVEhfTVRVCQkJfAorCQkJCQkJSUJfUVBfREVTVF9RUE4JCQl8CisJCQkJCQlJQl9RUF9SUV9QU04pLAorCQkJCVtJQl9RUFRfUkNdICA9IChJQl9RUF9BVgkJCXwKKwkJCQkJCUlCX1FQX1BBVEhfTVRVCQkJfAorCQkJCQkJSUJfUVBfREVTVF9RUE4JCQl8CisJCQkJCQlJQl9RUF9SUV9QU04JCQl8CisJCQkJCQlJQl9RUF9NQVhfREVTVF9SRF9BVE9NSUMJfAorCQkJCQkJSUJfUVBfTUlOX1JOUl9USU1FUiksCisJCQl9LAorCQkJLm9wdF9wYXJhbSA9IHsKKwkJCQkgW0lCX1FQVF9VRF0gID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCQkJCSBJQl9RUF9RS0VZKSwKKwkJCQkgW0lCX1FQVF9VQ10gID0gKElCX1FQX0FMVF9QQVRICQkJfAorCQkJCQkJIElCX1FQX0FDQ0VTU19GTEFHUwkJfAorCQkJCQkJIElCX1FQX1BLRVlfSU5ERVgpLAorCQkJCSBbSUJfUVBUX1JDXSAgPSAoSUJfUVBfQUxUX1BBVEgJCQl8CisJCQkJCQkgSUJfUVBfQUNDRVNTX0ZMQUdTCQl8CisJCQkJCQkgSUJfUVBfUEtFWV9JTkRFWCksCisJCQkJIFtJQl9RUFRfU01JXSA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJCQkgSUJfUVBfUUtFWSksCisJCQkJIFtJQl9RUFRfR1NJXSA9IChJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJCQkgSUJfUVBfUUtFWSksCisJCQkgfQorCQl9CisJfSwKKwlbSUJfUVBTX1JUUl0gICA9IHsKKwkJW0lCX1FQU19SRVNFVF0gPSB7IC52YWxpZCA9IDEgfSwKKwkJW0lCX1FQU19FUlJdID0gICB7IC52YWxpZCA9IDEgfSwKKwkJW0lCX1FQU19SVFNdICAgPSB7CisJCQkudmFsaWQgPSAxLAorCQkJLnJlcV9wYXJhbSA9IHsKKwkJCQlbSUJfUVBUX1VEXSAgPSBJQl9RUF9TUV9QU04sCisJCQkJW0lCX1FQVF9VQ10gID0gSUJfUVBfU1FfUFNOLAorCQkJCVtJQl9RUFRfUkNdICA9IChJQl9RUF9USU1FT1VUCQkJfAorCQkJCQkJSUJfUVBfUkVUUllfQ05UCQkJfAorCQkJCQkJSUJfUVBfUk5SX1JFVFJZCQkJfAorCQkJCQkJSUJfUVBfU1FfUFNOCQkJfAorCQkJCQkJSUJfUVBfTUFYX1FQX1JEX0FUT01JQyksCisJCQkJW0lCX1FQVF9TTUldID0gSUJfUVBfU1FfUFNOLAorCQkJCVtJQl9RUFRfR1NJXSA9IElCX1FQX1NRX1BTTiwKKwkJCX0sCisJCQkub3B0X3BhcmFtID0geworCQkJCSBbSUJfUVBUX1VEXSAgPSAoSUJfUVBfQ1VSX1NUQVRFCQl8CisJCQkJCQkgSUJfUVBfUUtFWSksCisJCQkJIFtJQl9RUFRfVUNdICA9IChJQl9RUF9DVVJfU1RBVEUJCXwKKwkJCQkJCSBJQl9RUF9BTFRfUEFUSAkJCXwKKwkJCQkJCSBJQl9RUF9BQ0NFU1NfRkxBR1MJCXwKKwkJCQkJCSBJQl9RUF9QQVRIX01JR19TVEFURSksCisJCQkJIFtJQl9RUFRfUkNdICA9IChJQl9RUF9DVVJfU1RBVEUJCXwKKwkJCQkJCSBJQl9RUF9BTFRfUEFUSAkJCXwKKwkJCQkJCSBJQl9RUF9BQ0NFU1NfRkxBR1MJCXwKKwkJCQkJCSBJQl9RUF9NSU5fUk5SX1RJTUVSCQl8CisJCQkJCQkgSUJfUVBfUEFUSF9NSUdfU1RBVEUpLAorCQkJCSBbSUJfUVBUX1NNSV0gPSAoSUJfUVBfQ1VSX1NUQVRFCQl8CisJCQkJCQkgSUJfUVBfUUtFWSksCisJCQkJIFtJQl9RUFRfR1NJXSA9IChJQl9RUF9DVVJfU1RBVEUJCXwKKwkJCQkJCSBJQl9RUF9RS0VZKSwKKwkJCSB9CisJCX0KKwl9LAorCVtJQl9RUFNfUlRTXSAgID0geworCQlbSUJfUVBTX1JFU0VUXSA9IHsgLnZhbGlkID0gMSB9LAorCQlbSUJfUVBTX0VSUl0gPSAgIHsgLnZhbGlkID0gMSB9LAorCQlbSUJfUVBTX1JUU10gICA9IHsKKwkJCS52YWxpZCA9IDEsCisJCQkub3B0X3BhcmFtID0geworCQkJCVtJQl9RUFRfVURdICA9IChJQl9RUF9DVVJfU1RBVEUJCQl8CisJCQkJCQlJQl9RUF9RS0VZKSwKKwkJCQlbSUJfUVBUX1VDXSAgPSAoSUJfUVBfQ1VSX1NUQVRFCQkJfAorCQkJCQkJSUJfUVBfQUNDRVNTX0ZMQUdTCQl8CisJCQkJCQlJQl9RUF9BTFRfUEFUSAkJCXwKKwkJCQkJCUlCX1FQX1BBVEhfTUlHX1NUQVRFKSwKKwkJCQlbSUJfUVBUX1JDXSAgPSAoSUJfUVBfQ1VSX1NUQVRFCQkJfAorCQkJCQkJSUJfUVBfQUNDRVNTX0ZMQUdTCQl8CisJCQkJCQlJQl9RUF9BTFRfUEFUSAkJCXwKKwkJCQkJCUlCX1FQX1BBVEhfTUlHX1NUQVRFCQl8CisJCQkJCQlJQl9RUF9NSU5fUk5SX1RJTUVSKSwKKwkJCQlbSUJfUVBUX1NNSV0gPSAoSUJfUVBfQ1VSX1NUQVRFCQkJfAorCQkJCQkJSUJfUVBfUUtFWSksCisJCQkJW0lCX1FQVF9HU0ldID0gKElCX1FQX0NVUl9TVEFURQkJCXwKKwkJCQkJCUlCX1FQX1FLRVkpLAorCQkJfQorCQl9LAorCQlbSUJfUVBTX1NRRF0gICA9IHsKKwkJCS52YWxpZCA9IDEsCisJCQkub3B0X3BhcmFtID0geworCQkJCVtJQl9RUFRfVURdICA9IElCX1FQX0VOX1NRRF9BU1lOQ19OT1RJRlksCisJCQkJW0lCX1FQVF9VQ10gID0gSUJfUVBfRU5fU1FEX0FTWU5DX05PVElGWSwKKwkJCQlbSUJfUVBUX1JDXSAgPSBJQl9RUF9FTl9TUURfQVNZTkNfTk9USUZZLAorCQkJCVtJQl9RUFRfU01JXSA9IElCX1FQX0VOX1NRRF9BU1lOQ19OT1RJRlksCisJCQkJW0lCX1FQVF9HU0ldID0gSUJfUVBfRU5fU1FEX0FTWU5DX05PVElGWQorCQkJfQorCQl9LAorCX0sCisJW0lCX1FQU19TUURdICAgPSB7CisJCVtJQl9RUFNfUkVTRVRdID0geyAudmFsaWQgPSAxIH0sCisJCVtJQl9RUFNfRVJSXSA9ICAgeyAudmFsaWQgPSAxIH0sCisJCVtJQl9RUFNfUlRTXSAgID0geworCQkJLnZhbGlkID0gMSwKKwkJCS5vcHRfcGFyYW0gPSB7CisJCQkJW0lCX1FQVF9VRF0gID0gKElCX1FQX0NVUl9TVEFURQkJCXwKKwkJCQkJCUlCX1FQX1FLRVkpLAorCQkJCVtJQl9RUFRfVUNdICA9IChJQl9RUF9DVVJfU1RBVEUJCQl8CisJCQkJCQlJQl9RUF9BTFRfUEFUSAkJCXwKKwkJCQkJCUlCX1FQX0FDQ0VTU19GTEFHUwkJfAorCQkJCQkJSUJfUVBfUEFUSF9NSUdfU1RBVEUpLAorCQkJCVtJQl9RUFRfUkNdICA9IChJQl9RUF9DVVJfU1RBVEUJCQl8CisJCQkJCQlJQl9RUF9BTFRfUEFUSAkJCXwKKwkJCQkJCUlCX1FQX0FDQ0VTU19GTEFHUwkJfAorCQkJCQkJSUJfUVBfTUlOX1JOUl9USU1FUgkJfAorCQkJCQkJSUJfUVBfUEFUSF9NSUdfU1RBVEUpLAorCQkJCVtJQl9RUFRfU01JXSA9IChJQl9RUF9DVVJfU1RBVEUJCQl8CisJCQkJCQlJQl9RUF9RS0VZKSwKKwkJCQlbSUJfUVBUX0dTSV0gPSAoSUJfUVBfQ1VSX1NUQVRFCQkJfAorCQkJCQkJSUJfUVBfUUtFWSksCisJCQl9CisJCX0sCisJCVtJQl9RUFNfU1FEXSAgID0geworCQkJLnZhbGlkID0gMSwKKwkJCS5vcHRfcGFyYW0gPSB7CisJCQkJW0lCX1FQVF9VRF0gID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCQkJCUlCX1FQX1FLRVkpLAorCQkJCVtJQl9RUFRfVUNdICA9IChJQl9RUF9BVgkJCXwKKwkJCQkJCUlCX1FQX0FMVF9QQVRICQkJfAorCQkJCQkJSUJfUVBfQUNDRVNTX0ZMQUdTCQl8CisJCQkJCQlJQl9RUF9QS0VZX0lOREVYCQl8CisJCQkJCQlJQl9RUF9QQVRIX01JR19TVEFURSksCisJCQkJW0lCX1FQVF9SQ10gID0gKElCX1FQX1BPUlQJCQl8CisJCQkJCQlJQl9RUF9BVgkJCXwKKwkJCQkJCUlCX1FQX1RJTUVPVVQJCQl8CisJCQkJCQlJQl9RUF9SRVRSWV9DTlQJCQl8CisJCQkJCQlJQl9RUF9STlJfUkVUUlkJCQl8CisJCQkJCQlJQl9RUF9NQVhfUVBfUkRfQVRPTUlDCQl8CisJCQkJCQlJQl9RUF9NQVhfREVTVF9SRF9BVE9NSUMJfAorCQkJCQkJSUJfUVBfQUxUX1BBVEgJCQl8CisJCQkJCQlJQl9RUF9BQ0NFU1NfRkxBR1MJCXwKKwkJCQkJCUlCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCQkJCUlCX1FQX01JTl9STlJfVElNRVIJCXwKKwkJCQkJCUlCX1FQX1BBVEhfTUlHX1NUQVRFKSwKKwkJCQlbSUJfUVBUX1NNSV0gPSAoSUJfUVBfUEtFWV9JTkRFWAkJfAorCQkJCQkJSUJfUVBfUUtFWSksCisJCQkJW0lCX1FQVF9HU0ldID0gKElCX1FQX1BLRVlfSU5ERVgJCXwKKwkJCQkJCUlCX1FQX1FLRVkpLAorCQkJfQorCQl9CisJfSwKKwlbSUJfUVBTX1NRRV0gICA9IHsKKwkJW0lCX1FQU19SRVNFVF0gPSB7IC52YWxpZCA9IDEgfSwKKwkJW0lCX1FQU19FUlJdID0gICB7IC52YWxpZCA9IDEgfSwKKwkJW0lCX1FQU19SVFNdICAgPSB7CisJCQkudmFsaWQgPSAxLAorCQkJLm9wdF9wYXJhbSA9IHsKKwkJCQlbSUJfUVBUX1VEXSAgPSAoSUJfUVBfQ1VSX1NUQVRFCQkJfAorCQkJCQkJSUJfUVBfUUtFWSksCisJCQkJW0lCX1FQVF9VQ10gID0gKElCX1FQX0NVUl9TVEFURQkJCXwKKwkJCQkJCUlCX1FQX0FDQ0VTU19GTEFHUyksCisJCQkJW0lCX1FQVF9TTUldID0gKElCX1FQX0NVUl9TVEFURQkJCXwKKwkJCQkJCUlCX1FQX1FLRVkpLAorCQkJCVtJQl9RUFRfR1NJXSA9IChJQl9RUF9DVVJfU1RBVEUJCQl8CisJCQkJCQlJQl9RUF9RS0VZKSwKKwkJCX0KKwkJfQorCX0sCisJW0lCX1FQU19FUlJdID0geworCQlbSUJfUVBTX1JFU0VUXSA9IHsgLnZhbGlkID0gMSB9LAorCQlbSUJfUVBTX0VSUl0gPSAgIHsgLnZhbGlkID0gMSB9CisJfQorfTsKKworaW50IGliX21vZGlmeV9xcF9pc19vayhlbnVtIGliX3FwX3N0YXRlIGN1cl9zdGF0ZSwgZW51bSBpYl9xcF9zdGF0ZSBuZXh0X3N0YXRlLAorCQkgICAgICAgZW51bSBpYl9xcF90eXBlIHR5cGUsIGVudW0gaWJfcXBfYXR0cl9tYXNrIG1hc2spCit7CisJZW51bSBpYl9xcF9hdHRyX21hc2sgcmVxX3BhcmFtLCBvcHRfcGFyYW07CisKKwlpZiAoY3VyX3N0YXRlICA8IDAgfHwgY3VyX3N0YXRlICA+IElCX1FQU19FUlIgfHwKKwkgICAgbmV4dF9zdGF0ZSA8IDAgfHwgbmV4dF9zdGF0ZSA+IElCX1FQU19FUlIpCisJCXJldHVybiAwOworCisJaWYgKG1hc2sgJiBJQl9RUF9DVVJfU1RBVEUgICYmCisJICAgIGN1cl9zdGF0ZSAhPSBJQl9RUFNfUlRSICYmIGN1cl9zdGF0ZSAhPSBJQl9RUFNfUlRTICYmCisJICAgIGN1cl9zdGF0ZSAhPSBJQl9RUFNfU1FEICYmIGN1cl9zdGF0ZSAhPSBJQl9RUFNfU1FFKQorCQlyZXR1cm4gMDsKKworCWlmICghcXBfc3RhdGVfdGFibGVbY3VyX3N0YXRlXVtuZXh0X3N0YXRlXS52YWxpZCkKKwkJcmV0dXJuIDA7CisKKwlyZXFfcGFyYW0gPSBxcF9zdGF0ZV90YWJsZVtjdXJfc3RhdGVdW25leHRfc3RhdGVdLnJlcV9wYXJhbVt0eXBlXTsKKwlvcHRfcGFyYW0gPSBxcF9zdGF0ZV90YWJsZVtjdXJfc3RhdGVdW25leHRfc3RhdGVdLm9wdF9wYXJhbVt0eXBlXTsKKworCWlmICgobWFzayAmIHJlcV9wYXJhbSkgIT0gcmVxX3BhcmFtKQorCQlyZXR1cm4gMDsKKworCWlmIChtYXNrICYgfihyZXFfcGFyYW0gfCBvcHRfcGFyYW0gfCBJQl9RUF9TVEFURSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKGliX21vZGlmeV9xcF9pc19vayk7CisKIGludCBpYl9tb2RpZnlfcXAoc3RydWN0IGliX3FwICpxcCwKIAkJIHN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyLAogCQkgaW50IHFwX2F0dHJfbWFzaykKQEAgLTMyMiwxMSArNTc0LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGliX2Rlc3Ryb3lfY3EpOwogCi1pbnQgaWJfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqY3EsCi0gICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgY3FlKQoraW50IGliX3Jlc2l6ZV9jcShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgY3FlKQogewogCXJldHVybiBjcS0+ZGV2aWNlLT5yZXNpemVfY3EgPwotCQljcS0+ZGV2aWNlLT5yZXNpemVfY3EoY3EsIGNxZSkgOiAtRU5PU1lTOworCQljcS0+ZGV2aWNlLT5yZXNpemVfY3EoY3EsIGNxZSwgTlVMTCkgOiAtRU5PU1lTOwogfQogRVhQT1JUX1NZTUJPTChpYl9yZXNpemVfY3EpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hdi5jCmluZGV4IGExOWUwZWQuLmYwMjNkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hdi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hdi5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAlzd2l0Y2ggKGFoLT50eXBlKSB7CiAJY2FzZSBNVEhDQV9BSF9PTl9IQ0E6CiAJCW10aGNhX2ZyZWUoJmRldi0+YXZfdGFibGUuYWxsb2MsCi0gCQkJICAgKGFoLT5hdmRtYSAtIGRldi0+YXZfdGFibGUuZGRyX2F2X2Jhc2UpIC8KKwkJCSAgIChhaC0+YXZkbWEgLSBkZXYtPmF2X3RhYmxlLmRkcl9hdl9iYXNlKSAvCiAJCQkgICBNVEhDQV9BVl9TSVpFKTsKIAkJYnJlYWs7CiAKQEAgLTE5Myw2ICsxOTMsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IG10aGNhX2FoX3F1ZXJ5KHN0cnVjdCBpYl9haCAqaWJhaCwgc3RydWN0IGliX2FoX2F0dHIgKmF0dHIpCit7CisJc3RydWN0IG10aGNhX2FoICphaCAgID0gdG9fbWFoKGliYWgpOworCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9IHRvX21kZXYoaWJhaC0+ZGV2aWNlKTsKKworCS8qIE9ubHkgaW1wbGVtZW50IGZvciBNQUQgYW5kIG1lbWZyZWUgYWggZm9yIG5vdy4gKi8KKwlpZiAoYWgtPnR5cGUgPT0gTVRIQ0FfQUhfT05fSENBKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCW1lbXNldChhdHRyLCAwLCBzaXplb2YgKmF0dHIpOworCWF0dHItPmRsaWQgICAgICAgICAgPSBiZTE2X3RvX2NwdShhaC0+YXYtPmRsaWQpOworCWF0dHItPnNsICAgICAgICAgICAgPSBiZTMyX3RvX2NwdShhaC0+YXYtPnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDI4OworCWF0dHItPnN0YXRpY19yYXRlICAgPSBhaC0+YXYtPm1zZ19zciAmIDB4NzsKKwlhdHRyLT5zcmNfcGF0aF9iaXRzID0gYWgtPmF2LT5nX3NsaWQgJiAweDdGOworCWF0dHItPnBvcnRfbnVtICAgICAgPSBiZTMyX3RvX2NwdShhaC0+YXYtPnBvcnRfcGQpID4+IDI0OworCWF0dHItPmFoX2ZsYWdzICAgICAgPSBtdGhjYV9haF9ncmhfcHJlc2VudChhaCkgPyBJQl9BSF9HUkggOiAwOworCisJaWYgKGF0dHItPmFoX2ZsYWdzKSB7CisJCWF0dHItPmdyaC50cmFmZmljX2NsYXNzID0KKwkJCWJlMzJfdG9fY3B1KGFoLT5hdi0+c2xfdGNsYXNzX2Zsb3dsYWJlbCkgPj4gMjA7CisJCWF0dHItPmdyaC5mbG93X2xhYmVsID0KKwkJCWJlMzJfdG9fY3B1KGFoLT5hdi0+c2xfdGNsYXNzX2Zsb3dsYWJlbCkgJiAweGZmZmZmOworCQlhdHRyLT5ncmguaG9wX2xpbWl0ICA9IGFoLT5hdi0+aG9wX2xpbWl0OworCQlhdHRyLT5ncmguc2dpZF9pbmRleCA9IGFoLT5hdi0+Z2lkX2luZGV4ICYKKwkJCQkgICAgICAgKGRldi0+bGltaXRzLmdpZF90YWJsZV9sZW4gLSAxKTsKKwkJbWVtY3B5KGF0dHItPmdyaC5kZ2lkLnJhdywgYWgtPmF2LT5kZ2lkLCAxNik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIGludCBfX2RldmluaXQgbXRoY2FfaW5pdF9hdl90YWJsZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYpCiB7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwppbmRleCAyODI1NjE1Li4zNDNlY2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMTgyLDI1ICsxODIsNTggQEAKIAl1OCAgICAgICAgICAgICAgICBzdGF0dXM7CiB9OwogCitzdGF0aWMgaW50IGZ3X2NtZF9kb29yYmVsbCA9IDE7Cittb2R1bGVfcGFyYW0oZndfY21kX2Rvb3JiZWxsLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhmd19jbWRfZG9vcmJlbGwsICJwb3N0IEZXIGNvbW1hbmRzIHRocm91Z2ggZG9vcmJlbGwgcGFnZSBpZiBub256ZXJvICIKKwkJICIoYW5kIHN1cHBvcnRlZCBieSBGVykiKTsKKwogc3RhdGljIGlubGluZSBpbnQgZ29fYml0KHN0cnVjdCBtdGhjYV9kZXYgKmRldikKIHsKIAlyZXR1cm4gcmVhZGwoZGV2LT5oY3IgKyBIQ1JfU1RBVFVTX09GRlNFVCkgJgogCQlzd2FiMzIoMSA8PCBIQ1JfR09fQklUKTsKIH0KIAotc3RhdGljIGludCBtdGhjYV9jbWRfcG9zdChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCi0JCQkgIHU2NCBpbl9wYXJhbSwKLQkJCSAgdTY0IG91dF9wYXJhbSwKLQkJCSAgdTMyIGluX21vZGlmaWVyLAotCQkJICB1OCBvcF9tb2RpZmllciwKLQkJCSAgdTE2IG9wLAotCQkJICB1MTYgdG9rZW4sCi0JCQkgIGludCBldmVudCkKK3N0YXRpYyB2b2lkIG10aGNhX2NtZF9wb3N0X2RiZWxsKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKKwkJCQkgdTY0IGluX3BhcmFtLAorCQkJCSB1NjQgb3V0X3BhcmFtLAorCQkJCSB1MzIgaW5fbW9kaWZpZXIsCisJCQkJIHU4IG9wX21vZGlmaWVyLAorCQkJCSB1MTYgb3AsCisJCQkJIHUxNiB0b2tlbikKIHsKLQlpbnQgZXJyID0gMDsKKwl2b2lkIF9faW9tZW0gKnB0ciA9IGRldi0+Y21kLmRiZWxsX21hcDsKKwl1MTYgKm9mZnMgPSBkZXYtPmNtZC5kYmVsbF9vZmZzZXRzOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5jbWQuaGNyX211dGV4KTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihpbl9wYXJhbSA+PiAzMiksICAgICAgICAgICBwdHIgKyBvZmZzWzBdKTsKKwl3bWIoKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihpbl9wYXJhbSAmIDB4ZmZmZmZmZmZ1bCksICBwdHIgKyBvZmZzWzFdKTsKKwl3bWIoKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihpbl9tb2RpZmllciksICAgICAgICAgICAgICBwdHIgKyBvZmZzWzJdKTsKKwl3bWIoKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihvdXRfcGFyYW0gPj4gMzIpLCAgICAgICAgICBwdHIgKyBvZmZzWzNdKTsKKwl3bWIoKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMihvdXRfcGFyYW0gJiAweGZmZmZmZmZmdWwpLCBwdHIgKyBvZmZzWzRdKTsKKwl3bWIoKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMih0b2tlbiA8PCAxNiksICAgICAgICAgICAgICBwdHIgKyBvZmZzWzVdKTsKKwl3bWIoKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMigoMSA8PCBIQ1JfR09fQklUKSAgICAgICAgICAgICAgICB8CisJCQkJCSAgICAgICAoMSA8PCBIQ0FfRV9CSVQpICAgICAgICAgICAgICAgICB8CisJCQkJCSAgICAgICAob3BfbW9kaWZpZXIgPDwgSENSX09QTU9EX1NISUZUKSB8CisJCQkJCSAgICAgICAgb3ApLCAgICAgICAgICAgICAgICAgICAgICBwdHIgKyBvZmZzWzZdKTsKKwl3bWIoKTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgKyBvZmZzWzddKTsKKwl3bWIoKTsKK30KIAorc3RhdGljIGludCBtdGhjYV9jbWRfcG9zdF9oY3Ioc3RydWN0IG10aGNhX2RldiAqZGV2LAorCQkJICAgICAgdTY0IGluX3BhcmFtLAorCQkJICAgICAgdTY0IG91dF9wYXJhbSwKKwkJCSAgICAgIHUzMiBpbl9tb2RpZmllciwKKwkJCSAgICAgIHU4IG9wX21vZGlmaWVyLAorCQkJICAgICAgdTE2IG9wLAorCQkJICAgICAgdTE2IHRva2VuLAorCQkJICAgICAgaW50IGV2ZW50KQorewogCWlmIChldmVudCkgewogCQl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgKyBHT19CSVRfVElNRU9VVDsKIApAQCAtMjEwLDEwICsyNDMsOCBAQAogCQl9CiAJfQogCi0JaWYgKGdvX2JpdChkZXYpKSB7Ci0JCWVyciA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoZ29fYml0KGRldikpCisJCXJldHVybiAtRUFHQUlOOwogCiAJLyoKIAkgKiBXZSB1c2Ugd3JpdGVsIChpbnN0ZWFkIG9mIHNvbWV0aGluZyBsaWtlIG1lbWNweV90b2lvKQpAQCAtMjM2LDcgKzI2NywyOSBAQAogCQkJCQkgICAgICAgKG9wX21vZGlmaWVyIDw8IEhDUl9PUE1PRF9TSElGVCkgfAogCQkJCQkgICAgICAgb3ApLCAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5oY3IgKyA2ICogNCk7CiAKLW91dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGhjYV9jbWRfcG9zdChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCisJCQkgIHU2NCBpbl9wYXJhbSwKKwkJCSAgdTY0IG91dF9wYXJhbSwKKwkJCSAgdTMyIGluX21vZGlmaWVyLAorCQkJICB1OCBvcF9tb2RpZmllciwKKwkJCSAgdTE2IG9wLAorCQkJICB1MTYgdG9rZW4sCisJCQkgIGludCBldmVudCkKK3sKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+Y21kLmhjcl9tdXRleCk7CisKKwlpZiAoZXZlbnQgJiYgZGV2LT5jbWQuZmxhZ3MgJiBNVEhDQV9DTURfUE9TVF9ET09SQkVMTFMgJiYgZndfY21kX2Rvb3JiZWxsKQorCQltdGhjYV9jbWRfcG9zdF9kYmVsbChkZXYsIGluX3BhcmFtLCBvdXRfcGFyYW0sIGluX21vZGlmaWVyLAorCQkJCQkgICBvcF9tb2RpZmllciwgb3AsIHRva2VuKTsKKwllbHNlCisJCWVyciA9IG10aGNhX2NtZF9wb3N0X2hjcihkZXYsIGluX3BhcmFtLCBvdXRfcGFyYW0sIGluX21vZGlmaWVyLAorCQkJCQkgb3BfbW9kaWZpZXIsIG9wLCB0b2tlbiwgZXZlbnQpOworCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmNtZC5oY3JfbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yNzUsNyArMzI4LDcgQEAKIAl9CiAKIAlpZiAob3V0X2lzX2ltbSkKLQkJKm91dF9wYXJhbSA9IAorCQkqb3V0X3BhcmFtID0KIAkJCSh1NjQpIGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMikKIAkJCQkJICBfX3Jhd19yZWFkbChkZXYtPmhjciArIEhDUl9PVVRfUEFSQU1fT0ZGU0VUKSkgPDwgMzIgfAogCQkJKHU2NCkgYmUzMl90b19jcHUoKF9fZm9yY2UgX19iZTMyKQpAQCAtMzg2LDcgKzQzOSw3IEBACiAJCQkgdW5zaWduZWQgbG9uZyB0aW1lb3V0LAogCQkJIHU4ICpzdGF0dXMpCiB7Ci0JaWYgKGRldi0+Y21kLnVzZV9ldmVudHMpCisJaWYgKGRldi0+Y21kLmZsYWdzICYgTVRIQ0FfQ01EX1VTRV9FVkVOVFMpCiAJCXJldHVybiBtdGhjYV9jbWRfd2FpdChkZXYsIGluX3BhcmFtLCAmb3V0X3BhcmFtLCAwLAogCQkJCSAgICAgIGluX21vZGlmaWVyLCBvcF9tb2RpZmllciwgb3AsCiAJCQkJICAgICAgdGltZW91dCwgc3RhdHVzKTsKQEAgLTQyMyw3ICs0NzYsNyBAQAogCQkJIHVuc2lnbmVkIGxvbmcgdGltZW91dCwKIAkJCSB1OCAqc3RhdHVzKQogewotCWlmIChkZXYtPmNtZC51c2VfZXZlbnRzKQorCWlmIChkZXYtPmNtZC5mbGFncyAmIE1USENBX0NNRF9VU0VfRVZFTlRTKQogCQlyZXR1cm4gbXRoY2FfY21kX3dhaXQoZGV2LCBpbl9wYXJhbSwgb3V0X3BhcmFtLCAxLAogCQkJCSAgICAgIGluX21vZGlmaWVyLCBvcF9tb2RpZmllciwgb3AsCiAJCQkJICAgICAgdGltZW91dCwgc3RhdHVzKTsKQEAgLTQzNyw3ICs0OTAsNyBAQAogewogCW11dGV4X2luaXQoJmRldi0+Y21kLmhjcl9tdXRleCk7CiAJc2VtYV9pbml0KCZkZXYtPmNtZC5wb2xsX3NlbSwgMSk7Ci0JZGV2LT5jbWQudXNlX2V2ZW50cyA9IDA7CisJZGV2LT5jbWQuZmxhZ3MgPSAwOwogCiAJZGV2LT5oY3IgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApICsgTVRIQ0FfSENSX0JBU0UsCiAJCQkgICBNVEhDQV9IQ1JfU0laRSk7CkBAIC00NjEsNiArNTE0LDggQEAKIHsKIAlwY2lfcG9vbF9kZXN0cm95KGRldi0+Y21kLnBvb2wpOwogCWlvdW5tYXAoZGV2LT5oY3IpOworCWlmIChkZXYtPmNtZC5mbGFncyAmIE1USENBX0NNRF9QT1NUX0RPT1JCRUxMUykKKwkJaW91bm1hcChkZXYtPmNtZC5kYmVsbF9tYXApOwogfQogCiAvKgpAQCAtNDk4LDcgKzU1Myw4IEBACiAJCTsgLyogbm90aGluZyAqLwogCS0tZGV2LT5jbWQudG9rZW5fbWFzazsKIAotCWRldi0+Y21kLnVzZV9ldmVudHMgPSAxOworCWRldi0+Y21kLmZsYWdzIHw9IE1USENBX0NNRF9VU0VfRVZFTlRTOworCiAJZG93bigmZGV2LT5jbWQucG9sbF9zZW0pOwogCiAJcmV0dXJuIDA7CkBAIC01MTEsNyArNTY3LDcgQEAKIHsKIAlpbnQgaTsKIAotCWRldi0+Y21kLnVzZV9ldmVudHMgPSAwOworCWRldi0+Y21kLmZsYWdzICY9IH5NVEhDQV9DTURfVVNFX0VWRU5UUzsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNtZC5tYXhfY21kczsgKytpKQogCQlkb3duKCZkZXYtPmNtZC5ldmVudF9zZW0pOwpAQCAtNTk2LDggKzY1Miw5IEBACiAJCSAqIGFkZHJlc3Mgb3Igc2l6ZSBhbmQgdXNlIHRoYXQgYXMgb3VyIGxvZzIgc2l6ZS4KIAkJICovCiAJCWxnID0gZmZzKG10aGNhX2ljbV9hZGRyKCZpdGVyKSB8IG10aGNhX2ljbV9zaXplKCZpdGVyKSkgLSAxOwotCQlpZiAobGcgPCAxMikgewotCQkJbXRoY2Ffd2FybihkZXYsICJHb3QgRlcgYXJlYSBub3QgYWxpZ25lZCB0byA0SyAoJWxseC8lbHgpLlxuIiwKKwkJaWYgKGxnIDwgTVRIQ0FfSUNNX1BBR0VfU0hJRlQpIHsKKwkJCW10aGNhX3dhcm4oZGV2LCAiR290IEZXIGFyZWEgbm90IGFsaWduZWQgdG8gJWQgKCVsbHgvJWx4KS5cbiIsCisJCQkJICAgTVRIQ0FfSUNNX1BBR0VfU0laRSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBtdGhjYV9pY21fYWRkcigmaXRlciksCiAJCQkJICAgbXRoY2FfaWNtX3NpemUoJml0ZXIpKTsKIAkJCWVyciA9IC1FSU5WQUw7CkBAIC02MDksOCArNjY2LDkgQEAKIAkJCQl2aXJ0ICs9IDEgPDwgbGc7CiAJCQl9CiAKLQkJCXBhZ2VzW25lbnQgKiAyICsgMV0gPSBjcHVfdG9fYmU2NCgobXRoY2FfaWNtX2FkZHIoJml0ZXIpICsKLQkJCQkJCQkgICAoaSA8PCBsZykpIHwgKGxnIC0gMTIpKTsKKwkJCXBhZ2VzW25lbnQgKiAyICsgMV0gPQorCQkJCWNwdV90b19iZTY0KChtdGhjYV9pY21fYWRkcigmaXRlcikgKyAoaSA8PCBsZykpIHwKKwkJCQkJICAgIChsZyAtIE1USENBX0lDTV9QQUdFX1NISUZUKSk7CiAJCQl0cyArPSAxIDw8IChsZyAtIDEwKTsKIAkJCSsrdGM7CiAKQEAgLTY2MSwxMiArNzE5LDQxIEBACiAJcmV0dXJuIG10aGNhX2NtZChkZXYsIDAsIDAsIDAsIENNRF9SVU5fRlcsIENNRF9USU1FX0NMQVNTX0EsIHN0YXR1cyk7CiB9CiAKK3N0YXRpYyB2b2lkIG10aGNhX3NldHVwX2NtZF9kb29yYmVsbHMoc3RydWN0IG10aGNhX2RldiAqZGV2LCB1NjQgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdTE2IG1heF9vZmYgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKwkJbWF4X29mZiA9IG1heChtYXhfb2ZmLCBkZXYtPmNtZC5kYmVsbF9vZmZzZXRzW2ldKTsKKworCWlmICgoYmFzZSAmIFBBR0VfTUFTSykgIT0gKChiYXNlICsgbWF4X29mZikgJiBQQUdFX01BU0spKSB7CisJCW10aGNhX3dhcm4oZGV2LCAiRmlybXdhcmUgZG9vcmJlbGwgcmVnaW9uIGF0IDB4JTAxNmxseCwgIgorCQkJICAgImxlbmd0aCAweCV4IGNyb3NzZXMgYSBwYWdlIGJvdW5kYXJ5XG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmFzZSwgbWF4X29mZik7CisJCXJldHVybjsKKwl9CisKKwlhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMikgKworCQkoKHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAyKSAtIDEpICYgYmFzZSk7CisJZGV2LT5jbWQuZGJlbGxfbWFwID0gaW9yZW1hcChhZGRyLCBtYXhfb2ZmICsgc2l6ZW9mKHUzMikpOworCWlmICghZGV2LT5jbWQuZGJlbGxfbWFwKQorCQlyZXR1cm47CisKKwlkZXYtPmNtZC5mbGFncyB8PSBNVEhDQV9DTURfUE9TVF9ET09SQkVMTFM7CisJbXRoY2FfZGJnKGRldiwgIk1hcHBlZCBkb29yYmVsbCBwYWdlIGZvciBwb3N0aW5nIEZXIGNvbW1hbmRzXG4iKTsKK30KKwogaW50IG10aGNhX1FVRVJZX0ZXKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTggKnN0YXR1cykKIHsKIAlzdHJ1Y3QgbXRoY2FfbWFpbGJveCAqbWFpbGJveDsKIAl1MzIgKm91dGJveDsKKwl1NjQgYmFzZTsKKwl1MzIgdG1wOwogCWludCBlcnIgPSAwOwogCXU4IGxnOworCWludCBpOwogCiAjZGVmaW5lIFFVRVJZX0ZXX09VVF9TSVpFICAgICAgICAgICAgIDB4MTAwCiAjZGVmaW5lIFFVRVJZX0ZXX1ZFUl9PRkZTRVQgICAgICAgICAgICAweDAwCkBAIC02NzQsNiArNzYxLDEwIEBACiAjZGVmaW5lIFFVRVJZX0ZXX0VSUl9TVEFSVF9PRkZTRVQgICAgICAweDMwCiAjZGVmaW5lIFFVRVJZX0ZXX0VSUl9TSVpFX09GRlNFVCAgICAgICAweDM4CiAKKyNkZWZpbmUgUVVFUllfRldfQ01EX0RCX0VOX09GRlNFVCAgICAgIDB4MTAKKyNkZWZpbmUgUVVFUllfRldfQ01EX0RCX09GRlNFVCAgICAgICAgIDB4NTAKKyNkZWZpbmUgUVVFUllfRldfQ01EX0RCX0JBU0UgICAgICAgICAgIDB4NjAKKwogI2RlZmluZSBRVUVSWV9GV19TVEFSVF9PRkZTRVQgICAgICAgICAgMHgyMAogI2RlZmluZSBRVUVSWV9GV19FTkRfT0ZGU0VUICAgICAgICAgICAgMHgyOAogCkBAIC03MDIsMTYgKzc5MywyOSBAQAogCQkoKGRldi0+ZndfdmVyICYgMHhmZmZmMDAwMHVsbCkgPj4gMTYpIHwKIAkJKChkZXYtPmZ3X3ZlciAmIDB4MDAwMGZmZmZ1bGwpIDw8IDE2KTsKIAorCW10aGNhX2RiZyhkZXYsICJGVyB2ZXJzaW9uICUwMTJsbHgsIG1heCBjb21tYW5kcyAlZFxuIiwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKSBkZXYtPmZ3X3ZlciwgZGV2LT5jbWQubWF4X2NtZHMpOworCiAJTVRIQ0FfR0VUKGxnLCBvdXRib3gsIFFVRVJZX0ZXX01BWF9DTURfT0ZGU0VUKTsKIAlkZXYtPmNtZC5tYXhfY21kcyA9IDEgPDwgbGc7CiAJTVRIQ0FfR0VUKGRldi0+Y2F0YXNfZXJyLmFkZHIsIG91dGJveCwgUVVFUllfRldfRVJSX1NUQVJUX09GRlNFVCk7CiAJTVRIQ0FfR0VUKGRldi0+Y2F0YXNfZXJyLnNpemUsIG91dGJveCwgUVVFUllfRldfRVJSX1NJWkVfT0ZGU0VUKTsKIAotCW10aGNhX2RiZyhkZXYsICJGVyB2ZXJzaW9uICUwMTJsbHgsIG1heCBjb21tYW5kcyAlZFxuIiwKLQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBkZXYtPmZ3X3ZlciwgZGV2LT5jbWQubWF4X2NtZHMpOwogCW10aGNhX2RiZyhkZXYsICJDYXRhc3Ryb3BoaWMgZXJyb3IgYnVmZmVyIGF0IDB4JWxseCwgc2l6ZSAweCV4XG4iLAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGRldi0+Y2F0YXNfZXJyLmFkZHIsIGRldi0+Y2F0YXNfZXJyLnNpemUpOwogCisJTVRIQ0FfR0VUKHRtcCwgb3V0Ym94LCBRVUVSWV9GV19DTURfREJfRU5fT0ZGU0VUKTsKKwlpZiAodG1wICYgMHgxKSB7CisJCW10aGNhX2RiZyhkZXYsICJGVyBzdXBwb3J0cyBjb21tYW5kcyB0aHJvdWdoIGRvb3JiZWxsc1xuIik7CisKKwkJTVRIQ0FfR0VUKGJhc2UsIG91dGJveCwgUVVFUllfRldfQ01EX0RCX0JBU0UpOworCQlmb3IgKGkgPSAwOyBpIDwgTVRIQ0FfQ01EX05VTV9EQkVMTF9EV09SRFM7ICsraSkKKwkJCU1USENBX0dFVChkZXYtPmNtZC5kYmVsbF9vZmZzZXRzW2ldLCBvdXRib3gsCisJCQkJICBRVUVSWV9GV19DTURfREJfT0ZGU0VUICsgKGkgPDwgMSkpOworCisJCW10aGNhX3NldHVwX2NtZF9kb29yYmVsbHMoZGV2LCBiYXNlKTsKKwl9CisKIAlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKSB7CiAJCU1USENBX0dFVChkZXYtPmZ3LmFyYmVsLmZ3X3BhZ2VzLCAgICAgICBvdXRib3gsIFFVRVJZX0ZXX1NJWkVfT0ZGU0VUKTsKIAkJTVRIQ0FfR0VUKGRldi0+ZncuYXJiZWwuY2xyX2ludF9iYXNlLCAgIG91dGJveCwgUVVFUllfRldfQ0xSX0lOVF9CQVNFX09GRlNFVCk7CkBAIC03MjAsMTIgKzgyNCwxMiBAQAogCQltdGhjYV9kYmcoZGV2LCAiRlcgc2l6ZSAlZCBLQlxuIiwgZGV2LT5mdy5hcmJlbC5md19wYWdlcyA8PCAyKTsKIAogCQkvKgotCQkgKiBBcmJlbCBwYWdlIHNpemUgaXMgYWx3YXlzIDQgS0I7IHJvdW5kIHVwIG51bWJlciBvZgotCQkgKiBzeXN0ZW0gcGFnZXMgbmVlZGVkLgorCQkgKiBSb3VuZCB1cCBudW1iZXIgb2Ygc3lzdGVtIHBhZ2VzIG5lZWRlZCBpbiBjYXNlCisJCSAqIE1USENBX0lDTV9QQUdFX1NJWkUgPCBQQUdFX1NJWkUuCiAJCSAqLwogCQlkZXYtPmZ3LmFyYmVsLmZ3X3BhZ2VzID0KLQkJCUFMSUdOKGRldi0+ZncuYXJiZWwuZndfcGFnZXMsIFBBR0VfU0laRSA+PiAxMikgPj4KLQkJCQkoUEFHRV9TSElGVCAtIDEyKTsKKwkJCUFMSUdOKGRldi0+ZncuYXJiZWwuZndfcGFnZXMsIFBBR0VfU0laRSAvIE1USENBX0lDTV9QQUdFX1NJWkUpID4+CisJCQkJKFBBR0VfU0hJRlQgLSBNVEhDQV9JQ01fUEFHRV9TSElGVCk7CiAKIAkJbXRoY2FfZGJnKGRldiwgIkNsZWFyIGludCBAICVsbHgsIEVRIGFybSBAICVsbHgsIEVRIHNldCBDSSBAICVsbHhcbiIsCiAJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGRldi0+ZncuYXJiZWwuY2xyX2ludF9iYXNlLApAQCAtMTE3Myw3ICsxMjc3LDggQEAKIAlpbnQgZXJyOwogCiAjZGVmaW5lIElOSVRfSENBX0lOX1NJWkUgICAgICAgICAgICAgCSAweDIwMAotI2RlZmluZSBJTklUX0hDQV9GTEFHU19PRkZTRVQgICAgICAgIAkgMHgwMTQKKyNkZWZpbmUgSU5JVF9IQ0FfRkxBR1MxX09GRlNFVCAgICAgICAgICAgMHgwMGMKKyNkZWZpbmUgSU5JVF9IQ0FfRkxBR1MyX09GRlNFVCAgICAgICAgICAgMHgwMTQKICNkZWZpbmUgSU5JVF9IQ0FfUVBDX09GRlNFVCAgICAgICAgICAJIDB4MDIwCiAjZGVmaW5lICBJTklUX0hDQV9RUENfQkFTRV9PRkZTRVQgICAgCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4MTApCiAjZGVmaW5lICBJTklUX0hDQV9MT0dfUVBfT0ZGU0VUICAgICAgCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4MTcpCkBAIC0xMjE2LDE1ICsxMzIxLDE4IEBACiAKIAltZW1zZXQoaW5ib3gsIDAsIElOSVRfSENBX0lOX1NJWkUpOwogCisJaWYgKGRldi0+bXRoY2FfZmxhZ3MgJiBNVEhDQV9GTEFHX1NJTkFJX09QVCkKKwkJTVRIQ0FfUFVUKGluYm94LCAweDEsIElOSVRfSENBX0ZMQUdTMV9PRkZTRVQpOworCiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JKihpbmJveCArIElOSVRfSENBX0ZMQUdTX09GRlNFVCAvIDQpICY9IH5jcHVfdG9fYmUzMigxIDw8IDEpOworCSooaW5ib3ggKyBJTklUX0hDQV9GTEFHUzJfT0ZGU0VUIC8gNCkgJj0gfmNwdV90b19iZTMyKDEgPDwgMSk7CiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQkqKGluYm94ICsgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUIC8gNCkgfD0gY3B1X3RvX2JlMzIoMSA8PCAxKTsKKwkqKGluYm94ICsgSU5JVF9IQ0FfRkxBR1MyX09GRlNFVCAvIDQpIHw9IGNwdV90b19iZTMyKDEgPDwgMSk7CiAjZWxzZQogI2Vycm9yIEhvc3QgZW5kaWFubmVzcyBub3QgZGVmaW5lZAogI2VuZGlmCiAJLyogQ2hlY2sgcG9ydCBmb3IgVUQgYWRkcmVzcyB2ZWN0b3I6ICovCi0JKihpbmJveCArIElOSVRfSENBX0ZMQUdTX09GRlNFVCAvIDQpIHw9IGNwdV90b19iZTMyKDEpOworCSooaW5ib3ggKyBJTklUX0hDQV9GTEFHUzJfT0ZGU0VUIC8gNCkgfD0gY3B1X3RvX2JlMzIoMSk7CiAKIAkvKiBXZSBsZWF2ZSB3cWVfcXVvdGEsIHJlc3BvbmRlcl9leHUsIGV0YyBhcyAwIChkZWZhdWx0KSAqLwogCkBAIC0xNDM4LDExICsxNTQ2LDExIEBACiAJCXJldHVybiByZXQ7CiAKIAkvKgotCSAqIEFyYmVsIHBhZ2Ugc2l6ZSBpcyBhbHdheXMgNCBLQjsgcm91bmQgdXAgbnVtYmVyIG9mIHN5c3RlbQotCSAqIHBhZ2VzIG5lZWRlZC4KKwkgKiBSb3VuZCB1cCBudW1iZXIgb2Ygc3lzdGVtIHBhZ2VzIG5lZWRlZCBpbiBjYXNlCisJICogTVRIQ0FfSUNNX1BBR0VfU0laRSA8IFBBR0VfU0laRS4KIAkgKi8KLQkqYXV4X3BhZ2VzID0gKCphdXhfcGFnZXMgKyAoMSA8PCAoUEFHRV9TSElGVCAtIDEyKSkgLSAxKSA+PiAoUEFHRV9TSElGVCAtIDEyKTsKLQkqYXV4X3BhZ2VzID0gQUxJR04oKmF1eF9wYWdlcywgUEFHRV9TSVpFID4+IDEyKSA+PiAoUEFHRV9TSElGVCAtIDEyKTsKKwkqYXV4X3BhZ2VzID0gQUxJR04oKmF1eF9wYWdlcywgUEFHRV9TSVpFIC8gTVRIQ0FfSUNNX1BBR0VfU0laRSkgPj4KKwkJKFBBR0VfU0hJRlQgLSBNVEhDQV9JQ01fUEFHRV9TSElGVCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MTQsNiArMTYyMiwzNyBAQAogCQkJICAgICBDTURfVElNRV9DTEFTU19BLCBzdGF0dXMpOwogfQogCitpbnQgbXRoY2FfUkVTSVpFX0NRKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgaW50IGNxX251bSwgdTMyIGxrZXksIHU4IGxvZ19zaXplLAorCQkgICAgdTggKnN0YXR1cykKK3sKKwlzdHJ1Y3QgbXRoY2FfbWFpbGJveCAqbWFpbGJveDsKKwlfX2JlMzIgKmluYm94OworCWludCBlcnI7CisKKyNkZWZpbmUgUkVTSVpFX0NRX0lOX1NJWkUJCTB4NDAKKyNkZWZpbmUgUkVTSVpFX0NRX0xPR19TSVpFX09GRlNFVAkweDBjCisjZGVmaW5lIFJFU0laRV9DUV9MS0VZX09GRlNFVAkJMHgxYworCisJbWFpbGJveCA9IG10aGNhX2FsbG9jX21haWxib3goZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKwlpbmJveCA9IG1haWxib3gtPmJ1ZjsKKworCW1lbXNldChpbmJveCwgMCwgUkVTSVpFX0NRX0lOX1NJWkUpOworCS8qCisJICogTGVhdmUgc3RhcnQgYWRkcmVzcyBmaWVsZHMgemVyb2VkIG91dCAtLSBtdGhjYSBhc3N1bWVzIHRoYXQKKwkgKiBNUnMgZm9yIENRcyBhbHdheXMgc3RhcnQgYXQgdmlydHVhbCBhZGRyZXNzIDAuCisJICovCisJTVRIQ0FfUFVUKGluYm94LCBsb2dfc2l6ZSwgUkVTSVpFX0NRX0xPR19TSVpFX09GRlNFVCk7CisJTVRIQ0FfUFVUKGluYm94LCBsa2V5LCAgICAgUkVTSVpFX0NRX0xLRVlfT0ZGU0VUKTsKKworCWVyciA9IG10aGNhX2NtZChkZXYsIG1haWxib3gtPmRtYSwgY3FfbnVtLCAxLCBDTURfUkVTSVpFX0NRLAorCQkJQ01EX1RJTUVfQ0xBU1NfQiwgc3RhdHVzKTsKKworCW10aGNhX2ZyZWVfbWFpbGJveChkZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CisKIGludCBtdGhjYV9TVzJIV19TUlEoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfbWFpbGJveCAqbWFpbGJveCwKIAkJICAgIGludCBzcnFfbnVtLCB1OCAqc3RhdHVzKQogewpAQCAtMTUyOSwzNyArMTY2OCw2OSBAQAogCQkJICAgICBDTURfVElNRV9DTEFTU19BLCBzdGF0dXMpOwogfQogCitpbnQgbXRoY2FfUVVFUllfU1JRKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIG51bSwKKwkJICAgIHN0cnVjdCBtdGhjYV9tYWlsYm94ICptYWlsYm94LCB1OCAqc3RhdHVzKQoreworCXJldHVybiBtdGhjYV9jbWRfYm94KGRldiwgMCwgbWFpbGJveC0+ZG1hLCBudW0sIDAsCisJCQkgICAgIENNRF9RVUVSWV9TUlEsIENNRF9USU1FX0NMQVNTX0EsIHN0YXR1cyk7Cit9CisKIGludCBtdGhjYV9BUk1fU1JRKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgaW50IHNycV9udW0sIGludCBsaW1pdCwgdTggKnN0YXR1cykKIHsKIAlyZXR1cm4gbXRoY2FfY21kKGRldiwgbGltaXQsIHNycV9udW0sIDAsIENNRF9BUk1fU1JRLAogCQkJIENNRF9USU1FX0NMQVNTX0IsIHN0YXR1cyk7CiB9CiAKLWludCBtdGhjYV9NT0RJRllfUVAoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgdHJhbnMsIHUzMiBudW0sCi0JCSAgICBpbnQgaXNfZWUsIHN0cnVjdCBtdGhjYV9tYWlsYm94ICptYWlsYm94LCB1MzIgb3B0bWFzaywKK2ludCBtdGhjYV9NT0RJRllfUVAoc3RydWN0IG10aGNhX2RldiAqZGV2LCBlbnVtIGliX3FwX3N0YXRlIGN1ciwKKwkJICAgIGVudW0gaWJfcXBfc3RhdGUgbmV4dCwgdTMyIG51bSwgaW50IGlzX2VlLAorCQkgICAgc3RydWN0IG10aGNhX21haWxib3ggKm1haWxib3gsIHUzMiBvcHRtYXNrLAogCQkgICAgdTggKnN0YXR1cykKIHsKLQlzdGF0aWMgY29uc3QgdTE2IG9wW10gPSB7Ci0JCVtNVEhDQV9UUkFOU19SU1QySU5JVF0gID0gQ01EX1JTVDJJTklUX1FQRUUsCi0JCVtNVEhDQV9UUkFOU19JTklUMklOSVRdID0gQ01EX0lOSVQySU5JVF9RUEVFLAotCQlbTVRIQ0FfVFJBTlNfSU5JVDJSVFJdICA9IENNRF9JTklUMlJUUl9RUEVFLAotCQlbTVRIQ0FfVFJBTlNfUlRSMlJUU10gICA9IENNRF9SVFIyUlRTX1FQRUUsCi0JCVtNVEhDQV9UUkFOU19SVFMyUlRTXSAgID0gQ01EX1JUUzJSVFNfUVBFRSwKLQkJW01USENBX1RSQU5TX1NRRVJSMlJUU10gPSBDTURfU1FFUlIyUlRTX1FQRUUsCi0JCVtNVEhDQV9UUkFOU19BTlkyRVJSXSAgID0gQ01EXzJFUlJfUVBFRSwKLQkJW01USENBX1RSQU5TX1JUUzJTUURdICAgPSBDTURfUlRTMlNRRF9RUEVFLAotCQlbTVRIQ0FfVFJBTlNfU1FEMlNRRF0gICA9IENNRF9TUUQyU1FEX1FQRUUsCi0JCVtNVEhDQV9UUkFOU19TUUQyUlRTXSAgID0gQ01EX1NRRDJSVFNfUVBFRSwKLQkJW01USENBX1RSQU5TX0FOWTJSU1RdICAgPSBDTURfRVJSMlJTVF9RUEVFCisJc3RhdGljIGNvbnN0IHUxNiBvcFtJQl9RUFNfRVJSICsgMV1bSUJfUVBTX0VSUiArIDFdID0geworCQlbSUJfUVBTX1JFU0VUXSA9IHsKKwkJCVtJQl9RUFNfUkVTRVRdCT0gQ01EX0VSUjJSU1RfUVBFRSwKKwkJCVtJQl9RUFNfRVJSXQk9IENNRF8yRVJSX1FQRUUsCisJCQlbSUJfUVBTX0lOSVRdCT0gQ01EX1JTVDJJTklUX1FQRUUsCisJCX0sCisJCVtJQl9RUFNfSU5JVF0gID0geworCQkJW0lCX1FQU19SRVNFVF0JPSBDTURfRVJSMlJTVF9RUEVFLAorCQkJW0lCX1FQU19FUlJdCT0gQ01EXzJFUlJfUVBFRSwKKwkJCVtJQl9RUFNfSU5JVF0JPSBDTURfSU5JVDJJTklUX1FQRUUsCisJCQlbSUJfUVBTX1JUUl0JPSBDTURfSU5JVDJSVFJfUVBFRSwKKwkJfSwKKwkJW0lCX1FQU19SVFJdICAgPSB7CisJCQlbSUJfUVBTX1JFU0VUXQk9IENNRF9FUlIyUlNUX1FQRUUsCisJCQlbSUJfUVBTX0VSUl0JPSBDTURfMkVSUl9RUEVFLAorCQkJW0lCX1FQU19SVFNdCT0gQ01EX1JUUjJSVFNfUVBFRSwKKwkJfSwKKwkJW0lCX1FQU19SVFNdICAgPSB7CisJCQlbSUJfUVBTX1JFU0VUXQk9IENNRF9FUlIyUlNUX1FQRUUsCisJCQlbSUJfUVBTX0VSUl0JPSBDTURfMkVSUl9RUEVFLAorCQkJW0lCX1FQU19SVFNdCT0gQ01EX1JUUzJSVFNfUVBFRSwKKwkJCVtJQl9RUFNfU1FEXQk9IENNRF9SVFMyU1FEX1FQRUUsCisJCX0sCisJCVtJQl9RUFNfU1FEXSA9IHsKKwkJCVtJQl9RUFNfUkVTRVRdCT0gQ01EX0VSUjJSU1RfUVBFRSwKKwkJCVtJQl9RUFNfRVJSXQk9IENNRF8yRVJSX1FQRUUsCisJCQlbSUJfUVBTX1JUU10JPSBDTURfU1FEMlJUU19RUEVFLAorCQkJW0lCX1FQU19TUURdCT0gQ01EX1NRRDJTUURfUVBFRSwKKwkJfSwKKwkJW0lCX1FQU19TUUVdID0geworCQkJW0lCX1FQU19SRVNFVF0JPSBDTURfRVJSMlJTVF9RUEVFLAorCQkJW0lCX1FQU19FUlJdCT0gQ01EXzJFUlJfUVBFRSwKKwkJCVtJQl9RUFNfUlRTXQk9IENNRF9TUUVSUjJSVFNfUVBFRSwKKwkJfSwKKwkJW0lCX1FQU19FUlJdID0geworCQkJW0lCX1FQU19SRVNFVF0JPSBDTURfRVJSMlJTVF9RUEVFLAorCQkJW0lCX1FQU19FUlJdCT0gQ01EXzJFUlJfUVBFRSwKKwkJfQogCX07CisKIAl1OCBvcF9tb2QgPSAwOwogCWludCBteV9tYWlsYm94ID0gMDsKIAlpbnQgZXJyOwogCi0JaWYgKHRyYW5zIDwgMCB8fCB0cmFucyA+PSBBUlJBWV9TSVpFKG9wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodHJhbnMgPT0gTVRIQ0FfVFJBTlNfQU5ZMlJTVCkgeworCWlmIChvcFtjdXJdW25leHRdID09IENNRF9FUlIyUlNUX1FQRUUpIHsKIAkJb3BfbW9kID0gMzsJLyogZG9uJ3Qgd3JpdGUgb3V0Ym94LCBhbnktPnJlc2V0ICovCiAKIAkJLyogRm9yIGRlYnVnZ2luZyAqLwpAQCAtMTU3MSwyNiArMTc0MiwxMCBAQAogCQkJfSBlbHNlCiAJCQkJbWFpbGJveCA9IE5VTEw7CiAJCX0KLQl9IGVsc2UgewotCQlpZiAoMCkgewotCQkJaW50IGk7Ci0JCQltdGhjYV9kYmcoZGV2LCAiRHVtcGluZyBRUCBjb250ZXh0OlxuIik7Ci0JCQlwcmludGsoIiAgb3B0IHBhcmFtIG1hc2s6ICUwOHhcbiIsIGJlMzJfdG9fY3B1cChtYWlsYm94LT5idWYpKTsKLQkJCWZvciAoaSA9IDA7IGkgPCAweDEwMCAvIDQ7ICsraSkgewotCQkJCWlmIChpICUgOCA9PSAwKQotCQkJCQlwcmludGsoIiAgWyUwMnhdICIsIGkgKiA0KTsKLQkJCQlwcmludGsoIiAlMDh4IiwKLQkJCQkgICAgICAgYmUzMl90b19jcHUoKChfX2JlMzIgKikgbWFpbGJveC0+YnVmKVtpICsgMl0pKTsKLQkJCQlpZiAoKGkgKyAxKSAlIDggPT0gMCkKLQkJCQkJcHJpbnRrKCJcbiIpOwotCQkJfQotCQl9Ci0JfQogCi0JaWYgKHRyYW5zID09IE1USENBX1RSQU5TX0FOWTJSU1QpIHsKIAkJZXJyID0gbXRoY2FfY21kX2JveChkZXYsIDAsIG1haWxib3ggPyBtYWlsYm94LT5kbWEgOiAwLAogCQkJCSAgICAoISFpc19lZSA8PCAyNCkgfCBudW0sIG9wX21vZCwKLQkJCQkgICAgb3BbdHJhbnNdLCBDTURfVElNRV9DTEFTU19DLCBzdGF0dXMpOworCQkJCSAgICBvcFtjdXJdW25leHRdLCBDTURfVElNRV9DTEFTU19DLCBzdGF0dXMpOwogCiAJCWlmICgwICYmIG1haWxib3gpIHsKIAkJCWludCBpOwpAQCAtMTYwNiwxMiArMTc2MSwyNiBAQAogCQkJfQogCQl9CiAKLQl9IGVsc2UKLQkJZXJyID0gbXRoY2FfY21kKGRldiwgbWFpbGJveC0+ZG1hLCAoISFpc19lZSA8PCAyNCkgfCBudW0sCi0JCQkJb3BfbW9kLCBvcFt0cmFuc10sIENNRF9USU1FX0NMQVNTX0MsIHN0YXR1cyk7CisJCWlmIChteV9tYWlsYm94KQorCQkJbXRoY2FfZnJlZV9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJfSBlbHNlIHsKKwkJaWYgKDApIHsKKwkJCWludCBpOworCQkJbXRoY2FfZGJnKGRldiwgIkR1bXBpbmcgUVAgY29udGV4dDpcbiIpOworCQkJcHJpbnRrKCIgIG9wdCBwYXJhbSBtYXNrOiAlMDh4XG4iLCBiZTMyX3RvX2NwdXAobWFpbGJveC0+YnVmKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgMHgxMDAgLyA0OyArK2kpIHsKKwkJCQlpZiAoaSAlIDggPT0gMCkKKwkJCQkJcHJpbnRrKCIgIFslMDJ4XSAiLCBpICogNCk7CisJCQkJcHJpbnRrKCIgJTA4eCIsCisJCQkJICAgICAgIGJlMzJfdG9fY3B1KCgoX19iZTMyICopIG1haWxib3gtPmJ1ZilbaSArIDJdKSk7CisJCQkJaWYgKChpICsgMSkgJSA4ID09IDApCisJCQkJCXByaW50aygiXG4iKTsKKwkJCX0KKwkJfQogCi0JaWYgKG15X21haWxib3gpCi0JCW10aGNhX2ZyZWVfbWFpbGJveChkZXYsIG1haWxib3gpOworCQllcnIgPSBtdGhjYV9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIG9wdG1hc2sgfCAoISFpc19lZSA8PCAyNCkgfCBudW0sCisJCQkJb3BfbW9kLCBvcFtjdXJdW25leHRdLCBDTURfVElNRV9DTEFTU19DLCBzdGF0dXMpOworCX0KIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmgKaW5kZXggMTgxNzViZS4uZTRlYzM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC03Myw5ICs3NCw5IEBACiAJTVRIQ0FfQ01EX1NUQVRfUkVHX0JPVU5EICAgICAgPSAweDIxLAogCS8qIEhDQSBsb2NhbCBhdHRhY2hlZCBtZW1vcnkgbm90IHByZXNlbnQ6ICovCiAJTVRIQ0FfQ01EX1NUQVRfTEFNX05PVF9QUkUgICAgPSAweDIyLAotICAgICAgICAvKiBCYWQgbWFuYWdlbWVudCBwYWNrZXQgKHNpbGVudGx5IGRpc2NhcmRlZCk6ICovCisJLyogQmFkIG1hbmFnZW1lbnQgcGFja2V0IChzaWxlbnRseSBkaXNjYXJkZWQpOiAqLwogCU1USENBX0NNRF9TVEFUX0JBRF9QS1QgCSAgICAgID0gMHgzMCwKLSAgICAgICAgLyogTW9yZSBvdXRzdGFuZGluZyBDUUVzIGluIENRIHRoYW4gbmV3IENRIHNpemU6ICovCisJLyogTW9yZSBvdXRzdGFuZGluZyBDUUVzIGluIENRIHRoYW4gbmV3IENRIHNpemU6ICovCiAJTVRIQ0FfQ01EX1NUQVRfQkFEX1NJWkUgICAgICAgPSAweDQwCiB9OwogCkBAIC0yOTgsMTMgKzI5OSwxOCBAQAogCQkgICBpbnQgY3FfbnVtLCB1OCAqc3RhdHVzKTsKIGludCBtdGhjYV9IVzJTV19DUShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9tYWlsYm94ICptYWlsYm94LAogCQkgICBpbnQgY3FfbnVtLCB1OCAqc3RhdHVzKTsKK2ludCBtdGhjYV9SRVNJWkVfQ1Eoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgY3FfbnVtLCB1MzIgbGtleSwgdTggbG9nX3NpemUsCisJCSAgICB1OCAqc3RhdHVzKTsKIGludCBtdGhjYV9TVzJIV19TUlEoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfbWFpbGJveCAqbWFpbGJveCwKIAkJICAgIGludCBzcnFfbnVtLCB1OCAqc3RhdHVzKTsKIGludCBtdGhjYV9IVzJTV19TUlEoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfbWFpbGJveCAqbWFpbGJveCwKIAkJICAgIGludCBzcnFfbnVtLCB1OCAqc3RhdHVzKTsKK2ludCBtdGhjYV9RVUVSWV9TUlEoc3RydWN0IG10aGNhX2RldiAqZGV2LCB1MzIgbnVtLAorCQkgICAgc3RydWN0IG10aGNhX21haWxib3ggKm1haWxib3gsIHU4ICpzdGF0dXMpOwogaW50IG10aGNhX0FSTV9TUlEoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgc3JxX251bSwgaW50IGxpbWl0LCB1OCAqc3RhdHVzKTsKLWludCBtdGhjYV9NT0RJRllfUVAoc3RydWN0IG10aGNhX2RldiAqZGV2LCBpbnQgdHJhbnMsIHUzMiBudW0sCi0JCSAgICBpbnQgaXNfZWUsIHN0cnVjdCBtdGhjYV9tYWlsYm94ICptYWlsYm94LCB1MzIgb3B0bWFzaywKK2ludCBtdGhjYV9NT0RJRllfUVAoc3RydWN0IG10aGNhX2RldiAqZGV2LCBlbnVtIGliX3FwX3N0YXRlIGN1ciwKKwkJICAgIGVudW0gaWJfcXBfc3RhdGUgbmV4dCwgdTMyIG51bSwgaW50IGlzX2VlLAorCQkgICAgc3RydWN0IG10aGNhX21haWxib3ggKm1haWxib3gsIHUzMiBvcHRtYXNrLAogCQkgICAgdTggKnN0YXR1cyk7CiBpbnQgbXRoY2FfUVVFUllfUVAoc3RydWN0IG10aGNhX2RldiAqZGV2LCB1MzIgbnVtLCBpbnQgaXNfZWUsCiAJCSAgIHN0cnVjdCBtdGhjYV9tYWlsYm94ICptYWlsYm94LCB1OCAqc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMKaW5kZXggOTZmMWE4Ni4uNzZhYWJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNCBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTE1MCwyNCArMTUwLDI5IEBACiAjZGVmaW5lIE1USENBX0FSQkVMX0NRX0RCX1JFUV9OT1QgICAgICAoMiA8PCAyNCkKICNkZWZpbmUgTVRIQ0FfQVJCRUxfQ1FfREJfUkVRX05PVF9NVUxUICgzIDw8IDI0KQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtdGhjYV9jcWUgKmdldF9jcWUoc3RydWN0IG10aGNhX2NxICpjcSwgaW50IGVudHJ5KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRoY2FfY3FlICpnZXRfY3FlX2Zyb21fYnVmKHN0cnVjdCBtdGhjYV9jcV9idWYgKmJ1ZiwKKwkJCQkJCSBpbnQgZW50cnkpCiB7Ci0JaWYgKGNxLT5pc19kaXJlY3QpCi0JCXJldHVybiBjcS0+cXVldWUuZGlyZWN0LmJ1ZiArIChlbnRyeSAqIE1USENBX0NRX0VOVFJZX1NJWkUpOworCWlmIChidWYtPmlzX2RpcmVjdCkKKwkJcmV0dXJuIGJ1Zi0+cXVldWUuZGlyZWN0LmJ1ZiArIChlbnRyeSAqIE1USENBX0NRX0VOVFJZX1NJWkUpOwogCWVsc2UKLQkJcmV0dXJuIGNxLT5xdWV1ZS5wYWdlX2xpc3RbZW50cnkgKiBNVEhDQV9DUV9FTlRSWV9TSVpFIC8gUEFHRV9TSVpFXS5idWYKKwkJcmV0dXJuIGJ1Zi0+cXVldWUucGFnZV9saXN0W2VudHJ5ICogTVRIQ0FfQ1FfRU5UUllfU0laRSAvIFBBR0VfU0laRV0uYnVmCiAJCQkrIChlbnRyeSAqIE1USENBX0NRX0VOVFJZX1NJWkUpICUgUEFHRV9TSVpFOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtdGhjYV9jcWUgKmNxZV9zdyhzdHJ1Y3QgbXRoY2FfY3EgKmNxLCBpbnQgaSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10aGNhX2NxZSAqZ2V0X2NxZShzdHJ1Y3QgbXRoY2FfY3EgKmNxLCBpbnQgZW50cnkpCiB7Ci0Jc3RydWN0IG10aGNhX2NxZSAqY3FlID0gZ2V0X2NxZShjcSwgaSk7CisJcmV0dXJuIGdldF9jcWVfZnJvbV9idWYoJmNxLT5idWYsIGVudHJ5KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRoY2FfY3FlICpjcWVfc3coc3RydWN0IG10aGNhX2NxZSAqY3FlKQorewogCXJldHVybiBNVEhDQV9DUV9FTlRSWV9PV05FUl9IVyAmIGNxZS0+b3duZXIgPyBOVUxMIDogY3FlOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGhjYV9jcWUgKm5leHRfY3FlX3N3KHN0cnVjdCBtdGhjYV9jcSAqY3EpCiB7Ci0JcmV0dXJuIGNxZV9zdyhjcSwgY3EtPmNvbnNfaW5kZXggJiBjcS0+aWJjcS5jcWUpOworCXJldHVybiBjcWVfc3coZ2V0X2NxZShjcSwgY3EtPmNvbnNfaW5kZXggJiBjcS0+aWJjcS5jcWUpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jcWVfaHcoc3RydWN0IG10aGNhX2NxZSAqY3FlKQpAQCAtMjg5LDcgKzI5NCw3IEBACiAJICogZnJvbSBvdXIgUVAgYW5kIHRoZXJlZm9yZSBkb24ndCBuZWVkIHRvIGJlIGNoZWNrZWQuCiAJICovCiAJZm9yIChwcm9kX2luZGV4ID0gY3EtPmNvbnNfaW5kZXg7Ci0JICAgICBjcWVfc3coY3EsIHByb2RfaW5kZXggJiBjcS0+aWJjcS5jcWUpOworCSAgICAgY3FlX3N3KGdldF9jcWUoY3EsIHByb2RfaW5kZXggJiBjcS0+aWJjcS5jcWUpKTsKIAkgICAgICsrcHJvZF9pbmRleCkKIAkJaWYgKHByb2RfaW5kZXggPT0gY3EtPmNvbnNfaW5kZXggKyBjcS0+aWJjcS5jcWUpCiAJCQlicmVhazsKQEAgLTMyNCwxMiArMzI5LDU4IEBACiAJCXdha2VfdXAoJmNxLT53YWl0KTsKIH0KIAotc3RhdGljIGludCBoYW5kbGVfZXJyb3JfY3FlKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX2NxICpjcSwKLQkJCSAgICBzdHJ1Y3QgbXRoY2FfcXAgKnFwLCBpbnQgd3FlX2luZGV4LCBpbnQgaXNfc2VuZCwKLQkJCSAgICBzdHJ1Y3QgbXRoY2FfZXJyX2NxZSAqY3FlLAotCQkJICAgIHN0cnVjdCBpYl93YyAqZW50cnksIGludCAqZnJlZV9jcWUpCit2b2lkIG10aGNhX2NxX3Jlc2l6ZV9jb3B5X2NxZXMoc3RydWN0IG10aGNhX2NxICpjcSkKIHsKLQlpbnQgZXJyOworCWludCBpOworCisJLyoKKwkgKiBJbiBUYXZvciBtb2RlLCB0aGUgaGFyZHdhcmUga2VlcHMgdGhlIGNvbnN1bWVyIGFuZCBwcm9kdWNlcgorCSAqIGluZGljZXMgbW9kIHRoZSBDUSBzaXplLiAgU2luY2Ugd2UgbWlnaHQgYmUgbWFraW5nIHRoZSBDUQorCSAqIGJpZ2dlciwgd2UgbmVlZCB0byBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIHByb2R1Y2VyCisJICogaW5kZXggd3JhcHBlZCBhcm91bmQgYmVmb3JlIHRoZSBDUSB3YXMgcmVzaXplZC4KKwkgKi8KKwlpZiAoIW10aGNhX2lzX21lbWZyZWUodG9fbWRldihjcS0+aWJjcS5kZXZpY2UpKSAmJgorCSAgICBjcS0+aWJjcS5jcWUgPCBjcS0+cmVzaXplX2J1Zi0+Y3FlKSB7CisJCWNxLT5jb25zX2luZGV4ICY9IGNxLT5pYmNxLmNxZTsKKwkJaWYgKGNxZV9zdyhnZXRfY3FlKGNxLCBjcS0+aWJjcS5jcWUpKSkKKwkJCWNxLT5jb25zX2luZGV4IC09IGNxLT5pYmNxLmNxZSArIDE7CisJfQorCisJZm9yIChpID0gY3EtPmNvbnNfaW5kZXg7IGNxZV9zdyhnZXRfY3FlKGNxLCBpICYgY3EtPmliY3EuY3FlKSk7ICsraSkKKwkJbWVtY3B5KGdldF9jcWVfZnJvbV9idWYoJmNxLT5yZXNpemVfYnVmLT5idWYsCisJCQkJCWkgJiBjcS0+cmVzaXplX2J1Zi0+Y3FlKSwKKwkJICAgICAgIGdldF9jcWUoY3EsIGkgJiBjcS0+aWJjcS5jcWUpLCBNVEhDQV9DUV9FTlRSWV9TSVpFKTsKK30KKworaW50IG10aGNhX2FsbG9jX2NxX2J1ZihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcV9idWYgKmJ1ZiwgaW50IG5lbnQpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXJldCA9IG10aGNhX2J1Zl9hbGxvYyhkZXYsIG5lbnQgKiBNVEhDQV9DUV9FTlRSWV9TSVpFLAorCQkJICAgICAgTVRIQ0FfTUFYX0RJUkVDVF9DUV9TSVpFLAorCQkJICAgICAgJmJ1Zi0+cXVldWUsICZidWYtPmlzX2RpcmVjdCwKKwkJCSAgICAgICZkZXYtPmRyaXZlcl9wZCwgMSwgJmJ1Zi0+bXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVudDsgKytpKQorCQlzZXRfY3FlX2h3KGdldF9jcWVfZnJvbV9idWYoYnVmLCBpKSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGhjYV9mcmVlX2NxX2J1ZihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcV9idWYgKmJ1ZiwgaW50IGNxZSkKK3sKKwltdGhjYV9idWZfZnJlZShkZXYsIChjcWUgKyAxKSAqIE1USENBX0NRX0VOVFJZX1NJWkUsICZidWYtPnF1ZXVlLAorCQkgICAgICAgYnVmLT5pc19kaXJlY3QsICZidWYtPm1yKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2Vycm9yX2NxZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcSAqY3EsCisJCQkgICAgIHN0cnVjdCBtdGhjYV9xcCAqcXAsIGludCB3cWVfaW5kZXgsIGludCBpc19zZW5kLAorCQkJICAgICBzdHJ1Y3QgbXRoY2FfZXJyX2NxZSAqY3FlLAorCQkJICAgICBzdHJ1Y3QgaWJfd2MgKmVudHJ5LCBpbnQgKmZyZWVfY3FlKQorewogCWludCBkYmQ7CiAJX19iZTMyIG5ld193cWU7CiAKQEAgLTQxMiwxMSArNDYzLDkgQEAKIAkgKiBlcnJvciBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoZSBkb29yYmVsbCBjb3VudCwgZXRjLgogCSAqLwogCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKLQllcnIgPSBtdGhjYV9mcmVlX2Vycl93cWUoZGV2LCBxcCwgaXNfc2VuZCwgd3FlX2luZGV4LCAmZGJkLCAmbmV3X3dxZSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwltdGhjYV9mcmVlX2Vycl93cWUoZGV2LCBxcCwgaXNfc2VuZCwgd3FlX2luZGV4LCAmZGJkLCAmbmV3X3dxZSk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIFdRRSBjaGFpbiwgb3Igd2UndmUgdXNlZCB1cCBvdXIKQEAgLTQyNCwxNSArNDczLDEzIEBACiAJICogdGhlIG5leHQgcG9sbCBvcGVyYXRpb24uCiAJICovCiAJaWYgKCEobmV3X3dxZSAmIGNwdV90b19iZTMyKDB4M2YpKSB8fCAoIWNxZS0+ZGJfY250ICYmIGRiZCkpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAljcWUtPmRiX2NudCAgID0gY3B1X3RvX2JlMTYoYmUxNl90b19jcHUoY3FlLT5kYl9jbnQpIC0gZGJkKTsKIAljcWUtPndxZSAgICAgID0gbmV3X3dxZTsKIAljcWUtPnN5bmRyb21lID0gU1lORFJPTUVfV1JfRkxVU0hfRVJSOwogCiAJKmZyZWVfY3FlID0gMDsKLQotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtdGhjYV9wb2xsX29uZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCkBAIC01MTgsOSArNTY1LDkgQEAKIAl9CiAKIAlpZiAoaXNfZXJyb3IpIHsKLQkJZXJyID0gaGFuZGxlX2Vycm9yX2NxZShkZXYsIGNxLCAqY3VyX3FwLCB3cWVfaW5kZXgsIGlzX3NlbmQsCi0JCQkJICAgICAgIChzdHJ1Y3QgbXRoY2FfZXJyX2NxZSAqKSBjcWUsCi0JCQkJICAgICAgIGVudHJ5LCAmZnJlZV9jcWUpOworCQloYW5kbGVfZXJyb3JfY3FlKGRldiwgY3EsICpjdXJfcXAsIHdxZV9pbmRleCwgaXNfc2VuZCwKKwkJCQkgKHN0cnVjdCBtdGhjYV9lcnJfY3FlICopIGNxZSwKKwkJCQkgZW50cnksICZmcmVlX2NxZSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNjE0LDExICs2NjEsMTQgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcS0+bG9jaywgZmxhZ3MpOwogCi0JZm9yIChucG9sbGVkID0gMDsgbnBvbGxlZCA8IG51bV9lbnRyaWVzOyArK25wb2xsZWQpIHsKKwlucG9sbGVkID0gMDsKK3JlcG9sbDoKKwl3aGlsZSAobnBvbGxlZCA8IG51bV9lbnRyaWVzKSB7CiAJCWVyciA9IG10aGNhX3BvbGxfb25lKGRldiwgY3EsICZxcCwKIAkJCQkgICAgICZmcmVlZCwgZW50cnkgKyBucG9sbGVkKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOworCQkrK25wb2xsZWQ7CiAJfQogCiAJaWYgKGZyZWVkKSB7CkBAIC02MjYsNiArNjc2LDQyIEBACiAJCXVwZGF0ZV9jb25zX2luZGV4KGRldiwgY3EsIGZyZWVkKTsKIAl9CiAKKwkvKgorCSAqIElmIGEgQ1EgcmVzaXplIGlzIGluIHByb2dyZXNzIGFuZCB3ZSBkaXNjb3ZlcmVkIHRoYXQgdGhlCisJICogb2xkIGJ1ZmZlciBpcyBlbXB0eSwgdGhlbiBwZWVrIGluIHRoZSBuZXcgYnVmZmVyLCBhbmQgaWYKKwkgKiBpdCdzIG5vdCBlbXB0eSwgc3dpdGNoIHRvIHRoZSBuZXcgYnVmZmVyIGFuZCBjb250aW51ZQorCSAqIHBvbGxpbmcgdGhlcmUuCisJICovCisJaWYgKHVubGlrZWx5KGVyciA9PSAtRUFHQUlOICYmIGNxLT5yZXNpemVfYnVmICYmCisJCSAgICAgY3EtPnJlc2l6ZV9idWYtPnN0YXRlID09IENRX1JFU0laRV9SRUFEWSkpIHsKKwkJLyoKKwkJICogSW4gVGF2b3IgbW9kZSwgdGhlIGhhcmR3YXJlIGtlZXBzIHRoZSBwcm9kdWNlcgorCQkgKiBpbmRleCBtb2R1bG8gdGhlIENRIHNpemUuICBTaW5jZSB3ZSBtaWdodCBiZSBtYWtpbmcKKwkJICogdGhlIENRIGJpZ2dlciwgd2UgbmVlZCB0byBtYXNrIG91ciBjb25zdW1lciBpbmRleAorCQkgKiB1c2luZyB0aGUgc2l6ZSBvZiB0aGUgb2xkIENRIGJ1ZmZlciBiZWZvcmUgbG9va2luZworCQkgKiBpbiB0aGUgbmV3IENRIGJ1ZmZlci4KKwkJICovCisJCWlmICghbXRoY2FfaXNfbWVtZnJlZShkZXYpKQorCQkJY3EtPmNvbnNfaW5kZXggJj0gY3EtPmliY3EuY3FlOworCisJCWlmIChjcWVfc3coZ2V0X2NxZV9mcm9tX2J1ZigmY3EtPnJlc2l6ZV9idWYtPmJ1ZiwKKwkJCQkJICAgIGNxLT5jb25zX2luZGV4ICYgY3EtPnJlc2l6ZV9idWYtPmNxZSkpKSB7CisJCQlzdHJ1Y3QgbXRoY2FfY3FfYnVmIHRidWY7CisJCQlpbnQgdGNxZTsKKworCQkJdGJ1ZiAgICAgICAgID0gY3EtPmJ1ZjsKKwkJCXRjcWUgICAgICAgICA9IGNxLT5pYmNxLmNxZTsKKwkJCWNxLT5idWYgICAgICA9IGNxLT5yZXNpemVfYnVmLT5idWY7CisJCQljcS0+aWJjcS5jcWUgPSBjcS0+cmVzaXplX2J1Zi0+Y3FlOworCisJCQljcS0+cmVzaXplX2J1Zi0+YnVmICAgPSB0YnVmOworCQkJY3EtPnJlc2l6ZV9idWYtPmNxZSAgID0gdGNxZTsKKwkJCWNxLT5yZXNpemVfYnVmLT5zdGF0ZSA9IENRX1JFU0laRV9TV0FQUEVEOworCisJCQlnb3RvIHJlcG9sbDsKKwkJfQorCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZXJyID09IDAgfHwgZXJyID09IC1FQUdBSU4gPyBucG9sbGVkIDogZXJyOwpAQCAtNjg0LDI0ICs3NzAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbXRoY2FfZnJlZV9jcV9idWYoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfY3EgKmNxKQotewotCW10aGNhX2J1Zl9mcmVlKGRldiwgKGNxLT5pYmNxLmNxZSArIDEpICogTVRIQ0FfQ1FfRU5UUllfU0laRSwKLQkJICAgICAgICZjcS0+cXVldWUsIGNxLT5pc19kaXJlY3QsICZjcS0+bXIpOwotfQotCiBpbnQgbXRoY2FfaW5pdF9jcShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIGludCBuZW50LAogCQkgIHN0cnVjdCBtdGhjYV91Y29udGV4dCAqY3R4LCB1MzIgcGRuLAogCQkgIHN0cnVjdCBtdGhjYV9jcSAqY3EpCiB7Ci0JaW50IHNpemUgPSBuZW50ICogTVRIQ0FfQ1FfRU5UUllfU0laRTsKIAlzdHJ1Y3QgbXRoY2FfbWFpbGJveCAqbWFpbGJveDsKIAlzdHJ1Y3QgbXRoY2FfY3FfY29udGV4dCAqY3FfY29udGV4dDsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAl1OCBzdGF0dXM7Ci0JaW50IGk7Ci0KLQltaWdodF9zbGVlcCgpOwogCiAJY3EtPmliY3EuY3FlICA9IG5lbnQgLSAxOwogCWNxLT5pc19rZXJuZWwgPSAhY3R4OwpAQCAtNzM5LDE0ICs4MTUsOSBAQAogCWNxX2NvbnRleHQgPSBtYWlsYm94LT5idWY7CiAKIAlpZiAoY3EtPmlzX2tlcm5lbCkgewotCQllcnIgPSBtdGhjYV9idWZfYWxsb2MoZGV2LCBzaXplLCBNVEhDQV9NQVhfRElSRUNUX0NRX1NJWkUsCi0JCQkJICAgICAgJmNxLT5xdWV1ZSwgJmNxLT5pc19kaXJlY3QsCi0JCQkJICAgICAgJmRldi0+ZHJpdmVyX3BkLCAxLCAmY3EtPm1yKTsKKwkJZXJyID0gbXRoY2FfYWxsb2NfY3FfYnVmKGRldiwgJmNxLT5idWYsIG5lbnQpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfb3V0X21haWxib3g7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG5lbnQ7ICsraSkKLQkJCXNldF9jcWVfaHcoZ2V0X2NxZShjcSwgaSkpOwogCX0KIAogCXNwaW5fbG9ja19pbml0KCZjcS0+bG9jayk7CkBAIC03NjUsNyArODM2LDcgQEAKIAljcV9jb250ZXh0LT5lcnJvcl9lcW4gICAgICAgPSBjcHVfdG9fYmUzMihkZXYtPmVxX3RhYmxlLmVxW01USENBX0VRX0FTWU5DXS5lcW4pOwogCWNxX2NvbnRleHQtPmNvbXBfZXFuICAgICAgICA9IGNwdV90b19iZTMyKGRldi0+ZXFfdGFibGUuZXFbTVRIQ0FfRVFfQ09NUF0uZXFuKTsKIAljcV9jb250ZXh0LT5wZCAgICAgICAgICAgICAgPSBjcHVfdG9fYmUzMihwZG4pOwotCWNxX2NvbnRleHQtPmxrZXkgICAgICAgICAgICA9IGNwdV90b19iZTMyKGNxLT5tci5pYm1yLmxrZXkpOworCWNxX2NvbnRleHQtPmxrZXkgICAgICAgICAgICA9IGNwdV90b19iZTMyKGNxLT5idWYubXIuaWJtci5sa2V5KTsKIAljcV9jb250ZXh0LT5jcW4gICAgICAgICAgICAgPSBjcHVfdG9fYmUzMihjcS0+Y3FuKTsKIAogCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpIHsKQEAgLTgwMyw3ICs4NzQsNyBAQAogCiBlcnJfb3V0X2ZyZWVfbXI6CiAJaWYgKGNxLT5pc19rZXJuZWwpCi0JCW10aGNhX2ZyZWVfY3FfYnVmKGRldiwgY3EpOworCQltdGhjYV9mcmVlX2NxX2J1ZihkZXYsICZjcS0+YnVmLCBjcS0+aWJjcS5jcWUpOwogCiBlcnJfb3V0X21haWxib3g6CiAJbXRoY2FfZnJlZV9tYWlsYm94KGRldiwgbWFpbGJveCk7CkBAIC04MzIsOCArOTAzLDYgQEAKIAlpbnQgZXJyOwogCXU4IHN0YXR1czsKIAotCW1pZ2h0X3NsZWVwKCk7Ci0KIAltYWlsYm94ID0gbXRoY2FfYWxsb2NfbWFpbGJveChkZXYsIEdGUF9LRVJORUwpOwogCWlmIChJU19FUlIobWFpbGJveCkpIHsKIAkJbXRoY2Ffd2FybihkZXYsICJObyBtZW1vcnkgZm9yIG1haWxib3ggdG8gZnJlZSBDUS5cbiIpOwpAQCAtODcxLDcgKzk0MCw3IEBACiAJd2FpdF9ldmVudChjcS0+d2FpdCwgIWF0b21pY19yZWFkKCZjcS0+cmVmY291bnQpKTsKIAogCWlmIChjcS0+aXNfa2VybmVsKSB7Ci0JCW10aGNhX2ZyZWVfY3FfYnVmKGRldiwgY3EpOworCQltdGhjYV9mcmVlX2NxX2J1ZihkZXYsICZjcS0+YnVmLCBjcS0+aWJjcS5jcWUpOwogCQlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKSB7CiAJCQltdGhjYV9mcmVlX2RiKGRldiwgTVRIQ0FfREJfVFlQRV9DUV9BUk0sICAgIGNxLT5hcm1fZGJfaW5kZXgpOwogCQkJbXRoY2FfZnJlZV9kYihkZXYsIE1USENBX0RCX1RZUEVfQ1FfU0VUX0NJLCBjcS0+c2V0X2NpX2RiX2luZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaAppbmRleCBlNDgxMDM3Mi4uYWQ1MmVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNCBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTUzLDggKzUzLDggQEAKIAogI2RlZmluZSBEUlZfTkFNRQkiaWJfbXRoY2EiCiAjZGVmaW5lIFBGWAkJRFJWX05BTUUgIjogIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wNyIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIkZlYnJ1YXJ5IDEzLCAyMDA2IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wOCIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIkZlYnJ1YXJ5IDE0LCAyMDA2IgogCiBlbnVtIHsKIAlNVEhDQV9GTEFHX0REUl9ISURERU4gPSAxIDw8IDEsCkBAIC02NCw3ICs2NCw4IEBACiAJTVRIQ0FfRkxBR19OT19MQU0gICAgID0gMSA8PCA1LAogCU1USENBX0ZMQUdfRk1SICAgICAgICA9IDEgPDwgNiwKIAlNVEhDQV9GTEFHX01FTUZSRUUgICAgPSAxIDw8IDcsCi0JTVRIQ0FfRkxBR19QQ0lFICAgICAgID0gMSA8PCA4CisJTVRIQ0FfRkxBR19QQ0lFICAgICAgID0gMSA8PCA4LAorCU1USENBX0ZMQUdfU0lOQUlfT1BUICA9IDEgPDwgOQogfTsKIAogZW51bSB7CkBAIC0xMTAsOSArMTExLDE3IEBACiAJTVRIQ0FfT1BDT0RFX0lOVkFMSUQgICAgICAgID0gMHhmZgogfTsKIAorZW51bSB7CisJTVRIQ0FfQ01EX1VTRV9FVkVOVFMgICAgICAgICA9IDEgPDwgMCwKKwlNVEhDQV9DTURfUE9TVF9ET09SQkVMTFMgICAgID0gMSA8PCAxCit9OworCitlbnVtIHsKKwlNVEhDQV9DTURfTlVNX0RCRUxMX0RXT1JEUyA9IDgKK307CisKIHN0cnVjdCBtdGhjYV9jbWQgewogCXN0cnVjdCBwY2lfcG9vbCAgICAgICAgICAqcG9vbDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAgIHVzZV9ldmVudHM7CiAJc3RydWN0IG11dGV4ICAgICAgICAgICAgICBoY3JfbXV0ZXg7CiAJc3RydWN0IHNlbWFwaG9yZSAJICBwb2xsX3NlbTsKIAlzdHJ1Y3Qgc2VtYXBob3JlIAkgIGV2ZW50X3NlbTsKQEAgLTEyMSw2ICsxMzAsOSBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9oZWFkOwogCXN0cnVjdCBtdGhjYV9jbWRfY29udGV4dCAqY29udGV4dDsKIAl1MTYgICAgICAgICAgICAgICAgICAgICAgIHRva2VuX21hc2s7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKwl2b2lkIF9faW9tZW0gICAgICAgICAgICAgKmRiZWxsX21hcDsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgIGRiZWxsX29mZnNldHNbTVRIQ0FfQ01EX05VTV9EQkVMTF9EV09SRFNdOwogfTsKIAogc3RydWN0IG10aGNhX2xpbWl0cyB7CkBAIC00NzAsMTIgKzQ4MiwxNiBAQAogCQkgICAgZW51bSBpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUpOwogdm9pZCBtdGhjYV9jcV9jbGVhbihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHUzMiBjcW4sIHUzMiBxcG4sCiAJCSAgICBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpOwordm9pZCBtdGhjYV9jcV9yZXNpemVfY29weV9jcWVzKHN0cnVjdCBtdGhjYV9jcSAqY3EpOworaW50IG10aGNhX2FsbG9jX2NxX2J1ZihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcV9idWYgKmJ1ZiwgaW50IG5lbnQpOwordm9pZCBtdGhjYV9mcmVlX2NxX2J1ZihzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9jcV9idWYgKmJ1ZiwgaW50IGNxZSk7CiAKIGludCBtdGhjYV9hbGxvY19zcnEoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfcGQgKnBkLAogCQkgICAgc3RydWN0IGliX3NycV9hdHRyICphdHRyLCBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpOwogdm9pZCBtdGhjYV9mcmVlX3NycShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9zcnEgKnNycSk7CiBpbnQgbXRoY2FfbW9kaWZ5X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3NycV9hdHRyICphdHRyLAogCQkgICAgIGVudW0gaWJfc3JxX2F0dHJfbWFzayBhdHRyX21hc2spOworaW50IG10aGNhX3F1ZXJ5X3NycShzdHJ1Y3QgaWJfc3JxICpzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqc3JxX2F0dHIpOwogdm9pZCBtdGhjYV9zcnFfZXZlbnQoc3RydWN0IG10aGNhX2RldiAqZGV2LCB1MzIgc3JxbiwKIAkJICAgICBlbnVtIGliX2V2ZW50X3R5cGUgZXZlbnRfdHlwZSk7CiB2b2lkIG10aGNhX2ZyZWVfc3JxX3dxZShzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEsIHUzMiB3cWVfYWRkcik7CkBAIC00ODYsNiArNTAyLDggQEAKIAogdm9pZCBtdGhjYV9xcF9ldmVudChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHUzMiBxcG4sCiAJCSAgICBlbnVtIGliX2V2ZW50X3R5cGUgZXZlbnRfdHlwZSk7CitpbnQgbXRoY2FfcXVlcnlfcXAoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0ciwgaW50IHFwX2F0dHJfbWFzaywKKwkJICAgc3RydWN0IGliX3FwX2luaXRfYXR0ciAqcXBfaW5pdF9hdHRyKTsKIGludCBtdGhjYV9tb2RpZnlfcXAoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwgaW50IGF0dHJfbWFzayk7CiBpbnQgbXRoY2FfdGF2b3JfcG9zdF9zZW5kKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyLAogCQkJICBzdHJ1Y3QgaWJfc2VuZF93ciAqKmJhZF93cik7CkBAIC00OTUsOCArNTEzLDggQEAKIAkJCSAgc3RydWN0IGliX3NlbmRfd3IgKipiYWRfd3IpOwogaW50IG10aGNhX2FyYmVsX3Bvc3RfcmVjZWl2ZShzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9yZWN2X3dyICp3ciwKIAkJCSAgICAgc3RydWN0IGliX3JlY3Zfd3IgKipiYWRfd3IpOwotaW50IG10aGNhX2ZyZWVfZXJyX3dxZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9xcCAqcXAsIGludCBpc19zZW5kLAotCQkgICAgICAgaW50IGluZGV4LCBpbnQgKmRiZCwgX19iZTMyICpuZXdfd3FlKTsKK3ZvaWQgbXRoY2FfZnJlZV9lcnJfd3FlKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX3FwICpxcCwgaW50IGlzX3NlbmQsCisJCQlpbnQgaW5kZXgsIGludCAqZGJkLCBfX2JlMzIgKm5ld193cWUpOwogaW50IG10aGNhX2FsbG9jX3FwKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwKIAkJICAgc3RydWN0IG10aGNhX3BkICpwZCwKIAkJICAgc3RydWN0IG10aGNhX2NxICpzZW5kX2NxLApAQCAtNTIyLDYgKzU0MCw3IEBACiBpbnQgbXRoY2FfZGVzdHJveV9haChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV9haCAqYWgpOwogaW50IG10aGNhX3JlYWRfYWgoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfYWggKmFoLAogCQkgIHN0cnVjdCBpYl91ZF9oZWFkZXIgKmhlYWRlcik7CitpbnQgbXRoY2FfYWhfcXVlcnkoc3RydWN0IGliX2FoICppYmFoLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYXR0cik7CiBpbnQgbXRoY2FfYWhfZ3JoX3ByZXNlbnQoc3RydWN0IG10aGNhX2FoICphaCk7CiAKIGludCBtdGhjYV9tdWx0aWNhc3RfYXR0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2VxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwppbmRleCAyZWFiYjI3Li5jYmRjMzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZXEuYwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAKIAllcS0+ZGV2ICA9IGRldjsKIAllcS0+bmVudCA9IHJvdW5kdXBfcG93X29mX3R3byhtYXgobmVudCwgMikpOwotIAlucGFnZXMgPSBBTElHTihlcS0+bmVudCAqIE1USENBX0VRX0VOVFJZX1NJWkUsIFBBR0VfU0laRSkgLyBQQUdFX1NJWkU7CisJbnBhZ2VzID0gQUxJR04oZXEtPm5lbnQgKiBNVEhDQV9FUV9FTlRSWV9TSVpFLCBQQUdFX1NJWkUpIC8gUEFHRV9TSVpFOwogCiAJZXEtPnBhZ2VfbGlzdCA9IGttYWxsb2MobnBhZ2VzICogc2l6ZW9mICplcS0+cGFnZV9saXN0LAogCQkJCUdGUF9LRVJORUwpOwpAQCAtODI1LDcgKzgyNSw3IEBACiB7CiAJdTggc3RhdHVzOwogCi0JbXRoY2FfVU5NQVBfSUNNKGRldiwgZGV2LT5lcV90YWJsZS5pY21fdmlydCwgUEFHRV9TSVpFIC8gNDA5NiwgJnN0YXR1cyk7CisJbXRoY2FfVU5NQVBfSUNNKGRldiwgZGV2LT5lcV90YWJsZS5pY21fdmlydCwgMSwgJnN0YXR1cyk7CiAJcGNpX3VubWFwX3BhZ2UoZGV2LT5wZGV2LCBkZXYtPmVxX3RhYmxlLmljbV9kbWEsIFBBR0VfU0laRSwKIAkJICAgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJX19mcmVlX3BhZ2UoZGV2LT5lcV90YWJsZS5pY21fcGFnZSk7CkBAIC05MjgsNyArOTI4LDcgQEAKIAkJbXRoY2Ffd2FybihkZXYsICJNQVBfRVEgZm9yIGNtZCBFUSAlZCByZXR1cm5lZCBzdGF0dXMgMHglMDJ4XG4iLAogCQkJICAgZGV2LT5lcV90YWJsZS5lcVtNVEhDQV9FUV9DTURdLmVxbiwgc3RhdHVzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBNVEhDQV9FUV9DTUQ7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgTVRIQ0FfTlVNX0VROyArK2kpCiAJCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCiAJCQlhcmJlbF9lcV9yZXFfbm90KGRldiwgZGV2LT5lcV90YWJsZS5lcVtpXS5lcW5fbWFzayk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwppbmRleCAxMjI5YzYwLi40YWNlNmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCkBAIC0xMDksNiArMTA5LDE5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBub2RlX2Rlc2Nfb3ZlcnJpZGUoc3RydWN0IGliX2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpYl9tYWQgKm1hZCkKK3sKKwlpZiAoKG1hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9MSURfUk9VVEVEIHx8CisJICAgICBtYWQtPm1hZF9oZHIubWdtdF9jbGFzcyA9PSBJQl9NR01UX0NMQVNTX1NVQk5fRElSRUNURURfUk9VVEUpICYmCisJICAgIG1hZC0+bWFkX2hkci5tZXRob2QgPT0gSUJfTUdNVF9NRVRIT0RfR0VUX1JFU1AgJiYKKwkgICAgbWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfTk9ERV9ERVNDKSB7CisJCW11dGV4X2xvY2soJnRvX21kZXYoZGV2KS0+Y2FwX21hc2tfbXV0ZXgpOworCQltZW1jcHkoKChzdHJ1Y3QgaWJfc21wICopIG1hZCktPmRhdGEsIGRldi0+bm9kZV9kZXNjLCA2NCk7CisJCW11dGV4X3VubG9jaygmdG9fbWRldihkZXYpLT5jYXBfbWFza19tdXRleCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBmb3J3YXJkX3RyYXAoc3RydWN0IG10aGNhX2RldiAqZGV2LAogCQkJIHU4IHBvcnRfbnVtLAogCQkJIHN0cnVjdCBpYl9tYWQgKm1hZCkKQEAgLTIwNyw4ICsyMjAsMTAgQEAKIAkJcmV0dXJuIElCX01BRF9SRVNVTFRfRkFJTFVSRTsKIAl9CiAKLQlpZiAoIW91dF9tYWQtPm1hZF9oZHIuc3RhdHVzKQorCWlmICghb3V0X21hZC0+bWFkX2hkci5zdGF0dXMpIHsKIAkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkKTsKKwkJbm9kZV9kZXNjX292ZXJyaWRlKGliZGV2LCBvdXRfbWFkKTsKKwl9CiAKIAkvKiBzZXQgcmV0dXJuIGJpdCBpbiBzdGF0dXMgb2YgZGlyZWN0ZWQgcm91dGUgcmVzcG9uc2VzICovCiAJaWYgKGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IDljODQ5ZDIuLjI2NmYzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwpAQCAtOTM1LDEzICs5MzUsMTkgQEAKIAogc3RhdGljIHN0cnVjdCB7CiAJdTY0IGxhdGVzdF9mdzsKLQlpbnQgaXNfbWVtZnJlZTsKLQlpbnQgaXNfcGNpZTsKKwl1MzIgZmxhZ3M7CiB9IG10aGNhX2hjYV90YWJsZVtdID0gewotCVtUQVZPUl0gICAgICAgID0geyAubGF0ZXN0X2Z3ID0gTVRIQ0FfRldfVkVSKDMsIDMsIDMpLCAuaXNfbWVtZnJlZSA9IDAsIC5pc19wY2llID0gMCB9LAotCVtBUkJFTF9DT01QQVRdID0geyAubGF0ZXN0X2Z3ID0gTVRIQ0FfRldfVkVSKDQsIDcsIDApLCAuaXNfbWVtZnJlZSA9IDAsIC5pc19wY2llID0gMSB9LAotCVtBUkJFTF9OQVRJVkVdID0geyAubGF0ZXN0X2Z3ID0gTVRIQ0FfRldfVkVSKDUsIDEsIDApLCAuaXNfbWVtZnJlZSA9IDEsIC5pc19wY2llID0gMSB9LAotCVtTSU5BSV0gICAgICAgID0geyAubGF0ZXN0X2Z3ID0gTVRIQ0FfRldfVkVSKDEsIDAsIDEpLCAuaXNfbWVtZnJlZSA9IDEsIC5pc19wY2llID0gMSB9CisJW1RBVk9SXSAgICAgICAgPSB7IC5sYXRlc3RfZncgPSBNVEhDQV9GV19WRVIoMywgNCwgMCksCisJCQkgICAuZmxhZ3MgICAgID0gMCB9LAorCVtBUkJFTF9DT01QQVRdID0geyAubGF0ZXN0X2Z3ID0gTVRIQ0FfRldfVkVSKDQsIDcsIDQwMCksCisJCQkgICAuZmxhZ3MgICAgID0gTVRIQ0FfRkxBR19QQ0lFIH0sCisJW0FSQkVMX05BVElWRV0gPSB7IC5sYXRlc3RfZncgPSBNVEhDQV9GV19WRVIoNSwgMSwgMCksCisJCQkgICAuZmxhZ3MgICAgID0gTVRIQ0FfRkxBR19NRU1GUkVFIHwKKwkJCQkJTVRIQ0FfRkxBR19QQ0lFIH0sCisJW1NJTkFJXSAgICAgICAgPSB7IC5sYXRlc3RfZncgPSBNVEhDQV9GV19WRVIoMSwgMCwgODAwKSwKKwkJCSAgIC5mbGFncyAgICAgPSBNVEhDQV9GTEFHX01FTUZSRUUgfAorCQkJCQlNVEhDQV9GTEFHX1BDSUUgICAgfAorCQkJCQlNVEhDQV9GTEFHX1NJTkFJX09QVCB9CiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtdGhjYV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTEwMzEsMTIgKzEwMzcsOSBAQAogCiAJbWRldi0+cGRldiA9IHBkZXY7CiAKKwltZGV2LT5tdGhjYV9mbGFncyA9IG10aGNhX2hjYV90YWJsZVtpZC0+ZHJpdmVyX2RhdGFdLmZsYWdzOwogCWlmIChkZHJfaGlkZGVuKQogCQltZGV2LT5tdGhjYV9mbGFncyB8PSBNVEhDQV9GTEFHX0REUl9ISURERU47Ci0JaWYgKG10aGNhX2hjYV90YWJsZVtpZC0+ZHJpdmVyX2RhdGFdLmlzX21lbWZyZWUpCi0JCW1kZXYtPm10aGNhX2ZsYWdzIHw9IE1USENBX0ZMQUdfTUVNRlJFRTsKLQlpZiAobXRoY2FfaGNhX3RhYmxlW2lkLT5kcml2ZXJfZGF0YV0uaXNfcGNpZSkKLQkJbWRldi0+bXRoY2FfZmxhZ3MgfD0gTVRIQ0FfRkxBR19QQ0lFOwogCiAJLyoKIAkgKiBOb3cgcmVzZXQgdGhlIEhDQSBiZWZvcmUgd2UgdG91Y2ggdGhlIFBDSSBjYXBhYmlsaXRpZXMgb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tY2cuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tY2cuYwppbmRleCAzMjFmMTFlLi45OTY1YmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWNnLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21jZy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBNVEhDQV9RUF9QRVJfTUdNOyArK2kpCiAJCWlmIChtZ20tPnFwW2ldID09IGNwdV90b19iZTMyKGlicXAtPnFwX251bSB8ICgxIDw8IDMxKSkpIHsKLQkJCW10aGNhX2RiZyhkZXYsICJRUCAlMDZ4IGFscmVhZHkgYSBtZW1iZXIgb2YgTUdNXG4iLCAKKwkJCW10aGNhX2RiZyhkZXYsICJRUCAlMDZ4IGFscmVhZHkgYSBtZW1iZXIgb2YgTUdNXG4iLAogCQkJCSAgaWJxcC0+cXBfbnVtKTsKIAkJCWVyciA9IDA7CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5jCmluZGV4IGQ3MDljYjEuLjE1Y2MyZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuYwpAQCAtMjAyLDcgKzIwMiw4IEBACiAKIAlpZiAoLS10YWJsZS0+aWNtW2ldLT5yZWZjb3VudCA9PSAwKSB7CiAJCW10aGNhX1VOTUFQX0lDTShkZXYsIHRhYmxlLT52aXJ0ICsgaSAqIE1USENBX1RBQkxFX0NIVU5LX1NJWkUsCi0JCQkJTVRIQ0FfVEFCTEVfQ0hVTktfU0laRSA+PiAxMiwgJnN0YXR1cyk7CisJCQkJTVRIQ0FfVEFCTEVfQ0hVTktfU0laRSAvIE1USENBX0lDTV9QQUdFX1NJWkUsCisJCQkJJnN0YXR1cyk7CiAJCW10aGNhX2ZyZWVfaWNtKGRldiwgdGFibGUtPmljbVtpXSk7CiAJCXRhYmxlLT5pY21baV0gPSBOVUxMOwogCX0KQEAgLTMzNiw3ICszMzcsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBudW1faWNtOyArK2kpCiAJCWlmICh0YWJsZS0+aWNtW2ldKSB7CiAJCQltdGhjYV9VTk1BUF9JQ00oZGV2LCB2aXJ0ICsgaSAqIE1USENBX1RBQkxFX0NIVU5LX1NJWkUsCi0JCQkJCU1USENBX1RBQkxFX0NIVU5LX1NJWkUgPj4gMTIsICZzdGF0dXMpOworCQkJCQlNVEhDQV9UQUJMRV9DSFVOS19TSVpFIC8gTVRIQ0FfSUNNX1BBR0VfU0laRSwKKwkJCQkgICAgICAgICZzdGF0dXMpOwogCQkJbXRoY2FfZnJlZV9pY20oZGV2LCB0YWJsZS0+aWNtW2ldKTsKIAkJfQogCkBAIC0zNTMsNyArMzU1LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPm51bV9pY207ICsraSkKIAkJaWYgKHRhYmxlLT5pY21baV0pIHsKIAkJCW10aGNhX1VOTUFQX0lDTShkZXYsIHRhYmxlLT52aXJ0ICsgaSAqIE1USENBX1RBQkxFX0NIVU5LX1NJWkUsCi0JCQkJCU1USENBX1RBQkxFX0NIVU5LX1NJWkUgPj4gMTIsICZzdGF0dXMpOworCQkJCQlNVEhDQV9UQUJMRV9DSFVOS19TSVpFIC8gTVRIQ0FfSUNNX1BBR0VfU0laRSwKKwkJCQkJJnN0YXR1cyk7CiAJCQltdGhjYV9mcmVlX2ljbShkZXYsIHRhYmxlLT5pY21baV0pOwogCQl9CiAKQEAgLTM2NCw3ICszNjcsNyBAQAogewogCXJldHVybiBkZXYtPnVhcl90YWJsZS51YXJjX2Jhc2UgKwogCQl1YXItPmluZGV4ICogZGV2LT51YXJfdGFibGUudWFyY19zaXplICsKLQkJcGFnZSAqIDQwOTY7CisJCXBhZ2UgKiBNVEhDQV9JQ01fUEFHRV9TSVpFOwogfQogCiBpbnQgbXRoY2FfbWFwX3VzZXJfZGIoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfdWFyICp1YXIsCkBAIC00MDEsNyArNDA0LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlkYl90YWItPnBhZ2VbaV0ubWVtLmxlbmd0aCA9IDQwOTY7CisJZGJfdGFiLT5wYWdlW2ldLm1lbS5sZW5ndGggPSBNVEhDQV9JQ01fUEFHRV9TSVpFOwogCWRiX3RhYi0+cGFnZVtpXS5tZW0ub2Zmc2V0ID0gdWFkZHIgJiB+UEFHRV9NQVNLOwogCiAJcmV0ID0gcGNpX21hcF9zZyhkZXYtPnBkZXYsICZkYl90YWItPnBhZ2VbaV0ubWVtLCAxLCBQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTQ1NSw3ICs0NTgsNyBAQAogCWlmICghbXRoY2FfaXNfbWVtZnJlZShkZXYpKQogCQlyZXR1cm4gTlVMTDsKIAotCW5wYWdlcyA9IGRldi0+dWFyX3RhYmxlLnVhcmNfc2l6ZSAvIDQwOTY7CisJbnBhZ2VzID0gZGV2LT51YXJfdGFibGUudWFyY19zaXplIC8gTVRIQ0FfSUNNX1BBR0VfU0laRTsKIAlkYl90YWIgPSBrbWFsbG9jKHNpemVvZiAqZGJfdGFiICsgbnBhZ2VzICogc2l6ZW9mICpkYl90YWItPnBhZ2UsIEdGUF9LRVJORUwpOwogCWlmICghZGJfdGFiKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTQ3OCw3ICs0ODEsNyBAQAogCWlmICghbXRoY2FfaXNfbWVtZnJlZShkZXYpKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT51YXJfdGFibGUudWFyY19zaXplIC8gNDA5NjsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGRldi0+dWFyX3RhYmxlLnVhcmNfc2l6ZSAvIE1USENBX0lDTV9QQUdFX1NJWkU7ICsraSkgewogCQlpZiAoZGJfdGFiLT5wYWdlW2ldLnV2aXJ0KSB7CiAJCQltdGhjYV9VTk1BUF9JQ00oZGV2LCBtdGhjYV91YXJjX3ZpcnQoZGV2LCB1YXIsIGkpLCAxLCAmc3RhdHVzKTsKIAkJCXBjaV91bm1hcF9zZyhkZXYtPnBkZXYsICZkYl90YWItPnBhZ2VbaV0ubWVtLCAxLCBQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTU1MSwyMCArNTU0LDIwIEBACiAJcGFnZSA9IGRldi0+ZGJfdGFiLT5wYWdlICsgZW5kOwogCiBhbGxvYzoKLQlwYWdlLT5kYl9yZWMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCA0MDk2LAorCXBhZ2UtPmRiX3JlYyA9IGRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIE1USENBX0lDTV9QQUdFX1NJWkUsCiAJCQkJCSAgJnBhZ2UtPm1hcHBpbmcsIEdGUF9LRVJORUwpOwogCWlmICghcGFnZS0+ZGJfcmVjKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQltZW1zZXQocGFnZS0+ZGJfcmVjLCAwLCA0MDk2KTsKKwltZW1zZXQocGFnZS0+ZGJfcmVjLCAwLCBNVEhDQV9JQ01fUEFHRV9TSVpFKTsKIAogCXJldCA9IG10aGNhX01BUF9JQ01fcGFnZShkZXYsIHBhZ2UtPm1hcHBpbmcsCiAJCQkJIG10aGNhX3VhcmNfdmlydChkZXYsICZkZXYtPmRyaXZlcl91YXIsIGkpLCAmc3RhdHVzKTsKIAlpZiAoIXJldCAmJiBzdGF0dXMpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKHJldCkgewotCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIDQwOTYsCisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPnBkZXYtPmRldiwgTVRIQ0FfSUNNX1BBR0VfU0laRSwKIAkJCQkgIHBhZ2UtPmRiX3JlYywgcGFnZS0+bWFwcGluZyk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTYxMiw3ICs2MTUsNyBAQAogCSAgICBpID49IGRldi0+ZGJfdGFiLT5tYXhfZ3JvdXAxIC0gMSkgewogCQltdGhjYV9VTk1BUF9JQ00oZGV2LCBtdGhjYV91YXJjX3ZpcnQoZGV2LCAmZGV2LT5kcml2ZXJfdWFyLCBpKSwgMSwgJnN0YXR1cyk7CiAKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCA0MDk2LAorCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIE1USENBX0lDTV9QQUdFX1NJWkUsCiAJCQkJICBwYWdlLT5kYl9yZWMsIHBhZ2UtPm1hcHBpbmcpOwogCQlwYWdlLT5kYl9yZWMgPSBOVUxMOwogCkBAIC02NDAsNyArNjQzLDcgQEAKIAogCW11dGV4X2luaXQoJmRldi0+ZGJfdGFiLT5tdXRleCk7CiAKLQlkZXYtPmRiX3RhYi0+bnBhZ2VzICAgICA9IGRldi0+dWFyX3RhYmxlLnVhcmNfc2l6ZSAvIDQwOTY7CisJZGV2LT5kYl90YWItPm5wYWdlcyAgICAgPSBkZXYtPnVhcl90YWJsZS51YXJjX3NpemUgLyBNVEhDQV9JQ01fUEFHRV9TSVpFOwogCWRldi0+ZGJfdGFiLT5tYXhfZ3JvdXAxID0gMDsKIAlkZXYtPmRiX3RhYi0+bWluX2dyb3VwMiA9IGRldi0+ZGJfdGFiLT5ucGFnZXMgLSAxOwogCkBAIC02ODEsNyArNjg0LDcgQEAKIAogCQltdGhjYV9VTk1BUF9JQ00oZGV2LCBtdGhjYV91YXJjX3ZpcnQoZGV2LCAmZGV2LT5kcml2ZXJfdWFyLCBpKSwgMSwgJnN0YXR1cyk7CiAKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCA0MDk2LAorCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIE1USENBX0lDTV9QQUdFX1NJWkUsCiAJCQkJICBkZXYtPmRiX3RhYi0+cGFnZVtpXS5kYl9yZWMsCiAJCQkJICBkZXYtPmRiX3RhYi0+cGFnZVtpXS5tYXBwaW5nKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21lbWZyZWUuaAppbmRleCAzNmYxMTQxLi42ZDQyOTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWVtZnJlZS5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tZW1mcmVlLmgKQEAgLTQ1LDYgKzQ1LDEyIEBACiAJKCgyNTYgLSBzaXplb2YgKHN0cnVjdCBsaXN0X2hlYWQpIC0gMiAqIHNpemVvZiAoaW50KSkgLwkJXAogCSAoc2l6ZW9mIChzdHJ1Y3Qgc2NhdHRlcmxpc3QpKSkKIAorZW51bSB7CisJTVRIQ0FfSUNNX1BBR0VfU0hJRlQJPSAxMiwKKwlNVEhDQV9JQ01fUEFHRV9TSVpFCT0gMSA8PCBNVEhDQV9JQ01fUEFHRV9TSElGVCwKKwlNVEhDQV9EQl9SRUNfUEVSX1BBR0UJPSBNVEhDQV9JQ01fUEFHRV9TSVpFIC8gOAorfTsKKwogc3RydWN0IG10aGNhX2ljbV9jaHVuayB7CiAJc3RydWN0IGxpc3RfaGVhZCAgIGxpc3Q7CiAJaW50ICAgICAgICAgICAgICAgIG5wYWdlczsKQEAgLTEzMSwxMCArMTM3LDYgQEAKIAlyZXR1cm4gc2dfZG1hX2xlbigmaXRlci0+Y2h1bmstPm1lbVtpdGVyLT5wYWdlX2lkeF0pOwogfQogCi1lbnVtIHsKLQlNVEhDQV9EQl9SRUNfUEVSX1BBR0UgPSA0MDk2IC8gOAotfTsKLQogc3RydWN0IG10aGNhX2RiX3BhZ2UgewogCURFQ0xBUkVfQklUTUFQKHVzZWQsIE1USENBX0RCX1JFQ19QRVJfUEFHRSk7CiAJX19iZTY0ICAgICpkYl9yZWM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tci5jCmluZGV4IGU5OTVlMmEuLjY5OGI2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tci5jCkBAIC03Niw2ICs3Niw4IEBACiAjZGVmaW5lIE1USENBX01QVF9TVEFUVVNfU1cgMHhGMAogI2RlZmluZSBNVEhDQV9NUFRfU1RBVFVTX0hXIDB4MDAKIAorI2RlZmluZSBTSU5BSV9GTVJfS0VZX0lOQyAweDEwMDAwMDAKKwogLyoKICAqIEJ1ZGR5IGFsbG9jYXRvciBmb3IgTVRUIHNlZ21lbnRzIChjdXJyZW50bHkgbm90IHZlcnkgZWZmaWNpZW50CiAgKiBzaW5jZSBpdCBkb2Vzbid0IGtlZXAgYSBmcmVlIGxpc3QgYW5kIGp1c3Qgc2VhcmNoZXMgbGluZWFybHkKQEAgLTMzMCw2ICszMzIsMTQgQEAKIAkJcmV0dXJuIHRhdm9yX2tleV90b19od19pbmRleChrZXkpOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiBhZGp1c3Rfa2V5KHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIGtleSkKK3sKKwlpZiAoZGV2LT5tdGhjYV9mbGFncyAmIE1USENBX0ZMQUdfU0lOQUlfT1BUKQorCQlyZXR1cm4gKChrZXkgPDwgMjApICYgMHg4MDAwMDApIHwgKGtleSAmIDB4N2ZmZmZmKTsKKwllbHNlCisJCXJldHVybiBrZXk7Cit9CisKIGludCBtdGhjYV9tcl9hbGxvYyhzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHUzMiBwZCwgaW50IGJ1ZmZlcl9zaXplX3NoaWZ0LAogCQkgICB1NjQgaW92YSwgdTY0IHRvdGFsX3NpemUsIHUzMiBhY2Nlc3MsIHN0cnVjdCBtdGhjYV9tciAqbXIpCiB7CkBAIC0zNDAsMTMgKzM1MCwxMiBAQAogCWludCBlcnI7CiAJdTggc3RhdHVzOwogCi0JbWlnaHRfc2xlZXAoKTsKLQogCVdBUk5fT04oYnVmZmVyX3NpemVfc2hpZnQgPj0gMzIpOwogCiAJa2V5ID0gbXRoY2FfYWxsb2MoJmRldi0+bXJfdGFibGUubXB0X2FsbG9jKTsKIAlpZiAoa2V5ID09IC0xKQogCQlyZXR1cm4gLUVOT01FTTsKKwlrZXkgPSBhZGp1c3Rfa2V5KGRldiwga2V5KTsKIAltci0+aWJtci5ya2V5ID0gbXItPmlibXIubGtleSA9IGh3X2luZGV4X3RvX2tleShkZXYsIGtleSk7CiAKIAlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKSB7CkBAIC00NjcsOCArNDc2LDYgQEAKIAlpbnQgZXJyOwogCXU4IHN0YXR1czsKIAotCW1pZ2h0X3NsZWVwKCk7Ci0KIAllcnIgPSBtdGhjYV9IVzJTV19NUFQoZGV2LCBOVUxMLAogCQkJICAgICAga2V5X3RvX2h3X2luZGV4KGRldiwgbXItPmlibXIubGtleSkgJgogCQkJICAgICAgKGRldi0+bGltaXRzLm51bV9tcHRzIC0gMSksCkBAIC00OTUsOSArNTAyLDcgQEAKIAlpbnQgZXJyID0gLUVOT01FTTsKIAlpbnQgaTsKIAotCW1pZ2h0X3NsZWVwKCk7Ci0KLQlpZiAobXItPmF0dHIucGFnZV9zaXplIDwgMTIgfHwgbXItPmF0dHIucGFnZV9zaXplID49IDMyKQorCWlmIChtci0+YXR0ci5wYWdlX3NoaWZ0IDwgMTIgfHwgbXItPmF0dHIucGFnZV9zaGlmdCA+PSAzMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBGb3IgQXJiZWwsIGFsbCBNVFRzIG11c3QgZml0IGluIHRoZSBzYW1lIHBhZ2UuICovCkBAIC01MTAsNiArNTE1LDcgQEAKIAlrZXkgPSBtdGhjYV9hbGxvYygmZGV2LT5tcl90YWJsZS5tcHRfYWxsb2MpOwogCWlmIChrZXkgPT0gLTEpCiAJCXJldHVybiAtRU5PTUVNOworCWtleSA9IGFkanVzdF9rZXkoZGV2LCBrZXkpOwogCiAJaWR4ID0ga2V5ICYgKGRldi0+bGltaXRzLm51bV9tcHRzIC0gMSk7CiAJbXItPmlibXIucmtleSA9IG1yLT5pYm1yLmxrZXkgPSBod19pbmRleF90b19rZXkoZGV2LCBrZXkpOwpAQCAtNTIzLDcgKzUyOSw3IEBACiAJCUJVR19PTighbXItPm1lbS5hcmJlbC5tcHQpOwogCX0gZWxzZQogCQltci0+bWVtLnRhdm9yLm1wdCA9IGRldi0+bXJfdGFibGUudGF2b3JfZm1yLm1wdF9iYXNlICsKLQkJICAgICAgIAlzaXplb2YgKihtci0+bWVtLnRhdm9yLm1wdCkgKiBpZHg7CisJCQlzaXplb2YgKihtci0+bWVtLnRhdm9yLm1wdCkgKiBpZHg7CiAKIAltci0+bXR0ID0gX19tdGhjYV9hbGxvY19tdHQoZGV2LCBsaXN0X2xlbiwgZGV2LT5tcl90YWJsZS5mbXJfbXR0X2J1ZGR5KTsKIAlpZiAoSVNfRVJSKG1yLT5tdHQpKQpAQCAtNTQ5LDcgKzU1NSw3IEBACiAJCQkJICAgICAgIE1USENBX01QVF9GTEFHX1JFR0lPTiAgICAgIHwKIAkJCQkgICAgICAgYWNjZXNzKTsKIAotCW1wdF9lbnRyeS0+cGFnZV9zaXplID0gY3B1X3RvX2JlMzIobXItPmF0dHIucGFnZV9zaXplIC0gMTIpOworCW1wdF9lbnRyeS0+cGFnZV9zaXplID0gY3B1X3RvX2JlMzIobXItPmF0dHIucGFnZV9zaGlmdCAtIDEyKTsKIAltcHRfZW50cnktPmtleSAgICAgICA9IGNwdV90b19iZTMyKGtleSk7CiAJbXB0X2VudHJ5LT5wZCAgICAgICAgPSBjcHVfdG9fYmUzMihwZCk7CiAJbWVtc2V0KCZtcHRfZW50cnktPnN0YXJ0LCAwLApAQCAtNjE3LDcgKzYyMyw3IEBACiAJaWYgKGxpc3RfbGVuID4gZm1yLT5hdHRyLm1heF9wYWdlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwYWdlX21hc2sgPSAoMSA8PCBmbXItPmF0dHIucGFnZV9zaXplKSAtIDE7CisJcGFnZV9tYXNrID0gKDEgPDwgZm1yLT5hdHRyLnBhZ2Vfc2hpZnQpIC0gMTsKIAogCS8qIFdlIGFyZSBnZXR0aW5nIHBhZ2UgbGlzdHMsIHNvIHZhIG11c3QgYmUgcGFnZSBhbGlnbmVkLiAqLwogCWlmIChpb3ZhICYgcGFnZV9tYXNrKQpAQCAtNjY1LDcgKzY3MSw3IEBACiAJfQogCiAJbXB0X2VudHJ5LmxrZXkgICA9IGNwdV90b19iZTMyKGtleSk7Ci0JbXB0X2VudHJ5Lmxlbmd0aCA9IGNwdV90b19iZTY0KGxpc3RfbGVuICogKDF1bGwgPDwgZm1yLT5hdHRyLnBhZ2Vfc2l6ZSkpOworCW1wdF9lbnRyeS5sZW5ndGggPSBjcHVfdG9fYmU2NChsaXN0X2xlbiAqICgxdWxsIDw8IGZtci0+YXR0ci5wYWdlX3NoaWZ0KSk7CiAJbXB0X2VudHJ5LnN0YXJ0ICA9IGNwdV90b19iZTY0KGlvdmEpOwogCiAJX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikgbXB0X2VudHJ5LmxrZXksICZmbXItPm1lbS50YXZvci5tcHQtPmtleSk7CkBAIC02OTMsNyArNjk5LDEwIEBACiAJKytmbXItPm1hcHM7CiAKIAlrZXkgPSBhcmJlbF9rZXlfdG9faHdfaW5kZXgoZm1yLT5pYm1yLmxrZXkpOwotCWtleSArPSBkZXYtPmxpbWl0cy5udW1fbXB0czsKKwlpZiAoZGV2LT5tdGhjYV9mbGFncyAmIE1USENBX0ZMQUdfU0lOQUlfT1BUKQorCQlrZXkgKz0gU0lOQUlfRk1SX0tFWV9JTkM7CisJZWxzZQorCQlrZXkgKz0gZGV2LT5saW1pdHMubnVtX21wdHM7CiAJZm1yLT5pYm1yLmxrZXkgPSBmbXItPmlibXIucmtleSA9IGFyYmVsX2h3X2luZGV4X3RvX2tleShrZXkpOwogCiAJKih1OCAqKSBmbXItPm1lbS5hcmJlbC5tcHQgPSBNVEhDQV9NUFRfU1RBVFVTX1NXOwpAQCAtNzA2LDcgKzcxNSw3IEBACiAKIAlmbXItPm1lbS5hcmJlbC5tcHQtPmtleSAgICA9IGNwdV90b19iZTMyKGtleSk7CiAJZm1yLT5tZW0uYXJiZWwubXB0LT5sa2V5ICAgPSBjcHVfdG9fYmUzMihrZXkpOwotCWZtci0+bWVtLmFyYmVsLm1wdC0+bGVuZ3RoID0gY3B1X3RvX2JlNjQobGlzdF9sZW4gKiAoMXVsbCA8PCBmbXItPmF0dHIucGFnZV9zaXplKSk7CisJZm1yLT5tZW0uYXJiZWwubXB0LT5sZW5ndGggPSBjcHVfdG9fYmU2NChsaXN0X2xlbiAqICgxdWxsIDw8IGZtci0+YXR0ci5wYWdlX3NoaWZ0KSk7CiAJZm1yLT5tZW0uYXJiZWwubXB0LT5zdGFydCAgPSBjcHVfdG9fYmU2NChpb3ZhKTsKIAogCXdtYigpOwpAQCAtNzY2LDYgKzc3NSw5IEBACiAJZWxzZQogCQlkZXYtPm10aGNhX2ZsYWdzIHw9IE1USENBX0ZMQUdfRk1SOwogCisJaWYgKGRldi0+bXRoY2FfZmxhZ3MgJiBNVEhDQV9GTEFHX1NJTkFJX09QVCkKKwkJbXRoY2FfZGJnKGRldiwgIk1lbW9yeSBrZXkgdGhyb3VnaHB1dCBvcHRpbWl6YXRpb24gYWN0aXZhdGVkLlxuIik7CisKIAllcnIgPSBtdGhjYV9idWRkeV9pbml0KCZkZXYtPm1yX3RhYmxlLm10dF9idWRkeSwKIAkJCSAgICAgICBmbHMoZGV2LT5saW1pdHMubnVtX210dF9zZWdzIC0gMSkpOwogCkBAIC03ODUsNyArNzk3LDcgQEAKIAkJfQogCiAJCWRldi0+bXJfdGFibGUudGF2b3JfZm1yLm1wdF9iYXNlID0KLQkJICAgICAgIAlpb3JlbWFwKGRldi0+bXJfdGFibGUubXB0X2Jhc2UsCisJCQlpb3JlbWFwKGRldi0+bXJfdGFibGUubXB0X2Jhc2UsCiAJCQkJKDEgPDwgaSkgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9tcHRfZW50cnkpKTsKIAogCQlpZiAoIWRldi0+bXJfdGFibGUudGF2b3JfZm1yLm1wdF9iYXNlKSB7CkBAIC04MTMsNyArODI1LDcgQEAKIAkJCWdvdG8gZXJyX3Jlc2VydmVfZm1yOwogCiAJCWRldi0+bXJfdGFibGUuZm1yX210dF9idWRkeSA9Ci0JCSAgICAgICAJJmRldi0+bXJfdGFibGUudGF2b3JfZm1yLm10dF9idWRkeTsKKwkJCSZkZXYtPm1yX3RhYmxlLnRhdm9yX2Ztci5tdHRfYnVkZHk7CiAJfSBlbHNlCiAJCWRldi0+bXJfdGFibGUuZm1yX210dF9idWRkeSA9ICZkZXYtPm1yX3RhYmxlLm10dF9idWRkeTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3BkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcGQuYwppbmRleCAzZGJmMDZhLi4xMDVmYzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcGQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcGQuYwpAQCAtNDMsOCArNDMsNiBAQAogewogCWludCBlcnIgPSAwOwogCi0JbWlnaHRfc2xlZXAoKTsKLQogCXBkLT5wcml2aWxlZ2VkID0gcHJpdmlsZWdlZDsKIAogCWF0b21pY19zZXQoJnBkLT5zcXBfY291bnQsIDApOwpAQCAtNjYsNyArNjQsNiBAQAogCiB2b2lkIG10aGNhX3BkX2ZyZWUoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfcGQgKnBkKQogewotCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKHBkLT5wcml2aWxlZ2VkKQogCQltdGhjYV9mcmVlX21yKGRldiwgJnBkLT5udG1yKTsKIAltdGhjYV9mcmVlKCZkZXYtPnBkX3RhYmxlLmFsbG9jLCBwZC0+cGRfbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm9maWxlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvZmlsZS5jCmluZGV4IDA4YTkwOTMuLjU4ZDQ0YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm9maWxlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb2ZpbGUuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJCX0KIAkJaWYgKHRvdGFsX3NpemUgPiBtZW1fYXZhaWwpIHsKIAkJCW10aGNhX2VycihkZXYsICJQcm9maWxlIHJlcXVpcmVzIDB4JWxseCBieXRlczsgIgotCQkJCSAgIndvbid0IGluIDB4JWxseCBieXRlcyBvZiBjb250ZXh0IG1lbW9yeS5cbiIsCisJCQkJICAid29uJ3QgZml0IGluIDB4JWxseCBieXRlcyBvZiBjb250ZXh0IG1lbW9yeS5cbiIsCiAJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSB0b3RhbF9zaXplLAogCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWVtX2F2YWlsKTsKIAkJCWtmcmVlKHByb2ZpbGUpOwpAQCAtMjYyLDYgKzI2MiwxNCBAQAogCSAqLwogCWRldi0+bGltaXRzLm51bV9wZHMgPSBNVEhDQV9OVU1fUERTOwogCisJaWYgKGRldi0+bXRoY2FfZmxhZ3MgJiBNVEhDQV9GTEFHX1NJTkFJX09QVCAmJgorCSAgICBpbml0X2hjYS0+bG9nX21wdF9zeiA+IDIzKSB7CisJCW10aGNhX3dhcm4oZGV2LCAiTVBUIHRhYmxlIHRvbyBsYXJnZSAocmVxdWVzdGVkIHNpemUgMl4lZCA+PSAyXjI0KVxuIiwKKwkJCSAgIGluaXRfaGNhLT5sb2dfbXB0X3N6KTsKKwkJbXRoY2Ffd2FybihkZXYsICJEaXNhYmxpbmcgbWVtb3J5IGtleSB0aHJvdWdocHV0IG9wdGltaXphdGlvbi5cbiIpOworCQlkZXYtPm10aGNhX2ZsYWdzICY9IH5NVEhDQV9GTEFHX1NJTkFJX09QVDsKKwl9CisKIAkvKgogCSAqIEZvciBUYXZvciwgRk1ScyB1c2UgaW9yZW1hcHBlZCBQQ0kgbWVtb3J5LiBGb3IgMzIgYml0CiAJICogc3lzdGVtcyBpdCBtYXkgdXNlIHRvbyBtdWNoIHZtYWxsb2Mgc3BhY2UgdG8gbWFwIGFsbCBNVFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKaW5kZXggZTg4ZTM5YS4uMmMyNTBiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNCBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTEwOCwxMiArMTA4LDEyIEBACiAJcHJvcHMtPm1heF9zcnFfd3IgICAgICAgICAgPSBtZGV2LT5saW1pdHMubWF4X3NycV93cWVzOwogCXByb3BzLT5tYXhfc3JxX3NnZSAgICAgICAgID0gbWRldi0+bGltaXRzLm1heF9zZzsKIAlwcm9wcy0+bG9jYWxfY2FfYWNrX2RlbGF5ICA9IG1kZXYtPmxpbWl0cy5sb2NhbF9jYV9hY2tfZGVsYXk7Ci0JcHJvcHMtPmF0b21pY19jYXAgICAgICAgICAgPSBtZGV2LT5saW1pdHMuZmxhZ3MgJiBERVZfTElNX0ZMQUdfQVRPTUlDID8gCisJcHJvcHMtPmF0b21pY19jYXAgICAgICAgICAgPSBtZGV2LT5saW1pdHMuZmxhZ3MgJiBERVZfTElNX0ZMQUdfQVRPTUlDID8KIAkJCQkJSUJfQVRPTUlDX0hDQSA6IElCX0FUT01JQ19OT05FOwogCXByb3BzLT5tYXhfcGtleXMgICAgICAgICAgID0gbWRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuOwogCXByb3BzLT5tYXhfbWNhc3RfZ3JwICAgICAgID0gbWRldi0+bGltaXRzLm51bV9tZ21zICsgbWRldi0+bGltaXRzLm51bV9hbWdtczsKIAlwcm9wcy0+bWF4X21jYXN0X3FwX2F0dGFjaCA9IE1USENBX1FQX1BFUl9NR007Ci0JcHJvcHMtPm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2ggPSBwcm9wcy0+bWF4X21jYXN0X3FwX2F0dGFjaCAqIAorCXByb3BzLT5tYXhfdG90YWxfbWNhc3RfcXBfYXR0YWNoID0gcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2ggKgogCQkJCQkgICBwcm9wcy0+bWF4X21jYXN0X2dycDsKIAogCWVyciA9IDA7CkBAIC0xNzYsNiArMTc2LDIzIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBtdGhjYV9tb2RpZnlfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJICAgICAgIGludCBtYXNrLAorCQkJICAgICAgIHN0cnVjdCBpYl9kZXZpY2VfbW9kaWZ5ICpwcm9wcykKK3sKKwlpZiAobWFzayAmIH5JQl9ERVZJQ0VfTU9ESUZZX05PREVfREVTQykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKG1hc2sgJiBJQl9ERVZJQ0VfTU9ESUZZX05PREVfREVTQykgeworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0b19tZGV2KGliZGV2KS0+Y2FwX21hc2tfbXV0ZXgpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJbWVtY3B5KGliZGV2LT5ub2RlX2Rlc2MsIHByb3BzLT5ub2RlX2Rlc2MsIDY0KTsKKwkJbXV0ZXhfdW5sb2NrKCZ0b19tZGV2KGliZGV2KS0+Y2FwX21hc2tfbXV0ZXgpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG10aGNhX21vZGlmeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAogCQkJICAgICB1OCBwb3J0LCBpbnQgcG9ydF9tb2RpZnlfbWFzaywKIAkJCSAgICAgc3RydWN0IGliX3BvcnRfbW9kaWZ5ICpwcm9wcykKQEAgLTY2OSw5ICs2ODYsOSBAQAogCX0KIAogCWlmIChjb250ZXh0KSB7Ci0JCWNxLT5tci5pYm1yLmxrZXkgICAgPSB1Y21kLmxrZXk7Ci0JCWNxLT5zZXRfY2lfZGJfaW5kZXggPSB1Y21kLnNldF9kYl9pbmRleDsKLQkJY3EtPmFybV9kYl9pbmRleCAgICA9IHVjbWQuYXJtX2RiX2luZGV4OworCQljcS0+YnVmLm1yLmlibXIubGtleSA9IHVjbWQubGtleTsKKwkJY3EtPnNldF9jaV9kYl9pbmRleCAgPSB1Y21kLnNldF9kYl9pbmRleDsKKwkJY3EtPmFybV9kYl9pbmRleCAgICAgPSB1Y21kLmFybV9kYl9pbmRleDsKIAl9CiAKIAlmb3IgKG5lbnQgPSAxOyBuZW50IDw9IGVudHJpZXM7IG5lbnQgPDw9IDEpCkBAIC02ODksNiArNzA2LDggQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKKwljcS0+cmVzaXplX2J1ZiA9IE5VTEw7CisKIAlyZXR1cm4gJmNxLT5pYmNxOwogCiBlcnJfZnJlZToKQEAgLTcwNyw2ICs3MjYsMTIxIEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGludCBtdGhjYV9hbGxvY19yZXNpemVfYnVmKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX2NxICpjcSwKKwkJCQkgIGludCBlbnRyaWVzKQoreworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxKCZjcS0+bG9jayk7CisJaWYgKGNxLT5yZXNpemVfYnVmKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJY3EtPnJlc2l6ZV9idWYgPSBrbWFsbG9jKHNpemVvZiAqY3EtPnJlc2l6ZV9idWYsIEdGUF9BVE9NSUMpOworCWlmICghY3EtPnJlc2l6ZV9idWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJY3EtPnJlc2l6ZV9idWYtPnN0YXRlID0gQ1FfUkVTSVpFX0FMTE9DOworCisJcmV0ID0gMDsKKwordW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycSgmY3EtPmxvY2spOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG10aGNhX2FsbG9jX2NxX2J1ZihkZXYsICZjcS0+cmVzaXplX2J1Zi0+YnVmLCBlbnRyaWVzKTsKKwlpZiAocmV0KSB7CisJCXNwaW5fbG9ja19pcnEoJmNxLT5sb2NrKTsKKwkJa2ZyZWUoY3EtPnJlc2l6ZV9idWYpOworCQljcS0+cmVzaXplX2J1ZiA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmY3EtPmxvY2spOworCQlyZXR1cm4gcmV0OworCX0KKworCWNxLT5yZXNpemVfYnVmLT5jcWUgPSBlbnRyaWVzIC0gMTsKKworCXNwaW5fbG9ja19pcnEoJmNxLT5sb2NrKTsKKwljcS0+cmVzaXplX2J1Zi0+c3RhdGUgPSBDUV9SRVNJWkVfUkVBRFk7CisJc3Bpbl91bmxvY2tfaXJxKCZjcS0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGhjYV9yZXNpemVfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgZW50cmllcywgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSB0b19tZGV2KGliY3EtPmRldmljZSk7CisJc3RydWN0IG10aGNhX2NxICpjcSA9IHRvX21jcShpYmNxKTsKKwlzdHJ1Y3QgbXRoY2FfcmVzaXplX2NxIHVjbWQ7CisJdTMyIGxrZXk7CisJdTggc3RhdHVzOworCWludCByZXQ7CisKKwlpZiAoZW50cmllcyA8IDEgfHwgZW50cmllcyA+IGRldi0+bGltaXRzLm1heF9jcWVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVudHJpZXMgPSByb3VuZHVwX3Bvd19vZl90d28oZW50cmllcyArIDEpOworCWlmIChlbnRyaWVzID09IGliY3EtPmNxZSArIDEpCisJCXJldHVybiAwOworCisJaWYgKGNxLT5pc19rZXJuZWwpIHsKKwkJcmV0ID0gbXRoY2FfYWxsb2NfcmVzaXplX2J1ZihkZXYsIGNxLCBlbnRyaWVzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWxrZXkgPSBjcS0+cmVzaXplX2J1Zi0+YnVmLm1yLmlibXIubGtleTsKKwl9IGVsc2UgeworCQlpZiAoaWJfY29weV9mcm9tX3VkYXRhKCZ1Y21kLCB1ZGF0YSwgc2l6ZW9mIHVjbWQpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWxrZXkgPSB1Y21kLmxrZXk7CisJfQorCisJcmV0ID0gbXRoY2FfUkVTSVpFX0NRKGRldiwgY3EtPmNxbiwgbGtleSwgbG9uZ19sb2cyKGVudHJpZXMpLCAmc3RhdHVzKTsKKwlpZiAoc3RhdHVzKQorCQlyZXQgPSAtRUlOVkFMOworCisJaWYgKHJldCkgeworCQlpZiAoY3EtPnJlc2l6ZV9idWYpIHsKKwkJCW10aGNhX2ZyZWVfY3FfYnVmKGRldiwgJmNxLT5yZXNpemVfYnVmLT5idWYsCisJCQkJCSAgY3EtPnJlc2l6ZV9idWYtPmNxZSk7CisJCQlrZnJlZShjcS0+cmVzaXplX2J1Zik7CisJCQlzcGluX2xvY2tfaXJxKCZjcS0+bG9jayk7CisJCQljcS0+cmVzaXplX2J1ZiA9IE5VTEw7CisJCQlzcGluX3VubG9ja19pcnEoJmNxLT5sb2NrKTsKKwkJfQorCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChjcS0+aXNfa2VybmVsKSB7CisJCXN0cnVjdCBtdGhjYV9jcV9idWYgdGJ1ZjsKKwkJaW50IHRjcWU7CisKKwkJc3Bpbl9sb2NrX2lycSgmY3EtPmxvY2spOworCQlpZiAoY3EtPnJlc2l6ZV9idWYtPnN0YXRlID09IENRX1JFU0laRV9SRUFEWSkgeworCQkJbXRoY2FfY3FfcmVzaXplX2NvcHlfY3FlcyhjcSk7CisJCQl0YnVmICAgICAgICAgPSBjcS0+YnVmOworCQkJdGNxZSAgICAgICAgID0gY3EtPmliY3EuY3FlOworCQkJY3EtPmJ1ZiAgICAgID0gY3EtPnJlc2l6ZV9idWYtPmJ1ZjsKKwkJCWNxLT5pYmNxLmNxZSA9IGNxLT5yZXNpemVfYnVmLT5jcWU7CisJCX0gZWxzZSB7CisJCQl0YnVmID0gY3EtPnJlc2l6ZV9idWYtPmJ1ZjsKKwkJCXRjcWUgPSBjcS0+cmVzaXplX2J1Zi0+Y3FlOworCQl9CisKKwkJa2ZyZWUoY3EtPnJlc2l6ZV9idWYpOworCQljcS0+cmVzaXplX2J1ZiA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmY3EtPmxvY2spOworCisJCW10aGNhX2ZyZWVfY3FfYnVmKGRldiwgJnRidWYsIHRjcWUpOworCX0gZWxzZQorCQlpYmNxLT5jcWUgPSBlbnRyaWVzIC0gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG10aGNhX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICpjcSkKIHsKIAlpZiAoY3EtPnVvYmplY3QpIHsKQEAgLTEwNzAsNiArMTIwNCwyMCBAQAogCQlnb3RvIG91dDsKIAogCWluaXRfcXVlcnlfbWFkKGluX21hZCk7CisJaW5fbWFkLT5hdHRyX2lkID0gSUJfU01QX0FUVFJfTk9ERV9ERVNDOworCisJZXJyID0gbXRoY2FfTUFEX0lGQyhkZXYsIDEsIDEsCisJCQkgICAgMSwgTlVMTCwgTlVMTCwgaW5fbWFkLCBvdXRfbWFkLAorCQkJICAgICZzdGF0dXMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmIChzdGF0dXMpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KGRldi0+aWJfZGV2Lm5vZGVfZGVzYywgb3V0X21hZC0+ZGF0YSwgNjQpOworCiAJaW5fbWFkLT5hdHRyX2lkID0gSUJfU01QX0FUVFJfTk9ERV9JTkZPOwogCiAJZXJyID0gbXRoY2FfTUFEX0lGQyhkZXYsIDEsIDEsCkBAIC0xMTEzLDE0ICsxMjYxLDE3IEBACiAJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFUkVHX01SKQkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ09NUF9DSEFOTkVMKQl8CiAJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DUSkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUkVTSVpFX0NRKQkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0NRKQkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfUVApCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1FQKQkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfUVApCQl8CiAJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfUVApCQl8CiAJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0FUVEFDSF9NQ0FTVCkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVRBQ0hfTUNBU1QpCXwKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1NSUSkJCXwKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1NSUSkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfU1JRKQkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1NSUSk7CiAJZGV2LT5pYl9kZXYubm9kZV90eXBlICAgICAgICAgICAgPSBJQl9OT0RFX0NBOwogCWRldi0+aWJfZGV2LnBoeXNfcG9ydF9jbnQgICAgICAgID0gZGV2LT5saW1pdHMubnVtX3BvcnRzOwpAQCAtMTEyOCw2ICsxMjc5LDcgQEAKIAlkZXYtPmliX2Rldi5jbGFzc19kZXYuZGV2ICAgICAgICA9ICZkZXYtPnBkZXYtPmRldjsKIAlkZXYtPmliX2Rldi5xdWVyeV9kZXZpY2UgICAgICAgICA9IG10aGNhX3F1ZXJ5X2RldmljZTsKIAlkZXYtPmliX2Rldi5xdWVyeV9wb3J0ICAgICAgICAgICA9IG10aGNhX3F1ZXJ5X3BvcnQ7CisJZGV2LT5pYl9kZXYubW9kaWZ5X2RldmljZSAgICAgICAgPSBtdGhjYV9tb2RpZnlfZGV2aWNlOwogCWRldi0+aWJfZGV2Lm1vZGlmeV9wb3J0ICAgICAgICAgID0gbXRoY2FfbW9kaWZ5X3BvcnQ7CiAJZGV2LT5pYl9kZXYucXVlcnlfcGtleSAgICAgICAgICAgPSBtdGhjYV9xdWVyeV9wa2V5OwogCWRldi0+aWJfZGV2LnF1ZXJ5X2dpZCAgICAgICAgICAgID0gbXRoY2FfcXVlcnlfZ2lkOwpAQCAtMTEzNywxMSArMTI4OSwxMyBAQAogCWRldi0+aWJfZGV2LmFsbG9jX3BkICAgICAgICAgICAgID0gbXRoY2FfYWxsb2NfcGQ7CiAJZGV2LT5pYl9kZXYuZGVhbGxvY19wZCAgICAgICAgICAgPSBtdGhjYV9kZWFsbG9jX3BkOwogCWRldi0+aWJfZGV2LmNyZWF0ZV9haCAgICAgICAgICAgID0gbXRoY2FfYWhfY3JlYXRlOworCWRldi0+aWJfZGV2LnF1ZXJ5X2FoICAgICAgICAgICAgID0gbXRoY2FfYWhfcXVlcnk7CiAJZGV2LT5pYl9kZXYuZGVzdHJveV9haCAgICAgICAgICAgPSBtdGhjYV9haF9kZXN0cm95OwogCiAJaWYgKGRldi0+bXRoY2FfZmxhZ3MgJiBNVEhDQV9GTEFHX1NSUSkgewogCQlkZXYtPmliX2Rldi5jcmVhdGVfc3JxICAgICAgICAgICA9IG10aGNhX2NyZWF0ZV9zcnE7Ci0JCWRldi0+aWJfZGV2Lm1vZGlmeV9zcnEJCSA9IG10aGNhX21vZGlmeV9zcnE7CisJCWRldi0+aWJfZGV2Lm1vZGlmeV9zcnEgICAgICAgICAgID0gbXRoY2FfbW9kaWZ5X3NycTsKKwkJZGV2LT5pYl9kZXYucXVlcnlfc3JxICAgICAgICAgICAgPSBtdGhjYV9xdWVyeV9zcnE7CiAJCWRldi0+aWJfZGV2LmRlc3Ryb3lfc3JxICAgICAgICAgID0gbXRoY2FfZGVzdHJveV9zcnE7CiAKIAkJaWYgKG10aGNhX2lzX21lbWZyZWUoZGV2KSkKQEAgLTExNTIsOCArMTMwNiwxMCBAQAogCiAJZGV2LT5pYl9kZXYuY3JlYXRlX3FwICAgICAgICAgICAgPSBtdGhjYV9jcmVhdGVfcXA7CiAJZGV2LT5pYl9kZXYubW9kaWZ5X3FwICAgICAgICAgICAgPSBtdGhjYV9tb2RpZnlfcXA7CisJZGV2LT5pYl9kZXYucXVlcnlfcXAgICAgICAgICAgICAgPSBtdGhjYV9xdWVyeV9xcDsKIAlkZXYtPmliX2Rldi5kZXN0cm95X3FwICAgICAgICAgICA9IG10aGNhX2Rlc3Ryb3lfcXA7CiAJZGV2LT5pYl9kZXYuY3JlYXRlX2NxICAgICAgICAgICAgPSBtdGhjYV9jcmVhdGVfY3E7CisJZGV2LT5pYl9kZXYucmVzaXplX2NxICAgICAgICAgICAgPSBtdGhjYV9yZXNpemVfY3E7CiAJZGV2LT5pYl9kZXYuZGVzdHJveV9jcSAgICAgICAgICAgPSBtdGhjYV9kZXN0cm95X2NxOwogCWRldi0+aWJfZGV2LnBvbGxfY3EgICAgICAgICAgICAgID0gbXRoY2FfcG9sbF9jcTsKIAlkZXYtPmliX2Rldi5nZXRfZG1hX21yICAgICAgICAgICA9IG10aGNhX2dldF9kbWFfbXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCmluZGV4IDFlNzM5NDcuLjJlN2Y1MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNCBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KQEAgLTE2NCw5ICsxNjQsMTEgQEAKICAqIC0gd2FpdF9ldmVudCB1bnRpbCByZWYgY291bnQgaXMgemVybwogICoKICAqIEl0IGlzIHRoZSBjb25zdW1lcidzIHJlc3BvbnNpYmlsdHkgdG8gbWFrZSBzdXJlIHRoYXQgbm8gUVAKLSAqIG9wZXJhdGlvbnMgKFdRRSBwb3N0aW5nIG9yIHN0YXRlIG1vZGlmaWNhdGlvbikgYXJlIHBlbmRpbmcgd2hlbiB0aGUKKyAqIG9wZXJhdGlvbnMgKFdRRSBwb3N0aW5nIG9yIHN0YXRlIG1vZGlmaWNhdGlvbikgYXJlIHBlbmRpbmcgd2hlbiBhCiAgKiBRUCBpcyBkZXN0cm95ZWQuICBBbHNvLCB0aGUgY29uc3VtZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCBjYWxscyB0bwotICogcXBfbW9kaWZ5IGFyZSBzZXJpYWxpemVkLgorICogcXBfbW9kaWZ5IGFyZSBzZXJpYWxpemVkLiAgU2ltaWxhcmx5LCB0aGUgY29uc3VtZXIgaXMgcmVzcG9uc2libGUKKyAqIGZvciBlbnN1cmluZyB0aGF0IG5vIENRIHJlc2l6ZSBvcGVyYXRpb25zIGFyZSBwZW5kaW5nIHdoZW4gYSBDUQorICogaXMgZGVzdHJveWVkLgogICoKICAqIFBvc3NpYmxlIG9wdGltaXphdGlvbnMgKHdhaXQgZm9yIHByb2ZpbGUgZGF0YSB0byBzZWUgaWYvd2hlcmUgd2UKICAqIGhhdmUgbG9ja3MgYm91bmNpbmcgYmV0d2VlbiBDUFVzKToKQEAgLTE3NiwyNSArMTc4LDQwIEBACiAgKiAgIHNlbmQgcXVldWUgYW5kIG9uZSBmb3IgdGhlIHJlY2VpdmUgcXVldWUpCiAgKi8KIAorc3RydWN0IG10aGNhX2NxX2J1ZiB7CisJdW5pb24gbXRoY2FfYnVmCQlxdWV1ZTsKKwlzdHJ1Y3QgbXRoY2FfbXIJCW1yOworCWludAkJCWlzX2RpcmVjdDsKK307CisKK3N0cnVjdCBtdGhjYV9jcV9yZXNpemUgeworCXN0cnVjdCBtdGhjYV9jcV9idWYJYnVmOworCWludAkJCWNxZTsKKwllbnVtIHsKKwkJQ1FfUkVTSVpFX0FMTE9DLAorCQlDUV9SRVNJWkVfUkVBRFksCisJCUNRX1JFU0laRV9TV0FQUEVECisJfQkJCXN0YXRlOworfTsKKwogc3RydWN0IG10aGNhX2NxIHsKLQlzdHJ1Y3QgaWJfY3EgICAgICAgICAgIGliY3E7Ci0Jc3BpbmxvY2tfdCAgICAgICAgICAgICBsb2NrOwotCWF0b21pY190ICAgICAgICAgICAgICAgcmVmY291bnQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICBjcW47Ci0JdTMyICAgICAgICAgICAgICAgICAgICBjb25zX2luZGV4OwotCWludCAgICAgICAgICAgICAgICAgICAgaXNfZGlyZWN0OwotCWludCAgICAgICAgICAgICAgICAgICAgaXNfa2VybmVsOworCXN0cnVjdCBpYl9jcQkJaWJjcTsKKwlzcGlubG9ja190CQlsb2NrOworCWF0b21pY190CQlyZWZjb3VudDsKKwlpbnQJCQljcW47CisJdTMyCQkJY29uc19pbmRleDsKKwlzdHJ1Y3QgbXRoY2FfY3FfYnVmCWJ1ZjsKKwlzdHJ1Y3QgbXRoY2FfY3FfcmVzaXplICpyZXNpemVfYnVmOworCWludAkJCWlzX2tlcm5lbDsKIAogCS8qIE5leHQgZmllbGRzIGFyZSBBcmJlbCBvbmx5ICovCi0JaW50ICAgICAgICAgICAgICAgICAgICBzZXRfY2lfZGJfaW5kZXg7Ci0JX19iZTMyICAgICAgICAgICAgICAgICpzZXRfY2lfZGI7Ci0JaW50ICAgICAgICAgICAgICAgICAgICBhcm1fZGJfaW5kZXg7Ci0JX19iZTMyICAgICAgICAgICAgICAgICphcm1fZGI7Ci0JaW50ICAgICAgICAgICAgICAgICAgICBhcm1fc247CisJaW50CQkJc2V0X2NpX2RiX2luZGV4OworCV9fYmUzMgkJICAgICAgICpzZXRfY2lfZGI7CisJaW50CQkJYXJtX2RiX2luZGV4OworCV9fYmUzMgkJICAgICAgICphcm1fZGI7CisJaW50CQkJYXJtX3NuOwogCi0JdW5pb24gbXRoY2FfYnVmICAgICAgICBxdWV1ZTsKLQlzdHJ1Y3QgbXRoY2FfbXIgICAgICAgIG1yOwotCXdhaXRfcXVldWVfaGVhZF90ICAgICAgd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwogfTsKIAogc3RydWN0IG10aGNhX3NycSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCmluZGV4IGZiYTYwOGUuLmY2NzNjNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA0IFZvbHRhaXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIAorICogQ29weXJpZ2h0IChjKSAyMDA0IFZvbHRhaXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTI4NiwyMDcgKzI4Niw2IEBACiAJfQogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQlpbnQgdHJhbnM7Ci0JdTMyIHJlcV9wYXJhbVtOVU1fVFJBTlNdOwotCXUzMiBvcHRfcGFyYW1bTlVNX1RSQU5TXTsKLX0gc3RhdGVfdGFibGVbSUJfUVBTX0VSUiArIDFdW0lCX1FQU19FUlIgKyAxXSA9IHsKLQlbSUJfUVBTX1JFU0VUXSA9IHsKLQkJW0lCX1FQU19SRVNFVF0gPSB7IC50cmFucyA9IE1USENBX1RSQU5TX0FOWTJSU1QgfSwKLQkJW0lCX1FQU19FUlJdID0geyAudHJhbnMgPSBNVEhDQV9UUkFOU19BTlkyRVJSIH0sCi0JCVtJQl9RUFNfSU5JVF0gID0gewotCQkJLnRyYW5zID0gTVRIQ0FfVFJBTlNfUlNUMklOSVQsCi0JCQkucmVxX3BhcmFtID0gewotCQkJCVtVRF0gID0gKElCX1FQX1BLRVlfSU5ERVggfAotCQkJCQkgSUJfUVBfUE9SVCAgICAgICB8Ci0JCQkJCSBJQl9RUF9RS0VZKSwKLQkJCQlbVUNdICA9IChJQl9RUF9QS0VZX0lOREVYIHwKLQkJCQkJIElCX1FQX1BPUlQgICAgICAgfAotCQkJCQkgSUJfUVBfQUNDRVNTX0ZMQUdTKSwKLQkJCQlbUkNdICA9IChJQl9RUF9QS0VZX0lOREVYIHwKLQkJCQkJIElCX1FQX1BPUlQgICAgICAgfAotCQkJCQkgSUJfUVBfQUNDRVNTX0ZMQUdTKSwKLQkJCQlbTUxYXSA9IChJQl9RUF9QS0VZX0lOREVYIHwKLQkJCQkJIElCX1FQX1FLRVkpLAotCQkJfSwKLQkJCS8qIGJ1Zy1mb3ItYnVnIGNvbXBhdGliaWxpdHkgd2l0aCBWQVBJOiAqLwotCQkJLm9wdF9wYXJhbSA9IHsKLQkJCQlbTUxYXSA9IElCX1FQX1BPUlQKLQkJCX0KLQkJfSwKLQl9LAotCVtJQl9RUFNfSU5JVF0gID0gewotCQlbSUJfUVBTX1JFU0VUXSA9IHsgLnRyYW5zID0gTVRIQ0FfVFJBTlNfQU5ZMlJTVCB9LAotCQlbSUJfUVBTX0VSUl0gPSB7IC50cmFucyA9IE1USENBX1RSQU5TX0FOWTJFUlIgfSwKLQkJW0lCX1FQU19JTklUXSAgPSB7Ci0JCQkudHJhbnMgPSBNVEhDQV9UUkFOU19JTklUMklOSVQsCi0JCQkub3B0X3BhcmFtID0gewotCQkJCVtVRF0gID0gKElCX1FQX1BLRVlfSU5ERVggfAotCQkJCQkgSUJfUVBfUE9SVCAgICAgICB8Ci0JCQkJCSBJQl9RUF9RS0VZKSwKLQkJCQlbVUNdICA9IChJQl9RUF9QS0VZX0lOREVYIHwKLQkJCQkJIElCX1FQX1BPUlQgICAgICAgfAotCQkJCQkgSUJfUVBfQUNDRVNTX0ZMQUdTKSwKLQkJCQlbUkNdICA9IChJQl9RUF9QS0VZX0lOREVYIHwKLQkJCQkJIElCX1FQX1BPUlQgICAgICAgfAotCQkJCQkgSUJfUVBfQUNDRVNTX0ZMQUdTKSwKLQkJCQlbTUxYXSA9IChJQl9RUF9QS0VZX0lOREVYIHwKLQkJCQkJIElCX1FQX1FLRVkpLAotCQkJfQotCQl9LAotCQlbSUJfUVBTX1JUUl0gICA9IHsKLQkJCS50cmFucyA9IE1USENBX1RSQU5TX0lOSVQyUlRSLAotCQkJLnJlcV9wYXJhbSA9IHsKLQkJCQlbVUNdICA9IChJQl9RUF9BViAgICAgICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1BBVEhfTVRVICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfREVTVF9RUE4gICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9SUV9QU04pLAotCQkJCVtSQ10gID0gKElCX1FQX0FWICAgICAgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfUEFUSF9NVFUgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9ERVNUX1FQTiAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1JRX1BTTiAgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDICB8Ci0JCQkJCSBJQl9RUF9NSU5fUk5SX1RJTUVSKSwKLQkJCX0sCi0JCQkub3B0X3BhcmFtID0gewotCQkJCVtVRF0gID0gKElCX1FQX1BLRVlfSU5ERVggfAotCQkJCQkgSUJfUVBfUUtFWSksCi0JCQkJW1VDXSAgPSAoSUJfUVBfQUxUX1BBVEggICAgIHwKLQkJCQkJIElCX1FQX0FDQ0VTU19GTEFHUyB8Ci0JCQkJCSBJQl9RUF9QS0VZX0lOREVYKSwKLQkJCQlbUkNdICA9IChJQl9RUF9BTFRfUEFUSCAgICAgfAotCQkJCQkgSUJfUVBfQUNDRVNTX0ZMQUdTIHwKLQkJCQkJIElCX1FQX1BLRVlfSU5ERVgpLAotCQkJCVtNTFhdID0gKElCX1FQX1BLRVlfSU5ERVggfAotCQkJCQkgSUJfUVBfUUtFWSksCi0JCQl9Ci0JCX0KLQl9LAotCVtJQl9RUFNfUlRSXSAgID0gewotCQlbSUJfUVBTX1JFU0VUXSA9IHsgLnRyYW5zID0gTVRIQ0FfVFJBTlNfQU5ZMlJTVCB9LAotCQlbSUJfUVBTX0VSUl0gPSB7IC50cmFucyA9IE1USENBX1RSQU5TX0FOWTJFUlIgfSwKLQkJW0lCX1FQU19SVFNdICAgPSB7Ci0JCQkudHJhbnMgPSBNVEhDQV9UUkFOU19SVFIyUlRTLAotCQkJLnJlcV9wYXJhbSA9IHsKLQkJCQlbVURdICA9IElCX1FQX1NRX1BTTiwKLQkJCQlbVUNdICA9IElCX1FQX1NRX1BTTiwKLQkJCQlbUkNdICA9IChJQl9RUF9USU1FT1VUICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9SRVRSWV9DTlQgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9STlJfUkVUUlkgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9TUV9QU04gICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9NQVhfUVBfUkRfQVRPTUlDKSwKLQkJCQlbTUxYXSA9IElCX1FQX1NRX1BTTiwKLQkJCX0sCi0JCQkub3B0X3BhcmFtID0gewotCQkJCVtVRF0gID0gKElCX1FQX0NVUl9TVEFURSAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9RS0VZKSwKLQkJCQlbVUNdICA9IChJQl9RUF9DVVJfU1RBVEUgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfQUxUX1BBVEggICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX0FDQ0VTU19GTEFHUyAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9QQVRIX01JR19TVEFURSksCi0JCQkJW1JDXSAgPSAoSUJfUVBfQ1VSX1NUQVRFICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX0FMVF9QQVRIICAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9BQ0NFU1NfRkxBR1MgICAgICAgICAgfAotCQkJCQkgSUJfUVBfTUlOX1JOUl9USU1FUiAgICAgICAgIHwKLQkJCQkJIElCX1FQX1BBVEhfTUlHX1NUQVRFKSwKLQkJCQlbTUxYXSA9IChJQl9RUF9DVVJfU1RBVEUgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfUUtFWSksCi0JCQl9Ci0JCX0KLQl9LAotCVtJQl9RUFNfUlRTXSAgID0gewotCQlbSUJfUVBTX1JFU0VUXSA9IHsgLnRyYW5zID0gTVRIQ0FfVFJBTlNfQU5ZMlJTVCB9LAotCQlbSUJfUVBTX0VSUl0gPSB7IC50cmFucyA9IE1USENBX1RSQU5TX0FOWTJFUlIgfSwKLQkJW0lCX1FQU19SVFNdICAgPSB7Ci0JCQkudHJhbnMgPSBNVEhDQV9UUkFOU19SVFMyUlRTLAotCQkJLm9wdF9wYXJhbSA9IHsKLQkJCQlbVURdICA9IChJQl9RUF9DVVJfU1RBVEUgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfUUtFWSksCi0JCQkJW1VDXSAgPSAoSUJfUVBfQUNDRVNTX0ZMQUdTICAgICAgICAgIHwKLQkJCQkJIElCX1FQX0FMVF9QQVRIICAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9QQVRIX01JR19TVEFURSksCi0JCQkJW1JDXSAgPSAoSUJfUVBfQUNDRVNTX0ZMQUdTICAgICAgICAgIHwKLQkJCQkJIElCX1FQX0FMVF9QQVRIICAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9QQVRIX01JR19TVEFURSAgICAgICAgfAotCQkJCQkgSUJfUVBfTUlOX1JOUl9USU1FUiksCi0JCQkJW01MWF0gPSAoSUJfUVBfQ1VSX1NUQVRFICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1FLRVkpLAotCQkJfQotCQl9LAotCQlbSUJfUVBTX1NRRF0gICA9IHsKLQkJCS50cmFucyA9IE1USENBX1RSQU5TX1JUUzJTUUQsCi0JCX0sCi0JfSwKLQlbSUJfUVBTX1NRRF0gICA9IHsKLQkJW0lCX1FQU19SRVNFVF0gPSB7IC50cmFucyA9IE1USENBX1RSQU5TX0FOWTJSU1QgfSwKLQkJW0lCX1FQU19FUlJdID0geyAudHJhbnMgPSBNVEhDQV9UUkFOU19BTlkyRVJSIH0sCi0JCVtJQl9RUFNfUlRTXSAgID0gewotCQkJLnRyYW5zID0gTVRIQ0FfVFJBTlNfU1FEMlJUUywKLQkJCS5vcHRfcGFyYW0gPSB7Ci0JCQkJW1VEXSAgPSAoSUJfUVBfQ1VSX1NUQVRFICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1FLRVkpLAotCQkJCVtVQ10gID0gKElCX1FQX0NVUl9TVEFURSAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9BTFRfUEFUSCAgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfQUNDRVNTX0ZMQUdTICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1BBVEhfTUlHX1NUQVRFKSwKLQkJCQlbUkNdICA9IChJQl9RUF9DVVJfU1RBVEUgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfQUxUX1BBVEggICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX0FDQ0VTU19GTEFHUyAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9NSU5fUk5SX1RJTUVSICAgICAgICAgfAotCQkJCQkgSUJfUVBfUEFUSF9NSUdfU1RBVEUpLAotCQkJCVtNTFhdID0gKElCX1FQX0NVUl9TVEFURSAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9RS0VZKSwKLQkJCX0KLQkJfSwKLQkJW0lCX1FQU19TUURdICAgPSB7Ci0JCQkudHJhbnMgPSBNVEhDQV9UUkFOU19TUUQyU1FELAotCQkJLm9wdF9wYXJhbSA9IHsKLQkJCQlbVURdICA9IChJQl9RUF9QS0VZX0lOREVYICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfUUtFWSksCi0JCQkJW1VDXSAgPSAoSUJfUVBfQVYgICAgICAgICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX0NVUl9TVEFURSAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9BTFRfUEFUSCAgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfQUNDRVNTX0ZMQUdTICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1BLRVlfSU5ERVggICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9QQVRIX01JR19TVEFURSksCi0JCQkJW1JDXSAgPSAoSUJfUVBfQVYgICAgICAgICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1RJTUVPVVQgICAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9SRVRSWV9DTlQgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfUk5SX1JFVFJZICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX01BWF9RUF9SRF9BVE9NSUMgICAgICB8Ci0JCQkJCSBJQl9RUF9NQVhfREVTVF9SRF9BVE9NSUMgICAgfAotCQkJCQkgSUJfUVBfQ1VSX1NUQVRFICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX0FMVF9QQVRIICAgICAgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9BQ0NFU1NfRkxBR1MgICAgICAgICAgfAotCQkJCQkgSUJfUVBfUEtFWV9JTkRFWCAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX01JTl9STlJfVElNRVIgICAgICAgICB8Ci0JCQkJCSBJQl9RUF9QQVRIX01JR19TVEFURSksCi0JCQkJW01MWF0gPSAoSUJfUVBfUEtFWV9JTkRFWCAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1FLRVkpLAotCQkJfQotCQl9Ci0JfSwKLQlbSUJfUVBTX1NRRV0gICA9IHsKLQkJW0lCX1FQU19SRVNFVF0gPSB7IC50cmFucyA9IE1USENBX1RSQU5TX0FOWTJSU1QgfSwKLQkJW0lCX1FQU19FUlJdID0geyAudHJhbnMgPSBNVEhDQV9UUkFOU19BTlkyRVJSIH0sCi0JCVtJQl9RUFNfUlRTXSAgID0gewotCQkJLnRyYW5zID0gTVRIQ0FfVFJBTlNfU1FFUlIyUlRTLAotCQkJLm9wdF9wYXJhbSA9IHsKLQkJCQlbVURdICA9IChJQl9RUF9DVVJfU1RBVEUgICAgICAgICAgICAgfAotCQkJCQkgSUJfUVBfUUtFWSksCi0JCQkJW1VDXSAgPSAoSUJfUVBfQ1VSX1NUQVRFICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX0FDQ0VTU19GTEFHUyksCi0JCQkJW01MWF0gPSAoSUJfUVBfQ1VSX1NUQVRFICAgICAgICAgICAgIHwKLQkJCQkJIElCX1FQX1FLRVkpLAotCQkJfQotCQl9Ci0JfSwKLQlbSUJfUVBTX0VSUl0gPSB7Ci0JCVtJQl9RUFNfUkVTRVRdID0geyAudHJhbnMgPSBNVEhDQV9UUkFOU19BTlkyUlNUIH0sCi0JCVtJQl9RUFNfRVJSXSA9IHsgLnRyYW5zID0gTVRIQ0FfVFJBTlNfQU5ZMkVSUiB9Ci0JfQotfTsKLQogc3RhdGljIHZvaWQgc3RvcmVfYXR0cnMoc3RydWN0IG10aGNhX3NxcCAqc3FwLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwKIAkJCWludCBhdHRyX21hc2spCiB7CkBAIC01NDksNiArMzQ4LDE0MSBAQAogCXJldHVybiBjcHVfdG9fYmUzMihod19hY2Nlc3NfZmxhZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIGVudW0gaWJfcXBfc3RhdGUgdG9faWJfcXBfc3RhdGUoaW50IG10aGNhX3N0YXRlKQoreworCXN3aXRjaCAobXRoY2Ffc3RhdGUpIHsKKwljYXNlIE1USENBX1FQX1NUQVRFX1JTVDogICAgICByZXR1cm4gSUJfUVBTX1JFU0VUOworCWNhc2UgTVRIQ0FfUVBfU1RBVEVfSU5JVDogICAgIHJldHVybiBJQl9RUFNfSU5JVDsKKwljYXNlIE1USENBX1FQX1NUQVRFX1JUUjogICAgICByZXR1cm4gSUJfUVBTX1JUUjsKKwljYXNlIE1USENBX1FQX1NUQVRFX1JUUzogICAgICByZXR1cm4gSUJfUVBTX1JUUzsKKwljYXNlIE1USENBX1FQX1NUQVRFX0RSQUlOSU5HOgorCWNhc2UgTVRIQ0FfUVBfU1RBVEVfU1FEOiAgICAgIHJldHVybiBJQl9RUFNfU1FEOworCWNhc2UgTVRIQ0FfUVBfU1RBVEVfU1FFOiAgICAgIHJldHVybiBJQl9RUFNfU1FFOworCWNhc2UgTVRIQ0FfUVBfU1RBVEVfRVJSOiAgICAgIHJldHVybiBJQl9RUFNfRVJSOworCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBpYl9taWdfc3RhdGUgdG9faWJfbWlnX3N0YXRlKGludCBtdGhjYV9taWdfc3RhdGUpCit7CisJc3dpdGNoIChtdGhjYV9taWdfc3RhdGUpIHsKKwljYXNlIDA6ICByZXR1cm4gSUJfTUlHX0FSTUVEOworCWNhc2UgMTogIHJldHVybiBJQl9NSUdfUkVBUk07CisJY2FzZSAzOiAgcmV0dXJuIElCX01JR19NSUdSQVRFRDsKKwlkZWZhdWx0OiByZXR1cm4gLTE7CisJfQorfQorCitzdGF0aWMgaW50IHRvX2liX3FwX2FjY2Vzc19mbGFncyhpbnQgbXRoY2FfZmxhZ3MpCit7CisJaW50IGliX2ZsYWdzID0gMDsKKworCWlmIChtdGhjYV9mbGFncyAmIE1USENBX1FQX0JJVF9SUkUpCisJCWliX2ZsYWdzIHw9IElCX0FDQ0VTU19SRU1PVEVfUkVBRDsKKwlpZiAobXRoY2FfZmxhZ3MgJiBNVEhDQV9RUF9CSVRfUldFKQorCQlpYl9mbGFncyB8PSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOworCWlmIChtdGhjYV9mbGFncyAmIE1USENBX1FQX0JJVF9SQUUpCisJCWliX2ZsYWdzIHw9IElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDOworCisJcmV0dXJuIGliX2ZsYWdzOworfQorCitzdGF0aWMgdm9pZCB0b19pYl9haF9hdHRyKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IGliX2FoX2F0dHIgKmliX2FoX2F0dHIsCisJCQkJc3RydWN0IG10aGNhX3FwX3BhdGggKnBhdGgpCit7CisJbWVtc2V0KGliX2FoX2F0dHIsIDAsIHNpemVvZiAqcGF0aCk7CisJaWJfYWhfYXR0ci0+cG9ydF9udW0gCSAgPSAoYmUzMl90b19jcHUocGF0aC0+cG9ydF9wa2V5KSA+PiAyNCkgJiAweDM7CisJaWJfYWhfYXR0ci0+ZGxpZCAgICAgCSAgPSBiZTE2X3RvX2NwdShwYXRoLT5ybGlkKTsKKwlpYl9haF9hdHRyLT5zbCAgICAgICAJICA9IGJlMzJfdG9fY3B1KHBhdGgtPnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDI4OworCWliX2FoX2F0dHItPnNyY19wYXRoX2JpdHMgPSBwYXRoLT5nX215bG1jICYgMHg3ZjsKKwlpYl9haF9hdHRyLT5zdGF0aWNfcmF0ZSAgID0gcGF0aC0+c3RhdGljX3JhdGUgJiAweDc7CisJaWJfYWhfYXR0ci0+YWhfZmxhZ3MgICAgICA9IChwYXRoLT5nX215bG1jICYgKDEgPDwgNykpID8gSUJfQUhfR1JIIDogMDsKKwlpZiAoaWJfYWhfYXR0ci0+YWhfZmxhZ3MpIHsKKwkJaWJfYWhfYXR0ci0+Z3JoLnNnaWRfaW5kZXggPSBwYXRoLT5tZ2lkX2luZGV4ICYgKGRldi0+bGltaXRzLmdpZF90YWJsZV9sZW4gLSAxKTsKKwkJaWJfYWhfYXR0ci0+Z3JoLmhvcF9saW1pdCAgPSBwYXRoLT5ob3BfbGltaXQ7CisJCWliX2FoX2F0dHItPmdyaC50cmFmZmljX2NsYXNzID0KKwkJCShiZTMyX3RvX2NwdShwYXRoLT5zbF90Y2xhc3NfZmxvd2xhYmVsKSA+PiAyMCkgJiAweGZmOworCQlpYl9haF9hdHRyLT5ncmguZmxvd19sYWJlbCA9CisJCQliZTMyX3RvX2NwdShwYXRoLT5zbF90Y2xhc3NfZmxvd2xhYmVsKSAmIDB4ZmZmZmY7CisJCW1lbWNweShpYl9haF9hdHRyLT5ncmguZGdpZC5yYXcsCisJCQlwYXRoLT5yZ2lkLCBzaXplb2YgaWJfYWhfYXR0ci0+Z3JoLmRnaWQucmF3KTsKKwl9Cit9CisKK2ludCBtdGhjYV9xdWVyeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyLCBpbnQgcXBfYXR0cl9tYXNrLAorCQkgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICpxcF9pbml0X2F0dHIpCit7CisJc3RydWN0IG10aGNhX2RldiAqZGV2ID0gdG9fbWRldihpYnFwLT5kZXZpY2UpOworCXN0cnVjdCBtdGhjYV9xcCAqcXAgPSB0b19tcXAoaWJxcCk7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXRoY2FfbWFpbGJveCAqbWFpbGJveDsKKwlzdHJ1Y3QgbXRoY2FfcXBfcGFyYW0gKnFwX3BhcmFtOworCXN0cnVjdCBtdGhjYV9xcF9jb250ZXh0ICpjb250ZXh0OworCWludCBtdGhjYV9zdGF0ZTsKKwl1OCBzdGF0dXM7CisKKwltYWlsYm94ID0gbXRoY2FfYWxsb2NfbWFpbGJveChkZXYsIEdGUF9LRVJORUwpOworCWlmIChJU19FUlIobWFpbGJveCkpCisJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOworCisJZXJyID0gbXRoY2FfUVVFUllfUVAoZGV2LCBxcC0+cXBuLCAwLCBtYWlsYm94LCAmc3RhdHVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwlpZiAoc3RhdHVzKSB7CisJCW10aGNhX3dhcm4oZGV2LCAiUVVFUllfUVAgcmV0dXJuZWQgc3RhdHVzICUwMnhcbiIsIHN0YXR1cyk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXFwX3BhcmFtICAgID0gbWFpbGJveC0+YnVmOworCWNvbnRleHQgICAgID0gJnFwX3BhcmFtLT5jb250ZXh0OworCW10aGNhX3N0YXRlID0gYmUzMl90b19jcHUoY29udGV4dC0+ZmxhZ3MpID4+IDI4OworCisJcXBfYXR0ci0+cXBfc3RhdGUgCSAgICAgPSB0b19pYl9xcF9zdGF0ZShtdGhjYV9zdGF0ZSk7CisJcXBfYXR0ci0+Y3VyX3FwX3N0YXRlIAkgICAgID0gcXBfYXR0ci0+cXBfc3RhdGU7CisJcXBfYXR0ci0+cGF0aF9tdHUgCSAgICAgPSBjb250ZXh0LT5tdHVfbXNnbWF4ID4+IDU7CisJcXBfYXR0ci0+cGF0aF9taWdfc3RhdGUgICAgICA9CisJCXRvX2liX21pZ19zdGF0ZSgoYmUzMl90b19jcHUoY29udGV4dC0+ZmxhZ3MpID4+IDExKSAmIDB4Myk7CisJcXBfYXR0ci0+cWtleSAJCSAgICAgPSBiZTMyX3RvX2NwdShjb250ZXh0LT5xa2V5KTsKKwlxcF9hdHRyLT5ycV9wc24gCSAgICAgPSBiZTMyX3RvX2NwdShjb250ZXh0LT5ybnJfbmV4dHJlY3Zwc24pICYgMHhmZmZmZmY7CisJcXBfYXR0ci0+c3FfcHNuIAkgICAgID0gYmUzMl90b19jcHUoY29udGV4dC0+bmV4dF9zZW5kX3BzbikgJiAweGZmZmZmZjsKKwlxcF9hdHRyLT5kZXN0X3FwX251bSAJICAgICA9IGJlMzJfdG9fY3B1KGNvbnRleHQtPnJlbW90ZV9xcG4pICYgMHhmZmZmZmY7CisJcXBfYXR0ci0+cXBfYWNjZXNzX2ZsYWdzICAgICA9CisJCXRvX2liX3FwX2FjY2Vzc19mbGFncyhiZTMyX3RvX2NwdShjb250ZXh0LT5wYXJhbXMyKSk7CisJcXBfYXR0ci0+Y2FwLm1heF9zZW5kX3dyICAgICA9IHFwLT5zcS5tYXg7CisJcXBfYXR0ci0+Y2FwLm1heF9yZWN2X3dyICAgICA9IHFwLT5ycS5tYXg7CisJcXBfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSAgICA9IHFwLT5zcS5tYXhfZ3M7CisJcXBfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSAgICA9IHFwLT5ycS5tYXhfZ3M7CisJcXBfYXR0ci0+Y2FwLm1heF9pbmxpbmVfZGF0YSA9IHFwLT5tYXhfaW5saW5lX2RhdGE7CisKKwl0b19pYl9haF9hdHRyKGRldiwgJnFwX2F0dHItPmFoX2F0dHIsICZjb250ZXh0LT5wcmlfcGF0aCk7CisJdG9faWJfYWhfYXR0cihkZXYsICZxcF9hdHRyLT5hbHRfYWhfYXR0ciwgJmNvbnRleHQtPmFsdF9wYXRoKTsKKworCXFwX2F0dHItPnBrZXlfaW5kZXggICAgID0gYmUzMl90b19jcHUoY29udGV4dC0+cHJpX3BhdGgucG9ydF9wa2V5KSAmIDB4N2Y7CisJcXBfYXR0ci0+YWx0X3BrZXlfaW5kZXggPSBiZTMyX3RvX2NwdShjb250ZXh0LT5hbHRfcGF0aC5wb3J0X3BrZXkpICYgMHg3ZjsKKworCS8qIHFwX2F0dHItPmVuX3NxZF9hc3luY19ub3RpZnkgaXMgb25seSBhcHBsaWNhYmxlIGluIG1vZGlmeSBxcCAqLworCXFwX2F0dHItPnNxX2RyYWluaW5nID0gbXRoY2Ffc3RhdGUgPT0gTVRIQ0FfUVBfU1RBVEVfRFJBSU5JTkc7CisKKwlxcF9hdHRyLT5tYXhfcmRfYXRvbWljID0gMSA8PCAoKGJlMzJfdG9fY3B1KGNvbnRleHQtPnBhcmFtczEpID4+IDIxKSAmIDB4Nyk7CisKKwlxcF9hdHRyLT5tYXhfZGVzdF9yZF9hdG9taWMgPQorCQkxIDw8ICgoYmUzMl90b19jcHUoY29udGV4dC0+cGFyYW1zMikgPj4gMjEpICYgMHg3KTsKKwlxcF9hdHRyLT5taW5fcm5yX3RpbWVyIAkgICAgPQorCQkoYmUzMl90b19jcHUoY29udGV4dC0+cm5yX25leHRyZWN2cHNuKSA+PiAyNCkgJiAweDFmOworCXFwX2F0dHItPnBvcnRfbnVtIAkgICAgPSBxcF9hdHRyLT5haF9hdHRyLnBvcnRfbnVtOworCXFwX2F0dHItPnRpbWVvdXQgCSAgICA9IGNvbnRleHQtPnByaV9wYXRoLmFja3RvID4+IDM7CisJcXBfYXR0ci0+cmV0cnlfY250IAkgICAgPSAoYmUzMl90b19jcHUoY29udGV4dC0+cGFyYW1zMSkgPj4gMTYpICYgMHg3OworCXFwX2F0dHItPnJucl9yZXRyeSAJICAgID0gY29udGV4dC0+cHJpX3BhdGgucm5yX3JldHJ5ID4+IDU7CisJcXBfYXR0ci0+YWx0X3BvcnRfbnVtIAkgICAgPSBxcF9hdHRyLT5hbHRfYWhfYXR0ci5wb3J0X251bTsKKwlxcF9hdHRyLT5hbHRfdGltZW91dCAJICAgID0gY29udGV4dC0+YWx0X3BhdGguYWNrdG8gPj4gMzsKKwlxcF9pbml0X2F0dHItPmNhcCAJICAgID0gcXBfYXR0ci0+Y2FwOworCitvdXQ6CisJbXRoY2FfZnJlZV9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHZvaWQgbXRoY2FfcGF0aF9zZXQoc3RydWN0IGliX2FoX2F0dHIgKmFoLCBzdHJ1Y3QgbXRoY2FfcXBfcGF0aCAqcGF0aCkKIHsKIAlwYXRoLT5nX215bG1jICAgICA9IGFoLT5zcmNfcGF0aF9iaXRzICYgMHg3ZjsKQEAgLTU1OSw5ICs0OTMsOSBAQAogCQlwYXRoLT5nX215bG1jICAgfD0gMSA8PCA3OwogCQlwYXRoLT5tZ2lkX2luZGV4ID0gYWgtPmdyaC5zZ2lkX2luZGV4OwogCQlwYXRoLT5ob3BfbGltaXQgID0gYWgtPmdyaC5ob3BfbGltaXQ7Ci0JCXBhdGgtPnNsX3RjbGFzc19mbG93bGFiZWwgPSAKKwkJcGF0aC0+c2xfdGNsYXNzX2Zsb3dsYWJlbCA9CiAJCQljcHVfdG9fYmUzMigoYWgtPnNsIDw8IDI4KSAgICAgICAgICAgICAgICB8Ci0JCQkJICAgIChhaC0+Z3JoLnRyYWZmaWNfY2xhc3MgPDwgMjApIHwgCisJCQkJICAgIChhaC0+Z3JoLnRyYWZmaWNfY2xhc3MgPDwgMjApIHwKIAkJCQkgICAgKGFoLT5ncmguZmxvd19sYWJlbCkpOwogCQltZW1jcHkocGF0aC0+cmdpZCwgYWgtPmdyaC5kZ2lkLnJhdywgMTYpOwogCX0gZWxzZQpAQCAtNTc2LDE4ICs1MTAsMTIgQEAKIAlzdHJ1Y3QgbXRoY2FfbWFpbGJveCAqbWFpbGJveDsKIAlzdHJ1Y3QgbXRoY2FfcXBfcGFyYW0gKnFwX3BhcmFtOwogCXN0cnVjdCBtdGhjYV9xcF9jb250ZXh0ICpxcF9jb250ZXh0OwotCXUzMiByZXFfcGFyYW0sIG9wdF9wYXJhbTsKKwl1MzIgc3FkX2V2ZW50ID0gMDsKIAl1OCBzdGF0dXM7CiAJaW50IGVycjsKIAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9DVVJfU1RBVEUpIHsKLQkJaWYgKGF0dHItPmN1cl9xcF9zdGF0ZSAhPSBJQl9RUFNfUlRSICYmCi0JCSAgICBhdHRyLT5jdXJfcXBfc3RhdGUgIT0gSUJfUVBTX1JUUyAmJgotCQkgICAgYXR0ci0+Y3VyX3FwX3N0YXRlICE9IElCX1FQU19TUUQgJiYKLQkJICAgIGF0dHItPmN1cl9xcF9zdGF0ZSAhPSBJQl9RUFNfU1FFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UKLQkJCWN1cl9zdGF0ZSA9IGF0dHItPmN1cl9xcF9zdGF0ZTsKKwkJY3VyX3N0YXRlID0gYXR0ci0+Y3VyX3FwX3N0YXRlOwogCX0gZWxzZSB7CiAJCXNwaW5fbG9ja19pcnEoJnFwLT5zcS5sb2NrKTsKIAkJc3Bpbl9sb2NrKCZxcC0+cnEubG9jayk7CkBAIC01OTYsNDQgKzUyNCwyMCBAQAogCQlzcGluX3VubG9ja19pcnEoJnFwLT5zcS5sb2NrKTsKIAl9CiAKLQlpZiAoYXR0cl9tYXNrICYgSUJfUVBfU1RBVEUpIHsKLSAgICAgICAgICAgICAgIGlmIChhdHRyLT5xcF9zdGF0ZSA8IDAgfHwgYXR0ci0+cXBfc3RhdGUgPiBJQl9RUFNfRVJSKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW5ld19zdGF0ZSA9IGF0dHItPnFwX3N0YXRlOwotCX0gZWxzZQotCQluZXdfc3RhdGUgPSBjdXJfc3RhdGU7CisJbmV3X3N0YXRlID0gYXR0cl9tYXNrICYgSUJfUVBfU1RBVEUgPyBhdHRyLT5xcF9zdGF0ZSA6IGN1cl9zdGF0ZTsKIAotCWlmIChzdGF0ZV90YWJsZVtjdXJfc3RhdGVdW25ld19zdGF0ZV0udHJhbnMgPT0gTVRIQ0FfVFJBTlNfSU5WQUxJRCkgewotCQltdGhjYV9kYmcoZGV2LCAiSWxsZWdhbCBRUCB0cmFuc2l0aW9uICIKLQkJCSAgIiVkLT4lZFxuIiwgY3VyX3N0YXRlLCBuZXdfc3RhdGUpOworCWlmICghaWJfbW9kaWZ5X3FwX2lzX29rKGN1cl9zdGF0ZSwgbmV3X3N0YXRlLCBpYnFwLT5xcF90eXBlLCBhdHRyX21hc2spKSB7CisJCW10aGNhX2RiZyhkZXYsICJCYWQgUVAgdHJhbnNpdGlvbiAodHJhbnNwb3J0ICVkKSAiCisJCQkgICIlZC0+JWQgd2l0aCBhdHRyIDB4JTA4eFxuIiwKKwkJCSAgcXAtPnRyYW5zcG9ydCwgY3VyX3N0YXRlLCBuZXdfc3RhdGUsCisJCQkgIGF0dHJfbWFzayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJlcV9wYXJhbSA9IHN0YXRlX3RhYmxlW2N1cl9zdGF0ZV1bbmV3X3N0YXRlXS5yZXFfcGFyYW1bcXAtPnRyYW5zcG9ydF07Ci0Jb3B0X3BhcmFtID0gc3RhdGVfdGFibGVbY3VyX3N0YXRlXVtuZXdfc3RhdGVdLm9wdF9wYXJhbVtxcC0+dHJhbnNwb3J0XTsKLQotCWlmICgocmVxX3BhcmFtICYgYXR0cl9tYXNrKSAhPSByZXFfcGFyYW0pIHsKLQkJbXRoY2FfZGJnKGRldiwgIlFQIHRyYW5zaXRpb24gIgotCQkJICAiJWQtPiVkIG1pc3NpbmcgcmVxIGF0dHIgMHglMDh4XG4iLAotCQkJICBjdXJfc3RhdGUsIG5ld19zdGF0ZSwKLQkJCSAgcmVxX3BhcmFtICYgfmF0dHJfbWFzayk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChhdHRyX21hc2sgJiB+KHJlcV9wYXJhbSB8IG9wdF9wYXJhbSB8IElCX1FQX1NUQVRFKSkgewotCQltdGhjYV9kYmcoZGV2LCAiUVAgdHJhbnNpdGlvbiAodHJhbnNwb3J0ICVkKSAiCi0JCQkgICIlZC0+JWQgaGFzIGV4dHJhIGF0dHIgMHglMDh4XG4iLAotCQkJICBxcC0+dHJhbnNwb3J0LAotCQkJICBjdXJfc3RhdGUsIG5ld19zdGF0ZSwKLQkJCSAgYXR0cl9tYXNrICYgfihyZXFfcGFyYW0gfCBvcHRfcGFyYW0gfAotCQkJCQkJIElCX1FQX1NUQVRFKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoYXR0cl9tYXNrICYgSUJfUVBfUEtFWV9JTkRFWCkgJiYgCisJaWYgKChhdHRyX21hc2sgJiBJQl9RUF9QS0VZX0lOREVYKSAmJgogCSAgICAgYXR0ci0+cGtleV9pbmRleCA+PSBkZXYtPmxpbWl0cy5wa2V5X3RhYmxlX2xlbikgewotCQltdGhjYV9kYmcoZGV2LCAiUEtleSBpbmRleCAoJXUpIHRvbyBsYXJnZS4gbWF4IGlzICVkXG4iLAotCQkJICBhdHRyLT5wa2V5X2luZGV4LGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuLTEpOyAKKwkJbXRoY2FfZGJnKGRldiwgIlBfS2V5IGluZGV4ICgldSkgdG9vIGxhcmdlLiBtYXggaXMgJWRcbiIsCisJCQkgIGF0dHItPnBrZXlfaW5kZXgsIGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuLTEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTczMyw3ICs2MzcsNyBAQAogCWlmIChhdHRyX21hc2sgJiBJQl9RUF9STlJfUkVUUlkpIHsKIAkJcXBfY29udGV4dC0+YWx0X3BhdGgucm5yX3JldHJ5ID0gcXBfY29udGV4dC0+cHJpX3BhdGgucm5yX3JldHJ5ID0KIAkJCWF0dHItPnJucl9yZXRyeSA8PCA1OwotCQlxcF9wYXJhbS0+b3B0X3BhcmFtX21hc2sgfD0gY3B1X3RvX2JlMzIoTVRIQ0FfUVBfT1BUUEFSX1JOUl9SRVRSWSB8IAorCQlxcF9wYXJhbS0+b3B0X3BhcmFtX21hc2sgfD0gY3B1X3RvX2JlMzIoTVRIQ0FfUVBfT1BUUEFSX1JOUl9SRVRSWSB8CiAJCQkJCQkJTVRIQ0FfUVBfT1BUUEFSX0FMVF9STlJfUkVUUlkpOwogCX0KIApAQCAtNzQ4LDE0ICs2NTIsMjAgQEAKIAl9CiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQUxUX1BBVEgpIHsKKwkJaWYgKGF0dHItPmFsdF9wa2V5X2luZGV4ID49IGRldi0+bGltaXRzLnBrZXlfdGFibGVfbGVuKSB7CisJCQltdGhjYV9kYmcoZGV2LCAiQWx0ZXJuYXRlIFBfS2V5IGluZGV4ICgldSkgdG9vIGxhcmdlLiBtYXggaXMgJWRcbiIsCisJCQkJICBhdHRyLT5hbHRfcGtleV9pbmRleCwgZGV2LT5saW1pdHMucGtleV90YWJsZV9sZW4tMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCiAJCWlmIChhdHRyLT5hbHRfcG9ydF9udW0gPT0gMCB8fCBhdHRyLT5hbHRfcG9ydF9udW0gPiBkZXYtPmxpbWl0cy5udW1fcG9ydHMpIHsKLQkJCW10aGNhX2RiZyhkZXYsICJBbHRlcm5hdGUgcG9ydCBudW1iZXIgKCV1KSBpcyBpbnZhbGlkXG4iLCAKKwkJCW10aGNhX2RiZyhkZXYsICJBbHRlcm5hdGUgcG9ydCBudW1iZXIgKCV1KSBpcyBpbnZhbGlkXG4iLAogCQkJCWF0dHItPmFsdF9wb3J0X251bSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCW10aGNhX3BhdGhfc2V0KCZhdHRyLT5hbHRfYWhfYXR0ciwgJnFwX2NvbnRleHQtPmFsdF9wYXRoKTsKLQkJcXBfY29udGV4dC0+YWx0X3BhdGgucG9ydF9wa2V5IHw9IGNwdV90b19iZTMyKGF0dHItPmFsdF9wa2V5X2luZGV4IHwgCisJCXFwX2NvbnRleHQtPmFsdF9wYXRoLnBvcnRfcGtleSB8PSBjcHVfdG9fYmUzMihhdHRyLT5hbHRfcGtleV9pbmRleCB8CiAJCQkJCQkJICAgICAgYXR0ci0+YWx0X3BvcnRfbnVtIDw8IDI0KTsKIAkJcXBfY29udGV4dC0+YWx0X3BhdGguYWNrdG8gPSBhdHRyLT5hbHRfdGltZW91dCA8PCAzOwogCQlxcF9wYXJhbS0+b3B0X3BhcmFtX21hc2sgfD0gY3B1X3RvX2JlMzIoTVRIQ0FfUVBfT1BUUEFSX0FMVF9BRERSX1BBVEgpOwpAQCAtODQxLDExICs3NTEsMTYgQEAKIAkJcXBfY29udGV4dC0+c3JxbiA9IGNwdV90b19iZTMyKDEgPDwgMjQgfAogCQkJCQkgICAgICAgdG9fbXNycShpYnFwLT5zcnEpLT5zcnFuKTsKIAotCWVyciA9IG10aGNhX01PRElGWV9RUChkZXYsIHN0YXRlX3RhYmxlW2N1cl9zdGF0ZV1bbmV3X3N0YXRlXS50cmFucywKLQkJCSAgICAgIHFwLT5xcG4sIDAsIG1haWxib3gsIDAsICZzdGF0dXMpOworCWlmIChjdXJfc3RhdGUgPT0gSUJfUVBTX1JUUyAmJiBuZXdfc3RhdGUgPT0gSUJfUVBTX1NRRAkmJgorCSAgICBhdHRyX21hc2sgJiBJQl9RUF9FTl9TUURfQVNZTkNfTk9USUZZCQkmJgorCSAgICBhdHRyLT5lbl9zcWRfYXN5bmNfbm90aWZ5KQorCQlzcWRfZXZlbnQgPSAxIDw8IDMxOworCisJZXJyID0gbXRoY2FfTU9ESUZZX1FQKGRldiwgY3VyX3N0YXRlLCBuZXdfc3RhdGUsIHFwLT5xcG4sIDAsCisJCQkgICAgICBtYWlsYm94LCBzcWRfZXZlbnQsICZzdGF0dXMpOwogCWlmIChzdGF0dXMpIHsKLQkJbXRoY2Ffd2FybihkZXYsICJtb2RpZnkgUVAgJWQgcmV0dXJuZWQgc3RhdHVzICUwMnguXG4iLAotCQkJICAgc3RhdGVfdGFibGVbY3VyX3N0YXRlXVtuZXdfc3RhdGVdLnRyYW5zLCBzdGF0dXMpOworCQltdGhjYV93YXJuKGRldiwgIm1vZGlmeSBRUCAlZC0+JWQgcmV0dXJuZWQgc3RhdHVzICUwMnguXG4iLAorCQkJICAgY3VyX3N0YXRlLCBuZXdfc3RhdGUsIHN0YXR1cyk7CiAJCWVyciA9IC1FSU5WQUw7CiAJfQogCkBAIC0xMDc4LDEwICs5OTMsMTAgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyX3FwYzsKIAotIAkJcmV0ID0gbXRoY2FfdGFibGVfZ2V0KGRldiwgZGV2LT5xcF90YWJsZS5yZGJfdGFibGUsCi0gCQkJCSAgICAgIHFwLT5xcG4gPDwgZGV2LT5xcF90YWJsZS5yZGJfc2hpZnQpOwotIAkJaWYgKHJldCkKLSAJCQlnb3RvIGVycl9lcXBjOworCQlyZXQgPSBtdGhjYV90YWJsZV9nZXQoZGV2LCBkZXYtPnFwX3RhYmxlLnJkYl90YWJsZSwKKwkJCQkgICAgICBxcC0+cXBuIDw8IGRldi0+cXBfdGFibGUucmRiX3NoaWZ0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2VxcGM7CiAKIAl9CiAKQEAgLTEzOTMsNyArMTMwOCw4IEBACiAJd2FpdF9ldmVudChxcC0+d2FpdCwgIWF0b21pY19yZWFkKCZxcC0+cmVmY291bnQpKTsKIAogCWlmIChxcC0+c3RhdGUgIT0gSUJfUVBTX1JFU0VUKQotCQltdGhjYV9NT0RJRllfUVAoZGV2LCBNVEhDQV9UUkFOU19BTlkyUlNULCBxcC0+cXBuLCAwLCBOVUxMLCAwLCAmc3RhdHVzKTsKKwkJbXRoY2FfTU9ESUZZX1FQKGRldiwgcXAtPnN0YXRlLCBJQl9RUFNfUkVTRVQsIHFwLT5xcG4sIDAsCisJCQkJTlVMTCwgMCwgJnN0YXR1cyk7CiAKIAkvKgogCSAqIElmIHRoaXMgaXMgYSB1c2Vyc3BhY2UgUVAsIHRoZSBidWZmZXJzLCBNUiwgQ1FzIGFuZCBzbyBvbgpAQCAtMTY5OSw3ICsxNjE1LDkgQEAKIAkJCQkgICAgbXRoY2Ffb3Bjb2RlW3dyLT5vcGNvZGVdKTsKIAkJd21iKCk7CiAJCSgoc3RydWN0IG10aGNhX25leHRfc2VnICopIHByZXZfd3FlKS0+ZWVfbmRzID0KLQkJCWNwdV90b19iZTMyKChzaXplMCA/IDAgOiBNVEhDQV9ORVhUX0RCRCkgfCBzaXplKTsKKwkJCWNwdV90b19iZTMyKChzaXplMCA/IDAgOiBNVEhDQV9ORVhUX0RCRCkgfCBzaXplIHwKKwkJCQkgICAgKCh3ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfRkVOQ0UpID8KKwkJCQkgICAgTVRIQ0FfTkVYVF9GRU5DRSA6IDApKTsKIAogCQlpZiAoIXNpemUwKSB7CiAJCQlzaXplMCA9IHNpemU7CkBAIC0yMDYxLDcgKzE5NzksOSBAQAogCQkJCSAgICBtdGhjYV9vcGNvZGVbd3ItPm9wY29kZV0pOwogCQl3bWIoKTsKIAkJKChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgKikgcHJldl93cWUpLT5lZV9uZHMgPQotCQkJY3B1X3RvX2JlMzIoTVRIQ0FfTkVYVF9EQkQgfCBzaXplKTsKKwkJCWNwdV90b19iZTMyKE1USENBX05FWFRfREJEIHwgc2l6ZSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHdyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9GRU5DRSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRIQ0FfTkVYVF9GRU5DRSA6IDApKTsKIAogCQlpZiAoIXNpemUwKSB7CiAJCQlzaXplMCA9IHNpemU7CkBAIC0yMTE1LDcgKzIwMzUsNyBAQAogCWludCBpOwogCXZvaWQgKndxZTsKIAotIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnJxLmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnJxLmxvY2ssIGZsYWdzKTsKIAogCS8qIFhYWCBjaGVjayB0aGF0IHN0YXRlIGlzIE9LIHRvIHBvc3QgcmVjZWl2ZSAqLwogCkBAIC0yMTgyLDggKzIxMDIsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLWludCBtdGhjYV9mcmVlX2Vycl93cWUoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfcXAgKnFwLCBpbnQgaXNfc2VuZCwKLQkJICAgICAgIGludCBpbmRleCwgaW50ICpkYmQsIF9fYmUzMiAqbmV3X3dxZSkKK3ZvaWQgbXRoY2FfZnJlZV9lcnJfd3FlKHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgc3RydWN0IG10aGNhX3FwICpxcCwgaW50IGlzX3NlbmQsCisJCQlpbnQgaW5kZXgsIGludCAqZGJkLCBfX2JlMzIgKm5ld193cWUpCiB7CiAJc3RydWN0IG10aGNhX25leHRfc2VnICpuZXh0OwogCkBAIC0yMTkzLDcgKzIxMTMsNyBAQAogCSAqLwogCWlmIChxcC0+aWJxcC5zcnEpIHsKIAkJKm5ld193cWUgPSAwOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAogCWlmIChpc19zZW5kKQpAQCAtMjIwNyw4ICsyMTI3LDYgQEAKIAkJCShuZXh0LT5lZV9uZHMgJiBjcHVfdG9fYmUzMigweDNmKSk7CiAJZWxzZQogCQkqbmV3X3dxZSA9IDA7Ci0KLQlyZXR1cm4gMDsKIH0KIAogaW50IF9fZGV2aW5pdCBtdGhjYV9pbml0X3FwX3RhYmxlKHN0cnVjdCBtdGhjYV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwppbmRleCBlN2UxNTNkLi40N2E2YTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCkBAIC00OSw3ICs0OSw4IEBACiAJX19iZTMyIHN0YXRlX3BkOwogCV9fYmUzMiBsa2V5OwogCV9fYmUzMiB1YXI7Ci0JX19iZTMyIHdxZV9jbnQ7CisJX19iZTE2IGxpbWl0X3dhdGVybWFyazsKKwlfX2JlMTYgd3FlX2NudDsKIAl1MzIgICAgcmVzZXJ2ZWRbMl07CiB9OwogCkBAIC0yNzEsNiArMjcyLDkgQEAKIAlzcnEtPmZpcnN0X2ZyZWUgPSAwOwogCXNycS0+bGFzdF9mcmVlICA9IHNycS0+bWF4IC0gMTsKIAorCWF0dHItPm1heF93ciAgICA9IChtdGhjYV9pc19tZW1mcmVlKGRldikpID8gc3JxLT5tYXggLSAxIDogc3JxLT5tYXg7CisJYXR0ci0+bWF4X3NnZSAgID0gc3JxLT5tYXhfZ3M7CisKIAlyZXR1cm4gMDsKIAogZXJyX291dF9mcmVlX3NycToKQEAgLTMzOSw3ICszNDMsNyBAQAogCiBpbnQgbXRoY2FfbW9kaWZ5X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3NycV9hdHRyICphdHRyLAogCQkgICAgIGVudW0gaWJfc3JxX2F0dHJfbWFzayBhdHRyX21hc2spCi17CQorewogCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9IHRvX21kZXYoaWJzcnEtPmRldmljZSk7CiAJc3RydWN0IG10aGNhX3NycSAqc3JxID0gdG9fbXNycShpYnNycSk7CiAJaW50IHJldDsKQEAgLTM2MCw2ICszNjQsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IG10aGNhX3F1ZXJ5X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3NycV9hdHRyICpzcnFfYXR0cikKK3sKKwlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSB0b19tZGV2KGlic3JxLT5kZXZpY2UpOworCXN0cnVjdCBtdGhjYV9zcnEgKnNycSA9IHRvX21zcnEoaWJzcnEpOworCXN0cnVjdCBtdGhjYV9tYWlsYm94ICptYWlsYm94OworCXN0cnVjdCBtdGhjYV9hcmJlbF9zcnFfY29udGV4dCAqYXJiZWxfY3R4OworCXN0cnVjdCBtdGhjYV90YXZvcl9zcnFfY29udGV4dCAqdGF2b3JfY3R4OworCXU4IHN0YXR1czsKKwlpbnQgZXJyOworCisJbWFpbGJveCA9IG10aGNhX2FsbG9jX21haWxib3goZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAoSVNfRVJSKG1haWxib3gpKQorCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKworCWVyciA9IG10aGNhX1FVRVJZX1NSUShkZXYsIHNycS0+c3JxbiwgbWFpbGJveCwgJnN0YXR1cyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKSB7CisJCWFyYmVsX2N0eCA9IG1haWxib3gtPmJ1ZjsKKwkJc3JxX2F0dHItPnNycV9saW1pdCA9IGJlMTZfdG9fY3B1KGFyYmVsX2N0eC0+bGltaXRfd2F0ZXJtYXJrKTsKKwl9IGVsc2UgeworCQl0YXZvcl9jdHggPSBtYWlsYm94LT5idWY7CisJCXNycV9hdHRyLT5zcnFfbGltaXQgPSBiZTE2X3RvX2NwdSh0YXZvcl9jdHgtPmxpbWl0X3dhdGVybWFyayk7CisJfQorCisJc3JxX2F0dHItPm1heF93ciAgPSAobXRoY2FfaXNfbWVtZnJlZShkZXYpKSA/IHNycS0+bWF4IC0gMSA6IHNycS0+bWF4OworCXNycV9hdHRyLT5tYXhfc2dlID0gc3JxLT5tYXhfZ3M7CisKK291dDoKKwltdGhjYV9mcmVlX21haWxib3goZGV2LCBtYWlsYm94KTsKKworCXJldHVybiBlcnI7Cit9CisKIHZvaWQgbXRoY2Ffc3JxX2V2ZW50KHN0cnVjdCBtdGhjYV9kZXYgKmRldiwgdTMyIHNycW4sCiAJCSAgICAgZW51bSBpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfdXNlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3VzZXIuaAppbmRleCBiYjAxNWM2Li4wMmNjMGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfdXNlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV91c2VyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC03NSw2ICs3NSwxMSBAQAogCV9fdTMyIHJlc2VydmVkOwogfTsKIAorc3RydWN0IG10aGNhX3Jlc2l6ZV9jcSB7CisJX191MzIgbGtleTsKKwlfX3UzMiByZXNlcnZlZDsKK307CisKIHN0cnVjdCBtdGhjYV9jcmVhdGVfc3JxIHsKIAlfX3UzMiBsa2V5OwogCV9fdTMyIGRiX2luZGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IDJmODVhOWEuLjEyNTFmODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTIxNywxMCArMjE3LDE2IEBACiAJc3RydWN0IGxpc3RfaGVhZCAgICBsaXN0OwogfTsKIAorLyoKKyAqIFdlIHN0YXNoIGEgcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBuZWlnaGJvdXIgaW5mb3JtYXRpb24gYWZ0ZXIgb3VyCisgKiBoYXJkd2FyZSBhZGRyZXNzIGluIG5laWdoLT5oYS4gIFRoZSBBTElHTigpIGV4cHJlc3Npb24gaGVyZSBtYWtlcworICogc3VyZSB0aGF0IHRoaXMgcG9pbnRlciBpcyBzdG9yZWQgYWxpZ25lZCBzbyB0aGF0IGFuIHVuYWxpZ25lZAorICogbG9hZCBpcyBub3QgbmVlZGVkIHRvIGRlcmVmZXJlbmNlIGl0LgorICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcG9pYl9uZWlnaCAqKnRvX2lwb2liX25laWdoKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKQogewotCXJldHVybiAoc3RydWN0IGlwb2liX25laWdoICoqKSAobmVpZ2gtPmhhICsgMjQgLQotCQkJCQkob2Zmc2V0b2Yoc3RydWN0IG5laWdoYm91ciwgaGEpICYgNCkpOworCXJldHVybiAodm9pZCopIG5laWdoICsgQUxJR04ob2Zmc2V0b2Yoc3RydWN0IG5laWdoYm91ciwgaGEpICsKKwkJCQkgICAgIElORklOSUJBTkRfQUxFTiwgc2l6ZW9mKHZvaWQgKikpOwogfQogCiBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmlwb2liX3dvcmtxdWV1ZTsKQEAgLTI1Myw3ICsyNTksNyBAQAogCiBpbnQgaXBvaWJfaWJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgaXBvaWJfaWJfZGV2X3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGlwb2liX2liX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGlwb2liX2liX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCk7CiBpbnQgaXBvaWJfaWJfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIGludCBpcG9pYl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWJfZGV2aWNlICpjYSwgaW50IHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCmluZGV4IDg2YmNkZDcuLmExZjVhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTQxNiw2ICs0MTYsNyBAQAogCXJldCA9IGlwb2liX2liX3Bvc3RfcmVjZWl2ZXMoZGV2KTsKIAlpZiAocmV0KSB7CiAJCWlwb2liX3dhcm4ocHJpdiwgImlwb2liX2liX3Bvc3RfcmVjZWl2ZXMgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCWlwb2liX2liX2Rldl9zdG9wKGRldik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQzNCw3ICs0MzUsNyBAQAogCXJldHVybiBpcG9pYl9tY2FzdF9zdGFydF90aHJlYWQoZGV2KTsKIH0KIAotaW50IGlwb2liX2liX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgaXBvaWJfaWJfZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZsdXNoKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTQ0OSwxMCArNDUwLDExIEBACiAJCXNldF9iaXQoSVBPSUJfUEtFWV9TVE9QLCAmcHJpdi0+ZmxhZ3MpOwogCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5wa2V5X3Rhc2spOwogCQltdXRleF91bmxvY2soJnBrZXlfbXV0ZXgpOwotCQlmbHVzaF93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKKwkJaWYgKGZsdXNoKQorCQkJZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiAJfQogCi0JaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoZGV2LCAxKTsKKwlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYsIGZsdXNoKTsKIAlpcG9pYl9tY2FzdF9kZXZfZmx1c2goZGV2KTsKIAogCWlwb2liX2ZsdXNoX3BhdGhzKGRldik7CkBAIC01OTAsNyArNTkyLDcgQEAKIAogCWlwb2liX2RiZyhwcml2LCAiZmx1c2hpbmdcbiIpOwogCi0JaXBvaWJfaWJfZGV2X2Rvd24oZGV2KTsKKwlpcG9pYl9pYl9kZXZfZG93bihkZXYsIDApOwogCiAJLyoKIAkgKiBUaGUgZGV2aWNlIGNvdWxkIGhhdmUgYmVlbiBicm91Z2h0IGRvd24gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIHdoZW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggYzNiNWY3OS4uMzdkYThkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTEzMyw3ICsxMzMsMTMgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCWlwb2liX2liX2Rldl9kb3duKGRldik7CisJLyoKKwkgKiBOb3cgZmx1c2ggd29ya3F1ZXVlIHRvIG1ha2Ugc3VyZSBhIHNjaGVkdWxlZCB0YXNrIGRvZXNuJ3QKKwkgKiBicmluZyBvdXIgaW50ZXJuYWwgc3RhdGUgYmFjayB1cC4KKwkgKi8KKwlmbHVzaF93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKKworCWlwb2liX2liX2Rldl9kb3duKGRldiwgMSk7CiAJaXBvaWJfaWJfZGV2X3N0b3AoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSVBPSUJfRkxBR19TVUJJTlRFUkZBQ0UsICZwcml2LT5mbGFncykpIHsKQEAgLTI0Nyw3ICsyNTMsNiBAQAogCQlpZiAobmVpZ2gtPmFoKQogCQkJaXBvaWJfcHV0X2FoKG5laWdoLT5haCk7CiAJCSp0b19pcG9pYl9uZWlnaChuZWlnaC0+bmVpZ2hib3VyKSA9IE5VTEw7Ci0JCW5laWdoLT5uZWlnaGJvdXItPm9wcy0+ZGVzdHJ1Y3RvciA9IE5VTEw7CiAJCWtmcmVlKG5laWdoKTsKIAl9CiAKQEAgLTUxMywxMiArNTE4LDcgQEAKIAkJCSAgIGJlMzJfdG9fY3B1cCgoX19iZTMyICopIHNrYi0+ZHN0LT5uZWlnaGJvdXItPmhhKSk7CiAJfSBlbHNlIHsKIAkJbmVpZ2gtPmFoICA9IE5VTEw7Ci0JCWlmIChza2JfcXVldWVfbGVuKCZuZWlnaC0+cXVldWUpIDwgSVBPSUJfTUFYX1BBVEhfUkVDX1FVRVVFKSB7Ci0JCQlfX3NrYl9xdWV1ZV90YWlsKCZuZWlnaC0+cXVldWUsIHNrYik7Ci0JCX0gZWxzZSB7Ci0JCQkrK3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQ7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQl9CisJCV9fc2tiX3F1ZXVlX3RhaWwoJm5laWdoLT5xdWV1ZSwgc2tiKTsKIAogCQlpZiAoIXBhdGgtPnF1ZXJ5ICYmIHBhdGhfcmVjX3N0YXJ0KGRldiwgcGF0aCkpCiAJCQlnb3RvIGVycjsKQEAgLTUzMCw3ICs1MzAsNiBAQAogZXJyOgogCSp0b19pcG9pYl9uZWlnaChza2ItPmRzdC0+bmVpZ2hib3VyKSA9IE5VTEw7CiAJbGlzdF9kZWwoJm5laWdoLT5saXN0KTsKLQluZWlnaC0+bmVpZ2hib3VyLT5vcHMtPmRlc3RydWN0b3IgPSBOVUxMOwogCWtmcmVlKG5laWdoKTsKIAogCSsrcHJpdi0+c3RhdHMudHhfZHJvcHBlZDsKQEAgLTc2OSwyMSArNzY4LDkgQEAKIAkJaXBvaWJfcHV0X2FoKGFoKTsKIH0KIAotc3RhdGljIGludCBpcG9pYl9uZWlnaF9zZXR1cChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCkKLXsKLQkvKgotCSAqIElzIHRoaXMga29zaGVyPyAgSSBjYW4ndCBmaW5kIGFueWJvZHkgaW4gdGhlIGtlcm5lbCB0aGF0Ci0JICogc2V0cyBuZWlnaC0+ZGVzdHJ1Y3Rvciwgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2V0IGl0IGhlcmUKLQkgKiB3aXRob3V0IHRyb3VibGUuCi0JICovCi0JbmVpZ2gtPm9wcy0+ZGVzdHJ1Y3RvciA9IGlwb2liX25laWdoX2Rlc3RydWN0b3I7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBpcG9pYl9uZWlnaF9zZXR1cF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoX3Bhcm1zICpwYXJtcykKIHsKLQlwYXJtcy0+bmVpZ2hfc2V0dXAgPSBpcG9pYl9uZWlnaF9zZXR1cDsKKwlwYXJtcy0+bmVpZ2hfZGVzdHJ1Y3RvciA9IGlwb2liX25laWdoX2Rlc3RydWN0b3I7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCmluZGV4IGEyNDA4ZDcuLjkzYzQ2MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwpAQCAtMTE1LDcgKzExNSw2IEBACiAJCWlmIChuZWlnaC0+YWgpCiAJCQlpcG9pYl9wdXRfYWgobmVpZ2gtPmFoKTsKIAkJKnRvX2lwb2liX25laWdoKG5laWdoLT5uZWlnaGJvdXIpID0gTlVMTDsKLQkJbmVpZ2gtPm5laWdoYm91ci0+b3BzLT5kZXN0cnVjdG9yID0gTlVMTDsKIAkJa2ZyZWUobmVpZ2gpOwogCX0KIApAQCAtMjEzLDYgKzIxMiw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1jYXN0LT5kZXY7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXBvaWJfYWggKmFoOwogCWludCByZXQ7CiAKIAltY2FzdC0+bWNtZW1iZXIgPSAqbWNtZW1iZXI7CkBAIC0yNjksOCArMjY5LDggQEAKIAkJCQlhdi5zdGF0aWNfcmF0ZSwgcHJpdi0+bG9jYWxfcmF0ZSwKIAkJCQlpYl9zYV9yYXRlX2VudW1fdG9faW50KG1jYXN0LT5tY21lbWJlci5yYXRlKSk7CiAKLQkJbWNhc3QtPmFoID0gaXBvaWJfY3JlYXRlX2FoKGRldiwgcHJpdi0+cGQsICZhdik7Ci0JCWlmICghbWNhc3QtPmFoKSB7CisJCWFoID0gaXBvaWJfY3JlYXRlX2FoKGRldiwgcHJpdi0+cGQsICZhdik7CisJCWlmICghYWgpIHsKIAkJCWlwb2liX3dhcm4ocHJpdiwgImliX2FkZHJlc3NfY3JlYXRlIGZhaWxlZFxuIik7CiAJCX0gZWxzZSB7CiAJCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIk1HSUQgIiBJUE9JQl9HSURfRk1UCkBAIC0yODAsNiArMjgwLDEwIEBACiAJCQkJCWJlMTZfdG9fY3B1KG1jYXN0LT5tY21lbWJlci5tbGlkKSwKIAkJCQkJbWNhc3QtPm1jbWVtYmVyLnNsKTsKIAkJfQorCisJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCQltY2FzdC0+YWggPSBhaDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAl9CiAKIAkvKiBhY3R1YWxseSBzZW5kIGFueSBxdWV1ZWQgcGFja2V0cyAqLwpAQCAtNDMyLDkgKzQzNiwxMSBAQAogCWlmIChtY2FzdC0+YmFja29mZiA+IElQT0lCX01BWF9CQUNLT0ZGX1NFQ09ORFMpCiAJCW1jYXN0LT5iYWNrb2ZmID0gSVBPSUJfTUFYX0JBQ0tPRkZfU0VDT05EUzsKIAorCW11dGV4X2xvY2soJm1jYXN0X211dGV4KTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCW1jYXN0LT5xdWVyeSA9IE5VTEw7CiAKLQltdXRleF9sb2NrKCZtY2FzdF9tdXRleCk7CiAJaWYgKHRlc3RfYml0KElQT0lCX01DQVNUX1JVTiwgJnByaXYtPmZsYWdzKSkgewogCQlpZiAoc3RhdHVzID09IC1FVElNRURPVVQpCiAJCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPm1jYXN0X3Rhc2spOwpAQCAtNDQzLDYgKzQ0OSw3IEBACiAJCQkJCSAgIG1jYXN0LT5iYWNrb2ZmICogSFopOwogCX0gZWxzZQogCQljb21wbGV0ZSgmbWNhc3QtPmRvbmUpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZtY2FzdF9tdXRleCk7CiAKIAlyZXR1cm47CkBAIC02MzAsMjEgKzYzNywyNyBAQAogCWlmIChmbHVzaCkKIAkJZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiAKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlpZiAocHJpdi0+YnJvYWRjYXN0ICYmIHByaXYtPmJyb2FkY2FzdC0+cXVlcnkpIHsKIAkJaWJfc2FfY2FuY2VsX3F1ZXJ5KHByaXYtPmJyb2FkY2FzdC0+cXVlcnlfaWQsIHByaXYtPmJyb2FkY2FzdC0+cXVlcnkpOwogCQlwcml2LT5icm9hZGNhc3QtPnF1ZXJ5ID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAkJaXBvaWJfZGJnX21jYXN0KHByaXYsICJ3YWl0aW5nIGZvciBiY2FzdFxuIik7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnByaXYtPmJyb2FkY2FzdC0+ZG9uZSk7Ci0JfQorCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtY2FzdCwgJnByaXYtPm11bHRpY2FzdF9saXN0LCBsaXN0KSB7CisJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCQlpZiAobWNhc3QtPnF1ZXJ5KSB7CiAJCQlpYl9zYV9jYW5jZWxfcXVlcnkobWNhc3QtPnF1ZXJ5X2lkLCBtY2FzdC0+cXVlcnkpOwogCQkJbWNhc3QtPnF1ZXJ5ID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIndhaXRpbmcgZm9yIE1HSUQgIiBJUE9JQl9HSURfRk1UICJcbiIsCiAJCQkJCUlQT0lCX0dJRF9BUkcobWNhc3QtPm1jbWVtYmVyLm1naWQpKTsKIAkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKLQkJfQorCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKaW5kZXggZmFhZjEwZS4uMThkMmY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYwpAQCAtMjU1LDYgKzI1NSw2IEBACiAJICAgIHJlY29yZC0+ZXZlbnQgPT0gSUJfRVZFTlRfTElEX0NIQU5HRSAgfHwKIAkgICAgcmVjb3JkLT5ldmVudCA9PSBJQl9FVkVOVF9TTV9DSEFOR0UpIHsKIAkJaXBvaWJfZGJnKHByaXYsICJQb3J0IGFjdGl2ZSBldmVudFxuIik7Ci0JCXNjaGVkdWxlX3dvcmsoJnByaXYtPmZsdXNoX3Rhc2spOworCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPmZsdXNoX3Rhc2spOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggMmQyZDRhYy4uYTEzZGNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKQEAgLTExNTUsNiArMTE1NSwxMiBAQAogCiAJc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIAorCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfREVBRCB8fAorCSAgICB0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfUkVNT1ZFRCkgeworCQlzY21uZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChzY21uZC0+aG9zdF9zY3JpYmJsZSA9PSAodm9pZCAqKSAtMUwpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjMxLDYgKzEyMzcsODcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X2lkX2V4dChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCisJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9ERUFEIHx8CisJICAgIHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9SRU1PVkVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAxNmxseFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+aWRfZXh0KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW9jX2d1aWQoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKworCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfREVBRCB8fAorCSAgICB0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfUkVNT1ZFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwMTZsbHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBiZTY0X3RvX2NwdSh0YXJnZXQtPmlvY19ndWlkKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2VydmljZV9pZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCisJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9ERUFEIHx8CisJICAgIHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9SRU1PVkVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAxNmxseFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJlNjRfdG9fY3B1KHRhcmdldC0+c2VydmljZV9pZCkpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3BrZXkoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IGhvc3RfdG9fdGFyZ2V0KGNsYXNzX3RvX3Nob3N0KGNkZXYpKTsKKworCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfREVBRCB8fAorCSAgICB0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfUkVNT1ZFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwNHhcbiIsIGJlMTZfdG9fY3B1KHRhcmdldC0+cGF0aC5wa2V5KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZGdpZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCisJaWYgKHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9ERUFEIHx8CisJICAgIHRhcmdldC0+c3RhdGUgPT0gU1JQX1RBUkdFVF9SRU1PVkVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKKwkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIHRhcmdldC0+cGF0aC5kZ2lkLnJhdylbMF0pLAorCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgdGFyZ2V0LT5wYXRoLmRnaWQucmF3KVsxXSksCisJCSAgICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSB0YXJnZXQtPnBhdGguZGdpZC5yYXcpWzJdKSwKKwkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIHRhcmdldC0+cGF0aC5kZ2lkLnJhdylbM10pLAorCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgdGFyZ2V0LT5wYXRoLmRnaWQucmF3KVs0XSksCisJCSAgICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSB0YXJnZXQtPnBhdGguZGdpZC5yYXcpWzVdKSwKKwkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIHRhcmdldC0+cGF0aC5kZ2lkLnJhdylbNl0pLAorCQkgICAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgdGFyZ2V0LT5wYXRoLmRnaWQucmF3KVs3XSkpOworfQorCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaWRfZXh0LAlTX0lSVUdPLCBzaG93X2lkX2V4dCwJCU5VTEwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGlvY19ndWlkLAlTX0lSVUdPLCBzaG93X2lvY19ndWlkLAkJTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2VydmljZV9pZCwJU19JUlVHTywgc2hvd19zZXJ2aWNlX2lkLAlOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihwa2V5LAkJU19JUlVHTywgc2hvd19wa2V5LAkJTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZGdpZCwJCVNfSVJVR08sIHNob3dfZGdpZCwJCU5VTEwpOworCitzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKnNycF9ob3N0X2F0dHJzW10gPSB7CisJJmNsYXNzX2RldmljZV9hdHRyX2lkX2V4dCwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfaW9jX2d1aWQsCisJJmNsYXNzX2RldmljZV9hdHRyX3NlcnZpY2VfaWQsCisJJmNsYXNzX2RldmljZV9hdHRyX3BrZXksCisJJmNsYXNzX2RldmljZV9hdHRyX2RnaWQsCisJTlVMTAorfTsKKwogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgc3JwX3RlbXBsYXRlID0gewogCS5tb2R1bGUJCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCQk9IERSVl9OQU1FLApAQCAtMTI0Myw3ICsxMzMwLDggQEAKIAkudGhpc19pZAkJCT0gLTEsCiAJLnNnX3RhYmxlc2l6ZQkJCT0gU1JQX01BWF9JTkRJUkVDVCwKIAkuY21kX3Blcl9sdW4JCQk9IFNSUF9TUV9TSVpFLAotCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcKKwkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5zaG9zdF9hdHRycwkJCT0gc3JwX2hvc3RfYXR0cnMKIH07CiAKIHN0YXRpYyBpbnQgc3JwX2FkZF90YXJnZXQoc3RydWN0IHNycF9ob3N0ICpob3N0LCBzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCkBAIC0xMzYwLDYgKzE0NDgsNyBAQAogCQkJCXN0cmxjcHkoZGdpZCwgcCArIGkgKiAyLCAzKTsKIAkJCQl0YXJnZXQtPnBhdGguZGdpZC5yYXdbaV0gPSBzaW1wbGVfc3RydG91bChkZ2lkLCBOVUxMLCAxNik7CiAJCQl9CisJCQlrZnJlZShwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU1JQX09QVF9QS0VZOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKaW5kZXggMTliMWIwMS4uYWQ2MjE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCkBAIC01OCw3ICs1OCw3IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQocmVzZXRhZnRlciwgcHNtb3VzZV9yZXNldGFmdGVyLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXRhZnRlciwgIlJlc2V0IGRldmljZSBhZnRlciBzbyBtYW55IGJhZCBwYWNrZXRzICgwID0gbmV2ZXIpLiIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHBzbW91c2VfcmVzeW5jX3RpbWUgPSA1Oworc3RhdGljIHVuc2lnbmVkIGludCBwc21vdXNlX3Jlc3luY190aW1lOwogbW9kdWxlX3BhcmFtX25hbWVkKHJlc3luY190aW1lLCBwc21vdXNlX3Jlc3luY190aW1lLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzeW5jX3RpbWUsICJIb3cgbG9uZyBjYW4gbW91c2Ugc3RheSBpZGxlIGJlZm9yZSBmb3JjaW5nIHJlc3luYyAoaW4gc2Vjb25kcywgMCA9IG5ldmVyKS4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9oaWxfbWxjLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYwppbmRleCA1NzA0MjA0Li5lYTQ5OTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2hpbF9tbGMuYwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJZG9fZ2V0dGltZW9mZGF5KCYobWxjLT5pbnN0YXJ0KSk7CiAJbWxjLT5pY291bnQgPSAxNTsKIAltZW1zZXQobWxjLT5pcGFja2V0LCAwLCAxNiAqIHNpemVvZihoaWxfcGFja2V0KSk7Ci0JaWYgKGRvd25fdHJ5bG9jaygmKG1sYy0+aXNlbSkpKSBCVUcoKTsKKwlCVUdfT04oZG93bl90cnlsb2NrKCYobWxjLT5pc2VtKSkpOwogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCA4YzEyYTk3Li5hODFmOTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2lmZGVmCUNPTkZJR19BUk0KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKaW5kZXggZmVlYzQwYy4uOGM0ZmNiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaWZkZWYgQ09ORklHX0FWTUIxX0NPTVBBVAogI2luY2x1ZGUgPGxpbnV4L2IxbGxpLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBzdGF0aWMgY2hhciAqcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEuMi44ICQiOwogCkBAIC02Niw3ICs2Nyw3IEBACiBERUZJTkVfUldMT0NLKGNhcGlfZHJpdmVyc19saXN0X2xvY2spOwogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhhcHBsaWNhdGlvbl9sb2NrKTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKGNvbnRyb2xsZXJfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY29udHJvbGxlcl9tdXRleCk7CiAKIHN0cnVjdCBjYXBpMjBfYXBwbCAqY2FwaV9hcHBsaWNhdGlvbnNbQ0FQSV9NQVhBUFBMXTsKIHN0cnVjdCBjYXBpX2N0ciAqY2FwaV9jYXJkc1tDQVBJX01BWENPTlRSXTsKQEAgLTM5NSwyMCArMzk2LDIwIEBACiB7CiAJaW50IGk7CiAKLQlkb3duKCZjb250cm9sbGVyX3NlbSk7CisJbXV0ZXhfbG9jaygmY29udHJvbGxlcl9tdXRleCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ0FQSV9NQVhDT05UUjsgaSsrKSB7CiAJCWlmIChjYXBpX2NhcmRzW2ldID09IE5VTEwpCiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gQ0FQSV9NQVhDT05UUikgewotCQl1cCgmY29udHJvbGxlcl9zZW0pOworCQltdXRleF91bmxvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOwogCQlwcmludGsoS0VSTl9FUlIgImtjYXBpOiBvdXQgb2YgY29udHJvbGxlciBzbG90c1xuIik7CiAJICAgCXJldHVybiAtRUJVU1k7CiAJfQogCWNhcGlfY2FyZHNbaV0gPSBjYXJkOwogCi0JdXAoJmNvbnRyb2xsZXJfc2VtKTsKKwltdXRleF91bmxvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOwogCiAJY2FyZC0+bnJlY3ZjdGxwa3QgPSAwOwogCWNhcmQtPm5yZWN2ZGF0YXBrdCA9IDA7CkBAIC01MzEsMTMgKzUzMiwxMyBAQAogCiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFwcGxpY2F0aW9uX2xvY2ssIGZsYWdzKTsKIAkKLQlkb3duKCZjb250cm9sbGVyX3NlbSk7CisJbXV0ZXhfbG9jaygmY29udHJvbGxlcl9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IENBUElfTUFYQ09OVFI7IGkrKykgewogCQlpZiAoIWNhcGlfY2FyZHNbaV0gfHwgY2FwaV9jYXJkc1tpXS0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykKIAkJCWNvbnRpbnVlOwogCQlyZWdpc3Rlcl9hcHBsKGNhcGlfY2FyZHNbaV0sIGFwcGxpZCwgJmFwLT5ycGFyYW0pOwogCX0KLQl1cCgmY29udHJvbGxlcl9zZW0pOworCW11dGV4X3VubG9jaygmY29udHJvbGxlcl9tdXRleCk7CiAKIAlpZiAoc2hvd2NhcGltc2dzICYgMSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IGFwcGwgJWQgdXBcbiIsIGFwcGxpZCk7CkBAIC01NjAsMTMgKzU2MSwxMyBAQAogCWNhcGlfYXBwbGljYXRpb25zW2FwLT5hcHBsaWQgLSAxXSA9IE5VTEw7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFwcGxpY2F0aW9uX2xvY2ssIGZsYWdzKTsKIAotCWRvd24oJmNvbnRyb2xsZXJfc2VtKTsKKwltdXRleF9sb2NrKCZjb250cm9sbGVyX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgQ0FQSV9NQVhDT05UUjsgaSsrKSB7CiAJCWlmICghY2FwaV9jYXJkc1tpXSB8fCBjYXBpX2NhcmRzW2ldLT5jYXJkc3RhdGUgIT0gQ0FSRF9SVU5OSU5HKQogCQkJY29udGludWU7CiAJCXJlbGVhc2VfYXBwbChjYXBpX2NhcmRzW2ldLCBhcC0+YXBwbGlkKTsKIAl9Ci0JdXAoJmNvbnRyb2xsZXJfc2VtKTsKKwltdXRleF91bmxvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOwogCiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlza2JfcXVldWVfcHVyZ2UoJmFwLT5yZWN2X3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFkbWEuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFkbWEuYwppbmRleCA5MWRkMDU1Li40ZDY0ZTVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMWRtYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFkbWEuYwpAQCAtMzksNyArMzksNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IHN1cHByZXNzX3BvbGxhY2sgPSAwOwotTU9EVUxFX1BBUk0oc3VwcHJlc3NfcG9sbGFjaywgIjAtMWkiKTsKK21vZHVsZV9wYXJhbShzdXBwcmVzc19wb2xsYWNrLCBib29sLCAwKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxaXNhLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxaXNhLmMKaW5kZXggMzhiZDRkZi4uODBmYjQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMWlzYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFpc2EuYwpAQCAtMTY5LDggKzE2OSw4IEBACiBzdGF0aWMgaW50IGlvW01BWF9DQVJEU107CiBzdGF0aWMgaW50IGlycVtNQVhfQ0FSRFNdOwogCi1NT0RVTEVfUEFSTShpbywgIjEtIiBfX01PRFVMRV9TVFJJTkcoTUFYX0NBUkRTKSAiaSIpOwotTU9EVUxFX1BBUk0oaXJxLCAiMS0iIF9fTU9EVUxFX1NUUklORyhNQVhfQ0FSRFMpICJpIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaW8sIGludCwgTlVMTCwgMCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBiYXNlIGFkZHJlc3MoZXMpIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSBudW1iZXIocykgKGFzc2lnbmVkKSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2M0LmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2M0LmMKaW5kZXggNzI0YWFjMi4uZjcyNTNiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9jNC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYzQuYwpAQCAtNTAsNyArNTAsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDQVBJNExpbnV4OiBEcml2ZXIgZm9yIEFWTSBDMi9DNCBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiQ2Fyc3RlbiBQYWV0aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1BBUk0oc3VwcHJlc3NfcG9sbGFjaywgIjAtMWkiKTsKK21vZHVsZV9wYXJhbShzdXBwcmVzc19wb2xsYWNrLCBib29sLCAwKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMKaW5kZXggM2I3MDFkOS4uNWEyZjg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MWlzYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFpc2EuYwpAQCAtNTE5LDkgKzUxOSw5IEBACiBzdGF0aWMgaW50IGlycVtNQVhfQ0FSRFNdOwogc3RhdGljIGludCBjYXJkbnJbTUFYX0NBUkRTXTsKIAotTU9EVUxFX1BBUk0oaW8sICIxLSIgX19NT0RVTEVfU1RSSU5HKE1BWF9DQVJEUykgImkiKTsKLU1PRFVMRV9QQVJNKGlycSwgIjEtIiBfX01PRFVMRV9TVFJJTkcoTUFYX0NBUkRTKSAiaSIpOwotTU9EVUxFX1BBUk0oY2FyZG5yLCAiMS0iIF9fTU9EVUxFX1NUUklORyhNQVhfQ0FSRFMpICJpIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaW8sIGludCwgTlVMTCwgMCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDApOworbW9kdWxlX3BhcmFtX2FycmF5KGNhcmRuciwgaW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYmFzZSBhZGRyZXNzKGVzKSIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgbnVtYmVyKHMpIChhc3NpZ25lZCkiKTsKIE1PRFVMRV9QQVJNX0RFU0MoY2FyZG5yLCAiQ2FyZCBudW1iZXIocykgKGFzIGp1bXBlcmVkKSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCmluZGV4IDgxNTliY2UuLjI3MzMyNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNkZWZpbmUgSElTQVhfU1RBVFVTX0JVRlNJWkUgNDA5NgotI2RlZmluZSBJTkNMVURFX0lOTElORV9GVU5DUwogCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgYXJyYXkgY29udGFpbnMgb25lIGVudHJ5IHBlciBjYXJkLiBBbiBlbnRyeSBsb29rcwpAQCAtMTkyOSw2ICsxOTI4LDggQEAKIAl7UENJX1ZFTkRPUl9JRF9DQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwQiwgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKIAl7UENJX1ZFTkRPUl9JRF9DQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjAwQywgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKIAl7UENJX1ZFTkRPUl9JRF9DQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjEwMCwgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKKwl7UENJX1ZFTkRPUl9JRF9DQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjcwMCwgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKKwl7UENJX1ZFTkRPUl9JRF9DQ0QsICAgICAgUENJX0RFVklDRV9JRF9DQ0RfQjcwMSwgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKIAl7UENJX1ZFTkRPUl9JRF9BQk9DT00sICAgUENJX0RFVklDRV9JRF9BQk9DT01fMkJEMSwgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKIAl7UENJX1ZFTkRPUl9JRF9BU1VTVEVLLCAgUENJX0RFVklDRV9JRF9BU1VTVEVLXzA2NzUsICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKIAl7UENJX1ZFTkRPUl9JRF9CRVJLT00sICAgUENJX0RFVklDRV9JRF9CRVJLT01fVF9DT05DRVBULCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCmluZGV4IDExMGU5ZmQuLmY4Y2E0YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYwpAQCAtMTA4LDcgKzEwOCw2IEBACiAjZGVmaW5lIEVMU0FfQVNTSUdOICAgICAgNAogCiAjZGVmaW5lIFJTX0lTUl9QQVNTX0xJTUlUIDI1NgotI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKICNkZWZpbmUgRkxHX01PREVNX0FDVElWRSAxCiAvKiBJUEFDIEFVWCAqLwogI2RlZmluZSBFTFNBX0lQQUNfTElORV9MRUQJMHg0MAkvKiBCaXQgNiBHZWxiZSBMRUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDQ4NjZmYzMuLjkxZDI1YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtNTEsNiArNTEsOCBAQAogCXtQQ0lfVkVORE9SX0lEX0NDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjAwQiwgIkJpbGxpb24iLCAiQjAwQiJ9LAogCXtQQ0lfVkVORE9SX0lEX0NDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjAwQywgIkJpbGxpb24iLCAiQjAwQyJ9LAogCXtQQ0lfVkVORE9SX0lEX0NDRCwgUENJX0RFVklDRV9JRF9DQ0RfQjEwMCwgIlNleWVvbiIsICJCMTAwIn0sCisJe1BDSV9WRU5ET1JfSURfQ0NELCBQQ0lfREVWSUNFX0lEX0NDRF9CNzAwLCAiUHJpbXV4IElJIFMwIiwgIkI3MDAifSwKKwl7UENJX1ZFTkRPUl9JRF9DQ0QsIFBDSV9ERVZJQ0VfSURfQ0NEX0I3MDEsICJQcmltdXggSUkgUzAgTlQiLCAiQjcwMSJ9LAogCXtQQ0lfVkVORE9SX0lEX0FCT0NPTSwgUENJX0RFVklDRV9JRF9BQk9DT01fMkJEMSwgIkFib2NvbS9NYWdpdGVrIiwgIjJCRDEifSwKIAl7UENJX1ZFTkRPUl9JRF9BU1VTVEVLLCBQQ0lfREVWSUNFX0lEX0FTVVNURUtfMDY3NSwgIkFzdXNjb20vQXNrZXkiLCAiNjc1In0sCiAJe1BDSV9WRU5ET1JfSURfQkVSS09NLCBQQ0lfREVWSUNFX0lEX0JFUktPTV9UX0NPTkNFUFQsICJHZXJtYW4gdGVsZWtvbSIsICJULUNvbmNlcHQifSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCmluZGV4IGNhNWI0YTMuLjI2MmM0NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBoZmNfdXNiLmMKICAqCi0gKiAkSWQ6IGhmY191c2IuYyx2IDQuMzYgMjAwNS8wNC8wOCAwOTo1NToxMyBtYXJ0aW5iMSBFeHAgJAorICogJElkOiBoZmNfdXNiLmMsdiAyLjMuMi4xMyAyMDA2LzAyLzE3IDE3OjE3OjIyIG1iYWNoZW0gRXhwICQKICAqCiAgKiBtb2R1bGFyIEhpU2F4IElTRE4gZHJpdmVyIGZvciBDb2xvZ25lY2hpcCBIRkMtUyBVU0IgY2hpcAogICoKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNsdWRlICJoZmNfdXNiLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICpoZmN1c2JfcmV2aXNpb24gPQotICAgICIkUmV2aXNpb246IDQuMzYgJCAkRGF0ZTogMjAwNS8wNC8wOCAwOTo1NToxMyAkICI7CisgICAgIiRSZXZpc2lvbjogMi4zLjIuMTMgJCAkRGF0ZTogMjAwNi8wMi8xNyAxNzoxNzoyMiAkICI7CiAKIC8qIEhpc2F4IGRlYnVnIHN1cHBvcnQKICogdXNlICJtb2Rwcm9iZSBkZWJ1Zz14IiB3aGVyZSB4IGlzIGJpdGZpZWxkIG9mIFVTQl9EQkcgJiBJU0ROX0RCRwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJZm9yIChpID0gMDsgbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJaWYgKGxpc3RbaV0ubnVtID09IG51bSkKIAkJCXJldHVybiAobGlzdFtpXS5uYW1lKTsKLQlyZXR1cm4gIjx1bmtvd24gRVJST1I+IjsKKwlyZXR1cm4gIjx1bmtub3duIEVSUk9SPiI7CiB9CiAKIApAQCAtMjM1LDkgKzIzNSw5IEBACiAJCWhmYy0+Y3RybF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CiAJCWhmYy0+Y3RybF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAwOwogCQloZmMtPmN0cmxfd3JpdGUud0luZGV4ID0KLQkJICAgIGhmYy0+Y3RybF9idWZmW2hmYy0+Y3RybF9vdXRfaWR4XS5oZmNfcmVnOworCQkgICAgY3B1X3RvX2xlMTYoaGZjLT5jdHJsX2J1ZmZbaGZjLT5jdHJsX291dF9pZHhdLmhmY19yZWcpOwogCQloZmMtPmN0cmxfd3JpdGUud1ZhbHVlID0KLQkJICAgIGhmYy0+Y3RybF9idWZmW2hmYy0+Y3RybF9vdXRfaWR4XS5yZWdfdmFsOworCQkgICAgY3B1X3RvX2xlMTYoaGZjLT5jdHJsX2J1ZmZbaGZjLT5jdHJsX291dF9pZHhdLnJlZ192YWwpOwogCiAJCXVzYl9zdWJtaXRfdXJiKGhmYy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpOwkvKiBzdGFydCB0cmFuc2ZlciAqLwogCX0KQEAgLTEyODIsNyArMTI4Miw3IEBACiAJLyogaW5pdCB0aGUgYmFja2dyb3VuZCBtYWNoaW5lcnkgZm9yIGNvbnRyb2wgcmVxdWVzdHMgKi8KIAloZmMtPmN0cmxfcmVhZC5iUmVxdWVzdFR5cGUgPSAweGMwOwogCWhmYy0+Y3RybF9yZWFkLmJSZXF1ZXN0ID0gMTsKLQloZmMtPmN0cmxfcmVhZC53TGVuZ3RoID0gMTsKKwloZmMtPmN0cmxfcmVhZC53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMSk7CiAJaGZjLT5jdHJsX3dyaXRlLmJSZXF1ZXN0VHlwZSA9IDB4NDA7CiAJaGZjLT5jdHJsX3dyaXRlLmJSZXF1ZXN0ID0gMDsKIAloZmMtPmN0cmxfd3JpdGUud0xlbmd0aCA9IDA7CkBAIC0xMzczLDkgKzEzNzMsOCBAQAogCiAJdmVuZF9pZHggPSAweGZmZmY7CiAJZm9yIChpID0gMDsgaGZjdXNiX2lkdGFiW2ldLmlkVmVuZG9yOyBpKyspIHsKLQkJaWYgKGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBoZmN1c2JfaWR0YWJbaV0uaWRWZW5kb3IKLQkJICAgICYmIGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0KLQkJICAgIGhmY3VzYl9pZHRhYltpXS5pZFByb2R1Y3QpIHsKKwkJaWYgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IGhmY3VzYl9pZHRhYltpXS5pZFZlbmRvcikKKwkJICAgICYmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBoZmN1c2JfaWR0YWJbaV0uaWRQcm9kdWN0KSkgewogCQkJdmVuZF9pZHggPSBpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTE1MTYsOCArMTUxNSw3IEBACiAJCQkJCQkJICAgIHVzYl90cmFuc2Zlcl9tb2RlCiAJCQkJCQkJICAgID0gVVNCX0lOVDsKIAkJCQkJCQlwYWNrZXRfc2l6ZSA9Ci0JCQkJCQkJICAgIGVwLT5kZXNjLgotCQkJCQkJCSAgICB3TWF4UGFja2V0U2l6ZTsKKwkJCQkJCQkgICAgbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgogCQkJCQkJCWlmIChlcF9hZGRyICYgMHg4MCkKQEAgLTE1NDUsOCArMTU0Myw3IEBACiAJCQkJCQkJICAgIHVzYl90cmFuc2Zlcl9tb2RlCiAJCQkJCQkJICAgID0gVVNCX0JVTEs7CiAJCQkJCQkJcGFja2V0X3NpemUgPQotCQkJCQkJCSAgICBlcC0+ZGVzYy4KLQkJCQkJCQkgICAgd01heFBhY2tldFNpemU7CisJCQkJCQkJICAgIGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKIAkJCQkJCQlpZiAoZXBfYWRkciAmIDB4ODApCkBAIC0xNTc0LDggKzE1NzEsNyBAQAogCQkJCQkJCSAgICB1c2JfdHJhbnNmZXJfbW9kZQogCQkJCQkJCSAgICA9IFVTQl9JU09DOwogCQkJCQkJCWlzb19wYWNrZXRfc2l6ZSA9Ci0JCQkJCQkJICAgIGVwLT5kZXNjLgotCQkJCQkJCSAgICB3TWF4UGFja2V0U2l6ZTsKKwkJCQkJCQkgICAgbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJZGVmYXVsdDoKIAkJCQkJCQljb250ZXh0LT4KQEAgLTE1ODgsMTAgKzE1ODQsOCBAQAogCQkJCQkJICAgIGZpZm9udW0gPSBjaWR4OwogCQkJCQkJY29udGV4dC0+Zmlmb3NbY2lkeF0uaGZjID0KIAkJCQkJCSAgICBjb250ZXh0OwotCQkJCQkJY29udGV4dC0+Zmlmb3NbY2lkeF0uCi0JCQkJCQkgICAgdXNiX3BhY2tldF9tYXhsZW4gPQotCQkJCQkJICAgIGVwLT5kZXNjLgotCQkJCQkJICAgIHdNYXhQYWNrZXRTaXplOworCQkJCQkJY29udGV4dC0+Zmlmb3NbY2lkeF0udXNiX3BhY2tldF9tYXhsZW4gPQorCQkJCQkJICAgIGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKIAkJCQkJCWNvbnRleHQtPmZpZm9zW2NpZHhdLgogCQkJCQkJICAgIGludGVydmFsbCA9CiAJCQkJCQkgICAgZXAtPmRlc2MuYkludGVydmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2JvYXJkZXJnby5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2JvYXJkZXJnby5jCmluZGV4IGUxOWEwMWEuLjQ4ZDEzNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9ib2FyZGVyZ28uYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vYm9hcmRlcmdvLmMKQEAgLTM4LDggKzM4LDggQEAKIHsKIAloeXNkbl9jYXJkICpjYXJkID0gZGV2X2lkOwkvKiBwYXJhbWV0ZXIgZnJvbSBpcnEgKi8KIAl0RXJnRHByYW0gKmRwcjsKLQl1bG9uZyBmbGFnczsKLQl1Y2hhciB2b2xhdGlsZSBiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciB2b2xhdGlsZSBiOwogCiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gSVJRX05PTkU7CQkvKiBlcnJvciAtPiBzcHVyaW91cyBpbnRlcnJ1cHQgKi8KQEAgLTc3LDcgKzc3LDcgQEAKIHsKIAl0RXJnRHByYW0gKmRwcjsKIAlpbnQgYWdhaW47Ci0JdWxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JVTikKIAkJcmV0dXJuOwkJLyogaW52YWxpZCBjYWxsICovCkBAIC0xMzEsOCArMTMxLDggQEAKIHN0YXRpYyB2b2lkCiBlcmdvX3N0b3BjYXJkKGh5c2RuX2NhcmQgKiBjYXJkKQogewotCXVsb25nIGZsYWdzOwotCXVjaGFyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsOwogCiAJaHlzZG5fbmV0X3JlbGVhc2UoY2FyZCk7CS8qIGZpcnN0IHJlbGVhc2UgdGhlIG5ldCBkZXZpY2UgaWYgZXhpc3RpbmcgKi8KICNpZmRlZiBDT05GSUdfSFlTRE5fQ0FQSQpAQCAtMTU3LDcgKzE1Nyw3IEBACiBzdGF0aWMgdm9pZAogZXJnb19zZXRfZXJybG9nX3N0YXRlKGh5c2RuX2NhcmQgKiBjYXJkLCBpbnQgb24pCiB7Ci0JdWxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JVTikgewogCQljYXJkLT5lcnJfbG9nX3N0YXRlID0gRVJSTE9HX1NUQVRFX09GRjsJCS8qIG11c3QgYmUgb2ZmICovCkBAIC0yMTcsOSArMjE3LDEwIEBACiAvKiBOZWdhdGl2ZSByZXR1cm4gdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBlcnJvcnMuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50Ci1lcmdvX3dyaXRlYm9vdGltZyhzdHJ1Y3QgSFlTRE5fQ0FSRCAqY2FyZCwgdWNoYXIgKiBidWYsIHVsb25nIG9mZnMpCitlcmdvX3dyaXRlYm9vdGltZyhzdHJ1Y3QgSFlTRE5fQ0FSRCAqY2FyZCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJdW5zaWduZWQgbG9uZyBvZmZzKQogewotCXVjaGFyICpkc3Q7CisJdW5zaWduZWQgY2hhciAqZHN0OwogCXRFcmdEcHJhbSAqZHByYW07CiAJaW50IGNudCA9IChCT09UX0lNR19TSVpFID4+IDIpOwkJLyogbnVtYmVyIG9mIHdvcmRzIHRvIG1vdmUgYW5kIHN3YXAgKGJ5dGUgb3JkZXIhKSAqLwogCQpAQCAtMjY0LDE0ICsyNjUsMTQgQEAKIC8qIGNhc2Ugb2YgZXJyb3JzIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUgaXMgcmV0dXJuZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQKLWVyZ29fd3JpdGVib290c2VxKHN0cnVjdCBIWVNETl9DQVJEICpjYXJkLCB1Y2hhciAqIGJ1ZiwgaW50IGxlbikKK2VyZ29fd3JpdGVib290c2VxKHN0cnVjdCBIWVNETl9DQVJEICpjYXJkLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJdERwcmFtQm9vdFNwb29sZXIgKnNwID0gKHREcHJhbUJvb3RTcG9vbGVyICopIGNhcmQtPmRwcmFtOwotCXVjaGFyICpkc3Q7Ci0JdWNoYXIgYnVmbGVuOworCXVuc2lnbmVkIGNoYXIgKmRzdDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmxlbjsKIAlpbnQgbnJfd3JpdGU7Ci0JdWNoYXIgdG1wX3JkcHRyOwotCXVjaGFyIHdyX21pcnJvcjsKKwl1bnNpZ25lZCBjaGFyIHRtcF9yZHB0cjsKKwl1bnNpZ25lZCBjaGFyIHdyX21pcnJvcjsKIAlpbnQgaTsKIAogCWlmIChjYXJkLT5kZWJ1Z19mbGFncyAmIExPR19QT0ZfQ0FSRCkKQEAgLTMzMCw3ICszMzEsNyBAQAogewogCXRFcmdEcHJhbSAqZHByID0gY2FyZC0+ZHByYW07CS8qIHBvaW50ZXIgdG8gRFBSQU0gc3RydWN0dXJlICovCiAJaW50IHRpbWVjbnQgPSAxMDAwMCAvIDUwOwkvKiB0aW1lb3V0IGlzIDEwIHNlY3MgbWF4LiAqLwotCXVsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG1zZ19zaXplOwogCWludCBpOwogCkBAIC0zNDUsNyArMzQ2LDcgQEAKIAkJCWlmICgoZHByLT5Ub1BjQ2hhbm5lbCAhPSBDSEFOX1NZU1RFTSkgfHwKIAkJCSAgICAoZHByLT5Ub1BjU2l6ZSA8IE1JTl9SRFlfTVNHX1NJWkUpIHx8CiAJCQkgICAgKGRwci0+VG9QY1NpemUgPiBNQVhfUkRZX01TR19TSVpFKSB8fAotCQkJICAgICgoKih1bG9uZyAqKSBkcHItPlRvUGNCdWYpICE9IFJEWV9NQUdJQykpCisJCQkgICAgKCgqKHVuc2lnbmVkIGxvbmcgKikgZHByLT5Ub1BjQnVmKSAhPSBSRFlfTUFHSUMpKQogCQkJCWJyZWFrOwkvKiBhbiBlcnJvciBvY2N1cnJlZCAqLwogCiAJCQkvKiBDaGVjayBmb3IgYWRkaXRpb25hbCBkYXRhIGRlbGl2ZXJlZCBkdXJpbmcgU3lzUmVhZHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9ib2FyZGVyZ28uaCBiL2RyaXZlcnMvaXNkbi9oeXNkbi9ib2FyZGVyZ28uaAppbmRleCBiNTZmZjA4Li5jNTk0MjJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2JvYXJkZXJnby5oCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9ib2FyZGVyZ28uaApAQCAtMjMsMzYgKzIzLDM2IEBACiAKIC8qIGZvbGxvd2luZyBEUFJBTSBsYXlvdXQgY29waWVkIGZyb20gT1MyLWRyaXZlciBib2FyZGVyZy5oICovCiB0eXBlZGVmIHN0cnVjdCBFcmdEcHJhbV90YWcgewotLyowMDAwICovIHVjaGFyIFRvSHlCdWZbRVJHX1RPX0hZX0JVRl9TSVpFXTsKLS8qMEUwMCAqLyB1Y2hhciBUb1BjQnVmW0VSR19UT19QQ19CVUZfU0laRV07CisvKjAwMDAgKi8gdW5zaWduZWQgY2hhciBUb0h5QnVmW0VSR19UT19IWV9CVUZfU0laRV07CisvKjBFMDAgKi8gdW5zaWduZWQgY2hhciBUb1BjQnVmW0VSR19UT19QQ19CVUZfU0laRV07CiAKLQkvKjFDMDAgKi8gdWNoYXIgYlNvZnRVYXJ0W1NJWkVfUlNWX1NPRlRfVUFSVF07CisJLyoxQzAwICovIHVuc2lnbmVkIGNoYXIgYlNvZnRVYXJ0W1NJWkVfUlNWX1NPRlRfVUFSVF07CiAJLyogc2l6ZSAweDFCMCAqLwogCi0JLyoxREIwICovLyogdEVyckxvZ0VudHJ5ICovIHVjaGFyIHZvbGF0aWxlIEVyckxvZ01zZ1s2NF07CisJLyoxREIwICovLyogdEVyckxvZ0VudHJ5ICovIHVuc2lnbmVkIGNoYXIgdm9sYXRpbGUgRXJyTG9nTXNnWzY0XTsKIAkvKiBzaXplIDY0IGJ5dGVzICovCi0JLyoxREIwICB1bG9uZyB1bEVyclR5cGU7ICAgICAgICAgICAgICAgKi8KLQkvKjFEQjQgIHVsb25nIHVsRXJyU3VidHlwZTsgICAgICAgICAgICAqLwotCS8qMURCOCAgdWxvbmcgdWNUZXh0U2l6ZTsgICAgICAgICAgICAgICovCi0JLyoxREI5ICB1bG9uZyB1Y1RleHRbRVJSTE9HX1RFWFRfU0laRV07ICovLyogQVNDSUlaIG9mIGxlbiB1Y1RleHRTaXplLTEgKi8KKwkvKjFEQjAgIHVuc2lnbmVkIGxvbmcgdWxFcnJUeXBlOyAgICAgICAgICAgICAgICovCisJLyoxREI0ICB1bnNpZ25lZCBsb25nIHVsRXJyU3VidHlwZTsgICAgICAgICAgICAqLworCS8qMURCOCAgdW5zaWduZWQgbG9uZyB1Y1RleHRTaXplOyAgICAgICAgICAgICAgKi8KKwkvKjFEQjkgIHVuc2lnbmVkIGxvbmcgdWNUZXh0W0VSUkxPR19URVhUX1NJWkVdOyAqLy8qIEFTQ0lJWiBvZiBsZW4gdWNUZXh0U2l6ZS0xICovCiAJLyoxREYwICovCiAKLS8qMURGMCAqLyB3b3JkIHZvbGF0aWxlIFRvSHlDaGFubmVsOwotLyoxREYyICovIHdvcmQgdm9sYXRpbGUgVG9IeVNpemU7Ci0JLyoxREY0ICovIHVjaGFyIHZvbGF0aWxlIFRvSHlGbGFnOworLyoxREYwICovIHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlIFRvSHlDaGFubmVsOworLyoxREYyICovIHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlIFRvSHlTaXplOworCS8qMURGNCAqLyB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlIFRvSHlGbGFnOwogCS8qICE9MDogbXNnIGZvciBIeSB3YWl0aW5nICovCi0JLyoxREY1ICovIHVjaGFyIHZvbGF0aWxlIFRvUGNGbGFnOworCS8qMURGNSAqLyB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlIFRvUGNGbGFnOwogCS8qICE9MDogbXNnIGZvciBQQyB3YWl0aW5nICovCi0vKjFERjYgKi8gd29yZCB2b2xhdGlsZSBUb1BjQ2hhbm5lbDsKLS8qMURGOCAqLyB3b3JkIHZvbGF0aWxlIFRvUGNTaXplOwotCS8qMURGQSAqLyB1Y2hhciBiUmVzMURCQVsweDFFMDAgLSAweDFERkFdOworLyoxREY2ICovIHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlIFRvUGNDaGFubmVsOworLyoxREY4ICovIHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlIFRvUGNTaXplOworCS8qMURGQSAqLyB1bnNpZ25lZCBjaGFyIGJSZXMxREJBWzB4MUUwMCAtIDB4MURGQV07CiAJLyogNiBieXRlcyAqLwogCi0vKjFFMDAgKi8gdWNoYXIgYlJlc3RPZkVudHJ5VGJsWzB4MUYwMCAtIDB4MUUwMF07Ci0vKjFGMDAgKi8gdWxvbmcgVHJhcFRhYmxlWzYyXTsKLQkvKjFGRjggKi8gdWNoYXIgYlJlczFGRjhbMHgxRkZCIC0gMHgxRkY4XTsKKy8qMUUwMCAqLyB1bnNpZ25lZCBjaGFyIGJSZXN0T2ZFbnRyeVRibFsweDFGMDAgLSAweDFFMDBdOworLyoxRjAwICovIHVuc2lnbmVkIGxvbmcgVHJhcFRhYmxlWzYyXTsKKwkvKjFGRjggKi8gdW5zaWduZWQgY2hhciBiUmVzMUZGOFsweDFGRkIgLSAweDFGRjhdOwogCS8qIGxvdyBwYXJ0IG9mIHJlc2V0IHZldG9yICovCi0vKjFGRkIgKi8gdWNoYXIgVG9QY0ludE1ldHJvOworLyoxRkZCICovIHVuc2lnbmVkIGNoYXIgVG9QY0ludE1ldHJvOwogCS8qIG5vdGVzOgogCSAqIC0gbWV0cm8gaGFzIDMyLWJpdCBib290IHJhbSAtIGFjY2Vzc2luZwogCSAqICAgVG9QY0ludCBhbmQgVG9IeUludCB3b3VsZCBiZSB0aGUgc2FtZTsKQEAgLTY1LDE2ICs2NSwxNiBAQAogCSAqICAgc28gRTEgc2lkZSBzaG91bGQgTk9UIGNoYW5nZSB0aGlzIGJ5dGUKIAkgKiAgIHdoZW4gd3JpdGluZyEKIAkgKi8KLS8qMUZGQyAqLyB1Y2hhciB2b2xhdGlsZSBUb0h5Tm9EcHJhbUVyckxvZzsKKy8qMUZGQyAqLyB1bnNpZ25lZCBjaGFyIHZvbGF0aWxlIFRvSHlOb0RwcmFtRXJyTG9nOwogCS8qIG5vdGU6IFRvSHlOb0RwcmFtRXJyTG9nIGlzIHVzZWQgdG8gaW5mb3JtCiAJICogICAgICAgYm9vdCBsb2FkZXIsIG5vdCB0byB1c2UgRFBSQU0gYmFzZWQKIAkgKiAgICAgICBFcnJMb2c7IHdoZW4gRE9TIGRyaXZlciBpcyByZXdyaXR0ZW4KIAkgKiAgICAgICB0aGlzIGJlY29tZXMgb2Jzb2xldGUKIAkgKi8KLS8qMUZGRCAqLyB1Y2hhciBiUmVzMUZGRDsKLQkvKjFGRkUgKi8gdWNoYXIgVG9QY0ludDsKKy8qMUZGRCAqLyB1bnNpZ25lZCBjaGFyIGJSZXMxRkZEOworCS8qMUZGRSAqLyB1bnNpZ25lZCBjaGFyIFRvUGNJbnQ7CiAJLyogRTFfaW50Y2xlYXI7IG9uIENIQU1QMjogRTFfaW50c2V0ICAgKi8KLQkvKjFGRkYgKi8gdWNoYXIgVG9IeUludDsKKwkvKjFGRkYgKi8gdW5zaWduZWQgY2hhciBUb0h5SW50OwogCS8qIEUxX2ludHNldDsgICBvbiBDSEFNUDI6IEUxX2ludGNsZWFyICovCiB9IHRFcmdEcHJhbTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jCmluZGV4IGFjYzFkM2MuLjZiYWM0M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeWNhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHljYXBpLmMKQEAgLTMxLDcgKzMxLDcgQEAKIHN0YXRpYyBjaGFyIGh5Y2FwaV9yZXZpc2lvbltdPSIkUmV2aXNpb246IDEuOC42LjQgJCI7CiAKIHVuc2lnbmVkIGludCBoeWNhcGlfZW5hYmxlID0gMHhmZmZmZmZmZjsgCi1NT0RVTEVfUEFSTShoeWNhcGlfZW5hYmxlLCAiaSIpOworbW9kdWxlX3BhcmFtKGh5Y2FwaV9lbmFibGUsIHVpbnQsIDApOwogCiB0eXBlZGVmIHN0cnVjdCBfaHljYXBpX2FwcGwgewogCXVuc2lnbmVkIGludCBjdHJsX21hc2s7CkBAIC01MjMsNyArNTIzLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHZvaWQKLWh5Y2FwaV9yeF9jYXBpcGt0KGh5c2RuX2NhcmQgKiBjYXJkLCB1Y2hhciAqIGJ1Ziwgd29yZCBsZW4pCitoeWNhcGlfcnhfY2FwaXBrdChoeXNkbl9jYXJkICogY2FyZCwgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBzaG9ydCBsZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAloeWNhcGljdHJsX2luZm8gKmNpbmZvID0gY2FyZC0+aHljdHJsaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9ib290LmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fYm9vdC5jCmluZGV4IDdiZmJhMTkuLjZkMGViMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9ib290LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2Jvb3QuYwpAQCAtMzAsMTcgKzMwLDE3IEBACiAvKiBuZWVkZWQgZHVyaW5nIGJvb3QgYW5kIHNvIGFsbG9jYXRlZCBkeW5hbWljYWxseS4gICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBib290X2RhdGEgewotCXdvcmQgQ3J5cHRvcjsJCS8qIGZvciB1c2Ugd2l0aCBEZWNyeXB0IGZ1bmN0aW9uICovCi0Jd29yZCBOcmVjczsJCS8qIHJlY29yZHMgcmVtYWluaW5nIGluIGZpbGUgKi8KLQl1Y2hhciBwb2Zfc3RhdGU7CS8qIGFjdHVhbCBzdGF0ZSBvZiByZWFkIGhhbmRsZXIgKi8KLQl1Y2hhciBpc19jcnlwdGVkOwkvKiBjYXJkIGRhdGEgaXMgY3J5cHRlZCAqLworCXVuc2lnbmVkIHNob3J0IENyeXB0b3I7CS8qIGZvciB1c2Ugd2l0aCBEZWNyeXB0IGZ1bmN0aW9uICovCisJdW5zaWduZWQgc2hvcnQgTnJlY3M7CS8qIHJlY29yZHMgcmVtYWluaW5nIGluIGZpbGUgKi8KKwl1bnNpZ25lZCBjaGFyIHBvZl9zdGF0ZTsvKiBhY3R1YWwgc3RhdGUgb2YgcmVhZCBoYW5kbGVyICovCisJdW5zaWduZWQgY2hhciBpc19jcnlwdGVkOy8qIGNhcmQgZGF0YSBpcyBjcnlwdGVkICovCiAJaW50IEJ1ZlNpemU7CQkvKiBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmQgKi8KIAlpbnQgbGFzdF9lcnJvcjsJCS8qIGxhc3Qgb2NjdXJyZWQgZXJyb3IgKi8KLQl3b3JkIHBvZl9yZWNpZDsJCS8qIGFjdHVhbCBwb2YgcmVjaWQgKi8KLQl1bG9uZyBwb2ZfcmVjbGVuOwkvKiB0b3RhbCBsZW5ndGggb2YgcG9mIHJlY29yZCBkYXRhICovCi0JdWxvbmcgcG9mX3JlY29mZnNldDsJLyogYWN0dWFsIG9mZnNldCBpbnNpZGUgcG9mIHJlY29yZCAqLworCXVuc2lnbmVkIHNob3J0IHBvZl9yZWNpZDsvKiBhY3R1YWwgcG9mIHJlY2lkICovCisJdW5zaWduZWQgbG9uZyBwb2ZfcmVjbGVuOy8qIHRvdGFsIGxlbmd0aCBvZiBwb2YgcmVjb3JkIGRhdGEgKi8KKwl1bnNpZ25lZCBsb25nIHBvZl9yZWNvZmZzZXQ7LyogYWN0dWFsIG9mZnNldCBpbnNpZGUgcG9mIHJlY29yZCAqLwogCXVuaW9uIHsKLQkJdWNoYXIgQm9vdEJ1ZltCT09UX0JVRl9TSVpFXTsJLyogYnVmZmVyIGFzIGJ5dGUgY291bnQgKi8KKwkJdW5zaWduZWQgY2hhciBCb290QnVmW0JPT1RfQlVGX1NJWkVdOy8qIGJ1ZmZlciBhcyBieXRlIGNvdW50ICovCiAJCXRQb2ZSZWNIZHIgUG9mUmVjSGRyOwkvKiBoZWFkZXIgZm9yIGFjdHVhbCByZWNvcmQvY2h1bmsgKi8KIAkJdFBvZkZpbGVIZHIgUG9mRmlsZUhkcjsJCS8qIGhlYWRlciBmcm9tIFBPRiBmaWxlICovCiAJCXRQb2ZUaW1lU3RhbXAgUG9mVGltZTsJLyogdGltZSBpbmZvcm1hdGlvbiAqLwpAQCAtNjksMTEgKzY5LDExIEBACiBzdGF0aWMgdm9pZAogRGVjcnlwdEJ1ZihzdHJ1Y3QgYm9vdF9kYXRhICpib290LCBpbnQgY250KQogewotCXVjaGFyICpidWZwID0gYm9vdC0+YnVmLkJvb3RCdWY7CisJdW5zaWduZWQgY2hhciAqYnVmcCA9IGJvb3QtPmJ1Zi5Cb290QnVmOwogCiAJd2hpbGUgKGNudC0tKSB7CiAJCWJvb3QtPkNyeXB0b3IgPSAoYm9vdC0+Q3J5cHRvciA+PiAxKSBeICgoYm9vdC0+Q3J5cHRvciAmIDFVKSA/IENSWVBUX0ZFRURURVJNIDogMCk7Ci0JCSpidWZwKysgXj0gKHVjaGFyKSBib290LT5DcnlwdG9yOworCQkqYnVmcCsrIF49ICh1bnNpZ25lZCBjaGFyKWJvb3QtPkNyeXB0b3I7CiAJfQogfQkJCQkvKiBEZWNyeXB0QnVmICovCiAKQEAgLTg2LDcgKzg2LDcgQEAKIHsKIAlzdHJ1Y3QgYm9vdF9kYXRhICpib290ID0gY2FyZC0+Ym9vdDsJLyogcG9pbnRlciB0byBib290IHNwZWNpZmljIGRhdGEgKi8KIAlsb25nIGw7Ci0JdWNoYXIgKmltZ3A7CisJdW5zaWduZWQgY2hhciAqaW1ncDsKIAlpbnQgaW1nX2xlbjsKIAogCS8qIGhhbmRsZSB0aGUgZGlmZmVyZW50IHJlY29yZCB0eXBlcyAqLwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBTZXR1cCB0aGUgbmV3IHN0YXRlIGFuZCB2YXJzICovCi0JCQlib290LT5OcmVjcyA9ICh3b3JkKSAoYm9vdC0+YnVmLlBvZkZpbGVIZHIuTl9Qb2ZSZWNzKTsJLyogbGltaXRlZCB0byA2NTUzNSAqLworCQkJYm9vdC0+TnJlY3MgPSAodW5zaWduZWQgc2hvcnQpKGJvb3QtPmJ1Zi5Qb2ZGaWxlSGRyLk5fUG9mUmVjcyk7CS8qIGxpbWl0ZWQgdG8gNjU1MzUgKi8KIAkJCWJvb3QtPnBvZl9zdGF0ZSA9IFBPRl9SRUFEX1RBR19IRUFEOwkvKiBub3cgc3RhcnQgd2l0aCBzaW5nbGUgdGFncyAqLwogCQkJYm9vdC0+bGFzdF9lcnJvciA9IHNpemVvZih0UG9mUmVjSGRyKTsJLyogbmV3IGxlbmd0aCAqLwogCQkJYnJlYWs7CkBAIC0yNjgsNyArMjY4LDcgQEAKIC8qIG9jY3VycmVkLiBBZGRpdGlvbmFsbHkgdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBkYXRhIGFyZWEgaXMgc2V0IG9uIHN1Y2Nlc3MgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50Ci1wb2Zfd3JpdGVfb3BlbihoeXNkbl9jYXJkICogY2FyZCwgdWNoYXIgKiogYnVmcCkKK3BvZl93cml0ZV9vcGVuKGh5c2RuX2NhcmQgKiBjYXJkLCB1bnNpZ25lZCBjaGFyICoqYnVmcCkKIHsKIAlzdHJ1Y3QgYm9vdF9kYXRhICpib290OwkvKiBwb2ludGVyIHRvIGJvb3Qgc3BlY2lmaWMgZGF0YSAqLwogCkBAIC0zMzUsNyArMzM1LDcgQEAKIC8qIHdoZW4gUE9GIGhhcyBiZWVuIGJvb3RlZC4gQSByZXR1cm4gdmFsdWUgb2YgMCBpcyB1c2VkIGlmIG5vIGVycm9yIG9jY3VycmVkLiAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludAotRXZhbFN5c3JUb2tEYXRhKGh5c2RuX2NhcmQgKiBjYXJkLCB1Y2hhciAqIGNwLCBpbnQgbGVuKQorRXZhbFN5c3JUb2tEYXRhKGh5c2RuX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgKmNwLCBpbnQgbGVuKQogewogCXVfY2hhciAqcDsKIAl1X2NoYXIgY3JjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaCBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmgKaW5kZXggNDMyZjZmOS4uM2E5YjI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaAorKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fZGVmcy5oCkBAIC0yMCwxNCArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIHN0b3JhZ2UgdHlwZSBkZWZpbml0aW9ucyAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIHVjaGFyIHVuc2lnbmVkIGNoYXIKLSNkZWZpbmUgdWludCB1bnNpZ25lZCBpbnQKLSNkZWZpbmUgdWxvbmcgdW5zaWduZWQgbG9uZwotI2RlZmluZSB3b3JkIHVuc2lnbmVkIHNob3J0Ci0KICNpbmNsdWRlICJpbmNlMXBjLmgiCiAKICNpZmRlZiBDT05GSUdfSFlTRE5fQ0FQSQpAQCAtMTQ3LDE4ICsxMzksMTggQEAKIAogCS8qIGdlbmVyYWwgdmFyaWFibGVzIGZvciB0aGUgY2FyZHMgKi8KIAlpbnQgbXlpZDsJCS8qIG93biBkcml2ZXIgY2FyZCBpZCAqLwotCXVjaGFyIGJ1czsJCS8qIHBjaSBidXMgdGhlIGNhcmQgaXMgY29ubmVjdGVkIHRvICovCi0JdWNoYXIgZGV2Zm47CQkvKiBzbG90K2Z1bmN0aW9uIGJpdCBlbmNvZGVkICovCi0Jd29yZCBzdWJzeXNpZDsJCS8qIFBDSSBzdWJzeXN0ZW0gaWQgKi8KLQl1Y2hhciBicmR0eXBlOwkJLyogdHlwZSBvZiBjYXJkICovCi0JdWludCBiY2hhbnM7CQkvKiBudW1iZXIgb2YgYXZhaWxhYmxlIEItY2hhbm5lbHMgKi8KLQl1aW50IGZheGNoYW5zOwkJLyogbnVtYmVyIG9mIGF2YWlsYWJsZSBmYXgtY2hhbm5lbHMgKi8KLQl1Y2hhciBtYWNfYWRkcls2XTsJLyogTUFDIEFkZHJlc3MgcmVhZCBmcm9tIGNhcmQgKi8KLQl1aW50IGlycTsJCS8qIGludGVycnVwdCBudW1iZXIgKi8KLQl1aW50IGlvYmFzZTsJCS8qIElPLXBvcnQgYmFzZSBhZGRyZXNzICovCi0JdWxvbmcgcGx4YmFzZTsJCS8qIFBMWCBtZW1vcnkgYmFzZSAqLwotCXVsb25nIG1lbWJhc2U7CQkvKiBEUFJBTSBtZW1vcnkgYmFzZSAqLwotCXVsb25nIG1lbWVuZDsJCS8qIERQUkFNIG1lbW9yeSBlbmQgKi8KKwl1bnNpZ25lZCBjaGFyIGJ1czsJLyogcGNpIGJ1cyB0aGUgY2FyZCBpcyBjb25uZWN0ZWQgdG8gKi8KKwl1bnNpZ25lZCBjaGFyIGRldmZuOwkvKiBzbG90K2Z1bmN0aW9uIGJpdCBlbmNvZGVkICovCisJdW5zaWduZWQgc2hvcnQgc3Vic3lzaWQ7LyogUENJIHN1YnN5c3RlbSBpZCAqLworCXVuc2lnbmVkIGNoYXIgYnJkdHlwZTsJLyogdHlwZSBvZiBjYXJkICovCisJdW5zaWduZWQgaW50IGJjaGFuczsJLyogbnVtYmVyIG9mIGF2YWlsYWJsZSBCLWNoYW5uZWxzICovCisJdW5zaWduZWQgaW50IGZheGNoYW5zOwkvKiBudW1iZXIgb2YgYXZhaWxhYmxlIGZheC1jaGFubmVscyAqLworCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbNl07LyogTUFDIEFkZHJlc3MgcmVhZCBmcm9tIGNhcmQgKi8KKwl1bnNpZ25lZCBpbnQgaXJxOwkvKiBpbnRlcnJ1cHQgbnVtYmVyICovCisJdW5zaWduZWQgaW50IGlvYmFzZTsJLyogSU8tcG9ydCBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIHBseGJhc2U7CS8qIFBMWCBtZW1vcnkgYmFzZSAqLworCXVuc2lnbmVkIGxvbmcgbWVtYmFzZTsJLyogRFBSQU0gbWVtb3J5IGJhc2UgKi8KKwl1bnNpZ25lZCBsb25nIG1lbWVuZDsJLyogRFBSQU0gbWVtb3J5IGVuZCAqLwogCXZvaWQgKmRwcmFtOwkJLyogbWFwcGVkIGRwcmFtICovCiAJaW50IHN0YXRlOwkJLyogYWN0dWFsIHN0YXRlIG9mIGNhcmQgLT4gQ0FSRF9TVEFURV8qKiAqLwogCXN0cnVjdCBIWVNETl9DQVJEICpuZXh0OwkvKiBwb2ludGVyIHRvIG5leHQgY2FyZCAqLwpAQCAtMTY4LDI2ICsxNjAsMjYgQEAKIAl2b2lkICpwcm9jY29uZjsJCS8qIHBvaW50ZXIgdG8gcHJvY2NvbmYgZmlsZXN5c3RlbSBzcGVjaWZpYyBkYXRhICovCiAKIAkvKiBkZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgKi8KLQl1Y2hhciBlcnJfbG9nX3N0YXRlOwkvKiBhY3R1YWwgZXJyb3IgbG9nIHN0YXRlIG9mIHRoZSBjYXJkICovCi0JdWxvbmcgZGVidWdfZmxhZ3M7CS8qIHRlbGxzIHdoYXQgc2hvdWxkIGJlIGRlYnVnZ2VkIGFuZCB3aGVyZSAqLworCXVuc2lnbmVkIGNoYXIgZXJyX2xvZ19zdGF0ZTsvKiBhY3R1YWwgZXJyb3IgbG9nIHN0YXRlIG9mIHRoZSBjYXJkICovCisJdW5zaWduZWQgbG9uZyBkZWJ1Z19mbGFnczsvKiB0ZWxscyB3aGF0IHNob3VsZCBiZSBkZWJ1Z2dlZCBhbmQgd2hlcmUgKi8KIAl2b2lkICgqc2V0X2VycmxvZ19zdGF0ZSkgKHN0cnVjdCBIWVNETl9DQVJEICosIGludCk7CiAKIAkvKiBpbnRlcnJ1cHQgaGFuZGxlciArIGludGVycnVwdCBzeW5jaHJvbmlzYXRpb24gKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxX3F1ZXVlOwkvKiBpbnRlcnJ1cHQgdGFzayBxdWV1ZSAqLwotCXVjaGFyIHZvbGF0aWxlIGlycV9lbmFibGVkOwkvKiBpbnRlcnJ1cHQgZW5hYmxlZCBpZiAhPSAwICovCi0JdWNoYXIgdm9sYXRpbGUgaHdfbG9jazsJLyogaGFyZHdhcmUgaXMgY3VycmVudGx5IGxvY2tlZCAtPiBubyBhY2Nlc3MgKi8KKwl1bnNpZ25lZCBjaGFyIHZvbGF0aWxlIGlycV9lbmFibGVkOy8qIGludGVycnVwdCBlbmFibGVkIGlmICE9IDAgKi8KKwl1bnNpZ25lZCBjaGFyIHZvbGF0aWxlIGh3X2xvY2s7LyogaGFyZHdhcmUgaXMgY3VycmVudGx5IGxvY2tlZCAtPiBubyBhY2Nlc3MgKi8KIAogCS8qIGJvb3QgcHJvY2VzcyAqLwogCXZvaWQgKmJvb3Q7CQkvKiBwb2ludGVyIHRvIGJvb3QgcHJpdmF0ZSBkYXRhICovCi0JaW50ICgqd3JpdGVib290aW1nKSAoc3RydWN0IEhZU0ROX0NBUkQgKiwgdWNoYXIgKiwgdWxvbmcpOwotCWludCAoKndyaXRlYm9vdHNlcSkgKHN0cnVjdCBIWVNETl9DQVJEICosIHVjaGFyICosIGludCk7CisJaW50ICgqd3JpdGVib290aW1nKSAoc3RydWN0IEhZU0ROX0NBUkQgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCp3cml0ZWJvb3RzZXEpIChzdHJ1Y3QgSFlTRE5fQ0FSRCAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CiAJaW50ICgqd2FpdHBvZnJlYWR5KSAoc3RydWN0IEhZU0ROX0NBUkQgKik7CiAJaW50ICgqdGVzdHJhbSkgKHN0cnVjdCBIWVNETl9DQVJEICopOwogCiAJLyogc2NoZWR1bGVyIGZvciBkYXRhIHRyYW5zZmVyIChvbmx5IGFzeW5jIHBhcnRzKSAqLwotCXVjaGFyIGFzeW5jX2RhdGFbMjU2XTsJLyogYXN5bmMgZGF0YSB0byBiZSBzZW50IChub3JtYWxseSBmb3IgY29uZmlnKSAqLwotCXdvcmQgdm9sYXRpbGUgYXN5bmNfbGVuOwkvKiBsZW5ndGggb2YgZGF0YSB0byBzZW50ICovCi0Jd29yZCB2b2xhdGlsZSBhc3luY19jaGFubmVsOwkvKiBjaGFubmVsIG51bWJlciBmb3IgYXN5bmMgdHJhbnNmZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGFzeW5jX2RhdGFbMjU2XTsvKiBhc3luYyBkYXRhIHRvIGJlIHNlbnQgKG5vcm1hbGx5IGZvciBjb25maWcpICovCisJdW5zaWduZWQgc2hvcnQgdm9sYXRpbGUgYXN5bmNfbGVuOy8qIGxlbmd0aCBvZiBkYXRhIHRvIHNlbnQgKi8KKwl1bnNpZ25lZCBzaG9ydCB2b2xhdGlsZSBhc3luY19jaGFubmVsOy8qIGNoYW5uZWwgbnVtYmVyIGZvciBhc3luYyB0cmFuc2ZlciAqLwogCWludCB2b2xhdGlsZSBhc3luY19idXN5OwkvKiBmbGFnICE9IDAgc2VuZGluZyBpbiBwcm9ncmVzcyAqLwogCWludCB2b2xhdGlsZSBuZXRfdHhfYnVzeTsJLyogYSBuZXR3b3JrIHBhY2tldCB0eCBpcyBpbiBwcm9ncmVzcyAqLwogCkBAIC0yNTEsMTUgKzI0MywxOCBAQAogCiAvKiBoeXNkbl9ib290LmMgKi8KIGV4dGVybiBpbnQgcG9mX3dyaXRlX2Nsb3NlKGh5c2RuX2NhcmQgKik7CS8qIGNsb3NlIHByb2MgZmlsZSBhZnRlciB3cml0aW5nIHBvZiAqLwotZXh0ZXJuIGludCBwb2Zfd3JpdGVfb3BlbihoeXNkbl9jYXJkICosIHVjaGFyICoqKTsJLyogb3BlbiBwcm9jIGZpbGUgZm9yIHdyaXRpbmcgcG9mICovCitleHRlcm4gaW50IHBvZl93cml0ZV9vcGVuKGh5c2RuX2NhcmQgKiwgdW5zaWduZWQgY2hhciAqKik7CS8qIG9wZW4gcHJvYyBmaWxlIGZvciB3cml0aW5nIHBvZiAqLwogZXh0ZXJuIGludCBwb2Zfd3JpdGVfYnVmZmVyKGh5c2RuX2NhcmQgKiwgaW50KTsJCS8qIHdyaXRlIGJvb3QgZGF0YSB0byBjYXJkICovCi1leHRlcm4gaW50IEV2YWxTeXNyVG9rRGF0YShoeXNkbl9jYXJkICosIHVjaGFyICosIGludCk7CQkvKiBDaGVjayBTeXNyZWFkeSBUb2tlbiBEYXRhICovCitleHRlcm4gaW50IEV2YWxTeXNyVG9rRGF0YShoeXNkbl9jYXJkICosIHVuc2lnbmVkIGNoYXIgKiwgaW50KTsJCS8qIENoZWNrIFN5c3JlYWR5IFRva2VuIERhdGEgKi8KIAogLyogaHlzZG5fc2NoZWQuYyAqLwotZXh0ZXJuIGludCBoeXNkbl9zY2hlZF90eChoeXNkbl9jYXJkICosIHVjaGFyICosIHdvcmQgdm9sYXRpbGUgKiwgd29yZCB2b2xhdGlsZSAqLAotCQkJICB3b3JkKTsKLWV4dGVybiBpbnQgaHlzZG5fc2NoZWRfcngoaHlzZG5fY2FyZCAqLCB1Y2hhciAqLCB3b3JkLCB3b3JkKTsKLWV4dGVybiBpbnQgaHlzZG5fdHhfY2ZnbGluZShoeXNkbl9jYXJkICosIHVjaGFyICosIHdvcmQpOwkvKiBzZW5kIG9uZSBjZmcgbGluZSAqLworZXh0ZXJuIGludCBoeXNkbl9zY2hlZF90eChoeXNkbl9jYXJkICosIHVuc2lnbmVkIGNoYXIgKiwKKwkJCXVuc2lnbmVkIHNob3J0IHZvbGF0aWxlICosIHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlICosCisJCQl1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gaW50IGh5c2RuX3NjaGVkX3J4KGh5c2RuX2NhcmQgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBzaG9ydCwKKwkJCXVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiBpbnQgaHlzZG5fdHhfY2ZnbGluZShoeXNkbl9jYXJkICosIHVuc2lnbmVkIGNoYXIgKiwKKwkJCXVuc2lnbmVkIHNob3J0KTsJLyogc2VuZCBvbmUgY2ZnIGxpbmUgKi8KIAogLyogaHlzZG5fbmV0LmMgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgaHluZXRfZW5hYmxlOyAKQEAgLTI2OSwxNCArMjY0LDE2IEBACiBleHRlcm4gY2hhciAqaHlzZG5fbmV0X2dldG5hbWUoaHlzZG5fY2FyZCAqKTsJLyogZ2V0IG5hbWUgb2YgbmV0IGludGVyZmFjZSAqLwogZXh0ZXJuIHZvaWQgaHlzZG5fdHhfbmV0YWNrKGh5c2RuX2NhcmQgKik7CS8qIGFja25vd2xlZGdlIGEgcGFja2V0IHR4ICovCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmh5c2RuX3R4X25ldGdldChoeXNkbl9jYXJkICopOwkvKiBnZXQgbmV4dCBuZXR3b3JrIHBhY2tldCAqLwotZXh0ZXJuIHZvaWQgaHlzZG5fcnhfbmV0cGt0KGh5c2RuX2NhcmQgKiwgdWNoYXIgKiwgd29yZCk7CS8qIHJ4ZWQgcGFja2V0IGZyb20gbmV0d29yayAqLworZXh0ZXJuIHZvaWQgaHlzZG5fcnhfbmV0cGt0KGh5c2RuX2NhcmQgKiwgdW5zaWduZWQgY2hhciAqLAorCQkJdW5zaWduZWQgc2hvcnQpOwkvKiByeGVkIHBhY2tldCBmcm9tIG5ldHdvcmsgKi8KIAogI2lmZGVmIENPTkZJR19IWVNETl9DQVBJCiBleHRlcm4gdW5zaWduZWQgaW50IGh5Y2FwaV9lbmFibGU7IAogZXh0ZXJuIGludCBoeWNhcGlfY2FwaV9jcmVhdGUoaHlzZG5fY2FyZCAqKTsJLyogY3JlYXRlIGEgbmV3IGNhcGkgZGV2aWNlICovCiBleHRlcm4gaW50IGh5Y2FwaV9jYXBpX3JlbGVhc2UoaHlzZG5fY2FyZCAqKTsJLyogZGVsZXRlIHRoZSBkZXZpY2UgKi8KIGV4dGVybiBpbnQgaHljYXBpX2NhcGlfc3RvcChoeXNkbl9jYXJkICpjYXJkKTsgICAvKiBzdXNwZW5kICovCi1leHRlcm4gdm9pZCBoeWNhcGlfcnhfY2FwaXBrdChoeXNkbl9jYXJkICogY2FyZCwgdWNoYXIgKiBidWYsIHdvcmQgbGVuKTsKK2V4dGVybiB2b2lkIGh5Y2FwaV9yeF9jYXBpcGt0KGh5c2RuX2NhcmQgKiBjYXJkLCB1bnNpZ25lZCBjaGFyICogYnVmLAorCQkJCXVuc2lnbmVkIHNob3J0IGxlbik7CiBleHRlcm4gdm9pZCBoeWNhcGlfdHhfY2FwaWFjayhoeXNkbl9jYXJkICogY2FyZCk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmh5Y2FwaV90eF9jYXBpZ2V0KGh5c2RuX2NhcmQgKmNhcmQpOwogZXh0ZXJuIGludCBoeWNhcGlfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCmluZGV4IGNiNzkxZjguLmI3NWFjNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYwpAQCAtNDEsOCArNDEsOCBAQAogLyogdGhlIGxhc3QgZW50cnkgY29udGFpbnMgYWxsIDAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgewotCXdvcmQgc3ViaWQ7CQkvKiBQQ0kgc3ViIGlkICovCi0JdWNoYXIgY2FyZHR5cDsJCS8qIGNhcmQgdHlwZSBhc3NpZ25lZCAqLworCXVuc2lnbmVkIHNob3J0IHN1YmlkOwkJLyogUENJIHN1YiBpZCAqLworCXVuc2lnbmVkIGNoYXIgY2FyZHR5cDsJCS8qIGNhcmQgdHlwZSBhc3NpZ25lZCAqLwogfSBwY2lfc3ViaWRfbWFwW10gPSB7CiAKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKaW5kZXggYWEwMTYyOC4uZDIwNTI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImh5c2RuX2RlZnMuaCIKIAogdW5zaWduZWQgaW50IGh5bmV0X2VuYWJsZSA9IDB4ZmZmZmZmZmY7IAotTU9EVUxFX1BBUk0oaHluZXRfZW5hYmxlLCAiaSIpOworbW9kdWxlX3BhcmFtKGh5bmV0X2VuYWJsZSwgdWludCwgMCk7CiAKIC8qIHN0b3JlIHRoZSBhY3R1YWwgdmVyc2lvbiBmb3IgbG9nIHJlcG9ydGluZyAqLwogY2hhciAqaHlzZG5fbmV0X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS44LjYuNCAkIjsKQEAgLTgzLDEyICs4MywxMiBAQAogCiAJLyogRmlsbCBpbiB0aGUgTUFDLWxldmVsIGhlYWRlciAoaWYgbm90IGFscmVhZHkgc2V0KSAqLwogCWlmICghY2FyZC0+bWFjX2FkZHJbMF0pIHsKLQkJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOIC0gc2l6ZW9mKHVsb25nKTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU4gLSBzaXplb2YodW5zaWduZWQgbG9uZyk7IGkrKykKIAkJCWRldi0+ZGV2X2FkZHJbaV0gPSAweGZjOwogCQlpZiAoKGluX2RldiA9IGRldi0+aXBfcHRyKSAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OwogCQkJaWYgKGlmYSAhPSBOVUxMKQotCQkJCW1lbWNweShkZXYtPmRldl9hZGRyICsgKEVUSF9BTEVOIC0gc2l6ZW9mKHVsb25nKSksICZpZmEtPmlmYV9sb2NhbCwgc2l6ZW9mKHVsb25nKSk7CisJCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIgKyAoRVRIX0FMRU4gLSBzaXplb2YodW5zaWduZWQgbG9uZykpLCAmaWZhLT5pZmFfbG9jYWwsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAJCX0KIAl9IGVsc2UKIAkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGNhcmQtPm1hY19hZGRyLCBFVEhfQUxFTik7CkBAIC0xOTcsNyArMTk3LDcgQEAKIC8qIHdlIGdvdCBhIHBhY2tldCBmcm9tIHRoZSBuZXR3b3JrLCBnbyBhbmQgcXVldWUgaXQgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQKLWh5c2RuX3J4X25ldHBrdChoeXNkbl9jYXJkICogY2FyZCwgdWNoYXIgKiBidWYsIHdvcmQgbGVuKQoraHlzZG5fcnhfbmV0cGt0KGh5c2RuX2NhcmQgKiBjYXJkLCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IGNhcmQtPm5ldGlmOwogCXN0cnVjdCBza19idWZmICpza2I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcG9mLmggYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcG9mLmgKaW5kZXggNmNkODFiOS4uYTM2OGQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3BvZi5oCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wb2YuaApAQCAtNDcsMjAgKzQ3LDIwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1QT0YgZmlsZSByZWNvcmQgc3RydWN0cy0tLS0tLS0tLS0tLSovCiB0eXBlZGVmIHN0cnVjdCBQb2ZGaWxlSGRyX3RhZyB7CS8qIFBvZiBmaWxlIGhlYWRlciAqLwotLyowMCAqLyB1bG9uZyBNYWdpYyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLS8qMDQgKi8gdWxvbmcgTl9Qb2ZSZWNzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyowMCAqLyB1bnNpZ25lZCBsb25nIE1hZ2ljIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyowNCAqLyB1bnNpZ25lZCBsb25nIE5fUG9mUmVjcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qMDggKi8KIH0gdFBvZkZpbGVIZHI7CiAKIHR5cGVkZWYgc3RydWN0IFBvZlJlY0hkcl90YWcgewkvKiBQb2YgcmVjb3JkIGhlYWRlciAqLwotLyowMCAqLyB3b3JkIFBvZlJlY0lkIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotLyowMiAqLyB1bG9uZyBQb2ZSZWNEYXRhTGVuIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyowMCAqLyB1bnNpZ25lZCBzaG9ydCBQb2ZSZWNJZCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qMDIgKi8gdW5zaWduZWQgbG9uZyBQb2ZSZWNEYXRhTGVuIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyowNiAqLwogfSB0UG9mUmVjSGRyOwogCiB0eXBlZGVmIHN0cnVjdCBQb2ZUaW1lU3RhbXBfdGFnIHsKLS8qMDAgKi8gdWxvbmcgVW5peFRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0JLyowNCAqLyB1Y2hhciBEYXRlVGltZVRleHRbMHgyOF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKjAwICovIHVuc2lnbmVkIGxvbmcgVW5peFRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisJLyowNCAqLyB1bnNpZ25lZCBjaGFyIERhdGVUaW1lVGV4dFsweDI4XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAkvKiA9NDAgKi8KIC8qMkMgKi8KIH0gdFBvZlRpbWVTdGFtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKaW5kZXggNDBlNTYxNC4uOGUyYjAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKQEAgLTM2LDkgKzM2LDkgQEAKIAlpbnQgYnVmX3NpemU7CQkvKiBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgKi8KIAlpbnQgbmVlZGVkX3NpemU7CS8qIG5lZWRlZCBzaXplIHdoZW4gcmVhZGluZyBwb2YgKi8KIAlpbnQgc3RhdGU7CQkvKiBhY3R1YWwgaW50ZXJmYWNlIHN0YXRlcyBmcm9tIGFib3ZlIGNvbnN0YW50cyAqLwotCXVjaGFyIGNvbmZfbGluZVtDT05GX0xJTkVfTEVOXTsJCS8qIGJ1ZmZlcmVkIGNvbmYgbGluZSAqLwotCXdvcmQgY2hhbm5lbDsJCS8qIGFjdGl2ZSBjaGFubmVsIG51bWJlciAqLwotCXVjaGFyICpwb2ZfYnVmZmVyOwkvKiBidWZmZXIgd2hlbiB3cml0aW5nIHBvZiAqLworCXVuc2lnbmVkIGNoYXIgY29uZl9saW5lW0NPTkZfTElORV9MRU5dOwkvKiBidWZmZXJlZCBjb25mIGxpbmUgKi8KKwl1bnNpZ25lZCBzaG9ydCBjaGFubmVsOwkJLyogYWN0aXZlIGNoYW5uZWwgbnVtYmVyICovCisJdW5zaWduZWQgY2hhciAqcG9mX2J1ZmZlcjsJLyogYnVmZmVyIHdoZW4gd3JpdGluZyBwb2YgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ5LDcgKzQ5LDcgQEAKIHN0YXRpYyBpbnQKIHByb2Nlc3NfbGluZShzdHJ1Y3QgY29uZl93cml0ZWRhdGEgKmNuZikKIHsKLQl1Y2hhciAqY3AgPSBjbmYtPmNvbmZfbGluZTsKKwl1bnNpZ25lZCBjaGFyICpjcCA9IGNuZi0+Y29uZl9saW5lOwogCWludCBpOwogCiAJaWYgKGNuZi0+Y2FyZC0+ZGVidWdfZmxhZ3MgJiBMT0dfQ05GX0xJTkUpCkBAIC05Miw3ICs5Miw3IEBACiB7CiAJc3RydWN0IGNvbmZfd3JpdGVkYXRhICpjbmY7CiAJaW50IGk7Ci0JdWNoYXIgY2gsICpjcDsKKwl1bnNpZ25lZCBjaGFyIGNoLCAqY3A7CiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gKDApOwkvKiBub3RoaW5nIHRvIGhhbmRsZSAqLwpAQCAtMzkwLDcgKzM5MCw3IEBACiBoeXNkbl9wcm9jY29uZl9pbml0KHZvaWQpCiB7CiAJaHlzZG5fY2FyZCAqY2FyZDsKLQl1Y2hhciBjb25mX25hbWVbMjBdOworCXVuc2lnbmVkIGNoYXIgY29uZl9uYW1lWzIwXTsKIAogCWh5c2RuX3Byb2NfZW50cnkgPSBwcm9jX21rZGlyKFBST0NfU1VCRElSX05BTUUsIHByb2NfbmV0KTsKIAlpZiAoIWh5c2RuX3Byb2NfZW50cnkpIHsKQEAgLTQyMyw3ICs0MjMsNyBAQAogaHlzZG5fcHJvY2NvbmZfcmVsZWFzZSh2b2lkKQogewogCWh5c2RuX2NhcmQgKmNhcmQ7Ci0JdWNoYXIgY29uZl9uYW1lWzIwXTsKKwl1bnNpZ25lZCBjaGFyIGNvbmZfbmFtZVsyMF07CiAKIAljYXJkID0gY2FyZF9yb290OwkvKiBzdGFydCB3aXRoIGZpcnN0IGNhcmQgKi8KIAl3aGlsZSAoY2FyZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKaW5kZXggNmMyNmYxZS4uYzQzMDFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCkBAIC0yOCw3ICsyOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBsb2dfZGF0YSB7CiAJc3RydWN0IGxvZ19kYXRhICpuZXh0OwotCXVsb25nIHVzYWdlX2NudDsJLyogbnVtYmVyIG9mIGZpbGVzIHN0aWxsIHRvIHdvcmsgKi8KKwl1bnNpZ25lZCBsb25nIHVzYWdlX2NudDsvKiBudW1iZXIgb2YgZmlsZXMgc3RpbGwgdG8gd29yayAqLwogCXZvaWQgKnByb2NfY3RybDsJLyogcG9pbnRlciB0byBvd24gY29udHJvbCBwcm9jZGF0YSBzdHJ1Y3R1cmUgKi8KIAljaGFyIGxvZ19zdGFydFsyXTsJLyogbG9nIHN0cmluZyBzdGFydCAoZmluYWwgbGVuIGFsaWduZWQgYnkgc2l6ZSkgKi8KIH07CkBAIC00Miw3ICs0Miw3IEBACiAJc3RydWN0IGxvZ19kYXRhICpsb2dfaGVhZCwgKmxvZ190YWlsOwkvKiBoZWFkIGFuZCB0YWlsIGZvciBxdWV1ZSAqLwogCWludCBpZl91c2VkOwkJLyogb3BlbiBjb3VudCBmb3IgaW50ZXJmYWNlICovCiAJaW50IHZvbGF0aWxlIGRlbF9sb2NrOwkvKiBsb2NrIGZvciBkZWxldGUgb3BlcmF0aW9ucyAqLwotCXVjaGFyIGxvZ3RtcFtMT0dfTUFYX0xJTkVMRU5dOworCXVuc2lnbmVkIGNoYXIgbG9ndG1wW0xPR19NQVhfTElORUxFTl07CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmRfcXVldWU7CiB9OwogCkBAIC0xNTMsOSArMTUzLDkgQEAKIHN0YXRpYyBzc2l6ZV90CiBoeXNkbl9sb2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2ZmKQogewotCXVsb25nIHUgPSAwOworCXVuc2lnbmVkIGxvbmcgdSA9IDA7CiAJaW50IGZvdW5kID0gMDsKLQl1Y2hhciAqY3AsIHZhbGJ1ZlsxMjhdOworCXVuc2lnbmVkIGNoYXIgKmNwLCB2YWxidWZbMTI4XTsKIAlsb25nIGJhc2UgPSAxMDsKIAloeXNkbl9jYXJkICpjYXJkID0gKGh5c2RuX2NhcmQgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwogCkBAIC0yNDksNyArMjQ5LDcgQEAKIHsKIAloeXNkbl9jYXJkICpjYXJkOwogCXN0cnVjdCBwcm9jZGF0YSAqcGQgPSBOVUxMOwotCXVsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NrX2tlcm5lbCgpOwogCWNhcmQgPSBjYXJkX3Jvb3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fc2NoZWQuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9zY2hlZC5jCmluZGV4IDRmYTNiMDEuLjEzMzAzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9zY2hlZC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9zY2hlZC5jCkBAIC0zMCw3ICszMCw4IEBACiAvKiB0byBrZWVwIHRoZSBkYXRhIHVudGlsIGxhdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQKLWh5c2RuX3NjaGVkX3J4KGh5c2RuX2NhcmQgKiBjYXJkLCB1Y2hhciAqIGJ1Ziwgd29yZCBsZW4sIHdvcmQgY2hhbikKK2h5c2RuX3NjaGVkX3J4KGh5c2RuX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJdW5zaWduZWQgc2hvcnQgY2hhbikKIHsKIAogCXN3aXRjaCAoY2hhbikgewpAQCAtNzIsNyArNzMsOSBAQAogLyogc2VuZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50Ci1oeXNkbl9zY2hlZF90eChoeXNkbl9jYXJkICogY2FyZCwgdWNoYXIgKiBidWYsIHdvcmQgdm9sYXRpbGUgKmxlbiwgd29yZCB2b2xhdGlsZSAqY2hhbiwgd29yZCBtYXhsZW4pCitoeXNkbl9zY2hlZF90eChoeXNkbl9jYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCXVuc2lnbmVkIHNob3J0IHZvbGF0aWxlICpsZW4sIHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlICpjaGFuLAorCQl1bnNpZ25lZCBzaG9ydCBtYXhsZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTQ1LDEwICsxNDgsMTAgQEAKIC8qIGFyZSB0byBiZSBzZW50IGFuZCB0aGlzIGhhcHBlbnMgdmVyeSBzZWxkb20uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludAotaHlzZG5fdHhfY2ZnbGluZShoeXNkbl9jYXJkICogY2FyZCwgdWNoYXIgKiBsaW5lLCB3b3JkIGNoYW4pCitoeXNkbl90eF9jZmdsaW5lKGh5c2RuX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgKmxpbmUsIHVuc2lnbmVkIHNob3J0IGNoYW4pCiB7CiAJaW50IGNudCA9IDUwOwkJLyogdGltZW91dCBpbnRlcnZhbGxzICovCi0JdWxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChjYXJkLT5kZWJ1Z19mbGFncyAmIExPR19TQ0hFRF9BU1lOKQogCQloeXNkbl9hZGRsb2coY2FyZCwgImFzeW5jIHR4LWNmZyBjaGFuPSVkIGxlbj0lZCIsIGNoYW4sIHN0cmxlbihsaW5lKSArIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2luY2UxcGMuaCBiL2RyaXZlcnMvaXNkbi9oeXNkbi9pbmNlMXBjLmgKaW5kZXggNGExMTVhOC4uN2EzNjY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2luY2UxcGMuaAorKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaW5jZTFwYy5oCkBAIC02Miw3ICs2Miw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgIHMuIFJvdGxDUkMgYWxnb3JpdGhtCiAgKgogICogIFJvdGxDUkMgYWxnb3JpdGhtOgotICogICAgICB1Y1N1bT0gMCAgICAgICAgICAgICAgICAgICAgICAgIDEgdWNoYXIKKyAqICAgICAgdWNTdW09IDAgICAgICAgICAgICAgICAgICAgICAgICAxIHVuc2lnbmVkIGNoYXIKICAqICAgICAgZm9yIGFsbCBOb25FbmRUb2tlbkNodW5rIGJ5dGVzOgogICogICAgICAgICAgUk9UTCh1Y1N1bSwxKSAgICAgICAgICAgICAgIHJvdGF0ZSBsZWZ0IGJ5IDEKICAqICAgICAgICAgIHVjU3VtICs9IENoYXI7ICAgICAgICAgICAgICBhZGQgY3VycmVudCBieXRlIHdpdGggc3dhcCBhcm91bmQKQEAgLTg1LDEzICs4NSwxMyBAQAogCiB0eXBlZGVmIHN0cnVjdCBFcnJMb2dFbnRyeV90YWcgewogCQotLyowMCAqLyB1bG9uZyB1bEVyclR5cGU7CisvKjAwICovIHVuc2lnbmVkIGxvbmcgdWxFcnJUeXBlOwogCQotLyowNCAqLyB1bG9uZyB1bEVyclN1YnR5cGU7CisvKjA0ICovIHVuc2lnbmVkIGxvbmcgdWxFcnJTdWJ0eXBlOwogCQotLyowOCAqLyB1Y2hhciB1Y1RleHRTaXplOworLyowOCAqLyB1bnNpZ25lZCBjaGFyIHVjVGV4dFNpemU7CiAJCi0JLyowOSAqLyB1Y2hhciB1Y1RleHRbRVJSTE9HX1RFWFRfU0laRV07CisJLyowOSAqLyB1bnNpZ25lZCBjaGFyIHVjVGV4dFtFUlJMT0dfVEVYVF9TSVpFXTsKIAkvKiBBU0NJSVogb2YgbGVuIHVjVGV4dFNpemUtMSAqLwogCQogLyo0MCAqLyAKQEAgLTExMSwxMyArMTExLDEzIEBACiAjZGVmaW5lIERQUkFNX1NQT09MRVJfREFUQV9TSVpFIDB4MjAKIHR5cGVkZWYgc3RydWN0IERwcmFtQm9vdFNwb29sZXJfdGFnIHsKIAkKLS8qMDAgKi8gdWNoYXIgTGVuOworLyowMCAqLyB1bnNpZ25lZCBjaGFyIExlbjsKIAkKLS8qMDEgKi8gdm9sYXRpbGUgdWNoYXIgUmRQdHI7CisvKjAxICovIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgUmRQdHI7CiAJCi0vKjAyICovIHVjaGFyIFdyUHRyOworLyowMiAqLyB1bnNpZ25lZCBjaGFyIFdyUHRyOwogCQotLyowMyAqLyB1Y2hhciBEYXRhW0RQUkFNX1NQT09MRVJfREFUQV9TSVpFXTsKKy8qMDMgKi8gdW5zaWduZWQgY2hhciBEYXRhW0RQUkFNX1NQT09MRVJfREFUQV9TSVpFXTsKIAkKIC8qMjMgKi8gCiB9IHREcHJhbUJvb3RTcG9vbGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCmluZGV4IDFhMTlhMGYuLmI5ZmVkOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKQEAgLTc4Miw3ICs3ODIsOCBAQAogCWlzLT5maXJzdCA9IGI7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcy0+YnVmbG9jaywgZmxhZ3MpOwotCWNvcHlfdG9fdXNlcihidWYsIHNhdmVfYnVmLCBjb3VudCk7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHNhdmVfYnVmLCBjb3VudCkpCisJCWNvdW50ID0gLUVGQVVMVDsKIAlrZnJlZShzYXZlX2J1Zik7CiAKIAlyZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKaW5kZXggMzkzNjMzNi4uMzU4NWZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYwpAQCAtMTY4Miw2ICsxNjgyLDcgQEAKICNpZmRlZiBJU0ROX0RFQlVHX01PREVNX09QRU4KIAkJcHJpbnRrKEtFUk5fREVCVUcgImlzZG5fdHR5X2Nsb3NlIGFmdGVyIGluZm8tPmNvdW50ICE9IDBcbiIpOwogI2VuZGlmCisJCW1vZHVsZV9wdXQoaW5mby0+b3duZXIpOwogCQlyZXR1cm47CiAJfQogCWluZm8tPmZsYWdzIHw9IElTRE5fQVNZTkNfQ0xPU0lORzsKQEAgLTIzNDQsMTIgKzIzNDUsMTUgQEAKIAl1X2xvbmcgZmxhZ3M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJY2hhciAqc3AgPSBOVUxMOwotCWludCBsID0gc3RybGVuKG1zZyk7CisJaW50IGw7CiAKIAlpZiAoIW1zZykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpc2RuX3R0eTogTnVsbC1NZXNzYWdlIGluIGlzZG5fdHR5X2F0X2NvdXRcbiIpOwogCQlyZXR1cm47CiAJfQorCisJbCA9IHN0cmxlbihtc2cpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPnJlYWRsb2NrLCBmbGFncyk7CiAJdHR5ID0gaW5mby0+dHR5OwogCWlmICgoaW5mby0+ZmxhZ3MgJiBJU0ROX0FTWU5DX0NMT1NJTkcpIHx8ICghdHR5KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3gyNWlmYWNlLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5feDI1aWZhY2UuYwppbmRleCBlZGYxNGEyLi43NDNhYzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5feDI1aWZhY2UuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5feDI1aWZhY2UuYwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBzdHVmZiBuZWVkZWQgdG8gc3VwcG9ydCB0aGUgTGludXggWC4yNSBQTFAgY29kZSBvbiB0b3Agb2YgZGV2aWNlcyB0aGF0CiAgKiBjYW4gcHJvdmlkZSBhIGxhYl9iIHNlcnZpY2UgdXNpbmcgdGhlIGNvbmNhcF9wcm90byBtZWNoYW5pc20uCi0gKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBhIG5ldHdvcmsgaW50ZXJmYWNlIHdpY2ggcHJvdmlkZXMgbGFwYl9zZW1hdGljcworICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgYSBuZXR3b3JrIGludGVyZmFjZSB3aGljaCBwcm92aWRlcyBsYXBiX3NlbWF0aWNzCiAgKiAtLSBhcyBkZWZpbmVkIGluIERvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUtaWZhY2UudHh0IC0tIHRvCiAgKiB0aGUgdXBwZXIgbGF5ZXIgYW5kIGFzc3VtZXMgdGhhdCB0aGUgbG93ZXIgbGF5ZXIgcHJvdmlkZXMgYSByZWxpYWJsZQogICogZGF0YSBsaW5rIHNlcnZpY2UgYnkgbWVhbnMgb2YgdGhlIGNvbmNhcF9kZXZpY2Vfb3BzIGNhbGxiYWNrcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pc2RubG9vcC9pc2RubG9vcC5jIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKaW5kZXggMzNkMzM5Ny4uYTY3ZDMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKKysrIGIvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMKQEAgLTIyLDcgKzIyLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiSVNETjRMaW51eDogUHNldWRvIERyaXZlciB0aGF0IHNpbXVsYXRlcyBhbiBJU0ROIGNhcmQiKTsKIE1PRFVMRV9BVVRIT1IoIkZyaXR6IEVsZmVydCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1BBUk0oaXNkbmxvb3BfaWQsICJzIik7Cittb2R1bGVfcGFyYW0oaXNkbmxvb3BfaWQsIGNoYXJwLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXNkbmxvb3BfaWQsICJJRC1TdHJpbmcgb2YgZmlyc3QgY2FyZCIpOwogCiBzdGF0aWMgaW50IGlzZG5sb29wX2FkZGNhcmQoY2hhciAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYwppbmRleCA2OTU5NmY2Li40MzFiZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jCkBAIC01NTAsMTUgKzU1MCwxMiBAQAogICovCiBpbnQgbWFjaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtYWNpb19kcml2ZXIgKmRydikKIHsKLQlpbnQgY291bnQgPSAwOwotCiAJLyogaW5pdGlhbGl6ZSBjb21tb24gZHJpdmVyIGZpZWxkcyAqLwogCWRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7CiAJZHJ2LT5kcml2ZXIuYnVzID0gJm1hY2lvX2J1c190eXBlOwogCiAJLyogcmVnaXN0ZXIgd2l0aCBjb3JlICovCi0JY291bnQgPSBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKLQlyZXR1cm4gY291bnQgPyBjb3VudCA6IDE7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3NtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKaW5kZXggZGIyYWU3MS4uNGViMDVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKQEAgLTYyOSw4ICs2MjksNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzbXVfaW5pdF9zeXNmcyh2b2lkKQogewotCWludCByYzsKLQogCS8qCiAJICogRHVlIHRvIHN5c2ZzIGJvZ29zaXR5LCBhIHN5c2RldiBpcyBub3QgYSByZWFsIGRldmljZSwgc28KIAkgKiB3ZSBzaG91bGQgaW4gZmFjdCBjcmVhdGUgYm90aCBpZiB3ZSB3YW50IHN5c2RldiBzZW1hbnRpY3MKQEAgLTYzOSw3ICs2MzcsNyBAQAogCSAqIEknbSBhIGJpdCB0b28gZmFyIGZyb20gZmlndXJpbmcgb3V0IGhvdyB0aGF0IHdvcmtzIHdpdGggdGhvc2UKIAkgKiBuZXcgY2hpcHNldHMsIGJ1dCB0aGF0IHdpbGwgY29tZSBiYWNrIGFuZCBiaXRlIHVzCiAJICovCi0JcmMgPSBvZl9yZWdpc3Rlcl9kcml2ZXIoJnNtdV9vZl9wbGF0Zm9ybV9kcml2ZXIpOworCW9mX3JlZ2lzdGVyX2RyaXZlcigmc211X29mX3BsYXRmb3JtX2RyaXZlcik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwppbmRleCA0ZjUwZWU1Li4yMzExNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCkBAIC0xMDQsNyArMTA0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMTEzLDcgKzExMiw2IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggNmViOTNlNC4uNGY1ZjNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtMTYxLDcgKzE2MSw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQogc3RhdGljIGludCBvcHRpb25fbGlkX3dha2V1cCA9IDE7CiAjZW5kaWYgLyogQ09ORklHX1BNICYmIENPTkZJR19QUEMzMiAqLworI2lmIChkZWZpbmVkKENPTkZJR19QTSkmJmRlZmluZWQoQ09ORklHX1BQQzMyKSl8fGRlZmluZWQoQ09ORklHX1BNQUNfQkFDS0xJR0hUKQogc3RhdGljIGludCBzbGVlcF9pbl9wcm9ncmVzczsKKyNlbmRpZgogc3RhdGljIHVuc2lnbmVkIGxvbmcgYXN5bmNfcmVxX2xvY2tzOwogc3RhdGljIHVuc2lnbmVkIGludCBwbXVfaXJxX3N0YXRzWzExXTsKIApAQCAtODI1LDcgKzgyNyw3IEBACiAJcCArPSBzcHJpbnRmKHAsICJQTVUgZHJpdmVyIHZlcnNpb24gICAgIDogJWRcbiIsIFBNVV9EUklWRVJfVkVSU0lPTik7CiAJcCArPSBzcHJpbnRmKHAsICJQTVUgZmlybXdhcmUgdmVyc2lvbiAgIDogJTAyeFxuIiwgcG11X3ZlcnNpb24pOwogCXAgKz0gc3ByaW50ZihwLCAiQUMgUG93ZXIgICAgICAgICAgICAgICA6ICVkXG4iLAotCQkoKHBtdV9wb3dlcl9mbGFncyAmIFBNVV9QV1JfQUNfUFJFU0VOVCkgIT0gMCkpOworCQkoKHBtdV9wb3dlcl9mbGFncyAmIFBNVV9QV1JfQUNfUFJFU0VOVCkgIT0gMCkgfHwgcG11X2JhdHRlcnlfY291bnQgPT0gMCk7CiAJcCArPSBzcHJpbnRmKHAsICJCYXR0ZXJ5IGNvdW50ICAgICAgICAgIDogJWRcbiIsIHBtdV9iYXR0ZXJ5X2NvdW50KTsKIAogCXJldHVybiBwIC0gcGFnZTsKQEAgLTIyMDEsOCArMjIwMyw3IEBACiAjZGVmaW5lCUdSQUNLTEVfTkFQCSgxPDw0KQogI2RlZmluZQlHUkFDS0xFX1NMRUVQCSgxPDwzKQogCi1pbnQKLXBvd2VyYm9va19zbGVlcF9ncmFja2xlKHZvaWQpCitzdGF0aWMgaW50IHBvd2VyYm9va19zbGVlcF9ncmFja2xlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzYXZlX2wyY3I7CiAJdW5zaWduZWQgc2hvcnQgcG1jcjE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMKaW5kZXggYmI4ZDVlZi4uNmMwYmEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NvcmUuYwpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorCiAjaW5jbHVkZSAid2luZGZhcm0uaCIKIAogI2RlZmluZSBWRVJTSU9OICIwLjIiCkBAIC00NjUsNiArNDY3LDExIEBACiB7CiAJREJHKCJ3ZjogY29yZSBsb2FkZWRcbiIpOwogCisJLyogRG9uJ3QgcmVnaXN0ZXIgb24gb2xkIG1hY2hpbmVzIHRoYXQgdXNlIHRoZXJtX3BtNzIgZm9yIG5vdyAqLworCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndmX3BsYXRmb3JtX2RldmljZSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jcHVmcmVxX2NsYW1wLmMKaW5kZXggNjA3ZGJhYy4uODEzMzdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY3B1ZnJlcV9jbGFtcC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NwdWZyZXFfY2xhbXAuYwpAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogCisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKwogI2luY2x1ZGUgIndpbmRmYXJtLmgiCiAKICNkZWZpbmUgVkVSU0lPTiAiMC4zIgpAQCAtNzQsNiArNzYsMTIgQEAKIHsKIAlzdHJ1Y3Qgd2ZfY29udHJvbCAqY2xhbXA7CiAKKwkvKiBEb24ndCByZWdpc3RlciBvbiBvbGQgbWFjaGluZXMgdGhhdCB1c2UgdGhlcm1fcG03MiBmb3Igbm93ICovCisJaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCisJCXJldHVybiAtRU5PREVWOworCiAJY2xhbXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2ZfY29udHJvbCksIEdGUF9LRVJORUwpOwogCWlmIChjbGFtcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCmluZGV4IDkwNmQzZWMuLjNmNzk2N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTI1LDcgKzI0LDcgQEAKIAogI2luY2x1ZGUgIndpbmRmYXJtLmgiCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC4xIgorI2RlZmluZSBWRVJTSU9OICIwLjIiCiAKICN1bmRlZiBERUJVRwogCkBAIC0xMTMsNiArMTEyLDcgQEAKIAkJCQkJICAgICBjb25zdCBjaGFyICpsb2MpCiB7CiAJc3RydWN0IHdmX2xtNzVfc2Vuc29yICpsbTsKKwlpbnQgcmM7CiAKIAlEQkcoIndmX2xtNzU6IGNyZWF0aW5nICAlcyBkZXZpY2UgYXQgYWRkcmVzcyAweCUwMnhcbiIsCiAJICAgIGRzMTc3NSA/ICJkczE3NzUiIDogImxtNzUiLCBhZGRyKTsKQEAgLTEzOSw5ICsxMzksMTEgQEAKIAlsbS0+aTJjLmRyaXZlciA9ICZ3Zl9sbTc1X2RyaXZlcjsKIAlzdHJuY3B5KGxtLT5pMmMubmFtZSwgbG0tPnNlbnMubmFtZSwgSTJDX05BTUVfU0laRS0xKTsKIAotCWlmIChpMmNfYXR0YWNoX2NsaWVudCgmbG0tPmkyYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ3aW5kZmFybTogZmFpbGVkIHRvIGF0dGFjaCAlcyAlcyB0byBpMmNcbiIsCi0JCSAgICAgICBkczE3NzUgPyAiZHMxNzc1IiA6ICJsbTc1IiwgbG0tPmkyYy5uYW1lKTsKKwlyYyA9IGkyY19hdHRhY2hfY2xpZW50KCZsbS0+aTJjKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ3aW5kZmFybTogZmFpbGVkIHRvIGF0dGFjaCAlcyAlcyB0byBpMmMsIgorCQkgICAgICAgIiBlcnIgJWRcbiIsIGRzMTc3NSA/ICJkczE3NzUiIDogImxtNzUiLAorCQkgICAgICAgbG0tPmkyYy5uYW1lLCByYyk7CiAJCWdvdG8gZmFpbDsKIAl9CiAKQEAgLTE3NSwxNiArMTc3LDIyIEBACiAJICAgICAoZGV2ID0gb2ZfZ2V0X25leHRfY2hpbGQoYnVzbm9kZSwgZGV2KSkgIT0gTlVMTDspIHsKIAkJY29uc3QgY2hhciAqbG9jID0KIAkJCWdldF9wcm9wZXJ0eShkZXYsICJod3NlbnNvci1sb2NhdGlvbiIsIE5VTEwpOwotCQl1MzIgKnJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkoZGV2LCAicmVnIiwgTlVMTCk7Ci0JCURCRygiIGRldjogJXMuLi4gKGxvYzogJXAsIHJlZzogJXApXG4iLCBkZXYtPm5hbWUsIGxvYywgcmVnKTsKLQkJaWYgKGxvYyA9PSBOVUxMIHx8IHJlZyA9PSBOVUxMKQorCQl1OCBhZGRyOworCisJCS8qIFdlIG11c3QgcmUtbWF0Y2ggdGhlIGFkYXB0ZXIgaW4gb3JkZXIgdG8gcHJvcGVybHkgY2hlY2sKKwkJICogdGhlIGNoYW5uZWwgb24gbXVsdGlidXMgc2V0dXBzCisJCSAqLworCQlpZiAoIXBtYWNfaTJjX21hdGNoX2FkYXB0ZXIoZGV2LCBhZGFwdGVyKSkKKwkJCWNvbnRpbnVlOworCQlhZGRyID0gcG1hY19pMmNfZ2V0X2Rldl9hZGRyKGRldik7CisJCWlmIChsb2MgPT0gTlVMTCB8fCBhZGRyID09IDApCiAJCQljb250aW51ZTsKIAkJLyogcmVhbCBsbTc1ICovCiAJCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJsbTc1IikpCi0JCQl3Zl9sbTc1X2NyZWF0ZShhZGFwdGVyLCAqcmVnLCAwLCBsb2MpOworCQkJd2ZfbG03NV9jcmVhdGUoYWRhcHRlciwgYWRkciwgMCwgbG9jKTsKIAkJLyogZHMxNzc1IChjb21wYXRpYmxlLCBiZXR0ZXIgcmVzb2x1dGlvbiAqLwogCQllbHNlIGlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJkczE3NzUiKSkKLQkJCXdmX2xtNzVfY3JlYXRlKGFkYXB0ZXIsICpyZWcsIDEsIGxvYyk7CisJCQl3Zl9sbTc1X2NyZWF0ZShhZGFwdGVyLCBhZGRyLCAxLCBsb2MpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIwNiw2ICsyMTQsMTEgQEAKIAogc3RhdGljIGludCBfX2luaXQgd2ZfbG03NV9zZW5zb3JfaW5pdCh2b2lkKQogeworCS8qIERvbid0IHJlZ2lzdGVyIG9uIG9sZCBtYWNoaW5lcyB0aGF0IHVzZSB0aGVybV9wbTcyIGZvciBub3cgKi8KKwlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMiIpIHx8CisJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSB8fAorCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlJhY2tNYWMzLDEiKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZ3Zl9sbTc1X2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCmluZGV4IDViOWFkNmNhLi5lYWUxMTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKQEAgLTExLDEzICsxMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3BtYWNfbG93X2kyYy5oPgogCiAjaW5jbHVkZSAid2luZGZhcm0uaCIKIAotI2RlZmluZSBWRVJTSU9OICIwLjEiCisjZGVmaW5lIFZFUlNJT04gIjAuMiIKIAogLyogVGhpcyBjdXJyZW50bHkgb25seSBleHBvcnRzIHRoZSBleHRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3IsCiAgICBzaW5jZSB0aGF0J3MgYWxsIHRoZSBjb250cm9sIGxvb3BzIG5lZWQuICovCkBAIC04MSw3ICs4MCw3IEBACiBzdGF0aWMgdm9pZCB3Zl9tYXg2NjkwX2NyZWF0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGFkZHIpCiB7CiAJc3RydWN0IHdmXzY2OTBfc2Vuc29yICptYXg7Ci0JY2hhciAqbmFtZSA9ICJ1NC10ZW1wIjsKKwljaGFyICpuYW1lID0gImJhY2tzaWRlLXRlbXAiOwogCiAJbWF4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdmXzY2OTBfc2Vuc29yKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1heCA9PSBOVUxMKSB7CkBAIC0xMTgsNyArMTE3LDYgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmJ1c25vZGUsICpkZXYgPSBOVUxMOwogCXN0cnVjdCBwbWFjX2kyY19idXMgKmJ1czsKIAljb25zdCBjaGFyICpsb2M7Ci0JdTMyICpyZWc7CiAKIAlidXMgPSBwbWFjX2kyY19hZGFwdGVyX3RvX2J1cyhhZGFwdGVyKTsKIAlpZiAoYnVzID09IE5VTEwpCkBAIC0xMjYsMTYgKzEyNCwyMyBAQAogCWJ1c25vZGUgPSBwbWFjX2kyY19nZXRfYnVzX25vZGUoYnVzKTsKIAogCXdoaWxlICgoZGV2ID0gb2ZfZ2V0X25leHRfY2hpbGQoYnVzbm9kZSwgZGV2KSkgIT0gTlVMTCkgeworCQl1OCBhZGRyOworCisJCS8qIFdlIG11c3QgcmUtbWF0Y2ggdGhlIGFkYXB0ZXIgaW4gb3JkZXIgdG8gcHJvcGVybHkgY2hlY2sKKwkJICogdGhlIGNoYW5uZWwgb24gbXVsdGlidXMgc2V0dXBzCisJCSAqLworCQlpZiAoIXBtYWNfaTJjX21hdGNoX2FkYXB0ZXIoZGV2LCBhZGFwdGVyKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoIWRldmljZV9pc19jb21wYXRpYmxlKGRldiwgIm1heDY2OTAiKSkKIAkJCWNvbnRpbnVlOworCQlhZGRyID0gcG1hY19pMmNfZ2V0X2Rldl9hZGRyKGRldik7CiAJCWxvYyA9IGdldF9wcm9wZXJ0eShkZXYsICJod3NlbnNvci1sb2NhdGlvbiIsIE5VTEwpOwotCQlyZWcgPSAodTMyICopIGdldF9wcm9wZXJ0eShkZXYsICJyZWciLCBOVUxMKTsKLQkJaWYgKCFsb2MgfHwgIXJlZykKKwkJaWYgKGxvYyA9PSBOVUxMIHx8IGFkZHIgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQlwcmludGsoImZvdW5kIG1heDY2OTAsIGxvYz0lcyByZWc9JXhcbiIsIGxvYywgKnJlZyk7CisJCXByaW50aygiZm91bmQgbWF4NjY5MCwgbG9jPSVzIGFkZHI9MHglMDJ4XG4iLCBsb2MsIGFkZHIpOwogCQlpZiAoc3RyY21wKGxvYywgIkJBQ0tTSURFIikpCiAJCQljb250aW51ZTsKLQkJd2ZfbWF4NjY5MF9jcmVhdGUoYWRhcHRlciwgKnJlZyk7CisJCXdmX21heDY2OTBfY3JlYXRlKGFkYXB0ZXIsIGFkZHIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTUzLDYgKzE1OCwxMSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB3Zl9tYXg2NjkwX3NlbnNvcl9pbml0KHZvaWQpCiB7CisJLyogRG9uJ3QgcmVnaXN0ZXIgb24gb2xkIG1hY2hpbmVzIHRoYXQgdXNlIHRoZXJtX3BtNzIgZm9yIG5vdyAqLworCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKKwkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpIHx8CisJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUmFja01hYzMsMSIpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJndmX21heDY2OTBfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcGlkLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9waWQuYwppbmRleCAwODQyNDMyLi5mMTBlZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9waWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9waWQuYwpAQCAtMTQzLDMgKzE0Myw3IEBACiAJcmV0dXJuIHN0LT50YXJnZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh3Zl9jcHVfcGlkX3J1bik7CisKK01PRFVMRV9BVVRIT1IoIkJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUElEIGFsZ29yaXRobSBmb3IgUG93ZXJNYWNzIHRoZXJtYWwgY29udHJvbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtMTEyLmMKaW5kZXggYzJhNGU2OC4uZWY2NmJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG0xMTIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTExMi5jCkBAIC0zNTgsNiArMzU4LDcgQEAKIAkJcmV0dXJuOwogCWlmICghYmFja3NpZGVfdGljaykgewogCQkvKiBmaXJzdCB0aW1lOyBpbml0aWFsaXplIHRoaW5ncyAqLworCQlwcmludGsoS0VSTl9JTkZPICJ3aW5kZmFybTogQmFja3NpZGUgY29udHJvbCBsb29wIHN0YXJ0ZWQuXG4iKTsKIAkJYmFja3NpZGVfcGFyYW0ubWluID0gYmFja3NpZGVfZmFuLT5vcHMtPmdldF9taW4oYmFja3NpZGVfZmFuKTsKIAkJYmFja3NpZGVfcGFyYW0ubWF4ID0gYmFja3NpZGVfZmFuLT5vcHMtPmdldF9tYXgoYmFja3NpZGVfZmFuKTsKIAkJd2ZfcGlkX2luaXQoJmJhY2tzaWRlX3BpZCwgJmJhY2tzaWRlX3BhcmFtKTsKQEAgLTQwNyw2ICs0MDgsNyBAQAogCQlyZXR1cm47CiAJaWYgKCFkcml2ZV9iYXlfdGljaykgewogCQkvKiBmaXJzdCB0aW1lOyBpbml0aWFsaXplIHRoaW5ncyAqLworCQlwcmludGsoS0VSTl9JTkZPICJ3aW5kZmFybTogRHJpdmUgYmF5IGNvbnRyb2wgbG9vcCBzdGFydGVkLlxuIik7CiAJCWRyaXZlX2JheV9wcm0ubWluID0gZHJpdmVfYmF5X2Zhbi0+b3BzLT5nZXRfbWluKGRyaXZlX2JheV9mYW4pOwogCQlkcml2ZV9iYXlfcHJtLm1heCA9IGRyaXZlX2JheV9mYW4tPm9wcy0+Z2V0X21heChkcml2ZV9iYXlfZmFuKTsKIAkJd2ZfcGlkX2luaXQoJmRyaXZlX2JheV9waWQsICZkcml2ZV9iYXlfcHJtKTsKQEAgLTQ1OCw2ICs0NjAsNyBAQAogCQlyZXR1cm47CiAJaWYgKCFzbG90c19zdGFydGVkKSB7CiAJCS8qIGZpcnN0IHRpbWU7IGluaXRpYWxpemUgdGhpbmdzICovCisJCXByaW50ayhLRVJOX0lORk8gIndpbmRmYXJtOiBTbG90cyBjb250cm9sIGxvb3Agc3RhcnRlZC5cbiIpOwogCQl3Zl9waWRfaW5pdCgmc2xvdHNfcGlkLCAmc2xvdHNfcGFyYW0pOwogCQlzbG90c19zdGFydGVkID0gMTsKIAl9CkBAIC01MDQsNiArNTA3LDcgQEAKIAogCWlmICghc3RhcnRlZCkgewogCQlzdGFydGVkID0gMTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2luZGZhcm06IENQVXMgY29udHJvbCBsb29wcyBzdGFydGVkLlxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9jb3JlczsgKytpKSB7CiAJCQlpZiAoY3JlYXRlX2NwdV9sb29wKGkpIDwgMCkgewogCQkJCWZhaWx1cmVfc3RhdGUgPSBGQUlMVVJFX1BFUk07CkBAIC01OTQsOCArNTk4LDYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmIChoYXZlX2FsbF9zZW5zb3JzKQotCQlyZXR1cm47CiAJaWYgKCFzdHJuY21wKHNyLT5uYW1lLCAiY3B1LXRlbXAtIiwgOSkpIHsKIAkJaSA9IHNyLT5uYW1lWzldIC0gJzAnOwogCQlpZiAoc3ItPm5hbWVbMTBdID09IDAgJiYgaSA8IE5SX0NPUkVTICYmCkBAIC02MTMsNyArNjE1LDcgQEAKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3ItPm5hbWUsICJzbG90cy1wb3dlciIpKSB7CiAJCWlmIChzbG90c19wb3dlciA9PSBOVUxMICYmIHdmX2dldF9zZW5zb3Ioc3IpID09IDApCiAJCQlzbG90c19wb3dlciA9IHNyOwotCX0gZWxzZSBpZiAoIXN0cmNtcChzci0+bmFtZSwgInU0LXRlbXAiKSkgeworCX0gZWxzZSBpZiAoIXN0cmNtcChzci0+bmFtZSwgImJhY2tzaWRlLXRlbXAiKSkgewogCQlpZiAodTRfdGVtcCA9PSBOVUxMICYmIHdmX2dldF9zZW5zb3Ioc3IpID09IDApCiAJCQl1NF90ZW1wID0gc3I7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKaW5kZXggMjRlNTFkNS4uZTI5NWEwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9zbXUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYml0bWFwLmMgYi9kcml2ZXJzL21kL2JpdG1hcC5jCmluZGV4IGVhZTQ0NzMuLmUxYzE4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvYml0bWFwLmMKKysrIGIvZHJpdmVycy9tZC9iaXRtYXAuYwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIWJpdG1hcCB8fCAhYml0bWFwLT5zYl9wYWdlKSB7IC8qIGNhbid0IHNldCB0aGUgc3RhdGUgKi8KKwlpZiAoIWJpdG1hcC0+c2JfcGFnZSkgeyAvKiBjYW4ndCBzZXQgdGhlIHN0YXRlICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQpAQCAtMTMwOSw3ICsxMzA5LDcgQEAKIAkJY2FzZSAxOgogCQkJKmJtYyA9IDI7CiAJCX0KLQkJaWYgKCgqYm1jICYgQ09VTlRFUl9NQVgpID09IENPVU5URVJfTUFYKSBCVUcoKTsKKwkJQlVHX09OKCgqYm1jICYgQ09VTlRFUl9NQVgpID09IENPVU5URVJfTUFYKTsKIAkJKCpibWMpKys7CiAKIAkJc3Bpbl91bmxvY2tfaXJxKCZiaXRtYXAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1ody1oYW5kbGVyLmMgYi9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuYwppbmRleCA0Y2MwMDEwLi5iYWFmYWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuYworKysgYi9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuYwpAQCAtODMsOCArODMsNyBAQAogCWlmICgtLWh3aGktPnVzZSA9PSAwKQogCQltb2R1bGVfcHV0KGh3aGktPmh3aHQubW9kdWxlKTsKIAotCWlmIChod2hpLT51c2UgPCAwKQotCQlCVUcoKTsKKwlCVUdfT04oaHdoaS0+dXNlIDwgMCk7CiAKICAgICAgIG91dDoKIAl1cF9yZWFkKCZfaHdoX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYyBiL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKaW5kZXggYWI4OTI3OC4uNjk3YWFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYworKysgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCkBAIC0xMDMsOSArMTAzLDE1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICgoKHVpbnQzMl90KXRpLT5sZW4pICYgKGNodW5rX3NpemUgLSAxKSkgeworCQl0aS0+ZXJyb3IgPSAiZG0tc3RyaXBlOiBUYXJnZXQgbGVuZ3RoIG5vdCBkaXZpc2libGUgYnkgIgorCQkgICAgImNodW5rIHNpemUiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAl3aWR0aCA9IHRpLT5sZW47CiAJaWYgKHNlY3Rvcl9kaXYod2lkdGgsIHN0cmlwZXMpKSB7Ci0JCXRpLT5lcnJvciA9ICJkbS1zdHJpcGU6IFRhcmdldCBsZW5ndGggbm90IGRpdmlzYWJsZSBieSAiCisJCXRpLT5lcnJvciA9ICJkbS1zdHJpcGU6IFRhcmdldCBsZW5ndGggbm90IGRpdmlzaWJsZSBieSAiCiAJCSAgICAibnVtYmVyIG9mIHN0cmlwZXMiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggZTlhZGViOS4uOGM4MjM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CiAKIHN0YXRpYyBjb25zdCBjaGFyICpfbmFtZSA9IERNX05BTUU7CiAKQEAgLTMzNCw2ICszMzUsOCBAQAogCQkJLyogbnVkZ2UgYW55b25lIHdhaXRpbmcgb24gc3VzcGVuZCBxdWV1ZSAqLwogCQkJd2FrZV91cCgmaW8tPm1kLT53YWl0KTsKIAorCQlibGtfYWRkX3RyYWNlX2Jpbyhpby0+bWQtPnF1ZXVlLCBpby0+YmlvLCBCTEtfVEFfQ09NUExFVEUpOworCiAJCWJpb19lbmRpbyhpby0+YmlvLCBpby0+YmlvLT5iaV9zaXplLCBpby0+ZXJyb3IpOwogCQlmcmVlX2lvKGlvLT5tZCwgaW8pOwogCX0KQEAgLTM5Miw2ICszOTUsNyBAQAogCQkgICAgICBzdHJ1Y3QgdGFyZ2V0X2lvICp0aW8pCiB7CiAJaW50IHI7CisJc2VjdG9yX3Qgc2VjdG9yOwogCiAJLyoKIAkgKiBTYW5pdHkgY2hlY2tzLgpAQCAtNDA3LDEwICs0MTEsMTcgQEAKIAkgKiB0aGlzIGlvLgogCSAqLwogCWF0b21pY19pbmMoJnRpby0+aW8tPmlvX2NvdW50KTsKKwlzZWN0b3IgPSBjbG9uZS0+Ymlfc2VjdG9yOwogCXIgPSB0aS0+dHlwZS0+bWFwKHRpLCBjbG9uZSwgJnRpby0+aW5mbyk7Ci0JaWYgKHIgPiAwKQorCWlmIChyID4gMCkgewogCQkvKiB0aGUgYmlvIGhhcyBiZWVuIHJlbWFwcGVkIHNvIGRpc3BhdGNoIGl0ICovCisKKwkJYmxrX2FkZF90cmFjZV9yZW1hcChiZGV2X2dldF9xdWV1ZShjbG9uZS0+YmlfYmRldiksIGNsb25lLCAKKwkJCQkgICAgdGlvLT5pby0+YmlvLT5iaV9iZGV2LT5iZF9kZXYsIHNlY3RvciwgCisJCQkJICAgIGNsb25lLT5iaV9zZWN0b3IpOworCiAJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGNsb25lKTsKKwl9CiAKIAllbHNlIGlmIChyIDwgMCkgewogCQkvKiBlcnJvciB0aGUgaW8gYW5kIGJhaWwgb3V0ICovCkBAIC01MzMsMzAgKzU0NCwzNSBAQAogCiAJfSBlbHNlIHsKIAkJLyoKLQkJICogQ3JlYXRlIHR3byBjb3B5IGJpb3MgdG8gZGVhbCB3aXRoIGlvIHRoYXQgaGFzCi0JCSAqIGJlZW4gc3BsaXQgYWNyb3NzIGEgdGFyZ2V0LgorCQkgKiBIYW5kbGUgYSBidmVjIHRoYXQgbXVzdCBiZSBzcGxpdCBiZXR3ZWVuIHR3byBvciBtb3JlIHRhcmdldHMuCiAJCSAqLwogCQlzdHJ1Y3QgYmlvX3ZlYyAqYnYgPSBiaW8tPmJpX2lvX3ZlYyArIGNpLT5pZHg7CisJCXNlY3Rvcl90IHJlbWFpbmluZyA9IHRvX3NlY3Rvcihidi0+YnZfbGVuKTsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CiAKLQkJY2xvbmUgPSBzcGxpdF9idmVjKGJpbywgY2ktPnNlY3RvciwgY2ktPmlkeCwKLQkJCQkgICBidi0+YnZfb2Zmc2V0LCBtYXgpOwotCQlfX21hcF9iaW8odGksIGNsb25lLCB0aW8pOworCQlkbyB7CisJCQlpZiAob2Zmc2V0KSB7CisJCQkJdGkgPSBkbV90YWJsZV9maW5kX3RhcmdldChjaS0+bWFwLCBjaS0+c2VjdG9yKTsKKwkJCQltYXggPSBtYXhfaW9fbGVuKGNpLT5tZCwgY2ktPnNlY3RvciwgdGkpOwogCi0JCWNpLT5zZWN0b3IgKz0gbWF4OwotCQljaS0+c2VjdG9yX2NvdW50IC09IG1heDsKLQkJdGkgPSBkbV90YWJsZV9maW5kX3RhcmdldChjaS0+bWFwLCBjaS0+c2VjdG9yKTsKKwkJCQl0aW8gPSBhbGxvY190aW8oY2ktPm1kKTsKKwkJCQl0aW8tPmlvID0gY2ktPmlvOworCQkJCXRpby0+dGkgPSB0aTsKKwkJCQltZW1zZXQoJnRpby0+aW5mbywgMCwgc2l6ZW9mKHRpby0+aW5mbykpOworCQkJfQogCi0JCWxlbiA9IHRvX3NlY3Rvcihidi0+YnZfbGVuKSAtIG1heDsKLQkJY2xvbmUgPSBzcGxpdF9idmVjKGJpbywgY2ktPnNlY3RvciwgY2ktPmlkeCwKLQkJCQkgICBidi0+YnZfb2Zmc2V0ICsgdG9fYnl0ZXMobWF4KSwgbGVuKTsKLQkJdGlvID0gYWxsb2NfdGlvKGNpLT5tZCk7Ci0JCXRpby0+aW8gPSBjaS0+aW87Ci0JCXRpby0+dGkgPSB0aTsKLQkJbWVtc2V0KCZ0aW8tPmluZm8sIDAsIHNpemVvZih0aW8tPmluZm8pKTsKLQkJX19tYXBfYmlvKHRpLCBjbG9uZSwgdGlvKTsKKwkJCWxlbiA9IG1pbihyZW1haW5pbmcsIG1heCk7CiAKLQkJY2ktPnNlY3RvciArPSBsZW47Ci0JCWNpLT5zZWN0b3JfY291bnQgLT0gbGVuOworCQkJY2xvbmUgPSBzcGxpdF9idmVjKGJpbywgY2ktPnNlY3RvciwgY2ktPmlkeCwKKwkJCQkJICAgYnYtPmJ2X29mZnNldCArIG9mZnNldCwgbGVuKTsKKworCQkJX19tYXBfYmlvKHRpLCBjbG9uZSwgdGlvKTsKKworCQkJY2ktPnNlY3RvciArPSBsZW47CisJCQljaS0+c2VjdG9yX2NvdW50IC09IGxlbjsKKwkJCW9mZnNldCArPSB0b19ieXRlcyhsZW4pOworCQl9IHdoaWxlIChyZW1haW5pbmcgLT0gbGVuKTsKKwogCQljaS0+aWR4Kys7CiAJfQogfQpAQCAtODQwLDcgKzg1Niw3IEBACiAgYmFkMzoKIAltZW1wb29sX2Rlc3Ryb3kobWQtPmlvX3Bvb2wpOwogIGJhZDI6Ci0JYmxrX3B1dF9xdWV1ZShtZC0+cXVldWUpOworCWJsa19jbGVhbnVwX3F1ZXVlKG1kLT5xdWV1ZSk7CiAJZnJlZV9taW5vcihtaW5vcik7CiAgYmFkMToKIAlrZnJlZShtZCk7CkBAIC04NDksMTIgKzg2NSwxOCBAQAogCiBzdGF0aWMgdm9pZCBmcmVlX2RldihzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7Ci0JZnJlZV9taW5vcihtZC0+ZGlzay0+Zmlyc3RfbWlub3IpOworCXVuc2lnbmVkIGludCBtaW5vciA9IG1kLT5kaXNrLT5maXJzdF9taW5vcjsKKworCWlmIChtZC0+c3VzcGVuZGVkX2JkZXYpIHsKKwkJdGhhd19iZGV2KG1kLT5zdXNwZW5kZWRfYmRldiwgTlVMTCk7CisJCWJkcHV0KG1kLT5zdXNwZW5kZWRfYmRldik7CisJfQogCW1lbXBvb2xfZGVzdHJveShtZC0+dGlvX3Bvb2wpOwogCW1lbXBvb2xfZGVzdHJveShtZC0+aW9fcG9vbCk7CiAJZGVsX2dlbmRpc2sobWQtPmRpc2spOworCWZyZWVfbWlub3IobWlub3IpOwogCXB1dF9kaXNrKG1kLT5kaXNrKTsKLQlibGtfcHV0X3F1ZXVlKG1kLT5xdWV1ZSk7CisJYmxrX2NsZWFudXBfcXVldWUobWQtPnF1ZXVlKTsKIAlrZnJlZShtZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBkMDVlMzEyLi41ZWQyMjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0yMTMsOCArMjEzLDExIEBACiAJCXJldHVybjsKIAlpZiAoIW1kZGV2LT5yYWlkX2Rpc2tzICYmIGxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpIHsKIAkJbGlzdF9kZWwoJm1kZGV2LT5hbGxfbWRkZXZzKTsKLQkJYmxrX3B1dF9xdWV1ZShtZGRldi0+cXVldWUpOworCQkvKiB0aGF0IGJsb2NrcyAqLworCQlibGtfY2xlYW51cF9xdWV1ZShtZGRldi0+cXVldWUpOworCQkvKiB0aGF0IGFsc28gYmxvY2tzICovCiAJCWtvYmplY3RfdW5yZWdpc3RlcigmbWRkZXYtPmtvYmopOworCQkvKiByZXN1bHQgYmxvd3MuLi4gKi8KIAl9CiAJc3Bpbl91bmxvY2soJmFsbF9tZGRldnNfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggZDM5ZjU4NC4uNWQ4ODMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtMzA2LDYgKzMwNiw3IEBACiAJcjFiaW9fdCAqIHIxX2JpbyA9IChyMWJpb190ICopKGJpby0+YmlfcHJpdmF0ZSk7CiAJaW50IG1pcnJvciwgYmVoaW5kID0gdGVzdF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKTsKIAljb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKHIxX2Jpby0+bWRkZXYpOworCXN0cnVjdCBiaW8gKnRvX3B1dCA9IE5VTEw7CiAKIAlpZiAoYmlvLT5iaV9zaXplKQogCQlyZXR1cm4gMTsKQEAgLTMyMyw2ICszMjQsNyBAQAogCQkgKiB0aGlzIGJyYW5jaCBpcyBvdXIgJ29uZSBtaXJyb3IgSU8gaGFzIGZpbmlzaGVkJyBldmVudCBoYW5kbGVyOgogCQkgKi8KIAkJcjFfYmlvLT5iaW9zW21pcnJvcl0gPSBOVUxMOworCQl0b19wdXQgPSBiaW87CiAJCWlmICghdXB0b2RhdGUpIHsKIAkJCW1kX2Vycm9yKHIxX2Jpby0+bWRkZXYsIGNvbmYtPm1pcnJvcnNbbWlycm9yXS5yZGV2KTsKIAkJCS8qIGFuIEkvTyBmYWlsZWQsIHdlIGNhbid0IGNsZWFyIHRoZSBiaXRtYXAgKi8KQEAgLTM3NSw3ICszNzcsNyBAQAogCQkJLyogRG9uJ3QgZGVjX3BlbmRpbmcgeWV0LCB3ZSB3YW50IHRvIGhvbGQKIAkJCSAqIHRoZSByZWZlcmVuY2Ugb3ZlciB0aGUgcmV0cnkKIAkJCSAqLwotCQkJcmV0dXJuIDA7CisJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAodGVzdF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKSkgewogCQkJLyogZnJlZSBleHRyYSBjb3B5IG9mIHRoZSBkYXRhIHBhZ2VzICovCkBAIC0zOTIsMTAgKzM5NCwxMSBAQAogCQlyYWlkX2VuZF9iaW9faW8ocjFfYmlvKTsKIAl9CiAKLQlpZiAocjFfYmlvLT5iaW9zW21pcnJvcl09PU5VTEwpCi0JCWJpb19wdXQoYmlvKTsKLQogCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXYsIGNvbmYtPm1kZGV2KTsKKyBvdXQ6CisJaWYgKHRvX3B1dCkKKwkJYmlvX3B1dCh0b19wdXQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1Nyw3ICs4NjAsNyBAQAogCWF0b21pY19zZXQoJnIxX2Jpby0+cmVtYWluaW5nLCAwKTsKIAlhdG9taWNfc2V0KCZyMV9iaW8tPmJlaGluZF9yZW1haW5pbmcsIDApOwogCi0JZG9fYmFycmllcnMgPSBiaW8tPmJpX3J3ICYgQklPX1JXX0JBUlJJRVI7CisJZG9fYmFycmllcnMgPSBiaW9fYmFycmllcihiaW8pOwogCWlmIChkb19iYXJyaWVycykKIAkJc2V0X2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwppbmRleCBjMjYwMmIzLi5iYWE5ZjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCkBAIC01MCw1ICs1MCwxOSBAQAogY29uZmlnIFZJREVPX1RWRUVQUk9NCiAJdHJpc3RhdGUKIAorY29uZmlnIFVTQl9EQUJVU0IKKyAgICAgICAgdHJpc3RhdGUgIkRBQlVTQiBkcml2ZXIiCisgICAgICAgIGRlcGVuZHMgb24gVVNCCisgICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBBIERpZ2l0YWwgQXVkaW8gQnJvYWRjYXN0aW5nIChEQUIpIFJlY2VpdmVyIGZvciBVU0IgYW5kIExpbnV4CisgICAgICAgICAgYnJvdWdodCB0byB5b3UgYnkgdGhlIERBQi1UZWFtCisgICAgICAgICAgPGh0dHA6Ly93d3dib2RlLmNzLnR1bS5lZHUvUGFyL2FyY2gvZGFiLz4uICBUaGlzIGRyaXZlciBjYW4gYmUgdGFrZW4KKyAgICAgICAgICBhcyBhbiBleGFtcGxlIGZvciBVUkItYmFzZWQgYnVsaywgY29udHJvbCwgYW5kIGlzb2Nocm9ub3VzCisgICAgICAgICAgdHJhbnNhY3Rpb25zLiBVUkIncyBhcmUgZXhwbGFpbmVkIGluCisgICAgICAgICAgPERvY3VtZW50YXRpb24vdXNiL1VSQi50eHQ+LgorCisgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisgICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRhYnVzYi4KKwogZW5kbWVudQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL01ha2VmaWxlCmluZGV4IGJkNDU4Y2IuLjYxYjg5NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL01ha2VmaWxlCkBAIC0xLDUgKzEsNiBAQAogc2FhNzE0Ni1vYmpzICAgIDo9IHNhYTcxNDZfaTJjLm8gc2FhNzE0Nl9jb3JlLm8KIHNhYTcxNDZfdnYtb2JqcyA6PSBzYWE3MTQ2X3Z2X2tzeW1zLm8gc2FhNzE0Nl9mb3BzLm8gc2FhNzE0Nl92aWRlby5vIHNhYTcxNDZfaGxwLm8gc2FhNzE0Nl92YmkubworaXItY29tbW9uLW9ianMgIDo9IGlyLWZ1bmN0aW9ucy5vIGlyLWtleW1hcHMubwogCiBvYmotJChDT05GSUdfVklERU9fU0FBNzE0NikgKz0gc2FhNzE0Ni5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzE0Nl9WVikgKz0gc2FhNzE0Nl92di5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWNvbW1vbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2ZhM2ZjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWNvbW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTE5ICswLDAgQEAKLS8qCi0gKgotICogc29tZSBjb21tb24gc3RydWN0cyBhbmQgZnVuY3Rpb25zIHRvIGhhbmRsZSBpbmZyYXJlZCByZW1vdGVzIHZpYQotICogaW5wdXQgbGF5ZXIgLi4uCi0gKgotICogKGMpIDIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1NT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBpbnQgcmVwZWF0ID0gMTsKLW1vZHVsZV9wYXJhbShyZXBlYXQsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlcGVhdCwiYXV0by1yZXBlYXQgZm9yIElSIGtleXMgKGRlZmF1bHQ6IG9uKSIpOwotCi1zdGF0aWMgaW50IGRlYnVnID0gMDsgICAgLyogZGVidWcgbGV2ZWwgKDAsMSwyKSAqLwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotCi0jZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKQlpZiAoZGVidWcgPj0gbGV2ZWwpIFwKLQlwcmludGsoS0VSTl9ERUJVRyBmbXQgLCAjIyBhcmcpCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIGdlbmVyaWMgUkM1IGtleXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIHNlZSBodHRwOi8vdXNlcnMucGFuZG9yYS5iZS9uZW55YS9lbGVjdHJvbmljcy9yYzUvY29kZXMwMC5odG0gKi8KLS8qIHVzZWQgYnkgb2xkIChibGFjaykgSGF1cHBhdWdlIHJlbW90ZXMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3JjNV90dltJUl9LRVlUQUJfU0laRV0gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQlbIDB4MDAgXSA9IEtFWV9LUDAsCi0JWyAweDAxIF0gPSBLRVlfS1AxLAotCVsgMHgwMiBdID0gS0VZX0tQMiwKLQlbIDB4MDMgXSA9IEtFWV9LUDMsCi0JWyAweDA0IF0gPSBLRVlfS1A0LAotCVsgMHgwNSBdID0gS0VZX0tQNSwKLQlbIDB4MDYgXSA9IEtFWV9LUDYsCi0JWyAweDA3IF0gPSBLRVlfS1A3LAotCVsgMHgwOCBdID0gS0VZX0tQOCwKLQlbIDB4MDkgXSA9IEtFWV9LUDksCi0KLQlbIDB4MGIgXSA9IEtFWV9DSEFOTkVMLAkJLyogY2hhbm5lbCAvIHByb2dyYW0gKGphcGFuOiAxMSkgKi8KLQlbIDB4MGMgXSA9IEtFWV9QT1dFUiwJCS8qIHN0YW5kYnkgKi8KLQlbIDB4MGQgXSA9IEtFWV9NVVRFLAkJLyogbXV0ZSAvIGRlbXV0ZSAqLwotCVsgMHgwZiBdID0gS0VZX1RWLAkJLyogZGlzcGxheSAqLwotCVsgMHgxMCBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgxMSBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDEyIF0gPSBLRVlfQlJJR0hUTkVTU1VQLAotCVsgMHgxMyBdID0gS0VZX0JSSUdIVE5FU1NET1dOLAotCVsgMHgxZSBdID0gS0VZX1NFQVJDSCwJCS8qIHNlYXJjaCArICovCi0JWyAweDIwIF0gPSBLRVlfQ0hBTk5FTFVQLAkvKiBjaGFubmVsIC8gcHJvZ3JhbSArICovCi0JWyAweDIxIF0gPSBLRVlfQ0hBTk5FTERPV04sCS8qIGNoYW5uZWwgLyBwcm9ncmFtIC0gKi8KLQlbIDB4MjIgXSA9IEtFWV9DSEFOTkVMLAkJLyogYWx0IC8gY2hhbm5lbCAqLwotCVsgMHgyMyBdID0gS0VZX0xBTkdVQUdFLAkvKiAxc3QgLyAybmQgbGFuZ3VhZ2UgKi8KLQlbIDB4MjYgXSA9IEtFWV9TTEVFUCwJCS8qIHNsZWVwdGltZXIgKi8KLQlbIDB4MmUgXSA9IEtFWV9NRU5VLAkJLyogMm5kIGNvbnRyb2xzIChVU0E6IG1lbnUpICovCi0JWyAweDMwIF0gPSBLRVlfUEFVU0UsCi0JWyAweDMyIF0gPSBLRVlfUkVXSU5ELAotCVsgMHgzMyBdID0gS0VZX0dPVE8sCi0JWyAweDM1IF0gPSBLRVlfUExBWSwKLQlbIDB4MzYgXSA9IEtFWV9TVE9QLAotCVsgMHgzNyBdID0gS0VZX1JFQ09SRCwJCS8qIHJlY29yZGluZyAqLwotCVsgMHgzYyBdID0gS0VZX1RFWFQsICAgIAkvKiB0ZWxldGV4dCBzdWJtb2RlIChKYXBhbjogMTIpICovCi0JWyAweDNkIF0gPSBLRVlfU1VTUEVORCwJCS8qIHN5c3RlbSBzdGFuZGJ5ICovCi0KLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19yYzVfdHYpOwotCi0vKiBUYWJsZSBmb3IgTGVhZHRlayBXaW5mYXN0IFJlbW90ZSBDb250cm9scyAtIHVzZWQgYnkgYm90aCBidHR2IGFuZCBjeDg4ICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc193aW5mYXN0W0lSX0tFWVRBQl9TSVpFXSA9IHsKLQkvKiBLZXlzIDAgdG8gOSAqLwotCVsgMTggXSA9IEtFWV9LUDAsCi0JWyAgNSBdID0gS0VZX0tQMSwKLQlbICA2IF0gPSBLRVlfS1AyLAotCVsgIDcgXSA9IEtFWV9LUDMsCi0JWyAgOSBdID0gS0VZX0tQNCwKLQlbIDEwIF0gPSBLRVlfS1A1LAotCVsgMTEgXSA9IEtFWV9LUDYsCi0JWyAxMyBdID0gS0VZX0tQNywKLQlbIDE0IF0gPSBLRVlfS1A4LAotCVsgMTUgXSA9IEtFWV9LUDksCi0KLQlbICAwIF0gPSBLRVlfUE9XRVIsCi0JWyAgMiBdID0gS0VZX1RVTkVSLAkJLyogVFYvRk0gKi8KLQlbIDMwIF0gPSBLRVlfVklERU8sCi0JWyAgNCBdID0gS0VZX1ZPTFVNRVVQLAotCVsgIDggXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMTIgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAxNiBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgIDMgXSA9IEtFWV9aT09NLAkJLyogZnVsbHNjcmVlbiAqLwotCVsgMzEgXSA9IEtFWV9TVUJUSVRMRSwJCS8qIGNsb3NlZCBjYXB0aW9uL3RlbGV0ZXh0ICovCi0JWyAzMiBdID0gS0VZX1NMRUVQLAotCVsgMjAgXSA9IEtFWV9NVVRFLAotCVsgNDMgXSA9IEtFWV9SRUQsCi0JWyA0NCBdID0gS0VZX0dSRUVOLAotCVsgNDUgXSA9IEtFWV9ZRUxMT1csCi0JWyA0NiBdID0gS0VZX0JMVUUsCi0JWyAyNCBdID0gS0VZX0tQUExVUywJCS8qIGZpbmUgdHVuZSArICovCi0JWyAyNSBdID0gS0VZX0tQTUlOVVMsCQkvKiBmaW5lIHR1bmUgLSAqLwotCVsgMzMgXSA9IEtFWV9LUERPVCwKLQlbIDE5IF0gPSBLRVlfS1BFTlRFUiwKLQlbIDM0IF0gPSBLRVlfQkFDSywKLQlbIDM1IF0gPSBLRVlfUExBWVBBVVNFLAotCVsgMzYgXSA9IEtFWV9ORVhULAotCVsgMzggXSA9IEtFWV9TVE9QLAotCVsgMzkgXSA9IEtFWV9SRUNPUkQKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc193aW5mYXN0KTsKLQotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGlubmFjbGVbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHg1OSBdID0gS0VZX01VVEUsCi0JWyAweDRhIF0gPSBLRVlfUE9XRVIsCi0KLQlbIDB4MTggXSA9IEtFWV9URVhULAotCVsgMHgyNiBdID0gS0VZX1RWLAotCVsgMHgzZCBdID0gS0VZX1BSSU5ULAotCi0JWyAweDQ4IF0gPSBLRVlfUkVELAotCVsgMHgwNCBdID0gS0VZX0dSRUVOLAotCVsgMHgxMSBdID0gS0VZX1lFTExPVywKLQlbIDB4MDAgXSA9IEtFWV9CTFVFLAotCi0JWyAweDJkIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDFlIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQotCVsgMHg0OSBdID0gS0VZX01FTlUsCi0KLQlbIDB4MTYgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDE3IF0gPSBLRVlfQ0hBTk5FTERPV04sCi0KLQlbIDB4MjAgXSA9IEtFWV9VUCwKLQlbIDB4MjEgXSA9IEtFWV9ET1dOLAotCVsgMHgyMiBdID0gS0VZX0xFRlQsCi0JWyAweDIzIF0gPSBLRVlfUklHSFQsCi0JWyAweDBkIF0gPSBLRVlfU0VMRUNULAotCi0KLQotCVsgMHgwOCBdID0gS0VZX0JBQ0ssCi0JWyAweDA3IF0gPSBLRVlfUkVGUkVTSCwKLQotCVsgMHgyZiBdID0gS0VZX1pPT00sCi0JWyAweDI5IF0gPSBLRVlfUkVDT1JELAotCi0JWyAweDRiIF0gPSBLRVlfUEFVU0UsCi0JWyAweDRkIF0gPSBLRVlfUkVXSU5ELAotCVsgMHgyZSBdID0gS0VZX1BMQVksCi0JWyAweDRlIF0gPSBLRVlfRk9SV0FSRCwKLQlbIDB4NTMgXSA9IEtFWV9QUkVWSU9VUywKLQlbIDB4NGMgXSA9IEtFWV9TVE9QLAotCVsgMHg1NCBdID0gS0VZX05FWFQsCi0KLQlbIDB4NjkgXSA9IEtFWV9LUDAsCi0JWyAweDZhIF0gPSBLRVlfS1AxLAotCVsgMHg2YiBdID0gS0VZX0tQMiwKLQlbIDB4NmMgXSA9IEtFWV9LUDMsCi0JWyAweDZkIF0gPSBLRVlfS1A0LAotCVsgMHg2ZSBdID0gS0VZX0tQNSwKLQlbIDB4NmYgXSA9IEtFWV9LUDYsCi0JWyAweDcwIF0gPSBLRVlfS1A3LAotCVsgMHg3MSBdID0gS0VZX0tQOCwKLQlbIDB4NzIgXSA9IEtFWV9LUDksCi0KLQlbIDB4NzQgXSA9IEtFWV9DSEFOTkVMLAotCVsgMHgwYSBdID0gS0VZX0JBQ0tTUEFDRSwKLX07Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3Bpbm5hY2xlKTsKLQotLyogZW1wdHkga2V5dGFibGUsIGNhbiBiZSB1c2VkIGFzIHBsYWNlaG9sZGVyIGZvciBub3QteWV0IGNyZWF0ZWQga2V5dGFibGVzICovCi1JUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbXB0eVtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyA0MiBdID0gS0VZX0NPRkZFRSwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19lbXB0eSk7Ci0KLS8qIEhhdXBwYXVnZTogdGhlIG5ld2VyLCBncmF5IHJlbW90ZXMgKHNlZW1zIHRoZXJlIGFyZSBtdWx0aXBsZQotICogc2xpZ2h0bHkgZGlmZmVyZW50IHZlcnNpb25zKSwgc2hpcHBlZCB3aXRoIGN4ODgraXZ0diBjYXJkcy4KLSAqIGFsbW9zdCByYzUgY29kaW5nLCBidXQgc29tZSBub24tc3RhbmRhcmQga2V5cyAqLwotSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfaGF1cHBhdWdlX25ld1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQlbIDB4MDAgXSA9IEtFWV9LUDAsCi0JWyAweDAxIF0gPSBLRVlfS1AxLAotCVsgMHgwMiBdID0gS0VZX0tQMiwKLQlbIDB4MDMgXSA9IEtFWV9LUDMsCi0JWyAweDA0IF0gPSBLRVlfS1A0LAotCVsgMHgwNSBdID0gS0VZX0tQNSwKLQlbIDB4MDYgXSA9IEtFWV9LUDYsCi0JWyAweDA3IF0gPSBLRVlfS1A3LAotCVsgMHgwOCBdID0gS0VZX0tQOCwKLQlbIDB4MDkgXSA9IEtFWV9LUDksCi0KLQlbIDB4MGEgXSA9IEtFWV9URVhULCAgICAgIAkvKiBrZXlwYWQgYXN0ZXJpc2sgYXMgd2VsbCAqLwotCVsgMHgwYiBdID0gS0VZX1JFRCwJCS8qIHJlZCBidXR0b24gKi8KLQlbIDB4MGMgXSA9IEtFWV9SQURJTywKLQlbIDB4MGQgXSA9IEtFWV9NRU5VLAotCVsgMHgwZSBdID0gS0VZX1NVQlRJVExFLAkvKiBhbHNvIHRoZSAjIGtleSAqLwotCVsgMHgwZiBdID0gS0VZX01VVEUsCi0JWyAweDEwIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDExIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTIgXSA9IEtFWV9QUkVWSU9VUywJLyogcHJldmlvdXMgY2hhbm5lbCAqLwotCVsgMHgxNCBdID0gS0VZX1VQLAotCVsgMHgxNSBdID0gS0VZX0RPV04sCi0JWyAweDE2IF0gPSBLRVlfTEVGVCwKLQlbIDB4MTcgXSA9IEtFWV9SSUdIVCwKLQlbIDB4MTggXSA9IEtFWV9WSURFTywJCS8qIFZpZGVvcyAqLwotCVsgMHgxOSBdID0gS0VZX0FVRElPLAkJLyogTXVzaWMgKi8KLQkvKiAweDFhOiBQaWN0dXJlcyAtIHByZXN1bWUgdGhpcyBtZWFucwotCSAgICJNdWx0aW1lZGlhIEhvbWUgUGxhdGZvcm0iIC0KLQkgICBubyAiUElDVFVSRVMiIGtleSBpbiBpbnB1dC5oCi0JICovCi0JWyAweDFhIF0gPSBLRVlfTUhQLAotCi0JWyAweDFiIF0gPSBLRVlfRVBHLAkJLyogR3VpZGUgKi8KLQlbIDB4MWMgXSA9IEtFWV9UViwKLQlbIDB4MWUgXSA9IEtFWV9ORVhUU09ORywJLyogc2tpcCA+fCAqLwotCVsgMHgxZiBdID0gS0VZX0VYSVQsCQkvKiBiYWNrL2V4aXQgKi8KLQlbIDB4MjAgXSA9IEtFWV9DSEFOTkVMVVAsCS8qIGNoYW5uZWwgLyBwcm9ncmFtICsgKi8KLQlbIDB4MjEgXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogY2hhbm5lbCAvIHByb2dyYW0gLSAqLwotCVsgMHgyMiBdID0gS0VZX0NIQU5ORUwsCQkvKiBzb3VyY2UgKG9sZCBibGFjayByZW1vdGUpICovCi0JWyAweDI0IF0gPSBLRVlfUFJFVklPVVNTT05HLAkvKiByZXBsYXkgfDwgKi8KLQlbIDB4MjUgXSA9IEtFWV9FTlRFUiwJCS8qIE9LICovCi0JWyAweDI2IF0gPSBLRVlfU0xFRVAsCQkvKiBtaW5pbWl6ZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KLQlbIDB4MjkgXSA9IEtFWV9CTFVFLAkJLyogYmx1ZSBrZXkgKi8KLQlbIDB4MmUgXSA9IEtFWV9HUkVFTiwJCS8qIGdyZWVuIGJ1dHRvbiAqLwotCVsgMHgzMCBdID0gS0VZX1BBVVNFLAkJLyogcGF1c2UgKi8KLQlbIDB4MzIgXSA9IEtFWV9SRVdJTkQsCQkvKiBiYWNrd2FyZCA8PCAqLwotCVsgMHgzNCBdID0gS0VZX0ZBU1RGT1JXQVJELAkvKiBmb3J3YXJkID4+ICovCi0JWyAweDM1IF0gPSBLRVlfUExBWSwKLQlbIDB4MzYgXSA9IEtFWV9TVE9QLAotCVsgMHgzNyBdID0gS0VZX1JFQ09SRCwJCS8qIHJlY29yZGluZyAqLwotCVsgMHgzOCBdID0gS0VZX1lFTExPVywJCS8qIHllbGxvdyBrZXkgKi8KLQlbIDB4M2IgXSA9IEtFWV9TRUxFQ1QsCQkvKiB0b3AgcmlnaHQgYnV0dG9uICovCi0JWyAweDNjIF0gPSBLRVlfWk9PTSwJCS8qIGZ1bGwgKi8KLQlbIDB4M2QgXSA9IEtFWV9QT1dFUiwJCS8qIHN5c3RlbSBwb3dlciAoZ3JlZW4gYnV0dG9uKSAqLwotfTsKLUVYUE9SVF9TWU1CT0woaXJfY29kZXNfaGF1cHBhdWdlX25ldyk7Ci0KLUlSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAgMiBdID0gS0VZX0tQMCwKLQlbICAxIF0gPSBLRVlfS1AxLAotCVsgMTEgXSA9IEtFWV9LUDIsCi0JWyAyNyBdID0gS0VZX0tQMywKLQlbICA1IF0gPSBLRVlfS1A0LAotCVsgIDkgXSA9IEtFWV9LUDUsCi0JWyAyMSBdID0gS0VZX0tQNiwKLQlbICA2IF0gPSBLRVlfS1A3LAotCVsgMTAgXSA9IEtFWV9LUDgsCi0JWyAxOCBdID0gS0VZX0tQOSwKLQotCVsgIDMgXSA9IEtFWV9UVU5FUiwJCS8qIFRWL0ZNICovCi0JWyAgNyBdID0gS0VZX1NFQVJDSCwJCS8qIHNjYW4gKi8KLQlbIDI4IF0gPSBLRVlfWk9PTSwJCS8qIGZ1bGwgc2NyZWVuICovCi0JWyAzMCBdID0gS0VZX1BPV0VSLAotCVsgMjMgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMzEgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDIwIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAyMiBdID0gS0VZX0NIQU5ORUxVUCwKLQlbIDI0IF0gPSBLRVlfTVVURSwKLQotCVsgIDAgXSA9IEtFWV9MSVNULAkJLyogc291cmNlICovCi0JWyAxOSBdID0gS0VZX0lORk8sCQkvKiBsb29wICovCi0JWyAxNiBdID0gS0VZX0xBU1QsCQkvKiArMTAwICovCi0JWyAxMyBdID0gS0VZX0NMRUFSLAkJLyogcmVzZXQgKi8KLQlbIDEyIF0gPSBCVE5fUklHSFQsCQkvKiBmdW4rKyAqLwotCVsgIDQgXSA9IEJUTl9MRUZULAkJLyogZnVuLS0gKi8KLQlbIDE0IF0gPSBLRVlfR09UTywJCS8qIGZ1bmN0aW9uICovCi0JWyAxNSBdID0gS0VZX1NUT1AsCQkvKiBmcmVlemUgKi8KLX07Ci1FWFBPUlRfU1lNQk9MKGlyX2NvZGVzX3BpeGVsdmlldyk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIGlyX2lucHV0X2tleV9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIpCi17Ci0JaWYgKEtFWV9SRVNFUlZFRCA9PSBpci0+a2V5Y29kZSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBrZXk6IGtleT0weCUwMnggcmF3PTB4JTAyeCBkb3duPSVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLGlyLT5pcl9rZXksaXItPmlyX3Jhdyxpci0+a2V5cHJlc3NlZCk7Ci0JCXJldHVybjsKLQl9Ci0JZHByaW50aygxLCIlczoga2V5IGV2ZW50IGNvZGU9JWQgZG93bj0lZFxuIiwKLQkJZGV2LT5uYW1lLGlyLT5rZXljb2RlLGlyLT5rZXlwcmVzc2VkKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGRldixpci0+a2V5Y29kZSxpci0+a2V5cHJlc3NlZCk7Ci0JaW5wdXRfc3luYyhkZXYpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi12b2lkIGlyX2lucHV0X2luaXQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyLAotCQkgICBpbnQgaXJfdHlwZSwgSVJfS0VZVEFCX1RZUEUgKmlyX2NvZGVzKQotewotCWludCBpOwotCi0JaXItPmlyX3R5cGUgPSBpcl90eXBlOwotCWlmIChpcl9jb2RlcykKLQkJbWVtY3B5KGlyLT5pcl9jb2RlcywgaXJfY29kZXMsIHNpemVvZihpci0+aXJfY29kZXMpKTsKLQotCi0JZGV2LT5rZXljb2RlICAgICA9IGlyLT5pcl9jb2RlczsKLQlkZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKElSX0tFWVRBQl9UWVBFKTsKLQlkZXYtPmtleWNvZGVtYXggID0gSVJfS0VZVEFCX1NJWkU7Ci0JZm9yIChpID0gMDsgaSA8IElSX0tFWVRBQl9TSVpFOyBpKyspCi0JCXNldF9iaXQoaXItPmlyX2NvZGVzW2ldLCBkZXYtPmtleWJpdCk7Ci0JY2xlYXJfYml0KDAsIGRldi0+a2V5Yml0KTsKLQotCXNldF9iaXQoRVZfS0VZLCBkZXYtPmV2Yml0KTsKLQlpZiAocmVwZWF0KQotCQlzZXRfYml0KEVWX1JFUCwgZGV2LT5ldmJpdCk7Ci19Ci0KLXZvaWQgaXJfaW5wdXRfbm9rZXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyKQotewotCWlmIChpci0+a2V5cHJlc3NlZCkgewotCQlpci0+a2V5cHJlc3NlZCA9IDA7Ci0JCWlyX2lucHV0X2tleV9ldmVudChkZXYsaXIpOwotCX0KLX0KLQotdm9pZCBpcl9pbnB1dF9rZXlkb3duKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKLQkJICAgICAgdTMyIGlyX2tleSwgdTMyIGlyX3JhdykKLXsKLQl1MzIga2V5Y29kZSA9IElSX0tFWUNPREUoaXItPmlyX2NvZGVzLCBpcl9rZXkpOwotCi0JaWYgKGlyLT5rZXlwcmVzc2VkICYmIGlyLT5rZXljb2RlICE9IGtleWNvZGUpIHsKLQkJaXItPmtleXByZXNzZWQgPSAwOwotCQlpcl9pbnB1dF9rZXlfZXZlbnQoZGV2LGlyKTsKLQl9Ci0JaWYgKCFpci0+a2V5cHJlc3NlZCkgewotCQlpci0+aXJfa2V5ICA9IGlyX2tleTsKLQkJaXItPmlyX3JhdyAgPSBpcl9yYXc7Ci0JCWlyLT5rZXljb2RlID0ga2V5Y29kZTsKLQkJaXItPmtleXByZXNzZWQgPSAxOwotCQlpcl9pbnB1dF9rZXlfZXZlbnQoZGV2LGlyKTsKLQl9Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXUzMiBpcl9leHRyYWN0X2JpdHModTMyIGRhdGEsIHUzMiBtYXNrKQotewotCWludCBtYml0LCB2Yml0OwotCXUzMiB2YWx1ZTsKLQotCXZhbHVlID0gMDsKLQl2Yml0ICA9IDA7Ci0JZm9yIChtYml0ID0gMDsgbWJpdCA8IDMyOyBtYml0KyspIHsKLQkJaWYgKCEobWFzayAmICgodTMyKTEgPDwgbWJpdCkpKQotCQkJY29udGludWU7Ci0JCWlmIChkYXRhICYgKCh1MzIpMSA8PCBtYml0KSkKLQkJCXZhbHVlIHw9ICgxIDw8IHZiaXQpOwotCQl2Yml0Kys7Ci0JfQotCXJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIGludCBpbmxpbmUgZ2V0Yml0KHUzMiAqc2FtcGxlcywgaW50IGJpdCkKLXsKLQlyZXR1cm4gKHNhbXBsZXNbYml0LzMyXSAmICgxIDw8ICgzMS0oYml0JTMyKSkpKSA/IDEgOiAwOwotfQotCi0vKiBzdW1wIHJhdyBzYW1wbGVzIGZvciB2aXN1YWwgZGVidWdnaW5nIDspICovCi1pbnQgaXJfZHVtcF9zYW1wbGVzKHUzMiAqc2FtcGxlcywgaW50IGNvdW50KQotewotCWludCBpLCBiaXQsIHN0YXJ0OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgImlyIHNhbXBsZXM6ICIpOwotCXN0YXJ0ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQgKiAzMjsgaSsrKSB7Ci0JCWJpdCA9IGdldGJpdChzYW1wbGVzLGkpOwotCQlpZiAoYml0KQotCQkJc3RhcnQgPSAxOwotCQlpZiAoMCA9PSBzdGFydCkKLQkJCWNvbnRpbnVlOwotCQlwcmludGsoIiVzIiwgYml0ID8gIiMiIDogIl8iKTsKLQl9Ci0JcHJpbnRrKCJcbiIpOwotCXJldHVybiAwOwotfQotCi0vKiBkZWNvZGUgcmF3IHNhbXBsZXMsIHB1bHNlIGRpc3RhbmNlIGNvZGluZyB1c2VkIGJ5IE5FQyByZW1vdGVzICovCi1pbnQgaXJfZGVjb2RlX3B1bHNlZGlzdGFuY2UodTMyICpzYW1wbGVzLCBpbnQgY291bnQsIGludCBsb3csIGludCBoaWdoKQotewotCWludCBpLGxhc3QsYml0LGxlbjsKLQl1MzIgY3VyQml0OwotCXUzMiB2YWx1ZTsKLQotCS8qIGZpbmQgc3RhcnQgYnVyc3QgKi8KLQlmb3IgKGkgPSBsZW4gPSAwOyBpIDwgY291bnQgKiAzMjsgaSsrKSB7Ci0JCWJpdCA9IGdldGJpdChzYW1wbGVzLGkpOwotCQlpZiAoYml0KSB7Ci0JCQlsZW4rKzsKLQkJfSBlbHNlIHsKLQkJCWlmIChsZW4gPj0gMjkpCi0JCQkJYnJlYWs7Ci0JCQlsZW4gPSAwOwotCQl9Ci0JfQotCi0JLyogc3RhcnQgYnVyc3QgdG8gc2hvcnQgKi8KLQlpZiAobGVuIDwgMjkpCi0JCXJldHVybiAweGZmZmZmZmZmOwotCi0JLyogZmluZCBzdGFydCBzaWxlbmNlICovCi0JZm9yIChsZW4gPSAwOyBpIDwgY291bnQgKiAzMjsgaSsrKSB7Ci0JCWJpdCA9IGdldGJpdChzYW1wbGVzLGkpOwotCQlpZiAoYml0KSB7Ci0JCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCWxlbisrOwotCQl9Ci0JfQotCi0JLyogc2lsZW5jZSB0byBzaG9ydCAqLwotCWlmIChsZW4gPCA3KQotCQlyZXR1cm4gMHhmZmZmZmZmZjsKLQotCS8qIGdvIGRlY29kaW5nICovCi0JbGVuICAgPSAwOwotCWxhc3QgPSAxOwotCXZhbHVlID0gMDsgY3VyQml0ID0gMTsKLQlmb3IgKDsgaSA8IGNvdW50ICogMzI7IGkrKykgewotCQliaXQgID0gZ2V0Yml0KHNhbXBsZXMsaSk7Ci0JCWlmIChsYXN0KSB7Ci0JCQlpZihiaXQpIHsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJbGVuID0gMTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChiaXQpIHsKLQkJCQlpZiAobGVuID4gKGxvdyArIGhpZ2gpIC8yKQotCQkJCQl2YWx1ZSB8PSBjdXJCaXQ7Ci0JCQkJY3VyQml0IDw8PSAxOwotCQkJCWlmIChjdXJCaXQgPT0gMSkKLQkJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWxlbisrOwotCQkJfQotCQl9Ci0JCWxhc3QgPSBiaXQ7Ci0JfQotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0vKiBkZWNvZGUgcmF3IHNhbXBsZXMsIGJpcGhhc2UgY29kaW5nLCB1c2VkIGJ5IHJjNSBmb3IgZXhhbXBsZSAqLwotaW50IGlyX2RlY29kZV9iaXBoYXNlKHUzMiAqc2FtcGxlcywgaW50IGNvdW50LCBpbnQgbG93LCBpbnQgaGlnaCkKLXsKLQlpbnQgaSxsYXN0LGJpdCxsZW4sZmxpcHM7Ci0JdTMyIHZhbHVlOwotCi0JLyogZmluZCBzdGFydCBiaXQgKDEpICovCi0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJYml0ID0gZ2V0Yml0KHNhbXBsZXMsaSk7Ci0JCWlmIChiaXQpCi0JCQlicmVhazsKLQl9Ci0KLQkvKiBnbyBkZWNvZGluZyAqLwotCWxlbiAgID0gMDsKLQlmbGlwcyA9IDA7Ci0JdmFsdWUgPSAxOwotCWZvciAoOyBpIDwgY291bnQgKiAzMjsgaSsrKSB7Ci0JCWlmIChsZW4gPiBoaWdoKQotCQkJYnJlYWs7Ci0JCWlmIChmbGlwcyA+IDEpCi0JCQlicmVhazsKLQkJbGFzdCA9IGJpdDsKLQkJYml0ICA9IGdldGJpdChzYW1wbGVzLGkpOwotCQlpZiAobGFzdCA9PSBiaXQpIHsKLQkJCWxlbisrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGxlbiA8IGxvdykgewotCQkJbGVuKys7Ci0JCQlmbGlwcysrOwotCQkJY29udGludWU7Ci0JCX0KLQkJdmFsdWUgPDw9IDE7Ci0JCXZhbHVlIHw9IGJpdDsKLQkJZmxpcHMgPSAwOwotCQlsZW4gICA9IDE7Ci0JfQotCXJldHVybiB2YWx1ZTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfaW5pdCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9ub2tleSk7Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9pbnB1dF9rZXlkb3duKTsKLQotRVhQT1JUX1NZTUJPTF9HUEwoaXJfZXh0cmFjdF9iaXRzKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlyX2R1bXBfc2FtcGxlcyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9kZWNvZGVfYmlwaGFzZSk7Ci1FWFBPUlRfU1lNQk9MX0dQTChpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZSk7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXItZnVuY3Rpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3Y2ZmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWZ1bmN0aW9ucy5jCkBAIC0wLDAgKzEsMjcyIEBACisvKgorICoKKyAqIHNvbWUgY29tbW9uIHN0cnVjdHMgYW5kIGZ1bmN0aW9ucyB0byBoYW5kbGUgaW5mcmFyZWQgcmVtb3RlcyB2aWEKKyAqIGlucHV0IGxheWVyIC4uLgorICoKKyAqIChjKSAyMDAzIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IHJlcGVhdCA9IDE7Cittb2R1bGVfcGFyYW0ocmVwZWF0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhyZXBlYXQsImF1dG8tcmVwZWF0IGZvciBJUiBrZXlzIChkZWZhdWx0OiBvbikiKTsKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7ICAgIC8qIGRlYnVnIGxldmVsICgwLDEsMikgKi8KK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKKworI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikJaWYgKGRlYnVnID49IGxldmVsKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgZm10ICwgIyMgYXJnKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCBpcl9pbnB1dF9rZXlfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUgKmlyKQoreworCWlmIChLRVlfUkVTRVJWRUQgPT0gaXItPmtleWNvZGUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVua25vd24ga2V5OiBrZXk9MHglMDJ4IHJhdz0weCUwMnggZG93bj0lZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSxpci0+aXJfa2V5LGlyLT5pcl9yYXcsaXItPmtleXByZXNzZWQpOworCQlyZXR1cm47CisJfQorCWRwcmludGsoMSwiJXM6IGtleSBldmVudCBjb2RlPSVkIGRvd249JWRcbiIsCisJCWRldi0+bmFtZSxpci0+a2V5Y29kZSxpci0+a2V5cHJlc3NlZCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsaXItPmtleWNvZGUsaXItPmtleXByZXNzZWQpOworCWlucHV0X3N5bmMoZGV2KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKKwkJICAgaW50IGlyX3R5cGUsIElSX0tFWVRBQl9UWVBFICppcl9jb2RlcykKK3sKKwlpbnQgaTsKKworCWlyLT5pcl90eXBlID0gaXJfdHlwZTsKKwlpZiAoaXJfY29kZXMpCisJCW1lbWNweShpci0+aXJfY29kZXMsIGlyX2NvZGVzLCBzaXplb2YoaXItPmlyX2NvZGVzKSk7CisKKworCWRldi0+a2V5Y29kZSAgICAgPSBpci0+aXJfY29kZXM7CisJZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihJUl9LRVlUQUJfVFlQRSk7CisJZGV2LT5rZXljb2RlbWF4ICA9IElSX0tFWVRBQl9TSVpFOworCWZvciAoaSA9IDA7IGkgPCBJUl9LRVlUQUJfU0laRTsgaSsrKQorCQlzZXRfYml0KGlyLT5pcl9jb2Rlc1tpXSwgZGV2LT5rZXliaXQpOworCWNsZWFyX2JpdCgwLCBkZXYtPmtleWJpdCk7CisKKwlzZXRfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCk7CisJaWYgKHJlcGVhdCkKKwkJc2V0X2JpdChFVl9SRVAsIGRldi0+ZXZiaXQpOworfQorCit2b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcikKK3sKKwlpZiAoaXItPmtleXByZXNzZWQpIHsKKwkJaXItPmtleXByZXNzZWQgPSAwOworCQlpcl9pbnB1dF9rZXlfZXZlbnQoZGV2LGlyKTsKKwl9Cit9CisKK3ZvaWQgaXJfaW5wdXRfa2V5ZG93bihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBpcl9pbnB1dF9zdGF0ZSAqaXIsCisJCSAgICAgIHUzMiBpcl9rZXksIHUzMiBpcl9yYXcpCit7CisJdTMyIGtleWNvZGUgPSBJUl9LRVlDT0RFKGlyLT5pcl9jb2RlcywgaXJfa2V5KTsKKworCWlmIChpci0+a2V5cHJlc3NlZCAmJiBpci0+a2V5Y29kZSAhPSBrZXljb2RlKSB7CisJCWlyLT5rZXlwcmVzc2VkID0gMDsKKwkJaXJfaW5wdXRfa2V5X2V2ZW50KGRldixpcik7CisJfQorCWlmICghaXItPmtleXByZXNzZWQpIHsKKwkJaXItPmlyX2tleSAgPSBpcl9rZXk7CisJCWlyLT5pcl9yYXcgID0gaXJfcmF3OworCQlpci0+a2V5Y29kZSA9IGtleWNvZGU7CisJCWlyLT5rZXlwcmVzc2VkID0gMTsKKwkJaXJfaW5wdXRfa2V5X2V2ZW50KGRldixpcik7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit1MzIgaXJfZXh0cmFjdF9iaXRzKHUzMiBkYXRhLCB1MzIgbWFzaykKK3sKKwlpbnQgbWJpdCwgdmJpdDsKKwl1MzIgdmFsdWU7CisKKwl2YWx1ZSA9IDA7CisJdmJpdCAgPSAwOworCWZvciAobWJpdCA9IDA7IG1iaXQgPCAzMjsgbWJpdCsrKSB7CisJCWlmICghKG1hc2sgJiAoKHUzMikxIDw8IG1iaXQpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGF0YSAmICgodTMyKTEgPDwgbWJpdCkpCisJCQl2YWx1ZSB8PSAoMSA8PCB2Yml0KTsKKwkJdmJpdCsrOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgaW5saW5lIGdldGJpdCh1MzIgKnNhbXBsZXMsIGludCBiaXQpCit7CisJcmV0dXJuIChzYW1wbGVzW2JpdC8zMl0gJiAoMSA8PCAoMzEtKGJpdCUzMikpKSkgPyAxIDogMDsKK30KKworLyogc3VtcCByYXcgc2FtcGxlcyBmb3IgdmlzdWFsIGRlYnVnZ2luZyA7KSAqLworaW50IGlyX2R1bXBfc2FtcGxlcyh1MzIgKnNhbXBsZXMsIGludCBjb3VudCkKK3sKKwlpbnQgaSwgYml0LCBzdGFydDsKKworCXByaW50ayhLRVJOX0RFQlVHICJpciBzYW1wbGVzOiAiKTsKKwlzdGFydCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvdW50ICogMzI7IGkrKykgeworCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKKwkJaWYgKGJpdCkKKwkJCXN0YXJ0ID0gMTsKKwkJaWYgKDAgPT0gc3RhcnQpCisJCQljb250aW51ZTsKKwkJcHJpbnRrKCIlcyIsIGJpdCA/ICIjIiA6ICJfIik7CisJfQorCXByaW50aygiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyogZGVjb2RlIHJhdyBzYW1wbGVzLCBwdWxzZSBkaXN0YW5jZSBjb2RpbmcgdXNlZCBieSBORUMgcmVtb3RlcyAqLworaW50IGlyX2RlY29kZV9wdWxzZWRpc3RhbmNlKHUzMiAqc2FtcGxlcywgaW50IGNvdW50LCBpbnQgbG93LCBpbnQgaGlnaCkKK3sKKwlpbnQgaSxsYXN0LGJpdCxsZW47CisJdTMyIGN1ckJpdDsKKwl1MzIgdmFsdWU7CisKKwkvKiBmaW5kIHN0YXJ0IGJ1cnN0ICovCisJZm9yIChpID0gbGVuID0gMDsgaSA8IGNvdW50ICogMzI7IGkrKykgeworCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKKwkJaWYgKGJpdCkgeworCQkJbGVuKys7CisJCX0gZWxzZSB7CisJCQlpZiAobGVuID49IDI5KQorCQkJCWJyZWFrOworCQkJbGVuID0gMDsKKwkJfQorCX0KKworCS8qIHN0YXJ0IGJ1cnN0IHRvIHNob3J0ICovCisJaWYgKGxlbiA8IDI5KQorCQlyZXR1cm4gMHhmZmZmZmZmZjsKKworCS8qIGZpbmQgc3RhcnQgc2lsZW5jZSAqLworCWZvciAobGVuID0gMDsgaSA8IGNvdW50ICogMzI7IGkrKykgeworCQliaXQgPSBnZXRiaXQoc2FtcGxlcyxpKTsKKwkJaWYgKGJpdCkgeworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlsZW4rKzsKKwkJfQorCX0KKworCS8qIHNpbGVuY2UgdG8gc2hvcnQgKi8KKwlpZiAobGVuIDwgNykKKwkJcmV0dXJuIDB4ZmZmZmZmZmY7CisKKwkvKiBnbyBkZWNvZGluZyAqLworCWxlbiAgID0gMDsKKwlsYXN0ID0gMTsKKwl2YWx1ZSA9IDA7IGN1ckJpdCA9IDE7CisJZm9yICg7IGkgPCBjb3VudCAqIDMyOyBpKyspIHsKKwkJYml0ICA9IGdldGJpdChzYW1wbGVzLGkpOworCQlpZiAobGFzdCkgeworCQkJaWYoYml0KSB7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWxlbiA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYml0KSB7CisJCQkJaWYgKGxlbiA+IChsb3cgKyBoaWdoKSAvMikKKwkJCQkJdmFsdWUgfD0gY3VyQml0OworCQkJCWN1ckJpdCA8PD0gMTsKKwkJCQlpZiAoY3VyQml0ID09IDEpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlsZW4rKzsKKwkJCX0KKwkJfQorCQlsYXN0ID0gYml0OworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKworLyogZGVjb2RlIHJhdyBzYW1wbGVzLCBiaXBoYXNlIGNvZGluZywgdXNlZCBieSByYzUgZm9yIGV4YW1wbGUgKi8KK2ludCBpcl9kZWNvZGVfYmlwaGFzZSh1MzIgKnNhbXBsZXMsIGludCBjb3VudCwgaW50IGxvdywgaW50IGhpZ2gpCit7CisJaW50IGksbGFzdCxiaXQsbGVuLGZsaXBzOworCXUzMiB2YWx1ZTsKKworCS8qIGZpbmQgc3RhcnQgYml0ICgxKSAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWJpdCA9IGdldGJpdChzYW1wbGVzLGkpOworCQlpZiAoYml0KQorCQkJYnJlYWs7CisJfQorCisJLyogZ28gZGVjb2RpbmcgKi8KKwlsZW4gICA9IDA7CisJZmxpcHMgPSAwOworCXZhbHVlID0gMTsKKwlmb3IgKDsgaSA8IGNvdW50ICogMzI7IGkrKykgeworCQlpZiAobGVuID4gaGlnaCkKKwkJCWJyZWFrOworCQlpZiAoZmxpcHMgPiAxKQorCQkJYnJlYWs7CisJCWxhc3QgPSBiaXQ7CisJCWJpdCAgPSBnZXRiaXQoc2FtcGxlcyxpKTsKKwkJaWYgKGxhc3QgPT0gYml0KSB7CisJCQlsZW4rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsZW4gPCBsb3cpIHsKKwkJCWxlbisrOworCQkJZmxpcHMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCXZhbHVlIDw8PSAxOworCQl2YWx1ZSB8PSBiaXQ7CisJCWZsaXBzID0gMDsKKwkJbGVuICAgPSAxOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2lucHV0X2luaXQpOworRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfbm9rZXkpOworRVhQT1JUX1NZTUJPTF9HUEwoaXJfaW5wdXRfa2V5ZG93bik7CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2V4dHJhY3RfYml0cyk7CitFWFBPUlRfU1lNQk9MX0dQTChpcl9kdW1wX3NhbXBsZXMpOworRVhQT1JUX1NZTUJPTF9HUEwoaXJfZGVjb2RlX2JpcGhhc2UpOworRVhQT1JUX1NZTUJPTF9HUEwoaXJfZGVjb2RlX3B1bHNlZGlzdGFuY2UpOworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5NGQ1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwpAQCAtMCwwICsxLDE0MTUgQEAKKy8qCisKKworICAgIEtleXRhYmxlcyBmb3Igc3VwcG9ydGVkIHJlbW90ZSBjb250cm9scy4gVGhpcyBmaWxlIGlzIHBhcnQgb2YKKyAgICB2aWRlbzRsaW51eC4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KKworLyogZW1wdHkga2V5dGFibGUsIGNhbiBiZSB1c2VkIGFzIHBsYWNlaG9sZGVyIGZvciBub3QteWV0IGNyZWF0ZWQga2V5dGFibGVzICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbXB0eVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDJhIF0gPSBLRVlfQ09GRkVFLAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW1wdHkpOworCisvKiBNYXR0IEplc3NvbiA8ZHZiQGplc3Nvbi5lY2xpcHNlLmNvLnVrICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfZHZidFtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDI4IF0gPSBLRVlfMCwgICAgICAgICAvLycwJyAvICdlbnRlcicKKwlbIDB4MjIgXSA9IEtFWV8xLCAgICAgICAgIC8vJzEnCisJWyAweDEyIF0gPSBLRVlfMiwgICAgICAgICAvLycyJyAvICd1cCBhcnJvdycKKwlbIDB4MzIgXSA9IEtFWV8zLCAgICAgICAgIC8vJzMnCisJWyAweDI0IF0gPSBLRVlfNCwgICAgICAgICAvLyc0JyAvICdsZWZ0IGFycm93JworCVsgMHgxNCBdID0gS0VZXzUsICAgICAgICAgLy8nNScKKwlbIDB4MzQgXSA9IEtFWV82LCAgICAgICAgIC8vJzYnIC8gJ3JpZ2h0IGFycm93JworCVsgMHgyNiBdID0gS0VZXzcsICAgICAgICAgLy8nNycKKwlbIDB4MTYgXSA9IEtFWV84LCAgICAgICAgIC8vJzgnIC8gJ2Rvd24gYXJyb3cnCisJWyAweDM2IF0gPSBLRVlfOSwgICAgICAgICAvLyc5JworCisJWyAweDIwIF0gPSBLRVlfTElTVCwgICAgICAgIC8vICdzb3VyY2UnCisJWyAweDEwIF0gPSBLRVlfVEVYVCwgICAgICAgIC8vICd0ZWxldGV4dCcKKwlbIDB4MDAgXSA9IEtFWV9QT1dFUiwgICAgICAgLy8gJ3Bvd2VyJworCVsgMHgwNCBdID0gS0VZX0FVRElPLCAgICAgICAvLyAnYXVkaW8nCisJWyAweDA2IF0gPSBLRVlfWk9PTSwgICAgICAgIC8vICdmdWxsIHNjcmVlbicKKwlbIDB4MTggXSA9IEtFWV9WSURFTywgICAgICAgLy8gJ2Rpc3BsYXknCisJWyAweDM4IF0gPSBLRVlfU0VBUkNILCAgICAgIC8vICdsb29wJworCVsgMHgwOCBdID0gS0VZX0lORk8sICAgICAgICAvLyAncHJldmlldycKKwlbIDB4MmEgXSA9IEtFWV9SRVdJTkQsICAgICAgLy8gJ2JhY2t3YXJkIDw8JworCVsgMHgxYSBdID0gS0VZX0ZBU1RGT1JXQVJELCAvLyAnZm9yd2FyZCA+PicKKwlbIDB4M2EgXSA9IEtFWV9SRUNPUkQsICAgICAgLy8gJ2NhcHR1cmUnCisJWyAweDBhIF0gPSBLRVlfTVVURSwgICAgICAgIC8vICdtdXRlJworCVsgMHgyYyBdID0gS0VZX1JFQ09SRCwgICAgICAvLyAncmVjb3JkJworCVsgMHgxYyBdID0gS0VZX1BBVVNFLCAgICAgICAvLyAncGF1c2UnCisJWyAweDNjIF0gPSBLRVlfU1RPUCwgICAgICAgIC8vICdzdG9wJworCVsgMHgwYyBdID0gS0VZX1BMQVksICAgICAgICAvLyAncGxheScKKwlbIDB4MmUgXSA9IEtFWV9SRUQsICAgICAgICAgLy8gJ3JlZCcKKwlbIDB4MDEgXSA9IEtFWV9CTFVFLCAgICAgICAgLy8gJ2JsdWUnIC8gJ2NhbmNlbCcKKwlbIDB4MGUgXSA9IEtFWV9ZRUxMT1csICAgICAgLy8gJ3llbGxvdycgLyAnb2snCisJWyAweDIxIF0gPSBLRVlfR1JFRU4sICAgICAgIC8vICdncmVlbicKKwlbIDB4MTEgXSA9IEtFWV9DSEFOTkVMRE9XTiwgLy8gJ2NoYW5uZWwgLScKKwlbIDB4MzEgXSA9IEtFWV9DSEFOTkVMVVAsICAgLy8gJ2NoYW5uZWwgKycKKwlbIDB4MWUgXSA9IEtFWV9WT0xVTUVET1dOLCAgLy8gJ3ZvbHVtZSAtJworCVsgMHgzZSBdID0gS0VZX1ZPTFVNRVVQLCAgICAvLyAndm9sdW1lICsnCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfZHZidCk7CisKKy8qIEF0dGlsYSBLb25kb3JvcyA8YXR0aWxhLmtvbmRvcm9zQGNoZWxsby5odT4gKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbSVJfS0VZVEFCX1NJWkVdID0geworCisJWyAweDAxIF0gPSBLRVlfMSwKKwlbIDB4MDIgXSA9IEtFWV8yLAorCVsgMHgwMyBdID0gS0VZXzMsCisJWyAweDA0IF0gPSBLRVlfNCwKKwlbIDB4MDUgXSA9IEtFWV81LAorCVsgMHgwNiBdID0gS0VZXzYsCisJWyAweDA3IF0gPSBLRVlfNywKKwlbIDB4MDggXSA9IEtFWV84LAorCVsgMHgwOSBdID0gS0VZXzksCisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MTcgXSA9IEtFWV9MQVNULCAgICAgICAgLy8gKzEwMAorCVsgMHgwYSBdID0gS0VZX0xJU1QsICAgICAgICAvLyByZWNhbGwKKworCisJWyAweDFjIF0gPSBLRVlfVFVORVIsICAgICAgIC8vIFRWL0ZNCisJWyAweDE1IF0gPSBLRVlfU0VBUkNILCAgICAgIC8vIHNjYW4KKwlbIDB4MTIgXSA9IEtFWV9QT1dFUiwgICAgICAgLy8gcG93ZXIKKwlbIDB4MWYgXSA9IEtFWV9WT0xVTUVET1dOLCAgLy8gdm9sIHVwCisJWyAweDFiIF0gPSBLRVlfVk9MVU1FVVAsICAgIC8vIHZvbCBkb3duCisJWyAweDFlIF0gPSBLRVlfQ0hBTk5FTERPV04sIC8vIGNobiB1cAorCVsgMHgxYSBdID0gS0VZX0NIQU5ORUxVUCwgICAvLyBjaG4gZG93bgorCisJWyAweDExIF0gPSBLRVlfVklERU8sICAgICAgIC8vIHZpZGVvCisJWyAweDBmIF0gPSBLRVlfWk9PTSwgICAgICAgIC8vIGZ1bGwgc2NyZWVuCisJWyAweDEzIF0gPSBLRVlfTVVURSwgICAgICAgIC8vIG11dGUvdW5tdXRlCisJWyAweDEwIF0gPSBLRVlfVEVYVCwgICAgICAgIC8vIG1pbgorCisJWyAweDBkIF0gPSBLRVlfU1RPUCwgICAgICAgIC8vIGZyZWV6ZQorCVsgMHgwZSBdID0gS0VZX1JFQ09SRCwgICAgICAvLyByZWNvcmQKKwlbIDB4MWQgXSA9IEtFWV9QTEFZUEFVU0UsICAgLy8gc3RvcAorCVsgMHgxOSBdID0gS0VZX1BMQVksICAgICAgICAvLyBwbGF5CisKKwlbIDB4MTYgXSA9IEtFWV9HT1RPLCAgICAgICAgLy8gb3NkCisJWyAweDE0IF0gPSBLRVlfUkVGUkVTSCwgICAgIC8vIGRlZmF1bHQKKwlbIDB4MGMgXSA9IEtFWV9LUFBMVVMsICAgICAgLy8gZmluZSB0dW5lID4+Pj4KKwlbIDB4MTggXSA9IEtFWV9LUE1JTlVTICAgICAgLy8gZmluZSB0dW5lIDw8PDwKK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2FwYWNfdmlld2NvbXApOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld1tJUl9LRVlUQUJfU0laRV0gPSB7CisKKwlbIDB4MWUgXSA9IEtFWV9QT1dFUiwgICAgICAgLy8gcG93ZXIKKwlbIDB4MDcgXSA9IEtFWV9NRURJQSwgICAgICAgLy8gc291cmNlCisJWyAweDFjIF0gPSBLRVlfU0VBUkNILCAgICAgIC8vIHNjYW4KKworLyogRklYTUU6IGR1cGxpY2F0ZSBrZXljb2Rlcz8KKyAqCisgKiBUaGVzZSBmb3VyIGtleXMgc2VlbSB0byBzaGFyZSB0aGUgc2FtZSBHUElPIGFzIENIKywgQ0gtLCA8PDwgYW5kID4+PgorICogVGhlIEdQSU8gdmFsdWVzIGFyZQorICogNjM5N2ZiIGZvciBib3RoICJTY2FuIDwiIGFuZCAiQ0ggLSIsCisgKiA2MzlmZmIgZm9yICJTY2FuID4iIGFuZCAiQ0grIiwKKyAqIDYzODRmYiBmb3IgIlR1bmUgPCIgYW5kICI8PDwiLAorICogNjM4Y2ZiIGZvciAiVHVuZSA+IiBhbmQgIj4+PiIsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1hc2suCisgKgorICoJWyAweDE3IF0gPSBLRVlfQkFDSywgICAgICAgIC8vIGZtIHNjYW4gPDwKKyAqCVsgMHgxZiBdID0gS0VZX0ZPUldBUkQsICAgICAvLyBmbSBzY2FuID4+CisgKgorICoJWyAweDA0IF0gPSBLRVlfTEVGVCwgICAgICAgIC8vIGZtIHR1bmluZyA8CisgKglbIDB4MGMgXSA9IEtFWV9SSUdIVCwgICAgICAgLy8gZm0gdHVuaW5nID4KKyAqCisgKiBGb3Igbm93LCB0aGVzZSBmb3VyIGtleXMgYXJlIGRpc2FibGVkLiBQcmVzc2luZyB0aGVtIHdpbGwgZ2VuZXJhdGUKKyAqIHRoZSBDSCsvQ0gtLzw8PC8+Pj4gZXZlbnRzCisgKi8KKworCVsgMHgwMyBdID0gS0VZX1RVTkVSLCAgICAgICAvLyBUVi9GTQorCisJWyAweDAwIF0gPSBLRVlfUkVDT1JELAorCVsgMHgwOCBdID0gS0VZX1NUT1AsCisJWyAweDExIF0gPSBLRVlfUExBWSwKKworCVsgMHgxYSBdID0gS0VZX1BMQVlQQVVTRSwgICAvLyBmcmVlemUKKwlbIDB4MTkgXSA9IEtFWV9aT09NLCAgICAgICAgLy8gem9vbQorCVsgMHgwZiBdID0gS0VZX1RFWFQsICAgICAgICAvLyBtaW4KKworCVsgMHgwMSBdID0gS0VZXzEsCisJWyAweDBiIF0gPSBLRVlfMiwKKwlbIDB4MWIgXSA9IEtFWV8zLAorCVsgMHgwNSBdID0gS0VZXzQsCisJWyAweDA5IF0gPSBLRVlfNSwKKwlbIDB4MTUgXSA9IEtFWV82LAorCVsgMHgwNiBdID0gS0VZXzcsCisJWyAweDBhIF0gPSBLRVlfOCwKKwlbIDB4MTIgXSA9IEtFWV85LAorCVsgMHgwMiBdID0gS0VZXzAsCisJWyAweDEwIF0gPSBLRVlfTEFTVCwgICAgICAgIC8vICsxMDAKKwlbIDB4MTMgXSA9IEtFWV9MSVNULCAgICAgICAgLy8gcmVjYWxsCisKKwlbIDB4MWYgXSA9IEtFWV9DSEFOTkVMVVAsICAgLy8gY2huIGRvd24KKwlbIDB4MTcgXSA9IEtFWV9DSEFOTkVMRE9XTiwgLy8gY2huIHVwCisJWyAweDE2IF0gPSBLRVlfVk9MVU1FVVAsICAgIC8vIHZvbCBkb3duCisJWyAweDE0IF0gPSBLRVlfVk9MVU1FRE9XTiwgIC8vIHZvbCB1cAorCisJWyAweDA0IF0gPSBLRVlfS1BNSU5VUywgICAgIC8vIDw8PAorCVsgMHgwZSBdID0gS0VZX1NFVFVQLCAgICAgICAvLyBmdW5jdGlvbgorCVsgMHgwYyBdID0gS0VZX0tQUExVUywgICAgICAvLyA+Pj4KKworCVsgMHgwZCBdID0gS0VZX0dPVE8sICAgICAgICAvLyBtdHMKKwlbIDB4MWQgXSA9IEtFWV9SRUZSRVNILCAgICAgLy8gcmVzZXQKKwlbIDB4MTggXSA9IEtFWV9NVVRFICAgICAgICAgLy8gbXV0ZS91bm11dGUKK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BpeGVsdmlldyk7CisKK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX25lYnVsYVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MDEgXSA9IEtFWV8xLAorCVsgMHgwMiBdID0gS0VZXzIsCisJWyAweDAzIF0gPSBLRVlfMywKKwlbIDB4MDQgXSA9IEtFWV80LAorCVsgMHgwNSBdID0gS0VZXzUsCisJWyAweDA2IF0gPSBLRVlfNiwKKwlbIDB4MDcgXSA9IEtFWV83LAorCVsgMHgwOCBdID0gS0VZXzgsCisJWyAweDA5IF0gPSBLRVlfOSwKKwlbIDB4MGEgXSA9IEtFWV9UViwKKwlbIDB4MGIgXSA9IEtFWV9BVVgsCisJWyAweDBjIF0gPSBLRVlfRFZELAorCVsgMHgwZCBdID0gS0VZX1BPV0VSLAorCVsgMHgwZSBdID0gS0VZX01IUCwJLyogbGFiZWxsZWQgJ1BpY3R1cmUnICovCisJWyAweDBmIF0gPSBLRVlfQVVESU8sCisJWyAweDEwIF0gPSBLRVlfSU5GTywKKwlbIDB4MTEgXSA9IEtFWV9GMTMsCS8qIDE2OjkgKi8KKwlbIDB4MTIgXSA9IEtFWV9GMTQsCS8qIDE0OjkgKi8KKwlbIDB4MTMgXSA9IEtFWV9FUEcsCisJWyAweDE0IF0gPSBLRVlfRVhJVCwKKwlbIDB4MTUgXSA9IEtFWV9NRU5VLAorCVsgMHgxNiBdID0gS0VZX1VQLAorCVsgMHgxNyBdID0gS0VZX0RPV04sCisJWyAweDE4IF0gPSBLRVlfTEVGVCwKKwlbIDB4MTkgXSA9IEtFWV9SSUdIVCwKKwlbIDB4MWEgXSA9IEtFWV9FTlRFUiwKKwlbIDB4MWIgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDFjIF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDFkIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDFlIF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MWYgXSA9IEtFWV9SRUQsCisJWyAweDIwIF0gPSBLRVlfR1JFRU4sCisJWyAweDIxIF0gPSBLRVlfWUVMTE9XLAorCVsgMHgyMiBdID0gS0VZX0JMVUUsCisJWyAweDIzIF0gPSBLRVlfU1VCVElUTEUsCisJWyAweDI0IF0gPSBLRVlfRjE1LAkvKiBBRCAqLworCVsgMHgyNSBdID0gS0VZX1RFWFQsCisJWyAweDI2IF0gPSBLRVlfTVVURSwKKwlbIDB4MjcgXSA9IEtFWV9SRVdJTkQsCisJWyAweDI4IF0gPSBLRVlfU1RPUCwKKwlbIDB4MjkgXSA9IEtFWV9QTEFZLAorCVsgMHgyYSBdID0gS0VZX0ZBU1RGT1JXQVJELAorCVsgMHgyYiBdID0gS0VZX0YxNiwJLyogY2hhcHRlciAqLworCVsgMHgyYyBdID0gS0VZX1BBVVNFLAorCVsgMHgyZCBdID0gS0VZX1BMQVksCisJWyAweDJlIF0gPSBLRVlfUkVDT1JELAorCVsgMHgyZiBdID0gS0VZX0YxNywJLyogcGljdHVyZSBpbiBwaWN0dXJlICovCisJWyAweDMwIF0gPSBLRVlfS1BQTFVTLAkvKiB6b29tIGluICovCisJWyAweDMxIF0gPSBLRVlfS1BNSU5VUywJLyogem9vbSBvdXQgKi8KKwlbIDB4MzIgXSA9IEtFWV9GMTgsCS8qIGNhcHR1cmUgKi8KKwlbIDB4MzMgXSA9IEtFWV9GMTksCS8qIHdlYiAqLworCVsgMHgzNCBdID0gS0VZX0VNQUlMLAorCVsgMHgzNSBdID0gS0VZX1BIT05FLAorCVsgMHgzNiBdID0gS0VZX1BDCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19uZWJ1bGEpOworCisvKiBEaWdpdGFsTm93IEROVFYgTGl2ZSBEVkItVCBSZW1vdGUgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2RudHZfbGl2ZV9kdmJfdFtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDAwIF0gPSBLRVlfRVNDLAkJLyogJ2dvIHVwIGEgbGV2ZWw/JyAqLworCS8qIEtleXMgMCB0byA5ICovCisJWyAweDBhIF0gPSBLRVlfMCwKKwlbIDB4MDEgXSA9IEtFWV8xLAorCVsgMHgwMiBdID0gS0VZXzIsCisJWyAweDAzIF0gPSBLRVlfMywKKwlbIDB4MDQgXSA9IEtFWV80LAorCVsgMHgwNSBdID0gS0VZXzUsCisJWyAweDA2IF0gPSBLRVlfNiwKKwlbIDB4MDcgXSA9IEtFWV83LAorCVsgMHgwOCBdID0gS0VZXzgsCisJWyAweDA5IF0gPSBLRVlfOSwKKworCVsgMHgwYiBdID0gS0VZX1RVTkVSLAkJLyogdHYvZm0gKi8KKwlbIDB4MGMgXSA9IEtFWV9TRUFSQ0gsCQkvKiBzY2FuICovCisJWyAweDBkIF0gPSBLRVlfU1RPUCwKKwlbIDB4MGUgXSA9IEtFWV9QQVVTRSwKKwlbIDB4MGYgXSA9IEtFWV9MSVNULAkJLyogc291cmNlICovCisKKwlbIDB4MTAgXSA9IEtFWV9NVVRFLAorCVsgMHgxMSBdID0gS0VZX1JFV0lORCwJCS8qIGJhY2t3YXJkIDw8ICovCisJWyAweDEyIF0gPSBLRVlfUE9XRVIsCisJWyAweDEzIF0gPSBLRVlfUywJCQkvKiBzbmFwICovCisJWyAweDE0IF0gPSBLRVlfQVVESU8sCQkvKiBzdGVyZW8gKi8KKwlbIDB4MTUgXSA9IEtFWV9DTEVBUiwJCS8qIHJlc2V0ICovCisJWyAweDE2IF0gPSBLRVlfUExBWSwKKwlbIDB4MTcgXSA9IEtFWV9FTlRFUiwKKwlbIDB4MTggXSA9IEtFWV9aT09NLAkJLyogZnVsbCBzY3JlZW4gKi8KKwlbIDB4MTkgXSA9IEtFWV9GQVNURk9SV0FSRCwJLyogZm9yd2FyZCA+PiAqLworCVsgMHgxYSBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MWIgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MWMgXSA9IEtFWV9JTkZPLAkJLyogcHJldmlldyAqLworCVsgMHgxZCBdID0gS0VZX1JFQ09SRCwJCS8qIHJlY29yZCAqLworCVsgMHgxZSBdID0gS0VZX0NIQU5ORUxET1dOLAorCVsgMHgxZiBdID0gS0VZX1ZPTFVNRURPV04sCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3QpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIElPLURBVEEgQkNUVjdFIFJlbW90ZSAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfaW9kYXRhX2JjdHY3ZVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDQwIF0gPSBLRVlfVFYsCisJWyAweDIwIF0gPSBLRVlfUkFESU8sCQkvKiBGTSAqLworCVsgMHg2MCBdID0gS0VZX0VQRywKKwlbIDB4MDAgXSA9IEtFWV9QT1dFUiwKKworCS8qIEtleXMgMCB0byA5ICovCisJWyAweDQ0IF0gPSBLRVlfMCwJCS8qIDEwICovCisJWyAweDUwIF0gPSBLRVlfMSwKKwlbIDB4MzAgXSA9IEtFWV8yLAorCVsgMHg3MCBdID0gS0VZXzMsCisJWyAweDQ4IF0gPSBLRVlfNCwKKwlbIDB4MjggXSA9IEtFWV81LAorCVsgMHg2OCBdID0gS0VZXzYsCisJWyAweDU4IF0gPSBLRVlfNywKKwlbIDB4MzggXSA9IEtFWV84LAorCVsgMHg3OCBdID0gS0VZXzksCisKKwlbIDB4MTAgXSA9IEtFWV9MLAkJCS8qIExpdmUgKi8KKwlbIDB4MDggXSA9IEtFWV9ULAkJCS8qIFRpbWUgU2hpZnQgKi8KKworCVsgMHgxOCBdID0gS0VZX1BMQVlQQVVTRSwJCS8qIFBsYXkgKi8KKworCVsgMHgyNCBdID0gS0VZX0VOVEVSLAkJLyogMTEgKi8KKwlbIDB4NjQgXSA9IEtFWV9FU0MsCQkvKiAxMiAqLworCVsgMHgwNCBdID0gS0VZX00sCQkJLyogTXVsdGkgKi8KKworCVsgMHg1NCBdID0gS0VZX1ZJREVPLAorCVsgMHgzNCBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4NzQgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MTQgXSA9IEtFWV9NVVRFLAorCisJWyAweDRjIF0gPSBLRVlfUywJCQkvKiBTVklERU8gKi8KKwlbIDB4MmMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDB4NmMgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgwYyBdID0gS0VZX1pPT00sCisKKwlbIDB4NWMgXSA9IEtFWV9QQVVTRSwKKwlbIDB4M2MgXSA9IEtFWV9DLAkJCS8qIHx8IChyZWQpICovCisJWyAweDdjIF0gPSBLRVlfUkVDT1JELAkJLyogcmVjb3JkaW5nICovCisJWyAweDFjIF0gPSBLRVlfU1RPUCwKKworCVsgMHg0MSBdID0gS0VZX1JFV0lORCwJCS8qIGJhY2t3YXJkIDw8ICovCisJWyAweDIxIF0gPSBLRVlfUExBWSwKKwlbIDB4NjEgXSA9IEtFWV9GQVNURk9SV0FSRCwJLyogZm9yd2FyZCA+PiAqLworCVsgMHgwMSBdID0gS0VZX05FWFQsCQkvKiBza2lwID58ICovCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19pb2RhdGFfYmN0djdlKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBBRFMgVGVjaCBJbnN0YW50IFRWIERWQi1UIFBDSSBSZW1vdGUgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwkvKiBLZXlzIDAgdG8gOSAqLworCVsgMHg0ZCBdID0gS0VZXzAsCisJWyAweDU3IF0gPSBLRVlfMSwKKwlbIDB4NGYgXSA9IEtFWV8yLAorCVsgMHg1MyBdID0gS0VZXzMsCisJWyAweDU2IF0gPSBLRVlfNCwKKwlbIDB4NGUgXSA9IEtFWV81LAorCVsgMHg1ZSBdID0gS0VZXzYsCisJWyAweDU0IF0gPSBLRVlfNywKKwlbIDB4NGMgXSA9IEtFWV84LAorCVsgMHg1YyBdID0gS0VZXzksCisKKwlbIDB4NWIgXSA9IEtFWV9QT1dFUiwKKwlbIDB4NWYgXSA9IEtFWV9NVVRFLAorCVsgMHg1NSBdID0gS0VZX0dPVE8sCisJWyAweDVkIF0gPSBLRVlfU0VBUkNILAorCVsgMHgxNyBdID0gS0VZX0VQRywJCS8qIEd1aWRlICovCisJWyAweDFmIF0gPSBLRVlfTUVOVSwKKwlbIDB4MGYgXSA9IEtFWV9VUCwKKwlbIDB4NDYgXSA9IEtFWV9ET1dOLAorCVsgMHgxNiBdID0gS0VZX0xFRlQsCisJWyAweDFlIF0gPSBLRVlfUklHSFQsCisJWyAweDBlIF0gPSBLRVlfU0VMRUNULAkJLyogRW50ZXIgKi8KKwlbIDB4NWEgXSA9IEtFWV9JTkZPLAorCVsgMHg1MiBdID0gS0VZX0VYSVQsCisJWyAweDU5IF0gPSBLRVlfUFJFVklPVVMsCisJWyAweDUxIF0gPSBLRVlfTkVYVCwKKwlbIDB4NTggXSA9IEtFWV9SRVdJTkQsCisJWyAweDUwIF0gPSBLRVlfRk9SV0FSRCwKKwlbIDB4NDQgXSA9IEtFWV9QTEFZUEFVU0UsCisJWyAweDA3IF0gPSBLRVlfU1RPUCwKKwlbIDB4MWIgXSA9IEtFWV9SRUNPUkQsCisJWyAweDEzIF0gPSBLRVlfVFVORVIsCQkvKiBMaXZlICovCisJWyAweDBhIF0gPSBLRVlfQSwKKwlbIDB4MTIgXSA9IEtFWV9CLAorCVsgMHgwMyBdID0gS0VZX1BST0cxLAkJLyogMSAqLworCVsgMHgwMSBdID0gS0VZX1BST0cyLAkJLyogMiAqLworCVsgMHgwMCBdID0gS0VZX1BST0czLAkJLyogMyAqLworCVsgMHgwNiBdID0gS0VZX0RWRCwKKwlbIDB4NDggXSA9IEtFWV9BVVgsCQkvKiBQaG90byAqLworCVsgMHg0MCBdID0gS0VZX1ZJREVPLAorCVsgMHgxOSBdID0gS0VZX0FVRElPLAkJLyogTXVzaWMgKi8KKwlbIDB4MGIgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDA4IF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDE1IF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDFjIF0gPSBLRVlfVk9MVU1FRE9XTiwKK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBNU0kgVFZAbnl3aGVyZSByZW1vdGUgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX21zaV90dmFueXdoZXJlW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwkvKiBLZXlzIDAgdG8gOSAqLworCVsgMHgwMCBdID0gS0VZXzAsCisJWyAweDAxIF0gPSBLRVlfMSwKKwlbIDB4MDIgXSA9IEtFWV8yLAorCVsgMHgwMyBdID0gS0VZXzMsCisJWyAweDA0IF0gPSBLRVlfNCwKKwlbIDB4MDUgXSA9IEtFWV81LAorCVsgMHgwNiBdID0gS0VZXzYsCisJWyAweDA3IF0gPSBLRVlfNywKKwlbIDB4MDggXSA9IEtFWV84LAorCVsgMHgwOSBdID0gS0VZXzksCisKKwlbIDB4MGMgXSA9IEtFWV9NVVRFLAorCVsgMHgwZiBdID0gS0VZX1NDUkVFTiwJCS8qIEZ1bGwgU2NyZWVuICovCisJWyAweDEwIF0gPSBLRVlfRiwJCQkvKiBGdW50aW9uICovCisJWyAweDExIF0gPSBLRVlfVCwJCQkvKiBUaW1lIHNoaWZ0ICovCisJWyAweDEyIF0gPSBLRVlfUE9XRVIsCisJWyAweDEzIF0gPSBLRVlfTUVESUEsCQkvKiBNVFMgKi8KKwlbIDB4MTQgXSA9IEtFWV9TTE9XLAorCVsgMHgxNiBdID0gS0VZX1JFV0lORCwJCS8qIGJhY2t3YXJkIDw8ICovCisJWyAweDE3IF0gPSBLRVlfRU5URVIsCQkvKiBSZXR1cm4gKi8KKwlbIDB4MTggXSA9IEtFWV9GQVNURk9SV0FSRCwJLyogZm9yd2FyZCA+PiAqLworCVsgMHgxYSBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MWIgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MWUgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDB4MWYgXSA9IEtFWV9WT0xVTUVET1dOLAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbXNpX3R2YW55d2hlcmUpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENpbmVyZ3kgMTQwMCBEVkItVCAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfY2luZXJneV8xNDAwW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbIDB4MDEgXSA9IEtFWV9QT1dFUiwKKwlbIDB4MDIgXSA9IEtFWV8xLAorCVsgMHgwMyBdID0gS0VZXzIsCisJWyAweDA0IF0gPSBLRVlfMywKKwlbIDB4MDUgXSA9IEtFWV80LAorCVsgMHgwNiBdID0gS0VZXzUsCisJWyAweDA3IF0gPSBLRVlfNiwKKwlbIDB4MDggXSA9IEtFWV83LAorCVsgMHgwOSBdID0gS0VZXzgsCisJWyAweDBhIF0gPSBLRVlfOSwKKwlbIDB4MGMgXSA9IEtFWV8wLAorCisJWyAweDBiIF0gPSBLRVlfVklERU8sCisJWyAweDBkIF0gPSBLRVlfUkVGUkVTSCwKKwlbIDB4MGUgXSA9IEtFWV9TRUxFQ1QsCisJWyAweDBmIF0gPSBLRVlfRVBHLAorCVsgMHgxMCBdID0gS0VZX1VQLAorCVsgMHgxMSBdID0gS0VZX0xFRlQsCisJWyAweDEyIF0gPSBLRVlfT0ssCisJWyAweDEzIF0gPSBLRVlfUklHSFQsCisJWyAweDE0IF0gPSBLRVlfRE9XTiwKKwlbIDB4MTUgXSA9IEtFWV9URVhULAorCVsgMHgxNiBdID0gS0VZX0lORk8sCisKKwlbIDB4MTcgXSA9IEtFWV9SRUQsCisJWyAweDE4IF0gPSBLRVlfR1JFRU4sCisJWyAweDE5IF0gPSBLRVlfWUVMTE9XLAorCVsgMHgxYSBdID0gS0VZX0JMVUUsCisKKwlbIDB4MWIgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDFjIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDFkIF0gPSBLRVlfTVVURSwKKwlbIDB4MWUgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgxZiBdID0gS0VZX0NIQU5ORUxET1dOLAorCisJWyAweDQwIF0gPSBLRVlfUEFVU0UsCisJWyAweDRjIF0gPSBLRVlfUExBWSwKKwlbIDB4NTggXSA9IEtFWV9SRUNPUkQsCisJWyAweDU0IF0gPSBLRVlfUFJFVklPVVMsCisJWyAweDQ4IF0gPSBLRVlfU1RPUCwKKwlbIDB4NWMgXSA9IEtFWV9ORVhULAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfY2luZXJneV8xNDAwKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBBVkVSVFYgU1RVRElPIDMwMyBSZW1vdGUgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJ0dl8zMDNbSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgyYSBdID0gS0VZXzEsCisJWyAweDMyIF0gPSBLRVlfMiwKKwlbIDB4M2EgXSA9IEtFWV8zLAorCVsgMHg0YSBdID0gS0VZXzQsCisJWyAweDUyIF0gPSBLRVlfNSwKKwlbIDB4NWEgXSA9IEtFWV82LAorCVsgMHg2YSBdID0gS0VZXzcsCisJWyAweDcyIF0gPSBLRVlfOCwKKwlbIDB4N2EgXSA9IEtFWV85LAorCVsgMHgwZSBdID0gS0VZXzAsCisKKwlbIDB4MDIgXSA9IEtFWV9QT1dFUiwKKwlbIDB4MjIgXSA9IEtFWV9WSURFTywKKwlbIDB4NDIgXSA9IEtFWV9BVURJTywKKwlbIDB4NjIgXSA9IEtFWV9aT09NLAorCVsgMHgwYSBdID0gS0VZX1RWLAorCVsgMHgxMiBdID0gS0VZX0NELAorCVsgMHgxYSBdID0gS0VZX1RFWFQsCisKKwlbIDB4MTYgXSA9IEtFWV9TVUJUSVRMRSwKKwlbIDB4MWUgXSA9IEtFWV9SRVdJTkQsCisJWyAweDA2IF0gPSBLRVlfUFJJTlQsCisKKwlbIDB4MmUgXSA9IEtFWV9TRUFSQ0gsCisJWyAweDM2IF0gPSBLRVlfU0xFRVAsCisJWyAweDNlIF0gPSBLRVlfU0hVRkZMRSwKKwlbIDB4MjYgXSA9IEtFWV9NVVRFLAorCisJWyAweDRlIF0gPSBLRVlfUkVDT1JELAorCVsgMHg1NiBdID0gS0VZX1BBVVNFLAorCVsgMHg1ZSBdID0gS0VZX1NUT1AsCisJWyAweDQ2IF0gPSBLRVlfUExBWSwKKworCVsgMHg2ZSBdID0gS0VZX1JFRCwKKwlbIDB4MGIgXSA9IEtFWV9HUkVFTiwKKwlbIDB4NjYgXSA9IEtFWV9ZRUxMT1csCisJWyAweDAzIF0gPSBLRVlfQkxVRSwKKworCVsgMHg3NiBdID0gS0VZX0xFRlQsCisJWyAweDdlIF0gPSBLRVlfUklHSFQsCisJWyAweDEzIF0gPSBLRVlfRE9XTiwKKwlbIDB4MWIgXSA9IEtFWV9VUCwKK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJ0dl8zMDMpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIERpZ2l0YWxOb3cgRE5UViBMaXZlISBEVkItVCBQcm8gUmVtb3RlICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm9bSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgxNiBdID0gS0VZX1BPV0VSLAorCVsgMHg1YiBdID0gS0VZX0hPTUUsCisKKwlbIDB4NTUgXSA9IEtFWV9UViwJCS8qIGxpdmUgdHYgKi8KKwlbIDB4NTggXSA9IEtFWV9UVU5FUiwJCS8qIGRpZ2l0YWwgUmFkaW8gKi8KKwlbIDB4NWEgXSA9IEtFWV9SQURJTywJCS8qIEZNIHJhZGlvICovCisJWyAweDU5IF0gPSBLRVlfRFZELAkJLyogZHZkIG1lbnUgKi8KKwlbIDB4MDMgXSA9IEtFWV8xLAorCVsgMHgwMSBdID0gS0VZXzIsCisJWyAweDA2IF0gPSBLRVlfMywKKwlbIDB4MDkgXSA9IEtFWV80LAorCVsgMHgxZCBdID0gS0VZXzUsCisJWyAweDFmIF0gPSBLRVlfNiwKKwlbIDB4MGQgXSA9IEtFWV83LAorCVsgMHgxOSBdID0gS0VZXzgsCisJWyAweDFiIF0gPSBLRVlfOSwKKwlbIDB4MGMgXSA9IEtFWV9DQU5DRUwsCisJWyAweDE1IF0gPSBLRVlfMCwKKwlbIDB4NGEgXSA9IEtFWV9DTEVBUiwKKwlbIDB4MTMgXSA9IEtFWV9CQUNLLAorCVsgMHgwMCBdID0gS0VZX1RBQiwKKwlbIDB4NGIgXSA9IEtFWV9VUCwKKwlbIDB4NGUgXSA9IEtFWV9MRUZULAorCVsgMHg0ZiBdID0gS0VZX09LLAorCVsgMHg1MiBdID0gS0VZX1JJR0hULAorCVsgMHg1MSBdID0gS0VZX0RPV04sCisJWyAweDFlIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDBhIF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MDIgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDB4MDUgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDExIF0gPSBLRVlfUkVDT1JELAorCVsgMHgxNCBdID0gS0VZX1BMQVksCisJWyAweDRjIF0gPSBLRVlfUEFVU0UsCisJWyAweDFhIF0gPSBLRVlfU1RPUCwKKwlbIDB4NDAgXSA9IEtFWV9SRVdJTkQsCisJWyAweDEyIF0gPSBLRVlfRkFTVEZPUldBUkQsCisJWyAweDQxIF0gPSBLRVlfUFJFVklPVVNTT05HLAkvKiByZXBsYXkgfDwgKi8KKwlbIDB4NDIgXSA9IEtFWV9ORVhUU09ORywJLyogc2tpcCA+fCAqLworCVsgMHg1NCBdID0gS0VZX0NBTUVSQSwJCS8qIGNhcHR1cmUgKi8KKwlbIDB4NTAgXSA9IEtFWV9MQU5HVUFHRSwJLyogc2FwICovCisJWyAweDQ3IF0gPSBLRVlfVFYyLAkJLyogcGlwICovCisJWyAweDRkIF0gPSBLRVlfU0NSRUVOLAorCVsgMHg0MyBdID0gS0VZX1NVQlRJVExFLAorCVsgMHgxMCBdID0gS0VZX01VVEUsCisJWyAweDQ5IF0gPSBLRVlfQVVESU8sCQkvKiBsL3IgKi8KKwlbIDB4MDcgXSA9IEtFWV9TTEVFUCwKKwlbIDB4MDggXSA9IEtFWV9WSURFTywJCS8qIGEvdiAqLworCVsgMHgwZSBdID0gS0VZX1BSRVZJT1VTLAkvKiByZWNhbGwgKi8KKwlbIDB4NDUgXSA9IEtFWV9aT09NLAkJLyogem9vbSArICovCisJWyAweDQ2IF0gPSBLRVlfQU5HTEUsCQkvKiB6b29tIC0gKi8KKwlbIDB4NTYgXSA9IEtFWV9SRUQsCisJWyAweDU3IF0gPSBLRVlfR1JFRU4sCisJWyAweDVjIF0gPSBLRVlfWUVMTE9XLAorCVsgMHg1ZCBdID0gS0VZX0JMVUUsCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm8pOworCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbV90ZXJyYXRlY1tJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDAxIF0gPSBLRVlfQ0hBTk5FTCwKKwlbIDB4MDIgXSA9IEtFWV9TRUxFQ1QsCisJWyAweDAzIF0gPSBLRVlfTVVURSwKKwlbIDB4MDQgXSA9IEtFWV9QT1dFUiwKKwlbIDB4MDUgXSA9IEtFWV8xLAorCVsgMHgwNiBdID0gS0VZXzIsCisJWyAweDA3IF0gPSBLRVlfMywKKwlbIDB4MDggXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDA5IF0gPSBLRVlfNCwKKwlbIDB4MGEgXSA9IEtFWV81LAorCVsgMHgwYiBdID0gS0VZXzYsCisJWyAweDBjIF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDBkIF0gPSBLRVlfNywKKwlbIDB4MGUgXSA9IEtFWV84LAorCVsgMHgwZiBdID0gS0VZXzksCisJWyAweDEwIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDExIF0gPSBLRVlfMCwKKwlbIDB4MTIgXSA9IEtFWV9NRU5VLAorCVsgMHgxMyBdID0gS0VZX1BSSU5ULAorCVsgMHgxNCBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDE2IF0gPSBLRVlfUEFVU0UsCisJWyAweDE4IF0gPSBLRVlfUkVDT1JELAorCVsgMHgxOSBdID0gS0VZX1JFV0lORCwKKwlbIDB4MWEgXSA9IEtFWV9QTEFZLAorCVsgMHgxYiBdID0gS0VZX0ZPUldBUkQsCisJWyAweDFjIF0gPSBLRVlfQkFDS1NQQUNFLAorCVsgMHgxZSBdID0gS0VZX1NUT1AsCisJWyAweDQwIF0gPSBLRVlfWk9PTSwKK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2VtX3RlcnJhdGVjKTsKKworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW1fcGlubmFjbGVfdXNiW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbIDB4M2EgXSA9IEtFWV8wLAorCVsgMHgzMSBdID0gS0VZXzEsCisJWyAweDMyIF0gPSBLRVlfMiwKKwlbIDB4MzMgXSA9IEtFWV8zLAorCVsgMHgzNCBdID0gS0VZXzQsCisJWyAweDM1IF0gPSBLRVlfNSwKKwlbIDB4MzYgXSA9IEtFWV82LAorCVsgMHgzNyBdID0gS0VZXzcsCisJWyAweDM4IF0gPSBLRVlfOCwKKwlbIDB4MzkgXSA9IEtFWV85LAorCisJWyAweDJmIF0gPSBLRVlfUE9XRVIsCisKKwlbIDB4MmUgXSA9IEtFWV9QLAorCVsgMHgxZiBdID0gS0VZX0wsCisJWyAweDJiIF0gPSBLRVlfSSwKKworCVsgMHgyZCBdID0gS0VZX1pPT00sCisJWyAweDFlIF0gPSBLRVlfWk9PTSwKKwlbIDB4MWIgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MGYgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgxNyBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MWMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDB4MjUgXSA9IEtFWV9JTkZPLAorCisJWyAweDNjIF0gPSBLRVlfTVVURSwKKworCVsgMHgzZCBdID0gS0VZX0xFRlQsCisJWyAweDNiIF0gPSBLRVlfUklHSFQsCisKKwlbIDB4M2YgXSA9IEtFWV9VUCwKKwlbIDB4M2UgXSA9IEtFWV9ET1dOLAorCVsgMHgxYSBdID0gS0VZX1BBVVNFLAorCisJWyAweDFkIF0gPSBLRVlfTUVOVSwKKwlbIDB4MTkgXSA9IEtFWV9QTEFZLAorCVsgMHgxNiBdID0gS0VZX1JFV0lORCwKKwlbIDB4MTMgXSA9IEtFWV9GT1JXQVJELAorCVsgMHgxNSBdID0gS0VZX1BBVVNFLAorCVsgMHgwZSBdID0gS0VZX1JFV0lORCwKKwlbIDB4MGQgXSA9IEtFWV9QTEFZLAorCVsgMHgwYiBdID0gS0VZX1NUT1AsCisJWyAweDA3IF0gPSBLRVlfRk9SV0FSRCwKKwlbIDB4MjcgXSA9IEtFWV9SRUNPUkQsCisJWyAweDI2IF0gPSBLRVlfVFVORVIsCisJWyAweDI5IF0gPSBLRVlfVEVYVCwKKwlbIDB4MmEgXSA9IEtFWV9NRURJQSwKKwlbIDB4MTggXSA9IEtFWV9FUEcsCisJWyAweDI3IF0gPSBLRVlfUkVDT1JELAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZW1fcGlubmFjbGVfdXNiKTsKKworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZmx5dmlkZW9bSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgwZiBdID0gS0VZXzAsCisJWyAweDAzIF0gPSBLRVlfMSwKKwlbIDB4MDQgXSA9IEtFWV8yLAorCVsgMHgwNSBdID0gS0VZXzMsCisJWyAweDA3IF0gPSBLRVlfNCwKKwlbIDB4MDggXSA9IEtFWV81LAorCVsgMHgwOSBdID0gS0VZXzYsCisJWyAweDBiIF0gPSBLRVlfNywKKwlbIDB4MGMgXSA9IEtFWV84LAorCVsgMHgwZCBdID0gS0VZXzksCisKKwlbIDB4MGUgXSA9IEtFWV9NT0RFLCAgICAgICAgIC8vIEFpci9DYWJsZQorCVsgMHgxMSBdID0gS0VZX1ZJREVPLCAgICAgICAgLy8gVmlkZW8KKwlbIDB4MTUgXSA9IEtFWV9BVURJTywgICAgICAgIC8vIEF1ZGlvCisJWyAweDAwIF0gPSBLRVlfUE9XRVIsICAgICAgICAvLyBQb3dlcgorCVsgMHgxOCBdID0gS0VZX1RVTkVSLCAgICAgICAgLy8gQVYgU291cmNlCisJWyAweDAyIF0gPSBLRVlfWk9PTSwgICAgICAgICAvLyBGdWxsc2NyZWVuCisJWyAweDFhIF0gPSBLRVlfTEFOR1VBR0UsICAgICAvLyBTdGVyZW8KKwlbIDB4MWIgXSA9IEtFWV9NVVRFLCAgICAgICAgIC8vIE11dGUKKwlbIDB4MTQgXSA9IEtFWV9WT0xVTUVVUCwgICAgIC8vIFZvbHVtZSArCisJWyAweDE3IF0gPSBLRVlfVk9MVU1FRE9XTiwgICAvLyBWb2x1bWUgLQorCVsgMHgxMiBdID0gS0VZX0NIQU5ORUxVUCwgICAgLy8gQ2hhbm5lbCArCisJWyAweDEzIF0gPSBLRVlfQ0hBTk5FTERPV04sICAvLyBDaGFubmVsIC0KKwlbIDB4MDYgXSA9IEtFWV9BR0FJTiwgICAgICAgIC8vIFJlY2FsbAorCVsgMHgxMCBdID0gS0VZX0VOVEVSLCAgICAgIC8vIEVudGVyCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19mbHl2aWRlbyk7CisKK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2ZseWR2YltJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDAxIF0gPSBLRVlfWk9PTSwJCS8vIEZ1bGwgU2NyZWVuCisJWyAweDAwIF0gPSBLRVlfUE9XRVIsCQkvLyBQb3dlcgorCisJWyAweDAzIF0gPSBLRVlfMSwKKwlbIDB4MDQgXSA9IEtFWV8yLAorCVsgMHgwNSBdID0gS0VZXzMsCisJWyAweDA3IF0gPSBLRVlfNCwKKwlbIDB4MDggXSA9IEtFWV81LAorCVsgMHgwOSBdID0gS0VZXzYsCisJWyAweDBiIF0gPSBLRVlfNywKKwlbIDB4MGMgXSA9IEtFWV84LAorCVsgMHgwZCBdID0gS0VZXzksCisJWyAweDA2IF0gPSBLRVlfQUdBSU4sCQkvLyBSZWNhbGwKKwlbIDB4MGYgXSA9IEtFWV8wLAorCVsgMHgxMCBdID0gS0VZX01VVEUsCQkvLyBNdXRlCisJWyAweDAyIF0gPSBLRVlfUkFESU8sCQkvLyBUVi9SYWRpbworCVsgMHgxYiBdID0gS0VZX0xBTkdVQUdFLAkJLy8gU0FQIChTZWNvbmQgQXVkaW8gUHJvZ3JhbSkKKworCVsgMHgxNCBdID0gS0VZX1ZPTFVNRVVQLAkJLy8gVk9MKworCVsgMHgxNyBdID0gS0VZX1ZPTFVNRURPV04sCS8vIFZPTC0KKwlbIDB4MTIgXSA9IEtFWV9DSEFOTkVMVVAsCQkvLyBDSCsKKwlbIDB4MTMgXSA9IEtFWV9DSEFOTkVMRE9XTiwJLy8gQ0gtCisJWyAweDFkIF0gPSBLRVlfRU5URVIsCQkvLyBFbnRlcgorCisJWyAweDFhIF0gPSBLRVlfTU9ERSwJCS8vIFBJUAorCVsgMHgxOCBdID0gS0VZX1RVTkVSLAkJLy8gU291cmNlCisKKwlbIDB4MWUgXSA9IEtFWV9SRUNPUkQsCQkvLyBSZWNvcmQvUGF1c2UKKwlbIDB4MTUgXSA9IEtFWV9BTkdMRSwJCS8vIFN3YXAgKG5vIGxhYmVsIG9uIGtleSkKKwlbIDB4MWMgXSA9IEtFWV9QQVVTRSwJCS8vIFRpbWVzaGlmdC9QYXVzZQorCVsgMHgxOSBdID0gS0VZX0JBQ0ssCQkvLyBSZXdpbmQgPDwKKwlbIDB4MGEgXSA9IEtFWV9QTEFZUEFVU0UsCQkvLyBQbGF5L1BhdXNlCisJWyAweDFmIF0gPSBLRVlfRk9SV0FSRCwJCS8vIEZvcndhcmQgPj4KKwlbIDB4MTYgXSA9IEtFWV9QUkVWSU9VUywJCS8vIEJhY2sgfDw8CisJWyAweDExIF0gPSBLRVlfU1RPUCwJCS8vIFN0b3AKKwlbIDB4MGUgXSA9IEtFWV9ORVhULAkJLy8gRW5kID4+fAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZmx5ZHZiKTsKKworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfY2luZXJneVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MDEgXSA9IEtFWV8xLAorCVsgMHgwMiBdID0gS0VZXzIsCisJWyAweDAzIF0gPSBLRVlfMywKKwlbIDB4MDQgXSA9IEtFWV80LAorCVsgMHgwNSBdID0gS0VZXzUsCisJWyAweDA2IF0gPSBLRVlfNiwKKwlbIDB4MDcgXSA9IEtFWV83LAorCVsgMHgwOCBdID0gS0VZXzgsCisJWyAweDA5IF0gPSBLRVlfOSwKKworCVsgMHgwYSBdID0gS0VZX1BPV0VSLAorCVsgMHgwYiBdID0gS0VZX1BST0cxLCAgICAgICAgICAgLy8gYXBwCisJWyAweDBjIF0gPSBLRVlfWk9PTSwgICAgICAgICAgICAvLyB6b29tL2Z1bGxzY3JlZW4KKwlbIDB4MGQgXSA9IEtFWV9DSEFOTkVMVVAsICAgICAgIC8vIGNoYW5uZWwKKwlbIDB4MGUgXSA9IEtFWV9DSEFOTkVMRE9XTiwgICAgIC8vIGNoYW5uZWwtCisJWyAweDBmIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDEwIF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MTEgXSA9IEtFWV9UVU5FUiwgICAgICAgICAgIC8vIEFWCisJWyAweDEyIF0gPSBLRVlfTlVNTE9DSywgICAgICAgICAvLyAtLy0tCisJWyAweDEzIF0gPSBLRVlfQVVESU8sICAgICAgICAgICAvLyBhdWRpbworCVsgMHgxNCBdID0gS0VZX01VVEUsCisJWyAweDE1IF0gPSBLRVlfVVAsCisJWyAweDE2IF0gPSBLRVlfRE9XTiwKKwlbIDB4MTcgXSA9IEtFWV9MRUZULAorCVsgMHgxOCBdID0gS0VZX1JJR0hULAorCVsgMHgxOSBdID0gQlROX0xFRlQsCisJWyAweDFhIF0gPSBCVE5fUklHSFQsCisJWyAweDFiIF0gPSBLRVlfV1dXLCAgICAgICAgICAgICAvLyB0ZXh0CisJWyAweDFjIF0gPSBLRVlfUkVXSU5ELAorCVsgMHgxZCBdID0gS0VZX0ZPUldBUkQsCisJWyAweDFlIF0gPSBLRVlfUkVDT1JELAorCVsgMHgxZiBdID0gS0VZX1BMQVksCisJWyAweDIwIF0gPSBLRVlfUFJFVklPVVNTT05HLAorCVsgMHgyMSBdID0gS0VZX05FWFRTT05HLAorCVsgMHgyMiBdID0gS0VZX1BBVVNFLAorCVsgMHgyMyBdID0gS0VZX1NUT1AsCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19jaW5lcmd5KTsKKworLyogQWxmb25zIEdlc2VyIDxhLmdlc2VyQGNveC5uZXQ+CisgKiB1cGRhdGVzIGZyb20gSm9iIEQuIFIuIEJvcmdlcyA8am9iZHJiQGlnLmNvbS5icj4gKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2V6dHZbSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgxMiBdID0gS0VZX1BPV0VSLAorCVsgMHgwMSBdID0gS0VZX1RWLCAgICAgICAgICAgICAvLyBEVlIKKwlbIDB4MTUgXSA9IEtFWV9EVkQsICAgICAgICAgICAgLy8gRFZECisJWyAweDE3IF0gPSBLRVlfQVVESU8sICAgICAgICAgIC8vIG11c2ljCisJCQkJICAgICAvLyBEVlIgbW9kZSAvIERWRCBtb2RlIC8gbXVzaWMgbW9kZQorCisJWyAweDFiIF0gPSBLRVlfTVVURSwgICAgICAgICAgIC8vIG11dGUKKwlbIDB4MDIgXSA9IEtFWV9MQU5HVUFHRSwgICAgICAgLy8gTVRTL1NBUCAvIGF1ZGlvIC8gYXV0b3NlZWsKKwlbIDB4MWUgXSA9IEtFWV9TVUJUSVRMRSwgICAgICAgLy8gY2xvc2VkIGNhcHRpb25pbmcgLyBzdWJ0aXRsZSAvIHNlZWsKKwlbIDB4MTYgXSA9IEtFWV9aT09NLCAgICAgICAgICAgLy8gZnVsbCBzY3JlZW4KKwlbIDB4MWMgXSA9IEtFWV9WSURFTywgICAgICAgICAgLy8gdmlkZW8gc291cmNlIC8gZWplY3QgLyBkZWxhbGwKKwlbIDB4MWQgXSA9IEtFWV9SRVNUQVJULCAgICAgICAgLy8gcGxheWJhY2sgLyBhbmdsZSAvIGRlbAorCVsgMHgyZiBdID0gS0VZX1NFQVJDSCwgICAgICAgICAvLyBzY2FuIC8gbWVudSAvIHBsYXlsaXN0CisJWyAweDMwIF0gPSBLRVlfQ0hBTk5FTCwgICAgICAgIC8vIENIIHN1cmZpbmcgLyBib29rbWFyayAvIG1lbW8KKworCVsgMHgzMSBdID0gS0VZX0hFTFAsICAgICAgICAgICAvLyBoZWxwCisJWyAweDMyIF0gPSBLRVlfTU9ERSwgICAgICAgICAgIC8vIG51bS9tZW1vCisJWyAweDMzIF0gPSBLRVlfRVNDLCAgICAgICAgICAgIC8vIGNhbmNlbAorCisJWyAweDBjIF0gPSBLRVlfVVAsICAgICAgICAgICAgIC8vIHVwCisJWyAweDEwIF0gPSBLRVlfRE9XTiwgICAgICAgICAgIC8vIGRvd24KKwlbIDB4MDggXSA9IEtFWV9MRUZULCAgICAgICAgICAgLy8gbGVmdAorCVsgMHgwNCBdID0gS0VZX1JJR0hULCAgICAgICAgICAvLyByaWdodAorCVsgMHgwMyBdID0gS0VZX1NFTEVDVCwgICAgICAgICAvLyBzZWxlY3QKKworCVsgMHgxZiBdID0gS0VZX1JFV0lORCwgICAgICAgICAvLyByZXdpbmQKKwlbIDB4MjAgXSA9IEtFWV9QTEFZUEFVU0UsICAgICAgLy8gcGxheS9wYXVzZQorCVsgMHgyOSBdID0gS0VZX0ZPUldBUkQsICAgICAgICAvLyBmb3J3YXJkCisJWyAweDE0IF0gPSBLRVlfQUdBSU4sICAgICAgICAgIC8vIHJlcGVhdAorCVsgMHgyYiBdID0gS0VZX1JFQ09SRCwgICAgICAgICAvLyByZWNvcmRpbmcKKwlbIDB4MmMgXSA9IEtFWV9TVE9QLCAgICAgICAgICAgLy8gc3RvcAorCVsgMHgyZCBdID0gS0VZX1BMQVksICAgICAgICAgICAvLyBwbGF5CisJWyAweDJlIF0gPSBLRVlfU0hVRkZMRSwgICAgICAgIC8vIHNuYXBzaG90IC8gc2h1ZmZsZQorCisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MDUgXSA9IEtFWV8xLAorCVsgMHgwNiBdID0gS0VZXzIsCisJWyAweDA3IF0gPSBLRVlfMywKKwlbIDB4MDkgXSA9IEtFWV80LAorCVsgMHgwYSBdID0gS0VZXzUsCisJWyAweDBiIF0gPSBLRVlfNiwKKwlbIDB4MGQgXSA9IEtFWV83LAorCVsgMHgwZSBdID0gS0VZXzgsCisJWyAweDBmIF0gPSBLRVlfOSwKKworCVsgMHgyYSBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgxMSBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDE4IF0gPSBLRVlfQ0hBTk5FTFVQLCAgICAgIC8vIENILnRyYWNraW5nIHVwCisJWyAweDE5IF0gPSBLRVlfQ0hBTk5FTERPV04sICAgIC8vIENILnRyYWNraW5nIGRvd24KKworCVsgMHgxMyBdID0gS0VZX0VOVEVSLCAgICAgICAgLy8gZW50ZXIKKwlbIDB4MjEgXSA9IEtFWV9ET1QsICAgICAgICAgIC8vIC4gKGRlY2ltYWwgZG90KQorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfZXp0dik7CisKKy8qIEFsZXggSGVybWFubiA8Z2FhZkBnbXgubmV0PiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbIDB4MjggXSA9IEtFWV8xLAorCVsgMHgxOCBdID0gS0VZXzIsCisJWyAweDM4IF0gPSBLRVlfMywKKwlbIDB4MjQgXSA9IEtFWV80LAorCVsgMHgxNCBdID0gS0VZXzUsCisJWyAweDM0IF0gPSBLRVlfNiwKKwlbIDB4MmMgXSA9IEtFWV83LAorCVsgMHgxYyBdID0gS0VZXzgsCisJWyAweDNjIF0gPSBLRVlfOSwKKwlbIDB4MjIgXSA9IEtFWV8wLAorCisJWyAweDIwIF0gPSBLRVlfVFYsCQkvKiBUVi9GTSAqLworCVsgMHgxMCBdID0gS0VZX0NELAkJLyogQ0QgKi8KKwlbIDB4MzAgXSA9IEtFWV9URVhULAkJLyogVEVMRVRFWFQgKi8KKwlbIDB4MDAgXSA9IEtFWV9QT1dFUiwJCS8qIFBPV0VSICovCisKKwlbIDB4MDggXSA9IEtFWV9WSURFTywJCS8qIFZJREVPICovCisJWyAweDA0IF0gPSBLRVlfQVVESU8sCQkvKiBBVURJTyAqLworCVsgMHgwYyBdID0gS0VZX1pPT00sCQkvKiBGVUxMIFNDUkVFTiAqLworCisJWyAweDEyIF0gPSBLRVlfU1VCVElUTEUsCS8qIERJU1BMQVkgKi8KKwlbIDB4MzIgXSA9IEtFWV9SRVdJTkQsCQkvKiBMT09QCSovCisJWyAweDAyIF0gPSBLRVlfUFJJTlQsCQkvKiBQUkVWSUVXICovCisKKwlbIDB4MmEgXSA9IEtFWV9TRUFSQ0gsCQkvKiBBVVRPU0NBTiAqLworCVsgMHgxYSBdID0gS0VZX1NMRUVQLAkJLyogRlJFRVpFICovCisJWyAweDNhIF0gPSBLRVlfU0hVRkZMRSwJCS8qIFNOQVBTSE9UICovCisJWyAweDBhIF0gPSBLRVlfTVVURSwJCS8qIE1VVEUgKi8KKworCVsgMHgyNiBdID0gS0VZX1JFQ09SRCwJCS8qIFJFQ09SRCAqLworCVsgMHgxNiBdID0gS0VZX1BBVVNFLAkJLyogUEFVU0UgKi8KKwlbIDB4MzYgXSA9IEtFWV9TVE9QLAkJLyogU1RPUCAqLworCVsgMHgwNiBdID0gS0VZX1BMQVksCQkvKiBQTEFZICovCisKKwlbIDB4MmUgXSA9IEtFWV9SRUQsCQkvKiBSRUQgKi8KKwlbIDB4MjEgXSA9IEtFWV9HUkVFTiwJCS8qIEdSRUVOICovCisJWyAweDBlIF0gPSBLRVlfWUVMTE9XLAkJLyogWUVMTE9XICovCisJWyAweDAxIF0gPSBLRVlfQkxVRSwJCS8qIEJMVUUgKi8KKworCVsgMHgxZSBdID0gS0VZX1ZPTFVNRURPV04sCS8qIFZPTFVNRS0gKi8KKwlbIDB4M2UgXSA9IEtFWV9WT0xVTUVVUCwJLyogVk9MVU1FKyAqLworCVsgMHgxMSBdID0gS0VZX0NIQU5ORUxET1dOLAkvKiBDSEFOTkVML1BBR0UtICovCisJWyAweDMxIF0gPSBLRVlfQ0hBTk5FTFVQCS8qIENIQU5ORUwvUEFHRSsgKi8KK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYSk7CisKK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnJbSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgxNCBdID0gS0VZX01VVEUsCisJWyAweDI0IF0gPSBLRVlfWk9PTSwKKworCVsgMHgwMSBdID0gS0VZX0RWRCwKKwlbIDB4MjMgXSA9IEtFWV9SQURJTywKKwlbIDB4MDAgXSA9IEtFWV9UViwKKworCVsgMHgwYSBdID0gS0VZX1JFV0lORCwKKwlbIDB4MDggXSA9IEtFWV9QTEFZUEFVU0UsCisJWyAweDBmIF0gPSBLRVlfRk9SV0FSRCwKKworCVsgMHgwMiBdID0gS0VZX1BSRVZJT1VTLAorCVsgMHgwNyBdID0gS0VZX1NUT1AsCisJWyAweDA2IF0gPSBLRVlfTkVYVCwKKworCVsgMHgwYyBdID0gS0VZX1VQLAorCVsgMHgwZSBdID0gS0VZX0RPV04sCisJWyAweDBiIF0gPSBLRVlfTEVGVCwKKwlbIDB4MGQgXSA9IEtFWV9SSUdIVCwKKwlbIDB4MTEgXSA9IEtFWV9PSywKKworCVsgMHgwMyBdID0gS0VZX01FTlUsCisJWyAweDA5IF0gPSBLRVlfU0VUVVAsCisJWyAweDA1IF0gPSBLRVlfVklERU8sCisJWyAweDIyIF0gPSBLRVlfQ0hBTk5FTCwKKworCVsgMHgxMiBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgxNSBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDEwIF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgMHgxMyBdID0gS0VZX0NIQU5ORUxET1dOLAorCisJWyAweDA0IF0gPSBLRVlfUkVDT1JELAorCisJWyAweDE2IF0gPSBLRVlfMSwKKwlbIDB4MTcgXSA9IEtFWV8yLAorCVsgMHgxOCBdID0gS0VZXzMsCisJWyAweDE5IF0gPSBLRVlfNCwKKwlbIDB4MWEgXSA9IEtFWV81LAorCVsgMHgxYiBdID0gS0VZXzYsCisJWyAweDFjIF0gPSBLRVlfNywKKwlbIDB4MWQgXSA9IEtFWV84LAorCVsgMHgxZSBdID0gS0VZXzksCisJWyAweDFmIF0gPSBLRVlfMCwKKworCVsgMHgyMCBdID0gS0VZX0xBTkdVQUdFLAorCVsgMHgyMSBdID0gS0VZX1NMRUVQLAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cik7CisKKy8qIE1pY2hhZWwgVG9rYXJldiA8bWp0QHRscy5tc2sucnU+CisgICBodHRwOi8vd3d3LmNvcnBpdC5ydS9tanQvYmVob2xkVFYvcmVtb3RlX2NvbnRyb2wuanBnCisgICBrZXl0YWJsZSBpcyB1c2VkIGJ5IE1BTkxJIE1UVjAwWyAweDBjIF0gYW5kIEJlaG9sZFRWIDQwWzEzXSBhdAorICAgbGVhc3QsIGFuZCBwcm9iYWJseSBvdGhlciBjYXJkcyB0b28uCisgICBUaGUgImFzY2lpLWFydCBwaWN0dXJlIiBiZWxvdyAoaW4gY29tbWVudHMsIGZpcnN0IHJvdworICAgaXMgdGhlIGtleWNvZGUgaW4gaGV4LCBhbmQgc3Vic2VxdWVudCByb3cocykgc2hvd3MKKyAgIHRoZSBidXR0b24gbGFiZWxzIChzZXZlcmFsIHZhcmlhbnRzIHdoZW4gYXBwcm9wcmlhdGUpCisgICBoZWxwcyB0byBkZXNjaWRlIHdoaWNoIGtleWNvZGVzIHRvIGFzc2lnbiB0byB0aGUgYnV0dG9ucy4KKyAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbWFubGlbSVJfS0VZVEFCX1NJWkVdID0geworCisJLyogIDB4MWMgICAgICAgICAgICAweDEyICAqCisJICogRlVOQ1RJT04gICAgICAgICBQT1dFUiAqCisJICogICBGTSAgICAgICAgICAgICAgKHwpICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCVsgMHgxYyBdID0gS0VZX1JBRElPLAkvKlhYWCovCisJWyAweDEyIF0gPSBLRVlfUE9XRVIsCisKKwkvKiAgMHgwMSAgICAweDAyICAgIDB4MDMgICoKKwkgKiAgIDEgICAgICAgMiAgICAgICAzICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgwNCAgICAweDA1ICAgIDB4MDYgICoKKwkgKiAgIDQgICAgICAgNSAgICAgICA2ICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgwNyAgICAweDA4ICAgIDB4MDkgICoKKwkgKiAgIDcgICAgICAgOCAgICAgICA5ICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJWyAweDAxIF0gPSBLRVlfMSwKKwlbIDB4MDIgXSA9IEtFWV8yLAorCVsgMHgwMyBdID0gS0VZXzMsCisJWyAweDA0IF0gPSBLRVlfNCwKKwlbIDB4MDUgXSA9IEtFWV81LAorCVsgMHgwNiBdID0gS0VZXzYsCisJWyAweDA3IF0gPSBLRVlfNywKKwlbIDB4MDggXSA9IEtFWV84LAorCVsgMHgwOSBdID0gS0VZXzksCisKKwkvKiAgMHgwYSAgICAweDAwICAgIDB4MTcgICoKKwkgKiBSRUNBTEwgICAgMCAgICAgICsxMDAgICoKKwkgKiAgICAgICAgICAgICAgICAgIFBMVVMgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJWyAweDBhIF0gPSBLRVlfQUdBSU4sCS8qWFhYIEtFWV9SRVdJTkQ/ICovCisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MTcgXSA9IEtFWV9ESUdJVFMsCS8qWFhYKi8KKworCS8qICAweDE0ICAgICAgICAgICAgMHgxMCAgKgorCSAqICBNRU5VICAgICAgICAgICAgSU5GTyAgKgorCSAqICBPU0QgICAgICAgICAgICAgICAgICAgKi8KKwlbIDB4MTQgXSA9IEtFWV9NRU5VLAorCVsgMHgxMCBdID0gS0VZX0lORk8sCisKKwkvKiAgICAgICAgICAweDBiICAgICAgICAgICoKKwkgKiAgICAgICAgICAgVXAgICAgICAgICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgMHgxOCAgICAweDE2ICAgIDB4MGMgICoKKwkgKiAgTGVmdCAgICAgT2sgICAgIFJpZ2h0ICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICoKKwkgKiAgICAgICAgIDB4MDE1ICAgICAgICAgICoKKwkgKiAgICAgICAgIERvd24gICAgICAgICAgICoKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCisJWyAweDBiIF0gPSBLRVlfVVAsCS8qWFhYIEtFWV9TQ1JPTExVUD8gKi8KKwlbIDB4MTggXSA9IEtFWV9MRUZULAkvKlhYWCBLRVlfQkFDSz8gKi8KKwlbIDB4MTYgXSA9IEtFWV9PSywJLypYWFggS0VZX1NFTEVDVD8gS0VZX0VOVEVSPyAqLworCVsgMHgwYyBdID0gS0VZX1JJR0hULAkvKlhYWCBLRVlfRk9SV0FSRD8gKi8KKwlbIDB4MTUgXSA9IEtFWV9ET1dOLAkvKlhYWCBLRVlfU0NST0xMRE9XTj8gKi8KKworCS8qICAweDExICAgICAgICAgICAgMHgwZCAgKgorCSAqICBUVi9BViAgICAgICAgICAgTU9ERSAgKgorCSAqICBTT1VSQ0UgICAgICAgICBTVEVSRU8gKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlbIDB4MTEgXSA9IEtFWV9UViwJLypYWFgqLworCVsgMHgwZCBdID0gS0VZX01PREUsCS8qWFhYIHRoZXJlJ3Mgbm8gS0VZX1NURVJFTyAqLworCisJLyogIDB4MGYgICAgMHgxYiAgICAweDFhICAqCisJICogIEFVRElPICAgVm9sKyAgICBDaGFuKyAqCisJICogICAgICAgIFRJTUVTSElGVD8/PyAgICAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqCisJICogIDB4MGUgICAgMHgxZiAgICAweDFlICAqCisJICogIFNMRUVQICAgVm9sLSAgICBDaGFuLSAqCisJICogICAgICAgICAgICAgICAgICAgICAgICAqLworCVsgMHgwZiBdID0gS0VZX0FVRElPLAorCVsgMHgxYiBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgxYSBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MGUgXSA9IEtFWV9TTEVFUCwJLypYWFggbWF5YmUgS0VZX1BBVVNFICovCisJWyAweDFmIF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MWUgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKworCS8qICAgICAgICAgMHgxMyAgICAgMHgxOSAgKgorCSAqICAgICAgICAgTVVURSAgIFNOQVBTSE9UKgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlbIDB4MTMgXSA9IEtFWV9NVVRFLAorCVsgMHgxOSBdID0gS0VZX1JFQ09SRCwJLypYWFgqLworCisJLy8gMHgxZCB1bnVzZWQgPworfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfbWFubGkpOworCisvKiBNaWtlIEJhaWtvdiA8bWlrZUBiYWlrb3YuY29tPiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZ290dmlldzcxMzVbSVJfS0VZVEFCX1NJWkVdID0geworCisJWyAweDIxIF0gPSBLRVlfUE9XRVIsCisJWyAweDY5IF0gPSBLRVlfVFYsCisJWyAweDMzIF0gPSBLRVlfMCwKKwlbIDB4NTEgXSA9IEtFWV8xLAorCVsgMHgzMSBdID0gS0VZXzIsCisJWyAweDcxIF0gPSBLRVlfMywKKwlbIDB4M2IgXSA9IEtFWV80LAorCVsgMHg1OCBdID0gS0VZXzUsCisJWyAweDQxIF0gPSBLRVlfNiwKKwlbIDB4NDggXSA9IEtFWV83LAorCVsgMHgzMCBdID0gS0VZXzgsCisJWyAweDUzIF0gPSBLRVlfOSwKKwlbIDB4NzMgXSA9IEtFWV9BR0FJTiwgLyogTE9PUCAqLworCVsgMHgwYSBdID0gS0VZX0FVRElPLAorCVsgMHg2MSBdID0gS0VZX1BSSU5ULCAvKiBQUkVWSUVXICovCisJWyAweDdhIF0gPSBLRVlfVklERU8sCisJWyAweDIwIF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgMHg0MCBdID0gS0VZX0NIQU5ORUxET1dOLAorCVsgMHgxOCBdID0gS0VZX1ZPTFVNRURPV04sCisJWyAweDUwIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDEwIF0gPSBLRVlfTVVURSwKKwlbIDB4NGEgXSA9IEtFWV9TRUFSQ0gsCisJWyAweDdiIF0gPSBLRVlfU0hVRkZMRSwgLyogU05BUFNIT1QgKi8KKwlbIDB4MjIgXSA9IEtFWV9SRUNPUkQsCisJWyAweDYyIF0gPSBLRVlfU1RPUCwKKwlbIDB4NzggXSA9IEtFWV9QTEFZLAorCVsgMHgzOSBdID0gS0VZX1JFV0lORCwKKwlbIDB4NTkgXSA9IEtFWV9QQVVTRSwKKwlbIDB4MTkgXSA9IEtFWV9GT1JXQVJELAorCVsgMHgwOSBdID0gS0VZX1pPT00sCisKKwlbIDB4NTIgXSA9IEtFWV9GMjEsIC8qIExJVkUgVElNRVNISUZUICovCisJWyAweDFhIF0gPSBLRVlfRjIyLCAvKiBNSU4gVElNRVNISUZUICovCisJWyAweDNhIF0gPSBLRVlfRjIzLCAvKiBUSU1FU0hJRlQgKi8KKwlbIDB4NzAgXSA9IEtFWV9GMjQsIC8qIE5PUk1BTCBUSU1FU0hJRlQgKi8KK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2dvdHZpZXc3MTM1KTsKKworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcHVycGxldHZbSVJfS0VZVEFCX1NJWkVdID0geworCVsgMHgwMyBdID0gS0VZX1BPV0VSLAorCVsgMHg2ZiBdID0gS0VZX01VVEUsCisJWyAweDEwIF0gPSBLRVlfQkFDS1NQQUNFLCAgICAgICAvKiBSZWNhbGwgKi8KKworCVsgMHgxMSBdID0gS0VZXzAsCisJWyAweDA0IF0gPSBLRVlfMSwKKwlbIDB4MDUgXSA9IEtFWV8yLAorCVsgMHgwNiBdID0gS0VZXzMsCisJWyAweDA4IF0gPSBLRVlfNCwKKwlbIDB4MDkgXSA9IEtFWV81LAorCVsgMHgwYSBdID0gS0VZXzYsCisJWyAweDBjIF0gPSBLRVlfNywKKwlbIDB4MGQgXSA9IEtFWV84LAorCVsgMHgwZSBdID0gS0VZXzksCisJWyAweDEyIF0gPSBLRVlfRE9ULCAgICAgICAgICAgLyogMTAwKyAqLworCisJWyAweDA3IF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDBiIF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MWEgXSA9IEtFWV9LUFBMVVMsCisJWyAweDE4IF0gPSBLRVlfS1BNSU5VUywKKwlbIDB4MTUgXSA9IEtFWV9VUCwKKwlbIDB4MWQgXSA9IEtFWV9ET1dOLAorCVsgMHgwZiBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MTMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDB4NDggXSA9IEtFWV9aT09NLAorCisJWyAweDFiIF0gPSBLRVlfVklERU8sICAgICAgICAgICAvKiBWaWRlbyBzb3VyY2UgKi8KKwlbIDB4NDkgXSA9IEtFWV9MQU5HVUFHRSwgICAgICAgIC8qIE1UUyBTZWxlY3QgKi8KKwlbIDB4MTkgXSA9IEtFWV9TRUFSQ0gsICAgICAgICAgIC8qIEF1dG8gU2NhbiAqLworCisJWyAweDRiIF0gPSBLRVlfUkVDT1JELAorCVsgMHg0NiBdID0gS0VZX1BMQVksCisJWyAweDQ1IF0gPSBLRVlfUEFVU0UsICAgICAgICAgICAvKiBQYXVzZSAqLworCVsgMHg0NCBdID0gS0VZX1NUT1AsCisJWyAweDQwIF0gPSBLRVlfRk9SV0FSRCwgICAgICAgICAvKiBGb3J3YXJkID8gKi8KKwlbIDB4NDIgXSA9IEtFWV9SRVdJTkQsICAgICAgICAgIC8qIEJhY2t3YXJkID8gKi8KKworfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcHVycGxldHYpOworCisvKiBNYXBwaW5nIGZvciB0aGUgMjgga2V5IHJlbW90ZSBjb250cm9sIGFzIHNlZW4gYXQKKyAgIGh0dHA6Ly93d3cuc2VkbmFjb21wdXRlci5jb20vcGhvdG8vY2FyZGJ1cy10di5qcGcKKyAgIFBhdmVsIE1paGF5bG92IDxiaW5AYmFzaC5pbmZvPiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGN0dl9zZWRuYVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MDEgXSA9IEtFWV8xLAorCVsgMHgwMiBdID0gS0VZXzIsCisJWyAweDAzIF0gPSBLRVlfMywKKwlbIDB4MDQgXSA9IEtFWV80LAorCVsgMHgwNSBdID0gS0VZXzUsCisJWyAweDA2IF0gPSBLRVlfNiwKKwlbIDB4MDcgXSA9IEtFWV83LAorCVsgMHgwOCBdID0gS0VZXzgsCisJWyAweDA5IF0gPSBLRVlfOSwKKworCVsgMHgwYSBdID0gS0VZX0FHQUlOLCAgICAgICAgICAvKiBSZWNhbGwgKi8KKwlbIDB4MGIgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDBjIF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDBkIF0gPSBLRVlfTU9ERSwgICAgICAgICAgIC8qIFN0ZXJlbyAqLworCVsgMHgwZSBdID0gS0VZX1NUT1AsCisJWyAweDBmIF0gPSBLRVlfUFJFVklPVVNTT05HLAorCVsgMHgxMCBdID0gS0VZX1pPT00sCisJWyAweDExIF0gPSBLRVlfVFVORVIsICAgICAgICAgIC8qIFNvdXJjZSAqLworCVsgMHgxMiBdID0gS0VZX1BPV0VSLAorCVsgMHgxMyBdID0gS0VZX01VVEUsCisJWyAweDE1IF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDE4IF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MTkgXSA9IEtFWV9TSFVGRkxFLCAgICAgICAgLyogU25hcHNob3QgKi8KKwlbIDB4MWEgXSA9IEtFWV9ORVhUU09ORywKKwlbIDB4MWIgXSA9IEtFWV9URVhULCAgICAgICAgICAgLyogVGltZSBTaGlmdCAqLworCVsgMHgxYyBdID0gS0VZX1JBRElPLCAgICAgICAgICAvKiBGTSBSYWRpbyAqLworCVsgMHgxZCBdID0gS0VZX1JFQ09SRCwKKwlbIDB4MWUgXSA9IEtFWV9QQVVTRSwKK307CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX3BjdHZfc2VkbmEpOworCisvKiBNYXJrIFBoYWxhbiA8cGhhbGFubUBvMi5pZT4gKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3B2OTUxW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbIDB4MDAgXSA9IEtFWV8wLAorCVsgMHgwMSBdID0gS0VZXzEsCisJWyAweDAyIF0gPSBLRVlfMiwKKwlbIDB4MDMgXSA9IEtFWV8zLAorCVsgMHgwNCBdID0gS0VZXzQsCisJWyAweDA1IF0gPSBLRVlfNSwKKwlbIDB4MDYgXSA9IEtFWV82LAorCVsgMHgwNyBdID0gS0VZXzcsCisJWyAweDA4IF0gPSBLRVlfOCwKKwlbIDB4MDkgXSA9IEtFWV85LAorCisJWyAweDEyIF0gPSBLRVlfUE9XRVIsCisJWyAweDEwIF0gPSBLRVlfTVVURSwKKwlbIDB4MWYgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgxYiBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgxYSBdID0gS0VZX0NIQU5ORUxVUCwKKwlbIDB4MWUgXSA9IEtFWV9DSEFOTkVMRE9XTiwKKwlbIDB4MGUgXSA9IEtFWV9QQUdFVVAsCisJWyAweDFkIF0gPSBLRVlfUEFHRURPV04sCisJWyAweDEzIF0gPSBLRVlfU09VTkQsCisKKwlbIDB4MTggXSA9IEtFWV9LUFBMVVNNSU5VUywJLyogQ0ggKy8tICovCisJWyAweDE2IF0gPSBLRVlfU1VCVElUTEUsCQkvKiBDQyAqLworCVsgMHgwZCBdID0gS0VZX1RFWFQsCQkvKiBUVFggKi8KKwlbIDB4MGIgXSA9IEtFWV9UViwJCS8qIEFJUi9DQkwgKi8KKwlbIDB4MTEgXSA9IEtFWV9QQywJCS8qIFBDL1RWICovCisJWyAweDE3IF0gPSBLRVlfT0ssCQkvKiBDSCBSVE4gKi8KKwlbIDB4MTkgXSA9IEtFWV9NT0RFLCAJCS8qIEZVTkMgKi8KKwlbIDB4MGMgXSA9IEtFWV9TRUFSQ0gsIAkJLyogQVVUT1NDQU4gKi8KKworCS8qIE5vdCBzdXJlIHdoYXQgdG8gZG8gd2l0aCB0aGVzZSBvbmVzISAqLworCVsgMHgwZiBdID0gS0VZX1NFTEVDVCwgCQkvKiBTT1VSQ0UgKi8KKwlbIDB4MGEgXSA9IEtFWV9LUFBMVVMsCQkvKiArMTAwICovCisJWyAweDE0IF0gPSBLRVlfRVFVQUwsCQkvKiBTWU5DICovCisJWyAweDFjIF0gPSBLRVlfTUVESUEsICAgICAgICAgICAgIC8qIFBDL1RWICovCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wdjk1MSk7CisKKy8qIGdlbmVyaWMgUkM1IGtleXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIHNlZSBodHRwOi8vdXNlcnMucGFuZG9yYS5iZS9uZW55YS9lbGVjdHJvbmljcy9yYzUvY29kZXMwMC5odG0gKi8KKy8qIHVzZWQgYnkgb2xkIChibGFjaykgSGF1cHBhdWdlIHJlbW90ZXMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3JjNV90dltJUl9LRVlUQUJfU0laRV0gPSB7CisJLyogS2V5cyAwIHRvIDkgKi8KKwlbIDB4MDAgXSA9IEtFWV8wLAorCVsgMHgwMSBdID0gS0VZXzEsCisJWyAweDAyIF0gPSBLRVlfMiwKKwlbIDB4MDMgXSA9IEtFWV8zLAorCVsgMHgwNCBdID0gS0VZXzQsCisJWyAweDA1IF0gPSBLRVlfNSwKKwlbIDB4MDYgXSA9IEtFWV82LAorCVsgMHgwNyBdID0gS0VZXzcsCisJWyAweDA4IF0gPSBLRVlfOCwKKwlbIDB4MDkgXSA9IEtFWV85LAorCisJWyAweDBiIF0gPSBLRVlfQ0hBTk5FTCwJCS8qIGNoYW5uZWwgLyBwcm9ncmFtIChqYXBhbjogMTEpICovCisJWyAweDBjIF0gPSBLRVlfUE9XRVIsCQkvKiBzdGFuZGJ5ICovCisJWyAweDBkIF0gPSBLRVlfTVVURSwJCS8qIG11dGUgLyBkZW11dGUgKi8KKwlbIDB4MGYgXSA9IEtFWV9UViwJCS8qIGRpc3BsYXkgKi8KKwlbIDB4MTAgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MTEgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgxMiBdID0gS0VZX0JSSUdIVE5FU1NVUCwKKwlbIDB4MTMgXSA9IEtFWV9CUklHSFRORVNTRE9XTiwKKwlbIDB4MWUgXSA9IEtFWV9TRUFSQ0gsCQkvKiBzZWFyY2ggKyAqLworCVsgMHgyMCBdID0gS0VZX0NIQU5ORUxVUCwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLworCVsgMHgyMSBdID0gS0VZX0NIQU5ORUxET1dOLAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJWyAweDIyIF0gPSBLRVlfQ0hBTk5FTCwJCS8qIGFsdCAvIGNoYW5uZWwgKi8KKwlbIDB4MjMgXSA9IEtFWV9MQU5HVUFHRSwJLyogMXN0IC8gMm5kIGxhbmd1YWdlICovCisJWyAweDI2IF0gPSBLRVlfU0xFRVAsCQkvKiBzbGVlcHRpbWVyICovCisJWyAweDJlIF0gPSBLRVlfTUVOVSwJCS8qIDJuZCBjb250cm9scyAoVVNBOiBtZW51KSAqLworCVsgMHgzMCBdID0gS0VZX1BBVVNFLAorCVsgMHgzMiBdID0gS0VZX1JFV0lORCwKKwlbIDB4MzMgXSA9IEtFWV9HT1RPLAorCVsgMHgzNSBdID0gS0VZX1BMQVksCisJWyAweDM2IF0gPSBLRVlfU1RPUCwKKwlbIDB4MzcgXSA9IEtFWV9SRUNPUkQsCQkvKiByZWNvcmRpbmcgKi8KKwlbIDB4M2MgXSA9IEtFWV9URVhULCAgICAJLyogdGVsZXRleHQgc3VibW9kZSAoSmFwYW46IDEyKSAqLworCVsgMHgzZCBdID0gS0VZX1NVU1BFTkQsCQkvKiBzeXN0ZW0gc3RhbmRieSAqLworCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19yYzVfdHYpOworCisvKiBUYWJsZSBmb3IgTGVhZHRlayBXaW5mYXN0IFJlbW90ZSBDb250cm9scyAtIHVzZWQgYnkgYm90aCBidHR2IGFuZCBjeDg4ICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc193aW5mYXN0W0lSX0tFWVRBQl9TSVpFXSA9IHsKKwkvKiBLZXlzIDAgdG8gOSAqLworCVsgMHgxMiBdID0gS0VZXzAsCisJWyAweDA1IF0gPSBLRVlfMSwKKwlbIDB4MDYgXSA9IEtFWV8yLAorCVsgMHgwNyBdID0gS0VZXzMsCisJWyAweDA5IF0gPSBLRVlfNCwKKwlbIDB4MGEgXSA9IEtFWV81LAorCVsgMHgwYiBdID0gS0VZXzYsCisJWyAweDBkIF0gPSBLRVlfNywKKwlbIDB4MGUgXSA9IEtFWV84LAorCVsgMHgwZiBdID0gS0VZXzksCisKKwlbIDB4MDAgXSA9IEtFWV9QT1dFUiwKKwlbIDB4MDIgXSA9IEtFWV9UVU5FUiwJCS8qIFRWL0ZNICovCisJWyAweDFlIF0gPSBLRVlfVklERU8sCisJWyAweDA0IF0gPSBLRVlfVk9MVU1FVVAsCisJWyAweDA4IF0gPSBLRVlfVk9MVU1FRE9XTiwKKwlbIDB4MGMgXSA9IEtFWV9DSEFOTkVMVVAsCisJWyAweDEwIF0gPSBLRVlfQ0hBTk5FTERPV04sCisJWyAweDAzIF0gPSBLRVlfWk9PTSwJCS8qIGZ1bGxzY3JlZW4gKi8KKwlbIDB4MWYgXSA9IEtFWV9TVUJUSVRMRSwJCS8qIGNsb3NlZCBjYXB0aW9uL3RlbGV0ZXh0ICovCisJWyAweDIwIF0gPSBLRVlfU0xFRVAsCisJWyAweDE0IF0gPSBLRVlfTVVURSwKKwlbIDB4MmIgXSA9IEtFWV9SRUQsCisJWyAweDJjIF0gPSBLRVlfR1JFRU4sCisJWyAweDJkIF0gPSBLRVlfWUVMTE9XLAorCVsgMHgyZSBdID0gS0VZX0JMVUUsCisJWyAweDE4IF0gPSBLRVlfS1BQTFVTLAkJLyogZmluZSB0dW5lICsgKi8KKwlbIDB4MTkgXSA9IEtFWV9LUE1JTlVTLAkJLyogZmluZSB0dW5lIC0gKi8KKwlbIDB4MjEgXSA9IEtFWV9ET1QsCisJWyAweDEzIF0gPSBLRVlfRU5URVIsCisJWyAweDIyIF0gPSBLRVlfQkFDSywKKwlbIDB4MjMgXSA9IEtFWV9QTEFZUEFVU0UsCisJWyAweDI0IF0gPSBLRVlfTkVYVCwKKwlbIDB4MjYgXSA9IEtFWV9TVE9QLAorCVsgMHgyNyBdID0gS0VZX1JFQ09SRAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfd2luZmFzdCk7CisKK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Bpbm5hY2xlW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbIDB4NTkgXSA9IEtFWV9NVVRFLAorCVsgMHg0YSBdID0gS0VZX1BPV0VSLAorCisJWyAweDE4IF0gPSBLRVlfVEVYVCwKKwlbIDB4MjYgXSA9IEtFWV9UViwKKwlbIDB4M2QgXSA9IEtFWV9QUklOVCwKKworCVsgMHg0OCBdID0gS0VZX1JFRCwKKwlbIDB4MDQgXSA9IEtFWV9HUkVFTiwKKwlbIDB4MTEgXSA9IEtFWV9ZRUxMT1csCisJWyAweDAwIF0gPSBLRVlfQkxVRSwKKworCVsgMHgyZCBdID0gS0VZX1ZPTFVNRVVQLAorCVsgMHgxZSBdID0gS0VZX1ZPTFVNRURPV04sCisKKwlbIDB4NDkgXSA9IEtFWV9NRU5VLAorCisJWyAweDE2IF0gPSBLRVlfQ0hBTk5FTFVQLAorCVsgMHgxNyBdID0gS0VZX0NIQU5ORUxET1dOLAorCisJWyAweDIwIF0gPSBLRVlfVVAsCisJWyAweDIxIF0gPSBLRVlfRE9XTiwKKwlbIDB4MjIgXSA9IEtFWV9MRUZULAorCVsgMHgyMyBdID0gS0VZX1JJR0hULAorCVsgMHgwZCBdID0gS0VZX1NFTEVDVCwKKworCisKKwlbIDB4MDggXSA9IEtFWV9CQUNLLAorCVsgMHgwNyBdID0gS0VZX1JFRlJFU0gsCisKKwlbIDB4MmYgXSA9IEtFWV9aT09NLAorCVsgMHgyOSBdID0gS0VZX1JFQ09SRCwKKworCVsgMHg0YiBdID0gS0VZX1BBVVNFLAorCVsgMHg0ZCBdID0gS0VZX1JFV0lORCwKKwlbIDB4MmUgXSA9IEtFWV9QTEFZLAorCVsgMHg0ZSBdID0gS0VZX0ZPUldBUkQsCisJWyAweDUzIF0gPSBLRVlfUFJFVklPVVMsCisJWyAweDRjIF0gPSBLRVlfU1RPUCwKKwlbIDB4NTQgXSA9IEtFWV9ORVhULAorCisJWyAweDY5IF0gPSBLRVlfMCwKKwlbIDB4NmEgXSA9IEtFWV8xLAorCVsgMHg2YiBdID0gS0VZXzIsCisJWyAweDZjIF0gPSBLRVlfMywKKwlbIDB4NmQgXSA9IEtFWV80LAorCVsgMHg2ZSBdID0gS0VZXzUsCisJWyAweDZmIF0gPSBLRVlfNiwKKwlbIDB4NzAgXSA9IEtFWV83LAorCVsgMHg3MSBdID0gS0VZXzgsCisJWyAweDcyIF0gPSBLRVlfOSwKKworCVsgMHg3NCBdID0gS0VZX0NIQU5ORUwsCisJWyAweDBhIF0gPSBLRVlfQkFDS1NQQUNFLAorfTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfcGlubmFjbGUpOworCisvKiBIYXVwcGF1Z2U6IHRoZSBuZXdlciwgZ3JheSByZW1vdGVzIChzZWVtcyB0aGVyZSBhcmUgbXVsdGlwbGUKKyAqIHNsaWdodGx5IGRpZmZlcmVudCB2ZXJzaW9ucyksIHNoaXBwZWQgd2l0aCBjeDg4K2l2dHYgY2FyZHMuCisgKiBhbG1vc3QgcmM1IGNvZGluZywgYnV0IHNvbWUgbm9uLXN0YW5kYXJkIGtleXMgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2hhdXBwYXVnZV9uZXdbSVJfS0VZVEFCX1NJWkVdID0geworCS8qIEtleXMgMCB0byA5ICovCisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MDEgXSA9IEtFWV8xLAorCVsgMHgwMiBdID0gS0VZXzIsCisJWyAweDAzIF0gPSBLRVlfMywKKwlbIDB4MDQgXSA9IEtFWV80LAorCVsgMHgwNSBdID0gS0VZXzUsCisJWyAweDA2IF0gPSBLRVlfNiwKKwlbIDB4MDcgXSA9IEtFWV83LAorCVsgMHgwOCBdID0gS0VZXzgsCisJWyAweDA5IF0gPSBLRVlfOSwKKworCVsgMHgwYSBdID0gS0VZX1RFWFQsICAgICAgCS8qIGtleXBhZCBhc3RlcmlzayBhcyB3ZWxsICovCisJWyAweDBiIF0gPSBLRVlfUkVELAkJLyogcmVkIGJ1dHRvbiAqLworCVsgMHgwYyBdID0gS0VZX1JBRElPLAorCVsgMHgwZCBdID0gS0VZX01FTlUsCisJWyAweDBlIF0gPSBLRVlfU1VCVElUTEUsCS8qIGFsc28gdGhlICMga2V5ICovCisJWyAweDBmIF0gPSBLRVlfTVVURSwKKwlbIDB4MTAgXSA9IEtFWV9WT0xVTUVVUCwKKwlbIDB4MTEgXSA9IEtFWV9WT0xVTUVET1dOLAorCVsgMHgxMiBdID0gS0VZX1BSRVZJT1VTLAkvKiBwcmV2aW91cyBjaGFubmVsICovCisJWyAweDE0IF0gPSBLRVlfVVAsCisJWyAweDE1IF0gPSBLRVlfRE9XTiwKKwlbIDB4MTYgXSA9IEtFWV9MRUZULAorCVsgMHgxNyBdID0gS0VZX1JJR0hULAorCVsgMHgxOCBdID0gS0VZX1ZJREVPLAkJLyogVmlkZW9zICovCisJWyAweDE5IF0gPSBLRVlfQVVESU8sCQkvKiBNdXNpYyAqLworCS8qIDB4MWE6IFBpY3R1cmVzIC0gcHJlc3VtZSB0aGlzIG1lYW5zCisJICAgIk11bHRpbWVkaWEgSG9tZSBQbGF0Zm9ybSIgLQorCSAgIG5vICJQSUNUVVJFUyIga2V5IGluIGlucHV0LmgKKwkgKi8KKwlbIDB4MWEgXSA9IEtFWV9NSFAsCisKKwlbIDB4MWIgXSA9IEtFWV9FUEcsCQkvKiBHdWlkZSAqLworCVsgMHgxYyBdID0gS0VZX1RWLAorCVsgMHgxZSBdID0gS0VZX05FWFRTT05HLAkvKiBza2lwID58ICovCisJWyAweDFmIF0gPSBLRVlfRVhJVCwJCS8qIGJhY2svZXhpdCAqLworCVsgMHgyMCBdID0gS0VZX0NIQU5ORUxVUCwJLyogY2hhbm5lbCAvIHByb2dyYW0gKyAqLworCVsgMHgyMSBdID0gS0VZX0NIQU5ORUxET1dOLAkvKiBjaGFubmVsIC8gcHJvZ3JhbSAtICovCisJWyAweDIyIF0gPSBLRVlfQ0hBTk5FTCwJCS8qIHNvdXJjZSAob2xkIGJsYWNrIHJlbW90ZSkgKi8KKwlbIDB4MjQgXSA9IEtFWV9QUkVWSU9VU1NPTkcsCS8qIHJlcGxheSB8PCAqLworCVsgMHgyNSBdID0gS0VZX0VOVEVSLAkJLyogT0sgKi8KKwlbIDB4MjYgXSA9IEtFWV9TTEVFUCwJCS8qIG1pbmltaXplIChvbGQgYmxhY2sgcmVtb3RlKSAqLworCVsgMHgyOSBdID0gS0VZX0JMVUUsCQkvKiBibHVlIGtleSAqLworCVsgMHgyZSBdID0gS0VZX0dSRUVOLAkJLyogZ3JlZW4gYnV0dG9uICovCisJWyAweDMwIF0gPSBLRVlfUEFVU0UsCQkvKiBwYXVzZSAqLworCVsgMHgzMiBdID0gS0VZX1JFV0lORCwJCS8qIGJhY2t3YXJkIDw8ICovCisJWyAweDM0IF0gPSBLRVlfRkFTVEZPUldBUkQsCS8qIGZvcndhcmQgPj4gKi8KKwlbIDB4MzUgXSA9IEtFWV9QTEFZLAorCVsgMHgzNiBdID0gS0VZX1NUT1AsCisJWyAweDM3IF0gPSBLRVlfUkVDT1JELAkJLyogcmVjb3JkaW5nICovCisJWyAweDM4IF0gPSBLRVlfWUVMTE9XLAkJLyogeWVsbG93IGtleSAqLworCVsgMHgzYiBdID0gS0VZX1NFTEVDVCwJCS8qIHRvcCByaWdodCBidXR0b24gKi8KKwlbIDB4M2MgXSA9IEtFWV9aT09NLAkJLyogZnVsbCAqLworCVsgMHgzZCBdID0gS0VZX1BPV0VSLAkJLyogc3lzdGVtIHBvd2VyIChncmVlbiBidXR0b24pICovCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYwppbmRleCAwNGMxOTM4Li44Y2RkNGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxNDYuaD4KIAogTElTVF9IRUFEKHNhYTcxNDZfZGV2aWNlcyk7Ci1ERUNMQVJFX01VVEVYKHNhYTcxNDZfZGV2aWNlc19sb2NrKTsKK0RFRklORV9NVVRFWChzYWE3MTQ2X2RldmljZXNfbG9jayk7CiAKIHN0YXRpYyBpbnQgc2FhNzE0Nl9udW07CiAKQEAgLTExNiw4ICsxMTYsNyBAQAogCQlwZyA9IHZtYWxsb2NfdG9fcGFnZSh2aXJ0KTsKIAkJaWYgKE5VTEwgPT0gcGcpCiAJCQlnb3RvIGVycjsKLQkJaWYgKFBhZ2VIaWdoTWVtKHBnKSkKLQkJCUJVRygpOworCQlCVUdfT04oUGFnZUhpZ2hNZW0ocGcpKTsKIAkJc2dsaXN0W2ldLnBhZ2UgICA9IHBnOwogCQlzZ2xpc3RbaV0ubGVuZ3RoID0gUEFHRV9TSVpFOwogCX0KQEAgLTQwMiwxMSArNDAxLDExIEBACiAKIAlwY2lfc2V0X2RydmRhdGEocGNpLCBkZXYpOwogCi0JaW5pdF9NVVRFWCgmZGV2LT5sb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPmludF9zbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOwogCi0JaW5pdF9NVVRFWCgmZGV2LT5pMmNfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGV2LT5pMmNfbG9jayk7CiAKIAlkZXYtPm1vZHVsZSA9IFRISVNfTU9EVUxFOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+aTJjX3dxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKaW5kZXggZjhjZjczZS4uNTIzYWIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKQEAgLTE3LDE4ICsxNywxOCBAQAogCX0KIAogCS8qIGlzIGl0IGZyZWU/ICovCi0JZG93bigmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWlmICh2di0+cmVzb3VyY2VzICYgYml0KSB7CiAJCURFQl9EKCgibG9ja2VkISB2di0+cmVzb3VyY2VzOjB4JTAyeCwgd2Ugd2FudDoweCUwMnhcbiIsdnYtPnJlc291cmNlcyxiaXQpKTsKIAkJLyogbm8sIHNvbWVvbmUgZWxzZSB1c2VzIGl0ICovCi0JCXVwKCZkZXYtPmxvY2spOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAkvKiBpdCdzIGZyZWUsIGdyYWIgaXQgKi8KIAlmaC0+cmVzb3VyY2VzICB8PSBiaXQ7CiAJdnYtPnJlc291cmNlcyB8PSBiaXQ7CiAJREVCX0QoKCJyZXM6IGdldCAweCUwMngsIGN1cjoweCUwMnhcbiIsYml0LHZ2LT5yZXNvdXJjZXMpKTsKLQl1cCgmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTM3LDI5ICszNywyOCBAQAogCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CiAKLQlpZiAoKGZoLT5yZXNvdXJjZXMgJiBiaXRzKSAhPSBiaXRzKQotCQlCVUcoKTsKKwlCVUdfT04oKGZoLT5yZXNvdXJjZXMgJiBiaXRzKSAhPSBiaXRzKTsKIAotCWRvd24oJmRldi0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlmaC0+cmVzb3VyY2VzICAmPSB+Yml0czsKIAl2di0+cmVzb3VyY2VzICY9IH5iaXRzOwogCURFQl9EKCgicmVzOiBwdXQgMHglMDJ4LCBjdXI6MHglMDJ4XG4iLGJpdHMsdnYtPnJlc291cmNlcykpOwotCXVwKCZkZXYtPmxvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBjb21tb24gZG1hIGZ1bmN0aW9ucyAqLwogCi12b2lkIHNhYTcxNDZfZG1hX2ZyZWUoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsc3RydWN0IHNhYTcxNDZfYnVmICpidWYpCit2b2lkIHNhYTcxNDZfZG1hX2ZyZWUoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCQkJc3RydWN0IHNhYTcxNDZfYnVmICpidWYpCiB7CiAJREVCX0VFKCgiZGV2OiVwLCBidWY6JXBcbiIsZGV2LGJ1ZikpOwogCi0JaWYgKGluX2ludGVycnVwdCgpKQotCQlCVUcoKTsKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCiAJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLDAsMCk7Ci0JdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwgJmJ1Zi0+dmIuZG1hKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAocSwgJmJ1Zi0+dmIuZG1hKTsKIAl2aWRlb2J1Zl9kbWFfZnJlZSgmYnVmLT52Yi5kbWEpOwogCWJ1Zi0+dmIuc3RhdGUgPSBTVEFURV9ORUVEU19JTklUOwogfQpAQCAtMjA0LDcgKzIwMyw3IEBACiAKIAlERUJfRUUoKCJpbm9kZTolcCwgZmlsZTolcCwgbWlub3I6JWRcbiIsaW5vZGUsZmlsZSxtaW5vcikpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc2FhNzE0Nl9kZXZpY2VzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNhYTcxNDZfZGV2aWNlc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWxpc3RfZm9yX2VhY2gobGlzdCwmc2FhNzE0Nl9kZXZpY2VzKSB7CkBAIC0yNzYsNyArMjc1LDcgQEAKIAkJa2ZyZWUoZmgpOwogCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCX0KLQl1cCgmc2FhNzE0Nl9kZXZpY2VzX2xvY2spOworCW11dGV4X3VubG9jaygmc2FhNzE0Nl9kZXZpY2VzX2xvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI4Nyw3ICsyODYsNyBAQAogCiAJREVCX0VFKCgiaW5vZGU6JXAsIGZpbGU6JXBcbiIsaW5vZGUsZmlsZSkpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc2FhNzE0Nl9kZXZpY2VzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNhYTcxNDZfZGV2aWNlc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmKCBmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CkBAIC0zMDMsNyArMzAyLDcgQEAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCWtmcmVlKGZoKTsKIAotCXVwKCZzYWE3MTQ2X2RldmljZXNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTQ2X2RldmljZXNfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCmluZGV4IDhhYWJkZDhmYi4uZDk5NTNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCkBAIC0yNzksNyArMjc5LDcgQEAKIAlpbnQgYWRkcmVzc19lcnIgPSAwOwogCWludCBzaG9ydF9kZWxheSA9IDA7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZGV2LT5pMmNfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5pMmNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlmb3IoaT0wO2k8bnVtO2krKykgewpAQCAtMzY2LDcgKzM2Niw3IEBACiAJCX0KIAl9CiAKLQl1cCgmZGV2LT5pMmNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmkyY19sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZiaS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92YmkuYwppbmRleCA0NjhkM2M5Li4wNjM2MDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmJpLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCX0KIAogCWlmIChidWYtPnZiLnNpemUgIT0gc2l6ZSkKLQkJc2FhNzE0Nl9kbWFfZnJlZShkZXYsYnVmKTsKKwkJc2FhNzE0Nl9kbWFfZnJlZShkZXYscSxidWYpOwogCiAJaWYgKFNUQVRFX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgewogCQlidWYtPnZiLndpZHRoICA9IGxsZW5ndGg7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAkJc2FhNzE0Nl9wZ3RhYmxlX2ZyZWUoZGV2LT5wY2ksICZidWYtPnB0WzJdKTsKIAkJc2FhNzE0Nl9wZ3RhYmxlX2FsbG9jKGRldi0+cGNpLCAmYnVmLT5wdFsyXSk7CiAKLQkJZXJyID0gdmlkZW9idWZfaW9sb2NrKGRldi0+cGNpLCZidWYtPnZiLCBOVUxMKTsKKwkJZXJyID0gdmlkZW9idWZfaW9sb2NrKHEsJmJ1Zi0+dmIsIE5VTEwpOwogCQlpZiAoZXJyKQogCQkJZ290byBvb3BzOwogCQllcnIgPSBzYWE3MTQ2X3BndGFibGVfYnVpbGRfc2luZ2xlKGRldi0+cGNpLCAmYnVmLT5wdFsyXSwgYnVmLT52Yi5kbWEuc2dsaXN0LCBidWYtPnZiLmRtYS5zZ2xlbik7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAogIG9vcHM6CiAJREVCX1ZCSSgoImVycm9yIG91dC5cbiIpKTsKLQlzYWE3MTQ2X2RtYV9mcmVlKGRldixidWYpOworCXNhYTcxNDZfZG1hX2ZyZWUoZGV2LHEsYnVmKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zMDEsNyArMzAxLDcgQEAKIAlzdHJ1Y3Qgc2FhNzE0Nl9idWYgKmJ1ZiA9IChzdHJ1Y3Qgc2FhNzE0Nl9idWYgKil2YjsKIAogCURFQl9WQkkoKCJ2YjolcFxuIix2YikpOwotCXNhYTcxNDZfZG1hX2ZyZWUoZGV2LGJ1Zik7CisJc2FhNzE0Nl9kbWFfZnJlZShkZXYscSxidWYpOwogfQogCiBzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB2YmlfcW9wcyA9IHsKQEAgLTQxMCw3ICs0MTAsNyBAQAogCQkJICAgIFY0TDJfRklFTERfU0VRX1RCLCAvLyBGSVhNRTogZG9lcyB0aGlzIHJlYWxseSB3b3JrPwogCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl9idWYpLAogCQkJICAgIGZpbGUpOwotCWluaXRfTVVURVgoJmZoLT52YmlfcS5sb2NrKTsKKwltdXRleF9pbml0KCZmaC0+dmJpX3EubG9jayk7CiAKIAlpbml0X3RpbWVyKCZmaC0+dmJpX3JlYWRfdGltZW91dCk7CiAJZmgtPnZiaV9yZWFkX3RpbWVvdXQuZnVuY3Rpb24gPSB2YmlfcmVhZF90aW1lb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCmluZGV4IDdlYmFjNzkuLmU3MDc5ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKQEAgLTM3OCwyMCArMzc4LDIwIEBACiAJCWVyciA9IHRyeV93aW4oZGV2LCZmLT5mbXQud2luKTsKIAkJaWYgKDAgIT0gZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJZG93bigmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAkJZmgtPm92LndpbiAgICA9IGYtPmZtdC53aW47CiAJCWZoLT5vdi5uY2xpcHMgPSBmLT5mbXQud2luLmNsaXBjb3VudDsKIAkJaWYgKGZoLT5vdi5uY2xpcHMgPiAxNikKIAkJCWZoLT5vdi5uY2xpcHMgPSAxNjsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKGZoLT5vdi5jbGlwcyxmLT5mbXQud2luLmNsaXBzLHNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSpmaC0+b3YubmNsaXBzKSkgewotCQkJdXAoJmRldi0+bG9jayk7CisJCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCiAJCS8qIGZoLT5vdi5maCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZSB2YWxpZCBvdmVybGF5IGluZm9ybWF0aW9ucywgdG9vICovCiAJCWZoLT5vdi5maCA9IGZoOwogCi0JCXVwKCZkZXYtPmxvY2spOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAkJLyogY2hlY2sgaWYgb3VyIGN1cnJlbnQgb3ZlcmxheSBpcyBhY3RpdmUgKi8KIAkJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7CkBAIC01MTYsNyArNTE2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZG93bigmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCiAJc3dpdGNoIChjdHJsLT50eXBlKSB7CiAJY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgpAQCAtNTYwLDcgKzU2MCw3IEBACiAJCS8qIGZpeG1lOiB3ZSBjYW4gc3VwcG9ydCBjaGFuZ2luZyBWRkxJUCBhbmQgSEZMSVAgaGVyZS4uLiAqLwogCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKIAkJCURFQl9EKCgiVjRMMl9DSURfSEZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7Ci0JCQl1cCgmZGV2LT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXZ2LT5oZmxpcCA9IGMtPnZhbHVlOwpAQCAtNTY4LDcgKzU2OCw3IEBACiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKIAkJaWYgKElTX0NBUFRVUkVfQUNUSVZFKGZoKSAhPSAwKSB7CiAJCQlERUJfRCgoIlY0TDJfQ0lEX1ZGTElQIHdoaWxlIGFjdGl2ZSBjYXB0dXJlLlxuIikpOwotCQkJdXAoJmRldi0+bG9jayk7CisJCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQl2di0+dmZsaXAgPSBjLT52YWx1ZTsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJfQotCXVwKCZkZXYtPmxvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgewogCQlzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7CkBAIC05MzksNyArOTM5LDcgQEAKIAkJCX0KIAkJfQogCi0JCWRvd24oJmRldi0+bG9jayk7CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKIAkJLyogb2ssIGFjY2VwdCBpdCAqLwogCQl2di0+b3ZfZmIgPSAqZmI7CkBAIC05NDgsNyArOTQ4LDcgQEAKIAkJCXZ2LT5vdl9mYi5mbXQuYnl0ZXNwZXJsaW5lID0KIAkJCQl2di0+b3ZfZmIuZm10LndpZHRoKmZtdC0+ZGVwdGgvODsKIAotCQl1cCgmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTEwODYsNyArMTA4Niw3IEBACiAJCQl9CiAJCX0KIAotCQlkb3duKCZkZXYtPmxvY2spOworCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCiAJCWZvcihpID0gMDsgaSA8IGRldi0+ZXh0X3Z2X2RhdGEtPm51bV9zdGRzOyBpKyspCiAJCQlpZiAoKmlkICYgZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXS5pZCkKQEAgLTEwOTgsNyArMTA5OCw3IEBACiAJCQlmb3VuZCA9IDE7CiAJCX0KIAotCQl1cCgmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJCWlmICh2di0+b3Zfc3VzcGVuZCAhPSBOVUxMKSB7CiAJCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcodnYtPm92X3N1c3BlbmQpOwpAQCAtMTIwMSwxMSArMTIwMSwxMSBAQAogCQlERUJfRCgoIlZJRElPQ0dNQlVGIFxuIikpOwogCiAJCXEgPSAmZmgtPnZpZGVvX3E7Ci0JCWRvd24oJnEtPmxvY2spOworCQltdXRleF9sb2NrKCZxLT5sb2NrKTsKIAkJZXJyID0gdmlkZW9idWZfbW1hcF9zZXR1cChxLGdidWZmZXJzLGdidWZzaXplLAogCQkJCQkgIFY0TDJfTUVNT1JZX01NQVApOwogCQlpZiAoZXJyIDwgMCkgewotCQkJdXAoJnEtPmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJbWVtc2V0KG1idWYsMCxzaXplb2YoKm1idWYpKTsKQEAgLTEyMTMsNyArMTIxMyw3IEBACiAJCW1idWYtPnNpemUgICA9IGdidWZmZXJzICogZ2J1ZnNpemU7CiAJCWZvciAoaSA9IDA7IGkgPCBnYnVmZmVyczsgaSsrKQogCQkJbWJ1Zi0+b2Zmc2V0c1tpXSA9IGkgKiBnYnVmc2l6ZTsKLQkJdXAoJnEtPmxvY2spOworCQltdXRleF91bmxvY2soJnEtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAJZGVmYXVsdDoKQEAgLTEyNzUsNyArMTI3NSw3IEBACiAJICAgIGJ1Zi0+dmIuZmllbGQgICE9IGZpZWxkICAgICAgfHwKIAkgICAgYnVmLT52Yi5maWVsZCAgIT0gZmgtPnZpZGVvX2ZtdC5maWVsZCAgfHwKIAkgICAgYnVmLT5mbXQgICAgICAgIT0gJmZoLT52aWRlb19mbXQpIHsKLQkJc2FhNzE0Nl9kbWFfZnJlZShkZXYsYnVmKTsKKwkJc2FhNzE0Nl9kbWFfZnJlZShkZXYscSxidWYpOwogCX0KIAogCWlmIChTVEFURV9ORUVEU19JTklUID09IGJ1Zi0+dmIuc3RhdGUpIHsKQEAgLTEzMDQsNyArMTMwNCw3IEBACiAJCQlzYWE3MTQ2X3BndGFibGVfYWxsb2MoZGV2LT5wY2ksICZidWYtPnB0WzBdKTsKIAkJfQogCi0JCWVyciA9IHZpZGVvYnVmX2lvbG9jayhkZXYtPnBjaSwmYnVmLT52YiwgJnZ2LT5vdl9mYik7CisJCWVyciA9IHZpZGVvYnVmX2lvbG9jayhxLCZidWYtPnZiLCAmdnYtPm92X2ZiKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb29wczsKIAkJZXJyID0gc2FhNzE0Nl9wZ3RhYmxlX2J1aWxkKGRldixidWYpOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIAogIG9vcHM6CiAJREVCX0QoKCJlcnJvciBvdXQuXG4iKSk7Ci0Jc2FhNzE0Nl9kbWFfZnJlZShkZXYsYnVmKTsKKwlzYWE3MTQ2X2RtYV9mcmVlKGRldixxLGJ1Zik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTM2Myw3ICsxMzYzLDcgQEAKIAlzdHJ1Y3Qgc2FhNzE0Nl9idWYgKmJ1ZiA9IChzdHJ1Y3Qgc2FhNzE0Nl9idWYgKil2YjsKIAogCURFQl9DQVAoKCJ2YnVmOiVwXG4iLHZiKSk7Ci0Jc2FhNzE0Nl9kbWFfZnJlZShkZXYsYnVmKTsKKwlzYWE3MTQ2X2RtYV9mcmVlKGRldixxLGJ1Zik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHZpZGVvX3FvcHMgPSB7CkBAIC0xNDE0LDcgKzE0MTQsNyBAQAogCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl9idWYpLAogCQkJICAgIGZpbGUpOwogCi0JaW5pdF9NVVRFWCgmZmgtPnZpZGVvX3EubG9jayk7CisJbXV0ZXhfaW5pdCgmZmgtPnZpZGVvX3EubG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaAppbmRleCA3ZDdlMTYxLi5iM2RkMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWNvbW1vbi5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSAiZmxleGNvcC1yZWcuaCIKIApAQCAtNzMsOCArNzQsNyBAQAogCWludCAoKmZlX3NsZWVwKSAoc3RydWN0IGR2Yl9mcm9udGVuZCAqKTsKIAogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGkyY19zZW07Ci0KKwlzdHJ1Y3QgbXV0ZXggaTJjX211dGV4OwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCiAJLyogb3B0aW9ucyBhbmQgc3RhdHVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCmluZGV4IDM5MGNjM2EuLjljN2YxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCkBAIC01MjYsNyArNTI2LDcgQEAKIAkJaW5mbygiZm91bmQgdGhlIHN0djAyOTcgYXQgaTJjIGFkZHJlc3M6IDB4JTAyeCIsYWxwc190ZGVlNF9zdHYwMjk3X2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKIAl9IGVsc2UKIAkvKiB0cnkgdGhlIHNreSB2Mi4zICh2cDMxMC9TYW1zdW5nIHRiZHUxODEzMih0c2E1MDU5KSkgKi8KLQlpZiAoKGZjLT5mZSA9IHZwMzEwX2F0dGFjaCgmc2t5c3RhcjIzX3NhbXN1bmdfdGJkdTE4MTMyX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKKwlpZiAoKGZjLT5mZSA9IHZwMzEwX210MzEyX2F0dGFjaCgmc2t5c3RhcjIzX3NhbXN1bmdfdGJkdTE4MTMyX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKIAkJb3BzID0gZmMtPmZlLT5vcHM7CiAKIAkJb3BzLT5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gZmxleGNvcF9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWkyYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWkyYy5jCmluZGV4IDU2NDk1Y2IuLmUwYmQyZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaTJjLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKIAlpbnQgaSwgcmV0ID0gMDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmZjLT5pMmNfc2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmYy0+aTJjX211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCS8qIHJlYWRpbmcgKi8KQEAgLTE2MSw3ICsxNjEsNyBAQAogCWVsc2UKIAkJcmV0ID0gbnVtOwogCi0JdXAoJmZjLT5pMmNfc2VtKTsKKwltdXRleF91bmxvY2soJmZjLT5pMmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MCw3ICsxODAsNyBAQAogewogCWludCByZXQ7CiAKLQlzZW1hX2luaXQoJmZjLT5pMmNfc2VtLDEpOworCW11dGV4X2luaXQoJmZjLT5pMmNfbXV0ZXgpOwogCiAJbWVtc2V0KCZmYy0+aTJjX2FkYXAsIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKIAlzdHJuY3B5KGZjLT5pMmNfYWRhcC5uYW1lLCAiQjJDMiBGbGV4Q29wIGRldmljZSIsSTJDX05BTUVfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKaW5kZXggYTZjOTFkYi4uMDZlYzlmZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKQEAgLTU0MSw2ICs1NDEsNyBAQAogCSAgICB7IFVTQl9ERVZJQ0UoMHgwYWY3LCAweDAxMDEpIH0sCiAJICAgIHsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgZmxleGNvcF91c2JfdGFibGUpOwogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZmxleGNvcF91c2JfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9NYWtlZmlsZQppbmRleCBkMTg4ZTRjLi45ZDE5N2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKIG9iai0kKENPTkZJR19EVkJfQlQ4WFgpICs9IGJ0ODc4Lm8gZHZiLWJ0OHh4Lm8gZHN0Lm8gZHN0X2NhLm8KIAotRVhUUkFfQ0ZMQUdTID0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL3ZpZGVvIC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCitFWFRSQV9DRkxBR1MgPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHggLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCmluZGV4IDM0YzMxODkuLjU1MDBmOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJaW50IHJldHZhbDsKIAogCXJldHZhbCA9IDA7Ci0JaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmJ0LT5ncGlvX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmJ0LT5ncGlvX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCS8qIHNwZWNpYWwgZ3BpbyBzaWduYWwgKi8KIAlzd2l0Y2ggKGNtZCkgewpAQCAtMzc1LDE0ICszNzUsMTQgQEAKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCXVwKCZidC0+Z3Bpb19sb2NrKTsKKwltdXRleF91bmxvY2soJmJ0LT5ncGlvX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKIEVYUE9SVF9TWU1CT0woYnQ4NzhfZGV2aWNlX2NvbnRyb2wpOwogCiAKLXN0cnVjdCBjYXJkcyBjYXJkX2xpc3RbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBjYXJkcyBjYXJkX2xpc3RbXSBfX2RldmluaXRkYXRhID0gewogCiAJeyAweDAxMDEwMDcxLCBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFYsCQkJIk5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYiIH0sCiAJeyAweDA3NjExNDYxLCBCVFRWX0JPQVJEX0FWRFZCVF83NjEsCQkJIkF2ZXJNZWRpYSBBdmVyVFYgRFZCLVQgNzYxIiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmgKaW5kZXggOWZhZjkzNy4uZjY4NWJjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlICJidDg0OC5oIgogI2luY2x1ZGUgImJ0dHYuaCIKIApAQCAtMTA4LDcgKzExMCw3IEBACiBleHRlcm4gaW50IGJ0ODc4X251bTsKIAogc3RydWN0IGJ0ODc4IHsKLQlzdHJ1Y3Qgc2VtYXBob3JlICBncGlvX2xvY2s7CisJc3RydWN0IG11dGV4IGdwaW9fbG9jazsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJdW5zaWduZWQgaW50IGJ0dHZfbnI7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCAzYTJmZjFjLi4xY2ZhNWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAKICovCiAKLXN0cnVjdCBkc3RfdHlwZXMgZHN0X3RsaXN0W10gPSB7CitzdGF0aWMgc3RydWN0IGRzdF90eXBlcyBkc3RfdGxpc3RbXSA9IHsKIAl7CiAJCS5kZXZpY2VfaWQgPSAiMjAwMTAzQSIsCiAJCS5vZmZzZXQgPSAwLApAQCAtOTEwLDcgKzkxMCw3IEBACiAKIHN0YXRpYyBpbnQgZHN0X3Byb2JlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlKQogewotCXNlbWFfaW5pdCgmc3RhdGUtPmRzdF9tdXRleCwgMSk7CisJbXV0ZXhfaW5pdCgmc3RhdGUtPmRzdF9tdXRleCk7CiAJaWYgKChyZGNfODgyMF9yZXNldChzdGF0ZSkpIDwgMCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9FUlJPUiwgMSwgIlJEQyA4ODIwIFJFU0VUIEZhaWxlZC4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtOTYyLDcgKzk2Miw3IEBACiB7CiAJdTggcmVwbHk7CiAKLQlkb3duKCZzdGF0ZS0+ZHN0X211dGV4KTsKKwltdXRleF9sb2NrKCZzdGF0ZS0+ZHN0X211dGV4KTsKIAlpZiAoKGRzdF9jb21tX2luaXQoc3RhdGUpKSA8IDApIHsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfTk9USUNFLCAxLCAiRFNUIENvbW11bmljYXRpb24gSW5pdGlhbGl6YXRpb24gRmFpbGVkLiIpOwogCQlnb3RvIGVycm9yOwpAQCAtMTAxMywxMSArMTAxMywxMSBAQAogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAiY2hlY2tzdW0gZmFpbHVyZSIpOwogCQlnb3RvIGVycm9yOwogCX0KLQl1cCgmc3RhdGUtPmRzdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+ZHN0X211dGV4KTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JdXAoJnN0YXRlLT5kc3RfbXV0ZXgpOworCW11dGV4X3VubG9jaygmc3RhdGUtPmRzdF9tdXRleCk7CiAJcmV0dXJuIC1FSU87CiAKIH0KQEAgLTExMjgsNyArMTEyOCw3IEBACiAJCQlkc3Rfc2V0X3ZvbHRhZ2UoZmUsIFNFQ19WT0xUQUdFXzEzKTsKIAl9CiAJc3RhdGUtPmRpc2VxX2ZsYWdzICY9IH4oSEFTX0xPQ0sgfCBBVFRFTVBUX1RVTkUpOwotCWRvd24oJnN0YXRlLT5kc3RfbXV0ZXgpOworCW11dGV4X2xvY2soJnN0YXRlLT5kc3RfbXV0ZXgpOwogCWlmICgoZHN0X2NvbW1faW5pdChzdGF0ZSkpIDwgMCkgewogCQlkcHJpbnRrKHZlcmJvc2UsIERTVF9ERUJVRywgMSwgIkRTVCBDb21tdW5pY2F0aW9uIGluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTExNjAsMTEgKzExNjAsMTEgQEAKIAlzdGF0ZS0+ZGlzZXFfZmxhZ3MgfD0gQVRURU1QVF9UVU5FOwogCXJldHZhbCA9IGRzdF9nZXRfdHVuYShzdGF0ZSk7CiB3ZXJyOgotCXVwKCZzdGF0ZS0+ZHN0X211dGV4KTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5kc3RfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiAKIGVycm9yOgotCXVwKCZzdGF0ZS0+ZHN0X211dGV4KTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5kc3RfbXV0ZXgpOwogCXJldHVybiAtRUlPOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCmluZGV4IGM2NTBiNGIuLmY2YjQ5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCkBAIC04MSw3ICs4MSw3IEBACiB7CiAJdTggcmVwbHk7CiAKLQlkb3duKCZzdGF0ZS0+ZHN0X211dGV4KTsKKwltdXRleF9sb2NrKCZzdGF0ZS0+ZHN0X211dGV4KTsKIAlkc3RfY29tbV9pbml0KHN0YXRlKTsKIAltc2xlZXAoNjUpOwogCkBAIC0xMTAsMTEgKzExMCwxMSBAQAogCQkJZ290byBlcnJvcjsKIAkJfQogCX0KLQl1cCgmc3RhdGUtPmRzdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+ZHN0X211dGV4KTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JdXAoJnN0YXRlLT5kc3RfbXV0ZXgpOworCW11dGV4X3VubG9jaygmc3RhdGUtPmRzdF9tdXRleCk7CiAJcmV0dXJuIC1FSU87CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jb21tb24uaAppbmRleCA4MTU1N2YzLi41MWQ0ZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY29tbW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NvbW1vbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgImJ0ODc4LmgiCiAKICNpbmNsdWRlICJkc3RfY2EuaCIKQEAgLTEyMSw3ICsxMjIsNyBAQAogCXU4IHZlbmRvcls4XTsKIAl1OCBib2FyZF9pbmZvWzhdOwogCi0Jc3RydWN0IHNlbWFwaG9yZSBkc3RfbXV0ZXg7CisJc3RydWN0IG11dGV4IGRzdF9tdXRleDsKIH07CiAKIHN0cnVjdCBkc3RfdHlwZXMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwppbmRleCBlYTI3YjE1Li5iYWE4MjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwpAQCAtNzYsMTMgKzc2LDEzIEBACiAJaWYgKCFkdmJkbXgtPmRteC5mcm9udGVuZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZjYXJkLT5sb2NrKTsKKwltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKIAljYXJkLT5uZmVlZHMrKzsKIAlyYyA9IGNhcmQtPm5mZWVkczsKIAlpZiAoY2FyZC0+bmZlZWRzID09IDEpCiAJCWJ0ODc4X3N0YXJ0KGNhcmQtPmJ0LCBjYXJkLT5ncGlvX21vZGUsCiAJCQkgICAgY2FyZC0+b3Bfc3luY19vcmluLCBjYXJkLT5pcnFfZXJyX2lnbm9yZSk7Ci0JdXAoJmNhcmQtPmxvY2spOworCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC05NiwxMSArOTYsMTEgQEAKIAlpZiAoIWR2YmRteC0+ZG14LmZyb250ZW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJmNhcmQtPmxvY2spOworCW11dGV4X2xvY2soJmNhcmQtPmxvY2spOwogCWNhcmQtPm5mZWVkcy0tOwogCWlmIChjYXJkLT5uZmVlZHMgPT0gMCkKIAkJYnQ4Nzhfc3RvcChjYXJkLT5idCk7Ci0JdXAoJmNhcmQtPmxvY2spOworCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzOSw2ICsyMzksMjAgQEAKIAogc3RhdGljIGludCBwaW5uc2F0X3BsbF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogeworCXN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqY2FyZCA9IGZlLT5kdmItPnByaXY7CisKKwlidHR2X2dwaW9fZW5hYmxlKGNhcmQtPmJ0dHZfbnIsIDEsIDEpOyAgLyogb3V0cHV0ICovCisJYnR0dl93cml0ZV9ncGlvKGNhcmQtPmJ0dHZfbnIsIDEsIDEpOyAgIC8qIHJlbGF5IG9uICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaW5uc2F0X3BsbF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQgKmNhcmQgPSBmZS0+ZHZiLT5wcml2OworCisJYnR0dl93cml0ZV9ncGlvKGNhcmQtPmJ0dHZfbnIsIDEsIDApOyAgIC8qIHJlbGF5IG9mZiAqLworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0Niw2ICsyNjAsNyBAQAogCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKIAkucGxsX2luaXQgPSBwaW5uc2F0X3BsbF9pbml0LAogCS5wbGxfc2V0ID0gY3gyNDEwOF9wbGxfc2V0LAorCS5wbGxfc2xlZXAgPSBwaW5uc2F0X3BsbF9zbGVlcCwKIH07CiAKIHN0YXRpYyBpbnQgbWljcm90dW5lX210NzIwMmR0Zl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKQEAgLTc4OCw3ICs4MDMsNyBAQAogCWlmICghKGNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHZiX2J0OHh4X2NhcmQpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW5pdF9NVVRFWCgmY2FyZC0+bG9jayk7CisJbXV0ZXhfaW5pdCgmY2FyZC0+bG9jayk7CiAJY2FyZC0+YnR0dl9uciA9IHN1Yi0+Y29yZS0+bnI7CiAJc3RybmNweShjYXJkLT5jYXJkX25hbWUsIHN1Yi0+Y29yZS0+bmFtZSwgc2l6ZW9mKHN1Yi0+Y29yZS0+bmFtZSkpOwogCWNhcmQtPmkyY19hZGFwdGVyID0gJnN1Yi0+Y29yZS0+aTJjX2FkYXA7CkBAIC03OTgsMTQgKzgxMywxNCBAQAogCQljYXJkLT5ncGlvX21vZGUgPSAweDA0MDBjMDYwOwogCQkvKiBzaG91bGQgYmU6IEJUODc4X0FfR0FJTj0wLEJUODc4X0FfUFdSRE4sQlQ4NzhfREFfRFBNLEJUODc4X0RBX1NCUiwKIAkJCSAgICAgIEJUODc4X0RBX0lPTT0xLEJUODc4X0RBX0FQUCB0byBlbmFibGUgc2VyaWFsIGhpZ2hzcGVlZCBtb2RlLiAqLwotCQljYXJkLT5vcF9zeW5jX29yaW4gPSAwOwotCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IDA7CisJCWNhcmQtPm9wX3N5bmNfb3JpbiA9IEJUODc4X1JJU0NfU1lOQ19NQVNLOworCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IEJUODc4X0FGQlVTIHwgQlQ4NzhfQUZEU1I7CiAJCWJyZWFrOwogCiAJY2FzZSBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURToKIAkJY2FyZC0+Z3Bpb19tb2RlID0gMHgwNDAwQzA2MDsKLQkJY2FyZC0+b3Bfc3luY19vcmluID0gMDsKLQkJY2FyZC0+aXJxX2Vycl9pZ25vcmUgPSAwOworCQljYXJkLT5vcF9zeW5jX29yaW4gPSBCVDg3OF9SSVNDX1NZTkNfTUFTSzsKKwkJY2FyZC0+aXJxX2Vycl9pZ25vcmUgPSBCVDg3OF9BRkJVUyB8IEJUODc4X0FGRFNSOwogCQkvKiAyNiwgMTUsIDE0LCA2LCA1CiAJCSAqIEFfUFdSRE4gIERBX0RQTSBEQV9TQlIgREFfSU9NX0RBCiAJCSAqIERBX0FQUChwYXJhbGxlbCkgKi8KQEAgLTgyMCwxNSArODM1LDE1IEBACiAJY2FzZSBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFY6CiAJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NjE6CiAJCWNhcmQtPmdwaW9fbW9kZSA9ICgxIDw8IDI2KSB8ICgxIDw8IDE0KSB8ICgxIDw8IDUpOwotCQljYXJkLT5vcF9zeW5jX29yaW4gPSAwOwotCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IDA7CisJCWNhcmQtPm9wX3N5bmNfb3JpbiA9IEJUODc4X1JJU0NfU1lOQ19NQVNLOworCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IEJUODc4X0FGQlVTIHwgQlQ4NzhfQUZEU1I7CiAJCS8qIEFfUFdSRE4gREFfU0JSIERBX0FQUCAoaGlnaCBzcGVlZCBzZXJpYWwpICovCiAJCWJyZWFrOwogCiAJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NzE6IC8vY2FzZSAweDA3NzExNDYxOgogCQljYXJkLT5ncGlvX21vZGUgPSAweDA0MDA0MDJCOwogCQljYXJkLT5vcF9zeW5jX29yaW4gPSBCVDg3OF9SSVNDX1NZTkNfTUFTSzsKLQkJY2FyZC0+aXJxX2Vycl9pZ25vcmUgPSAwOworCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IEJUODc4X0FGQlVTIHwgQlQ4NzhfQUZEU1I7CiAJCS8qIEFfUFdSRE4gREFfU0JSICBEQV9BUFBbMF0gUEtUUD0xMCBSSVNDX0VOQUJMRSBGSUZPX0VOQUJMRSovCiAJCWJyZWFrOwogCkBAIC04NTIsOCArODY3LDggQEAKIAogCWNhc2UgQlRUVl9CT0FSRF9QQ19IRFRWOgogCQljYXJkLT5ncGlvX21vZGUgPSAweDAxMDBFQzdCOwotCQljYXJkLT5vcF9zeW5jX29yaW4gPSAwOwotCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IDA7CisJCWNhcmQtPm9wX3N5bmNfb3JpbiA9IEJUODc4X1JJU0NfU1lOQ19NQVNLOworCQljYXJkLT5pcnFfZXJyX2lnbm9yZSA9IEJUODc4X0FGQlVTIHwgQlQ4NzhfQUZEU1I7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTg4MSw3ICs4OTYsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlpbml0X01VVEVYKCZjYXJkLT5idC0+Z3Bpb19sb2NrKTsKKwltdXRleF9pbml0KCZjYXJkLT5idC0+Z3Bpb19sb2NrKTsKIAljYXJkLT5idC0+YnR0dl9uciA9IHN1Yi0+Y29yZS0+bnI7CiAKIAlpZiAoIChyZXQgPSBkdmJfYnQ4eHhfbG9hZF9jYXJkKGNhcmQsIHN1Yi0+Y29yZS0+dHlwZSkpICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguaAppbmRleCBjZjAzNWE4Li4wMGRkOWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBEVkJfQlQ4WFhfSAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJkdmJkZXYuaCIKICNpbmNsdWRlICJkdmJfbmV0LmgiCiAjaW5jbHVkZSAiYnR0di5oIgpAQCAtMzgsNyArMzksNyBAQAogI2luY2x1ZGUgImxnZHQzMzB4LmgiCiAKIHN0cnVjdCBkdmJfYnQ4eHhfY2FyZCB7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCWludCBuZmVlZHM7CiAJY2hhciBjYXJkX25hbWVbMzJdOwogCXN0cnVjdCBkdmJfYWRhcHRlciBkdmJfYWRhcHRlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwppbmRleCBjNGI0YzViLi43MWI1NzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSAiZG14ZGV2LmgiCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCkBAIC0xMTYsNyArMTE3LDcgQEAKIHN0cnVjdCBjaW5lcmd5dDIgewogCXN0cnVjdCBkdmJfZGVtdXggZGVtdXg7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IG11dGV4IHNlbTsKIAlzdHJ1Y3QgZHZiX2FkYXB0ZXIgYWRhcHRlcjsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZmVkZXY7CiAJc3RydWN0IGRteGRldiBkbXhkZXY7CkBAIC0zNDUsMTQgKzM0NiwxNCBAQAogCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CiAJc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZGVtdXgtPnByaXY7CiAKLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCisJaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKGNpbmVyZ3l0Mi0+c3RyZWFtaW5nID09IDApCiAJCWNpbmVyZ3l0Ml9zdGFydF9zdHJlYW1feGZlcihjaW5lcmd5dDIpOwogCiAJY2luZXJneXQyLT5zdHJlYW1pbmcrKzsKLQl1cCgmY2luZXJneXQyLT5zZW0pOworCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwogCXJldHVybiAwOwogfQogCkBAIC0zNjEsMTMgKzM2MiwxMyBAQAogCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CiAJc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZGVtdXgtPnByaXY7CiAKLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCisJaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKC0tY2luZXJneXQyLT5zdHJlYW1pbmcgPT0gMCkKIAkJY2luZXJneXQyX3N0b3Bfc3RyZWFtX3hmZXIoY2luZXJneXQyKTsKIAotCXVwKCZjaW5lcmd5dDItPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4MywxMSArNDg0LDExIEBACiAJc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZHZiZGV2LT5wcml2OwogCWludCBlcnIgPSAtRVJFU1RBUlRTWVM7CiAKLQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCisJaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKChlcnIgPSBkdmJfZ2VuZXJpY19vcGVuKGlub2RlLCBmaWxlKSkpIHsKLQkJdXAoJmNpbmVyZ3l0Mi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC00OTksMTIgKzUwMCwxNSBAQAogCiAJYXRvbWljX2luYygmY2luZXJneXQyLT5pbnVzZSk7CiAKLQl1cCgmY2luZXJneXQyLT5zZW0pOworCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjaW5lcmd5dDJfdW5yZWdpc3RlcihzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIpCiB7CisJZHZiX25ldF9yZWxlYXNlKCZjaW5lcmd5dDItPmR2Ym5ldCk7CisJZHZiX2RteGRldl9yZWxlYXNlKCZjaW5lcmd5dDItPmRteGRldik7CisJZHZiX2RteF9yZWxlYXNlKCZjaW5lcmd5dDItPmRlbXV4KTsKIAlkdmJfdW5yZWdpc3Rlcl9kZXZpY2UoY2luZXJneXQyLT5mZWRldik7CiAJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmY2luZXJneXQyLT5hZGFwdGVyKTsKIApAQCAtNTE3LDcgKzUyMSw3IEBACiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSBkdmJkZXYtPnByaXY7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKCFjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyAmJiAoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpIHsKQEAgLTUyNiw3ICs1MzAsNyBAQAogCQljaW5lcmd5dDJfc2xlZXAoY2luZXJneXQyLCAxKTsKIAl9CiAKLQl1cCgmY2luZXJneXQyLT5zZW0pOworCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNpbmVyZ3l0Mi0+aW51c2UpICYmIGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nKSB7CiAJCXdhcm4oImRlbGF5ZWQgdW5yZWdpc3RlciBpbiByZWxlYXNlIik7CkBAIC01NDEsMTIgKzU0NSwxMiBAQAogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyID0gZHZiZGV2LT5wcml2OwogCi0JaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQorCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCXBvbGxfd2FpdChmaWxlLCAmY2luZXJneXQyLT5wb2xsX3dxLCB3YWl0KTsKIAotCXVwKCZjaW5lcmd5dDItPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7CiAKIAlyZXR1cm4gKFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMUFJJKTsKIH0KQEAgLTYxMyw3ICs2MTcsNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJnAsICh2b2lkICBfX3VzZXIqKSBhcmcsIHNpemVvZihwKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgZG93bl9pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCisJCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAkJcGFyYW0tPmNtZCA9IENJTkVSR1lUMl9FUDFfU0VUX1RVTkVSX1BBUkFNRVRFUlM7CkBAIC02MjksNyArNjMzLDcgQEAKIAkJCQkJKGNoYXIgKikgcGFyYW0sIHNpemVvZigqcGFyYW0pLAogCQkJCQlOVUxMLCAwKTsKIAotCQl1cCgmY2luZXJneXQyLT5zZW0pOworCQltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKIAogCQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIAl9CkBAIC03MjQsNyArNzI4LDcgQEAKIAlzdHJ1Y3QgY2luZXJneXQyX3JjX2V2ZW50IHJjX2V2ZW50c1sxMl07CiAJaW50IG4sIGxlbiwgaTsKIAotCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKKwlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCiAJCXJldHVybjsKIAogCWxlbiA9IGNpbmVyZ3l0Ml9jb21tYW5kKGNpbmVyZ3l0MiwgYnVmLCBzaXplb2YoYnVmKSwKQEAgLTc4NCw3ICs3ODgsNyBAQAogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2luZXJneXQyLT5yY19xdWVyeV93b3JrLAogCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhSQ19RVUVSWV9JTlRFUlZBTCkpOwogCi0JdXAoJmNpbmVyZ3l0Mi0+c2VtKTsKKwltdXRleF91bmxvY2soJmNpbmVyZ3l0Mi0+c2VtKTsKIH0KIAogc3RhdGljIGludCBjaW5lcmd5dDJfcmVnaXN0ZXJfcmMoc3RydWN0IGNpbmVyZ3l0MiAqY2luZXJneXQyKQpAQCAtODQ5LDcgKzg1Myw3IEBACiAJdWludDhfdCBsb2NrX2JpdHM7CiAJdWludDMyX3QgdW5jOwogCi0JaWYgKGNpbmVyZ3l0Mi0+ZGlzY29ubmVjdF9wZW5kaW5nIHx8IGRvd25faW50ZXJydXB0aWJsZSgmY2luZXJneXQyLT5zZW0pKQorCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKIAkJcmV0dXJuOwogCiAJdW5jID0gcy0+dW5jb3JyZWN0ZWRfYmxvY2tfY291bnQ7CkBAIC04NjgsNyArODcyLDcgQEAKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNpbmVyZ3l0Mi0+cXVlcnlfd29yaywKIAkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoUVVFUllfSU5URVJWQUwpKTsKIAotCXVwKCZjaW5lcmd5dDItPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7CiB9CiAKIHN0YXRpYyBpbnQgY2luZXJneXQyX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKQEAgLTg4NSw3ICs4ODksNyBAQAogCW1lbXNldCAoY2luZXJneXQyLCAwLCBzaXplb2YgKHN0cnVjdCBjaW5lcmd5dDIpKTsKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCAodm9pZCAqKSBjaW5lcmd5dDIpOwogCi0JaW5pdF9NVVRFWCgmY2luZXJneXQyLT5zZW0pOworCW11dGV4X2luaXQoJmNpbmVyZ3l0Mi0+c2VtKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkICgmY2luZXJneXQyLT5wb2xsX3dxKTsKIAlJTklUX1dPUksoJmNpbmVyZ3l0Mi0+cXVlcnlfd29yaywgY2luZXJneXQyX3F1ZXJ5LCBjaW5lcmd5dDIpOwogCkBAIC05MzcsNiArOTQxLDcgQEAKIAlyZXR1cm4gMDsKIAogYmFpbG91dDoKKwlkdmJfbmV0X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZHZibmV0KTsKIAlkdmJfZG14ZGV2X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZG14ZGV2KTsKIAlkdmJfZG14X3JlbGVhc2UoJmNpbmVyZ3l0Mi0+ZGVtdXgpOwogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmNpbmVyZ3l0Mi0+YWRhcHRlcik7CkBAIC05NjcsNyArOTcyLDcgQEAKIHsKIAlzdHJ1Y3QgY2luZXJneXQyICpjaW5lcmd5dDIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKIAotCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKKwlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoc3RhdGUuZXZlbnQgPiBQTV9FVkVOVF9PTikgewpAQCAtOTgxLDcgKzk4Niw3IEBACiAJCWNpbmVyZ3l0Ml9zbGVlcChjaW5lcmd5dDIsIDEpOwogCX0KIAotCXVwKCZjaW5lcmd5dDItPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZjaW5lcmd5dDItPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk5MCw3ICs5OTUsNyBAQAogCXN0cnVjdCBjaW5lcmd5dDIgKmNpbmVyZ3l0MiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwogCXN0cnVjdCBkdmJ0X3NldF9wYXJhbWV0ZXJzX21zZyAqcGFyYW0gPSAmY2luZXJneXQyLT5wYXJhbTsKIAotCWlmIChjaW5lcmd5dDItPmRpc2Nvbm5lY3RfcGVuZGluZyB8fCBkb3duX2ludGVycnVwdGlibGUoJmNpbmVyZ3l0Mi0+c2VtKSkKKwlpZiAoY2luZXJneXQyLT5kaXNjb25uZWN0X3BlbmRpbmcgfHwgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjaW5lcmd5dDItPnNlbSkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoIWNpbmVyZ3l0Mi0+c2xlZXBpbmcpIHsKQEAgLTEwMDMsNyArMTAwOCw3IEBACiAKIAljaW5lcmd5dDJfcmVzdW1lX3JjKGNpbmVyZ3l0Mik7CiAKLQl1cCgmY2luZXJneXQyLT5zZW0pOworCW11dGV4X3VubG9jaygmY2luZXJneXQyLT5zZW0pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kZW11eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZGVtdXguaAppbmRleCA5ZjAyNTgyLi4wYzFkODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kZW11eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RlbXV4LmgKQEAgLTIxNiw3ICsyMTYsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCi0gKiBGbGFncyBPUidlZCBpbiB0aGUgY2FwYWJpbGl0ZXMgZmllbGQgb2Ygc3RydWN0IGRteF9kZW11eC4KKyAqIEZsYWdzIE9SJ2VkIGluIHRoZSBjYXBhYmlsaXRpZXMgZmllbGQgb2Ygc3RydWN0IGRteF9kZW11eC4KICAqLwogCiAjZGVmaW5lIERNWF9UU19GSUxURVJJTkcgICAgICAgICAgICAgICAgICAgICAgICAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCmluZGV4IDdiODM3M2EuLjA5ZTk2ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCkBAIC0xLDkgKzEsOCBAQAogLyoKICAqIGRteGRldi5jIC0gRFZCIGRlbXVsdGlwbGV4ZXIgZGV2aWNlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFJhbHBoICBNZXR6bGVyIDxyYWxwaEBjb252ZXJnZW5jZS5kZT4KLSAqCQkgICYgTWFyY3VzIE1ldHpsZXIgPG1hcmN1c0Bjb252ZXJnZW5jZS5kZT4KLQkJICAgICAgZm9yIGNvbnZlcmdlbmNlIGludGVncmF0ZWQgbWVkaWEgR21iSAorICogQ29weXJpZ2h0IChDKSAyMDAwIFJhbHBoIE1ldHpsZXIgJiBNYXJjdXMgTWV0emxlcgorICoJCSAgICAgIGZvciBjb252ZXJnZW5jZSBpbnRlZ3JhdGVkIG1lZGlhIEdtYkgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTMyLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KICNpbmNsdWRlICJkbXhkZXYuaCIKIAogc3RhdGljIGludCBkZWJ1ZzsKQEAgLTQyLDE3NyArNDAsMTMzIEBACiAKICNkZWZpbmUgZHByaW50awlpZiAoZGVidWcpIHByaW50awogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHZiX2RteGRldl9idWZmZXJfaW5pdChzdHJ1Y3QgZG14ZGV2X2J1ZmZlciAqYnVmZmVyKQorc3RhdGljIGludCBkdmJfZG14ZGV2X2J1ZmZlcl93cml0ZShzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKmJ1ZiwKKwkJCQkgICBjb25zdCB1OCAqc3JjLCBzaXplX3QgbGVuKQogewotCWJ1ZmZlci0+ZGF0YT1OVUxMOwotCWJ1ZmZlci0+c2l6ZT04MTkyOwotCWJ1ZmZlci0+cHJlYWQ9MDsKLQlidWZmZXItPnB3cml0ZT0wOwotCWJ1ZmZlci0+ZXJyb3I9MDsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidWZmZXItPnF1ZXVlKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZHZiX2RteGRldl9idWZmZXJfd3JpdGUoc3RydWN0IGRteGRldl9idWZmZXIgKmJ1ZiwgY29uc3QgdTggKnNyYywgaW50IGxlbikKLXsKLQlpbnQgc3BsaXQ7Ci0JaW50IGZyZWU7Ci0JaW50IHRvZG87CisJc3NpemVfdCBmcmVlOwogCiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwogCWlmICghYnVmLT5kYXRhKQogCQlyZXR1cm4gMDsKIAotCWZyZWU9YnVmLT5wcmVhZC1idWYtPnB3cml0ZTsKLQlzcGxpdD0wOwotCWlmIChmcmVlPD0wKSB7Ci0JCWZyZWUrPWJ1Zi0+c2l6ZTsKLQkJc3BsaXQ9YnVmLT5zaXplLWJ1Zi0+cHdyaXRlOwotCX0KLQlpZiAobGVuPj1mcmVlKSB7CisJZnJlZSA9IGR2Yl9yaW5nYnVmZmVyX2ZyZWUoYnVmKTsKKwlpZiAobGVuID4gZnJlZSkgewogCQlkcHJpbnRrKCJkbXhkZXY6IGJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJfQotCWlmIChzcGxpdD49bGVuKQotCQlzcGxpdD0wOwotCXRvZG89bGVuOwotCWlmIChzcGxpdCkgewotCQltZW1jcHkoYnVmLT5kYXRhICsgYnVmLT5wd3JpdGUsIHNyYywgc3BsaXQpOwotCQl0b2RvLT1zcGxpdDsKLQkJYnVmLT5wd3JpdGU9MDsKLQl9Ci0JbWVtY3B5KGJ1Zi0+ZGF0YSArIGJ1Zi0+cHdyaXRlLCBzcmMrc3BsaXQsIHRvZG8pOwotCWJ1Zi0+cHdyaXRlPShidWYtPnB3cml0ZSt0b2RvKSVidWYtPnNpemU7Ci0JcmV0dXJuIGxlbjsKKworCXJldHVybiBkdmJfcmluZ2J1ZmZlcl93cml0ZShidWYsIHNyYywgbGVuKTsKIH0KIAotc3RhdGljIHNzaXplX3QgZHZiX2RteGRldl9idWZmZXJfcmVhZChzdHJ1Y3QgZG14ZGV2X2J1ZmZlciAqc3JjLAotCQlpbnQgbm9uX2Jsb2NraW5nLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IGR2Yl9kbXhkZXZfYnVmZmVyX3JlYWQoc3RydWN0IGR2Yl9yaW5nYnVmZmVyICpzcmMsCisJCQkJICAgICAgaW50IG5vbl9ibG9ja2luZywgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQl1bnNpZ25lZCBsb25nIHRvZG89Y291bnQ7Ci0JaW50IHNwbGl0LCBhdmFpbCwgZXJyb3I7CisJc2l6ZV90IHRvZG87CisJc3NpemVfdCBhdmFpbDsKKwlzc2l6ZV90IHJldCA9IDA7CiAKIAlpZiAoIXNyYy0+ZGF0YSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKGVycm9yPXNyYy0+ZXJyb3IpKSB7Ci0JCXNyYy0+cHdyaXRlPXNyYy0+cHJlYWQ7Ci0JCXNyYy0+ZXJyb3I9MDsKLQkJcmV0dXJuIGVycm9yOworCWlmIChzcmMtPmVycm9yKSB7CisJCXJldCA9IHNyYy0+ZXJyb3I7CisJCWR2Yl9yaW5nYnVmZmVyX2ZsdXNoKHNyYyk7CisJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKG5vbl9ibG9ja2luZyAmJiAoc3JjLT5wd3JpdGU9PXNyYy0+cHJlYWQpKQotCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCi0Jd2hpbGUgKHRvZG8+MCkgewotCQlpZiAobm9uX2Jsb2NraW5nICYmIChzcmMtPnB3cml0ZT09c3JjLT5wcmVhZCkpCi0JCQlyZXR1cm4gKGNvdW50LXRvZG8pID8gKGNvdW50LXRvZG8pIDogLUVXT1VMREJMT0NLOwotCi0JCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc3JjLT5xdWV1ZSwKLQkJCQkJICAgICAoc3JjLT5wcmVhZCE9c3JjLT5wd3JpdGUpIHx8Ci0JCQkJCSAgICAgKHNyYy0+ZXJyb3IpKTwwKQotCQkJcmV0dXJuIGNvdW50LXRvZG87Ci0KLQkJaWYgKChlcnJvcj1zcmMtPmVycm9yKSkgewotCQkJc3JjLT5wd3JpdGU9c3JjLT5wcmVhZDsKLQkJCXNyYy0+ZXJyb3I9MDsKLQkJCXJldHVybiBlcnJvcjsKKwlmb3IgKHRvZG8gPSBjb3VudDsgdG9kbyA+IDA7IHRvZG8gLT0gcmV0KSB7CisJCWlmIChub25fYmxvY2tpbmcgJiYgZHZiX3JpbmdidWZmZXJfZW1wdHkoc3JjKSkgeworCQkJcmV0ID0gLUVXT1VMREJMT0NLOworCQkJYnJlYWs7CiAJCX0KIAotCQlzcGxpdD1zcmMtPnNpemU7Ci0JCWF2YWlsPXNyYy0+cHdyaXRlIC0gc3JjLT5wcmVhZDsKLQkJaWYgKGF2YWlsPDApIHsKLQkJCWF2YWlsKz1zcmMtPnNpemU7Ci0JCQlzcGxpdD1zcmMtPnNpemUgLSBzcmMtPnByZWFkOworCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc3JjLT5xdWV1ZSwKKwkJCQkJICAgICAgICFkdmJfcmluZ2J1ZmZlcl9lbXB0eShzcmMpIHx8CisJCQkJCSAgICAgICAoc3JjLT5lcnJvciAhPSAwKSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHNyYy0+ZXJyb3IpIHsKKwkJCXJldCA9IHNyYy0+ZXJyb3I7CisJCQlkdmJfcmluZ2J1ZmZlcl9mbHVzaChzcmMpOworCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGF2YWlsPnRvZG8pCi0JCQlhdmFpbD10b2RvOwotCQlpZiAoc3BsaXQ8YXZhaWwpIHsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBzcmMtPmRhdGErc3JjLT5wcmVhZCwgc3BsaXQpKQotCQkJCSAgcmV0dXJuIC1FRkFVTFQ7Ci0JCQlidWYrPXNwbGl0OwotCQkJc3JjLT5wcmVhZD0wOwotCQkJdG9kby09c3BsaXQ7Ci0JCQlhdmFpbC09c3BsaXQ7Ci0JCX0KLQkJaWYgKGF2YWlsKSB7Ci0JCQlpZiAoY29weV90b191c2VyKGJ1Ziwgc3JjLT5kYXRhK3NyYy0+cHJlYWQsIGF2YWlsKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXNyYy0+cHJlYWQgPSAoc3JjLT5wcmVhZCArIGF2YWlsKSAlIHNyYy0+c2l6ZTsKLQkJCXRvZG8tPWF2YWlsOwotCQkJYnVmKz1hdmFpbDsKLQkJfQorCisJCWF2YWlsID0gZHZiX3JpbmdidWZmZXJfYXZhaWwoc3JjKTsKKwkJaWYgKGF2YWlsID4gdG9kbykKKwkJCWF2YWlsID0gdG9kbzsKKworCQlyZXQgPSBkdmJfcmluZ2J1ZmZlcl9yZWFkKHNyYywgYnVmLCBhdmFpbCwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJYnVmICs9IHJldDsKIAl9Ci0JcmV0dXJuIGNvdW50OworCisJcmV0dXJuIChjb3VudCAtIHRvZG8pID8gKGNvdW50IC0gdG9kbykgOiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG14X2Zyb250ZW5kICogZ2V0X2ZlKHN0cnVjdCBkbXhfZGVtdXggKmRlbXV4LCBpbnQgdHlwZSkKK3N0YXRpYyBzdHJ1Y3QgZG14X2Zyb250ZW5kICpnZXRfZmUoc3RydWN0IGRteF9kZW11eCAqZGVtdXgsIGludCB0eXBlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICpwb3M7CiAKLQloZWFkPWRlbXV4LT5nZXRfZnJvbnRlbmRzKGRlbXV4KTsKKwloZWFkID0gZGVtdXgtPmdldF9mcm9udGVuZHMoZGVtdXgpOwogCWlmICghaGVhZCkKIAkJcmV0dXJuIE5VTEw7CiAJbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpCi0JCWlmIChETVhfRkVfRU5UUlkocG9zKS0+c291cmNlPT10eXBlKQorCQlpZiAoRE1YX0ZFX0VOVFJZKHBvcyktPnNvdXJjZSA9PSB0eXBlKQogCQkJcmV0dXJuIERNWF9GRV9FTlRSWShwb3MpOwogCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdmJfZG14ZGV2X2R2cl9zdGF0ZV9zZXQoc3RydWN0IGRteGRldl9kdnIgKmRteGRldmR2ciwgaW50IHN0YXRlKQotewotCXNwaW5fbG9ja19pcnEoJmRteGRldmR2ci0+ZGV2LT5sb2NrKTsKLQlkbXhkZXZkdnItPnN0YXRlPXN0YXRlOwotCXNwaW5fdW5sb2NrX2lycSgmZG14ZGV2ZHZyLT5kZXYtPmxvY2spOwotfQotCiBzdGF0aWMgaW50IGR2Yl9kdnJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkbXhkZXYgKmRteGRldiA9IGR2YmRldi0+cHJpdjsKIAlzdHJ1Y3QgZG14X2Zyb250ZW5kICpmcm9udDsKIAotCWRwcmludGsgKCJmdW5jdGlvbiA6ICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRwcmludGsoImZ1bmN0aW9uIDogJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZG14ZGV2LT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZG14ZGV2LT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlpZiAoKGZpbGUtPmZfZmxhZ3MmT19BQ0NNT0RFKT09T19SRFdSKSB7Ci0JCWlmICghKGRteGRldi0+Y2FwYWJpbGl0aWVzJkRNWERFVl9DQVBfRFVQTEVYKSkgewotCQkJdXAoJmRteGRldi0+bXV0ZXgpOworCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRFdSKSB7CisJCWlmICghKGRteGRldi0+Y2FwYWJpbGl0aWVzICYgRE1YREVWX0NBUF9EVVBMRVgpKSB7CisJCQltdXRleF91bmxvY2soJmRteGRldi0+bXV0ZXgpOwogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQl9CiAJfQogCi0JaWYgKChmaWxlLT5mX2ZsYWdzJk9fQUNDTU9ERSk9PU9fUkRPTkxZKSB7Ci0JICAgICAgZHZiX2RteGRldl9idWZmZXJfaW5pdCgmZG14ZGV2LT5kdnJfYnVmZmVyKTsKLQkgICAgICBkbXhkZXYtPmR2cl9idWZmZXIuc2l6ZT1EVlJfQlVGRkVSX1NJWkU7Ci0JICAgICAgZG14ZGV2LT5kdnJfYnVmZmVyLmRhdGE9dm1hbGxvYyhEVlJfQlVGRkVSX1NJWkUpOwotCSAgICAgIGlmICghZG14ZGV2LT5kdnJfYnVmZmVyLmRhdGEpIHsKLQkJICAgICAgdXAoJmRteGRldi0+bXV0ZXgpOwotCQkgICAgICByZXR1cm4gLUVOT01FTTsKLQkgICAgICB9CisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JET05MWSkgeworCQl2b2lkICptZW0gPSB2bWFsbG9jKERWUl9CVUZGRVJfU0laRSk7CisJCWlmICghbWVtKSB7CisJCQltdXRleF91bmxvY2soJmRteGRldi0+bXV0ZXgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZHZiX3JpbmdidWZmZXJfaW5pdCgmZG14ZGV2LT5kdnJfYnVmZmVyLCBtZW0sIERWUl9CVUZGRVJfU0laRSk7CiAJfQogCi0JaWYgKChmaWxlLT5mX2ZsYWdzJk9fQUNDTU9ERSk9PU9fV1JPTkxZKSB7Ci0JCWRteGRldi0+ZHZyX29yaWdfZmU9ZG14ZGV2LT5kZW11eC0+ZnJvbnRlbmQ7CisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkgeworCQlkbXhkZXYtPmR2cl9vcmlnX2ZlID0gZG14ZGV2LT5kZW11eC0+ZnJvbnRlbmQ7CiAKIAkJaWYgKCFkbXhkZXYtPmRlbXV4LT53cml0ZSkgewotCQkJdXAoJmRteGRldi0+bXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJfQogCi0JCWZyb250PWdldF9mZShkbXhkZXYtPmRlbXV4LCBETVhfTUVNT1JZX0ZFKTsKKwkJZnJvbnQgPSBnZXRfZmUoZG14ZGV2LT5kZW11eCwgRE1YX01FTU9SWV9GRSk7CiAKIAkJaWYgKCFmcm9udCkgewotCQkJdXAoJmRteGRldi0+bXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWRteGRldi0+ZGVtdXgtPmRpc2Nvbm5lY3RfZnJvbnRlbmQoZG14ZGV2LT5kZW11eCk7CiAJCWRteGRldi0+ZGVtdXgtPmNvbm5lY3RfZnJvbnRlbmQoZG14ZGV2LT5kZW11eCwgZnJvbnQpOwogCX0KLQl1cCgmZG14ZGV2LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIxLDMwICsxNzUsMzAgQEAKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkbXhkZXYgKmRteGRldiA9IGR2YmRldi0+cHJpdjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkbXhkZXYtPm11dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkbXhkZXYtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmICgoZmlsZS0+Zl9mbGFncyZPX0FDQ01PREUpPT1PX1dST05MWSkgeworCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpIHsKIAkJZG14ZGV2LT5kZW11eC0+ZGlzY29ubmVjdF9mcm9udGVuZChkbXhkZXYtPmRlbXV4KTsKIAkJZG14ZGV2LT5kZW11eC0+Y29ubmVjdF9mcm9udGVuZChkbXhkZXYtPmRlbXV4LAogCQkJCQkJZG14ZGV2LT5kdnJfb3JpZ19mZSk7CiAJfQotCWlmICgoZmlsZS0+Zl9mbGFncyZPX0FDQ01PREUpPT1PX1JET05MWSkgeworCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpIHsKIAkJaWYgKGRteGRldi0+ZHZyX2J1ZmZlci5kYXRhKSB7Ci0JCQl2b2lkICptZW09ZG14ZGV2LT5kdnJfYnVmZmVyLmRhdGE7CisJCQl2b2lkICptZW0gPSBkbXhkZXYtPmR2cl9idWZmZXIuZGF0YTsKIAkJCW1iKCk7CiAJCQlzcGluX2xvY2tfaXJxKCZkbXhkZXYtPmxvY2spOwotCQkJZG14ZGV2LT5kdnJfYnVmZmVyLmRhdGE9TlVMTDsKKwkJCWRteGRldi0+ZHZyX2J1ZmZlci5kYXRhID0gTlVMTDsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZG14ZGV2LT5sb2NrKTsKIAkJCXZmcmVlKG1lbSk7CiAJCX0KIAl9Ci0JdXAoJmRteGRldi0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmZG14ZGV2LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGR2Yl9kdnJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkbXhkZXYgKmRteGRldiA9IGR2YmRldi0+cHJpdjsKQEAgLTI1Miw2MCArMjA2LDYyIEBACiAKIAlpZiAoIWRteGRldi0+ZGVtdXgtPndyaXRlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKChmaWxlLT5mX2ZsYWdzJk9fQUNDTU9ERSkhPU9fV1JPTkxZKQorCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19XUk9OTFkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkbXhkZXYtPm11dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkbXhkZXYtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXQ9ZG14ZGV2LT5kZW11eC0+d3JpdGUoZG14ZGV2LT5kZW11eCwgYnVmLCBjb3VudCk7Ci0JdXAoJmRteGRldi0+bXV0ZXgpOworCXJldCA9IGRteGRldi0+ZGVtdXgtPndyaXRlKGRteGRldi0+ZGVtdXgsIGJ1ZiwgY291bnQpOworCW11dGV4X3VubG9jaygmZG14ZGV2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNzaXplX3QgZHZiX2R2cl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCi0JCWxvZmZfdCAqcHBvcykKKwkJCSAgICBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZG14ZGV2ICpkbXhkZXYgPSBkdmJkZXYtPnByaXY7CiAJaW50IHJldDsKIAotCS8vZG93bigmZG14ZGV2LT5tdXRleCk7Ci0JcmV0PSBkdmJfZG14ZGV2X2J1ZmZlcl9yZWFkKCZkbXhkZXYtPmR2cl9idWZmZXIsCi0JCQkgICAgICBmaWxlLT5mX2ZsYWdzJk9fTk9OQkxPQ0ssCi0JCQkgICAgICBidWYsIGNvdW50LCBwcG9zKTsKLQkvL3VwKCZkbXhkZXYtPm11dGV4KTsKKwkvL211dGV4X2xvY2soJmRteGRldi0+bXV0ZXgpOworCXJldCA9IGR2Yl9kbXhkZXZfYnVmZmVyX3JlYWQoJmRteGRldi0+ZHZyX2J1ZmZlciwKKwkJCQkgICAgIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLLAorCQkJCSAgICAgYnVmLCBjb3VudCwgcHBvcyk7CisJLy9tdXRleF91bmxvY2soJmRteGRldi0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkdmJfZG14ZGV2X2ZpbHRlcl9zdGF0ZV9zZXQoc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciwgaW50IHN0YXRlKQorc3RhdGljIGlubGluZSB2b2lkIGR2Yl9kbXhkZXZfZmlsdGVyX3N0YXRlX3NldChzdHJ1Y3QgZG14ZGV2X2ZpbHRlcgorCQkJCQkgICAgICAgKmRteGRldmZpbHRlciwgaW50IHN0YXRlKQogewogCXNwaW5fbG9ja19pcnEoJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrKTsKLQlkbXhkZXZmaWx0ZXItPnN0YXRlPXN0YXRlOworCWRteGRldmZpbHRlci0+c3RhdGUgPSBzdGF0ZTsKIAlzcGluX3VubG9ja19pcnEoJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrKTsKIH0KIAotc3RhdGljIGludCBkdmJfZG14ZGV2X3NldF9idWZmZXJfc2l6ZShzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW50IGR2Yl9kbXhkZXZfc2V0X2J1ZmZlcl9zaXplKHN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXN0cnVjdCBkbXhkZXZfYnVmZmVyICpidWY9JmRteGRldmZpbHRlci0+YnVmZmVyOworCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciAqYnVmID0gJmRteGRldmZpbHRlci0+YnVmZmVyOwogCXZvaWQgKm1lbTsKIAotCWlmIChidWYtPnNpemU9PXNpemUpCisJaWYgKGJ1Zi0+c2l6ZSA9PSBzaXplKQogCQlyZXR1cm4gMDsKLQlpZiAoZG14ZGV2ZmlsdGVyLT5zdGF0ZT49RE1YREVWX1NUQVRFX0dPKQorCWlmIChkbXhkZXZmaWx0ZXItPnN0YXRlID49IERNWERFVl9TVEFURV9HTykKIAkJcmV0dXJuIC1FQlVTWTsKIAlzcGluX2xvY2tfaXJxKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7Ci0JbWVtPWJ1Zi0+ZGF0YTsKLQlidWYtPmRhdGE9TlVMTDsKLQlidWYtPnNpemU9c2l6ZTsKLQlidWYtPnB3cml0ZT1idWYtPnByZWFkPTA7CisJbWVtID0gYnVmLT5kYXRhOworCWJ1Zi0+ZGF0YSA9IE5VTEw7CisJYnVmLT5zaXplID0gc2l6ZTsKKwlkdmJfcmluZ2J1ZmZlcl9mbHVzaChidWYpOwogCXNwaW5fdW5sb2NrX2lycSgmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2spOwogCXZmcmVlKG1lbSk7CiAKIAlpZiAoYnVmLT5zaXplKSB7Ci0JCW1lbT12bWFsbG9jKGRteGRldmZpbHRlci0+YnVmZmVyLnNpemUpOworCQltZW0gPSB2bWFsbG9jKGRteGRldmZpbHRlci0+YnVmZmVyLnNpemUpOwogCQlpZiAoIW1lbSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlzcGluX2xvY2tfaXJxKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7Ci0JCWJ1Zi0+ZGF0YT1tZW07CisJCWJ1Zi0+ZGF0YSA9IG1lbTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7CiAJfQogCXJldHVybiAwOwpAQCAtMzEzLDMxICsyNjksMzMgQEAKIAogc3RhdGljIHZvaWQgZHZiX2RteGRldl9maWx0ZXJfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlcj0oc3RydWN0IGRteGRldl9maWx0ZXIgKilkYXRhOworCXN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIgPSAoc3RydWN0IGRteGRldl9maWx0ZXIgKilkYXRhOwogCi0JZG14ZGV2ZmlsdGVyLT5idWZmZXIuZXJyb3I9LUVUSU1FRE9VVDsKKwlkbXhkZXZmaWx0ZXItPmJ1ZmZlci5lcnJvciA9IC1FVElNRURPVVQ7CiAJc3Bpbl9sb2NrX2lycSgmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2spOwotCWRteGRldmZpbHRlci0+c3RhdGU9RE1YREVWX1NUQVRFX1RJTUVET1VUOworCWRteGRldmZpbHRlci0+c3RhdGUgPSBETVhERVZfU1RBVEVfVElNRURPVVQ7CiAJc3Bpbl91bmxvY2tfaXJxKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7CiAJd2FrZV91cCgmZG14ZGV2ZmlsdGVyLT5idWZmZXIucXVldWUpOwogfQogCiBzdGF0aWMgdm9pZCBkdmJfZG14ZGV2X2ZpbHRlcl90aW1lcihzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyKQogewotCXN0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMgKnBhcmE9JmRteGRldmZpbHRlci0+cGFyYW1zLnNlYzsKKwlzdHJ1Y3QgZG14X3NjdF9maWx0ZXJfcGFyYW1zICpwYXJhID0gJmRteGRldmZpbHRlci0+cGFyYW1zLnNlYzsKIAogCWRlbF90aW1lcigmZG14ZGV2ZmlsdGVyLT50aW1lcik7CiAJaWYgKHBhcmEtPnRpbWVvdXQpIHsKLQkJZG14ZGV2ZmlsdGVyLT50aW1lci5mdW5jdGlvbj1kdmJfZG14ZGV2X2ZpbHRlcl90aW1lb3V0OwotCQlkbXhkZXZmaWx0ZXItPnRpbWVyLmRhdGE9KHVuc2lnbmVkIGxvbmcpIGRteGRldmZpbHRlcjsKLQkJZG14ZGV2ZmlsdGVyLT50aW1lci5leHBpcmVzPWppZmZpZXMrMSsoSFovMitIWipwYXJhLT50aW1lb3V0KS8xMDAwOworCQlkbXhkZXZmaWx0ZXItPnRpbWVyLmZ1bmN0aW9uID0gZHZiX2RteGRldl9maWx0ZXJfdGltZW91dDsKKwkJZG14ZGV2ZmlsdGVyLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZG14ZGV2ZmlsdGVyOworCQlkbXhkZXZmaWx0ZXItPnRpbWVyLmV4cGlyZXMgPQorCQkgICAgamlmZmllcyArIDEgKyAoSFogLyAyICsgSFogKiBwYXJhLT50aW1lb3V0KSAvIDEwMDA7CiAJCWFkZF90aW1lcigmZG14ZGV2ZmlsdGVyLT50aW1lcik7CiAJfQogfQogCiBzdGF0aWMgaW50IGR2Yl9kbXhkZXZfc2VjdGlvbl9jYWxsYmFjayhjb25zdCB1OCAqYnVmZmVyMSwgc2l6ZV90IGJ1ZmZlcjFfbGVuLAotCQkJICAgIGNvbnN0IHU4ICpidWZmZXIyLCBzaXplX3QgYnVmZmVyMl9sZW4sCi0JCQkgICAgc3RydWN0IGRteF9zZWN0aW9uX2ZpbHRlciAqZmlsdGVyLCBlbnVtIGRteF9zdWNjZXNzIHN1Y2Nlc3MpCisJCQkJICAgICAgIGNvbnN0IHU4ICpidWZmZXIyLCBzaXplX3QgYnVmZmVyMl9sZW4sCisJCQkJICAgICAgIHN0cnVjdCBkbXhfc2VjdGlvbl9maWx0ZXIgKmZpbHRlciwKKwkJCQkgICAgICAgZW51bSBkbXhfc3VjY2VzcyBzdWNjZXNzKQogewogCXN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIgPSBmaWx0ZXItPnByaXY7CiAJaW50IHJldDsKQEAgLTM0Nyw2OCArMzA1LDY4IEBACiAJCXJldHVybiAwOwogCX0KIAlzcGluX2xvY2soJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrKTsKLQlpZiAoZG14ZGV2ZmlsdGVyLT5zdGF0ZSE9RE1YREVWX1NUQVRFX0dPKSB7CisJaWYgKGRteGRldmZpbHRlci0+c3RhdGUgIT0gRE1YREVWX1NUQVRFX0dPKSB7CiAJCXNwaW5fdW5sb2NrKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAlkZWxfdGltZXIoJmRteGRldmZpbHRlci0+dGltZXIpOwogCWRwcmludGsoImRteGRldjogc2VjdGlvbiBjYWxsYmFjayAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkJYnVmZmVyMVswXSwgYnVmZmVyMVsxXSwKLQkJYnVmZmVyMVsyXSwgYnVmZmVyMVszXSwKLQkJYnVmZmVyMVs0XSwgYnVmZmVyMVs1XSk7Ci0JcmV0PWR2Yl9kbXhkZXZfYnVmZmVyX3dyaXRlKCZkbXhkZXZmaWx0ZXItPmJ1ZmZlciwgYnVmZmVyMSwgYnVmZmVyMV9sZW4pOwotCWlmIChyZXQ9PWJ1ZmZlcjFfbGVuKSB7Ci0JCXJldD1kdmJfZG14ZGV2X2J1ZmZlcl93cml0ZSgmZG14ZGV2ZmlsdGVyLT5idWZmZXIsIGJ1ZmZlcjIsIGJ1ZmZlcjJfbGVuKTsKKwkJYnVmZmVyMVsyXSwgYnVmZmVyMVszXSwgYnVmZmVyMVs0XSwgYnVmZmVyMVs1XSk7CisJcmV0ID0gZHZiX2RteGRldl9idWZmZXJfd3JpdGUoJmRteGRldmZpbHRlci0+YnVmZmVyLCBidWZmZXIxLAorCQkJCSAgICAgIGJ1ZmZlcjFfbGVuKTsKKwlpZiAocmV0ID09IGJ1ZmZlcjFfbGVuKSB7CisJCXJldCA9IGR2Yl9kbXhkZXZfYnVmZmVyX3dyaXRlKCZkbXhkZXZmaWx0ZXItPmJ1ZmZlciwgYnVmZmVyMiwKKwkJCQkJICAgICAgYnVmZmVyMl9sZW4pOwogCX0KLQlpZiAocmV0PDApIHsKLQkJZG14ZGV2ZmlsdGVyLT5idWZmZXIucHdyaXRlPWRteGRldmZpbHRlci0+YnVmZmVyLnByZWFkOwotCQlkbXhkZXZmaWx0ZXItPmJ1ZmZlci5lcnJvcj0tRU9WRVJGTE9XOworCWlmIChyZXQgPCAwKSB7CisJCWR2Yl9yaW5nYnVmZmVyX2ZsdXNoKCZkbXhkZXZmaWx0ZXItPmJ1ZmZlcik7CisJCWRteGRldmZpbHRlci0+YnVmZmVyLmVycm9yID0gcmV0OwogCX0KLQlpZiAoZG14ZGV2ZmlsdGVyLT5wYXJhbXMuc2VjLmZsYWdzJkRNWF9PTkVTSE9UKQotCQlkbXhkZXZmaWx0ZXItPnN0YXRlPURNWERFVl9TVEFURV9ET05FOworCWlmIChkbXhkZXZmaWx0ZXItPnBhcmFtcy5zZWMuZmxhZ3MgJiBETVhfT05FU0hPVCkKKwkJZG14ZGV2ZmlsdGVyLT5zdGF0ZSA9IERNWERFVl9TVEFURV9ET05FOwogCXNwaW5fdW5sb2NrKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7CiAJd2FrZV91cCgmZG14ZGV2ZmlsdGVyLT5idWZmZXIucXVldWUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGR2Yl9kbXhkZXZfdHNfY2FsbGJhY2soY29uc3QgdTggKmJ1ZmZlcjEsIHNpemVfdCBidWZmZXIxX2xlbiwKLQkJICAgICAgIGNvbnN0IHU4ICpidWZmZXIyLCBzaXplX3QgYnVmZmVyMl9sZW4sCi0JCSAgICAgICBzdHJ1Y3QgZG14X3RzX2ZlZWQgKmZlZWQsIGVudW0gZG14X3N1Y2Nlc3Mgc3VjY2VzcykKKwkJCQkgIGNvbnN0IHU4ICpidWZmZXIyLCBzaXplX3QgYnVmZmVyMl9sZW4sCisJCQkJICBzdHJ1Y3QgZG14X3RzX2ZlZWQgKmZlZWQsCisJCQkJICBlbnVtIGRteF9zdWNjZXNzIHN1Y2Nlc3MpCiB7CiAJc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciA9IGZlZWQtPnByaXY7Ci0Jc3RydWN0IGRteGRldl9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKmJ1ZmZlcjsKIAlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrKCZkbXhkZXZmaWx0ZXItPmRldi0+bG9jayk7Ci0JaWYgKGRteGRldmZpbHRlci0+cGFyYW1zLnBlcy5vdXRwdXQ9PURNWF9PVVRfREVDT0RFUikgeworCWlmIChkbXhkZXZmaWx0ZXItPnBhcmFtcy5wZXMub3V0cHV0ID09IERNWF9PVVRfREVDT0RFUikgewogCQlzcGluX3VubG9jaygmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoZG14ZGV2ZmlsdGVyLT5wYXJhbXMucGVzLm91dHB1dD09RE1YX09VVF9UQVApCi0JCWJ1ZmZlcj0mZG14ZGV2ZmlsdGVyLT5idWZmZXI7CisJaWYgKGRteGRldmZpbHRlci0+cGFyYW1zLnBlcy5vdXRwdXQgPT0gRE1YX09VVF9UQVApCisJCWJ1ZmZlciA9ICZkbXhkZXZmaWx0ZXItPmJ1ZmZlcjsKIAllbHNlCi0JCWJ1ZmZlcj0mZG14ZGV2ZmlsdGVyLT5kZXYtPmR2cl9idWZmZXI7CisJCWJ1ZmZlciA9ICZkbXhkZXZmaWx0ZXItPmRldi0+ZHZyX2J1ZmZlcjsKIAlpZiAoYnVmZmVyLT5lcnJvcikgewogCQlzcGluX3VubG9jaygmZG14ZGV2ZmlsdGVyLT5kZXYtPmxvY2spOwogCQl3YWtlX3VwKCZidWZmZXItPnF1ZXVlKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJldD1kdmJfZG14ZGV2X2J1ZmZlcl93cml0ZShidWZmZXIsIGJ1ZmZlcjEsIGJ1ZmZlcjFfbGVuKTsKLQlpZiAocmV0PT1idWZmZXIxX2xlbikKLQkJcmV0PWR2Yl9kbXhkZXZfYnVmZmVyX3dyaXRlKGJ1ZmZlciwgYnVmZmVyMiwgYnVmZmVyMl9sZW4pOwotCWlmIChyZXQ8MCkgewotCQlidWZmZXItPnB3cml0ZT1idWZmZXItPnByZWFkOwotCQlidWZmZXItPmVycm9yPS1FT1ZFUkZMT1c7CisJcmV0ID0gZHZiX2RteGRldl9idWZmZXJfd3JpdGUoYnVmZmVyLCBidWZmZXIxLCBidWZmZXIxX2xlbik7CisJaWYgKHJldCA9PSBidWZmZXIxX2xlbikKKwkJcmV0ID0gZHZiX2RteGRldl9idWZmZXJfd3JpdGUoYnVmZmVyLCBidWZmZXIyLCBidWZmZXIyX2xlbik7CisJaWYgKHJldCA8IDApIHsKKwkJZHZiX3JpbmdidWZmZXJfZmx1c2goYnVmZmVyKTsKKwkJYnVmZmVyLT5lcnJvciA9IHJldDsKIAl9CiAJc3Bpbl91bmxvY2soJmRteGRldmZpbHRlci0+ZGV2LT5sb2NrKTsKIAl3YWtlX3VwKCZidWZmZXItPnF1ZXVlKTsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKiBzdG9wIGZlZWQgYnV0IG9ubHkgbWFyayB0aGUgc3BlY2lmaWVkIGZpbHRlciBhcyBzdG9wcGVkIChzdGF0ZSBzZXQpICovCi0KIHN0YXRpYyBpbnQgZHZiX2RteGRldl9mZWVkX3N0b3Aoc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlcikKIHsKIAlkdmJfZG14ZGV2X2ZpbHRlcl9zdGF0ZV9zZXQoZG14ZGV2ZmlsdGVyLCBETVhERVZfU1RBVEVfU0VUKTsKQEAgLTQyNywyMCArMzg1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogLyogc3RhcnQgZmVlZCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBmaWx0ZXIgKi8KLQogc3RhdGljIGludCBkdmJfZG14ZGV2X2ZlZWRfc3RhcnQoc3RydWN0IGRteGRldl9maWx0ZXIgKmZpbHRlcikKIHsKLQlkdmJfZG14ZGV2X2ZpbHRlcl9zdGF0ZV9zZXQgKGZpbHRlciwgRE1YREVWX1NUQVRFX0dPKTsKKwlkdmJfZG14ZGV2X2ZpbHRlcl9zdGF0ZV9zZXQoZmlsdGVyLCBETVhERVZfU1RBVEVfR08pOwogCiAJc3dpdGNoIChmaWx0ZXItPnR5cGUpIHsKIAljYXNlIERNWERFVl9UWVBFX1NFQzoKIAkJcmV0dXJuIGZpbHRlci0+ZmVlZC5zZWMtPnN0YXJ0X2ZpbHRlcmluZyhmaWx0ZXItPmZlZWQuc2VjKTsKLQkJYnJlYWs7CiAJY2FzZSBETVhERVZfVFlQRV9QRVM6CiAJCXJldHVybiBmaWx0ZXItPmZlZWQudHMtPnN0YXJ0X2ZpbHRlcmluZyhmaWx0ZXItPmZlZWQudHMpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00NDgsMzIgKzQwMiwzMSBAQAogCXJldHVybiAwOwogfQogCi0KIC8qIHJlc3RhcnQgc2VjdGlvbiBmZWVkIGlmIGl0IGhhcyBmaWx0ZXJzIGxlZnQgYXNzb2NpYXRlZCB3aXRoIGl0LAogICAgb3RoZXJ3aXNlIHJlbGVhc2UgdGhlIGZlZWQgKi8KLQogc3RhdGljIGludCBkdmJfZG14ZGV2X2ZlZWRfcmVzdGFydChzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZmlsdGVyKQogewogCWludCBpOwogCXN0cnVjdCBkbXhkZXYgKmRteGRldiA9IGZpbHRlci0+ZGV2OwogCXUxNiBwaWQgPSBmaWx0ZXItPnBhcmFtcy5zZWMucGlkOwogCi0JZm9yIChpPTA7IGk8ZG14ZGV2LT5maWx0ZXJudW07IGkrKykKLQkJaWYgKGRteGRldi0+ZmlsdGVyW2ldLnN0YXRlPj1ETVhERVZfU1RBVEVfR08gJiYKLQkJICAgIGRteGRldi0+ZmlsdGVyW2ldLnR5cGU9PURNWERFVl9UWVBFX1NFQyAmJgotCQkgICAgZG14ZGV2LT5maWx0ZXJbaV0ucGlkPT1waWQpIHsKKwlmb3IgKGkgPSAwOyBpIDwgZG14ZGV2LT5maWx0ZXJudW07IGkrKykKKwkJaWYgKGRteGRldi0+ZmlsdGVyW2ldLnN0YXRlID49IERNWERFVl9TVEFURV9HTyAmJgorCQkgICAgZG14ZGV2LT5maWx0ZXJbaV0udHlwZSA9PSBETVhERVZfVFlQRV9TRUMgJiYKKwkJICAgIGRteGRldi0+ZmlsdGVyW2ldLnBhcmFtcy5zZWMucGlkID09IHBpZCkgewogCQkJZHZiX2RteGRldl9mZWVkX3N0YXJ0KCZkbXhkZXYtPmZpbHRlcltpXSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JZmlsdGVyLT5kZXYtPmRlbXV4LT5yZWxlYXNlX3NlY3Rpb25fZmVlZChkbXhkZXYtPmRlbXV4LCBmaWx0ZXItPmZlZWQuc2VjKTsKKwlmaWx0ZXItPmRldi0+ZGVtdXgtPnJlbGVhc2Vfc2VjdGlvbl9mZWVkKGRteGRldi0+ZGVtdXgsCisJCQkJCQkgZmlsdGVyLT5mZWVkLnNlYyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkdmJfZG14ZGV2X2ZpbHRlcl9zdG9wKHN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIpCiB7Ci0JaWYgKGRteGRldmZpbHRlci0+c3RhdGU8RE1YREVWX1NUQVRFX0dPKQorCWlmIChkbXhkZXZmaWx0ZXItPnN0YXRlIDwgRE1YREVWX1NUQVRFX0dPKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaCAoZG14ZGV2ZmlsdGVyLT50eXBlKSB7CkBAIC00ODMsMzYgKzQzNiwzNiBAQAogCQlkdmJfZG14ZGV2X2ZlZWRfc3RvcChkbXhkZXZmaWx0ZXIpOwogCQlpZiAoZG14ZGV2ZmlsdGVyLT5maWx0ZXIuc2VjKQogCQkJZG14ZGV2ZmlsdGVyLT5mZWVkLnNlYy0+Ci0JCQkJcmVsZWFzZV9maWx0ZXIoZG14ZGV2ZmlsdGVyLT5mZWVkLnNlYywKLQkJCQkJICAgICAgIGRteGRldmZpbHRlci0+ZmlsdGVyLnNlYyk7CisJCQkgICAgcmVsZWFzZV9maWx0ZXIoZG14ZGV2ZmlsdGVyLT5mZWVkLnNlYywKKwkJCQkJICAgZG14ZGV2ZmlsdGVyLT5maWx0ZXIuc2VjKTsKIAkJZHZiX2RteGRldl9mZWVkX3Jlc3RhcnQoZG14ZGV2ZmlsdGVyKTsKLQkJZG14ZGV2ZmlsdGVyLT5mZWVkLnNlYz1OVUxMOworCQlkbXhkZXZmaWx0ZXItPmZlZWQuc2VjID0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBETVhERVZfVFlQRV9QRVM6CiAJCWlmICghZG14ZGV2ZmlsdGVyLT5mZWVkLnRzKQogCQkJYnJlYWs7CiAJCWR2Yl9kbXhkZXZfZmVlZF9zdG9wKGRteGRldmZpbHRlcik7CiAJCWRteGRldmZpbHRlci0+ZGV2LT5kZW11eC0+Ci0JCQlyZWxlYXNlX3RzX2ZlZWQoZG14ZGV2ZmlsdGVyLT5kZXYtPmRlbXV4LAotCQkJCQlkbXhkZXZmaWx0ZXItPmZlZWQudHMpOwotCQlkbXhkZXZmaWx0ZXItPmZlZWQudHM9TlVMTDsKKwkJICAgIHJlbGVhc2VfdHNfZmVlZChkbXhkZXZmaWx0ZXItPmRldi0+ZGVtdXgsCisJCQkJICAgIGRteGRldmZpbHRlci0+ZmVlZC50cyk7CisJCWRteGRldmZpbHRlci0+ZmVlZC50cyA9IE5VTEw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWlmIChkbXhkZXZmaWx0ZXItPnN0YXRlPT1ETVhERVZfU1RBVEVfQUxMT0NBVEVEKQorCQlpZiAoZG14ZGV2ZmlsdGVyLT5zdGF0ZSA9PSBETVhERVZfU1RBVEVfQUxMT0NBVEVEKQogCQkJcmV0dXJuIDA7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlkbXhkZXZmaWx0ZXItPmJ1ZmZlci5wd3JpdGU9ZG14ZGV2ZmlsdGVyLT5idWZmZXIucHJlYWQ9MDsKKworCWR2Yl9yaW5nYnVmZmVyX2ZsdXNoKCZkbXhkZXZmaWx0ZXItPmJ1ZmZlcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGR2Yl9kbXhkZXZfZmlsdGVyX3Jlc2V0KHN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIpCiB7Ci0JaWYgKGRteGRldmZpbHRlci0+c3RhdGU8RE1YREVWX1NUQVRFX1NFVCkKKwlpZiAoZG14ZGV2ZmlsdGVyLT5zdGF0ZSA8IERNWERFVl9TVEFURV9TRVQpCiAJCXJldHVybiAwOwogCi0JZG14ZGV2ZmlsdGVyLT50eXBlPURNWERFVl9UWVBFX05PTkU7Ci0JZG14ZGV2ZmlsdGVyLT5waWQ9MHhmZmZmOworCWRteGRldmZpbHRlci0+dHlwZSA9IERNWERFVl9UWVBFX05PTkU7CiAJZHZiX2RteGRldl9maWx0ZXJfc3RhdGVfc2V0KGRteGRldmZpbHRlciwgRE1YREVWX1NUQVRFX0FMTE9DQVRFRCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MjksMzIgKzQ4MiwzMyBAQAogCWlmIChmaWx0ZXItPnN0YXRlID49IERNWERFVl9TVEFURV9HTykKIAkJZHZiX2RteGRldl9maWx0ZXJfc3RvcChmaWx0ZXIpOwogCi0JaWYgKCEobWVtID0gZmlsdGVyLT5idWZmZXIuZGF0YSkpIHsKKwlpZiAoIWZpbHRlci0+YnVmZmVyLmRhdGEpIHsKIAkJbWVtID0gdm1hbGxvYyhmaWx0ZXItPmJ1ZmZlci5zaXplKTsKLQkJc3Bpbl9sb2NrX2lycSgmZmlsdGVyLT5kZXYtPmxvY2spOwotCQlmaWx0ZXItPmJ1ZmZlci5kYXRhPW1lbTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZmaWx0ZXItPmRldi0+bG9jayk7Ci0JCWlmICghZmlsdGVyLT5idWZmZXIuZGF0YSkKKwkJaWYgKCFtZW0pCiAJCQlyZXR1cm4gLUVOT01FTTsKKwkJc3Bpbl9sb2NrX2lycSgmZmlsdGVyLT5kZXYtPmxvY2spOworCQlmaWx0ZXItPmJ1ZmZlci5kYXRhID0gbWVtOworCQlzcGluX3VubG9ja19pcnEoJmZpbHRlci0+ZGV2LT5sb2NrKTsKIAl9CiAKLQlmaWx0ZXItPmJ1ZmZlci5wd3JpdGUgPSBmaWx0ZXItPmJ1ZmZlci5wcmVhZCA9IDA7CisJZHZiX3JpbmdidWZmZXJfZmx1c2goJmZpbHRlci0+YnVmZmVyKTsKIAogCXN3aXRjaCAoZmlsdGVyLT50eXBlKSB7CiAJY2FzZSBETVhERVZfVFlQRV9TRUM6CiAJewotCQlzdHJ1Y3QgZG14X3NjdF9maWx0ZXJfcGFyYW1zICpwYXJhPSZmaWx0ZXItPnBhcmFtcy5zZWM7Ci0JCXN0cnVjdCBkbXhfc2VjdGlvbl9maWx0ZXIgKipzZWNmaWx0ZXI9JmZpbHRlci0+ZmlsdGVyLnNlYzsKLQkJc3RydWN0IGRteF9zZWN0aW9uX2ZlZWQgKipzZWNmZWVkPSZmaWx0ZXItPmZlZWQuc2VjOworCQlzdHJ1Y3QgZG14X3NjdF9maWx0ZXJfcGFyYW1zICpwYXJhID0gJmZpbHRlci0+cGFyYW1zLnNlYzsKKwkJc3RydWN0IGRteF9zZWN0aW9uX2ZpbHRlciAqKnNlY2ZpbHRlciA9ICZmaWx0ZXItPmZpbHRlci5zZWM7CisJCXN0cnVjdCBkbXhfc2VjdGlvbl9mZWVkICoqc2VjZmVlZCA9ICZmaWx0ZXItPmZlZWQuc2VjOwogCi0JCSpzZWNmaWx0ZXI9TlVMTDsKLQkJKnNlY2ZlZWQ9TlVMTDsKKwkJKnNlY2ZpbHRlciA9IE5VTEw7CisJCSpzZWNmZWVkID0gTlVMTDsKKwogCiAJCS8qIGZpbmQgYWN0aXZlIGZpbHRlci9mZWVkIHdpdGggc2FtZSBQSUQgKi8KLQkJZm9yIChpPTA7IGk8ZG14ZGV2LT5maWx0ZXJudW07IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgZG14ZGV2LT5maWx0ZXJudW07IGkrKykgewogCQkJaWYgKGRteGRldi0+ZmlsdGVyW2ldLnN0YXRlID49IERNWERFVl9TVEFURV9HTyAmJgotCQkJICAgIGRteGRldi0+ZmlsdGVyW2ldLnBpZCA9PSBwYXJhLT5waWQgJiYKLQkJCSAgICBkbXhkZXYtPmZpbHRlcltpXS50eXBlID09IERNWERFVl9UWVBFX1NFQykgeworCQkJICAgIGRteGRldi0+ZmlsdGVyW2ldLnR5cGUgPT0gRE1YREVWX1RZUEVfU0VDICYmCisJCQkgICAgZG14ZGV2LT5maWx0ZXJbaV0ucGFyYW1zLnNlYy5waWQgPT0gcGFyYS0+cGlkKSB7CiAJCQkJKnNlY2ZlZWQgPSBkbXhkZXYtPmZpbHRlcltpXS5mZWVkLnNlYzsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTU2MiwyMSArNTE2LDIwIEBACiAKIAkJLyogaWYgbm8gZmVlZCBmb3VuZCwgdHJ5IHRvIGFsbG9jYXRlIG5ldyBvbmUgKi8KIAkJaWYgKCEqc2VjZmVlZCkgewotCQkJcmV0PWRteGRldi0+ZGVtdXgtPmFsbG9jYXRlX3NlY3Rpb25fZmVlZChkbXhkZXYtPmRlbXV4LAotCQkJCQkJCQkgc2VjZmVlZCwKLQkJCQkJCSAgIGR2Yl9kbXhkZXZfc2VjdGlvbl9jYWxsYmFjayk7Ci0JCQlpZiAocmV0PDApIHsKLQkJCQlwcmludGsgKCJEVkIgKCVzKTogY291bGQgbm90IGFsbG9jIGZlZWRcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXyk7CisJCQlyZXQgPSBkbXhkZXYtPmRlbXV4LT5hbGxvY2F0ZV9zZWN0aW9uX2ZlZWQoZG14ZGV2LT5kZW11eCwKKwkJCQkJCQkJICAgc2VjZmVlZCwKKwkJCQkJCQkJICAgZHZiX2RteGRldl9zZWN0aW9uX2NhbGxiYWNrKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRrKCJEVkIgKCVzKTogY291bGQgbm90IGFsbG9jIGZlZWRcbiIsCisJCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CiAJCQkJcmV0dXJuIHJldDsKIAkJCX0KIAotCQkJcmV0PSgqc2VjZmVlZCktPnNldCgqc2VjZmVlZCwgcGFyYS0+cGlkLCAzMjc2OCwKLQkJCQkJICAgIChwYXJhLT5mbGFncyAmIERNWF9DSEVDS19DUkMpID8gMSA6IDApOwotCi0JCQlpZiAocmV0PDApIHsKLQkJCQlwcmludGsgKCJEVkIgKCVzKTogY291bGQgbm90IHNldCBmZWVkXG4iLAotCQkJCQlfX0ZVTkNUSU9OX18pOworCQkJcmV0ID0gKCpzZWNmZWVkKS0+c2V0KCpzZWNmZWVkLCBwYXJhLT5waWQsIDMyNzY4LAorCQkJCQkgICAgICAocGFyYS0+ZmxhZ3MgJiBETVhfQ0hFQ0tfQ1JDKSA/IDEgOiAwKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRrKCJEVkIgKCVzKTogY291bGQgbm90IHNldCBmZWVkXG4iLAorCQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwogCQkJCWR2Yl9kbXhkZXZfZmVlZF9yZXN0YXJ0KGZpbHRlcik7CiAJCQkJcmV0dXJuIHJldDsKIAkJCX0KQEAgLTU4NCw0MSArNTM3LDM4IEBACiAJCQlkdmJfZG14ZGV2X2ZlZWRfc3RvcChmaWx0ZXIpOwogCQl9CiAKLQkJcmV0PSgqc2VjZmVlZCktPmFsbG9jYXRlX2ZpbHRlcigqc2VjZmVlZCwgc2VjZmlsdGVyKTsKLQorCQlyZXQgPSAoKnNlY2ZlZWQpLT5hbGxvY2F0ZV9maWx0ZXIoKnNlY2ZlZWQsIHNlY2ZpbHRlcik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkdmJfZG14ZGV2X2ZlZWRfcmVzdGFydChmaWx0ZXIpOwogCQkJZmlsdGVyLT5mZWVkLnNlYy0+c3RhcnRfZmlsdGVyaW5nKCpzZWNmZWVkKTsKLQkJCWRwcmludGsgKCJjb3VsZCBub3QgZ2V0IGZpbHRlclxuIik7CisJCQlkcHJpbnRrKCJjb3VsZCBub3QgZ2V0IGZpbHRlclxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJKCpzZWNmaWx0ZXIpLT5wcml2ID0gZmlsdGVyOwogCiAJCW1lbWNweSgmKCgqc2VjZmlsdGVyKS0+ZmlsdGVyX3ZhbHVlWzNdKSwKLQkJICAgICAgICYocGFyYS0+ZmlsdGVyLmZpbHRlclsxXSksIERNWF9GSUxURVJfU0laRS0xKTsKKwkJICAgICAgICYocGFyYS0+ZmlsdGVyLmZpbHRlclsxXSksIERNWF9GSUxURVJfU0laRSAtIDEpOwogCQltZW1jcHkoJigqc2VjZmlsdGVyKS0+ZmlsdGVyX21hc2tbM10sCi0JCSAgICAgICAmcGFyYS0+ZmlsdGVyLm1hc2tbMV0sIERNWF9GSUxURVJfU0laRS0xKTsKKwkJICAgICAgICZwYXJhLT5maWx0ZXIubWFza1sxXSwgRE1YX0ZJTFRFUl9TSVpFIC0gMSk7CiAJCW1lbWNweSgmKCpzZWNmaWx0ZXIpLT5maWx0ZXJfbW9kZVszXSwKLQkJICAgICAgICZwYXJhLT5maWx0ZXIubW9kZVsxXSwgRE1YX0ZJTFRFUl9TSVpFLTEpOworCQkgICAgICAgJnBhcmEtPmZpbHRlci5tb2RlWzFdLCBETVhfRklMVEVSX1NJWkUgLSAxKTsKIAotCQkoKnNlY2ZpbHRlciktPmZpbHRlcl92YWx1ZVswXT1wYXJhLT5maWx0ZXIuZmlsdGVyWzBdOwotCQkoKnNlY2ZpbHRlciktPmZpbHRlcl9tYXNrWzBdPXBhcmEtPmZpbHRlci5tYXNrWzBdOwotCQkoKnNlY2ZpbHRlciktPmZpbHRlcl9tb2RlWzBdPXBhcmEtPmZpbHRlci5tb2RlWzBdOwotCQkoKnNlY2ZpbHRlciktPmZpbHRlcl9tYXNrWzFdPTA7Ci0JCSgqc2VjZmlsdGVyKS0+ZmlsdGVyX21hc2tbMl09MDsKKwkJKCpzZWNmaWx0ZXIpLT5maWx0ZXJfdmFsdWVbMF0gPSBwYXJhLT5maWx0ZXIuZmlsdGVyWzBdOworCQkoKnNlY2ZpbHRlciktPmZpbHRlcl9tYXNrWzBdID0gcGFyYS0+ZmlsdGVyLm1hc2tbMF07CisJCSgqc2VjZmlsdGVyKS0+ZmlsdGVyX21vZGVbMF0gPSBwYXJhLT5maWx0ZXIubW9kZVswXTsKKwkJKCpzZWNmaWx0ZXIpLT5maWx0ZXJfbWFza1sxXSA9IDA7CisJCSgqc2VjZmlsdGVyKS0+ZmlsdGVyX21hc2tbMl0gPSAwOwogCiAJCWZpbHRlci0+dG9kbyA9IDA7CiAKLQkJcmV0ID0gZmlsdGVyLT5mZWVkLnNlYy0+c3RhcnRfZmlsdGVyaW5nIChmaWx0ZXItPmZlZWQuc2VjKTsKLQorCQlyZXQgPSBmaWx0ZXItPmZlZWQuc2VjLT5zdGFydF9maWx0ZXJpbmcoZmlsdGVyLT5mZWVkLnNlYyk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAogCQlkdmJfZG14ZGV2X2ZpbHRlcl90aW1lcihmaWx0ZXIpOwogCQlicmVhazsKIAl9Ci0KIAljYXNlIERNWERFVl9UWVBFX1BFUzoKIAl7CiAJCXN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0ID0geyAwIH07CkBAIC02MzAsNDEgKzU4MCw0MSBAQAogCQlzdHJ1Y3QgZG14X3RzX2ZlZWQgKip0c2ZlZWQgPSAmZmlsdGVyLT5mZWVkLnRzOwogCiAJCWZpbHRlci0+ZmVlZC50cyA9IE5VTEw7Ci0JCW90eXBlPXBhcmEtPm91dHB1dDsKKwkJb3R5cGUgPSBwYXJhLT5vdXRwdXQ7CiAKLQkJdHNfcGVzPShlbnVtIGRteF90c19wZXMpIHBhcmEtPnBlc190eXBlOworCQl0c19wZXMgPSAoZW51bSBkbXhfdHNfcGVzKXBhcmEtPnBlc190eXBlOwogCi0JCWlmICh0c19wZXM8RE1YX1BFU19PVEhFUikKLQkJCXRzX3R5cGU9VFNfREVDT0RFUjsKKwkJaWYgKHRzX3BlcyA8IERNWF9QRVNfT1RIRVIpCisJCQl0c190eXBlID0gVFNfREVDT0RFUjsKIAkJZWxzZQotCQkJdHNfdHlwZT0wOworCQkJdHNfdHlwZSA9IDA7CiAKIAkJaWYgKG90eXBlID09IERNWF9PVVRfVFNfVEFQKQogCQkJdHNfdHlwZSB8PSBUU19QQUNLRVQ7CiAKIAkJaWYgKG90eXBlID09IERNWF9PVVRfVEFQKQotCQkJdHNfdHlwZSB8PSBUU19QQVlMT0FEX09OTFl8VFNfUEFDS0VUOworCQkJdHNfdHlwZSB8PSBUU19QQVlMT0FEX09OTFkgfCBUU19QQUNLRVQ7CiAKLQkJcmV0PWRteGRldi0+ZGVtdXgtPmFsbG9jYXRlX3RzX2ZlZWQoZG14ZGV2LT5kZW11eCwKLQkJCQkJCSAgICB0c2ZlZWQsCi0JCQkJCQkgICAgZHZiX2RteGRldl90c19jYWxsYmFjayk7Ci0JCWlmIChyZXQ8MCkKKwkJcmV0ID0gZG14ZGV2LT5kZW11eC0+YWxsb2NhdGVfdHNfZmVlZChkbXhkZXYtPmRlbXV4LAorCQkJCQkJICAgICAgdHNmZWVkLAorCQkJCQkJICAgICAgZHZiX2RteGRldl90c19jYWxsYmFjayk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQkoKnRzZmVlZCktPnByaXYgPSAodm9pZCAqKSBmaWx0ZXI7CisJCSgqdHNmZWVkKS0+cHJpdiA9IGZpbHRlcjsKIAogCQlyZXQgPSAoKnRzZmVlZCktPnNldCgqdHNmZWVkLCBwYXJhLT5waWQsIHRzX3R5cGUsIHRzX3BlcywKIAkJCQkgICAgIDMyNzY4LCB0aW1lb3V0KTsKLQogCQlpZiAocmV0IDwgMCkgewotCQkJZG14ZGV2LT5kZW11eC0+cmVsZWFzZV90c19mZWVkKGRteGRldi0+ZGVtdXgsICp0c2ZlZWQpOworCQkJZG14ZGV2LT5kZW11eC0+cmVsZWFzZV90c19mZWVkKGRteGRldi0+ZGVtdXgsCisJCQkJCQkgICAgICAgKnRzZmVlZCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJcmV0ID0gZmlsdGVyLT5mZWVkLnRzLT5zdGFydF9maWx0ZXJpbmcoZmlsdGVyLT5mZWVkLnRzKTsKLQogCQlpZiAocmV0IDwgMCkgewotCQkJZG14ZGV2LT5kZW11eC0+cmVsZWFzZV90c19mZWVkKGRteGRldi0+ZGVtdXgsICp0c2ZlZWQpOworCQkJZG14ZGV2LT5kZW11eC0+cmVsZWFzZV90c19mZWVkKGRteGRldi0+ZGVtdXgsCisJCQkJCQkgICAgICAgKnRzZmVlZCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKQEAgLTY4OCw0MSArNjM4LDQwIEBACiAJaWYgKCFkbXhkZXYtPmZpbHRlcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkbXhkZXYtPm11dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkbXhkZXYtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWZvciAoaT0wOyBpPGRteGRldi0+ZmlsdGVybnVtOyBpKyspCi0JCWlmIChkbXhkZXYtPmZpbHRlcltpXS5zdGF0ZT09RE1YREVWX1NUQVRFX0ZSRUUpCisJZm9yIChpID0gMDsgaSA8IGRteGRldi0+ZmlsdGVybnVtOyBpKyspCisJCWlmIChkbXhkZXYtPmZpbHRlcltpXS5zdGF0ZSA9PSBETVhERVZfU1RBVEVfRlJFRSkKIAkJCWJyZWFrOwogCi0JaWYgKGk9PWRteGRldi0+ZmlsdGVybnVtKSB7Ci0JCXVwKCZkbXhkZXYtPm11dGV4KTsKKwlpZiAoaSA9PSBkbXhkZXYtPmZpbHRlcm51bSkgeworCQltdXRleF91bmxvY2soJmRteGRldi0+bXV0ZXgpOwogCQlyZXR1cm4gLUVNRklMRTsKIAl9CiAKLQlkbXhkZXZmaWx0ZXI9JmRteGRldi0+ZmlsdGVyW2ldOwotCXNlbWFfaW5pdCgmZG14ZGV2ZmlsdGVyLT5tdXRleCwgMSk7Ci0JZG14ZGV2ZmlsdGVyLT5kdmJkZXY9ZG14ZGV2LT5kdmJkZXY7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhPWRteGRldmZpbHRlcjsKKwlkbXhkZXZmaWx0ZXIgPSAmZG14ZGV2LT5maWx0ZXJbaV07CisJbXV0ZXhfaW5pdCgmZG14ZGV2ZmlsdGVyLT5tdXRleCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZG14ZGV2ZmlsdGVyOwogCi0JZHZiX2RteGRldl9idWZmZXJfaW5pdCgmZG14ZGV2ZmlsdGVyLT5idWZmZXIpOwotCWRteGRldmZpbHRlci0+dHlwZT1ETVhERVZfVFlQRV9OT05FOworCWR2Yl9yaW5nYnVmZmVyX2luaXQoJmRteGRldmZpbHRlci0+YnVmZmVyLCBOVUxMLCA4MTkyKTsKKwlkbXhkZXZmaWx0ZXItPnR5cGUgPSBETVhERVZfVFlQRV9OT05FOwogCWR2Yl9kbXhkZXZfZmlsdGVyX3N0YXRlX3NldChkbXhkZXZmaWx0ZXIsIERNWERFVl9TVEFURV9BTExPQ0FURUQpOwotCWRteGRldmZpbHRlci0+ZmVlZC50cz1OVUxMOworCWRteGRldmZpbHRlci0+ZmVlZC50cyA9IE5VTEw7CiAJaW5pdF90aW1lcigmZG14ZGV2ZmlsdGVyLT50aW1lcik7CiAKLQl1cCgmZG14ZGV2LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IGR2Yl9kbXhkZXZfZmlsdGVyX2ZyZWUoc3RydWN0IGRteGRldiAqZG14ZGV2LCBzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyKQorc3RhdGljIGludCBkdmJfZG14ZGV2X2ZpbHRlcl9mcmVlKHN0cnVjdCBkbXhkZXYgKmRteGRldiwKKwkJCQkgIHN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIpCiB7Ci0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZG14ZGV2LT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZG14ZGV2LT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkbXhkZXZmaWx0ZXItPm11dGV4KSkgewotCQl1cCgmZG14ZGV2LT5tdXRleCk7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZG14ZGV2ZmlsdGVyLT5tdXRleCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAl9CiAKQEAgLTczMCwxOCArNjc5LDE4IEBACiAJZHZiX2RteGRldl9maWx0ZXJfcmVzZXQoZG14ZGV2ZmlsdGVyKTsKIAogCWlmIChkbXhkZXZmaWx0ZXItPmJ1ZmZlci5kYXRhKSB7Ci0JCXZvaWQgKm1lbT1kbXhkZXZmaWx0ZXItPmJ1ZmZlci5kYXRhOworCQl2b2lkICptZW0gPSBkbXhkZXZmaWx0ZXItPmJ1ZmZlci5kYXRhOwogCiAJCXNwaW5fbG9ja19pcnEoJmRteGRldi0+bG9jayk7Ci0JCWRteGRldmZpbHRlci0+YnVmZmVyLmRhdGE9TlVMTDsKKwkJZG14ZGV2ZmlsdGVyLT5idWZmZXIuZGF0YSA9IE5VTEw7CiAJCXNwaW5fdW5sb2NrX2lycSgmZG14ZGV2LT5sb2NrKTsKIAkJdmZyZWUobWVtKTsKIAl9CiAKIAlkdmJfZG14ZGV2X2ZpbHRlcl9zdGF0ZV9zZXQoZG14ZGV2ZmlsdGVyLCBETVhERVZfU1RBVEVfRlJFRSk7CiAJd2FrZV91cCgmZG14ZGV2ZmlsdGVyLT5idWZmZXIucXVldWUpOwotCXVwKCZkbXhkZXZmaWx0ZXItPm11dGV4KTsKLQl1cCgmZG14ZGV2LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkbXhkZXZmaWx0ZXItPm11dGV4KTsKKwltdXRleF91bmxvY2soJmRteGRldi0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC03NDksMTczICs2OTgsMTcxIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGk9MDsgaTxETVhfRklMVEVSX1NJWkU7IGkrKykKLQkJZmlsdGVyLT5tb2RlW2ldXj0weGZmOworCWZvciAoaSA9IDA7IGkgPCBETVhfRklMVEVSX1NJWkU7IGkrKykKKwkJZmlsdGVyLT5tb2RlW2ldIF49IDB4ZmY7CiB9CiAKLQogc3RhdGljIGludCBkdmJfZG14ZGV2X2ZpbHRlcl9zZXQoc3RydWN0IGRteGRldiAqZG14ZGV2LAotCQlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyLAotCQlzdHJ1Y3QgZG14X3NjdF9maWx0ZXJfcGFyYW1zICpwYXJhbXMpCisJCQkJIHN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIsCisJCQkJIHN0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMgKnBhcmFtcykKIHsKLQlkcHJpbnRrICgiZnVuY3Rpb24gOiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkcHJpbnRrKCJmdW5jdGlvbiA6ICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJZHZiX2RteGRldl9maWx0ZXJfc3RvcChkbXhkZXZmaWx0ZXIpOwogCi0JZG14ZGV2ZmlsdGVyLT50eXBlPURNWERFVl9UWVBFX1NFQzsKLQlkbXhkZXZmaWx0ZXItPnBpZD1wYXJhbXMtPnBpZDsKKwlkbXhkZXZmaWx0ZXItPnR5cGUgPSBETVhERVZfVFlQRV9TRUM7CiAJbWVtY3B5KCZkbXhkZXZmaWx0ZXItPnBhcmFtcy5zZWMsCiAJICAgICAgIHBhcmFtcywgc2l6ZW9mKHN0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMpKTsKIAlpbnZlcnRfbW9kZSgmZG14ZGV2ZmlsdGVyLT5wYXJhbXMuc2VjLmZpbHRlcik7CiAJZHZiX2RteGRldl9maWx0ZXJfc3RhdGVfc2V0KGRteGRldmZpbHRlciwgRE1YREVWX1NUQVRFX1NFVCk7CiAKLQlpZiAocGFyYW1zLT5mbGFncyZETVhfSU1NRURJQVRFX1NUQVJUKQorCWlmIChwYXJhbXMtPmZsYWdzICYgRE1YX0lNTUVESUFURV9TVEFSVCkKIAkJcmV0dXJuIGR2Yl9kbXhkZXZfZmlsdGVyX3N0YXJ0KGRteGRldmZpbHRlcik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkdmJfZG14ZGV2X3Blc19maWx0ZXJfc2V0KHN0cnVjdCBkbXhkZXYgKmRteGRldiwKLQkJICAgc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciwKLQkJICAgc3RydWN0IGRteF9wZXNfZmlsdGVyX3BhcmFtcyAqcGFyYW1zKQorCQkJCSAgICAgc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciwKKwkJCQkgICAgIHN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMgKnBhcmFtcykKIHsKIAlkdmJfZG14ZGV2X2ZpbHRlcl9zdG9wKGRteGRldmZpbHRlcik7CiAKLQlpZiAocGFyYW1zLT5wZXNfdHlwZT5ETVhfUEVTX09USEVSIHx8IHBhcmFtcy0+cGVzX3R5cGU8MCkKKwlpZiAocGFyYW1zLT5wZXNfdHlwZSA+IERNWF9QRVNfT1RIRVIgfHwgcGFyYW1zLT5wZXNfdHlwZSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG14ZGV2ZmlsdGVyLT50eXBlPURNWERFVl9UWVBFX1BFUzsKLQlkbXhkZXZmaWx0ZXItPnBpZD1wYXJhbXMtPnBpZDsKLQltZW1jcHkoJmRteGRldmZpbHRlci0+cGFyYW1zLCBwYXJhbXMsIHNpemVvZihzdHJ1Y3QgZG14X3Blc19maWx0ZXJfcGFyYW1zKSk7CisJZG14ZGV2ZmlsdGVyLT50eXBlID0gRE1YREVWX1RZUEVfUEVTOworCW1lbWNweSgmZG14ZGV2ZmlsdGVyLT5wYXJhbXMsIHBhcmFtcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMpKTsKIAogCWR2Yl9kbXhkZXZfZmlsdGVyX3N0YXRlX3NldChkbXhkZXZmaWx0ZXIsIERNWERFVl9TVEFURV9TRVQpOwogCi0JaWYgKHBhcmFtcy0+ZmxhZ3MmRE1YX0lNTUVESUFURV9TVEFSVCkKKwlpZiAocGFyYW1zLT5mbGFncyAmIERNWF9JTU1FRElBVEVfU1RBUlQpCiAJCXJldHVybiBkdmJfZG14ZGV2X2ZpbHRlcl9zdGFydChkbXhkZXZmaWx0ZXIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGR2Yl9kbXhkZXZfcmVhZF9zZWMoc3RydWN0IGRteGRldl9maWx0ZXIgKmRmaWwsCi0JCXN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKKwkJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgcmVzdWx0LCBoY291bnQ7Ci0JaW50IGRvbmU9MDsKKwlpbnQgZG9uZSA9IDA7CiAKLQlpZiAoZGZpbC0+dG9kbzw9MCkgewotCQloY291bnQ9MytkZmlsLT50b2RvOwotCQlpZiAoaGNvdW50PmNvdW50KQotCQkJaGNvdW50PWNvdW50OwotCQlyZXN1bHQ9ZHZiX2RteGRldl9idWZmZXJfcmVhZCgmZGZpbC0+YnVmZmVyLCBmaWxlLT5mX2ZsYWdzJk9fTk9OQkxPQ0ssCi0JCQkJCWJ1ZiwgaGNvdW50LCBwcG9zKTsKLQkJaWYgKHJlc3VsdDwwKSB7Ci0JCQlkZmlsLT50b2RvPTA7CisJaWYgKGRmaWwtPnRvZG8gPD0gMCkgeworCQloY291bnQgPSAzICsgZGZpbC0+dG9kbzsKKwkJaWYgKGhjb3VudCA+IGNvdW50KQorCQkJaGNvdW50ID0gY291bnQ7CisJCXJlc3VsdCA9IGR2Yl9kbXhkZXZfYnVmZmVyX3JlYWQoJmRmaWwtPmJ1ZmZlciwKKwkJCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLLAorCQkJCQkJYnVmLCBoY291bnQsIHBwb3MpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGZpbC0+dG9kbyA9IDA7CiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihkZmlsLT5zZWNoZWFkZXItZGZpbC0+dG9kbywgYnVmLCByZXN1bHQpKQorCQlpZiAoY29weV9mcm9tX3VzZXIoZGZpbC0+c2VjaGVhZGVyIC0gZGZpbC0+dG9kbywgYnVmLCByZXN1bHQpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJ1Zis9cmVzdWx0OwotCQlkb25lPXJlc3VsdDsKLQkJY291bnQtPXJlc3VsdDsKLQkJZGZpbC0+dG9kby09cmVzdWx0OwotCQlpZiAoZGZpbC0+dG9kbz4tMykKKwkJYnVmICs9IHJlc3VsdDsKKwkJZG9uZSA9IHJlc3VsdDsKKwkJY291bnQgLT0gcmVzdWx0OworCQlkZmlsLT50b2RvIC09IHJlc3VsdDsKKwkJaWYgKGRmaWwtPnRvZG8gPiAtMykKIAkJCXJldHVybiBkb25lOwotCQlkZmlsLT50b2RvPSgoZGZpbC0+c2VjaGVhZGVyWzFdPDw4KXxkZmlsLT5zZWNoZWFkZXJbMl0pJjB4ZmZmOworCQlkZmlsLT50b2RvID0gKChkZmlsLT5zZWNoZWFkZXJbMV0gPDwgOCkgfCBkZmlsLT5zZWNoZWFkZXJbMl0pICYgMHhmZmY7CiAJCWlmICghY291bnQpCiAJCQlyZXR1cm4gZG9uZTsKIAl9Ci0JaWYgKGNvdW50PmRmaWwtPnRvZG8pCi0JCWNvdW50PWRmaWwtPnRvZG87Ci0JcmVzdWx0PWR2Yl9kbXhkZXZfYnVmZmVyX3JlYWQoJmRmaWwtPmJ1ZmZlciwgZmlsZS0+Zl9mbGFncyZPX05PTkJMT0NLLAotCQkJCWJ1ZiwgY291bnQsIHBwb3MpOwotCWlmIChyZXN1bHQ8MCkKKwlpZiAoY291bnQgPiBkZmlsLT50b2RvKQorCQljb3VudCA9IGRmaWwtPnRvZG87CisJcmVzdWx0ID0gZHZiX2RteGRldl9idWZmZXJfcmVhZCgmZGZpbC0+YnVmZmVyLAorCQkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSywKKwkJCQkJYnVmLCBjb3VudCwgcHBvcyk7CisJaWYgKHJlc3VsdCA8IDApCiAJCXJldHVybiByZXN1bHQ7Ci0JZGZpbC0+dG9kby09cmVzdWx0OwotCXJldHVybiAocmVzdWx0K2RvbmUpOworCWRmaWwtPnRvZG8gLT0gcmVzdWx0OworCXJldHVybiAocmVzdWx0ICsgZG9uZSk7CiB9CiAKLQogc3RhdGljIHNzaXplX3QKLWR2Yl9kZW11eF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK2R2Yl9kZW11eF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCisJICAgICAgIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldD0wOworCXN0cnVjdCBkbXhkZXZfZmlsdGVyICpkbXhkZXZmaWx0ZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRteGRldmZpbHRlci0+bXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRteGRldmZpbHRlci0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JaWYgKGRteGRldmZpbHRlci0+dHlwZT09RE1YREVWX1RZUEVfU0VDKQotCQlyZXQ9ZHZiX2RteGRldl9yZWFkX3NlYyhkbXhkZXZmaWx0ZXIsIGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOworCWlmIChkbXhkZXZmaWx0ZXItPnR5cGUgPT0gRE1YREVWX1RZUEVfU0VDKQorCQlyZXQgPSBkdmJfZG14ZGV2X3JlYWRfc2VjKGRteGRldmZpbHRlciwgZmlsZSwgYnVmLCBjb3VudCwgcHBvcyk7CiAJZWxzZQotCQlyZXQ9ZHZiX2RteGRldl9idWZmZXJfcmVhZCgmZG14ZGV2ZmlsdGVyLT5idWZmZXIsCi0JCQkJICAgICBmaWxlLT5mX2ZsYWdzJk9fTk9OQkxPQ0ssCi0JCQkJICAgICBidWYsIGNvdW50LCBwcG9zKTsKKwkJcmV0ID0gZHZiX2RteGRldl9idWZmZXJfcmVhZCgmZG14ZGV2ZmlsdGVyLT5idWZmZXIsCisJCQkJCSAgICAgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0ssCisJCQkJCSAgICAgYnVmLCBjb3VudCwgcHBvcyk7CiAKLQl1cCgmZG14ZGV2ZmlsdGVyLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkbXhkZXZmaWx0ZXItPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyBpbnQgZHZiX2RlbXV4X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZykKIHsKIAlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkbXhkZXYgKmRteGRldj1kbXhkZXZmaWx0ZXItPmRldjsKLQl1bnNpZ25lZCBsb25nIGFyZz0odW5zaWduZWQgbG9uZykgcGFyZzsKLQlpbnQgcmV0PTA7CisJc3RydWN0IGRteGRldiAqZG14ZGV2ID0gZG14ZGV2ZmlsdGVyLT5kZXY7CisJdW5zaWduZWQgbG9uZyBhcmcgPSAodW5zaWduZWQgbG9uZylwYXJnOworCWludCByZXQgPSAwOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRteGRldi0+bXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRteGRldi0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIERNWF9TVEFSVDoKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZG14ZGV2ZmlsdGVyLT5tdXRleCkpIHsKLQkJCXVwKCZkbXhkZXYtPm11dGV4KTsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZG14ZGV2ZmlsdGVyLT5tdXRleCkpIHsKKwkJCW11dGV4X3VubG9jaygmZG14ZGV2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9Ci0JCWlmIChkbXhkZXZmaWx0ZXItPnN0YXRlPERNWERFVl9TVEFURV9TRVQpCisJCWlmIChkbXhkZXZmaWx0ZXItPnN0YXRlIDwgRE1YREVWX1NUQVRFX1NFVCkKIAkJCXJldCA9IC1FSU5WQUw7CiAJCWVsc2UKIAkJCXJldCA9IGR2Yl9kbXhkZXZfZmlsdGVyX3N0YXJ0KGRteGRldmZpbHRlcik7Ci0JCXVwKCZkbXhkZXZmaWx0ZXItPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkbXhkZXZmaWx0ZXItPm11dGV4KTsKIAkJYnJlYWs7CiAKIAljYXNlIERNWF9TVE9QOgotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkbXhkZXZmaWx0ZXItPm11dGV4KSkgewotCQkJdXAoJmRteGRldi0+bXV0ZXgpOworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkbXhkZXZmaWx0ZXItPm11dGV4KSkgeworCQkJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCX0KLQkJcmV0PWR2Yl9kbXhkZXZfZmlsdGVyX3N0b3AoZG14ZGV2ZmlsdGVyKTsKLQkJdXAoJmRteGRldmZpbHRlci0+bXV0ZXgpOworCQlyZXQgPSBkdmJfZG14ZGV2X2ZpbHRlcl9zdG9wKGRteGRldmZpbHRlcik7CisJCW11dGV4X3VubG9jaygmZG14ZGV2ZmlsdGVyLT5tdXRleCk7CiAJCWJyZWFrOwogCiAJY2FzZSBETVhfU0VUX0ZJTFRFUjoKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZG14ZGV2ZmlsdGVyLT5tdXRleCkpIHsKLQkJCXVwKCZkbXhkZXYtPm11dGV4KTsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZG14ZGV2ZmlsdGVyLT5tdXRleCkpIHsKKwkJCW11dGV4X3VubG9jaygmZG14ZGV2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9Ci0JCXJldCA9IGR2Yl9kbXhkZXZfZmlsdGVyX3NldChkbXhkZXYsIGRteGRldmZpbHRlciwKLQkJCQkgICAgKHN0cnVjdCBkbXhfc2N0X2ZpbHRlcl9wYXJhbXMgKilwYXJnKTsKLQkJdXAoJmRteGRldmZpbHRlci0+bXV0ZXgpOworCQlyZXQgPSBkdmJfZG14ZGV2X2ZpbHRlcl9zZXQoZG14ZGV2LCBkbXhkZXZmaWx0ZXIsIHBhcmcpOworCQltdXRleF91bmxvY2soJmRteGRldmZpbHRlci0+bXV0ZXgpOwogCQlicmVhazsKIAogCWNhc2UgRE1YX1NFVF9QRVNfRklMVEVSOgotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkbXhkZXZmaWx0ZXItPm11dGV4KSkgewotCQkJdXAoJmRteGRldi0+bXV0ZXgpOworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkbXhkZXZmaWx0ZXItPm11dGV4KSkgeworCQkJbXV0ZXhfdW5sb2NrKCZkbXhkZXYtPm11dGV4KTsKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCX0KLQkJcmV0PWR2Yl9kbXhkZXZfcGVzX2ZpbHRlcl9zZXQoZG14ZGV2LCBkbXhkZXZmaWx0ZXIsCi0JCQkJCSAgICAgICAoc3RydWN0IGRteF9wZXNfZmlsdGVyX3BhcmFtcyAqKXBhcmcpOwotCQl1cCgmZG14ZGV2ZmlsdGVyLT5tdXRleCk7CisJCXJldCA9IGR2Yl9kbXhkZXZfcGVzX2ZpbHRlcl9zZXQoZG14ZGV2LCBkbXhkZXZmaWx0ZXIsIHBhcmcpOworCQltdXRleF91bmxvY2soJmRteGRldmZpbHRlci0+bXV0ZXgpOwogCQlicmVhazsKIAogCWNhc2UgRE1YX1NFVF9CVUZGRVJfU0laRToKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZG14ZGV2ZmlsdGVyLT5tdXRleCkpIHsKLQkJCXVwKCZkbXhkZXYtPm11dGV4KTsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZG14ZGV2ZmlsdGVyLT5tdXRleCkpIHsKKwkJCW11dGV4X3VubG9jaygmZG14ZGV2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9Ci0JCXJldD1kdmJfZG14ZGV2X3NldF9idWZmZXJfc2l6ZShkbXhkZXZmaWx0ZXIsIGFyZyk7Ci0JCXVwKCZkbXhkZXZmaWx0ZXItPm11dGV4KTsKKwkJcmV0ID0gZHZiX2RteGRldl9zZXRfYnVmZmVyX3NpemUoZG14ZGV2ZmlsdGVyLCBhcmcpOworCQltdXRleF91bmxvY2soJmRteGRldmZpbHRlci0+bXV0ZXgpOwogCQlicmVhazsKIAogCWNhc2UgRE1YX0dFVF9FVkVOVDoKQEAgLTkyMywxMCArODcwLDEwIEBACiAKIAljYXNlIERNWF9HRVRfUEVTX1BJRFM6CiAJCWlmICghZG14ZGV2LT5kZW11eC0+Z2V0X3Blc19waWRzKSB7Ci0JCQlyZXQ9LUVJTlZBTDsKKwkJCXJldCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQotCQlkbXhkZXYtPmRlbXV4LT5nZXRfcGVzX3BpZHMoZG14ZGV2LT5kZW11eCwgKHUxNiAqKXBhcmcpOworCQlkbXhkZXYtPmRlbXV4LT5nZXRfcGVzX3BpZHMoZG14ZGV2LT5kZW11eCwgcGFyZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBETVhfR0VUX0NBUFM6CkBAIC05NDcsMTkgKzg5NCwyMCBAQAogCiAJY2FzZSBETVhfR0VUX1NUQzoKIAkJaWYgKCFkbXhkZXYtPmRlbXV4LT5nZXRfc3RjKSB7Ci0JCQlyZXQ9LUVJTlZBTDsKKwkJCXJldCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCQlyZXQgPSBkbXhkZXYtPmRlbXV4LT5nZXRfc3RjKGRteGRldi0+ZGVtdXgsCi0JCQkJKChzdHJ1Y3QgZG14X3N0YyAqKXBhcmcpLT5udW0sCi0JCQkJJigoc3RydWN0IGRteF9zdGMgKilwYXJnKS0+c3RjLAotCQkJCSYoKHN0cnVjdCBkbXhfc3RjICopcGFyZyktPmJhc2UpOworCQkJCQkgICAgICgoc3RydWN0IGRteF9zdGMgKilwYXJnKS0+bnVtLAorCQkJCQkgICAgICYoKHN0cnVjdCBkbXhfc3RjICopcGFyZyktPnN0YywKKwkJCQkJICAgICAmKChzdHJ1Y3QgZG14X3N0YyAqKXBhcmcpLT5iYXNlKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXQ9LUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfQotCXVwKCZkbXhkZXYtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmRteGRldi0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk2OSw4ICs5MTcsNyBAQAogCXJldHVybiBkdmJfdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBkdmJfZGVtdXhfZG9faW9jdGwpOwogfQogCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZHZiX2RlbXV4X3BvbGwgKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQorc3RhdGljIHVuc2lnbmVkIGludCBkdmJfZGVtdXhfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZG14ZGV2ZmlsdGVyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKQEAgLTk4OCwxMyArOTM1LDEyIEBACiAJaWYgKGRteGRldmZpbHRlci0+YnVmZmVyLmVycm9yKQogCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFBSSSB8IFBPTExFUlIpOwogCi0JaWYgKGRteGRldmZpbHRlci0+YnVmZmVyLnByZWFkICE9IGRteGRldmZpbHRlci0+YnVmZmVyLnB3cml0ZSkKKwlpZiAoIWR2Yl9yaW5nYnVmZmVyX2VtcHR5KCZkbXhkZXZmaWx0ZXItPmJ1ZmZlcikpCiAJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMUFJJKTsKIAogCXJldHVybiBtYXNrOwogfQogCi0KIHN0YXRpYyBpbnQgZHZiX2RlbXV4X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGRteGRldl9maWx0ZXIgKmRteGRldmZpbHRlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTEwMDMsNzIgKzk0OSw2NyBAQAogCXJldHVybiBkdmJfZG14ZGV2X2ZpbHRlcl9mcmVlKGRteGRldiwgZG14ZGV2ZmlsdGVyKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZGVtdXhfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnJlYWQJCT0gZHZiX2RlbXV4X3JlYWQsCi0JLmlvY3RsCQk9IGR2Yl9kZW11eF9pb2N0bCwKLQkub3BlbgkJPSBkdmJfZGVtdXhfb3BlbiwKLQkucmVsZWFzZQk9IGR2Yl9kZW11eF9yZWxlYXNlLAotCS5wb2xsCQk9IGR2Yl9kZW11eF9wb2xsLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gZHZiX2RlbXV4X3JlYWQsCisJLmlvY3RsID0gZHZiX2RlbXV4X2lvY3RsLAorCS5vcGVuID0gZHZiX2RlbXV4X29wZW4sCisJLnJlbGVhc2UgPSBkdmJfZGVtdXhfcmVsZWFzZSwKKwkucG9sbCA9IGR2Yl9kZW11eF9wb2xsLAogfTsKIAotCiBzdGF0aWMgc3RydWN0IGR2Yl9kZXZpY2UgZHZiZGV2X2RlbXV4ID0gewotCS5wcml2CQk9IE5VTEwsCi0JLnVzZXJzCQk9IDEsCi0JLndyaXRlcnMJPSAxLAotCS5mb3BzCQk9ICZkdmJfZGVtdXhfZm9wcworCS5wcml2ID0gTlVMTCwKKwkudXNlcnMgPSAxLAorCS53cml0ZXJzID0gMSwKKwkuZm9wcyA9ICZkdmJfZGVtdXhfZm9wcwogfTsKIAotCiBzdGF0aWMgaW50IGR2Yl9kdnJfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqcGFyZykKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICpwYXJnKQogewogCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRteGRldiAqZG14ZGV2ID0gZHZiZGV2LT5wcml2OworCWludCByZXQ7CiAKLQlpbnQgcmV0PTA7Ci0KLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZG14ZGV2LT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZG14ZGV2LT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRE1YX1NFVF9CVUZGRVJfU0laRToKIAkJLy8gRklYTUU6IGltcGxlbWVudAotCQlyZXQ9MDsKKwkJcmV0ID0gMDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZXQ9LUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfQotCXVwKCZkbXhkZXYtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmRteGRldi0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIGludCBkdmJfZHZyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiBkdmJfdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBkdmJfZHZyX2RvX2lvY3RsKTsKIH0KIAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGR2Yl9kdnJfcG9sbCAoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGR2Yl9kdnJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkbXhkZXYgKmRteGRldiA9IGR2YmRldi0+cHJpdjsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKLQlkcHJpbnRrICgiZnVuY3Rpb24gOiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkcHJpbnRrKCJmdW5jdGlvbiA6ICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJcG9sbF93YWl0KGZpbGUsICZkbXhkZXYtPmR2cl9idWZmZXIucXVldWUsIHdhaXQpOwogCi0JaWYgKChmaWxlLT5mX2ZsYWdzJk9fQUNDTU9ERSkgPT0gT19SRE9OTFkpIHsKKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRPTkxZKSB7CiAJCWlmIChkbXhkZXYtPmR2cl9idWZmZXIuZXJyb3IpCiAJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFBSSSB8IFBPTExFUlIpOwogCi0JCWlmIChkbXhkZXYtPmR2cl9idWZmZXIucHJlYWQhPWRteGRldi0+ZHZyX2J1ZmZlci5wd3JpdGUpCisJCWlmICghZHZiX3JpbmdidWZmZXJfZW1wdHkoJmRteGRldi0+ZHZyX2J1ZmZlcikpCiAJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFBSSSk7CiAJfSBlbHNlCiAJCW1hc2sgfD0gKFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFBSSSk7CkBAIC0xMDc2LDczICsxMDE3LDYzIEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2R2cl9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucmVhZAkJPSBkdmJfZHZyX3JlYWQsCi0JLndyaXRlCQk9IGR2Yl9kdnJfd3JpdGUsCi0JLmlvY3RsCQk9IGR2Yl9kdnJfaW9jdGwsCi0JLm9wZW4JCT0gZHZiX2R2cl9vcGVuLAotCS5yZWxlYXNlCT0gZHZiX2R2cl9yZWxlYXNlLAotCS5wb2xsCQk9IGR2Yl9kdnJfcG9sbCwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkucmVhZCA9IGR2Yl9kdnJfcmVhZCwKKwkud3JpdGUgPSBkdmJfZHZyX3dyaXRlLAorCS5pb2N0bCA9IGR2Yl9kdnJfaW9jdGwsCisJLm9wZW4gPSBkdmJfZHZyX29wZW4sCisJLnJlbGVhc2UgPSBkdmJfZHZyX3JlbGVhc2UsCisJLnBvbGwgPSBkdmJfZHZyX3BvbGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IGR2Yl9kZXZpY2UgZHZiZGV2X2R2ciA9IHsKLQkucHJpdgkJPSBOVUxMLAotCS51c2VycwkJPSAxLAotCS53cml0ZXJzCT0gMSwKLQkuZm9wcwkJPSAmZHZiX2R2cl9mb3BzCisJLnByaXYgPSBOVUxMLAorCS51c2VycyA9IDEsCisJLndyaXRlcnMgPSAxLAorCS5mb3BzID0gJmR2Yl9kdnJfZm9wcwogfTsKIAotaW50Ci1kdmJfZG14ZGV2X2luaXQoc3RydWN0IGRteGRldiAqZG14ZGV2LCBzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2Yl9hZGFwdGVyKQoraW50IGR2Yl9kbXhkZXZfaW5pdChzdHJ1Y3QgZG14ZGV2ICpkbXhkZXYsIHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIpCiB7CiAJaW50IGk7CiAKIAlpZiAoZG14ZGV2LT5kZW11eC0+b3BlbihkbXhkZXYtPmRlbXV4KSA8IDApCiAJCXJldHVybiAtRVVTRVJTOwogCi0JZG14ZGV2LT5maWx0ZXIgPSB2bWFsbG9jKGRteGRldi0+ZmlsdGVybnVtKnNpemVvZihzdHJ1Y3QgZG14ZGV2X2ZpbHRlcikpOworCWRteGRldi0+ZmlsdGVyID0gdm1hbGxvYyhkbXhkZXYtPmZpbHRlcm51bSAqIHNpemVvZihzdHJ1Y3QgZG14ZGV2X2ZpbHRlcikpOwogCWlmICghZG14ZGV2LT5maWx0ZXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZG14ZGV2LT5kdnIgPSB2bWFsbG9jKGRteGRldi0+ZmlsdGVybnVtKnNpemVvZihzdHJ1Y3QgZG14ZGV2X2R2cikpOwotCWlmICghZG14ZGV2LT5kdnIpIHsKLQkJdmZyZWUoZG14ZGV2LT5maWx0ZXIpOwotCQlkbXhkZXYtPmZpbHRlciA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNlbWFfaW5pdCgmZG14ZGV2LT5tdXRleCwgMSk7CisJbXV0ZXhfaW5pdCgmZG14ZGV2LT5tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmRteGRldi0+bG9jayk7Ci0JZm9yIChpPTA7IGk8ZG14ZGV2LT5maWx0ZXJudW07IGkrKykgewotCQlkbXhkZXYtPmZpbHRlcltpXS5kZXY9ZG14ZGV2OwotCQlkbXhkZXYtPmZpbHRlcltpXS5idWZmZXIuZGF0YT1OVUxMOwotCQlkdmJfZG14ZGV2X2ZpbHRlcl9zdGF0ZV9zZXQoJmRteGRldi0+ZmlsdGVyW2ldLCBETVhERVZfU1RBVEVfRlJFRSk7Ci0JCWRteGRldi0+ZHZyW2ldLmRldj1kbXhkZXY7Ci0JCWRteGRldi0+ZHZyW2ldLmJ1ZmZlci5kYXRhPU5VTEw7Ci0JCWR2Yl9kbXhkZXZfZHZyX3N0YXRlX3NldCgmZG14ZGV2LT5kdnJbaV0sIERNWERFVl9TVEFURV9GUkVFKTsKKwlmb3IgKGkgPSAwOyBpIDwgZG14ZGV2LT5maWx0ZXJudW07IGkrKykgeworCQlkbXhkZXYtPmZpbHRlcltpXS5kZXYgPSBkbXhkZXY7CisJCWRteGRldi0+ZmlsdGVyW2ldLmJ1ZmZlci5kYXRhID0gTlVMTDsKKwkJZHZiX2RteGRldl9maWx0ZXJfc3RhdGVfc2V0KCZkbXhkZXYtPmZpbHRlcltpXSwKKwkJCQkJICAgIERNWERFVl9TVEFURV9GUkVFKTsKIAl9CiAKLQlkdmJfcmVnaXN0ZXJfZGV2aWNlKGR2Yl9hZGFwdGVyLCAmZG14ZGV2LT5kdmJkZXYsICZkdmJkZXZfZGVtdXgsIGRteGRldiwgRFZCX0RFVklDRV9ERU1VWCk7Ci0JZHZiX3JlZ2lzdGVyX2RldmljZShkdmJfYWRhcHRlciwgJmRteGRldi0+ZHZyX2R2YmRldiwgJmR2YmRldl9kdnIsIGRteGRldiwgRFZCX0RFVklDRV9EVlIpOworCWR2Yl9yZWdpc3Rlcl9kZXZpY2UoZHZiX2FkYXB0ZXIsICZkbXhkZXYtPmR2YmRldiwgJmR2YmRldl9kZW11eCwgZG14ZGV2LAorCQkJICAgIERWQl9ERVZJQ0VfREVNVVgpOworCWR2Yl9yZWdpc3Rlcl9kZXZpY2UoZHZiX2FkYXB0ZXIsICZkbXhkZXYtPmR2cl9kdmJkZXYsICZkdmJkZXZfZHZyLAorCQkJICAgIGRteGRldiwgRFZCX0RFVklDRV9EVlIpOwogCi0JZHZiX2RteGRldl9idWZmZXJfaW5pdCgmZG14ZGV2LT5kdnJfYnVmZmVyKTsKKwlkdmJfcmluZ2J1ZmZlcl9pbml0KCZkbXhkZXYtPmR2cl9idWZmZXIsIE5VTEwsIDgxOTIpOwogCiAJcmV0dXJuIDA7CiB9CisKIEVYUE9SVF9TWU1CT0woZHZiX2RteGRldl9pbml0KTsKIAotdm9pZAotZHZiX2RteGRldl9yZWxlYXNlKHN0cnVjdCBkbXhkZXYgKmRteGRldikKK3ZvaWQgZHZiX2RteGRldl9yZWxlYXNlKHN0cnVjdCBkbXhkZXYgKmRteGRldikKIHsKIAlkdmJfdW5yZWdpc3Rlcl9kZXZpY2UoZG14ZGV2LT5kdmJkZXYpOwogCWR2Yl91bnJlZ2lzdGVyX2RldmljZShkbXhkZXYtPmR2cl9kdmJkZXYpOwogCiAJdmZyZWUoZG14ZGV2LT5maWx0ZXIpOwotCWRteGRldi0+ZmlsdGVyPU5VTEw7Ci0JdmZyZWUoZG14ZGV2LT5kdnIpOwotCWRteGRldi0+ZHZyPU5VTEw7CisJZG14ZGV2LT5maWx0ZXIgPSBOVUxMOwogCWRteGRldi0+ZGVtdXgtPmNsb3NlKGRteGRldi0+ZGVtdXgpOwogfQorCiBFWFBPUlRfU1lNQk9MKGR2Yl9kbXhkZXZfcmVsZWFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5oCmluZGV4IGZkNzI5MjAuLmQyYmVlOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5oCkBAIC0zMCwxNCArMzAsMTUgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9kbXguaD4KIAogI2luY2x1ZGUgImR2YmRldi5oIgogI2luY2x1ZGUgImRlbXV4LmgiCisjaW5jbHVkZSAiZHZiX3JpbmdidWZmZXIuaCIKIAotZW51bSBkbXhkZXZ5cGUgeworZW51bSBkbXhkZXZfdHlwZSB7CiAJRE1YREVWX1RZUEVfTk9ORSwKIAlETVhERVZfVFlQRV9TRUMsCiAJRE1YREVWX1RZUEVfUEVTLApAQCAtNTIsMTggKzUzLDcgQEAKIAlETVhERVZfU1RBVEVfVElNRURPVVQKIH07CiAKLXN0cnVjdCBkbXhkZXZfYnVmZmVyIHsKLQl1OCAqZGF0YTsKLQlpbnQgc2l6ZTsKLQlpbnQgcHJlYWQ7Ci0JaW50IHB3cml0ZTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKLQlpbnQgZXJyb3I7Ci19OwotCiBzdHJ1Y3QgZG14ZGV2X2ZpbHRlciB7Ci0Jc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldjsKLQogCXVuaW9uIHsKIAkJc3RydWN0IGRteF9zZWN0aW9uX2ZpbHRlciAqc2VjOwogCX0gZmlsdGVyOwpAQCAtNzgsMjYgKzY4LDE3IEBACiAJCXN0cnVjdCBkbXhfcGVzX2ZpbHRlcl9wYXJhbXMgcGVzOwogCX0gcGFyYW1zOwogCi0JaW50IHR5cGU7CisJZW51bSBkbXhkZXZfdHlwZSB0eXBlOwogCWVudW0gZG14ZGV2X3N0YXRlIHN0YXRlOwogCXN0cnVjdCBkbXhkZXYgKmRldjsKLQlzdHJ1Y3QgZG14ZGV2X2J1ZmZlciBidWZmZXI7CisJc3RydWN0IGR2Yl9yaW5nYnVmZmVyIGJ1ZmZlcjsKIAotCXN0cnVjdCBzZW1hcGhvcmUgbXV0ZXg7CisJc3RydWN0IG11dGV4IG11dGV4OwogCiAJLyogb25seSBmb3Igc2VjdGlvbnMgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlpbnQgdG9kbzsKIAl1OCBzZWNoZWFkZXJbM107Ci0KLQl1MTYgcGlkOwotfTsKLQotCi1zdHJ1Y3QgZG14ZGV2X2R2ciB7Ci0JaW50IHN0YXRlOwotCXN0cnVjdCBkbXhkZXYgKmRldjsKLQlzdHJ1Y3QgZG14ZGV2X2J1ZmZlciBidWZmZXI7CiB9OwogCiAKQEAgLTEwNiw3ICs4Nyw2IEBACiAJc3RydWN0IGR2Yl9kZXZpY2UgKmR2cl9kdmJkZXY7CiAKIAlzdHJ1Y3QgZG14ZGV2X2ZpbHRlciAqZmlsdGVyOwotCXN0cnVjdCBkbXhkZXZfZHZyICpkdnI7CiAJc3RydWN0IGRteF9kZW11eCAqZGVtdXg7CiAKIAlpbnQgZmlsdGVybnVtOwpAQCAtMTE0LDEwICs5NCwxMCBAQAogI2RlZmluZSBETVhERVZfQ0FQX0RVUExFWCAxCiAJc3RydWN0IGRteF9mcm9udGVuZCAqZHZyX29yaWdfZmU7CiAKLQlzdHJ1Y3QgZG14ZGV2X2J1ZmZlciBkdnJfYnVmZmVyOworCXN0cnVjdCBkdmJfcmluZ2J1ZmZlciBkdnJfYnVmZmVyOwogI2RlZmluZSBEVlJfQlVGRkVSX1NJWkUgKDEwKjE4OCoxMDI0KQogCi0Jc3RydWN0IHNlbWFwaG9yZSBtdXRleDsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJc3BpbmxvY2tfdCBsb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYwppbmRleCBiNGM4OTliLi44M2VjNWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYwpAQCAtNTg5LDE4ICs1ODksMTggQEAKIAlpZiAocGlkID4gRE1YX01BWF9QSUQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGVtdXgtPm11dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZW11eC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKHRzX3R5cGUgJiBUU19ERUNPREVSKSB7CiAJCWlmIChwZXNfdHlwZSA+PSBETVhfVFNfUEVTX09USEVSKSB7Ci0JCQl1cCgmZGVtdXgtPm11dGV4KTsKKwkJCW11dGV4X3VubG9jaygmZGVtdXgtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJaWYgKGRlbXV4LT5wZXNmaWx0ZXJbcGVzX3R5cGVdICYmCiAJCSAgICBkZW11eC0+cGVzZmlsdGVyW3Blc190eXBlXSAhPSBmZWVkKSB7Ci0JCQl1cCgmZGVtdXgtPm11dGV4KTsKKwkJCW11dGV4X3VubG9jaygmZGVtdXgtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTYyMiwxNCArNjIyLDE0IEBACiAjZWxzZQogCQlmZWVkLT5idWZmZXIgPSB2bWFsbG9jKGZlZWQtPmJ1ZmZlcl9zaXplKTsKIAkJaWYgKCFmZWVkLT5idWZmZXIpIHsKLQkJCXVwKCZkZW11eC0+bXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZkZW11eC0+bXV0ZXgpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KICNlbmRpZgogCX0KIAogCWZlZWQtPnN0YXRlID0gRE1YX1NUQVRFX1JFQURZOwotCXVwKCZkZW11eC0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmZGVtdXgtPm11dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjQwLDIxICs2NDAsMjEgQEAKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwogCWludCByZXQ7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZW11eC0+bXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRlbXV4LT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoZmVlZC0+c3RhdGUgIT0gRE1YX1NUQVRFX1JFQURZIHx8IGZlZWQtPnR5cGUgIT0gRE1YX1RZUEVfVFMpIHsKLQkJdXAoJmRlbXV4LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZGVtdXgtPm11dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFkZW11eC0+c3RhcnRfZmVlZCkgewotCQl1cCgmZGVtdXgtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZW11eC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoKHJldCA9IGRlbXV4LT5zdGFydF9mZWVkKGZlZWQpKSA8IDApIHsKLQkJdXAoJmRlbXV4LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZGVtdXgtPm11dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTY2Miw3ICs2NjIsNyBAQAogCXRzX2ZlZWQtPmlzX2ZpbHRlcmluZyA9IDE7CiAJZmVlZC0+c3RhdGUgPSBETVhfU1RBVEVfR087CiAJc3Bpbl91bmxvY2tfaXJxKCZkZW11eC0+bG9jayk7Ci0JdXAoJmRlbXV4LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkZW11eC0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzMsMTYgKzY3MywxNiBAQAogCXN0cnVjdCBkdmJfZGVtdXggKmRlbXV4ID0gZmVlZC0+ZGVtdXg7CiAJaW50IHJldDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRlbXV4LT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGVtdXgtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChmZWVkLT5zdGF0ZSA8IERNWF9TVEFURV9HTykgewotCQl1cCgmZGVtdXgtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZW11eC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIWRlbXV4LT5zdG9wX2ZlZWQpIHsKLQkJdXAoJmRlbXV4LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZGVtdXgtPm11dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC02OTIsNyArNjkyLDcgQEAKIAl0c19mZWVkLT5pc19maWx0ZXJpbmcgPSAwOwogCWZlZWQtPnN0YXRlID0gRE1YX1NUQVRFX0FMTE9DQVRFRDsKIAlzcGluX3VubG9ja19pcnEoJmRlbXV4LT5sb2NrKTsKLQl1cCgmZGVtdXgtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmRlbXV4LT5tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzA0LDExICs3MDQsMTEgQEAKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IChzdHJ1Y3QgZHZiX2RlbXV4ICopZG14OwogCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRlbXV4LT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGVtdXgtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmICghKGZlZWQgPSBkdmJfZG14X2ZlZWRfYWxsb2MoZGVtdXgpKSkgewotCQl1cCgmZGVtdXgtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZW11eC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNzI5LDcgKzcyOSw3IEBACiAKIAlpZiAoIShmZWVkLT5maWx0ZXIgPSBkdmJfZG14X2ZpbHRlcl9hbGxvYyhkZW11eCkpKSB7CiAJCWZlZWQtPnN0YXRlID0gRE1YX1NUQVRFX0ZSRUU7Ci0JCXVwKCZkZW11eC0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJmRlbXV4LT5tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC03MzcsNyArNzM3LDcgQEAKIAlmZWVkLT5maWx0ZXItPmZlZWQgPSBmZWVkOwogCWZlZWQtPmZpbHRlci0+c3RhdGUgPSBETVhfU1RBVEVfUkVBRFk7CiAKLQl1cCgmZGVtdXgtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmRlbXV4LT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc0OCwxMSArNzQ4LDExIEBACiAJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSAoc3RydWN0IGR2Yl9kZW11eCAqKWRteDsKIAlzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQgPSAoc3RydWN0IGR2Yl9kZW11eF9mZWVkICopdHNfZmVlZDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRlbXV4LT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGVtdXgtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChmZWVkLT5zdGF0ZSA9PSBETVhfU1RBVEVfRlJFRSkgewotCQl1cCgmZGVtdXgtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZW11eC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAjaWZuZGVmIE5PQlVGUwpAQCAtNzcwLDcgKzc3MCw3IEBACiAJaWYgKGZlZWQtPnRzX3R5cGUgJiBUU19ERUNPREVSICYmIGZlZWQtPnBlc190eXBlIDwgRE1YX1RTX1BFU19PVEhFUikKIAkJZGVtdXgtPnBlc2ZpbHRlcltmZWVkLT5wZXNfdHlwZV0gPSBOVUxMOwogCi0JdXAoJmRlbXV4LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkZW11eC0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC03ODUsMTIgKzc4NSwxMiBAQAogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRlbXV4ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CiAJc3RydWN0IGR2Yl9kZW11eF9maWx0ZXIgKmR2YmRteGZpbHRlcjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmR2YmRlbXV4LT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZHZiZGVtdXgtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWR2YmRteGZpbHRlciA9IGR2Yl9kbXhfZmlsdGVyX2FsbG9jKGR2YmRlbXV4KTsKIAlpZiAoIWR2YmRteGZpbHRlcikgewotCQl1cCgmZHZiZGVtdXgtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkdmJkZW11eC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtODA1LDcgKzgwNSw3IEBACiAJZHZiZG14ZmVlZC0+ZmlsdGVyID0gZHZiZG14ZmlsdGVyOwogCXNwaW5fdW5sb2NrX2lycSgmZHZiZGVtdXgtPmxvY2spOwogCi0JdXAoJmR2YmRlbXV4LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkdmJkZW11eC0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC04MTksNyArODE5LDcgQEAKIAlpZiAocGlkID4gMHgxZmZmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmR2YmRteC0+bXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRteC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJZHZiX2RlbXV4X2ZlZWRfYWRkKGR2YmRteGZlZWQpOwpAQCAtODMzLDEzICs4MzMsMTMgQEAKICNlbHNlCiAJZHZiZG14ZmVlZC0+YnVmZmVyID0gdm1hbGxvYyhkdmJkbXhmZWVkLT5idWZmZXJfc2l6ZSk7CiAJaWYgKCFkdmJkbXhmZWVkLT5idWZmZXIpIHsKLQkJdXAoJmR2YmRteC0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJmR2YmRteC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAjZW5kaWYKIAogCWR2YmRteGZlZWQtPnN0YXRlID0gRE1YX1NUQVRFX1JFQURZOwotCXVwKCZkdmJkbXgtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmR2YmRteC0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC04NzEsMTYgKzg3MSwxNiBAQAogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OwogCWludCByZXQ7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkdmJkbXgtPm11dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkdmJkbXgtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChmZWVkLT5pc19maWx0ZXJpbmcpIHsKLQkJdXAoJmR2YmRteC0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJmR2YmRteC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmICghZHZiZG14ZmVlZC0+ZmlsdGVyKSB7Ci0JCXVwKCZkdmJkbXgtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkdmJkbXgtPm11dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04OTAsMTQgKzg5MCwxNCBAQAogCWR2YmRteGZlZWQtPmZlZWQuc2VjLnNlY2xlbiA9IDA7CiAKIAlpZiAoIWR2YmRteC0+c3RhcnRfZmVlZCkgewotCQl1cCgmZHZiZG14LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZHZiZG14LT5tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXByZXBhcmVfc2VjZmlsdGVycyhkdmJkbXhmZWVkKTsKIAogCWlmICgocmV0ID0gZHZiZG14LT5zdGFydF9mZWVkKGR2YmRteGZlZWQpKSA8IDApIHsKLQkJdXAoJmR2YmRteC0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJmR2YmRteC0+bXV0ZXgpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtOTA2LDcgKzkwNiw3IEBACiAJZHZiZG14ZmVlZC0+c3RhdGUgPSBETVhfU1RBVEVfR087CiAJc3Bpbl91bmxvY2tfaXJxKCZkdmJkbXgtPmxvY2spOwogCi0JdXAoJmR2YmRteC0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmZHZiZG14LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxNiwxMSArOTE2LDExIEBACiAJc3RydWN0IGR2Yl9kZW11eCAqZHZiZG14ID0gZHZiZG14ZmVlZC0+ZGVtdXg7CiAJaW50IHJldDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmR2YmRteC0+bXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRteC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKCFkdmJkbXgtPnN0b3BfZmVlZCkgewotCQl1cCgmZHZiZG14LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZHZiZG14LT5tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtOTMxLDcgKzkzMSw3IEBACiAJZmVlZC0+aXNfZmlsdGVyaW5nID0gMDsKIAlzcGluX3VubG9ja19pcnEoJmR2YmRteC0+bG9jayk7CiAKLQl1cCgmZHZiZG14LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkdmJkbXgtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05NDIsMTEgKzk0MiwxMSBAQAogCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCA9IChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKilmZWVkOwogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZHZiZG14LT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZHZiZG14LT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoZHZiZG14ZmlsdGVyLT5mZWVkICE9IGR2YmRteGZlZWQpIHsKLQkJdXAoJmR2YmRteC0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJmR2YmRteC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTk2Niw3ICs5NjYsNyBAQAogCiAJZHZiZG14ZmlsdGVyLT5zdGF0ZSA9IERNWF9TVEFURV9GUkVFOwogCXNwaW5fdW5sb2NrX2lycSgmZHZiZG14LT5sb2NrKTsKLQl1cCgmZHZiZG14LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkdmJkbXgtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTc3LDExICs5NzcsMTEgQEAKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkbXggPSAoc3RydWN0IGR2Yl9kZW11eCAqKWRlbXV4OwogCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmR2YmRteC0+bXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRteC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKCEoZHZiZG14ZmVlZCA9IGR2Yl9kbXhfZmVlZF9hbGxvYyhkdmJkbXgpKSkgewotCQl1cCgmZHZiZG14LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZHZiZG14LT5tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xMDA2LDcgKzEwMDYsNyBAQAogCSgqZmVlZCktPnN0b3BfZmlsdGVyaW5nID0gZG14X3NlY3Rpb25fZmVlZF9zdG9wX2ZpbHRlcmluZzsKIAkoKmZlZWQpLT5yZWxlYXNlX2ZpbHRlciA9IGRteF9zZWN0aW9uX2ZlZWRfcmVsZWFzZV9maWx0ZXI7CiAKLQl1cCgmZHZiZG14LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkdmJkbXgtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAxNiwxMSArMTAxNiwxMSBAQAogCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCA9IChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKilmZWVkOwogCXN0cnVjdCBkdmJfZGVtdXggKmR2YmRteCA9IChzdHJ1Y3QgZHZiX2RlbXV4ICopZGVtdXg7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkdmJkbXgtPm11dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkdmJkbXgtPm11dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChkdmJkbXhmZWVkLT5zdGF0ZSA9PSBETVhfU1RBVEVfRlJFRSkgewotCQl1cCgmZHZiZG14LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmZHZiZG14LT5tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KICNpZm5kZWYgTk9CVUZTCkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogCiAJZHZiZG14ZmVlZC0+cGlkID0gMHhmZmZmOwogCi0JdXAoJmR2YmRteC0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmZHZiZG14LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNzEsMTAgKzEwNzEsMTAgQEAKIAlpZiAoKCFkZW11eC0+ZnJvbnRlbmQpIHx8IChkZW11eC0+ZnJvbnRlbmQtPnNvdXJjZSAhPSBETVhfTUVNT1JZX0ZFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkdmJkZW11eC0+bXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmR2YmRlbXV4LT5tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJZHZiX2RteF9zd2ZpbHRlcihkdmJkZW11eCwgYnVmLCBjb3VudCk7Ci0JdXAoJmR2YmRlbXV4LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkdmJkZW11eC0+bXV0ZXgpOwogCiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyZXR1cm4gLUVJTlRSOwpAQCAtMTEyNiwxMSArMTEyNiwxMSBAQAogCWlmIChkZW11eC0+ZnJvbnRlbmQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZHZiZGVtdXgtPm11dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkdmJkZW11eC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJZGVtdXgtPmZyb250ZW5kID0gZnJvbnRlbmQ7Ci0JdXAoJmR2YmRlbXV4LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkdmJkZW11eC0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTM4LDExICsxMTM4LDExIEBACiB7CiAJc3RydWN0IGR2Yl9kZW11eCAqZHZiZGVtdXggPSAoc3RydWN0IGR2Yl9kZW11eCAqKWRlbXV4OwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZHZiZGVtdXgtPm11dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkdmJkZW11eC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJZGVtdXgtPmZyb250ZW5kID0gTlVMTDsKLQl1cCgmZHZiZGVtdXgtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmR2YmRlbXV4LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMTUsNyArMTIxNSw3IEBACiAJZG14LT5kaXNjb25uZWN0X2Zyb250ZW5kID0gZHZiZG14X2Rpc2Nvbm5lY3RfZnJvbnRlbmQ7CiAJZG14LT5nZXRfcGVzX3BpZHMgPSBkdmJkbXhfZ2V0X3Blc19waWRzOwogCi0Jc2VtYV9pbml0KCZkdmJkZW11eC0+bXV0ZXgsIDEpOworCW11dGV4X2luaXQoJmR2YmRlbXV4LT5tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmR2YmRlbXV4LT5sb2NrKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguaAppbmRleCAwY2M4ODgzLi4yYzVmOTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguaApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJkZW11eC5oIgogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAl1OCB0c2J1ZlsyMDRdOwogCWludCB0c2J1ZnA7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIG11dGV4OworCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IDc3MWYzMmQuLjJjM2VhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiZHZiZGV2LmgiCkBAIC01MCwxMyArNDksMTMgQEAKIAogbW9kdWxlX3BhcmFtX25hbWVkKGZyb250ZW5kX2RlYnVnLCBkdmJfZnJvbnRlbmRfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZyb250ZW5kX2RlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgY29yZSBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKLW1vZHVsZV9wYXJhbShkdmJfc2h1dGRvd25fdGltZW91dCwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShkdmJfc2h1dGRvd25fdGltZW91dCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZHZiX3NodXRkb3duX3RpbWVvdXQsICJ3YWl0IDxzaHV0ZG93bl90aW1lb3V0PiBzZWNvbmRzIGFmdGVyIGNsb3NlKCkgYmVmb3JlIHN1c3BlbmRpbmcgaGFyZHdhcmUiKTsKLW1vZHVsZV9wYXJhbShkdmJfZm9yY2VfYXV0b19pbnZlcnNpb24sIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oZHZiX2ZvcmNlX2F1dG9faW52ZXJzaW9uLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkdmJfZm9yY2VfYXV0b19pbnZlcnNpb24sICIwOiBub3JtYWwgKGRlZmF1bHQpLCAxOiBJTlZFUlNJT05fQVVUTyBmb3JjZWQgYWx3YXlzIik7Ci1tb2R1bGVfcGFyYW0oZHZiX292ZXJyaWRlX3R1bmVfZGVsYXksIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oZHZiX292ZXJyaWRlX3R1bmVfZGVsYXksIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGR2Yl9vdmVycmlkZV90dW5lX2RlbGF5LCAiMDogbm9ybWFsIChkZWZhdWx0KSwgPjAgPT4gZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGxvY2sgYWZ0ZXIgYSB0dW5lIGF0dGVtcHQiKTsKLW1vZHVsZV9wYXJhbShkdmJfcG93ZXJkb3duX29uX3NsZWVwLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKGR2Yl9wb3dlcmRvd25fb25fc2xlZXAsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGR2Yl9wb3dlcmRvd25fb25fc2xlZXAsICIwOiBkbyBub3QgcG93ZXIgZG93biwgMTogdHVybiBMTkIgdm9sYXRhZ2Ugb2ZmIG9uIHNsZWVwIChkZWZhdWx0KSIpOwogCiAjZGVmaW5lIGRwcmludGsgaWYgKGR2Yl9mcm9udGVuZF9kZWJ1ZykgcHJpbnRrCkBAIC04OCw3ICs4Nyw3IEBACiAgKiBGRVNUQVRFX0xPU1RMT0NLLiBXaGVuIHRoZSBsb2NrIGhhcyBiZWVuIGxvc3QsIGFuZCB3ZSdyZSBzZWFyY2hpbmcgaXQgYWdhaW4uCiAgKi8KIAotc3RhdGljIERFQ0xBUkVfTVVURVgoZnJvbnRlbmRfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChmcm9udGVuZF9tdXRleCk7CiAKIHN0cnVjdCBkdmJfZnJvbnRlbmRfcHJpdmF0ZSB7CiAKQEAgLTEwMjEsMTIgKzEwMjAsMTIgQEAKIAogCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZmcm9udGVuZF9tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZnJvbnRlbmRfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJZmUtPmZyb250ZW5kX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZmUtPmZyb250ZW5kX3ByaXYgPT0gTlVMTCkgewotCQl1cCgmZnJvbnRlbmRfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmZyb250ZW5kX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OwpAQCAtMTA0NSw3ICsxMDQ0LDcgQEAKIAlkdmJfcmVnaXN0ZXJfZGV2aWNlIChmZS0+ZHZiLCAmZmVwcml2LT5kdmJkZXYsICZkdmJkZXZfdGVtcGxhdGUsCiAJCQkgICAgIGZlLCBEVkJfREVWSUNFX0ZST05URU5EKTsKIAotCXVwICgmZnJvbnRlbmRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZnJvbnRlbmRfbXV0ZXgpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkdmJfcmVnaXN0ZXJfZnJvbnRlbmQpOwpAQCAtMTA1NSw3ICsxMDU0LDcgQEAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3ByaXZhdGUgKmZlcHJpdiA9IGZlLT5mcm9udGVuZF9wcml2OwogCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCWRvd24gKCZmcm9udGVuZF9tdXRleCk7CisJbXV0ZXhfbG9jaygmZnJvbnRlbmRfbXV0ZXgpOwogCWR2Yl91bnJlZ2lzdGVyX2RldmljZSAoZmVwcml2LT5kdmJkZXYpOwogCWR2Yl9mcm9udGVuZF9zdG9wIChmZSk7CiAJaWYgKGZlLT5vcHMtPnJlbGVhc2UpCkBAIC0xMDY0LDcgKzEwNjMsNyBAQAogCQlwcmludGsoImR2Yl9mcm9udGVuZDogRGVtb2R1bGF0b3IgKCVzKSBkb2VzIG5vdCBoYXZlIGEgcmVsZWFzZSBjYWxsYmFjayFcbiIsIGZlLT5vcHMtPmluZm8ubmFtZSk7CiAJLyogZmUgaXMgaW52YWxpZCBub3cgKi8KIAlrZnJlZShmZXByaXYpOwotCXVwICgmZnJvbnRlbmRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZnJvbnRlbmRfbXV0ZXgpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCmluZGV4IDcwYTZkMTQuLmQ1YWVlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oCkBAIC0xMDQsNiArMTA0LDcgQEAKIAlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmR2YjsKIAl2b2lkKiBkZW1vZHVsYXRvcl9wcml2OwogCXZvaWQqIGZyb250ZW5kX3ByaXY7CisJdm9pZCogbWlzY19wcml2OwogfTsKIAogZXh0ZXJuIGludCBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoc3RydWN0IGR2Yl9hZGFwdGVyKiBkdmIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggNjcxMWViNi4uMmYwZjM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCiAjaW5jbHVkZSAiZHZiX25ldC5oIgpAQCAtMTUxLDggKzE1Miw3IEBACiAJdW5zaWduZWQgY2hhciB1bGVfYnJpZGdlZDsJCS8qIFdoZXRoZXIgdGhlIFVMRV9CUklER0VEIGV4dGVuc2lvbiBoZWFkZXIgd2FzIGZvdW5kLiAqLwogCWludCB1bGVfc25kdV9yZW1haW47CQkJLyogTnIuIG9mIGJ5dGVzIHN0aWxsIHJlcXVpcmVkIGZvciBjdXJyZW50IFVMRSBTTkRVLiAqLwogCXVuc2lnbmVkIGxvbmcgdHNfY291bnQ7CQkJLyogQ3VycmVudCB0cyBjZWxsIGNvdW50ZXIuICovCi0KLQlzdHJ1Y3Qgc2VtYXBob3JlIG11dGV4OworCXN0cnVjdCBtdXRleCBtdXRleDsKIH07CiAKIApAQCAtODg5LDcgKzg4OSw3IEBACiAJdW5zaWduZWQgY2hhciAqbWFjID0gKHVuc2lnbmVkIGNoYXIgKikgZGV2LT5kZXZfYWRkcjsKIAogCWRwcmludGsoIiVzOiByeF9tb2RlICVpXG4iLCBfX0ZVTkNUSU9OX18sIHByaXYtPnJ4X21vZGUpOwotCWRvd24oJnByaXYtPm11dGV4KTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHByaXYtPnRzZmVlZCB8fCBwcml2LT5zZWNmZWVkIHx8IHByaXYtPnNlY2ZpbHRlciB8fCBwcml2LT5tdWx0aV9zZWNmaWx0ZXJbMF0pCiAJCXByaW50aygiJXM6IEJVRyAlZFxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CiAKQEAgLTk3NCw3ICs5NzQsNyBAQAogCQlyZXQgPSAtRUlOVkFMOwogCiBlcnJvcjoKLQl1cCgmcHJpdi0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk4NCw3ICs5ODQsNyBAQAogCWludCBpLCByZXQgPSAwOwogCiAJZHByaW50aygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JZG93bigmcHJpdi0+bXV0ZXgpOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+ZmVlZHR5cGUgPT0gRFZCX05FVF9GRUVEVFlQRV9NUEUpIHsKIAkJaWYgKHByaXYtPnNlY2ZlZWQpIHsKIAkJCWlmIChwcml2LT5zZWNmZWVkLT5pc19maWx0ZXJpbmcpIHsKQEAgLTEwMjYsNyArMTAyNiw3IEBACiAJCQlwcmludGsoIiVzOiBubyB0cyBmZWVkIHRvIHN0b3BcbiIsIGRldi0+bmFtZSk7CiAJfSBlbHNlCiAJCXJldCA9IC1FSU5WQUw7Ci0JdXAoJnByaXYtPm11dGV4KTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjA4LDcgKzEyMDgsNyBAQAogCiAJSU5JVF9XT1JLKCZwcml2LT5zZXRfbXVsdGljYXN0X2xpc3Rfd3EsIHdxX3NldF9tdWx0aWNhc3RfbGlzdCwgbmV0KTsKIAlJTklUX1dPUksoJnByaXYtPnJlc3RhcnRfbmV0X2ZlZWRfd3EsIHdxX3Jlc3RhcnRfbmV0X2ZlZWQsIG5ldCk7Ci0JaW5pdF9NVVRFWCgmcHJpdi0+bXV0ZXgpOworCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKIAogCW5ldC0+YmFzZV9hZGRyID0gcGlkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuYwppbmRleCA3N2FkMjQxLi5jOTcyZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlyYnVmLT5wcmVhZD1yYnVmLT5wd3JpdGU9MDsKIAlyYnVmLT5kYXRhPWRhdGE7CiAJcmJ1Zi0+c2l6ZT1sZW47CisJcmJ1Zi0+ZXJyb3I9MDsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJidWYtPnF1ZXVlKTsKIApAQCAtODcsNiArODgsNyBAQAogdm9pZCBkdmJfcmluZ2J1ZmZlcl9mbHVzaChzdHJ1Y3QgZHZiX3JpbmdidWZmZXIgKnJidWYpCiB7CiAJcmJ1Zi0+cHJlYWQgPSByYnVmLT5wd3JpdGU7CisJcmJ1Zi0+ZXJyb3IgPSAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfcmluZ2J1ZmZlci5oCmluZGV4IDZkMjU2MDkuLmQ5NzcxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX3JpbmdidWZmZXIuaApAQCAtMzUsNiArMzUsNyBAQAogCXNzaXplX3QgICAgICAgICAgIHNpemU7CiAJc3NpemVfdCAgICAgICAgICAgcHJlYWQ7CiAJc3NpemVfdCAgICAgICAgICAgcHdyaXRlOworCWludCAgICAgICAgICAgICAgIGVycm9yOwogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CiAJc3BpbmxvY2tfdCAgICAgICAgbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCBmMzI3ZmFjLi5hMTRlNzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC03NywyMiArNzcsMjMgQEAKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwogCWludCBpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZC0+aTJjX3NlbSkgPCAwKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmIChudW0gPiAyKQotCQl3YXJuKCJtb3JlIHRoYW4gMiBpMmMgbWVzc2FnZXMgYXQgYSB0aW1lIGlzIG5vdCBoYW5kbGVkIHlldC4gVE9ETy4iKTsKKwkJd2FybigibW9yZSB0aGFuIHR3byBpMmMgbWVzc2FnZXMgYXQgYSB0aW1lIGlzIG5vdCBoYW5kbGVkIHlldC4gVE9ETy4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCi0JCXN3aXRjaCAobXNnW2ldLmFkZHIpIHsKLQkJCWNhc2UgMHg2MzoKLQkJCQljeHVzYl9ncGlvX3R1bmVyKGQsMCk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWN4dXNiX2dwaW9fdHVuZXIoZCwxKTsKLQkJCQlicmVhazsKLQkJfQorCQlpZiAoZC0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBVU0JfVklEX01FRElPTikKKwkJCXN3aXRjaCAobXNnW2ldLmFkZHIpIHsKKwkJCQljYXNlIDB4NjM6CisJCQkJCWN4dXNiX2dwaW9fdHVuZXIoZCwwKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJY3h1c2JfZ3Bpb190dW5lcihkLDEpOworCQkJCQlicmVhazsKKwkJCX0KIAogCQkvKiByZWFkIHJlcXVlc3QgKi8KIAkJaWYgKGkrMSA8IG51bSAmJiAobXNnW2krMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKQEAgLTEwOCw3ICsxMDksNyBAQAogCQkJCWJyZWFrOwogCiAJCQlpZiAoaWJ1ZlswXSAhPSAweDA4KQotCQkJCWRlYl9pbmZvKCJpMmMgcmVhZCBjb3VsZCBoYXZlIGJlZW4gZmFpbGVkXG4iKTsKKwkJCQlkZWJfaTJjKCJpMmMgcmVhZCBtYXkgaGF2ZSBmYWlsZWRcbiIpOwogCiAJCQltZW1jcHkobXNnW2krMV0uYnVmLCZpYnVmWzFdLG1zZ1tpKzFdLmxlbik7CiAKQEAgLTEyMiwxMSArMTIzLDExIEBACiAJCQlpZiAoY3h1c2JfY3RybF9tc2coZCxDTURfSTJDX1dSSVRFLCBvYnVmLCAyK21zZ1tpXS5sZW4sICZpYnVmLDEpIDwgMCkKIAkJCQlicmVhazsKIAkJCWlmIChpYnVmICE9IDB4MDgpCi0JCQkJZGViX2luZm8oImkyYyB3cml0ZSBjb3VsZCBoYXZlIGJlZW4gZmFpbGVkXG4iKTsKKwkJCQlkZWJfaTJjKCJpMmMgd3JpdGUgbWF5IGhhdmUgZmFpbGVkXG4iKTsKIAkJfQogCX0KIAotCXVwKCZkLT5pMmNfc2VtKTsKKwltdXRleF91bmxvY2soJmQtPmkyY19tdXRleCk7CiAJcmV0dXJuIGk7CiB9CiAKQEAgLTI4Miw3ICsyODMsNyBAQAogCS5wbGxfc2V0ICA9IGR2Yl91c2JfcGxsX3NldF9pMmMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGxnZHQzMzB4X2NvbmZpZyBjeHVzYl9sZ2R0MzMweF9jb25maWcgPSB7CitzdGF0aWMgc3RydWN0IGxnZHQzMzB4X2NvbmZpZyBjeHVzYl9sZ2R0MzMwM19jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDBlLAogCS5kZW1vZF9jaGlwICAgID0gTEdEVDMzMDMsCiAJLnBsbF9zZXQgICAgICAgPSBkdmJfdXNiX3BsbF9zZXRfaTJjLApAQCAtMzU3LDE0ICszNTgsMTQgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIGludCBjeHVzYl9sZ2R0MzMweF9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQorc3RhdGljIGludCBjeHVzYl9sZ2R0MzMwM19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQogewogCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LDAsNykgPCAwKQogCQllcnIoInNldCBpbnRlcmZhY2UgZmFpbGVkIik7CiAKIAljeHVzYl9jdHJsX21zZyhkLENNRF9ESUdJVEFMLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAotCWlmICgoZC0+ZmUgPSBsZ2R0MzMweF9hdHRhY2goJmN4dXNiX2xnZHQzMzB4X2NvbmZpZywgJmQtPmkyY19hZGFwKSkgIT0gTlVMTCkKKwlpZiAoKGQtPmZlID0gbGdkdDMzMHhfYXR0YWNoKCZjeHVzYl9sZ2R0MzMwM19jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FSU87CkBAIC00MTAsNyArNDExLDYgQEAKIAlpZiAoZnctPmRhdGFbQkxVRUJJUkRfMDFfSURfT0ZGU0VUXSA9PSAoVVNCX1ZJRF9EVklDTyAmIDB4ZmYpICYmCiAJICAgIGZ3LT5kYXRhW0JMVUVCSVJEXzAxX0lEX09GRlNFVCArIDFdID09IFVTQl9WSURfRFZJQ08gPj4gOCkgewogCi0JCS8qIEZJWE1FOiBhcmUgd2UgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIGZ3LWRhdGEgPyAqLwogCQlmdy0+ZGF0YVtCTFVFQklSRF8wMV9JRF9PRkZTRVQgKyAyXSA9IHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICsgMTsKIAkJZnctPmRhdGFbQkxVRUJJUkRfMDFfSURfT0ZGU0VUICsgM10gPSB1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA+PiA4OwogCkBAIC01MDYsNyArNTA2LDcgQEAKIAogCS5zdHJlYW1pbmdfY3RybCAgID0gY3h1c2Jfc3RyZWFtaW5nX2N0cmwsCiAJLnBvd2VyX2N0cmwgICAgICAgPSBjeHVzYl9wb3dlcl9jdHJsLAotCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfbGdkdDMzMHhfZnJvbnRlbmRfYXR0YWNoLAorCS5mcm9udGVuZF9hdHRhY2ggID0gY3h1c2JfbGdkdDMzMDNfZnJvbnRlbmRfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgID0gY3h1c2JfbGdoMDY0Zl90dW5lcl9hdHRhY2gsCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZjeHVzYl9pMmNfYWxnbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuaAppbmRleCAwODdjOTk0Li5jOGVmNzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5oCkBAIC02LDYgKzYsOCBAQAogCiBleHRlcm4gaW50IGR2Yl91c2JfY3h1c2JfZGVidWc7CiAjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2N4dXNiX2RlYnVnLDB4MDEsYXJncykKKyNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgICBpZiAoZC0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBVU0JfVklEX01FRElPTikgXAorCQkJCWRwcmludGsoZHZiX3VzYl9jeHVzYl9kZWJ1ZywweDAxLGFyZ3MpCiAKIC8qIHVzYiBjb21tYW5kcyAtIHNvbWUgb2YgaXQgYXJlIGd1ZXNzZXMsIGRvbid0IGhhdmUgYSByZWZlcmVuY2UgeWV0ICovCiAjZGVmaW5lIENNRF9JMkNfV1JJVEUgICAgIDB4MDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKaW5kZXggMjY5ZDg5OS4uMmQ1MmI3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItY29tbW9uLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CiAJaW50IGk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfc2VtKSA8IDApCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCiAJaWYgKG51bSA+IDIpCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJCQlicmVhazsKIAl9CiAKLQl1cCgmZC0+aTJjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOwogCXJldHVybiBpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYwppbmRleCBjYWExMzQ2Li45MTEzNmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwogCWludCBpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZC0+aTJjX3NlbSkgPCAwKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmIChudW0gPiAyKQpAQCAtNjcsNyArNjcsNyBAQAogCQkJCWJyZWFrOwogCX0KIAotCXVwKCZkLT5pMmNfc2VtKTsKKwltdXRleF91bmxvY2soJmQtPmkyY19tdXRleCk7CiAJcmV0dXJuIGk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaW5pdC5jCmluZGV4IDcxNmY4YmYuLmExNzA1ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pbml0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWluaXQuYwpAQCAtNDIsMTIgKzQyLDEyIEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlzZW1hX2luaXQoJmQtPnVzYl9zZW0sIDEpOwotCXNlbWFfaW5pdCgmZC0+aTJjX3NlbSwgMSk7CisJbXV0ZXhfaW5pdCgmZC0+dXNiX211dGV4KTsKKwltdXRleF9pbml0KCZkLT5pMmNfbXV0ZXgpOwogCiAJZC0+c3RhdGUgPSBEVkJfVVNCX1NUQVRFX0lOSVQ7CiAKLS8qIGNoZWNrIHRoZSBjYXBhYmlsaXRlcyBhbmQgc2V0IGFwcHJvcHJpYXRlIHZhcmlhYmxlcyAqLworLyogY2hlY2sgdGhlIGNhcGFiaWxpdGllcyBhbmQgc2V0IGFwcHJvcHJpYXRlIHZhcmlhYmxlcyAqLwogCiAvKiBzcGVlZCAtIHdoZW4gcnVubmluZyBhdCBGVUxMIHNwZWVkIHdlIG5lZWQgYSBIVyBQSUQgZmlsdGVyICovCiAJaWYgKGQtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMICYmICEoZC0+cHJvcHMuY2FwcyAmIERWQl9VU0JfSEFTX1BJRF9GSUxURVIpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMKaW5kZXggZWU4MjE5Ny4uOTAwMmYzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi11cmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAlpZiAod2J1ZiA9PSBOVUxMIHx8IHdsZW4gPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKHJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmZC0+dXNiX3NlbSkpKQorCWlmICgocmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT51c2JfbXV0ZXgpKSkKIAkJcmV0dXJuIHJldDsKIAogCWRlYl94ZmVyKCI+Pj4gIik7CkBAIC01Myw3ICs1Myw3IEBACiAJCX0KIAl9CiAKLQl1cCgmZC0+dXNiX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkLT51c2JfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGR2Yl91c2JfZ2VuZXJpY19ydyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCmluZGV4IDVlNWQyMWEuLmZlYWQ5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKQEAgLTg3LDcgKzg4LDcgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIC0gcHJvcGVydGllcyBvZiBhIGR2Yi11c2ItZGV2aWNlCi0gKiBAY2FwczogY2FwYWJpbGl0ZXMgb2YgdGhlIERWQiBVU0IgZGV2aWNlLgorICogQGNhcHM6IGNhcGFiaWxpdGllcyBvZiB0aGUgRFZCIFVTQiBkZXZpY2UuCiAgKiBAcGlkX2ZpbHRlcl9jb3VudDogbnVtYmVyIG9mIFBJRCBmaWx0ZXIgcG9zaXRpb24gaW4gdGhlIG9wdGlvbmFsIGhhcmR3YXJlCiAgKiAgUElELWZpbHRlci4KICAqCkBAIC0yMjcsOCArMjI4LDggQEAKICAqIEBmZWVkY291bnQ6IG51bWJlciBvZiByZXFlc3RlZCBmZWVkcyAodXNlZCBmb3Igc3RyZWFtaW5nLWFjdGl2YXRpb24pCiAgKiBAcGlkX2ZpbHRlcmluZzogaXMgaGFyZHdhcmUgcGlkX2ZpbHRlcmluZyB1c2VkIG9yIG5vdC4KICAqCi0gKiBAdXNiX3NlbTogc2VtYXBob3JlIG9mIFVTQiBjb250cm9sIG1lc3NhZ2VzIChyZWFkaW5nIG5lZWRzIHR3byBtZXNzYWdlcykKLSAqIEBpMmNfc2VtOiBzZW1hcGhvcmUgZm9yIGkyYy10cmFuc2ZlcnMKKyAqIEB1c2JfbXV0ZXg6IHNlbWFwaG9yZSBvZiBVU0IgY29udHJvbCBtZXNzYWdlcyAocmVhZGluZyBuZWVkcyB0d28gbWVzc2FnZXMpCisgKiBAaTJjX211dGV4OiBzZW1hcGhvcmUgZm9yIGkyYy10cmFuc2ZlcnMKICAqCiAgKiBAaTJjX2FkYXA6IGRldmljZSdzIGkyY19hZGFwdGVyIGlmIGl0IHVzZXMgSTJDb3ZlclVTQgogICogQHBsbF9hZGRyOiBJMkMgYWRkcmVzcyBvZiB0aGUgdHVuZXIgZm9yIHByb2dyYW1taW5nCkBAIC0yODMsMTAgKzI4NCwxMCBAQAogCWludCBwaWRfZmlsdGVyaW5nOwogCiAJLyogbG9ja2luZyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgdXNiX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggdXNiX211dGV4OwogCiAJLyogaTJjICovCi0Jc3RydWN0IHNlbWFwaG9yZSBpMmNfc2VtOworCXN0cnVjdCBtdXRleCBpMmNfbXV0ZXg7CiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOwogCiAJLyogdHVuZXIgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzAyeC5jCmluZGV4IDRhOTVlY2EuLmIyZjA5OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwMnguYwpAQCAtNzUsNyArNzUsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAoKHJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmZC0+dXNiX3NlbSkpKQorCWlmICgocmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT51c2JfbXV0ZXgpKSkKIAkJcmV0dXJuIHJldDsKIAogCWlmICgocmV0ID0gdnA3MDJ4X3VzYl9vdXRfb3AoZCxSRVFVRVNUX09VVCwwLDAsbyxvbGVuKSkgPCAwKQpAQCAtODQsNyArODQsNyBAQAogCXJldCA9IHZwNzAyeF91c2JfaW5fb3AoZCxSRVFVRVNUX0lOLDAsMCxpLGlsZW4pOwogCiB1bmxvY2s6Ci0JdXAoJmQtPnVzYl9zZW0pOworCW11dGV4X3VubG9jaygmZC0+dXNiX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi92cDcwNDUuYwppbmRleCAzODM1MjM1Li44ZWEzODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL3ZwNzA0NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdnA3MDQ1LmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlkZWJfeGZlcigib3V0IGJ1ZmZlcjogIik7CiAJZGVidWdfZHVtcChvdXRidWYsb3V0bGVuKzEsZGViX3hmZXIpOwogCi0JaWYgKChyZXQgPSBkb3duX2ludGVycnVwdGlibGUoJmQtPnVzYl9zZW0pKSkKKwlpZiAoKHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+dXNiX211dGV4KSkpCiAJCXJldHVybiByZXQ7CiAKIAlpZiAodXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsCkBAIC02OCw3ICs2OCw3IEBACiAJCW1lbWNweShpbiwmaW5idWZbMV0saW5sZW4pOwogCiB1bmxvY2s6Ci0JdXAoJmQtPnVzYl9zZW0pOworCW11dGV4X3VubG9jaygmZC0+dXNiX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDc2YjZhMmEuLjk0MjMzMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC0yOSw3ICsyOSw3IEBACiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfTVQzMTIKLQl0cmlzdGF0ZSAiWmFybGluayBNVDMxMiBiYXNlZCIKKwl0cmlzdGF0ZSAiWmFybGluayBWUDMxMC9NVDMxMiBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgpAQCAtMTE2LDYgKzExNiwxMiBAQAogCWhlbHAKIAkgIEEgRFZCLVQgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9aTDEwMzUzCisJdHJpc3RhdGUgIlphcmxpbmsgWkwxMDM1MyBiYXNlZCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFCisJaGVscAorCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX0RJQjMwMDBNQgogCXRyaXN0YXRlICJEaUJjb20gMzAwME0tQiIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCkBAIC0xNTUsNyArMTYxLDcgQEAKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAKIGNvbmZpZyBEVkJfTlhUMjAwWAotCXRyaXN0YXRlICJOZXh0d2F2ZSBOWFQyMDAyL05YVDIwMDQgYmFzZWQiCisJdHJpc3RhdGUgIk54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUMjAwMi9OWFQyMDA0IGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscApAQCAtMTY5LDE0ICsxNzUsMTQgQEAKIAkgIG9yIC9saWIvZmlybXdhcmUgKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogCiBjb25maWcgRFZCX09SNTEyMTEKLQl0cmlzdGF0ZSAib3I1MTIxMSBiYXNlZCAocGNIRFRWIEhEMjAwMCBjYXJkKSIKKwl0cmlzdGF0ZSAiT3JlbiBPUjUxMjExIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQW4gQVRTQyA4VlNCIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfT1I1MTEzMgotCXRyaXN0YXRlICJPUjUxMTMyIGJhc2VkIChwY0hEVFYgSEQzMDAwIGNhcmQpIgorCXRyaXN0YXRlICJPcmVuIE9SNTExMzIgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggMWFmNzY5Yy4uZDA5YjYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtMjAsNiArMjAsNyBAQAogb2JqLSQoQ09ORklHX0RWQl9TUDg4N1gpICs9IHNwODg3eC5vCiBvYmotJChDT05GSUdfRFZCX05YVDYwMDApICs9IG54dDYwMDAubwogb2JqLSQoQ09ORklHX0RWQl9NVDM1MikgKz0gbXQzNTIubworb2JqLSQoQ09ORklHX0RWQl9aTDEwMzUzKSArPSB6bDEwMzUzLm8KIG9iai0kKENPTkZJR19EVkJfQ1gyMjcwMikgKz0gY3gyMjcwMi5vCiBvYmotJChDT05GSUdfRFZCX1REQTEwMDIxKSArPSB0ZGExMDAyMS5vCiBvYmotJChDT05GSUdfRFZCX1NUVjAyOTcpICs9IHN0djAyOTcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9iY20zNTEwLmMKaW5kZXggY2FhZWU4OS4uMTcwOGExZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYmNtMzUxMC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiYmNtMzUxMC5oIgpAQCAtNTIsNyArNTMsNyBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CiAKIAkvKiBkZW1vZHVsYXRvciBwcml2YXRlIGRhdGEgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGhhYl9zZW07CisJc3RydWN0IG11dGV4IGhhYl9tdXRleDsKIAl1OCBmaXJtd2FyZV9sb2FkZWQ6MTsKIAogCXVuc2lnbmVkIGxvbmcgbmV4dF9zdGF0dXNfY2hlY2s7CkBAIC0yMTMsNyArMjE0LDcgQEAKIAlkYnVmb3V0KG9iLG9sZW4rMixkZWJfaGFiKTsKIAlkZWJfaGFiKCJcbiIpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc3QtPmhhYl9zZW0pIDwgMCkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzdC0+aGFiX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCiAJaWYgKChyZXQgPSBiY20zNTEwX2hhYl9zZW5kX3JlcXVlc3Qoc3QsIG9iLCBvbGVuKzIpKSA8IDAgfHwKQEAgLTIyNiw3ICsyMjcsNyBAQAogCiAJbWVtY3B5KGlidWYsJmliWzJdLGlsZW4pOwogZXJyb3I6Ci0JdXAoJnN0LT5oYWJfc2VtKTsKKwltdXRleF91bmxvY2soJnN0LT5oYWJfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc5Niw3ICs3OTcsNyBAQAogCXN0YXRlLT5mcm9udGVuZC5vcHMgPSAmc3RhdGUtPm9wczsKIAlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwogCi0Jc2VtYV9pbml0KCZzdGF0ZS0+aGFiX3NlbSwgMSk7CisJbXV0ZXhfaW5pdCgmc3RhdGUtPmhhYl9tdXRleCk7CiAKIAlpZiAoKHJldCA9IGJjbTM1MTBfcmVhZEIoc3RhdGUsMHhlMCwmdikpIDwgMCkKIAkJZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ic2JlMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JzYmUxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1NzNiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ic2JlMS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogYnNiZTEuaCAtIEFMUFMgQlNCRTEgdHVuZXIgc3VwcG9ydCAobW92ZWQgZnJvbSBhdjcxMTAuYykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBPciwgcG9pbnQgeW91ciBicm93c2VyIHRvIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICoKKyAqCisgKiB0aGUgcHJvamVjdCdzIHBhZ2UgaXMgYXQgaHR0cDovL3d3dy5saW51eHR2Lm9yZworICovCisKKyNpZm5kZWYgQlNCRTFfSAorI2RlZmluZSBCU0JFMV9ICisKK3N0YXRpYyB1OCBhbHBzX2JzYmUxX2luaXR0YWJbXSA9IHsKKwkweDAxLCAweDE1LAorCTB4MDIsIDB4MzAsCisJMHgwMywgMHgwMCwKKwkweDA0LCAweDdkLCAgIC8qIEYyMkZSID0gMHg3ZCwgRjIyID0gZl9WQ08gLyAxMjggLyAweDdkID0gMjIga0h6ICovCisJMHgwNSwgMHgzNSwgICAvKiBJMkNUID0gMCwgU0NMVCA9IDEsIFNEQVQgPSAxICovCisJMHgwNiwgMHg0MCwgICAvKiBEQUMgbm90IHVzZWQsIHNldCB0byBoaWdoIGltcGVuZGFuY2UgbW9kZSAqLworCTB4MDcsIDB4MDAsICAgLyogREFDIExTQiAqLworCTB4MDgsIDB4NDAsICAgLyogRGlTRXFDIG9mZiwgTE5CIHBvd2VyIG9uIE9QMi9MT0NLIHBpbiBvbiAqLworCTB4MDksIDB4MDAsICAgLyogRklGTyAqLworCTB4MGMsIDB4NTEsICAgLyogT1AxIGN0bCA9IE5vcm1hbCwgT1AxIHZhbCA9IDEgKExOQiBQb3dlciBPTikgKi8KKwkweDBkLCAweDgyLCAgIC8qIERDIG9mZnNldCBjb21wZW5zYXRpb24gPSBPTiwgYmV0YV9hZ2MxID0gMiAqLworCTB4MGUsIDB4MjMsICAgLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCisJMHgxMCwgMHgzZiwgICAvLyBBR0MyICAweDNkCisJMHgxMSwgMHg4NCwKKwkweDEyLCAweGI5LAorCTB4MTUsIDB4YzksICAgLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKKwkweDE2LCAweDAwLAorCTB4MTcsIDB4MDAsCisJMHgxOCwgMHgwMCwKKwkweDE5LCAweDAwLAorCTB4MWEsIDB4MDAsCisJMHgxZiwgMHg1MCwKKwkweDIwLCAweDAwLAorCTB4MjEsIDB4MDAsCisJMHgyMiwgMHgwMCwKKwkweDIzLCAweDAwLAorCTB4MjgsIDB4MDAsICAvLyBvdXQgaW1wOiBub3JtYWwgIG91dCB0eXBlOiBwYXJhbGxlbCBGRUMgbW9kZTowCisJMHgyOSwgMHgxZSwgIC8vIDEvMiB0aHJlc2hvbGQKKwkweDJhLCAweDE0LCAgLy8gMi8zIHRocmVzaG9sZAorCTB4MmIsIDB4MGYsICAvLyAzLzQgdGhyZXNob2xkCisJMHgyYywgMHgwOSwgIC8vIDUvNiB0aHJlc2hvbGQKKwkweDJkLCAweDA1LCAgLy8gNy84IHRocmVzaG9sZAorCTB4MmUsIDB4MDEsCisJMHgzMSwgMHgxZiwgIC8vIHRlc3QgYWxsIEZFQ3MKKwkweDMyLCAweDE5LCAgLy8gdml0ZXJiaSBhbmQgc3luY2hybyBzZWFyY2gKKwkweDMzLCAweGZjLCAgLy8gcnMgY29udHJvbAorCTB4MzQsIDB4OTMsICAvLyBlcnJvciBjb250cm9sCisJMHgwZiwgMHg5MiwKKwkweGZmLCAweGZmCit9OworCisKK3N0YXRpYyBpbnQgYWxwc19ic2JlMV9zZXRfc3ltYm9sX3JhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiBzcmF0ZSwgdTMyIHJhdGlvKQoreworCXU4IGFjbGsgPSAwOworCXU4IGJjbGsgPSAwOworCisJaWYgKHNyYXRlIDwgMTUwMDAwMCkgeyBhY2xrID0gMHhiNzsgYmNsayA9IDB4NDc7IH0KKwllbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDApIHsgYWNsayA9IDB4Yjc7IGJjbGsgPSAweDRiOyB9CisJZWxzZSBpZiAoc3JhdGUgPCA3MDAwMDAwKSB7IGFjbGsgPSAweGI3OyBiY2xrID0gMHg0ZjsgfQorCWVsc2UgaWYgKHNyYXRlIDwgMTQwMDAwMDApIHsgYWNsayA9IDB4Yjc7IGJjbGsgPSAweDUzOyB9CisJZWxzZSBpZiAoc3JhdGUgPCAzMDAwMDAwMCkgeyBhY2xrID0gMHhiNjsgYmNsayA9IDB4NTM7IH0KKwllbHNlIGlmIChzcmF0ZSA8IDQ1MDAwMDAwKSB7IGFjbGsgPSAweGI0OyBiY2xrID0gMHg1MTsgfQorCisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgxMywgYWNsayk7CisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgxNCwgYmNsayk7CisJc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgxZiwgKHJhdGlvID4+IDE2KSAmIDB4ZmYpOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MjAsIChyYXRpbyA+PiAgOCkgJiAweGZmKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDIxLCAocmF0aW8gICAgICApICYgMHhmMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbHBzX2JzYmUxX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKK3sKKwlpbnQgcmV0OworCXU4IGRhdGFbNF07CisJdTMyIGRpdjsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHg2MSwgLmZsYWdzID0gMCwgLmJ1ZiA9IGRhdGEsIC5sZW4gPSBzaXplb2YoZGF0YSkgfTsKKworCWlmICgocGFyYW1zLT5mcmVxdWVuY3kgPCA5NTAwMDApIHx8IChwYXJhbXMtPmZyZXF1ZW5jeSA+IDIxNTAwMDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpdiA9IChwYXJhbXMtPmZyZXF1ZW5jeSArICgxMjUgLSAxKSkgLyAxMjU7IC8vIHJvdW5kIGNvcnJlY3RseQorCWRhdGFbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlkYXRhWzFdID0gZGl2ICYgMHhmZjsKKwlkYXRhWzJdID0gMHg4MCB8ICgoZGl2ICYgMHgxODAwMCkgPj4gMTApIHwgNDsKKwlkYXRhWzNdID0gKHBhcmFtcy0+ZnJlcXVlbmN5ID4gMTUzMDAwMCkgPyAweEUwIDogMHhFNDsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMsICZtc2csIDEpOworCXJldHVybiAocmV0ICE9IDEpID8gLUVJTyA6IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcgYWxwc19ic2JlMV9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS5pbml0dGFiID0gYWxwc19ic2JlMV9pbml0dGFiLAorCS5tY2xrID0gODgwMDAwMDBVTCwKKwkuaW52ZXJ0ID0gMSwKKwkuc2tpcF9yZWluaXQgPSAwLAorCS5taW5fZGVsYXlfbXMgPSAxMDAsCisJLnNldF9zeW1ib2xfcmF0ZSA9IGFscHNfYnNiZTFfc2V0X3N5bWJvbF9yYXRlLAorCS5wbGxfc2V0ID0gYWxwc19ic2JlMV9wbGxfc2V0LAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYnNydTYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ic3J1Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTM2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYnNydTYuaApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIGJzcnU2LmggLSBBTFBTIEJTUlU2IHR1bmVyIHN1cHBvcnQgKG1vdmVkIGZyb20gYnVkZ2V0LWNpLmMpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogT3IsIHBvaW50IHlvdXIgYnJvd3NlciB0byBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqCisgKgorICogdGhlIHByb2plY3QncyBwYWdlIGlzIGF0IGh0dHA6Ly93d3cubGludXh0di5vcmcKKyAqLworCisjaWZuZGVmIEJTUlU2X0gKKyNkZWZpbmUgQlNSVTZfSAorCitzdGF0aWMgdTggYWxwc19ic3J1Nl9pbml0dGFiW10gPSB7CisJMHgwMSwgMHgxNSwKKwkweDAyLCAweDAwLAorCTB4MDMsIDB4MDAsCisJMHgwNCwgMHg3ZCwgICAvKiBGMjJGUiA9IDB4N2QsIEYyMiA9IGZfVkNPIC8gMTI4IC8gMHg3ZCA9IDIyIGtIeiAqLworCTB4MDUsIDB4MzUsICAgLyogSTJDVCA9IDAsIFNDTFQgPSAxLCBTREFUID0gMSAqLworCTB4MDYsIDB4NDAsICAgLyogREFDIG5vdCB1c2VkLCBzZXQgdG8gaGlnaCBpbXBlbmRhbmNlIG1vZGUgKi8KKwkweDA3LCAweDAwLCAgIC8qIERBQyBMU0IgKi8KKwkweDA4LCAweDQwLCAgIC8qIERpU0VxQyBvZmYsIExOQiBwb3dlciBvbiBPUDIvTE9DSyBwaW4gb24gKi8KKwkweDA5LCAweDAwLCAgIC8qIEZJRk8gKi8KKwkweDBjLCAweDUxLCAgIC8qIE9QMSBjdGwgPSBOb3JtYWwsIE9QMSB2YWwgPSAxIChMTkIgUG93ZXIgT04pICovCisJMHgwZCwgMHg4MiwgICAvKiBEQyBvZmZzZXQgY29tcGVuc2F0aW9uID0gT04sIGJldGFfYWdjMSA9IDIgKi8KKwkweDBlLCAweDIzLCAgIC8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLworCTB4MTAsIDB4M2YsICAgLy8gQUdDMiAgMHgzZAorCTB4MTEsIDB4ODQsCisJMHgxMiwgMHhiOSwKKwkweDE1LCAweGM5LCAgIC8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCisJMHgxNiwgMHgwMCwKKwkweDE3LCAweDAwLAorCTB4MTgsIDB4MDAsCisJMHgxOSwgMHgwMCwKKwkweDFhLCAweDAwLAorCTB4MWYsIDB4NTAsCisJMHgyMCwgMHgwMCwKKwkweDIxLCAweDAwLAorCTB4MjIsIDB4MDAsCisJMHgyMywgMHgwMCwKKwkweDI4LCAweDAwLCAgLy8gb3V0IGltcDogbm9ybWFsICBvdXQgdHlwZTogcGFyYWxsZWwgRkVDIG1vZGU6MAorCTB4MjksIDB4MWUsICAvLyAxLzIgdGhyZXNob2xkCisJMHgyYSwgMHgxNCwgIC8vIDIvMyB0aHJlc2hvbGQKKwkweDJiLCAweDBmLCAgLy8gMy80IHRocmVzaG9sZAorCTB4MmMsIDB4MDksICAvLyA1LzYgdGhyZXNob2xkCisJMHgyZCwgMHgwNSwgIC8vIDcvOCB0aHJlc2hvbGQKKwkweDJlLCAweDAxLAorCTB4MzEsIDB4MWYsICAvLyB0ZXN0IGFsbCBGRUNzCisJMHgzMiwgMHgxOSwgIC8vIHZpdGVyYmkgYW5kIHN5bmNocm8gc2VhcmNoCisJMHgzMywgMHhmYywgIC8vIHJzIGNvbnRyb2wKKwkweDM0LCAweDkzLCAgLy8gZXJyb3IgY29udHJvbAorCTB4MGYsIDB4NTIsCisJMHhmZiwgMHhmZgorfTsKKworc3RhdGljIGludCBhbHBzX2JzcnU2X3NldF9zeW1ib2xfcmF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIHNyYXRlLCB1MzIgcmF0aW8pCit7CisJdTggYWNsayA9IDA7CisJdTggYmNsayA9IDA7CisKKwlpZiAoc3JhdGUgPCAxNTAwMDAwKSB7CisJCWFjbGsgPSAweGI3OworCQliY2xrID0gMHg0NzsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgMzAwMDAwMCkgeworCQlhY2xrID0gMHhiNzsKKwkJYmNsayA9IDB4NGI7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDcwMDAwMDApIHsKKwkJYWNsayA9IDB4Yjc7CisJCWJjbGsgPSAweDRmOworCX0gZWxzZSBpZiAoc3JhdGUgPCAxNDAwMDAwMCkgeworCQlhY2xrID0gMHhiNzsKKwkJYmNsayA9IDB4NTM7CisJfSBlbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDAwKSB7CisJCWFjbGsgPSAweGI2OworCQliY2xrID0gMHg1MzsKKwl9IGVsc2UgaWYgKHNyYXRlIDwgNDUwMDAwMDApIHsKKwkJYWNsayA9IDB4YjQ7CisJCWJjbGsgPSAweDUxOworCX0KKworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MTMsIGFjbGspOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MTQsIGJjbGspOworCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MWYsIChyYXRpbyA+PiAxNikgJiAweGZmKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDIwLCAocmF0aW8gPj4gOCkgJiAweGZmKTsKKwlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDIxLCByYXRpbyAmIDB4ZjApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxwc19ic3J1Nl9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJdTggYnVmWzRdOworCXUzMiBkaXY7CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4NjEsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OworCisJaWYgKChwYXJhbXMtPmZyZXF1ZW5jeSA8IDk1MDAwMCkgfHwgKHBhcmFtcy0+ZnJlcXVlbmN5ID4gMjE1MDAwMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZGl2ID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICsgKDEyNSAtIDEpKSAvIDEyNTsJLy8gcm91bmQgY29ycmVjdGx5CisJYnVmWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7CisJYnVmWzFdID0gZGl2ICYgMHhmZjsKKwlidWZbMl0gPSAweDgwIHwgKChkaXYgJiAweDE4MDAwKSA+PiAxMCkgfCA0OworCWJ1ZlszXSA9IDB4QzQ7CisKKwlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPiAxNTMwMDAwKQorCQlidWZbM10gPSAweGMwOworCisJaWYgKGkyY190cmFuc2ZlcihpMmMsICZtc2csIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIGFscHNfYnNydTZfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKKwkuaW5pdHRhYiA9IGFscHNfYnNydTZfaW5pdHRhYiwKKwkubWNsayA9IDg4MDAwMDAwVUwsCisJLmludmVydCA9IDEsCisJLnNraXBfcmVpbml0ID0gMCwKKwkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMSwKKwkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCisJLm1pbl9kZWxheV9tcyA9IDEwMCwKKwkuc2V0X3N5bWJvbF9yYXRlID0gYWxwc19ic3J1Nl9zZXRfc3ltYm9sX3JhdGUsCisJLnBsbF9zZXQgPSBhbHBzX2JzcnU2X3BsbF9zZXQsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5jCmluZGV4IGQxNWQzMmMuLmYzZWRmOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuYwpAQCAtMzcxLDYgKzM3MSwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN4MjQxMTBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGN4MjQxMTBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpZiAoc3RhdGUtPmNvbmZpZy0+cGxsX3NsZWVwKQorCQkgIHJldHVybiBzdGF0ZS0+Y29uZmlnLT5wbGxfc2xlZXAoZmUpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGN4MjQxMTBfc2V0X3ZvbHRhZ2UgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RydWN0IGN4MjQxMTBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CkBAIC00MTgsNiArNDI3LDkgQEAKIAlzdHJ1Y3QgY3gyNDExMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKKwlpZiAoY21kLT5tc2dfbGVuIDwgMyB8fCBjbWQtPm1zZ19sZW4gPiA2KQorCQlyZXR1cm4gLUVJTlZBTDsgIC8qIG5vdCBpbXBsZW1lbnRlZCAqLworCiAJZm9yIChpID0gMDsgaSA8IGNtZC0+bXNnX2xlbjsgaSsrKQogCQljeDI0MTEwX3dyaXRlcmVnKHN0YXRlLCAweDc5ICsgaSwgY21kLT5tc2dbaV0pOwogCkBAIC02MzksNiArNjUxLDcgQEAKIAkucmVsZWFzZSA9IGN4MjQxMTBfcmVsZWFzZSwKIAogCS5pbml0ID0gY3gyNDExMF9pbml0ZmUsCisJLnNsZWVwID0gY3gyNDExMF9zbGVlcCwKIAkuc2V0X2Zyb250ZW5kID0gY3gyNDExMF9zZXRfZnJvbnRlbmQsCiAJLmdldF9mcm9udGVuZCA9IGN4MjQxMTBfZ2V0X2Zyb250ZW5kLAogCS5yZWFkX3N0YXR1cyA9IGN4MjQxMTBfcmVhZF9zdGF0dXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuaAppbmRleCBiNjNlY2YyLi42MDlhYzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmgKQEAgLTM1LDYgKzM1LDcgQEAKIAkvKiBQTEwgbWFpbnRlbmFuY2UgKi8KIAlpbnQgKCpwbGxfaW5pdCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOwogCWludCAoKnBsbF9zZXQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcyk7CisJaW50ICgqcGxsX3NsZWVwKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CiB9OwogCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyNDExMF9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMTBfY29uZmlnKiBjb25maWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwppbmRleCA0ZGNiNjA1Li5iNmUyYzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKQEAgLTM2Miw2ICszNjIsNjMgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGR2Yl9wbGxfcGhpbGlwc19zZDE4NzhfdGRhODI2MSk7CiAKKy8qCisgKiBQaGlsaXBzIFREMTMxNiBUdW5lci4KKyAqLworc3RhdGljIHZvaWQgdGQxMzE2X2J3KHU4ICpidWYsIHUzMiBmcmVxLCBpbnQgYmFuZHdpZHRoKQoreworCXU4IGJhbmQ7CisKKwkvKiBkZXRlcm1pbmUgYmFuZCAqLworCWlmIChmcmVxIDwgMTYxMDAwMDAwKQorCQliYW5kID0gMTsKKwllbHNlIGlmIChmcmVxIDwgNDQ0MDAwMDAwKQorCQliYW5kID0gMjsKKwllbHNlCisJCWJhbmQgPSA0OworCisJYnVmWzNdIHw9IGJhbmQ7CisKKwkvKiBzZXR1cCBQTEwgZmlsdGVyICovCisJaWYgKGJhbmR3aWR0aCA9PSBCQU5EV0lEVEhfOF9NSFopCisJCWJ1ZlszXSB8PSAxIDw8IDM7Cit9CisKK3N0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF9waGlsaXBzX3RkMTMxNiA9IHsKKwkubmFtZSAgPSAiUGhpbGlwcyBURDEzMTYiLAorCS5taW4gICA9ICA4NzAwMDAwMCwKKwkubWF4ICAgPSA4OTUwMDAwMDAsCisJLnNldGJ3ID0gdGQxMzE2X2J3LAorCS5jb3VudCA9IDksCisJLmVudHJpZXMgPSB7CisJCXsgIDkzODM0MDAwLCAzNjE2NjAwMCwgMTY2NjY2LCAweGNhLCAweDYwfSwKKwkJeyAxMjM4MzQwMDAsIDM2MTY2MDAwLCAxNjY2NjYsIDB4Y2EsIDB4YTB9LAorCQl7IDE2MzgzNDAwMCwgMzYxNjYwMDAsIDE2NjY2NiwgMHhjYSwgMHhjMH0sCisJCXsgMjUzODM0MDAwLCAzNjE2NjAwMCwgMTY2NjY2LCAweGNhLCAweDYwfSwKKwkJeyAzODM4MzQwMDAsIDM2MTY2MDAwLCAxNjY2NjYsIDB4Y2EsIDB4YTB9LAorCQl7IDQ0MzgzNDAwMCwgMzYxNjYwMDAsIDE2NjY2NiwgMHhjYSwgMHhjMH0sCisJCXsgNTgzODM0MDAwLCAzNjE2NjAwMCwgMTY2NjY2LCAweGNhLCAweDYwfSwKKwkJeyA3OTM4MzQwMDAsIDM2MTY2MDAwLCAxNjY2NjYsIDB4Y2EsIDB4YTB9LAorCQl7IDg1ODgzNDAwMCwgMzYxNjYwMDAsIDE2NjY2NiwgMHhjYSwgMHhlMH0sCisJfSwKK307CitFWFBPUlRfU1lNQk9MKGR2Yl9wbGxfcGhpbGlwc190ZDEzMTYpOworCisvKiBGRTY2MDAgdXNlZCBvbiBEVmlDTyBIeWJyaWQgKi8KK3N0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90aG9tc29uX2ZlNjYwMCA9IHsKKwkubmFtZSA9ICJUaG9tc29uIEZFNjYwMCIsCisJLm1pbiA9ICA0NDI1MDAwMCwKKwkubWF4ID0gODU4MDAwMDAwLAorCS5jb3VudCA9IDQsCisJLmVudHJpZXMgPSB7CisJCXsgMjUwMDAwMDAwLCAzNjIxMzMzMywgMTY2NjY3LCAweGI0LCAweDEyIH0sCisJCXsgNDU1MDAwMDAwLCAzNjIxMzMzMywgMTY2NjY3LCAweGZlLCAweDExIH0sCisJCXsgNzc1NTAwMDAwLCAzNjIxMzMzMywgMTY2NjY3LCAweGJjLCAweDE4IH0sCisJCXsgOTk5OTk5OTk5LCAzNjIxMzMzMywgMTY2NjY3LCAweGY0LCAweDE4IH0sCisJfQorfTsKK0VYUE9SVF9TWU1CT0woZHZiX3BsbF90aG9tc29uX2ZlNjYwMCk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0zOTEsOCArNDQ4LDggQEAKIAlkaXYgPSAoZnJlcSArIGRlc2MtPmVudHJpZXNbaV0ub2Zmc2V0KSAvIGRlc2MtPmVudHJpZXNbaV0uc3RlcHNpemU7CiAJYnVmWzBdID0gZGl2ID4+IDg7CiAJYnVmWzFdID0gZGl2ICYgMHhmZjsKLQlidWZbMl0gPSBkZXNjLT5lbnRyaWVzW2ldLmNiMTsKLQlidWZbM10gPSBkZXNjLT5lbnRyaWVzW2ldLmNiMjsKKwlidWZbMl0gPSBkZXNjLT5lbnRyaWVzW2ldLmNvbmZpZzsKKwlidWZbM10gPSBkZXNjLT5lbnRyaWVzW2ldLmNiOwogCiAJaWYgKGRlc2MtPnNldGJ3KQogCQlkZXNjLT5zZXRidyhidWYsIGZyZXEsIGJhbmR3aWR0aCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaAppbmRleCBiYjhkNGI0Li4yYjg0NjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKQEAgLTE1LDggKzE1LDggQEAKIAkJdTMyIGxpbWl0OwogCQl1MzIgb2Zmc2V0OwogCQl1MzIgc3RlcHNpemU7Ci0JCXU4ICBjYjE7Ci0JCXU4ICBjYjI7CisJCXU4ICBjb25maWc7CisJCXU4ICBjYjsKIAl9IGVudHJpZXNbMTJdOwogfTsKIApAQCAtNDAsNiArNDAsOSBAQAogZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90ZGh1MjsKIGV4dGVybiBzdHJ1Y3QgZHZiX3BsbF9kZXNjIGR2Yl9wbGxfc2Ftc3VuZ190Ym12OwogZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF9waGlsaXBzX3NkMTg3OF90ZGE4MjYxOworZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF9waGlsaXBzX3RkMTMxNjsKKworZXh0ZXJuIHN0cnVjdCBkdmJfcGxsX2Rlc2MgZHZiX3BsbF90aG9tc29uX2ZlNjYwMDsKIAogaW50IGR2Yl9wbGxfY29uZmlndXJlKHN0cnVjdCBkdmJfcGxsX2Rlc2MgKmRlc2MsIHU4ICpidWYsCiAJCSAgICAgIHUzMiBmcmVxLCBpbnQgYmFuZHdpZHRoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGNiZTYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogbG5icDIxLmggLSBkcml2ZXIgZm9yIGxuYiBzdXBwbHkgYW5kIGNvbnRyb2wgaWMgbG5icDIxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBFbmRyaXNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogT3IsIHBvaW50IHlvdXIgYnJvd3NlciB0byBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqCisgKgorICogdGhlIHByb2plY3QncyBwYWdlIGlzIGF0IGh0dHA6Ly93d3cubGludXh0di5vcmcKKyAqLworCisjaWZuZGVmIF9MTkJQMjFfSAorI2RlZmluZSBfTE5CUDIxX0gKKworLyogc3lzdGVtIHJlZ2lzdGVyICovCisjZGVmaW5lIExOQlAyMV9PTEYJMHgwMQorI2RlZmluZSBMTkJQMjFfT1RGCTB4MDIKKyNkZWZpbmUgTE5CUDIxX0VOCTB4MDQKKyNkZWZpbmUgTE5CUDIxX1ZTRUwJMHgwOAorI2RlZmluZSBMTkJQMjFfTExDCTB4MTAKKyNkZWZpbmUgTE5CUDIxX1RFTgkweDIwCisjZGVmaW5lIExOQlAyMV9JU0VMCTB4NDAKKyNkZWZpbmUgTE5CUDIxX1BDTAkweDgwCisKK3N0cnVjdCBsbmJwMjEgeworCXU4CQkJY29uZmlnOworCXU4CQkJb3ZlcnJpZGVfb3I7CisJdTgJCQlvdmVycmlkZV9hbmQ7CisJc3RydWN0IGkyY19hZGFwdGVyCSppMmM7CisJdm9pZAkJCSgqcmVsZWFzZV9jaGFpbikoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOworfTsKKworc3RhdGljIGludCBsbmJwMjFfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgbG5icDIxICpsbmJwMjEgPSAoc3RydWN0IGxuYnAyMSAqKSBmZS0+bWlzY19wcml2OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLAorCQkJCS5idWYgPSAmbG5icDIxLT5jb25maWcsCisJCQkJLmxlbiA9IHNpemVvZihsbmJwMjEtPmNvbmZpZykgfTsKKworCWxuYnAyMS0+Y29uZmlnICY9IH4oTE5CUDIxX1ZTRUwgfCBMTkJQMjFfRU4pOworCisJc3dpdGNoKHZvbHRhZ2UpIHsKKwljYXNlIFNFQ19WT0xUQUdFX09GRjoKKwkJYnJlYWs7CisJY2FzZSBTRUNfVk9MVEFHRV8xMzoKKwkJbG5icDIxLT5jb25maWcgfD0gTE5CUDIxX0VOOworCQlicmVhazsKKwljYXNlIFNFQ19WT0xUQUdFXzE4OgorCQlsbmJwMjEtPmNvbmZpZyB8PSAoTE5CUDIxX0VOIHwgTE5CUDIxX1ZTRUwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9OworCisJbG5icDIxLT5jb25maWcgfD0gbG5icDIxLT5vdmVycmlkZV9vcjsKKwlsbmJwMjEtPmNvbmZpZyAmPSBsbmJwMjEtPm92ZXJyaWRlX2FuZDsKKworCXJldHVybiAoaTJjX3RyYW5zZmVyKGxuYnAyMS0+aTJjLCAmbXNnLCAxKSA9PSAxKSA/IDAgOiAtRUlPOworfQorCitzdGF0aWMgaW50IGxuYnAyMV9lbmFibGVfaGlnaF9sbmJfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgbG9uZyBhcmcpCit7CisJc3RydWN0IGxuYnAyMSAqbG5icDIxID0gKHN0cnVjdCBsbmJwMjEgKikgZmUtPm1pc2NfcHJpdjsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CS5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwKKwkJCQkuYnVmID0gJmxuYnAyMS0+Y29uZmlnLAorCQkJCS5sZW4gPSBzaXplb2YobG5icDIxLT5jb25maWcpIH07CisKKwlpZiAoYXJnKQorCQlsbmJwMjEtPmNvbmZpZyB8PSBMTkJQMjFfTExDOworCWVsc2UKKwkJbG5icDIxLT5jb25maWcgJj0gfkxOQlAyMV9MTEM7CisKKwlsbmJwMjEtPmNvbmZpZyB8PSBsbmJwMjEtPm92ZXJyaWRlX29yOworCWxuYnAyMS0+Y29uZmlnICY9IGxuYnAyMS0+b3ZlcnJpZGVfYW5kOworCisJcmV0dXJuIChpMmNfdHJhbnNmZXIobG5icDIxLT5pMmMsICZtc2csIDEpID09IDEpID8gMCA6IC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGxuYnAyMV9leGl0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBsbmJwMjEgKmxuYnAyMSA9IChzdHJ1Y3QgbG5icDIxICopIGZlLT5taXNjX3ByaXY7CisKKwkvKiBMTkJQIHBvd2VyIG9mZiAqLworCWxuYnAyMV9zZXRfdm9sdGFnZShmZSwgU0VDX1ZPTFRBR0VfT0ZGKTsKKworCS8qIGZyZWUgZGF0YSAmIGNhbGwgbmV4dCByZWxlYXNlIHJvdXRpbmUgKi8KKwlmZS0+b3BzLT5yZWxlYXNlID0gbG5icDIxLT5yZWxlYXNlX2NoYWluOworCWtmcmVlKGZlLT5taXNjX3ByaXYpOworCWZlLT5taXNjX3ByaXYgPSBOVUxMOworCWlmIChmZS0+b3BzLT5yZWxlYXNlKQorCQlmZS0+b3BzLT5yZWxlYXNlKGZlKTsKK30KKworc3RhdGljIGludCBsbmJwMjFfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwgdTggb3ZlcnJpZGVfY2xlYXIpCit7CisJc3RydWN0IGxuYnAyMSAqbG5icDIxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxuYnAyMSksIEdGUF9LRVJORUwpOworCisJaWYgKCFsbmJwMjEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZGVmYXVsdCBjb25maWd1cmF0aW9uICovCisJbG5icDIxLT5jb25maWcgPSBMTkJQMjFfSVNFTDsKKworCS8qIGJpdHMgd2hpY2ggc2hvdWxkIGJlIGZvcmNlZCB0byAnMScgKi8KKwlsbmJwMjEtPm92ZXJyaWRlX29yID0gb3ZlcnJpZGVfc2V0OworCisJLyogYml0cyB3aGljaCBzaG91bGQgYmUgZm9yY2VkIHRvICcwJyAqLworCWxuYnAyMS0+b3ZlcnJpZGVfYW5kID0gfm92ZXJyaWRlX2NsZWFyOworCisJLyogaW5zdGFsbCByZWxlYXNlIGNhbGxiYWNrICovCisJbG5icDIxLT5yZWxlYXNlX2NoYWluID0gZmUtPm9wcy0+cmVsZWFzZTsKKwlmZS0+b3BzLT5yZWxlYXNlID0gbG5icDIxX2V4aXQ7CisKKwkvKiBvdmVycmlkZSBmcm9udGVuZCBvcHMgKi8KKwlmZS0+b3BzLT5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKKwlmZS0+b3BzLT5lbmFibGVfaGlnaF9sbmJfdm9sdGFnZSA9IGxuYnAyMV9lbmFibGVfaGlnaF9sbmJfdm9sdGFnZTsKKworCWxuYnAyMS0+aTJjID0gaTJjOworCWZlLT5taXNjX3ByaXYgPSBsbmJwMjE7CisKKwlyZXR1cm4gbG5icDIxX3NldF92b2x0YWdlKGZlLCBTRUNfVk9MVEFHRV9PRkYpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzEyLmMKaW5kZXggZWM0ZTY0MS4uZDNhZWE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzEyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzEyLmMKQEAgLTYxMiw3NiArNjEyLDYgQEAKIAlrZnJlZShzdGF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyB2cDMxMF9tdDMxMl9vcHM7Ci0KLXN0cnVjdCBkdmJfZnJvbnRlbmQqIHZwMzEwX2F0dGFjaChjb25zdCBzdHJ1Y3QgbXQzMTJfY29uZmlnKiBjb25maWcsCi0JCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKLXsKLQlzdHJ1Y3QgbXQzMTJfc3RhdGUqIHN0YXRlID0gTlVMTDsKLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXQzMTJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3RhdGUgPT0gTlVMTCkKLQkJZ290byBlcnJvcjsKLQotCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwotCXN0YXRlLT5jb25maWcgPSBjb25maWc7Ci0Jc3RhdGUtPmkyYyA9IGkyYzsKLQltZW1jcHkoJnN0YXRlLT5vcHMsICZ2cDMxMF9tdDMxMl9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwotCXN0cmNweShzdGF0ZS0+b3BzLmluZm8ubmFtZSwgIlphcmxpbmsgVlAzMTAgRFZCLVMiKTsKLQotCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLwotCWlmIChtdDMxMl9yZWFkcmVnKHN0YXRlLCBJRCwgJnN0YXRlLT5pZCkgPCAwKQotCQlnb3RvIGVycm9yOwotCWlmIChzdGF0ZS0+aWQgIT0gSURfVlAzMTApIHsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCi0Jc3RhdGUtPmZyZXF1ZW5jeSA9IDkwOwotCXN0YXRlLT5mcm9udGVuZC5vcHMgPSAmc3RhdGUtPm9wczsKLQlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwotCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwotCi1lcnJvcjoKLQlrZnJlZShzdGF0ZSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0cnVjdCBkdmJfZnJvbnRlbmQqIG10MzEyX2F0dGFjaChjb25zdCBzdHJ1Y3QgbXQzMTJfY29uZmlnKiBjb25maWcsCi0JCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKLXsKLQlzdHJ1Y3QgbXQzMTJfc3RhdGUqIHN0YXRlID0gTlVMTDsKLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXQzMTJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3RhdGUgPT0gTlVMTCkKLQkJZ290byBlcnJvcjsKLQotCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwotCXN0YXRlLT5jb25maWcgPSBjb25maWc7Ci0Jc3RhdGUtPmkyYyA9IGkyYzsKLQltZW1jcHkoJnN0YXRlLT5vcHMsICZ2cDMxMF9tdDMxMl9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwotCXN0cmNweShzdGF0ZS0+b3BzLmluZm8ubmFtZSwgIlphcmxpbmsgTVQzMTIgRFZCLVMiKTsKLQotCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLwotCWlmIChtdDMxMl9yZWFkcmVnKHN0YXRlLCBJRCwgJnN0YXRlLT5pZCkgPCAwKQotCQlnb3RvIGVycm9yOwotCWlmIChzdGF0ZS0+aWQgIT0gSURfTVQzMTIpIHsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCi0Jc3RhdGUtPmZyZXF1ZW5jeSA9IDYwOwotCXN0YXRlLT5mcm9udGVuZC5vcHMgPSAmc3RhdGUtPm9wczsKLQlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOwotCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwotCi1lcnJvcjoKLQlrZnJlZShzdGF0ZSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyB2cDMxMF9tdDMxMl9vcHMgPSB7CiAKIAkuaW5mbyA9IHsKQEAgLTcyMCw2ICs2NTAsNDkgQEAKIAkuc2V0X3ZvbHRhZ2UgPSBtdDMxMl9zZXRfdm9sdGFnZSwKIH07CiAKK3N0cnVjdCBkdmJfZnJvbnRlbmQqIHZwMzEwX210MzEyX2F0dGFjaChjb25zdCBzdHJ1Y3QgbXQzMTJfY29uZmlnKiBjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXN0cnVjdCBtdDMxMl9zdGF0ZSogc3RhdGUgPSBOVUxMOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdDMxMl9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJLyogc2V0dXAgdGhlIHN0YXRlICovCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjID0gaTJjOworCW1lbWNweSgmc3RhdGUtPm9wcywgJnZwMzEwX210MzEyX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisKKwkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KKwlpZiAobXQzMTJfcmVhZHJlZyhzdGF0ZSwgSUQsICZzdGF0ZS0+aWQpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXN3aXRjaCAoc3RhdGUtPmlkKSB7CisJY2FzZSBJRF9WUDMxMDoKKwkJc3RyY3B5KHN0YXRlLT5vcHMuaW5mby5uYW1lLCAiWmFybGluayBWUDMxMCBEVkItUyIpOworCQlzdGF0ZS0+ZnJlcXVlbmN5ID0gOTA7CisJCWJyZWFrOworCWNhc2UgSURfTVQzMTI6CisJCXN0cmNweShzdGF0ZS0+b3BzLmluZm8ubmFtZSwgIlphcmxpbmsgTVQzMTIgRFZCLVMiKTsKKwkJc3RhdGUtPmZyZXF1ZW5jeSA9IDYwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsgKEtFUk5fV0FSTklORyAiT25seSBaYXJsaW5rIFZQMzEwL01UMzEyIGFyZSBzdXBwb3J0ZWQgY2hpcHMuXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCisJc3RhdGUtPmZyb250ZW5kLm9wcyA9ICZzdGF0ZS0+b3BzOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOwogCkBAIC03MjcsNSArNzAwLDQgQEAKIE1PRFVMRV9BVVRIT1IoIkFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQGxpbnV4dHYub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1FWFBPUlRfU1lNQk9MKG10MzEyX2F0dGFjaCk7Ci1FWFBPUlRfU1lNQk9MKHZwMzEwX2F0dGFjaCk7CitFWFBPUlRfU1lNQk9MKHZwMzEwX210MzEyX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5oCmluZGV4IGIzYTUzYTcuLjA3NGQ4NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDMxMi5oCkBAIC0zOCwxMCArMzgsOCBAQAogCWludCAoKnBsbF9zZXQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcyk7CiB9OwogCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbXQzMTJfYXR0YWNoKGNvbnN0IHN0cnVjdCBtdDMxMl9jb25maWcqIGNvbmZpZywKLQkJCQkJIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKK3N0cnVjdCBkdmJfZnJvbnRlbmQqIHZwMzEwX210MzEyX2F0dGFjaChjb25zdCBzdHJ1Y3QgbXQzMTJfY29uZmlnKiBjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKIAotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHZwMzEwX2F0dGFjaChjb25zdCBzdHJ1Y3QgbXQzMTJfY29uZmlnKiBjb25maWcsCi0JCQkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CiAKICNlbmRpZiAvLyBNVDMxMl9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuYwppbmRleCA2MTIyYmE3Li5lYjE1Njc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmMKQEAgLTM5MywxMCArMzkzLDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFFBTV8xMjg6Ci0JCWRlbGF5ID0gMTUwOwotCQlzd2VlcHJhdGUgPSAxMDAwOwotCQlicmVhazsKLQogCWNhc2UgUUFNXzI1NjoKIAkJZGVsYXkgPSAyMDA7CiAJCXN3ZWVwcmF0ZSA9IDUwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKaW5kZXggYzYzZTlhNS4uOGU4ZGY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJcmVzdWx0ID0gdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCAyLCAyKTsKLQltc2xlZXAoMSk7CisJbXNsZWVwKDIwKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MDIsNyArNTAyLDEyIEBACiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAogCS8qIHJlc2V0ICsgd2FrZSB1cCBjaGlwICovCi0JdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMCk7CisJaWYgKHN0YXRlLT5jb25maWctPnh0YWxfZnJlcSA9PSBUREExMDA0Nl9YVEFMXzRNKSB7CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDApOworCX0gZWxzZSB7CisJCWRwcmludGsoIiVzOiAxNk1IeiBYdGFsLCByZWR1Y2luZyBJMkMgc3BlZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDB4ODApOworCX0KIAl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0NkhfQ09ORl9UUklTVEFURTEsIDEsIDApOwogCS8qIGxldCB0aGUgY2xvY2tzIHJlY292ZXIgZnJvbSBzbGVlcCAqLwogCW1zbGVlcCg1KTsKQEAgLTY1MSw3ICs2NTYsNyBAQAogCS8vIHRkYSBzZXR1cAogCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMHgyMCwgMCk7IC8vIGRpc2FibGUgRFNQIHdhdGNoZG9nIHRpbWVyCiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0FVVE8sIDB4ODcpOyAgICAvLyAxMDAgcHBtIGNyeXN0YWwsIHNlbGVjdCBIUCBzdHJlYW0KLQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkMxLCA4KTsgICAgICAvLyBkaXNhYmxlIHB1bHNlIGtpbGxlcgorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzEsIDB4ODgpOyAgICAgIC8vIGVuYWJsZSBwdWxzZSBraWxsZXIKIAogCXN3aXRjaCAoc3RhdGUtPmNvbmZpZy0+YWdjX2NvbmZpZykgewogCWNhc2UgVERBMTAwNDZfQUdDX0RFRkFVTFQ6CkBAIC02NzIsNiArNjc3LDEyIEBACiAJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQUdDX1JFTk9STSwgMHgwOCk7IC8vIEdhaW4gUmVub3JtYWxpemUKIAkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9DT05GX1BPTEFSSVRZLCAweDZhKTsgLy8gc2V0IEFHQyBwb2xhcml0aWVzCiAJCWJyZWFrOworCWNhc2UgVERBMTAwNDZfQUdDX1REQTgyN1hfR1BMOgorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19DT05GLCAweDAyKTsgICAvLyBBR0Mgc2V0dXAKKwkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDQ2SF9BR0NfVEhSLCAweDcwKTsgICAgLy8gQUdDIFRocmVzaG9sZAorCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0FHQ19SRU5PUk0sIDB4MDgpOyAvLyBHYWluIFJlbm9ybWFsaXplCisJCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0NkhfQ09ORl9QT0xBUklUWSwgMHg2MCk7IC8vIHNldCBBR0MgcG9sYXJpdGllcworCQlicmVhazsKIAl9CiAJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZBREMyLCAweDM4KTsKIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZfVFJJU1RBVEUxLCAweDYxKTsgLy8gVHVybiBib3RoIEFHQyBvdXRwdXRzIG9uCkBAIC02ODMsNiArNjk0LDcgQEAKIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NWQkVSX0NUUkwsIDB4MWEpOyAvLyAxMF42IFZCRVIgbWVhc3VyZW1lbnQgYml0cwogCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GX1RTMSwgNyk7IC8vIE1QRUcyIGludGVyZmFjZSBjb25maWcKIAl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORl9UUzIsIDB4YzApOyAvLyBNUEVHMiBpbnRlcmZhY2UgY29uZmlnCisJLy8gdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgMHg1MCwgMHg4MCwgMHg4MCk7ICAgICAgICAgLy8gaGFuZGxlIG91dCBvZiBndWFyZCBlY2hvZXMKIAl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCAweDNhLCAweDgwLCBzdGF0ZS0+Y29uZmlnLT5pbnZlcnRfb2NsayA8PCA3KTsKIAogCXN0YXRlLT5pbml0aWFsaXNlZCA9IDE7CkBAIC0xMDI3LDYgKzEwMzksNyBAQAogCQlpZiAoc3RhdHVzID09IC0xKQogCQkJcmV0dXJuIC1FSU87CiAJCWNiZXIgfD0gKHN0YXR1cyA8PCA4KTsKKwkJLy8gVGhlIGFkZHJlc3MgMHgyMCBzaG91bGQgYmUgcmVhZCB0byBjb3BlIHdpdGggYSBUREExMDA0NiBidWcKIAkJdGRhMTAwNHhfcmVhZF9ieXRlKHN0YXRlLCBUREExMDA0WF9DQkVSX1JFU0VUKTsKIAogCQlpZiAoY2JlciAhPSA2NTUzNSkKQEAgLTEwNDcsNyArMTA2MCw4IEBACiAJCXN0YXR1cyA9IHRkYTEwMDR4X3JlYWRfYnl0ZShzdGF0ZSwgVERBMTAwNFhfVkJFUl9NU0IpOwogCQlpZiAoc3RhdHVzID09IC0xKQogCQkJcmV0dXJuIC1FSU87Ci0JCXZiZXIgfD0gKChzdGF0dXMgPDwgMTYpICYgMHgwZik7CisJCXZiZXIgfD0gKHN0YXR1cyAmIDB4MGYpIDw8IDE2OworCQkvLyBUaGUgQ1ZCRVJfTFVUIHNob3VsZCBiZSByZWFkIHRvIGNvcGUgd2l0aCBUREExMDA0NiBoYXJkd2FyZSBidWcKIAkJdGRhMTAwNHhfcmVhZF9ieXRlKHN0YXRlLCBUREExMDA0WF9DVkJFUl9MVVQpOwogCiAJCS8vIGlmIFJTIGhhcyBwYXNzZWQgc29tZSB2YWxpZCBUUyBwYWNrZXRzLCB0aGVuIHdlIG11c3QgYmUKQEAgLTExNjEsNiArMTE3NSw3IEBACiAJaWYgKHRtcCA8IDApCiAJCXJldHVybiAtRUlPOwogCSpiZXIgfD0gKHRtcCA8PCA5KTsKKwkvLyBUaGUgYWRkcmVzcyAweDIwIHNob3VsZCBiZSByZWFkIHRvIGNvcGUgd2l0aCBhIFREQTEwMDQ2IGJ1ZwogCXRkYTEwMDR4X3JlYWRfYnl0ZShzdGF0ZSwgVERBMTAwNFhfQ0JFUl9SRVNFVCk7CiAKIAlkcHJpbnRrKCIlczogYmVyPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywgKmJlcik7CkBAIC0xMTg3LDYgKzEyMDIsOCBAQAogCQkJCXRkYTEwMDR4X2Rpc2FibGVfdHVuZXJfaTJjKHN0YXRlKTsKIAkJCX0KIAkJfQorCQkvKiBzZXQgb3V0cHV0cyB0byB0cmlzdGF0ZSAqLworCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNDZIX0NPTkZfVFJJU1RBVEUxLCAweGZmKTsKIAkJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCAxLCAxKTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguaAppbmRleCA4NjU5YzUyLi5jYzBjNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguaApAQCAtMzUsNyArMzUsOCBAQAogCVREQTEwMDQ2X0FHQ19ERUZBVUxULAkJLyogb3JpZ2luYWwgY29uZmlndXJhdGlvbiAqLwogCVREQTEwMDQ2X0FHQ19JRk9fQVVUT19ORUcsCS8qIElGIEFHQyBvbmx5LCBhdXRvbWF0aWMsIG5lZ3RpdmUgKi8KIAlUREExMDA0Nl9BR0NfSUZPX0FVVE9fUE9TLAkvKiBJRiBBR0Mgb25seSwgYXV0b21hdGljLCBwb3NpdGl2ZSAqLwotCVREQTEwMDQ2X0FHQ19UREE4MjdYLAkgICAgLyogSUYgQUdDIG9ubHksIHNwZWNpYWwgc2V0dXAgZm9yIHRkYTgyN3ggKi8KKwlUREExMDA0Nl9BR0NfVERBODI3WCwJCS8qIElGIEFHQyBvbmx5LCBzcGVjaWFsIHNldHVwIGZvciB0ZGE4Mjd4ICovCisJVERBMTAwNDZfQUdDX1REQTgyN1hfR1BMLAkvKiBzYW1lIGFzIGFib3ZlLCBidXQgR1BJT3MgMCAqLwogfTsKIAogZW51bSB0ZGExMDA0Nl9pZiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q5ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIERyaXZlciBmb3IgWmFybGluayBEVkItVCBaTDEwMzUzIGRlbW9kdWxhdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IENocmlzdG9waGVyIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLj0KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJ6bDEwMzUzX3ByaXYuaCIKKyNpbmNsdWRlICJ6bDEwMzUzLmgiCisKK3N0cnVjdCB6bDEwMzUzX3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIG9wczsKKworCXN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjb25maWc7Cit9OworCitzdGF0aWMgaW50IGRlYnVnX3JlZ3MgPSAwOworCitzdGF0aWMgaW50IHpsMTAzNTNfc2luZ2xlX3dyaXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBidWZbMl0gPSB7IHJlZywgdmFsIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWcuZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKKwkJCSAgICAgICAuYnVmID0gYnVmLCAubGVuID0gMiB9OworCWludCBlcnIgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgJm1zZywgMSk7CisJaWYgKGVyciAhPSAxKSB7CisJCXByaW50aygiemwxMDM1Mzogd3JpdGUgdG8gcmVnICV4IGZhaWxlZCAoZXJyID0gJWQpIVxuIiwgcmVnLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHpsMTAzNTNfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4ICppYnVmLCBpbnQgaWxlbikKK3sKKwlpbnQgZXJyLCBpOworCWZvciAoaSA9IDA7IGkgPCBpbGVuIC0gMTsgaSsrKQorCQlpZiAoKGVyciA9IHpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCBpYnVmWzBdICsgaSwgaWJ1ZltpICsgMV0pKSkKKwkJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlLCB1OCByZWcpCit7CisJaW50IHJldDsKKwl1OCBiMFsxXSA9IHsgcmVnIH07CisJdTggYjFbMV0gPSB7IDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCisJCQkJICAgIC5mbGFncyA9IDAsCisJCQkJICAgIC5idWYgPSBiMCwgLmxlbiA9IDEgfSwKKwkJCQkgIHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsCisJCQkJICAgIC5mbGFncyA9IEkyQ19NX1JELAorCQkJCSAgICAuYnVmID0gYjEsIC5sZW4gPSAxIH0gfTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCXByaW50aygiJXM6IHJlYWRyZWcgZXJyb3IgKHJlZz0lZCwgcmV0PT0laSlcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJlZywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gYjFbMF07Cit9CisKK3N0YXRpYyB2b2lkIHpsMTAzNTNfZHVtcF9yZWdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB6bDEwMzUzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWNoYXIgYnVmWzUyXSwgYnVmMls0XTsKKwlpbnQgcmV0OworCXU4IHJlZzsKKworCS8qIER1bXAgYWxsIHJlZ2lzdGVycy4gKi8KKwlmb3IgKHJlZyA9IDA7IDsgcmVnKyspIHsKKwkJaWYgKHJlZyAlIDE2ID09IDApIHsKKwkJCWlmIChyZWcpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBidWYpOworCQkJc3ByaW50ZihidWYsICIlMDJ4OiAiLCByZWcpOworCQl9CisJCXJldCA9IHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgcmVnKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJc3ByaW50ZihidWYyLCAiJTAyeCAiLCAodTgpcmV0KTsKKwkJZWxzZQorCQkJc3RyY3B5KGJ1ZjIsICItLSAiKTsKKwkJc3RyY2F0KGJ1ZiwgYnVmMik7CisJCWlmIChyZWcgPT0gMHhmZikKKwkJCWJyZWFrOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgemwxMDM1M19zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdGF0aWMgdTggemwxMDM1M19zb2Z0ZG93bltdID0geyAweDUwLCAweDBDLCAweDQ0IH07CisKKwl6bDEwMzUzX3dyaXRlKGZlLCB6bDEwMzUzX3NvZnRkb3duLCBzaXplb2YoemwxMDM1M19zb2Z0ZG93bikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAzNTNfc2V0X3BhcmFtZXRlcnMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXN0cnVjdCB6bDEwMzUzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHBsbGJ1Zls2XSA9IHsgMHg2NyB9OworCisJLyogVGhlc2Ugc2V0dGluZ3Mgc2V0ICJhdXRvLWV2ZXJ5dGhpbmciIGFuZCBzdGFydCB0aGUgRlNNLiAqLworCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDU1LCAweDgwKTsKKwl1ZGVsYXkoMjAwKTsKKwl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHhFQSwgMHgwMSk7CisJdWRlbGF5KDIwMCk7CisJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4RUEsIDB4MDApOworCisJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4NTYsIDB4MjgpOworCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDg5LCAweDIwKTsKKwl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg1RSwgMHgwMCk7CisJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4NjUsIDB4NUEpOworCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDY2LCAweEU5KTsKKwl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg2MiwgMHgwQSk7CisKKwlzdGF0ZS0+Y29uZmlnLnBsbF9zZXQoZmUsIHBhcmFtLCBwbGxidWYgKyAxKTsKKwl6bDEwMzUzX3dyaXRlKGZlLCBwbGxidWYsIHNpemVvZihwbGxidWYpKTsKKworCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDcwLCAweDAxKTsKKwl1ZGVsYXkoMjUwKTsKKwl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHhFNCwgMHgwMCk7CisJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4RTUsIDB4MkEpOworCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweEU5LCAweDAyKTsKKwl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHhFNywgMHg0MCk7CisJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4RTgsIDB4MTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDM1M19yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgczYsIHM3LCBzODsKKworCWlmICgoczYgPSB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIFNUQVRVU182KSkgPCAwKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwlpZiAoKHM3ID0gemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCBTVEFUVVNfNykpIDwgMCkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJaWYgKChzOCA9IHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgU1RBVFVTXzgpKSA8IDApCisJCXJldHVybiAtRVJFTU9URUlPOworCisJKnN0YXR1cyA9IDA7CisJaWYgKHM2ICYgKDEgPDwgMikpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJaWYgKHM2ICYgKDEgPDwgMSkpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7CisJaWYgKHM2ICYgKDEgPDwgNSkpCisJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJaWYgKHM3ICYgKDEgPDwgNCkpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CisJaWYgKHM4ICYgKDEgPDwgNikpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKworCWlmICgoKnN0YXR1cyAmIChGRV9IQVNfQ0FSUklFUiB8IEZFX0hBU19WSVRFUkJJIHwgRkVfSEFTX1NZTkMpKSAhPQorCSAgICAoRkVfSEFTX0NBUlJJRVIgfCBGRV9IQVNfVklURVJCSSB8IEZFX0hBU19TWU5DKSkKKwkJKnN0YXR1cyAmPSB+RkVfSEFTX0xPQ0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMzUzX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBfc25yOworCisJaWYgKGRlYnVnX3JlZ3MpCisJCXpsMTAzNTNfZHVtcF9yZWdzKGZlKTsKKworCV9zbnIgPSB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIFNOUik7CisJKnNuciA9IChfc25yIDw8IDgpIHwgX3NucjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAzNTNfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MKKwkJCQkJICpmZV90dW5lX3NldHRpbmdzKQoreworCWZlX3R1bmVfc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDEwMDA7CisJZmVfdHVuZV9zZXR0aW5ncy0+c3RlcF9zaXplID0gMDsKKwlmZV90dW5lX3NldHRpbmdzLT5tYXhfZHJpZnQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDM1M19pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB6bDEwMzUzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHpsMTAzNTNfcmVzZXRfYXR0YWNoWzZdID0geyAweDUwLCAweDAzLCAweDY0LCAweDQ2LCAweDE1LCAweDBGIH07CisJaW50IHJjID0gMDsKKworCWlmIChkZWJ1Z19yZWdzKQorCQl6bDEwMzUzX2R1bXBfcmVncyhmZSk7CisKKwkvKiBEbyBhICJoYXJkIiByZXNldCBpZiBub3QgYWxyZWFkeSBkb25lICovCisJaWYgKHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgMHg1MCkgIT0gMHgwMykgeworCQlyYyA9IHpsMTAzNTNfd3JpdGUoZmUsIHpsMTAzNTNfcmVzZXRfYXR0YWNoLAorCQkJCSAgIHNpemVvZih6bDEwMzUzX3Jlc2V0X2F0dGFjaCkpOworCQlpZiAoZGVidWdfcmVncykKKwkJCXpsMTAzNTNfZHVtcF9yZWdzKGZlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgemwxMDM1M19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB6bDEwMzUzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgemwxMDM1M19vcHM7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnpsMTAzNTNfYXR0YWNoKGNvbnN0IHN0cnVjdCB6bDEwMzUzX2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3RhdGUgPSBOVUxMOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6bDEwMzUzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KKwlzdGF0ZS0+aTJjID0gaTJjOworCW1lbWNweSgmc3RhdGUtPmNvbmZpZywgY29uZmlnLCBzaXplb2Yoc3RydWN0IHpsMTAzNTNfY29uZmlnKSk7CisJbWVtY3B5KCZzdGF0ZS0+b3BzLCAmemwxMDM1M19vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCisJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCisJaWYgKHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgQ0hJUF9JRCkgIT0gSURfWkwxMDM1MykKKwkJZ290byBlcnJvcjsKKworCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwlzdGF0ZS0+ZnJvbnRlbmQub3BzID0gJnN0YXRlLT5vcHM7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworZXJyb3I6CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgemwxMDM1M19vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUJCQk9ICJaYXJsaW5rIFpMMTAzNTMgRFZCLVQiLAorCQkudHlwZQkJCT0gRkVfT0ZETSwKKwkJLmZyZXF1ZW5jeV9taW4JCT0gMTc0MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heAkJPSA4NjIwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUJPSAxNjY2NjcsCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlCT0gMCwKKwkJLmNhcHMgPSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwKKwkJCUZFX0NBTl9GRUNfM180IHwgRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8CisJCQlGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fQVVUTyB8CisJCQlGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8IEZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKKwkJCUZFX0NBTl9ISUVSQVJDSFlfQVVUTyB8IEZFX0NBTl9SRUNPVkVSIHwKKwkJCUZFX0NBTl9NVVRFX1RTCisJfSwKKworCS5yZWxlYXNlID0gemwxMDM1M19yZWxlYXNlLAorCisJLmluaXQgPSB6bDEwMzUzX2luaXQsCisJLnNsZWVwID0gemwxMDM1M19zbGVlcCwKKworCS5zZXRfZnJvbnRlbmQgPSB6bDEwMzUzX3NldF9wYXJhbWV0ZXJzLAorCS5nZXRfdHVuZV9zZXR0aW5ncyA9IHpsMTAzNTNfZ2V0X3R1bmVfc2V0dGluZ3MsCisKKwkucmVhZF9zdGF0dXMgPSB6bDEwMzUzX3JlYWRfc3RhdHVzLAorCS5yZWFkX3NuciA9IHpsMTAzNTNfcmVhZF9zbnIsCit9OworCittb2R1bGVfcGFyYW0oZGVidWdfcmVncywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfcmVncywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIHJlZ2lzdGVyIGR1bXBzIChkZWZhdWx0Om9mZikuIik7CisKK01PRFVMRV9ERVNDUklQVElPTigiWmFybGluayBaTDEwMzUzIERWQi1UIGRlbW9kdWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXMgUGFzY29lIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK0VYUE9SVF9TWU1CT0woemwxMDM1M19hdHRhY2gpOworRVhQT1JUX1NZTUJPTCh6bDEwMzUzX3dyaXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzRhZTcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogIERyaXZlciBmb3IgWmFybGluayBEVkItVCBaTDEwMzUzIGRlbW9kdWxhdG9yCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RvcGhlciBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLj0KKyAqLworCisjaWZuZGVmIFpMMTAzNTNfSAorI2RlZmluZSBaTDEwMzUzX0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCitzdHJ1Y3QgemwxMDM1M19jb25maWcKK3sKKwkvKiBkZW1vZHVsYXRvcidzIEkyQyBhZGRyZXNzICovCisJdTggZGVtb2RfYWRkcmVzczsKKworCS8qIGZ1bmN0aW9uIHdoaWNoIGNvbmZpZ3VyZXMgdGhlIFBMTCBidWZmZXIgKGZvciBzZWNvbmRhcnkgSTJDCisJICogY29ubmVjdGVkIHR1bmVyKSBvciB0dW5lcyB0aGUgUExMIChmb3IgZGlyZWN0IGNvbm5lY3RlZCB0dW5lcikgKi8KKwlpbnQgKCpwbGxfc2V0KShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zLCB1OCAqcGxsYnVmKTsKK307CisKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB6bDEwMzUzX2F0dGFjaChjb25zdCBzdHJ1Y3QgemwxMDM1M19jb25maWcgKmNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworCitleHRlcm4gaW50IHpsMTAzNTNfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4ICppYnVmLCBpbnQgaWxlbik7CisKKyNlbmRpZiAvKiBaTDEwMzUzX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzIyMjRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTNfcHJpdi5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiAgRHJpdmVyIGZvciBaYXJsaW5rIERWQi1UIFpMMTAzNTMgZGVtb2R1bGF0b3IKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IENocmlzdG9waGVyIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQorICovCisKKyNpZm5kZWYgX1pMMTAzNTNfUFJJVl8KKyNkZWZpbmUgX1pMMTAzNTNfUFJJVl8KKworI2RlZmluZSBJRF9aTDEwMzUzCTB4MTQKKworZW51bSB6bDEwMzUzX3JlZ19hZGRyIHsKKwlJTlRFUlJVUFRfMAk9IDB4MDAsCisJSU5URVJSVVBUXzEJPSAweDAxLAorCUlOVEVSUlVQVF8yCT0gMHgwMiwKKwlJTlRFUlJVUFRfMwk9IDB4MDMsCisJSU5URVJSVVBUXzQJPSAweDA0LAorCUlOVEVSUlVQVF81CT0gMHgwNSwKKwlTVEFUVVNfNgk9IDB4MDYsCisJU1RBVFVTXzcJPSAweDA3LAorCVNUQVRVU184CT0gMHgwOCwKKwlTVEFUVVNfOQk9IDB4MDksCisJU05SCQk9IDB4MTAsCisJQ0hJUF9JRAkJPSAweDdGLAorfTsKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfWkwxMDM1M19QUklWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwppbmRleCBkMzYzNjllLi44NDBlZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwpAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCkBAIC02Nyw2ICs2NiwxMCBAQAogI2luY2x1ZGUgImF2NzExMF9jYS5oIgogI2luY2x1ZGUgImF2NzExMF9pcGFjay5oIgogCisjaW5jbHVkZSAiYnNiZTEuaCIKKyNpbmNsdWRlICJsbmJwMjEuaCIKKyNpbmNsdWRlICJic3J1Ni5oIgorCiAjZGVmaW5lIFRTX1dJRFRIICAzNzYKICNkZWZpbmUgVFNfSEVJR0hUIDUxMgogI2RlZmluZSBUU19CVUZMRU4gKFRTX1dJRFRIKlRTX0hFSUdIVCkKQEAgLTgyLDYgKzg1LDggQEAKIHN0YXRpYyBpbnQgcmdiX29uOwogc3RhdGljIGludCB2b2x1bWUgPSAyNTU7CiBzdGF0aWMgaW50IGJ1ZGdldHBhdGNoOworc3RhdGljIGludCB3c3NfY2ZnXzRfMyA9IDB4NDAwODsKK3N0YXRpYyBpbnQgd3NzX2NmZ18xNl85ID0gMHgwMDA3OwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGF2NzExMF9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBsZXZlbCAoYml0bWFzaywgZGVmYXVsdCAwKSIpOwpAQCAtMTAwLDYgKzEwNSwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyh2b2x1bWUsICJpbml0aWFsIHZvbHVtZTogZGVmYXVsdCAyNTUgKHJhbmdlIDAtMjU1KSIpOwogbW9kdWxlX3BhcmFtKGJ1ZGdldHBhdGNoLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhidWRnZXRwYXRjaCwgInVzZSBidWRnZXQtcGF0Y2ggaGFyZHdhcmUgbW9kaWZpY2F0aW9uOiBkZWZhdWx0IDAgKDAgbm8sIDEgYXV0b2RldGVjdCwgMiBhbHdheXMpIik7Cittb2R1bGVfcGFyYW0od3NzX2NmZ180XzMsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdzc19jZmdfNF8zLCAiV1NTIDQ6MyAtIGRlZmF1bHQgMHg0MDA4IC0gYml0IDE1OiBkaXNhYmxlLCAxNDogYnVyc3QgbW9kZSwgMTMuLjA6IHdzcyBkYXRhIik7Cittb2R1bGVfcGFyYW0od3NzX2NmZ18xNl85LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyh3c3NfY2ZnXzE2XzksICJXU1MgMTY6OSAtIGRlZmF1bHQgMHgwMDA3IC0gYml0IDE1OiBkaXNhYmxlLCAxNDogYnVyc3QgbW9kZSwgMTMuLjA6IHdzcyBkYXRhIik7CiAKIHN0YXRpYyB2b2lkIHJlc3RhcnRfZmVlZHMoc3RydWN0IGF2NzExMCAqYXY3MTEwKTsKIApAQCAtMTI1LDYgKzEzNCwxMyBAQAogCWlmIChyZXQgPCAwKQogCQlwcmludGsoImR2Yi10dHBjaTpjYW5ub3Qgc2V0IGludGVybmFsIHZvbHVtZSB0byBtYXhpbXVtOiVkXG4iLHJldCk7CiAKKwlyZXQgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9FTkNPREVSLCBTZXRXU1NDb25maWcsIDIsIDIsIHdzc19jZmdfNF8zKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKCJkdmItdHRwY2k6IHVuYWJsZSB0byBjb25maWd1cmUgNDozIHdzc1xuIik7CisJcmV0ID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwgU2V0V1NTQ29uZmlnLCAyLCAzLCB3c3NfY2ZnXzE2XzkpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoImR2Yi10dHBjaTogdW5hYmxlIHRvIGNvbmZpZ3VyZSAxNjo5IHdzc1xuIik7CisKIAlyZXQgPSBhdjc3MTBfc2V0X3ZpZGVvX21vZGUoYXY3MTEwLCB2aWRtb2RlKTsKIAlpZiAocmV0IDwgMCkKIAkJcHJpbnRrKCJkdmItdHRwY2k6Y2Fubm90IHNldCB2aWRlbyBtb2RlOiVkXG4iLHJldCk7CkBAIC0yNDIsMTAgKzI1OCwxMCBAQAogCQlpZiAoIWF2NzExMC0+YXJtX3JlYWR5KQogCQkJY29udGludWU7CiAKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXY3MTEwLT5kY29tbG9jaykpCisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmF2NzExMC0+ZGNvbWxvY2spKQogCQkJYnJlYWs7CiAJCW5ld2xvb3BzID0gcmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBTVEFUVVNfTE9PUFMsIDAsIDIpOwotCQl1cCgmYXY3MTEwLT5kY29tbG9jayk7CisJCW11dGV4X3VubG9jaygmYXY3MTEwLT5kY29tbG9jayk7CiAKIAkJaWYgKG5ld2xvb3BzID09IGF2NzExMC0+YXJtX2xvb3BzIHx8IGF2NzExMC0+YXJtX2Vycm9ycyA+IDMpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZHZiLXR0cGNpOiBBUk0gY3Jhc2hlZCBAIGNhcmQgJWRcbiIsCkBAIC0yNTMsMTAgKzI2OSwxMCBAQAogCiAJCQlyZWNvdmVyX2FybShhdjcxMTApOwogCi0JCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhdjcxMTAtPmRjb21sb2NrKSkKKwkJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmF2NzExMC0+ZGNvbWxvY2spKQogCQkJCWJyZWFrOwogCQkJbmV3bG9vcHMgPSByZGViaShhdjcxMTAsIERFQklOT1NXQVAsIFNUQVRVU19MT09QUywgMCwgMikgLSAxOwotCQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZhdjcxMTAtPmRjb21sb2NrKTsKIAkJfQogCQlhdjcxMTAtPmFybV9sb29wcyA9IG5ld2xvb3BzOwogCQlhdjcxMTAtPmFybV9lcnJvcnMgPSAwOwpAQCAtNzQxLDcgKzc1Nyw3IEBACiAJaW50IHJldCA9IDA7CiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhdjcxMTAtPnBpZF9tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYXY3MTEwLT5waWRfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKCEodnBpZCAmIDB4ODAwMCkpCkBAIC03NjAsNyArNzc2LDcgQEAKIAkJcmV0ID0gU2V0UElEcyhhdjcxMTAsIHZwaWQsIGFwaWQsIHR0cGlkLCBzdWJwaWQsIHBjcnBpZCk7CiAJfQogCi0JdXAoJmF2NzExMC0+cGlkX211dGV4KTsKKwltdXRleF91bmxvY2soJmF2NzExMC0+cGlkX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDg4LDExICsxMTA0LDkgQEAKIAlzdHJ1Y3QgYXY3MTEwICphdjcxMTA7CiAKIAkvKiBwb2ludGVyIGNhc3RpbmcgcGFyYW5vaWEuLi4gKi8KLQlpZiAoIWRlbXV4KQotCQlCVUcoKTsKKwlCVUdfT04oIWRlbXV4KTsKIAlkdmJkZW11eCA9IChzdHJ1Y3QgZHZiX2RlbXV4ICopIGRlbXV4LT5wcml2OwotCWlmICghZHZiZGVtdXgpCi0JCUJVRygpOworCUJVR19PTighZHZiZGVtdXgpOwogCWF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopIGR2YmRlbXV4LT5wcml2OwogCiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CkBAIC0xNDM5LDcgKzE0NTMsNyBAQAogCWxlbiA9IG50b2hsKCoodTMyKikgcHRyKTsKIAlwdHIgKz0gNDsKIAlpZiAobGVuID49IDUxMikgewotCQlwcmludGsoImR2Yi10dHBjaTogZHByYW0gZmlsZSBpcyB3YXkgdG8gYmlnLlxuIik7CisJCXByaW50aygiZHZiLXR0cGNpOiBkcHJhbSBmaWxlIGlzIHdheSB0b28gYmlnLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoY3JjICE9IGNyYzMyX2xlKDAsIHB0ciwgbGVuKSkgewpAQCAtMTU3MCwyMDggKzE1ODQsNiBAQAogCS5wbGxfc2V0ID0gYWxwc19ic3J2Ml9wbGxfc2V0LAogfTsKIAotCi1zdGF0aWMgdTggYWxwc19ic3J1Nl9pbml0dGFiW10gPSB7Ci0JMHgwMSwgMHgxNSwKLQkweDAyLCAweDMwLAotCTB4MDMsIDB4MDAsCi0JMHgwNCwgMHg3ZCwgICAvKiBGMjJGUiA9IDB4N2QsIEYyMiA9IGZfVkNPIC8gMTI4IC8gMHg3ZCA9IDIyIGtIeiAqLwotCTB4MDUsIDB4MzUsICAgLyogSTJDVCA9IDAsIFNDTFQgPSAxLCBTREFUID0gMSAqLwotCTB4MDYsIDB4NDAsICAgLyogREFDIG5vdCB1c2VkLCBzZXQgdG8gaGlnaCBpbXBlbmRhbmNlIG1vZGUgKi8KLQkweDA3LCAweDAwLCAgIC8qIERBQyBMU0IgKi8KLQkweDA4LCAweDQwLCAgIC8qIERpU0VxQyBvZmYsIExOQiBwb3dlciBvbiBPUDIvTE9DSyBwaW4gb24gKi8KLQkweDA5LCAweDAwLCAgIC8qIEZJRk8gKi8KLQkweDBjLCAweDUxLCAgIC8qIE9QMSBjdGwgPSBOb3JtYWwsIE9QMSB2YWwgPSAxIChMTkIgUG93ZXIgT04pICovCi0JMHgwZCwgMHg4MiwgICAvKiBEQyBvZmZzZXQgY29tcGVuc2F0aW9uID0gT04sIGJldGFfYWdjMSA9IDIgKi8KLQkweDBlLCAweDIzLCAgIC8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLwotCTB4MTAsIDB4M2YsICAgLy8gQUdDMiAgMHgzZAotCTB4MTEsIDB4ODQsCi0JMHgxMiwgMHhiOSwKLQkweDE1LCAweGM5LCAgIC8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCi0JMHgxNiwgMHgwMCwKLQkweDE3LCAweDAwLAotCTB4MTgsIDB4MDAsCi0JMHgxOSwgMHgwMCwKLQkweDFhLCAweDAwLAotCTB4MWYsIDB4NTAsCi0JMHgyMCwgMHgwMCwKLQkweDIxLCAweDAwLAotCTB4MjIsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDI4LCAweDAwLCAgLy8gb3V0IGltcDogbm9ybWFsICBvdXQgdHlwZTogcGFyYWxsZWwgRkVDIG1vZGU6MAotCTB4MjksIDB4MWUsICAvLyAxLzIgdGhyZXNob2xkCi0JMHgyYSwgMHgxNCwgIC8vIDIvMyB0aHJlc2hvbGQKLQkweDJiLCAweDBmLCAgLy8gMy80IHRocmVzaG9sZAotCTB4MmMsIDB4MDksICAvLyA1LzYgdGhyZXNob2xkCi0JMHgyZCwgMHgwNSwgIC8vIDcvOCB0aHJlc2hvbGQKLQkweDJlLCAweDAxLAotCTB4MzEsIDB4MWYsICAvLyB0ZXN0IGFsbCBGRUNzCi0JMHgzMiwgMHgxOSwgIC8vIHZpdGVyYmkgYW5kIHN5bmNocm8gc2VhcmNoCi0JMHgzMywgMHhmYywgIC8vIHJzIGNvbnRyb2wKLQkweDM0LCAweDkzLCAgLy8gZXJyb3IgY29udHJvbAotCTB4MGYsIDB4NTIsCi0JMHhmZiwgMHhmZgotfTsKLQotc3RhdGljIGludCBhbHBzX2JzcnU2X3NldF9zeW1ib2xfcmF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyIHNyYXRlLCB1MzIgcmF0aW8pCi17Ci0JdTggYWNsayA9IDA7Ci0JdTggYmNsayA9IDA7Ci0KLQlpZiAoc3JhdGUgPCAxNTAwMDAwKSB7IGFjbGsgPSAweGI3OyBiY2xrID0gMHg0NzsgfQotCWVsc2UgaWYgKHNyYXRlIDwgMzAwMDAwMCkgeyBhY2xrID0gMHhiNzsgYmNsayA9IDB4NGI7IH0KLQllbHNlIGlmIChzcmF0ZSA8IDcwMDAwMDApIHsgYWNsayA9IDB4Yjc7IGJjbGsgPSAweDRmOyB9Ci0JZWxzZSBpZiAoc3JhdGUgPCAxNDAwMDAwMCkgeyBhY2xrID0gMHhiNzsgYmNsayA9IDB4NTM7IH0KLQllbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDAwKSB7IGFjbGsgPSAweGI2OyBiY2xrID0gMHg1MzsgfQotCWVsc2UgaWYgKHNyYXRlIDwgNDUwMDAwMDApIHsgYWNsayA9IDB4YjQ7IGJjbGsgPSAweDUxOyB9Ci0KLQlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDEzLCBhY2xrKTsKLQlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDE0LCBiY2xrKTsKLQlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDFmLCAocmF0aW8gPj4gMTYpICYgMHhmZik7Ci0Jc3R2MDI5OV93cml0ZXJlZyhmZSwgMHgyMCwgKHJhdGlvID4+ICA4KSAmIDB4ZmYpOwotCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MjEsIChyYXRpbyAgICAgICkgJiAweGYwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFscHNfYnNydTZfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQotewotCWludCByZXQ7Ci0JdTggZGF0YVs0XTsKLQl1MzIgZGl2OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDYxLCAuZmxhZ3MgPSAwLCAuYnVmID0gZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKSB9OwotCi0JaWYgKChwYXJhbXMtPmZyZXF1ZW5jeSA8IDk1MDAwMCkgfHwgKHBhcmFtcy0+ZnJlcXVlbmN5ID4gMjE1MDAwMCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGl2ID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICsgKDEyNSAtIDEpKSAvIDEyNTsgLy8gcm91bmQgY29ycmVjdGx5Ci0JZGF0YVswXSA9IChkaXYgPj4gOCkgJiAweDdmOwotCWRhdGFbMV0gPSBkaXYgJiAweGZmOwotCWRhdGFbMl0gPSAweDgwIHwgKChkaXYgJiAweDE4MDAwKSA+PiAxMCkgfCA0OwotCWRhdGFbM10gPSAweEM0OwotCi0JaWYgKHBhcmFtcy0+ZnJlcXVlbmN5ID4gMTUzMDAwMCkgZGF0YVszXSA9IDB4YzA7Ci0KLQlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKLQlpZiAocmV0ICE9IDEpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIGFscHNfYnNydTZfY29uZmlnID0gewotCi0JLmRlbW9kX2FkZHJlc3MgPSAweDY4LAotCS5pbml0dGFiID0gYWxwc19ic3J1Nl9pbml0dGFiLAotCS5tY2xrID0gODgwMDAwMDBVTCwKLQkuaW52ZXJ0ID0gMSwKLQkuc2tpcF9yZWluaXQgPSAwLAotCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8xLAotCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKLQkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBhbHBzX2JzcnU2X3NldF9zeW1ib2xfcmF0ZSwKLQkucGxsX3NldCA9IGFscHNfYnNydTZfcGxsX3NldCwKLX07Ci0KLQotc3RhdGljIHU4IGFscHNfYnNiZTFfaW5pdHRhYltdID0gewotCTB4MDEsIDB4MTUsCi0JMHgwMiwgMHgzMCwKLQkweDAzLCAweDAwLAotCTB4MDQsIDB4N2QsICAgLyogRjIyRlIgPSAweDdkLCBGMjIgPSBmX1ZDTyAvIDEyOCAvIDB4N2QgPSAyMiBrSHogKi8KLQkweDA1LCAweDM1LCAgIC8qIEkyQ1QgPSAwLCBTQ0xUID0gMSwgU0RBVCA9IDEgKi8KLQkweDA2LCAweDQwLCAgIC8qIERBQyBub3QgdXNlZCwgc2V0IHRvIGhpZ2ggaW1wZW5kYW5jZSBtb2RlICovCi0JMHgwNywgMHgwMCwgICAvKiBEQUMgTFNCICovCi0JMHgwOCwgMHg0MCwgICAvKiBEaVNFcUMgb2ZmLCBMTkIgcG93ZXIgb24gT1AyL0xPQ0sgcGluIG9uICovCi0JMHgwOSwgMHgwMCwgICAvKiBGSUZPICovCi0JMHgwYywgMHg1MSwgICAvKiBPUDEgY3RsID0gTm9ybWFsLCBPUDEgdmFsID0gMSAoTE5CIFBvd2VyIE9OKSAqLwotCTB4MGQsIDB4ODIsICAgLyogREMgb2Zmc2V0IGNvbXBlbnNhdGlvbiA9IE9OLCBiZXRhX2FnYzEgPSAyICovCi0JMHgwZSwgMHgyMywgICAvKiBhbHBoYV90bWcgPSAyLCBiZXRhX3RtZyA9IDMgKi8KLQkweDEwLCAweDNmLCAgIC8vIEFHQzIgIDB4M2QKLQkweDExLCAweDg0LAotCTB4MTIsIDB4YjksCi0JMHgxNSwgMHhjOSwgICAvLyBsb2NrIGRldGVjdG9yIHRocmVzaG9sZAotCTB4MTYsIDB4MDAsCi0JMHgxNywgMHgwMCwKLQkweDE4LCAweDAwLAotCTB4MTksIDB4MDAsCi0JMHgxYSwgMHgwMCwKLQkweDFmLCAweDUwLAotCTB4MjAsIDB4MDAsCi0JMHgyMSwgMHgwMCwKLQkweDIyLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyOCwgMHgwMCwgIC8vIG91dCBpbXA6IG5vcm1hbCAgb3V0IHR5cGU6IHBhcmFsbGVsIEZFQyBtb2RlOjAKLQkweDI5LCAweDFlLCAgLy8gMS8yIHRocmVzaG9sZAotCTB4MmEsIDB4MTQsICAvLyAyLzMgdGhyZXNob2xkCi0JMHgyYiwgMHgwZiwgIC8vIDMvNCB0aHJlc2hvbGQKLQkweDJjLCAweDA5LCAgLy8gNS82IHRocmVzaG9sZAotCTB4MmQsIDB4MDUsICAvLyA3LzggdGhyZXNob2xkCi0JMHgyZSwgMHgwMSwKLQkweDMxLCAweDFmLCAgLy8gdGVzdCBhbGwgRkVDcwotCTB4MzIsIDB4MTksICAvLyB2aXRlcmJpIGFuZCBzeW5jaHJvIHNlYXJjaAotCTB4MzMsIDB4ZmMsICAvLyBycyBjb250cm9sCi0JMHgzNCwgMHg5MywgIC8vIGVycm9yIGNvbnRyb2wKLQkweDBmLCAweDkyLAotCTB4ZmYsIDB4ZmYKLX07Ci0KLXN0YXRpYyBpbnQgYWxwc19ic2JlMV9wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCi17Ci0JaW50IHJldDsKLQl1OCBkYXRhWzRdOwotCXUzMiBkaXY7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4NjEsIC5mbGFncyA9IDAsIC5idWYgPSBkYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpIH07Ci0KLQlpZiAoKHBhcmFtcy0+ZnJlcXVlbmN5IDwgOTUwMDAwKSB8fCAocGFyYW1zLT5mcmVxdWVuY3kgPiAyMTUwMDAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkaXYgPSAocGFyYW1zLT5mcmVxdWVuY3kgKyAoMTI1IC0gMSkpIC8gMTI1OyAvLyByb3VuZCBjb3JyZWN0bHkKLQlkYXRhWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7Ci0JZGF0YVsxXSA9IGRpdiAmIDB4ZmY7Ci0JZGF0YVsyXSA9IDB4ODAgfCAoKGRpdiAmIDB4MTgwMDApID4+IDEwKSB8IDQ7Ci0JZGF0YVszXSA9IChwYXJhbXMtPmZyZXF1ZW5jeSA+IDE1MzAwMDApID8gMHhFMCA6IDB4RTQ7Ci0KLQlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKLQlyZXR1cm4gKHJldCAhPSAxKSA/IC1FSU8gOiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIGFscHNfYnNiZTFfY29uZmlnID0gewotCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKLQkuaW5pdHRhYiA9IGFscHNfYnNiZTFfaW5pdHRhYiwKLQkubWNsayA9IDg4MDAwMDAwVUwsCi0JLmludmVydCA9IDEsCi0JLnNraXBfcmVpbml0ID0gMCwKLQkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBhbHBzX2JzcnU2X3NldF9zeW1ib2xfcmF0ZSwKLQkucGxsX3NldCA9IGFscHNfYnNiZTFfcGxsX3NldCwKLX07Ci0KLXN0YXRpYyBpbnQgbG5icDIxX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCi17Ci0Jc3RydWN0IGF2NzExMCogYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAqKSBmZS0+ZHZiLT5wcml2OwotCWludCByZXQ7Ci0JdTggZGF0YVsxXTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwgLmJ1ZiA9IGRhdGEsIC5sZW4gPSBzaXplb2YoZGF0YSkgfTsKLQotCXN3aXRjaCh2b2x0YWdlKSB7Ci0JY2FzZSBTRUNfVk9MVEFHRV9PRkY6Ci0JCWRhdGFbMF0gPSAweDAwOwotCQlicmVhazsKLQljYXNlIFNFQ19WT0xUQUdFXzEzOgotCQlkYXRhWzBdID0gMHg0NDsKLQkJYnJlYWs7Ci0JY2FzZSBTRUNfVk9MVEFHRV8xODoKLQkJZGF0YVswXSA9IDB4NGM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX07Ci0KLQlyZXQgPSBpMmNfdHJhbnNmZXIoJmF2NzExMC0+aTJjX2FkYXAsICZtc2csIDEpOwotCXJldHVybiAocmV0ICE9IDEpID8gLUVJTyA6IDA7Ci19Ci0KLQogc3RhdGljIGludCBhbHBzX3RkYmUyX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQogewogCXN0cnVjdCBhdjcxMTAqIGF2NzExMCA9IGZlLT5kdmItPnByaXY7CkBAIC0yMDk2LDcgKzE5MDgsNyBAQAogCWlmIChhdjcxMTAtPnBsYXlpbmcpCiAJCXJldHVybiAwOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXY3MTEwLT5waWRfbXV0ZXgpKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmF2NzExMC0+cGlkX211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChzeW5jZWQpIHsKQEAgLTIxMTgsNyArMTkzMCw3IEBACiAJaWYgKCFyZXQpCiAJCWF2NzExMC0+ZmVfc3luY2VkID0gc3luY2VkOwogCi0JdXAoJmF2NzExMC0+cGlkX211dGV4KTsKKwltdXRleF91bmxvY2soJmF2NzExMC0+cGlkX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzc0LDkgKzIxODYsMTUgQEAKIAkJCS8qIEFMUFMgQlNCRTEgKi8KIAkJCWF2NzExMC0+ZmUgPSBzdHYwMjk5X2F0dGFjaCgmYWxwc19ic2JlMV9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKIAkJCWlmIChhdjcxMTAtPmZlKSB7Ci0JCQkJYXY3MTEwLT5mZS0+b3BzLT5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKLQkJCQlhdjcxMTAtPmZlLT5vcHMtPmRpc2huZXR3b3JrX3NlbmRfbGVnYWN5X2NvbW1hbmQgPSBOVUxMOwotCQkJCWF2NzExMC0+cmVjb3ZlciA9IGR2Yl9zX3JlY292ZXI7CisJCQkJaWYgKGxuYnAyMV9pbml0KGF2NzExMC0+ZmUsICZhdjcxMTAtPmkyY19hZGFwLCAwLCAwKSkgeworCQkJCQlwcmludGsoImR2Yi10dHBjaTogTE5CUDIxIG5vdCBmb3VuZCFcbiIpOworCQkJCQlpZiAoYXY3MTEwLT5mZS0+b3BzLT5yZWxlYXNlKQorCQkJCQkJYXY3MTEwLT5mZS0+b3BzLT5yZWxlYXNlKGF2NzExMC0+ZmUpOworCQkJCQlhdjcxMTAtPmZlID0gTlVMTDsKKwkJCQl9IGVsc2UgeworCQkJCQlhdjcxMTAtPmZlLT5vcHMtPmRpc2huZXR3b3JrX3NlbmRfbGVnYWN5X2NvbW1hbmQgPSBOVUxMOworCQkJCQlhdjcxMTAtPnJlY292ZXIgPSBkdmJfc19yZWNvdmVyOworCQkJCX0KIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC0yNDc3LDcgKzIyOTUsOCBAQAogICogVGhlIHNhbWUgYmVoYXZpb3VyIG9mIG1pc3NpbmcgVlNZTkMgY2FuIGJlIGR1cGxpY2F0ZWQgb24gYnVkZ2V0CiAgKiBjYXJkcywgYnkgc2V0aW5nIEREMV9JTklUIHRyaWdnZXIgbW9kZSA3IGluIDNyZCBuaWJibGUuCiAgKi8KLXN0YXRpYyBpbnQgYXY3MTEwX2F0dGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiwgc3RydWN0IHNhYTcxNDZfcGNpX2V4dGVuc2lvbl9kYXRhICpwY2lfZXh0KQorc3RhdGljIGludCBfX2RldmluaXQgYXY3MTEwX2F0dGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiwKKwkJCQkgICBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKnBjaV9leHQpCiB7CiAJY29uc3QgaW50IGxlbmd0aCA9IFRTX1dJRFRIICogVFNfSEVJR0hUOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wY2k7CkBAIC0yNzEzLDE2ICsyNTMyLDE2IEBACiAJdGFza2xldF9pbml0ICgmYXY3MTEwLT5kZWJpX3Rhc2tsZXQsIGRlYmlpcnEsICh1bnNpZ25lZCBsb25nKSBhdjcxMTApOwogCXRhc2tsZXRfaW5pdCAoJmF2NzExMC0+Z3Bpb190YXNrbGV0LCBncGlvaXJxLCAodW5zaWduZWQgbG9uZykgYXY3MTEwKTsKIAotCXNlbWFfaW5pdCgmYXY3MTEwLT5waWRfbXV0ZXgsIDEpOworCW11dGV4X2luaXQoJmF2NzExMC0+cGlkX211dGV4KTsKIAogCS8qIGxvY2tzIGZvciBkYXRhIHRyYW5zZmVycyBmcm9tL3RvIEFWNzExMCAqLwogCXNwaW5fbG9ja19pbml0KCZhdjcxMTAtPmRlYmlsb2NrKTsKLQlzZW1hX2luaXQoJmF2NzExMC0+ZGNvbWxvY2ssIDEpOworCW11dGV4X2luaXQoJmF2NzExMC0+ZGNvbWxvY2spOwogCWF2NzExMC0+ZGViaXR5cGUgPSAtMTsKIAogCS8qIGRlZmF1bHQgT1NEIHdpbmRvdyAqLwogCWF2NzExMC0+b3Nkd2luID0gMTsKLQlzZW1hX2luaXQoJmF2NzExMC0+b3NkX3NlbWEsIDEpOworCW11dGV4X2luaXQoJmF2NzExMC0+b3NkX211dGV4KTsKIAogCS8qIEFSTSAid2F0Y2hkb2ciICovCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYXY3MTEwLT5hcm1fd2FpdCk7CkBAIC0yODI3LDcgKzI2NDYsNyBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgaW50IGF2NzExMF9kZXRhY2goc3RydWN0IHNhYTcxNDZfZGV2KiBzYWEpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdjcxMTBfZGV0YWNoKHN0cnVjdCBzYWE3MTQ2X2Rldiogc2FhKQogewogCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IHNhYS0+ZXh0X3ByaXY7CiAJZHByaW50ayg0LCAiJXBcbiIsIGF2NzExMCk7CkBAIC0yOTc0LDcgKzI3OTMsNyBAQAogCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCiAJLnBjaV90YmwJPSAmcGNpX3RibFswXSwKIAkuYXR0YWNoCQk9IGF2NzExMF9hdHRhY2gsCi0JLmRldGFjaAkJPSBhdjcxMTBfZGV0YWNoLAorCS5kZXRhY2gJCT0gX19kZXZleGl0X3AoYXY3MTEwX2RldGFjaCksCiAKIAkuaXJxX21hc2sJPSBNQVNLXzE5IHwgTUFTS18wMyB8IE1BU0tfMTAsCiAJLmlycV9mdW5jCT0gYXY3MTEwX2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmgKaW5kZXggZmFmZDI1Zi4uM2UyZTEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kdmIvY2EuaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvb3NkLmg+CiAjaW5jbHVkZSA8bGludXgvZHZiL25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJkdmJkZXYuaCIKICNpbmNsdWRlICJkZW11eC5oIgpAQCAtMTI3LDcgKzEyOCw3IEBACiAJLyogREVCSSBhbmQgcG9sbGVkIGNvbW1hbmQgaW50ZXJmYWNlICovCiAKIAlzcGlubG9ja190CQlkZWJpbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlCWRjb21sb2NrOworCXN0cnVjdCBtdXRleAkJZGNvbWxvY2s7CiAJdm9sYXRpbGUgaW50CQlkZWJpdHlwZTsKIAl2b2xhdGlsZSBpbnQJCWRlYmlsZW47CiAKQEAgLTE0Niw3ICsxNDcsNyBAQAogCiAJaW50CQkJb3Nkd2luOyAgICAgIC8qIGN1cnJlbnRseSBhY3RpdmUgd2luZG93ICovCiAJdTE2CQkJb3NkYnBwWzhdOwotCXN0cnVjdCBzZW1hcGhvcmUJb3NkX3NlbWE7CisJc3RydWN0IG11dGV4CQlvc2RfbXV0ZXg7CiAKIAkvKiBDQSAqLwogCkBAIC0xNzIsNyArMTczLDcgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgICB2cGVfdGFza2xldDsKIAogCWludAkJCWZlX3N5bmNlZDsKLQlzdHJ1Y3Qgc2VtYXBob3JlCXBpZF9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXgJCXBpZF9tdXRleDsKIAogCWludAkJCXZpZGVvX2JsYW5rOwogCXN0cnVjdCB2aWRlb19zdGF0dXMJdmlkZW9zdGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9ody5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKaW5kZXggYjJlNjNlOS4uNzU3MzZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMKQEAgLTI0NSw2ICsyNDUsOSBAQAogCiAJLyogdGVzdCBERUJJICovCiAJaXdkZWJpKGF2NzExMCwgREVCSVNXQVAsIERQUkFNX0JBU0UsIDB4NzY1NDMyMTAsIDQpOworCS8qIEZJWE1FOiBXaHkgZG9lcyBOZXh1cyBDQSByZXF1aXJlIDJ4IGl3ZGViaSBmb3IgZmlyc3QgaW5pdD8gKi8KKwlpd2RlYmkoYXY3MTEwLCBERUJJU1dBUCwgRFBSQU1fQkFTRSwgMHg3NjU0MzIxMCwgNCk7CisKIAlpZiAoKHJldD1pcmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBEUFJBTV9CQVNFLCAwLCA0KSkgIT0gMHgxMDMyNTQ3NikgewogCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogZGViaSB0ZXN0IGluIGF2NzExMF9ib290YXJtKCkgZmFpbGVkOiAiCiAJCSAgICAgICAiJTA4eCAhPSAlMDh4IChjaGVjayB5b3VyIEJJT1MgJ1BsdWcmUGxheSBPUycgc2V0dGluZ3MpXG4iLApAQCAtMzI0LDEwICszMjcsMTAgQEAKIAlzdGFydCA9IGppZmZpZXM7CiAJZm9yICg7OykgewogCQllcnIgPSB0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgQVJNX1dBSVRfRlJFRSk7Ci0JCWlmIChkb3duX2ludGVycnVwdGlibGUoJmF2NzExMC0+ZGNvbWxvY2spKQorCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhdjcxMTAtPmRjb21sb2NrKSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCXN0YXQgPSByZGViaShhdjcxMTAsIERFQklOT1NXQVAsIE1TR1NUQVRFLCAwLCAyKTsKLQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCQltdXRleF91bmxvY2soJmF2NzExMC0+ZGNvbWxvY2spOwogCQlpZiAoKHN0YXQgJiBmbGFncykgPT0gMCkKIAkJCWJyZWFrOwogCQlpZiAoZXJyKSB7CkBAIC00ODQsMTEgKzQ4NywxMSBAQAogCQlkcHJpbnRrKDEsICJhcm0gbm90IHJlYWR5LlxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXY3MTEwLT5kY29tbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYXY3MTEwLT5kY29tbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlyZXQgPSBfX2F2NzExMF9zZW5kX2Z3X2NtZChhdjcxMTAsIGJ1ZiwgbGVuZ3RoKTsKLQl1cCgmYXY3MTEwLT5kY29tbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhdjcxMTAtPmRjb21sb2NrKTsKIAlpZiAocmV0ICYmIHJldCE9LUVSRVNUQVJUU1lTKQogCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogJXMoKTogYXY3MTEwX3NlbmRfZndfY21kIGVycm9yICVkXG4iLAogCQkgICAgICAgX19GVU5DVElPTl9fLCByZXQpOwpAQCAtNTYwLDExICs1NjMsMTEgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmF2NzExMC0+ZGNvbWxvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmF2NzExMC0+ZGNvbWxvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKChlcnIgPSBfX2F2NzExMF9zZW5kX2Z3X2NtZChhdjcxMTAsIHJlcXVlc3RfYnVmLCByZXF1ZXN0X2J1Zl9sZW4pKSA8IDApIHsKLQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCQltdXRleF91bmxvY2soJmF2NzExMC0+ZGNvbWxvY2spOwogCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogYXY3MTEwX2Z3X3JlcXVlc3QgZXJyb3IgJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtNTc2LDcgKzU3OSw3IEBACiAJCQlicmVhazsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dCB3YWl0aW5nIGZvciBDT01NQU5EIHRvIGNvbXBsZXRlXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZhdjcxMTAtPmRjb21sb2NrKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAjaWZkZWYgX05PSEFORFNIQUtFCkBAIC01OTIsNyArNTk1LDcgQEAKIAkJCWJyZWFrOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIEhBTkRTSEFLRV9SRUdcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQl1cCgmYXY3MTEwLT5kY29tbG9jayk7CisJCQltdXRleF91bmxvY2soJmF2NzExMC0+ZGNvbWxvY2spOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJbXNsZWVwKDEpOwpAQCAtNjAzLDEyICs2MDYsMTIgQEAKIAlzdGF0ID0gcmRlYmkoYXY3MTEwLCBERUJJTk9TV0FQLCBNU0dTVEFURSwgMCwgMik7CiAJaWYgKHN0YXQgJiBHUE1RT3ZlcikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBHUE1RT3ZlclxuIiwgX19GVU5DVElPTl9fKTsKLQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCQltdXRleF91bmxvY2soJmF2NzExMC0+ZGNvbWxvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCWVsc2UgaWYgKHN0YXQgJiBPU0RRT3ZlcikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBPU0RRT3ZlclxuIiwgX19GVU5DVElPTl9fKTsKLQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCQltdXRleF91bmxvY2soJmF2NzExMC0+ZGNvbWxvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogI2VuZGlmCkBAIC02MTYsNyArNjE5LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcmVwbHlfYnVmX2xlbjsgaSsrKQogCQlyZXBseV9idWZbaV0gPSByZGViaShhdjcxMTAsIERFQklOT1NXQVAsIENPTV9CVUZGICsgMiAqIGksIDAsIDIpOwogCi0JdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCW11dGV4X3VubG9jaygmYXY3MTEwLT5kY29tbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczMiw3ICs3MzUsNyBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJaW50IGVycjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmF2NzExMC0+ZGNvbWxvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmF2NzExMC0+ZGNvbWxvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCXN0YXJ0ID0gamlmZmllczsKIAl3aGlsZSAoMSkgewpAQCAtNzQyLDEyICs3NDUsMTIgQEAKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6ICVzKCk6IHRpbWVvdXQgd2FpdGluZyBmb3IgQlVGRjFfQkFTRSA9PSAwXG4iLAogCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQl1cCgmYXY3MTEwLT5kY29tbG9jayk7CisJCQltdXRleF91bmxvY2soJmF2NzExMC0+ZGNvbWxvY2spOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAkJbXNsZWVwKDEpOwogCX0KLQl1cCgmYXY3MTEwLT5kY29tbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhdjcxMTAtPmRjb21sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzU4LDcgKzc2MSw3IEBACiAJaW50IGxlbmd0aCA9IHN0cmxlbihidWYpICsgMTsKIAl1MTYgY2J1Zls1XSA9IHsgKENPTVRZUEVfT1NEIDw8IDgpICsgRFRleHQsIDMsIHdpbiwgeCwgeSB9OwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYXY3MTEwLT5kY29tbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYXY3MTEwLT5kY29tbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlzdGFydCA9IGppZmZpZXM7CkBAIC03NjksNyArNzcyLDcgQEAKIAkJaWYgKHJldCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJkdmItdHRwY2k6ICVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIEJVRkYxX0JBU0UgPT0gMFxuIiwKIAkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwotCQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZhdjcxMTAtPmRjb21sb2NrKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJCW1zbGVlcCgxKTsKQEAgLTc4Myw3ICs3ODYsNyBAQAogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgSEFORFNIQUtFX1JFR1xuIiwKIAkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwotCQkJdXAoJmF2NzExMC0+ZGNvbWxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZhdjcxMTAtPmRjb21sb2NrKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJCW1zbGVlcCgxKTsKQEAgLTc5NSw3ICs3OTgsNyBAQAogCWlmIChsZW5ndGggJiAxKQogCQl3ZGViaShhdjcxMTAsIERFQklOT1NXQVAsIEJVRkYxX0JBU0UgKyBpICogMiwgMCwgMik7CiAJcmV0ID0gX19hdjcxMTBfc2VuZF9md19jbWQoYXY3MTEwLCBjYnVmLCA1KTsKLQl1cCgmYXY3MTEwLT5kY29tbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhdjcxMTAtPmRjb21sb2NrKTsKIAlpZiAocmV0ICYmIHJldCE9LUVSRVNUQVJUU1lTKQogCQlwcmludGsoS0VSTl9FUlIgImR2Yi10dHBjaTogV3JpdGVUZXh0IGVycm9yICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC0xMDU5LDcgKzEwNjIsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhdjcxMTAtPm9zZF9zZW1hKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhdjcxMTAtPm9zZF9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlzd2l0Y2ggKGRjLT5jbWQpIHsKQEAgLTExOTUsNyArMTE5OCw3IEBACiAJCWJyZWFrOwogCX0KIAotCXVwKCZhdjcxMTAtPm9zZF9zZW1hKTsKKwltdXRleF91bmxvY2soJmF2NzExMC0+b3NkX211dGV4KTsKIAlpZiAocmV0PT0tRVJFU1RBUlRTWVMpCiAJCWRwcmludGsoMSwgImF2NzExMF9vc2RfY21kKCVkKSByZXR1cm5zIHdpdGggLUVSRVNUQVJUU1lTXG4iLGRjLT5jbWQpOwogCWVsc2UgaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9pci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMKaW5kZXggNjE3ZTRmNi4uZDU0YmJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogfQogCiAKLWludCBfX2luaXQgYXY3MTEwX2lyX2luaXQoc3RydWN0IGF2NzExMCAqYXY3MTEwKQoraW50IF9fZGV2aW5pdCBhdjcxMTBfaXJfaW5pdChzdHJ1Y3QgYXY3MTEwICphdjcxMTApCiB7CiAJc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIApAQCAtMjQ4LDcgKzI0OCw3IEBACiB9CiAKIAotdm9pZCBfX2V4aXQgYXY3MTEwX2lyX2V4aXQoc3RydWN0IGF2NzExMCAqYXY3MTEwKQordm9pZCBfX2RldmV4aXQgYXY3MTEwX2lyX2V4aXQoc3RydWN0IGF2NzExMCAqYXY3MTEwKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKaW5kZXggOTRjZjM4Yy4uNjAzYTIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwpAQCAtMzY5LDYgKzM2OSwxMSBAQAogCQkJZm1fbWF0cml4ID0gMHgzMDAxOyAvLyBzdGVyZW8KIAkJCXNyYyA9IDB4MDAyMDsKIAkJCWJyZWFrOworCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKKwkJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzJcbiIpOworCQkJZm1fbWF0cml4ID0gMHgzMDAwOyAvLyBiaWxpbmd1YWwKKwkJCXNyYyA9IDB4MDAyMDsKKwkJCWJyZWFrOwogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKIAkJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFcbiIpOwogCQkJZm1fbWF0cml4ID0gMHgzMDAwOyAvLyBtb25vCkBAIC01NzksMTQgKzU4NCwxMSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoKGQuaWQgIT0gMCAmJiBkLmlkICE9IFY0TDJfU0xJQ0VEX1dTU182MjUpIHx8IGQuZmllbGQgIT0gMCB8fCBkLmxpbmUgIT0gMjMpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChkLmlkKSB7CisJaWYgKGQuaWQpCiAJCWF2NzExMC0+d3NzRGF0YSA9ICgoZC5kYXRhWzFdIDw8IDgpICYgMHgzZjAwKSB8IGQuZGF0YVswXTsKLQkJcmMgPSBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9FTkNPREVSLCBTZXRXU1NDb25maWcsCi0JCQkJICAgMiwgMSwgYXY3MTEwLT53c3NEYXRhKTsKLQl9IGVsc2UgewotCQlhdjcxMTAtPndzc0RhdGEgPSAwOwotCQlyYyA9IGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0VOQ09ERVIsIFNldFdTU0NvbmZpZywgMSwgMCk7Ci0JfQorCWVsc2UKKwkJYXY3MTEwLT53c3NEYXRhID0gMHg4MDAwOworCXJjID0gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwgU2V0V1NTQ29uZmlnLCAyLCAxLCBhdjcxMTAtPndzc0RhdGEpOwogCXJldHVybiAocmMgPCAwKSA/IHJjIDogY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggMTQ2NWMwNC4uOWRkNDc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTEwMDAsNiArMTAwMCw3IEBACiAKICNkZWZpbmUgU1VCSURfRFZCU19UVl9TVEFSCTB4MDAxNAogI2RlZmluZSBTVUJJRF9EVkJTX1RWX1NUQVJfQ0kJMHgwMDE2CisjZGVmaW5lIFNVQklEX0RWQlNfRUFTWVdBVENICTB4MDAxZQogI2RlZmluZSBTVUJJRF9EVkJDX0tOQzEJCTB4MDAyMAogI2RlZmluZSBTVUJJRF9EVkJDX0tOQzFfUExVUwkweDAwMjEKICNkZWZpbmUgU1VCSURfRFZCQ19DSU5FUkdZMTIwMAkweDExNTYKQEAgLTEwMzgsNiArMTAzOSw3IEBACiAJY2FzZSBTVUJJRF9EVkJTX1RWX1NUQVI6CiAJY2FzZSBTVUJJRF9EVkJTX1RWX1NUQVJfQ0k6CiAJY2FzZSBTVUJJRF9EVkJTX0NZTkVSR1kxMjAwTjoKKwljYXNlIFNVQklEX0RWQlNfRUFTWVdBVENIOgogCQlmZSA9IHN0djAyOTlfYXR0YWNoKCZwaGlsaXBzX3NkMTg3OF9jb25maWcsCiAJCQkJJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwKTsKIAkJYnJlYWs7CkBAIC0xMjg1LDYgKzEyODcsNyBAQAogTUFLRV9CVURHRVRfSU5GTyhrbmMxYywgIktOQzEgRFZCLUMiLCBCVURHRVRfS05DMUMpOwogTUFLRV9CVURHRVRfSU5GTyhrbmMxdCwgIktOQzEgRFZCLVQiLCBCVURHRVRfS05DMVQpOwogTUFLRV9CVURHRVRfSU5GTyhrbmN4cywgIktOQyBUViBTVEFSIERWQi1TIiwgQlVER0VUX1RWU1RBUik7CitNQUtFX0JVREdFVF9JTkZPKHNhdGV3cGxzLCAiU2F0ZWxjbyBFYXN5V2F0Y2ggRFZCLVMgbGlnaHQiLCBCVURHRVRfVFZTVEFSKTsKIE1BS0VfQlVER0VUX0lORk8oa25jMXNwLCAiS05DMSBEVkItUyBQbHVzIiwgQlVER0VUX0tOQzFTUCk7CiBNQUtFX0JVREdFVF9JTkZPKGtuYzFjcCwgIktOQzEgRFZCLUMgUGx1cyIsIEJVREdFVF9LTkMxQ1ApOwogTUFLRV9CVURHRVRfSU5GTyhrbmMxdHAsICJLTkMxIERWQi1UIFBsdXMiLCBCVURHRVRfS05DMVRQKTsKQEAgLTEzMDAsNiArMTMwMyw3IEBACiAJTUFLRV9FWFRFTlNJT05fUENJKGtuYzFzcCwgMHgxMTMxLCAweDAwMTEpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmN4cywgMHgxODk0LCAweDAwMTQpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmN4cywgMHgxODk0LCAweDAwMTYpLAorCU1BS0VfRVhURU5TSU9OX1BDSShzYXRld3BscywgMHgxODk0LCAweDAwMWUpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmMxYywgMHgxODk0LCAweDAwMjApLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmMxY3AsIDB4MTg5NCwgMHgwMDIxKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXQsIDB4MTg5NCwgMHgwMDMwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggYjliM2NkOS4uNWY5MTAzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTQyLDYgKzQyLDkgQEAKICNpbmNsdWRlICJzdHYwMjk5LmgiCiAjaW5jbHVkZSAic3R2MDI5Ny5oIgogI2luY2x1ZGUgInRkYTEwMDR4LmgiCisjaW5jbHVkZSAibG5icDIxLmgiCisjaW5jbHVkZSAiYnNiZTEuaCIKKyNpbmNsdWRlICJic3J1Ni5oIgogCiAjZGVmaW5lIERFQklBRERSX0lSCQkweDEyMzQKICNkZWZpbmUgREVCSUFERFJfQ0lDT05UUk9MCTB4MDAwMApAQCAtNDc0LDEyMyArNDc3LDYgQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmYnVkZ2V0X2NpLT5jaWludGZfaXJxX3Rhc2tsZXQpOwogfQogCi0KLXN0YXRpYyB1OCBhbHBzX2JzcnU2X2luaXR0YWJbXSA9IHsKLQkweDAxLCAweDE1LAotCTB4MDIsIDB4MDAsCi0JMHgwMywgMHgwMCwKLQkweDA0LCAweDdkLAkJLyogRjIyRlIgPSAweDdkLCBGMjIgPSBmX1ZDTyAvIDEyOCAvIDB4N2QgPSAyMiBrSHogKi8KLQkweDA1LCAweDM1LAkJLyogSTJDVCA9IDAsIFNDTFQgPSAxLCBTREFUID0gMSAqLwotCTB4MDYsIDB4NDAsCQkvKiBEQUMgbm90IHVzZWQsIHNldCB0byBoaWdoIGltcGVuZGFuY2UgbW9kZSAqLwotCTB4MDcsIDB4MDAsCQkvKiBEQUMgTFNCICovCi0JMHgwOCwgMHg0MCwJCS8qIERpU0VxQyBvZmYsIExOQiBwb3dlciBvbiBPUDIvTE9DSyBwaW4gb24gKi8KLQkweDA5LCAweDAwLAkJLyogRklGTyAqLwotCTB4MGMsIDB4NTEsCQkvKiBPUDEgY3RsID0gTm9ybWFsLCBPUDEgdmFsID0gMSAoTE5CIFBvd2VyIE9OKSAqLwotCTB4MGQsIDB4ODIsCQkvKiBEQyBvZmZzZXQgY29tcGVuc2F0aW9uID0gT04sIGJldGFfYWdjMSA9IDIgKi8KLQkweDBlLCAweDIzLAkJLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCi0JMHgxMCwgMHgzZiwJCS8vIEFHQzIgIDB4M2QKLQkweDExLCAweDg0LAotCTB4MTIsIDB4YjksCi0JMHgxNSwgMHhjOSwJCS8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCi0JMHgxNiwgMHgwMCwKLQkweDE3LCAweDAwLAotCTB4MTgsIDB4MDAsCi0JMHgxOSwgMHgwMCwKLQkweDFhLCAweDAwLAotCTB4MWYsIDB4NTAsCi0JMHgyMCwgMHgwMCwKLQkweDIxLCAweDAwLAotCTB4MjIsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDI4LCAweDAwLAkJLy8gb3V0IGltcDogbm9ybWFsICBvdXQgdHlwZTogcGFyYWxsZWwgRkVDIG1vZGU6MAotCTB4MjksIDB4MWUsCQkvLyAxLzIgdGhyZXNob2xkCi0JMHgyYSwgMHgxNCwJCS8vIDIvMyB0aHJlc2hvbGQKLQkweDJiLCAweDBmLAkJLy8gMy80IHRocmVzaG9sZAotCTB4MmMsIDB4MDksCQkvLyA1LzYgdGhyZXNob2xkCi0JMHgyZCwgMHgwNSwJCS8vIDcvOCB0aHJlc2hvbGQKLQkweDJlLCAweDAxLAotCTB4MzEsIDB4MWYsCQkvLyB0ZXN0IGFsbCBGRUNzCi0JMHgzMiwgMHgxOSwJCS8vIHZpdGVyYmkgYW5kIHN5bmNocm8gc2VhcmNoCi0JMHgzMywgMHhmYywJCS8vIHJzIGNvbnRyb2wKLQkweDM0LCAweDkzLAkJLy8gZXJyb3IgY29udHJvbAotCTB4MGYsIDB4NTIsCi0JMHhmZiwgMHhmZgotfTsKLQotc3RhdGljIGludCBhbHBzX2JzcnU2X3NldF9zeW1ib2xfcmF0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIHNyYXRlLCB1MzIgcmF0aW8pCi17Ci0JdTggYWNsayA9IDA7Ci0JdTggYmNsayA9IDA7Ci0KLQlpZiAoc3JhdGUgPCAxNTAwMDAwKSB7Ci0JCWFjbGsgPSAweGI3OwotCQliY2xrID0gMHg0NzsKLQl9IGVsc2UgaWYgKHNyYXRlIDwgMzAwMDAwMCkgewotCQlhY2xrID0gMHhiNzsKLQkJYmNsayA9IDB4NGI7Ci0JfSBlbHNlIGlmIChzcmF0ZSA8IDcwMDAwMDApIHsKLQkJYWNsayA9IDB4Yjc7Ci0JCWJjbGsgPSAweDRmOwotCX0gZWxzZSBpZiAoc3JhdGUgPCAxNDAwMDAwMCkgewotCQlhY2xrID0gMHhiNzsKLQkJYmNsayA9IDB4NTM7Ci0JfSBlbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDAwKSB7Ci0JCWFjbGsgPSAweGI2OwotCQliY2xrID0gMHg1MzsKLQl9IGVsc2UgaWYgKHNyYXRlIDwgNDUwMDAwMDApIHsKLQkJYWNsayA9IDB4YjQ7Ci0JCWJjbGsgPSAweDUxOwotCX0KLQotCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MTMsIGFjbGspOwotCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MTQsIGJjbGspOwotCXN0djAyOTlfd3JpdGVyZWcoZmUsIDB4MWYsIChyYXRpbyA+PiAxNikgJiAweGZmKTsKLQlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDIwLCAocmF0aW8gPj4gOCkgJiAweGZmKTsKLQlzdHYwMjk5X3dyaXRlcmVnKGZlLCAweDIxLCAocmF0aW8pICYgMHhmMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhbHBzX2JzcnU2X3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKLXsKLQl1OCBidWZbNF07Ci0JdTMyIGRpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSAweDYxLC5mbGFncyA9IDAsLmJ1ZiA9IGJ1ZiwubGVuID0gc2l6ZW9mKGJ1ZikgfTsKLQotCWlmICgocGFyYW1zLT5mcmVxdWVuY3kgPCA5NTAwMDApIHx8IChwYXJhbXMtPmZyZXF1ZW5jeSA+IDIxNTAwMDApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRpdiA9IChwYXJhbXMtPmZyZXF1ZW5jeSArICgxMjUgLSAxKSkgLyAxMjU7CS8vIHJvdW5kIGNvcnJlY3RseQotCWJ1ZlswXSA9IChkaXYgPj4gOCkgJiAweDdmOwotCWJ1ZlsxXSA9IGRpdiAmIDB4ZmY7Ci0JYnVmWzJdID0gMHg4MCB8ICgoZGl2ICYgMHgxODAwMCkgPj4gMTApIHwgNDsKLQlidWZbM10gPSAweEM0OwotCi0JaWYgKHBhcmFtcy0+ZnJlcXVlbmN5ID4gMTUzMDAwMCkKLQkJYnVmWzNdID0gMHhjMDsKLQotCWlmIChpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKSAhPSAxKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBhbHBzX2JzcnU2X2NvbmZpZyA9IHsKLQotCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKLQkuaW5pdHRhYiA9IGFscHNfYnNydTZfaW5pdHRhYiwKLQkubWNsayA9IDg4MDAwMDAwVUwsCi0JLmludmVydCA9IDEsCi0JLnNraXBfcmVpbml0ID0gMCwKLQkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMSwKLQkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCi0JLm1pbl9kZWxheV9tcyA9IDEwMCwKLQkuc2V0X3N5bWJvbF9yYXRlID0gYWxwc19ic3J1Nl9zZXRfc3ltYm9sX3JhdGUsCi0JLnBsbF9zZXQgPSBhbHBzX2JzcnU2X3BsbF9zZXQsCi19OwotCi0KLQotCiBzdGF0aWMgdTggcGhpbGlwc19zdTEyNzhfdHRfaW5pdHRhYltdID0gewogCTB4MDEsIDB4MGYsCiAJMHgwMiwgMHgzMCwKQEAgLTEwNjksNiArOTU1LDIwIEBACiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKKworCWNhc2UgMHgxMDE3OgkJLy8gVFQgUy0xNTAwIFBDSQorCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBzdHYwMjk5X2F0dGFjaCgmYWxwc19ic2JlMV9jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCk7CisJCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQpIHsKKwkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLT5kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kID0gTlVMTDsKKwkJCWlmIChsbmJwMjFfaW5pdChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgTE5CUDIxX0xMQywgMCkpIHsKKwkJCQlwcmludGsoIiVzOiBObyBMTkJQMjEgZm91bmQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQtPm9wcy0+cmVsZWFzZSkKKwkJCQkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kLT5vcHMtPnJlbGVhc2UoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKKwkJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBOVUxMOworCQkJfQorCQl9CisKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9PSBOVUxMKSB7CkBAIC0xMTQ2LDYgKzEwNDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb247CiAKK01BS0VfQlVER0VUX0lORk8odHRiczIsICJUVC1CdWRnZXQvUy0xNTAwIFBDSSIsIEJVREdFVF9UVCk7CiBNQUtFX0JVREdFVF9JTkZPKHR0YmNpLCAiVFQtQnVkZ2V0L1dpblRWLU5PVkEtQ0kgUENJIiwgQlVER0VUX1RUX0hXX0RJU0VRQyk7CiBNQUtFX0JVREdFVF9JTkZPKHR0YnQyLCAiVFQtQnVkZ2V0L1dpblRWLU5PVkEtVAkgUENJIiwgQlVER0VUX1RUKTsKIE1BS0VfQlVER0VUX0lORk8odHRidGNpLCAiVFQtQnVkZ2V0LVQtQ0kgUENJIiwgQlVER0VUX1RUKTsKQEAgLTExNTcsNiArMTA1OCw3IEBACiAJTUFLRV9FWFRFTlNJT05fUENJKHR0YmNjaSwgMHgxM2MyLCAweDEwMTApLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJ0MiwgMHgxM2MyLCAweDEwMTEpLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJ0Y2ksIDB4MTNjMiwgMHgxMDEyKSwKKwlNQUtFX0VYVEVOU0lPTl9QQ0kodHRiczIsIDB4MTNjMiwgMHgxMDE3KSwKIAl7CiAJIC52ZW5kb3IgPSAwLAogCSB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtcGF0Y2guYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCmluZGV4IGZjNDE2Y2YuLjlmYzkxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAidmVzMXg5My5oIgogI2luY2x1ZGUgInRkYTgwODMuaCIKIAorI2luY2x1ZGUgImJzcnU2LmgiCisKICNkZWZpbmUgYnVkZ2V0X3BhdGNoIGJ1ZGdldAogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb247CkBAIC0yOTAsMTAzICsyOTIsNiBAQAogCS5wbGxfc2V0ID0gYWxwc19ic3J2Ml9wbGxfc2V0LAogfTsKIAotc3RhdGljIHU4IGFscHNfYnNydTZfaW5pdHRhYltdID0gewotCTB4MDEsIDB4MTUsCi0JMHgwMiwgMHgwMCwKLQkweDAzLCAweDAwLAotCTB4MDQsIDB4N2QsICAgLyogRjIyRlIgPSAweDdkLCBGMjIgPSBmX1ZDTyAvIDEyOCAvIDB4N2QgPSAyMiBrSHogKi8KLQkweDA1LCAweDM1LCAgIC8qIEkyQ1QgPSAwLCBTQ0xUID0gMSwgU0RBVCA9IDEgKi8KLQkweDA2LCAweDQwLCAgIC8qIERBQyBub3QgdXNlZCwgc2V0IHRvIGhpZ2ggaW1wZW5kYW5jZSBtb2RlICovCi0JMHgwNywgMHgwMCwgICAvKiBEQUMgTFNCICovCi0JMHgwOCwgMHg0MCwgICAvKiBEaVNFcUMgb2ZmLCBMTkIgcG93ZXIgb24gT1AyL0xPQ0sgcGluIG9uICovCi0JMHgwOSwgMHgwMCwgICAvKiBGSUZPICovCi0JMHgwYywgMHg1MSwgICAvKiBPUDEgY3RsID0gTm9ybWFsLCBPUDEgdmFsID0gMSAoTE5CIFBvd2VyIE9OKSAqLwotCTB4MGQsIDB4ODIsICAgLyogREMgb2Zmc2V0IGNvbXBlbnNhdGlvbiA9IE9OLCBiZXRhX2FnYzEgPSAyICovCi0JMHgwZSwgMHgyMywgICAvKiBhbHBoYV90bWcgPSAyLCBiZXRhX3RtZyA9IDMgKi8KLQkweDEwLCAweDNmLCAgIC8vIEFHQzIgIDB4M2QKLQkweDExLCAweDg0LAotCTB4MTIsIDB4YjksCi0JMHgxNSwgMHhjOSwgICAvLyBsb2NrIGRldGVjdG9yIHRocmVzaG9sZAotCTB4MTYsIDB4MDAsCi0JMHgxNywgMHgwMCwKLQkweDE4LCAweDAwLAotCTB4MTksIDB4MDAsCi0JMHgxYSwgMHgwMCwKLQkweDFmLCAweDUwLAotCTB4MjAsIDB4MDAsCi0JMHgyMSwgMHgwMCwKLQkweDIyLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyOCwgMHgwMCwgIC8vIG91dCBpbXA6IG5vcm1hbCAgb3V0IHR5cGU6IHBhcmFsbGVsIEZFQyBtb2RlOjAKLQkweDI5LCAweDFlLCAgLy8gMS8yIHRocmVzaG9sZAotCTB4MmEsIDB4MTQsICAvLyAyLzMgdGhyZXNob2xkCi0JMHgyYiwgMHgwZiwgIC8vIDMvNCB0aHJlc2hvbGQKLQkweDJjLCAweDA5LCAgLy8gNS82IHRocmVzaG9sZAotCTB4MmQsIDB4MDUsICAvLyA3LzggdGhyZXNob2xkCi0JMHgyZSwgMHgwMSwKLQkweDMxLCAweDFmLCAgLy8gdGVzdCBhbGwgRkVDcwotCTB4MzIsIDB4MTksICAvLyB2aXRlcmJpIGFuZCBzeW5jaHJvIHNlYXJjaAotCTB4MzMsIDB4ZmMsICAvLyBycyBjb250cm9sCi0JMHgzNCwgMHg5MywgIC8vIGVycm9yIGNvbnRyb2wKLQkweDBmLCAweDUyLAotCTB4ZmYsIDB4ZmYKLX07Ci0KLXN0YXRpYyBpbnQgYWxwc19ic3J1Nl9zZXRfc3ltYm9sX3JhdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiBzcmF0ZSwgdTMyIHJhdGlvKQotewotCXU4IGFjbGsgPSAwOwotCXU4IGJjbGsgPSAwOwotCi0JaWYgKHNyYXRlIDwgMTUwMDAwMCkgeyBhY2xrID0gMHhiNzsgYmNsayA9IDB4NDc7IH0KLQllbHNlIGlmIChzcmF0ZSA8IDMwMDAwMDApIHsgYWNsayA9IDB4Yjc7IGJjbGsgPSAweDRiOyB9Ci0JZWxzZSBpZiAoc3JhdGUgPCA3MDAwMDAwKSB7IGFjbGsgPSAweGI3OyBiY2xrID0gMHg0ZjsgfQotCWVsc2UgaWYgKHNyYXRlIDwgMTQwMDAwMDApIHsgYWNsayA9IDB4Yjc7IGJjbGsgPSAweDUzOyB9Ci0JZWxzZSBpZiAoc3JhdGUgPCAzMDAwMDAwMCkgeyBhY2xrID0gMHhiNjsgYmNsayA9IDB4NTM7IH0KLQllbHNlIGlmIChzcmF0ZSA8IDQ1MDAwMDAwKSB7IGFjbGsgPSAweGI0OyBiY2xrID0gMHg1MTsgfQotCi0Jc3R2MDI5OV93cml0ZXJlZyAoZmUsIDB4MTMsIGFjbGspOwotCXN0djAyOTlfd3JpdGVyZWcgKGZlLCAweDE0LCBiY2xrKTsKLQlzdHYwMjk5X3dyaXRlcmVnIChmZSwgMHgxZiwgKHJhdGlvID4+IDE2KSAmIDB4ZmYpOwotCXN0djAyOTlfd3JpdGVyZWcgKGZlLCAweDIwLCAocmF0aW8gPj4gIDgpICYgMHhmZik7Ci0Jc3R2MDI5OV93cml0ZXJlZyAoZmUsIDB4MjEsIChyYXRpbyAgICAgICkgJiAweGYwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFscHNfYnNydTZfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQotewotCXU4IGRhdGFbNF07Ci0JdTMyIGRpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHg2MSwgLmZsYWdzID0gMCwgLmJ1ZiA9IGRhdGEsIC5sZW4gPSBzaXplb2YoZGF0YSkgfTsKLQotCWlmICgocGFyYW1zLT5mcmVxdWVuY3kgPCA5NTAwMDApIHx8IChwYXJhbXMtPmZyZXF1ZW5jeSA+IDIxNTAwMDApKSByZXR1cm4gLUVJTlZBTDsKLQotCWRpdiA9IChwYXJhbXMtPmZyZXF1ZW5jeSArICgxMjUgLSAxKSkgLyAxMjU7IC8vIHJvdW5kIGNvcnJlY3RseQotCWRhdGFbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKLQlkYXRhWzFdID0gZGl2ICYgMHhmZjsKLQlkYXRhWzJdID0gMHg4MCB8ICgoZGl2ICYgMHgxODAwMCkgPj4gMTApIHwgNDsKLQlkYXRhWzNdID0gMHhDNDsKLQotCWlmIChwYXJhbXMtPmZyZXF1ZW5jeSA+IDE1MzAwMDApIGRhdGFbM10gPSAweGMwOwotCi0JaWYgKGkyY190cmFuc2ZlcihpMmMsICZtc2csIDEpICE9IDEpIHJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN0djAyOTlfY29uZmlnIGFscHNfYnNydTZfY29uZmlnID0gewotCi0JLmRlbW9kX2FkZHJlc3MgPSAweDY4LAotCS5pbml0dGFiID0gYWxwc19ic3J1Nl9pbml0dGFiLAotCS5tY2xrID0gODgwMDAwMDBVTCwKLQkuaW52ZXJ0ID0gMSwKLQkuc2tpcF9yZWluaXQgPSAwLAotCS5sb2NrX291dHB1dCA9IFNUVjAyMjlfTE9DS09VVFBVVF8xLAotCS52b2x0MTNfb3AwX29wMSA9IFNUVjAyOTlfVk9MVDEzX09QMSwKLQkubWluX2RlbGF5X21zID0gMTAwLAotCS5zZXRfc3ltYm9sX3JhdGUgPSBhbHBzX2JzcnU2X3NldF9zeW1ib2xfcmF0ZSwKLQkucGxsX3NldCA9IGFscHNfYnNydTZfcGxsX3NldCwKLX07Ci0KIHN0YXRpYyBpbnQgZ3J1bmRpZ18yOTUwNF80NTFfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCiB7CiAJc3RydWN0IGJ1ZGdldF9wYXRjaCogYnVkZ2V0ID0gKHN0cnVjdCBidWRnZXRfcGF0Y2gqKSBmZS0+ZHZiLT5wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwppbmRleCAyMzhjNzdiLi5jMjNjMDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYwpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgImw2NDc4MS5oIgogI2luY2x1ZGUgInRkYTgwODMuaCIKICNpbmNsdWRlICJzNWgxNDIwLmgiCisjaW5jbHVkZSAibG5icDIxLmgiCisjaW5jbHVkZSAiYnNydTYuaCIKIAogc3RhdGljIHZvaWQgU2V0MjJLIChzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQsIGludCBzdGF0ZSkKIHsKQEAgLTE4NCw2NCArMTg2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsbmJwMjFfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKLXsKLQlzdHJ1Y3QgYnVkZ2V0KiBidWRnZXQgPSAoc3RydWN0IGJ1ZGdldCopIGZlLT5kdmItPnByaXY7Ci0JdTggYnVmOwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9ICZidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwotCi0JaWYgKGkyY190cmFuc2ZlciAoJmJ1ZGdldC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHJldHVybiAtRUlPOwotCi0Jc3dpdGNoKHZvbHRhZ2UpIHsKLQljYXNlIFNFQ19WT0xUQUdFXzEzOgotCQlidWYgPSAoYnVmICYgMHhmNykgfCAweDA0OwotCQlicmVhazsKLQotCWNhc2UgU0VDX1ZPTFRBR0VfMTg6Ci0JCWJ1ZiA9IChidWYgJiAweGY3KSB8IDB4MGM7Ci0JCWJyZWFrOwotCi0JY2FzZSBTRUNfVk9MVEFHRV9PRkY6Ci0JCWJ1ZiA9IGJ1ZiAmIDB4ZjA7Ci0JCWJyZWFrOwotCX0KLQotCW1zZy5mbGFncyA9IDA7Ci0JaWYgKGkyY190cmFuc2ZlciAoJmJ1ZGdldC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHJldHVybiAtRUlPOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgYnVkZ2V0KiBidWRnZXQgPSAoc3RydWN0IGJ1ZGdldCopIGZlLT5kdmItPnByaXY7Ci0JdTggYnVmOwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9ICZidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwotCi0JaWYgKGkyY190cmFuc2ZlciAoJmJ1ZGdldC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHJldHVybiAtRUlPOwotCi0JaWYgKGFyZykgewotCQlidWYgPSBidWYgfCAweDEwOwotCX0gZWxzZSB7Ci0JCWJ1ZiA9IGJ1ZiAmIDB4ZWY7Ci0JfQotCi0JbXNnLmZsYWdzID0gMDsKLQlpZiAoaTJjX3RyYW5zZmVyICgmYnVkZ2V0LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsbmJwMjFfaW5pdChzdHJ1Y3QgYnVkZ2V0KiBidWRnZXQpCi17Ci0JdTggYnVmID0gMHgwMDsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwgLmJ1ZiA9ICZidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwotCi0JaWYgKGkyY190cmFuc2ZlciAoJmJ1ZGdldC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGFscHNfYnNydjJfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCiB7CiAJc3RydWN0IGJ1ZGdldCogYnVkZ2V0ID0gKHN0cnVjdCBidWRnZXQqKSBmZS0+ZHZiLT5wcml2OwpAQCAtMjc3LDE3NiArMjIxLDYgQEAKIAkucGxsX3NldCA9IGFscHNfYnNydjJfcGxsX3NldCwKIH07CiAKLXN0YXRpYyB1OCBhbHBzX2JzcnU2X2luaXR0YWJbXSA9IHsKLQkweDAxLCAweDE1LAotCTB4MDIsIDB4MDAsCi0JMHgwMywgMHgwMCwKLQkweDA0LCAweDdkLCAgIC8qIEYyMkZSID0gMHg3ZCwgRjIyID0gZl9WQ08gLyAxMjggLyAweDdkID0gMjIga0h6ICovCi0JMHgwNSwgMHgzNSwgICAvKiBJMkNUID0gMCwgU0NMVCA9IDEsIFNEQVQgPSAxICovCi0JMHgwNiwgMHg0MCwgICAvKiBEQUMgbm90IHVzZWQsIHNldCB0byBoaWdoIGltcGVuZGFuY2UgbW9kZSAqLwotCTB4MDcsIDB4MDAsICAgLyogREFDIExTQiAqLwotCTB4MDgsIDB4NDAsICAgLyogRGlTRXFDIG9mZiwgTE5CIHBvd2VyIG9uIE9QMi9MT0NLIHBpbiBvbiAqLwotCTB4MDksIDB4MDAsICAgLyogRklGTyAqLwotCTB4MGMsIDB4NTEsICAgLyogT1AxIGN0bCA9IE5vcm1hbCwgT1AxIHZhbCA9IDEgKExOQiBQb3dlciBPTikgKi8KLQkweDBkLCAweDgyLCAgIC8qIERDIG9mZnNldCBjb21wZW5zYXRpb24gPSBPTiwgYmV0YV9hZ2MxID0gMiAqLwotCTB4MGUsIDB4MjMsICAgLyogYWxwaGFfdG1nID0gMiwgYmV0YV90bWcgPSAzICovCi0JMHgxMCwgMHgzZiwgICAvLyBBR0MyICAweDNkCi0JMHgxMSwgMHg4NCwKLQkweDEyLCAweGI5LAotCTB4MTUsIDB4YzksICAgLy8gbG9jayBkZXRlY3RvciB0aHJlc2hvbGQKLQkweDE2LCAweDAwLAotCTB4MTcsIDB4MDAsCi0JMHgxOCwgMHgwMCwKLQkweDE5LCAweDAwLAotCTB4MWEsIDB4MDAsCi0JMHgxZiwgMHg1MCwKLQkweDIwLCAweDAwLAotCTB4MjEsIDB4MDAsCi0JMHgyMiwgMHgwMCwKLQkweDIzLCAweDAwLAotCTB4MjgsIDB4MDAsICAvLyBvdXQgaW1wOiBub3JtYWwgIG91dCB0eXBlOiBwYXJhbGxlbCBGRUMgbW9kZTowCi0JMHgyOSwgMHgxZSwgIC8vIDEvMiB0aHJlc2hvbGQKLQkweDJhLCAweDE0LCAgLy8gMi8zIHRocmVzaG9sZAotCTB4MmIsIDB4MGYsICAvLyAzLzQgdGhyZXNob2xkCi0JMHgyYywgMHgwOSwgIC8vIDUvNiB0aHJlc2hvbGQKLQkweDJkLCAweDA1LCAgLy8gNy84IHRocmVzaG9sZAotCTB4MmUsIDB4MDEsCi0JMHgzMSwgMHgxZiwgIC8vIHRlc3QgYWxsIEZFQ3MKLQkweDMyLCAweDE5LCAgLy8gdml0ZXJiaSBhbmQgc3luY2hybyBzZWFyY2gKLQkweDMzLCAweGZjLCAgLy8gcnMgY29udHJvbAotCTB4MzQsIDB4OTMsICAvLyBlcnJvciBjb250cm9sCi0JMHgwZiwgMHg1MiwKLQkweGZmLCAweGZmCi19OwotCi1zdGF0aWMgaW50IGFscHNfYnNydTZfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIgc3JhdGUsIHUzMiByYXRpbykKLXsKLQl1OCBhY2xrID0gMDsKLQl1OCBiY2xrID0gMDsKLQotCWlmIChzcmF0ZSA8IDE1MDAwMDApIHsgYWNsayA9IDB4Yjc7IGJjbGsgPSAweDQ3OyB9Ci0JZWxzZSBpZiAoc3JhdGUgPCAzMDAwMDAwKSB7IGFjbGsgPSAweGI3OyBiY2xrID0gMHg0YjsgfQotCWVsc2UgaWYgKHNyYXRlIDwgNzAwMDAwMCkgeyBhY2xrID0gMHhiNzsgYmNsayA9IDB4NGY7IH0KLQllbHNlIGlmIChzcmF0ZSA8IDE0MDAwMDAwKSB7IGFjbGsgPSAweGI3OyBiY2xrID0gMHg1MzsgfQotCWVsc2UgaWYgKHNyYXRlIDwgMzAwMDAwMDApIHsgYWNsayA9IDB4YjY7IGJjbGsgPSAweDUzOyB9Ci0JZWxzZSBpZiAoc3JhdGUgPCA0NTAwMDAwMCkgeyBhY2xrID0gMHhiNDsgYmNsayA9IDB4NTE7IH0KLQotCXN0djAyOTlfd3JpdGVyZWcgKGZlLCAweDEzLCBhY2xrKTsKLQlzdHYwMjk5X3dyaXRlcmVnIChmZSwgMHgxNCwgYmNsayk7Ci0Jc3R2MDI5OV93cml0ZXJlZyAoZmUsIDB4MWYsIChyYXRpbyA+PiAxNikgJiAweGZmKTsKLQlzdHYwMjk5X3dyaXRlcmVnIChmZSwgMHgyMCwgKHJhdGlvID4+ICA4KSAmIDB4ZmYpOwotCXN0djAyOTlfd3JpdGVyZWcgKGZlLCAweDIxLCAocmF0aW8gICAgICApICYgMHhmMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhbHBzX2JzcnU2X3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKLXsKLQl1OCBkYXRhWzRdOwotCXUzMiBkaXY7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IDB4NjEsIC5mbGFncyA9IDAsIC5idWYgPSBkYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpIH07Ci0KLQlpZiAoKHBhcmFtcy0+ZnJlcXVlbmN5IDwgOTUwMDAwKSB8fCAocGFyYW1zLT5mcmVxdWVuY3kgPiAyMTUwMDAwKSkgcmV0dXJuIC1FSU5WQUw7Ci0KLQlkaXYgPSAocGFyYW1zLT5mcmVxdWVuY3kgKyAoMTI1IC0gMSkpIC8gMTI1OyAvLyByb3VuZCBjb3JyZWN0bHkKLQlkYXRhWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7Ci0JZGF0YVsxXSA9IGRpdiAmIDB4ZmY7Ci0JZGF0YVsyXSA9IDB4ODAgfCAoKGRpdiAmIDB4MTgwMDApID4+IDEwKSB8IDQ7Ci0JZGF0YVszXSA9IDB4QzQ7Ci0KLQlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPiAxNTMwMDAwKSBkYXRhWzNdID0gMHhjMDsKLQotCWlmIChpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKSAhPSAxKSByZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBhbHBzX2JzcnU2X2NvbmZpZyA9IHsKLQotCS5kZW1vZF9hZGRyZXNzID0gMHg2OCwKLQkuaW5pdHRhYiA9IGFscHNfYnNydTZfaW5pdHRhYiwKLQkubWNsayA9IDg4MDAwMDAwVUwsCi0JLmludmVydCA9IDEsCi0JLnNraXBfcmVpbml0ID0gMCwKLQkubG9ja19vdXRwdXQgPSBTVFYwMjI5X0xPQ0tPVVRQVVRfMSwKLQkudm9sdDEzX29wMF9vcDEgPSBTVFYwMjk5X1ZPTFQxM19PUDEsCi0JLm1pbl9kZWxheV9tcyA9IDEwMCwKLQkuc2V0X3N5bWJvbF9yYXRlID0gYWxwc19ic3J1Nl9zZXRfc3ltYm9sX3JhdGUsCi0JLnBsbF9zZXQgPSBhbHBzX2JzcnU2X3BsbF9zZXQsCi19OwotCi1zdGF0aWMgdTggYWxwc19ic2JlMV9pbml0dGFiW10gPSB7Ci0JMHgwMSwgMHgxNSwKLQkweDAyLCAweDMwLAotCTB4MDMsIDB4MDAsCi0JMHgwNCwgMHg3ZCwgIC8qIEYyMkZSID0gMHg3ZCwgRjIyID0gZl9WQ08gLyAxMjggLyAweDdkID0gMjIga0h6ICovCi0JMHgwNSwgMHgzNSwgIC8qIEkyQ1QgPSAwLCBTQ0xUID0gMSwgU0RBVCA9IDEgKi8KLQkweDA2LCAweDQwLCAgLyogREFDIG5vdCB1c2VkLCBzZXQgdG8gaGlnaCBpbXBlbmRhbmNlIG1vZGUgKi8KLQkweDA3LCAweDAwLCAgLyogREFDIExTQiAqLwotCTB4MDgsIDB4NDAsICAvKiBEaVNFcUMgb2ZmLCBMTkIgcG93ZXIgb24gT1AyL0xPQ0sgcGluIG9uICovCi0JMHgwOSwgMHgwMCwgIC8qIEZJRk8gKi8KLQkweDBjLCAweDUxLCAgLyogT1AxIGN0bCA9IE5vcm1hbCwgT1AxIHZhbCA9IDEgKExOQiBQb3dlciBPTikgKi8KLQkweDBkLCAweDgyLCAgLyogREMgb2Zmc2V0IGNvbXBlbnNhdGlvbiA9IE9OLCBiZXRhX2FnYzEgPSAyICovCi0JMHgwZSwgMHgyMywgIC8qIGFscGhhX3RtZyA9IDIsIGJldGFfdG1nID0gMyAqLwotCTB4MTAsIDB4M2YsICAvLyBBR0MyIDB4M2QKLQkweDExLCAweDg0LAotCTB4MTIsIDB4YjksCi0JMHgxNSwgMHhjOSwgIC8vIGxvY2sgZGV0ZWN0b3IgdGhyZXNob2xkCi0JMHgxNiwgMHgwMCwKLQkweDE3LCAweDAwLAotCTB4MTgsIDB4MDAsCi0JMHgxOSwgMHgwMCwKLQkweDFhLCAweDAwLAotCTB4MWYsIDB4NTAsCi0JMHgyMCwgMHgwMCwKLQkweDIxLCAweDAwLAotCTB4MjIsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDI4LCAweDAwLCAvLyBvdXQgaW1wOiBub3JtYWwgb3V0IHR5cGU6IHBhcmFsbGVsIEZFQyBtb2RlOjAKLQkweDI5LCAweDFlLCAvLyAxLzIgdGhyZXNob2xkCi0JMHgyYSwgMHgxNCwgLy8gMi8zIHRocmVzaG9sZAotCTB4MmIsIDB4MGYsIC8vIDMvNCB0aHJlc2hvbGQKLQkweDJjLCAweDA5LCAvLyA1LzYgdGhyZXNob2xkCi0JMHgyZCwgMHgwNSwgLy8gNy84IHRocmVzaG9sZAotCTB4MmUsIDB4MDEsCi0JMHgzMSwgMHgxZiwgLy8gdGVzdCBhbGwgRkVDcwotCTB4MzIsIDB4MTksIC8vIHZpdGVyYmkgYW5kIHN5bmNocm8gc2VhcmNoCi0JMHgzMywgMHhmYywgLy8gcnMgY29udHJvbAotCTB4MzQsIDB4OTMsIC8vIGVycm9yIGNvbnRyb2wKLQkweDBmLCAweDkyLCAvLyAweDgwID0gaW52ZXJzZSBBR0MKLQkweGZmLCAweGZmCi19OwotCi1zdGF0aWMgaW50IGFscHNfYnNiZTFfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zKQotewotCWludCByZXQ7Ci0JdTggZGF0YVs0XTsKLQl1MzIgZGl2OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDYxLCAuZmxhZ3MgPSAwLCAuYnVmID0gZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKSB9OwotCi0JaWYgKChwYXJhbXMtPmZyZXF1ZW5jeSA8IDk1MDAwMCkgfHwgKHBhcmFtcy0+ZnJlcXVlbmN5ID4gMjE1MDAwMCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGl2ID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICsgKDEyNSAtIDEpKSAvIDEyNTsgLy8gcm91bmQgY29ycmVjdGx5Ci0JZGF0YVswXSA9IChkaXYgPj4gOCkgJiAweDdmOwotCWRhdGFbMV0gPSBkaXYgJiAweGZmOwotCWRhdGFbMl0gPSAweDgwIHwgKChkaXYgJiAweDE4MDAwKSA+PiAxMCkgfCA0OwotCWRhdGFbM10gPSAocGFyYW1zLT5mcmVxdWVuY3kgPiAxNTMwMDAwKSA/IDB4RTAgOiAweEU0OwotCi0JcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJm1zZywgMSk7Ci0JcmV0dXJuIChyZXQgIT0gMSkgPyAtRUlPIDogMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzdHYwMjk5X2NvbmZpZyBhbHBzX2JzYmUxX2NvbmZpZyA9IHsKLQkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCi0JLmluaXR0YWIgPSBhbHBzX2JzYmUxX2luaXR0YWIsCi0JLm1jbGsgPSA4ODAwMDAwMFVMLAotCS5pbnZlcnQgPSAxLAotCS5za2lwX3JlaW5pdCA9IDAsCi0JLm1pbl9kZWxheV9tcyA9IDEwMCwKLQkuc2V0X3N5bWJvbF9yYXRlID0gYWxwc19ic3J1Nl9zZXRfc3ltYm9sX3JhdGUsCi0JLnBsbF9zZXQgPSBhbHBzX2JzYmUxX3BsbF9zZXQsCi19OwotCiBzdGF0aWMgaW50IGFscHNfdGRiZTJfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzKiBwYXJhbXMpCiB7CiAJc3RydWN0IGJ1ZGdldCogYnVkZ2V0ID0gKHN0cnVjdCBidWRnZXQqKSBmZS0+ZHZiLT5wcml2OwpAQCAtNTgwLDIwICszNTQsNiBAQAogc3RhdGljIHZvaWQgZnJvbnRlbmRfaW5pdChzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQpCiB7CiAJc3dpdGNoKGJ1ZGdldC0+ZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpIHsKLQljYXNlIDB4MTAxNzoKLQkJLy8gdHJ5IHRoZSBBTFBTIEJTQkUxIG5vdwotCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IHN0djAyOTlfYXR0YWNoKCZhbHBzX2JzYmUxX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOwotCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKLQkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnNldF92b2x0YWdlID0gbG5icDIxX3NldF92b2x0YWdlOwotCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+ZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2UgPSBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2U7Ci0JCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLT5kaXNobmV0d29ya19zZW5kX2xlZ2FjeV9jb21tYW5kID0gTlVMTDsKLQkJCWlmIChsbmJwMjFfaW5pdChidWRnZXQpKSB7Ci0JCQkJcHJpbnRrKCIlczogTm8gTE5CUDIxIGZvdW5kIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQlnb3RvIGVycm9yX291dDsKLQkJCX0KLQkJfQotCi0JCWJyZWFrOwogCWNhc2UgMHgxMDAzOiAvLyBIYXVwcGF1Z2UvVFQgTm92YSBidWRnZXQgKHN0djAyOTkvQUxQUyBCU1JVNih0c2E1MDU5KSBPUiB2ZXMxODkzL0FMUFMgQlNSVjIoc3A1NjU5KSkKIAljYXNlIDB4MTAxMzoKIAkJLy8gdHJ5IHRoZSBBTFBTIEJTUlYyIGZpcnN0IG9mIGFsbApAQCAtNjQ2LDkgKzQwNiw3IEBACiAJY2FzZSAweDEwMTY6IC8vIEhhdXBwYXVnZS9UVCBOb3ZhLVMgU0UgKHNhbXN1bmcgczVoMTQyMC8/Pz8/KHRkYTgyNjApKQogCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IHM1aDE0MjBfYXR0YWNoKCZzNWgxNDIwX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKLQkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMtPnNldF92b2x0YWdlID0gbG5icDIxX3NldF92b2x0YWdlOwotCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy0+ZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2UgPSBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2U7Ci0JCQlpZiAobG5icDIxX2luaXQoYnVkZ2V0KSkgeworCQkJaWYgKGxuYnAyMV9pbml0KGJ1ZGdldC0+ZHZiX2Zyb250ZW5kLCAmYnVkZ2V0LT5pMmNfYWRhcCwgMCwgMCkpIHsKIAkJCQlwcmludGsoIiVzOiBObyBMTkJQMjEgZm91bmQhXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJCWdvdG8gZXJyb3Jfb3V0OwogCQkJfQpAQCAtNzE5LDcgKzQ3Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gYnVkZ2V0X2V4dGVuc2lvbjsKIAotTUFLRV9CVURHRVRfSU5GTyh0dGJzMiwgIlRULUJ1ZGdldC9XaW5UVi1OT1ZBLVMgUENJIChyZXYgQUwvYWxwcyBic2JlMSBsbmJwMjEgZnJvbnRlbmQpIiwgQlVER0VUX1RUKTsKIE1BS0VfQlVER0VUX0lORk8odHRicywJIlRULUJ1ZGdldC9XaW5UVi1OT1ZBLVMgIFBDSSIsCUJVREdFVF9UVCk7CiBNQUtFX0JVREdFVF9JTkZPKHR0YmMsCSJUVC1CdWRnZXQvV2luVFYtTk9WQS1DICBQQ0kiLAlCVURHRVRfVFQpOwogTUFLRV9CVURHRVRfSU5GTyh0dGJ0LAkiVFQtQnVkZ2V0L1dpblRWLU5PVkEtVCAgUENJIiwJQlVER0VUX1RUKTsKQEAgLTczMiw3ICs0ODksNiBAQAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJjLCAgMHgxM2MyLCAweDEwMDQpLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJ0LCAgMHgxM2MyLCAweDEwMDUpLAogCU1BS0VfRVhURU5TSU9OX1BDSShzYXRlbCwgMHgxM2MyLCAweDEwMTMpLAotCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJzMiwgMHgxM2MyLCAweDEwMTcpLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJzLCAgMHgxM2MyLCAweDEwMTYpLAogCU1BS0VfRVhURU5TSU9OX1BDSShmc2FjczEsMHgxMTMxLCAweDRmNjApLAogCU1BS0VfRVhURU5TSU9OX1BDSShmc2FjczAsMHgxMTMxLCAweDRmNjEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmggYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuaAppbmRleCBjN2JiNjNjLi40YWMwZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuaApAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgImR2Yl9uZXQuaCIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2Lmg+CiAKIGV4dGVybiBpbnQgYnVkZ2V0X2RlYnVnOwpAQCAtNTEsNyArNTMsNyBAQAogCXN0cnVjdCBkbXhfZnJvbnRlbmQgbWVtX2Zyb250ZW5kOwogCiAJaW50IGZlX3N5bmNlZDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHBpZF9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggcGlkX211dGV4OwogCiAJaW50IGNpX3ByZXNlbnQ7CiAJaW50IHZpZGVvX3BvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwppbmRleCA1YTEzYzQ3Li4yNDhmZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJkbXhkZXYuaCIKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kdmIvZG14Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKLQogLyoKICAgVFRVU0JfSFdTRUNUSU9OUzoKICAgICB0aGUgRFNQIHN1cHBvcnRzIGZpbHRlcmluZyBpbiBoYXJkd2FyZSwgaG93ZXZlciwgc2luY2UgdGhlICJtdXhzdHJlYW0iCkBAIC04Myw4ICs4Miw4IEBACiAJc3RydWN0IGR2Yl9uZXQgZHZibmV0OwogCiAJLyogYW5kIG9uZSBmb3IgVVNCIGFjY2Vzcy4gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbWkyYzsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbXVzYjsKKwlzdHJ1Y3QgbXV0ZXggc2VtaTJjOworCXN0cnVjdCBtdXRleCBzZW11c2I7CiAKIAlzdHJ1Y3QgZHZiX2FkYXB0ZXIgYWRhcHRlcjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwpAQCAtMTUwLDcgKzE0OSw3IEBACiAJcHJpbnRrKCJcbiIpOwogI2VuZGlmCiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ0dHVzYi0+c2VtdXNiKSA8IDApCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdHR1c2ItPnNlbXVzYikgPCAwKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWVyciA9IHVzYl9idWxrX21zZyh0dHVzYi0+ZGV2LCB0dHVzYi0+YnVsa19vdXRfcGlwZSwKQEAgLTE1OCwxMyArMTU3LDEzIEBACiAJaWYgKGVyciAhPSAwKSB7CiAJCWRwcmludGsoIiVzOiB1c2JfYnVsa19tc2coc2VuZCkgZmFpbGVkLCBlcnIgPT0gJWkhXG4iLAogCQkJX19GVU5DVElPTl9fLCBlcnIpOwotCQl1cCgmdHR1c2ItPnNlbXVzYik7CisJCW11dGV4X3VubG9jaygmdHR1c2ItPnNlbXVzYik7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChhY3R1YWxfbGVuICE9IGxlbikgewogCQlkcHJpbnRrKCIlczogb25seSB3cm90ZSAlZCBvZiAlZCBieXRlc1xuIiwgX19GVU5DVElPTl9fLAogCQkJYWN0dWFsX2xlbiwgbGVuKTsKLQkJdXAoJnR0dXNiLT5zZW11c2IpOworCQltdXRleF91bmxvY2soJnR0dXNiLT5zZW11c2IpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNzQsNyArMTczLDcgQEAKIAlpZiAoZXJyICE9IDApIHsKIAkJcHJpbnRrKCIlczogZmFpbGVkLCByZWNlaXZlIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sCiAJCSAgICAgICBlcnIpOwotCQl1cCgmdHR1c2ItPnNlbXVzYik7CisJCW11dGV4X3VubG9jaygmdHR1c2ItPnNlbXVzYik7CiAJCXJldHVybiBlcnI7CiAJfQogI2lmIERFQlVHID49IDMKQEAgLTE4NSwxNCArMTg0LDE0IEBACiAJcHJpbnRrKCJcbiIpOwogI2VuZGlmCiAJaWYgKCFuZWVkcmVzdWx0KQotCQl1cCgmdHR1c2ItPnNlbXVzYik7CisJCW11dGV4X3VubG9jaygmdHR1c2ItPnNlbXVzYik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHR1c2JfcmVzdWx0KHN0cnVjdCB0dHVzYiAqdHR1c2IsIHU4ICogZGF0YSwgaW50IGxlbikKIHsKIAltZW1jcHkoZGF0YSwgdHR1c2ItPmxhc3RfcmVzdWx0LCBsZW4pOwotCXVwKCZ0dHVzYi0+c2VtdXNiKTsKKwltdXRleF91bmxvY2soJnR0dXNiLT5zZW11c2IpOwogCXJldHVybiAwOwogfQogCkBAIC0yNTAsNyArMjQ5LDcgQEAKIAlpbnQgaSA9IDA7CiAJaW50IGluYzsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnR0dXNiLT5zZW1pMmMpIDwgMCkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0dHVzYi0+c2VtaTJjKSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCiAJd2hpbGUgKGkgPCBudW0pIHsKQEAgLTI4NCw3ICsyODMsNyBAQAogCQlpICs9IGluYzsKIAl9CiAKLQl1cCgmdHR1c2ItPnNlbWkyYyk7CisJbXV0ZXhfdW5sb2NrKCZ0dHVzYi0+c2VtaTJjKTsKIAlyZXR1cm4gaTsKIH0KIApAQCAtNjg5LDggKzY4OCw3IEBACiAJCQkJbWVtY3B5KHR0dXNiLT5tdXhwYWNrICsgdHR1c2ItPm11eHBhY2tfcHRyLAogCQkJCSAgICAgICBkYXRhLCBhdmFpbCk7CiAJCQkJdHR1c2ItPm11eHBhY2tfcHRyICs9IGF2YWlsOwotCQkJCWlmICh0dHVzYi0+bXV4cGFja19wdHIgPiAyNjQpCi0JCQkJCUJVRygpOworCQkJCUJVR19PTih0dHVzYi0+bXV4cGFja19wdHIgPiAyNjQpOwogCQkJCWRhdGEgKz0gYXZhaWw7CiAJCQkJbGVuIC09IGF2YWlsOwogCQkJCS8qIGRldGVybWluZSBsZW5ndGggKi8KQEAgLTE0OTUsOCArMTQ5MywxMSBAQAogCXR0dXNiLT5kZXYgPSB1ZGV2OwogCXR0dXNiLT5jID0gMDsKIAl0dHVzYi0+bXV4X3N0YXRlID0gMDsKLQlzZW1hX2luaXQoJnR0dXNiLT5zZW1pMmMsIDApOwotCXNlbWFfaW5pdCgmdHR1c2ItPnNlbXVzYiwgMSk7CisJbXV0ZXhfaW5pdCgmdHR1c2ItPnNlbWkyYyk7CisKKwltdXRleF9sb2NrKCZ0dHVzYi0+c2VtaTJjKTsKKworCW11dGV4X2luaXQoJnR0dXNiLT5zZW11c2IpOwogCiAJdHR1c2Jfc2V0dXBfaW50ZXJmYWNlcyh0dHVzYik7CiAKQEAgLTE1MDQsNyArMTUwNSw3IEBACiAJaWYgKHR0dXNiX2luaXRfY29udHJvbGxlcih0dHVzYikpCiAJCXByaW50aygidHR1c2JfaW5pdF9jb250cm9sbGVyOiBlcnJvclxuIik7CiAKLQl1cCgmdHR1c2ItPnNlbWkyYyk7CisJbXV0ZXhfdW5sb2NrKCZ0dHVzYi0+c2VtaTJjKTsKIAogCWR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZ0dHVzYi0+YWRhcHRlciwgIlRlY2hub3RyZW5kL0hhdXBwYXVnZSBOb3ZhLVVTQiIsIFRISVNfTU9EVUxFKTsKIAl0dHVzYi0+YWRhcHRlci5wcml2ID0gdHR1c2I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKaW5kZXggZGY4MzExNy4uNDRkZWEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYwpAQCAtMjAsNyArMjAsOCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTExNSw3ICsxMTYsNyBAQAogCXVuc2lnbmVkIGludAkJCW91dF9waXBlOwogCXVuc2lnbmVkIGludAkJCWlycV9waXBlOwogCWVudW0gdHR1c2JfZGVjX2ludGVyZmFjZQlpbnRlcmZhY2U7Ci0Jc3RydWN0IHNlbWFwaG9yZQkJdXNiX3NlbTsKKwlzdHJ1Y3QgbXV0ZXgJCQl1c2JfbXV0ZXg7CiAKIAl2b2lkCQkJKmlycV9idWZmZXI7CiAJc3RydWN0IHVyYgkJKmlycV91cmI7CkBAIC0xMjQsNyArMTI1LDcgQEAKIAlkbWFfYWRkcl90CQlpc29fZG1hX2hhbmRsZTsKIAlzdHJ1Y3QgdXJiCQkqaXNvX3VyYltJU09fQlVGX0NPVU5UXTsKIAlpbnQJCQlpc29fc3RyZWFtX2NvdW50OwotCXN0cnVjdCBzZW1hcGhvcmUJaXNvX3NlbTsKKwlzdHJ1Y3QgbXV0ZXgJCWlzb19tdXRleDsKIAogCXU4CQkJCXBhY2tldFtNQVhfUFZBX0xFTkdUSCArIDRdOwogCWVudW0gdHR1c2JfZGVjX3BhY2tldF90eXBlCXBhY2tldF90eXBlOwpAQCAtMjczLDkgKzI3NCw5IEBACiAJaWYgKCFiKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICgocmVzdWx0ID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZkZWMtPnVzYl9zZW0pKSkgeworCWlmICgocmVzdWx0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZWMtPnVzYl9tdXRleCkpKSB7CiAJCWtmcmVlKGIpOwotCQlwcmludGsoIiVzOiBGYWlsZWQgdG8gZG93biB1c2Igc2VtYXBob3JlLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpbnRrKCIlczogRmFpbGVkIHRvIGxvY2sgdXNiIG11dGV4LlxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKQEAgLTMwMCw3ICszMDEsNyBAQAogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKCIlczogY29tbWFuZCBidWxrIG1lc3NhZ2UgZmFpbGVkOiBlcnJvciAlZFxuIiwKIAkJICAgICAgIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQkJdXAoJmRlYy0+dXNiX3NlbSk7CisJCW11dGV4X3VubG9jaygmZGVjLT51c2JfbXV0ZXgpOwogCQlrZnJlZShiKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CkBAIC0zMTEsNyArMzEyLDcgQEAKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50aygiJXM6IHJlc3VsdCBidWxrIG1lc3NhZ2UgZmFpbGVkOiBlcnJvciAlZFxuIiwKIAkJICAgICAgIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQkJdXAoJmRlYy0+dXNiX3NlbSk7CisJCW11dGV4X3VubG9jaygmZGVjLT51c2JfbXV0ZXgpOwogCQlrZnJlZShiKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9IGVsc2UgewpAQCAtMzI3LDcgKzMyOCw3IEBACiAJCWlmIChjbWRfcmVzdWx0ICYmIGJbM10gPiAwKQogCQkJbWVtY3B5KGNtZF9yZXN1bHQsICZiWzRdLCBiWzNdKTsKIAotCQl1cCgmZGVjLT51c2Jfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZWMtPnVzYl9tdXRleCk7CiAKIAkJa2ZyZWUoYik7CiAJCXJldHVybiAwOwpAQCAtODM1LDcgKzgzNiw3IEBACiAKIAlkcHJpbnRrKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRlYy0+aXNvX3NlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGVjLT5pc29fbXV0ZXgpKQogCQlyZXR1cm47CiAKIAlkZWMtPmlzb19zdHJlYW1fY291bnQtLTsKQEAgLTg0NSw3ICs4NDYsNyBAQAogCQkJdXNiX2tpbGxfdXJiKGRlYy0+aXNvX3VyYltpXSk7CiAJfQogCi0JdXAoJmRlYy0+aXNvX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkZWMtPmlzb19tdXRleCk7CiB9CiAKIC8qIFNldHRpbmcgdGhlIGludGVyZmFjZSBvZiB0aGUgREVDIHRlbmRzIHRvIHRha2UgZG93biB0aGUgVVNCIGNvbW11bmljYXRpb25zCkBAIC04OTAsNyArODkxLDcgQEAKIAogCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGVjLT5pc29fc2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZWMtPmlzb19tdXRleCkpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJaWYgKCFkZWMtPmlzb19zdHJlYW1fY291bnQpIHsKQEAgLTkxMSw3ICs5MTIsNyBAQAogCQkJCQlpLS07CiAJCQkJfQogCi0JCQkJdXAoJmRlYy0+aXNvX3NlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZkZWMtPmlzb19tdXRleCk7CiAJCQkJcmV0dXJuIHJlc3VsdDsKIAkJCX0KIAkJfQpAQCAtOTE5LDcgKzkyMCw3IEBACiAKIAlkZWMtPmlzb19zdHJlYW1fY291bnQrKzsKIAotCXVwKCZkZWMtPmlzb19zZW0pOworCW11dGV4X3VubG9jaygmZGVjLT5pc29fbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjI5LDggKzEyMzAsOCBAQAogewogCWRwcmludGsoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0Jc2VtYV9pbml0KCZkZWMtPnVzYl9zZW0sIDEpOwotCXNlbWFfaW5pdCgmZGVjLT5pc29fc2VtLCAxKTsKKwltdXRleF9pbml0KCZkZWMtPnVzYl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmZGVjLT5pc29fbXV0ZXgpOwogCiAJZGVjLT5jb21tYW5kX3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZGVjLT51ZGV2LCBDT01NQU5EX1BJUEUpOwogCWRlYy0+cmVzdWx0X3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGVjLT51ZGV2LCBSRVNVTFRfUElQRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL21pcm9wY20yMC1yZHMtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9taXJvcGNtMjAtcmRzLWNvcmUuYwppbmRleCBhOTE3YTkwLi5iNjAyYzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL21pcm9wY20yMC1yZHMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vbWlyb3BjbTIwLXJkcy1jb3JlLmMKQEAgLTE4LDE0ICsxOCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICIuLi8uLi8uLi9zb3VuZC9vc3MvYWNpLmgiCiAjaW5jbHVkZSAibWlyb3BjbTIwLXJkcy1jb3JlLmgiCiAKICNkZWZpbmUgREVCVUcgMAogCi1zdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBhY2lfcmRzX3NlbTsKK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggYWNpX3Jkc19tdXRleDsKIAogI2RlZmluZSBSRFNfREFUQVNISUZUICAgICAgICAgIDIgICAvKiBCaXQgMiAqLwogI2RlZmluZSBSRFNfREFUQU1BU0sgICAgICAgICgxIDw8IFJEU19EQVRBU0hJRlQpCkBAIC0xODEsNyArMTgyLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYWNpX3Jkc19zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmFjaV9yZHNfbXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJcmRzX3dyaXRlKGNtZCk7CkBAIC0xOTIsNyArMTkzLDcgQEAKIAllbHNlCiAJCXJldCA9IDA7CiAKLQl1cCgmYWNpX3Jkc19zZW0pOworCW11dGV4X3VubG9jaygmYWNpX3Jkc19tdXRleCk7CiAJCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIwMCw3ICsyMDEsNyBAQAogCiBpbnQgX19pbml0IGF0dGFjaF9hY2lfcmRzKHZvaWQpCiB7Ci0JaW5pdF9NVVRFWCgmYWNpX3Jkc19zZW0pOworCW11dGV4X2luaXQoJmFjaV9yZHNfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCmluZGV4IDkxNGRlYWIuLjU1N2ZiNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCkBAIC00Myw3ICs0Myw3IEBACiAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fUlRSQUNLX1BPUlQ7IAogc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgbG9jazsKK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jazsKIAogc3RydWN0IHJ0X2RldmljZQogewpAQCAtODMsMjMgKzgzLDIzIEBACiBzdGF0aWMgdm9pZCBydF9tdXRlKHN0cnVjdCBydF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPm11dGVkID0gMTsKLQlkb3duKCZsb2NrKTsKKwltdXRleF9sb2NrKCZsb2NrKTsKIAlvdXRiKDB4ZDAsIGlvKTsJCQkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCi0JdXAoJmxvY2spOworCW11dGV4X3VubG9jaygmbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcnRfc2V0dm9sKHN0cnVjdCBydF9kZXZpY2UgKmRldiwgaW50IHZvbCkKIHsKIAlpbnQgaTsKIAotCWRvd24oJmxvY2spOworCW11dGV4X2xvY2soJmxvY2spOwogCQogCWlmKHZvbCA9PSBkZXYtPmN1cnZvbCkgewkvKiByZXF1ZXN0ZWQgdm9sdW1lID0gY3VycmVudCAqLwogCQlpZiAoZGV2LT5tdXRlZCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICAqLwogCQkJZGV2LT5tdXRlZCA9IDA7CiAJCQlvdXRiICgweGQ4LCBpbyk7CS8qIGVuYWJsZSBjYXJkICovCiAJCX0JCi0JCXVwKCZsb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJc2xlZXBfZGVsYXkoMjAwMDAwMCk7CS8qIG1ha2Ugc3VyZSBpdCdzIHRvdGFsbHkgZG93bgkqLwogCQlvdXRiKDB4ZDAsIGlvKTsJCS8qIHZvbHVtZSBzdGVhZHksIG9mZgkJKi8KIAkJZGV2LT5jdXJ2b2wgPSAwOwkvKiB0cmFjayB0aGUgdm9sdW1lIHN0YXRlIQkqLwotCQl1cCgmbG9jayk7CisJCW11dGV4X3VubG9jaygmbG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTIxLDcgKzEyMSw3IEBACiAJCQlydF9kZWN2b2woKTsKIAogCWRldi0+Y3Vydm9sID0gdm9sOwotCXVwKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlmcmVxICs9IDE3MTIwMDsJCQkvKiBBZGQgMTAuNyBNSHogSUYgCQkqLwogCWZyZXEgLz0gODAwOwkJCS8qIENvbnZlcnQgdG8gNTAga0h6IHVuaXRzCSovCiAJCi0JZG93bigmbG9jayk7CQkJLyogU3RvcCBvdGhlciBvcHMgaW50ZXJmZXJpbmcgKi8KKwltdXRleF9sb2NrKCZsb2NrKTsJCQkvKiBTdG9wIG90aGVyIG9wcyBpbnRlcmZlcmluZyAqLwogCSAKIAlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAgMDogTFNCIG9mIGZyZXF1ZW5jeQkJKi8KIApAQCAtMTk2LDcgKzE5Niw3IEBACiAJZWxzZQogCQlvdXRiICgweGQ4LCBpbyk7CS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbiAqLwogCQkKLQl1cCgmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM3LDcgKzMzNyw3IEBACiAKIAkvKiBTZXQgdXAgdGhlIEkvTyBsb2NraW5nICovCiAJCi0JaW5pdF9NVVRFWCgmbG9jayk7CisJbXV0ZXhfaW5pdCgmbG9jayk7CiAJCiAgCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKaW5kZXggNTIzYmU4Mi4uODNiZGFlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX0FaVEVDSF9QT1JUOyAKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIHN0YXRpYyBpbnQgcmFkaW9fd2FpdF90aW1lID0gMTAwMDsKLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CitzdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7CiAKIHN0cnVjdCBhel9kZXZpY2UKIHsKQEAgLTg3LDkgKzg3LDkgQEAKIAogc3RhdGljIGludCBhel9zZXR2b2woc3RydWN0IGF6X2RldmljZSAqZGV2LCBpbnQgdm9sKQogewotCWRvd24oJmxvY2spOworCW11dGV4X2xvY2soJmxvY2spOwogCW91dGIgKHZvbGNvbnZlcnQodm9sKSwgaW8pOwotCXVwKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMjIsNyArMTIyLDcgQEAKIAlmcmVxdWVuY3kgKz0gMTcxMjAwOwkJLyogQWRkIDEwLjcgTUh6IElGCQkqLwogCWZyZXF1ZW5jeSAvPSA4MDA7CQkvKiBDb252ZXJ0IHRvIDUwIGtIeiB1bml0cwkqLwogCQkJCQkKLQlkb3duKCZsb2NrKTsKKwltdXRleF9sb2NrKCZsb2NrKTsKIAkKIAlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qICAwOiBMU0Igb2YgZnJlcXVlbmN5ICAgICAgICovCiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXVkZWxheSAocmFkaW9fd2FpdF90aW1lKTsKIAlvdXRiX3AoMTI4KzY0K3ZvbGNvbnZlcnQoZGV2LT5jdXJ2b2wpLCBpbyk7CiAJCi0JdXAoJmxvY2spOworCW11dGV4X3VubG9jaygmbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4Myw3ICsyODMsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWluaXRfTVVURVgoJmxvY2spOworCW11dGV4X2luaXQoJmxvY2spOwogCWF6dGVjaF9yYWRpby5wcml2PSZhenRlY2hfdW5pdDsKIAkKIAlpZih2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmF6dGVjaF9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKT09LTEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCmluZGV4IDM2YzlmNWIuLjM5YzFkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCkBAIC0yMywxMCArMjMsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KIAorCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjA1IgogCiAjZGVmaW5lIEdQSU9fREFUQQkweDYwICAgLyogcG9ydCBvZmZzZXQgZnJvbSBFU1NfSU9fQkFTRSAqLwpAQCAtMTA0LDcgKzEwNSw3IEBACiAJCW11dGVkLAkvKiBWSURFT19BVURJT19NVVRFICovCiAJCXN0ZXJlbywJLyogVklERU9fVFVORVJfU1RFUkVPX09OICovCQogCQl0dW5lZDsJLyogc2lnbmFsIHN0cmVuZ3RoICgwIG9yIDB4ZmZmZikgKi8KLQlzdHJ1Y3QJc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiBzdGF0aWMgdTMyIHJhZGlvX2JpdHNfZ2V0KHN0cnVjdCByYWRpb19kZXZpY2UgKmRldikKQEAgLTI1OCw5ICsyNTksOSBAQAogCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQ7CiAKLQlkb3duKCZjYXJkLT5sb2NrKTsKKwltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKIAlyZXQgPSB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHJhZGlvX2Z1bmN0aW9uKTsKLQl1cCgmY2FyZC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zMTEsNyArMzEyLDcgQEAKIAl9CiAKIAlyYWRpb191bml0LT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSArIEdQSU9fREFUQTsKLQlpbml0X01VVEVYKCZyYWRpb191bml0LT5sb2NrKTsKKwltdXRleF9pbml0KCZyYWRpb191bml0LT5sb2NrKTsKIAogCW1hZXN0cm9fcmFkaW9faW5zdCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCWlmIChtYWVzdHJvX3JhZGlvX2luc3QgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKaW5kZXggYzk3NWRkZC4uZjBiZjQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCkBAIC0zNyw3ICszNyw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KIApAQCAtMTAxLDcgKzEwMiw3IEBACiAJCQogCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAkKLQlzdHJ1Y3QgIHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogfSByYWRpb191bml0ID0gezAsIDAsIDAsIDAsIH07CiAKIApAQCAtMjY3LDkgKzI2OCw5IEBACiAJc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZD1kZXYtPnByaXY7CiAJaW50IHJldDsKIAkKLQlkb3duKCZjYXJkLT5sb2NrKTsKKwltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKIAlyZXQgPSB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHJhZGlvX2Z1bmN0aW9uKTsKLQl1cCgmY2FyZC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTAsNyArMjkxLDcgQEAKIAkgICAgICAgIGdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbjsKIAogCXJhZGlvX3VuaXQuaW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JaW5pdF9NVVRFWCgmcmFkaW9fdW5pdC5sb2NrKTsKKwltdXRleF9pbml0KCZyYWRpb191bml0LmxvY2spOwogCW1heGlyYWRpb19yYWRpby5wcml2ID0gJnJhZGlvX3VuaXQ7CiAKIAlpZih2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJm1heGlyYWRpb19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKT09LTEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKaW5kZXggMDIyOWY3OS4uNTMwNzNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIHN0cnVjdCBmbWlfZGV2aWNlCiB7CkBAIC0zNyw3ICszNyw3IEBACiBzdGF0aWMgaW50IGlvID0gLTE7IAogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogc3RhdGljIHN0cnVjdCBwbnBfZGV2ICpkZXYgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgbG9jazsKK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jazsKIAogLyogZnJlcSBpcyBpbiAxLzE2IGtIeiB0byBpbnRlcm5hbCBudW1iZXIsIGh3IHByZWNpc2lvbiBpcyA1MCBrSHogKi8KIC8qIEl0IGlzIG9ubHkgdXNlZnVsIHRvIGdpdmUgZnJlcSBpbiBpbnRlcnZhbGwgb2YgODAwICg9MC4wNU1oeiksCkBAIC02OCwxNiArNjgsMTYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZtaV9tdXRlKGludCBwb3J0KQogewotCWRvd24oJmxvY2spOworCW11dGV4X2xvY2soJmxvY2spOwogCW91dGIoMHgwMCwgcG9ydCk7Ci0JdXAoJmxvY2spOworCW11dGV4X3VubG9jaygmbG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbWlfdW5tdXRlKGludCBwb3J0KQogewotCWRvd24oJmxvY2spOworCW11dGV4X2xvY2soJmxvY2spOwogCW91dGIoMHgwOCwgcG9ydCk7Ci0JdXAoJmxvY2spOworCW11dGV4X3VubG9jaygmbG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGZtaV9zZXRmcmVxKHN0cnVjdCBmbWlfZGV2aWNlICpkZXYpCkBAIC04NSwxMiArODUsMTIgQEAKIAlpbnQgbXlwb3J0ID0gZGV2LT5wb3J0OwogCXVuc2lnbmVkIGxvbmcgZnJlcSA9IGRldi0+Y3VyZnJlcTsKIAotCWRvd24oJmxvY2spOworCW11dGV4X2xvY2soJmxvY2spOwogCiAJb3V0Yml0cygxNiwgUlNGMTZfRU5DT0RFKGZyZXEpLCBteXBvcnQpOwogCW91dGJpdHMoOCwgMHhDMCwgbXlwb3J0KTsKIAltc2xlZXAoMTQzKTsJCS8qIHdhcyBzY2hlZHVsZV90aW1lb3V0KEhaLzcpICovCi0JdXAoJmxvY2spOworCW11dGV4X3VubG9jaygmbG9jayk7CiAJaWYgKGRldi0+Y3Vydm9sKSBmbWlfdW5tdXRlKG15cG9ydCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDIsNyArMTAyLDcgQEAKIAlpbnQgbXlwb3J0ID0gZGV2LT5wb3J0OwogCiAJCi0JZG93bigmbG9jayk7CisJbXV0ZXhfbG9jaygmbG9jayk7CiAJdmFsID0gZGV2LT5jdXJ2b2wgPyAweDA4IDogMHgwMDsJLyogdW5tdXRlL211dGUgKi8KIAlvdXRiKHZhbCwgbXlwb3J0KTsKIAlvdXRiKHZhbCB8IDB4MTAsIG15cG9ydCk7CkBAIC0xMTAsNyArMTEwLDcgQEAKIAlyZXMgPSAoaW50KWluYihteXBvcnQrMSk7CiAJb3V0Yih2YWwsIG15cG9ydCk7CiAJCi0JdXAoJmxvY2spOworCW11dGV4X3VubG9jaygmbG9jayk7CiAJcmV0dXJuIChyZXMgJiAyKSA/IDAgOiAweEZGRkY7CiB9CiAKQEAgLTI5Niw3ICsyOTYsNyBAQAogCWZtaV91bml0LmZsYWdzID0gVklERU9fVFVORVJfTE9XOwogCWZtaV9yYWRpby5wcml2ID0gJmZtaV91bml0OwogCQotCWluaXRfTVVURVgoJmxvY2spOworCW11dGV4X2luaXQoJmxvY2spOwogCQogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmZtaV9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA9PSAtMSkgewogCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKaW5kZXggMDk5ZmZiMy4uYmNlYmQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwpAQCAtMTksOSArMTksOSBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgbG9jazsKK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jazsKIAogI3VuZGVmIERFQlVHCiAvLyNkZWZpbmUgREVCVUcgMQpAQCAtMjM4LDkgKzIzOCw5IEBACiAJCQlpZiAoZm1yMi0+bXV0ZSkKIAkJCQl2LT5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOwogCQkJdi0+bW9kZT1WSURFT19NT0RFX0FVVE87Ci0JCQlkb3duKCZsb2NrKTsKKwkJCW11dGV4X2xvY2soJmxvY2spOwogCQkJdi0+c2lnbmFsID0gZm1yMl9nZXRzaWdzdHIoZm1yMik7Ci0JCQl1cCgmbG9jayk7CisJCQltdXRleF91bmxvY2soJmxvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJY2FzZSBWSURJT0NTVFVORVI6CkBAIC0yNzQsOSArMjc0LDkgQEAKIAkJCS8qIHNldCBjYXJkIGZyZXEgKGlmIG5vdCBtdXRlZCkgKi8KIAkJCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpCiAJCQl7Ci0JCQkJZG93bigmbG9jayk7CisJCQkJbXV0ZXhfbG9jaygmbG9jayk7CiAJCQkJZm1yMl9zZXRmcmVxKGZtcjIpOwotCQkJCXVwKCZsb2NrKTsKKwkJCQltdXRleF91bmxvY2soJmxvY2spOwogCQkJfQogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTMxOCwxNCArMzE4LDE0IEBACiAJCQllbHNlCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIm11dGVcbiIpOwogI2VuZGlmCi0JCQlkb3duKCZsb2NrKTsKKwkJCW11dGV4X2xvY2soJmxvY2spOwogCQkJaWYgKGZtcjItPmN1cnZvbCAmJiAhZm1yMi0+bXV0ZSkKIAkJCXsKIAkJCQlmbXIyX3NldHZvbHVtZShmbXIyKTsKIAkJCQlmbXIyX3NldGZyZXEoZm1yMik7CiAJCQl9CiAJCQllbHNlIGZtcjJfbXV0ZShmbXIyLT5wb3J0KTsKLQkJCXVwKCZsb2NrKTsKKwkJCW11dGV4X3VubG9jaygmbG9jayk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQljYXNlIFZJRElPQ0dVTklUOgpAQCAtMzgwLDcgKzM4MCw3IEBACiAJZm1yMl91bml0LmNhcmRfdHlwZSA9IDA7CiAJZm1yMl9yYWRpby5wcml2ID0gJmZtcjJfdW5pdDsKIAotCWluaXRfTVVURVgoJmxvY2spOworCW11dGV4X2luaXQoJmxvY2spOwogCiAJaWYgKHJlcXVlc3RfcmVnaW9uKGlvLCAyLCAic2YxNmZtcjIiKSkKIAl7CkBAIC0zOTcsMTAgKzM5NywxMCBAQAogCXByaW50ayhLRVJOX0lORk8gIlNGMTZGTVIyIHJhZGlvIGNhcmQgZHJpdmVyIGF0IDB4JXguXG4iLCBpbyk7CiAJZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgIk11dGUgJWQgTG93ICVkXG4iLFZJREVPX0FVRElPX01VVEUsVklERU9fVFVORVJfTE9XKSk7CiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCWRvd24oJmxvY2spOworCW11dGV4X2xvY2soJmxvY2spOwogCWZtcjJfbXV0ZShpbyk7CiAJZm1yMl9wcm9kdWN0X2luZm8oJmZtcjJfdW5pdCk7Ci0JdXAoJmxvY2spOworCW11dGV4X3VubG9jaygmbG9jayk7CiAJZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgImNhcmRfdHlwZSAlZFxuIiwgZm1yMl91bml0LmNhcmRfdHlwZSkpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwppbmRleCA4YWM5YThlLi5lNTA5NTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwpAQCAtNTksNyArNTksNyBAQAogCWludCBtdXRlZDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJdW5zaWduZWQgbG9uZyBtdXRlZnJlcTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiBzdGF0aWMgdm9pZCB0eXBob29uX3NldHZvbF9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCBpbnQgdm9sKTsKQEAgLTc3LDEyICs3NywxMiBAQAogCiBzdGF0aWMgdm9pZCB0eXBob29uX3NldHZvbF9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCBpbnQgdm9sKQogewotCWRvd24oJmRldi0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAl2b2wgPj49IDE0OwkJCQkvKiBNYXAgMTYgYml0IHRvIDIgYml0ICovCiAJdm9sICY9IDM7CiAJb3V0Yl9wKHZvbCAvIDIsIGRldi0+aW9iYXNlKTsJCS8qIFNldCB0aGUgdm9sdW1lLCBoaWdoIGJpdC4gKi8KIAlvdXRiX3Aodm9sICUgMiwgZGV2LT5pb2Jhc2UgKyAyKTsJLyogU2V0IHRoZSB2b2x1bWUsIGxvdyBiaXQuICovCi0JdXAoJmRldi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQogCiBzdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcV9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LApAQCAtMTAyLDcgKzEwMiw3IEBACiAJICoKIAkgKi8KIAotCWRvd24oJmRldi0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAl4ID0gZnJlcXVlbmN5IC8gMTYwOwogCW91dHZhbCA9ICh4ICogeCArIDI1MDApIC8gNTAwMDsKIAlvdXR2YWwgPSAob3V0dmFsICogeCArIDUwMDApIC8gMTAwMDA7CkBAIC0xMTIsNyArMTEyLDcgQEAKIAlvdXRiX3AoKG91dHZhbCA+PiA4KSAmIDB4MDEsIGRldi0+aW9iYXNlICsgNCk7CiAJb3V0Yl9wKG91dHZhbCA+PiA5LCBkZXYtPmlvYmFzZSArIDYpOwogCW91dGJfcChvdXR2YWwgJiAweGZmLCBkZXYtPmlvYmFzZSArIDgpOwotCXVwKCZkZXYtPmxvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM3LDcgKzMzNyw3IEBACiAjZW5kaWYgLyogTU9EVUxFICovCiAKIAlwcmludGsoS0VSTl9JTkZPIEJBTk5FUik7Ci0JaW5pdF9NVVRFWCgmdHlwaG9vbl91bml0LmxvY2spOworCW11dGV4X2luaXQoJnR5cGhvb25fdW5pdC5sb2NrKTsKIAlpbyA9IHR5cGhvb25fdW5pdC5pb2Jhc2U7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgOCwgInR5cGhvb24iKSkgewogCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXR5cGhvb246IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKaW5kZXggZDU5MGU4MC4uN2JmMWE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IG11dGVkOwogCXVuc2lnbmVkIGludCBzdGVyZW87Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogc3RhdGljIGludCB6b2xfc2V0dm9sKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYsIGludCB2b2wpCkBAIC01NywzMCArNTcsMzAgQEAKIAlpZiAoZGV2LT5tdXRlZCkKIAkJcmV0dXJuIDA7CiAKLQlkb3duKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJaWYgKHZvbCA9PSAwKSB7CiAJCW91dGIoMCwgaW8pOwogCQlvdXRiKDAsIGlvKTsKIAkJaW5iKGlvICsgMyk7ICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCi0JCXVwKCZkZXYtPmxvY2spOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAogCW91dGIoZGV2LT5jdXJ2b2wtMSwgaW8pOwogCW1zbGVlcCgxMCk7CiAJaW5iKGlvICsgMik7Ci0JdXAoJmRldi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB6b2xfbXV0ZShzdHJ1Y3Qgem9sX2RldmljZSAqZGV2KQogewogCWRldi0+bXV0ZWQgPSAxOwotCWRvd24oJmRldi0+bG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlvdXRiKDAsIGlvKTsKIAlvdXRiKDAsIGlvKTsKIAlpbmIoaW8gKyAzKTsgICAgICAgICAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLwotCXVwKCZkZXYtPmxvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgem9sX3VubXV0ZShzdHJ1Y3Qgem9sX2RldmljZSAqZGV2KQpAQCAtMTA0LDcgKzEwNCw3IEBACiAJYml0bWFzayA9IDB4YzQ4MDQwMmMxMDA4MDAwMHVsbDsKIAlpID0gNDU7CiAKLQlkb3duKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJCiAJb3V0YigwLCBpbyk7CiAJb3V0YigwLCBpbyk7CkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJdWRlbGF5KDEwMDApOwogCX0KIAkKLQl1cCgmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCiAJaWYoIWRldi0+bXV0ZWQpCiAJewpAQCAtMTY0LDcgKzE2NCw3IEBACiB7CiAJaW50IGEsIGI7CiAKLQlkb3duKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJb3V0YigweDAwLCBpbyk7ICAgICAgICAgLyogVGhpcyBzdHVmZiBJIGZvdW5kIHRvIGRvIG5vdGhpbmcgKi8KIAlvdXRiKGRldi0+Y3Vydm9sLCBpbyk7CiAJbXNsZWVwKDIwKTsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCW1zbGVlcCgxMCk7CiAJYiA9IGluYihpbyk7CiAKLQl1cCgmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCiAJaWYgKGEgIT0gYikKIAkJcmV0dXJuICgwKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogewogCWludCB4MSwgeDI7CiAKLQlkb3duKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJCiAJb3V0YigweDAwLCBpbyk7CiAJb3V0YihkZXYtPmN1cnZvbCwgaW8pOwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJbXNsZWVwKDEwKTsKIAl4MiA9IGluYihpbyk7CiAKLQl1cCgmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCiAJaWYgKCh4MSA9PSB4MikgJiYgKHgxID09IDB4Y2YpKQogCQlyZXR1cm4gMTsKQEAgLTM1MCw3ICszNTAsNyBAQAogCX0KIAlwcmludGsoS0VSTl9JTkZPICJab2x0cml4IFJhZGlvIFBsdXMgY2FyZCBkcml2ZXIuXG4iKTsKIAotCWluaXRfTVVURVgoJnpvbHRyaXhfdW5pdC5sb2NrKTsKKwltdXRleF9pbml0KCZ6b2x0cml4X3VuaXQubG9jayk7CiAJCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggZDgyYzhhMy4uZjMxYTE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMTYsMzAgKzE2LDcgQEAKIAkgIFY0TCBkZXZpY2VzLgogCSAgSW4gZG91YnQsIHNheSBOLgogCi1jb25maWcgVklERU9fQlQ4NDgKLQl0cmlzdGF0ZSAiQlQ4NDggVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMKLQlzZWxlY3QgSTJDX0FMR09CSVQKLQlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IFZJREVPX0JUQ1gKLQlzZWxlY3QgVklERU9fQlVGCi0Jc2VsZWN0IFZJREVPX0lSCi0Jc2VsZWN0IFZJREVPX1RVTkVSCi0Jc2VsZWN0IFZJREVPX1RWRUVQUk9NCi0JLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgQlQ4NDggYmFzZWQgZnJhbWUgZ3JhYmJlci9vdmVybGF5IGJvYXJkcy4gVGhpcyBpbmNsdWRlcwotCSAgdGhlIE1pcm8sIEhhdXBwYXVnZSBhbmQgU1RCIGJvYXJkcy4gUGxlYXNlIHJlYWQgdGhlIG1hdGVyaWFsIGluCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYnR0di4KLQotY29uZmlnIFZJREVPX0JUODQ4X0RWQgotCWJvb2wgIkRWQi9BVFNDIFN1cHBvcnQgZm9yIGJ0ODc4IGJhc2VkIFRWIGNhcmRzIgotCWRlcGVuZHMgb24gVklERU9fQlQ4NDggJiYgRFZCX0NPUkUKLQlzZWxlY3QgRFZCX0JUOFhYCi0JLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQi9BVFNDIGNhcmRzIGJhc2VkIG9uIHRoZSBCVDg3OCBjaGlwLgorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWciCiAKIGNvbmZpZyBWSURFT19TQUE2NTg4CiAJdHJpc3RhdGUgIlNBQTY1ODggUmFkaW8gQ2hpcCBSRFMgZGVjb2RlciBzdXBwb3J0IG9uIEJUODQ4IGNhcmRzIgpAQCAtMTQyLDYgKzExOSw4IEBACiAJICBvdGhlcndpc2Ugc2F5IE4uIFRoaXMgd2lsbCBub3Qgd29yayB3aXRoIHRoZSBDcmVhdGl2ZSBXZWJjYW0gSUlJLgogCSAgSXQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKGNwaWFfdXNiKS4KIAorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL0tjb25maWciCisKIGNvbmZpZyBWSURFT19TQUE1MjQ2QQogCXRyaXN0YXRlICJTQUE1MjQ2QSwgU0FBNTI4MSBUZWxldGV4dCBwcm9jZXNzb3IiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDCkBAIC0zMTIsOCArMjkxLDYgQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnIgotCiBjb25maWcgVklERU9fT1ZDQU1DSElQCiAJdHJpc3RhdGUgIk9tbmlWaXNpb24gQ2FtZXJhIENoaXAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKQEAgLTMzOSwxOCArMzE2LDI4MyBAQAogCSAgU2F5IFkgaGVyZSB0byB1c2UgdGhlIFJlbmVzYXMgTTY0Mjc4RS04MDAgY2FtZXJhIG1vZHVsZSwKIAkgIHdoaWNoIHN1cHBvcnRzIFZHQSg2NDB4NDgwIHBpeGNlbHMpIHNpemUgb2YgaW1hZ2VzLgogCi1jb25maWcgVklERU9fQVVESU9fREVDT0RFUgotCXRyaXN0YXRlICJBZGQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCBhdWRpbyBjaGlwc2V0cyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCitjb25maWcgVklERU9fTVNQMzQwMAorCXRyaXN0YXRlICJNaWNyb25hcyBNU1AzNHh4IGF1ZGlvIGRlY29kZXJzIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBkcml2ZXJzIGZvciBXTTg3NzUgYW5kIENTNTNMMzJBIGF1ZGlvCi0JICBkZWNvZGVycy4KKwkgIFN1cHBvcnQgZm9yIHRoZSBNaWNyb25hcyBNU1AzNHh4IHNlcmllcyBvZiBhdWRpbyBkZWNvZGVycy4KIAotY29uZmlnIFZJREVPX0RFQ09ERVIKLQl0cmlzdGF0ZSAiQWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgdmlkZW8gY2hpcHNldHMiCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtc3AzNDAwCisKK2NvbmZpZyBWSURFT19DUzUzTDMyQQorCXRyaXN0YXRlICJDaXJydXMgTG9naWMgQ1M1M0wzMkEgYXVkaW8gQURDIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgZHJpdmVycyBmb3IgU0FBNzExNSwgU0FBNzEyNyBhbmQgQ1gyNTg0MAotCSAgdmlkZW8gZGVjb2RlcnMuCisJICBTdXBwb3J0IGZvciB0aGUgQ2lycnVzIExvZ2ljIENTNTNMMzJBIGxvdyB2b2x0YWdlCisJICBzdGVyZW8gQS9EIGNvbnZlcnRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3M1M2wzMmEKKworY29uZmlnIFZJREVPX1dNODc3NQorCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004Nzc1IGF1ZGlvIEFEQyIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg3NzUKKwkgIGhpZ2ggcGVyZm9ybWFuY2Ugc3RlcmVvIEEvRCBDb252ZXJ0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdtODc3NQorCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9LY29uZmlnIgorCitjb25maWcgVklERU9fU0FBNzExWAorCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTMvNC81IHZpZGVvIGRlY29kZXJzIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExNQorCitjb25maWcgVklERU9fU0FBNzEyNworCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMjcvOSBkaWdpdGFsIHZpZGVvIGVuY29kZXJzIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTI3LzkgZGlnaXRhbCB2aWRlbyBlbmNvZGVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzEyNworCisjCisjIFVTQiBNdWx0aW1lZGlhIGRldmljZSBjb25maWd1cmF0aW9uCisjCisKK21lbnUgIlY0TCBVU0IgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKworc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnIgorCitjb25maWcgVVNCX1ZJQ0FNCisJdHJpc3RhdGUgIlVTQiAzY29tIEhvbWVDb25uZWN0IChha2EgdmljYW0pIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgM2NvbSBob21lY29ubmVjdCBjYW1lcmEgKHZpY2FtKS4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAorCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpY2FtLgorCitjb25maWcgVVNCX0RTQlIKKwl0cmlzdGF0ZSAiRC1MaW5rIFVTQiBGTSByYWRpbyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHJhZGlvIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIE5vdGUgdGhhdCB0aGUgYXVkaW8gaXMgbm90IGRpZ2l0YWwsIGFuZAorCSAgeW91IG11c3QgY29ubmVjdCB0aGUgbGluZSBvdXQgY29ubmVjdG9yIHRvIGEgc291bmQgY2FyZCBvciBhCisJICBzZXQgb2Ygc3BlYWtlcnMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuICBZb3UgbXVzdCBlbmFibGUKKwkgIChZIG9yIE0gaW4gY29uZmlnKSBWaWRlbyBGb3IgTGludXggKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKQorCSAgdG8gdXNlIHRoaXMgZHJpdmVyLiAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvCisJICAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkc2JyMTAwLgorCitjb25maWcgVVNCX0VUNjFYMjUxCisJdHJpc3RhdGUgIlVTQiBFVDYxWFsxMl01MSBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBFdG9tcyBFVDYxWDE1MQorCSAgb3IgRVQ2MVgyNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXJzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvZXQ2MXgyNTEudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiIHRvIHVzZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXQ2MXgyNTEuCisKK2NvbmZpZyBVU0JfSUJNQ0FNCisJdHJpc3RhdGUgIlVTQiBJQk0gKFhpcmxpbmspIEMtaXQgQ2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgSUJNICJDLUl0IiBjYW1lcmEsIGFsc28ga25vd24gYXMKKwkgICJYaXJsaW5rIFBDIENhbWVyYSIgdG8geW91ciBjb21wdXRlcidzIFVTQiBwb3J0LiAgRm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uLCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2libWNhbS50eHQ+LgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgWW91IG11c3QgZW5hYmxlCisJICAoWSBvciBNIGluIGNvbmZpZykgVmlkZW8gRm9yIExpbnV4ICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykKKwkgIHRvIHVzZSB0aGlzIGRyaXZlci4gIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0bworCSAgInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0CisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWJtY2FtLgorCisJICBUaGlzIGNhbWVyYSBoYXMgc2V2ZXJhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2hpY2gKKwkgIGNhbiBiZSBzcGVjaWZpZWQgd2hlbiB5b3UgbG9hZCB0aGUgbW9kdWxlLiBSZWFkCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0PiB0byBsZWFybiBtb3JlLgorCitjb25maWcgVVNCX0tPTklDQVdDCisJdHJpc3RhdGUgIlVTQiBLb25pY2EgV2ViY2FtIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB3ZWJjYW1zIGJhc2VkIG9uIGEgS29uaWNhCisJICBjaGlwc2V0LiBUaGlzIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgSW50ZWwgWUM3NiB3ZWJjYW0uCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuICBZb3UgbXVzdCBlbmFibGUKKwkgIChZIG9yIE0gaW4gY29uZmlnKSBWaWRlbyBGb3IgTGludXggKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKQorCSAgdG8gdXNlIHRoaXMgZHJpdmVyLiAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvCisJICAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrb25pY2F3Yy4KKworY29uZmlnIFVTQl9PVjUxMQorCXRyaXN0YXRlICJVU0IgT1Y1MTEgQ2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiBjYW1lcmEgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL292NTExLnR4dD4gZm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uIGFuZCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KKwkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKKwkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvdjUxMS4KKworY29uZmlnIFVTQl9TRTQwMQorCXRyaXN0YXRlICJVU0IgU0U0MDEgQ2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiBjYW1lcmEgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3NlNDAxLnR4dD4gZm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uIGFuZCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBjYW1lcmFzLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiAodW5kZXIgTXVsdGltZWRpYSBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCisJICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCisJICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2U0MDEuCisKK2NvbmZpZyBVU0JfU045QzEwMgorCXRyaXN0YXRlICJVU0IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBTT05pWCBTTjlDMTAxLAorCSAgU045QzEwMiBvciBTTjlDMTAzIFBDIENhbWVyYSBDb250cm9sbGVycy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3NuOWMxMDIudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiIHRvIHVzZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc245YzEwMi4KKworY29uZmlnIFVTQl9TVFY2ODAKKwl0cmlzdGF0ZSAiVVNCIFNUVjY4MCAoUGVuY2FtKSBDYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIGNhbWVyYSB0byB5b3VyCisJICBjb21wdXRlcidzIFVTQiBwb3J0LiBUaGlzIGluY2x1ZGVzIHRoZSBQZW5jYW0gbGluZSBvZiBjYW1lcmFzLgorCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3N0djY4MC50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBmb3IKKwkgIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAorCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHN0djY4MC4KKworY29uZmlnIFVTQl9XOTk2OENGCisJdHJpc3RhdGUgIlVTQiBXOTk2Wzg3XUNGIEpQRUcgRHVhbCBNb2RlIENhbWVyYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBJMkMgJiYgVklERU9fT1ZDQU1DSElQCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIE9WNjgxIG9yCisJICBXaW5ib25kIFc5OTY3Q0YvVzk5NjhDRiBKUEVHIFVTQiBEdWFsIE1vZGUgQ2FtZXJhIENoaXBzLgorCisJICBUaGlzIGRyaXZlciBoYXMgYW4gb3B0aW9uYWwgcGx1Z2luLCB3aGljaCBpcyBkaXN0cmlidXRlZCBhcyBhCisJICBzZXBhcmF0ZSBtb2R1bGUgb25seSAocmVsZWFzZWQgdW5kZXIgR1BMKS4gSXQgYWxsb3dzIHRvIHVzZSBoaWdoZXIKKwkgIHJlc29sdXRpb25zIGFuZCBmcmFtZXJhdGVzLCBidXQgY2Fubm90IGJlIGluY2x1ZGVkIGluIHRoZSBvZmZpY2lhbAorCSAgTGludXgga2VybmVsIGZvciBwZXJmb3JtYW5jZSBwdXJwb3Nlcy4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3c5OTY4Y2YudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBhbmQgdGhlIEkyQyBBUElzLiBJdCBuZWVkcyB0aGUKKwkgIE9tbmlWaXNpb24gQ2FtZXJhIENoaXAgc3VwcG9ydCBhcyB3ZWxsLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiwgIkkyQyBTdXBwb3J0IiBhbmQgIk9tbmlWaXNpb24gQ2FtZXJhIENoaXAKKwkgIHN1cHBvcnQiIHRvIHVzZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdzk5NjhjZi4KKworY29uZmlnIFVTQl9aQzAzMDEKKwl0cmlzdGF0ZSAiVVNCIFpDMDMwMSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgWkMwMzAxCisJICBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcC4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3pjMDMwMS50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9ucy4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgdG8gdXNlIHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6YzAzMDEuCisKK2NvbmZpZyBVU0JfUFdDCisJdHJpc3RhdGUgIlVTQiBQaGlsaXBzIENhbWVyYXMiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJLS0taGVscC0tLQorCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlc2UgUGhpbGlwcyAmIE9FTQorCSAgd2ViY2FtczoKKwkgICAqIFBoaWxpcHMgUENBNjQ1LCBQQ0E2NDYKKwkgICAqIFBoaWxpcHMgUENWQzY3NSwgUENWQzY4MCwgUENWQzY5MAorCSAgICogUGhpbGlwcyBQQ1ZDNzIwLzQwLCBQQ1ZDNzMwLCBQQ1ZDNzQwLCBQQ1ZDNzUwCisJICAgKiBBc2tleSBWQzAxMAorCSAgICogTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAsIDQwMDAsICdab29tJywgJ05vdGVib29rIFBybycKKwkgICAgIGFuZCAnT3JiaXQnLydTcGhlcmUnCisJICAgKiBTYW1zdW5nIE1QQy1DMTAsIE1QQy1DMzAKKwkgICAqIENyZWF0aXZlIFdlYmNhbSA1LCBQcm8gRXgKKwkgICAqIFNPVEVDIEFmaW5hIEV5ZQorCSAgICogVmlzaW9uaXRlIFZDUy1VQzMwMCwgVkNTLVVNMTAwCisKKwkgIFRoZSBQQ0E2MzUsIFBDVkM2NjUgYW5kIFBDVkM3MjAvMjAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKwkgIGFuZCBuZXZlciB3aWxsIGJlLCBidXQgdGhlIDY2NSBhbmQgNzIwLzIwIGFyZSBzdXBwb3J0ZWQgYnkgb3RoZXIKKwkgIGRyaXZlcnMuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9waGlsaXBzLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kCisJICBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorCisJICBUaGUgYnVpbHQtaW4gbWljcm9waG9uZSBpcyBlbmFibGVkIGJ5IHNlbGVjdGluZyBVU0IgQXVkaW8gc3VwcG9ydC4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCisJICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCisJICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHdjLgorCitlbmRtZW51ICMgVjRMIFVTQiBkZXZpY2VzCiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IGZhZjcyODMuLjFjMGU3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtMiw5ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSB2aWRlbyBjYXB0dXJlL3BsYXliYWNrIGRldmljZSBkcml2ZXJzLgogIwogCi1idHR2LW9ianMJOj0JYnR0di1kcml2ZXIubyBidHR2LWNhcmRzLm8gYnR0di1pZi5vIFwKLQkJCWJ0dHYtcmlzYy5vIGJ0dHYtdmJpLm8gYnR0di1pMmMubyBidHR2LWdwaW8ubyBcCi0JCQlidHR2LWlucHV0Lm8KIHpvcmFuLW9ianMgICAgICA6PQl6cjM2MTIwLm8genIzNjEyMF9pMmMubyB6cjM2MTIwX21lbS5vCiB6cjM2MDY3LW9ianMJOj0Jem9yYW5fcHJvY2ZzLm8gem9yYW5fZGV2aWNlLm8gXAogCQkJem9yYW5fZHJpdmVyLm8gem9yYW5fY2FyZC5vCkBAIC0xNSw4ICsxMiw4IEBACiAKIG9iai0kKENPTkZJR19WSURFT19ERVYpICs9IHZpZGVvZGV2Lm8gdjRsMi1jb21tb24ubyB2NGwxLWNvbXBhdC5vIGNvbXBhdF9pb2N0bDMyLm8KIAotb2JqLSQoQ09ORklHX1ZJREVPX0JUODQ4KSArPSBidHR2Lm8gbXNwMzQwMC5vIHR2YXVkaW8ubyBcCi0JdGRhNzQzMi5vIHRkYTk4NzUubyBpci1rYmQtaTJjLm8KK29iai0kKENPTkZJR19WSURFT19CVDg0OCkgKz0gYnQ4eHgvCitvYmotJChDT05GSUdfVklERU9fQlQ4NDgpICs9IHR2YXVkaW8ubyB0ZGE3NDMyLm8gdGRhOTg3NS5vIGlyLWtiZC1pMmMubwogb2JqLSQoQ09ORklHX1NPVU5EX1RWTUlYRVIpICs9IHR2bWl4ZXIubwogCiBvYmotJChDT05GSUdfVklERU9fWlIzNjEyMCkgKz0gem9yYW4ubwpAQCAtNDQsMTAgKzQxLDEzIEBACiBvYmotJChDT05GSUdfVklERU9fU0FBNzEzNCkgKz0gaXIta2JkLWkyYy5vIHNhYTcxMzQvCiBvYmotJChDT05GSUdfVklERU9fQ1g4OCkgKz0gY3g4OC8KIG9iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IGVtMjh4eC8KLW9iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IHNhYTcxMXgubyB0dnA1MTUwLm8KLW9iai0kKENPTkZJR19WSURFT19BVURJT19ERUNPREVSKSArPSB3bTg3NzUubyBjczUzbDMyYS5vCitvYmotJChDT05GSUdfVklERU9fRU0yOFhYKSArPSB0dnA1MTUwLm8KK29iai0kKENPTkZJR19WSURFT19NU1AzNDAwKSArPSBtc3AzNDAwLm8KK29iai0kKENPTkZJR19WSURFT19DUzUzTDMyQSkgKz0gY3M1M2wzMmEubworb2JqLSQoQ09ORklHX1ZJREVPX1dNODc3NSkgKz0gd204Nzc1Lm8KIG9iai0kKENPTkZJR19WSURFT19PVkNBTUNISVApICs9IG92Y2FtY2hpcC8KLW9iai0kKENPTkZJR19WSURFT19NWEIpICs9IHNhYTcxMTEubyB0dW5lci5vIHRkYTk4NDAubyB0ZWE2NDE1Yy5vIHRlYTY0MjAubyBteGIubworb2JqLSQoQ09ORklHX1ZJREVPX0NQSUEyKSArPSBjcGlhMi8KK29iai0kKENPTkZJR19WSURFT19NWEIpICs9IHNhYTcxMTEubyB0ZGE5ODQwLm8gdGVhNjQxNWMubyB0ZWE2NDIwLm8gbXhiLm8KIG9iai0kKENPTkZJR19WSURFT19IRVhJVU1fT1JJT04pICs9IGhleGl1bV9vcmlvbi5vCiBvYmotJChDT05GSUdfVklERU9fSEVYSVVNX0dFTUlOSSkgKz0gaGV4aXVtX2dlbWluaS5vCiBvYmotJChDT05GSUdfVklERU9fRFBDKSArPSBzYWE3MTExLm8gZHBjNzE0Ni5vCkBAIC02MSw2ICs2MSwyNyBAQAogCiBvYmotJChDT05GSUdfVklERU9fTTMyUl9BUl9NNjQyNzgpICs9IGFydi5vCiAKLW9iai0kKENPTkZJR19WSURFT19ERUNPREVSKSAgICAgKz0gc2FhNzExNS5vIGN4MjU4NDAvIHNhYTcxMjcubworb2JqLSQoQ09ORklHX1ZJREVPX0NYMjU4NDApICs9IGN4MjU4NDAvCitvYmotJChDT05GSUdfVklERU9fU0FBNzExWCkgKz0gc2FhNzExNS5vCitvYmotJChDT05GSUdfVklERU9fU0FBNzEyNykgKz0gc2FhNzEyNy5vCisKK2V0NjF4MjUxLW9ianMgICA6PSBldDYxeDI1MV9jb3JlLm8gZXQ2MXgyNTFfdGFzNTEzMGQxYi5vCit6YzAzMDEtb2JqcyAgICAgOj0gemMwMzAxX2NvcmUubyB6YzAzMDFfcGFzMjAyYmNiLm8KKworb2JqLSQoQ09ORklHX1VTQl9EQUJVU0IpICAgICAgICArPSBkYWJ1c2Iubworb2JqLSQoQ09ORklHX1VTQl9EU0JSKSAgICAgICAgICArPSBkc2JyMTAwLm8KK29iai0kKENPTkZJR19VU0JfT1Y1MTEpICAgICAgICAgKz0gb3Y1MTEubworb2JqLSQoQ09ORklHX1VTQl9TRTQwMSkgICAgICAgICArPSBzZTQwMS5vCitvYmotJChDT05GSUdfVVNCX1NUVjY4MCkgICAgICAgICs9IHN0djY4MC5vCitvYmotJChDT05GSUdfVVNCX1c5OTY4Q0YpICAgICAgICs9IHc5OTY4Y2YubworCitvYmotJChDT05GSUdfVVNCX1NOOUMxMDIpICAgICAgICs9IHNuOWMxMDIvCitvYmotJChDT05GSUdfVVNCX0VUNjFYMjUxKSAgICAgICs9IGV0NjF4MjUxLworb2JqLSQoQ09ORklHX1VTQl9QV0MpICAgICAgICAgICArPSBwd2MvCitvYmotJChDT05GSUdfVVNCX1pDMDMwMSkgICAgICAgICs9IHpjMDMwMS8KKworb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pICAgICAgICArPSB1c2J2aWRlby8KK29iai0kKENPTkZJR19VU0JfS09OSUNBV0MpICAgICAgKz0gdXNidmlkZW8vCitvYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHVzYnZpZGVvLwogCiBFWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCmluZGV4IDRjZTA3YWUuLjQ4NzA5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCkBAIC0xLDkgKzEsOSBAQAotLyogCisvKgogICogYWR2NzE3MCAtIGFkdjcxNzAsIGFkdjcxNzEgdmlkZW8gZW5jb2RlciBkcml2ZXIgdmVyc2lvbiAwLjAuMQogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiBNYXhpbSBZZXZ0eXVzaGtpbiA8bWF4QGxpbnV4bWVkaWFsYWJzLmNvbT4KICAqCi0gKiBCYXNlZCBvbiBhZHY3MTc2IGRyaXZlciBieTogICAgCisgKiBCYXNlZCBvbiBhZHY3MTc2IGRyaXZlciBieToKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTggRGF2ZSBQZXJrcyA8ZHBlcmtzQGlibS5uZXQ+CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV29sZmdhbmcgU2NoZXJyIDxzY2hlcnJAbmV0NHlvdS5uZXQ+CkBAIC01Myw3ICs1Myw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+CiAKICNkZWZpbmUgSTJDX05BTUUoeCkgKHgpLT5uYW1lCiAKQEAgLTEyNSwyNCArMTI0LDIxIEBACiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwogCQlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCQlzdHJ1Y3QgaTJjX21zZyBtc2c7CiAJCXU4IGJsb2NrX2RhdGFbMzJdOworCQlpbnQgYmxvY2tfbGVuOwogCi0JCW1zZy5hZGRyID0gY2xpZW50LT5hZGRyOwotCQltc2cuZmxhZ3MgPSAwOwogCQl3aGlsZSAobGVuID49IDIpIHsKLQkJCW1zZy5idWYgPSAoY2hhciAqKSBibG9ja19kYXRhOwotCQkJbXNnLmxlbiA9IDA7Ci0JCQlibG9ja19kYXRhW21zZy5sZW4rK10gPSByZWcgPSBkYXRhWzBdOworCQkJYmxvY2tfbGVuID0gMDsKKwkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0gcmVnID0gZGF0YVswXTsKIAkJCWRvIHsKLQkJCQlibG9ja19kYXRhW21zZy5sZW4rK10gPQorCQkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0KIAkJCQkgICAgZW5jb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwogCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgbXNnLmxlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwKLQkJCQkJCSZtc2csIDEpKSA8IDApCisJCQkJIGJsb2NrX2xlbiA8IDMyKTsKKwkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKKwkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNzcsNyArMTczLDcgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfTlRTQ1tdID0gewogCTB4MDAsIDB4MTAsCQkvLyBNUjAKIAkweDAxLCAweDIwLAkJLy8gTVIxCi0JMHgwMiwgMHgwZSwJCS8vIE1SMiBSVEMgY29udHJvbDogYml0cyAyIGFuZCAxIAorCTB4MDIsIDB4MGUsCQkvLyBNUjIgUlRDIGNvbnRyb2w6IGJpdHMgMiBhbmQgMQogCTB4MDMsIDB4ODAsCQkvLyBNUjMKIAkweDA0LCAweDMwLAkJLy8gTVI0CiAJMHgwNSwgMHgwMCwJCS8vIFJlc2VydmVkCkBAIC0yMDAsNyArMTk2LDcgQEAKIAkweDE2LCAweDAwLAkJLy8gQ0dNU19XU1NfMAogCTB4MTcsIDB4MDAsCQkvLyBDR01TX1dTU18xCiAJMHgxOCwgMHgwMCwJCS8vIENHTVNfV1NTXzIKLQkweDE5LCAweDAwLAkJLy8gVGVsZXRleHQgQ3RsIAorCTB4MTksIDB4MDAsCQkvLyBUZWxldGV4dCBDdGwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfUEFMW10gPSB7CkBAIC0zODUsNyArMzgxLDcgQEAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewogCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCiAJLnByb2JlCQkJPSAmaWdub3JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwppbmRleCA0ZTIxOGYyLi42OGU3ZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqICBhZHY3MTc1IC0gYWR2NzE3NWEgdmlkZW8gZW5jb2RlciBkcml2ZXIgdmVyc2lvbiAwLjAuMwogICoKICAqIENvcHlyaWdodCAoQykgMTk5OCBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KQEAgLTQ5LDcgKzQ5LDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KIAogI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKIApAQCAtNjgsOCArNjcsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGFkdjcxNzUgewotCXVuc2lnbmVkIGNoYXIgcmVnWzEyOF07Ci0KIAlpbnQgbm9ybTsKIAlpbnQgaW5wdXQ7CiAJaW50IGVuYWJsZTsKQEAgLTk1LDkgKzkyLDYgQEAKIAkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKIAkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQogewotCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQllbmNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKQEAgLTEyMCwyNSArMTE0LDIxIEBACiAJICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLwogCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKIAkJLyogZG8gcmF3IEkyQywgbm90IHNtYnVzIGNvbXBhdGlibGUgKi8KLQkJc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQkJc3RydWN0IGkyY19tc2cgbXNnOwogCQl1OCBibG9ja19kYXRhWzMyXTsKKwkJaW50IGJsb2NrX2xlbjsKIAotCQltc2cuYWRkciA9IGNsaWVudC0+YWRkcjsKLQkJbXNnLmZsYWdzID0gMDsKIAkJd2hpbGUgKGxlbiA+PSAyKSB7Ci0JCQltc2cuYnVmID0gKGNoYXIgKikgYmxvY2tfZGF0YTsKLQkJCW1zZy5sZW4gPSAwOwotCQkJYmxvY2tfZGF0YVttc2cubGVuKytdID0gcmVnID0gZGF0YVswXTsKKwkJCWJsb2NrX2xlbiA9IDA7CisJCQlibG9ja19kYXRhW2Jsb2NrX2xlbisrXSA9IHJlZyA9IGRhdGFbMF07CiAJCQlkbyB7Ci0JCQkJYmxvY2tfZGF0YVttc2cubGVuKytdID0KLQkJCQkgICAgZW5jb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CisJCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPSBkYXRhWzFdOworCQkJCXJlZysrOwogCQkJCWxlbiAtPSAyOwogCQkJCWRhdGEgKz0gMjsKIAkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmCi0JCQkJIG1zZy5sZW4gPCAzMik7Ci0JCQlpZiAoKHJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsCi0JCQkJCQkmbXNnLCAxKSkgPCAwKQorCQkJCSBibG9ja19sZW4gPCAzMik7CisJCQlpZiAoKHJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsCisJCQkJCQkgICBibG9ja19sZW4pKSA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTcxLDI0ICsxNjEsNiBAQAogCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA1LCAweDI1KTsKIH0KIAotI2lmZGVmIEVOQ09ERVJfRFVNUAotc3RhdGljIHZvaWQKLWR1bXAgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgaSwgajsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RyeSBkdW1wXG4iLCBJMkNfTkFNRShjbGllbnQpKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTgyIC8gODsgaSsrKSB7Ci0JCXByaW50aygiJXM6IDB4JTAyeCAtIiwgSTJDX05BTUUoY2xpZW50KSwgaSAqIDgpOwotCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQlwcmludGsoIiAweCUwMngiLCBlbmNvZGVyLT5yZWdbaSAqIDggKyBqXSk7Ci0JCX0KLQkJcHJpbnRrKCJcbiIpOwotCX0KLX0KLSNlbmRpZgotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLy8gT3V0cHV0IGZpbHRlcjogIFMtVmlkZW8gIENvbXBvc2l0ZQogCkBAIC0yNjEsNyArMjMzLDcgQEAKIAkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7CiAJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKIAkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCSAgICAgICAgYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6CiAJewpAQCAtNDA3LDE0ICszNzksNiBAQAogCX0KIAkJYnJlYWs7CiAKLSNpZmRlZiBFTkNPREVSX0RVTVAKLQljYXNlIEVOQ09ERVJfRFVNUDoKLQl7Ci0JCWR1bXAoY2xpZW50KTsKLQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00MzUsNyArMzk5LDcgQEAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewogCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCiAJLnByb2JlCQkJPSAmaWdub3JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXJ2LmMKaW5kZXggOTk0Yjc1Zi4uZGJlMDI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2Fydi5jCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tMzJyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0xMTcsNyArMTE3LDcgQEAKIAlpbnQgd2lkdGgsIGhlaWdodDsKIAlpbnQgZnJhbWVfYnl0ZXMsIGxpbmVfYnl0ZXM7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiBzdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CS8qIHZpZGVvIGRldmljZSBudW1iZXIgKGZpcnN0IGZyZWUpICovCkBAIC0xNjEsMzkgKzE2MSwzOSBAQAogewogCWludCBpOwogCi0gIAkvKiBTbGF2ZSBBZGRyZXNzICovCi0gIAlhcl9vdXRsKGFkZHIsIFBMREkyQ0RBVEEpOworCS8qIFNsYXZlIEFkZHJlc3MgKi8KKwlhcl9vdXRsKGFkZHIsIFBMREkyQ0RBVEEpOwogCXdhaXRfZm9yX3ZzeW5jKCk7CiAKLSAgCS8qIFN0YXJ0ICovCi0gIAlhcl9vdXRsKDEsIFBMREkyQ0NORCk7CisJLyogU3RhcnQgKi8KKwlhcl9vdXRsKDEsIFBMREkyQ0NORCk7CiAJd2FpdF9hY2tub3dsZWRnZSgpOwogCiAJLyogVHJhbnNmZXIgZGF0YSAxICovCi0gIAlhcl9vdXRsKGRhdGExLCBQTERJMkNEQVRBKTsKKwlhcl9vdXRsKGRhdGExLCBQTERJMkNEQVRBKTsKIAl3YWl0X2Zvcl92c3luYygpOwotICAJYXJfb3V0bChQTERJMkNTVEVOX1NURU4sIFBMREkyQ1NURU4pOworCWFyX291dGwoUExESTJDU1RFTl9TVEVOLCBQTERJMkNTVEVOKTsKIAl3YWl0X2Fja25vd2xlZGdlKCk7CiAKIAkvKiBUcmFuc2ZlciBkYXRhIDIgKi8KLSAgCWFyX291dGwoZGF0YTIsIFBMREkyQ0RBVEEpOworCWFyX291dGwoZGF0YTIsIFBMREkyQ0RBVEEpOwogCXdhaXRfZm9yX3ZzeW5jKCk7Ci0gIAlhcl9vdXRsKFBMREkyQ1NURU5fU1RFTiwgUExESTJDU1RFTik7CisJYXJfb3V0bChQTERJMkNTVEVOX1NURU4sIFBMREkyQ1NURU4pOwogCXdhaXRfYWNrbm93bGVkZ2UoKTsKIAogCWlmIChuID09IDMpIHsKIAkJLyogVHJhbnNmZXIgZGF0YSAzICovCi0JICAJYXJfb3V0bChkYXRhMywgUExESTJDREFUQSk7CisJCWFyX291dGwoZGF0YTMsIFBMREkyQ0RBVEEpOwogCQl3YWl0X2Zvcl92c3luYygpOwotCSAgCWFyX291dGwoUExESTJDU1RFTl9TVEVOLCBQTERJMkNTVEVOKTsKKwkJYXJfb3V0bChQTERJMkNTVEVOX1NURU4sIFBMREkyQ1NURU4pOwogCQl3YWl0X2Fja25vd2xlZGdlKCk7Ci0gIAl9CisJfQogCi0gIAkvKiBTdG9wICovCisJLyogU3RvcCAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykKIAkJY3B1X3JlbGF4KCk7Ci0gIAlhcl9vdXRsKDIsIFBMREkyQ0NORCk7Ci0gIAlhcl9vdXRsKDIsIFBMREkyQ0NORCk7CisJYXJfb3V0bCgyLCBQTERJMkNDTkQpOworCWFyX291dGwoMiwgUExESTJDQ05EKTsKIAogCXdoaWxlIChhcl9pbmwoUExESTJDU1RTKSAmIFBMREkyQ1NUU19CQikKIAkJY3B1X3JlbGF4KCk7CkBAIC0yMDQsMjQgKzIwNCwyNCBAQAogewogCURFQlVHKDEsICJpbml0X2lpYzpcbiIpOwogCi0gIAkvKgorCS8qCiAJICogSUNVIFNldHRpbmcgKGlpYykKIAkgKi8KLSAgCS8qIEkyQyBTZXR0aW5nICovCi0gIAlhcl9vdXRsKDB4MCwgUExESTJDQ1IpOyAgICAgIAkvKiBJMkNDUiBEaXNhYmxlICAgICAgICAgICAgICAgICAgICovCi0gIAlhcl9vdXRsKDB4MDMwMCwgUExESTJDTU9EKTsgCS8qIEkyQ01PRCBBQ0svOGItZGF0YS83Yi1hZGRyL2F1dG8gKi8KLSAgCWFyX291dGwoMHgxLCBQTERJMkNBQ0spOwkvKiBJMkNBQ0sgQUNLICAgICAgICAgICAgICAgICAgICAgICovCisJLyogSTJDIFNldHRpbmcgKi8KKwlhcl9vdXRsKDB4MCwgUExESTJDQ1IpOyAgICAgIAkvKiBJMkNDUiBEaXNhYmxlICAgICAgICAgICAgICAgICAgICovCisJYXJfb3V0bCgweDAzMDAsIFBMREkyQ01PRCk7IAkvKiBJMkNNT0QgQUNLLzhiLWRhdGEvN2ItYWRkci9hdXRvICovCisJYXJfb3V0bCgweDEsIFBMREkyQ0FDSyk7CS8qIEkyQ0FDSyBBQ0sgICAgICAgICAgICAgICAgICAgICAgKi8KIAogICAgIAkvKiBJMkMgQ0xLICovCi0gICAJLyogNTBNSC0xMDBrICovCisJLyogNTBNSC0xMDBrICovCiAJaWYgKGZyZXEgPT0gNzUpIHsKLSAgCQlhcl9vdXRsKDM2OSwgUExESTJDRlJFUSk7CS8qIEJDTEsgPSA3NU1IeiAqLworCQlhcl9vdXRsKDM2OSwgUExESTJDRlJFUSk7CS8qIEJDTEsgPSA3NU1IeiAqLwogCX0gZWxzZSBpZiAoZnJlcSA9PSA1MCkgewogCQlhcl9vdXRsKDI0NCwgUExESTJDRlJFUSk7CS8qIEJDTEsgPSA1ME1IeiAqLwogCX0gZWxzZSB7CiAJCWFyX291dGwoMjQ0LCBQTERJMkNGUkVRKTsJLyogZGVmYXVsdDogQkNMSyA9IDUwTUh6ICovCiAJfQotICAJYXJfb3V0bCgweDEsIFBMREkyQ0NSKTsgCS8qIEkyQ0NSIEVuYWJsZSAqLworCWFyX291dGwoMHgxLCBQTERJMkNDUik7IAkvKiBJMkNDUiBFbmFibGUgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTMsNyArMjUzLDcgQEAKIAogCS8qCiAJICogY2hlY2sgSENPVU5UIGJlY2F1c2Ugd2UgY2Fubm90IGNoZWNrIHZlcnRpY2FsIHN5bmMuCi0gCSAqLworCSAqLwogCWZvciAoOyB0bW91dCA+PSAwOyB0bW91dC0tKSB7CiAJCWwgPSBhcl9pbmwoQVJWSENPVU5UKTsKIAkJaWYgKGwgPT0gZXhwX2xpbmUpCkBAIC0yODgsNyArMjg4LDcgQEAKIAlpZiAoYXItPm1vZGUgPT0gQVJfTU9ERV9OT1JNQUwpCiAJCWFydmNyMSB8PSBBUlZDUjFfTk9STUFMOwogCi0JZG93bigmYXItPmxvY2spOworCW11dGV4X2xvY2soJmFyLT5sb2NrKTsKIAogI2lmIFVTRV9JTlQKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0zOTIsNyArMzkyLDcgQEAKIAl9CiAJREVCVUcoMSwgInJldCA9ICVkXG4iLCByZXQpOwogb3V0X3VwOgotCXVwKCZhci0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhci0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDU2LDcgKzQ1Niw3IEBACiAJCSAgICAody0+d2lkdGggIT0gQVJfV0lEVEhfUVZHQSB8fCB3LT5oZWlnaHQgIT0gQVJfSEVJR0hUX1FWR0EpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCi0JCWRvd24oJmFyLT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmYXItPmxvY2spOwogCQlhci0+d2lkdGggPSB3LT53aWR0aDsKIAkJYXItPmhlaWdodCA9IHctPmhlaWdodDsKIAkJaWYgKGFyLT53aWR0aCA9PSBBUl9XSURUSF9WR0EpIHsKQEAgLTQ3Myw3ICs0NzMsNyBAQAogCQkJYXItPmxpbmVfYnl0ZXMgPSBBUl9MSU5FX0JZVEVTX1FWR0E7CiAJCQlhci0+bW9kZSA9IEFSX01PREVfSU5URVJMQUNFOwogCQl9Ci0JCXVwKCZhci0+bG9jayk7CisJCW11dGV4X3VubG9jaygmYXItPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NHRkJVRjoKQEAgLTU2Miw4ICs1NjIsOCBAQAogCQkvKiBvcGVyYXRpb25zIGZvciBpbnRlcmxhY2UgbW9kZSAqLwogCQlpZiAoIGxpbmVfY291bnQgPCAoQVJfSEVJR0hUX1ZHQS8yKSApIAkvKiBldmVuIGxpbmUgKi8KIAkJCWxpbmVfbnVtYmVyID0gKGxpbmVfY291bnQgPDwgMSk7Ci0JCWVsc2UgCQkgIAkJCS8qIG9kZCBsaW5lICovCi0gCQkJbGluZV9udW1iZXIgPQorCQllbHNlIAkJCQkJLyogb2RkIGxpbmUgKi8KKwkJCWxpbmVfbnVtYmVyID0KIAkJCSgoKGxpbmVfY291bnQgLSAoQVJfSEVJR0hUX1ZHQS8yKSkgPDwgMSkgKyAxKTsKIAl9IGVsc2UgewogCQlsaW5lX251bWJlciA9IGxpbmVfY291bnQ7CkBAIC02NTEsNyArNjUxLDcgQEAKIAkJY3IgfD0gQVJWQ1IxX05PUk1BTDsKIAlhcl9vdXRsKGNyLCBBUlZDUjEpOwogCi0gIAkvKgorCS8qCiAJICogSW5pdGlhbGl6ZSBJSUMgc28gdGhhdCBDUFUgY2FuIGNvbW11bmljYXRlIHdpdGggQVIgTFNJLAogCSAqIGFuZCBzZW5kIGJvb3QgY29tbWFuZHMgdG8gQVIgTFNJLgogCSAqLwpAQCAtNzM0LDcgKzczNCw3IEBACiB2b2lkIGFyX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQogewogCXN0cnVjdCBhcl9kZXZpY2UgKmFyID0gdmZkLT5wcml2OwotCWRvd24oJmFyLT5sb2NrKTsKKwltdXRleF9sb2NrKCZhci0+bG9jayk7CiAJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKIH0KIApAQCAtODI0LDcgKzgyNCw3IEBACiAJCWFyLT5saW5lX2J5dGVzCT0gQVJfTElORV9CWVRFU19RVkdBOwogCQlhci0+bW9kZQk9IEFSX01PREVfSU5URVJMQUNFOwogCX0KLQlpbml0X01VVEVYKCZhci0+bG9jayk7CisJbXV0ZXhfaW5pdCgmYXItPmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFyLT53YWl0KTsKIAogI2lmIFVTRV9JTlQKQEAgLTg0Niw3ICs4NDYsNyBAQAogCSAqIHNvIHJlZ2lzdGVyIHZpZGVvIGRldmljZSBhcyBhIGZyYW1lIGdyYWJiZXIgdHlwZS4KIAkgKiBkZXZpY2UgaXMgbmFtZWQgInZpZGVvWzAtNjRdIi4KIAkgKiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBpbml0aWFsaXplcyBoL3cgdXNpbmcgYXJfaW5pdGlhbGl6ZSgpLgotIAkgKi8KKwkgKi8KIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGFyLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgIT0gMCkgewogCQkvKiByZXR1cm4gLTEsIC1FTkZJTEUoZnVsbCkgb3Igb3RoZXJzICovCiAJCXByaW50aygiYXJ2OiByZWdpc3RlciB2aWRlbyAoQ29sb3VyIEFSKSBmYWlsZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwppbmRleCBkNjQ0Nzc5Li5lN2IzOGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogIGJ0ODE5IC0gQlQ4MTlBIFZpZGVvU3RyZWFtIERlY29kZXIgKFJvY2t3ZWxsIFBhcnQpCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5IE1pa2UgQmVybnNvbiA8bWlrZUBtbGIub3JnPgpAQCAtNiw3ICs2LDcgQEAKICAqCiAgKiBNb2RpZmljYXRpb25zIGZvciBMTUwzMy9EQzEwcGx1cyB1bmlmaWVkIGRyaXZlcgogICogQ29weXJpZ2h0IChDKSAyMDAwIFNlcmd1ZWkgTWlyaWRvbm92IDxtaXJzZXZAY2ljZXNlLm14PgotICogIAorICoKICAqIENoYW5nZXMgYnkgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgogICogICAgLSBtb3ZlZCBvdmVyIHRvIGxpbnV4Pj0yLjQueCBpMmMgcHJvdG9jb2wgKDkvOS8yMDAyKQogICoKQEAgLTUzLDcgKzUzLDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KIAogI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKIApAQCAtMTQxLDI0ICsxNDAsMjEgQEAKIAlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CiAJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCiAJCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCQlzdHJ1Y3QgaTJjX21zZyBtc2c7CiAJCXU4IGJsb2NrX2RhdGFbMzJdOworCQlpbnQgYmxvY2tfbGVuOwogCi0JCW1zZy5hZGRyID0gY2xpZW50LT5hZGRyOwotCQltc2cuZmxhZ3MgPSAwOwogCQl3aGlsZSAobGVuID49IDIpIHsKLQkJCW1zZy5idWYgPSAoY2hhciAqKSBibG9ja19kYXRhOwotCQkJbXNnLmxlbiA9IDA7Ci0JCQlibG9ja19kYXRhW21zZy5sZW4rK10gPSByZWcgPSBkYXRhWzBdOworCQkJYmxvY2tfbGVuID0gMDsKKwkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0gcmVnID0gZGF0YVswXTsKIAkJCWRvIHsKLQkJCQlibG9ja19kYXRhW21zZy5sZW4rK10gPQorCQkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0KIAkJCQkgICAgZGVjb2Rlci0+cmVnW3JlZysrXSA9IGRhdGFbMV07CiAJCQkJbGVuIC09IDI7CiAJCQkJZGF0YSArPSAyOwogCQkJfSB3aGlsZSAobGVuID49IDIgJiYgZGF0YVswXSA9PSByZWcgJiYKLQkJCQkgbXNnLmxlbiA8IDMyKTsKLQkJCWlmICgocmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwKLQkJCQkJCSZtc2csIDEpKSA8IDApCisJCQkJIGJsb2NrX2xlbiA8IDMyKTsKKwkJCWlmICgocmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYmxvY2tfZGF0YSwKKwkJCQkJCSAgIGJsb2NrX2xlbikpIDwgMCkKIAkJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CkBAIC0yMTAsOSArMjA2LDkgQEAKIAkJCQkJICAgQnVnIGluIHRoZSBidDgxOSBzdGVwcGluZyBvbiBteSBib2FyZD8KIAkJCQkJKi8KIAkJMHgxNCwgMHgwMCwJLyogMHgxNCBWZXJ0aWFsIFNjYWxpbmcgbHNiICovCi0JCTB4MTYsIDB4MDcsCS8qIDB4MTYgVmlkZW8gVGltaW5nIFBvbGFyaXR5IAorCQkweDE2LCAweDA3LAkvKiAweDE2IFZpZGVvIFRpbWluZyBQb2xhcml0eQogCQkJCQkgICBBQ1RJVkU9YWN0aXZlIGxvdwotCQkJCQkgICBGSUVMRDogaGlnaD1vZGQsIAorCQkJCQkgICBGSUVMRDogaGlnaD1vZGQsCiAJCQkJCSAgIHZyZXNldD1hY3RpdmUgaGlnaCwKIAkJCQkJICAgaHJlc2V0PWFjdGl2ZSBoaWdoICovCiAJCTB4MTgsIDB4NjgsCS8qIDB4MTggQUdDIERlbGF5ICovCkBAIC01MDEsNyArNDk3LDcgQEAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewogCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCiAJLnByb2JlCQkJPSAmaWdub3JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCmluZGV4IDkwOWI1OTMuLmFmM2I2MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBidDg1NiAtIEJUODU2QSBEaWdpdGFsIFZpZGVvIEVuY29kZXIgKFJvY2t3ZWxsIFBhcnQpCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5IE1pa2UgQmVybnNvbiA8bWlrZUBtbGIub3JnPgpAQCAtNTMsNyArNTMsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogCiAjZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQogCkBAIC03MSwxNyArNzAsMTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2RlZmluZSBSRUdfT0ZGU0VUICAweENFCisjZGVmaW5lIFJFR19PRkZTRVQJMHhEQQorI2RlZmluZSBCVDg1Nl9OUl9SRUcJNgogCiBzdHJ1Y3QgYnQ4NTYgewotCXVuc2lnbmVkIGNoYXIgcmVnWzMyXTsKKwl1bnNpZ25lZCBjaGFyIHJlZ1tCVDg1Nl9OUl9SRUddOwogCiAJaW50IG5vcm07CiAJaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CiB9OwogCiAjZGVmaW5lICAgSTJDX0JUODU2ICAgICAgICAweDg4CkBAIC0xMjAsOCArMTE2LDggQEAKIAlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlciBkdW1wOiIsIEkyQ19OQU1FKGNsaWVudCkpOwotCWZvciAoaSA9IDB4ZDY7IGkgPD0gMHhkZTsgaSArPSAyKQotCQlwcmludGsoIiAlMDJ4IiwgZW5jb2Rlci0+cmVnW2kgLSBSRUdfT0ZGU0VUXSk7CisJZm9yIChpID0gMDsgaSA8IEJUODU2X05SX1JFRzsgaSArPSAyKQorCQlwcmludGsoIiAlMDJ4IiwgZW5jb2Rlci0+cmVnW2ldKTsKIAlwcmludGsoIlxuIik7CiB9CiAKQEAgLTI4OSw3ICsyODUsNyBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0JUODU2ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewogCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCiAJLnByb2JlCQkJPSAmaWdub3JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTQ3N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKQEAgLTAsMCArMSwyNSBAQAorY29uZmlnIFZJREVPX0JUODQ4CisJdHJpc3RhdGUgIkJUODQ4IFZpZGVvIEZvciBMaW51eCIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDCisJc2VsZWN0IEkyQ19BTEdPQklUCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBWSURFT19CVENYCisJc2VsZWN0IFZJREVPX0JVRgorCXNlbGVjdCBWSURFT19JUgorCXNlbGVjdCBWSURFT19UVU5FUgorCXNlbGVjdCBWSURFT19UVkVFUFJPTQorCXNlbGVjdCBWSURFT19NU1AzNDAwCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgQlQ4NDggYmFzZWQgZnJhbWUgZ3JhYmJlci9vdmVybGF5IGJvYXJkcy4gVGhpcyBpbmNsdWRlcworCSAgdGhlIE1pcm8sIEhhdXBwYXVnZSBhbmQgU1RCIGJvYXJkcy4gUGxlYXNlIHJlYWQgdGhlIG1hdGVyaWFsIGluCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYnR0di4KKworY29uZmlnIFZJREVPX0JUODQ4X0RWQgorCWJvb2wgIkRWQi9BVFNDIFN1cHBvcnQgZm9yIGJ0ODc4IGJhc2VkIFRWIGNhcmRzIgorCWRlcGVuZHMgb24gVklERU9fQlQ4NDggJiYgRFZCX0NPUkUKKwlzZWxlY3QgRFZCX0JUOFhYCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQi9BVFNDIGNhcmRzIGJhc2VkIG9uIHRoZSBCVDg3OCBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzNTBmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvTWFrZWZpbGUKQEAgLTAsMCArMSwxMiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIHZpZGVvIGNhcHR1cmUvcGxheWJhY2sgZGV2aWNlIGRyaXZlcnMuCisjCisKK2J0dHYtb2JqcyAgICAgIDo9ICAgICAgYnR0di1kcml2ZXIubyBidHR2LWNhcmRzLm8gYnR0di1pZi5vIFwKKwkJICAgICAgIGJ0dHYtcmlzYy5vIGJ0dHYtdmJpLm8gYnR0di1pMmMubyBidHR2LWdwaW8ubyBcCisJCSAgICAgICBidHR2LWlucHV0Lm8KKworb2JqLSQoQ09ORklHX1ZJREVPX0JUODQ4KSArPSBidHR2Lm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JJChzcmMpLy4uCitFWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0ODMyLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0ODMyLmMKaW5kZXggY2M1NGI2Mi4uYTUxODc2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnQ4MzIuYwpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjaW5jbHVkZSAiYnR0di5oIgpAQCAtMzksNyArMzgsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0JUODMyX0FMVDE+PjEsIEkyQ19CVDgzMl9BTFQyPj4xLAorc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0FERFJfQlQ4MzJfQUxUMT4+MSwgSTJDX0FERFJfQlQ4MzJfQUxUMj4+MSwKIAkJCQkgICAgICAgSTJDX0NMSUVOVF9FTkQgfTsKIEkyQ19DTElFTlRfSU5TTU9EOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODMyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0ODMyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MzIuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idDgzMi5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODQ4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0ODQ4LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NDguaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idDg0OC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1jYXJkcy5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCA5NzQ5ZDZlLi5mMjA5YTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtMzksNiArMzksNyBAQAogCiAjaW5jbHVkZSAiYnR0dnAuaCIKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3R2YXVkaW8uaD4KIAogLyogZndkIGRlY2wgKi8KIHN0YXRpYyB2b2lkIGJvb3RfbXNwMzR4eChzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgcGluKTsKQEAgLTEzNyw2ICsxMzgsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhwbGwsInNwZWNpZnkgaW5zdGFsbGVkIGNyeXN0YWwgKDA9bm9uZSwgMjg9MjggTUh6LCAzNT0zNSBNSHopIik7CiBNT0RVTEVfUEFSTV9ERVNDKHR1bmVyLCJzcGVjaWZ5IGluc3RhbGxlZCB0dW5lciB0eXBlIik7CiBNT0RVTEVfUEFSTV9ERVNDKGF1dG9sb2FkLCJhdXRvbWF0aWNhbGx5IGxvYWQgaTJjIG1vZHVsZXMgbGlrZSB0dW5lci5vLCBkZWZhdWx0IGlzIDEgKHllcykiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9fb3ZlcmxheSwiYWxsb3cgb3ZlcnJpZGUgb3ZlcmxheSBkZWZhdWx0ICgwIGRpc2FibGVzLCAxIGVuYWJsZXMpIgorCQkiIFtzb21lIFZJQS9TSVMgY2hpcHNldHMgYXJlIGtub3duIHRvIGhhdmUgcHJvYmxlbSB3aXRoIG92ZXJsYXldIik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBsaXN0IG9mIGNhcmQgSURzIGZvciBidDg3OCsgY2FyZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjc1LDcgKzI3OCw2IEBACiAJeyAweDAzMTE2MDAwLCBCVFRWX0JPQVJEX1NFTlNPUkFZMzExLCAgICJTZW5zb3JheSAzMTEiIH0sCiAJeyAweDAwNzkwZTExLCBCVFRWX0JPQVJEX1dJTkRWUiwgICAgICAgICJDYW5vcHVzIFdpbkRWUiBQQ0kiIH0sCiAJeyAweGEwZmNhMWEwLCBCVFRWX0JPQVJEX1pPTFRSSVgsICAgICAgICJGYWNlIHRvIEZhY2UgVHZtYXgiIH0sCi0JeyAweDIwMDA3MDYzLCBCVFRWX0JPQVJEX1BDX0hEVFYsICAgICAgICJwY0hEVFYgSEQtMjAwMCBUViJ9LAogCXsgMHg4MmIyYWE2YSwgQlRUVl9CT0FSRF9TSU1VU19HVkMxMTAwLCAiU0lNVVMgR1ZDMTEwMCIgfSwKIAl7IDB4MTQ2Y2FhMGMsIEJUVFZfQk9BUkRfUFY5NTEsICAgICAgICAgIml0dW5lciBzcGVjdHJhOCIgfSwKIAl7IDB4MjAwYTEyOTUsIEJUVFZfQk9BUkRfUFhDMjAwLCAgICAgICAgIkltYWdlTmF0aW9uIFBYQzIwMEEiIH0sCkBAIC0yOTcsMTMgKzI5OSwxNCBAQAogCSogeyAweDEzZWIwMDcwLCBCVFRWX0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0IsICAiSGF1cHBhdWdlIEltcGFjdFZDQiIgfSwgKi8KIAogCS8qIERWQiBjYXJkcyAodXNpbmcgcGNpIGZ1bmN0aW9uIC4xIGZvciBtcGVnIGRhdGEgeGZlcikgKi8KLQl7IDB4MDEwMTAwNzEsIEJUVFZfQk9BUkRfTkVCVUxBX0RJR0lUViwgIk5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYiIH0sCi0JeyAweDA3NjExNDYxLCBCVFRWX0JPQVJEX0FWRFZCVF83NjEsICAgICJBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MSIgfSwKIAl7IDB4MDAxYzExYmQsIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQsICAgIlBpbm5hY2xlIFBDVFYgU2F0IiB9LAorCXsgMHgwMTAxMDA3MSwgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWLCAiTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUViIgfSwKKwl7IDB4MjAwMDcwNjMsIEJUVFZfQk9BUkRfUENfSERUViwgICAgICAgInBjSERUViBIRC0yMDAwIFRWIn0sCiAJeyAweDAwMjYxMWJkLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULCAgICJQaW5uYWNsZSBQQ1RWIFNBVCBDSSIgfSwKIAl7IDB4MDAwMTE4MjIsIEJUVFZfQk9BUkRfVFdJTkhBTl9EU1QsICAgIlR3aW5oYW4gVmlzaW9uUGx1cyBEVkIiIH0sCiAJeyAweGZjMDAyNzBmLCBCVFRWX0JPQVJEX1RXSU5IQU5fRFNULCAgICJDaGFpblRlY2ggZGlnaXRvcCBEU1QtMTAwMCBEVkItUyIgfSwKIAl7IDB4MDc3MTE0NjEsIEJUVFZfQk9BUkRfQVZEVkJUXzc3MSwgICAgIkFWZXJtZWRpYSBBdmVyVFYgRFZCLVQgNzcxIiB9LAorCXsgMHgwNzYxMTQ2MSwgQlRUVl9CT0FSRF9BVkRWQlRfNzYxLCAgICAiQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEiIH0sCiAJeyAweGRiMTAxOGFjLCBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURSwgICAgIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIgfSwKIAl7IDB4ZDUwMDE4YWMsIEJUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEUsICAgICJEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSIgfSwKIApAQCAtMzM0LDcgKzMzNyw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDIsIDAsIDAsIDAsIDEwIH0sCisJCS5ncGlvbXV4IAk9IHsgMiwgMCwgMCwgMCB9LAorCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMzQ4LDcgKzM1Miw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDcsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMCwgMSwgMiwgMywgNCB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDIsIDMgfSwKKwkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMzYyLDcgKzM2Nyw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDcsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgNCwgMCwgMiwgMywgMSB9LAorCQkuZ3Bpb211eCAJPSB7IDQsIDAsIDIsIDMgfSwKKwkJLmdwaW9tdXRlIAk9IDEsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCkBAIC0zODEsNyArMzg3LDcgQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gNCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMzk1LDcgKzQwMSw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDMsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCi0JCS5hdWRpb211eAk9IHsgMCwgMSwgMCwgMSwgMyB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDAsIDEgfSwKKwkJLmdwaW9tdXRlIAk9IDMsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtNDA5LDcgKzQxNiw3IEBACiAJCS5zdmhzCQk9IDMsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCiAJCS5ncGlvbWFzawk9IDB4MGYsCi0JCS5hdWRpb211eAk9IHsgMHgwYywgMHgwNCwgMHgwOCwgMHgwNCwgMCB9LAorCQkuZ3Bpb211eCAJPSB7IDB4MGMsIDB4MDQsIDB4MDgsIDB4MDQgfSwKIAkJLyogICAgICAgICAgICAgICAgMHgwNCBmb3Igc29tZSBjYXJkcyA/PyAqLwogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gLTEsCkBAIC00MjYsNyArNDMzLDcgQEAKIAkJLnN2aHMJCT0gMywKIAkJLmdwaW9tYXNrCT0gMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDAgfSwKLQkJLmF1ZGlvbXV4CT0geyAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gLTEsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTQ0Miw3ICs0NDksOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGMwMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAwLCAweGMwMCwgMHg4MDAsIDB4NDAwLCAweGMwMCwgMCB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDB4YzAwLCAweDgwMCwgMHg0MDAgfSwKKwkJLmdwaW9tdXRlIAk9IDB4YzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IC0xLApAQCAtNDU3LDcgKzQ2NSw3IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDMsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMSwgMSwgMiwgMywgMCB9LAorCQkuZ3Bpb211eCAJPSB7IDEsIDEsIDIsIDMgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ19QQUwsCkBAIC00NzIsNyArNDgwLDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwZiwgLyogb2xkOiA3ICovCiAJCS5tdXhzZWwJCT0geyAyLCAwLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMCwgMSwgMiwgMywgNCB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDIsIDMgfSwKKwkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gLTEsCkBAIC00ODcsNyArNDk2LDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgzMDE0ZiwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAweDIwMDAxLDB4MTAwMDEsIDAsIDAsMTAgfSwKKwkJLmdwaW9tdXggCT0geyAweDIwMDAxLDB4MTAwMDEsIDAsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gLTEsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTUwMyw3ICs1MTMsNyBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAxMywgMTQsIDExLCA3LCAwLCAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMTMsIDE0LCAxMSwgNyB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gLTEsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTUxNyw3ICs1MjcsNyBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAxMywgMTQsIDExLCA3LCAwLCAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMTMsIDE0LCAxMSwgNyB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5tc3AzNHh4X2FsdCAgICA9IDEsCiAJCS5wbGwJCT0gUExMXzI4LApAQCAtNTM1LDcgKzU0NSw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDcsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMCwgMiwgMSwgMywgNCB9LCAvKiBvbGQ6IHswLCAxLCAyLCAzLCA0fSAqLworCQkuZ3Bpb211eCAJPSB7IDAsIDIsIDEsIDMgfSwgLyogb2xkOiB7MCwgMSwgMiwgMywgNH0gKi8KKwkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gLTEsCkBAIC01NTAsNyArNTYxLDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMCAsIDAsIDEgLCAwLCAxMCB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDEsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gLTEsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTU2OCwxMCArNTgwLDExIEBACiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCiAJI2lmIDAKIAkJLyogb2xkICovCi0JCS5hdWRpb211eAk9IHsgMHgwMWMwMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCwgMHgwMDIwMDAsIDAgfSwKKwkJLmdwaW9tdXggCT0geyAweDAxYzAwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwLCAweDAwMjAwMCB9LAogCSNlbHNlCiAJCS8qIDIwMDMtMTAtMjAgYnkgIkFudG9uIEEuIEFyYXBvdiIgPGFyYXBvdkBtYWlsLnJ1PiAqLwotCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDAxZTAwLCAwLCAweDAxODAwMCwgMHgwMTQwMDAsIDB4MDAyMDAwLCAwIH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCB9LAorCQkuZ3Bpb211dGUgCT0gMHgwMDIwMDAsCiAJI2VuZGlmCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCkBAIC01ODUsNyArNTk4LDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHg4MzAwZjgsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLDAgfSwKLQkJLmF1ZGlvbXV4CT0geyAweDRmYTAwNywweGNmYTAwNywweGNmYTAwNywweGNmYTAwNywweGNmYTAwNywweGNmYTAwNyB9LAorCQkuZ3Bpb211eCAJPSB7IDB4NGZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3IH0sCisJCS5ncGlvbXV0ZSAJPSAweGNmYTAwNywKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IC0xLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC02MDEsNyArNjE1LDcgQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAxLCAwLCAwLCAwLCAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMSwgMCwgMCwgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gLTEsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTYxNSw3ICs2MjksNyBAQAogCQkuc3ZocwkJPSAtMSwKIAkJLmdwaW9tYXNrCT0gMHg4ZGZmMDAsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMCB9LAorCQkuZ3Bpb211eCAJPSB7IDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkudHVuZXJfdHlwZQk9IC0xLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC02NDIsNyArNjU2LDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxODAwLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTY1Niw3ICs2NzEsOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGMwMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAwLCAxLCAweDgwMCwgMHg0MDAsIDB4YzAwLCAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMHg4MDAsIDB4NDAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweGMwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKQEAgLTY3Miw3ICs2ODgsNyBAQAogCQkuZ3Bpb21hc2sJPSA3LAogCQkubXV4c2VsCQk9IHsgMiwgMywgLTEgfSwKIAkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKLQkJLmF1ZGlvbXV4CT0geyAwLCAwLCAwLCAwLCAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMCwgMCwgMCwgMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUxQU19UU0JCNV9QQUxfSSwKQEAgLTY4OSw3ICs3MDUsOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGUwMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0gezB4NDAwLCAweDQwMCwgMHg0MDAsIDB4NDAwLCAweGMwMCB9LAorCQkuZ3Bpb211eCAJPSB7MHg0MDAsIDB4NDAwLCAweDQwMCwgMHg0MDAgfSwKKwkJLmdwaW9tdXRlIAk9IDB4YzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IC0xLApAQCAtNzA1LDcgKzcyMiw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MWYwZmZmLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAsIDB4NDAwMDAgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDQwMDAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTcyMCw3ICs3MzgsOCBAQAogCQkuc3ZocwkJPSAzLAogCQkuZ3Bpb21hc2sJPSA3LAogCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDAsIDEsIDIsIDMsIDQgfSwKKwkJLmdwaW9tdXggCT0geyAwLCAxLCAyLCAzIH0sCisJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gLTEsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTczNCw3ICs3NTMsOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4MDAsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwLCAweDE4MDAgfSwKKwkJLmdwaW9tdXggCT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKKwkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfU0VDQU0sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTc1MCw3ICs3NzAsOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDFmMGZmZiwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAweDAwMDAwLCAweDQwMDAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMHgwMDAwMCB9LAorCQkuZ3Bpb211dGUgCT0gMHg0MDAwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC03OTcsNyArODE4LDcgQEAKIAkJLnN2aHMJCT0gMSwgLyogd2FzOiA0ICovCiAJCS5ncGlvbWFzawk9IDAsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwfSwKLQkJLmF1ZGlvbXV4CT0geyAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gLTEsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTgxMyw3ICs4MzQsOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4MDAsICAvKiAweDhkZmUwMCAqLwogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDAsIDB4MDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDB4MDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKKwkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IC0xLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC04MjcsNyArODQ5LDcgQEAKIAkJLnN2aHMJCT0gMywKIAkJLmdwaW9tYXNrCT0gMSwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAxLCAwLCAwLCAwLCAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMSwgMCwgMCwgMCB9LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTg0Myw3ICs4NjUsNyBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAwLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDAgfSwKKwkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnR1bmVyX3R5cGUJPSA0LAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC04NTcsNyArODc5LDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhmZmZmMDAsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMHg1MDAsIDAsIDB4MzAwLCAweDkwMCwgMHg5MDAgfSwKKwkJLmdwaW9tdXggCT0geyAweDUwMCwgMCwgMHgzMDAsIDB4OTAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDkwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKQEAgLTg3MywxMSArODk2LDEyIEBACiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLCAwIH0sIC8qIFRWLCBDVmlkLCBTVmlkLCBDVmlkIG92ZXIgU1ZpZCBjb25uZWN0b3IgKi8KIAkjaWYgMAogCQkuZ3Bpb21hc2sJPSAweGMzMzAwMCwKLQkJLmF1ZGlvbXV4CT0geyAweDQyMjAwMCwweDEwMDAsMHgwMDAwLDB4NjIwMDAwLDB4ODAwMDAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMHg0MjIwMDAsMHgxMDAwLDB4MDAwMCwweDYyMDAwMCwweDgwMDAwMCB9LAogCSNlbHNlCiAJCS8qIEFsZXhhbmRlciBWYXJha2luIDxhdmFyYWtpbkBob3RtYWlsLmNvbT4gW3N0ZXJlbyB2ZXJzaW9uXSAqLwogCQkuZ3Bpb21hc2sJPSAweGIzMzAwMCwKLQkJLmF1ZGlvbXV4CT0geyAweDEyMjAwMCwweDEwMDAsMHgwMDAwLDB4NjIwMDAwLDB4ODAwMDAwIH0sCisJCS5ncGlvbXV4IAk9IHsgMHgxMjIwMDAsMHgxMDAwLDB4MDAwMCwweDYyMDAwMCB9LAorCQkuZ3Bpb211dGUgCT0gMHg4MDAwMDAsCiAJI2VuZGlmCiAJCS8qIEF1ZGlvIFJvdXRpbmcgZm9yICJXaW5GYXN0IDIwMDAgWFAiIChubyB0diBzdGVyZW8gISkKIAkJCWdwaW8yMyAtLSBoZWY0MDUyOm5FbmFibGUgKDB4ODAwMDAwKQpAQCAtOTA3LDcgKzkzMSw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAorCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtOTIzLDcgKzk0OCw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAsIDB4MTgwMCwgMCB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAorCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtOTM4LDcgKzk2NCw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZmYsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYywgMHgyOSwgMHgyOSB9LAorCQkuZ3Bpb211eCAJPSB7IDB4MjEsIDB4MjAsIDB4MjQsIDB4MmMgfSwKKwkJLmdwaW9tdXRlIAk9IDB4MjksCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gLTEsCkBAIC05NTMsNyArOTgwLDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHg1NTFlMDAsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCi0JCS5hdWRpb211eAk9IHsgMHg1NTE0MDAsIDB4NTUxMjAwLCAwLCAwLCAweDU1MWMwMCwgMHg1NTEyMDAgfSwKKwkJLmdwaW9tdXggCT0geyAweDU1MTQwMCwgMHg1NTEyMDAsIDAsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDB4NTUxYzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IDEsCkBAIC05NjksNyArOTk3LDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwMzAwMEYsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMiwgMHhkMDAwMSwgMCwgMCwgMSB9LAorCQkuZ3Bpb211eCAJPSB7IDIsIDB4ZDAwMDEsIDAsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDEsCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gLTEsCkBAIC05ODYsNyArMTAxNSw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDcsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgNCwgMCwgMiwgMywgMSB9LAorCQkuZ3Bpb211eCAJPSB7IDQsIDAsIDIsIDMgfSwKKwkJLmdwaW9tdXRlIAk9IDEsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCkBAIC0xMDAzLDcgKzEwMzMsNyBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAxMywgNCwgMTEsIDcsIDAsIDAgfSwKKwkJLmdwaW9tdXggCT0geyAxMywgNCwgMTEsIDcgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKQEAgLTEwMjAsNyArMTA1MCw3IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDAsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKLQkJLmF1ZGlvbXV4CT0geyAwLCAwLCAwLCAwLCAwfSwKKwkJLmdwaW9tdXggCT0geyAwLCAwLCAwLCAwfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LApAQCAtMTAzNiw3ICsxMDY2LDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhlMDBiLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDB4ZmY5ZmY2LCAweGZmOWZmNiwgMHhmZjFmZjcsIDAsIDB4ZmYzZmZjIH0sCisJCS5ncGlvbXV4IAk9IHsgMHhmZjlmZjYsIDB4ZmY5ZmY2LCAweGZmMWZmNywgMCB9LAorCQkuZ3Bpb211dGUgCT0gMHhmZjNmZmMsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMTA1Miw3ICsxMDgzLDggQEAKIAkJLnN2aHMJCT0gLTEsCiAJCS5ncGlvbWFzawk9IDMsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMSwgMSwgMCwgMiwgMyB9LAorCQkuZ3Bpb211eCAJPSB7IDEsIDEsIDAsIDIgfSwKKwkJLmdwaW9tdXRlIAk9IDMsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfTk9ORSwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKQEAgLTEwNjcsNyArMTA5OSw3IEBACiAJCS5zdmhzCQk9IDMsCiAJCS5ncGlvbWFzawk9IDAsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwIH0sCi0JCS5hdWRpb211eAk9IHsgMCB9LAorCQkuZ3Bpb211eCAJPSB7IDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKQEAgLTEwODIsNyArMTExNCw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4YmNmMDNmLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDB4YmM4MDNmLCAweGJjOTAzZiwgMHhiY2IwM2YsIDAsIDB4YmNiMDNmIH0sCisJCS5ncGlvbXV4IAk9IHsgMHhiYzgwM2YsIDB4YmM5MDNmLCAweGJjYjAzZiwgMCB9LAorCQkuZ3Bpb211dGUgCT0gMHhiY2IwM2YsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gMjEsCkBAIC0xMDk3LDcgKzExMzAsOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDcwMDAwLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAsIDB4NDAwMDAsIDB4MjAwMDAgfSwKKwkJLmdwaW9tdXggCT0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDQwMDAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMzUsCkBAIC0xMTE2LDcgKzExNTAsOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0gezIsMCwwLDAsMSB9LAorCQkuZ3Bpb211eCAJPSB7MiwwLDAsMCB9LAorCQkuZ3Bpb211dGUgCT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSAtMSwKQEAgLTExMzEsNyArMTE2Niw3IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MDEwZjAwLAogCQkubXV4c2VsCQk9IHsyLCAzLCAwLCAwIH0sCi0JCS5hdWRpb211eAk9IHsweDEwMDAwLCAwLCAweDEwMDAwLCAwLCAwLCAwIH0sCisJCS5ncGlvbXV4IAk9IHsweDEwMDAwLCAwLCAweDEwMDAwLCAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfQUxQU19UU0hDNl9OVFNDLApAQCAtMTE0OCw3ICsxMTgzLDggQEAKIAkJLmdwaW9tYXNrCT0gMHhBQTAwMDAsCiAJCS5tdXhzZWwJCT0geyAyLDMsMSwxLC0xIH0sCiAJCS5kaWdpdGFsX21vZGUgICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsCi0JCS5hdWRpb211eAk9IHsgMHgyMDAwMCwgMCwgMHg4MDAwMCwgMHg4MDAwMCwgMHhhODAwMCwgMHg0NjAwMCAgfSwKKwkJLmdwaW9tdXggCT0geyAweDIwMDAwLCAwLCAweDgwMDAwLCAweDgwMDAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweGE4MDAwLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCkBAIC0xMTczLDcgKzEyMDksOCBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAzLCA0IH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAorCQkuZ3Bpb211dGUgCT0gNCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSAtMSAvKiBUVU5FUl9BTFBTX1RNREgyX05UU0MgKi8sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTExOTAsNyArMTIyNyw4IEBACiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDEsIDB4ZDAwMDEsIDAsIDAsIDEwIH0sCisJCS5ncGlvbXV4IAk9IHsgMSwgMHhkMDAwMSwgMCwgMCB9LAorCQkuZ3Bpb211dGUgCT0gMTAsCiAJCQkJLyogc291bmQgcGF0aCAoNSBzb3VyY2VzKToKIAkJCQlNVVgxIChtYXNrIDB4MDMpLCBFbmFibGUgUGluIDB4MDggKDA9ZW5hYmxlLCAxPWRpc2FibGUpCiAJCQkJCTA9IGV4dC4gQXVkaW8gSU4KQEAgLTEyMTYsNyArMTI1NCw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MWMsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMCwgMCwgMHgxMCwgOCwgNCB9LAorCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDB4MTAsIDggfSwKKwkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCkBAIC0xMjI4LDcgKzEyNjcsNyBAQAogCQkvKiBUaW0gUvZzdGVybXVuZHQgPHJvc3Rlcm1AdW5pLW11ZW5zdGVyLmRlPgogCQlpbiBkZS5jb21wLm9zLnVuaXgubGludXguaGFyZHdhcmU6CiAJCQlvcHRpb25zIGJ0dHYgY2FyZD0wIHBsbD0xIHJhZGlvPTEgZ3Bpb21hc2s9MHgxOGUwCi0JCQlhdWRpb211eD0weDQ0YzcxZiwweDQ0ZDcxZiwwLDB4NDRkNzFmLDB4NDRkZmZmCisJCQlncGlvbXV4ID0weDQ0YzcxZiwweDQ0ZDcxZiwwLDB4NDRkNzFmLDB4NDRkZmZmCiAJCQlvcHRpb25zIHR1bmVyIHR5cGU9NSAqLwogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMCAvRmx5VmlkZW8gQTIvIExpZmV0ZWMgTFQgOTQxNSBUViBbTFI5MF0iLAogCQkudmlkZW9faW5wdXRzCT0gNCwKQEAgLTEyMzcsNyArMTI3Niw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MThlMCwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAweDAwMDAsMHgwODAwLDB4MTAwMCwweDEwMDAsMHgxOGUwIH0sCisJCS5ncGlvbXV4IAk9IHsgMHgwMDAwLDB4MDgwMCwweDEwMDAsMHgxMDAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDE4ZTAsCiAJCQkvKiBGb3IgY2FyZHMgd2l0aCB0ZGE5ODIwL3RkYTk4MjE6CiAJCQkJMHgwMDAwOiBUdW5lciBub3JtYWwgc3RlcmVvCiAJCQkJMHgwMDgwOiBUdW5lciBBMiBTQVAgKHNlY29uZCBhdWRpbyBwcm9ncmFtID0gWndlaWthbmFsdG9uKQpAQCAtMTI1Nyw3ICsxMjk3LDggQEAKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHhGLAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAyLCAwLCAwLCAwLCAxMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDAsIDAsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ19QQUwsCkBAIC0xMjc1LDcgKzEzMTYsOCBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDE4MDAsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCwgMHgxODAwLCAwIH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gNSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMTI5Miw3ICsxMzM0LDcgQEAKIAkJLnN2aHMgICAgICAgICAgID0gMSwKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKIAkJLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LApAQCAtMTMwOSw3ICsxMzUxLDggQEAKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHhlMDAsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHg0MDAsIDB4ODAwLCAweDQwMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4NDAwLCAweDQwMCwgMHg0MDAsIDB4NDAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDgwMCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ180MDM2Rlk1X05UU0MsCkBAIC0xMzI1LDcgKzEzNjgsOCBAQAogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAzMDAwRiwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAyLCAwLCAwLCAwLCAxIH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMCB9LAorCQkuZ3Bpb211dGUgCT0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IDAsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTEzNDIsNyArMTM4Niw4IEBACiAJCS5zdmhzCQk9IC0xLAogCQkuZ3Bpb21hc2sgICAgICAgPSAxMSwKIAkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMiwgMCwgMCwgMSwgOCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDAsIDAsIDEgfSwKKwkJLmdwaW9tdXRlIAk9IDgsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8zNSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC0xMzU3LDcgKzE0MDIsNyBAQAogCQkuc3ZocwkJPSAxLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEYsCiAJCS5tdXhzZWwJCT0geyAyLCAyIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyB9LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKQEAgLTEzNzYsNyArMTQyMSw4IEBACiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDEsIDAsIDQsIDQsIDkgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyAxLCAwLCA0LCA0IH0sCisJCS5ncGlvbXV0ZSAJPSA5LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKQEAgLTEzOTIsNyArMTQzOCw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZjAzZiwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKLQkJLmF1ZGlvbXV4CT0geyAweGJmZmUsIDAsIDB4YmZmZiwgMCwgMHhiZmZlIH0sCisJCS5ncGlvbXV4IAk9IHsgMHhiZmZlLCAwLCAweGJmZmYsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDB4YmZmZSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTE0MDksNyArMTQ1Niw3IEBACiAJCS5zdmhzCQk9IC0xLAogCQkuZ3Bpb21hc2sJPSAxLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDAsIDAsIDEsIDAsIDAgfSwKKwkJLmdwaW9tdXggCT0geyAwLCAwLCAxLCAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCkBAIC0xNDI4LDcgKzE0NzUsOCBAQAogCQkJCS8qIFJhZGlvIGNoYW5nZWQgZnJvbSAxZTgwIHRvIDB4ODAwIHRvIG1ha2UKIAkJCQlGbHlWaWRlbzIwMDBTIGluIC5odSBoYXBweSAoZ20pKi8KIAkJCQkvKiAtZGstPz8/OiBzZXQgbXV0ZT0weDE4MDAgZm9yIHRkYTk4NzRoIGRhdWdodGVyYm9hcmQgKi8KLQkJLmF1ZGlvbXV4CT0geyAweDAwMDAsMHgwODAwLDB4MTAwMCwweDEwMDAsMHgxODAwLCAweDEwODAgfSwKKwkJLmdwaW9tdXggCT0geyAweDAwMDAsMHgwODAwLDB4MTAwMCwweDEwMDAgfSwKKwkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLmF1ZGlvX2hvb2sJPSBmdjIwMDBzX2F1ZGlvLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5ub190ZGE5ODc1CT0gMSwKQEAgLTE0NDYsNyArMTQ5NCw4IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZmZmZjAwLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDB4NTAwLCAweDUwMCwgMHgzMDAsIDB4OTAwLCAweDkwMCB9LAorCQkuZ3Bpb211eCAJPSB7IDB4NTAwLCAweDUwMCwgMHgzMDAsIDB4OTAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDkwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKQEAgLTE0NjMsNyArMTUxMiw3IEBACiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDEwZjAwLAogCQkubXV4c2VsICAgICAgICAgPSB7MiwgMywgMCwgMCB9LAotCQkuYXVkaW9tdXggICAgICAgPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCwgMCwgMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCB9LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1NIQVJQXzJVNUpGNTU0MF9OVFNDLApAQCAtMTQ4NCw3ICsxNTMzLDggQEAKIAkJLmdwaW9tYXNrICAgICAgID0gMHg0ZjhhMDAsCiAJCS8qIDB4MTAwMDAwOiAxPU1TUCBlbmFibGVkICgwPWRpc2FibGUgYWdhaW4pCiAJCSogMHgwMTAwMDA6IENvbm5lY3RlZCB0byAiUzAiIG9uIHRkYTk4ODAgKDA9UGFsL0JHLCAxPU5UU0MpICovCi0JCS5hdWRpb211eCAgICAgICA9IHsweDk0N2ZmZiwgMHg5ODdmZmYsMHg5NDdmZmYsMHg5NDdmZmYsIDB4OTQ3ZmZmfSwKKwkJLmdwaW9tdXggICAgICAgID0gezB4OTQ3ZmZmLCAweDk4N2ZmZiwweDk0N2ZmZiwweDk0N2ZmZiB9LAorCQkuZ3Bpb211dGUgCT0gMHg5NDdmZmYsCiAJCS8qIHR2dHVuZXIsIHJhZGlvLCAgIGV4dGVybmFsLGludGVybmFsLCBtdXRlLCAgc3RlcmVvCiAJCSogdHVuZXIsIENvbXBvc2l0LCBTVmlkLCBDb21wb3NpdC1vbi1TdmlkLWFkYXB0ZXIgKi8KIAkJLm11eHNlbCAgICAgICAgID0geyAyLCAzICwwICwxIH0sCkBAIC0xNTE2LDcgKzE1NjYsOCBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAxNSwKIAkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMTEsIDcsIDEzLCAwIH0sIC8qIFRWIGFuZCBSYWRpbyB3aXRoIHNhbWUgR1BJTyAhICovCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMTEsIDcgfSwgLyogVFYgYW5kIFJhZGlvIHdpdGggc2FtZSBHUElPICEgKi8KKwkJLmdwaW9tdXRlIAk9IDEzLAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IDI1LApAQCAtMTU1NSw3ICsxNjA2LDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgzZiwKIAkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4CT0geyAweDAxLCAweDAwLCAweDAzLCAweDAzLCAweDA5LCAweDAyIH0sCisJCS5ncGlvbXV4IAk9IHsgMHgwMSwgMHgwMCwgMHgwMywgMHgwMyB9LAorCQkuZ3Bpb211dGUgCT0gMHgwOSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhOTg3NQk9IDEsCkBAIC0xNTg0LDcgKzE2MzYsNyBAQAogCQkuc3ZocyAgICAgICAgICAgPSA0LAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAsIDAgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwIH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkudHVuZXJfdHlwZSAgICAgPSAtMSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMTYxNiw3ICsxNjY4LDggQEAKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgxQzgwMEYsICAvKiBCaXQwLTI6IEF1ZGlvIHNlbGVjdCwgOC0xMjpyZW1vdGUgY29udHJvbCAxNDpyZW1vdGUgdmFsaWQgMTU6cmVtb3RlIHJlc2V0ICovCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMSwgMSwgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAyLCA0IH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAorCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTE2MzUsNyArMTY4OCw4IEBACiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MTQwMDA3LAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAzLCA0LCAwIH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAorCQkuZ3Bpb211dGUgCT0gNCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC0xNjQ5LDcgKzE3MDMsNyBAQAogCQkuc3ZocyAgICAgICAgICAgPSAtMSwKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKIAkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LApAQCAtMTY2NSwxMyArMTcxOSwxNCBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwgICAvKiBUdW5lciwgU1ZpZCwgU1ZIUywgU1ZpZCB0byBTVkhTIGNvbm5lY3RvciAqLwotCQkuYXVkaW9tdXggICAgICAgPSB7IDAgLDAgLDQsIDQsNCw0fSwvKiBZZXMsIHRoaXMgdHVuZXIgdXNlcyB0aGUgc2FtZSBhdWRpbyBvdXRwdXQgZm9yIFRWIGFuZCBGTSByYWRpbyEKKwkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCA0LCA0IH0sLyogWWVzLCB0aGlzIHR1bmVyIHVzZXMgdGhlIHNhbWUgYXVkaW8gb3V0cHV0IGZvciBUViBhbmQgRk0gcmFkaW8hCiAJCQkJCQkqIFRoaXMgY2FyZCBsYWNrcyBleHRlcm5hbCBBdWRpbyBJbiwgc28gd2UgbXV0ZSBpdCBvbiBFeHQuICYgSW50LgogCQkJCQkJKiBUaGUgUENCIGNhbiB0YWtlIGEgc2J4MTYzNy9zYngxNjczLCB3aXJpbmcgdW5rbm93bi4KIAkJCQkJCSogVGhpcyBjYXJkIGxhY2tzIFBDSSBzdWJzeXN0ZW0gSUQsIHNpZ2guCi0JCQkJCQkqIGF1ZGlvbXV4PTE6IGxvd2VyIHZvbHVtZSwgMiszOiBtdXRlCisJCQkJCQkqIGdwaW9tdXggPTE6IGxvd2VyIHZvbHVtZSwgMiszOiBtdXRlCiAJCQkJCQkqIGJ0d2luY2FwIHVzZXMgMHg4MDAwMC8weDgwMDAzCiAJCQkJCQkqLworCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LApAQCAtMTcxOCw3ICsxNzczLDcgQEAKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCQkuYXVkaW9tdXggICAgICAgPSB7N30sCisJCS5ncGlvbXV4ICAgICAgICA9IHs3fSwKIAl9LAogCVtCVFRWX0JPQVJEX0dWQkNUVjVQQ0ldID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSU9EQVRBIEdWLUJDVFY1L1BDSSIsCkBAIC0xNzI4LDcgKzE3ODMsOCBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDBmMGY4MCwKIAkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDAgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0gezB4MDMwMDAwLCAweDAxMDAwMCwgMCwgMCwgMHgwMjAwMDAsIDB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7MHgwMzAwMDAsIDB4MDEwMDAwLCAwLCAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDAyMDAwMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKQEAgLTE5NTgsNyArMjAxNCw3IEBACiAJCS5ncGlvbWFzayAgICAgICA9IDIsCiAJCS8qIFRWLCBDb21wMSwgQ29tcG9zaXRlIG92ZXIgU1ZJRCBjb24sIFNWSUQgKi8KIAkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMiwgMiwgMCwgMCwgMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDIsIDAsIDAgfSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKQEAgLTE5ODIsNyArMjAzOCw4IEBACiAJCS5zdmhzICAgICAgICAgICA9IC0xLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDMsIDR9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDN9LAorCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gNSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMjAxNCw3ICsyMDcxLDcgQEAKIAkJLnN2aHMgICAgICAgICAgID0gLTEsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKQEAgLTIwMzMsNyArMjA5MCw4IEBACiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAxZTgwMDcsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAogCQkvKiAgICAgICAgICAgICAgICAgIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBvZmYsICBvbiAqLwotCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDgsICAweDBmLCAgMHgwYSwgICAgIDB4MDgsICAgICAweDBmLCAweDA4IH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwOCwgIDB4MGYsICAweDBhLCAgICAgMHgwOCB9LAorCQkuZ3Bpb211dGUgCT0gMHgwZiwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LApAQCAtMjE1MCw3ICsyMjA4LDcgQEAKIAkJLnN2aHMgICAgICAgICAgID0gLTEsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDAgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKQEAgLTIxNjcsNyArMjIyNSw3IEBACiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KKwkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gLTEsCkBAIC0yMTgyLDcgKzIyNDAsNyBAQAogCQkuc3ZocyAgICAgICAgICAgPSAzLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IC0xLApAQCAtMjIwMiw3ICsyMjYwLDcgQEAKIAkJCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgogCQkJCQl4dGVybmFsIHZpZGVvLW11eCAqLwogCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDAgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IC0xLApAQCAtMjIyMCw3ICsyMjc4LDcgQEAKIAkJCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgogCQkJCQl4dGVybmFsIHZpZGVvLW11eCAqLwogCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IC0xLApAQCAtMjMwOCw3ICsyMzY2LDcgQEAKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMywKIAkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMSwgMSwgMSwgMSwgMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDEsIDEsIDEsIDEgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKQEAgLTIzMzksNyArMjM5Nyw4IEBACiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDAsIDAgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAwLCAwLCAwLCAweDAwMDAwMywgMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDB4MDAwMDAzLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCkBAIC0yMzc1LDcgKzI0MzQsNyBAQAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDY4LAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAweDY4LCAweDY4LCAweDYxLCAweDYxLCAweDAwIH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMHg2OCwgMHg2OCwgMHg2MSwgMHg2MSB9LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKIApAQCAtMjM5MCw3ICsyNDQ5LDggQEAKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCiAJCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDEsIDIsIDIsIDMgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAyIH0sCisJCS5ncGlvbXV0ZSAJPSAzLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLApAQCAtMjQxNSw3ICsyNDc1LDcgQEAKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLm11eHNlbCAgICAgICAgID0gezIsMiwyLDJ9LC8qODc4QSBpbnB1dCBpcyBhbHdheXMgTVVYMCwgc2VlIGFib3ZlLiovCi0JCS5hdWRpb211eCAgICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLworCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubXV4c2VsX2hvb2sgICAgPSBwaWNvbG9fdGV0cmFfbXV4c2VsLC8qUmVxdWlyZWQgYXMgaXQgZG9lc24ndCBmb2xsb3cgdGhlIGNsYXNzaWMgaW5wdXQgc2VsZWN0aW9uIHBvbGljeSovCkBAIC0yNDMzLDcgKzI0OTMsNyBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMDAwMDBmLAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCB9LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKQEAgLTI0ODksNyArMjU0OSw3IEBACiAJCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAogCQkJCTMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKIAkJLm11eHNlbF9ob29rICAgICAgPSBzaWdtYVNRX211eHNlbCwKLQkJLmF1ZGlvbXV4ICAgICAgICAgPSB7IDAgfSwKKwkJLmdwaW9tdXggICAgICAgICAgPSB7IDAgfSwKIAkJLm5vX21zcDM0eHggICAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgICAgPSAtMSwKQEAgLTI1MDYsNyArMjU2Niw3IEBACiAJCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAogCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiB9LAogCQkubXV4c2VsX2hvb2sgICAgICA9IHNpZ21hU0xDX211eHNlbCwKLQkJLmF1ZGlvbXV4ICAgICAgICAgPSB7IDAgfSwKKwkJLmdwaW9tdXggICAgICAgICAgPSB7IDAgfSwKIAkJLm5vX21zcDM0eHggICAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgICAgPSAtMSwKQEAgLTI1MjQsNyArMjU4NCw4IEBACiAJCS5zdmhzICAgICAgICAgICA9IC0xLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEZGLAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAyLCAwLCAwLCAwLCAxMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDAsIDAsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLApAQCAtMjU1OCw3ICsyNjE5LDggQEAKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgzZiwKIAkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDAgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0gezB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEsIDB4MzEgfSwKKwkJLmdwaW9tdXggICAgICAgID0gezB4MzEsIDB4MzEsIDB4MzEsIDB4MzEgfSwKKwkJLmdwaW9tdXRlIAk9IDB4MzEsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCkBAIC0yNTgxLDcgKzI2NDMsNyBAQAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDAsIDB4MDAwMDAxLDAsMCwgMCB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDB4MDAwMDAxLDAsMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCX0sCkBAIC0yNjkxLDcgKzI3NTMsOCBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSB9LAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwZTAwMDA3LAotCQkuYXVkaW9tdXggICAgICAgPSB7IDB4MDA0MDAwMDUsIDAsIDB4MDAwMDAwMDEsIDAsIDB4MDBjMDAwMDcsIDAgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyAweDAwNDAwMDA1LCAwLCAweDAwMDAwMDAxLCAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDAwYzAwMDA3LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMjcwNyw3ICsyNzcwLDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwMWZlMDAsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCwgMHgwMDIwMDAsIDAgfSwKKwkJLmdwaW9tdXggICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwIH0sCisJCS5ncGlvbXV0ZSAJPSAweDAwMjAwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkYsCkBAIC0yNzI0LDcgKzI3ODgsOCBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMWMwMDA3LAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAyLCAzIH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAorCQkuZ3Bpb211dGUgCT0gMywKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU5BXzk1MzNfREksCkBAIC0yNzQzLDcgKzI4MDgsOCBAQAogCQkuZ3Bpb21hc2sgICAgICA9IDB4MDFmZTAwLAogCQkubXV4c2VsICAgICAgICA9IHsgMiwzLDEsMSwtMSB9LAogCQkuZGlnaXRhbF9tb2RlICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsCi0JCS5hdWRpb211eCAgICAgID0geyAweDAwNDAwLCAweDEwNDAwLCAweDA0NDAwLCAweDgwMDAwLCAweDEyNDAwLCAweDQ2MDAwICB9LAorCQkuZ3Bpb211eCAgICAgICA9IHsgMHgwMDQwMCwgMHgxMDQwMCwgMHgwNDQwMCwgMHg4MDAwMCB9LAorCQkuZ3Bpb211dGUgICAgICA9IDB4MTI0MDAsCiAJCS5ub19tc3AzNHh4ICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgID0gVFVORVJfTEdfUEFMX0ZNLApAQCAtMjc2MSw3ICsyODI3LDggQEAKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgzZiwKIAkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eCAgICAgICA9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYywgMHgyOSwgMHgyOSB9LAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MjEsIDB4MjAsIDB4MjQsIDB4MmMgfSwKKwkJLmdwaW9tdXRlIAk9IDB4MjksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLApAQCAtMjc5NSw3ICsyODYyLDggQEAKIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCiAJCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCi0JCS5hdWRpb211eAk9IHsgMiwgMCwgMCwgMCwgMSB9LAorCQkuZ3Bpb211eCAJPSB7IDIsIDAsIDAsIDAgfSwKKwkJLmdwaW9tdXRlIAk9IDEsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gMiwKQEAgLTI4MTEsNyArMjg3OSw3IEBACiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTA4MDA3LAogCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAotCQkuYXVkaW9tdXgJPSB7IDEwMDAwMCwgMTAwMDAyLCAxMDAwMDIsIDEwMDAwMCB9LAorCQkuZ3Bpb211eCAJPSB7IDEwMDAwMCwgMTAwMDAyLCAxMDAwMDIsIDEwMDAwMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0yODUxLDcgKzI5MTksOCBAQAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAogCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKLQkJLmF1ZGlvbXV4ICAgICAgID0geyAwLCAxLCAyLCAzLCA0IH0sCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAorCQkuZ3Bpb211dGUgCT0gNCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfNDAwOUZSNV9QQUwsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCkBAIC0yOTIzLDIwICsyOTkyLDIwIEBACiAJaWYgKFVOU0VUICE9IGF1ZGlvbXV4WzBdKSB7CiAJCWdwaW9iaXRzID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQkJYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb211eFtpXSA9IGF1ZGlvbXV4W2ldOworCQkJYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbXV4W2ldID0gYXVkaW9tdXhbaV07CiAJCQlncGlvYml0cyB8PSBhdWRpb211eFtpXTsKIAkJfQogCX0gZWxzZSB7CiAJCWdwaW9iaXRzID0gYXVkaW9hbGw7CiAJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9tdXhbaV0gPSBhdWRpb2FsbDsKKwkJCWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb211eFtpXSA9IGF1ZGlvYWxsOwogCQl9CiAJfQogCWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2sgPSAoVU5TRVQgIT0gZ3Bpb21hc2spID8gZ3Bpb21hc2sgOiBncGlvYml0czsKIAlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IGdwaW8gY29uZmlnIG92ZXJyaWRlOiBtYXNrPTB4JXgsIG11eD0iLAogCSAgICAgICBidHYtPmMubnIsYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzayk7CiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlwcmludGsoIiVzMHgleCIsIGkgPyAiLCIgOiAiIiwgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb211eFtpXSk7CisJCXByaW50aygiJXMweCV4IiwgaSA/ICIsIiA6ICIiLCBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbaV0pOwogCX0KIAlwcmludGsoIlxuIik7CiB9CkBAIC0zMDQ0LDcgKzMxMTMsNyBAQAogCWdwaW9faW5vdXQoMHhmZmZmZmYsIDApOwogCWdwaW8gPSBncGlvX3JlYWQoKTsKIAlpZCAgID0gKChncGlvPj4xMCkgJiA2MykgLTE7Ci0JbXNwICA9IGJ0dHZfSTJDUmVhZChidHYsIEkyQ19NU1AzNDAwLCAiTVNQMzR4eCIpOworCW1zcCAgPSBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9NU1AzNDAwLCAiTVNQMzR4eCIpOwogCWlmIChpZCA8IDMyKSB7CiAJCWJ0di0+dHVuZXJfdHlwZSA9IG1pcm9fdHVuZXJtYXBbaWRdOwogCQlpZiAoMCA9PSAoZ3BpbyAmIDB4MjApKSB7CkBAIC0zNDQwLDggKzM1MDksOCBAQAogCiAJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZGlnaXRhbF9tb2RlID09IERJR0lUQUxfTU9ERV9DQU1FUkEpIHsKIAkJLyogZGV0ZWN0IEJ0ODMyIGNoaXAgZm9yIHF1YXJ0enNpZ2h0IGRpZ2l0YWwgY2FtZXJhICovCi0JCWlmICgoYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0JUODMyX0FMVDEsICJCdDgzMiIpID49MCkgfHwKLQkJICAgIChidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQlQ4MzJfQUxUMiwgIkJ0ODMyIikgPj0wKSkKKwkJaWYgKChidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9CVDgzMl9BTFQxLCAiQnQ4MzIiKSA+PTApIHx8CisJCSAgICAoYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfQlQ4MzJfQUxUMiwgIkJ0ODMyIikgPj0wKSkKIAkJCWJvb3RfYnQ4MzIoYnR2KTsKIAl9CiAKQEAgLTM0NTAsMTkgKzM1MTksMTkgQEAKIAogCS8qIHRyeSB0byBkZXRlY3QgYXVkaW8vZmFkZXIgY2hpcHMgKi8KIAlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fbXNwMzR4eCAmJgotCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfTVNQMzQwMCwgIk1TUDM0eHgiKSA+PTApCisJICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19BRERSX01TUDM0MDAsICJNU1AzNHh4IikgPj0wKQogCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOwogCiAJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXNwMzR4eF9hbHQgJiYKLQkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX01TUDM0MDBfQUxULCAiTVNQMzR4eCAoYWx0ZXJuYXRlIGFkZHJlc3MpIikgPj0wKQorCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9NU1AzNDAwX0FMVCwgIk1TUDM0eHggKGFsdGVybmF0ZSBhZGRyZXNzKSIpID49MCkKIAkJcmVxdWVzdF9tb2R1bGUoIm1zcDM0MDAiKTsKIAogCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub190ZGE5ODc1ICYmCi0JICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19UREE5ODc1LCAiVERBOTg3NSIpID49MCkKKwkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfVERBOTg3NSwgIlREQTk4NzUiKSA+PTApCiAJCXJlcXVlc3RfbW9kdWxlKCJ0ZGE5ODc1Iik7CiAKIAlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdGRhNzQzMiAmJgotCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfVERBNzQzMiwgIlREQTc0MzIiKSA+PTApCisJICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19BRERSX1REQTc0MzIsICJUREE3NDMyIikgPj0wKQogCQlyZXF1ZXN0X21vZHVsZSgidGRhNzQzMiIpOwogCiAJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubmVlZHNfdHZhdWRpbykKQEAgLTM0NzMsNyArMzU0Miw3IEBACiAJaWYgKGJ0di0+dGRhOTg4N19jb25mKQogCQl0ZGE5ODg3ID0gMTsKIAlpZiAoMCA9PSB0ZGE5ODg3ICYmIDAgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfZHZiICYmCi0JICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19UREE5ODg3LCAiVERBOTg4NyIpID49MCkKKwkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfVERBOTg4NywgIlREQTk4ODciKSA+PTApCiAJCXRkYTk4ODcgPSAxOwogCS8qIEh5YnJpZCBEVkIgY2FyZCwgRE9FUyBoYXZlIGEgdGRhOTg4NyAqLwogCWlmIChidHYtPmMudHlwZSA9PSBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFKQpAQCAtMzc5NCwxOCArMzg2MywxOCBAQAogewogCS8qIGZpeCB1cCBvdXIgY2FyZCBlbnRyeSAqLwogCWlmKG5vcm09PVZJREVPX01PREVfTlRTQykgewotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uYXVkaW9tdXhbMF09MHg5NTdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5hdWRpb211eFs0XT0weDk1N2ZmZjsKKwkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmdwaW9tdXhbVFZBVURJT19JTlBVVF9UVU5FUl09MHg5NTdmZmY7CisJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5ncGlvbXV0ZT0weDk1N2ZmZjsKIAkJZHByaW50aygiYnR0dl90ZGE5ODgwX3NldG5vcm0gdG8gTlRTQ1xuIik7CiAJfQogCWVsc2UgewotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uYXVkaW9tdXhbMF09MHg5NDdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5hdWRpb211eFs0XT0weDk0N2ZmZjsKKwkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmdwaW9tdXhbVFZBVURJT19JTlBVVF9UVU5FUl09MHg5NDdmZmY7CisJCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5ncGlvbXV0ZT0weDk0N2ZmZjsKIAkJZHByaW50aygiYnR0dl90ZGE5ODgwX3NldG5vcm0gdG8gUEFMXG4iKTsKIAl9CiAJLyogc2V0IEdQSU8gYWNjb3JkaW5nICovCiAJZ3Bpb19iaXRzKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssCi0JCSAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb211eFtidHYtPmF1ZGlvXSk7CisJCSAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbXV4W2J0di0+YXVkaW9dKTsKIH0KIAogCkBAIC00OTQ0LDEyICs1MDEzLDE0IEBACiAJaWYgKHZzZngpCiAJCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IEhvc3QgYnJpZGdlIG5lZWRzIFZTRlggZW5hYmxlZC5cbiIpOwogCWlmIChwY2lwY2lfZmFpbCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2OiBCVDg0OCBhbmQgeW91ciBjaGlwc2V0IG1heSBub3Qgd29yayB0b2dldGhlci5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJidHR2OiBidHR2IGFuZCB5b3VyIGNoaXBzZXQgbWF5IG5vdCB3b3JrICIKKwkJCQkJCQkidG9nZXRoZXIuXG4iKTsKIAkJaWYgKCFub19vdmVybGF5KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2OiBvdmVybGF5IHdpbGwgYmUgZGlzYWJsZWQuXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IG92ZXJsYXkgd2lsbCBiZSBkaXNhYmxlZC5cbiIpOwogCQkJbm9fb3ZlcmxheSA9IDE7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2OiBvdmVybGF5IGZvcmNlZC4gVXNlIHRoaXMgb3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IG92ZXJsYXkgZm9yY2VkLiBVc2UgdGhpcyAiCisJCQkJCQkib3B0aW9uIGF0IHlvdXIgb3duIHJpc2suXG4iKTsKIAkJfQogCX0KIAlpZiAoVU5TRVQgIT0gbGF0ZW5jeSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCA1NzhiMjAwLi43NGRlZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC0zNiwxMyArMzYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlICJidHR2cC5oIgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdHZhdWRpby5oPgorI2luY2x1ZGUgPG1lZGlhL21zcDM0MDAuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlIDxtZWRpYS9yZHMuaD4KIAogCiB1bnNpZ25lZCBpbnQgYnR0dl9udW07CQkJLyogbnVtYmVyIG9mIEJ0ODQ4cyBpbiB1c2UgKi8KQEAgLTkyNiw0NSArOTI4LDk4IEBACiAKIHN0YXRpYyBjaGFyICphdWRpb19tb2Rlc1tdID0gewogCSJhdWRpbzogdHVuZXIiLCAiYXVkaW86IHJhZGlvIiwgImF1ZGlvOiBleHRlcm4iLAotCSJhdWRpbzogaW50ZXJuIiwgImF1ZGlvOiBvZmYiCisJImF1ZGlvOiBpbnRlcm4iLCAiYXVkaW86IG11dGUiCiB9OwogCiBzdGF0aWMgaW50Ci1hdWRpb19tdXgoc3RydWN0IGJ0dHYgKmJ0diwgaW50IG1vZGUpCithdWRpb19tdXgoc3RydWN0IGJ0dHYgKmJ0diwgaW50IGlucHV0LCBpbnQgbXV0ZSkKIHsKLQlpbnQgdmFsLG11eCxpMmNfbXV4LHNpZ25hbDsKKwlpbnQgZ3Bpb192YWwsIHNpZ25hbDsKKwlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CiAKIAlncGlvX2lub3V0KGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssCiAJCSAgIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2spOwogCXNpZ25hbCA9IGJ0cmVhZChCVDg0OF9EU1RBVFVTKSAmIEJUODQ4X0RTVEFUVVNfSExPQzsKIAotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQVVESU9fTVVURToKLQkJYnR2LT5hdWRpbyB8PSBBVURJT19NVVRFOwotCQlicmVhazsKLQljYXNlIEFVRElPX1VOTVVURToKLQkJYnR2LT5hdWRpbyAmPSB+QVVESU9fTVVURTsKLQkJYnJlYWs7Ci0JY2FzZSBBVURJT19UVU5FUjoKLQljYXNlIEFVRElPX1JBRElPOgotCWNhc2UgQVVESU9fRVhURVJOOgotCWNhc2UgQVVESU9fSU5URVJOOgotCQlidHYtPmF1ZGlvICY9IEFVRElPX01VVEU7Ci0JCWJ0di0+YXVkaW8gfD0gbW9kZTsKLQl9Ci0JaTJjX211eCA9IG11eCA9IChidHYtPmF1ZGlvICYgQVVESU9fTVVURSkgPyBBVURJT19PRkYgOiBidHYtPmF1ZGlvOwotCWlmIChidHYtPm9wdF9hdXRvbXV0ZSAmJiAhc2lnbmFsICYmICFidHYtPnJhZGlvX3VzZXIpCi0JCW11eCA9IEFVRElPX09GRjsKKwlidHYtPm11dGUgPSBtdXRlOworCWJ0di0+YXVkaW8gPSBpbnB1dDsKIAotCXZhbCA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9tdXhbbXV4XTsKLQlncGlvX2JpdHMoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzayx2YWwpOworCS8qIGF1dG9tdXRlICovCisJbXV0ZSA9IG11dGUgfHwgKGJ0di0+b3B0X2F1dG9tdXRlICYmICFzaWduYWwgJiYgIWJ0di0+cmFkaW9fdXNlcik7CisKKwlpZiAobXV0ZSkKKwkJZ3Bpb192YWwgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXRlOworCWVsc2UKKwkJZ3Bpb192YWwgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbaW5wdXRdOworCisJZ3Bpb19iaXRzKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssIGdwaW9fdmFsKTsKIAlpZiAoYnR0dl9ncGlvKQotCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LGF1ZGlvX21vZGVzW211eF0pOwotCWlmICghaW5faW50ZXJydXB0KCkpCi0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsQVVEQ19TRVRfSU5QVVQsJihpMmNfbXV4KSk7CisJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsIGF1ZGlvX21vZGVzW211dGUgPyA0IDogaW5wdXRdKTsKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCXJldHVybiAwOworCisJY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX01VVEU7CisJY3RybC52YWx1ZSA9IGJ0di0+bXV0ZTsKKwlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19DVFJMLCAmY3RybCk7CisJYyA9IGJ0di0+aTJjX21zcDM0eHhfY2xpZW50OworCWlmIChjKSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisKKwkJLyogTm90ZTogdGhlIGlucHV0cyB0dW5lci9yYWRpby9leHRlcm4vaW50ZXJuIGFyZSB0cmFuc2xhdGVkCisJCSAgIHRvIG1zcCByb3V0aW5ncy4gVGhpcyBhc3N1bWVzIGNvbW1vbiBiZWhhdmlvciBmb3IgYWxsIG1zcDM0MDAKKwkJICAgYmFzZWQgVFYgY2FyZHMuIFdoZW4gdGhpcyBhc3N1bXB0aW9uIGZhaWxzLCB0aGVuIHRoZQorCQkgICBzcGVjaWZpYyBNU1Agcm91dGluZyBtdXN0IGJlIGFkZGVkIHRvIHRoZSBjYXJkIHRhYmxlLgorCQkgICBGb3Igbm93IHRoaXMgaXMgc3VmZmljaWVudC4gKi8KKwkJc3dpdGNoIChpbnB1dCkgeworCQljYXNlIFRWQVVESU9fSU5QVVRfUkFESU86CisJCQlyb3V0ZS5pbnB1dCA9IE1TUF9JTlBVVChNU1BfSU5fU0NBUlRfMiwgTVNQX0lOX1RVTkVSXzEsCisJCQkJICAgIE1TUF9EU1BfT1VUX1NDQVJULCBNU1BfRFNQX09VVF9TQ0FSVCk7CisJCQlicmVhazsKKwkJY2FzZSBUVkFVRElPX0lOUFVUX0VYVEVSTjoKKwkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVF8xLCBNU1BfSU5fVFVORVJfMSwKKwkJCQkgICAgTVNQX0RTUF9PVVRfU0NBUlQsIE1TUF9EU1BfT1VUX1NDQVJUKTsKKwkJCWJyZWFrOworCQljYXNlIFRWQVVESU9fSU5QVVRfSU5URVJOOgorCQkJLyogWWVzLCB0aGlzIGlzIHRoZSBzYW1lIGlucHV0IGFzIGZvciBSQURJTy4gSSBkb3VidAorCQkJICAgaWYgdGhpcyBpcyBldmVyIHVzZWQuIFRoZSBvbmx5IGJvYXJkIHdpdGggYW4gSU5URVJOCisJCQkgICBpbnB1dCBpcyB0aGUgQlRUVl9CT0FSRF9BVkVSTUVESUE5OC4gSSB3b25kZXIgaG93CisJCQkgICB0aGF0IHdhcyB0ZXN0ZWQuIE15IGd1ZXNzIGlzIHRoYXQgdGhlIHdob2xlIElOVEVSTgorCQkJICAgaW5wdXQgZG9lcyBub3Qgd29yay4gKi8KKwkJCXJvdXRlLmlucHV0ID0gTVNQX0lOUFVUKE1TUF9JTl9TQ0FSVF8yLCBNU1BfSU5fVFVORVJfMSwKKwkJCQkgICAgTVNQX0RTUF9PVVRfU0NBUlQsIE1TUF9EU1BfT1VUX1NDQVJUKTsKKwkJCWJyZWFrOworCQljYXNlIFRWQVVESU9fSU5QVVRfVFVORVI6CisJCWRlZmF1bHQ6CisJCQlyb3V0ZS5pbnB1dCA9IE1TUF9JTlBVVF9ERUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJcm91dGUub3V0cHV0ID0gTVNQX09VVFBVVF9ERUZBVUxUOworCQljLT5kcml2ZXItPmNvbW1hbmQoYywgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJfQorCWMgPSBidHYtPmkyY190dmF1ZGlvX2NsaWVudDsKKwlpZiAoYykgeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCisJCXJvdXRlLmlucHV0ID0gaW5wdXQ7CisJCXJvdXRlLm91dHB1dCA9IDA7CisJCWMtPmRyaXZlci0+Y29tbWFuZChjLCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CithdWRpb19tdXRlKHN0cnVjdCBidHR2ICpidHYsIGludCBtdXRlKQoreworCXJldHVybiBhdWRpb19tdXgoYnR2LCBidHYtPmF1ZGlvLCBtdXRlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F1ZGlvX2lucHV0KHN0cnVjdCBidHR2ICpidHYsIGludCBpbnB1dCkKK3sKKwlyZXR1cm4gYXVkaW9fbXV4KGJ0diwgaW5wdXQsIGJ0di0+bXV0ZSk7Cit9CisKIHN0YXRpYyB2b2lkCiBpMmNfdmlkaW9jc2NoYW4oc3RydWN0IGJ0dHYgKmJ0dikKIHsKQEAgLTEwMjMsOCArMTA3OCw4IEBACiAJfSBlbHNlIHsKIAkJdmlkZW9fbXV4KGJ0dixpbnB1dCk7CiAJfQotCWF1ZGlvX211eChidHYsKGlucHV0ID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgPwotCQkgICAgICAgQVVESU9fVFVORVIgOiBBVURJT19FWFRFUk4pKTsKKwlhdWRpb19pbnB1dChidHYsKGlucHV0ID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgPworCQkgICAgICAgVFZBVURJT19JTlBVVF9UVU5FUiA6IFRWQVVESU9fSU5QVVRfRVhURVJOKSk7CiAJc2V0X3R2bm9ybShidHYsYnR2LT50dm5vcm0pOwogCWkyY192aWRpb2NzY2hhbihidHYpOwogfQpAQCAtMTIzNiwxMCArMTI5MSwxMCBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGMtPnZhbHVlKSB7CiAJCQl2YS5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOwotCQkJYXVkaW9fbXV4KGJ0diwgQVVESU9fTVVURSk7CisJCQlhdWRpb19tdXRlKGJ0diwgMSk7CiAJCX0gZWxzZSB7CiAJCQl2YS5mbGFncyAmPSB+VklERU9fQVVESU9fTVVURTsKLQkJCWF1ZGlvX211eChidHYsIEFVRElPX1VOTVVURSk7CisJCQlhdWRpb19tdXRlKGJ0diwgMCk7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTEzOTcsNyArMTQ1Miw3IEBACiAJCWZyZWVfYnRyZXMoYnR2LGZoLFJFU09VUkNFX09WRVJMQVkpOwogCWlmIChOVUxMICE9IG9sZCkgewogCQlkcHJpbnRrKCJzd2l0Y2hfb3ZlcmxheTogb2xkPSVwIHN0YXRlIGlzICVkXG4iLG9sZCxvbGQtPnZiLnN0YXRlKTsKLQkJYnR0dl9kbWFfZnJlZShidHYsIG9sZCk7CisJCWJ0dHZfZG1hX2ZyZWUoJmZoLT5jYXAsYnR2LCBvbGQpOwogCQlrZnJlZShvbGQpOwogCX0KIAlkcHJpbnRrKCJzd2l0Y2hfb3ZlcmxheTogZG9uZVxuIik7CkBAIC0xNDA3LDcgKzE0NjIsOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHZpZGVvNGxpbnV4ICgxKSBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLXN0YXRpYyBpbnQgYnR0dl9wcmVwYXJlX2J1ZmZlcihzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgYnR0dl9idWZmZXIgKmJ1ZiwKK3N0YXRpYyBpbnQgYnR0dl9wcmVwYXJlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsc3RydWN0IGJ0dHYgKmJ0diwKKwkJCSAgICAgICBzdHJ1Y3QgYnR0dl9idWZmZXIgKmJ1ZiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnR0dl9mb3JtYXQgKmZtdCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCiAJCQkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQpAQCAtMTQ1MCw3ICsxNTA2LDcgQEAKIAkvKiBhbGxvYyByaXNjIG1lbW9yeSAqLwogCWlmIChTVEFURV9ORUVEU19JTklUID09IGJ1Zi0+dmIuc3RhdGUpIHsKIAkJcmVkb19kbWFfcmlzYyA9IDE7Ci0JCWlmICgwICE9IChyYyA9IHZpZGVvYnVmX2lvbG9jayhidHYtPmMucGNpLCZidWYtPnZiLCZidHYtPmZidWYpKSkKKwkJaWYgKDAgIT0gKHJjID0gdmlkZW9idWZfaW9sb2NrKHEsJmJ1Zi0+dmIsJmJ0di0+ZmJ1ZikpKQogCQkJZ290byBmYWlsOwogCX0KIApAQCAtMTQ2Miw3ICsxNTE4LDcgQEAKIAlyZXR1cm4gMDsKIAogIGZhaWw6Ci0JYnR0dl9kbWFfZnJlZShidHYsYnVmKTsKKwlidHR2X2RtYV9mcmVlKHEsYnR2LGJ1Zik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNDg2LDcgKzE1NDIsNyBAQAogCXN0cnVjdCBidHR2X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLHN0cnVjdCBidHR2X2J1ZmZlcix2Yik7CiAJc3RydWN0IGJ0dHZfZmggKmZoID0gcS0+cHJpdl9kYXRhOwogCi0JcmV0dXJuIGJ0dHZfcHJlcGFyZV9idWZmZXIoZmgtPmJ0diwgYnVmLCBmaC0+Zm10LAorCXJldHVybiBidHR2X3ByZXBhcmVfYnVmZmVyKHEsZmgtPmJ0diwgYnVmLCBmaC0+Zm10LAogCQkJCSAgIGZoLT53aWR0aCwgZmgtPmhlaWdodCwgZmllbGQpOwogfQogCkBAIC0xNTEwLDcgKzE1NjYsNyBAQAogCXN0cnVjdCBidHR2X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLHN0cnVjdCBidHR2X2J1ZmZlcix2Yik7CiAJc3RydWN0IGJ0dHZfZmggKmZoID0gcS0+cHJpdl9kYXRhOwogCi0JYnR0dl9kbWFfZnJlZShmaC0+YnR2LGJ1Zik7CisJYnR0dl9kbWFfZnJlZSgmZmgtPmNhcCxmaC0+YnR2LGJ1Zik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGJ0dHZfdmlkZW9fcW9wcyA9IHsKQEAgLTE2NTMsNyArMTcwOSw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQltdXRleF9sb2NrKCZidHYtPmxvY2spOwotCQlhdWRpb19tdXgoYnR2LCAodi0+ZmxhZ3MmVklERU9fQVVESU9fTVVURSkgPyBBVURJT19NVVRFIDogQVVESU9fVU5NVVRFKTsKKwkJYXVkaW9fbXV0ZShidHYsICh2LT5mbGFncyZWSURFT19BVURJT19NVVRFKSA/IDEgOiAwKTsKIAkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0dixjbWQsdik7CiAKIAkJLyogY2FyZCBzcGVjaWZpYyBob29rcyAqLwpAQCAtMTgyMiw3ICsxODc4LDggQEAKIAkJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ0dBVURJTywgJnZhKTsKIAkJCWlmICh0LT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9NT05PKQogCQkJCXZhLm1vZGUgPSBWSURFT19TT1VORF9NT05POwotCQkJZWxzZSBpZiAodC0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPKQorCQkJZWxzZSBpZiAodC0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPIHx8CisJCQkJIHQtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyKQogCQkJCXZhLm1vZGUgPSBWSURFT19TT1VORF9TVEVSRU87CiAJCQllbHNlIGlmICh0LT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMSkKIAkJCQl2YS5tb2RlID0gVklERU9fU09VTkRfTEFORzE7CkBAIC0xOTY1LDcgKzIwMjIsNyBAQAogCQlCVUcoKTsKIAl9CiAKLQlkb3duKCZmaC0+Y2FwLmxvY2spOworCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CiAJCWtmcmVlKGZoLT5vdi5jbGlwcyk7CiAJZmgtPm92LmNsaXBzICAgID0gY2xpcHM7CiAJZmgtPm92Lm5jbGlwcyAgID0gbjsKQEAgLTE5ODYsNyArMjA0Myw3IEBACiAJCWJ0dHZfb3ZlcmxheV9yaXNjKGJ0diwgJmZoLT5vdiwgZmgtPm92Zm10LCBuZXcpOwogCQlyZXR2YWwgPSBidHR2X3N3aXRjaF9vdmVybGF5KGJ0dixmaCxuZXcpOwogCX0KLQl1cCgmZmgtPmNhcC5sb2NrKTsKKwltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjE2Niw3ICsyMjIzLDcgQEAKIAkJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKIAogCQkvKiB1cGRhdGUgb3VyIHN0YXRlIGluZm9ybWF0aW9ucyAqLwotCQlkb3duKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQlmaC0+Zm10ICAgICAgICAgICAgICA9IGZtdDsKIAkJZmgtPmNhcC5maWVsZCAgICAgICAgPSBmLT5mbXQucGl4LmZpZWxkOwogCQlmaC0+Y2FwLmxhc3QgICAgICAgICA9IFY0TDJfRklFTERfTk9ORTsKQEAgLTIxNzUsNyArMjIzMiw3IEBACiAJCWJ0di0+aW5pdC5mbXQgICAgICAgID0gZm10OwogCQlidHYtPmluaXQud2lkdGggICAgICA9IGYtPmZtdC5waXgud2lkdGg7CiAJCWJ0di0+aW5pdC5oZWlnaHQgICAgID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JCXVwKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjI4Miw3ICsyMzM5LDcgQEAKIAkJZm10ID0gZm9ybWF0X2J5X3BhbGV0dGUocGljLT5wYWxldHRlKTsKIAkJaWYgKE5VTEwgPT0gZm10KQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRvd24oJmZoLT5jYXAubG9jayk7CisJCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CiAJCWlmIChmbXQtPmRlcHRoICE9IHBpYy0+ZGVwdGgpIHsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlnb3RvIGZoX3VubG9ja19hbmRfcmV0dXJuOwpAQCAtMjMxMyw3ICsyMzcwLDcgQEAKIAkJYnQ4NDhfY29udHJhc3QoYnR2LHBpYy0+Y29udHJhc3QpOwogCQlidDg0OF9odWUoYnR2LHBpYy0+aHVlKTsKIAkJYnQ4NDhfc2F0KGJ0dixwaWMtPmNvbG91cik7Ci0JCXVwKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjM3OSw3ICsyNDM2LDcgQEAKIAkJCXJldHVybiAtRVBFUk07CiAJCWVuZCA9ICh1bnNpZ25lZCBsb25nKWZidWYtPmJhc2UgKwogCQkJZmJ1Zi0+aGVpZ2h0ICogZmJ1Zi0+Ynl0ZXNwZXJsaW5lOwotCQlkb3duKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQlyZXR2YWwgPSAtRUlOVkFMOwogCiAJCXN3aXRjaCAoZmJ1Zi0+ZGVwdGgpIHsKQEAgLTI0MTcsNyArMjQ3NCw3IEBACiAJCQlidHYtPmZidWYuZm10LmJ5dGVzcGVybGluZSA9IGZidWYtPmJ5dGVzcGVybGluZTsKIAkJZWxzZQogCQkJYnR2LT5mYnVmLmZtdC5ieXRlc3BlcmxpbmUgPSBidHYtPmZidWYuZm10LndpZHRoKmZidWYtPmRlcHRoLzg7Ci0JCXVwKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjQ0MCw3ICsyNDk3LDcgQEAKIAkJaWYgKCFjaGVja19hbGxvY19idHJlcyhidHYsZmgsUkVTT1VSQ0VfT1ZFUkxBWSkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCi0JCWRvd24oJmZoLT5jYXAubG9jayk7CisJCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CiAJCWlmICgqb24pIHsKIAkJCWZoLT5vdi50dm5vcm0gPSBidHYtPnR2bm9ybTsKIAkJCW5ldyA9IHZpZGVvYnVmX2FsbG9jKHNpemVvZigqbmV3KSk7CkBAIC0yNDUxLDcgKzI1MDgsNyBAQAogCiAJCS8qIHN3aXRjaCBvdmVyICovCiAJCXJldHZhbCA9IGJ0dHZfc3dpdGNoX292ZXJsYXkoYnR2LGZoLG5ldyk7Ci0JCXVwKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC0yNDYwLDcgKzI1MTcsNyBAQAogCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZiA9IGFyZzsKIAkJdW5zaWduZWQgaW50IGk7CiAKLQkJZG93bigmZmgtPmNhcC5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZmgtPmNhcC5sb2NrKTsKIAkJcmV0dmFsID0gdmlkZW9idWZfbW1hcF9zZXR1cCgmZmgtPmNhcCxnYnVmZmVycyxnYnVmc2l6ZSwKIAkJCQkJICAgICBWNEwyX01FTU9SWV9NTUFQKTsKIAkJaWYgKHJldHZhbCA8IDApCkBAIC0yNDcwLDcgKzI1MjcsNyBAQAogCQltYnVmLT5zaXplICAgPSBnYnVmZmVycyAqIGdidWZzaXplOwogCQlmb3IgKGkgPSAwOyBpIDwgZ2J1ZmZlcnM7IGkrKykKIAkJCW1idWYtPm9mZnNldHNbaV0gPSBpICogZ2J1ZnNpemU7Ci0JCXVwKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAJCXJldHVybiAwOwogCX0KIAljYXNlIFZJRElPQ01DQVBUVVJFOgpAQCAtMjQ4Miw3ICsyNTM5LDcgQEAKIAkJaWYgKHZtLT5mcmFtZSA+PSBWSURFT19NQVhfRlJBTUUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlkb3duKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF9sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlidWYgPSAoc3RydWN0IGJ0dHZfYnVmZmVyICopZmgtPmNhcC5idWZzW3ZtLT5mcmFtZV07CiAJCWlmIChOVUxMID09IGJ1ZikKQEAgLTI0OTYsNyArMjU1Myw3IEBACiAJCWZpZWxkID0gKHZtLT5oZWlnaHQgPiBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnNoZWlnaHQvMikKIAkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECiAJCQk6IFY0TDJfRklFTERfQk9UVE9NOwotCQlyZXR2YWwgPSBidHR2X3ByZXBhcmVfYnVmZmVyKGJ0dixidWYsCisJCXJldHZhbCA9IGJ0dHZfcHJlcGFyZV9idWZmZXIoJmZoLT5jYXAsYnR2LGJ1ZiwKIAkJCQkJICAgICBmb3JtYXRfYnlfcGFsZXR0ZSh2bS0+Zm9ybWF0KSwKIAkJCQkJICAgICB2bS0+d2lkdGgsdm0tPmhlaWdodCxmaWVsZCk7CiAJCWlmICgwICE9IHJldHZhbCkKQEAgLTI1MDQsNyArMjU2MSw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZidHYtPnNfbG9jayxmbGFncyk7CiAJCWJ1ZmZlcl9xdWV1ZSgmZmgtPmNhcCwmYnVmLT52Yik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ0di0+c19sb2NrLGZsYWdzKTsKLQkJdXAoJmZoLT5jYXAubG9jayk7CisJCW11dGV4X3VubG9jaygmZmgtPmNhcC5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DU1lOQzoKQEAgLTI1MTUsNyArMjU3Miw3IEBACiAJCWlmICgqZnJhbWUgPj0gVklERU9fTUFYX0ZSQU1FKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZG93bigmZmgtPmNhcC5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZmgtPmNhcC5sb2NrKTsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJYnVmID0gKHN0cnVjdCBidHR2X2J1ZmZlciAqKWZoLT5jYXAuYnVmc1sqZnJhbWVdOwogCQlpZiAoTlVMTCA9PSBidWYpCkBAIC0yNTI4LDE0ICsyNTg1LDE0IEBACiAJCQlyZXR2YWwgPSAtRUlPOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgU1RBVEVfRE9ORToKLQkJCXZpZGVvYnVmX2RtYV9wY2lfc3luYyhidHYtPmMucGNpLCZidWYtPnZiLmRtYSk7Ci0JCQlidHR2X2RtYV9mcmVlKGJ0dixidWYpOworCQkJdmlkZW9idWZfZG1hX3N5bmMoJmZoLT5jYXAsJmJ1Zi0+dmIuZG1hKTsKKwkJCWJ0dHZfZG1hX2ZyZWUoJmZoLT5jYXAsYnR2LGJ1Zik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQotCQl1cCgmZmgtPmNhcC5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIApAQCAtMjcxOSw3ICsyNzc2LDcgQEAKIAkJaWYgKDAgPT0gKGZtdC0+ZmxhZ3MgJiBGT1JNQVRfRkxBR1NfUEFDS0VEKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWRvd24oJmZoLT5jYXAubG9jayk7CisJCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWlmIChmYi0+ZmxhZ3MgJiBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZKSB7CiAJCQlpZiAoZmItPmZtdC53aWR0aCA+IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uc3dpZHRoKQpAQCAtMjc1OSw3ICsyODE2LDcgQEAKIAkJCQlyZXR2YWwgPSBidHR2X3N3aXRjaF9vdmVybGF5KGJ0dixmaCxuZXcpOwogCQkJfQogCQl9Ci0JCXVwKCZmaC0+Y2FwLmxvY2spOworCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC0yODkwLDcgKzI5NDcsNyBAQAogCXJldHVybiAwOwogCiAgZmhfdW5sb2NrX2FuZF9yZXR1cm46Ci0JdXAoJmZoLT5jYXAubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTI5NTcsMTYgKzMwMTQsMTYgQEAKIAkJYnVmID0gbGlzdF9lbnRyeShmaC0+Y2FwLnN0cmVhbS5uZXh0LHN0cnVjdCBidHR2X2J1ZmZlcix2Yi5zdHJlYW0pOwogCX0gZWxzZSB7CiAJCS8qIHJlYWQoKSBjYXB0dXJlICovCi0JCWRvd24oJmZoLT5jYXAubG9jayk7CisJCW11dGV4X2xvY2soJmZoLT5jYXAubG9jayk7CiAJCWlmIChOVUxMID09IGZoLT5jYXAucmVhZF9idWYpIHsKIAkJCS8qIG5lZWQgdG8gY2FwdHVyZSBhIG5ldyBmcmFtZSAqLwogCQkJaWYgKGxvY2tlZF9idHJlcyhmaC0+YnR2LFJFU09VUkNFX1ZJREVPKSkgewotCQkJCXVwKCZmaC0+Y2FwLmxvY2spOworCQkJCW11dGV4X3VubG9jaygmZmgtPmNhcC5sb2NrKTsKIAkJCQlyZXR1cm4gUE9MTEVSUjsKIAkJCX0KIAkJCWZoLT5jYXAucmVhZF9idWYgPSB2aWRlb2J1Zl9hbGxvYyhmaC0+Y2FwLm1zaXplKTsKIAkJCWlmIChOVUxMID09IGZoLT5jYXAucmVhZF9idWYpIHsKLQkJCQl1cCgmZmgtPmNhcC5sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAJCQkJcmV0dXJuIFBPTExFUlI7CiAJCQl9CiAJCQlmaC0+Y2FwLnJlYWRfYnVmLT5tZW1vcnkgPSBWNEwyX01FTU9SWV9VU0VSUFRSOwpAQCAtMjk3NCwxMyArMzAzMSwxMyBAQAogCQkJaWYgKDAgIT0gZmgtPmNhcC5vcHMtPmJ1Zl9wcmVwYXJlKCZmaC0+Y2FwLGZoLT5jYXAucmVhZF9idWYsZmllbGQpKSB7CiAJCQkJa2ZyZWUgKGZoLT5jYXAucmVhZF9idWYpOwogCQkJCWZoLT5jYXAucmVhZF9idWYgPSBOVUxMOwotCQkJCXVwKCZmaC0+Y2FwLmxvY2spOworCQkJCW11dGV4X3VubG9jaygmZmgtPmNhcC5sb2NrKTsKIAkJCQlyZXR1cm4gUE9MTEVSUjsKIAkJCX0KIAkJCWZoLT5jYXAub3BzLT5idWZfcXVldWUoJmZoLT5jYXAsZmgtPmNhcC5yZWFkX2J1Zik7CiAJCQlmaC0+Y2FwLnJlYWRfb2ZmID0gMDsKIAkJfQotCQl1cCgmZmgtPmNhcC5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQlidWYgPSAoc3RydWN0IGJ0dHZfYnVmZmVyKilmaC0+Y2FwLnJlYWRfYnVmOwogCX0KIApAQCAtMzE2Miw4ICszMjE5LDggQEAKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGJ0djsKIAotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsQVVEQ19TRVRfUkFESU8sJmJ0di0+dHVuZXJfdHlwZSk7Ci0JYXVkaW9fbXV4KGJ0dixBVURJT19SQURJTyk7CisJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0dixBVURDX1NFVF9SQURJTyxOVUxMKTsKKwlhdWRpb19pbnB1dChidHYsVFZBVURJT19JTlBVVF9SQURJTyk7CiAKIAltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CiAJcmV0dXJuIDA7CkBAIC0zNzQ5LDcgKzM4MDYsNyBAQAogCQkJYnR0dl9pcnFfc3dpdGNoX3ZpZGVvKGJ0dik7CiAKIAkJaWYgKChhc3RhdCAmIEJUODQ4X0lOVF9ITE9DSykgICYmICBidHYtPm9wdF9hdXRvbXV0ZSkKLQkJCWF1ZGlvX211eChidHYsIC0xKTsKKwkJCWF1ZGlvX211dGUoYnR2LCBidHYtPm11dGUpOyAgLyogdHJpZ2dlciBhdXRvbXV0ZSAqLwogCiAJCWlmIChhc3RhdCAmIChCVDg0OF9JTlRfU0NFUlJ8QlQ4NDhfSU5UX09DRVJSKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiAlcyVzIEAgJTA4eCwiLGJ0di0+Yy5uciwKQEAgLTQwNTAsNyArNDEwNyw3IEBACiAJCWJ0ODQ4X2NvbnRyYXN0KGJ0diwzMjc2OCk7CiAJCWJ0ODQ4X2h1ZShidHYsMzI3NjgpOwogCQlidDg0OF9zYXQoYnR2LDMyNzY4KTsKLQkJYXVkaW9fbXV4KGJ0dixBVURJT19NVVRFKTsKKwkJYXVkaW9fbXV0ZShidHYsIDEpOwogCQlzZXRfaW5wdXQoYnR2LDApOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1ncGlvLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1ncGlvLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1ncGlvLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtaTJjLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwppbmRleCA2MTRjMTIwLi40YjU2MmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCkBAIC0zMDIsNiArMzAyLDEwIEBACiAJaWYgKCFjbGllbnQtPmRyaXZlci0+Y29tbWFuZCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IEkyQ19EUklWRVJJRF9NU1AzNDAwKQorCQlidHYtPmkyY19tc3AzNHh4X2NsaWVudCA9IGNsaWVudDsKKwlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IEkyQ19EUklWRVJJRF9UVkFVRElPKQorCQlidHYtPmkyY190dmF1ZGlvX2NsaWVudCA9IGNsaWVudDsKIAlpZiAoYnR2LT50dW5lcl90eXBlICE9IFVOU0VUKSB7CiAJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlmLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di1pZi5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaWYuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaW5wdXQuYwpzaW1pbGFyaXR5IGluZGV4IDYxJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtaW5wdXQuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKaW5kZXggMjIxYjM2ZS4uNjllZmEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKQEAgLTI4LDI1MSArMjgsNiBAQAogI2luY2x1ZGUgImJ0dHYuaCIKICNpbmNsdWRlICJidHR2cC5oIgogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMzQgXSA9IEtFWV9LUDAsCi0JWyA0MCBdID0gS0VZX0tQMSwKLQlbIDI0IF0gPSBLRVlfS1AyLAotCVsgNTYgXSA9IEtFWV9LUDMsCi0JWyAzNiBdID0gS0VZX0tQNCwKLQlbIDIwIF0gPSBLRVlfS1A1LAotCVsgNTIgXSA9IEtFWV9LUDYsCi0JWyA0NCBdID0gS0VZX0tQNywKLQlbIDI4IF0gPSBLRVlfS1A4LAotCVsgNjAgXSA9IEtFWV9LUDksCi0KLQlbIDQ4IF0gPSBLRVlfRUpFQ1RDRCwgICAgIC8vIFVubWFya2VkIG9uIG15IGNvbnRyb2xsZXIKLQlbICAwIF0gPSBLRVlfUE9XRVIsCi0JWyAxOCBdID0gQlROX0xFRlQsICAgICAgICAvLyBESVNQTEFZL0wKLQlbIDUwIF0gPSBCVE5fUklHSFQsICAgICAgIC8vIExPT1AvUgotCVsgMTAgXSA9IEtFWV9NVVRFLAotCVsgMzggXSA9IEtFWV9SRUNPUkQsCi0JWyAyMiBdID0gS0VZX1BBVVNFLAotCVsgNTQgXSA9IEtFWV9TVE9QLAotCVsgMzAgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgNjIgXSA9IEtFWV9WT0xVTUVVUCwKLQotCVsgMzIgXSA9IEtFWV9UVU5FUiwgICAgICAgLy8gVFYvRk0KLQlbIDE2IF0gPSBLRVlfQ0QsCi0JWyAgOCBdID0gS0VZX1ZJREVPLAotCVsgIDQgXSA9IEtFWV9BVURJTywKLQlbIDEyIF0gPSBLRVlfWk9PTSwgICAgICAgIC8vIGZ1bGwgc2NyZWVuCi0JWyAgMiBdID0gS0VZX0lORk8sICAgICAgICAvLyBwcmV2aWV3Ci0JWyA0MiBdID0gS0VZX1NFQVJDSCwgICAgICAvLyBhdXRvc2NhbgotCVsgMjYgXSA9IEtFWV9TVE9QLCAgICAgICAgLy8gZnJlZXplCi0JWyA1OCBdID0gS0VZX1JFQ09SRCwgICAgICAvLyBjYXB0dXJlCi0JWyAgNiBdID0gS0VZX1BMQVksICAgICAgICAvLyB1bm1hcmtlZAotCVsgNDYgXSA9IEtFWV9SRUQsICAgICAgICAgLy8gdW5tYXJrZWQKLQlbIDE0IF0gPSBLRVlfR1JFRU4sICAgICAgIC8vIHVubWFya2VkCi0KLQlbIDMzIF0gPSBLRVlfWUVMTE9XLCAgICAgIC8vIHVubWFya2VkCi0JWyAxNyBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgNDkgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAgMSBdID0gS0VZX0JMVUUsICAgICAgICAvLyB1bm1hcmtlZAotfTsKLQotLyogTWF0dCBKZXNzb24gPGR2YkBqZXNzb24uZWNsaXBzZS5jby51ayAqLwotc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0W0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MjggXSA9IEtFWV9LUDAsICAgICAgICAgLy8nMCcgLyAnZW50ZXInCi0JWyAweDIyIF0gPSBLRVlfS1AxLCAgICAgICAgIC8vJzEnCi0JWyAweDEyIF0gPSBLRVlfS1AyLCAgICAgICAgIC8vJzInIC8gJ3VwIGFycm93JwotCVsgMHgzMiBdID0gS0VZX0tQMywgICAgICAgICAvLyczJwotCVsgMHgyNCBdID0gS0VZX0tQNCwgICAgICAgICAvLyc0JyAvICdsZWZ0IGFycm93JwotCVsgMHgxNCBdID0gS0VZX0tQNSwgICAgICAgICAvLyc1JwotCVsgMHgzNCBdID0gS0VZX0tQNiwgICAgICAgICAvLyc2JyAvICdyaWdodCBhcnJvdycKLQlbIDB4MjYgXSA9IEtFWV9LUDcsICAgICAgICAgLy8nNycKLQlbIDB4MTYgXSA9IEtFWV9LUDgsICAgICAgICAgLy8nOCcgLyAnZG93biBhcnJvdycKLQlbIDB4MzYgXSA9IEtFWV9LUDksICAgICAgICAgLy8nOScKLQotCVsgMHgyMCBdID0gS0VZX0xJU1QsICAgICAgICAvLyAnc291cmNlJwotCVsgMHgxMCBdID0gS0VZX1RFWFQsICAgICAgICAvLyAndGVsZXRleHQnCi0JWyAweDAwIF0gPSBLRVlfUE9XRVIsICAgICAgIC8vICdwb3dlcicKLQlbIDB4MDQgXSA9IEtFWV9BVURJTywgICAgICAgLy8gJ2F1ZGlvJwotCVsgMHgwNiBdID0gS0VZX1pPT00sICAgICAgICAvLyAnZnVsbCBzY3JlZW4nCi0JWyAweDE4IF0gPSBLRVlfVklERU8sICAgICAgIC8vICdkaXNwbGF5JwotCVsgMHgzOCBdID0gS0VZX1NFQVJDSCwgICAgICAvLyAnbG9vcCcKLQlbIDB4MDggXSA9IEtFWV9JTkZPLCAgICAgICAgLy8gJ3ByZXZpZXcnCi0JWyAweDJhIF0gPSBLRVlfUkVXSU5ELCAgICAgIC8vICdiYWNrd2FyZCA8PCcKLQlbIDB4MWEgXSA9IEtFWV9GQVNURk9SV0FSRCwgLy8gJ2ZvcndhcmQgPj4nCi0JWyAweDNhIF0gPSBLRVlfUkVDT1JELCAgICAgIC8vICdjYXB0dXJlJwotCVsgMHgwYSBdID0gS0VZX01VVEUsICAgICAgICAvLyAnbXV0ZScKLQlbIDB4MmMgXSA9IEtFWV9SRUNPUkQsICAgICAgLy8gJ3JlY29yZCcKLQlbIDB4MWMgXSA9IEtFWV9QQVVTRSwgICAgICAgLy8gJ3BhdXNlJwotCVsgMHgzYyBdID0gS0VZX1NUT1AsICAgICAgICAvLyAnc3RvcCcKLQlbIDB4MGMgXSA9IEtFWV9QTEFZLCAgICAgICAgLy8gJ3BsYXknCi0JWyAweDJlIF0gPSBLRVlfUkVELCAgICAgICAgIC8vICdyZWQnCi0JWyAweDAxIF0gPSBLRVlfQkxVRSwgICAgICAgIC8vICdibHVlJyAvICdjYW5jZWwnCi0JWyAweDBlIF0gPSBLRVlfWUVMTE9XLCAgICAgIC8vICd5ZWxsb3cnIC8gJ29rJwotCVsgMHgyMSBdID0gS0VZX0dSRUVOLCAgICAgICAvLyAnZ3JlZW4nCi0JWyAweDExIF0gPSBLRVlfQ0hBTk5FTERPV04sIC8vICdjaGFubmVsIC0nCi0JWyAweDMxIF0gPSBLRVlfQ0hBTk5FTFVQLCAgIC8vICdjaGFubmVsICsnCi0JWyAweDFlIF0gPSBLRVlfVk9MVU1FRE9XTiwgIC8vICd2b2x1bWUgLScKLQlbIDB4M2UgXSA9IEtFWV9WT0xVTUVVUCwgICAgLy8gJ3ZvbHVtZSArJwotfTsKLQotLyogQXR0aWxhIEtvbmRvcm9zIDxhdHRpbGEua29uZG9yb3NAY2hlbGxvLmh1PiAqLwotc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbSVJfS0VZVEFCX1NJWkVdID0gewotCi0JWyAgMSBdID0gS0VZX0tQMSwKLQlbICAyIF0gPSBLRVlfS1AyLAotCVsgIDMgXSA9IEtFWV9LUDMsCi0JWyAgNCBdID0gS0VZX0tQNCwKLQlbICA1IF0gPSBLRVlfS1A1LAotCVsgIDYgXSA9IEtFWV9LUDYsCi0JWyAgNyBdID0gS0VZX0tQNywKLQlbICA4IF0gPSBLRVlfS1A4LAotCVsgIDkgXSA9IEtFWV9LUDksCi0JWyAgMCBdID0gS0VZX0tQMCwKLQlbIDIzIF0gPSBLRVlfTEFTVCwgICAgICAgIC8vICsxMDAKLQlbIDEwIF0gPSBLRVlfTElTVCwgICAgICAgIC8vIHJlY2FsbAotCi0KLQlbIDI4IF0gPSBLRVlfVFVORVIsICAgICAgIC8vIFRWL0ZNCi0JWyAyMSBdID0gS0VZX1NFQVJDSCwgICAgICAvLyBzY2FuCi0JWyAxOCBdID0gS0VZX1BPV0VSLCAgICAgICAvLyBwb3dlcgotCVsgMzEgXSA9IEtFWV9WT0xVTUVET1dOLCAgLy8gdm9sIHVwCi0JWyAyNyBdID0gS0VZX1ZPTFVNRVVQLCAgICAvLyB2b2wgZG93bgotCVsgMzAgXSA9IEtFWV9DSEFOTkVMRE9XTiwgLy8gY2huIHVwCi0JWyAyNiBdID0gS0VZX0NIQU5ORUxVUCwgICAvLyBjaG4gZG93bgotCi0JWyAxNyBdID0gS0VZX1ZJREVPLCAgICAgICAvLyB2aWRlbwotCVsgMTUgXSA9IEtFWV9aT09NLCAgICAgICAgLy8gZnVsbCBzY3JlZW4KLQlbIDE5IF0gPSBLRVlfTVVURSwgICAgICAgIC8vIG11dGUvdW5tdXRlCi0JWyAxNiBdID0gS0VZX1RFWFQsICAgICAgICAvLyBtaW4KLQotCVsgMTMgXSA9IEtFWV9TVE9QLCAgICAgICAgLy8gZnJlZXplCi0JWyAxNCBdID0gS0VZX1JFQ09SRCwgICAgICAvLyByZWNvcmQKLQlbIDI5IF0gPSBLRVlfUExBWVBBVVNFLCAgIC8vIHN0b3AKLQlbIDI1IF0gPSBLRVlfUExBWSwgICAgICAgIC8vIHBsYXkKLQotCVsgMjIgXSA9IEtFWV9HT1RPLCAgICAgICAgLy8gb3NkCi0JWyAyMCBdID0gS0VZX1JFRlJFU0gsICAgICAvLyBkZWZhdWx0Ci0JWyAxMiBdID0gS0VZX0tQUExVUywgICAgICAvLyBmaW5lIHR1bmUgPj4+PgotCVsgMjQgXSA9IEtFWV9LUE1JTlVTICAgICAgLy8gZmluZSB0dW5lIDw8PDwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2NvbmNlcHRyb25pY1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0KLQlbIDMwIF0gPSBLRVlfUE9XRVIsICAgICAgIC8vIHBvd2VyCi0JWyA3ICBdID0gS0VZX01FRElBLCAgICAgICAvLyBzb3VyY2UKLQlbIDI4IF0gPSBLRVlfU0VBUkNILCAgICAgIC8vIHNjYW4KLQotLyogRklYTUU6IGR1cGxpY2F0ZSBrZXljb2Rlcz8KLSAqCi0gKiBUaGVzZSBmb3VyIGtleXMgc2VlbSB0byBzaGFyZSB0aGUgc2FtZSBHUElPIGFzIENIKywgQ0gtLCA8PDwgYW5kID4+PgotICogVGhlIEdQSU8gdmFsdWVzIGFyZQotICogNjM5N2ZiIGZvciBib3RoICJTY2FuIDwiIGFuZCAiQ0ggLSIsCi0gKiA2MzlmZmIgZm9yICJTY2FuID4iIGFuZCAiQ0grIiwKLSAqIDYzODRmYiBmb3IgIlR1bmUgPCIgYW5kICI8PDwiLAotICogNjM4Y2ZiIGZvciAiVHVuZSA+IiBhbmQgIj4+PiIsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1hc2suCi0gKgotICoJWyAyMyBdID0gS0VZX0JBQ0ssICAgICAgICAvLyBmbSBzY2FuIDw8Ci0gKglbIDMxIF0gPSBLRVlfRk9SV0FSRCwgICAgIC8vIGZtIHNjYW4gPj4KLSAqCi0gKglbIDQgIF0gPSBLRVlfTEVGVCwgICAgICAgIC8vIGZtIHR1bmluZyA8Ci0gKglbIDEyIF0gPSBLRVlfUklHSFQsICAgICAgIC8vIGZtIHR1bmluZyA+Ci0gKgotICogRm9yIG5vdywgdGhlc2UgZm91ciBrZXlzIGFyZSBkaXNhYmxlZC4gUHJlc3NpbmcgdGhlbSB3aWxsIGdlbmVyYXRlCi0gKiB0aGUgQ0grL0NILS88PDwvPj4+IGV2ZW50cwotICovCi0KLQlbIDMgIF0gPSBLRVlfVFVORVIsICAgICAgIC8vIFRWL0ZNCi0KLQlbIDAgIF0gPSBLRVlfUkVDT1JELAotCVsgOCAgXSA9IEtFWV9TVE9QLAotCVsgMTcgXSA9IEtFWV9QTEFZLAotCi0JWyAyNiBdID0gS0VZX1BMQVlQQVVTRSwgICAvLyBmcmVlemUKLQlbIDI1IF0gPSBLRVlfWk9PTSwgICAgICAgIC8vIHpvb20KLQlbIDE1IF0gPSBLRVlfVEVYVCwgICAgICAgIC8vIG1pbgotCi0JWyAxICBdID0gS0VZX0tQMSwKLQlbIDExIF0gPSBLRVlfS1AyLAotCVsgMjcgXSA9IEtFWV9LUDMsCi0JWyA1ICBdID0gS0VZX0tQNCwKLQlbIDkgIF0gPSBLRVlfS1A1LAotCVsgMjEgXSA9IEtFWV9LUDYsCi0JWyA2ICBdID0gS0VZX0tQNywKLQlbIDEwIF0gPSBLRVlfS1A4LAotCVsgMTggXSA9IEtFWV9LUDksCi0JWyAyICBdID0gS0VZX0tQMCwKLQlbIDE2IF0gPSBLRVlfTEFTVCwgICAgICAgIC8vICsxMDAKLQlbIDE5IF0gPSBLRVlfTElTVCwgICAgICAgIC8vIHJlY2FsbAotCi0JWyAzMSBdID0gS0VZX0NIQU5ORUxVUCwgICAvLyBjaG4gZG93bgotCVsgMjMgXSA9IEtFWV9DSEFOTkVMRE9XTiwgLy8gY2huIHVwCi0JWyAyMiBdID0gS0VZX1ZPTFVNRVVQLCAgICAvLyB2b2wgZG93bgotCVsgMjAgXSA9IEtFWV9WT0xVTUVET1dOLCAgLy8gdm9sIHVwCi0KLQlbIDQgIF0gPSBLRVlfS1BNSU5VUywgICAgIC8vIDw8PAotCVsgMTQgXSA9IEtFWV9TRVRVUCwgICAgICAgLy8gZnVuY3Rpb24KLQlbIDEyIF0gPSBLRVlfS1BQTFVTLCAgICAgIC8vID4+PgotCi0JWyAxMyBdID0gS0VZX0dPVE8sICAgICAgICAvLyBtdHMKLQlbIDI5IF0gPSBLRVlfUkVGUkVTSCwgICAgIC8vIHJlc2V0Ci0JWyAyNCBdID0gS0VZX01VVEUgICAgICAgICAvLyBtdXRlL3VubXV0ZQotfTsKLQotc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX25lYnVsYVtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWzB4MDBdID0gS0VZX0tQMCwKLQlbMHgwMV0gPSBLRVlfS1AxLAotCVsweDAyXSA9IEtFWV9LUDIsCi0JWzB4MDNdID0gS0VZX0tQMywKLQlbMHgwNF0gPSBLRVlfS1A0LAotCVsweDA1XSA9IEtFWV9LUDUsCi0JWzB4MDZdID0gS0VZX0tQNiwKLQlbMHgwN10gPSBLRVlfS1A3LAotCVsweDA4XSA9IEtFWV9LUDgsCi0JWzB4MDldID0gS0VZX0tQOSwKLQlbMHgwYV0gPSBLRVlfVFYsCi0JWzB4MGJdID0gS0VZX0FVWCwKLQlbMHgwY10gPSBLRVlfRFZELAotCVsweDBkXSA9IEtFWV9QT1dFUiwKLQlbMHgwZV0gPSBLRVlfTUhQLAkvKiBsYWJlbGxlZCAnUGljdHVyZScgKi8KLQlbMHgwZl0gPSBLRVlfQVVESU8sCi0JWzB4MTBdID0gS0VZX0lORk8sCi0JWzB4MTFdID0gS0VZX0YxMywJLyogMTY6OSAqLwotCVsweDEyXSA9IEtFWV9GMTQsCS8qIDE0OjkgKi8KLQlbMHgxM10gPSBLRVlfRVBHLAotCVsweDE0XSA9IEtFWV9FWElULAotCVsweDE1XSA9IEtFWV9NRU5VLAotCVsweDE2XSA9IEtFWV9VUCwKLQlbMHgxN10gPSBLRVlfRE9XTiwKLQlbMHgxOF0gPSBLRVlfTEVGVCwKLQlbMHgxOV0gPSBLRVlfUklHSFQsCi0JWzB4MWFdID0gS0VZX0VOVEVSLAotCVsweDFiXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MWNdID0gS0VZX0NIQU5ORUxET1dOLAotCVsweDFkXSA9IEtFWV9WT0xVTUVVUCwKLQlbMHgxZV0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbMHgxZl0gPSBLRVlfUkVELAotCVsweDIwXSA9IEtFWV9HUkVFTiwKLQlbMHgyMV0gPSBLRVlfWUVMTE9XLAotCVsweDIyXSA9IEtFWV9CTFVFLAotCVsweDIzXSA9IEtFWV9TVUJUSVRMRSwKLQlbMHgyNF0gPSBLRVlfRjE1LAkvKiBBRCAqLwotCVsweDI1XSA9IEtFWV9URVhULAotCVsweDI2XSA9IEtFWV9NVVRFLAotCVsweDI3XSA9IEtFWV9SRVdJTkQsCi0JWzB4MjhdID0gS0VZX1NUT1AsCi0JWzB4MjldID0gS0VZX1BMQVksCi0JWzB4MmFdID0gS0VZX0ZBU1RGT1JXQVJELAotCVsweDJiXSA9IEtFWV9GMTYsCS8qIGNoYXB0ZXIgKi8KLQlbMHgyY10gPSBLRVlfUEFVU0UsCi0JWzB4MmRdID0gS0VZX1BMQVksCi0JWzB4MmVdID0gS0VZX1JFQ09SRCwKLQlbMHgyZl0gPSBLRVlfRjE3LAkvKiBwaWN0dXJlIGluIHBpY3R1cmUgKi8KLQlbMHgzMF0gPSBLRVlfS1BQTFVTLAkvKiB6b29tIGluICovCi0JWzB4MzFdID0gS0VZX0tQTUlOVVMsCS8qIHpvb20gb3V0ICovCi0JWzB4MzJdID0gS0VZX0YxOCwJLyogY2FwdHVyZSAqLwotCVsweDMzXSA9IEtFWV9GMTksCS8qIHdlYiAqLwotCVsweDM0XSA9IEtFWV9FTUFJTCwKLQlbMHgzNV0gPSBLRVlfUEhPTkUsCi0JWzB4MzZdID0gS0VZX1BDCi19OwogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOyAgICAvKiBkZWJ1ZyBsZXZlbCAoMCwxLDIpICovCkBAIC01NzMsNyArMzI4LDggQEAKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKIAljYXNlIEJUVFZfQk9BUkRfQ09OQ0VQVFJPTklDX0NUVkZNSTI6Ci0JCWlyX2NvZGVzICAgICAgICAgPSBpcl9jb2Rlc19jb25jZXB0cm9uaWM7CisJY2FzZSBCVFRWX0JPQVJEX0NPTlRWRk1JOgorCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfcGl4ZWx2aWV3OwogCQlpci0+bWFza19rZXljb2RlID0gMHgwMDFGMDA7CiAJCWlyLT5tYXNrX2tleXVwICAgPSAweDAwNjAwMDsKIAkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2LXJpc2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby9idHR2LXJpc2MuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYwppbmRleCBiNDBlOTczLi4xNjMyM2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtcmlzYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKQEAgLTUxLDggKzUxLDEwIEBACiAJaW50IHJjOwogCiAJLyogZXN0aW1hdGUgcmlzYyBtZW06IHdvcnN0IGNhc2UgaXMgb25lIHdyaXRlIHBlciBwYWdlIGJvcmRlciArCi0JICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKyBzeW5jICsganVtcCAoYWxsIDIgZHdvcmRzKSAqLwotCWluc3RydWN0aW9ucyAgPSAoYnBsICogbGluZXMpIC8gUEFHRV9TSVpFICsgbGluZXM7CisJICAgb25lIHdyaXRlIHBlciBzY2FuIGxpbmUgKyBzeW5jICsganVtcCAoYWxsIDIgZHdvcmRzKS4gIHBhZGRpbmcKKwkgICBjYW4gY2F1c2UgbmV4dCBicGwgdG8gc3RhcnQgY2xvc2UgdG8gYSBwYWdlIGJvcmRlci4gIEZpcnN0IERNQQorCSAgIHJlZ2lvbiBtYXkgYmUgc21hbGxlciB0aGFuIFBBR0VfU0laRSAqLworCWluc3RydWN0aW9ucyAgPSAxICsgKChicGwgKyBwYWRkaW5nKSAqIGxpbmVzKSAvIFBBR0VfU0laRSArIGxpbmVzOwogCWluc3RydWN0aW9ucyArPSAyOwogCWlmICgocmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MoYnR2LT5jLnBjaSxyaXNjLGluc3RydWN0aW9ucyo4KSkgPCAwKQogCQlyZXR1cm4gcmM7CkBAIC0xMDQsNyArMTA2LDcgQEAKIAogCS8qIHNhdmUgcG9pbnRlciB0byBqbXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwogCXJpc2MtPmptcCA9IHJwOwotCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgLyA0ID4gcmlzYy0+c2l6ZSk7CisJQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjIsNyArMjI0LDcgQEAKIAogCS8qIHNhdmUgcG9pbnRlciB0byBqbXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwogCXJpc2MtPmptcCA9IHJwOwotCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgLyA0ID4gcmlzYy0+c2l6ZSk7CisJQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzQsNiArMjc2LDggQEAKIAkJaWYgKGxpbmUgPiBtYXh5KQogCQkJYnRjeF9jYWxjX3NraXBzKGxpbmUsIG92LT53LndpZHRoLCAmbWF4eSwKIAkJCQkJc2tpcHMsICZuc2tpcHMsIG92LT5jbGlwcywgb3YtPm5jbGlwcyk7CisJCWVsc2UKKwkJCW5za2lwcyA9IDA7CiAKIAkJLyogd3JpdGUgb3V0IHJpc2MgY29kZSAqLwogCQlmb3IgKHN0YXJ0ID0gMCwgc2tpcCA9IDA7IHN0YXJ0IDwgb3YtPncud2lkdGg7IHN0YXJ0ID0gZW5kKSB7CkBAIC0zMDcsNyArMzExLDcgQEAKIAogCS8qIHNhdmUgcG9pbnRlciB0byBqbXAgaW5zdHJ1Y3Rpb24gYWRkcmVzcyAqLwogCXJpc2MtPmptcCA9IHJwOwotCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgLyA0ID4gcmlzYy0+c2l6ZSk7CisJQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOwogCWtmcmVlKHNraXBzKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNSwxMiArNTA5LDExIEBACiB9CiAKIHZvaWQKLWJ0dHZfZG1hX2ZyZWUoc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IGJ0dHZfYnVmZmVyICpidWYpCitidHR2X2RtYV9mcmVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSxzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgYnR0dl9idWZmZXIgKmJ1ZikKIHsKLQlpZiAoaW5faW50ZXJydXB0KCkpCi0JCUJVRygpOworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLDAsMCk7Ci0JdmlkZW9idWZfZG1hX3BjaV91bm1hcChidHYtPmMucGNpLCAmYnVmLT52Yi5kbWEpOworCXZpZGVvYnVmX2RtYV91bm1hcChxLCAmYnVmLT52Yi5kbWEpOwogCXZpZGVvYnVmX2RtYV9mcmVlKCZidWYtPnZiLmRtYSk7CiAJYnRjeF9yaXNjbWVtX2ZyZWUoYnR2LT5jLnBjaSwmYnVmLT5ib3R0b20pOwogCWJ0Y3hfcmlzY21lbV9mcmVlKGJ0di0+Yy5wY2ksJmJ1Zi0+dG9wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtdmJpLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwppbmRleCA3MmFmZGQ2Li5lMjBmZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCkBAIC05Niw3ICs5Niw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKFNUQVRFX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgewotCQlpZiAoMCAhPSAocmMgPSB2aWRlb2J1Zl9pb2xvY2soYnR2LT5jLnBjaSwgJmJ1Zi0+dmIsIE5VTEwpKSkKKwkJaWYgKDAgIT0gKHJjID0gdmlkZW9idWZfaW9sb2NrKHEsICZidWYtPnZiLCBOVUxMKSkpCiAJCQlnb3RvIGZhaWw7CiAJCWlmICgwICE9IChyYyA9IHZiaV9idWZmZXJfcmlzYyhidHYsYnVmLGZoLT5saW5lcykpKQogCQkJZ290byBmYWlsOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsOgotCWJ0dHZfZG1hX2ZyZWUoYnR2LGJ1Zik7CisJYnR0dl9kbWFfZnJlZShxLGJ0dixidWYpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTM2LDcgKzEzNiw3IEBACiAJc3RydWN0IGJ0dHZfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsc3RydWN0IGJ0dHZfYnVmZmVyLHZiKTsKIAogCWRwcmludGsoImZyZWUgJXBcbiIsdmIpOwotCWJ0dHZfZG1hX2ZyZWUoZmgtPmJ0dixidWYpOworCWJ0dHZfZG1hX2ZyZWUoJmZoLT5jYXAsZmgtPmJ0dixidWYpOwogfQogCiBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGJ0dHZfdmJpX3FvcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnR0di5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaAppbmRleCA5OTA4YzhlLi4zYTIzMjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0dHYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS9pMmMtYWRkci5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBleHBvcnRlZCBieSBidHR2LWNhcmRzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNjgsMjUgKzE2OSw2IEBACiAjZGVmaW5lIEJUVFZfQk9BUkRfSEFVUFBBVUdFX0lNUEFDVFZDQiAgICAgMHg4ZgogI2RlZmluZSBCVFRWX0JPQVJEX01BQ0hUVl9NQUdJQ1RWICAgICAgICAgIDB4OTAKIAotLyogaTJjIGFkZHJlc3MgbGlzdCAqLwotI2RlZmluZSBJMkNfVFNBNTUyMiAgICAgICAgMHhjMgotI2RlZmluZSBJMkNfVERBNzQzMiAgICAgICAgMHg4YQotI2RlZmluZSBJMkNfQlQ4MzJfQUxUMQkgICAweDg4Ci0jZGVmaW5lIEkyQ19CVDgzMl9BTFQyCSAgIDB4OGEgLy8gYWx0ZXJuYXRlIHNldHRpbmcKLSNkZWZpbmUgSTJDX1REQTg0MjUgICAgICAgIDB4ODIKLSNkZWZpbmUgSTJDX1REQTk4NDAgICAgICAgIDB4ODQKLSNkZWZpbmUgSTJDX1REQTk4NTAgICAgICAgIDB4YjYgLyogYWxzbyB1c2VkIGJ5IDk4NTUsOTg3MyAqLwotI2RlZmluZSBJMkNfVERBOTg3NCAgICAgICAgMHhiMCAvKiBhbHNvIHVzZWQgYnkgOTg3NSAqLwotI2RlZmluZSBJMkNfVERBOTg3NSAgICAgICAgMHhiMAotI2RlZmluZSBJMkNfSEFVUEVFICAgICAgICAgMHhhMAotI2RlZmluZSBJMkNfU1RCRUUgICAgICAgICAgMHhhZQotI2RlZmluZSBJMkNfVkhYICAgICAgICAgICAgMHhjMAotI2RlZmluZSBJMkNfTVNQMzQwMCAgICAgICAgMHg4MAotI2RlZmluZSBJMkNfTVNQMzQwMF9BTFQgICAgMHg4OAotI2RlZmluZSBJMkNfVEVBNjMwMCAgICAgICAgMHg4MCAvKiBhbHNvIHVzZWQgYnkgNjMyMCAqLwotI2RlZmluZSBJMkNfRFBMMzUxOAkgICAweDg0Ci0jZGVmaW5lIEkyQ19UREE5ODg3CSAgIDB4ODYKLQogLyogbW9yZSBjYXJkLXNwZWNpZmljIGRlZmluZXMgKi8KICNkZWZpbmUgUFQyMjU0X0xfQ0hBTk5FTCAweDEwCiAjZGVmaW5lIFBUMjI1NF9SX0NIQU5ORUwgMHgwOApAQCAtMjUyLDcgKzIzNCw4IEBACiAJdW5zaWduZWQgaW50IGRpZ2l0YWxfbW9kZTsgLy8gRElHSVRBTF9NT0RFX0NBTUVSQSBvciBESUdJVEFMX01PREVfVklERU8KIAl1MzIgZ3Bpb21hc2s7CiAJdTMyIG11eHNlbFsxNl07Ci0JdTMyIGF1ZGlvbXV4WzZdOyAvKiBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCwgbXV0ZSwgc3RlcmVvICovCisJdTMyIGdwaW9tdXhbNF07ICAvKiBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCAqLworCXUzMiBncGlvbXV0ZTsgICAgLyogR1BJTyBtdXRlIHNldHRpbmcgKi8KIAl1MzIgZ3Bpb21hc2syOyAgIC8qIEdQSU8gTVVYIG1hc2sgKi8KIAogCS8qIGkyYyBhdWRpbyBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vYnR0dnAuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCmluZGV4IDljYjcyZjEuLmVlOTg5ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKQEAgLTQxLDcgKzQxLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KQEAgLTE5MCw3ICsxODksOCBAQAogCQkJICAgICAgIHN0cnVjdCBidHR2X2J1ZmZlcl9zZXQgKnNldCk7CiBpbnQgYnR0dl9idWZmZXJfYWN0aXZhdGVfdmJpKHN0cnVjdCBidHR2ICpidHYsCiAJCQkgICAgIHN0cnVjdCBidHR2X2J1ZmZlciAqdmJpKTsKLXZvaWQgYnR0dl9kbWFfZnJlZShzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgYnR0dl9idWZmZXIgKmJ1Zik7Cit2b2lkIGJ0dHZfZG1hX2ZyZWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgYnR0diAqYnR2LAorCQkgICBzdHJ1Y3QgYnR0dl9idWZmZXIgKmJ1Zik7CiAKIC8qIG92ZXJsYXkgaGFuZGxpbmcgKi8KIGludCBidHR2X292ZXJsYXlfcmlzYyhzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgYnR0dl9vdmVybGF5ICpvdiwKQEAgLTI5OCw2ICsyOTgsOCBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zdGF0ZSwgaTJjX3JjOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGkyY19kb25lOwogCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICAgIGkyY19xdWV1ZTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAJICAqaTJjX21zcDM0eHhfY2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50IAkgICppMmNfdHZhdWRpb19jbGllbnQ7CiAKIAkvKiB2aWRlbzRsaW51eCAoMSkgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CkBAIC0zMjAsNiArMzIyLDcgQEAKIAkvKiB2aWRlbyBzdGF0ZSAqLwogCXVuc2lnbmVkIGludCBpbnB1dDsKIAl1bnNpZ25lZCBpbnQgYXVkaW87CisJdW5zaWduZWQgaW50IG11dGU7CiAJdW5zaWduZWQgbG9uZyBmcmVxOwogCWludCB0dm5vcm0saHVlLGNvbnRyYXN0LGJyaWdodCxzYXR1cmF0aW9uOwogCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyIGZidWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCmluZGV4IDZiYWQ5M2UuLmNmNjFjNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5jCkBAIC03Myw3ICs3Myw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiYnctcWNhbS5oIgpAQCAtMTUwLDcgKzE1MCw3IEBACiBzdGF0aWMgc3RydWN0IHFjYW1fZGV2aWNlICpxY2FtX2luaXQoc3RydWN0IHBhcnBvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHFjYW1fZGV2aWNlICpxOwotCQorCiAJcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxY2FtX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmKHE9PU5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtMTU4LDE3ICsxNTgsMTcgQEAKIAlxLT5wcG9ydCA9IHBvcnQ7CiAJcS0+cGRldiA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKHBvcnQsICJidy1xY2FtIiwgTlVMTCwgTlVMTCwKIAkJCQkJICBOVUxMLCAwLCBOVUxMKTsKLQlpZiAocS0+cGRldiA9PSBOVUxMKSAKKwlpZiAocS0+cGRldiA9PSBOVUxMKQogCXsKIAkJcHJpbnRrKEtFUk5fRVJSICJidy1xY2FtOiBjb3VsZG4ndCByZWdpc3RlciBmb3IgJXMuXG4iLAogCQkgICAgICAgcG9ydC0+bmFtZSk7CiAJCWtmcmVlKHEpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JCisKIAltZW1jcHkoJnEtPnZkZXYsICZxY2FtX3RlbXBsYXRlLCBzaXplb2YocWNhbV90ZW1wbGF0ZSkpOwotCQotCWluaXRfTVVURVgoJnEtPmxvY2spOworCisJbXV0ZXhfaW5pdCgmcS0+bG9jayk7CiAKIAlxLT5wb3J0X21vZGUgPSAoUUNfQU5ZIHwgUUNfTk9UU0VUKTsKIAlxLT53aWR0aCA9IDMyMDsKQEAgLTIzNiwxMiArMjM2LDEyIEBACiAJCXdoaWxlICghKChzdGF0dXMgPSByZWFkX2xwc3RhdHVzKHEpKSAmIDgpKQogCQl7CiAJCQkvKiAxMDAwIGlzIGVub3VnaCBzcGlucyBvbiB0aGUgSS9PIGZvciBhbGwgbm9ybWFsCi0JCQkgICBjYXNlcywgYXQgdGhhdCBwb2ludCB3ZSBzdGFydCB0byBwb2xsIHNsb3dseSAKKwkJCSAgIGNhc2VzLCBhdCB0aGF0IHBvaW50IHdlIHN0YXJ0IHRvIHBvbGwgc2xvd2x5CiAJCQkgICB1bnRpbCB0aGUgY2FtZXJhIHdha2VzIHVwLiBIb3dldmVyLCB3ZSBhcmUKIAkJCSAgIGJ1c3kgYmxvY2tlZCB1bnRpbCB0aGUgY2FtZXJhIHJlc3BvbmRzLCBzbwogCQkJICAgc2V0dGluZyBpdCBsb3dlciBpcyBtdWNoIGJldHRlciBmb3IgaW50ZXJhY3RpdmUKIAkJCSAgIHJlc3BvbnNlLiAqLwotCQkJICAgCisKIAkJCWlmKHJ1bnMrKz5tYXhwb2xsKQogCQkJewogCQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUpOwpAQCAtMjU1LDEyICsyNTUsMTIgQEAKIAkJd2hpbGUgKCgoc3RhdHVzID0gcmVhZF9scHN0YXR1cyhxKSkgJiA4KSkKIAkJewogCQkJLyogMTAwMCBpcyBlbm91Z2ggc3BpbnMgb24gdGhlIEkvTyBmb3IgYWxsIG5vcm1hbAotCQkJICAgY2FzZXMsIGF0IHRoYXQgcG9pbnQgd2Ugc3RhcnQgdG8gcG9sbCBzbG93bHkgCisJCQkgICBjYXNlcywgYXQgdGhhdCBwb2ludCB3ZSBzdGFydCB0byBwb2xsIHNsb3dseQogCQkJICAgdW50aWwgdGhlIGNhbWVyYSB3YWtlcyB1cC4gSG93ZXZlciwgd2UgYXJlCiAJCQkgICBidXN5IGJsb2NrZWQgdW50aWwgdGhlIGNhbWVyYSByZXNwb25kcywgc28KIAkJCSAgIHNldHRpbmcgaXQgbG93ZXIgaXMgbXVjaCBiZXR0ZXIgZm9yIGludGVyYWN0aXZlCiAJCQkgICByZXNwb25zZS4gKi8KLQkJCSAgIAorCiAJCQlpZihydW5zKys+bWF4cG9sbCkKIAkJCXsKIAkJCQltc2xlZXBfaW50ZXJydXB0aWJsZSg1KTsKQEAgLTI4MiwxNyArMjgyLDE3IEBACiB7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAlpbnQgcnVucz0wOwotCQotCWRvIAorCisJZG8KIAl7CiAJCXN0YXR1cyA9IHJlYWRfbHBkYXRhKHEpOwogCQkvKiAxMDAwIGlzIGVub3VnaCBzcGlucyBvbiB0aGUgSS9PIGZvciBhbGwgbm9ybWFsCi0JCSAgIGNhc2VzLCBhdCB0aGF0IHBvaW50IHdlIHN0YXJ0IHRvIHBvbGwgc2xvd2x5IAorCQkgICBjYXNlcywgYXQgdGhhdCBwb2ludCB3ZSBzdGFydCB0byBwb2xsIHNsb3dseQogCQkgICB1bnRpbCB0aGUgY2FtZXJhIHdha2VzIHVwLiBIb3dldmVyLCB3ZSBhcmUKIAkJICAgYnVzeSBibG9ja2VkIHVudGlsIHRoZSBjYW1lcmEgcmVzcG9uZHMsIHNvCiAJCSAgIHNldHRpbmcgaXQgbG93ZXIgaXMgbXVjaCBiZXR0ZXIgZm9yIGludGVyYWN0aXZlCiAJCSAgIHJlc3BvbnNlLiAqLwotCQkgICAKKwogCQlpZihydW5zKys+bWF4cG9sbCkKIAkJewogCQkJbXNsZWVwX2ludGVycnVwdGlibGUoNSk7CkBAIC0zMjEsNyArMzIxLDcgQEAKIAogCWxhc3RyZWcgPSByZWcgPSByZWFkX2xwc3RhdHVzKHEpICYgMHhmMDsKIAotCWZvciAoaSA9IDA7IGkgPCA1MDA7IGkrKykgCisJZm9yIChpID0gMDsgaSA8IDUwMDsgaSsrKQogCXsKIAkJcmVnID0gcmVhZF9scHN0YXR1cyhxKSAmIDB4ZjA7CiAJCWlmIChyZWcgIT0gbGFzdHJlZykKQEAgLTM1Nyw3ICszNTcsNyBAQAogCiBzdGF0aWMgdm9pZCBxY19yZXNldChzdHJ1Y3QgcWNhbV9kZXZpY2UgKnEpCiB7Ci0Jc3dpdGNoIChxLT5wb3J0X21vZGUgJiBRQ19GT1JDRV9NQVNLKSAKKwlzd2l0Y2ggKHEtPnBvcnRfbW9kZSAmIFFDX0ZPUkNFX01BU0spCiAJewogCQljYXNlIFFDX0ZPUkNFX1VOSURJUjoKIAkJCXEtPnBvcnRfbW9kZSA9IChxLT5wb3J0X21vZGUgJiB+UUNfTU9ERV9NQVNLKSB8IFFDX1VOSURJUjsKQEAgLTM3MCw3ICszNzAsNyBAQAogCQljYXNlIFFDX0FOWToKIAkJCXdyaXRlX2xwY29udHJvbChxLCAweDIwKTsKIAkJCXdyaXRlX2xwZGF0YShxLCAweDc1KTsKLQkKKwogCQkJaWYgKHJlYWRfbHBkYXRhKHEpICE9IDB4NzUpIHsKIAkJCQlxLT5wb3J0X21vZGUgPSAocS0+cG9ydF9tb2RlICYgflFDX01PREVfTUFTSykgfCBRQ19CSURJUjsKIAkJCX0gZWxzZSB7CkBAIC0zOTgsOCArMzk4LDggQEAKIHN0YXRpYyBpbnQgcWNfc2V0c2Nhbm1vZGUoc3RydWN0IHFjYW1fZGV2aWNlICpxKQogewogCWludCBvbGRfbW9kZSA9IHEtPm1vZGU7Ci0JCi0Jc3dpdGNoIChxLT50cmFuc2Zlcl9zY2FsZSkgCisKKwlzd2l0Y2ggKHEtPnRyYW5zZmVyX3NjYWxlKQogCXsKIAkJY2FzZSAxOgogCQkJcS0+bW9kZSA9IDA7CkBAIC00MTIsNyArNDEyLDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCXN3aXRjaCAocS0+YnBwKSAKKwlzd2l0Y2ggKHEtPmJwcCkKIAl7CiAJCWNhc2UgNDoKIAkJCWJyZWFrOwpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlzd2l0Y2ggKHEtPnBvcnRfbW9kZSAmIFFDX01PREVfTUFTSykgCisJc3dpdGNoIChxLT5wb3J0X21vZGUgJiBRQ19NT0RFX01BU0spCiAJewogCQljYXNlIFFDX0JJRElSOgogCQkJcS0+bW9kZSArPSAxOwpAQCAtNDMwLDEwICs0MzAsMTAgQEAKIAkJY2FzZSBRQ19VTklESVI6CiAJCQlicmVhazsKIAl9Ci0JCisKIAlpZiAocS0+bW9kZSAhPSBvbGRfbW9kZSkKIAkJcS0+c3RhdHVzIHw9IFFDX1BBUkFNX0NIQU5HRTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC00NTEsNyArNDUxLDcgQEAKIAkvKiBTZXQgdGhlIGJyaWdodG5lc3MuICBZZXMsIHRoaXMgaXMgcmVwZXRpdGl2ZSwgYnV0IGl0IHdvcmtzLgogCSAqIFNob3J0ZXIgdmVyc2lvbnMgc2VlbSB0byBmYWlsIHN1YnRseS4gIEZlZWwgZnJlZSB0byB0cnkgOi0pLiAqLwogCS8qIEkgdGhpbmsgdGhlIHByb2JsZW0gd2FzIGluIHFjX2NvbW1hbmQsIG5vdCBoZXJlIC0tIGJscyAqLwotCQorCiAJcWNfY29tbWFuZChxLCAweGIpOwogCXFjX2NvbW1hbmQocSwgcS0+YnJpZ2h0bmVzcyk7CiAKQEAgLTUwMiwxMyArNTAyLDEzIEBACiAJdW5zaWduZWQgaW50IGhpMiwgbG8yOwogCXN0YXRpYyBpbnQgc3RhdGUgPSAwOwogCi0JaWYgKGJ1ZmZlciA9PSBOVUxMKSAKKwlpZiAoYnVmZmVyID09IE5VTEwpCiAJewogCQlzdGF0ZSA9IDA7CiAJCXJldHVybiAwOwogCX0KLQkKLQlzd2l0Y2ggKHEtPnBvcnRfbW9kZSAmIFFDX01PREVfTUFTSykgCisKKwlzd2l0Y2ggKHEtPnBvcnRfbW9kZSAmIFFDX01PREVfTUFTSykKIAl7CiAJCWNhc2UgUUNfQklESVI6CQkvKiBCaS1kaXJlY3Rpb25hbCBQb3J0ICovCiAJCQl3cml0ZV9scGNvbnRyb2wocSwgMHgyNik7CkBAIC01MTcsNyArNTE3LDcgQEAKIAkJCXdyaXRlX2xwY29udHJvbChxLCAweDJlKTsKIAkJCWxvMiA9IChxY193YWl0aGFuZDIocSwgMCkgPj4gMSk7CiAJCQloaTIgPSAocmVhZF9scHN0YXR1cyhxKSA+PiAzKSAmIDB4MWY7Ci0JCQlzd2l0Y2ggKHEtPmJwcCkgCisJCQlzd2l0Y2ggKHEtPmJwcCkKIAkJCXsKIAkJCQljYXNlIDQ6CiAJCQkJCWJ1ZmZlclswXSA9IGxvICYgMHhmOwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQl3cml0ZV9scGNvbnRyb2wocSwgMHhlKTsKIAkJCWhpID0gKHFjX3dhaXRoYW5kKHEsIDApICYgMHhmMCkgPj4gNDsKIAotCQkJc3dpdGNoIChxLT5icHApIAorCQkJc3dpdGNoIChxLT5icHApCiAJCQl7CiAJCQkJY2FzZSA0OgogCQkJCQlidWZmZXJbMF0gPSBsbzsKQEAgLTU1Miw3ICs1NTIsNyBAQAogCQkJCQlyZXQgPSAyOwogCQkJCQlicmVhazsKIAkJCQljYXNlIDY6Ci0JCQkJCXN3aXRjaCAoc3RhdGUpIAorCQkJCQlzd2l0Y2ggKHN0YXRlKQogCQkJCQl7CiAJCQkJCQljYXNlIDA6CiAJCQkJCQkJYnVmZmVyWzBdID0gKGxvIDw8IDIpIHwgKChoaSAmIDB4YykgPj4gMik7CkBAIC02MDQsMTMgKzYwNCwxMyBAQAogCWludCAgc2hpZnQ9OC1xLT5icHA7CiAJY2hhciBpbnZlcnQ7CiAKLQlpZiAocS0+bW9kZSA9PSAtMSkgCisJaWYgKHEtPm1vZGUgPT0gLTEpCiAJCXJldHVybiAtRU5YSU87CiAKIAlxY19jb21tYW5kKHEsIDB4Nyk7CiAJcWNfY29tbWFuZChxLCBxLT5tb2RlKTsKIAotCWlmICgocS0+cG9ydF9tb2RlICYgUUNfTU9ERV9NQVNLKSA9PSBRQ19CSURJUikgCisJaWYgKChxLT5wb3J0X21vZGUgJiBRQ19NT0RFX01BU0spID09IFFDX0JJRElSKQogCXsKIAkJd3JpdGVfbHBjb250cm9sKHEsIDB4MmUpOwkvKiB0dXJuIHBvcnQgYXJvdW5kICovCiAJCXdyaXRlX2xwY29udHJvbChxLCAweDI2KTsKQEAgLTYxOCw3ICs2MTgsNyBAQAogCQl3cml0ZV9scGNvbnRyb2wocSwgMHgyZSk7CiAJCSh2b2lkKSBxY193YWl0aGFuZChxLCAwKTsKIAl9Ci0JCisKIAkvKiBzdHJhbmdlIC0tIHNob3VsZCBiZSAxNTo2MyBiZWxvdywgYnV0IDRicHAgaXMgb2RkICovCiAJaW52ZXJ0ID0gKHEtPmJwcCA9PSA0KSA/IDE2IDogNjM7CiAKQEAgLTYyOSwxNSArNjI5LDE1IEBACiAJICAgIHEtPnRyYW5zZmVyX3NjYWxlOwogCXRyYW5zcGVybGluZSA9ICh0cmFuc3BlcmxpbmUgKyBkaXZpc29yIC0gMSkgLyBkaXZpc29yOwogCi0JZm9yIChpID0gMCwgeWllbGQgPSB5aWVsZGxpbmVzOyBpIDwgbGluZXN0b3RyYW5zOyBpKyspIAorCWZvciAoaSA9IDAsIHlpZWxkID0geWllbGRsaW5lczsgaSA8IGxpbmVzdG90cmFuczsgaSsrKQogCXsKLQkJZm9yIChwaXhlbHNfcmVhZCA9IGogPSAwOyBqIDwgdHJhbnNwZXJsaW5lOyBqKyspIAorCQlmb3IgKHBpeGVsc19yZWFkID0gaiA9IDA7IGogPCB0cmFuc3BlcmxpbmU7IGorKykKIAkJewogCQkJYnl0ZXMgPSBxY19yZWFkYnl0ZXMocSwgYnVmZmVyKTsKLQkJCWZvciAoayA9IDA7IGsgPCBieXRlcyAmJiAocGl4ZWxzX3JlYWQgKyBrKSA8IHBpeGVsc19wZXJfbGluZTsgaysrKSAKKwkJCWZvciAoayA9IDA7IGsgPCBieXRlcyAmJiAocGl4ZWxzX3JlYWQgKyBrKSA8IHBpeGVsc19wZXJfbGluZTsgaysrKQogCQkJewogCQkJCWludCBvOwotCQkJCWlmIChidWZmZXJba10gPT0gMCAmJiBpbnZlcnQgPT0gMTYpIAorCQkJCWlmIChidWZmZXJba10gPT0gMCAmJiBpbnZlcnQgPT0gMTYpCiAJCQkJewogCQkJCQkvKiA0YnBwIGlzIG9kZCAoYWdhaW4pIC0tIGludmVydGVyIGlzIDE2LCBub3QgMTUsIGJ1dCBvdXRwdXQKIAkJCQkJICAgbXVzdCBiZSAwLTE1IC0tIGJscyAqLwpAQCAtNjUzLDcgKzY1Myw3IEBACiAJCQlwaXhlbHNfcmVhZCArPSBieXRlczsKIAkJfQogCQkodm9pZCkgcWNfcmVhZGJ5dGVzKHEsIE5VTEwpOwkvKiByZXNldCBzdGF0ZSBtYWNoaW5lICovCi0JCQorCiAJCS8qIEdyYWJiaW5nIGFuIGVudGlyZSBmcmFtZSBmcm9tIHRoZSBxdWlja2NhbSBpcyBhIGxlbmd0aHkKIAkJICAgcHJvY2Vzcy4gV2UgZG9uJ3QgKHVzdWFsbHkpIHdhbnQgdG8gYnVzeS1ibG9jayB0aGUKIAkJICAgcHJvY2Vzc29yIGZvciB0aGUgZW50aXJlIGZyYW1lLiB5aWVsZGxpbmVzIGlzIGEgbW9kdWxlCkBAIC02NjYsNyArNjY2LDcgQEAKIAkJfQogCX0KIAotCWlmICgocS0+cG9ydF9tb2RlICYgUUNfTU9ERV9NQVNLKSA9PSBRQ19CSURJUikgCisJaWYgKChxLT5wb3J0X21vZGUgJiBRQ19NT0RFX01BU0spID09IFFDX0JJRElSKQogCXsKIAkJd3JpdGVfbHBjb250cm9sKHEsIDIpOwogCQl3cml0ZV9scGNvbnRyb2wocSwgNik7CkBAIC02ODcsNyArNjg3LDcgQEAKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCBxY2FtX2RldmljZSAqcWNhbT0oc3RydWN0IHFjYW1fZGV2aWNlICopZGV2OwotCQorCiAJc3dpdGNoKGNtZCkKIAl7CiAJCWNhc2UgVklESU9DR0NBUDoKQEAgLTc2Miw3ICs3NjIsNyBAQAogCQkJICAgIAlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmKHAtPmRlcHRoIT00ICYmIHAtPmRlcHRoIT02KQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCisKIAkJCS8qCiAJCQkgKglOb3cgbG9hZCB0aGUgY2FtZXJhLgogCQkJICovCkBAIC03NzIsOSArNzcyLDkgQEAKIAkJCXFjYW0tPndoaXRlYmFsID0gcC0+d2hpdGVuZXNzPj44OwogCQkJcWNhbS0+YnBwID0gcC0+ZGVwdGg7CiAKLQkJCWRvd24oJnFjYW0tPmxvY2spOwkJCQorCQkJbXV0ZXhfbG9jaygmcWNhbS0+bG9jayk7CiAJCQlxY19zZXRzY2FubW9kZShxY2FtKTsKLQkJCXVwKCZxY2FtLT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmcWNhbS0+bG9jayk7CiAJCQlxY2FtLT5zdGF0dXMgfD0gUUNfUEFSQU1fQ0hBTkdFOwogCiAJCQlyZXR1cm4gMDsKQEAgLTc5MCwxMSArNzkwLDExIEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZih2dy0+d2lkdGg8ODB8fHZ3LT53aWR0aD4zMjApCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJCisKIAkJCXFjYW0tPndpZHRoID0gMzIwOwogCQkJcWNhbS0+aGVpZ2h0ID0gMjQwOwogCQkJcWNhbS0+dHJhbnNmZXJfc2NhbGUgPSA0OwotCQkJCisKIAkJCWlmKHZ3LT53aWR0aD49MTYwICYmIHZ3LT5oZWlnaHQ+PTEyMCkKIAkJCXsKIAkJCQlxY2FtLT50cmFuc2Zlcl9zY2FsZSA9IDI7CkBAIC04MDUsMTQgKzgwNSwxNCBAQAogCQkJCXFjYW0tPmhlaWdodCA9IDI0MDsKIAkJCQlxY2FtLT50cmFuc2Zlcl9zY2FsZSA9IDE7CiAJCQl9Ci0JCQlkb3duKCZxY2FtLT5sb2NrKTsKKwkJCW11dGV4X2xvY2soJnFjYW0tPmxvY2spOwogCQkJcWNfc2V0c2Nhbm1vZGUocWNhbSk7Ci0JCQl1cCgmcWNhbS0+bG9jayk7Ci0JCQkKKwkJCW11dGV4X3VubG9jaygmcWNhbS0+bG9jayk7CisKIAkJCS8qIFdlIG11c3QgdXBkYXRlIHRoZSBjYW1lcmEgYmVmb3JlIHdlIGdyYWIuIFdlIGNvdWxkCiAJCQkgICBqdXN0IGhhdmUgY2hhbmdlZCB0aGUgZ3JhYiBzaXplICovCiAJCQlxY2FtLT5zdGF0dXMgfD0gUUNfUEFSQU1fQ0hBTkdFOwotCQkJCisKIAkJCS8qIE9rIHdlIGZpZ3VyZWQgb3V0IHdoYXQgdG8gdXNlIGZyb20gb3VyIHdpZGUgY2hvaWNlICovCiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtODUzLDkgKzg1Myw5IEBACiAJc3RydWN0IHFjYW1fZGV2aWNlICpxY2FtPShzdHJ1Y3QgcWNhbV9kZXZpY2UgKil2OwogCWludCBsZW47CiAJcGFycG9ydF9jbGFpbV9vcl9ibG9jayhxY2FtLT5wZGV2KTsKLQkKLQlkb3duKCZxY2FtLT5sb2NrKTsKLQkKKworCW11dGV4X2xvY2soJnFjYW0tPmxvY2spOworCiAJcWNfcmVzZXQocWNhbSk7CiAKIAkvKiBVcGRhdGUgdGhlIGNhbWVyYSBwYXJhbWV0ZXJzIGlmIHdlIG5lZWQgdG8gKi8KQEAgLTg2MywxMyArODYzLDEzIEBACiAJCXFjX3NldChxY2FtKTsKIAogCWxlbj1xY19jYXB0dXJlKHFjYW0sIGJ1Zixjb3VudCk7Ci0JCi0JdXAoJnFjYW0tPmxvY2spOwotCQorCisJbXV0ZXhfdW5sb2NrKCZxY2FtLT5sb2NrKTsKKwogCXBhcnBvcnRfcmVsZWFzZShxY2FtLT5wZGV2KTsKIAlyZXR1cm4gbGVuOwogfQotIAorCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxY2FtX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgICAgICAgICA9IHZpZGVvX2V4Y2x1c2l2ZV9vcGVuLApAQCAtOTA1LDExICs5MDUsMTEgQEAKIAlxY2FtPXFjYW1faW5pdChwb3J0KTsKIAlpZihxY2FtPT1OVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQkJCisKIAlwYXJwb3J0X2NsYWltX29yX2Jsb2NrKHFjYW0tPnBkZXYpOwogCiAJcWNfcmVzZXQocWNhbSk7Ci0JCisKIAlpZihxY19kZXRlY3QocWNhbSk9PTApCiAJewogCQlwYXJwb3J0X3JlbGVhc2UocWNhbS0+cGRldik7CkBAIC05MjAsOSArOTIwLDkgQEAKIAlxY19jYWxpYnJhdGUocWNhbSk7CiAKIAlwYXJwb3J0X3JlbGVhc2UocWNhbS0+cGRldik7Ci0JCisKIAlwcmludGsoS0VSTl9JTkZPICJDb25uZWN0aXggUXVpY2tjYW0gb24gJXNcbiIsIHFjYW0tPnBwb3J0LT5uYW1lKTsKLQkKKwogCWlmKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcWNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpPT0tMSkKIAl7CiAJCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocWNhbS0+cGRldik7CkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCQlwcmludGsoIkNvbm5lY3RpeCBRdWlja2NhbSBtYXgtcG9sbCB3YXMgYWJvdmUgNTAwMC4gVXNpbmcgNTAwMC5cbiIpOwogCQltYXhwb2xsID0gNTAwMDsKIAl9Ci0JCisKIAlpZiAoeWllbGRsaW5lcyA8IDEpIHsKIAkJcHJpbnRrKCJDb25uZWN0aXggUXVpY2tjYW0geWllbGRsaW5lcyB3YXMgbGVzcyB0aGFuIDEuIFVzaW5nIDEuXG4iKTsKIAkJeWllbGRsaW5lcyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J3LXFjYW0uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5oCmluZGV4IDcyM2U4YWQuLjY3MDFkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnctcWNhbS5oCkBAIC01NSw3ICs1NSw3IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwogCXN0cnVjdCBwYXJkZXZpY2UgKnBkZXY7CiAJc3RydWN0IHBhcnBvcnQgKnBwb3J0OwotCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlpbnQgd2lkdGgsIGhlaWdodDsKIAlpbnQgYnBwOwogCWludCBtb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYy1xY2FtLmMKaW5kZXggOTk3NmRiNC4uMjJhNzM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jLXFjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2MtcWNhbS5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKgogICogVGhlIHBhcnBvcnQgcGFyYW1ldGVyIGNvbnRyb2xzIHdoaWNoIHBhcnBvcnRzIHdpbGwgYmUgc2Nhbm5lZC4KICAqIFNjYW5uaW5nIGFsbCBwYXJwb3J0cyBjYXVzZXMgc29tZSBwcmludGVycyB0byBwcmludCBhIGdhcmJhZ2UgcGFnZS4KLSAqICAgICAgIC0tIE1hcmNoIDE0LCAxOTk5ICBCaWxseSBEb25haHVlIDxiaWxseUBlc2NhcGUuY29tPiAKKyAqICAgICAgIC0tIE1hcmNoIDE0LCAxOTk5ICBCaWxseSBEb25haHVlIDxiaWxseUBlc2NhcGUuY29tPgogICoKICAqIEZpeGVkIGRhdGEgZm9ybWF0IHRvIEJHUiwgYWRkZWQgZm9yY2VfcmdiIHBhcmFtZXRlci4gQWRkZWQgbWlzc2luZwogICogcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlcigpIG9uIG1vZHVsZSByZW1vdmFsLgpAQCAtMzQsNyArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdHJ1Y3QgcWNhbV9kZXZpY2UgewpAQCAtNDcsNyArNDgsNyBAQAogCWludCBjb250cmFzdCwgYnJpZ2h0bmVzcywgd2hpdGViYWw7CiAJaW50IHRvcCwgbGVmdDsKIAl1bnNpZ25lZCBpbnQgYmlkaXJlY3Rpb25hbDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiAvKiBjYW1lcmFzIG1heGltdW0gKi8KQEAgLTg3LDcgKzg4LDcgQEAKIAlyZXR1cm4gKHBhcnBvcnRfcmVhZF9kYXRhKHFjYW0tPnBwb3J0KSAmIDB4MSk/MTowOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHFjYW1fYXdhaXRfcmVhZHkxKHN0cnVjdCBxY2FtX2RldmljZSAqcWNhbSwgCitzdGF0aWMgdW5zaWduZWQgaW50IHFjYW1fYXdhaXRfcmVhZHkxKHN0cnVjdCBxY2FtX2RldmljZSAqcWNhbSwKIAkJCQkJICAgICBpbnQgdmFsdWUpCiB7CiAJdW5zaWduZWQgbG9uZyBvbGRqaWZmaWVzID0gamlmZmllczsKQEAgLTk3LDcgKzk4LDcgQEAKIAkJaWYgKHFjYW1fcmVhZHkxKHFjYW0pID09IHZhbHVlKQogCQkJcmV0dXJuIDA7CiAKLQkvKiBJZiB0aGUgY2FtZXJhIGRpZG4ndCByZXNwb25kIHdpdGhpbiAxLzI1IHNlY29uZCwgcG9sbCBzbG93bHkgCisJLyogSWYgdGhlIGNhbWVyYSBkaWRuJ3QgcmVzcG9uZCB3aXRoaW4gMS8yNSBzZWNvbmQsIHBvbGwgc2xvd2x5CiAJICAgZm9yIGEgd2hpbGUuICovCiAJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspCiAJewpAQCAtMTIyLDcgKzEyMyw3IEBACiAJCWlmIChxY2FtX3JlYWR5MihxY2FtKSA9PSB2YWx1ZSkKIAkJCXJldHVybiAwOwogCi0JLyogSWYgdGhlIGNhbWVyYSBkaWRuJ3QgcmVzcG9uZCB3aXRoaW4gMS8yNSBzZWNvbmQsIHBvbGwgc2xvd2x5IAorCS8qIElmIHRoZSBjYW1lcmEgZGlkbid0IHJlc3BvbmQgd2l0aGluIDEvMjUgc2Vjb25kLCBwb2xsIHNsb3dseQogCSAgIGZvciBhIHdoaWxlLiAqLwogCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKQogCXsKQEAgLTE1NiwxMiArMTU3LDEyIEBACiAJdW5zaWduZWQgaW50IGlkYXRhOwogCXBhcnBvcnRfd3JpdGVfZGF0YShxY2FtLT5wcG9ydCwgZGF0YSk7CiAJaWRhdGEgPSBxY2FtX3JlYWRfZGF0YShxY2FtKTsKLQlpZiAoZGF0YSAhPSBpZGF0YSkgCisJaWYgKGRhdGEgIT0gaWRhdGEpCiAJewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjcWNhbTogc2VudCAleCBidXQgcmVjZWl2ZWQgJXhcbiIsIGRhdGEsIAorCQlwcmludGsoS0VSTl9XQVJOSU5HICJjcWNhbTogc2VudCAleCBidXQgcmVjZWl2ZWQgJXhcbiIsIGRhdGEsCiAJCSAgICAgICBpZGF0YSk7CiAJCXJldHVybiAxOwotCX0gCisJfQogCXJldHVybiAwOwogfQogCkBAIC0xOTIsMTIgKzE5MywxMiBAQAogCSAgIG5vIGRldmljZSB3YXMgZm91bmQiLiAgRml4IHRoaXMgb25lIGRheS4gKi8KIAlpZiAocWNhbS0+cHBvcnQtPnByb2JlX2luZm9bMF0uY2xhc3MgPT0gUEFSUE9SVF9DTEFTU19NRURJQQogCSAgICAmJiBxY2FtLT5wcG9ydC0+cHJvYmVfaW5mb1swXS5tb2RlbAotCSAgICAmJiAhc3RyY21wKHFjYW0tPnBkZXYtPnBvcnQtPnByb2JlX2luZm9bMF0ubW9kZWwsIAorCSAgICAmJiAhc3RyY21wKHFjYW0tPnBkZXYtPnBvcnQtPnByb2JlX2luZm9bMF0ubW9kZWwsCiAJCSAgICAgICAiQ29sb3IgUXVpY2tDYW0gMi4wIikpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlF1aWNrQ2FtOiBGb3VuZCBieSBJRUVFMTI4NCBwcm9iZS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9Ci0JCisKIAlpZiAocHJvYmUgPCAyKQogCQlyZXR1cm4gMDsKIApAQCAtMjA1LDExICsyMDYsMTEgQEAKIAogCS8qIGxvb2sgZm9yIGEgaGVhcnRiZWF0ICovCiAJb3N0YXQgPSBzdGF0ID0gcGFycG9ydF9yZWFkX3N0YXR1cyhxY2FtLT5wcG9ydCk7Ci0JZm9yIChpPTA7IGk8MjUwOyBpKyspIAorCWZvciAoaT0wOyBpPDI1MDsgaSsrKQogCXsKIAkJbWRlbGF5KDEpOwogCQlzdGF0ID0gcGFycG9ydF9yZWFkX3N0YXR1cyhxY2FtLT5wcG9ydCk7Ci0JCWlmIChvc3RhdCAhPSBzdGF0KSAKKwkJaWYgKG9zdGF0ICE9IHN0YXQpCiAJCXsKIAkJCWlmICgrK2NvdW50ID49IDMpIHJldHVybiAxOwogCQkJb3N0YXQgPSBzdGF0OwpAQCAtMjI1LDExICsyMjYsMTEgQEAKIAljb3VudCA9IDA7CiAKIAlvc3RhdCA9IHN0YXQgPSBwYXJwb3J0X3JlYWRfc3RhdHVzKHFjYW0tPnBwb3J0KTsKLQlmb3IgKGk9MDsgaTwyNTA7IGkrKykgCisJZm9yIChpPTA7IGk8MjUwOyBpKyspCiAJewogCQltZGVsYXkoMSk7CiAJCXN0YXQgPSBwYXJwb3J0X3JlYWRfc3RhdHVzKHFjYW0tPnBwb3J0KTsKLQkJaWYgKG9zdGF0ICE9IHN0YXQpIAorCQlpZiAob3N0YXQgIT0gc3RhdCkKIAkJewogCQkJaWYgKCsrY291bnQgPj0gMykgcmV0dXJuIDE7CiAJCQlvc3RhdCA9IHN0YXQ7CkBAIC0yNDYsNyArMjQ3LDcgQEAKIAlwYXJwb3J0X3dyaXRlX2NvbnRyb2wocWNhbS0+cHBvcnQsIDB4OCk7CiAJbWRlbGF5KDEpOwogCXBhcnBvcnRfd3JpdGVfY29udHJvbChxY2FtLT5wcG9ydCwgMHhjKTsKLQltZGVsYXkoMSk7ICAgICAgICAgIAorCW1kZWxheSgxKTsKIH0KIAogLyogUmVzZXQgdGhlIFF1aWNrQ2FtIGFuZCBwcm9ncmFtIGZvciBicmlnaHRuZXNzLCBjb250cmFzdCwKQEAgLTI1Nyw3ICsyNTgsNyBAQAogCXFjX3Jlc2V0KHEpOwogCiAJLyogU2V0IHRoZSBicmlnaHRuZXNzLiAgKi8KLSAgICAgICAJcWNhbV9zZXQocSwgMTEsIHEtPmJyaWdodG5lc3MpOworCXFjYW1fc2V0KHEsIDExLCBxLT5icmlnaHRuZXNzKTsKIAogCS8qIFNldCB0aGUgaGVpZ2h0IGFuZCB3aWR0aC4gIFRoZXNlIHJlZmVyIHRvIHRoZSBhY3R1YWwKIAkgICBDQ0QgYXJlYSAqYmVmb3JlKiBhcHBseWluZyB0aGUgc2VsZWN0ZWQgZGVjaW1hdGlvbi4gICovCkBAIC0yNzEsMTIgKzI3MiwxMiBAQAogCS8qIFNldCBjb250cmFzdCBhbmQgd2hpdGUgYmFsYW5jZS4gICovCiAJcWNhbV9zZXQocSwgMHgxOSwgcS0+Y29udHJhc3QpOwogCXFjYW1fc2V0KHEsIDB4MWYsIHEtPndoaXRlYmFsKTsKLQkKKwogCS8qIFNldCB0aGUgc3BlZWQuICAqLwogCXFjYW1fc2V0KHEsIDQ1LCAyKTsKIH0KIAotLyogUmVhZCBzb21lIGJ5dGVzIGZyb20gdGhlIGNhbWVyYSBhbmQgcHV0IHRoZW0gaW4gdGhlIGJ1ZmZlci4gCisvKiBSZWFkIHNvbWUgYnl0ZXMgZnJvbSB0aGUgY2FtZXJhIGFuZCBwdXQgdGhlbSBpbiB0aGUgYnVmZmVyLgogICAgbmJ5dGVzIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDMsIGJlY2F1c2UgYmlkaXJlY3Rpb25hbCBtb2RlIGdpdmVzCiAgICB1cyB0aHJlZSBieXRlcyBhdCBhIHRpbWUuICAqLwogCkBAIC0zODIsNyArMzgzLDcgQEAKIAogCWlmIChxY2FtX3NldChxLCA3LCAocS0+bW9kZSB8IChpc19iaV9kaXI/MTowKSkgKyAxKSkKIAkJcmV0dXJuIC1FSU87Ci0JCisKIAlsaW5lcyA9IHEtPmhlaWdodDsKIAlwaXhlbHNwZXJsaW5lID0gcS0+d2lkdGg7CiAJYml0c3BlcnhmZXIgPSAoaXNfYmlfZGlyKSA/IDI0IDogODsKQEAgLTQ5OCw3ICs0OTksNyBAQAogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHFjYW1fZGV2aWNlICpxY2FtPShzdHJ1Y3QgcWNhbV9kZXZpY2UgKilkZXY7Ci0JCisKIAlzd2l0Y2goY21kKQogCXsKIAkJY2FzZSBWSURJT0NHQ0FQOgpAQCAtNTczLDcgKzU3NCw3IEBACiAJCQkgKi8KIAkJCWlmIChwLT5kZXB0aCAhPSAyNCB8fCBwLT5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkdCMjQpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkKKwogCQkJLyoKIAkJCSAqCU5vdyBsb2FkIHRoZSBjYW1lcmEuCiAJCQkgKi8KQEAgLTU4MSwxMSArNTgyLDExIEBACiAJCQlxY2FtLT5jb250cmFzdCA9IHAtPmNvbnRyYXN0Pj44OwogCQkJcWNhbS0+d2hpdGViYWwgPSBwLT53aGl0ZW5lc3M+Pjg7CiAKLQkJCWRvd24oJnFjYW0tPmxvY2spOwkJCQorCQkJbXV0ZXhfbG9jaygmcWNhbS0+bG9jayk7CiAJCQlwYXJwb3J0X2NsYWltX29yX2Jsb2NrKHFjYW0tPnBkZXYpOwotCQkJcWNfc2V0dXAocWNhbSk7IAorCQkJcWNfc2V0dXAocWNhbSk7CiAJCQlwYXJwb3J0X3JlbGVhc2UocWNhbS0+cGRldik7Ci0JCQl1cCgmcWNhbS0+bG9jayk7CisJCQltdXRleF91bmxvY2soJnFjYW0tPmxvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJY2FzZSBWSURJT0NTV0lOOgpAQCAtNjAwLDExICs2MDEsMTEgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmKHZ3LT53aWR0aDw4MHx8dnctPndpZHRoPjMyMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQkKKwogCQkJcWNhbS0+d2lkdGggPSA4MDsKIAkJCXFjYW0tPmhlaWdodCA9IDYwOwogCQkJcWNhbS0+bW9kZSA9IFFDX0RFQ0lNQVRJT05fNDsKLQkJCQorCiAJCQlpZih2dy0+d2lkdGg+PTE2MCAmJiB2dy0+aGVpZ2h0Pj0xMjApCiAJCQl7CiAJCQkJcWNhbS0+d2lkdGggPSAxNjA7CkBAIC02MjYsMTMgKzYyNywxMyBAQAogCQkJCXFjYW0tPm1vZGUgPSBRQ19CSUxMSU9OUyB8IFFDX0RFQ0lNQVRJT05fMTsKIAkJCX0KICNlbmRpZgotCQkJLyogT2sgd2UgZmlndXJlZCBvdXQgd2hhdCB0byB1c2UgZnJvbSBvdXIgCisJCQkvKiBPayB3ZSBmaWd1cmVkIG91dCB3aGF0IHRvIHVzZSBmcm9tIG91cgogCQkJICAgd2lkZSBjaG9pY2UgKi8KLQkJCWRvd24oJnFjYW0tPmxvY2spOworCQkJbXV0ZXhfbG9jaygmcWNhbS0+bG9jayk7CiAJCQlwYXJwb3J0X2NsYWltX29yX2Jsb2NrKHFjYW0tPnBkZXYpOwogCQkJcWNfc2V0dXAocWNhbSk7CiAJCQlwYXJwb3J0X3JlbGVhc2UocWNhbS0+cGRldik7Ci0JCQl1cCgmcWNhbS0+bG9jayk7CisJCQltdXRleF91bmxvY2soJnFjYW0tPmxvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJY2FzZSBWSURJT0NHV0lOOgpAQCAtNjcyLDEyICs2NzMsMTIgQEAKIAlzdHJ1Y3QgcWNhbV9kZXZpY2UgKnFjYW09KHN0cnVjdCBxY2FtX2RldmljZSAqKXY7CiAJaW50IGxlbjsKIAotCWRvd24oJnFjYW0tPmxvY2spOworCW11dGV4X2xvY2soJnFjYW0tPmxvY2spOwogCXBhcnBvcnRfY2xhaW1fb3JfYmxvY2socWNhbS0+cGRldik7CiAJLyogUHJvYmFibHkgc2hvdWxkIGhhdmUgYSBzZW1hcGhvcmUgYWdhaW5zdCBtdWx0aXBsZSB1c2VycyAqLwotCWxlbiA9IHFjX2NhcHR1cmUocWNhbSwgYnVmLGNvdW50KTsgCisJbGVuID0gcWNfY2FwdHVyZShxY2FtLCBidWYsY291bnQpOwogCXBhcnBvcnRfcmVsZWFzZShxY2FtLT5wZGV2KTsKLQl1cCgmcWNhbS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxY2FtLT5sb2NrKTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC03MDYsNyArNzA3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcWNhbV9kZXZpY2UgKnFjYW1faW5pdChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgcWNhbV9kZXZpY2UgKnE7Ci0JCisKIAlxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFjYW1fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYocT09TlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC03MTcsMTcgKzcxOCwxNyBAQAogCiAJcS0+YmlkaXJlY3Rpb25hbCA9IChxLT5wcG9ydC0+bW9kZXMgJiBQQVJQT1JUX01PREVfVFJJU1RBVEUpPzE6MDsKIAotCWlmIChxLT5wZGV2ID09IE5VTEwpIAorCWlmIChxLT5wZGV2ID09IE5VTEwpCiAJewogCQlwcmludGsoS0VSTl9FUlIgImMtcWNhbTogY291bGRuJ3QgcmVnaXN0ZXIgZm9yICVzLlxuIiwKIAkJICAgICAgIHBvcnQtPm5hbWUpOwogCQlrZnJlZShxKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCQorCiAJbWVtY3B5KCZxLT52ZGV2LCAmcWNhbV90ZW1wbGF0ZSwgc2l6ZW9mKHFjYW1fdGVtcGxhdGUpKTsKIAotCWluaXRfTVVURVgoJnEtPmxvY2spOworCW11dGV4X2luaXQoJnEtPmxvY2spOwogCXEtPndpZHRoID0gcS0+Y2NkX3dpZHRoID0gMzIwOwogCXEtPmhlaWdodCA9IHEtPmNjZF9oZWlnaHQgPSAyNDA7CiAJcS0+bW9kZSA9IFFDX01JTExJT05TIHwgUUNfREVDSU1BVElPTl8xOwpAQCAtNzY1LDExICs3NjYsMTEgQEAKIAlxY2FtID0gcWNhbV9pbml0KHBvcnQpOwogCWlmIChxY2FtPT1OVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQkJCisKIAlwYXJwb3J0X2NsYWltX29yX2Jsb2NrKHFjYW0tPnBkZXYpOwogCiAJcWNfcmVzZXQocWNhbSk7Ci0JCisKIAlpZiAocHJvYmUgJiYgcWNfZGV0ZWN0KHFjYW0pPT0wKQogCXsKIAkJcGFycG9ydF9yZWxlYXNlKHFjYW0tPnBkZXYpOwpAQCAtNzgxLDcgKzc4Miw3IEBACiAJcWNfc2V0dXAocWNhbSk7CiAKIAlwYXJwb3J0X3JlbGVhc2UocWNhbS0+cGRldik7Ci0JCisKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZxY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucik9PS0xKQogCXsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgQ29sb3VyIFF1aWNrQ2FtIG9uICVzXG4iLApAQCAtNzkxLDkgKzc5Miw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gInZpZGVvJWQ6IENvbG91ciBRdWlja0NhbSBmb3VuZCBvbiAlc1xuIiwgCisJcHJpbnRrKEtFUk5fSU5GTyAidmlkZW8lZDogQ29sb3VyIFF1aWNrQ2FtIGZvdW5kIG9uICVzXG4iLAogCSAgICAgICBxY2FtLT52ZGV2Lm1pbm9yLCBxY2FtLT5wcG9ydC0+bmFtZSk7Ci0JCisKIAlxY2Ftc1tudW1fY2FtcysrXSA9IHFjYW07CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKaW5kZXggOWY1OTU0MS4uMjIyN2M1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAvKiBkZWZpbmUgX0NQSUFfREVCVUdfIGZvciB2ZXJib3NlIGRlYnVnIG91dHB1dCAoc2VlIGNwaWEuaCkgKi8KLS8qICNkZWZpbmUgX0NQSUFfREVCVUdfICAxICovICAKKy8qICNkZWZpbmUgX0NQSUFfREVCVUdfICAxICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIApAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaWZkZWYgQ09ORklHX0tNT0QKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CkBAIC01OCw3ICs1OCw3IEBACiAKICNpZmRlZiBNT0RVTEUKIG1vZHVsZV9wYXJhbSh2aWRlb19uciwgaW50LCAwKTsKLU1PRFVMRV9BVVRIT1IoIlNjb3R0IEouIEJlcnRpbiA8c2JlcnRpbkBzZWN1cmVueW0ubmV0PiAmIFBldGVyIFByZWdsZXIgPFBldGVyX1ByZWdsZXJAZW1haWwuY29tPiAmIEpvaGFubmVzIEVyZGZlbHQgPGpvaGFubmVzQGVyZGZlbGQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiU2NvdHQgSi4gQmVydGluIDxzYmVydGluQHNlY3VyZW55bS5uZXQ+ICYgUGV0ZXIgUHJlZ2xlciA8UGV0ZXJfUHJlZ2xlckBlbWFpbC5jb20+ICYgSm9oYW5uZXMgRXJkZmVsdCA8am9oYW5uZXNAZXJkZmVsdC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlY0TC1kcml2ZXIgZm9yIFZpc2lvbiBDUGlBIGJhc2VkIGNhbWVyYXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ2aWRlbyIpOwpAQCAtNjcsMTEgKzY3LDExIEBACiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgY29sb3JzcGFjZV9jb252ID0gMDsKIG1vZHVsZV9wYXJhbShjb2xvcnNwYWNlX2NvbnYsIHVzaG9ydCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNvbG9yc3BhY2VfY29udiwKLSAgICAgICAgICAgICAgICAgIlxuPG4+IENvbG9yc3BhY2UgY29udmVyc2lvbjoiCi0gICAgICAgICAgICAgICAgICJcbjAgPSBkaXNhYmxlIgotICAgICAgICAgICAgICAgICAiXG4xID0gZW5hYmxlIgotICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzIDAiCi0gICAgICAgICAgICAgICAgICJcbiIpOworCQkgIlxuPG4+IENvbG9yc3BhY2UgY29udmVyc2lvbjoiCisJCSAiXG4wID0gZGlzYWJsZSIKKwkJICJcbjEgPSBlbmFibGUiCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzIDAiCisJCSAiXG4iKTsKIAogI2RlZmluZSBBQk9VVCAiVjRMLURyaXZlciBmb3IgVmlzaW9uIENQaUEgYmFzZWQgY2FtZXJhcyIKIApAQCAtMTg5LDggKzE4OSw4IEBACiAjZGVmaW5lIFRDICAgICAgICAgICAgIDk0CiAjZGVmaW5lCUVYUF9BQ0NfREFSSyAgIDUwCiAjZGVmaW5lCUVYUF9BQ0NfTElHSFQgIDkwCi0jZGVmaW5lIEhJR0hfQ09NUF8xMDIgMTYwCQkKLSNkZWZpbmUgTUFYX0NPTVAgICAgICAyMzkJCQorI2RlZmluZSBISUdIX0NPTVBfMTAyIDE2MAorI2RlZmluZSBNQVhfQ09NUCAgICAgIDIzOQogI2RlZmluZSBEQVJLX1RJTUUgICAgICAgMwogI2RlZmluZSBMSUdIVF9USU1FICAgICAgMwogCkBAIC0yMDgsNyArMjA4LDcgQEAKIHN0YXRpYyB2b2lkIHJlc2V0X2NhbWVyYV9zdHJ1Y3Qoc3RydWN0IGNhbV9kYXRhICpjYW0pOwogc3RhdGljIGludCBmaW5kX292ZXJfZXhwb3N1cmUoaW50IGJyaWdodG5lc3MpOwogc3RhdGljIHZvaWQgc2V0X2ZsaWNrZXIoc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcywgdm9sYXRpbGUgdTMyICpjb21tYW5kX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9uKTsKKwkJCWludCBvbik7CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI2Miw3ICsyNjIsNyBAQAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqY3BpYV9wcm9jX3Jvb3Q9TlVMTDsKIAogc3RhdGljIGludCBjcGlhX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKwkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKIHsKIAljaGFyICpvdXQgPSBwYWdlOwogCWludCBsZW4sIHRtcDsKQEAgLTI3Niw1OCArMjc2LDU4IEBACiAJb3V0ICs9IHNwcmludGYob3V0LCAiVjRMIERyaXZlciB2ZXJzaW9uOiAgICAgICAlZC4lZC4lZFxuIiwKIAkJICAgICAgIENQSUFfTUFKX1ZFUiwgQ1BJQV9NSU5fVkVSLCBDUElBX1BBVENIX1ZFUik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiQ1BJQSBWZXJzaW9uOiAgICAgICAgICAgICAlZC4lMDJkICglZC4lZClcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24sCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24udmNWZXJzaW9uLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24udmNSZXZpc2lvbik7CisJCSAgICAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiwKKwkJICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiwKKwkJICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24udmNWZXJzaW9uLAorCQkgICAgICAgY2FtLT5wYXJhbXMudmVyc2lvbi52Y1JldmlzaW9uKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJDUElBIFBuUC1JRDogICAgICAgICAgICAgICUwNHg6JTA0eDolMDR4XG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnBucElELnZlbmRvciwgY2FtLT5wYXJhbXMucG5wSUQucHJvZHVjdCwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5wbnBJRC5kZXZpY2VSZXZpc2lvbik7CisJCSAgICAgICBjYW0tPnBhcmFtcy5wbnBJRC52ZW5kb3IsIGNhbS0+cGFyYW1zLnBucElELnByb2R1Y3QsCisJCSAgICAgICBjYW0tPnBhcmFtcy5wbnBJRC5kZXZpY2VSZXZpc2lvbik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiVlAtVmVyc2lvbjogICAgICAgICAgICAgICAlZC4lZCAlMDR4XG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnZwVmVyc2lvbi52cFZlcnNpb24sCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMudnBWZXJzaW9uLnZwUmV2aXNpb24sCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMudnBWZXJzaW9uLmNhbWVyYUhlYWRJRCk7Ci0JCisJCSAgICAgICBjYW0tPnBhcmFtcy52cFZlcnNpb24udnBWZXJzaW9uLAorCQkgICAgICAgY2FtLT5wYXJhbXMudnBWZXJzaW9uLnZwUmV2aXNpb24sCisJCSAgICAgICBjYW0tPnBhcmFtcy52cFZlcnNpb24uY2FtZXJhSGVhZElEKTsKKwogCW91dCArPSBzcHJpbnRmKG91dCwgInN5c3RlbV9zdGF0ZTogICAgICAgICAgICAgJSMwNHhcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLnN5c3RlbVN0YXRlKTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5zeXN0ZW1TdGF0ZSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiZ3JhYl9zdGF0ZTogICAgICAgICAgICAgICAlIzA0eFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMuZ3JhYlN0YXRlKTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5ncmFiU3RhdGUpOwogCW91dCArPSBzcHJpbnRmKG91dCwgInN0cmVhbV9zdGF0ZTogICAgICAgICAgICAgJSMwNHhcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLnN0cmVhbVN0YXRlKTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5zdHJlYW1TdGF0ZSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiZmF0YWxfZXJyb3I6ICAgICAgICAgICAgICAlIzA0eFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcik7CisJCSAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMuZmF0YWxFcnJvcik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiY21kX2Vycm9yOiAgICAgICAgICAgICAgICAlIzA0eFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMuY21kRXJyb3IpOworCQkgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLmNtZEVycm9yKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJkZWJ1Z19mbGFnczogICAgICAgICAgICAgICUjMDR4XG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5kZWJ1Z0ZsYWdzKTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy5kZWJ1Z0ZsYWdzKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJ2cF9zdGF0dXM6ICAgICAgICAgICAgICAgICUjMDR4XG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnN0YXR1cy52cFN0YXR1cyk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMudnBTdGF0dXMpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImVycm9yX2NvZGU6ICAgICAgICAgICAgICAgJSMwNHhcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuc3RhdHVzLmVycm9yQ29kZSk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5zdGF0dXMuZXJyb3JDb2RlKTsKIAkvKiBRWDMgc3BlY2lmaWMgZW50cmllcyAqLwogCWlmIChjYW0tPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKSB7CiAJCW91dCArPSBzcHJpbnRmKG91dCwgImJ1dHRvbjogICAgICAgICAgICAgICAgICAgJTRkXG4iLAotCQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5xeDMuYnV0dG9uKTsKKwkJCSAgICAgICBjYW0tPnBhcmFtcy5xeDMuYnV0dG9uKTsKIAkJb3V0ICs9IHNwcmludGYob3V0LCAiY3JhZGxlZDogICAgICAgICAgICAgICAgICAlNGRcbiIsCi0JCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnF4My5jcmFkbGVkKTsKKwkJCSAgICAgICBjYW0tPnBhcmFtcy5xeDMuY3JhZGxlZCk7CiAJfQogCW91dCArPSBzcHJpbnRmKG91dCwgInZpZGVvX3NpemU6ICAgICAgICAgICAgICAgJXNcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSA9PSBWSURFT1NJWkVfQ0lGID8KKwkJICAgICAgIGNhbS0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUgPT0gVklERU9TSVpFX0NJRiA/CiAJCSAgICAgICAiQ0lGICIgOiAiUUNJRiIpOwogCW91dCArPSBzcHJpbnRmKG91dCwgInJvaTogICAgICAgICAgICAgICAgICAgICAgKCUzZCwgJTNkKSB0byAoJTNkLCAlM2QpXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnJvaS5jb2xTdGFydCo4LAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnJvaS5yb3dTdGFydCo0LAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnJvaS5jb2xFbmQqOCwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5yb2kucm93RW5kKjQpOworCQkgICAgICAgY2FtLT5wYXJhbXMucm9pLmNvbFN0YXJ0KjgsCisJCSAgICAgICBjYW0tPnBhcmFtcy5yb2kucm93U3RhcnQqNCwKKwkJICAgICAgIGNhbS0+cGFyYW1zLnJvaS5jb2xFbmQqOCwKKwkJICAgICAgIGNhbS0+cGFyYW1zLnJvaS5yb3dFbmQqNCk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiYWN0dWFsX2ZwczogICAgICAgICAgICAgICAlM2RcbiIsIGNhbS0+ZnBzKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJ0cmFuc2Zlcl9yYXRlOiAgICAgICAgICAgICU0ZGtCL3NcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT50cmFuc2Zlcl9yYXRlKTsKLQkKKwkJICAgICAgIGNhbS0+dHJhbnNmZXJfcmF0ZSk7CisKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJcbnJlYWQtd3JpdGVcbiIpOwogCW91dCArPSBzcHJpbnRmKG91dCwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBjdXJyZW50ICAgICAgIG1pbiIKLQkgICAgICAgICAgICAgICAiICAgICAgIG1heCAgIGRlZmF1bHQgIGNvbW1lbnRcbiIpOworCQkgICAgICAgIiAgICAgICBtYXggICBkZWZhdWx0ICBjb21tZW50XG4iKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJicmlnaHRuZXNzOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MsIDAsIDEwMCwgNTApOworCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MsIDAsIDEwMCwgNTApOwogCWlmIChjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlVmVyc2lvbiA9PSAxICYmCiAJICAgY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVJldmlzaW9uID09IDIpCiAJCS8qIDEtMDIgZmlybXdhcmUgbGltaXRzIGNvbnRyYXN0IHRvIDgwICovCkBAIC0zMzYsMjYgKzMzNiwyNiBAQAogCQl0bXAgPSA5NjsKIAogCW91dCArPSBzcHJpbnRmKG91dCwgImNvbnRyYXN0OiAgICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZCIKLQkgICAgICAgICAgICAgICAiICBzdGVwcyBvZiA4XG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5jb250cmFzdCwgMCwgdG1wLCA0OCk7CisJCSAgICAgICAiICBzdGVwcyBvZiA4XG4iLAorCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LCAwLCB0bXAsIDQ4KTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJzYXR1cmF0aW9uOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24sIDAsIDEwMCwgNTApOworCQkgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24sIDAsIDEwMCwgNTApOwogCXRtcCA9ICgyNTAwMCs1MDAwKmNhbS0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSkvCiAJICAgICAgKDE8PGNhbS0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJzZW5zb3JfZnBzOiAgICAgICAgICAgICAlNGQuJTAzZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICB0bXAvMTAwMCwgdG1wJTEwMDAsIDMsIDMwLCAxNSk7CisJCSAgICAgICB0bXAvMTAwMCwgdG1wJTEwMDAsIDMsIDMwLCAxNSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAic3RyZWFtX3N0YXJ0X2xpbmU6ICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIDIqY2FtLT5wYXJhbXMuc3RyZWFtU3RhcnRMaW5lLCAwLAorCQkgICAgICAgMipjYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUsIDAsCiAJCSAgICAgICBjYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplID09IFZJREVPU0laRV9DSUYgPyAyODg6MTQ0LAogCQkgICAgICAgY2FtLT5wYXJhbXMuZm9ybWF0LnZpZGVvU2l6ZSA9PSBWSURFT1NJWkVfQ0lGID8gMjQwOjEyMCk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAic3ViX3NhbXBsZTogICAgICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUgPT0gU1VCU0FNUExFXzQyMCA/CisJCSAgICAgICBjYW0tPnBhcmFtcy5mb3JtYXQuc3ViU2FtcGxlID09IFNVQlNBTVBMRV80MjAgPwogCQkgICAgICAgIjQyMCIgOiAiNDIyIiwgIjQyMCIsICI0MjIiLCAiNDIyIik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAieXV2X29yZGVyOiAgICAgICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmZvcm1hdC55dXZPcmRlciA9PSBZVVZPUkRFUl9ZVVlWID8KKwkJICAgICAgIGNhbS0+cGFyYW1zLmZvcm1hdC55dXZPcmRlciA9PSBZVVZPUkRFUl9ZVVlWID8KIAkJICAgICAgICJZVVlWIiA6ICJVWVZZIiwgIllVWVYiICwgIlVZVlkiLCAiWVVZViIpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImVjcF90aW1pbmc6ICAgICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5lY3BUaW1pbmcgPyAic2xvdyIgOiAibm9ybWFsIiwgInNsb3ciLAorCQkgICAgICAgY2FtLT5wYXJhbXMuZWNwVGltaW5nID8gInNsb3ciIDogIm5vcm1hbCIsICJzbG93IiwKIAkJICAgICAgICJub3JtYWwiLCAibm9ybWFsIik7CiAKIAlpZiAoY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5iYWxhbmNlTW9kZSA9PSAyKSB7CkBAIC0zNjYsMTEgKzM2NiwxMSBAQAogCW91dCArPSBzcHJpbnRmKG91dCwgImNvbG9yX2JhbGFuY2VfbW9kZTogICAgICU4cyAgJThzICAlOHMiCiAJCSAgICAgICAiICAlOHNcbiIsICB0bXBzdHIsICJtYW51YWwiLCAiYXV0byIsICJhdXRvIik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAicmVkX2dhaW46ICAgICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UucmVkR2FpbiwgMCwgMjEyLCAzMik7CisJCSAgICAgICBjYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4sIDAsIDIxMiwgMzIpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImdyZWVuX2dhaW46ICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmdyZWVuR2FpbiwgMCwgMjEyLCA2KTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuZ3JlZW5HYWluLCAwLCAyMTIsIDYpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImJsdWVfZ2FpbjogICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJsdWVHYWluLCAwLCAyMTIsIDkyKTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLmNvbG91ckJhbGFuY2UuYmx1ZUdhaW4sIDAsIDIxMiwgOTIpOwogCiAJaWYgKGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVWZXJzaW9uID09IDEgJiYKIAkgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gMikKQEAgLTM4MSwxMSArMzgxLDExIEBACiAKIAlpZiAoY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2Fpbk1vZGUgPT0gMCkKIAkJb3V0ICs9IHNwcmludGYob3V0LCAibWF4X2dhaW46ICAgICAgICAgICAgICAgIHVua25vd24gICUyOHMiCi0JCSAgICAgICAgICAgICAgICIgIHBvd2VycyBvZiAyXG4iLCB0bXBzdHIpOyAKKwkJCSAgICAgICAiICBwb3dlcnMgb2YgMlxuIiwgdG1wc3RyKTsKIAllbHNlCiAJCW91dCArPSBzcHJpbnRmKG91dCwgIm1heF9nYWluOiAgICAgICAgICAgICAgICU4ZCAgJTI4cyIKIAkJCSAgICAgICAiICAxLDIsNCBvciA4IFxuIiwKLQkJICAgICAgICAgICAgICAgMTw8KGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW5Nb2RlLTEpLCB0bXBzdHIpOworCQkJICAgICAgIDE8PChjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZS0xKSwgdG1wc3RyKTsKIAogCXN3aXRjaChjYW0tPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlKSB7CiAJY2FzZSAxOgpAQCAtNDAyLDEwICs0MDIsMTAgQEAKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJleHBvc3VyZV9tb2RlOiAgICAgICAgICAlOHMgICU4cyAgJThzIgogCQkgICAgICAgIiAgJThzXG4iLCAgdG1wc3RyLCAibWFudWFsIiwgImF1dG8iLCAiYXV0byIpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImNlbnRyZV93ZWlnaHQ6ICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKLQkgICAgICAgICAgICAgICAoMi1jYW0tPnBhcmFtcy5leHBvc3VyZS5jZW50cmVXZWlnaHQpID8gIm9uIiA6ICJvZmYiLAotCSAgICAgICAgICAgICAgICJvZmYiLCAib24iLCAib24iKTsKKwkJICAgICAgICgyLWNhbS0+cGFyYW1zLmV4cG9zdXJlLmNlbnRyZVdlaWdodCkgPyAib24iIDogIm9mZiIsCisJCSAgICAgICAib2ZmIiwgIm9uIiwgIm9uIik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiZ2FpbjogICAgICAgICAgICAgICAgICAgJThkICAlOGQgIG1heF9nYWluICAlOGQgIDEsMiw0LDggcG9zc2libGVcbiIsCi0JICAgICAgICAgICAgICAgMTw8Y2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiwgMSwgMSk7CisJCSAgICAgICAxPDxjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluLCAxLCAxKTsKIAlpZiAoY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gMSAmJgogCSAgIGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9PSAyKQogCQkvKiAxLTAyIGZpcm13YXJlIGxpbWl0cyBmaW5lRXhwLzIgdG8gMTI3ICovCkBAIC00MTQsNyArNDE0LDcgQEAKIAkJdG1wID0gNTEwOwogCiAJb3V0ICs9IHNwcmludGYob3V0LCAiZmluZV9leHA6ICAgICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAqMiwgMCwgdG1wLCAwKTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAqMiwgMCwgdG1wLCAwKTsKIAlpZiAoY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gMSAmJgogCSAgIGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9PSAyKQogCQkvKiAxLTAyIGZpcm13YXJlIGxpbWl0cyBjb2Fyc2VFeHBIaSB0byAwICovCkBAIC00MjYsNDYgKzQyNiw0NiBAQAogCQkgICAgICAgIiAgJThkXG4iLCBjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbysKIAkJICAgICAgIDI1NipjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSwgMCwgdG1wLCAxODUpOwogCW91dCArPSBzcHJpbnRmKG91dCwgInJlZF9jb21wOiAgICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLCBDT01QX1JFRCwgMjU1LCBDT01QX1JFRCk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLCBDT01QX1JFRCwgMjU1LCBDT01QX1JFRCk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiZ3JlZW4xX2NvbXA6ICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMUNvbXAsIENPTVBfR1JFRU4xLCAyNTUsCisJCSAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wLCBDT01QX0dSRUVOMSwgMjU1LAogCQkgICAgICAgQ09NUF9HUkVFTjEpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImdyZWVuMl9jb21wOiAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wLCBDT01QX0dSRUVOMiwgMjU1LAorCQkgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4yQ29tcCwgQ09NUF9HUkVFTjIsIDI1NSwKIAkJICAgICAgIENPTVBfR1JFRU4yKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJibHVlX2NvbXA6ICAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAsIENPTVBfQkxVRSwgMjU1LCBDT01QX0JMVUUpOwotCQorCQkgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXAsIENPTVBfQkxVRSwgMjU1LCBDT01QX0JMVUUpOworCiAJb3V0ICs9IHNwcmludGYob3V0LCAiYXBjb3JfZ2FpbjE6ICAgICAgICAgICAgJSM4eCAgJSM4eCAgJSM4eCAgJSM4eFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMSwgMCwgMHhmZiwgMHgxYyk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMSwgMCwgMHhmZiwgMHgxYyk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiYXBjb3JfZ2FpbjI6ICAgICAgICAgICAgJSM4eCAgJSM4eCAgJSM4eCAgJSM4eFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMiwgMCwgMHhmZiwgMHgxYSk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMiwgMCwgMHhmZiwgMHgxYSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiYXBjb3JfZ2FpbjQ6ICAgICAgICAgICAgJSM4eCAgJSM4eCAgJSM4eCAgJSM4eFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluNCwgMCwgMHhmZiwgMHgyZCk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluNCwgMCwgMHhmZiwgMHgyZCk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiYXBjb3JfZ2Fpbjg6ICAgICAgICAgICAgJSM4eCAgJSM4eCAgJSM4eCAgJSM4eFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluOCwgMCwgMHhmZiwgMHgyYSk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluOCwgMCwgMHhmZiwgMHgyYSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAidmxfb2Zmc2V0X2dhaW4xOiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4xLCAwLCAyNTUsIDI0KTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4xLCAwLCAyNTUsIDI0KTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJ2bF9vZmZzZXRfZ2FpbjI6ICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIsIDAsIDI1NSwgMjgpOworCQkgICAgICAgY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIsIDAsIDI1NSwgMjgpOwogCW91dCArPSBzcHJpbnRmKG91dCwgInZsX29mZnNldF9nYWluNDogICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy52bE9mZnNldC5nYWluNCwgMCwgMjU1LCAzMCk7CisJCSAgICAgICBjYW0tPnBhcmFtcy52bE9mZnNldC5nYWluNCwgMCwgMjU1LCAzMCk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAidmxfb2Zmc2V0X2dhaW44OiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW44LCAwLCAyNTUsIDMwKTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW44LCAwLCAyNTUsIDMwKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJmbGlja2VyX2NvbnRyb2w6ICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPyAib24iIDogIm9mZiIsCisJCSAgICAgICBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA/ICJvbiIgOiAib2ZmIiwKIAkJICAgICAgICJvZmYiLCAib24iLCAib2ZmIik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAibWFpbnNfZnJlcXVlbmN5OiAgICAgICAgJThkICAlOGQgICU4ZCAgJThkIgotCSAgICAgICAgICAgICAgICIgb25seSA1MC82MFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPm1haW5zRnJlcSA/IDYwIDogNTAsIDUwLCA2MCwgNTApOworCQkgICAgICAgIiBvbmx5IDUwLzYwXG4iLAorCQkgICAgICAgY2FtLT5tYWluc0ZyZXEgPyA2MCA6IDUwLCA1MCwgNjAsIDUwKTsKIAlpZihjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUgPCAwKQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICJhbGxvd2FibGVfb3ZlcmV4cG9zdXJlOiAlNGRhdXRvICAgICAgYXV0byAgJThkICAgICAgYXV0b1xuIiwKLQkJICAgICAgICAgICAgICAgLWNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSwKLQkJICAgICAgICAgICAgICAgMjU1KTsKKwkJCSAgICAgICAtY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlLAorCQkJICAgICAgIDI1NSk7CiAJZWxzZQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICJhbGxvd2FibGVfb3ZlcmV4cG9zdXJlOiAlOGQgICAgICBhdXRvICAlOGQgICAgICBhdXRvXG4iLAotCQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUsCi0JCSAgICAgICAgICAgICAgIDI1NSk7CisJCQkgICAgICAgY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlLAorCQkJICAgICAgIDI1NSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiY29tcHJlc3Npb25fbW9kZTogICAgICAgIik7CiAJc3dpdGNoKGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLm1vZGUpIHsKIAljYXNlIENQSUFfQ09NUFJFU1NJT05fTk9ORToKQEAgLTQ4Myw1MiArNDgzLDUyIEBACiAJfQogCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBub25lLGF1dG8sbWFudWFsICAgICAgYXV0b1xuIik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiZGVjaW1hdGlvbl9lbmFibGU6ICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAotICAgICAgICAJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLmRlY2ltYXRpb24gPT0KLQkJICAgICAgIERFQ0lNQVRJT05fRU5BQiA/ICJvbiI6Im9mZiIsICJvZmYiLCAib24iLCAKKwkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLmRlY2ltYXRpb24gPT0KKwkJICAgICAgIERFQ0lNQVRJT05fRU5BQiA/ICJvbiI6Im9mZiIsICJvZmYiLCAib24iLAogCQkgICAgICAgIm9mZiIpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImNvbXByZXNzaW9uX3RhcmdldDogICAgJTlzICU5cyAlOXMgJTlzXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nICA9PSAKKwkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LmZyVGFyZ2V0aW5nICA9PQogCQkgICAgICAgQ1BJQV9DT01QUkVTU0lPTl9UQVJHRVRfRlJBTUVSQVRFID8KIAkJICAgICAgICJmcmFtZXJhdGUiOiJxdWFsaXR5IiwKIAkJICAgICAgICJmcmFtZXJhdGUiLCAicXVhbGl0eSIsICJxdWFsaXR5Iik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAidGFyZ2V0X2ZyYW1lcmF0ZTogICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSLCAxLCAzMCwgMTUpOworCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQudGFyZ2V0RlIsIDEsIDMwLCAxNSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAidGFyZ2V0X3F1YWxpdHk6ICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEsIDEsIDY0LCA1KTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEsIDEsIDY0LCA1KTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJ5X3RocmVzaG9sZDogICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMueXV2VGhyZXNob2xkLnlUaHJlc2hvbGQsIDAsIDMxLCA2KTsKKwkJICAgICAgIGNhbS0+cGFyYW1zLnl1dlRocmVzaG9sZC55VGhyZXNob2xkLCAwLCAzMSwgNik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAidXZfdGhyZXNob2xkOiAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnl1dlRocmVzaG9sZC51dlRocmVzaG9sZCwgMCwgMzEsIDYpOworCQkgICAgICAgY2FtLT5wYXJhbXMueXV2VGhyZXNob2xkLnV2VGhyZXNob2xkLCAwLCAzMSwgNik7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiaHlzdGVyZXNpczogICAgICAgICAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmh5c3RlcmVzaXMsIDAsIDI1NSwgMyk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5oeXN0ZXJlc2lzLCAwLCAyNTUsIDMpOwogCW91dCArPSBzcHJpbnRmKG91dCwgInRocmVzaG9sZF9tYXg6ICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy50aHJlc2hNYXgsIDAsIDI1NSwgMTEpOworCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMudGhyZXNoTWF4LCAwLCAyNTUsIDExKTsKIAlvdXQgKz0gc3ByaW50ZihvdXQsICJzbWFsbF9zdGVwOiAgICAgICAgICAgICAlOGQgICU4ZCAgJThkICAlOGRcbiIsCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwLCAwLCAyNTUsIDEpOworCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwLCAwLCAyNTUsIDEpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImxhcmdlX3N0ZXA6ICAgICAgICAgICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5sYXJnZVN0ZXAsIDAsIDI1NSwgMyk7CisJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5sYXJnZVN0ZXAsIDAsIDI1NSwgMyk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiZGVjaW1hdGlvbl9oeXN0ZXJlc2lzOiAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25IeXN0ZXJlc2lzLAorCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvbkh5c3RlcmVzaXMsCiAJCSAgICAgICAwLCAyNTUsIDIpOwogCW91dCArPSBzcHJpbnRmKG91dCwgImZyX2RpZmZfc3RlcF90aHJlc2g6ICAgICU4ZCAgJThkICAlOGQgICU4ZFxuIiwKLQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoLAorCQkgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZnJEaWZmU3RlcFRocmVzaCwKIAkJICAgICAgIDAsIDI1NSwgNSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAicV9kaWZmX3N0ZXBfdGhyZXNoOiAgICAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCwKKwkJICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCwKIAkJICAgICAgIDAsIDI1NSwgMyk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiZGVjaW1hdGlvbl90aHJlc2hfbW9kOiAgJThkICAlOGQgICU4ZCAgJThkXG4iLAotCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25UaHJlc2hNb2QsCisJCSAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uVGhyZXNoTW9kLAogCQkgICAgICAgMCwgMjU1LCAyKTsKIAkvKiBRWDMgc3BlY2lmaWMgZW50cmllcyAqLwogCWlmIChjYW0tPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKSB7Ci0JCW91dCArPSBzcHJpbnRmKG91dCwgInRvcGxpZ2h0OiAgICAgICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwgCi0JCSAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLnF4My50b3BsaWdodCA/ICJvbiIgOiAib2ZmIiwKKwkJb3V0ICs9IHNwcmludGYob3V0LCAidG9wbGlnaHQ6ICAgICAgICAgICAgICAgJThzICAlOHMgICU4cyAgJThzXG4iLAorCQkJICAgICAgIGNhbS0+cGFyYW1zLnF4My50b3BsaWdodCA/ICJvbiIgOiAib2ZmIiwKIAkJCSAgICAgICAib2ZmIiwgIm9uIiwgIm9mZiIpOwotCQlvdXQgKz0gc3ByaW50ZihvdXQsICJib3R0b21saWdodDogICAgICAgICAgICAlOHMgICU4cyAgJThzICAlOHNcbiIsIAotCQkgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5xeDMuYm90dG9tbGlnaHQgPyAib24iIDogIm9mZiIsCisJCW91dCArPSBzcHJpbnRmKG91dCwgImJvdHRvbWxpZ2h0OiAgICAgICAgICAgICU4cyAgJThzICAlOHMgICU4c1xuIiwKKwkJCSAgICAgICBjYW0tPnBhcmFtcy5xeDMuYm90dG9tbGlnaHQgPyAib24iIDogIm9mZiIsCiAJCQkgICAgICAgIm9mZiIsICJvbiIsICJvZmYiKTsKIAl9Ci0JCisKIAlsZW4gPSBvdXQgLSBwYWdlOwogCWxlbiAtPSBvZmY7CiAJaWYgKGxlbiA8IGNvdW50KSB7CkBAIC01NDMsNyArNTQzLDcgQEAKIAogCiBzdGF0aWMgaW50IG1hdGNoKGNoYXIgKmNoZWNrc3RyLCBjaGFyICoqYnVmZmVyLCB1bnNpZ25lZCBsb25nICpjb3VudCwKLSAgICAgICAgICAgICAgICAgaW50ICpmaW5kX2NvbG9uLCBpbnQgKmVycikKKwkJIGludCAqZmluZF9jb2xvbiwgaW50ICplcnIpCiB7CiAJaW50IHJldCwgY29sb25fZm91bmQgPSAxOwogCWludCBsZW4gPSBzdHJsZW4oY2hlY2tzdHIpOwpAQCAtNTgzLDcgKzU4Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQgY3BpYV93cml0ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKKwkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNhbV9kYXRhICpjYW0gPSBkYXRhOwogCXN0cnVjdCBjYW1fcGFyYW1zIG5ld19wYXJhbXM7CkBAIC02MTksMTIgKzYxOSwxMiBAQAogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9Ci0JCisKIAlidWZmZXIgPSBwYWdlOwotCQotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+cGFyYW1fbG9jaykpCisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPnBhcmFtX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQorCiAJLyoKIAkgKiBTa2lwIG92ZXIgbGVhZGluZyB3aGl0ZXNwYWNlCiAJICovCkBAIC02MzIsMTUgKzYzMiwxNSBAQAogCQktLWNvdW50OwogCQkrK2J1ZmZlcjsKIAl9Ci0JCisKIAltZW1jcHkoJm5ld19wYXJhbXMsICZjYW0tPnBhcmFtcywgc2l6ZW9mKHN0cnVjdCBjYW1fcGFyYW1zKSk7CiAJbmV3X21haW5zID0gY2FtLT5tYWluc0ZyZXE7Ci0JCisKICNkZWZpbmUgTUFUQ0goeCkgKG1hdGNoKHgsICZidWZmZXIsICZjb3VudCwgJmZpbmRfY29sb24sICZyZXR2YWwpKQogI2RlZmluZSBWQUxVRSAodmFsdWUoJmJ1ZmZlciwmY291bnQsICZyZXR2YWwpKQogI2RlZmluZSBGSVJNV0FSRV9WRVJTSU9OKHgseSkgKG5ld19wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gKHgpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9PSAoeSkpCi0JCisJCQkgICAgICAgbmV3X3BhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gKHkpKQorCiAJcmV0dmFsID0gMDsKIAl3aGlsZSAoY291bnQgJiYgIXJldHZhbCkgewogCQlmaW5kX2NvbG9uID0gMTsKQEAgLTY1Niw3ICs2NTYsNyBAQAogCQkJfQogCQkJY29tbWFuZF9mbGFncyB8PSBDT01NQU5EX1NFVENPTE9VUlBBUkFNUzsKIAkJCWlmKG5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlIDwgMCkKLQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9IAorCQkJCW5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlID0KIAkJCQkJLWZpbmRfb3Zlcl9leHBvc3VyZShuZXdfcGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzKTsKIAkJCWlmKG5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgIT0gMCkKIAkJCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VURkxJQ0tFUkNUUkw7CkBAIC03MjEsNyArNzIxLDcgQEAKIAkJCQkJLyogRWl0aGVyIGJhc2UgcmF0ZSB3b3VsZCB3b3JrIGhlcmUgKi8KIAkJCQkJbmV3X3BhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUgPSAxOwogCQkJCX0KLQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPSAKKwkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQogCQkJCQlmbGlja2VyX2p1bXBzW25ld19tYWluc10KIAkJCQkJW25ld19wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQogCQkJCQlbbmV3X3BhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07CkBAIC0xMDg1LDcgKzEwODUsNyBAQAogCQl9IGVsc2UgaWYgKE1BVENIKCJtYWluc19mcmVxdWVuY3kiKSkgewogCQkJaWYgKCFyZXR2YWwgJiYgTUFUQ0goIjUwIikpIHsKIAkJCQluZXdfbWFpbnMgPSAwOwotCQkJCW5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9IAorCQkJCW5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9CiAJCQkJCWZsaWNrZXJfanVtcHNbbmV3X21haW5zXQogCQkJCQlbbmV3X3BhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCiAJCQkJCVtuZXdfcGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKQEAgLTEwOTMsNyArMTA5Myw3IEBACiAJCQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRGTElDS0VSQ1RSTDsKIAkJCX0gZWxzZSBpZiAoIXJldHZhbCAmJiBNQVRDSCgiNjAiKSkgewogCQkJCW5ld19tYWlucyA9IDE7Ci0JCQkJbmV3X3BhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0gCisJCQkJbmV3X3BhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KIAkJCQkJZmxpY2tlcl9qdW1wc1tuZXdfbWFpbnNdCiAJCQkJCVtuZXdfcGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZV0KIAkJCQkJW25ld19wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkJCQlyZXR2YWwgPSAtRUlOVkFMOwogCQl9IGVsc2UgaWYgKE1BVENIKCJhbGxvd2FibGVfb3ZlcmV4cG9zdXJlIikpIHsKIAkJCWlmICghcmV0dmFsICYmIE1BVENIKCJhdXRvIikpIHsKLQkJCQluZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9IAorCQkJCW5ld19wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlID0KIAkJCQkJLWZpbmRfb3Zlcl9leHBvc3VyZShuZXdfcGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzKTsKIAkJCQlpZihuZXdfcGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlICE9IDApCiAJCQkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRGTElDS0VSQ1RSTDsKQEAgLTExNDYsMTAgKzExNDYsMTAgQEAKIAkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRDT01QUkVTU0lPTjsKIAkJfSBlbHNlIGlmIChNQVRDSCgiY29tcHJlc3Npb25fdGFyZ2V0IikpIHsKIAkJCWlmICghcmV0dmFsICYmIE1BVENIKCJxdWFsaXR5IikpCi0JCQkJbmV3X3BhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9IAorCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmcgPQogCQkJCQlDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9RVUFMSVRZOwogCQkJZWxzZSBpZiAoIXJldHZhbCAmJiBNQVRDSCgiZnJhbWVyYXRlIikpCi0JCQkJbmV3X3BhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9IAorCQkJCW5ld19wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmcgPQogCQkJCQlDUElBX0NPTVBSRVNTSU9OX1RBUkdFVF9GUkFNRVJBVEU7CiAJCQllbHNlCiAJCQkJcmV0dmFsID0gLUVJTlZBTDsKQEAgLTExNzMsNyArMTE3Myw3IEBACiAJCQlpZiAoIXJldHZhbCkgewogCQkJCWlmKHZhbCA+IDAgJiYgdmFsIDw9IDY0KQogCQkJCQluZXdfcGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldFEgPSB2YWw7Ci0JCQkJZWxzZSAKKwkJCQllbHNlCiAJCQkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQl9CiAJCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQ09NUFJFU1NJT05UQVJHRVQ7CkBAIC0xMjg4LDE5ICsxMjg4LDE5IEBACiAJCQl9CiAJCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUQ09NUFJFU1NJT05QQVJBTVM7CiAJCX0gZWxzZSBpZiAoTUFUQ0goInRvcGxpZ2h0IikpIHsKLQkJICAgICAgICBpZiAoIXJldHZhbCAmJiBNQVRDSCgib24iKSkKKwkJCWlmICghcmV0dmFsICYmIE1BVENIKCJvbiIpKQogCQkJCW5ld19wYXJhbXMucXgzLnRvcGxpZ2h0ID0gMTsKIAkJCWVsc2UgaWYgKCFyZXR2YWwgJiYgTUFUQ0goIm9mZiIpKQogCQkJCW5ld19wYXJhbXMucXgzLnRvcGxpZ2h0ID0gMDsKLQkJCWVsc2UgCisJCQllbHNlCiAJCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWNvbW1hbmRfZmxhZ3MgfD0gQ09NTUFORF9TRVRMSUdIVFM7CiAJCX0gZWxzZSBpZiAoTUFUQ0goImJvdHRvbWxpZ2h0IikpIHsKLQkJICAgICAgICBpZiAoIXJldHZhbCAmJiBNQVRDSCgib24iKSkKKwkJCWlmICghcmV0dmFsICYmIE1BVENIKCJvbiIpKQogCQkJCW5ld19wYXJhbXMucXgzLmJvdHRvbWxpZ2h0ID0gMTsKLQkJCWVsc2UgaWYgKCFyZXR2YWwgJiYgTUFUQ0goIm9mZiIpKSAgCisJCQllbHNlIGlmICghcmV0dmFsICYmIE1BVENIKCJvZmYiKSkKIAkJCQluZXdfcGFyYW1zLnF4My5ib3R0b21saWdodCA9IDA7Ci0JCQllbHNlIAorCQkJZWxzZQogCQkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQljb21tYW5kX2ZsYWdzIHw9IENPTU1BTkRfU0VUTElHSFRTOwogCQl9IGVsc2UgewpAQCAtMTMyNiw3ICsxMzI2LDcgQEAKIAkJCX0KIAkJfQogCX0KLSN1bmRlZiBNQVRDSAkKKyN1bmRlZiBNQVRDSAogI3VuZGVmIFZBTFVFCiAjdW5kZWYgRklSTVdBUkVfVkVSU0lPTgogCWlmICghcmV0dmFsKSB7CkBAIC0xMzQ5LDI0ICsxMzQ5LDI0IEBACiAJCXJldHZhbCA9IHNpemU7CiAJfSBlbHNlCiAJCURCRygiZXJyb3I6ICVkXG4iLCByZXR2YWwpOwotCQotCXVwKCZjYW0tPnBhcmFtX2xvY2spOwotCQorCisJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOworCiBvdXQ6CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOwotIAlyZXR1cm4gcmV0dmFsOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV9wcm9jX2NwaWFfY2FtKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQogewogCWNoYXIgbmFtZVs3XTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQkKKwogCWlmICghY3BpYV9wcm9jX3Jvb3QgfHwgIWNhbSkKIAkJcmV0dXJuOwogCiAJc3ByaW50ZihuYW1lLCAidmlkZW8lZCIsIGNhbS0+dmRldi5taW5vcik7Ci0JCisKIAllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGUkVHfFNfSVJVR098U19JV1VTUiwgY3BpYV9wcm9jX3Jvb3QpOwogCWlmICghZW50KQogCQlyZXR1cm47CkBAIC0xMzc0LDkgKzEzNzQsOSBAQAogCWVudC0+ZGF0YSA9IGNhbTsKIAllbnQtPnJlYWRfcHJvYyA9IGNwaWFfcmVhZF9wcm9jOwogCWVudC0+d3JpdGVfcHJvYyA9IGNwaWFfd3JpdGVfcHJvYzsKLQkvKiAKKwkvKgogCSAgIHNpemUgb2YgdGhlIHByb2MgZW50cnkgaXMgMzczNiBieXRlcyBmb3IgdGhlIHN0YW5kYXJkIHdlYmNhbTsKLSAJICAgdGhlIGV4dHJhIGZlYXR1cmVzIG9mIHRoZSBRWDMgbWljcm9zY29wZSBhZGQgMTg5IGJ5dGVzLgorCSAgIHRoZSBleHRyYSBmZWF0dXJlcyBvZiB0aGUgUVgzIG1pY3Jvc2NvcGUgYWRkIDE4OSBieXRlcy4KIAkgICAod2UgaGF2ZSBub3QgeWV0IHByb2JlZCB0aGUgY2FtZXJhIHRvIHNlZSB3aGljaCB0eXBlIGl0IGlzKS4KIAkqLwogCWVudC0+c2l6ZSA9IDM3MzYgKyAxODk7CkBAIC0xMzg2LDEwICsxMzg2LDEwIEBACiBzdGF0aWMgdm9pZCBkZXN0cm95X3Byb2NfY3BpYV9jYW0oc3RydWN0IGNhbV9kYXRhICpjYW0pCiB7CiAJY2hhciBuYW1lWzddOwotCQorCiAJaWYgKCFjYW0gfHwgIWNhbS0+cHJvY19lbnRyeSkKIAkJcmV0dXJuOwotCQorCiAJc3ByaW50ZihuYW1lLCAidmlkZW8lZCIsIGNhbS0+dmRldi5taW5vcik7CiAJcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgY3BpYV9wcm9jX3Jvb3QpOwogCWNhbS0+cHJvY19lbnRyeSA9IE5VTEw7CkBAIC0xNTk2LDEzICsxNTk2LDEzIEBACiAJCWNhbS0+dmMud2lkdGggPSBjYW0tPnZ3LndpZHRoOwogCWlmKGNhbS0+dmMuaGVpZ2h0ID09IDApCiAJCWNhbS0+dmMuaGVpZ2h0ID0gY2FtLT52dy5oZWlnaHQ7Ci0JCisKIAljYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQgKz0gY2FtLT52Yy54ID4+IDM7CiAJY2FtLT5wYXJhbXMucm9pLmNvbEVuZCA9IGNhbS0+cGFyYW1zLnJvaS5jb2xTdGFydCArCi0JICAgICAgICAgICAgICAgICAgICAgICAgIChjYW0tPnZjLndpZHRoID4+IDMpOworCQkJCSAoY2FtLT52Yy53aWR0aCA+PiAzKTsKIAljYW0tPnBhcmFtcy5yb2kucm93U3RhcnQgKz0gY2FtLT52Yy55ID4+IDI7CiAJY2FtLT5wYXJhbXMucm9pLnJvd0VuZCA9IGNhbS0+cGFyYW1zLnJvaS5yb3dTdGFydCArCi0JICAgICAgICAgICAgICAgICAgICAgICAgIChjYW0tPnZjLmhlaWdodCA+PiAyKTsKKwkJCQkgKGNhbS0+dmMuaGVpZ2h0ID4+IDIpOwogCiAJcmV0dXJuOwogfQpAQCAtMTYyNCw3ICsxNjI0LDcgQEAKIHN0YXRpYyBpbnQgZnJlZV9mcmFtZV9idWYoc3RydWN0IGNhbV9kYXRhICpjYW0pCiB7CiAJaW50IGk7Ci0JCisKIAlydmZyZWUoY2FtLT5mcmFtZV9idWYsIEZSQU1FX05VTSpDUElBX01BWF9GUkFNRV9TSVpFKTsKIAljYW0tPmZyYW1lX2J1ZiA9IE5VTEw7CiAJZm9yIChpPTA7IGkgPCBGUkFNRV9OVU07IGkrKykKQEAgLTE2NjQsMTAgKzE2NjQsMTAgQEAKIAljYXNlIENQSUFfQ09NTUFORF9HZXRDb2xvdXJQYXJhbXM6CiAJY2FzZSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZToKIAljYXNlIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZToKLQkJZG93bigmY2FtLT5wYXJhbV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKIAkJZGF0YXNpemU9ODsKIAkJYnJlYWs7Ci0JY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6IAorCWNhc2UgQ1BJQV9DT01NQU5EX1JlYWRNQ1BvcnRzOgogCWNhc2UgQ1BJQV9DT01NQU5EX1JlYWRWQ1JlZ3M6CiAJCWRhdGFzaXplID0gNDsKIAkJYnJlYWs7CkBAIC0xNjkxLDcgKzE2OTEsNyBAQAogCQlpZiAoY29tbWFuZCA9PSBDUElBX0NPTU1BTkRfR2V0Q29sb3VyUGFyYW1zIHx8CiAJCSAgICBjb21tYW5kID09IENQSUFfQ09NTUFORF9HZXRDb2xvdXJCYWxhbmNlIHx8CiAJCSAgICBjb21tYW5kID09IENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZSkKLQkJCXVwKCZjYW0tPnBhcmFtX2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCX0gZWxzZSB7CiAJCXN3aXRjaChjb21tYW5kKSB7CiAJCWNhc2UgQ1BJQV9DT01NQU5EX0dldENQSUFWZXJzaW9uOgpAQCAtMTcyNiwxMyArMTcyNiwxMyBAQAogCQkJY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MgPSBkYXRhWzBdOwogCQkJY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0ID0gZGF0YVsxXTsKIAkJCWNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uID0gZGF0YVsyXTsKLQkJCXVwKCZjYW0tPnBhcmFtX2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCQkJYnJlYWs7CiAJCWNhc2UgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2U6CiAJCQljYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLnJlZEdhaW4gPSBkYXRhWzBdOwogCQkJY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ncmVlbkdhaW4gPSBkYXRhWzFdOwogCQkJY2FtLT5wYXJhbXMuY29sb3VyQmFsYW5jZS5ibHVlR2FpbiA9IGRhdGFbMl07Ci0JCQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKIAkJCWJyZWFrOwogCQljYXNlIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZToKIAkJCWNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW4gPSBkYXRhWzBdOwpAQCAtMTc0MywxMyArMTc0MywxMyBAQAogCQkJY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ3JlZW4xQ29tcCA9IGRhdGFbNV07CiAJCQljYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wID0gZGF0YVs2XTsKIAkJCWNhbS0+cGFyYW1zLmV4cG9zdXJlLmJsdWVDb21wID0gZGF0YVs3XTsKLQkJCXVwKCZjYW0tPnBhcmFtX2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6IAotCQkJaWYgKCFjYW0tPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKSAKKwkJY2FzZSBDUElBX0NPTU1BTkRfUmVhZE1DUG9ydHM6CisJCQlpZiAoIWNhbS0+cGFyYW1zLnF4My5xeDNfZGV0ZWN0ZWQpCiAJCQkJYnJlYWs7Ci0JCQkvKiB0ZXN0IGJ1dHRvbiBwcmVzcyAqLyAKKwkJCS8qIHRlc3QgYnV0dG9uIHByZXNzICovCiAJCQljYW0tPnBhcmFtcy5xeDMuYnV0dG9uID0gKChkYXRhWzFdICYgMHgwMikgPT0gMCk7CiAJCQlpZiAoY2FtLT5wYXJhbXMucXgzLmJ1dHRvbikgewogCQkJCS8qIGJ1dHRvbiBwcmVzc2VkIC0gdW5sb2NrIHRoZSBsYXRjaCAqLwpAQCAtMTc3MCw5ICsxNzcwLDkgQEAKIAogLyogc2VuZCBhIGNvbW1hbmQgIHRvIHRoZSBjYW1lcmEgd2l0aCBhbiBhZGRpdGlvbmFsIGRhdGEgdHJhbnNhY3Rpb24gKi8KIHN0YXRpYyBpbnQgZG9fY29tbWFuZF9leHRlbmRlZChzdHJ1Y3QgY2FtX2RhdGEgKmNhbSwgdTE2IGNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggYSwgdTggYiwgdTggYywgdTggZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBlLCB1OCBmLCB1OCBnLCB1OCBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGksIHU4IGosIHU4IGssIHU4IGwpCisJCQkgICAgICAgdTggYSwgdTggYiwgdTggYywgdTggZCwKKwkJCSAgICAgICB1OCBlLCB1OCBmLCB1OCBnLCB1OCBoLAorCQkJICAgICAgIHU4IGksIHU4IGosIHU4IGssIHU4IGwpCiB7CiAJaW50IHJldHZhbDsKIAl1OCBjbWRbOF0sIGRhdGFbOF07CkBAIC0xODA5LDEwICsxODA5LDEwIEBACiAjZGVmaW5lIExJTUlUKHgpICgoKCh4KT4weGZmZmZmZik/MHhmZjAwMDA6KCgoeCk8PTB4ZmZmZik/MDooeCkmMHhmZjAwMDApKT4+MTYpCiAKIHN0YXRpYyBpbnQgY29udmVydDQyMCh1bnNpZ25lZCBjaGFyICp5dXYsIHVuc2lnbmVkIGNoYXIgKnJnYiwgaW50IG91dF9mbXQsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVzaXplLCBpbnQgbW1hcF9rbHVkZ2UpCisJCSAgICAgIGludCBsaW5lc2l6ZSwgaW50IG1tYXBfa2x1ZGdlKQogewogCWludCB5LCB1LCB2LCByLCBnLCBiLCB5MTsKLQkKKwogCS8qIE9kZCBsaW5lcyB1c2UgdGhlIHNhbWUgdSBhbmQgdiBhcyB0aGUgcHJldmlvdXMgbGluZS4KIAkgKiBCZWNhdXNlIG9mIGNvbXByZXNzaW9uLCBpdCBpcyBuZWNlc3NhcnkgdG8gZ2V0IHRoaXMKIAkgKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkZWNvZGVkIGltYWdlLiAqLwpAQCAtMTkyNSw3ICsxOTI1LDcgQEAKIAogCiBzdGF0aWMgaW50IHl1dmNvbnZlcnQodW5zaWduZWQgY2hhciAqeXV2LCB1bnNpZ25lZCBjaGFyICpyZ2IsIGludCBvdXRfZm10LAotICAgICAgICAgICAgICAgICAgICAgIGludCBpbl91eXZ5LCBpbnQgbW1hcF9rbHVkZ2UpCisJCSAgICAgIGludCBpbl91eXZ5LCBpbnQgbW1hcF9rbHVkZ2UpCiB7CiAJaW50IHksIHUsIHYsIHIsIGcsIGIsIHkxOwogCkBAIC0yMDU5LDcgKzIwNTksNyBAQAogCWludCByb3dzLCBjb2xzLCBsaW5lc2l6ZSwgc3Vic2FtcGxlXzQyMjsKIAogCS8qIG1ha2Ugc3VyZSBwYXJhbXMgZG9uJ3QgY2hhbmdlIHdoaWxlIHdlIGFyZSBkZWNvZGluZyAqLwotCWRvd24oJmNhbS0+cGFyYW1fbG9jayk7CisJbXV0ZXhfbG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKIAogCW9idWYgPSBjYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5kYXRhOwogCWVuZF9vYnVmID0gb2J1ZitDUElBX01BWF9GUkFNRV9TSVpFOwpAQCAtMjA2OSw1NSArMjA2OSw1NSBAQAogCiAJaWYgKChpYnVmWzBdICE9IE1BR0lDXzApIHx8IChpYnVmWzFdICE9IE1BR0lDXzEpKSB7CiAJCUxPRygiaGVhZGVyIG5vdCBmb3VuZFxuIik7Ci0JCXVwKCZjYW0tPnBhcmFtX2xvY2spOworCQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoKGlidWZbMTZdICE9IFZJREVPU0laRV9RQ0lGKSAmJiAoaWJ1ZlsxNl0gIT0gVklERU9TSVpFX0NJRikpIHsKIAkJTE9HKCJ3cm9uZyB2aWRlbyBzaXplXG4iKTsKLQkJdXAoJmNhbS0+cGFyYW1fbG9jayk7CisJCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKKwogCWlmIChpYnVmWzE3XSAhPSBTVUJTQU1QTEVfNDIwICYmIGlidWZbMTddICE9IFNVQlNBTVBMRV80MjIpIHsKIAkJTE9HKCJpbGxlZ2FsIHN1YnR5cGUgJWRcbiIsaWJ1ZlsxN10pOwotCQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCXN1YnNhbXBsZV80MjIgPSBpYnVmWzE3XSA9PSBTVUJTQU1QTEVfNDIyOwotCQorCiAJaWYgKGlidWZbMThdICE9IFlVVk9SREVSX1lVWVYgJiYgaWJ1ZlsxOF0gIT0gWVVWT1JERVJfVVlWWSkgewogCQlMT0coImlsbGVnYWwgeXV2b3JkZXIgJWRcbiIsaWJ1ZlsxOF0pOwotCQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCWluX3V5dnkgPSBpYnVmWzE4XSA9PSBZVVZPUkRFUl9VWVZZOwotCQorCiAJaWYgKChpYnVmWzI0XSAhPSBjYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQpIHx8CiAJICAgIChpYnVmWzI1XSAhPSBjYW0tPnBhcmFtcy5yb2kuY29sRW5kKSB8fAogCSAgICAoaWJ1ZlsyNl0gIT0gY2FtLT5wYXJhbXMucm9pLnJvd1N0YXJ0KSB8fAogCSAgICAoaWJ1ZlsyN10gIT0gY2FtLT5wYXJhbXMucm9pLnJvd0VuZCkpIHsKIAkJTE9HKCJST0kgbWlzbWF0Y2hcbiIpOwotCQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCWNvbHMgPSA4KihpYnVmWzI1XSAtIGlidWZbMjRdKTsKIAlyb3dzID0gNCooaWJ1ZlsyN10gLSBpYnVmWzI2XSk7CiAKLQkKKwogCWlmICgoaWJ1ZlsyOF0gIT0gTk9UX0NPTVBSRVNTRUQpICYmIChpYnVmWzI4XSAhPSBDT01QUkVTU0VEKSkgewogCQlMT0coImlsbGVnYWwgY29tcHJlc3Npb24gJWRcbiIsaWJ1ZlsyOF0pOwotCQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQogCWNvbXByZXNzZWQgPSAoaWJ1ZlsyOF0gPT0gQ09NUFJFU1NFRCk7Ci0JCisKIAlpZiAoaWJ1ZlsyOV0gIT0gTk9fREVDSU1BVElPTiAmJiBpYnVmWzI5XSAhPSBERUNJTUFUSU9OX0VOQUIpIHsKIAkJTE9HKCJpbGxlZ2FsIGRlY2ltYXRpb24gJWRcbiIsaWJ1ZlsyOV0pOwotCQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCQlyZXR1cm4gLTE7CiAJfQotCWRlY2ltYXRpb24gPSAoaWJ1ZlsyOV0gPT0gREVDSU1BVElPTl9FTkFCKTsJCisJZGVjaW1hdGlvbiA9IChpYnVmWzI5XSA9PSBERUNJTUFUSU9OX0VOQUIpOwogCiAJY2FtLT5wYXJhbXMueXV2VGhyZXNob2xkLnlUaHJlc2hvbGQgPSBpYnVmWzMwXTsKIAljYW0tPnBhcmFtcy55dXZUaHJlc2hvbGQudXZUaHJlc2hvbGQgPSBpYnVmWzMxXTsKQEAgLTIxMzAsOCArMjEzMCw4IEBACiAJY2FtLT5wYXJhbXMuc3RhdHVzLnZwU3RhdHVzID0gaWJ1ZlszOF07CiAJY2FtLT5wYXJhbXMuc3RhdHVzLmVycm9yQ29kZSA9IGlidWZbMzldOwogCWNhbS0+ZnBzID0gaWJ1Zls0MV07Ci0JdXAoJmNhbS0+cGFyYW1fbG9jayk7Ci0JCisJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOworCiAJbGluZXNpemUgPSBza2lwY291bnQoY29scywgb3V0X2ZtdCk7CiAJaWJ1ZiArPSBGUkFNRV9IRUFERVJfU0laRTsKIAlzaXplIC09IEZSQU1FX0hFQURFUl9TSVpFOwpAQCAtMjE1MCwxNCArMjE1MCwxNCBAQAogCQkJaWYgKCFjb21wcmVzc2VkIHx8IChjb21wcmVzc2VkICYmICEoKmlidWYgJiAxKSkpIHsKIAkJCQlpZihzdWJzYW1wbGVfNDIyIHx8IGV2ZW5fbGluZSkgewogCQkJCW9idWYgKz0geXV2Y29udmVydChpYnVmLCBvYnVmLCBvdXRfZm10LAotCQkJCSAgICAgICAgICAgICAgICAgICBpbl91eXZ5LCBjYW0tPm1tYXBfa2x1ZGdlKTsKKwkJCQkJCSAgIGluX3V5dnksIGNhbS0+bW1hcF9rbHVkZ2UpOwogCQkJCWlidWYgKz0gNDsKIAkJCQlsbCAtPSA0OwogCQkJfSBlbHNlIHsKIAkJCQkJLyogU1VCU0FNUExFXzQyMCBvbiBhbiBvZGQgbGluZSAqLwogCQkJCQlvYnVmICs9IGNvbnZlcnQ0MjAoaWJ1Ziwgb2J1ZiwKLQkJCQkJICAgICAgICAgICAgICAgICAgIG91dF9mbXQsIGxpbmVzaXplLAotCQkJICAgICAgICAgICAgICAgIAkJICAgY2FtLT5tbWFwX2tsdWRnZSk7CisJCQkJCQkJICAgb3V0X2ZtdCwgbGluZXNpemUsCisJCQkJCQkJICAgY2FtLT5tbWFwX2tsdWRnZSk7CiAJCQkJCWlidWYgKz0gMjsKIAkJCQkJbGwgLT0gMjsKIAkJCQl9CkBAIC0yMTgzLDcgKzIxODMsNyBAQAogCiAJCQlpZiAoKHNpemUgPiAzKSAmJiAoaWJ1ZlswXSA9PSBFT0kpICYmIChpYnVmWzFdID09IEVPSSkgJiYKIAkJCSAgIChpYnVmWzJdID09IEVPSSkgJiYgKGlidWZbM10gPT0gRU9JKSkgewotCQkJIAlzaXplIC09IDQ7CisJCQkJc2l6ZSAtPSA0OwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0yMjA0LDcgKzIyMDQsNyBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQotCQorCiAJaWYoZGVjaW1hdGlvbikgewogCQkvKiBpbnRlcnBvbGF0ZSBvZGQgcm93cyAqLwogCQlpbnQgaSwgajsKQEAgLTIyMzMsNyArMjIzMyw3IEBACiBzdGF0aWMgaW5saW5lIGludCBpbml0X3N0cmVhbV9jYXAoc3RydWN0IGNhbV9kYXRhICpjYW0pCiB7CiAJcmV0dXJuIGRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfSW5pdFN0cmVhbUNhcCwKLQkgICAgICAgICAgICAgICAgICAwLCBjYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUsIDAsIDApOworCQkJICAwLCBjYW0tPnBhcmFtcy5zdHJlYW1TdGFydExpbmUsIDAsIDApOwogfQogCiAKQEAgLTIyNTQsNyArMjI1NCw3IEBACiAJaW50IE1heEFsbG93YWJsZU92ZXJFeHBvc3VyZSwgT3ZlckV4cG9zdXJlOwogCiAJTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlID0gRkxJQ0tFUl9NQVhfRVhQT1NVUkUgLSBicmlnaHRuZXNzIC0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBGTElDS0VSX0JSSUdIVE5FU1NfQ09OU1RBTlQ7CisJCQkJICAgRkxJQ0tFUl9CUklHSFRORVNTX0NPTlNUQU5UOwogCiAJaWYgKE1heEFsbG93YWJsZU92ZXJFeHBvc3VyZSA8IEZMSUNLRVJfQUxMT1dBQkxFX09WRVJfRVhQT1NVUkUpIHsKIAkJT3ZlckV4cG9zdXJlID0gTWF4QWxsb3dhYmxlT3ZlckV4cG9zdXJlOwpAQCAtMjI3MSw3MSArMjI3MSw3MSBAQAogLyogdXBkYXRlIHZhcmlvdXMgY2FtZXJhIG1vZGVzIGFuZCBzZXR0aW5ncyAqLwogc3RhdGljIHZvaWQgZGlzcGF0Y2hfY29tbWFuZHMoc3RydWN0IGNhbV9kYXRhICpjYW0pCiB7Ci0JZG93bigmY2FtLT5wYXJhbV9sb2NrKTsKKwltdXRleF9sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCWlmIChjYW0tPmNtZF9xdWV1ZT09Q09NTUFORF9OT05FKSB7Ci0JCXVwKCZjYW0tPnBhcmFtX2xvY2spOworCQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7CiAJCXJldHVybjsKIAl9CiAJREVCX0JZVEUoY2FtLT5jbWRfcXVldWUpOwogCURFQl9CWVRFKGNhbS0+Y21kX3F1ZXVlPj44KTsKIAlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVEZPUk1BVCkgewogCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldEZvcm1hdCwKLQkgICAgICAgIAkgICBjYW0tPnBhcmFtcy5mb3JtYXQudmlkZW9TaXplLAotCSAgICAgICAgCSAgIGNhbS0+cGFyYW1zLmZvcm1hdC5zdWJTYW1wbGUsCi0JICAgICAgICAJICAgY2FtLT5wYXJhbXMuZm9ybWF0Lnl1dk9yZGVyLCAwKTsKKwkJCSAgIGNhbS0+cGFyYW1zLmZvcm1hdC52aWRlb1NpemUsCisJCQkgICBjYW0tPnBhcmFtcy5mb3JtYXQuc3ViU2FtcGxlLAorCQkJICAgY2FtLT5wYXJhbXMuZm9ybWF0Lnl1dk9yZGVyLCAwKTsKIAkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRST0ksCi0JICAgICAgICAJICAgY2FtLT5wYXJhbXMucm9pLmNvbFN0YXJ0LCBjYW0tPnBhcmFtcy5yb2kuY29sRW5kLAotCSAgICAgICAgCSAgIGNhbS0+cGFyYW1zLnJvaS5yb3dTdGFydCwgY2FtLT5wYXJhbXMucm9pLnJvd0VuZCk7CisJCQkgICBjYW0tPnBhcmFtcy5yb2kuY29sU3RhcnQsIGNhbS0+cGFyYW1zLnJvaS5jb2xFbmQsCisJCQkgICBjYW0tPnBhcmFtcy5yb2kucm93U3RhcnQsIGNhbS0+cGFyYW1zLnJvaS5yb3dFbmQpOwogCQljYW0tPmZpcnN0X2ZyYW1lID0gMTsKIAl9CiAKIAlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVENPTE9VUlBBUkFNUykKIAkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRDb2xvdXJQYXJhbXMsCi0JCSAgICAgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmJyaWdodG5lc3MsCi0JCSAgICAgICAgICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LAotCQkgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5zYXR1cmF0aW9uLCAwKTsKKwkJCSAgIGNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzLAorCQkJICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLmNvbnRyYXN0LAorCQkJICAgY2FtLT5wYXJhbXMuY29sb3VyUGFyYW1zLnNhdHVyYXRpb24sIDApOwogCiAJaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRBUENPUikKIAkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRBcGNvciwKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMSwKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMiwKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluNCwKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluOCk7CisJCQkgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluMSwKKwkJCSAgIGNhbS0+cGFyYW1zLmFwY29yLmdhaW4yLAorCQkJICAgY2FtLT5wYXJhbXMuYXBjb3IuZ2FpbjQsCisJCQkgICBjYW0tPnBhcmFtcy5hcGNvci5nYWluOCk7CiAKIAlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVFZMT0ZGU0VUKQogCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldFZMT2Zmc2V0LAotCQkgICAgICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4xLAotCQkgICAgICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4yLAotCQkgICAgICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW40LAotCQkgICAgICAgICAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW44KTsKKwkJCSAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW4xLAorCQkJICAgY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjIsCisJCQkgICBjYW0tPnBhcmFtcy52bE9mZnNldC5nYWluNCwKKwkJCSAgIGNhbS0+cGFyYW1zLnZsT2Zmc2V0LmdhaW44KTsKIAogCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VURVhQT1NVUkUpIHsKIAkJZG9fY29tbWFuZF9leHRlbmRlZChjYW0sIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZSwKLQkJICAgICAgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSwKLQkJICAgICAgICAgICAgICAgICAgICAxLAotCQkgICAgICAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvbXBNb2RlLAotCQkgICAgICAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNlbnRyZVdlaWdodCwKLQkJICAgICAgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluLAotCQkgICAgICAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmZpbmVFeHAsCi0JCSAgICAgICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8sCi0JCSAgICAgICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGksCi0JCSAgICAgICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUucmVkQ29tcCwKLQkJICAgICAgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wLAotCQkgICAgICAgICAgICAgICAgICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdyZWVuMkNvbXAsCi0JCSAgICAgICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuYmx1ZUNvbXApOworCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5nYWluTW9kZSwKKwkJCQkgICAgMSwKKwkJCQkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29tcE1vZGUsCisJCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNlbnRyZVdlaWdodCwKKwkJCQkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiwKKwkJCQkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCwKKwkJCQkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8sCisJCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpLAorCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5yZWRDb21wLAorCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjFDb21wLAorCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5ncmVlbjJDb21wLAorCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5ibHVlQ29tcCk7CiAJCWlmKGNhbS0+cGFyYW1zLmV4cG9zdXJlLmV4cE1vZGUgIT0gMSkgewogCQkJZG9fY29tbWFuZF9leHRlbmRlZChjYW0sIENQSUFfQ09NTUFORF9TZXRFeHBvc3VyZSwKLQkJICAgICAgICAgICAgICAgIAkgICAgMCwKLQkJICAgICAgICAgICAgICAgIAkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZXhwTW9kZSwKLQkJICAgICAgICAgICAgICAgIAkgICAgMCwgMCwKLQkJICAgICAgICAgICAgICAgIAkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZ2FpbiwKLQkJICAgICAgICAgICAgICAgIAkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuZmluZUV4cCwKLQkJICAgICAgICAgICAgICAgIAkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8sCi0JCSAgICAgICAgICAgICAgICAJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpLAotCQkgICAgICAgICAgICAgICAgCSAgICAwLCAwLCAwLCAwKTsKKwkJCQkJICAgIDAsCisJCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlLAorCQkJCQkgICAgMCwgMCwKKwkJCQkJICAgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmdhaW4sCisJCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5maW5lRXhwLAorCQkJCQkgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG8sCisJCQkJCSAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSwKKwkJCQkJICAgIDAsIDAsIDAsIDApOwogCQl9CiAJfQotCQorCiAJaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRDT0xPVVJCQUxBTkNFKSB7CiAJCWlmIChjYW0tPnBhcmFtcy5jb2xvdXJCYWxhbmNlLmJhbGFuY2VNb2RlID09IDEpIHsKIAkJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0Q29sb3VyQmFsYW5jZSwKQEAgLTIzNTgsNDcgKzIzNTgsNDcgQEAKIAogCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VUQ09NUFJFU1NJT05UQVJHRVQpCiAJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb25UYXJnZXQsCi0JCSAgICAgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQuZnJUYXJnZXRpbmcsCi0JCSAgICAgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQudGFyZ2V0RlIsCi0JCSAgICAgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQudGFyZ2V0USwgMCk7CisJCQkgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZywKKwkJCSAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uVGFyZ2V0LnRhcmdldEZSLAorCQkJICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25UYXJnZXQudGFyZ2V0USwgMCk7CiAKIAlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVFlVVlRIUkVTSCkKIAkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRZVVZUaHJlc2gsCi0JCSAgICAgICAgICAgY2FtLT5wYXJhbXMueXV2VGhyZXNob2xkLnlUaHJlc2hvbGQsCi0JCSAgICAgICAgICAgY2FtLT5wYXJhbXMueXV2VGhyZXNob2xkLnV2VGhyZXNob2xkLCAwLCAwKTsKKwkJCSAgIGNhbS0+cGFyYW1zLnl1dlRocmVzaG9sZC55VGhyZXNob2xkLAorCQkJICAgY2FtLT5wYXJhbXMueXV2VGhyZXNob2xkLnV2VGhyZXNob2xkLCAwLCAwKTsKIAogCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VUQ09NUFJFU1NJT05QQVJBTVMpCiAJCWRvX2NvbW1hbmRfZXh0ZW5kZWQoY2FtLCBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb25QYXJhbXMsCi0JCSAgICAgICAgICAgIDAsIDAsIDAsIDAsCi0JCSAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmh5c3RlcmVzaXMsCi0JCSAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnRocmVzaE1heCwKLQkJICAgICAgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwLAotCQkgICAgICAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5sYXJnZVN0ZXAsCi0JCSAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25IeXN0ZXJlc2lzLAotCQkgICAgICAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoLAotCQkgICAgICAgICAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5xRGlmZlN0ZXBUaHJlc2gsCi0JCSAgICAgICAgICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmRlY2ltYXRpb25UaHJlc2hNb2QpOworCQkJICAgIDAsIDAsIDAsIDAsCisJCQkgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuaHlzdGVyZXNpcywKKwkJCSAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy50aHJlc2hNYXgsCisJCQkgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuc21hbGxTdGVwLAorCQkJICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLmxhcmdlU3RlcCwKKwkJCSAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uSHlzdGVyZXNpcywKKwkJCSAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5mckRpZmZTdGVwVGhyZXNoLAorCQkJICAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCwKKwkJCSAgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvblBhcmFtcy5kZWNpbWF0aW9uVGhyZXNoTW9kKTsKIAogCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VUQ09NUFJFU1NJT04pCiAJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfU2V0Q29tcHJlc3Npb24sCi0JCSAgICAgICAgICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb24ubW9kZSwKKwkJCSAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLm1vZGUsCiAJCQkgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvbi5kZWNpbWF0aW9uLCAwLCAwKTsKIAogCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VUU0VOU09SRlBTKQogCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldFNlbnNvckZQUywKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvciwKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUsIDAsIDApOworCQkJICAgY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IsCisJCQkgICBjYW0tPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGUsIDAsIDApOwogCiAJaWYgKGNhbS0+Y21kX3F1ZXVlICYgQ09NTUFORF9TRVRGTElDS0VSQ1RSTCkKIAkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRGbGlja2VyQ3RybCwKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSwKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wLAotCQkgICAgICAgICAgIGFicyhjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUpLAotCQkgICAgICAgICAgIDApOworCQkJICAgY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUsCisJCQkgICBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wLAorCQkJICAgYWJzKGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSksCisJCQkgICAwKTsKIAogCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfU0VURUNQVElNSU5HKQogCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldEVDUFRpbWluZywKLQkJICAgICAgICAgICBjYW0tPnBhcmFtcy5lY3BUaW1pbmcsIDAsIDAsIDApOworCQkJICAgY2FtLT5wYXJhbXMuZWNwVGltaW5nLCAwLCAwLCAwKTsKIAogCWlmIChjYW0tPmNtZF9xdWV1ZSAmIENPTU1BTkRfUEFVU0UpCiAJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfRW5kU3RyZWFtQ2FwLCAwLCAwLCAwLCAwKTsKQEAgLTI0MDksMjQgKzI0MDksMjQgQEAKIAlpZiAoY2FtLT5jbWRfcXVldWUgJiBDT01NQU5EX1NFVExJR0hUUyAmJiBjYW0tPnBhcmFtcy5xeDMucXgzX2RldGVjdGVkKQogCSAgewogCSAgICBpbnQgcDEgPSAoY2FtLT5wYXJhbXMucXgzLmJvdHRvbWxpZ2h0ID09IDApIDw8IDE7Ci0gICAgICAgICAgICBpbnQgcDIgPSAoY2FtLT5wYXJhbXMucXgzLnRvcGxpZ2h0ID09IDApIDw8IDM7Ci0gICAgICAgICAgICBkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1dyaXRlVkNSZWcsICAweDkwLCAweDhGLCAweDUwLCAwKTsKLSAgICAgICAgICAgIGRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsIDIsIDAsIChwMXxwMnwweEUwKSwgMCk7CisJICAgIGludCBwMiA9IChjYW0tPnBhcmFtcy5xeDMudG9wbGlnaHQgPT0gMCkgPDwgMzsKKwkgICAgZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9Xcml0ZVZDUmVnLCAgMHg5MCwgMHg4RiwgMHg1MCwgMCk7CisJICAgIGRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfV3JpdGVNQ1BvcnQsIDIsIDAsIChwMXxwMnwweEUwKSwgMCk7CiAJICB9CiAKIAljYW0tPmNtZF9xdWV1ZSA9IENPTU1BTkRfTk9ORTsKLQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7CiAJcmV0dXJuOwogfQogCiAKIAogc3RhdGljIHZvaWQgc2V0X2ZsaWNrZXIoc3RydWN0IGNhbV9wYXJhbXMgKnBhcmFtcywgdm9sYXRpbGUgdTMyICpjb21tYW5kX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9uKQorCQkJaW50IG9uKQogewogCS8qIEV2ZXJ5dGhpbmcgaW4gaGVyZSBpcyBmcm9tIHRoZSBXaW5kb3dzIGRyaXZlciAqLwogI2RlZmluZSBGSVJNV0FSRV9WRVJTSU9OKHgseSkgKHBhcmFtcy0+dmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gKHgpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9PSAoeSkpCisJCQkgICAgICAgcGFyYW1zLT52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gKHkpKQogLyogZGVmaW5lIGZvciBjb21wZ2FpbiBjYWxjdWxhdGlvbiAqLwogI2lmIDAKICNkZWZpbmUgQ09NUEdBSU4oYmFzZSwgY3VyZXhwLCBuZXdleHApIFwKQEAgLTI0NDEsNyArMjQ0MSw3IEBACiAgICAgICh1MTYpKCgodTMyKShjdXJleHAgKiAodTgpKGN1cmNvbXAgKyAxMjgpKSAvICh1OCkoYmFzZWNvbXAgLSAxMjgpKSkKICNlbmRpZgogCi0gCisKIAlpbnQgY3VycmVudGV4cCA9IHBhcmFtcy0+ZXhwb3N1cmUuY29hcnNlRXhwTG8gKwogCQkJIHBhcmFtcy0+ZXhwb3N1cmUuY29hcnNlRXhwSGkqMjU2OwogCWludCBzdGFydGV4cDsKQEAgLTI0ODIsNyArMjQ4Miw3IEBACiAJCX0KIAkJaWYoRklSTVdBUkVfVkVSU0lPTigxLDIpKQogCQkJcGFyYW1zLT5leHBvc3VyZS5jb21wTW9kZSA9IDA7Ci0JCWVsc2UgCisJCWVsc2UKIAkJCXBhcmFtcy0+ZXhwb3N1cmUuY29tcE1vZGUgPSAxOwogCiAJCXBhcmFtcy0+YXBjb3IuZ2FpbjEgPSAweDE4OwpAQCAtMjUzMywxNCArMjUzMywxNCBAQAogfQogCiAjZGVmaW5lIEZJUk1XQVJFX1ZFUlNJT04oeCx5KSAoY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPT0gKHgpICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlUmV2aXNpb24gPT0gKHkpKQorCQkJICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVSZXZpc2lvbiA9PSAoeSkpCiAvKiBtb25pdG9yIHRoZSBleHBvc3VyZSBhbmQgYWRqdXN0IHRoZSBzZW5zb3IgZnJhbWUgcmF0ZSBpZiBuZWVkZWQgKi8KIHN0YXRpYyB2b2lkIG1vbml0b3JfZXhwb3N1cmUoc3RydWN0IGNhbV9kYXRhICpjYW0pCiB7CiAJdTggZXhwX2FjYywgYmNvbXAsIGdhaW4sIGNvYXJzZUwsIGNtZFs4XSwgZGF0YVs4XTsKIAlpbnQgcmV0dmFsLCBsaWdodF9leHAsIGRhcmtfZXhwLCB2ZXJ5X2RhcmtfZXhwOwogCWludCBvbGRfZXhwb3N1cmUsIG5ld19leHBvc3VyZSwgZnJhbWVyYXRlOwotCQorCiAJLyogZ2V0IG5lY2Vzc2FyeSBzdGF0cyBhbmQgcmVnaXN0ZXIgc2V0dGluZ3MgZnJvbSBjYW1lcmEgKi8KIAkvKiBkb19jb21tYW5kIGNhbid0IGhhbmRsZSB0aGlzLCBzbyBkbyBpdCBvdXJzZWx2ZXMgKi8KIAljbWRbMF0gPSBDUElBX0NPTU1BTkRfUmVhZFZQUmVncz4+ODsKQEAgLTI1NjIsMTkgKzI1NjIsMTkgQEAKIAlnYWluID0gZGF0YVsyXTsKIAljb2Fyc2VMID0gZGF0YVszXTsKIAotCWRvd24oJmNhbS0+cGFyYW1fbG9jayk7CisJbXV0ZXhfbG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKIAlsaWdodF9leHAgPSBjYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyArCi0JICAgICAgICAgICAgVEMgLSA1MCArIEVYUF9BQ0NfTElHSFQ7CisJCSAgICBUQyAtIDUwICsgRVhQX0FDQ19MSUdIVDsKIAlpZihsaWdodF9leHAgPiAyNTUpCiAJCWxpZ2h0X2V4cCA9IDI1NTsKIAlkYXJrX2V4cCA9IGNhbS0+cGFyYW1zLmNvbG91clBhcmFtcy5icmlnaHRuZXNzICsKLQkgICAgICAgICAgIFRDIC0gNTAgLSBFWFBfQUNDX0RBUks7CisJCSAgIFRDIC0gNTAgLSBFWFBfQUNDX0RBUks7CiAJaWYoZGFya19leHAgPCAwKQogCQlkYXJrX2V4cCA9IDA7CiAJdmVyeV9kYXJrX2V4cCA9IGRhcmtfZXhwLzI7Ci0JCisKIAlvbGRfZXhwb3N1cmUgPSBjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBIaSAqIDI1NiArCi0JICAgICAgICAgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwTG87CisJCSAgICAgICBjYW0tPnBhcmFtcy5leHBvc3VyZS5jb2Fyc2VFeHBMbzsKIAogCWlmKCFjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCkgewogCQkvKiBGbGlja2VyIGNvbnRyb2wgb24gKi8KQEAgLTI2NjcsMTEgKzI2NjcsMTEgQEAKIAkJCWNhbS0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOwogCQl9CiAJfQotCQorCiAJZnJhbWVyYXRlID0gY2FtLT5mcHM7CiAJaWYoZnJhbWVyYXRlID4gMzAgfHwgZnJhbWVyYXRlIDwgMSkKIAkJZnJhbWVyYXRlID0gMTsKLQkKKwogCWlmKCFjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCkgewogCQkvKiBGbGlja2VyIGNvbnRyb2wgb24gKi8KIAkJaWYoKGNhbS0+ZXhwb3N1cmVfc3RhdHVzID09IEVYUE9TVVJFX1ZFUllfREFSSyB8fApAQCAtMjY4MywxMCArMjY4MywxMCBAQAogCQkJKytjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcjsKIAkJCWNhbS0+Y21kX3F1ZXVlIHw9IENPTU1BTkRfU0VUU0VOU09SRlBTOwogCi0JCQljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0gCisJCQljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KIAkJCQlmbGlja2VyX2p1bXBzW2NhbS0+bWFpbnNGcmVxXQotCQkJCSAgICAgICAgICAgICBbY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQotCQkJCSAgICAgICAgICAgICBbY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOworCQkJCQkgICAgIFtjYW0tPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkJCSAgICAgW2NhbS0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKIAkJCWNhbS0+Y21kX3F1ZXVlIHw9IENPTU1BTkRfU0VURkxJQ0tFUkNUUkw7CiAKIAkJCW5ld19leHBvc3VyZSA9IGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAtMTsKQEAgLTI3MDQsMTUgKzI3MDQsMTUgQEAKIAkJICAgY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPiAwKSB7CiAKIAkJCS8qIGxpZ2h0IGZvciB0b28gbG9uZyAqLwotCQkgICAJaW50IG1heF9leHAgPSBGSVJNV0FSRV9WRVJTSU9OKDEsMikgPyBNQVhfRVhQXzEwMiA6IE1BWF9FWFAgOyAKKwkJCWludCBtYXhfZXhwID0gRklSTVdBUkVfVkVSU0lPTigxLDIpID8gTUFYX0VYUF8xMDIgOiBNQVhfRVhQIDsKIAogCQkJLS1jYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcjsKIAkJCWNhbS0+Y21kX3F1ZXVlIHw9IENPTU1BTkRfU0VUU0VOU09SRlBTOwogCi0JCQljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0gCisJCQljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wID0KIAkJCQlmbGlja2VyX2p1bXBzW2NhbS0+bWFpbnNGcmVxXQotCQkJCSAgICAgICAgICAgICBbY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmJhc2VyYXRlXQotCQkJCSAgICAgICAgICAgICBbY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3JdOworCQkJCQkgICAgIFtjYW0tPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkJCSAgICAgW2NhbS0+cGFyYW1zLnNlbnNvckZwcy5kaXZpc29yXTsKIAkJCWNhbS0+Y21kX3F1ZXVlIHw9IENPTU1BTkRfU0VURkxJQ0tFUkNUUkw7CiAKIAkJCW5ld19leHBvc3VyZSA9IGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAtMTsKQEAgLTI3NjIsNyArMjc2Miw3IEBACiAJCQlMT0coIkF1dG9tYXRpY2FsbHkgaW5jcmVhc2luZyBzZW5zb3JfZnBzXG4iKTsKIAkJfQogCX0KLQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjc3MiwzNiArMjc3MiwzNiBAQAogCiAgICBJdCBhbHNvIGFkanVzdCB0aGUgY29sb3VyIGJhbGFuY2Ugd2hlbiBhbiBleHBvc3VyZSBzdGVwIGlzIGRldGVjdGVkIC0gYXMKICAgIGxvbmcgYXMgZmxpY2tlciBpcyBydW5uaW5nCi0qLyAgIAorKi8KIHN0YXRpYyB2b2lkIHJlc3RhcnRfZmxpY2tlcihzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKIHsKIAlpbnQgY2FtX2V4cG9zdXJlLCBvbGRfZXhwOwogCWlmKCFGSVJNV0FSRV9WRVJTSU9OKDEsMikpCiAJCXJldHVybjsKLQlkb3duKCZjYW0tPnBhcmFtX2xvY2spOworCW11dGV4X2xvY2soJmNhbS0+cGFyYW1fbG9jayk7CiAJaWYoY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZmxpY2tlck1vZGUgPT0gMCB8fAogCSAgIGNhbS0+cmF3X2ltYWdlWzM5XSA9PSAwKSB7Ci0JCXVwKCZjYW0tPnBhcmFtX2xvY2spOworCQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7CiAJCXJldHVybjsKIAl9CiAJY2FtX2V4cG9zdXJlID0gY2FtLT5yYXdfaW1hZ2VbMzldKjI7CiAJb2xkX2V4cCA9IGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cExvICsKLQkgICAgICAgICAgY2FtLT5wYXJhbXMuZXhwb3N1cmUuY29hcnNlRXhwSGkqMjU2OwotIAkvKiAKLQkgIHNlZSBob3cgZmFyIGF3YXkgY2FtZXJhIGV4cG9zdXJlIGlzIGZyb20gYSB2YWxpZCAKLSAJICBmbGlja2VyIGV4cG9zdXJlIHZhbHVlCi0gCSovCi0gCWNhbV9leHBvc3VyZSAlPSBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wOworCQkgIGNhbS0+cGFyYW1zLmV4cG9zdXJlLmNvYXJzZUV4cEhpKjI1NjsKKwkvKgorCSAgc2VlIGhvdyBmYXIgYXdheSBjYW1lcmEgZXhwb3N1cmUgaXMgZnJvbSBhIHZhbGlkCisJICBmbGlja2VyIGV4cG9zdXJlIHZhbHVlCisJKi8KKwljYW1fZXhwb3N1cmUgJT0gY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcDsKIAlpZighY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKLSAgICAgCSAgIGNhbV9leHBvc3VyZSA8PSBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wIC0gMykgeworCSAgIGNhbV9leHBvc3VyZSA8PSBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wIC0gMykgewogCQkvKiBGbGlja2VyIGNvbnRyb2wgYXV0by1kaXNhYmxlZCAqLwogCQljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5kaXNhYmxlZCA9IDE7CiAJfQotCQorCiAJaWYoY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgJiYKIAkgICBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSAmJgogCSAgIG9sZF9leHAgPiBjYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5jb2Fyc2VKdW1wICsKLQkgICAgICAgICAgICAgUk9VTkRfVVBfRVhQX0ZPUl9GTElDS0VSKSB7CisJCSAgICAgUk9VTkRfVVBfRVhQX0ZPUl9GTElDS0VSKSB7CiAJCS8qIGV4cG9zdXJlIGlzIG5vdyBoaWdoIGVub3VnaCB0byBzd2l0Y2gKIAkJICAgZmxpY2tlciBjb250cm9sIGJhY2sgb24gKi8KIAkJc2V0X2ZsaWNrZXIoJmNhbS0+cGFyYW1zLCAmY2FtLT5jbWRfcXVldWUsIDEpOwpAQCAtMjgxMCw3ICsyODEwLDcgQEAKIAkJCWNhbS0+ZXhwb3N1cmVfc3RhdHVzID0gRVhQT1NVUkVfTk9STUFMOwogCiAJfQotCXVwKCZjYW0tPnBhcmFtX2xvY2spOworCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKIH0KICN1bmRlZiBGSVJNV0FSRV9WRVJTSU9OCiAKQEAgLTI4MTgsNyArMjgxOCw3IEBACiB7CiAJLyogRklYTUU6IERvZXMgdGhpcyBhY3R1YWxseSB3b3JrPyAqLwogCUxPRygiQ2xlYXJpbmcgc3RhbGxcbiIpOwotCQorCiAJY2FtLT5vcHMtPnN0cmVhbVJlYWQoY2FtLT5sb3dsZXZlbF9kYXRhLCBjYW0tPnJhd19pbWFnZSwgMCk7CiAJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9HZXRDYW1lcmFTdGF0dXMsMCwwLDAsMCk7CiAJcmV0dXJuIGNhbS0+cGFyYW1zLnN0YXR1cy5zdHJlYW1TdGF0ZSAhPSBTVFJFQU1fUEFVU0VEOwpAQCAtMjg3OCw3ICsyODc4LDcgQEAKIAkJCQkJcmV0dXJuIC1FSU5UUjsKIAogCQkJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR2V0Q2FtZXJhU3RhdHVzLAotCQkJCSAgICAgICAgICAgMCwgMCwgMCwgMCk7CisJCQkJCSAgIDAsIDAsIDAsIDApOwogCQkJfQogCQkJaWYoY2FtLT5wYXJhbXMuc3RhdHVzLnN0cmVhbVN0YXRlICE9IFNUUkVBTV9SRUFEWSkgewogCQkJCWNvbnRpbnVlOwpAQCAtMjkwMywxOCArMjkwMywxOCBAQAogCiAJCS8qIFN3aXRjaCBmbGlja2VyIGNvbnRyb2wgYmFjayBvbiBpZiBpdCBnb3QgdHVybmVkIG9mZiAqLwogCQlyZXN0YXJ0X2ZsaWNrZXIoY2FtKTsKLQkJCisKIAkJLyogSWYgQUVDIGlzIGVuYWJsZWQsIG1vbml0b3IgdGhlIGV4cG9zdXJlIGFuZAogCQkgICBhZGp1c3QgdGhlIHNlbnNvciBmcmFtZSByYXRlIGlmIG5lZWRlZCAqLwogCQlpZihjYW0tPnBhcmFtcy5leHBvc3VyZS5leHBNb2RlID09IDIpCiAJCQltb25pdG9yX2V4cG9zdXJlKGNhbSk7Ci0JCQorCiAJCS8qIGNhbWVyYSBpZGxlIG5vdyBzbyBkaXNwYXRjaCBxdWV1ZWQgY29tbWFuZHMgKi8KIAkJZGlzcGF0Y2hfY29tbWFuZHMoY2FtKTsKIAogCQkvKiBVcGRhdGUgb3VyIGtub3dsZWRnZSBvZiB0aGUgY2FtZXJhIHN0YXRlICovCi0gCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dldENvbG91ckJhbGFuY2UsIDAsIDAsIDAsIDApOwotIAkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9HZXRFeHBvc3VyZSwgMCwgMCwgMCwgMCk7CisJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR2V0Q29sb3VyQmFsYW5jZSwgMCwgMCwgMCwgMCk7CisJCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfR2V0RXhwb3N1cmUsIDAsIDAsIDAsIDApOwogCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1JlYWRNQ1BvcnRzLCAwLCAwLCAwLCAwKTsKIAogCQkvKiBkZWNvbXByZXNzIGFuZCBjb252ZXJ0IGltYWdlIHRvIGJ5IGNvcHlpbmcgaXQgZnJvbQpAQCAtMjkzMyw3ICsyOTMzLDcgQEAKIAkJCQkgICB1bmNvbXByZXNzZWQuICovCiAJCQkJY2FtLT5maXJzdF9mcmFtZSA9IDE7CiAJCQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRHcmFiTW9kZSwKLQkJICAgICAgICAJCSAgIENQSUFfR1JBQl9TSU5HTEUsIDAsIDAsIDApOworCQkJCQkgICBDUElBX0dSQUJfU0lOR0xFLCAwLCAwLCAwKTsKIAkJCQkvKiBGSVhNRTogVHJpYWwgJiBlcnJvciAtIG5lZWQgdXAgdG8gNzBtcyBmb3IKIAkJCQkgICB0aGUgZ3JhYiBtb2RlIGNoYW5nZSB0byBjb21wbGV0ZSA/ICovCiAJCQkJbXNsZWVwX2ludGVycnVwdGlibGUoNzApOwpAQCAtMjk1NywxMiArMjk1NywxMiBAQAogCQlpZiAoY2FtLT5maXJzdF9mcmFtZSkgewogCQkJY2FtLT5maXJzdF9mcmFtZSA9IDA7CiAJCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX1NldENvbXByZXNzaW9uLAotCQkgICAgICAgIAkgICBjYW0tPnBhcmFtcy5jb21wcmVzc2lvbi5tb2RlLAorCQkJCSAgIGNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLm1vZGUsCiAJCQkJICAgY2FtLT5wYXJhbXMuY29tcHJlc3Npb24uZGVjaW1hdGlvbiwgMCwgMCk7CiAKIAkJCS8qIFN3aXRjaCBmcm9tIHNpbmdsZS1ncmFiIHRvIGNvbnRpbnVvdXMgZ3JhYiAqLwogCQkJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRHcmFiTW9kZSwKLQkJICAgICAgICAJICAgQ1BJQV9HUkFCX0NPTlRJTlVPVVMsIDAsIDAsIDApOworCQkJCSAgIENQSUFfR1JBQl9DT05USU5VT1VTLCAwLCAwLCAwKTsKIAkJfQogCQlyZXR1cm4gMDsKIAl9CkBAIC0yOTc3LDEyICsyOTc3LDEyIEBACiAJCWlmICgoZXJyID0gYWxsb2NhdGVfZnJhbWVfYnVmKGNhbSkpKQogCQkJcmV0dXJuIGVycjsKIAl9Ci0JCisKIAljYW0tPmN1cmZyYW1lID0gdm0tPmZyYW1lOwogCWNhbS0+ZnJhbWVbY2FtLT5jdXJmcmFtZV0uc3RhdGUgPSBGUkFNRV9SRUFEWTsKIAlyZXR1cm4gZmV0Y2hfZnJhbWUoY2FtKTsKIH0KLSAgCisKIHN0YXRpYyBpbnQgZ290b19oaWdoX3Bvd2VyKHN0cnVjdCBjYW1fZGF0YSAqY2FtKQogewogCWlmIChkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX0dvdG9IaVBvd2VyLCAwLCAwLCAwLCAwKSkKQEAgLTMwMzksMjIgKzMwMzksMjIgQEAKIHN0YXRpYyBpbnQgc2V0X2NhbWVyYV9zdGF0ZShzdHJ1Y3QgY2FtX2RhdGEgKmNhbSkKIHsKIAljYW0tPmNtZF9xdWV1ZSA9IENPTU1BTkRfU0VUQ09NUFJFU1NJT04gfAotCSAgICAgICAgICAgICAgICAgQ09NTUFORF9TRVRDT01QUkVTU0lPTlRBUkdFVCB8Ci0JICAgICAgICAgICAgICAgICBDT01NQU5EX1NFVENPTE9VUlBBUkFNUyB8Ci0JICAgICAgICAgICAgICAgICBDT01NQU5EX1NFVEZPUk1BVCB8Ci0JICAgICAgICAgICAgICAgICBDT01NQU5EX1NFVFlVVlRIUkVTSCB8Ci0JICAgICAgICAgICAgICAgICBDT01NQU5EX1NFVEVDUFRJTUlORyB8Ci0JICAgICAgICAgICAgICAgICBDT01NQU5EX1NFVENPTVBSRVNTSU9OUEFSQU1TIHwKLQkgICAgICAgICAgICAgICAgIENPTU1BTkRfU0VURVhQT1NVUkUgfAotCSAgICAgICAgICAgICAgICAgQ09NTUFORF9TRVRDT0xPVVJCQUxBTkNFIHwKLQkgICAgICAgICAgICAgICAgIENPTU1BTkRfU0VUU0VOU09SRlBTIHwKLQkgICAgICAgICAgICAgICAgIENPTU1BTkRfU0VUQVBDT1IgfAotCSAgICAgICAgICAgICAgICAgQ09NTUFORF9TRVRGTElDS0VSQ1RSTCB8Ci0JICAgICAgICAgICAgICAgICBDT01NQU5EX1NFVFZMT0ZGU0VUOworCQkJIENPTU1BTkRfU0VUQ09NUFJFU1NJT05UQVJHRVQgfAorCQkJIENPTU1BTkRfU0VUQ09MT1VSUEFSQU1TIHwKKwkJCSBDT01NQU5EX1NFVEZPUk1BVCB8CisJCQkgQ09NTUFORF9TRVRZVVZUSFJFU0ggfAorCQkJIENPTU1BTkRfU0VURUNQVElNSU5HIHwKKwkJCSBDT01NQU5EX1NFVENPTVBSRVNTSU9OUEFSQU1TIHwKKwkJCSBDT01NQU5EX1NFVEVYUE9TVVJFIHwKKwkJCSBDT01NQU5EX1NFVENPTE9VUkJBTEFOQ0UgfAorCQkJIENPTU1BTkRfU0VUU0VOU09SRlBTIHwKKwkJCSBDT01NQU5EX1NFVEFQQ09SIHwKKwkJCSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMIHwKKwkJCSBDT01NQU5EX1NFVFZMT0ZGU0VUOwogCiAJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9TZXRHcmFiTW9kZSwgQ1BJQV9HUkFCX1NJTkdMRSwwLDAsMCk7CiAJZGlzcGF0Y2hfY29tbWFuZHMoY2FtKTsKLQkKKwogCS8qIFdhaXQgNiBmcmFtZXMgZm9yIHRoZSBzZW5zb3IgdG8gZ2V0IGFsbCBzZXR0aW5ncyBhbmQKIAkgICBBRUMvQUNCIHRvIHNldHRsZSAqLwogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDYqKGNhbS0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSA/IDMzIDogNDApICoKQEAgLTMwNjIsNyArMzA2Miw3IEBACiAKIAlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dXJuIC1FSU5UUjsKLQkKKwogCXNhdmVfY2FtZXJhX3N0YXRlKGNhbSk7CiAKIAlyZXR1cm4gMDsKQEAgLTMwOTQsOSArMzA5NCw5IEBACiAJCWlmIChnb3RvX2xvd19wb3dlcihjYW0pKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQorCiAJLyogcHJvY2VkdXJlIGRlc2NyaWJlZCBpbiBkZXZlbG9wZXIncyBndWlkZSBwMy0yOCAqLwotCQorCiAJLyogQ2hlY2sgdGhlIGZpcm13YXJlIHZlcnNpb24uICovCiAJY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZVZlcnNpb24gPSAwOwogCWdldF92ZXJzaW9uX2luZm9ybWF0aW9uKGNhbSk7CkBAIC0zMTEzLDE0ICszMTEzLDE0IEBACiAJY2FtLT5wYXJhbXMucXgzLnF4M19kZXRlY3RlZCA9IChjYW0tPnBhcmFtcy5wbnBJRC52ZW5kb3IgPT0gMHgwODEzICYmCiAJCQkJCWNhbS0+cGFyYW1zLnBucElELnByb2R1Y3QgPT0gMHgwMDAxKTsKIAotIAkvKiBUaGUgZmF0YWwgZXJyb3IgY2hlY2tpbmcgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIKKwkvKiBUaGUgZmF0YWwgZXJyb3IgY2hlY2tpbmcgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIKIAkgKiB0aGUgY2FtZXJhIHBvd2VycyB1cCAoZGV2ZWxvcGVyJ3MgZ3VpZGUgcCAzLTM4KSAqLwogCiAJLyogU2V0IHN0cmVhbVN0YXRlIGJlZm9yZSB0cmFuc2l0aW9uIHRvIGhpZ2ggcG93ZXIgdG8gYXZvaWQgYnVnCiAJICogaW4gZmlybXdhcmUgMS0wMiAqLwogCWRvX2NvbW1hbmQoY2FtLCBDUElBX0NPTU1BTkRfTW9kaWZ5Q2FtZXJhU3RhdHVzLCBTVFJFQU1TVEFURSwgMCwKLQkgICAgICAgICAgIFNUUkVBTV9OT1RfUkVBRFksIDApOwotCQorCQkgICBTVFJFQU1fTk9UX1JFQURZLCAwKTsKKwogCS8qIEdvdG9IaVBvd2VyICovCiAJZXJyID0gZ290b19oaWdoX3Bvd2VyKGNhbSk7CiAJaWYgKGVycikKQEAgLTMxNDIsMTYgKzMxNDIsMTYgQEAKIAkJCS8qIEZpcm13YXJlIDEtMDIgbWF5IGRvIHRoaXMgZm9yIHBhcmFsbGVsIHBvcnQgY2FtZXJhcywKIAkJCSAqIGp1c3QgY2xlYXIgdGhlIGZsYWdzIChkZXZlbG9wZXIncyBndWlkZSBwIDMtMzgpICovCiAJCQlkb19jb21tYW5kKGNhbSwgQ1BJQV9DT01NQU5EX01vZGlmeUNhbWVyYVN0YXR1cywKLQkJCSAgICAgICAgICAgRkFUQUxFUlJPUiwgfihDT01fRkxBR3xDUElBX0ZMQUcpLCAwLCAwKTsKKwkJCQkgICBGQVRBTEVSUk9SLCB+KENPTV9GTEFHfENQSUFfRkxBRyksIDAsIDApOwogCQl9CiAJfQotCQorCiAJLyogQ2hlY2sgdGhlIGNhbWVyYSBzdGF0dXMgYWdhaW4gKi8KIAlpZiAoY2FtLT5wYXJhbXMuc3RhdHVzLmZhdGFsRXJyb3IpIHsKIAkJaWYgKGNhbS0+cGFyYW1zLnN0YXR1cy5mYXRhbEVycm9yKQogCQkJcmV0dXJuIC1FSU87CiAJfQotCQorCiAJLyogVlBWZXJzaW9uIGNhbid0IGJlIHJldHJpZXZlZCBiZWZvcmUgdGhlIGNhbWVyYSBpcyBpbiBIaVBvd2VyLAogCSAqIHNvIGdldCBpdCBoZXJlIGluc3RlYWQgb2YgaW4gZ2V0X3ZlcnNpb25faW5mb3JtYXRpb24uICovCiAJZG9fY29tbWFuZChjYW0sIENQSUFfQ09NTUFORF9HZXRWUFZlcnNpb24sIDAsIDAsIDAsIDApOwpAQCAtMzE4NiwzMSArMzE4NiwzMSBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQoY2FtLT5vcHMtPm93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkb3duKCZjYW0tPmJ1c3lfbG9jayk7CisJbXV0ZXhfbG9jaygmY2FtLT5idXN5X2xvY2spOwogCWVyciA9IC1FTk9NRU07CiAJaWYgKCFjYW0tPnJhd19pbWFnZSkgewogCQljYW0tPnJhd19pbWFnZSA9IHJ2bWFsbG9jKENQSUFfTUFYX0lNQUdFX1NJWkUpOwogCQlpZiAoIWNhbS0+cmF3X2ltYWdlKQogCQkJZ290byBvb3BzOwogCX0KLQkKKwogCWlmICghY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSkgewogCQljYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5kYXRhID0gcnZtYWxsb2MoQ1BJQV9NQVhfRlJBTUVfU0laRSk7CiAJCWlmICghY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSkKIAkJCWdvdG8gb29wczsKIAl9Ci0JCisKIAkvKiBvcGVuIGNwaWEgKi8KIAllcnIgPSAtRU5PREVWOwogCWlmIChjYW0tPm9wcy0+b3BlbihjYW0tPmxvd2xldmVsX2RhdGEpKQogCQlnb3RvIG9vcHM7Ci0JCisKIAkvKiByZXNldCB0aGUgY2FtZXJhICovCiAJaWYgKChlcnIgPSByZXNldF9jYW1lcmEoY2FtKSkgIT0gMCkgewogCQljYW0tPm9wcy0+Y2xvc2UoY2FtLT5sb3dsZXZlbF9kYXRhKTsKIAkJZ290byBvb3BzOwogCX0KLQkKKwogCWVyciA9IC1FSU5UUjsKIAlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJZ290byBvb3BzOwpAQCAtMzIyNCwxMCArMzIyNCwxMCBAQAogCiAJLyogaW5pdCBpdCB0byBzb21ldGhpbmcgKi8KIAljYW0tPm1tYXBfa2x1ZGdlID0gMDsKLQkKKwogCSsrY2FtLT5vcGVuX2NvdW50OwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKLQl1cCgmY2FtLT5idXN5X2xvY2spOworCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwogCXJldHVybiAwOwogCiAgb29wczoKQEAgLTMyMzksNyArMzIzOSw3IEBACiAJCXJ2ZnJlZShjYW0tPnJhd19pbWFnZSwgQ1BJQV9NQVhfSU1BR0VfU0laRSk7CiAJCWNhbS0+cmF3X2ltYWdlID0gTlVMTDsKIAl9Ci0JdXAoJmNhbS0+YnVzeV9sb2NrKTsKKwltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKIAlwdXRfY2FtKGNhbS0+b3BzKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzI1MCwxMCArMzI1MCwxMCBAQAogCXN0cnVjdCBjYW1fZGF0YSAqY2FtID0gZGV2LT5wcml2OwogCiAJaWYgKGNhbS0+b3BzKSB7Ci0JICAgICAgICAvKiBSZXR1cm4gb3duZXJzaGlwIG9mIC9wcm9jL2NwaWEvdmlkZW9YIHRvIHJvb3QgKi8KKwkJLyogUmV0dXJuIG93bmVyc2hpcCBvZiAvcHJvYy9jcGlhL3ZpZGVvWCB0byByb290ICovCiAJCWlmKGNhbS0+cHJvY19lbnRyeSkKIAkJCWNhbS0+cHJvY19lbnRyeS0+dWlkID0gMDsKLQkKKwogCQkvKiBzYXZlIGNhbWVyYSBzdGF0ZSBmb3IgbGF0ZXIgb3BlbiAoZGV2ZWxvcGVycyBndWlkZSBjaCAzLjUuMykgKi8KIAkJc2F2ZV9jYW1lcmFfc3RhdGUoY2FtKTsKIApAQCAtMzMwMywyNCArMzMwMywyNCBAQAogCWludCBlcnI7CiAKIAkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wIGFuZCBtdWx0aXRocmVhZC1zYWZlICovCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+YnVzeV9sb2NrKSkKIAkJcmV0dXJuIC1FSU5UUjsKIAogCWlmICghYnVmKSB7CiAJCURCRygiYnVmIE5VTExcbiIpOwotCQl1cCgmY2FtLT5idXN5X2xvY2spOworCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFjb3VudCkgewogCQlEQkcoImNvdW50IDBcbiIpOwotCQl1cCgmY2FtLT5idXN5X2xvY2spOworCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFjYW0tPm9wcykgewogCQlEQkcoIm9wcyBOVUxMXG4iKTsKLQkJdXAoJmNhbS0+YnVzeV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMzMyOSw3ICszMzI5LDcgQEAKIAljYW0tPm1tYXBfa2x1ZGdlPTA7CiAJaWYoKGVyciA9IGZldGNoX2ZyYW1lKGNhbSkpICE9IDApIHsKIAkJREJHKCJFUlJPUiBmcm9tIGZldGNoX2ZyYW1lOiAlZFxuIiwgZXJyKTsKLQkJdXAoJmNhbS0+YnVzeV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJCXJldHVybiBlcnI7CiAJfQogCWNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLnN0YXRlID0gRlJBTUVfVU5VU0VEOwpAQCAtMzMzOCwxNyArMzMzOCwxNyBAQAogCWlmIChjYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5jb3VudCA+IGNvdW50KSB7CiAJCURCRygiY291bnQgd3Jvbmc6ICVkLCAlbHVcbiIsIGNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmNvdW50LAogCQkgICAgKHVuc2lnbmVkIGxvbmcpIGNvdW50KTsKLQkJdXAoJmNhbS0+YnVzeV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAlpZiAoY29weV90b191c2VyKGJ1ZiwgY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuZGF0YSwKLQkgICAgICAgICAgICAgICAgY2FtLT5kZWNvbXByZXNzZWRfZnJhbWUuY291bnQpKSB7CisJCQljYW0tPmRlY29tcHJlc3NlZF9mcmFtZS5jb3VudCkpIHsKIAkJREJHKCJjb3B5X3RvX3VzZXIgZmFpbGVkXG4iKTsKLQkJdXAoJmNhbS0+YnVzeV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXVwKCZjYW0tPmJ1c3lfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJcmV0dXJuIGNhbS0+ZGVjb21wcmVzc2VkX2ZyYW1lLmNvdW50OwogfQogCkBAIC0zMzYxLDE1ICszMzYxLDE1IEBACiAKIAlpZiAoIWNhbSB8fCAhY2FtLT5vcHMpCiAJCXJldHVybiAtRU5PREVWOwotCQorCiAJLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcC1zYWZlICovCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+YnVzeV9sb2NrKSkKIAkJcmV0dXJuIC1FSU5UUjsKIAogCS8vREJHKCJjcGlhX2lvY3RsOiAldVxuIiwgaW9jdGxucik7CiAKIAlzd2l0Y2ggKGlvY3RsbnIpIHsKLQkvKiBxdWVyeSBjYXBhYmlsaXRlcyAqLworCS8qIHF1ZXJ5IGNhcGFiaWxpdGllcyAqLwogCWNhc2UgVklESU9DR0NBUDoKIAl7CiAJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpiID0gYXJnOwpAQCAtMzQwNSw3ICszNDA1LDcgQEAKIAkJdi0+bm9ybSA9IDA7CiAJCWJyZWFrOwogCX0KLQkKKwogCWNhc2UgVklESU9DU0NIQU46CiAJewogCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKQEAgLTM0MjQsNyArMzQyNCw3IEBACiAJCSpwaWMgPSBjYW0tPnZwOwogCQlicmVhazsKIAl9Ci0JCisKIAljYXNlIFZJRElPQ1NQSUNUOgogCXsKIAkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwID0gYXJnOwpAQCAtMzQzOSw3ICszNDM5LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJZG93bigmY2FtLT5wYXJhbV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKIAkJLyogYnJpZ2h0bmVzcywgY29sb3VyLCBjb250cmFzdCBuZWVkIG5vIGNoZWNrIDAtNjU1MzUgKi8KIAkJY2FtLT52cCA9ICp2cDsKIAkJLyogdXBkYXRlIGNhbS0+cGFyYW1zLmNvbG91clBhcmFtcyAqLwpAQCAtMzQ1OCwxNSArMzQ1OCwxNSBAQAogCiAJCS8qIEFkanVzdCBmbGlja2VyIGNvbnRyb2wgaWYgbmVjZXNzYXJ5ICovCiAJCWlmKGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA8IDApCi0JCQljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5hbGxvd2FibGVPdmVyRXhwb3N1cmUgPSAKKwkJCWNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmFsbG93YWJsZU92ZXJFeHBvc3VyZSA9CiAJCQkJLWZpbmRfb3Zlcl9leHBvc3VyZShjYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7CiAJCWlmKGNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmZsaWNrZXJNb2RlICE9IDApCiAJCQljYW0tPmNtZF9xdWV1ZSB8PSBDT01NQU5EX1NFVEZMSUNLRVJDVFJMOwotCQkKKwogCiAJCS8qIHF1ZXVlIGNvbW1hbmQgdG8gdXBkYXRlIGNhbWVyYSAqLwogCQljYW0tPmNtZF9xdWV1ZSB8PSBDT01NQU5EX1NFVENPTE9VUlBBUkFNUzsKLQkJdXAoJmNhbS0+cGFyYW1fbG9jayk7CisJCW11dGV4X3VubG9jaygmY2FtLT5wYXJhbV9sb2NrKTsKIAkJREJHKCJWSURJT0NTUElDVDogJWQgLyAlZCAvLyAlZCAvICVkIC8gJWQgLyAlZFxuIiwKIAkJICAgIHZwLT5kZXB0aCwgdnAtPnBhbGV0dGUsIHZwLT5icmlnaHRuZXNzLCB2cC0+aHVlLCB2cC0+Y29sb3VyLAogCQkgICAgdnAtPmNvbnRyYXN0KTsKQEAgLTM0ODIsNyArMzQ4Miw3IEBACiAJCSp2dyA9IGNhbS0+dnc7CiAJCWJyZWFrOwogCX0KLQkKKwogCWNhc2UgVklESU9DU1dJTjoKIAl7CiAJCS8qIGNvcHlfZnJvbV91c2VyLCBjaGVjayB2YWxpZGl0eSwgY29weSB0byBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KQEAgLTM1MDEsMjYgKzM1MDEsMjYgQEAKIAkJLyogd2Ugc2V0IHRoZSB2aWRlbyB3aW5kb3cgdG8gc29tZXRoaW5nIHNtYWxsZXIgb3IgZXF1YWwgdG8gd2hhdAogCQkqIGlzIHJlcXVlc3RlZCBieSB0aGUgdXNlcj8/PwogCQkqLwotCQlkb3duKCZjYW0tPnBhcmFtX2xvY2spOworCQltdXRleF9sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCQlpZiAodnctPndpZHRoICE9IGNhbS0+dncud2lkdGggfHwgdnctPmhlaWdodCAhPSBjYW0tPnZ3LmhlaWdodCkgewogCQkJaW50IHZpZGVvX3NpemUgPSBtYXRjaF92aWRlb3NpemUodnctPndpZHRoLCB2dy0+aGVpZ2h0KTsKIAogCQkJaWYgKHZpZGVvX3NpemUgPCAwKSB7CiAJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljYW0tPnZpZGVvX3NpemUgPSB2aWRlb19zaXplOwogCiAJCQkvKiB2aWRlbyBzaXplIGlzIGNoYW5naW5nLCByZXNldCB0aGUgc3ViY2FwdHVyZSBhcmVhICovCiAJCQltZW1zZXQoJmNhbS0+dmMsIDAsIHNpemVvZihjYW0tPnZjKSk7Ci0JCQkKKwogCQkJc2V0X3Z3X3NpemUoY2FtKTsKIAkJCURCRygiJWQgLyAlZFxuIiwgY2FtLT52dy53aWR0aCwgY2FtLT52dy5oZWlnaHQpOwogCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRGT1JNQVQ7CiAJCX0KIAotCQl1cCgmY2FtLT5wYXJhbV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPnBhcmFtX2xvY2spOwogCiAJCS8qIHNldGZvcm1hdCBpZ25vcmVkIGJ5IGNhbWVyYSBkdXJpbmcgc3RyZWFtaW5nLAogCQkgKiBzbyBzdG9wL2Rpc3BhdGNoL3N0YXJ0ICovCkBAIC0zNTQ3LDcgKzM1NDcsNyBAQAogCQkJdm0tPm9mZnNldHNbaV0gPSBDUElBX01BWF9GUkFNRV9TSVpFICogaTsKIAkJYnJlYWs7CiAJfQotCQorCiAJY2FzZSBWSURJT0NNQ0FQVFVSRToKIAl7CiAJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKQEAgLTM1OTcsNyArMzU5Nyw3IEBACiAKIAkJCS8qIHZpZGVvIHNpemUgaXMgY2hhbmdpbmcsIHJlc2V0IHRoZSBzdWJjYXB0dXJlIGFyZWEgKi8KIAkJCW1lbXNldCgmY2FtLT52YywgMCwgc2l6ZW9mKGNhbS0+dmMpKTsKLQkJCQorCiAJCQlzZXRfdndfc2l6ZShjYW0pOwogCQkJY2FtLT5jbWRfcXVldWUgfD0gQ09NTUFORF9TRVRGT1JNQVQ7CiAJCQlkaXNwYXRjaF9jb21tYW5kcyhjYW0pOwpAQCAtMzYwOCw3ICszNjA4LDcgQEAKIAogCQlicmVhazsKIAl9Ci0JCisKIAljYXNlIFZJRElPQ1NZTkM6CiAJewogCQlpbnQgKmZyYW1lID0gYXJnOwpAQCAtMzY0OSw3ICszNjQ5LDcgQEAKIAkJKnZjID0gY2FtLT52YzsKIAogCQlicmVhazsKLQl9CQorCX0KIAogCWNhc2UgVklESU9DU0NBUFRVUkU6CiAJewpAQCAtMzY2NSw3ICszNjY1LDcgQEAKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQotCQkKKwogCQkvKiBDbGlwIHRvIHRoZSByZXNvbHV0aW9uIHdlIGNhbiBzZXQgZm9yIHRoZSBST0kKIAkJICAgKGV2ZXJ5IDggY29sdW1ucyBhbmQgNCByb3dzKSAqLwogCQl2Yy0+eCAgICAgID0gdmMtPnggICAgICAmIH4oX191MzIpNzsKQEAgLTM2ODEsMjUgKzM2ODEsMjUgQEAKIAkJfQogCiAJCURCRygiJWQsJWQvJWR4JWRcbiIsIHZjLT54LHZjLT55LHZjLT53aWR0aCwgdmMtPmhlaWdodCk7Ci0JCQotCQlkb3duKCZjYW0tPnBhcmFtX2xvY2spOwotCQkKKworCQltdXRleF9sb2NrKCZjYW0tPnBhcmFtX2xvY2spOworCiAJCWNhbS0+dmMueCAgICAgID0gdmMtPng7CiAJCWNhbS0+dmMueSAgICAgID0gdmMtPnk7CiAJCWNhbS0+dmMud2lkdGggID0gdmMtPndpZHRoOwogCQljYW0tPnZjLmhlaWdodCA9IHZjLT5oZWlnaHQ7Ci0JCQorCiAJCXNldF92d19zaXplKGNhbSk7CiAJCWNhbS0+Y21kX3F1ZXVlIHw9IENPTU1BTkRfU0VURk9STUFUOwogCi0JCXVwKCZjYW0tPnBhcmFtX2xvY2spOworCQltdXRleF91bmxvY2soJmNhbS0+cGFyYW1fbG9jayk7CiAKIAkJLyogc2V0Zm9ybWF0IGlnbm9yZWQgYnkgY2FtZXJhIGR1cmluZyBzdHJlYW1pbmcsCiAJCSAqIHNvIHN0b3AvZGlzcGF0Y2gvc3RhcnQgKi8KIAkJZGlzcGF0Y2hfY29tbWFuZHMoY2FtKTsKIAkJYnJlYWs7CiAJfQotCQorCiAJY2FzZSBWSURJT0NHVU5JVDoKIAl7CiAJCXN0cnVjdCB2aWRlb191bml0ICp2dSA9IGFyZzsKQEAgLTM3MTUsNyArMzcxNSw3IEBACiAJCWJyZWFrOwogCX0KIAotCQkKKwogCS8qIHBvaW50bGVzcyB0byBpbXBsZW1lbnQgb3ZlcmxheSB3aXRoIHRoaXMgY2FtZXJhICovCiAJY2FzZSBWSURJT0NDQVBUVVJFOgogCWNhc2UgVklESU9DR0ZCVUY6CkBAIC0zNzM2LDkgKzM3MzYsOSBAQAogCQlicmVhazsKIAl9CiAKLQl1cCgmY2FtLT5idXN5X2xvY2spOworCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOwogCXJldHVybiByZXR2YWw7Ci19IAorfQogCiBzdGF0aWMgaW50IGNwaWFfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC0zNzU5LDcgKzM3NTksNyBAQAogCiAJaWYgKCFjYW0gfHwgIWNhbS0+b3BzKQogCQlyZXR1cm4gLUVOT0RFVjsKLQkKKwogCURCRygiY3BpYV9tbWFwOiAlbGRcbiIsIHNpemUpOwogCiAJaWYgKHNpemUgPiBGUkFNRV9OVU0qQ1BJQV9NQVhfRlJBTUVfU0laRSkKQEAgLTM3NjcsMTQgKzM3NjcsMTQgQEAKIAogCWlmICghY2FtIHx8ICFjYW0tPm9wcykKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JCisKIAkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wLXNhZmUgKi8KLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmJ1c3lfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJaWYgKCFjYW0tPmZyYW1lX2J1ZikgewkvKiB3ZSBkbyBsYXp5IGFsbG9jYXRpb24gKi8KIAkJaWYgKChyZXR2YWwgPSBhbGxvY2F0ZV9mcmFtZV9idWYoY2FtKSkpIHsKLQkJCXVwKCZjYW0tPmJ1c3lfbG9jayk7CisJCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0KIAl9CkBAIC0zNzgzLDcgKzM3ODMsNyBAQAogCXdoaWxlIChzaXplID4gMCkgewogCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOwogCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKSB7Ci0JCQl1cCgmY2FtLT5idXN5X2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQlzdGFydCArPSBQQUdFX1NJWkU7CkBAIC0zNzk1LDcgKzM3OTUsNyBAQAogCX0KIAogCURCRygiY3BpYV9tbWFwOiAlbGRcbiIsIHNpemUpOwotCXVwKCZjYW0tPmJ1c3lfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4NTEsMTEgKzM4NTEsMTEgQEAKIAljYW0tPnBhcmFtcy5mbGlja2VyQ29udHJvbC5mbGlja2VyTW9kZSA9IDA7CiAJY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuZGlzYWJsZWQgPSAxOwogCi0JY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuY29hcnNlSnVtcCA9IAorCWNhbS0+cGFyYW1zLmZsaWNrZXJDb250cm9sLmNvYXJzZUp1bXAgPQogCQlmbGlja2VyX2p1bXBzW2NhbS0+bWFpbnNGcmVxXQotCQkgICAgICAgICAgICAgW2NhbS0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZV0KLQkJICAgICAgICAgICAgIFtjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07Ci0JY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlID0gCisJCQkgICAgIFtjYW0tPnBhcmFtcy5zZW5zb3JGcHMuYmFzZXJhdGVdCisJCQkgICAgIFtjYW0tPnBhcmFtcy5zZW5zb3JGcHMuZGl2aXNvcl07CisJY2FtLT5wYXJhbXMuZmxpY2tlckNvbnRyb2wuYWxsb3dhYmxlT3ZlckV4cG9zdXJlID0KIAkJLWZpbmRfb3Zlcl9leHBvc3VyZShjYW0tPnBhcmFtcy5jb2xvdXJQYXJhbXMuYnJpZ2h0bmVzcyk7CiAJY2FtLT5wYXJhbXMudmxPZmZzZXQuZ2FpbjEgPSAyMDsKIAljYW0tPnBhcmFtcy52bE9mZnNldC5nYWluMiA9IDI0OwpAQCAtMzg3MCwyMSArMzg3MCwyMSBAQAogCWNhbS0+cGFyYW1zLmNvbXByZXNzaW9uUGFyYW1zLnFEaWZmU3RlcFRocmVzaCA9IDM7CiAJY2FtLT5wYXJhbXMuY29tcHJlc3Npb25QYXJhbXMuZGVjaW1hdGlvblRocmVzaE1vZCA9IDI7CiAJLyogRW5kIG9mIGRlZmF1bHQgdmFsdWVzIGZyb20gU29mdHdhcmUgRGV2ZWxvcGVyJ3MgR3VpZGUgKi8KLQkKKwogCWNhbS0+dHJhbnNmZXJfcmF0ZSA9IDA7CiAJY2FtLT5leHBvc3VyZV9zdGF0dXMgPSBFWFBPU1VSRV9OT1JNQUw7Ci0JCisKIAkvKiBTZXQgU2Vuc29yIEZQUyB0byAxNWZwcy4gVGhpcyBzZWVtcyBiZXR0ZXIgdGhhbiAzMGZwcwogCSAqIGZvciBpbmRvb3IgbGlnaHRpbmcuICovCiAJY2FtLT5wYXJhbXMuc2Vuc29yRnBzLmRpdmlzb3IgPSAxOwogCWNhbS0+cGFyYW1zLnNlbnNvckZwcy5iYXNlcmF0ZSA9IDE7Ci0JCisKIAljYW0tPnBhcmFtcy55dXZUaHJlc2hvbGQueVRocmVzaG9sZCA9IDY7IC8qIEZyb20gd2luZG93cyBkcml2ZXIgKi8KIAljYW0tPnBhcmFtcy55dXZUaHJlc2hvbGQudXZUaHJlc2hvbGQgPSA2OyAvKiBGcm9tIHdpbmRvd3MgZHJpdmVyICovCi0JCisKIAljYW0tPnBhcmFtcy5mb3JtYXQuc3ViU2FtcGxlID0gU1VCU0FNUExFXzQyMjsKIAljYW0tPnBhcmFtcy5mb3JtYXQueXV2T3JkZXIgPSBZVVZPUkRFUl9ZVVlWOwotCQorCiAJY2FtLT5wYXJhbXMuY29tcHJlc3Npb24ubW9kZSA9IENQSUFfQ09NUFJFU1NJT05fQVVUTzsKIAljYW0tPnBhcmFtcy5jb21wcmVzc2lvblRhcmdldC5mclRhcmdldGluZyA9CiAJCUNQSUFfQ09NUFJFU1NJT05fVEFSR0VUX1FVQUxJVFk7CkBAIC0zODk4LDcgKzM4OTgsNyBAQAogCWNhbS0+cGFyYW1zLnF4My5jcmFkbGVkID0gMDsKIAogCWNhbS0+dmlkZW9fc2l6ZSA9IFZJREVPU0laRV9DSUY7Ci0JCisKIAljYW0tPnZwLmNvbG91ciA9IDMyNzY4OyAgICAgIC8qIDUwJSAqLwogCWNhbS0+dnAuaHVlID0gMzI3Njg7ICAgICAgICAgLyogNTAlICovCiAJY2FtLT52cC5icmlnaHRuZXNzID0gMzI3Njg7ICAvKiA1MCUgKi8KQEAgLTM5MTEsNyArMzkxMSw3IEBACiAJY2FtLT52Yy55ID0gMDsKIAljYW0tPnZjLndpZHRoID0gMDsKIAljYW0tPnZjLmhlaWdodCA9IDA7Ci0JCisKIAljYW0tPnZ3LnggPSAwOwogCWNhbS0+dncueSA9IDA7CiAJc2V0X3Z3X3NpemUoY2FtKTsKQEAgLTM5MjgsNyArMzkyOCw3IEBACiAKIC8qIGluaXRpYWxpemUgY2FtX2RhdGEgc3RydWN0dXJlICAqLwogc3RhdGljIHZvaWQgaW5pdF9jYW1lcmFfc3RydWN0KHN0cnVjdCBjYW1fZGF0YSAqY2FtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcGlhX2NhbWVyYV9vcHMgKm9wcyApCisJCQkgICAgICAgc3RydWN0IGNwaWFfY2FtZXJhX29wcyAqb3BzICkKIHsKIAlpbnQgaTsKIApAQCAtMzkzNiw4ICszOTM2LDggQEAKIAltZW1zZXQoY2FtLCAwLCBzaXplb2Yoc3RydWN0IGNhbV9kYXRhKSk7CiAKIAljYW0tPm9wcyA9IG9wczsKLQlpbml0X01VVEVYKCZjYW0tPnBhcmFtX2xvY2spOwotCWluaXRfTVVURVgoJmNhbS0+YnVzeV9sb2NrKTsKKwltdXRleF9pbml0KCZjYW0tPnBhcmFtX2xvY2spOworCW11dGV4X2luaXQoJmNhbS0+YnVzeV9sb2NrKTsKIAogCXJlc2V0X2NhbWVyYV9zdHJ1Y3QoY2FtKTsKIApAQCAtMzk0NSw3ICszOTQ1LDcgQEAKIAogCW1lbWNweSgmY2FtLT52ZGV2LCAmY3BpYV90ZW1wbGF0ZSwgc2l6ZW9mKGNwaWFfdGVtcGxhdGUpKTsKIAljYW0tPnZkZXYucHJpdiA9IGNhbTsKLQkKKwogCWNhbS0+Y3VyZnJhbWUgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBGUkFNRV9OVU07IGkrKykgewogCQljYW0tPmZyYW1lW2ldLndpZHRoID0gMDsKQEAgLTM5NjEsMTUgKzM5NjEsMTUgQEAKIAogc3RydWN0IGNhbV9kYXRhICpjcGlhX3JlZ2lzdGVyX2NhbWVyYShzdHJ1Y3QgY3BpYV9jYW1lcmFfb3BzICpvcHMsIHZvaWQgKmxvd2xldmVsKQogewotICAgICAgICBzdHJ1Y3QgY2FtX2RhdGEgKmNhbWVyYTsKLQkKKwlzdHJ1Y3QgY2FtX2RhdGEgKmNhbWVyYTsKKwogCWlmICgoY2FtZXJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhbV9kYXRhKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JCisKIAlpbml0X2NhbWVyYV9zdHJ1Y3QoIGNhbWVyYSwgb3BzICk7CiAJY2FtZXJhLT5sb3dsZXZlbF9kYXRhID0gbG93bGV2ZWw7Ci0JCisKIAkvKiByZWdpc3RlciB2NGwgZGV2aWNlICovCiAJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtZXJhLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPT0gLTEpIHsKIAkJa2ZyZWUoY2FtZXJhKTsKQEAgLTM5ODIsNyArMzk4Miw3IEBACiAJLyogb3BlbiBjcGlhICovCiAJaWYgKGNhbWVyYS0+b3BzLT5vcGVuKGNhbWVyYS0+bG93bGV2ZWxfZGF0YSkpCiAJCXJldHVybiBjYW1lcmE7Ci0JCisKIAkvKiByZXNldCB0aGUgY2FtZXJhICovCiAJaWYgKHJlc2V0X2NhbWVyYShjYW1lcmEpICE9IDApIHsKIAkJY2FtZXJhLT5vcHMtPmNsb3NlKGNhbWVyYS0+bG93bGV2ZWxfZGF0YSk7CkBAIC00MDIyLDExICs0MDIyLDExIEBACiAJCURCRygiY2FtZXJhIG9wZW4gLS0gc2V0dGluZyBvcHMgdG8gTlVMTFxuIik7CiAJCWNhbS0+b3BzID0gTlVMTDsKIAl9Ci0JCisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCURCRygiZGVzdHJveWluZyAvcHJvYy9jcGlhL3ZpZGVvJWRcbiIsIGNhbS0+dmRldi5taW5vcik7CiAJZGVzdHJveV9wcm9jX2NwaWFfY2FtKGNhbSk7Ci0jZW5kaWYJCisjZW5kaWYKIAlpZiAoIWNhbS0+b3Blbl9jb3VudCkgewogCQlEQkcoImZyZWVpbmcgY2FtZXJhXG4iKTsKIAkJa2ZyZWUoY2FtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmgKaW5kZXggZjYyOWI2OS4uZGRlMjdhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmgKQEAgLTQ3LDE0ICs0NywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RydWN0IGNwaWFfY2FtZXJhX29wcwogewogCS8qIG9wZW4gc2V0cyBwcml2ZGF0YSB0byBwb2ludCB0byBzdHJ1Y3R1cmUgZm9yIHRoaXMgY2FtZXJhLgotICAgICAgICAgKiBSZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCBvdGhlcndpc2UgMC4KKwkgKiBSZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCBvdGhlcndpc2UgMC4KIAkgKi8KIAlpbnQgKCpvcGVuKSh2b2lkICpwcml2ZGF0YSk7Ci0JCisKIAkvKiBSZWdpc3RlcnMgY2FsbGJhY2sgZnVuY3Rpb24gY2IgdG8gYmUgY2FsbGVkIHdpdGggY2JkYXRhCiAJICogd2hlbiBhbiBpbWFnZSBpcyByZWFkeS4gIElmIGNiIGlzIE5VTEwsIG9ubHkgc2luZ2xlIGltYWdlIGdyYWJzCiAJICogc2hvdWxkIGJlIHVzZWQuICBjYiBzaG91bGQgaW1tZWRpYXRlbHkgY2FsbCBzdHJlYW1SZWFkIHRvIHJlYWQKQEAgLTYyLDggKzYzLDggQEAKIAkgKiBvdGhlcndpc2UgMC4KIAkgKi8KIAlpbnQgKCpyZWdpc3RlckNhbGxiYWNrKSh2b2lkICpwcml2ZGF0YSwgdm9pZCAoKmNiKSh2b2lkICpjYmRhdGEpLAotCSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNiZGF0YSk7Ci0JCisJCQkJdm9pZCAqY2JkYXRhKTsKKwogCS8qIHRyYW5zZmVyQ21kIHNlbmRzIGNvbW1hbmRzIHRvIHRoZSBjYW1lcmEuICBjb21tYW5kIE1VU1QgcG9pbnQgdG8KIAkgKiBhbiAgOCBieXRlIGJ1ZmZlciBpbiBrZXJuZWwgc3BhY2UuIGRhdGEgY2FuIGJlIE5VTEwgaWYgbm8gZXh0cmEKIAkgKiBkYXRhIGlzIG5lZWRlZC4gIFRoZSBzaXplIG9mIHRoZSBkYXRhIGlzIGdpdmVuIGJ5IHRoZSBsYXN0IDIKQEAgLTc2LDMwICs3NywzMCBAQAogCSAqIFJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIG90aGVyd2lzZSAwLgogCSAqLwogCWludCAoKnN0cmVhbVN0YXJ0KSh2b2lkICpwcml2ZGF0YSk7Ci0JCisKIAkvKiBzdHJlYW1TdG9wIHRlcm1pbmF0ZXMgc3RyZWFtIGNhcHR1cmUgbW9kZS4KIAkgKiBSZXR1cm5zIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCBvdGhlcndpc2UgMC4KIAkgKi8KIAlpbnQgKCpzdHJlYW1TdG9wKSh2b2lkICpwcml2ZGF0YSk7Ci0gICAgICAgIAorCiAJLyogc3RyZWFtUmVhZCByZWFkcyBhIGZyYW1lIGZyb20gdGhlIGNhbWVyYS4gIGJ1ZmZlciBwb2ludHMgdG8gYQotICAgICAgICAgKiBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBjb21wbGV0ZSBmcmFtZSBpbiBrZXJuZWwgc3BhY2UuCi0gICAgICAgICAqIG5vYmxvY2sgaW5kaWNhdGVzIGlmIHRoaXMgc2hvdWxkIGJlIGEgbm9uIGJsb2NraW5nIHJlYWQuCisJICogYnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIGEgY29tcGxldGUgZnJhbWUgaW4ga2VybmVsIHNwYWNlLgorCSAqIG5vYmxvY2sgaW5kaWNhdGVzIGlmIHRoaXMgc2hvdWxkIGJlIGEgbm9uIGJsb2NraW5nIHJlYWQuCiAJICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQsIG9yIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgotICAgICAgICAgKi8KKwkgKi8KIAlpbnQgKCpzdHJlYW1SZWFkKSh2b2lkICpwcml2ZGF0YSwgdTggKmJ1ZmZlciwgaW50IG5vYmxvY2spOwotCQorCiAJLyogY2xvc2UgZGlzYWJsZXMgdGhlIGRldmljZSB1bnRpbCBvcGVuKCkgaXMgY2FsbGVkIGFnYWluLgogCSAqIFJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIG90aGVyd2lzZSAwLgogCSAqLwogCWludCAoKmNsb3NlKSh2b2lkICpwcml2ZGF0YSk7Ci0JCisKIAkvKiBJZiB3YWl0X2Zvcl9zdHJlYW1fcmVhZHkgaXMgbm9uLXplcm8sIHdhaXQgdW50aWwgdGhlIHN0cmVhbVN0YXRlCiAJICogaXMgU1RSRUFNX1JFQURZIGJlZm9yZSBjYWxsaW5nIHN0cmVhbVJlYWQuCiAJICovCiAJaW50IHdhaXRfZm9yX3N0cmVhbV9yZWFkeTsKIAotCS8qIAorCS8qCiAJICogVXNlZCB0byBtYWludGFpbiBsb3dsZXZlbCBtb2R1bGUgdXNhZ2UgY291bnRzCiAJICovCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CkBAIC0yMTQsMTQgKzIxNSwxNCBAQAogCQl1OCB2aWRlb1NpemU7CQkvKiBDSUYvUUNJRiAqLwogCQl1OCBzdWJTYW1wbGU7CiAJCXU4IHl1dk9yZGVyOwotIAl9IGZvcm1hdDsKLSAgICAgICAgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlbCBRWDMgc3BlY2lmaWMgZGF0YSAqLwotICAgICAgICAgICAgICAgIHU4IHF4M19kZXRlY3RlZDsgICAgICAgIC8qIGEgUVgzIGlzIHByZXNlbnQgKi8KLSAgICAgICAgICAgICAgICB1OCB0b3BsaWdodDsgICAgICAgICAgICAvKiB0b3AgbGlnaHQgbGl0ICwgUi9XICovCi0gICAgICAgICAgICAgICAgdTggYm90dG9tbGlnaHQ7ICAgICAgICAgLyogYm90dG9tIGxpZ2h0IGxpdCwgUi9XICovCi0gICAgICAgICAgICAgICAgdTggYnV0dG9uOyAgICAgICAgICAgICAgLyogc25hcHNob3QgYnV0dG9uIHByZXNzZWQgKFIvTykgKi8KLSAgICAgICAgICAgICAgICB1OCBjcmFkbGVkOyAgICAgICAgICAgICAvKiBtaWNyb3Njb3BlIGlzIGluIGNyYWRsZSAoUi9PKSAqLwotICAgICAgICB9IHF4MzsKKwl9IGZvcm1hdDsKKwlzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVsIFFYMyBzcGVjaWZpYyBkYXRhICovCisJCXU4IHF4M19kZXRlY3RlZDsgICAgICAgIC8qIGEgUVgzIGlzIHByZXNlbnQgKi8KKwkJdTggdG9wbGlnaHQ7ICAgICAgICAgICAgLyogdG9wIGxpZ2h0IGxpdCAsIFIvVyAqLworCQl1OCBib3R0b21saWdodDsgICAgICAgICAvKiBib3R0b20gbGlnaHQgbGl0LCBSL1cgKi8KKwkJdTggYnV0dG9uOyAgICAgICAgICAgICAgLyogc25hcHNob3QgYnV0dG9uIHByZXNzZWQgKFIvTykgKi8KKwkJdTggY3JhZGxlZDsgICAgICAgICAgICAgLyogbWljcm9zY29wZSBpcyBpbiBjcmFkbGUgKFIvTykgKi8KKwl9IHF4MzsKIAlzdHJ1Y3QgewogCQl1OCBjb2xTdGFydDsJCS8qIHNraXAgZmlyc3QgOCpjb2xTdGFydCBwaXhlbHMgKi8KIAkJdTggY29sRW5kOwkJLyogZmluaXNoIGF0IDgqY29sRW5kIHBpeGVscyAqLwpAQCAtMjQ2LDEzICsyNDcsMTMgQEAKIHN0cnVjdCBjYW1fZGF0YSB7CiAJc3RydWN0IGxpc3RfaGVhZCBjYW1fZGF0YV9saXN0OwogCi0gICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgYnVzeV9sb2NrOyAgICAgLyogZ3VhcmQgYWdhaW5zdCBTTVAgbXVsdGl0aHJlYWRpbmcgKi8KKwlzdHJ1Y3QgbXV0ZXggYnVzeV9sb2NrOyAgICAgLyogZ3VhcmQgYWdhaW5zdCBTTVAgbXVsdGl0aHJlYWRpbmcgKi8KIAlzdHJ1Y3QgY3BpYV9jYW1lcmFfb3BzICpvcHM7CS8qIGxvd2xldmVsIGRyaXZlciBvcGVyYXRpb25zICovCiAJdm9pZCAqbG93bGV2ZWxfZGF0YTsJCS8qIHByaXZhdGUgZGF0YSBmb3IgbG93bGV2ZWwgZHJpdmVyICovCiAJdTggKnJhd19pbWFnZTsJCQkvKiBidWZmZXIgZm9yIHJhdyBpbWFnZSBkYXRhICovCiAJc3RydWN0IGNwaWFfZnJhbWUgZGVjb21wcmVzc2VkX2ZyYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1ZmZlciB0byBob2xkIGRlY29tcHJlc3NlZCBmcmFtZSAqLwotCWludCBpbWFnZV9zaXplOwkJICAgICAgICAvKiBzaXplb2YgbGFzdCBkZWNvbXByZXNzZWQgaW1hZ2UgKi8KKwkJCQkJLyogYnVmZmVyIHRvIGhvbGQgZGVjb21wcmVzc2VkIGZyYW1lICovCisJaW50IGltYWdlX3NpemU7CQkJLyogc2l6ZW9mIGxhc3QgZGVjb21wcmVzc2VkIGltYWdlICovCiAJaW50IG9wZW5fY291bnQ7CQkJLyogIyBvZiBwcm9jZXNzIHRoYXQgaGF2ZSBjYW1lcmEgb3BlbiAqLwogCiAJCQkJLyogY2FtZXJhIHN0YXR1cyAqLwpAQCAtMjYxLDEwICsyNjIsMTAgQEAKIAl1OCBtYWluc0ZyZXE7CQkJLyogZm9yIGZsaWNrZXIgY29udHJvbCAqLwogCiAJCQkJLyogcHJvYyBpbnRlcmZhY2UgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHBhcmFtX2xvY2s7CS8qIHBhcmFtcyBsb2NrIGZvciB0aGlzIGNhbWVyYSAqLworCXN0cnVjdCBtdXRleCBwYXJhbV9sb2NrOwkvKiBwYXJhbXMgbG9jayBmb3IgdGhpcyBjYW1lcmEgKi8KIAlzdHJ1Y3QgY2FtX3BhcmFtcyBwYXJhbXM7CS8qIGNhbWVyYSBzZXR0aW5ncyAqLwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19lbnRyeTsJLyogL3Byb2MvY3BpYS92aWRlb1ggKi8KLQkKKwogCQkJCQkvKiB2NGwgKi8KIAlpbnQgdmlkZW9fc2l6ZTsJCQkvKiBWSURFT19TSVpFXyAqLwogCXZvbGF0aWxlIGVudW0gdjRsX2NhbXN0YXRlcyBjYW1zdGF0ZTsJLyogdjRsIGxheWVyIHN0YXR1cyAqLwpAQCAtMjc2LDcgKzI3Nyw3IEBACiAJCQkJLyogbW1hcCBpbnRlcmZhY2UgKi8KIAlpbnQgY3VyZnJhbWU7CQkJLyogdGhlIGN1cnJlbnQgZnJhbWUgdG8gZ3JhYiBpbnRvICovCiAJdTggKmZyYW1lX2J1ZjsJCQkvKiBmcmFtZSBidWZmZXIgZGF0YSAqLwotICAgICAgICBzdHJ1Y3QgY3BpYV9mcmFtZSBmcmFtZVtGUkFNRV9OVU1dOworCXN0cnVjdCBjcGlhX2ZyYW1lIGZyYW1lW0ZSQU1FX05VTV07CiAJCQkJLyogRlJBTUVfTlVNLWJ1ZmZlcmluZywgc28gd2UgbmVlZCBhIGFycmF5ICovCiAKIAlpbnQgZmlyc3RfZnJhbWU7CkBAIC00MjMsNyArNDI0LDcgQEAKICNkZWZpbmUgREVCX0JZVEUocClcCiAgIERCRygiJTFkICUxZCAlMWQgJTFkICUxZCAlMWQgJTFkICUxZCBcbiIsXAogICAgICAgKHApJjB4ODA/MTowLCAocCkmMHg0MD8xOjAsIChwKSYweDIwPzE6MCwgKHApJjB4MTA/MTowLFwKLSAgICAgICAgKHApJjB4MDg/MTowLCAocCkmMHgwND8xOjAsIChwKSYweDAyPzE6MCwgKHApJjB4MDE/MTowKTsKKwkocCkmMHgwOD8xOjAsIChwKSYweDA0PzE6MCwgKHApJjB4MDI/MTowLCAocCkmMHgwMT8xOjApOwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzY2MwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbmZpZyBWSURFT19DUElBMgorCXRyaXN0YXRlICJDUGlBMiBWaWRlbyBGb3IgTGludXgiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgVVNCCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciBjYW1lcmFzIGJhc2VkIG9uIFZpc2lvbidzIENQaUEyCisJICAoQ29sb3VyIFByb2Nlc3NvciBJbnRlcmZhY2UgQVNJQyksIHN1Y2ggYXMgdGhlIERpZ2l0YWwgQmx1ZSBRWDUKKwkgIE1pY3Jvc2NvcGUuIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBjYW1lcmFzLCBzYXkgWSBoZXJlCisKKwkgIFRoaXMgZHJpdmVyIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlIChjcGlhMikuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhjZjFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK2NwaWEyLW9ianMJOj0gY3BpYTJfdjRsLm8gY3BpYTJfdXNiLm8gY3BpYTJfY29yZS5vCisKK29iai0kKENPTkZJR19WSURFT19DUElBMikgKz0gY3BpYTIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOTQyODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyLmgKQEAgLTAsMCArMSw0OTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEZpbGVuYW1lOiBjcGlhMi5oCisgKgorICogIENvcHlyaWdodCAyMDAxLCBTVE1pY3JvbGVjdHJvbmljcywgSW5jLgorICoKKyAqICBDb250YWN0OiAgc3RldmUubWlsbGVyQHN0LmNvbQorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqICAgICBUaGlzIGlzIGEgVVNCIGRyaXZlciBmb3IgQ1BpQTIgYmFzZWQgdmlkZW8gY2FtZXJhcy4KKyAqCisgKiAgICAgVGhpcyBkcml2ZXIgaXMgbW9kZWxsZWQgb24gdGhlIGNwaWEgdXNiIGRyaXZlciBieQorICogICAgIEpvY2hlbiBTY2hhcnJsYWNoIGFuZCBKb2hhbm5lcyBFcmRmZWxkdC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fQ1BJQTJfSF9fCisjZGVmaW5lIF9fQ1BJQTJfSF9fCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKKyNpbmNsdWRlICJjcGlhMmRldi5oIgorI2luY2x1ZGUgImNwaWEyX3JlZ2lzdGVycy5oIgorCisvKiBkZWZpbmUgZm9yIHZlcmJvc2UgZGVidWcgb3V0cHV0ICovCisvLyNkZWZpbmUgX0NQSUEyX0RFQlVHXworCisjZGVmaW5lIENQSUEyX01BSl9WRVIJMgorI2RlZmluZSBDUElBMl9NSU5fVkVSICAgMAorI2RlZmluZSBDUElBMl9QQVRDSF9WRVIJMAorCisvKioqCisgKiBJbWFnZSBkZWZpbmVzCisgKioqLworI2lmbmRlZiB0cnVlCisjZGVmaW5lIHRydWUgMQorI2RlZmluZSBmYWxzZSAwCisjZW5kaWYKKworLyogIE1pc2MgY29uc3RhbnRzICovCisjZGVmaW5lIEFMTE9XX0NPUlJVUFQgMAkJLyogQ2F1c2VzIGNvbGxhdGVyIHRvIGRpc2NhcmQgY2hlY2tzdW0gKi8KKworLyogVVNCIFRyYW5zZmVyIG1vZGUgKi8KKyNkZWZpbmUgWEZFUl9JU09DIDAKKyNkZWZpbmUgWEZFUl9CVUxLIDEKKworLyogVVNCIEFsdGVybmF0ZXMgKi8KKyNkZWZpbmUgVVNCSUZfQ01ET05MWSAwCisjZGVmaW5lIFVTQklGX0JVTEsgMQorI2RlZmluZSBVU0JJRl9JU09fMSAyCS8qICAxMjggYnl0ZXMvbXMgKi8KKyNkZWZpbmUgVVNCSUZfSVNPXzIgMwkvKiAgMzg0IGJ5dGVzL21zICovCisjZGVmaW5lIFVTQklGX0lTT18zIDQJLyogIDY0MCBieXRlcy9tcyAqLworI2RlZmluZSBVU0JJRl9JU09fNCA1CS8qICA3NjggYnl0ZXMvbXMgKi8KKyNkZWZpbmUgVVNCSUZfSVNPXzUgNgkvKiAgODk2IGJ5dGVzL21zICovCisjZGVmaW5lIFVTQklGX0lTT182IDcJLyogMTAyMyBieXRlcy9tcyAqLworCisvKiBGbGlja2VyIE1vZGVzICovCisjZGVmaW5lIE5FVkVSX0ZMSUNLRVIgICAwCisjZGVmaW5lIEFOVElfRkxJQ0tFUl9PTiAxCisjZGVmaW5lIEZMSUNLRVJfNjAgICAgICA2MAorI2RlZmluZSBGTElDS0VSXzUwICAgICAgNTAKKworLyogRGVidWcgZmxhZ3MgKi8KKyNkZWZpbmUgREVCVUdfTk9ORSAgICAgICAgICAwCisjZGVmaW5lIERFQlVHX1JFRyAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBERUJVR19EVU1QX1BBVENIICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgREVCVUdfRFVNUF9SRUdTICAgICAweDAwMDAwMDA0CisKKy8qKioKKyAqIFZpZGVvIGZyYW1lIHNpemVzCisgKioqLworZW51bSB7CisJVklERU9TSVpFX1ZHQSA9IDAsCS8qIDY0MHg0ODAgKi8KKwlWSURFT1NJWkVfQ0lGLAkJLyogMzUyeDI4OCAqLworCVZJREVPU0laRV9RVkdBLAkJLyogMzIweDI0MCAqLworCVZJREVPU0laRV9RQ0lGLAkJLyogMTc2eDE0NCAqLworCVZJREVPU0laRV8yODhfMjE2LAorCVZJREVPU0laRV8yNTZfMTkyLAorCVZJREVPU0laRV8yMjRfMTY4LAorCVZJREVPU0laRV8xOTJfMTQ0LAorfTsKKworI2RlZmluZSBTVFZfSU1BR0VfQ0lGX1JPV1MgICAgMjg4CisjZGVmaW5lIFNUVl9JTUFHRV9DSUZfQ09MUyAgICAzNTIKKworI2RlZmluZSBTVFZfSU1BR0VfUUNJRl9ST1dTICAgMTQ0CisjZGVmaW5lIFNUVl9JTUFHRV9RQ0lGX0NPTFMgICAxNzYKKworI2RlZmluZSBTVFZfSU1BR0VfVkdBX1JPV1MgICAgNDgwCisjZGVmaW5lIFNUVl9JTUFHRV9WR0FfQ09MUyAgICA2NDAKKworI2RlZmluZSBTVFZfSU1BR0VfUVZHQV9ST1dTICAgMjQwCisjZGVmaW5lIFNUVl9JTUFHRV9RVkdBX0NPTFMgICAzMjAKKworI2RlZmluZSBKUEVHX01BUktFUl9DT00gKDE8PDYpCS8qIENvbW1lbnQgc2VnbWVudCAqLworCisvKioqCisgKiBFbnVtcworICoqKi8KKy8qIFNlbnNvciB0eXBlcyBhdmFpbGFibGUgd2l0aCBjcGlhMiBhc2ljcyAqLworZW51bSBzZW5zb3JzIHsKKwlDUElBMl9TRU5TT1JfNDEwLAorCUNQSUEyX1NFTlNPUl81MDAKK307CisKKy8qIEFzaWMgdHlwZXMgYXZhaWxhYmxlIGluIHRoZSBDUGlBMiBhcmNoaXRlY3R1cmUgKi8KKyNkZWZpbmUgIENQSUEyX0FTSUNfNjcyIDB4NjcKKworLyogRGV2aWNlIHR5cGVzIChzdHY2NzIsIHN0djY3NiwgZXRjKSAqLworI2RlZmluZSAgREVWSUNFX1NUVl82NzIgICAweDAwMDEKKyNkZWZpbmUgIERFVklDRV9TVFZfNjc2ICAgMHgwMDAyCisKK2VudW0gZnJhbWVfc3RhdHVzIHsKKwlGUkFNRV9FTVBUWSwKKwlGUkFNRV9SRUFESU5HLAkJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCisJRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBiZSByZWFkICovCisJRlJBTUVfRVJST1IsCit9OworCisvKioqCisgKiBSZWdpc3RlciBhY2Nlc3MgKGZvciBVU0IgcmVxdWVzdCBieXRlKQorICoqKi8KK2VudW0geworCUNBTUVSQUFDQ0VTU19TWVNURU0gPSAwLAorCUNBTUVSQUFDQ0VTU19WQywKKwlDQU1FUkFBQ0NFU1NfVlAsCisJQ0FNRVJBQUNDRVNTX0lEQVRBCit9OworCisjZGVmaW5lIENBTUVSQUFDQ0VTU19UWVBFX0JMT0NLICAgIDB4MDAKKyNkZWZpbmUgQ0FNRVJBQUNDRVNTX1RZUEVfUkFORE9NICAgMHgwNAorI2RlZmluZSBDQU1FUkFBQ0NFU1NfVFlQRV9NQVNLICAgICAweDA4CisjZGVmaW5lIENBTUVSQUFDQ0VTU19UWVBFX1JFUEVBVCAgIDB4MEMKKworI2RlZmluZSBUUkFOU0ZFUl9SRUFEIDAKKyNkZWZpbmUgVFJBTlNGRVJfV1JJVEUgMQorCisjZGVmaW5lIERFRkFVTFRfQUxUICAgVVNCSUZfSVNPXzYKKyNkZWZpbmUgREVGQVVMVF9CUklHSFRORVNTIDB4NDYKKyNkZWZpbmUgREVGQVVMVF9DT05UUkFTVCAweDkzCisjZGVmaW5lIERFRkFVTFRfU0FUVVJBVElPTiAweDdmCisjZGVmaW5lIERFRkFVTFRfVEFSR0VUX0tCIDB4MzAKKworLyogUG93ZXIgc3RhdGUgKi8KKyNkZWZpbmUgSElfUE9XRVJfTU9ERSBDUElBMl9TWVNURU1fQ09OVFJPTF9ISUdIX1BPV0VSCisjZGVmaW5lIExPX1BPV0VSX01PREUgQ1BJQTJfU1lTVEVNX0NPTlRST0xfTE9XX1BPV0VSCisKKworLyoqKioqKioqCisgKiBDb21tYW5kcworICoqKioqKiovCitlbnVtIHsKKwlDUElBMl9DTURfTk9ORSA9IDAsCisJQ1BJQTJfQ01EX0dFVF9WRVJTSU9OLAorCUNQSUEyX0NNRF9HRVRfUE5QX0lELAorCUNQSUEyX0NNRF9HRVRfQVNJQ19UWVBFLAorCUNQSUEyX0NNRF9HRVRfU0VOU09SLAorCUNQSUEyX0NNRF9HRVRfVlBfREVWSUNFLAorCUNQSUEyX0NNRF9HRVRfVlBfQlJJR0hUTkVTUywKKwlDUElBMl9DTURfU0VUX1ZQX0JSSUdIVE5FU1MsCisJQ1BJQTJfQ01EX0dFVF9DT05UUkFTVCwKKwlDUElBMl9DTURfU0VUX0NPTlRSQVNULAorCUNQSUEyX0NNRF9HRVRfVlBfU0FUVVJBVElPTiwKKwlDUElBMl9DTURfU0VUX1ZQX1NBVFVSQVRJT04sCisJQ1BJQTJfQ01EX0dFVF9WUF9HUElPX0RJUkVDVElPTiwKKwlDUElBMl9DTURfU0VUX1ZQX0dQSU9fRElSRUNUSU9OLAorCUNQSUEyX0NNRF9HRVRfVlBfR1BJT19EQVRBLAorCUNQSUEyX0NNRF9TRVRfVlBfR1BJT19EQVRBLAorCUNQSUEyX0NNRF9HRVRfVkNfTVBfR1BJT19ESVJFQ1RJT04sCisJQ1BJQTJfQ01EX1NFVF9WQ19NUF9HUElPX0RJUkVDVElPTiwKKwlDUElBMl9DTURfR0VUX1ZDX01QX0dQSU9fREFUQSwKKwlDUElBMl9DTURfU0VUX1ZDX01QX0dQSU9fREFUQSwKKwlDUElBMl9DTURfRU5BQkxFX1BBQ0tFVF9DVFJMLAorCUNQSUEyX0NNRF9HRVRfRkxJQ0tFUl9NT0RFUywKKwlDUElBMl9DTURfU0VUX0ZMSUNLRVJfTU9ERVMsCisJQ1BJQTJfQ01EX1JFU0VUX0ZJRk8sCS8qIGNsZWFyIGZpZm8gYW5kIGVuYWJsZSBzdHJlYW0gYmxvY2sgKi8KKwlDUElBMl9DTURfU0VUX0hJX1BPV0VSLAorCUNQSUEyX0NNRF9TRVRfTE9XX1BPV0VSLAorCUNQSUEyX0NNRF9DTEVBUl9WMldfRVJSLAorCUNQSUEyX0NNRF9TRVRfVVNFUl9NT0RFLAorCUNQSUEyX0NNRF9HRVRfVVNFUl9NT0RFLAorCUNQSUEyX0NNRF9GUkFNRVJBVEVfUkVRLAorCUNQSUEyX0NNRF9TRVRfQ09NUFJFU1NJT05fU1RBVEUsCisJQ1BJQTJfQ01EX0dFVF9XQUtFVVAsCisJQ1BJQTJfQ01EX1NFVF9XQUtFVVAsCisJQ1BJQTJfQ01EX0dFVF9QV19DT05UUk9MLAorCUNQSUEyX0NNRF9TRVRfUFdfQ09OVFJPTCwKKwlDUElBMl9DTURfR0VUX1NZU1RFTV9DVFJMLAorCUNQSUEyX0NNRF9TRVRfU1lTVEVNX0NUUkwsCisJQ1BJQTJfQ01EX0dFVF9WUF9TWVNURU1fU1RBVEUsCisJQ1BJQTJfQ01EX0dFVF9WUF9TWVNURU1fQ1RSTCwKKwlDUElBMl9DTURfU0VUX1ZQX1NZU1RFTV9DVFJMLAorCUNQSUEyX0NNRF9HRVRfVlBfRVhQX01PREVTLAorCUNQSUEyX0NNRF9TRVRfVlBfRVhQX01PREVTLAorCUNQSUEyX0NNRF9HRVRfREVWSUNFX0NPTkZJRywKKwlDUElBMl9DTURfU0VUX0RFVklDRV9DT05GSUcsCisJQ1BJQTJfQ01EX1NFVF9TRVJJQUxfQUREUiwKKwlDUElBMl9DTURfU0VUX1NFTlNPUl9DUjEsCisJQ1BJQTJfQ01EX0dFVF9WQ19DT05UUk9MLAorCUNQSUEyX0NNRF9TRVRfVkNfQ09OVFJPTCwKKwlDUElBMl9DTURfU0VUX1RBUkdFVF9LQiwKKwlDUElBMl9DTURfU0VUX0RFRl9KUEVHX09QVCwKKwlDUElBMl9DTURfUkVIQVNIX1ZQNCwKKwlDUElBMl9DTURfR0VUX1VTRVJfRUZGRUNUUywKKwlDUElBMl9DTURfU0VUX1VTRVJfRUZGRUNUUworfTsKKworZW51bSB1c2VyX2NtZCB7CisJQ09NTUFORF9OT05FID0gMHgwMDAwMDAwMSwKKwlDT01NQU5EX1NFVF9GUFMgPSAweDAwMDAwMDAyLAorCUNPTU1BTkRfU0VUX0NPTE9SX1BBUkFNUyA9IDB4MDAwMDAwMDQsCisJQ09NTUFORF9HRVRfQ09MT1JfUEFSQU1TID0gMHgwMDAwMDAwOCwKKwlDT01NQU5EX1NFVF9GT1JNQVQgPSAweDAwMDAwMDEwLAkvKiBzaXplLCBldGMgKi8KKwlDT01NQU5EX1NFVF9GTElDS0VSID0gMHgwMDAwMDAyMAorfTsKKworLyoqKgorICogU29tZSBkZWZpbmVzIHNwZWNpZmljIHRvIHRoZSA2NzYgY2hpcAorICoqKi8KKyNkZWZpbmUgQ0FNQUNDX0NJRiAgICAgIDB4MDEKKyNkZWZpbmUgQ0FNQUNDX1ZHQSAgICAgIDB4MDIKKyNkZWZpbmUgQ0FNQUNDX1FDSUYgICAgIDB4MDQKKyNkZWZpbmUgQ0FNQUNDX1FWR0EgICAgIDB4MDgKKworCitzdHJ1Y3QgY3BpYTJfcmVnaXN0ZXIgeworCXU4IGluZGV4OworCXU4IHZhbHVlOworfTsKKworc3RydWN0IGNwaWEyX3JlZ19tYXNrIHsKKwl1OCBpbmRleDsKKwl1OCBhbmRfbWFzazsKKwl1OCBvcl9tYXNrOworCXU4IGZpbGw7Cit9OworCitzdHJ1Y3QgY3BpYTJfY29tbWFuZCB7CisJdTMyIGNvbW1hbmQ7CisJdTggcmVxX21vZGU7CQkvKiAoQmxvY2sgb3IgcmFuZG9tKSB8IHJlZ2lzdGVyQmFuayAqLworCXU4IHJlZ19jb3VudDsKKwl1OCBkaXJlY3Rpb247CisJdTggc3RhcnQ7CisJdW5pb24gcmVnX3R5cGVzIHsKKwkJc3RydWN0IGNwaWEyX3JlZ2lzdGVyIHJlZ2lzdGVyc1szMl07CisJCXN0cnVjdCBjcGlhMl9yZWdfbWFzayBtYXNrc1sxNl07CisJCXU4IGJsb2NrX2RhdGFbNjRdOworCQl1OCAqcGF0Y2hfZGF0YTsJLyogcG9pbnRzIHRvIGZ1bmN0aW9uIGRlZmluZWQgYmxvY2sgKi8KKwl9IGJ1ZmZlcjsKK307CisKK3N0cnVjdCBjYW1lcmFfcGFyYW1zIHsKKwlzdHJ1Y3QgeworCQl1OCBmaXJtd2FyZV9yZXZpc2lvbl9oaTsgLyogRm9yIHN5c3RlbSByZWdpc3RlciBzZXQgKGJhbmsgMCkgKi8KKwkJdTggZmlybXdhcmVfcmV2aXNpb25fbG87CisJCXU4IGFzaWNfaWQ7CS8qIFZpZGVvIENvbXByZXNzb3Igc2V0IChiYW5rIDEpICovCisJCXU4IGFzaWNfcmV2OworCQl1OCB2cF9kZXZpY2VfaGk7CS8qIFZpZGVvIFByb2Nlc3NvciBzZXQgKGJhbmsgMikgKi8KKwkJdTggdnBfZGV2aWNlX2xvOworCQl1OCBzZW5zb3JfZmxhZ3M7CisJCXU4IHNlbnNvcl9yZXY7CisJfSB2ZXJzaW9uOworCisJc3RydWN0IHsKKwkJdTMyIGRldmljZV90eXBlOyAgICAgLyogZW51bWVyYXRlZCBmcm9tIHZlbmRvci9wcm9kdWN0IGlkcy4KKwkJCQkgICAgICAqIEN1cnJlbnRseSwgZWl0aGVyIFNUVl82NzIgb3IgU1RWXzY3NiAqLworCQl1MTYgdmVuZG9yOworCQl1MTYgcHJvZHVjdDsKKwkJdTE2IGRldmljZV9yZXZpc2lvbjsKKwl9IHBucF9pZDsKKworCXN0cnVjdCB7CisJCXU4IGJyaWdodG5lc3M7CS8qIENQSUEyX1ZQX0VYUE9TVVJFX1RBUkdFVCAqLworCQl1OCBjb250cmFzdDsJLyogTm90ZTogdGhpcyBpcyBDUElBMl9WUF9ZUkFOR0UgKi8KKwkJdTggc2F0dXJhdGlvbjsJLyogIENQSUEyX1ZQX1NBVFVSQVRJT04gKi8KKwl9IGNvbG9yX3BhcmFtczsKKworCXN0cnVjdCB7CisJCXU4IGNhbV9yZWdpc3RlcjsKKwkJdTggZmxpY2tlcl9tb2RlX3JlcTsJLyogMSBpZiBmbGlja2VyIG9uLCBlbHNlIG5ldmVyIGZsaWNrZXIgKi8KKwkJaW50IG1haW5zX2ZyZXF1ZW5jeTsKKwl9IGZsaWNrZXJfY29udHJvbDsKKworCXN0cnVjdCB7CisJCXU4IGpwZWdfb3B0aW9uczsKKwkJdTggY3JlZXBfcGVyaW9kOworCQl1OCB1c2VyX3NxdWVlemU7CisJCXU4IGluaGliaXRfaHRhYmxlczsKKwl9IGNvbXByZXNzaW9uOworCisJc3RydWN0IHsKKwkJdTggb2hzaXplOwkvKiBvdXRwdXQgaW1hZ2Ugc2l6ZSAqLworCQl1OCBvdnNpemU7CisJCXU4IGhjcm9wOwkvKiBjcm9wcGluZyBzdGFydF9wb3MvNCAqLworCQl1OCB2Y3JvcDsKKwkJdTggaHBoYXNlOwkvKiBzY2FsaW5nIHJlZ2lzdGVycyAqLworCQl1OCB2cGhhc2U7CisJCXU4IGhpc3BhbjsKKwkJdTggdmlzcGFuOworCQl1OCBoaWNyb3A7CisJCXU4IHZpY3JvcDsKKwkJdTggaGlmcmFjdGlvbjsKKwkJdTggdmlmcmFjdGlvbjsKKwl9IGltYWdlX3NpemU7CisKKwlzdHJ1Y3QgeworCQlpbnQgd2lkdGg7CS8qIGFjdHVhbCB3aW5kb3cgd2lkdGggKi8KKwkJaW50IGhlaWdodDsJLyogYWN0dWFsIHdpbmRvdyBoZWlnaHQgKi8KKwl9IHJvaTsKKworCXN0cnVjdCB7CisJCXU4IHZpZGVvX21vZGU7CisJCXU4IGZyYW1lX3JhdGU7CisJCXU4IHZpZGVvX3NpemU7CS8qIE5vdCBhIHJlZ2lzdGVyLCBqdXN0IGEgY29udmVuaWVuY2UgZm9yIGNyb3BwZWQgc2l6ZXMgKi8KKwkJdTggZ3Bpb19kaXJlY3Rpb247CisJCXU4IGdwaW9fZGF0YTsKKwkJdTggc3lzdGVtX2N0cmw7CisJCXU4IHN5c3RlbV9zdGF0ZTsKKwkJdTggbG93bGlnaHRfYm9vc3Q7CS8qIEJvb2w6IDAgPSBvZmYsIDEgPSBvbiAqLworCQl1OCBkZXZpY2VfY29uZmlnOworCQl1OCBleHBvc3VyZV9tb2RlczsKKwkJdTggdXNlcl9lZmZlY3RzOworCX0gdnBfcGFyYW1zOworCisJc3RydWN0IHsKKwkJdTggcHdfY29udHJvbDsKKwkJdTggd2FrZXVwOworCQl1OCB2Y19jb250cm9sOworCQl1OCB2Y19tcF9kaXJlY3Rpb247CisJCXU4IHZjX21wX2RhdGE7CisJCXU4IHRhcmdldF9rYjsKKwl9IHZjX3BhcmFtczsKKworCXN0cnVjdCB7CisJCXU4IHBvd2VyX21vZGU7CisJCXU4IHN5c3RlbV9jdHJsOworCQl1OCBzdHJlYW1fbW9kZTsJLyogVGhpcyBpcyB0aGUgY3VycmVudCBhbHRlcm5hdGUgZm9yIHVzYiBkcml2ZXJzICovCisJCXU4IGFsbG93X2NvcnJ1cHQ7CisJfSBjYW1lcmFfc3RhdGU7Cit9OworCisjZGVmaW5lIE5VTV9TQlVGICAgIDIKKworc3RydWN0IGNwaWEyX3NidWYgeworCWNoYXIgKmRhdGE7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworc3RydWN0IGZyYW1lYnVmIHsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7CisJdW5zaWduZWQgbG9uZyBzZXE7CisJaW50IG51bTsKKwlpbnQgbGVuZ3RoOworCWludCBtYXhfbGVuZ3RoOworCXZvbGF0aWxlIGVudW0gZnJhbWVfc3RhdHVzIHN0YXR1czsKKwl1OCAqZGF0YTsKKwlzdHJ1Y3QgZnJhbWVidWYgKm5leHQ7Cit9OworCitzdHJ1Y3QgY3BpYTJfZmggeworCWVudW0gdjRsMl9wcmlvcml0eSBwcmlvOworCXU4IG1tYXBwZWQ7Cit9OworCitzdHJ1Y3QgY2FtZXJhX2RhdGEgeworCS8qIGxvY2tzICovCisJc3RydWN0IG11dGV4IGJ1c3lfbG9jazsJLyogZ3VhcmQgYWdhaW5zdCBTTVAgbXVsdGl0aHJlYWRpbmcgKi8KKwlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlIHByaW87CisKKwkvKiBjYW1lcmEgc3RhdHVzICovCisJdm9sYXRpbGUgaW50IHByZXNlbnQ7CS8qIElzIHRoZSBjYW1lcmEgc3RpbGwgcHJlc2VudD8gKi8KKwlpbnQgb3Blbl9jb3VudDsJCS8qICMgb2YgcHJvY2VzcyB0aGF0IGhhdmUgY2FtZXJhIG9wZW4gKi8KKwlpbnQgZmlyc3RfaW1hZ2Vfc2VlbjsKKwl1OCBtYWluc19mcmVxOwkJLyogZm9yIGZsaWNrZXIgY29udHJvbCAqLworCWVudW0gc2Vuc29ycyBzZW5zb3JfdHlwZTsKKwl1OCBmbHVzaDsKKwl1OCBtbWFwcGVkOworCWludCBzdHJlYW1pbmc7CQkvKiAwID0gbm8sIDEgPSB5ZXMgKi8KKwlpbnQgeGZlcl9tb2RlOwkJLyogWEZFUl9CVUxLIG9yIFhGRVJfSVNPQyAqLworCXN0cnVjdCBjYW1lcmFfcGFyYW1zIHBhcmFtczsJLyogY2FtZXJhIHNldHRpbmdzICovCisKKwkvKiB2NGwgKi8KKwlpbnQgdmlkZW9fc2l6ZTsJCQkvKiBWSURFT19TSVpFXyAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CS8qIHY0bCB2aWRlb2RldiAqLworCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwOwkvKiB2NGwgY2FtZXJhIHNldHRpbmdzICovCisJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsJCS8qIHY0bCBjYXB0dXJlIGFyZWEgKi8KKwlfX3UzMiBwaXhlbGZvcm1hdDsgICAgICAgLyogRm9ybWF0IGZvdXJjYyAgICAgICovCisKKwkvKiBVU0IgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXVuc2lnbmVkIGNoYXIgaWZhY2U7CisJdW5zaWduZWQgaW50IGN1cl9hbHQ7CisJdW5zaWduZWQgaW50IG9sZF9hbHQ7CisJc3RydWN0IGNwaWEyX3NidWYgc2J1ZltOVU1fU0JVRl07CS8qIERvdWJsZSBidWZmZXJpbmcgKi8KKworCXdhaXRfcXVldWVfaGVhZF90IHdxX3N0cmVhbTsKKworCS8qIEJ1ZmZlcmluZyAqLworCXUzMiBmcmFtZV9zaXplOworCWludCBudW1fZnJhbWVzOworCXVuc2lnbmVkIGxvbmcgZnJhbWVfY291bnQ7CisJdTggKmZyYW1lX2J1ZmZlcjsJLyogZnJhbWUgYnVmZmVyIGRhdGEgKi8KKwlzdHJ1Y3QgZnJhbWVidWYgKmJ1ZmZlcnM7CisJc3RydWN0IGZyYW1lYnVmICogdm9sYXRpbGUgY3VyYnVmZjsKKwlzdHJ1Y3QgZnJhbWVidWYgKndvcmtidWZmOworCisJLyogTUpQRUcgRXh0ZW5zaW9uICovCisJaW50IEFQUG47CQkvKiBOdW1iZXIgb2YgQVBQIHNlZ21lbnQgdG8gYmUgd3JpdHRlbiwgbXVzdCBiZSAwLi4xNSAqLworCWludCBBUFBfbGVuOwkJLyogTGVuZ3RoIG9mIGRhdGEgaW4gSlBFRyBBUFBuIHNlZ21lbnQgKi8KKwljaGFyIEFQUF9kYXRhWzYwXTsJLyogRGF0YSBpbiB0aGUgSlBFRyBBUFBuIHNlZ21lbnQuICovCisKKwlpbnQgQ09NX2xlbjsJCS8qIExlbmd0aCBvZiBkYXRhIGluIEpQRUcgQ09NIHNlZ21lbnQgKi8KKwljaGFyIENPTV9kYXRhWzYwXTsJLyogRGF0YSBpbiBKUEVHIENPTSBzZWdtZW50ICovCit9OworCisvKiB2NGwgKi8KK2ludCBjcGlhMl9yZWdpc3Rlcl9jYW1lcmEoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pOwordm9pZCBjcGlhMl91bnJlZ2lzdGVyX2NhbWVyYShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7CisKKy8qIGNvcmUgKi8KK2ludCBjcGlhMl9yZXNldF9jYW1lcmEoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pOworaW50IGNwaWEyX3NldF9sb3dfcG93ZXIoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pOwordm9pZCBjcGlhMl9kYmdfZHVtcF9yZWdpc3RlcnMoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pOworaW50IGNwaWEyX21hdGNoX3ZpZGVvX3NpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKK3ZvaWQgY3BpYTJfc2V0X2NhbWVyYV9zdGF0ZShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7Cit2b2lkIGNwaWEyX3NhdmVfY2FtZXJhX3N0YXRlKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK3ZvaWQgY3BpYTJfc2V0X2NvbG9yX3BhcmFtcyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7Cit2b2lkIGNwaWEyX3NldF9icmlnaHRuZXNzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCB1bnNpZ25lZCBjaGFyIHZhbHVlKTsKK3ZvaWQgY3BpYTJfc2V0X2NvbnRyYXN0KHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCB1bnNpZ25lZCBjaGFyIHZhbHVlKTsKK3ZvaWQgY3BpYTJfc2V0X3NhdHVyYXRpb24oc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHVuc2lnbmVkIGNoYXIgdmFsdWUpOworaW50IGNwaWEyX3NldF9mbGlja2VyX21vZGUoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIGludCBtb2RlKTsKK3ZvaWQgY3BpYTJfc2V0X2Zvcm1hdChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7CitpbnQgY3BpYTJfc2VuZF9jb21tYW5kKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCBzdHJ1Y3QgY3BpYTJfY29tbWFuZCAqY21kKTsKK2ludCBjcGlhMl9kb19jb21tYW5kKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLAorCQkgICAgIHVuc2lnbmVkIGludCBjb21tYW5kLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgZGlyZWN0aW9uLCB1bnNpZ25lZCBjaGFyIHBhcmFtKTsKK3N0cnVjdCBjYW1lcmFfZGF0YSAqY3BpYTJfaW5pdF9jYW1lcmFfc3RydWN0KHZvaWQpOworaW50IGNwaWEyX2luaXRfY2FtZXJhKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK2ludCBjcGlhMl9hbGxvY2F0ZV9idWZmZXJzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK3ZvaWQgY3BpYTJfZnJlZV9idWZmZXJzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK2xvbmcgY3BpYTJfcmVhZChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwKKwkJY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50LCBpbnQgbm9ibG9jayk7Cit1bnNpZ25lZCBpbnQgY3BpYTJfcG9sbChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwKKwkJCXN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KTsKK2ludCBjcGlhMl9yZW1hcF9idWZmZXIoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3ZvaWQgY3BpYTJfc2V0X3Byb3BlcnR5X2ZsaXAoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIGludCBwcm9wX3ZhbCk7Cit2b2lkIGNwaWEyX3NldF9wcm9wZXJ0eV9taXJyb3Ioc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIGludCBwcm9wX3ZhbCk7CitpbnQgY3BpYTJfc2V0X3RhcmdldF9rYihzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgdW5zaWduZWQgY2hhciB2YWx1ZSk7CitpbnQgY3BpYTJfc2V0X2dwaW8oc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHVuc2lnbmVkIGNoYXIgc2V0dGluZyk7CitpbnQgY3BpYTJfc2V0X2ZwcyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgaW50IGZyYW1lcmF0ZSk7CisKKy8qIHVzYiAqLworaW50IGNwaWEyX3VzYl9pbml0KHZvaWQpOwordm9pZCBjcGlhMl91c2JfY2xlYW51cCh2b2lkKTsKK2ludCBjcGlhMl91c2JfdHJhbnNmZXJfY21kKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCB2b2lkICpyZWdpc3RlcnMsCisJCQkgICB1OCByZXF1ZXN0LCB1OCBzdGFydCwgdTggY291bnQsIHU4IGRpcmVjdGlvbik7CitpbnQgY3BpYTJfdXNiX3N0cmVhbV9zdGFydChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgdW5zaWduZWQgaW50IGFsdGVybmF0ZSk7CitpbnQgY3BpYTJfdXNiX3N0cmVhbV9zdG9wKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK2ludCBjcGlhMl91c2Jfc3RyZWFtX3BhdXNlKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK2ludCBjcGlhMl91c2Jfc3RyZWFtX3Jlc3VtZShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7CitpbnQgY3BpYTJfdXNiX2NoYW5nZV9zdHJlYW1pbmdfYWx0ZXJuYXRlKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLAorCQkJCQkgdW5zaWduZWQgaW50IGFsdCk7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVidWcgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZmRlZiBfQ1BJQTJfREVCVUdfCisjZGVmaW5lIEFMT0cobGV2LCBmbXQsIGFyZ3MuLi4pIHByaW50ayhsZXYgIiVzOiVkICVzKCk6ICIgZm10LCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAjIyBhcmdzKQorI2RlZmluZSBMT0coZm10LCBhcmdzLi4uKSBBTE9HKEtFUk5fSU5GTywgZm10LCAjIyBhcmdzKQorI2RlZmluZSBFUlIoZm10LCBhcmdzLi4uKSBBTE9HKEtFUk5fRVJSLCBmbXQsICMjIGFyZ3MpCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pIEFMT0coS0VSTl9ERUJVRywgZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgQUxPRyhmbXQsYXJncy4uLikgcHJpbnRrKGZtdCwjI2FyZ3MpCisjZGVmaW5lIExPRyhmbXQsYXJncy4uLikgQUxPRyhLRVJOX0lORk8gImNwaWEyOiAiZm10LCMjYXJncykKKyNkZWZpbmUgRVJSKGZtdCxhcmdzLi4uKSBBTE9HKEtFUk5fRVJSICJjcGlhMjogImZtdCwjI2FyZ3MpCisjZGVmaW5lIERCRyhmbW4sYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorLyogTm8gZnVuY3Rpb24gb3IgbGluZW5vLCBmb3Igc2hvcnRlciBsaW5lcyAqLworI2RlZmluZSBLSU5GTyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0lORk8gZm10LCMjYXJncykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNzcxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX2NvcmUuYwpAQCAtMCwwICsxLDI1MjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEZpbGVuYW1lOiBjcGlhMl9jb3JlLmMKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDEsIFNUTWljcm9sZWN0cm9uaWNzLCBJbmMuCisgKiAgICAgIENvbnRhY3Q6ICBzdGV2ZS5taWxsZXJAc3QuY29tCisgKgorICogIERlc2NyaXB0aW9uOgorICogICAgIFRoaXMgaXMgYSBVU0IgZHJpdmVyIGZvciBDUGlhMiBiYXNlZCB2aWRlbyBjYW1lcmFzLgorICogICAgIFRoZSBpbmZyYXN0cnVjdHVyZSBvZiB0aGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgY3BpYSB1c2IgZHJpdmVyIGJ5CisgKiAgICAgSm9jaGVuIFNjaGFycmxhY2ggYW5kIEpvaGFubmVzIEVyZGZlbGR0LgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogIFN0cmlwcGVkIG9mIDIuNCBzdHVmZiByZWFkeSBmb3IgbWFpbiBrZXJuZWwgc3VibWl0IGJ5CisgKgkJQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImNwaWEyLmgiCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisvLyNkZWZpbmUgX0NQSUEyX0RFQlVHXworCisjaW5jbHVkZSAiY3BpYTJwYXRjaC5oIgorCisjaWZkZWYgX0NQSUEyX0RFQlVHXworCitzdGF0aWMgY29uc3QgY2hhciAqYmxvY2tfbmFtZVtdID0geworCSJTeXN0ZW0iLAorCSJWQyIsCisJIlZQIiwKKwkiSURBVEEiCit9OworI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdzX29uID0gMDsvL0RFQlVHX1JFRzsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEZvcndhcmQgRGVjbGFyYXRpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBhcHBseV92cF9wYXRjaChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7CitzdGF0aWMgaW50IHNldF9kZWZhdWx0X3VzZXJfbW9kZShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7CitzdGF0aWMgaW50IHNldF92d19zaXplKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IGNvbmZpZ3VyZV9zZW5zb3Ioc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sCisJCQkgICAgaW50IHJlcXdpZHRoLCBpbnQgcmVxaGVpZ2h0KTsKK3N0YXRpYyBpbnQgY29uZmlnX3NlbnNvcl80MTAoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sCisJCQkgICAgaW50IHJlcXdpZHRoLCBpbnQgcmVxaGVpZ2h0KTsKK3N0YXRpYyBpbnQgY29uZmlnX3NlbnNvcl81MDAoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sCisJCQkgICAgaW50IHJlcXdpZHRoLCBpbnQgcmVxaGVpZ2h0KTsKK3N0YXRpYyBpbnQgc2V0X2FsbF9wcm9wZXJ0aWVzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK3N0YXRpYyB2b2lkIGdldF9jb2xvcl9wYXJhbXMoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pOworc3RhdGljIHZvaWQgd2FrZV9zeXN0ZW0oc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pOworc3RhdGljIHZvaWQgc2V0X2xvd2xpZ2h0X2Jvb3N0KHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK3N0YXRpYyB2b2lkIHJlc2V0X2NhbWVyYV9zdHJ1Y3Qoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pOworc3RhdGljIGludCBjcGlhMl9zZXRfaGlnaF9wb3dlcihzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7CisKKy8qIEhlcmUgd2Ugd2FudCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5LgorICogVGhpcyBpcyB1c2VkIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqIGFyZWEgYW5kIG1hcmtpbmcgdGhlIHBhZ2VzIGFzIHJlc2VydmVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga3ZpcnRfdG9fcGEodW5zaWduZWQgbG9uZyBhZHIpCit7CisJdW5zaWduZWQgbG9uZyBrdmEsIHJldDsKKworCWt2YSA9ICh1bnNpZ25lZCBsb25nKSBwYWdlX2FkZHJlc3Modm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJa3ZhIHw9IGFkciAmIChQQUdFX1NJWkUtMSk7IC8qIHJlc3RvcmUgdGhlIG9mZnNldCAqLworCXJldCA9IF9fcGEoa3ZhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCAqcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCS8qIFJvdW5kIGl0IG9mZiB0byBQQUdFX1NJWkUgKi8KKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7CS8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKworCXdoaWxlICgobG9uZylzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlICgobG9uZylzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlKG1lbSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfZG9fY29tbWFuZAorICoKKyAqICBTZW5kIGFuIGFyYml0cmFyeSBjb21tYW5kIHRvIHRoZSBjYW1lcmEuICBGb3IgY29tbWFuZHMgdGhhdCByZWFkIGZyb20KKyAqICB0aGUgY2FtZXJhLCBjb3B5IHRoZSBidWZmZXJzIGludG8gdGhlIHByb3BlciBwYXJhbSBzdHJ1Y3R1cmVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGNwaWEyX2RvX2NvbW1hbmQoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sCisJCSAgICAgdTMyIGNvbW1hbmQsIHU4IGRpcmVjdGlvbiwgdTggcGFyYW0pCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGNwaWEyX2NvbW1hbmQgY21kOworCXVuc2lnbmVkIGludCBkZXZpY2UgPSBjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGU7CisKKwljbWQuY29tbWFuZCA9IGNvbW1hbmQ7CisJY21kLnJlZ19jb3VudCA9IDI7CS8qIGRlZmF1bHQgKi8KKwljbWQuZGlyZWN0aW9uID0gZGlyZWN0aW9uOworCisJLyoqKgorCSAqIFNldCB1cCB0aGUgY29tbWFuZC4KKwkgKioqLworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgQ1BJQTJfQ01EX0dFVF9WRVJTSU9OOgorCQljbWQucmVxX21vZGUgPQorCQkgICAgQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfU1lTVEVNOworCQljbWQuc3RhcnQgPSBDUElBMl9TWVNURU1fREVWSUNFX0hJOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfUE5QX0lEOgorCQljbWQucmVxX21vZGUgPQorCQkgICAgQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfU1lTVEVNOworCQljbWQucmVnX2NvdW50ID0gODsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfU1lTVEVNX0RFU0NSSVBfVklEX0hJOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfQVNJQ19UWVBFOgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WQzsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfVkNfQVNJQ19JRDsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1NFTlNPUjoKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5zdGFydCA9IENQSUEyX1ZQX1NFTlNPUl9GTEFHUzsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1ZQX0RFVklDRToKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5zdGFydCA9IENQSUEyX1ZQX0RFVklDRUg7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9WUF9CUklHSFRORVNTOgorCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSBwYXJhbTsJLyogVGhlbiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENQSUEyX0NNRF9HRVRfVlBfQlJJR0hUTkVTUzoKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5yZWdfY291bnQgPSAxOworCQlpZiAoZGV2aWNlID09IERFVklDRV9TVFZfNjcyKQorCQkJY21kLnN0YXJ0ID0gQ1BJQTJfVlA0X0VYUE9TVVJFX1RBUkdFVDsKKwkJZWxzZQorCQkJY21kLnN0YXJ0ID0gQ1BJQTJfVlA1X0VYUE9TVVJFX1RBUkdFVDsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfU0VUX0NPTlRSQVNUOgorCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSBwYXJhbTsJLyogVGhlbiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENQSUEyX0NNRF9HRVRfQ09OVFJBU1Q6CisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX0JMT0NLIHwgQ0FNRVJBQUNDRVNTX1ZQOworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfVlBfWVJBTkdFOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9TRVRfVlBfU0FUVVJBVElPTjoKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CS8qIFRoZW4gZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUElBMl9DTURfR0VUX1ZQX1NBVFVSQVRJT046CisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX0JMT0NLIHwgQ0FNRVJBQUNDRVNTX1ZQOworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJaWYgKGRldmljZSA9PSBERVZJQ0VfU1RWXzY3MikKKwkJCWNtZC5zdGFydCA9IENQSUEyX1ZQX1NBVFVSQVRJT047CisJCWVsc2UKKwkJCWNtZC5zdGFydCA9IENQSUEyX1ZQNV9NQ1VWU0FUVVJBVElPTjsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfU0VUX1ZQX0dQSU9fREFUQToKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CS8qIFRoZW4gZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUElBMl9DTURfR0VUX1ZQX0dQSU9fREFUQToKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5yZWdfY291bnQgPSAxOworCQljbWQuc3RhcnQgPSBDUElBMl9WUF9HUElPX0RBVEE7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9WUF9HUElPX0RJUkVDVElPTjoKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CS8qIFRoZW4gZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUElBMl9DTURfR0VUX1ZQX0dQSU9fRElSRUNUSU9OOgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WUDsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWNtZC5zdGFydCA9IENQSUEyX1ZQX0dQSU9fRElSRUNUSU9OOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9TRVRfVkNfTVBfR1BJT19EQVRBOgorCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSBwYXJhbTsJLyogVGhlbiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENQSUEyX0NNRF9HRVRfVkNfTVBfR1BJT19EQVRBOgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WQzsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWNtZC5zdGFydCA9IENQSUEyX1ZDX01QX0RBVEE7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9WQ19NUF9HUElPX0RJUkVDVElPTjoKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CS8qIFRoZW4gZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUElBMl9DTURfR0VUX1ZDX01QX0dQSU9fRElSRUNUSU9OOgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WQzsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWNtZC5zdGFydCA9IENQSUEyX1ZDX01QX0RJUjsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfRU5BQkxFX1BBQ0tFVF9DVFJMOgorCQljbWQucmVxX21vZGUgPQorCQkgICAgQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfU1lTVEVNOworCQljbWQuc3RhcnQgPSBDUElBMl9TWVNURU1fSU5UX1BBQ0tFVF9DVFJMOworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9GTElDS0VSX01PREVTOgorCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSBwYXJhbTsJLyogVGhlbiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENQSUEyX0NNRF9HRVRfRkxJQ0tFUl9NT0RFUzoKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5yZWdfY291bnQgPSAxOworCQljbWQuc3RhcnQgPSBDUElBMl9WUF9GTElDS0VSX01PREVTOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9SRVNFVF9GSUZPOgkvKiBjbGVhciBmaWZvIGFuZCBlbmFibGUgc3RyZWFtIGJsb2NrICovCisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX1JBTkRPTSB8IENBTUVSQUFDQ0VTU19WQzsKKwkJY21kLnJlZ19jb3VudCA9IDI7CisJCWNtZC5zdGFydCA9IDA7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzBdLmluZGV4ID0gQ1BJQTJfVkNfU1RfQ1RSTDsKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMF0udmFsdWUgPSBDUElBMl9WQ19TVF9DVFJMX1NSQ19WQyB8CisJCSAgICBDUElBMl9WQ19TVF9DVFJMX0RTVF9VU0IgfCBDUElBMl9WQ19TVF9DVFJMX0VPRl9ERVRFQ1Q7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzFdLmluZGV4ID0gQ1BJQTJfVkNfU1RfQ1RSTDsKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMV0udmFsdWUgPSBDUElBMl9WQ19TVF9DVFJMX1NSQ19WQyB8CisJCSAgICBDUElBMl9WQ19TVF9DVFJMX0RTVF9VU0IgfAorCQkgICAgQ1BJQTJfVkNfU1RfQ1RSTF9FT0ZfREVURUNUIHwKKwkJICAgIENQSUEyX1ZDX1NUX0NUUkxfRklGT19FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9ISV9QT1dFUjoKKwkJY21kLnJlcV9tb2RlID0KKwkJICAgIENBTUVSQUFDQ0VTU19UWVBFX1JBTkRPTSB8IENBTUVSQUFDQ0VTU19TWVNURU07CisJCWNtZC5yZWdfY291bnQgPSAyOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1swXS5pbmRleCA9CisJCSAgICBDUElBMl9TWVNURU1fU1lTVEVNX0NPTlRST0w7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzFdLmluZGV4ID0KKwkJICAgIENQSUEyX1NZU1RFTV9TWVNURU1fQ09OVFJPTDsKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMF0udmFsdWUgPSBDUElBMl9TWVNURU1fQ09OVFJPTF9DTEVBUl9FUlI7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzFdLnZhbHVlID0KKwkJICAgIENQSUEyX1NZU1RFTV9DT05UUk9MX0hJR0hfUE9XRVI7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9MT1dfUE9XRVI6CisJCWNtZC5yZXFfbW9kZSA9CisJCSAgICBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19TWVNURU07CisJCWNtZC5yZWdfY291bnQgPSAxOworCQljbWQuc3RhcnQgPSBDUElBMl9TWVNURU1fU1lTVEVNX0NPTlRST0w7CisJCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IDA7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0NMRUFSX1YyV19FUlI6CisJCWNtZC5yZXFfbW9kZSA9CisJCSAgICBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19TWVNURU07CisJCWNtZC5yZWdfY291bnQgPSAxOworCQljbWQuc3RhcnQgPSBDUElBMl9TWVNURU1fU1lTVEVNX0NPTlRST0w7CisJCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IENQSUEyX1NZU1RFTV9DT05UUk9MX0NMRUFSX0VSUjsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfU0VUX1VTRVJfTU9ERTogICAvKiBUaGVuIGZhbGwgdGhyb3VnaCAqLworCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSBwYXJhbTsKKwljYXNlIENQSUEyX0NNRF9HRVRfVVNFUl9NT0RFOgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WUDsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWlmIChkZXZpY2UgPT0gREVWSUNFX1NUVl82NzIpCisJCQljbWQuc3RhcnQgPSBDUElBMl9WUDRfVVNFUl9NT0RFOworCQllbHNlCisJCQljbWQuc3RhcnQgPSBDUElBMl9WUDVfVVNFUl9NT0RFOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9GUkFNRVJBVEVfUkVROgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WUDsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWlmIChkZXZpY2UgPT0gREVWSUNFX1NUVl82NzIpCisJCQljbWQuc3RhcnQgPSBDUElBMl9WUDRfRlJBTUVSQVRFX1JFUVVFU1Q7CisJCWVsc2UKKwkJCWNtZC5zdGFydCA9IENQSUEyX1ZQNV9GUkFNRVJBVEVfUkVRVUVTVDsKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9XQUtFVVA6CisJCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IHBhcmFtOwkvKiBUaGVuIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ1BJQTJfQ01EX0dFVF9XQUtFVVA6CisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX0JMT0NLIHwgQ0FNRVJBQUNDRVNTX1ZDOworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfVkNfV0FLRVVQOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9TRVRfUFdfQ09OVFJPTDoKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CS8qIFRoZW4gZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUElBMl9DTURfR0VUX1BXX0NPTlRST0w6CisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX0JMT0NLIHwgQ0FNRVJBQUNDRVNTX1ZDOworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfVkNfUFdfQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1ZQX1NZU1RFTV9TVEFURToKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5yZWdfY291bnQgPSAxOworCQljbWQuc3RhcnQgPSBDUElBMl9WUF9TWVNURU1TVEFURTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfU0VUX1NZU1RFTV9DVFJMOgorCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSBwYXJhbTsJLyogVGhlbiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENQSUEyX0NNRF9HRVRfU1lTVEVNX0NUUkw6CisJCWNtZC5yZXFfbW9kZSA9CisJCSAgICBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19TWVNURU07CisJCWNtZC5yZWdfY291bnQgPSAxOworCQljbWQuc3RhcnQgPSBDUElBMl9TWVNURU1fU1lTVEVNX0NPTlRST0w7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9WUF9TWVNURU1fQ1RSTDoKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CS8qIFRoZW4gZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUElBMl9DTURfR0VUX1ZQX1NZU1RFTV9DVFJMOgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WUDsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWNtZC5zdGFydCA9IENQSUEyX1ZQX1NZU1RFTUNUUkw7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9WUF9FWFBfTU9ERVM6CisJCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IHBhcmFtOwkvKiBUaGVuIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ1BJQTJfQ01EX0dFVF9WUF9FWFBfTU9ERVM6CisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX0JMT0NLIHwgQ0FNRVJBQUNDRVNTX1ZQOworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfVlBfRVhQT1NVUkVfTU9ERVM7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9ERVZJQ0VfQ09ORklHOgorCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSBwYXJhbTsJLyogVGhlbiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENQSUEyX0NNRF9HRVRfREVWSUNFX0NPTkZJRzoKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5yZWdfY291bnQgPSAxOworCQljbWQuc3RhcnQgPSBDUElBMl9WUF9ERVZJQ0VfQ09ORklHOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9TRVRfU0VSSUFMX0FERFI6CisJCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IHBhcmFtOworCQljbWQucmVxX21vZGUgPQorCQkgICAgQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfU1lTVEVNOworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfU1lTVEVNX1ZQX1NFUklBTF9BRERSOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9TRVRfU0VOU09SX0NSMToKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gcGFyYW07CisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX0JMT0NLIHwgQ0FNRVJBQUNDRVNTX1ZQOworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfU0VOU09SX0NSMTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfU0VUX1ZDX0NPTlRST0w6CisJCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IHBhcmFtOwkvKiBUaGVuIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ1BJQTJfQ01EX0dFVF9WQ19DT05UUk9MOgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WQzsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWNtZC5zdGFydCA9IENQSUEyX1ZDX1ZDX0NUUkw7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX1NFVF9UQVJHRVRfS0I6CisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX1JBTkRPTSB8IENBTUVSQUFDQ0VTU19WQzsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzBdLmluZGV4ID0gQ1BJQTJfVkNfVkNfVEFSR0VUX0tCOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1swXS52YWx1ZSA9IHBhcmFtOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9TRVRfREVGX0pQRUdfT1BUOgorCQljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9SQU5ET00gfCBDQU1FUkFBQ0NFU1NfVkM7CisJCWNtZC5yZWdfY291bnQgPSA0OworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1swXS5pbmRleCA9IENQSUEyX1ZDX1ZDX0pQRUdfT1BUOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1swXS52YWx1ZSA9CisJCSAgICBDUElBMl9WQ19WQ19KUEVHX09QVF9ET1VCTEVfU1FVRUVaRTsKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMV0uaW5kZXggPSBDUElBMl9WQ19WQ19VU0VSX1NRVUVFWkU7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzFdLnZhbHVlID0gMjA7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzJdLmluZGV4ID0gQ1BJQTJfVkNfVkNfQ1JFRVBfUEVSSU9EOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1syXS52YWx1ZSA9IDI7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzNdLmluZGV4ID0gQ1BJQTJfVkNfVkNfSlBFR19PUFQ7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzNdLnZhbHVlID0gQ1BJQTJfVkNfVkNfSlBFR19PUFRfREVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfUkVIQVNIX1ZQNDoKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5yZWdfY291bnQgPSAxOworCQljbWQuc3RhcnQgPSBDUElBMl9WUF9SRUhBU0hfVkFMVUVTOworCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSBwYXJhbTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfU0VUX1VTRVJfRUZGRUNUUzogIC8qIE5vdGU6IEJlIGNhcmVmdWwgd2l0aCB0aGlzIGFzCisJCQkJCSAgICAgdGhpcyByZWdpc3RlciBjYW4gYWxzbyBhZmZlY3QKKwkJCQkJICAgICBmbGlja2VyIG1vZGVzICovCisJCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IHBhcmFtOyAgICAgIC8qIFRoZW4gZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUElBMl9DTURfR0VUX1VTRVJfRUZGRUNUUzoKKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVlA7CisJCWNtZC5yZWdfY291bnQgPSAxOworCQlpZiAoZGV2aWNlID09IERFVklDRV9TVFZfNjcyKQorCQkJY21kLnN0YXJ0ID0gQ1BJQTJfVlA0X1VTRVJfRUZGRUNUUzsKKwkJZWxzZQorCQkJY21kLnN0YXJ0ID0gQ1BJQTJfVlA1X1VTRVJfRUZGRUNUUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTE9HKCJEb0NvbW1hbmQgcmVjZWl2ZWQgaW52YWxpZCBjb21tYW5kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dmFsID0gY3BpYTJfc2VuZF9jb21tYW5kKGNhbSwgJmNtZCk7CisJaWYgKHJldHZhbCkgeworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qKioKKwkgKiBOb3cgY29weSBhbnkgcmVzdWx0cyBmcm9tIGEgcmVhZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBwYXJhbSBzdHJ1Y3QuCisJICoqKi8KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKKwljYXNlIENQSUEyX0NNRF9HRVRfVkVSU0lPTjoKKwkJY2FtLT5wYXJhbXMudmVyc2lvbi5maXJtd2FyZV9yZXZpc2lvbl9oaSA9CisJCSAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF07CisJCWNhbS0+cGFyYW1zLnZlcnNpb24uZmlybXdhcmVfcmV2aXNpb25fbG8gPQorCQkgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzFdOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfUE5QX0lEOgorCQljYW0tPnBhcmFtcy5wbnBfaWQudmVuZG9yID0gKGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA8PCA4KSB8CisJCQkJCSAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV07CisJCWNhbS0+cGFyYW1zLnBucF9pZC5wcm9kdWN0ID0gKGNtZC5idWZmZXIuYmxvY2tfZGF0YVsyXSA8PCA4KSB8CisJCQkJCSAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzNdOworCQljYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3JldmlzaW9uID0KKwkJCShjbWQuYnVmZmVyLmJsb2NrX2RhdGFbNF0gPDwgOCkgfAorCQkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzVdOworCQlpZiAoY2FtLT5wYXJhbXMucG5wX2lkLnZlbmRvciA9PSAweDU1MykgeworCQkJaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5wcm9kdWN0ID09IDB4MTAwKSB7CisJCQkJY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlID0gREVWSUNFX1NUVl82NzI7CisJCQl9IGVsc2UgaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5wcm9kdWN0ID09IDB4MTQwIHx8CisJCQkJICAgY2FtLT5wYXJhbXMucG5wX2lkLnByb2R1Y3QgPT0gMHgxNTEpIHsKKwkJCQljYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUgPSBERVZJQ0VfU1RWXzY3NjsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfQVNJQ19UWVBFOgorCQljYW0tPnBhcmFtcy52ZXJzaW9uLmFzaWNfaWQgPSBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF07CisJCWNhbS0+cGFyYW1zLnZlcnNpb24uYXNpY19yZXYgPSBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0dFVF9TRU5TT1I6CisJCWNhbS0+cGFyYW1zLnZlcnNpb24uc2Vuc29yX2ZsYWdzID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCQljYW0tPnBhcmFtcy52ZXJzaW9uLnNlbnNvcl9yZXYgPSBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0dFVF9WUF9ERVZJQ0U6CisJCWNhbS0+cGFyYW1zLnZlcnNpb24udnBfZGV2aWNlX2hpID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCQljYW0tPnBhcmFtcy52ZXJzaW9uLnZwX2RldmljZV9sbyA9IGNtZC5idWZmZXIuYmxvY2tfZGF0YVsxXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1ZQX0JSSUdIVE5FU1M6CisJCWNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5icmlnaHRuZXNzID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfQ09OVFJBU1Q6CisJCWNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5jb250cmFzdCA9IGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1ZQX1NBVFVSQVRJT046CisJCWNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5zYXR1cmF0aW9uID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfVlBfR1BJT19EQVRBOgorCQljYW0tPnBhcmFtcy52cF9wYXJhbXMuZ3Bpb19kYXRhID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfVlBfR1BJT19ESVJFQ1RJT046CisJCWNhbS0+cGFyYW1zLnZwX3BhcmFtcy5ncGlvX2RpcmVjdGlvbiA9IGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1ZDX01QX0dQSU9fRElSRUNUSU9OOgorCQljYW0tPnBhcmFtcy52Y19wYXJhbXMudmNfbXBfZGlyZWN0aW9uID1jbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0dFVF9WQ19NUF9HUElPX0RBVEE6CisJCWNhbS0+cGFyYW1zLnZjX3BhcmFtcy52Y19tcF9kYXRhID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfRkxJQ0tFUl9NT0RFUzoKKwkJY2FtLT5wYXJhbXMuZmxpY2tlcl9jb250cm9sLmNhbV9yZWdpc3RlciA9CisJCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0dFVF9XQUtFVVA6CisJCWNhbS0+cGFyYW1zLnZjX3BhcmFtcy53YWtldXAgPSBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0dFVF9QV19DT05UUk9MOgorCQljYW0tPnBhcmFtcy52Y19wYXJhbXMucHdfY29udHJvbCA9IGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1NZU1RFTV9DVFJMOgorCQljYW0tPnBhcmFtcy5jYW1lcmFfc3RhdGUuc3lzdGVtX2N0cmwgPSBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0dFVF9WUF9TWVNURU1fU1RBVEU6CisJCWNhbS0+cGFyYW1zLnZwX3BhcmFtcy5zeXN0ZW1fc3RhdGUgPSBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0dFVF9WUF9TWVNURU1fQ1RSTDoKKwkJY2FtLT5wYXJhbXMudnBfcGFyYW1zLnN5c3RlbV9jdHJsID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfVlBfRVhQX01PREVTOgorCQljYW0tPnBhcmFtcy52cF9wYXJhbXMuZXhwb3N1cmVfbW9kZXMgPSBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF07CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ01EX0dFVF9ERVZJQ0VfQ09ORklHOgorCQljYW0tPnBhcmFtcy52cF9wYXJhbXMuZGV2aWNlX2NvbmZpZyA9IGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1ZDX0NPTlRST0w6CisJCWNhbS0+cGFyYW1zLnZjX3BhcmFtcy52Y19jb250cm9sID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCQlicmVhazsKKwljYXNlIENQSUEyX0NNRF9HRVRfVVNFUl9NT0RFOgorCQljYW0tPnBhcmFtcy52cF9wYXJhbXMudmlkZW9fbW9kZSA9IGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DTURfR0VUX1VTRVJfRUZGRUNUUzoKKwkJY2FtLT5wYXJhbXMudnBfcGFyYW1zLnVzZXJfZWZmZWN0cyA9IGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfc2VuZF9jb21tYW5kCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGNwaWEyX3NlbmRfY29tbWFuZChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgc3RydWN0IGNwaWEyX2NvbW1hbmQgKmNtZCkKK3sKKwl1OCBjb3VudDsKKwl1OCBzdGFydDsKKwl1OCBibG9ja19pbmRleDsKKwl1OCAqYnVmZmVyOworCWludCByZXR2YWw7CisJY29uc3QgY2hhciogZGlyOworCisJaWYgKGNtZC0+ZGlyZWN0aW9uID09IFRSQU5TRkVSX1dSSVRFKSB7CisJCWRpciA9ICJXcml0ZSI7CisJfSBlbHNlIHsKKwkJZGlyID0gIlJlYWQiOworCX0KKworCWJsb2NrX2luZGV4ID0gY21kLT5yZXFfbW9kZSAmIDB4MDM7CisKKwlzd2l0Y2ggKGNtZC0+cmVxX21vZGUgJiAweDBjKSB7CisJY2FzZSBDQU1FUkFBQ0NFU1NfVFlQRV9SQU5ET006CisJCWNvdW50ID0gY21kLT5yZWdfY291bnQgKiBzaXplb2Yoc3RydWN0IGNwaWEyX3JlZ2lzdGVyKTsKKwkJc3RhcnQgPSAwOworCQlidWZmZXIgPSAodTggKikgJiBjbWQtPmJ1ZmZlcjsKKwkJaWYgKGRlYnVnc19vbiAmIERFQlVHX1JFRykKKwkJCURCRygiJXMgUmFuZG9tOiBSZWdpc3RlciBibG9jayAlc1xuIiwgZGlyLAorCQkJICAgIGJsb2NrX25hbWVbYmxvY2tfaW5kZXhdKTsKKwkJYnJlYWs7CisJY2FzZSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSzoKKwkJY291bnQgPSBjbWQtPnJlZ19jb3VudDsKKwkJc3RhcnQgPSBjbWQtPnN0YXJ0OworCQlidWZmZXIgPSBjbWQtPmJ1ZmZlci5ibG9ja19kYXRhOworCQlpZiAoZGVidWdzX29uICYgREVCVUdfUkVHKQorCQkJREJHKCIlcyBCbG9jazogUmVnaXN0ZXIgYmxvY2sgJXNcbiIsIGRpciwKKwkJCSAgICBibG9ja19uYW1lW2Jsb2NrX2luZGV4XSk7CisJCWJyZWFrOworCWNhc2UgQ0FNRVJBQUNDRVNTX1RZUEVfTUFTSzoKKwkJY291bnQgPSBjbWQtPnJlZ19jb3VudCAqIHNpemVvZihzdHJ1Y3QgY3BpYTJfcmVnX21hc2spOworCQlzdGFydCA9IDA7CisJCWJ1ZmZlciA9ICh1OCAqKSAmIGNtZC0+YnVmZmVyOworCQlpZiAoZGVidWdzX29uICYgREVCVUdfUkVHKQorCQkJREJHKCIlcyBNYXNrOiBSZWdpc3RlciBibG9jayAlc1xuIiwgZGlyLAorCQkJICAgIGJsb2NrX25hbWVbYmxvY2tfaW5kZXhdKTsKKwkJYnJlYWs7CisJY2FzZSBDQU1FUkFBQ0NFU1NfVFlQRV9SRVBFQVQ6CS8qIEZvciBwYXRjaCBibG9ja3Mgb25seSAqLworCQljb3VudCA9IGNtZC0+cmVnX2NvdW50OworCQlzdGFydCA9IGNtZC0+c3RhcnQ7CisJCWJ1ZmZlciA9IGNtZC0+YnVmZmVyLmJsb2NrX2RhdGE7CisJCWlmIChkZWJ1Z3Nfb24gJiBERUJVR19SRUcpCisJCQlEQkcoIiVzIFJlcGVhdDogUmVnaXN0ZXIgYmxvY2sgJXNcbiIsIGRpciwKKwkJCSAgICBibG9ja19uYW1lW2Jsb2NrX2luZGV4XSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUxPRygiJXM6IGludmFsaWQgcmVxdWVzdCBtb2RlXG4iLF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHZhbCA9IGNwaWEyX3VzYl90cmFuc2Zlcl9jbWQoY2FtLAorCQkJCQlidWZmZXIsCisJCQkJCWNtZC0+cmVxX21vZGUsCisJCQkJCXN0YXJ0LCBjb3VudCwgY21kLT5kaXJlY3Rpb24pOworI2lmZGVmIF9DUElBMl9ERUJVR18KKwlpZiAoZGVidWdzX29uICYgREVCVUdfUkVHKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5yZWdfY291bnQ7IGkrKykgeworCQkJaWYoKGNtZC0+cmVxX21vZGUgJiAweDBjKSA9PSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSykKKwkJCQlLSU5GTygiJXMgQmxvY2s6IFsweCUwMlhdID0gMHglMDJYXG4iLAorCQkJCSAgICBkaXIsIHN0YXJ0ICsgaSwgYnVmZmVyW2ldKTsKKwkJCWlmKChjbWQtPnJlcV9tb2RlICYgMHgwYykgPT0gQ0FNRVJBQUNDRVNTX1RZUEVfUkFORE9NKQorCQkJCUtJTkZPKCIlcyBSYW5kb206IFsweCUwMlhdID0gMHglMDJYXG4iLAorCQkJCSAgICBkaXIsIGNtZC0+YnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCwKKwkJCQkgICAgY21kLT5idWZmZXIucmVnaXN0ZXJzW2ldLnZhbHVlKTsKKwkJfQorCX0KKyNlbmRpZgorCisJcmV0dXJuIHJldHZhbDsKK307CisKKy8qKioqKioqKioqKioqCisgKiBGdW5jdGlvbnMgdG8gaW1wbGVtZW50IGNhbWVyYSBmdW5jdGlvbmFsaXR5CisgKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfZ2V0X3ZlcnNpb25faW5mbworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGNwaWEyX2dldF92ZXJzaW9uX2luZm8oc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVkVSU0lPTiwgVFJBTlNGRVJfUkVBRCwgMCk7CisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfUE5QX0lELCBUUkFOU0ZFUl9SRUFELCAwKTsKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9BU0lDX1RZUEUsIFRSQU5TRkVSX1JFQUQsIDApOworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX1NFTlNPUiwgVFJBTlNGRVJfUkVBRCwgMCk7CisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVlBfREVWSUNFLCBUUkFOU0ZFUl9SRUFELCAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9yZXNldF9jYW1lcmEKKyAqCisgKiAgQ2FsbGVkIGF0IGxlYXN0IGR1cmluZyB0aGUgb3BlbiBwcm9jZXNzLCBzZXRzIHVwIGluaXRpYWwgcGFyYW1zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGNwaWEyX3Jlc2V0X2NhbWVyYShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwl1OCB0bXBfcmVnOworCWludCByZXR2YWwgPSAwOworCWludCBpOworCXN0cnVjdCBjcGlhMl9jb21tYW5kIGNtZDsKKworCS8qKioKKwkgKiBWQyBzZXR1cAorCSAqKiovCisJcmV0dmFsID0gY29uZmlndXJlX3NlbnNvcihjYW0sCisJCQkJICBjYW0tPnBhcmFtcy5yb2kud2lkdGgsCisJCQkJICBjYW0tPnBhcmFtcy5yb2kuaGVpZ2h0KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlFUlIoIkNvdWxkbid0IGNvbmZpZ3VyZSBzZW5zb3IsIGVycm9yPSVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIENsZWFyIEZJRk8gYW5kIHJvdXRlL2VuYWJsZSBzdHJlYW0gYmxvY2sgKi8KKwljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9SQU5ET00gfCBDQU1FUkFBQ0NFU1NfVkM7CisJY21kLmRpcmVjdGlvbiA9IFRSQU5TRkVSX1dSSVRFOworCWNtZC5yZWdfY291bnQgPSAyOworCWNtZC5idWZmZXIucmVnaXN0ZXJzWzBdLmluZGV4ID0gQ1BJQTJfVkNfU1RfQ1RSTDsKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1swXS52YWx1ZSA9IENQSUEyX1ZDX1NUX0NUUkxfU1JDX1ZDIHwKKwkJQ1BJQTJfVkNfU1RfQ1RSTF9EU1RfVVNCIHwgQ1BJQTJfVkNfU1RfQ1RSTF9FT0ZfREVURUNUOworCWNtZC5idWZmZXIucmVnaXN0ZXJzWzFdLmluZGV4ID0gQ1BJQTJfVkNfU1RfQ1RSTDsKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1sxXS52YWx1ZSA9IENQSUEyX1ZDX1NUX0NUUkxfU1JDX1ZDIHwKKwkJQ1BJQTJfVkNfU1RfQ1RSTF9EU1RfVVNCIHwKKwkJQ1BJQTJfVkNfU1RfQ1RSTF9FT0ZfREVURUNUIHwgQ1BJQTJfVkNfU1RfQ1RSTF9GSUZPX0VOQUJMRTsKKworCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCisJY3BpYTJfc2V0X2hpZ2hfcG93ZXIoY2FtKTsKKworCWlmIChjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUgPT0gREVWSUNFX1NUVl82NzIpIHsKKwkJLyogRW5hYmxlIGJ1dHRvbiBub3RpZmljYXRpb24gKi8KKwkJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfUkFORE9NIHwgQ0FNRVJBQUNDRVNTX1NZU1RFTTsKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMF0uaW5kZXggPSBDUElBMl9TWVNURU1fSU5UX1BBQ0tFVF9DVFJMOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1swXS52YWx1ZSA9CisJCQlDUElBMl9TWVNURU1fSU5UX1BBQ0tFVF9DVFJMX0VOQUJMRV9TV19YWDsKKwkJY21kLnJlZ19jb3VudCA9IDE7CisJCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCX0KKworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCXNjaGVkdWxlX3RpbWVvdXQoMTAwICogSFogLyAxMDAwKTsJLyogd2FpdCBmb3IgMTAwIG1zZWNzICovCisKKwlpZiAoY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlID09IERFVklDRV9TVFZfNjcyKQorCQlyZXR2YWwgPSBhcHBseV92cF9wYXRjaChjYW0pOworCisJLyogd2FpdCBmb3IgdnAgdG8gZ28gdG8gc2xlZXAgKi8KKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwlzY2hlZHVsZV90aW1lb3V0KDEwMCAqIEhaIC8gMTAwMCk7CS8qIHdhaXQgZm9yIDEwMCBtc2VjcyAqLworCisJLyoqKgorCSAqIElmIHRoaXMgaXMgYSA2NzYsIGFwcGx5IFZQNSBmaXhlcyBiZWZvcmUgd2Ugc3RhcnQgc3RyZWFtaW5nCisJICoqKi8KKwlpZiAoY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlID09IERFVklDRV9TVFZfNjc2KSB7CisJCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX1JBTkRPTSB8IENBTUVSQUFDQ0VTU19WUDsKKworCQkvKiBUaGUgZm9sbG93aW5nIHdyaXRlcyBpbXByb3ZlIHRoZSBwaWN0dXJlICovCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzBdLmluZGV4ID0gQ1BJQTJfVlA1X01ZQkxBQ0tfTEVWRUw7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzBdLnZhbHVlID0gMDsgLyogcmVkdWNlIGZyb20gdGhlIGRlZmF1bHQKKwkJCQkJCSAgICAqIHJlYyA2MDEgcGVkZXN0YWwgb2YgMTYgKi8KKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMV0uaW5kZXggPSBDUElBMl9WUDVfTUNZUkFOR0U7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzFdLnZhbHVlID0gMHg5MjsgLyogaW5jcmVhc2UgZnJvbSAxMDAlIHRvCisJCQkJCQkgICAgICAgKiAoMjU2LzI1NiAtIDMxKSB0byBmaWxsCisJCQkJCQkgICAgICAgKiBhdmFpbGFibGUgcmFuZ2UgKi8KKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMl0uaW5kZXggPSBDUElBMl9WUDVfTVlDRUlMSU5HOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1syXS52YWx1ZSA9IDB4RkY7IC8qIEluY3JlYXNlIGZyb20gdGhlCisJCQkJCQkgICAgICAgKiBkZWZhdWx0IHJlYyA2MDEgY2VpbGluZworCQkJCQkJICAgICAgICogb2YgMjQwICovCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzNdLmluZGV4ID0gQ1BJQTJfVlA1X01DVVZTQVRVUkFUSU9OOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1szXS52YWx1ZSA9IDB4RkY7IC8qIEluY3JlYXNlIGZyb20gdGhlIHJlYworCQkJCQkJICAgICAgICogNjAxIDEwMCUgbGV2ZWwgKDEyOCkKKwkJCQkJCSAgICAgICAqIHRvIDE0NS0xOTIgKi8KKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbNF0uaW5kZXggPSBDUElBMl9WUDVfQU5USUZMS1JTRVRVUDsKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbNF0udmFsdWUgPSAweDgwOyAgLyogSW5oaWJpdCB0aGUKKwkJCQkJCQkqIGFudGktZmxpY2tlciAqLworCisJCS8qIFRoZSBmb2xsb3dpbmcgNCB3cml0ZXMgYXJlIGEgZml4IHRvIGFsbG93IFFWR0EgdG8gd29yayBhdCAzMCBmcHMgKi8KKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbNV0uaW5kZXggPSBDUElBMl9WUF9SQU1fQUREUl9IOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1s1XS52YWx1ZSA9IDB4MDE7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzZdLmluZGV4ID0gQ1BJQTJfVlBfUkFNX0FERFJfTDsKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbNl0udmFsdWUgPSAweEUzOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1s3XS5pbmRleCA9IENQSUEyX1ZQX1JBTV9EQVRBOworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1s3XS52YWx1ZSA9IDB4MDI7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzhdLmluZGV4ID0gQ1BJQTJfVlBfUkFNX0RBVEE7CisJCWNtZC5idWZmZXIucmVnaXN0ZXJzWzhdLnZhbHVlID0gMHhGQzsKKworCQljbWQuZGlyZWN0aW9uID0gVFJBTlNGRVJfV1JJVEU7CisJCWNtZC5yZWdfY291bnQgPSA5OworCisJCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCX0KKworCS8qIEFjdGl2YXRlIGFsbCBzZXR0aW5ncyBhbmQgc3RhcnQgdGhlIGRhdGEgc3RyZWFtICovCisJLyogU2V0IHVzZXIgbW9kZSAqLworCXNldF9kZWZhdWx0X3VzZXJfbW9kZShjYW0pOworCisJLyogR2l2ZSBWUCB0aW1lIHRvIHdha2UgdXAgKi8KKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwlzY2hlZHVsZV90aW1lb3V0KDEwMCAqIEhaIC8gMTAwMCk7CS8qIHdhaXQgZm9yIDEwMCBtc2VjcyAqLworCisJc2V0X2FsbF9wcm9wZXJ0aWVzKGNhbSk7CisKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9VU0VSX01PREUsIFRSQU5TRkVSX1JFQUQsIDApOworCURCRygiQWZ0ZXIgU2V0QWxsUHJvcGVydGllcyhjYW0pLCB1c2VyIG1vZGUgaXMgMHglMFhcbiIsCisJICAgIGNhbS0+cGFyYW1zLnZwX3BhcmFtcy52aWRlb19tb2RlKTsKKworCS8qKioKKwkgKiBTZXQgYXVkaW8gcmVndWxhdG9yIG9mZi4gIFRoaXMgYW5kIHRoZSBjb2RlIHRvIHNldCB0aGUgY29tcHJlc2lzb24KKwkgKiBzdGF0ZSBhcmUgdG9vIGNvbXBsZXggdG8gZm9ybSBhIENQSUEyX0NNRF8sIGFuZCBzZWVtIHRvIGJlIHNvbWV3aGF0CisJICogaW50ZXJ0d2luZWQuICBUaGlzIHN0dWZmIGNhbWUgc3RyYWlnaHQgZnJvbSB0aGUgd2luZG93cyBkcml2ZXIuCisJICoqKi8KKwkvKiBUdXJuIEF1dG9FeHBvc3VyZSBvZmYgaW4gVlAgYW5kIGVuYWJsZSB0aGUgc2VyaWFsIGJyaWRnZSB0byB0aGUgc2Vuc29yICovCisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVlBfU1lTVEVNX0NUUkwsIFRSQU5TRkVSX1JFQUQsIDApOworCXRtcF9yZWcgPSBjYW0tPnBhcmFtcy52cF9wYXJhbXMuc3lzdGVtX2N0cmw7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMF0udmFsdWUgPSB0bXBfcmVnICYKKwkJKHRtcF9yZWcgJiAoQ1BJQTJfVlBfU1lTVEVNQ1RSTF9IS19DT05UUk9MIF4gMHhGRikpOworCisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfREVWSUNFX0NPTkZJRywgVFJBTlNGRVJfUkVBRCwgMCk7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMV0udmFsdWUgPSBjYW0tPnBhcmFtcy52cF9wYXJhbXMuZGV2aWNlX2NvbmZpZyB8CisJCQkJCUNQSUEyX1ZQX0RFVklDRV9DT05GSUdfU0VSSUFMX0JSSURHRTsKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1swXS5pbmRleCA9IENQSUEyX1ZQX1NZU1RFTUNUUkw7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMV0uaW5kZXggPSBDUElBMl9WUF9ERVZJQ0VfQ09ORklHOworCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX1JBTkRPTSB8IENBTUVSQUFDQ0VTU19WUDsKKwljbWQucmVnX2NvdW50ID0gMjsKKwljbWQuZGlyZWN0aW9uID0gVFJBTlNGRVJfV1JJVEU7CisJY21kLnN0YXJ0ID0gMDsKKwljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKworCS8qIFNldCB0aGUgY29ycmVjdCBJMkMgYWRkcmVzcyBpbiB0aGUgQ1BpQS0yIHN5c3RlbSByZWdpc3RlciAqLworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLAorCQkJIENQSUEyX0NNRF9TRVRfU0VSSUFMX0FERFIsCisJCQkgVFJBTlNGRVJfV1JJVEUsCisJCQkgQ1BJQTJfU1lTVEVNX1ZQX1NFUklBTF9BRERSX1NFTlNPUik7CisKKwkvKiBOb3cgaGF2ZSBzZW5zb3IgYWNjZXNzIC0gc2V0IGJpdCB0byB0dXJuIHRoZSBhdWRpbyByZWd1bGF0b3Igb2ZmICovCisJY3BpYTJfZG9fY29tbWFuZChjYW0sCisJCQkgQ1BJQTJfQ01EX1NFVF9TRU5TT1JfQ1IxLAorCQkJIFRSQU5TRkVSX1dSSVRFLCBDUElBMl9TRU5TT1JfQ1IxX0RPV05fQVVESU9fUkVHVUxBVE9SKTsKKworCS8qIFNldCB0aGUgY29ycmVjdCBJMkMgYWRkcmVzcyBpbiB0aGUgQ1BpQS0yIHN5c3RlbSByZWdpc3RlciAqLworCWlmIChjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUgPT0gREVWSUNFX1NUVl82NzIpCisJCWNwaWEyX2RvX2NvbW1hbmQoY2FtLAorCQkJCSBDUElBMl9DTURfU0VUX1NFUklBTF9BRERSLAorCQkJCSBUUkFOU0ZFUl9XUklURSwKKwkJCQkgQ1BJQTJfU1lTVEVNX1ZQX1NFUklBTF9BRERSX1ZQKTsgLy8gMHg4OAorCWVsc2UKKwkJY3BpYTJfZG9fY29tbWFuZChjYW0sCisJCQkJIENQSUEyX0NNRF9TRVRfU0VSSUFMX0FERFIsCisJCQkJIFRSQU5TRkVSX1dSSVRFLAorCQkJCSBDUElBMl9TWVNURU1fVlBfU0VSSUFMX0FERFJfNjc2X1ZQKTsgLy8gMHg4YQorCisJLyogaW5jcmVhc2Ugc2lnbmFsIGRyaXZlIHN0cmVuZ3RoICovCisJaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfU1RWXzY3NikKKwkJY3BpYTJfZG9fY29tbWFuZChjYW0sCisJCQkJIENQSUEyX0NNRF9TRVRfVlBfRVhQX01PREVTLAorCQkJCSBUUkFOU0ZFUl9XUklURSwKKwkJCQkgQ1BJQTJfVlBfRVhQT1NVUkVfTU9ERVNfQ09NUElMRV9FWFApOworCisJLyogU3RhcnQgYXV0b2V4cG9zdXJlICovCisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfREVWSUNFX0NPTkZJRywgVFJBTlNGRVJfUkVBRCwgMCk7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMF0udmFsdWUgPSBjYW0tPnBhcmFtcy52cF9wYXJhbXMuZGV2aWNlX2NvbmZpZyAmCisJCQkJICAoQ1BJQTJfVlBfREVWSUNFX0NPTkZJR19TRVJJQUxfQlJJREdFIF4gMHhGRik7CisKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9WUF9TWVNURU1fQ1RSTCwgVFJBTlNGRVJfUkVBRCwgMCk7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMV0udmFsdWUgPQorCSAgICBjYW0tPnBhcmFtcy52cF9wYXJhbXMuc3lzdGVtX2N0cmwgfCBDUElBMl9WUF9TWVNURU1DVFJMX0hLX0NPTlRST0w7CisKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1swXS5pbmRleCA9IENQSUEyX1ZQX0RFVklDRV9DT05GSUc7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbMV0uaW5kZXggPSBDUElBMl9WUF9TWVNURU1DVFJMOworCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX1JBTkRPTSB8IENBTUVSQUFDQ0VTU19WUDsKKwljbWQucmVnX2NvdW50ID0gMjsKKwljbWQuZGlyZWN0aW9uID0gVFJBTlNGRVJfV1JJVEU7CisKKwljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKworCS8qIFNldCBjb21wcmVzc2lvbiBzdGF0ZSAqLworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX1ZDX0NPTlRST0wsIFRSQU5TRkVSX1JFQUQsIDApOworCWlmIChjYW0tPnBhcmFtcy5jb21wcmVzc2lvbi5pbmhpYml0X2h0YWJsZXMpIHsKKwkJdG1wX3JlZyA9IGNhbS0+cGFyYW1zLnZjX3BhcmFtcy52Y19jb250cm9sIHwKKwkJCSAgQ1BJQTJfVkNfVkNfQ1RSTF9JTkhJQklUX0hfVEFCTEVTOworCX0gZWxzZSAgeworCQl0bXBfcmVnID0gY2FtLT5wYXJhbXMudmNfcGFyYW1zLnZjX2NvbnRyb2wgJgorCQkJICB+Q1BJQTJfVkNfVkNfQ1RSTF9JTkhJQklUX0hfVEFCTEVTOworCX0KKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX1NFVF9WQ19DT05UUk9MLCBUUkFOU0ZFUl9XUklURSx0bXBfcmVnKTsKKworCS8qIFNldCB0YXJnZXQgc2l6ZSAoa2IpIG9uIHZjICovCisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9TRVRfVEFSR0VUX0tCLAorCQkJIFRSQU5TRkVSX1dSSVRFLCBjYW0tPnBhcmFtcy52Y19wYXJhbXMudGFyZ2V0X2tiKTsKKworCS8qIFdpZ2dsZSBWQyBSZXNldCAqLworCS8qKioKKwkgKiBGaXJzdCByZWFkIGFuZCB3YWl0IGEgYml0LgorCSAqKiovCisJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKKwkJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfUFdfQ09OVFJPTCwKKwkJCQkgVFJBTlNGRVJfUkVBRCwgMCk7CisJfQorCisJdG1wX3JlZyA9IGNhbS0+cGFyYW1zLnZjX3BhcmFtcy5wd19jb250cm9sOworCXRtcF9yZWcgJj0gfkNQSUEyX1ZDX1BXX0NUUkxfVkNfUkVTRVRfTjsKKworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfU0VUX1BXX0NPTlRST0wsIFRSQU5TRkVSX1dSSVRFLHRtcF9yZWcpOworCisJdG1wX3JlZyB8PSBDUElBMl9WQ19QV19DVFJMX1ZDX1JFU0VUX047CisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9TRVRfUFdfQ09OVFJPTCwgVFJBTlNGRVJfV1JJVEUsdG1wX3JlZyk7CisKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX1NFVF9ERUZfSlBFR19PUFQsIFRSQU5TRkVSX1dSSVRFLCAwKTsKKworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX1VTRVJfTU9ERSwgVFJBTlNGRVJfUkVBRCwgMCk7CisJREJHKCJBZnRlciBWQyBSRVNFVCwgdXNlciBtb2RlIGlzIDB4JTBYXG4iLAorCSAgICBjYW0tPnBhcmFtcy52cF9wYXJhbXMudmlkZW9fbW9kZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3NldF9oaWdoX3Bvd2VyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjcGlhMl9zZXRfaGlnaF9wb3dlcihzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDw9IDUwOyBpKyspIHsKKwkJLyogUmVhZCBzeXN0ZW0gc3RhdHVzICovCisJCWNwaWEyX2RvX2NvbW1hbmQoY2FtLENQSUEyX0NNRF9HRVRfU1lTVEVNX0NUUkwsVFJBTlNGRVJfUkVBRCwwKTsKKworCQkvKiBJZiB0aGVyZSBpcyBhbiBlcnJvciwgY2xlYXIgaXQgKi8KKwkJaWYoY2FtLT5wYXJhbXMuY2FtZXJhX3N0YXRlLnN5c3RlbV9jdHJsICYKKwkJICAgQ1BJQTJfU1lTVEVNX0NPTlRST0xfVjJXX0VSUikKKwkJCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfQ0xFQVJfVjJXX0VSUiwKKwkJCQkJIFRSQU5TRkVSX1dSSVRFLCAwKTsKKworCQkvKiBUcnkgdG8gc2V0IGhpZ2ggcG93ZXIgbW9kZSAqLworCQljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX1NFVF9TWVNURU1fQ1RSTCwKKwkJCQkgVFJBTlNGRVJfV1JJVEUsIDEpOworCisJCS8qIFRyeSB0byByZWFkIHNvbWV0aGluZyBpbiBWUCB0byBjaGVjayBpZiBldmVyeXRoaW5nIGlzIGF3YWtlICovCisJCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX1ZQX1NZU1RFTV9TVEFURSwKKwkJCQkgVFJBTlNGRVJfUkVBRCwgMCk7CisJCWlmIChjYW0tPnBhcmFtcy52cF9wYXJhbXMuc3lzdGVtX3N0YXRlICYKKwkJICAgIENQSUEyX1ZQX1NZU1RFTVNUQVRFX0hLX0FMSVZFKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpID09IDUwKSB7CisJCQljYW0tPnBhcmFtcy5jYW1lcmFfc3RhdGUucG93ZXJfbW9kZSA9IExPX1BPV0VSX01PREU7CisJCQlFUlIoIkNhbWVyYSBkaWQgbm90IHdha2UgdXBcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlEQkcoIlN5c3RlbSBub3cgaW4gaGlnaCBwb3dlciBzdGF0ZVxuIik7CisJY2FtLT5wYXJhbXMuY2FtZXJhX3N0YXRlLnBvd2VyX21vZGUgPSBISV9QT1dFUl9NT0RFOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3NldF9sb3dfcG93ZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY3BpYTJfc2V0X2xvd19wb3dlcihzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwljYW0tPnBhcmFtcy5jYW1lcmFfc3RhdGUucG93ZXJfbW9kZSA9IExPX1BPV0VSX01PREU7CisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9TRVRfU1lTVEVNX0NUUkwsIFRSQU5TRkVSX1dSSVRFLCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBhcHBseV92cF9wYXRjaAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgYXBwbHlfdnBfcGF0Y2goc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJaW50IGksIGo7CisJc3RydWN0IGNwaWEyX2NvbW1hbmQgY21kOworCisJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfUkVQRUFUIHwgQ0FNRVJBQUNDRVNTX1ZQOworCWNtZC5kaXJlY3Rpb24gPSBUUkFOU0ZFUl9XUklURTsKKworCWZvciAoaSA9IDA7IGkgPCBQQVRDSF9EQVRBX1NJWkU7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgcGF0Y2hfZGF0YVtpXS5jb3VudDsgaisrKSB7CisJCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbal0gPSBwYXRjaF9kYXRhW2ldLmRhdGFbal07CisJCX0KKworCQljbWQuc3RhcnQgPSBwYXRjaF9kYXRhW2ldLnJlZzsKKwkJY21kLnJlZ19jb3VudCA9IHBhdGNoX2RhdGFbaV0uY291bnQ7CisJCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIHNldF9kZWZhdWx0X3VzZXJfbW9kZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2V0X2RlZmF1bHRfdXNlcl9tb2RlKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXVuc2lnbmVkIGNoYXIgdXNlcl9tb2RlOworCXVuc2lnbmVkIGNoYXIgZnJhbWVfcmF0ZTsKKwlpbnQgd2lkdGggPSBjYW0tPnBhcmFtcy5yb2kud2lkdGg7CisJaW50IGhlaWdodCA9IGNhbS0+cGFyYW1zLnJvaS5oZWlnaHQ7CisKKwlzd2l0Y2ggKGNhbS0+cGFyYW1zLnZlcnNpb24uc2Vuc29yX2ZsYWdzKSB7CisJY2FzZSBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNDA0OgorCWNhc2UgQ1BJQTJfVlBfU0VOU09SX0ZMQUdTXzQwNzoKKwljYXNlIENQSUEyX1ZQX1NFTlNPUl9GTEFHU180MDk6CisJY2FzZSBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNDEwOgorCQlpZiAoKHdpZHRoID4gU1RWX0lNQUdFX1FDSUZfQ09MUykKKwkJICAgIHx8IChoZWlnaHQgPiBTVFZfSU1BR0VfUUNJRl9ST1dTKSkgeworCQkJdXNlcl9tb2RlID0gQ1BJQTJfVlBfVVNFUl9NT0RFX0NJRjsKKwkJfSBlbHNlIHsKKwkJCXVzZXJfbW9kZSA9IENQSUEyX1ZQX1VTRVJfTU9ERV9RQ0lGRFM7CisJCX0KKwkJZnJhbWVfcmF0ZSA9IENQSUEyX1ZQX0ZSQU1FUkFURV8zMDsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNTAwOgorCQlpZiAoKHdpZHRoID4gU1RWX0lNQUdFX0NJRl9DT0xTKQorCQkgICAgfHwgKGhlaWdodCA+IFNUVl9JTUFHRV9DSUZfUk9XUykpIHsKKwkJCXVzZXJfbW9kZSA9IENQSUEyX1ZQX1VTRVJfTU9ERV9WR0E7CisJCX0gZWxzZSB7CisJCQl1c2VyX21vZGUgPSBDUElBMl9WUF9VU0VSX01PREVfUVZHQURTOworCQl9CisJCWlmIChjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUgPT0gREVWSUNFX1NUVl82NzIpCisJCQlmcmFtZV9yYXRlID0gQ1BJQTJfVlBfRlJBTUVSQVRFXzE1OworCQllbHNlCisJCQlmcmFtZV9yYXRlID0gQ1BJQTJfVlBfRlJBTUVSQVRFXzMwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlMT0coIiVzOiBJbnZhbGlkIHNlbnNvciBmbGFnIHZhbHVlIDB4JTBYXG4iLF9fRlVOQ1RJT05fXywKKwkJICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uc2Vuc29yX2ZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREJHKCJTZW5zb3IgZmxhZyA9IDB4JTB4LCB1c2VyIG1vZGUgPSAweCUweCwgZnJhbWUgcmF0ZSA9IDB4JVhcbiIsCisJICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uc2Vuc29yX2ZsYWdzLCB1c2VyX21vZGUsIGZyYW1lX3JhdGUpOworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfU0VUX1VTRVJfTU9ERSwgVFJBTlNGRVJfV1JJVEUsCisJCQkgdXNlcl9tb2RlKTsKKwlpZihjYW0tPnBhcmFtcy52cF9wYXJhbXMuZnJhbWVfcmF0ZSA+IDAgJiYKKwkgICBmcmFtZV9yYXRlID4gY2FtLT5wYXJhbXMudnBfcGFyYW1zLmZyYW1lX3JhdGUpCisJCWZyYW1lX3JhdGUgPSBjYW0tPnBhcmFtcy52cF9wYXJhbXMuZnJhbWVfcmF0ZTsKKworCWNwaWEyX3NldF9mcHMoY2FtLCBmcmFtZV9yYXRlKTsKKworLy8JaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfU1RWXzY3NikKKy8vCQljcGlhMl9kb19jb21tYW5kKGNhbSwKKy8vCQkJCSBDUElBMl9DTURfU0VUX1ZQX1NZU1RFTV9DVFJMLAorLy8JCQkJIFRSQU5TRkVSX1dSSVRFLAorLy8JCQkJIENQSUEyX1ZQX1NZU1RFTUNUUkxfSEtfQ09OVFJPTCB8CisvLwkJCQkgQ1BJQTJfVlBfU1lTVEVNQ1RSTF9QT1dFUl9DT05UUk9MKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX21hdGNoX3ZpZGVvX3NpemUKKyAqCisgKiAgcmV0dXJuIHRoZSBiZXN0IG1hdGNoLCB3aGVyZSAnYmVzdCcgaXMgYXMgYWx3YXlzCisgKiAgdGhlIGxhcmdlc3QgdGhhdCBpcyBub3QgYmlnZ2VyIHRoYW4gd2hhdCBpcyByZXF1ZXN0ZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY3BpYTJfbWF0Y2hfdmlkZW9fc2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJaWYgKHdpZHRoID49IFNUVl9JTUFHRV9WR0FfQ09MUyAmJiBoZWlnaHQgPj0gU1RWX0lNQUdFX1ZHQV9ST1dTKQorCQlyZXR1cm4gVklERU9TSVpFX1ZHQTsKKworCWlmICh3aWR0aCA+PSBTVFZfSU1BR0VfQ0lGX0NPTFMgJiYgaGVpZ2h0ID49IFNUVl9JTUFHRV9DSUZfUk9XUykKKwkJcmV0dXJuIFZJREVPU0laRV9DSUY7CisKKwlpZiAod2lkdGggPj0gU1RWX0lNQUdFX1FWR0FfQ09MUyAmJiBoZWlnaHQgPj0gU1RWX0lNQUdFX1FWR0FfUk9XUykKKwkJcmV0dXJuIFZJREVPU0laRV9RVkdBOworCisJaWYgKHdpZHRoID49IDI4OCAmJiBoZWlnaHQgPj0gMjE2KQorCQlyZXR1cm4gVklERU9TSVpFXzI4OF8yMTY7CisKKwlpZiAod2lkdGggPj0gMjU2ICYmIGhlaWdodCA+PSAxOTIpCisJCXJldHVybiBWSURFT1NJWkVfMjU2XzE5MjsKKworCWlmICh3aWR0aCA+PSAyMjQgJiYgaGVpZ2h0ID49IDE2OCkKKwkJcmV0dXJuIFZJREVPU0laRV8yMjRfMTY4OworCisJaWYgKHdpZHRoID49IDE5MiAmJiBoZWlnaHQgPj0gMTQ0KQorCQlyZXR1cm4gVklERU9TSVpFXzE5Ml8xNDQ7CisKKwlpZiAod2lkdGggPj0gU1RWX0lNQUdFX1FDSUZfQ09MUyAmJiBoZWlnaHQgPj0gU1RWX0lNQUdFX1FDSUZfUk9XUykKKwkJcmV0dXJuIFZJREVPU0laRV9RQ0lGOworCisJcmV0dXJuIC0xOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIFNldFZpZGVvU2l6ZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2V0X3Z3X3NpemUoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIGludCBzaXplKQoreworCWludCByZXR2YWwgPSAwOworCisJY2FtLT5wYXJhbXMudnBfcGFyYW1zLnZpZGVvX3NpemUgPSBzaXplOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSBWSURFT1NJWkVfVkdBOgorCQlEQkcoIlNldHRpbmcgc2l6ZSB0byBWR0FcbiIpOworCQljYW0tPnBhcmFtcy5yb2kud2lkdGggPSBTVFZfSU1BR0VfVkdBX0NPTFM7CisJCWNhbS0+cGFyYW1zLnJvaS5oZWlnaHQgPSBTVFZfSU1BR0VfVkdBX1JPV1M7CisJCWNhbS0+dncud2lkdGggPSBTVFZfSU1BR0VfVkdBX0NPTFM7CisJCWNhbS0+dncuaGVpZ2h0ID0gU1RWX0lNQUdFX1ZHQV9ST1dTOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV9DSUY6CisJCURCRygiU2V0dGluZyBzaXplIHRvIENJRlxuIik7CisJCWNhbS0+cGFyYW1zLnJvaS53aWR0aCA9IFNUVl9JTUFHRV9DSUZfQ09MUzsKKwkJY2FtLT5wYXJhbXMucm9pLmhlaWdodCA9IFNUVl9JTUFHRV9DSUZfUk9XUzsKKwkJY2FtLT52dy53aWR0aCA9IFNUVl9JTUFHRV9DSUZfQ09MUzsKKwkJY2FtLT52dy5oZWlnaHQgPSBTVFZfSU1BR0VfQ0lGX1JPV1M7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFX1FWR0E6CisJCURCRygiU2V0dGluZyBzaXplIHRvIFFWR0FcbiIpOworCQljYW0tPnBhcmFtcy5yb2kud2lkdGggPSBTVFZfSU1BR0VfUVZHQV9DT0xTOworCQljYW0tPnBhcmFtcy5yb2kuaGVpZ2h0ID0gU1RWX0lNQUdFX1FWR0FfUk9XUzsKKwkJY2FtLT52dy53aWR0aCA9IFNUVl9JTUFHRV9RVkdBX0NPTFM7CisJCWNhbS0+dncuaGVpZ2h0ID0gU1RWX0lNQUdFX1FWR0FfUk9XUzsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMjg4XzIxNjoKKwkJY2FtLT5wYXJhbXMucm9pLndpZHRoID0gMjg4OworCQljYW0tPnBhcmFtcy5yb2kuaGVpZ2h0ID0gMjE2OworCQljYW0tPnZ3LndpZHRoID0gMjg4OworCQljYW0tPnZ3LmhlaWdodCA9IDIxNjsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMjU2XzE5MjoKKwkJY2FtLT52dy53aWR0aCA9IDI1NjsKKwkJY2FtLT52dy5oZWlnaHQgPSAxOTI7CisJCWNhbS0+cGFyYW1zLnJvaS53aWR0aCA9IDI1NjsKKwkJY2FtLT5wYXJhbXMucm9pLmhlaWdodCA9IDE5MjsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMjI0XzE2ODoKKwkJY2FtLT52dy53aWR0aCA9IDIyNDsKKwkJY2FtLT52dy5oZWlnaHQgPSAxNjg7CisJCWNhbS0+cGFyYW1zLnJvaS53aWR0aCA9IDIyNDsKKwkJY2FtLT5wYXJhbXMucm9pLmhlaWdodCA9IDE2ODsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMTkyXzE0NDoKKwkJY2FtLT52dy53aWR0aCA9IDE5MjsKKwkJY2FtLT52dy5oZWlnaHQgPSAxNDQ7CisJCWNhbS0+cGFyYW1zLnJvaS53aWR0aCA9IDE5MjsKKwkJY2FtLT5wYXJhbXMucm9pLmhlaWdodCA9IDE0NDsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfUUNJRjoKKwkJREJHKCJTZXR0aW5nIHNpemUgdG8gUUNJRlxuIik7CisJCWNhbS0+cGFyYW1zLnJvaS53aWR0aCA9IFNUVl9JTUFHRV9RQ0lGX0NPTFM7CisJCWNhbS0+cGFyYW1zLnJvaS5oZWlnaHQgPSBTVFZfSU1BR0VfUUNJRl9ST1dTOworCQljYW0tPnZ3LndpZHRoID0gU1RWX0lNQUdFX1FDSUZfQ09MUzsKKwkJY2FtLT52dy5oZWlnaHQgPSBTVFZfSU1BR0VfUUNJRl9ST1dTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNvbmZpZ3VyZV9zZW5zb3IKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGNvbmZpZ3VyZV9zZW5zb3Ioc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sCisJCQkgICAgaW50IHJlcV93aWR0aCwgaW50IHJlcV9oZWlnaHQpCit7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAoY2FtLT5wYXJhbXMudmVyc2lvbi5zZW5zb3JfZmxhZ3MpIHsKKwljYXNlIENQSUEyX1ZQX1NFTlNPUl9GTEFHU180MDQ6CisJY2FzZSBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNDA3OgorCWNhc2UgQ1BJQTJfVlBfU0VOU09SX0ZMQUdTXzQwOToKKwljYXNlIENQSUEyX1ZQX1NFTlNPUl9GTEFHU180MTA6CisJCXJldHZhbCA9IGNvbmZpZ19zZW5zb3JfNDEwKGNhbSwgcmVxX3dpZHRoLCByZXFfaGVpZ2h0KTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNTAwOgorCQlyZXR2YWwgPSBjb25maWdfc2Vuc29yXzUwMChjYW0sIHJlcV93aWR0aCwgcmVxX2hlaWdodCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY29uZmlnX3NlbnNvcl80MTAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGNvbmZpZ19zZW5zb3JfNDEwKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLAorCQkJICAgIGludCByZXFfd2lkdGgsIGludCByZXFfaGVpZ2h0KQoreworCXN0cnVjdCBjcGlhMl9jb21tYW5kIGNtZDsKKwlpbnQgaSA9IDA7CisJaW50IGltYWdlX3NpemU7CisJaW50IGltYWdlX3R5cGU7CisJaW50IHdpZHRoID0gcmVxX3dpZHRoOworCWludCBoZWlnaHQgPSByZXFfaGVpZ2h0OworCisJLyoqKgorCSAqICBNYWtlIHN1cmUgc2l6ZSBkb2Vzbid0IGV4Y2VlZCBDSUYuCisJICoqKi8KKwlpZiAod2lkdGggPiBTVFZfSU1BR0VfQ0lGX0NPTFMpCisJCXdpZHRoID0gU1RWX0lNQUdFX0NJRl9DT0xTOworCWlmIChoZWlnaHQgPiBTVFZfSU1BR0VfQ0lGX1JPV1MpCisJCWhlaWdodCA9IFNUVl9JTUFHRV9DSUZfUk9XUzsKKworCWltYWdlX3NpemUgPSBjcGlhMl9tYXRjaF92aWRlb19zaXplKHdpZHRoLCBoZWlnaHQpOworCisJREJHKCJDb25maWcgNDEwOiB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgd2lkdGgsIGhlaWdodCk7CisJREJHKCJJbWFnZSBzaXplIHJldHVybmVkIGlzICVkXG4iLCBpbWFnZV9zaXplKTsKKwlpZiAoaW1hZ2Vfc2l6ZSA+PSAwKSB7CisJCXNldF92d19zaXplKGNhbSwgaW1hZ2Vfc2l6ZSk7CisJCXdpZHRoID0gY2FtLT5wYXJhbXMucm9pLndpZHRoOworCQloZWlnaHQgPSBjYW0tPnBhcmFtcy5yb2kuaGVpZ2h0OworCisJCURCRygiQWZ0ZXIgc2V0X3Z3X3NpemUoKSwgd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsCisJCSAgICB3aWR0aCwgaGVpZ2h0KTsKKwkJaWYgKHdpZHRoIDw9IDE3NiAmJiBoZWlnaHQgPD0gMTQ0KSB7CisJCQlEQkcoImltYWdlIHR5cGUgPSBWSURFT1NJWkVfUUNJRlxuIik7CisJCQlpbWFnZV90eXBlID0gVklERU9TSVpFX1FDSUY7CisJCX0KKwkJZWxzZSBpZiAod2lkdGggPD0gMzIwICYmIGhlaWdodCA8PSAyNDApIHsKKwkJCURCRygiaW1hZ2UgdHlwZSA9IFZJREVPU0laRV9RVkdBXG4iKTsKKwkJCWltYWdlX3R5cGUgPSBWSURFT1NJWkVfUVZHQTsKKwkJfQorCQllbHNlIHsKKwkJCURCRygiaW1hZ2UgdHlwZSA9IFZJREVPU0laRV9DSUZcbiIpOworCQkJaW1hZ2VfdHlwZSA9IFZJREVPU0laRV9DSUY7CisJCX0KKwl9IGVsc2UgeworCQlFUlIoIkNvbmZpZ1NlbnNvcjQxMCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9SQU5ET00gfCBDQU1FUkFBQ0NFU1NfVkM7CisJY21kLmRpcmVjdGlvbiA9IFRSQU5TRkVSX1dSSVRFOworCisJLyogVkMgRm9ybWF0ICovCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19GT1JNQVQ7CisJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX0NJRikgeworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKENQSUEyX1ZDX1ZDX0ZPUk1BVF9VRklSU1QgfAorCQkJICBDUElBMl9WQ19WQ19GT1JNQVRfU0hPUlRMSU5FKTsKKwl9IGVsc2UgeworCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgQ1BJQTJfVkNfVkNfRk9STUFUX1VGSVJTVDsKKwl9CisKKwkvKiBWQyBDbG9ja3MgKi8KKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX0NMT0NLUzsKKwlpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfUUNJRikgeworCQlpZiAoY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlID09IERFVklDRV9TVFZfNjcyKSB7CisJCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlPQorCQkJCSh1OCkoQ1BJQTJfVkNfVkNfNjcyX0NMT0NLU19DSUZfRElWX0JZXzMgfAorCQkJCSAgICAgQ1BJQTJfVkNfVkNfNjcyX0NMT0NLU19TQ0FMSU5HIHwKKwkJCQkgICAgIENQSUEyX1ZDX1ZDX0NMT0NLU19MT0dESVYyKTsKKwkJCURCRygiVkNfQ2xvY2tzICgweGM0KSBzaG91bGQgYmUgQlxuIik7CisJCX0KKwkJZWxzZSB7CisJCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlPQorCQkJCSh1OCkoQ1BJQTJfVkNfVkNfNjc2X0NMT0NLU19DSUZfRElWX0JZXzMgfAorCQkJCSAgICAgQ1BJQTJfVkNfVkNfQ0xPQ0tTX0xPR0RJVjIpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfU1RWXzY3MikgeworCQkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9CisJCQkgICAodTgpIChDUElBMl9WQ19WQ182NzJfQ0xPQ0tTX0NJRl9ESVZfQllfMyB8CisJCQkJIENQSUEyX1ZDX1ZDX0NMT0NLU19MT0dESVYwKTsKKwkJfQorCQllbHNlIHsKKwkJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPQorCQkJICAgKHU4KSAoQ1BJQTJfVkNfVkNfNjc2X0NMT0NLU19DSUZfRElWX0JZXzMgfAorCQkJCSBDUElBMl9WQ19WQ182NzZfQ0xPQ0tTX1NDQUxJTkcgfAorCQkJCSBDUElBMl9WQ19WQ19DTE9DS1NfTE9HRElWMCk7CisJCX0KKwl9CisJREJHKCJWQ19DbG9ja3MgKDB4YzQpID0gMHglMFhcbiIsIGNtZC5idWZmZXIucmVnaXN0ZXJzW2ktMV0udmFsdWUpOworCisJLyogSW5wdXQgcmVxV2lkdGggZnJvbSBWQyAqLworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfSUhTSVpFX0xPOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKFNUVl9JTUFHRV9RQ0lGX0NPTFMgLyA0KTsKKwllbHNlCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPQorCQkgICAgKHU4KSAoU1RWX0lNQUdFX0NJRl9DT0xTIC8gNCk7CisKKwkvKiBUaW1pbmdzICovCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19YTElNX0hJOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAwOworCWVsc2UKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMTsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfWExJTV9MTzsKKwlpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfUUNJRikKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMjA4OworCWVsc2UKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMTYwOworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19ZTElNX0hJOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAwOworCWVsc2UKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMTsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfWUxJTV9MTzsKKwlpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfUUNJRikKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMTYwOworCWVsc2UKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgNjQ7CisKKwkvKiBPdXRwdXQgSW1hZ2UgU2l6ZSAqLworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfT0hTSVpFOworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSBjYW0tPnBhcmFtcy5yb2kud2lkdGggLyA0OworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19PVlNJWkU7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9IGNhbS0+cGFyYW1zLnJvaS5oZWlnaHQgLyA0OworCisJLyogQ3JvcHBpbmcgKi8KKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX0hDUk9QOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKCgoU1RWX0lNQUdFX1FDSUZfQ09MUyAvIDQpIC0gKHdpZHRoIC8gNCkpIC8gMik7CisJZWxzZQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKCgoU1RWX0lNQUdFX0NJRl9DT0xTIC8gNCkgLSAod2lkdGggLyA0KSkgLyAyKTsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfVkNST1A7CisJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1FDSUYpCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPQorCQkgICAgKHU4KSAoKChTVFZfSU1BR0VfUUNJRl9ST1dTIC8gNCkgLSAoaGVpZ2h0IC8gNCkpIC8gMik7CisJZWxzZQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKCgoU1RWX0lNQUdFX0NJRl9ST1dTIC8gNCkgLSAoaGVpZ2h0IC8gNCkpIC8gMik7CisKKwkvKiBTY2FsaW5nIHJlZ2lzdGVycyAoZGVmYXVsdHMpICovCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19IUEhBU0U7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMDsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfVlBIQVNFOworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDA7CisKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX0hJU1BBTjsKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAzMTsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfVklTUEFOOworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDMxOworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19ISUNST1A7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMDsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfVklDUk9QOworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDA7CisKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX0hGUkFDVDsKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAweDgxOwkvKiA9IDgvMSA9IDggKEhJQllURS9MT0JZVEUpICovCisKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX1ZGUkFDVDsKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAweDgxOwkvKiA9IDgvMSA9IDggKEhJQllURS9MT0JZVEUpICovCisKKwljbWQucmVnX2NvdW50ID0gaTsKKworCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCisJcmV0dXJuIGk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjb25maWdfc2Vuc29yXzUwMChjYW0pCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjb25maWdfc2Vuc29yXzUwMChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwKKwkJCSAgICAgaW50IHJlcV93aWR0aCwgaW50IHJlcV9oZWlnaHQpCit7CisJc3RydWN0IGNwaWEyX2NvbW1hbmQgY21kOworCWludCBpID0gMDsKKwlpbnQgaW1hZ2Vfc2l6ZSA9IFZJREVPU0laRV9DSUY7CisJaW50IGltYWdlX3R5cGUgPSBWSURFT1NJWkVfVkdBOworCWludCB3aWR0aCA9IHJlcV93aWR0aDsKKwlpbnQgaGVpZ2h0ID0gcmVxX2hlaWdodDsKKwl1bnNpZ25lZCBpbnQgZGV2aWNlID0gY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlOworCisJaW1hZ2Vfc2l6ZSA9IGNwaWEyX21hdGNoX3ZpZGVvX3NpemUod2lkdGgsIGhlaWdodCk7CisKKwlpZiAod2lkdGggPiBTVFZfSU1BR0VfQ0lGX0NPTFMgfHwgaGVpZ2h0ID4gU1RWX0lNQUdFX0NJRl9ST1dTKQorCQlpbWFnZV90eXBlID0gVklERU9TSVpFX1ZHQTsKKwllbHNlIGlmICh3aWR0aCA+IFNUVl9JTUFHRV9RVkdBX0NPTFMgfHwgaGVpZ2h0ID4gU1RWX0lNQUdFX1FWR0FfUk9XUykKKwkJaW1hZ2VfdHlwZSA9IFZJREVPU0laRV9DSUY7CisJZWxzZSBpZiAod2lkdGggPiBTVFZfSU1BR0VfUUNJRl9DT0xTIHx8IGhlaWdodCA+IFNUVl9JTUFHRV9RQ0lGX1JPV1MpCisJCWltYWdlX3R5cGUgPSBWSURFT1NJWkVfUVZHQTsKKwllbHNlCisJCWltYWdlX3R5cGUgPSBWSURFT1NJWkVfUUNJRjsKKworCWlmIChpbWFnZV9zaXplID49IDApIHsKKwkJc2V0X3Z3X3NpemUoY2FtLCBpbWFnZV9zaXplKTsKKwkJd2lkdGggPSBjYW0tPnBhcmFtcy5yb2kud2lkdGg7CisJCWhlaWdodCA9IGNhbS0+cGFyYW1zLnJvaS5oZWlnaHQ7CisJfSBlbHNlIHsKKwkJRVJSKCJDb25maWdTZW5zb3I1MDAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREJHKCJpbWFnZV9zaXplID0gJWQsIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkLCB0eXBlID0gJWRcbiIsCisJICAgIGltYWdlX3NpemUsIHdpZHRoLCBoZWlnaHQsIGltYWdlX3R5cGUpOworCisJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfUkFORE9NIHwgQ0FNRVJBQUNDRVNTX1ZDOworCWNtZC5kaXJlY3Rpb24gPSBUUkFOU0ZFUl9XUklURTsKKwlpID0gMDsKKworCS8qIFZDIEZvcm1hdCAqLworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfRk9STUFUOworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLnZhbHVlID0gKHU4KSBDUElBMl9WQ19WQ19GT1JNQVRfVUZJUlNUOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS52YWx1ZSB8PSAodTgpIENQSUEyX1ZDX1ZDX0ZPUk1BVF9ERUNJTUFUSU5HOworCWkrKzsKKworCS8qIFZDIENsb2NrcyAqLworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfQ0xPQ0tTOworCWlmIChkZXZpY2UgPT0gREVWSUNFX1NUVl82NzIpIHsKKwkJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1ZHQSkKKwkJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLnZhbHVlID0KKwkJCQkodTgpQ1BJQTJfVkNfVkNfQ0xPQ0tTX0xPR0RJVjE7CisJCWVsc2UKKwkJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLnZhbHVlID0KKwkJCQkodTgpKENQSUEyX1ZDX1ZDXzY3Ml9DTE9DS1NfU0NBTElORyB8CisJCQkJICAgICBDUElBMl9WQ19WQ19DTE9DS1NfTE9HRElWMyk7CisJfSBlbHNlIHsKKwkJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1ZHQSkKKwkJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLnZhbHVlID0KKwkJCQkodTgpQ1BJQTJfVkNfVkNfQ0xPQ0tTX0xPR0RJVjA7CisJCWVsc2UKKwkJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLnZhbHVlID0KKwkJCQkodTgpKENQSUEyX1ZDX1ZDXzY3Nl9DTE9DS1NfU0NBTElORyB8CisJCQkJICAgICBDUElBMl9WQ19WQ19DTE9DS1NfTE9HRElWMik7CisJfQorCWkrKzsKKworCURCRygiVkNfQ0xPQ0tTID0gMHglWFxuIiwgY21kLmJ1ZmZlci5yZWdpc3RlcnNbaS0xXS52YWx1ZSk7CisKKwkvKiBJbnB1dCB3aWR0aCBmcm9tIFZQICovCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19JSFNJWkVfTE87CisJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1ZHQSkKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0udmFsdWUgPQorCQkgICAgKHU4KSAoU1RWX0lNQUdFX1ZHQV9DT0xTIC8gNCk7CisJZWxzZQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS52YWx1ZSA9CisJCSAgICAodTgpIChTVFZfSU1BR0VfUVZHQV9DT0xTIC8gNCk7CisJaSsrOworCURCRygiSW5wdXQgd2lkdGggPSAlZFxuIiwgY21kLmJ1ZmZlci5yZWdpc3RlcnNbaS0xXS52YWx1ZSk7CisKKwkvKiBUaW1pbmdzICovCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19YTElNX0hJOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9WR0EpCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDI7CisJZWxzZQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAxOworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19YTElNX0xPOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9WR0EpCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDI1MDsKKwllbHNlIGlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9RVkdBKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAxMjU7CisJZWxzZQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAxNjA7CisKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX1lMSU1fSEk7CisJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1ZHQSkKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMjsKKwllbHNlCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDE7CisKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX1lMSU1fTE87CisJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1ZHQSkKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMTI7CisJZWxzZSBpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfUVZHQSkKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgNjQ7CisJZWxzZQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSA2OworCisJLyogT3V0cHV0IEltYWdlIFNpemUgKi8KKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX09IU0laRTsKKwlpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfUUNJRikKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9IFNUVl9JTUFHRV9DSUZfQ09MUyAgLyA0OworCWVsc2UKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9IHdpZHRoIC8gNDsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfT1ZTSVpFOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gU1RWX0lNQUdFX0NJRl9ST1dTICAvIDQ7CisJZWxzZQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gaGVpZ2h0IC8gNDsKKworCS8qIENyb3BwaW5nICovCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19IQ1JPUDsKKwlpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfVkdBKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKCgoU1RWX0lNQUdFX1ZHQV9DT0xTIC8gNCkgLSAod2lkdGggLyA0KSkgLyAyKTsKKwllbHNlIGlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9RVkdBKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKCgoU1RWX0lNQUdFX1FWR0FfQ09MUyAvIDQpIC0gKHdpZHRoIC8gNCkpIC8gMik7CisJZWxzZSBpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKCgoU1RWX0lNQUdFX0NJRl9DT0xTIC8gNCkgLSAod2lkdGggLyA0KSkgLyAyKTsKKwllbHNlIC8qaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1FDSUYpKi8KKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9CisJCQkodTgpICgoKFNUVl9JTUFHRV9RQ0lGX0NPTFMgLyA0KSAtICh3aWR0aCAvIDQpKSAvIDIpOworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19WQ1JPUDsKKwlpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfVkdBKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0KKwkJICAgICh1OCkgKCgoU1RWX0lNQUdFX1ZHQV9ST1dTIC8gNCkgLSAoaGVpZ2h0IC8gNCkpIC8gMik7CisJZWxzZSBpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfUVZHQSkKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9CisJCSAgICAodTgpICgoKFNUVl9JTUFHRV9RVkdBX1JPV1MgLyA0KSAtIChoZWlnaHQgLyA0KSkgLyAyKTsKKwllbHNlIGlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9DSUYpCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPQorCQkgICAgKHU4KSAoKChTVFZfSU1BR0VfQ0lGX1JPV1MgLyA0KSAtIChoZWlnaHQgLyA0KSkgLyAyKTsKKwllbHNlIC8qaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1FDSUYpKi8KKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9CisJCSAgICAodTgpICgoKFNUVl9JTUFHRV9RQ0lGX1JPV1MgLyA0KSAtIChoZWlnaHQgLyA0KSkgLyAyKTsKKworCS8qIFNjYWxpbmcgcmVnaXN0ZXJzIChkZWZhdWx0cykgKi8KKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX0hQSEFTRTsKKwlpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfQ0lGIHx8IGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1FDSUYpCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDM2OworCWVsc2UKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMDsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfVlBIQVNFOworCWlmIChpbWFnZV90eXBlID09IFZJREVPU0laRV9DSUYgfHwgaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfUUNJRikKKwkJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMzI7CisJZWxzZQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAwOworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19ISVNQQU47CisJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX0NJRiB8fCBpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAyNjsKKwllbHNlCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDMxOworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19WSVNQQU47CisJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX0NJRiB8fCBpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAyMTsKKwllbHNlCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDMxOworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19ISUNST1A7CisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaSsrXS52YWx1ZSA9ICh1OCkgMDsKKworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2ldLmluZGV4ID0gQ1BJQTJfVkNfVkNfVklDUk9QOworCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDA7CisKKwljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpXS5pbmRleCA9IENQSUEyX1ZDX1ZDX0hGUkFDVDsKKwlpZiAoaW1hZ2VfdHlwZSA9PSBWSURFT1NJWkVfQ0lGIHx8IGltYWdlX3R5cGUgPT0gVklERU9TSVpFX1FDSUYpCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDB4MkI7CS8qIDIvMTEgKi8KKwllbHNlCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDB4ODE7CS8qIDgvMSAqLworCisJY21kLmJ1ZmZlci5yZWdpc3RlcnNbaV0uaW5kZXggPSBDUElBMl9WQ19WQ19WRlJBQ1Q7CisJaWYgKGltYWdlX3R5cGUgPT0gVklERU9TSVpFX0NJRiB8fCBpbWFnZV90eXBlID09IFZJREVPU0laRV9RQ0lGKQorCQljbWQuYnVmZmVyLnJlZ2lzdGVyc1tpKytdLnZhbHVlID0gKHU4KSAweDEzOwkvKiAxLzMgKi8KKwllbHNlCisJCWNtZC5idWZmZXIucmVnaXN0ZXJzW2krK10udmFsdWUgPSAodTgpIDB4ODE7CS8qIDgvMSAqLworCisJY21kLnJlZ19jb3VudCA9IGk7CisKKwljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKworCXJldHVybiBpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgc2V0YWxscHJvcGVydGllcworICoKKyAqICBUaGlzIHNldHMgYWxsIHVzZXIgY2hhbmdlYWJsZSBwcm9wZXJ0aWVzIHRvIHRoZSB2YWx1ZXMgaW4gY2FtLT5wYXJhbXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgc2V0X2FsbF9wcm9wZXJ0aWVzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCS8qKgorCSAqIERvbid0IHNldCB0YXJnZXRfa2IgaGVyZSwgaXQgd2lsbCBiZSBzZXQgbGF0ZXIuCisJICogZnJhbWVyYXRlIGFuZCB1c2VyX21vZGUgd2VyZSBhbHJlYWR5IHNldCAoc2V0X2RlZmF1bHRfdXNlcl9tb2RlKS4KKwkgKiovCisKKwljcGlhMl9zZXRfY29sb3JfcGFyYW1zKGNhbSk7CisKKwljcGlhMl91c2JfY2hhbmdlX3N0cmVhbWluZ19hbHRlcm5hdGUoY2FtLAorCQkJCQkgIGNhbS0+cGFyYW1zLmNhbWVyYV9zdGF0ZS5zdHJlYW1fbW9kZSk7CisKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX1NFVF9VU0VSX0VGRkVDVFMsIFRSQU5TRkVSX1dSSVRFLAorCQkJIGNhbS0+cGFyYW1zLnZwX3BhcmFtcy51c2VyX2VmZmVjdHMpOworCisJY3BpYTJfc2V0X2ZsaWNrZXJfbW9kZShjYW0sCisJCQkgICAgICAgY2FtLT5wYXJhbXMuZmxpY2tlcl9jb250cm9sLmZsaWNrZXJfbW9kZV9yZXEpOworCisJY3BpYTJfZG9fY29tbWFuZChjYW0sCisJCQkgQ1BJQTJfQ01EX1NFVF9WQ19NUF9HUElPX0RJUkVDVElPTiwKKwkJCSBUUkFOU0ZFUl9XUklURSwgY2FtLT5wYXJhbXMudnBfcGFyYW1zLmdwaW9fZGlyZWN0aW9uKTsKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX1NFVF9WQ19NUF9HUElPX0RBVEEsIFRSQU5TRkVSX1dSSVRFLAorCQkJIGNhbS0+cGFyYW1zLnZwX3BhcmFtcy5ncGlvX2RhdGEpOworCisJd2FrZV9zeXN0ZW0oY2FtKTsKKworCXNldF9sb3dsaWdodF9ib29zdChjYW0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfc2F2ZV9jYW1lcmFfc3RhdGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNwaWEyX3NhdmVfY2FtZXJhX3N0YXRlKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCWdldF9jb2xvcl9wYXJhbXMoY2FtKTsKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9VU0VSX0VGRkVDVFMsIFRSQU5TRkVSX1JFQUQsIDApOworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX1ZDX01QX0dQSU9fRElSRUNUSU9OLCBUUkFOU0ZFUl9SRUFELAorCQkJIDApOworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX1ZDX01QX0dQSU9fREFUQSwgVFJBTlNGRVJfUkVBRCwgMCk7CisJLyogRG9uJ3QgZ2V0IGZyYW1lcmF0ZSBvciB0YXJnZXRfa2IuIFRydXN0IHRoZSB2YWx1ZXMgd2UgYWxyZWFkeSBoYXZlICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgZ2V0X2NvbG9yX3BhcmFtcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2V0X2NvbG9yX3BhcmFtcyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9WUF9CUklHSFRORVNTLCBUUkFOU0ZFUl9SRUFELCAwKTsKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9WUF9TQVRVUkFUSU9OLCBUUkFOU0ZFUl9SRUFELCAwKTsKKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9DT05UUkFTVCwgVFJBTlNGRVJfUkVBRCwgMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfc2V0X2NvbG9yX3BhcmFtcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY3BpYTJfc2V0X2NvbG9yX3BhcmFtcyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlEQkcoIlNldHRpbmcgY29sb3IgcGFyYW1zXG4iKTsKKwljcGlhMl9zZXRfYnJpZ2h0bmVzcyhjYW0sIGNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5icmlnaHRuZXNzKTsKKwljcGlhMl9zZXRfY29udHJhc3QoY2FtLCBjYW0tPnBhcmFtcy5jb2xvcl9wYXJhbXMuY29udHJhc3QpOworCWNwaWEyX3NldF9zYXR1cmF0aW9uKGNhbSwgY2FtLT5wYXJhbXMuY29sb3JfcGFyYW1zLnNhdHVyYXRpb24pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3NldF9mbGlja2VyX21vZGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY3BpYTJfc2V0X2ZsaWNrZXJfbW9kZShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgaW50IG1vZGUpCit7CisJdW5zaWduZWQgY2hhciBjYW1fcmVnOworCWludCBlcnIgPSAwOworCisJaWYoY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlICE9IERFVklDRV9TVFZfNjcyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNldCB0aGUgYXBwcm9wcmlhdGUgYml0cyBpbiBGTElDS0VSX01PREVTLCBwcmVzZXJ2aW5nIHRoZSByZXN0ICovCisJaWYoKGVyciA9IGNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX0ZMSUNLRVJfTU9ERVMsCisJCQkJICAgVFJBTlNGRVJfUkVBRCwgMCkpKQorCQlyZXR1cm4gZXJyOworCWNhbV9yZWcgPSBjYW0tPnBhcmFtcy5mbGlja2VyX2NvbnRyb2wuY2FtX3JlZ2lzdGVyOworCisJc3dpdGNoKG1vZGUpIHsKKwljYXNlIE5FVkVSX0ZMSUNLRVI6CisJCWNhbV9yZWcgfD0gQ1BJQTJfVlBfRkxJQ0tFUl9NT0RFU19ORVZFUl9GTElDS0VSOworCQljYW1fcmVnICY9IH5DUElBMl9WUF9GTElDS0VSX01PREVTXzUwSFo7CisJCWJyZWFrOworCWNhc2UgRkxJQ0tFUl82MDoKKwkJY2FtX3JlZyAmPSB+Q1BJQTJfVlBfRkxJQ0tFUl9NT0RFU19ORVZFUl9GTElDS0VSOworCQljYW1fcmVnICY9IH5DUElBMl9WUF9GTElDS0VSX01PREVTXzUwSFo7CisJCWJyZWFrOworCWNhc2UgRkxJQ0tFUl81MDoKKwkJY2FtX3JlZyAmPSB+Q1BJQTJfVlBfRkxJQ0tFUl9NT0RFU19ORVZFUl9GTElDS0VSOworCQljYW1fcmVnIHw9IENQSUEyX1ZQX0ZMSUNLRVJfTU9ERVNfNTBIWjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYoKGVyciA9IGNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfU0VUX0ZMSUNLRVJfTU9ERVMsCisJCQkJICAgVFJBTlNGRVJfV1JJVEUsIGNhbV9yZWcpKSkKKwkJcmV0dXJuIGVycjsKKworCS8qIFNldCB0aGUgYXBwcm9wcmlhdGUgYml0cyBpbiBFWFBfTU9ERVMsIHByZXNlcnZpbmcgdGhlIHJlc3QgKi8KKwlpZigoZXJyID0gY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVlBfRVhQX01PREVTLAorCQkJCSAgIFRSQU5TRkVSX1JFQUQsIDApKSkKKwkJcmV0dXJuIGVycjsKKwljYW1fcmVnID0gY2FtLT5wYXJhbXMudnBfcGFyYW1zLmV4cG9zdXJlX21vZGVzOworCisJaWYgKG1vZGUgPT0gTkVWRVJfRkxJQ0tFUikgeworCQljYW1fcmVnIHw9IENQSUEyX1ZQX0VYUE9TVVJFX01PREVTX0lOSElCSVRfRkxJQ0tFUjsKKwl9IGVsc2UgeworCQljYW1fcmVnICY9IH5DUElBMl9WUF9FWFBPU1VSRV9NT0RFU19JTkhJQklUX0ZMSUNLRVI7CisJfQorCisJaWYoKGVyciA9IGNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfU0VUX1ZQX0VYUF9NT0RFUywKKwkJCQkgICBUUkFOU0ZFUl9XUklURSwgY2FtX3JlZykpKQorCQlyZXR1cm4gZXJyOworCisJaWYoKGVyciA9IGNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfUkVIQVNIX1ZQNCwKKwkJCQkgICBUUkFOU0ZFUl9XUklURSwgMSkpKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoKG1vZGUpIHsKKwljYXNlIE5FVkVSX0ZMSUNLRVI6CisJCWNhbS0+cGFyYW1zLmZsaWNrZXJfY29udHJvbC5mbGlja2VyX21vZGVfcmVxID0gbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBGTElDS0VSXzYwOgorCQljYW0tPnBhcmFtcy5mbGlja2VyX2NvbnRyb2wuZmxpY2tlcl9tb2RlX3JlcSA9IG1vZGU7CisJCWNhbS0+cGFyYW1zLmZsaWNrZXJfY29udHJvbC5tYWluc19mcmVxdWVuY3kgPSA2MDsKKwkJYnJlYWs7CisJY2FzZSBGTElDS0VSXzUwOgorCQljYW0tPnBhcmFtcy5mbGlja2VyX2NvbnRyb2wuZmxpY2tlcl9tb2RlX3JlcSA9IG1vZGU7CisJCWNhbS0+cGFyYW1zLmZsaWNrZXJfY29udHJvbC5tYWluc19mcmVxdWVuY3kgPSA1MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3NldF9wcm9wZXJ0eV9mbGlwCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjcGlhMl9zZXRfcHJvcGVydHlfZmxpcChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgaW50IHByb3BfdmFsKQoreworCXVuc2lnbmVkIGNoYXIgY2FtX3JlZzsKKworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX1VTRVJfRUZGRUNUUywgVFJBTlNGRVJfUkVBRCwgMCk7CisJY2FtX3JlZyA9IGNhbS0+cGFyYW1zLnZwX3BhcmFtcy51c2VyX2VmZmVjdHM7CisKKwlpZiAocHJvcF92YWwpCisJeworCQljYW1fcmVnIHw9IENQSUEyX1ZQX1VTRVJfRUZGRUNUU19GTElQOworCX0KKwllbHNlCisJeworCQljYW1fcmVnICY9IH5DUElBMl9WUF9VU0VSX0VGRkVDVFNfRkxJUDsKKwl9CisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9TRVRfVVNFUl9FRkZFQ1RTLCBUUkFOU0ZFUl9XUklURSwKKwkJCSBjYW1fcmVnKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9zZXRfcHJvcGVydHlfbWlycm9yCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjcGlhMl9zZXRfcHJvcGVydHlfbWlycm9yKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCBpbnQgcHJvcF92YWwpCit7CisJdW5zaWduZWQgY2hhciBjYW1fcmVnOworCisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVVNFUl9FRkZFQ1RTLCBUUkFOU0ZFUl9SRUFELCAwKTsKKwljYW1fcmVnID0gY2FtLT5wYXJhbXMudnBfcGFyYW1zLnVzZXJfZWZmZWN0czsKKworCWlmIChwcm9wX3ZhbCkKKwl7CisJCWNhbV9yZWcgfD0gQ1BJQTJfVlBfVVNFUl9FRkZFQ1RTX01JUlJPUjsKKwl9CisJZWxzZQorCXsKKwkJY2FtX3JlZyAmPSB+Q1BJQTJfVlBfVVNFUl9FRkZFQ1RTX01JUlJPUjsKKwl9CisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9TRVRfVVNFUl9FRkZFQ1RTLCBUUkFOU0ZFUl9XUklURSwKKwkJCSBjYW1fcmVnKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBzZXRfdGFyZ2V0X2tiCisgKgorICogIFRoZSBuZXcgVGFyZ2V0IEtCIGlzIHNldCBpbiBjYW0tPnBhcmFtcy52Y19wYXJhbXMudGFyZ2V0X2tiIGFuZAorICogIGFjdGl2YXRlcyBvbiByZXNldC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGNwaWEyX3NldF90YXJnZXRfa2Ioc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJREJHKCJSZXF1ZXN0ZWQgdGFyZ2V0X2tiID0gJWRcbiIsIHZhbHVlKTsKKwlpZiAodmFsdWUgIT0gY2FtLT5wYXJhbXMudmNfcGFyYW1zLnRhcmdldF9rYikgeworCisJCWNwaWEyX3VzYl9zdHJlYW1fcGF1c2UoY2FtKTsKKworCQkvKiByZXNldCBjYW1lcmEgZm9yIG5ldyB0YXJnZXRfa2IgKi8KKwkJY2FtLT5wYXJhbXMudmNfcGFyYW1zLnRhcmdldF9rYiA9IHZhbHVlOworCQljcGlhMl9yZXNldF9jYW1lcmEoY2FtKTsKKworCQljcGlhMl91c2Jfc3RyZWFtX3Jlc3VtZShjYW0pOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3NldF9ncGlvCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGNwaWEyX3NldF9ncGlvKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCB1bnNpZ25lZCBjaGFyIHNldHRpbmcpCit7CisJaW50IHJldDsKKworCS8qIFNldCB0aGUgbWljcm9wb3J0IGRpcmVjdGlvbiAocmVnaXN0ZXIgMHg5MCwgc2hvdWxkIGJlIGRlZmluZWQKKwkgKiBhbHJlYWR5KSB0byAxICh1c2VyIG91dHB1dCksIGFuZCBzZXQgdGhlIG1pY3JvcG9ydCBkYXRhICgweDkxKSB0bworCSAqIHRoZSB2YWx1ZSBpbiB0aGUgaW9jdGwgYXJndW1lbnQuCisJICovCisKKwlyZXQgPSBjcGlhMl9kb19jb21tYW5kKGNhbSwKKwkJCSAgICAgICBDUElBMl9DTURfU0VUX1ZDX01QX0dQSU9fRElSRUNUSU9OLAorCQkJICAgICAgIENQSUEyX1ZDX01QX0RJUl9PVVRQVVQsCisJCQkgICAgICAgMjU1KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwljYW0tPnBhcmFtcy52cF9wYXJhbXMuZ3Bpb19kaXJlY3Rpb24gPSAyNTU7CisKKwlyZXQgPSBjcGlhMl9kb19jb21tYW5kKGNhbSwKKwkJCSAgICAgICBDUElBMl9DTURfU0VUX1ZDX01QX0dQSU9fREFUQSwKKwkJCSAgICAgICBDUElBMl9WQ19NUF9ESVJfT1VUUFVULAorCQkJICAgICAgIHNldHRpbmcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWNhbS0+cGFyYW1zLnZwX3BhcmFtcy5ncGlvX2RhdGEgPSBzZXR0aW5nOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfc2V0X2ZwcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBjcGlhMl9zZXRfZnBzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCBpbnQgZnJhbWVyYXRlKQoreworCWludCByZXR2YWw7CisKKwlzd2l0Y2goZnJhbWVyYXRlKSB7CisJCWNhc2UgQ1BJQTJfVlBfRlJBTUVSQVRFXzMwOgorCQljYXNlIENQSUEyX1ZQX0ZSQU1FUkFURV8yNToKKwkJCWlmKGNhbS0+cGFyYW1zLnBucF9pZC5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfU1RWXzY3MiAmJgorCQkJICAgY2FtLT5wYXJhbXMudmVyc2lvbi5zZW5zb3JfZmxhZ3MgPT0KKwkJCQkJCSAgICBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNTAwKSB7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQkvKiBGYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBDUElBMl9WUF9GUkFNRVJBVEVfMTU6CisJCWNhc2UgQ1BJQTJfVlBfRlJBTUVSQVRFXzEyXzU6CisJCWNhc2UgQ1BJQTJfVlBfRlJBTUVSQVRFXzdfNToKKwkJY2FzZSBDUElBMl9WUF9GUkFNRVJBVEVfNl8yNToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfU1RWXzY3MiAmJgorCSAgICBmcmFtZXJhdGUgPT0gQ1BJQTJfVlBfRlJBTUVSQVRFXzE1KQorCQlmcmFtZXJhdGUgPSAwOyAvKiBXb3JrIGFyb3VuZCBidWcgaW4gVlA0ICovCisKKwlyZXR2YWwgPSBjcGlhMl9kb19jb21tYW5kKGNhbSwKKwkJCQkgQ1BJQTJfQ01EX0ZSQU1FUkFURV9SRVEsCisJCQkJIFRSQU5TRkVSX1dSSVRFLAorCQkJCSBmcmFtZXJhdGUpOworCisJaWYocmV0dmFsID09IDApCisJCWNhbS0+cGFyYW1zLnZwX3BhcmFtcy5mcmFtZV9yYXRlID0gZnJhbWVyYXRlOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9zZXRfYnJpZ2h0bmVzcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY3BpYTJfc2V0X2JyaWdodG5lc3Moc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJLyoqKgorCSAqIERvbid0IGxldCB0aGUgcmVnaXN0ZXIgYmUgc2V0IHRvIHplcm8gLSBidWcgaW4gVlA0IC0gZmxhc2ggb2YgZnVsbAorCSAqIGJyaWdodG5lc3MKKwkgKioqLworCWlmIChjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUgPT0gREVWSUNFX1NUVl82NzIgJiYgdmFsdWUgPT0gMCkKKwkJdmFsdWUrKzsKKwlEQkcoIlNldHRpbmcgYnJpZ2h0bmVzcyB0byAlZCAoMHglMHgpXG4iLCB2YWx1ZSwgdmFsdWUpOworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLENQSUEyX0NNRF9TRVRfVlBfQlJJR0hUTkVTUywgVFJBTlNGRVJfV1JJVEUsdmFsdWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3NldF9jb250cmFzdAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY3BpYTJfc2V0X2NvbnRyYXN0KHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCURCRygiU2V0dGluZyBjb250cmFzdCB0byAlZCAoMHglMHgpXG4iLCB2YWx1ZSwgdmFsdWUpOworCWNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5jb250cmFzdCA9IHZhbHVlOworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfU0VUX0NPTlRSQVNULCBUUkFOU0ZFUl9XUklURSwgdmFsdWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3NldF9zYXR1cmF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjcGlhMl9zZXRfc2F0dXJhdGlvbihzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgdW5zaWduZWQgY2hhciB2YWx1ZSkKK3sKKwlEQkcoIlNldHRpbmcgc2F0dXJhdGlvbiB0byAlZCAoMHglMHgpXG4iLCB2YWx1ZSwgdmFsdWUpOworCWNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5zYXR1cmF0aW9uID0gdmFsdWU7CisJY3BpYTJfZG9fY29tbWFuZChjYW0sQ1BJQTJfQ01EX1NFVF9WUF9TQVRVUkFUSU9OLCBUUkFOU0ZFUl9XUklURSx2YWx1ZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgd2FrZV9zeXN0ZW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHdha2Vfc3lzdGVtKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfU0VUX1dBS0VVUCwgVFJBTlNGRVJfV1JJVEUsIDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIHNldF9sb3dsaWdodF9ib29zdAorICoKKyAqICBWYWxpZCBmb3IgU1RWNTAwIHNlbnNvciBvbmx5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHNldF9sb3dsaWdodF9ib29zdChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlzdHJ1Y3QgY3BpYTJfY29tbWFuZCBjbWQ7CisKKwlpZiAoY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlICE9IERFVklDRV9TVFZfNjcyIHx8CisJICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uc2Vuc29yX2ZsYWdzICE9IENQSUEyX1ZQX1NFTlNPUl9GTEFHU181MDApCisJCXJldHVybjsKKworCWNtZC5kaXJlY3Rpb24gPSBUUkFOU0ZFUl9XUklURTsKKwljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19WUDsKKwljbWQucmVnX2NvdW50ID0gMzsKKwljbWQuc3RhcnQgPSBDUElBMl9WUF9SQU1fQUREUl9IOworCisJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gMDsJLyogSGlnaCBieXRlIG9mIGFkZHJlc3MgdG8gd3JpdGUgdG8gKi8KKwljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV0gPSAweDU5OwkvKiBMb3cgYnl0ZSBvZiBhZGRyZXNzIHRvIHdyaXRlIHRvICovCisJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzJdID0gMDsJLyogSGlnaCBieXRlIG9mIGRhdGEgdG8gd3JpdGUgKi8KKworCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCisJaWYgKGNhbS0+cGFyYW1zLnZwX3BhcmFtcy5sb3dsaWdodF9ib29zdCkgeworCQljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0gPSAweDAyOwkvKiBMb3cgYnl0ZSBkYXRhIHRvIHdyaXRlICovCisJfSBlbHNlIHsKKwkJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdID0gMHgwNjsKKwl9CisJY21kLnN0YXJ0ID0gQ1BJQTJfVlBfUkFNX0RBVEE7CisJY21kLnJlZ19jb3VudCA9IDE7CisJY3BpYTJfc2VuZF9jb21tYW5kKGNhbSwgJmNtZCk7CisKKwkvKiBSZWhhc2ggdGhlIFZQNCB2YWx1ZXMgKi8KKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX1JFSEFTSF9WUDQsIFRSQU5TRkVSX1dSSVRFLCAxKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9zZXRfZm9ybWF0CisgKgorICogIEFzc3VtZXMgdGhhdCBuZXcgc2l6ZSBpcyBhbHJlYWR5IHNldCBpbiBwYXJhbSBzdHJ1Y3QuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNwaWEyX3NldF9mb3JtYXQoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJY2FtLT5mbHVzaCA9IHRydWU7CisKKwljcGlhMl91c2Jfc3RyZWFtX3BhdXNlKGNhbSk7CisKKwkvKiByZXNldCBjYW1lcmEgdG8gbmV3IHNpemUgKi8KKwljcGlhMl9zZXRfbG93X3Bvd2VyKGNhbSk7CisJY3BpYTJfcmVzZXRfY2FtZXJhKGNhbSk7CisJY2FtLT5mbHVzaCA9IGZhbHNlOworCisJY3BpYTJfZGJnX2R1bXBfcmVnaXN0ZXJzKGNhbSk7CisKKwljcGlhMl91c2Jfc3RyZWFtX3Jlc3VtZShjYW0pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogY3BpYTJfZGJnX2R1bXBfcmVnaXN0ZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjcGlhMl9kYmdfZHVtcF9yZWdpc3RlcnMoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisjaWZkZWYgX0NQSUEyX0RFQlVHXworCXN0cnVjdCBjcGlhMl9jb21tYW5kIGNtZDsKKworCWlmICghKGRlYnVnc19vbiAmIERFQlVHX0RVTVBfUkVHUykpCisJCXJldHVybjsKKworCWNtZC5kaXJlY3Rpb24gPSBUUkFOU0ZFUl9SRUFEOworCisJLyogU3RhcnQgd2l0aCBiYW5rIDAgKFNZU1RFTSkgKi8KKwljbWQucmVxX21vZGUgPSBDQU1FUkFBQ0NFU1NfVFlQRV9CTE9DSyB8IENBTUVSQUFDQ0VTU19TWVNURU07CisJY21kLnJlZ19jb3VudCA9IDM7CisJY21kLnN0YXJ0ID0gMDsKKwljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiU3lzdGVtIERldmljZSBIaSAgICAgID0gMHglWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiU3lzdGVtIERldmljZSBMbyAgICAgID0gMHglWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzFdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiU3lzdGVtX3N5c3RlbSBjb250cm9sID0gMHglWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzJdKTsKKworCS8qIEJhbmsgMSAoVkMpICovCisJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVkM7CisJY21kLnJlZ19jb3VudCA9IDQ7CisJY21kLnN0YXJ0ID0gMHg4MDsKKwljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiQVNJQ19JRCAgICAgICA9IDB4JVhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkFTSUNfUkVWICAgICAgPSAweCVYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV0pOworCXByaW50ayhLRVJOX0RFQlVHICJQV19DT05UUkwgICAgID0gMHglWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzJdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiV0FLRVVQICAgICAgICA9IDB4JVhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVszXSk7CisKKwljbWQuc3RhcnQgPSAweEEwOwkvKiBTVF9DVFJMICovCisJY21kLnJlZ19jb3VudCA9IDE7CisJY3BpYTJfc2VuZF9jb21tYW5kKGNhbSwgJmNtZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlN0cmVhbSBjdHJsICAgPSAweCVYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0pOworCisJY21kLnN0YXJ0ID0gMHhBNDsJLyogU3RyZWFtIHN0YXR1cyAqLworCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJTdHJlYW0gc3RhdHVzID0gMHglWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdKTsKKworCWNtZC5zdGFydCA9IDB4QTg7CS8qIFVTQiBzdGF0dXMgKi8KKwljbWQucmVnX2NvdW50ID0gMzsKKwljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVVNCX0NUUkwgICAgICA9IDB4JVhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlVTQl9TVFJNICAgICAgPSAweCVYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV0pOworCXByaW50ayhLRVJOX0RFQlVHICJVU0JfU1RBVFVTICAgID0gMHglWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzJdKTsKKworCWNtZC5zdGFydCA9IDB4QUY7CS8qIFVTQiBzZXR0aW5ncyAqLworCWNtZC5yZWdfY291bnQgPSAxOworCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJVU0Igc2V0dGluZ3MgID0gMHglWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdKTsKKworCWNtZC5zdGFydCA9IDB4QzA7CS8qIFZDIHN0dWZmICovCisJY21kLnJlZ19jb3VudCA9IDI2OworCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJWQyBDb250cm9sICAgID0gMHglMFhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZDIEZvcm1hdCAgICAgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzNdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgQ2xvY2tzICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbNF0pOworCXByaW50ayhLRVJOX0RFQlVHICJWQyBJSFNpemUgICAgID0gMHglMFhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVs1XSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZDIFhsaW0gSGkgICAgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzZdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgWExpbSBMbyAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbN10pOworCXByaW50ayhLRVJOX0RFQlVHICJWQyBZTGltIEhpICAgID0gMHglMFhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVs4XSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZDIFlMaW0gTG8gICAgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzldKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgT0hTaXplICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTBdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgT1ZTaXplICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTFdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgSENyb3AgICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTJdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgVkNyb3AgICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTNdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgSFBoYXNlICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTRdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgVlBoYXNlICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTVdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgSElzcGFuICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTZdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgVklzcGFuICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTddKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgSGlDcm9wICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMThdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgVmlDcm9wICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMTldKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgSGlGcmFjdCAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMjBdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgVmlGcmFjdCAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMjFdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgSlBlZyBPcHQgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMjJdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgQ3JlZXAgUGVyICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMjNdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgVXNlciBTcS4gICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMjRdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVkMgVGFyZ2V0IEtCICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMjVdKTsKKworCS8qKiogVlAgKioqLworCWNtZC5yZXFfbW9kZSA9IENBTUVSQUFDQ0VTU19UWVBFX0JMT0NLIHwgQ0FNRVJBQUNDRVNTX1ZQOworCWNtZC5yZWdfY291bnQgPSAxNDsKKwljbWQuc3RhcnQgPSAwOworCWNwaWEyX3NlbmRfY29tbWFuZChjYW0sICZjbWQpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIlZQIERldiBIaSAgICAgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVlAgRGV2IExvICAgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV0pOworCXByaW50ayhLRVJOX0RFQlVHICJWUCBTeXMgU3RhdGUgID0gMHglMFhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVsyXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZQIFN5cyBDdHJsICAgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzNdKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVlAgU2Vuc29yIGZsZyA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbNV0pOworCXByaW50ayhLRVJOX0RFQlVHICJWUCBTZW5zb3IgUmV2ID0gMHglMFhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVs2XSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZQIERldiBDb25maWcgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzddKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiVlAgR1BJT19ESVIgICA9IDB4JTBYXG4iLAorCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbOF0pOworCXByaW50ayhLRVJOX0RFQlVHICJWUCBHUElPX0RBVEEgID0gMHglMFhcbiIsCisJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVs5XSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZQIFJhbSBBRERSIEggPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzEwXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZQIFJhbSBBRERSIEwgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzExXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlZQIFJBTSBEYXRhICAgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzEyXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkRvIENhbGwgICAgICAgPSAweCUwWFxuIiwKKwkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzEzXSk7CisKKwlpZiAoY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlID09IERFVklDRV9TVFZfNjcyKSB7CisJCWNtZC5yZWdfY291bnQgPSA5OworCQljbWQuc3RhcnQgPSAweDBFOworCQljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQIENsb2NrIEN0cmwgPSAweCUwWFxuIiwKKwkJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUCBQYXRjaCBSZXYgID0gMHglMFhcbiIsCisJCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV0pOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlAgVmlkIE1vZGUgICA9IDB4JTBYXG4iLAorCQkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzJdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQIEZyYW1lcmF0ZSAgPSAweCUwWFxuIiwKKwkJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVszXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUCBVc2VyRWZmZWN0ID0gMHglMFhcbiIsCisJCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbNF0pOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlAgV2hpdGUgQmFsICA9IDB4JTBYXG4iLAorCQkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzVdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQIFdCIHRocmVzaCAgPSAweCUwWFxuIiwKKwkJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVs2XSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUCBFeHAgTW9kZXMgID0gMHglMFhcbiIsCisJCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbN10pOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlAgRXhwIFRhcmdldCA9IDB4JTBYXG4iLAorCQkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzhdKTsKKworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLnN0YXJ0ID0gMHgxQjsKKwkJY3BpYTJfc2VuZF9jb21tYW5kKGNhbSwgJmNtZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUCBGbGlja2VyTWRzID0gMHglMFhcbiIsCisJCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0pOworCX0gZWxzZSB7CisJCWNtZC5yZWdfY291bnQgPSA4IDsKKwkJY21kLnN0YXJ0ID0gMHgwRTsKKwkJY3BpYTJfc2VuZF9jb21tYW5kKGNhbSwgJmNtZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUCBDbG9jayBDdHJsID0gMHglMFhcbiIsCisJCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0pOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlAgUGF0Y2ggUmV2ICA9IDB4JTBYXG4iLAorCQkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzFdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQIFZpZCBNb2RlICAgPSAweCUwWFxuIiwKKwkJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVs1XSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUCBGcmFtZXJhdGUgID0gMHglMFhcbiIsCisJCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbNl0pOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlAgVXNlckVmZmVjdCA9IDB4JTBYXG4iLAorCQkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzddKTsKKworCQljbWQucmVnX2NvdW50ID0gMTsKKwkJY21kLnN0YXJ0ID0gQ1BJQTJfVlA1X0VYUE9TVVJFX1RBUkdFVDsKKwkJY3BpYTJfc2VuZF9jb21tYW5kKGNhbSwgJmNtZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUDUgRXhwIFRhcmdldD0gMHglMFhcbiIsCisJCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMF0pOworCisJCWNtZC5yZWdfY291bnQgPSA0OworCQljbWQuc3RhcnQgPSAweDNBOworCQljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQNSBNWSBCbGFjayAgPSAweCUwWFxuIiwKKwkJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJWUDUgTUNZIFJhbmdlID0gMHglMFhcbiIsCisJCSAgICAgICBjbWQuYnVmZmVyLmJsb2NrX2RhdGFbMV0pOworCQlwcmludGsoS0VSTl9ERUJVRyAiVlA1IE1ZQ0VJTElORyA9IDB4JTBYXG4iLAorCQkgICAgICAgY21kLmJ1ZmZlci5ibG9ja19kYXRhWzJdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZQNSBNQ1VWIFNhdCAgPSAweCUwWFxuIiwKKwkJICAgICAgIGNtZC5idWZmZXIuYmxvY2tfZGF0YVszXSk7CisJfQorI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgcmVzZXRfY2FtZXJhX3N0cnVjdAorICoKKyAqICBTZXRzIGFsbCB2YWx1ZXMgdG8gdGhlIGRlZmF1bHRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHJlc2V0X2NhbWVyYV9zdHJ1Y3Qoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJLyoqKgorCSAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIHZhbHVlcyBhcmUgdGhlIGRlZmF1bHRzIGZyb20gdGhlIHJlZ2lzdGVyIG1hcC4KKwkgKioqLworCWNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5icmlnaHRuZXNzID0gREVGQVVMVF9CUklHSFRORVNTOworCWNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5jb250cmFzdCA9IERFRkFVTFRfQ09OVFJBU1Q7CisJY2FtLT5wYXJhbXMuY29sb3JfcGFyYW1zLnNhdHVyYXRpb24gPSBERUZBVUxUX1NBVFVSQVRJT047CisJY2FtLT5wYXJhbXMudnBfcGFyYW1zLmxvd2xpZ2h0X2Jvb3N0ID0gMDsKKworCS8qIEZsaWNrZXJNb2RlcyAqLworCWNhbS0+cGFyYW1zLmZsaWNrZXJfY29udHJvbC5mbGlja2VyX21vZGVfcmVxID0gTkVWRVJfRkxJQ0tFUjsKKwljYW0tPnBhcmFtcy5mbGlja2VyX2NvbnRyb2wubWFpbnNfZnJlcXVlbmN5ID0gNjA7CisKKwkvKiBqcGVnIHBhcmFtcyAqLworCWNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLmpwZWdfb3B0aW9ucyA9IENQSUEyX1ZDX1ZDX0pQRUdfT1BUX0RFRkFVTFQ7CisJY2FtLT5wYXJhbXMuY29tcHJlc3Npb24uY3JlZXBfcGVyaW9kID0gMjsKKwljYW0tPnBhcmFtcy5jb21wcmVzc2lvbi51c2VyX3NxdWVlemUgPSAyMDsKKwljYW0tPnBhcmFtcy5jb21wcmVzc2lvbi5pbmhpYml0X2h0YWJsZXMgPSBmYWxzZTsKKworCS8qIGdwaW8gcGFyYW1zICovCisJY2FtLT5wYXJhbXMudnBfcGFyYW1zLmdwaW9fZGlyZWN0aW9uID0gMDsJLyogd3JpdGUsIHRoZSBkZWZhdWx0IHNhZmUgbW9kZSAqLworCWNhbS0+cGFyYW1zLnZwX3BhcmFtcy5ncGlvX2RhdGEgPSAwOworCisJLyogVGFyZ2V0IGtiIHBhcmFtcyAqLworCWNhbS0+cGFyYW1zLnZjX3BhcmFtcy50YXJnZXRfa2IgPSBERUZBVUxUX1RBUkdFVF9LQjsKKworCS8qKioKKwkgKiBTZXQgU2Vuc29yIEZQUyBhcyBmYXN0IGFzIHBvc3NpYmxlLgorCSAqKiovCisJaWYoY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlID09IERFVklDRV9TVFZfNjcyKSB7CisJCWlmKGNhbS0+cGFyYW1zLnZlcnNpb24uc2Vuc29yX2ZsYWdzID09IENQSUEyX1ZQX1NFTlNPUl9GTEFHU181MDApCisJCQljYW0tPnBhcmFtcy52cF9wYXJhbXMuZnJhbWVfcmF0ZSA9IENQSUEyX1ZQX0ZSQU1FUkFURV8xNTsKKwkJZWxzZQorCQkJY2FtLT5wYXJhbXMudnBfcGFyYW1zLmZyYW1lX3JhdGUgPSBDUElBMl9WUF9GUkFNRVJBVEVfMzA7CisJfSBlbHNlIHsKKwkJY2FtLT5wYXJhbXMudnBfcGFyYW1zLmZyYW1lX3JhdGUgPSBDUElBMl9WUF9GUkFNRVJBVEVfMzA7CisJfQorCisJLyoqKgorCSAqIFNldCBkZWZhdWx0IHZpZGVvIG1vZGUgYXMgbGFyZ2UgYXMgcG9zc2libGUgOgorCSAqIGZvciB2Z2Egc2Vuc29yIHNldCB0byB2Z2EsIGZvciBjaWYgc2Vuc29yIHNldCB0byBDSUYuCisJICoqKi8KKwlpZiAoY2FtLT5wYXJhbXMudmVyc2lvbi5zZW5zb3JfZmxhZ3MgPT0gQ1BJQTJfVlBfU0VOU09SX0ZMQUdTXzUwMCkgeworCQljYW0tPnNlbnNvcl90eXBlID0gQ1BJQTJfU0VOU09SXzUwMDsKKwkJY2FtLT52aWRlb19zaXplID0gVklERU9TSVpFX1ZHQTsKKwkJY2FtLT5wYXJhbXMucm9pLndpZHRoID0gU1RWX0lNQUdFX1ZHQV9DT0xTOworCQljYW0tPnBhcmFtcy5yb2kuaGVpZ2h0ID0gU1RWX0lNQUdFX1ZHQV9ST1dTOworCX0gZWxzZSB7CisJCWNhbS0+c2Vuc29yX3R5cGUgPSBDUElBMl9TRU5TT1JfNDEwOworCQljYW0tPnZpZGVvX3NpemUgPSBWSURFT1NJWkVfQ0lGOworCQljYW0tPnBhcmFtcy5yb2kud2lkdGggPSBTVFZfSU1BR0VfQ0lGX0NPTFM7CisJCWNhbS0+cGFyYW1zLnJvaS5oZWlnaHQgPSBTVFZfSU1BR0VfQ0lGX1JPV1M7CisJfQorCisJLyoqKgorCSAqIEZpbGwgaW4gdGhlIHY0bCBzdHJ1Y3R1cmVzLiAgdmlkZW9fY2FwIGlzIGZpbGxlZCBpbiBpbnNpZGUgdGhlIFZJRElPQ0NBUAorCSAqIElvY3RsLiAgSGVyZSwganVzdCBkbyB0aGUgd2luZG93IGFuZCBwaWN0dXJlIHN0dWN0cy4KKwkgKioqLworCWNhbS0+dnAucGFsZXR0ZSA9ICh1MTYpIFZJREVPX1BBTEVUVEVfUkdCMjQ7CS8qIElzIHRoaXMgcmlnaHQ/ICovCisJY2FtLT52cC5icmlnaHRuZXNzID0gKHUxNikgY2FtLT5wYXJhbXMuY29sb3JfcGFyYW1zLmJyaWdodG5lc3MgKiAyNTY7CisJY2FtLT52cC5jb2xvdXIgPSAodTE2KSBjYW0tPnBhcmFtcy5jb2xvcl9wYXJhbXMuc2F0dXJhdGlvbiAqIDI1NjsKKwljYW0tPnZwLmNvbnRyYXN0ID0gKHUxNikgY2FtLT5wYXJhbXMuY29sb3JfcGFyYW1zLmNvbnRyYXN0ICogMjU2OworCisJY2FtLT52dy54ID0gMDsKKwljYW0tPnZ3LnkgPSAwOworCWNhbS0+dncud2lkdGggPSBjYW0tPnBhcmFtcy5yb2kud2lkdGg7CisJY2FtLT52dy5oZWlnaHQgPSBjYW0tPnBhcmFtcy5yb2kuaGVpZ2h0OworCWNhbS0+dncuZmxhZ3MgPSAwOworCWNhbS0+dncuY2xpcGNvdW50ID0gMDsKKworCXJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9pbml0X2NhbWVyYV9zdHJ1Y3QKKyAqCisgKiAgSW5pdGlhbGl6ZXMgY2FtZXJhIHN0cnVjdCwgZG9lcyBub3QgY2FsbCByZXNldCB0byBmaWxsIGluIGRlZmF1bHRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGNhbWVyYV9kYXRhICpjcGlhMl9pbml0X2NhbWVyYV9zdHJ1Y3Qodm9pZCkKK3sKKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbTsKKworCWNhbSA9IGttYWxsb2Moc2l6ZW9mKCpjYW0pLCBHRlBfS0VSTkVMKTsKKworCWlmICghY2FtKSB7CisJCUVSUigiY291bGRuJ3Qga21hbGxvYyBjcGlhMiBzdHJ1Y3RcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBEZWZhdWx0IGV2ZXJ5dGhpbmcgdG8gMCAqLworCW1lbXNldChjYW0sIDAsIHNpemVvZihzdHJ1Y3QgY2FtZXJhX2RhdGEpKTsKKworCWNhbS0+cHJlc2VudCA9IDE7CisJbXV0ZXhfaW5pdCgmY2FtLT5idXN5X2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d3Ffc3RyZWFtKTsKKworCXJldHVybiBjYW07Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfaW5pdF9jYW1lcmEKKyAqCisgKiAgSW5pdGlhbGl6ZXMgY2FtZXJhLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGNwaWEyX2luaXRfY2FtZXJhKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCURCRygiU3RhcnRcbiIpOworCisJY2FtLT5tbWFwcGVkID0gZmFsc2U7CisKKwkvKiBHZXQgc2Vuc29yIGFuZCBhc2ljIHR5cGVzIGJlZm9yZSByZXNldC4gKi8KKwljcGlhMl9zZXRfaGlnaF9wb3dlcihjYW0pOworCWNwaWEyX2dldF92ZXJzaW9uX2luZm8oY2FtKTsKKwlpZiAoY2FtLT5wYXJhbXMudmVyc2lvbi5hc2ljX2lkICE9IENQSUEyX0FTSUNfNjcyKSB7CisJCUVSUigiRGV2aWNlIElPIGVycm9yIChhc2ljSUQgaGFzIGluY29ycmVjdCB2YWx1ZSBvZiAweCVYXG4iLAorCQkgICAgY2FtLT5wYXJhbXMudmVyc2lvbi5hc2ljX2lkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogU2V0IEdQSU8gZGlyZWN0aW9uIGFuZCBkYXRhIHRvIGEgc2FmZSBzdGF0ZS4gKi8KKwljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX1NFVF9WQ19NUF9HUElPX0RJUkVDVElPTiwKKwkJCSBUUkFOU0ZFUl9XUklURSwgMCk7CisJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9TRVRfVkNfTVBfR1BJT19EQVRBLAorCQkJIFRSQU5TRkVSX1dSSVRFLCAwKTsKKworCS8qIHJlc2V0dGluZyBzdHJ1Y3QgcmVxdWlyZXMgdmVyc2lvbiBpbmZvIGZvciBzZW5zb3IgYW5kIGFzaWMgdHlwZXMgKi8KKwlyZXNldF9jYW1lcmFfc3RydWN0KGNhbSk7CisKKwljcGlhMl9zZXRfbG93X3Bvd2VyKGNhbSk7CisKKwlEQkcoIkVuZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9hbGxvY2F0ZV9idWZmZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGNwaWEyX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJaW50IGk7CisKKwlpZighY2FtLT5idWZmZXJzKSB7CisJCXUzMiBzaXplID0gY2FtLT5udW1fZnJhbWVzKnNpemVvZihzdHJ1Y3QgZnJhbWVidWYpOworCQljYW0tPmJ1ZmZlcnMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZighY2FtLT5idWZmZXJzKSB7CisJCQlFUlIoImNvdWxkbid0IGttYWxsb2MgZnJhbWUgYnVmZmVyIHN0cnVjdHVyZXNcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwlpZighY2FtLT5mcmFtZV9idWZmZXIpIHsKKwkJY2FtLT5mcmFtZV9idWZmZXIgPSBydm1hbGxvYyhjYW0tPmZyYW1lX3NpemUqY2FtLT5udW1fZnJhbWVzKTsKKwkJaWYgKCFjYW0tPmZyYW1lX2J1ZmZlcikgeworCQkJRVJSKCJjb3VsZG4ndCB2bWFsbG9jIGZyYW1lIGJ1ZmZlciBkYXRhIGFyZWFcbiIpOworCQkJa2ZyZWUoY2FtLT5idWZmZXJzKTsKKwkJCWNhbS0+YnVmZmVycyA9IE5VTEw7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCWZvcihpPTA7IGk8Y2FtLT5udW1fZnJhbWVzLTE7ICsraSkgeworCQljYW0tPmJ1ZmZlcnNbaV0ubmV4dCA9ICZjYW0tPmJ1ZmZlcnNbaSsxXTsKKwkJY2FtLT5idWZmZXJzW2ldLmRhdGEgPSBjYW0tPmZyYW1lX2J1ZmZlciAraSpjYW0tPmZyYW1lX3NpemU7CisJCWNhbS0+YnVmZmVyc1tpXS5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKKwkJY2FtLT5idWZmZXJzW2ldLmxlbmd0aCA9IDA7CisJCWNhbS0+YnVmZmVyc1tpXS5tYXhfbGVuZ3RoID0gMDsKKwkJY2FtLT5idWZmZXJzW2ldLm51bSA9IGk7CisJfQorCWNhbS0+YnVmZmVyc1tpXS5uZXh0ID0gY2FtLT5idWZmZXJzOworCWNhbS0+YnVmZmVyc1tpXS5kYXRhID0gY2FtLT5mcmFtZV9idWZmZXIgK2kqY2FtLT5mcmFtZV9zaXplOworCWNhbS0+YnVmZmVyc1tpXS5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKKwljYW0tPmJ1ZmZlcnNbaV0ubGVuZ3RoID0gMDsKKwljYW0tPmJ1ZmZlcnNbaV0ubWF4X2xlbmd0aCA9IDA7CisJY2FtLT5idWZmZXJzW2ldLm51bSA9IGk7CisJY2FtLT5jdXJidWZmID0gY2FtLT5idWZmZXJzOworCWNhbS0+d29ya2J1ZmYgPSBjYW0tPmN1cmJ1ZmYtPm5leHQ7CisJREJHKCJidWZmZXJzPSVwLCBjdXJidWZmPSVwLCB3b3JrYnVmZj0lcFxuIiwgY2FtLT5idWZmZXJzLCBjYW0tPmN1cmJ1ZmYsCisJICAgIGNhbS0+d29ya2J1ZmYpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX2ZyZWVfYnVmZmVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY3BpYTJfZnJlZV9idWZmZXJzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCWlmKGNhbS0+YnVmZmVycykgeworCQlrZnJlZShjYW0tPmJ1ZmZlcnMpOworCQljYW0tPmJ1ZmZlcnMgPSBOVUxMOworCX0KKwlpZihjYW0tPmZyYW1lX2J1ZmZlcikgeworCQlydmZyZWUoY2FtLT5mcmFtZV9idWZmZXIsIGNhbS0+ZnJhbWVfc2l6ZSpjYW0tPm51bV9mcmFtZXMpOworCQljYW0tPmZyYW1lX2J1ZmZlciA9IE5VTEw7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3JlYWQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitsb25nIGNwaWEyX3JlYWQoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sCisJCWNoYXIgX191c2VyICpidWYsIHVuc2lnbmVkIGxvbmcgY291bnQsIGludCBub2Jsb2NrKQoreworCXN0cnVjdCBmcmFtZWJ1ZiAqZnJhbWU7CisJaWYgKCFjb3VudCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWJ1ZikgeworCQlFUlIoIiVzOiBidWZmZXIgTlVMTFxuIixfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWNhbSkgeworCQlFUlIoIiVzOiBJbnRlcm5hbCBlcnJvciwgY2FtZXJhX2RhdGEgTlVMTCFcbiIsX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcCBhbmQgbXVsdGl0aHJlYWQtc2FmZSAqLworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+YnVzeV9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmICghY2FtLT5wcmVzZW50KSB7CisJCUxPRygiJXM6IGNhbWVyYSByZW1vdmVkXG4iLF9fRlVOQ1RJT05fXyk7CisJCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCQlyZXR1cm4gMDsJLyogRU9GICovCisJfQorCisJaWYoIWNhbS0+c3RyZWFtaW5nKSB7CisJCS8qIFN0YXJ0IHN0cmVhbWluZyAqLworCQljcGlhMl91c2Jfc3RyZWFtX3N0YXJ0KGNhbSwKKwkJCQkgICAgICAgY2FtLT5wYXJhbXMuY2FtZXJhX3N0YXRlLnN0cmVhbV9tb2RlKTsKKwl9CisKKwkvKiBDb3B5IGNhbS0+Y3VyYnVmZiBpbiBjYXNlIGl0IGNoYW5nZXMgd2hpbGUgd2UncmUgcHJvY2Vzc2luZyAqLworCWZyYW1lID0gY2FtLT5jdXJidWZmOworCWlmIChub2Jsb2NrICYmIGZyYW1lLT5zdGF0dXMgIT0gRlJBTUVfUkVBRFkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCWlmKGZyYW1lLT5zdGF0dXMgIT0gRlJBTUVfUkVBRFkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYW0tPndxX3N0cmVhbSwKKwkJCSAgICAgICAhY2FtLT5wcmVzZW50IHx8CisJCQkgICAgICAgKGZyYW1lID0gY2FtLT5jdXJidWZmKS0+c3RhdHVzID09IEZSQU1FX1JFQURZKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcCBhbmQgbXVsdGl0aHJlYWQtc2FmZSAqLworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmJ1c3lfbG9jaykpIHsKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCX0KKwkJaWYoIWNhbS0+cHJlc2VudCkgeworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlICovCisJaWYgKGZyYW1lLT5sZW5ndGggPiBjb3VudCkgeworCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBmcmFtZS0+ZGF0YSwgZnJhbWUtPmxlbmd0aCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWNvdW50ID0gZnJhbWUtPmxlbmd0aDsKKworCWZyYW1lLT5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKKworCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9wb2xsCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordW5zaWduZWQgaW50IGNwaWEyX3BvbGwoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJcG9sbF90YWJsZSAqd2FpdCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzPTA7CisKKwlpZighY2FtKSB7CisJCUVSUigiJXM6IEludGVybmFsIGVycm9yLCBjYW1lcmFfZGF0YSBub3QgZm91bmQhXG4iLF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBQT0xMRVJSOworCX0KKworCW11dGV4X2xvY2soJmNhbS0+YnVzeV9sb2NrKTsKKworCWlmKCFjYW0tPnByZXNlbnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCXJldHVybiBQT0xMSFVQOworCX0KKworCWlmKCFjYW0tPnN0cmVhbWluZykgeworCQkvKiBTdGFydCBzdHJlYW1pbmcgKi8KKwkJY3BpYTJfdXNiX3N0cmVhbV9zdGFydChjYW0sCisJCQkJICAgICAgIGNhbS0+cGFyYW1zLmNhbWVyYV9zdGF0ZS5zdHJlYW1fbW9kZSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJcG9sbF93YWl0KGZpbHAsICZjYW0tPndxX3N0cmVhbSwgd2FpdCk7CisJbXV0ZXhfbG9jaygmY2FtLT5idXN5X2xvY2spOworCisJaWYoIWNhbS0+cHJlc2VudCkKKwkJc3RhdHVzID0gUE9MTEhVUDsKKwllbHNlIGlmKGNhbS0+Y3VyYnVmZi0+c3RhdHVzID09IEZSQU1FX1JFQURZKQorCQlzdGF0dXMgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9yZW1hcF9idWZmZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY3BpYTJfcmVtYXBfYnVmZmVyKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwljb25zdCBjaGFyICphZHIgPSAoY29uc3QgY2hhciAqKXZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQtdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X29mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIGFkcjsKKwl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKKworCWlmICghY2FtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCURCRygibW1hcCBvZmZzZXQ6JWxkIHNpemU6JWxkXG4iLCBzdGFydF9vZmZzZXQsIHNpemUpOworCisJLyogbWFrZSB0aGlzIF9yZWFsbHlfIHNtcC1zYWZlICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5idXN5X2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKCFjYW0tPnByZXNlbnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChzaXplID4gY2FtLT5mcmFtZV9zaXplKmNhbS0+bnVtX2ZyYW1lcyAgfHwKKwkgICAgKHN0YXJ0X29mZnNldCAlIGNhbS0+ZnJhbWVfc2l6ZSkgIT0gMCB8fAorCSAgICAoc3RhcnRfb2Zmc2V0K3NpemUgPiBjYW0tPmZyYW1lX3NpemUqY2FtLT5udW1fZnJhbWVzKSkgeworCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcG9zID0gKCh1bnNpZ25lZCBsb25nKSAoY2FtLT5mcmFtZV9idWZmZXIpKSArIHN0YXJ0X29mZnNldDsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IGt2aXJ0X3RvX3BhKHBvcyk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSA+PiBQQUdFX1NISUZULCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCWlmIChzaXplID4gUEFHRV9TSVpFKQorCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCWVsc2UKKwkJCXNpemUgPSAwOworCX0KKworCWNhbS0+bW1hcHBlZCA9IHRydWU7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfcmVnaXN0ZXJzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3JlZ2lzdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYmVjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsNDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBGaWxlbmFtZTogY3BpYTJyZWdpc3RlcnMuaAorICoKKyAqICBDb3B5cmlnaHQgMjAwMSwgU1RNaWNyb2xlY3Ryb25pY3MsIEluYy4KKyAqCisgKiAgRGVzY3JpcHRpb246CisgKiAgICAgRGVmaW5pdGlvbnMgZm9yIHRoZSBDUGlhMiByZWdpc3RlciBzZXQKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIENQSUEyX1JFR0lTVEVSX0hFQURFUgorI2RlZmluZSBDUElBMl9SRUdJU1RFUl9IRUFERVIKKworLyoqKgorICogU3lzdGVtIHJlZ2lzdGVyIHNldCAoQmFuayAwKQorICoqKi8KKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX0RFVklDRV9ISSAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX0RFVklDRV9MTyAgICAgICAgICAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBDUElBMl9TWVNURU1fU1lTVEVNX0NPTlRST0wgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBDUElBMl9TWVNURU1fQ09OVFJPTF9MT1dfUE9XRVIgICAgICAgMHgwMAorI2RlZmluZSBDUElBMl9TWVNURU1fQ09OVFJPTF9ISUdIX1BPV0VSICAgICAgMHgwMQorI2RlZmluZSBDUElBMl9TWVNURU1fQ09OVFJPTF9TVVNQRU5EICAgICAgICAgMHgwMgorI2RlZmluZSBDUElBMl9TWVNURU1fQ09OVFJPTF9WMldfRVJSICAgICAgICAgMHgxMAorI2RlZmluZSBDUElBMl9TWVNURU1fQ09OVFJPTF9SQl9FUlIgICAgICAgICAgMHgxMAorI2RlZmluZSBDUElBMl9TWVNURU1fQ09OVFJPTF9DTEVBUl9FUlIgICAgICAgMHg4MAorCisjZGVmaW5lIENQSUEyX1NZU1RFTV9JTlRfUEFDS0VUX0NUUkwgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBDUElBMl9TWVNURU1fSU5UX1BBQ0tFVF9DVFJMX0VOQUJMRV9TV19YWCAweDAxCisjZGVmaW5lIENQSUEyX1NZU1RFTV9JTlRfUEFDS0VUX0NUUkxfRU5BQkxFX0VPRiAgIDB4MDIKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX0lOVF9QQUNLRVRfQ1RSTF9FTkFCTEVfSU5UMSAgMHgwNAorCisjZGVmaW5lIENQSUEyX1NZU1RFTV9DQUNIRV9DVFJMICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBDUElBMl9TWVNURU1fQ0FDSEVfQ1RSTF9DQUNIRV9SRVNFVCAgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX0NBQ0hFX0NUUkxfQ0FDSEVfRkxVU0ggICAgICAweDAyCisKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX1NFUklBTF9DVFJMICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIENQSUEyX1NZU1RFTV9TRVJJQUxfQ1RSTF9OVUxMX0NNRCAgICAgICAgMHgwMAorI2RlZmluZSBDUElBMl9TWVNURU1fU0VSSUFMX0NUUkxfU1RBUlRfQ01EICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX1NFUklBTF9DVFJMX1NUT1BfQ01EICAgICAgICAweDAyCisjZGVmaW5lIENQSUEyX1NZU1RFTV9TRVJJQUxfQ1RSTF9XUklURV9DTUQgICAgICAgMHgwMworI2RlZmluZSBDUElBMl9TWVNURU1fU0VSSUFMX0NUUkxfUkVBRF9BQ0tfQ01EICAgIDB4MDQKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX1NFUklBTF9DVFJMX1JFQURfTkFDS19DTUQgICAweDA1CisKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX1NFUklBTF9EQVRBICAgICAgICAgICAgICAgICAgICAgMHgwNworCisjZGVmaW5lIENQSUEyX1NZU1RFTV9WUF9TRVJJQUxfQUREUiAgICAgICAgICAgICAgICAgIDB4MDgKKworLyoqKgorICogSTJDIGFkZHJlc3NlcyBmb3IgdmFyaW91cyBkZXZpY2VzIGluIENQaUEyCisgKioqLworI2RlZmluZSBDUElBMl9TWVNURU1fVlBfU0VSSUFMX0FERFJfU0VOU09SICAgICAgICAgICAweDIwCisjZGVmaW5lIENQSUEyX1NZU1RFTV9WUF9TRVJJQUxfQUREUl9WUCAgICAgICAgICAgICAgIDB4ODgKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX1ZQX1NFUklBTF9BRERSXzY3Nl9WUCAgICAgICAgICAgMHg4QQorCisjZGVmaW5lIENQSUEyX1NZU1RFTV9TUEFSRV9SRUcxICAgICAgICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX1NQQVJFX1JFRzIgICAgICAgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBDUElBMl9TWVNURU1fU1BBUkVfUkVHMyAgICAgICAgICAgICAgICAgICAgICAweDBCCisKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX01DX1BPUlRfMCAgICAgICAgICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBDUElBMl9TWVNURU1fTUNfUE9SVF8xICAgICAgICAgICAgICAgICAgICAgICAweDBECisjZGVmaW5lIENQSUEyX1NZU1RFTV9NQ19QT1JUXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MEUKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX01DX1BPUlRfMyAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorCisjZGVmaW5lIENQSUEyX1NZU1RFTV9TVEFUVVNfUEtUICAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX1NUQVRVU19QS1RfRU5EICAgICAgICAgICAgICAgICAgMHgyNworCisjZGVmaW5lIENQSUEyX1NZU1RFTV9ERVNDUklQX1ZJRF9ISSAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgQ1BJQTJfU1lTVEVNX0RFU0NSSVBfVklEX0xPICAgICAgICAgICAgICAgICAgMHgzMQorI2RlZmluZSBDUElBMl9TWVNURU1fREVTQ1JJUF9QSURfSEkgICAgICAgICAgICAgICAgICAweDMyCisjZGVmaW5lIENQSUEyX1NZU1RFTV9ERVNDUklQX1BJRF9MTyAgICAgICAgICAgICAgICAgIDB4MzMKKworI2RlZmluZSBDUElBMl9TWVNURU1fRldfVkVSU0lPTl9ISSAgICAgICAgICAgICAgICAgICAweDM0CisjZGVmaW5lIENQSUEyX1NZU1RFTV9GV19WRVJTSU9OX0xPICAgICAgICAgICAgICAgICAgIDB4MzUKKworI2RlZmluZSBDUElBMl9TWVNURU1fQ0FDSEVfU1RBUlRfSU5ERVggICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIENQSUEyX1NZU1RFTV9DQUNIRV9NQVhfV1JJVEVTICAgICAgICAgICAgICAgIDB4MTAKKworLyoqKgorICogVkMgcmVnaXN0ZXIgc2V0IChCYW5rIDEpCisgKioqLworI2RlZmluZSBDUElBMl9WQ19BU0lDX0lEICAgICAgICAgICAgICAgICAweDgwCisKKyNkZWZpbmUgQ1BJQTJfVkNfQVNJQ19SRVYgICAgICAgICAgICAgICAgMHg4MQorCisjZGVmaW5lIENQSUEyX1ZDX1BXX0NUUkwgICAgICAgICAgICAgICAgIDB4ODIKKyNkZWZpbmUgQ1BJQTJfVkNfUFdfQ1RSTF9DT0xEU1RBUlQgICAgICAweDAxCisjZGVmaW5lIENQSUEyX1ZDX1BXX0NUUkxfQ1BfQ0xLX0VOICAgICAgMHgwMgorI2RlZmluZSBDUElBMl9WQ19QV19DVFJMX1ZQX1JFU0VUX04gICAgIDB4MDQKKyNkZWZpbmUgQ1BJQTJfVkNfUFdfQ1RSTF9WQ19DTEtfRU4gICAgICAweDA4CisjZGVmaW5lIENQSUEyX1ZDX1BXX0NUUkxfVkNfUkVTRVRfTiAgICAgMHgxMAorI2RlZmluZSBDUElBMl9WQ19QV19DVFJMX0dPVE9fU1VTUEVORCAgIDB4MjAKKyNkZWZpbmUgQ1BJQTJfVkNfUFdfQ1RSTF9VRENfU1VTUEVORCAgICAweDQwCisjZGVmaW5lIENQSUEyX1ZDX1BXX0NUUkxfUFdSX0RPV04gICAgICAgMHg4MAorCisjZGVmaW5lIENQSUEyX1ZDX1dBS0VVUCAgICAgICAgICAgICAgICAgICAweDgzCisjZGVmaW5lIENQSUEyX1ZDX1dBS0VVUF9TV19FTkFCTEUgICAgICAgMHgwMQorI2RlZmluZSBDUElBMl9WQ19XQUtFVVBfWFhfRU5BQkxFICAgICAgIDB4MDIKKyNkZWZpbmUgQ1BJQTJfVkNfV0FLRVVQX1NXX0FUV0FLRVVQICAgICAweDA0CisjZGVmaW5lIENQSUEyX1ZDX1dBS0VVUF9YWF9BVFdBS0VVUCAgICAgMHgwOAorCisjZGVmaW5lIENQSUEyX1ZDX0NMT0NLX0NUUkwgICAgICAgICAgICAgICAweDg0CisjZGVmaW5lIENQSUEyX1ZDX0NMT0NLX0NUUkxfVEVTVFVQNzIgICAgMHgwMQorCisjZGVmaW5lIENQSUEyX1ZDX0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgMHg4OAorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1hYX0lFICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfVkNfSU5UX0VOQUJMRV9TV19JRSAgICAgICAweDAyCisjZGVmaW5lIENQSUEyX1ZDX0lOVF9FTkFCTEVfVkNfSUUgICAgICAgMHgwNAorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1VTQkRBVEFfSUUgIDB4MDgKKyNkZWZpbmUgQ1BJQTJfVkNfSU5UX0VOQUJMRV9VU0JTRVRVUF9JRSAweDEwCisjZGVmaW5lIENQSUEyX1ZDX0lOVF9FTkFCTEVfVVNCQ0ZHX0lFICAgMHgyMAorCisjZGVmaW5lIENQSUEyX1ZDX0lOVF9GTEFHICAgICAgICAgICAgICAgICAgMHg4OQorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1hYX0ZMQUcgICAgICAgMHgwMQorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1NXX0ZMQUcgICAgICAgMHgwMgorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1ZDX0ZMQUcgICAgICAgMHgwNAorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1VTQkRBVEFfRkxBRyAgMHgwOAorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1VTQlNFVFVQX0ZMQUcgMHgxMAorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1VTQkNGR19GTEFHICAgMHgyMAorI2RlZmluZSBDUElBMl9WQ19JTlRfRU5BQkxFX1NFVF9SRVNFVF9CSVQgMHg4MAorCisjZGVmaW5lIENQSUEyX1ZDX0lOVF9TVEFURSAgICAgICAgICAgICAgICAgMHg4QQorI2RlZmluZSBDUElBMl9WQ19JTlRfU1RBVEVfWFhfU1RBVEUgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfVkNfSU5UX1NUQVRFX1NXX1NUQVRFICAgICAweDAyCisKKyNkZWZpbmUgQ1BJQTJfVkNfTVBfRElSICAgICAgICAgICAgICAgICAgICAweDkwCisjZGVmaW5lIENQSUEyX1ZDX01QX0RJUl9JTlBVVCAgICAgICAgICAgMHgwMAorI2RlZmluZSBDUElBMl9WQ19NUF9ESVJfT1VUUFVUICAgICAgICAgIDB4MDEKKworI2RlZmluZSBDUElBMl9WQ19NUF9EQVRBICAgICAgICAgICAgICAgICAgIDB4OTEKKworI2RlZmluZSBDUElBMl9WQ19EUF9DVFJMICAgICAgICAgICAgICAgICAgIDB4OTgKKyNkZWZpbmUgQ1BJQTJfVkNfRFBfQ1RSTF9NT0RFXzAgICAgICAgICAweDAwCisjZGVmaW5lIENQSUEyX1ZDX0RQX0NUUkxfTU9ERV9BICAgICAgICAgMHgwMQorI2RlZmluZSBDUElBMl9WQ19EUF9DVFJMX01PREVfQiAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ1BJQTJfVkNfRFBfQ1RSTF9NT0RFX0MgICAgICAgICAweDAzCisjZGVmaW5lIENQSUEyX1ZDX0RQX0NUUkxfRkFLRV9GU1QgICAgICAgMHgwNAorCisjZGVmaW5lIENQSUEyX1ZDX0FEX0NUUkwgICAgICAgICAgICAgICAgICAgMHg5OQorI2RlZmluZSBDUElBMl9WQ19BRF9DVFJMX1NSQ18wICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ1BJQTJfVkNfQURfQ1RSTF9TUkNfRElHSV9BICAgICAweDAxCisjZGVmaW5lIENQSUEyX1ZDX0FEX0NUUkxfU1JDX1JFRyAgICAgICAgMHgwMgorI2RlZmluZSBDUElBMl9WQ19BRF9DVFJMX0RTVF9VU0IgICAgICAgIDB4MDAKKyNkZWZpbmUgQ1BJQTJfVkNfQURfQ1RSTF9EU1RfUkVHICAgICAgICAweDA0CisKKyNkZWZpbmUgQ1BJQTJfVkNfQURfVEVTVF9JTiAgICAgICAgICAgICAgICAweDlCCisKKyNkZWZpbmUgQ1BJQTJfVkNfQURfVEVTVF9PVVQgICAgICAgICAgICAgICAweDlDCisKKyNkZWZpbmUgQ1BJQTJfVkNfQURfU1RBVFVTICAgICAgICAgICAgICAgICAweDlECisjZGVmaW5lIENQSUEyX1ZDX0FEX1NUQVRVU19FTVBUWSAgICAgICAgMHgwMQorI2RlZmluZSBDUElBMl9WQ19BRF9TVEFUVVNfRlVMTCAgICAgICAgIDB4MDIKKworI2RlZmluZSBDUElBMl9WQ19EUF9EQVRBICAgICAgICAgICAgICAgICAgIDB4OUUKKworI2RlZmluZSBDUElBMl9WQ19TVF9DVFJMICAgICAgICAgICAgICAgICAgIDB4QTAKKyNkZWZpbmUgQ1BJQTJfVkNfU1RfQ1RSTF9TUkNfVkMgICAgICAgICAweDAwCisjZGVmaW5lIENQSUEyX1ZDX1NUX0NUUkxfU1JDX0RQICAgICAgICAgMHgwMQorI2RlZmluZSBDUElBMl9WQ19TVF9DVFJMX1NSQ19SRUcgICAgICAgIDB4MDIKKworI2RlZmluZSBDUElBMl9WQ19TVF9DVFJMX1JBV19TRUxFQ1QgICAgIDB4MDQKKworI2RlZmluZSBDUElBMl9WQ19TVF9DVFJMX0RTVF9VU0IgICAgICAgIDB4MDAKKyNkZWZpbmUgQ1BJQTJfVkNfU1RfQ1RSTF9EU1RfRFAgICAgICAgICAweDA4CisjZGVmaW5lIENQSUEyX1ZDX1NUX0NUUkxfRFNUX1JFRyAgICAgICAgMHgxMAorCisjZGVmaW5lIENQSUEyX1ZDX1NUX0NUUkxfRklGT19FTkFCTEUgICAgMHgyMAorI2RlZmluZSBDUElBMl9WQ19TVF9DVFJMX0VPRl9ERVRFQ1QgICAgIDB4NDAKKworI2RlZmluZSBDUElBMl9WQ19TVF9URVNUICAgICAgICAgICAgICAgICAgIDB4QTEKKyNkZWZpbmUgQ1BJQTJfVkNfU1RfVEVTVF9NT0RFX01BTlVBTCAgICAweDAwCisjZGVmaW5lIENQSUEyX1ZDX1NUX1RFU1RfTU9ERV9JTkNSRU1FTlQgMHgwMgorCisjZGVmaW5lIENQSUEyX1ZDX1NUX1RFU1RfQVVUT19GSUxMICAgICAgMHgwOAorCisjZGVmaW5lIENQSUEyX1ZDX1NUX1RFU1RfUkVQRUFUX0ZJRk8gICAgMHgxMAorCisjZGVmaW5lIENQSUEyX1ZDX1NUX1RFU1RfSU4gICAgICAgICAgICAgICAgMHhBMgorCisjZGVmaW5lIENQSUEyX1ZDX1NUX1RFU1RfT1VUICAgICAgICAgICAgICAgMHhBMworCisjZGVmaW5lIENQSUEyX1ZDX1NUX1NUQVRVUyAgICAgICAgICAgICAgICAgMHhBNAorI2RlZmluZSBDUElBMl9WQ19TVF9TVEFUVVNfRU1QVFkgICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfVkNfU1RfU1RBVFVTX0ZVTEwgICAgICAgICAweDAyCisKKyNkZWZpbmUgQ1BJQTJfVkNfU1RfRlJBTUVfREVURUNUXzEgICAgICAgICAweEE1CisKKyNkZWZpbmUgQ1BJQTJfVkNfU1RfRlJBTUVfREVURUNUXzIgICAgICAgICAweEE2CisKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX0NUUkwgICAgICAgICAgICAgICAgICAgIDB4QTgKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX0NUUkxfQ01EX1NUQUxMRUQgICAgICAweDAxCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9DVFJMX0NNRF9SRUFEWSAgICAgICAgMHgwMgorI2RlZmluZSBDUElBMl9WQ19VU0JfQ1RSTF9DTURfU1RBVFVTICAgICAgIDB4MDQKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX0NUUkxfQ01EX1NUQVRVU19ESVIgICAweDA4CisjZGVmaW5lIENQSUEyX1ZDX1VTQl9DVFJMX0NNRF9OT19DTEFTSCAgICAgMHgxMAorI2RlZmluZSBDUElBMl9WQ19VU0JfQ1RSTF9DTURfTUlDUk9fQUNDRVNTIDB4ODAKKworI2RlZmluZSBDUElBMl9WQ19VU0JfU1RSTSAgICAgICAgICAgICAgICAgIDB4QTkKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX1NUUk1fSVNPX0VOQUJMRSAgICAweDAxCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVFJNX0JMS19FTkFCTEUgICAgMHgwMgorI2RlZmluZSBDUElBMl9WQ19VU0JfU1RSTV9JTlRfRU5BQkxFICAgIDB4MDQKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX1NUUk1fQVVEX0VOQUJMRSAgICAweDA4CisKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweEFBCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVEFUVVNfQ01EX0lOX1BST0dSRVNTICAweDAxCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVEFUVVNfQ01EX1NUQVRVU19TVEFMTCAweDAyCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVEFUVVNfQ01EX0hBTkRTSEFLRSAgICAweDA0CisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVEFUVVNfQ01EX09WRVJSSURFICAgICAweDA4CisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVEFUVVNfQ01EX0ZJRk9fQlVTWSAgICAweDEwCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVEFUVVNfQlVMS19SRVBFQVRfVFhOICAweDIwCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVEFUVVNfQ09ORklHX0RPTkUgICAgICAweDQwCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TVEFUVVNfVVNCX1NVU1BFTkQgICAgICAweDgwCisKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX0NNRFcgICAgICAgICAgICAgICAgICAgMHhBQgorCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9EQVRBUlcgICAgICAgICAgICAgICAgIDB4QUMKKworI2RlZmluZSBDUElBMl9WQ19VU0JfSU5GTyAgICAgICAgICAgICAgICAgICAweEFECisKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX0NPTkZJRyAgICAgICAgICAgICAgICAgMHhBRQorCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9TRVRUSU5HUyAgICAgICAgICAgICAgICAgIDB4QUYKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX1NFVFRJTkdTX0NPTkZJR19NQVNLICAgIDB4MDMKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX1NFVFRJTkdTX0lOVEVSRkFDRV9NQVNLIDB4MEMKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX1NFVFRJTkdTX0FMVEVSTkFURV9NQVNLIDB4NzAKKworI2RlZmluZSBDUElBMl9WQ19VU0JfSVNPTElNICAgICAgICAgICAgICAgICAgMHhCMAorCisjZGVmaW5lIENQSUEyX1ZDX1VTQl9JU09GQUlMUyAgICAgICAgICAgICAgICAweEIxCisKKyNkZWZpbmUgQ1BJQTJfVkNfVVNCX0lTT01BWFBLVEhJICAgICAgICAgICAgIDB4QjIKKworI2RlZmluZSBDUElBMl9WQ19VU0JfSVNPTUFYUEtUTE8gICAgICAgICAgICAgMHhCMworCisjZGVmaW5lIENQSUEyX1ZDX1YyV19DVFJMICAgICAgICAgICAgICAgICAgICAweEI4CisjZGVmaW5lIENQSUEyX1ZDX1YyV19TRUxFQ1QgICAgICAgICAgICAgICAweDAxCisKKyNkZWZpbmUgQ1BJQTJfVkNfVjJXX1NDTCAgICAgICAgICAgICAgICAgICAgIDB4QjkKKworI2RlZmluZSBDUElBMl9WQ19WMldfU0RBICAgICAgICAgICAgICAgICAgICAgMHhCQQorCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0NUUkwgICAgICAgICAgICAgICAgICAgICAweEMwCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0NUUkxfUlVOICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0NUUkxfU0lOR0xFU0hPVCAgICAgICAweDAyCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0NUUkxfSURMSU5HICAgICAgICAgICAweDA0CisjZGVmaW5lIENQSUEyX1ZDX1ZDX0NUUkxfSU5ISUJJVF9IX1RBQkxFUyAweDEwCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0NUUkxfSU5ISUJJVF9RX1RBQkxFUyAweDIwCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0NUUkxfSU5ISUJJVF9QUklWQVRFICAweDQwCisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfUkVTVEFSVF9JVkFMX0hJICAgICAgICAgIDB4QzEKKworI2RlZmluZSBDUElBMl9WQ19WQ19SRVNUQVJUX0lWQUxfTE8gICAgICAgICAgMHhDMgorCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAweEMzCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0ZPUk1BVF9VRklSU1QgICAgICAgICAweDAxCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0ZPUk1BVF9NT05PICAgICAgICAgICAweDAyCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0ZPUk1BVF9ERUNJTUFUSU5HICAgICAweDA0CisjZGVmaW5lIENQSUEyX1ZDX1ZDX0ZPUk1BVF9TSE9SVExJTkUgICAgICAweDA4CisjZGVmaW5lIENQSUEyX1ZDX1ZDX0ZPUk1BVF9TRUxGVEVTVCAgICAgICAweDEwCisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfQ0xPQ0tTICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzQKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfQ0xPQ0tTX0NMS0RJVl9NQVNLICAgICAgICAweDAzCisjZGVmaW5lIENQSUEyX1ZDX1ZDXzY3Ml9DTE9DS1NfQ0lGX0RJVl9CWV8zICAgMHgwNAorI2RlZmluZSBDUElBMl9WQ19WQ182NzJfQ0xPQ0tTX1NDQUxJTkcgICAgICAgIDB4MDgKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfQ0xPQ0tTX0xPR0RJVjAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfQ0xPQ0tTX0xPR0RJVjEgICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfQ0xPQ0tTX0xPR0RJVjIgICAgICAgIDB4MDIKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfQ0xPQ0tTX0xPR0RJVjMgICAgICAgIDB4MDMKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfNjc2X0NMT0NLU19DSUZfRElWX0JZXzMgICAweDA4CisjZGVmaW5lIENQSUEyX1ZDX1ZDXzY3Nl9DTE9DS1NfU0NBTElORwkgICAgICAweDEwCisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSUhTSVpFX0xPICAgICAgICAgICAgICAgIDB4QzUKKworI2RlZmluZSBDUElBMl9WQ19WQ19YTElNX0hJICAgICAgICAgICAgICAgICAgMHhDNgorCisjZGVmaW5lIENQSUEyX1ZDX1ZDX1hMSU1fTE8gICAgICAgICAgICAgICAgICAweEM3CisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfWUxJTV9ISSAgICAgICAgICAgICAgICAgIDB4QzgKKworI2RlZmluZSBDUElBMl9WQ19WQ19ZTElNX0xPICAgICAgICAgICAgICAgICAgMHhDOQorCisjZGVmaW5lIENQSUEyX1ZDX1ZDX09IU0laRSAgICAgICAgICAgICAgICAgICAweENBCisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfT1ZTSVpFICAgICAgICAgICAgICAgICAgIDB4Q0IKKworI2RlZmluZSBDUElBMl9WQ19WQ19IQ1JPUCAgICAgICAgICAgICAgICAgICAgMHhDQworCisjZGVmaW5lIENQSUEyX1ZDX1ZDX1ZDUk9QICAgICAgICAgICAgICAgICAgICAweENECisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSFBIQVNFICAgICAgICAgICAgICAgICAgIDB4Q0UKKworI2RlZmluZSBDUElBMl9WQ19WQ19WUEhBU0UgICAgICAgICAgICAgICAgICAgMHhDRgorCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0hJU1BBTiAgICAgICAgICAgICAgICAgICAweEQwCisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfVklTUEFOICAgICAgICAgICAgICAgICAgIDB4RDEKKworI2RlZmluZSBDUElBMl9WQ19WQ19ISUNST1AgICAgICAgICAgICAgICAgICAgMHhEMgorCisjZGVmaW5lIENQSUEyX1ZDX1ZDX1ZJQ1JPUCAgICAgICAgICAgICAgICAgICAweEQzCisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSEZSQUNUICAgICAgICAgICAgICAgICAgIDB4RDQKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSEZSQUNUX0RFTl9NQVNLICAgICAgIDB4MEYKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSEZSQUNUX05VTV9NQVNLICAgICAgIDB4RjAKKworI2RlZmluZSBDUElBMl9WQ19WQ19WRlJBQ1QgICAgICAgICAgICAgICAgICAgMHhENQorI2RlZmluZSBDUElBMl9WQ19WQ19WRlJBQ1RfREVOX01BU0sgICAgICAgMHgwRgorI2RlZmluZSBDUElBMl9WQ19WQ19WRlJBQ1RfTlVNX01BU0sgICAgICAgMHhGMAorCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0pQRUdfT1BUICAgICAgICAgICAgICAgICAgICAgIDB4RDYKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSlBFR19PUFRfRE9VQkxFX1NRVUVFWkUgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSlBFR19PUFRfTk9fRENfQVVUT19TUVVFRVpFIDB4MDIKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSlBFR19PUFRfQVVUT19TUVVFRVpFICAgICAgIDB4MDQKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfSlBFR19PUFRfREVGQVVMVCAgICAgIChDUElBMl9WQ19WQ19KUEVHX09QVF9ET1VCTEVfU1FVRUVaRXxcCisJCQkJCSAgIENQSUEyX1ZDX1ZDX0pQRUdfT1BUX0FVVE9fU1FVRUVaRSkKKworCisjZGVmaW5lIENQSUEyX1ZDX1ZDX0NSRUVQX1BFUklPRCAgICAgICAgICAgICAweEQ3CisjZGVmaW5lIENQSUEyX1ZDX1ZDX1VTRVJfU1FVRUVaRSAgICAgICAgICAgICAweEQ4CisjZGVmaW5lIENQSUEyX1ZDX1ZDX1RBUkdFVF9LQiAgICAgICAgICAgICAgICAweEQ5CisKKyNkZWZpbmUgQ1BJQTJfVkNfVkNfQVVUT19TUVVFRVpFICAgICAgICAgICAgIDB4RTYKKworCisvKioqCisgKiBWUCByZWdpc3RlciBzZXQgKEJhbmsgMikKKyAqKiovCisjZGVmaW5lIENQSUEyX1ZQX0RFVklDRUggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BJQTJfVlBfREVWSUNFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIENQSUEyX1ZQX1NZU1RFTVNUQVRFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ1BJQTJfVlBfU1lTVEVNU1RBVEVfSEtfQUxJVkUgICAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIENQSUEyX1ZQX1NZU1RFTUNUUkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQ1BJQTJfVlBfU1lTVEVNQ1RSTF9SRVFfQ0xFQVJfRVJST1IgICAgICAgMHg4MAorI2RlZmluZSBDUElBMl9WUF9TWVNURU1DVFJMX1BPV0VSX0RPV05fUExMICAgICAgICAweDIwCisjZGVmaW5lIENQSUEyX1ZQX1NZU1RFTUNUUkxfUkVRX1NVU1BFTkRfU1RBVEUgICAgIDB4MTAKKyNkZWZpbmUgQ1BJQTJfVlBfU1lTVEVNQ1RSTF9SRVFfU0VSSUFMX1dBS0VVUCAgICAgMHgwOAorI2RlZmluZSBDUElBMl9WUF9TWVNURU1DVFJMX1JFUV9BVVRPTE9BRCAgICAgICAgICAweDA0CisjZGVmaW5lIENQSUEyX1ZQX1NZU1RFTUNUUkxfSEtfQ09OVFJPTCAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ1BJQTJfVlBfU1lTVEVNQ1RSTF9QT1dFUl9DT05UUk9MICAgICAgICAgMHgwMQorCisjZGVmaW5lIENQSUEyX1ZQX1NFTlNPUl9GTEFHUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQ1BJQTJfVlBfU0VOU09SX0ZMQUdTXzQwNCAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNDA3ICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENQSUEyX1ZQX1NFTlNPUl9GTEFHU180MDkgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQ1BJQTJfVlBfU0VOU09SX0ZMQUdTXzQxMCAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNTAwICAgICAgICAgICAgICAgICAweDEwCisKKyNkZWZpbmUgQ1BJQTJfVlBfU0VOU09SX1JFViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNgorCisjZGVmaW5lIENQSUEyX1ZQX0RFVklDRV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgQ1BJQTJfVlBfREVWSUNFX0NPTkZJR19TRVJJQUxfQlJJREdFICAgICAgMHgwMQorCisjZGVmaW5lIENQSUEyX1ZQX0dQSU9fRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQ1BJQTJfVlBfR1BJT19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBDUElBMl9WUF9HUElPX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAweDAwCisKKyNkZWZpbmUgQ1BJQTJfVlBfR1BJT19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOQorCisjZGVmaW5lIENQSUEyX1ZQX1JBTV9BRERSX0ggICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgQ1BJQTJfVlBfUkFNX0FERFJfTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBDUElBMl9WUF9SQU1fREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDCisKKyNkZWZpbmUgQ1BJQTJfVlBfUEFUQ0hfUkVWICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorCisjZGVmaW5lIENQSUEyX1ZQNF9VU0VSX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIENQSUEyX1ZQNV9VU0VSX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIENQSUEyX1ZQX1VTRVJfTU9ERV9DSUYgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfVlBfVVNFUl9NT0RFX1FDSUZEUyAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBDUElBMl9WUF9VU0VSX01PREVfUUNJRlBUQyAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIENQSUEyX1ZQX1VTRVJfTU9ERV9RVkdBRFMgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQ1BJQTJfVlBfVVNFUl9NT0RFX1FWR0FQVEMgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBDUElBMl9WUF9VU0VSX01PREVfVkdBICAgICAgICAgICAgICAgICAgICAweDIwCisKKyNkZWZpbmUgQ1BJQTJfVlA0X0ZSQU1FUkFURV9SRVFVRVNUICAgICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIENQSUEyX1ZQNV9GUkFNRVJBVEVfUkVRVUVTVCAgICAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBDUElBMl9WUF9GUkFNRVJBVEVfNjAgICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIENQSUEyX1ZQX0ZSQU1FUkFURV81MCAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQ1BJQTJfVlBfRlJBTUVSQVRFXzMwICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBDUElBMl9WUF9GUkFNRVJBVEVfMjUgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIENQSUEyX1ZQX0ZSQU1FUkFURV8xNSAgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQ1BJQTJfVlBfRlJBTUVSQVRFXzEyXzUgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBDUElBMl9WUF9GUkFNRVJBVEVfN181ICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENQSUEyX1ZQX0ZSQU1FUkFURV82XzI1ICAgICAgICAgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBDUElBMl9WUDRfVVNFUl9FRkZFQ1RTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgQ1BJQTJfVlA1X1VTRVJfRUZGRUNUUyAgICAgICAgICAgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIENQSUEyX1ZQX1VTRVJfRUZGRUNUU19DT0xCQVJTICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfVlBfVVNFUl9FRkZFQ1RTX0NPTEJBUlNfR1JBRCAgICAgICAgMHgwMgorI2RlZmluZSBDUElBMl9WUF9VU0VSX0VGRkVDVFNfTUlSUk9SICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIENQSUEyX1ZQX1VTRVJfRUZGRUNUU19GTElQICAgICAgICAgICAgICAgIDB4NDAgIC8vIFZQNSBvbmx5CisKKy8qIE5PVEU6IENQSUEyX1ZQX0VYUE9TVVJFX01PREVTIHNoYXJlcyB0aGUgc2FtZSByZWdpc3RlciBhcyBWUDUgVXNlcgorICogRWZmZWN0cyAqLworI2RlZmluZSBDUElBMl9WUF9FWFBPU1VSRV9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBDUElBMl9WUF9FWFBPU1VSRV9NT0RFU19JTkhJQklUX0ZMSUNLRVIgICAweDIwCisjZGVmaW5lIENQSUEyX1ZQX0VYUE9TVVJFX01PREVTX0NPTVBJTEVfRVhQICAgICAgIDB4MTAKKworI2RlZmluZSBDUElBMl9WUDRfRVhQT1NVUkVfVEFSR0VUICAgICAgICAgICAgICAgICAgICAgMHgxNiAgICAvLyBWUDQKKyNkZWZpbmUgQ1BJQTJfVlA1X0VYUE9TVVJFX1RBUkdFVAkJICAgICAgMHgyMCAgICAvLyBWUDUKKworI2RlZmluZSBDUElBMl9WUF9GTElDS0VSX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgMHgxQgorI2RlZmluZSBDUElBMl9WUF9GTElDS0VSX01PREVTXzUwSFogICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIENQSUEyX1ZQX0ZMSUNLRVJfTU9ERVNfQ1VTVE9NX0ZMVF9GRlJFUSAgIDB4NDAKKyNkZWZpbmUgQ1BJQTJfVlBfRkxJQ0tFUl9NT0RFU19ORVZFUl9GTElDS0VSICAgICAgMHgyMAorI2RlZmluZSBDUElBMl9WUF9GTElDS0VSX01PREVTX0lOSElCSVRfUlVCICAgICAgICAweDEwCisjZGVmaW5lIENQSUEyX1ZQX0ZMSUNLRVJfTU9ERVNfQURKVVNUX0xJTkVfRlJFUSAgIDB4MDgKKyNkZWZpbmUgQ1BJQTJfVlBfRkxJQ0tFUl9NT0RFU19DVVNUT01fSU5UX0ZGUkVRICAgMHgwNAorCisjZGVmaW5lIENQSUEyX1ZQX1VNSVNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFECisjZGVmaW5lIENQSUEyX1ZQX1VNSVNDX0ZPUkNFX01PTk8gICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgQ1BJQTJfVlBfVU1JU0NfRk9SQ0VfSURfTUFTSyAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBDUElBMl9WUF9VTUlTQ19JTkhJQklUX0FVVE9fRkdTICAgICAgICAgICAweDIwCisjZGVmaW5lIENQSUEyX1ZQX1VNSVNDX0lOSElCSVRfQVVUT19ESU1TICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQ1BJQTJfVlBfVU1JU0NfT1BUX0ZPUl9TRU5TT1JfRFMgICAgICAgICAgMHgwNAorI2RlZmluZSBDUElBMl9WUF9VTUlTQ19JTkhJQklUX0FVVE9fTU9ERV9JTlQgICAgICAweDAyCisKKyNkZWZpbmUgQ1BJQTJfVlA1X0FOVElGTEtSU0VUVVAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIgIC8vMzQKKworI2RlZmluZSBDUElBMl9WUF9JTlRFUlBPTEFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBDUElBMl9WUF9JTlRFUlBPTEFUSU9OX0VWRU5fRklSU1QgICAgICAgICAweDQwCisjZGVmaW5lIENQSUEyX1ZQX0lOVEVSUE9MQVRJT05fSEpPRyAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQ1BJQTJfVlBfSU5URVJQT0xBVElPTl9WSk9HICAgICAgICAgICAgICAgMHgxMAorCisjZGVmaW5lIENQSUEyX1ZQX0dBTU1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1CisjZGVmaW5lIENQSUEyX1ZQX0RFRkFVTFRfR0FNTUEgICAgICAgICAgICAgICAgICAgIDB4MTAKKworI2RlZmluZSBDUElBMl9WUF9ZUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNgorCisjZGVmaW5lIENQSUEyX1ZQX1NBVFVSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAweDI3CisKKyNkZWZpbmUgQ1BJQTJfVlA1X01ZQkxBQ0tfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgIDB4M0EgICAvLzU4CisjZGVmaW5lIENQSUEyX1ZQNV9NQ1lSQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNCICAgLy81OQorI2RlZmluZSBDUElBMl9WUDVfTVlDRUlMSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQyAgIC8vNjAKKyNkZWZpbmUgQ1BJQTJfVlA1X01DVVZTQVRVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4M0QgICAvLzYxCisKKworI2RlZmluZSBDUElBMl9WUF9SRUhBU0hfVkFMVUVTICAgICAgICAgICAgICAgICAgICAgICAgMHg2MAorCisKKy8qKioKKyAqIENvbW1vbiBzZW5zb3IgcmVnaXN0ZXJzCisgKioqLworI2RlZmluZSBDUElBMl9TRU5TT1JfREVWSUNFX0ggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBDUElBMl9TRU5TT1JfREVWSUNFX0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIENQSUEyX1NFTlNPUl9EQVRBX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAweDE2CisjZGVmaW5lIENQSUEyX1NFTlNPUl9EQVRBX0ZPUk1BVF9ITUlSUk9SICAgICAgMHgwOAorI2RlZmluZSBDUElBMl9TRU5TT1JfREFUQV9GT1JNQVRfVk1JUlJPUiAgICAgIDB4MTAKKworI2RlZmluZSBDUElBMl9TRU5TT1JfQ1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3NgorI2RlZmluZSBDUElBMl9TRU5TT1JfQ1IxX1NUQU5EX0JZICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BJQTJfU0VOU09SX0NSMV9ET1dOX1JBTVBfR0VOICAgICAgICAweDAyCisjZGVmaW5lIENQSUEyX1NFTlNPUl9DUjFfRE9XTl9DT0xVTU5fQURDICAgICAgMHgwNAorI2RlZmluZSBDUElBMl9TRU5TT1JfQ1IxX0RPV05fQ0FCX1JFR1VMQVRPUiAgIDB4MDgKKyNkZWZpbmUgQ1BJQTJfU0VOU09SX0NSMV9ET1dOX0FVRElPX1JFR1VMQVRPUiAweDEwCisjZGVmaW5lIENQSUEyX1NFTlNPUl9DUjFfRE9XTl9WUlRfQU1QICAgICAgICAgMHgyMAorI2RlZmluZSBDUElBMl9TRU5TT1JfQ1IxX0RPV05fQkFORF9HQVAgICAgICAgIDB4NDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3VzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGRhMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl91c2IuYwpAQCAtMCwwICsxLDkwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgRmlsZW5hbWU6IGNwaWEyX3VzYi5jCisgKgorICogIENvcHlyaWdodCAyMDAxLCBTVE1pY3JvbGVjdHJvbmljcywgSW5jLgorICogICAgICBDb250YWN0OiAgc3RldmUubWlsbGVyQHN0LmNvbQorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqICAgICBUaGlzIGlzIGEgVVNCIGRyaXZlciBmb3IgQ1BpYTIgYmFzZWQgdmlkZW8gY2FtZXJhcy4KKyAqICAgICBUaGUgaW5mcmFzdHJ1Y3R1cmUgb2YgdGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIGNwaWEgdXNiIGRyaXZlciBieQorICogICAgIEpvY2hlbiBTY2hhcnJsYWNoIGFuZCBKb2hhbm5lcyBFcmRmZWxkdC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICBTdHJpcHBlZCBvZiAyLjQgc3R1ZmYgcmVhZHkgZm9yIG1haW4ga2VybmVsIHN1Ym1pdCBieQorICoJCUFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImNwaWEyLmgiCisKK3N0YXRpYyBpbnQgZnJhbWVfc2l6ZXNbXSA9IHsKKwkwLAkvLyBVU0JJRl9DTURPTkxZCisJMCwgCS8vIFVTQklGX0JVTEsKKwkxMjgsIAkvLyBVU0JJRl9JU09fMQorCTM4NCwgCS8vIFVTQklGX0lTT18yCisJNjQwLCAJLy8gVVNCSUZfSVNPXzMKKwk3NjgsIAkvLyBVU0JJRl9JU09fNAorCTg5NiwgCS8vIFVTQklGX0lTT181CisJMTAyMywgCS8vIFVTQklGX0lTT182Cit9OworCisjZGVmaW5lIEZSQU1FU19QRVJfREVTQyAgICAxMAorI2RlZmluZSBGUkFNRV9TSVpFX1BFUl9ERVNDICAgZnJhbWVfc2l6ZXNbY2FtLT5jdXJfYWx0XQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2ZyYW1lKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK3N0YXRpYyB2b2lkIGNwaWEyX3VzYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICopOworc3RhdGljIGludCBjcGlhMl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgY3BpYTJfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCitzdGF0aWMgdm9pZCBmcmVlX3NidWZzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK3N0YXRpYyB2b2lkIGFkZF9BUFBuKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKTsKK3N0YXRpYyB2b2lkIGFkZF9DT00oc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pOworc3RhdGljIGludCBzdWJtaXRfdXJicyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSk7CitzdGF0aWMgaW50IHNldF9hbHRlcm5hdGUoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHVuc2lnbmVkIGludCBhbHQpOworc3RhdGljIGludCBjb25maWd1cmVfdHJhbnNmZXJfbW9kZShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgdW5zaWduZWQgaW50IGFsdCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjcGlhMl9pZF90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDU1MywgMHgwMTAwKX0sCisJe1VTQl9ERVZJQ0UoMHgwNTUzLCAweDAxNDApfSwKKwl7VVNCX0RFVklDRSgweDA1NTMsIDB4MDE1MSl9LCAgLyogU1RWMDY3NiAqLworCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY3BpYTJfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3BpYTJfZHJpdmVyID0geworCS5uYW1lCQk9ICJjcGlhMiIsCisJLnByb2JlCQk9IGNwaWEyX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IGNwaWEyX3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IGNwaWEyX2lkX3RhYmxlCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgcHJvY2Vzc19mcmFtZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NfZnJhbWUoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJc3RhdGljIGludCBmcmFtZV9jb3VudCA9IDA7CisKKwl1bnNpZ25lZCBjaGFyICppbmJ1ZmYgPSBjYW0tPndvcmtidWZmLT5kYXRhOworCisJREJHKCJQcm9jZXNzaW5nIGZyYW1lICMlZCwgY3VycmVudDolZFxuIiwKKwkgICAgY2FtLT53b3JrYnVmZi0+bnVtLCBjYW0tPmN1cmJ1ZmYtPm51bSk7CisKKwlpZihjYW0tPndvcmtidWZmLT5sZW5ndGggPiBjYW0tPndvcmtidWZmLT5tYXhfbGVuZ3RoKQorCQljYW0tPndvcmtidWZmLT5tYXhfbGVuZ3RoID0gY2FtLT53b3JrYnVmZi0+bGVuZ3RoOworCisJaWYgKChpbmJ1ZmZbMF0gPT0gMHhGRikgJiYgKGluYnVmZlsxXSA9PSAweEQ4KSkgeworCQlmcmFtZV9jb3VudCsrOworCX0gZWxzZSB7CisJCWNhbS0+d29ya2J1ZmYtPnN0YXR1cyA9IEZSQU1FX0VSUk9SOworCQlEQkcoIlN0YXJ0IG9mIGZyYW1lIG5vdCBmb3VuZFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKioqCisJICogTm93IHRoZSBvdXRwdXQgYnVmZmVyIHNob3VsZCBoYXZlIGEgSlBFRyBpbWFnZSBpbiBpdC4KKwkgKioqLworCWlmKCFjYW0tPmZpcnN0X2ltYWdlX3NlZW4pIHsKKwkJLyogQWx3YXlzIHNraXAgdGhlIGZpcnN0IGltYWdlIGFmdGVyIHN0cmVhbWluZworCQkgKiBzdGFydHMuIEl0IGlzIGFsbW9zdCBjZXJ0YWlubHkgY29ycnVwdC4gKi8KKwkJY2FtLT5maXJzdF9pbWFnZV9zZWVuID0gMTsKKwkJY2FtLT53b3JrYnVmZi0+c3RhdHVzID0gRlJBTUVfRU1QVFk7CisJCXJldHVybjsKKwl9CisJaWYgKGNhbS0+d29ya2J1ZmYtPmxlbmd0aCA+IDMpIHsKKwkJaWYoY2FtLT5tbWFwcGVkICYmCisJCSAgIGNhbS0+d29ya2J1ZmYtPmxlbmd0aCA8IGNhbS0+d29ya2J1ZmYtPm1heF9sZW5ndGgpIHsKKwkJCS8qIE5vIGp1bmsgaW4gdGhlIGJ1ZmZlcnMgKi8KKwkJCW1lbXNldChjYW0tPndvcmtidWZmLT5kYXRhK2NhbS0+d29ya2J1ZmYtPmxlbmd0aCwKKwkJCSAgICAgICAwLCBjYW0tPndvcmtidWZmLT5tYXhfbGVuZ3RoLQorCQkJCSAgY2FtLT53b3JrYnVmZi0+bGVuZ3RoKTsKKwkJfQorCQljYW0tPndvcmtidWZmLT5tYXhfbGVuZ3RoID0gY2FtLT53b3JrYnVmZi0+bGVuZ3RoOworCQljYW0tPndvcmtidWZmLT5zdGF0dXMgPSBGUkFNRV9SRUFEWTsKKworCQlpZighY2FtLT5tbWFwcGVkICYmIGNhbS0+bnVtX2ZyYW1lcyA+IDIpIHsKKwkJCS8qIER1cmluZyBub3JtYWwgcmVhZGluZywgdGhlIG1vc3QgcmVjZW50CisJCQkgKiBmcmFtZSB3aWxsIGJlIHJlYWQuICBJZiB0aGUgY3VycmVudCBmcmFtZQorCQkJICogaGFzbid0IHN0YXJ0ZWQgcmVhZGluZyB5ZXQsIGl0IHdpbGwgbmV2ZXIKKwkJCSAqIGJlIHJlYWQsIHNvIG1hcmsgaXQgZW1wdHkuICBJZiB0aGUgYnVmZmVyIGlzCisJCQkgKiBtbWFwcGVkLCBvciB3ZSBoYXZlIGZldyBidWZmZXJzLCB3ZSBuZWVkIHRvCisJCQkgKiB3YWl0IGZvciB0aGUgdXNlciB0byBmcmVlIHRoZSBidWZmZXIuCisJCQkgKgorCQkJICogTk9URTogVGhpcyBpcyBub3QgZW50aXJlbHkgZm9vbHByb29mIHdpdGggMworCQkJICogYnVmZmVycywgYnV0IGl0IHdvdWxkIHRha2UgYW4gRVhUUkVNRUxZCisJCQkgKiBvdmVybG9hZGVkIHN5c3RlbSB0byBjYXVzZSBwcm9ibGVtcyAocG9zc2libGUKKwkJCSAqIGltYWdlIGRhdGEgY29ycnVwdGlvbikuICBCYXNpY2FsbHksIGl0IHdvdWxkCisJCQkgKiBuZWVkIHRvIHRha2UgbW9yZSB0aW1lIHRvIGV4ZWN1dGUgY3BpYTJfcmVhZAorCQkJICogdGhhbiBpdCB3b3VsZCBmb3IgdGhlIGNhbWVyYSB0byBzZW5kCisJCQkgKiBjYW0tPm51bV9mcmFtZXMtMiBmcmFtZXMgYmVmb3JlIHByb2JsZW1zCisJCQkgKiBjb3VsZCBvY2N1ci4KKwkJCSAqLworCQkJY2FtLT5jdXJidWZmLT5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKKwkJfQorCQljYW0tPmN1cmJ1ZmYgPSBjYW0tPndvcmtidWZmOworCQljYW0tPndvcmtidWZmID0gY2FtLT53b3JrYnVmZi0+bmV4dDsKKwkJREJHKCJDaGFuZ2VkIGJ1ZmZlcnMsIHdvcms6JWQsIGN1cnJlbnQ6JWRcbiIsCisJCSAgICBjYW0tPndvcmtidWZmLT5udW0sIGNhbS0+Y3VyYnVmZi0+bnVtKTsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCURCRygiTm90IGVub3VnaCBkYXRhIGZvciBhbiBpbWFnZS5cbiIpOworCX0KKworCWNhbS0+d29ya2J1ZmYtPnN0YXR1cyA9IEZSQU1FX0VSUk9SOworCXJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBhZGRfQVBQbgorICoKKyAqICBBZGRzIGEgdXNlciBzcGVjaWZpZWQgQVBQbiByZWNvcmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGFkZF9BUFBuKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCWlmKGNhbS0+QVBQX2xlbiA+IDApIHsKKwkJY2FtLT53b3JrYnVmZi0+ZGF0YVtjYW0tPndvcmtidWZmLT5sZW5ndGgrK10gPSAweEZGOworCQljYW0tPndvcmtidWZmLT5kYXRhW2NhbS0+d29ya2J1ZmYtPmxlbmd0aCsrXSA9IDB4RTArY2FtLT5BUFBuOworCQljYW0tPndvcmtidWZmLT5kYXRhW2NhbS0+d29ya2J1ZmYtPmxlbmd0aCsrXSA9IDA7CisJCWNhbS0+d29ya2J1ZmYtPmRhdGFbY2FtLT53b3JrYnVmZi0+bGVuZ3RoKytdID0gY2FtLT5BUFBfbGVuKzI7CisJCW1lbWNweShjYW0tPndvcmtidWZmLT5kYXRhK2NhbS0+d29ya2J1ZmYtPmxlbmd0aCwKKwkJICAgICAgIGNhbS0+QVBQX2RhdGEsIGNhbS0+QVBQX2xlbik7CisJCWNhbS0+d29ya2J1ZmYtPmxlbmd0aCArPSBjYW0tPkFQUF9sZW47CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGFkZF9DT00KKyAqCisgKiAgQWRkcyBhIHVzZXIgc3BlY2lmaWVkIENPTSByZWNvcmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGFkZF9DT00oc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJaWYoY2FtLT5DT01fbGVuID4gMCkgeworCQljYW0tPndvcmtidWZmLT5kYXRhW2NhbS0+d29ya2J1ZmYtPmxlbmd0aCsrXSA9IDB4RkY7CisJCWNhbS0+d29ya2J1ZmYtPmRhdGFbY2FtLT53b3JrYnVmZi0+bGVuZ3RoKytdID0gMHhGRTsKKwkJY2FtLT53b3JrYnVmZi0+ZGF0YVtjYW0tPndvcmtidWZmLT5sZW5ndGgrK10gPSAwOworCQljYW0tPndvcmtidWZmLT5kYXRhW2NhbS0+d29ya2J1ZmYtPmxlbmd0aCsrXSA9IGNhbS0+Q09NX2xlbisyOworCQltZW1jcHkoY2FtLT53b3JrYnVmZi0+ZGF0YStjYW0tPndvcmtidWZmLT5sZW5ndGgsCisJCSAgICAgICBjYW0tPkNPTV9kYXRhLCBjYW0tPkNPTV9sZW4pOworCQljYW0tPndvcmtidWZmLT5sZW5ndGggKz0gY2FtLT5DT01fbGVuOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl91c2JfY29tcGxldGUKKyAqCisgKiAgY2FsbGJhY2sgd2hlbiBpbmNvbWluZyBwYWNrZXQgaXMgcmVjZWl2ZWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGNwaWEyX3VzYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgKmNkYXRhOworCXN0YXRpYyBpbnQgZnJhbWVfcmVhZHkgPSBmYWxzZTsKKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IChzdHJ1Y3QgY2FtZXJhX2RhdGEgKikgdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzIT0wKSB7CisJCWlmICghKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkJICAgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkJICAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpCisJCXsKKwkJCURCRygidXJiLT5zdGF0dXMgPSAlZCFcbiIsIHVyYi0+c3RhdHVzKTsKKwkJfQorCQlEQkcoIlN0b3BwaW5nIHN0cmVhbWluZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWNhbS0+c3RyZWFtaW5nIHx8ICFjYW0tPnByZXNlbnQgfHwgY2FtLT5vcGVuX2NvdW50ID09IDApIHsKKwkJTE9HKCJXaWxsIG5vdyBzdG9wIHRoZSBzdHJlYW1pbmc6IHN0cmVhbWluZyA9ICVkLCAiCisJCSAgICAicHJlc2VudD0lZCwgb3Blbl9jb3VudD0lZFxuIiwKKwkJICAgIGNhbS0+c3RyZWFtaW5nLCBjYW0tPnByZXNlbnQsIGNhbS0+b3Blbl9jb3VudCk7CisJCXJldHVybjsKKwl9CisKKwkvKioqCisJICogUGFja2V0IGNvbGxhdGVyCisJICoqKi8KKwkvL0RCRygiQ29sbGF0aW5nICVkIHBhY2tldHNcbiIsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJdTE2IGNoZWNrc3VtLCBpc29fY2hlY2tzdW07CisJCWludCBqOworCQlpbnQgbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJaW50IHN0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisKKwkJaWYoY2FtLT53b3JrYnVmZi0+c3RhdHVzID09IEZSQU1FX1JFQURZKSB7CisJCQlzdHJ1Y3QgZnJhbWVidWYgKnB0cjsKKwkJCS8qIFRyeSB0byBmaW5kIGFuIGF2YWlsYWJsZSBidWZmZXIgKi8KKwkJCURCRygid29ya2J1ZmYgZnVsbCwgc2VhcmNoaW5nXG4iKTsKKwkJCWZvciAocHRyID0gY2FtLT53b3JrYnVmZi0+bmV4dDsKKwkJCSAgICAgcHRyICE9IGNhbS0+d29ya2J1ZmY7CisJCQkgICAgIHB0ciA9IHB0ci0+bmV4dCkKKwkJCXsKKwkJCQlpZiAocHRyLT5zdGF0dXMgPT0gRlJBTUVfRU1QVFkpIHsKKwkJCQkJcHRyLT5zdGF0dXMgPSBGUkFNRV9SRUFESU5HOworCQkJCQlwdHItPmxlbmd0aCA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChwdHIgPT0gY2FtLT53b3JrYnVmZikKKwkJCQlicmVhazsgLyogTm8gUkVBRElORyBvciBFTVBUWSBidWZmZXJzIGxlZnQgKi8KKworCQkJY2FtLT53b3JrYnVmZiA9IHB0cjsKKwkJfQorCisJCWlmIChjYW0tPndvcmtidWZmLT5zdGF0dXMgPT0gRlJBTUVfRU1QVFkgfHwKKwkJICAgIGNhbS0+d29ya2J1ZmYtPnN0YXR1cyA9PSBGUkFNRV9FUlJPUikgeworCQkJY2FtLT53b3JrYnVmZi0+c3RhdHVzID0gRlJBTUVfUkVBRElORzsKKwkJCWNhbS0+d29ya2J1ZmYtPmxlbmd0aCA9IDA7CisJCX0KKworCQkvL0RCRygiICAgUGFja2V0ICVkIGxlbmd0aCA9ICVkLCBzdGF0dXMgPSAlZFxuIiwgaSwgbiwgc3QpOworCQljZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisKKwkJaWYgKHN0KSB7CisJCQlMT0coImNwaWEyIGRhdGEgZXJyb3I6IFslZF0gbGVuPSVkLCBzdGF0dXMgPSAlZFxuIiwKKwkJCSAgICBpLCBuLCBzdCk7CisJCQlpZighQUxMT1dfQ09SUlVQVCkKKwkJCQljYW0tPndvcmtidWZmLT5zdGF0dXMgPSBGUkFNRV9FUlJPUjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYobjw9MikKKwkJCWNvbnRpbnVlOworCisJCWNoZWNrc3VtID0gMDsKKwkJZm9yKGo9MDsgajxuLTI7ICsraikKKwkJCWNoZWNrc3VtICs9IGNkYXRhW2pdOworCQlpc29fY2hlY2tzdW0gPSBjZGF0YVtqXSArIGNkYXRhW2orMV0qMjU2OworCQlpZihjaGVja3N1bSAhPSBpc29fY2hlY2tzdW0pIHsKKwkJCUxPRygiY2hlY2tzdW0gbWlzbWF0Y2g6IFslZF0gbGVuPSVkLCBjYWxjdWxhdGVkID0gJXgsIGNoZWNrc3VtID0gJXhcbiIsCisJCQkgICAgaSwgbiwgKGludCljaGVja3N1bSwgKGludClpc29fY2hlY2tzdW0pOworCQkJaWYoIUFMTE9XX0NPUlJVUFQpIHsKKwkJCQljYW0tPndvcmtidWZmLT5zdGF0dXMgPSBGUkFNRV9FUlJPUjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQluIC09IDI7CisKKwkJaWYoY2FtLT53b3JrYnVmZi0+c3RhdHVzICE9IEZSQU1FX1JFQURJTkcpIHsKKwkJCWlmKCgweEZGID09IGNkYXRhWzBdICYmIDB4RDggPT0gY2RhdGFbMV0pIHx8CisJCQkgICAoMHhEOCA9PSBjZGF0YVswXSAmJiAweEZGID09IGNkYXRhWzFdICYmCisJCQkgICAgMCAhPSBjZGF0YVsyXSkpIHsKKwkJCQkvKiBmcmFtZSBpcyBza2lwcGVkLCBidXQgaW5jcmVtZW50IHRvdGFsCisJCQkJICogZnJhbWUgY291bnQgYW55d2F5ICovCisJCQkJY2FtLT5mcmFtZV9jb3VudCsrOworCQkJfQorCQkJREJHKCJ3b3JrYnVmZiBub3QgcmVhZGluZywgc3RhdHVzPSVkXG4iLAorCQkJICAgIGNhbS0+d29ya2J1ZmYtPnN0YXR1cyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjYW0tPmZyYW1lX3NpemUgPCBjYW0tPndvcmtidWZmLT5sZW5ndGggKyBuKSB7CisJCQlFUlIoImJ1ZmZlciBvdmVyZmxvdyEgbGVuZ3RoOiAlZCwgbjogJWRcbiIsCisJCQkgICAgY2FtLT53b3JrYnVmZi0+bGVuZ3RoLCBuKTsKKwkJCWNhbS0+d29ya2J1ZmYtPnN0YXR1cyA9IEZSQU1FX0VSUk9SOworCQkJaWYoY2FtLT53b3JrYnVmZi0+bGVuZ3RoID4gY2FtLT53b3JrYnVmZi0+bWF4X2xlbmd0aCkKKwkJCQljYW0tPndvcmtidWZmLT5tYXhfbGVuZ3RoID0KKwkJCQkJY2FtLT53b3JrYnVmZi0+bGVuZ3RoOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY2FtLT53b3JrYnVmZi0+bGVuZ3RoID09IDApIHsKKwkJCWludCBkYXRhX29mZnNldDsKKwkJCWlmICgoMHhEOCA9PSBjZGF0YVswXSkgJiYgKDB4RkYgPT0gY2RhdGFbMV0pKSB7CisJCQkJZGF0YV9vZmZzZXQgPSAxOworCQkJfSBlbHNlIGlmKCgweEZGID09IGNkYXRhWzBdKSAmJiAoMHhEOCA9PSBjZGF0YVsxXSkKKwkJCQkgICYmICgweEZGID09IGNkYXRhWzJdKSkgeworCQkJCWRhdGFfb2Zmc2V0ID0gMjsKKwkJCX0gZWxzZSB7CisJCQkJREJHKCJJZ25vcmluZyBwYWNrZXQsIG5vdCBiZWdpbm5pbmchXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCURCRygiU3RhcnQgb2YgZnJhbWUgcGF0dGVybiBmb3VuZFxuIik7CisJCQlkb19nZXR0aW1lb2ZkYXkoJmNhbS0+d29ya2J1ZmYtPnRpbWVzdGFtcCk7CisJCQljYW0tPndvcmtidWZmLT5zZXEgPSBjYW0tPmZyYW1lX2NvdW50Kys7CisJCQljYW0tPndvcmtidWZmLT5kYXRhWzBdID0gMHhGRjsKKwkJCWNhbS0+d29ya2J1ZmYtPmRhdGFbMV0gPSAweEQ4OworCQkJY2FtLT53b3JrYnVmZi0+bGVuZ3RoID0gMjsKKwkJCWFkZF9BUFBuKGNhbSk7CisJCQlhZGRfQ09NKGNhbSk7CisJCQltZW1jcHkoY2FtLT53b3JrYnVmZi0+ZGF0YStjYW0tPndvcmtidWZmLT5sZW5ndGgsCisJCQkgICAgICAgY2RhdGErZGF0YV9vZmZzZXQsIG4tZGF0YV9vZmZzZXQpOworCQkJY2FtLT53b3JrYnVmZi0+bGVuZ3RoICs9IG4tZGF0YV9vZmZzZXQ7CisJCX0gZWxzZSBpZiAoY2FtLT53b3JrYnVmZi0+bGVuZ3RoID4gMCkgeworCQkJbWVtY3B5KGNhbS0+d29ya2J1ZmYtPmRhdGEgKyBjYW0tPndvcmtidWZmLT5sZW5ndGgsCisJCQkgICAgICAgY2RhdGEsIG4pOworCQkJY2FtLT53b3JrYnVmZi0+bGVuZ3RoICs9IG47CisJCX0KKworCQlpZiAoKGNhbS0+d29ya2J1ZmYtPmxlbmd0aCA+PSAzKSAmJgorCQkgICAgKGNhbS0+d29ya2J1ZmYtPmRhdGFbY2FtLT53b3JrYnVmZi0+bGVuZ3RoIC0gM10gPT0gMHhGRikgJiYKKwkJICAgIChjYW0tPndvcmtidWZmLT5kYXRhW2NhbS0+d29ya2J1ZmYtPmxlbmd0aCAtIDJdID09IDB4RDkpICYmCisJCSAgICAoY2FtLT53b3JrYnVmZi0+ZGF0YVtjYW0tPndvcmtidWZmLT5sZW5ndGggLSAxXSA9PSAweEZGKSkgeworCQkJZnJhbWVfcmVhZHkgPSB0cnVlOworCQkJY2FtLT53b3JrYnVmZi0+ZGF0YVtjYW0tPndvcmtidWZmLT5sZW5ndGggLSAxXSA9IDA7CisJCQljYW0tPndvcmtidWZmLT5sZW5ndGggLT0gMTsKKwkJfSBlbHNlIGlmICgoY2FtLT53b3JrYnVmZi0+bGVuZ3RoID49IDIpICYmCisJCSAgIChjYW0tPndvcmtidWZmLT5kYXRhW2NhbS0+d29ya2J1ZmYtPmxlbmd0aCAtIDJdID09IDB4RkYpICYmCisJCSAgIChjYW0tPndvcmtidWZmLT5kYXRhW2NhbS0+d29ya2J1ZmYtPmxlbmd0aCAtIDFdID09IDB4RDkpKSB7CisJCQlmcmFtZV9yZWFkeSA9IHRydWU7CisJCX0KKworCQlpZiAoZnJhbWVfcmVhZHkpIHsKKwkJCURCRygiV29ya2J1ZmYgaW1hZ2Ugc2l6ZSA9ICVkXG4iLGNhbS0+d29ya2J1ZmYtPmxlbmd0aCk7CisJCQlwcm9jZXNzX2ZyYW1lKGNhbSk7CisKKwkJCWZyYW1lX3JlYWR5ID0gZmFsc2U7CisKKwkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZjYW0tPndxX3N0cmVhbSkpCisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndxX3N0cmVhbSk7CisJCX0KKwl9CisKKwlpZihjYW0tPnN0cmVhbWluZykgeworCQkvKiByZXN1Ym1pdCAqLworCQl1cmItPmRldiA9IGNhbS0+ZGV2OworCQlpZiAoKGkgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKQorCQkJRVJSKCIlczogdXNiX3N1Ym1pdF91cmIgcmV0ICVkIVxuIiwgX19mdW5jX18sIGkpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNvbmZpZ3VyZV90cmFuc2Zlcl9tb2RlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjb25maWd1cmVfdHJhbnNmZXJfbW9kZShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgdW5zaWduZWQgaW50IGFsdCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBpc29fcmVnc1s4XVs0XSA9IHsKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCXsweEI5LCAweDAwLCAweDAwLCAweDdFfSwKKwkJezB4QjksIDB4MDAsIDB4MDEsIDB4N0V9LAorCQl7MHhCOSwgMHgwMCwgMHgwMiwgMHg3RX0sCisJCXsweEI5LCAweDAwLCAweDAyLCAweEZFfSwKKwkJezB4QjksIDB4MDAsIDB4MDMsIDB4N0V9LAorCQl7MHhCOSwgMHgwMCwgMHgwMywgMHhGRH0KKwl9OworCXN0cnVjdCBjcGlhMl9jb21tYW5kIGNtZDsKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKworCWlmKCFjYW0tPnByZXNlbnQpCisJCXJldHVybiAtRU5PREVWOworCisJLyoqKgorCSAqIFdyaXRlIHRoZSBpc29jIHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gdGhlIGFsdGVybmF0ZSBzZWxlY3RlZAorCSAqKiovCisJY21kLmRpcmVjdGlvbiA9IFRSQU5TRkVSX1dSSVRFOworCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IGlzb19yZWdzW2FsdF1bMF07CisJY21kLmJ1ZmZlci5ibG9ja19kYXRhWzFdID0gaXNvX3JlZ3NbYWx0XVsxXTsKKwljbWQuYnVmZmVyLmJsb2NrX2RhdGFbMl0gPSBpc29fcmVnc1thbHRdWzJdOworCWNtZC5idWZmZXIuYmxvY2tfZGF0YVszXSA9IGlzb19yZWdzW2FsdF1bM107CisJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVkM7CisJY21kLnN0YXJ0ID0gQ1BJQTJfVkNfVVNCX0lTT0xJTTsKKwljbWQucmVnX2NvdW50ID0gNDsKKwljcGlhMl9zZW5kX2NvbW1hbmQoY2FtLCAmY21kKTsKKworCS8qKioKKwkgKiBFbmFibGUgcmVsZXZhbnQgc3RyZWFtcyBiZWZvcmUgc3RhcnRpbmcgcG9sbGluZy4KKwkgKiBGaXJzdCByZWFkIFVTQiBTdHJlYW0gQ29uZmlnIFJlZ2lzdGVyLgorCSAqKiovCisJY21kLmRpcmVjdGlvbiA9IFRSQU5TRkVSX1JFQUQ7CisJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVkM7CisJY21kLnN0YXJ0ID0gQ1BJQTJfVkNfVVNCX1NUUk07CisJY21kLnJlZ19jb3VudCA9IDE7CisJY3BpYTJfc2VuZF9jb21tYW5kKGNhbSwgJmNtZCk7CisJcmVnID0gY21kLmJ1ZmZlci5ibG9ja19kYXRhWzBdOworCisJLyogQ2xlYXIgaXNvLCBidWxrLCBhbmQgaW50ICovCisJcmVnICY9IH4oQ1BJQTJfVkNfVVNCX1NUUk1fQkxLX0VOQUJMRSB8CisJCSBDUElBMl9WQ19VU0JfU1RSTV9JU09fRU5BQkxFIHwKKwkJIENQSUEyX1ZDX1VTQl9TVFJNX0lOVF9FTkFCTEUpOworCisJaWYgKGFsdCA9PSBVU0JJRl9CVUxLKSB7CisJCURCRygiRW5hYmxpbmcgYnVsayB4ZmVyXG4iKTsKKwkJcmVnIHw9IENQSUEyX1ZDX1VTQl9TVFJNX0JMS19FTkFCTEU7CS8qIEVuYWJsZSBCdWxrICovCisJCWNhbS0+eGZlcl9tb2RlID0gWEZFUl9CVUxLOworCX0gZWxzZSBpZiAoYWx0ID49IFVTQklGX0lTT18xKSB7CisJCURCRygiRW5hYmxpbmcgSVNPQyB4ZmVyXG4iKTsKKwkJcmVnIHw9IENQSUEyX1ZDX1VTQl9TVFJNX0lTT19FTkFCTEU7CisJCWNhbS0+eGZlcl9tb2RlID0gWEZFUl9JU09DOworCX0KKworCWNtZC5idWZmZXIuYmxvY2tfZGF0YVswXSA9IHJlZzsKKwljbWQuZGlyZWN0aW9uID0gVFJBTlNGRVJfV1JJVEU7CisJY21kLnN0YXJ0ID0gQ1BJQTJfVkNfVVNCX1NUUk07CisJY21kLnJlZ19jb3VudCA9IDE7CisJY21kLnJlcV9tb2RlID0gQ0FNRVJBQUNDRVNTX1RZUEVfQkxPQ0sgfCBDQU1FUkFBQ0NFU1NfVkM7CisJY3BpYTJfc2VuZF9jb21tYW5kKGNhbSwgJmNtZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNwaWEyX3VzYl9jaGFuZ2Vfc3RyZWFtaW5nX2FsdGVybmF0ZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBjcGlhMl91c2JfY2hhbmdlX3N0cmVhbWluZ19hbHRlcm5hdGUoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sCisJCQkJCSB1bnNpZ25lZCBpbnQgYWx0KQoreworCWludCByZXQgPSAwOworCisJaWYoYWx0IDwgVVNCSUZfSVNPXzEgfHwgYWx0ID4gVVNCSUZfSVNPXzYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYoYWx0ID09IGNhbS0+cGFyYW1zLmNhbWVyYV9zdGF0ZS5zdHJlYW1fbW9kZSkKKwkJcmV0dXJuIDA7CisKKwljcGlhMl91c2Jfc3RyZWFtX3BhdXNlKGNhbSk7CisKKwljb25maWd1cmVfdHJhbnNmZXJfbW9kZShjYW0sIGFsdCk7CisKKwljYW0tPnBhcmFtcy5jYW1lcmFfc3RhdGUuc3RyZWFtX21vZGUgPSBhbHQ7CisKKwkvKiBSZXNldCB0aGUgY2FtZXJhIHRvIHByZXZlbnQgaW1hZ2UgcXVhbGl0eSBkZWdyYWRhdGlvbiAqLworCWNwaWEyX3Jlc2V0X2NhbWVyYShjYW0pOworCisJY3BpYTJfdXNiX3N0cmVhbV9yZXN1bWUoY2FtKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBzZXRfYWx0ZXJuYXRlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IHNldF9hbHRlcm5hdGUoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHVuc2lnbmVkIGludCBhbHQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZihhbHQgPT0gY2FtLT5jdXJfYWx0KQorCQlyZXR1cm4gMDsKKworCWlmIChjYW0tPmN1cl9hbHQgIT0gVVNCSUZfQ01ET05MWSkgeworCQlEQkcoIkNoYW5naW5nIGZyb20gYWx0ICVkIHRvICVkXG4iLCBjYW0tPmN1cl9hbHQsIFVTQklGX0NNRE9OTFkpOworCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShjYW0tPmRldiwgY2FtLT5pZmFjZSwgVVNCSUZfQ01ET05MWSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCWlmIChhbHQgIT0gVVNCSUZfQ01ET05MWSkgeworCQlEQkcoIkNoYW5naW5nIGZyb20gYWx0ICVkIHRvICVkXG4iLCBVU0JJRl9DTURPTkxZLCBhbHQpOworCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShjYW0tPmRldiwgY2FtLT5pZmFjZSwgYWx0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwljYW0tPm9sZF9hbHQgPSBjYW0tPmN1cl9hbHQ7CisJY2FtLT5jdXJfYWx0ID0gYWx0OworCisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGZyZWVfc2J1ZnMKKyAqCisgKiBGcmVlIGFsbCBjYW0tPnNidWZbXS4gQWxsIG5vbi1OVUxMIC5kYXRhIGFuZCAudXJiIG1lbWJlcnMgdGhhdCBhcmUgbm9uLU5VTEwKKyAqIGFyZSBhc3N1bWVkIHRvIGJlIGFsbG9jYXRlZC4gTm9uLU5VTEwgLnVyYiBtZW1iZXJzIGFyZSBhbHNvIGFzc3VtZWQgdG8gYmUKKyAqIHN1Ym1pdHRlZCAoYW5kIG11c3QgdGhlcmVmb3JlIGJlIGtpbGxlZCBiZWZvcmUgdGhleSBhcmUgZnJlZWQpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZnJlZV9zYnVmcyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fU0JVRjsgaSsrKSB7CisJCWlmKGNhbS0+c2J1ZltpXS51cmIpIHsKKwkJCXVzYl9raWxsX3VyYihjYW0tPnNidWZbaV0udXJiKTsKKwkJCXVzYl9mcmVlX3VyYihjYW0tPnNidWZbaV0udXJiKTsKKwkJCWNhbS0+c2J1ZltpXS51cmIgPSBOVUxMOworCQl9CisJCWlmKGNhbS0+c2J1ZltpXS5kYXRhKSB7CisJCQlrZnJlZShjYW0tPnNidWZbaV0uZGF0YSk7CisJCQljYW0tPnNidWZbaV0uZGF0YSA9IE5VTEw7CisJCX0KKwl9Cit9CisKKy8qKioqKioqCisqIENvbnZlbmllbmNlIGZ1bmN0aW9ucworKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIHdyaXRlX3BhY2tldAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHdyaXRlX3BhY2tldChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCXU4IHJlcXVlc3QsIHU4ICogcmVnaXN0ZXJzLCB1MTYgc3RhcnQsIHNpemVfdCBzaXplKQoreworCWlmICghcmVnaXN0ZXJzIHx8IHNpemUgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICAgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgIHJlcXVlc3QsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgICBzdGFydCwJLyogdmFsdWUgKi8KKwkJCSAgICAgICAwLAkvKiBpbmRleCAqLworCQkJICAgICAgIHJlZ2lzdGVycywJLyogYnVmZmVyICovCisJCQkgICAgICAgc2l6ZSwKKwkJCSAgICAgICBIWik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIHJlYWRfcGFja2V0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcmVhZF9wYWNrZXQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCSAgICAgICB1OCByZXF1ZXN0LCB1OCAqIHJlZ2lzdGVycywgdTE2IHN0YXJ0LCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoIXJlZ2lzdGVycyB8fCBzaXplIDw9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJICAgICAgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgICByZXF1ZXN0LAorCQkJICAgICAgIFVTQl9ESVJfSU58VVNCX1RZUEVfVkVORE9SfFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAgc3RhcnQsCS8qIHZhbHVlICovCisJCQkgICAgICAgMCwJLyogaW5kZXggKi8KKwkJCSAgICAgICByZWdpc3RlcnMsCS8qIGJ1ZmZlciAqLworCQkJICAgICAgIHNpemUsCisJCQkgICAgICAgSFopOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3VzYl90cmFuc2Zlcl9jbWQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY3BpYTJfdXNiX3RyYW5zZmVyX2NtZChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwKKwkJCSAgIHZvaWQgKnJlZ2lzdGVycywKKwkJCSAgIHU4IHJlcXVlc3QsIHU4IHN0YXJ0LCB1OCBjb3VudCwgdTggZGlyZWN0aW9uKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT5kZXY7CisKKwlpZiAoIXVkZXYpIHsKKwkJRVJSKCIlczogSW50ZXJuYWwgZHJpdmVyIGVycm9yOiB1ZGV2IGlzIE5VTExcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFyZWdpc3RlcnMpIHsKKwkJRVJSKCIlczogSW50ZXJuYWwgZHJpdmVyIGVycm9yOiByZWdpc3RlciBhcnJheSBpcyBOVUxMXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkaXJlY3Rpb24gPT0gVFJBTlNGRVJfUkVBRCkgeworCQllcnIgPSByZWFkX3BhY2tldCh1ZGV2LCByZXF1ZXN0LCAodTggKilyZWdpc3RlcnMsIHN0YXJ0LCBjb3VudCk7CisJCWlmIChlcnIgPiAwKQorCQkJZXJyID0gMDsKKwl9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBUUkFOU0ZFUl9XUklURSkgeworCQllcnIgPXdyaXRlX3BhY2tldCh1ZGV2LCByZXF1ZXN0LCAodTggKilyZWdpc3RlcnMsIHN0YXJ0LCBjb3VudCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlMT0coIkNvbnRyb2wgbWVzc2FnZSBmYWlsZWQsIGVyciB2YWwgPSAlZFxuIiwgZXJyKTsKKwkJCUxPRygiTWVzc2FnZTogcmVxdWVzdCA9IDB4JTBYLCBzdGFydCA9IDB4JTBYXG4iLAorCQkJICAgIHJlcXVlc3QsIHN0YXJ0KTsKKwkJCUxPRygiTWVzc2FnZTogY291bnQgPSAlZCwgcmVnaXN0ZXJbMF0gPSAweCUwWFxuIiwKKwkJCSAgICBjb3VudCwgKCh1bnNpZ25lZCBjaGFyICopIHJlZ2lzdGVycylbMF0pOworCQl9IGVsc2UKKwkJCWVycj0wOworCX0gZWxzZSB7CisJCUxPRygiVW5leHBlY3RlZCBmaXJzdCBieXRlIG9mIGRpcmVjdGlvbjogJWRcbiIsCisJCSAgICAgICBkaXJlY3Rpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZihlcnIgIT0gMCkKKwkJTE9HKCJVbmV4cGVjdGVkIGVycm9yOiAlZFxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgc3VibWl0X3VyYnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHN1Ym1pdF91cmJzKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgZngsIGVyciwgaTsKKworCWZvcihpPTA7IGk8TlVNX1NCVUY7ICsraSkgeworCQlpZiAoY2FtLT5zYnVmW2ldLmRhdGEpCisJCQljb250aW51ZTsKKwkJY2FtLT5zYnVmW2ldLmRhdGEgPQorCQkgICAga21hbGxvYyhGUkFNRVNfUEVSX0RFU0MgKiBGUkFNRV9TSVpFX1BFUl9ERVNDLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjYW0tPnNidWZbaV0uZGF0YSkgeworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvKiBXZSBkb3VibGUgYnVmZmVyIHRoZSBJc29jIGxpc3RzLCBhbmQgYWxzbyBrbm93IHRoZSBwb2xsaW5nCisJICogaW50ZXJ2YWwgaXMgZXZlcnkgZnJhbWUgKDEgPT0gKDEgPDwgKGJJbnRlcnZhbCAtMSkpKS4KKwkgKi8KKwlmb3IoaT0wOyBpPE5VTV9TQlVGOyArK2kpIHsKKwkJaWYoY2FtLT5zYnVmW2ldLnVyYikgeworCQkJY29udGludWU7CisJCX0KKwkJdXJiID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQljYW0tPnNidWZbaV0udXJiID0gdXJiOworCQl1cmItPmRldiA9IGNhbS0+ZGV2OworCQl1cmItPmNvbnRleHQgPSBjYW07CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShjYW0tPmRldiwgMSAvKklTT0MgZW5kcG9pbnQqLyk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2FtLT5zYnVmW2ldLmRhdGE7CisJCXVyYi0+Y29tcGxldGUgPSBjcGlhMl91c2JfY29tcGxldGU7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBGUkFNRVNfUEVSX0RFU0M7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPQorCQkJRlJBTUVfU0laRV9QRVJfREVTQyAqIEZSQU1FU19QRVJfREVTQzsKKworCQlmb3IgKGZ4ID0gMDsgZnggPCBGUkFNRVNfUEVSX0RFU0M7IGZ4KyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnhdLm9mZnNldCA9CisJCQkJRlJBTUVfU0laRV9QRVJfREVTQyAqIGZ4OworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tmeF0ubGVuZ3RoID0gRlJBTUVfU0laRV9QRVJfREVTQzsKKwkJfQorCX0KKworCisJLyogUXVldWUgdGhlIElTTyB1cmJzLCBhbmQgcmVzdWJtaXQgaW4gdGhlIGNvbXBsZXRpb24gaGFuZGxlciAqLworCWZvcihpPTA7IGk8TlVNX1NCVUY7ICsraSkgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYihjYW0tPnNidWZbaV0udXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJRVJSKCJ1c2Jfc3VibWl0X3VyYlslZF0oKSA9ICVkXG4iLCBpLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3VzYl9zdHJlYW1fc3RhcnQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY3BpYTJfdXNiX3N0cmVhbV9zdGFydChzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgdW5zaWduZWQgaW50IGFsdGVybmF0ZSkKK3sKKwlpbnQgcmV0OworCWludCBvbGRfYWx0OworCisJaWYoY2FtLT5zdHJlYW1pbmcpCisJCXJldHVybiAwOworCisJaWYgKGNhbS0+Zmx1c2gpIHsKKwkJaW50IGk7CisJCURCRygiRmx1c2hpbmcgYnVmZmVyc1xuIik7CisJCWZvcihpPTA7IGk8Y2FtLT5udW1fZnJhbWVzOyArK2kpIHsKKwkJCWNhbS0+YnVmZmVyc1tpXS5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKKwkJCWNhbS0+YnVmZmVyc1tpXS5sZW5ndGggPSAwOworCQl9CisJCWNhbS0+Y3VyYnVmZiA9ICZjYW0tPmJ1ZmZlcnNbMF07CisJCWNhbS0+d29ya2J1ZmYgPSBjYW0tPmN1cmJ1ZmYtPm5leHQ7CisJCWNhbS0+Zmx1c2ggPSBmYWxzZTsKKwl9CisKKwlvbGRfYWx0ID0gY2FtLT5wYXJhbXMuY2FtZXJhX3N0YXRlLnN0cmVhbV9tb2RlOworCWNhbS0+cGFyYW1zLmNhbWVyYV9zdGF0ZS5zdHJlYW1fbW9kZSA9IDA7CisJcmV0ID0gY3BpYTJfdXNiX2NoYW5nZV9zdHJlYW1pbmdfYWx0ZXJuYXRlKGNhbSwgYWx0ZXJuYXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlpbnQgcmV0MjsKKwkJRVJSKCJjcGlhMl91c2JfY2hhbmdlX3N0cmVhbWluZ19hbHRlcm5hdGUoKSA9ICVkIVxuIiwgcmV0KTsKKwkJY2FtLT5wYXJhbXMuY2FtZXJhX3N0YXRlLnN0cmVhbV9tb2RlID0gb2xkX2FsdDsKKwkJcmV0MiA9IHNldF9hbHRlcm5hdGUoY2FtLCBVU0JJRl9DTURPTkxZKTsKKwkJaWYgKHJldDIgPCAwKSB7CisJCQlFUlIoImNwaWEyX3VzYl9jaGFuZ2Vfc3RyZWFtaW5nX2FsdGVybmF0ZSglZCkgPSVkIGhhcyBhbHJlYWR5ICIKKwkJCSAgICAiZmFpbGVkLiBUaGVuIHRyaWVkIHRvIGNhbGwgIgorCQkJICAgICJzZXRfYWx0ZXJuYXRlKFVTQklGX0NNRE9OTFkpID0gJWQuXG4iLAorCQkJICAgIGFsdGVybmF0ZSwgcmV0LCByZXQyKTsKKwkJfQorCX0gZWxzZSB7CisJCWNhbS0+ZnJhbWVfY291bnQgPSAwOworCQljYW0tPnN0cmVhbWluZyA9IDE7CisJCXJldCA9IGNwaWEyX3VzYl9zdHJlYW1fcmVzdW1lKGNhbSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfdXNiX3N0cmVhbV9wYXVzZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBjcGlhMl91c2Jfc3RyZWFtX3BhdXNlKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCWludCByZXQgPSAwOworCWlmKGNhbS0+c3RyZWFtaW5nKSB7CisJCXJldCA9IHNldF9hbHRlcm5hdGUoY2FtLCBVU0JJRl9DTURPTkxZKTsKKwkJZnJlZV9zYnVmcyhjYW0pOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3VzYl9zdHJlYW1fcmVzdW1lCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGNwaWEyX3VzYl9zdHJlYW1fcmVzdW1lKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCWludCByZXQgPSAwOworCWlmKGNhbS0+c3RyZWFtaW5nKSB7CisJCWNhbS0+Zmlyc3RfaW1hZ2Vfc2VlbiA9IDA7CisJCXJldCA9IHNldF9hbHRlcm5hdGUoY2FtLCBjYW0tPnBhcmFtcy5jYW1lcmFfc3RhdGUuc3RyZWFtX21vZGUpOworCQlpZihyZXQgPT0gMCkgeworCQkJcmV0ID0gc3VibWl0X3VyYnMoY2FtKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3VzYl9zdHJlYW1fc3RvcAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBjcGlhMl91c2Jfc3RyZWFtX3N0b3Aoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJaW50IHJldDsKKwlyZXQgPSBjcGlhMl91c2Jfc3RyZWFtX3BhdXNlKGNhbSk7CisJY2FtLT5zdHJlYW1pbmcgPSAwOworCWNvbmZpZ3VyZV90cmFuc2Zlcl9tb2RlKGNhbSwgMCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl91c2JfcHJvYmUKKyAqCisgKiAgUHJvYmUgYW5kIGluaXRpYWxpemUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGNwaWEyX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaW50ZXJmYWNlOworCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtOworCWludCByZXQ7CisKKwkvKiBBIG11bHRpLWNvbmZpZyBDUGlBMiBjYW1lcmE/ICovCisJaWYgKHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCWludGVyZmFjZSA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKworCS8qIElmIHdlIGdldCB0byB0aGlzIHBvaW50LCB3ZSBmb3VuZCBhIENQaUEyIGNhbWVyYSAqLworCUxPRygiQ1BpQTIgVVNCIGNhbWVyYSBmb3VuZFxuIik7CisKKwlpZigoY2FtID0gY3BpYTJfaW5pdF9jYW1lcmFfc3RydWN0KCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FtLT5kZXYgPSB1ZGV2OworCWNhbS0+aWZhY2UgPSBpbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXI7CisKKwlyZXQgPSBzZXRfYWx0ZXJuYXRlKGNhbSwgVVNCSUZfQ01ET05MWSk7CisJaWYgKHJldCA8IDApIHsKKwkJRVJSKCIlczogdXNiX3NldF9pbnRlcmZhY2UgZXJyb3IgKHJldCA9ICVkKVxuIiwgX19mdW5jX18sIHJldCk7CisJCWtmcmVlKGNhbSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKChyZXQgPSBjcGlhMl9yZWdpc3Rlcl9jYW1lcmEoY2FtKSkgPCAwKSB7CisJCUVSUigiJXM6IEZhaWxlZCB0byByZWdpc3RlciBjcGlhMiBjYW1lcmEgKHJldCA9ICVkKVxuIiwgX19mdW5jX18sIHJldCk7CisJCWtmcmVlKGNhbSk7CisJCXJldHVybiByZXQ7CisJfQorCisKKwlpZigocmV0ID0gY3BpYTJfaW5pdF9jYW1lcmEoY2FtKSkgPCAwKSB7CisJCUVSUigiJXM6IGZhaWxlZCB0byBpbml0aWFsaXplIGNwaWEyIGNhbWVyYSAocmV0ID0gJWQpXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJY3BpYTJfdW5yZWdpc3Rlcl9jYW1lcmEoY2FtKTsKKwkJa2ZyZWUoY2FtKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJTE9HKCIgIENQaUEgVmVyc2lvbjogJWQuJTAyZCAoJWQuJWQpXG4iLAorCSAgICAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlX3JldmlzaW9uX2hpLAorCSAgICAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmZpcm13YXJlX3JldmlzaW9uX2xvLAorCSAgICAgICBjYW0tPnBhcmFtcy52ZXJzaW9uLmFzaWNfaWQsCisJICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uYXNpY19yZXYpOworCUxPRygiICBDUGlBIFBuUC1JRDogJTA0eDolMDR4OiUwNHhcbiIsCisJICAgICAgIGNhbS0+cGFyYW1zLnBucF9pZC52ZW5kb3IsCisJICAgICAgIGNhbS0+cGFyYW1zLnBucF9pZC5wcm9kdWN0LAorCSAgICAgICBjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3JldmlzaW9uKTsKKwlMT0coIiAgU2Vuc29ySUQ6ICVkLih2ZXJzaW9uICVkKVxuIiwKKwkgICAgICAgY2FtLT5wYXJhbXMudmVyc2lvbi5zZW5zb3JfZmxhZ3MsCisJICAgICAgIGNhbS0+cGFyYW1zLnZlcnNpb24uc2Vuc29yX3Jldik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhbSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9kaXNjb25uZWN0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgY3BpYTJfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGNhbWVyYV9kYXRhICpjYW0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJY2FtLT5wcmVzZW50ID0gMDsKKworCURCRygiU3RvcHBpbmcgc3RyZWFtXG4iKTsKKwljcGlhMl91c2Jfc3RyZWFtX3N0b3AoY2FtKTsKKworCURCRygiVW5yZWdpc3RlcmluZyBjYW1lcmFcbiIpOworCWNwaWEyX3VucmVnaXN0ZXJfY2FtZXJhKGNhbSk7CisKKwlpZihjYW0tPmJ1ZmZlcnMpIHsKKwkJREJHKCJXYWtldXAgd2FpdGluZyBwcm9jZXNzZXNcbiIpOworCQljYW0tPmN1cmJ1ZmYtPnN0YXR1cyA9IEZSQU1FX1JFQURZOworCQljYW0tPmN1cmJ1ZmYtPmxlbmd0aCA9IDA7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZjYW0tPndxX3N0cmVhbSkpCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d3Ffc3RyZWFtKTsKKwl9CisKKwlEQkcoIlJlbGVhc2luZyBpbnRlcmZhY2VcbiIpOworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmNwaWEyX2RyaXZlciwgaW50Zik7CisKKwlpZiAoY2FtLT5vcGVuX2NvdW50ID09IDApIHsKKwkJREJHKCJGcmVlaW5nIGNhbWVyYSBzdHJ1Y3R1cmVcbiIpOworCQlrZnJlZShjYW0pOworCX0KKworCUxPRygiQ1BpQTIgY2FtZXJhIGRpc2Nvbm5lY3RlZC5cbiIpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgdXNiX2NwaWEyX2luaXQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY3BpYTJfdXNiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZjcGlhMl9kcml2ZXIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIHVzYl9jcGlhX2NsZWFudXAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNwaWEyX3VzYl9jbGVhbnVwKHZvaWQpCit7CisJc2NoZWR1bGVfdGltZW91dCgyICogSFopOworCXVzYl9kZXJlZ2lzdGVyKCZjcGlhMl9kcml2ZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgxZTE3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKQEAgLTAsMCArMSwyMDgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBGaWxlbmFtZTogY3BpYTJfdjRsLmMKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDEsIFNUTWljcm9sZWN0cm9uaWNzLCBJbmMuCisgKiAgICAgIENvbnRhY3Q6ICBzdGV2ZS5taWxsZXJAc3QuY29tCisgKiAgQ29weXJpZ2h0IDIwMDEsMjAwNSwgU2NvdHQgSi4gQmVydGluIDxzY290dGJlcnRpbkB5YWhvby5jb20+CisgKgorICogIERlc2NyaXB0aW9uOgorICogICAgIFRoaXMgaXMgYSBVU0IgZHJpdmVyIGZvciBDUGlhMiBiYXNlZCB2aWRlbyBjYW1lcmFzLgorICogICAgIFRoZSBpbmZyYXN0cnVjdHVyZSBvZiB0aGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgY3BpYSB1c2IgZHJpdmVyIGJ5CisgKiAgICAgSm9jaGVuIFNjaGFycmxhY2ggYW5kIEpvaGFubmVzIEVyZGZlbGR0LgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogIFN0cmlwcGVkIG9mIDIuNCBzdHVmZiByZWFkeSBmb3IgbWFpbiBrZXJuZWwgc3VibWl0IGJ5CisgKgkJQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlICJjcGlhMi5oIgorI2luY2x1ZGUgImNwaWEyZGV2LmgiCisKKworLy8jZGVmaW5lIF9DUElBMl9ERUJVR18KKworI2RlZmluZSBNQUtFX1NUUklOR18xKHgpCSN4CisjZGVmaW5lIE1BS0VfU1RSSU5HKHgpCU1BS0VfU1RSSU5HXzEoeCkKKworc3RhdGljIGludCB2aWRlb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwidmlkZW8gZGV2aWNlIHRvIHJlZ2lzdGVyICgwPS9kZXYvdmlkZW8wLCBldGMpIik7CisKK3N0YXRpYyBpbnQgYnVmZmVyX3NpemUgPSA2OCoxMDI0OworbW9kdWxlX3BhcmFtKGJ1ZmZlcl9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhidWZmZXJfc2l6ZSwgIlNpemUgZm9yIGVhY2ggZnJhbWUgYnVmZmVyIGluIGJ5dGVzIChkZWZhdWx0IDY4aykiKTsKKworc3RhdGljIGludCBudW1fYnVmZmVycyA9IDM7Cittb2R1bGVfcGFyYW0obnVtX2J1ZmZlcnMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9idWZmZXJzLCAiTnVtYmVyIG9mIGZyYW1lIGJ1ZmZlcnMgKDEtIgorCQkgTUFLRV9TVFJJTkcoVklERU9fTUFYX0ZSQU1FKSAiLCBkZWZhdWx0IDMpIik7CisKK3N0YXRpYyBpbnQgYWx0ZXJuYXRlID0gREVGQVVMVF9BTFQ7Cittb2R1bGVfcGFyYW0oYWx0ZXJuYXRlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhhbHRlcm5hdGUsICJVU0IgQWx0ZXJuYXRlICgiIE1BS0VfU1RSSU5HKFVTQklGX0lTT18xKSAiLSIKKwkJIE1BS0VfU1RSSU5HKFVTQklGX0lTT182KSAiLCBkZWZhdWx0ICIKKwkJIE1BS0VfU1RSSU5HKERFRkFVTFRfQUxUKSAiKSIpOworCitzdGF0aWMgaW50IGZsaWNrZXJfZnJlcSA9IDYwOworbW9kdWxlX3BhcmFtKGZsaWNrZXJfZnJlcSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZmxpY2tlcl9mcmVxLCAiRmxpY2tlciBmcmVxdWVuY3kgKCIgTUFLRV9TVFJJTkcoNTApICJvciIKKwkJIE1BS0VfU1RSSU5HKDYwKSAiLCBkZWZhdWx0ICIKKwkJIE1BS0VfU1RSSU5HKDYwKSAiKSIpOworCitzdGF0aWMgaW50IGZsaWNrZXJfbW9kZSA9IE5FVkVSX0ZMSUNLRVI7Cittb2R1bGVfcGFyYW0oZmxpY2tlcl9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmbGlja2VyX21vZGUsCisJCSAiRmxpY2tlciBzdXByZXNzaW9uICgiIE1BS0VfU1RSSU5HKE5FVkVSX0ZMSUNLRVIpICJvciIKKwkJIE1BS0VfU1RSSU5HKEFOVElfRkxJQ0tFUl9PTikgIiwgZGVmYXVsdCAiCisJCSBNQUtFX1NUUklORyhORVZFUl9GTElDS0VSKSAiKSIpOworCitNT0RVTEVfQVVUSE9SKCJTdGV2ZSBNaWxsZXIgKFNUTWljcm9lbGVjdHJvbmljcykgPHN0ZXZlLm1pbGxlckBzdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlY0TC1kcml2ZXIgZm9yIFNUTWljcm9lbGVjdHJvbmljcyBDUGlBMiBiYXNlZCBjYW1lcmFzIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgidmlkZW8iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBBQk9VVCAiVjRMLURyaXZlciBmb3IgVmlzaW9uIENQaUEyIGJhc2VkIGNhbWVyYXMiCisKKyNpZm5kZWYgVklEX0hBUkRXQVJFX0NQSUEyCisjZXJyb3IgIlZJRF9IQVJEV0FSRV9DUElBMiBzaG91bGQgaGF2ZSBiZWVuIGRlZmluZWQgaW4gbGludXgvdmlkZW9kZXYuaCIKKyNlbmRpZgorCitzdHJ1Y3QgY29udHJvbF9tZW51X2luZm8geworCWludCB2YWx1ZTsKKwljaGFyIG5hbWVbMzJdOworfTsKKworc3RhdGljIHN0cnVjdCBjb250cm9sX21lbnVfaW5mbyBmcmFtZXJhdGVfY29udHJvbHNbXSA9Cit7CisJeyBDUElBMl9WUF9GUkFNRVJBVEVfNl8yNSwgIjYuMjUgZnBzIiB9LAorCXsgQ1BJQTJfVlBfRlJBTUVSQVRFXzdfNSwgICI3LjUgZnBzIiAgfSwKKwl7IENQSUEyX1ZQX0ZSQU1FUkFURV8xMl81LCAiMTIuNSBmcHMiIH0sCisJeyBDUElBMl9WUF9GUkFNRVJBVEVfMTUsICAgIjE1IGZwcyIgICB9LAorCXsgQ1BJQTJfVlBfRlJBTUVSQVRFXzI1LCAgICIyNSBmcHMiICAgfSwKKwl7IENQSUEyX1ZQX0ZSQU1FUkFURV8zMCwgICAiMzAgZnBzIiAgIH0sCit9OworI2RlZmluZSBOVU1fRlJBTUVSQVRFX0NPTlRST0xTIChzaXplb2YoZnJhbWVyYXRlX2NvbnRyb2xzKS9zaXplb2YoZnJhbWVyYXRlX2NvbnRyb2xzWzBdKSkKKworc3RhdGljIHN0cnVjdCBjb250cm9sX21lbnVfaW5mbyBmbGlja2VyX2NvbnRyb2xzW10gPQoreworCXsgTkVWRVJfRkxJQ0tFUiwgIk9mZiIgfSwKKwl7IEZMSUNLRVJfNTAsICAgICI1MCBIeiIgfSwKKwl7IEZMSUNLRVJfNjAsICAgICI2MCBIeiIgIH0sCit9OworI2RlZmluZSBOVU1fRkxJQ0tFUl9DT05UUk9MUyAoc2l6ZW9mKGZsaWNrZXJfY29udHJvbHMpL3NpemVvZihmbGlja2VyX2NvbnRyb2xzWzBdKSkKKworc3RhdGljIHN0cnVjdCBjb250cm9sX21lbnVfaW5mbyBsaWdodHNfY29udHJvbHNbXSA9Cit7CisJeyAwLCAgICJPZmYiIH0sCisJeyA2NCwgICJUb3AiIH0sCisJeyAxMjgsICJCb3R0b20iICB9LAorCXsgMTkyLCAiQm90aCIgIH0sCit9OworI2RlZmluZSBOVU1fTElHSFRTX0NPTlRST0xTIChzaXplb2YobGlnaHRzX2NvbnRyb2xzKS9zaXplb2YobGlnaHRzX2NvbnRyb2xzWzBdKSkKKyNkZWZpbmUgR1BJT19MSUdIVFNfTUFTSyAxOTIKKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBjb250cm9sc1tdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgICAgICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMjU1LAorCQkuc3RlcCAgICAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gREVGQVVMVF9CUklHSFRORVNTLAorCX0sCisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgICAgICAgID0gIkNvbnRyYXN0IiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDI1NSwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IERFRkFVTFRfQ09OVFJBU1QsCisJfSwKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICAgICAgICA9ICJTYXR1cmF0aW9uIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDI1NSwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IERFRkFVTFRfU0FUVVJBVElPTiwKKwl9LAorCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9IRkxJUCwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZSAgICAgICAgICA9ICJNaXJyb3IgSG9yaXpvbnRhbGx5IiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCX0sCisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lICAgICAgICAgID0gIkZsaXAgVmVydGljYWxseSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuc3RlcCAgICAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkICAgICAgICAgICAgPSBDUElBMl9DSURfVEFSR0VUX0tCLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgICAgICAgID0gIlRhcmdldCBLQiIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSBERUZBVUxUX1RBUkdFVF9LQiwKKwl9LAorCXsKKwkJLmlkICAgICAgICAgICAgPSBDUElBMl9DSURfR1BJTywKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICAgICAgICA9ICJHUElPIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDI1NSwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKKwl7CisJCS5pZCAgICAgICAgICAgID0gQ1BJQTJfQ0lEX0ZMSUNLRVJfTU9ERSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9NRU5VLAorCQkubmFtZSAgICAgICAgICA9ICJGbGlja2VyIFJlZHVjdGlvbiIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSBOVU1fRkxJQ0tFUl9DT05UUk9MUy0xLAorCQkuc3RlcCAgICAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwl9LAorCXsKKwkJLmlkICAgICAgICAgICAgPSBDUElBMl9DSURfRlJBTUVSQVRFLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCS5uYW1lICAgICAgICAgID0gIkZyYW1lcmF0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSBOVU1fRlJBTUVSQVRFX0NPTlRST0xTLTEsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSBOVU1fRlJBTUVSQVRFX0NPTlRST0xTLTEsCisJfSwKKwl7CisJCS5pZCAgICAgICAgICAgID0gQ1BJQTJfQ0lEX1VTQl9BTFQsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiVVNCIEFsdGVybmF0ZSIsCisJCS5taW5pbXVtICAgICAgID0gVVNCSUZfSVNPXzEsCisJCS5tYXhpbXVtICAgICAgID0gVVNCSUZfSVNPXzYsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSBERUZBVUxUX0FMVCwKKwl9LAorCXsKKwkJLmlkICAgICAgICAgICAgPSBDUElBMl9DSURfTElHSFRTLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX01FTlUsCisJCS5uYW1lICAgICAgICAgID0gIkxpZ2h0cyIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSBOVU1fTElHSFRTX0NPTlRST0xTLTEsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCX0sCisJeworCQkuaWQgICAgICAgICAgICA9IENQSUEyX0NJRF9SRVNFVF9DQU1FUkEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQlVUVE9OLAorCQkubmFtZSAgICAgICAgICA9ICJSZXNldCBDYW1lcmEiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMCwKKwkJLnN0ZXAgICAgICAgICAgPSAwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDAsCisJfSwKK307CisjZGVmaW5lIE5VTV9DT05UUk9MUyAoc2l6ZW9mKGNvbnRyb2xzKS9zaXplb2YoY29udHJvbHNbMF0pKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfb3BlbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY3BpYTJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICghY2FtKSB7CisJCUVSUigiSW50ZXJuYWwgZXJyb3IsIGNhbWVyYV9kYXRhIG5vdCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZihtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+YnVzeV9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmKCFjYW0tPnByZXNlbnQpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmV0dXJuOworCX0KKworCWlmIChjYW0tPm9wZW5fY291bnQgPiAwKSB7CisJCWdvdG8gc2tpcF9pbml0OworCX0KKworCWlmIChjcGlhMl9hbGxvY2F0ZV9idWZmZXJzKGNhbSkpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmV0dXJuOworCX0KKworCS8qIHJlc2V0IHRoZSBjYW1lcmEgKi8KKwlpZiAoY3BpYTJfcmVzZXRfY2FtZXJhKGNhbSkgPCAwKSB7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyX3JldHVybjsKKwl9CisKKwljYW0tPkFQUF9sZW4gPSAwOworCWNhbS0+Q09NX2xlbiA9IDA7CisKK3NraXBfaW5pdDoKKwl7CisJCXN0cnVjdCBjcGlhMl9maCAqZmggPSBrbWFsbG9jKHNpemVvZigqZmgpLEdGUF9LRVJORUwpOworCQlpZighZmgpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9yZXR1cm47CisJCX0KKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJCWZoLT5wcmlvID0gVjRMMl9QUklPUklUWV9VTlNFVDsKKwkJdjRsMl9wcmlvX29wZW4oJmNhbS0+cHJpbywgJmZoLT5wcmlvKTsKKwkJZmgtPm1tYXBwZWQgPSAwOworCX0KKworCSsrY2FtLT5vcGVuX2NvdW50OworCisJY3BpYTJfZGJnX2R1bXBfcmVnaXN0ZXJzKGNhbSk7CisKK2Vycl9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl9jbG9zZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY3BpYTJfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNwaWEyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCW11dGV4X2xvY2soJmNhbS0+YnVzeV9sb2NrKTsKKworCWlmIChjYW0tPnByZXNlbnQgJiYKKwkgICAgKGNhbS0+b3Blbl9jb3VudCA9PSAxCisJICAgICB8fCBmaC0+cHJpbyA9PSBWNEwyX1BSSU9SSVRZX1JFQ09SRAorCSAgICApKSB7CisJCWNwaWEyX3VzYl9zdHJlYW1fc3RvcChjYW0pOworCisJCWlmKGNhbS0+b3Blbl9jb3VudCA9PSAxKSB7CisJCQkvKiBzYXZlIGNhbWVyYSBzdGF0ZSBmb3IgbGF0ZXIgb3BlbiAqLworCQkJY3BpYTJfc2F2ZV9jYW1lcmFfc3RhdGUoY2FtKTsKKworCQkJY3BpYTJfc2V0X2xvd19wb3dlcihjYW0pOworCQkJY3BpYTJfZnJlZV9idWZmZXJzKGNhbSk7CisJCX0KKwl9CisKKwl7CisJCWlmKGZoLT5tbWFwcGVkKQorCQkJY2FtLT5tbWFwcGVkID0gMDsKKwkJdjRsMl9wcmlvX2Nsb3NlKCZjYW0tPnByaW8sJmZoLT5wcmlvKTsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwkJa2ZyZWUoZmgpOworCX0KKworCWlmICgtLWNhbS0+b3Blbl9jb3VudCA9PSAwKSB7CisJCWNwaWEyX2ZyZWVfYnVmZmVycyhjYW0pOworCQlpZiAoIWNhbS0+cHJlc2VudCkgeworCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKKwkJCWtmcmVlKGNhbSk7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX3Y0bF9yZWFkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHNzaXplX3QgY3BpYTJfdjRsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSAgICAgIGxvZmZfdCAqb2ZmKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IGNhbWVyYV9kYXRhICpjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCWludCBub2Jsb2NrID0gZmlsZS0+Zl9mbGFncyZPX05PTkJMT0NLOworCisJc3RydWN0IGNwaWEyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmKCFjYW0pCisJCXJldHVybiAtRUlOVkFMOworCisJLyogUHJpb3JpdHkgY2hlY2sgKi8KKwlpZihmaC0+cHJpbyAhPSBWNEwyX1BSSU9SSVRZX1JFQ09SRCkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiBjcGlhMl9yZWFkKGNhbSwgYnVmLCBjb3VudCwgbm9ibG9jayk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl92NGxfcG9sbAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3BpYTJfdjRsX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCXN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKKworCXN0cnVjdCBjcGlhMl9maCAqZmggPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlpZighY2FtKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCS8qIFByaW9yaXR5IGNoZWNrICovCisJaWYoZmgtPnByaW8gIT0gVjRMMl9QUklPUklUWV9SRUNPUkQpIHsKKwkJcmV0dXJuIFBPTExFUlI7CisJfQorCisJcmV0dXJuIGNwaWEyX3BvbGwoY2FtLCBmaWxwLCB3YWl0KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX2NhcF9xdWVyeQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgaW9jdGxfY2FwX3F1ZXJ5KHZvaWQgKmFyZywgc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnZjOworCWludCByZXR2YWwgPSAwOworCXZjID0gYXJnOworCisJaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5wcm9kdWN0ID09IDB4MTUxKQorCQlzdHJjcHkodmMtPm5hbWUsICJRWDUgTWljcm9zY29wZSIpOworCWVsc2UKKwkJc3RyY3B5KHZjLT5uYW1lLCAiQ1BpQTIgQ2FtZXJhIik7CisKKwl2Yy0+dHlwZSA9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9NSlBFR19FTkNPREVSOworCXZjLT5jaGFubmVscyA9IDE7CisJdmMtPmF1ZGlvcyA9IDA7CisJdmMtPm1pbndpZHRoID0gMTc2OwkvKiBWSURFT1NJWkVfUUNJRiAqLworCXZjLT5taW5oZWlnaHQgPSAxNDQ7CisJc3dpdGNoIChjYW0tPnBhcmFtcy52ZXJzaW9uLnNlbnNvcl9mbGFncykgeworCWNhc2UgQ1BJQTJfVlBfU0VOU09SX0ZMQUdTXzUwMDoKKwkJdmMtPm1heHdpZHRoID0gU1RWX0lNQUdFX1ZHQV9DT0xTOworCQl2Yy0+bWF4aGVpZ2h0ID0gU1RWX0lNQUdFX1ZHQV9ST1dTOworCQlicmVhazsKKwljYXNlIENQSUEyX1ZQX1NFTlNPUl9GTEFHU180MTA6CisJCXZjLT5tYXh3aWR0aCA9IFNUVl9JTUFHRV9DSUZfQ09MUzsKKwkJdmMtPm1heGhlaWdodCA9IFNUVl9JTUFHRV9DSUZfUk9XUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9nZXRfY2hhbm5lbAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgaW9jdGxfZ2V0X2NoYW5uZWwodm9pZCAqYXJnKQoreworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCB2aWRlb19jaGFubmVsICp2OworCXYgPSBhcmc7CisKKwlpZiAodi0+Y2hhbm5lbCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXYtPmNoYW5uZWwgPSAwOworCXN0cmNweSh2LT5uYW1lLCAiQ2FtZXJhIik7CisJdi0+dHVuZXJzID0gMDsKKwl2LT5mbGFncyA9IDA7CisJdi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCXYtPm5vcm0gPSAwOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9zZXRfY2hhbm5lbAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgaW9jdGxfc2V0X2NoYW5uZWwodm9pZCAqYXJnKQoreworCXN0cnVjdCB2aWRlb19jaGFubmVsICp2OworCWludCByZXR2YWwgPSAwOworCXYgPSBhcmc7CisKKwlpZiAocmV0dmFsID09IDAgJiYgdi0+Y2hhbm5lbCAhPSAwKQorCQlyZXR2YWwgPSAtRUlOVkFMOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9zZXRfaW1hZ2VfcHJvcAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgaW9jdGxfc2V0X2ltYWdlX3Byb3Aodm9pZCAqYXJnLCBzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqdnA7CisJaW50IHJldHZhbCA9IDA7CisJdnAgPSBhcmc7CisKKwkvKiBicmlnaHRuZXNzLCBjb2xvciwgY29udHJhc3QgbmVlZCBubyBjaGVjayAwLTY1NTM1ICovCisJbWVtY3B5KCZjYW0tPnZwLCB2cCwgc2l6ZW9mKCp2cCkpOworCisJLyogdXBkYXRlIGNhbS0+cGFyYW1zLmNvbG9yUGFyYW1zICovCisJY2FtLT5wYXJhbXMuY29sb3JfcGFyYW1zLmJyaWdodG5lc3MgPSB2cC0+YnJpZ2h0bmVzcyAvIDI1NjsKKwljYW0tPnBhcmFtcy5jb2xvcl9wYXJhbXMuc2F0dXJhdGlvbiA9IHZwLT5jb2xvdXIgLyAyNTY7CisJY2FtLT5wYXJhbXMuY29sb3JfcGFyYW1zLmNvbnRyYXN0ID0gdnAtPmNvbnRyYXN0IC8gMjU2OworCisJREJHKCJSZXF1ZXN0ZWQgcGFyYW1zOiBicmlnaHQgMHglWCwgc2F0IDB4JVgsIGNvbnRyYXN0IDB4JVhcbiIsCisJICAgIGNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5icmlnaHRuZXNzLAorCSAgICBjYW0tPnBhcmFtcy5jb2xvcl9wYXJhbXMuc2F0dXJhdGlvbiwKKwkgICAgY2FtLT5wYXJhbXMuY29sb3JfcGFyYW1zLmNvbnRyYXN0KTsKKworCWNwaWEyX3NldF9jb2xvcl9wYXJhbXMoY2FtKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc3luYyhzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgaW50IGZyYW1lX25yKQoreworCXN0cnVjdCBmcmFtZWJ1ZiAqZnJhbWUgPSAmY2FtLT5idWZmZXJzW2ZyYW1lX25yXTsKKworCXdoaWxlICgxKSB7CisJCWlmIChmcmFtZS0+c3RhdHVzID09IEZSQU1FX1JFQURZKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCFjYW0tPnN0cmVhbWluZykgeworCQkJZnJhbWUtPnN0YXR1cyA9IEZSQU1FX1JFQURZOworCQkJZnJhbWUtPmxlbmd0aCA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53cV9zdHJlYW0sCisJCQkJCSAhY2FtLT5zdHJlYW1pbmcgfHwKKwkJCQkJIGZyYW1lLT5zdGF0dXMgPT0gRlJBTUVfUkVBRFkpOworCQltdXRleF9sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCWlmKCFjYW0tPnByZXNlbnQpCisJCQlyZXR1cm4gLUVOT1RUWTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgaW9jdGxfc2V0X3dpbmRvd19zaXplCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBpb2N0bF9zZXRfd2luZG93X3NpemUodm9pZCAqYXJnLCBzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwKKwkJCQkgc3RydWN0IGNwaWEyX2ZoICpmaCkKK3sKKwkvKiBjb3B5X2Zyb21fdXNlciwgY2hlY2sgdmFsaWRpdHksIGNvcHkgdG8gaW50ZXJuYWwgc3RydWN0dXJlICovCisJc3RydWN0IHZpZGVvX3dpbmRvdyAqdnc7CisJaW50IGZyYW1lLCBlcnI7CisJdncgPSBhcmc7CisKKwlpZiAodnctPmNsaXBjb3VudCAhPSAwKQkvKiBjbGlwcGluZyBub3Qgc3VwcG9ydGVkICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZ3LT5jbGlwcyAhPSBOVUxMKQkvKiBjbGlwcGluZyBub3Qgc3VwcG9ydGVkICovCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRW5zdXJlIHRoYXQgb25seSB0aGlzIHByb2Nlc3MgY2FuIGNoYW5nZSB0aGUgZm9ybWF0LiAqLworCWVyciA9IHY0bDJfcHJpb19jaGFuZ2UoJmNhbS0+cHJpbywgJmZoLT5wcmlvLCBWNEwyX1BSSU9SSVRZX1JFQ09SRCk7CisJaWYoZXJyICE9IDApCisJCXJldHVybiBlcnI7CisKKwljYW0tPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUc7CisKKwkvKiBCZSBzdXJlIHRvIHN1cHBseSB0aGUgSHVmZm1hbiB0YWJsZXMsIHRoaXMgaXNuJ3QgTUpQRUcgKi8KKwljYW0tPnBhcmFtcy5jb21wcmVzc2lvbi5pbmhpYml0X2h0YWJsZXMgPSAwOworCisJLyogd2Ugc2V0IHRoZSB2aWRlbyB3aW5kb3cgdG8gc29tZXRoaW5nIHNtYWxsZXIgb3IgZXF1YWwgdG8gd2hhdAorCSAqIGlzIHJlcXVlc3RlZCBieSB0aGUgdXNlcj8/PworCSAqLworCURCRygiUmVxdWVzdGVkIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCB2dy0+d2lkdGgsIHZ3LT5oZWlnaHQpOworCWlmICh2dy0+d2lkdGggIT0gY2FtLT52dy53aWR0aCB8fCB2dy0+aGVpZ2h0ICE9IGNhbS0+dncuaGVpZ2h0KSB7CisJCWNhbS0+dncud2lkdGggPSB2dy0+d2lkdGg7CisJCWNhbS0+dncuaGVpZ2h0ID0gdnctPmhlaWdodDsKKwkJY2FtLT5wYXJhbXMucm9pLndpZHRoID0gdnctPndpZHRoOworCQljYW0tPnBhcmFtcy5yb2kuaGVpZ2h0ID0gdnctPmhlaWdodDsKKwkJY3BpYTJfc2V0X2Zvcm1hdChjYW0pOworCX0KKworCWZvciAoZnJhbWUgPSAwOyBmcmFtZSA8IGNhbS0+bnVtX2ZyYW1lczsgKytmcmFtZSkgeworCQlpZiAoY2FtLT5idWZmZXJzW2ZyYW1lXS5zdGF0dXMgPT0gRlJBTUVfUkVBRElORykKKwkJCWlmICgoZXJyID0gc3luYyhjYW0sIGZyYW1lKSkgPCAwKQorCQkJCXJldHVybiBlcnI7CisKKwkJY2FtLT5idWZmZXJzW2ZyYW1lXS5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9nZXRfbWJ1ZgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgaW9jdGxfZ2V0X21idWYodm9pZCAqYXJnLCBzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm07CisJaW50IGk7CisJdm0gPSBhcmc7CisKKwltZW1zZXQodm0sIDAsIHNpemVvZigqdm0pKTsKKwl2bS0+c2l6ZSA9IGNhbS0+ZnJhbWVfc2l6ZSpjYW0tPm51bV9mcmFtZXM7CisJdm0tPmZyYW1lcyA9IGNhbS0+bnVtX2ZyYW1lczsKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5udW1fZnJhbWVzOyBpKyspCisJCXZtLT5vZmZzZXRzW2ldID0gY2FtLT5mcmFtZV9zaXplICogaTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX21jYXB0dXJlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBpb2N0bF9tY2FwdHVyZSh2b2lkICphcmcsIHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtLAorCQkJICBzdHJ1Y3QgY3BpYTJfZmggKmZoKQoreworCXN0cnVjdCB2aWRlb19tbWFwICp2bTsKKwlpbnQgdmlkZW9fc2l6ZSwgZXJyOworCXZtID0gYXJnOworCisJaWYgKHZtLT5mcmFtZSA8IDAgfHwgdm0tPmZyYW1lID49IGNhbS0+bnVtX2ZyYW1lcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzZXQgdmlkZW8gc2l6ZSAqLworCXZpZGVvX3NpemUgPSBjcGlhMl9tYXRjaF92aWRlb19zaXplKHZtLT53aWR0aCwgdm0tPmhlaWdodCk7CisJaWYgKGNhbS0+dmlkZW9fc2l6ZSA8IDApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRW5zdXJlIHRoYXQgb25seSB0aGlzIHByb2Nlc3MgY2FuIGNoYW5nZSB0aGUgZm9ybWF0LiAqLworCWVyciA9IHY0bDJfcHJpb19jaGFuZ2UoJmNhbS0+cHJpbywgJmZoLT5wcmlvLCBWNEwyX1BSSU9SSVRZX1JFQ09SRCk7CisJaWYoZXJyICE9IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAodmlkZW9fc2l6ZSAhPSBjYW0tPnZpZGVvX3NpemUpIHsKKwkJY2FtLT52aWRlb19zaXplID0gdmlkZW9fc2l6ZTsKKwkJY2FtLT5wYXJhbXMucm9pLndpZHRoID0gdm0tPndpZHRoOworCQljYW0tPnBhcmFtcy5yb2kuaGVpZ2h0ID0gdm0tPmhlaWdodDsKKwkJY3BpYTJfc2V0X2Zvcm1hdChjYW0pOworCX0KKworCWlmIChjYW0tPmJ1ZmZlcnNbdm0tPmZyYW1lXS5zdGF0dXMgPT0gRlJBTUVfUkVBRElORykKKwkJaWYgKChlcnI9c3luYyhjYW0sIHZtLT5mcmFtZSkpIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwljYW0tPmJ1ZmZlcnNbdm0tPmZyYW1lXS5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKKworCXJldHVybiBjcGlhMl91c2Jfc3RyZWFtX3N0YXJ0KGNhbSxjYW0tPnBhcmFtcy5jYW1lcmFfc3RhdGUuc3RyZWFtX21vZGUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX3N5bmMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGlvY3RsX3N5bmModm9pZCAqYXJnLCBzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlpbnQgZnJhbWU7CisKKwlmcmFtZSA9ICooaW50Kilhcmc7CisKKwlpZiAoZnJhbWUgPCAwIHx8IGZyYW1lID49IGNhbS0+bnVtX2ZyYW1lcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3luYyhjYW0sIGZyYW1lKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX3NldF9ncGlvCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGlvY3RsX3NldF9ncGlvKHZvaWQgKmFyZywgc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJX191MzIgZ3Bpb192YWw7CisKKwlncGlvX3ZhbCA9ICooX191MzIqKSBhcmc7CisKKwlpZiAoZ3Bpb192YWwgJn4gMHhGRlUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNwaWEyX3NldF9ncGlvKGNhbSwgKHVuc2lnbmVkIGNoYXIpZ3Bpb192YWwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX3F1ZXJ5Y2FwCisgKgorICogIFY0TDIgZGV2aWNlIGNhcGFiaWxpdGllcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBpb2N0bF9xdWVyeWNhcCh2b2lkICphcmcsIHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnZjID0gYXJnOworCisJbWVtc2V0KHZjLCAwLCBzaXplb2YoKnZjKSk7CisJc3RyY3B5KHZjLT5kcml2ZXIsICJjcGlhMiIpOworCisJaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5wcm9kdWN0ID09IDB4MTUxKQorCQlzdHJjcHkodmMtPmNhcmQsICJRWDUgTWljcm9zY29wZSIpOworCWVsc2UKKwkJc3RyY3B5KHZjLT5jYXJkLCAiQ1BpQTIgQ2FtZXJhIik7CisJc3dpdGNoIChjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUpIHsKKwljYXNlIERFVklDRV9TVFZfNjcyOgorCQlzdHJjYXQodmMtPmNhcmQsICIgKDY3Mi8iKTsKKwkJYnJlYWs7CisJY2FzZSBERVZJQ0VfU1RWXzY3NjoKKwkJc3RyY2F0KHZjLT5jYXJkLCAiICg2NzYvIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0cmNhdCh2Yy0+Y2FyZCwgIiAoPz8/LyIpOworCQlicmVhazsKKwl9CisJc3dpdGNoIChjYW0tPnBhcmFtcy52ZXJzaW9uLnNlbnNvcl9mbGFncykgeworCWNhc2UgQ1BJQTJfVlBfU0VOU09SX0ZMQUdTXzQwNDoKKwkJc3RyY2F0KHZjLT5jYXJkLCAiNDA0KSIpOworCQlicmVhazsKKwljYXNlIENQSUEyX1ZQX1NFTlNPUl9GTEFHU180MDc6CisJCXN0cmNhdCh2Yy0+Y2FyZCwgIjQwNykiKTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9WUF9TRU5TT1JfRkxBR1NfNDA5OgorCQlzdHJjYXQodmMtPmNhcmQsICI0MDkpIik7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfVlBfU0VOU09SX0ZMQUdTXzQxMDoKKwkJc3RyY2F0KHZjLT5jYXJkLCAiNDEwKSIpOworCQlicmVhazsKKwljYXNlIENQSUEyX1ZQX1NFTlNPUl9GTEFHU181MDA6CisJCXN0cmNhdCh2Yy0+Y2FyZCwgIjUwMCkiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RyY2F0KHZjLT5jYXJkLCAiPz8/KSIpOworCQlicmVhazsKKwl9CisKKwlpZiAodXNiX21ha2VfcGF0aChjYW0tPmRldiwgdmMtPmJ1c19pbmZvLCBzaXplb2YodmMtPmJ1c19pbmZvKSkgPDApCisJCW1lbXNldCh2Yy0+YnVzX2luZm8sMCwgc2l6ZW9mKHZjLT5idXNfaW5mbykpOworCisJdmMtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTihDUElBMl9NQUpfVkVSLCBDUElBMl9NSU5fVkVSLAorCQkJCSAgICAgQ1BJQTJfUEFUQ0hfVkVSKTsKKworCXZjLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJCSAgIFY0TDJfQ0FQX1JFQURXUklURSB8CisJCQkgICBWNEwyX0NBUF9TVFJFQU1JTkc7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9pbnB1dAorICoKKyAqICBWNEwyIGlucHV0IGdldC9zZXQvZW51bWVyYXRlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGlvY3RsX2lucHV0KHVuc2lnbmVkIGludCBpb2NsdF9ucix2b2lkICphcmcsc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7CisKKwlpZihpb2NsdF9uciAgIT0gVklESU9DX0dfSU5QVVQpIHsKKwkJaWYgKGktPmluZGV4ICE9IDApCisJCSAgICAgICByZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7CisJc3RyY3B5KGktPm5hbWUsICJDYW1lcmEiKTsKKwlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX2VudW1fZm10CisgKgorICogIFY0TDIgZm9ybWF0IGVudW1lcmF0ZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBpb2N0bF9lbnVtX2ZtdCh2b2lkICphcmcsc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJc3RydWN0IHY0bDJfZm10ZGVzYyAqZiA9IGFyZzsKKwlpbnQgaW5kZXggPSBmLT5pbmRleDsKKworCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPiAxKQorCSAgICAgICByZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKKwlmLT5pbmRleCA9IGluZGV4OworCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZi0+ZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CisJc3dpdGNoKGluZGV4KSB7CisJY2FzZSAwOgorCQlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJNSlBFRyIpOworCQlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NSlBFRzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJKUEVHIik7CisJCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX3RyeV9mbXQKKyAqCisgKiAgVjRMMiBmb3JtYXQgdHJ5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGlvY3RsX3RyeV9mbXQodm9pZCAqYXJnLHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKKworCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcgJiYKKwkgICAgZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfSlBFRykKKwkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKwlmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGNhbS0+ZnJhbWVfc2l6ZTsKKwlmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKKwlmLT5mbXQucGl4LnByaXYgPSAwOworCisJc3dpdGNoIChjcGlhMl9tYXRjaF92aWRlb19zaXplKGYtPmZtdC5waXgud2lkdGgsIGYtPmZtdC5waXguaGVpZ2h0KSkgeworCWNhc2UgVklERU9TSVpFX1ZHQToKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDY0MDsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSA0ODA7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFX0NJRjoKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDM1MjsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSAyODg7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFX1FWR0E6CisJCWYtPmZtdC5waXgud2lkdGggPSAzMjA7CisJCWYtPmZtdC5waXguaGVpZ2h0ID0gMjQwOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8yODhfMjE2OgorCQlmLT5mbXQucGl4LndpZHRoID0gMjg4OworCQlmLT5mbXQucGl4LmhlaWdodCA9IDIxNjsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMjU2XzE5MjoKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDI1NjsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSAxOTI7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzIyNF8xNjg6CisJCWYtPmZtdC5waXgud2lkdGggPSAyMjQ7CisJCWYtPmZtdC5waXguaGVpZ2h0ID0gMTY4OworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8xOTJfMTQ0OgorCQlmLT5mbXQucGl4LndpZHRoID0gMTkyOworCQlmLT5mbXQucGl4LmhlaWdodCA9IDE0NDsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfUUNJRjoKKwlkZWZhdWx0OgorCQlmLT5mbXQucGl4LndpZHRoID0gMTc2OworCQlmLT5mbXQucGl4LmhlaWdodCA9IDE0NDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgaW9jdGxfc2V0X2ZtdAorICoKKyAqICBWNEwyIGZvcm1hdCBzZXQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgaW9jdGxfc2V0X2ZtdCh2b2lkICphcmcsc3RydWN0IGNhbWVyYV9kYXRhICpjYW0sIHN0cnVjdCBjcGlhMl9maCAqZmgpCit7CisJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOworCWludCBlcnIsIGZyYW1lOworCisJZXJyID0gaW9jdGxfdHJ5X2ZtdChhcmcsIGNhbSk7CisJaWYoZXJyICE9IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBFbnN1cmUgdGhhdCBvbmx5IHRoaXMgcHJvY2VzcyBjYW4gY2hhbmdlIHRoZSBmb3JtYXQuICovCisJZXJyID0gdjRsMl9wcmlvX2NoYW5nZSgmY2FtLT5wcmlvLCAmZmgtPnByaW8sIFY0TDJfUFJJT1JJVFlfUkVDT1JEKTsKKwlpZihlcnIgIT0gMCkgeworCQlyZXR1cm4gZXJyOworCX0KKworCWNhbS0+cGl4ZWxmb3JtYXQgPSBmLT5mbXQucGl4LnBpeGVsZm9ybWF0OworCisJLyogTk9URTogVGhpcyBzaG91bGQgYmUgc2V0IHRvIDEgZm9yIE1KUEVHLCBidXQgc29tZSBhcHBzIGRvbid0IGhhbmRsZQorCSAqIHRoZSBtaXNzaW5nIEh1ZmZtYW4gdGFibGUgcHJvcGVybHkuICovCisJY2FtLT5wYXJhbXMuY29tcHJlc3Npb24uaW5oaWJpdF9odGFibGVzID0gMDsKKwkJLypmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRzsqLworCisJLyogd2Ugc2V0IHRoZSB2aWRlbyB3aW5kb3cgdG8gc29tZXRoaW5nIHNtYWxsZXIgb3IgZXF1YWwgdG8gd2hhdAorCSAqIGlzIHJlcXVlc3RlZCBieSB0aGUgdXNlcj8/PworCSAqLworCURCRygiUmVxdWVzdGVkIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLAorCSAgICBmLT5mbXQucGl4LndpZHRoLCBmLT5mbXQucGl4LmhlaWdodCk7CisJaWYgKGYtPmZtdC5waXgud2lkdGggIT0gY2FtLT52dy53aWR0aCB8fAorCSAgICBmLT5mbXQucGl4LmhlaWdodCAhPSBjYW0tPnZ3LmhlaWdodCkgeworCQljYW0tPnZ3LndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwkJY2FtLT52dy5oZWlnaHQgPSBmLT5mbXQucGl4LmhlaWdodDsKKwkJY2FtLT5wYXJhbXMucm9pLndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKKwkJY2FtLT5wYXJhbXMucm9pLmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OworCQljcGlhMl9zZXRfZm9ybWF0KGNhbSk7CisJfQorCisJZm9yIChmcmFtZSA9IDA7IGZyYW1lIDwgY2FtLT5udW1fZnJhbWVzOyArK2ZyYW1lKSB7CisJCWlmIChjYW0tPmJ1ZmZlcnNbZnJhbWVdLnN0YXR1cyA9PSBGUkFNRV9SRUFESU5HKQorCQkJaWYgKChlcnIgPSBzeW5jKGNhbSwgZnJhbWUpKSA8IDApCisJCQkJcmV0dXJuIGVycjsKKworCQljYW0tPmJ1ZmZlcnNbZnJhbWVdLnN0YXR1cyA9IEZSQU1FX0VNUFRZOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX2dldF9mbXQKKyAqCisgKiAgVjRMMiBmb3JtYXQgZ2V0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGlvY3RsX2dldF9mbXQodm9pZCAqYXJnLHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKKworCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKwlmLT5mbXQucGl4LndpZHRoID0gY2FtLT52dy53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCA9IGNhbS0+dncuaGVpZ2h0OworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjYW0tPnBpeGVsZm9ybWF0OworCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCWYtPmZtdC5waXguc2l6ZWltYWdlID0gY2FtLT5mcmFtZV9zaXplOworCWYtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHOworCWYtPmZtdC5waXgucHJpdiA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9jcm9wY2FwCisgKgorICogIFY0TDIgcXVlcnkgY3JvcHBpbmcgY2FwYWJpbGl0aWVzCisgKiAgTk9URTogY3JvcHBpbmcgaXMgY3VycmVudGx5IGRpc2FibGVkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGlvY3RsX2Nyb3BjYXAodm9pZCAqYXJnLHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmMgPSBhcmc7CisKKwlpZiAoYy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJICAgICAgIHJldHVybiAtRUlOVkFMOworCisJYy0+Ym91bmRzLmxlZnQgPSAwOworCWMtPmJvdW5kcy50b3AgPSAwOworCWMtPmJvdW5kcy53aWR0aCA9IGNhbS0+dncud2lkdGg7CisJYy0+Ym91bmRzLmhlaWdodCA9IGNhbS0+dncuaGVpZ2h0OworCWMtPmRlZnJlY3QubGVmdCA9IDA7CisJYy0+ZGVmcmVjdC50b3AgPSAwOworCWMtPmRlZnJlY3Qud2lkdGggPSBjYW0tPnZ3LndpZHRoOworCWMtPmRlZnJlY3QuaGVpZ2h0ID0gY2FtLT52dy5oZWlnaHQ7CisJYy0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gMTsKKwljLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9xdWVyeWN0cmwKKyAqCisgKiAgVjRMMiBxdWVyeSBwb3NzaWJsZSBjb250cm9sIHZhcmlhYmxlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBpb2N0bF9xdWVyeWN0cmwodm9pZCAqYXJnLHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYyA9IGFyZzsKKwlpbnQgaTsKKworCWZvcihpPTA7IGk8TlVNX0NPTlRST0xTOyArK2kpIHsKKwkJaWYoYy0+aWQgPT0gY29udHJvbHNbaV0uaWQpIHsKKwkJCW1lbWNweShjLCBjb250cm9scytpLCBzaXplb2YoKmMpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYoaSA9PSBOVU1fQ09OVFJPTFMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU29tZSBkZXZpY2VzIGhhdmUgYWRkaXRpb25hbCBsaW1pdGF0aW9ucyAqLworCXN3aXRjaChjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJLyoqKgorCQkgKiBEb24ndCBsZXQgdGhlIHJlZ2lzdGVyIGJlIHNldCB0byB6ZXJvIC0gYnVnIGluIFZQNAorCQkgKiBmbGFzaCBvZiBmdWxsIGJyaWdodG5lc3MKKwkJICoqKi8KKwkJaWYgKGNhbS0+cGFyYW1zLnBucF9pZC5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfU1RWXzY3MikKKwkJCWMtPm1pbmltdW0gPSAxOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQkvLyBWUDUgT25seQorCQlpZihjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUgPT0gREVWSUNFX1NUVl82NzIpCisJCQljLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DSURfRlJBTUVSQVRFOgorCQlpZihjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUgPT0gREVWSUNFX1NUVl82NzIgJiYKKwkJICAgY2FtLT5wYXJhbXMudmVyc2lvbi5zZW5zb3JfZmxhZ3M9PUNQSUEyX1ZQX1NFTlNPUl9GTEFHU181MDApeworCQkJLy8gTWF4aW11bSAxNWZwcworCQkJaW50IGk7CisJCQlmb3IoaT0wOyBpPGMtPm1heGltdW07ICsraSkgeworCQkJCWlmKGZyYW1lcmF0ZV9jb250cm9sc1tpXS52YWx1ZSA9PQorCQkJCSAgIENQSUEyX1ZQX0ZSQU1FUkFURV8xNSkgeworCQkJCQljLT5tYXhpbXVtID0gaTsKKwkJCQkJYy0+ZGVmYXVsdF92YWx1ZSA9IGk7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ0lEX0ZMSUNLRVJfTU9ERToKKwkJLy8gRmxpY2tlciBjb250cm9sIG9ubHkgdmFsaWQgZm9yIDY3Mi4KKwkJaWYoY2FtLT5wYXJhbXMucG5wX2lkLmRldmljZV90eXBlICE9IERFVklDRV9TVFZfNjcyKQorCQkJYy0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ0lEX0xJR0hUUzoKKwkJLy8gTGlnaHQgY29udHJvbCBvbmx5IHZhbGlkIGZvciB0aGUgUVg1IE1pY3Jvc2NvcGUuCisJCWlmKGNhbS0+cGFyYW1zLnBucF9pZC5wcm9kdWN0ICE9IDB4MTUxKQorCQkJYy0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGlvY3RsX3F1ZXJ5bWVudQorICoKKyAqICBWNEwyIHF1ZXJ5IHBvc3NpYmxlIGNvbnRyb2wgdmFyaWFibGVzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGlvY3RsX3F1ZXJ5bWVudSh2b2lkICphcmcsc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJc3RydWN0IHY0bDJfcXVlcnltZW51ICptID0gYXJnOworCisJbWVtc2V0KG0tPm5hbWUsIDAsIHNpemVvZihtLT5uYW1lKSk7CisJbS0+cmVzZXJ2ZWQgPSAwOworCisJc3dpdGNoKG0tPmlkKSB7CisJY2FzZSBDUElBMl9DSURfRkxJQ0tFUl9NT0RFOgorCQlpZihtLT5pbmRleCA8IDAgfHwgbS0+aW5kZXggPj0gTlVNX0ZMSUNLRVJfQ09OVFJPTFMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzdHJjcHkobS0+bmFtZSwgZmxpY2tlcl9jb250cm9sc1ttLT5pbmRleF0ubmFtZSk7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ0lEX0ZSQU1FUkFURToKKwkgICAgeworCQlpbnQgbWF4aW11bSA9IE5VTV9GUkFNRVJBVEVfQ09OVFJPTFMgLSAxOworCQlpZihjYW0tPnBhcmFtcy5wbnBfaWQuZGV2aWNlX3R5cGUgPT0gREVWSUNFX1NUVl82NzIgJiYKKwkJICAgY2FtLT5wYXJhbXMudmVyc2lvbi5zZW5zb3JfZmxhZ3M9PUNQSUEyX1ZQX1NFTlNPUl9GTEFHU181MDApeworCQkJLy8gTWF4aW11bSAxNWZwcworCQkJaW50IGk7CisJCQlmb3IoaT0wOyBpPG1heGltdW07ICsraSkgeworCQkJCWlmKGZyYW1lcmF0ZV9jb250cm9sc1tpXS52YWx1ZSA9PQorCQkJCSAgIENQSUEyX1ZQX0ZSQU1FUkFURV8xNSkKKwkJCQkJbWF4aW11bSA9IGk7CisJCQl9CisJCX0KKwkJaWYobS0+aW5kZXggPCAwIHx8IG0tPmluZGV4ID4gbWF4aW11bSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXN0cmNweShtLT5uYW1lLCBmcmFtZXJhdGVfY29udHJvbHNbbS0+aW5kZXhdLm5hbWUpOworCQlicmVhazsKKwkgICAgfQorCWNhc2UgQ1BJQTJfQ0lEX0xJR0hUUzoKKwkJaWYobS0+aW5kZXggPCAwIHx8IG0tPmluZGV4ID49IE5VTV9MSUdIVFNfQ09OVFJPTFMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzdHJjcHkobS0+bmFtZSwgbGlnaHRzX2NvbnRyb2xzW20tPmluZGV4XS5uYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgaW9jdGxfZ19jdHJsCisgKgorICogIFY0TDIgZ2V0IHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wgdmFyaWFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgaW9jdGxfZ19jdHJsKHZvaWQgKmFyZyxzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlzdHJ1Y3QgdjRsMl9jb250cm9sICpjID0gYXJnOworCisJc3dpdGNoKGMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9WUF9CUklHSFRORVNTLAorCQkJCSBUUkFOU0ZFUl9SRUFELCAwKTsKKwkJYy0+dmFsdWUgPSBjYW0tPnBhcmFtcy5jb2xvcl9wYXJhbXMuYnJpZ2h0bmVzczsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfQ09OVFJBU1QsCisJCQkJIFRSQU5TRkVSX1JFQUQsIDApOworCQljLT52YWx1ZSA9IGNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9WUF9TQVRVUkFUSU9OLAorCQkJCSBUUkFOU0ZFUl9SRUFELCAwKTsKKwkJYy0+dmFsdWUgPSBjYW0tPnBhcmFtcy5jb2xvcl9wYXJhbXMuc2F0dXJhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVVNFUl9FRkZFQ1RTLAorCQkJCSBUUkFOU0ZFUl9SRUFELCAwKTsKKwkJYy0+dmFsdWUgPSAoY2FtLT5wYXJhbXMudnBfcGFyYW1zLnVzZXJfZWZmZWN0cyAmCisJCQkgICAgQ1BJQTJfVlBfVVNFUl9FRkZFQ1RTX01JUlJPUikgIT0gMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJY3BpYTJfZG9fY29tbWFuZChjYW0sIENQSUEyX0NNRF9HRVRfVVNFUl9FRkZFQ1RTLAorCQkJCSBUUkFOU0ZFUl9SRUFELCAwKTsKKwkJYy0+dmFsdWUgPSAoY2FtLT5wYXJhbXMudnBfcGFyYW1zLnVzZXJfZWZmZWN0cyAmCisJCQkgICAgQ1BJQTJfVlBfVVNFUl9FRkZFQ1RTX0ZMSVApICE9IDA7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ0lEX1RBUkdFVF9LQjoKKwkJYy0+dmFsdWUgPSBjYW0tPnBhcmFtcy52Y19wYXJhbXMudGFyZ2V0X2tiOworCQlicmVhazsKKwljYXNlIENQSUEyX0NJRF9HUElPOgorCQljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9WUF9HUElPX0RBVEEsCisJCQkJIFRSQU5TRkVSX1JFQUQsIDApOworCQljLT52YWx1ZSA9IGNhbS0+cGFyYW1zLnZwX3BhcmFtcy5ncGlvX2RhdGE7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ0lEX0ZMSUNLRVJfTU9ERToKKwl7CisJCWludCBpLCBtb2RlOworCQljcGlhMl9kb19jb21tYW5kKGNhbSwgQ1BJQTJfQ01EX0dFVF9GTElDS0VSX01PREVTLAorCQkJCSBUUkFOU0ZFUl9SRUFELCAwKTsKKwkJaWYoY2FtLT5wYXJhbXMuZmxpY2tlcl9jb250cm9sLmNhbV9yZWdpc3RlciAmCisJCSAgIENQSUEyX1ZQX0ZMSUNLRVJfTU9ERVNfTkVWRVJfRkxJQ0tFUikgeworCQkJbW9kZSA9IE5FVkVSX0ZMSUNLRVI7CisJCX0gZWxzZSB7CisJCSAgICBpZihjYW0tPnBhcmFtcy5mbGlja2VyX2NvbnRyb2wuY2FtX3JlZ2lzdGVyICYKKwkJICAgICAgIENQSUEyX1ZQX0ZMSUNLRVJfTU9ERVNfNTBIWikgeworCQkgICAgCW1vZGUgPSBGTElDS0VSXzUwOworCQkgICAgfSBlbHNlIHsKKwkJICAgIAltb2RlID0gRkxJQ0tFUl82MDsKKwkJICAgIH0KKwkJfQorCQlmb3IoaT0wOyBpPE5VTV9GTElDS0VSX0NPTlRST0xTOyBpKyspIHsKKwkJCWlmKGZsaWNrZXJfY29udHJvbHNbaV0udmFsdWUgPT0gbW9kZSkgeworCQkJCWMtPnZhbHVlID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZihpID09IE5VTV9GTElDS0VSX0NPTlRST0xTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwljYXNlIENQSUEyX0NJRF9GUkFNRVJBVEU6CisJeworCQlpbnQgbWF4aW11bSA9IE5VTV9GUkFNRVJBVEVfQ09OVFJPTFMgLSAxOworCQlpbnQgaTsKKwkJZm9yKGk9MDsgaTw9IG1heGltdW07IGkrKykgeworCQkJaWYoY2FtLT5wYXJhbXMudnBfcGFyYW1zLmZyYW1lX3JhdGUgPT0KKwkJCSAgIGZyYW1lcmF0ZV9jb250cm9sc1tpXS52YWx1ZSkKKwkJCQlicmVhazsKKwkJfQorCQlpZihpID4gbWF4aW11bSkKKwkJCXJldHVybiAtRUlOVkFMOworCQljLT52YWx1ZSA9IGk7CisJCWJyZWFrOworCX0KKwljYXNlIENQSUEyX0NJRF9VU0JfQUxUOgorCQljLT52YWx1ZSA9IGNhbS0+cGFyYW1zLmNhbWVyYV9zdGF0ZS5zdHJlYW1fbW9kZTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DSURfTElHSFRTOgorCXsKKwkJaW50IGk7CisJCWNwaWEyX2RvX2NvbW1hbmQoY2FtLCBDUElBMl9DTURfR0VUX1ZQX0dQSU9fREFUQSwKKwkJCQkgVFJBTlNGRVJfUkVBRCwgMCk7CisJCWZvcihpPTA7IGk8TlVNX0xJR0hUU19DT05UUk9MUzsgaSsrKSB7CisJCQlpZigoY2FtLT5wYXJhbXMudnBfcGFyYW1zLmdwaW9fZGF0YSZHUElPX0xJR0hUU19NQVNLKSA9PQorCQkJICAgbGlnaHRzX2NvbnRyb2xzW2ldLnZhbHVlKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYoaSA9PSBOVU1fTElHSFRTX0NPTlRST0xTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWMtPnZhbHVlID0gaTsKKwkJYnJlYWs7CisJfQorCWNhc2UgQ1BJQTJfQ0lEX1JFU0VUX0NBTUVSQToKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREJHKCJHZXQgY29udHJvbCBpZDolZCwgdmFsdWU6JWRcbiIsIGMtPmlkLCBjLT52YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9zX2N0cmwKKyAqCisgKiAgVjRMMiBzZXQgdGhlIHZhbHVlIG9mIGEgY29udHJvbCB2YXJpYWJsZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBpb2N0bF9zX2N0cmwodm9pZCAqYXJnLHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmMgPSBhcmc7CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisKKwlEQkcoIlNldCBjb250cm9sIGlkOiVkLCB2YWx1ZTolZFxuIiwgYy0+aWQsIGMtPnZhbHVlKTsKKworCS8qIENoZWNrIHRoYXQgdGhlIHZhbHVlIGlzIGluIHJhbmdlICovCisJZm9yKGk9MDsgaTxOVU1fQ09OVFJPTFM7IGkrKykgeworCQlpZihjLT5pZCA9PSBjb250cm9sc1tpXS5pZCkgeworCQkJaWYoYy0+dmFsdWUgPCBjb250cm9sc1tpXS5taW5pbXVtIHx8CisJCQkgICBjLT52YWx1ZSA+IGNvbnRyb2xzW2ldLm1heGltdW0pIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCWlmKGkgPT0gTlVNX0NPTlRST0xTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaChjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3BpYTJfc2V0X2JyaWdodG5lc3MoY2FtLCBjLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWNwaWEyX3NldF9jb250cmFzdChjYW0sIGMtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljcGlhMl9zZXRfc2F0dXJhdGlvbihjYW0sIGMtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJY3BpYTJfc2V0X3Byb3BlcnR5X21pcnJvcihjYW0sIGMtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJY3BpYTJfc2V0X3Byb3BlcnR5X2ZsaXAoY2FtLCBjLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ0lEX1RBUkdFVF9LQjoKKwkJcmV0dmFsID0gY3BpYTJfc2V0X3RhcmdldF9rYihjYW0sIGMtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DSURfR1BJTzoKKwkJcmV0dmFsID0gY3BpYTJfc2V0X2dwaW8oY2FtLCBjLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ0lEX0ZMSUNLRVJfTU9ERToKKwkJcmV0dmFsID0gY3BpYTJfc2V0X2ZsaWNrZXJfbW9kZShjYW0sCisJCQkJCSAgICAgIGZsaWNrZXJfY29udHJvbHNbYy0+dmFsdWVdLnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DSURfRlJBTUVSQVRFOgorCQlyZXR2YWwgPSBjcGlhMl9zZXRfZnBzKGNhbSwgZnJhbWVyYXRlX2NvbnRyb2xzW2MtPnZhbHVlXS52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQ1BJQTJfQ0lEX1VTQl9BTFQ6CisJCXJldHZhbCA9IGNwaWEyX3VzYl9jaGFuZ2Vfc3RyZWFtaW5nX2FsdGVybmF0ZShjYW0sIGMtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBDUElBMl9DSURfTElHSFRTOgorCQlyZXR2YWwgPSBjcGlhMl9zZXRfZ3BpbyhjYW0sIGxpZ2h0c19jb250cm9sc1tjLT52YWx1ZV0udmFsdWUpOworCQlicmVhazsKKwljYXNlIENQSUEyX0NJRF9SRVNFVF9DQU1FUkE6CisJCWNwaWEyX3VzYl9zdHJlYW1fcGF1c2UoY2FtKTsKKwkJY3BpYTJfcmVzZXRfY2FtZXJhKGNhbSk7CisJCWNwaWEyX3VzYl9zdHJlYW1fcmVzdW1lKGNhbSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9nX2pwZWdjb21wCisgKgorICogIFY0TDIgZ2V0IHRoZSBKUEVHIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgaW9jdGxfZ19qcGVnY29tcCh2b2lkICphcmcsc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJtcyA9IGFyZzsKKworCW1lbXNldChwYXJtcywgMCwgc2l6ZW9mKCpwYXJtcykpOworCisJcGFybXMtPnF1YWxpdHkgPSA4MDsgLy8gVE9ETzogQ2FuIHRoaXMgYmUgbWFkZSBtZWFuaW5nZnVsPworCisJcGFybXMtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfRFFUIHwgVjRMMl9KUEVHX01BUktFUl9EUkk7CisJaWYoIWNhbS0+cGFyYW1zLmNvbXByZXNzaW9uLmluaGliaXRfaHRhYmxlcykgeworCQlwYXJtcy0+anBlZ19tYXJrZXJzIHw9IFY0TDJfSlBFR19NQVJLRVJfREhUOworCX0KKworCXBhcm1zLT5BUFBuID0gY2FtLT5BUFBuOworCXBhcm1zLT5BUFBfbGVuID0gY2FtLT5BUFBfbGVuOworCWlmKGNhbS0+QVBQX2xlbiA+IDApIHsKKwkJbWVtY3B5KHBhcm1zLT5BUFBfZGF0YSwgY2FtLT5BUFBfZGF0YSwgY2FtLT5BUFBfbGVuKTsKKwkJcGFybXMtPmpwZWdfbWFya2VycyB8PSBWNEwyX0pQRUdfTUFSS0VSX0FQUDsKKwl9CisKKwlwYXJtcy0+Q09NX2xlbiA9IGNhbS0+Q09NX2xlbjsKKwlpZihjYW0tPkNPTV9sZW4gPiAwKSB7CisJCW1lbWNweShwYXJtcy0+Q09NX2RhdGEsIGNhbS0+Q09NX2RhdGEsIGNhbS0+Q09NX2xlbik7CisJCXBhcm1zLT5qcGVnX21hcmtlcnMgfD0gSlBFR19NQVJLRVJfQ09NOworCX0KKworCURCRygiR19KUEVHQ09NUCBBUFBfbGVuOiVkIENPTV9sZW46JWRcbiIsCisJICAgIHBhcm1zLT5BUFBfbGVuLCBwYXJtcy0+Q09NX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9zX2pwZWdjb21wCisgKgorICogIFY0TDIgc2V0IHRoZSBKUEVHIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMKKyAqICBOT1RFOiBxdWFsaXR5IGFuZCBzb21lIGpwZWdfbWFya2VycyBhcmUgaWdub3JlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgaW9jdGxfc19qcGVnY29tcCh2b2lkICphcmcsc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJtcyA9IGFyZzsKKworCURCRygiU19KUEVHQ09NUCBBUFBfbGVuOiVkIENPTV9sZW46JWRcbiIsCisJICAgIHBhcm1zLT5BUFBfbGVuLCBwYXJtcy0+Q09NX2xlbik7CisKKwljYW0tPnBhcmFtcy5jb21wcmVzc2lvbi5pbmhpYml0X2h0YWJsZXMgPQorCQkhKHBhcm1zLT5qcGVnX21hcmtlcnMgJiBWNEwyX0pQRUdfTUFSS0VSX0RIVCk7CisKKwlpZihwYXJtcy0+QVBQX2xlbiAhPSAwKSB7CisJCWlmKHBhcm1zLT5BUFBfbGVuID4gMCAmJgorCQkgICBwYXJtcy0+QVBQX2xlbiA8PSBzaXplb2YoY2FtLT5BUFBfZGF0YSkgJiYKKwkJICAgcGFybXMtPkFQUG4gPj0gMCAmJiBwYXJtcy0+QVBQbiA8PSAxNSkgeworCQkJY2FtLT5BUFBuID0gcGFybXMtPkFQUG47CisJCQljYW0tPkFQUF9sZW4gPSBwYXJtcy0+QVBQX2xlbjsKKwkJCW1lbWNweShjYW0tPkFQUF9kYXRhLCBwYXJtcy0+QVBQX2RhdGEsIHBhcm1zLT5BUFBfbGVuKTsKKwkJfSBlbHNlIHsKKwkJCUxPRygiQmFkIEFQUG4gUGFyYW1zIG49JWQgbGVuPSVkXG4iLAorCQkJICAgIHBhcm1zLT5BUFBuLCBwYXJtcy0+QVBQX2xlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCWNhbS0+QVBQX2xlbiA9IDA7CisJfQorCisJaWYocGFybXMtPkNPTV9sZW4gIT0gMCkgeworCQlpZihwYXJtcy0+Q09NX2xlbiA+IDAgJiYKKwkJICAgcGFybXMtPkNPTV9sZW4gPD0gc2l6ZW9mKGNhbS0+Q09NX2RhdGEpKSB7CisJCQljYW0tPkNPTV9sZW4gPSBwYXJtcy0+Q09NX2xlbjsKKwkJCW1lbWNweShjYW0tPkNPTV9kYXRhLCBwYXJtcy0+Q09NX2RhdGEsIHBhcm1zLT5DT01fbGVuKTsKKwkJfSBlbHNlIHsKKwkJCUxPRygiQmFkIENPTV9sZW49JWRcbiIsIHBhcm1zLT5DT01fbGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgaW9jdGxfcmVxYnVmcworICoKKyAqICBWNEwyIEluaXRpYXRlIG1lbW9yeSBtYXBwaW5nLgorICogIE5PVEU6IFRoZSB1c2VyJ3MgcmVxdWVzdCBpcyBpZ25vcmVkLiBGb3Igbm93IHRoZSBidWZmZXJzIGFyZSBmaXhlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgaW9jdGxfcmVxYnVmcyh2b2lkICphcmcsc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSA9IGFyZzsKKworCWlmKHJlcS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkgICByZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCURCRygiUkVRQlVGUyByZXF1ZXN0ZWQ6JWQgcmV0dXJuaW5nOiVkXG4iLCByZXEtPmNvdW50LCBjYW0tPm51bV9mcmFtZXMpOworCXJlcS0+Y291bnQgPSBjYW0tPm51bV9mcmFtZXM7CisJbWVtc2V0KCZyZXEtPnJlc2VydmVkLCAwLCBzaXplb2YocmVxLT5yZXNlcnZlZCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgaW9jdGxfcXVlcnlidWYKKyAqCisgKiAgVjRMMiBRdWVyeSBtZW1vcnkgYnVmZmVyIHN0YXR1cy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgaW9jdGxfcXVlcnlidWYodm9pZCAqYXJnLHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOworCisJaWYoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCSAgIGJ1Zi0+aW5kZXggPiBjYW0tPm51bV9mcmFtZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmLT5tLm9mZnNldCA9IGNhbS0+YnVmZmVyc1tidWYtPmluZGV4XS5kYXRhIC0gY2FtLT5mcmFtZV9idWZmZXI7CisJYnVmLT5sZW5ndGggPSBjYW0tPmZyYW1lX3NpemU7CisKKwlidWYtPm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisKKwlpZihjYW0tPm1tYXBwZWQpCisJCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKwllbHNlCisJCWJ1Zi0+ZmxhZ3MgPSAwOworCisJc3dpdGNoIChjYW0tPmJ1ZmZlcnNbYnVmLT5pbmRleF0uc3RhdHVzKSB7CisJY2FzZSBGUkFNRV9FTVBUWToKKwljYXNlIEZSQU1FX0VSUk9SOgorCWNhc2UgRlJBTUVfUkVBRElORzoKKwkJYnVmLT5ieXRlc3VzZWQgPSAwOworCQlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CisJCWJyZWFrOworCWNhc2UgRlJBTUVfUkVBRFk6CisJCWJ1Zi0+Ynl0ZXN1c2VkID0gY2FtLT5idWZmZXJzW2J1Zi0+aW5kZXhdLmxlbmd0aDsKKwkJYnVmLT50aW1lc3RhbXAgPSBjYW0tPmJ1ZmZlcnNbYnVmLT5pbmRleF0udGltZXN0YW1wOworCQlidWYtPnNlcXVlbmNlID0gY2FtLT5idWZmZXJzW2J1Zi0+aW5kZXhdLnNlcTsKKwkJYnVmLT5mbGFncyA9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKwkJYnJlYWs7CisJfQorCisJREJHKCJRVUVSWUJVRiBpbmRleDolZCBvZmZzZXQ6JWQgZmxhZ3M6JWQgc2VxOiVkIGJ5dGVzdXNlZDolZFxuIiwKKwkgICAgIGJ1Zi0+aW5kZXgsIGJ1Zi0+bS5vZmZzZXQsIGJ1Zi0+ZmxhZ3MsIGJ1Zi0+c2VxdWVuY2UsCisJICAgICBidWYtPmJ5dGVzdXNlZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9xYnVmCisgKgorICogIFY0TDIgVXNlciBpcyBmcmVlaW5nIGJ1ZmZlcgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBpb2N0bF9xYnVmKHZvaWQgKmFyZyxzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKKworCWlmKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkgICBidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQIHx8CisJICAgYnVmLT5pbmRleCA+IGNhbS0+bnVtX2ZyYW1lcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlEQkcoIlFCVUYgIyVkXG4iLCBidWYtPmluZGV4KTsKKworCWlmKGNhbS0+YnVmZmVyc1tidWYtPmluZGV4XS5zdGF0dXMgPT0gRlJBTUVfUkVBRFkpCisJCWNhbS0+YnVmZmVyc1tidWYtPmluZGV4XS5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGZpbmRfZWFybGllc3RfZmlsbGVkX2J1ZmZlcgorICoKKyAqICBIZWxwZXIgZm9yIGlvY3RsX2RxYnVmLiBGaW5kIHRoZSBuZXh0IHJlYWR5IGJ1ZmZlci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZmluZF9lYXJsaWVzdF9maWxsZWRfYnVmZmVyKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCWludCBpOworCWludCBmb3VuZCA9IC0xOworCWZvciAoaT0wOyBpPGNhbS0+bnVtX2ZyYW1lczsgaSsrKSB7CisJCWlmKGNhbS0+YnVmZmVyc1tpXS5zdGF0dXMgPT0gRlJBTUVfUkVBRFkpIHsKKwkJCWlmKGZvdW5kIDwgMCkgeworCQkJCWZvdW5kID0gaTsKKwkJCX0gZWxzZSB7CisJCQkJLyogZmluZCB3aGljaCBidWZmZXIgaXMgZWFybGllciAqLworCQkJCXN0cnVjdCB0aW1ldmFsICp0djEsICp0djI7CisJCQkJdHYxID0gJmNhbS0+YnVmZmVyc1tpXS50aW1lc3RhbXA7CisJCQkJdHYyID0gJmNhbS0+YnVmZmVyc1tmb3VuZF0udGltZXN0YW1wOworCQkJCWlmKHR2MS0+dHZfc2VjIDwgdHYyLT50dl9zZWMgfHwKKwkJCQkgICAodHYxLT50dl9zZWMgPT0gdHYyLT50dl9zZWMgJiYKKwkJCQkgICAgdHYxLT50dl91c2VjIDwgdHYyLT50dl91c2VjKSkKKwkJCQkJZm91bmQgPSBpOworCQkJfQorCQl9CisJfQorCXJldHVybiBmb3VuZDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBpb2N0bF9kcWJ1ZgorICoKKyAqICBWNEwyIFVzZXIgaXMgYXNraW5nIGZvciBhIGZpbGxlZCBidWZmZXIuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGlvY3RsX2RxYnVmKHZvaWQgKmFyZyxzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7CisJaW50IGZyYW1lOworCisJaWYoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCSAgIGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCisJCXJldHVybiAtRUlOVkFMOworCisJZnJhbWUgPSBmaW5kX2VhcmxpZXN0X2ZpbGxlZF9idWZmZXIoY2FtKTsKKworCWlmKGZyYW1lIDwgMCAmJiBmaWxlLT5mX2ZsYWdzJk9fTk9OQkxPQ0spCisJCXJldHVybiAtRUFHQUlOOworCisJaWYoZnJhbWUgPCAwKSB7CisJCS8qIFdhaXQgZm9yIGEgZnJhbWUgdG8gYmVjb21lIGF2YWlsYWJsZSAqLworCQlzdHJ1Y3QgZnJhbWVidWYgKmNiPWNhbS0+Y3VyYnVmZjsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYW0tPndxX3N0cmVhbSwKKwkJCQkJICFjYW0tPnByZXNlbnQgfHwKKwkJCQkJIChjYj1jYW0tPmN1cmJ1ZmYpLT5zdGF0dXMgPT0gRlJBTUVfUkVBRFkpOworCQltdXRleF9sb2NrKCZjYW0tPmJ1c3lfbG9jayk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCWlmKCFjYW0tPnByZXNlbnQpCisJCQlyZXR1cm4gLUVOT1RUWTsKKwkJZnJhbWUgPSBjYi0+bnVtOworCX0KKworCisJYnVmLT5pbmRleCA9IGZyYW1lOworCWJ1Zi0+Ynl0ZXN1c2VkID0gY2FtLT5idWZmZXJzW2J1Zi0+aW5kZXhdLmxlbmd0aDsKKwlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBWNEwyX0JVRl9GTEFHX0RPTkU7CisJYnVmLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwlidWYtPnRpbWVzdGFtcCA9IGNhbS0+YnVmZmVyc1tidWYtPmluZGV4XS50aW1lc3RhbXA7CisJYnVmLT5zZXF1ZW5jZSA9IGNhbS0+YnVmZmVyc1tidWYtPmluZGV4XS5zZXE7CisJYnVmLT5tLm9mZnNldCA9IGNhbS0+YnVmZmVyc1tidWYtPmluZGV4XS5kYXRhIC0gY2FtLT5mcmFtZV9idWZmZXI7CisJYnVmLT5sZW5ndGggPSBjYW0tPmZyYW1lX3NpemU7CisJYnVmLT5pbnB1dCA9IDA7CisJYnVmLT5yZXNlcnZlZCA9IDA7CisJbWVtc2V0KCZidWYtPnRpbWVjb2RlLCAwLCBzaXplb2YoYnVmLT50aW1lY29kZSkpOworCisJREJHKCJEUUJVRiAjJWQgc3RhdHVzOiVkIHNlcTolZCBsZW5ndGg6JWRcbiIsIGJ1Zi0+aW5kZXgsCisJICAgIGNhbS0+YnVmZmVyc1tidWYtPmluZGV4XS5zdGF0dXMsIGJ1Zi0+c2VxdWVuY2UsIGJ1Zi0+Ynl0ZXN1c2VkKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIGNwaWEyX2lvY3RsCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjcGlhMl9kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgdW5zaWduZWQgaW50IGlvY3RsX25yLCB2b2lkICphcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIWNhbSkKKwkJcmV0dXJuIC1FTk9UVFk7CisKKwkvKiBtYWtlIHRoaXMgX3JlYWxseV8gc21wLXNhZmUgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmJ1c3lfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoIWNhbS0+cHJlc2VudCkgeworCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogUHJpb3JpdHkgY2hlY2sgKi8KKwlzd2l0Y2ggKGlvY3RsX25yKSB7CisJY2FzZSBWSURJT0NTV0lOOgorCWNhc2UgVklESU9DTUNBUFRVUkU6CisJY2FzZSBWSURJT0NfU19GTVQ6CisJeworCQlzdHJ1Y3QgY3BpYTJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCQlyZXR2YWwgPSB2NGwyX3ByaW9fY2hlY2soJmNhbS0+cHJpbywgJmZoLT5wcmlvKTsKKwkJaWYocmV0dmFsKSB7CisJCQltdXRleF91bmxvY2soJmNhbS0+YnVzeV9sb2NrKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DR01CVUY6CisJY2FzZSBWSURJT0NTWU5DOgorCXsKKwkJc3RydWN0IGNwaWEyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJaWYoZmgtPnByaW8gIT0gVjRMMl9QUklPUklUWV9SRUNPUkQpIHsKKwkJCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpb2N0bF9ucikgeworCWNhc2UgVklESU9DR0NBUDoJLyogcXVlcnkgY2FwYWJpbGl0aWVzICovCisJCXJldHZhbCA9IGlvY3RsX2NhcF9xdWVyeShhcmcsIGNhbSk7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NHQ0hBTjoJLyogZ2V0IHZpZGVvIHNvdXJjZSAtIHdlIGFyZSBhIGNhbWVyYSwgbm90aGluZyBlbHNlICovCisJCXJldHZhbCA9IGlvY3RsX2dldF9jaGFubmVsKGFyZyk7CisJCWJyZWFrOworCWNhc2UgVklESU9DU0NIQU46CS8qIHNldCB2aWRlbyBzb3VyY2UgLSB3ZSBhcmUgYSBjYW1lcmEsIG5vdGhpbmcgZWxzZSAqLworCQlyZXR2YWwgPSBpb2N0bF9zZXRfY2hhbm5lbChhcmcpOworCQlicmVhazsKKwljYXNlIFZJRElPQ0dQSUNUOgkvKiBpbWFnZSBwcm9wZXJ0aWVzICovCisJCW1lbWNweShhcmcsICZjYW0tPnZwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKKwkJYnJlYWs7CisJY2FzZSBWSURJT0NTUElDVDoKKwkJcmV0dmFsID0gaW9jdGxfc2V0X2ltYWdlX3Byb3AoYXJnLCBjYW0pOworCQlicmVhazsKKwljYXNlIFZJRElPQ0dXSU46CS8qIGdldC9zZXQgY2FwdHVyZSB3aW5kb3cgKi8KKwkJbWVtY3B5KGFyZywgJmNhbS0+dncsIHNpemVvZihzdHJ1Y3QgdmlkZW9fd2luZG93KSk7CisJCWJyZWFrOworCWNhc2UgVklESU9DU1dJTjoKKwkJcmV0dmFsID0gaW9jdGxfc2V0X3dpbmRvd19zaXplKGFyZywgY2FtLCBmaWxlLT5wcml2YXRlX2RhdGEpOworCQlicmVhazsKKwljYXNlIFZJRElPQ0dNQlVGOgkvKiBtbWFwIGludGVyZmFjZSAqLworCQlyZXR2YWwgPSBpb2N0bF9nZXRfbWJ1ZihhcmcsIGNhbSk7CisJCWJyZWFrOworCWNhc2UgVklESU9DTUNBUFRVUkU6CisJCXJldHZhbCA9IGlvY3RsX21jYXB0dXJlKGFyZywgY2FtLCBmaWxlLT5wcml2YXRlX2RhdGEpOworCQlicmVhazsKKwljYXNlIFZJRElPQ1NZTkM6CisJCXJldHZhbCA9IGlvY3RsX3N5bmMoYXJnLCBjYW0pOworCQlicmVhazsKKwkJLyogcG9pbnRsZXNzIHRvIGltcGxlbWVudCBvdmVybGF5IHdpdGggdGhpcyBjYW1lcmEgKi8KKwljYXNlIFZJRElPQ0NBUFRVUkU6CisJY2FzZSBWSURJT0NHRkJVRjoKKwljYXNlIFZJRElPQ1NGQlVGOgorCWNhc2UgVklESU9DS0VZOgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKworCQkvKiB0dW5lciBpbnRlcmZhY2UgLSB3ZSBoYXZlIG5vbmUgKi8KKwljYXNlIFZJRElPQ0dUVU5FUjoKKwljYXNlIFZJRElPQ1NUVU5FUjoKKwljYXNlIFZJRElPQ0dGUkVROgorCWNhc2UgVklESU9DU0ZSRVE6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWJyZWFrOworCisJCS8qIGF1ZGlvIGludGVyZmFjZSAtIHdlIGhhdmUgbm9uZSAqLworCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKworCS8qIENQSUEyIGV4dGVuc2lvbiB0byBWaWRlbzRMaW51eCBBUEkgKi8KKwljYXNlIENQSUEyX0lPQ19TRVRfR1BJTzoKKwkJcmV0dmFsID0gaW9jdGxfc2V0X2dwaW8oYXJnLCBjYW0pOworCQlicmVhazsKKwljYXNlIFZJRElPQ19RVUVSWUNBUDoKKwkJcmV0dmFsID0gaW9jdGxfcXVlcnljYXAoYXJnLGNhbSk7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwkJcmV0dmFsID0gaW9jdGxfaW5wdXQoaW9jdGxfbnIsIGFyZyxjYW0pOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCQlyZXR2YWwgPSBpb2N0bF9lbnVtX2ZtdChhcmcsY2FtKTsKKwkJYnJlYWs7CisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwkJcmV0dmFsID0gaW9jdGxfdHJ5X2ZtdChhcmcsY2FtKTsKKwkJYnJlYWs7CisJY2FzZSBWSURJT0NfR19GTVQ6CisJCXJldHZhbCA9IGlvY3RsX2dldF9mbXQoYXJnLGNhbSk7CisJCWJyZWFrOworCWNhc2UgVklESU9DX1NfRk1UOgorCQlyZXR2YWwgPSBpb2N0bF9zZXRfZm10KGFyZyxjYW0sZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwkJYnJlYWs7CisKKwljYXNlIFZJRElPQ19DUk9QQ0FQOgorCQlyZXR2YWwgPSBpb2N0bF9jcm9wY2FwKGFyZyxjYW0pOworCQlicmVhazsKKwljYXNlIFZJRElPQ19HX0NST1A6CisJY2FzZSBWSURJT0NfU19DUk9QOgorCQkvLyBUT0RPOiBJIHRoaW5rIGNyb3BwaW5nIGNhbiBiZSBpbXBsZW1lbnRlZCAtIFNKQgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKworCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwkJcmV0dmFsID0gaW9jdGxfcXVlcnljdHJsKGFyZyxjYW0pOworCQlicmVhazsKKwljYXNlIFZJRElPQ19RVUVSWU1FTlU6CisJCXJldHZhbCA9IGlvY3RsX3F1ZXJ5bWVudShhcmcsY2FtKTsKKwkJYnJlYWs7CisJY2FzZSBWSURJT0NfR19DVFJMOgorCQlyZXR2YWwgPSBpb2N0bF9nX2N0cmwoYXJnLGNhbSk7CisJCWJyZWFrOworCWNhc2UgVklESU9DX1NfQ1RSTDoKKwkJcmV0dmFsID0gaW9jdGxfc19jdHJsKGFyZyxjYW0pOworCQlicmVhazsKKworCWNhc2UgVklESU9DX0dfSlBFR0NPTVA6CisJCXJldHZhbCA9IGlvY3RsX2dfanBlZ2NvbXAoYXJnLGNhbSk7CisJCWJyZWFrOworCWNhc2UgVklESU9DX1NfSlBFR0NPTVA6CisJCXJldHZhbCA9IGlvY3RsX3NfanBlZ2NvbXAoYXJnLGNhbSk7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfR19QUklPUklUWToKKwl7CisJCXN0cnVjdCBjcGlhMl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCSooZW51bSB2NGwyX3ByaW9yaXR5KilhcmcgPSBmaC0+cHJpbzsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfUFJJT1JJVFk6CisJeworCQlzdHJ1Y3QgY3BpYTJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCQllbnVtIHY0bDJfcHJpb3JpdHkgcHJpbzsKKwkJcHJpbyA9ICooZW51bSB2NGwyX3ByaW9yaXR5Kilhcmc7CisJCWlmKGNhbS0+c3RyZWFtaW5nICYmCisJCSAgIHByaW8gIT0gZmgtPnByaW8gJiYKKwkJICAgZmgtPnByaW8gPT0gVjRMMl9QUklPUklUWV9SRUNPUkQpIHsKKwkJCS8qIENhbid0IGRyb3AgcmVjb3JkIHByaW9yaXR5IHdoaWxlIHN0cmVhbWluZyAqLworCQkJcmV0dmFsID0gLUVCVVNZOworCQl9IGVsc2UgaWYocHJpbyA9PSBWNEwyX1BSSU9SSVRZX1JFQ09SRCAmJgorCQkgICBwcmlvICE9IGZoLT5wcmlvICYmCisJCSAgIHY0bDJfcHJpb19tYXgoJmNhbS0+cHJpbykgPT0gVjRMMl9QUklPUklUWV9SRUNPUkQpIHsKKwkJCS8qIE9ubHkgb25lIHByb2dyYW0gY2FuIHJlY29yZCBhdCBhIHRpbWUgKi8KKwkJCXJldHZhbCA9IC1FQlVTWTsKKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IHY0bDJfcHJpb19jaGFuZ2UoJmNhbS0+cHJpbywgJmZoLT5wcmlvLCBwcmlvKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19SRVFCVUZTOgorCQlyZXR2YWwgPSBpb2N0bF9yZXFidWZzKGFyZyxjYW0pOworCQlicmVhazsKKwljYXNlIFZJRElPQ19RVUVSWUJVRjoKKwkJcmV0dmFsID0gaW9jdGxfcXVlcnlidWYoYXJnLGNhbSk7CisJCWJyZWFrOworCWNhc2UgVklESU9DX1FCVUY6CisJCXJldHZhbCA9IGlvY3RsX3FidWYoYXJnLGNhbSk7CisJCWJyZWFrOworCWNhc2UgVklESU9DX0RRQlVGOgorCQlyZXR2YWwgPSBpb2N0bF9kcWJ1ZihhcmcsY2FtLGZpbGUpOworCQlicmVhazsKKwljYXNlIFZJRElPQ19TVFJFQU1PTjoKKwl7CisJCWludCB0eXBlOworCQlEQkcoIlZJRElPQ19TVFJFQU1PTiwgc3RyZWFtaW5nPSVkXG4iLCBjYW0tPnN0cmVhbWluZyk7CisJCXR5cGUgPSAqKGludCopYXJnOworCQlpZighY2FtLT5tbWFwcGVkIHx8IHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dmFsID0gLUVJTlZBTDsKKworCQlpZighY2FtLT5zdHJlYW1pbmcpIHsKKwkJCXJldHZhbCA9IGNwaWEyX3VzYl9zdHJlYW1fc3RhcnQoY2FtLAorCQkJCQkgIGNhbS0+cGFyYW1zLmNhbWVyYV9zdGF0ZS5zdHJlYW1fbW9kZSk7CisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQl9CisKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKKwl7CisJCWludCB0eXBlOworCQlEQkcoIlZJRElPQ19TVFJFQU1PRkYsIHN0cmVhbWluZz0lZFxuIiwgY2FtLT5zdHJlYW1pbmcpOworCQl0eXBlID0gKihpbnQqKWFyZzsKKwkJaWYoIWNhbS0+bW1hcHBlZCB8fCB0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisKKwkJaWYoY2FtLT5zdHJlYW1pbmcpIHsKKwkJCXJldHZhbCA9IGNwaWEyX3VzYl9zdHJlYW1fc3RvcChjYW0pOworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJfQorCisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DX0VOVU1PVVRQVVQ6CisJY2FzZSBWSURJT0NfR19PVVRQVVQ6CisJY2FzZSBWSURJT0NfU19PVVRQVVQ6CisJY2FzZSBWSURJT0NfR19NT0RVTEFUT1I6CisJY2FzZSBWSURJT0NfU19NT0RVTEFUT1I6CisKKwljYXNlIFZJRElPQ19FTlVNQVVESU86CisJY2FzZSBWSURJT0NfR19BVURJTzoKKwljYXNlIFZJRElPQ19TX0FVRElPOgorCisJY2FzZSBWSURJT0NfRU5VTUFVRE9VVDoKKwljYXNlIFZJRElPQ19HX0FVRE9VVDoKKwljYXNlIFZJRElPQ19TX0FVRE9VVDoKKworCWNhc2UgVklESU9DX0VOVU1TVEQ6CisJY2FzZSBWSURJT0NfUVVFUllTVEQ6CisJY2FzZSBWSURJT0NfR19TVEQ6CisJY2FzZSBWSURJT0NfU19TVEQ6CisKKwljYXNlIFZJRElPQ19HX1RVTkVSOgorCWNhc2UgVklESU9DX1NfVFVORVI6CisJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisKKwljYXNlIFZJRElPQ19PVkVSTEFZOgorCWNhc2UgVklESU9DX0dfRkJVRjoKKwljYXNlIFZJRElPQ19TX0ZCVUY6CisKKwljYXNlIFZJRElPQ19HX1BBUk06CisJY2FzZSBWSURJT0NfU19QQVJNOgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmY2FtLT5idXN5X2xvY2spOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgY3BpYTJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgaW9jdGxfbnIsIHVuc2lnbmVkIGxvbmcgaWFyZykKK3sKKwlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGlvY3RsX25yLCBpYXJnLCBjcGlhMl9kb19pb2N0bCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfbW1hcAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgY3BpYTJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKQoreworCWludCByZXR2YWw7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBQcmlvcml0eSBjaGVjayAqLworCXN0cnVjdCBjcGlhMl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaWYoZmgtPnByaW8gIT0gVjRMMl9QUklPUklUWV9SRUNPUkQpIHsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlyZXR2YWwgPSBjcGlhMl9yZW1hcF9idWZmZXIoY2FtLCBhcmVhKTsKKworCWlmKCFyZXR2YWwpCisJCWZoLT5tbWFwcGVkID0gMTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIHJlc2V0X2NhbWVyYV9zdHJ1Y3RfdjRsCisgKgorICogIFNldHMgYWxsIHZhbHVlcyB0byB0aGUgZGVmYXVsdHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHJlc2V0X2NhbWVyYV9zdHJ1Y3RfdjRsKHN0cnVjdCBjYW1lcmFfZGF0YSAqY2FtKQoreworCS8qKioKKwkgKiBGaWxsIGluIHRoZSB2NGwgc3RydWN0dXJlcy4gIHZpZGVvX2NhcCBpcyBmaWxsZWQgaW4gaW5zaWRlIHRoZSBWSURJT0NDQVAKKwkgKiBJb2N0bC4gIEhlcmUsIGp1c3QgZG8gdGhlIHdpbmRvdyBhbmQgcGljdHVyZSBzdHVjdHMuCisJICoqKi8KKwljYW0tPnZwLnBhbGV0dGUgPSAodTE2KSBWSURFT19QQUxFVFRFX1JHQjI0OwkvKiBJcyB0aGlzIHJpZ2h0PyAqLworCWNhbS0+dnAuYnJpZ2h0bmVzcyA9ICh1MTYpIGNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5icmlnaHRuZXNzICogMjU2OworCWNhbS0+dnAuY29sb3VyID0gKHUxNikgY2FtLT5wYXJhbXMuY29sb3JfcGFyYW1zLnNhdHVyYXRpb24gKiAyNTY7CisJY2FtLT52cC5jb250cmFzdCA9ICh1MTYpIGNhbS0+cGFyYW1zLmNvbG9yX3BhcmFtcy5jb250cmFzdCAqIDI1NjsKKworCWNhbS0+dncueCA9IDA7CisJY2FtLT52dy55ID0gMDsKKwljYW0tPnZ3LndpZHRoID0gY2FtLT5wYXJhbXMucm9pLndpZHRoOworCWNhbS0+dncuaGVpZ2h0ID0gY2FtLT5wYXJhbXMucm9pLmhlaWdodDsKKwljYW0tPnZ3LmZsYWdzID0gMDsKKwljYW0tPnZ3LmNsaXBjb3VudCA9IDA7CisKKwljYW0tPmZyYW1lX3NpemUgPSBidWZmZXJfc2l6ZTsKKwljYW0tPm51bV9mcmFtZXMgPSBudW1fYnVmZmVyczsKKworCS8qIEZsaWNrZXJNb2RlcyAqLworCWNhbS0+cGFyYW1zLmZsaWNrZXJfY29udHJvbC5mbGlja2VyX21vZGVfcmVxID0gZmxpY2tlcl9tb2RlOworCWNhbS0+cGFyYW1zLmZsaWNrZXJfY29udHJvbC5tYWluc19mcmVxdWVuY3kgPSBmbGlja2VyX2ZyZXE7CisKKwkvKiBzdHJlYW1Nb2RlICovCisJY2FtLT5wYXJhbXMuY2FtZXJhX3N0YXRlLnN0cmVhbV9tb2RlID0gYWx0ZXJuYXRlOworCisJY2FtLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9KUEVHOworCXY0bDJfcHJpb19pbml0KCZjYW0tPnByaW8pOworCXJldHVybjsKK30KKworLyoqKgorICogVGhlIHY0bCB2aWRlbyBkZXZpY2Ugc3RydWN0dXJlIGluaXRpYWxpemVkIGZvciB0aGlzIGRldmljZQorICoqKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfdGVtcGxhdGUgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNwaWEyX29wZW4sCisJLnJlbGVhc2UJPSBjcGlhMl9jbG9zZSwKKwkucmVhZAkJPSBjcGlhMl92NGxfcmVhZCwKKwkucG9sbAkJPSBjcGlhMl92NGxfcG9sbCwKKwkuaW9jdGwJCT0gY3BpYTJfaW9jdGwsCisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLmNvbXBhdF9pb2N0bAk9IHY0bF9jb21wYXRfaW9jdGwzMiwKKwkubW1hcAkJPSBjcGlhMl9tbWFwLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY3BpYTJfdGVtcGxhdGUgPSB7CisJLyogSSBjb3VsZCBub3QgZmluZCBhbnkgcGxhY2UgZm9yIHRoZSBvbGQgLmluaXRpYWxpemUgaW5pdGlhbGl6ZXI/PyAqLworCS5vd25lcj0JCVRISVNfTU9EVUxFLAorCS5uYW1lPQkJIkNQaUEyIENhbWVyYSIsCisJLnR5cGU9CQlWSURfVFlQRV9DQVBUVVJFLAorCS50eXBlMiA9IAlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJCVY0TDJfQ0FQX1NUUkVBTUlORywKKwkuaGFyZHdhcmU9CVZJRF9IQVJEV0FSRV9DUElBMiwKKwkubWlub3I9CQktMSwKKwkuZm9wcz0JCSZmb3BzX3RlbXBsYXRlLAorCS5yZWxlYXNlPQl2aWRlb19kZXZpY2VfcmVsZWFzZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY3BpYTJfcmVnaXN0ZXJfY2FtZXJhCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGNwaWEyX3JlZ2lzdGVyX2NhbWVyYShzdHJ1Y3QgY2FtZXJhX2RhdGEgKmNhbSkKK3sKKwljYW0tPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZighY2FtLT52ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShjYW0tPnZkZXYsICZjcGlhMl90ZW1wbGF0ZSwgc2l6ZW9mKGNwaWEyX3RlbXBsYXRlKSk7CisJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52ZGV2LCBjYW0pOworCisJcmVzZXRfY2FtZXJhX3N0cnVjdF92NGwoY2FtKTsKKworCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2UgKi8KKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlCisJICAgIChjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA9PSAtMSkgeworCQlFUlIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWRcbiIpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnZkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBjcGlhMl91bnJlZ2lzdGVyX2NhbWVyYQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY3BpYTJfdW5yZWdpc3Rlcl9jYW1lcmEoc3RydWN0IGNhbWVyYV9kYXRhICpjYW0pCit7CisJaWYgKCFjYW0tPm9wZW5fY291bnQpIHsKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52ZGV2KTsKKwl9IGVsc2UgeworCQlMT0coIi9kZXYvdmlkZW8lZCByZW1vdmVkIHdoaWxlIG9wZW4sICIKKwkJICAgICJkZWZlcnJpbmcgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2VcbiIsCisJCSAgICBjYW0tPnZkZXYtPm1pbm9yKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgY2hlY2tfcGFyYW1ldGVycworICoKKyAqICBNYWtlIHN1cmUgdGhhdCBhbGwgdXNlci1zdXBwbGllZCBwYXJhbWV0ZXJzIGFyZSBzZW5zaWJsZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX3BhcmFtZXRlcnModm9pZCkKK3sKKwlpZihidWZmZXJfc2l6ZSA8IFBBR0VfU0laRSkgeworCQlidWZmZXJfc2l6ZSA9IFBBR0VfU0laRTsKKwkJTE9HKCJidWZmZXJfc2l6ZSB0b28gc21hbGwsIHNldHRpbmcgdG8gJWRcbiIsIGJ1ZmZlcl9zaXplKTsKKwl9IGVsc2UgaWYoYnVmZmVyX3NpemUgPiAxMDI0KjEwMjQpIHsKKwkJLyogYXJiaXRyYXJ5IHVwcGVyIGxpbWlpdCAqLworCQlidWZmZXJfc2l6ZSA9IDEwMjQqMTAyNDsKKwkJTE9HKCJidWZmZXJfc2l6ZSByaWRpY3Vsb3VzbHkgbGFyZ2UsIHNldHRpbmcgdG8gJWRcbiIsCisJCSAgICBidWZmZXJfc2l6ZSk7CisJfSBlbHNlIHsKKwkJYnVmZmVyX3NpemUgKz0gUEFHRV9TSVpFLTE7CisJCWJ1ZmZlcl9zaXplICY9IH4oUEFHRV9TSVpFLTEpOworCX0KKworCWlmKG51bV9idWZmZXJzIDwgMSkgeworCQludW1fYnVmZmVycyA9IDE7CisJCUxPRygibnVtX2J1ZmZlcnMgdG9vIHNtYWxsLCBzZXR0aW5nIHRvICVkXG4iLCBudW1fYnVmZmVycyk7CisJfSBlbHNlIGlmKG51bV9idWZmZXJzID4gVklERU9fTUFYX0ZSQU1FKSB7CisJCW51bV9idWZmZXJzID0gVklERU9fTUFYX0ZSQU1FOworCQlMT0coIm51bV9idWZmZXJzIHRvbyBsYXJnZSwgc2V0dGluZyB0byAlZFxuIiwgbnVtX2J1ZmZlcnMpOworCX0KKworCWlmKGFsdGVybmF0ZSA8IFVTQklGX0lTT18xIHx8IGFsdGVybmF0ZSA+IFVTQklGX0lTT182KSB7CisJCWFsdGVybmF0ZSA9IERFRkFVTFRfQUxUOworCQlMT0coImFsdGVybmF0ZSBzcGVjaWZpZWQgaXMgaW52YWxpZCwgdXNpbmcgJWRcbiIsIGFsdGVybmF0ZSk7CisJfQorCisJaWYgKGZsaWNrZXJfbW9kZSAhPSBORVZFUl9GTElDS0VSICYmIGZsaWNrZXJfbW9kZSAhPSBBTlRJX0ZMSUNLRVJfT04pIHsKKwkJZmxpY2tlcl9tb2RlID0gTkVWRVJfRkxJQ0tFUjsKKwkJTE9HKCJGbGlja2VyIG1vZGUgc3BlY2lmaWVkIGlzIGludmFsaWQsIHVzaW5nICVkXG4iLAorCQkgICAgZmxpY2tlcl9tb2RlKTsKKwl9CisKKwlpZiAoZmxpY2tlcl9mcmVxICE9IEZMSUNLRVJfNTAgJiYgZmxpY2tlcl9mcmVxICE9IEZMSUNLRVJfNjApIHsKKwkJZmxpY2tlcl9mcmVxID0gRkxJQ0tFUl82MDsKKwkJTE9HKCJGbGlja2VyIG1vZGUgc3BlY2lmaWVkIGlzIGludmFsaWQsIHVzaW5nICVkXG4iLAorCQkgICAgZmxpY2tlcl9mcmVxKTsKKwl9CisKKwlpZih2aWRlb19uciA8IC0xIHx8IHZpZGVvX25yID4gNjQpIHsKKwkJdmlkZW9fbnIgPSAtMTsKKwkJTE9HKCJpbnZhbGlkIHZpZGVvX25yIHNwZWNpZmllZCwgbXVzdCBiZSAtMSB0byA2NFxuIik7CisJfQorCisJREJHKCJVc2luZyAlZCBidWZmZXJzLCBlYWNoICVkIGJ5dGVzLCBhbHRlcm5hdGU9JWRcbiIsCisJICAgIG51bV9idWZmZXJzLCBidWZmZXJfc2l6ZSwgYWx0ZXJuYXRlKTsKK30KKworLyoqKioqKioqKioqKiAgIE1vZHVsZSBTdHVmZiAqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGNwaWEyX2luaXQvbW9kdWxlX2luaXQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBjcGlhMl9pbml0KHZvaWQpCit7CisJTE9HKCIlcyB2JWQuJWQuJWRcbiIsCisJICAgIEFCT1VULCBDUElBMl9NQUpfVkVSLCBDUElBMl9NSU5fVkVSLCBDUElBMl9QQVRDSF9WRVIpOworCWNoZWNrX3BhcmFtZXRlcnMoKTsKKwljcGlhMl91c2JfaW5pdCgpOworCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjcGlhMl9leGl0L21vZHVsZV9leGl0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgX19leGl0IGNwaWEyX2V4aXQodm9pZCkKK3sKKwljcGlhMl91c2JfY2xlYW51cCgpOworCXNjaGVkdWxlX3RpbWVvdXQoMiAqIEhaKTsKK30KKworbW9kdWxlX2luaXQoY3BpYTJfaW5pdCk7Cittb2R1bGVfZXhpdChjcGlhMl9leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMmRldi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMmRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODA5N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyZGV2LmgKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgRmlsZW5hbWU6IGNwaWEyZGV2LmgKKyAqCisgKiAgQ29weXJpZ2h0IDIwMDEsIFNUTWljcm9sZWN0cm9uaWNzLCBJbmMuCisgKgorICogIENvbnRhY3Q6ICBzdGV2ZS5taWxsZXJAc3QuY29tCisgKgorICogIERlc2NyaXB0aW9uOgorICogICAgIFRoaXMgZmlsZSBwcm92aWRlcyBkZWZpbml0aW9ucyBmb3IgYXBwbGljYXRpb25zIHdhbnRpbmcgdG8gdXNlIHRoZQorICogICAgIGNwaWEyIGRyaXZlciBiZXlvbmQgdGhlIGdlbmVyaWMgdjRsIGNhcGFiaWxpdGllcy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIENQSUEyX0RFVl9IRUFERVIKKyNkZWZpbmUgQ1BJQTJfREVWX0hFQURFUgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKworLyoqKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBpb2N0bCBudW1iZXJzIGJhc2VkIG9uIHZpZGVvNGxpbnV4IHByaXZhdGUgaW9jdGxzLAorICogd2hpY2ggY2FuIHJhbmdlIGZyb20gMTkyIChCQVNFX1ZJRElPQ1BSSVZBVEUpIHRvIDI1NS4gQWxsIG9mIHRoZXNlIHRha2UgaW50CisgKiBhcmdzCisgKi8KKyNkZWZpbmUgQ1BJQTJfSU9DX1NFVF9HUElPICAgICAgICAgX0lPVygndicsIEJBU0VfVklESU9DUFJJVkFURSArIDE3LCBfX3UzMikKKworLyogVjRMMiBkcml2ZXIgc3BlY2lmaWMgY29udHJvbHMgKi8KKyNkZWZpbmUgQ1BJQTJfQ0lEX1RBUkdFVF9LQiAgICAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSswKQorI2RlZmluZSBDUElBMl9DSURfR1BJTyAgICAgICAgICAoVjRMMl9DSURfUFJJVkFURV9CQVNFKzEpCisjZGVmaW5lIENQSUEyX0NJRF9GTElDS0VSX01PREUgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UrMikKKyNkZWZpbmUgQ1BJQTJfQ0lEX0ZSQU1FUkFURSAgICAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSszKQorI2RlZmluZSBDUElBMl9DSURfVVNCX0FMVCAgICAgICAoVjRMMl9DSURfUFJJVkFURV9CQVNFKzQpCisjZGVmaW5lIENQSUEyX0NJRF9MSUdIVFMgICAgICAgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UrNSkKKyNkZWZpbmUgQ1BJQTJfQ0lEX1JFU0VUX0NBTUVSQSAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSs2KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJwYXRjaC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMnBhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwODVmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJwYXRjaC5oCkBAIC0wLDAgKzEsMjMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBGaWxlbmFtZTogY3BpYTJwYXRjaC5oCisgKgorICogIENvcHlyaWdodCAyMDAxLCBTVE1pY3JvbGVjdHJvbmljcywgSW5jLgorICoKKyAqICBDb250YWN0OiAgc3RldmUubWlsbGVyQHN0LmNvbQorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqICAgICBUaGlzIGZpbGUgY29udGFpbnMgcGF0Y2ggZGF0YSBmb3IgdGhlIENQaUEyIChzdHYwNjcyKSBWUDQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBDUElBMl9QQVRDSF9IRUFERVIKKyNkZWZpbmUgQ1BJQTJfUEFUQ0hfSEVBREVSCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIHJlZzsKKwl1bnNpZ25lZCBjaGFyIGNvdW50OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9IGNwaWEyX3BhdGNoOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdGFydF9hZGRyZXNzX2hpWzFdID0geworCTB4MDEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0YXJ0X2FkZHJlc3NfbG9bMV0gPSB7CisJMHhCQworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGF0Y2hfYmxvY2swWzY0XSA9IHsKKwkweEUzLCAweDAyLCAweEUzLCAweDAzLCAweEUzLCAweDA0LCAweEUzLCAweDA1LAorCTB4RTMsIDB4MDYsIDB4RTMsIDB4MDcsIDB4OTMsIDB4NDQsIDB4NTYsIDB4RDQsCisJMHg5MywgMHg0RSwgMHg1NiwgMHg1MSwgMHg5MywgMHg0RSwgMHg1MSwgMHhENiwKKwkweDkzLCAweDRFLCAweDRGLCAweDU0LCAweDkzLCAweDRFLCAweDkyLCAweDRGLAorCTB4OTIsIDB4QTQsIDB4OTMsIDB4MDUsIDB4OTIsIDB4RjQsIDB4OTMsIDB4MUIsCisJMHg5MiwgMHg5MiwgMHg5MSwgMHhFNiwgMHg5MiwgMHgzNiwgMHg5MiwgMHg3NCwKKwkweDkyLCAweDRBLCAweDkyLCAweDhDLCAweDkyLCAweDhFLCAweEM4LCAweEQwLAorCTB4MEIsIDB4NDIsIDB4MDIsIDB4QTAsIDB4Q0EsIDB4OTIsIDB4MDksIDB4MDIKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhdGNoX2Jsb2NrMVs2NF0gPSB7CisJMHhDOSwgMHgxMCwgMHgwQSwgMHgwQSwgMHgwQSwgMHg4MSwgMHhFMywgMHhCOCwKKwkweEUzLCAweEIwLCAweEUzLCAweEE4LCAweEUzLCAweEEwLCAweEUzLCAweDk4LAorCTB4RTMsIDB4OTAsIDB4RTEsIDB4MDAsIDB4Q0YsIDB4RDcsIDB4MEEsIDB4MTIsCisJMHhDQywgMHg5NSwgMHgwOCwgMHhCMiwgMHgwQSwgMHgxOCwgMHhFMSwgMHgwMCwKKwkweDAxLCAweEVFLCAweDBDLCAweDA4LCAweDRBLCAweDEyLCAweEM4LCAweDE4LAorCTB4RjAsIDB4OUEsIDB4QzAsIDB4MjIsIDB4RjMsIDB4MUMsIDB4NEEsIDB4MTMsCisJMHhGMywgMHgxNCwgMHhDOCwgMHhBMCwgMHhGMiwgMHgxNCwgMHhGMiwgMHgxQywKKwkweEVCLCAweDEzLCAweEQzLCAweEEyLCAweDYzLCAweDE2LCAweDQ4LCAweDlFCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYXRjaF9ibG9jazJbNjRdID0geworCTB4RjAsIDB4MTgsIDB4QTQsIDB4MDMsIDB4RjMsIDB4OTMsIDB4QzAsIDB4NTgsCisJMHhGNywgMHgxMywgMHg1MSwgMHg5QywgMHhFOSwgMHgyMCwgMHhDRiwgMHhFRiwKKwkweDYzLCAweEY5LCAweDkyLCAweDJFLCAweEQzLCAweDVGLCAweDYzLCAweEZBLAorCTB4OTIsIDB4MkUsIDB4RDMsIDB4NjcsIDB4NjMsIDB4RkIsIDB4OTIsIDB4MkUsCisJMHhEMywgMHg2RiwgMHhFOSwgMHgxQSwgMHg2MywgMHgxNiwgMHg0OCwgMHhBNywKKwkweEYwLCAweDIwLCAweEE0LCAweDA2LCAweEYzLCAweDk0LCAweEMwLCAweDI3LAorCTB4RjcsIDB4MTQsIDB4RjUsIDB4MTMsIDB4NTEsIDB4OUQsIDB4RjYsIDB4MTMsCisJMHg2MywgMHgxOCwgMHhDNCwgMHgyMCwgMHhDQiwgMHhFRiwgMHg2MywgMHhGQworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGF0Y2hfYmxvY2szWzY0XSA9IHsKKwkweDkyLCAweDJFLCAweEQzLCAweDc3LCAweDYzLCAweEZELCAweDkyLCAweDJFLAorCTB4RDMsIDB4N0YsIDB4NjMsIDB4RkUsIDB4OTIsIDB4MkUsIDB4RDMsIDB4ODcsCisJMHg2MywgMHhGRiwgMHg5MiwgMHgyRSwgMHhEMywgMHg4RiwgMHg2NCwgMHgzOCwKKwkweDkyLCAweDJFLCAweEQzLCAweDk3LCAweDY0LCAweDM5LCAweDkyLCAweDJFLAorCTB4RDMsIDB4OUYsIDB4RTEsIDB4MDAsIDB4RjUsIDB4M0EsIDB4RjQsIDB4M0IsCisJMHhGNywgMHhCRiwgMHhGMiwgMHhCQywgMHhGMiwgMHgzRCwgMHhFMSwgMHgwMCwKKwkweDgwLCAweDg3LCAweDkwLCAweDgwLCAweDUxLCAweEQ1LCAweDAyLCAweDIyLAorCTB4MDIsIDB4MzIsIDB4NEIsIDB4RDMsIDB4RjcsIDB4MTEsIDB4MEIsIDB4REEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhdGNoX2Jsb2NrNFs2NF0gPSB7CisJMHhFMSwgMHgwMCwgMHgwRSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwRCwgMHhCNSwKKwkweEUzLCAweDAyLCAweDQ4LCAweDU1LCAweEU1LCAweDEyLCAweEE0LCAweDAxLAorCTB4RTgsIDB4MUIsIDB4RTMsIDB4OTAsIDB4RjAsIDB4MTgsIDB4QTQsIDB4MDEsCisJMHhFOCwgMHhCRiwgMHg4RCwgMHhCOCwgMHg0QiwgMHhEMSwgMHg0QiwgMHhEOCwKKwkweDBCLCAweENCLCAweDBCLCAweEMyLCAweEUxLCAweDAwLCAweEUzLCAweDAyLAorCTB4RTMsIDB4MDMsIDB4NTIsIDB4RDMsIDB4NjAsIDB4NTksIDB4RTYsIDB4OTMsCisJMHgwRCwgMHgyMiwgMHg1MiwgMHhENCwgMHhFNiwgMHg5MywgMHgwRCwgMHgyQSwKKwkweEUzLCAweDk4LCAweEUzLCAweDkwLCAweEUxLCAweDAwLCAweDAyLCAweDVECit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYXRjaF9ibG9jazVbNjRdID0geworCTB4MDIsIDB4NjMsIDB4RTMsIDB4MDIsIDB4QzgsIDB4MTIsIDB4MDIsIDB4Q0EsCisJMHhDOCwgMHg1MiwgMHgwMiwgMHhDMiwgMHg4MiwgMHg2OCwgMHhFMywgMHgwMiwKKwkweEM4LCAweDE0LCAweDAyLCAweENBLCAweEM4LCAweDkwLCAweDAyLCAweEMyLAorCTB4MEEsIDB4RDAsIDB4QzksIDB4OTMsIDB4MEEsIDB4REEsIDB4Q0MsIDB4RDIsCisJMHgwQSwgMHhFMiwgMHg2MywgMHgxMiwgMHgwMiwgMHhEQSwgMHgwQSwgMHg5OCwKKwkweDBBLCAweEEwLCAweDBBLCAweEE4LCAweEUzLCAweDkwLCAweEUxLCAweDAwLAorCTB4RTMsIDB4MDIsIDB4MEEsIDB4RDAsIDB4QzksIDB4OTMsIDB4MEEsIDB4REEsCisJMHhDQywgMHhEMiwgMHgwQSwgMHhFMiwgMHg2MywgMHgxMiwgMHgwMiwgMHhEQQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGF0Y2hfYmxvY2s2WzY0XSA9IHsKKwkweDBBLCAweDk4LCAweDBBLCAweEEwLCAweDBBLCAweEE4LCAweDQ5LCAweDkxLAorCTB4RTUsIDB4NkEsIDB4QTQsIDB4MDQsIDB4QzgsIDB4MTIsIDB4MDIsIDB4Q0EsCisJMHhDOCwgMHg1MiwgMHg4MiwgMHg4OSwgMHhDOCwgMHgxNCwgMHgwMiwgMHhDQSwKKwkweEM4LCAweDkwLCAweDAyLCAweEMyLCAweEUzLCAweDkwLCAweEUxLCAweDAwLAorCTB4MDgsIDB4NjAsIDB4RTEsIDB4MDAsIDB4NDgsIDB4NTMsIDB4RTgsIDB4OTcsCisJMHgwOCwgMHg1QSwgMHhFMSwgMHgwMCwgMHhFMywgMHgwMiwgMHhFMywgMHgwMywKKwkweDU0LCAweEQzLCAweDYwLCAweDU5LCAweEU2LCAweDkzLCAweDBELCAweDUyLAorCTB4RTMsIDB4OTgsIDB4RTMsIDB4OTAsIDB4RTEsIDB4MDAsIDB4MDIsIDB4OUMKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhdGNoX2Jsb2NrN1s2NF0gPSB7CisJMHhFMywgMHgwMiwgMHg1NSwgMHgxMywgMHg5MywgMHgxNywgMHg1NSwgMHgxMywKKwkweDkzLCAweDE3LCAweEUzLCAweDkwLCAweEUxLCAweDAwLCAweDc1LCAweDMwLAorCTB4RTMsIDB4MDIsIDB4RTMsIDB4MDMsIDB4NTUsIDB4NTUsIDB4NjAsIDB4NTksCisJMHhFNiwgMHg5MywgMHgwRCwgMHhCMiwgMHhFMywgMHg5OCwgMHhFMywgMHg5MCwKKwkweEUxLCAweDAwLCAweDAyLCAweEFFLCAweEU3LCAweDkyLCAweEU5LCAweDE4LAorCTB4RUEsIDB4OUEsIDB4RTgsIDB4OTgsIDB4RTgsIDB4MTAsIDB4RTgsIDB4MTEsCisJMHhFOCwgMHg1MSwgMHhEMiwgMHhEQSwgMHhEMiwgMHhGMywgMHhFOCwgMHgxMywKKwkweEQyLCAweEZBLCAweEU4LCAweDUwLCAweEQyLCAweEVBLCAweEU4LCAweEQwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYXRjaF9ibG9jazhbNjRdID0geworCTB4RTgsIDB4RDEsIDB4RDMsIDB4MEEsIDB4MDMsIDB4MDksIDB4NDgsIDB4MjMsCisJMHhFNSwgMHgyQywgMHhBMCwgMHgwMywgMHg0OCwgMHgyNCwgMHhFQSwgMHgxQywKKwkweDAzLCAweDA4LCAweEQyLCAweEUzLCAweEQzLCAweDAzLCAweEQzLCAweDEzLAorCTB4RTEsIDB4MDAsIDB4MDIsIDB4Q0IsIDB4MDUsIDB4OTMsIDB4NTcsIDB4OTMsCisJMHhGMCwgMHg5QSwgMHhBQywgMHgwQiwgMHhFMywgMHgwNywgMHg5MiwgMHhFQSwKKwkweEUyLCAweDlGLCAweEU1LCAweDA2LCAweEUzLCAweEIwLCAweEEwLCAweDAyLAorCTB4RUIsIDB4MUUsIDB4ODIsIDB4RDcsIDB4RUEsIDB4MUUsIDB4RTIsIDB4M0IsCisJMHg4NSwgMHg5QiwgMHhFOSwgMHgxRSwgMHhDOCwgMHg5MCwgMHg4NSwgMHg5NAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGF0Y2hfYmxvY2s5WzY0XSA9IHsKKwkweDAyLCAweERFLCAweDA1LCAweDgwLCAweDU3LCAweDkzLCAweEYwLCAweEJBLAorCTB4QUMsIDB4MDYsIDB4OTIsIDB4RUEsIDB4RTIsIDB4QkYsIDB4RTUsIDB4MDYsCisJMHhBMCwgMHgwMSwgMHhFQiwgMHhCRiwgMHg4NSwgMHg4OCwgMHhFOSwgMHgzRSwKKwkweEM4LCAweDkwLCAweDg1LCAweDgxLCAweEU5LCAweDNFLCAweEYwLCAweEJBLAorCTB4RjMsIDB4MzksIDB4RjAsIDB4M0EsIDB4NjAsIDB4MTcsIDB4RjAsIDB4M0EsCisJMHhDMCwgMHg5MCwgMHhGMCwgMHhCQSwgMHhFMSwgMHgwMCwgMHgwMCwgMHgzRiwKKwkweEUzLCAweDAyLCAweEUzLCAweDAzLCAweDU4LCAweDEwLCAweDYwLCAweDU5LAorCTB4RTYsIDB4OTMsIDB4MEQsIDB4QTIsIDB4NTgsIDB4MTIsIDB4RTYsIDB4OTMKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhdGNoX2Jsb2NrMTBbNjRdID0geworCTB4MEQsIDB4QUEsIDB4RTMsIDB4OTgsIDB4RTMsIDB4OTAsIDB4RTEsIDB4MDAsCisJMHgwMywgMHgwMSwgMHhFMSwgMHgwMCwgMHgwMywgMHgwMywgMHg5QiwgMHg3RCwKKwkweDhCLCAweDhCLCAweEUzLCAweDAyLCAweEUzLCAweDAzLCAweDU4LCAweDU2LAorCTB4NjAsIDB4NTksIDB4RTYsIDB4OTMsIDB4MEQsIDB4QkEsIDB4RTMsIDB4OTgsCisJMHhFMywgMHg5MCwgMHhFMSwgMHgwMCwgMHgwMywgMHgwRiwgMHg5MywgMHgxMSwKKwkweEUxLCAweDAwLCAweEUzLCAweDAyLCAweDRBLCAweDExLCAweDBCLCAweDQyLAorCTB4OTEsIDB4QUYsIDB4RTMsIDB4OTAsIDB4RTEsIDB4MDAsIDB4RjIsIDB4OTEsCisJMHhGMCwgMHg5MSwgMHhBMywgMHhGRSwgMHhFMSwgMHgwMCwgMHg2MCwgMHg5MgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGF0Y2hfYmxvY2sxMVs2NF0gPSB7CisJMHhDMCwgMHg1RiwgMHhGMCwgMHgxMywgMHhGMCwgMHgxMywgMHg1OSwgMHg1QiwKKwkweEUyLCAweDEzLCAweEYwLCAweDExLCAweDVBLCAweDE5LCAweEUyLCAweDEzLAorCTB4RTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjcsIDB4NjgsIDB4NjEsCisJMHg3NiwgMHg2MSwgMHg2RSwgMHg2MSwgMHgwMCwgMHgwNiwgMHgwMywgMHgyQywKKwkweEUzLCAweDAyLCAweEUzLCAweDAzLCAweEU5LCAweDM4LCAweDU5LCAweDE1LAorCTB4NTksIDB4NUEsIDB4RjIsIDB4OUEsIDB4QkMsIDB4MEIsIDB4QTQsIDB4MEEsCisJMHg1OSwgMHgxRSwgMHhGMywgMHgxMSwgMHhGMCwgMHgxQSwgMHhFMiwgMHhCQiwKKwkweDU5LCAweDE1LCAweEYwLCAweDExLCAweDE5LCAweDJBLCAweEU1LCAweDAyCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYXRjaF9ibG9jazEyWzU0XSA9IHsKKwkweEE0LCAweDAxLCAweEVCLCAweEJGLCAweEUzLCAweDk4LCAweEUzLCAweDkwLAorCTB4RTEsIDB4MDAsIDB4MDMsIDB4NDIsIDB4MTksIDB4MjgsIDB4RTEsIDB4MDAsCisJMHhFOSwgMHgzMCwgMHg2MCwgMHg3OSwgMHhFMSwgMHgwMCwgMHhFMywgMHgwMywKKwkweEUzLCAweDA3LCAweDYwLCAweDc5LCAweDkzLCAweDRFLCAweEUzLCAweEI4LAorCTB4RTMsIDB4OTgsIDB4RTEsIDB4MDAsIDB4RTksIDB4MUEsIDB4RjAsIDB4MUYsCisJMHhFMiwgMHgzMywgMHhGMCwgMHg5MSwgMHhFMiwgMHg5MiwgMHhFMCwgMHgzMiwKKwkweEYwLCAweDMxLCAweEUxLCAweDAwLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkb19jYWxsWzFdID0geworCTB4MDEKK307CisKKworI2RlZmluZSBQQVRDSF9EQVRBX1NJWkUgMTgKKworc3RhdGljIGNvbnN0IGNwaWEyX3BhdGNoIHBhdGNoX2RhdGFbUEFUQ0hfREFUQV9TSVpFXSA9IHsKKwl7MHgwQSwgc2l6ZW9mKHN0YXJ0X2FkZHJlc3NfaGkpLCBzdGFydF9hZGRyZXNzX2hpfQorCSwJCQkvLyAwCisJezB4MEIsIHNpemVvZihzdGFydF9hZGRyZXNzX2xvKSwgc3RhcnRfYWRkcmVzc19sb30KKwksCQkJLy8gMQorCXsweDBDLCBzaXplb2YocGF0Y2hfYmxvY2swKSwgcGF0Y2hfYmxvY2swfQorCSwJCQkvLyAyCisJezB4MEMsIHNpemVvZihwYXRjaF9ibG9jazEpLCBwYXRjaF9ibG9jazF9CisJLAkJCS8vIDMKKwl7MHgwQywgc2l6ZW9mKHBhdGNoX2Jsb2NrMiksIHBhdGNoX2Jsb2NrMn0KKwksCQkJLy8gNAorCXsweDBDLCBzaXplb2YocGF0Y2hfYmxvY2szKSwgcGF0Y2hfYmxvY2szfQorCSwJCQkvLyA1CisJezB4MEMsIHNpemVvZihwYXRjaF9ibG9jazQpLCBwYXRjaF9ibG9jazR9CisJLAkJCS8vIDYKKwl7MHgwQywgc2l6ZW9mKHBhdGNoX2Jsb2NrNSksIHBhdGNoX2Jsb2NrNX0KKwksCQkJLy8gNworCXsweDBDLCBzaXplb2YocGF0Y2hfYmxvY2s2KSwgcGF0Y2hfYmxvY2s2fQorCSwJCQkvLyA4CisJezB4MEMsIHNpemVvZihwYXRjaF9ibG9jazcpLCBwYXRjaF9ibG9jazd9CisJLAkJCS8vIDkKKwl7MHgwQywgc2l6ZW9mKHBhdGNoX2Jsb2NrOCksIHBhdGNoX2Jsb2NrOH0KKwksCQkJLy8gMTAKKwl7MHgwQywgc2l6ZW9mKHBhdGNoX2Jsb2NrOSksIHBhdGNoX2Jsb2NrOX0KKwksCQkJLy8xMQorCXsweDBDLCBzaXplb2YocGF0Y2hfYmxvY2sxMCksIHBhdGNoX2Jsb2NrMTB9CisJLAkJCS8vIDEyCisJezB4MEMsIHNpemVvZihwYXRjaF9ibG9jazExKSwgcGF0Y2hfYmxvY2sxMX0KKwksCQkJLy8gMTMKKwl7MHgwQywgc2l6ZW9mKHBhdGNoX2Jsb2NrMTIpLCBwYXRjaF9ibG9jazEyfQorCSwJCQkvLyAxNAorCXsweDBBLCBzaXplb2Yoc3RhcnRfYWRkcmVzc19oaSksIHN0YXJ0X2FkZHJlc3NfaGl9CisJLAkJCS8vIDE1CisJezB4MEIsIHNpemVvZihzdGFydF9hZGRyZXNzX2xvKSwgc3RhcnRfYWRkcmVzc19sb30KKwksCQkJLy8gMTYKKwl7MHgwRCwgc2l6ZW9mKGRvX2NhbGwpLCBkb19jYWxsfQkvLzE3Cit9OworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhX3BwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfcHAuYwppbmRleCA3NGNmZjYyLi4zMDIxZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfcHAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfcHAuYwpAQCAtMjMsNyArMjMsNyBAQAogICovCiAKIC8qIGRlZmluZSBfQ1BJQV9ERUJVR18gZm9yIHZlcmJvc2UgZGVidWcgb3V0cHV0IChzZWUgY3BpYS5oKSAqLwotLyogI2RlZmluZSBfQ1BJQV9ERUJVR18gIDEgKi8gIAorLyogI2RlZmluZSBfQ1BJQV9ERUJVR18gIDEgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCkBAIC00NSw3ICs0NSw3IEBACiAKIHN0YXRpYyBpbnQgY3BpYV9wcF9vcGVuKHZvaWQgKnByaXZkYXRhKTsKIHN0YXRpYyBpbnQgY3BpYV9wcF9yZWdpc3RlckNhbGxiYWNrKHZvaWQgKnByaXZkYXRhLCB2b2lkICgqY2IpICh2b2lkICpjYmRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2JkYXRhKTsKKwkJCQkgICAgdm9pZCAqY2JkYXRhKTsKIHN0YXRpYyBpbnQgY3BpYV9wcF90cmFuc2ZlckNtZCh2b2lkICpwcml2ZGF0YSwgdTggKmNvbW1hbmQsIHU4ICpkYXRhKTsKIHN0YXRpYyBpbnQgY3BpYV9wcF9zdHJlYW1TdGFydCh2b2lkICpwcml2ZGF0YSk7CiBzdGF0aWMgaW50IGNwaWFfcHBfc3RyZWFtU3RvcCh2b2lkICpwcml2ZGF0YSk7CkBAIC05Myw3ICs5Myw3IEBACiAJaW50IHN0cmVhbV9pcnE7CiB9OwogCi1zdGF0aWMgc3RydWN0IGNwaWFfY2FtZXJhX29wcyBjcGlhX3BwX29wcyA9IAorc3RhdGljIHN0cnVjdCBjcGlhX2NhbWVyYV9vcHMgY3BpYV9wcF9vcHMgPQogewogCWNwaWFfcHBfb3BlbiwKIAljcGlhX3BwX3JlZ2lzdGVyQ2FsbGJhY2ssCkBAIC0xMjMsNyArMTIzLDcgQEAKIH0KIAogLyogU3BlY2lhbCBDUGlBIFBQQyBtb2RlczogVGhlc2UgYXJlIGludm9rZWQgYnkgdXNpbmcgdGhlIDEyODQgRXh0ZW5zaWJpbGl0eQotICogTGluayBGbGFnIGR1cmluZyBuZWdvdGlhdGlvbiAqLyAgCisgKiBMaW5rIEZsYWcgZHVyaW5nIG5lZ290aWF0aW9uICovCiAjZGVmaW5lIFVQTE9BRF9GTEFHICAweDA4CiAjZGVmaW5lIE5JQkJMRV9UUkFOU0ZFUiAweDAxCiAjZGVmaW5lIEVDUF9UUkFOU0ZFUiAweDAzCkBAIC0xMzksMTcgKzEzOSwxNyBAQAogLyogIENQaUEgbm9uc3RhbmRhcmQgIk5pYmJsZSIgbW9kZSAobm8gbkRhdGFBdmFpbCBzaWduYWwgYWZ0ZXIgZWFjaCBieXRlKS4gKi8KIC8qIFRoZSBzdGFuZGFyZCBrZXJuZWwgcGFycG9ydF9pZWVlMTI4NF9yZWFkX25pYmJsZSgpIGZhaWxzIHdpdGggdGhlIENQaUEuLi4gKi8KIAotc3RhdGljIHNpemVfdCBjcGlhX3JlYWRfbmliYmxlIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgCi0JCQkgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLCAKK3N0YXRpYyBzaXplX3QgY3BpYV9yZWFkX25pYmJsZSAoc3RydWN0IHBhcnBvcnQgKnBvcnQsCisJCQkgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuLAogCQkJIGludCBmbGFncykKIHsKLQkvKiBhZGFwdGVkIHZlcmJhdGltLCB3aXRoIG9uZSBjaGFuZ2UsIGZyb20gCisJLyogYWRhcHRlZCB2ZXJiYXRpbSwgd2l0aCBvbmUgY2hhbmdlLCBmcm9tCiAJICAgcGFycG9ydF9pZWVlMTI4NF9yZWFkX25pYmJsZSgpIGluIGRyaXZlcnMvcGFycG9ydC9pZWVlMTI4NC1vcHMuYyAqLwogCiAJdW5zaWduZWQgY2hhciAqYnVmID0gYnVmZmVyOwogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgYnl0ZSA9IDA7Ci0JCisKIAlsZW4gKj0gMjsgLyogaW4gbmliYmxlcyAqLwogCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKIAkJdW5zaWduZWQgY2hhciBuaWJibGU7CkBAIC0xNTgsMTIgKzE1OCwxMiBAQAogCQkgKiBhZnRlciBldmVyeSBzZWNvbmQgbmliYmxlIHRvIHNpZ25hbCB0aGF0IG1vcmUKIAkJICogZGF0YSBpcyBhdmFpbGFibGUuICAodGhlIHRvdGFsIG51bWJlciBvZiBCeXRlcyB0aGF0CiAJCSAqIHNob3VsZCBiZSBzZW50IGlzIGtub3duOyBpZiB0b28gZmV3IGFyZSByZWNlaXZlZCwgYW4gZXJyb3IKLQkJICogd2lsbCBiZSByZWNvcmRlZCBhZnRlciBhIHRpbWVvdXQpLiAgCisJCSAqIHdpbGwgYmUgcmVjb3JkZWQgYWZ0ZXIgYSB0aW1lb3V0KS4KIAkJICogVGhpcyBpcyBpbmNvbXBhdGlibGUgd2l0aCBwYXJwb3J0X2llZWUxMjg0X3JlYWRfbmliYmxlKCksCiAJCSAqIHdoaWNoIGV4cGVjdHMgdG8gZmluZCBuRmF1bHQgTE8gYWZ0ZXIgZXZlcnkgc2Vjb25kIG5pYmJsZS4KIAkJICovCiAKLQkJLyogU29sdXRpb246IG1vZGlmeSBjcGlhX3JlYWRfbmliYmxlIHRvIG9ubHkgY2hlY2sgZm9yIAorCQkvKiBTb2x1dGlvbjogbW9kaWZ5IGNwaWFfcmVhZF9uaWJibGUgdG8gb25seSBjaGVjayBmb3IKIAkJICogbkRhdGFBdmFpbCBiZWZvcmUgdGhlIGZpcnN0IG5pYmJsZSBpcyBzZW50LgogCQkgKi8KIApAQCAtMjE2LDcgKzIxNiw3IEBACiAJCQkvKiBTZWNvbmQgbmliYmxlICovCiAJCQlieXRlIHw9IG5pYmJsZSA8PCA0OwogCQkJKmJ1ZisrID0gYnl0ZTsKLQkJfSBlbHNlIAorCQl9IGVsc2UKIAkJCWJ5dGUgPSBuaWJibGU7CiAJfQogCkBAIC0yMzgsMTggKzIzOCwxOCBAQAogfQogCiAvKiBDUGlBIG5vbnN0YW5kYXJkICJOaWJibGUgU3RyZWFtIiBtb2RlICgyIG5pYmJsZXMgcGVyIGN5Y2xlLCBpbnN0ZWFkIG9mIDEpCi0gKiAoU2VlIENQaUEgRGF0YSBzaGVldCBwLiAzMSkgCi0gKiAKLSAqICJOaWJibGUgU3RyZWFtIiBtb2RlIHVzZWQgYnkgQ1BpQSBmb3IgdXBsb2FkcyB0byBub24tRUNQIHBvcnRzIGlzIGEgCi0gKiBub25zdGFuZGFyZCB2YXJpYW50IG9mIG5pYmJsZSBtb2RlIHdoaWNoIGFsbG93cyB0aGUgc2FtZSAobWVkaW9jcmUpIAotICogZGF0YSBmbG93IG9mIDggYml0cyBwZXIgY3ljbGUgYXMgc29mdHdhcmUtZW5hYmxlZCBFQ1AgYnkgVFJJU1RBVEUtY2FwYWJsZSAKKyAqIChTZWUgQ1BpQSBEYXRhIHNoZWV0IHAuIDMxKQorICoKKyAqICJOaWJibGUgU3RyZWFtIiBtb2RlIHVzZWQgYnkgQ1BpQSBmb3IgdXBsb2FkcyB0byBub24tRUNQIHBvcnRzIGlzIGEKKyAqIG5vbnN0YW5kYXJkIHZhcmlhbnQgb2YgbmliYmxlIG1vZGUgd2hpY2ggYWxsb3dzIHRoZSBzYW1lIChtZWRpb2NyZSkKKyAqIGRhdGEgZmxvdyBvZiA4IGJpdHMgcGVyIGN5Y2xlIGFzIHNvZnR3YXJlLWVuYWJsZWQgRUNQIGJ5IFRSSVNUQVRFLWNhcGFibGUKICAqIHBhcmFsbGVsIHBvcnRzLCBidXQgd29ya3MgYWxzbyBmb3IgIG5vbi1UUklTVEFURS1jYXBhYmxlIHBvcnRzLgogICogKFN0YW5kYXJkIG5pYmJsZSBtb2RlIG9ubHkgc2VuZCA0IGJpdHMgcGVyIGN5Y2xlKQogICoKICAqLwogCi1zdGF0aWMgc2l6ZV90IGNwaWFfcmVhZF9uaWJibGVfc3RyZWFtKHN0cnVjdCBwYXJwb3J0ICpwb3J0LCAKLQkJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBsZW4sIAorc3RhdGljIHNpemVfdCBjcGlhX3JlYWRfbmliYmxlX3N0cmVhbShzdHJ1Y3QgcGFycG9ydCAqcG9ydCwKKwkJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBsZW4sCiAJCQkgICAgICAgaW50IGZsYWdzKQogewogCWludCBpOwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCXVuc2lnbmVkIGNoYXIgbmliYmxlWzJdLCBieXRlID0gMDsKIAkJaW50IGo7CiAKLQkJLyogSW1hZ2UgRGF0YSBpcyBjb21wbGV0ZSB3aGVuIDQgY29uc2VjdXRpdmUgRU9JIGJ5dGVzICgweGZmKSBhcmUgc2VlbiAqLyAKKwkJLyogSW1hZ2UgRGF0YSBpcyBjb21wbGV0ZSB3aGVuIDQgY29uc2VjdXRpdmUgRU9JIGJ5dGVzICgweGZmKSBhcmUgc2VlbiAqLwogCQlpZiAoZW5kc2VlbiA+IDMgKQogCQkJYnJlYWs7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQAogCQlwYXJwb3J0X2Zyb2JfY29udHJvbCAocG9ydCwKIAkJCQkgICAgICBQQVJQT1JUX0NPTlRST0xfQVVUT0ZELAogCQkJCSAgICAgIFBBUlBPUlRfQ09OVFJPTF9BVVRPRkQpOwotCQkKKwogCQkvKiBFdmVudCA5OiBuQWNrIGdvZXMgbG93LiAqLwogCQlwb3J0LT5pZWVlMTI4NC5waGFzZSA9IElFRUUxMjg0X1BIX1JFVl9EQVRBOwogCQlpZiAocGFycG9ydF93YWl0X3BlcmlwaGVyYWwgKHBvcnQsCkBAIC0yODIsNyArMjgyLDcgQEAKIAogCQkvKiBSZWFkIGxvd2VyIG5pYmJsZSAqLwogCQluaWJibGVbMF0gPSBwYXJwb3J0X3JlYWRfc3RhdHVzIChwb3J0KSA+PjM7Ci0JCQorCiAJCS8qIEV2ZW50IDEwOiBTZXQgbkF1dG9GZCBoaWdoLiAqLwogCQlwYXJwb3J0X2Zyb2JfY29udHJvbCAocG9ydCwgUEFSUE9SVF9DT05UUk9MX0FVVE9GRCwgMCk7CiAKQEAgLTI5NSwxMCArMjk1LDEwIEBACiAJCQkJIHBvcnQtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KLQkJCisKIAkJLyogUmVhZCB1cHBlciBuaWJibGUgKi8KIAkJbmliYmxlWzFdID0gcGFycG9ydF9yZWFkX3N0YXR1cyAocG9ydCkgPj4zOwotCQkKKwogCQkvKiByZWFzc2VtYmxlIHRoZSBieXRlICovCiAJCWZvciAoaiA9IDA7IGogPCAyIDsgaisrICkgewogCQkJbmliYmxlW2pdICY9IH44OwpAQCAtMzM1LDggKzMzNSw4IEBACiBzdGF0aWMgaW50IEZvcndhcmRTZXR1cChzdHJ1Y3QgcHBfY2FtX2VudHJ5ICpjYW0pCiB7CiAJaW50IHJldHJ5OwotCQotCS8qIFRoZSBDUGlBIHVzZXMgRUNQIHByb3RvY29sIGZvciBEb3dubG9hZHMgZnJvbSB0aGUgSG9zdCB0byB0aGUgY2FtZXJhLiAKKworCS8qIFRoZSBDUGlBIHVzZXMgRUNQIHByb3RvY29sIGZvciBEb3dubG9hZHMgZnJvbSB0aGUgSG9zdCB0byB0aGUgY2FtZXJhLgogCSAqIFRoaXMgd2lsbCBiZSBzb2Z0d2FyZS1lbXVsYXRlZCBpZiBFQ1AgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQKIAkgKi8KIApAQCAtMzc1LDkgKzM3NSw5IEBACiAJdXBsb2FkX21vZGUgPSBtb2RlOwogCWlmKGV4dGVuc2liaWxpdHkpIG1vZGUgPSBVUExPQURfRkxBR3x0cmFuc2Zlcl9tb2RlfElFRUUxMjg0X0VYVF9MSU5LOwogCi0JLyogdGhlIHVzdWFsIGNhbWVyYSBtYXhpbXVtIHJlc3BvbnNlIHRpbWUgaXMgMTBtcywgYnV0IGFmdGVyIAorCS8qIHRoZSB1c3VhbCBjYW1lcmEgbWF4aW11bSByZXNwb25zZSB0aW1lIGlzIDEwbXMsIGJ1dCBhZnRlcgogCSAqIHJlY2VpdmluZyBzb21lIGNvbW1hbmRzLCBpdCBuZWVkcyB1cCB0byA0MG1zLiAqLwotCQkKKwogCWZvcihyZXRyeSA9IDA7IHJldHJ5IDwgNDsgKytyZXRyeSkgewogCQlpZighcGFycG9ydF9uZWdvdGlhdGUoY2FtLT5wb3J0LCBtb2RlKSkgewogCQkJYnJlYWs7CkBAIC00MzksMTAgKzQzOSwxMCBAQAogCiAJLyogc3VwcG9ydCBmb3IgQ1BpQSB2YXJpYW50IG5pYmJsZSByZWFkcyAqLwogCWlmKGNhbS0+cG9ydC0+aWVlZTEyODQubW9kZSA9PSBJRUVFMTI4NF9NT0RFX05JQkJMRSkgewotCQlpZihjcGlhX3JlYWRfbmliYmxlKGNhbS0+cG9ydCwgcGFja2V0LCBzaXplLCAwKSAhPSBzaXplKSAKLQkJCXJldHZhbCA9IC1FSU87CQkJCisJCWlmKGNwaWFfcmVhZF9uaWJibGUoY2FtLT5wb3J0LCBwYWNrZXQsIHNpemUsIDApICE9IHNpemUpCisJCQlyZXR2YWwgPSAtRUlPOwogCX0gZWxzZSB7Ci0JCWlmKHBhcnBvcnRfcmVhZChjYW0tPnBvcnQsIHBhY2tldCwgc2l6ZSkgIT0gc2l6ZSkgCisJCWlmKHBhcnBvcnRfcmVhZChjYW0tPnBvcnQsIHBhY2tldCwgc2l6ZSkgIT0gc2l6ZSkKIAkJCXJldHZhbCA9IC1FSU87CiAJfQogCUVuZFRyYW5zZmVyTW9kZShjYW0pOwpAQCAtNTQyLDE4ICs1NDIsMTggQEAKIAlibG9ja19zaXplID0gUEFSUE9SVF9DSFVOS19TSVpFOwogCXdoaWxlKCAhY2FtLT5pbWFnZV9jb21wbGV0ZSApIHsKIAkJY29uZF9yZXNjaGVkKCk7Ci0JCQorCiAJCW5ld19ieXRlcyA9IGNwaWFfcHBfcmVhZChjYW0tPnBvcnQsIGJ1ZmZlciwgYmxvY2tfc2l6ZSApOwogCQlpZiggbmV3X2J5dGVzIDw9IDAgKSB7CiAJCQlicmVhazsKIAkJfQogCQlpPS0xOwogCQl3aGlsZSgrK2k8bmV3X2J5dGVzICYmIGVuZHNlZW48NCkgewotCSAgICAgICAgCWlmKCpidWZmZXI9PUVPSSkgewotCSAgICAgICAgICAgICAgICAJZW5kc2VlbisrOwotCSAgICAgICAgICAgICAgICB9IGVsc2UgewotCSAgICAgICAgICAgICAgICAJZW5kc2Vlbj0wOwotCSAgICAgICAgICAgICAgICB9CisJCQlpZigqYnVmZmVyPT1FT0kpIHsKKwkJCQllbmRzZWVuKys7CisJCQl9IGVsc2UgeworCQkJCWVuZHNlZW49MDsKKwkJCX0KIAkJCWJ1ZmZlcisrOwogCQl9CiAJCXJlYWRfYnl0ZXMgKz0gaTsKQEAgLTYwMSw3ICs2MDEsNyBAQAogCQl9CiAJCWlmKChlcnIgPSBSZWFkUGFja2V0KGNhbSwgYnVmZmVyLCA4KSkgPCAwKSB7CiAJCQlEQkcoIkVycm9yIHJlYWRpbmcgY29tbWFuZCByZXN1bHRcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworCQkgICAgICAgcmV0dXJuIGVycjsKIAkJfQogCQltZW1jcHkoZGF0YSwgYnVmZmVyLCBkYXRhYnl0ZXMpOwogCX0gZWxzZSBpZihjb21tYW5kWzBdID09IERBVEFfT1VUKSB7CkBAIC02MzEsMTAgKzYzMSwxMCBAQAogc3RhdGljIGludCBjcGlhX3BwX29wZW4odm9pZCAqcHJpdmRhdGEpCiB7CiAJc3RydWN0IHBwX2NhbV9lbnRyeSAqY2FtID0gKHN0cnVjdCBwcF9jYW1fZW50cnkgKilwcml2ZGF0YTsKLQkKKwogCWlmIChjYW0gPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JCisKIAlpZihjYW0tPm9wZW5fY291bnQgPT0gMCkgewogCQlpZiAocGFycG9ydF9jbGFpbShjYW0tPnBkZXYpKSB7CiAJCQlEQkcoImZhaWxlZCB0byBjbGFpbSB0aGUgcG9ydFxuIik7CkBAIC02NDUsMTIgKzY0NSwxMiBAQAogCQlwYXJwb3J0X3dyaXRlX2NvbnRyb2woY2FtLT5wb3J0LCBQQVJQT1JUX0NPTlRST0xfU0VMRUNUKTsKIAkJdWRlbGF5KDUwKTsKIAkJcGFycG9ydF93cml0ZV9jb250cm9sKGNhbS0+cG9ydCwKLQkJICAgICAgICAgICAgICAgICAgICAgIFBBUlBPUlRfQ09OVFJPTF9TRUxFQ1QKLQkJICAgICAgICAgICAgICAgICAgICAgIHwgUEFSUE9SVF9DT05UUk9MX0lOSVQpOworCQkJCSAgICAgIFBBUlBPUlRfQ09OVFJPTF9TRUxFQ1QKKwkJCQkgICAgICB8IFBBUlBPUlRfQ09OVFJPTF9JTklUKTsKIAl9Ci0JCisKIAkrK2NhbS0+b3Blbl9jb3VudDsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC02NjMsNyArNjYzLDcgQEAKIHsKIAlzdHJ1Y3QgcHBfY2FtX2VudHJ5ICpjYW0gPSBwcml2ZGF0YTsKIAlpbnQgcmV0dmFsID0gMDsKLQkKKwogCWlmKGNhbS0+cG9ydC0+aXJxICE9IFBBUlBPUlRfSVJRX05PTkUpIHsKIAkJSU5JVF9XT1JLKCZjYW0tPmNiX3Rhc2ssIGNiLCBjYmRhdGEpOwogCX0gZWxzZSB7CkBAIC03MDcsOSArNzA3LDkgQEAKIAkJTE9HKCJmYWlsZWQgdG8gYWxsb2NhdGUgY2FtZXJhIHN0cnVjdHVyZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQkKKwogCXBkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCAiY3BpYV9wcCIsIE5VTEwsIE5VTEwsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIGNhbSk7CisJCQkJICAgICAgIE5VTEwsIDAsIGNhbSk7CiAKIAlpZiAoIXBkZXYpIHsKIAkJTE9HKCJmYWlsZWQgdG8gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2VcbiIpOwpAQCAtNzUzLDE5ICs3NTMsMTkgQEAKIAkJfQogCQljcGlhID0gTlVMTDsKIAl9Ci0Jc3Bpbl91bmxvY2soICZjYW1fbGlzdF9sb2NrX3BwICk7CQkJCisJc3Bpbl91bmxvY2soICZjYW1fbGlzdF9sb2NrX3BwICk7CiAKIAlpZiAoIWNwaWEpIHsKIAkJREJHKCJjcGlhX3BwX2RldGFjaCBmYWlsZWQgdG8gZmluZCBjYW1fZGF0YSBpbiBjYW1fbGlzdFxuIik7CiAJCXJldHVybjsKIAl9Ci0JCi0JY2FtID0gKHN0cnVjdCBwcF9jYW1fZW50cnkgKikgY3BpYS0+bG93bGV2ZWxfZGF0YTsJCisKKwljYW0gPSAoc3RydWN0IHBwX2NhbV9lbnRyeSAqKSBjcGlhLT5sb3dsZXZlbF9kYXRhOwogCWNwaWFfdW5yZWdpc3Rlcl9jYW1lcmEoY3BpYSk7Ci0JaWYoY2FtLT5vcGVuX2NvdW50ID4gMCkgCisJaWYoY2FtLT5vcGVuX2NvdW50ID4gMCkKIAkJY3BpYV9wcF9jbG9zZShjYW0pOwogCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT5wZGV2KTsKLQljcGlhLT5sb3dsZXZlbF9kYXRhID0gTlVMTDsJCisJY3BpYS0+bG93bGV2ZWxfZGF0YSA9IE5VTEw7CiAJa2ZyZWUoY2FtKTsKIH0KIApAQCAtODA1LDE0ICs4MDUsMTQgQEAKIAogaW50IGNwaWFfcHBfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gIiVzIHYlZC4lZC4lZFxuIixBQk9VVCwgCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdiVkLiVkLiVkXG4iLEFCT1VULAogCSAgICAgICBDUElBX1BQX01BSl9WRVIsQ1BJQV9QUF9NSU5fVkVSLENQSUFfUFBfUEFUQ0hfVkVSKTsKIAogCWlmKHBhcnBvcnRfbnJbMF0gPT0gUFBDUElBX1BBUlBPUlRfT0ZGKSB7CiAJCXByaW50aygiICBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAwOwogCX0KLQkKKwogCXNwaW5fbG9ja19pbml0KCAmY2FtX2xpc3RfbG9ja19wcCApOwogCiAJaWYgKHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyICgmY3BpYV9wcF9kcml2ZXIpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfdXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWFfdXNiLmMKaW5kZXggMDMyNzVjMy4uOWM0OWE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhX3VzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYV91c2IuYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKIC8qIGRlZmluZSBfQ1BJQV9ERUJVR18gZm9yIHZlcmJvc2UgZGVidWcgb3V0cHV0IChzZWUgY3BpYS5oKSAqLwotLyogI2RlZmluZSBfQ1BJQV9ERUJVR18gIDEgKi8gIAorLyogI2RlZmluZSBfQ1BJQV9ERUJVR18gIDEgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtODUsNyArODUsNyBAQAogCiBzdGF0aWMgaW50IGNwaWFfdXNiX29wZW4odm9pZCAqcHJpdmRhdGEpOwogc3RhdGljIGludCBjcGlhX3VzYl9yZWdpc3RlckNhbGxiYWNrKHZvaWQgKnByaXZkYXRhLCB2b2lkICgqY2IpICh2b2lkICpjYmRhdGEpLAotCQkJICAgICAgICAgICAgIHZvaWQgKmNiZGF0YSk7CisJCQkJICAgICB2b2lkICpjYmRhdGEpOwogc3RhdGljIGludCBjcGlhX3VzYl90cmFuc2ZlckNtZCh2b2lkICpwcml2ZGF0YSwgdTggKmNvbW1hbmQsIHU4ICpkYXRhKTsKIHN0YXRpYyBpbnQgY3BpYV91c2Jfc3RyZWFtU3RhcnQodm9pZCAqcHJpdmRhdGEpOwogc3RhdGljIGludCBjcGlhX3VzYl9zdHJlYW1TdG9wKHZvaWQgKnByaXZkYXRhKTsKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQl1Y3BpYS0+d29ya2J1ZmYtPnN0YXR1cyA9IEZSQU1FX1JFQURJTkc7CiAJCXVjcGlhLT53b3JrYnVmZi0+bGVuZ3RoID0gMDsKIAl9Ci0gCQkgIAorCiAJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewogCQlpbnQgbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKIAkJaW50IHN0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CkBAIC0xNDEsOSArMTQxLDkgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICJjcGlhOiBzY3JhdGNoIGJ1ZiBvdmVyZmxvdyFzY3JfbGVuOiAlZCwgbjogJWRcbiIsIHVjcGlhLT53b3JrYnVmZi0+bGVuZ3RoLCBuKTsKIAkJCXJldHVybjsKIAkJfQotCSAgICAKKwogCQlpZiAobikgewotCQkJaWYgKCh1Y3BpYS0+d29ya2J1ZmYtPmxlbmd0aCA+IDApIHx8IAorCQkJaWYgKCh1Y3BpYS0+d29ya2J1ZmYtPmxlbmd0aCA+IDApIHx8CiAJCQkgICAgKDB4MTkgPT0gY2RhdGFbMF0gJiYgMHg2OCA9PSBjZGF0YVsxXSkpIHsKIAkJCQltZW1jcHkodWNwaWEtPndvcmtidWZmLT5kYXRhICsgdWNwaWEtPndvcmtidWZmLT5sZW5ndGgsIGNkYXRhLCBuKTsKIAkJCQl1Y3BpYS0+d29ya2J1ZmYtPmxlbmd0aCArPSBuOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJCQkJdWNwaWEtPndvcmtidWZmID0gdWNwaWEtPndvcmtidWZmLT5uZXh0OwogCQkJCXVjcGlhLT53b3JrYnVmZi0+c3RhdHVzID0gRlJBTUVfRU1QVFk7CiAJCQkJdWNwaWEtPndvcmtidWZmLT5sZW5ndGggPSAwOwotCQkgIAorCiAJCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnVjcGlhLT53cV9zdHJlYW0pKQogCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVjcGlhLT53cV9zdHJlYW0pOwogCQkJfQpAQCAtMTc4LDcgKzE3OCw3IEBACiAJc3RydWN0IHVzYl9jcGlhICp1Y3BpYSA9IChzdHJ1Y3QgdXNiX2NwaWEgKikgcHJpdmRhdGE7CiAJc3RydWN0IHVyYiAqdXJiOwogCWludCByZXQsIHJldHZhbCA9IDAsIGZ4LCBlcnI7Ci0gIAorCiAJaWYgKCF1Y3BpYSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQAogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGVycm9yXzA7CiAJfQotCQorCiAJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodWNwaWEtPmRldiwgdWNwaWEtPmlmYWNlLCAzKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImNwaWFfdXNiX29wZW46IHVzYl9zZXRfaW50ZXJmYWNlIGVycm9yIChyZXQgPSAlZClcbiIsIHJldCk7CkBAIC0yODYsNyArMjg2LDcgQEAKIGVycm9yXzA6CiAJa2ZyZWUgKHVjcGlhLT5zYnVmWzBdLmRhdGEpOwogCXVjcGlhLT5zYnVmWzBdLmRhdGEgPSBOVUxMOwotCQorCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzA3LDcgKzMwNyw3IEBACiAJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCiAJCQkgcGFja2V0WzFdICsgKHBhY2tldFswXSA8PCA4KSwKIAkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJIHBhY2tldFsyXSArIChwYWNrZXRbM10gPDwgOCksIAorCQkJIHBhY2tldFsyXSArIChwYWNrZXRbM10gPDwgOCksCiAJCQkgcGFja2V0WzRdICsgKHBhY2tldFs1XSA8PCA4KSwgYnVmLCBzaXplLCAxMDAwKTsKIH0KIApAQCAtMzI0LDcgKzMyNCw3IEBACiAJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCiAJCQkgcGFja2V0WzFdICsgKHBhY2tldFswXSA8PCA4KSwKIAkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSBwYWNrZXRbMl0gKyAocGFja2V0WzNdIDw8IDgpLCAKKwkJCSBwYWNrZXRbMl0gKyAocGFja2V0WzNdIDw8IDgpLAogCQkJIHBhY2tldFs0XSArIChwYWNrZXRbNV0gPDwgOCksIGJ1Ziwgc2l6ZSwgMTAwMCk7CiB9CiAKQEAgLTM5Myw3ICszOTMsNyBAQAogCiAJaWYgKCF1Y3BpYSB8fCAhdWNwaWEtPnByZXNlbnQpCiAJCXJldHVybiAtMTsKLSAgCisKIAlpZiAodWNwaWEtPmN1cmJ1ZmYtPnN0YXR1cyAhPSBGUkFNRV9SRUFEWSkKIAkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmdWNwaWEtPndxX3N0cmVhbSk7CiAJZWxzZQpAQCAtNDAzLDcgKzQwMyw3IEBACiAKIAlpZiAoIW15YnVmZikKIAkJcmV0dXJuIC0xOwotICAKKwogCWlmIChteWJ1ZmYtPnN0YXR1cyAhPSBGUkFNRV9SRUFEWSB8fCBteWJ1ZmYtPmxlbmd0aCA8IDQpIHsKIAkJREJHKCJTb21ldGhpbmcgd2VudCB3cm9uZyFcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC00MTEsNyArNDExLDcgQEAKIAogCW1lbWNweShmcmFtZSwgbXlidWZmLT5kYXRhLCBteWJ1ZmYtPmxlbmd0aCk7CiAJbXlidWZmLT5zdGF0dXMgPSBGUkFNRV9FTVBUWTsKLSAgCisKIC8qICAgREJHKCJyZWFkIGRvbmUsICVkIGJ5dGVzLCBIZWFkZXI6ICV4LyV4LCBGb290ZXI6ICV4JXgleCV4XG4iLCAgKi8KIC8qICAgICAgIG15YnVmZi0+bGVuZ3RoLCBmcmFtZVswXSwgZnJhbWVbMV0sICovCiAvKiAgICAgICBmcmFtZVtteWJ1ZmYtPmxlbmd0aC00XSwgZnJhbWVbbXlidWZmLT5sZW5ndGgtM10sICAqLwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAKIAlrZnJlZSh1Y3BpYS0+c2J1ZlsxXS5kYXRhKTsKIAl1Y3BpYS0+c2J1ZlsxXS5kYXRhID0gTlVMTDsKLSAKKwogCWlmICh1Y3BpYS0+c2J1ZlswXS51cmIpIHsKIAkJdXNiX2tpbGxfdXJiKHVjcGlhLT5zYnVmWzBdLnVyYik7CiAJCXVzYl9mcmVlX3VyYih1Y3BpYS0+c2J1ZlswXS51cmIpOwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJc3RydWN0IHVzYl9jcGlhICp1Y3BpYTsKIAlzdHJ1Y3QgY2FtX2RhdGEgKmNhbTsKIAlpbnQgcmV0OwotICAKKwogCS8qIEEgbXVsdGktY29uZmlnIENQaUEgY2FtZXJhPyAqLwogCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTUzOSw3ICs1MzksNyBAQAogCiAJLyogQmVmb3JlIHJlZ2lzdGVyX2NhbWVyYSwgaW1wb3J0YW50ICovCiAJdWNwaWEtPnByZXNlbnQgPSAxOwotICAKKwogCWNhbSA9IGNwaWFfcmVnaXN0ZXJfY2FtZXJhKCZjcGlhX3VzYl9vcHMsIHVjcGlhKTsKIAlpZiAoIWNhbSkgewogCQlMT0coImZhaWxlZCB0byBjcGlhX3JlZ2lzdGVyX2NhbWVyYVxuIik7CkBAIC01OTEsNyArNTkxLDcgQEAKIAlzdHJ1Y3QgY2FtX2RhdGEgKmNhbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJc3RydWN0IHVzYl9jcGlhICp1Y3BpYTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLSAgCisKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCWlmICghY2FtKQogCQlyZXR1cm47CkBAIC02MDAsNyArNjAwLDcgQEAKIAlzcGluX2xvY2soICZjYW1fbGlzdF9sb2NrX3VzYiApOwogCWxpc3RfZGVsKCZjYW0tPmNhbV9kYXRhX2xpc3QpOwogCXNwaW5fdW5sb2NrKCAmY2FtX2xpc3RfbG9ja191c2IgKTsKLQkKKwogCXVjcGlhLT5wcmVzZW50ID0gMDsKIAogCWNwaWFfdW5yZWdpc3Rlcl9jYW1lcmEoY2FtKTsKQEAgLTYzMSw3ICs2MzEsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JfY3BpYV9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgdiVkLiVkLiVkXG4iLEFCT1VULCAKKwlwcmludGsoS0VSTl9JTkZPICIlcyB2JWQuJWQuJWRcbiIsQUJPVVQsCiAJICAgICAgIENQSUFfVVNCX01BSl9WRVIsQ1BJQV9VU0JfTUlOX1ZFUixDUElBX1VTQl9QQVRDSF9WRVIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNhbV9saXN0X2xvY2tfdXNiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwppbmRleCA4NzM5YzY0Li5kZTg3MjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCkBAIC01OSwyNSArNTksMjUgQEAKIHN0YXRpYyBpbnQgY3M1M2wzMmFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgdjRsMl9hdWRpbyAqaW5wdXQgPSBhcmc7CisJc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CiAJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfU19BVURJTzoKKwljYXNlIFZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HOgorCQlyb3V0ZS0+aW5wdXQgPSAoY3M1M2wzMmFfcmVhZChjbGllbnQsIDB4MDEpID4+IDQpICYgMzsKKwkJcm91dGUtPm91dHB1dCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKIAkJLyogVGhlcmUgYXJlIDIgcGh5c2ljYWwgaW5wdXRzLCBidXQgdGhlIHNlY29uZCBpbnB1dCBjYW4gYmUKIAkJICAgcGxhY2VkIGluIHR3byBtb2RlcywgdGhlIGZpcnN0IG1vZGUgYnlwYXNzZXMgdGhlIFBHQSAoZ2FpbiksCiAJCSAgIHRoZSBzZWNvbmQgZ29lcyB0aHJvdWdoIHRoZSBQR0EuIEhlbmNlIHRoZXJlIGFyZSB0aHJlZQogCQkgICBwb3NzaWJsZSBpbnB1dHMgdG8gY2hvb3NlIGZyb20uICovCi0JCWlmIChpbnB1dC0+aW5kZXggPiAyKSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgIkludmFsaWQgaW5wdXQgJWQuXG4iLCBpbnB1dC0+aW5kZXgpOworCQlpZiAocm91dGUtPmlucHV0ID4gMikgeworCQkJdjRsX2VycihjbGllbnQsICJJbnZhbGlkIGlucHV0ICVkLlxuIiwgcm91dGUtPmlucHV0KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWNzNTNsMzJhX3dyaXRlKGNsaWVudCwgMHgwMSwgMHgwMSArIChpbnB1dC0+aW5kZXggPDwgNCkpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfQVVESU86Ci0JCW1lbXNldChpbnB1dCwgMCwgc2l6ZW9mKCppbnB1dCkpOwotCQlpbnB1dC0+aW5kZXggPSAoY3M1M2wzMmFfcmVhZChjbGllbnQsIDB4MDEpID4+IDQpICYgMzsKKwkJY3M1M2wzMmFfd3JpdGUoY2xpZW50LCAweDAxLCAweDAxICsgKHJvdXRlLT5pbnB1dCA8PCA0KSk7CiAJCWJyZWFrOwogCiAJY2FzZSBWSURJT0NfR19DVFJMOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jczg0MjAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M4NDIwLmgKaW5kZXggMmIyMmYzYS4uNjIxYzBjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jczg0MjAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzODQyMC5oCkBAIC0yMCw3ICsyMCw3IEBACiAjZGVmaW5lIF9fQ1M4NDIwX0hfXwogCiAvKiBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSAqLwotCSAKKwogc3RhdGljIF9fdTggaW5pdDg0MjBbXSA9IHsKIAkxLCAweDAxLAkyLCAweDAyLAkzLCAweDAwLAk0LCAweDQ2LAogCTUsIDB4MjQsCTYsIDB4ODQsCTE4LCAweDE4LAkxOSwgMHgxMywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0MjY0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIFZJREVPX0NYMjU4NDAKKwl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyNTg0eCBhdWRpby92aWRlbyBkZWNvZGVycyIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBDb25leGFudCBDWDI1ODR4IGF1ZGlvL3ZpZGVvIGRlY29kZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDI1ODQwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvTWFrZWZpbGUKaW5kZXggNTQzZWJhYy4uMzJhODk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKIGN4MjU4NDAtb2JqcyAgICA6PSBjeDI1ODQwLWNvcmUubyBjeDI1ODQwLWF1ZGlvLm8gY3gyNTg0MC1maXJtd2FyZS5vIFwKIAkJICAgY3gyNTg0MC12YmkubwogCi1vYmotJChDT05GSUdfVklERU9fREVDT0RFUikgKz0gY3gyNTg0MC5vCitvYmotJChDT05GSUdfVklERU9fQ1gyNTg0MCkgKz0gY3gyNTg0MC5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKS8uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKaW5kZXggY2I5YTc5OC4uYTQ1NDBlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogCiAjaW5jbHVkZSAiY3gyNTg0MC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCmluZGV4IDA4ZmZkMWYuLmE2NWIzY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogI2luY2x1ZGUgImN4MjU4NDAuaCIKQEAgLTE3Niw5ICsxNzUsOSBAQAogCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDRhNSwgMHgwMCk7CiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDAyLCAweDAwKTsKIAkvKiA4LiAqLwotCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQwMSwgMHgxOCk7Ci0JY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NGEyLCAweDEwKTsKLQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDIsIDB4MDQpOworCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg0MDEsIH4weDE4LCAwKTsKKwljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4NGEyLCB+MHgxMCwgMHgxMCk7CisJLyogc3RlcHMgOGMgYW5kIDhkIGFyZSBkb25lIGluIGNoYW5nZV9pbnB1dCgpICovCiAJLyogMTAuICovCiAJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4OGQzLCAweDFmKTsKIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZTMsIDB4MDMpOwpAQCAtMjA5LDYgKzIwOCwxNyBAQAogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXY0bDJfc3RkX2lkIHN0ZCA9IGN4MjU4NDBfZ2V0X3Y0bHN0ZChjbGllbnQpOwogCisJLyogRm9sbG93IHN0ZXAgOGMgYW5kIDhkIG9mIHNlY3Rpb24gMy4xNiBpbiB0aGUgY3gyNTg0MCBkYXRhc2hlZXQgKi8KKwlpZiAoc3RkICYgVjRMMl9TVERfU0VDQU0pIHsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDAyLCAwKTsKKwl9CisJZWxzZSB7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQwMiwgMHgwNCk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ5ZiwgKHN0ZCAmIFY0TDJfU1REX05UU0MpID8gMHgxNCA6IDB4MTEpOworCX0KKwljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4NDAxLCB+MHg2MCwgMCk7CisJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDQwMSwgfjB4NjAsIDB4NjApOworCiAJLyogTm90ZTogcGVyaGFwcyBWNEwyX1NURF9QQUxfTSBzaG91bGQgYmUgaGFuZGxlZCBhcyBWNEwyX1NURF9OVFNDCiAJICAgaW5zdGVhZCBvZiBWNEwyX1NURF9QQUwuIFNvbWVvbmUgbmVlZHMgdG8gdGVzdCB0aGlzLiAqLwogCWlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKQEAgLTM0Myw2ICszNTMsMTUgQEAKIAkJfQogCX0KIAorCS8qIEZvbGxvdyBzdGVwIDkgb2Ygc2VjdGlvbiAzLjE2IGluIHRoZSBjeDI1ODQwIGRhdGFzaGVldC4KKwkgICBXaXRob3V0IHRoaXMgUEFMIG1heSBkaXNwbGF5IGEgdmVydGljYWwgZ2hvc3RpbmcgZWZmZWN0LgorCSAgIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSB3aXRoIHRoZSBZdWFuIE1QQzYyMi4gKi8KKwlpZiAoZm10ID49IDQgJiYgZm10IDwgOCkgeworCQkvKiBTZXQgZm9ybWF0IHRvIE5UU0MtTSAqLworCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4NDAwLCB+MHhmLCAxKTsKKwkJLyogVHVybiBvZmYgTENPTUIgKi8KKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDQ3YiwgfjYsIDApOworCX0KIAljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4NDAwLCB+MHhmLCBmbXQpOwogCWN4MjU4NDBfdmJpX3NldHVwKGNsaWVudCk7CiAJcmV0dXJuIDA7CkBAIC0zNTksNyArMzc4LDE0IEBACiAJfQogCiAJc3dpdGNoIChmbXQpIHsKLQljYXNlIDB4MTogcmV0dXJuIFY0TDJfU1REX05UU0NfTSB8IFY0TDJfU1REX05UU0NfTV9LUjsKKwljYXNlIDB4MToKKwl7CisJCS8qIGlmIHRoZSBhdWRpbyBzdGQgaXMgQTItTSwgdGhlbiB0aGlzIGlzIHRoZSBTb3V0aCBLb3JlYW4KKwkJICAgTlRTQyBzdGFuZGFyZCAqLworCQlpZiAoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4MDUpID09IDIpCisJCQlyZXR1cm4gVjRMMl9TVERfTlRTQ19NX0tSOworCQlyZXR1cm4gVjRMMl9TVERfTlRTQ19NOworCX0KIAljYXNlIDB4MjogcmV0dXJuIFY0TDJfU1REX05UU0NfTV9KUDsKIAljYXNlIDB4MzogcmV0dXJuIFY0TDJfU1REX05UU0NfNDQzOwogCWNhc2UgMHg0OiByZXR1cm4gVjRMMl9TVERfUEFMOwpAQCAtNTY3LDcgKzU5Myw3IEBACiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgICAgICAgPSAiQ29udHJhc3QiLAogCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMjU1LAorCQkubWF4aW11bSAgICAgICA9IDEyNywKIAkJLnN0ZXAgICAgICAgICAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDY0LAogCQkuZmxhZ3MgICAgICAgICA9IDAsCkBAIC01NzYsNyArNjAyLDcgQEAKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSAgICAgICAgICA9ICJTYXR1cmF0aW9uIiwKIAkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDI1NSwKKwkJLm1heGltdW0gICAgICAgPSAxMjcsCiAJCS5zdGVwICAgICAgICAgID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSA2NCwKIAkJLmZsYWdzICAgICAgICAgPSAwLApAQCAtNzM3LDE1ICs3NjMsNiBAQAogCQlyZXR1cm4gc2V0X2lucHV0KGNsaWVudCwgc3RhdGUtPnZpZF9pbnB1dCwgaW5wdXQtPmluZGV4KTsKIAl9CiAKLQljYXNlIFZJRElPQ19HX0FVRElPOgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKmlucHV0ID0gYXJnOwotCi0JCW1lbXNldChpbnB1dCwgMCwgc2l6ZW9mKCppbnB1dCkpOwotCQlpbnB1dC0+aW5kZXggPSBzdGF0ZS0+YXVkX2lucHV0OwotCQlicmVhazsKLQl9Ci0KIAljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKIAkJaW5wdXRfY2hhbmdlKGNsaWVudCk7CiAJCWJyZWFrOwpAQCAtNzUzLDcgKzc3MCw2IEBACiAJY2FzZSBWSURJT0NfR19UVU5FUjoKIAl7CiAJCXU4IG1vZGUgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDgwNCk7Ci0JCXU4IHByZWYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDgwOSkgJiAweGY7CiAJCXU4IHZwcmVzID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4MGEpICYgMHgxMDsKIAkJaW50IHZhbCA9IDA7CiAKQEAgLTc3Myw0NCArNzg5LDUwIEBACiAJCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAogCQlpZiAobW9kZSA9PSAyIHx8IG1vZGUgPT0gNCkKLQkJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCQkJdmFsID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKIAogCQlpZiAobW9kZSAmIDB4MTApCiAJCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfU0FQOwogCiAJCXZ0LT5yeHN1YmNoYW5zID0gdmFsOwotCi0JCXN3aXRjaCAocHJlZikgewotCQljYXNlIDA6Ci0JCQl2dC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJY2FzZSAyOgotCQkJdnQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzI7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQlkZWZhdWx0OgotCQkJdnQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQl9CisJCXZ0LT5hdWRtb2RlID0gc3RhdGUtPmF1ZG1vZGU7CiAJCWJyZWFrOwogCX0KIAogCWNhc2UgVklESU9DX1NfVFVORVI6CisJCWlmIChzdGF0ZS0+cmFkaW8pCisJCQlicmVhazsKKwogCQlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQkJLyogRm9yY2UgUFJFRl9NT0RFIHRvIE1PTk8gKi8KKwkJCS8qIG1vbm8gICAgICAtPiBtb25vCisJCQkgICBzdGVyZW8gICAgLT4gbW9ubworCQkJICAgYmlsaW5ndWFsIC0+IGxhbmcxICovCiAJCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4ODA5LCB+MHhmLCAweDAwKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCQkvKiBGb3JjZSBQUkVGX01PREUgdG8gU1RFUkVPICovCisJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KKwkJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KKwkJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMSAqLwogCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwOSwgfjB4ZiwgMHgwNCk7CiAJCQlicmVhazsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CisJCQkvKiBtb25vICAgICAgLT4gbW9ubworCQkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbworCQkJICAgYmlsaW5ndWFsIC0+IGxhbmcxL2xhbmcyICovCisJCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4ODA5LCB+MHhmLCAweDA3KTsKKwkJCWJyZWFrOwogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKLQkJCS8qIEZvcmNlIFBSRUZfTU9ERSB0byBMQU5HMiAqLworCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KKwkJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KKwkJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMiAqLwogCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwOSwgfjB4ZiwgMHgwMSk7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCXN0YXRlLT5hdWRtb2RlID0gdnQtPmF1ZG1vZGU7CiAJCWJyZWFrOwogCiAJY2FzZSBWSURJT0NfR19GTVQ6CkBAIC04OTEsNiArOTEzLDcgQEAKIAlzdGF0ZS0+YXVkX2lucHV0ID0gQ1gyNTg0MF9BVURJTzg7CiAJc3RhdGUtPmF1ZGNsa19mcmVxID0gNDgwMDA7CiAJc3RhdGUtPnB2cjE1MF93b3JrYXJvdW5kID0gMDsKKwlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKIAogCWN4MjU4NDBfaW5pdGlhbGl6ZShjbGllbnQsIDEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCmluZGV4IDA0ZDg3OWQuLmU5NmZkMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAljYXNlIFZJRElPQ19HX0ZNVDoKIAl7CiAJCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewotCQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfQiwgMCwJLyogMSAqLworCQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IsIDAsCS8qIDEgKi8KIAkJCTAsIFY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCS8qIDQgKi8KIAkJCVY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1LAkvKiA2ICovCiAJCQkwLCAwLCBWNEwyX1NMSUNFRF9WUFMsIDAsIDAsCS8qIDkgKi8KQEAgLTIzMSw3ICsyMzEsNyBAQAogCQlmb3IgKGkgPSA3OyBpIDw9IDIzOyBpKyspIHsKIAkJCWZvciAoeCA9IDA7IHggPD0gMTsgeCsrKSB7CiAJCQkJc3dpdGNoIChzdmJpLT5zZXJ2aWNlX2xpbmVzWzEteF1baV0pIHsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0I6CisJCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQjoKIAkJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgpAQCAtMjgyLDcgKzI4Miw3IEBACiAKIAkJc3dpdGNoIChpZDIpIHsKIAkJY2FzZSAxOgotCQkJaWQyID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKKwkJCWlkMiA9IFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9COwogCQkJYnJlYWs7CiAJCWNhc2UgNDoKIAkJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAuaAppbmRleCBmZDIyZjMwLi5kZDcwNjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLmgKQEAgLTc4LDYgKzc4LDcgQEAKIAllbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgdmlkX2lucHV0OwogCWVudW0gY3gyNTg0MF9hdWRpb19pbnB1dCBhdWRfaW5wdXQ7CiAJdTMyIGF1ZGNsa19mcmVxOworCWludCBhdWRtb2RlOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKaW5kZXggZTk5ZGZiYi4uZmYwZjcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKQEAgLTE1LDYgKzE1LDIyIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeDg4MDAKIAorY29uZmlnIFZJREVPX0NYODhfQUxTQQorCXRyaXN0YXRlICJDb25leGFudCAyMzg4eCBETUEgYXVkaW8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0NYODggJiYgU05EICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBTTkRfUENNCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgZGlyZWN0IChETUEpIGF1ZGlvIG9uCisJICBDb25leGFudCAyMzg4eCBiYXNlZCBUViBjYXJkcyB1c2luZyBBTFNBLgorCisJICBJdCBvbmx5IHdvcmtzIHdpdGggYm9hcmRzIHdpdGggZnVuY3Rpb24gMDEgZW5hYmxlZC4KKwkgIFRvIGNoZWNrIGlmIHlvdXIgYm9hcmQgc3VwcG9ydHMsIHVzZSBsc3BjaSAtbi4KKwkgIElmIHN1cHBvcnRlZCwgeW91IHNob3VsZCBzZWUgMTQ3MTo4ODAxIG9yIDE0NzE6ODgxMQorCSAgUENJIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3g4OC1hbHNhLgorCiBjb25maWcgVklERU9fQ1g4OF9EVkIKIAl0cmlzdGF0ZSAiRFZCL0FUU0MgU3VwcG9ydCBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIKIAlkZXBlbmRzIG9uIFZJREVPX0NYODggJiYgRFZCX0NPUkUKQEAgLTI5LDI3ICs0NSwxMyBAQAogCSAgWW91IG11c3QgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgRFZCL0FUU0MgZGVtb2R1bGF0b3JzLgogCSAgSWYgeW91IGFyZSB1bnN1cmUgd2hpY2ggeW91IG5lZWQsIGNob29zZSBhbGwgb2YgdGhlbS4KIAotY29uZmlnIFZJREVPX0NYODhfQUxTQQotCXRyaXN0YXRlICJBTFNBIERNQSBhdWRpbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fQ1g4OCAmJiBTTkQgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IFNORF9QQ00KLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBkaXJlY3QgKERNQSkgYXVkaW8gb24KLQkgIENvbmV4YW50IDIzODh4IGJhc2VkIFRWIGNhcmRzLgotCSAgSXQgb25seSB3b3JrcyB3aXRoIGJvYXJkcyB3aXRoIGZ1bmN0aW9uIDAxIGVuYWJsZWQuCi0JICBUbyBjaGVjayBpZiB5b3VyIGJvYXJkIHN1cHBvcnRzLCB1c2UgbHNwY2kgLW4uCi0JICBJZiBzdXBwb3J0ZWQsIHlvdSBzaG91bGQgc2VlIDE0NzE6ODgwMSBvciAxNDcxOjg4MTEKLQkgIFBDSSBkZXZpY2UuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4ODgtYWxzYS4KLQogY29uZmlnIFZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKIAlib29sICJCdWlsZCBhbGwgc3VwcG9ydGVkIGZyb250ZW5kcyBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCCiAJc2VsZWN0IERWQl9NVDM1MgogCXNlbGVjdCBWSURFT19DWDg4X1ZQMzA1NAorCXNlbGVjdCBEVkJfWkwxMDM1MwogCXNlbGVjdCBEVkJfT1I1MTEzMgogCXNlbGVjdCBEVkJfQ1gyMjcwMgogCXNlbGVjdCBEVkJfTEdEVDMzMFgKQEAgLTgxLDYgKzgzLDE2IEBACiAJICB3aGljaCBhbHNvIHJlcXVpcmUgc3VwcG9ydCBmb3IgdGhlIFZQLTMwNTQKIAkgIFNlY29uZGFyeSBJMkMgYnVzLCBzdWNoIGF0IEROVFYgTGl2ZSEgRFZCLVQgUHJvLgogCitjb25maWcgVklERU9fQ1g4OF9EVkJfWkwxMDM1MworCWJvb2wgIlphcmxpbmsgWkwxMDM1MyBEVkItVCBTdXBwb3J0IgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIgJiYgIVZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKKwlzZWxlY3QgRFZCX1pMMTAzNTMKKwktLS1oZWxwLS0tCisJICBUaGlzIGFkZHMgRFZCLVQgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCisJICBDb25uZXhhbnQgMjM4OHggY2hpcCBhbmQgdGhlIFpMMTAzNTMgZGVtb2R1bGF0b3IsCisJICBzdWNjZXNzb3IgdG8gdGhlIFphcmxpbmsgTVQzNTIuCisKIGNvbmZpZyBWSURFT19DWDg4X0RWQl9PUjUxMTMyCiAJYm9vbCAiT1I1MTEzMiBBVFNDIFN1cHBvcnQiCiAJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKaW5kZXggMmI5MDI3OC4uNjQ4MmI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQAogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9PUjUxMTMyKSAgICs9IC1ESEFWRV9PUjUxMTMyPTEKIGV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfTEdEVDMzMFgpICArPSAtREhBVkVfTEdEVDMzMFg9MQogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9NVDM1MikgICAgICs9IC1ESEFWRV9NVDM1Mj0xCitleHRyYS1jZmxhZ3MtJChDT05GSUdfRFZCX1pMMTAzNTMpICAgKz0gLURIQVZFX1pMMTAzNTM9MQogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9OWFQyMDBYKSAgICs9IC1ESEFWRV9OWFQyMDBYPTEKIGV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfQ1gyNDEyMykgICArPSAtREhBVkVfQ1gyNDEyMz0xCiBleHRyYS1jZmxhZ3MtJChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpKz0gLURIQVZFX1ZQMzA1NF9JMkM9MQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCmluZGV4IDJhY2NjZDYuLmY5ZDg3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkvKiBhdWRpbyBjb250cm9scyAqLwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGlycTsKIAotCXNuZF9jYXJkX3QgICAgICAgICAgICAgICAgICpjYXJkOworCXN0cnVjdCBzbmRfY2FyZCAgICAgICAgICAgICpjYXJkOwogCiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgcmVnX2xvY2s7CiAKQEAgLTgyLDcgKzgyLDcgQEAKIAlzdHJ1Y3QgY3g4OF9idWZmZXIgICAqYnVmOwogCiAJbG9uZyBvcGVuZWQ7Ci0Jc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCiB9OwogdHlwZWRlZiBzdHJ1Y3QgY3g4OF9hdWRpb19kZXYgc25kX2N4ODhfY2FyZF90OwpAQCAtOTYsNyArOTYsNyBAQAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsJLyogSW5kZXggMC1NQVggKi8KIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwogc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gezEsIFsxIC4uLiAoU05EUlZfQ0FSRFMgLSAxKV0gPSAxfTsKLXN0YXRpYyBzbmRfY2FyZF90ICpzbmRfY3g4OF9jYXJkc1tTTkRSVl9DQVJEU107CitzdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfY3g4OF9jYXJkc1tTTkRSVl9DQVJEU107CiAKIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgY3g4OHggc291bmRjYXJkLiBkZWZhdWx0IGVuYWJsZWQuIik7CkBAIC0zMDMsNyArMzAzLDcgQEAKIAlCVUdfT04oIWNoaXAtPmRtYV9zaXplKTsKIAogCWRwcmludGsoMiwiRnJlZWluZyBidWZmZXJcbiIpOwotCXZpZGVvYnVmX2RtYV9wY2lfdW5tYXAoY2hpcC0+cGNpLCAmY2hpcC0+ZG1hX3Jpc2MpOworCXZpZGVvYnVmX3BjaV9kbWFfdW5tYXAoY2hpcC0+cGNpLCAmY2hpcC0+ZG1hX3Jpc2MpOwogCXZpZGVvYnVmX2RtYV9mcmVlKCZjaGlwLT5kbWFfcmlzYyk7CiAJYnRjeF9yaXNjbWVtX2ZyZWUoY2hpcC0+cGNpLCZjaGlwLT5idWYtPnJpc2MpOwogCWtmcmVlKGNoaXAtPmJ1Zik7CkBAIC0zMjAsNyArMzIwLDcgQEAKIC8qCiAgKiBEaWdpdGFsIGhhcmR3YXJlIGRlZmluaXRpb24KICAqLwotc3RhdGljIHNuZF9wY21faGFyZHdhcmVfdCBzbmRfY3g4OF9kaWdpdGFsX2h3ID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9jeDg4X2RpZ2l0YWxfaHcgPSB7CiAJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKIAkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAogCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CkBAIC0zNDIsMTYgKzM0MiwxNiBAQAogLyoKICAqIGF1ZGlvIHBjbSBjYXB0dXJlIHJ1bnRpbWUgZnJlZQogICovCi1zdGF0aWMgdm9pZCBzbmRfY2FyZF9jeDg4X3J1bnRpbWVfZnJlZShzbmRfcGNtX3J1bnRpbWVfdCAqcnVudGltZSkKK3N0YXRpYyB2b2lkIHNuZF9jYXJkX2N4ODhfcnVudGltZV9mcmVlKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiB9CiAvKgogICogYXVkaW8gcGNtIGNhcHR1cmUgb3BlbiBjYWxsYmFjawogICovCi1zdGF0aWMgaW50IHNuZF9jeDg4X3BjbV9vcGVuKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX2N4ODhfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX2N4ODhfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGVycjsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZjaGlwLT5vcGVuZWQpKQpAQCAtMzgwLDcgKzM4MCw3IEBACiAvKgogICogYXVkaW8gY2xvc2UgY2FsbGJhY2sKICAqLwotc3RhdGljIGludCBzbmRfY3g4OF9jbG9zZShzbmRfcGNtX3N1YnN0cmVhbV90ICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IHNuZF9jeDg4X2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIApAQCAtMzkzLDggKzM5Myw4IEBACiAvKgogICogaHdfcGFyYW1zIGNhbGxiYWNrCiAgKi8KLXN0YXRpYyBpbnQgc25kX2N4ODhfaHdfcGFyYW1zKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sCi0JCQkJIHNuZF9wY21faHdfcGFyYW1zX3QgKiBod19wYXJhbXMpCitzdGF0aWMgaW50IHNuZF9jeDg4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKiBzdWJzdHJlYW0sCisJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKiBod19wYXJhbXMpCiB7CiAJc25kX2N4ODhfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmOwpAQCAtNDI5LDcgKzQyOSw3IEBACiAJdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKCZidWYtPnZiLmRtYSxQQ0lfRE1BX0ZST01ERVZJQ0UsCiAJCQkoUEFHRV9BTElHTihidWYtPnZiLnNpemUpID4+IFBBR0VfU0hJRlQpKTsKIAotCXZpZGVvYnVmX2RtYV9wY2lfbWFwKGNoaXAtPnBjaSwmYnVmLT52Yi5kbWEpOworCXZpZGVvYnVmX3BjaV9kbWFfbWFwKGNoaXAtPnBjaSwmYnVmLT52Yi5kbWEpOwogCiAKIAljeDg4X3Jpc2NfZGF0YWJ1ZmZlcihjaGlwLT5wY2ksICZidWYtPnJpc2MsCkBAIC00NTMsNyArNDUzLDcgQEAKIC8qCiAgKiBodyBmcmVlIGNhbGxiYWNrCiAgKi8KLXN0YXRpYyBpbnQgc25kX2N4ODhfaHdfZnJlZShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQorc3RhdGljIGludCBzbmRfY3g4OF9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqIHN1YnN0cmVhbSkKIHsKIAogCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogLyoKICAqIHByZXBhcmUgY2FsbGJhY2sKICAqLwotc3RhdGljIGludCBzbmRfY3g4OF9wcmVwYXJlKHNuZF9wY21fc3Vic3RyZWFtX3QgKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX2N4ODhfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3OCw3ICs0NzgsNyBAQAogLyoKICAqIHRyaWdnZXIgY2FsbGJhY2sKICAqLwotc3RhdGljIGludCBzbmRfY3g4OF9jYXJkX3RyaWdnZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtLCBpbnQgY21kKQorc3RhdGljIGludCBzbmRfY3g4OF9jYXJkX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7CiAJc25kX2N4ODhfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCWludCBlcnI7CkBAIC01MDUsMTAgKzUwNSwxMCBAQAogLyoKICAqIHBvaW50ZXIgY2FsbGJhY2sKICAqLwotc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9jeDg4X3BvaW50ZXIoc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtKQorc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9jeDg4X3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc25kX2N4ODhfY2FyZF90ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAKIAlpZiAoY2hpcC0+cmVhZF9jb3VudCkgewogCQljaGlwLT5yZWFkX2NvdW50IC09IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwpAQCAtNTI1LDcgKzUyNSw3IEBACiAvKgogICogb3BlcmF0b3JzCiAgKi8KLXN0YXRpYyBzbmRfcGNtX29wc190IHNuZF9jeDg4X3BjbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jeDg4X3BjbV9vcHMgPSB7CiAJLm9wZW4gPSBzbmRfY3g4OF9wY21fb3BlbiwKIAkuY2xvc2UgPSBzbmRfY3g4OF9jbG9zZSwKIAkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKQEAgLTU0Miw3ICs1NDIsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2N4ODhfcGNtKHNuZF9jeDg4X2NhcmRfdCAqY2hpcCwgaW50IGRldmljZSwgY2hhciAqbmFtZSkKIHsKIAlpbnQgZXJyOwotCXNuZF9wY21fdCAqcGNtOworCXN0cnVjdCBzbmRfcGNtICpwY207CiAKIAllcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCBuYW1lLCBkZXZpY2UsIDAsIDEsICZwY20pOwogCWlmIChlcnIgPCAwKQpAQCAtNTU3LDcgKzU1Nyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCQkJCUNPTlRST0wgSU5URVJGQUNFCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgc25kX2N4ODhfY2FwdHVyZV92b2x1bWVfaW5mbyhzbmRfa2NvbnRyb2xfdCAqa2NvbnRyb2wsIHNuZF9jdGxfZWxlbV9pbmZvX3QgKmluZm8pCitzdGF0aWMgaW50IHNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKIHsKIAlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwogCWluZm8tPmNvdW50ID0gMTsKQEAgLTU2OCw3ICs1NjksOCBAQAogfQogCiAvKiBPSyAtIFRPRE86IHRlc3QgaXQgKi8KLXN0YXRpYyBpbnQgc25kX2N4ODhfY2FwdHVyZV92b2x1bWVfZ2V0KHNuZF9rY29udHJvbF90ICprY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKnZhbHVlKQorc3RhdGljIGludCBzbmRfY3g4OF9jYXB0dXJlX3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQogewogCXNuZF9jeDg4X2NhcmRfdCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlPWNoaXAtPmNvcmU7CkBAIC01NzksNyArNTgxLDggQEAKIH0KIAogLyogT0sgLSBUT0RPOiB0ZXN0IGl0ICovCi1zdGF0aWMgaW50IHNuZF9jeDg4X2NhcHR1cmVfdm9sdW1lX3B1dChzbmRfa2NvbnRyb2xfdCAqa2NvbnRyb2wsIHNuZF9jdGxfZWxlbV92YWx1ZV90ICp2YWx1ZSkKK3N0YXRpYyBpbnQgc25kX2N4ODhfY2FwdHVyZV92b2x1bWVfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKIHsKIAlzbmRfY3g4OF9jYXJkX3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZT1jaGlwLT5jb3JlOwpAQCAtNTk1LDcgKzU5OCw3IEBACiAJcmV0dXJuIHYgIT0gb2xkX2NvbnRyb2w7CiB9CiAKLXN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX2N4ODhfY2FwdHVyZV92b2x1bWUgPSB7CitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2N4ODhfY2FwdHVyZV92b2x1bWUgPSB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiQ2FwdHVyZSBWb2x1bWUiLAogCS5pbmZvID0gc25kX2N4ODhfY2FwdHVyZV92b2x1bWVfaW5mbywKQEAgLTY0MSw3ICs2NDQsNyBAQAogLyoKICAqIENvbXBvbmVudCBEZXN0cnVjdG9yCiAgKi8KLXN0YXRpYyB2b2lkIHNuZF9jeDg4X2Rldl9mcmVlKHNuZF9jYXJkX3QgKiBjYXJkKQorc3RhdGljIHZvaWQgc25kX2N4ODhfZGV2X2ZyZWUoc3RydWN0IHNuZF9jYXJkICogY2FyZCkKIHsKIAlzbmRfY3g4OF9jYXJkX3QgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKQEAgLTY1NCw4ICs2NTcsOSBAQAogICovCiAKIHN0YXRpYyBpbnQgZGV2bm87Ci1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3g4OF9jcmVhdGUoc25kX2NhcmRfdCAqY2FyZCwgc3RydWN0IHBjaV9kZXYgKnBjaSwKLQkJCQkgICAgc25kX2N4ODhfY2FyZF90ICoqcmNoaXApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3g4OF9jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLAorCQkJCSAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJCQkgICAgIHNuZF9jeDg4X2NhcmRfdCAqKnJjaGlwKQogewogCXNuZF9jeDg4X2NhcmRfdCAgICpjaGlwOwogCXN0cnVjdCBjeDg4X2NvcmUgICpjb3JlOwpAQCAtNjcyLDYgKzY3NiwxMSBAQAogCWNoaXAgPSAoc25kX2N4ODhfY2FyZF90ICopIGNhcmQtPnByaXZhdGVfZGF0YTsKIAogCWNvcmUgPSBjeDg4X2NvcmVfZ2V0KHBjaSk7CisJaWYgKE5VTEwgPT0gY29yZSkgeworCQllcnIgPSAtRUlOVkFMOworCQlrZnJlZSAoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQogCiAJaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChwY2ksMHhmZmZmZmZmZikpIHsKIAkJZHByaW50aygwLCAiJXMvMTogT29wczogbm8gMzJiaXQgUENJIERNQSA/Pz9cbiIsY29yZS0+bmFtZSk7CkBAIC02ODgsMTEgKzY5Nyw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKIAogCWN4ODhfcmVzZXQoY29yZSk7Ci0JaWYgKE5VTEwgPT0gY29yZSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlrZnJlZSAoY2hpcCk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCWNoaXAtPmNvcmUgPSBjb3JlOwogCiAJLyogZ2V0IGlycSAqLwpAQCAtNzI2LDcgKzczMCw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjeDg4X2F1ZGlvX2luaXRkZXYoc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKLQlzbmRfY2FyZF90ICAgICAgICpjYXJkOworCXN0cnVjdCBzbmRfY2FyZCAgKmNhcmQ7CiAJc25kX2N4ODhfY2FyZF90ICAqY2hpcDsKIAlpbnQgICAgICAgICAgICAgIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwppbmRleCBhNTAyYTRkLi5lMTAwZDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwpAQCAtMTM0MSw3ICsxMzQxLDcgQEAKIAkgICAgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCXN0cnVjdCBjeDg4MDJfZmggKmZoID0gcS0+cHJpdl9kYXRhOwotCXJldHVybiBjeDg4MDJfYnVmX3ByZXBhcmUoZmgtPmRldiwgKHN0cnVjdCBjeDg4X2J1ZmZlciopdmIsIGZpZWxkKTsKKwlyZXR1cm4gY3g4ODAyX2J1Zl9wcmVwYXJlKHEsIGZoLT5kZXYsIChzdHJ1Y3QgY3g4OF9idWZmZXIqKXZiLCBmaWVsZCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzU0LDggKzEzNTQsNyBAQAogc3RhdGljIHZvaWQKIGJiX2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7Ci0Jc3RydWN0IGN4ODgwMl9maCAqZmggPSBxLT5wcml2X2RhdGE7Ci0JY3g4OF9mcmVlX2J1ZmZlcihmaC0+ZGV2LT5wY2ksIChzdHJ1Y3QgY3g4OF9idWZmZXIqKXZiKTsKKwljeDg4X2ZyZWVfYnVmZmVyKHEsIChzdHJ1Y3QgY3g4OF9idWZmZXIqKXZiKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgYmxhY2tiaXJkX3FvcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwppbmRleCAxYmM5OTkyLi5jNzA0MmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKQEAgLTE4NCwxNyArMTg0LDE4IEBACiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKLQkJCS5ncGlvMSAgPSAweDMwOWYsCisJCQkuZ3BpbzEgID0gMHhlMDlmLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKIAkJCS52bXV4ICAgPSAxLAotCQkJLmdwaW8xICA9IDB4MzA1ZiwKKwkJCS5ncGlvMSAgPSAweGUwNWYsCiAJCX0sewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgID0gMiwKLQkJCS5ncGlvMSAgPSAweDMwNWYsCisJCQkuZ3BpbzEgID0gMHhlMDVmLAogCQl9fSwKIAkJLnJhZGlvID0geworCQkJLmdwaW8xICA9IDB4ZTBkZiwKIAkJCS50eXBlICAgPSBDWDg4X1JBRElPLAogCQl9LAogCX0sCkBAIC0zMjIsMTkgKzMyMywxOSBAQAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCi0JCQkuZ3BpbzAgID0gMHhmZjAwLAorCQkJLmdwaW8wICA9IDB4YmZmMCwKIAkJfSx7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKLQkJCS5ncGlvMCAgPSAweGZmMDMsCisJCQkuZ3BpbzAgID0gMHhiZmYzLAogCQl9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9IDIsCi0JCQkuZ3BpbzAgID0gMHhmZjAzLAorCQkJLmdwaW8wICA9IDB4YmZmMywKIAkJfX0sCiAJCS5yYWRpbyA9IHsKIAkJCS50eXBlICAgPSBDWDg4X1JBRElPLAotCQkJLmdwaW8wICA9IDB4ZmYwMCwKKwkJCS5ncGlvMCAgPSAweGJmZjAsCiAJCX0sCiAJfSwKIAlbQ1g4OF9CT0FSRF9BU1VTX1BWUl80MTZdID0gewpAQCAtMTA0OCw2ICsxMDQ5LDUwIEBACiAJCX19LAogCQkuZHZiICAgICAgICAgICAgPSAxLAogCX0sCisJW0NYODhfQk9BUkRfS1dPUkxEX0hBUkRXQVJFX01QRUdfVFZfWFBFUlRdID0geworCQkvKiBGSVhNRTogU3RhbmRhcmQgdmlkZW8gdXNpbmcgdGhlIGN4ODggYnJvYWRjYXN0IGRlY29kZXIgaXMKKwkJICogd29ya2luZywgYnV0IGJsYWNrYmlyZCBpc24ndCB3b3JraW5nIHlldCwgYXVkaW8gaXMgb25seQorCQkgKiB3b3JraW5nIGNvcnJlY3RseSBmb3IgdGVsZXZpc2lvbiBtb2RlLiBTLVZpZGVvIGFuZCBDb21wb3NpdGUKKwkJICogYXJlIHdvcmtpbmcgZm9yIHZpZGVvLW9ubHksIHNvIEkgaGF2ZSB0aGVtIGRpc2FibGVkIGZvciBub3cuCisJCSAqLworCQkubmFtZSAgICAgICAgICAgPSAiS1dvcmxkIEhhcmR3YXJlTXBlZ1RWIFhQZXJ0IiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDNkZTIsCisJCQkuZ3BpbzIgID0gMHgwMGZmLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAgID0gMHgzZGU2LAorCQkJLmdwaW8yICA9IDB4MDBmZiwKKwkJfSwKKwl9LAorCVtDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfSFlCUklEXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgSHlicmlkIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEhPTVNPTl9GRTY2MDAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmdwaW8wICA9IDB4MDAwMGE3NWYsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMDAwYTc1YiwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4MDAwMGE3NWIsCisJCX19LAorCQkuZHZiICAgICAgICAgICAgPSAxLAorCX0sCiAKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3g4OF9iY291bnQgPSBBUlJBWV9TSVpFKGN4ODhfYm9hcmRzKTsKQEAgLTEyNTQsNiArMTI5OSwxOCBAQAogCQkuc3ViZGV2aWNlID0gMHhkYjExLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BMVVMsCiAJCS8qIFJlLWJyYW5kZWQgRFZpQ086IFVsdHJhVmlldyBEVkItVCBQbHVzICovCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDE3ZGUsCisJCS5zdWJkZXZpY2UgPSAweDA4NDAsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0tXT1JMRF9IQVJEV0FSRV9NUEVHX1RWX1hQRVJULAorCX0seworCQkuc3VidmVuZG9yID0gMHgxOGFjLAorCQkuc3ViZGV2aWNlID0gMHhkYjQwLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0hZQlJJRCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MThhYywKKwkJLnN1YmRldmljZSA9IDB4ZGI0NCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9IWUJSSUQsCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3g4OF9pZGNvdW50ID0gQVJSQVlfU0laRShjeDg4X3N1Ymlkcyk7CkBAIC0xMzczLDYgKzE0MzAsNDAgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIHNvbWUgRFZpQ08gc3BlY2lmaWMgc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK3N0YXRpYyB2b2lkIGR2aWNvX2Z1c2lvbmhkdHZfaHlicmlkX2luaXQoc3RydWN0IGN4ODhfY29yZSAqY29yZSkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHg0NSwgLmZsYWdzID0gMCB9OworCWludCBpLCBlcnI7CisJc3RhdGljIHU4IGluaXRfYnVmc1sxM11bNV0gPSB7CisJCXsgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgwMyB9LAorCQl7IDB4MTAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MjEgfSwKKwkJeyAweDEwLCAweDEwLCAweDEwLCAweDAwLCAweENBIH0sCisJCXsgMHgxMCwgMHgxMCwgMHgxMiwgMHgwMCwgMHgwOCB9LAorCQl7IDB4MTAsIDB4MTAsIDB4MTMsIDB4MDAsIDB4MEEgfSwKKwkJeyAweDEwLCAweDEwLCAweDE2LCAweDAxLCAweEMwIH0sCisJCXsgMHgxMCwgMHgxMCwgMHgyMiwgMHgwMSwgMHgzRCB9LAorCQl7IDB4MTAsIDB4MTAsIDB4NzMsIDB4MDEsIDB4MkUgfSwKKwkJeyAweDEwLCAweDEwLCAweDcyLCAweDAwLCAweEM1IH0sCisJCXsgMHgxMCwgMHgxMCwgMHg3MSwgMHgwMSwgMHg5NyB9LAorCQl7IDB4MTAsIDB4MTAsIDB4NzAsIDB4MDAsIDB4MEYgfSwKKwkJeyAweDEwLCAweDEwLCAweEIwLCAweDAwLCAweDAxIH0sCisJCXsgMHgwMywgMHgwQyB9LAorCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykgeworCQltc2cuYnVmID0gaW5pdF9idWZzW2ldOworCQltc2cubGVuID0gKGkgIT0gMTIgPyA1IDogMik7CisJCWVyciA9IGkyY190cmFuc2ZlcigmY29yZS0+aTJjX2FkYXAsICZtc2csIDEpOworCQlpZiAoZXJyICE9IDEpIHsKKwkJCXByaW50aygiZHZpY29fZnVzaW9uaGR0dl9oeWJyaWRfaW5pdCBidWYgJWQgZmFpbGVkIChlcnIgPSAlZCkhXG4iLCBpLCBlcnIpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiB2b2lkIGN4ODhfY2FyZF9saXN0KHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHN0cnVjdCBwY2lfZGV2ICpwY2kpCiB7CkBAIC0xNDM4LDExICsxNTI5LDE1IEBACiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1QxOgogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BMVVM6CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTDoKKwljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9IWUJSSUQ6CiAJCS8qIEdQSU8wOjAgaXMgaG9va2VkIHRvIG10MzUyIHJlc2V0IHBpbiAqLwogCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMTAxKTsKIAkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDAxKTsKIAkJbXNsZWVwKDEpOwogCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMTAxKTsKKwkJaWYgKDAgPT0gY29yZS0+aTJjX3JjICYmCisJCSAgICBjb3JlLT5ib2FyZCA9PSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfSFlCUklEKQorCQkJZHZpY29fZnVzaW9uaGR0dl9oeWJyaWRfaW5pdChjb3JlKTsKIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVDoKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UOgpAQCAtMTQ2MCw3ICsxNTU1LDcgQEAKIAkJaWYgKDAgPT0gY29yZS0+aTJjX3JjKSB7CiAJCQkvKiBlbmFibGUgdHVuZXIgKi8KIAkJCWludCBpOwotCQkJdTggYnVmZmVyIFtdID0geyAweDEwLDB4MTIsMHgxMywweDA0LDB4MTYsMHgwMCwweDE0LDB4MDQsMHgwMTcsMHgwMCB9OworCQkJc3RhdGljIGNvbnN0IHU4IGJ1ZmZlciBbXSA9IHsgMHgxMCwweDEyLDB4MTMsMHgwNCwweDE2LDB4MDAsMHgxNCwweDA0LDB4MDE3LDB4MDAgfTsKIAkJCWNvcmUtPmkyY19jbGllbnQuYWRkciA9IDB4MGE7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggMzcyMGYyNC4uMmMzZDlmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIAkvKiBzYXZlIHBvaW50ZXIgdG8gam1wIGluc3RydWN0aW9uIGFkZHJlc3MgKi8KIAlyaXNjLT5qbXAgPSBycDsKLQlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpIC8gNCA+IHJpc2MtPnNpemUpOworCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMikgKiBzaXplb2YgKCpyaXNjLT5jcHUpID4gcmlzYy0+c2l6ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4OCw3ICsxODgsNyBAQAogCiAJLyogc2F2ZSBwb2ludGVyIHRvIGptcCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCiAJcmlzYy0+am1wID0gcnA7Ci0JQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAvIDQgPiByaXNjLT5zaXplKTsKKwlCVUdfT04oKHJpc2MtPmptcCAtIHJpc2MtPmNwdSArIDIpICogc2l6ZW9mICgqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTMsMTQgKzIxMywxMyBAQAogfQogCiB2b2lkCi1jeDg4X2ZyZWVfYnVmZmVyKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmKQorY3g4OF9mcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmKQogewotCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJQlVHKCk7CisJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsMCwwKTsKLQl2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKHBjaSwgJmJ1Zi0+dmIuZG1hKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAocSwgJmJ1Zi0+dmIuZG1hKTsKIAl2aWRlb2J1Zl9kbWFfZnJlZSgmYnVmLT52Yi5kbWEpOwotCWJ0Y3hfcmlzY21lbV9mcmVlKHBjaSwgJmJ1Zi0+cmlzYyk7CisJYnRjeF9yaXNjbWVtX2ZyZWUoKHN0cnVjdCBwY2lfZGV2ICopcS0+ZGV2LCAmYnVmLT5yaXNjKTsKIAlidWYtPnZiLnN0YXRlID0gU1RBVEVfTkVFRFNfSU5JVDsKIH0KIApAQCAtMTA2MSw3ICsxMDYwLDcgQEAKIAljb3JlLT5wY2lfYnVzICA9IHBjaS0+YnVzLT5udW1iZXI7CiAJY29yZS0+cGNpX3Nsb3QgPSBQQ0lfU0xPVChwY2ktPmRldmZuKTsKIAljb3JlLT5wY2lfaXJxbWFzayA9IDB4MDBmYzAwOwotCWluaXRfTVVURVgoJmNvcmUtPmxvY2spOworCW11dGV4X2luaXQoJmNvcmUtPmxvY2spOwogCiAJY29yZS0+bnIgPSBjeDg4X2RldmNvdW50Kys7CiAJc3ByaW50Zihjb3JlLT5uYW1lLCJjeDg4WyVkXSIsY29yZS0+bnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBlNDhhYTNmLi5mMGVhOWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtNDAsNiArNDAsOSBAQAogIyAgaW5jbHVkZSAiY3g4OC12cDMwNTQtaTJjLmgiCiAjIGVuZGlmCiAjZW5kaWYKKyNpZmRlZiBIQVZFX1pMMTAzNTMKKyMgaW5jbHVkZSAiemwxMDM1My5oIgorI2VuZGlmCiAjaWZkZWYgSEFWRV9DWDIyNzAyCiAjIGluY2x1ZGUgImN4MjI3MDIuaCIKICNlbmRpZgpAQCAtODcsNyArOTAsNyBAQAogCQkJICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBxLT5wcml2X2RhdGE7Ci0JcmV0dXJuIGN4ODgwMl9idWZfcHJlcGFyZShkZXYsIChzdHJ1Y3QgY3g4OF9idWZmZXIqKXZiLGZpZWxkKTsKKwlyZXR1cm4gY3g4ODAyX2J1Zl9wcmVwYXJlKHEsIGRldiwgKHN0cnVjdCBjeDg4X2J1ZmZlciopdmIsZmllbGQpOwogfQogCiBzdGF0aWMgdm9pZCBkdmJfYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCkBAIC05OCw4ICsxMDEsNyBAQAogCiBzdGF0aWMgdm9pZCBkdmJfYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKLQlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ID0gcS0+cHJpdl9kYXRhOwotCWN4ODhfZnJlZV9idWZmZXIoZGV2LT5wY2ksIChzdHJ1Y3QgY3g4OF9idWZmZXIqKXZiKTsKKwljeDg4X2ZyZWVfYnVmZmVyKHEsIChzdHJ1Y3QgY3g4OF9idWZmZXIqKXZiKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgZHZiX3FvcHMgPSB7CkBAIC0xMTEsNiArMTEzLDIxIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjaWYgZGVmaW5lZChIQVZFX01UMzUyKSB8fCBkZWZpbmVkKEhBVkVfWkwxMDM1MykKK3N0YXRpYyBpbnQgemFybGlua19wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMsCisJCQkgICAgICB1OCAqcGxsYnVmKQoreworCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCisJcGxsYnVmWzBdID0gZGV2LT5jb3JlLT5wbGxfYWRkciA8PCAxOworCWR2Yl9wbGxfY29uZmlndXJlKGRldi0+Y29yZS0+cGxsX2Rlc2MsIHBsbGJ1ZiArIDEsCisJCQkgIHBhcmFtcy0+ZnJlcXVlbmN5LAorCQkJICBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpOworCXJldHVybiAwOworfQorI2VuZGlmCisKICNpZmRlZiBIQVZFX01UMzUyCiBzdGF0aWMgaW50IGR2aWNvX2Z1c2lvbmhkdHZfZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKIHsKQEAgLTE3NiwzNSArMTkzLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQzNTJfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKLQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcywKLQkJCSB1OCogcGxsYnVmKQotewotCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXY9IGZlLT5kdmItPnByaXY7Ci0KLQlwbGxidWZbMF0gPSBkZXYtPmNvcmUtPnBsbF9hZGRyIDw8IDE7Ci0JZHZiX3BsbF9jb25maWd1cmUoZGV2LT5jb3JlLT5wbGxfZGVzYywgcGxsYnVmKzEsCi0JCQkgIHBhcmFtcy0+ZnJlcXVlbmN5LAotCQkJICBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IG10MzUyX2NvbmZpZyBkdmljb19mdXNpb25oZHR2ID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHgwRiwKIAkuZGVtb2RfaW5pdCAgICA9IGR2aWNvX2Z1c2lvbmhkdHZfZGVtb2RfaW5pdCwKLQkucGxsX3NldCAgICAgICA9IG10MzUyX3BsbF9zZXQsCisJLnBsbF9zZXQgICAgICAgPSB6YXJsaW5rX3BsbF9zZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IG10MzUyX2NvbmZpZyBkbnR2X2xpdmVfZHZidF9jb25maWcgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDBmLAogCS5kZW1vZF9pbml0ICAgID0gZG50dl9saXZlX2R2YnRfZGVtb2RfaW5pdCwKLQkucGxsX3NldCAgICAgICA9IG10MzUyX3BsbF9zZXQsCisJLnBsbF9zZXQgICAgICAgPSB6YXJsaW5rX3BsbF9zZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IG10MzUyX2NvbmZpZyBkdmljb19mdXNpb25oZHR2X2R1YWwgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDBGLAogCS5kZW1vZF9pbml0ICAgID0gZHZpY29fZHVhbF9kZW1vZF9pbml0LAotCS5wbGxfc2V0ICAgICAgID0gbXQzNTJfcGxsX3NldCwKKwkucGxsX3NldCAgICAgICA9IHphcmxpbmtfcGxsX3NldCwKIH07CiAKICNpZmRlZiBIQVZFX1ZQMzA1NF9JMkMKQEAgLTI5NCw2ICsyOTgsNDYgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1pMMTAzNTMKK3N0YXRpYyBpbnQgZHZpY29faHlicmlkX3R1bmVfcGxsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywKKwkJCQkgdTggKnBsbGJ1ZikKK3sKKwlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9CisJCXsgLmFkZHIgPSBkZXYtPmNvcmUtPnBsbF9hZGRyLCAuZmxhZ3MgPSAwLAorCQkgIC5idWYgPSBwbGxidWYgKyAxLCAubGVuID0gNCB9OworCWludCBlcnI7CisKKwlwbGxidWZbMF0gPSBkZXYtPmNvcmUtPnBsbF9hZGRyIDw8IDE7CisJZHZiX3BsbF9jb25maWd1cmUoZGV2LT5jb3JlLT5wbGxfZGVzYywgcGxsYnVmICsgMSwKKwkJCSAgcGFyYW1zLT5mcmVxdWVuY3ksCisJCQkgIHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCk7CisKKwlpZiAoKGVyciA9IGkyY190cmFuc2ZlcigmZGV2LT5jb3JlLT5pMmNfYWRhcCwgJm1zZywgMSkpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY3g4OC1kdmI6ICVzIGVycm9yICIKKwkJCSAgICIoYWRkciAlMDJ4IDwtICUwMngsIGVyciA9ICVpKVxuIiwKKwkJCSAgIF9fRlVOQ1RJT05fXywgcGxsYnVmWzBdLCBwbGxidWZbMV0sIGVycik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgZHZpY29fZnVzaW9uaGR0dl9oeWJyaWQgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBGLAorCS5wbGxfc2V0ICAgICAgID0gZHZpY29faHlicmlkX3R1bmVfcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBkdmljb19mdXNpb25oZHR2X3BsdXNfdjFfMSA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MEYsCisJLnBsbF9zZXQgICAgICAgPSB6YXJsaW5rX3BsbF9zZXQsCit9OworI2VuZGlmCisKICNpZmRlZiBIQVZFX0NYMjI3MDIKIHN0YXRpYyBzdHJ1Y3QgY3gyMjcwMl9jb25maWcgY29ubmV4YW50X3JlZmJvYXJkX2NvbmZpZyA9IHsKIAkuZGVtb2RfYWRkcmVzcyA9IDB4NDMsCkBAIC01MDAsNiArNTQ0LDIzIEBACiAJCQkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWJyZWFrOwogI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX01UMzUyKSB8fCBkZWZpbmVkKEhBVkVfWkwxMDM1MykKKwljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9QTFVTOgorCQlkZXYtPmNvcmUtPnBsbF9hZGRyID0gMHg2MDsKKwkJZGV2LT5jb3JlLT5wbGxfZGVzYyA9ICZkdmJfcGxsX3Rob21zb25fZHR0NzU3OTsKKyNpZmRlZiBIQVZFX01UMzUyCisJCWRldi0+ZHZiLmZyb250ZW5kID0gbXQzNTJfYXR0YWNoKCZkdmljb19mdXNpb25oZHR2LAorCQkJCQkJICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIEhBVkVfWkwxMDM1MworCQkvKiBaTDEwMzUzIHJlcGxhY2VzIE1UMzUyIG9uIGxhdGVyIGNhcmRzICovCisJCWRldi0+ZHZiLmZyb250ZW5kID0gemwxMDM1M19hdHRhY2goJmR2aWNvX2Z1c2lvbmhkdHZfcGx1c192MV8xLAorCQkJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworI2VuZGlmCisJCWJyZWFrOworI2VuZGlmIC8qIEhBVkVfTVQzNTIgfHwgSEFWRV9aTDEwMzUzICovCiAjaWZkZWYgSEFWRV9NVDM1MgogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UMToKIAkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjE7CkBAIC01MDcsMTIgKzU2OCw2IEBACiAJCWRldi0+ZHZiLmZyb250ZW5kID0gbXQzNTJfYXR0YWNoKCZkdmljb19mdXNpb25oZHR2LAogCQkJCQkJICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJYnJlYWs7Ci0JY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfUExVUzoKLQkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjA7Ci0JCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90aG9tc29uX2R0dDc1Nzk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gbXQzNTJfYXR0YWNoKCZkdmljb19mdXNpb25oZHR2LAotCQkJCQkJICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKLQkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX0tXT1JMRF9EVkJfVDoKIAljYXNlIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UOgogCWNhc2UgQ1g4OF9CT0FSRF9BRFNURUNIX0RWQl9UX1BDSToKQEAgLTU0MCw2ICs1OTUsMTQgQEAKIAkJCQkJCSAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgSEFWRV9aTDEwMzUzCisJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfSFlCUklEOgorCQlkZXYtPmNvcmUtPnBsbF9hZGRyID0gMHg2MTsKKwkJZGV2LT5jb3JlLT5wbGxfZGVzYyA9ICZkdmJfcGxsX3Rob21zb25fZmU2NjAwOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHpsMTAzNTNfYXR0YWNoKCZkdmljb19mdXNpb25oZHR2X2h5YnJpZCwKKwkJCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisjZW5kaWYKICNpZmRlZiBIQVZFX09SNTExMzIKIAljYXNlIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMDoKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBvcjUxMTMyX2F0dGFjaCgmcGNoZHR2X2hkMzAwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCmluZGV4IDE2NWQ5NDguLjc4YTYzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwpAQCAtMzQsMzM3ICszNCw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogRGlnaXRhbE5vdyBETlRWIExpdmUgRFZCLVQgUmVtb3RlICovCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZG50dl9saXZlX2R2Yl90W0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbMHgwMF0gPSBLRVlfRVNDLAkJLyogJ2dvIHVwIGEgbGV2ZWw/JyAqLwotCS8qIEtleXMgMCB0byA5ICovCi0JWzB4MGFdID0gS0VZX0tQMCwKLQlbMHgwMV0gPSBLRVlfS1AxLAotCVsweDAyXSA9IEtFWV9LUDIsCi0JWzB4MDNdID0gS0VZX0tQMywKLQlbMHgwNF0gPSBLRVlfS1A0LAotCVsweDA1XSA9IEtFWV9LUDUsCi0JWzB4MDZdID0gS0VZX0tQNiwKLQlbMHgwN10gPSBLRVlfS1A3LAotCVsweDA4XSA9IEtFWV9LUDgsCi0JWzB4MDldID0gS0VZX0tQOSwKLQotCVsweDBiXSA9IEtFWV9UVU5FUiwJCS8qIHR2L2ZtICovCi0JWzB4MGNdID0gS0VZX1NFQVJDSCwJCS8qIHNjYW4gKi8KLQlbMHgwZF0gPSBLRVlfU1RPUCwKLQlbMHgwZV0gPSBLRVlfUEFVU0UsCi0JWzB4MGZdID0gS0VZX0xJU1QsCQkvKiBzb3VyY2UgKi8KLQotCVsweDEwXSA9IEtFWV9NVVRFLAotCVsweDExXSA9IEtFWV9SRVdJTkQsCQkvKiBiYWNrd2FyZCA8PCAqLwotCVsweDEyXSA9IEtFWV9QT1dFUiwKLQlbMHgxM10gPSBLRVlfUywJCQkvKiBzbmFwICovCi0JWzB4MTRdID0gS0VZX0FVRElPLAkJLyogc3RlcmVvICovCi0JWzB4MTVdID0gS0VZX0NMRUFSLAkJLyogcmVzZXQgKi8KLQlbMHgxNl0gPSBLRVlfUExBWSwKLQlbMHgxN10gPSBLRVlfRU5URVIsCi0JWzB4MThdID0gS0VZX1pPT00sCQkvKiBmdWxsIHNjcmVlbiAqLwotCVsweDE5XSA9IEtFWV9GQVNURk9SV0FSRCwJLyogZm9yd2FyZCA+PiAqLwotCVsweDFhXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MWJdID0gS0VZX1ZPTFVNRVVQLAotCVsweDFjXSA9IEtFWV9JTkZPLAkJLyogcHJldmlldyAqLwotCVsweDFkXSA9IEtFWV9SRUNPUkQsCQkvKiByZWNvcmQgKi8KLQlbMHgxZV0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWzB4MWZdID0gS0VZX1ZPTFVNRURPV04sCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIElPLURBVEEgQkNUVjdFIFJlbW90ZSAqLwotc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2lvZGF0YV9iY3R2N2VbSVJfS0VZVEFCX1NJWkVdID0gewotCVsweDQwXSA9IEtFWV9UViwKLQlbMHgyMF0gPSBLRVlfUkFESU8sCQkvKiBGTSAqLwotCVsweDYwXSA9IEtFWV9FUEcsCi0JWzB4MDBdID0gS0VZX1BPV0VSLAotCi0JLyogS2V5cyAwIHRvIDkgKi8KLQlbMHg0NF0gPSBLRVlfS1AwLAkJLyogMTAgKi8KLQlbMHg1MF0gPSBLRVlfS1AxLAotCVsweDMwXSA9IEtFWV9LUDIsCi0JWzB4NzBdID0gS0VZX0tQMywKLQlbMHg0OF0gPSBLRVlfS1A0LAotCVsweDI4XSA9IEtFWV9LUDUsCi0JWzB4NjhdID0gS0VZX0tQNiwKLQlbMHg1OF0gPSBLRVlfS1A3LAotCVsweDM4XSA9IEtFWV9LUDgsCi0JWzB4NzhdID0gS0VZX0tQOSwKLQotCVsweDEwXSA9IEtFWV9MLAkJCS8qIExpdmUgKi8KLQlbMHgwOF0gPSBLRVlfVCwJCQkvKiBUaW1lIFNoaWZ0ICovCi0KLQlbMHgxOF0gPSBLRVlfUExBWVBBVVNFLAkJLyogUGxheSAqLwotCi0JWzB4MjRdID0gS0VZX0VOVEVSLAkJLyogMTEgKi8KLQlbMHg2NF0gPSBLRVlfRVNDLAkJLyogMTIgKi8KLQlbMHgwNF0gPSBLRVlfTSwJCQkvKiBNdWx0aSAqLwotCi0JWzB4NTRdID0gS0VZX1ZJREVPLAotCVsweDM0XSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4NzRdID0gS0VZX1ZPTFVNRVVQLAotCVsweDE0XSA9IEtFWV9NVVRFLAotCi0JWzB4NGNdID0gS0VZX1MsCQkJLyogU1ZJREVPICovCi0JWzB4MmNdID0gS0VZX0NIQU5ORUxET1dOLAotCVsweDZjXSA9IEtFWV9WT0xVTUVET1dOLAotCVsweDBjXSA9IEtFWV9aT09NLAotCi0JWzB4NWNdID0gS0VZX1BBVVNFLAotCVsweDNjXSA9IEtFWV9DLAkJCS8qIHx8IChyZWQpICovCi0JWzB4N2NdID0gS0VZX1JFQ09SRCwJCS8qIHJlY29yZGluZyAqLwotCVsweDFjXSA9IEtFWV9TVE9QLAotCi0JWzB4NDFdID0gS0VZX1JFV0lORCwJCS8qIGJhY2t3YXJkIDw8ICovCi0JWzB4MjFdID0gS0VZX1BMQVksCi0JWzB4NjFdID0gS0VZX0ZBU1RGT1JXQVJELAkvKiBmb3J3YXJkID4+ICovCi0JWzB4MDFdID0gS0VZX05FWFQsCQkvKiBza2lwID58ICovCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIEFEUyBUZWNoIEluc3RhbnQgVFYgRFZCLVQgUENJIFJlbW90ZSAqLwotc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQkvKiBLZXlzIDAgdG8gOSAqLwotCVsweDRkXSA9IEtFWV8wLAotCVsweDU3XSA9IEtFWV8xLAotCVsweDRmXSA9IEtFWV8yLAotCVsweDUzXSA9IEtFWV8zLAotCVsweDU2XSA9IEtFWV80LAotCVsweDRlXSA9IEtFWV81LAotCVsweDVlXSA9IEtFWV82LAotCVsweDU0XSA9IEtFWV83LAotCVsweDRjXSA9IEtFWV84LAotCVsweDVjXSA9IEtFWV85LAotCi0JWzB4NWJdID0gS0VZX1BPV0VSLAotCVsweDVmXSA9IEtFWV9NVVRFLAotCVsweDU1XSA9IEtFWV9HT1RPLAotCVsweDVkXSA9IEtFWV9TRUFSQ0gsCi0JWzB4MTddID0gS0VZX0VQRywJCS8qIEd1aWRlICovCi0JWzB4MWZdID0gS0VZX01FTlUsCi0JWzB4MGZdID0gS0VZX1VQLAotCVsweDQ2XSA9IEtFWV9ET1dOLAotCVsweDE2XSA9IEtFWV9MRUZULAotCVsweDFlXSA9IEtFWV9SSUdIVCwKLQlbMHgwZV0gPSBLRVlfU0VMRUNULAkJLyogRW50ZXIgKi8KLQlbMHg1YV0gPSBLRVlfSU5GTywKLQlbMHg1Ml0gPSBLRVlfRVhJVCwKLQlbMHg1OV0gPSBLRVlfUFJFVklPVVMsCi0JWzB4NTFdID0gS0VZX05FWFQsCi0JWzB4NThdID0gS0VZX1JFV0lORCwKLQlbMHg1MF0gPSBLRVlfRk9SV0FSRCwKLQlbMHg0NF0gPSBLRVlfUExBWVBBVVNFLAotCVsweDA3XSA9IEtFWV9TVE9QLAotCVsweDFiXSA9IEtFWV9SRUNPUkQsCi0JWzB4MTNdID0gS0VZX1RVTkVSLAkJLyogTGl2ZSAqLwotCVsweDBhXSA9IEtFWV9BLAotCVsweDEyXSA9IEtFWV9CLAotCVsweDAzXSA9IEtFWV9QUk9HMSwJCS8qIDEgKi8KLQlbMHgwMV0gPSBLRVlfUFJPRzIsCQkvKiAyICovCi0JWzB4MDBdID0gS0VZX1BST0czLAkJLyogMyAqLwotCVsweDA2XSA9IEtFWV9EVkQsCi0JWzB4NDhdID0gS0VZX0FVWCwJCS8qIFBob3RvICovCi0JWzB4NDBdID0gS0VZX1ZJREVPLAotCVsweDE5XSA9IEtFWV9BVURJTywJCS8qIE11c2ljICovCi0JWzB4MGJdID0gS0VZX0NIQU5ORUxVUCwKLQlbMHgwOF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWzB4MTVdID0gS0VZX1ZPTFVNRVVQLAotCVsweDFjXSA9IEtFWV9WT0xVTUVET1dOLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBNU0kgVFZAbnl3aGVyZSByZW1vdGUgKi8KLXN0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZVtJUl9LRVlUQUJfU0laRV0gPSB7Ci0JLyogS2V5cyAwIHRvIDkgKi8KLQlbMHgwMF0gPSBLRVlfMCwKLQlbMHgwMV0gPSBLRVlfMSwKLQlbMHgwMl0gPSBLRVlfMiwKLQlbMHgwM10gPSBLRVlfMywKLQlbMHgwNF0gPSBLRVlfNCwKLQlbMHgwNV0gPSBLRVlfNSwKLQlbMHgwNl0gPSBLRVlfNiwKLQlbMHgwN10gPSBLRVlfNywKLQlbMHgwOF0gPSBLRVlfOCwKLQlbMHgwOV0gPSBLRVlfOSwKLQotCVsweDBjXSA9IEtFWV9NVVRFLAotCVsweDBmXSA9IEtFWV9TQ1JFRU4sCQkvKiBGdWxsIFNjcmVlbiAqLwotCVsweDEwXSA9IEtFWV9GLAkJCS8qIEZ1bnRpb24gKi8KLQlbMHgxMV0gPSBLRVlfVCwJCQkvKiBUaW1lIHNoaWZ0ICovCi0JWzB4MTJdID0gS0VZX1BPV0VSLAotCVsweDEzXSA9IEtFWV9NRURJQSwJCS8qIE1UUyAqLwotCVsweDE0XSA9IEtFWV9TTE9XLAotCVsweDE2XSA9IEtFWV9SRVdJTkQsCQkvKiBiYWNrd2FyZCA8PCAqLwotCVsweDE3XSA9IEtFWV9FTlRFUiwJCS8qIFJldHVybiAqLwotCVsweDE4XSA9IEtFWV9GQVNURk9SV0FSRCwJLyogZm9yd2FyZCA+PiAqLwotCVsweDFhXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MWJdID0gS0VZX1ZPTFVNRVVQLAotCVsweDFlXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbMHgxZl0gPSBLRVlfVk9MVU1FRE9XTiwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogQ2luZXJneSAxNDAwIERWQi1UICovCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfY2luZXJneV8xNDAwW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbMHgwMV0gPSBLRVlfUE9XRVIsCi0JWzB4MDJdID0gS0VZXzEsCi0JWzB4MDNdID0gS0VZXzIsCi0JWzB4MDRdID0gS0VZXzMsCi0JWzB4MDVdID0gS0VZXzQsCi0JWzB4MDZdID0gS0VZXzUsCi0JWzB4MDddID0gS0VZXzYsCi0JWzB4MDhdID0gS0VZXzcsCi0JWzB4MDldID0gS0VZXzgsCi0JWzB4MGFdID0gS0VZXzksCi0JWzB4MGNdID0gS0VZXzAsCi0KLQlbMHgwYl0gPSBLRVlfVklERU8sCi0JWzB4MGRdID0gS0VZX1JFRlJFU0gsCi0JWzB4MGVdID0gS0VZX1NFTEVDVCwKLQlbMHgwZl0gPSBLRVlfRVBHLAotCVsweDEwXSA9IEtFWV9VUCwKLQlbMHgxMV0gPSBLRVlfTEVGVCwKLQlbMHgxMl0gPSBLRVlfT0ssCi0JWzB4MTNdID0gS0VZX1JJR0hULAotCVsweDE0XSA9IEtFWV9ET1dOLAotCVsweDE1XSA9IEtFWV9URVhULAotCVsweDE2XSA9IEtFWV9JTkZPLAotCi0JWzB4MTddID0gS0VZX1JFRCwKLQlbMHgxOF0gPSBLRVlfR1JFRU4sCi0JWzB4MTldID0gS0VZX1lFTExPVywKLQlbMHgxYV0gPSBLRVlfQkxVRSwKLQotCVsweDFiXSA9IEtFWV9DSEFOTkVMVVAsCi0JWzB4MWNdID0gS0VZX1ZPTFVNRVVQLAotCVsweDFkXSA9IEtFWV9NVVRFLAotCVsweDFlXSA9IEtFWV9WT0xVTUVET1dOLAotCVsweDFmXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQotCVsweDQwXSA9IEtFWV9QQVVTRSwKLQlbMHg0Y10gPSBLRVlfUExBWSwKLQlbMHg1OF0gPSBLRVlfUkVDT1JELAotCVsweDU0XSA9IEtFWV9QUkVWSU9VUywKLQlbMHg0OF0gPSBLRVlfU1RPUCwKLQlbMHg1Y10gPSBLRVlfTkVYVCwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogQVZFUlRWIFNUVURJTyAzMDMgUmVtb3RlICovCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcnR2XzMwM1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAweDJhIF0gPSBLRVlfS1AxLAotCVsgMHgzMiBdID0gS0VZX0tQMiwKLQlbIDB4M2EgXSA9IEtFWV9LUDMsCi0JWyAweDRhIF0gPSBLRVlfS1A0LAotCVsgMHg1MiBdID0gS0VZX0tQNSwKLQlbIDB4NWEgXSA9IEtFWV9LUDYsCi0JWyAweDZhIF0gPSBLRVlfS1A3LAotCVsgMHg3MiBdID0gS0VZX0tQOCwKLQlbIDB4N2EgXSA9IEtFWV9LUDksCi0JWyAweDBlIF0gPSBLRVlfS1AwLAotCi0JWyAweDAyIF0gPSBLRVlfUE9XRVIsCi0JWyAweDIyIF0gPSBLRVlfVklERU8sCi0JWyAweDQyIF0gPSBLRVlfQVVESU8sCi0JWyAweDYyIF0gPSBLRVlfWk9PTSwKLQlbIDB4MGEgXSA9IEtFWV9UViwKLQlbIDB4MTIgXSA9IEtFWV9DRCwKLQlbIDB4MWEgXSA9IEtFWV9URVhULAotCi0JWyAweDE2IF0gPSBLRVlfU1VCVElUTEUsCi0JWyAweDFlIF0gPSBLRVlfUkVXSU5ELAotCVsgMHgwNiBdID0gS0VZX1BSSU5ULAotCi0JWyAweDJlIF0gPSBLRVlfU0VBUkNILAotCVsgMHgzNiBdID0gS0VZX1NMRUVQLAotCVsgMHgzZSBdID0gS0VZX1NIVUZGTEUsCi0JWyAweDI2IF0gPSBLRVlfTVVURSwKLQotCVsgMHg0ZSBdID0gS0VZX1JFQ09SRCwKLQlbIDB4NTYgXSA9IEtFWV9QQVVTRSwKLQlbIDB4NWUgXSA9IEtFWV9TVE9QLAotCVsgMHg0NiBdID0gS0VZX1BMQVksCi0KLQlbIDB4NmUgXSA9IEtFWV9SRUQsCi0JWyAweDBiIF0gPSBLRVlfR1JFRU4sCi0JWyAweDY2IF0gPSBLRVlfWUVMTE9XLAotCVsgMHgwMyBdID0gS0VZX0JMVUUsCi0KLQlbIDB4NzYgXSA9IEtFWV9MRUZULAotCVsgMHg3ZSBdID0gS0VZX1JJR0hULAotCVsgMHgxMyBdID0gS0VZX0RPV04sCi0JWyAweDFiIF0gPSBLRVlfVVAsCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIERpZ2l0YWxOb3cgRE5UViBMaXZlISBEVkItVCBQcm8gUmVtb3RlICovCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZG50dl9saXZlX2R2YnRfcHJvW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MTYgXSA9IEtFWV9QT1dFUiwKLQlbIDB4NWIgXSA9IEtFWV9IT01FLAotCi0JWyAweDU1IF0gPSBLRVlfVFYsCQkvKiBsaXZlIHR2ICovCi0JWyAweDU4IF0gPSBLRVlfVFVORVIsCQkvKiBkaWdpdGFsIFJhZGlvICovCi0JWyAweDVhIF0gPSBLRVlfUkFESU8sCQkvKiBGTSByYWRpbyAqLwotCVsgMHg1OSBdID0gS0VZX0RWRCwJCS8qIGR2ZCBtZW51ICovCi0JWyAweDAzIF0gPSBLRVlfMSwKLQlbIDB4MDEgXSA9IEtFWV8yLAotCVsgMHgwNiBdID0gS0VZXzMsCi0JWyAweDA5IF0gPSBLRVlfNCwKLQlbIDB4MWQgXSA9IEtFWV81LAotCVsgMHgxZiBdID0gS0VZXzYsCi0JWyAweDBkIF0gPSBLRVlfNywKLQlbIDB4MTkgXSA9IEtFWV84LAotCVsgMHgxYiBdID0gS0VZXzksCi0JWyAweDBjIF0gPSBLRVlfQ0FOQ0VMLAotCVsgMHgxNSBdID0gS0VZXzAsCi0JWyAweDRhIF0gPSBLRVlfQ0xFQVIsCi0JWyAweDEzIF0gPSBLRVlfQkFDSywKLQlbIDB4MDAgXSA9IEtFWV9UQUIsCi0JWyAweDRiIF0gPSBLRVlfVVAsCi0JWyAweDRlIF0gPSBLRVlfTEVGVCwKLQlbIDB4NGYgXSA9IEtFWV9PSywKLQlbIDB4NTIgXSA9IEtFWV9SSUdIVCwKLQlbIDB4NTEgXSA9IEtFWV9ET1dOLAotCVsgMHgxZSBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgwYSBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDAyIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDA1IF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgxMSBdID0gS0VZX1JFQ09SRCwKLQlbIDB4MTQgXSA9IEtFWV9QTEFZLAotCVsgMHg0YyBdID0gS0VZX1BBVVNFLAotCVsgMHgxYSBdID0gS0VZX1NUT1AsCi0JWyAweDQwIF0gPSBLRVlfUkVXSU5ELAotCVsgMHgxMiBdID0gS0VZX0ZBU1RGT1JXQVJELAotCVsgMHg0MSBdID0gS0VZX1BSRVZJT1VTU09ORywJLyogcmVwbGF5IHw8ICovCi0JWyAweDQyIF0gPSBLRVlfTkVYVFNPTkcsCS8qIHNraXAgPnwgKi8KLQlbIDB4NTQgXSA9IEtFWV9DQU1FUkEsCQkvKiBjYXB0dXJlICovCi0JWyAweDUwIF0gPSBLRVlfTEFOR1VBR0UsCS8qIHNhcCAqLwotCVsgMHg0NyBdID0gS0VZX1RWMiwJCS8qIHBpcCAqLwotCVsgMHg0ZCBdID0gS0VZX1NDUkVFTiwKLQlbIDB4NDMgXSA9IEtFWV9TVUJUSVRMRSwKLQlbIDB4MTAgXSA9IEtFWV9NVVRFLAotCVsgMHg0OSBdID0gS0VZX0FVRElPLAkJLyogbC9yICovCi0JWyAweDA3IF0gPSBLRVlfU0xFRVAsCi0JWyAweDA4IF0gPSBLRVlfVklERU8sCQkvKiBhL3YgKi8KLQlbIDB4MGUgXSA9IEtFWV9QUkVWSU9VUywJLyogcmVjYWxsICovCi0JWyAweDQ1IF0gPSBLRVlfWk9PTSwJCS8qIHpvb20gKyAqLwotCVsgMHg0NiBdID0gS0VZX0FOR0xFLAkJLyogem9vbSAtICovCi0JWyAweDU2IF0gPSBLRVlfUkVELAotCVsgMHg1NyBdID0gS0VZX0dSRUVOLAotCVsgMHg1YyBdID0gS0VZX1lFTExPVywKLQlbIDB4NWQgXSA9IEtFWV9CTFVFLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdHJ1Y3QgY3g4OF9JUiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKQEAgLTUxNyw2ICsxODYsNyBAQAogCQlpci0+bWFza19rZXlkb3duID0gMHgwMjsKIAkJaXItPnBvbGxpbmcgPSA1OyAvKiBtcyAqLwogCQlicmVhazsKKyAgICAgICBjYXNlIENYODhfQk9BUkRfUFJPTElOS19QTEFZVFZQVlI6CiAJY2FzZSBDWDg4X0JPQVJEX1BJWEVMVklFV19QTEFZVFZfVUxUUkFfUFJPOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX3BpeGVsdmlldzsKIAkJaXItPmdwaW9fYWRkciA9IE1PX0dQMV9JTzsKQEAgLTUyNCw2ICsxOTQsMTMgQEAKIAkJaXItPm1hc2tfa2V5dXAgPSAweDgwOwogCQlpci0+cG9sbGluZyA9IDE7IC8qIG1zICovCiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9LV09STERfTFRWODgzOgorCQlpcl9jb2RlcyA9IGlyX2NvZGVzX3BpeGVsdmlldzsKKwkJaXItPmdwaW9fYWRkciA9IE1PX0dQMV9JTzsKKwkJaXItPm1hc2tfa2V5Y29kZSA9IDB4MWY7CisJCWlyLT5tYXNrX2tleXVwID0gMHg2MDsKKwkJaXItPnBvbGxpbmcgPSAxOyAvKiBtcyAqLworCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfQURTVEVDSF9EVkJfVF9QQ0k6CiAJCWlyX2NvZGVzID0gaXJfY29kZXNfYWRzdGVjaF9kdmJfdF9wY2k7CiAJCWlyLT5ncGlvX2FkZHIgPSBNT19HUDFfSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggYzc5Y2MxZC4uN2QxNjg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtbXBlZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LW1wZWcuYwpAQCAtMTYzLDggKzE2Myw4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1pbnQgY3g4ODAyX2J1Zl9wcmVwYXJlKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmLAotCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoraW50IGN4ODgwMl9idWZfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsCisJCQlzdHJ1Y3QgY3g4OF9idWZmZXIgKmJ1ZiwgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQogewogCWludCBzaXplID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OwogCWludCByYzsKQEAgLTE3OSw3ICsxNzksNyBAQAogCQlidWYtPnZiLnNpemUgICA9IHNpemU7CiAJCWJ1Zi0+dmIuZmllbGQgID0gZmllbGQgLypWNEwyX0ZJRUxEX1RPUCovOwogCi0JCWlmICgwICE9IChyYyA9IHZpZGVvYnVmX2lvbG9jayhkZXYtPnBjaSwmYnVmLT52YixOVUxMKSkpCisJCWlmICgwICE9IChyYyA9IHZpZGVvYnVmX2lvbG9jayhxLCZidWYtPnZiLE5VTEwpKSkKIAkJCWdvdG8gZmFpbDsKIAkJY3g4OF9yaXNjX2RhdGFidWZmZXIoZGV2LT5wY2ksICZidWYtPnJpc2MsCiAJCQkJICAgICBidWYtPnZiLmRtYS5zZ2xpc3QsCkBAIC0xODksMzYgKzE4OSwzNiBAQAogCXJldHVybiAwOwogCiAgZmFpbDoKLQljeDg4X2ZyZWVfYnVmZmVyKGRldi0+cGNpLGJ1Zik7CisJY3g4OF9mcmVlX2J1ZmZlcihxLGJ1Zik7CiAJcmV0dXJuIHJjOwogfQogCiB2b2lkIGN4ODgwMl9idWZfcXVldWUoc3RydWN0IGN4ODgwMl9kZXYgKmRldiwgc3RydWN0IGN4ODhfYnVmZmVyICpidWYpCiB7CiAJc3RydWN0IGN4ODhfYnVmZmVyICAgICpwcmV2OwotCXN0cnVjdCBjeDg4X2RtYXF1ZXVlICAqcSAgICA9ICZkZXYtPm1wZWdxOworCXN0cnVjdCBjeDg4X2RtYXF1ZXVlICAqY3g4OHEgPSAmZGV2LT5tcGVncTsKIAogCWRwcmludGsoIDEsICJjeDg4MDJfYnVmX3F1ZXVlXG4iICk7CiAJLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLwogCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOwotCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7CisJYnVmLT5yaXNjLmptcFsxXSA9IGNwdV90b19sZTMyKGN4ODhxLT5zdG9wcGVyLmRtYSk7CiAKLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkgeworCWlmIChsaXN0X2VtcHR5KCZjeDg4cS0+YWN0aXZlKSkgewogCQlkcHJpbnRrKCAwLCAicXVldWUgaXMgZW1wdHkgLSBmaXJzdCBhY3RpdmVcbiIgKTsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwmcS0+YWN0aXZlKTsKLQkJY3g4ODAyX3N0YXJ0X2RtYShkZXYsIHEsIGJ1Zik7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsJmN4ODhxLT5hY3RpdmUpOworCQljeDg4MDJfc3RhcnRfZG1hKGRldiwgY3g4OHEsIGJ1Zik7CiAJCWJ1Zi0+dmIuc3RhdGUgPSBTVEFURV9BQ1RJVkU7Ci0JCWJ1Zi0+Y291bnQgICAgPSBxLT5jb3VudCsrOwotCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCQlidWYtPmNvdW50ICAgID0gY3g4OHEtPmNvdW50Kys7CisJCW1vZF90aW1lcigmY3g4OHEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOwogCQlkcHJpbnRrKDAsIlslcC8lZF0gJXMgLSBmaXJzdCBhY3RpdmVcbiIsCiAJCQlidWYsIGJ1Zi0+dmIuaSwgX19GVU5DVElPTl9fKTsKIAogCX0gZWxzZSB7CiAJCWRwcmludGsoIDEsICJxdWV1ZSBpcyBub3QgZW1wdHkgLSBhcHBlbmQgdG8gYWN0aXZlXG4iICk7Ci0JCXByZXYgPSBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3g4OF9idWZmZXIsIHZiLnF1ZXVlKTsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwmcS0+YWN0aXZlKTsKKwkJcHJldiA9IGxpc3RfZW50cnkoY3g4OHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3QgY3g4OF9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwmY3g4OHEtPmFjdGl2ZSk7CiAJCWJ1Zi0+dmIuc3RhdGUgPSBTVEFURV9BQ1RJVkU7Ci0JCWJ1Zi0+Y291bnQgICAgPSBxLT5jb3VudCsrOworCQlidWYtPmNvdW50ICAgID0gY3g4OHEtPmNvdW50Kys7CiAJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CiAJCWRwcmludGsoIDEsICJbJXAvJWRdICVzIC0gYXBwZW5kIHRvIGFjdGl2ZVxuIiwKIAkJCWJ1ZiwgYnVmLT52Yi5pLCBfX0ZVTkNUSU9OX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdHZhdWRpby5jCmluZGV4IGRhOGQ5N2MuLjY0MWEwYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKQEAgLTg4NSw2ICs4ODUsNyBAQAogCQkJc2V0X2F1ZGlvX3N0YW5kYXJkX0JUU0MoY29yZSwgMSwgRU5fQlRTQ19GT1JDRV9TQVApOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CiAJCQlzZXRfYXVkaW9fc3RhbmRhcmRfQlRTQyhjb3JlLCAwLCBFTl9CVFNDX0ZPUkNFX1NURVJFTyk7CiAJCQlicmVhazsKIAkJfQpAQCAtOTA1LDYgKzkwNiw3IEBACiAJCQkJCQkJIEVOX05JQ0FNX0ZPUkNFX01PTk8yKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgogCQkJCXNldF9hdWRpb19zdGFuZGFyZF9OSUNBTShjb3JlLAogCQkJCQkJCSBFTl9OSUNBTV9GT1JDRV9TVEVSRU8pOwogCQkJCWJyZWFrOwpAQCAtOTI2LDYgKzkyOCw3IEBACiAJCQkJCQkJICAgICAgRU5fQTJfRk9SQ0VfTU9OTzIpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJCQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CiAJCQkJCXNldF9hdWRpb19zdGFuZGFyZF9BMihjb3JlLAogCQkJCQkJCSAgICAgIEVOX0EyX0ZPUkNFX1NURVJFTyk7CiAJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYwppbmRleCA5YmM2Yzg5Li44NDZmYWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12YmkuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJCWJ1Zi0+dmIuc2l6ZSAgID0gc2l6ZTsKIAkJYnVmLT52Yi5maWVsZCAgPSBWNEwyX0ZJRUxEX1NFUV9UQjsKIAotCQlpZiAoMCAhPSAocmMgPSB2aWRlb2J1Zl9pb2xvY2soZGV2LT5wY2ksJmJ1Zi0+dmIsTlVMTCkpKQorCQlpZiAoMCAhPSAocmMgPSB2aWRlb2J1Zl9pb2xvY2socSwmYnVmLT52YixOVUxMKSkpCiAJCQlnb3RvIGZhaWw7CiAJCWN4ODhfcmlzY19idWZmZXIoZGV2LT5wY2ksICZidWYtPnJpc2MsCiAJCQkJIGJ1Zi0+dmIuZG1hLnNnbGlzdCwKQEAgLTE4Nyw3ICsxODcsNyBAQAogCXJldHVybiAwOwogCiAgZmFpbDoKLQljeDg4X2ZyZWVfYnVmZmVyKGRldi0+cGNpLGJ1Zik7CisJY3g4OF9mcmVlX2J1ZmZlcihxLGJ1Zik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMjcsOSArMjI3LDggQEAKIHN0YXRpYyB2b2lkIHZiaV9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7CiAJc3RydWN0IGN4ODhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsc3RydWN0IGN4ODhfYnVmZmVyLHZiKTsKLQlzdHJ1Y3QgY3g4ODAwX2ZoICAgKmZoICA9IHEtPnByaXZfZGF0YTsKIAotCWN4ODhfZnJlZV9idWZmZXIoZmgtPmRldi0+cGNpLGJ1Zik7CisJY3g4OF9mcmVlX2J1ZmZlcihxLGJ1Zik7CiB9CiAKIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3g4ODAwX3ZiaV9xb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggMDczNDk0Yy4uNzJhNDE3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkJCS5taW5pbXVtICAgICAgID0gMHgwMCwKIAkJCS5tYXhpbXVtICAgICAgID0gMHhmZiwKIAkJCS5zdGVwICAgICAgICAgID0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHg3ZiwKIAkJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJfSwKIAkJLm9mZiAgICAgICAgICAgICAgICAgICA9IDEyOCwKQEAgLTI1NSw3ICsyNTUsNyBAQAogCQkJLm1pbmltdW0gICAgICAgPSAwLAogCQkJLm1heGltdW0gICAgICAgPSAweGZmLAogCQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDdmLAogCQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQl9LAogCQkub2ZmICAgICAgICAgICAgICAgICAgID0gMTI4LApAQCAtMzAwLDcgKzMwMCw3IEBACiAJCQkubWluaW11bSAgICAgICA9IDAsCiAJCQkubWF4aW11bSAgICAgICA9IDB4M2YsCiAJCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4MWYsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4M2YsCiAJCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCX0sCiAJCS5yZWcgICAgICAgICAgICAgICAgICAgPSBBVURfVk9MX0NUTCwKQEAgLTMzNiwxNyArMzM2LDE3IEBACiAJCXJldHVybiAxOwogCiAJLyogaXMgaXQgZnJlZT8gKi8KLQlkb3duKCZjb3JlLT5sb2NrKTsKKwltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKIAlpZiAoZGV2LT5yZXNvdXJjZXMgJiBiaXQpIHsKIAkJLyogbm8sIHNvbWVvbmUgZWxzZSB1c2VzIGl0ICovCi0JCXVwKCZjb3JlLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGl0J3MgZnJlZSwgZ3JhYiBpdCAqLwogCWZoLT5yZXNvdXJjZXMgIHw9IGJpdDsKIAlkZXYtPnJlc291cmNlcyB8PSBiaXQ7CiAJZHByaW50aygxLCJyZXM6IGdldCAlZFxuIixiaXQpOwotCXVwKCZjb3JlLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOwogCXJldHVybiAxOwogfQogCkBAIC0zNjYsMTQgKzM2NiwxMyBAQAogdm9pZCByZXNfZnJlZShzdHJ1Y3QgY3g4ODAwX2RldiAqZGV2LCBzdHJ1Y3QgY3g4ODAwX2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdHMpCiB7CiAJc3RydWN0IGN4ODhfY29yZSAqY29yZSA9IGRldi0+Y29yZTsKLQlpZiAoKGZoLT5yZXNvdXJjZXMgJiBiaXRzKSAhPSBiaXRzKQotCQlCVUcoKTsKKwlCVUdfT04oKGZoLT5yZXNvdXJjZXMgJiBiaXRzKSAhPSBiaXRzKTsKIAotCWRvd24oJmNvcmUtPmxvY2spOworCW11dGV4X2xvY2soJmNvcmUtPmxvY2spOwogCWZoLT5yZXNvdXJjZXMgICY9IH5iaXRzOwogCWRldi0+cmVzb3VyY2VzICY9IH5iaXRzOwogCWRwcmludGsoMSwicmVzOiBwdXQgJWRcbiIsYml0cyk7Ci0JdXAoJmNvcmUtPmxvY2spOworCW11dGV4X3VubG9jaygmY29yZS0+bG9jayk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNTY1LDcgKzU2NCw3IEBACiAKIAlpZiAoU1RBVEVfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7CiAJCWluaXRfYnVmZmVyID0gMTsKLQkJaWYgKDAgIT0gKHJjID0gdmlkZW9idWZfaW9sb2NrKGRldi0+cGNpLCZidWYtPnZiLE5VTEwpKSkKKwkJaWYgKDAgIT0gKHJjID0gdmlkZW9idWZfaW9sb2NrKHEsJmJ1Zi0+dmIsTlVMTCkpKQogCQkJZ290byBmYWlsOwogCX0KIApAQCAtNjE1LDcgKzYxNCw3IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsOgotCWN4ODhfZnJlZV9idWZmZXIoZGV2LT5wY2ksYnVmKTsKKwljeDg4X2ZyZWVfYnVmZmVyKHEsYnVmKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY3Miw5ICs2NzEsOCBAQAogc3RhdGljIHZvaWQgYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3QgY3g4OF9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2YixzdHJ1Y3QgY3g4OF9idWZmZXIsdmIpOwotCXN0cnVjdCBjeDg4MDBfZmggICAqZmggID0gcS0+cHJpdl9kYXRhOwogCi0JY3g4OF9mcmVlX2J1ZmZlcihmaC0+ZGV2LT5wY2ksYnVmKTsKKwljeDg4X2ZyZWVfYnVmZmVyKHEsYnVmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgY3g4ODAwX3ZpZGVvX3FvcHMgPSB7CkBAIC05MDksNyArOTA3LDggQEAKIAl2YWx1ZSA9IGMtPnNyZWcgPyBjeF9zcmVhZChjLT5zcmVnKSA6IGN4X3JlYWQoYy0+cmVnKTsKIAlzd2l0Y2ggKGN0bC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWN0bC0+dmFsdWUgPSAodmFsdWUgJiAweDQwKSA/ICh2YWx1ZSAmIDB4M2YpIDogKDB4NDAgLSAodmFsdWUgJiAweDNmKSk7CisJCWN0bC0+dmFsdWUgPSAoKHZhbHVlICYgMHg3ZikgPCAweDQwKSA/ICgodmFsdWUgJiAweDdmKSArIDB4NDApCisJCQkJCTogKDB4N2YgLSAodmFsdWUgJiAweDdmKSk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCQljdGwtPnZhbHVlID0gMHgzZiAtICh2YWx1ZSAmIDB4M2YpOwpAQCAtOTE4LDkgKzkxNyw5IEBACiAJCWN0bC0+dmFsdWUgPSAoKHZhbHVlICsgKGMtPm9mZiA8PCBjLT5zaGlmdCkpICYgYy0+bWFzaykgPj4gYy0+c2hpZnQ7CiAJCWJyZWFrOwogCX0KLQlwcmludGsoImdldF9jb250cm9sIGlkPTB4JVggcmVnPTB4JTAyeCB2YWw9MHglMDJ4IChtYXNrIDB4JTAyeCklc1xuIiwKLQkJCQkJY3RsLT5pZCwgYy0+cmVnLCBjdGwtPnZhbHVlLAotCQkJCQljLT5tYXNrLCBjLT5zcmVnID8gIiBbc2hhZG93ZWRdIiA6ICIiKTsKKwlkcHJpbnRrKDEsImdldF9jb250cm9sIGlkPTB4JVgoJXMpIGN0cmw9MHglMDJ4LCByZWc9MHglMDJ4IHZhbD0weCUwMnggKG1hc2sgMHglMDJ4KSVzXG4iLAorCQkJCWN0bC0+aWQsIGMtPnYubmFtZSwgY3RsLT52YWx1ZSwgYy0+cmVnLAorCQkJCXZhbHVlLGMtPm1hc2ssIGMtPnNyZWcgPyAiIFtzaGFkb3dlZF0iIDogIiIpOwogCXJldHVybiAwOwogfQogCkBAIC05NDYsNyArOTQ1LDcgQEAKIAltYXNrPWMtPm1hc2s7CiAJc3dpdGNoIChjdGwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQl2YWx1ZSA9IChjdGwtPnZhbHVlIDwgMHg0MCkgPyAoMHg0MCAtIGN0bC0+dmFsdWUpIDogY3RsLT52YWx1ZTsKKwkJdmFsdWUgPSAoY3RsLT52YWx1ZSA8IDB4NDApID8gKDB4N2YgLSBjdGwtPnZhbHVlKSA6IChjdGwtPnZhbHVlIC0gMHg0MCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCQl2YWx1ZSA9IDB4M2YgLSAoY3RsLT52YWx1ZSAmIDB4M2YpOwpAQCAtOTY5LDkgKzk2OCw5IEBACiAJCXZhbHVlID0gKChjdGwtPnZhbHVlIC0gYy0+b2ZmKSA8PCBjLT5zaGlmdCkgJiBjLT5tYXNrOwogCQlicmVhazsKIAl9Ci0JcHJpbnRrKCJzZXRfY29udHJvbCBpZD0weCVYIHJlZz0weCUwMnggdmFsPTB4JTAyeCAobWFzayAweCUwMngpJXNcbiIsCi0JCQkJCWN0bC0+aWQsIGMtPnJlZywgdmFsdWUsCi0JCQkJCW1hc2ssIGMtPnNyZWcgPyAiIFtzaGFkb3dlZF0iIDogIiIpOworCWRwcmludGsoMSwic2V0X2NvbnRyb2wgaWQ9MHglWCglcykgY3RybD0weCUwMngsIHJlZz0weCUwMnggdmFsPTB4JTAyeCAobWFzayAweCUwMngpJXNcbiIsCisJCQkJY3RsLT5pZCwgYy0+di5uYW1lLCBjdGwtPnZhbHVlLCBjLT5yZWcsIHZhbHVlLAorCQkJCW1hc2ssIGMtPnNyZWcgPyAiIFtzaGFkb3dlZF0iIDogIiIpOwogCWlmIChjLT5zcmVnKSB7CiAJCWN4X3NhbmRvcihjLT5zcmVnLCBjLT5yZWcsIG1hc2ssIHZhbHVlKTsKIAl9IGVsc2UgewpAQCAtOTg3LDggKzk4Niw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQ1g4ODAwX0NUTFM7IGkrKykgewogCQljdHJsLmlkPWN4ODgwMF9jdGxzW2ldLnYuaWQ7Ci0JCWN0cmwudmFsdWU9Y3g4ODAwX2N0bHNbaV0udi5kZWZhdWx0X3ZhbHVlCi0JCQkJK2N4ODgwMF9jdGxzW2ldLm9mZjsKKwkJY3RybC52YWx1ZT1jeDg4MDBfY3Rsc1tpXS52LmRlZmF1bHRfdmFsdWU7CiAJCXNldF9jb250cm9sKGNvcmUsICZjdHJsKTsKIAl9CiB9CkBAIC0xMjUyLDkgKzEyNTAsMTcgQEAKIHsKIAlpbnQgZXJyOwogCi0JZHByaW50ayggMSwgIkNPUkUgSU9DVEw6IDB4JXhcbiIsIGNtZCApOwotCWlmICh2aWRlb19kZWJ1ZyA+IDEpCi0JCXY0bF9wcmludF9pb2N0bChjb3JlLT5uYW1lLGNtZCk7CisgICAgICAgaWYgKHZpZGVvX2RlYnVnKSB7CisJICAgICAgIGlmICh2aWRlb19kZWJ1ZyA+IDEpIHsKKwkJICAgICAgIGlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkKKwkJCSAgICAgICB2NGxfcHJpbnRrX2lvY3RsX2FyZygiY3g4OCh3KSIsY21kLCBhcmcpOworCQkgICAgICAgZWxzZSBpZiAoIV9JT0NfRElSKGNtZCkgJiBfSU9DX1JFQUQpIHsKKwkJCSAgICAgICB2NGxfcHJpbnRfaW9jdGwoImN4ODgiLCBjbWQpOworCQkgICAgICAgfQorCSAgICAgICB9IGVsc2UKKwkJICAgICAgIHY0bF9wcmludF9pb2N0bChjb3JlLT5uYW1lLGNtZCk7CisKKyAgICAgICB9CiAKIAlzd2l0Y2ggKGNtZCkgewogCS8qIC0tLS0tLS0tLS0gdHYgbm9ybXMgLS0tLS0tLS0tLSAqLwpAQCAtMTI5MSw5ICsxMjk3LDkgQEAKIAkJaWYgKGkgPT0gQVJSQVlfU0laRSh0dm5vcm1zKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWRvd24oJmNvcmUtPmxvY2spOworCQltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKIAkJY3g4OF9zZXRfdHZub3JtKGNvcmUsJnR2bm9ybXNbaV0pOwotCQl1cCgmY29yZS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmY29yZS0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTM0MywxMCArMTM0OSwxMCBAQAogCiAJCWlmICgqaSA+PSA0KQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRvd24oJmNvcmUtPmxvY2spOworCQltdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsKIAkJY3g4OF9uZXdzdGF0aW9uKGNvcmUpOwogCQl2aWRlb19tdXgoY29yZSwqaSk7Ci0JCXVwKCZjb3JlLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNDM4LDcgKzE0NDQsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgxID09IHJhZGlvICYmIGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKIAkJCXJldHVybiAtRUlOVkFMOwotCQlkb3duKCZjb3JlLT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7CiAJCWNvcmUtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJCWN4ODhfbmV3c3RhdGlvbihjb3JlKTsKIAkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfRlJFUVVFTkNZLGYpOwpAQCAtMTQ0Nyw3ICsxNDUzLDcgQEAKIAkJbXNsZWVwICgxMCk7CiAJCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7CiAKLQkJdXAoJmNvcmUtPmxvY2spOworCQltdXRleF91bmxvY2soJmNvcmUtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE0NjEsNyArMTQ2NywxOSBAQAogc3RhdGljIGludCB2aWRlb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHZpZGVvX2RvX2lvY3RsKTsKKyAgICAgICBpbnQgcmV0dmFsOworCisgICAgICAgcmV0dmFsPXZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgdmlkZW9fZG9faW9jdGwpOworCisgICAgICAgaWYgKHZpZGVvX2RlYnVnID4gMSkgeworCSAgICAgICBpZiAocmV0dmFsIDwgMCkgeworCQkgICAgICAgdjRsX3ByaW50X2lvY3RsKCJjeDg4KGVycikiLCBjbWQpOworCQkgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgImN4ODgoZXJyKTogZXJyY29kZT0lZFxuIixyZXR2YWwpOworCSAgICAgICB9IGVsc2UgaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1JFQUQpCisJCSAgICAgICB2NGxfcHJpbnRrX2lvY3RsX2FyZygiY3g4OChyKSIsY21kLCAodm9pZCAqKWFyZyk7CisgICAgICAgfQorCisgICAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE5MjEsMTEgKzE5MzksMTEgQEAKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldixkZXYpOwogCiAJLyogaW5pdGlhbCBkZXZpY2UgY29uZmlndXJhdGlvbiAqLwotCWRvd24oJmNvcmUtPmxvY2spOworCW11dGV4X2xvY2soJmNvcmUtPmxvY2spOwogCWN4ODhfc2V0X3R2bm9ybShjb3JlLHR2bm9ybXMpOwogCWluaXRfY29udHJvbHMoY29yZSk7CiAJdmlkZW9fbXV4KGNvcmUsMCk7Ci0JdXAoJmNvcmUtPmxvY2spOworCW11dGV4X3VubG9jaygmY29yZS0+bG9jayk7CiAKIAkvKiBzdGFydCB0dmF1ZGlvIHRocmVhZCAqLwogCWlmIChjb3JlLT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IGU5ZmQ1NWIuLjMyNmEyNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi1kdmIuaD4KIApAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1ZGUgImN4ODgtcmVnLmgiCiAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNkZWZpbmUgQ1g4OF9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwwLDUpCiAKICNpZm5kZWYgVFJVRQpAQCAtNjIsNyArNjIsNyBAQAogLyogbmVlZCAic2hhZG93IiByZWdpc3RlcnMgZm9yIHNvbWUgd3JpdGUtb25seSBvbmVzIC4uLiAqLwogI2RlZmluZSBTSEFET1dfQVVEX1ZPTF9DVEwgICAgICAgICAgIDEKICNkZWZpbmUgU0hBRE9XX0FVRF9CQUxfQ1RMICAgICAgICAgICAyCi0jZGVmaW5lIFNIQURPV19NQVggICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTSEFET1dfTUFYICAgICAgICAgICAgICAgICAgIDMKIAogLyogRk0gUmFkaW8gZGVlbXBoYXNpcyB0eXBlICovCiBlbnVtIGN4ODhfZGVlbXBoX3R5cGUgewpAQCAtMTg3LDYgKzE4Nyw4IEBACiAjZGVmaW5lIENYODhfQk9BUkRfRE5UVl9MSVZFX0RWQl9UX1BSTyAgICAgNDIKICNkZWZpbmUgQ1g4OF9CT0FSRF9LV09STERfRFZCX1RfQ1gyMjcwMiAgICA0MwogI2RlZmluZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTCA0NAorI2RlZmluZSBDWDg4X0JPQVJEX0tXT1JMRF9IQVJEV0FSRV9NUEVHX1RWX1hQRVJUIDQ1CisjZGVmaW5lIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9IWUJSSUQgNDYKIAogZW51bSBjeDg4X2l0eXBlIHsKIAlDWDg4X1ZNVVhfQ09NUE9TSVRFMSA9IDEsCkBAIC0zMDgsOCArMzEwLDcgQEAKIAkvKiBJUiByZW1vdGUgY29udHJvbCBzdGF0ZSAqLwogCXN0cnVjdCBjeDg4X0lSICAgICAgICAgICAgICppcjsKIAotCXN0cnVjdCBzZW1hcGhvcmUgICAgICAgICAgIGxvY2s7Ci0KKwlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICBsb2NrOwogCS8qIHZhcmlvdXMgdjRsIGNvbnRyb2xzICovCiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgZnJlcTsKIApAQCAtNDgzLDcgKzQ4NCw3IEBACiBjeDg4X3Jpc2Nfc3RvcHBlcihzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAogCQkgIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwogZXh0ZXJuIHZvaWQKLWN4ODhfZnJlZV9idWZmZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGN4ODhfYnVmZmVyICpidWYpOworY3g4OF9mcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmKTsKIAogZXh0ZXJuIHZvaWQgY3g4OF9yaXNjX2Rpc2FzbShzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLAogCQkJICAgICBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjKTsKQEAgLTU3NSw4ICs1NzYsOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4ODgtbXBlZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLWludCBjeDg4MDJfYnVmX3ByZXBhcmUoc3RydWN0IGN4ODgwMl9kZXYgKmRldiwgc3RydWN0IGN4ODhfYnVmZmVyICpidWYsCi0JCQllbnVtIHY0bDJfZmllbGQgZmllbGQpOworaW50IGN4ODgwMl9idWZfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsc3RydWN0IGN4ODgwMl9kZXYgKmRldiwKKwkJCXN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmLCBlbnVtIHY0bDJfZmllbGQgZmllbGQpOwogdm9pZCBjeDg4MDJfYnVmX3F1ZXVlKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYsIHN0cnVjdCBjeDg4X2J1ZmZlciAqYnVmKTsKIHZvaWQgY3g4ODAyX2NhbmNlbF9idWZmZXJzKHN0cnVjdCBjeDg4MDJfZGV2ICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9kYWJmaXJtd2FyZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJmaXJtd2FyZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9kYWJmaXJtd2FyZS5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2RhYmZpcm13YXJlLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwppbmRleCAxOGQ4ZWFmLi5iOWJhOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJkYWJ1c2IuaCIKICNpbmNsdWRlICJkYWJmaXJtd2FyZS5oIgpAQCAtODUsNyArODYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmZGVmIERFQlVHIAorI2lmZGVmIERFQlVHCiBzdGF0aWMgdm9pZCBkdW1wX3VyYiAoc3RydWN0IHVyYiAqdXJiKQogewogCWRiZygidXJiICAgICAgICAgICAgICAgICAgIDolcCIsIHVyYik7CkBAIC0xMzUsNyArMTM2LDcgQEAKIAlmb3IgKHAgPSBxLT5uZXh0OyBwICE9IHE7KSB7CiAJCWIgPSBsaXN0X2VudHJ5IChwLCBidWZmX3QsIGJ1ZmZfbGlzdCk7CiAKLSNpZmRlZiBERUJVRyAKKyNpZmRlZiBERUJVRwogCQlkdW1wX3VyYihiLT5wdXJiKTsKICNlbmRpZgogCQlrZnJlZShiLT5wdXJiLT50cmFuc2Zlcl9idWZmZXIpOwpAQCAtMjE3LDEyICsyMTgsMTEgQEAKIAkJIHBpcGVzaXplLCBwYWNrZXRzLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKIAogCXdoaWxlIChidWZmZXJzIDwgKHMtPnRvdGFsX2J1ZmZlcl9zaXplIDw8IDEwKSkgewotCQliID0gKHBidWZmX3QpIGttYWxsb2MgKHNpemVvZiAoYnVmZl90KSwgR0ZQX0tFUk5FTCk7CisJCWIgPSAocGJ1ZmZfdCkga3phbGxvYyAoc2l6ZW9mIChidWZmX3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFiKSB7Ci0JCQllcnIoImttYWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMIik7CisJCQllcnIoImt6YWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMIik7CiAJCQlnb3RvIGVycjsKIAkJfQotCQltZW1zZXQgKGIsIDAsIHNpemVvZiAoYnVmZl90KSk7CiAJCWItPnMgPSBzOwogCQliLT5wdXJiID0gdXNiX2FsbG9jX3VyYihwYWNrZXRzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFiLT5wdXJiKSB7CkBAIC0yODcsNyArMjg3LDcgQEAKIAkJfQogCiAJfQotCQorCiAJaWYoIHJldCA9PSAtRVBJUEUgKSB7CiAJCXdhcm4oIkNMRUFSX0ZFQVRVUkUgcmVxdWVzdCB0byByZW1vdmUgU1RBTEwgY29uZGl0aW9uLiIpOwogCQlpZih1c2JfY2xlYXJfaGFsdChzLT51c2JkZXYsIHVzYl9waXBlZW5kcG9pbnQocGlwZSkpKQpAQCAtMzI4LDcgKzMyOCw3IEBACiAJUElOVEVMX0hFWF9SRUNPUkQgcHRyID0gZmlybXdhcmU7CiAKIAlkYmcoIkVudGVyIGRhYnVzYl9sb2FkbWVtIChpbnRlcm5hbCkiKTsKLQkKKwogCXJldCA9IGRhYnVzYl84MDUxX3Jlc2V0IChzLCAxKTsKIAl3aGlsZSAocHRyLT5UeXBlID09IDApIHsKIApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJaWYgKCFsaXN0X2VtcHR5ICgmcy0+ZnJlZV9idWZmX2xpc3QpKSB7CiAJCXBidWZmX3QgZW5kOwogCQlpbnQgcmV0OwotCQkKKwogCXdoaWxlICghZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPnJlY19idWZmX2xpc3QsICZzLT5mcmVlX2J1ZmZfbGlzdCkpIHsKIAogCQkJZGJnKCJzdWJtaXR0aW5nOiBlbmQ6JXAgcy0+cmVjX2J1ZmZfbGlzdDolcCIsIHMtPnJlY19idWZmX2xpc3QucHJldiwgJnMtPnJlY19idWZmX2xpc3QpOwpAQCAtNTA2LDcgKzUwNiw3IEBACiAJCQllcnIoImVycm9yOiByZWNfYnVmX2xpc3QgaXMgZW1wdHkiKTsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCQorCiAJCWIgPSBsaXN0X2VudHJ5IChzLT5yZWNfYnVmZl9saXN0Lm5leHQsIGJ1ZmZfdCwgYnVmZl9saXN0KTsKIAkJcHVyYiA9IGItPnB1cmI7CiAKQEAgLTU3MSw3ICs1NzEsNyBAQAogCQkJcy0+cmVhZHB0ciA9IDA7CiAJCX0KIAl9Ci0gICAgICBlcnI6CQkJLy91cCgmcy0+bXV0ZXgpOworICAgICAgZXJyOgkJCS8vbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTg2LDEwICs1ODYsMTAgQEAKIAlzID0gJmRhYnVzYltkZXZudW0gLSBEQUJVU0JfTUlOT1JdOwogCiAJZGJnKCJkYWJ1c2Jfb3BlbiIpOwotCWRvd24gKCZzLT5tdXRleCk7CisJbXV0ZXhfbG9jaygmcy0+bXV0ZXgpOwogCiAJd2hpbGUgKCFzLT51c2JkZXYgfHwgcy0+b3BlbmVkKSB7Ci0JCXVwICgmcy0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJnMtPm11dGV4KTsKIAogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC01OTksMTUgKzU5OSwxNSBAQAogCQlpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSB7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQotCQlkb3duICgmcy0+bXV0ZXgpOworCQltdXRleF9sb2NrKCZzLT5tdXRleCk7CiAJfQogCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAxKSA8IDApIHsKLQkJdXAoJnMtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAJCWVycigic2V0X2ludGVyZmFjZSBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXMtPm9wZW5lZCA9IDE7Ci0JdXAgKCZzLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAKIAlmaWxlLT5mX3BvcyA9IDA7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKQEAgLTYyMSwxMCArNjIxLDEwIEBACiAKIAlkYmcoImRhYnVzYl9yZWxlYXNlIik7CiAKLQlkb3duICgmcy0+bXV0ZXgpOworCW11dGV4X2xvY2soJnMtPm11dGV4KTsKIAlkYWJ1c2Jfc3RvcCAocyk7CiAJZGFidXNiX2ZyZWVfYnVmZmVycyAocyk7Ci0JdXAgKCZzLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAKIAlpZiAoIXMtPnJlbW92ZV9wZW5kaW5nKSB7CiAJCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAwKSA8IDApCkBAIC02NDksMTAgKzY0OSwxMCBAQAogCWlmIChzLT5yZW1vdmVfcGVuZGluZykKIAkJcmV0dXJuIC1FSU87CiAKLQlkb3duICgmcy0+bXV0ZXgpOworCW11dGV4X2xvY2soJnMtPm11dGV4KTsKIAogCWlmICghcy0+dXNiZGV2KSB7Ci0JCXVwICgmcy0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJnMtPm11dGV4KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC02OTIsNyArNjkyLDcgQEAKIAkJcmV0ID0gLUVOT0lPQ1RMQ01EOwogCQlicmVhazsKIAl9Ci0JdXAgKCZzLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzM4LDcgKzczOCw3IEBACiAKIAlzID0gJmRhYnVzYltpbnRmLT5taW5vcl07CiAKLQlkb3duICgmcy0+bXV0ZXgpOworCW11dGV4X2xvY2soJnMtPm11dGV4KTsKIAlzLT5yZW1vdmVfcGVuZGluZyA9IDA7CiAJcy0+dXNiZGV2ID0gdXNiZGV2OwogCXMtPmRldm51bSA9IGludGYtPm1pbm9yOwpAQCAtNzYxLDcgKzc2MSw3IEBACiAJfQogCWRiZygiYm91bmQgdG8gaW50ZXJmYWNlOiAlZCIsIGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CiAJdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgcyk7Ci0JdXAgKCZzLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZkYWJ1c2JfY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKQEAgLTc3Miw3ICs3NzIsNyBAQAogCXJldHVybiAwOwogCiAgICAgICByZWplY3Q6Ci0JdXAgKCZzLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAJcy0+dXNiZGV2ID0gTlVMTDsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTc4Myw5ICs3ODMsOSBAQAogCXBkYWJ1c2JfdCBzID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CiAKIAlkYmcoImRhYnVzYl9kaXNjb25uZWN0Iik7Ci0JCisKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmX193YWl0LCBjdXJyZW50KTsKLQkKKwogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOwogCWlmIChzKSB7CiAJCXVzYl9kZXJlZ2lzdGVyX2RldiAoaW50ZiwgJmRhYnVzYl9jbGFzcyk7CkBAIC03OTcsNyArNzk3LDcgQEAKIAkJCXNjaGVkdWxlKCk7CiAJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+cmVtb3ZlX29rLCAmX193YWl0KTsKLQkJCisKIAkJcy0+dXNiZGV2ID0gTlVMTDsKIAkJcy0+b3ZlcnJ1bnMgPSAwOwogCX0KQEAgLTgyOSw3ICs4MjksNyBAQAogCWZvciAodSA9IDA7IHUgPCBOUkRBQlVTQjsgdSsrKSB7CiAJCXBkYWJ1c2JfdCBzID0gJmRhYnVzYlt1XTsKIAkJbWVtc2V0IChzLCAwLCBzaXplb2YgKGRhYnVzYl90KSk7Ci0JCWluaXRfTVVURVggKCZzLT5tdXRleCk7CisJCW11dGV4X2luaXQgKCZzLT5tdXRleCk7CiAJCXMtPnVzYmRldiA9IE5VTEw7CiAJCXMtPnRvdGFsX2J1ZmZlcl9zaXplID0gYnVmZmVyczsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCAoJnMtPndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5oCmluZGV4IDEwYjY2NmUuLjAwZWIzNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmgKQEAgLTEwLDcgKzEwLDcgQEAKICNkZWZpbmUgREFCVVNCX1ZFUlNJT04gMHgxMDAwCiAjZGVmaW5lIElPQ1RMX0RBQl9CVUxLICAgICAgICAgICAgICBfSU9XUignZCcsIDB4MzAsIGJ1bGtfdHJhbnNmZXJfdCkKICNkZWZpbmUgSU9DVExfREFCX09WRVJSVU5TCSAgICBfSU9SKCdkJywgIDB4MTUsIGludCkKLSNkZWZpbmUgSU9DVExfREFCX1ZFUlNJT04gICAgICAgICAgIF9JT1IoJ2QnLCAweDNmLCBpbnQpIAorI2RlZmluZSBJT0NUTF9EQUJfVkVSU0lPTiAgICAgICAgICAgX0lPUignZCcsIDB4M2YsIGludCkKIAogI2lmZGVmIF9fS0VSTkVMX18KIApAQCAtMTgsNyArMTgsNyBAQAogCiB0eXBlZGVmIHN0cnVjdAogewotCXN0cnVjdCBzZW1hcGhvcmUgbXV0ZXg7CisJc3RydWN0IG11dGV4IG11dGV4OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCByZW1vdmVfb2s7CkBAIC0zNiw3ICszNiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCByZWNfYnVmZl9saXN0OwogfSBkYWJ1c2JfdCwqcGRhYnVzYl90OwogCi10eXBlZGVmIHN0cnVjdCAKK3R5cGVkZWYgc3RydWN0CiB7CiAJcGRhYnVzYl90IHM7CiAJc3RydWN0IHVyYiAqcHVyYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZHBjNzE0Ni5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kcGM3MTQ2LmMKaW5kZXggMjgzMWJkZC4uMGZjYzkzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9kcGM3MTQ2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kcGM3MTQ2LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIGRwYzcxNDYuYyAtIHY0bDIgZHJpdmVyIGZvciB0aGUgZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkCi0gICAgCisKICAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMyBNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTUyLDcgKzUyLDcgQEAKICNkZWZpbmUgU0FBNzExWF9ERUNPREVEX0JZVEVTX09GX1RTXzIgICAweDFDCiAjZGVmaW5lIFNBQTcxMVhfU1RBVFVTX0JZVEUgICAgICAgICAgICAgMHgxRgogCi0jZGVmaW5lIERQQ19CT0FSRF9DQU5fRE9fVkJJKGRldikgICAoZGV2LT5yZXZpc2lvbiAhPSAwKSAKKyNkZWZpbmUgRFBDX0JPQVJEX0NBTl9ET19WQkkoZGV2KSAgIChkZXYtPnJldmlzaW9uICE9IDApCiAKIHN0YXRpYyBpbnQgZGVidWcgPSAwOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwpAQCAtODEsMTYgKzgxLDE2IEBACiAJc3RydWN0IHZpZGVvX2RldmljZQkqdmlkZW9fZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZiaV9kZXY7CiAKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIJaTJjX2FkYXB0ZXI7CQorCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcHRlcjsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqc2FhNzExMWE7Ci0JCisKIAlpbnQgY3VyX2lucHV0OwkvKiBjdXJyZW50IGlucHV0ICovCiB9OwogCiAvKiBmaXhtZTogYWRkIHZiaSBzdHVmZiBoZXJlICovCiBzdGF0aWMgaW50IGRwY19wcm9iZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldikKIHsKLQlzdHJ1Y3QgZHBjKiBkcGMgPSBOVUxMOwkKKwlzdHJ1Y3QgZHBjKiBkcGMgPSBOVUxMOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKIApAQCAtMTE4LDIwICsxMTgsMjAgQEAKIAkvKiBsb29wIHRocm91Z2ggYWxsIGkyYy1kZXZpY2VzIG9uIHRoZSBidXMgYW5kIGxvb2sgd2hvIGlzIHRoZXJlICovCiAJbGlzdF9mb3JfZWFjaChpdGVtLCZkcGMtPmkyY19hZGFwdGVyLmNsaWVudHMpIHsKIAkJY2xpZW50ID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3QgaTJjX2NsaWVudCwgbGlzdCk7Ci0JCWlmKCBJMkNfU0FBNzExMUEgPT0gY2xpZW50LT5hZGRyICkgCisJCWlmKCBJMkNfU0FBNzExMUEgPT0gY2xpZW50LT5hZGRyICkKIAkJCWRwYy0+c2FhNzExMWEgPSBjbGllbnQ7CiAJfQogCiAJLyogY2hlY2sgaWYgYWxsIGRldmljZXMgYXJlIHByZXNlbnQgKi8KIAlpZiggMCA9PSBkcGMtPnNhYTcxMTFhICkgewotCQlERUJfRCgoImRwY192NGwyLm86IGRwY19hdHRhY2ggZmFpbGVkIGZvciB0aGlzIGRldmljZS5cbiIpKTsJCisJCURFQl9EKCgiZHBjX3Y0bDIubzogZHBjX2F0dGFjaCBmYWlsZWQgZm9yIHRoaXMgZGV2aWNlLlxuIikpOwogCQlpMmNfZGVsX2FkYXB0ZXIoJmRwYy0+aTJjX2FkYXB0ZXIpOwogCQlrZnJlZShkcGMpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JCi0JLyogYWxsIGRldmljZXMgYXJlIHByZXNlbnQsIHByb2JlIHdhcyBzdWNjZXNzZnVsICovCQotCURFQl9EKCgiZHBjX3Y0bDIubzogZHBjX3Byb2JlIHN1Y2NlZWRlZCBmb3IgdGhpcyBkZXZpY2UuXG4iKSk7CQorCisJLyogYWxsIGRldmljZXMgYXJlIHByZXNlbnQsIHByb2JlIHdhcyBzdWNjZXNzZnVsICovCisJREVCX0QoKCJkcGNfdjRsMi5vOiBkcGNfcHJvYmUgc3VjY2VlZGVkIGZvciB0aGlzIGRldmljZS5cbiIpKTsKIAogCS8qIHdlIHN0b3JlIHRoZSBwb2ludGVyIGluIG91ciBwcml2YXRlIGRhdGEgZmllbGQgKi8KIAlkZXYtPmV4dF9wcml2ID0gZHBjOwpAQCAtMTgyLDcgKzE4Miw3IEBACiBzdGF0aWMgaW50IGRwY19hdHRhY2goc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKIHsKIAlzdHJ1Y3QgZHBjKiBkcGMgPSAoc3RydWN0IGRwYyopZGV2LT5leHRfcHJpdjsKLQkKKwogCURFQl9EKCgiZHBjX3Y0bDIubzogZHBjX2F0dGFjaCBjYWxsZWQuXG4iKSk7CiAKIAkvKiBjaGVja2luZyBmb3IgaTJjLWRldmljZXMgY2FuIGJlIG9taXR0ZWQgaGVyZSwgYmVjYXVzZSB3ZQpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCUVSUigoImNhbm5vdCByZWdpc3RlciBjYXB0dXJlIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKKwogCS8qIGluaXRpYWxpemF0aW9uIHN0dWZmICh2YmkpIChvbmx5IGZvciByZXZpc2lvbiA+IDAgYW5kIGZvciBleHRlbnNpb25zIHdoaWNoIHdhbnQgaXQpKi8KIAlpZiggMCAhPSBEUENfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpKSB7CiAJCWlmKCAwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZkcGMtPnZiaV9kZXYsIGRldiwgImRwYyIsIFZGTF9UWVBFX1ZCSSkpIHsKQEAgLTIwNSwxOCArMjA1LDE4IEBACiAKIAlwcmludGsoImRwYzogZm91bmQgJ2RwYzcxNDYgZGVtb25zdHJhdGlvbiBib2FyZCctJWQuXG4iLGRwY19udW0pOwogCWRwY19udW0rKzsKLQkKKwogCS8qIHRoZSByZXN0ICovCiAJZHBjLT5jdXJfaW5wdXQgPSAwOwogCWRwY19pbml0X2RvbmUoZGV2KTsKLQkKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRwY19kZXRhY2goc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpCiB7CiAJc3RydWN0IGRwYyogZHBjID0gKHN0cnVjdCBkcGMqKWRldi0+ZXh0X3ByaXY7Ci0JCisKIAlERUJfRUUoKCJkZXY6JXBcbiIsZGV2KSk7CiAKIAlpMmNfcmVsZWFzZV9jbGllbnQoZHBjLT5zYWE3MTExYSk7CkBAIC0yMzgsMjUgKzIzOCwyNSBAQAogaW50IGRwY192YmlfYnlwYXNzKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KQogewogCXN0cnVjdCBkcGMqIGRwYyA9IChzdHJ1Y3QgZHBjKilkZXYtPmV4dF9wcml2OwotCQorCiAJaW50IGkgPSAxOwogCiAJLyogc3dpdGNoIGJ5cGFzcyBpbiBzYWE3MTExYSAqLwogCWlmICggMCAhPSBkcGMtPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQoZHBjLT5zYWE3MTExYSxTQUE3MTFYX1ZCSV9CWVBBU1MsICZpKSkgewogCQlwcmludGsoImRwY192NGwyLm86IFZCSV9CWVBBU1M6IGNvdWxkIG5vdCBhZGRyZXNzIHNhYTcxMTFhLlxuIik7CiAJCXJldHVybiAtMTsKLQl9CQkJCisJfQogCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBkcGNfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpIAorc3RhdGljIGludCBkcGNfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBkcGMqIGRwYyA9IChzdHJ1Y3QgZHBjKilkZXYtPmV4dF9wcml2OwogLyoKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7IAorCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKICovCiAJc3dpdGNoKGNtZCkKIAl7CkBAIC0yNjQsMTEgKzI2NCwxMSBAQAogCXsKIAkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7CiAJCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLGktPmluZGV4KSk7Ci0JCQorCiAJCWlmKCBpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gRFBDX0lOUFVUUykgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJCisKIAkJbWVtY3B5KGksICZkcGNfaW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CiAKIAkJREVCX0QoKCJkcGNfdjRsMi5vOiB2NGwyX2lvY3RsOiBWSURJT0NfRU5VTUlOUFVUICVkLlxuIixpLT5pbmRleCkpOwpAQCAtMjg5LDEzICsyODksMTMgQEAKIAkJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBEUENfSU5QVVRTKSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQorCiAJCWRwYy0+Y3VyX2lucHV0ID0gaW5wdXQ7CiAKIAkJLyogZml4bWU6IHN3aXRjaCBpbnB1dCBoZXJlLCBzd2l0Y2ggYXVkaW8sIHRvbyEgKi8KIC8vCQlzYWE3MTQ2X3NldF9ocHNfc291cmNlX2FuZF9zeW5jKGRldiwgaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zb3VyY2UsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc3luYyk7CiAJCXByaW50aygiZHBjX3Y0bDIubzogVklESU9DX1NfSU5QVVQ6IGZpeG1lIHN3aXRjaCBpbnB1dC5cbiIpOwotCQkKKwogCQlyZXR1cm4gMDsKIAl9CiAJZGVmYXVsdDoKQEAgLTMzNCw4ICszMzQsOCBAQAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBleHRlbnNpb247CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgZHBjID0gewotICAgICAgICAuZXh0X3ByaXYgPSAiTXVsdGltZWRpYSBlWHRlbnNpb24gQm9hcmQiLAotICAgICAgICAuZXh0ID0gJmV4dGVuc2lvbiwKKwkuZXh0X3ByaXYgPSAiTXVsdGltZWRpYSBlWHRlbnNpb24gQm9hcmQiLAorCS5leHQgPSAmZXh0ZW5zaW9uLAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV90YmxbXSA9IHsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCS5jYXBhYmlsaXRpZXMJPSBWNEwyX0NBUF9WQklfQ0FQVFVSRSwKIAkuc3RkcwkJPSAmc3RhbmRhcmRbMF0sCiAJLm51bV9zdGRzCT0gc2l6ZW9mKHN0YW5kYXJkKS9zaXplb2Yoc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQpLAotCS5zdGRfY2FsbGJhY2sJPSAmc3RkX2NhbGxiYWNrLCAKKwkuc3RkX2NhbGxiYWNrCT0gJnN0ZF9jYWxsYmFjaywKIAkuaW9jdGxzCQk9ICZpb2N0bHNbMF0sCiAJLmlvY3RsCQk9IGRwY19pb2N0bCwKIH07CkBAIC0zNjUsNyArMzY1LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uID0gewogCS5uYW1lCQk9ICJkcGM3MTQ2IGRlbW9uc3RyYXRpb24gYm9hcmQiLAogCS5mbGFncwkJPSBTQUE3MTQ2X1VTRV9JMkNfSVJRLAotCQorCiAJLnBjaV90YmwJPSAmcGNpX3RibFswXSwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogCkBAIC0zNzUsNyArMzc1LDcgQEAKIAogCS5pcnFfbWFzawk9IDAsCiAJLmlycV9mdW5jCT0gTlVMTCwKLX07CQorfTsKIAogc3RhdGljIGludCBfX2luaXQgZHBjX2luaXRfbW9kdWxlKHZvaWQpCiB7CkBAIC0zODMsNyArMzgzLDcgQEAKIAkJREVCX1MoKCJmYWlsZWQgdG8gcmVnaXN0ZXIgZXh0ZW5zaW9uLlxuIikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kc2JyMTAwLmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvZHNicjEwMC5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2RzYnIxMDAuYwppbmRleCAyNTY0NjgwLi4zYjRlOTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9kc2JyMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kc2JyMTAwLmMKQEAgLTM3LDI4ICszNywyOCBAQAogICBNYXJrdXM6IFVwZGF0ZXMgZm9yIDIuNi54IGtlcm5lbHMsIGNvZGUgbGF5b3V0IGNoYW5nZXMsIG5hbWUgc2FuaXRpemluZwogCiAgVmVyc2lvbiAwLjMwOgotIAlNYXJrdXM6IFVwZGF0ZXMgZm9yIDIuNS54IGtlcm5lbCBhbmQgbW9yZSBJU08gY29tcGxpYW50IHNvdXJjZQorCU1hcmt1czogVXBkYXRlcyBmb3IgMi41Lngga2VybmVsIGFuZCBtb3JlIElTTyBjb21wbGlhbnQgc291cmNlCiAKICBWZXJzaW9uIDAuMjU6Ci0gICAgICAgIFBTTCBhbmQgTWFya3VzOiBDbGVhbnVwLCByYWRpbyBub3cgZG9lc24ndCBzdG9wIG9uIGRldmljZSBjbG9zZQorCVBTTCBhbmQgTWFya3VzOiBDbGVhbnVwLCByYWRpbyBub3cgZG9lc24ndCBzdG9wIG9uIGRldmljZSBjbG9zZQogCiAgVmVyc2lvbiAwLjI0OgotIAlNYXJrdXM6IEhvcGUgSSBnb3QgdGhlc2Ugc2lsbHkgVklERU9fVFVORVJfTE9XIGlzc3VlcyBmaW5hbGx5CisJTWFya3VzOiBIb3BlIEkgZ290IHRoZXNlIHNpbGx5IFZJREVPX1RVTkVSX0xPVyBpc3N1ZXMgZmluYWxseQogCXJpZ2h0LiAgU29tZSBtaW5vciBjbGVhbnVwLCBpbXByb3ZlZCBzdGFuZGFsb25lIGNvbXBpbGF0aW9uCiAKICBWZXJzaW9uIDAuMjM6Ci0gCU1hcmt1czogU2lnbiBleHRlbnNpb24gYnVnIGZpeGVkIGJ5IGRlY2xhcmluZyB0cmFuc2Zlcl9idWZmZXIgdW5zaWduZWQKKwlNYXJrdXM6IFNpZ24gZXh0ZW5zaW9uIGJ1ZyBmaXhlZCBieSBkZWNsYXJpbmcgdHJhbnNmZXJfYnVmZmVyIHVuc2lnbmVkCiAKICBWZXJzaW9uIDAuMjI6Ci0gCU1hcmt1czogU29tZSAoYnJvd24gYmFnKSBjbGVhbnVwIGluIHdoYXQgVklESU9DU1RVTkVSIHJldHVybnMsIAorCU1hcmt1czogU29tZSAoYnJvd24gYmFnKSBjbGVhbnVwIGluIHdoYXQgVklESU9DU1RVTkVSIHJldHVybnMsCiAJdGhhbmtzIHRvIE1pa2UgQ294IGZvciBwb2ludGluZyB0aGUgcHJvYmxlbSBvdXQuCiAKICBWZXJzaW9uIDAuMjE6Ci0gCU1hcmt1czogTWlub3IgY2xlYW51cCwgd2FybmluZ3MgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIGxhbWUgYXR0ZW1wdAorCU1hcmt1czogTWlub3IgY2xlYW51cCwgd2FybmluZ3MgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIGxhbWUgYXR0ZW1wdAogCXRvIGFkaGVyZSB0byBEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCiAKLSBWZXJzaW9uIDAuMjogCi0gCUJyYWQgSGFyZHMgPGJyYWRoQGR5bmFtaXRlLmNvbS5hdT46IEZpeGVzIHRvIG1ha2UgaXQgd29yayBhcyBub24tbW9kdWxlCisgVmVyc2lvbiAwLjI6CisJQnJhZCBIYXJkcyA8YnJhZGhAZHluYW1pdGUuY29tLmF1PjogRml4ZXMgdG8gbWFrZSBpdCB3b3JrIGFzIG5vbi1tb2R1bGUKIAlNYXJrdXM6IENvcHlyaWdodCBjbGFyaWZpY2F0aW9uCiAKICBWZXJzaW9uIDAuMDE6IE1hcmt1czogaW5pdGlhbCByZWxlYXNlCkBAIC0xNjMsMTEgKzE2MywxMSBAQAogc3RhdGljIGludCBkc2JyMTAwX3N0YXJ0KGRzYnIxMDBfZGV2aWNlICpyYWRpbykKIHsKIAlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKLQkJCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCQlVU0JfUkVRX0dFVF9TVEFUVVMsCiAJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKIAkJCTB4MDAsIDB4QzcsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCB8fAogCXVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCi0JCQlEU0IxMDBfT05PRkYsIAorCQkJRFNCMTAwX09OT0ZGLAogCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCiAJCQkweDAxLCAweDAwLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApCiAJCXJldHVybiAtMTsKQEAgLTE3OSwxMSArMTc5LDExIEBACiBzdGF0aWMgaW50IGRzYnIxMDBfc3RvcChkc2JyMTAwX2RldmljZSAqcmFkaW8pCiB7CiAJaWYgKHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCi0JCQlVU0JfUkVRX0dFVF9TVEFUVVMsIAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAogCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCiAJCQkweDE2LCAweDFDLCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDAgfHwKIAl1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAotCQkJRFNCMTAwX09OT0ZGLCAKKwkJCURTQjEwMF9PTk9GRiwKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAogCQkJMHgwMCwgMHgwMCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwKQogCQlyZXR1cm4gLTE7CkBAIC0xOTUsMTYgKzE5NSwxNiBAQAogewogCWZyZXEgPSAoZnJlcS8xNio4MCkvMTAwMCs4NTY7CiAJaWYgKHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCi0JCQlEU0IxMDBfVFVORSwgCisJCQlEU0IxMDBfVFVORSwKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAotCQkJKGZyZXE+PjgpJjB4MDBmZiwgZnJlcSYweGZmLCAKKwkJCShmcmVxPj44KSYweDAwZmYsIGZyZXEmMHhmZiwKIAkJCXJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCB8fAogCSAgIHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCi0JCSAJVVNCX1JFUV9HRVRfU1RBVFVTLCAKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAogCQkJMHg5NiwgMHhCNywgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwIHx8CiAJdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKLQkJCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCQlVU0JfUkVRX0dFVF9TVEFUVVMsCiAJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgIFVTQl9ESVJfSU4sCiAJCQkweDAwLCAweDI0LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApIHsKIAkJcmFkaW8tPnN0ZXJlbyA9IC0xOwpAQCAtMjE5LDcgKzIxOSw3IEBACiBzdGF0aWMgdm9pZCBkc2JyMTAwX2dldHN0YXQoZHNicjEwMF9kZXZpY2UgKnJhZGlvKQogewogCWlmICh1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAotCQlVU0JfUkVRX0dFVF9TVEFUVVMsIAorCQlVU0JfUkVRX0dFVF9TVEFUVVMsCiAJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAogCQkweDAwICwgMHgyNCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwKQogCQlyYWRpby0+c3RlcmVvID0gLTE7CkBAIC0yMzIsNyArMjMyLDcgQEAKIAogLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50IGFuZCByZWdpc3RlciB3aXRoIHY0bCBhbmQKIHVzYiBpZiBpdCBpcyAqLwotc3RhdGljIGludCB1c2JfZHNicjEwMF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgCitzdGF0aWMgaW50IHVzYl9kc2JyMTAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlkc2JyMTAwX2RldmljZSAqcmFkaW87CkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJa2ZyZWUocmFkaW8pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtY3B5KHJhZGlvLT52aWRlb2RldiwgJmRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGUsIAorCW1lbWNweShyYWRpby0+dmlkZW9kZXYsICZkc2JyMTAwX3ZpZGVvZGV2X3RlbXBsYXRlLAogCQlzaXplb2YoZHNicjEwMF92aWRlb2Rldl90ZW1wbGF0ZSkpOwogCXJhZGlvLT5yZW1vdmVkID0gMDsKIAlyYWRpby0+dXNlcnMgPSAwOwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7CiAKIAkJCWRzYnIxMDBfZ2V0c3RhdChyYWRpbyk7Ci0JCQlpZih2LT50dW5lcikJLyogT25seSAxIHR1bmVyICovIAorCQkJaWYodi0+dHVuZXIpCS8qIE9ubHkgMSB0dW5lciAqLwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJdi0+cmFuZ2Vsb3cgPSBGUkVRX01JTipGUkVRX01VTDsKIAkJCXYtPnJhbmdlaGlnaCA9IEZSRVFfTUFYKkZSRVFfTVVMOwpAQCAtMzU1LDEyICszNTUsMTIgQEAKIAkJCXYtPnZvbHVtZSA9IDE7CiAJCQl2LT5zdGVwID0gMTsKIAkJCXN0cmNweSh2LT5uYW1lLCAiUmFkaW8iKTsKLQkJCXJldHVybiAwOwkJCQorCQkJcmV0dXJuIDA7CiAJCX0KIAkJY2FzZSBWSURJT0NTQVVESU86IHsKIAkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKIAotCQkJaWYgKHYtPmF1ZGlvKSAKKwkJCWlmICh2LT5hdWRpbykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmICh2LT5mbGFncyZWSURFT19BVURJT19NVVRFKSB7CiAJCQkJaWYgKGRzYnIxMDBfc3RvcChyYWRpbyk9PS0xKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKaW5kZXggODg1ZmQwMS4uNWE3OTNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogCXNlbGVjdCBWSURFT19UVU5FUgogCXNlbGVjdCBWSURFT19UVkVFUFJPTQogCXNlbGVjdCBWSURFT19JUgorCXNlbGVjdCBWSURFT19TQUE3MTFYCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgRW1waWEgMjh4eCBiYXNlZCBUViBjYXJkcy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCA1OGY3YjQxLi5mNjJmZDcwNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jCkBAIC0yOCwxMCArMjgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorI2luY2x1ZGUgPG1lZGlhL21zcDM0MDAuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgorI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSAibXNwMzQwMC5oIgogCiAjaW5jbHVkZSAiZW0yOHh4LmgiCiAKQEAgLTcyLDYgKzcyLDI0IEBACiAJCQkuYW11eCAgICAgPSAxLAogCQl9fSwKIAl9LAorCVtFTTI4MjBfQk9BUkRfS1dPUkxEX1BWUlRWMjgwMFJGXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJLd29ybGQgUFZSIFRWIDI4MDAgUkYiLAorCQkuaXNfZW0yODAwICAgID0gMCwKKwkJLnZjaGFubmVscyAgICA9IDIsCisJCS5ub3JtICAgICAgICAgPSBWSURFT19NT0RFX1BBTCwKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmhhc190dW5lciAgICA9IDEsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExMywKKwkJLmlucHV0ICAgICAgICAgICA9IHt7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gMCwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX0seworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gOSwKKwkJCS5hbXV4ICAgICA9IDEsCisJCX19LAorCX0sCiAJW0VNMjgyMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzI1MF0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCIiwKIAkJLnZjaGFubmVscyAgICA9IDMsCkBAIC04Myw3ICsxMDEsNyBAQAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IDIsCi0JCQkuYW11eCAgICAgPSAwLAorCQkJLmFtdXggICAgID0gMSwKIAkJfSx7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gMCwKQEAgLTEyOSwxMSArMTQ3LDEyIEBACiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gMCwKLQkJCS5hbXV4ICAgICA9IDYsCisJCQkuYW11eCAgICAgPSBNU1BfSU5QVVRfREVGQVVMVCwKIAkJfSx7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSAyLAotCQkJLmFtdXggICAgID0gMSwKKwkJCS5hbXV4ICAgICA9IE1TUF9JTlBVVChNU1BfSU5fU0NBUlRfMSwgTVNQX0lOX1RVTkVSXzEsCisJCQkJCU1TUF9EU1BfT1VUX1NDQVJULCBNU1BfRFNQX09VVF9TQ0FSVCksCiAJCX19LAogCX0sCiAJW0VNMjgyMF9CT0FSRF9NU0lfVk9YX1VTQl8yXSA9IHsKQEAgLTI1NywyNyArMjc2LDUxIEBACiAJeyB9LAogfTsKIAordm9pZCBlbTI4eHhfcHJlX2NhcmRfc2V0dXAoc3RydWN0IGVtMjh4eCAqZGV2KQoreworCS8qIHJlcXVlc3Qgc29tZSBtb2R1bGVzICovCisJc3dpdGNoKGRldi0+bW9kZWwpeworCQljYXNlIEVNMjg4MF9CT0FSRF9URVJSQVRFQ19QUk9ESUdZX1hTOgorCQljYXNlIEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMDoKKwkJY2FzZSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTOgorCQkJeworCQkJCWVtMjh4eF93cml0ZV9yZWdzX3JlcShkZXYsIDB4MDAsIDB4MDgsICJceDdkIiwgMSk7IC8vIHJlc2V0IHRocm91Z2ggR1BJTz8KKwkJCQlicmVhazsKKwkJCX0KKwl9Cit9CisKIHZvaWQgZW0yOHh4X2NhcmRfc2V0dXAoc3RydWN0IGVtMjh4eCAqZGV2KQogewogCS8qIHJlcXVlc3Qgc29tZSBtb2R1bGVzICovCi0JaWYgKGRldi0+bW9kZWwgPT0gRU0yODIwX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9VU0JfMikgewotCQlzdHJ1Y3QgdHZlZXByb20gdHY7CisJc3dpdGNoKGRldi0+bW9kZWwpeworCQljYXNlIEVNMjgyMF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfVVNCXzI6CisJCQl7CisJCQkJc3RydWN0IHR2ZWVwcm9tIHR2OwogI2lmZGVmIENPTkZJR19NT0RVTEVTCi0JCXJlcXVlc3RfbW9kdWxlKCJ0dmVlcHJvbSIpOwotCQlyZXF1ZXN0X21vZHVsZSgiaXIta2JkLWkyYyIpOwotCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOworCQkJCXJlcXVlc3RfbW9kdWxlKCJ0dmVlcHJvbSIpOworCQkJCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7CisJCQkJcmVxdWVzdF9tb2R1bGUoIm1zcDM0MDAiKTsKICNlbmRpZgotCQkvKiBDYWxsIGZpcnN0IFRWZWVwcm9tICovCisJCQkJLyogQ2FsbCBmaXJzdCBUVmVlcHJvbSAqLwogCi0JCWRldi0+aTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOwotCQl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZkZXYtPmkyY19jbGllbnQsICZ0diwgZGV2LT5lZWRhdGEpOworCQkJCWRldi0+aTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOworCQkJCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmRldi0+aTJjX2NsaWVudCwgJnR2LCBkZXYtPmVlZGF0YSk7CiAKLQkJZGV2LT50dW5lcl90eXBlPSB0di50dW5lcl90eXBlOwotCQlpZiAodHYuYXVkaW9fcHJvY2Vzc29yID09IEFVRElPX0NISVBfTVNQMzRYWCkgewotCQkJZGV2LT5pMnNfc3BlZWQ9MjA0ODAwMDsKLQkJCWRldi0+aGFzX21zcDM0eHg9MTsKLQkJfSBlbHNlCi0JCQlkZXYtPmhhc19tc3AzNHh4PTA7CisJCQkJZGV2LT50dW5lcl90eXBlPSB0di50dW5lcl90eXBlOworCQkJCWlmICh0di5hdWRpb19wcm9jZXNzb3IgPT0gQVVESU9fQ0hJUF9NU1AzNFhYKSB7CisJCQkJCWRldi0+aTJzX3NwZWVkPTIwNDgwMDA7CisJCQkJCWRldi0+aGFzX21zcDM0eHg9MTsKKwkJCQl9IGVsc2UKKwkJCQkJZGV2LT5oYXNfbXNwMzR4eD0wOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIEVNMjgyMF9CT0FSRF9LV09STERfUFZSVFYyODAwUkY6CisJCQl7CisJCQkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwweDAwLDB4MDgsICJceGY5IiwgMSk7IC8vIEdQSU8gZW5hYmxlcyBzb3VuZCBvbiBLV09STEQgUFZSIFRWIDI4MDBSRgorCQkJCWJyZWFrOworCQkJfQorCiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKaW5kZXggNmNhODYzMS4uNWI2Y2VjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwpAQCAtNDIwLDcgKzQyMCw2IEBACiAJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfUkFESU87CiAJCXR1bl9zZXR1cC50eXBlID0gZGV2LT50dW5lcl90eXBlOwogCQl0dW5fc2V0dXAuYWRkciA9IGRldi0+dHVuZXJfYWRkcjsKLQogCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwppbmRleCAzMGRmYTUzLi4zMWU4OWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwpAQCAtNDMsOTEgKzQzLDYgQEAKICNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikJaWYgKGlyX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgaXItPmMubmFtZSAsICMjIGFyZykKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW1fdGVycmF0ZWNbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHgwMSBdID0gS0VZX0NIQU5ORUwsCi0JWyAweDAyIF0gPSBLRVlfU0VMRUNULAotCVsgMHgwMyBdID0gS0VZX01VVEUsCi0JWyAweDA0IF0gPSBLRVlfUE9XRVIsCi0JWyAweDA1IF0gPSBLRVlfS1AxLAotCVsgMHgwNiBdID0gS0VZX0tQMiwKLQlbIDB4MDcgXSA9IEtFWV9LUDMsCi0JWyAweDA4IF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgwOSBdID0gS0VZX0tQNCwKLQlbIDB4MGEgXSA9IEtFWV9LUDUsCi0JWyAweDBiIF0gPSBLRVlfS1A2LAotCVsgMHgwYyBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgMHgwZCBdID0gS0VZX0tQNywKLQlbIDB4MGUgXSA9IEtFWV9LUDgsCi0JWyAweDBmIF0gPSBLRVlfS1A5LAotCVsgMHgxMCBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMHgxMSBdID0gS0VZX0tQMCwKLQlbIDB4MTIgXSA9IEtFWV9NRU5VLAotCVsgMHgxMyBdID0gS0VZX1BSSU5ULAotCVsgMHgxNCBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDE2IF0gPSBLRVlfUEFVU0UsCi0JWyAweDE4IF0gPSBLRVlfUkVDT1JELAotCVsgMHgxOSBdID0gS0VZX1JFV0lORCwKLQlbIDB4MWEgXSA9IEtFWV9QTEFZLAotCVsgMHgxYiBdID0gS0VZX0ZPUldBUkQsCi0JWyAweDFjIF0gPSBLRVlfQkFDS1NQQUNFLAotCVsgMHgxZSBdID0gS0VZX1NUT1AsCi0JWyAweDQwIF0gPSBLRVlfWk9PTSwKLX07Ci0KLXN0YXRpYyBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbV9waW5uYWNsZV91c2JbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMHgzYSBdID0gS0VZX0tQMCwKLQlbIDB4MzEgXSA9IEtFWV9LUDEsCi0JWyAweDMyIF0gPSBLRVlfS1AyLAotCVsgMHgzMyBdID0gS0VZX0tQMywKLQlbIDB4MzQgXSA9IEtFWV9LUDQsCi0JWyAweDM1IF0gPSBLRVlfS1A1LAotCVsgMHgzNiBdID0gS0VZX0tQNiwKLQlbIDB4MzcgXSA9IEtFWV9LUDcsCi0JWyAweDM4IF0gPSBLRVlfS1A4LAotCVsgMHgzOSBdID0gS0VZX0tQOSwKLQotCVsgMHgyZiBdID0gS0VZX1BPV0VSLAotCi0JWyAweDJlIF0gPSBLRVlfUCwKLQlbIDB4MWYgXSA9IEtFWV9MLAotCVsgMHgyYiBdID0gS0VZX0ksCi0KLQlbIDB4MmQgXSA9IEtFWV9aT09NLAotCVsgMHgxZSBdID0gS0VZX1pPT00sCi0JWyAweDFiIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDBmIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTcgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDFjIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDI1IF0gPSBLRVlfSU5GTywKLQotCVsgMHgzYyBdID0gS0VZX01VVEUsCi0KLQlbIDB4M2QgXSA9IEtFWV9MRUZULAotCVsgMHgzYiBdID0gS0VZX1JJR0hULAotCi0JWyAweDNmIF0gPSBLRVlfVVAsCi0JWyAweDNlIF0gPSBLRVlfRE9XTiwKLQlbIDB4MWEgXSA9IEtFWV9QQVVTRSwKLQotCVsgMHgxZCBdID0gS0VZX01FTlUsCi0JWyAweDE5IF0gPSBLRVlfUExBWSwKLQlbIDB4MTYgXSA9IEtFWV9SRVdJTkQsCi0JWyAweDEzIF0gPSBLRVlfRk9SV0FSRCwKLQlbIDB4MTUgXSA9IEtFWV9QQVVTRSwKLQlbIDB4MGUgXSA9IEtFWV9SRVdJTkQsCi0JWyAweDBkIF0gPSBLRVlfUExBWSwKLQlbIDB4MGIgXSA9IEtFWV9TVE9QLAotCVsgMHgwNyBdID0gS0VZX0ZPUldBUkQsCi0JWyAweDI3IF0gPSBLRVlfUkVDT1JELAotCVsgMHgyNiBdID0gS0VZX1RVTkVSLAotCVsgMHgyOSBdID0gS0VZX1RFWFQsCi0JWyAweDJhIF0gPSBLRVlfTUVESUEsCi0JWyAweDE4IF0gPSBLRVlfRVBHLAotCVsgMHgyNyBdID0gS0VZX1JFQ09SRCwKLX07Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgZ2V0X2tleV90ZXJyYXRlYyhzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA5NGExNGEyLi5kZmJhMzNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiZW0yOHh4LmgiCiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL21zcDM0MDAuaD4KIAogI2RlZmluZSBEUklWRVJfQVVUSE9SICJMdWRvdmljbyBDYXZlZG9uIDxjYXZlZG9uQHNzc3VwLml0PiwgIiBcCiAJCSAgICAgICJNYXJrdXMgUmVjaGJlcmdlciA8bXJlY2hiZXJnZXJAZ21haWwuY29tPiwgIiBcCkBAIC01OSw4ICs2MSwxNCBAQAogc3RhdGljIExJU1RfSEVBRChlbTI4eHhfZGV2bGlzdCk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZFtdICAgICA9IHtbMCAuLi4gKEVNMjhYWF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9Oworc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19ucltdID0ge1swIC4uLiAoRU0yOFhYX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CitzdGF0aWMgdW5zaWduZWQgaW50IHZiaV9ucltdID0ge1swIC4uLiAoRU0yOFhYX01BWEJPQVJEUyAtIDEpXSA9IFVOU0VUIH07CiBtb2R1bGVfcGFyYW1fYXJyYXkoY2FyZCwgIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodmJpX25yLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhjYXJkLCJjYXJkIHR5cGUiKTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsInZpZGVvIGRldmljZSBudW1iZXJzIik7CitNT0RVTEVfUEFSTV9ERVNDKHZiaV9uciwidmJpIGRldmljZSBudW1iZXJzIik7CiAKIHN0YXRpYyBpbnQgdHVuZXIgPSAtMTsKIG1vZHVsZV9wYXJhbSh0dW5lciwgaW50LCAwNDQ0KTsKQEAgLTcwLDYgKzc4LDkgQEAKIG1vZHVsZV9wYXJhbSh2aWRlb19kZWJ1ZyxpbnQsMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW3ZpZGVvXSIpOwogCisvKiBCaXRtYXNrIG1hcmtpbmcgYWxsb2NhdGVkIGRldmljZXMgZnJvbSAwIHRvIEVNMjhYWF9NQVhCT0FSRFMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVtMjh4eF9kZXZ1c2VkOworCiAvKiBzdXBwb3J0ZWQgdHYgbm9ybXMgKi8KIHN0YXRpYyBzdHJ1Y3QgZW0yOHh4X3R2bm9ybSB0dm5vcm1zW10gPSB7CiAJewpAQCAtOTEsMjMgKzEwMiw2IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNF9pMmNfaW5pdFtdID0gewotCTB4MDAsMHgwMCwweDAxLDB4MDgsMHgwMiwweGM0LDB4MDMsMHgzMCwweDA0LDB4OTAsMHgwNSwweDkwLDB4MDYsMHhlYiwweDA3LDB4ZTAsCi0JMHgwOCwweDg4LDB4MDksMHg0MCwweDBhLDB4ODAsMHgwYiwweDQ0LDB4MGMsMHg0MCwweDBkLDB4MDAsMHgwZSwweDgxLDB4MGYsMHgyYSwKLQkweDEwLDB4MDYsMHgxMSwweDAwLDB4MTIsMHhjOCwweDEzLDB4ODAsMHgxNCwweDAwLDB4MTUsMHgxMSwweDE2LDB4MDEsMHgxNywweDQyLAotCTB4MTgsMHg0MCwweDE5LDB4ODAsMHg0MCwweDAwLDB4NDEsMHhmZiwweDQyLDB4ZmYsMHg0MywweGZmLDB4NDQsMHhmZiwweDQ1LDB4ZmYsCi0JMHg0NiwweGZmLDB4NDcsMHhmZiwweDQ4LDB4ZmYsMHg0OSwweGZmLDB4NGEsMHhmZiwweDRiLDB4ZmYsMHg0YywweGZmLDB4NGQsMHhmZiwKLQkweDRlLDB4ZmYsMHg0ZiwweGZmLDB4NTAsMHhmZiwweDUxLDB4ZmYsMHg1MiwweGZmLDB4NTMsMHhmZiwweDU0LDB4NWYsMHg1NSwweGZmLAotCTB4NTYsMHhmZiwweDU3LDB4ZmYsMHg1OCwweDAwLDB4NTksMHg0NywweDVhLDB4MDMsMHg1YiwweDAzLDB4NWQsMHgzZSwweDVlLDB4MDAsCi0JMHg4MCwweDFjLDB4ODMsMHgwMSwweDg0LDB4YTUsMHg4NSwweDEwLDB4ODYsMHg0NSwweDg3LDB4NDEsMHg4OCwweGYwLDB4ODgsMHgwMCwKLQkweDg4LDB4ZjAsMHg5MCwweDAwLDB4OTEsMHgwOCwweDkyLDB4MDAsMHg5MywweDgwLDB4OTQsMHgwOCwweDk1LDB4MDAsMHg5NiwweGMwLAotCTB4OTcsMHgwMiwweDk4LDB4MTMsMHg5OSwweDAwLDB4OWEsMHgzOCwweDliLDB4MDEsMHg5YywweDgwLDB4OWQsMHgwMiwweDllLDB4MDYsCi0JMHg5ZiwweDAxLDB4YTAsMHgwMSwweGExLDB4MDAsMHhhMiwweDAwLDB4YTQsMHg4MCwweGE1LDB4MzYsMHhhNiwweDM2LDB4YTgsMHg2NywKLQkweGE5LDB4MDQsMHhhYSwweDAwLDB4YWMsMHgzMywweGFkLDB4MDIsMHhhZSwweDAwLDB4YjAsMHhjZCwweGIxLDB4MDQsMHhiMiwweGNkLAotCTB4YjMsMHgwNCwweGI0LDB4MDEsMHhiOCwweDAwLDB4YjksMHgwMCwweGJhLDB4MDAsMHhiYiwweDAwLDB4YmMsMHgwMCwweGJkLDB4MDAsCi0JMHhiZSwweDAwLDB4YmYsMHgwMAotfTsKLQogI2RlZmluZSBUVk5PUk1TIEFSUkFZX1NJWkUodHZub3JtcykKIAogLyogc3VwcG9ydGVkIGNvbnRyb2xzICovCkBAIC0xMzQsNjUgKzEyOCw2IEBACiAJfQogfTsKIAotLyogRklYTUU6IFRoZXNlIGFyZSBzcGVjaWZpYyB0byBzYWE3MTF4IC0gc2hvdWxkIGJlIG1vdmVkIHRvIGl0cyBjb2RlICovCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHNhYTcxMXhfcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCi0JCS5taW5pbXVtID0gLTEyOCwKLQkJLm1heGltdW0gPSAxMjcsCi0JCS5zdGVwID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkuZmxhZ3MgPSAwLAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSA9ICJDb250cmFzdCIsCi0JCS5taW5pbXVtID0gMHgwLAotCQkubWF4aW11bSA9IDB4MWYsCi0JCS5zdGVwID0gMHgxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCi0JCS5mbGFncyA9IDAsCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiU2F0dXJhdGlvbiIsCi0JCS5taW5pbXVtID0gMHgwLAotCQkubWF4aW11bSA9IDB4MWYsCi0JCS5zdGVwID0gMHgxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4MTAsCi0JCS5mbGFncyA9IDAsCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lID0gIlJlZCBjaHJvbWEgYmFsYW5jZSIsCi0JCS5taW5pbXVtID0gLTEyOCwKLQkJLm1heGltdW0gPSAxMjcsCi0JCS5zdGVwID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkuZmxhZ3MgPSAwLAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiQmx1ZSBjaHJvbWEgYmFsYW5jZSIsCi0JCS5taW5pbXVtID0gLTEyOCwKLQkJLm1heGltdW0gPSAxMjcsCi0JCS5zdGVwID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkuZmxhZ3MgPSAwLAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9HQU1NQSwKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSA9ICJHYW1tYSIsCi0JCS5taW5pbXVtID0gMHgwLAotCQkubWF4aW11bSA9IDB4M2YsCi0JCS5zdGVwID0gMHgxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4MjAsCi0JCS5mbGFncyA9IDAsCi0JfQotfTsKLQogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtMjh4eF91c2JfZHJpdmVyOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGVtMjh4eF9zeXNmc19sb2NrKTsKQEAgLTIxMSw2ICsxNDYsMTEgQEAKIAllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LCAweDAwLCAweDA2LCAiXHg0MCIsIDEpOwogCiAJLyogZW5hYmxlIHZiaSBjYXB0dXJpbmcgKi8KKworLyoJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwweDAwLDB4MGUsIlx4QzAiLDEpOyBhdWRpbyByZWdpc3RlciAqLworLyoJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwweDAwLDB4MGYsIlx4ODAiLDEpOyBjbGsgcmVnaXN0ZXIgKi8KKwllbTI4eHhfd3JpdGVfcmVnc19yZXEoZGV2LDB4MDAsMHgxMSwiXHg1MSIsMSk7CisKIAllbTI4eHhfYXVkaW9fdXNiX211dGUoZGV2LCAxKTsKIAlkZXYtPm11dGUgPSAxOwkJLyogbWF5YmUgbm90IHRoZSByaWdodCBwbGFjZS4uLiAqLwogCWRldi0+dm9sdW1lID0gMHgxZjsKQEAgLTIzMCwyMiArMTcwLDkgQEAKIHN0YXRpYyB2b2lkIGVtMjh4eF9jb25maWdfaTJjKHN0cnVjdCBlbTI4eHggKmRldikKIHsKIAlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZjsKLQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IGVtMjh4eF92ZGkgPSB7LmRhdGEgPSBOVUxMIH07Ci0KLQotCS8qIGNvbmZpZ3VyZSBkZWNvZGVyICovCi0JaWYoZGV2LT5tb2RlbCA9PSBFTTI4MjBfQk9BUkRfTVNJX1ZPWF9VU0JfMil7Ci0JCWVtMjh4eF92ZGkuZGF0YT1zYWE3MTE0X2kyY19pbml0OwotCQllbTI4eHhfdmRpLmxlbj1zaXplb2Yoc2FhNzExNF9pMmNfaW5pdCk7Ci0JfQotCi0KLQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfSU5JVCwgJmVtMjh4eF92ZGkpOwotCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9TRVRfSU5QVVQsICZkZXYtPmN0bF9pbnB1dCk7Ci0vKgllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsREVDT0RFUl9TRVRfUElDVFVSRSwgJmRldi0+dnBpYyk7ICovCi0vKgllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsREVDT0RFUl9TRVRfTk9STSwmZGV2LT50dm5vcm0tPmlkKTsgKi8KLS8qCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixERUNPREVSX0VOQUJMRV9PVVRQVVQsJm91dHB1dCk7ICovCi0vKgllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsREVDT0RFUl9EVU1QLCBOVUxMKTsgKi8KKwllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfUkVTRVQsIE5VTEwpOworCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfSU5QVVQsICZkZXYtPmN0bF9pbnB1dCk7CisJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU1RSRUFNT04sIE5VTEwpOwogCiAJLyogY29uZmlndXJlIHR1bmVyICovCiAJZi50dW5lciA9IDA7CkBAIC0yODUsMjQgKzIxMiwyOCBAQAogCWRldi0+Y3RsX2lucHV0ID0gaW5kZXg7CiAJZGV2LT5jdGxfYWlucHV0ID0gSU5QVVQoaW5kZXgpLT5hbXV4OwogCi0JZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBERUNPREVSX1NFVF9JTlBVVCwgJmlucHV0KTsKLQorCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfSU5QVVQsICZpbnB1dCk7CiAKIAllbTI4eHhfdmlkZW9kYmcoIlNldHRpbmcgaW5wdXQgaW5kZXg9JWQsIHZtdXg9JWQsIGFtdXg9JWRcbiIsaW5kZXgsaW5wdXQsZGV2LT5jdGxfYWlucHV0KTsKIAogCWlmIChkZXYtPmhhc19tc3AzNHh4KSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisKIAkJaWYgKGRldi0+aTJzX3NwZWVkKQogCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRLCAmZGV2LT5pMnNfc3BlZWQpOwotCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0FVRElPLCAmZGV2LT5jdGxfYWlucHV0KTsKKwkJcm91dGUuaW5wdXQgPSBkZXYtPmN0bF9haW5wdXQ7CisJCXJvdXRlLm91dHB1dCA9IE1TUF9PVVRQVVQoTVNQX09VVF9TQ0FSVDFfREEpOworCQkvKiBOb3RlOiB0aGlzIGlzIG1zcDM0MDAgc3BlY2lmaWMgKi8KKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKIAkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKIAkJZW0yOHh4X2F1ZGlvX3NvdXJjZShkZXYsIGFpbnB1dCk7CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChkZXYtPmN0bF9haW5wdXQpIHsKLQkJY2FzZSAwOgotCQkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19UVU5FUjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYWlucHV0ID0gRU0yOFhYX0FVRElPX1NSQ19MSU5FOworCQkJY2FzZSAwOgorCQkJCWFpbnB1dCA9IEVNMjhYWF9BVURJT19TUkNfVFVORVI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWFpbnB1dCA9IEVNMjhYWF9BVURJT19TUkNfTElORTsKIAkJfQogCQllbTI4eHhfYXVkaW9fc291cmNlKGRldiwgYWlucHV0KTsKIAl9CkBAIC0zMjMsMTMgKzI1NCwyMCBAQAogCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZW0yOHh4LCBkZXZsaXN0KTsKIAkJaWYgKGgtPnZkZXYtPm1pbm9yID09IG1pbm9yKSB7CiAJCQlkZXYgID0gaDsKKwkJCWRldi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorCQlpZiAoaC0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiAgPSBoOworCQkJZGV2LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKIAkJfQogCX0KKwlpZiAoTlVMTCA9PSBkZXYpCisJCXJldHVybiAtRU5PREVWOwogCiAJZmlscC0+cHJpdmF0ZV9kYXRhPWRldjsKIAotCi0JZW0yOHh4X3ZpZGVvZGJnKCJ1c2Vycz0lZFxuIiwgZGV2LT51c2Vycyk7CisJZW0yOHh4X3ZpZGVvZGJnKCJvcGVuIG1pbm9yPSVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsCisJCQkJbWlub3IsdjRsMl90eXBlX25hbWVzW2Rldi0+dHlwZV0sZGV2LT51c2Vycyk7CiAKIAlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZlbTI4eHhfZGlzY29ubmVjdCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CkBAIC0zNDAsMzcgKzI3OCwzNiBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotLyoJaWYoZGV2LT52YmlfZGV2LT5taW5vciA9PSBtaW5vcil7Ci0JCWRldi0+dHlwZT1WNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCX0qLwotCWlmIChkZXYtPnZkZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCWRldi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQl9Ci0KLQlpbml0X01VVEVYKCZkZXYtPmZpbGVvcF9sb2NrKTsJLyogdG8gMSA9PSBhdmFpbGFibGUgKi8KKwltdXRleF9pbml0KCZkZXYtPmZpbGVvcF9sb2NrKTsJLyogdG8gMSA9PSBhdmFpbGFibGUgKi8KIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfZnJhbWUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdF9zdHJlYW0pOwogCi0JZG93bigmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0JZW0yOHh4X3NldF9hbHRlcm5hdGUoZGV2KTsKKwlpZiAoZGV2LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQllbTI4eHhfc2V0X2FsdGVybmF0ZShkZXYpOwogCi0JZGV2LT53aWR0aCA9IG5vcm1fbWF4dyhkZXYpOwotCWRldi0+aGVpZ2h0ID0gbm9ybV9tYXhoKGRldik7Ci0JZGV2LT5mcmFtZV9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0ICogMjsKLQlkZXYtPmZpZWxkX3NpemUgPSBkZXYtPmZyYW1lX3NpemUgPj4gMTsJLypib3RoX2ZpbGVkcyA/IGRldi0+ZnJhbWVfc2l6ZT4+MSA6IGRldi0+ZnJhbWVfc2l6ZTsgKi8KLQlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOwotCWRldi0+aHNjYWxlID0gMDsKLQlkZXYtPnZzY2FsZSA9IDA7CisJCWRldi0+d2lkdGggPSBub3JtX21heHcoZGV2KTsKKwkJZGV2LT5oZWlnaHQgPSBub3JtX21heGgoZGV2KTsKKwkJZGV2LT5mcmFtZV9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0ICogMjsKKwkJZGV2LT5maWVsZF9zaXplID0gZGV2LT5mcmFtZV9zaXplID4+IDE7CS8qYm90aF9maWxlZHMgPyBkZXYtPmZyYW1lX3NpemU+PjEgOiBkZXYtPmZyYW1lX3NpemU7ICovCisJCWRldi0+Ynl0ZXNwZXJsaW5lID0gZGV2LT53aWR0aCAqIDI7CisJCWRldi0+aHNjYWxlID0gMDsKKwkJZGV2LT52c2NhbGUgPSAwOwogCi0JZW0yOHh4X2NhcHR1cmVfc3RhcnQoZGV2LCAxKTsKLQllbTI4eHhfcmVzb2x1dGlvbl9zZXQoZGV2KTsKKwkJZW0yOHh4X2NhcHR1cmVfc3RhcnQoZGV2LCAxKTsKKwkJZW0yOHh4X3Jlc29sdXRpb25fc2V0KGRldik7CiAKLQkvKiBzdGFydCB0aGUgdHJhbnNmZXIgKi8KLQllcnJDb2RlID0gZW0yOHh4X2luaXRfaXNvYyhkZXYpOwotCWlmIChlcnJDb2RlKQotCQlnb3RvIGVycjsKKwkJLyogZGV2aWNlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBpc29jIHRyYW5zZmVyICovCisJCXZpZGVvX211eChkZXYsIDApOworCisJCS8qIHN0YXJ0IHRoZSB0cmFuc2ZlciAqLworCQllcnJDb2RlID0gZW0yOHh4X2luaXRfaXNvYyhkZXYpOworCQlpZiAoZXJyQ29kZSkKKwkJCWdvdG8gZXJyOworCisJfQogCiAJZGV2LT51c2VycysrOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGRldjsKQEAgLTM4MywxMCArMzIwLDggQEAKIAogCWRldi0+c3RhdGUgfD0gREVWX0lOSVRJQUxJWkVEOwogCi0JdmlkZW9fbXV4KGRldiwgMCk7Ci0KLSAgICAgIGVycjoKLQl1cCgmZGV2LT5sb2NrKTsKK2VycjoKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJdXBfcmVhZCgmZW0yOHh4X2Rpc2Nvbm5lY3QpOwogCXJldHVybiBlcnJDb2RlOwogfQpAQCAtNDAwLDE0ICszMzUsMjEgQEAKIHsKIAltdXRleF9sb2NrKCZlbTI4eHhfc3lzZnNfbG9jayk7CiAKLQllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZFxuIiwKLQkJICAgIGRldi0+dmRldi0+bWlub3IpOworCS8qRklYTUU6IEkyQyBJUiBzaG91bGQgYmUgZGlzY29ubmVjdGVkICovCisKKwllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2VzIC9kZXYvdmlkZW8lZCBhbmQgL2Rldi92YmklZCBkZXJlZ2lzdGVyZWRcbiIsCisJCQkJZGV2LT52ZGV2LT5taW5vci1NSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTiwKKwkJCQlkZXYtPnZiaV9kZXYtPm1pbm9yLU1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU4pOwogCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmRldik7Ci0vKgl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYpOyAqLworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2Rldik7CiAJZW0yOHh4X2kyY191bnJlZ2lzdGVyKGRldik7CiAJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKIAltdXRleF91bmxvY2soJmVtMjh4eF9zeXNmc19sb2NrKTsKKworCisJLyogTWFyayBkZXZpY2UgYXMgdW51c2VkICovCisJZW0yOHh4X2RldnVzZWQmPX4oMTw8ZGV2LT5kZXZubyk7CiB9CiAKIC8qCkBAIC00MjEsNyArMzYzLDcgQEAKIAogCWVtMjh4eF92aWRlb2RiZygidXNlcnM9JWRcbiIsIGRldi0+dXNlcnMpOwogCi0JZG93bigmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCiAJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CiAKQEAgLTQzMCw3ICszNzIsNyBAQAogCS8qIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBkaXNjb25uZWN0LCBmcmVlIHRoZSByZW1haW5pbmcgcmVzb3VyY2VzICovCiAJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CiAJCWVtMjh4eF9yZWxlYXNlX3Jlc291cmNlcyhkZXYpOwotCQl1cCgmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC00NDYsNyArMzg4LDcgQEAKIAogCWRldi0+dXNlcnMtLTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmRldi0+b3BlbiwgMSk7Ci0JdXAoJmRldi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC00NjMsMzIgKzQwNSw1NCBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBlbTI4eHggKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+ZmlsZW9wX2xvY2spKQorCWlmIChkZXYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCWVtMjh4eF92aWRlb2RiZygiVjRsMl9CdWZfdHlwZV92aWRlb2NhcHR1cmUgaXMgc2V0XG4iKTsKKwl9CisJaWYgKGRldi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCWVtMjh4eF92aWRlb2RiZygiVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSBpcyBzZXRcbiIpOworCQllbTI4eHhfdmlkZW9kYmcoIm5vdCBzdXBwb3J0ZWQgeWV0ISAuLi5cbiIpOworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgIiIsIDEpKSB7CisJCQltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJcmV0dXJuICgxKTsKKwl9CisJaWYgKGRldi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkgeworCQllbTI4eHhfdmlkZW9kYmcoIlY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFIGlzIHNldFxuIik7CisJCWVtMjh4eF92aWRlb2RiZygibm90IHN1cHBvcnRlZCB5ZXQhIC4uLlxuIik7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAiIiwgMSkpIHsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5maWxlb3BfbG9jayk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlyZXR1cm4gKDEpOworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+ZmlsZW9wX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CiAJCWVtMjh4eF92aWRlb2RiZygiZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoZGV2LT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CiAJCWVtMjh4eF92aWRlb2RiZygiZGV2aWNlIG1pc2NvbmZpZ3VyZWQ7IGNsb3NlIGFuZCBvcGVuIGl0IGFnYWluXG4iKTsKLQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoZGV2LT5pbyA9PSBJT19NTUFQKSB7CiAJCWVtMjh4eF92aWRlb2RiZyAoIklPIG1ldGhvZCBpcyBzZXQgdG8gbW1hcDsgY2xvc2UgYW5kIG9wZW4iCiAJCQkJIiB0aGUgZGV2aWNlIGFnYWluIHRvIGNob29zZSB0aGUgcmVhZCBtZXRob2RcbiIpOwotCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5maWxlb3BfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChkZXYtPmlvID09IElPX05PTkUpIHsKIAkJaWYgKCFlbTI4eHhfcmVxdWVzdF9idWZmZXJzKGRldiwgRU0yOFhYX05VTV9SRUFEX0ZSQU1FUykpIHsKIAkJCWVtMjh4eF9lcnJkZXYoInJlYWQgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeVxuIik7Ci0JCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCQltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZGV2LT5pbyA9IElPX1JFQUQ7CkBAIC00OTcsMTMgKzQ2MSwxMyBAQAogCX0KIAogCWlmICghY291bnQpIHsKLQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAobGlzdF9lbXB0eSgmZGV2LT5vdXRxdWV1ZSkpIHsKIAkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCQltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCkBAIC01MTEsMTEgKzQ3NSwxMSBAQAogCQkgICAgICghbGlzdF9lbXB0eSgmZGV2LT5vdXRxdWV1ZSkpIHx8CiAJCSAgICAgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSk7CiAJCWlmIChyZXQpIHsKLQkJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5maWxlb3BfbG9jayk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewotCQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmZpbGVvcF9sb2NrKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtNTM0LDEyICs0OTgsMTIgQEAKIAkJY291bnQgPSBmLT5idWYubGVuZ3RoOwogCiAJaWYgKGNvcHlfdG9fdXNlcihidWYsIGYtPmJ1Zm1lbSwgY291bnQpKSB7Ci0JCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmZpbGVvcF9sb2NrKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCSpmX3BvcyArPSBjb3VudDsKIAotCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNTUzLDcgKzUxNyw3IEBACiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCXN0cnVjdCBlbTI4eHggKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+ZmlsZW9wX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+ZmlsZW9wX2xvY2spKQogCQlyZXR1cm4gUE9MTEVSUjsKIAogCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewpAQCAtNTc5LDEzICs1NDMsMTMgQEAKIAkJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5vdXRxdWV1ZSkpCiAJCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCi0JCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCQltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCiAJCQlyZXR1cm4gbWFzazsKIAkJfQogCX0KIAotCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCXJldHVybiBQT0xMRVJSOwogfQogCkBAIC02MjUsMjUgKzU4OSwyNSBAQAogCiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5maWxlb3BfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5maWxlb3BfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKIAkJZW0yOHh4X3ZpZGVvZGJnKCJtbWFwOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5maWxlb3BfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChkZXYtPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKIAkJZW0yOHh4X3ZpZGVvZGJnICgibW1hcDogRGV2aWNlIGlzIG1pc2NvbmZpZ3VyZWQ7IGNsb3NlIGFuZCAiCiAJCQkJCQkib3BlbiBpdCBhZ2FpblxuIik7Ci0JCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmZpbGVvcF9sb2NrKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKGRldi0+aW8gIT0gSU9fTU1BUCB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgfHwKIAkgICAgc2l6ZSAhPSBQQUdFX0FMSUdOKGRldi0+ZnJhbWVbMF0uYnVmLmxlbmd0aCkpIHsKLQkJdXAoJmRldi0+ZmlsZW9wX2xvY2spOworCQltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTY1Myw3ICs2MTcsNyBAQAogCX0KIAlpZiAoaSA9PSBkZXYtPm51bV9mcmFtZXMpIHsKIAkJZW0yOHh4X3ZpZGVvZGJnKCJtbWFwOiB1c2VyIHN1cHBsaWVkIG1hcHBpbmcgYWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2VcbiIpOwotCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5maWxlb3BfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjY1LDcgKzYyOSw3IEBACiAJd2hpbGUgKHNpemUgPiAwKSB7CS8qIHNpemUgaXMgcGFnZS1hbGlnbmVkICovCiAJCWlmICh2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCB2bWFsbG9jX3RvX3BhZ2UocG9zKSkpIHsKIAkJCWVtMjh4eF92aWRlb2RiZygibW1hcDogdm1faW5zZXJ0X3BhZ2UgZmFpbGVkXG4iKTsKLQkJCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5maWxlb3BfbG9jayk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQlzdGFydCArPSBQQUdFX1NJWkU7CkBAIC02NzcsNyArNjQxLDcgQEAKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICZkZXYtPmZyYW1lW2ldOwogCiAJZW0yOHh4X3ZtX29wZW4odm1hKTsKLQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmZpbGVvcF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjk5LDQzICs2NjMsNiBAQAogCX0KIH0KIAotLypGSVhNRTogc2hvdWxkIGJlIG1vdmVkIHRvIHNhYTcxMXggKi8KLXN0YXRpYyBpbnQgc2FhNzExeF9nZXRfY3RybChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0JczMyIHRtcDsKLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQlpZiAoKHRtcCA9IGVtMjh4eF9icmlnaHRuZXNzX2dldChkZXYpKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgPSAoczMyKSAoKHM4KSB0bXApOwkvKiBGSVhNRTogY2xlbmFlciB3YXkgdG8gZXh0ZW5kIHNpZ24/ICovCi0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCWlmICgoY3RybC0+dmFsdWUgPSBlbTI4eHhfY29udHJhc3RfZ2V0KGRldikpIDwgMCkKLQkJCXJldHVybiAtRUlPOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCWlmICgoY3RybC0+dmFsdWUgPSBlbTI4eHhfc2F0dXJhdGlvbl9nZXQoZGV2KSkgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6Ci0JCWlmICgodG1wID0gZW0yOHh4X3ZfYmFsYW5jZV9nZXQoZGV2KSkgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCWN0cmwtPnZhbHVlID0gKHMzMikgKChzOCkgdG1wKTsJLyogRklYTUU6IGNsZW5hZXIgd2F5IHRvIGV4dGVuZCBzaWduPyAqLwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKLQkJaWYgKCh0bXAgPSBlbTI4eHhfdV9iYWxhbmNlX2dldChkZXYpKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgPSAoczMyKSAoKHM4KSB0bXApOwkvKiBGSVhNRTogY2xlbmFlciB3YXkgdG8gZXh0ZW5kIHNpZ24/ICovCi0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfR0FNTUE6Ci0JCWlmICgoY3RybC0+dmFsdWUgPSBlbTI4eHhfZ2FtbWFfZ2V0KGRldikpIDwgMCkKLQkJCXJldHVybiAtRUlPOwotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KIC8qCiAgKiBlbTI4eHhfc2V0X2N0cmwoKQogICogbXV0ZSBvciBzZXQgbmV3IHNhdHVyYXRpb24sIGJyaWdodG5lc3Mgb3IgY29udHJhc3QKQEAgLTc1OCwyNyArNjg1LDYgQEAKIAl9CiB9CiAKLS8qRklYTUU6IHNob3VsZCBiZSBtb3ZlZCB0byBzYWE3MTF4ICovCi1zdGF0aWMgaW50IHNhYTcxMXhfc2V0X2N0cmwoc3RydWN0IGVtMjh4eCAqZGV2LCBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCXJldHVybiBlbTI4eHhfYnJpZ2h0bmVzc19zZXQoZGV2LCBjdHJsLT52YWx1ZSk7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcmV0dXJuIGVtMjh4eF9jb250cmFzdF9zZXQoZGV2LCBjdHJsLT52YWx1ZSk7Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQlyZXR1cm4gZW0yOHh4X3NhdHVyYXRpb25fc2V0KGRldiwgY3RybC0+dmFsdWUpOwotCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6Ci0JCXJldHVybiBlbTI4eHhfdl9iYWxhbmNlX3NldChkZXYsIGN0cmwtPnZhbHVlKTsKLQljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKLQkJcmV0dXJuIGVtMjh4eF91X2JhbGFuY2Vfc2V0KGRldiwgY3RybC0+dmFsdWUpOwotCWNhc2UgVjRMMl9DSURfR0FNTUE6Ci0JCXJldHVybiBlbTI4eHhfZ2FtbWFfc2V0KGRldiwgY3RybC0+dmFsdWUpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQogLyoKICAqIGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KCkKICAqIHN0b3BzIHN0cmVhbWluZwpAQCAtNzk5LDcgKzcwNSw4IEBACiAJZWxzZSBpZiAocmV0KSB7CiAJCWRldi0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCWVtMjh4eF92aWRlb2RiZygiZGV2aWNlIGlzIG1pc2NvbmZpZ3VyZWQ7IGNsb3NlIGFuZCAiCi0JCQkib3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW5cbiIsIGRldi0+dmRldi0+bWlub3IpOworCQkJIm9wZW4gL2Rldi92aWRlbyVkIGFnYWluXG4iLAorCQkJCWRldi0+dmRldi0+bWlub3ItTUlOT1JfVkZMX1RZUEVfR1JBQkJFUl9NSU4pOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtODUwLDYgKzc1NywxODEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBlbTI4eHhfZ2V0X2ZtdChzdHJ1Y3QgZW0yOHh4ICpkZXYsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQoreworCWVtMjh4eF92aWRlb2RiZygiVklESU9DX0dfRk1UOiB0eXBlPSVzXG4iLAorCQkoZm9ybWF0LT50eXBlID09VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSA/CisJCSJWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUiIDoKKwkJKGZvcm1hdC0+dHlwZSA9PVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpID8KKwkJIlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUiIDoKKwkJKGZvcm1hdC0+dHlwZSA9PVY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkgPworCQkiVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUgIiA6CisJCSJub3Qgc3VwcG9ydGVkIik7CisKKwlzd2l0Y2ggKGZvcm1hdC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCXsKKwkJZm9ybWF0LT5mbXQucGl4LndpZHRoID0gZGV2LT53aWR0aDsKKwkJZm9ybWF0LT5mbXQucGl4LmhlaWdodCA9IGRldi0+aGVpZ2h0OworCQlmb3JtYXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJZm9ybWF0LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGRldi0+Ynl0ZXNwZXJsaW5lOworCQlmb3JtYXQtPmZtdC5waXguc2l6ZWltYWdlID0gZGV2LT5mcmFtZV9zaXplOworCQlmb3JtYXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJCWZvcm1hdC0+Zm10LnBpeC5maWVsZCA9IGRldi0+aW50ZXJsYWNlZCA/IFY0TDJfRklFTERfSU5URVJMQUNFRCA6IFY0TDJfRklFTERfVE9QOwkvKiBGSVhNRTogVE9QPyBOT05FPyBCT1RUT00/IEFMVEVOQVRFPyAqLworCisJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX0dfRk1UOiAlZHglZFxuIiwgZGV2LT53aWR0aCwKKwkJCWRldi0+aGVpZ2h0KTsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKKwl7CisJCWZvcm1hdC0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldD0wOworCisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixWSURJT0NfR19GTVQsZm9ybWF0KTsKKworCQlpZiAoZm9ybWF0LT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0PT0wKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgZW0yOHh4X3NldF9mbXQoc3RydWN0IGVtMjh4eCAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKK3sKKwl1MzIgaTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgd2lkdGggPSBmb3JtYXQtPmZtdC5waXgud2lkdGg7CisJaW50IGhlaWdodCA9IGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQ7CisJdW5zaWduZWQgaW50IGhzY2FsZSwgdnNjYWxlOworCXVuc2lnbmVkIGludCBtYXhoLCBtYXh3OworCisJbWF4dyA9IG5vcm1fbWF4dyhkZXYpOworCW1heGggPSBub3JtX21heGgoZGV2KTsKKworCWVtMjh4eF92aWRlb2RiZygiJXM6IHR5cGU9JXNcbiIsCisJCQljbWQgPT0gVklESU9DX1RSWV9GTVQgPworCQkJIlZJRElPQ19UUllfRk1UIiA6ICJWSURJT0NfU19GTVQiLAorCQkJZm9ybWF0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSA/CisJCQkiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIiA6CisJCQlmb3JtYXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSA/CisJCQkiVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSAiIDoKKwkJCSJub3Qgc3VwcG9ydGVkIik7CisKKwlpZiAoZm9ybWF0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKSB7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixWSURJT0NfR19GTVQsZm9ybWF0KTsKKworCQlpZiAoZm9ybWF0LT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0PT0wKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmV0dXJuIDA7CisJfQorCisKKwlpZiAoZm9ybWF0LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllbTI4eHhfdmlkZW9kYmcoIiVzOiByZXF1ZXN0ZWQgJWR4JWRcbiIsCisJCWNtZCA9PSBWSURJT0NfVFJZX0ZNVCA/CisJCSJWSURJT0NfVFJZX0ZNVCIgOiAiVklESU9DX1NfRk1UIiwKKwkJZm9ybWF0LT5mbXQucGl4LndpZHRoLCBmb3JtYXQtPmZtdC5waXguaGVpZ2h0KTsKKworCS8qIEZJWE1FOiBNb3ZlIHNvbWUgY29kZSBhd2F5IGZyb20gaGVyZSAqLworCS8qIHdpZHRoIG11c3QgZXZlbiBiZWNhdXNlIG9mIHRoZSBZVVlWIGZvcm1hdCAqLworCS8qIGhlaWdodCBtdXN0IGJlIGV2ZW4gYmVjYXVzZSBvZiBpbnRlcmxhY2luZyAqLworCWhlaWdodCAmPSAweGZmZmU7CisJd2lkdGggJj0gMHhmZmZlOworCisJaWYgKGhlaWdodCA8IDMyKQorCQloZWlnaHQgPSAzMjsKKwlpZiAoaGVpZ2h0ID4gbWF4aCkKKwkJaGVpZ2h0ID0gbWF4aDsKKwlpZiAod2lkdGggPCA0OCkKKwkJd2lkdGggPSA0ODsKKwlpZiAod2lkdGggPiBtYXh3KQorCQl3aWR0aCA9IG1heHc7CisKKwlpZihkZXYtPmlzX2VtMjgwMCl7CisJCS8qIHRoZSBlbTI4MDAgY2FuIG9ubHkgc2NhbGUgZG93biB0byA1MCUgKi8KKwkJaWYoaGVpZ2h0ICUgKG1heGggLyAyKSkKKwkJCWhlaWdodD1tYXhoOworCQlpZih3aWR0aCAlIChtYXh3IC8gMikpCisJCQl3aWR0aD1tYXh3OworCQkvKiBhY2NvcmRpbmcgdG8gZW1waWF0ZWNoIHN1cHBvcnQgKi8KKwkJLyogdGhlIE1heFBhY2tldFNpemUgaXMgdG8gc21hbGwgdG8gc3VwcG9ydCAqLworCQkvKiBmcmFtZXNpemVzIGxhcmdlciB0aGFuIDY0MHg0ODAgQCAzMCBmcHMgKi8KKwkJLyogb3IgNjQweDU3NiBAIDI1IGZwcy4gQXMgdGhpcyB3b3VsZCBjdXQgKi8KKwkJLyogb2YgYSBwYXJ0IG9mIHRoZSBpbWFnZSB3ZSBwcmVmZXIgKi8KKwkJLyogMzYweDU3NiBvciAzNjB4NDgwIGZvciBub3cgKi8KKwkJaWYod2lkdGggPT0gbWF4dyAmJiBoZWlnaHQgPT0gbWF4aCkKKwkJCXdpZHRoIC89IDI7CisJfQorCisJaWYgKChoc2NhbGUgPSAoKCh1bnNpZ25lZCBsb25nKW1heHcpIDw8IDEyKSAvIHdpZHRoIC0gNDA5NkwpID49IDB4NDAwMCkKKwkJaHNjYWxlID0gMHgzZmZmOworCisJd2lkdGggPSAoKCh1bnNpZ25lZCBsb25nKW1heHcpIDw8IDEyKSAvIChoc2NhbGUgKyA0MDk2TCk7CisKKwlpZiAoKHZzY2FsZSA9ICgoKHVuc2lnbmVkIGxvbmcpbWF4aCkgPDwgMTIpIC8gaGVpZ2h0IC0gNDA5NkwpID49IDB4NDAwMCkKKwkJdnNjYWxlID0gMHgzZmZmOworCisJaGVpZ2h0ID0gKCgodW5zaWduZWQgbG9uZyltYXhoKSA8PCAxMikgLyAodnNjYWxlICsgNDA5NkwpOworCisJZm9ybWF0LT5mbXQucGl4LndpZHRoID0gd2lkdGg7CisJZm9ybWF0LT5mbXQucGl4LmhlaWdodCA9IGhlaWdodDsKKwlmb3JtYXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwlmb3JtYXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gd2lkdGggKiAyOworCWZvcm1hdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSB3aWR0aCAqIDIgKiBoZWlnaHQ7CisJZm9ybWF0LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCWZvcm1hdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKworCWVtMjh4eF92aWRlb2RiZygiJXM6IHJldHVybmVkICVkeCVkICglZCwgJWQpXG4iLAorCQljbWQgPT0gVklESU9DX1RSWV9GTVQgPworCQkiVklESU9DX1RSWV9GTVQiIDoiVklESU9DX1NfRk1UIiwKKwkJZm9ybWF0LT5mbXQucGl4LndpZHRoLCBmb3JtYXQtPmZtdC5waXguaGVpZ2h0LCBoc2NhbGUsIHZzY2FsZSk7CisKKwlpZiAoY21kID09IFZJRElPQ19UUllfRk1UKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9mcmFtZXM7IGkrKykKKwkJaWYgKGRldi0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgeworCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU19GTVQgZmFpbGVkLiAiCisJCQkJIlVubWFwIHRoZSBidWZmZXJzIGZpcnN0LlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJLyogc3RvcCBpbyBpbiBjYXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKwlpZiAoZGV2LT5zdHJlYW0gPT0gU1RSRUFNX09OKSB7CisJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX1NFVF9GTVQ6IGludGVydXB0aW5nIHN0cmVhbVxuIik7CisJCWlmICgocmV0ID0gZW0yOHh4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2KSkpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWVtMjh4eF9yZWxlYXNlX2J1ZmZlcnMoZGV2KTsKKwlkZXYtPmlvID0gSU9fTk9ORTsKKworCS8qIHNldCBuZXcgaW1hZ2Ugc2l6ZSAqLworCWRldi0+d2lkdGggPSB3aWR0aDsKKwlkZXYtPmhlaWdodCA9IGhlaWdodDsKKwlkZXYtPmZyYW1lX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQgKiAyOworCWRldi0+ZmllbGRfc2l6ZSA9IGRldi0+ZnJhbWVfc2l6ZSA+PiAxOworCWRldi0+Ynl0ZXNwZXJsaW5lID0gZGV2LT53aWR0aCAqIDI7CisJZGV2LT5oc2NhbGUgPSBoc2NhbGU7CisJZGV2LT52c2NhbGUgPSB2c2NhbGU7CisJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CisJZW0yOHh4X3NldF9hbHRlcm5hdGUoZGV2KTsKKwllbTI4eHhfY2FwdHVyZV9zdGFydChkZXYsIDEpOworCWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOworCWVtMjh4eF9pbml0X2lzb2MoZGV2KTsKKworCXJldHVybiAwOworfQorCiAvKgogICogZW0yOHh4X3Y0bDJfZG9faW9jdGwoKQogICogVGhpcyBmdW5jdGlvbiBpcyBfbm90XyBjYWxsZWQgZGlyZWN0bHksIGJ1dCBmcm9tCkBAIC04NjUsMzkyICs5NDcsMzI1IEBACiAJc3dpdGNoIChjbWQpIHsKIAkJLyogLS0tLS0tLS0tLSB0diBub3JtcyAtLS0tLS0tLS0tICovCiAJY2FzZSBWSURJT0NfRU5VTVNURDoKLQkJewotCQkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKmUgPSBhcmc7Ci0JCQl1bnNpZ25lZCBpbnQgaTsKKwl7CisJCXN0cnVjdCB2NGwyX3N0YW5kYXJkICplID0gYXJnOworCQl1bnNpZ25lZCBpbnQgaTsKIAotCQkJaSA9IGUtPmluZGV4OwotCQkJaWYgKGkgPj0gVFZOT1JNUykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXJldCA9IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChlLCB0dm5vcm1zW2UtPmluZGV4XS5pZCwKLQkJCQkJCSAgICAgICB0dm5vcm1zW2UtPmluZGV4XS5uYW1lKTsKLQkJCWUtPmluZGV4ID0gaTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlpID0gZS0+aW5kZXg7CisJCWlmIChpID49IFRWTk9STVMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gdjRsMl92aWRlb19zdGRfY29uc3RydWN0KGUsIHR2bm9ybXNbZS0+aW5kZXhdLmlkLAorCQkJCQkJdHZub3Jtc1tlLT5pbmRleF0ubmFtZSk7CisJCWUtPmluZGV4ID0gaTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKKwl9CiAJY2FzZSBWSURJT0NfR19TVEQ6Ci0JCXsKLQkJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKKwl7CisJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKIAotCQkJKmlkID0gZGV2LT50dm5vcm0tPmlkOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJKmlkID0gZGV2LT50dm5vcm0tPmlkOworCQlyZXR1cm4gMDsKKwl9CiAJY2FzZSBWSURJT0NfU19TVEQ6Ci0JCXsKLQkJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKLQkJCXVuc2lnbmVkIGludCBpOworCXsKKwkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOworCQl1bnNpZ25lZCBpbnQgaTsKIAorCQlmb3IgKGkgPSAwOyBpIDwgVFZOT1JNUzsgaSsrKQorCQkJaWYgKCppZCA9PSB0dm5vcm1zW2ldLmlkKQorCQkJCWJyZWFrOworCQlpZiAoaSA9PSBUVk5PUk1TKQogCQkJZm9yIChpID0gMDsgaSA8IFRWTk9STVM7IGkrKykKLQkJCQlpZiAoKmlkID09IHR2bm9ybXNbaV0uaWQpCisJCQkJaWYgKCppZCAmIHR2bm9ybXNbaV0uaWQpCiAJCQkJCWJyZWFrOwotCQkJaWYgKGkgPT0gVFZOT1JNUykKLQkJCQlmb3IgKGkgPSAwOyBpIDwgVFZOT1JNUzsgaSsrKQotCQkJCQlpZiAoKmlkICYgdHZub3Jtc1tpXS5pZCkKLQkJCQkJCWJyZWFrOwotCQkJaWYgKGkgPT0gVFZOT1JNUykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGkgPT0gVFZOT1JNUykKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCQlkb3duKCZkZXYtPmxvY2spOwotCQkJZGV2LT50dm5vcm0gPSAmdHZub3Jtc1tpXTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJZGV2LT50dm5vcm0gPSAmdHZub3Jtc1tpXTsKIAotCQkJZW0yOHh4X3NldF9ub3JtKGRldiwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQpOworCQllbTI4eHhfc2V0X25vcm0oZGV2LCBkZXYtPndpZHRoLCBkZXYtPmhlaWdodCk7CiAKLS8qCi0JCWRldi0+d2lkdGg9bm9ybV9tYXh3KGRldik7Ci0JCWRldi0+aGVpZ2h0PW5vcm1fbWF4aChkZXYpOwotCQlkZXYtPmZyYW1lX3NpemU9ZGV2LT53aWR0aCpkZXYtPmhlaWdodCoyOwotCQlkZXYtPmZpZWxkX3NpemU9ZGV2LT5mcmFtZV9zaXplPj4xOwotCQlkZXYtPmJ5dGVzcGVybGluZT1kZXYtPndpZHRoKjI7Ci0JCWRldi0+aHNjYWxlPTA7Ci0JCWRldi0+dnNjYWxlPTA7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfU1RELAorCQkJCQkmZGV2LT50dm5vcm0tPmlkKTsKIAotCQllbTI4eHhfcmVzb2x1dGlvbl9zZXQoZGV2KTsKLSovCi0vKgotCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKLQkJZW0yOHh4X3NldF9hbHRlcm5hdGUoZGV2KTsKLQkJZW0yOHh4X2NhcHR1cmVfc3RhcnQoZGV2LCAxKTsKLQkJZW0yOHh4X3Jlc29sdXRpb25fc2V0KGRldik7Ci0JCWVtMjh4eF9pbml0X2lzb2MoZGV2KTsKLSovCi0JCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIERFQ09ERVJfU0VUX05PUk0sCi0JCQkJCQkmdHZub3Jtc1tpXS5tb2RlKTsKLQkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfU1RELAotCQkJCQkJJmRldi0+dHZub3JtLT5pZCk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAotCQkJdXAoJmRldi0+bG9jayk7CisJCXJldHVybiAwOworCX0KIAotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKiAtLS0tLS0gaW5wdXQgc3dpdGNoaW5nIC0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0gaW5wdXQgc3dpdGNoaW5nIC0tLS0tLS0tLS0gKi8KIAljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwotCQkJdW5zaWduZWQgaW50IG47Ci0JCQlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVbXSA9IHsKLQkJCQlbRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMV0gPSAiQ29tcG9zaXRlMSIsCi0JCQkJW0VNMjhYWF9WTVVYX0NPTVBPU0lURTJdID0gIkNvbXBvc2l0ZTIiLAotCQkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUzXSA9ICJDb21wb3NpdGUzIiwKLQkJCQlbRU0yOFhYX1ZNVVhfQ09NUE9TSVRFNF0gPSAiQ29tcG9zaXRlNCIsCi0JCQkJW0VNMjhYWF9WTVVYX1NWSURFT10gPSAiUy1WaWRlbyIsCi0JCQkJW0VNMjhYWF9WTVVYX1RFTEVWSVNJT05dID0gIlRlbGV2aXNpb24iLAotCQkJCVtFTTI4WFhfVk1VWF9DQUJMRV0gPSAiQ2FibGUgVFYiLAotCQkJCVtFTTI4WFhfVk1VWF9EVkJdID0gIkRWQiIsCi0JCQkJW0VNMjhYWF9WTVVYX0RFQlVHXSA9ICJmb3IgZGVidWcgb25seSIsCi0JCQl9OworCXsKKwkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7CisJCXVuc2lnbmVkIGludCBuOworCQlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVbXSA9IHsKKwkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUxXSA9ICJDb21wb3NpdGUxIiwKKwkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUyXSA9ICJDb21wb3NpdGUyIiwKKwkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEUzXSA9ICJDb21wb3NpdGUzIiwKKwkJCVtFTTI4WFhfVk1VWF9DT01QT1NJVEU0XSA9ICJDb21wb3NpdGU0IiwKKwkJCVtFTTI4WFhfVk1VWF9TVklERU9dID0gIlMtVmlkZW8iLAorCQkJW0VNMjhYWF9WTVVYX1RFTEVWSVNJT05dID0gIlRlbGV2aXNpb24iLAorCQkJW0VNMjhYWF9WTVVYX0NBQkxFXSA9ICJDYWJsZSBUViIsCisJCQlbRU0yOFhYX1ZNVVhfRFZCXSA9ICJEVkIiLAorCQkJW0VNMjhYWF9WTVVYX0RFQlVHXSA9ICJmb3IgZGVidWcgb25seSIsCisJCX07CiAKLQkJCW4gPSBpLT5pbmRleDsKLQkJCWlmIChuID49IE1BWF9FTTI4WFhfSU5QVVQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoMCA9PSBJTlBVVChuKS0+dHlwZSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKLQkJCWktPmluZGV4ID0gbjsKLQkJCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCQkJc3RyY3B5KGktPm5hbWUsIGluYW1lW0lOUFVUKG4pLT50eXBlXSk7Ci0JCQlpZiAoKEVNMjhYWF9WTVVYX1RFTEVWSVNJT04gPT0gSU5QVVQobiktPnR5cGUpIHx8Ci0JCQkgICAgKEVNMjhYWF9WTVVYX0NBQkxFID09IElOUFVUKG4pLT50eXBlKSkKLQkJCQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOwotCQkJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUodHZub3Jtcyk7IG4rKykKLQkJCQlpLT5zdGQgfD0gdHZub3Jtc1tuXS5pZDsKLQkJCXJldHVybiAwOwotCQl9Ci0KKwkJbiA9IGktPmluZGV4OworCQlpZiAobiA+PSBNQVhfRU0yOFhYX0lOUFVUKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgwID09IElOUFVUKG4pLT50eXBlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKKwkJaS0+aW5kZXggPSBuOworCQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJc3RyY3B5KGktPm5hbWUsIGluYW1lW0lOUFVUKG4pLT50eXBlXSk7CisJCWlmICgoRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiA9PSBJTlBVVChuKS0+dHlwZSkgfHwKKwkJCShFTTI4WFhfVk1VWF9DQUJMRSA9PSBJTlBVVChuKS0+dHlwZSkpCisJCQlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOworCQlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRSh0dm5vcm1zKTsgbisrKQorCQkJaS0+c3RkIHw9IHR2bm9ybXNbbl0uaWQ7CisJCXJldHVybiAwOworCX0KIAljYXNlIFZJRElPQ19HX0lOUFVUOgotCQl7Ci0JCQlpbnQgKmkgPSBhcmc7Ci0JCQkqaSA9IGRldi0+Y3RsX2lucHV0OworCXsKKwkJaW50ICppID0gYXJnOworCQkqaSA9IGRldi0+Y3RsX2lucHV0OwogCi0JCQlyZXR1cm4gMDsKLQkJfQotCisJCXJldHVybiAwOworCX0KIAljYXNlIFZJRElPQ19TX0lOUFVUOgotCQl7Ci0JCQlpbnQgKmluZGV4ID0gYXJnOworCXsKKwkJaW50ICppbmRleCA9IGFyZzsKIAotCQkJaWYgKCppbmRleCA+PSBNQVhfRU0yOFhYX0lOUFVUKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKDAgPT0gSU5QVVQoKmluZGV4KS0+dHlwZSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCppbmRleCA+PSBNQVhfRU0yOFhYX0lOUFVUKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgwID09IElOUFVUKCppbmRleCktPnR5cGUpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJZG93bigmZGV2LT5sb2NrKTsKLQkJCXZpZGVvX211eChkZXYsICppbmRleCk7Ci0JCQl1cCgmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJdmlkZW9fbXV4KGRldiwgKmluZGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCi0JCQlyZXR1cm4gMDsKLQkJfQotCisJCXJldHVybiAwOworCX0KIAljYXNlIFZJRElPQ19HX0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQkJCXVuc2lnbmVkIGludCBpbmRleCA9IGEtPmluZGV4OworCXsKKwkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7CisJCXVuc2lnbmVkIGludCBpbmRleCA9IGEtPmluZGV4OwogCi0JCQlpZiAoYS0+aW5kZXggPiAxKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOwotCQkJaW5kZXggPSBkZXYtPmN0bF9haW5wdXQ7CisJCWlmIChhLT5pbmRleCA+IDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtc2V0KGEsIDAsIHNpemVvZigqYSkpOworCQlpbmRleCA9IGRldi0+Y3RsX2FpbnB1dDsKIAotCQkJaWYgKGluZGV4ID09IDApIHsKLQkJCQlzdHJjcHkoYS0+bmFtZSwgIlRlbGV2aXNpb24iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3RyY3B5KGEtPm5hbWUsICJMaW5lIEluIik7Ci0JCQl9Ci0JCQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCQkJYS0+aW5kZXggPSBpbmRleDsKLQkJCXJldHVybiAwOworCQlpZiAoaW5kZXggPT0gMCkgeworCQkJc3RyY3B5KGEtPm5hbWUsICJUZWxldmlzaW9uIik7CisJCX0gZWxzZSB7CisJCQlzdHJjcHkoYS0+bmFtZSwgIkxpbmUgSW4iKTsKIAkJfQotCisJCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJCWEtPmluZGV4ID0gaW5kZXg7CisJCXJldHVybiAwOworCX0KIAljYXNlIFZJRElPQ19TX0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQkJCWlmIChhLT5pbmRleCAhPSBkZXYtPmN0bF9haW5wdXQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJeworCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKIAotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJaWYgKGEtPmluZGV4ICE9IGRldi0+Y3RsX2FpbnB1dCkKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIC0tLSBjb250cm9scyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJCXJldHVybiAwOworCX0KKworCS8qIC0tLSBjb250cm9scyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOwotCQkJaW50IGksIGlkPXFjLT5pZDsKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCWludCBpLCBpZD1xYy0+aWQ7CiAKLQkJCW1lbXNldChxYywwLHNpemVvZigqcWMpKTsKLQkJCXFjLT5pZD1pZDsKKwkJbWVtc2V0KHFjLDAsc2l6ZW9mKCpxYykpOworCQlxYy0+aWQ9aWQ7CiAKLQkJCWlmICghZGV2LT5oYXNfbXNwMzR4eCkgewotCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVtMjh4eF9xY3RybCk7IGkrKykgewotCQkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKLQkJCQkJCW1lbWNweShxYywgJihlbTI4eHhfcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJCQkJcmV0dXJuIDA7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoZGV2LT5kZWNvZGVyID09IEVNMjhYWF9UVlA1MTUwKSB7Ci0JCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LGNtZCxxYyk7Ci0JCQkJaWYgKHFjLT50eXBlKQotCQkJCQlyZXR1cm4gMDsKLQkJCQllbHNlCi0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2FhNzExeF9xY3RybCk7IGkrKykgewotCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHNhYTcxMXhfcWN0cmxbaV0uaWQpIHsKLQkJCQkJbWVtY3B5KHFjLCAmKHNhYTcxMXhfcWN0cmxbaV0pLAotCQkJCQkgICAgICAgc2l6ZW9mKCpxYykpOworCQlpZiAoIWRldi0+aGFzX21zcDM0eHgpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVtMjh4eF9xY3RybCk7IGkrKykgeworCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IGVtMjh4eF9xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMsICYoZW0yOHh4X3FjdHJsW2ldKSwKKwkJCQkJc2l6ZW9mKCpxYykpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9Ci0KLQkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0KKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LGNtZCxxYyk7CisJCWlmIChxYy0+dHlwZSkKKwkJCXJldHVybiAwOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJY2FzZSBWSURJT0NfR19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCQkJaW50IHJldHZhbD0tRUlOVkFMOworCXsKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwkJaW50IHJldHZhbD0tRUlOVkFMOwogCi0JCQlpZiAoIWRldi0+aGFzX21zcDM0eHgpCi0JCQkJcmV0dmFsPWVtMjh4eF9nZXRfY3RybChkZXYsIGN0cmwpOwotCQkJaWYgKHJldHZhbD09LUVJTlZBTCkgewotCQkJCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1RWUDUxNTApIHsKLQkJCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LGNtZCxhcmcpOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0KLQkJCQlyZXR1cm4gc2FhNzExeF9nZXRfY3RybChkZXYsIGN0cmwpOwotCQkJfSBlbHNlIHJldHVybiByZXR2YWw7Ci0JCX0KLQorCQlpZiAoIWRldi0+aGFzX21zcDM0eHgpCisJCQlyZXR2YWw9ZW0yOHh4X2dldF9jdHJsKGRldiwgY3RybCk7CisJCWlmIChyZXR2YWw9PS1FSU5WQUwpIHsKKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldixjbWQsYXJnKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgcmV0dXJuIHJldHZhbDsKKwl9CiAJY2FzZSBWSURJT0NfU19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCQkJdTggaTsKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCXU4IGk7CiAKLQkJCWlmICghZGV2LT5oYXNfbXNwMzR4eCl7Ci0JCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW0yOHh4X3FjdHJsKTsgaSsrKSB7Ci0JCQkJCWlmIChjdHJsLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKLQkJCQkJCWlmIChjdHJsLT52YWx1ZSA8Ci0JCQkJCQllbTI4eHhfcWN0cmxbaV0ubWluaW11bQotCQkJCQkJfHwgY3RybC0+dmFsdWUgPgotCQkJCQkJZW0yOHh4X3FjdHJsW2ldLm1heGltdW0pCi0JCQkJCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQkJCQlyZXR1cm4gZW0yOHh4X3NldF9jdHJsKGRldiwgY3RybCk7Ci0JCQkJCX0KKwkJaWYgKCFkZXYtPmhhc19tc3AzNHh4KXsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVtMjh4eF9xY3RybCk7IGkrKykgeworCQkJCWlmIChjdHJsLT5pZCA9PSBlbTI4eHhfcWN0cmxbaV0uaWQpIHsKKwkJCQkJaWYgKGN0cmwtPnZhbHVlIDwKKwkJCQkJZW0yOHh4X3FjdHJsW2ldLm1pbmltdW0KKwkJCQkJfHwgY3RybC0+dmFsdWUgPgorCQkJCQllbTI4eHhfcWN0cmxbaV0ubWF4aW11bSkKKwkJCQkJCXJldHVybiAtRVJBTkdFOworCQkJCQlyZXR1cm4gZW0yOHh4X3NldF9jdHJsKGRldiwgY3RybCk7CiAJCQkJfQogCQkJfQotCi0JCQlpZiAoZGV2LT5kZWNvZGVyID09IEVNMjhYWF9UVlA1MTUwKSB7Ci0JCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LGNtZCxhcmcpOwotCQkJCXJldHVybiAwOwotCQkJfSBlbHNlIGlmICghZGV2LT5oYXNfbXNwMzR4eCkgewotCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVtMjh4eF9xY3RybCk7IGkrKykgewotCQkJCQlpZiAoY3RybC0+aWQgPT0gZW0yOHh4X3FjdHJsW2ldLmlkKSB7Ci0JCQkJCQlpZiAoY3RybC0+dmFsdWUgPAotCQkJCQkJZW0yOHh4X3FjdHJsW2ldLm1pbmltdW0KLQkJCQkJCXx8IGN0cmwtPnZhbHVlID4KLQkJCQkJCWVtMjh4eF9xY3RybFtpXS5tYXhpbXVtKQotCQkJCQkJCXJldHVybiAtRVJBTkdFOwotCQkJCQkJcmV0dXJuIGVtMjh4eF9zZXRfY3RybChkZXYsIGN0cmwpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhYTcxMXhfcWN0cmwpOyBpKyspIHsKLQkJCQkJaWYgKGN0cmwtPmlkID09IHNhYTcxMXhfcWN0cmxbaV0uaWQpIHsKLQkJCQkJCWlmIChjdHJsLT52YWx1ZSA8Ci0JCQkJCQlzYWE3MTF4X3FjdHJsW2ldLm1pbmltdW0KLQkJCQkJCXx8IGN0cmwtPnZhbHVlID4KLQkJCQkJCXNhYTcxMXhfcWN0cmxbaV0ubWF4aW11bSkKLQkJCQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCQkJCXJldHVybiBzYWE3MTF4X3NldF9jdHJsKGRldiwgY3RybCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJLyogLS0tIHR1bmVyIGlvY3RscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LGNtZCxhcmcpOworCQlyZXR1cm4gMDsKKwl9CisJLyogLS0tIHR1bmVyIGlvY3RscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAljYXNlIFZJRElPQ19HX1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQkJCWludCBzdGF0dXMgPSAwOworCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisJCWludCBzdGF0dXMgPSAwOwogCi0JCQlpZiAoMCAhPSB0LT5pbmRleCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKDAgIT0gdC0+aW5kZXgpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwotCQkJc3RyY3B5KHQtPm5hbWUsICJUdW5lciIpOwotCQkJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07Ci0JCQl0LT5yYW5nZWhpZ2ggPSAweGZmZmZmZmZmVUw7CS8qIEZJWE1FOiBzZXQgY29ycmVjdCByYW5nZSAqLworCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisJCXN0cmNweSh0LT5uYW1lLCAiVHVuZXIiKTsKKwkJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STTsKKwkJdC0+cmFuZ2VoaWdoID0gMHhmZmZmZmZmZlVMOwkvKiBGSVhNRTogc2V0IGNvcnJlY3QgcmFuZ2UgKi8KIC8qCQl0LT5zaWduYWwgPSAweGZmZmY7Ki8KIC8qCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsVklESU9DX0dfVFVORVIsdCk7Ki8KLQkJCS8qIE5vIHdheSB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoPyAqLwotCQkJZG93bigmZGV2LT5sb2NrKTsKLQkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9HRVRfU1RBVFVTLAotCQkJCQkJJnN0YXR1cyk7Ci0JCQl1cCgmZGV2LT5sb2NrKTsKLQkJCXQtPnNpZ25hbCA9Ci0JCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpICE9IDAgPyAweGZmZmYgOiAwOworCQkvKiBObyB3YXkgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aD8gKi8KKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBERUNPREVSX0dFVF9TVEFUVVMsCisJCQkJCSZzdGF0dXMpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXQtPnNpZ25hbCA9CisJCQkoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkgIT0gMCA/IDB4ZmZmZiA6IDA7CiAKLQkJCWVtMjh4eF92aWRlb2RiZygiVklESU9fR19UVU5FUjogc2lnbmFsPSV4LCBhZmM9JXhcbiIsIHQtPnNpZ25hbCwKLQkJCQkgdC0+YWZjKTsKLQkJCXJldHVybiAwOwotCQl9CisJCWVtMjh4eF92aWRlb2RiZygiVklESU9fR19UVU5FUjogc2lnbmFsPSV4LCBhZmM9JXhcbiIsIHQtPnNpZ25hbCwKKwkJCQl0LT5hZmMpOworCQlyZXR1cm4gMDsKKwl9CiAJY2FzZSBWSURJT0NfU19UVU5FUjoKLQkJewotCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCQlpbnQgc3RhdHVzID0gMDsKKwl7CisJCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOworCQlpbnQgc3RhdHVzID0gMDsKIAotCQkJaWYgKDAgIT0gdC0+aW5kZXgpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7Ci0JCQlzdHJjcHkodC0+bmFtZSwgIlR1bmVyIik7Ci0JCQl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STTsKLQkJCXQtPnJhbmdlaGlnaCA9IDB4ZmZmZmZmZmZVTDsJLyogRklYTUU6IHNldCBjb3JyZWN0IHJhbmdlICovCisJCWlmICgwICE9IHQtPmluZGV4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKKwkJc3RyY3B5KHQtPm5hbWUsICJUdW5lciIpOworCQl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNOworCQl0LT5yYW5nZWhpZ2ggPSAweGZmZmZmZmZmVUw7CS8qIEZJWE1FOiBzZXQgY29ycmVjdCByYW5nZSAqLwogLyoJCXQtPnNpZ25hbCA9IDB4ZmZmZjsgKi8KLQkJCS8qIE5vIHdheSB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoPyAqLwotCQkJZG93bigmZGV2LT5sb2NrKTsKLQkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgREVDT0RFUl9HRVRfU1RBVFVTLAotCQkJCQkJJnN0YXR1cyk7Ci0JCQl1cCgmZGV2LT5sb2NrKTsKLQkJCXQtPnNpZ25hbCA9Ci0JCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpICE9IDAgPyAweGZmZmYgOiAwOworCQkvKiBObyB3YXkgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aD8gKi8KKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBERUNPREVSX0dFVF9TVEFUVVMsCisJCQkJCSZzdGF0dXMpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXQtPnNpZ25hbCA9CisJCQkoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkgIT0gMCA/IDB4ZmZmZiA6IDA7CiAKLQkJCWVtMjh4eF92aWRlb2RiZygiVklESU9fU19UVU5FUjogc2lnbmFsPSV4LCBhZmM9JXhcbiIsCi0JCQkJIHQtPnNpZ25hbCwgdC0+YWZjKTsKLQkJCXJldHVybiAwOwotCQl9CisJCWVtMjh4eF92aWRlb2RiZygiVklESU9fU19UVU5FUjogc2lnbmFsPSV4LCBhZmM9JXhcbiIsCisJCQkJdC0+c2lnbmFsLCB0LT5hZmMpOworCQlyZXR1cm4gMDsKKwl9CiAJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKwl7CisJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKIAotCQkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCQkJZi0+ZnJlcXVlbmN5ID0gZGV2LT5jdGxfZnJlcTsKKwkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOworCQlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCWYtPmZyZXF1ZW5jeSA9IGRldi0+Y3RsX2ZyZXE7CiAKLQkJCXJldHVybiAwOwotCQl9CisJCXJldHVybiAwOworCX0KIAljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQkJewotCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCXsKKwkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwogCi0JCQlpZiAoMCAhPSBmLT50dW5lcikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKDAgIT0gZi0+dHVuZXIpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJaWYgKFY0TDJfVFVORVJfQU5BTE9HX1RWICE9IGYtPnR5cGUpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChWNEwyX1RVTkVSX0FOQUxPR19UViAhPSBmLT50eXBlKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCWRvd24oJmRldi0+bG9jayk7Ci0JCQlkZXYtPmN0bF9mcmVxID0gZi0+ZnJlcXVlbmN5OwotCQkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19GUkVRVUVOQ1ksIGYpOwotCQkJdXAoJmRldi0+bG9jayk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJCWRldi0+Y3RsX2ZyZXEgPSBmLT5mcmVxdWVuY3k7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CiAJY2FzZSBWSURJT0NfQ1JPUENBUDoKLQkJewotCQkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY2MgPSBhcmc7CisJeworCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYyA9IGFyZzsKIAotCQkJaWYgKGNjLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWNjLT5ib3VuZHMubGVmdCA9IDA7Ci0JCQljYy0+Ym91bmRzLnRvcCA9IDA7Ci0JCQljYy0+Ym91bmRzLndpZHRoID0gZGV2LT53aWR0aDsKLQkJCWNjLT5ib3VuZHMuaGVpZ2h0ID0gZGV2LT5oZWlnaHQ7Ci0JCQljYy0+ZGVmcmVjdCA9IGNjLT5ib3VuZHM7Ci0JCQljYy0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gNTQ7CS8qIDQ6MyBGSVhNRTogcmVtb3ZlIG1hZ2ljIG51bWJlcnMgKi8KLQkJCWNjLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDU5OwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJaWYgKGNjLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQljYy0+Ym91bmRzLmxlZnQgPSAwOworCQljYy0+Ym91bmRzLnRvcCA9IDA7CisJCWNjLT5ib3VuZHMud2lkdGggPSBkZXYtPndpZHRoOworCQljYy0+Ym91bmRzLmhlaWdodCA9IGRldi0+aGVpZ2h0OworCQljYy0+ZGVmcmVjdCA9IGNjLT5ib3VuZHM7CisJCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSA1NDsJLyogNDozIEZJWE1FOiByZW1vdmUgbWFnaWMgbnVtYmVycyAqLworCQljYy0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSA1OTsKKwkJcmV0dXJuIDA7CisJfQogCWNhc2UgVklESU9DX1NUUkVBTU9OOgotCQl7Ci0JCQlpbnQgKnR5cGUgPSBhcmc7CisJeworCQlpbnQgKnR5cGUgPSBhcmc7CiAKLQkJCWlmICgqdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKLQkJCSAgICB8fCBkZXYtPmlvICE9IElPX01NQVApCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgqdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKKwkJCXx8IGRldi0+aW8gIT0gSU9fTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5pbnF1ZXVlKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGxpc3RfZW1wdHkoJmRldi0+aW5xdWV1ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJZGV2LT5zdHJlYW0gPSBTVFJFQU1fT047CS8qIEZJWE1FOiBTdGFydCB2aWRlbyBjYXB0dXJlIGhlcmU/ICovCisJCWRldi0+c3RyZWFtID0gU1RSRUFNX09OOwkvKiBGSVhNRTogU3RhcnQgdmlkZW8gY2FwdHVyZSBoZXJlPyAqLwogCi0JCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19TVFJFQU1PTjogc3RhcnRpbmcgc3RyZWFtXG4iKTsKKwkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU1RSRUFNT046IHN0YXJ0aW5nIHN0cmVhbVxuIik7CiAKLQkJCXJldHVybiAwOwotCQl9CisJCXJldHVybiAwOworCX0KIAljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JCXsKLQkJCWludCAqdHlwZSA9IGFyZzsKLQkJCWludCByZXQ7CisJeworCQlpbnQgKnR5cGUgPSBhcmc7CisJCWludCByZXQ7CiAKLQkJCWlmICgqdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKLQkJCSAgICB8fCBkZXYtPmlvICE9IElPX01NQVApCi0JCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgqdHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKKwkJCXx8IGRldi0+aW8gIT0gSU9fTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCQlpZiAoZGV2LT5zdHJlYW0gPT0gU1RSRUFNX09OKSB7Ci0JCQkJZW0yOHh4X3ZpZGVvZGJnICgiVklESU9DX1NUUkVBTU9GRjogaW50ZXJydXB0aW5nIHN0cmVhbVxuIik7Ci0JCQkJaWYgKChyZXQgPSBlbTI4eHhfc3RyZWFtX2ludGVycnVwdChkZXYpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCWVtMjh4eF9lbXB0eV9mcmFtZXF1ZXVlcyhkZXYpOwotCi0JCQlyZXR1cm4gMDsKKwkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTikgeworCQkJZW0yOHh4X3ZpZGVvZGJnICgiVklESU9DX1NUUkVBTU9GRjogaW50ZXJydXB0aW5nIHN0cmVhbVxuIik7CisJCQlpZiAoKHJldCA9IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KGRldikpKQorCQkJCXJldHVybiByZXQ7CiAJCX0KKwkJZW0yOHh4X2VtcHR5X2ZyYW1lcXVldWVzKGRldik7CisKKwkJcmV0dXJuIDA7CisJfQogCWRlZmF1bHQ6CiAJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSwgZmlscCwgY21kLCBhcmcsCiAJCQkJCQkgIGRyaXZlcl9pb2N0bCk7CkBAIC0xMjgwLDMyNyArMTI5NSwxNzAgQEAKIAkJLyogLS0tIGNhcGFiaWxpdGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAkJewotCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7CiAKLQkJCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7Ci0JCQlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiZW0yOHh4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7Ci0JCQlzdHJsY3B5KGNhcC0+Y2FyZCwgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lLAotCQkJCXNpemVvZihjYXAtPmNhcmQpKTsKLQkJCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT51ZGV2LT5kZXYuYnVzX2lkLAotCQkJCXNpemVvZihjYXAtPmJ1c19pbmZvKSk7Ci0JCQljYXAtPnZlcnNpb24gPSBFTTI4WFhfVkVSU0lPTl9DT0RFOwotCQkJY2FwLT5jYXBhYmlsaXRpZXMgPQotCQkJICAgIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotCQkJICAgIFY0TDJfQ0FQX0FVRElPIHwKLQkJCSAgICBWNEwyX0NBUF9SRUFEV1JJVEUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7Ci0JCQlpZiAoZGV2LT5oYXNfdHVuZXIpCi0JCQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVFVORVI7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIC0tLSBjYXB0dXJlIGlvY3RscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CisJCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJlbTI4eHgiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKKwkJc3RybGNweShjYXAtPmNhcmQsIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSwKKwkJCXNpemVvZihjYXAtPmNhcmQpKTsKKwkJc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXYtPnVkZXYtPmRldi5idXNfaWQsCisJCQlzaXplb2YoY2FwLT5idXNfaW5mbykpOworCQljYXAtPnZlcnNpb24gPSBFTTI4WFhfVkVSU0lPTl9DT0RFOworCQljYXAtPmNhcGFiaWxpdGllcyA9CisJCQkJVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFIHwKKwkJCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJCQlWNEwyX0NBUF9BVURJTyB8CisJCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCQlpZiAoZGV2LT5oYXNfdHVuZXIpCisJCQljYXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0NBUF9UVU5FUjsKKwkJcmV0dXJuIDA7CisJfQorCS8qIC0tLSBjYXB0dXJlIGlvY3RscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGQgPSBhcmc7CisJeworCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXRkID0gYXJnOwogCi0JCQlpZiAoZm10ZC0+aW5kZXggIT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbXNldChmbXRkLCAwLCBzaXplb2YoKmZtdGQpKTsKLQkJCWZtdGQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCQlzdHJjcHkoZm10ZC0+ZGVzY3JpcHRpb24sICJQYWNrZWQgWVVZMiIpOwotCQkJZm10ZC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKLQkJCW1lbXNldChmbXRkLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGZtdGQtPnJlc2VydmVkKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCisJCWlmIChmbXRkLT5pbmRleCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbXNldChmbXRkLCAwLCBzaXplb2YoKmZtdGQpKTsKKwkJZm10ZC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJc3RyY3B5KGZtdGQtPmRlc2NyaXB0aW9uLCAiUGFja2VkIFlVWTIiKTsKKwkJZm10ZC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwkJbWVtc2V0KGZtdGQtPnJlc2VydmVkLCAwLCBzaXplb2YoZm10ZC0+cmVzZXJ2ZWQpKTsKKwkJcmV0dXJuIDA7CisJfQogCWNhc2UgVklESU9DX0dfRk1UOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCA9IGFyZzsKLQotCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfR19GTVQ6IHR5cGU9JXNcbiIsCi0JCQkJIGZvcm1hdC0+dHlwZSA9PQotCQkJCSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgPwotCQkJCSAiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIiA6IGZvcm1hdC0+dHlwZSA9PQotCQkJCSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFID8KLQkJCQkgIlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgIiA6Ci0JCQkJICJub3Qgc3VwcG9ydGVkIik7Ci0KLQkJCWlmIChmb3JtYXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQlmb3JtYXQtPmZtdC5waXgud2lkdGggPSBkZXYtPndpZHRoOwotCQkJZm9ybWF0LT5mbXQucGl4LmhlaWdodCA9IGRldi0+aGVpZ2h0OwotCQkJZm9ybWF0LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7Ci0JCQlmb3JtYXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gZGV2LT5ieXRlc3BlcmxpbmU7Ci0JCQlmb3JtYXQtPmZtdC5waXguc2l6ZWltYWdlID0gZGV2LT5mcmFtZV9zaXplOwotCQkJZm9ybWF0LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotCQkJZm9ybWF0LT5mbXQucGl4LmZpZWxkID0gZGV2LT5pbnRlcmxhY2VkID8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIDogVjRMMl9GSUVMRF9UT1A7CS8qIEZJWE1FOiBUT1A/IE5PTkU/IEJPVFRPTT8gQUxURU5BVEU/ICovCi0KLQkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX0dfRk1UOiAlZHglZFxuIiwgZGV2LT53aWR0aCwKLQkJCQkgZGV2LT5oZWlnaHQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJcmV0dXJuIGVtMjh4eF9nZXRfZm10KGRldiwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKSBhcmcpOwogCiAJY2FzZSBWSURJT0NfVFJZX0ZNVDoKIAljYXNlIFZJRElPQ19TX0ZNVDoKLQkJewotCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQgPSBhcmc7Ci0JCQl1MzIgaTsKLQkJCWludCByZXQgPSAwOwotCQkJaW50IHdpZHRoID0gZm9ybWF0LT5mbXQucGl4LndpZHRoOwotCQkJaW50IGhlaWdodCA9IGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQ7Ci0JCQl1bnNpZ25lZCBpbnQgaHNjYWxlLCB2c2NhbGU7Ci0JCQl1bnNpZ25lZCBpbnQgbWF4aCwgbWF4dzsKKwkJcmV0dXJuIGVtMjh4eF9zZXRfZm10KGRldiwgY21kLCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKIAotCQkJbWF4dyA9IG5vcm1fbWF4dyhkZXYpOwotCQkJbWF4aCA9IG5vcm1fbWF4aChkZXYpOwotCi0vKgkJaW50IGJvdGhfZmllbGRzOyAqLwotCi0JCQllbTI4eHhfdmlkZW9kYmcoIiVzOiB0eXBlPSVzXG4iLAotCQkJCSBjbWQgPT0KLQkJCQkgVklESU9DX1RSWV9GTVQgPyAiVklESU9DX1RSWV9GTVQiIDoKLQkJCQkgIlZJRElPQ19TX0ZNVCIsCi0JCQkJIGZvcm1hdC0+dHlwZSA9PQotCQkJCSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgPwotCQkJCSAiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIiA6IGZvcm1hdC0+dHlwZSA9PQotCQkJCSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFID8KLQkJCQkgIlY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgIiA6Ci0JCQkJICJub3Qgc3VwcG9ydGVkIik7Ci0KLQkJCWlmIChmb3JtYXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQllbTI4eHhfdmlkZW9kYmcoIiVzOiByZXF1ZXN0ZWQgJWR4JWRcbiIsCi0JCQkJIGNtZCA9PQotCQkJCSBWSURJT0NfVFJZX0ZNVCA/ICJWSURJT0NfVFJZX0ZNVCIgOgotCQkJCSAiVklESU9DX1NfRk1UIiwgZm9ybWF0LT5mbXQucGl4LndpZHRoLAotCQkJCSBmb3JtYXQtPmZtdC5waXguaGVpZ2h0KTsKLQotCQkJLyogRklYTUU6IE1vdmUgc29tZSBjb2RlIGF3YXkgZnJvbSBoZXJlICovCi0JCQkvKiB3aWR0aCBtdXN0IGV2ZW4gYmVjYXVzZSBvZiB0aGUgWVVZViBmb3JtYXQgKi8KLQkJCS8qIGhlaWdodCBtdXN0IGJlIGV2ZW4gYmVjYXVzZSBvZiBpbnRlcmxhY2luZyAqLwotCQkJaGVpZ2h0ICY9IDB4ZmZmZTsKLQkJCXdpZHRoICY9IDB4ZmZmZTsKLQotCQkJaWYgKGhlaWdodCA8IDMyKQotCQkJCWhlaWdodCA9IDMyOwotCQkJaWYgKGhlaWdodCA+IG1heGgpCi0JCQkJaGVpZ2h0ID0gbWF4aDsKLQkJCWlmICh3aWR0aCA8IDQ4KQotCQkJCXdpZHRoID0gNDg7Ci0JCQlpZiAod2lkdGggPiBtYXh3KQotCQkJCXdpZHRoID0gbWF4dzsKLQotCQkJaWYoZGV2LT5pc19lbTI4MDApewotCQkJCS8qIHRoZSBlbTI4MDAgY2FuIG9ubHkgc2NhbGUgZG93biB0byA1MCUgKi8KLQkJCQlpZihoZWlnaHQgJSAobWF4aCAvIDIpKQotCQkJCQloZWlnaHQ9bWF4aDsKLQkJCQlpZih3aWR0aCAlIChtYXh3IC8gMikpCi0JCQkJCXdpZHRoPW1heHc7Ci0JCQkJLyogYWNjb3JkaW5nIHRvIGVtcGlhdGVjaCBzdXBwb3J0ICovCi0JCQkJLyogdGhlIE1heFBhY2tldFNpemUgaXMgdG8gc21hbGwgdG8gc3VwcG9ydCAqLwotCQkJCS8qIGZyYW1lc2l6ZXMgbGFyZ2VyIHRoYW4gNjQweDQ4MCBAIDMwIGZwcyAqLwotCQkJCS8qIG9yIDY0MHg1NzYgQCAyNSBmcHMuIEFzIHRoaXMgd291bGQgY3V0ICovCi0JCQkJLyogb2YgYSBwYXJ0IG9mIHRoZSBpbWFnZSB3ZSBwcmVmZXIgKi8KLQkJCQkvKiAzNjB4NTc2IG9yIDM2MHg0ODAgZm9yIG5vdyAqLwotCQkJCWlmKHdpZHRoID09IG1heHcgJiYgaGVpZ2h0ID09IG1heGgpCi0JCQkJCXdpZHRoIC89IDI7Ci0JCQl9Ci0KLQkJCWlmICgoaHNjYWxlID0KLQkJCSAgICAgKCgodW5zaWduZWQgbG9uZyltYXh3KSA8PCAxMikgLyB3aWR0aCAtIDQwOTZMKSA+PQotCQkJICAgIDB4NDAwMCkKLQkJCQloc2NhbGUgPSAweDNmZmY7Ci0JCQl3aWR0aCA9Ci0JCQkgICAgKCgodW5zaWduZWQgbG9uZyltYXh3KSA8PCAxMikgLyAoaHNjYWxlICsgNDA5NkwpOwotCi0JCQlpZiAoKHZzY2FsZSA9Ci0JCQkgICAgICgoKHVuc2lnbmVkIGxvbmcpbWF4aCkgPDwgMTIpIC8gaGVpZ2h0IC0gNDA5NkwpID49Ci0JCQkgICAgMHg0MDAwKQotCQkJCXZzY2FsZSA9IDB4M2ZmZjsKLQkJCWhlaWdodCA9Ci0JCQkgICAgKCgodW5zaWduZWQgbG9uZyltYXhoKSA8PCAxMikgLyAodnNjYWxlICsgNDA5NkwpOwotCi0JCQlmb3JtYXQtPmZtdC5waXgud2lkdGggPSB3aWR0aDsKLQkJCWZvcm1hdC0+Zm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7Ci0JCQlmb3JtYXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKLQkJCWZvcm1hdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSB3aWR0aCAqIDI7Ci0JCQlmb3JtYXQtPmZtdC5waXguc2l6ZWltYWdlID0gd2lkdGggKiAyICogaGVpZ2h0OwotCQkJZm9ybWF0LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotCQkJZm9ybWF0LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCi0JCQllbTI4eHhfdmlkZW9kYmcoIiVzOiByZXR1cm5lZCAlZHglZCAoJWQsICVkKVxuIiwKLQkJCQkgY21kID09Ci0JCQkJIFZJRElPQ19UUllfRk1UID8gIlZJRElPQ19UUllfRk1UIiA6Ci0JCQkJICJWSURJT0NfU19GTVQiLCBmb3JtYXQtPmZtdC5waXgud2lkdGgsCi0JCQkJIGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQsIGhzY2FsZSwgdnNjYWxlKTsKLQotCQkJaWYgKGNtZCA9PSBWSURJT0NfVFJZX0ZNVCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2ZyYW1lczsgaSsrKQotCQkJCWlmIChkZXYtPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKLQkJCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfU19GTVQgZmFpbGVkLiAiCi0JCQkJCQkiVW5tYXAgdGhlIGJ1ZmZlcnMgZmlyc3QuXG4iKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCi0JCQkvKiBzdG9wIGlvIGluIGNhc2UgaXQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyAqLwotCQkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTikgewotCQkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX1NFVF9GTVQ6IGludGVydXB0aW5nIHN0cmVhbVxuIik7Ci0JCQkJaWYgKChyZXQgPSBlbTI4eHhfc3RyZWFtX2ludGVycnVwdChkZXYpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJZW0yOHh4X3JlbGVhc2VfYnVmZmVycyhkZXYpOwotCQkJZGV2LT5pbyA9IElPX05PTkU7Ci0KLQkJCS8qIHNldCBuZXcgaW1hZ2Ugc2l6ZSAqLwotCQkJZGV2LT53aWR0aCA9IHdpZHRoOwotCQkJZGV2LT5oZWlnaHQgPSBoZWlnaHQ7Ci0JCQlkZXYtPmZyYW1lX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQgKiAyOwotCQkJZGV2LT5maWVsZF9zaXplID0gZGV2LT5mcmFtZV9zaXplID4+IDE7CS8qYm90aF9maWxlZHMgPyBkZXYtPmZyYW1lX3NpemU+PjEgOiBkZXYtPmZyYW1lX3NpemU7ICovCi0JCQlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOwotCQkJZGV2LT5oc2NhbGUgPSBoc2NhbGU7Ci0JCQlkZXYtPnZzY2FsZSA9IHZzY2FsZTsKLS8qCQkJZGV2LT5ib3RoX2ZpbGVkcyA9IGJvdGhfZmlsZWRzOyAqLwotCQkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7Ci0JCQllbTI4eHhfc2V0X2FsdGVybmF0ZShkZXYpOwotCQkJZW0yOHh4X2NhcHR1cmVfc3RhcnQoZGV2LCAxKTsKLQkJCWVtMjh4eF9yZXNvbHV0aW9uX3NldChkZXYpOwotCQkJZW0yOHh4X2luaXRfaXNvYyhkZXYpOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIC0tLSBzdHJlYW1pbmcgY2FwdHVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJY2FzZSBWSURJT0NfUkVRQlVGUzoKLQkJewotCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiID0gYXJnOwotCQkJdTMyIGk7Ci0JCQlpbnQgcmV0OworCXsKKwkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiID0gYXJnOworCQl1MzIgaTsKKwkJaW50IHJldDsKIAotCQkJaWYgKHJiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkJICAgIHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHJiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkJcmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCWlmIChkZXYtPmlvID09IElPX1JFQUQpIHsKLQkJCQllbTI4eHhfdmlkZW9kYmcgKCJtZXRob2QgaXMgc2V0IHRvIHJlYWQ7IgotCQkJCQkiIGNsb3NlIGFuZCBvcGVuIHRoZSBkZXZpY2UgYWdhaW4gdG8iCi0JCQkJCSIgY2hvb3NlIHRoZSBtbWFwIEkvTyBtZXRob2RcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fZnJhbWVzOyBpKyspCi0JCQkJaWYgKGRldi0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgewotCQkJCQllbTI4eHhfdmlkZW9kYmcgKCJWSURJT0NfUkVRQlVGUyBmYWlsZWQ7IHByZXZpb3VzIGJ1ZmZlcnMgYXJlIHN0aWxsIG1hcHBlZFxuIik7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQotCQkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTikgewotCQkJCWVtMjh4eF92aWRlb2RiZygiVklESU9DX1JFUUJVRlM6IGludGVycnVwdGluZyBzdHJlYW1cbiIpOwotCQkJCWlmICgocmV0ID0gZW0yOHh4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2KSkpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0KLQkJCWVtMjh4eF9lbXB0eV9mcmFtZXF1ZXVlcyhkZXYpOwotCi0JCQllbTI4eHhfcmVsZWFzZV9idWZmZXJzKGRldik7Ci0JCQlpZiAocmItPmNvdW50KQotCQkJCXJiLT5jb3VudCA9Ci0JCQkJICAgIGVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoZGV2LCByYi0+Y291bnQpOwotCi0JCQlkZXYtPmZyYW1lX2N1cnJlbnQgPSBOVUxMOwotCi0JCQllbTI4eHhfdmlkZW9kYmcgKCJWSURJT0NfUkVRQlVGUzogc2V0dGluZyBpbyBtZXRob2QgdG8gbW1hcDogbnVtIGJ1ZnMgJWlcbiIsCi0JCQkJCQkgICAgIHJiLT5jb3VudCk7Ci0JCQlkZXYtPmlvID0gcmItPmNvdW50ID8gSU9fTU1BUCA6IElPX05PTkU7Ci0JCQlyZXR1cm4gMDsKKwkJaWYgKGRldi0+aW8gPT0gSU9fUkVBRCkgeworCQkJZW0yOHh4X3ZpZGVvZGJnICgibWV0aG9kIGlzIHNldCB0byByZWFkOyIKKwkJCQkiIGNsb3NlIGFuZCBvcGVuIHRoZSBkZXZpY2UgYWdhaW4gdG8iCisJCQkJIiBjaG9vc2UgdGhlIG1tYXAgSS9PIG1ldGhvZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9mcmFtZXM7IGkrKykKKwkJCWlmIChkZXYtPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCQllbTI4eHhfdmlkZW9kYmcgKCJWSURJT0NfUkVRQlVGUyBmYWlsZWQ7IHByZXZpb3VzIGJ1ZmZlcnMgYXJlIHN0aWxsIG1hcHBlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTikgeworCQkJZW0yOHh4X3ZpZGVvZGJnKCJWSURJT0NfUkVRQlVGUzogaW50ZXJydXB0aW5nIHN0cmVhbVxuIik7CisJCQlpZiAoKHJldCA9IGVtMjh4eF9zdHJlYW1faW50ZXJydXB0KGRldikpKQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQllbTI4eHhfZW1wdHlfZnJhbWVxdWV1ZXMoZGV2KTsKKworCQllbTI4eHhfcmVsZWFzZV9idWZmZXJzKGRldik7CisJCWlmIChyYi0+Y291bnQpCisJCQlyYi0+Y291bnQgPQorCQkJCWVtMjh4eF9yZXF1ZXN0X2J1ZmZlcnMoZGV2LCByYi0+Y291bnQpOworCisJCWRldi0+ZnJhbWVfY3VycmVudCA9IE5VTEw7CisKKwkJZW0yOHh4X3ZpZGVvZGJnICgiVklESU9DX1JFUUJVRlM6IHNldHRpbmcgaW8gbWV0aG9kIHRvIG1tYXA6IG51bSBidWZzICVpXG4iLAorCQkJCQkJcmItPmNvdW50KTsKKwkJZGV2LT5pbyA9IHJiLT5jb3VudCA/IElPX01NQVAgOiBJT19OT05FOworCQlyZXR1cm4gMDsKKwl9CiAJY2FzZSBWSURJT0NfUVVFUllCVUY6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYiA9IGFyZzsKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYiA9IGFyZzsKIAotCQkJaWYgKGItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8Ci0JCQkgICAgYi0+aW5kZXggPj0gZGV2LT5udW1fZnJhbWVzIHx8IGRldi0+aW8gIT0gSU9fTU1BUCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQliLT5pbmRleCA+PSBkZXYtPm51bV9mcmFtZXMgfHwgZGV2LT5pbyAhPSBJT19NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCW1lbWNweShiLCAmZGV2LT5mcmFtZVtiLT5pbmRleF0uYnVmLCBzaXplb2YoKmIpKTsKKwkJbWVtY3B5KGIsICZkZXYtPmZyYW1lW2ItPmluZGV4XS5idWYsIHNpemVvZigqYikpOwogCi0JCQlpZiAoZGV2LT5mcmFtZVtiLT5pbmRleF0udm1hX3VzZV9jb3VudCkgewotCQkJCWItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOwotCQkJfQotCQkJaWYgKGRldi0+ZnJhbWVbYi0+aW5kZXhdLnN0YXRlID09IEZfRE9ORSkKLQkJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7Ci0JCQllbHNlIGlmIChkZXYtPmZyYW1lW2ItPmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkKLQkJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKLQkJCXJldHVybiAwOworCQlpZiAoZGV2LT5mcmFtZVtiLT5pbmRleF0udm1hX3VzZV9jb3VudCkgeworCQkJYi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CiAJCX0KKwkJaWYgKGRldi0+ZnJhbWVbYi0+aW5kZXhdLnN0YXRlID09IEZfRE9ORSkKKwkJCWItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKwkJZWxzZSBpZiAoZGV2LT5mcmFtZVtiLT5pbmRleF0uc3RhdGUgIT0gRl9VTlVTRUQpCisJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKwkJcmV0dXJuIDA7CisJfQogCWNhc2UgVklESU9DX1FCVUY6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYiA9IGFyZzsKLQkJCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYiA9IGFyZzsKKwkJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCi0JCQlpZiAoYi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJCSAgICBiLT5pbmRleCA+PSBkZXYtPm51bV9mcmFtZXMgfHwgZGV2LT5pbyAhPSBJT19NTUFQKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWlmIChkZXYtPmZyYW1lW2ItPmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkgewotCQkJCXJldHVybiAtRUFHQUlOOwotCQkJfQotCQkJZGV2LT5mcmFtZVtiLT5pbmRleF0uc3RhdGUgPSBGX1FVRVVFRDsKLQotCQkJLyogYWRkIGZyYW1lIHRvIGZpZm8gKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwotCQkJbGlzdF9hZGRfdGFpbCgmZGV2LT5mcmFtZVtiLT5pbmRleF0uZnJhbWUsCi0JCQkJICAgICAgJmRldi0+aW5xdWV1ZSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOwotCi0JCQlyZXR1cm4gMDsKKwkJaWYgKGItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQliLT5pbmRleCA+PSBkZXYtPm51bV9mcmFtZXMgfHwgZGV2LT5pbyAhPSBJT19NTUFQKSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCisJCWlmIChkZXYtPmZyYW1lW2ItPmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkgeworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJZGV2LT5mcmFtZVtiLT5pbmRleF0uc3RhdGUgPSBGX1FVRVVFRDsKKworCQkvKiBhZGQgZnJhbWUgdG8gZmlmbyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmZGV2LT5mcmFtZVtiLT5pbmRleF0uZnJhbWUsCisJCQkJJmRldi0+aW5xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwkJcmV0dXJuIDA7CisJfQogCWNhc2UgVklESU9DX0RRQlVGOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmIgPSBhcmc7Ci0JCQlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QgKmY7Ci0JCQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7Ci0JCQlpbnQgcmV0ID0gMDsKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciAqYiA9IGFyZzsKKwkJc3RydWN0IGVtMjh4eF9mcmFtZV90ICpmOworCQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJCWludCByZXQgPSAwOwogCi0JCQlpZiAoYi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKLQkJCSAgICB8fCBkZXYtPmlvICE9IElPX01NQVApCisJCWlmIChiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRQorCQkJfHwgZGV2LT5pbyAhPSBJT19NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB7CisJCQlpZiAoZGV2LT5zdHJlYW0gPT0gU1RSRUFNX09GRikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJaWYgKGxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB7Ci0JCQkJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PRkYpCi0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKLQkJCQkJcmV0dXJuIC1FQUdBSU47Ci0JCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCi0JCQkJICAgIChkZXYtPndhaXRfZnJhbWUsCi0JCQkJICAgICAoIWxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB8fAotCQkJCSAgICAgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSk7Ci0JCQkJaWYgKHJldCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCQlpZiAoZGV2LT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpCi0JCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKLQkJCWYgPSBsaXN0X2VudHJ5KGRldi0+b3V0cXVldWUubmV4dCwKLQkJCQkgICAgICAgc3RydWN0IGVtMjh4eF9mcmFtZV90LCBmcmFtZSk7Ci0JCQlsaXN0X2RlbChkZXYtPm91dHF1ZXVlLm5leHQpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKLQotCQkJZi0+c3RhdGUgPSBGX1VOVVNFRDsKLQkJCW1lbWNweShiLCAmZi0+YnVmLCBzaXplb2YoKmIpKTsKLQotCQkJaWYgKGYtPnZtYV91c2VfY291bnQpCi0JCQkJYi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7Ci0KLQkJCXJldHVybiAwOworCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJCXJldHVybiAtRUFHQUlOOworCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCisJCQkJKGRldi0+d2FpdF9mcmFtZSwKKwkJCQkoIWxpc3RfZW1wdHkoJmRldi0+b3V0cXVldWUpKSB8fAorCQkJCShkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJaWYgKGRldi0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQkJCXJldHVybiAtRU5PREVWOwogCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCWYgPSBsaXN0X2VudHJ5KGRldi0+b3V0cXVldWUubmV4dCwKKwkJCQlzdHJ1Y3QgZW0yOHh4X2ZyYW1lX3QsIGZyYW1lKTsKKwkJbGlzdF9kZWwoZGV2LT5vdXRxdWV1ZS5uZXh0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQlmLT5zdGF0ZSA9IEZfVU5VU0VEOworCQltZW1jcHkoYiwgJmYtPmJ1Ziwgc2l6ZW9mKCpiKSk7CisKKwkJaWYgKGYtPnZtYV91c2VfY291bnQpCisJCQliLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKworCQlyZXR1cm4gMDsKKwl9CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGVtMjh4eF9kb19pb2N0bChpbm9kZSwgZmlscCwgZGV2LCBjbWQsIGFyZywKIAkJCQkgICAgICAgZW0yOHh4X3ZpZGVvX2RvX2lvY3RsKTsKQEAgLTE2MTgsMjUgKzE0NzYsMjUgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPmZpbGVvcF9sb2NrKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPmZpbGVvcF9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChkZXYtPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewogCQllbTI4eHhfZXJyZGV2KCJ2NGwyIGlvY3RsOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5maWxlb3BfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChkZXYtPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKIAkJZW0yOHh4X2VycmRldgogCQkgICAgKCJ2NGwyIGlvY3RsOiBkZXZpY2UgaXMgbWlzY29uZmlndXJlZDsgY2xvc2UgYW5kIG9wZW4gaXQgYWdhaW5cbiIpOwotCQl1cCgmZGV2LT5maWxlb3BfbG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5maWxlb3BfbG9jayk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCXJldCA9IHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxwLCBjbWQsIGFyZywgZW0yOHh4X3ZpZGVvX2RvX2lvY3RsKTsKIAotCXVwKCZkZXYtPmZpbGVvcF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+ZmlsZW9wX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2NzAsNyArMTUyOCw3IEBACiAKIAlkZXYtPnVkZXYgPSB1ZGV2OwogCWRldi0+bW9kZWwgPSBtb2RlbDsKLQlpbml0X01VVEVYKCZkZXYtPmxvY2spOworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5vcGVuKTsKIAogCWRldi0+ZW0yOHh4X3dyaXRlX3JlZ3MgPSBlbTI4eHhfd3JpdGVfcmVnczsKQEAgLTE3MjYsMTAgKzE1ODQsMTEgQEAKIAlkZXYtPnZwaWMuZGVwdGggPSAxNjsKIAlkZXYtPnZwaWMucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfWVVWNDIyOwogCisJZW0yOHh4X3ByZV9jYXJkX3NldHVwKGRldik7CiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKiByZXF1ZXN0IHNvbWUgbW9kdWxlcyAqLwogCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1NBQTcxMTMgfHwgZGV2LT5kZWNvZGVyID09IEVNMjhYWF9TQUE3MTE0KQotCQlyZXF1ZXN0X21vZHVsZSgic2FhNzExeCIpOworCQlyZXF1ZXN0X21vZHVsZSgic2FhNzExNSIpOwogCWlmIChkZXYtPmRlY29kZXIgPT0gRU0yOFhYX1RWUDUxNTApCiAJCXJlcXVlc3RfbW9kdWxlKCJ0dnA1MTUwIik7CiAJaWYgKGRldi0+aGFzX3R1bmVyKQpAQCAtMTc0MSwxMCArMTYwMCwxMSBAQAogCWlmIChlcnJDb2RlKSB7CiAJCWVtMjh4eF9lcnJkZXYoImVycm9yIGNvbmZpZ3VyaW5nIGRldmljZVxuIik7CiAJCWtmcmVlKGRldik7CisJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PGRldi0+ZGV2bm8pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkb3duKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJLyogcmVnaXN0ZXIgaTJjIGJ1cyAqLwogCWVtMjh4eF9pMmNfcmVnaXN0ZXIoZGV2KTsKIApAQCAtMTc1NCw3ICsxNjE0LDcgQEAKIAkvKiBjb25maWd1cmUgdGhlIGRldmljZSAqLwogCWVtMjh4eF9jb25maWdfaTJjKGRldik7CiAKLQl1cCgmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAllcnJDb2RlID0gZW0yOHh4X2NvbmZpZyhkZXYpOwogCkBAIC0xNzY3LDkgKzE2MjcsMzAgQEAKIAlpZiAoTlVMTCA9PSBkZXYtPnZkZXYpIHsKIAkJZW0yOHh4X2VycmRldigiY2Fubm90IGFsbG9jYXRlIHZpZGVvX2RldmljZS5cbiIpOwogCQlrZnJlZShkZXYpOworCQllbTI4eHhfZGV2dXNlZCY9figxPDxkZXYtPmRldm5vKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJZGV2LT52YmlfZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKE5VTEwgPT0gZGV2LT52YmlfZGV2KSB7CisJCWVtMjh4eF9lcnJkZXYoImNhbm5vdCBhbGxvY2F0ZSB2aWRlb19kZXZpY2UuXG4iKTsKKwkJa2ZyZWUoZGV2LT52ZGV2KTsKKwkJa2ZyZWUoZGV2KTsKKwkJZW0yOHh4X2RldnVzZWQmPX4oMTw8ZGV2LT5kZXZubyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEZpbGxzIFZCSSBkZXZpY2UgaW5mbyAqLworCWRldi0+dmJpX2Rldi0+dHlwZSA9IFZGTF9UWVBFX1ZCSTsKKwlkZXYtPnZiaV9kZXYtPmhhcmR3YXJlID0gMDsKKwlkZXYtPnZiaV9kZXYtPmZvcHMgPSAmZW0yOHh4X3Y0bF9mb3BzOworCWRldi0+dmJpX2Rldi0+bWlub3IgPSAtMTsKKwlkZXYtPnZiaV9kZXYtPmRldiA9ICZkZXYtPnVkZXYtPmRldjsKKwlkZXYtPnZiaV9kZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwlzbnByaW50ZihkZXYtPnZiaV9kZXYtPm5hbWUsIHNpemVvZihkZXYtPnZiaV9kZXYtPm5hbWUpLCAiJXMjJWQgJXMiLAorCQkJCQkJCSAiZW0yOHh4IixkZXYtPmRldm5vLCJ2YmkiKTsKKworCS8qIEZpbGxzIENBUFRVUkUgZGV2aWNlIGluZm8gKi8KIAlkZXYtPnZkZXYtPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFOwogCWlmIChkZXYtPmhhc190dW5lcikKIAkJZGV2LT52ZGV2LT50eXBlIHw9IFZJRF9UWVBFX1RVTkVSOwpAQCAtMTc3OCwyMSArMTY1OSwzOSBAQAogCWRldi0+dmRldi0+bWlub3IgPSAtMTsKIAlkZXYtPnZkZXYtPmRldiA9ICZkZXYtPnVkZXYtPmRldjsKIAlkZXYtPnZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKLQlzbnByaW50ZihkZXYtPnZkZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYtPm5hbWUpLCAiJXMiLAotCQkgImVtMjh4eCB2aWRlbyIpOworCXNucHJpbnRmKGRldi0+dmRldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmJpX2Rldi0+bmFtZSksICIlcyMlZCAlcyIsCisJCQkJCQkJICJlbTI4eHgiLGRldi0+ZGV2bm8sInZpZGVvIik7CisKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsJmVtMjh4eF9kZXZsaXN0KTsKIAogCS8qIHJlZ2lzdGVyIHY0bDIgZGV2aWNlICovCi0JZG93bigmZGV2LT5sb2NrKTsKLQlpZiAoKHJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKSkpIHsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWlmICgocmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwKKwkJCQkJIHZpZGVvX25yW2Rldi0+ZGV2bm9dKSkpIHsKIAkJZW0yOHh4X2VycmRldigidW5hYmxlIHRvIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAoZXJyb3I9JWkpLlxuIiwKIAkJCSAgICAgIHJldHZhbCk7Ci0JCXVwKCZkZXYtPmxvY2spOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOwogCQlrZnJlZShkZXYpOworCQllbTI4eHhfZGV2dXNlZCY9figxPDxkZXYtPmRldm5vKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYsIFZGTF9UWVBFX1ZCSSwKKwkJCQkJdmJpX25yW2Rldi0+ZGV2bm9dKSA8IDApIHsKKwkJcHJpbnRrKCJ1bmFibGUgdG8gcmVnaXN0ZXIgdmJpIGRldmljZVxuIik7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmJpX2Rldik7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldik7CisJCWtmcmVlKGRldik7CisJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PGRldi0+ZGV2bm8pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQlwcmludGsoInJlZ2lzdGVyZWQgVkJJXG4iKTsKKwl9CisKIAlpZiAoZGV2LT5oYXNfbXNwMzR4eCkgewogCQkvKiBTZW5kIGEgcmVzZXQgdG8gb3RoZXIgY2hpcHMgdmlhIGdwaW8gKi8KIAkJZW0yOHh4X3dyaXRlX3JlZ3NfcmVxKGRldiwgMHgwMCwgMHgwOCwgIlx4ZjciLCAxKTsKQEAgLTE4MDMsMTAgKzE3MDIsMTEgQEAKIAl9CiAJdmlkZW9fbXV4KGRldiwgMCk7CiAKLQl1cCgmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKLQllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsCi0JCSAgICBkZXYtPnZkZXYtPm1pbm9yKTsKKwllbTI4eHhfaW5mbygiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQgYW5kIC9kZXYvdmJpJWRcbiIsCisJCQkJZGV2LT52ZGV2LT5taW5vci1NSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTiwKKwkJCQlkZXYtPnZiaV9kZXYtPm1pbm9yLU1JTk9SX1ZGTF9UWVBFX1ZCSV9NSU4pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODI4LDYgKzE3MjgsOSBAQAogCXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOwogCWlmbnVtID0gaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZU51bWJlcjsKIAorCS8qIENoZWNrIHRvIHNlZSBuZXh0IGZyZWUgZGV2aWNlIGFuZCBtYXJrIGFzIHVzZWQgKi8KKwlucj1maW5kX2ZpcnN0X3plcm9fYml0KCZlbTI4eHhfZGV2dXNlZCxFTTI4WFhfTUFYQk9BUkRTKTsKKwllbTI4eHhfZGV2dXNlZHw9MTw8bnI7CiAKIAkvKiBEb24ndCByZWdpc3RlciBhdWRpbyBpbnRlcmZhY2VzICovCiAJaWYgKGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQVVESU8pIHsKQEAgLTE4MzUsNiArMTczOCw4IEBACiAJCQkJdWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcix1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCwKIAkJCQlpZm51bSwKIAkJCQlpbnRlcmZhY2UtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MpOworCisJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PG5yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xODQ5LDE4ICsxNzU0LDIwIEBACiAJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spICE9CiAJICAgIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKIAkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIHByb2JpbmcgZXJyb3I6IGVuZHBvaW50IGlzIG5vbi1JU08gZW5kcG9pbnQhXG4iKTsKKwkJZW0yOHh4X2RldnVzZWQmPX4oMTw8bnIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpIHsKIAkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiIHByb2JpbmcgZXJyb3I6IGVuZHBvaW50IGlzIElTTyBPVVQgZW5kcG9pbnQhXG4iKTsKKwkJZW0yOHh4X2RldnVzZWQmPX4oMTw8bnIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAltb2RlbD1pZC0+ZHJpdmVyX2luZm87Ci0JbnI9aW50ZXJmYWNlLT5taW5vcjsKIAotCWlmIChucj5FTTI4WFhfTUFYQk9BUkRTKSB7CisJaWYgKG5yID49IEVNMjhYWF9NQVhCT0FSRFMpIHsKIAkJcHJpbnRrIChEUklWRVJfTkFNRSAiOiBTdXBwb3J0cyBvbmx5ICVpIGVtMjh4eCBib2FyZHMuXG4iLEVNMjhYWF9NQVhCT0FSRFMpOworCQllbTI4eHhfZGV2dXNlZCY9figxPDxucik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTg2OCwxOSArMTc3NSwyNCBAQAogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZW0yOHh4X2VycihEUklWRVJfTkFNRSAiOiBvdXQgb2YgbWVtb3J5IVxuIik7CisJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PG5yKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJc25wcmludGYoZGV2LT5uYW1lLCAyOSwgImVtMjh4eCAjJWQiLCBucik7CisJZGV2LT5kZXZubz1ucjsKKwogCS8qIGNvbXB1dGUgYWx0ZXJuYXRlIG1heCBwYWNrZXQgc2l6ZXMgKi8KIAl1aWYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXTsKIAogCWRldi0+bnVtX2FsdD11aWYtPm51bV9hbHRzZXR0aW5nOwotCXByaW50ayhEUklWRVJfTkFNRSAiOiBBbHRlcm5hdGUgc2V0dGluZ3M6ICVpXG4iLGRldi0+bnVtX2FsdCk7CisJZW0yOHh4X2luZm8oIkFsdGVybmF0ZSBzZXR0aW5nczogJWlcbiIsZGV2LT5udW1fYWx0KTsKIC8vCWRldi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2Moc2l6ZW9mKCpkZXYtPmFsdF9tYXhfcGt0X3NpemUpKgogCWRldi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2MoMzIqCiAJCQkJCQlkZXYtPm51bV9hbHQsR0ZQX0tFUk5FTCk7CiAJaWYgKGRldi0+YWx0X21heF9wa3Rfc2l6ZSA9PSBOVUxMKSB7Ci0JCWVtMjh4eF9lcnIoRFJJVkVSX05BTUUgIjogb3V0IG9mIG1lbW9yeSFcbiIpOworCQllbTI4eHhfZXJyZGV2KCJvdXQgb2YgbWVtb3J5IVxuIik7CisJCWVtMjh4eF9kZXZ1c2VkJj1+KDE8PG5yKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xODg5LDI3ICsxODAxLDI2IEBACiAJCQkJCQkJd01heFBhY2tldFNpemUpOwogCQlkZXYtPmFsdF9tYXhfcGt0X3NpemVbaV0gPQogCQkgICAgKHRtcCAmIDB4MDdmZikgKiAoKCh0bXAgJiAweDE4MDApID4+IDExKSArIDEpOwotCQlwcmludGsoRFJJVkVSX05BTUUgIjogQWx0ZXJuYXRlIHNldHRpbmcgJWksIG1heCBzaXplPSAlaVxuIixpLAorCQllbTI4eHhfaW5mbygiQWx0ZXJuYXRlIHNldHRpbmcgJWksIG1heCBzaXplPSAlaVxuIixpLAogCQkJCQkJCWRldi0+YWx0X21heF9wa3Rfc2l6ZVtpXSk7CiAJfQogCi0Jc25wcmludGYoZGV2LT5uYW1lLCAyOSwgImVtMjh4eCAjJWQiLCBucik7Ci0KIAlpZiAoKGNhcmRbbnJdPj0wKSYmKGNhcmRbbnJdPGVtMjh4eF9iY291bnQpKQogCQltb2RlbD1jYXJkW25yXTsKIAogCWlmICgobW9kZWw9PUVNMjgwMF9CT0FSRF9VTktOT1dOKXx8KG1vZGVsPT1FTTI4MjBfQk9BUkRfVU5LTk9XTikpIHsKLQkJcHJpbnRrKCAiJXM6IFlvdXIgYm9hcmQgaGFzIG5vIGVlcHJvbSBpbnNpZGUgaXQgYW5kIHRodXMgY2FuJ3RcbiIKKwkJZW0yOHh4X2VycmRldiggIllvdXIgYm9hcmQgaGFzIG5vIGVlcHJvbSBpbnNpZGUgaXQgYW5kIHRodXMgY2FuJ3RcbiIKIAkJCSIlczogYmUgYXV0b2RldGVjdGVkLiAgUGxlYXNlIHBhc3MgY2FyZD08bj4gaW5zbW9kIG9wdGlvbiB0b1xuIgogCQkJIiVzOiB3b3JrYXJvdW5kIHRoYXQuICBSZWRpcmVjdCBjb21wbGFpbnRzIHRvIHRoZSB2ZW5kb3Igb2ZcbiIKLQkJCSIlczogdGhlIFRWIGNhcmQuICBCZXN0IHJlZ2FyZHMsXG4iCisJCQkiJXM6IHRoZSBUViBjYXJkLiBHZW5lcmljIHR5cGUgd2lsbCBiZSB1c2VkLiIKKwkJCSIlczogQmVzdCByZWdhcmRzLFxuIgogCQkJIiVzOiAgICAgICAgIC0tIHR1eFxuIiwKIAkJCWRldi0+bmFtZSxkZXYtPm5hbWUsZGV2LT5uYW1lLGRldi0+bmFtZSxkZXYtPm5hbWUpOwotCQlwcmludGsoIiVzOiBIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZD08bj4gaW5zbW9kIG9wdGlvbjpcbiIsCisJCWVtMjh4eF9lcnJkZXYoIiVzOiBIZXJlIGlzIGEgbGlzdCBvZiB2YWxpZCBjaG9pY2VzIGZvciB0aGUgY2FyZD08bj4gaW5zbW9kIG9wdGlvbjpcbiIsCiAJCQlkZXYtPm5hbWUpOwogCQlmb3IgKGkgPSAwOyBpIDwgZW0yOHh4X2Jjb3VudDsgaSsrKSB7Ci0JCQlwcmludGsoIiVzOiAgICBjYXJkPSVkIC0+ICVzXG4iLAotCQkJCWRldi0+bmFtZSwgaSwgZW0yOHh4X2JvYXJkc1tpXS5uYW1lKTsKKwkJCWVtMjh4eF9lcnJkZXYoIiAgICBjYXJkPSVkIC0+ICVzXG4iLCBpLAorCQkJCQkJCWVtMjh4eF9ib2FyZHNbaV0ubmFtZSk7CiAJCX0KIAl9CiAKQEAgLTE5MzUsMTUgKzE4NDYsMTIgQEAKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCi0vKkZJWE1FOiBJUiBzaG91bGQgYmUgZGlzY29ubmVjdGVkICovCi0KIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCi0KIAlkb3duX3dyaXRlKCZlbTI4eHhfZGlzY29ubmVjdCk7CiAKLQlkb3duKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKIAllbTI4eHhfaW5mbygiZGlzY29ubmVjdGluZyAlc1xuIiwgZGV2LT52ZGV2LT5uYW1lKTsKIApAQCAtMTk1Miw3ICsxODYwLDkgQEAKIAlpZiAoZGV2LT51c2VycykgewogCQllbTI4eHhfd2FybgogCQkgICAgKCJkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4hIERlcmVnaXN0cmF0aW9uIGFuZCBtZW1vcnkgIgotCQkgICAgICJkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLlxuIiwgZGV2LT52ZGV2LT5taW5vcik7CisJCSAgICAgImRlYWxsb2NhdGlvbiBhcmUgZGVmZXJyZWQgb24gY2xvc2UuXG4iLAorCQkJCWRldi0+dmRldi0+bWlub3ItTUlOT1JfVkZMX1RZUEVfR1JBQkJFUl9NSU4pOworCiAJCWRldi0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CiAJCWVtMjh4eF91bmluaXRfaXNvYyhkZXYpOwogCQlkZXYtPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CkBAIC0xOTYzLDcgKzE4NzMsNyBAQAogCQllbTI4eHhfcmVsZWFzZV9yZXNvdXJjZXMoZGV2KTsKIAl9CiAKLQl1cCgmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAlpZiAoIWRldi0+dXNlcnMpIHsKIAkJa2ZyZWUoZGV2LT5hbHRfbWF4X3BrdF9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggMzNkZTlkOC4uZTFkZGMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CiAKIC8qIEJvYXJkcyBzdXBwb3J0ZWQgYnkgZHJpdmVyICovCkBAIC00MSw2ICs0MiwxMCBAQAogI2RlZmluZSBFTTI4MDBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJICAgICAgNwogI2RlZmluZSBFTTI4MDBfQk9BUkRfS1dPUkxEX1VTQjI4MDAgICAgICAgICAgICAgOAogI2RlZmluZSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwCQk5CisjZGVmaW5lIEVNMjg4MF9CT0FSRF9IQVVQUEFVR0VfV0lOVFZfSFZSXzkwMAkxMAorI2RlZmluZSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfSFlCUklEX1hTCQkxMQorI2RlZmluZSBFTTI4MjBfQk9BUkRfS1dPUkxEX1BWUlRWMjgwMFJGCQkxMgorI2RlZmluZSBFTTI4ODBfQk9BUkRfVEVSUkFURUNfUFJPRElHWV9YUwkxMwogCiAjZGVmaW5lIFVOU0VUIC0xCiAKQEAgLTIwOSw2ICsyMTQsNyBAQAogCS8qIGdlbmVyaWMgZGV2aWNlIHByb3BlcnRpZXMgKi8KIAljaGFyIG5hbWVbMzBdOwkJLyogbmFtZSAoaW5jbHVkaW5nIG1pbm9yKSBvZiB0aGUgZGV2aWNlICovCiAJaW50IG1vZGVsOwkJLyogaW5kZXggaW4gdGhlIGRldmljZV9kYXRhIHN0cnVjdCAqLworCWludCBkZXZubzsJCS8qIG1hcmtzIHRoZSBudW1iZXIgb2YgdGhpcyBkZXZpY2UgKi8KIAl1bnNpZ25lZCBpbnQgaXNfZW0yODAwOwogCWludCB2aWRlb19pbnB1dHM7CS8qIG51bWJlciBvZiB2aWRlbyBpbnB1dHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWRldmxpc3Q7CkBAIC0yNTYsNyArMjYyLDcgQEAKIAllbnVtIGVtMjh4eF9zdHJlYW1fc3RhdGUgc3RyZWFtOwogCWVudW0gZW0yOHh4X2lvX21ldGhvZCBpbzsKIAkvKiBsb2NrcyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgbG9jaywgZmlsZW9wX2xvY2s7CisJc3RydWN0IG11dGV4IGxvY2ssIGZpbGVvcF9sb2NrOwogCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGlucXVldWUsIG91dHF1ZXVlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW4sIHdhaXRfZnJhbWUsIHdhaXRfc3RyZWFtOwpAQCAtMzI2LDYgKzMzMiw3IEBACiAKIC8qIFByb3ZpZGVkIGJ5IGVtMjh4eC1jYXJkcy5jICovCiBleHRlcm4gaW50IGVtMjgwMF92YXJpYW50X2RldGVjdChzdHJ1Y3QgdXNiX2RldmljZSogdWRldixpbnQgbW9kZWwpOworZXh0ZXJuIHZvaWQgZW0yOHh4X3ByZV9jYXJkX3NldHVwKHN0cnVjdCBlbTI4eHggKmRldik7CiBleHRlcm4gdm9pZCBlbTI4eHhfY2FyZF9zZXR1cChzdHJ1Y3QgZW0yOHh4ICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBlbTI4eHhfYm9hcmQgZW0yOHh4X2JvYXJkc1tdOwogZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVtMjh4eF9pZF90YWJsZVtdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmNGRiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACitldDYxeDI1MS1vYmpzICAgOj0gZXQ2MXgyNTFfY29yZS5vIGV0NjF4MjUxX3RhczUxMzBkMWIubworCitvYmotJChDT05GSUdfVVNCX0VUNjFYMjUxKSAgICAgICs9IGV0NjF4MjUxLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZXQ2MXgyNTEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTEuaApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9ldDYxeDI1MS5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxLmgKaW5kZXggNjUyMjM4Zi4uMmU1Y2E0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvZXQ2MXgyNTEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxLmgKQEAgLTMzLDcgKzMzLDkgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2luY2x1ZGUgImV0NjF4MjUxX3NlbnNvci5oIgogCkBAIC01MSw2ICs1Myw3IEBACiAjZGVmaW5lIEVUNjFYMjUxX0FMVEVSTkFURV9TRVRUSU5HICAgMTMKICNkZWZpbmUgRVQ2MVgyNTFfVVJCX1RJTUVPVVQgICAgICAgICBtc2Vjc190b19qaWZmaWVzKDIgKiBFVDYxWDI1MV9JU09fUEFDS0VUUykKICNkZWZpbmUgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUICAgICAgICAxMDAKKyNkZWZpbmUgRVQ2MVgyNTFfRlJBTUVfVElNRU9VVCAgICAgICAyCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTI3LDE1ICsxMzAsMTYgQEAKIAogc3RydWN0IGV0NjF4MjUxX21vZHVsZV9wYXJhbSB7CiAJdTggZm9yY2VfbXVubWFwOworCXUxNiBmcmFtZV90aW1lb3V0OwogfTsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoZXQ2MXgyNTFfc3lzZnNfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKGV0NjF4MjUxX3N5c2ZzX2xvY2spOwogc3RhdGljIERFQ0xBUkVfUldTRU0oZXQ2MXgyNTFfZGlzY29ubmVjdCk7CiAKIHN0cnVjdCBldDYxeDI1MV9kZXZpY2UgewogCXN0cnVjdCB2aWRlb19kZXZpY2UqIHY0bGRldjsKIAotCXN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHNlbnNvcjsKKwlzdHJ1Y3QgZXQ2MXgyNTFfc2Vuc29yIHNlbnNvcjsKIAogCXN0cnVjdCB1c2JfZGV2aWNlKiB1c2JkZXY7CiAJc3RydWN0IHVyYiogdXJiW0VUNjFYMjUxX1VSQlNdOwpAQCAtMTU3LDE5ICsxNjEsMjggQEAKIAllbnVtIGV0NjF4MjUxX2Rldl9zdGF0ZSBzdGF0ZTsKIAl1OCB1c2VyczsKIAotCXN0cnVjdCBzZW1hcGhvcmUgZGV2X3NlbSwgZmlsZW9wX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggZGV2X211dGV4LCBmaWxlb3BfbXV0ZXg7CiAJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW4sIHdhaXRfZnJhbWUsIHdhaXRfc3RyZWFtOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKgorZXQ2MXgyNTFfbWF0Y2hfaWQoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaWYgKHVzYl9tYXRjaF9pZCh1c2JfaWZudW1fdG9faWYoY2FtLT51c2JkZXYsIDApLCBpZCkpCisJCXJldHVybiBjYW07CisKKwlyZXR1cm4gTlVMTDsKK30KKworCiB2b2lkCiBldDYxeDI1MV9hdHRhY2hfc2Vuc29yKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0NjF4MjUxX3NlbnNvciogc2Vuc29yKQorCQkgICAgICAgc3RydWN0IGV0NjF4MjUxX3NlbnNvciogc2Vuc29yKQogewotCWNhbS0+c2Vuc29yID0gc2Vuc29yOwotCWNhbS0+c2Vuc29yLT51c2JkZXYgPSBjYW0tPnVzYmRldjsKKwltZW1jcHkoJmNhbS0+c2Vuc29yLCBzZW5zb3IsIHNpemVvZihzdHJ1Y3QgZXQ2MXgyNTFfc2Vuc29yKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE4Niw3ICsxOTksNyBAQAogCQkJZGV2X2luZm8oJmNhbS0+dXNiZGV2LT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgXAogCQllbHNlIGlmICgobGV2ZWwpID49IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJCWRldl9pbmZvKCZjYW0tPnVzYmRldi0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCAgICAgIFwKLQkJCSAgICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgIFwKKwkJCQkgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogIwlkZWZpbmUgS0RCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTk2LDcgKzIwOSw3IEBACiAJCQlwcl9pbmZvKCJldDYxeDI1MTogIiBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICBcCiAJCWVsc2UgaWYgKChsZXZlbCkgPT0gMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkJcHJfZGVidWcoImV0NjF4MjUxOiBbJXM6JWRdICIgZm10ICJcbiIsIF9fRlVOQ1RJT05fXywgXAotCQkJICAgICAgICAgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAjCWRlZmluZSBWNExEQkcobGV2ZWwsIG5hbWUsIGNtZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMTIsNyArMjI1LDggQEAKIAogI3VuZGVmIFBEQkcKICNkZWZpbmUgUERCRyhmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRldl9pbmZvKCZjYW0tPmRldiwgIlslczolZF0gIiBmbXQgIlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpCitkZXZfaW5mbygmY2FtLT51c2JkZXYtPmRldiwgIlslczolZF0gIiBmbXQgIlxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKQogCiAjdW5kZWYgUERCR0cKICNkZWZpbmUgUERCR0coZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCkgLyogcGxhY2Vob2xkZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2V0NjF4MjUxX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCnNpbWlsYXJpdHkgaW5kZXggODQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL2V0NjF4MjUxX2NvcmUuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKaW5kZXggMmMwMTcxYS4uZGZjOWRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvZXQ2MXgyNTFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jCkBAIC0yNSwxMSArMjUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CkBAIC00NiwxMiArNDQsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBFVDYxWDI1MV9NT0RVTEVfTkFNRSAgICAiVjRMMiBkcml2ZXIgZm9yIEVUNjFYWzEyXTUxICIgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEMgQ2FtZXJhIENvbnRyb2xsZXJzIgorCQkJCSJQQyBDYW1lcmEgQ29udHJvbGxlcnMiCiAjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9BVVRIT1IgICIoQykgMjAwNiBMdWNhIFJpc29saWEiCiAjZGVmaW5lIEVUNjFYMjUxX0FVVEhPUl9FTUFJTCAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCiAjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9MSUNFTlNFICJHUEwiCi0jZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OICIxOjEuMDEiCi0jZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OX0NPREUgIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDEpCisjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OICIxOjEuMDIiCisjZGVmaW5lIEVUNjFYMjUxX01PRFVMRV9WRVJTSU9OX0NPREUgIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDIpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNjUsNTggKzYzLDY4IEBACiBzdGF0aWMgc2hvcnQgdmlkZW9fbnJbXSA9IHtbMCAuLi4gRVQ2MVgyNTFfTUFYX0RFVklDRVMtMV0gPSAtMX07CiBtb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIHNob3J0LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsCi0gICAgICAgICAgICAgICAgICJcbjwtMXxuWywuLi5dPiBTcGVjaWZ5IFY0TDIgbWlub3IgbW9kZSBudW1iZXIuIgotICAgICAgICAgICAgICAgICAiXG4gLTEgPSB1c2UgbmV4dCBhdmFpbGFibGUgKGRlZmF1bHQpIgotICAgICAgICAgICAgICAgICAiXG4gIG4gPSB1c2UgbWlub3IgbnVtYmVyIG4gKGludGVnZXIgPj0gMCkiCi0gICAgICAgICAgICAgICAgICJcbllvdSBjYW4gc3BlY2lmeSB1cCB0byAiCi0gICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhFVDYxWDI1MV9NQVhfREVWSUNFUykgIiBjYW1lcmFzIHRoaXMgd2F5LiIKLSAgICAgICAgICAgICAgICAgIlxuRm9yIGV4YW1wbGU6IgotICAgICAgICAgICAgICAgICAiXG52aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byIKLSAgICAgICAgICAgICAgICAgIlxudGhlIHNlY29uZCByZWdpc3RlcmVkIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCIKLSAgICAgICAgICAgICAgICAgIlxub25lIGFuZCBmb3IgZXZlcnkgb3RoZXIgY2FtZXJhLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48LTF8blssLi4uXT4gU3BlY2lmeSBWNEwyIG1pbm9yIG1vZGUgbnVtYmVyLiIKKwkJICJcbiAtMSA9IHVzZSBuZXh0IGF2YWlsYWJsZSAoZGVmYXVsdCkiCisJCSAiXG4gIG4gPSB1c2UgbWlub3IgbnVtYmVyIG4gKGludGVnZXIgPj0gMCkiCisJCSAiXG5Zb3UgY2FuIHNwZWNpZnkgdXAgdG8gIgorCQkgX19NT0RVTEVfU1RSSU5HKEVUNjFYMjUxX01BWF9ERVZJQ0VTKSAiIGNhbWVyYXMgdGhpcyB3YXkuIgorCQkgIlxuRm9yIGV4YW1wbGU6IgorCQkgIlxudmlkZW9fbnI9LTEsMiwtMSB3b3VsZCBhc3NpZ24gbWlub3IgbnVtYmVyIDIgdG8iCisJCSAiXG50aGUgc2Vjb25kIHJlZ2lzdGVyZWQgY2FtZXJhIGFuZCB1c2UgYXV0byBmb3IgdGhlIGZpcnN0IgorCQkgIlxub25lIGFuZCBmb3IgZXZlcnkgb3RoZXIgY2FtZXJhLiIKKwkJICJcbiIpOwogCiBzdGF0aWMgc2hvcnQgZm9yY2VfbXVubWFwW10gPSB7WzAgLi4uIEVUNjFYMjUxX01BWF9ERVZJQ0VTLTFdID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVDYxWDI1MV9GT1JDRV9NVU5NQVB9OworCQkJICAgICAgIEVUNjFYMjUxX0ZPUkNFX01VTk1BUH07CiBtb2R1bGVfcGFyYW1fYXJyYXkoZm9yY2VfbXVubWFwLCBib29sLCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2VfbXVubWFwLAotICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBGb3JjZSB0aGUgYXBwbGljYXRpb24gdG8gdW5tYXAgcHJldmlvdXNseSIKLSAgICAgICAgICAgICAgICAgIlxubWFwcGVkIGJ1ZmZlciBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgYW55IFZJRElPQ19TX0NST1Agb3IiCi0gICAgICAgICAgICAgICAgICJcblZJRElPQ19TX0ZNVCBpb2N0bCdzLiBOb3QgYWxsIHRoZSBhcHBsaWNhdGlvbnMgc3VwcG9ydCIKLSAgICAgICAgICAgICAgICAgIlxudGhpcyBmZWF0dXJlLiBUaGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpYyBmb3IgZWFjaCIKLSAgICAgICAgICAgICAgICAgIlxuZGV0ZWN0ZWQgY2FtZXJhLiIKLSAgICAgICAgICAgICAgICAgIlxuIDAgPSBkbyBub3QgZm9yY2UgbWVtb3J5IHVubWFwcGluZyIKLSAgICAgICAgICAgICAgICAgIlxuIDEgPSBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIChzYXZlIG1lbW9yeSkiCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX0ZPUkNFX01VTk1BUCkiLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48MHwxWywuLi5dPiBGb3JjZSB0aGUgYXBwbGljYXRpb24gdG8gdW5tYXAgcHJldmlvdXNseSIKKwkJICJcbm1hcHBlZCBidWZmZXIgbWVtb3J5IGJlZm9yZSBjYWxsaW5nIGFueSBWSURJT0NfU19DUk9QIG9yIgorCQkgIlxuVklESU9DX1NfRk1UIGlvY3RsJ3MuIE5vdCBhbGwgdGhlIGFwcGxpY2F0aW9ucyBzdXBwb3J0IgorCQkgIlxudGhpcyBmZWF0dXJlLiBUaGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpYyBmb3IgZWFjaCIKKwkJICJcbmRldGVjdGVkIGNhbWVyYS4iCisJCSAiXG4gMCA9IGRvIG5vdCBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIgorCQkgIlxuIDEgPSBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIChzYXZlIG1lbW9yeSkiCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9GT1JDRV9NVU5NQVApIi4iCisJCSAiXG4iKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBmcmFtZV90aW1lb3V0W10gPSB7WzAgLi4uIEVUNjFYMjUxX01BWF9ERVZJQ0VTLTFdID0KKwkJCQkgICAgICAgRVQ2MVgyNTFfRlJBTUVfVElNRU9VVH07Cittb2R1bGVfcGFyYW1fYXJyYXkoZnJhbWVfdGltZW91dCwgdWludCwgTlVMTCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZyYW1lX3RpbWVvdXQsCisJCSAiXG48blssLi4uXT4gVGltZW91dCBmb3IgYSB2aWRlbyBmcmFtZSBpbiBzZWNvbmRzLiIKKwkJICJcblRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIGZvciBlYWNoIGRldGVjdGVkIGNhbWVyYS4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICIKKwkJIF9fTU9EVUxFX1NUUklORyhFVDYxWDI1MV9GUkFNRV9USU1FT1VUKSIuIgorCQkgIlxuIik7CiAKICNpZmRlZiBFVDYxWDI1MV9ERUJVRwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlYnVnID0gRVQ2MVgyNTFfREVCVUdfTEVWRUw7CiBtb2R1bGVfcGFyYW0oZGVidWcsIHVzaG9ydCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAotICAgICAgICAgICAgICAgICAiXG48bj4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gMzoiCi0gICAgICAgICAgICAgICAgICJcbjAgPSBub25lICh1c2UgY2FyZWZ1bGx5KSIKLSAgICAgICAgICAgICAgICAgIlxuMSA9IGNyaXRpY2FsIGVycm9ycyIKLSAgICAgICAgICAgICAgICAgIlxuMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9ucyIKLSAgICAgICAgICAgICAgICAgIlxuMyA9IG1vcmUgdmVyYm9zZSBtZXNzYWdlcyIKLSAgICAgICAgICAgICAgICAgIlxuTGV2ZWwgMyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5ICIKLSAgICAgICAgICAgICAgICAgIm9uZSBkZXZpY2UgaXMgdXNlZC4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhFVDYxWDI1MV9ERUJVR19MRVZFTCkiLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48bj4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gMzoiCisJCSAiXG4wID0gbm9uZSAodXNlIGNhcmVmdWxseSkiCisJCSAiXG4xID0gY3JpdGljYWwgZXJyb3JzIgorCQkgIlxuMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9ucyIKKwkJICJcbjMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMiCisJCSAiXG5MZXZlbCAzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBvbmx5LCB3aGVuIG9ubHkgIgorCQkgIm9uZSBkZXZpY2UgaXMgdXNlZC4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoRVQ2MVgyNTFfREVCVUdfTEVWRUwpIi4iCisJCSAiXG4iKTsKICNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyB1MzIKIGV0NjF4MjUxX3JlcXVlc3RfYnVmZmVycyhzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0sIHUzMiBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGV0NjF4MjUxX2lvX21ldGhvZCBpbykKKwkJCSBlbnVtIGV0NjF4MjUxX2lvX21ldGhvZCBpbykKIHsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwID0gJihjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdCk7Ci0Jc3RydWN0IHY0bDJfcmVjdCogciA9ICYoY2FtLT5zZW5zb3ItPmNyb3BjYXAuYm91bmRzKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwID0gJihjYW0tPnNlbnNvci5waXhfZm9ybWF0KTsKKwlzdHJ1Y3QgdjRsMl9yZWN0KiByID0gJihjYW0tPnNlbnNvci5jcm9wY2FwLmJvdW5kcyk7CiAJY29uc3Qgc2l6ZV90IGltYWdlc2l6ZSA9IGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCB8fAotCSAgICAgICAgICAgICAgICAgICAgICAgICBpbyA9PSBJT19SRUFEID8KLQkgICAgICAgICAgICAgICAgICAgICAgICAgKHAtPndpZHRoICogcC0+aGVpZ2h0ICogcC0+cHJpdikgLyA4IDoKLQkgICAgICAgICAgICAgICAgICAgICAgICAgKHItPndpZHRoICogci0+aGVpZ2h0ICogcC0+cHJpdikgLyA4OworCQkJCSBpbyA9PSBJT19SRUFEID8KKwkJCQkgKHAtPndpZHRoICogcC0+aGVpZ2h0ICogcC0+cHJpdikgLyA4IDoKKwkJCQkgKHItPndpZHRoICogci0+aGVpZ2h0ICogcC0+cHJpdikgLyA4OwogCXZvaWQqIGJ1ZmYgPSBOVUxMOwogCXUzMiBpOwogCkBAIC0yMDgsNyArMjE2LDcgQEAKIAkqYnVmZiA9IHZhbHVlOwogCiAJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwMCwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgICAgMCwgaW5kZXgsIGJ1ZmYsIDEsIEVUNjFYMjUxX0NUUkxfVElNRU9VVCk7CisJCQkgICAgICAwLCBpbmRleCwgYnVmZiwgMSwgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkgewogCQlEQkcoMywgIkZhaWxlZCB0byB3cml0ZSBhIHJlZ2lzdGVyICh2YWx1ZSAweCUwMlgsIGluZGV4ICIKIAkJICAgICAgICIweCUwMlgsIGVycm9yICVkKSIsIHZhbHVlLCBpbmRleCwgcmVzKTsKQEAgLTIyNiw3ICsyMzQsNyBAQAogCWludCByZXM7CiAKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweGMxLAotCSAgICAgICAgICAgICAgICAgICAgICAwLCBpbmRleCwgYnVmZiwgMSwgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUKTsKKwkJCSAgICAgIDAsIGluZGV4LCBidWZmLCAxLCBFVDYxWDI1MV9DVFJMX1RJTUVPVVQpOwogCWlmIChyZXMgPCAwKQogCQlEQkcoMywgIkZhaWxlZCB0byByZWFkIGEgcmVnaXN0ZXIgKGluZGV4IDB4JTAyWCwgZXJyb3IgJWQpIiwKIAkJICAgIGluZGV4LCByZXMpOwpAQCAtMjYxLDI1ICsyNjksMjUgQEAKIAogaW50CiBldDYxeDI1MV9pMmNfdHJ5X3JlYWQoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHNlbnNvciwgdTggYWRkcmVzcykKKwkJICAgICAgc3RydWN0IGV0NjF4MjUxX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzKQogewogCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CiAJdTgqIGRhdGEgPSBjYW0tPmNvbnRyb2xfYnVmZmVyOwogCWludCBlcnIgPSAwLCByZXM7CiAKIAlkYXRhWzBdID0gYWRkcmVzczsKLQlkYXRhWzFdID0gY2FtLT5zZW5zb3ItPmkyY19zbGF2ZV9pZDsKLQlkYXRhWzJdID0gY2FtLT5zZW5zb3ItPnJzdGEgfCAweDEwOworCWRhdGFbMV0gPSBjYW0tPnNlbnNvci5pMmNfc2xhdmVfaWQ7CisJZGF0YVsyXSA9IGNhbS0+c2Vuc29yLnJzdGEgfCAweDEwOwogCWRhdGFbM10gPSAhKGV0NjF4MjUxX3JlYWRfcmVnKGNhbSwgMHg4YikgJiAweDAyKTsKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgICAwLCAweDg4LCBkYXRhLCA0LCBFVDYxWDI1MV9DVFJMX1RJTUVPVVQpOworCQkJICAgICAgMCwgMHg4OCwgZGF0YSwgNCwgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkKIAkJZXJyICs9IHJlczsKIAogCWVyciArPSBldDYxeDI1MV9pMmNfd2FpdChjYW0sIHNlbnNvcik7CiAKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweGMxLAotCSAgICAgICAgICAgICAgICAgICAgICAwLCAweDgwLCBkYXRhLCA4LCBFVDYxWDI1MV9DVFJMX1RJTUVPVVQpOworCQkJICAgICAgMCwgMHg4MCwgZGF0YSwgOCwgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkKIAkJZXJyICs9IHJlczsKIApAQCAtMjk0LDIzICszMDIsMjMgQEAKIAogaW50CiBldDYxeDI1MV9pMmNfdHJ5X3dyaXRlKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0NjF4MjUxX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSkKKwkJICAgICAgIHN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHNlbnNvciwgdTggYWRkcmVzcywgdTggdmFsdWUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKIAl1OCogZGF0YSA9IGNhbS0+Y29udHJvbF9idWZmZXI7CiAJaW50IGVyciA9IDAsIHJlczsKIAogCWRhdGFbMF0gPSBhZGRyZXNzOwotCWRhdGFbMV0gPSBjYW0tPnNlbnNvci0+aTJjX3NsYXZlX2lkOwotCWRhdGFbMl0gPSBjYW0tPnNlbnNvci0+cnN0YSB8IDB4MTI7CisJZGF0YVsxXSA9IGNhbS0+c2Vuc29yLmkyY19zbGF2ZV9pZDsKKwlkYXRhWzJdID0gY2FtLT5zZW5zb3IucnN0YSB8IDB4MTI7CiAJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwMCwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgICAgMCwgMHg4OCwgZGF0YSwgMywgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUKTsKKwkJCSAgICAgIDAsIDB4ODgsIGRhdGEsIDMsIEVUNjFYMjUxX0NUUkxfVElNRU9VVCk7CiAJaWYgKHJlcyA8IDApCiAJCWVyciArPSByZXM7CiAKIAlkYXRhWzBdID0gdmFsdWU7CiAJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwMCwgMHg0MSwKLQkgICAgICAgICAgICAgICAgICAgICAgMCwgMHg4MCwgZGF0YSwgMSwgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUKTsKKwkJCSAgICAgIDAsIDB4ODAsIGRhdGEsIDEsIEVUNjFYMjUxX0NUUkxfVElNRU9VVCk7CiAJaWYgKHJlcyA8IDApCiAJCWVyciArPSByZXM7CiAKQEAgLTMyNywxNiArMzM1LDEzIEBACiAKIGludAogZXQ2MXgyNTFfaTJjX3Jhd193cml0ZShzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0sIHU4IG4sIHU4IGRhdGExLCB1OCBkYXRhMiwKLSAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTMsIHU4IGRhdGE0LCB1OCBkYXRhNSwgdTggZGF0YTYsIHU4IGRhdGE3LAotICAgICAgICAgICAgICAgICAgICAgICB1OCBkYXRhOCwgdTggYWRkcmVzcykKKwkJICAgICAgIHU4IGRhdGEzLCB1OCBkYXRhNCwgdTggZGF0YTUsIHU4IGRhdGE2LCB1OCBkYXRhNywKKwkJICAgICAgIHU4IGRhdGE4LCB1OCBhZGRyZXNzKQogewogCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CiAJdTgqIGRhdGEgPSBjYW0tPmNvbnRyb2xfYnVmZmVyOwogCWludCBlcnIgPSAwLCByZXM7CiAKLQlpZiAoIWNhbS0+c2Vuc29yKQotCQlyZXR1cm4gLTE7Ci0KIAlkYXRhWzBdID0gZGF0YTI7CiAJZGF0YVsxXSA9IGRhdGEzOwogCWRhdGFbMl0gPSBkYXRhNDsKQEAgLTM0NSwzMCArMzUwLDMwIEBACiAJZGF0YVs1XSA9IGRhdGE3OwogCWRhdGFbNl0gPSBkYXRhODsKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgICAwLCAweDgxLCBkYXRhLCBuLTEsIEVUNjFYMjUxX0NUUkxfVElNRU9VVCk7CisJCQkgICAgICAwLCAweDgxLCBkYXRhLCBuLTEsIEVUNjFYMjUxX0NUUkxfVElNRU9VVCk7CiAJaWYgKHJlcyA8IDApCiAJCWVyciArPSByZXM7CiAKIAlkYXRhWzBdID0gYWRkcmVzczsKLQlkYXRhWzFdID0gY2FtLT5zZW5zb3ItPmkyY19zbGF2ZV9pZDsKLQlkYXRhWzJdID0gY2FtLT5zZW5zb3ItPnJzdGEgfCAweDAyIHwgKG4gPDwgNCk7CisJZGF0YVsxXSA9IGNhbS0+c2Vuc29yLmkyY19zbGF2ZV9pZDsKKwlkYXRhWzJdID0gY2FtLT5zZW5zb3IucnN0YSB8IDB4MDIgfCAobiA8PCA0KTsKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgICAwLCAweDg4LCBkYXRhLCAzLCBFVDYxWDI1MV9DVFJMX1RJTUVPVVQpOworCQkJICAgICAgMCwgMHg4OCwgZGF0YSwgMywgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkKIAkJZXJyICs9IHJlczsKIAogCS8qIFN0YXJ0IHdyaXRpbmcgdGhyb3VnaCB0aGUgc2VyaWFsIGludGVyZmFjZSAqLwogCWRhdGFbMF0gPSBkYXRhMTsKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgICAwLCAweDgwLCBkYXRhLCAxLCBFVDYxWDI1MV9DVFJMX1RJTUVPVVQpOworCQkJICAgICAgMCwgMHg4MCwgZGF0YSwgMSwgRVQ2MVgyNTFfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkKIAkJZXJyICs9IHJlczsKIAotCWVyciArPSBldDYxeDI1MV9pMmNfd2FpdChjYW0sIGNhbS0+c2Vuc29yKTsKKwllcnIgKz0gZXQ2MXgyNTFfaTJjX3dhaXQoY2FtLCAmY2FtLT5zZW5zb3IpOwogCiAJaWYgKGVycikKIAkJREJHKDMsICJJMkMgcmF3IHdyaXRlIGZhaWxlZCBmb3IgJXMgaW1hZ2Ugc2Vuc29yIiwKLQkJICAgIGNhbS0+c2Vuc29yLT5uYW1lKTsKKwkJICAgIGNhbS0+c2Vuc29yLm5hbWUpOwogCiAJUERCR0coIkkyQyByYXcgd3JpdGU6ICV1IGJ5dGVzLCBhZGRyZXNzID0gMHglMDJYLCBkYXRhMSA9IDB4JTAyWCwgIgogCSAgICAgICJkYXRhMiA9IDB4JTAyWCwgZGF0YTMgPSAweCUwMlgsIGRhdGE0ID0gMHglMDJYLCBkYXRhNSA9IDB4JTAyWCwiCkBAIC0zODIsMTkgKzM4NywxMyBAQAogCiBpbnQgZXQ2MXgyNTFfaTJjX3JlYWQoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCB1OCBhZGRyZXNzKQogewotCWlmICghY2FtLT5zZW5zb3IpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiBldDYxeDI1MV9pMmNfdHJ5X3JlYWQoY2FtLCBjYW0tPnNlbnNvciwgYWRkcmVzcyk7CisJcmV0dXJuIGV0NjF4MjUxX2kyY190cnlfcmVhZChjYW0sICZjYW0tPnNlbnNvciwgYWRkcmVzcyk7CiB9CiAKIAogaW50IGV0NjF4MjUxX2kyY193cml0ZShzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0sIHU4IGFkZHJlc3MsIHU4IHZhbHVlKQogewotCWlmICghY2FtLT5zZW5zb3IpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiBldDYxeDI1MV9pMmNfdHJ5X3dyaXRlKGNhbSwgY2FtLT5zZW5zb3IsIGFkZHJlc3MsIHZhbHVlKTsKKwlyZXR1cm4gZXQ2MXgyNTFfaTJjX3RyeV93cml0ZShjYW0sICZjYW0tPnNlbnNvciwgYWRkcmVzcywgdmFsdWUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MTcsNyArNDE2LDcgQEAKIAkJaWYgKCgqZikpCiAJCQkoKmYpLT5zdGF0ZSA9IEZfUVVFVUVEOwogCQlEQkcoMywgIlN0cmVhbSBpbnRlcnJ1cHRlZCIpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9zdHJlYW0pOworCQl3YWtlX3VwKCZjYW0tPndhaXRfc3RyZWFtKTsKIAl9CiAKIAlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpCkBAIC00MzMsMTEgKzQzMiwxMSBAQAogCiAJaWYgKCEoKmYpKQogCQkoKmYpID0gbGlzdF9lbnRyeShjYW0tPmlucXVldWUubmV4dCwgc3RydWN0IGV0NjF4MjUxX2ZyYW1lX3QsCi0JCSAgICAgICAgICAgICAgICAgIGZyYW1lKTsKKwkJCQkgIGZyYW1lKTsKIAotCWltYWdlc2l6ZSA9IChjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC53aWR0aCAqCi0JICAgICAgICAgICAgIGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LmhlaWdodCAqCi0JICAgICAgICAgICAgIGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LnByaXYpIC8gODsKKwlpbWFnZXNpemUgPSAoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC53aWR0aCAqCisJCSAgICAgY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5oZWlnaHQgKgorCQkgICAgIGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucHJpdikgLyA4OwogCiAJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgbGVuLCBzdGF0dXM7CkBAIC00NzYsOCArNDc1LDggQEAKIAogCQlpZiAoKCpmKS0+c3RhdGUgPT0gRl9HUkFCQklORykgewogCQkJaWYgKHNvZiAmJiAoKmYpLT5idWYuYnl0ZXN1c2VkKSB7Ci0JCQkJaWYgKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LnBpeGVsZm9ybWF0ID09Ci0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFY0TDJfUElYX0ZNVF9FVDYxWDI1MSkKKwkJCQlpZiAoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PQorCQkJCQkJCSBWNEwyX1BJWF9GTVRfRVQ2MVgyNTEpCiAJCQkJCWdvdG8gZW5kX29mX2ZyYW1lOwogCQkJCWVsc2UgewogCQkJCQlEQkcoMywgIk5vdCBleHBlY3RlZCBTT0YgZGV0ZWN0ZWQgIgpAQCAtNTA5LDggKzUwOCw4IEBACiAJCQkJbGlzdF9tb3ZlX3RhaWwoJigqZiktPmZyYW1lLCAmY2FtLT5vdXRxdWV1ZSk7CiAJCQkJaWYgKCFsaXN0X2VtcHR5KCZjYW0tPmlucXVldWUpKQogCQkJCQkoKmYpID0gbGlzdF9lbnRyeShjYW0tPmlucXVldWUubmV4dCwKLQkJCQkJICAgICAgICAgICAgICAgc3RydWN0IGV0NjF4MjUxX2ZyYW1lX3QsCi0JCQkJCSAgICAgICAgICAgICAgICAgIGZyYW1lKTsKKwkJCQkJCSAgICAgICBzdHJ1Y3QgZXQ2MXgyNTFfZnJhbWVfdCwKKwkJCQkJCQkgIGZyYW1lKTsKIAkJCQllbHNlCiAJCQkJCSgqZikgPSBOVUxMOwogCQkJCXNwaW5fdW5sb2NrKCZjYW0tPnF1ZXVlX2xvY2spOwpAQCAtNTIxLDggKzUyMCw4IEBACiAJCQkJCWdvdG8gcmVzdWJtaXRfdXJiOwogCiAJCQkJaWYgKHNvZiAmJgotCQkJCSAgICBjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PQotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX1BJWF9GTVRfRVQ2MVgyNTEpCisJCQkJICAgIGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0KKwkJCQkJCQkgVjRMMl9QSVhfRk1UX0VUNjFYMjUxKQogCQkJCQlnb3RvIHN0YXJ0X29mX2ZyYW1lOwogCQkJfQogCQl9CkBAIC01NDUsMTUgKzU0NCwxNSBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT51c2JkZXY7CiAJc3RydWN0IHVyYiogdXJiOwogCWNvbnN0IHVuc2lnbmVkIGludCB3TWF4UGFja2V0U2l6ZVtdID0gezAsIDI1NiwgMzg0LCA1MTIsIDY0MCwgNzY4LCA4MzIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODY0LCA4OTYsIDkyMCwgOTU2LCA5ODAsIDEwMDAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyMn07CisJCQkJCSAgICAgICA4NjQsIDg5NiwgOTIwLCA5NTYsIDk4MCwgMTAwMCwKKwkJCQkJICAgICAgIDEwMjJ9OwogCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSB3TWF4UGFja2V0U2l6ZVtFVDYxWDI1MV9BTFRFUk5BVEVfU0VUVElOR107CiAJczggaSwgajsKIAlpbnQgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBFVDYxWDI1MV9VUkJTOyBpKyspIHsKIAkJY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPSBremFsbG9jKEVUNjFYMjUxX0lTT19QQUNLRVRTICogcHN6LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CisJCQkJCQkgIEdGUF9LRVJORUwpOwogCQlpZiAoIWNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJREJHKDEsICJOb3QgZW5vdWdoIG1lbW9yeSIpOwpAQCAtNjUwLDIxICs2NDksMjEgQEAKIAogc3RhdGljIGludCBldDYxeDI1MV9zdHJlYW1faW50ZXJydXB0KHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSkKIHsKLQlpbnQgZXJyID0gMDsKKwlsb25nIHRpbWVvdXQ7CiAKIAljYW0tPnN0cmVhbSA9IFNUUkVBTV9JTlRFUlJVUFQ7Ci0JZXJyID0gd2FpdF9ldmVudF90aW1lb3V0KGNhbS0+d2FpdF9zdHJlYW0sCi0JICAgICAgICAgICAgICAgICAgICAgICAgIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT0ZGKSB8fAotCSAgICAgICAgICAgICAgICAgICAgICAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpLAotCSAgICAgICAgICAgICAgICAgICAgICAgICBFVDYxWDI1MV9VUkJfVElNRU9VVCk7CisJdGltZW91dCA9IHdhaXRfZXZlbnRfdGltZW91dChjYW0tPndhaXRfc3RyZWFtLAorCQkJCSAgICAgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PRkYpIHx8CisJCQkJICAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpLAorCQkJCSAgICAgRVQ2MVgyNTFfVVJCX1RJTUVPVVQpOwogCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JZWxzZSBpZiAoZXJyKSB7CisJZWxzZSBpZiAoY2FtLT5zdHJlYW0gIT0gU1RSRUFNX09GRikgewogCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOwogCQlEQkcoMSwgIlVSQiB0aW1lb3V0IHJlYWNoZWQuIFRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gVG8gIgogCQkgICAgICAgInVzZSBpdCwgY2xvc2UgYW5kIG9wZW4gL2Rldi92aWRlbyVkIGFnYWluLiIsCiAJCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOwotCQlyZXR1cm4gZXJyOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTcwMCw3ICs2OTksNyBAQAogCiAvKgogICAgTk9URSAxOiBiZWluZyBpbnNpZGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbXBsaWVzIHRoYXQgdGhlIHY0bAotICAgICAgICAgICBkZXZpY2UgZXhpc3RzIGZvciBzdXJlIChzZWUga29iamVjdHMgYW5kIHJlZmVyZW5jZSBjb3VudGVycykKKwkgICBkZXZpY2UgZXhpc3RzIGZvciBzdXJlIChzZWUga29iamVjdHMgYW5kIHJlZmVyZW5jZSBjb3VudGVycykKICAgIE5PVEUgMjogYnVmZmVycyBhcmUgUEFHRV9TSVpFIGxvbmcKICovCiAKQEAgLTcwOSwxOCArNzA4LDE4IEBACiAJc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtOwogCXNzaXplX3QgY291bnQ7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZldDYxeDI1MV9zeXNmc19sb2NrKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZldDYxeDI1MV9zeXNmc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOwogCWlmICghY2FtKSB7Ci0JCXVwKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJY291bnQgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBjYW0tPnN5c2ZzLnJlZyk7CiAKLQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTczMywxOCArNzMyLDE4IEBACiAJdTggaW5kZXg7CiAJc3NpemVfdCBjb3VudDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmV0NjF4MjUxX3N5c2ZzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmV0NjF4MjUxX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CiAJaWYgKCFjYW0pIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpbmRleCA9IGV0NjF4MjUxX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CiAJaWYgKGluZGV4ID4gMHg4ZSB8fCAhY291bnQpIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTc1Myw3ICs3NTIsNyBAQAogCURCRygyLCAiTW92ZWQgRVQ2MVhbMTJdNTEgcmVnaXN0ZXIgaW5kZXggdG8gMHglMDJYIiwgY2FtLT5zeXNmcy5yZWcpOwogCURCRygzLCAiV3JpdHRlbiBieXRlczogJXpkIiwgY291bnQpOwogCi0JdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCW11dGV4X3VubG9jaygmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC03NjUsMTcgKzc2NCwxNyBAQAogCXNzaXplX3QgY291bnQ7CiAJaW50IHZhbDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmV0NjF4MjUxX3N5c2ZzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmV0NjF4MjUxX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CiAJaWYgKCFjYW0pIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoKHZhbCA9IGV0NjF4MjUxX3JlYWRfcmVnKGNhbSwgY2FtLT5zeXNmcy5yZWcpKSA8IDApIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTc4Myw3ICs3ODIsNyBAQAogCiAJREJHKDMsICJSZWFkIGJ5dGVzOiAlemQiLCBjb3VudCk7CiAKLQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTc5NywyNCArNzk2LDI0IEBACiAJc3NpemVfdCBjb3VudDsKIAlpbnQgZXJyOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZXQ2MXgyNTFfc3lzZnNfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZXQ2MXgyNTFfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKIAlpZiAoIWNhbSkgewotCQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJCW11dGV4X3VubG9jaygmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXZhbHVlID0gZXQ2MXgyNTFfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKIAlpZiAoIWNvdW50KSB7Ci0JCXVwKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZXJyID0gZXQ2MXgyNTFfd3JpdGVfcmVnKGNhbSwgdmFsdWUsIGNhbS0+c3lzZnMucmVnKTsKIAlpZiAoZXJyKSB7Ci0JCXVwKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC04MjIsNyArODIxLDcgQEAKIAkgICAgY2FtLT5zeXNmcy5yZWcsIHZhbHVlKTsKIAlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KTsKIAotCXVwKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKKwltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtODMzLDEyICs4MzIsMTIgQEAKIAlzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW07CiAJc3NpemVfdCBjb3VudDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmV0NjF4MjUxX3N5c2ZzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmV0NjF4MjUxX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CiAJaWYgKCFjYW0pIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTg0Niw3ICs4NDUsNyBAQAogCiAJREJHKDMsICJSZWFkIGJ5dGVzOiAlemQiLCBjb3VudCk7CiAKLQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTg1OSwxOCArODU4LDE4IEBACiAJdTggaW5kZXg7CiAJc3NpemVfdCBjb3VudDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmV0NjF4MjUxX3N5c2ZzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmV0NjF4MjUxX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CiAJaWYgKCFjYW0pIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpbmRleCA9IGV0NjF4MjUxX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CiAJaWYgKCFjb3VudCkgewotCQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJCW11dGV4X3VubG9jaygmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODc5LDcgKzg3OCw3IEBACiAJREJHKDIsICJNb3ZlZCBzZW5zb3IgcmVnaXN0ZXIgaW5kZXggdG8gMHglMDJYIiwgY2FtLT5zeXNmcy5pMmNfcmVnKTsKIAlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KTsKIAotCXVwKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKKwltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtODkxLDIyICs4OTAsMjIgQEAKIAlzc2l6ZV90IGNvdW50OwogCWludCB2YWw7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZldDYxeDI1MV9zeXNmc19sb2NrKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZldDYxeDI1MV9zeXNmc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOwogCWlmICghY2FtKSB7Ci0JCXVwKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCEoY2FtLT5zZW5zb3ItPnN5c2ZzX29wcyAmIEVUNjFYMjUxX0kyQ19SRUFEKSkgewotCQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJaWYgKCEoY2FtLT5zZW5zb3Iuc3lzZnNfb3BzICYgRVQ2MVgyNTFfSTJDX1JFQUQpKSB7CisJCW11dGV4X3VubG9jaygmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KIAogCWlmICgodmFsID0gZXQ2MXgyNTFfaTJjX3JlYWQoY2FtLCBjYW0tPnN5c2ZzLmkyY19yZWcpKSA8IDApIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTkxNCw3ICs5MTMsNyBAQAogCiAJREJHKDMsICJSZWFkIGJ5dGVzOiAlemQiLCBjb3VudCk7CiAKLQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTkyOCwyOSArOTI3LDI5IEBACiAJc3NpemVfdCBjb3VudDsKIAlpbnQgZXJyOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZXQ2MXgyNTFfc3lzZnNfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZXQ2MXgyNTFfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKIAlpZiAoIWNhbSkgewotCQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJCW11dGV4X3VubG9jaygmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICghKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMgJiBFVDYxWDI1MV9JMkNfUkVBRCkpIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCWlmICghKGNhbS0+c2Vuc29yLnN5c2ZzX29wcyAmIEVUNjFYMjUxX0kyQ19SRUFEKSkgeworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKIAl2YWx1ZSA9IGV0NjF4MjUxX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CiAJaWYgKCFjb3VudCkgewotCQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJCW11dGV4X3VubG9jaygmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWVyciA9IGV0NjF4MjUxX2kyY193cml0ZShjYW0sIGNhbS0+c3lzZnMuaTJjX3JlZywgdmFsdWUpOwogCWlmIChlcnIpIHsKLQkJdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJmV0NjF4MjUxX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTk1OCwyMCArOTU3LDIwIEBACiAJICAgIGNhbS0+c3lzZnMuaTJjX3JlZywgdmFsdWUpOwogCURCRygzLCAiV3JpdHRlbiBieXRlczogJXpkIiwgY291bnQpOwogCi0JdXAoJmV0NjF4MjUxX3N5c2ZzX2xvY2spOworCW11dGV4X3VubG9jaygmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiAKIAogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHJlZywgU19JUlVHTyB8IFNfSVdVU1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXQ2MXgyNTFfc2hvd19yZWcsIGV0NjF4MjUxX3N0b3JlX3JlZyk7CisJCQkgZXQ2MXgyNTFfc2hvd19yZWcsIGV0NjF4MjUxX3N0b3JlX3JlZyk7CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIodmFsLCBTX0lSVUdPIHwgU19JV1VTUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBldDYxeDI1MV9zaG93X3ZhbCwgZXQ2MXgyNTFfc3RvcmVfdmFsKTsKKwkJCSBldDYxeDI1MV9zaG93X3ZhbCwgZXQ2MXgyNTFfc3RvcmVfdmFsKTsKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpMmNfcmVnLCBTX0lSVUdPIHwgU19JV1VTUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBldDYxeDI1MV9zaG93X2kyY19yZWcsIGV0NjF4MjUxX3N0b3JlX2kyY19yZWcpOworCQkJIGV0NjF4MjUxX3Nob3dfaTJjX3JlZywgZXQ2MXgyNTFfc3RvcmVfaTJjX3JlZyk7CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaTJjX3ZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXQ2MXgyNTFfc2hvd19pMmNfdmFsLCBldDYxeDI1MV9zdG9yZV9pMmNfdmFsKTsKKwkJCSBldDYxeDI1MV9zaG93X2kyY192YWwsIGV0NjF4MjUxX3N0b3JlX2kyY192YWwpOwogCiAKIHN0YXRpYyB2b2lkIGV0NjF4MjUxX2NyZWF0ZV9zeXNmcyhzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0pCkBAIC05ODAsNyArOTc5LDcgQEAKIAogCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWcpOwogCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl92YWwpOwotCWlmIChjYW0tPnNlbnNvciAmJiBjYW0tPnNlbnNvci0+c3lzZnNfb3BzKSB7CisJaWYgKGNhbS0+c2Vuc29yLnN5c2ZzX29wcykgewogCQl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaTJjX3JlZyk7CiAJCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9pMmNfdmFsKTsKIAl9CkBAIC05OTEsNyArOTkwLDcgQEAKIAogc3RhdGljIGludAogZXQ2MXgyNTFfc2V0X3BpeF9mb3JtYXQoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQorCQkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQogewogCWludCByLCBlcnIgPSAwOwogCkBAIC0xMDA4LDcgKzEwMDcsNyBAQAogCiBzdGF0aWMgaW50CiBldDYxeDI1MV9zZXRfY29tcHJlc3Npb24oc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiogY29tcHJlc3Npb24pCisJCQkgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uKiBjb21wcmVzc2lvbikKIHsKIAlpbnQgciwgZXJyID0gMDsKIApAQCAtMTA0OCwxMSArMTA0NywxMSBAQAogc3RhdGljIGludAogZXQ2MXgyNTFfc2V0X2Nyb3Aoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQogewotCXN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwlzdHJ1Y3QgZXQ2MXgyNTFfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOwogCXUxNiBmbXdfc3ggPSAodTE2KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCArCi0JICAgICAgICAgICAgICAgICAgIHMtPmFjdGl2ZV9waXhlbC5sZWZ0KSwKKwkJCSAgIHMtPmFjdGl2ZV9waXhlbC5sZWZ0KSwKIAkgICAgZm13X3N5ID0gKHUxNikocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wICsKLQkgICAgICAgICAgICAgICAgICAgcy0+YWN0aXZlX3BpeGVsLnRvcCksCisJCQkgICBzLT5hY3RpdmVfcGl4ZWwudG9wKSwKIAkgICAgZm13X2xlbmd0aCA9ICh1MTYpKHJlY3QtPndpZHRoKSwKIAkgICAgZm13X2hlaWdodCA9ICh1MTYpKHJlY3QtPmhlaWdodCk7CiAJaW50IGVyciA9IDA7CkBAIC0xMDYyLDggKzEwNjEsOCBAQAogCWVyciArPSBldDYxeDI1MV93cml0ZV9yZWcoY2FtLCBmbXdfbGVuZ3RoICYgMHhmZiwgMHg2Yik7CiAJZXJyICs9IGV0NjF4MjUxX3dyaXRlX3JlZyhjYW0sIGZtd19oZWlnaHQgJiAweGZmLCAweDZjKTsKIAllcnIgKz0gZXQ2MXgyNTFfd3JpdGVfcmVnKGNhbSwgKGZtd19zeCA+PiA4KSB8ICgoZm13X3N5ICYgMHgzMDApID4+IDYpCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChmbXdfbGVuZ3RoICYgMHgzMDApID4+IDQpCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChmbXdfaGVpZ2h0ICYgMHgzMDApID4+IDIpLCAweDZkKTsKKwkJCQkgICAgICAgfCAoKGZtd19sZW5ndGggJiAweDMwMCkgPj4gNCkKKwkJCQkgICAgICAgfCAoKGZtd19oZWlnaHQgJiAweDMwMCkgPj4gMiksIDB4NmQpOwogCWlmIChlcnIpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMDc2LDcgKzEwNzUsNyBAQAogCiBzdGF0aWMgaW50IGV0NjF4MjUxX2luaXQoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtKQogewotCXN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwlzdHJ1Y3QgZXQ2MXgyNTFfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOwogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOwogCXN0cnVjdCB2NGwyX3JlY3QqIHJlY3Q7CkBAIC0xMTQzLDcgKzExNDIsNyBAQAogCX0KIAogCWlmICghKGNhbS0+c3RhdGUgJiBERVZfSU5JVElBTElaRUQpKSB7Ci0JCWluaXRfTVVURVgoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCW11dGV4X2luaXQoJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJc3Bpbl9sb2NrX2luaXQoJmNhbS0+cXVldWVfbG9jayk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9mcmFtZSk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9zdHJlYW0pOwpAQCAtMTE2MSwxMyArMTE2MCwxNSBAQAogCiBzdGF0aWMgdm9pZCBldDYxeDI1MV9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0pCiB7Ci0JZG93bigmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJbXV0ZXhfbG9jaygmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CiAKIAlEQkcoMiwgIlY0TDIgZGV2aWNlIC9kZXYvdmlkZW8lZCBkZXJlZ2lzdGVyZWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBOVUxMKTsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CiAKLQl1cCgmZXQ2MXgyNTFfc3lzZnNfbG9jayk7CisJdXNiX3B1dF9kZXYoY2FtLT51c2JkZXYpOworCisJbXV0ZXhfdW5sb2NrKCZldDYxeDI1MV9zeXNmc19sb2NrKTsKIAogCWtmcmVlKGNhbS0+Y29udHJvbF9idWZmZXIpOwogfQpAQCAtMTE4OCw3ICsxMTg5LDcgQEAKIAogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5kZXZfc2VtKSkgeworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZGV2X211dGV4KSkgewogCQl1cF9yZWFkKCZldDYxeDI1MV9kaXNjb25uZWN0KTsKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAl9CkBAIC0xMjAwLDEwICsxMjAxLDEwIEBACiAJCQllcnIgPSAtRVdPVUxEQkxPQ0s7CiAJCQlnb3RvIG91dDsKIAkJfQotCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUoY2FtLT5vcGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhY2FtLT51c2Vycyk7CisJCQkJCQkgIGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVECisJCQkJCQkJIHx8ICFjYW0tPnVzZXJzKTsKIAkJaWYgKGVycikgewogCQkJdXBfcmVhZCgmZXQ2MXgyNTFfZGlzY29ubmVjdCk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMTIxMiw3ICsxMjEzLDcgQEAKIAkJCXVwX3JlYWQoJmV0NjF4MjUxX2Rpc2Nvbm5lY3QpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJZG93bigmY2FtLT5kZXZfc2VtKTsKKwkJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCX0KIAogCkBAIC0xMjQwLDcgKzEyNDEsNyBAQAogCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuIiwgY2FtLT52NGxkZXYtPm1pbm9yKTsKIAogb3V0OgotCXVwKCZjYW0tPmRldl9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCXVwX3JlYWQoJmV0NjF4MjUxX2Rpc2Nvbm5lY3QpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xMjUwLDcgKzEyNTEsNyBAQAogewogCXN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOwogCi0JZG93bigmY2FtLT5kZXZfc2VtKTsgLyogcHJldmVudCBkaXNjb25uZWN0KCkgdG8gYmUgY2FsbGVkICovCisJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOyAvKiBwcmV2ZW50IGRpc2Nvbm5lY3QoKSB0byBiZSBjYWxsZWQgKi8KIAogCWV0NjF4MjUxX3N0b3BfdHJhbnNmZXIoY2FtKTsKIApAQCAtMTI1OCw3ICsxMjU5LDcgQEAKIAogCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewogCQlldDYxeDI1MV9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOwotCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAJCWtmcmVlKGNhbSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEyNjgsNyArMTI2OSw3IEBACiAKIAlEQkcoMywgIlZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgY2xvc2VkIiwgY2FtLT52NGxkZXYtPm1pbm9yKTsKIAotCXVwKCZjYW0tPmRldl9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjc2LDQxICsxMjc3LDQyIEBACiAKIHN0YXRpYyBzc2l6ZV90CiBldDYxeDI1MV9yZWFkKHN0cnVjdCBmaWxlKiBmaWxwLCBjaGFyIF9fdXNlciAqIGJ1ZiwKLSAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QqIGZfcG9zKQorCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90KiBmX3BvcykKIHsKIAlzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKIAlzdHJ1Y3QgZXQ2MXgyNTFfZnJhbWVfdCogZiwgKiBpOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlsb25nIHRpbWVvdXQ7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewogCQlEQkcoMSwgIkRldmljZSBub3QgcHJlc2VudCIpOwotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKIAkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0ICIKIAkJICAgICAgICJhZ2Fpbi4iKTsKLQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoY2FtLT5pbyA9PSBJT19NTUFQKSB7CiAJCURCRygzLCAiQ2xvc2UgYW5kIG9wZW4gdGhlIGRldmljZSBhZ2FpbiB0byBjaG9vc2UgdGhlIHJlYWQgIgogCQkgICAgICAgIm1ldGhvZCIpOwotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjYW0tPmlvID09IElPX05PTkUpIHsKIAkJaWYgKCFldDYxeDI1MV9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBjYW0tPm5yZWFkYnVmZmVycywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9fUkVBRCkpIHsKKwkJCQkJICAgICAgSU9fUkVBRCkpIHsKIAkJCURCRygxLCAicmVhZCgpIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkiKTsKLQkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQljYW0tPmlvID0gSU9fUkVBRDsKQEAgLTEzMjQsMzAgKzEzMjYsMzIgQEAKIAl9CiAKIAlpZiAoIWNvdW50KSB7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB7CiAJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9Ci0JCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZQotCQkgICAgICAoIGNhbS0+d2FpdF9mcmFtZSwKLQkJICAgICAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAotCQkgICAgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKLQkJCShjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpICk7Ci0JCWlmIChlcnIpIHsKLQkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOwotCQkJcmV0dXJuIGVycjsKKwkJdGltZW91dCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CisJCQkgICggY2FtLT53YWl0X2ZyYW1lLAorCQkJICAgICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8CisJCQkgICAgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAorCQkJICAgIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpLAorCQkJICAgIGNhbS0+bW9kdWxlX3BhcmFtLmZyYW1lX3RpbWVvdXQgKgorCQkJICAgIDEwMDAgKiBtc2Vjc190b19qaWZmaWVzKDEpICk7CisJCWlmICh0aW1lb3V0IDwgMCkgeworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJCQlyZXR1cm4gdGltZW91dDsKIAkJfQogCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKLQkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7Ci0JCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJaWYgKCF0aW1lb3V0IHx8IChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpKSB7CisJCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQpAQCAtMTM3NSw3ICsxMzc5LDcgQEAKIAlQREJHRygiRnJhbWUgIyVsdSwgYnl0ZXMgcmVhZDogJXp1IiwKIAkgICAgICAodW5zaWduZWQgbG9uZylmLT5idWYuaW5kZXgsIGNvdW50KTsKIAotCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQpAQCAtMTM4OCw3ICsxMzkyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCiAJCXJldHVybiBQT0xMRVJSOwogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CkBAIC0xNDA0LDcgKzE0MDgsNyBAQAogCiAJaWYgKGNhbS0+aW8gPT0gSU9fTk9ORSkgewogCQlpZiAoIWV0NjF4MjUxX3JlcXVlc3RfYnVmZmVycyhjYW0sIGNhbS0+bnJlYWRidWZmZXJzLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT19SRUFEKSkgeworCQkJCQkgICAgICBJT19SRUFEKSkgewogCQkJREJHKDEsICJwb2xsKCkgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSIpOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtMTQyNiwxMiArMTQzMCwxMiBAQAogCWlmICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAotCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCiAJcmV0dXJuIG1hc2s7CiAKIGVycm9yOgotCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCXJldHVybiBQT0xMRVJSOwogfQogCkBAIC0xNDYxLDI5ICsxNDY1LDI5IEBACiB7CiAJc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCSAgICAgICAgICAgICAgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCQkgICAgICBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJdm9pZCAqcG9zOwogCXUzMiBpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKIAkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKTsKLQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CiAJCURCRygxLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCAiCiAJCSAgICAgICAiYWdhaW4uIik7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKGNhbS0+aW8gIT0gSU9fTU1BUCB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgfHwKIAkgICAgc2l6ZSAhPSBQQUdFX0FMSUdOKGNhbS0+ZnJhbWVbMF0uYnVmLmxlbmd0aCkpIHsKLQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE0OTIsNyArMTQ5Niw3IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPT0gY2FtLT5uYnVmZmVycykgewotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTUwMiw3ICsxNTA2LDcgQEAKIAlwb3MgPSBjYW0tPmZyYW1lW2ldLmJ1Zm1lbTsKIAl3aGlsZSAoc2l6ZSA+IDApIHsgLyogc2l6ZSBpcyBwYWdlLWFsaWduZWQgKi8KIAkJaWYgKHZtX2luc2VydF9wYWdlKHZtYSwgc3RhcnQsIHZtYWxsb2NfdG9fcGFnZShwb3MpKSkgewotCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJCXN0YXJ0ICs9IFBBR0VfU0laRTsKQEAgLTE1MTUsNyArMTUxOSw3IEBACiAKIAlldDYxeDI1MV92bV9vcGVuKHZtYSk7CiAKLQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUyOSwxMyArMTUzMywxMyBAQAogCQkuZHJpdmVyID0gImV0NjF4MjUxIiwKIAkJLnZlcnNpb24gPSBFVDYxWDI1MV9NT0RVTEVfVkVSU0lPTl9DT0RFLAogCQkuY2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURSB8Ci0JCSAgICAgICAgICAgICAgICBWNEwyX0NBUF9TVFJFQU1JTkcsCisJCQkJVjRMMl9DQVBfU1RSRUFNSU5HLAogCX07CiAKIAlzdHJsY3B5KGNhcC5jYXJkLCBjYW0tPnY0bGRldi0+bmFtZSwgc2l6ZW9mKGNhcC5jYXJkKSk7CiAJaWYgKHVzYl9tYWtlX3BhdGgoY2FtLT51c2JkZXYsIGNhcC5idXNfaW5mbywgc2l6ZW9mKGNhcC5idXNfaW5mbykpIDwgMCkKIAkJc3RybGNweShjYXAuYnVzX2luZm8sIGNhbS0+dXNiZGV2LT5kZXYuYnVzX2lkLAotCQkgICAgICAgIHNpemVvZihjYXAuYnVzX2luZm8pKTsKKwkJCXNpemVvZihjYXAuYnVzX2luZm8pKTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY2FwLCBzaXplb2YoY2FwKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTU1Nyw2ICsxNTYxLDcgQEAKIAogCW1lbXNldCgmaSwgMCwgc2l6ZW9mKGkpKTsKIAlzdHJjcHkoaS5uYW1lLCAiQ2FtZXJhIik7CisJaS50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAogCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaSwgc2l6ZW9mKGkpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xNTY2LDcgKzE1NzEsMTkgQEAKIAogCiBzdGF0aWMgaW50Ci1ldDYxeDI1MV92aWRpb2NfZ3NfaW5wdXQoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKK2V0NjF4MjUxX3ZpZGlvY19nX2lucHV0KHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJaW50IGluZGV4ID0gMDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaW5kZXgsIHNpemVvZihpbmRleCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK2V0NjF4MjUxX3ZpZGlvY19zX2lucHV0KHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7CiAJaW50IGluZGV4OwogCkBAIC0xNTgzLDcgKzE2MDAsNyBAQAogc3RhdGljIGludAogZXQ2MXgyNTFfdmlkaW9jX3F1ZXJ5X2N0cmwoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKLQlzdHJ1Y3QgZXQ2MXgyNTFfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJc3RydWN0IGV0NjF4MjUxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWM7CiAJdTggaTsKIApAQCAtMTYwNSw3ICsxNjIyLDcgQEAKIHN0YXRpYyBpbnQKIGV0NjF4MjUxX3ZpZGlvY19nX2N0cmwoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKLQlzdHJ1Y3QgZXQ2MXgyNTFfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJc3RydWN0IGV0NjF4MjUxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKIAlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CiAJaW50IGVyciA9IDA7CiAJdTggaTsKQEAgLTE2MzcsNyArMTY1NCw3IEBACiBzdGF0aWMgaW50CiBldDYxeDI1MV92aWRpb2Nfc19jdHJsKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IGV0NjF4MjUxX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCXN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHMgPSAmY2FtLT5zZW5zb3I7CiAJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwogCXU4IGk7CiAJaW50IGVyciA9IDA7CkBAIC0xNjUwLDYgKzE2NjcsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocy0+cWN0cmwpOyBpKyspCiAJCWlmIChjdHJsLmlkID09IHMtPnFjdHJsW2ldLmlkKSB7CisJCQlpZiAocy0+cWN0cmxbaV0uZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmIChjdHJsLnZhbHVlIDwgcy0+cWN0cmxbaV0ubWluaW11bSB8fAogCQkJICAgIGN0cmwudmFsdWUgPiBzLT5xY3RybFtpXS5tYXhpbXVtKQogCQkJCXJldHVybiAtRVJBTkdFOwpAQCAtMTY2OSw3ICsxNjg4LDcgQEAKIHN0YXRpYyBpbnQKIGV0NjF4MjUxX3ZpZGlvY19jcm9wY2FwKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IHY0bDJfY3JvcGNhcCogY2MgPSAmKGNhbS0+c2Vuc29yLT5jcm9wY2FwKTsKKwlzdHJ1Y3QgdjRsMl9jcm9wY2FwKiBjYyA9ICYoY2FtLT5zZW5zb3IuY3JvcGNhcCk7CiAKIAljYy0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAljYy0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gMTsKQEAgLTE2ODUsNyArMTcwNCw3IEBACiBzdGF0aWMgaW50CiBldDYxeDI1MV92aWRpb2NfZ19jcm9wKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IGV0NjF4MjUxX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCXN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHMgPSAmY2FtLT5zZW5zb3I7CiAJc3RydWN0IHY0bDJfY3JvcCBjcm9wID0gewogCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKIAl9OwpAQCAtMTcwMiw3ICsxNzIxLDcgQEAKIHN0YXRpYyBpbnQKIGV0NjF4MjUxX3ZpZGlvY19zX2Nyb3Aoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKLQlzdHJ1Y3QgZXQ2MXgyNTFfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJc3RydWN0IGV0NjF4MjUxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKIAlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7CiAJc3RydWN0IHY0bDJfcmVjdCogcmVjdDsKIAlzdHJ1Y3QgdjRsMl9yZWN0KiBib3VuZHMgPSAmKHMtPmNyb3BjYXAuYm91bmRzKTsKQEAgLTE4NDMsNyArMTg2Miw3IEBACiBldDYxeDI1MV92aWRpb2NfZ19mbXQoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBmbXQgPSAmKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0KTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwZm10ID0gJihjYW0tPnNlbnNvci5waXhfZm9ybWF0KTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmZm9ybWF0LCBhcmcsIHNpemVvZihmb3JtYXQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xODUyLDcgKzE4NzEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBmbXQtPmJ5dGVzcGVybGluZSA9IChwZm10LT5waXhlbGZvcm1hdD09VjRMMl9QSVhfRk1UX0VUNjFYMjUxKQotCSAgICAgICAgICAgICAgICAgICAgID8gMCA6IChwZm10LT53aWR0aCAqIHBmbXQtPnByaXYpIC8gODsKKwkJCSAgICAgPyAwIDogKHBmbXQtPndpZHRoICogcGZtdC0+cHJpdikgLyA4OwogCXBmbXQtPnNpemVpbWFnZSA9IHBmbXQtPmhlaWdodCAqICgocGZtdC0+d2lkdGgqcGZtdC0+cHJpdikvOCk7CiAJcGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJbWVtY3B5KCYoZm9ybWF0LmZtdC5waXgpLCBwZm10LCBzaXplb2YoKnBmbXQpKTsKQEAgLTE4NjYsOSArMTg4NSw5IEBACiAKIHN0YXRpYyBpbnQKIGV0NjF4MjUxX3ZpZGlvY190cnlfc19mbXQoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCB1bnNpZ25lZCBpbnQgY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqIGFyZykKKwkJCSAgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IGV0NjF4MjUxX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCXN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHMgPSAmY2FtLT5zZW5zb3I7CiAJc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXg7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGZtdCA9ICYocy0+cGl4X2Zvcm1hdCk7CkBAIC0xOTI4LDcgKzE5NDcsNyBAQAogCXBpeC0+cHJpdiA9IHBmbXQtPnByaXY7IC8qIGJwcCAqLwogCXBpeC0+Y29sb3JzcGFjZSA9IHBmbXQtPmNvbG9yc3BhY2U7CiAJcGl4LT5ieXRlc3BlcmxpbmUgPSAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfRVQ2MVgyNTEpCi0JICAgICAgICAgICAgICAgICAgICA/IDAgOiAocGl4LT53aWR0aCAqIHBpeC0+cHJpdikgLyA4OworCQkJICAgID8gMCA6IChwaXgtPndpZHRoICogcGl4LT5wcml2KSAvIDg7CiAJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmhlaWdodCAqICgocGl4LT53aWR0aCAqIHBpeC0+cHJpdikgLyA4KTsKIAlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwogCkBAIC0yMDAxLDcgKzIwMjAsNyBAQAogZXQ2MXgyNTFfdmlkaW9jX2dfanBlZ2NvbXAoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAlpZiAoY29weV90b191c2VyKGFyZywgJmNhbS0+Y29tcHJlc3Npb24sCi0JICAgICAgICAgICAgICAgICBzaXplb2YoY2FtLT5jb21wcmVzc2lvbikpKQorCQkJIHNpemVvZihjYW0tPmNvbXByZXNzaW9uKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC0yMTUwLDEyICsyMTY5LDEyIEBACiAKIHN0YXRpYyBpbnQKIGV0NjF4MjUxX3ZpZGlvY19kcWJ1ZihzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0sIHN0cnVjdCBmaWxlKiBmaWxwLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICogYXJnKQorCQkgICAgICB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAlzdHJ1Y3QgdjRsMl9idWZmZXIgYjsKIAlzdHJ1Y3QgZXQ2MXgyNTFfZnJhbWVfdCAqZjsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7Ci0JaW50IGVyciA9IDA7CisJbG9uZyB0aW1lb3V0OwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZiLCBhcmcsIHNpemVvZihiKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjE2OCwxNiArMjE4NywxOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCXJldHVybiAtRUFHQUlOOwotCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKLQkJICAgICAgKCBjYW0tPndhaXRfZnJhbWUsCi0JCSAgICAgICAgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgfHwKLQkJICAgICAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8Ci0JCSAgICAgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dAorCQkJICAoIGNhbS0+d2FpdF9mcmFtZSwKKwkJCSAgICAoIWxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB8fAorCQkJICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKKwkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSwKKwkJCSAgICBjYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ICoKKwkJCSAgICAxMDAwICogbXNlY3NfdG9famlmZmllcygxKSApOworCQlpZiAodGltZW91dCA8IDApCisJCQlyZXR1cm4gdGltZW91dDsKIAkJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpCisJCWlmICghdGltZW91dCB8fCAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSkKIAkJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjI5Niw3ICsyMzE3LDcgQEAKIAogCiBzdGF0aWMgaW50IGV0NjF4MjUxX2lvY3RsX3Y0bDIoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKiBhcmcpCisJCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7CiAJc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CiAKQEAgLTIzMDksOCArMjMzMCwxMCBAQAogCQlyZXR1cm4gZXQ2MXgyNTFfdmlkaW9jX2VudW1pbnB1dChjYW0sIGFyZyk7CiAKIAljYXNlIFZJRElPQ19HX0lOUFVUOgorCQlyZXR1cm4gZXQ2MXgyNTFfdmlkaW9jX2dfaW5wdXQoY2FtLCBhcmcpOworCiAJY2FzZSBWSURJT0NfU19JTlBVVDoKLQkJcmV0dXJuIGV0NjF4MjUxX3ZpZGlvY19nc19pbnB1dChjYW0sIGFyZyk7CisJCXJldHVybiBldDYxeDI1MV92aWRpb2Nfc19pbnB1dChjYW0sIGFyZyk7CiAKIAljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJCXJldHVybiBldDYxeDI1MV92aWRpb2NfcXVlcnlfY3RybChjYW0sIGFyZyk7CkBAIC0yMzg4LDI0ICsyNDExLDI0IEBACiAKIAogc3RhdGljIGludCBldDYxeDI1MV9pb2N0bChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3BfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CiAJCURCRygxLCAiRGV2aWNlIG5vdCBwcmVzZW50Iik7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgewogCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgIgogCQkgICAgICAgImFnYWluLiIpOwotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjQxMyw3ICsyNDM2LDcgQEAKIAogCWVyciA9IGV0NjF4MjUxX2lvY3RsX3Y0bDIoaW5vZGUsIGZpbHAsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKIAotCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0NTksNyArMjQ4Miw3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlpbml0X01VVEVYKCZjYW0tPmRldl9zZW0pOworCW11dGV4X2luaXQoJmNhbS0+ZGV2X211dGV4KTsKIAogCURCRygyLCAiRVQ2MVhbMTJdNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXIgZGV0ZWN0ZWQgIgogCSAgICAgICAiKHZpZC9waWQgMHglMDRYLzB4JTA0WCkiLGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CkBAIC0yNDcwLDggKzI0OTMsOCBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKCFlcnIgJiYgY2FtLT5zZW5zb3IpCi0JCURCRygyLCAiJXMgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIiwgY2FtLT5zZW5zb3ItPm5hbWUpOworCWlmICghZXJyKQorCQlEQkcoMiwgIiVzIGltYWdlIHNlbnNvciBkZXRlY3RlZCIsIGNhbS0+c2Vuc29yLm5hbWUpOwogCWVsc2UgewogCQlEQkcoMSwgIk5vIHN1cHBvcnRlZCBpbWFnZSBzZW5zb3IgZGV0ZWN0ZWQiKTsKIAkJZXJyID0gLUVOT0RFVjsKQEAgLTI0OTIsMjMgKzI1MTUsMjQgQEAKIAljYW0tPnY0bGRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBjYW0pOwogCi0JZG93bigmY2FtLT5kZXZfc2VtKTsKKwltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAKIAllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX25yW2Rldl9ucl0pOworCQkJCSAgICB2aWRlb19ucltkZXZfbnJdKTsKIAlpZiAoZXJyKSB7CiAJCURCRygxLCAiVjRMMiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCIpOwogCQlpZiAoZXJyID09IC1FTkZJTEUgJiYgdmlkZW9fbnJbZGV2X25yXSA9PSAtMSkKIAkJCURCRygxLCAiRnJlZSAvZGV2L3ZpZGVvWCBub2RlIG5vdCBmb3VuZCIpOwogCQl2aWRlb19ucltkZXZfbnJdID0gLTE7CiAJCWRldl9uciA9IChkZXZfbnIgPCBFVDYxWDI1MV9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKLQkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCQlnb3RvIGZhaWw7CiAJfQogCiAJREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5taW5vcik7CiAKIAljYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgPSBmb3JjZV9tdW5tYXBbZGV2X25yXTsKKwljYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ID0gZnJhbWVfdGltZW91dFtkZXZfbnJdOwogCiAJZGV2X25yID0gKGRldl9uciA8IEVUNjFYMjUxX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOwogCkBAIC0yNTE5LDcgKzI1NDMsNyBAQAogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOwogCi0JdXAoJmNhbS0+ZGV2X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjU0Myw3ICsyNTY3LDcgQEAKIAogCWRvd25fd3JpdGUoJmV0NjF4MjUxX2Rpc2Nvbm5lY3QpOwogCi0JZG93bigmY2FtLT5kZXZfc2VtKTsKKwltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAKIAlEQkcoMiwgIkRpc2Nvbm5lY3RpbmcgJXMuLi4iLCBjYW0tPnY0bGRldi0+bmFtZSk7CiAKQEAgLTI1NTcsMTMgKzI1ODEsMTQgQEAKIAkJZXQ2MXgyNTFfc3RvcF90cmFuc2ZlcihjYW0pOwogCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfc3RyZWFtKTsKKwkJd2FrZV91cCgmY2FtLT53YWl0X3N0cmVhbSk7CisJCXVzYl9nZXRfZGV2KGNhbS0+dXNiZGV2KTsKIAl9IGVsc2UgewogCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CiAJCWV0NjF4MjUxX3JlbGVhc2VfcmVzb3VyY2VzKGNhbSk7CiAJfQogCi0JdXAoJmNhbS0+ZGV2X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAKIAlpZiAoIWNhbS0+dXNlcnMpCiAJCWtmcmVlKGNhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9ldDYxeDI1MV9zZW5zb3IuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfc2Vuc29yLmgKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvZXQ2MXgyNTFfc2Vuc29yLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfc2Vuc29yLmgKaW5kZXggYjlkZjkxMC4uNjVlZGQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvZXQ2MXgyNTFfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9zZW5zb3IuaApAQCAtNDIsOSArNDIsMTIgQEAKIAlOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfTsKIAorZXh0ZXJuIHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqCitldDYxeDI1MV9tYXRjaF9pZChzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0sIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKIGV4dGVybiB2b2lkCiBldDYxeDI1MV9hdHRhY2hfc2Vuc29yKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0NjF4MjUxX3NlbnNvciogc2Vuc29yKTsKKwkJICAgICAgIHN0cnVjdCBldDYxeDI1MV9zZW5zb3IqIHNlbnNvcik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNTMsMTMgKzU2LDEzIEBACiBleHRlcm4gaW50IGV0NjF4MjUxX2kyY193cml0ZShzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiwgdTggYWRkcmVzcywgdTggdmFsdWUpOwogZXh0ZXJuIGludCBldDYxeDI1MV9pMmNfcmVhZChzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiwgdTggYWRkcmVzcyk7CiBleHRlcm4gaW50IGV0NjF4MjUxX2kyY190cnlfd3JpdGUoc3RydWN0IGV0NjF4MjUxX2RldmljZSosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0NjF4MjUxX3NlbnNvciosIHU4IGFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdmFsdWUpOworCQkJCSAgc3RydWN0IGV0NjF4MjUxX3NlbnNvciosIHU4IGFkZHJlc3MsCisJCQkJICB1OCB2YWx1ZSk7CiBleHRlcm4gaW50IGV0NjF4MjUxX2kyY190cnlfcmVhZChzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldDYxeDI1MV9zZW5zb3IqLCB1OCBhZGRyZXNzKTsKKwkJCQkgc3RydWN0IGV0NjF4MjUxX3NlbnNvciosIHU4IGFkZHJlc3MpOwogZXh0ZXJuIGludCBldDYxeDI1MV9pMmNfcmF3X3dyaXRlKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqLCB1OCBuLCB1OCBkYXRhMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkYXRhMiwgdTggZGF0YTMsIHU4IGRhdGE0LCB1OCBkYXRhNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkYXRhNiwgdTggZGF0YTcsIHU4IGRhdGE4LCB1OCBhZGRyZXNzKTsKKwkJCQkgIHU4IGRhdGEyLCB1OCBkYXRhMywgdTggZGF0YTQsIHU4IGRhdGE1LAorCQkJCSAgdTggZGF0YTYsIHU4IGRhdGE3LCB1OCBkYXRhOCwgdTggYWRkcmVzcyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtOTcsMTUgKzEwMCwxMyBAQAogCiAJaW50ICgqaW5pdCkoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtKTsKIAlpbnQgKCpnZXRfY3RybCkoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLAotCSAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKTsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpOwogCWludCAoKnNldF9jdHJsKShzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0sCi0JICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpOworCQkJY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCk7CiAJaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSwKLQkgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCk7CisJCQljb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KTsKIAlpbnQgKCpzZXRfcGl4X2Zvcm1hdCkoc3RydWN0IGV0NjF4MjUxX2RldmljZSogY2FtLAotCSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpOwotCi0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2UqIHVzYmRldjsKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCk7CiAKIAkvKiBQcml2YXRlICovCiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIF9xY3RybFtFVDYxWDI1MV9NQVhfQ1RSTFNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZXQ2MXgyNTFfdGFzNTEzMGQxYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV90YXM1MTMwZDFiLmMKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvZXQ2MXgyNTFfdGFzNTEzMGQxYi5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxL2V0NjF4MjUxX3RhczUxMzBkMWIuYwppbmRleCA2NWYxYWU5Li5hN2Q2NWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9ldDYxeDI1MV90YXM1MTMwZDFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV90YXM1MTMwZDFiLmMKQEAgLTQ2LDIwICs0NiwyMCBAQAogCiAKIHN0YXRpYyBpbnQgdGFzNTEzMGQxYl9zZXRfY3RybChzdHJ1Y3QgZXQ2MXgyNTFfZGV2aWNlKiBjYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQogewogCWludCBlcnIgPSAwOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfR0FJTjoKIAkJZXJyICs9IGV0NjF4MjUxX2kyY19yYXdfd3JpdGUoY2FtLCAyLCAweDIwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGY2LWN0cmwtPnZhbHVlLCAwLCAwLCAwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwKTsKKwkJCQkJICAgICAgMHhmNi1jdHJsLT52YWx1ZSwgMCwgMCwgMCwKKwkJCQkJICAgICAgMCwgMCwgMCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CiAJCWVyciArPSBldDYxeDI1MV9pMmNfcmF3X3dyaXRlKGNhbSwgMiwgMHg0MCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0Ny1jdHJsLT52YWx1ZSwgMCwgMCwgMCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCk7CisJCQkJCSAgICAgIDB4NDctY3RybC0+dmFsdWUsIDAsIDAsIDAsCisJCQkJCSAgICAgIDAsIDAsIDAsIDApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNiwxMiArMTI2LDE2IEBACiAKIGludCBldDYxeDI1MV9wcm9iZV90YXM1MTMwZDFiKHN0cnVjdCBldDYxeDI1MV9kZXZpY2UqIGNhbSkKIHsKLQkvKiBUaGlzIHNlbnNvciBoYXMgbm8gaWRlbnRpZmllcnMsIHNvIGxldCdzIGF0dGFjaCBpdCBhbnl3YXkgKi8KLQlldDYxeDI1MV9hdHRhY2hfc2Vuc29yKGNhbSwgJnRhczUxMzBkMWIpOworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRhczUxMzBkMWJfaWRfdGFibGVbXSA9IHsKKwkJeyBVU0JfREVWSUNFKDB4MTAyYywgMHg2MjUxKSwgfSwKKwkJeyB9CisJfTsKIAogCS8qIFNlbnNvciBkZXRlY3Rpb24gaXMgYmFzZWQgb24gVVNCIHBpZC92aWQgKi8KLQlpZiAobGUxNl90b19jcHUodGFzNTEzMGQxYi51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSAweDYyNTEpCisJaWYgKCFldDYxeDI1MV9tYXRjaF9pZChjYW0sIHRhczUxMzBkMWJfaWRfdGFibGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWV0NjF4MjUxX2F0dGFjaF9zZW5zb3IoY2FtLCAmdGFzNTEzMGQxYik7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZm9udC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9mb250LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxZmVjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZm9udC5oCkBAIC0wLDAgKzEsNDA3IEBACitzdGF0aWMgdW5zaWduZWQgY2hhciByb204eDE2X2JpdHNbXSA9IHsKKy8qIENoYXJhY3RlciAwICgweDMwKToKKyAgIGh0PTE2LCB3aWR0aD04CisgICArLS0tLS0tLS0rCisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICoqKioqICB8CisgICB8KiogICAqKiB8CisgICB8KiogICAqKiB8CisgICB8KiogICoqKiB8CisgICB8KiogKioqKiB8CisgICB8KioqKiAqKiB8CisgICB8KioqICAqKiB8CisgICB8KiogICAqKiB8CisgICB8KiogICAqKiB8CisgICB8ICoqKioqICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICArLS0tLS0tLS0rICovCisweDAwLAorMHgwMCwKKzB4N2MsCisweGM2LAorMHhjNiwKKzB4Y2UsCisweGRlLAorMHhmNiwKKzB4ZTYsCisweGM2LAorMHhjNiwKKzB4N2MsCisweDAwLAorMHgwMCwKKzB4MDAsCisweDAwLAorCisvKiBDaGFyYWN0ZXIgMSAoMHgzMSk6CisgICBodD0xNiwgd2lkdGg9OAorICAgKy0tLS0tLS0tKworICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICoqICAgfAorICAgfCAqKioqICAgfAorICAgfCAgICoqICAgfAorICAgfCAgICoqICAgfAorICAgfCAgICoqICAgfAorICAgfCAgICoqICAgfAorICAgfCAgICoqICAgfAorICAgfCAgICoqICAgfAorICAgfCAgICoqICAgfAorICAgfCAqKioqKiogfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgKy0tLS0tLS0tKyAqLworMHgwMCwKKzB4MDAsCisweDE4LAorMHg3OCwKKzB4MTgsCisweDE4LAorMHgxOCwKKzB4MTgsCisweDE4LAorMHgxOCwKKzB4MTgsCisweDdlLAorMHgwMCwKKzB4MDAsCisweDAwLAorMHgwMCwKKworLyogQ2hhcmFjdGVyIDIgKDB4MzIpOgorICAgaHQ9MTYsIHdpZHRoPTgKKyAgICstLS0tLS0tLSsKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgKioqKiogIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwgICAgICoqIHwKKyAgIHwgICAgKiogIHwKKyAgIHwgICAqKiAgIHwKKyAgIHwgICoqICAgIHwKKyAgIHwgKiogICAgIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwqKioqKioqIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgICstLS0tLS0tLSsgKi8KKzB4MDAsCisweDAwLAorMHg3YywKKzB4YzYsCisweGM2LAorMHgwNiwKKzB4MGMsCisweDE4LAorMHgzMCwKKzB4NjAsCisweGM2LAorMHhmZSwKKzB4MDAsCisweDAwLAorMHgwMCwKKzB4MDAsCisKKy8qIENoYXJhY3RlciAzICgweDMzKToKKyAgIGh0PTE2LCB3aWR0aD04CisgICArLS0tLS0tLS0rCisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICoqKioqICB8CisgICB8KiogICAqKiB8CisgICB8ICAgICAqKiB8CisgICB8ICAgICAqKiB8CisgICB8ICAqKioqICB8CisgICB8ICAgICAqKiB8CisgICB8ICAgICAqKiB8CisgICB8ICAgICAqKiB8CisgICB8KiogICAqKiB8CisgICB8ICoqKioqICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICArLS0tLS0tLS0rICovCisweDAwLAorMHgwMCwKKzB4N2MsCisweGM2LAorMHgwNiwKKzB4MDYsCisweDNjLAorMHgwNiwKKzB4MDYsCisweDA2LAorMHhjNiwKKzB4N2MsCisweDAwLAorMHgwMCwKKzB4MDAsCisweDAwLAorCisvKiBDaGFyYWN0ZXIgNCAoMHgzNCk6CisgICBodD0xNiwgd2lkdGg9OAorICAgKy0tLS0tLS0tKworICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICAqKiAgfAorICAgfCAgICoqKiAgfAorICAgfCAgKioqKiAgfAorICAgfCAqKiAqKiAgfAorICAgfCoqICAqKiAgfAorICAgfCoqICAqKiAgfAorICAgfCoqKioqKiogfAorICAgfCAgICAqKiAgfAorICAgfCAgICAqKiAgfAorICAgfCAgICoqKiogfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgKy0tLS0tLS0tKyAqLworMHgwMCwKKzB4MDAsCisweDBjLAorMHgxYywKKzB4M2MsCisweDZjLAorMHhjYywKKzB4Y2MsCisweGZlLAorMHgwYywKKzB4MGMsCisweDFlLAorMHgwMCwKKzB4MDAsCisweDAwLAorMHgwMCwKKworLyogQ2hhcmFjdGVyIDUgKDB4MzUpOgorICAgaHQ9MTYsIHdpZHRoPTgKKyAgICstLS0tLS0tLSsKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwqKioqKioqIHwKKyAgIHwqKiAgICAgIHwKKyAgIHwqKiAgICAgIHwKKyAgIHwqKiAgICAgIHwKKyAgIHwqKioqKiogIHwKKyAgIHwgICAgICoqIHwKKyAgIHwgICAgICoqIHwKKyAgIHwgICAgICoqIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwgKioqKiogIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgICstLS0tLS0tLSsgKi8KKzB4MDAsCisweDAwLAorMHhmZSwKKzB4YzAsCisweGMwLAorMHhjMCwKKzB4ZmMsCisweDA2LAorMHgwNiwKKzB4MDYsCisweGM2LAorMHg3YywKKzB4MDAsCisweDAwLAorMHgwMCwKKzB4MDAsCisKKy8qIENoYXJhY3RlciA2ICgweDM2KToKKyAgIGh0PTE2LCB3aWR0aD04CisgICArLS0tLS0tLS0rCisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICoqKioqICB8CisgICB8KiogICAqKiB8CisgICB8KiogICAgICB8CisgICB8KiogICAgICB8CisgICB8KioqKioqICB8CisgICB8KiogICAqKiB8CisgICB8KiogICAqKiB8CisgICB8KiogICAqKiB8CisgICB8KiogICAqKiB8CisgICB8ICoqKioqICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICArLS0tLS0tLS0rICovCisweDAwLAorMHgwMCwKKzB4N2MsCisweGM2LAorMHhjMCwKKzB4YzAsCisweGZjLAorMHhjNiwKKzB4YzYsCisweGM2LAorMHhjNiwKKzB4N2MsCisweDAwLAorMHgwMCwKKzB4MDAsCisweDAwLAorCisvKiBDaGFyYWN0ZXIgNyAoMHgzNyk6CisgICBodD0xNiwgd2lkdGg9OAorICAgKy0tLS0tLS0tKworICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCoqKioqKiogfAorICAgfCoqICAgKiogfAorICAgfCAgICAgKiogfAorICAgfCAgICAqKiAgfAorICAgfCAgICoqICAgfAorICAgfCAgKiogICAgfAorICAgfCAgKiogICAgfAorICAgfCAgKiogICAgfAorICAgfCAgKiogICAgfAorICAgfCAgKiogICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgfCAgICAgICAgfAorICAgKy0tLS0tLS0tKyAqLworMHgwMCwKKzB4MDAsCisweGZlLAorMHhjNiwKKzB4MDYsCisweDBjLAorMHgxOCwKKzB4MzAsCisweDMwLAorMHgzMCwKKzB4MzAsCisweDMwLAorMHgwMCwKKzB4MDAsCisweDAwLAorMHgwMCwKKworLyogQ2hhcmFjdGVyIDggKDB4MzgpOgorICAgaHQ9MTYsIHdpZHRoPTgKKyAgICstLS0tLS0tLSsKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgKioqKiogIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwgKioqKiogIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwqKiAgICoqIHwKKyAgIHwgKioqKiogIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgICstLS0tLS0tLSsgKi8KKzB4MDAsCisweDAwLAorMHg3YywKKzB4YzYsCisweGM2LAorMHhjNiwKKzB4N2MsCisweGM2LAorMHhjNiwKKzB4YzYsCisweGM2LAorMHg3YywKKzB4MDAsCisweDAwLAorMHgwMCwKKzB4MDAsCisKKy8qIENoYXJhY3RlciA5ICgweDM5KToKKyAgIGh0PTE2LCB3aWR0aD04CisgICArLS0tLS0tLS0rCisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICoqKioqICB8CisgICB8KiogICAqKiB8CisgICB8KiogICAqKiB8CisgICB8KiogICAqKiB8CisgICB8KiogICAqKiB8CisgICB8ICoqKioqKiB8CisgICB8ICAgICAqKiB8CisgICB8ICAgICAqKiB8CisgICB8KiogICAqKiB8CisgICB8ICoqKioqICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICB8ICAgICAgICB8CisgICArLS0tLS0tLS0rICovCisweDAwLAorMHgwMCwKKzB4N2MsCisweGM2LAorMHhjNiwKKzB4YzYsCisweGM2LAorMHg3ZSwKKzB4MDYsCisweDA2LAorMHhjNiwKKzB4N2MsCisweDAwLAorMHgwMCwKKzB4MDAsCisweDAwLAorLyogQ2hhcmFjdGVyIDogKDB4M2EpOgorICAgaHQ9MTYsIHdpZHRoPTgKKyAgICstLS0tLS0tLSsKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgKiogIHwKKyAgIHwgICAgKiogIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgKiogIHwKKyAgIHwgICAgKiogIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgIHwgICAgICAgIHwKKyAgICstLS0tLS0tLSsgKi8KKzB4MDAsCisweDAwLAorMHgwMCwKKzB4MDAsCisweDAwLAorMHgwYywKKzB4MGMsCisweDAwLAorMHgwMCwKKzB4MGMsCisweDBjLAorMHgwMCwKKzB4MDAsCisweDAwLAorMHgwMCwKKzB4MDAsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYwppbmRleCBlN2JiZWIxLi5jN2ZlZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgICAgaGV4aXVtX2dlbWluaS5jIC0gdjRsMiBkcml2ZXIgZm9yIEhleGl1bSBHZW1pbmkgZnJhbWUgZ3JhYmJlciBjYXJkcwotICAgICAgICAgICAgICAgCisKICAgICBWaXNpdCBodHRwOi8vd3d3Lm1paHUuZGUvbGludXgvc2FhNzE0Ni8gYW5kIGZvbGxvdyB0aGUgbGluawogICAgIHRvICJoZXhpdW0iIGZvciBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgdGhpcyBjYXJkLgotICAgIAorCiAgICAgQ29weXJpZ2h0IChDKSAyMDAzIE1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtODEsNyArODEsNyBAQAogCiAJc3RydWN0IHZpZGVvX2RldmljZQkqdmlkZW9fZGV2OwogCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcHRlcjsKLQkJCisKIAlpbnQgCQljdXJfaW5wdXQ7CS8qIGN1cnJlbnQgaW5wdXQgKi8KIAl2NGwyX3N0ZF9pZCAJY3VyX3N0ZDsJLyogY3VycmVudCBzdGFuZGFyZCAqLwogCWludAkJY3VyX2J3OwkJLyogY3VycmVudCBibGFjay93aGl0ZSBzdGF0dXMgKi8KQEAgLTE3NCw3ICsxNzQsNyBAQAogCQkuaF9vZmZzZXQJPSAxLAkuaF9waXhlbHMgCT0gNzIwLAogCQkudl9tYXhfb3V0CT0gNTc2LAkuaF9tYXhfb3V0CT0gNzY4LAogCX0KLX07CQkKK307CiAKIC8qIGJyaW5nIGhhcmR3YXJlIHRvIGEgc2FuZSBzdGF0ZS4gdGhpcyBoYXMgdG8gYmUgZG9uZSwganVzdCBpbiBjYXNlIHNvbWVvbmUKICAgIHdhbnRzIHRvIGNhcHR1cmUgZnJvbSB0aGlzIGRldmljZSBiZWZvcmUgaXQgaGFzIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQuCkBAIC0zMTEsNyArMzExLDcgQEAKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CiAJc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKIC8qCi0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOyAKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CiAqLwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKaW5kZXggYWFkNGExOC4uMTM3YzQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCkBAIC0zLDcgKzMsNyBAQAogCiAgICAgVmlzaXQgaHR0cDovL3d3dy5taWh1LmRlL2xpbnV4L3NhYTcxNDYvIGFuZCBmb2xsb3cgdGhlIGxpbmsKICAgICB0byAiaGV4aXVtIiBmb3IgZnVydGhlciBkZXRhaWxzIGFib3V0IHRoaXMgY2FyZC4KLSAgICAKKwogICAgIENvcHlyaWdodCAoQykgMjAwMyBNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTY5LDcgKzY5LDcgQEAKIHsKIAlpbnQgdHlwZTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2aWRlb19kZXY7Ci0Jc3RydWN0IGkyY19hZGFwdGVyCWkyY19hZGFwdGVyOwkKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJaTJjX2FkYXB0ZXI7CiAKIAlpbnQgY3VyX2lucHV0OwkvKiBjdXJyZW50IGlucHV0ICovCiB9OwpAQCAtODYsNyArODYsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB7Ci0Jc3RydWN0IGhleGl1bV9kYXRhIGRhdGFbOF07CQorCXN0cnVjdCBoZXhpdW1fZGF0YSBkYXRhWzhdOwogfSBoZXhpdW1faW5wdXRfc2VsZWN0W10gPSB7CiB7CiAJeyAvKiBjdmJzIDEgKi8KQEAgLTE1Myw3ICsxNTMsNyBAQAogCQl7IDB4MzAsIDB4NjAgfSwKIAkJeyAweDMxLCAweEI1IH0sIC8vID8/CiAJCXsgMHgyMSwgMHgwMyB9LAotCX0gCisJfQogfSwgewogCXsgLyogeS9jIDEgKi8KIAkJeyAweDA2LCAweDgwIH0sCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJeyAweDMxLCAweDc1IH0sCiAJCXsgMHgyMSwgMHgyMSB9LAogCX0KLX0JCit9CiB9OwogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgaGV4aXVtX3N0YW5kYXJkc1tdID0gewpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCS5oX29mZnNldAk9IDEsCS5oX3BpeGVscyAJPSA3MjAsCiAJCS52X21heF9vdXQJPSA1NzYsCS5oX21heF9vdXQJPSA3NjgsCiAJfQotfTsJCQorfTsKIAogLyogdGhpcyBpcyBvbmx5IGNhbGxlZCBmb3Igb2xkIEhWLVBDSTYvT3Jpb24gY2FyZHMKICAgIHdpdGhvdXQgZWVwcm9tICovCkBAIC0yNzIsNyArMjcyLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogY2hlY2sgaWYgdGhpcyBpcyBhbiBvbGQgaGV4aXVtIE9yaW9uIGNhcmQgYnkgbG9va2luZyBhdCAKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGFuIG9sZCBoZXhpdW0gT3Jpb24gY2FyZCBieSBsb29raW5nIGF0CiAJICAgYSBzYWE3MTEwIGF0IGFkZHJlc3MgMHg0ZSAqLwogCWlmICgwID09IChlcnIgPSBpMmNfc21idXNfeGZlcigmaGV4aXVtLT5pMmNfYWRhcHRlciwgMHg0ZSwgMCwgSTJDX1NNQlVTX1JFQUQsIDB4MDAsIEkyQ19TTUJVU19CWVRFX0RBVEEsICZkYXRhKSkpIHsKIAkJcHJpbnRrKCJoZXhpdW1fb3Jpb246IGRldmljZSBpcyBhIEhleGl1bSBIVi1QQ0k2L09yaW9uIChvbGQpLlxuIik7CkBAIC0zMTQsNyArMzE0LDcgQEAKIHsKIAl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOwogCWludCBpID0gMDsKLQkKKwogCURFQl9EKCgiLlxuIikpOwogCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewpAQCAtMzc1LDcgKzM3NSw3IEBACiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CiAvKgotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsgCisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwogKi8KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggNThiMGU2OS4uOTViYWNmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC00NCw1MSArNDQsMTcgQEAKICNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CiAKLS8qIE1hcmsgUGhhbGFuIDxwaGFsYW5tQG8yLmllPiAqLwotc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3B2OTUxW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbICAwIF0gPSBLRVlfS1AwLAotCVsgIDEgXSA9IEtFWV9LUDEsCi0JWyAgMiBdID0gS0VZX0tQMiwKLQlbICAzIF0gPSBLRVlfS1AzLAotCVsgIDQgXSA9IEtFWV9LUDQsCi0JWyAgNSBdID0gS0VZX0tQNSwKLQlbICA2IF0gPSBLRVlfS1A2LAotCVsgIDcgXSA9IEtFWV9LUDcsCi0JWyAgOCBdID0gS0VZX0tQOCwKLQlbICA5IF0gPSBLRVlfS1A5LAotCi0JWyAxOCBdID0gS0VZX1BPV0VSLAotCVsgMTYgXSA9IEtFWV9NVVRFLAotCVsgMzEgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMjcgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDI2IF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMzAgXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbIDE0IF0gPSBLRVlfUEFHRVVQLAotCVsgMjkgXSA9IEtFWV9QQUdFRE9XTiwKLQlbIDE5IF0gPSBLRVlfU09VTkQsCi0KLQlbIDI0IF0gPSBLRVlfS1BQTFVTTUlOVVMsCS8qIENIICsvLSAqLwotCVsgMjIgXSA9IEtFWV9TVUJUSVRMRSwJCS8qIENDICovCi0JWyAxMyBdID0gS0VZX1RFWFQsCQkvKiBUVFggKi8KLQlbIDExIF0gPSBLRVlfVFYsCQkvKiBBSVIvQ0JMICovCi0JWyAxNyBdID0gS0VZX1BDLAkJLyogUEMvVFYgKi8KLQlbIDIzIF0gPSBLRVlfT0ssCQkvKiBDSCBSVE4gKi8KLQlbIDI1IF0gPSBLRVlfTU9ERSwgCQkvKiBGVU5DICovCi0JWyAxMiBdID0gS0VZX1NFQVJDSCwgCQkvKiBBVVRPU0NBTiAqLwotCi0JLyogTm90IHN1cmUgd2hhdCB0byBkbyB3aXRoIHRoZXNlIG9uZXMhICovCi0JWyAxNSBdID0gS0VZX1NFTEVDVCwgCQkvKiBTT1VSQ0UgKi8KLQlbIDEwIF0gPSBLRVlfS1BQTFVTLAkJLyogKzEwMCAqLwotCVsgMjAgXSA9IEtFWV9LUEVRVUFMLAkJLyogU1lOQyAqLwotCVsgMjggXSA9IEtFWV9NRURJQSwgICAgICAgICAgICAgLyogUEMvVFYgKi8KLX07Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBpbnNtb2QgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOyAgICAvKiBkZWJ1ZyBsZXZlbCAoMCwxLDIpICovCiAKK3N0YXRpYyBpbnQgaGF1cHBhdWdlID0gMDsKK21vZHVsZV9wYXJhbShoYXVwcGF1Z2UsIGludCwgMDY0NCk7ICAgIC8qIENob29zZSBIYXVwcGF1Z2UgcmVtb3RlICovCitNT0RVTEVfUEFSTV9ERVNDKGhhdXBwYXVnZSwgIlNwZWNpZnkgSGF1cHBhdWdlIHJlbW90ZTogMD1ibGFjaywgMT1ncmV5IChkZWZhdWx0cyB0byAwKSIpOworCisKICNkZWZpbmUgREVWTkFNRSAiaXIta2JkLWkyYyIKICNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCWlmIChkZWJ1ZyA+PSBsZXZlbCkgXAogCXByaW50ayhLRVJOX0RFQlVHIERFVk5BTUUgIjogIiBmbXQgLCAjIyBhcmcpCkBAIC0zMzYsNyArMzAyLDExIEBACiAJCW5hbWUgICAgICAgID0gIkhhdXBwYXVnZSI7CiAJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9oYXVwOwogCQlpcl90eXBlICAgICA9IElSX1RZUEVfUkM1OwotCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX3JjNV90djsKKwkJaWYgKGhhdXBwYXVnZSA9PSAxKSB7CisJCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CisJCX0gZWxzZSB7CisJCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX3JjNV90djsKKwkJfQogCQlicmVhazsKIAljYXNlIDB4MzA6CiAJCW5hbWUgICAgICAgID0gIktOQyBPbmUiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCAyODY5NDY0Li44NTBiZWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtOTI1LDcgKzkyNSw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKHAtPnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9ZVVY0MjIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJZG93bigmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmbWV5ZS5sb2NrKTsKIAkJc29ueXBpX2NhbWVyYV9jb21tYW5kKFNPTllQSV9DT01NQU5EX1NFVENBTUVSQUJSSUdIVE5FU1MsCiAJCQkJICAgICAgcC0+YnJpZ2h0bmVzcyA+PiAxMCk7CiAJCXNvbnlwaV9jYW1lcmFfY29tbWFuZChTT05ZUElfQ09NTUFORF9TRVRDQU1FUkFIVUUsCkBAIC05MzUsNyArOTM1LDcgQEAKIAkJc29ueXBpX2NhbWVyYV9jb21tYW5kKFNPTllQSV9DT01NQU5EX1NFVENBTUVSQUNPTlRSQVNULAogCQkJCSAgICAgIHAtPmNvbnRyYXN0ID4+IDEwKTsKIAkJbWV5ZS5waWN0dXJlID0gKnA7Ci0JCXVwKCZtZXllLmxvY2spOworCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCWJyZWFrOwogCX0KIApAQCAtOTQ2LDIxICs5NDYsMjEgQEAKIAkJaWYgKCppIDwgMCB8fCAqaSA+PSBnYnVmZmVycykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWRvd24oJm1leWUubG9jayk7CisJCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAKIAkJc3dpdGNoIChtZXllLmdyYWJfYnVmZmVyWyppXS5zdGF0ZSkgewogCiAJCWNhc2UgTUVZRV9CVUZfVU5VU0VEOgotCQkJdXAoJm1leWUubG9jayk7CisJCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJY2FzZSBNRVlFX0JVRl9VU0lORzoKIAkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCXVwKCZtZXllLmxvY2spOworCQkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCQlyZXR1cm4gLUVBR0FJTjsKIAkJCX0KIAkJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobWV5ZS5wcm9jX2xpc3QsCiAJCQkJCQkgICAgIChtZXllLmdyYWJfYnVmZmVyWyppXS5zdGF0ZSAhPSBNRVlFX0JVRl9VU0lORykpKSB7Ci0JCQkJdXAoJm1leWUubG9jayk7CisJCQkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQkJCXJldHVybiAtRUlOVFI7CiAJCQl9CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTk2OCw3ICs5NjgsNyBAQAogCQkJbWV5ZS5ncmFiX2J1ZmZlclsqaV0uc3RhdGUgPSBNRVlFX0JVRl9VTlVTRUQ7CiAJCQlrZmlmb19nZXQobWV5ZS5kb25lcSwgKHVuc2lnbmVkIGNoYXIgKikmdW51c2VkLCBzaXplb2YoaW50KSk7CiAJCX0KLQkJdXAoJm1leWUubG9jayk7CisJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJYnJlYWs7CiAJfQogCkBAIC05ODcsNyArOTg3LDcgQEAKIAkJaWYgKG1leWUuZ3JhYl9idWZmZXJbdm0tPmZyYW1lXS5zdGF0ZSAhPSBNRVlFX0JVRl9VTlVTRUQpCiAJCQlyZXR1cm4gLUVCVVNZOwogCi0JCWRvd24oJm1leWUubG9jayk7CisJCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJCWlmICh2bS0+d2lkdGggPT0gNjQwICYmIHZtLT5oZWlnaHQgPT0gNDgwKSB7CiAJCQlpZiAobWV5ZS5wYXJhbXMuc3Vic2FtcGxlKSB7CiAJCQkJbWV5ZS5wYXJhbXMuc3Vic2FtcGxlID0gMDsKQEAgLTk5OSw3ICs5OTksNyBAQAogCQkJCXJlc3RhcnQgPSAxOwogCQkJfQogCQl9IGVsc2UgewotCQkJdXAoJm1leWUubG9jayk7CisJCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCQkJbWNoaXBfY29udGludW91c19zdGFydCgpOwogCQltZXllLmdyYWJfYnVmZmVyW3ZtLT5mcmFtZV0uc3RhdGUgPSBNRVlFX0JVRl9VU0lORzsKIAkJa2ZpZm9fcHV0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJnZtLT5mcmFtZSwgc2l6ZW9mKGludCkpOwotCQl1cCgmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQlicmVhazsKIAl9CiAKQEAgLTEwMzksNyArMTAzOSw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGpwLT5mcmFtZXJhdGUgPiAzMSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlkb3duKCZtZXllLmxvY2spOworCQltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCQlpZiAobWV5ZS5wYXJhbXMuc3Vic2FtcGxlICE9IGpwLT5zdWJzYW1wbGUgfHwKIAkJICAgIG1leWUucGFyYW1zLnF1YWxpdHkgIT0ganAtPnF1YWxpdHkpCiAJCQltY2hpcF9oaWNfc3RvcCgpOwkvKiBuZWVkIHJlc3RhcnQgKi8KQEAgLTEwNTAsNyArMTA1MCw3IEBACiAJCQkJICAgICAgbWV5ZS5wYXJhbXMuYWdjKTsKIAkJc29ueXBpX2NhbWVyYV9jb21tYW5kKFNPTllQSV9DT01NQU5EX1NFVENBTUVSQVBJQ1RVUkUsCiAJCQkJICAgICAgbWV5ZS5wYXJhbXMucGljdHVyZSk7Ci0JCXVwKCZtZXllLmxvY2spOworCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTA2OCwxMiArMTA2OCwxMiBAQAogCQl9CiAJCWlmIChtZXllLmdyYWJfYnVmZmVyWypuYl0uc3RhdGUgIT0gTUVZRV9CVUZfVU5VU0VEKQogCQkJcmV0dXJuIC1FQlVTWTsKLQkJZG93bigmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmbWV5ZS5sb2NrKTsKIAkJaWYgKG1leWUubWNoaXBfbW9kZSAhPSBNQ0hJUF9ISUNfTU9ERV9DT05UX0NPTVApCiAJCQltY2hpcF9jb250X2NvbXByZXNzaW9uX3N0YXJ0KCk7CiAJCW1leWUuZ3JhYl9idWZmZXJbKm5iXS5zdGF0ZSA9IE1FWUVfQlVGX1VTSU5HOwogCQlrZmlmb19wdXQobWV5ZS5ncmFicSwgKHVuc2lnbmVkIGNoYXIgKiluYiwgc2l6ZW9mKGludCkpOwotCQl1cCgmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQlicmVhazsKIAl9CiAKQEAgLTEwODQsMjAgKzEwODQsMjAgQEAKIAkJaWYgKCppIDwgMCB8fCAqaSA+PSBnYnVmZmVycykKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWRvd24oJm1leWUubG9jayk7CisJCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJCXN3aXRjaCAobWV5ZS5ncmFiX2J1ZmZlclsqaV0uc3RhdGUpIHsKIAogCQljYXNlIE1FWUVfQlVGX1VOVVNFRDoKLQkJCXVwKCZtZXllLmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWNhc2UgTUVZRV9CVUZfVVNJTkc6CiAJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCQl1cCgmbWV5ZS5sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCQkJcmV0dXJuIC1FQUdBSU47CiAJCQl9CiAJCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG1leWUucHJvY19saXN0LAogCQkJCQkJICAgICAobWV5ZS5ncmFiX2J1ZmZlclsqaV0uc3RhdGUgIT0gTUVZRV9CVUZfVVNJTkcpKSkgewotCQkJCXVwKCZtZXllLmxvY2spOworCQkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCQlyZXR1cm4gLUVJTlRSOwogCQkJfQogCQkJLyogZmFsbCB0aHJvdWdoICovCkBAIC0xMTA2LDcgKzExMDYsNyBAQAogCQkJa2ZpZm9fZ2V0KG1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnVudXNlZCwgc2l6ZW9mKGludCkpOwogCQl9CiAJCSppID0gbWV5ZS5ncmFiX2J1ZmZlclsqaV0uc2l6ZTsKLQkJdXAoJm1leWUubG9jayk7CisJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMTE2LDE0ICsxMTE2LDE0IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKG1leWUuZ3JhYl9idWZmZXJbMF0uc3RhdGUgIT0gTUVZRV9CVUZfVU5VU0VEKQogCQkJcmV0dXJuIC1FQlVTWTsKLQkJZG93bigmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmbWV5ZS5sb2NrKTsKIAkJbWV5ZS5ncmFiX2J1ZmZlclswXS5zdGF0ZSA9IE1FWUVfQlVGX1VTSU5HOwogCQltY2hpcF90YWtlX3BpY3R1cmUoKTsKIAkJbWNoaXBfZ2V0X3BpY3R1cmUoCiAJCQltZXllLmdyYWJfZmJ1ZmZlciwKIAkJCW1jaGlwX2hzaXplKCkgKiBtY2hpcF92c2l6ZSgpICogMik7CiAJCW1leWUuZ3JhYl9idWZmZXJbMF0uc3RhdGUgPSBNRVlFX0JVRl9ET05FOwotCQl1cCgmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQlicmVhazsKIAl9CiAKQEAgLTExMzQsNyArMTEzNCw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKG1leWUuZ3JhYl9idWZmZXJbMF0uc3RhdGUgIT0gTUVZRV9CVUZfVU5VU0VEKQogCQkJcmV0dXJuIC1FQlVTWTsKLQkJZG93bigmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmbWV5ZS5sb2NrKTsKIAkJbWV5ZS5ncmFiX2J1ZmZlclswXS5zdGF0ZSA9IE1FWUVfQlVGX1VTSU5HOwogCQkqbGVuID0gLTE7CiAJCXdoaWxlICgqbGVuID09IC0xKSB7CkBAIC0xMTQyLDcgKzExNDIsNyBAQAogCQkJKmxlbiA9IG1jaGlwX2NvbXByZXNzX2ZyYW1lKG1leWUuZ3JhYl9mYnVmZmVyLCBnYnVmc2l6ZSk7CiAJCX0KIAkJbWV5ZS5ncmFiX2J1ZmZlclswXS5zdGF0ZSA9IE1FWUVfQlVGX0RPTkU7Ci0JCXVwKCZtZXllLmxvY2spOworCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTI4NSw3ICsxMjg1LDcgQEAKIAljYXNlIFZJRElPQ19TX0NUUkw6IHsKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqYyA9IGFyZzsKIAotCQlkb3duKCZtZXllLmxvY2spOworCQltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCQlzd2l0Y2ggKGMtPmlkKSB7CiAJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKIAkJCXNvbnlwaV9jYW1lcmFfY29tbWFuZCgKQEAgLTEzMjksMTcgKzEzMjksMTcgQEAKIAkJCW1leWUucGFyYW1zLmZyYW1lcmF0ZSA9IGMtPnZhbHVlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQl1cCgmbWV5ZS5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXVwKCZtZXllLmxvY2spOworCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCWJyZWFrOwogCX0KIAogCWNhc2UgVklESU9DX0dfQ1RSTDogewogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjID0gYXJnOwogCi0JCWRvd24oJm1leWUubG9jayk7CisJCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJCXN3aXRjaCAoYy0+aWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQkJYy0+dmFsdWUgPSBtZXllLnBpY3R1cmUuYnJpZ2h0bmVzcyA+PiAxMDsKQEAgLTEzNjksMTAgKzEzNjksMTAgQEAKIAkJCWMtPnZhbHVlID0gbWV5ZS5wYXJhbXMuZnJhbWVyYXRlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQl1cCgmbWV5ZS5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXVwKCZtZXllLmxvY2spOworCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTQ2OSw3ICsxNDY5LDcgQEAKIAkJICAgIGYtPmZtdC5waXguZmllbGQgIT0gVjRMMl9GSUVMRF9OT05FKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JCWRvd24oJm1leWUubG9jayk7CisJCW11dGV4X2xvY2soJm1leWUubG9jayk7CiAJCWlmIChmLT5mbXQucGl4LndpZHRoIDw9IDMyMCkgewogCQkJZi0+Zm10LnBpeC53aWR0aCA9IDMyMDsKIAkJCWYtPmZtdC5waXguaGVpZ2h0ID0gMjQwOwpAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAKIAkJCW1leWUubWNoaXBfbW9kZSA9IE1DSElQX0hJQ19NT0RFX0NPTlRfQ09NUDsKIAkJCWJyZWFrOwogCQl9Ci0JCXVwKCZtZXllLmxvY2spOworCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gZi0+Zm10LnBpeC53aWR0aCAqIDI7CiAJCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5oZWlnaHQgKgogCQkJCSAgICAgICBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKQEAgLTE1MDksMTEgKzE1MDksMTEgQEAKIAkJCS8qIGFscmVhZHkgYWxsb2NhdGVkLCBubyBtb2RpZmljYXRpb25zICovCiAJCQlicmVhazsKIAkJfQotCQlkb3duKCZtZXllLmxvY2spOworCQltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCQlpZiAobWV5ZS5ncmFiX2ZidWZmZXIpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBnYnVmZmVyczsgaSsrKQogCQkJCWlmIChtZXllLnZtYV91c2VfY291bnRbaV0pIHsKLQkJCQkJdXAoJm1leWUubG9jayk7CisJCQkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJfQogCQkJcnZmcmVlKG1leWUuZ3JhYl9mYnVmZmVyLCBnYnVmZmVycyAqIGdidWZzaXplKTsKQEAgLTE1MjUsMTIgKzE1MjUsMTIgQEAKIAkJaWYgKCFtZXllLmdyYWJfZmJ1ZmZlcikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtZXllOiB2NGwgZnJhbWVidWZmZXIgYWxsb2NhdGlvbiIKIAkJCQkJIiBmYWlsZWRcbiIpOwotCQkJdXAoJm1leWUubG9jayk7CisJCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgZ2J1ZmZlcnM7IGkrKykKIAkJCW1leWUudm1hX3VzZV9jb3VudFtpXSA9IDA7Ci0JCXVwKCZtZXllLmxvY2spOworCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTU2OSwxMiArMTU2OSwxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChtZXllLmdyYWJfYnVmZmVyW2J1Zi0+aW5kZXhdLnN0YXRlICE9IE1FWUVfQlVGX1VOVVNFRCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlkb3duKCZtZXllLmxvY2spOworCQltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOwogCQlidWYtPmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX0RPTkU7CiAJCW1leWUuZ3JhYl9idWZmZXJbYnVmLT5pbmRleF0uc3RhdGUgPSBNRVlFX0JVRl9VU0lORzsKIAkJa2ZpZm9fcHV0KG1leWUuZ3JhYnEsICh1bnNpZ25lZCBjaGFyICopJmJ1Zi0+aW5kZXgsIHNpemVvZihpbnQpKTsKLQkJdXAoJm1leWUubG9jayk7CisJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNTg3LDIzICsxNTg3LDIzIEBACiAJCWlmIChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZG93bigmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmbWV5ZS5sb2NrKTsKIAkJaWYgKGtmaWZvX2xlbihtZXllLmRvbmVxKSA9PSAwICYmIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl1cCgmbWV5ZS5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobWV5ZS5wcm9jX2xpc3QsCiAJCQkJCSAgICAga2ZpZm9fbGVuKG1leWUuZG9uZXEpICE9IDApIDwgMCkgewotCQkJdXAoJm1leWUubG9jayk7CisJCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCQlyZXR1cm4gLUVJTlRSOwogCQl9CiAJCWlmICgha2ZpZm9fZ2V0KG1leWUuZG9uZXEsICh1bnNpZ25lZCBjaGFyICopJnJlcW5yLAogCQkJICAgICAgIHNpemVvZihpbnQpKSkgewotCQkJdXAoJm1leWUubG9jayk7CisJCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWlmIChtZXllLmdyYWJfYnVmZmVyW3JlcW5yXS5zdGF0ZSAhPSBNRVlFX0JVRl9ET05FKSB7Ci0JCQl1cCgmbWV5ZS5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJ1Zi0+aW5kZXggPSByZXFucjsKQEAgLTE2MTYsMTIgKzE2MTYsMTIgQEAKIAkJYnVmLT5tLm9mZnNldCA9IHJlcW5yICogZ2J1ZnNpemU7CiAJCWJ1Zi0+bGVuZ3RoID0gZ2J1ZnNpemU7CiAJCW1leWUuZ3JhYl9idWZmZXJbcmVxbnJdLnN0YXRlID0gTUVZRV9CVUZfVU5VU0VEOwotCQl1cCgmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQlicmVhazsKIAl9CiAKIAljYXNlIFZJRElPQ19TVFJFQU1PTjogewotCQlkb3duKCZtZXllLmxvY2spOworCQltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCQlzd2l0Y2ggKG1leWUubWNoaXBfbW9kZSkgewogCQljYXNlIE1DSElQX0hJQ19NT0RFX0NPTlRfT1VUOgogCQkJbWNoaXBfY29udGludW91c19zdGFydCgpOwpAQCAtMTYzMCwyMyArMTYzMCwyMyBAQAogCQkJbWNoaXBfY29udF9jb21wcmVzc2lvbl9zdGFydCgpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQl1cCgmbWV5ZS5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXVwKCZtZXllLmxvY2spOworCQltdXRleF91bmxvY2soJm1leWUubG9jayk7CiAJCWJyZWFrOwogCX0KIAogCWNhc2UgVklESU9DX1NUUkVBTU9GRjogewogCQlpbnQgaTsKIAotCQlkb3duKCZtZXllLmxvY2spOworCQltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCQltY2hpcF9oaWNfc3RvcCgpOwogCQlrZmlmb19yZXNldChtZXllLmdyYWJxKTsKIAkJa2ZpZm9fcmVzZXQobWV5ZS5kb25lcSk7CiAJCWZvciAoaSA9IDA7IGkgPCBNRVlFX01BWF9CVUZOQlJTOyBpKyspCiAJCQltZXllLmdyYWJfYnVmZmVyW2ldLnN0YXRlID0gTUVZRV9CVUZfVU5VU0VEOwotCQl1cCgmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQlicmVhazsKIAl9CiAKQEAgLTE2NzIsMTEgKzE2NzIsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgcmVzID0gMDsKIAotCWRvd24oJm1leWUubG9jayk7CisJbXV0ZXhfbG9jaygmbWV5ZS5sb2NrKTsKIAlwb2xsX3dhaXQoZmlsZSwgJm1leWUucHJvY19saXN0LCB3YWl0KTsKIAlpZiAoa2ZpZm9fbGVuKG1leWUuZG9uZXEpKQogCQlyZXMgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCXVwKCZtZXllLmxvY2spOworCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xNzA0LDkgKzE3MDQsOSBAQAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOwogCi0JZG93bigmbWV5ZS5sb2NrKTsKKwltdXRleF9sb2NrKCZtZXllLmxvY2spOwogCWlmIChzaXplID4gZ2J1ZmZlcnMgKiBnYnVmc2l6ZSkgewotCQl1cCgmbWV5ZS5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCFtZXllLmdyYWJfZmJ1ZmZlcikgewpAQCAtMTcxNiw3ICsxNzE2LDcgQEAKIAkJbWV5ZS5ncmFiX2ZidWZmZXIgPSBydm1hbGxvYyhnYnVmZmVycypnYnVmc2l6ZSk7CiAJCWlmICghbWV5ZS5ncmFiX2ZidWZmZXIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAibWV5ZTogdjRsIGZyYW1lYnVmZmVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJCXVwKCZtZXllLmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IGdidWZmZXJzOyBpKyspCkBAIC0xNzI3LDcgKzE3MjcsNyBAQAogCXdoaWxlIChzaXplID4gMCkgewogCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOwogCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKSB7Ci0JCQl1cCgmbWV5ZS5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmbWV5ZS5sb2NrKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJCXN0YXJ0ICs9IFBBR0VfU0laRTsKQEAgLTE3NDQsNyArMTc0NCw3IEBACiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAodm9pZCAqKSAob2Zmc2V0IC8gZ2J1ZnNpemUpOwogCW1leWVfdm1fb3Blbih2bWEpOwogCi0JdXAoJm1leWUubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZtZXllLmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xOTEzLDcgKzE5MTMsNyBAQAogCQlnb3RvIG91dHZpZGVvcmVnOwogCX0KIAotCWluaXRfTVVURVgoJm1leWUubG9jayk7CisJbXV0ZXhfaW5pdCgmbWV5ZS5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZXllLnByb2NfbGlzdCk7CiAJbWV5ZS5waWN0dXJlLmRlcHRoID0gMTY7CiAJbWV5ZS5waWN0dXJlLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1lVVjQyMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKaW5kZXggZThjZDg5Ny4uMGQwOWEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmgKQEAgLTI2MCw2ICsyNjAsOCBAQAogCiAvKiBwcml2YXRlIEFQSSBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgPGxpbnV4L21leWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAKIC8qIEVuYWJsZSBqcGcgc29mdHdhcmUgY29ycmVjdGlvbiAqLwogI2RlZmluZSBNRVlFX0pQRUdfQ09SUkVDVElPTgkxCkBAIC0zMDEsNyArMzAzLDcgQEAKIAkJCQkJLyogbGlzdCBvZiBidWZmZXJzICovCiAJc3RydWN0IG1leWVfZ3JhYl9idWZmZXIgZ3JhYl9idWZmZXJbTUVZRV9NQVhfQlVGTkJSU107CiAJaW50IHZtYV91c2VfY291bnRbTUVZRV9NQVhfQlVGTkJSU107IC8qIG1tYXAgY291bnQgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CQkvKiBzZW1hcGhvcmUgZm9yIG9wZW4vbW1hcC4uLiAqLworCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogbXV0ZXggZm9yIG9wZW4vbW1hcC4uLiAqLwogCXN0cnVjdCBrZmlmbyAqZ3JhYnE7CQkvKiBxdWV1ZSBmb3IgYnVmZmVycyB0byBiZSBncmFiYmVkICovCiAJc3BpbmxvY2tfdCBncmFicV9sb2NrOwkJLyogbG9jayBwcm90ZWN0aW5nIHRoZSBxdWV1ZSAqLwogCXN0cnVjdCBrZmlmbyAqZG9uZXE7CQkvKiBxdWV1ZSBmb3IgZ3JhYmJlZCBidWZmZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKaW5kZXggNjllZDM2OS4uYzQwZThiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwpAQCAtNTMsMTAgKzUzLDExIEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgorI2luY2x1ZGUgPG1lZGlhL3R2YXVkaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS9tc3AzNDAwLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlICJtc3AzNDAwLmgiCisjaW5jbHVkZSAibXNwMzQwMC1kcml2ZXIuaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yNDUsMzEgKzI0NiwzMSBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzY2FydHNbM11bOV0gPSB7Ci0JLyogTUFTSyAgICBJTjEgICAgIElOMiAgICAgSU4xX0RBICBJTjJfREEgIElOMyAgICAgSU40ICAgICBNT05PICAgIE1VVEUgICAqLworICAgICAgIC8qIE1BU0sgICBJTjEgICAgIElOMiAgICAgSU4zICAgICBJTjQgICAgIElOMV9EQSAgSU4yX0RBICBNT05PICAgIE1VVEUgICAqLwogCS8qIFNDQVJUIERTUCBJbnB1dCBzZWxlY3QgKi8KLQl7IDB4MDMyMCwgMHgwMDAwLCAweDAyMDAsIC0xLCAgICAgLTEsICAgICAweDAzMDAsIDB4MDAyMCwgMHgwMTAwLCAweDAzMjAgfSwKKyAgICAgICB7IDB4MDMyMCwgMHgwMDAwLCAweDAyMDAsIDB4MDMwMCwgMHgwMDIwLCAtMSwgICAgIC0xLCAgICAgMHgwMTAwLCAweDAzMjAgfSwKIAkvKiBTQ0FSVDEgT3V0cHV0IHNlbGVjdCAqLwotCXsgMHgwYzQwLCAweDA0NDAsIDB4MDQwMCwgMHgwYzAwLCAweDAwNDAsIDB4MDAwMCwgMHgwODQwLCAweDA4MDAsIDB4MGM0MCB9LAorICAgICAgIHsgMHgwYzQwLCAweDA0NDAsIDB4MDQwMCwgMHgwMDAwLCAweDA4NDAsIDB4MGMwMCwgMHgwMDQwLCAweDA4MDAsIDB4MGM0MCB9LAogCS8qIFNDQVJUMiBPdXRwdXQgc2VsZWN0ICovCi0JeyAweDMwODAsIDB4MTAwMCwgMHgxMDgwLCAweDAwMDAsIDB4MDA4MCwgMHgyMDgwLCAweDMwODAsIDB4MjAwMCwgMHgzMDAwIH0sCisgICAgICAgeyAweDMwODAsIDB4MTAwMCwgMHgxMDgwLCAweDIwODAsIDB4MzA4MCwgMHgwMDAwLCAweDAwODAsIDB4MjAwMCwgMHgzMDAwIH0sCiB9OwogCiBzdGF0aWMgY2hhciAqc2NhcnRfbmFtZXNbXSA9IHsKLQkibWFzayIsICJpbjEiLCAiaW4yIiwgImluMSBkYSIsICJpbjIgZGEiLCAiaW4zIiwgImluNCIsICJtb25vIiwgIm11dGUiCisgICAgICAgImluMSIsICJpbjIiLCAiaW4zIiwgImluNCIsICJpbjEgZGEiLCAiaW4yIGRhIiwgIm1vbm8iLCAibXV0ZSIKIH07CiAKIHZvaWQgbXNwX3NldF9zY2FydChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaW4sIGludCBvdXQpCiB7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCXN0YXRlLT5pbl9zY2FydD1pbjsKKwlzdGF0ZS0+aW5fc2NhcnQgPSBpbjsKIAotCWlmIChpbiA+PSAxICYmIGluIDw9IDggJiYgb3V0ID49IDAgJiYgb3V0IDw9IDIpIHsKLQkJaWYgKC0xID09IHNjYXJ0c1tvdXRdW2luXSkKKwlpZiAoaW4gPj0gMCAmJiBpbiA8PSA3ICYmIG91dCA+PSAwICYmIG91dCA8PSAyKSB7CisJCWlmICgtMSA9PSBzY2FydHNbb3V0XVtpbiArIDFdKQogCQkJcmV0dXJuOwogCi0JCXN0YXRlLT5hY2IgJj0gfnNjYXJ0c1tvdXRdW1NDQVJUX01BU0tdOwotCQlzdGF0ZS0+YWNiIHw9ICBzY2FydHNbb3V0XVtpbl07CisJCXN0YXRlLT5hY2IgJj0gfnNjYXJ0c1tvdXRdWzBdOworCQlzdGF0ZS0+YWNiIHw9ICBzY2FydHNbb3V0XVtpbiArIDFdOwogCX0gZWxzZQogCQlzdGF0ZS0+YWNiID0gMHhmNjA7IC8qIE11dGUgSW5wdXQgYW5kIFNDQVJUIDEgT3V0cHV0ICovCiAKQEAgLTMzNiwzNyArMzM3LDYgQEAKIAltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDMzLCBsb3VkbmVzcyk7CiB9CiAKLWludCBtc3BfbW9kdXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaWYgKHN0YXRlLT5yYWRpbykgewotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBSYWRpb1xuIik7Ci0JCXJldHVybiAweDAwMDM7Ci0JfQotCi0JaWYgKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX1BBTCkgewotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBQQUxcbiIpOwotCi0jaWYgMQotCQkvKiBleHBlcmltZW50YWw6IG5vdCBzdXJlIHRoaXMgd29ya3Mgd2l0aCBhbGwgY2hpcCB2ZXJzaW9ucyAqLwotCQlyZXR1cm4gMHg3MDAzOwotI2Vsc2UKLQkJLyogcHJldmlvdXMgdmFsdWUsIHRyeSB0aGlzIGlmIGl0IGJyZWFrcyAuLi4gKi8KLQkJcmV0dXJuIDB4MTAwMzsKLSNlbmRpZgotCX0KLQlpZiAoc3RhdGUtPnY0bDJfc3RkICYgVjRMMl9TVERfTlRTQykgewotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidmlkZW8gbW9kZSBzZWxlY3RlZCB0byBOVFNDXG4iKTsKLQkJcmV0dXJuIDB4MjAwMzsKLQl9Ci0JaWYgKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7Ci0JCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJ2aWRlbyBtb2RlIHNlbGVjdGVkIHRvIFNFQ0FNXG4iKTsKLQkJcmV0dXJuIDB4MDAwMzsKLQl9Ci0JcmV0dXJuIDB4MDAwMzsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIApAQCAtNDExLDkgKzM4MSw5IEBACiAJaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TVEVSRU8pCiAJCW1vZGUgfD0gVklERU9fU09VTkRfU1RFUkVPOwogCWlmIChyeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpCi0JCW1vZGUgfD0gVklERU9fU09VTkRfTEFORzI7CisJCW1vZGUgfD0gVklERU9fU09VTkRfTEFORzIgfCBWSURFT19TT1VORF9TVEVSRU87CiAJaWYgKHJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9MQU5HMSkKLQkJbW9kZSB8PSBWSURFT19TT1VORF9MQU5HMTsKKwkJbW9kZSB8PSBWSURFT19TT1VORF9MQU5HMSB8IFZJREVPX1NPVU5EX1NURVJFTzsKIAlpZiAobW9kZSA9PSAwKQogCQltb2RlIHw9IFZJREVPX1NPVU5EX01PTk87CiAJcmV0dXJuIG1vZGU7CkBAIC00MzAsMjEgKzQwMCw2IEBACiAJcmV0dXJuIFY0TDJfVFVORVJfTU9ERV9NT05POwogfQogCi1zdGF0aWMgdm9pZCBtc3BfYW55X2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXN3aXRjaCAoc3RhdGUtPm9wbW9kZSkgewotCWNhc2UgT1BNT0RFX01BTlVBTDoKLQljYXNlIE9QTU9ERV9BVVRPREVURUNUOgotCQlhdXRvZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOwotCQlicmVhazsKLQljYXNlIE9QTU9ERV9BVVRPU0VMRUNUOgotCQltc3AzNHh4Z19kZXRlY3Rfc3RlcmVvKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBtc3BfcWN0cmxfc3RkW10gPSB7CiAJewogCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKQEAgLTUwNiwyMiArNDYxLDYgQEAKIH07CiAKIAotc3RhdGljIHZvaWQgbXNwX2FueV9zZXRfYXVkbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYXVkbW9kZSkKLXsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc3dpdGNoIChzdGF0ZS0+b3Btb2RlKSB7Ci0JY2FzZSBPUE1PREVfTUFOVUFMOgotCWNhc2UgT1BNT0RFX0FVVE9ERVRFQ1Q6Ci0JCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOwotCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBhdWRtb2RlKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUE1PREVfQVVUT1NFTEVDVDoKLQkJbXNwMzR4eGdfc2V0X2F1ZG1vZGUoY2xpZW50LCBhdWRtb2RlKTsKLQkJYnJlYWs7Ci0JfQotfQotCiBzdGF0aWMgaW50IG1zcF9nZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CkBAIC02MTYsNTIgKzU1NSwxMSBAQAogc3RhdGljIGludCBtc3BfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1MTYgKnNhcmcgPSBhcmc7Ci0JaW50IHNjYXJ0ID0gMDsKIAogCWlmIChtc3BfZGVidWcgPj0gMikKIAkJdjRsX2kyY19wcmludF9pb2N0bChjbGllbnQsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQVVEQ19TRVRfSU5QVVQ6Ci0JCWlmICgqc2FyZyA9PSBzdGF0ZS0+aW5wdXQpCi0JCQlicmVhazsKLQkJc3RhdGUtPmlucHV0ID0gKnNhcmc7Ci0JCXN3aXRjaCAoKnNhcmcpIHsKLQkJY2FzZSBBVURJT19SQURJTzoKLQkJCS8qIEhhdXBwYXVnZSB1c2VzIElOMiBmb3IgdGhlIHJhZGlvICovCi0JCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0ZNX1JBRElPOwotCQkJc2NhcnQgICAgICAgPSBTQ0FSVF9JTjI7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19FWFRFUk5fMToKLQkJCS8qIElOMSBpcyBvZnRlbiB1c2VkIGZvciBleHRlcm5hbCBpbnB1dCAuLi4gKi8KLQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRVhURVJOOwotCQkJc2NhcnQgICAgICAgPSBTQ0FSVF9JTjE7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19FWFRFUk5fMjoKLQkJCS8qIC4uLiBzb21ldGltZXMgaXQgaXMgSU4yIHRocm91Z2ggOykgKi8KLQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRVhURVJOOwotCQkJc2NhcnQgICAgICAgPSBTQ0FSVF9JTjI7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19UVU5FUjoKLQkJCXN0YXRlLT5tb2RlID0gLTE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmICgqc2FyZyAmIEFVRElPX01VVEUpCi0JCQkJbXNwX3NldF9zY2FydChjbGllbnQsIFNDQVJUX01VVEUsIDApOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNjYXJ0KSB7Ci0JCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJCXN0YXRlLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzY2FydCwgMCk7Ci0JCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBkLCAweDE5MDApOwotCQkJaWYgKHN0YXRlLT5vcG1vZGUgIT0gT1BNT0RFX0FVVE9TRUxFQ1QpCi0JCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgc3RhdGUtPmF1ZG1vZGUpOwotCQl9Ci0JCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwotCQlicmVhazsKLQogCWNhc2UgQVVEQ19TRVRfUkFESU86CiAJCWlmIChzdGF0ZS0+cmFkaW8pCiAJCQlyZXR1cm4gMDsKQEAgLTY3MSw4ICs1NjksOCBAQAogCQlzd2l0Y2ggKHN0YXRlLT5vcG1vZGUpIHsKIAkJY2FzZSBPUE1PREVfTUFOVUFMOgogCQkJLyogc2V0IG1zcDM0MDAgdG8gRk0gcmFkaW8gbW9kZSAqLwotCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1JBRElPKTsKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUigxMC43KSwKKwkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fUkFESU8pOworCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUigxMC43KSwKIAkJCQkJICAgIE1TUF9DQVJSSUVSKDEwLjcpKTsKIAkJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKIAkJCWJyZWFrOwpAQCAtNzA2LDcgKzYwNCw3IEBACiAJCWlmIChzdGF0ZS0+cmFkaW8pCiAJCQlicmVhazsKIAkJaWYgKHN0YXRlLT5vcG1vZGUgPT0gT1BNT0RFX0FVVE9TRUxFQ1QpCi0JCQltc3BfYW55X2RldGVjdF9zdGVyZW8oY2xpZW50KTsKKwkJCW1zcF9kZXRlY3Rfc3RlcmVvKGNsaWVudCk7CiAJCXZhLT5tb2RlID0gbXNwX21vZGVfdjRsMl90b192NGwxKHN0YXRlLT5yeHN1YmNoYW5zKTsKIAkJYnJlYWs7CiAJfQpAQCAtNzIyLDggKzYyMCwxMCBAQAogCQlzdGF0ZS0+dHJlYmxlID0gdmEtPnRyZWJsZTsKIAkJbXNwX3NldF9hdWRpbyhjbGllbnQpOwogCi0JCWlmICh2YS0+bW9kZSAhPSAwICYmIHN0YXRlLT5yYWRpbyA9PSAwKQotCQkJbXNwX2FueV9zZXRfYXVkbW9kZShjbGllbnQsIG1zcF9tb2RlX3Y0bDFfdG9fdjRsMih2YS0+bW9kZSkpOworCQlpZiAodmEtPm1vZGUgIT0gMCAmJiBzdGF0ZS0+cmFkaW8gPT0gMCkgeworCQkJc3RhdGUtPmF1ZG1vZGUgPSBtc3BfbW9kZV92NGwxX3RvX3Y0bDIodmEtPm1vZGUpOworCQkJbXNwX3NldF9hdWRtb2RlKGNsaWVudCk7CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC03NTksMTUgKzY1OSw2IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIG1zcDM0eHggc3BlY2lmaWMgKi8KLQljYXNlIE1TUF9TRVRfTUFUUklYOgotCXsKLQkJc3RydWN0IG1zcF9tYXRyaXggKm1zcG0gPSBhcmc7Ci0KLQkJbXNwX3NldF9zY2FydChjbGllbnQsIG1zcG0tPmlucHV0LCBtc3BtLT5vdXRwdXQpOwotCQlicmVhazsKLQl9Ci0KIAkvKiAtLS0gdjRsMiBpb2N0bHMgLS0tICovCiAJY2FzZSBWSURJT0NfU19TVEQ6CiAJewpAQCAtNzgxLDEwMCArNjcyLDM1IEBACiAJCXJldHVybiAwOwogCX0KIAotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKKwljYXNlIFZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HOgogCXsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJ0ID0gYXJnOwogCi0JCWlmIChpLT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKLQkJc3dpdGNoIChpLT5pbmRleCkgewotCQljYXNlIEFVRElPX1JBRElPOgotCQkJc3RyY3B5KGktPm5hbWUsICJSYWRpbyIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fRVhURVJOXzE6Ci0JCQlzdHJjcHkoaS0+bmFtZSwgIkV4dGVybiAxIik7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19FWFRFUk5fMjoKLQkJCXN0cmNweShpLT5uYW1lLCAiRXh0ZXJuIDIiKTsKLQkJCWJyZWFrOwotCQljYXNlIEFVRElPX1RVTkVSOgotCQkJc3RyY3B5KGktPm5hbWUsICJUZWxldmlzaW9uIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DX0dfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQotCQltZW1zZXQoYSwgMCwgc2l6ZW9mKCphKSk7Ci0KLQkJc3dpdGNoIChhLT5pbmRleCkgewotCQljYXNlIEFVRElPX1JBRElPOgotCQkJc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVESU9fRVhURVJOXzE6Ci0JCQlzdHJjcHkoYS0+bmFtZSwgIkV4dGVybiAxIik7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19FWFRFUk5fMjoKLQkJCXN0cmNweShhLT5uYW1lLCAiRXh0ZXJuIDIiKTsKLQkJCWJyZWFrOwotCQljYXNlIEFVRElPX1RVTkVSOgotCQkJc3RyY3B5KGEtPm5hbWUsICJUZWxldmlzaW9uIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXNwX2FueV9kZXRlY3Rfc3RlcmVvKGNsaWVudCk7Ci0JCWlmIChzdGF0ZS0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPKSB7Ci0JCQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCQl9Ci0KKwkJKnJ0ID0gc3RhdGUtPnJvdXRpbmc7CiAJCWJyZWFrOwogCX0KIAotCWNhc2UgVklESU9DX1NfQVVESU86CisJY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKIAl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICpzYXJnID0gYXJnOworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpydCA9IGFyZzsKKwkJaW50IHR1bmVyID0gKHJ0LT5pbnB1dCA+PiAzKSAmIDE7CisJCWludCBzY19pbiA9IHJ0LT5pbnB1dCAmIDB4NzsKKwkJaW50IHNjMV9vdXQgPSBydC0+b3V0cHV0ICYgMHhmOworCQlpbnQgc2MyX291dCA9IChydC0+b3V0cHV0ID4+IDQpICYgMHhmOworCQl1MTYgdmFsOwogCi0JCXN3aXRjaCAoc2FyZy0+aW5kZXgpIHsKLQkJY2FzZSBBVURJT19SQURJTzoKLQkJCS8qIEhhdXBwYXVnZSB1c2VzIElOMiBmb3IgdGhlIHJhZGlvICovCi0JCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0ZNX1JBRElPOwotCQkJc2NhcnQgICAgICAgPSBTQ0FSVF9JTjI7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19FWFRFUk5fMToKLQkJCS8qIElOMSBpcyBvZnRlbiB1c2VkIGZvciBleHRlcm5hbCBpbnB1dCAuLi4gKi8KLQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRVhURVJOOwotCQkJc2NhcnQgICAgICAgPSBTQ0FSVF9JTjE7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19FWFRFUk5fMjoKLQkJCS8qIC4uLiBzb21ldGltZXMgaXQgaXMgSU4yIHRocm91Z2ggOykgKi8KLQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRVhURVJOOwotCQkJc2NhcnQgICAgICAgPSBTQ0FSVF9JTjI7Ci0JCQlicmVhazsKLQkJY2FzZSBBVURJT19UVU5FUjoKLQkJCXN0YXRlLT5tb2RlID0gLTE7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc2NhcnQpIHsKLQkJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCQkJc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQkJbXNwX3NldF9zY2FydChjbGllbnQsIHNjYXJ0LCAwKTsKLQkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGQsIDB4MTkwMCk7Ci0JCX0KLQkJaWYgKHNhcmctPmNhcGFiaWxpdHkgPT0gVjRMMl9BVURDQVBfU1RFUkVPKSB7Ci0JCQlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCXN0YXRlLT5yb3V0aW5nID0gKnJ0OworCQlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkgeworCQkJdmFsID0gbXNwX3JlYWRfZGVtKGNsaWVudCwgMHgzMCkgJiB+MHgxMDA7CisJCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgzMCwgdmFsIHwgKHR1bmVyID8gMHgxMDAgOiAwKSk7CiAJCX0gZWxzZSB7Ci0JCQlzdGF0ZS0+YXVkbW9kZSAmPSB+VjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJCXZhbCA9IG1zcF9yZWFkX2RlbShjbGllbnQsIDB4YmIpICYgfjB4MTAwOworCQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4YmIsIHZhbCB8ICh0dW5lciA/IDB4MTAwIDogMCkpOwogCQl9Ci0JCW1zcF9hbnlfc2V0X2F1ZG1vZGUoY2xpZW50LCBzdGF0ZS0+YXVkbW9kZSk7CisJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzY19pbiwgMCk7CisJCW1zcF9zZXRfc2NhcnQoY2xpZW50LCBzYzFfb3V0LCAxKTsKKwkJbXNwX3NldF9zY2FydChjbGllbnQsIHNjMl9vdXQsIDIpOworCQltc3Bfc2V0X2F1ZG1vZGUoY2xpZW50KTsKIAkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7CiAJCWJyZWFrOwogCX0KQEAgLTg4Niw3ICs3MTIsNyBAQAogCQlpZiAoc3RhdGUtPnJhZGlvKQogCQkJYnJlYWs7CiAJCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKQotCQkJbXNwX2FueV9kZXRlY3Rfc3RlcmVvKGNsaWVudCk7CisJCQltc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOwogCQl2dC0+YXVkbW9kZSAgICA9IHN0YXRlLT5hdWRtb2RlOwogCQl2dC0+cnhzdWJjaGFucyA9IHN0YXRlLT5yeHN1YmNoYW5zOwogCQl2dC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CkBAIC04OTgsNDggKzcyNCwxMSBAQAogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gKHN0cnVjdCB2NGwyX3R1bmVyICopYXJnOwogCi0JCWlmIChzdGF0ZS0+cmFkaW8pCisJCWlmIChzdGF0ZS0+cmFkaW8pICAvKiBUT0RPOiBhZGQgbW9uby9zdGVyZW8gc3VwcG9ydCBmb3IgcmFkaW8gKi8KIAkJCWJyZWFrOworCQlzdGF0ZS0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOwogCQkvKiBvbmx5IHNldCBhdWRtb2RlICovCi0JCWlmICh2dC0+YXVkbW9kZSAhPSAtMSAmJiB2dC0+YXVkbW9kZSAhPSAwKQotCQkJbXNwX2FueV9zZXRfYXVkbW9kZShjbGllbnQsIHZ0LT5hdWRtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19BVURPVVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpb291dCAqYSA9IChzdHJ1Y3QgdjRsMl9hdWRpb291dCAqKWFyZzsKLQkJaW50IGlkeCA9IGEtPmluZGV4OwotCi0JCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKLQotCQlzd2l0Y2ggKGlkeCkgewotCQljYXNlIDA6Ci0JCQlzdHJjcHkoYS0+bmFtZSwgIlNjYXJ0MSBPdXQiKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlzdHJjcHkoYS0+bmFtZSwgIlNjYXJ0MiBPdXQiKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlzdHJjcHkoYS0+bmFtZSwgIkkyUyBPdXQiKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0KLQl9Ci0KLQljYXNlIFZJRElPQ19TX0FVRE9VVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvb3V0ICphID0gKHN0cnVjdCB2NGwyX2F1ZGlvb3V0ICopYXJnOwotCi0JCWlmIChhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiAyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIlNldHRpbmcgYXVkaW8gb3V0IG9uIG1zcDM0eHggdG8gaW5wdXQgJWlcbiIsIGEtPmluZGV4KTsKLQkJbXNwX3NldF9zY2FydChjbGllbnQsIHN0YXRlLT5pbl9zY2FydCwgYS0+aW5kZXggKyAxKTsKLQorCQltc3Bfc2V0X2F1ZG1vZGUoY2xpZW50KTsKIAkJYnJlYWs7CiAJfQogCkBAIC05OTMsNyArNzgyLDcgQEAKIAkJY29uc3QgY2hhciAqcDsKIAogCQlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkKLQkJCW1zcF9hbnlfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOworCQkJbXNwX2RldGVjdF9zdGVyZW8oY2xpZW50KTsKIAkJdjRsX2luZm8oY2xpZW50LCAiJXMgcmV2MSA9IDB4JTA0eCByZXYyID0gMHglMDR4XG4iLAogCQkJCWNsaWVudC0+bmFtZSwgc3RhdGUtPnJldjEsIHN0YXRlLT5yZXYyKTsKIAkJdjRsX2luZm8oY2xpZW50LCAiQXVkaW86ICAgIHZvbHVtZSAlZCVzXG4iLApAQCAtMTAyMCwxMiArODA5LDE2IEBACiAJCQkJKHN0YXRlLT5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKSA/ICJzdGVyZW8iIDogIm1vbm8iLAogCQkJCShzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcyKSA/ICIsIGR1YWwiIDogIiIpOwogCQl9IGVsc2UgewotCQkJdjRsX2luZm8oY2xpZW50LCAiTW9kZTogICAgICVzXG4iLCBwKTsKKwkJCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPREVURUNUKQorCQkJCXY0bF9pbmZvKGNsaWVudCwgIk1vZGU6ICAgICAlc1xuIiwgcCk7CiAJCQl2NGxfaW5mbyhjbGllbnQsICJTdGFuZGFyZDogJXMgKCVzJXMpXG4iLAogCQkJCW1zcF9zdGFuZGFyZF9zdGRfbmFtZShzdGF0ZS0+c3RkKSwKIAkJCQkoc3RhdGUtPnJ4c3ViY2hhbnMgJiBWNEwyX1RVTkVSX1NVQl9TVEVSRU8pID8gInN0ZXJlbyIgOiAibW9ubyIsCiAJCQkJKHN0YXRlLT5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpID8gIiwgZHVhbCIgOiAiIik7CiAJCX0KKwkJdjRsX2luZm8oY2xpZW50LCAiQXVkbW9kZTogIDB4JTA0eFxuIiwgc3RhdGUtPmF1ZG1vZGUpOworCQl2NGxfaW5mbyhjbGllbnQsICJSb3V0aW5nOiAgMHglMDh4IChpbnB1dCkgMHglMDh4IChvdXRwdXQpXG4iLAorCQkJCXN0YXRlLT5yb3V0aW5nLmlucHV0LCBzdGF0ZS0+cm91dGluZy5vdXRwdXQpOwogCQl2NGxfaW5mbyhjbGllbnQsICJBQ0I6ICAgICAgMHglMDR4XG4iLCBzdGF0ZS0+YWNiKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTA5NCw2ICs4ODcsNyBAQAogCiAJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CiAJc3RhdGUtPnY0bDJfc3RkID0gVjRMMl9TVERfTlRTQzsKKwlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKIAlzdGF0ZS0+dm9sdW1lID0gNTg4ODA7CS8qIDBkYiBnYWluICovCiAJc3RhdGUtPmJhbGFuY2UgPSAzMjc2ODsJLyogMGRiIGdhaW4gKi8KIAlzdGF0ZS0+YmFzcyA9IDMyNzY4OwpAQCAtMTEwMyw2ICs4OTcsOSBAQAogCXN0YXRlLT5tdXRlZCA9IDA7CiAJc3RhdGUtPmkyc19tb2RlID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzdGF0ZS0+d3EpOworCS8qIFRoZXNlIGFyZSB0aGUgcmVzZXQgaW5wdXQvb3V0cHV0IHBvc2l0aW9ucyAqLworCXN0YXRlLT5yb3V0aW5nLmlucHV0ID0gTVNQX0lOUFVUX0RFRkFVTFQ7CisJc3RhdGUtPnJvdXRpbmcub3V0cHV0ID0gTVNQX09VVFBVVF9ERUZBVUxUOwogCiAJc3RhdGUtPnJldjEgPSBtc3BfcmVhZF9kc3AoY2xpZW50LCAweDFlKTsKIAlpZiAoc3RhdGUtPnJldjEgIT0gLTEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaApzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5oCmluZGV4IGE5YWM1N2QuLjE5NDA3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaApAQCAtMSw4ICsxLDEwIEBACiAvKgogICovCiAKLSNpZm5kZWYgTVNQMzQwMF9ICi0jZGVmaW5lIE1TUDM0MDBfSAorI2lmbmRlZiBNU1AzNDAwX0RSSVZFUl9ICisjZGVmaW5lIE1TUDM0MDBfRFJJVkVSX0gKKworI2luY2x1ZGUgPG1lZGlhL21zcDM0MDAuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yMCwxNSArMjIsMTQgQEAKICNkZWZpbmUgTVNQX01PREVfQlRTQyAgICAgICAgOAogI2RlZmluZSBNU1BfTU9ERV9FWFRFUk4gICAgICA5CiAKLSNkZWZpbmUgU0NBUlRfTUFTSyAgICAwCi0jZGVmaW5lIFNDQVJUX0lOMSAgICAgMQotI2RlZmluZSBTQ0FSVF9JTjIgICAgIDIKLSNkZWZpbmUgU0NBUlRfSU4xX0RBICAzCi0jZGVmaW5lIFNDQVJUX0lOMl9EQSAgNAotI2RlZmluZSBTQ0FSVF9JTjMgICAgIDUKLSNkZWZpbmUgU0NBUlRfSU40ICAgICA2Ci0jZGVmaW5lIFNDQVJUX01PTk8gICAgNwotI2RlZmluZSBTQ0FSVF9NVVRFICAgIDgKKyNkZWZpbmUgU0NBUlRfSU4xICAgICAwCisjZGVmaW5lIFNDQVJUX0lOMiAgICAgMQorI2RlZmluZSBTQ0FSVF9JTjMgICAgIDIKKyNkZWZpbmUgU0NBUlRfSU40ICAgICAzCisjZGVmaW5lIFNDQVJUX0lOMV9EQSAgNAorI2RlZmluZSBTQ0FSVF9JTjJfREEgIDUKKyNkZWZpbmUgU0NBUlRfTU9OTyAgICA2CisjZGVmaW5lIFNDQVJUX01VVEUgICAgNwogCiAjZGVmaW5lIFNDQVJUX0RTUF9JTiAgMAogI2RlZmluZSBTQ0FSVDFfT1VUICAgIDEKQEAgLTczLDcgKzc0LDcgQEAKIAlpbnQgaTJzX21vZGU7CiAJaW50IG1haW4sIHNlY29uZDsJLyogc291bmQgY2FycmllciAqLwogCWludCBpbnB1dDsKLQlpbnQgc291cmNlOyAgICAgICAgICAgICAvKiBzZWUgbXNwMzR4eGdfc2V0X3NvdXJjZSAqLworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGluZzsKIAogCS8qIHY0bDIgKi8KIAlpbnQgYXVkbW9kZTsKQEAgLTk5LDE5ICsxMDAsMTYgQEAKIHZvaWQgbXNwX3NldF9zY2FydChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaW4sIGludCBvdXQpOwogdm9pZCBtc3Bfc2V0X211dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiB2b2lkIG1zcF9zZXRfYXVkaW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1pbnQgbXNwX21vZHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogaW50IG1zcF9zbGVlcChzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSwgaW50IHRpbWVvdXQpOwogCiAvKiBtc3AzNDAwLWt0aHJlYWRzLmMgKi8KIGNvbnN0IGNoYXIgKm1zcF9zdGFuZGFyZF9zdGRfbmFtZShpbnQgc3RkKTsKLXZvaWQgbXNwMzQwMGNfc2V0Y2FycmllcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgY2RvMSwgaW50IGNkbzIpOwotdm9pZCBtc3AzNDAwY19zZXRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB0eXBlKTsKLXZvaWQgbXNwMzQwMGNfc2V0c3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBtb2RlKTsKLWludCBhdXRvZGV0ZWN0X3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3ZvaWQgbXNwX3NldF9hdWRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworaW50IG1zcF9kZXRlY3Rfc3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogaW50IG1zcDM0MDBjX3RocmVhZCh2b2lkICpkYXRhKTsKIGludCBtc3AzNDEwZF90aHJlYWQodm9pZCAqZGF0YSk7CiBpbnQgbXNwMzR4eGdfdGhyZWFkKHZvaWQgKmRhdGEpOwotdm9pZCBtc3AzNHh4Z19kZXRlY3Rfc3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotdm9pZCBtc3AzNHh4Z19zZXRfYXVkbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgYXVkbW9kZSk7Cit2b2lkIG1zcDM0MDBjX3NldF9tb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBtb2RlKTsKK3ZvaWQgbXNwMzQwMGNfc2V0X2NhcnJpZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGNkbzEsIGludCBjZG8yKTsKIAotI2VuZGlmIC8qIE1TUDM0MDBfSCAqLworI2VuZGlmIC8qIE1TUDM0MDBfRFJJVkVSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKaW5kZXggMjA3MmMzZS4uYzM5ODRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKyNpbmNsdWRlIDxtZWRpYS9tc3AzNDAwLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlICJtc3AzNDAwLmgiCisjaW5jbHVkZSAibXNwMzQwMC1kcml2ZXIuaCIKIAogLyogdGhpcyBvbmUgdXNlcyB0aGUgYXV0b21hdGljIHNvdW5kIHN0YW5kYXJkIGRldGVjdGlvbiBvZiBuZXdlciBtc3AzNHh4CiAgICBjaGlwIHZlcnNpb25zICovCkBAIC00NSwxMSArNDUsMTMgQEAKIAl7IDB4MDAwNCwgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi4yNTc4MTI1KSwgIjYuNS82LjI1ICBEL0sxIER1YWwgRk0tU3RlcmVvIiB9LAogCXsgMHgwMDA1LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2Ljc0MjE4NzUpLCAiNi41LzYuNzQgIEQvSzIgRHVhbCBGTS1TdGVyZW8iIH0sCiAJeyAweDAwMDYsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDYuNSksICI2LjUgIEQvSyBGTS1Nb25vIChIREVWMykiIH0sCisJeyAweDAwMDcsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDUuNzQyMTg3NSksICI2LjUvNS43NCAgRC9LMyBEdWFsIEZNLVN0ZXJlbyIgfSwKIAl7IDB4MDAwOCwgTVNQX0NBUlJJRVIoNS41KSwgTVNQX0NBUlJJRVIoNS44NSksICI1LjUvNS44NSAgQi9HIE5JQ0FNIEZNIiB9LAogCXsgMHgwMDA5LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig1Ljg1KSwgIjYuNS81Ljg1ICBMIE5JQ0FNIEFNIiB9LAogCXsgMHgwMDBhLCBNU1BfQ0FSUklFUig2LjApLCBNU1BfQ0FSUklFUig2LjU1KSwgIjYuMC82LjU1ICBJIE5JQ0FNIEZNIiB9LAogCXsgMHgwMDBiLCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig1Ljg1KSwgIjYuNS81Ljg1ICBEL0sgTklDQU0gRk0iIH0sCiAJeyAweDAwMGMsIE1TUF9DQVJSSUVSKDYuNSksIE1TUF9DQVJSSUVSKDUuODUpLCAiNi41LzUuODUgIEQvSyBOSUNBTSBGTSAoSERFVjIpIiB9LAorCXsgMHgwMDBkLCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig1Ljg1KSwgIjYuNS81Ljg1ICBEL0sgTklDQU0gRk0gKEhERVYzKSIgfSwKIAl7IDB4MDAyMCwgTVNQX0NBUlJJRVIoNC41KSwgTVNQX0NBUlJJRVIoNC41KSwgIjQuNSAgTSBCVFNDLVN0ZXJlbyIgfSwKIAl7IDB4MDAyMSwgTVNQX0NBUlJJRVIoNC41KSwgTVNQX0NBUlJJRVIoNC41KSwgIjQuNSAgTSBCVFNDLU1vbm8gKyBTQVAiIH0sCiAJeyAweDAwMzAsIE1TUF9DQVJSSUVSKDQuNSksIE1TUF9DQVJSSUVSKDQuNSksICI0LjUgIE0gRUlBLUogSmFwYW4gU3RlcmVvIiB9LApAQCAtMTA5LDcgKzExMSw3IEBACiAJCXstMiwgLTgsIC0xMCwgMTAsIDUwLCA4Nn0sCiAJCXstNCwgLTEyLCAtOSwgMjMsIDc5LCAxMjZ9LAogCQlNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpLAotCQkweDAwYzYsIDB4MDE0MCwgMHgwMTIwLCAweDdjMDMKKwkJMHgwMGM2LCAweDAxNDAsIDB4MDEyMCwgMHg3YzAwCiAJfSwKIH07CiAKQEAgLTE1NCwxMzkgKzE1NiwxNTAgQEAKIAlyZXR1cm4gInVua25vd24iOwogfQogCi12b2lkIG1zcDM0MDBjX3NldGNhcnJpZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGNkbzEsIGludCBjZG8yKQorc3RhdGljIHZvaWQgbXNwX3NldF9zb3VyY2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHNyYykKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKG1zcF9kb2xieSkgeworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA4LCAweDA1MjApOyAvKiBJMlMxICovCisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDksIDB4MDYyMCk7IC8qIEkyUzIgKi8KKwl9IGVsc2UgeworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA4LCBzcmMpOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA5LCBzcmMpOworCX0KKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBhLCBzcmMpOworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGIsIHNyYyk7CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwYywgc3JjKTsKKwlpZiAoc3RhdGUtPmhhc19zY2FydDIzX2luX3NjYXJ0Ml9vdXQpCisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwNDEsIHNyYyk7Cit9CisKK3ZvaWQgbXNwMzQwMGNfc2V0X2NhcnJpZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGNkbzEsIGludCBjZG8yKQogewogCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDAwOTMsIGNkbzEgJiAweGZmZik7CiAJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDA5YiwgY2RvMSA+PiAxMik7CiAJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDBhMywgY2RvMiAmIDB4ZmZmKTsKIAltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMGFiLCBjZG8yID4+IDEyKTsKLQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDU2LCAwKTsgLypMT0FEX1JFR18xLzIqLworCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDAwNTYsIDApOyAvKiBMT0FEX1JFR18xLzIgKi8KIH0KIAotdm9pZCBtc3AzNDAwY19zZXRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB0eXBlKQordm9pZCBtc3AzNDAwY19zZXRfbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBtc3AzNDAwY19pbml0X2RhdGFfZGVtICpkYXRhID0gJm1zcDM0MDBjX2luaXRfZGF0YVttb2RlXTsKKwlpbnQgdHVuZXIgPSAoc3RhdGUtPnJvdXRpbmcuaW5wdXQgPj4gMykgJiAxOwogCWludCBpOwogCi0JdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInNldG1vZGU6ICVkXG4iLCB0eXBlKTsKLQlzdGF0ZS0+bW9kZSAgICAgICA9IHR5cGU7Ci0Jc3RhdGUtPmF1ZG1vZGUgICAgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAic2V0X21vZGU6ICVkXG4iLCBtb2RlKTsKKwlzdGF0ZS0+bW9kZSA9IG1vZGU7CiAJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCi0JbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDBiYiwgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmFkX2N2KTsKKwltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMGJiLCBkYXRhLT5hZF9jdiB8ICh0dW5lciA/IDB4MTAwIDogMCkpOwogCiAJZm9yIChpID0gNTsgaSA+PSAwOyBpLS0pICAgICAgICAgICAgICAgLyogZmlyIDEgKi8KLQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDAwMSwgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmZpcjFbaV0pOworCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDAxLCBkYXRhLT5maXIxW2ldKTsKIAogCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDAwMDUsIDB4MDAwNCk7IC8qIGZpciAyICovCiAJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDAwNSwgMHgwMDQwKTsKIAltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDA1LCAweDAwMDApOwogCWZvciAoaSA9IDU7IGkgPj0gMDsgaS0tKQotCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDA1LCBtc3AzNDAwY19pbml0X2RhdGFbdHlwZV0uZmlyMltpXSk7CisJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDAwMDUsIGRhdGEtPmZpcjJbaV0pOwogCi0JbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MDA4MywgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLm1vZGVfcmVnKTsKKwltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDgzLCBkYXRhLT5tb2RlX3JlZyk7CiAKLQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmNkbzEsCi0JCQkgICAgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmNkbzIpOworCW1zcDM0MDBjX3NldF9jYXJyaWVyKGNsaWVudCwgZGF0YS0+Y2RvMSwgZGF0YS0+Y2RvMik7CiAKLQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgwMDU2LCAwKTsgLypMT0FEX1JFR18xLzIqLworCW1zcF9zZXRfc291cmNlKGNsaWVudCwgZGF0YS0+ZHNwX3NyYyk7CisJLyogc2V0IHByZXNjYWxlcyAqLwogCi0JaWYgKG1zcF9kb2xieSkgewotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA4LCAweDA1MjApOyAvKiBJMlMxICovCi0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDksIDB4MDYyMCk7IC8qIEkyUzIgKi8KLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwYiwgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmRzcF9zcmMpOwotCX0gZWxzZSB7Ci0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDgsIG1zcDM0MDBjX2luaXRfZGF0YVt0eXBlXS5kc3Bfc3JjKTsKLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwOSwgbXNwMzQwMGNfaW5pdF9kYXRhW3R5cGVdLmRzcF9zcmMpOwotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBiLCBtc3AzNDAwY19pbml0X2RhdGFbdHlwZV0uZHNwX3NyYyk7Ci0JfQotCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGEsIG1zcDM0MDBjX2luaXRfZGF0YVt0eXBlXS5kc3Bfc3JjKTsKLQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBlLCBtc3AzNDAwY19pbml0X2RhdGFbdHlwZV0uZHNwX21hdHJpeCk7Ci0KLQlpZiAoc3RhdGUtPmhhc19uaWNhbSkgewotCQkvKiBuaWNhbSBwcmVzY2FsZSAqLwotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDEwLCAweDVhMDApOyAvKiB3YXM6IDB4MzAwMCAqLwotCX0KKwkvKiB2b2x1bWUgcHJlc2NhbGUgZm9yIFNDQVJUIChBTSBtb25vIGlucHV0KSAqLworCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGQsIDB4MTkwMCk7CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwZSwgZGF0YS0+ZHNwX21hdHJpeCk7CisJaWYgKHN0YXRlLT5oYXNfbmljYW0pIC8qIG5pY2FtIHByZXNjYWxlICovCisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMTAsIDB4NWEwMCk7CiB9CiAKLS8qIHR1cm4gb24vb2ZmIG5pY2FtICsgc3RlcmVvICovCi12b2lkIG1zcDM0MDBjX3NldHN0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbW9kZSkKKy8qIFNldCBhdWRpbyBtb2RlLiBOb3RlIHRoYXQgdGhlIHByZS0nRycgbW9kZWxzIGRvIG5vdCBzdXBwb3J0IEJUU0MrU0FQLAorICAgbm9yIGRvIHRoZXkgc3VwcG9ydCBzdGVyZW8gQlRTQy4gKi8KK3N0YXRpYyB2b2lkIG1zcDM0MDBjX3NldF9hdWRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RhdGljIGNoYXIgKnN0cm1vZGVbXSA9IHsgIm1vbm8iLCAic3RlcmVvIiwgImxhbmcyIiwgImxhbmcxIiB9OworCXN0YXRpYyBjaGFyICpzdHJtb2RlW10gPSB7ICJtb25vIiwgInN0ZXJlbyIsICJsYW5nMiIsICJsYW5nMSIsICJsYW5nMStsYW5nMiIgfTsKIAlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBuaWNhbSA9IDA7CQkvKiBjaGFubmVsIHNvdXJjZTogRk0vQU0gb3IgbmljYW0gKi8KLQlpbnQgc3JjID0gMDsKKwljaGFyICptb2Rlc3RyID0gKHN0YXRlLT5hdWRtb2RlID49IDAgJiYgc3RhdGUtPmF1ZG1vZGUgPCA1KSA/CisJCXN0cm1vZGVbc3RhdGUtPmF1ZG1vZGVdIDogInVua25vd24iOworCWludCBzcmMgPSAwOwkvKiBjaGFubmVsIHNvdXJjZTogRk0vQU0sIG5pY2FtIG9yIFNDQVJUICovCiAKIAlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkgewogCQkvKiB0aGlzIG1ldGhvZCB3b3VsZCBicmVhayBldmVyeXRoaW5nLCBsZXQncyBtYWtlIHN1cmUKIAkJICogaXQncyBuZXZlciBjYWxsZWQKIAkJICovCi0JCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzZXRzdGVyZW8gY2FsbGVkIHdpdGggbW9kZT0lZCBpbnN0ZWFkIG9mIHNldF9zb3VyY2UgKGlnbm9yZWQpXG4iLAotCQkgICAgIG1vZGUpOworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LAorCQkJInNldF9hdWRtb2RlIGNhbGxlZCB3aXRoIG1vZGU9JWQgaW5zdGVhZCBvZiBzZXRfc291cmNlIChpZ25vcmVkKVxuIiwKKwkJCXN0YXRlLT5hdWRtb2RlKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHN3aXRjaCBkZW1vZHVsYXRvciAqLwogCXN3aXRjaCAoc3RhdGUtPm1vZGUpIHsKIAljYXNlIE1TUF9NT0RFX0ZNX1RFUlJBOgotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiRk0gc2V0c3RlcmVvOiAlc1xuIiwgc3RybW9kZVttb2RlXSk7Ci0JCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7Ci0JCXN3aXRjaCAobW9kZSkgeworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiRk0gc2V0X2F1ZG1vZGU6ICVzXG4iLCBtb2Rlc3RyKTsKKwkJc3dpdGNoIChzdGF0ZS0+YXVkbW9kZSkgewogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CiAJCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBlLCAweDMwMDEpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CiAJCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBlLCAweDMwMDApOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBNU1BfTU9ERV9GTV9TQVQ6Ci0JCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJTQVQgc2V0c3RlcmVvOiAlc1xuIiwgc3RybW9kZVttb2RlXSk7Ci0JCXN3aXRjaCAobW9kZSkgeworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiU0FUIHNldF9hdWRtb2RlOiAlc1xuIiwgbW9kZXN0cik7CisJCXN3aXRjaCAoc3RhdGUtPmF1ZG1vZGUpIHsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUig2LjUpLCBNU1BfQ0FSUklFUig2LjUpKTsKKwkJCW1zcDM0MDBjX3NldF9jYXJyaWVyKGNsaWVudCwgTVNQX0NBUlJJRVIoNi41KSwgTVNQX0NBUlJJRVIoNi41KSk7CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDcuMiksIE1TUF9DQVJSSUVSKDcuMDIpKTsKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CisJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDcuMiksIE1TUF9DQVJSSUVSKDcuMDIpKTsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUig3LjM4KSwgTVNQX0NBUlJJRVIoNy4wMikpOworCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUig3LjM4KSwgTVNQX0NBUlJJRVIoNy4wMikpOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDcuMzgpLCBNU1BfQ0FSUklFUig3LjAyKSk7CisJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIE1TUF9DQVJSSUVSKDcuMzgpLCBNU1BfQ0FSUklFUig3LjAyKSk7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMToKIAljYXNlIE1TUF9NT0RFX0ZNX05JQ0FNMjoKIAljYXNlIE1TUF9NT0RFX0FNX05JQ0FNOgotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiTklDQU0gc2V0c3RlcmVvOiAlc1xuIixzdHJtb2RlW21vZGVdKTsKLQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsc3RhdGUtPnNlY29uZCxzdGF0ZS0+bWFpbik7CisJCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJOSUNBTSBzZXRfYXVkbW9kZTogJXNcbiIsbW9kZXN0cik7CiAJCWlmIChzdGF0ZS0+bmljYW1fb24pCi0JCQluaWNhbT0weDAxMDA7CisJCQlzcmMgPSAweDAxMDA7ICAvKiBOSUNBTSAqLwogCQlicmVhazsKIAljYXNlIE1TUF9NT0RFX0JUU0M6Ci0JCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJCVFNDIHNldHN0ZXJlbzogJXNcbiIsc3RybW9kZVttb2RlXSk7Ci0JCW5pY2FtPTB4MDMwMDsKKwkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIkJUU0Mgc2V0X2F1ZG1vZGU6ICVzXG4iLG1vZGVzdHIpOwogCQlicmVhazsKIAljYXNlIE1TUF9NT0RFX0VYVEVSTjoKLQkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgImV4dGVybiBzZXRzdGVyZW86ICVzXG4iLHN0cm1vZGVbbW9kZV0pOwotCQluaWNhbSA9IDB4MDIwMDsKKwkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgImV4dGVybiBzZXRfYXVkbW9kZTogJXNcbiIsbW9kZXN0cik7CisJCXNyYyA9IDB4MDIwMDsgIC8qIFNDQVJUICovCiAJCWJyZWFrOwogCWNhc2UgTVNQX01PREVfRk1fUkFESU86Ci0JCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJGTS1SYWRpbyBzZXRzdGVyZW86ICVzXG4iLHN0cm1vZGVbbW9kZV0pOworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiRk0tUmFkaW8gc2V0X2F1ZG1vZGU6ICVzXG4iLG1vZGVzdHIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAibW9ubyBzZXRzdGVyZW9cbiIpOworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAibW9ubyBzZXRfYXVkbW9kZVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBzd2l0Y2ggYXVkaW8gKi8KLQlzd2l0Y2ggKG1vZGUpIHsKKwlzd2l0Y2ggKHN0YXRlLT5hdWRtb2RlKSB7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQlzcmMgPSAweDAwMjAgfCBuaWNhbTsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKKwkJc3JjIHw9IDB4MDAyMDsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKIAkJaWYgKHN0YXRlLT5tb2RlID09IE1TUF9NT0RFX0FNX05JQ0FNKSB7CkBAIC0yOTcsMjkgKzMxMCwyMiBAQAogCQkJc3JjID0gMHgwMjAwOwogCQkJYnJlYWs7CiAJCX0KKwkJaWYgKHN0YXRlLT5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQorCQkJc3JjID0gMHgwMDMwOworCQlicmVhazsKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJc3JjID0gMHgwMDAwIHwgbmljYW07CisJCS8qIHN3aXRjaCB0byBzdGVyZW8gZm9yIHN0ZXJlbyB0cmFuc21pc3Npb24sIG90aGVyd2lzZQorCQkgICBrZWVwIGZpcnN0IGxhbmd1YWdlICovCisJCWlmIChzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NURVJFTykKKwkJCXNyYyB8PSAweDAwMjA7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQlzcmMgPSAweDAwMTAgfCBuaWNhbTsKKwkJc3JjIHw9IDB4MDAxMDsKIAkJYnJlYWs7CiAJfQotCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzZXRzdGVyZW8gZmluYWwgc291cmNlL21hdHJpeCA9IDB4JXhcbiIsIHNyYyk7CisJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInNldF9hdWRtb2RlIGZpbmFsIHNvdXJjZS9tYXRyaXggPSAweCV4XG4iLCBzcmMpOwogCi0JaWYgKG1zcF9kb2xieSkgewotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA4LCAweDA1MjApOwotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA5LCAweDA2MjApOwotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBhLCBzcmMpOwotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDBiLCBzcmMpOwotCX0gZWxzZSB7Ci0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDgsIHNyYyk7Ci0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDksIHNyYyk7Ci0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGEsIHNyYyk7Ci0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGIsIHNyYyk7Ci0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGMsIHNyYyk7Ci0JCWlmIChzdGF0ZS0+aGFzX3NjYXJ0MjNfaW5fc2NhcnQyX291dCkKLQkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwNDEsIHNyYyk7Ci0JfQorCW1zcF9zZXRfc291cmNlKGNsaWVudCwgc3JjKTsKIH0KIAogc3RhdGljIHZvaWQgbXNwMzQwMGNfcHJpbnRfbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtMzQ3LDEyICszNTMsMTIgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IGF1dG9kZXRlY3Rfc3RlcmVvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG1zcDM0MDBjX2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCB2YWw7CiAJaW50IHJ4c3ViY2hhbnMgPSBzdGF0ZS0+cnhzdWJjaGFuczsKLQlpbnQgbmV3bmljYW0gICA9IHN0YXRlLT5uaWNhbV9vbjsKKwlpbnQgbmV3bmljYW0gPSBzdGF0ZS0+bmljYW1fb247CiAJaW50IHVwZGF0ZSA9IDA7CiAKIAlzd2l0Y2ggKHN0YXRlLT5tb2RlKSB7CkBAIC0zNjIsNyArMzY4LDcgQEAKIAkJCXZhbCAtPSA2NTUzNjsKIAkJdjRsX2RiZygyLCBtc3BfZGVidWcsIGNsaWVudCwgInN0ZXJlbyBkZXRlY3QgcmVnaXN0ZXI6ICVkXG4iLCB2YWwpOwogCQlpZiAodmFsID4gNDA5NikgewotCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX01PTk87CisJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCQl9IGVsc2UgaWYgKHZhbCA8IC00MDk2KSB7CiAJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKIAkJfSBlbHNlIHsKQEAgLTM4NiwxNCArMzkyLDExIEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6CiAJCQljYXNlIDk6Ci0JCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8KLQkJCQkJfCBWNEwyX1RVTkVSX1NVQl9MQU5HMTsKKwkJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAkJCQlicmVhazsKIAkJCWNhc2UgMjoKIAkJCWNhc2UgMTA6Ci0JCQkJcnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8KLQkJCQkJfCBWNEwyX1RVTkVSX1NVQl9MQU5HMQotCQkJCQl8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCQkJCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKQEAgLTQwNSwzMCArNDA4LDE3IEBACiAJCQlyeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAkJfQogCQlicmVhazsKLQljYXNlIE1TUF9NT0RFX0JUU0M6Ci0JCXZhbCA9IG1zcF9yZWFkX2RlbShjbGllbnQsIDB4MjAwKTsKLQkJdjRsX2RiZygyLCBtc3BfZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCV4IChwcmk9JXMsIHNlYz0lcywgJXMlcyVzKVxuIiwKLQkJCXZhbCwKLQkJCSh2YWwgJiAweDAwMDIpID8gIm5vIiAgICAgOiAieWVzIiwKLQkJCSh2YWwgJiAweDAwMDQpID8gIm5vIiAgICAgOiAieWVzIiwKLQkJCSh2YWwgJiAweDAwNDApID8gInN0ZXJlbyIgOiAibW9ubyIsCi0JCQkodmFsICYgMHgwMDgwKSA/ICIsIG5pY2FtIDJuZCBtb25vIiA6ICIiLAotCQkJKHZhbCAmIDB4MDEwMCkgPyAiLCBiaWxpbmd1YWwvU0FQIiAgOiAiIik7Ci0JCXJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQlpZiAodmFsICYgMHgwMDQwKSByeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJaWYgKHZhbCAmIDB4MDEwMCkgcnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9MQU5HMTsKLQkJYnJlYWs7CiAJfQogCWlmIChyeHN1YmNoYW5zICE9IHN0YXRlLT5yeHN1YmNoYW5zKSB7CiAJCXVwZGF0ZSA9IDE7Ci0JCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJ3YXRjaDogcnhzdWJjaGFucyAlZCA9PiAlZFxuIiwKLQkJCXN0YXRlLT5yeHN1YmNoYW5zLHJ4c3ViY2hhbnMpOworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAid2F0Y2g6IHJ4c3ViY2hhbnMgJTAyeCA9PiAlMDJ4XG4iLAorCQkJc3RhdGUtPnJ4c3ViY2hhbnMsIHJ4c3ViY2hhbnMpOwogCQlzdGF0ZS0+cnhzdWJjaGFucyA9IHJ4c3ViY2hhbnM7CiAJfQogCWlmIChuZXduaWNhbSAhPSBzdGF0ZS0+bmljYW1fb24pIHsKIAkJdXBkYXRlID0gMTsKIAkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgIndhdGNoOiBuaWNhbSAlZCA9PiAlZFxuIiwKLQkJCXN0YXRlLT5uaWNhbV9vbixuZXduaWNhbSk7CisJCQlzdGF0ZS0+bmljYW1fb24sIG5ld25pY2FtKTsKIAkJc3RhdGUtPm5pY2FtX29uID0gbmV3bmljYW07CiAJfQogCXJldHVybiB1cGRhdGU7CkBAIC00NDMsMTMgKzQzMyw4IEBACiB7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWlmIChhdXRvZGV0ZWN0X3N0ZXJlbyhjbGllbnQpKSB7Ci0JCWlmIChzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NURVJFTykKLQkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pOwotCQllbHNlIGlmIChzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcxKQotCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX0xBTkcxKTsKLQkJZWxzZQotCQkJbXNwMzQwMGNfc2V0c3RlcmVvKGNsaWVudCwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOworCWlmIChtc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpKSB7CisJCW1zcF9zZXRfYXVkbW9kZShjbGllbnQpOwogCX0KIAogCWlmIChtc3Bfb25jZSkKQEAgLTQ2MSw3ICs0NDYsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhOwogCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0ICpjZDsKLQlpbnQgY291bnQsIG1heDEsbWF4Mix2YWwxLHZhbDIsIHZhbCx0aGlzOworCWludCBjb3VudCwgbWF4MSwgbWF4MiwgdmFsMSwgdmFsMiwgdmFsLCB0aGlzOwogCiAKIAl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAibXNwMzQwMCBkYWVtb24gc3RhcnRlZFxuIik7CkBAIC00NzEsNyArNDU2LDcgQEAKIAkJdjRsX2RiZygyLCBtc3BfZGVidWcsIGNsaWVudCwgIm1zcDM0MDAgdGhyZWFkOiB3YWtldXBcbiIpOwogCiAJcmVzdGFydDoKLQkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInRocmVhZDogcmVzdGFydCBzY2FuXG4iKTsKKwkJdjRsX2RiZygyLCBtc3BfZGVidWcsIGNsaWVudCwgInRocmVhZDogcmVzdGFydCBzY2FuXG4iKTsKIAkJc3RhdGUtPnJlc3RhcnQgPSAwOwogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CkBAIC00ODUsMTMgKzQ3MCwxNCBAQAogCiAJCS8qIG11dGUgKi8KIAkJbXNwX3NldF9tdXRlKGNsaWVudCk7Ci0JCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9BTV9ERVRFQ1QgLyogKzEgKi8gKTsKKwkJbXNwMzQwMGNfc2V0X21vZGUoY2xpZW50LCBNU1BfTU9ERV9BTV9ERVRFQ1QpOwogCQl2YWwxID0gdmFsMiA9IDA7CiAJCW1heDEgPSBtYXgyID0gLTE7CiAJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOworCQlzdGF0ZS0+bmljYW1fb24gPSAwOwogCiAJCS8qIHNvbWUgdGltZSBmb3IgdGhlIHR1bmVyIHRvIHN5bmMgKi8KLQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwyMDApKQorCQlpZiAobXNwX3NsZWVwKHN0YXRlLCAyMDApKQogCQkJZ290byByZXN0YXJ0OwogCiAJCS8qIGNhcnJpZXIgZGV0ZWN0IHBhc3MgIzEgLS0gbWFpbiBjYXJyaWVyICovCkBAIC01MDYsNyArNDkyLDcgQEAKIAkJfQogCiAJCWZvciAodGhpcyA9IDA7IHRoaXMgPCBjb3VudDsgdGhpcysrKSB7Ci0JCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgY2RbdGhpc10uY2RvLGNkW3RoaXNdLmNkbyk7CisJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIGNkW3RoaXNdLmNkbywgY2RbdGhpc10uY2RvKTsKIAkJCWlmIChtc3Bfc2xlZXAoc3RhdGUsMTAwKSkKIAkJCQlnb3RvIHJlc3RhcnQ7CiAJCQl2YWwgPSBtc3BfcmVhZF9kc3AoY2xpZW50LCAweDFiKTsKQEAgLTU0Miw3ICs1MjgsNyBAQAogCQkJbWF4MiA9IDA7CiAJCX0KIAkJZm9yICh0aGlzID0gMDsgdGhpcyA8IGNvdW50OyB0aGlzKyspIHsKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBjZFt0aGlzXS5jZG8sY2RbdGhpc10uY2RvKTsKKwkJCW1zcDM0MDBjX3NldF9jYXJyaWVyKGNsaWVudCwgY2RbdGhpc10uY2RvLCBjZFt0aGlzXS5jZG8pOwogCQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwxMDApKQogCQkJCWdvdG8gcmVzdGFydDsKIAkJCXZhbCA9IG1zcF9yZWFkX2RzcChjbGllbnQsIDB4MWIpOwpAQCAtNTU0LDIyICs1NDAsMjAgQEAKIAkJfQogCiAJCS8qIHByb2dyYW0gdGhlIG1zcDM0MDAgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRzICovCi0JCXN0YXRlLT5tYWluICAgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF9tYWluW21heDFdLmNkbzsKKwkJc3RhdGUtPm1haW4gPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF9tYWluW21heDFdLmNkbzsKIAkJc3dpdGNoIChtYXgxKSB7CiAJCWNhc2UgMTogLyogNS41ICovCiAJCQlpZiAobWF4MiA9PSAwKSB7CiAJCQkJLyogQi9HIEZNLXN0ZXJlbyAqLwogCQkJCXN0YXRlLT5zZWNvbmQgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF81NVttYXgyXS5jZG87Ci0JCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1RFUlJBKTsKLQkJCQlzdGF0ZS0+bmljYW1fb24gPSAwOwotCQkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwkJCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1RFUlJBKTsKIAkJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCX0gZWxzZSBpZiAobWF4MiA9PSAxICYmIHN0YXRlLT5oYXNfbmljYW0pIHsKIAkJCQkvKiBCL0cgTklDQU0gKi8KIAkJCQlzdGF0ZS0+c2Vjb25kID0gbXNwMzQwMGNfY2Fycmllcl9kZXRlY3RfNTVbbWF4Ml0uY2RvOwotCQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9OSUNBTTEpOworCQkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fTklDQU0xKTsKKwkJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKIAkJCQlzdGF0ZS0+bmljYW1fb24gPSAxOwotCQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7CiAJCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CiAJCQl9IGVsc2UgewogCQkJCWdvdG8gbm9fc2Vjb25kOwpAQCAtNTc4LDM1ICs1NjIsMjkgQEAKIAkJY2FzZSAyOiAvKiA2LjAgKi8KIAkJCS8qIFBBTCBJIE5JQ0FNICovCiAJCQlzdGF0ZS0+c2Vjb25kID0gTVNQX0NBUlJJRVIoNi41NTIpOwotCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX05JQ0FNMik7CisJCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX05JQ0FNMik7CisJCQltc3AzNDAwY19zZXRfY2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKIAkJCXN0YXRlLT5uaWNhbV9vbiA9IDE7Ci0JCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgc3RhdGUtPnNlY29uZCwgc3RhdGUtPm1haW4pOwogCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAzOiAvKiA2LjUgKi8KIAkJCWlmIChtYXgyID09IDEgfHwgbWF4MiA9PSAyKSB7CiAJCQkJLyogRC9LIEZNLXN0ZXJlbyAqLwogCQkJCXN0YXRlLT5zZWNvbmQgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF82NVttYXgyXS5jZG87Ci0JCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1RFUlJBKTsKLQkJCQlzdGF0ZS0+bmljYW1fb24gPSAwOwotCQkJCW1zcDM0MDBjX3NldHN0ZXJlbyhjbGllbnQsIFY0TDJfVFVORVJfTU9ERV9NT05PKTsKKwkJCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1RFUlJBKTsKIAkJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCX0gZWxzZSBpZiAobWF4MiA9PSAwICYmIChzdGF0ZS0+djRsMl9zdGQgJiBWNEwyX1NURF9TRUNBTSkpIHsKIAkJCQkvKiBMIE5JQ0FNIG9yIEFNLW1vbm8gKi8KIAkJCQlzdGF0ZS0+c2Vjb25kID0gbXNwMzQwMGNfY2Fycmllcl9kZXRlY3RfNjVbbWF4Ml0uY2RvOwotCQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9BTV9OSUNBTSk7Ci0JCQkJc3RhdGUtPm5pY2FtX29uID0gMDsKLQkJCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7Ci0JCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKLQkJCQkvKiB2b2x1bWUgcHJlc2NhbGUgZm9yIFNDQVJUIChBTSBtb25vIGlucHV0KSAqLwotCQkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMGQsIDB4MTkwMCk7CisJCQkJbXNwMzQwMGNfc2V0X21vZGUoY2xpZW50LCBNU1BfTU9ERV9BTV9OSUNBTSk7CisJCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7CiAJCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7CiAJCQl9IGVsc2UgaWYgKG1heDIgPT0gMCAmJiBzdGF0ZS0+aGFzX25pY2FtKSB7CiAJCQkJLyogRC9LIE5JQ0FNICovCiAJCQkJc3RhdGUtPnNlY29uZCA9IG1zcDM0MDBjX2NhcnJpZXJfZGV0ZWN0XzY1W21heDJdLmNkbzsKLQkJCQltc3AzNDAwY19zZXRtb2RlKGNsaWVudCwgTVNQX01PREVfRk1fTklDQU0xKTsKKwkJCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX05JQ0FNMSk7CisJCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7CiAJCQkJc3RhdGUtPm5pY2FtX29uID0gMTsKLQkJCQltc3AzNDAwY19zZXRjYXJyaWVyKGNsaWVudCwgc3RhdGUtPnNlY29uZCwgc3RhdGUtPm1haW4pOwogCQkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJfSBlbHNlIHsKIAkJCQlnb3RvIG5vX3NlY29uZDsKQEAgLTYxNiwyMyArNTk0LDI1IEBACiAJCWRlZmF1bHQ6CiAJCW5vX3NlY29uZDoKIAkJCXN0YXRlLT5zZWNvbmQgPSBtc3AzNDAwY19jYXJyaWVyX2RldGVjdF9tYWluW21heDFdLmNkbzsKLQkJCW1zcDM0MDBjX3NldG1vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9URVJSQSk7Ci0JCQlzdGF0ZS0+bmljYW1fb24gPSAwOwotCQkJbXNwMzQwMGNfc2V0Y2FycmllcihjbGllbnQsIHN0YXRlLT5zZWNvbmQsIHN0YXRlLT5tYWluKTsKKwkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fVEVSUkEpOworCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBzdGF0ZS0+c2Vjb25kLCBzdGF0ZS0+bWFpbik7CiAJCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIHVubXV0ZSAqLwogCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCk7CiAKIAkJaWYgKG1zcF9kZWJ1ZykKIAkJCW1zcDM0MDBjX3ByaW50X21vZGUoY2xpZW50KTsKIAotCQkvKiBtb25pdG9yIHR2IGF1ZGlvIG1vZGUgKi8KKwkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlLCB0aGUgZmlyc3QgdGltZSBkb24ndCB3YWl0CisJCSAgIHNvIGxvbmcgdG8gZ2V0IGEgcXVpY2sgc3RlcmVvL2JpbGluZ3VhbCByZXN1bHQgKi8KKwkJaWYgKG1zcF9zbGVlcChzdGF0ZSwgMTAwMCkpCisJCQlnb3RvIHJlc3RhcnQ7CiAJCXdoaWxlIChzdGF0ZS0+d2F0Y2hfc3RlcmVvKSB7Ci0JCQlpZiAobXNwX3NsZWVwKHN0YXRlLDUwMDApKQorCQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwgNTAwMCkpCiAJCQkJZ290byByZXN0YXJ0OwogCQkJd2F0Y2hfc3RlcmVvKGNsaWVudCk7CiAJCX0KQEAgLTY1Niw3ICs2MzYsNyBAQAogCQl2NGxfZGJnKDIsIG1zcF9kZWJ1ZywgY2xpZW50LCAibXNwMzQxMCB0aHJlYWQ6IHdha2V1cFxuIik7CiAKIAlyZXN0YXJ0OgotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOworCQl2NGxfZGJnKDIsIG1zcF9kZWJ1ZywgY2xpZW50LCAidGhyZWFkOiByZXN0YXJ0IHNjYW5cbiIpOwogCQlzdGF0ZS0+cmVzdGFydCA9IDA7CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQlicmVhazsKQEAgLTY3NSwxNSArNjU1LDE3IEBACiAJCWlmIChtc3Bfc2xlZXAoc3RhdGUsMjAwKSkKIAkJCWdvdG8gcmVzdGFydDsKIAotCQkvKiBzdGFydCBhdXRvZGV0ZWN0ICovCisJCS8qIHN0YXJ0IGF1dG9kZXRlY3QuIE5vdGU6IGF1dG9kZXRlY3QgaXMgbm90IHN1cHBvcnRlZCBmb3IKKwkJICAgTlRTQy1NIGFuZCByYWRpbywgaGVuY2Ugd2UgZm9yY2UgdGhlIHN0YW5kYXJkIGluIHRob3NlIGNhc2VzLiAqLwogCQlpZiAoc3RhdGUtPnJhZGlvKQogCQkJc3RkID0gMHg0MDsKIAkJZWxzZQogCQkJc3RkID0gKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX05UU0MpID8gMHgyMCA6IDE7CiAJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOworCQlzdGF0ZS0+bmljYW1fb24gPSAwOwogCiAJCWlmIChtc3BfZGVidWcpCi0JCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAic2V0dGluZyBzdGFuZGFyZDogJXMgKDB4JTA0eClcbiIsCisJCQl2NGxfZGJnKDIsIG1zcF9kZWJ1ZywgY2xpZW50LCAic2V0dGluZyBzdGFuZGFyZDogJXMgKDB4JTA0eClcbiIsCiAJCQkgICAgICAgbXNwX3N0YW5kYXJkX3N0ZF9uYW1lKHN0ZCksIHN0ZCk7CiAKIAkJaWYgKHN0ZCAhPSAxKSB7CkBAIC03MDAsNyArNjgyLDcgQEAKIAkJCQl2YWwgPSBtc3BfcmVhZF9kZW0oY2xpZW50LCAweDdlKTsKIAkJCQlpZiAodmFsIDwgMHgwN2ZmKQogCQkJCQlicmVhazsKLQkJCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiZGV0ZWN0aW9uIHN0aWxsIGluIHByb2dyZXNzXG4iKTsKKwkJCQl2NGxfZGJnKDIsIG1zcF9kZWJ1ZywgY2xpZW50LCAiZGV0ZWN0aW9uIHN0aWxsIGluIHByb2dyZXNzXG4iKTsKIAkJCX0KIAkJfQogCQlmb3IgKGkgPSAwOyBtc3Bfc3RkbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKQEAgLTcxOCw4NCArNzAwLDc5IEBACiAJCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiYXV0b2RldGVjdGlvbiBmYWlsZWQsIgogCQkJCSIgc3dpdGNoaW5nIHRvIGJhY2t1cCBzdGFuZGFyZDogJXMgKDB4JTA0eClcbiIsCiAJCQkJbXNwX3N0ZGxpc3RbOF0ubmFtZSA/IG1zcF9zdGRsaXN0WzhdLm5hbWUgOiAidW5rbm93biIsdmFsKTsKLQkJCXZhbCA9IDB4MDAwOTsKKwkJCXN0YXRlLT5zdGQgPSB2YWwgPSAweDAwMDk7CiAJCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgyMCwgdmFsKTsKIAkJfQogCi0JCS8qIHNldCB2YXJpb3VzIHByZXNjYWxlcyAqLwotCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwZCwgMHgxOTAwKTsgLyogc2NhcnQgKi8KLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MGUsIDB4MjQwMyk7IC8qIEZNICovCi0JCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDEwLCAweDVhMDApOyAvKiBuaWNhbSAqLwotCiAJCS8qIHNldCBzdGVyZW8gKi8KIAkJc3dpdGNoICh2YWwpIHsKIAkJY2FzZSAweDAwMDg6IC8qIEIvRyBOSUNBTSAqLwogCQljYXNlIDB4MDAwYTogLyogSSBOSUNBTSAqLwotCQkJaWYgKHZhbCA9PSAweDAwMDgpCi0JCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9GTV9OSUNBTTE7Ci0JCQllbHNlCisJCWNhc2UgMHgwMDBiOiAvKiBEL0sgTklDQU0gKi8KKwkJCWlmICh2YWwgPT0gMHgwMDBhKQogCQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRk1fTklDQU0yOworCQkJZWxzZQorCQkJCXN0YXRlLT5tb2RlID0gTVNQX01PREVfRk1fTklDQU0xOwogCQkJLyoganVzdCB0dXJuIG9uIHN0ZXJlbyAqLwogCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJCQlzdGF0ZS0+bmljYW1fb24gPSAxOwogCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7Ci0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMDA5OgogCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9BTV9OSUNBTTsKIAkJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAkJCXN0YXRlLT5uaWNhbV9vbiA9IDE7Ci0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9NT05PKTsKIAkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMDIwOiAvKiBCVFNDICovCi0JCQkvKiBqdXN0IHR1cm4gb24gc3RlcmVvICovCisJCQkvKiBUaGUgcHJlLSdHJyBtb2RlbHMgb25seSBoYXZlIEJUU0MtbW9ubyAqLwogCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9CVFNDOwotCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCQlzdGF0ZS0+bmljYW1fb24gPSAwOwotCQkJc3RhdGUtPndhdGNoX3N0ZXJlbyA9IDE7Ci0JCQltc3AzNDAwY19zZXRzdGVyZW8oY2xpZW50LFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pOworCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCQkJYnJlYWs7CiAJCWNhc2UgMHgwMDQwOiAvKiBGTSByYWRpbyAqLwogCQkJc3RhdGUtPm1vZGUgPSBNU1BfTU9ERV9GTV9SQURJTzsKIAkJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCQkJc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQkJc3RhdGUtPm5pY2FtX29uID0gMDsKLQkJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAwOwogCQkJLyogbm90IG5lZWRlZCBpbiB0aGVvcnkgaWYgd2UgaGF2ZSByYWRpbywgYnV0CiAJCQkgICBzaG9ydCBwcm9ncmFtbWluZyBlbmFibGVzIGNhcnJpZXIgbXV0ZSAqLwotCQkJbXNwMzQwMGNfc2V0bW9kZShjbGllbnQsIE1TUF9NT0RFX0ZNX1JBRElPKTsKLQkJCW1zcDM0MDBjX3NldGNhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUigxMC43KSwKKwkJCW1zcDM0MDBjX3NldF9tb2RlKGNsaWVudCwgTVNQX01PREVfRk1fUkFESU8pOworCQkJbXNwMzQwMGNfc2V0X2NhcnJpZXIoY2xpZW50LCBNU1BfQ0FSUklFUigxMC43KSwKIAkJCQkJICAgIE1TUF9DQVJSSUVSKDEwLjcpKTsKLQkJCS8qIHNjYXJ0IHJvdXRpbmcgKi8KKwkJCS8qIHNjYXJ0IHJvdXRpbmcgKHRoaXMgZG9lc24ndCBiZWxvbmcgaGVyZSBJIHRoaW5rKSAqLwogCQkJbXNwX3NldF9zY2FydChjbGllbnQsU0NBUlRfSU4yLDApOwotCQkJLyogbXNwMzR4eCBkb2VzIHJhZGlvIGRlY29kaW5nICovCi0JCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwOCwgMHgwMDIwKTsKLQkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDA5LCAweDAwMjApOwotCQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MGIsIDB4MDAyMCk7CiAJCQlicmVhazsKKwkJY2FzZSAweDAwMDI6CiAJCWNhc2UgMHgwMDAzOgogCQljYXNlIDB4MDAwNDoKIAkJY2FzZSAweDAwMDU6CiAJCQlzdGF0ZS0+bW9kZSA9IE1TUF9NT0RFX0ZNX1RFUlJBOwogCQkJc3RhdGUtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQkJCXN0YXRlLT5uaWNhbV9vbiA9IDA7CiAJCQlzdGF0ZS0+d2F0Y2hfc3RlcmVvID0gMTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyogdW5tdXRlLCByZXN0b3JlIG1pc2MgcmVnaXN0ZXJzICovCi0JCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTMsIHN0YXRlLT5hY2IpOworCQkvKiBzZXQgdmFyaW91cyBwcmVzY2FsZXMgKi8KKwkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MGQsIDB4MTkwMCk7IC8qIHNjYXJ0ICovCisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDBlLCAweDMwMDApOyAvKiBGTSAqLworCQlpZiAoc3RhdGUtPmhhc19uaWNhbSkKKwkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDEwLCAweDVhMDApOyAvKiBuaWNhbSAqLworCiAJCWlmIChzdGF0ZS0+aGFzX2kyc19jb25mKQogCQkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4NDAsIHN0YXRlLT5pMnNfbW9kZSk7CiAKLQkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlICovCisJCS8qIHVubXV0ZSwgcmVzdG9yZSBtaXNjIHJlZ2lzdGVycyAqLworCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisKKwkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTMsIHN0YXRlLT5hY2IpOworCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQpOworCisJCS8qIG1vbml0b3IgdHYgYXVkaW8gbW9kZSwgdGhlIGZpcnN0IHRpbWUgZG9uJ3Qgd2FpdAorCQkgICBzbyBsb25nIHRvIGdldCBhIHF1aWNrIHN0ZXJlby9iaWxpbmd1YWwgcmVzdWx0ICovCisJCWlmIChtc3Bfc2xlZXAoc3RhdGUsIDEwMDApKQorCQkJZ290byByZXN0YXJ0OwogCQl3aGlsZSAoc3RhdGUtPndhdGNoX3N0ZXJlbykgewotCQkJaWYgKG1zcF9zbGVlcChzdGF0ZSw1MDAwKSkKLQkJCQlnb3RvIHJlc3RhcnQ7CiAJCQl3YXRjaF9zdGVyZW8oY2xpZW50KTsKKwkJCWlmIChtc3Bfc2xlZXAoc3RhdGUsIDUwMDApKQorCQkJCWdvdG8gcmVzdGFydDsKIAkJfQogCX0KIAl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidGhyZWFkOiBleGl0XG4iKTsKQEAgLTgwNCwxMDIgKzc4MSwxNTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogbXNwMzR4eEcgKyAoYXV0b3NlbGVjdCBuby10aHJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIHRoaXMgb25lIHVzZXMgYm90aCBhdXRvbWF0aWMgc3RhbmRhcmQgZGV0ZWN0aW9uIGFuZCBhdXRvbWF0aWMgc291bmQgICAgICovCi0vKiBzZWxlY3Qgd2hpY2ggYXJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3ZXIgRyB2ZXJzaW9ucyAgICAgICAgICAgICAgICAgICAgICAqLwotLyogc3RydWN0IG1zcDogb25seSBub3JtLCBhY2IgYW5kIHNvdXJjZSBhcmUgcmVhbGx5IHVzZWQgaW4gdGhpcyBtb2RlICAgICAgKi8KLQotLyogc2V0IHRoZSBzYW1lICdzb3VyY2UnIGZvciB0aGUgbG91ZHNwZWFrZXIsIHNjYXJ0IGFuZCBxdWFzaS1wZWFrIGRldGVjdG9yCi0gKiB0aGUgdmFsdWUgZm9yIHNvdXJjZSBpcyB0aGUgc2FtZSBhcyBiaXQgMTU6OCBvZiBEU1AgcmVnaXN0ZXJzIDB4MDgsCi0gKiAweDBhIGFuZCAweDBjOiAwPW1vbm8sIDE9c3RlcmVvIG9yIEF8QiwgMj1TQ0FSVCwgMz1zdGVyZW8gb3IgQSwgND1zdGVyZW8gb3IgQgotICoKLSAqIHRoaXMgZnVuY3Rpb24gcmVwbGFjZXMgbXNwMzQwMGNfc2V0c3RlcmVvCisvKiBtc3AzNHh4RyArIChhdXRvc2VsZWN0IG5vLXRocmVhZCkKKyAqIHRoaXMgb25lIHVzZXMgYm90aCBhdXRvbWF0aWMgc3RhbmRhcmQgZGV0ZWN0aW9uIGFuZCBhdXRvbWF0aWMgc291bmQKKyAqIHNlbGVjdCB3aGljaCBhcmUgYXZhaWxhYmxlIGluIHRoZSBuZXdlciBHIHZlcnNpb25zCisgKiBzdHJ1Y3QgbXNwOiBvbmx5IG5vcm0sIGFjYiBhbmQgc291cmNlIGFyZSByZWFsbHkgdXNlZCBpbiB0aGlzIG1vZGUKICAqLwotc3RhdGljIHZvaWQgbXNwMzR4eGdfc2V0X3NvdXJjZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgc291cmNlKQorCitzdGF0aWMgaW50IG1zcDM0eHhnX21vZHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCS8qIGZpeCBtYXRyaXggbW9kZSB0byBzdGVyZW8gYW5kIGxldCB0aGUgbXNwIGNob29zZSB3aGF0Ci0JICogdG8gb3V0cHV0IGFjY29yZGluZyB0byAnc291cmNlJywgYXMgcmVjb21tZW5kZWQKLQkgKiBmb3IgTU9OTyAoc291cmNlPT0wKSBkb3dubWl4aW5nIHNldCBiaXRbNzowXSB0byAweDMwCi0JICovCi0JaW50IHZhbHVlID0gKHNvdXJjZSAmIDB4MDcpIDw8IDggfCAoc291cmNlID09IDAgPyAweDMwIDogMHgyMCk7CisJaWYgKHN0YXRlLT5yYWRpbykgeworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAic2VsZWN0ZWQgcmFkaW8gbW9kdXNcbiIpOworCQlyZXR1cm4gMHgwMDAxOworCX0KIAotCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzZXQgc291cmNlIHRvICVkICgweCV4KVxuIiwgc291cmNlLCB2YWx1ZSk7Ci0JLyogTG91ZHNwZWFrZXIgT3V0cHV0ICovCi0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDgsIHZhbHVlKTsKLQkvKiBTQ0FSVDEgREEgT3V0cHV0ICovCi0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MGEsIHZhbHVlKTsKLQkvKiBRdWFzaS1wZWFrIGRldGVjdG9yICovCi0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MGMsIHZhbHVlKTsKLQkvKgotCSAqIHNldCBpZGVudGlmaWNhdGlvbiB0aHJlc2hvbGQuIFBlcnNvbmFsbHksIEkKLQkgKiBJIHNldCBpdCB0byBhIGhpZ2hlciB2YWx1ZSB0aGF0IHRoZSBkZWZhdWx0Ci0JICogb2YgMHgxOTAgdG8gaWdub3JlIG5vaXN5IHN0ZXJlbyBzaWduYWxzLgotCSAqIHRoaXMgbmVlZHMgdHVuaW5nLiAocmVjb21tZW5kZWQgcmFuZ2UgMHgwMGEwLTB4MDNjMCkKLQkgKiAweDdmMCA9IGZvcmNlZCBtb25vIG1vZGUKLQkgKi8KLQkvKiBhMiB0aHJlc2hvbGQgZm9yIHN0ZXJlby9iaWxpbmd1YWwgKi8KLQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgyMiwgbXNwX3N0ZXJlb190aHJlc2gpOwotCXN0YXRlLT5zb3VyY2UgPSBzb3VyY2U7CisJaWYgKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX1BBTCkgeworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAic2VsZWN0ZWQgUEFMIG1vZHVzXG4iKTsKKwkJcmV0dXJuIDB4NzAwMTsKKwl9CisJaWYgKHN0YXRlLT52NGwyX3N0ZCA9PSBWNEwyX1NURF9OVFNDX01fSlApIHsKKwkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInNlbGVjdGVkIE0gKEVJQS1KKSBtb2R1c1xuIik7CisJCXJldHVybiAweDQwMDE7CisJfQorCWlmIChzdGF0ZS0+djRsMl9zdGQgPT0gVjRMMl9TVERfTlRTQ19NX0tSKSB7CisJCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzZWxlY3RlZCBNIChBMikgbW9kdXNcbiIpOworCQlyZXR1cm4gMHgwMDAxOworCX0KKwlpZiAoc3RhdGUtPnY0bDJfc3RkICYgVjRMMl9TVERfTU4pIHsKKwkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInNlbGVjdGVkIE0gKEJUU0MpIG1vZHVzXG4iKTsKKwkJcmV0dXJuIDB4MjAwMTsKKwl9CisJaWYgKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzZWxlY3RlZCBTRUNBTSBtb2R1c1xuIik7CisJCXJldHVybiAweDYwMDE7CisJfQorCXJldHVybiAweDAwMDE7CiB9CiAKLS8qIChyZS0paW5pdGlhbGl6ZSB0aGUgbXNwMzR4eGcsIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBub3JtIGluIHN0YXRlLT5ub3JtCi0gKiByZXR1cm4gMCBpZiBpdCB3b3JrZWQsIC0xIGlmIGl0IGZhaWxlZAotICovCi1zdGF0aWMgaW50IG1zcDM0eHhnX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBtc3AzNHh4Z19zZXRfc291cmNlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIGludCBpbikKKyB7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgc291cmNlLCBtYXRyaXg7CisKKwlzd2l0Y2ggKHN0YXRlLT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJc291cmNlID0gMDsgLyogbW9ubyBvbmx5ICovCisJCW1hdHJpeCA9IDB4MzA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQlzb3VyY2UgPSAzOyAvKiBzdGVyZW8gb3IgQSAqLworCQltYXRyaXggPSAweDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJc291cmNlID0gNDsgLyogc3RlcmVvIG9yIEIgKi8KKwkJbWF0cml4ID0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgorCWRlZmF1bHQ6CisJCXNvdXJjZSA9IDE7IC8qIHN0ZXJlbyBvciBBfEIgKi8KKwkJbWF0cml4ID0gMHgyMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGluID09IE1TUF9EU1BfT1VUX1RVTkVSKQorCQlzb3VyY2UgPSAoc291cmNlIDw8IDgpIHwgMHgyMDsKKwkvKiB0aGUgbXNwMzR4MmcgcHV0cyB0aGUgTUFJTl9BVkMsIE1BSU4gYW5kIEFVWCBzb3VyY2VzIGluIDEyLCAxMywgMTQKKwkgICBpbnN0ZWFkIG9mIDExLCAxMiwgMTMuIFNvIHdlIGFkZCBvbmUgZm9yIHRoYXQgbXNwIHZlcnNpb24uICovCisJZWxzZSBpZiAoaW4gPj0gTVNQX0RTUF9PVVRfTUFJTl9BVkMgJiYgc3RhdGUtPmhhc19kb2xieV9wcm9fbG9naWMpCisJCXNvdXJjZSA9ICgoaW4gKyAxKSA8PCA4KSB8IG1hdHJpeDsKKwllbHNlCisJCXNvdXJjZSA9IChpbiA8PCA4KSB8IG1hdHJpeDsKKworCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzZXQgc291cmNlIHRvICVkICgweCV4KSBmb3Igb3V0cHV0ICUwMnhcbiIsCisJCQlpbiwgc291cmNlLCByZWcpOworCW1zcF93cml0ZV9kc3AoY2xpZW50LCByZWcsIHNvdXJjZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1zcDM0eHhnX3NldF9zb3VyY2VzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgbW9kdXMsIHN0ZDsKKwl1MzIgaW4gPSBzdGF0ZS0+cm91dGluZy5pbnB1dDsKIAotCWlmIChtc3BfcmVzZXQoY2xpZW50KSkKLQkJcmV0dXJuIC0xOworCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCAweDAwMDgsIChpbiA+PiA0KSAmIDB4Zik7CisJLyogcXVhc2ktcGVhayBkZXRlY3RvciBpcyBzZXQgdG8gc2FtZSBpbnB1dCBhcyB0aGUgbG91ZHNwZWFrZXIgKE1BSU4pICovCisJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIDB4MDAwYywgKGluID4+IDQpICYgMHhmKTsKKwltc3AzNHh4Z19zZXRfc291cmNlKGNsaWVudCwgMHgwMDA5LCAoaW4gPj4gOCkgJiAweGYpOworCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCAweDAwMGEsIChpbiA+PiAxMikgJiAweGYpOworCWlmIChzdGF0ZS0+aGFzX3NjYXJ0MjNfaW5fc2NhcnQyX291dCkKKwkJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIDB4MDA0MSwgKGluID4+IDE2KSAmIDB4Zik7CisJbXNwMzR4eGdfc2V0X3NvdXJjZShjbGllbnQsIDB4MDAwYiwgKGluID4+IDIwKSAmIDB4Zik7Cit9CisKKy8qIChyZS0paW5pdGlhbGl6ZSB0aGUgbXNwMzR4eGcgKi8KK3N0YXRpYyB2b2lkIG1zcDM0eHhnX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdHVuZXIgPSAoc3RhdGUtPnJvdXRpbmcuaW5wdXQgPj4gMykgJiAxOworCWludCBtb2R1czsKKworCS8qIGluaXRpYWxpemUgc3RkIHRvIDEgKGF1dG9kZXRlY3QpIHRvIHNpZ25hbCB0aGF0IG5vIHN0YW5kYXJkIGlzCisJICAgc2VsZWN0ZWQgeWV0LiAqLworCXN0YXRlLT5zdGQgPSAxOworCisJbXNwX3Jlc2V0KGNsaWVudCk7CiAKIAkvKiBtYWtlIHN1cmUgdGhhdCBpbnB1dC9vdXRwdXQgaXMgbXV0ZWQgKHBhcmFub2lkIG1vZGUpICovCiAJLyogQUNCLCBtdXRlIERTUCBpbnB1dCwgbXV0ZSBTQ0FSVCAxICovCi0JaWYgKG1zcF93cml0ZV9kc3AoY2xpZW50LCAweDEzLCAweDBmMjApKQotCQlyZXR1cm4gLTE7CisJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTMsIDB4MGYyMCk7CiAKIAlpZiAoc3RhdGUtPmhhc19pMnNfY29uZikKIAkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4NDAsIHN0YXRlLT5pMnNfbW9kZSk7CiAKIAkvKiBzdGVwLWJ5LXN0ZXAgaW5pdGlhbGlzYXRpb24sIGFzIGRlc2NyaWJlZCBpbiB0aGUgbWFudWFsICovCi0JbW9kdXMgPSBtc3BfbW9kdXMoY2xpZW50KTsKLQlpZiAoc3RhdGUtPnJhZGlvKQotCQlzdGQgPSAweDQwOwotCWVsc2UKLQkJc3RkID0gKHN0YXRlLT52NGwyX3N0ZCAmIFY0TDJfU1REX05UU0MpID8gMHgyMCA6IDE7Ci0JbW9kdXMgJj0gfjB4MDM7IC8qIFNUQVRVU19DSEFOR0UgPSAwICovCi0JbW9kdXMgfD0gMHgwMTsgIC8qIEFVVE9NQVRJQ19TT1VORF9ERVRFQ1RJT04gPSAxICovCi0JaWYgKG1zcF93cml0ZV9kZW0oY2xpZW50LCAweDMwLCBtb2R1cykpCi0JCXJldHVybiAtMTsKLQlpZiAobXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MjAsIHN0ZCkpCi0JCXJldHVybiAtMTsKKwltb2R1cyA9IG1zcDM0eHhnX21vZHVzKGNsaWVudCk7CisJbW9kdXMgfD0gdHVuZXIgPyAweDEwMCA6IDA7CisJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4MzAsIG1vZHVzKTsKIAogCS8qIHdyaXRlIHRoZSBkc3BzIHRoYXQgbWF5IGhhdmUgYW4gaW5mbHVlbmNlIG9uCiAJICAgc3RhbmRhcmQvYXVkaW8gYXV0b2RldGVjdGlvbiByaWdodCBub3cgKi8KLQltc3AzNHh4Z19zZXRfc291cmNlKGNsaWVudCwgc3RhdGUtPnNvdXJjZSk7CisJbXNwMzR4eGdfc2V0X3NvdXJjZXMoY2xpZW50KTsKIAotCS8qIEFNL0ZNIFByZXNjYWxlIFsxNTo4XSA3NWtoeiBkZXZpYXRpb24gKi8KLQlpZiAobXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MGUsIDB4MzAwMCkpCi0JCXJldHVybiAtMTsKKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwZCwgMHgxOTAwKTsgLyogc2NhcnQgKi8KKwltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwZSwgMHgzMDAwKTsgLyogRk0gKi8KKwlpZiAoc3RhdGUtPmhhc19uaWNhbSkKKwkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTAsIDB4NWEwMCk7IC8qIG5pY2FtICovCiAKLQkvKiBOSUNBTSBQcmVzY2FsZSA5ZGIgZ2FpbiAoYXMgcmVjb21tZW5kZWQpICovCi0JaWYgKG1zcF93cml0ZV9kc3AoY2xpZW50LCAweDEwLCAweDVhMDApKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKKwkvKiBzZXQgaWRlbnRpZmljYXRpb24gdGhyZXNob2xkLiBQZXJzb25hbGx5LCBJCisJICogSSBzZXQgaXQgdG8gYSBoaWdoZXIgdmFsdWUgdGhhbiB0aGUgZGVmYXVsdAorCSAqIG9mIDB4MTkwIHRvIGlnbm9yZSBub2lzeSBzdGVyZW8gc2lnbmFscy4KKwkgKiB0aGlzIG5lZWRzIHR1bmluZy4gKHJlY29tbWVuZGVkIHJhbmdlIDB4MDBhMC0weDAzYzApCisJICogMHg3ZjAgPSBmb3JjZWQgbW9ubyBtb2RlCisJICoKKwkgKiBhMiB0aHJlc2hvbGQgZm9yIHN0ZXJlby9iaWxpbmd1YWwuCisJICogTm90ZTogdGhpcyByZWdpc3RlciBpcyBwYXJ0IG9mIHRoZSBNYW51YWwvQ29tcGF0aWJpbGl0eSBtb2RlLgorCSAqIEl0IGlzIHN1cHBvcnRlZCBieSBhbGwgJ0cnLWZhbWlseSBjaGlwcy4KKwkgKi8KKwltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgyMiwgbXNwX3N0ZXJlb190aHJlc2gpOwogfQogCiBpbnQgbXNwMzR4eGdfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGE7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgdmFsLCBzdGQsIGk7CisJaW50IHZhbCwgaTsKIAogCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJtc3AzNHh4ZyBkYWVtb24gc3RhcnRlZFxuIik7CiAKLQlzdGF0ZS0+c291cmNlID0gMTsgLyogZGVmYXVsdCAqLwogCWZvciAoOzspIHsKIAkJdjRsX2RiZygyLCBtc3BfZGVidWcsIGNsaWVudCwgIm1zcDM0eHhnIHRocmVhZDogc2xlZXBcbiIpOwogCQltc3Bfc2xlZXAoc3RhdGUsIC0xKTsKQEAgLTkxMywxMiArOTQyLDE0IEBACiAKIAkJLyogc2V0dXAgdGhlIGNoaXAqLwogCQltc3AzNHh4Z19yZXNldChjbGllbnQpOwotCQlzdGQgPSBtc3Bfc3RhbmRhcmQ7Ci0JCWlmIChzdGQgIT0gMHgwMSkKKwkJc3RhdGUtPnN0ZCA9IHN0YXRlLT5yYWRpbyA/IDB4NDAgOiBtc3Bfc3RhbmRhcmQ7CisJCWlmIChzdGF0ZS0+c3RkICE9IDEpCiAJCQlnb3RvIHVubXV0ZTsKKwkJLyogc3RhcnQgYXV0b2RldGVjdCAqLworCQltc3Bfd3JpdGVfZGVtKGNsaWVudCwgMHgyMCwgc3RhdGUtPnN0ZCk7CiAKIAkJLyogd2F0Y2ggYXV0b2RldGVjdCAqLwotCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAidHJpZ2dlcmVkIGF1dG9kZXRlY3QsIHdhaXRpbmcgZm9yIHJlc3VsdFxuIik7CisJCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJzdGFydGVkIGF1dG9kZXRlY3QsIHdhaXRpbmcgZm9yIHJlc3VsdFxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCQlpZiAobXNwX3NsZWVwKHN0YXRlLCAxMDApKQogCQkJCWdvdG8gcmVzdGFydDsKQEAgLTkyNiwyMCArOTU3LDE5IEBACiAJCQkvKiBjaGVjayByZXN1bHRzICovCiAJCQl2YWwgPSBtc3BfcmVhZF9kZW0oY2xpZW50LCAweDdlKTsKIAkJCWlmICh2YWwgPCAweDA3ZmYpIHsKLQkJCQlzdGQgPSB2YWw7CisJCQkJc3RhdGUtPnN0ZCA9IHZhbDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXY0bF9kYmcoMiwgbXNwX2RlYnVnLCBjbGllbnQsICJkZXRlY3Rpb24gc3RpbGwgaW4gcHJvZ3Jlc3NcbiIpOwogCQl9Ci0JCWlmIChzdGQgPT0gMSkgeworCQlpZiAoc3RhdGUtPnN0ZCA9PSAxKSB7CiAJCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiZGV0ZWN0aW9uIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwIHRyaWVzLiBnaXZpbmcgdXAuXG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAl1bm11dGU6Ci0JCXN0YXRlLT5zdGQgPSBzdGQ7Ci0JCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJjdXJyZW50IHN0YW5kYXJkOiAlcyAoMHglMDR4KVxuIiwKLQkJCW1zcF9zdGFuZGFyZF9zdGRfbmFtZShzdGQpLCBzdGQpOworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiZGV0ZWN0ZWQgc3RhbmRhcmQ6ICVzICgweCUwNHgpXG4iLAorCQkJbXNwX3N0YW5kYXJkX3N0ZF9uYW1lKHN0YXRlLT5zdGQpLCBzdGF0ZS0+c3RkKTsKIAogCQkvKiB1bm11dGU6IGRpc3BhdGNoIHNvdW5kIHRvIHNjYXJ0IG91dHB1dCwgc2V0IHNjYXJ0IHZvbHVtZSAqLwogCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CkBAIC05NDgsNjMgKzk3OCw5MyBAQAogCQlpZiAobXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MTMsIHN0YXRlLT5hY2IpKQogCQkJcmV0dXJuIC0xOwogCi0JCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDQwLCBzdGF0ZS0+aTJzX21vZGUpOworCQkvKiB0aGUgcGVyaW9kaWMgc3RlcmVvL1NBUCBjaGVjayBpcyBvbmx5IHJlbGV2YW50IGZvcgorCQkgICB0aGUgMHgyMCBzdGFuZGFyZCAoQlRTQykgKi8KKwkJaWYgKHN0YXRlLT5zdGQgIT0gMHgyMCkKKwkJCWNvbnRpbnVlOworCisJCXN0YXRlLT53YXRjaF9zdGVyZW8gPSAxOworCisJCS8qIG1vbml0b3IgdHYgYXVkaW8gbW9kZSwgdGhlIGZpcnN0IHRpbWUgZG9uJ3Qgd2FpdAorCQkgICBpbiBvcmRlciB0byBnZXQgYSBxdWljayBzdGVyZW8vU0FQIHVwZGF0ZSAqLworCQl3YXRjaF9zdGVyZW8oY2xpZW50KTsKKwkJd2hpbGUgKHN0YXRlLT53YXRjaF9zdGVyZW8pIHsKKwkJCXdhdGNoX3N0ZXJlbyhjbGllbnQpOworCQkJaWYgKG1zcF9zbGVlcChzdGF0ZSwgNTAwMCkpCisJCQkJZ290byByZXN0YXJ0OworCQl9CiAJfQogCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsICJ0aHJlYWQ6IGV4aXRcbiIpOwogCXJldHVybiAwOwogfQogCi12b2lkIG1zcDM0eHhnX2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgbXNwMzR4eGdfZGV0ZWN0X3N0ZXJlbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KIAlpbnQgc3RhdHVzID0gbXNwX3JlYWRfZGVtKGNsaWVudCwgMHgwMjAwKTsKIAlpbnQgaXNfYmlsaW5ndWFsID0gc3RhdHVzICYgMHgxMDA7CiAJaW50IGlzX3N0ZXJlbyA9IHN0YXR1cyAmIDB4NDA7CisJaW50IG9sZHJ4ID0gc3RhdGUtPnJ4c3ViY2hhbnM7CiAKIAlzdGF0ZS0+cnhzdWJjaGFucyA9IDA7CiAJaWYgKGlzX3N0ZXJlbykKLQkJc3RhdGUtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCQlzdGF0ZS0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAllbHNlCi0JCXN0YXRlLT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX01PTk87CisJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAlpZiAoaXNfYmlsaW5ndWFsKSB7Ci0JCXN0YXRlLT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTEFORzI7Ci0JCS8qIEknbSBzdXBwb3NlZCB0byBjaGVjayB3aGV0aGVyIGl0J3MgU0FQIG9yIG5vdAotCQkgKiBhbmQgc2V0IG9ubHkgTEFORzIvU0FQIGluIHRoaXMgY2FzZS4gWWV0LCB0aGUgTVNQCi0JCSAqIGRvZXMgYSBsb3Qgb2Ygd29yayB0byBoaWRlIHRoaXMgYW5kIGhhbmRsZSBldmVyeXRoaW5nCi0JCSAqIHRoZSBzYW1lIHdheS4gSSBkb24ndCB3YW50IHRvIHdvcmsgYXJvdW5kIGl0IHNvIHVubGVzcwotCQkgKiB0aGlzIGlzIGEgcHJvYmxlbSwgSSdsbCBoYW5kbGUgU0FQIGp1c3QgbGlrZSBsYW5nMS9sYW5nMi4KLQkJICovCisJCWlmIChzdGF0ZS0+c3RkID09IDB4MjApCisJCQlzdGF0ZS0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9TQVA7CisJCWVsc2UKKwkJCXN0YXRlLT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKIAl9CiAJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCV4LCBzdGVyZW89JWQsIGJpbGluZ3VhbD0lZCAtPiByeHN1YmNoYW5zPSVkXG4iLAogCQlzdGF0dXMsIGlzX3N0ZXJlbywgaXNfYmlsaW5ndWFsLCBzdGF0ZS0+cnhzdWJjaGFucyk7CisJcmV0dXJuIChvbGRyeCAhPSBzdGF0ZS0+cnhzdWJjaGFucyk7CiB9CiAKLXZvaWQgbXNwMzR4eGdfc2V0X2F1ZG1vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGF1ZG1vZGUpCitzdGF0aWMgdm9pZCBtc3AzNHh4Z19zZXRfYXVkbW9kZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHNvdXJjZTsKIAotCXN3aXRjaCAoYXVkbW9kZSkgewotCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCXNvdXJjZSA9IDA7IC8qIG1vbm8gb25seSAqLworCWlmIChzdGF0ZS0+c3RkID09IDB4MjApIHsKKwkgICAgICAgaWYgKChzdGF0ZS0+cnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX1NBUCkgJiYKKwkJICAgKHN0YXRlLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8gfHwKKwkJICAgIHN0YXRlLT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMikpIHsKKwkJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDIwLCAweDIxKTsKKwkgICAgICAgfSBlbHNlIHsKKwkJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDIwLCAweDIwKTsKKwkgICAgICAgfQorCX0KKworCW1zcDM0eHhnX3NldF9zb3VyY2VzKGNsaWVudCk7Cit9CisKK3ZvaWQgbXNwX3NldF9hdWRtb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoc3RhdGUtPm9wbW9kZSkgeworCWNhc2UgT1BNT0RFX01BTlVBTDoKKwljYXNlIE9QTU9ERV9BVVRPREVURUNUOgorCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQpOwogCQlicmVhazsKLQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCXNvdXJjZSA9IDE7IC8qIHN0ZXJlbyBvciBBfEIsIHNlZSBjb21tZW50IGluIG1zcDM0eHhnX2dldF92NGwyX3N0ZXJlbygpICovCi0JCS8qIHByb2JsZW06IHRoYXQgY291bGQgYWxzbyBtZWFuIDIgKHNjYXJ0IGlucHV0KSAqLwotCQlicmVhazsKLQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJc291cmNlID0gMzsgLyogc3RlcmVvIG9yIEEgKi8KLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6Ci0JCXNvdXJjZSA9IDQ7IC8qIHN0ZXJlbyBvciBCICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWF1ZG1vZGUgPSAwOwotCQlzb3VyY2UgID0gMTsKKwljYXNlIE9QTU9ERV9BVVRPU0VMRUNUOgorCQltc3AzNHh4Z19zZXRfYXVkbW9kZShjbGllbnQpOwogCQlicmVhazsKIAl9Ci0Jc3RhdGUtPmF1ZG1vZGUgPSBhdWRtb2RlOwotCW1zcDM0eHhnX3NldF9zb3VyY2UoY2xpZW50LCBzb3VyY2UpOworfQorCitpbnQgbXNwX2RldGVjdF9zdGVyZW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN3aXRjaCAoc3RhdGUtPm9wbW9kZSkgeworCWNhc2UgT1BNT0RFX01BTlVBTDoKKwljYXNlIE9QTU9ERV9BVVRPREVURUNUOgorCQlyZXR1cm4gbXNwMzQwMGNfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOworCWNhc2UgT1BNT0RFX0FVVE9TRUxFQ1Q6CisJCXJldHVybiBtc3AzNHh4Z19kZXRlY3Rfc3RlcmVvKGNsaWVudCk7CisJfQorCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwppbmRleCA4NDE2Y2VmLi5iMGFlYTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qCiAgICAgbXhiIC0gdjRsMiBkcml2ZXIgZm9yIHRoZSBNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZAotICAgIAotICAgIENvcHlyaWdodCAoQykgMTk5OC0yMDAzIE1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+CisKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNiBNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPgogCiAgICAgVmlzaXQgaHR0cDovL3d3dy5taWh1LmRlL2xpbnV4L3NhYTcxNDYvbXhiLwogICAgIGZvciBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgdGhpcyBjYXJkLgotICAgIAorCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0zNSwxMiArMzUsMTIgQEAKIAogI2RlZmluZSBJMkNfU0FBNzExMSAweDI0CiAKLSNkZWZpbmUgTVhCX0JPQVJEX0NBTl9ET19WQkkoZGV2KSAgIChkZXYtPnJldmlzaW9uICE9IDApIAorI2RlZmluZSBNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpICAgKGRldi0+cmV2aXNpb24gIT0gMCkKIAogLyogZ2xvYmFsIHZhcmlhYmxlICovCiBzdGF0aWMgaW50IG14Yl9udW0gPSAwOwogCi0vKiBpbml0aWFsIGZyZXF1ZW5jZSB0aGUgdHVuZXIgd2lsbCBiZSB0dW5lZCB0by4gCisvKiBpbml0aWFsIGZyZXF1ZW5jZSB0aGUgdHVuZXIgd2lsbCBiZSB0dW5lZCB0by4KICAgIGluIHZlcmRlbiAobG93ZXIgc2F4b255LCBnZXJtYW55KSA0MTQ4IGlzIGEKICAgIGNoYW5uZWwgY2FsbGVkICJwaG9lbml4IiAqLwogc3RhdGljIGludCBmcmVxID0gNDE0ODsKQEAgLTU1LDcgKzU1LDcgQEAKIGVudW0geyBUVU5FUiwgQVVYMSwgQVVYMywgQVVYM19ZQyB9OwogCiBzdGF0aWMgc3RydWN0IHY0bDJfaW5wdXQgbXhiX2lucHV0c1tNWEJfSU5QVVRTXSA9IHsKLQl7IFRVTkVSLAkiVHVuZXIiLAkJVjRMMl9JTlBVVF9UWVBFX1RVTkVSLAkxLCAwLCBWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfTlRTQ19NLCAwIH0sIAorCXsgVFVORVIsCSJUdW5lciIsCQlWNEwyX0lOUFVUX1RZUEVfVFVORVIsCTEsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKIAl7IEFVWDEsCQkiQVVYMSIsCQkJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJMiwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LAogCXsgQVVYMywJCSJBVVgzIENvbXBvc2l0ZSIsCVY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsCTQsIDAsIFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9OVFNDX00sIDAgfSwKIAl7IEFVWDNfWUMsCSJBVVgzIFMtVmlkZW8iLAkJVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwJNCwgMCwgVjRMMl9TVERfUEFMX0JHfFY0TDJfU1REX05UU0NfTSwgMCB9LApAQCAtNjYsNyArNjYsNyBAQAogc3RhdGljIHN0cnVjdCB7CiAJaW50IGhwc19zb3VyY2U7CiAJaW50IGhwc19zeW5jOwotfSBpbnB1dF9wb3J0X3NlbGVjdGlvbltNWEJfSU5QVVRTXSA9IHsgCQorfSBpbnB1dF9wb3J0X3NlbGVjdGlvbltNWEJfSU5QVVRTXSA9IHsKIAl7IFNBQTcxNDZfSFBTX1NPVVJDRV9QT1JUX0EsIFNBQTcxNDZfSFBTX1NZTkNfUE9SVF9BIH0sCiAJeyBTQUE3MTQ2X0hQU19TT1VSQ0VfUE9SVF9BLCBTQUE3MTQ2X0hQU19TWU5DX1BPUlRfQSB9LAogCXsgU0FBNzE0Nl9IUFNfU09VUkNFX1BPUlRfQSwgU0FBNzE0Nl9IUFNfU1lOQ19QT1JUX0EgfSwKQEAgLTgxLDcgKzgxLDcgQEAKIC8qIHRoZXNlIGFyZSB0aGUgbmVjZXNzYXJ5IGlucHV0LW91dHB1dC1waW5zIGZvciBicmluZ2luZyBvbmUgYXVkaW8gc291cmNlCiAoc2VlIGFib3ZlKSB0byB0aGUgQ0Qtb3V0cHV0ICovCiBzdGF0aWMgc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4IFRFQTY0MjBfY2RbTVhCX0FVRElPUysxXVsyXSA9Ci0JCXsgCisJCXsKIAkJe3sxLDEsMH0sezEsMSwwfX0sCS8qIFR1bmVyICovCiAJCXt7NSwxLDB9LHs2LDEsMH19LAkvKiBBVVggMSAqLwogCQl7ezQsMSwwfSx7NiwxLDB9fSwJLyogQVVYIDIgKi8KQEAgLTEyMiw4ICsxMjIsOCBAQAogCXsgVklESU9DX1NfRlJFUVVFTkNZLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKIAl7IFZJRElPQ19HX0FVRElPLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKIAl7IFZJRElPQ19TX0FVRElPLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IE1YQl9TX0FVRElPX0NELCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwJLyogY3VzdG9tIGNvbnRyb2wgKi8JCi0JeyBNWEJfU19BVURJT19MSU5FLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwJLyogY3VzdG9tIGNvbnRyb2wgKi8JCisJeyBNWEJfU19BVURJT19DRCwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCS8qIGN1c3RvbSBjb250cm9sICovCisJeyBNWEJfU19BVURJT19MSU5FLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwJLyogY3VzdG9tIGNvbnRyb2wgKi8KIAl7IDAsCQkJMCB9CiB9OwogCkBAIC0xMzIsNyArMTMyLDcgQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2aWRlb19kZXY7CiAJc3RydWN0IHZpZGVvX2RldmljZQkqdmJpX2RldjsKIAotCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcHRlcjsJCisJc3RydWN0IGkyY19hZGFwdGVyCWkyY19hZGFwdGVyOwogCiAJc3RydWN0IGkyY19jbGllbnQqCXNhYTcxMTFhOwogCXN0cnVjdCBpMmNfY2xpZW50Kgl0ZGE5ODQwOwpAQCAtMTk4LDE3ICsxOTgsMTcgQEAKIAkvKiBsb29wIHRocm91Z2ggYWxsIGkyYy1kZXZpY2VzIG9uIHRoZSBidXMgYW5kIGxvb2sgd2hvIGlzIHRoZXJlICovCiAJbGlzdF9mb3JfZWFjaChpdGVtLCZteGItPmkyY19hZGFwdGVyLmNsaWVudHMpIHsKIAkJY2xpZW50ID0gbGlzdF9lbnRyeShpdGVtLCBzdHJ1Y3QgaTJjX2NsaWVudCwgbGlzdCk7Ci0JCWlmKCBJMkNfVEVBNjQyMF8xID09IGNsaWVudC0+YWRkciApCisJCWlmKCBJMkNfQUREUl9URUE2NDIwXzEgPT0gY2xpZW50LT5hZGRyICkKIAkJCW14Yi0+dGVhNjQyMF8xID0gY2xpZW50OwotCQlpZiggSTJDX1RFQTY0MjBfMiA9PSBjbGllbnQtPmFkZHIgKSAKKwkJaWYoIEkyQ19BRERSX1RFQTY0MjBfMiA9PSBjbGllbnQtPmFkZHIgKQogCQkJbXhiLT50ZWE2NDIwXzIgPSBjbGllbnQ7Ci0JCWlmKCBJMkNfVEVBNjQxNUNfMiA9PSBjbGllbnQtPmFkZHIgKSAKKwkJaWYoIEkyQ19URUE2NDE1Q18yID09IGNsaWVudC0+YWRkciApCiAJCQlteGItPnRlYTY0MTVjID0gY2xpZW50OwotCQlpZiggSTJDX1REQTk4NDAgPT0gY2xpZW50LT5hZGRyICkgCisJCWlmKCBJMkNfQUREUl9UREE5ODQwID09IGNsaWVudC0+YWRkciApCiAJCQlteGItPnRkYTk4NDAgPSBjbGllbnQ7CiAJCWlmKCBJMkNfU0FBNzExMSA9PSBjbGllbnQtPmFkZHIgKQogCQkJbXhiLT5zYWE3MTExYSA9IGNsaWVudDsKLQkJaWYoIDB4NjAgPT0gY2xpZW50LT5hZGRyICkgCisJCWlmKCAweDYwID09IGNsaWVudC0+YWRkciApCiAJCQlteGItPnR1bmVyID0gY2xpZW50OwogCX0KIApAQCAtMjIyLDcgKzIyMiw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIGFsbCBkZXZpY2VzIGFyZSBwcmVzZW50LCBwcm9iZSB3YXMgc3VjY2Vzc2Z1bCAqLwkKKwkvKiBhbGwgZGV2aWNlcyBhcmUgcHJlc2VudCwgcHJvYmUgd2FzIHN1Y2Nlc3NmdWwgKi8KIAogCS8qIHdlIHN0b3JlIHRoZSBwb2ludGVyIGluIG91ciBwcml2YXRlIGRhdGEgZmllbGQgKi8KIAlkZXYtPmV4dF9wcml2ID0gbXhiOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHNvbWUgaW5pdCBkYXRhIGZvciB0aGUgc2FhNzc0MCwgdGhlIHNvLWNhbGxlZCAnc291bmQgYXJlbmEgbW9kdWxlJy4gCisvKiBzb21lIGluaXQgZGF0YSBmb3IgdGhlIHNhYTc3NDAsIHRoZSBzby1jYWxsZWQgJ3NvdW5kIGFyZW5hIG1vZHVsZScuCiAgICB0aGVyZSBhcmUgbm8gc3BlY3MgYXZhaWxhYmxlLCBzbyB3ZSBzaW1wbHkgdXNlIHNvbWUgaW5pdCB2YWx1ZXMgKi8KIHN0YXRpYyBzdHJ1Y3QgewogCWludAlsZW5ndGg7CkBAIC0zMjcsOSArMzI3LDEwIEBACiAJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCBpbml0OwogCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX1BBTF9CRzsKIAogCWludCBpID0gMCwgZXJyID0gMDsKLQlzdHJ1Y3QJdGVhNjQxNWNfbXVsdGlwbGV4IHZtOwkKKwlzdHJ1Y3QJdGVhNjQxNWNfbXVsdGlwbGV4IHZtOwogCiAJLyogc2VsZWN0IHZpZGVvIG1vZGUgaW4gc2FhNzExMWEgKi8KIAlpID0gVklERU9fTU9ERV9QQUw7CkBAIC0zNjEsNiArMzYyLDkgQEAKIAlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfRlJFUVVFTkNZLAogCQkJCQkmbXhiLT5jdXJfZnJlcSk7CiAKKwkvKiBzZXQgYSBkZWZhdWx0IHZpZGVvIHN0YW5kYXJkICovCisJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CisKIAkvKiBtdXRlIGF1ZGlvIG9uIHRlYTY0MjBzICovCiAJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSxURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVswXSk7CiAJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMixURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVsxXSk7CkBAIC0zNzYsMTYgKzM4MCwxNiBAQAogCXZtLmluICA9IDM7CiAJdm0ub3V0ID0gMTM7CiAJbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsVEVBNjQxNUNfU1dJVENILCAmdm0pOwotCQkJCQorCiAJLyogdGhlIHJlc3QgZm9yIG14YiAqLwogCW14Yi0+Y3VyX2lucHV0ID0gMDsKIAlteGItPmN1cl9tdXRlID0gMTsKIAogCW14Yi0+Y3VyX21vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCW14Yi0+dGRhOTg0MC0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGRhOTg0MCwgVERBOTg0MF9TV0lUQ0gsICZteGItPmN1cl9tb2RlKTsKLQkJCQorCiAJLyogY2hlY2sgaWYgdGhlIHNhYTc3NDAgKGFrYSAnc291bmQgYXJlbmEgbW9kdWxlJykgaXMgcHJlc2VudAotCSAgIG9uIHRoZSBteGIuIGlmIHNvLCB3ZSBtdXN0IGluaXRpYWxpemUgaXQuIGR1ZSB0byBsYWNrIG9mIAorCSAgIG9uIHRoZSBteGIuIGlmIHNvLCB3ZSBtdXN0IGluaXRpYWxpemUgaXQuIGR1ZSB0byBsYWNrIG9mCiAJICAgaW5mb3JtYXRpb25zIGFib3V0IHRoZSBzYWE3NzQwLCB0aGUgdmFsdWVzIHdlcmUgcmV2ZXJzZQogCSAgIGVuZ2luZWVyZWQuICovCiAJbXNnLmFkZHIgPSAweDFiOwpAQCAtNDA1LDcgKzQwOSw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCW1zZy5sZW4gPSBteGJfc2FhNzc0MF9pbml0W2ldLmxlbmd0aDsJCQorCQkJbXNnLmxlbiA9IG14Yl9zYWE3NzQwX2luaXRbaV0ubGVuZ3RoOwogCQkJbXNnLmJ1ZiA9ICZteGJfc2FhNzc0MF9pbml0W2ldLmRhdGFbMF07CiAJCQlpZiggMSAhPSAoZXJyID0gaTJjX3RyYW5zZmVyKCZteGItPmkyY19hZGFwdGVyLCAmbXNnLCAxKSkpIHsKIAkJCQlERUJfRCgoImZhaWxlZCB0byBpbml0aWFsaXplICdzb3VuZCBhcmVuYSBtb2R1bGUnLlxuIikpOwpAQCAtNDE0LDEyICs0MTgsMTIgQEAKIAkJfQogCQlJTkZPKCgiJ3NvdW5kIGFyZW5hIG1vZHVsZScgZGV0ZWN0ZWQuXG4iKSk7CiAJfQotZXJyOgkKK2VycjoKIAkvKiB0aGUgcmVzdCBmb3Igc2FhNzE0NjogeW91IHNob3VsZCBkZWZpbml0ZWx5IHNldCBzb21lIGJhc2ljIHZhbHVlcwogCSAgIGZvciB0aGUgaW5wdXQtcG9ydCBoYW5kbGluZyBvZiB0aGUgc2FhNzE0Ni4gKi8KIAogCS8qIGV4dC0+c2FhIGhhcyBiZWVuIGZpbGxlZCBieSB0aGUgY29yZSBkcml2ZXIgKi8KLQkgICAKKwogCS8qIHNvbWUgc3R1ZmYgaXMgZG9uZSB2aWEgdmFyaWFibGVzICovCiAJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW214Yi0+Y3VyX2lucHV0XS5ocHNfc291cmNlLCBpbnB1dF9wb3J0X3NlbGVjdGlvbltteGItPmN1cl9pbnB1dF0uaHBzX3N5bmMpOwogCkBAIC00MjcsNyArNDMxLDcgQEAKIAogCS8qIHRoaXMgaXMgdWdseSwgYnV0IGJlY2F1c2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGlzIGlzIGNvbXBsZXRlbHkKIAkgICBoYXJkd2FyZSBkZXBlbmRlbmQsIGl0IHNob3VsZCBiZSBkb25lIGRpcmVjdGx5Li4uICovCi0gICAgICAJc2FhNzE0Nl93cml0ZShkZXYsIEREMV9TVFJFQU1fQiwJMHgwMDAwMDAwMCk7CisJc2FhNzE0Nl93cml0ZShkZXYsIEREMV9TVFJFQU1fQiwJMHgwMDAwMDAwMCk7CiAJc2FhNzE0Nl93cml0ZShkZXYsIEREMV9JTklULAkJMHgwMjAwMDIwMCk7CiAJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgKE1BU0tfMDkgfCBNQVNLXzI1IHwgTUFTS18xMCB8IE1BU0tfMjYpKTsKIApAQCAtNDQ5LDcgKzQ1Myw3IEBACiBzdGF0aWMgaW50IG14Yl9hdHRhY2goc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKIHsKIAlzdHJ1Y3QgbXhiKiBteGIgPSAoc3RydWN0IG14YiopZGV2LT5leHRfcHJpdjsKLQkKKwogCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKIAogCS8qIGNoZWNraW5nIGZvciBpMmMtZGV2aWNlcyBjYW4gYmUgb21pdHRlZCBoZXJlLCBiZWNhdXNlIHdlCkBAIC00NjAsNyArNDY0LDcgQEAKIAkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIikpOwogCQlyZXR1cm4gLTE7CiAJfQotCQorCiAJLyogaW5pdGlhbGl6YXRpb24gc3R1ZmYgKHZiaSkgKG9ubHkgZm9yIHJldmlzaW9uID4gMCBhbmQgZm9yIGV4dGVuc2lvbnMgd2hpY2ggd2FudCBpdCkqLwogCWlmKCAwICE9IE1YQl9CT0FSRF9DQU5fRE9fVkJJKGRldikpIHsKIAkJaWYoIDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmJpX2RldiwgZGV2LCAibXhiIiwgVkZMX1RZUEVfVkJJKSkgewpAQCAtNTA5LDE3ICs1MTMsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBteGJfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpIAorc3RhdGljIGludCBteGJfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBteGIqIG14YiA9IChzdHJ1Y3QgbXhiKilkZXYtPmV4dF9wcml2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsgCi0JCisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCiAJc3dpdGNoKGNtZCkgewogCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKIAl7CiAJCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwotCQkKKwogCQlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIixpLT5pbmRleCkpOwogCQlpZiggaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IE1YQl9JTlBVVFMpIHsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNTU1LDExICs1NTksMTEgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQkKKwogCQlpZiggaSA8IDAgKSB7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQotCQkJCisKIAkJc3dpdGNoICh2Yy0+aWQgKSB7CiAJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IHsKIAkJCQl2Yy0+dmFsdWUgPSBteGItPmN1cl9tdXRlOwpAQCAtNTY3LDcgKzU3MSw3IEBACiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KLQkJCisKIAkJREVCX0VFKCgiVklESU9DX0dfQ1RSTCBWNEwyX0NJRF9BVURJT19NVVRFOiVkLlxuIix2Yy0+dmFsdWUpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTc2LDE3ICs1ODAsMTcgQEAKIAl7CiAJCXN0cnVjdAl2NGwyX2NvbnRyb2wJKnZjID0gYXJnOwogCQlpbnQgaSA9IDA7Ci0JCQorCiAJCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKSB7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJCisKIAkJaWYoIGkgPCAwICkgewogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KLQkJCisKIAkJc3dpdGNoICh2Yy0+aWQgKSB7CiAJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IHsKIAkJCQlteGItPmN1cl9tdXRlID0gdmMtPnZhbHVlOwpAQCAtNjEwLDEyICs2MTQsMTIgQEAKIAkJKmlucHV0ID0gbXhiLT5jdXJfaW5wdXQ7CiAKIAkJREVCX0VFKCgiVklESU9DX0dfSU5QVVQgJWQuXG4iLCppbnB1dCkpOwotCQlyZXR1cm4gMDsJCQotCX0JCisJCXJldHVybiAwOworCX0KIAljYXNlIFZJRElPQ19TX0lOUFVUOgogCXsKIAkJaW50IGlucHV0ID0gKihpbnQgKilhcmc7Ci0JCXN0cnVjdAl0ZWE2NDE1Y19tdWx0aXBsZXggdm07CQorCQlzdHJ1Y3QJdGVhNjQxNWNfbXVsdGlwbGV4IHZtOwogCQlpbnQgaSA9IDA7CiAKIAkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLGlucHV0KSk7CkBAIC02MjMsMzQgKzYyNywzNCBAQAogCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IE1YQl9JTlBVVFMpIHsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCQorCiAJCS8qIGZpeG1lOiBsb2NrZSBkYXMgc2V0emVuIGRlcyBpbnB1dHMgbWl0IGhpbGZlIGRlcyBtdXRleGVzCi0JCWRvd24oJmRldi0+bG9jayk7CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJCXZpZGVvX211eChkZXYsKmkpOwotCQl1cCgmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCQkqLwotCQkJCQorCiAJCS8qIGZpeG1lOiBjaGVjayBpZiBzdHJlYW1pbmcgY2FwdHVyZQogCQlpZiAoIDAgIT0gZGV2LT5zdHJlYW1pbmcgKSB7CiAJCQlERUJfRCgoIlZJRElPQ19TX0lOUFVUIGlsbGVnYWwgd2hpbGUgc3RyZWFtaW5nLlxuIikpOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQogCQkqLwotCQkKKwogCQlteGItPmN1cl9pbnB1dCA9IGlucHV0OwotCQorCiAJCXNhYTcxNDZfc2V0X2hwc19zb3VyY2VfYW5kX3N5bmMoZGV2LCBpbnB1dF9wb3J0X3NlbGVjdGlvbltpbnB1dF0uaHBzX3NvdXJjZSwgaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zeW5jKTsKLQkJCisKIAkJLyogcHJlcGFyZSBzd2l0Y2hpbmcgb2YgdGVhNjQxNWMgYW5kIHNhYTcxMTFhOwogCQkgICBoYXZlIGEgbG9vayBhdCB0aGUgJ2JhY2tncm91bmQnLWZpbGUgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zICAqLwogCQlzd2l0Y2goIGlucHV0ICkgewotCQkJCisKIAkJCWNhc2UgVFVORVI6CiAJCQl7CiAJCQkJaSA9IDA7CiAJCQkJdm0uaW4gID0gMzsKIAkJCQl2bS5vdXQgPSAxNzsKLQkJCQkJCQkJCisKIAkJCWlmICggMCAhPSBteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YyxURUE2NDE1Q19TV0lUQ0gsICZ2bSkpIHsKIAkJCQkJcHJpbnRrKCJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzFcbiIpOwogCQkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTY1OCw3ICs2NjIsNyBAQAogCQkJCS8qIGNvbm5lY3QgdHVuZXItb3V0cHV0IGFsd2F5cyB0byBtdWx0aWNhYmxlICovCiAJCQkJdm0uaW4gID0gMzsKIAkJCQl2bS5vdXQgPSAxMzsKLQkJCQlicmVhazsJCQkJCisJCQkJYnJlYWs7CiAJCQl9CiAJCQljYXNlIEFVWDNfWUM6CiAJCQl7CkBAIC02OTksMTEgKzcwMywxMSBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCQkJCisKIAkJLyogc3dpdGNoIHZpZGVvIGluIHNhYTcxMTFhICovCiAJCWlmICggMCAhPSBteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSxERUNPREVSX1NFVF9JTlBVVCwgJmkpKSB7CiAJCQlwcmludGsoIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOwotCQl9CQkJCisJCX0KIAogCQkvKiBzd2l0Y2ggdGhlIGF1ZGlvLXNvdXJjZSBvbmx5IGlmIG5lY2Vzc2FyeSAqLwogCQlpZiggMCA9PSBteGItPmN1cl9tdXRlICkgewpAQCAtNzM0LDExICs3MzgsMTEgQEAKIAkJdC0+cmFuZ2VoaWdoID0gMTM2ODQ7CS8qIDg1NS4yNSBNSHogLyA2Mi41IGtIeiA9IDEzNjg0ICovCiAJCS8qIEZJWE1FOiBhZGQgdGhlIHJlYWwgc2lnbmFsIHN0cmVuZ3RoIGhlcmUgKi8KIAkJdC0+c2lnbmFsID0gMHhmZmZmOwotCQl0LT5hZmMgPSAwOwkJCisJCXQtPmFmYyA9IDA7CiAKIAkJbXhiLT50ZGE5ODQwLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZGE5ODQwLFREQTk4NDBfREVURUNULCAmYnl0ZSk7CiAJCXQtPmF1ZG1vZGUgPSBteGItPmN1cl9tb2RlOwotCQkKKwogCQlpZiggYnl0ZSA8IDAgKSB7CiAJCQl0LT5yeHN1YmNoYW5zICA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJCX0gZWxzZSB7CkBAIC03NzMsMTIgKzc3NywxMiBAQAogCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKIAkJaW50IHJlc3VsdCA9IDA7CiAJCWludCBieXRlID0gMDsKLQkJCisKIAkJaWYoIDAgIT0gdC0+aW5kZXggKSB7CiAJCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsdC0+aW5kZXgpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCisKIAkJc3dpdGNoKHQtPmF1ZG1vZGUpIHsKIAkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzogewogCQkJCW14Yi0+Y3VyX21vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwpAQCAtNzg2LDYgKzc5MCwxMiBAQAogCQkJCURFQl9EKCgiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9TVEVSRU9cbiIpKTsKIAkJCQlicmVhazsKIAkJCX0KKwkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOiB7CisJCQkJbXhiLT5jdXJfbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjsKKwkJCQlieXRlID0gVERBOTg0MF9TRVRfQk9USDsKKwkJCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzJcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOiB7CiAJCQkJbXhiLT5jdXJfbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKIAkJCQlieXRlID0gVERBOTg0MF9TRVRfTEFORzE7CkBAIC04MDksNyArODE5LDcgQEAKIAkJaWYoIDAgIT0gKHJlc3VsdCA9IG14Yi0+dGRhOTg0MC0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGRhOTg0MCwgVERBOTg0MF9TV0lUQ0gsICZieXRlKSkpIHsKIAkJCXByaW50aygiVklESU9DX1NfVFVORVIgZXJyb3IuIHJlc3VsdDolZCwgYnl0ZTolZFxuIixyZXN1bHQsYnl0ZSk7CiAJCX0KLQkJCQkKKwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CkBAIC04MzUsNyArODQ1LDcgQEAKIAogCQlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQkKKwogCQlpZigwICE9IG14Yi0+Y3VyX2lucHV0KSB7CiAJCQlERUJfRCgoIlZJRElPQ19TX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIixteGItPmN1cl9pbnB1dCkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC04NDQsNyArODU0LDcgQEAKIAkJbXhiLT5jdXJfZnJlcSA9ICpmOwogCQlERUJfRUUoKCJWSURJT0NfU19GUkVRVUVOQ1k6IGZyZXE6MHglMDh4LlxuIiwgbXhiLT5jdXJfZnJlcS5mcmVxdWVuY3kpKTsKIAotCQkvKiB0dW5lIGluIGRlc2lyZWQgZnJlcXVlbmN5ICovCQkJCisJCS8qIHR1bmUgaW4gZGVzaXJlZCBmcmVxdWVuY3kgKi8KIAkJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX0ZSRVFVRU5DWSwgJm14Yi0+Y3VyX2ZyZXEpOwogCiAJCS8qIGhhY2s6IGNoYW5naW5nIHRoZSBmcmVxdWVuY3kgc2hvdWxkIGludmFsaWRhdGUgdGhlIHZiaS1jb3VudGVyICg9PiBhbGV2dCkgKi8KQEAgLTg1NywxMiArODY3LDEyIEBACiAJY2FzZSBNWEJfU19BVURJT19DRDoKIAl7CiAJCWludCBpID0gKihpbnQqKWFyZzsKLQkJCQkKKwogCQlpZiggaSA8IDAgfHwgaSA+PSBNWEJfQVVESU9TICkgewogCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIixpKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQkKKwogCQlERUJfRUUoKCJNWEJfU19BVURJT19DRDogaTolZC5cbiIsaSkpOwogCiAJCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2NkW2ldWzBdKTsKQEAgLTg3MywxMiArODgzLDEyIEBACiAJY2FzZSBNWEJfU19BVURJT19MSU5FOgogCXsKIAkJaW50IGkgPSAqKGludCopYXJnOwotCQkJCQorCiAJCWlmKCBpIDwgMCB8fCBpID49IE1YQl9BVURJT1MgKSB7CiAJCQlERUJfRCgoImlsbGVnYWwgYXJndW1lbnQgdG8gTVhCX1NfQVVESU9fTElORTogaTolZC5cbiIsaSkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJCisKIAkJREVCX0VFKCgiTVhCX1NfQVVESU9fTElORTogaTolZC5cbiIsaSkpOwogCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lW2ldWzBdKTsKIAkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMixURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVtpXVsxXSk7CkBAIC04OTAsMTMgKzkwMCwxMyBAQAogCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKIAogCQlpZiggYS0+aW5kZXggPCAwIHx8IGEtPmluZGV4ID4gTVhCX0lOUFVUUyApIHsKLQkgCQlERUJfRCgoIlZJRElPQ19HX0FVRElPICVkIG91dCBvZiByYW5nZS5cbiIsYS0+aW5kZXgpKTsKKwkJCURFQl9EKCgiVklESU9DX0dfQVVESU8gJWQgb3V0IG9mIHJhbmdlLlxuIixhLT5pbmRleCkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJCi0gCQlERUJfRUUoKCJWSURJT0NfR19BVURJTyAlZC5cbiIsYS0+aW5kZXgpKTsKKworCQlERUJfRUUoKCJWSURJT0NfR19BVURJTyAlZC5cbiIsYS0+aW5kZXgpKTsKIAkJbWVtY3B5KGEsICZteGJfYXVkaW9zW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvKSk7Ci0JCQorCiAJCXJldHVybiAwOwogCX0KIAljYXNlIFZJRElPQ19TX0FVRElPOgpAQCAtOTA0LDcgKzkxNCw3IEBACiAJCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOwogCQlERUJfRCgoIlZJRElPQ19TX0FVRElPICVkLlxuIixhLT5pbmRleCkpOwogCQlyZXR1cm4gMDsKLQl9CQorCX0KIAlkZWZhdWx0OgogLyoKIAkJREVCMihwcmludGsoImRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwpAQCAtOTIxLDE3ICs5MzEsMjEgQEAKIAlpbnQgb25lID0gMTsKIAogCWlmKFY0TDJfU1REX1BBTF9JID09IHN0ZC0+aWQgKSB7CisJCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX1BBTF9JOwogCQlERUJfRCgoIlZJRElPQ19TX1NURDogc2V0dGluZyBteGIgZm9yIFBBTF9JLlxuIikpOwogCQkvKiBzZXQgdGhlIDcxNDYgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwotICAgICAgCQlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDAwNDA0MDUwKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIEdQSU9fQ1RSTCwgMHgwMDQwNDA1MCk7CiAJCS8qIHVuc2V0IHRoZSA3MTExIGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KIAkJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsREVDT0RFUl9TRVRfR1BJTywgJnplcm8pOworCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfU1RELCAmc3RkKTsKIAl9IGVsc2UgeworCQl2NGwyX3N0ZF9pZCBzdGQgPSBWNEwyX1NURF9QQUxfQkc7CiAJCURFQl9EKCgiVklESU9DX1NfU1REOiBzZXR0aW5nIG14YiBmb3IgUEFML05UU0MvU0VDQU0uXG4iKSk7CiAJCS8qIHNldCB0aGUgNzE0NiBncGlvIHJlZ2lzdGVyIC0tIEkgZG9uJ3Qga25vdyB3aGF0IHRoaXMgZG9lcyBleGFjdGx5ICovCi0gICAgICAJCXNhYTcxNDZfd3JpdGUoZGV2LCBHUElPX0NUUkwsIDB4MDA0MDQwNTApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDAwNDA0MDUwKTsKIAkJLyogc2V0IHRoZSA3MTExIGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KIAkJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsREVDT0RFUl9TRVRfR1BJTywgJm9uZSk7CisJCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBWSURJT0NfU19TVEQsICZzdGQpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk2MSw4ICs5NzUsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSBteGIgPSB7Ci0gICAgICAgIC5leHRfcHJpdiA9ICJNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCIsCi0gICAgICAgIC5leHQgPSAmZXh0ZW5zaW9uLAorCS5leHRfcHJpdiA9ICJNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCIsCisJLmV4dCA9ICZleHRlbnNpb24sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RibFtdID0gewpAQCAtOTg0LDcgKzk5OCw3IEBACiAJLmNhcGFiaWxpdGllcwk9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfVkJJX0NBUFRVUkUsCiAJLnN0ZHMJCT0gJnN0YW5kYXJkWzBdLAogCS5udW1fc3Rkcwk9IHNpemVvZihzdGFuZGFyZCkvc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkKSwKLQkuc3RkX2NhbGxiYWNrCT0gJnN0ZF9jYWxsYmFjaywgCisJLnN0ZF9jYWxsYmFjawk9ICZzdGRfY2FsbGJhY2ssCiAJLmlvY3RscwkJPSAmaW9jdGxzWzBdLAogCS5pb2N0bAkJPSBteGJfaW9jdGwsCiB9OwpAQCAtOTkyLDcgKzEwMDYsNyBAQAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBleHRlbnNpb24gPSB7CiAJLm5hbWUJCT0gTVhCX0lERU5USUZJRVIsCiAJLmZsYWdzCQk9IFNBQTcxNDZfVVNFX0kyQ19JUlEsCi0JCisKIAkucGNpX3RibAk9ICZwY2lfdGJsWzBdLAogCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCiAKQEAgLTEwMDIsNyArMTAxNiw3IEBACiAKIAkuaXJxX21hc2sJPSAwLAogCS5pcnFfZnVuYwk9IE5VTEwsCi19OwkKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IG14Yl9pbml0X21vZHVsZSh2b2lkKQogewpAQCAtMTAxMCw3ICsxMDI0LDcgQEAKIAkJREVCX1MoKCJmYWlsZWQgdG8gcmVnaXN0ZXIgZXh0ZW5zaW9uLlxuIikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmgKaW5kZXggMjMzMmVkNS4uNDAwYTU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9teGIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5oCkBAIC0zOCw1ICszOCw1IEBACiAJCS5uYW1lCT0gIkNELVJPTSAoWDEwKSIsCiAJCS5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPLAogCX0KLX07CQorfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKaW5kZXggNTFlOWNjMC4uZmRjOGUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiBCYXNlZCBvbiB0aGUgTGludXggQ1BpQSBkcml2ZXIgd3JpdHRlbiBieSBQZXRlciBQcmVnbGVyLAogICogU2NvdHQgSi4gQmVydGluIGFuZCBKb2hhbm5lcyBFcmRmZWx0LgotICogCisgKgogICogUGxlYXNlIHNlZSB0aGUgZmlsZTogRG9jdW1lbnRhdGlvbi91c2Ivb3Y1MTEudHh0CiAgKiBhbmQgdGhlIHdlYnNpdGUgYXQ6ICBodHRwOi8vYWxwaGEuZHluZG5zLm9yZy9vdjUxMQogICogZm9yIG1vcmUgaW5mby4KQEAgLTM2NSwxNCArMzY1LDE0IEBACiAKIAlQREVCVUcoNSwgIjB4JTAyWDoweCUwMlgiLCByZWcsIHZhbHVlKTsKIAotCWRvd24oJm92LT5jYnVmX2xvY2spOworCW11dGV4X2xvY2soJm92LT5jYnVmX2xvY2spOwogCW92LT5jYnVmWzBdID0gdmFsdWU7CiAJcmMgPSB1c2JfY29udHJvbF9tc2cob3YtPmRldiwKIAkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKG92LT5kZXYsIDApLAogCQkJICAgICAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpPzE6MiAvKiBSRUdfSU8gKi8sCiAJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkgICAgIDAsIChfX3UxNilyZWcsICZvdi0+Y2J1ZlswXSwgMSwgMTAwMCk7Ci0JdXAoJm92LT5jYnVmX2xvY2spOworCW11dGV4X3VubG9jaygmb3YtPmNidWZfbG9jayk7CiAKIAlpZiAocmMgPCAwKQogCQllcnIoInJlZyB3cml0ZTogZXJyb3IgJWQ6ICVzIiwgcmMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByYykpOwpAQCAtMzg3LDcgKzM4Nyw3IEBACiB7CiAJaW50IHJjOwogCi0JZG93bigmb3YtPmNidWZfbG9jayk7CisJbXV0ZXhfbG9jaygmb3YtPmNidWZfbG9jayk7CiAJcmMgPSB1c2JfY29udHJvbF9tc2cob3YtPmRldiwKIAkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKG92LT5kZXYsIDApLAogCQkJICAgICAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpPzE6MyAvKiBSRUdfSU8gKi8sCkBAIC00MDEsNyArNDAxLDcgQEAKIAkJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCBvdi0+Y2J1ZlswXSk7CiAJfQogCi0JdXAoJm92LT5jYnVmX2xvY2spOworCW11dGV4X3VubG9jaygmb3YtPmNidWZfbG9jayk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC00MzMsNyArNDMzLDcgQEAKIAlyZXR1cm4gKHJlZ193KG92LCByZWcsIG5ld3ZhbCkpOwogfQogCi0vKiAKKy8qCiAgKiBXcml0ZXMgbXVsdGlwbGUgKG4pIGJ5dGUgdmFsdWUgdG8gYSBzaW5nbGUgcmVnaXN0ZXIuIE9ubHkgdmFsaWQgd2l0aCBjZXJ0YWluCiAgKiByZWdpc3RlcnMgKDB4MzAgYW5kIDB4YzQgLSAweGNlKS4KICAqLwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAKIAlQREVCVUcoNSwgIjB4JTAyWDolN2QsIG49JWQiLCByZWcsIHZhbCwgbik7CiAKLQlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKwltdXRleF9sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKIAogCSooKF9fbGUzMiAqKW92LT5jYnVmKSA9IF9fY3B1X3RvX2xlMzIodmFsKTsKIApAQCAtNDUzLDcgKzQ1Myw3IEBACiAJCQkgICAgIDEgLyogUkVHX0lPICovLAogCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJICAgICAwLCAoX191MTYpcmVnLCBvdi0+Y2J1ZiwgbiwgMTAwMCk7Ci0JdXAoJm92LT5jYnVmX2xvY2spOworCW11dGV4X3VubG9jaygmb3YtPmNidWZfbG9jayk7CiAKIAlpZiAocmMgPCAwKQogCQllcnIoInJlZyB3cml0ZSBtdWx0aXBsZTogZXJyb3IgJWQ6ICVzIiwgcmMsCkBAIC02MjksNyArNjI5LDcgQEAKIAkJLyogUmV0cnkgdW50aWwgaWRsZSAqLwogCQlkbwogCQkJcmMgPSByZWdfcihvdiwgUjUxMV9JMkNfQ1RMKTsKLQkJd2hpbGUgKHJjID4gMCAmJiAoKHJjJjEpID09IDApKTsgCisJCXdoaWxlIChyYyA+IDAgJiYgKChyYyYxKSA9PSAwKSk7CiAJCWlmIChyYyA8IDApCiAJCQlicmVhazsKIApAQCAtNzY4LDE0ICs3NjgsMTQgQEAKIHsKIAlpbnQgcmM7CiAKLQlkb3duKCZvdi0+aTJjX2xvY2spOworCW11dGV4X2xvY2soJm92LT5pMmNfbG9jayk7CiAKIAlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCiAJCXJjID0gb3Y1MThfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7CiAJZWxzZQogCQlyYyA9IG92NTExX2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOwogCi0JdXAoJm92LT5pMmNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvdi0+aTJjX2xvY2spOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtNzg1LDE0ICs3ODUsMTQgQEAKIHsKIAlpbnQgcmM7CiAKLQlkb3duKCZvdi0+aTJjX2xvY2spOworCW11dGV4X2xvY2soJm92LT5pMmNfbG9jayk7CiAKIAlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCiAJCXJjID0gb3Y1MThfaTJjX3dyaXRlX2ludGVybmFsKG92LCByZWcsIHZhbHVlKTsKIAllbHNlCiAJCXJjID0gb3Y1MTFfaTJjX3dyaXRlX2ludGVybmFsKG92LCByZWcsIHZhbHVlKTsKIAotCXVwKCZvdi0+aTJjX2xvY2spOworCW11dGV4X3VubG9jaygmb3YtPmkyY19sb2NrKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTg0Miw5ICs4NDIsOSBAQAogewogCWludCByYzsKIAotCWRvd24oJm92LT5pMmNfbG9jayk7CisJbXV0ZXhfbG9jaygmb3YtPmkyY19sb2NrKTsKIAlyYyA9IG92NTF4X2kyY193cml0ZV9tYXNrX2ludGVybmFsKG92LCByZWcsIHZhbHVlLCBtYXNrKTsKLQl1cCgmb3YtPmkyY19sb2NrKTsKKwltdXRleF91bmxvY2soJm92LT5pMmNfbG9jayk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC04ODAsNyArODgwLDcgQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JZG93bigmb3YtPmkyY19sb2NrKTsKKwltdXRleF9sb2NrKCZvdi0+aTJjX2xvY2spOwogCiAJLyogU2V0IG5ldyBzbGF2ZSBJRHMgKi8KIAlyYyA9IGkyY19zZXRfc2xhdmVfaW50ZXJuYWwob3YsIHNsYXZlKTsKQEAgLTg5NCw3ICs4OTQsNyBAQAogCWlmIChpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBvdi0+cHJpbWFyeV9pMmNfc2xhdmUpIDwgMCkKIAkJZXJyKCJDb3VsZG4ndCByZXN0b3JlIHByaW1hcnkgSTJDIHNsYXZlIik7CiAKLQl1cCgmb3YtPmkyY19sb2NrKTsKKwltdXRleF91bmxvY2soJm92LT5pMmNfbG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC05MDYsNyArOTA2LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlkb3duKCZvdi0+aTJjX2xvY2spOworCW11dGV4X2xvY2soJm92LT5pMmNfbG9jayk7CiAKIAkvKiBTZXQgbmV3IHNsYXZlIElEcyAqLwogCXJjID0gaTJjX3NldF9zbGF2ZV9pbnRlcm5hbChvdiwgc2xhdmUpOwpAQCAtOTIzLDcgKzkyMyw3IEBACiAJaWYgKGkyY19zZXRfc2xhdmVfaW50ZXJuYWwob3YsIG92LT5wcmltYXJ5X2kyY19zbGF2ZSkgPCAwKQogCQllcnIoIkNvdWxkbid0IHJlc3RvcmUgcHJpbWFyeSBJMkMgc2xhdmUiKTsKIAotCXVwKCZvdi0+aTJjX2xvY2spOworCW11dGV4X3VubG9jaygmb3YtPmkyY19sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTkzMyw3ICs5MzMsNyBAQAogewogCWludCByYzsKIAotCWRvd24oJm92LT5pMmNfbG9jayk7CisJbXV0ZXhfbG9jaygmb3YtPmkyY19sb2NrKTsKIAogCXJjID0gaTJjX3NldF9zbGF2ZV9pbnRlcm5hbChvdiwgc2lkKTsKIAlpZiAocmMgPCAwKQpAQCAtOTQyLDcgKzk0Miw3IEBACiAJLy8gRklYTUU6IElzIHRoaXMgYWN0dWFsbHkgbmVjZXNzYXJ5PwogCXJjID0gb3Y1MXhfcmVzZXQob3YsIE9WNTExX1JFU0VUX05PUkVHUyk7CiBvdXQ6Ci0JdXAoJm92LT5pMmNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvdi0+aTJjX2xvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtMTc1Miw3ICsxNzUyLDcgQEAKIAlvdi0+d2hpdGVuZXNzID0gcC0+d2hpdGVuZXNzOwogCiAJLyogRG9uJ3QgcmV0dXJuIGVycm9yIGlmIGEgc2V0dGluZyBpcyB1bnN1cHBvcnRlZCwgb3IgcmVzdCBvZiBzZXR0aW5ncwotICAgICAgICAgKiB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KKwkgKiB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KIAogCXJjID0gc2Vuc29yX3NldF9jb250cmFzdChvdiwgcC0+Y29udHJhc3QpOwogCWlmIChGQVRBTF9FUlJPUihyYykpCkBAIC0xNzgxLDcgKzE3ODEsNyBAQAogCVBERUJVRyg0LCAic2Vuc29yX2dldF9waWN0dXJlIik7CiAKIAkvKiBEb24ndCByZXR1cm4gZXJyb3IgaWYgYSBzZXR0aW5nIGlzIHVuc3VwcG9ydGVkLCBvciByZXN0IG9mIHNldHRpbmdzCi0gICAgICAgICAqIHdpbGwgbm90IGJlIHBlcmZvcm1lZCAqLworCSAqIHdpbGwgbm90IGJlIHBlcmZvcm1lZCAqLwogCiAJcmMgPSBzZW5zb3JfZ2V0X2NvbnRyYXN0KG92LCAmKHAtPmNvbnRyYXN0KSk7CiAJaWYgKEZBVEFMX0VSUk9SKHJjKSkKQEAgLTIyNTEsNyArMjI1MSw3IEBACiAKIAkvKioqKioqKiogQ2xvY2sgcHJvZ3JhbW1pbmcgKioqKioqKiovCiAKLQkvKiBUaGUgT1Y2NjIwIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuIFRoaXMgcHJldmVudHMgdGhlIAorCS8qIFRoZSBPVjY2MjAgbmVlZHMgc3BlY2lhbCBoYW5kbGluZy4gVGhpcyBwcmV2ZW50cyB0aGUKIAkgKiBzZXZlcmUgYmFuZGluZyB0aGF0IG5vcm1hbGx5IG9jY3VycyAqLwogCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjY2MjAgfHwgb3YtPnNlbnNvciA9PSBTRU5fT1Y2NjMwKQogCXsKQEAgLTIzMjYsNyArMjMyNiw3IEBACiAJCSAgICAgaW50IHN1Yl9mbGFnKQogewogCWludCByZXQ7Ci0JaW50IGh3c2Jhc2UsIGh3ZWJhc2UsIHZ3c2Jhc2UsIHZ3ZWJhc2UsIGh3c2l6ZSwgdndzaXplOyAKKwlpbnQgaHdzYmFzZSwgaHdlYmFzZSwgdndzYmFzZSwgdndlYmFzZSwgaHdzaXplLCB2d3NpemU7CiAJaW50IGhvZmZzZXQsIHZvZmZzZXQsIGh3c2NhbGUgPSAwLCB2d3NjYWxlID0gMDsKIAogCS8qIFRoZSBkaWZmZXJlbnQgc2Vuc29yIElDcyBoYW5kbGUgc2V0dGluZyB1cCBvZiB3aW5kb3cgZGlmZmVyZW50bHkuCkBAIC0yNTc1LDcgKzI1NzUsNyBAQAogCQkvKiBPVjUxOCBuZWVkcyBVIGFuZCBWIHN3YXBwZWQgKi8KIAkJaTJjX3dfbWFzayhvdiwgMHgxNSwgMHgwMCwgMHgwMSk7CiAKLQkgCWlmIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSkgeworCQlpZiAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpIHsKIAkJCS8qIFNldCAxNi1iaXQgaW5wdXQgZm9ybWF0IChVViBkYXRhIGFyZSBpZ25vcmVkKSAqLwogCQkJcmVnX3dfbWFzayhvdiwgMHgyMCwgMHgwMCwgMHgwOCk7CiAKQEAgLTI4OTQsNyArMjg5NCw3IEBACiAgKiAgICAgICAgICAgLi4uICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgIC4uLgogICogICAgIDU2IDU3IC4uLiA2MyAgIDEyMCAxMjEgLi4uIDEyNyAgICAgICAgMjQ4IDI0OSAuLi4gMjU1CiAgKgotICovIAorICovCiBzdGF0aWMgdm9pZAogeXV2NDAwcmF3X3RvX3l1djQwMHAoc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSwKIAkJICAgICB1bnNpZ25lZCBjaGFyICpwSW4wLCB1bnNpZ25lZCBjaGFyICpwT3V0MCkKQEAgLTI5MjMsNyArMjkyMyw3IEBACiAgKgogICogICAgICAwICAxIC4uLiAgNwogICogICAgICA4ICA5IC4uLiAxNQotICogICAgICAgICAgIC4uLiAgIAorICogICAgICAgICAgIC4uLgogICogICAgIDU2IDU3IC4uLiA2MwogICoKICAqIFUgYW5kIFYgYXJlIHNoaXBwZWQgYXQgaGFsZiByZXNvbHV0aW9uICgxIFUsViBzYW1wbGUgLT4gb25lIDJ4MiBibG9jaykuCkBAIC0zMDM0LDcgKzMwMzQsNyBAQAogICovCiBzdGF0aWMgdm9pZAogZGVpbnRlcmxhY2Uoc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSwgaW50IHJhd2Zvcm1hdCwKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBJbjAsIHVuc2lnbmVkIGNoYXIgKnBPdXQwKQorCSAgICB1bnNpZ25lZCBjaGFyICpwSW4wLCB1bnNpZ25lZCBjaGFyICpwT3V0MCkKIHsKIAljb25zdCBpbnQgZmllbGRoZWlnaHQgPSBmcmFtZS0+cmF3aGVpZ2h0IC8gMjsKIAljb25zdCBpbnQgZmllbGRwaXggPSBmaWVsZGhlaWdodCAqIGZyYW1lLT5yYXd3aWR0aDsKQEAgLTMxMTIsNyArMzExMiw3IEBACiAJCQkJCQkgICAgIGZyYW1lLT50ZW1wZGF0YSk7CiAKIAkJCWRlaW50ZXJsYWNlKGZyYW1lLCBSQVdGTVRfWVVWNDAwLCBmcmFtZS0+dGVtcGRhdGEsCi0JCQkgICAgICAgICAgICBmcmFtZS0+ZGF0YSk7CisJCQkJICAgIGZyYW1lLT5kYXRhKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChmcmFtZS0+Y29tcHJlc3NlZCkKIAkJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCkBAIC0zMTM2LDcgKzMxMzYsNyBAQAogCQkJCQkgICAgIGZyYW1lLT50ZW1wZGF0YSk7CiAKIAkJZGVpbnRlcmxhY2UoZnJhbWUsIFJBV0ZNVF9ZVVY0MjAsIGZyYW1lLT50ZW1wZGF0YSwKLQkJICAgICAgICAgICAgZnJhbWUtPmRhdGEpOworCQkJICAgIGZyYW1lLT5kYXRhKTsKIAl9IGVsc2UgewogCQlpZiAoZnJhbWUtPmNvbXByZXNzZWQpCiAJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsIGZyYW1lLT5kYXRhKTsKQEAgLTMyMjYsNyArMzIyNiw3IEBACiAJCWZyYW1lLT5yYXd3aWR0aCA9ICgoaW50KShpbls5XSkgKyAxKSAqIDg7CiAJCWZyYW1lLT5yYXdoZWlnaHQgPSAoKGludCkoaW5bMTBdKSArIDEpICogODsKIAotIAkJUERFQlVHKDQsICJGcmFtZSBlbmQsIGZyYW1lPSVkLCBwbnVtPSVkLCB3PSVkLCBoPSVkLCByZWN2ZD0lZCIsCisJCVBERUJVRyg0LCAiRnJhbWUgZW5kLCBmcmFtZT0lZCwgcG51bT0lZCwgdz0lZCwgaD0lZCwgcmVjdmQ9JWQiLAogCQkJb3YtPmN1cmZyYW1lLCBwbnVtLCBmcmFtZS0+cmF3d2lkdGgsIGZyYW1lLT5yYXdoZWlnaHQsCiAJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQpOwogCkBAIC0zNTI3LDEwICszNTI3LDEwIEBACiAJCXJldHVybjsKIAl9CiAKLSAgICAgICAgaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKLSAgICAgICAgICAgICAgICBQREVCVUcoNCwgIlVSQiB1bmxpbmtlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8IHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUKSB7CisJCVBERUJVRyg0LCAiVVJCIHVubGlua2VkIik7CisJCXJldHVybjsKKwl9CiAKIAlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTICYmIHVyYi0+c3RhdHVzICE9IDApIHsKIAkJZXJyKCJFUlJPUjogdXJiLT5zdGF0dXM9JWQ6ICVzIiwgdXJiLT5zdGF0dXMsCkBAIC0zODMyLDcgKzM4MzIsNyBAQAogCWNvbnN0IGludCByYXdfYnVmc2l6ZSA9IE9WNTExX05VTUZSQU1FUyAqIE1BWF9SQVdfREFUQV9TSVpFKHcsIGgpOwogCiAJUERFQlVHKDQsICJlbnRlcmVkIik7Ci0JZG93bigmb3YtPmJ1Zl9sb2NrKTsKKwltdXRleF9sb2NrKCZvdi0+YnVmX2xvY2spOwogCiAJaWYgKG92LT5idWZfc3RhdGUgPT0gQlVGX0FMTE9DQVRFRCkKIAkJZ290byBvdXQ7CkBAIC0zODc5LDEyICszODc5LDEyIEBACiAKIAlvdi0+YnVmX3N0YXRlID0gQlVGX0FMTE9DQVRFRDsKIG91dDoKLQl1cCgmb3YtPmJ1Zl9sb2NrKTsKKwltdXRleF91bmxvY2soJm92LT5idWZfbG9jayk7CiAJUERFQlVHKDQsICJsZWF2aW5nIik7CiAJcmV0dXJuIDA7CiBlcnJvcjoKIAlvdjUxeF9kb19kZWFsbG9jKG92KTsKLQl1cCgmb3YtPmJ1Zl9sb2NrKTsKKwltdXRleF91bmxvY2soJm92LT5idWZfbG9jayk7CiAJUERFQlVHKDQsICJlcnJvcmVkIik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0zODkzLDkgKzM4OTMsOSBAQAogb3Y1MXhfZGVhbGxvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKIHsKIAlQREVCVUcoNCwgImVudGVyZWQiKTsKLQlkb3duKCZvdi0+YnVmX2xvY2spOworCW11dGV4X2xvY2soJm92LT5idWZfbG9jayk7CiAJb3Y1MXhfZG9fZGVhbGxvYyhvdik7Ci0JdXAoJm92LT5idWZfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvdi0+YnVmX2xvY2spOwogCVBERUJVRyg0LCAibGVhdmluZyIpOwogfQogCkBAIC0zOTE0LDcgKzM5MTQsNyBAQAogCiAJUERFQlVHKDQsICJvcGVuaW5nIik7CiAKLQlkb3duKCZvdi0+bG9jayk7CisJbXV0ZXhfbG9jaygmb3YtPmxvY2spOwogCiAJZXJyID0gLUVCVVNZOwogCWlmIChvdi0+dXNlcikKQEAgLTM5NTgsNyArMzk1OCw3IEBACiAJCW92NTF4X2xlZF9jb250cm9sKG92LCAxKTsKIAogb3V0OgotCXVwKCZvdi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvdi0+bG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzk3MCw3ICszOTcwLDcgQEAKIAogCVBERUJVRyg0LCAib3Y1MTFfY2xvc2UiKTsKIAotCWRvd24oJm92LT5sb2NrKTsKKwltdXRleF9sb2NrKCZvdi0+bG9jayk7CiAKIAlvdi0+dXNlci0tOwogCW92NTF4X3N0b3BfaXNvYyhvdik7CkBAIC0zOTgxLDE1ICszOTgxLDE1IEBACiAJaWYgKG92LT5kZXYpCiAJCW92NTF4X2RlYWxsb2Mob3YpOwogCi0JdXAoJm92LT5sb2NrKTsKKwltdXRleF91bmxvY2soJm92LT5sb2NrKTsKIAogCS8qIERldmljZSB1bnBsdWdnZWQgd2hpbGUgb3Blbi4gT25seSBhIG1pbmltdW0gb2YgdW5yZWdpc3RyYXRpb24gaXMgZG9uZQogCSAqIGhlcmU7IHRoZSBkaXNjb25uZWN0IGNhbGxiYWNrIGFscmVhZHkgZGlkIHRoZSByZXN0LiAqLwogCWlmICghb3YtPmRldikgewotCQlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmb3YtPmNidWZfbG9jayk7CiAJCWtmcmVlKG92LT5jYnVmKTsKIAkJb3YtPmNidWYgPSBOVUxMOwotCQl1cCgmb3YtPmNidWZfbG9jayk7CisJCW11dGV4X3VubG9jaygmb3YtPmNidWZfbG9jayk7CiAKIAkJb3Y1MXhfZGVhbGxvYyhvdik7CiAJCWtmcmVlKG92KTsKQEAgLTQ0NDksMTIgKzQ0NDksMTIgQEAKIAlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCWludCByYzsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJm92LT5sb2NrKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCiAJCXJldHVybiAtRUlOVFI7CiAKIAlyYyA9IHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgb3Y1MXhfdjRsMV9pb2N0bF9pbnRlcm5hbCk7CiAKLQl1cCgmb3YtPmxvY2spOworCW11dGV4X3VubG9jaygmb3YtPmxvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtNDQ2OCw3ICs0NDY4LDcgQEAKIAlpbnQgaSwgcmMgPSAwLCBmcm14ID0gLTE7CiAJc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJm92LT5sb2NrKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCiAJCXJldHVybiAtRUlOVFI7CiAKIAlQREVCVUcoNCwgIiVsZCBieXRlcywgbm9ibG9jaz0lZCIsIGNvdW50LCBub2Jsb2NrKTsKQEAgLTQ2MDQsMTEgKzQ2MDQsMTEgQEAKIAogCVBERUJVRyg0LCAicmVhZCBmaW5pc2hlZCwgcmV0dXJuaW5nICVsZCAoc3dlZXQpIiwgY291bnQpOwogCi0JdXAoJm92LT5sb2NrKTsKKwltdXRleF91bmxvY2soJm92LT5sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiAKIGVycm9yOgotCXVwKCZvdi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZvdi0+bG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC00NjI3LDE4ICs0NjI3LDE4IEBACiAJUERFQlVHKDQsICJtbWFwOiAlbGQgKCVsWCkgYnl0ZXMiLCBzaXplLCBzaXplKTsKIAogCWlmIChzaXplID4gKCgoT1Y1MTFfTlVNRlJBTUVTCi0JICAgICAgICAgICAgICAqIE1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KQotCSAgICAgICAgICAgICAgKyBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpKSkKKwkJICAgICAgKiBNQVhfREFUQV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCkKKwkJICAgICAgKyBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmb3YtPmxvY2spKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJcG9zID0gKHVuc2lnbmVkIGxvbmcpb3YtPmZidWY7CiAJd2hpbGUgKHNpemUgPiAwKSB7CiAJCXBhZ2UgPSB2bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7CiAJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGFnZSwgUEFHRV9TSVpFLCBQQUdFX1NIQVJFRCkpIHsKLQkJCXVwKCZvdi0+bG9jayk7CisJCQltdXRleF91bmxvY2soJm92LT5sb2NrKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJCXN0YXJ0ICs9IFBBR0VfU0laRTsKQEAgLTQ2NDksNyArNDY0OSw3IEBACiAJCQlzaXplID0gMDsKIAl9CiAKLQl1cCgmb3YtPmxvY2spOworCW11dGV4X3VubG9jaygmb3YtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC01MDYyLDcgKzUwNjIsNyBAQAogfQogCiAvKiBUaGlzIGluaXRpYWxpemVzIHRoZSBLUzAxMjcgYW5kIEtTMDEyN0IgdmlkZW8gZGVjb2RlcnMuICovCi1zdGF0aWMgaW50IAorc3RhdGljIGludAoga3MwMTI3X2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKIHsKIAlpbnQgcmM7CkBAIC01MTkzLDcgKzUxOTMsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAkvKiBEZXRlY3QgdmVyc2lvbiBvZiBkZWNvZGVyLiBUaGlzIG11c3QgYmUgZG9uZSBhZnRlciB3cml0aW5nIHRoZQotICAgICAgICAgKiBpbml0aWFsIHJlZ3Mgb3IgdGhlIGRlY29kZXIgd2lsbCBsb2NrIHVwLiAqLworCSAqIGluaXRpYWwgcmVncyBvciB0aGUgZGVjb2RlciB3aWxsIGxvY2sgdXAuICovCiAJcmMgPSBpMmNfcihvdiwgMHgwMCk7CiAKIAlpZiAocmMgPCAwKSB7CkBAIC01MjE2LDEzICs1MjE2LDEzIEBACiB9CiAKIC8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WNTExL09WNTExKyBhbmQgdGhlIHNlbnNvciAqLwotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIG92NTExX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKIHsKIAlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNJbml0NTExW10gPSB7CiAJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4N2YgfSwKLQkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4MDEgfSwKLQkgCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4N2YgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHgwMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDdmIH0sCiAJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4MDEgfSwKIAkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHgzZiB9LAogCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX0lOSVQsCQkweDAxIH0sCkBAIC01MjY5LDcgKzUyNjksNyBAQAogCQllcnIoIlBsZWFzZSBub3RpZnkgIiBFTUFJTCAiIG9mIHRoZSBuYW1lLCIpOwogCQllcnIoIm1hbnVmYWN0dXJlciwgbW9kZWwsIGFuZCB0aGlzIG51bWJlciBvZiB5b3VyIGNhbWVyYS4iKTsKIAkJZXJyKCJBbHNvIGluY2x1ZGUgdGhlIG91dHB1dCBvZiB0aGUgZGV0ZWN0aW9uIHByb2Nlc3MuIik7Ci0JfSAKKwl9CiAKIAlpZiAob3YtPmN1c3RvbWlkID09IDcwKQkJLyogVVNCIExpZmUgVFYgKFBBTC9TRUNBTSkgKi8KIAkJb3YtPnBhbCA9IDE7CkBAIC01MzM2LDE3ICs1MzM2LDE3IEBACiAKIAkJCQkJaWYgKGkyY193KG92LCAweDEwLCAweDAwKSA8IDApIHsKIAkJCQkJCWVycigiQ2FuJ3QgZGV0ZXJtaW5lIHNlbnNvciBzbGF2ZSBJRHMiKTsKLQkJIAkJCQlnb3RvIGVycm9yOworCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWlmIChrczAxMjdfY29uZmlndXJlKG92KSA8IDApIHsKIAkJCQkJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgS1MwMTI3Iik7Ci0JIAkJCQkJCWdvdG8gZXJyb3I7CisJCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0gZWxzZSB7CiAJCQkJCWlmIChzYWE3MTExYV9jb25maWd1cmUob3YpIDwgMCkgewogCQkJCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIFNBQTcxMTFBIik7Ci0JIAkJCQkJZ290byBlcnJvcjsKKwkJCQkJCWdvdG8gZXJyb3I7CiAJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtNTM1NiwxMyArNTM1NiwxMyBAQAogCQl9IGVsc2UgewogCQkJaWYgKG92Nnh4MF9jb25maWd1cmUob3YpIDwgMCkgewogCQkJCWVycigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBPVjZ4eDAiKTsKLSAJCQkJZ290byBlcnJvcjsKKwkJCQlnb3RvIGVycm9yOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKG92N3h4MF9jb25maWd1cmUob3YpIDwgMCkgewogCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIE9WN3h4MCIpOwotCSAJCWdvdG8gZXJyb3I7CisJCQlnb3RvIGVycm9yOwogCQl9CiAJfQogCkBAIC01MzgxLDEyICs1MzgxLDEyIEBACiAJLyogRm9yIDUxOCBhbmQgNTE4KyAqLwogCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc0luaXQ1MThbXSA9IHsKIAkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHg0MCB9LAotCSAJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHhlMSB9LAotCSAJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHgzZSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX0lOSVQsCQkweGUxIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4M2UgfSwKIAkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHhlMSB9LAogCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDAwIH0sCiAJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfSU5JVCwJCTB4ZTEgfSwKLQkJeyBPVjUxMV9SRUdfQlVTLCAweDQ2LAkJCTB4MDAgfSwgCisJCXsgT1Y1MTFfUkVHX0JVUywgMHg0NiwJCQkweDAwIH0sCiAJCXsgT1Y1MTFfUkVHX0JVUywgMHg1ZCwJCQkweDAzIH0sCiAJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMH0sCiAJfTsKQEAgLTU1MTcsNyArNTUxNyw3IEBACiAKIAkJCWlmIChpbml0X292X3NlbnNvcihvdikgPCAwKSB7CiAJCQkJZXJyKCJDYW4ndCBkZXRlcm1pbmUgc2Vuc29yIHNsYXZlIElEcyIpOwotIAkJCQlnb3RvIGVycm9yOworCQkJCWdvdG8gZXJyb3I7CiAJCQl9IGVsc2UgewogCQkJCWVycigiRGV0ZWN0ZWQgdW5zdXBwb3J0ZWQgT1Y4eHgwIHNlbnNvciIpOwogCQkJCWdvdG8gZXJyb3I7CkBAIC01NTI1LDEzICs1NTI1LDEzIEBACiAJCX0gZWxzZSB7CiAJCQlpZiAob3Y2eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7CiAJCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIE9WNnh4MCIpOwotIAkJCQlnb3RvIGVycm9yOworCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlpZiAob3Y3eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7CiAJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y3eHgwIik7Ci0JIAkJZ290byBlcnJvcjsKKwkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9CiAKQEAgLTU1NjQsMjggKzU1NjQsMjggQEAKIHsKIAlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgb3YtPmN1c3RvbWlkKTsKLX0gCit9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoY3VzdG9tX2lkLCBTX0lSVUdPLCBzaG93X2N1c3RvbV9pZCwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfbW9kZWwoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgb3YtPmRlc2MpOwotfSAKK30KIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihtb2RlbCwgU19JUlVHTywgc2hvd19tb2RlbCwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYnJpZGdlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN5bWJvbGljKGJyZ2xpc3QsIG92LT5icmlkZ2UpKTsKLX0gCit9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYnJpZGdlLCBTX0lSVUdPLCBzaG93X2JyaWRnZSwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2Vuc29yKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN5bWJvbGljKHNlbmxpc3QsIG92LT5zZW5zb3IpKTsKLX0gCit9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2Vuc29yLCBTX0lSVUdPLCBzaG93X3NlbnNvciwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYnJpZ2h0bmVzcyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQpAQCAtNTU5Nyw3ICs1NTk3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJc2Vuc29yX2dldF9icmlnaHRuZXNzKG92LCAmeCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHggPj4gOCk7Ci19IAorfQogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJyaWdodG5lc3MsIFNfSVJVR08sIHNob3dfYnJpZ2h0bmVzcywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2F0dXJhdGlvbihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQpAQCAtNTYwOSw3ICs1NjA5LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJc2Vuc29yX2dldF9zYXR1cmF0aW9uKG92LCAmeCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHggPj4gOCk7Ci19IAorfQogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHNhdHVyYXRpb24sIFNfSVJVR08sIHNob3dfc2F0dXJhdGlvbiwgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfY29udHJhc3Qoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKQEAgLTU2MjEsNyArNTYyMSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCXNlbnNvcl9nZXRfY29udHJhc3Qob3YsICZ4KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKLX0gCit9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoY29udHJhc3QsIFNfSVJVR08sIHNob3dfY29udHJhc3QsIE5VTEwpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X2h1ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQpAQCAtNTYzMywxOSArNTYzMywxOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAlzZW5zb3JfZ2V0X2h1ZShvdiwgJngpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB4ID4+IDgpOwotfSAKK30KIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihodWUsIFNfSVJVR08sIHNob3dfaHVlLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19leHBvc3VyZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQogewogCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOwotCXVuc2lnbmVkIGNoYXIgZXhwOworCXVuc2lnbmVkIGNoYXIgZXhwID0gMDsKIAogCWlmICghb3YtPmRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJc2Vuc29yX2dldF9leHBvc3VyZShvdiwgJmV4cCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGV4cCA+PiA4KTsKLX0gCit9CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZXhwb3N1cmUsIFNfSVJVR08sIHNob3dfZXhwb3N1cmUsIE5VTEwpOwogCiBzdGF0aWMgdm9pZCBvdl9jcmVhdGVfc3lzZnMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKQEAgLTU2ODYsMTMgKzU2ODYsMTEgQEAKIAlpZiAoaWRlc2MtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAweDAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICgob3YgPSBrbWFsbG9jKHNpemVvZigqb3YpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCWlmICgob3YgPSBremFsbG9jKHNpemVvZigqb3YpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQllcnIoImNvdWxkbid0IGttYWxsb2Mgb3Ygc3RydWN0Iik7CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAotCW1lbXNldChvdiwgMCwgc2l6ZW9mKCpvdikpOwotCiAJb3YtPmRldiA9IGRldjsKIAlvdi0+aWZhY2UgPSBpZGVzYy0+YkludGVyZmFjZU51bWJlcjsKIAlvdi0+bGVkX3BvbGljeSA9IGxlZDsKQEAgLTU3MzgsMTEgKzU3MzYsMTAgQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm92LT53cSk7CiAKLQlpbml0X01VVEVYKCZvdi0+bG9jayk7CS8qIHRvIDEgPT0gYXZhaWxhYmxlICovCi0JaW5pdF9NVVRFWCgmb3YtPmJ1Zl9sb2NrKTsKLQlpbml0X01VVEVYKCZvdi0+cGFyYW1fbG9jayk7Ci0JaW5pdF9NVVRFWCgmb3YtPmkyY19sb2NrKTsKLQlpbml0X01VVEVYKCZvdi0+Y2J1Zl9sb2NrKTsKKwltdXRleF9pbml0KCZvdi0+bG9jayk7CS8qIHRvIDEgPT0gYXZhaWxhYmxlICovCisJbXV0ZXhfaW5pdCgmb3YtPmJ1Zl9sb2NrKTsKKwltdXRleF9pbml0KCZvdi0+aTJjX2xvY2spOworCW11dGV4X2luaXQoJm92LT5jYnVmX2xvY2spOwogCiAJb3YtPmJ1Zl9zdGF0ZSA9IEJVRl9OT1RfQUxMT0NBVEVEOwogCkBAIC01ODMzLDEwICs1ODMwLDEwIEBACiAJfQogCiAJaWYgKG92LT5jYnVmKSB7Ci0JCWRvd24oJm92LT5jYnVmX2xvY2spOworCQltdXRleF9sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKIAkJa2ZyZWUob3YtPmNidWYpOwogCQlvdi0+Y2J1ZiA9IE5VTEw7Ci0JCXVwKCZvdi0+Y2J1Zl9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKIAl9CiAKIAlrZnJlZShvdik7CkBAIC01ODgxLDEwICs1ODc4LDEwIEBACiAKIAkvKiBGcmVlIHRoZSBtZW1vcnkgKi8KIAlpZiAob3YgJiYgIW92LT51c2VyKSB7Ci0JCWRvd24oJm92LT5jYnVmX2xvY2spOworCQltdXRleF9sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKIAkJa2ZyZWUob3YtPmNidWYpOwogCQlvdi0+Y2J1ZiA9IE5VTEw7Ci0JCXVwKCZvdi0+Y2J1Zl9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZvdi0+Y2J1Zl9sb2NrKTsKIAogCQlvdjUxeF9kZWFsbG9jKG92KTsKIAkJa2ZyZWUob3YpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmgKaW5kZXggMDg2NTA5YS4uMTJiM2Q1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvb3Y1MTEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgT1Y1MTFfREVCVUcJLyogVHVybiBvbiBkZWJ1ZyBtZXNzYWdlcyAqLwogCkBAIC0xMjksNyArMTMwLDcgQEAKICNkZWZpbmUgUjUxMV9DT01QX1FWWQkJMHg3NgogI2RlZmluZSBSNTExX0NPTVBfUVZVVgkJMHg3NwogI2RlZmluZSBSNTExX0NPTVBfRU4JCTB4NzgKLSNkZWZpbmUgUjUxMV9DT01QX0xVVF9FTgkweDc5CQkKKyNkZWZpbmUgUjUxMV9DT01QX0xVVF9FTgkweDc5CiAjZGVmaW5lIFI1MTFfQ09NUF9MVVRfQkVHSU4JMHg4MAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQzNSw3ICs0MzYsNyBAQAogCiAJaW50IGxlZF9wb2xpY3k7CQkvKiBMRUQ6IG9mZnxvbnxhdXRvOyBPVjUxMSsgb25seSAqLwogCi0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkvKiBTZXJpYWxpemVzIHVzZXItYWNjZXNzaWJsZSBvcGVyYXRpb25zICovCisJc3RydWN0IG11dGV4IGxvY2s7CS8qIFNlcmlhbGl6ZXMgdXNlci1hY2Nlc3NpYmxlIG9wZXJhdGlvbnMgKi8KIAlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KIAogCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIElzb2Nocm9ub3VzPyAqLwpAQCAtNDU4LDE0ICs0NTksMTQgQEAKIAlpbnQgc3ViaDsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIGhlaWdodCAqLwogCiAJaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgc2J1ZiAqLwotCXN0cnVjdCBvdjUxMV9mcmFtZSBmcmFtZVtPVjUxMV9OVU1GUkFNRVNdOwkKKwlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgZnJhbWVbT1Y1MTFfTlVNRlJBTUVTXTsKIAogCXN0cnVjdCBvdjUxMV9zYnVmIHNidWZbT1Y1MTFfTlVNU0JVRl07CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KIAogCWludCBzbmFwX2VuYWJsZWQ7CS8qIFNuYXBzaG90IG1vZGUgZW5hYmxlZCAqLwotCQorCiAJaW50IGJyaWRnZTsJCS8qIFR5cGUgb2YgYnJpZGdlIChCUkdfKikgKi8KIAlpbnQgYmNsYXNzOwkJLyogQ2xhc3Mgb2YgYnJpZGdlIChCQ0xfKikgKi8KIAlpbnQgc2Vuc29yOwkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAoU0VOXyopICovCkBAIC00NzMsMTEgKzQ3NCw5IEBACiAJaW50IHBhY2tldF9zaXplOwkvKiBGcmFtZSBzaXplIHBlciBpc29jIGRlc2MgKi8KIAlpbnQgcGFja2V0X251bWJlcmluZzsJLyogSXMgSVNPIGZyYW1lIG51bWJlcmluZyBlbmFibGVkPyAqLwogCi0Jc3RydWN0IHNlbWFwaG9yZSBwYXJhbV9sb2NrOwkvKiBwYXJhbXMgbG9jayBmb3IgdGhpcyBjYW1lcmEgKi8KLQogCS8qIEZyYW1lYnVmZmVyL3NidWYgbWFuYWdlbWVudCAqLwogCWludCBidWZfc3RhdGU7Ci0Jc3RydWN0IHNlbWFwaG9yZSBidWZfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggYnVmX2xvY2s7CiAKIAlzdHJ1Y3Qgb3Y1MXhfZGVjb21wX29wcyAqZGVjb21wX29wczsKIApAQCAtNDk0LDEyICs0OTMsMTIgQEAKIAlpbnQgcGFsOwkJLyogRGV2aWNlIGlzIGRlc2lnbmVkIGZvciBQQUwgcmVzb2x1dGlvbiAqLwogCiAJLyogSTJDIGludGVyZmFjZSAqLwotCXN0cnVjdCBzZW1hcGhvcmUgaTJjX2xvY2s7CSAgLyogUHJvdGVjdCBJMkMgY29udHJvbGxlciByZWdzICovCisJc3RydWN0IG11dGV4IGkyY19sb2NrOwkgIC8qIFByb3RlY3QgSTJDIGNvbnRyb2xsZXIgcmVncyAqLwogCXVuc2lnbmVkIGNoYXIgcHJpbWFyeV9pMmNfc2xhdmU7ICAvKiBJMkMgd3JpdGUgaWQgb2Ygc2Vuc29yICovCiAKIAkvKiBDb250cm9sIHRyYW5zYWN0aW9uIHN0dWZmICovCiAJdW5zaWduZWQgY2hhciAqY2J1ZjsJCS8qIEJ1ZmZlciBmb3IgcGF5bG9hZCAqLwotCXN0cnVjdCBzZW1hcGhvcmUgY2J1Zl9sb2NrOworCXN0cnVjdCBtdXRleCBjYnVmX2xvY2s7CiB9OwogCiAvKiBVc2VkIHRvIHJlcHJlc2VudCBhIGxpc3Qgb2YgdmFsdWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIHN5bWJvbGljIG5hbWVzICovCkBAIC01MTMsNyArNTEyLDcgQEAKIC8qIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnQgaW4gdGhlIHN5bWJvbGljX2xpc3QgYXJyYXkuIFRoZQogICogZW5kIG9mIHRoZSBsaXN0IG11c3QgYmUgbWFya2VkIHdpdGggYW4gZWxlbWVudCB0aGF0IGhhcyBhIE5VTEwgbmFtZS4KICAqLwotc3RhdGljIGlubGluZSBjaGFyICogCitzdGF0aWMgaW5saW5lIGNoYXIgKgogc3ltYm9saWMoc3RydWN0IHN5bWJvbGljX2xpc3QgbGlzdFtdLCBpbnQgbnVtKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9NYWtlZmlsZQppbmRleCBiY2E0MWFkLi5jYmE0Y2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKIG92Y2FtY2hpcC1vYmpzICAgICA6PSBvdmNhbWNoaXBfY29yZS5vIG92NngyMC5vIG92NngzMC5vIG92N3gxMC5vIG92N3gyMC5vIFwKLSAgICAgICAgICAgICAgICAgICAgICBvdjc2YmUubworCQkgICAgICBvdjc2YmUubwogCiBvYmotJChDT05GSUdfVklERU9fT1ZDQU1DSElQKSArPSBvdmNhbWNoaXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKaW5kZXggZTc2YjUzZC4uM2ZlOWZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jCkBAIC0yNjYsMTcgKzI2NiwxNyBAQAogCQlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWNnh4MCIpOwogCQljLT5hZGRyID0gT1Y2eHgwX1NJRDsKIAkJaWYgKGluaXRfY2FtY2hpcChjKSA8IDApIHsKLSAJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXJldHVybiAtRU5PREVWOwogCQl9IGVsc2UgewogCQkJaWYgKG92Nnh4MF9kZXRlY3QoYykgPCAwKSB7CiAJCQkJUEVSUk9SKCJGYWlsZWQgdG8gaW5pdCBPVjZ4eDAiKTsKLSAJCQkJcmV0dXJuIC1FSU87CisJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlpZiAob3Y3eHgwX2RldGVjdChjKSA8IDApIHsKIAkJCVBFUlJPUigiRmFpbGVkIHRvIGluaXQgT1Y3eHgwIik7Ci0gCQkJcmV0dXJuIC1FSU87CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmgKaW5kZXggNTc1ZTYxMi4uMTIzMTMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oCkBAIC04Miw2ICs4Miw2IEBACiAJCQkgICAgc3RydWN0IG92Y2FtY2hpcF9yZWd2YWxzICpydmFscyk7CiAKIGV4dGVybiBpbnQgb3Zfd3JpdGVfbWFzayhzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY2hhciByZWcsCi0JICAgICAgCQkgdW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgY2hhciBtYXNrKTsKKwkJCSB1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBjaGFyIG1hc2spOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuYwppbmRleCBmM2ZjMzYxLi41MjJlOWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3BsYW5iLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wbGFuYi5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICAgIHBsYW5iIC0gUGxhbkIgZnJhbWUgZ3JhYmJlciBkcml2ZXIKIAogICAgIFBsYW5CIGlzIHVzZWQgaW4gdGhlIDd4MDAvOHgwMCBzZXJpZXMgb2YgUG93ZXJNYWNpbnRvc2gKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSAicGxhbmIuaCIKICNpbmNsdWRlICJzYWE3MTk2LmgiCkBAIC0zMjksMTIgKzMyOSwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGxhbmJfbG9jayhzdHJ1Y3QgcGxhbmIgKnBiKQogewotCWRvd24oJnBiLT5sb2NrKTsKKwltdXRleF9sb2NrKCZwYi0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbGFuYl91bmxvY2soc3RydWN0IHBsYW5iICpwYikKIHsKLQl1cCgmcGItPmxvY2spOworCW11dGV4X3VubG9jaygmcGItPmxvY2spOwogfQogCiAvKioqKioqKioqKioqKioqLwpAQCAtNTg0LDcgKzU4NCw3IEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwYi0+c3VzcGVuZHEpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRfY2xpcChzdHJ1Y3QgcGxhbmIgKnBiLCBzdHJ1Y3QgdmlkZW9fY2xpcCAqY2xpcCkgCitzdGF0aWMgdm9pZCBhZGRfY2xpcChzdHJ1Y3QgcGxhbmIgKnBiLCBzdHJ1Y3QgdmlkZW9fY2xpcCAqY2xpcCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpiYXNlOwogCWludAl4YyA9IGNsaXAtPngsIHljID0gY2xpcC0+eTsKQEAgLTc1OCw3ICs3NTgsNyBAQAogCQkJCQkJCVBMQU5CX1NFVChDSF9TWU5DKSk7CiAJdGFiX2NtZF9zdG9yZShjMSsrLCAodW5zaWduZWQpKCZwYi0+cGxhbmJfYmFzZV9waHlzLT5jaDEuYnJfc2VsKSwKIAkJCQkJCQlQTEFOQl9TRVQoRE1BX0FCT1JUKSk7Ci0JCisKIAkvKiBvZGQgZmllbGQgZGF0YTogKi8KIAlqdW1wID0gdmlydF90b19idXMoYzEgKyBubGluZXMgLyAyKTsKIAlmb3IgKGk9MTsgaSA8IG5saW5lczsgaSArPSBzdGVwc2l6ZSwgYzErKykKQEAgLTEyNDcsNyArMTI0Nyw3IEBACiAJdGFiX2NtZF9kYmRtYShjMSwgREJETUFfTk9QIHwgQlJfSUZDTFIsIHZpcnRfdG9fYnVzKGMxLTMpKTsgYzErKzsKIAl0YWJfY21kX3N0b3JlKGMxKyssICh1bnNpZ25lZCkoJnBiLT5wbGFuYl9iYXNlX3BoeXMtPmNoMS5icl9zZWwpLAogCQlQTEFOQl9TRVQoRE1BX0FCT1JUKSk7Ci0JCisKIAkvKiBvZGQgZmllbGQgZGF0YTogKi8KIAlqdW1wX2FkZHIgPSBjMSArIFRBQl9GQUNUT1IgKiBubGluZXMgLyAyOwogCWp1bXAgPSB2aXJ0X3RvX2J1cyhqdW1wX2FkZHIpOwpAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAlwYi0+dXNlcisrOwogCiAJREVCVUcoIlBsYW5COiBkZXZpY2Ugb3BlbmVkXG4iKTsKLQlyZXR1cm4gMDsgICAKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcGxhbmJfY2xvc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KQpAQCAtMTQyNCw5ICsxNDI0LDkgQEAKIHN0YXRpYyBpbnQgcGxhbmJfaW9jdGwoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHBsYW5iICpwYj0oc3RydWN0IHBsYW5iICopZGV2OwotICAJCisKIAlzd2l0Y2ggKGNtZCkKLQl7CQorCXsKIAkJY2FzZSBWSURJT0NHQ0FQOgogCQl7CiAJCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSBiOwpAQCAtMTQ0MCwyNiArMTQ0MCwyNiBAQAogCQkJYi5jaGFubmVscyA9IDI7CS8qIGNvbXBvc2l0ZSAmIHN2aHMgKi8KIAkJCWIuYXVkaW9zID0gMDsKIAkJCWIubWF4d2lkdGggPSBQTEFOQl9NQVhQSVhFTFM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiLm1heGhlaWdodCA9IFBMQU5CX01BWExJTkVTOwotICAgICAgICAgICAgICAgICAgICAgICAgYi5taW53aWR0aCA9IDMyOyAvKiB3aWxkIGd1ZXNzICovCi0gICAgICAgICAgICAgICAgICAgICAgICBiLm1pbmhlaWdodCA9IDMyOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihhcmcsJmIsc2l6ZW9mKGIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJCQliLm1heGhlaWdodCA9IFBMQU5CX01BWExJTkVTOworCQkJYi5taW53aWR0aCA9IDMyOyAvKiB3aWxkIGd1ZXNzICovCisJCQliLm1pbmhlaWdodCA9IDMyOworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsJmIsc2l6ZW9mKGIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXJldHVybiAwOwogCQl9CiAJCWNhc2UgVklESU9DU0ZCVUY6CiAJCXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19idWZmZXIgdjsKKwkJCXN0cnVjdCB2aWRlb19idWZmZXIgdjsKIAkJCXVuc2lnbmVkIHNob3J0IGJwcDsKIAkJCXVuc2lnbmVkIGludCBmbXQ7CiAKIAkJCURFQlVHKCJQbGFuQjogSU9DVEwgVklESU9DU0ZCVUZcbiIpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikKKwkJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKQogCQkJfHwgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnYsIGFyZyxzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsc2l6ZW9mKHYpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXBsYW5iX2xvY2socGIpOwogCQkJc3dpdGNoKHYuZGVwdGgpIHsKIAkJCWNhc2UgODoKQEAgLTE0NzgsNyArMTQ3OCw3IEBACiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXBsYW5iX3VubG9jayhwYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWYgKGJwcCAqIHYud2lkdGggPiB2LmJ5dGVzcGVybGluZSkgewogCQkJCXBsYW5iX3VubG9jayhwYik7CkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogCQkJcGItPndpbi5icGwgPSBwYi0+d2luLmJwcCAqIHBiLT53aW4uc3dpZHRoOwogCQkJcGItPndpbi5wYWQgPSB2LmJ5dGVzcGVybGluZSAtIHBiLT53aW4uYnBsOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBERUJVRygiUGxhbkI6IERpc3BsYXkgYXQgJXAgaXMgJWQgYnkgJWQsIGJ5dGVkZXB0aCAlZCwiCisJCQlERUJVRygiUGxhbkI6IERpc3BsYXkgYXQgJXAgaXMgJWQgYnkgJWQsIGJ5dGVkZXB0aCAlZCwiCiAJCQkJIiBicGwgJWQgKCsgJWQpXG4iLCB2LmJhc2UsIHYud2lkdGgsdi5oZWlnaHQsCiAJCQkJcGItPndpbi5icHAsIHBiLT53aW4uYnBsLCBwYi0+d2luLnBhZCk7CiAKQEAgLTE1MDQsMTEgKzE1MDQsMTEgQEAKIAkJCQlyZXN1bWVfb3ZlcmxheShwYik7CiAJCQl9CiAJCQlwbGFuYl91bmxvY2socGIpOwotCQkJcmV0dXJuIDA7CQkKKwkJCXJldHVybiAwOwogCQl9CiAJCWNhc2UgVklESU9DR0ZCVUY6CiAJCXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19idWZmZXIgdjsKKwkJCXN0cnVjdCB2aWRlb19idWZmZXIgdjsKIAogCQkJREVCVUcoIlBsYW5COiBJT0NUTCBWSURJT0NHRkJVRlxuIik7CiAKQEAgLTE1MTgsMTUgKzE1MTgsMTUgQEAKIAkJCXYuZGVwdGggPSBwYi0+d2luLmRlcHRoOwogCQkJdi5ieXRlc3BlcmxpbmUgPSBwYi0+d2luLmJwbCArIHBiLT53aW4ucGFkOwogCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ2LCBzaXplb2YodikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXJldHVybiAwOwogCQl9CiAJCWNhc2UgVklESU9DQ0FQVFVSRToKIAkJewogCQkJaW50IGk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvcHlfZnJvbV91c2VyKCZpLCBhcmcsIHNpemVvZihpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCQkJaWYoY29weV9mcm9tX3VzZXIoJmksIGFyZywgc2l6ZW9mKGkpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCWlmKGk9PTApIHsKIAkJCQlERUJVRygiUGxhbkI6IElPQ1RMIFZJRElPQ0NBUFRVUkUgU3RvcFxuIik7CiAKQEAgLTE2OTUsNyArMTY5NSw3IEBACiAJCQlzdHJ1Y3QgdmlkZW9fd2luZG93CXZ3OwogCQkJc3RydWN0IHZpZGVvX2NsaXAJY2xpcDsKIAkJCWludCAJCQlpOwotCQkJCisKIAkJCURFQlVHKCJQbGFuQjogSU9DVEwgVklESU9DU1dJTlxuIik7CiAKIAkJCWlmKGNvcHlfZnJvbV91c2VyKCZ2dyxhcmcsc2l6ZW9mKHZ3KSkpCkBAIC0xNzQ5LDcgKzE3NDksNyBAQAogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkgICAgICAgIGNhc2UgVklESU9DU1lOQzogeworCQljYXNlIFZJRElPQ1NZTkM6IHsKIAkJCWludCBpOwogCiAJCQlJREVCVUcoIlBsYW5COiBJT0NUTCBWSURJT0NTWU5DXG4iKTsKQEAgLTE3NTksNDIgKzE3NTksNDIgQEAKIAogCQkJSURFQlVHKCJQbGFuQjogc3luYyB0byBmcmFtZSAlZFxuIiwgaSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkgPiAoTUFYX0dCVUZGRVJTIC0gMSkgfHwgaSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJaWYoaSA+IChNQVhfR0JVRkZFUlMgLSAxKSB8fCBpIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIGNoa19ncmFiOgotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwYi0+ZnJhbWVfc3RhdFtpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHQlVGRkVSX1VOVVNFRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlzd2l0Y2ggKHBiLT5mcmFtZV9zdGF0W2ldKSB7CisJCQljYXNlIEdCVUZGRVJfVU5VU0VEOgorCQkJCXJldHVybiAtRUlOVkFMOwogCQkJY2FzZSBHQlVGRkVSX0dSQUJCSU5HOgogCQkJCUlERUJVRygiUGxhbkI6IHdhaXRpbmcgZm9yIGdyYWIiCiAJCQkJCQkJIiBkb25lICglZClcbiIsIGkpOwotIAkJCSAgICAgICAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcGItPmNhcHEpOworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnBiLT5jYXBxKTsKIAkJCQlpZihzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCQkJcmV0dXJuIC1FSU5UUjsKIAkJCQlnb3RvIGNoa19ncmFiOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHQlVGRkVSX0RPTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBiLT5mcmFtZV9zdGF0W2ldID0gR0JVRkZFUl9VTlVTRUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJCQljYXNlIEdCVUZGRVJfRE9ORToKKwkJCQlwYi0+ZnJhbWVfc3RhdFtpXSA9IEdCVUZGRVJfVU5VU0VEOworCQkJCWJyZWFrOworCQkJfQorCQkJcmV0dXJuIDA7CiAJCX0KIAotCSAgICAgICAgY2FzZSBWSURJT0NNQ0FQVFVSRToKKwkJY2FzZSBWSURJT0NNQ0FQVFVSRToKIAkJewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX21tYXAgdm07CisJCQlzdHJ1Y3QgdmlkZW9fbW1hcCB2bTsKIAkJCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzdGF0dXM7CiAKIAkJCUlERUJVRygiUGxhbkI6IElPQ1RMIFZJRElPQ01DQVBUVVJFXG4iKTsKIAogCQkJaWYoY29weV9mcm9tX3VzZXIoKHZvaWQgKikgJnZtLCh2b2lkICopYXJnLHNpemVvZih2bSkpKQogCQkJCXJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcGItPmZyYW1lX3N0YXRbdm0uZnJhbWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBHQlVGRkVSX1VOVVNFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKwkJCXN0YXR1cyA9IHBiLT5mcmFtZV9zdGF0W3ZtLmZyYW1lXTsKKwkJCWlmIChzdGF0dXMgIT0gR0JVRkZFUl9VTlVTRUQpCisJCQkJcmV0dXJuIC1FQlVTWTsKIAotCQkgICAgICAgIHJldHVybiB2Z3JhYihwYiwgJnZtKTsKKwkJCXJldHVybiB2Z3JhYihwYiwgJnZtKTsKIAkJfQotCQkKKwogCQljYXNlIFZJRElPQ0dNQlVGOgogCQl7CiAJCQlpbnQgaTsKQEAgLTE4MTEsNyArMTgxMSw3IEBACiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQkKKwogCQljYXNlIFBMQU5CSU9DR1NBQVJFR1M6CiAJCXsKIAkJCXN0cnVjdCBwbGFuYl9zYWFfcmVncyBwcmVnOwpAQCAtMTgyOCw3ICsxODI4LDcgQEAKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQorCiAJCWNhc2UgUExBTkJJT0NTU0FBUkVHUzoKIAkJewogCQkJc3RydWN0IHBsYW5iX3NhYV9yZWdzIHByZWc7CkBAIC0xODQyLDcgKzE4NDIsNyBAQAogCQkJc2FhX3NldCAocHJlZy5hZGRyLCBwcmVnLnZhbCwgcGIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJCisKIAkJY2FzZSBQTEFOQklPQ0dTVEFUOgogCQl7CiAJCQlzdHJ1Y3QgcGxhbmJfc3RhdF9yZWdzIHBzdGF0OwpAQCAtMTg1OSw3ICsxODU5LDcgQEAKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQorCiAJCWNhc2UgUExBTkJJT0NTTU9ERTogewogCQkJaW50IHY7CiAKQEAgLTE5ODUsMTAgKzE5ODUsMTAgQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGxhbmIgKnBiID0gKHN0cnVjdCBwbGFuYiAqKWRldjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBsb25nKWFkcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpYWRyOwogCiAJaWYgKHNpemUgPiBNQVhfR0JVRkZFUlMgKiBQTEFOQl9NQVhfRkJVRikKLQkgICAgICAgIHJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIXBiLT5yYXdidWYpIHsKIAkJaW50IGVycjsKIAkJaWYoKGVycj1ncmFiYnVmX2FsbG9jKHBiKSkpCkBAIC0yMDY3LDcgKzIwNjcsNyBAQAogI2VuZGlmCiAJcGItPnRhYl9zaXplID0gUExBTkJfTUFYTElORVMgKyA0MDsKIAlwYi0+c3VzcGVuZCA9IDA7Ci0JaW5pdF9NVVRFWCgmcGItPmxvY2spOworCW11dGV4X2luaXQoJnBiLT5sb2NrKTsKIAlwYi0+Y2gxX2NtZCA9IDA7CiAJcGItPmNoMl9jbWQgPSAwOwogCXBiLT5tYXNrID0gMDsKQEAgLTIwOTEsMTAgKzIwOTEsMTAgQEAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgbWFzayAqLwogCXBiLT5pbnRyX21hc2sgPSBQTEFOQl9DTFJfSVJROwogCi0gICAgICAgIHJlc3VsdCA9IHJlcXVlc3RfaXJxKHBiLT5pcnEsIHBsYW5iX2lycSwgMCwgIlBsYW5CIiwgKHZvaWQgKilwYik7Ci0gICAgICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0JICAgICAgICBpZiAocmVzdWx0PT0tRUlOVkFMKQotCSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlBsYW5COiBCYWQgaXJxIG51bWJlciAoJWQpICIKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShwYi0+aXJxLCBwbGFuYl9pcnEsIDAsICJQbGFuQiIsICh2b2lkICopcGIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWlmIChyZXN1bHQ9PS1FSU5WQUwpCisJCQlwcmludGsoS0VSTl9FUlIgIlBsYW5COiBCYWQgaXJxIG51bWJlciAoJWQpICIKIAkJCQkJCSJvciBoYW5kbGVyXG4iLCAoaW50KXBiLT5pcnEpOwogCQllbHNlIGlmIChyZXN1bHQ9PS1FQlVTWSkKIAkJCXByaW50ayhLRVJOX0VSUiAiUGxhbkI6IEkgZG9uJ3Qga25vdyB3aHksICIKQEAgLTIxMDIsNyArMjEwMiw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCWRpc2FibGVfaXJxKHBiLT5pcnEpOwotICAgICAgICAKKwogCS8qIE5vdyBhZGQgdGhlIHRlbXBsYXRlIGFuZCByZWdpc3RlciB0aGUgZGV2aWNlIHVuaXQuICovCiAJbWVtY3B5KCZwYi0+dmlkZW9fZGV2LCZwbGFuYl90ZW1wbGF0ZSxzaXplb2YocGxhbmJfdGVtcGxhdGUpKTsKIApAQCAtMjE0Myw3ICsyMTQzLDcgQEAKIH0KIAogLyoKLSAqCVNjYW4gZm9yIGEgUGxhbkIgY29udHJvbGxlciwgcmVxdWVzdCB0aGUgaXJxIGFuZCBtYXAgdGhlIGlvIG1lbW9yeSAKKyAqCVNjYW4gZm9yIGEgUGxhbkIgY29udHJvbGxlciwgcmVxdWVzdCB0aGUgaXJxIGFuZCBtYXAgdGhlIGlvIG1lbW9yeQogICovCiAKIHN0YXRpYyBpbnQgZmluZF9wbGFuYih2b2lkKQpAQCAtMjE3MSw5ICsyMTcxLDkgQEAKIAlwYiA9ICZwbGFuYnNbMF07CiAJcGxhbmJfbnVtID0gMTsKIAotICAgICAgICBpZiAocGxhbmJfZGV2aWNlcy0+bl9hZGRycyAhPSAxKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrIChLRVJOX1dBUk5JTkcgIlBsYW5COiBleHBlY3RpbmcgMSBhZGRyZXNzIGZvciBwbGFuYiAiCi0gICAgICAgICAgICAgICAgCSIoZ290ICVkKSIsIHBsYW5iX2RldmljZXMtPm5fYWRkcnMpOworCWlmIChwbGFuYl9kZXZpY2VzLT5uX2FkZHJzICE9IDEpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIlBsYW5COiBleHBlY3RpbmcgMSBhZGRyZXNzIGZvciBwbGFuYiAiCisJCQkiKGdvdCAlZCkiLCBwbGFuYl9kZXZpY2VzLT5uX2FkZHJzKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjM2LDcgKzIyMzYsNyBAQAogCXBiLT5wbGFuYl9iYXNlID0gcGxhbmJfcmVnczsKIAlwYi0+cGxhbmJfYmFzZV9waHlzID0gKHN0cnVjdCBwbGFuYl9yZWdpc3RlcnMgKiluZXdfYmFzZTsKIAlwYi0+aXJxCT0gaXJxOwotCQorCiAJcmV0dXJuIHBsYW5iX251bTsKIAogZXJyX291dF9kaXNhYmxlOgpAQCAtMjI1MSw3ICsyMjUxLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcGxhbmIgKnBiOwogCi0JZm9yIChpPTA7aTxwbGFuYl9udW07IGkrKykgCisJZm9yIChpPTA7aTxwbGFuYl9udW07IGkrKykKIAl7CiAJCXBiPSZwbGFuYnNbaV07CiAKQEAgLTIyNzgsNyArMjI3OCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BsYW5icyh2b2lkKQogewogCWludCBpOwotICAKKwogCWlmIChmaW5kX3BsYW5iKCk8PTApCiAJCXJldHVybiAtRUlPOwogCkBAIC0yMjg4LDkgKzIyODgsOSBAQAogCQkJCQkJCSIgd2l0aCB2NGxcbiIsIGkpOwogCQkJcmVsZWFzZV9wbGFuYigpOwogCQkJcmV0dXJuIC1FSU87Ci0JCX0gCisJCX0KIAkJcHJpbnRrKEtFUk5fSU5GTyAiUGxhbkI6IHJlZ2lzdGVyZWQgZGV2aWNlICVkIHdpdGggdjRsXG4iLCBpKTsKLQl9ICAKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuaAppbmRleCA4YTBmYWFkMS4uOTI4MjMyMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcGxhbmIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3BsYW5iLmgKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgICAgcGxhbmIgLSBQbGFuQiBmcmFtZSBncmFiYmVyIGRyaXZlcgogCiAgICAgUGxhbkIgaXMgdXNlZCBpbiB0aGUgN3gwMC84eDAwIHNlcmllcyBvZiBQb3dlck1hY2ludG9zaApAQCAtMTY3LDE0ICsxNjcsMTQgQEAKIAlzdHJ1Y3QJdmlkZW9fZGV2aWNlIHZpZGVvX2RldjsKIAlzdHJ1Y3QJdmlkZW9fcGljdHVyZSBwaWN0dXJlOwkJLyogQ3VycmVudCBwaWN0dXJlIHBhcmFtcyAqLwogCXN0cnVjdAl2aWRlb19hdWRpbyBhdWRpb19kZXY7CQkvKiBDdXJyZW50IGF1ZGlvIHBhcmFtcyAqLwotICAKKwogCXZvbGF0aWxlIHN0cnVjdCBwbGFuYl9yZWdpc3RlcnMgKnBsYW5iX2Jhc2U7CS8qIHZpcnQgYmFzZSBvZiBwbGFuYiAqLwogCXN0cnVjdCBwbGFuYl9yZWdpc3RlcnMgKnBsYW5iX2Jhc2VfcGh5czsJLyogcGh5cyBiYXNlIG9mIHBsYW5iICovCiAJdm9pZAkqcHJpdl9zcGFjZTsJCQkvKiBPcmcuIGFsbG9jLiBtZW0gZm9yIGtmcmVlICovCiAJaW50CXVzZXI7CiAJdW5zaWduZWQgaW50IHRhYl9zaXplOwogCWludCAgICAgbWF4bGluZXM7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCXVuc2lnbmVkIGludAlpcnE7CQkJLyogaW50ZXJydXB0IG51bWJlciAqLwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBpbnRyX21hc2s7CiAKQEAgLTIwOSw3ICsyMDksNyBAQAogCWludCBnd2lkdGhbTUFYX0dCVUZGRVJTXSwgZ2hlaWdodFtNQVhfR0JVRkZFUlNdOwogCXVuc2lnbmVkIGludCBnZm10W01BWF9HQlVGRkVSU107CiAJaW50IGdub3JtX3N3aXRjaFtNQVhfR0JVRkZFUlNdOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmZyYW1lX3N0YXQ7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpmcmFtZV9zdGF0OwogI2RlZmluZSBHQlVGRkVSX1VOVVNFRCAgICAgICAweDAwVQogI2RlZmluZSBHQlVGRkVSX0dSQUJCSU5HICAgICAweDAxVQogI2RlZmluZSBHQlVGRkVSX0RPTkUgICAgICAgICAweDAyVQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcG1zLmMKaW5kZXggOWU2NDQ4Ni4uMDk4MzVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Btcy5jCkBAIC0xMiwxMCArMTIsMTAgQEAKICAqCU1vc3Qgb2YgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IGRlcml2ZWQgZnJvbSBoaXMgdXNlcnNwYWNlIGRyaXZlci4KICAqCUhpcyBkcml2ZXIgd29ya3Mgc28gc2VuZCBhbnkgcmVwb3J0cyB0byBhbGFuQHJlZGhhdC5jb20gdW5sZXNzIHRoZQogICoJdXNlcnNwYWNlIGRyaXZlciBhbHNvIGRvZXNuJ3Qgd29yayBmb3IgeW91Li4uCi0gKiAgICAgIAorICoKICAqICAgICAgQ2hhbmdlczoKICAqICAgICAgMDgvMDcvMjAwMyAgICAgICAgRGFuaWVsZSBCZWxsdWNjaSA8YmVsbHVjZGFAdGlzY2FsaS5pdD4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgLSBwbXNfY2FwdHVyZTogcmVwb3J0IGJhY2sgLUVGQVVMVCAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgLSBwbXNfY2FwdHVyZTogcmVwb3J0IGJhY2sgLUVGQVVMVAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIApAQCAtNDQsNyArNDYsNyBAQAogCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3R1cmU7CiAJaW50IGhlaWdodDsKIAlpbnQgd2lkdGg7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogc3RydWN0IGkyY19pbmZvCkBAIC02NCwxNCArNjYsMTQgQEAKIC8qCiAgKglJL08gcG9ydHMgYW5kIFNoYXJlZCBNZW1vcnkKICAqLwotIAorCiBzdGF0aWMgaW50IGlvX3BvcnQJCT0JMHgyNTA7CiBzdGF0aWMgaW50IGRhdGFfcG9ydAkJPQkweDI1MTsKIHN0YXRpYyBpbnQgbWVtX2Jhc2UJCT0JMHhDODAwMDsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKm1lbTsKIHN0YXRpYyBpbnQgdmlkZW9fbnIgICAgICAgICAgICAgPSAgICAgICAtMTsKIAotCQorCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtdnZfd3JpdGUodTggaW5kZXgsIHU4IHZhbHVlKQogewpAQCAtODgsOSArOTAsOSBAQAogewogCWludCBjb3VudGVyOwogCWludCBpOwotCQorCiAJb3V0YigweDI4LCBpb19wb3J0KTsKLQkKKwogCWNvdW50ZXI9MDsKIAl3aGlsZSgoaW5iKGRhdGFfcG9ydCkmMHgwMSk9PTApCiAJCWlmKGNvdW50ZXIrKz09MjU2KQpAQCAtOTksOSArMTAxLDkgQEAKIAl3aGlsZSgoaW5iKGRhdGFfcG9ydCkmMHgwMSkhPTApCiAJCWlmKGNvdW50ZXIrKz09MjU2KQogCQkJYnJlYWs7Ci0JCQkKKwogCW91dGIoc2xhdmUsIGlvX3BvcnQpOwotCQorCiAJY291bnRlcj0wOwogCXdoaWxlKChpbmIoZGF0YV9wb3J0KSYweDAxKT09MCkKIAkJaWYoY291bnRlcisrPT0yNTYpCkBAIC0xMTAsNyArMTEyLDcgQEAKIAl3aGlsZSgoaW5iKGRhdGFfcG9ydCkmMHgwMSkhPTApCiAJCWlmKGNvdW50ZXIrKz09MjU2KQogCQkJYnJlYWs7Ci0JCQkKKwogCWZvcihpPTA7aTwxMjtpKyspCiAJewogCQljaGFyIHN0PWluYihkYXRhX3BvcnQpOwpAQCAtMTIwLDcgKzEyMiw3IEBACiAJCQlicmVhazsKIAl9CiAJb3V0YigweDI5LCBpb19wb3J0KTsKLQlyZXR1cm4gaW5iKGRhdGFfcG9ydCk7CQkKKwlyZXR1cm4gaW5iKGRhdGFfcG9ydCk7CiB9CiAKIHN0YXRpYyBpbnQgcG1zX2kyY193cml0ZSh1MTYgc2xhdmUsIHUxNiBzdWIsIHUxNiBkYXRhKQpAQCAtMTI4LDE5ICsxMzAsMTkgQEAKIAlpbnQgc2tpcD0wOwogCWludCBjb3VudDsKIAlpbnQgaTsKLQkKKwogCWZvcihpPTA7aTxpMmNfY291bnQ7aSsrKQogCXsKIAkJaWYoKGkyY2luZm9baV0uc2xhdmU9PXNsYXZlKSAmJgogCQkgICAoaTJjaW5mb1tpXS5zdWIgPT0gc3ViKSkKIAkJewotCQkgICAJaWYoaTJjaW5mb1tpXS5kYXRhPT1kYXRhKQotCQkgICAJCXNraXA9MTsKLQkJICAgCWkyY2luZm9baV0uZGF0YT1kYXRhOwotCQkgICAJaT1pMmNfY291bnQrMTsKKwkJCWlmKGkyY2luZm9baV0uZGF0YT09ZGF0YSkKKwkJCQlza2lwPTE7CisJCQlpMmNpbmZvW2ldLmRhdGE9ZGF0YTsKKwkJCWk9aTJjX2NvdW50KzE7CiAJCX0KIAl9Ci0JCisKIAlpZihpPT1pMmNfY291bnQgJiYgaTJjX2NvdW50PDY0KQogCXsKIAkJaTJjaW5mb1tpMmNfY291bnRdLnNsYXZlPXNsYXZlOwpAQCAtMTQ4LDE2ICsxNTAsMTYgQEAKIAkJaTJjaW5mb1tpMmNfY291bnRdLmRhdGE9ZGF0YTsKIAkJaTJjX2NvdW50Kys7CiAJfQotCQorCiAJaWYoc2tpcCkKIAkJcmV0dXJuIDA7Ci0JCQorCiAJbXZ2X3dyaXRlKDB4MjksIHN1Yik7CiAJbXZ2X3dyaXRlKDB4MkEsIGRhdGEpOwogCW12dl93cml0ZSgweDI4LCBzbGF2ZSk7Ci0JCisKIAlvdXRiKDB4MjgsIGlvX3BvcnQpOwotCQorCiAJY291bnQ9MDsKIAl3aGlsZSgoaW5iKGRhdGFfcG9ydCkmMSk9PTApCiAJCWlmKGNvdW50PjI1NSkKQEAgLTE2NSw5ICsxNjcsOSBAQAogCXdoaWxlKChpbmIoZGF0YV9wb3J0KSYxKSE9MCkKIAkJaWYoY291bnQ+MjU1KQogCQkJYnJlYWs7Ci0JCQkKKwogCWNvdW50PWluYihkYXRhX3BvcnQpOwotCQorCiAJaWYoY291bnQmMikKIAkJcmV0dXJuIC0xOwogCXJldHVybiBjb3VudDsKQEAgLTE4Nyw4ICsxODksOCBAQAogCiBzdGF0aWMgdm9pZCBwbXNfaTJjX2FuZG9yKGludCBzbGF2ZSwgaW50IHN1YiwgaW50IGFuZCwgaW50IG9yKQogewotCXU4IHRtcDsJCi0JCisJdTggdG1wOworCiAJdG1wPXBtc19pMmNfcmVhZChzbGF2ZSwgc3ViKTsKIAl0bXAgPSAodG1wJmFuZCl8b3I7CiAJcG1zX2kyY193cml0ZShzbGF2ZSwgc3ViLCB0bXApOwpAQCAtMTk3LDcgKzE5OSw3IEBACiAvKgogICoJQ29udHJvbCBmdW5jdGlvbnMKICAqLwotIAorCiAKIHN0YXRpYyB2b2lkIHBtc192aWRlb3NvdXJjZShzaG9ydCBzb3VyY2UpCiB7CkBAIC0yMzIsOCArMjM0LDggQEAKIAkJCWJyZWFrOwogCX0KIH0KLSAKLSAKKworCiBzdGF0aWMgdm9pZCBwbXNfY29udHJhc3Qoc2hvcnQgY29udHJhc3QpCiB7CiAJc3dpdGNoKGRlY29kZXIpCkBAIC0yNjcsMTQgKzI2OSwxNCBAQAogewogCWludCB0YXJnZXQ7CiAJc3RhbmRhcmQgPSBmb3JtYXQ7Ci0JCisKIAlpZihkZWNvZGVyPT1QSElMSVBTMSkKIAkJdGFyZ2V0PTB4NDI7CiAJZWxzZSBpZihkZWNvZGVyPT1QSElMSVBTMikKIAkJdGFyZ2V0PTB4OEE7CiAJZWxzZQogCQlyZXR1cm47Ci0JCQkJCisKIAlzd2l0Y2goZm9ybWF0KQogCXsKIAkJY2FzZSAwOgkvKiBBdXRvICovCkBAIC0zMDAsNyArMzAyLDcgQEAKIAogLyoKICAqCVRoZXNlIGZlYXR1cmVzIG9mIHRoZSBQTVMgY2FyZCBhcmUgbm90IGN1cnJlbnRseSBleHBvc2VzLiBUaGV5Ci0gKgljb3VsZCBiZWNvbWUgYSBwcml2YXRlIHY0bCBpb2N0bCBmb3IgUE1TQ09ORklHIG9yIHNvbWVzdWNoIGlmIAorICoJY291bGQgYmVjb21lIGEgcHJpdmF0ZSB2NGwgaW9jdGwgZm9yIFBNU0NPTkZJRyBvciBzb21lc3VjaCBpZgogICoJcGVvcGxlIG5lZWQgaXQuIFdlIGFsc28gZG9uJ3QgeWV0IHVzZSB0aGUgUE1TIGludGVycnVwdC4KICAqLwogCkBAIC0zMjIsNyArMzI0LDcgQEAKIC8qCiAgKglCYW5kcGFzcyBmaWx0ZXJzCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgcG1zX2JhbmRwYXNzKHNob3J0IHBhc3MpCiB7CiAJaWYoZGVjb2Rlcj09UEhJTElQUzIpCkBAIC00OTEsNyArNDkzLDcgQEAKIC8qCiAgKglUdXJuIDE2Yml0IHJhdGlvcyBpbnRvIGJlc3Qgc21hbGwgcmF0aW8gdGhlIGNoaXBzZXQgY2FuIGdyb2sKICAqLwotIAorCiBzdGF0aWMgdm9pZCBwbXNfdmVydGRlY2kodW5zaWduZWQgc2hvcnQgZGVjaW51bSwgdW5zaWduZWQgc2hvcnQgZGVjaWRlbikKIHsKIAkvKiBLbm9jayBpdCBkb3duIGJ5IC81IG9uY2UgKi8KQEAgLTU0NCw3ICs1NDYsNyBAQAogCQlkZWNpbnVtPTUxMjsKIAkJZGVjaWRlbj02NDA7CS8qIDc2OCB3b3VsZCBiZSBpZGVhbCAqLwogCX0KLQkKKwogCXdoaWxlKCgoZGVjaW51bXxkZWNpZGVuKSYxKT09MCkKIAl7CiAJCWRlY2ludW0+Pj0xOwpAQCAtNTU3LDcgKzU1OSw3IEBACiAJfQogCWlmKGRlY2lkZW49PTMyKQogCQlkZWNpZGVuLS07Ci0JCQorCiAJbXZ2X3dyaXRlKDB4MjQsIDB4ODB8ZGVjaWRlbik7CiAJbXZ2X3dyaXRlKDB4MjUsIGRlY2ludW0pOwogfQpAQCAtNTY1LDE0ICs1NjcsMTQgQEAKIHN0YXRpYyB2b2lkIHBtc19yZXNvbHV0aW9uKHNob3J0IHdpZHRoLCBzaG9ydCBoZWlnaHQpCiB7CiAJaW50IGZnX2hlaWdodDsKLQkKKwogCWZnX2hlaWdodD1oZWlnaHQ7CiAJaWYoZmdfaGVpZ2h0PjI4MCkKIAkJZmdfaGVpZ2h0PTI4MDsKLQkJCisKIAltdnZfd3JpdGUoMHgxOCwgZmdfaGVpZ2h0KTsKIAltdnZfd3JpdGUoMHgxOSwgZmdfaGVpZ2h0Pj44KTsKLQkKKwogCWlmKHN0YW5kYXJkPT0xKQogCXsKIAkJbXZ2X3dyaXRlKDB4MUEsIDB4RkMpOwpAQCAtNTk2LDcgKzU5OCw3IEBACiAJbXZ2X3dyaXRlKDB4NDIsIDB4MDApOwogCW12dl93cml0ZSgweDQzLCAweDAwKTsKIAltdnZfd3JpdGUoMHg0NCwgTVZWTUVNT1JZV0lEVEgpOwotCQorCiAJbXZ2X3dyaXRlKDB4MjIsIHdpZHRoKzgpOwogCW12dl93cml0ZSgweDIzLCAod2lkdGgrOCk+PiA4KTsKIApAQCAtNjE2LDcgKzYxOCw3IEBACiAvKgogICoJU2V0IElucHV0CiAgKi8KLSAKKwogc3RhdGljIHZvaWQgcG1zX3ZjcmlucHV0KHNob3J0IGlucHV0KQogewogCWlmKGRlY29kZXI9PVBISUxJUFMyKQpAQCAtNjQxLDIwICs2NDMsMjAgQEAKIAltdnZfd3JpdGUoMHgwOCxyOCk7IC8qIGNhcHR1cmUgcmdiNTU1LzU2NSwgaW5pdCBEUkFNLCBQQyBlbmFibGUgKi8KIAogLyoJcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAleCAleFxuIix3aWR0aCxoZWlnaHQsdm9mZixub20sZGVuLG12dl9idWYpOyAqLwotICAKLQlmb3IgKHkgPSAwOyB5IDwgZGV2LT5oZWlnaHQ7IHkrKyApIAorCisJZm9yICh5ID0gMDsgeSA8IGRldi0+aGVpZ2h0OyB5KysgKQogCXsKIAkJd3JpdGViKDAsIG1lbSk7ICAvKiBzeW5jaHJvbmlzaWVydCBuZXVlIFplaWxlICovCi0JCQorCiAJCS8qCiAJCSAqCVRoaXMgaXMgaW4gdHJ1dGggYSBmaWZvLCBiZSB2ZXJ5IGNhcmVmdWwgYXMgaWYgeW91CiAJCSAqCWZvcmdvdCB0aGlzIG9kZCB0aGluZ3Mgd2lsbCBvY2N1ciA4KQogCQkgKi8KLQkJIAorCiAJCW1lbWNweV9mcm9taW8odG1wLCBtZW0sIGR3KzMyKTsgLyogZGlzY2FyZCAxNiB3b3JkICAgKi8KIAkJY250IC09IGRldi0+aGVpZ2h0OwotCQl3aGlsZSAoY250IDw9IDApIAotCQl7IAorCQl3aGlsZSAoY250IDw9IDApCisJCXsKIAkJCS8qCiAJCQkgKglEb24ndCBjb3B5IHRvbyBmYXIKIAkJCSAqLwpAQCAtNjY0LDcgKzY2Niw3IEBACiAJCQljbnQgKz0gZGV2LT5oZWlnaHQ7CiAJCQlpZiAoY29weV90b191c2VyKGJ1ZiwgdG1wKzMyLCBkdCkpCiAJCQkJcmV0dXJuIGxlbiA/IGxlbiA6IC1FRkFVTFQ7Ci0JCQlidWYgKz0gZHQ7ICAgIAorCQkJYnVmICs9IGR0OwogCQkJbGVuICs9IGR0OwogCQl9CiAJfQpAQCAtNjgxLDcgKzY4Myw3IEBACiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgcG1zX2RldmljZSAqcGQ9KHN0cnVjdCBwbXNfZGV2aWNlICopZGV2OwotCQorCiAJc3dpdGNoKGNtZCkKIAl7CiAJCWNhc2UgVklESU9DR0NBUDoKQEAgLTcyNCwxMCArNzI2LDEwIEBACiAJCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKIAkJCWlmKHYtPmNoYW5uZWw8MCB8fCB2LT5jaGFubmVsPjMpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlkb3duKCZwZC0+bG9jayk7CisJCQltdXRleF9sb2NrKCZwZC0+bG9jayk7CiAJCQlwbXNfdmlkZW9zb3VyY2Uodi0+Y2hhbm5lbCYxKTsKIAkJCXBtc192Y3JpbnB1dCh2LT5jaGFubmVsPj4xKTsKLQkJCXVwKCZwZC0+bG9jayk7CisJCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWNhc2UgVklESU9DR1RVTkVSOgpAQCAtNzYxLDcgKzc2Myw3IEBACiAJCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7CiAJCQlpZih2LT50dW5lcikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWRvd24oJnBkLT5sb2NrKTsKKwkJCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKIAkJCXN3aXRjaCh2LT5tb2RlKQogCQkJewogCQkJCWNhc2UgVklERU9fTU9ERV9BVVRPOgpAQCAtNzg1LDEwICs3ODcsMTAgQEAKIAkJCQkJcG1zX2Zvcm1hdCgyKTsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJdXAoJnBkLT5sb2NrKTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7CiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJdXAoJnBkLT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmcGQtPmxvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJY2FzZSBWSURJT0NHUElDVDoKQEAgLTgwNCwxNyArODA2LDE3IEBACiAJCQkgICAgfHwocC0+cGFsZXR0ZT09VklERU9fUEFMRVRURV9SR0I1NTUgJiYgcC0+ZGVwdGg9PTE1KSkpCiAJCQkgICAgCXJldHVybiAtRUlOVkFMOwogCQkJcGQtPnBpY3R1cmU9ICpwOwotCQkJCisKIAkJCS8qCiAJCQkgKglOb3cgbG9hZCB0aGUgY2FyZC4KIAkJCSAqLwogCi0JCQlkb3duKCZwZC0+bG9jayk7CisJCQltdXRleF9sb2NrKCZwZC0+bG9jayk7CiAJCQlwbXNfYnJpZ2h0bmVzcyhwLT5icmlnaHRuZXNzPj44KTsKIAkJCXBtc19odWUocC0+aHVlPj44KTsKIAkJCXBtc19jb2xvdXIocC0+Y29sb3VyPj44KTsKLQkJCXBtc19jb250cmFzdChwLT5jb250cmFzdD4+OCk7CQotCQkJdXAoJnBkLT5sb2NrKTsKKwkJCXBtc19jb250cmFzdChwLT5jb250cmFzdD4+OCk7CisJCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWNhc2UgVklESU9DU1dJTjoKQEAgLTgzMCw5ICs4MzIsOSBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJcGQtPndpZHRoPXZ3LT53aWR0aDsKIAkJCXBkLT5oZWlnaHQ9dnctPmhlaWdodDsKLQkJCWRvd24oJnBkLT5sb2NrKTsKKwkJCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKIAkJCXBtc19yZXNvbHV0aW9uKHBkLT53aWR0aCwgcGQtPmhlaWdodCk7Ci0JCQl1cCgmcGQtPmxvY2spOwkJCS8qIE9rIHdlIGZpZ3VyZWQgb3V0IHdoYXQgdG8gdXNlIGZyb20gb3VyIHdpZGUgY2hvaWNlICovCisJCQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsJCQkvKiBPayB3ZSBmaWd1cmVkIG91dCB3aGF0IHRvIHVzZSBmcm9tIG91ciB3aWRlIGNob2ljZSAqLwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJY2FzZSBWSURJT0NHV0lOOgpAQCAtODcxLDEwICs4NzMsMTAgQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgcG1zX2RldmljZSAqcGQ9KHN0cnVjdCBwbXNfZGV2aWNlICopdjsKIAlpbnQgbGVuOwotCQotCWRvd24oJnBkLT5sb2NrKTsKKworCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKIAlsZW49cG1zX2NhcHR1cmUocGQsIGJ1ZiwgKHBkLT5waWN0dXJlLmRlcHRoPT0xNik/MDoxLGNvdW50KTsKLQl1cCgmcGQtPmxvY2spOworCW11dGV4X3VubG9jaygmcGQtPmxvY2spOwogCXJldHVybiBsZW47CiB9CiAKQEAgLTkwMywxMyArOTA1LDEzIEBACiAvKgogICoJUHJvYmUgZm9yIGFuZCBpbml0aWFsaXNlIHRoZSBNZWRpYXZpc2lvbiBQTVMKICAqLwotIAorCiBzdGF0aWMgaW50IGluaXRfbWVkaWF2aXNpb24odm9pZCkKIHsKIAlpbnQgaWQ7CiAJaW50IGlkZWMsIGRlY3N0OwogCWludCBpOwotCQkKKwogCXVuc2lnbmVkIGNoYXIgaTJjX2RlZnNbXT17CiAJCTB4NEMsMHgzMCwweDAwLDB4RTgsCiAJCTB4QjYsMHhFMiwweDAwLDB4MDAsCkBAIC05MjMsNyArOTI1LDcgQEAKIAltZW0gPSBpb3JlbWFwKG1lbV9iYXNlLCAweDgwMCk7CiAJaWYgKCFtZW0pCiAJCXJldHVybiAtRU5PTUVNOwotCQorCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbigweDlBMDEsIDEsICJNZWRpYXZpc2lvbiBQTVMgY29uZmlnIikpCiAJewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWRpYXZpc2lvbjogdW5hYmxlIHRvIGRldGVjdDogMHg5QTAxIGluIHVzZS5cbiIpOwpAQCAtOTM5LDE4ICs5NDEsMTggQEAKIAl9CiAJb3V0YigweEI4LCAweDlBMDEpOwkJLyogVW5sb2NrICovCiAJb3V0Yihpb19wb3J0Pj40LCAweDlBMDEpOwkvKiBTZXQgSU8gcG9ydCAqLwotCQotCQorCisKIAlpZD1tdnZfcmVhZCgzKTsKIAlkZWNzdD1wbXNfaTJjX3N0YXQoMHg0Myk7Ci0JCisKIAlpZihkZWNzdCE9LTEpCiAJCWlkZWM9MjsKIAllbHNlIGlmKHBtc19pMmNfc3RhdCgweGI5KSE9LTEpCiAJCWlkZWM9MzsKIAllbHNlIGlmKHBtc19pMmNfc3RhdCgweDhiKSE9LTEpCiAJCWlkZWM9MTsKLQllbHNlIAorCWVsc2UKIAkJaWRlYz0wOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUE1TIHR5cGUgaXMgJWRcbiIsIGlkZWMpOwpAQCAtOTY0LDExICs5NjYsMTEgQEAKIAkvKgogCSAqCU9rIHdlIGhhdmUgYSBQTVMgb2Ygc29tZSBzb3J0CiAJICovCi0JCisKIAltdnZfd3JpdGUoMHgwNCwgbWVtX2Jhc2U+PjEyKTsJLyogU2V0IHRoZSBtZW1vcnkgYXJlYSAqLwotCQorCiAJLyogT2sgbm93IGxvYWQgdGhlIGRlZmF1bHRzICovCi0JCisKIAlmb3IoaT0wO2k8MHgxOTtpKyspCiAJewogCQlpZihpMmNfZGVmc1tpXT09MHhGRikKQEAgLTk3Niw3ICs5NzgsNyBAQAogCQllbHNlCiAJCQlwbXNfaTJjX3dyaXRlKDB4OEEsIGksIGkyY19kZWZzW2ldKTsKIAl9Ci0JCisKIAlwbXNfaTJjX3dyaXRlKDB4QjgsMHgwMCwweDEyKTsKIAlwbXNfaTJjX3dyaXRlKDB4QjgsMHgwNCwweDAwKTsKIAlwbXNfaTJjX3dyaXRlKDB4QjgsMHgwNywweDAwKTsKQEAgLTk4NSwxOCArOTg3LDE4IEBACiAJcG1zX2kyY193cml0ZSgweEI4LDB4MEEsMHgwMCk7CiAJcG1zX2kyY193cml0ZSgweEI4LDB4MEIsMHgxMCk7CiAJcG1zX2kyY193cml0ZSgweEI4LDB4MTAsMHgwMyk7Ci0JCisKIAltdnZfd3JpdGUoMHgwMSwgMHgwMCk7CiAJbXZ2X3dyaXRlKDB4MDUsIDB4QTApOwogCW12dl93cml0ZSgweDA4LCAweDI1KTsKIAltdnZfd3JpdGUoMHgwOSwgMHgwMCk7Ci0JbXZ2X3dyaXRlKDB4MEEsIDB4MjB8TVZWTUVNT1JZV0lEVEgpOwkKLQkKKwltdnZfd3JpdGUoMHgwQSwgMHgyMHxNVlZNRU1PUllXSURUSCk7CisKIAltdnZfd3JpdGUoMHgxMCwgMHgwMik7CiAJbXZ2X3dyaXRlKDB4MUUsIDB4MEMpOwogCW12dl93cml0ZSgweDFGLCAweDAzKTsKIAltdnZfd3JpdGUoMHgyNiwgMHgwNik7Ci0JCisKIAltdnZfd3JpdGUoMHgyQiwgMHgwMCk7CiAJbXZ2X3dyaXRlKDB4MkMsIDB4MjApOwogCW12dl93cml0ZSgweDJELCAweDAwKTsKQEAgLTEwMTYsMjAgKzEwMTgsMjAgQEAKIC8qCiAgKglJbml0aWFsaXphdGlvbiBhbmQgbW9kdWxlIHN0dWZmCiAgKi8KLSAKKwogc3RhdGljIGludCBfX2luaXQgaW5pdF9wbXNfY2FyZHModm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICJNZWRpYXZpc2lvbiBQcm8gTW92aWUgU3R1ZGlvIGRyaXZlciAwLjAyXG4iKTsKLQkKKwogCWRhdGFfcG9ydCA9IGlvX3BvcnQgKzE7Ci0JCisKIAlpZihpbml0X21lZGlhdmlzaW9uKCkpCiAJewogCQlwcmludGsoS0VSTl9JTkZPICJCb2FyZCBub3QgZm91bmQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCW1lbWNweSgmcG1zX2RldmljZSwgJnBtc190ZW1wbGF0ZSwgc2l6ZW9mKHBtc190ZW1wbGF0ZSkpOwotCWluaXRfTVVURVgoJnBtc19kZXZpY2UubG9jayk7CisJbXV0ZXhfaW5pdCgmcG1zX2RldmljZS5sb2NrKTsKIAlwbXNfZGV2aWNlLmhlaWdodD0yNDA7CiAJcG1zX2RldmljZS53aWR0aD0zMjA7CiAJcG1zX3N3c2Vuc2UoNzUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA4NCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvcHdjL01ha2VmaWxlCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9NYWtlZmlsZQppbmRleCAyZDkzYTc3Li44MzI2Njg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDYgQEAKIGVuZGlmCiAKIGNsZWFuOgotCXJtIC1mICouW29hc10gLiouZmxhZ3MgKi5rbyAuKi5jbWQgLiouZCAuKi50bXAgKi5tb2QuYyAKKwlybSAtZiAqLltvYXNdIC4qLmZsYWdzICoua28gLiouY21kIC4qLmQgLioudG1wICoubW9kLmMKIAlybSAtcmYgLnRtcF92ZXJzaW9ucwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcGhpbGlwcy50eHQgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9waGlsaXBzLnR4dApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9wd2MvcGhpbGlwcy50eHQKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3BoaWxpcHMudHh0CmluZGV4IDA0YTY0MGQuLjExZjc1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9waGlsaXBzLnR4dAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9waGlsaXBzLnR4dApAQCAtNDcsMTcgKzQ3LDE3IEBACiBzaXplCiAgICBDYW4gYmUgb25lIG9mICdzcWNpZicsICdxc2lmJywgJ3FjaWYnLCAnc2lmJywgJ2NpZicgb3IKICAgICd2Z2EnLCBmb3IgYW4gaW1hZ2Ugc2l6ZSBvZiByZXNwLiAxMjh4OTYsIDE2MHgxMjAsIDE3NngxNDQsCi0gICAzMjB4MjQwLCAzNTJ4Mjg4IGFuZCA2NDB4NDgwIChvZiBjb3Vyc2UsIG9ubHkgZm9yIHRob3NlIGNhbWVyYXMgdGhhdCAKKyAgIDMyMHgyNDAsIDM1MngyODggYW5kIDY0MHg0ODAgKG9mIGNvdXJzZSwgb25seSBmb3IgdGhvc2UgY2FtZXJhcyB0aGF0CiAgICBzdXBwb3J0IHRoZXNlIHJlc29sdXRpb25zKS4KIAogZnBzCiAgICBTcGVjaWZpZXMgdGhlIGRlc2lyZWQgZnJhbWVyYXRlLiBJcyBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiA0LTMwLgogCiBmYnVmcwotICAgVGhpcyBwYXJhbXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBpbnRlcm5hbCBidWZmZXJzIHRvIHVzZSBmb3Igc3RvcmluZyAKLSAgIGZyYW1lcyBmcm9tIHRoZSBjYW0uIFRoaXMgd2lsbCBoZWxwIGlmIHRoZSBwcm9jZXNzIHRoYXQgcmVhZHMgaW1hZ2VzIGZyb20gCi0gICB0aGUgY2FtIGlzIGEgYml0IHNsb3cgb3IgbW9tZW50YXJlbHkgYnVzeS4gSG93ZXZlciwgb24gc2xvdyBtYWNoaW5lcyBpdCAKLSAgIG9ubHkgaW50cm9kdWNlcyBsYWcsIHNvIGNob29zZSBjYXJlZnVsbHkuIFRoZSBkZWZhdWx0IGlzIDMsIHdoaWNoIGlzIAorICAgVGhpcyBwYXJhbXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBpbnRlcm5hbCBidWZmZXJzIHRvIHVzZSBmb3Igc3RvcmluZworICAgZnJhbWVzIGZyb20gdGhlIGNhbS4gVGhpcyB3aWxsIGhlbHAgaWYgdGhlIHByb2Nlc3MgdGhhdCByZWFkcyBpbWFnZXMgZnJvbQorICAgdGhlIGNhbSBpcyBhIGJpdCBzbG93IG9yIG1vbWVudGFyZWx5IGJ1c3kuIEhvd2V2ZXIsIG9uIHNsb3cgbWFjaGluZXMgaXQKKyAgIG9ubHkgaW50cm9kdWNlcyBsYWcsIHNvIGNob29zZSBjYXJlZnVsbHkuIFRoZSBkZWZhdWx0IGlzIDMsIHdoaWNoIGlzCiAgICByZWFzb25hYmxlLiBZb3UgY2FuIHNldCBpdCBiZXR3ZWVuIDIgYW5kIDUuCiAKIG1idWZzCkBAIC02NSw5ICs2NSw5IEBACiAgICBidWZmZXJzIHRvIHJlc2VydmUgZm9yIG1tYXAoKSwgVklESU9DQ0dNQlVGLCBWSURJT0NNQ0FQVFVSRSBhbmQgZnJpZW5kcy4KICAgIFRoZSBkZWZhdWx0IGlzIDIsIHdoaWNoIGlzIGFkZXF1YXRlIGZvciBtb3N0IGFwcGxpY2F0aW9ucyAoZG91YmxlCiAgICBidWZmZXJpbmcpLgotICAgICAgCisKICAgIFNob3VsZCB5b3UgZXhwZXJpZW5jZSBhIGxvdCBvZiAnRHVtcGluZyBmcmFtZS4uLicgbWVzc2FnZXMgZHVyaW5nCi0gICBncmFiYmluZyB3aXRoIGEgdG9vbCB0aGF0IHVzZXMgbW1hcCgpLCB5b3UgbWlnaHQgd2FudCB0byBpbmNyZWFzZSBpZi4gCisgICBncmFiYmluZyB3aXRoIGEgdG9vbCB0aGF0IHVzZXMgbW1hcCgpLCB5b3UgbWlnaHQgd2FudCB0byBpbmNyZWFzZSBpZi4KICAgIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgcmVhbGx5IGJ1ZmZlciBpbWFnZXMsIGl0IGp1c3QgZ2l2ZXMgeW91IGEgYml0IG1vcmUKICAgIHNsYWNrIHdoZW4geW91ciBwcm9ncmFtIGlzIGJlaGluZC4gQnV0IHlvdSBuZWVkIGEgbXVsdGktdGhyZWFkZWQgb3IKICAgIGZvcmtlZCBwcm9ncmFtIHRvIHJlYWxseSB0YWtlIGFkdmFudGFnZSBvZiB0aGVzZSBidWZmZXJzLgpAQCAtODgsMTUgKzg4LDE1IEBACiAKIGNvbXByZXNzaW9uIChvbmx5IHVzZWZ1bCB3aXRoIHRoZSBwbHVnaW4pCiAgICBXaXRoIHRoaXMgb3B0aW9uIHlvdSBjYW4gY29udHJvbCB0aGUgY29tcHJlc3Npb24gZmFjdG9yIHRoYXQgdGhlIGNhbWVyYQotICAgdXNlcyB0byBzcXVlZXplIHRoZSBpbWFnZSB0aHJvdWdoIHRoZSBVU0IgYnVzLiBZb3UgY2FuIHNldCB0aGUgCisgICB1c2VzIHRvIHNxdWVlemUgdGhlIGltYWdlIHRocm91Z2ggdGhlIFVTQiBidXMuIFlvdSBjYW4gc2V0IHRoZQogICAgcGFyYW1ldGVyIGJldHdlZW4gMCBhbmQgMzoKICAgICAgMCA9IHByZWZlciB1bmNvbXByZXNzZWQgaW1hZ2VzOyBpZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMgbm90IGF2YWlsYWJsZQotICAgICAgICAgaW4gYW4gdW5jb21wcmVzc2VkIGZvcm1hdCwgdGhlIGRyaXZlciB3aWxsIHNpbGVudGx5IHN3aXRjaCB0byBsb3cKLSAgICAgICAgIGNvbXByZXNzaW9uLgorCSBpbiBhbiB1bmNvbXByZXNzZWQgZm9ybWF0LCB0aGUgZHJpdmVyIHdpbGwgc2lsZW50bHkgc3dpdGNoIHRvIGxvdworCSBjb21wcmVzc2lvbi4KICAgICAgMSA9IGxvdyBjb21wcmVzc2lvbi4KICAgICAgMiA9IG1lZGl1bSBjb21wcmVzc2lvbi4KICAgICAgMyA9IGhpZ2ggY29tcHJlc3Npb24uCi0gICAgICAKKwogICAgSGlnaCBjb21wcmVzc2lvbiB0YWtlcyBsZXNzIGJhbmR3aWR0aCBvZiBjb3Vyc2UsIGJ1dCBpdCBjb3VsZCBhbHNvCiAgICBpbnRyb2R1Y2Ugc29tZSB1bndhbnRlZCBhcnRlZmFjdHMuIFRoZSBkZWZhdWx0IGlzIDIsIG1lZGl1bSBjb21wcmVzc2lvbi4KICAgIFNlZSB0aGUgRkFRIG9uIHRoZSB3ZWJzaXRlIGZvciBhbiBvdmVydmlldyBvZiB3aGljaCBtb2RlcyByZXF1aXJlCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgIHRoaXMgaXMgbGV0IHRoZSBMRUQgYmxpbmsgd2hpbGUgdGhlIGNhbWVyYSBpcyBpbiB1c2UuIFRoaXM6CiAKICAgICAgbGVkcz01MDAsNTAwCi0gICAgICAKKwogICAgd2lsbCBibGluayB0aGUgTEVEIG9uY2UgZXZlcnkgc2Vjb25kLiBCdXQgd2l0aDoKIAogICAgICBsZWRzPTAsMApAQCAtMTIzLDcgKzEyMyw3IEBACiAgICB3aGVuIHRoZSBjYW1lcmEgaXMgbm90IHVzZWQgYW55bW9yZS4KIAogICAgVGhpcyBwYXJhbWV0ZXIgd29ya3Mgb25seSB3aXRoIHRoZSBUb1VDYW0gcmFuZ2Ugb2YgY2FtZXJhcyAoNzIwLCA3MzAsIDc0MCwKLSAgIDc1MCkgYW5kIE9FTXMuIEZvciBvdGhlciBjYW1lcmFzIHRoaXMgY29tbWFuZCBpcyBzaWxlbnRseSBpZ25vcmVkLCBhbmQgCisgICA3NTApIGFuZCBPRU1zLiBGb3Igb3RoZXIgY2FtZXJhcyB0aGlzIGNvbW1hbmQgaXMgc2lsZW50bHkgaWdub3JlZCwgYW5kCiAgICB0aGUgTEVEIGNhbm5vdCBiZSBjb250cm9sbGVkLgogCiAgICBGaW5hbGx5OiB0aGlzIHBhcmFtZXRlcnMgZG9lcyBub3QgdGFrZSBlZmZlY3QgVU5USUwgdGhlIGZpcnN0IHRpbWUgeW91CkBAIC0xNDQsMzUgKzE0NCwzNSBAQAogICAgZm9ybWF0OgogCiAgICAgICBbdHlwZVsuc2VyaWFsbnVtYmVyXTpdbm9kZQotICAgICAgCisKICAgIFRoZSBzcXVhcmUgYnJhY2tldHMgbWVhbiB0aGF0IGJvdGggdGhlIHR5cGUgYW5kIHRoZSBzZXJpYWxudW1iZXIgYXJlCiAgICBvcHRpb25hbCwgYnV0IGEgc2VyaWFsbnVtYmVyIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aG91dCBhIHR5cGUgKHdoaWNoCiAgICB3b3VsZCBiZSByYXRoZXIgcG9pbnRsZXNzKS4gVGhlIHNlcmlhbG51bWJlciBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgdHlwZQogICAgYnkgYSAnLic7IHRoZSBub2RlIG51bWJlciBieSBhICc6Jy4KLSAgIAorCiAgICBUaGlzIHNvbWV3aGF0IGNyeXB0aWMgc3ludGF4IGlzIGJlc3QgZXhwbGFpbmVkIGJ5IGEgZmV3IGV4YW1wbGVzOgogCiAgICAgIGRldl9oaW50PTMsNSAgICAgICAgICAgICAgVGhlIGZpcnN0IGRldGVjdGVkIGNhbSBnZXRzIGFzc2lnbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL2Rldi92aWRlbzMsIHRoZSBzZWNvbmQgL2Rldi92aWRlbzUuIEFueQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIGNhbWVyYXMgd2lsbCBnZXQgdGhlIGZpcnN0IGZyZWUgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHNsb3QgKHNlZSBiZWxvdykuCisJCQkgICAgICAgL2Rldi92aWRlbzMsIHRoZSBzZWNvbmQgL2Rldi92aWRlbzUuIEFueQorCQkJICAgICAgIG90aGVyIGNhbWVyYXMgd2lsbCBnZXQgdGhlIGZpcnN0IGZyZWUKKwkJCSAgICAgICBhdmFpbGFibGUgc2xvdCAoc2VlIGJlbG93KS4KIAogICAgICBkZXZfaGludD02NDU6MSw2ODA6MiAgICAgIFRoZSBQQ0E2NDUgY2FtZXJhIHdpbGwgZ2V0IC9kZXYvdmlkZW8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhIFBDVkM2ODAgL2Rldi92aWRlbzIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgIGRldl9oaW50PTY0NS4wMTIzOjMsNjQ1LjQ1Njc6MAlUaGUgUENBNjQ1IGNhbWVyYSB3aXRoIHNlcmlhbG51bWJlciAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMTIzIGdvZXMgdG8gL2Rldi92aWRlbzMsIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhIG1vZGVsIHdpdGggdGhlIDQ1Njcgc2VyaWFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0cyAvZGV2L3ZpZGVvMC4KKwkJCSAgICAgICBhbmQgYSBQQ1ZDNjgwIC9kZXYvdmlkZW8yLgogCi0gICAgIGRldl9oaW50PTc1MDoxLDQsNSw2ICAgICAgIFRoZSBQQ1ZDNzUwIGNhbWVyYSB3aWxsIGdldCAvZGV2L3ZpZGVvMSwgdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IDMgUGhpbGlwcyBjYW1zIHdpbGwgdXNlIC9kZXYvdmlkZW80IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIC9kZXYvdmlkZW82LgorICAgICBkZXZfaGludD02NDUuMDEyMzozLDY0NS40NTY3OjAJVGhlIFBDQTY0NSBjYW1lcmEgd2l0aCBzZXJpYWxudW1iZXIKKwkJCQkJMDEyMyBnb2VzIHRvIC9kZXYvdmlkZW8zLCB0aGUgc2FtZQorCQkJCQljYW1lcmEgbW9kZWwgd2l0aCB0aGUgNDU2NyBzZXJpYWwKKwkJCQkJZ2V0cyAvZGV2L3ZpZGVvMC4KKworICAgICBkZXZfaGludD03NTA6MSw0LDUsNiAgICAgICBUaGUgUENWQzc1MCBjYW1lcmEgd2lsbCBnZXQgL2Rldi92aWRlbzEsIHRoZQorCQkJCW5leHQgMyBQaGlsaXBzIGNhbXMgd2lsbCB1c2UgL2Rldi92aWRlbzQKKwkJCQl0aHJvdWdoIC9kZXYvdmlkZW82LgogCiAgICBTb21lIHBvaW50cyB3b3J0aCBrbm93aW5nOgotICAgLSBTZXJpYWxudW1iZXJzIGFyZSBjYXNlIHNlbnNpdGl2ZSBhbmQgbXVzdCBiZSB3cml0dGVuIGZ1bGwsIGluY2x1ZGluZyAKKyAgIC0gU2VyaWFsbnVtYmVycyBhcmUgY2FzZSBzZW5zaXRpdmUgYW5kIG11c3QgYmUgd3JpdHRlbiBmdWxsLCBpbmNsdWRpbmcKICAgICAgbGVhZGluZyB6ZXJvZXMgKGl0J3MgdHJlYXRlZCBhcyBhIHN0cmluZykuCi0gICAtIElmIGEgZGV2aWNlIG5vZGUgaXMgYWxyZWFkeSBvY2N1cGllZCwgcmVnaXN0cmF0aW9uIHdpbGwgZmFpbCBhbmQgCisgICAtIElmIGEgZGV2aWNlIG5vZGUgaXMgYWxyZWFkeSBvY2N1cGllZCwgcmVnaXN0cmF0aW9uIHdpbGwgZmFpbCBhbmQKICAgICAgdGhlIHdlYmNhbSBpcyBub3QgYXZhaWxhYmxlLgogICAgLSBZb3UgY2FuIGhhdmUgdXAgdG8gNjQgdmlkZW8gZGV2aWNlczsgYmUgc3VyZSB0byBtYWtlIGVub3VnaCBkZXZpY2UKICAgICAgbm9kZXMgaW4gL2RldiBpZiB5b3Ugd2FudCB0byBzcHJlYWQgdGhlIG51bWJlcnMgKHRoaXMgZG9lcyBub3QgYXBwbHkKQEAgLTE4NiwxMyArMTg2LDEzIEBACiAgICBrZXJuZWwgbG9nIGF0IGRlYnVnIGxldmVsLgogCiAgICBUaGUgdHJhY2UgdmFyaWFibGUgaXMgYSBiaXRtYXNrOyBlYWNoIGJpdCByZXByZXNlbnRzIGEgY2VydGFpbiBmZWF0dXJlLgotICAgSWYgeW91IHdhbnQgdG8gdHJhY2Ugc29tZXRoaW5nLCBsb29rIHVwIHRoZSBiaXQgdmFsdWUocykgaW4gdGhlIHRhYmxlIAorICAgSWYgeW91IHdhbnQgdG8gdHJhY2Ugc29tZXRoaW5nLCBsb29rIHVwIHRoZSBiaXQgdmFsdWUocykgaW4gdGhlIHRhYmxlCiAgICBiZWxvdywgYWRkIHRoZSB2YWx1ZXMgdG9nZXRoZXIgYW5kIHN1cHBseSB0aGF0IHRvIHRoZSB0cmFjZSB2YXJpYWJsZS4KIAogICAgVmFsdWUgIFZhbHVlICAgRGVzY3JpcHRpb24JCQkJCSAgIERlZmF1bHQKICAgIChkZWMpICAoaGV4KQogICAgICAgIDEgICAgMHgxICAgTW9kdWxlIGluaXRpYWxpemF0aW9uOyB0aGlzIHdpbGwgbG9nIG1lc3NhZ2VzICAgICAgIE9uCi0gICAgICAgICAgICAgICAgICB3aGlsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgdGhlIG1vZHVsZQorCQkgIHdoaWxlIGxvYWRpbmcgYW5kIHVubG9hZGluZyB0aGUgbW9kdWxlCiAKICAgICAgICAyICAgIDB4MiAgIHByb2JlKCkgYW5kIGRpc2Nvbm5lY3QoKSB0cmFjZXMgICAgICAgICAgICAgICAgICAgICBPbgogCkBAIC0yMDMsNyArMjAzLDcgQEAKICAgICAgIDE2ICAgMHgxMCAgIE1lbW9yeSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMsIGV0Yy4gICAgICAgICAgICAgICAgICBPZmYKIAogICAgICAgMzIgICAweDIwICAgU2hvd2luZyB1bmRlcmZsb3csIG92ZXJmbG93IGFuZCBEdW1waW5nIGZyYW1lICAgICAgIE9uCi0gICAgICAgICAgICAgICAgICBtZXNzYWdlcworCQkgIG1lc3NhZ2VzCiAKICAgICAgIDY0ICAgMHg0MCAgIFNob3cgdmlld3BvcnQgYW5kIGltYWdlIHNpemVzICAgICAgICAgICAgICAgICAgICAgICBPZmYKIApAQCAtMjE3LDcgKzIxNyw3IEBACiAKIAogRXhhbXBsZToKLSAgICAgCisKICAgICAgIyBtb2Rwcm9iZSBwd2Mgc2l6ZT1jaWYgZnBzPTE1IHBvd2VyX3NhdmU9MQogCiBUaGUgZmJ1ZnMsIG1idWZzIGFuZCB0cmFjZSBwYXJhbWV0ZXJzIGFyZSBnbG9iYWwgYW5kIGFwcGx5IHRvIGFsbCBjb25uZWN0ZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWN0cmwuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwppbmRleCAzZWJiNmU5Yy4uNGJhNTQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWN0cmwuYwpAQCAtMzEsMTggKzMxLDE3IEBACiAKIC8qCiAgICBDaGFuZ2VzCi0gICAyMDAxLzA4LzAzICBBbHZhcmFkbyAgIEFkZGVkIG1ldGhvZHMgZm9yIGNoYW5naW5nIHdoaXRlIGJhbGFuY2UgYW5kIAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWQvZ3JlZW4gZ2FpbnMKKyAgIDIwMDEvMDgvMDMgIEFsdmFyYWRvICAgQWRkZWQgbWV0aG9kcyBmb3IgY2hhbmdpbmcgd2hpdGUgYmFsYW5jZSBhbmQKKwkJCSAgcmVkL2dyZWVuIGdhaW5zCiAgKi8KIAogLyogQ29udHJvbCBmdW5jdGlvbnMgZm9yIHRoZSBjYW07IGJyaWdodG5lc3MsIGNvbnRyYXN0LCB2aWRlbyBtb2RlLCBldGMuICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4gCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNlbmRpZgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSAKKwogI2luY2x1ZGUgInB3Yy5oIgogI2luY2x1ZGUgInB3Yy1pb2N0bC5oIgogI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCkBAIC0xMTcsMTMgKzExNiwxMyBAQAogCSJTSUYiLAogCSJDSUYiLAogCSJWR0EiLAotfTsgIAorfTsKIAogLyoqKioqKioqLwogCi0vKiBFbnRyaWVzIGZvciB0aGUgTmFsYSAoNjQ1LzY0NikgY2FtZXJhOyB0aGUgTmFsYSBkb2Vzbid0IGhhdmUgY29tcHJlc3Npb24gCisvKiBFbnRyaWVzIGZvciB0aGUgTmFsYSAoNjQ1LzY0NikgY2FtZXJhOyB0aGUgTmFsYSBkb2Vzbid0IGhhdmUgY29tcHJlc3Npb24KICAgIHByZWZlcmVuY2VzLCBzbyB5b3UgZWl0aGVyIGdldCBjb21wcmVzc2VkIG9yIG5vbi1jb21wcmVzc2VkIHN0cmVhbXMuCi0gICAKKwogICAgQW4gYWx0ZXJuYXRlIHZhbHVlIG9mIDAgbWVhbnMgdGhpcyBtb2RlIGlzIG5vdCBhdmFpbGFibGUgYXQgYWxsLgogICovCiAKQEAgLTIwNiwxMyArMjA1LDEzIEBACiAJeyAvKiBjbG9zZXN0IG1hdGNoIG9mIGZyYW1lcmF0ZSAqLwogCSAgIDAsICAwLCAgMCwgIDAsICA0LCAgLyogIDAtNCAgKi8KIAkgICA1LCAgNSwgIDcsICA3LCAxMCwgIC8qICA1LTkgICovCi0gICAgICAgICAgMTAsIDEwLCAxMiwgMTIsIDE1LCAgLyogMTAtMTQgKi8KLSAgICAgICAgICAxNSwgMTUsIDE1LCAyMCwgMjAsICAvKiAxNS0xOSAqLwotICAgICAgICAgIDIwLCAyMCwgMjAsIDI0LCAyNCwgIC8qIDIwLTI0ICovCi0gICAgICAgICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAgLyogMjUtMjkgKi8KLSAgICAgICAgICAyNCAgICAgICAgICAgICAgICAgICAvKiAzMCAgICAqLworCSAgMTAsIDEwLCAxMiwgMTIsIDE1LCAgLyogMTAtMTQgKi8KKwkgIDE1LCAxNSwgMTUsIDIwLCAyMCwgIC8qIDE1LTE5ICovCisJICAyMCwgMjAsIDIwLCAyNCwgMjQsICAvKiAyMC0yNCAqLworCSAgMjQsIDI0LCAyNCwgMjQsIDI0LCAgLyogMjUtMjkgKi8KKwkgIDI0ICAgICAgICAgICAgICAgICAgIC8qIDMwICAgICovCiAJfTsKLQlpbnQgZnJhbWVzMnRhYmxlWzMxXSA9IAorCWludCBmcmFtZXMydGFibGVbMzFdID0KIAl7IDAsIDAsIDAsIDAsIDAsIC8qICAwLTQgICovCiAJICAxLCAxLCAxLCAyLCAyLCAvKiAgNS05ICAqLwogCSAgMywgMywgNCwgNCwgNCwgLyogMTAtMTQgKi8KQEAgLTIyMSw3ICsyMjAsNyBAQAogCSAgNywgNywgNywgNywgNywgLyogMjUtMjkgKi8KIAkgIDcgICAgICAgICAgICAgIC8qIDMwICAgICovCiAJfTsKLQkKKwogCWlmIChzaXplIDwgMCB8fCBzaXplID4gUFNaX0NJRiB8fCBmcmFtZXMgPCA0IHx8IGZyYW1lcyA+IDI1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlmcmFtZXMgPSBmcmFtZXMyZnJhbWVzW2ZyYW1lc107CkBAIC0yMzMsNyArMjMyLDcgQEAKIAlpZiAocEVudHJ5LT5jb21wcmVzc2VkKQogCQlyZXR1cm4gLUVOT0VOVDsgLyogTm90IHN1cHBvcnRlZC4gKi8KIAotCW1lbWNweShidWYsIHBFbnRyeS0+bW9kZSwgMyk7CQorCW1lbWNweShidWYsIHBFbnRyeS0+bW9kZSwgMyk7CiAJcmV0ID0gc2VuZF92aWRlb19jb21tYW5kKHBkZXYtPnVkZXYsIHBkZXYtPnZlbmRwb2ludCwgYnVmLCAzKTsKIAlpZiAocmV0IDwgMCkgewogCQlEZWJ1ZygiRmFpbGVkIHRvIHNlbmQgdmlkZW8gY29tbWFuZC4uLiAlZFxuIiwgcmV0KTsKQEAgLTI1OCw3ICsyNTcsNyBAQAogCSAgICAgICBicmVhazsKIAkgICB9CiAJfQotIAorCiAJcGRldi0+Y21kX2xlbiA9IDM7CiAJbWVtY3B5KHBkZXYtPmNtZF9idWYsIGJ1ZiwgMyk7CiAKQEAgLTM1MywxMyArMzUyLDEzIEBACiAJLyogc3BlY2lhbCBjYXNlOiBWR0EgQCA1IGZwcyBhbmQgc25hcHNob3QgaXMgcmF3IGJheWVyIG1vZGUgKi8KIAlpZiAoc2l6ZSA9PSBQU1pfVkdBICYmIGZyYW1lcyA9PSA1ICYmIHNuYXBzaG90KQogCXsKLQkJLyogT25seSBhdmFpbGFibGUgaW4gY2FzZSB0aGUgcmF3IHBhbGV0dGUgaXMgc2VsZWN0ZWQgb3IgCi0JCSAgIHdlIGhhdmUgdGhlIGRlY29tcHJlc3NvciBhdmFpbGFibGUuIFRoaXMgbW9kZSBpcyAKLQkJICAgb25seSBhdmFpbGFibGUgaW4gY29tcHJlc3NlZCBmb3JtIAorCQkvKiBPbmx5IGF2YWlsYWJsZSBpbiBjYXNlIHRoZSByYXcgcGFsZXR0ZSBpcyBzZWxlY3RlZCBvcgorCQkgICB3ZSBoYXZlIHRoZSBkZWNvbXByZXNzb3IgYXZhaWxhYmxlLiBUaGlzIG1vZGUgaXMKKwkJICAgb25seSBhdmFpbGFibGUgaW4gY29tcHJlc3NlZCBmb3JtCiAJCSovCiAJCWlmIChwZGV2LT52cGFsZXR0ZSA9PSBWSURFT19QQUxFVFRFX1JBVykKIAkJewotCSAgICAgICAgICAgICAgICBJbmZvKCJDaG9vc2luZyBWR0EvNSBCQVlFUiBtb2RlICglZCkuXG4iLCBwZGV2LT52cGFsZXR0ZSk7CisJCQlJbmZvKCJDaG9vc2luZyBWR0EvNSBCQVlFUiBtb2RlICglZCkuXG4iLCBwZGV2LT52cGFsZXR0ZSk7CiAJCQlwQ2hvb3NlID0gJlJhd0VudHJ5OwogCQl9CiAJCWVsc2UKQEAgLTM2OSw5ICszNjgsOSBAQAogCX0KIAllbHNlCiAJewotICAgICAgICAJLyogRmluZCBhIHN1cHBvcnRlZCBmcmFtZXJhdGUgd2l0aCBwcm9ncmVzc2l2ZWx5IGhpZ2hlciBjb21wcmVzc2lvbiByYXRpb3MKKwkJLyogRmluZCBhIHN1cHBvcnRlZCBmcmFtZXJhdGUgd2l0aCBwcm9ncmVzc2l2ZWx5IGhpZ2hlciBjb21wcmVzc2lvbiByYXRpb3MKIAkJICAgaWYgdGhlIHByZWZlcnJlZCByYXRpbyBpcyBub3QgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgIFNraXAgdGhpcyBzdGVwIHdoZW4gdXNpbmcgUkFXIG1vZGVzLgorCQkgICBTa2lwIHRoaXMgc3RlcCB3aGVuIHVzaW5nIFJBVyBtb2Rlcy4KIAkJKi8KIAkJd2hpbGUgKGNvbXByZXNzaW9uIDw9IDMpIHsKIAkJCXBDaG9vc2UgPSAmS2lhcmFfdGFibGVbc2l6ZV1bZnBzXVtjb21wcmVzc2lvbl07CkBAIC0zODQsNyArMzgzLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7IC8qIE5vdCBzdXBwb3J0ZWQuICovCiAKIAlEZWJ1ZygiVXNpbmcgYWx0ZXJuYXRlIHNldHRpbmcgJWQuXG4iLCBwQ2hvb3NlLT5hbHRlcm5hdGUpOwotCQorCiAJLyogdXNiX2NvbnRyb2xfbXNnIHdvbid0IHRha2Ugc3RhdGljbHkgYWxsb2NhdGVkIGFycmF5cyBhcyBhcmd1bWVudD8/ICovCiAJbWVtY3B5KGJ1ZiwgcENob29zZS0+bW9kZSwgMTIpOwogCWlmIChzbmFwc2hvdCkKQEAgLTQ2NCw5ICs0NjMsOSBAQAogICovCiBpbnQgcHdjX3NldF92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgaW50IHNuYXBzaG90KQogewotICAgICAgICBpbnQgcmV0LCBzaXplOworCWludCByZXQsIHNpemU7CiAKLSAgICAgICAgVHJhY2UoVFJBQ0VfRkxPVywgInNldF92aWRlb19tb2RlKCVkeCVkIEAgJWQsIHBhbGV0dGUgJWQpLlxuIiwgd2lkdGgsIGhlaWdodCwgZnJhbWVzLCBwZGV2LT52cGFsZXR0ZSk7CisJVHJhY2UoVFJBQ0VfRkxPVywgInNldF92aWRlb19tb2RlKCVkeCVkIEAgJWQsIHBhbGV0dGUgJWQpLlxuIiwgd2lkdGgsIGhlaWdodCwgZnJhbWVzLCBwZGV2LT52cGFsZXR0ZSk7CiAJc2l6ZSA9IHB3Y19kZWNvZGVfc2l6ZShwZGV2LCB3aWR0aCwgaGVpZ2h0KTsKIAlpZiAoc2l6ZSA8IDApIHsKIAkJRGVidWcoIkNvdWxkIG5vdCBmaW5kIHN1aXRhYmxlIHNpemUuXG4iKTsKQEAgLTQ3NCw3ICs0NzMsNyBAQAogCX0KIAlEZWJ1ZygiZGVjb2RlX3NpemUgPSAlZC5cbiIsIHNpemUpOwogCi0gICAgICAgIHJldCA9IC1FSU5WQUw7CisJcmV0ID0gLUVJTlZBTDsKIAlzd2l0Y2gocGRldi0+dHlwZSkgewogCWNhc2UgNjQ1OgogCWNhc2UgNjQ2OgpAQCAtNDg2LDcgKzQ4NSw3IEBACiAJY2FzZSA2OTA6CiAJCXJldCA9IHNldF92aWRlb19tb2RlX1RpbW9uKHBkZXYsIHNpemUsIGZyYW1lcywgY29tcHJlc3Npb24sIHNuYXBzaG90KTsKIAkJYnJlYWs7Ci0JCisKIAljYXNlIDcyMDoKIAljYXNlIDczMDoKIAljYXNlIDc0MDoKQEAgLTUxOCw3ICs1MTcsNyBAQAogCWNoYXIgYnVmOwogCWludCByZXQ7CiAKLQlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgQlJJR0hUTkVTU19GT1JNQVRURVIsIDEpOwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgQlJJR0hUTkVTU19GT1JNQVRURVIsIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXJldHVybiBidWYgPDwgOTsKQEAgLTU2Nyw3ICs1NjYsNyBAQAogewogCWNoYXIgYnVmOwogCWludCByZXQ7Ci0JCisKIAlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgR0FNTUFfRk9STUFUVEVSLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTYyMywxNCArNjIyLDE0IEBACiB7CiAJY2hhciBidWY7CiAJaW50IHJldDsKLQkKKwogCWlmIChtb2RlKQogCQlidWYgPSAweDA7IC8qIGF1dG8gKi8KIAllbHNlCiAJCWJ1ZiA9IDB4ZmY7IC8qIGZpeGVkICovCiAKIAlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgQUdDX01PREVfRk9STUFUVEVSLCAxKTsKLQkKKwogCWlmICghbW9kZSAmJiByZXQgPj0gMCkgewogCQlpZiAodmFsdWUgPCAwKQogCQkJdmFsdWUgPSAwOwpAQCAtNjQ4LDcgKzY0Nyw3IEBACiB7CiAJdW5zaWduZWQgY2hhciBidWY7CiAJaW50IHJldDsKLQkKKwogCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBBR0NfTU9ERV9GT1JNQVRURVIsIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtNjU5LDcgKzY1OCw3IEBACiAJCQlyZXR1cm4gcmV0OwogCQlpZiAoYnVmID4gMHgzRikKIAkJCWJ1ZiA9IDB4M0Y7Ci0JCSp2YWx1ZSA9IChidWYgPDwgMTApOwkJCisJCSp2YWx1ZSA9IChidWYgPDwgMTApOwogCX0KIAllbHNlIHsgLyogYXV0byAqLwogCQlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgUkVBRF9BR0NfRk9STUFUVEVSLCAxKTsKQEAgLTY4NCw3ICs2ODMsNyBAQAogCQlidWZbMF0gPSAweDA7CS8qIGF1dG8gKi8KIAllbHNlCiAJCWJ1ZlswXSA9IDB4ZmY7IC8qIGZpeGVkICovCi0JCisKIAlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgU0hVVFRFUl9NT0RFX0ZPUk1BVFRFUiwgMSk7CiAKIAlpZiAoIW1vZGUgJiYgcmV0ID49IDApIHsKQEAgLTcxNCw3ICs3MTMsNyBAQAogCQlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgUFJFU0VUX1NIVVRURVJfRk9STUFUVEVSLCAyKTsKIAl9CiAJcmV0dXJuIHJldDsKLX0JCit9CiAKIAogLyogUE9XRVIgKi8KQEAgLTc2NiwyMiArNzY1LDIyIEBACiAgICogMDI6IGZsdW9yZXNjZW50IGxpZ2h0aW5nCiAgICogMDM6IG1hbnVhbAogICAqIDA0OiBhdXRvCi0gICovIAorICAqLwogc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9hd2Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBtb2RlKQogewogCWNoYXIgYnVmOwogCWludCByZXQ7Ci0JCisKIAlpZiAobW9kZSA8IDApCiAJICAgIG1vZGUgPSAwOwotCQorCiAJaWYgKG1vZGUgPiA0KQogCSAgICBtb2RlID0gNDsKLQkKKwogCWJ1ZiA9IG1vZGUgJiAweDA3OyAvKiBqdXN0IHRoZSBsb3dlc3QgdGhyZWUgYml0cyAqLwotCQorCiAJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0NIUk9NX0NUTCwgV0JfTU9ERV9GT1JNQVRURVIsIDEpOwotCQorCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJcmV0dXJuIDA7CkBAIC03OTEsMTcgKzc5MCwxNyBAQAogewogCXVuc2lnbmVkIGNoYXIgYnVmOwogCWludCByZXQ7Ci0JCisKIAlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfQ0hST01fQ1RMLCBXQl9NT0RFX0ZPUk1BVFRFUiwgMSk7CiAKLQlpZiAocmV0IDwgMCkgCisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJcmV0dXJuIGJ1ZjsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9yZWRfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKQogewotICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZjsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKIAogCWlmICh2YWx1ZSA8IDApCiAJCXZhbHVlID0gMDsKQEAgLTgxNiw3ICs4MTUsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgYnVmOwogCWludCByZXQ7Ci0JCisKIAlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfQ0hST01fQ1RMLCBQUkVTRVRfTUFOVUFMX1JFRF9HQUlOX0ZPUk1BVFRFUiwgMSk7CiAJaWYgKHJldCA8IDApCiAJICAgIHJldHVybiByZXQ7CkBAIC04NDIsNyArODQxLDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0NIUk9NX0NUTCwgUFJFU0VUX01BTlVBTF9CTFVFX0dBSU5fRk9STUFUVEVSLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkgICAgcmV0dXJuIHJldDsKQEAgLTg1MiwxNCArODUxLDE0IEBACiAKIAogLyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBkaWZmZXJlbnQsIHNpbmNlIHRoZXkgb25seSByZWFkIHRoZQotICAgaW50ZXJuYWwgcmVkL2JsdWUgZ2FpbnMsIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbWFudWFsIAorICAgaW50ZXJuYWwgcmVkL2JsdWUgZ2FpbnMsIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbWFudWFsCiAgICBnYWlucyBzZXQgb3IgcmVhZCBhYm92ZS4KLSAqLyAgIAorICovCiBzdGF0aWMgaW5saW5lIGludCBwd2NfcmVhZF9yZWRfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICp2YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX1NUQVRVU19DVEwsIFJFQURfUkVEX0dBSU5fRk9STUFUVEVSLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTg3MSw3ICs4NzAsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgYnVmOwogCWludCByZXQ7Ci0JCisKIAlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgUkVBRF9CTFVFX0dBSU5fRk9STUFUVEVSLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTg4Myw3ICs4ODIsNyBAQAogc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF93Yl9zcGVlZChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHNwZWVkKQogewogCXVuc2lnbmVkIGNoYXIgYnVmOwotCQorCiAJLyogdXNlZnVsIHJhbmdlIGlzIDB4MDEuLjB4MjAgKi8KIAlidWYgPSBzcGVlZCAvIDB4N2YwOwogCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfQ0hST01fQ1RMLCBBV0JfQ09OVFJPTF9TUEVFRF9GT1JNQVRURVIsIDEpOwpAQCAtODkzLDcgKzg5Miw3IEBACiB7CiAJdW5zaWduZWQgY2hhciBidWY7CiAJaW50IHJldDsKLQkKKwogCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIEFXQl9DT05UUk9MX1NQRUVEX0ZPUk1BVFRFUiwgMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC05MDUsNyArOTA0LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfd2JfZGVsYXkoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBkZWxheSkKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKLQkKKwogCS8qIHVzZWZ1bCByYW5nZSBpcyAweDAxLi4weDNGICovCiAJYnVmID0gKGRlbGF5ID4+IDEwKTsKIAlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0NIUk9NX0NUTCwgQVdCX0NPTlRST0xfREVMQVlfRk9STUFUVEVSLCAxKTsKQEAgLTkxNSw3ICs5MTQsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgYnVmOwogCWludCByZXQ7Ci0JCisKIAlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfQ0hST01fQ1RMLCBBV0JfQ09OVFJPTF9ERUxBWV9GT1JNQVRURVIsIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtOTUxLDcgKzk1MCw3IEBACiB7CiAJdW5zaWduZWQgY2hhciBidWZbMl07CiAJaW50IHJldDsKLQkKKwogCWlmIChwZGV2LT50eXBlIDwgNzMwKSB7CiAJCSpvbl92YWx1ZSA9IC0xOwogCQkqb2ZmX3ZhbHVlID0gLTE7CkBAIC05NzAsNyArOTY5LDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKIAlpbnQgcmV0OwotCQorCiAJaWYgKGNvbnRvdXIgPCAwKQogCQlidWYgPSAweGZmOyAvKiBhdXRvIGNvbnRvdXIgb24gKi8KIAllbHNlCkBAIC05NzgsMTYgKzk3NywxNiBAQAogCXJldCA9IFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBBVVRPX0NPTlRPVVJfRk9STUFUVEVSLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQkKKwogCWlmIChjb250b3VyIDwgMCkKIAkJcmV0dXJuIDA7CiAJaWYgKGNvbnRvdXIgPiAweGZmZmYpCiAJCWNvbnRvdXIgPSAweGZmZmY7Ci0JCisKIAlidWYgPSAoY29udG91ciA+PiAxMCk7IC8qIGNvbnRvdXIgcHJlc2V0IGlzIFswLi4zZl0gKi8KIAlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgUFJFU0VUX0NPTlRPVVJfRk9STUFUVEVSLCAxKTsKLQlpZiAocmV0IDwgMCkJCi0JCXJldHVybiByZXQ7CQorCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCXJldHVybiAwOwogfQogCkBAIC05OTUsNyArOTk0LDcgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKIAlpbnQgcmV0OwotCQorCiAJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIEFVVE9fQ09OVE9VUl9GT1JNQVRURVIsIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMTAwMyw3ICsxMDAyLDcgQEAKIAlpZiAoYnVmID09IDApIHsKIAkJLyogYXV0byBtb2RlIG9mZiwgcXVlcnkgY3VycmVudCBwcmVzZXQgdmFsdWUgKi8KIAkJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIFBSRVNFVF9DT05UT1VSX0ZPUk1BVFRFUiwgMSk7Ci0JCWlmIChyZXQgPCAwKQkKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCQkqY29udG91ciA9IGJ1ZiA8PCAxMDsKIAl9CkBAIC0xMDE2LDcgKzEwMTUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9iYWNrbGlnaHQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBiYWNrbGlnaHQpCiB7CiAJdW5zaWduZWQgY2hhciBidWY7Ci0JCisKIAlpZiAoYmFja2xpZ2h0KQogCQlidWYgPSAweGZmOwogCWVsc2UKQEAgLTEwMjgsNyArMTAyNyw3IEBACiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKLQkKKwogCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBCQUNLX0xJR0hUX0NPTVBFTlNBVElPTl9GT1JNQVRURVIsIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMTA0MCw3ICsxMDM5LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfZmxpY2tlcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGZsaWNrZXIpCiB7CiAJdW5zaWduZWQgY2hhciBidWY7Ci0JCisKIAlpZiAoZmxpY2tlcikKIAkJYnVmID0gMHhmZjsKIAllbHNlCkBAIC0xMDUyLDcgKzEwNTEsNyBAQAogewogCWludCByZXQ7CiAJdW5zaWduZWQgY2hhciBidWY7Ci0JCisKIAlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIsIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMTA3Nyw3ICsxMDc2LDcgQEAKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgYnVmOwotCQorCiAJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIERZTkFNSUNfTk9JU0VfQ09OVFJPTF9GT1JNQVRURVIsIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMTA4OCw3ICsxMDg3LDcgQEAKIHN0YXRpYyBpbnQgcHdjX21wdF9yZXNldChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGZsYWdzKQogewogCXVuc2lnbmVkIGNoYXIgYnVmOwotCQorCiAJYnVmID0gZmxhZ3MgJiAweDAzOyAvLyBvbmx5IGxvd2VyIHR3byBiaXRzIGFyZSBjdXJyZW50bHkgdXNlZAogCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTVBUX0NUTCwgUFRfUkVTRVRfQ09OVFJPTF9GT1JNQVRURVIsIDEpOwogfQpAQCAtMTA5Niw3ICsxMDk1LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHB3Y19tcHRfc2V0X2FuZ2xlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgcGFuLCBpbnQgdGlsdCkKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKLQkKKwogCS8qIHNldCBuZXcgcmVsYXRpdmUgYW5nbGU7IGFuZ2xlcyBhcmUgZXhwcmVzc2VkIGluIGRlZ3JlZXMgKiAxMDAsCiAJICAgYnV0IGNhbSBhcyAuNSBkZWdyZWUgcmVzb2x1dGlvbiwgaGVuY2UgZGl2aWRlIGJ5IDIwMC4gQWxzbwogCSAgIHRoZSBhbmdsZSBtdXN0IGJlIG11bHRpcGxpZWQgYnkgNjQgYmVmb3JlIGl0J3Mgc2VuZCB0bwpAQCAtMTExNSw3ICsxMTE0LDcgQEAKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgYnVmWzVdOwotCQorCiAJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX01QVF9DVEwsIFBUX1NUQVRVU19GT1JNQVRURVIsIDUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMTEzMCwxNCArMTEyOSwxNCBAQAogewogCXVuc2lnbmVkIGNoYXIgYnVmOwogCWludCByZXQgPSAtMSwgcmVxdWVzdDsKLQkKKwogCWlmIChwZGV2LT50eXBlIDwgNjc1KQogCQlyZXF1ZXN0ID0gU0VOU09SX1RZUEVfRk9STUFUVEVSMTsKIAllbHNlIGlmIChwZGV2LT50eXBlIDwgNzMwKQogCQlyZXR1cm4gLTE7IC8qIFRoZSBWZXN0YSBzZXJpZXMgZG9lc24ndCBoYXZlIHRoaXMgY2FsbCAqLwogCWVsc2UKIAkJcmVxdWVzdCA9IFNFTlNPUl9UWVBFX0ZPUk1BVFRFUjI7Ci0JCisKIAlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgcmVxdWVzdCwgMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC0xMTY0LDIzICsxMTYzLDIzIEBACiAJCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JCisKIAljYXNlIFZJRElPQ1BXQ1NVU0VSOgogCXsKIAkJaWYgKHB3Y19zYXZlX3VzZXIocGRldikpCiAJCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JCQorCiAJY2FzZSBWSURJT0NQV0NGQUNUT1JZOgogCXsKIAkJaWYgKHB3Y19yZXN0b3JlX2ZhY3RvcnkocGRldikpCiAJCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9Ci0JCisKIAljYXNlIFZJRElPQ1BXQ1NDUVVBTDoKLQl7CQorCXsKIAkJaW50ICpxdWFsID0gYXJnOwogCiAJCWlmICgqcXVhbCA8IDAgfHwgKnF1YWwgPiAzKQpAQCAtMTE5MSwxNCArMTE5MCwxNCBAQAogCQkJcGRldi0+dmNvbXByZXNzaW9uID0gKnF1YWw7CiAJCWJyZWFrOwogCX0KLQkKKwogCWNhc2UgVklESU9DUFdDR0NRVUFMOgogCXsKIAkJaW50ICpxdWFsID0gYXJnOwogCQkqcXVhbCA9IHBkZXYtPnZjb21wcmVzc2lvbjsKIAkJYnJlYWs7CiAJfQotCQorCiAJY2FzZSBWSURJT0NQV0NQUk9CRToKIAl7CiAJCXN0cnVjdCBwd2NfcHJvYmUgKnByb2JlID0gYXJnOwpAQCAtMTIyMSwyNyArMTIyMCwyNyBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCQorCiAJY2FzZSBWSURJT0NQV0NHQUdDOgogCXsKIAkJaW50ICphZ2MgPSBhcmc7Ci0JCQorCiAJCWlmIChwd2NfZ2V0X2FnYyhwZGV2LCBhZ2MpKQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQotCQorCiAJY2FzZSBWSURJT0NQV0NTU0hVVFRFUjoKIAl7CiAJCWludCAqc2h1dHRlcl9zcGVlZCA9IGFyZzsKIAkJcmV0ID0gcHdjX3NldF9zaHV0dGVyX3NwZWVkKHBkZXYsICpzaHV0dGVyX3NwZWVkIDwgMCA/IDEgOiAwLCAqc2h1dHRlcl9zcGVlZCk7CiAJCWJyZWFrOwogCX0KLQkKLSAgICAgICAgY2FzZSBWSURJT0NQV0NTQVdCOgorCisJY2FzZSBWSURJT0NQV0NTQVdCOgogCXsKIAkJc3RydWN0IHB3Y193aGl0ZWJhbGFuY2UgKndiID0gYXJnOwotCQkKKwogCQlyZXQgPSBwd2Nfc2V0X2F3YihwZGV2LCB3Yi0+bW9kZSk7CiAJCWlmIChyZXQgPj0gMCAmJiB3Yi0+bW9kZSA9PSBQV0NfV0JfTUFOVUFMKSB7CiAJCQlwd2Nfc2V0X3JlZF9nYWluKHBkZXYsIHdiLT5tYW51YWxfcmVkKTsKQEAgLTEyNzEsMTggKzEyNzAsMTggQEAKIAkJCQlyZXQgPSBwd2NfcmVhZF9yZWRfZ2FpbihwZGV2LCAmd2ItPnJlYWRfcmVkKTsKIAkJCQlpZiAocmV0IDwgMCkKIAkJCQkJYnJlYWs7Ci0gCQkJCXJldCA9IHB3Y19yZWFkX2JsdWVfZ2FpbihwZGV2LCAmd2ItPnJlYWRfYmx1ZSk7Ci0gCQkJCWlmIChyZXQgPCAwKQotIAkJCQkJYnJlYWs7CisJCQkJcmV0ID0gcHdjX3JlYWRfYmx1ZV9nYWluKHBkZXYsICZ3Yi0+cmVhZF9ibHVlKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CiAJfQotCQorCiAJY2FzZSBWSURJT0NQV0NTQVdCU1BFRUQ6CiAJewogCQlzdHJ1Y3QgcHdjX3diX3NwZWVkICp3YnMgPSBhcmc7Ci0JCQorCiAJCWlmICh3YnMtPmNvbnRyb2xfc3BlZWQgPiAwKSB7CiAJCQlyZXQgPSBwd2Nfc2V0X3diX3NwZWVkKHBkZXYsIHdicy0+Y29udHJvbF9zcGVlZCk7CiAJCX0KQEAgLTEyOTEsMTEgKzEyOTAsMTEgQEAKIAkJfQogCQlicmVhazsKIAl9Ci0JCisKIAljYXNlIFZJRElPQ1BXQ0dBV0JTUEVFRDoKIAl7CiAJCXN0cnVjdCBwd2Nfd2Jfc3BlZWQgKndicyA9IGFyZzsKLQkJCisKIAkJcmV0ID0gcHdjX2dldF93Yl9zcGVlZChwZGV2LCAmd2JzLT5jb250cm9sX3NwZWVkKTsKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKQEAgLTEzMDUsNyArMTMwNCw3IEBACiAJCWJyZWFrOwogCX0KIAotICAgICAgICBjYXNlIFZJRElPQ1BXQ1NMRUQ6CisJY2FzZSBWSURJT0NQV0NTTEVEOgogCXsKIAkJc3RydWN0IHB3Y19sZWRzICpsZWRzID0gYXJnOwogCQlyZXQgPSBwd2Nfc2V0X2xlZHMocGRldiwgbGVkcy0+bGVkX29uLCBsZWRzLT5sZWRfb2ZmKTsKQEAgLTEzMjYsMTQgKzEzMjUsMTQgQEAKIAkJcmV0ID0gcHdjX3NldF9jb250b3VyKHBkZXYsICpjb250b3VyKTsKIAkJYnJlYWs7CiAJfQotCQkJCisKIAljYXNlIFZJRElPQ1BXQ0dDT05UT1VSOgogCXsKIAkJaW50ICpjb250b3VyID0gYXJnOwogCQlyZXQgPSBwd2NfZ2V0X2NvbnRvdXIocGRldiwgY29udG91cik7CiAJCWJyZWFrOwogCX0KLQkKKwogCWNhc2UgVklESU9DUFdDU0JBQ0tMSUdIVDoKIAl7CiAJCWludCAqYmFja2xpZ2h0ID0gYXJnOwpAQCAtMTM0Nyw3ICsxMzQ2LDcgQEAKIAkJcmV0ID0gcHdjX2dldF9iYWNrbGlnaHQocGRldiwgYmFja2xpZ2h0KTsKIAkJYnJlYWs7CiAJfQotCQorCiAJY2FzZSBWSURJT0NQV0NTRkxJQ0tFUjoKIAl7CiAJCWludCAqZmxpY2tlciA9IGFyZzsKQEAgLTEzNjEsMTQgKzEzNjAsMTQgQEAKIAkJcmV0ID0gcHdjX2dldF9mbGlja2VyKHBkZXYsIGZsaWNrZXIpOwogCQlicmVhazsKIAl9Ci0JCisKIAljYXNlIFZJRElPQ1BXQ1NEWU5OT0lTRToKIAl7CiAJCWludCAqZHlubm9pc2UgPSBhcmc7CiAJCXJldCA9IHB3Y19zZXRfZHluYW1pY19ub2lzZShwZGV2LCAqZHlubm9pc2UpOwogCQlicmVhazsKIAl9Ci0JCisKIAljYXNlIFZJRElPQ1BXQ0dEWU5OT0lTRToKIAl7CiAJCWludCAqZHlubm9pc2UgPSBhcmc7CkBAIC0xMzgyLDYxICsxMzgxLDYxIEBACiAJCXNpemUtPndpZHRoID0gcGRldi0+aW1hZ2UueDsKIAkJc2l6ZS0+aGVpZ2h0ID0gcGRldi0+aW1hZ2UueTsKIAkJYnJlYWs7Ci0gCX0KLSAJCi0gCWNhc2UgVklESU9DUFdDTVBUUkVTRVQ6Ci0gCXsKLSAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKLSAJCXsKLQkgCQlpbnQgKmZsYWdzID0gYXJnOworCX0KKworCWNhc2UgVklESU9DUFdDTVBUUkVTRVQ6CisJeworCQlpZiAocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpCisJCXsKKwkJCWludCAqZmxhZ3MgPSBhcmc7CiAKIAkJCXJldCA9IHB3Y19tcHRfcmVzZXQocGRldiwgKmZsYWdzKTsKLSAJCQlpZiAocmV0ID49IDApCi0gCQkJewotIAkJCQlwZGV2LT5wYW5fYW5nbGUgPSAwOwotIAkJCQlwZGV2LT50aWx0X2FuZ2xlID0gMDsKLSAJCQl9Ci0gCQl9Ci0gCQllbHNlCi0gCQl7Ci0gCQkJcmV0ID0gLUVOWElPOwotIAkJfQotIAkJYnJlYWs7CQkKLSAJfQotIAkKLSAJY2FzZSBWSURJT0NQV0NNUFRHUkFOR0U6Ci0gCXsKLSAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKLSAJCXsKLSAJCQlzdHJ1Y3QgcHdjX21wdF9yYW5nZSAqcmFuZ2UgPSBhcmc7Ci0gCQkJKnJhbmdlID0gcGRldi0+YW5nbGVfcmFuZ2U7Ci0gCQl9Ci0gCQllbHNlCi0gCQl7CQotIAkJCXJldCA9IC1FTlhJTzsKLSAJCX0KLSAJCWJyZWFrOwotIAl9Ci0gCQotIAljYXNlIFZJRElPQ1BXQ01QVFNBTkdMRToKLSAJewotIAkJaW50IG5ld19wYW4sIG5ld190aWx0OwotIAkJCi0gCQlpZiAocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpCi0gCQl7Ci0JIAkJc3RydWN0IHB3Y19tcHRfYW5nbGVzICphbmdsZXMgPSBhcmc7CisJCQlpZiAocmV0ID49IDApCisJCQl7CisJCQkJcGRldi0+cGFuX2FuZ2xlID0gMDsKKwkJCQlwZGV2LT50aWx0X2FuZ2xlID0gMDsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCXJldCA9IC1FTlhJTzsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ01QVEdSQU5HRToKKwl7CisJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKKwkJeworCQkJc3RydWN0IHB3Y19tcHRfcmFuZ2UgKnJhbmdlID0gYXJnOworCQkJKnJhbmdlID0gcGRldi0+YW5nbGVfcmFuZ2U7CisJCX0KKwkJZWxzZQorCQl7CisJCQlyZXQgPSAtRU5YSU87CisJCX0KKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NNUFRTQU5HTEU6CisJeworCQlpbnQgbmV3X3BhbiwgbmV3X3RpbHQ7CisKKwkJaWYgKHBkZXYtPmZlYXR1cmVzICYgRkVBVFVSRV9NT1RPUl9QQU5USUxUKQorCQl7CisJCQlzdHJ1Y3QgcHdjX21wdF9hbmdsZXMgKmFuZ2xlcyA9IGFyZzsKIAkJCS8qIFRoZSBjYW1lcmEgY2FuIG9ubHkgc2V0IHJlbGF0aXZlIGFuZ2xlcywgc28KIAkJCSAgIGRvIHNvbWUgY2FsY3VsYXRpb25zIHdoZW4gZ2V0dGluZyBhbiBhYnNvbHV0ZSBhbmdsZSAuCiAJCQkgKi8KIAkJCWlmIChhbmdsZXMtPmFic29sdXRlKQogCQkJewotIAkJCQluZXdfcGFuICA9IGFuZ2xlcy0+cGFuOwotIAkJCQluZXdfdGlsdCA9IGFuZ2xlcy0+dGlsdDsKLSAJCQl9Ci0gCQkJZWxzZQotIAkJCXsKLSAJCQkJbmV3X3BhbiAgPSBwZGV2LT5wYW5fYW5nbGUgICsgYW5nbGVzLT5wYW47Ci0gCQkJCW5ld190aWx0ID0gcGRldi0+dGlsdF9hbmdsZSArIGFuZ2xlcy0+dGlsdDsKKwkJCQluZXdfcGFuICA9IGFuZ2xlcy0+cGFuOworCQkJCW5ld190aWx0ID0gYW5nbGVzLT50aWx0OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW5ld19wYW4gID0gcGRldi0+cGFuX2FuZ2xlICArIGFuZ2xlcy0+cGFuOworCQkJCW5ld190aWx0ID0gcGRldi0+dGlsdF9hbmdsZSArIGFuZ2xlcy0+dGlsdDsKIAkJCX0KIAkJCS8qIGNoZWNrIGFic29sdXRlIHJhbmdlcyAqLwogCQkJaWYgKG5ld19wYW4gIDwgcGRldi0+YW5nbGVfcmFuZ2UucGFuX21pbiAgfHwKQEAgLTE0NjQsNTMgKzE0NjMsNTMgQEAKIAkJCQkJcGRldi0+dGlsdF9hbmdsZSArPSBuZXdfdGlsdDsKIAkJCQl9CiAJCQkJaWYgKHJldCA9PSAtRVBJUEUpIC8qIHN0YWxsIC0+IG91dCBvZiByYW5nZSAqLwotCQkJCQlyZXQgPSAtRVJBTkdFOwkJCQkKKwkJCQkJcmV0ID0gLUVSQU5HRTsKIAkJCX0KLSAJCX0KLSAJCWVsc2UKLSAJCXsKLSAJCQlyZXQgPSAtRU5YSU87Ci0gCQl9Ci0gCQlicmVhazsKLSAJfQorCQl9CisJCWVsc2UKKwkJeworCQkJcmV0ID0gLUVOWElPOworCQl9CisJCWJyZWFrOworCX0KIAotIAljYXNlIFZJRElPQ1BXQ01QVEdBTkdMRToKLSAJewotIAkJCi0gCQlpZiAocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpCi0gCQl7Ci0JIAkJc3RydWN0IHB3Y19tcHRfYW5nbGVzICphbmdsZXMgPSBhcmc7CisJY2FzZSBWSURJT0NQV0NNUFRHQU5HTEU6CisJewogCi0gCQkJYW5nbGVzLT5hYnNvbHV0ZSA9IDE7Ci0gCQkJYW5nbGVzLT5wYW4gID0gcGRldi0+cGFuX2FuZ2xlOwotIAkJCWFuZ2xlcy0+dGlsdCA9IHBkZXYtPnRpbHRfYW5nbGU7Ci0gCQl9Ci0gCQllbHNlCi0gCQl7Ci0gCQkJcmV0ID0gLUVOWElPOwotIAkJfQotIAkJYnJlYWs7Ci0gCX0KLSAKLSAJY2FzZSBWSURJT0NQV0NNUFRTVEFUVVM6Ci0gCXsKLSAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKLSAJCXsKLSAJCQlzdHJ1Y3QgcHdjX21wdF9zdGF0dXMgKnN0YXR1cyA9IGFyZzsKLSAJCQlyZXQgPSBwd2NfbXB0X2dldF9zdGF0dXMocGRldiwgc3RhdHVzKTsKLSAJCX0KLSAJCWVsc2UKLSAJCXsKLSAJCQlyZXQgPSAtRU5YSU87Ci0gCQl9Ci0gCQlicmVhazsKKwkJaWYgKHBkZXYtPmZlYXR1cmVzICYgRkVBVFVSRV9NT1RPUl9QQU5USUxUKQorCQl7CisJCQlzdHJ1Y3QgcHdjX21wdF9hbmdsZXMgKmFuZ2xlcyA9IGFyZzsKKworCQkJYW5nbGVzLT5hYnNvbHV0ZSA9IDE7CisJCQlhbmdsZXMtPnBhbiAgPSBwZGV2LT5wYW5fYW5nbGU7CisJCQlhbmdsZXMtPnRpbHQgPSBwZGV2LT50aWx0X2FuZ2xlOworCQl9CisJCWVsc2UKKwkJeworCQkJcmV0ID0gLUVOWElPOworCQl9CisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DUFdDTVBUU1RBVFVTOgorCXsKKwkJaWYgKHBkZXYtPmZlYXR1cmVzICYgRkVBVFVSRV9NT1RPUl9QQU5USUxUKQorCQl7CisJCQlzdHJ1Y3QgcHdjX21wdF9zdGF0dXMgKnN0YXR1cyA9IGFyZzsKKwkJCXJldCA9IHB3Y19tcHRfZ2V0X3N0YXR1cyhwZGV2LCBzdGF0dXMpOworCQl9CisJCWVsc2UKKwkJeworCQkJcmV0ID0gLUVOWElPOworCQl9CisJCWJyZWFrOwogCX0KIAogCWNhc2UgVklESU9DUFdDR1ZJRENNRDoKIAl7CiAJCXN0cnVjdCBwd2NfdmlkZW9fY29tbWFuZCAqY21kID0gYXJnOwotCQkKLSAgICAgICAgICAgICAgICBjbWQtPnR5cGUgPSBwZGV2LT50eXBlOworCisJCWNtZC0+dHlwZSA9IHBkZXYtPnR5cGU7CiAJCWNtZC0+cmVsZWFzZSA9IHBkZXYtPnJlbGVhc2U7CiAJCWNtZC0+Y29tbWFuZF9sZW4gPSBwZGV2LT5jbWRfbGVuOwogCQltZW1jcHkoJmNtZC0+Y29tbWFuZF9idWYsIHBkZXYtPmNtZF9idWYsIHBkZXYtPmNtZF9sZW4pOwpAQCAtMTUzMiw3ICsxNTMxLDcgQEAKIAkJcmV0ID0gLUVOT0lPQ1RMQ01EOwogCQlicmVhazsKIAl9Ci0JCisKIAlpZiAocmV0ID4gMCkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtaWYuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggNGY5YjBkYy4uNDE0MTgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCkBAIC0yNSwxOCArMjUsMTggQEAKIAogKi8KIAotLyogIAorLyoKICAgIFRoaXMgY29kZSBmb3JtcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIFVTQiBsYXllcnMgYW5kIHRoZSBQaGlsaXBzCiAgICBzcGVjaWZpYyBzdHVmZi4gU29tZSBhZGFudmVkIHN0dWZmIG9mIHRoZSBkcml2ZXIgZmFsbHMgdW5kZXIgYW4KICAgIE5EQSwgc2lnbmVkIGJldHdlZW4gbWUgYW5kIFBoaWxpcHMgQi5WLiwgRWluZGhvdmVuLCB0aGUgTmV0aGVybGFuZHMsIGFuZAotICAgaXMgdGh1cyBub3QgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGZvcm0uIFRoZSBiaW5hcnkgcHdjeC5vIG1vZHVsZSAKKyAgIGlzIHRodXMgbm90IGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBmb3JtLiBUaGUgYmluYXJ5IHB3Y3gubyBtb2R1bGUKICAgIGNvbnRhaW5zIHRoZSBjb2RlIHRoYXQgZmFsbHMgdW5kZXIgdGhlIE5EQS4KLSAgIAotICAgSW4gY2FzZSB5b3UncmUgd29uZGVyaW5nOiAncHdjJyBzdGFuZHMgZm9yICJQaGlsaXBzIFdlYkNhbSIsIGJ1dCAKKworICAgSW4gY2FzZSB5b3UncmUgd29uZGVyaW5nOiAncHdjJyBzdGFuZHMgZm9yICJQaGlsaXBzIFdlYkNhbSIsIGJ1dAogICAgSSByZWFsbHkgZGlkbid0IHdhbnQgdG8gdHlwZSAncGhpbGlwc193ZWJfY2FtJyBldmVyeSB0aW1lIChJJ20gbGF6eSBhcwogICAgYW55IExpbnV4IGtlcm5lbCBoYWNrZXIsIGJ1dCBJIGRvbid0IGxpa2UgdW5jb21wcmVoZW5zaWJsZSBhYmJyZXZpYXRpb25zCiAgICB3aXRob3V0IGV4cGxhbmF0aW9uKS4KLSAgIAorCiAgICBPaCB5ZXMsIGNvbnZlbnRpb246IHRvIGRpc2N0aW5ndWlzaCBiZXR3ZWVuIGFsbCB0aGUgdmFyaW91cyBwb2ludGVycyB0bwogICAgZGV2aWNlLXN0cnVjdHVyZXMsIEkgdXNlIHRoZXNlIG5hbWVzIGZvciB0aGUgcG9pbnRlciB2YXJpYWJsZXM6CiAgICB1ZGV2OiBzdHJ1Y3QgdXNiX2RldmljZSAqCkBAIC02Miw3ICs2Miw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAicHdjLmgiCkBAIC0xNzEsMTQgKzE3MCwxNCBAQAogCiAvKiBPa2F5LCB0aGlzIGlzIHNvbWUgbWFnaWMgdGhhdCBJIHdvcmtlZCBvdXQgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0Li4uCiAKLSAgIFRoZSBiaWdnZXN0IHByb2JsZW0gd2l0aCBhbnkgVVNCIGRldmljZSBpcyBvZiBjb3Vyc2U6ICJ3aGF0IHRvIGRvIAorICAgVGhlIGJpZ2dlc3QgcHJvYmxlbSB3aXRoIGFueSBVU0IgZGV2aWNlIGlzIG9mIGNvdXJzZTogIndoYXQgdG8gZG8KICAgIHdoZW4gdGhlIHVzZXIgdW5wbHVncyB0aGUgZGV2aWNlIHdoaWxlIGl0IGlzIGluIHVzZSBieSBhbiBhcHBsaWNhdGlvbj8iCiAgICBXZSBoYXZlIHNldmVyYWwgb3B0aW9uczoKICAgIDEpIEN1cnNlIHRoZW0gd2l0aCB0aGUgNyBwbGFndWVzIHdoZW4gdGhleSBkbyAocmVxdWlyZXMgZGl2aW5lIGludGVydmVudGlvbikKICAgIDIpIFRlbGwgdGhlbSBub3QgdG8gKHdvbid0IHdvcms6IHRoZXknbGwgZG8gaXQgYW55d2F5KQogICAgMykgT29wcyB0aGUga2VybmVsICh0aGlzIHdpbGwgaGF2ZSBhIG5lZ2F0aXZlIGVmZmVjdCBvbiBhIHVzZXIncyB1cHRpbWUpCiAgICA0KSBEbyBzb21ldGhpbmcgc2Vuc2libGUuCi0gICAKKwogICAgT2YgY291cnNlLCB3ZSBnbyBmb3Igb3B0aW9uIDQuCiAKICAgIEl0IGhhcHBlbnMgdGhhdCB0aGlzIGRldmljZSB3aWxsIGJlIGxpbmtlZCB0byB0d28gdGltZXMsIG9uY2UgZnJvbQpAQCAtMTg2LDE1ICsxODUsMTUgQEAKICAgIHBvaW50ZXJzLiBUaGlzIGlzIGRvbmUgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCgpIGFuZCBhbGwgaW5pdGlhbGl6YXRpb24KICAgIHN1Y2NlZWRlZC4gVGhlIHB3Y19kZXZpY2Ugc3RydWN0IGxpbmtzIGJhY2sgdG8gYm90aCBzdHJ1Y3R1cmVzLgogCi0gICBXaGVuIGEgZGV2aWNlIGlzIHVucGx1Z2dlZCB3aGlsZSBpbiB1c2UgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIAotICAgbGlzdCBvZiBrbm93biBVU0IgZGV2aWNlczsgSSBhbHNvIGRlLXJlZ2lzdGVyIGl0IGFzIGEgVjRMIGRldmljZSwgYnV0IAorICAgV2hlbiBhIGRldmljZSBpcyB1bnBsdWdnZWQgd2hpbGUgaW4gdXNlIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZQorICAgbGlzdCBvZiBrbm93biBVU0IgZGV2aWNlczsgSSBhbHNvIGRlLXJlZ2lzdGVyIGl0IGFzIGEgVjRMIGRldmljZSwgYnV0CiAgICB1bmZvcnR1bmF0ZWx5IEkgY2FuJ3QgZnJlZSB0aGUgbWVtb3J5IHNpbmNlIHRoZSBzdHJ1Y3QgaXMgc3RpbGwgaW4gdXNlCiAgICBieSB0aGUgZmlsZSBkZXNjcmlwdG9yLiBUaGlzIGZyZWUtaW5nIGlzIHRoZW4gZGVmZXJlbmQgdW50aWwgdGhlIGZpcnN0CiAgICBvcHBvcnR1bml0eS4gQ3J1ZGUsIGJ1dCBpdCB3b3Jrcy4KLSAgIAorCiAgICBBIHNtYWxsICdhZHZhbnRhZ2UnIGlzIHRoYXQgaWYgYSB1c2VyIHVucGx1Z3MgdGhlIGNhbSBhbmQgcGx1Z3MgaXQgYmFjawogICAgaW4sIGl0IHNob3VsZCBnZXQgYXNzaWduZWQgdGhlIHNhbWUgdmlkZW8gZGV2aWNlIG1pbm9yLCBidXQgdW5mb3J0dW5hdGVseQotICAgaXQncyBub24tdHJpdmlhbCB0byByZS1saW5rIHRoZSBjYW0gYmFjayB0byB0aGUgdmlkZW8gZGV2aWNlLi4uICh0aGF0IAorICAgaXQncyBub24tdHJpdmlhbCB0byByZS1saW5rIHRoZSBjYW0gYmFjayB0byB0aGUgdmlkZW8gZGV2aWNlLi4uICh0aGF0CiAgICB3b3VsZCBzdXJlbHkgYmUgbWFnaWMhIDopKQogKi8KIApAQCAtMjA0LDE0ICsyMDMsMTQgQEAKIC8qIEhlcmUgd2Ugd2FudCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5LgogICogVGhpcyBpcyB1c2VkIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYXJlYS4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2aXJ0X3RvX3BhKHVuc2lnbmVkIGxvbmcgYWRyKSAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdmlydF90b19wYSh1bnNpZ25lZCBsb25nIGFkcikKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBrdmEsIHJldDsKKwl1bnNpZ25lZCBsb25nIGt2YSwgcmV0OwogCiAJa3ZhID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKIAlrdmEgfD0gYWRyICYgKFBBR0VfU0laRS0xKTsgLyogcmVzdG9yZSB0aGUgb2Zmc2V0ICovCiAJcmV0ID0gX19wYShrdmEpOwotICAgICAgICByZXR1cm4gcmV0OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkICogcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQpAQCAtMjIwLDEzICsyMTksMTMgQEAKIAl1bnNpZ25lZCBsb25nIGFkcjsKIAogCXNpemU9UEFHRV9BTElHTihzaXplKTsKLSAgICAgICAgbWVtPXZtYWxsb2NfMzIoc2l6ZSk7Ci0JaWYgKG1lbSkgCisJbWVtPXZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKG1lbSkKIAl7CiAJCW1lbXNldChtZW0sIDAsIHNpemUpOyAvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLwotCSAgICAgICAgYWRyPSh1bnNpZ25lZCBsb25nKSBtZW07Ci0JCXdoaWxlIChzaXplID4gMCkgCi0gICAgICAgICAgICAgICAgeworCQlhZHI9KHVuc2lnbmVkIGxvbmcpIG1lbTsKKwkJd2hpbGUgKHNpemUgPiAwKQorCQl7CiAJCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CiAJCQlhZHIrPVBBR0VfU0laRTsKIAkJCXNpemUtPVBBR0VfU0laRTsKQEAgLTIzNywxMyArMjM2LDEzIEBACiAKIHN0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkICogbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYWRyOworCXVuc2lnbmVkIGxvbmcgYWRyOwogCi0JaWYgKG1lbSkgCisJaWYgKG1lbSkKIAl7Ci0JICAgICAgICBhZHI9KHVuc2lnbmVkIGxvbmcpIG1lbTsKLQkJd2hpbGUgKChsb25nKSBzaXplID4gMCkgCi0gICAgICAgICAgICAgICAgeworCQlhZHI9KHVuc2lnbmVkIGxvbmcpIG1lbTsKKwkJd2hpbGUgKChsb25nKSBzaXplID4gMCkKKwkJewogCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CiAJCQlhZHIrPVBBR0VfU0laRTsKIAkJCXNpemUtPVBBR0VfU0laRTsKQEAgLTI2NCwxMyArMjYzLDEzIEBACiAKIAlpZiAocGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOWElPOwotCQkKKwogI2lmZGVmIFBXQ19NQUdJQwogCWlmIChwZGV2LT5tYWdpYyAhPSBQV0NfTUFHSUMpIHsKIAkJRXJyKCJhbGxvY2F0ZV9idWZmZXJzKCk6IG1hZ2ljIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLSNlbmRpZgkKKyNlbmRpZgogCS8qIEFsbG9jYXRlIElzb2Nocm9ub3VzIHBpcGUgYnVmZmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgewogCQlpZiAocGRldi0+c2J1ZltpXS5kYXRhID09IE5VTEwpIHsKQEAgLTMwOSw3ICszMDgsNyBAQAogCQkJbWVtc2V0KGtidWYsIDEyOCwgUFdDX0ZSQU1FX1NJWkUpOwogCQl9CiAJfQotCQorCiAJLyogQWxsb2NhdGUgZGVjb21wcmVzc29yIHRhYmxlIHNwYWNlICovCiAJa2J1ZiA9IE5VTEw7CiAJc3dpdGNoIChwZGV2LT50eXBlKQpAQCAtMzIxLDcgKzMyMCw3IEBACiAJICBjYXNlIDczMDoKIAkgIGNhc2UgNzQwOgogCSAgY2FzZSA3NTA6Ci0jaWYgMAkgIAorI2lmIDAKIAkgICAgVHJhY2UoVFJBQ0VfTUVNT1JZLCJwcml2YXRlX2RhdGEoJXp1KVxuIixzaXplb2Yoc3RydWN0IHB3Y19kZWMyM19wcml2YXRlKSk7CiAJICAgIGtidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHdjX2RlYzIzX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsJLyogVGltb24gJiBLaWFyYSAqLwogCSAgICBicmVhazsKQEAgLTMzMCwxMSArMzI5LDExIEBACiAJICAgIC8qIFRPRE8gJiBGSVhNRSAqLwogCSAgICBrYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZWMyM19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJICAgIGJyZWFrOwotI2VuZGlmCSAKKyNlbmRpZgogCTsKIAkgfQogCXBkZXYtPmRlY29tcHJlc3NfZGF0YSA9IGtidWY7Ci0JCisKIAkvKiBBbGxvY2F0ZSBpbWFnZSBidWZmZXI7IGRvdWJsZSBidWZmZXIgZm9yIG1tYXAoKSAqLwogCWtidWYgPSBydm1hbGxvYyhkZWZhdWx0X21idWZzICogcGRldi0+bGVuX3Blcl9pbWFnZSk7CiAJaWYgKGtidWYgPT0gTlVMTCkgewpAQCAtMzQ5LDcgKzM0OCw3IEBACiAJCXBkZXYtPmltYWdlX3B0cltpXSA9IE5VTEw7CiAKIAlrYnVmID0gTlVMTDsKLQkgIAorCiAJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiPDwgcHdjX2FsbG9jYXRlX2J1ZmZlcnMoKVxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNjcsNyArMzY2LDcgQEAKIAkJRXJyKCJmcmVlX2J1ZmZlcnMoKTogbWFnaWMgZmFpbGVkLlxuIik7CiAJCXJldHVybjsKIAl9Ci0jZW5kaWYJCisjZW5kaWYKIAogCS8qIFJlbGVhc2UgSXNvLXBpcGUgYnVmZmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykKQEAgLTQwNCwxNyArNDAzLDE3IEBACiAJCXJ2ZnJlZShwZGV2LT5pbWFnZV9kYXRhLCBkZWZhdWx0X21idWZzICogcGRldi0+bGVuX3Blcl9pbWFnZSk7CiAJfQogCXBkZXYtPmltYWdlX2RhdGEgPSBOVUxMOwotCQorCiAJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiTGVhdmluZyBmcmVlX2J1ZmZlcnMoKS5cbiIpOwogfQogCi0vKiBUaGUgZnJhbWUgJiBpbWFnZSBidWZmZXIgbWVzcy4gCisvKiBUaGUgZnJhbWUgJiBpbWFnZSBidWZmZXIgbWVzcy4KIAogICAgWWVzLCB0aGlzIGlzIGEgbWVzcy4gV2VsbCwgaXQgdXNlZCB0byBiZSBzaW1wbGUsIGJ1dCBhbGFzLi4uICBJbiB0aGlzCiAgICBtb2R1bGUsIDMgYnVmZmVycyBzY2hlbWVzIGFyZSB1c2VkIHRvIGdldCB0aGUgZGF0YSBmcm9tIHRoZSBVU0IgYnVzIHRvCiAgICB0aGUgdXNlciBwcm9ncmFtLiBUaGUgZmlyc3Qgc2NoZW1lIGludm9sdmVzIHRoZSBJU08gYnVmZmVycyAoY2FsbGVkIHRodXMKICAgIHNpbmNlIHRoZXkgdHJhbnNwb3J0IElTTyBkYXRhIGZyb20gdGhlIFVTQiBjb250cm9sbGVyKSwgYW5kIG5vdCByZWFsbHkKLSAgIGludGVyZXN0aW5nLiBTdWZmaWNlcyB0byBzYXkgdGhlIGRhdGEgZnJvbSB0aGlzIGJ1ZmZlciBpcyBxdWlja2x5IAorICAgaW50ZXJlc3RpbmcuIFN1ZmZpY2VzIHRvIHNheSB0aGUgZGF0YSBmcm9tIHRoaXMgYnVmZmVyIGlzIHF1aWNrbHkKICAgIGdhdGhlcmVkIGluIGFuIGludGVycnVwdCBoYW5kbGVyIChwd2NfaXNvY19oYW5kbGVyKSBhbmQgcGxhY2VkIGludG8gdGhlCiAgICBmcmFtZSBidWZmZXIuCiAKQEAgLTQ0NCw4ICs0NDMsOCBAQAogICAgYW5kIGEgJ2Z1bGwnIGZyYW1lIGxpc3Q6CiAgICAgICogSW5pdGlhbGx5LCBhbGwgZnJhbWUgYnVmZmVycyBidXQgb25lIGFyZSBvbiB0aGUgJ2VtcHR5JyBsaXN0OyB0aGUgb25lCiAgICAgICAgcmVtYWluaW5nIGJ1ZmZlciBpcyBvdXIgaW5pdGlhbCBmaWxsIGZyYW1lLgotICAgICAqIElmIGEgZnJhbWUgaXMgbmVlZGVkIGZvciBmaWxsaW5nLCB3ZSB0cnkgdG8gdGFrZSBpdCBmcm9tIHRoZSAnZW1wdHknIAotICAgICAgIGxpc3QsIHVubGVzcyB0aGF0IGxpc3QgaXMgZW1wdHksIGluIHdoaWNoIGNhc2Ugd2UgdGFrZSB0aGUgYnVmZmVyIGF0IAorICAgICAqIElmIGEgZnJhbWUgaXMgbmVlZGVkIGZvciBmaWxsaW5nLCB3ZSB0cnkgdG8gdGFrZSBpdCBmcm9tIHRoZSAnZW1wdHknCisgICAgICAgbGlzdCwgdW5sZXNzIHRoYXQgbGlzdCBpcyBlbXB0eSwgaW4gd2hpY2ggY2FzZSB3ZSB0YWtlIHRoZSBidWZmZXIgYXQKICAgICAgICB0aGUgaGVhZCBvZiB0aGUgJ2Z1bGwnIGxpc3QuCiAgICAgICogV2hlbiBvdXIgZmlsbCBidWZmZXIgaGFzIGJlZW4gZmlsbGVkLCBpdCBpcyBhcHBlbmRlZCB0byB0aGUgJ2Z1bGwnCiAgICAgICAgbGlzdC4KQEAgLTY0Nyw3ICs2NDYsNyBAQAogCQkJY2FzZSAtRVRJTUVET1VUOgllcnJtc2cgPSAiTkFLIChkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCkiOyBicmVhazsKIAkJfQogCQlUcmFjZShUUkFDRV9GTE9XLCAicHdjX2lzb2NfaGFuZGxlcigpIGNhbGxlZCB3aXRoIHN0YXR1cyAlZCBbJXNdLlxuIiwgdXJiLT5zdGF0dXMsIGVycm1zZyk7Ci0JCS8qIEdpdmUgdXAgYWZ0ZXIgYSBudW1iZXIgb2YgY29udGlndW91cyBlcnJvcnMgb24gdGhlIFVTQiBidXMuIAorCQkvKiBHaXZlIHVwIGFmdGVyIGEgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZXJyb3JzIG9uIHRoZSBVU0IgYnVzLgogCQkgICBBcHBlYXJhbnRseSBzb21ldGhpbmcgaXMgd3Jvbmcgc28gd2Ugc2ltdWxhdGUgYW4gdW5wbHVnIGV2ZW50LgogCQkgKi8KIAkJaWYgKCsrcGRldi0+dmlzb2NfZXJyb3JzID4gTUFYX0lTT0NfRVJST1JTKQpAQCAtNjc0LDggKzY3Myw4IEBACiAJcGRldi0+dmlzb2NfZXJyb3JzID0gMDsKIAogCS8qIHZzeW5jOiAwID0gZG9uJ3QgY29weSBkYXRhCi0JICAgICAgICAgIDEgPSBzeW5jLWh1bnQKLQkgICAgICAgICAgMiA9IHN5bmNoZWQKKwkJICAxID0gc3luYy1odW50CisJCSAgMiA9IHN5bmNoZWQKIAkgKi8KIAkvKiBDb21wYWN0IGRhdGEgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CkBAIC03MDIsMTggKzcwMSwxOCBAQAogCQkJfSAvKiAuLmZsZW4gPiAwICovCiAKIAkJCWlmIChmbGVuIDwgcGRldi0+dmxhc3RfcGFja2V0X3NpemUpIHsKLQkJCQkvKiBTaG9ydGVyIHBhY2tldC4uLiBXZSBwcm9iYWJseSBoYXZlIHRoZSBlbmQgb2YgYW4gaW1hZ2UtZnJhbWU7IAorCQkJCS8qIFNob3J0ZXIgcGFja2V0Li4uIFdlIHByb2JhYmx5IGhhdmUgdGhlIGVuZCBvZiBhbiBpbWFnZS1mcmFtZTsKIAkJCQkgICB3YWtlIHVwIHJlYWQoKSBwcm9jZXNzIGFuZCBsZXQgc2VsZWN0KCkvcG9sbCgpIGRvIHNvbWV0aGluZy4KIAkJCQkgICBEZWNvbXByZXNzaW9uIGlzIGRvbmUgaW4gdXNlciB0aW1lIG92ZXIgdGhlcmUuCiAJCQkJICovCiAJCQkJaWYgKHBkZXYtPnZzeW5jID09IDIpIHsKLQkJCQkJLyogVGhlIFRvVUNhbSBGdW4gQ01PUyBzZW5zb3IgY2F1c2VzIHRoZSBmaXJtd2FyZSB0byBzZW5kIDIgb3IgMyBib2d1cyAKLQkJCQkJICAgZnJhbWVzIG9uIHRoZSBVU0Igd2lyZSBhZnRlciBhbiBleHBvc3VyZSBjaGFuZ2UuIFRoaXMgY29uZGl0aXRpb24gaXMgCisJCQkJCS8qIFRoZSBUb1VDYW0gRnVuIENNT1Mgc2Vuc29yIGNhdXNlcyB0aGUgZmlybXdhcmUgdG8gc2VuZCAyIG9yIDMgYm9ndXMKKwkJCQkJICAgZnJhbWVzIG9uIHRoZSBVU0Igd2lyZSBhZnRlciBhbiBleHBvc3VyZSBjaGFuZ2UuIFRoaXMgY29uZGl0aXRpb24gaXMKIAkJCQkJICAgaG93ZXZlciBkZXRlY3RlZCAgaW4gdGhlIGNhbSBhbmQgYSBiaXQgaXMgc2V0IGluIHRoZSBoZWFkZXIuCiAJCQkJCSAqLwogCQkJCQlpZiAocGRldi0+dHlwZSA9PSA3MzApIHsKIAkJCQkJCXVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopZmJ1Zi0+ZGF0YTsKLQkJCQkJCQorCiAJCQkJCQlpZiAocHRyWzFdID09IDEgJiYgcHRyWzBdICYgMHgxMCkgewogI2lmIFBXQ19ERUJVRwogCQkJCQkJCURlYnVnKCJIeXVuZGFpIENNT1Mgc2Vuc29yIGJ1Zy4gRHJvcHBpbmcgZnJhbWUgJWQuXG4iLCBmYnVmLT5zZXF1ZW5jZSk7CkBAIC03MzQsMTMgKzczMywxMyBAQAogCQkJCQkJCQlJbmZvKCJJbWFnZSBpcyBub3JtYWwuXG4iKTsKIAkJCQkJCX0KIAkJCQkJCXBkZXYtPnZtaXJyb3IgPSBwdHJbMF0gJiAweDAzOwotCQkJCQkJLyogU29tZXRpbWVzIHRoZSB0cmFpbGVyIG9mIHRoZSA3MzAgaXMgc3RpbGwgc2VudCBhcyBhIDQgYnl0ZSBwYWNrZXQgCisJCQkJCQkvKiBTb21ldGltZXMgdGhlIHRyYWlsZXIgb2YgdGhlIDczMCBpcyBzdGlsbCBzZW50IGFzIGEgNCBieXRlIHBhY2tldAogCQkJCQkJICAgYWZ0ZXIgYSBzaG9ydCBmcmFtZTsgdGhpcyBjb25kaXRpb24gaXMgZmlsdGVyZWQgb3V0IHNwZWNpZmljYWxseS4gQSA0IGJ5dGUKIAkJCQkJCSAgIGZyYW1lIGRvZXNuJ3QgbWFrZSBzZW5zZSBhbnl3YXkuCi0JCQkJCQkgICBTbyB3ZSBnZXQgZWl0aGVyIHRoaXMgc2VxdWVuY2U6IAotCQkJCQkJICAgCWRyb3BfYml0IHNldCAtPiA0IGJ5dGUgZnJhbWUgLT4gc2hvcnQgZnJhbWUgLT4gZ29vZCBmcmFtZQorCQkJCQkJICAgU28gd2UgZ2V0IGVpdGhlciB0aGlzIHNlcXVlbmNlOgorCQkJCQkJCWRyb3BfYml0IHNldCAtPiA0IGJ5dGUgZnJhbWUgLT4gc2hvcnQgZnJhbWUgLT4gZ29vZCBmcmFtZQogCQkJCQkJICAgT3IgdGhpcyBvbmU6Ci0JCQkJCQkgICAJZHJvcF9iaXQgc2V0IC0+IHNob3J0IGZyYW1lIC0+IGdvb2QgZnJhbWUKKwkJCQkJCQlkcm9wX2JpdCBzZXQgLT4gc2hvcnQgZnJhbWUgLT4gZ29vZCBmcmFtZQogCQkJCQkJICAgU28gd2UgZHJvcCBlaXRoZXIgMyBvciAyIGZyYW1lcyBpbiBhbGwhCiAJCQkJCQkgKi8KIAkJCQkJCWlmIChmYnVmLT5maWxsZWQgPT0gNCkKQEAgLTgyNywxNCArODI2LDExIEBACiAJLyogR2V0IHRoZSBjdXJyZW50IGFsdGVybmF0ZSBpbnRlcmZhY2UsIGFkanVzdCBwYWNrZXQgc2l6ZSAqLwogCWlmICghdWRldi0+YWN0Y29uZmlnKQogCQlyZXR1cm4gLUVGQVVMVDsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsNSkKLQlpZGVzYyA9ICZ1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXS0+YWx0c2V0dGluZ1twZGV2LT52YWx0ZXJuYXRlXTsKLSNlbHNlCisKIAlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKHVkZXYsIDApOwogCWlmIChpbnRmKQogCQlpZGVzYyA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCBwZGV2LT52YWx0ZXJuYXRlKTsKLSNlbmRpZgotCQkKKwogCWlmICghaWRlc2MpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC04NDUsNyArODQxLDcgQEAKIAkJCXBkZXYtPnZtYXhfcGFja2V0X3NpemUgPSBsZTE2X3RvX2NwdShpZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy53TWF4UGFja2V0U2l6ZSk7CiAJCQlicmVhazsKIAkJfQotCQorCiAJaWYgKHBkZXYtPnZtYXhfcGFja2V0X3NpemUgPCAwIHx8IHBkZXYtPnZtYXhfcGFja2V0X3NpemUgPiBJU09fTUFYX0ZSQU1FX1NJWkUpIHsKIAkJRXJyKCJGYWlsZWQgdG8gZmluZCBwYWNrZXQgc2l6ZSBmb3IgdmlkZW8gZW5kcG9pbnQgaW4gY3VycmVudCBhbHRlcm5hdGUgc2V0dGluZy5cbiIpOwogCQlyZXR1cm4gLUVORklMRTsgLyogT2RkIGVycm9yLCB0aGF0IHNob3VsZCBiZSBub3RpY2VhYmxlICovCkBAIC04NzksMTggKzg3NSwxOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIGluaXQgVVJCIHN0cnVjdHVyZSAqLwkKKwkvKiBpbml0IFVSQiBzdHJ1Y3R1cmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKIAkJdXJiID0gcGRldi0+c2J1ZltpXS51cmI7CiAKIAkJdXJiLT5pbnRlcnZhbCA9IDE7IC8vIGRldmlrCiAJCXVyYi0+ZGV2ID0gdWRldjsKLQkgICAgICAgIHVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1ZGV2LCBwZGV2LT52ZW5kcG9pbnQpOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWRldiwgcGRldi0+dmVuZHBvaW50KTsKIAkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkgICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyID0gcGRldi0+c2J1ZltpXS5kYXRhOwotCSAgICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gSVNPX0JVRkZFUl9TSVpFOwotCSAgICAgICAgdXJiLT5jb21wbGV0ZSA9IHB3Y19pc29jX2hhbmRsZXI7Ci0JICAgICAgICB1cmItPmNvbnRleHQgPSBwZGV2OworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBkZXYtPnNidWZbaV0uZGF0YTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gSVNPX0JVRkZFUl9TSVpFOworCQl1cmItPmNvbXBsZXRlID0gcHdjX2lzb2NfaGFuZGxlcjsKKwkJdXJiLT5jb250ZXh0ID0gcGRldjsKIAkJdXJiLT5zdGFydF9mcmFtZSA9IDA7CiAJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBJU09fRlJBTUVTX1BFUl9ERVNDOwogCQlmb3IgKGogPSAwOyBqIDwgSVNPX0ZSQU1FU19QRVJfREVTQzsgaisrKSB7CkBAIC05MzksNyArOTM1LDcgQEAKIAl9CiAKIAkvKiBTdG9wIGNhbWVyYSwgYnV0IG9ubHkgaWYgd2UgYXJlIHN1cmUgdGhlIGNhbWVyYSBpcyBzdGlsbCB0aGVyZSAodW5wbHVnCi0JICAgaXMgc2lnbmFsbGVkIGJ5IEVQSVBFKSAKKwkgICBpcyBzaWduYWxsZWQgYnkgRVBJUEUpCiAJICovCiAJaWYgKHBkZXYtPmVycm9yX3N0YXR1cyAmJiBwZGV2LT5lcnJvcl9zdGF0dXMgIT0gRVBJUEUpIHsKIAkJVHJhY2UoVFJBQ0VfT1BFTiwgIlNldHRpbmcgYWx0ZXJuYXRlIGludGVyZmFjZSAwLlxuIik7CkBAIC05NjAsMTIgKzk1NiwxMiBAQAogCXB3Y19yZXNldF9idWZmZXJzKHBkZXYpOwogCS8qIFRyeSB0byBzZXQgdmlkZW8gbW9kZS4uLiAqLwogCXN0YXJ0ID0gcmV0ID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsIHdpZHRoLCBoZWlnaHQsIG5ld19mcHMsIG5ld19jb21wcmVzc2lvbiwgbmV3X3NuYXBzaG90KTsKLQlpZiAocmV0KSB7IAotCSAgICAgICAgVHJhY2UoVFJBQ0VfRkxPVywgInB3Y19zZXRfdmlkZW9fbW9kZSBhdHRlbXB0IDEgZmFpbGVkLlxuIik7CisJaWYgKHJldCkgeworCQlUcmFjZShUUkFDRV9GTE9XLCAicHdjX3NldF92aWRlb19tb2RlIGF0dGVtcHQgMSBmYWlsZWQuXG4iKTsKIAkJLyogVGhhdCBmYWlsZWQuLi4gcmVzdG9yZSBvbGQgbW9kZSAod2Uga25vdyB0aGF0IHdvcmtlZCkgKi8KIAkJc3RhcnQgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgcGRldi0+dmlldy54LCBwZGV2LT52aWV3LnksIHBkZXYtPnZmcmFtZXMsIHBkZXYtPnZjb21wcmVzc2lvbiwgcGRldi0+dnNuYXBzaG90KTsKIAkJaWYgKHN0YXJ0KSB7Ci0JCSAgICAgICAgVHJhY2UoVFJBQ0VfRkxPVywgInB3Y19zZXRfdmlkZW9fbW9kZSBhdHRlbXB0IDIgZmFpbGVkLlxuIik7CisJCQlUcmFjZShUUkFDRV9GTE9XLCAicHdjX3NldF92aWRlb19tb2RlIGF0dGVtcHQgMiBmYWlsZWQuXG4iKTsKIAkJfQogCX0KIAlpZiAoc3RhcnQgPT0gMCkKQEAgLTk5MSwxOCArOTg3LDE4IEBACiAJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CiAKIAlUcmFjZShUUkFDRV9PUEVOLCAiPj4gdmlkZW9fb3BlbiBjYWxsZWQodmRldiA9IDB4JXApLlxuIiwgdmRldik7Ci0JCisKIAlwZGV2ID0gKHN0cnVjdCBwd2NfZGV2aWNlICopdmRldi0+cHJpdjsKIAlpZiAocGRldiA9PSBOVUxMKQogCQlCVUcoKTsKIAlpZiAocGRldi0+dm9wZW4pCiAJCXJldHVybiAtRUJVU1k7Ci0JCisKIAlkb3duKCZwZGV2LT5tb2Rsb2NrKTsKIAlpZiAoIXBkZXYtPnVzYl9pbml0KSB7CiAJCVRyYWNlKFRSQUNFX09QRU4sICJEb2luZyBmaXJzdCB0aW1lIGluaXRpYWxpemF0aW9uLlxuIik7CiAJCXBkZXYtPnVzYl9pbml0ID0gMTsKLQkJCisKIAkJaWYgKHB3Y190cmFjZSAmIFRSQUNFX09QRU4pCiAJCXsKIAkJCS8qIFF1ZXJ5IHNlbnNvciB0eXBlICovCkBAIC0xMDQwLDcgKzEwMzYsNyBAQAogCS8qIFNldCBMRUQgb24vb2ZmIHRpbWUgKi8KIAlpZiAocHdjX3NldF9sZWRzKHBkZXYsIGxlZF9vbiwgbGVkX29mZikgPCAwKQogCQlJbmZvKCJGYWlsZWQgdG8gc2V0IExFRCBvbi9vZmYgdGltZS5cbiIpOwotCQorCiAJcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLwogCiAJLyogU28gZmFyLCBzbyBnb29kLiBBbGxvY2F0ZSBtZW1vcnkuICovCkBAIC0xMDUwLDcgKzEwNDYsNyBAQAogCQl1cCgmcGRldi0+bW9kbG9jayk7CiAJCXJldHVybiBpOwogCX0KLQkKKwogCS8qIFJlc2V0IGJ1ZmZlcnMgJiBwYXJhbWV0ZXJzICovCiAJcHdjX3Jlc2V0X2J1ZmZlcnMocGRldik7CiAJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfbWJ1ZnM7IGkrKykKQEAgLTEwODUsNyArMTA4MSw3IEBACiAJCXVwKCZwZGV2LT5tb2Rsb2NrKTsKIAkJcmV0dXJuIGk7CiAJfQotCQorCiAJaSA9IHB3Y19pc29jX2luaXQocGRldik7CiAJaWYgKGkpIHsKIAkJVHJhY2UoVFJBQ0VfT1BFTiwgIkZhaWxlZCB0byBpbml0IElTT0Mgc3R1ZmYgPSAlZC5cbiIsIGkpOwpAQCAtMTE1OSwxMyArMTE1NSwxMyBAQAogLyoKICAqCUZJWE1FOiB3aGF0IGFib3V0IHR3byBwYXJhbGxlbCByZWFkcyA/Pz8/CiAgKiAgICAgIEFOU1dFUjogTm90IHN1cHBvcnRlZC4gWW91IGNhbid0IG9wZW4gdGhlIGRldmljZSBtb3JlIHRoYW4gb25jZSwKLSAgICAgICAgICAgICAgICBkZXNwaXRlIHdoYXQgdGhlIFY0TDEgaW50ZXJmYWNlIHNheXMuIEZpcnN0LCBJIGRvbid0IHNlZQotICAgICAgICAgICAgICAgIHRoZSBuZWVkLCBzZWNvbmQgdGhlcmUncyBubyBtZWNoYW5pc20gb2YgYWxlcnRpbmcgdGhlCi0gICAgICAgICAgICAgICAgMm5kLzNyZC8uLi4gcHJvY2VzcyBvZiBldmVudHMgbGlrZSBjaGFuZ2luZyBpbWFnZSBzaXplLgotICAgICAgICAgICAgICAgIEFuZCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgb2YgYmxvY2tpbmcgdGhhdCBmb3IgdGhlCi0gICAgICAgICAgICAgICAgMm5kLzNyZC8uLi4gcHJvY2Vzcy4KLSAgICAgICAgICAgICAgICBJbiBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMgcmVhZGluZyBwYXJhbGxlbCBmcm9tIGFueQotICAgICAgICAgICAgICAgIGRldmljZSBpcyB0cmlja3kgYW55aG93LgorCQlkZXNwaXRlIHdoYXQgdGhlIFY0TDEgaW50ZXJmYWNlIHNheXMuIEZpcnN0LCBJIGRvbid0IHNlZQorCQl0aGUgbmVlZCwgc2Vjb25kIHRoZXJlJ3Mgbm8gbWVjaGFuaXNtIG9mIGFsZXJ0aW5nIHRoZQorCQkybmQvM3JkLy4uLiBwcm9jZXNzIG9mIGV2ZW50cyBsaWtlIGNoYW5naW5nIGltYWdlIHNpemUuCisJCUFuZCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgb2YgYmxvY2tpbmcgdGhhdCBmb3IgdGhlCisJCTJuZC8zcmQvLi4uIHByb2Nlc3MuCisJCUluIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50cyByZWFkaW5nIHBhcmFsbGVsIGZyb20gYW55CisJCWRldmljZSBpcyB0cmlja3kgYW55aG93LgogICovCiAKIHN0YXRpYyBzc2l6ZV90IHB3Y192aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKQEAgLTExNzUsNyArMTE3MSw3IEBACiAJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CiAJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLSAgICAgICAgaW50IGJ5dGVzX3RvX3JlYWQ7CisJaW50IGJ5dGVzX3RvX3JlYWQ7CiAKIAlUcmFjZShUUkFDRV9SRUFELCAidmlkZW9fcmVhZCgweCVwLCAlcCwgJXp1KSBjYWxsZWQuXG4iLCB2ZGV2LCBidWYsIGNvdW50KTsKIAlpZiAodmRldiA9PSBOVUxMKQpAQCAtMTE5NywyMiArMTE5MywyMiBAQAogCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQkJcmV0dXJuIC1wZGV2LT5lcnJvcl9zdGF0dXMgOwogCQkJfQotCSAgICAgICAgICAgICAgICBpZiAobm9ibG9jaykgewotCSAgICAgICAgICAgICAgICAJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOwotCSAgICAgICAgICAgICAgICAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkgICAgICAgICAgICAgICAgCXJldHVybiAtRVdPVUxEQkxPQ0s7Ci0JICAgICAgICAgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JICAgICAgICAgICAgICAgIAlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7Ci0JICAgICAgICAgICAgICAgIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCSAgICAgICAgICAgICAgICAJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkgICAgICAgICAgICAgICAgfQotCSAgICAgICAgICAgICAgICBzY2hlZHVsZSgpOwotCSAgICAgICAgICAgICAgIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJaWYgKG5vYmxvY2spIHsKKwkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQlyZXR1cm4gLUVXT1VMREJMT0NLOworCQkJfQorCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCX0KKwkJCXNjaGVkdWxlKCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQl9CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIAkJLyogRGVjb21wcmVzcyBhbmQgcmVsZWFzZSBmcmFtZSAqLwogCQlpZiAocHdjX2hhbmRsZV9mcmFtZShwZGV2KSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTIyMiw3ICsxMjE4LDcgQEAKIAlpZiAocGRldi0+dnBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9SQVcpCiAJCWJ5dGVzX3RvX3JlYWQgPSBwZGV2LT5mcmFtZV9zaXplOwogCWVsc2UKLSAJCWJ5dGVzX3RvX3JlYWQgPSBwZGV2LT52aWV3LnNpemU7CisJCWJ5dGVzX3RvX3JlYWQgPSBwZGV2LT52aWV3LnNpemU7CiAKIAkvKiBjb3B5IGJ5dGVzIHRvIHVzZXIgc3BhY2U7IHdlIGFsbG93IGZvciBwYXJ0aWFsIHJlYWRzICovCiAJaWYgKGNvdW50ICsgcGRldi0+aW1hZ2VfcmVhZF9wb3MgPiBieXRlc190b19yZWFkKQpAQCAtMTM1MiwxMSArMTM0OCwxMSBAQAogCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnAgPSBhcmc7CiAJCQkvKgogCQkJICoJRklYTUU6CVN1cHBvc2Ugd2UgYXJlIG1pZCByZWFkCi0JCQkgICAgICAgIEFOU1dFUjogTm8gcHJvYmxlbTogdGhlIGZpcm13YXJlIG9mIHRoZSBjYW1lcmEKLQkJCSAgICAgICAgICAgICAgICBjYW4gaGFuZGxlIGJyaWdodG5lc3MvY29udHJhc3QvZXRjCi0JCQkgICAgICAgICAgICAgICAgY2hhbmdlcyBhdCBfYW55XyB0aW1lLCBhbmQgdGhlIHBhbGV0dGUKLQkJCSAgICAgICAgICAgICAgICBpcyB1c2VkIGV4YWN0bHkgb25jZSBpbiB0aGUgdW5jb21wcmVzcwotCQkJICAgICAgICAgICAgICAgIHJvdXRpbmUuCisJCQkJQU5TV0VSOiBObyBwcm9ibGVtOiB0aGUgZmlybXdhcmUgb2YgdGhlIGNhbWVyYQorCQkJCQljYW4gaGFuZGxlIGJyaWdodG5lc3MvY29udHJhc3QvZXRjCisJCQkJCWNoYW5nZXMgYXQgX2FueV8gdGltZSwgYW5kIHRoZSBwYWxldHRlCisJCQkJCWlzIHVzZWQgZXhhY3RseSBvbmNlIGluIHRoZSB1bmNvbXByZXNzCisJCQkJCXJvdXRpbmUuCiAJCQkgKi8KIAkJCXB3Y19zZXRfYnJpZ2h0bmVzcyhwZGV2LCBwLT5icmlnaHRuZXNzKTsKIAkJCXB3Y19zZXRfY29udHJhc3QocGRldiwgcC0+Y29udHJhc3QpOwpAQCAtMTM3NywyMSArMTM3MywyMSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBXaW5kb3cvc2l6ZSBwYXJhbWV0ZXJzICovCQkKKwkJLyogV2luZG93L3NpemUgcGFyYW1ldGVycyAqLwogCQljYXNlIFZJRElPQ0dXSU46CiAJCXsKIAkJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOwotCQkJCisKIAkJCXZ3LT54ID0gMDsKIAkJCXZ3LT55ID0gMDsKIAkJCXZ3LT53aWR0aCA9IHBkZXYtPnZpZXcueDsKIAkJCXZ3LT5oZWlnaHQgPSBwZGV2LT52aWV3Lnk7CiAJCQl2dy0+Y2hyb21ha2V5ID0gMDsKLQkJCXZ3LT5mbGFncyA9IChwZGV2LT52ZnJhbWVzIDw8IFBXQ19GUFNfU0hJRlQpIHwgCi0JCQkgICAgICAgICAgIChwZGV2LT52c25hcHNob3QgPyBQV0NfRlBTX1NOQVBTSE9UIDogMCk7CisJCQl2dy0+ZmxhZ3MgPSAocGRldi0+dmZyYW1lcyA8PCBQV0NfRlBTX1NISUZUKSB8CisJCQkJICAgKHBkZXYtPnZzbmFwc2hvdCA/IFBXQ19GUFNfU05BUFNIT1QgOiAwKTsKIAkJCWJyZWFrOwogCQl9Ci0JCQorCiAJCWNhc2UgVklESU9DU1dJTjoKIAkJewogCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CkBAIC0xNDA2LDkgKzE0MDIsOSBAQAogCQkJcmV0ID0gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsIHZ3LT53aWR0aCwgdnctPmhlaWdodCwgZnBzLCBwZGV2LT52Y29tcHJlc3Npb24sIHNuYXBzaG90KTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKLQkJCWJyZWFrOwkJCisJCQlicmVhazsKIAkJfQotCQkKKwogCQkvKiBXZSBkb24ndCBoYXZlIG92ZXJsYXkgc3VwcG9ydCAoeWV0KSAqLwogCQljYXNlIFZJRElPQ0dGQlVGOgogCQl7CkBAIC0xNDc1LDggKzE0NzEsOCBAQAogCQkJCXJldHVybiAtRUJVU1k7CS8qIGJ1ZmZlciB3YXNuJ3QgYXZhaWxhYmxlLiBCdW1tZXIgKi8KIAkJCXBkZXYtPmltYWdlX3VzZWRbdm0tPmZyYW1lXSA9IDE7CiAKLQkJCS8qIE9rYXksIHdlJ3JlIGRvbmUgaGVyZS4gSW4gdGhlIFNZTkMgY2FsbCB3ZSB3YWl0IHVudGlsIGEgCi0JCQkgICBmcmFtZSBjb21lcyBhdmFpbGFibGUsIHRoZW4gZXhwYW5kIGltYWdlIGludG8gdGhlIGdpdmVuIAorCQkJLyogT2theSwgd2UncmUgZG9uZSBoZXJlLiBJbiB0aGUgU1lOQyBjYWxsIHdlIHdhaXQgdW50aWwgYQorCQkJICAgZnJhbWUgY29tZXMgYXZhaWxhYmxlLCB0aGVuIGV4cGFuZCBpbWFnZSBpbnRvIHRoZSBnaXZlbgogCQkJICAgYnVmZmVyLgogCQkJICAgSW4gY29udHJhc3QgdG8gdGhlIENQaUEgY2FtIHRoZSBQaGlsaXBzIGNhbXMgZGVsaXZlciBhCiAJCQkgICBjb25zdGFudCBzdHJlYW0sIGFsbW9zdCBsaWtlIGEgZ3JhYmJlciBjYXJkLiBBbHNvLApAQCAtMTQ5MSwxNiArMTQ4NywxNiBAQAogCQl7CiAJCQkvKiBUaGUgZG9jIHNheXM6ICJXaGVuZXZlciBhIGJ1ZmZlciBpcyB1c2VkIGl0IHNob3VsZAogCQkJICAgY2FsbCBWSURJT0NTWU5DIHRvIGZyZWUgdGhpcyBmcmFtZSB1cCBhbmQgY29udGludWUuIgotCQkJICAgCi0JCQkgICBUaGUgb25seSBvZGQgdGhpbmcgYWJvdXQgdGhpcyB3aG9sZSBwcm9jZWR1cmUgaXMgCisKKwkJCSAgIFRoZSBvbmx5IG9kZCB0aGluZyBhYm91dCB0aGlzIHdob2xlIHByb2NlZHVyZSBpcwogCQkJICAgdGhhdCBNQ0FQVFVSRSBmbGFncyB0aGUgYnVmZmVyIGFzICJpbiB1c2UiLCBhbmQKLQkJCSAgIFNZTkMgaW1tZWRpYXRlbHkgdW5tYXJrcyBpdCwgd2hpbGUgaXQgaXNuJ3QgCisJCQkgICBTWU5DIGltbWVkaWF0ZWx5IHVubWFya3MgaXQsIHdoaWxlIGl0IGlzbid0CiAJCQkgICBhZnRlciBTWU5DIHRoYXQgeW91IGtub3cgdGhhdCB0aGUgYnVmZmVyIGFjdHVhbGx5CiAJCQkgICBnb3QgZmlsbGVkISBTbyB5b3UgYmV0dGVyIG5vdCBzdGFydCBhIENBUFRVUkUgaW4KLQkJCSAgIHRoZSBzYW1lIGZyYW1lIGltbWVkaWF0ZWx5ICh1c2UgZG91YmxlIGJ1ZmZlcmluZykuIAotCQkJICAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvciB0aGlzIGNhbSwgc2luY2UgaXQgaGFzIAotCQkJICAgZXh0cmEgaW50ZXJtZWRpYXRlIGJ1ZmZlcnMsIGJ1dCBhIGhhcmR3YXJlIAotCQkJICAgZ3JhYmJlciBjYXJkIHdpbGwgdGhlbiBvdmVyd3JpdGUgdGhlIGJ1ZmZlciAKKwkJCSAgIHRoZSBzYW1lIGZyYW1lIGltbWVkaWF0ZWx5ICh1c2UgZG91YmxlIGJ1ZmZlcmluZykuCisJCQkgICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gZm9yIHRoaXMgY2FtLCBzaW5jZSBpdCBoYXMKKwkJCSAgIGV4dHJhIGludGVybWVkaWF0ZSBidWZmZXJzLCBidXQgYSBoYXJkd2FyZQorCQkJICAgZ3JhYmJlciBjYXJkIHdpbGwgdGhlbiBvdmVyd3JpdGUgdGhlIGJ1ZmZlcgogCQkJICAgeW91J3JlIHdvcmtpbmcgb24uCiAJCQkgKi8KIAkJCWludCAqbWJ1ZiA9IGFyZzsKQEAgLTE1MTYsMTAgKzE1MTIsMTAgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkJLyogQWRkIG91cnNlbHZlcyB0byB0aGUgZnJhbWUgd2FpdC1xdWV1ZS4KLQkJCSAgIAorCiAJCQkgICBGSVhNRTogbmVlZHMgYXVkaXRpbmcgZm9yIHNhZmV0eS4KIAkJCSAgIFFVRVNUSU9OOiBJbiB3aGF0IHJlc3BlY3Q/IEkgdGhpbmsgdGhhdCB1c2luZyB0aGUKLQkJCSAgICAgICAgICAgICBmcmFtZXEgaXMgc2FmZSBub3cuCisJCQkJICAgICBmcmFtZXEgaXMgc2FmZSBub3cuCiAJCQkgKi8KIAkJCWFkZF93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKIAkJCXdoaWxlIChwZGV2LT5mdWxsX2ZyYW1lcyA9PSBOVUxMKSB7CkBAIC0xNTI4LDIxICsxNTI0LDIxIEBACiAJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQkJCXJldHVybiAtcGRldi0+ZXJyb3Jfc3RhdHVzOwogCQkJCX0KLQkJCQotCSAgICAgICAgICAgICAgICAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JICAgICAgICAgICAgICAgIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOwotCQkgICAgICAgICAgICAgICAgCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCSAgICAgICAgICAgICAgICAJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkgICAgICAgIAkgICAgICAgIH0KLQkgICAgICAgICAgICAgICAgCXNjaGVkdWxlKCk7Ci0JCSAgICAgICAgICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCQl9CisJCQkJc2NoZWR1bGUoKTsKKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJfQogCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJCQkKLQkJCS8qIFRoZSBmcmFtZSBpcyByZWFkeS4gRXhwYW5kIGluIHRoZSBpbWFnZSBidWZmZXIgCi0JCQkgICByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIEkgZG9uJ3QgY2FyZSBpZiB5b3UgCi0JCQkgICBtbWFwKCkgNSBidWZmZXJzIGFuZCByZXF1ZXN0IGRhdGEgaW4gdGhpcyBvcmRlcjogCisKKwkJCS8qIFRoZSBmcmFtZSBpcyByZWFkeS4gRXhwYW5kIGluIHRoZSBpbWFnZSBidWZmZXIKKwkJCSAgIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gSSBkb24ndCBjYXJlIGlmIHlvdQorCQkJICAgbW1hcCgpIDUgYnVmZmVycyBhbmQgcmVxdWVzdCBkYXRhIGluIHRoaXMgb3JkZXI6CiAJCQkgICBidWZmZXIgNCAyIDMgMCAxIDIgMyAwIDQgMyAxIC4gLiAuCiAJCQkgICBHcmFiYmVyIGhhcmR3YXJlIG1heSBub3QgYmUgc28gZm9yZ2l2aW5nLgogCQkJICovCkBAIC0xNTU1LDExICsxNTUxLDExIEBACiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQotCQkKKwogCQljYXNlIFZJRElPQ0dBVURJTzoKIAkJewogCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOwotCQkJCisKIAkJCXN0cmNweSh2LT5uYW1lLCAiTWljcm9waG9uZSIpOwogCQkJdi0+YXVkaW8gPSAtMTsgLyogdW5rbm93biBhdWRpbyBtaW5vciAqLwogCQkJdi0+ZmxhZ3MgPSAwOwpAQCAtMTU2OSwxOSArMTU2NSwxOSBAQAogCQkJdi0+dHJlYmxlID0gMDsKIAkJCXYtPmJhbGFuY2UgPSAweDgwMDA7CiAJCQl2LT5zdGVwID0gMTsKLQkJCWJyZWFrOwkKKwkJCWJyZWFrOwogCQl9Ci0JCQorCiAJCWNhc2UgVklESU9DU0FVRElPOgogCQl7CiAJCQkvKiBEdW1teTogbm90aGluZyBjYW4gYmUgc2V0ICovCiAJCQlicmVhazsKIAkJfQotCQkKKwogCQljYXNlIFZJRElPQ0dVTklUOgogCQl7CiAJCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdnUgPSBhcmc7Ci0JCQkKKwogCQkJdnUtPnZpZGVvID0gcGRldi0+dmRldi0+bWlub3IgJiAweDNGOwogCQkJdnUtPmF1ZGlvID0gLTE7IC8qIG5vdCBrbm93biB5ZXQgKi8KIAkJCXZ1LT52YmkgPSAtMTsKQEAgLTE1OTMsNyArMTU4OSw3IEBACiAJCQlyZXR1cm4gcHdjX2lvY3RsKHBkZXYsIGNtZCwgYXJnKTsKIAl9IC8qIC4uc3dpdGNoICovCiAJcmV0dXJuIDA7Ci19CQorfQogCiBzdGF0aWMgaW50IHB3Y192aWRlb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtMTYwOSwxMCArMTYwNSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZC12bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOwotCQorCiAJVHJhY2UoVFJBQ0VfTUVNT1JZLCAibW1hcCgweCVwLCAweCVseCwgJWx1KSBjYWxsZWQuXG4iLCB2ZGV2LCBzdGFydCwgc2l6ZSk7CiAJcGRldiA9IHZkZXYtPnByaXY7Ci0JCisKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwogCiAJcG9zID0gKHVuc2lnbmVkIGxvbmcpcGRldi0+aW1hZ2VfZGF0YTsKQEAgLTE2NTAsNyArMTY0Niw3IEBACiAJY2hhciBzZXJpYWxfbnVtYmVyWzMwXSwgKm5hbWU7CiAKIAkvKiBDaGVjayBpZiB3ZSBjYW4gaGFuZGxlIHRoaXMgZGV2aWNlICovCi0JVHJhY2UoVFJBQ0VfUFJPQkUsICJwcm9iZSgpIGNhbGxlZCBbJTA0WCAlMDRYXSwgaWYgJWRcbiIsIAorCVRyYWNlKFRSQUNFX1BST0JFLCAicHJvYmUoKSBjYWxsZWQgWyUwNFggJTA0WF0sIGlmICVkXG4iLAogCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAogCQlpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOwpAQCAtMTc3NCwxMSArMTc3MCwxMSBAQAogCQkJbmFtZSA9ICJMb2dpdGVjaCBRdWlja0NhbSAocmVzLikiOwogCQkJdHlwZV9pZCA9IDczMDsgLyogQXNzdW1pbmcgQ01PUyAqLwogCQkJYnJlYWs7Ci0gICAgICAgIAlkZWZhdWx0OgorCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIAkJYnJlYWs7Ci0gICAgICAgIAl9Ci0gICAgICAgIH0KKwkJCWJyZWFrOworCQl9CisJfQogCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDA1NWQpIHsKIAkJLyogSSBkb24ndCBrbm93IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIEMxMCBhbmQgdGhlIEMzMDsKIAkJICAgSSBzdXBwb3NlIHRoZSBkaWZmZXJlbmNlIGlzIHRoZSBzZW5zb3IsIGJ1dCBib3RoIGNhbWVyYXMKQEAgLTE4NDEsNyArMTgzNyw3IEBACiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCWJyZWFrOwogCQl9Ci0JCisKIAl9CiAJZWxzZSBpZiAodmVuZG9yX2lkID09IDB4MGQ4MSkgewogCQlzd2l0Y2gocHJvZHVjdF9pZCkgewpAQCAtMTg2MCw3ICsxODU2LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCWVsc2UgCisJZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsgLyogTm90IGFueSBvZiB0aGUga25vdyB0eXBlczsgYnV0IHRoZSBsaXN0IGtlZXBzIGdyb3dpbmcuICovCiAKIAltZW1zZXQoc2VyaWFsX251bWJlciwgMCwgMzApOwpAQCAtMTg3MSwxMiArMTg2NywxMSBAQAogCQlJbmZvKCJXYXJuaW5nOiBtb3JlIHRoYW4gMSBjb25maWd1cmF0aW9uIGF2YWlsYWJsZS5cbiIpOwogCiAJLyogQWxsb2NhdGUgc3RydWN0dXJlLCBpbml0aWFsaXplIHBvaW50ZXJzLCBtdXRleGVzLCBldGMuIGFuZCBsaW5rIGl0IHRvIHRoZSB1c2JfZGV2aWNlICovCi0JcGRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwd2NfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJcGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwd2NfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBkZXYgPT0gTlVMTCkgewogCQlFcnIoIk9vcHMsIGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHB3Y19kZXZpY2UuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChwZGV2LCAwLCBzaXplb2Yoc3RydWN0IHB3Y19kZXZpY2UpKTsKIAlwZGV2LT50eXBlID0gdHlwZV9pZDsKIAlwZGV2LT52c2l6ZSA9IGRlZmF1bHRfc2l6ZTsKIAlwZGV2LT52ZnJhbWVzID0gZGVmYXVsdF9mcHM7CkBAIC0xODg1LDkgKzE4ODAsOSBAQAogCWlmICh2ZW5kb3JfaWQgPT0gMHgwNDZEICYmIHByb2R1Y3RfaWQgPT0gMHgwOEI1KQogCXsKIAkJLyogTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQKLQkgICAgICAgICAgIFRoZSByYW5nZXMgaGF2ZSBiZWVuIGRldGVybWluZWQgZXhwZXJpbWVudGFsbHk7IHRoZXkgbWF5IGRpZmZlciBmcm9tIGNhbSB0byBjYW0uCi0JICAgICAgICAgICBBbHNvLCB0aGUgZXhhY3QgcmFuZ2VzIGxlZnQtcmlnaHQgYW5kIHVwLWRvd24gYXJlIGRpZmZlcmVudCBmb3IgbXkgY2FtCi0JICAgICAgICAgICovCisJCSAgIFRoZSByYW5nZXMgaGF2ZSBiZWVuIGRldGVybWluZWQgZXhwZXJpbWVudGFsbHk7IHRoZXkgbWF5IGRpZmZlciBmcm9tIGNhbSB0byBjYW0uCisJCSAgIEFsc28sIHRoZSBleGFjdCByYW5nZXMgbGVmdC1yaWdodCBhbmQgdXAtZG93biBhcmUgZGlmZmVyZW50IGZvciBteSBjYW0KKwkJICAqLwogCQlwZGV2LT5hbmdsZV9yYW5nZS5wYW5fbWluICA9IC03MDAwOwogCQlwZGV2LT5hbmdsZV9yYW5nZS5wYW5fbWF4ICA9ICA3MDAwOwogCQlwZGV2LT5hbmdsZV9yYW5nZS50aWx0X21pbiA9IC0zMDAwOwpAQCAtMTk0NCw3ICsxOTM5LDcgQEAKIAl9CiAKIAkvKiBvY2N1cHkgc2xvdCAqLwotCWlmIChoaW50IDwgTUFYX0RFVl9ISU5UUykgCisJaWYgKGhpbnQgPCBNQVhfREVWX0hJTlRTKQogCQlkZXZpY2VfaGludFtoaW50XS5wZGV2ID0gcGRldjsKIAogCVRyYWNlKFRSQUNFX1BST0JFLCAicHJvYmUoKSBmdW5jdGlvbiByZXR1cm5pbmcgc3RydWN0IGF0IDB4JXAuXG4iLCBwZGV2KTsKQEAgLTE5NzMsMTMgKzE5NjgsMTMgQEAKIAkJRXJyKCJwd2NfZGlzY29ubmVjdCgpIFdvb3BzOiBwb2ludGVyIG1pc21hdGNoIHVkZXYvcGRldi5cbiIpOwogCQlnb3RvIGRpc2Nvbm5lY3Rfb3V0OwogCX0KLSNpZmRlZiBQV0NfTUFHSUMJCisjaWZkZWYgUFdDX01BR0lDCiAJaWYgKHBkZXYtPm1hZ2ljICE9IFBXQ19NQUdJQykgewogCQlFcnIoInB3Y19kaXNjb25uZWN0KCkgTWFnaWMgbnVtYmVyIGZhaWxlZC4gQ29uc3VsdCB5b3VyIHNjcm9sbHMgYW5kIHRyeSBhZ2Fpbi5cbiIpOwogCQlnb3RvIGRpc2Nvbm5lY3Rfb3V0OwogCX0KICNlbmRpZgotCQorCiAJLyogV2UgZ290IHVucGx1Z2dlZDsgdGhpcyBpcyBzaWduYWxsZWQgYnkgYW4gRVBJUEUgZXJyb3IgY29kZSAqLwogCWlmIChwZGV2LT52b3BlbikgewogCQlJbmZvKCJEaXNjb25uZWN0ZWQgd2hpbGUgd2ViY2FtIGlzIGluIHVzZSFcbiIpOwpAQCAtMjAyMiw4ICsyMDE3LDggQEAKIH0KIAogCi0vKiAKLSAqIEluaXRpYWxpemF0aW9uIGNvZGUgJiBtb2R1bGUgc3R1ZmYgCisvKgorICogSW5pdGlhbGl6YXRpb24gY29kZSAmIG1vZHVsZSBzdHVmZgogICovCiAKIHN0YXRpYyBjaGFyIHNpemVbMTBdOwpAQCAtMjE3Myw3ICsyMTY4LDcgQEAKIAkJCQlpZiAoKmRvdCAhPSAnXDAnKSB7CiAJCQkJCS8qIFRoZXJlJ3MgYSBzZXJpYWwgbnVtYmVyIGFzIHdlbGwgKi8KIAkJCQkJaW50IGs7Ci0JCQkJCQorCiAJCQkJCWRvdCsrOwogCQkJCQlrID0gMDsKIAkJCQkJd2hpbGUgKCpkb3QgIT0gJzonICYmIGsgPCAyOSkgewpAQCAtMjE4MywxOCArMjE3OCwxOCBAQAogCQkJCQlkZXZpY2VfaGludFtpXS5zZXJpYWxfbnVtYmVyW2tdID0gJ1wwJzsKIAkJCQl9CiAJCQl9Ci0jaWYgUFdDX0RFQlVHCQkKKyNpZiBQV0NfREVCVUcKIAkJCURlYnVnKCJkZXZpY2VfaGludFslZF06XG4iLCBpKTsKIAkJCURlYnVnKCIgIHR5cGUgICAgOiAlZFxuIiwgZGV2aWNlX2hpbnRbaV0udHlwZSk7CiAJCQlEZWJ1ZygiICBzZXJpYWwjIDogJXNcbiIsIGRldmljZV9oaW50W2ldLnNlcmlhbF9udW1iZXIpOwogCQkJRGVidWcoIiAgbm9kZSAgICA6ICVkXG4iLCBkZXZpY2VfaGludFtpXS5kZXZpY2Vfbm9kZSk7Ci0jZW5kaWYJCQkKKyNlbmRpZgogCQl9CiAJCWVsc2UKIAkJCWRldmljZV9oaW50W2ldLnR5cGUgPSAwOyAvKiBub3QgZmlsbGVkICovCiAJfSAvKiAuLmZvciBNQVhfREVWX0hJTlRTICovCiAKLSAJVHJhY2UoVFJBQ0VfUFJPQkUsICJSZWdpc3RlcmluZyBkcml2ZXIgYXQgYWRkcmVzcyAweCVwLlxuIiwgJnB3Y19kcml2ZXIpOworCVRyYWNlKFRSQUNFX1BST0JFLCAiUmVnaXN0ZXJpbmcgZHJpdmVyIGF0IGFkZHJlc3MgMHglcC5cbiIsICZwd2NfZHJpdmVyKTsKIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZwd2NfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pb2N0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlvY3RsLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pb2N0bC5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaW9jdGwuaAppbmRleCA1ZjljYjA4Li43ODRiYzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlvY3RsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlvY3RsLmgKQEAgLTMzLDEwICszMywxMCBAQAogLyoKICAgIENoYW5nZXMKICAgIDIwMDEvMDgvMDMgIEFsdmFyYWRvICAgQWRkZWQgaW9jdGwgY29uc3RhbnRzIHRvIGFjY2VzcyBtZXRob2RzIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyB3aGl0ZSBiYWxhbmNlIGFuZCByZWQvYmx1ZSBnYWlucworCQkJICBjaGFuZ2luZyB3aGl0ZSBiYWxhbmNlIGFuZCByZWQvYmx1ZSBnYWlucwogICAgMjAwMi8xMi8xNSAgRy4gSC4gRmVybmFuZGV6LVRvcmliaW8gICBWSURJT0NHUkVBTFNJWkUKICAgIDIwMDMvMTIvMTMgIE5lbW9zZnQgVW52LiBTb21lIG1vZGlmaWNhdGlvbnMgdG8gbWFrZSBpbnRlcmZhY2luZyB0bwotICAgICAgICAgICAgICAgUFdDWCBlYXNpZXIKKwkgICAgICAgUFdDWCBlYXNpZXIKICAqLwogCiAvKiBUaGVzZSBhcmUgcHJpdmF0ZSBpb2N0bCgpIGNvbW1hbmRzLCBzcGVjaWZpYyBmb3IgdGhlIFBoaWxpcHMgd2ViY2Ftcy4KQEAgLTQ1LDEwICs0NSwxMCBAQAogCiAgICBUaGUgI2RlZmluZSBuYW1lcyBhcmUgYnVpbHQgdXAgbGlrZSBmb2xsb3dzOgogICAgVklESU9DCQlWSURlbyBJT0N0bCBwcmVmaXgKLSAgICAgICAgIFBXQwkJUGhpbHBzIFdlYkNhbQotICAgICAgICAgICAgRyAgICAgICAgICAgb3B0aW9uYWw6IEdldAotICAgICAgICAgICAgUyAgICAgICAgICAgb3B0aW9uYWw6IFNldAotICAgICAgICAgICAgIC4uLiAJdGhlIGZ1bmN0aW9uCisJIFBXQwkJUGhpbHBzIFdlYkNhbQorCSAgICBHICAgICAgICAgICBvcHRpb25hbDogR2V0CisJICAgIFMgICAgICAgICAgIG9wdGlvbmFsOiBTZXQKKwkgICAgIC4uLiAJdGhlIGZ1bmN0aW9uCiAgKi8KIAogCkBAIC05NCw3ICs5NCw3IEBACiB7CiAJY2hhciBzZXJpYWxbMzBdOwkvKiBTdHJpbmcgd2l0aCBzZXJpYWwgbnVtYmVyLiBDb250YWlucyB0ZXJtaW5hdGluZyAwICovCiB9OwotCQorCiAvKiBwd2Nfd2hpdGViYWxhbmNlLm1vZGUgdmFsdWVzICovCiAjZGVmaW5lIFBXQ19XQl9JTkRPT1IJCTAKICNkZWZpbmUgUFdDX1dCX09VVERPT1IJCTEKQEAgLTEwMiwxNCArMTAyLDE0IEBACiAjZGVmaW5lIFBXQ19XQl9NQU5VQUwJCTMKICNkZWZpbmUgUFdDX1dCX0FVVE8JCTQKIAotLyogVXNlZCB3aXRoIFZJRElPQ1BXQ1tTR11BV0IgKEF1dG8gV2hpdGUgQmFsYW5jZSkuIAorLyogVXNlZCB3aXRoIFZJRElPQ1BXQ1tTR11BV0IgKEF1dG8gV2hpdGUgQmFsYW5jZSkuCiAgICBTZXQgbW9kZSB0byBvbmUgb2YgdGhlIFBXQ19XQl8qIHZhbHVlcyBhYm92ZS4KLSAgICpyZWQgYW5kICpibHVlIGFyZSB0aGUgcmVzcGVjdGl2ZSBnYWlucyBvZiB0aGVzZSBjb2xvdXIgY29tcG9uZW50cyBpbnNpZGUgCisgICAqcmVkIGFuZCAqYmx1ZSBhcmUgdGhlIHJlc3BlY3RpdmUgZ2FpbnMgb2YgdGhlc2UgY29sb3VyIGNvbXBvbmVudHMgaW5zaWRlCiAgICB0aGUgY2FtZXJhOyByYW5nZSAwLi42NTUzNQotICAgV2hlbiAnbW9kZScgPT0gUFdDX1dCX01BTlVBTCwgJ21hbnVhbF9yZWQnIGFuZCAnbWFudWFsX2JsdWUnIGFyZSBzZXQgb3IgcmVhZDsgCisgICBXaGVuICdtb2RlJyA9PSBQV0NfV0JfTUFOVUFMLCAnbWFudWFsX3JlZCcgYW5kICdtYW51YWxfYmx1ZScgYXJlIHNldCBvciByZWFkOwogICAgb3RoZXJ3aXNlIHVuZGVmaW5lZC4KICAgICdyZWFkX3JlZCcgYW5kICdyZWFkX2JsdWUnIGFyZSByZWFkLW9ubHkuCi0qLyAgIAorKi8KIHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlCiB7CiAJaW50IG1vZGU7CkBAIC0xMTcsOSArMTE3LDkgQEAKIAlpbnQgcmVhZF9yZWQsIHJlYWRfYmx1ZTsJLyogUi9PICovCiB9OwogCi0vKiAKKy8qCiAgICAnY29udHJvbF9zcGVlZCcgYW5kICdjb250cm9sX2RlbGF5JyBhcmUgdXNlZCBpbiBhdXRvbWF0aWMgd2hpdGViYWxhbmNlIG1vZGUsCi0gICBhbmQgdGVsbCB0aGUgY2FtZXJhIGhvdyBmYXN0IGl0IHNob3VsZCByZWFjdCB0byBjaGFuZ2VzIGluIGxpZ2h0aW5nLCBhbmQgCisgICBhbmQgdGVsbCB0aGUgY2FtZXJhIGhvdyBmYXN0IGl0IHNob3VsZCByZWFjdCB0byBjaGFuZ2VzIGluIGxpZ2h0aW5nLCBhbmQKICAgIHdpdGggaG93IG11Y2ggZGVsYXkuIFZhbGlkIHZhbHVlcyBhcmUgMC4uNjU1MzUuCiAqLwogc3RydWN0IHB3Y193Yl9zcGVlZApAQCAtMTQ4LDExICsxNDgsMTEgQEAKICNkZWZpbmUgUFdDX01QVF9USUxUCQkweDAyCiAjZGVmaW5lIFBXQ19NUFRfVElNRU9VVAkJMHgwNCAvKiBmb3Igc3RhdHVzICovCiAKLS8qIFNldCBhbmdsZXM7IHdoZW4gYWJzb2x1dGUgIT0gMCwgdGhlIGFuZ2xlIGlzIGFic29sdXRlIGFuZCB0aGUgCisvKiBTZXQgYW5nbGVzOyB3aGVuIGFic29sdXRlICE9IDAsIHRoZSBhbmdsZSBpcyBhYnNvbHV0ZSBhbmQgdGhlCiAgICBkcml2ZXIgY2FsY3VsYXRlcyB0aGUgcmVsYXRpdmUgb2Zmc2V0IGZvciB5b3UuIFRoaXMgY2FuIG9ubHkKICAgIGJlIHVzZWQgd2l0aCBWSURJT0NQV0NTQU5HTEU7IFZJRElPQ1BXQ0dBTkdMRSBhbHdheXMgcmV0dXJucwogICAgYWJzb2x1dGUgYW5nbGVzLgotICovICAgCisgKi8KIHN0cnVjdCBwd2NfbXB0X2FuZ2xlcwogewogCWludCBhYnNvbHV0ZTsJCS8qIHdyaXRlLW9ubHkgKi8KQEAgLTE3OSwxNCArMTc5LDE0IEBACiAvKiBUaGlzIGlzIHVzZWQgZm9yIG91dC1vZi1rZXJuZWwgZGVjb21wcmVzc2lvbi4gV2l0aCBpdCwgeW91IGNhbiBnZXQKICAgIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGluaXRpYWxpemUgYW5kIHVzZSB0aGUgZGVjb21wcmVzc29yCiAgICByb3V0aW5lcyBpbiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucy4KLSAqLyAgIAorICovCiBzdHJ1Y3QgcHdjX3ZpZGVvX2NvbW1hbmQKIHsKIAlpbnQgdHlwZTsJCS8qIGNhbWVyYSB0eXBlICg2NDUsIDY3NSwgNzMwLCBldGMuKSAqLwogCWludCByZWxlYXNlOwkJLyogcmVsZWFzZSBudW1iZXIgKi8KIAotICAgICAgICBpbnQgc2l6ZTsJCS8qIG9uZSBvZiBQU1pfKiAqLwotICAgICAgICBpbnQgYWx0ZXJuYXRlOworCWludCBzaXplOwkJLyogb25lIG9mIFBTWl8qICovCisJaW50IGFsdGVybmF0ZTsKIAlpbnQgY29tbWFuZF9sZW47CS8qIGxlbmd0aCBvZiBVU0IgdmlkZW8gY29tbWFuZCAqLwogCXVuc2lnbmVkIGNoYXIgY29tbWFuZF9idWZbMTNdOwkvKiBBY3R1YWwgVVNCIHZpZGVvIGNvbW1hbmQgKi8KIAlpbnQgYmFuZGxlbmd0aDsJCS8qID4wID0gY29tcHJlc3NlZCAqLwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKICAgLyogRmxpY2tlcmxlc3MgbW9kZTsgPSAwIG9mZiwgb3RoZXJ3aXNlIG9uICovCiAjZGVmaW5lIFZJRElPQ1BXQ1NGTElDS0VSCV9JT1coJ3YnLCAyMDgsIGludCkKLSNkZWZpbmUgVklESU9DUFdDR0ZMSUNLRVIJX0lPUigndicsIDIwOCwgaW50KSAgCisjZGVmaW5lIFZJRElPQ1BXQ0dGTElDS0VSCV9JT1IoJ3YnLCAyMDgsIGludCkKIAogICAvKiBEeW5hbWljIG5vaXNlIHJlZHVjdGlvbjsgMCBvZmYsIDMgPSBoaWdoIG5vaXNlIHJlZHVjdGlvbiAqLwogI2RlZmluZSBWSURJT0NQV0NTRFlOTk9JU0UJX0lPVygndicsIDIwOSwgaW50KQpAQCAtMjczLDcgKzI3Myw3IEBACiAgLyogUmVhbCBpbWFnZSBzaXplIGFzIHVzZWQgYnkgdGhlIGNhbWVyYTsgdGVsbHMgeW91IHdoZXRoZXIgb3Igbm90IHRoZXJlJ3MgYSBncmF5IGJvcmRlciBhcm91bmQgdGhlIGltYWdlICovCiAjZGVmaW5lIFZJRElPQ1BXQ0dSRUFMU0laRQlfSU9SKCd2JywgMjEwLCBzdHJ1Y3QgcHdjX2ltYWdlc2l6ZSkKIAotIC8qIE1vdG9yaXplZCBwYW4gJiB0aWx0IGZ1bmN0aW9ucyAqLyAKKyAvKiBNb3Rvcml6ZWQgcGFuICYgdGlsdCBmdW5jdGlvbnMgKi8KICNkZWZpbmUgVklESU9DUFdDTVBUUkVTRVQJX0lPVygndicsIDIxMSwgaW50KQogI2RlZmluZSBWSURJT0NQV0NNUFRHUkFOR0UJX0lPUigndicsIDIxMSwgc3RydWN0IHB3Y19tcHRfcmFuZ2UpCiAjZGVmaW5lIFZJRElPQ1BXQ01QVFNBTkdMRQlfSU9XKCd2JywgMjEyLCBzdHJ1Y3QgcHdjX21wdF9hbmdsZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2Mta2lhcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1raWFyYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTYwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2Mta2lhcmEuYwpAQCAtMCwwICsxLDMxOCBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisKKy8qIFRoaXMgdGFibGVzIGNvbnRhaW5zIGVudHJpZXMgZm9yIHRoZSA3MzAvNzQwLzc1MCAoS2lhcmEpIGNhbWVyYSwgd2l0aAorICAgNCBkaWZmZXJlbnQgcXVhbGl0aWVzIChubyBjb21wcmVzc2lvbiwgbG93LCBtZWRpdW0sIGhpZ2gpLgorICAgSXQgbGlzdHMgdGhlIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgZm9yIHNhaWQgbW9kZSBieSBpdHMgYWx0ZXJuYXRlIGludGVyZmFjZQorICAgbnVtYmVyLiBBbiBhbHRlcm5hdGUgb2YgMCBtZWFucyB0aGF0IHRoZSBtb2RlIGlzIHVuYXZhaWxhYmxlLgorCisgICBUaGVyZSBhcmUgNiAqIDQgKiA0IGVudHJpZXM6CisgICAgIDYgZGlmZmVyZW50IHJlc29sdXRpb25zIHN1YnFjaWYsIHFzaWYsIHFjaWYsIHNpZiwgY2lmLCB2Z2EKKyAgICAgNiBmcmFtZXJhdGVzOiA1LCAxMCwgMTUsIDIwLCAyNSwgMzAKKyAgICAgNCBjb21wcmVzc2lvbiBtb2RpOiBub25lLCBsb3csIG1lZGl1bSwgaGlnaAorCisgICBXaGVuIGFuIHVuY29tcHJlc3NlZCBtb2RlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBuZXh0IGF2YWlsYWJsZSBjb21wcmVzc2VkIG1vZGUKKyAgIHdpbGwgYmUgY2hvc2VuICh1bmxlc3MgdGhlIGRlY29tcHJlc3NvciBpcyBhYnNlbnQpLiBTb21ldGltZXMgdGhlcmUgYXJlIG9ubHkKKyAgIDEgb3IgMiBjb21wcmVzc2VkIG1vZGVzIGF2YWlsYWJsZTsgaW4gdGhhdCBjYXNlIGVudHJpZXMgYXJlIGR1cGxpY2F0ZWQuCisqLworCisKKyNpbmNsdWRlICJwd2Mta2lhcmEuaCIKKyNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgorCitjb25zdCBzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkgS2lhcmFfdGFibGVbUFNaX01BWF1bNl1bNF0gPQoreworICAgLyogU1FDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisJIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCisJIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCisJIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCisJIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisJIHsyLCAyOTEsICAgIDAsIHsweDFDLCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDIzLCAweDAxLCAweDgwfX0sCisJIHsxLCAxOTIsICA2MzAsIHsweDE0LCAweEY0LCAweDMwLCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEMwLCAweDAwLCAweDgwfX0sCisJIHsxLCAxOTIsICA2MzAsIHsweDE0LCAweEY0LCAweDMwLCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEMwLCAweDAwLCAweDgwfX0sCisJIHsxLCAxOTIsICA2MzAsIHsweDE0LCAweEY0LCAweDMwLCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisJIHszLCA0MzcsICAgIDAsIHsweDFCLCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEI1LCAweDAxLCAweDgwfX0sCisJIHsyLCAyOTIsICA2NDAsIHsweDEzLCAweEY0LCAweDMwLCAweDEzLCAweEY3LCAweDEzLCAweDJGLCAweDEzLCAweDIwLCAweDI0LCAweDAxLCAweDgwfX0sCisJIHsyLCAyOTIsICA2NDAsIHsweDEzLCAweEY0LCAweDMwLCAweDEzLCAweEY3LCAweDEzLCAweDJGLCAweDEzLCAweDIwLCAweDI0LCAweDAxLCAweDgwfX0sCisJIHsxLCAxOTIsICA0MjAsIHsweDEzLCAweEY0LCAweDMwLCAweDBELCAweDFCLCAweDBDLCAweDUzLCAweDFFLCAweDE4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisJIHs0LCA1ODksICAgIDAsIHsweDFBLCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRELCAweDAyLCAweDgwfX0sCisJIHszLCA0NDgsICA3MzAsIHsweDEyLCAweEY0LCAweDMwLCAweDE2LCAweEM5LCAweDE2LCAweDAxLCAweDBFLCAweDE4LCAweEMwLCAweDAxLCAweDgwfX0sCisJIHsyLCAyOTIsICA0NzYsIHsweDEyLCAweEY0LCAweDMwLCAweDBFLCAweEQ4LCAweDBFLCAweDEwLCAweDE5LCAweDE4LCAweDI0LCAweDAxLCAweDgwfX0sCisJIHsxLCAxOTIsICAzMTIsIHsweDEyLCAweEY0LCAweDUwLCAweDA5LCAweEIzLCAweDA4LCAweEVCLCAweDFFLCAweDE4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisJIHs1LCA3MDMsICAgIDAsIHsweDE5LCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEJGLCAweDAyLCAweDgwfX0sCisJIHszLCA0NDcsICA2MTAsIHsweDExLCAweEY0LCAweDMwLCAweDEzLCAweDBCLCAweDEyLCAweDQzLCAweDE0LCAweDI4LCAweEJGLCAweDAxLCAweDgwfX0sCisJIHsyLCAyOTIsICAzOTgsIHsweDExLCAweEY0LCAweDUwLCAweDBDLCAweDZDLCAweDBCLCAweEE0LCAweDFFLCAweDI4LCAweDI0LCAweDAxLCAweDgwfX0sCisJIHsxLCAxOTMsICAyNjIsIHsweDExLCAweEY0LCAweDUwLCAweDA4LCAweDIzLCAweDA3LCAweDVCLCAweDFFLCAweDI4LCAweEMxLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisJIHs4LCA4NzQsICAgIDAsIHsweDE4LCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDZBLCAweDAzLCAweDgwfX0sCisJIHs1LCA3MDQsICA3MzAsIHsweDEwLCAweEY0LCAweDMwLCAweDE2LCAweEM5LCAweDE2LCAweDAxLCAweDBFLCAweDI4LCAweEMwLCAweDAyLCAweDgwfX0sCisJIHszLCA0NDgsICA0OTIsIHsweDEwLCAweEY0LCAweDMwLCAweDBGLCAweDVELCAweDBFLCAweDk1LCAweDE1LCAweDI4LCAweEMwLCAweDAxLCAweDgwfX0sCisJIHsyLCAyOTIsICAzMjAsIHsweDEwLCAweEY0LCAweDUwLCAweDA5LCAweEZCLCAweDA5LCAweDMzLCAweDFFLCAweDI4LCAweDI0LCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKwkgezQsIDU4MiwgICAgMCwgezB4MEQsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDYsIDB4MDIsIDB4ODB9fSwKKwkgezMsIDM4NywgMTI3NiwgezB4MDUsIDB4RjQsIDB4MzAsIDB4MjcsIDB4RDgsIDB4MjYsIDB4NDgsIDB4MDMsIDB4MTAsIDB4ODMsIDB4MDEsIDB4ODB9fSwKKwkgezIsIDI5MSwgIDk2MCwgezB4MDUsIDB4RjQsIDB4MzAsIDB4MUQsIDB4RjIsIDB4MUMsIDB4NjIsIDB4MDQsIDB4MTAsIDB4MjMsIDB4MDEsIDB4ODB9fSwKKwkgezEsIDE5MSwgIDYzMCwgezB4MDUsIDB4RjQsIDB4NTAsIDB4MTMsIDB4QTksIDB4MTIsIDB4MTksIDB4MDUsIDB4MTgsIDB4QkYsIDB4MDAsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHs2LCA3NzUsIDEyNzgsIHsweDA0LCAweEY0LCAweDMwLCAweDI3LCAweEU4LCAweDI2LCAweDU4LCAweDA1LCAweDMwLCAweDA3LCAweDAzLCAweDgwfX0sCisJIHszLCA0NDcsICA3MzYsIHsweDA0LCAweEY0LCAweDMwLCAweDE2LCAweEZCLCAweDE1LCAweDZCLCAweDA1LCAweDI4LCAweEJGLCAweDAxLCAweDgwfX0sCisJIHsyLCAyOTIsICA0ODAsIHsweDA0LCAweEY0LCAweDcwLCAweDBFLCAweEY5LCAweDBELCAweDY5LCAweDA5LCAweDI4LCAweDI0LCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7OSwgOTU1LCAxMDUwLCB7MHgwMywgMHhGNCwgMHgzMCwgMHgyMCwgMHhDRiwgMHgxRiwgMHgzRiwgMHgwNiwgMHg0OCwgMHhCQiwgMHgwMywgMHg4MH19LAorCSB7NCwgNTkyLCAgNjUwLCB7MHgwMywgMHhGNCwgMHgzMCwgMHgxNCwgMHg0NCwgMHgxMiwgMHhCNCwgMHgwOCwgMHgzMCwgMHg1MCwgMHgwMiwgMHg4MH19LAorCSB7MywgNDQ4LCAgNDkyLCB7MHgwMywgMHhGNCwgMHg1MCwgMHgwRiwgMHg1MiwgMHgwRCwgMHhDMiwgMHgwOSwgMHgzOCwgMHhDMCwgMHgwMSwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDIwIGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezksIDk1OCwgIDc4MiwgezB4MDIsIDB4RjQsIDB4MzAsIDB4MTgsIDB4NkEsIDB4MTYsIDB4REEsIDB4MEIsIDB4NTgsIDB4QkUsIDB4MDMsIDB4ODB9fSwKKwkgezUsIDcwMywgIDU3NCwgezB4MDIsIDB4RjQsIDB4NTAsIDB4MTEsIDB4RTcsIDB4MTAsIDB4NTcsIDB4MEIsIDB4NDAsIDB4QkYsIDB4MDIsIDB4ODB9fSwKKwkgezMsIDQ0NiwgIDM2NCwgezB4MDIsIDB4RjQsIDB4OTAsIDB4MEIsIDB4NUMsIDB4MDksIDB4Q0MsIDB4MEUsIDB4MzgsIDB4QkUsIDB4MDEsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHs5LCA5NTgsICA2NTQsIHsweDAxLCAweEY0LCAweDMwLCAweDE0LCAweDY2LCAweDEyLCAweEQ2LCAweDBCLCAweDUwLCAweEJFLCAweDAzLCAweDgwfX0sCisJIHs2LCA3NzYsICA1MzAsIHsweDAxLCAweEY0LCAweDUwLCAweDEwLCAweDhDLCAweDBFLCAweEZDLCAweDBDLCAweDQ4LCAweDA4LCAweDAzLCAweDgwfX0sCisJIHs0LCA1OTIsICA0MDQsIHsweDAxLCAweEY0LCAweDcwLCAweDBDLCAweDk2LCAweDBCLCAweDA2LCAweDBCLCAweDQ4LCAweDUwLCAweDAyLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7OSwgOTU3LCAgNTI2LCB7MHgwMCwgMHhGNCwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwRSwgMHhEOCwgMHgwRCwgMHg1OCwgMHhCRCwgMHgwMywgMHg4MH19LAorCSB7NiwgNzc1LCAgNDI2LCB7MHgwMCwgMHhGNCwgMHg3MCwgMHgwRCwgMHg0OCwgMHgwQiwgMHhCOCwgMHgwRiwgMHg1MCwgMHgwNywgMHgwMywgMHg4MH19LAorCSB7NCwgNTkwLCAgMzI0LCB7MHgwMCwgMHg3QSwgMHg4OCwgMHgwQSwgMHgxQywgMHgwOCwgMHhCNCwgMHgwRSwgMHg1MCwgMHg0RSwgMHgwMiwgMHg4MH19LAorICAgICAgfSwKKyAgIH0sCisgICAvKiBDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFZHQSAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHs2LCA3NzMsIDEyNzIsIHsweDI1LCAweEY0LCAweDMwLCAweDI3LCAweEI2LCAweDI0LCAweDk2LCAweDAyLCAweDMwLCAweDA1LCAweDAzLCAweDgwfX0sCisJIHs0LCA1OTIsICA5NzYsIHsweDI1LCAweEY0LCAweDUwLCAweDFFLCAweDc4LCAweDFCLCAweDU4LCAweDAzLCAweDMwLCAweDUwLCAweDAyLCAweDgwfX0sCisJIHszLCA0NDgsICA3MzgsIHsweDI1LCAweEY0LCAweDkwLCAweDE3LCAweDBDLCAweDEzLCAweEVDLCAweDA0LCAweDMwLCAweEMwLCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7OSwgOTU2LCAgNzg4LCB7MHgyNCwgMHhGNCwgMHg3MCwgMHgxOCwgMHg5QywgMHgxNSwgMHg3QywgMHgwMywgMHg0OCwgMHhCQywgMHgwMywgMHg4MH19LAorCSB7NiwgNzc2LCAgNjQwLCB7MHgyNCwgMHhGNCwgMHhCMCwgMHgxMywgMHhGQywgMHgxMSwgMHgyQywgMHgwNCwgMHg0OCwgMHgwOCwgMHgwMywgMHg4MH19LAorCSB7NCwgNTkyLCAgNDg4LCB7MHgyNCwgMHg3QSwgMHhFOCwgMHgwRiwgMHgzQywgMHgwQywgMHg2QywgMHgwNiwgMHg0OCwgMHg1MCwgMHgwMiwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezksIDk1NywgIDUyNiwgezB4MjMsIDB4N0EsIDB4RTgsIDB4MTAsIDB4NjgsIDB4MEQsIDB4OTgsIDB4MDYsIDB4NTgsIDB4QkQsIDB4MDMsIDB4ODB9fSwKKwkgezksIDk1NywgIDUyNiwgezB4MjMsIDB4N0EsIDB4RTgsIDB4MTAsIDB4NjgsIDB4MEQsIDB4OTgsIDB4MDYsIDB4NTgsIDB4QkQsIDB4MDMsIDB4ODB9fSwKKwkgezgsIDg5NSwgIDQ5MiwgezB4MjMsIDB4N0EsIDB4RTgsIDB4MEYsIDB4NUQsIDB4MEMsIDB4OEQsIDB4MDYsIDB4NTgsIDB4N0YsIDB4MDMsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1raWFyYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWtpYXJhLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWtpYXJhLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtbWlzYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLW1pc2MuYwpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW1pc2MuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLW1pc2MuYwppbmRleCBiN2E0YmQzLi41OGZlNzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW1pc2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtbWlzYy5jCkBAIC0xLDQgKzEsNCBAQAotLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbSAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KICAgIFZhcmlvdXMgbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgYW5kIHRhYmxlcy4KICAgIChDKSAxOTk5LTIwMDMgTmVtb3NvZnQgVW52LgogICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCkBAIC00NCwxNyArNDQsMTcgQEAKIAlpbnQgaSwgZmluZDsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBnbyBiZXlvbmQgb3VyIG1heCBzaXplLgotICAgICAgICAgICBOQjogd2UgaGF2ZSBkaWZmZXJlbnQgbGltaXRzIGZvciBSQVcgYW5kIG5vcm1hbCBtb2Rlcy4gSW4gY2FzZQotICAgICAgICAgICB5b3UgZG9uJ3QgaGF2ZSB0aGUgZGVjb21wcmVzc29yIGxvYWRlZCBvciB1c2UgUkFXIG1vZGUsIAotICAgICAgICAgICB0aGUgbWF4aW11bSB2aWV3YWJsZSBzaXplIGlzIHNtYWxsZXIuCi0gICAgICAgICovCisJICAgTkI6IHdlIGhhdmUgZGlmZmVyZW50IGxpbWl0cyBmb3IgUkFXIGFuZCBub3JtYWwgbW9kZXMuIEluIGNhc2UKKwkgICB5b3UgZG9uJ3QgaGF2ZSB0aGUgZGVjb21wcmVzc29yIGxvYWRlZCBvciB1c2UgUkFXIG1vZGUsCisJICAgdGhlIG1heGltdW0gdmlld2FibGUgc2l6ZSBpcyBzbWFsbGVyLgorCSovCiAJaWYgKHBkZXYtPnZwYWxldHRlID09IFZJREVPX1BBTEVUVEVfUkFXKQogCXsKIAkJaWYgKHdpZHRoID4gcGRldi0+YWJzX21heC54IHx8IGhlaWdodCA+IHBkZXYtPmFic19tYXgueSkKIAkJewogCQkJRGVidWcoIlZJREVPX1BBTEVUVEVfUkFXOiBnb2luZyBiZXlvbmQgYWJzX21heC5cbiIpOwotICAgICAgICAgICAgICAgIAlyZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQorCQkJcmV0dXJuIC0xOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC04OCw4ICs4OCw4IEBACiAJCXBkZXYtPnZpZXdfbWluLnkgPSAgOTY7CiAJCXBkZXYtPnZpZXdfbWF4LnggPSAzNTI7CiAJCXBkZXYtPnZpZXdfbWF4LnkgPSAyODg7Ci0gICAgICAgICAgICAgICAgcGRldi0+YWJzX21heC54ICA9IDM1MjsKLSAgICAgICAgICAgICAgICBwZGV2LT5hYnNfbWF4LnkgID0gMjg4OworCQlwZGV2LT5hYnNfbWF4LnggID0gMzUyOworCQlwZGV2LT5hYnNfbWF4LnkgID0gMjg4OwogCQlwZGV2LT5pbWFnZV9tYXNrID0gMSA8PCBQU1pfU1FDSUYgfCAxIDw8IFBTWl9RQ0lGIHwgMSA8PCBQU1pfQ0lGOwogCQlwZGV2LT52Y2ludGVyZmFjZSA9IDI7CiAJCXBkZXYtPnZlbmRwb2ludCA9IDQ7CkBAIC0xMDUsOCArMTA1LDggQEAKIAkJcGRldi0+dmlld19tYXgueCA9IDY0MDsKIAkJcGRldi0+dmlld19tYXgueSA9IDQ4MDsKIAkJcGRldi0+aW1hZ2VfbWFzayA9IDEgPDwgUFNaX1NRQ0lGIHwgMSA8PCBQU1pfUVNJRiB8IDEgPDwgUFNaX1FDSUYgfCAxIDw8IFBTWl9TSUYgfCAxIDw8IFBTWl9DSUYgfCAxIDw8IFBTWl9WR0E7Ci0gICAgICAgICAgICAgICAgcGRldi0+YWJzX21heC54ID0gNjQwOwotICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueSA9IDQ4MDsKKwkJcGRldi0+YWJzX21heC54ID0gNjQwOworCQlwZGV2LT5hYnNfbWF4LnkgPSA0ODA7CiAJCXBkZXYtPnZjaW50ZXJmYWNlID0gMzsKIAkJcGRldi0+dmVuZHBvaW50ID0gNDsKIAkJcGRldi0+ZnJhbWVfaGVhZGVyX3NpemUgPSAwOwpAQCAtMTIxLDggKzEyMSw4IEBACiAJCXBkZXYtPnZpZXdfbWF4LnggPSA2NDA7CiAJCXBkZXYtPnZpZXdfbWF4LnkgPSA0ODA7CiAJCXBkZXYtPmltYWdlX21hc2sgPSAxIDw8IFBTWl9RU0lGIHwgMSA8PCBQU1pfU0lGIHwgMSA8PCBQU1pfVkdBOwotICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueCA9IDY0MDsKLSAgICAgICAgICAgICAgICBwZGV2LT5hYnNfbWF4LnkgPSA0ODA7CisJCXBkZXYtPmFic19tYXgueCA9IDY0MDsKKwkJcGRldi0+YWJzX21heC55ID0gNDgwOwogCQlwZGV2LT52Y2ludGVyZmFjZSA9IDM7CiAJCXBkZXYtPnZlbmRwb2ludCA9IDU7CiAJCXBkZXYtPmZyYW1lX2hlYWRlcl9zaXplID0gVE9VQ0FNX0hFQURFUl9TSVpFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1uYWxhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtbmFsYS5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtbmFsYS5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtbmFsYS5oCmluZGV4IGU2YzVjYjYuLjE2OGM3M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtbmFsYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1uYWxhLmgKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgIHswfSwKICAgIH0sCiAgICAvKiBWR0EgKi8KLSAgIHsgIAorICAgewogICAgICAgezB9LAogICAgICAgezB9LAogICAgICAgezB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXRpbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdGltb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzUyNTBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXRpbW9uLmMKQEAgLTAsMCArMSwzMTYgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisvKiBUaGlzIHRhYmxlcyBjb250YWlucyBlbnRyaWVzIGZvciB0aGUgNjc1LzY4MC82OTAgKFRpbW9uKSBjYW1lcmEsIHdpdGgKKyAgIDQgZGlmZmVyZW50IHF1YWxpdGllcyAobm8gY29tcHJlc3Npb24sIGxvdywgbWVkaXVtLCBoaWdoKS4KKyAgIEl0IGxpc3RzIHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGZvciBzYWlkIG1vZGUgYnkgaXRzIGFsdGVybmF0ZSBpbnRlcmZhY2UKKyAgIG51bWJlci4gQW4gYWx0ZXJuYXRlIG9mIDAgbWVhbnMgdGhhdCB0aGUgbW9kZSBpcyB1bmF2YWlsYWJsZS4KKworICAgVGhlcmUgYXJlIDYgKiA0ICogNCBlbnRyaWVzOgorICAgICA2IGRpZmZlcmVudCByZXNvbHV0aW9ucyBzdWJxY2lmLCBxc2lmLCBxY2lmLCBzaWYsIGNpZiwgdmdhCisgICAgIDYgZnJhbWVyYXRlczogNSwgMTAsIDE1LCAyMCwgMjUsIDMwCisgICAgIDQgY29tcHJlc3Npb24gbW9kaTogbm9uZSwgbG93LCBtZWRpdW0sIGhpZ2gKKworICAgV2hlbiBhbiB1bmNvbXByZXNzZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgbmV4dCBhdmFpbGFibGUgY29tcHJlc3NlZCBtb2RlCisgICB3aWxsIGJlIGNob3NlbiAodW5sZXNzIHRoZSBkZWNvbXByZXNzb3IgaXMgYWJzZW50KS4gU29tZXRpbWVzIHRoZXJlIGFyZSBvbmx5CisgICAxIG9yIDIgY29tcHJlc3NlZCBtb2RlcyBhdmFpbGFibGU7IGluIHRoYXQgY2FzZSBlbnRyaWVzIGFyZSBkdXBsaWNhdGVkLgorKi8KKworI2luY2x1ZGUgInB3Yy10aW1vbi5oIgorCitjb25zdCBzdHJ1Y3QgVGltb25fdGFibGVfZW50cnkgVGltb25fdGFibGVbUFNaX01BWF1bNl1bNF0gPQoreworICAgLyogU1FDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisJIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCisJIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCisJIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCisJIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisJIHsyLCAyODAsICAgIDAsIHsweDA0LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDE4LCAweEE5LCAweDgwLCAweDAyfX0sCisJIHsyLCAyODAsICAgIDAsIHsweDA0LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDE4LCAweEE5LCAweDgwLCAweDAyfX0sCisJIHsyLCAyODAsICAgIDAsIHsweDA0LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDE4LCAweEE5LCAweDgwLCAweDAyfX0sCisJIHsyLCAyODAsICAgIDAsIHsweDA0LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDE4LCAweEE5LCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisJIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisJIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisJIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisJIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisJIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCisJIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCisJIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCisJIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisJIHs1LCA2NTksICAgIDAsIHsweDAxLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDkzLCAweDQ2LCAweDgwLCAweDAyfX0sCisJIHs1LCA2NTksICAgIDAsIHsweDAxLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDkzLCAweDQ2LCAweDgwLCAweDAyfX0sCisJIHs1LCA2NTksICAgIDAsIHsweDAxLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDkzLCAweDQ2LCAweDgwLCAweDAyfX0sCisJIHs1LCA2NTksICAgIDAsIHsweDAxLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDkzLCAweDQ2LCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisJIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisJIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisJIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisJIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisJIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCisJIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCisJIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCisJIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisJIHsyLCAyOTEsICAgIDAsIHsweDJDLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTEsICA2MzAsIHsweDJDLCAweEY0LCAweDA1LCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTEsICA2MzAsIHsweDJDLCAweEY0LCAweDA1LCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTEsICA2MzAsIHsweDJDLCAweEY0LCAweDA1LCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisJIHszLCA0MzcsICAgIDAsIHsweDJCLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEI1LCAweDZELCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTEsICA2NDAsIHsweDJCLCAweEY0LCAweDA1LCAweDEzLCAweEY3LCAweDEzLCAweDJGLCAweDEzLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTEsICA2NDAsIHsweDJCLCAweEY0LCAweDA1LCAweDEzLCAweEY3LCAweDEzLCAweDJGLCAweDEzLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTEsICA0MjAsIHsweDJCLCAweEY0LCAweDBELCAweDBELCAweDFCLCAweDBDLCAweDUzLCAweDFFLCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisJIHs0LCA1ODgsICAgIDAsIHsweDJBLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRDLCAweDUyLCAweEMwLCAweDAyfX0sCisJIHszLCA0NDcsICA3MzAsIHsweDJBLCAweEY0LCAweDA1LCAweDE2LCAweEM5LCAweDE2LCAweDAxLCAweDBFLCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTIsICA0NzYsIHsweDJBLCAweEY0LCAweDBELCAweDBFLCAweEQ4LCAweDBFLCAweDEwLCAweDE5LCAweDE4LCAweDI0LCAweEExLCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTIsICAzMTIsIHsweDJBLCAweEY0LCAweDFELCAweDA5LCAweEIzLCAweDA4LCAweEVCLCAweDFFLCAweDE4LCAweEMwLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisJIHs1LCA3MDMsICAgIDAsIHsweDI5LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEJGLCAweDQyLCAweEMwLCAweDAyfX0sCisJIHszLCA0NDcsICA2MTAsIHsweDI5LCAweEY0LCAweDA1LCAweDEzLCAweDBCLCAweDEyLCAweDQzLCAweDE0LCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTIsICAzOTgsIHsweDI5LCAweEY0LCAweDBELCAweDBDLCAweDZDLCAweDBCLCAweEE0LCAweDFFLCAweDE4LCAweDI0LCAweEExLCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTIsICAyNjIsIHsweDI5LCAweEY0LCAweDI1LCAweDA4LCAweDIzLCAweDA3LCAweDVCLCAweDFFLCAweDE4LCAweEMwLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisJIHs4LCA4NzMsICAgIDAsIHsweDI4LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDY5LCAweDM3LCAweEMwLCAweDAyfX0sCisJIHs1LCA3MDQsICA3NzQsIHsweDI4LCAweEY0LCAweDA1LCAweDE4LCAweDIxLCAweDE3LCAweDU5LCAweDBGLCAweDE4LCAweEMwLCAweDQyLCAweEMwLCAweDAyfX0sCisJIHszLCA0NDgsICA0OTIsIHsweDI4LCAweEY0LCAweDA1LCAweDBGLCAweDVELCAweDBFLCAweDk1LCAweDE1LCAweDE4LCAweEMwLCAweDY5LCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTEsICAzMjAsIHsweDI4LCAweEY0LCAweDFELCAweDA5LCAweEZCLCAweDA5LCAweDMzLCAweDFFLCAweDE4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFFDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisJIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisJIHszLCAzODUsICAgIDAsIHsweDBDLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDgxLCAweDc5LCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTEsICA4MDAsIHsweDBDLCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDExLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTEsICA4MDAsIHsweDBDLCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDExLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTQsICA1MzIsIHsweDBDLCAweEY0LCAweDA1LCAweDEwLCAweDlBLCAweDBGLCAweEJFLCAweDFCLCAweDA4LCAweEMyLCAweEYwLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisJIHs0LCA1NzcsICAgIDAsIHsweDBCLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDQxLCAweDUyLCAweEMwLCAweDAyfX0sCisJIHszLCA0NDcsICA4MTgsIHsweDBCLCAweEY0LCAweDA1LCAweDE5LCAweDg5LCAweDE4LCAweEFELCAweDBGLCAweDEwLCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTIsICA1MzQsIHsweDBCLCAweEY0LCAweDA1LCAweDEwLCAweEEzLCAweDBGLCAweEM3LCAweDE5LCAweDEwLCAweDI0LCAweEExLCAweEMwLCAweDAyfX0sCisJIHsxLCAxOTUsICAzNTYsIHsweDBCLCAweEY0LCAweDE1LCAweDBCLCAweDExLCAweDBBLCAweDM1LCAweDFFLCAweDEwLCAweEMzLCAweEYwLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisJIHs2LCA3NzYsICAgIDAsIHsweDBBLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA4LCAweDNGLCAweEMwLCAweDAyfX0sCisJIHs0LCA1OTEsICA4MDQsIHsweDBBLCAweEY0LCAweDA1LCAweDE5LCAweDFFLCAweDE4LCAweDQyLCAweDBGLCAweDE4LCAweDRGLCAweDRFLCAweEMwLCAweDAyfX0sCisJIHszLCA0NDcsICA2MDgsIHsweDBBLCAweEY0LCAweDA1LCAweDEyLCAweEZELCAweDEyLCAweDIxLCAweDE1LCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTEsICAzOTYsIHsweDBBLCAweEY0LCAweDE1LCAweDBDLCAweDVFLCAweDBCLCAweDgyLCAweDFFLCAweDE4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisJIHs5LCA5MjgsICAgIDAsIHsweDA5LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEEwLCAweDMzLCAweEMwLCAweDAyfX0sCisJIHs1LCA3MDMsICA4MDAsIHsweDA5LCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDEwLCAweDE4LCAweEJGLCAweDQyLCAweEMwLCAweDAyfX0sCisJIHszLCA0NDcsICA1MDgsIHsweDA5LCAweEY0LCAweDBELCAweDBGLCAweEQyLCAweDBFLCAweEY2LCAweDFCLCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisJIHsyLCAyOTIsICAzMzIsIHsweDA5LCAweEY0LCAweDFELCAweDBBLCAweDVBLCAweDA5LCAweDdFLCAweDFFLCAweDE4LCAweDI0LCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7OSwgOTU2LCAgODc2LCB7MHgwOCwgMHhGNCwgMHgwNSwgMHgxQiwgMHg1OCwgMHgxQSwgMHg3QywgMHgwRSwgMHgyMCwgMHhCQywgMHgzMywgMHgxMCwgMHgwMn19LAorCSB7NCwgNTkyLCAgNTQyLCB7MHgwOCwgMHhGNCwgMHgwNSwgMHgxMCwgMHhFNCwgMHgxMCwgMHgwOCwgMHgxNywgMHgyMCwgMHg1MCwgMHg0RSwgMHgxMCwgMHgwMn19LAorCSB7MiwgMjkxLCAgMjY2LCB7MHgwOCwgMHhGNCwgMHgyNSwgMHgwOCwgMHg0OCwgMHgwNywgMHg2QywgMHgxRSwgMHgyMCwgMHgyMywgMHhBMSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgIH0sCisgICAvKiBTSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisJIHs0LCA1ODIsICAgIDAsIHsweDM1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ2LCAweDUyLCAweDYwLCAweDAyfX0sCisJIHszLCAzODcsIDEyNzYsIHsweDM1LCAweEY0LCAweDA1LCAweDI3LCAweEQ4LCAweDI2LCAweDQ4LCAweDAzLCAweDEwLCAweDgzLCAweDc5LCAweDYwLCAweDAyfX0sCisJIHsyLCAyOTEsICA5NjAsIHsweDM1LCAweEY0LCAweDBELCAweDFELCAweEYyLCAweDFDLCAweDYyLCAweDA0LCAweDEwLCAweDIzLCAweEExLCAweDYwLCAweDAyfX0sCisJIHsxLCAxOTEsICA2MzAsIHsweDM1LCAweEY0LCAweDFELCAweDEzLCAweEE5LCAweDEyLCAweDE5LCAweDA1LCAweDA4LCAweEJGLCAweEY0LCAweDYwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7NiwgNzc1LCAxMjc4LCB7MHgzNCwgMHhGNCwgMHgwNSwgMHgyNywgMHhFOCwgMHgyNiwgMHg1OCwgMHgwNSwgMHgzMCwgMHgwNywgMHgzRiwgMHgxMCwgMHgwMn19LAorCSB7MywgNDQ3LCAgNzM2LCB7MHgzNCwgMHhGNCwgMHgxNSwgMHgxNiwgMHhGQiwgMHgxNSwgMHg2QiwgMHgwNSwgMHgxOCwgMHhCRiwgMHg2OSwgMHgxMCwgMHgwMn19LAorCSB7MiwgMjkxLCAgNDgwLCB7MHgzNCwgMHhGNCwgMHgyRCwgMHgwRSwgMHhGOSwgMHgwRCwgMHg2OSwgMHgwOSwgMHgxOCwgMHgyMywgMHhBMSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezksIDk1NSwgMTA1MCwgezB4MzMsIDB4RjQsIDB4MDUsIDB4MjAsIDB4Q0YsIDB4MUYsIDB4M0YsIDB4MDYsIDB4NDgsIDB4QkIsIDB4MzMsIDB4MTAsIDB4MDJ9fSwKKwkgezQsIDU5MSwgIDY1MCwgezB4MzMsIDB4RjQsIDB4MTUsIDB4MTQsIDB4NDQsIDB4MTIsIDB4QjQsIDB4MDgsIDB4MzAsIDB4NEYsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKKwkgezMsIDQ0OCwgIDQ5MiwgezB4MzMsIDB4RjQsIDB4MjUsIDB4MEYsIDB4NTIsIDB4MEQsIDB4QzIsIDB4MDksIDB4MjgsIDB4QzAsIDB4NjksIDB4MTAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHs5LCA5NTgsICA3ODIsIHsweDMyLCAweEY0LCAweDBELCAweDE4LCAweDZBLCAweDE2LCAweERBLCAweDBCLCAweDU4LCAweEJFLCAweDMzLCAweEQwLCAweDAyfX0sCisJIHs1LCA3MDMsICA1NzQsIHsweDMyLCAweEY0LCAweDFELCAweDExLCAweEU3LCAweDEwLCAweDU3LCAweDBCLCAweDQwLCAweEJGLCAweDQyLCAweEQwLCAweDAyfX0sCisJIHszLCA0NDYsICAzNjQsIHsweDMyLCAweEY0LCAweDNELCAweDBCLCAweDVDLCAweDA5LCAweENDLCAweDBFLCAweDMwLCAweEJFLCAweDY5LCAweEQwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7OSwgOTU4LCAgNjU0LCB7MHgzMSwgMHhGNCwgMHgxNSwgMHgxNCwgMHg2NiwgMHgxMiwgMHhENiwgMHgwQiwgMHg1MCwgMHhCRSwgMHgzMywgMHg5MCwgMHgwMn19LAorCSB7NiwgNzc2LCAgNTMwLCB7MHgzMSwgMHhGNCwgMHgyNSwgMHgxMCwgMHg4QywgMHgwRSwgMHhGQywgMHgwQywgMHg0OCwgMHgwOCwgMHgzRiwgMHg5MCwgMHgwMn19LAorCSB7NCwgNTkyLCAgNDA0LCB7MHgzMSwgMHhGNCwgMHgzNSwgMHgwQywgMHg5NiwgMHgwQiwgMHgwNiwgMHgwQiwgMHgzOCwgMHg1MCwgMHg0RSwgMHg5MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezksIDk1NywgIDUyNiwgezB4MzAsIDB4RjQsIDB4MjUsIDB4MTAsIDB4NjgsIDB4MEUsIDB4RDgsIDB4MEQsIDB4NTgsIDB4QkQsIDB4MzMsIDB4NjAsIDB4MDJ9fSwKKwkgezYsIDc3NSwgIDQyNiwgezB4MzAsIDB4RjQsIDB4MzUsIDB4MEQsIDB4NDgsIDB4MEIsIDB4QjgsIDB4MEYsIDB4NTAsIDB4MDcsIDB4M0YsIDB4NjAsIDB4MDJ9fSwKKwkgezQsIDU5MCwgIDMyNCwgezB4MzAsIDB4N0EsIDB4NEIsIDB4MEEsIDB4MUMsIDB4MDgsIDB4QjQsIDB4MEUsIDB4NDAsIDB4NEUsIDB4NTIsIDB4NjAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICB9LAorICAgLyogQ0lGICovCisgICB7CisgICAgICAvKiA1IGZwcyAqLworICAgICAgeworCSB7NiwgNzcxLCAgICAwLCB7MHgxNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMywgMHgzRiwgMHg4MCwgMHgwMn19LAorCSB7NCwgNDY1LCAxMjc4LCB7MHgxNSwgMHhGNCwgMHgwNSwgMHgyNywgMHhFRSwgMHgyNiwgMHgzNiwgMHgwMywgMHgxOCwgMHhEMSwgMHg2NSwgMHg4MCwgMHgwMn19LAorCSB7MiwgMjkxLCAgODAwLCB7MHgxNSwgMHhGNCwgMHgxNSwgMHgxOCwgMHhGNCwgMHgxNywgMHgzQywgMHgwNSwgMHgxOCwgMHgyMywgMHhBMSwgMHg4MCwgMHgwMn19LAorCSB7MSwgMTkzLCAgNTI4LCB7MHgxNSwgMHhGNCwgMHgyRCwgMHgxMCwgMHg3RSwgMHgwRSwgMHhDNiwgMHgwQSwgMHgxOCwgMHhDMSwgMHhGNCwgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezksIDkzMiwgMTI3OCwgezB4MTQsIDB4RjQsIDB4MDUsIDB4MjcsIDB4RUUsIDB4MjYsIDB4MzYsIDB4MDQsIDB4MzAsIDB4QTQsIDB4MzMsIDB4MTAsIDB4MDJ9fSwKKwkgezQsIDU5MSwgIDgxMiwgezB4MTQsIDB4RjQsIDB4MTUsIDB4MTksIDB4NTYsIDB4MTcsIDB4OUUsIDB4MDYsIDB4MjgsIDB4NEYsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKKwkgezIsIDI5MSwgIDQwMCwgezB4MTQsIDB4RjQsIDB4M0QsIDB4MEMsIDB4N0EsIDB4MEEsIDB4QzIsIDB4MEUsIDB4MjgsIDB4MjMsIDB4QTEsIDB4MTAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHs5LCA5NTYsICA4NzYsIHsweDEzLCAweEY0LCAweDBELCAweDFCLCAweDU4LCAweDE5LCAweEEwLCAweDA1LCAweDM4LCAweEJDLCAweDMzLCAweDYwLCAweDAyfX0sCisJIHs1LCA3MDMsICA2NDQsIHsweDEzLCAweEY0LCAweDFELCAweDE0LCAweDFDLCAweDEyLCAweDY0LCAweDA4LCAweDM4LCAweEJGLCAweDQyLCAweDYwLCAweDAyfX0sCisJIHszLCA0NDgsICA0MTAsIHsweDEzLCAweEY0LCAweDNELCAweDBDLCAweEM0LCAweDBCLCAweDBDLCAweDBFLCAweDM4LCAweEMwLCAweDY5LCAweDYwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7OSwgOTU2LCAgNjUwLCB7MHgxMiwgMHhGNCwgMHgxRCwgMHgxNCwgMHg0QSwgMHgxMiwgMHg5MiwgMHgwOSwgMHg0OCwgMHhCQywgMHgzMywgMHgxMCwgMHgwM319LAorCSB7NiwgNzc2LCAgNTI4LCB7MHgxMiwgMHhGNCwgMHgyRCwgMHgxMCwgMHg3RSwgMHgwRSwgMHhDNiwgMHgwQSwgMHg0MCwgMHgwOCwgMHgzRiwgMHgxMCwgMHgwM319LAorCSB7NCwgNTkxLCAgNDAyLCB7MHgxMiwgMHhGNCwgMHgzRCwgMHgwQywgMHg4RiwgMHgwQSwgMHhENywgMHgwRSwgMHg0MCwgMHg0RiwgMHg0RSwgMHgxMCwgMHgwM319LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezksIDk1NiwgIDU0NCwgezB4MTEsIDB4RjQsIDB4MjUsIDB4MTAsIDB4RjQsIDB4MEYsIDB4M0MsIDB4MEEsIDB4NDgsIDB4QkMsIDB4MzMsIDB4QzAsIDB4MDJ9fSwKKwkgezcsIDg0MCwgIDQ3OCwgezB4MTEsIDB4RjQsIDB4MkQsIDB4MEUsIDB4RUIsIDB4MEQsIDB4MzMsIDB4MEIsIDB4NDgsIDB4NDgsIDB4M0IsIDB4QzAsIDB4MDJ9fSwKKwkgezUsIDcwMywgIDQwMCwgezB4MTEsIDB4RjQsIDB4M0QsIDB4MEMsIDB4N0EsIDB4MEEsIDB4QzIsIDB4MEUsIDB4NDgsIDB4QkYsIDB4NDIsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHs5LCA5NTYsICA0MzgsIHsweDEwLCAweEY0LCAweDM1LCAweDBELCAweEFDLCAweDBCLCAweEY0LCAweDBELCAweDUwLCAweEJDLCAweDMzLCAweDEwLCAweDAyfX0sCisJIHs3LCA4MzgsICAzODQsIHsweDEwLCAweEY0LCAweDQ1LCAweDBCLCAweEZELCAweDBBLCAweDQ1LCAweDBGLCAweDUwLCAweDQ2LCAweDNCLCAweDEwLCAweDAyfX0sCisJIHs2LCA3NzMsICAzNTQsIHsweDEwLCAweDdBLCAweDRCLCAweDBCLCAweDBDLCAweDA5LCAweDgwLCAweDEwLCAweDUwLCAweDA1LCAweDNGLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFZHQSAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHs2LCA3NzMsIDEyNzIsIHsweDFELCAweEY0LCAweDE1LCAweDI3LCAweEI2LCAweDI0LCAweDk2LCAweDAyLCAweDMwLCAweDA1LCAweDNGLCAweDEwLCAweDAyfX0sCisJIHs0LCA1OTIsICA5NzYsIHsweDFELCAweEY0LCAweDI1LCAweDFFLCAweDc4LCAweDFCLCAweDU4LCAweDAzLCAweDMwLCAweDUwLCAweDRFLCAweDEwLCAweDAyfX0sCisJIHszLCA0NDgsICA3MzgsIHsweDFELCAweEY0LCAweDNELCAweDE3LCAweDBDLCAweDEzLCAweEVDLCAweDA0LCAweDMwLCAweEMwLCAweDY5LCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7OSwgOTU2LCAgNzg4LCB7MHgxQywgMHhGNCwgMHgzNSwgMHgxOCwgMHg5QywgMHgxNSwgMHg3QywgMHgwMywgMHg0OCwgMHhCQywgMHgzMywgMHgxMCwgMHgwMn19LAorCSB7NiwgNzc2LCAgNjQwLCB7MHgxQywgMHg3QSwgMHg1MywgMHgxMywgMHhGQywgMHgxMSwgMHgyQywgMHgwNCwgMHg0OCwgMHgwOCwgMHgzRiwgMHgxMCwgMHgwMn19LAorCSB7NCwgNTkyLCAgNDg4LCB7MHgxQywgMHg3QSwgMHg2QiwgMHgwRiwgMHgzQywgMHgwQywgMHg2QywgMHgwNiwgMHg0OCwgMHg1MCwgMHg0RSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezksIDk1NywgIDUyNiwgezB4MUIsIDB4N0EsIDB4NjMsIDB4MTAsIDB4NjgsIDB4MEQsIDB4OTgsIDB4MDYsIDB4NTgsIDB4QkQsIDB4MzMsIDB4ODAsIDB4MDJ9fSwKKwkgezksIDk1NywgIDUyNiwgezB4MUIsIDB4N0EsIDB4NjMsIDB4MTAsIDB4NjgsIDB4MEQsIDB4OTgsIDB4MDYsIDB4NTgsIDB4QkQsIDB4MzMsIDB4ODAsIDB4MDJ9fSwKKwkgezgsIDg5NSwgIDQ5MiwgezB4MUIsIDB4N0EsIDB4NkIsIDB4MEYsIDB4NUQsIDB4MEMsIDB4OEQsIDB4MDYsIDB4NTgsIDB4N0YsIDB4MzcsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisJIHswLCB9LAorCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworCSB7MCwgfSwKKwkgezAsIH0sCisJIHswLCB9LAorCSB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy10aW1vbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXRpbW9uLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXRpbW9uLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXVuY29tcHJlc3MuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuYwppbmRleCBlZjQyMDRlLi5iMzdhODlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXVuY29tcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdW5jb21wcmVzcy5jCkBAIC0xMDksOSArMTA5LDkgQEAKIAkJICAgaW4gcGxhbmFyIGZvcm1hdCBpbW1lZGlhdGVseS4KIAkJICovCiAJCWludCBmbGFnczsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmbGFncyA9IFBXQ1hfRkxBR19QTEFOQVI7Ci0gICAgICAgICAgICAgICAgaWYgKHBkZXYtPnZzaXplID09IFBTWl9WR0EgJiYgcGRldi0+dmZyYW1lcyA9PSA1ICYmIHBkZXYtPnZzbmFwc2hvdCkKKworCQlmbGFncyA9IFBXQ1hfRkxBR19QTEFOQVI7CisJCWlmIChwZGV2LT52c2l6ZSA9PSBQU1pfVkdBICYmIHBkZXYtPnZmcmFtZXMgPT0gNSAmJiBwZGV2LT52c25hcHNob3QpCiAJCSB7CiAJCSAgIHByaW50ayhLRVJOX0VSUiAicHdjOiBNb2RlIEJheWVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vd1xuIik7CiAJCSAgIGZsYWdzIHw9IFBXQ1hfRkxBR19CQVlFUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdW5jb21wcmVzcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXVuY29tcHJlc3MuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLXVuY29tcHJlc3MuaAppbmRleCBkM2I5MjUwLi5mNzVlMWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXVuY29tcHJlc3MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtdW5jb21wcmVzcy5oCkBAIC0yNCw3ICsyNCw3IEBACiAKIC8qIFRoaXMgZmlsZSBpcyB0aGUgYnJpZGdlIGJldHdlZW4gdGhlIGtlcm5lbCBtb2R1bGUgYW5kIHRoZSBwbHVnaW47IGl0CiAgICBkZXNjcmliZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGRhdGF0eXBlcyB1c2VkIGluIGJvdGggbW9kdWxlcy4gQW55Ci0gICBzaWduaWZpY2FudCBjaGFuZ2Ugc2hvdWxkIGJlIHJlZmxlY3RlZCBieSBpbmNyZWFzaW5nIHRoZSAKKyAgIHNpZ25pZmljYW50IGNoYW5nZSBzaG91bGQgYmUgcmVmbGVjdGVkIGJ5IGluY3JlYXNpbmcgdGhlCiAgICBwd2NfZGVjb21wcmVzc29yX3ZlcnNpb24gbWFqb3IgbnVtYmVyLgogICovCiAjaWZuZGVmIFBXQ19VTkNPTVBSRVNTX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKaW5kZXggNmRkNzZiYi4uMWIwZWUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCkBAIC0xMjMsNyArMTIzLDcgQEAKICNlbmRpZgogICAgLyogUG9pbnRlciB0byBvdXIgdXNiX2RldmljZSAqLwogICAgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0gICAKKwogICAgaW50IHR5cGU7ICAgICAgICAgICAgICAgICAgICAvKiB0eXBlIG9mIGNhbSAoNjQ1LCA2NDYsIDY3NSwgNjgwLCA2OTAsIDcyMCwgNzMwLCA3NDAsIDc1MCkgKi8KICAgIGludCByZWxlYXNlOwkJCS8qIHJlbGVhc2UgbnVtYmVyICovCiAgICBpbnQgZmVhdHVyZXM7CQkvKiBmZWF0dXJlIGJpdHMgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogICAgY2hhciB2c25hcHNob3Q7CQkvKiBzbmFwc2hvdCBtb2RlICovCiAgICBjaGFyIHZzeW5jOwkJCS8qIHVzZWQgYnkgaXNvYyBoYW5kbGVyICovCiAgICBjaGFyIHZtaXJyb3I7CQkvKiBmb3IgVG9VQ2FNIHNlcmllcyAqLwotICAgCisKICAgIGludCBjbWRfbGVuOwogICAgdW5zaWduZWQgY2hhciBjbWRfYnVmWzEzXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCmluZGV4IDJjZTAxMDIuLmRkODMwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKQEAgLTQ2LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb3RleHQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlICJzYWE1MjQ2YS5oIgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEdlbmcgPGxpbnV4QE1pY2hhZWxHZW5nLmRlPiIpOwpAQCAtNTcsNyArNTksNyBAQAogCXU4ICAgICBwZ2J1ZltOVU1fREFVU11bVlRYX1ZJUlRVQUxTSVpFXTsKIAlpbnQgICAgaXNfc2VhcmNoaW5nW05VTV9EQVVTXTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNhYV90ZW1wbGF0ZTsJLyogRGVjbGFyZWQgbmVhciBib3R0b20gKi8KQEAgLTkwLDcgKzkyLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBJRl9OQU1FLCBJMkNfTkFNRV9TSVpFKTsKLQlpbml0X01VVEVYKCZ0LT5sb2NrKTsKKwltdXRleF9pbml0KCZ0LT5sb2NrKTsKIAogCS8qCiAJICoJTm93IGNyZWF0ZSBhIHZpZGVvNGxpbnV4IGRldmljZQpAQCAtNzE5LDkgKzcyMSw5IEBACiAJaW50IGVycjsKIAogCWNtZCA9IHZ0eF9maXhfY29tbWFuZChjbWQpOwotCWRvd24oJnQtPmxvY2spOworCW11dGV4X2xvY2soJnQtPmxvY2spOwogCWVyciA9IHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgZG9fc2FhNTI0NmFfaW9jdGwpOwotCXVwKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnQtPmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKaW5kZXggNTY5NGViNS4uNTMxZTk0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMKQEAgLTU2LDYgKzU2LDggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb3RleHQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC02OSw3ICs3MSw3IEBACiAjZGVmaW5lIE5VTV9CVUZTIDgKICNkZWZpbmUgSUZfTkFNRSAiU0FBNTI0OSIKIAotc3RhdGljIGNvbnN0IGludCBkaXNwX21vZGVzWzhdWzNdID0gCitzdGF0aWMgY29uc3QgaW50IGRpc3BfbW9kZXNbOF1bM10gPQogewogCXsgMHg0NiwgMHgwMywgMHgwMyB9LAkvKiBESVNQT0ZGICovCiAJeyAweDQ2LCAweGNjLCAweGNjIH0sCS8qIERJU1BOT1JNICovCkBAIC0xMDUsNyArMTA3LDcgQEAKIAlpbnQgZGlzcF9tb2RlOwogCWludCB2aXJ0dWFsX21vZGU7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCiAKQEAgLTE0OCw4ICsxNTAsOCBAQAogCWNsaWVudD1rbWFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7CiAJaWYoY2xpZW50PT1OVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLSAgICAgICAgY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotICAgICAgICBjbGllbnRfdGVtcGxhdGUuYWRkciA9IGFkZHI7CisJY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOworCWNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcjsKIAltZW1jcHkoY2xpZW50LCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2YoKmNsaWVudCkpOwogCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOwogCWlmKHQ9PU5VTEwpCkBAIC0xNTgsMTIgKzE2MCwxMiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc3RybGNweShjbGllbnQtPm5hbWUsIElGX05BTUUsIEkyQ19OQU1FX1NJWkUpOwotCWluaXRfTVVURVgoJnQtPmxvY2spOwotCQorCW11dGV4X2luaXQoJnQtPmxvY2spOworCiAJLyoKIAkgKglOb3cgY3JlYXRlIGEgdmlkZW80bGludXggZGV2aWNlCiAJICovCi0JIAorCiAJdmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYodmQ9PU5VTEwpCiAJewpAQCAtMTczLDggKzE3NSw4IEBACiAJfQogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHZkKTsKIAltZW1jcHkodmQsICZzYWFfdGVtcGxhdGUsIHNpemVvZigqdmQpKTsKLQkJCi0JZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIAorCisJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspCiAJewogCQltZW1zZXQodC0+dmRhdVtwZ2J1Zl0ucGdidWYsICcgJywgc2l6ZW9mKHQtPnZkYXVbMF0ucGdidWYpKTsKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnNyZWdzLCAwLCBzaXplb2YodC0+dmRhdVswXS5zcmVncykpOwpAQCAtMTg0LDkgKzE4Niw5IEBACiAJCXQtPnZkYXVbcGdidWZdLnN0b3BwZWQgPSBUUlVFOwogCQl0LT5pc19zZWFyY2hpbmdbcGdidWZdID0gRkFMU0U7CiAJfQotCXZkLT5wcml2PXQ7CQotCSAKLQkKKwl2ZC0+cHJpdj10OworCisKIAkvKgogCSAqCVJlZ2lzdGVyIGl0CiAJICovCkBAIC0yMDYsNyArMjA4LDcgQEAKIC8qCiAgKglXZSBkbyBtb3N0IG9mIHRoZSBoYXJkIHdvcmsgd2hlbiB3ZSBiZWNvbWUgYSBkZXZpY2Ugb24gdGhlIGkyYy4KICAqLwotIAorCiBzdGF0aWMgaW50IHNhYTUyNDlfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCWlmIChhZGFwLT5jbGFzcyAmIEkyQ19DTEFTU19UVl9BTkFMT0cpCkBAIC0yMjcsNyArMjI5LDcgQEAKIAogLyogbmV3IEkyQyBkcml2ZXIgc3VwcG9ydCAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl92aWRlb3RleHQgPSAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3ZpZGVvdGV4dCA9CiB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgCT0gSUZfTkFNRSwJCS8qIG5hbWUgKi8KQEAgLTI0Nyw3ICsyNDksNyBAQAogICoJZGVsYXkgbWF5IGJlIGxvbmdlci4KICAqLwogCi1zdGF0aWMgdm9pZCBqZGVsYXkodW5zaWduZWQgbG9uZyBkZWxheSkgCitzdGF0aWMgdm9pZCBqZGVsYXkodW5zaWduZWQgbG9uZyBkZWxheSkKIHsKIAlzaWdzZXRfdCBvbGRibG9ja2VkID0gY3VycmVudC0+YmxvY2tlZDsKIApAQCAtMjY3LDE0ICsyNjksMTQgQEAKIC8qCiAgKglJMkMgaW50ZXJmYWNlcwogICovCi0gCi1zdGF0aWMgaW50IGkyY19zZW5kYnVmKHN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCwgaW50IHJlZywgaW50IGNvdW50LCB1OCAqZGF0YSkgCisKK3N0YXRpYyBpbnQgaTJjX3NlbmRidWYoc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0LCBpbnQgcmVnLCBpbnQgY291bnQsIHU4ICpkYXRhKQogewogCWNoYXIgYnVmWzY0XTsKLQkKKwogCWJ1ZlswXSA9IHJlZzsKIAltZW1jcHkoYnVmKzEsIGRhdGEsIGNvdW50KTsKLQkKKwogCWlmKGkyY19tYXN0ZXJfc2VuZCh0LT5jbGllbnQsIGJ1ZiwgY291bnQrMSk9PWNvdW50KzEpCiAJCXJldHVybiAwOwogCXJldHVybiAtMTsKQEAgLTI4Nyw3ICsyODksNyBAQAogCWludCBjdD0wOwogCXZhX2xpc3QgYXJncDsKIAl2YV9zdGFydChhcmdwLHQpOwotCQorCiAJd2hpbGUoKHY9dmFfYXJnKGFyZ3AsaW50KSkhPS0xKQogCQlidWZbY3QrK109djsKIAlyZXR1cm4gaTJjX3NlbmRidWYodCwgYnVmWzBdLCBjdC0xLCBidWYrMSk7CkBAIC0yOTksNyArMzAxLDcgQEAKICAqIFJldHVybnMgLTEgaWYgSbJDLWRldmljZSBkaWRuJ3Qgc2VuZCBhY2tub3dsZWRnZSwgMCBvdGhlcndpc2UKICAqLwogCi1zdGF0aWMgaW50IGkyY19nZXRkYXRhKHN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCwgaW50IGNvdW50LCB1OCAqYnVmKSAKK3N0YXRpYyBpbnQgaTJjX2dldGRhdGEoc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0LCBpbnQgY291bnQsIHU4ICpidWYpCiB7CiAJaWYoaTJjX21hc3Rlcl9yZWN2KHQtPmNsaWVudCwgYnVmLCBjb3VudCkhPWNvdW50KQogCQlyZXR1cm4gLTE7CkBAIC0zMTgsOSArMzIwLDkgQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0PXZkLT5wcml2OwogCi0Jc3dpdGNoKGNtZCkgCisJc3dpdGNoKGNtZCkKIAl7Ci0JCWNhc2UgVlRYSU9DR0VUSU5GTzogCisJCWNhc2UgVlRYSU9DR0VUSU5GTzoKIAkJewogCQkJdnR4X2luZm9fdCAqaW5mbyA9IGFyZzsKIAkJCWluZm8tPnZlcnNpb25fbWFqb3IgPSBWVFhfVkVSX01BSjsKQEAgLTMzMCwxMCArMzMyLDEwIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCWNhc2UgVlRYSU9DQ0xSUEFHRTogCisJCWNhc2UgVlRYSU9DQ0xSUEFHRToKIAkJewogCQkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOwotICAgICAgCisKIAkJCWlmIChyZXEtPnBnYnVmIDwgMCB8fCByZXEtPnBnYnVmID49IE5VTV9EQVVTKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJbWVtc2V0KHQtPnZkYXVbcmVxLT5wZ2J1Zl0ucGdidWYsICcgJywgc2l6ZW9mKHQtPnZkYXVbMF0ucGdidWYpKTsKQEAgLTM0MSwxNyArMzQzLDE3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCWNhc2UgVlRYSU9DQ0xSRk9VTkQ6IAorCQljYXNlIFZUWElPQ0NMUkZPVU5EOgogCQl7CiAJCQl2dHhfcGFnZXJlcV90ICpyZXEgPSBhcmc7Ci0gICAgICAKKwogCQkJaWYgKHJlcS0+cGdidWYgPCAwIHx8IHJlcS0+cGdidWYgPj0gTlVNX0RBVVMpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl0LT52ZGF1W3JlcS0+cGdidWZdLmNscmZvdW5kID0gVFJVRTsKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJY2FzZSBWVFhJT0NQQUdFUkVROiAKKwkJY2FzZSBWVFhJT0NQQUdFUkVROgogCQl7CiAJCQl2dHhfcGFnZXJlcV90ICpyZXEgPSBhcmc7CiAJCQlpZiAoIShyZXEtPnBhZ2VtYXNrICYgUEdNQVNLX1BBR0UpKQpAQCAtMzc5LDcgKzM4MSw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCWNhc2UgVlRYSU9DR0VUU1RBVDogCisJCWNhc2UgVlRYSU9DR0VUU1RBVDoKIAkJewogCQkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOwogCQkJdTggaW5mb2JpdHNbMTBdOwpAQCAtMzg4LDcgKzM5MCw3IEBACiAKIAkJCWlmIChyZXEtPnBnYnVmIDwgMCB8fCByZXEtPnBnYnVmID49IE5VTV9EQVVTKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKCF0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQpIAorCQkJaWYgKCF0LT52ZGF1W3JlcS0+cGdidWZdLnN0b3BwZWQpCiAJCQl7CiAJCQkJaWYgKGkyY19zZW5kZGF0YSh0LCAyLCAwLCAtMSkgfHwKIAkJCQkJaTJjX3NlbmRidWYodCwgMywgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpLCB0LT52ZGF1W3JlcS0+cGdidWZdLnNyZWdzKSB8fApAQCAtNDAxLDcgKzQwMyw3IEBACiAJCQkJCXJldHVybiAtRUlPOwogCiAJCQkJaWYgKCEoaW5mb2JpdHNbOF0gJiAweDEwKSAmJiAhKGluZm9iaXRzWzddICYgMHhmMCkgJiYJLyogY2hlY2sgRk9VTkQtYml0ICovCi0JCQkJCShtZW1jbXAoaW5mb2JpdHMsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0ubGFzdHN0YXQsIHNpemVvZihpbmZvYml0cykpIHx8IAorCQkJCQkobWVtY21wKGluZm9iaXRzLCB0LT52ZGF1W3JlcS0+cGdidWZdLmxhc3RzdGF0LCBzaXplb2YoaW5mb2JpdHMpKSB8fAogCQkJCQl0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHQtPnZkYXVbcmVxLT5wZ2J1Zl0uZXhwaXJlKSkpCiAJCQkJewkJLyogY2hlY2sgaWYgbmV3IHBhZ2UgYXJyaXZlZCAqLwogCQkJCQlpZiAoaTJjX3NlbmRkYXRhKHQsIDgsIDAsIDAsIDAsIC0xKSB8fApAQCAtNDA5LDcgKzQxMSw3IEBACiAJCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQkJdC0+dmRhdVtyZXEtPnBnYnVmXS5leHBpcmUgPSBqaWZmaWVzICsgUEdCVUZfRVhQSVJFOwogCQkJCQltZW1zZXQodC0+dmRhdVtyZXEtPnBnYnVmXS5wZ2J1ZiArIFZUWF9QQUdFU0laRSwgJyAnLCBWVFhfVklSVFVBTFNJWkUgLSBWVFhfUEFHRVNJWkUpOwotCQkJCQlpZiAodC0+dmlydHVhbF9tb2RlKSAKKwkJCQkJaWYgKHQtPnZpcnR1YWxfbW9kZSkKIAkJCQkJewogCQkJCQkJLyogUGFja2V0IFgvMjQgKi8KIAkJCQkJCWlmIChpMmNfc2VuZGRhdGEodCwgOCwgMCwgMHgyMCwgMCwgLTEpIHx8CkBAIC00NTcsOSArNDU5LDkgQEAKIAkJCWluZm8ubm90Zm91bmQgPSAhIShpbmZvYml0c1s4XSAmIDB4MTApOwogCQkJaW5mby5wYmxmID0gISEoaW5mb2JpdHNbOV0gJiAweDIwKTsKIAkJCWluZm8uaGFtbWluZyA9IDA7Ci0JCQlmb3IgKGEgPSAwOyBhIDw9IDc7IGErKykgCisJCQlmb3IgKGEgPSAwOyBhIDw9IDc7IGErKykKIAkJCXsKLQkJCQlpZiAoaW5mb2JpdHNbYV0gJiAweGYwKSAKKwkJCQlpZiAoaW5mb2JpdHNbYV0gJiAweGYwKQogCQkJCXsKIAkJCQkJaW5mby5oYW1taW5nID0gMTsKIAkJCQkJYnJlYWs7CkBAIC00NjksMTQgKzQ3MSwxNCBAQAogCQkJCWluZm8ubm90Zm91bmQgPSAxOwogCQkJaWYoY29weV90b191c2VyKHJlcS0+YnVmZmVyLCAmaW5mbywgc2l6ZW9mKHZ0eF9wYWdlaW5mb190KSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAoIWluZm8uaGFtbWluZyAmJiAhaW5mby5ub3Rmb3VuZCkgCisJCQlpZiAoIWluZm8uaGFtbWluZyAmJiAhaW5mby5ub3Rmb3VuZCkKIAkJCXsKIAkJCQl0LT5pc19zZWFyY2hpbmdbcmVxLT5wZ2J1Zl0gPSBGQUxTRTsKIAkJCX0KIAkJCXJldHVybiAwOwogCQl9CiAKLQkJY2FzZSBWVFhJT0NHRVRQQUdFOiAKKwkJY2FzZSBWVFhJT0NHRVRQQUdFOgogCQl7CiAJCQl2dHhfcGFnZXJlcV90ICpyZXEgPSBhcmc7CiAJCQlpbnQgc3RhcnQsIGVuZDsKQEAgLTQ4NiwxNSArNDg4LDE1IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZihjb3B5X3RvX3VzZXIocmVxLT5idWZmZXIsICZ0LT52ZGF1W3JlcS0+cGdidWZdLnBnYnVmW3JlcS0+c3RhcnRdLCByZXEtPmVuZCAtIHJlcS0+c3RhcnQgKyAxKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQkKLQkJCSAvKiAKKworCQkJIC8qCiAJCQkgICoJQWx3YXlzIHJlYWQgdGhlIHRpbWUgZGlyZWN0bHkgZnJvbSBTQUE1MjQ5CiAJCQkgICovCi0JCQkgIAotCQkJaWYgKHJlcS0+c3RhcnQgPD0gMzkgJiYgcmVxLT5lbmQgPj0gMzIpIAorCisJCQlpZiAocmVxLT5zdGFydCA8PSAzOSAmJiByZXEtPmVuZCA+PSAzMikKIAkJCXsKIAkJCQlpbnQgbGVuOwotCQkJCWNoYXIgYnVmWzE2XTsgIAorCQkJCWNoYXIgYnVmWzE2XTsKIAkJCQlzdGFydCA9IG1heChyZXEtPnN0YXJ0LCAzMik7CiAJCQkJZW5kID0gbWluKHJlcS0+ZW5kLCAzOSk7CiAJCQkJbGVuPWVuZC1zdGFydCsxOwpAQCAtNTA1LDcgKzUwNyw3IEBACiAJCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQogCQkJLyogSW5zZXJ0IHRoZSBjdXJyZW50IGhlYWRlciBpZiBEQVUgaXMgc3RpbGwgc2VhcmNoaW5nIGZvciBhIHBhZ2UgKi8KLQkJCWlmIChyZXEtPnN0YXJ0IDw9IDMxICYmIHJlcS0+ZW5kID49IDcgJiYgdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdKSAKKwkJCWlmIChyZXEtPnN0YXJ0IDw9IDMxICYmIHJlcS0+ZW5kID49IDcgJiYgdC0+aXNfc2VhcmNoaW5nW3JlcS0+cGdidWZdKQogCQkJewogCQkJCWNoYXIgYnVmWzMyXTsKIAkJCQlpbnQgbGVuOwpAQCAtNTIxLDcgKzUyMyw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCWNhc2UgVlRYSU9DU1RPUERBVTogCisJCWNhc2UgVlRYSU9DU1RPUERBVToKIAkJewogCQkJdnR4X3BhZ2VyZXFfdCAqcmVxID0gYXJnOwogCkBAIC01MzIsMTIgKzUzNCwxMiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQljYXNlIFZUWElPQ1BVVFBBR0U6IAotCQljYXNlIFZUWElPQ1NFVERJU1A6IAotCQljYXNlIFZUWElPQ1BVVFNUQVQ6IAorCQljYXNlIFZUWElPQ1BVVFBBR0U6CisJCWNhc2UgVlRYSU9DU0VURElTUDoKKwkJY2FzZSBWVFhJT0NQVVRTVEFUOgogCQkJcmV0dXJuIDA7Ci0JCQkKLQkJY2FzZSBWVFhJT0NDTFJDQUNIRTogCisKKwkJY2FzZSBWVFhJT0NDTFJDQUNIRToKIAkJewogCQkJaWYgKGkyY19zZW5kZGF0YSh0LCAwLCBOVU1fREFVUywgMCwgOCwgLTEpIHx8IGkyY19zZW5kZGF0YSh0LCAxMSwKIAkJCQknICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywKQEAgLTU0OSw3ICs1NTEsNyBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQljYXNlIFZUWElPQ1NFVFZJUlQ6IAorCQljYXNlIFZUWElPQ1NFVFZJUlQ6CiAJCXsKIAkJCS8qIFRoZSBTQUE1MjQ5IGhhcyB2aXJ0dWFsLXJvdyByZWNlcHRpb24gdHVybmVkIG9uIGFsd2F5cyAqLwogCQkJdC0+dmlydHVhbF9tb2RlID0gKGludCkobG9uZylhcmc7CkBAIC02MTAsMjIgKzYxMiwyMiBAQAogLyoKICAqCUhhbmRsZSB0aGUgbG9ja2luZwogICovCi0gCisKIHN0YXRpYyBpbnQgc2FhNTI0OV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykgCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdD12ZC0+cHJpdjsKIAlpbnQgZXJyOwotCQorCiAJY21kID0gdnR4X2ZpeF9jb21tYW5kKGNtZCk7Ci0JZG93bigmdC0+bG9jayk7CisJbXV0ZXhfbG9jaygmdC0+bG9jayk7CiAJZXJyID0gdmlkZW9fdXNlcmNvcHkoaW5vZGUsZmlsZSxjbWQsYXJnLGRvX3NhYTUyNDlfaW9jdGwpOwotCXVwKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnQtPmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNTI0OV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSAKK3N0YXRpYyBpbnQgc2FhNTI0OV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKIAlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQ9dmQtPnByaXY7CkBAIC02MzQsNyArNjM2LDcgQEAKIAllcnIgPSB2aWRlb19leGNsdXNpdmVfb3Blbihpbm9kZSxmaWxlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkKKwogCWlmICh0LT5jbGllbnQ9PU5VTEwpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBmYWlsOwpAQCAtNjQ1LDEzICs2NDcsMTMgQEAKIAkJaTJjX3NlbmRkYXRhKHQsIDEsIGRpc3BfbW9kZXNbdC0+ZGlzcF9tb2RlXVswXSwgMCwgLTEpIHx8CiAJCQkJCQkvKiBEaXNwbGF5IFRWLXBpY3R1cmUsIG5vIHZpcnR1YWwgcm93cyAqLwogCQlpMmNfc2VuZGRhdGEodCwgNCwgTlVNX0RBVVMsIGRpc3BfbW9kZXNbdC0+ZGlzcF9tb2RlXVsxXSwgZGlzcF9tb2Rlc1t0LT5kaXNwX21vZGVdWzJdLCA3LCAtMSkpIC8qIFNldCBkaXNwbGF5IHRvIHBhZ2UgNCAqLwotCQorCiAJewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIAorCWZvciAocGdidWYgPSAwOyBwZ2J1ZiA8IE5VTV9EQVVTOyBwZ2J1ZisrKQogCXsKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7CiAJCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5zcmVncywgMCwgc2l6ZW9mKHQtPnZkYXVbMF0uc3JlZ3MpKTsKQEAgLTY3MSw3ICs2NzMsNyBAQAogCiAKIAotc3RhdGljIGludCBzYWE1MjQ5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpIAorc3RhdGljIGludCBzYWE1MjQ5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdD12ZC0+cHJpdjsKQEAgLTY4OCw3ICs2OTAsNyBAQAogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl92aWRlb3RleHQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9zYWFfNTI0OSAodm9pZCkgCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9zYWFfNTI0OSAodm9pZCkKIHsKIAlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl92aWRlb3RleHQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYwppbmRleCBkMTczOTVjLi5hODEyODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIAotI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgPG1lZGlhL3Jkcy5oPgogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMKaW5kZXggN2JiODVhN2IuLjQxZDk1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCkBAIC0zOSw3ICszOSw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+CiAKICNkZWZpbmUgSTJDX05BTUUocykgKHMpLT5uYW1lCiAKQEAgLTEwOCwxMyArMTA3LDggQEAKIAkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCQlzdHJ1Y3QgaTJjX21zZyBtc2c7CiAKLQkJbXNnLmxlbiA9IGxlbjsKLQkJbXNnLmJ1ZiA9IChjaGFyICopIGRhdGE7Ci0JCW1zZy5hZGRyID0gY2xpZW50LT5hZGRyOwotCQltc2cuZmxhZ3MgPSAwOwotCQlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmbXNnLCAxKTsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgZGF0YSwgbGVuKTsKIAogCQkvKiBDYWNoZSB0aGUgd3JpdHRlbiBkYXRhICovCiAJCW1lbWNweShkZWNvZGVyLT5yZWcgKyByZWcsIGRhdGEgKyAxLCBsZW4gLSAxKTsKQEAgLTE0NSw3ICsxMzksNyBAQAogCiBzdGF0aWMgaW50CiBzYWE3MTEwX3NlbG11eCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkgICAgICAgIGludCAgICAgICAgICAgICAgICBjaGFuKQorCQlpbnQgICAgICAgICAgICAgICAgY2hhbikKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb2Rlc1s5XVs4XSA9IHsKIAkJLyogbW9kZSAwICovCkBAIC00MzIsMTUgKzQyNiwxMyBAQAogCQlicmVhazsKIAogCWNhc2UgREVDT0RFUl9EVU1QOgotCQlmb3IgKHYgPSAwOyB2IDwgMHgzNDsgdiArPSAxNikgeworCQlmb3IgKHYgPSAwOyB2IDwgU0FBNzExMF9OUl9SRUc7IHYgKz0gMTYpIHsKIAkJCWludCBqOwotCQkJZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiAlMDN4XG4iLCBJMkNfTkFNRShjbGllbnQpLAorCQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogJTAyeDoiLCBJMkNfTkFNRShjbGllbnQpLAogCQkJCXYpOwotCQkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHsKLQkJCQlkcHJpbnRrKDEsIEtFUk5fSU5GTyAiICUwMngiLAotCQkJCQlkZWNvZGVyLT5yZWdbdiArIGpdKTsKLQkJCX0KLQkJCWRwcmludGsoMSwgS0VSTl9JTkZPICJcbiIpOworCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIHYgKyBqIDwgU0FBNzExMF9OUl9SRUc7IGorKykKKwkJCQlkcHJpbnRrKDEsICIgJTAyeCIsIGRlY29kZXItPnJlZ1t2ICsgal0pOworCQkJZHByaW50aygxLCAiXG4iKTsKIAkJfQogCQlicmVhazsKIApAQCAtNDY1LDcgKzQ1Nyw3IEBACiB9OwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKIAkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAogCS5wcm9iZQkJCT0gJmlnbm9yZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKaW5kZXggOGMwNjU5Mi4uNjg2ZmQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBzYWE3MTExIC0gUGhpbGlwcyBTQUE3MTExQSB2aWRlbyBkZWNvZGVyIGRyaXZlciB2ZXJzaW9uIDAuMC4zCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk4IERhdmUgUGVya3MgPGRwZXJrc0BpYm0ubmV0PgpAQCAtNTIsNyArNTIsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogCiAjZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQogCkBAIC03MCw4ICs2OSwxMCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjZGVmaW5lIFNBQTcxMTFfTlJfUkVHCQkweDE4CisKIHN0cnVjdCBzYWE3MTExIHsKLQl1bnNpZ25lZCBjaGFyIHJlZ1szMl07CisJdW5zaWduZWQgY2hhciByZWdbU0FBNzExMV9OUl9SRUddOwogCiAJaW50IG5vcm07CiAJaW50IGlucHV0OwpAQCAtMTEwLDI0ICsxMTEsMjEgQEAKIAlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CiAJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCiAJCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAkJdTggYmxvY2tfZGF0YVszMl07CisJCWludCBibG9ja19sZW47CiAKLQkJbXNnLmFkZHIgPSBjbGllbnQtPmFkZHI7Ci0JCW1zZy5mbGFncyA9IDA7CiAJCXdoaWxlIChsZW4gPj0gMikgewotCQkJbXNnLmJ1ZiA9IChjaGFyICopIGJsb2NrX2RhdGE7Ci0JCQltc2cubGVuID0gMDsKLQkJCWJsb2NrX2RhdGFbbXNnLmxlbisrXSA9IHJlZyA9IGRhdGFbMF07CisJCQlibG9ja19sZW4gPSAwOworCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPSByZWcgPSBkYXRhWzBdOwogCQkJZG8gewotCQkJCWJsb2NrX2RhdGFbbXNnLmxlbisrXSA9CisJCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPQogCQkJCSAgICBkZWNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7CiAJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBtc2cubGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLAotCQkJCQkJJm1zZywgMSkpIDwgMCkKKwkJCQkgYmxvY2tfbGVuIDwgMzIpOworCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAorCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKQEAgLTIxMCw2ICsyMDgsNyBAQAogCXN3aXRjaCAoY21kKSB7CiAKIAljYXNlIDA6CisJCWJyZWFrOwogCWNhc2UgREVDT0RFUl9JTklUOgogCXsKIAkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCA9IGFyZzsKQEAgLTIyNywxMSArMjI2LDExIEBACiAJewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkgKz0gMTYpIHsKKwkJZm9yIChpID0gMDsgaSA8IFNBQTcxMTFfTlJfUkVHOyBpICs9IDE2KSB7CiAJCQlpbnQgajsKIAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlMDN4IiwgSTJDX05BTUUoY2xpZW50KSwgaSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgMTY7ICsraikgeworCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIGkgKyBqIDwgU0FBNzExMV9OUl9SRUc7ICsraikgewogCQkJCXByaW50aygiICUwMngiLAogCQkJCSAgICAgICBzYWE3MTExX3JlYWQoY2xpZW50LCBpICsgaikpOwogCQkJfQpAQCAtNDgzLDcgKzQ4Miw3IEBACiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfU0FBNzExMSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaWdub3JlID0gSTJDX0NMSUVOVF9FTkQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKIAkubm9ybWFsX2kyYwkJPSBub3JtYWxfaTJjLAogCS5wcm9iZQkJCT0gJmlnbm9yZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKaW5kZXggZmQwYTRiNC4uOTAzOThhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBzYWE3MTE0IC0gUGhpbGlwcyBTQUE3MTE0SCB2aWRlbyBkZWNvZGVyIGRyaXZlciB2ZXJzaW9uIDAuMC4xCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAyIE1heGltIFlldnR5dXNoa2luIDxtYXhAbGludXhtZWRpYWxhYnMuY29tPgpAQCAtNTUsNyArNTUsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogCiAjZGVmaW5lIEkyQ19OQU1FKHgpICh4KS0+bmFtZQogCkBAIC0xMzksOSArMTM4LDYgQEAKIAkgICAgICAgdTggICAgICAgICAgICAgICAgIHJlZywKIAkgICAgICAgdTggICAgICAgICAgICAgICAgIHZhbHVlKQogewotCS8qc3RydWN0IHNhYTcxMTQgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsqLwotCi0JLypkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOyovCiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIApAQCAtMTU3LDI1ICsxNTMsMjEgQEAKIAkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQkvKnN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ki8KLQkJc3RydWN0IGkyY19tc2cgbXNnOwogCQl1OCBibG9ja19kYXRhWzMyXTsKKwkJaW50IGJsb2NrX2xlbjsKIAotCQltc2cuYWRkciA9IGNsaWVudC0+YWRkcjsKLQkJbXNnLmZsYWdzID0gMDsKIAkJd2hpbGUgKGxlbiA+PSAyKSB7Ci0JCQltc2cuYnVmID0gKGNoYXIgKikgYmxvY2tfZGF0YTsKLQkJCW1zZy5sZW4gPSAwOwotCQkJYmxvY2tfZGF0YVttc2cubGVuKytdID0gcmVnID0gZGF0YVswXTsKKwkJCWJsb2NrX2xlbiA9IDA7CisJCQlibG9ja19kYXRhW2Jsb2NrX2xlbisrXSA9IHJlZyA9IGRhdGFbMF07CiAJCQlkbyB7Ci0JCQkJYmxvY2tfZGF0YVttc2cubGVuKytdID0KLQkJCQkgICAgLypkZWNvZGVyLT5yZWdbcmVnKytdID0qLyBkYXRhWzFdOworCQkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0gZGF0YVsxXTsKKwkJCQlyZWcrKzsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7CiAJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBtc2cubGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLAotCQkJCQkJJm1zZywgMSkpIDwgMCkKKwkJCQkgYmxvY2tfbGVuIDwgMzIpOworCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAorCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKQEAgLTMwOCw3ICszMDAsNyBAQAogCTB4NTUsIDB4ZmYsCiAJMHg1NiwgMHhmZiwKIAkweDU3LCAweGZmLAotCTB4NTgsIDB4NDAsCQkvLyBmcmFtaW5nIGNvZGUgCisJMHg1OCwgMHg0MCwJCS8vIGZyYW1pbmcgY29kZQogCTB4NTksIDB4NDcsCQkvLyBob3Jpem9udGFsIG9mZnNldAogCTB4NWEsIDB4MDYsCQkvLyB2ZXJ0aWNhbCBvZmZzZXQKIAkweDViLCAweDgzLAkJLy8gZmllbGQgb2Zmc2V0CkBAIC0zNTMsNyArMzQ1LDcgQEAKIAkweDgyLCAweDAwLAogCTB4ODMsIDB4MDAsCiAJMHg4NCwgMHhjNSwKLQkweDg1LCAweDBkLAkJLy8gaHN5bmMgYW5kIHZzeW5jID8gCisJMHg4NSwgMHgwZCwJCS8vIGhzeW5jIGFuZCB2c3luYyA/CiAJMHg4NiwgMHg0MCwKIAkweDg3LCAweDAxLAogCTB4ODgsIDB4MDAsCkBAIC00NDIsNyArNDM0LDcgQEAKIAkweGQ5LCAweDA0LAogCTB4ZGEsIDB4MDAsCQkvLyBob3Jpem9udGFsIGx1bWluYW5jZSBwaGFzZSBvZmZzZXQKIAkweGRiLCAweDAwLAotCTB4ZGMsIDB4MDAsCQkvLyBob3Jpem9udGFsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50IAorCTB4ZGMsIDB4MDAsCQkvLyBob3Jpem9udGFsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50CiAJMHhkZCwgMHgwMiwKIAkweGRlLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQKIAkweGRmLCAweDAwLApAQCAtNzYyLDcgKzc1NCw3IEBACiAJCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4NywKIAkJCQkgICAgICBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg4NyldKTsKIAkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCi0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhmOCk7CS8vIHN3IHJlc2V0IHNjYWxlciByZWxlYXNlICAgICAgICAgICAgCisJCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhmOCk7CS8vIHN3IHJlc2V0IHNjYWxlciByZWxlYXNlCiAJCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgzNik7CiAKIAkJfQpAQCAtODIxLDcgKzgxMyw3IEBACiAgICAgeyBJMkNfU0FBNzExNCA+PiAxLCBJMkNfU0FBNzExNEEgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7CiAJLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKIAkucHJvYmUJCQk9ICZpZ25vcmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IDA0OGQwMDAuLmIwNTAxNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC0xLDQgKzEsNCBAQAotLyogc2FhNzExNSAtIFBoaWxpcHMgU0FBNzExNC9TQUE3MTE1IHZpZGVvIGRlY29kZXIgZHJpdmVyCisvKiBzYWE3MTE1IC0gUGhpbGlwcyBTQUE3MTEzL1NBQTcxMTQvU0FBNzExNSB2aWRlbyBkZWNvZGVyIGRyaXZlcgogICoKICAqIEJhc2VkIG9uIHNhYTcxMTQgZHJpdmVyIGJ5IE1heGltIFlldnR5dXNoa2luLCB3aGljaCBpcyBiYXNlZCBvbgogICogdGhlIHNhYTcxMTEgZHJpdmVyIGJ5IERhdmUgUGVya3MuCkBAIC0xNiw2ICsxNiw3IEBACiAgKiAoMi8xNy8yMDAzKQogICoKICAqIFZCSSBzdXBwb3J0ICgyMDA0KSBhbmQgY2xlYW51cHMgKDIwMDUpIGJ5IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICogU0FBNzExMyBzdXBwb3J0IGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zOSwxMSArNDAsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL2F1ZGlvY2hpcC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExNC9TQUE3MTE1IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXhpbSBZZXZ0eXVzaGtpbiwgS2V2aW4gVGhheWVyLCBDaHJpcyBLZW5uZWR5LCBIYW5zIFZlcmt1aWwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTEzL1NBQTcxMTQvU0FBNzExNSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUiggICJNYXhpbSBZZXZ0eXVzaGtpbiwgS2V2aW4gVGhheWVyLCBDaHJpcyBLZW5uZWR5LCAiCisJCSJIYW5zIFZlcmt1aWwsIE1hdXJvIENhcnZhbGhvIENoZWhhYiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKQEAgLTUxLDcgKzUyLDEwIEBACiAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQyID4+IDEsIDB4NDAgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJCTB4NGEgPj4xLCAweDQ4ID4+MSwJLyogU0FBNzExMyAqLworCQkweDQyID4+IDEsIDB4NDAgPj4gMSwJLyogU0FBNzExNCBhbmQgU0FBNzExNSAqLworCQlJMkNfQ0xJRU5UX0VORCB9OwogCiAKIEkyQ19DTElFTlRfSU5TTU9EOwpAQCAtMTAxLDEwICsxMDUsMTIgQEAKICAgIEhhdXBwYXVnZSBkcml2ZXIgc2V0cy4gKi8KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9pbml0X2F1dG9faW5wdXRbXSA9IHsKKwkJLyogRnJvbnQtRW5kIFBhcnQgKi8KIAkweDAxLCAweDQ4LAkJLyogd2hpdGUgcGVhayBjb250cm9sIGRpc2FibGVkICovCiAJMHgwMywgMHgyMCwJCS8qIHdhcyAweDMwLiAweDIwOiBsb25nIHZlcnRpY2FsIGJsYW5raW5nICovCiAJMHgwNCwgMHg5MCwJCS8qIGFuYWxvZyBnYWluIHNldCB0byAwICovCiAJMHgwNSwgMHg5MCwJCS8qIGFuYWxvZyBnYWluIHNldCB0byAwICovCisJCS8qIERlY29kZXIgUGFydCAqLwogCTB4MDYsIDB4ZWIsCQkvKiBob3JpeiBzeW5jIGJlZ2luID0gLTIxICovCiAJMHgwNywgMHhlMCwJCS8qIGhvcml6IHN5bmMgc3RvcCA9IC0xNyAqLwogCTB4MGEsIDB4ODAsCQkvKiB3YXMgMHg4OC4gZGVjb2RlciBicmlnaHRuZXNzLCAweDgwIGlzIGl0dSBzdGFuZGFyZCAqLwpAQCAtMTIzLDYgKzEyOSw4IEBACiAJMHgxYiwgMHg0MiwJCS8qIG1pc2MgY2hyb21hIGNvbnRyb2wgMHg0MiA9IHJlY29tbWVuZGVkICovCiAJMHgxYywgMHhhOSwJCS8qIGNvbWJmaWx0ZXIgY29udHJvbCAweEE5ID0gcmVjb21tZW5kZWQgKi8KIAkweDFkLCAweDAxLAkJLyogY29tYmZpbHRlciBjb250cm9sIDB4MDEgPSByZWNvbW1lbmRlZCAqLworCisJCS8qIFBvd2VyIERldmljZSBDb250cm9sICovCiAJMHg4OCwgMHhkMCwJCS8qIHJlc2V0IGRldmljZSAqLwogCTB4ODgsIDB4ZjAsCQkvKiBzZXQgZGV2aWNlIHByb2dyYW1tZWQsIGFsbCBpbiBvcGVyYXRpb25hbCBtb2RlICovCiAJMHgwMCwgMHgwMApAQCAtMzM4LDYgKzM0NiwzMyBAQAogCTB4MDAsIDB4MDAKIH07CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTNfaW5pdF9hdXRvX2lucHV0W10gPSB7CisJMHgwMSwgMHgwOCwJLyogUEg3MTEzX0lOQ1JFTUVOVF9ERUxBWSAtICgxKSAoMSkgKDEpICgxKSBJREVMMyBJREVMMiBJREVMTDEgSURFTDAgKi8KKwkweDAyLCAweGMyLAkvKiBQSDcxMTNfQU5BTE9HX0lOUFVUX0NPTlRSXzEgLSBGVVNFMSBGVVNFMCBHVURMMSBHVURMMCBNT0RFMyBNT0RFMiBNT0RFMSBNT0RFMCAqLworCTB4MDMsIDB4MzAsCS8qIFBINzExM19BTkFMT0dfSU5QVVRfQ09OVFJfMiAtICgxKSBITE5SUyBWQlNMIFdQT0ZGIEhPTERHIEdBRklYIEdBSTI4IEdBSTE4ICovCisJMHgwNCwgMHgwMCwJLyogUEg3MTEzX0FOQUxPR19JTlBVVF9DT05UUl8zIC0gR0FJMTcgR0FJMTYgR0FJMTUgR0FJMTQgR0FJMTMgR0FJMTIgR0FJMTEgR0FJMTAgKi8KKwkweDA1LCAweDAwLAkvKiBQSDcxMTNfQU5BTE9HX0lOUFVUX0NPTlRSXzQgLSBHQUkyNyBHQUkyNiBHQUkyNSBHQUkyNCBHQUkyMyBHQUkyMiBHQUkyMSBHQUkyMCAqLworCTB4MDYsIDB4ODksCS8qIFBINzExM19IT1JJWk9OVEFMX1NZTkNfU1RBUlQgLSBIU0I3IEhTQjYgSFNCNSBIU0I0IEhTQjMgSFNCMiBIU0IxIEhTQjAgKi8KKwkweDA3LCAweDBkLAkvKiBQSDcxMTNfSE9SSVpPTlRBTF9TWU5DX1NUT1AgLSBIU1M3IEhTUzYgSFNTNSBIU1M0IEhTUzMgSFNTMiBIU1MxIEhTUzAgKi8KKwkweDA4LCAweDg4LAkvKiBQSDcxMTNfU1lOQ19DT05UUk9MIC0gQVVGRCBGU0VMIEZPRVQgSFRDMSBIVEMwIEhQTEwgVk5PSTEgVk5PSTAgKi8KKwkweDA5LCAweDAxLAkvKiBQSDcxMTNfTFVNSU5BTkNFX0NPTlRST0wgLSBCWVBTIFBSRUYgQlBTUzEgQlBTUzAgVkJMQiBVUFRDViBBUEVSMSBBUEVSMCAqLworCTB4MGEsIDB4ODAsCS8qIFBINzExM19MVU1JTkFOQ0VfQlJJR0hUTkVTUyAtIEJSSUc3IEJSSUc2IEJSSUc1IEJSSUc0IEJSSUczIEJSSUcyIEJSSUcxIEJSSUcwICovCisJMHgwYiwgMHg0NywJLyogUEg3MTEzX0xVTUlOQU5DRV9DT05UUkFTVCAtIENPTlQ3IENPTlQ2IENPTlQ1IENPTlQ0IENPTlQzIENPTlQyIENPTlQxIENPTlQwICovCisJMHgwYywgMHg0MCwJLyogUEg3MTEzX0NIUk9NQV9TQVRVUkFUSU9OIC0gU0FUTjcgU0FUTjYgU0FUTjUgU0FUTjQgU0FUTjMgU0FUTjIgU0FUTjEgU0FUTjAgKi8KKwkweDBkLCAweDAwLAkvKiBQSDcxMTNfQ0hST01BX0hVRV9DT05UUk9MIC0gSFVFQzcgSFVFQzYgSFVFQzUgSFVFQzQgSFVFQzMgSFVFQzIgSFVFQzEgSFVFQzAgKi8KKwkweDBlLCAweDAxLAkvKiBQSDcxMTNfQ0hST01BX0NPTlRST0wgLSBDRFRPIENTVEQyIENTVEQxIENTVEQwIERDQ0YgRkNUQyBDSEJXMSBDSEJXMCAqLworCTB4MGYsIDB4MmEsCS8qIFBINzExM19DSFJPTUFfR0FJTl9DT05UUk9MIC0gQUNHQyBDR0FJTjYgQ0dBSU41IENHQUlONCBDR0FJTjMgQ0dBSU4yIENHQUlOMSBDR0FJTjAgKi8KKwkweDEwLCAweDA4LAkvKiBQSDcxMTNfRk9STUFUX0RFTEFZX0NPTlRST0wgLSBPRlRTMSBPRlRTMCBIREVMMSBIREVMMCBWUkxOIFlERUwyIFlERUwxIFlERUwwICovCisJMHgxMSwgMHgwYywJLyogUEg3MTEzX09VVFBVVF9DT05UUk9MXzEgLSBHUFNXMSBDTTk5IEdQU1cwIEhMU0VMIE9FWUMgT0VSVCBWSVBCIENPTE8gKi8KKwkweDEyLCAweDA3LAkvKiBQSDcxMTNfT1VUUFVUX0NPTlRST0xfMiAtIFJUU0UxMyBSVFNFMTIgUlRTRTExIFJUU0UxMCBSVFNFMDMgUlRTRTAyIFJUU0UwMSBSVFNFMDAgKi8KKwkweDEzLCAweDAwLAkvKiBQSDcxMTNfT1VUUFVUX0NPTlRST0xfMyAtIEFETFNCICgxKSAoMSkgT0xEU0IgRklEUCAoMSkgQU9TTDEgQU9TTDAgKi8KKwkweDE0LCAweDAwLAkvKiBSRVNFUlZFRCAxNCAtICgxKSAoMSkgKDEpICgxKSAoMSkgKDEpICgxKSAoMSkgKi8KKwkweDE1LCAweDAwLAkvKiBQSDcxMTNfVl9HQVRFMV9TVEFSVCAtIFZTVEE3IFZTVEE2IFZTVEE1IFZTVEE0IFZTVEEzIFZTVEEyIFZTVEExIFZTVEEwICovCisJMHgxNiwgMHgwMCwJLyogUEg3MTEzX1ZfR0FURTFfU1RPUCAtIFZTVE83IFZTVE82IFZTVE81IFZTVE80IFZTVE8zIFZTVE8yIFZTVE8xIFZTVE8wICovCisJMHgxNywgMHgwMCwJLyogUEg3MTEzX1ZfR0FURTFfTVNCIC0gKDEpICgxKSAoMSkgKDEpICgxKSAoMSkgVlNUTzggVlNUQTggKi8KKwkweDAwLCAweDAwCit9OworCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTE1X2luaXRfbWlzY1tdID0gewogCTB4MzgsIDB4MDMsCQkvKiBhdWRpbyBzdHVmZiAqLwogCTB4MzksIDB4MTAsCkBAIC02NzcsMTAgKzcxMiwzNSBAQAogCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzUwaHpfdmlkZW8pOwogCX0KIAorCS8qIFJlZ2lzdGVyIDBFIC0gQml0cyBENi1ENCBvbiBOTy1BVVRPIG1vZGUKKwkJKFNBQTcxMTMgZG9lc24ndCBoYXZlIGF1dG8gbW9kZSkKKwkgICAgNTAgSHogLyA2MjUgbGluZXMgICAgICAgICAgIDYwIEh6IC8gNTI1IGxpbmVzCisJMDAwIFBBTCBCR0RISSAoNC40M01oeikgICAgICAgICBOVFNDIE0gKDMuNThNSHopCisJMDAxIE5UU0MgNC40MyAoNTAgSHopICAgICAgICAgICBQQUwgNC40MyAoNjAgSHopCisJMDEwIENvbWJpbmF0aW9uLVBBTCBOICgzLjU4TUh6KSBOVFNDIDQuNDMgKDYwIEh6KQorCTAxMSBOVFNDIE4gKDMuNThNSHopICAgICAgICAgICAgUEFMIE0gKDMuNThNSHopCisJMTAwIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICBOVFNDLUphcGFuICgzLjU4TUh6KQorCSovCisJaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTMpIHsKKwkJdTggcmVnID0gIHNhYTcxMTVfcmVhZChjbGllbnQsIDB4MGUpICYgMHg4ZjsKKworCQlpZiAoc3RkID09IFY0TDJfU1REX1BBTF9NKSB7CisJCQlyZWd8PTB4MzA7CisJCX0gZWxzZSBpZiAoc3RkID09IFY0TDJfU1REX1BBTF9OKSB7CisJCQlyZWd8PTB4MjA7CisJCX0gZWxzZSBpZiAoc3RkID09IFY0TDJfU1REX1BBTF82MCkgeworCQkJcmVnfD0weDEwOworCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9OVFNDX01fSlApIHsKKwkJCXJlZ3w9MHg0MDsKKwkJfQorCQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHgwZSwgcmVnKTsKKwl9CisKKwogCXN0YXRlLT5zdGQgPSBzdGQ7CiAKIAkvKiByZXN0YXJ0IHRhc2sgQiBpZiBuZWVkZWQgKi8KLQlpZiAodGFza2IgJiYgc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNCkgeworCWlmICh0YXNrYiAmJiBzdGF0ZS0+aWRlbnQgIT0gVjRMMl9JREVOVF9TQUE3MTE1KSB7CiAJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfdmJpX29uKTsKIAl9CiAKQEAgLTcwMyw3ICs3NjMsNyBAQAogCWludCB2Y3I7CiAKIAl2NGxfaW5mbyhjbGllbnQsICJBdWRpbyBmcmVxdWVuY3k6ICVkIEh6XG4iLCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOwotCWlmIChjbGllbnQtPm5hbWVbNl0gPT0gJzQnKSB7CisJaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTUpIHsKIAkJLyogc3RhdHVzIGZvciB0aGUgc2FhNzExNCAqLwogCQlyZWcxZiA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDB4MWYpOwogCQlzaWduYWxPayA9IChyZWcxZiAmIDB4YzEpID09IDB4ODE7CkBAIC03NTEsOCArODExLDggQEAKIAl1OCBsY3JbMjRdOwogCWludCBpLCB4OwogCi0JLyogc2FhNzExNCBkb2Vzbid0IHlldCBzdXBwb3J0IFZCSSAqLwotCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTE0KQorCS8qIHNhYTcxMTMvNzExNDQgZG9lc24ndCB5ZXQgc3VwcG9ydCBWQkkgKi8KKwlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExNSkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8PSAyMzsgaSsrKQpAQCAtNzkxLDcgKzg1MSw3IEBACiAJCQkJCWNhc2UgMDoKIAkJCQkJCWxjcltpXSB8PSAweGYgPDwgKDQgKiB4KTsKIAkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0I6CisJCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0I6CiAJCQkJCQlsY3JbaV0gfD0gMSA8PCAoNCAqIHgpOwogCQkJCQkJYnJlYWs7CiAJCQkJCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6CkBAIC04MjAsNyArODgwLDcgQEAKIHN0YXRpYyBpbnQgc2FhNzExNV9nZXRfdjRsZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewogCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewotCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCisJCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9CLCAwLAkvKiAxICovCiAJCTAsIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1LAkvKiA0ICovCiAJCVY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCQkvKiA1ICovCiAJCVY0TDJfU0xJQ0VEX1ZQUywgMCwgMCwgMCwgMCwJLyogNyAqLwpAQCAtOTg1LDcgKzEwNDUsNyBAQAogCS8qIGRlY29kZSBwYXlsb2FkcyAqLwogCXN3aXRjaCAoaWQyKSB7CiAJY2FzZSAxOgotCQl2YmktPnR5cGUgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COworCQl2YmktPnR5cGUgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQjsKIAkJYnJlYWs7CiAJY2FzZSA0OgogCQlpZiAoIXNhYTcxMTVfb2RkX3Bhcml0eShwWzBdKSB8fCAhc2FhNzExNV9vZGRfcGFyaXR5KHBbMV0pKQpAQCAtMTAyNyw3ICsxMDg3LDcgQEAKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSAgICAgICAgICA9ICJDb250cmFzdCIsCiAJCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5tYXhpbXVtICAgICAgID0gMTI3LAogCQkuc3RlcCAgICAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gNjQsCiAJCS5mbGFncyAgICAgICAgID0gMCwKQEAgLTEwMzYsNyArMTA5Niw3IEBACiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgICAgICAgICAgPSAiU2F0dXJhdGlvbiIsCiAJCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5tYXhpbXVtICAgICAgID0gMTI3LAogCQkuc3RlcCAgICAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gNjQsCiAJCS5mbGFncyAgICAgICAgID0gMCwKQEAgLTEyNjEsMTQgKzEzMjEsMTIgQEAKIAogCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAwLCA1KTsKIAljaGlwX2lkID0gc2FhNzExNV9yZWFkKGNsaWVudCwgMCkgJiAweDBmOwotCWlmIChjaGlwX2lkICE9IDQgJiYgY2hpcF9pZCAhPSA1KSB7CisJaWYgKGNoaXBfaWQgPDMgJiYgY2hpcF9pZCA+IDUpIHsKIAkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2FhNzExNSBub3QgZm91bmRcbiIpOwogCQlrZnJlZShjbGllbnQpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGNoaXBfaWQgPT0gNCkgewotCQlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgInNhYTcxMTQiKTsKLQl9CisJc25wcmludGYoY2xpZW50LT5uYW1lLCBzaXplb2YoY2xpZW50LT5uYW1lKSAtIDEsICJzYWE3MTElZCIsY2hpcF9pZCk7CiAJdjRsX2luZm8oY2xpZW50LCAic2FhNzExJWQgZm91bmQgQCAweCV4ICglcylcbiIsIGNoaXBfaWQsIGFkZHJlc3MgPDwgMSwgYWRhcHRlci0+bmFtZSk7CiAKIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTE1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMjg1LDEzICsxMzQzLDI3IEBACiAJc3RhdGUtPmNvbnRyYXN0ID0gNjQ7CiAJc3RhdGUtPmh1ZSA9IDA7CiAJc3RhdGUtPnNhdCA9IDY0OwotCXN0YXRlLT5pZGVudCA9IChjaGlwX2lkID09IDQpID8gVjRMMl9JREVOVF9TQUE3MTE0IDogVjRMMl9JREVOVF9TQUE3MTE1OworCXN3aXRjaCAoY2hpcF9pZCkgeworCWNhc2UgMzoKKwkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTEzOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTE1OworCQlicmVhazsKKwl9CisKIAlzdGF0ZS0+YXVkY2xrX2ZyZXEgPSA0ODAwMDsKIAogCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIndyaXRpbmcgaW5pdCB2YWx1ZXNcbiIpOwogCiAJLyogaW5pdCB0byA2MGh6LzQ4a2h6ICovCi0Jc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2luaXRfYXV0b19pbnB1dCk7CisJaWYgKHN0YXRlLT5pZGVudD09VjRMMl9JREVOVF9TQUE3MTEzKQorCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTNfaW5pdF9hdXRvX2lucHV0KTsKKwllbHNlCisJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9pbml0X2F1dG9faW5wdXQpOwogCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9pbml0X21pc2MpOwogCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNjBoel9mdWxscmVzX3gpOwogCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNjBoel9mdWxscmVzX3kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTF4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXguYwppbmRleCA2YzE2MWYyLi43MDhmYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXguYwpAQCAtNDUsNyArNDUsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogCiAjZGVmaW5lIEkyQ19OQU1FKHMpIChzKS0+bmFtZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyMS5oCmluZGV4IDc0ZTM3ZDQuLjY2OTY3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyMS5oCkBAIC02NCw3ICs2NCw3IEBACiAjZGVmaW5lIFBBTF9NU0JfVkVSVElDQUwJMHg0MAkvKiA3YyAqLwogCiAvKiBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSAqLwotCSAKKwogc3RhdGljIF9fdTggaW5pdDcxMjFudHNjW10gPSB7CiAJMHgyNiwgMHgwLAkweDI3LCAweDAsCiAJMHgyOCwgTlRTQ19CVVJTVF9TVEFSVCwJCTB4MjksIE5UU0NfQlVSU1RfRU5ELApAQCAtOTUsNyArOTUsNyBAQAogCTB4NzgsIDB4MCwJMHg3OSwgMHgwLAkweDdhLCBOVFNDX0ZJUlNUX0FDVElWRSwKIAkweDdiLCBOVFNDX0xBU1RfQUNUSVZFLAkJMHg3YywgTlRTQ19NU0JfVkVSVElDQUwsCiAJMHg3ZCwgMHgwLAkweDdlLCAweDAsCTB4N2YsIDB4MAotfTsgCit9OwogI2RlZmluZSBJTklUNzEyMUxFTgkoc2l6ZW9mKGluaXQ3MTIxbnRzYykvMikKIAogc3RhdGljIF9fdTggaW5pdDcxMjFwYWxbXSA9IHsKQEAgLTEyOCw1ICsxMjgsNSBAQAogCTB4NzgsIDB4MCwJMHg3OSwgMHgwLAkweDdhLCBQQUxfRklSU1RfQUNUSVZFLAogCTB4N2IsIFBBTF9MQVNUX0FDVElWRSwJCTB4N2MsIFBBTF9NU0JfVkVSVElDQUwsCiAJMHg3ZCwgMHgwLAkweDdlLCAweDAsCTB4N2YsIDB4MAotfTsgCit9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKaW5kZXggYTdhNmFiOS4uYmIzZTBiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwpAQCAtNTQsMTAgKzU0LDEyIEBACiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CS8qIEluZGV4IDAtTUFYICovCiBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CS8qIElEIGZvciB0aGlzIGNhcmQgKi8KLXN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IHsxLCBbMSAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gMH07CitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSB7MSwgWzEgLi4uIChTTkRSVl9DQVJEUyAtIDEpXSA9IDF9OwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciBTQUE3MTM0IGNhcHR1cmUgaW50ZXJmYWNlKHMpLiIpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgKG9yIG5vdCkgdGhlIFNBQTcxMzQgY2FwdHVyZSBpbnRlcmZhY2UocykuIik7CiAKICNkZWZpbmUgZHByaW50ayhmbXQsIGFyZy4uLikgICAgaWYgKGRlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2Fsc2E6ICIgZm10LCBkZXYtPm5hbWUgLCAjI2FyZykKQEAgLTY5LDcgKzcxLDcgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCBzbmRfY2FyZF9zYWE3MTM0IHsKLQlzbmRfY2FyZF90ICpjYXJkOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzcGlubG9ja190IG1peGVyX2xvY2s7CiAJaW50IG1peGVyX3ZvbHVtZVtNSVhFUl9BRERSX0xBU1QrMV1bMl07CiAJaW50IGNhcHR1cmVfc291cmNlW01JWEVSX0FERFJfTEFTVCsxXVsyXTsKQEAgLTkzLDEwICs5NSwxMCBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOwogCi0Jc25kX3BjbV9zdWJzdHJlYW1fdCAqc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogfSBzbmRfY2FyZF9zYWE3MTM0X3BjbV90OwogCi1zdGF0aWMgc25kX2NhcmRfdCAqc25kX3NhYTcxMzRfY2FyZHNbU05EUlZfQ0FSRFNdOworc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX3NhYTcxMzRfY2FyZHNbU05EUlZfQ0FSRFNdOwogCiAKIC8qCkBAIC0yNDksMTAgKzI1MSwxMCBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV90cmlnZ2VyKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sCitzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqIHN1YnN0cmVhbSwKIAkJCQkJICBpbnQgY21kKQogewotCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc25kX2NhcmRfc2FhNzEzNF9wY21fdCAqcGNtID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2PXBjbS0+ZGV2OwogCWludCBlcnIgPSAwOwpAQCAtMzA2LDggKzMwOCw3IEBACiAKIHN0YXRpYyBpbnQgZHNwX2J1ZmZlcl9mcmVlKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQogewotCWlmICghZGV2LT5kbWFzb3VuZC5ibGtzaXplKQotCQlCVUcoKTsKKwlCVUdfT04oIWRldi0+ZG1hc291bmQuYmxrc2l6ZSk7CiAKIAl2aWRlb2J1Zl9kbWFfZnJlZSgmZGV2LT5kbWFzb3VuZC5kbWEpOwogCkBAIC0zMzEsOSArMzMyLDkgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfcHJlcGFyZShzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQorc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKiBzdWJzdHJlYW0pCiB7Ci0Jc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpbnQgYnN3YXAsIHNpZ247CiAJdTMyIGZtdCwgY29udHJvbDsKIAlzbmRfY2FyZF9zYWE3MTM0X3QgKnNhYTcxMzQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CkBAIC00MjAsOSArNDIxLDEwIEBACiAgKgogICovCiAKLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfcG9pbnRlcihzbmRfcGNtX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQorc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKiBzdWJzdHJlYW0pCiB7Ci0Jc25kX3BjbV9ydW50aW1lX3QgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfY2FyZF9zYWE3MTM0X3BjbV90ICpwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY9cGNtLT5kZXY7CiAKQEAgLTQ0MCw3ICs0NDIsNyBAQAogICogQUxTQSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgZGVmaW5pdGlvbgogICovCiAKLXN0YXRpYyBzbmRfcGNtX2hhcmR3YXJlX3Qgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlID0KK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmUgPQogewogCS5pbmZvID0gICAgICAgICAgICAgICAgIChTTkRSVl9QQ01fSU5GT19NTUFQIHwgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAogCQkJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CkBAIC00NjMsNyArNDY1LDcgQEAKIAkucGVyaW9kc19tYXggPQkJMTAyNCwKIH07CiAKLXN0YXRpYyB2b2lkIHNuZF9jYXJkX3NhYTcxMzRfcnVudGltZV9mcmVlKHNuZF9wY21fcnVudGltZV90ICpydW50aW1lKQorc3RhdGljIHZvaWQgc25kX2NhcmRfc2FhNzEzNF9ydW50aW1lX2ZyZWUoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSkKIHsKIAlzbmRfY2FyZF9zYWE3MTM0X3BjbV90ICpwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAKQEAgLTQ4MCw4ICs0ODIsOCBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfaHdfcGFyYW1zKHNuZF9wY21fc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sCi0JCQkJICAgIHNuZF9wY21faHdfcGFyYW1zX3QgKiBod19wYXJhbXMpCitzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqIHN1YnN0cmVhbSwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKiBod19wYXJhbXMpCiB7CiAJc25kX2NhcmRfc2FhNzEzNF90ICpzYWE3MTM0ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2OwpAQCAtNTA1LDcgKzUwNyw3IEBACiAJLyogcmVsZWFzZSB0aGUgb2xkIGJ1ZmZlciAqLwogCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKSB7CiAJCXNhYTcxMzRfcGd0YWJsZV9mcmVlKGRldi0+cGNpLCAmZGV2LT5kbWFzb3VuZC5wdCk7Ci0JCXZpZGVvYnVmX2RtYV9wY2lfdW5tYXAoZGV2LT5wY2ksICZkZXYtPmRtYXNvdW5kLmRtYSk7CisJCXZpZGVvYnVmX3BjaV9kbWFfdW5tYXAoZGV2LT5wY2ksICZkZXYtPmRtYXNvdW5kLmRtYSk7CiAJCWRzcF9idWZmZXJfZnJlZShkZXYpOwogCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKIAl9CkBAIC01MjEsMTIgKzUyMywxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmICgwICE9IChlcnIgPSB2aWRlb2J1Zl9kbWFfcGNpX21hcChkZXYtPnBjaSwgJmRldi0+ZG1hc291bmQuZG1hKSkpIHsKKwlpZiAoMCAhPSAoZXJyID0gdmlkZW9idWZfcGNpX2RtYV9tYXAoZGV2LT5wY2ksICZkZXYtPmRtYXNvdW5kLmRtYSkpKSB7CiAJCWRzcF9idWZmZXJfZnJlZShkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoMCAhPSAoZXJyID0gc2FhNzEzNF9wZ3RhYmxlX2FsbG9jKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLnB0KSkpIHsKLQkJdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwgJmRldi0+ZG1hc291bmQuZG1hKTsKKwkJdmlkZW9idWZfcGNpX2RtYV91bm1hcChkZXYtPnBjaSwgJmRldi0+ZG1hc291bmQuZG1hKTsKIAkJZHNwX2J1ZmZlcl9mcmVlKGRldik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtNTM1LDcgKzUzNyw3IEBACiAJCQkJCQlkZXYtPmRtYXNvdW5kLmRtYS5zZ2xlbiwKIAkJCQkJCTApKSkgewogCQlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwgJmRldi0+ZG1hc291bmQucHQpOwotCQl2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKGRldi0+cGNpLCAmZGV2LT5kbWFzb3VuZC5kbWEpOworCQl2aWRlb2J1Zl9wY2lfZG1hX3VubWFwKGRldi0+cGNpLCAmZGV2LT5kbWFzb3VuZC5kbWEpOwogCQlkc3BfYnVmZmVyX2ZyZWUoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC01NjAsNyArNTYyLDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X2h3X2ZyZWUoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqIHN1YnN0cmVhbSkKIHsKIAlzbmRfY2FyZF9zYWE3MTM0X3QgKnNhYTcxMzQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CkBAIC01NjksNyArNTcxLDcgQEAKIAogCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhKSB7CiAJCXNhYTcxMzRfcGd0YWJsZV9mcmVlKGRldi0+cGNpLCAmZGV2LT5kbWFzb3VuZC5wdCk7Ci0JCXZpZGVvYnVmX2RtYV9wY2lfdW5tYXAoZGV2LT5wY2ksICZkZXYtPmRtYXNvdW5kLmRtYSk7CisJCXZpZGVvYnVmX3BjaV9kbWFfdW5tYXAoZGV2LT5wY2ksICZkZXYtPmRtYXNvdW5kLmRtYSk7CiAJCWRzcF9idWZmZXJfZnJlZShkZXYpOwogCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKIAl9CkBAIC01ODYsNyArNTg4LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfY2xvc2Uoc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqIHN1YnN0cmVhbSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTYwMSwyMCArNjAzLDIwIEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX29wZW4oc25kX3BjbV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICogc3Vic3RyZWFtKQogewotCXNuZF9wY21fcnVudGltZV90ICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc25kX2NhcmRfc2FhNzEzNF9wY21fdCAqcGNtOwogCXNuZF9jYXJkX3NhYTcxMzRfdCAqc2FhNzEzNCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHNhYTcxMzQtPmRldjsKIAlpbnQgZXJyOwogCi0JZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCiAJZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50ICA9IDA7CiAJZGV2LT5kbWFzb3VuZC5yZWFkX29mZnNldCA9IDA7CiAKLQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+ZG1hc291bmQubG9jayk7CiAKIAlwY20gPSBremFsbG9jKHNpemVvZigqcGNtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBjbSA9PSBOVUxMKQpAQCAtNjM5LDcgKzY0MSw3IEBACiAgKiBBTFNBIGNhcHR1cmUgY2FsbGJhY2tzIGRlZmluaXRpb24KICAqLwogCi1zdGF0aWMgc25kX3BjbV9vcHNfdCBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfb3BzID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfb3BzID0gewogCS5vcGVuID0JCQlzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmVfb3BlbiwKIAkuY2xvc2UgPQkJc25kX2NhcmRfc2FhNzEzNF9jYXB0dXJlX2Nsb3NlLAogCS5pb2N0bCA9CQlzbmRfcGNtX2xpYl9pb2N0bCwKQEAgLTY2MCw3ICs2NjIsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfcGNtKHNuZF9jYXJkX3NhYTcxMzRfdCAqc2FhNzEzNCwgaW50IGRldmljZSkKIHsKLQlzbmRfcGNtX3QgKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9wY21fbmV3KHNhYTcxMzQtPmNhcmQsICJTQUE3MTM0IFBDTSIsIGRldmljZSwgMCwgMSwgJnBjbSkpIDwgMCkKQEAgLTY3OCw3ICs2ODAsOCBAQAogICAuZ2V0ID0gc25kX3NhYTcxMzRfdm9sdW1lX2dldCwgLnB1dCA9IHNuZF9zYWE3MTM0X3ZvbHVtZV9wdXQsIFwKICAgLnByaXZhdGVfdmFsdWUgPSBhZGRyIH0KIAotc3RhdGljIGludCBzbmRfc2FhNzEzNF92b2x1bWVfaW5mbyhzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1faW5mb190ICogdWluZm8pCitzdGF0aWMgaW50IHNuZF9zYWE3MTM0X3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKiBrY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKiB1aW5mbykKIHsKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKIAl1aW5mby0+Y291bnQgPSAyOwpAQCAtNjg3LDcgKzY5MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX3NhYTcxMzRfdm9sdW1lX2dldChzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqIHVjb250cm9sKQorc3RhdGljIGludCBzbmRfc2FhNzEzNF92b2x1bWVfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKiBrY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKiB1Y29udHJvbCkKIHsKIAlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKQEAgLTY5Nyw3ICs3MDEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9zYWE3MTM0X3ZvbHVtZV9wdXQoc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKiB1Y29udHJvbCkKK3N0YXRpYyBpbnQgc25kX3NhYTcxMzRfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICoga2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICogdWNvbnRyb2wpCiB7CiAJc25kX2NhcmRfc2FhNzEzNF90ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKQEAgLTcyOCw3ICs3MzMsOCBAQAogICAuZ2V0ID0gc25kX3NhYTcxMzRfY2Fwc3JjX2dldCwgLnB1dCA9IHNuZF9zYWE3MTM0X2NhcHNyY19wdXQsIFwKICAgLnByaXZhdGVfdmFsdWUgPSBhZGRyIH0KIAotc3RhdGljIGludCBzbmRfc2FhNzEzNF9jYXBzcmNfaW5mbyhzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1faW5mb190ICogdWluZm8pCitzdGF0aWMgaW50IHNuZF9zYWE3MTM0X2NhcHNyY19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKiBrY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKiB1aW5mbykKIHsKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKIAl1aW5mby0+Y291bnQgPSAyOwpAQCAtNzM3LDcgKzc0Myw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX3NhYTcxMzRfY2Fwc3JjX2dldChzbmRfa2NvbnRyb2xfdCAqIGtjb250cm9sLCBzbmRfY3RsX2VsZW1fdmFsdWVfdCAqIHVjb250cm9sKQorc3RhdGljIGludCBzbmRfc2FhNzEzNF9jYXBzcmNfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKiBrY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKiB1Y29udHJvbCkKIHsKIAlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKQEAgLTc1MCw3ICs3NTcsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNuZF9zYWE3MTM0X2NhcHNyY19wdXQoc25kX2tjb250cm9sX3QgKiBrY29udHJvbCwgc25kX2N0bF9lbGVtX3ZhbHVlX3QgKiB1Y29udHJvbCkKK3N0YXRpYyBpbnQgc25kX3NhYTcxMzRfY2Fwc3JjX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICoga2NvbnRyb2wsCisJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICogdWNvbnRyb2wpCiB7CiAJc25kX2NhcmRfc2FhNzEzNF90ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2UsIGFkZHIgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKQEAgLTgyNyw3ICs4MzUsNyBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKLXN0YXRpYyBzbmRfa2NvbnRyb2xfbmV3X3Qgc25kX3NhYTcxMzRfY29udHJvbHNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfc2FhNzEzNF9jb250cm9sc1tdID0gewogU0FBNzEzeF9WT0xVTUUoIlZpZGVvIFZvbHVtZSIsIDAsIE1JWEVSX0FERFJfVFZUVU5FUiksCiBTQUE3MTN4X0NBUFNSQygiVmlkZW8gQ2FwdHVyZSBTd2l0Y2giLCAwLCBNSVhFUl9BRERSX1RWVFVORVIpLAogU0FBNzEzeF9WT0xVTUUoIkxpbmUgVm9sdW1lIiwgMSwgTUlYRVJfQUREUl9MSU5FMSksCkBAIC04NDYsNyArODU0LDcgQEAKIAogc3RhdGljIGludCBzbmRfY2FyZF9zYWE3MTM0X25ld19taXhlcihzbmRfY2FyZF9zYWE3MTM0X3QgKiBjaGlwKQogewotCXNuZF9jYXJkX3QgKmNhcmQgPSBjaGlwLT5jYXJkOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGNoaXAtPmNhcmQ7CiAJdW5zaWduZWQgaW50IGlkeDsKIAlpbnQgZXJyOwogCkBAIC04NjAsNyArODY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc25kX3NhYTcxMzRfZnJlZShzbmRfY2FyZF90ICogY2FyZCkKK3N0YXRpYyB2b2lkIHNuZF9zYWE3MTM0X2ZyZWUoc3RydWN0IHNuZF9jYXJkICogY2FyZCkKIHsKIAlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKQEAgLTg4Nyw3ICs4OTUsNyBAQAogc3RhdGljIGludCBhbHNhX2NhcmRfc2FhNzEzNF9jcmVhdGUoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIGludCBkZXZudW0pCiB7CiAKLQlzbmRfY2FyZF90ICpjYXJkOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzbmRfY2FyZF9zYWE3MTM0X3QgKmNoaXA7CiAJaW50IGVycjsKIApAQCAtOTMyLDcgKzk0MCw3IEBACiAKIAljaGlwLT5pcnEgPSBkZXYtPnBjaS0+aXJxOwogCi0JaW5pdF9NVVRFWCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCiAJaWYgKChlcnIgPSBzbmRfY2FyZF9zYWE3MTM0X25ld19taXhlcihjaGlwKSkgPCAwKQogCQlnb3RvIF9fbm9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwppbmRleCA1YTM1ZDNiLi5mZGQ3ZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKQEAgLTUzNiw3ICs1MzYsNyBAQAogCQkucmFkaW8gPSB7CiAJCQkubmFtZSA9IG5hbWVfcmFkaW8sCiAJCQkuYW11eCA9IExJTkUyLAotCX0sCisJCX0sCiAJfSwKIAlbU0FBNzEzNF9CT0FSRF9NRDcxMzRdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiTWVkaW9uIDcxMzQiLApAQCAtNjQwLDYgKzY0MCwzMiBAQAogCQkJLnR2ICAgPSAxLAogCQl9fSwKIAl9LAorCVtTQUE3MTM0X0JPQVJEX0VMU0FfNzAwVFZdID0geworCQkubmFtZSAgICAgICAgICAgPSAiRUxTQSBFWC1WSVNJT04gNzAwVFYiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9ISVRBQ0hJX05UU0MsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gNCwKKwkJCS5hbXV4ID0gTElORTIsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSA2LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA3LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfX0sCisJCS5tdXRlICAgICAgICAgICA9IHsKKwkJCS5uYW1lID0gbmFtZV9tdXRlLAorCQkJLmFtdXggPSBUViwKKwkJfSwKKwl9LAogCVtTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVFZGTTcxMzRdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiQVNVUyBUVi1GTSA3MTM0IiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKQEAgLTk3Nyw3ICsxMDAzLDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQgfCBUREE5ODg3X0lOVEVSQ0FSUklFUiB8IFREQTk4ODdfUE9SVDJfQUNUSVZFLAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQgfCBUREE5ODg3X0lOVEVSQ0FSUklFUiB8IFREQTk4ODdfUE9SVDJfSU5BQ1RJVkUsCiAJCS5pbnB1dHMgICAgICAgICA9IHt7CiAJCQkubmFtZSA9IG5hbWVfdHYsCiAJCQkudm11eCA9IDMsCkBAIC0xNjY2LDcgKzE2OTIsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCi0JCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCB8IFREQTk4ODdfSU5URVJDQVJSSUVSIHwgVERBOTg4N19QT1JUMl9BQ1RJVkUsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCB8IFREQTk4ODdfSU5URVJDQVJSSUVSIHwgVERBOTg4N19QT1JUMl9JTkFDVElWRSwKIAkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTIwMDIsNyArMjAyOCw3IEBACiAJW1NBQTcxMzRfQk9BUkRfRkxZVFZfRElHSU1BVFJJWF0gPSB7CiAJCS5uYW1lCQk9ICJGbHlUViBtaW5pIEFzdXMgRGlnaW1hdHJpeCIsCiAJCS5hdWRpb19jbG9jawk9IDB4MDAyMDAwMDAsCi0JCS50dW5lcl90eXBlCT0gVFVORVJfTEdfTlRTQ19UQUxOX01JTkksCisJCS50dW5lcl90eXBlCT0gVFVORVJfTEdfVEFMTiwKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULApAQCAtMjE4Nyw3ICsyMjEzLDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gMHg2MSwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCB8IFREQTk4ODdfUE9SVDFfQUNUSVZFLAogCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzID0ge3sKIAkJCS5uYW1lICAgPSBuYW1lX3R2LApAQCAtMjIxMSw3ICsyMjM3LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gMHg2MSwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAotCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCB8IFREQTk4ODdfUE9SVDFfQUNUSVZFLAogCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzID0ge3sKIAkJCS5uYW1lICAgPSBuYW1lX3R2LApAQCAtMjM5Miw3ICsyNDE4LDcgQEAKIAkJfX0sCiAJfSwKIAlbU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzExMGldID0gewotCQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViAxMTBpIChzYWE3MTMzKSIsCisJICAgICAgIC5uYW1lICAgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIDQwaS81MGkvMTEwaSAoc2FhNzEzMykiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULApAQCAtMjQwNyw2ICsyNDMzLDEwIEBACiAJCX0sewogCQkJICAubmFtZSA9IG5hbWVfY29tcDEsCiAJCQkgIC52bXV4ID0gMSwKKwkJCSAuYW11eCA9IExJTkUyLAorCSAgICAgICB9LHsKKwkJCSAubmFtZSA9IG5hbWVfY29tcDIsCisJCQkgLnZtdXggPSAwLAogCQkJICAuYW11eCA9IExJTkUyLAogCQl9LHsKIAkJCSAgLm5hbWUgPSBuYW1lX3N2aWRlbywKQEAgLTI1OTQsNiArMjYyNCw3IEBACiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAogCQkuZ3Bpb21hc2sJPSAweDAwMjAwMDAwLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LAkvKiBBbmFsb2cgYnJvYWRjYXN0L2NhYmxlIFRWICovCiAJCQkudm11eCA9IDEsCkBAIC0yNjE5LDYgKzI2NTAsMTY0IEBACiAJCQkuZ3BpbyA9IDB4MDAwMDAwLAkvKiBHUElPMjE9TG93IGZvciBGTSByYWRpbyBhbnRlbm5hICovCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfNzc3XSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkF2ZXJUViBEVkItVCA3NzciLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyA9IHt7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSA4LAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDFdID0geworCQkvKiBMaWZlVmlldyBGbHlEVkItVCAqLworCQkvKiBHaWFtcGllcm8gR2lhbmNpcG9saSA8Z2lhbmNpQGxpYmVyby5pdD4gKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkxpZmVWaWV3IEZseURWQi1UIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCS8qIENvbXBvc2l0ZSBpbnB1dCAqLworCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAkvKiBTLVZpZGVvIHNpZ25hbCBvbiBTLVZpZGVvIGlucHV0ICovCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUyLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0FEU19EVU9fQ0FSREJVU19QVFYzMzFdID0geworCQkubmFtZSAgICAgICAgICAgPSAiQURTIEluc3RhbnQgVFYgRHVvIENhcmRidXMgUFRWMzMxIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDA2MDAwMDAsIC8qIEJpdCAyMSAwPVJhZGlvLCBCaXQgMjIgMD1UViAqLworCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJCS5ncGlvICAgPSAweDAwMjAwMDAwLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX1RFVklPTl9EVkJUXzIyMFJGXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlRldmlvbi9LV29ybGQgRFZCLVQgMjIwUkYiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkuaW5wdXRzID0ge3sKKwkJCS5uYW1lICAgPSBuYW1lX3R2LAorCQkJLnZtdXggICA9IDEsCisJCQkuYW11eCAgID0gVFYsCisJCQkudHYgICAgID0gMSwKKwkJfSx7CisJCQkubmFtZSAgID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ICAgPSAzLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ICAgPSAwLAorCQkJLmFtdXggICA9IExJTkUxLAorCQl9fSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgICA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCAgID0gTElORTEsCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJLd29ybGQgQVRTQzExMCIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVFVWMTIzNkQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTIsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNjlfQl0gPSB7CisJCS8qIEFWZXJNZWRpYSBBMTY5ICAqLworCQkvKiBSaWNrYXJkIE9zc2VyIDxyaWNreUBvc3Nlci5zZT4gICovCisJCS8qIFRoaXMgY2FyZCBoYXMgdHdvIHNhYTcxMzQgY2hpcHMgb24gaXQsCisJCSAgIGJ1dCBvbmx5IG9uZSBvZiB0aGVtIGlzIGN1cnJlbnRseSB3b3JraW5nLiAqLworCQkubmFtZQkJPSAiQVZlck1lZGlhIEExNjkgQiIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDIxODdkZTcsCisJCS50dW5lcl90eXBlCT0gVFVORVJfTEdfVEFMTiwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MGE2MDAwMCwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTY5X0IxXSA9IHsKKwkJLyogQVZlck1lZGlhIEExNjkgKi8KKwkJLyogUmlja2FyZCBPc3NlciA8cmlja3lAb3NzZXIuc2U+ICovCisJCS5uYW1lCQk9ICJBVmVyTWVkaWEgQTE2OSBCMSIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDIxODdkZTcsCisJCS50dW5lcl90eXBlCT0gVFVORVJfTEdfVEFMTiwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5ncGlvbWFzayAgICAgICA9IDB4Y2E2MDAwMCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gNCwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCQkuZ3BpbyA9IDB4MDRhNjEwMDAsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAyLCAgLyogIENvbXBvc2l0ZSBTVklERU8gKEIvVyBpZiBzaWduYWwgaXMgY2FycmllZCB3aXRoIFNWSURFTykgKi8KKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gTElORTIsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOSwgICAgICAgICAgIC8qIDkgaXMgY29ycmVjdCBhcyBTLVZJREVPMSBhY2NvcmRpbmcgdG8gYTE2OS5pbmYhICovCisJCQkuYW11eCA9IExJTkUxLAorCQl9fSwKKwl9LAorCVtTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMl0gPSB7CisJCS8qIFRoaXMgY2FyZCBoYXMgdHdvIHNhYTcxMzQgY2hpcHMgb24gaXQsCisJCSAgIGJ1dCBvbmx5IG9uZSBvZiB0aGVtIGlzIGN1cnJlbnRseSB3b3JraW5nLgorCQkgICBUaGUgcHJvZ3JhbW1pbmcgZm9yIHRoZSBwcmltYXJ5IGRlY29kZXIgaXMKKwkJICAgaW4gU0FBNzEzNF9CT0FSRF9NRDcxMzQgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIk1lZGlvbiA3MTM0IEJyaWRnZSAjMiIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwl9LAogfTsKIAogY29uc3QgdW5zaWduZWQgaW50IHNhYTcxMzRfYmNvdW50ID0gQVJSQVlfU0laRShzYWE3MTM0X2JvYXJkcyk7CkBAIC0yNzQ1LDEwICsyOTM0LDE2IEBACiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKIAkJLnN1YnZlbmRvciAgICA9IDB4MTA0OCwKLQkJLnN1YmRldmljZSAgICA9IDB4MjI2YiwKKwkJLnN1YmRldmljZSAgICA9IDB4MjI2YSwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRUxTQV81MDBUViwKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwLAorCQkuc3VidmVuZG9yICAgID0gMHgxMDQ4LAorCQkuc3ViZGV2aWNlICAgID0gMHgyMjZjLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9FTFNBXzcwMFRWLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCiAJCS5zdWJ2ZW5kb3IgICAgPSBQQ0lfVkVORE9SX0lEX0FTVVNURUssCiAJCS5zdWJkZXZpY2UgICAgPSAweDQ4NDIsCkBAIC0zMDkwLDYgKzMyODUsNTQgQEAKIAkJLnN1YmRldmljZSAgICA9IDB4MDMxOSwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZRFZCX1RSSU8sCiAJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwJLyogU0FBIDcxMzFFICovCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsCisJCS5zdWJkZXZpY2UgICAgPSAweDJjMDUsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV83NzcsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKKwkJLnN1YnZlbmRvciAgICA9IDB4NTE2OCwKKwkJLnN1YmRldmljZSAgICA9IDB4MDMwMSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9MUjMwMSwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgwMzMxLAorCQkuc3ViZGV2aWNlICAgID0gMHgxNDIxLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BRFNfRFVPX0NBUkRCVVNfUFRWMzMxLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE3ZGUsCisJCS5zdWJkZXZpY2UgICAgPSAweDcyMDEsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1RFVklPTl9EVkJUXzIyMFJGLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsIC8qIFNBQTcxMzVITCAqLworCQkuc3VidmVuZG9yICAgID0gMHgxN2RlLAorCQkuc3ViZGV2aWNlICAgID0gMHg3MzUwLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAorCQkuc3VidmVuZG9yICAgID0gMHgxNDYxLAorCQkuc3ViZGV2aWNlICAgID0gMHg3MzYwLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2OV9CLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsCisJCS5zdWJkZXZpY2UgICAgPSAweDYzNjAsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTY5X0IxLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzQsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE2YmUsCisJCS5zdWJkZXZpY2UgICAgPSAweDAwMDUsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMiwKKwl9LHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtMzE4OSwxOCArMzQzMiwyNSBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9HT1RWSUVXXzcxMzU6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9URVJNSU5BVE9SOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9TRUROQV9QQ19UVl9DQVJEQlVTOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0xSMzAxOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJURFVPOgogCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUQ1MDQ0OgogCQlwcmludGsoIiVzOiBzZWVtcyB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgTUQ1MDQ0XG4iCi0JCSIlczogKHdpdGggdGhlIHNhbWUgSUQpIG91dCB0aGVyZS4gIElmIHNvdW5kIGRvZXNuJ3Qgd29yayBmb3JcbiIKLQkJIiVzOiB5b3UgdHJ5IHRoZSBhdWRpb19jbG9ja19vdmVycmlkZT0weDIwMDAwMCBpbnNtb2Qgb3B0aW9uLlxuIiwKLQkJZGV2LT5uYW1lLGRldi0+bmFtZSxkZXYtPm5hbWUpOworCQkgICAgICAgIiVzOiAod2l0aCB0aGUgc2FtZSBJRCkgb3V0IHRoZXJlLiAgSWYgc291bmQgZG9lc24ndCB3b3JrIGZvclxuIgorCQkgICAgICAgIiVzOiB5b3UgdHJ5IHRoZSBhdWRpb19jbG9ja19vdmVycmlkZT0weDIwMDAwMCBpbnNtb2Qgb3B0aW9uLlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSxkZXYtPm5hbWUsZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k0MDBfQ0FSREJVUzoKIAkJLyogcG93ZXItdXAgdHVuZXIgY2hpcCAqLwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHgwMDA0MDAwMCwgMHgwMDA0MDAwMCk7CiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDAwMDQwMDAwLCAweDAwMDAwMDAwKTsKKwljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfMzAwSV9EVkJUX1BBTDoKKwkJLyogdGhpcyB0dXJucyB0aGUgcmVtb3RlIGNvbnRyb2wgY2hpcCBvZmYgdG8gd29yayBhcm91bmQgYSBidWcgaW4gaXQgKi8KKwkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BNT0RFMSwgMHg4MCk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMSwgMHg4MCk7CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9NT05TVEVSVFZfTU9CSUxFOgogCQkvKiBwb3dlci11cCB0dW5lciBjaGlwICovCiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDAwMDQwMDAwLCAweDAwMDQwMDAwKTsKQEAgLTMyMTEsNiArMzQ2MSwxMCBAQAogCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUE1PREUzLCAweDA4KTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X0dQSU9fR1BTVEFUVVMzLCAweDA2KTsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19EVU9fQ0FSREJVU19QVFYzMzE6CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIDB4MDgpOworCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzMsIDB4MDApOworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0NBUkRCVVM6CiAJCS8qIHBvd2VyLXVwIHR1bmVyIGNoaXAgKi8KIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BNT0RFMCA+PiAyLCAgIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpOwpAQCAtMzIzMyw2ICszNDg3LDEzIEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX1VQTU9TVF9QVVJQTEVfVFY6CiAJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0kyQzsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BMTY5X0I6CisJY2FzZSBTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMjoKKwkJcHJpbnRrKCIlczogJXM6IGR1YWwgc2FhNzEzeCBicm9hZGNhc3QgZGVjb2RlcnNcbiIKKwkJICAgICAgICIlczogU29ycnksIG5vbmUgb2YgdGhlIGlucHV0cyB0byB0aGlzIGNoaXAgYXJlIHN1cHBvcnRlZCB5ZXQuXG4iCisJCSAgICAgICAiJXM6IER1YWwgZGVjb2RlciBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkIGZvciBub3csIHVzZSB0aGUgb3RoZXIgY2hpcC5cbiIsCisJCSAgICAgICBkZXYtPm5hbWUsY2FyZChkZXYpLm5hbWUsZGV2LT5uYW1lLGRldi0+bmFtZSk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMzNTMsMTQgKzM2MTQsNDQgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19USUdFUjoKKwljYXNlIFNBQTcxMzRfQk9BUkRfVEVWSU9OX0RWQlRfMjIwUkY6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKLQkJLyogdGhpcyBpcyBhIGh5YnJpZCBib2FyZCwgaW5pdGlhbGl6ZSB0byBhbmFsb2cgbW9kZSAqLworCQkvKiB0aGlzIGlzIGEgaHlicmlkIGJvYXJkLCBpbml0aWFsaXplIHRvIGFuYWxvZyBtb2RlCisJCSAqIGFuZCBjb25maWd1cmUgZmlybXdhcmUgZWVwcm9tIGFkZHJlc3MKKwkJICovCiAJCXsKIAkJdTggZGF0YVtdID0geyAweDNjLCAweDMzLCAweDY4fTsKIAkJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyPTB4MDgsIC5mbGFncz0wLCAuYnVmPWRhdGEsIC5sZW4gPSBzaXplb2YoZGF0YSl9OwogCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJfVFJJTzoKKwkJeworCQl1OCBkYXRhW10gPSB7IDB4M2MsIDB4MzMsIDB4NjJ9OworCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHI9MHgwOSwgLmZsYWdzPTAsIC5idWY9ZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKX07CisJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19EVU9fQ0FSREJVU19QVFYzMzE6CisJCS8qIG1ha2UgdGhlIHRkYTEwMDQ2IGZpbmQgaXRzIGVlcHJvbSAqLworCQl7CisJCXU4IGRhdGFbXSA9IHsgMHgzYywgMHgzMywgMHg2Mn07CisJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDA4LCAuZmxhZ3M9MCwgLmJ1Zj1kYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpfTsKKwkJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0FUU0MxMTA6CisJCXsKKwkJCS8qIGVuYWJsZSB0dW5lciAqLworCQkJaW50IGk7CisJCQlzdGF0aWMgY29uc3QgdTggYnVmZmVyIFtdID0geyAweDEwLDB4MTIsMHgxMywweDA0LDB4MTYsMHgwMCwweDE0LDB4MDQsMHgwMTcsMHgwMCB9OworCQkJZGV2LT5pMmNfY2xpZW50LmFkZHIgPSAweDBhOworCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJCQlpZiAoMiAhPSBpMmNfbWFzdGVyX3NlbmQoJmRldi0+aTJjX2NsaWVudCwmYnVmZmVyW2kqMl0sMikpCisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZW5hYmxlIHR1bmVyKCVpKS5cbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUsIGkpOworCQl9CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCAwMjg5MDRiLi5jOTg1NzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC02Niw2ICs2NiwxMSBAQAogbW9kdWxlX3BhcmFtKGxhdGVuY3ksIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxhdGVuY3ksInBjaSBsYXRlbmN5IHRpbWVyIik7CiAKK2ludCBzYWE3MTM0X25vX292ZXJsYXk9LTE7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9fb3ZlcmxheSwgc2FhNzEzNF9ub19vdmVybGF5LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhub19vdmVybGF5LCJhbGxvdyBvdmVycmlkZSBvdmVybGF5IGRlZmF1bHQgKDAgZGlzYWJsZXMsIDEgZW5hYmxlcykiCisJCSIgW3NvbWUgVklBL1NJUyBjaGlwc2V0cyBhcmUga25vd24gdG8gaGF2ZSBwcm9ibGVtIHdpdGggb3ZlcmxheV0iKTsKKwogc3RhdGljIHVuc2lnbmVkIGludCB2aWRlb19ucltdID0ge1swIC4uLiAoU0FBNzEzNF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9Owogc3RhdGljIHVuc2lnbmVkIGludCB2YmlfbnJbXSAgID0ge1swIC4uLiAoU0FBNzEzNF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9Owogc3RhdGljIHVuc2lnbmVkIGludCByYWRpb19ucltdID0ge1swIC4uLiAoU0FBNzEzNF9NQVhCT0FSRFMgLSAxKV0gPSBVTlNFVCB9OwpAQCAtMjQ5LDEzICsyNTQsMTIgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXZvaWQgc2FhNzEzNF9kbWFfZnJlZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldixzdHJ1Y3Qgc2FhNzEzNF9idWYgKmJ1ZikKK3ZvaWQgc2FhNzEzNF9kbWFfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsc3RydWN0IHNhYTcxMzRfYnVmICpidWYpCiB7Ci0JaWYgKGluX2ludGVycnVwdCgpKQotCQlCVUcoKTsKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCiAJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLDAsMCk7Ci0JdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwgJmJ1Zi0+dmIuZG1hKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAocSwgJmJ1Zi0+dmIuZG1hKTsKIAl2aWRlb2J1Zl9kbWFfZnJlZSgmYnVmLT52Yi5kbWEpOwogCWJ1Zi0+dmIuc3RhdGUgPSBTVEFURV9ORUVEU19JTklUOwogfQpAQCAtNjEzLDcgKzYxNyw3IEBACiAKIAlzYWFfd3JpdGVsKFNBQTcxMzRfSVJRMSwgMCk7CiAJc2FhX3dyaXRlbChTQUE3MTM0X0lSUTIsIDApOwotCWluaXRfTVVURVgoJmRldi0+bG9jayk7CisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CiAKIAlzYWE3MTM0X3RyYWNrX2dwaW8oZGV2LCJwcmUtaW5pdCIpOwpAQCAtODM1LDYgKzgzOSwyMiBAQAogCQkJbGF0ZW5jeSA9IDB4MEE7CiAJCX0KICNlbmRpZgorCQlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9GQUlMKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogcXVpcms6IHRoaXMgZHJpdmVyIGFuZCB5b3VyICIKKwkJCQkJImNoaXBzZXQgbWF5IG5vdCB3b3JrIHRvZ2V0aGVyIgorCQkJCQkiIGluIG92ZXJsYXkgbW9kZS5cbiIsZGV2LT5uYW1lKTsKKwkJCWlmICghc2FhNzEzNF9ub19vdmVybGF5KSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHF1aXJrOiBvdmVybGF5ICIKKwkJCQkJCSJtb2RlIHdpbGwgYmUgZGlzYWJsZWQuXG4iLAorCQkJCQkJZGV2LT5uYW1lKTsKKwkJCQlzYWE3MTM0X25vX292ZXJsYXkgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcXVpcms6IG92ZXJsYXkgIgorCQkJCQkJIm1vZGUgd2lsbCBiZSBmb3JjZWQuIFVzZSB0aGlzIgorCQkJCQkJIiBvcHRpb24gYXQgeW91ciBvd24gcmlzay5cbiIsCisJCQkJCQlkZXYtPm5hbWUpOworCQkJfQorCQl9CiAJfQogCWlmIChVTlNFVCAhPSBsYXRlbmN5KSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXR0aW5nIHBjaSBsYXRlbmN5IHRpbWVyIHRvICVkXG4iLApAQCAtOTM3LDYgKzk1NywxMSBAQAogCXY0bDJfcHJpb19pbml0KCZkZXYtPnByaW8pOwogCiAJLyogcmVnaXN0ZXIgdjRsIGRldmljZXMgKi8KKwlpZiAoc2FhNzEzNF9ub19vdmVybGF5IDw9IDApIHsKKwkJc2FhNzEzNF92aWRlb190ZW1wbGF0ZS50eXBlIHw9IFZJRF9UWVBFX09WRVJMQVk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIlczogT3ZlcmxheSBzdXBwb3J0IGRpc2FibGVkLlxuIixkZXYtPm5hbWUpOworCX0KIAlkZXYtPnZpZGVvX2RldiA9IHZkZXZfaW5pdChkZXYsJnNhYTcxMzRfdmlkZW9fdGVtcGxhdGUsInZpZGVvIik7CiAJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2LFZGTF9UWVBFX0dSQUJCRVIsCiAJCQkJICAgIHZpZGVvX25yW2Rldi0+bnJdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggMWE1MzZlODYuLjg2Y2ZkYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlICJkdmItcGxsLmgiCiAKICNpZmRlZiBIQVZFX01UMzUyCiAjIGluY2x1ZGUgIm10MzUyLmgiCkBAIC00Miw3ICs0Myw2IEBACiAjZW5kaWYKICNpZmRlZiBIQVZFX05YVDIwMFgKICMgaW5jbHVkZSAibnh0MjAweC5oIgotIyBpbmNsdWRlICJkdmItcGxsLmgiCiAjZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwpAQCAtMTEwLDYgKzExMCwyNSBAQAogCW10MzUyX3dyaXRlKGZlLCBmc21fY3RsX2NmZywgICAgc2l6ZW9mKGZzbV9jdGxfY2ZnKSk7CiAJbXQzNTJfd3JpdGUoZmUsIHNjYW5fY3RsX2NmZywgICBzaXplb2Yoc2Nhbl9jdGxfY2ZnKSk7CiAJbXQzNTJfd3JpdGUoZmUsIGlycV9jZmcsICAgICAgICBzaXplb2YoaXJxX2NmZykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQzNTJfYXZlcjc3N19pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXN0YXRpYyB1OCBjbG9ja19jb25maWcgW10gID0geyBDTE9DS19DVEwsICAweDM4LCAweDJkIH07CisJc3RhdGljIHU4IHJlc2V0IFtdICAgICAgICAgPSB7IFJFU0VULCAgICAgIDB4ODAgfTsKKwlzdGF0aWMgdTggYWRjX2N0bF8xX2NmZyBbXSA9IHsgQURDX0NUTF8xLCAgMHg0MCB9OworCXN0YXRpYyB1OCBhZ2NfY2ZnIFtdICAgICAgID0geyBBR0NfVEFSR0VULCAweDI4LCAweGEwIH07CisJc3RhdGljIHU4IGNhcHRfcmFuZ2VfY2ZnW10gPSB7IENBUFRfUkFOR0UsIDB4MzMgfTsKKworCW10MzUyX3dyaXRlKGZlLCBjbG9ja19jb25maWcsICAgc2l6ZW9mKGNsb2NrX2NvbmZpZykpOworCXVkZWxheSgyMDApOworCW10MzUyX3dyaXRlKGZlLCByZXNldCwgICAgICAgICAgc2l6ZW9mKHJlc2V0KSk7CisJbXQzNTJfd3JpdGUoZmUsIGFkY19jdGxfMV9jZmcsICBzaXplb2YoYWRjX2N0bF8xX2NmZykpOworCW10MzUyX3dyaXRlKGZlLCBhZ2NfY2ZnLCAgICAgICAgc2l6ZW9mKGFnY19jZmcpKTsKKwltdDM1Ml93cml0ZShmZSwgY2FwdF9yYW5nZV9jZmcsIHNpemVvZihjYXB0X3JhbmdlX2NmZykpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNyw4ICsxMzYsMTAgQEAKIAkJCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zLAogCQkJCSAgdTgqIHBsbGJ1ZikKIHsKLQlzdGF0aWMgaW50IG9uICA9IFREQTk4ODdfUFJFU0VOVCB8IFREQTk4ODdfUE9SVDJfSU5BQ1RJVkU7Ci0Jc3RhdGljIGludCBvZmYgPSBUREE5ODg3X1BSRVNFTlQgfCBUREE5ODg3X1BPUlQyX0FDVElWRTsKKwl1OCBvZmZbXSA9IHsgMHgwMCwgMHhmMX07CisJdTggb25bXSAgPSB7IDB4MDAsIDB4NzF9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDQzLCAuZmxhZ3M9MCwgLmJ1Zj1vZmYsIC5sZW4gPSBzaXplb2Yob2ZmKX07CisKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CiAJc3RydWN0IHY0bDJfZnJlcXVlbmN5IGY7CiAKQEAgLTEyNiw5ICsxNDcsMTAgQEAKIAlmLnR1bmVyICAgICA9IDA7CiAJZi50eXBlICAgICAgPSBWNEwyX1RVTkVSX0RJR0lUQUxfVFY7CiAJZi5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeSAvIDEwMDAgKiAxNiAvIDEwMDA7Ci0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldixUREE5ODg3X1NFVF9DT05GSUcsJm9uKTsKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwogCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsVklESU9DX1NfRlJFUVVFTkNZLCZmKTsKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LFREQTk4ODdfU0VUX0NPTkZJRywmb2ZmKTsKKwltc2cuYnVmID0gb247CisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKIAogCXBpbm5hY2xlX2FudGVubmFfcHdyKGRldiwgYW50ZW5uYV9wd3IpOwogCkBAIC0xNDIsNiArMTY0LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbXQzNTJfYXZlcjc3N19wbGxfc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcywgdTgqIHBsbGJ1ZikKK3sKKwlwbGxidWZbMF0gPSAweGMyOworCWR2Yl9wbGxfY29uZmlndXJlKCZkdmJfcGxsX3BoaWxpcHNfdGQxMzE2LCBwbGxidWYrMSwKKwkJCSAgcGFyYW1zLT5mcmVxdWVuY3ksCisJCQkgIHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbXQzNTJfY29uZmlnIHBpbm5hY2xlXzMwMGkgPSB7CiAJLmRlbW9kX2FkZHJlc3MgPSAweDNjID4+IDEsCiAJLmFkY19jbG9jayAgICAgPSAyMDMzMywKQEAgLTE1MCw2ICsxODEsMTIgQEAKIAkuZGVtb2RfaW5pdCAgICA9IG10MzUyX3Bpbm5hY2xlX2luaXQsCiAJLnBsbF9zZXQgICAgICAgPSBtdDM1Ml9waW5uYWNsZV9wbGxfc2V0LAogfTsKKworc3RhdGljIHN0cnVjdCBtdDM1Ml9jb25maWcgYXZlcm1lZGlhXzc3NyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4ZiwKKwkuZGVtb2RfaW5pdCAgICA9IG10MzUyX2F2ZXI3NzdfaW5pdCwKKwkucGxsX3NldCAgICAgICA9IG10MzUyX2F2ZXI3NzdfcGxsX3NldCwKK307CiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC03NzcsNyArODE0LDcgQEAKIAl0ZGE4MjkwX21zZy5idWYgPSB0ZGE4MjkwX29wZW47CiAJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmdGRhODI5MF9tc2csIDEpOwogCXJldHVybiByZXQ7Ci19OworfQogCiBzdGF0aWMgaW50IHBoaWxpcHNfdGlnZXJfZHZiX21vZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CkBAIC04MTMsNiArODUwLDExMCBAQAogCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGxpZmV2aWV3X3RyaW9fcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJaW50IHJldDsKKworCXJldCA9IHBoaWxpcHNfdGRhODI3eGFfcGxsX3NldCgweDYwLCBmZSwgcGFyYW1zKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxpZmV2aWV3X3RyaW9fZHZiX21vZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpZmV2aWV3X3RyaW9fYW5hbG9nX21vZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcGhpbGlwc190ZGE4Mjd4YV9wbGxfc2xlZXAoMHg2MCwgZmUpOworfQorCitzdGF0aWMgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyBsaWZldmlld190cmlvX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MDksCisJLmludmVydCAgICAgICAgPSAxLAorCS5pbnZlcnRfb2NsayAgID0gMCwKKwkueHRhbF9mcmVxICAgICA9IFREQTEwMDQ2X1hUQUxfMTZNLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX1REQTgyN1hfR1BMLAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8wNDUsCisJLnBsbF9pbml0ICAgICAgPSBsaWZldmlld190cmlvX2R2Yl9tb2RlLAorCS5wbGxfc2V0ICAgICAgID0gbGlmZXZpZXdfdHJpb19wbGxfc2V0LAorCS5wbGxfc2xlZXAgICAgID0gbGlmZXZpZXdfdHJpb19hbmFsb2dfbW9kZSwKKwkucmVxdWVzdF9maXJtd2FyZSA9IE5VTEwsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBhZHNfZHVvX3BsbF9zZXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwaGlsaXBzX3RkYTgyN3hhX3BsbF9zZXQoMHg2MSwgZmUsIHBhcmFtcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZHNfZHVvX2R2Yl9tb2RlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKKwkvKiByb3V0ZSBUREE4Mjc1YSBBR0MgaW5wdXQgdG8gdGhlIGNoYW5uZWwgZGVjb2RlciAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgMHg2MCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkc19kdW9fYW5hbG9nX21vZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmZS0+ZHZiLT5wcml2OworCS8qIHJvdXRlIFREQTgyNzVhIEFHQyBpbnB1dCB0byB0aGUgYW5hbG9nIElGIGNoaXAqLworCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMiwgMHgyMCk7CisJcGhpbGlwc190ZGE4Mjd4YV9wbGxfc2xlZXAoIDB4NjEsIGZlKTsKK30KKworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgYWRzX3RlY2hfZHVvX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MDgsCisJLmludmVydCAgICAgICAgPSAxLAorCS5pbnZlcnRfb2NsayAgID0gMCwKKwkueHRhbF9mcmVxICAgICA9IFREQTEwMDQ2X1hUQUxfMTZNLAorCS5hZ2NfY29uZmlnICAgID0gVERBMTAwNDZfQUdDX1REQTgyN1hfR1BMLAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8wNDUsCisJLnBsbF9pbml0ICAgICAgPSBhZHNfZHVvX2R2Yl9tb2RlLAorCS5wbGxfc2V0ICAgICAgID0gYWRzX2R1b19wbGxfc2V0LAorCS5wbGxfc2xlZXAgICAgID0gYWRzX2R1b19hbmFsb2dfbW9kZSwKKwkucmVxdWVzdF9maXJtd2FyZSA9IE5VTEwsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB0ZXZpb25fZHZiMjIwcmZfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJaW50IHJldDsKKwlyZXQgPSBwaGlsaXBzX3RkYTgyN3hhX3BsbF9zZXQoMHg2MCwgZmUsIHBhcmFtcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0ZXZpb25fZHZiMjIwcmZfcGxsX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRldmlvbl9kdmIyMjByZl9wbGxfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcGhpbGlwc190ZGE4Mjd4YV9wbGxfc2xlZXAoIDB4NjEsIGZlKTsKK30KKworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgdGV2aW9uX2R2YnQyMjByZl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDA4LAorCS5pbnZlcnQgICAgICAgID0gMSwKKwkuaW52ZXJ0X29jbGsgICA9IDAsCisJLnh0YWxfZnJlcSAgICAgPSBUREExMDA0Nl9YVEFMXzE2TSwKKwkuYWdjX2NvbmZpZyAgICA9IFREQTEwMDQ2X0FHQ19UREE4MjdYLAorCS5pZl9mcmVxICAgICAgID0gVERBMTAwNDZfRlJFUV8wNDUsCisJLnBsbF9pbml0ICAgICAgPSB0ZXZpb25fZHZiMjIwcmZfcGxsX2luaXQsCisJLnBsbF9zZXQgICAgICAgPSB0ZXZpb25fZHZiMjIwcmZfcGxsX3NldCwKKwkucGxsX3NsZWVwICAgICA9IHRldmlvbl9kdmIyMjByZl9wbGxfc2xlZXAsCisJLnJlcXVlc3RfZmlybXdhcmUgPSBOVUxMLAorfTsKKwogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtODIzLDYgKzk2NCwyMiBAQAogCS5wbGxfYWRkcmVzcyAgICAgID0gMHg2MSwKIAkucGxsX2Rlc2MgICAgICAgICA9ICZkdmJfcGxsX3RkaHUyLAogfTsKKworc3RhdGljIGludCBueHQyMDB4X3NldF9wbGxfaW5wdXQodTggKmJ1ZiwgaW50IGlucHV0KQoreworCWlmIChpbnB1dCkKKwkJYnVmWzNdIHw9IDB4MDg7CisJZWxzZQorCQlidWZbM10gJj0gfjB4MDg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbnh0MjAweF9jb25maWcga3dvcmxkYXRzYzExMCA9IHsKKwkuZGVtb2RfYWRkcmVzcyAgICA9IDB4MGEsCisJLnBsbF9hZGRyZXNzICAgICAgPSAweDYxLAorCS5wbGxfZGVzYyAgICAgICAgID0gJmR2Yl9wbGxfdHV2MTIzNmQsCisJLnNldF9wbGxfaW5wdXQgICAgPSBueHQyMDB4X3NldF9wbGxfaW5wdXQsCit9OwogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtODQ3LDYgKzEwMDQsMTIgQEAKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBtdDM1Ml9hdHRhY2goJnBpbm5hY2xlXzMwMGksCiAJCQkJCQkgJmRldi0+aTJjX2FkYXApOwogCQlicmVhazsKKworCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfNzc3OgorCQlwcmludGsoIiVzOiBhdmVydHYgNzc3IGR2YiBzZXR1cFxuIixkZXYtPm5hbWUpOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IG10MzUyX2F0dGFjaCgmYXZlcm1lZGlhXzc3NywKKwkJCQkJCSAmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9UREExMDA0WAogCWNhc2UgU0FBNzEzNF9CT0FSRF9NRDcxMzQ6CkBAIC04ODUsMTEgKzEwNDgsMzAgQEAKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJnBoaWxpcHNfdGlnZXJfY29uZmlnLAogCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDE6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZ0ZGE4Mjd4X2xpZmV2aWV3X2NvbmZpZywKKwkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJfVFJJTzoKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJmxpZmV2aWV3X3RyaW9fY29uZmlnLAorCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19EVU9fQ0FSREJVU19QVFYzMzE6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZhZHNfdGVjaF9kdW9fY29uZmlnLAorCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1RFVklPTl9EVkJUXzIyMFJGOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmdGV2aW9uX2R2YnQyMjByZl9jb25maWcsCisJCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlicmVhazsKICNlbmRpZgogI2lmZGVmIEhBVkVfTlhUMjAwWAogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQVZFUlRWSERfQTE4MDoKIAkJZGV2LT5kdmIuZnJvbnRlbmQgPSBueHQyMDB4X2F0dGFjaCgmYXZlcnR2aGRhMTgwLCAmZGV2LT5pMmNfYWRhcCk7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMDoKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBueHQyMDB4X2F0dGFjaCgma3dvcmxkYXRzYzExMCwgJmRldi0+aTJjX2FkYXApOworCQlicmVhazsKICNlbmRpZgogCWRlZmF1bHQ6CiAJCXByaW50aygiJXM6IEh1aD8gdW5rbm93biBEVkIgY2FyZD9cbiIsZGV2LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwppbmRleCBiZDRjMzg5Li4xZDk3MmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCkBAIC04OSw3ICs4OSw3IEBACiAKIAlkcHJpbnRrKCJvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKIAllcnIgPSAtRUJVU1k7Ci0JaWYgKGRvd25fdHJ5bG9jaygmZGV2LT5lbXByZXNzX3RzcS5sb2NrKSkKKwlpZiAoIW11dGV4X3RyeWxvY2soJmRldi0+ZW1wcmVzc190c3EubG9jaykpCiAJCWdvdG8gZG9uZTsKIAlpZiAoZGV2LT5lbXByZXNzX3VzZXJzKQogCQlnb3RvIGRvbmVfdXA7CkBAIC05OSw3ICs5OSw3IEBACiAJZXJyID0gMDsKIAogZG9uZV91cDoKLQl1cCgmZGV2LT5lbXByZXNzX3RzcS5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+ZW1wcmVzc190c3EubG9jayk7CiBkb25lOgogCXJldHVybiBlcnI7CiB9CkBAIC0xMTAsNyArMTEwLDcgQEAKIAogCWlmIChkZXYtPmVtcHJlc3NfdHNxLnN0cmVhbWluZykKIAkJdmlkZW9idWZfc3RyZWFtb2ZmKCZkZXYtPmVtcHJlc3NfdHNxKTsKLQlkb3duKCZkZXYtPmVtcHJlc3NfdHNxLmxvY2spOworCW11dGV4X2xvY2soJmRldi0+ZW1wcmVzc190c3EubG9jayk7CiAJaWYgKGRldi0+ZW1wcmVzc190c3EucmVhZGluZykKIAkJdmlkZW9idWZfcmVhZF9zdG9wKCZkZXYtPmVtcHJlc3NfdHNxKTsKIAl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmRldi0+ZW1wcmVzc190c3EpOwpAQCAtMTE5LDcgKzExOSw3IEBACiAJLyogc3RvcCB0aGUgZW5jb2RlciAqLwogCXRzX3Jlc2V0X2VuY29kZXIoZGV2KTsKIAotCXVwKCZkZXYtPmVtcHJlc3NfdHNxLmxvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5lbXByZXNzX3RzcS5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggODJkMjhjYi4uMTQyNmU0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC00Miw0ODUgKzQyLDYgQEAKICNkZWZpbmUgaTJjZHByaW50ayhmbXQsIGFyZy4uLikgICAgaWYgKGlyX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2lyOiAiIGZtdCwgaXItPmMubmFtZSAsICMjIGFyZykKIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgZmx5dmlkZW9fY29kZXNbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgICAxNSBdID0gS0VZX0tQMCwKLQlbICAgIDMgXSA9IEtFWV9LUDEsCi0JWyAgICA0IF0gPSBLRVlfS1AyLAotCVsgICAgNSBdID0gS0VZX0tQMywKLQlbICAgIDcgXSA9IEtFWV9LUDQsCi0JWyAgICA4IF0gPSBLRVlfS1A1LAotCVsgICAgOSBdID0gS0VZX0tQNiwKLQlbICAgMTEgXSA9IEtFWV9LUDcsCi0JWyAgIDEyIF0gPSBLRVlfS1A4LAotCVsgICAxMyBdID0gS0VZX0tQOSwKLQotCVsgICAxNCBdID0gS0VZX01PREUsICAgICAgICAgLy8gQWlyL0NhYmxlCi0JWyAgIDE3IF0gPSBLRVlfVklERU8sICAgICAgICAvLyBWaWRlbwotCVsgICAyMSBdID0gS0VZX0FVRElPLCAgICAgICAgLy8gQXVkaW8KLQlbICAgIDAgXSA9IEtFWV9QT1dFUiwgICAgICAgIC8vIFBvd2VyCi0JWyAgIDI0IF0gPSBLRVlfVFVORVIsICAgICAgICAvLyBBViBTb3VyY2UKLQlbICAgIDIgXSA9IEtFWV9aT09NLCAgICAgICAgIC8vIEZ1bGxzY3JlZW4KLQlbICAgMjYgXSA9IEtFWV9MQU5HVUFHRSwgICAgIC8vIFN0ZXJlbwotCVsgICAyNyBdID0gS0VZX01VVEUsICAgICAgICAgLy8gTXV0ZQotCVsgICAyMCBdID0gS0VZX1ZPTFVNRVVQLCAgICAgLy8gVm9sdW1lICsKLQlbICAgMjMgXSA9IEtFWV9WT0xVTUVET1dOLCAgIC8vIFZvbHVtZSAtCi0JWyAgIDE4IF0gPSBLRVlfQ0hBTk5FTFVQLCAgICAvLyBDaGFubmVsICsKLQlbICAgMTkgXSA9IEtFWV9DSEFOTkVMRE9XTiwgIC8vIENoYW5uZWwgLQotCVsgICAgNiBdID0gS0VZX0FHQUlOLCAgICAgICAgLy8gUmVjYWxsCi0JWyAgIDE2IF0gPSBLRVlfRU5URVIsICAgICAgLy8gRW50ZXIKLX07Ci0KLQotc3RhdGljIElSX0tFWVRBQl9UWVBFIGNpbmVyZ3lfY29kZXNbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgICAgMCBdID0gS0VZX0tQMCwKLQlbICAgIDEgXSA9IEtFWV9LUDEsCi0JWyAgICAyIF0gPSBLRVlfS1AyLAotCVsgICAgMyBdID0gS0VZX0tQMywKLQlbICAgIDQgXSA9IEtFWV9LUDQsCi0JWyAgICA1IF0gPSBLRVlfS1A1LAotCVsgICAgNiBdID0gS0VZX0tQNiwKLQlbICAgIDcgXSA9IEtFWV9LUDcsCi0JWyAgICA4IF0gPSBLRVlfS1A4LAotCVsgICAgOSBdID0gS0VZX0tQOSwKLQotCVsgMHgwYSBdID0gS0VZX1BPV0VSLAotCVsgMHgwYiBdID0gS0VZX1BST0cxLCAgICAgICAgICAgLy8gYXBwCi0JWyAweDBjIF0gPSBLRVlfWk9PTSwgICAgICAgICAgICAvLyB6b29tL2Z1bGxzY3JlZW4KLQlbIDB4MGQgXSA9IEtFWV9DSEFOTkVMVVAsICAgICAgIC8vIGNoYW5uZWwKLQlbIDB4MGUgXSA9IEtFWV9DSEFOTkVMRE9XTiwgICAgIC8vIGNoYW5uZWwtCi0JWyAweDBmIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDEwIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTEgXSA9IEtFWV9UVU5FUiwgICAgICAgICAgIC8vIEFWCi0JWyAweDEyIF0gPSBLRVlfTlVNTE9DSywgICAgICAgICAvLyAtLy0tCi0JWyAweDEzIF0gPSBLRVlfQVVESU8sICAgICAgICAgICAvLyBhdWRpbwotCVsgMHgxNCBdID0gS0VZX01VVEUsCi0JWyAweDE1IF0gPSBLRVlfVVAsCi0JWyAweDE2IF0gPSBLRVlfRE9XTiwKLQlbIDB4MTcgXSA9IEtFWV9MRUZULAotCVsgMHgxOCBdID0gS0VZX1JJR0hULAotCVsgMHgxOSBdID0gQlROX0xFRlQsCi0JWyAweDFhIF0gPSBCVE5fUklHSFQsCi0JWyAweDFiIF0gPSBLRVlfV1dXLCAgICAgICAgICAgICAvLyB0ZXh0Ci0JWyAweDFjIF0gPSBLRVlfUkVXSU5ELAotCVsgMHgxZCBdID0gS0VZX0ZPUldBUkQsCi0JWyAweDFlIF0gPSBLRVlfUkVDT1JELAotCVsgMHgxZiBdID0gS0VZX1BMQVksCi0JWyAweDIwIF0gPSBLRVlfUFJFVklPVVNTT05HLAotCVsgMHgyMSBdID0gS0VZX05FWFRTT05HLAotCVsgMHgyMiBdID0gS0VZX1BBVVNFLAotCVsgMHgyMyBdID0gS0VZX1NUT1AsCi19OwotCi0vKiBBbGZvbnMgR2VzZXIgPGEuZ2VzZXJAY294Lm5ldD4KLSAqIHVwZGF0ZXMgZnJvbSBKb2IgRC4gUi4gQm9yZ2VzIDxqb2JkcmJAaWcuY29tLmJyPiAqLwotc3RhdGljIElSX0tFWVRBQl9UWVBFIGV6dHZfY29kZXNbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMTggXSA9IEtFWV9QT1dFUiwKLQlbICAxIF0gPSBLRVlfVFYsICAgICAgICAgICAgIC8vIERWUgotCVsgMjEgXSA9IEtFWV9EVkQsICAgICAgICAgICAgLy8gRFZECi0JWyAyMyBdID0gS0VZX0FVRElPLCAgICAgICAgICAvLyBtdXNpYwotCQkJCSAgICAgLy8gRFZSIG1vZGUgLyBEVkQgbW9kZSAvIG11c2ljIG1vZGUKLQotCVsgMjcgXSA9IEtFWV9NVVRFLCAgICAgICAgICAgLy8gbXV0ZQotCVsgIDIgXSA9IEtFWV9MQU5HVUFHRSwgICAgICAgLy8gTVRTL1NBUCAvIGF1ZGlvIC8gYXV0b3NlZWsKLQlbIDMwIF0gPSBLRVlfU1VCVElUTEUsICAgICAgIC8vIGNsb3NlZCBjYXB0aW9uaW5nIC8gc3VidGl0bGUgLyBzZWVrCi0JWyAyMiBdID0gS0VZX1pPT00sICAgICAgICAgICAvLyBmdWxsIHNjcmVlbgotCVsgMjggXSA9IEtFWV9WSURFTywgICAgICAgICAgLy8gdmlkZW8gc291cmNlIC8gZWplY3QgLyBkZWxhbGwKLQlbIDI5IF0gPSBLRVlfUkVTVEFSVCwgICAgICAgIC8vIHBsYXliYWNrIC8gYW5nbGUgLyBkZWwKLQlbIDQ3IF0gPSBLRVlfU0VBUkNILCAgICAgICAgIC8vIHNjYW4gLyBtZW51IC8gcGxheWxpc3QKLQlbIDQ4IF0gPSBLRVlfQ0hBTk5FTCwgICAgICAgIC8vIENIIHN1cmZpbmcgLyBib29rbWFyayAvIG1lbW8KLQotCVsgNDkgXSA9IEtFWV9IRUxQLCAgICAgICAgICAgLy8gaGVscAotCVsgNTAgXSA9IEtFWV9NT0RFLCAgICAgICAgICAgLy8gbnVtL21lbW8KLQlbIDUxIF0gPSBLRVlfRVNDLCAgICAgICAgICAgIC8vIGNhbmNlbAotCi0JWyAxMiBdID0gS0VZX1VQLCAgICAgICAgICAgICAvLyB1cAotCVsgMTYgXSA9IEtFWV9ET1dOLCAgICAgICAgICAgLy8gZG93bgotCVsgIDggXSA9IEtFWV9MRUZULCAgICAgICAgICAgLy8gbGVmdAotCVsgIDQgXSA9IEtFWV9SSUdIVCwgICAgICAgICAgLy8gcmlnaHQKLQlbICAzIF0gPSBLRVlfU0VMRUNULCAgICAgICAgIC8vIHNlbGVjdAotCi0JWyAzMSBdID0gS0VZX1JFV0lORCwgICAgICAgICAvLyByZXdpbmQKLQlbIDMyIF0gPSBLRVlfUExBWVBBVVNFLCAgICAgIC8vIHBsYXkvcGF1c2UKLQlbIDQxIF0gPSBLRVlfRk9SV0FSRCwgICAgICAgIC8vIGZvcndhcmQKLQlbIDIwIF0gPSBLRVlfQUdBSU4sICAgICAgICAgIC8vIHJlcGVhdAotCVsgNDMgXSA9IEtFWV9SRUNPUkQsICAgICAgICAgLy8gcmVjb3JkaW5nCi0JWyA0NCBdID0gS0VZX1NUT1AsICAgICAgICAgICAvLyBzdG9wCi0JWyA0NSBdID0gS0VZX1BMQVksICAgICAgICAgICAvLyBwbGF5Ci0JWyA0NiBdID0gS0VZX1NIVUZGTEUsICAgICAgICAvLyBzbmFwc2hvdCAvIHNodWZmbGUKLQotCVsgIDAgXSA9IEtFWV9LUDAsCi0JWyAgNSBdID0gS0VZX0tQMSwKLQlbICA2IF0gPSBLRVlfS1AyLAotCVsgIDcgXSA9IEtFWV9LUDMsCi0JWyAgOSBdID0gS0VZX0tQNCwKLQlbIDEwIF0gPSBLRVlfS1A1LAotCVsgMTEgXSA9IEtFWV9LUDYsCi0JWyAxMyBdID0gS0VZX0tQNywKLQlbIDE0IF0gPSBLRVlfS1A4LAotCVsgMTUgXSA9IEtFWV9LUDksCi0KLQlbIDQyIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAxNyBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAyNCBdID0gS0VZX0NIQU5ORUxVUCwgICAgICAvLyBDSC50cmFja2luZyB1cAotCVsgMjUgXSA9IEtFWV9DSEFOTkVMRE9XTiwgICAgLy8gQ0gudHJhY2tpbmcgZG93bgotCi0JWyAxOSBdID0gS0VZX0tQRU5URVIsICAgICAgICAvLyBlbnRlcgotCVsgMzMgXSA9IEtFWV9LUERPVCwgICAgICAgICAgLy8gLiAoZGVjaW1hbCBkb3QpCi19OwotCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgYXZhY3NzbWFydF9jb2Rlc1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0JWyAzMCBdID0gS0VZX1BPV0VSLAkJLy8gcG93ZXIKLQlbIDI4IF0gPSBLRVlfU0VBUkNILAkJLy8gc2NhbgotCVsgIDcgXSA9IEtFWV9TRUxFQ1QsCQkvLyBzb3VyY2UKLQotCVsgMjIgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDIwIF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDMxIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMjMgXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbIDI0IF0gPSBLRVlfTVVURSwKLQotCVsgIDIgXSA9IEtFWV9LUDAsCi0JWyAgMSBdID0gS0VZX0tQMSwKLQlbIDExIF0gPSBLRVlfS1AyLAotCVsgMjcgXSA9IEtFWV9LUDMsCi0JWyAgNSBdID0gS0VZX0tQNCwKLQlbICA5IF0gPSBLRVlfS1A1LAotCVsgMjEgXSA9IEtFWV9LUDYsCi0JWyAgNiBdID0gS0VZX0tQNywKLQlbIDEwIF0gPSBLRVlfS1A4LAotCVsgMTggXSA9IEtFWV9LUDksCi0JWyAxNiBdID0gS0VZX0tQRE9ULAotCi0JWyAgMyBdID0gS0VZX1RVTkVSLAkJLy8gdHYvZm0KLQlbICA0IF0gPSBLRVlfUkVXSU5ELAkJLy8gZm0gdHVuaW5nIGxlZnQgb3IgZnVuY3Rpb24gbGVmdAotCVsgMTIgXSA9IEtFWV9GT1JXQVJELAkJLy8gZm0gdHVuaW5nIHJpZ2h0IG9yIGZ1bmN0aW9uIHJpZ2h0Ci0KLQlbICAwIF0gPSBLRVlfUkVDT1JELAotCVsgIDggXSA9IEtFWV9TVE9QLAotCVsgMTcgXSA9IEtFWV9QTEFZLAotCi0JWyAyNSBdID0gS0VZX1pPT00sCi0JWyAxNCBdID0gS0VZX01FTlUsCQkvLyBmdW5jdGlvbgotCVsgMTkgXSA9IEtFWV9BR0FJTiwJCS8vIHJlY2FsbAotCVsgMjkgXSA9IEtFWV9SRVNUQVJULAkJLy8gcmVzZXQKLQlbIDI2IF0gPSBLRVlfU0hVRkZMRSwJCS8vIHNuYXBzaG90L3NodWZmbGUKLQotLy8gRklYTUUKLQlbIDEzIF0gPSBLRVlfRjIxLAkJLy8gbXRzCi0JWyAxNSBdID0gS0VZX0YyMiwJCS8vIG1pbgotfTsKLQotLyogQWxleCBIZXJtYW5uIDxnYWFmQGdteC5uZXQ+ICovCi1zdGF0aWMgSVJfS0VZVEFCX1RZUEUgbWQyODE5X2NvZGVzW0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDQwIF0gPSBLRVlfS1AxLAotCVsgMjQgXSA9IEtFWV9LUDIsCi0JWyA1NiBdID0gS0VZX0tQMywKLQlbIDM2IF0gPSBLRVlfS1A0LAotCVsgMjAgXSA9IEtFWV9LUDUsCi0JWyA1MiBdID0gS0VZX0tQNiwKLQlbIDQ0IF0gPSBLRVlfS1A3LAotCVsgMjggXSA9IEtFWV9LUDgsCi0JWyA2MCBdID0gS0VZX0tQOSwKLQlbIDM0IF0gPSBLRVlfS1AwLAotCi0JWyAzMiBdID0gS0VZX1RWLAkJLy8gVFYvRk0KLQlbIDE2IF0gPSBLRVlfQ0QsCQkvLyBDRAotCVsgNDggXSA9IEtFWV9URVhULAkJLy8gVEVMRVRFWFQKLQlbICAwIF0gPSBLRVlfUE9XRVIsCQkvLyBQT1dFUgotCi0JWyAgOCBdID0gS0VZX1ZJREVPLAkJLy8gVklERU8KLQlbICA0IF0gPSBLRVlfQVVESU8sCQkvLyBBVURJTwotCVsgMTIgXSA9IEtFWV9aT09NLAkJLy8gRlVMTCBTQ1JFRU4KLQotCVsgMTggXSA9IEtFWV9TVUJUSVRMRSwJCS8vIERJU1BMQVkJLSA/Pz8KLQlbIDUwIF0gPSBLRVlfUkVXSU5ELAkJLy8gTE9PUAkJLSA/Pz8KLQlbICAyIF0gPSBLRVlfUFJJTlQsCQkvLyBQUkVWSUVXCS0gPz8/Ci0KLQlbIDQyIF0gPSBLRVlfU0VBUkNILAkJLy8gQVVUT1NDQU4KLQlbIDI2IF0gPSBLRVlfU0xFRVAsCQkvLyBGUkVFWkUJLSA/Pz8KLQlbIDU4IF0gPSBLRVlfU0hVRkZMRSwJCS8vIFNOQVBTSE9UCS0gPz8/Ci0JWyAxMCBdID0gS0VZX01VVEUsCQkvLyBNVVRFCi0KLQlbIDM4IF0gPSBLRVlfUkVDT1JELAkJLy8gUkVDT1JECi0JWyAyMiBdID0gS0VZX1BBVVNFLAkJLy8gUEFVU0UKLQlbIDU0IF0gPSBLRVlfU1RPUCwJCS8vIFNUT1AKLQlbICA2IF0gPSBLRVlfUExBWSwJCS8vIFBMQVkKLQotCVsgNDYgXSA9IEtFWV9SRUQsCQkvLyA8UkVEPgotCVsgMzMgXSA9IEtFWV9HUkVFTiwJCS8vIDxHUkVFTj4KLQlbIDE0IF0gPSBLRVlfWUVMTE9XLAkJLy8gPFlFTExPVz4KLQlbICAxIF0gPSBLRVlfQkxVRSwJCS8vIDxCTFVFPgotCi0JWyAzMCBdID0gS0VZX1ZPTFVNRURPV04sCS8vIFZPTFVNRS0KLQlbIDYyIF0gPSBLRVlfVk9MVU1FVVAsCQkvLyBWT0xVTUUrCi0JWyAxNyBdID0gS0VZX0NIQU5ORUxET1dOLAkvLyBDSEFOTkVML1BBR0UtCi0JWyA0OSBdID0gS0VZX0NIQU5ORUxVUAkJLy8gQ0hBTk5FTC9QQUdFKwotfTsKLQotc3RhdGljIElSX0tFWVRBQl9UWVBFIHZpZGVvbWF0ZV90dl9wdnJfY29kZXNbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgMjAgXSA9IEtFWV9NVVRFLAotCVsgMzYgXSA9IEtFWV9aT09NLAotCi0JWyAgMSBdID0gS0VZX0RWRCwKLQlbIDM1IF0gPSBLRVlfUkFESU8sCi0JWyAgMCBdID0gS0VZX1RWLAotCi0JWyAxMCBdID0gS0VZX1JFV0lORCwKLQlbICA4IF0gPSBLRVlfUExBWVBBVVNFLAotCVsgMTUgXSA9IEtFWV9GT1JXQVJELAotCi0JWyAgMiBdID0gS0VZX1BSRVZJT1VTLAotCVsgIDcgXSA9IEtFWV9TVE9QLAotCVsgIDYgXSA9IEtFWV9ORVhULAotCi0JWyAxMiBdID0gS0VZX1VQLAotCVsgMTQgXSA9IEtFWV9ET1dOLAotCVsgMTEgXSA9IEtFWV9MRUZULAotCVsgMTMgXSA9IEtFWV9SSUdIVCwKLQlbIDE3IF0gPSBLRVlfT0ssCi0KLQlbICAzIF0gPSBLRVlfTUVOVSwKLQlbICA5IF0gPSBLRVlfU0VUVVAsCi0JWyAgNSBdID0gS0VZX1ZJREVPLAotCVsgMzQgXSA9IEtFWV9DSEFOTkVMLAotCi0JWyAxOCBdID0gS0VZX1ZPTFVNRVVQLAotCVsgMjEgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMTYgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAxOSBdID0gS0VZX0NIQU5ORUxET1dOLAotCi0JWyAgNCBdID0gS0VZX1JFQ09SRCwKLQotCVsgMjIgXSA9IEtFWV9LUDEsCi0JWyAyMyBdID0gS0VZX0tQMiwKLQlbIDI0IF0gPSBLRVlfS1AzLAotCVsgMjUgXSA9IEtFWV9LUDQsCi0JWyAyNiBdID0gS0VZX0tQNSwKLQlbIDI3IF0gPSBLRVlfS1A2LAotCVsgMjggXSA9IEtFWV9LUDcsCi0JWyAyOSBdID0gS0VZX0tQOCwKLQlbIDMwIF0gPSBLRVlfS1A5LAotCVsgMzEgXSA9IEtFWV9LUDAsCi0KLQlbIDMyIF0gPSBLRVlfTEFOR1VBR0UsCi0JWyAzMyBdID0gS0VZX1NMRUVQLAotfTsKLQotLyogTWljaGFlbCBUb2thcmV2IDxtanRAdGxzLm1zay5ydT4KLSAgIGh0dHA6Ly93d3cuY29ycGl0LnJ1L21qdC9iZWhvbGRUVi9yZW1vdGVfY29udHJvbC5qcGcKLSAgIGtleXRhYmxlIGlzIHVzZWQgYnkgTUFOTEkgTVRWMDBbMTJdIGFuZCBCZWhvbGRUViA0MFsxM10gYXQKLSAgIGxlYXN0LCBhbmQgcHJvYmFibHkgb3RoZXIgY2FyZHMgdG9vLgotICAgVGhlICJhc2NpaS1hcnQgcGljdHVyZSIgYmVsb3cgKGluIGNvbW1lbnRzLCBmaXJzdCByb3cKLSAgIGlzIHRoZSBrZXljb2RlIGluIGhleCwgYW5kIHN1YnNlcXVlbnQgcm93KHMpIHNob3dzCi0gICB0aGUgYnV0dG9uIGxhYmVscyAoc2V2ZXJhbCB2YXJpYW50cyB3aGVuIGFwcHJvcHJpYXRlKQotICAgaGVscHMgdG8gZGVzY2lkZSB3aGljaCBrZXljb2RlcyB0byBhc3NpZ24gdG8gdGhlIGJ1dHRvbnMuCi0gKi8KLXN0YXRpYyBJUl9LRVlUQUJfVFlQRSBtYW5saV9jb2Rlc1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0KLQkvKiAgMHgxYyAgICAgICAgICAgIDB4MTIgICoKLQkgKiBGVU5DVElPTiAgICAgICAgIFBPV0VSICoKLQkgKiAgIEZNICAgICAgICAgICAgICAofCkgICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDFjIF0gPSBLRVlfUkFESU8sCS8qWFhYKi8KLQlbIDB4MTIgXSA9IEtFWV9QT1dFUiwKLQotCS8qICAweDAxICAgIDB4MDIgICAgMHgwMyAgKgotCSAqICAgMSAgICAgICAyICAgICAgIDMgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgotCSAqICAweDA0ICAgIDB4MDUgICAgMHgwNiAgKgotCSAqICAgNCAgICAgICA1ICAgICAgIDYgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgotCSAqICAweDA3ICAgIDB4MDggICAgMHgwOSAgKgotCSAqICAgNyAgICAgICA4ICAgICAgIDkgICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlbIDB4MDEgXSA9IEtFWV9LUDEsCi0JWyAweDAyIF0gPSBLRVlfS1AyLAotCVsgMHgwMyBdID0gS0VZX0tQMywKLQlbIDB4MDQgXSA9IEtFWV9LUDQsCi0JWyAweDA1IF0gPSBLRVlfS1A1LAotCVsgMHgwNiBdID0gS0VZX0tQNiwKLQlbIDB4MDcgXSA9IEtFWV9LUDcsCi0JWyAweDA4IF0gPSBLRVlfS1A4LAotCVsgMHgwOSBdID0gS0VZX0tQOSwKLQotCS8qICAweDBhICAgIDB4MDAgICAgMHgxNyAgKgotCSAqIFJFQ0FMTCAgICAwICAgICAgKzEwMCAgKgotCSAqICAgICAgICAgICAgICAgICAgUExVUyAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlbIDB4MGEgXSA9IEtFWV9BR0FJTiwJLypYWFggS0VZX1JFV0lORD8gKi8KLQlbIDB4MDAgXSA9IEtFWV9LUDAsCi0JWyAweDE3IF0gPSBLRVlfRElHSVRTLAkvKlhYWCovCi0KLQkvKiAgMHgxNCAgICAgICAgICAgIDB4MTAgICoKLQkgKiAgTUVOVSAgICAgICAgICAgIElORk8gICoKLQkgKiAgT1NEICAgICAgICAgICAgICAgICAgICovCi0JWyAweDE0IF0gPSBLRVlfTUVOVSwKLQlbIDB4MTAgXSA9IEtFWV9JTkZPLAotCi0JLyogICAgICAgICAgMHgwYiAgICAgICAgICAqCi0JICogICAgICAgICAgIFVwICAgICAgICAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogIDB4MTggICAgMHgxNiAgICAweDBjICAqCi0JICogIExlZnQgICAgIE9rICAgICBSaWdodCAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqCi0JICogICAgICAgICAweDAxNSAgICAgICAgICAqCi0JICogICAgICAgICBEb3duICAgICAgICAgICAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAqLwotCVsgMHgwYiBdID0gS0VZX1VQLAkvKlhYWCBLRVlfU0NST0xMVVA/ICovCi0JWyAweDE4IF0gPSBLRVlfTEVGVCwJLypYWFggS0VZX0JBQ0s/ICovCi0JWyAweDE2IF0gPSBLRVlfT0ssCS8qWFhYIEtFWV9TRUxFQ1Q/IEtFWV9FTlRFUj8gKi8KLQlbIDB4MGMgXSA9IEtFWV9SSUdIVCwJLypYWFggS0VZX0ZPUldBUkQ/ICovCi0JWyAweDE1IF0gPSBLRVlfRE9XTiwJLypYWFggS0VZX1NDUk9MTERPV04/ICovCi0KLQkvKiAgMHgxMSAgICAgICAgICAgIDB4MGQgICoKLQkgKiAgVFYvQVYgICAgICAgICAgIE1PREUgICoKLQkgKiAgU09VUkNFICAgICAgICAgU1RFUkVPICoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDExIF0gPSBLRVlfVFYsCS8qWFhYKi8KLQlbIDB4MGQgXSA9IEtFWV9NT0RFLAkvKlhYWCB0aGVyZSdzIG5vIEtFWV9TVEVSRU8gKi8KLQotCS8qICAweDBmICAgIDB4MWIgICAgMHgxYSAgKgotCSAqICBBVURJTyAgIFZvbCsgICAgQ2hhbisgKgotCSAqICAgICAgICBUSU1FU0hJRlQ/Pz8gICAgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKgotCSAqICAweDBlICAgIDB4MWYgICAgMHgxZSAgKgotCSAqICBTTEVFUCAgIFZvbC0gICAgQ2hhbi0gKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlbIDB4MGYgXSA9IEtFWV9BVURJTywKLQlbIDB4MWIgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4MWEgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDBlIF0gPSBLRVlfU0xFRVAsCS8qWFhYIG1heWJlIEtFWV9QQVVTRSAqLwotCVsgMHgxZiBdID0gS0VZX1ZPTFVNRURPV04sCi0JWyAweDFlIF0gPSBLRVlfQ0hBTk5FTERPV04sCi0KLQkvKiAgICAgICAgIDB4MTMgICAgIDB4MTkgICoKLQkgKiAgICAgICAgIE1VVEUgICBTTkFQU0hPVCoKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICovCi0JWyAweDEzIF0gPSBLRVlfTVVURSwKLQlbIDB4MTkgXSA9IEtFWV9SRUNPUkQsCS8qWFhYKi8KLQotCS8vIDB4MWQgdW51c2VkID8KLX07Ci0KLQotLyogTWlrZSBCYWlrb3YgPG1pa2VAYmFpa292LmNvbT4gKi8KLXN0YXRpYyBJUl9LRVlUQUJfVFlQRSBnb3R2aWV3NzEzNV9jb2Rlc1tJUl9LRVlUQUJfU0laRV0gPSB7Ci0KLQlbIDMzIF0gPSBLRVlfUE9XRVIsCi0JWyAxMDVdID0gS0VZX1RWLAotCVsgNTEgXSA9IEtFWV9LUDAsCi0JWyA4MSBdID0gS0VZX0tQMSwKLQlbIDQ5IF0gPSBLRVlfS1AyLAotCVsgMTEzXSA9IEtFWV9LUDMsCi0JWyA1OSBdID0gS0VZX0tQNCwKLQlbIDg4IF0gPSBLRVlfS1A1LAotCVsgNjUgXSA9IEtFWV9LUDYsCi0JWyA3MiBdID0gS0VZX0tQNywKLQlbIDQ4IF0gPSBLRVlfS1A4LAotCVsgODMgXSA9IEtFWV9LUDksCi0JWyAxMTVdID0gS0VZX0FHQUlOLCAvKiBMT09QICovCi0JWyAxMCBdID0gS0VZX0FVRElPLAotCVsgOTcgXSA9IEtFWV9QUklOVCwgLyogUFJFVklFVyAqLwotCVsgMTIyXSA9IEtFWV9WSURFTywKLQlbIDMyIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgNjQgXSA9IEtFWV9DSEFOTkVMRE9XTiwKLQlbIDI0IF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDgwIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAxNiBdID0gS0VZX01VVEUsCi0JWyA3NCBdID0gS0VZX1NFQVJDSCwKLQlbIDEyM10gPSBLRVlfU0hVRkZMRSwgLyogU05BUFNIT1QgKi8KLQlbIDM0IF0gPSBLRVlfUkVDT1JELAotCVsgOTggXSA9IEtFWV9TVE9QLAotCVsgMTIwXSA9IEtFWV9QTEFZLAotCVsgNTcgXSA9IEtFWV9SRVdJTkQsCi0JWyA4OSBdID0gS0VZX1BBVVNFLAotCVsgMjUgXSA9IEtFWV9GT1JXQVJELAotCVsgIDkgXSA9IEtFWV9aT09NLAotCi0JWyA4MiBdID0gS0VZX0YyMSwgLyogTElWRSBUSU1FU0hJRlQgKi8KLQlbIDI2IF0gPSBLRVlfRjIyLCAvKiBNSU4gVElNRVNISUZUICovCi0JWyA1OCBdID0gS0VZX0YyMywgLyogVElNRVNISUZUICovCi0JWyAxMTJdID0gS0VZX0YyNCwgLyogTk9STUFMIFRJTUVTSElGVCAqLwotfTsKLQotc3RhdGljIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3B1cnBsZXR2W0lSX0tFWVRBQl9TSVpFXSA9IHsKLQlbIDB4MyAgXSA9IEtFWV9QT1dFUiwKLQlbIDB4NmYgXSA9IEtFWV9NVVRFLAotCVsgMHgxMCBdID0gS0VZX0JBQ0tTUEFDRSwgICAgICAgLyogUmVjYWxsICovCi0KLQlbIDB4MTEgXSA9IEtFWV9LUDAsCi0JWyAweDQgIF0gPSBLRVlfS1AxLAotCVsgMHg1ICBdID0gS0VZX0tQMiwKLQlbIDB4NiAgXSA9IEtFWV9LUDMsCi0JWyAweDggIF0gPSBLRVlfS1A0LAotCVsgMHg5ICBdID0gS0VZX0tQNSwKLQlbIDB4YSAgXSA9IEtFWV9LUDYsCi0JWyAweGMgIF0gPSBLRVlfS1A3LAotCVsgMHhkICBdID0gS0VZX0tQOCwKLQlbIDB4ZSAgXSA9IEtFWV9LUDksCi0JWyAweDEyIF0gPSBLRVlfS1BET1QsICAgICAgICAgICAvKiAxMDArICovCi0KLQlbIDB4NyAgXSA9IEtFWV9WT0xVTUVVUCwKLQlbIDB4YiAgXSA9IEtFWV9WT0xVTUVET1dOLAotCVsgMHgxYSBdID0gS0VZX0tQUExVUywKLQlbIDB4MTggXSA9IEtFWV9LUE1JTlVTLAotCVsgMHgxNSBdID0gS0VZX1VQLAotCVsgMHgxZCBdID0gS0VZX0RPV04sCi0JWyAweGYgIF0gPSBLRVlfQ0hBTk5FTFVQLAotCVsgMHgxMyBdID0gS0VZX0NIQU5ORUxET1dOLAotCVsgMHg0OCBdID0gS0VZX1pPT00sCi0KLQlbIDB4MWIgXSA9IEtFWV9WSURFTywgICAgICAgICAgIC8qIFZpZGVvIHNvdXJjZSAqLwotCVsgMHg0OSBdID0gS0VZX0xBTkdVQUdFLCAgICAgICAgLyogTVRTIFNlbGVjdCAqLwotCVsgMHgxOSBdID0gS0VZX1NFQVJDSCwgICAgICAgICAgLyogQXV0byBTY2FuICovCi0KLQlbIDB4NGIgXSA9IEtFWV9SRUNPUkQsCi0JWyAweDQ2IF0gPSBLRVlfUExBWSwKLQlbIDB4NDUgXSA9IEtFWV9QQVVTRSwgICAgICAgICAgIC8qIFBhdXNlICovCi0JWyAweDQ0IF0gPSBLRVlfU1RPUCwKLQlbIDB4NDAgXSA9IEtFWV9GT1JXQVJELCAgICAgICAgIC8qIEZvcndhcmQgPyAqLwotCVsgMHg0MiBdID0gS0VZX1JFV0lORCwgICAgICAgICAgLyogQmFja3dhcmQgPyAqLwotCi19OwotCi0vKiBNYXBwaW5nIGZvciB0aGUgMjgga2V5IHJlbW90ZSBjb250cm9sIGFzIHNlZW4gYXQKLSAgIGh0dHA6Ly93d3cuc2VkbmFjb21wdXRlci5jb20vcGhvdG8vY2FyZGJ1cy10di5qcGcKLSAgIFBhdmVsIE1paGF5bG92IDxiaW5AYmFzaC5pbmZvPiAqLwotc3RhdGljIElSX0tFWVRBQl9UWVBFIHBjdHZfc2VkbmFfY29kZXNbSVJfS0VZVEFCX1NJWkVdID0gewotCVsgICAgMCBdID0gS0VZX0tQMCwKLQlbICAgIDEgXSA9IEtFWV9LUDEsCi0JWyAgICAyIF0gPSBLRVlfS1AyLAotCVsgICAgMyBdID0gS0VZX0tQMywKLQlbICAgIDQgXSA9IEtFWV9LUDQsCi0JWyAgICA1IF0gPSBLRVlfS1A1LAotCVsgICAgNiBdID0gS0VZX0tQNiwKLQlbICAgIDcgXSA9IEtFWV9LUDcsCi0JWyAgICA4IF0gPSBLRVlfS1A4LAotCVsgICAgOSBdID0gS0VZX0tQOSwKLQotCVsgMHgwYSBdID0gS0VZX0FHQUlOLCAgICAgICAgICAvKiBSZWNhbGwgKi8KLQlbIDB4MGIgXSA9IEtFWV9DSEFOTkVMVVAsCi0JWyAweDBjIF0gPSBLRVlfVk9MVU1FVVAsCi0JWyAweDBkIF0gPSBLRVlfTU9ERSwgICAgICAgICAgIC8qIFN0ZXJlbyAqLwotCVsgMHgwZSBdID0gS0VZX1NUT1AsCi0JWyAweDBmIF0gPSBLRVlfUFJFVklPVVNTT05HLAotCVsgMHgxMCBdID0gS0VZX1pPT00sCi0JWyAweDExIF0gPSBLRVlfVFVORVIsICAgICAgICAgIC8qIFNvdXJjZSAqLwotCVsgMHgxMiBdID0gS0VZX1BPV0VSLAotCVsgMHgxMyBdID0gS0VZX01VVEUsCi0JWyAweDE1IF0gPSBLRVlfQ0hBTk5FTERPV04sCi0JWyAweDE4IF0gPSBLRVlfVk9MVU1FRE9XTiwKLQlbIDB4MTkgXSA9IEtFWV9TSFVGRkxFLCAgICAgICAgLyogU25hcHNob3QgKi8KLQlbIDB4MWEgXSA9IEtFWV9ORVhUU09ORywKLQlbIDB4MWIgXSA9IEtFWV9URVhULCAgICAgICAgICAgLyogVGltZSBTaGlmdCAqLwotCVsgMHgxYyBdID0gS0VZX1JBRElPLCAgICAgICAgICAvKiBGTSBSYWRpbyAqLwotCVsgMHgxZCBdID0gS0VZX1JFQ09SRCwKLQlbIDB4MWUgXSA9IEtFWV9QQVVTRSwKLX07Ci0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gR1BJTyBnZW5lcmljIGtleWNvZGUgYnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGJ1aWxkX2tleShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKQEAgLTYyOCwyNyArMTQ5LDI3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWVZJREVPMzAwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9GTToKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZVFZQTEFUSU5VTV9NSU5JMjoKLQkJaXJfY29kZXMgICAgID0gZmx5dmlkZW9fY29kZXM7CisJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2ZseXZpZGVvOwogCQltYXNrX2tleWNvZGUgPSAweEVDMDAwMDA7CiAJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k0MDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k2MDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1k2MDBfTUszOgotCQlpcl9jb2RlcyAgICAgPSBjaW5lcmd5X2NvZGVzOworCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19jaW5lcmd5OwogCQltYXNrX2tleWNvZGUgPSAweDAwMDAzZjsKIAkJbWFza19rZXl1cCAgID0gMHgwNDAwMDA7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9FQ1NfVFZQM1hQOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9FQ1NfVFZQM1hQXzRDQjU6Ci0JCWlyX2NvZGVzICAgICA9IGV6dHZfY29kZXM7CisJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2V6dHY7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMTdjOwogCQltYXNrX2tleXVwICAgPSAweDAwMDAwMjsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfWFBFUlQ6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWQUNTU01BUlRUVjoKLQkJaXJfY29kZXMgICAgID0gYXZhY3NzbWFydF9jb2RlczsKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfcGl4ZWx2aWV3OwogCQltYXNrX2tleWNvZGUgPSAweDAwMDAxRjsKIAkJbWFza19rZXl1cCAgID0gMHgwMDAwMjA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwpAQCAtNjYwLDcgKzE4MSw3IEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9TVFVESU9fMzA1OgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfU1RVRElPXzMwNzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0dPXzAwN19GTToKLQkJaXJfY29kZXMgICAgID0gbWQyODE5X2NvZGVzOworCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19hdmVybWVkaWE7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwN0M4OwogCQltYXNrX2tleWRvd24gPSAweDAwMDAxMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCkBAIC02NjksNyArMTkwLDcgQEAKIAkJc2FhX3NldGIoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCwgMHg0KTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9URVJNSU5BVE9SOgotCQlpcl9jb2RlcyAgICAgPSBhdmFjc3NtYXJ0X2NvZGVzOworCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19waXhlbHZpZXc7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMDFmOwogCQltYXNrX2tleXVwICAgPSAweDAwMDA2MDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCkBAIC02NzcsMTkgKzE5OCwxOSBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9NQU5MSV9NVFYwMDE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX01BTkxJX01UVjAwMjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEXzQwOUZNOgotCQlpcl9jb2RlcyAgICAgPSBtYW5saV9jb2RlczsKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfbWFubGk7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAxZjAwOwogCQltYXNrX2tleXVwICAgPSAweDAwNDAwMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9TRUROQV9QQ19UVl9DQVJEQlVTOgotCQlpcl9jb2RlcyAgICAgPSBwY3R2X3NlZG5hX2NvZGVzOworCQlpcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19wY3R2X3NlZG5hOwogCQltYXNrX2tleWNvZGUgPSAweDAwMWYwMDsKIAkJbWFza19rZXl1cCAgID0gMHgwMDQwMDA7CiAJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfR09UVklFV183MTM1OgotCQlpcl9jb2RlcyAgICAgPSBnb3R2aWV3NzEzNV9jb2RlczsKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfZ290dmlldzcxMzU7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwM0VDOwogCQltYXNrX2tleXVwICAgPSAweDAwODAwMDsKIAkJbWFza19rZXlkb3duID0gMHgwMDAwMTA7CkBAIC02OTgsMTcgKzIxOSwyMyBAQAogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfUFZSOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfR09MRF9QTFVTOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfVFZfR09MRF9QTFVTSUk6Ci0JCWlyX2NvZGVzICAgICA9IHZpZGVvbWF0ZV90dl9wdnJfY29kZXM7CisJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnI7CiAJCW1hc2tfa2V5Y29kZSA9IDB4MDAwMDNGOwogCQltYXNrX2tleXVwICAgPSAweDQwMDAwMDsKIAkJcG9sbGluZyAgICAgID0gNTA7IC8vIG1zCiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMDoKLQkJaXJfY29kZXMgICAgID0gdmlkZW9tYXRlX3R2X3B2cl9jb2RlczsKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cjsKIAkJbWFza19rZXljb2RlID0gMHgwMDNGMDA7CiAJCW1hc2tfa2V5dXAgICA9IDB4MDQwMDAwOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVF9MUjMwMToKKwljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVERVTzoKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfZmx5ZHZiOworCQltYXNrX2tleWNvZGUgPSAweDAwMDFGMDA7CisJCW1hc2tfa2V5ZG93biA9IDB4MDA0MDAwMDsKKwkJYnJlYWs7CiAJfQogCWlmIChOVUxMID09IGlyX2NvZGVzKSB7CiAJCXByaW50aygiJXM6IE9vcHM6IElSIGNvbmZpZyBlcnJvciBbY2FyZD0lZF1cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LW9zcy5jCmluZGV4IDc0NDhlMzguLjdhYTAyYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LW9zcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LW9zcy5jCkBAIC04NCw4ICs4NCw3IEBACiB7CiAJaW50IGVycjsKIAotCWlmICghZGV2LT5kbWFzb3VuZC5idWZzaXplKQotCQlCVUcoKTsKKwlCVUdfT04oIWRldi0+ZG1hc291bmQuYnVmc2l6ZSk7CiAJdmlkZW9idWZfZG1hX2luaXQoJmRldi0+ZG1hc291bmQuZG1hKTsKIAllcnIgPSB2aWRlb2J1Zl9kbWFfaW5pdF9rZXJuZWwoJmRldi0+ZG1hc291bmQuZG1hLCBQQ0lfRE1BX0ZST01ERVZJQ0UsCiAJCQkJICAgICAgIChkZXYtPmRtYXNvdW5kLmJ1ZnNpemUgKyBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQpOwpAQCAtOTYsOCArOTUsNyBAQAogCiBzdGF0aWMgaW50IGRzcF9idWZmZXJfZnJlZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKLQlpZiAoIWRldi0+ZG1hc291bmQuYmxrc2l6ZSkKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYtPmRtYXNvdW5kLmJsa3NpemUpOwogCXZpZGVvYnVmX2RtYV9mcmVlKCZkZXYtPmRtYXNvdW5kLmRtYSk7CiAJZGV2LT5kbWFzb3VuZC5ibG9ja3MgID0gMDsKIAlkZXYtPmRtYXNvdW5kLmJsa3NpemUgPSAwOwpAQCAtMTI2LDcgKzEyNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIHByZXBhcmUgYnVmZmVyICovCi0JaWYgKDAgIT0gKGVyciA9IHZpZGVvYnVmX2RtYV9wY2lfbWFwKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLmRtYSkpKQorCWlmICgwICE9IChlcnIgPSB2aWRlb2J1Zl9wY2lfZG1hX21hcChkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5kbWEpKSkKIAkJcmV0dXJuIGVycjsKIAlpZiAoMCAhPSAoZXJyID0gc2FhNzEzNF9wZ3RhYmxlX2FsbG9jKGRldi0+cGNpLCZkZXYtPmRtYXNvdW5kLnB0KSkpCiAJCWdvdG8gZmFpbDE7CkBAIC0yMTUsNyArMjEzLDcgQEAKICBmYWlsMjoKIAlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCk7CiAgZmFpbDE6Ci0JdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5kbWEpOworCXZpZGVvYnVmX3BjaV9kbWFfdW5tYXAoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQuZG1hKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMzMsNyArMjMxLDcgQEAKIAogCS8qIHVubG9jayBidWZmZXIgKi8KIAlzYWE3MTM0X3BndGFibGVfZnJlZShkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5wdCk7Ci0JdmlkZW9idWZfZG1hX3BjaV91bm1hcChkZXYtPnBjaSwmZGV2LT5kbWFzb3VuZC5kbWEpOworCXZpZGVvYnVmX3BjaV9kbWFfdW5tYXAoZGV2LT5wY2ksJmRldi0+ZG1hc291bmQuZG1hKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU0LDcgKzI1Miw3IEBACiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRvd24oJmRldi0+ZG1hc291bmQubG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAllcnIgPSAtRUJVU1k7CiAJaWYgKGRldi0+ZG1hc291bmQudXNlcnNfZHNwKQogCQlnb3RvIGZhaWwxOwpAQCAtMjcwLDEzICsyNjgsMTMgQEAKIAlpZiAoMCAhPSBlcnIpCiAJCWdvdG8gZmFpbDI7CiAKLQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+ZG1hc291bmQubG9jayk7CiAJcmV0dXJuIDA7CiAKICBmYWlsMjoKIAlkZXYtPmRtYXNvdW5kLnVzZXJzX2RzcC0tOwogIGZhaWwxOgotCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yODQsMTMgKzI4MiwxMyBAQAogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JZG93bigmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCWlmIChkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikKIAkJZHNwX3JlY19zdG9wKGRldik7CiAJZHNwX2J1ZmZlcl9mcmVlKGRldik7CiAJZGV2LT5kbWFzb3VuZC51c2Vyc19kc3AtLTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA0LDcgKzMwMiw3IEBACiAJaW50IGVycixyZXQgPSAwOwogCiAJYWRkX3dhaXRfcXVldWUoJmRldi0+ZG1hc291bmQud3EsICZ3YWl0KTsKLQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCW11dGV4X2xvY2soJmRldi0+ZG1hc291bmQubG9jayk7CiAJd2hpbGUgKGNvdW50ID4gMCkgewogCQkvKiB3YWl0IGZvciBkYXRhIGlmIG5lZWRlZCAqLwogCQlpZiAoMCA9PSBkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQpIHsKQEAgLTMyOCwxMiArMzI2LDEyIEBACiAJCQkJCXJldCA9IC1FQUdBSU47CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQlpZiAoMCA9PSBkZXYtPmRtYXNvdW5kLnJlYWRfY291bnQpCiAJCQkJc2NoZWR1bGUoKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQkJbXV0ZXhfbG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCWlmICgwID09IHJldCkKIAkJCQkJcmV0ID0gLUVJTlRSOwpAQCAtMzYyLDcgKzM2MCw3IEBACiAJCWlmIChkZXYtPmRtYXNvdW5kLnJlYWRfb2Zmc2V0ID09IGRldi0+ZG1hc291bmQuYnVmc2l6ZSkKIAkJCWRldi0+ZG1hc291bmQucmVhZF9vZmZzZXQgPSAwOwogCX0KLQl1cCgmZGV2LT5kbWFzb3VuZC5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+ZG1hc291bmQubG9jayk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+ZG1hc291bmQud3EsICZ3YWl0KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDM1LDEzICs0MzMsMTMgQEAKIAljYXNlIFNORENUTF9EU1BfU1RFUkVPOgogCQlpZiAoZ2V0X3VzZXIodmFsLCBwKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQltdXRleF9sb2NrKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCQlkZXYtPmRtYXNvdW5kLmNoYW5uZWxzID0gdmFsID8gMiA6IDE7CiAJCWlmIChkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikgewogCQkJZHNwX3JlY19zdG9wKGRldik7CiAJCQlkc3BfcmVjX3N0YXJ0KGRldik7CiAJCX0KLQkJdXAoJmRldi0+ZG1hc291bmQubG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAkJcmV0dXJuIHB1dF91c2VyKGRldi0+ZG1hc291bmQuY2hhbm5lbHMtMSwgcCk7CiAKIAljYXNlIFNORENUTF9EU1BfQ0hBTk5FTFM6CkBAIC00NDksMTMgKzQ0NywxMyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWlmICh2YWwgIT0gMSAmJiB2YWwgIT0gMikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQltdXRleF9sb2NrKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCQlkZXYtPmRtYXNvdW5kLmNoYW5uZWxzID0gdmFsOwogCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24pIHsKIAkJCWRzcF9yZWNfc3RvcChkZXYpOwogCQkJZHNwX3JlY19zdGFydChkZXYpOwogCQl9Ci0JCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQltdXRleF91bmxvY2soJmRldi0+ZG1hc291bmQubG9jayk7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgU09VTkRfUENNX1JFQURfQ0hBTk5FTFM6CiAJCXJldHVybiBwdXRfdXNlcihkZXYtPmRtYXNvdW5kLmNoYW5uZWxzLCBwKTsKQEAgLTQ3OCwxMyArNDc2LDEzIEBACiAJCWNhc2UgQUZNVF9VMTZfQkU6CiAJCWNhc2UgQUZNVF9TMTZfTEU6CiAJCWNhc2UgQUZNVF9TMTZfQkU6Ci0JCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQkJbXV0ZXhfbG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAkJCWRldi0+ZG1hc291bmQuYWZtdCA9IHZhbDsKIAkJCWlmIChkZXYtPmRtYXNvdW5kLnJlY29yZGluZ19vbikgewogCQkJCWRzcF9yZWNfc3RvcChkZXYpOwogCQkJCWRzcF9yZWNfc3RhcnQoZGV2KTsKIAkJCX0KLQkJCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCQkJcmV0dXJuIHB1dF91c2VyKGRldi0+ZG1hc291bmQuYWZtdCwgcCk7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUwOSwxMCArNTA3LDEwIEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBTTkRDVExfRFNQX1JFU0VUOgotCQlkb3duKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQltdXRleF9sb2NrKCZkZXYtPmRtYXNvdW5kLmxvY2spOwogCQlpZiAoZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24pCiAJCQlkc3BfcmVjX3N0b3AoZGV2KTsKLQkJdXAoJmRldi0+ZG1hc291bmQubG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5kbWFzb3VuZC5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6CiAJCXJldHVybiBwdXRfdXNlcihkZXYtPmRtYXNvdW5kLmJsa3NpemUsIHApOwpAQCAtNTU2LDEwICs1NTQsMTAgQEAKIAlwb2xsX3dhaXQoZmlsZSwgJmRldi0+ZG1hc291bmQud3EsIHdhaXQpOwogCiAJaWYgKDAgPT0gZGV2LT5kbWFzb3VuZC5yZWFkX2NvdW50KSB7Ci0JCWRvd24oJmRldi0+ZG1hc291bmQubG9jayk7CisJCW11dGV4X2xvY2soJmRldi0+ZG1hc291bmQubG9jayk7CiAJCWlmICghZGV2LT5kbWFzb3VuZC5yZWNvcmRpbmdfb24pCiAJCQlkc3BfcmVjX3N0YXJ0KGRldik7Ci0JCXVwKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCQltdXRleF91bmxvY2soJmRldi0+ZG1hc291bmQubG9jayk7CiAJfSBlbHNlCiAJCW1hc2sgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pOwogCXJldHVybiBtYXNrOwpAQCAtODUyLDcgKzg1MCw3IEBACiAJCXJldHVybiAtMTsKIAogCS8qIGdlbmVyYWwgKi8KLQlpbml0X01VVEVYKCZkZXYtPmRtYXNvdW5kLmxvY2spOworCW11dGV4X2luaXQoJmRldi0+ZG1hc291bmQubG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5kbWFzb3VuZC53cSk7CiAKIAlzd2l0Y2ggKGRldi0+cGNpLT5kZXZpY2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCmluZGV4IDQ3MDkwM2UuLjYwYTkwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwpAQCAtODksNyArODksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChidWYtPnZiLnNpemUgIT0gc2l6ZSkgewotCQlzYWE3MTM0X2RtYV9mcmVlKGRldixidWYpOworCQlzYWE3MTM0X2RtYV9mcmVlKHEsYnVmKTsKIAl9CiAKIAlpZiAoU1RBVEVfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7CkBAIC05OCw3ICs5OCw3IEBACiAJCWJ1Zi0+dmIuc2l6ZSAgID0gc2l6ZTsKIAkJYnVmLT5wdCAgICAgICAgPSAmZGV2LT50cy5wdF90czsKIAotCQllcnIgPSB2aWRlb2J1Zl9pb2xvY2soZGV2LT5wY2ksJmJ1Zi0+dmIsTlVMTCk7CisJCWVyciA9IHZpZGVvYnVmX2lvbG9jayhxLCZidWYtPnZiLE5VTEwpOwogCQlpZiAoZXJyKQogCQkJZ290byBvb3BzOwogCQllcnIgPSBzYWE3MTM0X3BndGFibGVfYnVpbGQoZGV2LT5wY2ksYnVmLT5wdCwKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXJldHVybiAwOwogCiAgb29wczoKLQlzYWE3MTM0X2RtYV9mcmVlKGRldixidWYpOworCXNhYTcxMzRfZG1hX2ZyZWUocSxidWYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1MiwxMCArMTUyLDkgQEAKIAogc3RhdGljIHZvaWQgYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKLQlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHEtPnByaXZfZGF0YTsKIAlzdHJ1Y3Qgc2FhNzEzNF9idWYgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2YixzdHJ1Y3Qgc2FhNzEzNF9idWYsdmIpOwogCi0Jc2FhNzEzNF9kbWFfZnJlZShkZXYsYnVmKTsKKwlzYWE3MTM0X2RtYV9mcmVlKHEsYnVmKTsKIH0KIAogc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBzYWE3MTM0X3RzX3FvcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKaW5kZXggYWZhNGRjYi4uMGRiNTNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYwpAQCAtMTQwLDYgKzE0MCwxMiBAQAogCQkuY2FycjIgICAgICAgICA9IDU4NTAsCiAJCS5tb2RlICAgICAgICAgID0gVFZBVURJT19OSUNBTV9BTSwKIAl9LHsKKwkJLm5hbWUgICAgICAgICAgPSAiU0VDQU0tTCBNT05PIiwKKwkJLnN0ZCAgICAgICAgICAgPSBWNEwyX1NURF9TRUNBTSwKKwkJLmNhcnIxICAgICAgICAgPSA2NTAwLAorCQkuY2FycjIgICAgICAgICA9IC0xLAorCQkubW9kZSAgICAgICAgICA9IFRWQVVESU9fQU1fTU9OTywKKwl9LHsKIAkJLm5hbWUgICAgICAgICAgPSAiU0VDQU0tRC9LIiwKIAkJLnN0ZCAgICAgICAgICAgPSBWNEwyX1NURF9TRUNBTSwKIAkJLmNhcnIxICAgICAgICAgPSA2NTAwLApAQCAtMzM0LDYgKzM0MCwxMiBAQAogCQlzYWFfd3JpdGViKFNBQTcxMzRfU1RFUkVPX0RBQ19PVVRQVVRfU0VMRUNULCAgMHhhMSk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9OSUNBTV9DT05GSUcsICAgICAgICAgICAgICAweDAwKTsKIAkJYnJlYWs7CisJY2FzZSBUVkFVRElPX0FNX01PTk86CisJCXNhYV93cml0ZWIoU0FBNzEzNF9ERU1PRFVMQVRPUiwgICAgICAgICAgICAgICAweDEyKTsKKwkJc2FhX3dyaXRlYihTQUE3MTM0X0RDWE9fSURFTlRfQ1RSTCwgICAgICAgICAgIDB4MDApOworCQlzYWFfd3JpdGViKFNBQTcxMzRfRk1fREVFTVBIQVNJUywgICAgICAgICAgICAgMHg0NCk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9TVEVSRU9fREFDX09VVFBVVF9TRUxFQ1QsICAweGEwKTsKKwkJYnJlYWs7CiAJY2FzZSBUVkFVRElPX0ZNX1NBVF9TVEVSRU86CiAJCS8qIG5vdCBpbXBsZW1lbnRlZCAoeWV0KSAqLwogCQlicmVhazsKQEAgLTQxNCw2ICs0MjYsNyBAQAogCiAJc3dpdGNoIChhdWRpby0+bW9kZSkgewogCWNhc2UgVFZBVURJT19GTV9NT05POgorCWNhc2UgVFZBVURJT19BTV9NT05POgogCQlyZXR1cm4gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAljYXNlIFRWQVVESU9fRk1fS19TVEVSRU86CiAJY2FzZSBUVkFVRElPX0ZNX0JHX1NURVJFTzoKQEAgLTQ2OSwxNyArNDgyLDIwIEBACiAJCVsgVjRMMl9UVU5FUl9NT0RFX1NURVJFTyBdID0gInN0ZXJlbyIsCiAJCVsgVjRMMl9UVU5FUl9NT0RFX0xBTkcxICBdID0gImxhbmcxIiwKIAkJWyBWNEwyX1RVTkVSX01PREVfTEFORzIgIF0gPSAibGFuZzIiLAorCQlbIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMiAgXSA9ICJsYW5nMStsYW5nMiIsCiAJfTsKIAlzdGF0aWMgdTMyIGZtW10gPSB7CiAJCVsgVjRMMl9UVU5FUl9NT0RFX01PTk8gICBdID0gMHgwMCwgIC8qIGNoMSAgKi8KIAkJWyBWNEwyX1RVTkVSX01PREVfU1RFUkVPIF0gPSAweDgwLCAgLyogYXV0byAqLwogCQlbIFY0TDJfVFVORVJfTU9ERV9MQU5HMSAgXSA9IDB4MDAsICAvKiBjaDEgICovCiAJCVsgVjRMMl9UVU5FUl9NT0RFX0xBTkcyICBdID0gMHgwMSwgIC8qIGNoMiAgKi8KKwkJWyBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgXSA9IDB4ODAsICAvKiBhdXRvICovCiAJfTsKIAl1MzIgcmVnOwogCiAJc3dpdGNoIChhdWRpby0+bW9kZSkgewogCWNhc2UgVFZBVURJT19GTV9NT05POgorCWNhc2UgVFZBVURJT19BTV9NT05POgogCQkvKiBub3RoaW5nIHRvIGRvIC4uLiAqLwogCQlicmVhazsKIAljYXNlIFRWQVVESU9fRk1fS19TVEVSRU86CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZiaS5jCmluZGV4IGY0YWVlMGEuLmYzODM2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZiaS5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYnVmLT52Yi5zaXplICE9IHNpemUpCi0JCXNhYTcxMzRfZG1hX2ZyZWUoZGV2LGJ1Zik7CisJCXNhYTcxMzRfZG1hX2ZyZWUocSxidWYpOwogCiAJaWYgKFNUQVRFX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgewogCQlidWYtPnZiLndpZHRoICA9IGxsZW5ndGg7CkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJYnVmLT52Yi5zaXplICAgPSBzaXplOwogCQlidWYtPnB0ICAgICAgICA9ICZmaC0+cHRfdmJpOwogCi0JCWVyciA9IHZpZGVvYnVmX2lvbG9jayhkZXYtPnBjaSwmYnVmLT52YixOVUxMKTsKKwkJZXJyID0gdmlkZW9idWZfaW9sb2NrKHEsJmJ1Zi0+dmIsTlVMTCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG9vcHM7CiAJCWVyciA9IHNhYTcxMzRfcGd0YWJsZV9idWlsZChkZXYtPnBjaSxidWYtPnB0LApAQCAtMTU5LDcgKzE1OSw3IEBACiAJcmV0dXJuIDA7CiAKICBvb3BzOgotCXNhYTcxMzRfZG1hX2ZyZWUoZGV2LGJ1Zik7CisJc2FhNzEzNF9kbWFfZnJlZShxLGJ1Zik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTkwLDExICsxOTAsOSBAQAogCiBzdGF0aWMgdm9pZCBidWZmZXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewotCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCAgID0gcS0+cHJpdl9kYXRhOwotCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3Qgc2FhNzEzNF9idWYgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2YixzdHJ1Y3Qgc2FhNzEzNF9idWYsdmIpOwogCi0Jc2FhNzEzNF9kbWFfZnJlZShkZXYsYnVmKTsKKwlzYWE3MTM0X2RtYV9mcmVlKHEsYnVmKTsKIH0KIAogc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBzYWE3MTM0X3ZiaV9xb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggZTk3NDI2Yi4uYWVlZjgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC00NjAsMTcgKzQ2MCwxNyBAQAogCQlyZXR1cm4gMTsKIAogCS8qIGlzIGl0IGZyZWU/ICovCi0JZG93bigmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWlmIChkZXYtPnJlc291cmNlcyAmIGJpdCkgewogCQkvKiBubywgc29tZW9uZSBlbHNlIHVzZXMgaXQgKi8KLQkJdXAoJmRldi0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGl0J3MgZnJlZSwgZ3JhYiBpdCAqLwogCWZoLT5yZXNvdXJjZXMgIHw9IGJpdDsKIAlkZXYtPnJlc291cmNlcyB8PSBiaXQ7CiAJZHByaW50aygicmVzOiBnZXQgJWRcbiIsYml0KTsKLQl1cCgmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ4OSwxNCArNDg5LDEzIEBACiBzdGF0aWMKIHZvaWQgcmVzX2ZyZWUoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTM0X2ZoICpmaCwgdW5zaWduZWQgaW50IGJpdHMpCiB7Ci0JaWYgKChmaC0+cmVzb3VyY2VzICYgYml0cykgIT0gYml0cykKLQkJQlVHKCk7CisJQlVHX09OKChmaC0+cmVzb3VyY2VzICYgYml0cykgIT0gYml0cyk7CiAKLQlkb3duKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZmgtPnJlc291cmNlcyAgJj0gfmJpdHM7CiAJZGV2LT5yZXNvdXJjZXMgJj0gfmJpdHM7CiAJZHByaW50aygicmVzOiBwdXQgJWRcbiIsYml0cyk7Ci0JdXAoJmRldi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTk5NCw3ICs5OTMsNyBAQAogCSAgICBidWYtPnZiLnNpemUgICAhPSBzaXplICAgICAgIHx8CiAJICAgIGJ1Zi0+dmIuZmllbGQgICE9IGZpZWxkICAgICAgfHwKIAkgICAgYnVmLT5mbXQgICAgICAgIT0gZmgtPmZtdCkgewotCQlzYWE3MTM0X2RtYV9mcmVlKGRldixidWYpOworCQlzYWE3MTM0X2RtYV9mcmVlKHEsYnVmKTsKIAl9CiAKIAlpZiAoU1RBVEVfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7CkBAIC0xMDA1LDcgKzEwMDQsNyBAQAogCQlidWYtPmZtdCAgICAgICA9IGZoLT5mbXQ7CiAJCWJ1Zi0+cHQgICAgICAgID0gJmZoLT5wdF9jYXA7CiAKLQkJZXJyID0gdmlkZW9idWZfaW9sb2NrKGRldi0+cGNpLCZidWYtPnZiLCZkZXYtPm92YnVmKTsKKwkJZXJyID0gdmlkZW9idWZfaW9sb2NrKHEsJmJ1Zi0+dmIsJmRldi0+b3ZidWYpOwogCQlpZiAoZXJyKQogCQkJZ290byBvb3BzOwogCQllcnIgPSBzYWE3MTM0X3BndGFibGVfYnVpbGQoZGV2LT5wY2ksYnVmLT5wdCwKQEAgLTEwMjAsNyArMTAxOSw3IEBACiAJcmV0dXJuIDA7CiAKICBvb3BzOgotCXNhYTcxMzRfZG1hX2ZyZWUoZGV2LGJ1Zik7CisJc2FhNzEzNF9kbWFfZnJlZShxLGJ1Zik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA0NiwxMCArMTA0NSw5IEBACiAKIHN0YXRpYyB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7Ci0Jc3RydWN0IHNhYTcxMzRfZmggKmZoID0gcS0+cHJpdl9kYXRhOwogCXN0cnVjdCBzYWE3MTM0X2J1ZiAqYnVmID0gY29udGFpbmVyX29mKHZiLHN0cnVjdCBzYWE3MTM0X2J1Zix2Yik7CiAKLQlzYWE3MTM0X2RtYV9mcmVlKGZoLT5kZXYsYnVmKTsKKwlzYWE3MTM0X2RtYV9mcmVlKHEsYnVmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgdmlkZW9fcW9wcyA9IHsKQEAgLTEzNDAsMjEgKzEzMzgsMjEgQEAKIAkJaWYgKCFsaXN0X2VtcHR5KCZmaC0+Y2FwLnN0cmVhbSkpCiAJCQlidWYgPSBsaXN0X2VudHJ5KGZoLT5jYXAuc3RyZWFtLm5leHQsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHN0cmVhbSk7CiAJfSBlbHNlIHsKLQkJZG93bigmZmgtPmNhcC5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZmgtPmNhcC5sb2NrKTsKIAkJaWYgKFVOU0VUID09IGZoLT5jYXAucmVhZF9vZmYpIHsKIAkJCS8qIG5lZWQgdG8gY2FwdHVyZSBhIG5ldyBmcmFtZSAqLwogCQkJaWYgKHJlc19sb2NrZWQoZmgtPmRldixSRVNPVVJDRV9WSURFTykpIHsKLQkJCQl1cCgmZmgtPmNhcC5sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJmZoLT5jYXAubG9jayk7CiAJCQkJcmV0dXJuIFBPTExFUlI7CiAJCQl9CiAJCQlpZiAoMCAhPSBmaC0+Y2FwLm9wcy0+YnVmX3ByZXBhcmUoJmZoLT5jYXAsZmgtPmNhcC5yZWFkX2J1ZixmaC0+Y2FwLmZpZWxkKSkgewotCQkJCXVwKCZmaC0+Y2FwLmxvY2spOworCQkJCW11dGV4X3VubG9jaygmZmgtPmNhcC5sb2NrKTsKIAkJCQlyZXR1cm4gUE9MTEVSUjsKIAkJCX0KIAkJCWZoLT5jYXAub3BzLT5idWZfcXVldWUoJmZoLT5jYXAsZmgtPmNhcC5yZWFkX2J1Zik7CiAJCQlmaC0+Y2FwLnJlYWRfb2ZmID0gMDsKIAkJfQotCQl1cCgmZmgtPmNhcC5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmaC0+Y2FwLmxvY2spOwogCQlidWYgPSBmaC0+Y2FwLnJlYWRfYnVmOwogCX0KIApAQCAtMTQ2Myw2ICsxNDYxLDEwIEBACiAJCQlmLT5mbXQucGl4LmhlaWdodCAqIGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKKwkJaWYgKHNhYTcxMzRfbm9fb3ZlcmxheSA+IDApIHsKKwkJCXByaW50ayAoIlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTogbm9fb3ZlcmxheVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQlmLT5mbXQud2luID0gZmgtPndpbjsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgpAQCAtMTUyNyw2ICsxNTI5LDEwIEBACiAJCXJldHVybiAwOwogCX0KIAljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKKwkJaWYgKHNhYTcxMzRfbm9fb3ZlcmxheSA+IDApIHsKKwkJCXByaW50ayAoIlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTogbm9fb3ZlcmxheVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCQllcnIgPSB2ZXJpZnlfcHJldmlldyhkZXYsJmYtPmZtdC53aW4pOwogCQlpZiAoMCAhPSBlcnIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMTU1NywxOCArMTU2MywyMiBAQAogCQlmaC0+Y2FwLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6CisJCWlmIChzYWE3MTM0X25vX292ZXJsYXkgPiAwKSB7CisJCQlwcmludGsgKCJWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6IG5vX292ZXJsYXlcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAkJZXJyID0gdmVyaWZ5X3ByZXZpZXcoZGV2LCZmLT5mbXQud2luKTsKIAkJaWYgKDAgIT0gZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQlkb3duKCZkZXYtPmxvY2spOworCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCQlmaC0+d2luICAgID0gZi0+Zm10LndpbjsKIAkJZmgtPm5jbGlwcyA9IGYtPmZtdC53aW4uY2xpcGNvdW50OwogCQlpZiAoZmgtPm5jbGlwcyA+IDgpCiAJCQlmaC0+bmNsaXBzID0gODsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKGZoLT5jbGlwcyxmLT5mbXQud2luLmNsaXBzLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSpmaC0+bmNsaXBzKSkgewotCQkJdXAoJmRldi0+bG9jayk7CisJCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCkBAIC0xNTc4LDcgKzE1ODgsNyBAQAogCQkJc3RhcnRfcHJldmlldyhkZXYsZmgpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jayxmbGFncyk7CiAJCX0KLQkJdXAoJmRldi0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgogCQlzYWE3MTM0X3ZiaV9mbXQoZGV2LGYpOwpAQCAtMTYxMiw5ICsxNjIyLDkgQEAKIAkJcmV0dXJuIGdldF9jb250cm9sKGRldixhcmcpOwogCWNhc2UgVklESU9DX1NfQ1RSTDoKIAl7Ci0JCWRvd24oJmRldi0+bG9jayk7CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJCWVyciA9IHNldF9jb250cm9sKGRldixOVUxMLGFyZyk7Ci0JCXVwKCZkZXYtPmxvY2spOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiBlcnI7CiAJfQogCS8qIC0tLSBpbnB1dCBzd2l0Y2hpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNjY0LDkgKzE2NzQsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChOVUxMID09IGNhcmRfaW4oZGV2LCppKS5uYW1lKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRvd24oJmRldi0+bG9jayk7CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJCXZpZGVvX211eChkZXYsKmkpOwotCQl1cCgmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE3MTYsMTEgKzE3MjYsMTMgQEAKIAkJY2FwLT52ZXJzaW9uID0gU0FBNzEzNF9WRVJTSU9OX0NPREU7CiAJCWNhcC0+Y2FwYWJpbGl0aWVzID0KIAkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSB8CiAJCQlWNEwyX0NBUF9WQklfQ0FQVFVSRSB8CiAJCQlWNEwyX0NBUF9SRUFEV1JJVEUgfAogCQkJVjRMMl9DQVBfU1RSRUFNSU5HIHwKIAkJCVY0TDJfQ0FQX1RVTkVSOworCQlpZiAoc2FhNzEzNF9ub19vdmVybGF5IDw9IDApIHsKKwkJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1ZJREVPX09WRVJMQVk7CisJCX0KIAogCQlpZiAoKHR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UKSB8fCAodHVuZXJfdHlwZSA9PSBVTlNFVCkpCiAJCQljYXAtPmNhcGFiaWxpdGllcyAmPSB+VjRMMl9DQVBfVFVORVI7CkBAIC0xNzY2LDcgKzE3NzgsNyBAQAogCQlpZiAoaSA9PSBUVk5PUk1TKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZG93bigmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAkJaWYgKHJlc19jaGVjayhmaCwgUkVTT1VSQ0VfT1ZFUkxBWSkpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLGZsYWdzKTsKIAkJCXN0b3BfcHJldmlldyhkZXYsZmgpOwpAQCAtMTc3Niw3ICsxNzg4LDcgQEAKIAkJfSBlbHNlCiAJCQlzZXRfdHZub3JtKGRldiwmdHZub3Jtc1tpXSk7CiAJCXNhYTcxMzRfdHZhdWRpb19kb19zY2FuKGRldik7Ci0JCXVwKCZkZXYtPmxvY2spOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTkwOSwxMyArMTkyMSwxMyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICgxID09IGZoLT5yYWRpbyAmJiBWNEwyX1RVTkVSX1JBRElPICE9IGYtPnR5cGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJZG93bigmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAkJZGV2LT5jdGxfZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAogCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LFZJRElPQ19TX0ZSRVFVRU5DWSxmKTsKIAogCQlzYWE3MTM0X3R2YXVkaW9fZG9fc2NhbihkZXYpOwotCQl1cCgmZGV2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE5NzEsNiArMTk4MywxMCBAQAogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgorCQkJaWYgKHNhYTcxMzRfbm9fb3ZlcmxheSA+IDApIHsKKwkJCQlwcmludGsgKCJWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6IG5vX292ZXJsYXlcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCQkJaWYgKGluZGV4ID49IEZPUk1BVFMpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZiAoZi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkgJiYKQEAgLTIwMzEsNiArMjA0NywxMSBAQAogCQlpbnQgKm9uID0gYXJnOwogCiAJCWlmICgqb24pIHsKKwkJCWlmIChzYWE3MTM0X25vX292ZXJsYXkgPiAwKSB7CisJCQkJcHJpbnRrICgibm9fb3ZlcmxheVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKIAkJCWlmICghcmVzX2dldChkZXYsZmgsUkVTT1VSQ0VfT1ZFUkxBWSkpCiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLGZsYWdzKTsKQEAgLTIyODIsNyArMjMwMyw3IEBACiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNhYTcxMzRfdmlkZW9fdGVtcGxhdGUgPQogewogCS5uYW1lICAgICAgICAgID0gInNhYTcxMzQtdmlkZW8iLAotCS50eXBlICAgICAgICAgID0gVklEX1RZUEVfQ0FQVFVSRXxWSURfVFlQRV9UVU5FUnxWSURfVFlQRV9PVkVSTEFZfAorCS50eXBlICAgICAgICAgID0gVklEX1RZUEVfQ0FQVFVSRXxWSURfVFlQRV9UVU5FUnwKIAkJCSBWSURfVFlQRV9DTElQUElOR3xWSURfVFlQRV9TQ0FMRVMsCiAJLmhhcmR3YXJlICAgICAgPSAwLAogCS5mb3BzICAgICAgICAgID0gJnZpZGVvX2ZvcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCAzMjYxZDhiLi4zMWJhMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTI5LDExICsyOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvLWJ1Zi5oPgpAQCAtNjAsNiArNjAsNyBAQAogCVRWQVVESU9fRk1fS19TVEVSRU8gICA9IDQsCiAJVFZBVURJT19OSUNBTV9BTSAgICAgID0gNSwKIAlUVkFVRElPX05JQ0FNX0ZNICAgICAgPSA2LAorCVRWQVVESU9fQU1fTU9OTwkgICAgICA9IDcKIH07CiAKIGVudW0gc2FhNzEzNF9hdWRpb19pbiB7CkBAIC0yMTAsNiArMjExLDE1IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfTVNJX1RWQVRBTllXSEVSRV9QTFVTICA4MgogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0NJTkVSR1kyNTBQQ0kgODMKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9GTFlEVkJfVFJJTyA4NAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV83NzcgODUKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0xSMzAxIDg2CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQURTX0RVT19DQVJEQlVTX1BUVjMzMSA4NworI2RlZmluZSBTQUE3MTM0X0JPQVJEX1RFVklPTl9EVkJUXzIyMFJGIDg4CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRUxTQV83MDBUViAgICAgICA4OQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9BVFNDMTEwICAgOTAKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTE2OV9CIDkxCisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0ExNjlfQjEgOTIKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9NRDcxMzRfQlJJREdFXzIgICAgIDkzCiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgOAogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CkBAIC0zNTksNyArMzY5LDcgQEAKIAogLyogZG1hc291bmQgZHNwIHN0YXR1cyAqLwogc3RydWN0IHNhYTcxMzRfZG1hc291bmQgewotCXN0cnVjdCBzZW1hcGhvcmUgICAgICAgICAgIGxvY2s7CisJc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgbG9jazsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBtaW5vcl9taXhlcjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBtaW5vcl9kc3A7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgdXNlcnNfZHNwOwpAQCAtMzg2LDcgKzM5Niw3IEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcmVhZF9vZmZzZXQ7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcmVhZF9jb3VudDsKIAl2b2lkICoJCQkgICBwcml2X2RhdGE7Ci0Jc25kX3BjbV9zdWJzdHJlYW1fdCAJICAgKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gICAqc3Vic3RyZWFtOwogfTsKIAogLyogSVIgaW5wdXQgKi8KQEAgLTQyMyw3ICs0MzMsNyBAQAogLyogZ2xvYmFsIGRldmljZSBzdGF0dXMgKi8KIHN0cnVjdCBzYWE3MTM0X2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgZGV2bGlzdDsKLQlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICAgICBsb2NrOworCXN0cnVjdCBtdXRleCAgICAgICAgICAgICAgIGxvY2s7CiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgc2xvY2s7CiAjaWZkZWYgVklESU9DX0dfUFJJT1JJVFkKIAlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICAgICBwcmlvOwpAQCAtNTQ2LDYgKzU1Niw3IEBACiAvKiBzYWE3MTM0LWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAgc2FhNzEzNF9kZXZsaXN0OworZXh0ZXJuIGludCBzYWE3MTM0X25vX292ZXJsYXk7CiAKIHZvaWQgc2FhNzEzNF90cmFja19ncGlvKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBjaGFyICptc2cpOwogCkBAIC01NjcsNyArNTc4LDcgQEAKIAkJCSAgIHVuc2lnbmVkIGludCBzdGF0ZSk7CiB2b2lkIHNhYTcxMzRfYnVmZmVyX25leHQoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTM0X2RtYXF1ZXVlICpxKTsKIHZvaWQgc2FhNzEzNF9idWZmZXJfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpOwotdm9pZCBzYWE3MTM0X2RtYV9mcmVlKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LHN0cnVjdCBzYWE3MTM0X2J1ZiAqYnVmKTsKK3ZvaWQgc2FhNzEzNF9kbWFfZnJlZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsc3RydWN0IHNhYTcxMzRfYnVmICpidWYpOwogCiBpbnQgc2FhNzEzNF9zZXRfZG1hYml0cyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE0Ni5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTQ2LmgKaW5kZXggNzU2OTYzZi4uMjgzMGI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTQ2LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTQ2LmgKQEAgLTEsNyArMSw3IEBACi0vKiAgCisvKgogICAgIHNhYTcxNDYuaCAtIGRlZmluaXRpb25zIHBoaWxpcHMgc2FhNzE0NiBiYXNlZCBjYXJkcwogICAgIENvcHlyaWdodCAoQykgMTk5OSBOYXRoYW4gTGFyZWRvIChsYXJlZG9AZ251Lm9yZykKLSAgICAKKwogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KIAotI2lmbmRlZiBPX05PTkNBUCAgCisjaWZuZGVmIE9fTk9OQ0FQCiAjZGVmaW5lIE9fTk9OQ0FQCU9fVFJVTkMKICNlbmRpZgogCkBAIC0zNiw3ICszNiw3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLXN0cnVjdCBzYWE3MTQ2X3dpbmRvdyAKK3N0cnVjdCBzYWE3MTQ2X3dpbmRvdwogewogCWludCB4LCB5OwogCXVzaG9ydCB3aWR0aCwgaGVpZ2h0OwpAQCAtNzAsNyArNzAsNyBAQAogCWludCBpcnFzdGF0ZTsJCS8qIGlycSByb3V0aW5lIGlzIHN0YXRlIGRyaXZlbiAqLwogCWludCB3cml0ZW1vZGU7CiAJaW50IHBsYXltb2RlOwotICAgICAgICB1bnNpZ25lZCBpbnQgbnI7CisJdW5zaWduZWQgaW50IG5yOwogCXVuc2lnbmVkIGxvbmcgaXJxOyAgICAgICAgICAvKiBJUlEgdXNlZCBieSBTQUE3MTQ2IGNhcmQgKi8KIAl1bnNpZ25lZCBzaG9ydCBpZDsKIAl1bnNpZ25lZCBjaGFyIHJldmlzaW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTQ2cmVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDZyZWcuaAppbmRleCA2Y2M5MTBmLi44MGVjMmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDZyZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDZyZWcuaApAQCAtMSw3ICsxLDcgQEAKLS8qICAKKy8qCiAgICAgc2FhNzE0Ni5oIC0gZGVmaW5pdGlvbnMgcGhpbGlwcyBzYWE3MTQ2IGJhc2VkIGNhcmRzCiAgICAgQ29weXJpZ2h0IChDKSAxOTk5IE5hdGhhbiBMYXJlZG8gKGxhcmVkb0BnbnUub3JnKQotICAgIAorCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCmluZGV4IDNlZDBlZGIuLjljMzA4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogc2FhNzE4NSAtIFBoaWxpcHMgU0FBNzE4NUIgdmlkZW8gZW5jb2RlciBkcml2ZXIgdmVyc2lvbiAwLjAuMwogICoKICAqIENvcHlyaWdodCAoQykgMTk5OCBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KQEAgLTQ5LDcgKzQ5LDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KIAogI2RlZmluZSBJMkNfTkFNRShzKSAocyktPm5hbWUKIApAQCAtMTEzLDI0ICsxMTIsMjEgQEAKIAlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CiAJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCiAJCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JCXN0cnVjdCBpMmNfbXNnIG1zZzsKIAkJdTggYmxvY2tfZGF0YVszMl07CisJCWludCBibG9ja19sZW47CiAKLQkJbXNnLmFkZHIgPSBjbGllbnQtPmFkZHI7Ci0JCW1zZy5mbGFncyA9IDA7CiAJCXdoaWxlIChsZW4gPj0gMikgewotCQkJbXNnLmJ1ZiA9IChjaGFyICopIGJsb2NrX2RhdGE7Ci0JCQltc2cubGVuID0gMDsKLQkJCWJsb2NrX2RhdGFbbXNnLmxlbisrXSA9IHJlZyA9IGRhdGFbMF07CisJCQlibG9ja19sZW4gPSAwOworCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPSByZWcgPSBkYXRhWzBdOwogCQkJZG8gewotCQkJCWJsb2NrX2RhdGFbbXNnLmxlbisrXSA9CisJCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPQogCQkJCSAgICBlbmNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKIAkJCQlsZW4gLT0gMjsKIAkJCQlkYXRhICs9IDI7CiAJCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJgotCQkJCSBtc2cubGVuIDwgMzIpOwotCQkJaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLAotCQkJCQkJJm1zZywgMSkpIDwgMCkKKwkJCQkgYmxvY2tfbGVuIDwgMzIpOworCQkJaWYgKChyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLAorCQkJCQkJICAgYmxvY2tfbGVuKSkgPCAwKQogCQkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKQEAgLTM4MSw3ICszNzcsNyBAQAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1NBQTcxODUgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGlnbm9yZSA9IEkyQ19DTElFTlRfRU5EOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7CiAJLm5vcm1hbF9pMmMJCT0gbm9ybWFsX2kyYywKIAkucHJvYmUJCQk9ICZpZ25vcmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5Ni5oCmluZGV4IGY5MmYyMWMuLmNkNGI2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5Ni5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5Ni5oCkBAIC0yLDE0ICsyLDE0IEBACiAgICAgRGVmaW5pdGlvbnMgZm9yIHRoZSBQaGlsaXBzIFNBQTcxOTYgZGlnaXRhbCB2aWRlbyBkZWNvZGVyLAogICAgIHNjYWxlciwgYW5kIGNsb2NrIGdlbmVyYXRvciBjaXJjdWl0IChERVNDcHJvKSwgYXMgdXNlZCBpbgogICAgIHRoZSBQbGFuQiB2aWRlbyBpbnB1dCBvZiB0aGUgUG93ZXJtYWMgN3gwMC84eDAwIHNlcmllcy4KLSAgCisKICAgICBDb3B5cmlnaHQgKEMpIDE5OTggTWljaGVsIExhbm5lcnMgKG1sYW5AY3B1Lmx1KQogCiAgICAgVGhlIHJlZ2lzdGVyIGRlZmluZXMgYXJlIHNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIHRoZSBtZXRlb3IKICAgICBkcml2ZXIgb3V0IG9mIE5ldEJTRCAod2l0aCBwZXJtaXNzaW9uKSwKICAgICBhbmQgYXJlIGNvcHlyaWdodGVkIChjKSAxOTk1IE1hcmsgVGluZ3VlbHkgYW5kIEppbSBMb3dlCiAgICAgKFRoYW5rcyAhKQotICAKKwogICAgIEFkZGl0aW9uYWwgZGVidWdnaW5nIGFuZCBjb2RpbmcgYnkgVGFrYXNoaSBPZSAodG9lQHVubGluZm8udW5sLmVkdSkKIAogICAgIFRoZSBkZWZhdWx0IHZhbHVlcyB1c2VkIGZvciBQbGFuQiBhcmUgbXkgbWlzdGFrZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zZTQwMS5jCnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuYwppbmRleCAyYmE1NjIyOC4uYTg0NmViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgSmVyb2VuIEIuIFZyZWVrZW4gKHBlMXJ4cUBhbXNhdC5vcmcpCiAgKgogICogU3RpbGwgc29tZXdoYXQgYmFzZWQgb24gdGhlIExpbnV4IG92NTExIGRyaXZlci4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKQEAgLTExNCwxNiArMTE0LDE2IEBACiAJCQkgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGNoYXIgKmNwLCBpbnQgc2l6ZSkKIHsKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnICgKLSAgICAgICAgICAgICAgICBzZTQwMS0+ZGV2LAotICAgICAgICAgICAgICAgIHNldCA/IHVzYl9zbmRjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSA6IHVzYl9yY3ZjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSwKLSAgICAgICAgICAgICAgICByZXEsCi0gICAgICAgICAgICAgICAgKHNldCA/IFVTQl9ESVJfT1VUIDogVVNCX0RJUl9JTikgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotICAgICAgICAgICAgICAgIHZhbHVlLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgY3AsCi0gICAgICAgICAgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAxMDAwCi0gICAgICAgICk7CisJCXNlNDAxLT5kZXYsCisJCXNldCA/IHVzYl9zbmRjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSA6IHVzYl9yY3ZjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSwKKwkJcmVxLAorCQkoc2V0ID8gVVNCX0RJUl9PVVQgOiBVU0JfRElSX0lOKSB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCXZhbHVlLAorCQkwLAorCQljcCwKKwkJc2l6ZSwKKwkJMTAwMAorCSk7CiB9CiAKIHN0YXRpYyBpbnQgc2U0MDFfc2V0X2ZlYXR1cmUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHVuc2lnbmVkIHNob3J0IHNlbGVjdG9yLApAQCAtMTQwLDMwICsxNDAsMzAgQEAKIAkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQlwYXJhbSwKIAkJc2VsZWN0b3IsCi0gICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEwMDAKLSAgICAgICAgKTsKKwkJTlVMTCwKKwkJMCwKKwkJMTAwMAorCSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzZTQwMV9nZXRfZmVhdHVyZShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgCi0JCQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCBzZWxlY3RvcikKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBzZTQwMV9nZXRfZmVhdHVyZShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwKKwkJCQkJdW5zaWduZWQgc2hvcnQgc2VsZWN0b3IpCiB7CiAJLyogRm9yICdzZXQnIHRoZSBzZWxlY2V0b3Igc2hvdWxkIGJlIGluIGluZGV4LCBub3Qgc3VyZSBpZiB0aGUgc3BlYyBpcwogCSAgIHdyb25nIGhlcmUgdG8uLi4uCiAJICovCiAJdW5zaWduZWQgY2hhciBjcFsyXTsKLSAgICAgICAgdXNiX2NvbnRyb2xfbXNnICgKLSAgICAgICAgICAgICAgICBzZTQwMS0+ZGV2LAotICAgICAgICAgICAgICAgIHVzYl9yY3ZjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSwKLSAgICAgICAgICAgICAgICBTRTQwMV9SRVFfR0VUX0VYVF9GRUFUVVJFLAotICAgICAgICAgICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLSAgICAgICAgCTAsCi0gICAgICAgICAgICAgICAgc2VsZWN0b3IsCi0gICAgICAgICAgICAgICAgY3AsCi0gICAgICAgICAgICAgICAgMiwKLSAgICAgICAgICAgICAgICAxMDAwCi0gICAgICAgICk7CisJdXNiX2NvbnRyb2xfbXNnICgKKwkJc2U0MDEtPmRldiwKKwkJdXNiX3JjdmN0cmxwaXBlKHNlNDAxLT5kZXYsIDApLAorCQlTRTQwMV9SRVFfR0VUX0VYVF9GRUFUVVJFLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCTAsCisJCXNlbGVjdG9yLAorCQljcCwKKwkJMiwKKwkJMTAwMAorCSk7CiAJcmV0dXJuIGNwWzBdK2NwWzFdKjI1NjsKIH0KIApAQCAtMTgzLDE0ICsxODMsMTQgQEAKIAlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19BUkNHLCBzZTQwMS0+cmdhaW4pOy8qIHJlZCBjb2xvciBnYWluICovCiAJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfQUdDRywgc2U0MDEtPmdnYWluKTsvKiBncmVlbiBjb2xvciBnYWluICovCiAJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfQUJDRywgc2U0MDEtPmJnYWluKTsvKiBibHVlIGNvbG9yIGdhaW4gKi8KLQkgICAgCQorCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNlNDAxX3NldF9leHBvc3VyZShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgaW50IGJyaWdodG5lc3MpCiB7CiAJaW50IGludGVncmF0aW9uPWJyaWdodG5lc3M8PDU7Ci0JCisKIAlpZiAoZmxpY2tlcmxlc3M9PTUwKSB7CiAJCWludGVncmF0aW9uPWludGVncmF0aW9uLWludGVncmF0aW9uJTEwNjY2NzsKIAl9CkBAIC0yNTUsMTEgKzI1NSwxMSBAQAogCS8qIEZvciBzb21lIHJlYXNvbiB0aGlzIG5vcm1hbGx5IHJlYWQtb25seSByZWdpc3RlciBkb2Vzbid0IGdldCByZXNldAogCSAgIHRvIHplcm8gYWZ0ZXIgcmVhZGluZyB0aGVtIGp1c3Qgb25jZS4uLgogCSAqLwotCXNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9IKTsgCisJc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfSElSRUZOT0gpOwogCXNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9MKTsKIAlzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19MT1JFRk5PSCk7CiAJc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfTE9SRUZOT0wpOwotCWFocmM9MjU2KnNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9IKSArIAorCWFocmM9MjU2KnNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9IKSArCiAJICAgIHNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9MKTsKIAlhbHJjPTI1NipzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19MT1JFRk5PSCkgKwogCSAgICBzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19MT1JFRk5PTCk7CkBAIC0yODcsMTIgKzI4NywxMiBAQAogewogCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gdXJiLT5jb250ZXh0OwogCWludCBzdGF0dXM7Ci0JCisKIAlpZiAoIXNlNDAxLT5kZXYpIHsKIAkJaW5mbygib2hvaDogZGV2aWNlIHZhcG91cmlzaGVkIik7CiAJCXJldHVybjsKIAl9Ci0JCisKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgogCQkvKiBzdWNjZXNzICovCkBAIC0zNjgsNyArMzY4LDcgQEAKIAkJaWYgKHNlNDAxLT5udWxscGFja2V0cyA+IFNFNDAxX01BWF9OVUxMUEFDS0VUUykgewogCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnNlNDAxLT53cSkpIHsKIAkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNlNDAxLT53cSk7Ci0JCQl9CQkKKwkJCX0KIAkJfQogCX0KIApAQCAtNDMzLDggKzQzMyw4IEBACiAJaW50IGVycj0wLCBpOwogCXNlNDAxLT5zdHJlYW1pbmc9MTsKIAotICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAxLCBOVUxMLCAwKTsKLSAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAxLCBOVUxMLCAwKTsKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAxLCBOVUxMLCAwKTsKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDEsIE5VTEwsIDApOwogCiAJLyogU2V0IHBpY3R1cmUgc2V0dGluZ3MgKi8KIAlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19NT0RFX0IsIDB4MDUpOy8qd2luZG93ZWQgKyBwaXggaW50ZyAqLwpAQCAtNTcxLDcgKzU3MSw3IEBACiAJfQogCiAJLyogRmlyc3QgdGhyZWUgYXJlIGFic29sdXRlLCBhbGwgb3RoZXJzIHJlbGF0aXZlLgotCSAqIEZvcm1hdCBpcyByZ2IgZnJvbSByaWdodCB0byBsZWZ0IChtaXJyb3JyZWQgaW1hZ2UpLCAKKwkgKiBGb3JtYXQgaXMgcmdiIGZyb20gcmlnaHQgdG8gbGVmdCAobWlycm9ycmVkIGltYWdlKSwKIAkgKiB3ZSBmbGlwIGl0IHRvIGdldCBiZ3IgZnJvbSBsZWZ0IHRvIHJpZ2h0LiAqLwogCWlmIChmcmFtZS0+Y3VybGluZXBpeCA8IDMpIHsKIAkJKihmcmFtZS0+Y3VybGluZS1mcmFtZS0+Y3VybGluZXBpeCk9MStkYXRhKjQ7CkBAIC03MDMsNyArNzAzLDcgQEAKIAlpbnQgd2lkdGg9c2U0MDEtPmN3aWR0aDsKIAlpbnQgYmxpbmVvZmZzZXQ9MCwgYmxpbmU7CiAJaW50IGxpbmVsZW5ndGg9d2lkdGgqMywgaTsKLQkKKwogCiAJaWYgKGZyYW1lLT5jdXJwaXg9PTApIHsKIAkJaWYgKGZyYW1lLT5ncmFic3RhdGU9PUZSQU1FX1JFQURZKSB7CkBAIC04MzEsNyArODMxLDcgQEAKIAkJCXNlNDAxLT5udWxscGFja2V0cz0wOwogCQkJaW5mbygidG8gbWFueSBudWxsIGxlbmd0aCBwYWNrZXRzLCByZXN0YXJ0aW5nIGNhcHR1cmUiKTsKIAkJCXNlNDAxX3N0b3Bfc3RyZWFtKHNlNDAxKTsKLQkJCXNlNDAxX3N0YXJ0X3N0cmVhbShzZTQwMSk7CQkJCisJCQlzZTQwMV9zdGFydF9zdHJlYW0oc2U0MDEpOwogCQl9IGVsc2UgewogCQkJaWYgKHNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX3VzZV0uc3RhdGUhPUJVRkZFUl9SRUFEWSkgewogCQkJCXNlNDAxLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGU9RlJBTUVfRVJST1I7CkBAIC04NjYsNyArODY2LDcgQEAKIHsKIAlpbnQgaTsKIAotICAgICAgICBzZTQwMS0+ZGV2ID0gTlVMTDsKKwlzZTQwMS0+ZGV2ID0gTlVMTDsKIAogCWZvciAoaT0wOyBpPFNFNDAxX05VTVNCVUY7IGkrKykKIAkJaWYgKHNlNDAxLT51cmJbaV0pIHsKQEAgLTg4Miw5ICs4ODIsOSBAQAogCQl1c2Jfa2lsbF91cmIoc2U0MDEtPmludHVyYik7CiAJCXVzYl9mcmVlX3VyYihzZTQwMS0+aW50dXJiKTsKIAl9Ci0gICAgICAgIGluZm8oIiVzIGRpc2Nvbm5lY3RlZCIsIHNlNDAxLT5jYW1lcmFfbmFtZSk7CisJaW5mbygiJXMgZGlzY29ubmVjdGVkIiwgc2U0MDEtPmNhbWVyYV9uYW1lKTsKIAotICAgICAgICAvKiBGcmVlIHRoZSBtZW1vcnkgKi8KKwkvKiBGcmVlIHRoZSBtZW1vcnkgKi8KIAlrZnJlZShzZTQwMS0+d2lkdGgpOwogCWtmcmVlKHNlNDAxLT5oZWlnaHQpOwogCWtmcmVlKHNlNDAxKTsKQEAgLTkxMCw3ICs5MTAsNyBAQAogCXNlNDAxLT5mYnVmID0gcnZtYWxsb2Moc2U0MDEtPm1heGZyYW1lc2l6ZSAqIFNFNDAxX05VTUZSQU1FUyk7CiAJaWYgKHNlNDAxLT5mYnVmKQogCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7Ci0JZWxzZSAKKwllbHNlCiAJCWVyciA9IC1FTk9NRU07CiAJc2U0MDEtPnVzZXIgPSAhZXJyOwogCkBAIC05MjAsMTEgKzkyMCwxMSBAQAogc3RhdGljIGludCBzZTQwMV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgIHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKilkZXY7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSAoc3RydWN0IHVzYl9zZTQwMSAqKWRldjsKIAlpbnQgaTsKIAogCXJ2ZnJlZShzZTQwMS0+ZmJ1Ziwgc2U0MDEtPm1heGZyYW1lc2l6ZSAqIFNFNDAxX05VTUZSQU1FUyk7Ci0gICAgICAgIGlmIChzZTQwMS0+cmVtb3ZlZCkgeworCWlmIChzZTQwMS0+cmVtb3ZlZCkgewogCQl1c2Jfc2U0MDFfcmVtb3ZlX2Rpc2Nvbm5lY3RlZChzZTQwMSk7CiAJCWluZm8oImRldmljZSB1bnJlZ2lzdGVyZWQiKTsKIAl9IGVsc2UgewpAQCAtOTQyLDEyICs5NDIsMTIgQEAKIAkJCSAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgIHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKil2ZGV2OworCXN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKil2ZGV2OwogCi0gICAgICAgIGlmICghc2U0MDEtPmRldikKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKKwlpZiAoIXNlNDAxLT5kZXYpCisJCXJldHVybiAtRUlPOwogCi0gICAgICAgIHN3aXRjaCAoY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIFZJRElPQ0dDQVA6CiAJewogCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqYiA9IGFyZzsKQEAgLTk4MSw4ICs5ODEsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiAwOwogCX0KLSAgICAgICAgY2FzZSBWSURJT0NHUElDVDoKLSAgICAgICAgeworCWNhc2UgVklESU9DR1BJQ1Q6CisJewogCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKIAogCQlzZTQwMV9nZXRfcGljdChzZTQwMSwgcCk7CkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCQlpZiAoc2U0MDFfc2V0X3NpemUoc2U0MDEsIHZ3LT53aWR0aCwgdnctPmhlaWdodCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIDA7Ci0gICAgICAgIH0KKwl9CiAJY2FzZSBWSURJT0NHV0lOOgogCXsKIAkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CkBAIC0xMDk1LDExICsxMDk1LDExIEBACiAJY2FzZSBWSURJT0NHQVVESU86CiAJY2FzZSBWSURJT0NTQVVESU86CiAJCXJldHVybiAtRUlOVkFMOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7Ci0gICAgICAgIH0gLyogZW5kIHN3aXRjaCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfSAvKiBlbmQgc3dpdGNoICovCiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2U0MDFfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0xMTQyLDcgKzExNDIsNyBAQAogCiAJc2U0MDEtPmZyYW1lWzBdLmdyYWJzdGF0ZT1GUkFNRV9VTlVTRUQ7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsJCisJCXJldHVybiByZXQ7CiAJaWYgKGNvcHlfdG9fdXNlcihidWYsIHNlNDAxLT5mcmFtZVswXS5kYXRhLCByZWFsY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMTE1NywyMSArMTE1NywyMSBAQAogCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZC12bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOwogCi0JZG93bigmc2U0MDEtPmxvY2spOworCW11dGV4X2xvY2soJnNlNDAxLT5sb2NrKTsKIAogCWlmIChzZTQwMS0+ZGV2ID09IE5VTEwpIHsKLQkJdXAoJnNlNDAxLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzZTQwMS0+bG9jayk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAoc2l6ZSA+ICgoKFNFNDAxX05VTUZSQU1FUyAqIHNlNDAxLT5tYXhmcmFtZXNpemUpICsgUEFHRV9TSVpFIC0gMSkgJiB+KFBBR0VfU0laRSAtIDEpKSkgewotCQl1cCgmc2U0MDEtPmxvY2spOworCQltdXRleF91bmxvY2soJnNlNDAxLT5sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXBvcyA9ICh1bnNpZ25lZCBsb25nKXNlNDAxLT5mYnVmOwogCXdoaWxlIChzaXplID4gMCkgewogCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOwogCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKSB7Ci0JCQl1cCgmc2U0MDEtPmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZzZTQwMS0+bG9jayk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQlzdGFydCArPSBQQUdFX1NJWkU7CkBAIC0xMTgxLDI2ICsxMTgxLDI2IEBACiAJCWVsc2UKIAkJCXNpemUgPSAwOwogCX0KLQl1cCgmc2U0MDEtPmxvY2spOworCW11dGV4X3VubG9jaygmc2U0MDEtPmxvY2spOwogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZTQwMV9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotICAgICAgICAub3BlbiA9ICAgICAgICAgc2U0MDFfb3BlbiwKLSAgICAgICAgLnJlbGVhc2UgPSAgICAgIHNlNDAxX2Nsb3NlLAotICAgICAgICAucmVhZCA9ICAgICAgICAgc2U0MDFfcmVhZCwKLSAgICAgICAgLm1tYXAgPSAgICAgICAgIHNlNDAxX21tYXAsCisJLm9wZW4gPSAgICAgICAgIHNlNDAxX29wZW4sCisJLnJlbGVhc2UgPSAgICAgIHNlNDAxX2Nsb3NlLAorCS5yZWFkID0gICAgICAgICBzZTQwMV9yZWFkLAorCS5tbWFwID0gICAgICAgICBzZTQwMV9tbWFwLAogCS5pb2N0bCA9ICAgICAgICBzZTQwMV9pb2N0bCwKIAkuY29tcGF0X2lvY3RsID0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgPSAgICAgICBub19sbHNlZWssCiB9Owogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2U0MDFfdGVtcGxhdGUgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCi0gICAgICAgIC5uYW1lID0gICAgICAgICAic2U0MDEgVVNCIGNhbWVyYSIsCi0gICAgICAgIC50eXBlID0gICAgICAgICBWSURfVFlQRV9DQVBUVVJFLAotICAgICAgICAuaGFyZHdhcmUgPSAgICAgVklEX0hBUkRXQVJFX1NFNDAxLAorCS5uYW1lID0gICAgICAgICAic2U0MDEgVVNCIGNhbWVyYSIsCisJLnR5cGUgPSAgICAgICAgIFZJRF9UWVBFX0NBUFRVUkUsCisJLmhhcmR3YXJlID0gICAgIFZJRF9IQVJEV0FSRV9TRTQwMSwKIAkuZm9wcyA9ICAgICAgICAgJnNlNDAxX2ZvcHMsCiB9OwogCkBAIC0xMjA5LDEyICsxMjA5LDEyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBzZTQwMV9pbml0KHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBpbnQgYnV0dG9uKQogewotICAgICAgICBpbnQgaT0wLCByYzsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjcFsweDQwXTsKKwlpbnQgaT0wLCByYzsKKwl1bnNpZ25lZCBjaGFyIGNwWzB4NDBdOwogCWNoYXIgdGVtcFsyMDBdOwogCiAJLyogbGVkIG9uICovCi0gICAgICAgIHNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9MRURfQ09OVFJPTCwgMSwgTlVMTCwgMCk7CisJc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0xFRF9DT05UUk9MLCAxLCBOVUxMLCAwKTsKIAogCS8qIGdldCBjYW1lcmEgZGVzY3JpcHRvciAqLwogCXJjPXNlNDAxX3NuZGN0cmwoMCwgc2U0MDEsIFNFNDAxX1JFUV9HRVRfQ0FNRVJBX0RFU0NSSVBUT1IsIDAsIGNwLCBzaXplb2YoY3ApKTsKQEAgLTEyNTQsNyArMTI1NCw3IEBACiAJCXJldHVybiAxOwogCX0KIAkvKiBzZXQgb3V0cHV0IG1vZGUgKEJBWUVSKSAqLwotICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfU0VUX09VVFBVVF9NT0RFLCBTRTQwMV9GT1JNQVRfQkFZRVIsIE5VTEwsIDApOworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9TRVRfT1VUUFVUX01PREUsIFNFNDAxX0ZPUk1BVF9CQVlFUiwgTlVMTCwgMCk7CiAKIAlyYz1zZTQwMV9zbmRjdHJsKDAsIHNlNDAxLCBTRTQwMV9SRVFfR0VUX0JSVCwgMCwgY3AsIHNpemVvZihjcCkpOwogCXNlNDAxLT5icmlnaHRuZXNzPWNwWzBdK2NwWzFdKjI1NjsKQEAgLTEyOTIsNzMgKzEyOTIsNzEgQEAKIAl9IGVsc2UKIAkJc2U0MDEtPmludHVyYj1OVUxMOwogCi0gICAgICAgIC8qIEZsYXNoIHRoZSBsZWQgKi8KLSAgICAgICAgc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0NBTUVSQV9QT1dFUiwgMSwgTlVMTCwgMCk7Ci0gICAgICAgIHNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9MRURfQ09OVFJPTCwgMSwgTlVMTCwgMCk7Ci0gICAgICAgIHNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIsIDAsIE5VTEwsIDApOworCS8qIEZsYXNoIHRoZSBsZWQgKi8KKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAxLCBOVUxMLCAwKTsKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDEsIE5VTEwsIDApOworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIsIDAsIE5VTEwsIDApOwogCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9MRURfQ09OVFJPTCwgMCwgTlVMTCwgMCk7CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2U0MDFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotICAgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppbnRlcmZhY2U7Ci0gICAgICAgIHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxOwotICAgICAgICBjaGFyICpjYW1lcmFfbmFtZT1OVUxMOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMTsKKwljaGFyICpjYW1lcmFfbmFtZT1OVUxMOwogCWludCBidXR0b249MTsKIAotICAgICAgICAvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KLSAgICAgICAgaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKwkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KKwlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotICAgICAgICBpbnRlcmZhY2UgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2M7CisJaW50ZXJmYWNlID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOwogCi0gICAgICAgIC8qIElzIGl0IGFuIHNlNDAxPyAqLwotICAgICAgICBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDAzZTggJiYKLSAgICAgICAgICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MDAwNCkgewotICAgICAgICAgICAgICAgIGNhbWVyYV9uYW1lPSJFbmRwb2ludHMvQW94IFNFNDAxIjsKLSAgICAgICAgfSBlbHNlIGlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MDQ3MSAmJgotICAgICAgICAgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHgwMzBiKSB7Ci0gICAgICAgICAgICAgICAgY2FtZXJhX25hbWU9IlBoaWxpcHMgUENWQzY2NUsiOwotICAgICAgICB9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNDdkICYmCisJLyogSXMgaXQgYW4gc2U0MDE/ICovCisJaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwM2U4ICYmCisJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MDAwNCkgeworCQljYW1lcmFfbmFtZT0iRW5kcG9pbnRzL0FveCBTRTQwMSI7CisJfSBlbHNlIGlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MDQ3MSAmJgorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDAzMGIpIHsKKwkJY2FtZXJhX25hbWU9IlBoaWxpcHMgUENWQzY2NUsiOworCX0gZWxzZSBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDA0N2QgJiYKIAkgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHg1MDAxKSB7CiAJCWNhbWVyYV9uYW1lPSJLZW5zaW5ndG9uIFZpZGVvQ0FNIDY3MDE0IjsKLSAgICAgICAgfSBlbHNlIGlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MDQ3ZCAmJgorCX0gZWxzZSBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDA0N2QgJiYKIAkgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHg1MDAyKSB7CiAJCWNhbWVyYV9uYW1lPSJLZW5zaW5ndG9uIFZpZGVvQ0FNIDY3MDEoNS83KSI7Ci0gICAgICAgIH0gZWxzZSBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDA0N2QgJiYKKwl9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNDdkICYmCiAJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NTAwMykgewogCQljYW1lcmFfbmFtZT0iS2Vuc2luZ3RvbiBWaWRlb0NBTSA2NzAxNiI7CiAJCWJ1dHRvbj0wOwogCX0gZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIAotICAgICAgICAvKiBDaGVja2luZyB2ZW5kb3IvcHJvZHVjdCBzaG91bGQgYmUgZW5vdWdoLCBidXQgd2hhdCB0aGUgaGVsbCAqLwotICAgICAgICBpZiAoaW50ZXJmYWNlLT5iSW50ZXJmYWNlQ2xhc3MgIT0gMHgwMCkKKwkvKiBDaGVja2luZyB2ZW5kb3IvcHJvZHVjdCBzaG91bGQgYmUgZW5vdWdoLCBidXQgd2hhdCB0aGUgaGVsbCAqLworCWlmIChpbnRlcmZhY2UtPmJJbnRlcmZhY2VDbGFzcyAhPSAweDAwKQogCQlyZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgaWYgKGludGVyZmFjZS0+YkludGVyZmFjZVN1YkNsYXNzICE9IDB4MDApCisJaWYgKGludGVyZmFjZS0+YkludGVyZmFjZVN1YkNsYXNzICE9IDB4MDApCiAJCXJldHVybiAtRU5PREVWOwogCi0gICAgICAgIC8qIFdlIGZvdW5kIG9uZSAqLwotICAgICAgICBpbmZvKCJTRTQwMSBjYW1lcmEgZm91bmQ6ICVzIiwgY2FtZXJhX25hbWUpOworCS8qIFdlIGZvdW5kIG9uZSAqLworCWluZm8oIlNFNDAxIGNhbWVyYSBmb3VuZDogJXMiLCBjYW1lcmFfbmFtZSk7CiAKLSAgICAgICAgaWYgKChzZTQwMSA9IGttYWxsb2Moc2l6ZW9mKCpzZTQwMSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZXJyKCJjb3VsZG4ndCBrbWFsbG9jIHNlNDAxIHN0cnVjdCIpOworCWlmICgoc2U0MDEgPSBremFsbG9jKHNpemVvZigqc2U0MDEpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQllcnIoImNvdWxkbid0IGttYWxsb2Mgc2U0MDEgc3RydWN0Iik7CiAJCXJldHVybiAtRU5PTUVNOwotICAgICAgICB9CisJfQogCi0gICAgICAgIG1lbXNldChzZTQwMSwgMCwgc2l6ZW9mKCpzZTQwMSkpOwotCi0gICAgICAgIHNlNDAxLT5kZXYgPSBkZXY7Ci0gICAgICAgIHNlNDAxLT5pZmFjZSA9IGludGVyZmFjZS0+YkludGVyZmFjZU51bWJlcjsKLSAgICAgICAgc2U0MDEtPmNhbWVyYV9uYW1lID0gY2FtZXJhX25hbWU7CisJc2U0MDEtPmRldiA9IGRldjsKKwlzZTQwMS0+aWZhY2UgPSBpbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXI7CisJc2U0MDEtPmNhbWVyYV9uYW1lID0gY2FtZXJhX25hbWU7CiAKIAlpbmZvKCJmaXJtd2FyZSB2ZXJzaW9uOiAlMDJ4IiwgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgJiAyNTUpOwogCi0gICAgICAgIGlmIChzZTQwMV9pbml0KHNlNDAxLCBidXR0b24pKSB7CisJaWYgKHNlNDAxX2luaXQoc2U0MDEsIGJ1dHRvbikpIHsKIAkJa2ZyZWUoc2U0MDEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMzY2LDcgKzEzNjQsNyBAQAogCW1lbWNweSgmc2U0MDEtPnZkZXYsICZzZTQwMV90ZW1wbGF0ZSwgc2l6ZW9mKHNlNDAxX3RlbXBsYXRlKSk7CiAJbWVtY3B5KHNlNDAxLT52ZGV2Lm5hbWUsIHNlNDAxLT5jYW1lcmFfbmFtZSwgc3RybGVuKHNlNDAxLT5jYW1lcmFfbmFtZSkpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlNDAxLT53cSk7Ci0JaW5pdF9NVVRFWCgmc2U0MDEtPmxvY2spOworCW11dGV4X2luaXQoJnNlNDAxLT5sb2NrKTsKIAl3bWIoKTsKIAogCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnNlNDAxLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPT0gLTEpIHsKQEAgLTEzNzcsNyArMTM3NSw3IEBACiAJaW5mbygicmVnaXN0ZXJlZCBuZXcgdmlkZW8gZGV2aWNlOiB2aWRlbyVkIiwgc2U0MDEtPnZkZXYubWlub3IpOwogCiAJdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgc2U0MDEpOwotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2U0MDFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTE0MDIsMTAgKzE0MDAsMTAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlNDAxX2RyaXZlciA9IHsKLSAgICAgICAgLm5hbWUJCT0gInNlNDAxIiwKLSAgICAgICAgLmlkX3RhYmxlCT0gZGV2aWNlX3RhYmxlLAorCS5uYW1lCQk9ICJzZTQwMSIsCisJLmlkX3RhYmxlCT0gZGV2aWNlX3RhYmxlLAogCS5wcm9iZQkJPSBzZTQwMV9wcm9iZSwKLSAgICAgICAgLmRpc2Nvbm5lY3QJPSBzZTQwMV9kaXNjb25uZWN0LAorCS5kaXNjb25uZWN0CT0gc2U0MDFfZGlzY29ubmVjdCwKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2U0MDEuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmgKaW5kZXggMmU1ODQ2Zi4uYTdhMjE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NlNDAxLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBzZTQwMV9ERUJVRwkvKiBUdXJuIG9uIGRlYnVnIG1lc3NhZ2VzICovCiAKQEAgLTE3Niw3ICsxNzcsNyBAQAogCWludCBleHBvc2VfbTsKIAlpbnQgZXhwb3NlX2w7CiAJaW50IHJlc2V0bGV2ZWw7Ci0JCisKIAlpbnQgZW5oYW5jZTsKIAogCWludCBmb3JtYXQ7CkBAIC0xODksNyArMTkwLDcgQEAKIAlpbnQgbWF4ZnJhbWVzaXplOwogCWludCBjZnJhbWVzaXplOwkJLyogY3VycmVudCBmcmFtZXNpemUgKi8KIAotCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KIAlpbnQgcmVtb3ZlZDsJCS8qIGRldmljZSBkaXNjb25uZWN0ZWQgKi8KIApAQCAtMTk5LDEyICsyMDAsMTIgQEAKIAogCXN0cnVjdCB1cmIgKnVyYltTRTQwMV9OVU1TQlVGXTsKIAlzdHJ1Y3QgdXJiICppbnR1cmI7Ci0JCisKIAlpbnQgYnV0dG9uOwogCWludCBidXR0b25wcmVzc2VkOwogCiAJaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgZnJhbWUgKi8KLQlzdHJ1Y3Qgc2U0MDFfZnJhbWUgZnJhbWVbU0U0MDFfTlVNRlJBTUVTXTsJCisJc3RydWN0IHNlNDAxX2ZyYW1lIGZyYW1lW1NFNDAxX05VTUZSQU1FU107CiAJaW50IHJlYWRjb3VudDsKIAlpbnQgZnJhbWVjb3VudDsKIAlpbnQgZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2YWQzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK3NuOWMxMDItb2JqcyAgICA6PSBzbjljMTAyX2NvcmUubyBzbjljMTAyX2h2NzEzMWQubyBzbjljMTAyX21pMDM0My5vIFwKKwkJICAgc245YzEwMl9vdjc2MzAubyBzbjljMTAyX3BhczEwNmIubyBzbjljMTAyX3BhczIwMmJjYS5vIFwKKwkJICAgc245YzEwMl9wYXMyMDJiY2IubyBzbjljMTAyX3RhczUxMTBjMWIubyBcCisJCSAgIHNuOWMxMDJfdGFzNTEzMGQxYi5vCisKK29iai0kKENPTkZJR19VU0JfU045QzEwMikgICAgICAgKz0gc245YzEwMi5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyLmgKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvc245YzEwMi5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMi5oCmluZGV4IDE3ZDYwYzEuLjJjNmZmMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMi5oCkBAIC0zMyw3ICszMyw5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAKICNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgogCkBAIC01MCw2ICs1Miw3IEBACiAjZGVmaW5lIFNOOUMxMDJfQUxURVJOQVRFX1NFVFRJTkcgOAogI2RlZmluZSBTTjlDMTAyX1VSQl9USU1FT1VUICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMiAqIFNOOUMxMDJfSVNPX1BBQ0tFVFMpCiAjZGVmaW5lIFNOOUMxMDJfQ1RSTF9USU1FT1VUICAgICAgMzAwCisjZGVmaW5lIFNOOUMxMDJfRlJBTUVfVElNRU9VVCAgICAgMgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTEwNywxNiArMTEwLDE3IEBACiAKIHN0cnVjdCBzbjljMTAyX21vZHVsZV9wYXJhbSB7CiAJdTggZm9yY2VfbXVubWFwOworCXUxNiBmcmFtZV90aW1lb3V0OwogfTsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoc245YzEwMl9zeXNmc19sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoc245YzEwMl9zeXNmc19sb2NrKTsKIHN0YXRpYyBERUNMQVJFX1JXU0VNKHNuOWMxMDJfZGlzY29ubmVjdCk7CiAKIHN0cnVjdCBzbjljMTAyX2RldmljZSB7CiAJc3RydWN0IHZpZGVvX2RldmljZSogdjRsZGV2OwogCiAJZW51bSBzbjljMTAyX2JyaWRnZSBicmlkZ2U7Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3I7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yIHNlbnNvcjsKIAogCXN0cnVjdCB1c2JfZGV2aWNlKiB1c2JkZXY7CiAJc3RydWN0IHVyYiogdXJiW1NOOUMxMDJfVVJCU107CkBAIC0xNDEsMTkgKzE0NSwyOCBAQAogCWVudW0gc245YzEwMl9kZXZfc3RhdGUgc3RhdGU7CiAJdTggdXNlcnM7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIGRldl9zZW0sIGZpbGVvcF9zZW07CisJc3RydWN0IG11dGV4IGRldl9tdXRleCwgZmlsZW9wX211dGV4OwogCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuLCB3YWl0X2ZyYW1lLCB3YWl0X3N0cmVhbTsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RydWN0IHNuOWMxMDJfZGV2aWNlKgorc245YzEwMl9tYXRjaF9pZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWlmICh1c2JfbWF0Y2hfaWQodXNiX2lmbnVtX3RvX2lmKGNhbS0+dXNiZGV2LCAwKSwgaWQpKQorCQlyZXR1cm4gY2FtOworCisJcmV0dXJuIE5VTEw7Cit9CisKKwogdm9pZAogc245YzEwMl9hdHRhY2hfc2Vuc29yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQorCQkgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKIHsKLQljYW0tPnNlbnNvciA9IHNlbnNvcjsKLQljYW0tPnNlbnNvci0+dXNiZGV2ID0gY2FtLT51c2JkZXY7CisJbWVtY3B5KCZjYW0tPnNlbnNvciwgc2Vuc29yLCBzaXplb2Yoc3RydWN0IHNuOWMxMDJfc2Vuc29yKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MCw3ICsxODMsNyBAQAogCQkJZGV2X2luZm8oJmNhbS0+dXNiZGV2LT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgXAogCQllbHNlIGlmICgobGV2ZWwpID49IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJCWRldl9pbmZvKCZjYW0tPnVzYmRldi0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCAgICAgIFwKLQkJCSAgICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgIFwKKwkJCQkgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogIwlkZWZpbmUgVjRMREJHKGxldmVsLCBuYW1lLCBjbWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTg1LDcgKzE5OCw3IEBACiAJCQlwcl9pbmZvKCJzbjljMTAyOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCiAJCWVsc2UgaWYgKChsZXZlbCkgPT0gMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkJcHJfZGVidWcoInNuOWMxMDI6IFslczolZF0gIiBmbXQgIlxuIiwgX19GVU5DVElPTl9fLCAgXAotCQkJICAgICAgICAgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAjZWxzZQpAQCAtMTk2LDcgKzIwOSw4IEBACiAKICN1bmRlZiBQREJHCiAjZGVmaW5lIFBEQkcoZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKQorZGV2X2luZm8oJmNhbS0+dXNiZGV2LT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncykKIAogI3VuZGVmIFBEQkdHCiAjZGVmaW5lIFBEQkdHKGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApIC8qIHBsYWNlaG9sZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2NvcmUuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCmluZGV4IGM4MTM5N2UuLmVhNDM5NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMjUsMTEgKzI1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpAQCAtNDksOCArNDcsOCBAQAogI2RlZmluZSBTTjlDMTAyX01PRFVMRV9BVVRIT1IgICAiKEMpIDIwMDQtMjAwNiBMdWNhIFJpc29saWEiCiAjZGVmaW5lIFNOOUMxMDJfQVVUSE9SX0VNQUlMICAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCiAjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX0xJQ0VOU0UgICJHUEwiCi0jZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04gICIxOjEuMjYiCi0jZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMSwgMCwgMjYpCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT04gICIxOjEuMjciCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMSwgMCwgMjcpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNjQsNDQgKzYyLDUzIEBACiBzdGF0aWMgc2hvcnQgdmlkZW9fbnJbXSA9IHtbMCAuLi4gU045QzEwMl9NQVhfREVWSUNFUy0xXSA9IC0xfTsKIG1vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgc2hvcnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwKLSAgICAgICAgICAgICAgICAgIlxuPC0xfG5bLC4uLl0+IFNwZWNpZnkgVjRMMiBtaW5vciBtb2RlIG51bWJlci4iCi0gICAgICAgICAgICAgICAgICJcbiAtMSA9IHVzZSBuZXh0IGF2YWlsYWJsZSAoZGVmYXVsdCkiCi0gICAgICAgICAgICAgICAgICJcbiAgbiA9IHVzZSBtaW5vciBudW1iZXIgbiAoaW50ZWdlciA+PSAwKSIKLSAgICAgICAgICAgICAgICAgIlxuWW91IGNhbiBzcGVjaWZ5IHVwIHRvICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9NQVhfREVWSUNFUykKLSAgICAgICAgICAgICAgICAgIiBjYW1lcmFzIHRoaXMgd2F5LiIKLSAgICAgICAgICAgICAgICAgIlxuRm9yIGV4YW1wbGU6IgotICAgICAgICAgICAgICAgICAiXG52aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byIKLSAgICAgICAgICAgICAgICAgIlxudGhlIHNlY29uZCBjYW1lcmEgYW5kIHVzZSBhdXRvIGZvciB0aGUgZmlyc3QiCi0gICAgICAgICAgICAgICAgICJcbm9uZSBhbmQgZm9yIGV2ZXJ5IG90aGVyIGNhbWVyYS4iCi0gICAgICAgICAgICAgICAgICJcbiIpOworCQkgIlxuPC0xfG5bLC4uLl0+IFNwZWNpZnkgVjRMMiBtaW5vciBtb2RlIG51bWJlci4iCisJCSAiXG4gLTEgPSB1c2UgbmV4dCBhdmFpbGFibGUgKGRlZmF1bHQpIgorCQkgIlxuICBuID0gdXNlIG1pbm9yIG51bWJlciBuIChpbnRlZ2VyID49IDApIgorCQkgIlxuWW91IGNhbiBzcGVjaWZ5IHVwIHRvICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9NQVhfREVWSUNFUykKKwkJICIgY2FtZXJhcyB0aGlzIHdheS4iCisJCSAiXG5Gb3IgZXhhbXBsZToiCisJCSAiXG52aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byIKKwkJICJcbnRoZSBzZWNvbmQgY2FtZXJhIGFuZCB1c2UgYXV0byBmb3IgdGhlIGZpcnN0IgorCQkgIlxub25lIGFuZCBmb3IgZXZlcnkgb3RoZXIgY2FtZXJhLiIKKwkJICJcbiIpOwogCi1zdGF0aWMgc2hvcnQgZm9yY2VfbXVubWFwW10gPSB7WzAgLi4uIFNOOUMxMDJfTUFYX0RFVklDRVMtMV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTjlDMTAyX0ZPUkNFX01VTk1BUH07CitzdGF0aWMgc2hvcnQgZm9yY2VfbXVubWFwW10gPSB7WzAgLi4uIFNOOUMxMDJfTUFYX0RFVklDRVMtMV0gPQorCQkJICAgICAgIFNOOUMxMDJfRk9SQ0VfTVVOTUFQfTsKIG1vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9tdW5tYXAsIGJvb2wsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9tdW5tYXAsCi0gICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IEZvcmNlIHRoZSBhcHBsaWNhdGlvbiB0byB1bm1hcCBwcmV2aW91c2x5IgotICAgICAgICAgICAgICAgICAiXG5tYXBwZWQgYnVmZmVyIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBhbnkgVklESU9DX1NfQ1JPUCBvciIKLSAgICAgICAgICAgICAgICAgIlxuVklESU9DX1NfRk1UIGlvY3RsJ3MuIE5vdCBhbGwgdGhlIGFwcGxpY2F0aW9ucyBzdXBwb3J0IgotICAgICAgICAgICAgICAgICAiXG50aGlzIGZlYXR1cmUuIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIGZvciBlYWNoIgotICAgICAgICAgICAgICAgICAiXG5kZXRlY3RlZCBjYW1lcmEuIgotICAgICAgICAgICAgICAgICAiXG4gMCA9IGRvIG5vdCBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIgotICAgICAgICAgICAgICAgICAiXG4gMSA9IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmcgKHNhdmUgbWVtb3J5KSIKLSAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFNOOUMxMDJfRk9SQ0VfTVVOTUFQKSIuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKKwkJICJcbjwwfDFbLC4uLl0+IEZvcmNlIHRoZSBhcHBsaWNhdGlvbiB0byB1bm1hcCBwcmV2aW91c2x5IgorCQkgIlxubWFwcGVkIGJ1ZmZlciBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgYW55IFZJRElPQ19TX0NST1Agb3IiCisJCSAiXG5WSURJT0NfU19GTVQgaW9jdGwncy4gTm90IGFsbCB0aGUgYXBwbGljYXRpb25zIHN1cHBvcnQiCisJCSAiXG50aGlzIGZlYXR1cmUuIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIGZvciBlYWNoIgorCQkgIlxuZGV0ZWN0ZWQgY2FtZXJhLiIKKwkJICJcbiAwID0gZG8gbm90IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmciCisJCSAiXG4gMSA9IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmcgKHNhdmUgbWVtb3J5KSIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX0ZPUkNFX01VTk1BUCkiLiIKKwkJICJcbiIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGZyYW1lX3RpbWVvdXRbXSA9IHtbMCAuLi4gU045QzEwMl9NQVhfREVWSUNFUy0xXSA9CisJCQkJICAgICAgIFNOOUMxMDJfRlJBTUVfVElNRU9VVH07Cittb2R1bGVfcGFyYW1fYXJyYXkoZnJhbWVfdGltZW91dCwgdWludCwgTlVMTCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZyYW1lX3RpbWVvdXQsCisJCSAiXG48blssLi4uXT4gVGltZW91dCBmb3IgYSB2aWRlbyBmcmFtZSBpbiBzZWNvbmRzLiIKKwkJICJcblRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIGZvciBlYWNoIGRldGVjdGVkIGNhbWVyYS4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9GUkFNRV9USU1FT1VUKSIuIgorCQkgIlxuIik7CiAKICNpZmRlZiBTTjlDMTAyX0RFQlVHCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVidWcgPSBTTjlDMTAyX0RFQlVHX0xFVkVMOwogbW9kdWxlX3BhcmFtKGRlYnVnLCB1c2hvcnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKLSAgICAgICAgICAgICAgICAgIlxuPG4+IERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6IgotICAgICAgICAgICAgICAgICAiXG4wID0gbm9uZSAodXNlIGNhcmVmdWxseSkiCi0gICAgICAgICAgICAgICAgICJcbjEgPSBjcml0aWNhbCBlcnJvcnMiCi0gICAgICAgICAgICAgICAgICJcbjIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMiCi0gICAgICAgICAgICAgICAgICJcbjMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMiCi0gICAgICAgICAgICAgICAgICJcbkxldmVsIDMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIG9ubHksIHdoZW4gb25seSAiCi0gICAgICAgICAgICAgICAgICJvbmUgZGV2aWNlIGlzIHVzZWQuIgotICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9ERUJVR19MRVZFTCkiLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48bj4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gMzoiCisJCSAiXG4wID0gbm9uZSAodXNlIGNhcmVmdWxseSkiCisJCSAiXG4xID0gY3JpdGljYWwgZXJyb3JzIgorCQkgIlxuMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9ucyIKKwkJICJcbjMgPSBtb3JlIHZlcmJvc2UgbWVzc2FnZXMiCisJCSAiXG5MZXZlbCAzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBvbmx5LCB3aGVuIG9ubHkgIgorCQkgIm9uZSBkZXZpY2UgaXMgdXNlZC4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9ERUJVR19MRVZFTCkiLiIKKwkJICJcbiIpOwogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEyNCwxNiArMTMxLDE2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHUzMiAKLXNuOWMxMDJfcmVxdWVzdF9idWZmZXJzKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1MzIgY291bnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBzbjljMTAyX2lvX21ldGhvZCBpbykKK3N0YXRpYyB1MzIKK3NuOWMxMDJfcmVxdWVzdF9idWZmZXJzKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1MzIgY291bnQsCisJCQllbnVtIHNuOWMxMDJfaW9fbWV0aG9kIGlvKQogewotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHAgPSAmKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0KTsKLQlzdHJ1Y3QgdjRsMl9yZWN0KiByID0gJihjYW0tPnNlbnNvci0+Y3JvcGNhcC5ib3VuZHMpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHAgPSAmKGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQpOworCXN0cnVjdCB2NGwyX3JlY3QqIHIgPSAmKGNhbS0+c2Vuc29yLmNyb3BjYXAuYm91bmRzKTsKIAljb25zdCBzaXplX3QgaW1hZ2VzaXplID0gY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwIHx8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgIGlvID09IElPX1JFQUQgPwotCSAgICAgICAgICAgICAgICAgICAgICAgICAocC0+d2lkdGggKiBwLT5oZWlnaHQgKiBwLT5wcml2KSAvIDggOgotCSAgICAgICAgICAgICAgICAgICAgICAgICAoci0+d2lkdGggKiByLT5oZWlnaHQgKiBwLT5wcml2KSAvIDg7CisJCQkJIGlvID09IElPX1JFQUQgPworCQkJCSAocC0+d2lkdGggKiBwLT5oZWlnaHQgKiBwLT5wcml2KSAvIDggOgorCQkJCSAoci0+d2lkdGggKiByLT5oZWlnaHQgKiBwLT5wcml2KSAvIDg7CiAJdm9pZCogYnVmZiA9IE5VTEw7CiAJdTMyIGk7CiAKQEAgLTIyNSw4ICsyMzIsOCBAQAogCQlyZXR1cm4gLTE7CiAKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgMCwgYnVmZiwgc2l6ZW9mKGJ1ZmYpLAotCSAgICAgICAgICAgICAgICAgICAgICBTTjlDMTAyX0NUUkxfVElNRU9VVCpzaXplb2YoYnVmZikpOworCQkJICAgICAgaW5kZXgsIDAsIGJ1ZmYsIHNpemVvZihidWZmKSwKKwkJCSAgICAgIFNOOUMxMDJfQ1RSTF9USU1FT1VUKnNpemVvZihidWZmKSk7CiAJaWYgKHJlcyA8IDApIHsKIAkJREJHKDMsICJGYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXJzIChpbmRleCAweCUwMlgsIGVycm9yICVkKSIsCiAJCSAgICBpbmRleCwgcmVzKTsKQEAgLTI1Miw3ICsyNTksNyBAQAogCSpidWZmID0gdmFsdWU7CiAKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgMCwgYnVmZiwgMSwgU045QzEwMl9DVFJMX1RJTUVPVVQpOworCQkJICAgICAgaW5kZXgsIDAsIGJ1ZmYsIDEsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkgewogCQlEQkcoMywgIkZhaWxlZCB0byB3cml0ZSBhIHJlZ2lzdGVyICh2YWx1ZSAweCUwMlgsIGluZGV4ICIKIAkJICAgICAgICIweCUwMlgsIGVycm9yICVkKSIsIHZhbHVlLCBpbmRleCwgcmVzKTsKQEAgLTI3Myw3ICsyODAsNyBAQAogCWludCByZXM7CiAKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweGMxLAotCSAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgMCwgYnVmZiwgMSwgU045QzEwMl9DVFJMX1RJTUVPVVQpOworCQkJICAgICAgaW5kZXgsIDAsIGJ1ZmYsIDEsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkKIAkJREJHKDMsICJGYWlsZWQgdG8gcmVhZCBhIHJlZ2lzdGVyIChpbmRleCAweCUwMlgsIGVycm9yICVkKSIsCiAJCSAgICBpbmRleCwgcmVzKTsKQEAgLTMxMiw4ICszMTksOCBAQAogCiAKIHN0YXRpYyBpbnQKLXNuOWMxMDJfaTJjX2RldGVjdF9yZWFkX2Vycm9yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKQorc245YzEwMl9pMmNfZGV0ZWN0X3JlYWRfZXJyb3Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJCQkgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKIHsKIAlpbnQgcjsKIAlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDgpOwpAQCAtMzIyLDggKzMyOSw4IEBACiAKIAogc3RhdGljIGludAotc245YzEwMl9pMmNfZGV0ZWN0X3dyaXRlX2Vycm9yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKK3NuOWMxMDJfaTJjX2RldGVjdF93cml0ZV9lcnJvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKIHsKIAlpbnQgcjsKIAlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDgpOwpAQCAtMzMxLDEwICszMzgsMTAgQEAKIH0KIAogCi1pbnQgCitpbnQKIHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggZGF0YTAsIHU4IGRhdGExLAotICAgICAgICAgICAgICAgICAgICAgICAgIHU4IG4sIHU4IGJ1ZmZlcltdKQorCQkJIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBkYXRhMCwgdTggZGF0YTEsCisJCQkgdTggbiwgdTggYnVmZmVyW10pCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKIAl1OCogZGF0YSA9IGNhbS0+Y29udHJvbF9idWZmZXI7CkBAIC0zNDIsMTIgKzM0OSwxMiBAQAogCiAJLyogV3JpdGUgY3ljbGUgKi8KIAlkYXRhWzBdID0gKChzZW5zb3ItPmludGVyZmFjZSA9PSBTTjlDMTAyX0kyQ18yV0lSRVMpID8gMHg4MCA6IDApIHwKLQkgICAgICAgICAgKChzZW5zb3ItPmZyZXF1ZW5jeSAmIFNOOUMxMDJfSTJDXzQwMEtIWikgPyAweDAxIDogMCkgfCAweDEwOworCQkgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApIHwgMHgxMDsKIAlkYXRhWzFdID0gZGF0YTA7IC8qIEkyQyBzbGF2ZSBpZCAqLwogCWRhdGFbMl0gPSBkYXRhMTsgLyogYWRkcmVzcyAqLwogCWRhdGFbN10gPSAweDEwOwogCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MDgsIDB4NDEsCi0JICAgICAgICAgICAgICAgICAgICAgIDB4MDgsIDAsIGRhdGEsIDgsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKKwkJCSAgICAgIDB4MDgsIDAsIGRhdGEsIDgsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkKIAkJZXJyICs9IHJlczsKIApAQCAtMzU1LDEyICszNjIsMTIgQEAKIAogCS8qIFJlYWQgY3ljbGUgLSBuIGJ5dGVzICovCiAJZGF0YVswXSA9ICgoc2Vuc29yLT5pbnRlcmZhY2UgPT0gU045QzEwMl9JMkNfMldJUkVTKSA/IDB4ODAgOiAwKSB8Ci0JICAgICAgICAgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApIHwKLQkgICAgICAgICAgKG4gPDwgNCkgfCAweDAyOworCQkgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApIHwKKwkJICAobiA8PCA0KSB8IDB4MDI7CiAJZGF0YVsxXSA9IGRhdGEwOwogCWRhdGFbN10gPSAweDEwOwogCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MDgsIDB4NDEsCi0JICAgICAgICAgICAgICAgICAgICAgIDB4MDgsIDAsIGRhdGEsIDgsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKKwkJCSAgICAgIDB4MDgsIDAsIGRhdGEsIDgsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKIAlpZiAocmVzIDwgMCkKIAkJZXJyICs9IHJlczsKIApAQCAtMzY4LDcgKzM3NSw3IEBACiAKIAkvKiBUaGUgZmlyc3QgcmVhZCBieXRlIHdpbGwgYmUgcGxhY2VkIGluIGRhdGFbNF0gKi8KIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDAwLCAweGMxLAotCSAgICAgICAgICAgICAgICAgICAgICAweDBhLCAwLCBkYXRhLCA1LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJCQkgICAgICAweDBhLCAwLCBkYXRhLCA1LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CiAJaWYgKHJlcyA8IDApCiAJCWVyciArPSByZXM7CiAKQEAgLTM4OSwxMCArMzk2LDEwIEBACiB9CiAKIAotaW50IAoraW50CiBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggbiwgdTggZGF0YTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRhdGExLCB1OCBkYXRhMiwgdTggZGF0YTMsIHU4IGRhdGE0LCB1OCBkYXRhNSkKKwkJCSAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsIHU4IG4sIHU4IGRhdGEwLAorCQkJICB1OCBkYXRhMSwgdTggZGF0YTIsIHU4IGRhdGEzLCB1OCBkYXRhNCwgdTggZGF0YTUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKIAl1OCogZGF0YSA9IGNhbS0+Y29udHJvbF9idWZmZXI7CkBAIC00MDAsOCArNDA3LDggQEAKIAogCS8qIFdyaXRlIGN5Y2xlLiBJdCB1c3VhbGx5IGlzIGFkZHJlc3MgKyB2YWx1ZSAqLwogCWRhdGFbMF0gPSAoKHNlbnNvci0+aW50ZXJmYWNlID09IFNOOUMxMDJfSTJDXzJXSVJFUykgPyAweDgwIDogMCkgfAotCSAgICAgICAgICAoKHNlbnNvci0+ZnJlcXVlbmN5ICYgU045QzEwMl9JMkNfNDAwS0haKSA/IDB4MDEgOiAwKQotCSAgICAgICAgICB8ICgobiAtIDEpIDw8IDQpOworCQkgICgoc2Vuc29yLT5mcmVxdWVuY3kgJiBTTjlDMTAyX0kyQ180MDBLSFopID8gMHgwMSA6IDApCisJCSAgfCAoKG4gLSAxKSA8PCA0KTsKIAlkYXRhWzFdID0gZGF0YTA7CiAJZGF0YVsyXSA9IGRhdGExOwogCWRhdGFbM10gPSBkYXRhMjsKQEAgLTQxMCw3ICs0MTcsNyBAQAogCWRhdGFbNl0gPSBkYXRhNTsKIAlkYXRhWzddID0gMHgxNDsKIAlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LCAweDQxLAotCSAgICAgICAgICAgICAgICAgICAgICAweDA4LCAwLCBkYXRhLCA4LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJCQkgICAgICAweDA4LCAwLCBkYXRhLCA4LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CiAJaWYgKHJlcyA8IDApCiAJCWVyciArPSByZXM7CiAKQEAgLTQzMCwzOCArNDM3LDMyIEBACiAKIGludAogc245YzEwMl9pMmNfdHJ5X3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggYWRkcmVzcykKKwkJICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggYWRkcmVzcykKIHsKIAlyZXR1cm4gc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgc2Vuc29yLCBzZW5zb3ItPmkyY19zbGF2ZV9pZCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIDEsIE5VTEwpOworCQkJCQlhZGRyZXNzLCAxLCBOVUxMKTsKIH0KIAogCiBpbnQKIHNuOWMxMDJfaTJjX3RyeV93cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggYWRkcmVzcywgdTggdmFsdWUpCisJCSAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSkKIHsKLQlyZXR1cm4gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sIHNlbnNvciwgMywgCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yLT5pMmNfc2xhdmVfaWQsIGFkZHJlc3MsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIDAsIDAsIDApOworCXJldHVybiBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgc2Vuc29yLCAzLAorCQkJCQkgc2Vuc29yLT5pMmNfc2xhdmVfaWQsIGFkZHJlc3MsCisJCQkJCSB2YWx1ZSwgMCwgMCwgMCk7CiB9CiAKIAogaW50IHNuOWMxMDJfaTJjX3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHU4IGFkZHJlc3MpCiB7Ci0JaWYgKCFjYW0tPnNlbnNvcikKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgY2FtLT5zZW5zb3IsIGFkZHJlc3MpOworCXJldHVybiBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZjYW0tPnNlbnNvciwgYWRkcmVzcyk7CiB9CiAKIAogaW50IHNuOWMxMDJfaTJjX3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB1OCBhZGRyZXNzLCB1OCB2YWx1ZSkKIHsKLQlpZiAoIWNhbS0+c2Vuc29yKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gc245YzEwMl9pMmNfdHJ5X3dyaXRlKGNhbSwgY2FtLT5zZW5zb3IsIGFkZHJlc3MsIHZhbHVlKTsKKwlyZXR1cm4gc245YzEwMl9pMmNfdHJ5X3dyaXRlKGNhbSwgJmNhbS0+c2Vuc29yLCBhZGRyZXNzLCB2YWx1ZSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ4Myw3ICs0ODQsNyBAQAogCQluID0gc2l6ZW9mKHNuOWMxMDNfc29mX2hlYWRlcikgLyBzb2ZsZW47CiAJfQogCi0gCWZvciAoaSA9IDA7IChsZW4gPj0gc29mbGVuKSAmJiAoaSA8PSBsZW4gLSBzb2ZsZW4pOyBpKyspCisJZm9yIChpID0gMDsgKGxlbiA+PSBzb2ZsZW4pICYmIChpIDw9IGxlbiAtIHNvZmxlbik7IGkrKykKIAkJZm9yIChqID0gMDsgaiA8IG47IGorKykKIAkJCS8qIFRoZSBpbnZhcmlhYmxlIHBhcnQgb2YgdGhlIGhlYWRlciBpcyA2IGJ5dGVzIGxvbmcgKi8KIAkJCWlmICgoY2FtLT5icmlkZ2UgIT0gQlJJREdFX1NOOUMxMDMgJiYKQEAgLTUwNSw3ICs1MDYsNyBAQAogCXNpemVfdCBlb2ZsZW4gPSBzaXplb2Yoc245YzEwMl9lb2ZfaGVhZGVyX3QpLCBpOwogCXVuc2lnbmVkIGosIG4gPSBzaXplb2Yoc245YzEwMl9lb2ZfaGVhZGVyKSAvIGVvZmxlbjsKIAotCWlmIChjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwlpZiAoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKIAkJcmV0dXJuIE5VTEw7IC8qIEVPRiBoZWFkZXIgZG9lcyBub3QgZXhpc3QgaW4gY29tcHJlc3NlZCBkYXRhICovCiAKIAlmb3IgKGkgPSAwOyAobGVuID49IGVvZmxlbikgJiYgKGkgPD0gbGVuIC0gZW9mbGVuKTsgaSsrKQpAQCAtNTM1LDcgKzUzNiw3IEBACiAJCWlmICgoKmYpKQogCQkJKCpmKS0+c3RhdGUgPSBGX1FVRVVFRDsKIAkJREJHKDMsICJTdHJlYW0gaW50ZXJydXB0ZWQiKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfc3RyZWFtKTsKKwkJd2FrZV91cCgmY2FtLT53YWl0X3N0cmVhbSk7CiAJfQogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQpAQCAtNTUxLDE1ICs1NTIsMTUgQEAKIAogCWlmICghKCpmKSkKIAkJKCpmKSA9IGxpc3RfZW50cnkoY2FtLT5pbnF1ZXVlLm5leHQsIHN0cnVjdCBzbjljMTAyX2ZyYW1lX3QsCi0JCSAgICAgICAgICAgICAgICAgIGZyYW1lKTsKKwkJCQkgIGZyYW1lKTsKIAotCWltYWdlc2l6ZSA9IChjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC53aWR0aCAqCi0JICAgICAgICAgICAgIGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LmhlaWdodCAqCi0JICAgICAgICAgICAgIGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LnByaXYpIC8gODsKKwlpbWFnZXNpemUgPSAoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC53aWR0aCAqCisJCSAgICAgY2FtLT5zZW5zb3IucGl4X2Zvcm1hdC5oZWlnaHQgKgorCQkgICAgIGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucHJpdikgLyA4OwogCiAJc29mbGVuID0gKGNhbS0+YnJpZGdlKSA9PSBCUklER0VfU045QzEwMyA/Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc245YzEwM19zb2ZfaGVhZGVyX3QpIDoKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzbjljMTAyX3NvZl9oZWFkZXJfdCk7CisJCQkJICBzaXplb2Yoc245YzEwM19zb2ZfaGVhZGVyX3QpIDoKKwkJCQkgIHNpemVvZihzbjljMTAyX3NvZl9oZWFkZXJfdCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBpbWcsIGxlbiwgc3RhdHVzOwpAQCAtNTc5LDcgKzU4MCw3IEBACiAKIHJlZG86CiAJCXNvZiA9IHNuOWMxMDJfZmluZF9zb2ZfaGVhZGVyKGNhbSwgcG9zLCBsZW4pOwotCQlpZiAoIXNvZikgeworCQlpZiAobGlrZWx5KCFzb2YpKSB7CiAJCQllb2YgPSBzbjljMTAyX2ZpbmRfZW9mX2hlYWRlcihjYW0sIHBvcywgbGVuKTsKIAkJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0dSQUJCSU5HKSB7CiBlbmRfb2ZfZnJhbWU6CkBAIC01ODksOCArNTkwLDkgQEAKIAkJCQkJaW1nID0gKGVvZiA+IHBvcykgPyBlb2YgLSBwb3MgLSAxIDogMDsKIAogCQkJCWlmICgoKmYpLT5idWYuYnl0ZXN1c2VkK2ltZyA+IGltYWdlc2l6ZSkgewotCQkJCQl1MzIgYiA9ICgqZiktPmJ1Zi5ieXRlc3VzZWQgKyBpbWcgLQotCQkJCQkgICAgICAgIGltYWdlc2l6ZTsKKwkJCQkJdTMyIGI7CisJCQkJCWIgPSAoKmYpLT5idWYuYnl0ZXN1c2VkICsgaW1nIC0KKwkJCQkJICAgIGltYWdlc2l6ZTsKIAkJCQkJaW1nID0gaW1hZ2VzaXplIC0gKCpmKS0+YnVmLmJ5dGVzdXNlZDsKIAkJCQkJREJHKDMsICJFeHBlY3RlZCBFT0Ygbm90IGZvdW5kOiAiCiAJCQkJCSAgICAgICAidmlkZW8gZnJhbWUgY3V0Iik7CkBAIC02MDgsMTkgKzYxMCwyMCBAQAogCQkJCSgqZiktPmJ1Zi5ieXRlc3VzZWQgKz0gaW1nOwogCiAJCQkJaWYgKCgqZiktPmJ1Zi5ieXRlc3VzZWQgPT0gaW1hZ2VzaXplIHx8Ci0JCQkJICAgIChjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PQotCQkJCSAgICAgICAgICAgICAgICBWNEwyX1BJWF9GTVRfU045QzEwWCAmJiBlb2YpKSB7Ci0JCQkJCXUzMiBiID0gKCpmKS0+YnVmLmJ5dGVzdXNlZDsKKwkJCQkgICAgKGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0KKwkJCQkJCVY0TDJfUElYX0ZNVF9TTjlDMTBYICYmIGVvZikpIHsKKwkJCQkJdTMyIGI7CisJCQkJCWIgPSAoKmYpLT5idWYuYnl0ZXN1c2VkOwogCQkJCQkoKmYpLT5zdGF0ZSA9IEZfRE9ORTsKIAkJCQkJKCpmKS0+YnVmLnNlcXVlbmNlPSArK2NhbS0+ZnJhbWVfY291bnQ7CiAJCQkJCXNwaW5fbG9jaygmY2FtLT5xdWV1ZV9sb2NrKTsKIAkJCQkJbGlzdF9tb3ZlX3RhaWwoJigqZiktPmZyYW1lLAotCQkJCQkgICAgICAgICAgICAgICAmY2FtLT5vdXRxdWV1ZSk7CisJCQkJCQkgICAgICAgJmNhbS0+b3V0cXVldWUpOwogCQkJCQlpZiAoIWxpc3RfZW1wdHkoJmNhbS0+aW5xdWV1ZSkpCiAJCQkJCQkoKmYpID0gbGlzdF9lbnRyeSgKLQkJCQkJCSAgICAgICAgY2FtLT5pbnF1ZXVlLm5leHQsCi0JCQkJCQkgICAgICAgIHN0cnVjdCBzbjljMTAyX2ZyYW1lX3QsCi0JCQkJCQkgICAgICAgIGZyYW1lICk7CisJCQkJCQkJY2FtLT5pbnF1ZXVlLm5leHQsCisJCQkJCQkJc3RydWN0IHNuOWMxMDJfZnJhbWVfdCwKKwkJCQkJCQlmcmFtZSApOwogCQkJCQllbHNlCiAJCQkJCQkoKmYpID0gTlVMTDsKIAkJCQkJc3Bpbl91bmxvY2soJmNhbS0+cXVldWVfbG9jayk7CkBAIC02MzUsNyArNjM4LDcgQEAKIAkJCQl9IGVsc2UgaWYgKGVvZikgewogCQkJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CiAJCQkJCURCRygzLCAiTm90IGV4cGVjdGVkIEVPRiBhZnRlciAlbHUgIgotCQkJCQkgICAgICAgImJ5dGVzIG9mIGltYWdlIGRhdGEiLCAKKwkJCQkJICAgICAgICJieXRlcyBvZiBpbWFnZSBkYXRhIiwKIAkJCQkJICAgICh1bnNpZ25lZCBsb25nKQogCQkJCQkgICAgKCgqZiktPmJ1Zi5ieXRlc3VzZWQpKTsKIAkJCQl9CkBAIC02NjcsMTMgKzY3MCwxMyBAQAogCQkJaWYgKGVvZiAmJiBlb2YgPCBzb2YpCiAJCQkJZ290byBlbmRfb2ZfZnJhbWU7IC8qICgxKSAqLwogCQkJZWxzZSB7Ci0JCQkJaWYgKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LnBpeGVsZm9ybWF0ID09CisJCQkJaWYgKGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQucGl4ZWxmb3JtYXQgPT0KIAkJCQkgICAgVjRMMl9QSVhfRk1UX1NOOUMxMFgpIHsKIAkJCQkJZW9mID0gc29mIC0gc29mbGVuOwogCQkJCQlnb3RvIGVuZF9vZl9mcmFtZTsKIAkJCQl9IGVsc2UgewogCQkJCQlEQkcoMywgIlNPRiBiZWZvcmUgZXhwZWN0ZWQgRU9GIGFmdGVyICIKLQkJCQkJICAgICAgICIlbHUgYnl0ZXMgb2YgaW1hZ2UgZGF0YSIsIAorCQkJCQkgICAgICAgIiVsdSBieXRlcyBvZiBpbWFnZSBkYXRhIiwKIAkJCQkJICAgICh1bnNpZ25lZCBsb25nKQogCQkJCQkgICAgKCgqZiktPmJ1Zi5ieXRlc3VzZWQpKTsKIAkJCQkJZ290byBzdGFydF9vZl9mcmFtZTsKQEAgLTY5OSwxOCArNzAyLDE4IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVzYmRldjsKIAlzdHJ1Y3QgdXJiKiB1cmI7CiAJY29uc3QgdW5zaWduZWQgaW50IHNuOWMxMDJfd01heFBhY2tldFNpemVbXSA9IHswLCAxMjgsIDI1NiwgMzg0LCA1MTIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ODAsIDgwMCwgOTAwLCAxMDIzfTsKKwkJCQkJCSAgICAgICA2ODAsIDgwMCwgOTAwLCAxMDIzfTsKIAljb25zdCB1bnNpZ25lZCBpbnQgc245YzEwM193TWF4UGFja2V0U2l6ZVtdID0gezAsIDEyOCwgMjU2LCAzODQsIDUxMiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4MCwgODAwLCA5MDAsIDEwMDN9OworCQkJCQkJICAgICAgIDY4MCwgODAwLCA5MDAsIDEwMDN9OwogCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSAoY2FtLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMDMpID8KLQkgICAgICAgICAgICAgICAgICAgIHNuOWMxMDNfd01heFBhY2tldFNpemVbU045QzEwMl9BTFRFUk5BVEVfU0VUVElOR10gOgotCSAgICAgICAgICAgICAgICAgICAgc245YzEwMl93TWF4UGFja2V0U2l6ZVtTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HXTsKKwkJCSAgICBzbjljMTAzX3dNYXhQYWNrZXRTaXplW1NOOUMxMDJfQUxURVJOQVRFX1NFVFRJTkddIDoKKwkJCSAgICBzbjljMTAyX3dNYXhQYWNrZXRTaXplW1NOOUMxMDJfQUxURVJOQVRFX1NFVFRJTkddOwogCXM4IGksIGo7CiAJaW50IGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU045QzEwMl9VUkJTOyBpKyspIHsKIAkJY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPSBremFsbG9jKFNOOUMxMDJfSVNPX1BBQ0tFVFMgKiBwc3osCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsKKwkJCQkJCSAgR0ZQX0tFUk5FTCk7CiAJCWlmICghY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0pIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlEQkcoMSwgIk5vdCBlbm91Z2ggbWVtb3J5Iik7CkBAIC04MDgsMjAgKzgxMSwyMSBAQAogCiBzdGF0aWMgaW50IHNuOWMxMDJfc3RyZWFtX2ludGVycnVwdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKIHsKLQlpbnQgZXJyID0gMDsKKwlsb25nIHRpbWVvdXQ7CiAKIAljYW0tPnN0cmVhbSA9IFNUUkVBTV9JTlRFUlJVUFQ7Ci0JZXJyID0gd2FpdF9ldmVudF90aW1lb3V0KGNhbS0+d2FpdF9zdHJlYW0sCi0JICAgICAgICAgICAgICAgICAgICAgICAgIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT0ZGKSB8fAotCSAgICAgICAgICAgICAgICAgICAgICAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpLAotCSAgICAgICAgICAgICAgICAgICAgICAgICBTTjlDMTAyX1VSQl9USU1FT1VUKTsKKwl0aW1lb3V0ID0gd2FpdF9ldmVudF90aW1lb3V0KGNhbS0+d2FpdF9zdHJlYW0sCisJCQkJICAgICAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09GRikgfHwKKwkJCQkgICAgIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCksCisJCQkJICAgICBTTjlDMTAyX1VSQl9USU1FT1VUKTsKIAlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpCiAJCXJldHVybiAtRU5PREVWOwotCWVsc2UgaWYgKGVycikgeworCWVsc2UgaWYgKGNhbS0+c3RyZWFtICE9IFNUUkVBTV9PRkYpIHsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKLQkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIFRvIHVzZSBpdCwgY2xvc2UgYW5kICIKLQkJICAgICAgICJvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpOwotCQlyZXR1cm4gZXJyOworCQlEQkcoMSwgIlVSQiB0aW1lb3V0IHJlYWNoZWQuIFRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gIgorCQkgICAgICAgIlRvIHVzZSBpdCwgY2xvc2UgYW5kIG9wZW4gL2Rldi92aWRlbyVkIGFnYWluLiIsCisJCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTg1Nyw3ICs4NjEsNyBAQAogCiAvKgogICAgTk9URSAxOiBiZWluZyBpbnNpZGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbXBsaWVzIHRoYXQgdGhlIHY0bAotICAgICAgICAgICBkZXZpY2UgZXhpc3RzIGZvciBzdXJlIChzZWUga29iamVjdHMgYW5kIHJlZmVyZW5jZSBjb3VudGVycykKKwkgICBkZXZpY2UgZXhpc3RzIGZvciBzdXJlIChzZWUga29iamVjdHMgYW5kIHJlZmVyZW5jZSBjb3VudGVycykKICAgIE5PVEUgMjogYnVmZmVycyBhcmUgUEFHRV9TSVpFIGxvbmcKICovCiAKQEAgLTg2Niw0MiArODcwLDQyIEBACiAJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW07CiAJc3NpemVfdCBjb3VudDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOwogCWlmICghY2FtKSB7Ci0JCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWNvdW50ID0gc3ByaW50ZihidWYsICIldVxuIiwgY2FtLT5zeXNmcy5yZWcpOwogCi0JdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwotfSAKK30KIAogCi1zdGF0aWMgc3NpemVfdCAKK3N0YXRpYyBzc2l6ZV90CiBzbjljMTAyX3N0b3JlX3JlZyhzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOwogCXU4IGluZGV4OwogCXNzaXplX3QgY291bnQ7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKIAlpZiAoIWNhbSkgewotCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpbmRleCA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKIAlpZiAoaW5kZXggPiAweDFmIHx8ICFjb3VudCkgewotCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTkxMCw3ICs5MTQsNyBAQAogCURCRygyLCAiTW92ZWQgU045QzEwWCByZWdpc3RlciBpbmRleCB0byAweCUwMlgiLCBjYW0tPnN5c2ZzLnJlZyk7CiAJREJHKDMsICJXcml0dGVuIGJ5dGVzOiAlemQiLCBjb3VudCk7CiAKLQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC05MjIsMTcgKzkyNiwxNyBAQAogCXNzaXplX3QgY291bnQ7CiAJaW50IHZhbDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOwogCWlmICghY2FtKSB7Ci0JCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICgodmFsID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIGNhbS0+c3lzZnMucmVnKSkgPCAwKSB7Ci0JCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtOTQwLDEwICs5NDQsMTAgQEAKIAogCURCRygzLCAiUmVhZCBieXRlczogJXpkIiwgY291bnQpOwogCi0JdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwotfSAKK30KIAogCiBzdGF0aWMgc3NpemVfdApAQCAtOTU0LDI0ICs5NTgsMjQgQEAKIAlzc2l6ZV90IGNvdW50OwogCWludCBlcnI7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKIAlpZiAoIWNhbSkgewotCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAl2YWx1ZSA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKIAlpZiAoIWNvdW50KSB7Ci0JCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWVyciA9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdmFsdWUsIGNhbS0+c3lzZnMucmVnKTsKIAlpZiAoZXJyKSB7Ci0JCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtOTc5LDcgKzk4Myw3IEBACiAJICAgIGNhbS0+c3lzZnMucmVnLCB2YWx1ZSk7CiAJREJHKDMsICJXcml0dGVuIGJ5dGVzOiAlemQiLCBjb3VudCk7CiAKLQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC05OTAsMTIgKzk5NCwxMiBAQAogCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOwogCXNzaXplX3QgY291bnQ7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKIAlpZiAoIWNhbSkgewotCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEwMDMsMzEgKzEwMDcsMzEgQEAKIAogCURCRygzLCAiUmVhZCBieXRlczogJXpkIiwgY291bnQpOwogCi0JdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQogCiAKLXN0YXRpYyBzc2l6ZV90IAorc3RhdGljIHNzaXplX3QKIHNuOWMxMDJfc3RvcmVfaTJjX3JlZyhzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOwogCXU4IGluZGV4OwogCXNzaXplX3QgY291bnQ7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKIAlpZiAoIWNhbSkgewotCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpbmRleCA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKIAlpZiAoIWNvdW50KSB7Ci0JCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTAzNiw3ICsxMDQwLDcgQEAKIAlEQkcoMiwgIk1vdmVkIHNlbnNvciByZWdpc3RlciBpbmRleCB0byAweCUwMlgiLCBjYW0tPnN5c2ZzLmkyY19yZWcpOwogCURCRygzLCAiV3JpdHRlbiBieXRlczogJXpkIiwgY291bnQpOwogCi0JdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTA0OCwyMiArMTA1MiwyMiBAQAogCXNzaXplX3QgY291bnQ7CiAJaW50IHZhbDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOwogCWlmICghY2FtKSB7Ci0JCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICghKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMgJiBTTjlDMTAyX0kyQ19SRUFEKSkgewotCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwlpZiAoIShjYW0tPnNlbnNvci5zeXNmc19vcHMgJiBTTjlDMTAyX0kyQ19SRUFEKSkgeworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KIAogCWlmICgodmFsID0gc245YzEwMl9pMmNfcmVhZChjYW0sIGNhbS0+c3lzZnMuaTJjX3JlZykpIDwgMCkgewotCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTEwNzEsMTAgKzEwNzUsMTAgQEAKIAogCURCRygzLCAiUmVhZCBieXRlczogJXpkIiwgY291bnQpOwogCi0JdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCiAJcmV0dXJuIGNvdW50OwotfSAKK30KIAogCiBzdGF0aWMgc3NpemVfdApAQCAtMTA4NSwyOSArMTA4OSwyOSBAQAogCXNzaXplX3QgY291bnQ7CiAJaW50IGVycjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOwogCWlmICghY2FtKSB7Ci0JCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICghKGNhbS0+c2Vuc29yLT5zeXNmc19vcHMgJiBTTjlDMTAyX0kyQ19XUklURSkpIHsKLQkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJaWYgKCEoY2FtLT5zZW5zb3Iuc3lzZnNfb3BzICYgU045QzEwMl9JMkNfV1JJVEUpKSB7CisJCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9TWVM7CiAJfQogCiAJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CiAJaWYgKCFjb3VudCkgewotCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAllcnIgPSBzbjljMTAyX2kyY193cml0ZShjYW0sIGNhbS0+c3lzZnMuaTJjX3JlZywgdmFsdWUpOwogCWlmIChlcnIpIHsKLQkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMTE1LDcgKzExMTksNyBAQAogCSAgICBjYW0tPnN5c2ZzLmkyY19yZWcsIHZhbHVlKTsKIAlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KTsKIAotCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTExMzAsMTggKzExMzQsMTggQEAKIAl1OCB2YWx1ZTsKIAlzc2l6ZV90IGNvdW50OwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CiAJaWYgKCFjYW0pIHsKLQkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCW11dGV4X3VubG9jaygmc245YzEwMl9zeXNmc19sb2NrKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJYnJpZGdlID0gY2FtLT5icmlkZ2U7CiAKLQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwltdXRleF91bmxvY2soJnNuOWMxMDJfc3lzZnNfbG9jayk7CiAKIAl2YWx1ZSA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKIAlpZiAoIWNvdW50KQpAQCAtMTIxOCwyMiArMTIyMiwyMiBAQAogCURCRygzLCAiRnJhbWUgaGVhZGVyLCByZWFkIGJ5dGVzOiAlemQiLCBjb3VudCk7CiAKIAlyZXR1cm4gY291bnQ7Ci19IAorfQogCiAKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihyZWcsIFNfSVJVR08gfCBTX0lXVVNSLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd19yZWcsIHNuOWMxMDJfc3RvcmVfcmVnKTsKKwkJCSBzbjljMTAyX3Nob3dfcmVnLCBzbjljMTAyX3N0b3JlX3JlZyk7CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIodmFsLCBTX0lSVUdPIHwgU19JV1VTUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzbjljMTAyX3Nob3dfdmFsLCBzbjljMTAyX3N0b3JlX3ZhbCk7CisJCQkgc245YzEwMl9zaG93X3ZhbCwgc245YzEwMl9zdG9yZV92YWwpOwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGkyY19yZWcsIFNfSVJVR08gfCBTX0lXVVNSLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd19pMmNfcmVnLCBzbjljMTAyX3N0b3JlX2kyY19yZWcpOworCQkJIHNuOWMxMDJfc2hvd19pMmNfcmVnLCBzbjljMTAyX3N0b3JlX2kyY19yZWcpOwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGkyY192YWwsIFNfSVJVR08gfCBTX0lXVVNSLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd19pMmNfdmFsLCBzbjljMTAyX3N0b3JlX2kyY192YWwpOworCQkJIHNuOWMxMDJfc2hvd19pMmNfdmFsLCBzbjljMTAyX3N0b3JlX2kyY192YWwpOwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGdyZWVuLCBTX0lXVUdPLCBOVUxMLCBzbjljMTAyX3N0b3JlX2dyZWVuKTsKIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihibHVlLCBTX0lXVUdPLCBOVUxMLCBzbjljMTAyX3N0b3JlX2JsdWUpOwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHJlZCwgU19JV1VHTywgTlVMTCwgc245YzEwMl9zdG9yZV9yZWQpOwogc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZyYW1lX2hlYWRlciwgU19JUlVHTywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzbjljMTAyX3Nob3dfZnJhbWVfaGVhZGVyLCBOVUxMKTsKKwkJCSBzbjljMTAyX3Nob3dfZnJhbWVfaGVhZGVyLCBOVUxMKTsKIAogCiBzdGF0aWMgdm9pZCBzbjljMTAyX2NyZWF0ZV9zeXNmcyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKQEAgLTEyNDksNyArMTI1Myw3IEBACiAJCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9ibHVlKTsKIAkJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZCk7CiAJfQotCWlmIChjYW0tPnNlbnNvciAmJiBjYW0tPnNlbnNvci0+c3lzZnNfb3BzKSB7CisJaWYgKGNhbS0+c2Vuc29yLnN5c2ZzX29wcykgewogCQl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaTJjX3JlZyk7CiAJCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9pMmNfdmFsKTsKIAl9CkBAIC0xMjc0LDcgKzEyNzgsNyBAQAogCiBzdGF0aWMgaW50CiBzbjljMTAyX3NldF9jb21wcmVzc2lvbihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiogY29tcHJlc3Npb24pCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24qIGNvbXByZXNzaW9uKQogewogCWludCBlcnIgPSAwOwogCkBAIC0xMzEyLDcgKzEzMTYsNyBAQAogCiBzdGF0aWMgaW50IHNuOWMxMDJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOwogCXU4IGhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSwKIAkgICB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApLAogCSAgIGhfc2l6ZSA9ICh1OCkocmVjdC0+d2lkdGggLyAxNiksCkBAIC0xMzM1LDcgKzEzMzksNyBAQAogCiBzdGF0aWMgaW50IHNuOWMxMDJfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKIHsKLQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmY2FtLT5zZW5zb3I7CiAJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmw7CiAJc3RydWN0IHY0bDJfcmVjdCogcmVjdDsKQEAgLTE0MDQsNyArMTQwOCw3IEBACiAJfQogCiAJaWYgKCEoY2FtLT5zdGF0ZSAmIERFVl9JTklUSUFMSVpFRCkpIHsKLQkJaW5pdF9NVVRFWCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfaW5pdCgmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQlzcGluX2xvY2tfaW5pdCgmY2FtLT5xdWV1ZV9sb2NrKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT53YWl0X2ZyYW1lKTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT53YWl0X3N0cmVhbSk7CkBAIC0xNDIyLDEzICsxNDI2LDE1IEBACiAKIHN0YXRpYyB2b2lkIHNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCiB7Ci0JZG93bigmc245YzEwMl9zeXNmc19sb2NrKTsKKwltdXRleF9sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCiAJREJHKDIsICJWNEwyIGRldmljZSAvZGV2L3ZpZGVvJWQgZGVyZWdpc3RlcmVkIiwgY2FtLT52NGxkZXYtPm1pbm9yKTsKIAl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgTlVMTCk7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYpOwogCi0JdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJdXNiX3B1dF9kZXYoY2FtLT51c2JkZXYpOworCisJbXV0ZXhfdW5sb2NrKCZzbjljMTAyX3N5c2ZzX2xvY2spOwogCiAJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CiB9CkBAIC0xNDQ5LDcgKzE0NTUsNyBAQAogCiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmRldl9zZW0pKSB7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5kZXZfbXV0ZXgpKSB7CiAJCXVwX3JlYWQoJnNuOWMxMDJfZGlzY29ubmVjdCk7CiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQpAQCAtMTQ2MSwxMCArMTQ2NywxMCBAQAogCQkJZXJyID0gLUVXT1VMREJMT0NLOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKGNhbS0+b3BlbiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVECi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIWNhbS0+dXNlcnMpOworCQkJCQkJICBjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRAorCQkJCQkJCSB8fCAhY2FtLT51c2Vycyk7CiAJCWlmIChlcnIpIHsKIAkJCXVwX3JlYWQoJnNuOWMxMDJfZGlzY29ubmVjdCk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtMTQ3Myw3ICsxNDc5LDcgQEAKIAkJCXVwX3JlYWQoJnNuOWMxMDJfZGlzY29ubmVjdCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlkb3duKCZjYW0tPmRldl9zZW0pOworCQltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAJfQogCiAKQEAgLTE1MDEsNyArMTUwNyw3IEBACiAJREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4iLCBjYW0tPnY0bGRldi0+bWlub3IpOwogCiBvdXQ6Ci0JdXAoJmNhbS0+ZGV2X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAJdXBfcmVhZCgmc245YzEwMl9kaXNjb25uZWN0KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTUxMSw3ICsxNTE3LDcgQEAKIHsKIAlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOwogCi0JZG93bigmY2FtLT5kZXZfc2VtKTsgLyogcHJldmVudCBkaXNjb25uZWN0KCkgdG8gYmUgY2FsbGVkICovCisJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOyAvKiBwcmV2ZW50IGRpc2Nvbm5lY3QoKSB0byBiZSBjYWxsZWQgKi8KIAogCXNuOWMxMDJfc3RvcF90cmFuc2ZlcihjYW0pOwogCkBAIC0xNTE5LDcgKzE1MjUsNyBAQAogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CiAJCXNuOWMxMDJfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKLQkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCQlrZnJlZShjYW0pOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNTI5LDcgKzE1MzUsNyBAQAogCiAJREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGNsb3NlZCIsIGNhbS0+djRsZGV2LT5taW5vcik7CiAKLQl1cCgmY2FtLT5kZXZfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU0MSwzNSArMTU0NywzNiBAQAogCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CiAJc3RydWN0IHNuOWMxMDJfZnJhbWVfdCogZiwgKiBpOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlsb25nIHRpbWVvdXQ7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewogCQlEQkcoMSwgIkRldmljZSBub3QgcHJlc2VudCIpOwotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKIAkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0ICIKIAkJICAgICAgICJhZ2Fpbi4iKTsKLQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAoY2FtLT5pbyA9PSBJT19NTUFQKSB7CiAJCURCRygzLCAiQ2xvc2UgYW5kIG9wZW4gdGhlIGRldmljZSBhZ2FpbiB0byBjaG9vc2UgIgogCQkgICAgICAgInRoZSByZWFkIG1ldGhvZCIpOwotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChjYW0tPmlvID09IElPX05PTkUpIHsKIAkJaWYgKCFzbjljMTAyX3JlcXVlc3RfYnVmZmVycyhjYW0sY2FtLT5ucmVhZGJ1ZmZlcnMsIElPX1JFQUQpKSB7CiAJCQlEQkcoMSwgInJlYWQoKSBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5Iik7Ci0JCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJY2FtLT5pbyA9IElPX1JFQUQ7CkBAIC0xNTgzLDMwICsxNTkwLDMyIEBACiAJfQogCiAJaWYgKCFjb3VudCkgewotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgewogCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQotCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKLQkJICAgICAgKCBjYW0tPndhaXRfZnJhbWUsIAotCQkgICAgICAgICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8Ci0JCSAgICAgICAgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAotCQkJKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgKTsKLQkJaWYgKGVycikgewotCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7Ci0JCQlyZXR1cm4gZXJyOworCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKKwkJCSAgKCBjYW0tPndhaXRfZnJhbWUsCisJCQkgICAgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgfHwKKwkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8CisJCQkgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCksCisJCQkgICAgY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCAqCisJCQkgICAgMTAwMCAqIG1zZWNzX3RvX2ppZmZpZXMoMSkgKTsKKwkJaWYgKHRpbWVvdXQgPCAwKSB7CisJCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKKwkJCXJldHVybiB0aW1lb3V0OwogCQl9CiAJCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgewotCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKLQkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlpZiAoIXRpbWVvdXQgfHwgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkpIHsKKwkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CkBAIC0xNjM0LDcgKzE2NDMsNyBAQAogCVBEQkdHKCJGcmFtZSAjJWx1LCBieXRlcyByZWFkOiAlenUiLAogCSAgICAgICh1bnNpZ25lZCBsb25nKWYtPmJ1Zi5pbmRleCwgY291bnQpOwogCi0JdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xNjQ3LDcgKzE2NTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX211dGV4KSkKIAkJcmV0dXJuIFBPTExFUlI7CiAKIAlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKQEAgLTE2NjMsNyArMTY3Miw3IEBACiAKIAlpZiAoY2FtLT5pbyA9PSBJT19OT05FKSB7CiAJCWlmICghc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBjYW0tPm5yZWFkYnVmZmVycywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT19SRUFEKSkgeworCQkJCQkgICAgIElPX1JFQUQpKSB7CiAJCQlEQkcoMSwgInBvbGwoKSBmYWlsZWQsIG5vdCBlbm91Z2ggbWVtb3J5Iik7CiAJCQlnb3RvIGVycm9yOwogCQl9CkBAIC0xNjg1LDEyICsxNjk0LDEyIEBACiAJaWYgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkKIAkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCi0JdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAKIAlyZXR1cm4gbWFzazsKIAogZXJyb3I6Ci0JdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJcmV0dXJuIFBPTExFUlI7CiB9CiAKQEAgLTE3MjAsMjkgKzE3MjksMjkgQEAKIHsKIAlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkgICAgICAgICAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwkJICAgICAgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCXZvaWQgKnBvczsKIAl1MzIgaTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3BfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CiAJCURCRygxLCAiRGV2aWNlIG5vdCBwcmVzZW50Iik7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgewogCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgIgogCQkgICAgICAgImFnYWluLiIpOwotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChjYW0tPmlvICE9IElPX01NQVAgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8CiAJICAgIHNpemUgIT0gUEFHRV9BTElHTihjYW0tPmZyYW1lWzBdLmJ1Zi5sZW5ndGgpKSB7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNzUxLDcgKzE3NjAsNyBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChpID09IGNhbS0+bmJ1ZmZlcnMpIHsKLQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE3NjEsNyArMTc3MCw3IEBACiAJcG9zID0gY2FtLT5mcmFtZVtpXS5idWZtZW07CiAJd2hpbGUgKHNpemUgPiAwKSB7IC8qIHNpemUgaXMgcGFnZS1hbGlnbmVkICovCiAJCWlmICh2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCB2bWFsbG9jX3RvX3BhZ2UocG9zKSkpIHsKLQkJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQlzdGFydCArPSBQQUdFX1NJWkU7CkBAIC0xNzc0LDcgKzE3ODMsNyBAQAogCiAJc245YzEwMl92bV9vcGVuKHZtYSk7CiAKLQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc4OCwxMyArMTc5NywxMyBAQAogCQkuZHJpdmVyID0gInNuOWMxMDIiLAogCQkudmVyc2lvbiA9IFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSwKIAkJLmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9SRUFEV1JJVEUgfAotCQkgICAgICAgICAgICAgICAgVjRMMl9DQVBfU1RSRUFNSU5HLAorCQkJCVY0TDJfQ0FQX1NUUkVBTUlORywKIAl9OwogCiAJc3RybGNweShjYXAuY2FyZCwgY2FtLT52NGxkZXYtPm5hbWUsIHNpemVvZihjYXAuY2FyZCkpOwogCWlmICh1c2JfbWFrZV9wYXRoKGNhbS0+dXNiZGV2LCBjYXAuYnVzX2luZm8sIHNpemVvZihjYXAuYnVzX2luZm8pKSA8IDApCiAJCXN0cmxjcHkoY2FwLmJ1c19pbmZvLCBjYW0tPnVzYmRldi0+ZGV2LmJ1c19pZCwKLQkJICAgICAgICBzaXplb2YoY2FwLmJ1c19pbmZvKSk7CisJCQlzaXplb2YoY2FwLmJ1c19pbmZvKSk7CiAKIAlpZiAoY29weV90b191c2VyKGFyZywgJmNhcCwgc2l6ZW9mKGNhcCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE4MTYsNiArMTgyNSw3IEBACiAKIAltZW1zZXQoJmksIDAsIHNpemVvZihpKSk7CiAJc3RyY3B5KGkubmFtZSwgIkNhbWVyYSIpOworCWkudHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAKIAlpZiAoY29weV90b191c2VyKGFyZywgJmksIHNpemVvZihpKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTgyNSw3ICsxODM1LDE5IEBACiAKIAogc3RhdGljIGludAotc245YzEwMl92aWRpb2NfZ3NfaW5wdXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQorc245YzEwMl92aWRpb2NfZ19pbnB1dChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJaW50IGluZGV4ID0gMDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaW5kZXgsIHNpemVvZihpbmRleCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfdmlkaW9jX3NfaW5wdXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQogewogCWludCBpbmRleDsKIApAQCAtMTg0Miw3ICsxODY0LDcgQEAKIHN0YXRpYyBpbnQKIHNuOWMxMDJfdmlkaW9jX3F1ZXJ5X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQogewotCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWM7CiAJdTggaTsKIApAQCAtMTg2NCw3ICsxODg2LDcgQEAKIHN0YXRpYyBpbnQKIHNuOWMxMDJfdmlkaW9jX2dfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOwogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKIAlpbnQgZXJyID0gMDsKIAl1OCBpOwpAQCAtMTg5Niw3ICsxOTE4LDcgQEAKIHN0YXRpYyBpbnQKIHNuOWMxMDJfdmlkaW9jX3NfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOwogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKIAl1OCBpOwogCWludCBlcnIgPSAwOwpAQCAtMTkwOSw2ICsxOTMxLDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMtPnFjdHJsKTsgaSsrKQogCQlpZiAoY3RybC5pZCA9PSBzLT5xY3RybFtpXS5pZCkgeworCQkJaWYgKHMtPnFjdHJsW2ldLmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpZiAoY3RybC52YWx1ZSA8IHMtPnFjdHJsW2ldLm1pbmltdW0gfHwKIAkJCSAgICBjdHJsLnZhbHVlID4gcy0+cWN0cmxbaV0ubWF4aW11bSkKIAkJCQlyZXR1cm4gLUVSQU5HRTsKQEAgLTE5MzEsNyArMTk1NSw3IEBACiBzdGF0aWMgaW50CiBzbjljMTAyX3ZpZGlvY19jcm9wY2FwKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKLQlzdHJ1Y3QgdjRsMl9jcm9wY2FwKiBjYyA9ICYoY2FtLT5zZW5zb3ItPmNyb3BjYXApOworCXN0cnVjdCB2NGwyX2Nyb3BjYXAqIGNjID0gJihjYW0tPnNlbnNvci5jcm9wY2FwKTsKIAogCWNjLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSAxOwpAQCAtMTk0Nyw3ICsxOTcxLDcgQEAKIHN0YXRpYyBpbnQKIHNuOWMxMDJfdmlkaW9jX2dfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7Ci0Jc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOwogCXN0cnVjdCB2NGwyX2Nyb3AgY3JvcCA9IHsKIAkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCiAJfTsKQEAgLTE5NjQsNyArMTk4OCw3IEBACiBzdGF0aWMgaW50CiBzbjljMTAyX3ZpZGlvY19zX2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQogewotCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKIAlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7CiAJc3RydWN0IHY0bDJfcmVjdCogcmVjdDsKIAlzdHJ1Y3QgdjRsMl9yZWN0KiBib3VuZHMgPSAmKHMtPmNyb3BjYXAuYm91bmRzKTsKQEAgLTIxMDUsNyArMjEyOSw3IEBACiBzbjljMTAyX3ZpZGlvY19nX2ZtdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7CiAJc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwZm10ID0gJihjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGZtdCA9ICYoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdCk7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZvcm1hdCwgYXJnLCBzaXplb2YoZm9ybWF0KSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjExNCw3ICsyMTM4LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwZm10LT5ieXRlc3BlcmxpbmUgPSAocGZtdC0+cGl4ZWxmb3JtYXQ9PVY0TDJfUElYX0ZNVF9TTjlDMTBYKQotCSAgICAgICAgICAgICAgICAgICAgID8gMCA6IChwZm10LT53aWR0aCAqIHBmbXQtPnByaXYpIC8gODsKKwkJCSAgICAgPyAwIDogKHBmbXQtPndpZHRoICogcGZtdC0+cHJpdikgLyA4OwogCXBmbXQtPnNpemVpbWFnZSA9IHBmbXQtPmhlaWdodCAqICgocGZtdC0+d2lkdGgqcGZtdC0+cHJpdikvOCk7CiAJcGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJbWVtY3B5KCYoZm9ybWF0LmZtdC5waXgpLCBwZm10LCBzaXplb2YoKnBmbXQpKTsKQEAgLTIxMjgsOSArMjE1Miw5IEBACiAKIHN0YXRpYyBpbnQKIHNuOWMxMDJfdmlkaW9jX3RyeV9zX2ZtdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdW5zaWduZWQgaW50IGNtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqIGFyZykKKwkJCSB2b2lkIF9fdXNlciAqIGFyZykKIHsKLQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmY2FtLT5zZW5zb3I7CiAJc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXg7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGZtdCA9ICYocy0+cGl4X2Zvcm1hdCk7CkBAIC0yMTkwLDcgKzIyMTQsNyBAQAogCXBpeC0+cHJpdiA9IHBmbXQtPnByaXY7IC8qIGJwcCAqLwogCXBpeC0+Y29sb3JzcGFjZSA9IHBmbXQtPmNvbG9yc3BhY2U7CiAJcGl4LT5ieXRlc3BlcmxpbmUgPSAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKLQkgICAgICAgICAgICAgICAgICAgID8gMCA6IChwaXgtPndpZHRoICogcGl4LT5wcml2KSAvIDg7CisJCQkgICAgPyAwIDogKHBpeC0+d2lkdGggKiBwaXgtPnByaXYpIC8gODsKIAlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogKChwaXgtPndpZHRoICogcGl4LT5wcml2KSAvIDgpOwogCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAKQEAgLTIyNjMsNyArMjI4Nyw3IEBACiBzbjljMTAyX3ZpZGlvY19nX2pwZWdjb21wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAlpZiAoY29weV90b191c2VyKGFyZywgJmNhbS0+Y29tcHJlc3Npb24sCi0JICAgICAgICAgICAgICAgICBzaXplb2YoY2FtLT5jb21wcmVzc2lvbikpKQorCQkJIHNpemVvZihjYW0tPmNvbXByZXNzaW9uKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC0yNDEyLDEyICsyNDM2LDEyIEBACiAKIHN0YXRpYyBpbnQKIHNuOWMxMDJfdmlkaW9jX2RxYnVmKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCBzdHJ1Y3QgZmlsZSogZmlscCwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICogYXJnKQorCQkgICAgIHZvaWQgX191c2VyICogYXJnKQogewogCXN0cnVjdCB2NGwyX2J1ZmZlciBiOwogCXN0cnVjdCBzbjljMTAyX2ZyYW1lX3QgKmY7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwotCWludCBlcnIgPSAwOworCWxvbmcgdGltZW91dDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYiwgYXJnLCBzaXplb2YoYikpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI0MzAsMTYgKzI0NTQsMTggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCQlyZXR1cm4gLUVBR0FJTjsKLQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCi0JCSAgICAgICggY2FtLT53YWl0X2ZyYW1lLAotCQkgICAgICAgICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8Ci0JCSAgICAgICAgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAotCQkgICAgICAgIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpICk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOworCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKKwkJCSAgKCBjYW0tPndhaXRfZnJhbWUsCisJCQkgICAgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgfHwKKwkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8CisJCQkgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCksCisJCQkgICAgY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCAqCisJCQkgICAgMTAwMCAqIG1zZWNzX3RvX2ppZmZpZXMoMSkgKTsKKwkJaWYgKHRpbWVvdXQgPCAwKQorCQkJcmV0dXJuIHRpbWVvdXQ7CiAJCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkKIAkJCXJldHVybiAtRU5PREVWOwotCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKQorCQlpZiAoIXRpbWVvdXQgfHwgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkpCiAJCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI1NTgsNyArMjU4NCw3IEBACiAKIAogc3RhdGljIGludCBzbjljMTAyX2lvY3RsX3Y0bDIoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICogYXJnKQogewogCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CiAKQEAgLTI1NzEsOCArMjU5NywxMCBAQAogCQlyZXR1cm4gc245YzEwMl92aWRpb2NfZW51bWlucHV0KGNhbSwgYXJnKTsKIAogCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJCXJldHVybiBzbjljMTAyX3ZpZGlvY19nX2lucHV0KGNhbSwgYXJnKTsKKwogCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JCXJldHVybiBzbjljMTAyX3ZpZGlvY19nc19pbnB1dChjYW0sIGFyZyk7CisJCXJldHVybiBzbjljMTAyX3ZpZGlvY19zX2lucHV0KGNhbSwgYXJnKTsKIAogCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKIAkJcmV0dXJuIHNuOWMxMDJfdmlkaW9jX3F1ZXJ5X2N0cmwoY2FtLCBhcmcpOwpAQCAtMjY1MCwyNCArMjY3OCwyNCBAQAogCiAKIHN0YXRpYyBpbnQgc245YzEwMl9pb2N0bChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOwogCWludCBlcnIgPSAwOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKIAkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKTsKLQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CiAJCURCRygxLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCAiCiAJCSAgICAgICAiYWdhaW4uIik7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yNjc1LDcgKzI3MDMsNyBAQAogCiAJZXJyID0gc245YzEwMl9pb2N0bF92NGwyKGlub2RlLCBmaWxwLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiAKLQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yNzIyLDcgKzI3NTAsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JaW5pdF9NVVRFWCgmY2FtLT5kZXZfc2VtKTsKKwltdXRleF9pbml0KCZjYW0tPmRldl9tdXRleCk7CiAKIAlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDApOwogCWlmIChyIDwgMCB8fCByICE9IDB4MTApIHsKQEAgLTI3MzMsNyArMjc2MSw3IEBACiAJfQogCiAJY2FtLT5icmlkZ2UgPSAoaWQtPmlkUHJvZHVjdCAmIDB4ZmZjMCkgPT0gMHg2MDgwID8KLQkgICAgICAgICAgICAgIEJSSURHRV9TTjlDMTAzIDogQlJJREdFX1NOOUMxMDI7CisJCSAgICAgIEJSSURHRV9TTjlDMTAzIDogQlJJREdFX1NOOUMxMDI7CiAJc3dpdGNoIChjYW0tPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX1NOOUMxMDE6CiAJY2FzZSBCUklER0VfU045QzEwMjoKQEAgLTI3NTIsMTAgKzI3ODAsMTAgQEAKIAkJCWJyZWFrOwogCX0KIAotCWlmICghZXJyICYmIGNhbS0+c2Vuc29yKSB7Ci0JCURCRygyLCAiJXMgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIiwgY2FtLT5zZW5zb3ItPm5hbWUpOworCWlmICghZXJyKSB7CisJCURCRygyLCAiJXMgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIiwgY2FtLT5zZW5zb3IubmFtZSk7CiAJCURCRygzLCAiU3VwcG9ydCBmb3IgJXMgbWFpbnRhaW5lZCBieSAlcyIsCi0JCSAgICBjYW0tPnNlbnNvci0+bmFtZSwgY2FtLT5zZW5zb3ItPm1haW50YWluZXIpOworCQkgICAgY2FtLT5zZW5zb3IubmFtZSwgY2FtLT5zZW5zb3IubWFpbnRhaW5lcik7CiAJfSBlbHNlIHsKIAkJREJHKDEsICJObyBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIik7CiAJCWVyciA9IC1FTk9ERVY7CkBAIC0yNzc2LDIzICsyODA0LDI0IEBACiAJY2FtLT52NGxkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgY2FtKTsKIAotCWRvd24oJmNhbS0+ZGV2X3NlbSk7CisJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCiAJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGNhbS0+djRsZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19ucltkZXZfbnJdKTsKKwkJCQkgICAgdmlkZW9fbnJbZGV2X25yXSk7CiAJaWYgKGVycikgewogCQlEQkcoMSwgIlY0TDIgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKIAkJaWYgKGVyciA9PSAtRU5GSUxFICYmIHZpZGVvX25yW2Rldl9ucl0gPT0gLTEpCiAJCQlEQkcoMSwgIkZyZWUgL2Rldi92aWRlb1ggbm9kZSBub3QgZm91bmQiKTsKIAkJdmlkZW9fbnJbZGV2X25yXSA9IC0xOwogCQlkZXZfbnIgPSAoZGV2X25yIDwgU045QzEwMl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKLQkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCQlnb3RvIGZhaWw7CiAJfQogCiAJREJHKDIsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5taW5vcik7CiAKIAljYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgPSBmb3JjZV9tdW5tYXBbZGV2X25yXTsKKwljYW0tPm1vZHVsZV9wYXJhbS5mcmFtZV90aW1lb3V0ID0gZnJhbWVfdGltZW91dFtkZXZfbnJdOwogCiAJZGV2X25yID0gKGRldl9uciA8IFNOOUMxMDJfTUFYX0RFVklDRVMtMSkgPyBkZXZfbnIrMSA6IDA7CiAKQEAgLTI4MDMsNyArMjgzMiw3IEBACiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhbSk7CiAKLQl1cCgmY2FtLT5kZXZfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKIAogCXJldHVybiAwOwogCkBAIC0yODI3LDcgKzI4NTYsNyBAQAogCiAJZG93bl93cml0ZSgmc245YzEwMl9kaXNjb25uZWN0KTsKIAotCWRvd24oJmNhbS0+ZGV2X3NlbSk7IAorCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsKIAogCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIGNhbS0+djRsZGV2LT5uYW1lKTsKIApAQCAtMjg0MSwxMyArMjg3MCwxNCBAQAogCQlzbjljMTAyX3N0b3BfdHJhbnNmZXIoY2FtKTsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9mcmFtZSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X3N0cmVhbSk7CisJCXdha2VfdXAoJmNhbS0+d2FpdF9zdHJlYW0pOworCQl1c2JfZ2V0X2RldihjYW0tPnVzYmRldik7CiAJfSBlbHNlIHsKIAkJY2FtLT5zdGF0ZSB8PSBERVZfRElTQ09OTkVDVEVEOwogCQlzbjljMTAyX3JlbGVhc2VfcmVzb3VyY2VzKGNhbSk7CiAJfQogCi0JdXAoJmNhbS0+ZGV2X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAKIAlpZiAoIWNhbS0+dXNlcnMpCiAJCWtmcmVlKGNhbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2h2NzEzMWQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2h2NzEzMWQuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfaHY3MTMxZC5jCmluZGV4IDQ2YzEyZWMuLmM0MTE3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfaHY3MTMxZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2h2NzEzMWQuYwpAQCAtNDQsOCArNDQsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgaHY3MTMxZF9nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3N0YXRpYyBpbnQgaHY3MTMxZF9nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQogewogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgpAQCAtODgsOCArODgsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgaHY3MTMxZF9zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3N0YXRpYyBpbnQgaHY3MTMxZF9zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQogewogCWludCBlcnIgPSAwOwogCkBAIC0xMjEsOCArMTIxLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGh2NzEzMWRfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCitzdGF0aWMgaW50IGh2NzEzMWRfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKIHsKIAlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmaHY3MTMxZDsKIAlpbnQgZXJyID0gMDsKQEAgLTEzNiw4ICsxMzYsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgaHY3MTMxZF9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQorc3RhdGljIGludCBodjcxMzFkX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJCSAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQogewogCWludCBlcnIgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX21pMDM0My5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbWkwMzQzLmMKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9taTAzNDMuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfbWkwMzQzLmMKaW5kZXggZDlhYTdhNi4uNDE2OWVhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9taTAzNDMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9taTAzNDMuYwpAQCAtMzksNjQgKzM5LDY0IEBACiAJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhhMCwgMHgxOSk7CiAKIAllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZCwgMHgwMCwgMHgwMSwgMCwgMCk7CisJCQkJCSAweDBkLCAweDAwLCAweDAxLCAwLCAwKTsKIAllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZCwgMHgwMCwgMHgwMCwgMCwgMCk7CisJCQkJCSAweDBkLCAweDAwLCAweDAwLCAwLCAwKTsKIAllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMywgMHgwMSwgMHhlMSwgMCwgMCk7CisJCQkJCSAweDAzLCAweDAxLCAweGUxLCAwLCAwKTsKIAllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHgwMiwgMHg4MSwgMCwgMCk7CisJCQkJCSAweDA0LCAweDAyLCAweDgxLCAwLCAwKTsKIAllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNSwgMHgwMCwgMHgxNywgMCwgMCk7CisJCQkJCSAweDA1LCAweDAwLCAweDE3LCAwLCAwKTsKIAllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiwgMHgwMCwgMHgxMSwgMCwgMCk7CisJCQkJCSAweDA2LCAweDAwLCAweDExLCAwLCAwKTsKIAllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MiwgMHgwNCwgMHg5YSwgMCwgMCk7CisJCQkJCSAweDYyLCAweDA0LCAweDlhLCAwLCAwKTsKIAogCXJldHVybiBlcnI7CiB9CiAKIAotc3RhdGljIGludCBtaTAzNDNfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3N0YXRpYyBpbnQgbWkwMzQzX2dldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKIAkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCQkJICAgICAweDA5LCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gbWkwMzQzX2kyY19kYXRhWzJdOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0dBSU46CiAJCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCAmbWkwMzQzLCBtaTAzNDMuaTJjX3NsYXZlX2lkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUsIDIrMSwgbWkwMzQzX2kyY19kYXRhKSA8IDApCisJCQkJCSAgICAgMHgzNSwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hGTElQOgogCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJCQkgICAgIDB4MjAsIDIrMSwgbWkwMzQzX2kyY19kYXRhKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSBtaTAzNDNfaTJjX2RhdGFbM10gJiAweDIwID8gMSA6IDA7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfVkZMSVA6CiAJCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCAmbWkwMzQzLCBtaTAzNDMuaTJjX3NsYXZlX2lkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIDIrMSwgbWkwMzQzX2kyY19kYXRhKSA8IDApCisJCQkJCSAgICAgMHgyMCwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSA9IG1pMDM0M19pMmNfZGF0YVszXSAmIDB4ODAgPyAxIDogMDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKIAkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyZCwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCQkJICAgICAweDJkLCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQogCQkJcmV0dXJuIC1FSU87CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgogCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjLCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJCQkgICAgIDB4MmMsIDIrMSwgbWkwMzQzX2kyY19kYXRhKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKIAkJYnJlYWs7CiAJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CiAJCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCAmbWkwMzQzLCBtaTAzNDMuaTJjX3NsYXZlX2lkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmUsIDIrMSwgbWkwMzQzX2kyY19kYXRhKSA8IDApCisJCQkJCSAgICAgMHgyZSwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTIxLDggKzEyMSw4IEBACiB9CiAKIAotc3RhdGljIGludCBtaTAzNDNfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3N0YXRpYyBpbnQgbWkwMzQzX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAl1MTYgcmVnID0gMDsKIAlpbnQgZXJyID0gMDsKQEAgLTE0NCw1MSArMTQ0LDUxIEBACiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CiAJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwgY3RybC0+dmFsdWUsIDB4MDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQkJCQkJIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCQkJCQkgMHgwOSwgY3RybC0+dmFsdWUsIDB4MDAsCisJCQkJCQkgMCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfR0FJTjoKIAkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM1LCByZWcgPj4gOCwgcmVnICYgMHhmZiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCQkJCQkgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJCQkJCSAweDM1LCByZWcgPj4gOCwgcmVnICYgMHhmZiwKKwkJCQkJCSAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9IRkxJUDoKIAkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCBjdHJsLT52YWx1ZSA/IDB4NDA6MHgwMCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybC0+dmFsdWUgPyAweDIwOjB4MDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQkJCQkJIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCQkJCQkgMHgyMCwgY3RybC0+dmFsdWUgPyAweDQwOjB4MDAsCisJCQkJCQkgY3RybC0+dmFsdWUgPyAweDIwOjB4MDAsCisJCQkJCQkgMCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfVkZMSVA6CiAJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgY3RybC0+dmFsdWUgPyAweDgwOjB4MDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmwtPnZhbHVlID8gMHg4MDoweDAwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJCQkJCSBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkJCQkJIDB4MjAsIGN0cmwtPnZhbHVlID8gMHg4MDoweDAwLAorCQkJCQkJIGN0cmwtPnZhbHVlID8gMHg4MDoweDAwLAorCQkJCQkJIDAsIDApOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgogCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmQsIHJlZyA+PiA4LCByZWcgJiAweGZmLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJCQkJCSBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkJCQkJIDB4MmQsIHJlZyA+PiA4LCByZWcgJiAweGZmLAorCQkJCQkJIDAsIDApOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKIAkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjLCByZWcgPj4gOCwgcmVnICYgMHhmZiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCQkJCQkgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJCQkJCSAweDJjLCByZWcgPj4gOCwgcmVnICYgMHhmZiwKKwkJCQkJCSAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CiAJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYiwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQkJCQkJIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCQkJCQkgMHgyYiwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsCisJCQkJCQkgMCwgMCk7CiAJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyZSwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQkJCQkJIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCQkJCQkgMHgyZSwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsCisJCQkJCQkgMCwgMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTk4LDggKzE5OCw4IEBACiB9CiAKIAotc3RhdGljIGludCBtaTAzNDNfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCitzdGF0aWMgaW50IG1pMDM0M19zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQogewogCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZtaTAzNDM7CiAJaW50IGVyciA9IDA7CkBAIC0yMTMsMjAgKzIxMywyMCBAQAogfQogCiAKLXN0YXRpYyBpbnQgbWkwMzQzX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3N0YXRpYyBpbnQgbWkwMzQzX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJCSBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCiB7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkgewogCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGEsIDB4MDAsIDB4MDMsIDAsIDApOworCQkJCQkJIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCQkJCQkgMHgwYSwgMHgwMCwgMHgwMywgMCwgMCk7CiAJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTkpOwogCX0gZWxzZSB7CiAJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYSwgMHgwMCwgMHgwNSwgMCwgMCk7CisJCQkJCQkgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJCQkJCSAweDBhLCAweDAwLCAweDA1LCAwLCAwKTsKIAkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhhMCwgMHgxOSk7CiAJfQogCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwgMHgwMCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJCSAgICAgMiwgbWkwMzQzX2kyY19kYXRhKSA8IDApCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKG1pMDM0M19pMmNfZGF0YVs0XSAhPSAweDMyICYmIG1pMDM0M19pMmNfZGF0YVszXSAhPSAweGUzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9vdjc2MzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfb3Y3NjMwLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX292NzYzMC5jCmluZGV4IDRhMzY1MTkuLjNkYTA0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfb3Y3NjMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfb3Y3NjMwLmMKQEAgLTM0LDggKzM0LDggQEAKIAllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDBmLCAweDE4KTsKIAllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDUwLCAweDE5KTsKIAotCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTIsIDB4OGQpOwotCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDApOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTIsIDB4ODApOworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDEpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTUsIDB4MzQpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTYsIDB4MDMpOwogCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTcsIDB4MWMpOwpAQCAtNDMsMTIgKzQzLDE0IEBACiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxOSwgMHgwNik7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxYSwgMHhmNik7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxYiwgMHgwNCk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMCwgMHg0NCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMCwgMHhmNik7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyMywgMHhlZSk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNiwgMHhhMCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNywgMHg5YSk7Ci0JZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyOCwgMHgyMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyOCwgMHhhMCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyOSwgMHgzMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyYSwgMHhhMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyYiwgMHgxZik7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyZiwgMHgzZCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMCwgMHgyNCk7CiAJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMiwgMHg4Nik7CkBAIC02Nyw3ICs2OSw3IEBACiAKIAogc3RhdGljIGludCBvdjc2MzBfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQorCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtODAsMTUgKzgyLDE1IEBACiAJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDIsIGN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDMsIGN0cmwtPnZhbHVlKTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMSwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0dBSU46CiAJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDAsIGN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAkJZXJyICs9IGN0cmwtPnZhbHVlID8gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA1LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3RybC0+dmFsdWUtMSkgfCAweDIwKQotCQkgICAgICAgICAgICAgICAgICAgOiBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDUsIDB4MDApOworCQkJCQkJICAgICAgIChjdHJsLT52YWx1ZS0xKSB8IDB4MjApCisJCQkJICAgOiBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDUsIDB4MDApOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CiAJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDYsIGN0cmwtPnZhbHVlKTsKQEAgLTk4LDggKzEwMCw4IEBACiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSFVFOgogCQllcnIgKz0gY3RybC0+dmFsdWUgPyBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHJsLT52YWx1ZS0xKSB8IDB4MjApCi0JCSAgICAgICAgICAgICAgICAgICA6IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNCwgMHgwMCk7CisJCQkJCQkgICAgICAgKGN0cmwtPnZhbHVlLTEpIHwgMHgyMCkKKwkJCQkgICA6IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNCwgMHgwMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRToKIAkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwYywgY3RybC0+dmFsdWUpOwpAQCAtMTA4LDcgKzExMCw3IEBACiAJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MGQsIGN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6Ci0JCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTIsIChjdHJsLT52YWx1ZSA8PCAyKSB8IDB4MDkpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEyLCAoY3RybC0+dmFsdWUgPDwgMikgfCAweDc4KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKIAkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMywgY3RybC0+dmFsdWUpOwpAQCAtMTM3LDcgKzEzOSw3IEBACiAKIAogc3RhdGljIGludCBvdjc2MzBfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQorCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKIHsKIAlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmb3Y3NjMwOwogCWludCBlcnIgPSAwOwpAQCAtMTUwLDcgKzE1Miw3IEBACiAKIAogc3RhdGljIGludCBvdjc2MzBfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCisJCQkJIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzcxLDI2ICszNzMsMjkgQEAKIAogaW50IHNuOWMxMDJfcHJvYmVfb3Y3NjMwKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQogeworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG92NzYzMF9pZF90YWJsZVtdID0geworCQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmMpLCB9LAorCQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmQpLCB9LAorCQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGYpLCB9LAorCQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjApLCB9LAorCQl7IH0KKwl9OwogCWludCBlcnIgPSAwOwogCi0Jc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJm92NzYzMCk7Ci0KLQlpZiAobGUxNl90b19jcHUob3Y3NjMwLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjAyYyAmJgotCSAgICBsZTE2X3RvX2NwdShvdjc2MzAudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MDJkICYmCi0JICAgIGxlMTZfdG9fY3B1KG92NzYzMC51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSAweDYwOGYgJiYKLQkgICAgbGUxNl90b19jcHUob3Y3NjMwLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjBiMCkKKwlpZiAoIXNuOWMxMDJfbWF0Y2hfaWQoY2FtLCBvdjc2MzBfaWRfdGFibGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDEpOwogCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOwotCiAJaWYgKGVycikKIAkJcmV0dXJuIC1FSU87CiAKLQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBiLCAwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3dyaXRlKGNhbSwgJm92NzYzMCwgMHgwYiwgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmb3Y3NjMwKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9wYXMxMDZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMxMDZiLmMKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9wYXMxMDZiLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczEwNmIuYwppbmRleCBiMWRlZTc4Li45OTE1OTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczEwNmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMxMDZiLmMKQEAgLTUzLDggKzUzLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHBhczEwNmJfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCitzdGF0aWMgaW50IHBhczEwNmJfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKQEAgLTEwMiw4ICsxMDIsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGFzMTA2Yl9zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3N0YXRpYyBpbnQgcGFzMTA2Yl9zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQogewogCWludCBlcnIgPSAwOwogCkBAIC0xNDAsOCArMTQwLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHBhczEwNmJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCitzdGF0aWMgaW50IHBhczEwNmJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKIHsKIAlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmcGFzMTA2YjsKIAlpbnQgZXJyID0gMDsKQEAgLTE1NSw4ICsxNTUsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGFzMTA2Yl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQorc3RhdGljIGludCBwYXMxMDZiX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJCSAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQogewogCWludCBlcnIgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczIwMmJjYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfcGFzMjAyYmNhLmMKc2ltaWxhcml0eSBpbmRleCA2MSUKY29weSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMjAyYmNiLmMKY29weSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2EuYwppbmRleCA1Y2E1NGM3Li5jOGYxYWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczIwMmJjYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYS5jCkBAIC0xLDEzICsxLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBsdWctaW4gZm9yIFBBUzIwMkJDQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICoKKyAqIFBsdWctaW4gZm9yIFBBUzIwMkJDQSBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgICoKICAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBieSBDYXJsb3MgRWR1YXJkbyBNZWRhZ2xpYSBEeW9uaXNpbyAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICA8bWVkYWdsaWFAdW5kbC5vcmcuYnI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vY2FkdS5ob21lbGludXguY29tOjgwODAvICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIERBQyBNYWduaXR1ZGUsIGV4cG9zdXJlIGFuZCBncmVlbiBnYWluIGNvbnRyb2xzIGFkZGVkIGJ5ICAgICAgICAgICAgICAgICoKLSAqIEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKQEAgLTI4LDEwICsyMywxMCBAQAogI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCiAKIAotc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMyMDJiY2I7CitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHBhczIwMmJjYTsKIAogCi1zdGF0aWMgaW50IHBhczIwMmJjYl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQorc3RhdGljIGludCBwYXMyMDJiY2FfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtNTgsNTEgKzUzLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHBhczIwMmJjYl9nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQotewotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgotCQl7Ci0JCQlpbnQgcjEgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwNCksCi0JCQkgICAgcjIgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwNSk7Ci0JCQlpZiAocjEgPCAwIHx8IHIyIDwgMCkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCWN0cmwtPnZhbHVlID0gKHIxIDw8IDYpIHwgKHIyICYgMHgzZik7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKLQkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDA5KSkgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCWN0cmwtPnZhbHVlICY9IDB4MGY7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgotCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDcpKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgJj0gMHgwZjsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9HQUlOOgotCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MTApKSA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJY3RybC0+dmFsdWUgJj0gMHgxZjsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6Ci0JCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwOCkpIDwgMCkKLQkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSAmPSAweDBmOwotCQlyZXR1cm4gMDsKLQljYXNlIFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERToKLQkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBjKSkgPCAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotCi1zdGF0aWMgaW50IHBhczIwMmJjYl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCitzdGF0aWMgaW50IHBhczIwMmJjYV9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQogewogCWludCBlcnIgPSAwOwogCkBAIC0xMTUsOCArNjcsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCitzdGF0aWMgaW50IHBhczIwMmJjYV9zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCiB7CiAJaW50IGVyciA9IDA7CiAKQEAgLTE0OSwxMiArMTAxLDEyIEBACiB9CiAKIAotc3RhdGljIGludCBwYXMyMDJiY2Jfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3N0YXRpYyBpbnQgcGFzMjAyYmNhX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKIHsKLQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmcGFzMjAyYmNiOworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZwYXMyMDJiY2E7CiAJaW50IGVyciA9IDA7Ci0JdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgNCwKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyAzLAogCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAzOwogCiAJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CkBAIC0xNjQsMTUgKzExNiwxNCBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgcGFzMjAyYmNiID0gewotCS5uYW1lID0gIlBBUzIwMkJDQiIsCi0JLm1haW50YWluZXIgPSAiQ2FybG9zIEVkdWFyZG8gTWVkYWdsaWEgRHlvbmlzaW8gIgotCSAgICAgICAgICAgICAgIjxtZWRhZ2xpYUB1bmRsLm9yZy5icj4iLAorc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMyMDJiY2EgPSB7CisJLm5hbWUgPSAiUEFTMjAyQkNBIiwKKwkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKIAkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAogCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ180MDBLSFogfCBTTjlDMTAyX0kyQ18xMDBLSFosCiAJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKIAkuaTJjX3NsYXZlX2lkID0gMHg0MCwKLQkuaW5pdCA9ICZwYXMyMDJiY2JfaW5pdCwKKwkuaW5pdCA9ICZwYXMyMDJiY2FfaW5pdCwKIAkucWN0cmwgPSB7CiAJCXsKIAkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLApAQCAtMjM1LDggKzE4Niw3IEBACiAJCQkuZmxhZ3MgPSAwLAogCQl9LAogCX0sCi0JLmdldF9jdHJsID0gJnBhczIwMmJjYl9nZXRfY3RybCwKLQkuc2V0X2N0cmwgPSAmcGFzMjAyYmNiX3NldF9jdHJsLAorCS5zZXRfY3RybCA9ICZwYXMyMDJiY2Ffc2V0X2N0cmwsCiAJLmNyb3BjYXAgPSB7CiAJCS5ib3VuZHMgPSB7CiAJCQkubGVmdCA9IDAsCkBAIC0yNTEsNDMgKzIwMSwzOCBAQAogCQkJLmhlaWdodCA9IDQ4MCwKIAkJfSwKIAl9LAotCS5zZXRfY3JvcCA9ICZwYXMyMDJiY2Jfc2V0X2Nyb3AsCisJLnNldF9jcm9wID0gJnBhczIwMmJjYV9zZXRfY3JvcCwKIAkucGl4X2Zvcm1hdCA9IHsKIAkJLndpZHRoID0gNjQwLAogCQkuaGVpZ2h0ID0gNDgwLAogCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAogCQkucHJpdiA9IDgsCiAJfSwKLQkuc2V0X3BpeF9mb3JtYXQgPSAmcGFzMjAyYmNiX3NldF9waXhfZm9ybWF0CisJLnNldF9waXhfZm9ybWF0ID0gJnBhczIwMmJjYV9zZXRfcGl4X2Zvcm1hdAogfTsKIAogCi1pbnQgc245YzEwMl9wcm9iZV9wYXMyMDJiY2Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCi17ICAgICAgIAotCWludCByMCA9IDAsIHIxID0gMCwgZXJyID0gMDsKLQl1bnNpZ25lZCBpbnQgcGlkID0gMDsKK2ludCBzbjljMTAyX3Byb2JlX3BhczIwMmJjYShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwYXMyMDJiY2FfaWRfdGFibGVbXSA9IHsKKwkJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFmKSwgfSwKKwkJeyB9CisJfTsKKwlpbnQgZXJyID0gMDsKIAotCS8qCi0JICogIE1pbmltYWwgaW5pdGlhbGl6YXRpb24gdG8gZW5hYmxlIHRoZSBJMkMgY29tbXVuaWNhdGlvbgotCSAqICBOT1RFOiBkbyBOT1QgY2hhbmdlIHRoZSB2YWx1ZXMhCi0JICovCi0JZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgwMSk7IC8qIHNlbnNvciBwb3dlciBkb3duICovCi0JZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg0MCwgMHgwMSk7IC8qIHNlbnNvciBwb3dlciBvbiAqLwotCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOyAvKiBzZW5zb3IgY2xvY2sgYXQgMjQgTUh6ICovCisJaWYgKCFzbjljMTAyX21hdGNoX2lkKGNhbSxwYXMyMDJiY2FfaWRfdGFibGUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOwogCWlmIChlcnIpCiAJCXJldHVybiAtRUlPOwogCi0JcjAgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZwYXMyMDJiY2IsIDB4MDApOwotCXIxID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmcGFzMjAyYmNiLCAweDAxKTsKLQotCWlmIChyMCA8IDAgfHwgcjEgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQotCXBpZCA9IChyMCA8PCA0KSB8ICgocjEgJiAweGYwKSA+PiA0KTsKLQlpZiAocGlkICE9IDB4MDE3KQorCWlmIChzbjljMTAyX2kyY190cnlfd3JpdGUoY2FtLCAmcGFzMjAyYmNhLCAweDEwLCAwKSkgLyogdHJ5IHRvIHdyaXRlICovCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJnBhczIwMmJjYik7CisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJnBhczIwMmJjYSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMjAyYmNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2IuYwpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczIwMmJjYi5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9wYXMyMDJiY2IuYwppbmRleCA1Y2E1NGM3Li5lM2MxMTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczIwMmJjYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3BhczIwMmJjYi5jCkBAIC01OCw4ICs1OCw4IEBACiB9CiAKIAotc3RhdGljIGludCBwYXMyMDJiY2JfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3N0YXRpYyBpbnQgcGFzMjAyYmNiX2dldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKQEAgLTEwMSw4ICsxMDEsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3N0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCiB7CiAJaW50IGVyciA9IDA7CiAKQEAgLTExNSw4ICsxMTUsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCitzdGF0aWMgaW50IHBhczIwMmJjYl9zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCiB7CiAJaW50IGVyciA9IDA7CiAKQEAgLTE0OSw4ICsxNDksOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCitzdGF0aWMgaW50IHBhczIwMmJjYl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCiB7CiAJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJnBhczIwMmJjYjsKIAlpbnQgZXJyID0gMDsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMyMDJiY2IgPSB7CiAJLm5hbWUgPSAiUEFTMjAyQkNCIiwKIAkubWFpbnRhaW5lciA9ICJDYXJsb3MgRWR1YXJkbyBNZWRhZ2xpYSBEeW9uaXNpbyAiCi0JICAgICAgICAgICAgICAiPG1lZGFnbGlhQHVuZGwub3JnLmJyPiIsCisJCSAgICAgICI8bWVkYWdsaWFAdW5kbC5vcmcuYnI+IiwKIAkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAogCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ180MDBLSFogfCBTTjlDMTAyX0kyQ18xMDBLSFosCiAJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKQEAgLTI2Myw3ICsyNjMsNyBAQAogCiAKIGludCBzbjljMTAyX3Byb2JlX3BhczIwMmJjYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKLXsgICAgICAgCit7CiAJaW50IHIwID0gMCwgcjEgPSAwLCBlcnIgPSAwOwogCXVuc2lnbmVkIGludCBwaWQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9zZW5zb3IuaApyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKaW5kZXggN2Q5NTNiMi4uMmE4NzRlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmgKQEAgLTU4LDcgKzU4LDcgQEAKICAgIFByb2JpbmcgZnVuY3Rpb25zOiBvbiBzdWNjZXNzLCB5b3UgbXVzdCBhdHRhY2ggdGhlIHNlbnNvciB0byB0aGUgY2FtZXJhCiAgICBieSBjYWxsaW5nIHNuOWMxMDJfYXR0YWNoX3NlbnNvcigpIHByb3ZpZGVkIGJlbG93LgogICAgVG8gZW5hYmxlIHRoZSBJMkMgY29tbXVuaWNhdGlvbiwgeW91IG1pZ2h0IG5lZWQgdG8gcGVyZm9ybSBhIHJlYWxseSBiYXNpYwotICAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFNOOUMxMFggY2hpcCBieSB1c2luZyB0aGUgd3JpdGUgZnVuY3Rpb24gZGVjbGFyZWQgCisgICBpbml0aWFsaXphdGlvbiBvZiB0aGUgU045QzEwWCBjaGlwIGJ5IHVzaW5nIHRoZSB3cml0ZSBmdW5jdGlvbiBkZWNsYXJlZAogICAgYWhlYWQuCiAgICBGdW5jdGlvbnMgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzLCB0aGUgYXBwcm9wcmlhdGUgZXJyb3Igb3RoZXJ3aXNlLgogKi8KQEAgLTY2LDEzICs2NiwxNCBAQAogZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX21pMDM0MyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CiBleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfb3Y3NjMwKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKIGV4dGVybiBpbnQgc245YzEwMl9wcm9iZV9wYXMxMDZiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV9wYXMyMDJiY2Eoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOwogZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX3BhczIwMmJjYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CiBleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfdGFzNTExMGMxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CiBleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CiAKIC8qCiAgICBBZGQgdGhlIGFib3ZlIGVudHJpZXMgdG8gdGhpcyB0YWJsZS4gQmUgc3VyZSB0byBhZGQgdGhlIGVudHJ5IGluIHRoZSByaWdodAotICAgcGxhY2UsIHNpbmNlLCBvbiBmYWlsdXJlLCB0aGUgbmV4dCBwcm9iaW5nIHJvdXRpbmUgaXMgY2FsbGVkIGFjY29yZGluZyB0byAKKyAgIHBsYWNlLCBzaW5jZSwgb24gZmFpbHVyZSwgdGhlIG5leHQgcHJvYmluZyByb3V0aW5lIGlzIGNhbGxlZCBhY2NvcmRpbmcgdG8KICAgIHRoZSBvcmRlciBvZiB0aGUgbGlzdCBiZWxvdywgZnJvbSB0b3AgdG8gYm90dG9tLgogKi8KICNkZWZpbmUgU045QzEwMl9TRU5TT1JfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTgxLDE2ICs4MiwyMSBAQAogCSZzbjljMTAyX3Byb2JlX3BhczEwNmIsIC8qIHN0cm9uZyBkZXRlY3Rpb24gYmFzZWQgb24gU0VOU09SIGlkcyAqLyAgICBcCiAJJnNuOWMxMDJfcHJvYmVfcGFzMjAyYmNiLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8gIFwKIAkmc245YzEwMl9wcm9iZV9odjcxMzFkLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8gICAgXAorCSZzbjljMTAyX3Byb2JlX3BhczIwMmJjYSwgLyogZGV0ZWN0aW9uIG1vc3RseSBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLyBcCiAJJnNuOWMxMDJfcHJvYmVfb3Y3NjMwLCAvKiBkZXRlY3Rpb24gbW9zdGx5IGJhc2VkIG9uIFVTQiBwaWQvdmlkICovICAgIFwKIAkmc245YzEwMl9wcm9iZV90YXM1MTEwYzFiLCAvKiBkZXRlY3Rpb24gYmFzZWQgb24gVVNCIHBpZC92aWQgKi8gICAgICAgXAogCSZzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLyAgICAgICBcCiAJTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH07CiAKKy8qIERldmljZSBpZGVudGlmaWNhdGlvbiAqLworZXh0ZXJuIHN0cnVjdCBzbjljMTAyX2RldmljZSoKK3NuOWMxMDJfbWF0Y2hfaWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKIC8qIEF0dGFjaCBhIHByb2JlZCBzZW5zb3IgdG8gdGhlIGNhbWVyYS4gKi8KLWV4dGVybiB2b2lkIAorZXh0ZXJuIHZvaWQKIHNuOWMxMDJfYXR0YWNoX3NlbnNvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcik7CisJCSAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKTsKIAogLyoKICAgIEVhY2ggU045QzEweCBjYW1lcmEgaGFzIHByb3BlciBQSUQvVklEIGlkZW50aWZpZXJzLgpAQCAtOTksNyArMTA1LDcgQEAKICovCiAjZGVmaW5lIFNOOUMxMDJfVVNCX0RFVklDRSh2ZW5kLCBwcm9kLCBpbnRjbGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgICAgICAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUywgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MsICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkuaWRWZW5kb3IgPSAodmVuZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCS5pZFByb2R1Y3QgPSAocHJvZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJLmJJbnRlcmZhY2VDbGFzcyA9IChpbnRjbGFzcykKQEAgLTEwOCw2ICsxMTQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNuOWMxMDJfaWRfdGFibGVbXSA9IHsgICAgICAgICAgICAgICAgICAgICAgXAogCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIH0sIC8qIFRBUzUxMTBDMUIgKi8gICAgICAgICAgICAgICAgICAgICBcCiAJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1KSwgfSwgLyogVEFTNTExMEMxQiAqLyAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDcpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwOSksIH0sIC8qIFBBUzEwNkIgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCiAJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDBkKSwgfSwgLyogUEFTMTA2QiAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKIAl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjQpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTI2LDcgKzEzMyw3IEBACiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODgsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgIFwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YSwgMHhmZiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgXAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhiLCAweGZmKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0JeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGMsIDB4ZmYpLCB9LCAvKiBIVjcxMzF4ICovICAgICAgICAgIFwKKwl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YywgMHhmZiksIH0sIC8qIEhWNzEzMS9SICovICAgICAgICAgXAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhlLCAweGZmKSwgfSwgLyogQ0lTLVZGMTAgKi8gICAgICAgICBcCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGYsIDB4ZmYpLCB9LCAvKiBPVjc2MzAgKi8gICAgICAgICAgIFwKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhMCwgMHhmZiksIH0sICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTU1LDE5ICsxNjIsMTkgQEAKICAgIFJlYWQvd3JpdGUgcm91dGluZXM6IHRoZXkgYWx3YXlzIHJldHVybiAtMSBvbiBlcnJvciwgMCBvciB0aGUgcmVhZCB2YWx1ZQogICAgb3RoZXJ3aXNlLiBOT1RFIHRoYXQgYSByZWFsIHJlYWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFNOOUMxMFgKICAgIGNoaXAgZm9yIHNvbWUgb2YgaXRzIHJlZ2lzdGVycy4gVG8gd29yayBhcm91bmQgdGhpcyBwcm9ibGVtLCBhIHBzZXVkby1yZWFkCi0gICBjYWxsIGlzIHByb3ZpZGVkIGluc3RlYWQ6IGl0IHJldHVybnMgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdmFsdWUgCisgICBjYWxsIGlzIHByb3ZpZGVkIGluc3RlYWQ6IGl0IHJldHVybnMgdGhlIGxhc3Qgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdmFsdWUKICAgIG9uIHRoZSByZWdpc3RlciAoMCBpZiBpdCBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuKSwgdGhlIHVzdWFsIC0xIG9uIGVycm9yLgogKi8KIAogLyogVGhlICJ0cnkiIEkyQyBJL08gdmVyc2lvbnMgYXJlIHVzZWQgd2hlbiBwcm9iaW5nIHRoZSBzZW5zb3IgKi8KIGV4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSosc3RydWN0IHNuOWMxMDJfc2Vuc29yKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGFkZHJlc3MsIHU4IHZhbHVlKTsKKwkJCQkgdTggYWRkcmVzcywgdTggdmFsdWUpOwogZXh0ZXJuIGludCBzbjljMTAyX2kyY190cnlfcmVhZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLHN0cnVjdCBzbjljMTAyX3NlbnNvciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGFkZHJlc3MpOworCQkJCXU4IGFkZHJlc3MpOwogCiAvKgogICAgVGhlc2UgbXVzdCBiZSB1c2VkIGlmIGFuZCBvbmx5IGlmIHRoZSBzZW5zb3IgZG9lc24ndCBpbXBsZW1lbnQgdGhlIHN0YW5kYXJkCi0gICBJMkMgcHJvdG9jb2wuIFRoZXJlIGFyZSBhIG51bWJlciBvZiBnb29kIHJlYXNvbnMgd2h5IHlvdSBtdXN0IHVzZSB0aGUgCisgICBJMkMgcHJvdG9jb2wuIFRoZXJlIGFyZSBhIG51bWJlciBvZiBnb29kIHJlYXNvbnMgd2h5IHlvdSBtdXN0IHVzZSB0aGUKICAgIHNpbmdsZS1ieXRlIHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9uczogZG8gbm90IGFidXNlLiBUaGUgZmlyc3QgZnVuY3Rpb24KICAgIHdyaXRlcyBuIGJ5dGVzLCBmcm9tIGRhdGEwIHRvIGRhdGFuLCB0byByZWdpc3RlcnMgMHgwOSAtIDB4MDkrbiBvZiBTTjlDMTBYCiAgICBjaGlwLiBUaGUgc2Vjb25kIG9uZSBwcm9ncmFtcyB0aGUgcmVnaXN0ZXJzIDB4MDkgYW5kIDB4MTAgd2l0aCBkYXRhMCBhbmQKQEAgLTE3NywxMiArMTg0LDEyIEBACiAgICBieXRlLgogKi8KIGV4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTAsIHU4IGRhdGExLCB1OCBkYXRhMiwgdTggZGF0YTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTQsIHU4IGRhdGE1KTsKKwkJCQkgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBuLAorCQkJCSAgICAgdTggZGF0YTAsIHU4IGRhdGExLCB1OCBkYXRhMiwgdTggZGF0YTMsCisJCQkJICAgICB1OCBkYXRhNCwgdTggZGF0YTUpOwogZXh0ZXJuIGludCBzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggZGF0YTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkYXRhMSwgdTggbiwgdTggYnVmZmVyW10pOworCQkJCSAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggZGF0YTAsCisJCQkJICAgIHU4IGRhdGExLCB1OCBuLCB1OCBidWZmZXJbXSk7CiAKIC8qIFRvIGJlIHVzZWQgYWZ0ZXIgdGhlIHNlbnNvciBzdHJ1Y3QgaGFzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGNhbWVyYSBzdHJ1Y3QgKi8KIGV4dGVybiBpbnQgc245YzEwMl9pMmNfd3JpdGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiwgdTggYWRkcmVzcywgdTggdmFsdWUpOwpAQCAtMjQ1LDE3ICsyNTIsMTcgQEAKIAogCS8qCiAJICAgTk9URTogV2hlcmUgbm90IG5vdGVkLG1vc3Qgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IG1hbmRhdG9yeS4KLQkgICAgICAgICBTZXQgdG8gbnVsbCBpZiB5b3UgZG8gbm90IGltcGxlbWVudCB0aGVtLiBJZiBpbXBsZW1lbnRlZCwKLQkgICAgICAgICB0aGV5IG11c3QgcmV0dXJuIDAgb24gc3VjY2VzcywgdGhlIHByb3BlciBlcnJvciBvdGhlcndpc2UuCisJCSBTZXQgdG8gbnVsbCBpZiB5b3UgZG8gbm90IGltcGxlbWVudCB0aGVtLiBJZiBpbXBsZW1lbnRlZCwKKwkJIHRoZXkgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzLCB0aGUgcHJvcGVyIGVycm9yIG90aGVyd2lzZS4KIAkqLwogCiAJaW50ICgqaW5pdCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOwogCS8qCi0JICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgc2Vuc29yIGhhcyBiZWVuIGF0dGFjaGVkLiAKKwkgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBzZW5zb3IgaGFzIGJlZW4gYXR0YWNoZWQuCiAJICAgSXQgc2hvdWxkIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgc2Vuc29yIG9ubHksIGJ1dCBtYXkgYWxzbwogCSAgIGNvbmZpZ3VyZSBwYXJ0IG9mIHRoZSBTTjlDMTBYIGNoaXAgaWYgbmVjZXNzYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0bwogCSAgIHNldHVwIHBpY3R1cmUgc2V0dGluZ3MgbGlrZSBicmlnaHRuZXNzLCBjb250cmFzdCwgZXRjLi4gaGVyZSwgaWYKLQkgICB0aGUgY29ycmlzcG9uZGluZyBjb250cm9scyBhcmUgaW1wbGVtZW50ZWQgKHNlZSBiZWxvdyksIHNpbmNlIAorCSAgIHRoZSBjb3JyaXNwb25kaW5nIGNvbnRyb2xzIGFyZSBpbXBsZW1lbnRlZCAoc2VlIGJlbG93KSwgc2luY2UKIAkgICB0aGV5IGFyZSBhZGp1c3RlZCBpbiB0aGUgY29yZSBkcml2ZXIgYnkgY2FsbGluZyB0aGUgc2V0X2N0cmwoKQogCSAgIG1ldGhvZCBhZnRlciBpbml0KCksIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcwogCSAgIHNwZWNpZmllZCBpbiB0aGUgdjRsMl9xdWVyeWN0cmwgbGlzdCBvZiBzdXBwb3J0ZWQgY29udHJvbHM7CkBAIC0yNjYsMTMgKzI3MywxMyBAQAogCiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsW1NOOUMxMDJfTUFYX0NUUkxTXTsKIAkvKgotCSAgIE9wdGlvbmFsIGxpc3Qgb2YgZGVmYXVsdCBjb250cm9scywgZGVmaW5lZCBhcyBpbmRpY2F0ZWQgaW4gdGhlIAorCSAgIE9wdGlvbmFsIGxpc3Qgb2YgZGVmYXVsdCBjb250cm9scywgZGVmaW5lZCBhcyBpbmRpY2F0ZWQgaW4gdGhlCiAJICAgVjRMMiBBUEkuIE1lbnUgdHlwZSBjb250cm9scyBhcmUgbm90IGhhbmRsZWQgYnkgdGhpcyBpbnRlcmZhY2UuCiAJKi8KIAogCWludCAoKmdldF9jdHJsKShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCk7CiAJaW50ICgqc2V0X2N0cmwpKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAotCSAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKTsKKwkJCWNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpOwogCS8qCiAJICAgWW91IG11c3QgaW1wbGVtZW50IGF0IGxlYXN0IHRoZSBzZXRfY3RybCBtZXRob2QgaWYgeW91IGhhdmUgZGVmaW5lZAogCSAgIHRoZSBsaXN0IGFib3ZlLiBUaGUgcmV0dXJuZWQgdmFsdWUgbXVzdCBmb2xsb3cgdGhlIFY0TDIKQEAgLTI5OSw3ICszMDYsNyBAQAogCSAgIHNwZWNpZmllZCBpbiB0aGUgY3JvcGNhcCBzdWJzdHJ1Y3R1cmVzICdib3VuZHMnIGFuZCAnZGVmcmVjdCcuCiAJICAgQnkgZGVmYXVsdCwgdGhlIHNvdXJjZSByZWN0YW5nbGUgc2hvdWxkIGNvdmVyIHRoZSBsYXJnZXN0IHBvc3NpYmxlCiAJICAgYXJlYS4gQWdhaW4sIGl0IGlzIG5vdCBhbHdheXMgdHJ1ZSB0aGF0IHRoZSBsYXJnZXN0IHNvdXJjZSByZWN0YW5nbGUKLQkgICBjYW4gY292ZXIgdGhlIGVudGlyZSBhY3RpdmUgd2luZG93LCBhbHRob3VnaCBpdCBpcyBhIHJhcmUgY2FzZSBmb3IgCisJICAgY2FuIGNvdmVyIHRoZSBlbnRpcmUgYWN0aXZlIHdpbmRvdywgYWx0aG91Z2ggaXQgaXMgYSByYXJlIGNhc2UgZm9yCiAJICAgdGhlIGhhcmR3YXJlIHdlIGhhdmUuIFRoZSBib3VuZHMgb2YgdGhlIHNvdXJjZSByZWN0YW5nbGUgX211c3RfIGJlCiAJICAgbXVsdGlwbGUgb2YgMTYgYW5kIG11c3QgdXNlIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3lzdGVtIGFzIGluZGljYXRlZAogCSAgIGJlZm9yZTsgdGhlaXIgY2VudGVycyBzaGFsbCBhbGlnbiBpbml0aWFsbHkuCkBAIC0zMTAsMTMgKzMxNywxMyBAQAogCSAgIGRlZmluZWQgdGhlIGNvcnJlY3QgZGVmYXVsdCBib3VuZHMgaW4gdGhlIHN0cnVjdHVyZXMuCiAJICAgU2VlIHRoZSBWNEwyIEFQSSBmb3IgZnVydGhlciBkZXRhaWxzLgogCSAgIE5PVEU6IG9uY2UgeW91IGhhdmUgZGVmaW5lZCB0aGUgYm91bmRzIG9mIHRoZSBhY3RpdmUgd2luZG93Ci0JICAgICAgICAgKHN0cnVjdCBjcm9wY2FwLmJvdW5kcykgeW91IG11c3Qgbm90IGNoYW5nZSB0aGVtLmFueW1vcmUuCisJCSAoc3RydWN0IGNyb3BjYXAuYm91bmRzKSB5b3UgbXVzdCBub3QgY2hhbmdlIHRoZW0uYW55bW9yZS4KIAkgICBPbmx5ICdib3VuZHMnIGFuZCAnZGVmcmVjdCcgZmllbGRzIGFyZSBtYW5kYXRvcnksIG90aGVyIGZpZWxkcwogCSAgIHdpbGwgYmUgaWdub3JlZC4KIAkqLwogCiAJaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAotCSAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KTsKKwkJCWNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpOwogCS8qCiAJICAgVG8gYmUgY2FsbGVkIG9uIFZJRElPQ19DX1NFVENST1AuIFRoZSBjb3JlIG1vZHVsZSBhbHdheXMgY2FsbHMgYQogCSAgIGRlZmF1bHQgcm91dGluZSB3aGljaCBjb25maWd1cmVzIHRoZSBhcHByb3ByaWF0ZSBTTjlDMTBYIHJlZ3MgKGFsc28KQEAgLTMyNSwxMiArMzMyLDEyIEBACiAJICAgY2FzZSB5b3Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZnVuY3Rpb24sIHlvdSBhbHdheXMgaGF2ZSB0byBwcm9ncmFtCiAJICAgdGhlIGNoaXAgdG8gbWF0Y2ggdGhvc2UgdmFsdWVzOyBvbiBlcnJvciByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcKIAkgICBlcnJvciBjb2RlIHdpdGhvdXQgcm9sbGluZyBiYWNrLgotCSAgIE5PVEU6IGluIGNhc2UsIHlvdSBtdXN0IHByb2dyYW0gdGhlIFNOOUMxMFggY2hpcCB0byBnZXQgcmlkIG9mIAotCSAgICAgICAgIGJsYW5rIHBpeGVscyBvciBibGFuayBsaW5lcyBhdCB0aGUgX3N0YXJ0XyBvZiBlYWNoIGxpbmUgb3IKLQkgICAgICAgICBmcmFtZSBhZnRlciBlYWNoIEhTWU5DIG9yIFZTWU5DLCBzbyB0aGF0IHRoZSBpbWFnZSBzdGFydHMgd2l0aAotCSAgICAgICAgIHJlYWwgUkdCIGRhdGEgKHNlZSByZWdzIDB4MTIsIDB4MTMpIChoYXZpbmcgc2V0IEhfU0laRSBhbmQsCi0JICAgICAgICAgVl9TSVpFIHlvdSBkb24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgYmxhbmsgcGl4ZWxzIG9yIGJsYW5rCi0JICAgICAgICAgbGluZXMgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUgb3IgZnJhbWUpLgorCSAgIE5PVEU6IGluIGNhc2UsIHlvdSBtdXN0IHByb2dyYW0gdGhlIFNOOUMxMFggY2hpcCB0byBnZXQgcmlkIG9mCisJCSBibGFuayBwaXhlbHMgb3IgYmxhbmsgbGluZXMgYXQgdGhlIF9zdGFydF8gb2YgZWFjaCBsaW5lIG9yCisJCSBmcmFtZSBhZnRlciBlYWNoIEhTWU5DIG9yIFZTWU5DLCBzbyB0aGF0IHRoZSBpbWFnZSBzdGFydHMgd2l0aAorCQkgcmVhbCBSR0IgZGF0YSAoc2VlIHJlZ3MgMHgxMiwgMHgxMykgKGhhdmluZyBzZXQgSF9TSVpFIGFuZCwKKwkJIFZfU0laRSB5b3UgZG9uJ3QgaGF2ZSB0byBjYXJlIGFib3V0IGJsYW5rIHBpeGVscyBvciBibGFuaworCQkgbGluZXMgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUgb3IgZnJhbWUpLgogCSovCiAKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBpeF9mb3JtYXQ7CkBAIC0zNDIsMjkgKzM0OSwyMyBAQAogCSAgIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCBmb3IgdW5jb21wcmVzc2VkIHZpZGVvLCA4IG9yIDkgKGRlc3BpdGUgdGhlCiAJICAgY3VycmVudCB2YWx1ZSBvZiAncGl4ZWxmb3JtYXQnKS4KIAkgICBOT1RFIDE6IGJvdGggJ3dpZHRoJyBhbmQgJ2hlaWdodCcgX211c3RfIGJlIGVpdGhlciAxLzEgb3IgMS8yIG9yIDEvNAotCSAgICAgICAgICAgb2YgY3JvcGNhcC5kZWZyZWN0LndpZHRoIGFuZCBjcm9wY2FwLmRlZnJlY3QuaGVpZ2h0LiBJCi0JICAgICAgICAgICBzdWdnZXN0IDEvMS4KKwkJICAgb2YgY3JvcGNhcC5kZWZyZWN0LndpZHRoIGFuZCBjcm9wY2FwLmRlZnJlY3QuaGVpZ2h0LiBJCisJCSAgIHN1Z2dlc3QgMS8xLgogCSAgIE5PVEUgMjogVGhlIGluaXRpYWwgY29tcHJlc3Npb24gcXVhbGl0eSBpcyBkZWZpbmVkIGJ5IHRoZSBmaXJzdCBiaXQKLQkgICAgICAgICAgIG9mIHJlZyAweDE3IGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGltYWdlIHNlbnNvci4KKwkJICAgb2YgcmVnIDB4MTcgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW1hZ2Ugc2Vuc29yLgogCSAgIE5PVEUgMzogYXMgc2FpZCBhYm92ZSwgeW91IGhhdmUgdG8gcHJvZ3JhbSB0aGUgU045QzEwWCBjaGlwIHRvIGdldAotCSAgICAgICAgICAgcmlkIG9mIGFueSBibGFuayBwaXhlbHMsIHNvIHRoYXQgdGhlIG91dHB1dCBvZiB0aGUgc2Vuc29yCi0JICAgICAgICAgICBtYXRjaGVzIHRoZSBSR0IgYmF5ZXIgc2VxdWVuY2UgKGkuZS4gQkdCR0JHLi4uR1JHUkdSKS4KKwkJICAgcmlkIG9mIGFueSBibGFuayBwaXhlbHMsIHNvIHRoYXQgdGhlIG91dHB1dCBvZiB0aGUgc2Vuc29yCisJCSAgIG1hdGNoZXMgdGhlIFJHQiBiYXllciBzZXF1ZW5jZSAoaS5lLiBCR0JHQkcuLi5HUkdSR1IpLgogCSovCiAKIAlpbnQgKCpzZXRfcGl4X2Zvcm1hdCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0JICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCk7CisJCQkgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpOwogCS8qCiAJICAgVG8gYmUgY2FsbGVkIG9uIFZJRElPQ19TX0ZNVCwgd2hlbiBzd2l0Y2hpbmcgZnJvbSB0aGUgU0JHR1I4IHRvCiAJICAgU045QzEwWCBwaXhlbCBmb3JtYXQgb3IgdmljZXZlcnNhLiBPbiBlcnJvciByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcKIAkgICBlcnJvciBjb2RlIHdpdGhvdXQgcm9sbGluZyBiYWNrLgogCSovCiAKLQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZSogdXNiZGV2OwotCS8qCi0JICAgUG9pbnRzIHRvIHRoZSB1c2JfZGV2aWNlIHN0cnVjdCBhZnRlciB0aGUgc2Vuc29yIGlzIGF0dGFjaGVkLgotCSAgIERvIG5vdCB0b3VjaCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgotCSovCi0KIAkvKgogCSAgIERvIE5PVCB3cml0ZSB0byB0aGUgZGF0YSBiZWxvdywgaXQncyBSRUFEIE9OTFkuIEl0IGlzIHVzZWQgYnkgdGhlCiAJICAgY29yZSBtb2R1bGUgdG8gc3RvcmUgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgdmFsdWVzIG9mIHRoZSBhYm92ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTEwYzFiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwYzFiLmMKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTEwYzFiLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMTBjMWIuYwppbmRleCAzMmRkZjIzLi4yOTRlYjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3RhczUxMTBjMWIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTEwYzFiLmMKQEAgLTQ0LDggKzQ0LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHRhczUxMTBjMWJfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCitzdGF0aWMgaW50IHRhczUxMTBjMWJfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtNjEsOCArNjEsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgdGFzNTExMGMxYl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3N0YXRpYyBpbnQgdGFzNTExMGMxYl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQogewogCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZ0YXM1MTEwYzFiOwogCWludCBlcnIgPSAwOwpAQCAtODEsOCArODEsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgdGFzNTExMGMxYl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQorc3RhdGljIGludCB0YXM1MTEwYzFiX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQogewogCWludCBlcnIgPSAwOwogCkBAIC0xNDIsMTQgKzE0MiwxOCBAQAogCiBpbnQgc245YzEwMl9wcm9iZV90YXM1MTEwYzFiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQogewotCS8qIFRoaXMgc2Vuc29yIGhhcyBubyBpZGVudGlmaWVycywgc28gbGV0J3MgYXR0YWNoIGl0IGFueXdheSAqLwotCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZ0YXM1MTEwYzFiKTsKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0YXM1MTEwYzFiX2lkX3RhYmxlW10gPSB7CisJCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIH0sCisJCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwNSksIH0sCisJCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYiksIH0sCisJCXsgfQorCX07CiAKIAkvKiBTZW5zb3IgZGV0ZWN0aW9uIGlzIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCi0JaWYgKGxlMTZfdG9fY3B1KHRhczUxMTBjMWIudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MDAxICYmCi0JICAgIGxlMTZfdG9fY3B1KHRhczUxMTBjMWIudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MDA1ICYmCi0JICAgIGxlMTZfdG9fY3B1KHRhczUxMTBjMWIudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MGFiKQorCWlmICghc245YzEwMl9tYXRjaF9pZChjYW0sIHRhczUxMTBjMWJfaWRfdGFibGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZ0YXM1MTEwYzFiKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTMwZDFiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTMwZDFiLmMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTMwZDFiLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX3RhczUxMzBkMWIuYwppbmRleCBhMDcyOGYwLi45ZWNiMDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3RhczUxMzBkMWIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl90YXM1MTMwZDFiLmMKQEAgLTQyLDggKzQyLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHRhczUxMzBkMWJfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCitzdGF0aWMgaW50IHRhczUxMzBkMWJfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtNjIsOCArNjIsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgdGFzNTEzMGQxYl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3N0YXRpYyBpbnQgdGFzNTEzMGQxYl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQogewogCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZ0YXM1MTMwZDFiOwogCXU4IGhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDEwNCwKQEAgLTgyLDggKzgyLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHRhczUxMzBkMWJfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3N0YXRpYyBpbnQgdGFzNTEzMGQxYl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtMTUzLDEzICsxNTMsMTcgQEAKIAogaW50IHNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKIHsKLQkvKiBUaGlzIHNlbnNvciBoYXMgbm8gaWRlbnRpZmllcnMsIHNvIGxldCdzIGF0dGFjaCBpdCBhbnl3YXkgKi8KLQlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmdGFzNTEzMGQxYik7CisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdGFzNTEzMGQxYl9pZF90YWJsZVtdID0geworCQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUpLCB9LAorCQl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWEpLCB9LAorCQl7IH0KKwl9OwogCiAJLyogU2Vuc29yIGRldGVjdGlvbiBpcyBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLwotCWlmIChsZTE2X3RvX2NwdSh0YXM1MTMwZDFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjAyNSAmJgotCSAgICBsZTE2X3RvX2NwdSh0YXM1MTMwZDFiLnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4NjBhYSkKKwlpZiAoIXNuOWMxMDJfbWF0Y2hfaWQoY2FtLCB0YXM1MTMwZDFiX2lkX3RhYmxlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmdGFzNTEzMGQxYik7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RyYWRpcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKaW5kZXggOWQ3NjkyNi4uMDc0NzZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBzdHJhZGlzLmMgLSBzdHJhZGlzIDQ6MjoyIG1wZWcgZGVjb2RlciBkcml2ZXIKICAqCiAgKiBTdHJhZGlzIDQ6MjoyIE1QRUctMiBEZWNvZGVyIERyaXZlcgpAQCAtMTE5MSw5ICsxMTkxLDkgQEAKIH0KIAogLyogY2xpcF9kcmF3X3JlY3RhbmdsZShjbSx4LHksdyxoKSAtLSBoYW5kbGUgY2xpcHBpbmcgYW4gYXJlYQotICogYml0bWFwIGlzIGZpeGVkIHdpZHRoLCAxMjggYnl0ZXMgKDEwMjQgcGl4ZWxzIHJlcHJlc2VudGVkKSAKLSAqIGFycmFuZ2VkIG1vc3Qtc2lnaWZpY2FudC1iaXQtbGVmdCBpbiAzMi1iaXQgd29yZHMgCi0gKiBiYXNlZCBvbiBzYWE3MTQ2IGNsaXBwaW5nIGhhcmR3YXJlLCBpdCBzd2FwcyBieXRlcyBpZiBMRSAKKyAqIGJpdG1hcCBpcyBmaXhlZCB3aWR0aCwgMTI4IGJ5dGVzICgxMDI0IHBpeGVscyByZXByZXNlbnRlZCkKKyAqIGFycmFuZ2VkIG1vc3Qtc2lnaWZpY2FudC1iaXQtbGVmdCBpbiAzMi1iaXQgd29yZHMKKyAqIGJhc2VkIG9uIHNhYTcxNDYgY2xpcHBpbmcgaGFyZHdhcmUsIGl0IHN3YXBzIGJ5dGVzIGlmIExFCiAgKiBtdWNoIG9mIHRoaXMgbWFrZXMgdXAgZm9yIGVnY3MgYnJhaW4gZGFtYWdlIC0tIHNvIGlmIHlvdQogICogYXJlIHdvbmRlcmluZyAid2h5IGRpZCBoZSBkbyB0aGlzPyIgaXQgaXMgYmVjYXVzZSB0aGUgQwogICogd2FzIGFkanVzdGVkIHRvIGdlbmVyYXRlIHRoZSBvcHRpbWFsIGFzbSBvdXRwdXQgd2l0aG91dApAQCAtMTI1OSw3ICsxMjU5LDcgQEAKIAkJCWNsaXBfZHJhd19yZWN0YW5nbGUoY2xpcG1hcCwgY3JbaV0ueCwgY3JbaV0ueSwKIAkJCQljcltpXS53aWR0aCwgY3JbaV0uaGVpZ2h0KTsKIAl9Ci0JLyogY2xpcCBhZ2FpbnN0IHZpZXdpbmcgd2luZG93IEFORCBzY3JlZW4gCisJLyogY2xpcCBhZ2FpbnN0IHZpZXdpbmcgd2luZG93IEFORCBzY3JlZW4KIAkgICBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5IG9uIHRoZSB1c2VyIHByb2dyYW0KIAkgKi8KIAljbGlwX2RyYXdfcmVjdGFuZ2xlKGNsaXBtYXAsIChzYWEtPndpbi54ICsgd2lkdGggPiBzYWEtPndpbi5zd2lkdGgpID8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuYwppbmRleCBiNDk3YTZhLi5iMzhiZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0djY4MC5jCkBAIC0xLDE2ICsxLDE2IEBACiAvKgogICogIFNUVjA2ODAgVVNCIENhbWVyYSBEcml2ZXIsIGJ5IEtldmluIFNpc3NvbiAoa2pzaXNzb25AYmVsbHNvdXRoLm5ldCkKLSAqICAKLSAqIFRoYW5rcyB0byBTVE1pY3JvZWxlY3Ryb25pY3MgZm9yIGluZm9ybWF0aW9uIG9uIHRoZSB1c2IgY29tbWFuZHMsIGFuZCAKLSAqIHRvIFN0ZXZlIE1pbGxlciBhdCBTVE0gZm9yIGhpcyBoZWxwIGFuZCBlbmNvdXJhZ2VtZW50IHdoaWxlIEkgd2FzIAorICoKKyAqIFRoYW5rcyB0byBTVE1pY3JvZWxlY3Ryb25pY3MgZm9yIGluZm9ybWF0aW9uIG9uIHRoZSB1c2IgY29tbWFuZHMsIGFuZAorICogdG8gU3RldmUgTWlsbGVyIGF0IFNUTSBmb3IgaGlzIGhlbHAgYW5kIGVuY291cmFnZW1lbnQgd2hpbGUgSSB3YXMKICAqIHdyaXRpbmcgdGhpcyBkcml2ZXIuCiAgKgotICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgaGVhdmlseSBvbiB0aGUgCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBoZWF2aWx5IG9uIHRoZQogICogRW5kcG9pbnRzIChmb3JtZXJseSBrbm93biBhcyBBT1gpIHNlNDAxIFVTQiBDYW1lcmEgRHJpdmVyCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgSmVyb2VuIEIuIFZyZWVrZW4gKHBlMXJ4cUBhbXNhdC5vcmcpCiAgKgogICogU3RpbGwgc29tZXdoYXQgYmFzZWQgb24gdGhlIExpbnV4IG92NTExIGRyaXZlci4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKICAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKQEAgLTI1LDE4ICsyNSwxOCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKICAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKLSAqIEhpc3Rvcnk6IAotICogdmVyIDAuMSBPY3RvYmVyLCAyMDAxLiBJbml0aWFsIGF0dGVtcHQuIAorICogSGlzdG9yeToKKyAqIHZlciAwLjEgT2N0b2JlciwgMjAwMS4gSW5pdGlhbCBhdHRlbXB0LgogICoKICAqIHZlciAwLjIgTm92ZW1iZXIsIDIwMDEuIEZpeGVkIGFzYmlsaXR5IHRvIHJlc2l6ZSwgYWRkZWQgYnJpZ2h0bmVzcwogICogICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIG1hZGUgbW9yZSBzdGFibGUgKD8pCiAgKgotICogdmVyIDAuMjEgTm92LCAyMDAxLiAgICAgQWRkZWQgZ2FtbWEgY29ycmVjdGlvbiBhbmQgd2hpdGUgYmFsYW5jZSwgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gQWxleGFuZGVyIFNjaHdhcnR6LiBTdGlsbCB0cnlpbmcgdG8gCisgKiB2ZXIgMC4yMSBOb3YsIDIwMDEuICAgICBBZGRlZCBnYW1tYSBjb3JyZWN0aW9uIGFuZCB3aGl0ZSBiYWxhbmNlLAorICogICAgICAgICAgICAgICAgICAgICAgICAgZHVlIHRvIEFsZXhhbmRlciBTY2h3YXJ0ei4gU3RpbGwgdHJ5aW5nIHRvCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBpbXByb3ZlIHN0YWJsaWxpdHkuIE1vdmVkIHN0dWZmIGludG8gc3R2NjgwLmgKICAqCi0gKiB2ZXIgMC4yMiBOb3YsIDIwMDEuCSAgIEFkZGVkIHNoYXJwZW4gZnVuY3Rpb24gKGJ5IE1pY2hhZWwgU3dlZXQsIAotICogICAgICAgICAgICAgICAgICAgICAgICAgbWlrZUBlYXN5c3cuY29tKSBmcm9tIEdJTVAsIGFsc28gdXNlZCBpbiBwZW5jYW0uIAorICogdmVyIDAuMjIgTm92LCAyMDAxLgkgICBBZGRlZCBzaGFycGVuIGZ1bmN0aW9uIChieSBNaWNoYWVsIFN3ZWV0LAorICogICAgICAgICAgICAgICAgICAgICAgICAgbWlrZUBlYXN5c3cuY29tKSBmcm9tIEdJTVAsIGFsc28gdXNlZCBpbiBwZW5jYW0uCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBTaW1wbGUsIGZhc3QsIGdvb2QgaW50ZWdlciBtYXRoIHJvdXRpbmUuCiAgKgogICogdmVyIDAuMjMgRGVjLCAyMDAxIChna2gpCkBAIC00NCwxMSArNDQsMTEgQEAKICAqIAkJCSAgIExpbmRlbnQsIGFuZCBkaWQgb3RoZXIgbWlub3IgdHdlYWtzIHRvIGdldAogICogCQkJICAgdGhpbmdzIHRvIHdvcmsgcHJvcGVybHkgd2l0aCAyLjUuMQogICoKLSAqIHZlciAwLjI0IEphbiwgMjAwMiAoa2pzKSAKKyAqIHZlciAwLjI0IEphbiwgMjAwMiAoa2pzKQogICogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQgdGhlIHByb2JsZW0gd2l0aCB3ZWJjYW0gY3Jhc2hpbmcgYWZ0ZXIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIHR3byBwaWN0dXJlcy4gQ2hhbmdlZCB0aGUgd2F5IHBpYyBpcyBoYWx2ZWQgdG8gCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBpbXByb3ZlIHF1YWxpdHkuIEdvdCByaWQgb2YgZ3JlZW4gbGluZSBhcm91bmQgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS4gRml4IGJyaWdodG5lc3MgcmVzZXQgd2hlbiBjaGFuZ2luZyBzaXplIAorICogICAgICAgICAgICAgICAgICAgICAgICAgdHdvIHBpY3R1cmVzLiBDaGFuZ2VkIHRoZSB3YXkgcGljIGlzIGhhbHZlZCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm92ZSBxdWFsaXR5LiBHb3QgcmlkIG9mIGdyZWVuIGxpbmUgYXJvdW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS4gRml4IGJyaWdodG5lc3MgcmVzZXQgd2hlbiBjaGFuZ2luZyBzaXplCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBidWcuIEFkanVzdGVkIGdhbW1hIGZpbHRlcnMgc2xpZ2h0bHkuCiAgKgogICogdmVyIDAuMjUgSmFuLCAyMDAyIChranMpCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJzdHY2ODAuaCIKIApAQCAtMzE3LDEyICszMTgsMTEgQEAKIAl1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBpbnQgYnVmc2l6ZTsKIAotCWJ1ZmZlciA9IGttYWxsb2MgKDQwLCBHRlBfS0VSTkVMKTsKKwlidWZmZXIgPSBremFsbG9jICg0MCwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCVBERUJVRyAoMCwgIlNUVihlKTogT3V0IG9mIChzbWFsbCBidWYpIG1lbW9yeSIpOwogCQlyZXR1cm4gLTE7CiAJfQotCW1lbXNldCAoYnVmZmVyLCAwLCA0MCk7CiAJdWRlbGF5ICgxMDApOwogCiAJLyogc2V0IGNvbmZpZyAxLCBpbnRlcmZhY2UgMCwgYWx0ZXJuYXRlIDAgKi8KQEAgLTQ4NCw3ICs0ODQsNyBAQAogCQlQREVCVUcgKDEsICJTVFYoaSk6IHN3YXBSR0IgaXMgKGZvcmNlZCkgT04iKTsKIAllbHNlIGlmIChzd2FwUkdCX29uID09IC0xKQogCQlQREVCVUcgKDEsICJTVFYoaSk6IHN3YXBSR0IgaXMgKGZvcmNlZCkgT0ZGIik7Ci0JCisKIAlpZiAoc3R2X3NldF92aWRlb19tb2RlIChzdHY2ODApIDwgMCkgewogCQlQREVCVUcgKDAsICJTVFYoZSk6IENvdWxkIG5vdCBzZXQgdmlkZW8gbW9kZSBpbiBzdHZfaW5pdCIpOwogCQlyZXR1cm4gLTE7CkBAIC01NzAsNyArNTcwLDcgQEAKIAlpZiAoc3R2NjgwLT5icmlnaHRuZXNzICE9IHAtPmJyaWdodG5lc3MpIHsKIAkJc3R2NjgwLT5jaGdicmlnaHQgPSAxOwogCQlzdHY2ODAtPmJyaWdodG5lc3MgPSBwLT5icmlnaHRuZXNzOwotCX0gCisJfQogCiAJc3R2NjgwLT53aGl0ZW5lc3MgPSBwLT53aGl0ZW5lc3M7CS8qIGdyZXlzY2FsZSAqLwogCXN0djY4MC0+Y29sb3VyID0gcC0+Y29sb3VyOwpAQCAtNjEyLDcgKzYxMiw3IEBACiAKIAkJY2FzZSBCVUZGRVJfVU5VU0VEOgogCQkJbWVtY3B5IChzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX25leHRdLmRhdGEsCi0JCQkgICAgICAgICh1bnNpZ25lZCBjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgpOworCQkJCSh1bnNpZ25lZCBjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgpOwogCQkJc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF9uZXh0XS5zdGF0ZSA9IEJVRkZFUl9SRUFEWTsKIAkJCXN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfbmV4dF0ubGVuZ3RoID0gbGVuZ3RoOwogCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUgKCZzdHY2ODAtPndxKSkgewpAQCAtNzUyLDcgKzc1Miw3IEBACiAJCVBERUJVRyAoMSwgIlNUVihlKTogcmVxdWVzdCBmb3Igbm9uLXN1cHBvcnRlZCBzaXplOiByZXF1ZXN0OiB2LndpZHRoID0gJWksIHYuaGVpZ2h0ID0gJWkgIGFjdHVhbDogc3R2LndpZHRoID0gJWksIHN0di5oZWlnaHQgPSAlaSIsIHdpZHRoLCBoZWlnaHQsIHN0djY4MC0+dndpZHRoLCBzdHY2ODAtPnZoZWlnaHQpOwogCQlyZXR1cm4gMTsKIAl9Ci0JCisKIAkvKiBTdG9wIGEgY3VycmVudCBzdHJlYW0gYW5kIHN0YXJ0IGl0IGFnYWluIGF0IHRoZSBuZXcgc2l6ZSAqLwogCWlmICh3YXNzdHJlYW1pbmcpCiAJCXN0djY4MF9zdG9wX3N0cmVhbSAoc3R2NjgwKTsKQEAgLTc3Myw3ICs3NzMsNyBAQAogCiAvKgogICogU1RWMDY4MCBWaXNpb24gQ2FtZXJhIENoaXBzZXQgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgQWRhbSBIYXJyaXNvbiA8YWRhbUBhbnRpc3Bpbi5vcmc+IAorICogQ29weXJpZ2h0IChDKSAyMDAwIEFkYW0gSGFycmlzb24gPGFkYW1AYW50aXNwaW4ub3JnPgogKi8KIAogI2RlZmluZSBSRUQgMApAQCAtODQyLDcgKzg0Miw3IEBACiAJCQkJY29sb3VyID0gMjsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWkgPSAoeSAqIHZ3ICsgeCkgKiAzOwkKKwkJCWkgPSAoeSAqIHZ3ICsgeCkgKiAzOwogCQkJKihvdXRwdXQgKyBpICsgY29sb3VyKSA9ICh1bnNpZ25lZCBjaGFyKSBwOwogCQl9CQkvKiBmb3IgeCAqLwogCkBAIC04NTAsOSArODUwLDkgQEAKIAogCS8qKioqKiogZ2FtbWEgY29ycmVjdGlvbiBwbHVzIGhhcmRjb2RlZCB3aGl0ZSBiYWxhbmNlICovCiAJLyogVGhhbmtzIHRvIEFsZXhhbmRlciBTY2h3YXJ0eCA8YWxleGFuZGVyLnNjaHdhcnR4QGdteC5uZXQ+IGZvciB0aGlzIGNvZGUuCi0JICAgQ29ycmVjdGlvbiB2YWx1ZXMgcmVkW10sIGdyZWVuW10sIGJsdWVbXSwgYXJlIGdlbmVyYXRlZCBieSAKLQkgICAocG93KGkvMjU2LjAsIEdBTU1BKSoyNTUuMCkqd2hpdGUgYmFsYW5jZVJHQiB3aGVyZSBHQU1NQT0wLjU1LCAxPGk8MjU1LiAKLQkgICBXaGl0ZSBiYWxhbmNlIChSR0IpPSAxLjAsIDEuMTcsIDEuNDguIFZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhcyBkb3VibGUgZmxvYXQgYW5kIAorCSAgIENvcnJlY3Rpb24gdmFsdWVzIHJlZFtdLCBncmVlbltdLCBibHVlW10sIGFyZSBnZW5lcmF0ZWQgYnkKKwkgICAocG93KGkvMjU2LjAsIEdBTU1BKSoyNTUuMCkqd2hpdGUgYmFsYW5jZVJHQiB3aGVyZSBHQU1NQT0wLjU1LCAxPGk8MjU1LgorCSAgIFdoaXRlIGJhbGFuY2UgKFJHQik9IDEuMCwgMS4xNywgMS40OC4gVmFsdWVzIGFyZSBjYWxjdWxhdGVkIGFzIGRvdWJsZSBmbG9hdCBhbmQKIAkgICBjb252ZXJ0ZWQgdG8gdW5zaWduZWQgY2hhci4gVmFsdWVzIGFyZSBpbiBzdHY2ODAuaCAgKi8KIAogCWZvciAoeSA9IDA7IHkgPCB2aDsgeSsrKSB7CkBAIC0xMjU4LDIyICsxMjU4LDIyIEBACiAJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CiAKLQlkb3duICgmc3R2NjgwLT5sb2NrKTsKKwltdXRleF9sb2NrKCZzdHY2ODAtPmxvY2spOwogCiAJaWYgKHN0djY4MC0+dWRldiA9PSBOVUxMKSB7Ci0JCXVwICgmc3R2NjgwLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzdHY2ODAtPmxvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKHNpemUgPiAoKChTVFY2ODBfTlVNRlJBTUVTICogc3R2NjgwLT5tYXhmcmFtZXNpemUpICsgUEFHRV9TSVpFIC0gMSkKIAkJICAgICYgfihQQUdFX1NJWkUgLSAxKSkpIHsKLQkJdXAgKCZzdHY2ODAtPmxvY2spOworCQltdXRleF91bmxvY2soJnN0djY4MC0+bG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlwb3MgPSAodW5zaWduZWQgbG9uZykgc3R2NjgwLT5mYnVmOwogCXdoaWxlIChzaXplID4gMCkgewogCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOwogCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKSB7Ci0JCQl1cCAoJnN0djY4MC0+bG9jayk7CisJCQltdXRleF91bmxvY2soJnN0djY4MC0+bG9jayk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQogCQlzdGFydCArPSBQQUdFX1NJWkU7CkBAIC0xMjgzLDcgKzEyODMsNyBAQAogCQllbHNlCiAJCQlzaXplID0gMDsKIAl9Ci0JdXAgKCZzdHY2ODAtPmxvY2spOworCW11dGV4X3VubG9jaygmc3R2NjgwLT5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM4NywxNCArMTM4NywxMiBAQAogCQlnb3RvIGVycm9yOwogCX0KIAkvKiBXZSBmb3VuZCBvbmUgKi8KLQlpZiAoKHN0djY4MCA9IGttYWxsb2MgKHNpemVvZiAoKnN0djY4MCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJaWYgKChzdHY2ODAgPSBremFsbG9jIChzaXplb2YgKCpzdHY2ODApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewogCQlQREVCVUcgKDAsICJTVFYoZSk6IGNvdWxkbid0IGttYWxsb2Mgc3R2NjgwIHN0cnVjdC4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CiAKLQltZW1zZXQgKHN0djY4MCwgMCwgc2l6ZW9mICgqc3R2NjgwKSk7Ci0KIAlzdHY2ODAtPnVkZXYgPSBkZXY7CiAJc3R2NjgwLT5jYW1lcmFfbmFtZSA9IGNhbWVyYV9uYW1lOwogCkBAIC0xNDA5LDcgKzE0MDcsNyBAQAogCiAJbWVtY3B5IChzdHY2ODAtPnZkZXYtPm5hbWUsIHN0djY4MC0+Y2FtZXJhX25hbWUsIHN0cmxlbiAoc3R2NjgwLT5jYW1lcmFfbmFtZSkpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZzdHY2ODAtPndxKTsKLQlpbml0X01VVEVYICgmc3R2NjgwLT5sb2NrKTsKKwltdXRleF9pbml0ICgmc3R2NjgwLT5sb2NrKTsKIAl3bWIgKCk7CiAKIAlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlIChzdHY2ODAtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA9PSAtMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHY2ODAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4ZjFiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3R2NjgwLmgKQEAgLTAsMCArMSwyMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEZpbGVuYW1lOiBzdHY2ODAuaAorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqICAgICBUaGlzIGlzIGEgVVNCIGRyaXZlciBmb3IgU1RWMDY4MCBiYXNlZCB1c2IgdmlkZW8gY2FtZXJhcy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzaXplIG9mIHVzYiB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgU1RWNjgwX1BBQ0tFVFNJWkUJNDA5NgorCisvKiBudW1iZXIgb2YgcXVldWVkIGJ1bGsgdHJhbnNmZXJzIHRvIHVzZSwgbWF5IGhhdmUgcHJvYmxlbXMgaWYgPiAxICovCisjZGVmaW5lIFNUVjY4MF9OVU1TQlVGCQkxCisKKy8qIG51bWJlciBvZiBmcmFtZXMgc3VwcG9ydGVkIGJ5IHRoZSB2NGwgcGFydCAqLworI2RlZmluZSBTVFY2ODBfTlVNRlJBTUVTCTIKKworLyogc2NyYXRjaCBidWZmZXJzIGZvciBwYXNzaW5nIGRhdGEgdG8gdGhlIGRlY29kZXJzOiAyIG9yIDQgYXJlIGdvb2QgKi8KKyNkZWZpbmUgU1RWNjgwX05VTVNDUkFUQ0gJMgorCisvKiBudW1iZXIgb2YgbnVsIHNpemVkIHBhY2tldHMgdG8gcmVjZWl2ZSBiZWZvcmUga2lja2luZyB0aGUgY2FtZXJhICovCisjZGVmaW5lIFNUVjY4MF9NQVhfTlVMTFBBQ0tFVFMJMjAwCisKKy8qIG51bWJlciBvZiBkZWNvZGluZyBlcnJvcnMgYmVmb3JlIGtpY2tpbmcgdGhlIGNhbWVyYSAqLworI2RlZmluZSBTVFY2ODBfTUFYX0VSUk9SUwkxMDAKKworI2RlZmluZSBVU0JfUEVOQ0FNX1ZFTkRPUl9JRAkweDA1NTMKKyNkZWZpbmUgVVNCX1BFTkNBTV9QUk9EVUNUX0lECTB4MDIwMgorCisjZGVmaW5lIFVTQl9DUkVBVElWRUdPTUlOSV9WRU5ET1JfSUQJMHgwNDFlCisjZGVmaW5lIFVTQl9DUkVBVElWRUdPTUlOSV9QUk9EVUNUX0lECTB4NDAwNworCisjZGVmaW5lIFBFTkNBTV9USU1FT1VUICAgICAgICAgIDEwMDAKKy8qIGZtdCA0ICovCisjZGVmaW5lIFNUVl9WSURFT19QQUxFVFRFICAgICAgIFZJREVPX1BBTEVUVEVfUkdCMjQKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFIChVU0JfUEVOQ0FNX1ZFTkRPUl9JRCwgVVNCX1BFTkNBTV9QUk9EVUNUX0lEKX0sCisJe1VTQl9ERVZJQ0UgKFVTQl9DUkVBVElWRUdPTUlOSV9WRU5ET1JfSUQsIFVTQl9DUkVBVElWRUdPTUlOSV9QUk9EVUNUX0lEKX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRldmljZV90YWJsZSk7CisKK3N0cnVjdCBzdHY2ODBfc2J1ZiB7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKK307CisKK2VudW0geworCUZSQU1FX1VOVVNFRCwJCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCisJRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLworCUZSQU1FX0dSQUJCSU5HLAkJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCisJRlJBTUVfRE9ORSwJCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLworCUZSQU1FX0VSUk9SLAkJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCit9OworCitlbnVtIHsKKwlCVUZGRVJfVU5VU0VELAorCUJVRkZFUl9SRUFEWSwKKwlCVUZGRVJfQlVTWSwKKwlCVUZGRVJfRE9ORSwKK307CisKKy8qIHJhdyBjYW1lcmEgZGF0YSA8LSBzYnVmICh1cmIgdHJhbnNmZXIgYnVmKSAqLworc3RydWN0IHN0djY4MF9zY3JhdGNoIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXZvbGF0aWxlIGludCBzdGF0ZTsKKwlpbnQgb2Zmc2V0OworCWludCBsZW5ndGg7Cit9OworCisvKiBwcm9jZXNzZWQgZGF0YSBmb3IgZGlzcGxheSBlbmRzIHVwIGhlcmUsIGFmdGVyIGJheWVyICovCitzdHJ1Y3Qgc3R2NjgwX2ZyYW1lIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOwkvKiBGcmFtZSBidWZmZXIgKi8KKwl2b2xhdGlsZSBpbnQgZ3JhYnN0YXRlOwkvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCXVuc2lnbmVkIGNoYXIgKmN1cmxpbmU7CisJaW50IGN1cmxpbmVwaXg7CisJaW50IGN1cnBpeDsKK307CisKKy8qIHRoaXMgaXMgYWxtb3N0IHRoZSB2aWRlbyBzdHJ1Y3R1cmUgdXZkX3QsIHdpdGggZXh0cmEgcGFyYW1ldGVycyBmb3Igc3R2ICovCitzdHJ1Y3QgdXNiX3N0diB7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdW5zaWduZWQgY2hhciBidWxrX2luX2VuZHBvaW50QWRkcjsJLyogX191OCAgdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwljaGFyICpjYW1lcmFfbmFtZTsKKworCXVuc2lnbmVkIGludCBWaWRlb01vZGU7CS8qIDB4MDEwMCA9IFZHQSwgMHgwMDAwID0gQ0lGLCAweDAzMDAgPSBRVkdBICovCisJaW50IFN1cHBvcnRlZE1vZGVzOworCWludCBDSUY7CisJaW50IFZHQTsKKwlpbnQgUVZHQTsKKwlpbnQgY3dpZHRoOwkJLyogY2FtZXJhIHdpZHRoICovCisJaW50IGNoZWlnaHQ7CQkvKiBjYW1lcmEgaGVpZ2h0ICovCisJaW50IG1heHdpZHRoOwkJLyogbWF4IHZpZGVvIHdpZHRoICovCisJaW50IG1heGhlaWdodDsJCS8qIG1heCB2aWRlbyBoZWlnaHQgKi8KKwlpbnQgdndpZHRoOwkJLyogY3VycmVudCB3aWR0aCBmb3IgdmlkZW8gd2luZG93ICovCisJaW50IHZoZWlnaHQ7CQkvKiBjdXJyZW50IGhlaWdodCBmb3IgdmlkZW8gd2luZG93ICovCisJdW5zaWduZWQgbG9uZyBpbnQgcmF3YnVmc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGludCBtYXhmcmFtZXNpemU7CS8qIHJhd2J1ZnNpemUgKiAzIGZvciBSR0IgKi8KKworCWludCBvcmlnR2FpbjsKKwlpbnQgb3JpZ01vZGU7CQkvKiBvcmlnaW5hbCBjYW1lcmEgbW9kZSAqLworCisJc3RydWN0IG11dGV4IGxvY2s7CS8qIHRvIGxvY2sgdGhlIHN0cnVjdHVyZSAqLworCWludCB1c2VyOwkJLyogdXNlciBjb3VudCBmb3IgZXhjbHVzaXZlIHVzZSAqLworCWludCByZW1vdmVkOwkJLyogZGV2aWNlIGRpc2Nvbm5lY3RlZCAqLworCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIHZpZGVvPyAqLworCWNoYXIgKmZidWY7CQkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLworCXN0cnVjdCB1cmIgKnVyYltTVFY2ODBfTlVNU0JVRl07CS8qICMgb2YgcXVldWVkIGJ1bGsgdHJhbnNmZXJzICovCisJaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgZnJhbWUgKi8KKwlzdHJ1Y3Qgc3R2NjgwX2ZyYW1lIGZyYW1lW1NUVjY4MF9OVU1GUkFNRVNdOwkvKiAjIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdjRsIHBhcnQgKi8KKwlpbnQgcmVhZGNvdW50OworCWludCBmcmFtZWNvdW50OworCWludCBlcnJvcjsKKwlpbnQgZHJvcHBlZDsKKwlpbnQgc2NyYXRjaF9uZXh0OworCWludCBzY3JhdGNoX3VzZTsKKwlpbnQgc2NyYXRjaF9vdmVyZmxvdzsKKwlzdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggc2NyYXRjaFtTVFY2ODBfTlVNU0NSQVRDSF07CS8qIGZvciBkZWNvZGVycyAqLworCXN0cnVjdCBzdHY2ODBfc2J1ZiBzYnVmW1NUVjY4MF9OVU1TQlVGXTsKKworCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOworCXVuc2lnbmVkIGludCBjaGdicmlnaHQ7CisJdW5zaWduZWQgaW50IHdoaXRlbmVzczsKKwl1bnNpZ25lZCBpbnQgY29sb3VyOworCXVuc2lnbmVkIGludCBjb250cmFzdDsKKwl1bnNpZ25lZCBpbnQgaHVlOworCXVuc2lnbmVkIGludCBwYWxldHRlOworCXVuc2lnbmVkIGludCBkZXB0aDsJLyogcmdiMjQgaW4gYml0cyAqLworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCisKKwlpbnQgbnVsbHBhY2tldHM7Cit9OworCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlZFsyNTZdID0geworCTAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwKKwkxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDMwLCAzNSwgMzgsIDQyLAorCTQ0LCA0NywgNTAsIDUzLCA1NCwgNTcsIDU5LCA2MSwgNjMsIDY1LCA2NywgNjksCisJNzEsIDcxLCA3MywgNzUsIDc3LCA3OCwgODAsIDgxLCA4MiwgODQsIDg1LCA4NywKKwk4OCwgODksIDkwLCA5MSwgOTMsIDk0LCA5NSwgOTcsIDk4LCA5OCwgOTksIDEwMSwKKwkxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLAorCTExNCwgMTE1LCAxMTYsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsCisJMTI1LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwKKwkxMzQsIDEzNSwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQwLCAxNDEsIDE0MiwgMTQzLAorCTE0MywgMTQzLCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUwLCAxNTEsCisJMTUyLCAxNTIsIDE1MiwgMTUzLCAxNTQsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU3LCAxNTgsIDE1OSwKKwkxNTksIDE2MCwgMTYxLCAxNjEsIDE2MSwgMTYyLCAxNjMsIDE2MywgMTY0LCAxNjUsIDE2NSwgMTY2LAorCTE2NywgMTY3LCAxNjgsIDE2OCwgMTY5LCAxNzAsIDE3MCwgMTcwLCAxNzEsIDE3MSwgMTcyLCAxNzMsCisJMTczLCAxNzQsIDE3NCwgMTc1LCAxNzYsIDE3NiwgMTc3LCAxNzgsIDE3OCwgMTc5LCAxNzksIDE3OSwKKwkxODAsIDE4MCwgMTgxLCAxODEsIDE4MiwgMTgzLCAxODMsIDE4NCwgMTg0LCAxODUsIDE4NSwgMTg2LAorCTE4NywgMTg3LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OSwgMTkwLCAxOTAsIDE5MSwgMTkxLCAxOTIsCisJMTkyLCAxOTMsIDE5MywgMTk0LCAxOTUsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk3LCAxOTcsIDE5NywKKwkxOTgsIDE5OCwgMTk5LCAxOTksIDIwMCwgMjAxLCAyMDEsIDIwMiwgMjAyLCAyMDMsIDIwMywgMjA0LAorCTIwNCwgMjA1LCAyMDUsIDIwNiwgMjA2LCAyMDYsIDIwNiwgMjA3LCAyMDcsIDIwOCwgMjA4LCAyMDksCisJMjA5LCAyMTAsIDIxMCwgMjExLCAyMTEsIDIxMiwgMjEyLCAyMTMsIDIxMywgMjE0LCAyMTQsIDIxNSwKKwkyMTUsIDIxNSwgMjE1LCAyMTYsIDIxNiwgMjE3LCAyMTcsIDIxOCwgMjE4LCAyMTgsIDIxOSwgMjE5LAorCTIyMCwgMjIwLCAyMjEsIDIyMQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ3JlZW5bMjU2XSA9IHsKKwkwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsCisJMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI4LCAzNCwgMzksIDQzLCA0NywKKwk1MCwgNTMsIDU2LCA1OSwgNjEsIDY0LCA2NiwgNjgsIDcxLCA3MywgNzUsIDc3LAorCTc5LCA4MCwgODIsIDg0LCA4NiwgODcsIDg5LCA5MSwgOTIsIDk0LCA5NSwgOTcsCisJOTgsIDEwMCwgMTAxLCAxMDIsIDEwNCwgMTA1LCAxMDYsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEzLAorCTExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsCisJMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwKKwkxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LAorCTE1MCwgMTUxLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTYsIDE1NywgMTU4LCAxNTksCisJMTYwLCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjcsIDE2OCwKKwkxNjksIDE3MCwgMTcwLCAxNzEsIDE3MiwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNzUsIDE3NiwgMTc3LAorCTE3NywgMTc4LCAxNzksIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgyLCAxODMsIDE4NCwgMTg0LCAxODUsCisJMTg2LCAxODYsIDE4NywgMTg3LCAxODgsIDE4OSwgMTg5LCAxOTAsIDE5MSwgMTkxLCAxOTIsIDE5MywKKwkxOTMsIDE5NCwgMTk0LCAxOTUsIDE5NiwgMTk2LCAxOTcsIDE5OCwgMTk4LCAxOTksIDE5OSwgMjAwLAorCTIwMSwgMjAxLCAyMDIsIDIwMiwgMjAzLCAyMDQsIDIwNCwgMjA1LCAyMDUsIDIwNiwgMjA2LCAyMDcsCisJMjA4LCAyMDgsIDIwOSwgMjA5LCAyMTAsIDIxMCwgMjExLCAyMTIsIDIxMiwgMjEzLCAyMTMsIDIxNCwKKwkyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE3LCAyMTgsIDIxOCwgMjE5LCAyMTksIDIyMCwgMjIwLAorCTIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNiwgMjI2LCAyMjcsCisJMjI3LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIzMCwgMjMwLCAyMzEsIDIzMSwgMjMyLCAyMzIsIDIzMywKKwkyMzMsIDIzNCwgMjM0LCAyMzUsIDIzNSwgMjM2LCAyMzYsIDIzNywgMjM3LCAyMzgsIDIzOCwgMjM5LAorCTIzOSwgMjQwLCAyNDAsIDI0MSwgMjQxLCAyNDIsIDI0MiwgMjQzLCAyNDMsIDI0MywgMjQ0LCAyNDQsCisJMjQ1LCAyNDUsIDI0NiwgMjQ2Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBibHVlWzI1Nl0gPSB7CisJMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLAorCTIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAzMCwgMzcsIDQyLCA0NywgNTEsCisJNTUsIDU4LCA2MSwgNjQsIDY3LCA3MCwgNzIsIDc0LCA3OCwgODAsIDgyLCA4NCwKKwk4NiwgODgsIDkwLCA5MiwgOTQsIDk1LCA5NywgMTAwLCAxMDEsIDEwMywgMTA0LCAxMDYsCisJMTA3LCAxMTAsIDExMSwgMTEyLCAxMTQsIDExNSwgMTE2LCAxMTgsIDExOSwgMTIxLCAxMjIsIDEyNCwKKwkxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LAorCTEzOSwgMTQwLCAxNDEsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsCisJMTUyLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywKKwkxNjUsIDE2NiwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcxLCAxNzIsIDE3MywgMTc0LAorCTE3NiwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MCwgMTgxLCAxODIsIDE4MywgMTgzLCAxODQsCisJMTg1LCAxODcsIDE4NywgMTg4LCAxODksIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkyLCAxOTMsIDE5NCwKKwkxOTQsIDE5NSwgMTk2LCAxOTYsIDE5OCwgMTk5LCAyMDAsIDIwMCwgMjAxLCAyMDIsIDIwMiwgMjAzLAorCTIwNCwgMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDcsIDIwNywgMjA5LCAyMTAsIDIxMCwgMjExLCAyMTIsCisJMjEyLCAyMTMsIDIxMywgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxNywgMjE4LCAyMTgsIDIyMCwKKwkyMjEsIDIyMSwgMjIyLCAyMjIsIDIyMywgMjI0LCAyMjQsIDIyNSwgMjI1LCAyMjYsIDIyNiwgMjI3LAorCTIyOCwgMjI4LCAyMjksIDIyOSwgMjMxLCAyMzEsIDIzMiwgMjMzLCAyMzMsIDIzNCwgMjM0LCAyMzUsCisJMjM1LCAyMzYsIDIzNiwgMjM3LCAyMzgsIDIzOCwgMjM5LCAyMzksIDI0MCwgMjQwLCAyNDIsIDI0MiwKKwkyNDMsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ2LCAyNDYsIDI0NywgMjQ3LCAyNDgsIDI0OCwgMjQ5LAorCTI0OSwgMjUwLCAyNTAsIDI1MSwgMjUxLCAyNTMsIDI1MywgMjU0LCAyNTQsIDI1NSwgMjU1LCAyNTUsCisJMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKwkyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorCTI1NSwgMjU1LCAyNTUsIDI1NQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKaW5kZXggZmMzZDU4MjQuLjc4ZTA0M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jCkBAIC00OCw5ICs0OCw4IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAKLSNpbmNsdWRlICJidHR2LmgiCi0jaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9pMmMtYWRkci5oPgogCiAjaWZuZGVmIFZJREVPX0FVRElPX0JBTEFOQ0UKICMgZGVmaW5lIFZJREVPX0FVRElPX0JBTEFOQ0UgMzIKQEAgLTcxLDcgKzcwLDcgQEAKIAogLyogQWRkcmVzcyB0byBzY2FuIChJMkMgYWRkcmVzcyBvZiB0aGlzIGNoaXApICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19UREE3NDMyID4+IDEsCisJSTJDX0FERFJfVERBNzQzMiA+PiAxLAogCUkyQ19DTElFTlRfRU5ELAogfTsKIEkyQ19DTElFTlRfSU5TTU9EOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE4MjkwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTgyOTAuYwppbmRleCA3YjRmYjI4Li4wMjdjOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTgyOTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTgyOTAuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiBzdGF0aWMgdm9pZCB0ZGE4MjkwX2kyY19icmlkZ2Uoc3RydWN0IGkyY19jbGllbnQgKmMsIGludCBjbG9zZSkKIHsKIAl1bnNpZ25lZCBjaGFyICBlbmFibGVbMl0gPSB7IDB4MjEsIDB4QzAgfTsKLQl1bnNpZ25lZCBjaGFyIGRpc2FibGVbMl0gPSB7IDB4MjEsIDB4ODAgfTsKKwl1bnNpZ25lZCBjaGFyIGRpc2FibGVbMl0gPSB7IDB4MjEsIDB4MDAgfTsKIAl1bnNpZ25lZCBjaGFyICptc2c7CiAJaWYoY2xvc2UpIHsKIAkJbXNnID0gZW5hYmxlOwpAQCAtMzAyLDYgKzMwMiw3IEBACiAJdW5zaWduZWQgY2hhciBzb2Z0X3Jlc2V0W10gID0geyAweDAwLCAweDAwIH07CiAJdW5zaWduZWQgY2hhciBlYXN5X21vZGVbXSAgID0geyAweDAxLCB0LT50ZGE4MjkwX2Vhc3lfbW9kZSB9OwogCXVuc2lnbmVkIGNoYXIgZXhwZXJ0X21vZGVbXSA9IHsgMHgwMSwgMHg4MCB9OworCXVuc2lnbmVkIGNoYXIgYWdjX291dF9vbltdICA9IHsgMHgwMiwgMHgwMCB9OwogCXVuc2lnbmVkIGNoYXIgZ2FpbnNldF9vZmZbXSA9IHsgMHgyOCwgMHgxNCB9OwogCXVuc2lnbmVkIGNoYXIgaWZfYWdjX3NwZFtdICA9IHsgMHgwZiwgMHg4OCB9OwogCXVuc2lnbmVkIGNoYXIgYWRjX2hlYWRfNltdICA9IHsgMHgwNSwgMHgwNCB9OwpAQCAtMzIwLDYgKzMyMSw3IEBACiAJCSAgICAgIHBsbF9zdGF0OwogCiAJaTJjX21hc3Rlcl9zZW5kKGMsIGVhc3lfbW9kZSwgMik7CisJaTJjX21hc3Rlcl9zZW5kKGMsIGFnY19vdXRfb24sIDIpOwogCWkyY19tYXN0ZXJfc2VuZChjLCBzb2Z0X3Jlc2V0LCAyKTsKIAltc2xlZXAoMSk7CiAKQEAgLTQ3MCw2ICs0NzIsNyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKIAl1bnNpZ25lZCBjaGFyIGNiMVtdID0geyAweDMwLCAweEQwIH07CiAJdW5zaWduZWQgY2hhciB0ZGE4MjkwX3N0YW5kYnlbXSA9IHsgMHgwMCwgMHgwMiB9OworCXVuc2lnbmVkIGNoYXIgdGRhODI5MF9hZ2NfdHJpW10gPSB7IDB4MDIsIDB4MjAgfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSB0LT50ZGE4Mjd4X2FkZHIsIC5mbGFncz0wLCAuYnVmPWNiMSwgLmxlbiA9IDJ9OwogCiAJdGRhODI5MF9pMmNfYnJpZGdlKGMsIDEpOwpAQCAtNDc3LDYgKzQ4MCw3IEBACiAJCWNiMVsxXSA9IDB4OTA7CiAJaTJjX3RyYW5zZmVyKGMtPmFkYXB0ZXIsICZtc2csIDEpOwogCXRkYTgyOTBfaTJjX2JyaWRnZShjLCAwKTsKKwlpMmNfbWFzdGVyX3NlbmQoYywgdGRhODI5MF9hZ2NfdHJpLCAyKTsKIAlpMmNfbWFzdGVyX3NlbmQoYywgdGRhODI5MF9zdGFuZGJ5LCAyKTsKIH0KIApAQCAtNTY1LDcgKzU2OSw3IEBACiAJCXN0cmxjcHkoYy0+bmFtZSwgInRkYTgyOTArNzVhIiwgc2l6ZW9mKGMtPm5hbWUpKTsKIAkJdC0+dGRhODI3eF92ZXIgPSAyOwogCX0KLQl0dW5lcl9pbmZvKCJ0dW5lcjogdHlwZSBzZXQgdG8gJXNcbiIsIGMtPm5hbWUpOworCXR1bmVyX2luZm8oInR5cGUgc2V0IHRvICVzXG4iLCBjLT5uYW1lKTsKIAogCXQtPnNldF90dl9mcmVxICAgID0gc2V0X3R2X2ZyZXE7CiAJdC0+c2V0X3JhZGlvX2ZyZXEgPSBzZXRfcmFkaW9fZnJlcTsKQEAgLTU4MCw5ICs1ODQsMTAgQEAKIAogaW50IHRkYTgyOTBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmMpCiB7Ci0JdW5zaWduZWQgY2hhciBzb2Z0X3Jlc2V0W10gID0geyAweDAwLCAweDAwIH07Ci0JdW5zaWduZWQgY2hhciBlYXN5X21vZGVfYltdID0geyAweDAxLCAweDAyIH07Ci0JdW5zaWduZWQgY2hhciBlYXN5X21vZGVfZ1tdID0geyAweDAxLCAweDA0IH07CisJdW5zaWduZWQgY2hhciBzb2Z0X3Jlc2V0W10gICA9IHsgMHgwMCwgMHgwMCB9OworCXVuc2lnbmVkIGNoYXIgZWFzeV9tb2RlX2JbXSAgPSB7IDB4MDEsIDB4MDIgfTsKKwl1bnNpZ25lZCBjaGFyIGVhc3lfbW9kZV9nW10gID0geyAweDAxLCAweDA0IH07CisJdW5zaWduZWQgY2hhciByZXN0b3JlXzk4ODZbXSA9IHsgMHgwMCwgMHhkNiwgMHgzMCB9OwogCXVuc2lnbmVkIGNoYXIgYWRkcl9kdG9fbHNiID0gMHgwNzsKIAl1bnNpZ25lZCBjaGFyIGRhdGE7CiAKQEAgLTU5OSw2ICs2MDQsNyBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CisJaTJjX21hc3Rlcl9zZW5kKGMsIHJlc3RvcmVfOTg4NiwgMyk7CiAJcmV0dXJuIC0xOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCmluZGV4IGVkNGMwNDExLi5lZjQ5NGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwpAQCAtMjQsNiArMjQsNyBAQAogICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICAqLwogCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgpAQCAtMzQsNyArMzUsNyBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGRldmljZSBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKICNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCi0gICAgICAgICAgICBkbyB7IGlmIChkZWJ1ZykgeyBwcmludGsoIiVzOiAlcygpWyVkXTogIiwgS0JVSUxEX01PRE5BTUUsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyBwcmludGsoYXJncyk7IH0gfSB3aGlsZSAoMCkKKwkgICAgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKCIlczogJXMoKVslZF06ICIsIEtCVUlMRF9NT0ROQU1FLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCiAKICNkZWZpbmUJU1dJVENICQkweDAwCiAjZGVmaW5lCUxFVkVMX0FESlVTVAkweDAyCkBAIC00Miw3ICs0Myw3IEBACiAjZGVmaW5lCVRFU1QJCTB4MDQKIAogLyogYWRkcmVzc2VzIHRvIHNjYW4sIGZvdW5kIG9ubHkgYXQgMHg0MiAoNy1CaXQpICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfVERBOTg0MCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19BRERSX1REQTk4NDAsIEkyQ19DTElFTlRfRU5EIH07CiAKIC8qIG1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCiBJMkNfQ0xJRU5UX0lOU01PRDsKQEAgLTIyMiw3ICsyMjMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gInRkYTk4NDAiLAorCQkubmFtZSA9ICJ0ZGE5ODQwIiwKIAl9LAogCS5pZAk9IEkyQ19EUklWRVJJRF9UREE5ODQwLAogCS5hdHRhY2hfYWRhcHRlcgk9IGF0dGFjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmgKaW5kZXggMjgwMjEwNS4uN2RhODQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fSU5DTFVERURfVERBOTg0MF9fCiAjZGVmaW5lIF9fSU5DTFVERURfVERBOTg0MF9fCiAKLSNkZWZpbmUJSTJDX1REQTk4NDAJCTB4NDIKKyNkZWZpbmUJSTJDX0FERFJfVERBOTg0MAkJMHg0MgogCiAjZGVmaW5lIFREQTk4NDBfREVURUNUCQlfSU9SKCd2JywxLGludCkKIC8qIHJldHVybiB2YWx1ZXMgZm9yIFREQTk4NDBfREVUQ1QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKaW5kZXggZWY5OGM0OS4uMTAzY2NiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKQEAgLTMwLDI0ICszMCwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotI2luY2x1ZGUgImJ0dHYuaCIKLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KKworI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7IC8qIGluc21vZCBwYXJhbWV0ZXIgKi8KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSAgewotICAgIEkyQ19UREE5ODc1ID4+IDEsCisgICAgSTJDX0FERFJfVERBOTg3NSA+PiAxLAogICAgIEkyQ19DTElFTlRfRU5ECiB9OwogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgVERBOTg3NSAqLwogc3RydWN0IHRkYTk4NzUgewotCWludCBtb2RlOwogCWludCBydm9sLCBsdm9sOwogCWludCBiYXNzLCB0cmVibGU7CiAJc3RydWN0IGkyY19jbGllbnQgYzsKQEAgLTE5Nyw3ICsxOTUsNiBAQAogCiAJdGRhOTg3NV93cml0ZShjbGllbnQsIFREQTk4NzVfTVVULCAweGNjICk7ICAgLyogR2VuZXJhbCBtdXRlICAqLwogCi0JdC0+bW9kZT1BVURJT19VTk1VVEU7CiAJdC0+bHZvbD10LT5ydm9sID0wOyAgCS8qIDBkQiAqLwogCXQtPmJhc3M9MDsgCQkJLyogMGRCICovCiAJdC0+dHJlYmxlPTA7ICAJCS8qIDBkQiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCmluZGV4IGJiMzU4NDQuLjUyM2RmMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKQEAgLTI2LDYgKzI2LDcgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTXZzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAgKi8KIAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KQEAgLTM2LDcgKzM3LDcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBkZXZpY2UgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CiAjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAotICAgICAgICAgICAgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKCIlczogJXMoKVslZF06ICIsIEtCVUlMRF9NT0ROQU1FLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCisJICAgIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50aygiJXM6ICVzKClbJWRdOiAiLCBLQlVJTERfTU9ETkFNRSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IHByaW50ayhhcmdzKTsgfSB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFRFQTY0MTVDX05VTV9JTlBVVFMJOAogI2RlZmluZSBURUE2NDE1Q19OVU1fT1VUUFVUUwk2CkBAIC0xMDcsNyArMTA4LDcgQEAKIHsKIAl1OCBieXRlID0gMDsKIAlpbnQgcmV0OwotCQorCiAJZHByaW50aygiYWRyOjB4JTAyeCwgaTolZCwgbzolZFxuIiwgY2xpZW50LT5hZGRyLCBpLCBvKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwaW5zIGFyZSB2YWxpZCAqLwpAQCAtMTkxLDcgKzE5Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgCT0gInRlYTY0MTVjIiwKKwkJLm5hbWUgPSAidGVhNjQxNWMiLAogCX0sCiAJLmlkIAk9IEkyQ19EUklWRVJJRF9URUE2NDE1QywKIAkuYXR0YWNoX2FkYXB0ZXIJPSBhdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCmluZGV4IDRkY2JhNWEuLmUwZmY4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCkBAIC0yNiw2ICsyNiw3IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgICovCiAKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CkBAIC0zNiwxMCArMzcsMTAgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBkZXZpY2UgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CiAjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAotICAgICAgICAgICAgZG8geyBpZiAoZGVidWcpIHsgcHJpbnRrKCIlczogJXMoKVslZF06ICIsIEtCVUlMRF9NT0ROQU1FLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCisJICAgIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50aygiJXM6ICVzKClbJWRdOiAiLCBLQlVJTERfTU9ETkFNRSwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IHByaW50ayhhcmdzKTsgfSB9IHdoaWxlICgwKQogCiAvKiBhZGRyZXNzZXMgdG8gc2NhbiwgZm91bmQgb25seSBhdCAweDRjIGFuZC9vciAweDRkICg3LUJpdCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19URUE2NDIwXzEsIEkyQ19URUE2NDIwXzIsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQUREUl9URUE2NDIwXzEsIEkyQ19BRERSX1RFQTY0MjBfMiwgSTJDX0NMSUVOVF9FTkQgfTsKIAogLyogbWFnaWMgZGVmaW5pdGlvbiBvZiBhbGwgb3RoZXIgdmFyaWFibGVzIGFuZCB0aGluZ3MgKi8KIEkyQ19DTElFTlRfSU5TTU9EOwpAQCAtODMsNyArODQsNyBAQAogCQlkcHJpbnRrKCJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY3LDcgKzE2OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAidGVhNjQyMCIsCisJCS5uYW1lID0gInRlYTY0MjAiLAogCX0sCiAJLmlkCT0gSTJDX0RSSVZFUklEX1RFQTY0MjAsCiAJLmF0dGFjaF9hZGFwdGVyCT0gYXR0YWNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaAppbmRleCBlYTY2NGRmLi41ZWY3YzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaApAQCAtMiw4ICsyLDggQEAKICNkZWZpbmUgX19JTkNMVURFRF9URUE2NDIwX18KIAogLyogcG9zc2libGUgYWRkcmVzc2VzICovCi0jZGVmaW5lCUkyQ19URUE2NDIwXzEJCTB4NGMKLSNkZWZpbmUJSTJDX1RFQTY0MjBfMgkJMHg0ZAorI2RlZmluZQlJMkNfQUREUl9URUE2NDIwXzEJCTB4NGMKKyNkZWZpbmUJSTJDX0FERFJfVEVBNjQyMF8yCQkweDRkCiAKIHN0cnVjdCB0ZWE2NDIwX211bHRpcGxleAogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci0zMDM2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLTMwMzYuYwppbmRleCBjNGE3OGU3Li43NGFiNDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLTMwMzYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLTMwMzYuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBUaGUgU0FCMzAzNiBpcyBqdXN0IGFib3V0IGRpZmZlcmVudCBlbm91Z2ggZnJvbSB0aGUgY2hpcHMgdGhhdAogICogdHVuZXIuYyBjb3BlcyB3aXRoIHRvIG1ha2UgaXQgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gY3Jvd2JhcgotICogdGhlIHN1cHBvcnQgaW50byB0aGF0IGZpbGUuICBTbyBpbnN0ZWFkIHdlIGhhdmUgYSBzZXBhcmF0ZSBkcml2ZXIuIAorICogdGhlIHN1cHBvcnQgaW50byB0aGF0IGZpbGUuICBTbyBpbnN0ZWFkIHdlIGhhdmUgYSBzZXBhcmF0ZSBkcml2ZXIuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTU2LDE1ICs1NiwxNSBAQAogCiAjZGVmaW5lIFRVTkVSX0ZMICAgICAgICAweDgwCiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiB0dW5lcl9pc2xvY2tlZCAoc3RydWN0IGkyY19jbGllbnQgKmMpCiB7Ci0gICAgICAgIHJldHVybiAodHVuZXJfZ2V0c3RhdHVzKGMpICYgVFVORVJfRkwpOworCXJldHVybiAodHVuZXJfZ2V0c3RhdHVzKGMpICYgVFVORVJfRkwpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIHNldF90dl9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBpbnQgZnJlcSkKIHsKIAl1MTYgZGl2ID0gKChmcmVxICogMjApIC8gMTYpOwpAQCAtNzMsMjYgKzczLDI2IEBACiAKIAlpZiAoZGVidWcpCiAJCXByaW50ayhLRVJOX0RFQlVHICJ0dW5lcjogc2V0dGluZyBmcmVxdWVuY3kgJWRNSHosIGRpdmlzb3IgJXhcbiIsIGZyZXEgLyAxNiwgZGl2KTsKLQkKKwogCS8qIFNlbGVjdCBoaWdoIHR1bmluZyBjdXJyZW50ICovCiAJYnVmZmVyWzBdID0gMHgyOTsKIAlidWZmZXJbMV0gPSAweDNlOwogCiAJaWYgKGkyY19tYXN0ZXJfc2VuZChjLCBidWZmZXIsIDIpICE9IDIpCiAJCXByaW50aygidHVuZXI6IGkyYyBpL28gZXJyb3IgMVxuIik7Ci0JCisKIAlidWZmZXJbMF0gPSAweDgwIHwgKChkaXY+PjgpICYgMHg3Zik7CiAJYnVmZmVyWzFdID0gZGl2ICYgMHhmZjsKIAogCWlmIChpMmNfbWFzdGVyX3NlbmQoYywgYnVmZmVyLCAyKSAhPSAyKQogCQlwcmludGsoInR1bmVyOiBpMmMgaS9vIGVycm9yIDJcbiIpOwotCQorCiAJd2hpbGUgKCF0dW5lcl9pc2xvY2tlZChjKSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBnaXZlX3VwKSkKIAkJc2NoZWR1bGUoKTsKLQkgICAgICAgCisKIAlpZiAoIXR1bmVyX2lzbG9ja2VkKGMpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0dW5lcjogZmFpbGVkIHRvIGFjaGlldmUgUExMIGxvY2tcbiIpOwotCQorCiAJLyogU2VsZWN0IGxvdyB0dW5pbmcgY3VycmVudCBhbmQgZW5nYWdlIEFGQyAqLwogCWJ1ZmZlclswXSA9IDB4Mjk7CiAJYnVmZmVyWzFdID0gMHhiMjsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiB0dW5lcl9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBpbnQgYWRkciwgaW50IGtpbmQpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmZmVyW10gPSB7IDB4MjksIDB4MzIsIDB4MmEsIDAsIDB4MmIsIDAgfTsKQEAgLTExNiwxOCArMTE2LDE4IEBACiAJaWYgKHRoaXNfYWRhcCA+IDApCiAJCXJldHVybiAtMTsKIAl0aGlzX2FkYXArKzsKLQkKLSAgICAgICAgY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotICAgICAgICBjbGllbnRfdGVtcGxhdGUuYWRkciA9IGFkZHI7CisKKwljbGllbnRfdGVtcGxhdGUuYWRhcHRlciA9IGFkYXA7CisJY2xpZW50X3RlbXBsYXRlLmFkZHIgPSBhZGRyOwogCiAJY2xpZW50ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgaWYgKGNsaWVudCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICBtZW1jcHkoY2xpZW50LCAmY2xpZW50X3RlbXBsYXRlLCBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKKwlpZiAoY2xpZW50ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShjbGllbnQsICZjbGllbnRfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCiAJcHJpbnRrKCJ0dW5lcjogU0FCMzAzNiBmb3VuZCwgc3RhdHVzICUwMnhcbiIsIHR1bmVyX2dldHN0YXR1cyhjbGllbnQpKTsKIAotICAgICAgICBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOworCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CiAKIAlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmZmVyLCAyKSAhPSAyKQogCQlwcmludGsoInR1bmVyOiBpMmMgaS9vIGVycm9yIDFcbiIpOwpAQCAtMTM4LDMwICsxMzgsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIHR1bmVyX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqYykKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIHR1bmVyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCWludCAqaWFyZyA9IChpbnQqKWFyZzsKIAotCXN3aXRjaCAoY21kKSAKKwlzd2l0Y2ggKGNtZCkKIAl7CiAJCWNhc2UgVklESU9DU0ZSRVE6CiAJCQlzZXRfdHZfZnJlcShjbGllbnQsICppYXJnKTsKIAkJCWJyZWFrOwotCSAgICAKKwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdHVuZXJfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCXRoaXNfYWRhcCA9IDA7CkBAIC0xNzIsOCArMTcyLDggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIAotaTJjX2RyaXZlcl90dW5lciA9IAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyCitpMmNfZHJpdmVyX3R1bmVyID0KIHsKIAkuZHJpdmVyID0gewogCQkubmFtZQk9CSJzYWIzMDM2IiwKQEAgLTE4Niw3ICsxODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0KIHsKLSAgICAgICAgLmRyaXZlcgkJPSAmaTJjX2RyaXZlcl90dW5lciwKKwkuZHJpdmVyCQk9ICZpMmNfZHJpdmVyX3R1bmVyLAogCS5uYW1lCQk9ICJTQUIzMDM2IiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggZTdlZTYxOS4uZGYxOTVjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS9hdWRpb2NoaXAuaD4KIAogI2RlZmluZSBVTlNFVCAoLTFVKQogCkBAIC0xNzMsNyArMTcyLDYgQEAKIAl9CiAKIAl0LT50eXBlID0gdHlwZTsKLQogCXN3aXRjaCAodC0+dHlwZSkgewogCWNhc2UgVFVORVJfTVQyMDMyOgogCQltaWNyb3R1bmVfaW5pdChjKTsKQEAgLTQwNCwxNSArNDAyLDE2IEBACiAJdHVuZXJfaW5mbygiVHVuZXIgbW9kZTogICAgICAlc1xuIiwgcCk7CiAJdHVuZXJfaW5mbygiRnJlcXVlbmN5OiAgICAgICAlbHUuJTAybHUgTUh6XG4iLCBmcmVxLCBmcmVxX2ZyYWN0aW9uKTsKIAl0dW5lcl9pbmZvKCJTdGFuZGFyZDogICAgICAgIDB4JTA4bGx4XG4iLCB0LT5zdGQpOwotCWlmICh0LT5tb2RlID09IFY0TDJfVFVORVJfUkFESU8pIHsKLQkJaWYgKHQtPmhhc19zaWduYWwpIHsKLQkJCXR1bmVyX2luZm8oIlNpZ25hbCBzdHJlbmd0aDogJWRcbiIsIHQtPmhhc19zaWduYWwoY2xpZW50KSk7Ci0JCX0KLQkJaWYgKHQtPmlzX3N0ZXJlbykgewotCQkJdHVuZXJfaW5mbygiU3RlcmVvOiAgICAgICAgICAlc1xuIiwgdC0+aXNfc3RlcmVvKGNsaWVudCkgPyAieWVzIiA6ICJubyIpOwotCQl9CisJaWYgKHQtPm1vZGUgIT0gVjRMMl9UVU5FUl9SQURJTykKKwkgICAgICAgcmV0dXJuOworCWlmICh0LT5oYXNfc2lnbmFsKSB7CisJCXR1bmVyX2luZm8oIlNpZ25hbCBzdHJlbmd0aDogJWRcbiIsIHQtPmhhc19zaWduYWwoY2xpZW50KSk7CisJfQorCWlmICh0LT5pc19zdGVyZW8pIHsKKwkJdHVuZXJfaW5mbygiU3RlcmVvOiAgICAgICAgICAlc1xuIiwgdC0+aXNfc3RlcmVvKGNsaWVudCkgPyAieWVzIiA6ICJubyIpOwogCX0KIH0KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBzdGF0aWMgdmFyIFVzZWQgb25seSBpbiB0dW5lcl9hdHRhY2ggYW5kIHR1bmVyX3Byb2JlICovCkBAIC03MTMsOCArNzEyLDkgQEAKIAkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKIAogCQkJc3dpdGNoX3Y0bDIoKTsKLQkJCWlmIChWNEwyX1RVTkVSX1JBRElPID09IGYtPnR5cGUgJiYKLQkJCSAgICBWNEwyX1RVTkVSX1JBRElPICE9IHQtPm1vZGUpIHsKKwkJCWlmICgoVjRMMl9UVU5FUl9SQURJTyA9PSBmLT50eXBlICYmIFY0TDJfVFVORVJfUkFESU8gIT0gdC0+bW9kZSkKKwkJCQl8fCAoVjRMMl9UVU5FUl9ESUdJVEFMX1RWID09IGYtPnR5cGUKKwkJCQkJJiYgVjRMMl9UVU5FUl9ESUdJVEFMX1RWICE9IHQtPm1vZGUpKSB7CiAJCQkJaWYgKHNldF9tb2RlIChjbGllbnQsIHQsIGYtPnR5cGUsICJWSURJT0NfU19GUkVRVUVOQ1kiKQogCQkJCQkgICAgPT0gRUlOVkFMKQogCQkJCQlyZXR1cm4gMDsKQEAgLTc0MywzMyArNzQzLDI5IEBACiAJCQkJcmV0dXJuIDA7CiAJCQlzd2l0Y2hfdjRsMigpOwogCi0JCQlpZiAoVjRMMl9UVU5FUl9SQURJTyA9PSB0LT5tb2RlKSB7Ci0KLQkJCQlpZiAodC0+aGFzX3NpZ25hbCkKLQkJCQkJdHVuZXItPnNpZ25hbCA9IHQtPmhhc19zaWduYWwoY2xpZW50KTsKLQotCQkJCWlmICh0LT5pc19zdGVyZW8pIHsKLQkJCQkJaWYgKHQtPmlzX3N0ZXJlbyhjbGllbnQpKSB7Ci0JCQkJCQl0dW5lci0+cnhzdWJjaGFucyA9Ci0JCQkJCQkgICAgVjRMMl9UVU5FUl9TVUJfU1RFUkVPIHwKLQkJCQkJCSAgICBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJCQl9IGVsc2UgewotCQkJCQkJdHVuZXItPnJ4c3ViY2hhbnMgPQotCQkJCQkJICAgIFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQl0dW5lci0+Y2FwYWJpbGl0eSB8PQotCQkJCSAgICBWNEwyX1RVTkVSX0NBUF9MT1cgfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU87Ci0KLQkJCQl0dW5lci0+YXVkbW9kZSA9IHQtPmF1ZG1vZGU7Ci0KLQkJCQl0dW5lci0+cmFuZ2Vsb3cgPSByYWRpb19yYW5nZVswXSAqIDE2MDAwOwotCQkJCXR1bmVyLT5yYW5nZWhpZ2ggPSByYWRpb19yYW5nZVsxXSAqIDE2MDAwOwotCQkJfSBlbHNlIHsKKwkJCXR1bmVyLT50eXBlID0gdC0+bW9kZTsKKwkJCWlmICh0LT5tb2RlICE9IFY0TDJfVFVORVJfUkFESU8pIHsKIAkJCQl0dW5lci0+cmFuZ2Vsb3cgPSB0dl9yYW5nZVswXSAqIDE2OwogCQkJCXR1bmVyLT5yYW5nZWhpZ2ggPSB0dl9yYW5nZVsxXSAqIDE2OworCQkJCWJyZWFrOwogCQkJfQorCisJCQkvKiByYWRpbyBtb2RlICovCisJCQlpZiAodC0+aGFzX3NpZ25hbCkKKwkJCQl0dW5lci0+c2lnbmFsID0gdC0+aGFzX3NpZ25hbChjbGllbnQpOworCisJCQl0dW5lci0+cnhzdWJjaGFucyA9CisJCQkJVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwkJCWlmICh0LT5pc19zdGVyZW8pIHsKKwkJCQl0dW5lci0+cnhzdWJjaGFucyA9IHQtPmlzX3N0ZXJlbyhjbGllbnQpID8KKwkJCQkJVjRMMl9UVU5FUl9TVUJfU1RFUkVPIDogVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJCX0KKworCQkJdHVuZXItPmNhcGFiaWxpdHkgfD0KKwkJCSAgICBWNEwyX1RVTkVSX0NBUF9MT1cgfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU87CisJCQl0dW5lci0+YXVkbW9kZSA9IHQtPmF1ZG1vZGU7CisJCQl0dW5lci0+cmFuZ2Vsb3cgPSByYWRpb19yYW5nZVswXSAqIDE2MDAwOworCQkJdHVuZXItPnJhbmdlaGlnaCA9IHJhZGlvX3JhbmdlWzFdICogMTYwMDA7CiAJCQlicmVhazsKIAkJfQogCWNhc2UgVklESU9DX1NfVFVORVI6CkBAIC03ODEsMTAgKzc3NywxMSBAQAogCiAJCQlzd2l0Y2hfdjRsMigpOwogCi0JCQlpZiAoVjRMMl9UVU5FUl9SQURJTyA9PSB0LT5tb2RlKSB7Ci0JCQkJdC0+YXVkbW9kZSA9IHR1bmVyLT5hdWRtb2RlOwotCQkJCXNldF9yYWRpb19mcmVxKGNsaWVudCwgdC0+cmFkaW9fZnJlcSk7Ci0JCQl9CisJCQkvKiBkbyBub3RoaW5nIHVubGVzcyB3ZSdyZSBhIHJhZGlvIHR1bmVyICovCisJCQlpZiAodC0+bW9kZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQkJCWJyZWFrOworCQkJdC0+YXVkbW9kZSA9IHR1bmVyLT5hdWRtb2RlOworCQkJc2V0X3JhZGlvX2ZyZXEoY2xpZW50LCB0LT5yYWRpb19mcmVxKTsKIAkJCWJyZWFrOwogCQl9CiAJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCmluZGV4IDM3OTc3ZmYuLjVkN2FiZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYwpAQCAtNzksMTcgKzc5LDYgQEAKICNkZWZpbmUgVFVORVJfUExMX0xPQ0tFRCAgIDB4NDAKICNkZWZpbmUgVFVORVJfU1RFUkVPX01LMyAgIDB4MDQKIAotI2RlZmluZSBUVU5FUl9QQVJBTV9BTkFMT0cgMCAgLyogdG8gYmUgcmVtb3ZlZCAqLwotLyogRklYTUU6Ci0gKiBSaWdodCBub3csIGFsbCB0dW5lcnMgYXJlIHVzaW5nIHRoZSBmaXJzdCB0dW5lcl9wYXJhbXNbXSBhcnJheSBlbGVtZW50Ci0gKiBmb3IgYW5hbG9nIG1vZGUuIEluIHRoZSBmdXR1cmUsIHdlIHdpbGwgYmUgbWVyZ2luZyBzaW1pbGFyIHR1bmVyCi0gKiBkZWZpbml0aW9ucyB0b2dldGhlciwgc3VjaCB0aGF0IGVhY2ggdHVuZXIgZGVmaW5pdGlvbiB3aWxsIGhhdmUgYQotICogdHVuZXJfcGFyYW1zIHN0cnVjdCBmb3IgZWFjaCBhdmFpbGFibGUgdmlkZW8gc3RhbmRhcmQuIEF0IHRoYXQgcG9pbnQsCi0gKiBUVU5FUl9QQVJBTV9BTkFMT0cgd2lsbCBiZSByZW1vdmVkLCBhbmQgdGhlIHR1bmVyX3BhcmFtc1tdIGFycmF5Ci0gKiBlbGVtZW50IHdpbGwgYmUgY2hvc2VuIGJhc2VkIG9uIHRoZSB2aWRlbyBzdGFuZGFyZCBpbiB1c2UuCi0gKgotICovCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCB0dW5lcl9nZXRzdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmMpCkBAIC0xMzMsMTE2ICsxMjIsMTQgQEAKIHN0YXRpYyB2b2lkIGRlZmF1bHRfc2V0X3R2X2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBmcmVxKQogewogCXN0cnVjdCB0dW5lciAqdCA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQl1OCBjb25maWcsIHR1bmVyYWRkcjsKKwl1OCBjb25maWcsIGNiLCB0dW5lcmFkZHI7CiAJdTE2IGRpdjsKIAlzdHJ1Y3QgdHVuZXJ0eXBlICp0dW47CiAJdTggYnVmZmVyWzRdOwogCWludCByYywgSUZQQ29mZiwgaSwgajsKKwllbnVtIHBhcmFtX3R5cGUgZGVzaXJlZF90eXBlOwogCiAJdHVuID0gJnR1bmVyc1t0LT50eXBlXTsKLQlqID0gVFVORVJfUEFSQU1fQU5BTE9HOwotCi0JZm9yIChpID0gMDsgaSA8IHR1bi0+cGFyYW1zW2pdLmNvdW50OyBpKyspIHsKLQkJaWYgKGZyZXEgPiB0dW4tPnBhcmFtc1tqXS5yYW5nZXNbaV0ubGltaXQpCi0JCQljb250aW51ZTsKLQkJYnJlYWs7Ci0JfQotCWlmIChpID09IHR1bi0+cGFyYW1zW2pdLmNvdW50KSB7Ci0JCXR1bmVyX2RiZygiVFYgZnJlcXVlbmN5IG91dCBvZiByYW5nZSAoJWQgPiAlZCkiLAotCQkJCWZyZXEsIHR1bi0+cGFyYW1zW2pdLnJhbmdlc1tpIC0gMV0ubGltaXQpOwotCQlmcmVxID0gdHVuLT5wYXJhbXNbal0ucmFuZ2VzWy0taV0ubGltaXQ7Ci0JfQotCWNvbmZpZyA9IHR1bi0+cGFyYW1zW2pdLnJhbmdlc1tpXS5jYjsKLQkvKiAgaSA9PSAwIC0+IFZIRl9MTyAgKi8KLQkvKiAgaSA9PSAxIC0+IFZIRl9ISSAgKi8KLQkvKiAgaSA9PSAyIC0+IFVIRiAgICAgKi8KLQl0dW5lcl9kYmcoInR2OiByYW5nZSAlZFxuIixpKTsKLQotCS8qIHR2IG5vcm0gc3BlY2lmaWMgc3R1ZmYgZm9yIG11bHRpLW5vcm0gdHVuZXJzICovCi0Jc3dpdGNoICh0LT50eXBlKSB7Ci0JY2FzZSBUVU5FUl9QSElMSVBTX1NFQ0FNOiAvLyBGSTEyMTZNRgotCQkvKiAweDAxIC0+ID8/PyBubyBjaGFuZ2UgPz8/ICovCi0JCS8qIDB4MDIgLT4gUEFMIEJER0hJIC8gU0VDQU0gTCAqLwotCQkvKiAweDA0IC0+ID8/PyBQQUwgb3RoZXJzIC8gU0VDQU0gb3RoZXJzID8/PyAqLwotCQljb25maWcgJj0gfjB4MDI7Ci0JCWlmICh0LT5zdGQgJiBWNEwyX1NURF9TRUNBTSkKLQkJCWNvbmZpZyB8PSAweDAyOwotCQlicmVhazsKLQotCWNhc2UgVFVORVJfVEVNSUNfNDA0NkZNNToKLQkJY29uZmlnICY9IH4weDBmOwotCi0JCWlmICh0LT5zdGQgJiBWNEwyX1NURF9QQUxfQkcpIHsKLQkJCWNvbmZpZyB8PSBURU1JQ19TRVRfUEFMX0JHOwotCi0JCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKLQkJCWNvbmZpZyB8PSBURU1JQ19TRVRfUEFMX0k7Ci0KLQkJfSBlbHNlIGlmICh0LT5zdGQgJiBWNEwyX1NURF9QQUxfREspIHsKLQkJCWNvbmZpZyB8PSBURU1JQ19TRVRfUEFMX0RLOwotCi0JCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfU0VDQU1fTCkgewotCQkJY29uZmlnIHw9IFRFTUlDX1NFVF9QQUxfTDsKLQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBUVU5FUl9QSElMSVBTX0ZRMTIxNk1FOgotCQljb25maWcgJj0gfjB4MGY7Ci0KLQkJaWYgKHQtPnN0ZCAmIChWNEwyX1NURF9QQUxfQkd8VjRMMl9TVERfUEFMX0RLKSkgewotCQkJY29uZmlnIHw9IFBISUxJUFNfU0VUX1BBTF9CR0RLOwotCi0JCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKLQkJCWNvbmZpZyB8PSBQSElMSVBTX1NFVF9QQUxfSTsKLQotCQl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKLQkJCWNvbmZpZyB8PSBQSElMSVBTX1NFVF9QQUxfTDsKLQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBUVU5FUl9QSElMSVBTX0FUU0M6Ci0JCS8qIDB4MDAgLT4gQVRTQyBhbnRlbm5hIGlucHV0IDEgKi8KLQkJLyogMHgwMSAtPiBBVFNDIGFudGVubmEgaW5wdXQgMiAqLwotCQkvKiAweDAyIC0+IE5UU0MgYW50ZW5uYSBpbnB1dCAxICovCi0JCS8qIDB4MDMgLT4gTlRTQyBhbnRlbm5hIGlucHV0IDIgKi8KLQkJY29uZmlnICY9IH4weDAzOwotCQlpZiAoISh0LT5zdGQgJiBWNEwyX1NURF9BVFNDKSkKLQkJCWNvbmZpZyB8PSAyOwotCQkvKiBGSVhNRTogaW5wdXQgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIFRVTkVSX01JQ1JPVFVORV80MDQyRkk1OgotCQkvKiBTZXQgdGhlIGNoYXJnZSBwdW1wIGZvciBmYXN0IHR1bmluZyAqLwotCQl0dW4tPnBhcmFtc1tqXS5jb25maWcgfD0gVFVORVJfQ0hBUkdFX1BVTVA7Ci0JCWJyZWFrOwotCi0JY2FzZSBUVU5FUl9QSElMSVBTX1RVVjEyMzZEOgotCQkvKiAweDQwIC0+IEFUU0MgYW50ZW5uYSBpbnB1dCAxICovCi0JCS8qIDB4NDggLT4gQVRTQyBhbnRlbm5hIGlucHV0IDIgKi8KLQkJLyogMHgwMCAtPiBOVFNDIGFudGVubmEgaW5wdXQgMSAqLwotCQkvKiAweDA4IC0+IE5UU0MgYW50ZW5uYSBpbnB1dCAyICovCi0JCWJ1ZmZlclswXSA9IDB4MTQ7Ci0JCWJ1ZmZlclsxXSA9IDB4MDA7Ci0JCWJ1ZmZlclsyXSA9IDB4MTc7Ci0JCWJ1ZmZlclszXSA9IDB4MDA7Ci0JCWNvbmZpZyAmPSB+MHg0MDsKLQkJaWYgKHQtPnN0ZCAmIFY0TDJfU1REX0FUU0MpIHsKLQkJCWNvbmZpZyB8PSAweDQwOwotCQkJYnVmZmVyWzFdID0gMHgwNDsKLQkJfQotCQkvKiBzZXQgdG8gdGhlIGNvcnJlY3QgbW9kZSAoYW5hbG9nIG9yIGRpZ2l0YWwpICovCi0JCXR1bmVyYWRkciA9IGMtPmFkZHI7Ci0JCWMtPmFkZHIgPSAweDBhOwotCQlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYywmYnVmZmVyWzBdLDIpKSkKLQkJCXR1bmVyX3dhcm4oImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOwotCQlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYywmYnVmZmVyWzJdLDIpKSkKLQkJCXR1bmVyX3dhcm4oImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMilcbiIscmMpOwotCQljLT5hZGRyID0gdHVuZXJhZGRyOwotCQkvKiBGSVhNRTogaW5wdXQgKi8KLQkJYnJlYWs7Ci0JfQogCiAJLyogSUZQQ29mZiA9IFZpZGVvIEludGVybWVkaWF0ZSBGcmVxdWVuY3kgLSBWaWY6CiAJCTk0MCAgPTE2KjU4Ljc1ICBOVFNDL0ogKEphcGFuKQpAQCAtMjU3LDE2ICsxNDQsNDkgQEAKIAkqLwogCiAJaWYgKHQtPnN0ZCA9PSBWNEwyX1NURF9OVFNDX01fSlApIHsKLQkJSUZQQ29mZiA9IDk0MDsKKwkJSUZQQ29mZiAgICAgID0gOTQwOworCQlkZXNpcmVkX3R5cGUgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0M7CiAJfSBlbHNlIGlmICgodC0+c3RkICYgVjRMMl9TVERfTU4pICYmCiAJCSAgISh0LT5zdGQgJiB+VjRMMl9TVERfTU4pKSB7Ci0JCUlGUENvZmYgPSA3MzI7CisJCUlGUENvZmYgICAgICA9IDczMjsKKwkJZGVzaXJlZF90eXBlID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDOwogCX0gZWxzZSBpZiAodC0+c3RkID09IFY0TDJfU1REX1NFQ0FNX0xDKSB7Ci0JCUlGUENvZmYgPSA1NDM7CisJCUlGUENvZmYgICAgICA9IDU0MzsKKwkJZGVzaXJlZF90eXBlID0gVFVORVJfUEFSQU1fVFlQRV9TRUNBTTsKIAl9IGVsc2UgewotCQlJRlBDb2ZmID0gNjIzOworCQlJRlBDb2ZmICAgICAgPSA2MjM7CisJCWRlc2lyZWRfdHlwZSA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMOwogCX0KIAorCWZvciAoaiA9IDA7IGogPCB0dW4tPmNvdW50LTE7IGorKykgeworCQlpZiAoZGVzaXJlZF90eXBlICE9IHR1bi0+cGFyYW1zW2pdLnR5cGUpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQorCS8qIHVzZSBkZWZhdWx0IHR1bmVyX3BhcmFtcyBpZiBkZXNpcmVkX3R5cGUgbm90IGF2YWlsYWJsZSAqLworCWlmIChkZXNpcmVkX3R5cGUgIT0gdHVuLT5wYXJhbXNbal0udHlwZSkgeworCQl0dW5lcl9kYmcoIklGUENvZmYgPSAlZDogdHVuZXJfcGFyYW1zIHVuZGVmaW5lZCBmb3IgdHVuZXIgJWRcbiIsCisJCQkgIElGUENvZmYsdC0+dHlwZSk7CisJCWogPSAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB0dW4tPnBhcmFtc1tqXS5jb3VudDsgaSsrKSB7CisJCWlmIChmcmVxID4gdHVuLT5wYXJhbXNbal0ucmFuZ2VzW2ldLmxpbWl0KQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKwlpZiAoaSA9PSB0dW4tPnBhcmFtc1tqXS5jb3VudCkgeworCQl0dW5lcl9kYmcoIlRWIGZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2UgKCVkID4gJWQpIiwKKwkJCQlmcmVxLCB0dW4tPnBhcmFtc1tqXS5yYW5nZXNbaSAtIDFdLmxpbWl0KTsKKwkJZnJlcSA9IHR1bi0+cGFyYW1zW2pdLnJhbmdlc1stLWldLmxpbWl0OworCX0KKwljb25maWcgPSB0dW4tPnBhcmFtc1tqXS5yYW5nZXNbaV0uY29uZmlnOworCWNiICAgICA9IHR1bi0+cGFyYW1zW2pdLnJhbmdlc1tpXS5jYjsKKwkvKiAgaSA9PSAwIC0+IFZIRl9MTworCSAqICBpID09IDEgLT4gVkhGX0hJCisJICogIGkgPT0gMiAtPiBVSEYgICAgICovCisJdHVuZXJfZGJnKCJ0djogcGFyYW0gJWQsIHJhbmdlICVkXG4iLGosaSk7CisKIAlkaXY9ZnJlcSArIElGUENvZmYgKyBvZmZzZXQ7CiAKIAl0dW5lcl9kYmcoIkZyZXE9ICVkLiUwMmQgTUh6LCBWX0lGPSVkLiUwMmQgTUh6LCBPZmZzZXQ9JWQuJTAyZCBNSHosIGRpdj0lMGRcbiIsCkBAIC0yNzUsMTYgKzE5NSwxMDIgQEAKIAkJCQkJb2Zmc2V0IC8gMTYsIG9mZnNldCAlIDE2ICogMTAwIC8gMTYsCiAJCQkJCWRpdik7CiAKKwkvKiB0diBub3JtIHNwZWNpZmljIHN0dWZmIGZvciBtdWx0aS1ub3JtIHR1bmVycyAqLworCXN3aXRjaCAodC0+dHlwZSkgeworCWNhc2UgVFVORVJfUEhJTElQU19TRUNBTTogLy8gRkkxMjE2TUYKKwkJLyogMHgwMSAtPiA/Pz8gbm8gY2hhbmdlID8/PyAqLworCQkvKiAweDAyIC0+IFBBTCBCREdISSAvIFNFQ0FNIEwgKi8KKwkJLyogMHgwNCAtPiA/Pz8gUEFMIG90aGVycyAvIFNFQ0FNIG90aGVycyA/Pz8gKi8KKwkJY2IgJj0gfjB4MDI7CisJCWlmICh0LT5zdGQgJiBWNEwyX1NURF9TRUNBTSkKKwkJCWNiIHw9IDB4MDI7CisJCWJyZWFrOworCisJY2FzZSBUVU5FUl9URU1JQ180MDQ2Rk01OgorCQljYiAmPSB+MHgwZjsKKworCQlpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0JHKSB7CisJCQljYiB8PSBURU1JQ19TRVRfUEFMX0JHOworCisJCX0gZWxzZSBpZiAodC0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKKwkJCWNiIHw9IFRFTUlDX1NFVF9QQUxfSTsKKworCQl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1BBTF9ESykgeworCQkJY2IgfD0gVEVNSUNfU0VUX1BBTF9ESzsKKworCQl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKKwkJCWNiIHw9IFRFTUlDX1NFVF9QQUxfTDsKKworCQl9CisJCWJyZWFrOworCisJY2FzZSBUVU5FUl9QSElMSVBTX0ZRMTIxNk1FOgorCQljYiAmPSB+MHgwZjsKKworCQlpZiAodC0+c3RkICYgKFY0TDJfU1REX1BBTF9CR3xWNEwyX1NURF9QQUxfREspKSB7CisJCQljYiB8PSBQSElMSVBTX1NFVF9QQUxfQkdESzsKKworCQl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7CisJCQljYiB8PSBQSElMSVBTX1NFVF9QQUxfSTsKKworCQl9IGVsc2UgaWYgKHQtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKKwkJCWNiIHw9IFBISUxJUFNfU0VUX1BBTF9MOworCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFRVTkVSX1BISUxJUFNfQVRTQzoKKwkJLyogMHgwMCAtPiBBVFNDIGFudGVubmEgaW5wdXQgMSAqLworCQkvKiAweDAxIC0+IEFUU0MgYW50ZW5uYSBpbnB1dCAyICovCisJCS8qIDB4MDIgLT4gTlRTQyBhbnRlbm5hIGlucHV0IDEgKi8KKwkJLyogMHgwMyAtPiBOVFNDIGFudGVubmEgaW5wdXQgMiAqLworCQljYiAmPSB+MHgwMzsKKwkJaWYgKCEodC0+c3RkICYgVjRMMl9TVERfQVRTQykpCisJCQljYiB8PSAyOworCQkvKiBGSVhNRTogaW5wdXQgKi8KKwkJYnJlYWs7CisKKwljYXNlIFRVTkVSX01JQ1JPVFVORV80MDQyRkk1OgorCQkvKiBTZXQgdGhlIGNoYXJnZSBwdW1wIGZvciBmYXN0IHR1bmluZyAqLworCQljb25maWcgfD0gVFVORVJfQ0hBUkdFX1BVTVA7CisJCWJyZWFrOworCisJY2FzZSBUVU5FUl9QSElMSVBTX1RVVjEyMzZEOgorCQkvKiAweDQwIC0+IEFUU0MgYW50ZW5uYSBpbnB1dCAxICovCisJCS8qIDB4NDggLT4gQVRTQyBhbnRlbm5hIGlucHV0IDIgKi8KKwkJLyogMHgwMCAtPiBOVFNDIGFudGVubmEgaW5wdXQgMSAqLworCQkvKiAweDA4IC0+IE5UU0MgYW50ZW5uYSBpbnB1dCAyICovCisJCWJ1ZmZlclswXSA9IDB4MTQ7CisJCWJ1ZmZlclsxXSA9IDB4MDA7CisJCWJ1ZmZlclsyXSA9IDB4MTc7CisJCWJ1ZmZlclszXSA9IDB4MDA7CisJCWNiICY9IH4weDQwOworCQlpZiAodC0+c3RkICYgVjRMMl9TVERfQVRTQykgeworCQkJY2IgfD0gMHg0MDsKKwkJCWJ1ZmZlclsxXSA9IDB4MDQ7CisJCX0KKwkJLyogc2V0IHRvIHRoZSBjb3JyZWN0IG1vZGUgKGFuYWxvZyBvciBkaWdpdGFsKSAqLworCQl0dW5lcmFkZHIgPSBjLT5hZGRyOworCQljLT5hZGRyID0gMHgwYTsKKwkJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsJmJ1ZmZlclswXSwyKSkpCisJCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwkJaWYgKDIgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsJmJ1ZmZlclsyXSwyKSkpCisJCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDIpXG4iLHJjKTsKKwkJYy0+YWRkciA9IHR1bmVyYWRkcjsKKwkJLyogRklYTUU6IGlucHV0ICovCisJCWJyZWFrOworCX0KKwogCWlmICh0dW5lcnNbdC0+dHlwZV0ucGFyYW1zLT5jYl9maXJzdF9pZl9sb3dlcl9mcmVxICYmIGRpdiA8IHQtPmxhc3RfZGl2KSB7Ci0JCWJ1ZmZlclswXSA9IHR1bi0+cGFyYW1zW2pdLmNvbmZpZzsKLQkJYnVmZmVyWzFdID0gY29uZmlnOworCQlidWZmZXJbMF0gPSBjb25maWc7CisJCWJ1ZmZlclsxXSA9IGNiOwogCQlidWZmZXJbMl0gPSAoZGl2Pj44KSAmIDB4N2Y7CiAJCWJ1ZmZlclszXSA9IGRpdiAgICAgICYgMHhmZjsKIAl9IGVsc2UgewogCQlidWZmZXJbMF0gPSAoZGl2Pj44KSAmIDB4N2Y7CiAJCWJ1ZmZlclsxXSA9IGRpdiAgICAgICYgMHhmZjsKLQkJYnVmZmVyWzJdID0gdHVuLT5wYXJhbXNbal0uY29uZmlnOwotCQlidWZmZXJbM10gPSBjb25maWc7CisJCWJ1ZmZlclsyXSA9IGNvbmZpZzsKKwkJYnVmZmVyWzNdID0gY2I7CiAJfQogCXQtPmxhc3RfZGl2ID0gZGl2OwogCXR1bmVyX2RiZygidHYgMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLApAQCAtMzEyLDExICszMTgsMTEgQEAKIAkJfQogCiAJCS8qIFNldCB0aGUgY2hhcmdlIHB1bXAgZm9yIG9wdGltaXplZCBwaGFzZSBub2lzZSBmaWd1cmUgKi8KLQkJdHVuLT5wYXJhbXNbal0uY29uZmlnICY9IH5UVU5FUl9DSEFSR0VfUFVNUDsKKwkJY29uZmlnICY9IH5UVU5FUl9DSEFSR0VfUFVNUDsKIAkJYnVmZmVyWzBdID0gKGRpdj4+OCkgJiAweDdmOwogCQlidWZmZXJbMV0gPSBkaXYgICAgICAmIDB4ZmY7Ci0JCWJ1ZmZlclsyXSA9IHR1bi0+cGFyYW1zW2pdLmNvbmZpZzsKLQkJYnVmZmVyWzNdID0gY29uZmlnOworCQlidWZmZXJbMl0gPSBjb25maWc7CisJCWJ1ZmZlclszXSA9IGNiOwogCQl0dW5lcl9kYmcoInR2IDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKIAkJICAgICAgIGJ1ZmZlclswXSxidWZmZXJbMV0sYnVmZmVyWzJdLGJ1ZmZlclszXSk7CiAKQEAgLTMzMiwxMiArMzM4LDIxIEBACiAJdTggYnVmZmVyWzRdOwogCXUxNiBkaXY7CiAJaW50IHJjLCBqOworCWVudW0gcGFyYW1fdHlwZSBkZXNpcmVkX3R5cGUgPSBUVU5FUl9QQVJBTV9UWVBFX1JBRElPOwogCiAJdHVuID0gJnR1bmVyc1t0LT50eXBlXTsKLQlqID0gVFVORVJfUEFSQU1fQU5BTE9HOworCisJZm9yIChqID0gMDsgaiA8IHR1bi0+Y291bnQtMTsgaisrKSB7CisJCWlmIChkZXNpcmVkX3R5cGUgIT0gdHVuLT5wYXJhbXNbal0udHlwZSkKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisJLyogdXNlIGRlZmF1bHQgdHVuZXJfcGFyYW1zIGlmIGRlc2lyZWRfdHlwZSBub3QgYXZhaWxhYmxlICovCisJaWYgKGRlc2lyZWRfdHlwZSAhPSB0dW4tPnBhcmFtc1tqXS50eXBlKQorCQlqID0gMDsKIAogCWRpdiA9ICgyMCAqIGZyZXEgLyAxNjAwMCkgKyAoaW50KSgyMCoxMC43KTsgLyogSUYgMTAuNyBNSHogKi8KLQlidWZmZXJbMl0gPSAodHVuLT5wYXJhbXNbal0uY29uZmlnICYgflRVTkVSX1JBVElPX01BU0spIHwgVFVORVJfUkFUSU9fU0VMRUNUXzUwOyAvKiA1MCBrSHogc3RlcCAqLworCWJ1ZmZlclsyXSA9ICh0dW4tPnBhcmFtc1tqXS5yYW5nZXNbMF0uY29uZmlnICYgflRVTkVSX1JBVElPX01BU0spIHwgVFVORVJfUkFUSU9fU0VMRUNUXzUwOyAvKiA1MCBrSHogc3RlcCAqLwogCiAJc3dpdGNoICh0LT50eXBlKSB7CiAJY2FzZSBUVU5FUl9URU5BXzk1MzNfREk6CkBAIC0zNDksNiArMzY0LDkgQEAKIAljYXNlIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMzoKIAkJYnVmZmVyWzNdID0gMHgxOTsKIAkJYnJlYWs7CisJY2FzZSBUVU5FUl9UTkZfNTMzNU1GOgorCQlidWZmZXJbM10gPSAweDExOworCQlicmVhazsKIAljYXNlIFRVTkVSX1BISUxJUFNfRk0xMjU2X0lIMzoKIAkJZGl2ID0gKDIwICogZnJlcSkgLyAxNjAwMCArIChpbnQpKDMzLjMgKiAyMCk7ICAvKiBJRiAzMy4zIE1IeiAqLwogCQlidWZmZXJbM10gPSAweDE5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jCmluZGV4IDZmZTc4MTcuLjcyZTBmMDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jCkBAIC0yMywyMiArMjMsMjUgQEAKICAqCUVhY2ggdHVuZXJfcGFyYW1zIGFycmF5IG1heSBjb250YWluIG9uZSBvciBtb3JlIGVsZW1lbnRzLCBvbmUKICAqCWZvciBlYWNoIHZpZGVvIHN0YW5kYXJkLgogICoKLSAqCUZJWE1FOiBTb21lIHR1bmVyX3JhbmdlIGRlZmluaXRpb25zIGFyZSBkdXBsaWNhdGVkLCBhbmQKLSAqCXNob3VsZCBiZSBlbGltaW5hdGVkLgorICoJRklYTUU6IHR1bmVyX3BhcmFtcyBzdHJ1Y3QgY29udGFpbnMgYW4gZWxlbWVudCwgdGRhOTg4eC4gV2UgbXVzdAorICoJc2V0IHRoaXMgZm9yIGFsbCB0dW5lcnMgdGhhdCBjb250YWluIGEgdGRhOTg4eCBjaGlwLCBhbmQgdGhlbiB3ZQorICoJY2FuIHJlbW92ZSB0aGlzIHNldHRpbmcgZnJvbSB0aGUgdmFyaW91cyBjYXJkIHN0cnVjdHMuCiAgKgotICoJRklYTUU6IHR1bmVydHlwZSBzdHJ1Y3QgY29udGFpbnMgYW4gZWxlbWVudCwgaGFzX3RkYTk4OHguCi0gKglXZSBtdXN0IHNldCB0aGlzIGZvciBhbGwgdHVuZXJ0eXBlcyB0aGF0IGNvbnRhaW4gYSB0ZGE5ODh4Ci0gKgljaGlwLCBhbmQgdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgc2V0dGluZyBmcm9tIHRoZSB2YXJpb3VzCi0gKgljYXJkIHN0cnVjdHMuCisgKglGSVhNRTogUmlnaHQgbm93LCBhbGwgdHVuZXJzIGFyZSB1c2luZyB0aGUgZmlyc3QgdHVuZXJfcGFyYW1zW10KKyAqCWFycmF5IGVsZW1lbnQgZm9yIGFuYWxvZyBtb2RlLiBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGJlIG1lcmdpbmcKKyAqCXNpbWlsYXIgdHVuZXIgZGVmaW5pdGlvbnMgdG9nZXRoZXIsIHN1Y2ggdGhhdCBlYWNoIHR1bmVyIGRlZmluaXRpb24KKyAqCXdpbGwgaGF2ZSBhIHR1bmVyX3BhcmFtcyBzdHJ1Y3QgZm9yIGVhY2ggYXZhaWxhYmxlIHZpZGVvIHN0YW5kYXJkLgorICoJQXQgdGhhdCBwb2ludCwgdGhlIHR1bmVyX3BhcmFtc1tdIGFycmF5IGVsZW1lbnQgd2lsbCBiZSBjaG9zZW4KKyAqCWJhc2VkIG9uIHRoZSB2aWRlbyBzdGFuZGFyZCBpbiB1c2UuCiAgKi8KIAogLyogMC05ICovCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfUEFMIC0gVEVNSUMgUEFMIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RlbWljX3BhbF9yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTQwLjI1IC8qTUh6Ki8sIDB4MDIsIH0sCi0JeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDA0LCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwMSwgfSwKKwl7IDE2ICogMTQwLjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDIsIH0sCisJeyAxNiAqIDQ2My4yNSAvKk1IeiovLCAweDhlLCAweDA0LCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwMSwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RlbWljX3BhbF9wYXJhbXNbXSA9IHsKQEAgLTQ2LDE2ICs0OSwxNSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY19wYWxfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY19wYWxfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX1BBTF9JIC0gUGhpbGlwcyBQQUxfSSAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX3BhbF9pX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNDAuMjUgLypNSHoqLywgMHhhMCwgfSwKLQl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OTAsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCXsgMTYgKiAxNDAuMjUgLypNSHoqLywgMHg4ZSwgMHhhMCwgfSwKKwl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OGUsIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDMwLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19wYWxfaV9wYXJhbXNbXSA9IHsKQEAgLTYzLDE2ICs2NSwxNSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX3BhbF9pX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19wYWxfaV9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfTlRTQyAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweGEwLCB9LAotCXsgMTYgKiA0NTEuMjUgLypNSHoqLywgMHg5MCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDhlLCAweGEwLCB9LAorCXsgMTYgKiA0NTEuMjUgLypNSHoqLywgMHg4ZSwgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MzAsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX250c2NfcGFyYW1zW10gPSB7CkBAIC04MCw3ICs4MSw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX250c2NfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJCS5jYl9maXJzdF9pZl9sb3dlcl9mcmVxID0gMSwKIAl9LAogfTsKQEAgLTg4LDkgKzg4LDkgQEAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX1NFQ0FNIC0gUGhpbGlwcyBTRUNBTSAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX3NlY2FtX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjguMjUgLypNSHoqLywgMHhhNywgfSwKLQl7IDE2ICogNDQ3LjI1IC8qTUh6Ki8sIDB4OTcsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDM3LCB9LAorCXsgMTYgKiAxNjguMjUgLypNSHoqLywgMHg4ZSwgMHhhNywgfSwKKwl7IDE2ICogNDQ3LjI1IC8qTUh6Ki8sIDB4OGUsIDB4OTcsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDM3LCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19zZWNhbV9wYXJhbXNbXSA9IHsKQEAgLTk4LDcgKzk4LDYgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfU0VDQU0sCiAJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX3NlY2FtX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19zZWNhbV9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAkJLmNiX2ZpcnN0X2lmX2xvd2VyX2ZyZXEgPSAxLAogCX0sCiB9OwpAQCAtMTA2LDkgKzEwNSw5IEBACiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19QQUwgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX3BhbF9yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTY4LjI1IC8qTUh6Ki8sIDB4YTAsIH0sCi0JeyAxNiAqIDQ0Ny4yNSAvKk1IeiovLCAweDkwLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKKwl7IDE2ICogMTY4LjI1IC8qTUh6Ki8sIDB4OGUsIDB4YTAsIH0sCisJeyAxNiAqIDQ0Ny4yNSAvKk1IeiovLCAweDhlLCAweDkwLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgzMCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfcGFsX3BhcmFtc1tdID0gewpAQCAtMTE2LDcgKzExNSw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfcGFsX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19wYWxfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJCS5jYl9maXJzdF9pZl9sb3dlcl9mcmVxID0gMSwKIAl9LAogfTsKQEAgLTEyNCw5ICsxMjIsOSBAQAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDX05UU0MgLSBURU1JQyBOVFNDIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RlbWljX250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHgwNCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDEsIH0sCisJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHg4ZSwgMHgwNCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDEsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY19udHNjX3BhcmFtc1tdID0gewpAQCAtMTM0LDE2ICsxMzIsMTUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKIAkJLnJhbmdlcyA9IHR1bmVyX3RlbWljX250c2NfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY19udHNjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfUEFMX0kgLSBURU1JQyBQQUxfSSAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90ZW1pY19wYWxfaV9yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDA0LCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwMSwgfSwKKwl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDIsIH0sCisJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDhlLCAweDA0LCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwMSwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RlbWljX3BhbF9pX3BhcmFtc1tdID0gewpAQCAtMTUxLDE2ICsxNDgsMTUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfcGFsX2lfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY19wYWxfaV9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDXzQwMzZGWTVfTlRTQyAtIFRFTUlDIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDAzNmZ5NV9udHNjX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNTcuMjUgLypNSHoqLywgMHhhMCwgfSwKLQl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OTAsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCXsgMTYgKiAxNTcuMjUgLypNSHoqLywgMHg4ZSwgMHhhMCwgfSwKKwl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OGUsIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDMwLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfNDAzNmZ5NV9udHNjX3BhcmFtc1tdID0gewpAQCAtMTY4LDE2ICsxNjQsMTUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKIAkJLnJhbmdlcyA9IHR1bmVyX3RlbWljXzQwMzZmeTVfbnRzY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMzZmeTVfbnRzY19yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX0FMUFNfVFNCSDFfTlRTQyAtIFRFTUlDIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfYWxwc190c2JfMV9yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDM4NS4yNSAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKKwl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDM4NS4yNSAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwOCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX2FscHNfdHNiaDFfbnRzY19wYXJhbXNbXSA9IHsKQEAgLTE4NSw3ICsxODAsNiBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAogCQkucmFuZ2VzID0gdHVuZXJfYWxwc190c2JfMV9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2FscHNfdHNiXzFfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKQEAgLTE5NywxNiArMTkxLDE1IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2FscHNfdHNiXzFfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9hbHBzX3RzYl8xX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfQUxQU19UU0JCNV9QQUxfSSAtIEFscHMgUEFMX0kgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfYWxwc190c2JfNV9wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDEzMy4yNSAvKk1IeiovLCAweDAxLCB9LAotCXsgMTYgKiAzNTEuMjUgLypNSHoqLywgMHgwMiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJeyAxNiAqIDEzMy4yNSAvKk1IeiovLCAweDhlLCAweDAxLCB9LAorCXsgMTYgKiAzNTEuMjUgLypNSHoqLywgMHg4ZSwgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDgsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9hbHBzX3RzYmI1X3BhcmFtc1tdID0gewpAQCAtMjE0LDcgKzIwNyw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2FscHNfdHNiXzVfcGFsX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfYWxwc190c2JfNV9wYWxfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKQEAgLTIyNSw3ICsyMTcsNiBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl9hbHBzX3RzYl81X3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2FscHNfdHNiXzVfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCkBAIC0yMzYsMzMgKzIyNywzMSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl9hbHBzX3RzYl81X3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2FscHNfdHNiXzVfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfNDAwNkZINV9QQUwgLSBURU1JQyBQQUwgLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDAwNmZoNV9wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweGEwLCB9LAotCXsgMTYgKiA0NTAuMDAgLypNSHoqLywgMHg5MCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX2xnX3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4OGUsIDB4YTAsIH0sCisJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDhlLCAweDkwLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgzMCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RlbWljXzQwMDZmaDVfcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCi0JCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MDA2Zmg1X3BhbF9yYW5nZXMsCi0JCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMDZmaDVfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAorCQkucmFuZ2VzID0gdHVuZXJfbGdfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3JhbmdlcyksCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9BTFBTX1RTSEM2X05UU0MgLSBBbHBzIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfYWxwc190c2hjNl9udHNjX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHgxNCwgfSwKLQl7IDE2ICogMzg1LjI1IC8qTUh6Ki8sIDB4MTIsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDExLCB9LAorCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHg4ZSwgMHgxNCwgfSwKKwl7IDE2ICogMzg1LjI1IC8qTUh6Ki8sIDB4OGUsIDB4MTIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDExLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfYWxwc190c2hjNl9wYXJhbXNbXSA9IHsKQEAgLTI3MCwxNiArMjU5LDE1IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl9hbHBzX3RzaGM2X250c2NfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9hbHBzX3RzaGM2X250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9URU1JQ19QQUxfREsgLSBURU1JQyBQQUwgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfcGFsX2RrX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjguMjUgLypNSHoqLywgMHhhMCwgfSwKLQl7IDE2ICogNDU2LjI1IC8qTUh6Ki8sIDB4OTAsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCXsgMTYgKiAxNjguMjUgLypNSHoqLywgMHg4ZSwgMHhhMCwgfSwKKwl7IDE2ICogNDU2LjI1IC8qTUh6Ki8sIDB4OGUsIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDMwLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfcGFsX2RrX3BhcmFtc1tdID0gewpAQCAtMjg3LDE2ICsyNzUsMTUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfcGFsX2RrX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfcGFsX2RrX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19OVFNDX00gLSBQaGlsaXBzIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfcGhpbGlwc19udHNjX21fcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweGEwLCB9LAotCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDhlLCAweGEwLCB9LAorCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg4ZSwgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MzAsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX250c2NfbV9wYXJhbXNbXSA9IHsKQEAgLTMwNCwxNiArMjkxLDE1IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX250c2NfbV9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfbnRzY19tX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSSAtIFRFTUlDIFBBTF9JIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RlbWljXzQweDZmXzVfcGFsX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjkuMDAgLypNSHoqLywgMHhhMCwgfSwKLQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCXsgMTYgKiAxNjkuMDAgLypNSHoqLywgMHg4ZSwgMHhhMCwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OGUsIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDMwLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfNDA2NmZ5NV9wYWxfaV9wYXJhbXNbXSA9IHsKQEAgLTMyMSw3ICszMDcsNiBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MHg2Zl81X3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQweDZmXzVfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCkBAIC0zMzIsNyArMzE3LDYgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDB4NmZfNV9wYWxfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MHg2Zl81X3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtMzQwLDkgKzMyNCw5IEBACiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfNDAwOUZSNV9QQUwgLSBURU1JQyBQQUwgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDAwOWZfNV9wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE0MS4wMCAvKk1IeiovLCAweGEwLCB9LAotCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJeyAxNiAqIDE0MS4wMCAvKk1IeiovLCAweDhlLCAweGEwLCB9LAorCXsgMTYgKiA0NjQuMDAgLypNSHoqLywgMHg4ZSwgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MzAsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY180MDA5Zl81X3BhcmFtc1tdID0gewpAQCAtMzUwLDU4ICszMzQsNDIgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDAwOWZfNV9wYWxfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDXzQwMzlGUjVfTlRTQyAtIFRFTUlDIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDAzOWZyNV9udHNjX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNTguMDAgLypNSHoqLywgMHhhMCwgfSwKLQl7IDE2ICogNDUzLjAwIC8qTUh6Ki8sIDB4OTAsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90ZW1pY180eDN4X2ZfNV9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNTguMDAgLypNSHoqLywgMHg4ZSwgMHhhMCwgfSwKKwl7IDE2ICogNDUzLjAwIC8qTUh6Ki8sIDB4OGUsIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDMwLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGVtaWNfNDAzOWZyNV9wYXJhbXNbXSA9IHsKIAl7CiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCi0JCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MDM5ZnI1X250c2NfcmFuZ2VzLAotCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDM5ZnI1X250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCisJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180eDN4X2ZfNV9udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNHgzeF9mXzVfbnRzY19yYW5nZXMpLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfNDA0NkZNNSAtIFRFTUlDIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90ZW1pY180MDQ2Zm01X3BhbF9yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTY5LjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDkwLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RlbWljXzQwNDZmbTVfcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCi0JCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MDQ2Zm01X3BhbF9yYW5nZXMsCi0JCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwNDZmbTVfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAorCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDB4NmZfNV9wYWxfcmFuZ2VzLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MHg2Zl81X3BhbF9yYW5nZXMpLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19QQUxfREsgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9sZ19wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweGEwLCB9LAotCXsgMTYgKiA0NTAuMDAgLypNSHoqLywgMHg5MCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi19OwotCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX3BhbF9ka19wYXJhbXNbXSA9IHsKIAl7CiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2xnX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtNDEyLDcgKzM4MCw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2xnX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtNDIzLDcgKzM5MCw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2xnX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtNDM0LDE2ICs0MDAsMTUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfbGdfcGFsX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfTEdfTlRTQ19GTSAtIExHSU5OT1RFSyBOVFNDIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX2xnX250c2NfZm1fcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDIxMC4wMCAvKk1IeiovLCAweGEwLCB9LAotCXsgMTYgKiA0OTcuMDAgLypNSHoqLywgMHg5MCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJeyAxNiAqIDIxMC4wMCAvKk1IeiovLCAweDhlLCAweGEwLCB9LAorCXsgMTYgKiA0OTcuMDAgLypNSHoqLywgMHg4ZSwgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MzAsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9sZ19udHNjX2ZtX3BhcmFtc1tdID0gewpAQCAtNDUxLDcgKzQxNiw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl9sZ19udHNjX2ZtX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfbnRzY19mbV9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtNDYyLDcgKzQyNiw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2xnX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtNDczLDcgKzQzNiw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2xnX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtNDg1LDE2ICs0NDcsMTUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDAwOWZfNV9wYWxfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1NIQVJQXzJVNUpGNTU0MF9OVFNDIC0gU0hBUlAgTlRTQyAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9zaGFycF8ydTVqZjU1NDBfbnRzY19yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDMxNy4yNSAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKKwl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDMxNy4yNSAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwOCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3NoYXJwXzJ1NWpmNTU0MF9wYXJhbXNbXSA9IHsKQEAgLTUwMiwxNiArNDYzLDE1IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl9zaGFycF8ydTVqZjU1NDBfbnRzY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3NoYXJwXzJ1NWpmNTU0MF9udHNjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfU2Ftc3VuZ19QQUxfVENQTTkwOTFQRDI3IC0gU2Ftc3VuZyBQQUwgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfc2Ftc3VuZ19wYWxfdGNwbTkwOTFwZDI3X3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjkgLypNSHoqLywgMHhhMCwgfSwKLQl7IDE2ICogNDY0IC8qTUh6Ki8sIDB4OTAsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgLCAweDMwLCB9LAorCXsgMTYgKiAxNjkgLypNSHoqLywgMHg4ZSwgMHhhMCwgfSwKKwl7IDE2ICogNDY0IC8qTUh6Ki8sIDB4OGUsIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgLCAweDhlLCAweDMwLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfc2Ftc3VuZ19wYWxfdGNwbTkwOTFwZDI3X3BhcmFtc1tdID0gewpAQCAtNTE5LDcgKzQ3OSw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX3NhbXN1bmdfcGFsX3RjcG05MDkxcGQyN19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3NhbXN1bmdfcGFsX3RjcG05MDkxcGQyN19yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtNTMwLDUwICs0ODksMzUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDAwOWZfNV9wYWxfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RFTUlDXzQwMTJGWTUgLSBURU1JQyBQQUwgLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDAxMmZ5NV9wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE0MC4yNSAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHgwNCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDEsIH0sCi19OwotCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90ZW1pY180MDEyZnk1X3BhcmFtc1tdID0gewogCXsKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAotCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNDAxMmZ5NV9wYWxfcmFuZ2VzLAotCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDEyZnk1X3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKKwkJLnJhbmdlcyA9IHR1bmVyX3RlbWljX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljX3BhbF9yYW5nZXMpLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVNSUNfNDEzNkZZNSAtIFRFTUlDIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVtaWNfNDEzNl9meTVfbnRzY19yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTU4LjAwIC8qTUh6Ki8sIDB4YTAsIH0sCi0JeyAxNiAqIDQ1My4wMCAvKk1IeiovLCAweDkwLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgzMCwgfSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RlbWljXzQxMzZfZnk1X3BhcmFtc1tdID0gewogCXsKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKLQkJLnJhbmdlcyA9IHR1bmVyX3RlbWljXzQxMzZfZnk1X250c2NfcmFuZ2VzLAotCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MTM2X2Z5NV9udHNjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAorCQkucmFuZ2VzID0gdHVuZXJfdGVtaWNfNHgzeF9mXzVfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzR4M3hfZl81X250c2NfcmFuZ2VzKSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX0xHX1BBTF9ORVdfVEFQQyAtIExHSU5OT1RFSyBQQUwgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfbGdfbmV3X3RhcGNfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweDAxLCB9LAotCXsgMTYgKiA0NTAuMDAgLypNSHoqLywgMHgwMiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJeyAxNiAqIDE3MC4wMCAvKk1IeiovLCAweDhlLCAweDAxLCB9LAorCXsgMTYgKiA0NTAuMDAgLypNSHoqLywgMHg4ZSwgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDgsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9sZ19wYWxfbmV3X3RhcGNfcGFyYW1zW10gPSB7CkBAIC01ODEsMTYgKzUyNSwxNSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl9sZ19uZXdfdGFwY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX25ld190YXBjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9mbTEyMTZtZV9tazNfcGFsX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNTguMDAgLypNSHoqLywgMHgwMSwgfSwKLQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorCXsgMTYgKiAxNTguMDAgLypNSHoqLywgMHg4ZSwgMHgwMSwgfSwKKwl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDA0LCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfZm0xMjE2bWVfbWszX3BhcmFtc1tdID0gewpAQCAtNTk4LDcgKzU0MSw2IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX2ZtMTIxNm1lX21rM19wYWxfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9mbTEyMTZtZV9tazNfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCQkuY2JfZmlyc3RfaWZfbG93ZXJfZnJlcSA9IDEsCiAJfSwKIH07CkBAIC02MTAsNyArNTUyLDYgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKIAkJLnJhbmdlcyA9IHR1bmVyX2xnX25ld190YXBjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfbmV3X3RhcGNfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKQEAgLTYyMiwxNiArNTYzLDE1IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl9sZ19uZXdfdGFwY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX25ld190YXBjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19QQUxfTUsgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX3BhbF9ta19wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE0MC4yNSAvKk1IeiovLCAweDAxLCB9LAotCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHhjMiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4Y2YsIH0sCisJeyAxNiAqIDE0MC4yNSAvKk1IeiovLCAweDhlLCAweDAxLCB9LAorCXsgMTYgKiA0NjMuMjUgLypNSHoqLywgMHg4ZSwgMHhjMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4Y2YsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX3BhbF9ta19wYXJhbXNbXSA9IHsKQEAgLTYzOSwxNiArNTc5LDE1IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfcGFsX21rX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfcGFsX21rX3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfQVRTQyAtIFBoaWxpcHMgQVRTQyAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX2F0c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweGEwLCB9LAotCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCisJeyAxNiAqIDE1Ny4yNSAvKk1IeiovLCAweDhlLCAweGEwLCB9LAorCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg4ZSwgMHg5MCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MzAsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX2F0c2NfcGFyYW1zW10gPSB7CkBAIC02NTYsMTYgKzU5NSwxNSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAogCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19hdHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19hdHNjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GTTEyMzZfTUszIC0gUGhpbGlwcyBOVFNDIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX2ZtMTIzNl9tazNfbnRzY19yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKKwl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwNCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX2ZtMTIzNl9tazNfcGFyYW1zW10gPSB7CkBAIC02NzMsMjUgKzYxMSwxNyBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAogCQkucmFuZ2VzID0gdHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCQkuY2JfZmlyc3RfaWZfbG93ZXJfZnJlcSA9IDEsCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTXzRJTjEgLSBQaGlsaXBzIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfcGhpbGlwc180aW4xX250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxLCB9LAotCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHgwMiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCi19OwotCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzXzRpbjFfcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAotCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc180aW4xX250c2NfcmFuZ2VzLAotCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzXzRpbjFfbnRzY19yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKKwkJLnJhbmdlcyA9IHR1bmVyX2ZtMTIzNl9tazNfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2ZtMTIzNl9tazNfbnRzY19yYW5nZXMpLAogCX0sCiB9OwogCkBAIC03MDIsMTYgKzYzMiwxNSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl90ZW1pY180MDA5Zl81X3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMDlmXzVfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEFOQVNPTklDX1ZQMjcgLSBQYW5hc29uaWMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9wYW5hc29uaWNfdnAyN19udHNjX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKLQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAorCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHhjZSwgMHgwMSwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4Y2UsIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweGNlLCAweDA4LCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGFuYXNvbmljX3ZwMjdfcGFyYW1zW10gPSB7CkBAIC03MTksMzMgKzY0OCwyNSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAogCQkucmFuZ2VzID0gdHVuZXJfcGFuYXNvbmljX3ZwMjdfbnRzY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BhbmFzb25pY192cDI3X250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4Y2UsCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9MR19OVFNDX1RBUEUgLSBMR0lOTk9URUsgTlRTQyAtLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9sZ19udHNjX3RhcGVfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxLCB9LAotCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHgwMiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCi19OwotCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9sZ19udHNjX3RhcGVfcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAotCQkucmFuZ2VzID0gdHVuZXJfbGdfbnRzY190YXBlX3JhbmdlcywKLQkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfbnRzY190YXBlX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAorCQkucmFuZ2VzID0gdHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcyksCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9UTkZfODgzMUJHRkYgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90bmZfODgzMWJnZmZfcGFsX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjEuMjUgLypNSHoqLywgMHhhMCwgfSwKLQl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OTAsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDMwLCB9LAorCXsgMTYgKiAxNjEuMjUgLypNSHoqLywgMHg4ZSwgMHhhMCwgfSwKKwl7IDE2ICogNDYzLjI1IC8qTUh6Ki8sIDB4OGUsIDB4OTAsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDMwLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdG5mXzg4MzFiZ2ZmX3BhcmFtc1tdID0gewpAQCAtNzUzLDE2ICs2NzQsMTUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAogCQkucmFuZ2VzID0gdHVuZXJfdG5mXzg4MzFiZ2ZmX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RuZl84ODMxYmdmZl9wYWxfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9NSUNST1RVTkVfNDA0MkZJNSAtIE1pY3JvdHVuZSBOVFNDIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX21pY3JvdHVuZV80MDQyZmk1X250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2Mi4wMCAvKk1IeiovLCAweGEyLCB9LAotCXsgMTYgKiA0NTcuMDAgLypNSHoqLywgMHg5NCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzEsIH0sCisJeyAxNiAqIDE2Mi4wMCAvKk1IeiovLCAweDhlLCAweGEyLCB9LAorCXsgMTYgKiA0NTcuMDAgLypNSHoqLywgMHg4ZSwgMHg5NCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MzEsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9taWNyb3R1bmVfNDA0MmZpNV9wYXJhbXNbXSA9IHsKQEAgLTc3MCw3ICs2OTAsNiBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAogCQkucmFuZ2VzID0gdHVuZXJfbWljcm90dW5lXzQwNDJmaTVfbnRzY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX21pY3JvdHVuZV80MDQyZmk1X250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKQEAgLTc3OCw5ICs2OTcsOSBAQAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RDTF8yMDAyTiAtIFRDTCBOVFNDIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RjbF8yMDAybl9udHNjX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNzIuMDAgLypNSHoqLywgMHgwMSwgfSwKLQl7IDE2ICogNDQ4LjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAorCXsgMTYgKiAxNzIuMDAgLypNSHoqLywgMHg4ZSwgMHgwMSwgfSwKKwl7IDE2ICogNDQ4LjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDA4LCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGNsXzIwMDJuX3BhcmFtc1tdID0gewpAQCAtNzg4LDM0ICs3MDcsMjYgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKIAkJLnJhbmdlcyA9IHR1bmVyX3RjbF8yMDAybl9udHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGNsXzIwMDJuX250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJCS5jYl9maXJzdF9pZl9sb3dlcl9mcmVxID0gMSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRk0xMjU2X0lIMyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfZm0xMjU2X2loM19wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxLCB9LAotCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHgwMiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDQsIH0sCi19OwotCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9waGlsaXBzX2ZtMTI1Nl9paDNfcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCi0JCS5yYW5nZXMgPSB0dW5lcl9waGlsaXBzX2ZtMTI1Nl9paDNfcGFsX3JhbmdlcywKLQkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbTEyNTZfaWgzX3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKKwkJLnJhbmdlcyA9IHR1bmVyX2ZtMTIzNl9tazNfbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2ZtMTIzNl9tazNfbnRzY19yYW5nZXMpLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEhPTVNPTl9EVFQ3NjEwIC0gVEhPTVNPTiBBVFNDIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3Rob21zb25fZHR0NzYxMF9udHNjX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNTcuMjUgLypNSHoqLywgMHgzOSwgfSwKLQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4M2EsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDNjLCB9LAorCXsgMTYgKiAxNTcuMjUgLypNSHoqLywgMHg4ZSwgMHgzOSwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OGUsIDB4M2EsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDNjLCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdGhvbXNvbl9kdHQ3NjEwX3BhcmFtc1tdID0gewpAQCAtODIzLDE2ICs3MzQsMTUgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKIAkJLnJhbmdlcyA9IHR1bmVyX3Rob21zb25fZHR0NzYxMF9udHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGhvbXNvbl9kdHQ3NjEwX250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX0ZRMTI4NiAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX2ZxMTI4Nl9udHNjX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHg0MSwgfSwKLQl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4NDIsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHg4ZSwgMHg0MSwgfSwKKwl7IDE2ICogNDU0LjAwIC8qTUh6Ki8sIDB4OGUsIDB4NDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDA0LCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19mcTEyODZfcGFyYW1zW10gPSB7CkBAIC04NDAsMTYgKzc1MCwxNSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAogCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mcTEyODZfbnRzY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZnExMjg2X250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9UQ0xfMjAwMk1CIC0gVENMIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90Y2xfMjAwMm1iX3BhbF9yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKKwl7IDE2ICogMTcwLjAwIC8qTUh6Ki8sIDB4Y2UsIDB4MDEsIH0sCisJeyAxNiAqIDQ1MC4wMCAvKk1IeiovLCAweGNlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHhjZSwgMHgwOCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RjbF8yMDAybWJfcGFyYW1zW10gPSB7CkBAIC04NTcsMjQgKzc2NiwyMiBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCiAJCS5yYW5nZXMgPSB0dW5lcl90Y2xfMjAwMm1iX3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RjbF8yMDAybWJfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweGNlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfUEhJTElQU19GUTEyMTZBTUVfTUs0IC0gUGhpbGlwcyBQQUwgLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHgwMSwgfSwKLQl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4MDIsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0LCB9LAorc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9waGlsaXBzX2ZxMTJfNmFfX19tazRfcGFsX3Jhbmdlc1tdID0geworCXsgMTYgKiAxNjAuMDAgLypNSHoqLywgMHhjZSwgMHgwMSwgfSwKKwl7IDE2ICogNDQyLjAwIC8qTUh6Ki8sIDB4Y2UsIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweGNlLCAweDA0LCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfcGhpbGlwc19mcTEyMTZhbWVfbWs0X3BhcmFtc1tdID0gewogCXsKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAotCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3JhbmdlcywKLQkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3JhbmdlcyksCi0JCS5jb25maWcgPSAweGNlLAorCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZnExMl82YV9fX21rNF9wYWxfcmFuZ2VzKSwKIAl9LAogfTsKIApAQCAtODgzLDM1ICs3OTAsMjcgQEAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfZnExMjM2YV9tazRfcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAotCQkucmFuZ2VzID0gdHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3JhbmdlcywKLQkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mcTEyXzZhX19fbWs0X3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAorCQkucmFuZ2VzID0gdHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfZm0xMjM2X21rM19udHNjX3JhbmdlcyksCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9ZTUVDX1RWRl84NTMxTUYgLSBQaGlsaXBzIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfeW1lY190dmZfODUzMW1mX250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweGEwLCB9LAotCXsgMTYgKiA0NTQuMDAgLypNSHoqLywgMHg5MCwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MzAsIH0sCi19OwotCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl95bWVjX3R2Zl84NTMxbWZfcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAotCQkucmFuZ2VzID0gdHVuZXJfeW1lY190dmZfODUzMW1mX250c2NfcmFuZ2VzLAotCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl95bWVjX3R2Zl84NTMxbWZfbnRzY19yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKKwkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfbnRzY19tX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19udHNjX21fcmFuZ2VzKSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1lNRUNfVFZGXzU1MzNNRiAtIFBoaWxpcHMgTlRTQyAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl95bWVjX3R2Zl81NTMzbWZfbnRzY19yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKKwl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwNCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3ltZWNfdHZmXzU1MzNtZl9wYXJhbXNbXSA9IHsKQEAgLTkxOSw3ICs4MTgsNiBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAogCQkucmFuZ2VzID0gdHVuZXJfeW1lY190dmZfNTUzM21mX250c2NfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl95bWVjX3R2Zl81NTMzbWZfbnRzY19yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKIAl9LAogfTsKIApAQCAtOTI4LDkgKzgyNiw5IEBACiAvKiBEVFQgNzYxMSA3NjExQSA3NjEyIDc2MTMgNzYxM0EgNzYxNCA3NjE1IDc2MTVBICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGhvbXNvbl9kdHQ3NjF4X250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE0NS4yNSAvKk1IeiovLCAweDM5LCB9LAotCXsgMTYgKiA0MTUuMjUgLypNSHoqLywgMHgzYSwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4M2MsIH0sCisJeyAxNiAqIDE0NS4yNSAvKk1IeiovLCAweDhlLCAweDM5LCB9LAorCXsgMTYgKiA0MTUuMjUgLypNSHoqLywgMHg4ZSwgMHgzYSwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4M2MsIH0sCiB9OwogCiAKQEAgLTkzOSw0MiArODM3LDM5IEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl90aG9tc29uX2R0dDc2MXhfbnRzY19yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3Rob21zb25fZHR0NzYxeF9udHNjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfVEVOQV85NTMzX0RJIC0gUGhpbGlwcyBQQUwgLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdHVuZXJfdGVuYV85NTMzX2RpX3BhbF9yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTYwLjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDQ2NC4yNSAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGVuYV85NTMzX2RpX3BhbF9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTYwLjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDQ2NC4yNSAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwNCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RlbmFfOTUzM19kaV9wYXJhbXNbXSA9IHsKIAl7CiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKLQkJLnJhbmdlcyA9IHR1bmVyX3R1bmVyX3RlbmFfOTUzM19kaV9wYWxfcmFuZ2VzLAotCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90dW5lcl90ZW5hXzk1MzNfZGlfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAorCQkucmFuZ2VzID0gdHVuZXJfdGVuYV85NTMzX2RpX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbmFfOTUzM19kaV9wYWxfcmFuZ2VzKSwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMyAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDUxLCB9LAotCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHg1MiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4NTQsIH0sCisJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDg2LCAweDUxLCB9LAorCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHg4NiwgMHg1MiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4ODYsIDB4NTQsIH0sCiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3R1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYXJhbXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYXJhbXNbXSA9IHsKIAl7CiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfZm1kMTIxNm1lX21rM19wYWxfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFsX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDg2LAogCX0sCiB9OwogCkBAIC05ODIsOSArODc3LDkgQEAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9MR19URFZTX0gwNjJGIC0gSU5GSU5FT04gQVRTQyAtLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl90dWE2MDM0X250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDAxIH0sCi0JeyAxNiAqIDQ1NS4wMCAvKk1IeiovLCAweDAyIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA0IH0sCisJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweDhlLCAweDAxIH0sCisJeyAxNiAqIDQ1NS4wMCAvKk1IeiovLCAweDhlLCAweDAyIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDA0IH0sCiB9OwogCiAKQEAgLTk5Myw1MCArODg4LDUxIEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl90dWE2MDM0X250c2NfcmFuZ2VzLAogCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90dWE2MDM0X250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkYgLSBQaGlsaXBzIFBBTCAtLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl95bWVjX3R2ZjY2dDVfYl9kZmZfcGFsX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxNjAuMjUgLypNSHoqLywgMHgwMSwgfSwKLQl7IDE2ICogNDY0LjI1IC8qTUh6Ki8sIDB4MDIsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDA4LCB9LAotfTsKLQogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfeW1lY190dmY2NnQ1X2JfZGZmX3BhcmFtc1tdID0gewogCXsKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfUEFMLAotCQkucmFuZ2VzID0gdHVuZXJfeW1lY190dmY2NnQ1X2JfZGZmX3BhbF9yYW5nZXMsCi0JCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3ltZWNfdHZmNjZ0NV9iX2RmZl9wYWxfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4OGUsCisJCS5yYW5nZXMgPSB0dW5lcl90ZW5hXzk1MzNfZGlfcGFsX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVuYV85NTMzX2RpX3BhbF9yYW5nZXMpLAogCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfTEdfTlRTQ19UQUxOX01JTkkgLSBMR0lOTk9URUsgTlRTQyAtLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9sZ190YWxuX21pbmlfbnRzY19yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTM3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDM3My4yNSAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwOCwgfSwKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfbGdfdGFsbl9udHNjX3Jhbmdlc1tdID0geworCXsgMTYgKiAxMzcuMjUgLypNSHoqLywgMHg4ZSwgMHgwMSwgfSwKKwl7IDE2ICogMzczLjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDIsIH0sCisJeyAxNiAqIDk5OS45OSAgICAgICAgLCAweDhlLCAweDA4LCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfbGdfdGFsbl9taW5pX3BhcmFtc1tdID0geworc3RhdGljIHN0cnVjdCB0dW5lcl9yYW5nZSB0dW5lcl9sZ190YWxuX3BhbF9zZWNhbV9yYW5nZXNbXSA9IHsKKwl7IDE2ICogMTUwLjAwIC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDQyNS4wMCAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwOCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX2xnX3RhbG5fcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAotCQkucmFuZ2VzID0gdHVuZXJfbGdfdGFsbl9taW5pX250c2NfcmFuZ2VzLAotCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9sZ190YWxuX21pbmlfbnRzY19yYW5nZXMpLAotCQkuY29uZmlnID0gMHg4ZSwKKwkJLnJhbmdlcyA9IHR1bmVyX2xnX3RhbG5fbnRzY19yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3RhbG5fbnRzY19yYW5nZXMpLAorCX0seworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl9sZ190YWxuX3BhbF9zZWNhbV9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3RhbG5fcGFsX3NlY2FtX3JhbmdlcyksCiAJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9QSElMSVBTX1REMTMxNiAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3BoaWxpcHNfdGQxMzE2X3BhbF9yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4YTEsIH0sCi0JeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweGEyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHhhNCwgfSwKKwl7IDE2ICogMTYwLjAwIC8qTUh6Ki8sIDB4YzgsIDB4YTEsIH0sCisJeyAxNiAqIDQ0Mi4wMCAvKk1IeiovLCAweGM4LCAweGEyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHhjOCwgMHhhNCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3BoaWxpcHNfdGQxMzE2X3BhcmFtc1tdID0gewpAQCAtMTA0NCwzNCArOTQwLDQyIEBACiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKIAkJLnJhbmdlcyA9IHR1bmVyX3BoaWxpcHNfdGQxMzE2X3BhbF9yYW5nZXMsCiAJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfdGQxMzE2X3BhbF9yYW5nZXMpLAotCQkuY29uZmlnID0gMHhjOCwKIAl9LAogfTsKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1BISUxJUFNfVFVWMTIzNkQgLSBQaGlsaXBzIEFUU0MgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdHV2MTIzNmRfbnRzY19yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKKwl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4Y2UsIDB4MDEsIH0sCisJeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweGNlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHhjZSwgMHgwNCwgfSwKIH07CiAKIAotc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfdHVuZXJfdHV2MTIzNmRfcGFyYW1zW10gPSB7CitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90dXYxMjM2ZF9wYXJhbXNbXSA9IHsKIAl7CiAJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX05UU0MsCiAJCS5yYW5nZXMgPSB0dW5lcl90dXYxMjM2ZF9udHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdHV2MTIzNmRfbnRzY19yYW5nZXMpLAotCQkuY29uZmlnID0gMHhjZSwKIAl9LAogfTsKIAotLyogLS0tLS0tLS0tLS0tIFRVTkVSX1RORl81MzM1TUYgLSBQaGlsaXBzIE5UU0MgLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0gVFVORVJfVE5GX3h4eDUgIC0gVGV4YXMgSW5zdHJ1bWVudHMtLS0tLS0tLS0gKi8KKy8qIFRoaXMgaXMga25vd24gdG8gd29yayB3aXRoIFRlbm5hIFRWRjU4dDUtTUZGIGFuZCBUVkY1ODM1IE1GRgorICoJYnV0IGl0IGlzIGV4cGVjdGVkIHRvIHdvcmsgYWxzbyB3aXRoIG90aGVyIFRlbm5hL1ltZWMKKyAqCW1vZGVscyBiYXNlZCBvbiBUSSBTTiA3NjE2NzcgY2hpcCBvbiBib3RoIFBBTCBhbmQgTlRTQworICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdG5mXzUzMzVfZF9pZl9wYWxfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2OC4yNSAvKk1IeiovLCAweDhlLCAweDAxLCB9LAorCXsgMTYgKiA0NzEuMjUgLypNSHoqLywgMHg4ZSwgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDgsIH0sCit9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3RuZl81MzM1bWZfbnRzY19yYW5nZXNbXSA9IHsKLQl7IDE2ICogMTU3LjI1IC8qTUh6Ki8sIDB4MDEsIH0sCi0JeyAxNiAqIDQ1NC4wMCAvKk1IeiovLCAweDAyLCB9LAotCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHgwNCwgfSwKKwl7IDE2ICogMTY5LjI1IC8qTUh6Ki8sIDB4OGUsIDB4MDEsIH0sCisJeyAxNiAqIDQ2OS4yNSAvKk1IeiovLCAweDhlLCAweDAyLCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHg4ZSwgMHgwOCwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcGFyYW1zIHR1bmVyX3RuZl81MzM1bWZfcGFyYW1zW10gPSB7CkBAIC0xMDc5LDcgKzk4MywxMSBAQAogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9OVFNDLAogCQkucmFuZ2VzID0gdHVuZXJfdG5mXzUzMzVtZl9udHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdG5mXzUzMzVtZl9udHNjX3JhbmdlcyksCi0JCS5jb25maWcgPSAweDhlLAorCX0sCisJeworCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCisJCS5yYW5nZXMgPSB0dW5lcl90bmZfNTMzNV9kX2lmX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RuZl81MzM1X2RfaWZfcGFsX3JhbmdlcyksCiAJfSwKIH07CiAKQEAgLTEwODcsOSArOTk1LDkgQEAKIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9TQU1TVU5HX1RDUE5fMjEyMVAzMEEgLSBTYW1zdW5nIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfc2Ftc3VuZ190Y3BuXzIxMjFwMzBhX250c2NfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE3NS43NSAvKk1IeiovLCAweDAxLCB9LAotCXsgMTYgKiA0MTAuMjUgLypNSHoqLywgMHgwMiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4MDgsIH0sCisJeyAxNiAqIDEzMC4wMCAvKk1IeiovLCAweGNlLCAweDAxLCB9LAorCXsgMTYgKiAzNjQuNTAgLypNSHoqLywgMHhjZSwgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4Y2UsIDB4MDgsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9zYW1zdW5nX3RjcG5fMjEyMXAzMGFfcGFyYW1zW10gPSB7CkBAIC0xMDk3LDcgKzEwMDUsMjIgQEAKIAkJLnR5cGUgICA9IFRVTkVSX1BBUkFNX1RZUEVfTlRTQywKIAkJLnJhbmdlcyA9IHR1bmVyX3NhbXN1bmdfdGNwbl8yMTIxcDMwYV9udHNjX3JhbmdlcywKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfc2Ftc3VuZ190Y3BuXzIxMjFwMzBhX250c2NfcmFuZ2VzKSwKLQkJLmNvbmZpZyA9IDB4Y2UsCisJfSwKK307CisKKy8qIC0tLS0tLS0tLS0tLSBUVU5FUl9USE9NU09OX0ZFNjYwMCAtIERWaUNPIEh5YnJpZCBQQUwgLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgdHVuZXJfcmFuZ2UgdHVuZXJfdGhvbXNvbl9mZTY2MDBfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2MC4wMCAvKk1IeiovLCAweGZlLCAweDExLCB9LAorCXsgMTYgKiA0NDIuMDAgLypNSHoqLywgMHhmNiwgMHgxMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4ZjYsIDB4MTgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl90aG9tc29uX2ZlNjYwMF9wYXJhbXNbXSA9IHsKKwl7CisJCS50eXBlICAgPSBUVU5FUl9QQVJBTV9UWVBFX1BBTCwKKwkJLnJhbmdlcyA9IHR1bmVyX3Rob21zb25fZmU2NjAwX3JhbmdlcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGhvbXNvbl9mZTY2MDBfcmFuZ2VzKSwKIAl9LAogfTsKIApAQCAtMTEwOCwxOCArMTAzMSwyMiBAQAogCVtUVU5FUl9URU1JQ19QQUxdID0geyAvKiBURU1JQyBQQUwgKi8KIAkJLm5hbWUgICA9ICJUZW1pYyBQQUwgKDQwMDIgRkg1KSIsCiAJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY19wYWxfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY19wYWxfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9QSElMSVBTX1BBTF9JXSA9IHsgLyogUGhpbGlwcyBQQUxfSSAqLwogCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX0kgKEZJMTI0NiBhbmQgY29tcGF0aWJsZXMpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3BoaWxpcHNfcGFsX2lfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX3BhbF9pX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfUEhJTElQU19OVFNDXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCiAJCS5uYW1lICAgPSAiUGhpbGlwcyBOVFNDIChGSTEyMzYsRk0xMjM2IGFuZCBjb21wYXRpYmxlcykiLAogCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19udHNjX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19udHNjX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfUEhJTElQU19TRUNBTV0gPSB7IC8qIFBoaWxpcHMgU0VDQU0gKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIChTRUNBTStQQUxfQkcpIChGSTEyMTZNRiwgRk0xMjE2TUYsIEZSMTIxNk1GKSIsCiAJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX3NlY2FtX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19zZWNhbV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX0FCU0VOVF0gPSB7IC8qIFR1bmVyIEFic2VudCAqLwogCQkubmFtZSAgID0gIk5vVHVuZXIiLApAQCAtMTEyNywxMjAgKzEwNTQsMTQ4IEBACiAJW1RVTkVSX1BISUxJUFNfUEFMXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTF9CRyAoRkkxMjE2IGFuZCBjb21wYXRpYmxlcykiLAogCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19wYWxfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX3BhbF9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1RFTUlDX05UU0NdID0geyAvKiBURU1JQyBOVFNDICovCiAJCS5uYW1lICAgPSAiVGVtaWMgTlRTQyAoNDAzMiBGWTUpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3RlbWljX250c2NfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY19udHNjX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfVEVNSUNfUEFMX0ldID0geyAvKiBURU1JQyBQQUxfSSAqLwogCQkubmFtZSAgID0gIlRlbWljIFBBTF9JICg0MDYyIEZZNSkiLAogCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfcGFsX2lfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY19wYWxfaV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1RFTUlDXzQwMzZGWTVfTlRTQ10gPSB7IC8qIFRFTUlDIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJUZW1pYyBOVFNDICg0MDM2IEZZNSkiLAogCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDAzNmZ5NV9udHNjX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDAzNmZ5NV9udHNjX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfQUxQU19UU0JIMV9OVFNDXSA9IHsgLyogVEVNSUMgTlRTQyAqLwogCQkubmFtZSAgID0gIkFscHMgSFNCSDEiLAogCQkucGFyYW1zID0gdHVuZXJfYWxwc190c2JoMV9udHNjX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfYWxwc190c2JoMV9udHNjX3BhcmFtcyksCiAJfSwKIAogCS8qIDEwLTE5ICovCiAJW1RVTkVSX0FMUFNfVFNCRTFfUEFMXSA9IHsgLyogVEVNSUMgUEFMICovCiAJCS5uYW1lICAgPSAiQWxwcyBUU0JFMSIsCiAJCS5wYXJhbXMgPSB0dW5lcl9hbHBzX3RzYl8xX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfYWxwc190c2JfMV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX0FMUFNfVFNCQjVfUEFMX0ldID0geyAvKiBBbHBzIFBBTF9JICovCiAJCS5uYW1lICAgPSAiQWxwcyBUU0JCNSIsCiAJCS5wYXJhbXMgPSB0dW5lcl9hbHBzX3RzYmI1X3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfYWxwc190c2JiNV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX0FMUFNfVFNCRTVfUEFMXSA9IHsgLyogQWxwcyBQQUwgKi8KIAkJLm5hbWUgICA9ICJBbHBzIFRTQkU1IiwKIAkJLnBhcmFtcyA9IHR1bmVyX2FscHNfdHNiZTVfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9hbHBzX3RzYmU1X3BhcmFtcyksCiAJfSwKIAlbVFVORVJfQUxQU19UU0JDNV9QQUxdID0geyAvKiBBbHBzIFBBTCAqLwogCQkubmFtZSAgID0gIkFscHMgVFNCQzUiLAogCQkucGFyYW1zID0gdHVuZXJfYWxwc190c2JjNV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2FscHNfdHNiYzVfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9URU1JQ180MDA2Rkg1X1BBTF0gPSB7IC8qIFRFTUlDIFBBTCAqLwogCQkubmFtZSAgID0gIlRlbWljIFBBTF9CRyAoNDAwNkZINSkiLAogCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDAwNmZoNV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMDZmaDVfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9BTFBTX1RTSEM2X05UU0NdID0geyAvKiBBbHBzIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJBbHBzIFRTQ0g2IiwKIAkJLnBhcmFtcyA9IHR1bmVyX2FscHNfdHNoYzZfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9hbHBzX3RzaGM2X3BhcmFtcyksCiAJfSwKIAlbVFVORVJfVEVNSUNfUEFMX0RLXSA9IHsgLyogVEVNSUMgUEFMICovCiAJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0RLICg0MDE2IEZZNSkiLAogCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfcGFsX2RrX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfcGFsX2RrX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfUEhJTElQU19OVFNDX01dID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIE5UU0NfTSAoTUsyKSIsCiAJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX250c2NfbV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfbnRzY19tX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfVEVNSUNfNDA2NkZZNV9QQUxfSV0gPSB7IC8qIFRFTUlDIFBBTF9JICovCiAJCS5uYW1lICAgPSAiVGVtaWMgUEFMX0kgKDQwNjYgRlk1KSIsCiAJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY180MDY2Znk1X3BhbF9pX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDA2NmZ5NV9wYWxfaV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMXSA9IHsgLyogVEVNSUMgUEFMICovCiAJCS5uYW1lICAgPSAiVGVtaWMgUEFMKiBhdXRvICg0MDA2IEZONSkiLAogCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDAwNmZuNV9tdWx0aV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMDZmbjVfbXVsdGlfcGFyYW1zKSwKIAl9LAogCiAJLyogMjAtMjkgKi8KIAlbVFVORVJfVEVNSUNfNDAwOUZSNV9QQUxdID0geyAvKiBURU1JQyBQQUwgKi8KIAkJLm5hbWUgICA9ICJUZW1pYyBQQUxfQkcgKDQwMDkgRlI1KSBvciBQQUxfSSAoNDA2OSBGUjUpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3RlbWljXzQwMDlmXzVfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDA5Zl81X3BhcmFtcyksCiAJfSwKIAlbVFVORVJfVEVNSUNfNDAzOUZSNV9OVFNDXSA9IHsgLyogVEVNSUMgTlRTQyAqLwogCQkubmFtZSAgID0gIlRlbWljIE5UU0MgKDQwMzkgRlI1KSIsCiAJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY180MDM5ZnI1X3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDAzOWZyNV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1RFTUlDXzQwNDZGTTVdID0geyAvKiBURU1JQyBQQUwgKi8KIAkJLm5hbWUgICA9ICJUZW1pYyBQQUwvU0VDQU0gbXVsdGkgKDQwNDYgRk01KSIsCiAJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY180MDQ2Zm01X3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDA0NmZtNV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1BISUxJUFNfUEFMX0RLXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTF9ESyAoRkkxMjU2IGFuZCBjb21wYXRpYmxlcykiLAogCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19wYWxfZGtfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX3BhbF9ka19wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1BISUxJUFNfRlExMjE2TUVdID0geyAvKiBQaGlsaXBzIFBBTCAqLwogCQkubmFtZSAgID0gIlBoaWxpcHMgUEFML1NFQ0FNIG11bHRpIChGUTEyMTZNRSkiLAogCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19mcTEyMTZtZV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZnExMjE2bWVfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9MR19QQUxfSV9GTV0gPSB7IC8qIExHSU5OT1RFSyBQQUxfSSAqLwogCQkubmFtZSAgID0gIkxHIFBBTF9JK0ZNIChUQVBDLUkwMDFEKSIsCiAJCS5wYXJhbXMgPSB0dW5lcl9sZ19wYWxfaV9mbV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3BhbF9pX2ZtX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfTEdfUEFMX0ldID0geyAvKiBMR0lOTk9URUsgUEFMX0kgKi8KIAkJLm5hbWUgICA9ICJMRyBQQUxfSSAoVEFQQy1JNzAxRCkiLAogCQkucGFyYW1zID0gdHVuZXJfbGdfcGFsX2lfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9sZ19wYWxfaV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX0xHX05UU0NfRk1dID0geyAvKiBMR0lOTk9URUsgTlRTQyAqLwogCQkubmFtZSAgID0gIkxHIE5UU0MrRk0gKFRQSThOU1IwMUYpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX2xnX250c2NfZm1fcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9sZ19udHNjX2ZtX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfTEdfUEFMX0ZNXSA9IHsgLyogTEdJTk5PVEVLIFBBTCAqLwogCQkubmFtZSAgID0gIkxHIFBBTF9CRytGTSAoVFBJOFBTQjAxRCkiLAogCQkucGFyYW1zID0gdHVuZXJfbGdfcGFsX2ZtX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX2ZtX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfTEdfUEFMXSA9IHsgLyogTEdJTk5PVEVLIFBBTCAqLwogCQkubmFtZSAgID0gIkxHIFBBTF9CRyAoVFBJOFBTQjExRCkiLAogCQkucGFyYW1zID0gdHVuZXJfbGdfcGFsX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfcGFsX3BhcmFtcyksCiAJfSwKIAogCS8qIDMwLTM5ICovCiAJW1RVTkVSX1RFTUlDXzQwMDlGTjVfTVVMVElfUEFMX0ZNXSA9IHsgLyogVEVNSUMgUEFMICovCiAJCS5uYW1lICAgPSAiVGVtaWMgUEFMKiBhdXRvICsgRk0gKDQwMDkgRk41KSIsCiAJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY180MDA5X2ZuNV9tdWx0aV9wYWxfZm1fcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MDA5X2ZuNV9tdWx0aV9wYWxfZm1fcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9TSEFSUF8yVTVKRjU1NDBfTlRTQ10gPSB7IC8qIFNIQVJQIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJTSEFSUCBOVFNDX0pQICgyVTVKRjU1NDApIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3NoYXJwXzJ1NWpmNTU0MF9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3NoYXJwXzJ1NWpmNTU0MF9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1NhbXN1bmdfUEFMX1RDUE05MDkxUEQyN10gPSB7IC8qIFNhbXN1bmcgUEFMICovCiAJCS5uYW1lICAgPSAiU2Ftc3VuZyBQQUwgVENQTTkwOTFQRDI3IiwKIAkJLnBhcmFtcyA9IHR1bmVyX3NhbXN1bmdfcGFsX3RjcG05MDkxcGQyN19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3NhbXN1bmdfcGFsX3RjcG05MDkxcGQyN19wYXJhbXMpLAogCX0sCiAJW1RVTkVSX01UMjAzMl0gPSB7IC8qIE1pY3JvdHVuZSBQQUx8TlRTQyAqLwogCQkubmFtZSAgID0gIk1UMjB4eCB1bml2ZXJzYWwiLApAQCAtMTI0OCw4NiArMTIwMywxMDYgQEAKIAlbVFVORVJfVEVNSUNfNDEwNkZINV0gPSB7IC8qIFRFTUlDIFBBTCAqLwogCQkubmFtZSAgID0gIlRlbWljIFBBTF9CRyAoNDEwNiBGSDUpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3RlbWljXzQxMDZmaDVfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90ZW1pY180MTA2Zmg1X3BhcmFtcyksCiAJfSwKIAlbVFVORVJfVEVNSUNfNDAxMkZZNV0gPSB7IC8qIFRFTUlDIFBBTCAqLwogCQkubmFtZSAgID0gIlRlbWljIFBBTF9ESy9TRUNBTV9MICg0MDEyIEZZNSkiLAogCQkucGFyYW1zID0gdHVuZXJfdGVtaWNfNDAxMmZ5NV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQwMTJmeTVfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9URU1JQ180MTM2Rlk1XSA9IHsgLyogVEVNSUMgTlRTQyAqLwogCQkubmFtZSAgID0gIlRlbWljIE5UU0MgKDQxMzYgRlk1KSIsCiAJCS5wYXJhbXMgPSB0dW5lcl90ZW1pY180MTM2X2Z5NV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbWljXzQxMzZfZnk1X3BhcmFtcyksCiAJfSwKIAlbVFVORVJfTEdfUEFMX05FV19UQVBDXSA9IHsgLyogTEdJTk5PVEVLIFBBTCAqLwogCQkubmFtZSAgID0gIkxHIFBBTCAobmV3ZXIgVEFQQyBzZXJpZXMpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX2xnX3BhbF9uZXdfdGFwY19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3BhbF9uZXdfdGFwY19wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTSBtdWx0aSAoRk0xMjE2TUUgTUszKSIsCiAJCS5wYXJhbXMgPSB0dW5lcl9mbTEyMTZtZV9tazNfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9mbTEyMTZtZV9tazNfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9MR19OVFNDX05FV19UQVBDXSA9IHsgLyogTEdJTk5PVEVLIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJMRyBOVFNDIChuZXdlciBUQVBDIHNlcmllcykiLAogCQkucGFyYW1zID0gdHVuZXJfbGdfbnRzY19uZXdfdGFwY19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX250c2NfbmV3X3RhcGNfcGFyYW1zKSwKIAl9LAogCiAJLyogNDAtNDkgKi8KIAlbVFVORVJfSElUQUNISV9OVFNDXSA9IHsgLyogSElUQUNISSBOVFNDICovCiAJCS5uYW1lICAgPSAiSElUQUNISSBWNy1KMTgwQVQiLAogCQkucGFyYW1zID0gdHVuZXJfaGl0YWNoaV9udHNjX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfaGl0YWNoaV9udHNjX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfUEhJTElQU19QQUxfTUtdID0geyAvKiBQaGlsaXBzIFBBTCAqLwogCQkubmFtZSAgID0gIlBoaWxpcHMgUEFMX01LIChGSTEyMTYgTUspIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3BoaWxpcHNfcGFsX21rX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19wYWxfbWtfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9QSElMSVBTX0FUU0NdID0geyAvKiBQaGlsaXBzIEFUU0MgKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIDEyMzZEIEFUU0MvTlRTQyBkdWFsIGluIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3BoaWxpcHNfYXRzY19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfYXRzY19wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1BISUxJUFNfRk0xMjM2X01LM10gPSB7IC8qIFBoaWxpcHMgTlRTQyAqLwogCQkubmFtZSAgID0gIlBoaWxpcHMgTlRTQyBNSzMgKEZNMTIzNk1LMyBvciBGTTEyMzYvRikiLAogCQkucGFyYW1zID0gdHVuZXJfZm0xMjM2X21rM19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2ZtMTIzNl9tazNfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9QSElMSVBTXzRJTjFdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIDQgaW4gMSAoQVRJIFRWIFdvbmRlciBQcm8vQ29uZXhhbnQpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3BoaWxpcHNfNGluMV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfNGluMV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX01JQ1JPVFVORV80MDQ5Rk01XSA9IHsgLyogTWljcm90dW5lIFBBTCAqLwogCQkubmFtZSAgID0gIk1pY3JvdHVuZSA0MDQ5IEZNNSIsCiAJCS5wYXJhbXMgPSB0dW5lcl9taWNyb3R1bmVfNDA0OV9mbTVfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9taWNyb3R1bmVfNDA0OV9mbTVfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9QQU5BU09OSUNfVlAyN10gPSB7IC8qIFBhbmFzb25pYyBOVFNDICovCiAJCS5uYW1lICAgPSAiUGFuYXNvbmljIFZQMjdzL0VOR0U0MzI0RCIsCiAJCS5wYXJhbXMgPSB0dW5lcl9wYW5hc29uaWNfdnAyN19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BhbmFzb25pY192cDI3X3BhcmFtcyksCiAJfSwKIAlbVFVORVJfTEdfTlRTQ19UQVBFXSA9IHsgLyogTEdJTk5PVEVLIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJMRyBOVFNDIChUQVBFIHNlcmllcykiLAogCQkucGFyYW1zID0gdHVuZXJfbGdfbnRzY190YXBlX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbGdfbnRzY190YXBlX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfVE5GXzg4MzFCR0ZGXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KIAkJLm5hbWUgICA9ICJUZW5uYSBUTkYgODgzMSBCR0ZGKSIsCiAJCS5wYXJhbXMgPSB0dW5lcl90bmZfODgzMWJnZmZfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90bmZfODgzMWJnZmZfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9NSUNST1RVTkVfNDA0MkZJNV0gPSB7IC8qIE1pY3JvdHVuZSBOVFNDICovCiAJCS5uYW1lICAgPSAiTWljcm90dW5lIDQwNDIgRkk1IEFUU0MvTlRTQyBkdWFsIGluIiwKIAkJLnBhcmFtcyA9IHR1bmVyX21pY3JvdHVuZV80MDQyZmk1X3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfbWljcm90dW5lXzQwNDJmaTVfcGFyYW1zKSwKIAl9LAogCiAJLyogNTAtNTkgKi8KIAlbVFVORVJfVENMXzIwMDJOXSA9IHsgLyogVENMIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJUQ0wgMjAwMk4iLAogCQkucGFyYW1zID0gdHVuZXJfdGNsXzIwMDJuX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGNsXzIwMDJuX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfUEhJTElQU19GTTEyNTZfSUgzXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIFBBTC9TRUNBTV9EIChGTSAxMjU2IEktSDMpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3BoaWxpcHNfZm0xMjU2X2loM19wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZm0xMjU2X2loM19wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1RIT01TT05fRFRUNzYxMF0gPSB7IC8qIFRIT01TT04gQVRTQyAqLwogCQkubmFtZSAgID0gIlRob21zb24gRFRUIDc2MTAgKEFUU0MvTlRTQykiLAogCQkucGFyYW1zID0gdHVuZXJfdGhvbXNvbl9kdHQ3NjEwX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGhvbXNvbl9kdHQ3NjEwX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfUEhJTElQU19GUTEyODZdID0geyAvKiBQaGlsaXBzIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJQaGlsaXBzIEZRMTI4NiIsCiAJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2ZxMTI4Nl9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3BoaWxpcHNfZnExMjg2X3BhcmFtcyksCiAJfSwKIAlbVFVORVJfUEhJTElQU19UREE4MjkwXSA9IHsgLyogUGhpbGlwcyBQQUx8TlRTQyAqLwogCQkubmFtZSAgID0gInRkYTgyOTArNzUiLApAQCAtMTMzNSwyMiArMTMxMCwyNyBAQAogCVtUVU5FUl9UQ0xfMjAwMk1CXSA9IHsgLyogVENMIFBBTCAqLwogCQkubmFtZSAgID0gIlRDTCAyMDAyTUIiLAogCQkucGFyYW1zID0gdHVuZXJfdGNsXzIwMDJtYl9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RjbF8yMDAybWJfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9QSElMSVBTX0ZRMTIxNkFNRV9NSzRdID0geyAvKiBQaGlsaXBzIFBBTCAqLwogCQkubmFtZSAgID0gIlBoaWxpcHMgUEFML1NFQ0FNIG11bHRpIChGUTEyMTZBTUUgTUs0KSIsCiAJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2ZxMTIxNmFtZV9tazRfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl9waGlsaXBzX2ZxMTIxNmFtZV9tazRfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9QSElMSVBTX0ZRMTIzNkFfTUs0XSA9IHsgLyogUGhpbGlwcyBOVFNDICovCiAJCS5uYW1lICAgPSAiUGhpbGlwcyBGUTEyMzZBIE1LNCIsCiAJCS5wYXJhbXMgPSB0dW5lcl9waGlsaXBzX2ZxMTIzNmFfbWs0X3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mcTEyMzZhX21rNF9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1lNRUNfVFZGXzg1MzFNRl0gPSB7IC8qIFBoaWxpcHMgTlRTQyAqLwogCQkubmFtZSAgID0gIlltZWMgVFZpc2lvbiBUVkYtODUzMU1GLzg4MzFNRi84NzMxTUYiLAogCQkucGFyYW1zID0gdHVuZXJfeW1lY190dmZfODUzMW1mX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfeW1lY190dmZfODUzMW1mX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfWU1FQ19UVkZfNTUzM01GXSA9IHsgLyogUGhpbGlwcyBOVFNDICovCiAJCS5uYW1lICAgPSAiWW1lYyBUVmlzaW9uIFRWRi01NTMzTUYiLAogCQkucGFyYW1zID0gdHVuZXJfeW1lY190dmZfNTUzM21mX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfeW1lY190dmZfNTUzM21mX3BhcmFtcyksCiAJfSwKIAogCS8qIDYwLTY5ICovCkBAIC0xMzU4LDEwICsxMzM4LDEyIEBACiAJCS8qIERUVCA3NjExIDc2MTFBIDc2MTIgNzYxMyA3NjEzQSA3NjE0IDc2MTUgNzYxNUEgKi8KIAkJLm5hbWUgICA9ICJUaG9tc29uIERUVCA3NjFYIChBVFNDL05UU0MpIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3Rob21zb25fZHR0NzYxeF9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3Rob21zb25fZHR0NzYxeF9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1RFTkFfOTUzM19ESV0gPSB7IC8qIFBoaWxpcHMgUEFMICovCiAJCS5uYW1lICAgPSAiVGVuYSBUTkY5NTMzLUQvSUYvVE5GOTUzMy1CL0RGIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3RlbmFfOTUzM19kaV9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3RlbmFfOTUzM19kaV9wYXJhbXMpLAogCX0sCiAJW1RVTkVSX1RFQTU3NjddID0geyAvKiBQaGlsaXBzIFJBRElPICovCiAJCS5uYW1lICAgPSAiUGhpbGlwcyBURUE1NzY3SE4gRk0gUmFkaW8iLApAQCAtMTM2OSwzNyArMTM1MSw1NCBAQAogCX0sCiAJW1RVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LM10gPSB7IC8qIFBoaWxpcHMgUEFMICovCiAJCS5uYW1lICAgPSAiUGhpbGlwcyBGTUQxMjE2TUUgTUszIEh5YnJpZCBUdW5lciIsCi0JCS5wYXJhbXMgPSB0dW5lcl90dW5lcl9waGlsaXBzX2ZtZDEyMTZtZV9tazNfcGFyYW1zLAorCQkucGFyYW1zID0gdHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc19mbWQxMjE2bWVfbWszX3BhcmFtcyksCiAJfSwKIAlbVFVORVJfTEdfVERWU19IMDYyRl0gPSB7IC8qIExHSU5OT1RFSyBBVFNDICovCiAJCS5uYW1lICAgPSAiTEcgVERWUy1IMDYyRi9UVUE2MDM0IiwKIAkJLnBhcmFtcyA9IHR1bmVyX3R1YTYwMzRfcGFyYW1zLAorCQkuY291bnQgID0gQVJSQVlfU0laRSh0dW5lcl90dWE2MDM0X3BhcmFtcyksCiAJfSwKIAlbVFVORVJfWU1FQ19UVkY2NlQ1X0JfREZGXSA9IHsgLyogUGhpbGlwcyBQQUwgKi8KIAkJLm5hbWUgICA9ICJZbWVjIFRWRjY2VDUtQi9ERkYiLAogCQkucGFyYW1zID0gdHVuZXJfeW1lY190dmY2NnQ1X2JfZGZmX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfeW1lY190dmY2NnQ1X2JfZGZmX3BhcmFtcyksCiAJfSwKLQlbVFVORVJfTEdfTlRTQ19UQUxOX01JTkldID0geyAvKiBMR0lOTk9URUsgTlRTQyAqLwotCQkubmFtZSAgID0gIkxHIE5UU0MgKFRBTE4gbWluaSBzZXJpZXMpIiwKLQkJLnBhcmFtcyA9IHR1bmVyX2xnX3RhbG5fbWluaV9wYXJhbXMsCisJW1RVTkVSX0xHX1RBTE5dID0geyAvKiBMR0lOTk9URUsgTlRTQyAvIFBBTCAvIFNFQ0FNICovCisJCS5uYW1lICAgPSAiTEcgVEFMTiBzZXJpZXMiLAorCQkucGFyYW1zID0gdHVuZXJfbGdfdGFsbl9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX2xnX3RhbG5fcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9QSElMSVBTX1REMTMxNl0gPSB7IC8qIFBoaWxpcHMgUEFMICovCiAJCS5uYW1lICAgPSAiUGhpbGlwcyBURDEzMTYgSHlicmlkIFR1bmVyIiwKIAkJLnBhcmFtcyA9IHR1bmVyX3BoaWxpcHNfdGQxMzE2X3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfcGhpbGlwc190ZDEzMTZfcGFyYW1zKSwKIAl9LAogCVtUVU5FUl9QSElMSVBTX1RVVjEyMzZEXSA9IHsgLyogUGhpbGlwcyBBVFNDICovCiAJCS5uYW1lICAgPSAiUGhpbGlwcyBUVVYxMjM2RCBBVFNDL05UU0MgZHVhbCBpbiIsCi0JCS5wYXJhbXMgPSB0dW5lcl90dW5lcl90dXYxMjM2ZF9wYXJhbXMsCisJCS5wYXJhbXMgPSB0dW5lcl90dXYxMjM2ZF9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3R1djEyMzZkX3BhcmFtcyksCiAJfSwKLQlbVFVORVJfVE5GXzUzMzVNRl0gPSB7IC8qIFBoaWxpcHMgTlRTQyAqLwotCQkubmFtZSAgID0gIlRlbmEgVE5GIDUzMzUgTUYiLAorCVtUVU5FUl9UTkZfNTMzNU1GXSA9IHsgLyogVGVubmEgUEFML05UU0MgKi8KKwkJLm5hbWUgICA9ICJUZW5hIFRORiA1MzM1IGFuZCBzaW1pbGFyIG1vZGVscyIsCiAJCS5wYXJhbXMgPSB0dW5lcl90bmZfNTMzNW1mX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdG5mXzUzMzVtZl9wYXJhbXMpLAogCX0sCiAKIAkvKiA3MC03OSAqLwogCVtUVU5FUl9TQU1TVU5HX1RDUE5fMjEyMVAzMEFdID0geyAvKiBTYW1zdW5nIE5UU0MgKi8KIAkJLm5hbWUgICA9ICJTYW1zdW5nIFRDUE4gMjEyMVAzMEEiLAogCQkucGFyYW1zID0gdHVuZXJfc2Ftc3VuZ190Y3BuXzIxMjFwMzBhX3BhcmFtcywKKwkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfc2Ftc3VuZ190Y3BuXzIxMjFwMzBhX3BhcmFtcyksCisJfSwKKwlbVFVORVJfWENFSVZFX1hDMzAyOF0gPSB7IC8qIFhjZWl2ZSAzMDI4ICovCisJCS5uYW1lCT0gIlhjZWl2ZSB4YzMwMjgiLAorCQkvKiBzZWUgeGMzMDI4LmMgZm9yIGRldGFpbHMgKi8KKwl9LAorCVtUVU5FUl9USE9NU09OX0ZFNjYwMF0gPSB7IC8qIFRob21zb24gUEFMIC8gRFZCLVQgKi8KKwkJLm5hbWUgICA9ICJUaG9tc29uIEZFNjYwMCIsCisJCS5wYXJhbXMgPSB0dW5lcl90aG9tc29uX2ZlNjYwMF9wYXJhbXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3Rob21zb25fZmU2NjAwX3BhcmFtcyksCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKaW5kZXggYzhlNWFkMC4uMzU2YmZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKQEAgLTMwLDEwICszMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCi0jaW5jbHVkZSA8bWVkaWEvYXVkaW9jaGlwLmg+CisjaW5jbHVkZSA8bWVkaWEvdHZhdWRpby5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKLSNpbmNsdWRlICJ0dmF1ZGlvLmgiCisjaW5jbHVkZSA8bWVkaWEvaTJjLWFkZHIuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogaW5zbW9kIGFyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTAyLDcgKzEwMiw3IEBACiAKIAkvKiBpbnB1dCBzd2l0Y2ggcmVnaXN0ZXIgKyB2YWx1ZXMgZm9yIHY0bCBpbnB1dHMgKi8KIAlpbnQgIGlucHV0cmVnOwotCWludCAgaW5wdXRtYXBbOF07CisJaW50ICBpbnB1dG1hcFs0XTsKIAlpbnQgIGlucHV0bXV0ZTsKIAlpbnQgIGlucHV0bWFzazsKIH07CkBAIC0xMTksOSArMTE5LDEwIEBACiAJYXVkaW9jbWQgICBzaGFkb3c7CiAKIAkvKiBjdXJyZW50IHNldHRpbmdzICovCi0JX191MTYgbGVmdCxyaWdodCx0cmVibGUsYmFzcyxtb2RlOworCV9fdTE2IGxlZnQscmlnaHQsdHJlYmxlLGJhc3MsbXV0ZWQsbW9kZTsKIAlpbnQgcHJldm1vZGU7CiAJaW50IHJhZGlvOworCWludCBpbnB1dDsKIAogCS8qIHRocmVhZCAqLwogCXBpZF90ICAgICAgICAgICAgICAgIHRwaWQ7CkBAIC0xMzAsMjAgKzEzMSwyMSBAQAogCXN0cnVjdCB0aW1lcl9saXN0ICAgIHd0OwogCWludCAgICAgICAgICAgICAgICAgIGRvbmU7CiAJaW50ICAgICAgICAgICAgICAgICAgd2F0Y2hfc3RlcmVvOworCWludCAJCSAgICAgYXVkbW9kZTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGkyYyBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfVERBODQyNSAgID4+IDEsCi0JSTJDX1RFQTYzMDAgICA+PiAxLAotCUkyQ19URUE2NDIwICAgPj4gMSwKLQlJMkNfVERBOTg0MCAgID4+IDEsCi0JSTJDX1REQTk4NXhfTCA+PiAxLAotCUkyQ19UREE5ODV4X0ggPj4gMSwKLQlJMkNfVERBOTg3NCAgID4+IDEsCi0JSTJDX1BJQzE2QzU0ICA+PiAxLAorCUkyQ19BRERSX1REQTg0MjUgICA+PiAxLAorCUkyQ19BRERSX1RFQTYzMDAgICA+PiAxLAorCUkyQ19BRERSX1RFQTY0MjAgICA+PiAxLAorCUkyQ19BRERSX1REQTk4NDAgICA+PiAxLAorCUkyQ19BRERSX1REQTk4NXhfTCA+PiAxLAorCUkyQ19BRERSX1REQTk4NXhfSCA+PiAxLAorCUkyQ19BRERSX1REQTk4NzQgICA+PiAxLAorCUkyQ19BRERSX1BJQzE2QzU0ICA+PiAxLAogCUkyQ19DTElFTlRfRU5EIH07CiBJMkNfQ0xJRU5UX0lOU01PRDsKIApAQCAtMTEwMCw5ICsxMTAyLDggQEAKIHN0YXRpYyBpbnQgdGRhODQyNV9pbml0aWFsaXplKHN0cnVjdCBDSElQU1RBVEUgKmNoaXApCiB7CiAJc3RydWN0IENISVBERVNDICpkZXNjID0gY2hpcGxpc3QgKyBjaGlwLT50eXBlOwotCWludCBpbnB1dG1hcFs4XSA9IHsgLyogdHVuZXIJKi8gVERBODQyNV9TMV9DSDIsIC8qIHJhZGlvICAqLyBUREE4NDI1X1MxX0NIMSwKLQkJCSAgICAvKiBleHRlcm4JKi8gVERBODQyNV9TMV9DSDEsIC8qIGludGVybiAqLyBUREE4NDI1X1MxX09GRiwKLQkJCSAgICAvKiBvZmYJKi8gVERBODQyNV9TMV9PRkYsIC8qIG9uICAgICAqLyBUREE4NDI1X1MxX0NIMn07CisJaW50IGlucHV0bWFwWzRdID0geyAvKiB0dW5lcgkqLyBUREE4NDI1X1MxX0NIMiwgLyogcmFkaW8gICovIFREQTg0MjVfUzFfQ0gxLAorCQkJICAgIC8qIGV4dGVybgkqLyBUREE4NDI1X1MxX0NIMSwgLyogaW50ZXJuICovIFREQTg0MjVfUzFfT0ZGfTsKIAogCWlmIChjaGlwLT5jLmFkYXB0ZXItPmlkID09IEkyQ19IV19CX1JJVkEpIHsKIAkJbWVtY3B5IChkZXNjLT5pbnB1dG1hcCwgaW5wdXRtYXAsIHNpemVvZiAoaW5wdXRtYXApKTsKQEAgLTEyNjgsOCArMTI2OSw4IEBACiAJCS5uYW1lICAgICAgID0gInRkYTk4NDAiLAogCQkuaWQgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODQwLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZGE5ODQwLAotCQkuYWRkcl9sbyAgICA9IEkyQ19UREE5ODQwID4+IDEsCi0JCS5hZGRyX2hpICAgID0gSTJDX1REQTk4NDAgPj4gMSwKKwkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE5ODQwID4+IDEsCisJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVERBOTg0MCA+PiAxLAogCQkucmVnaXN0ZXJzICA9IDUsCiAKIAkJLmNoZWNraXQgICAgPSB0ZGE5ODQwX2NoZWNraXQsCkBAIC0xMjg1LDggKzEyODYsOCBAQAogCQkuaWQgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODczLAogCQkuY2hlY2tpdCAgICA9IHRkYTk4NzNfY2hlY2tpdCwKIAkJLmluc21vZG9wdCAgPSAmdGRhOTg3MywKLQkJLmFkZHJfbG8gICAgPSBJMkNfVERBOTg1eF9MID4+IDEsCi0JCS5hZGRyX2hpICAgID0gSTJDX1REQTk4NXhfSCA+PiAxLAorCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1REQTk4NXhfTCA+PiAxLAorCQkuYWRkcl9oaSAgICA9IEkyQ19BRERSX1REQTk4NXhfSCA+PiAxLAogCQkucmVnaXN0ZXJzICA9IDMsCiAJCS5mbGFncyAgICAgID0gQ0hJUF9IQVNfSU5QVVRTRUwsCiAKQEAgLTEyOTcsNyArMTI5OCw3IEBACiAJCS5pbml0ICAgICAgID0geyA0LCB7IFREQTk4NzNfU1csIDB4YTQsIDB4MDYsIDB4MDMgfSB9LAogCQkuaW5wdXRyZWcgICA9IFREQTk4NzNfU1csCiAJCS5pbnB1dG11dGUgID0gVERBOTg3M19NVVRFIHwgVERBOTg3M19BVVRPTVVURSwKLQkJLmlucHV0bWFwICAgPSB7MHhhMCwgMHhhMiwgMHhhMCwgMHhhMCwgMHhjMH0sCisJCS5pbnB1dG1hcCAgID0gezB4YTAsIDB4YTIsIDB4YTAsIDB4YTB9LAogCQkuaW5wdXRtYXNrICA9IFREQTk4NzNfSU5QX01BU0t8VERBOTg3M19NVVRFfFREQTk4NzNfQVVUT01VVEUsCiAKIAl9LApAQCAtMTMwNyw4ICsxMzA4LDggQEAKIAkJLmNoZWNraXQgICAgPSB0ZGE5ODc0YV9jaGVja2l0LAogCQkuaW5pdGlhbGl6ZSA9IHRkYTk4NzRhX2luaXRpYWxpemUsCiAJCS5pbnNtb2RvcHQgID0gJnRkYTk4NzRhLAotCQkuYWRkcl9sbyAgICA9IEkyQ19UREE5ODc0ID4+IDEsCi0JCS5hZGRyX2hpICAgID0gSTJDX1REQTk4NzQgPj4gMSwKKwkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE5ODc0ID4+IDEsCisJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVERBOTg3NCA+PiAxLAogCiAJCS5nZXRtb2RlICAgID0gdGRhOTg3NGFfZ2V0bW9kZSwKIAkJLnNldG1vZGUgICAgPSB0ZGE5ODc0YV9zZXRtb2RlLApAQCAtMTMxOCw4ICsxMzE5LDggQEAKIAkJLm5hbWUgICAgICAgPSAidGRhOTg1MCIsCiAJCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1REQTk4NTAsCiAJCS5pbnNtb2RvcHQgID0gJnRkYTk4NTAsCi0JCS5hZGRyX2xvICAgID0gSTJDX1REQTk4NXhfTCA+PiAxLAotCQkuYWRkcl9oaSAgICA9IEkyQ19UREE5ODV4X0ggPj4gMSwKKwkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE5ODV4X0wgPj4gMSwKKwkJLmFkZHJfaGkgICAgPSBJMkNfQUREUl9UREE5ODV4X0ggPj4gMSwKIAkJLnJlZ2lzdGVycyAgPSAxMSwKIAogCQkuZ2V0bW9kZSAgICA9IHRkYTk4NXhfZ2V0bW9kZSwKQEAgLTEzMzEsOCArMTMzMiw4IEBACiAJCS5uYW1lICAgICAgID0gInRkYTk4NTUiLAogCQkuaWQgICAgICAgICA9IEkyQ19EUklWRVJJRF9UREE5ODU1LAogCQkuaW5zbW9kb3B0ICA9ICZ0ZGE5ODU1LAotCQkuYWRkcl9sbyAgICA9IEkyQ19UREE5ODV4X0wgPj4gMSwKLQkJLmFkZHJfaGkgICAgPSBJMkNfVERBOTg1eF9IID4+IDEsCisJCS5hZGRyX2xvICAgID0gSTJDX0FERFJfVERBOTg1eF9MID4+IDEsCisJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVERBOTg1eF9IID4+IDEsCiAJCS5yZWdpc3RlcnMgID0gMTEsCiAJCS5mbGFncyAgICAgID0gQ0hJUF9IQVNfVk9MVU1FIHwgQ0hJUF9IQVNfQkFTU1RSRUJMRSwKIApAQCAtMTM1Niw4ICsxMzU3LDggQEAKIAkJLm5hbWUgICAgICAgPSAidGVhNjMwMCIsCiAJCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1RFQTYzMDAsCiAJCS5pbnNtb2RvcHQgID0gJnRlYTYzMDAsCi0JCS5hZGRyX2xvICAgID0gSTJDX1RFQTYzMDAgPj4gMSwKLQkJLmFkZHJfaGkgICAgPSBJMkNfVEVBNjMwMCA+PiAxLAorCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1RFQTYzMDAgPj4gMSwKKwkJLmFkZHJfaGkgICAgPSBJMkNfQUREUl9URUE2MzAwID4+IDEsCiAJCS5yZWdpc3RlcnMgID0gNiwKIAkJLmZsYWdzICAgICAgPSBDSElQX0hBU19WT0xVTUUgfCBDSElQX0hBU19CQVNTVFJFQkxFIHwgQ0hJUF9IQVNfSU5QVVRTRUwsCiAKQEAgLTEzNzgsOCArMTM3OSw4IEBACiAJCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1RFQTYzMDAsCiAJCS5pbml0aWFsaXplID0gdGVhNjMyMF9pbml0aWFsaXplLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZWE2MzIwLAotCQkuYWRkcl9sbyAgICA9IEkyQ19URUE2MzAwID4+IDEsCi0JCS5hZGRyX2hpICAgID0gSTJDX1RFQTYzMDAgPj4gMSwKKwkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9URUE2MzAwID4+IDEsCisJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVEVBNjMwMCA+PiAxLAogCQkucmVnaXN0ZXJzICA9IDgsCiAJCS5mbGFncyAgICAgID0gQ0hJUF9IQVNfVk9MVU1FIHwgQ0hJUF9IQVNfQkFTU1RSRUJMRSB8IENISVBfSEFTX0lOUFVUU0VMLAogCkBAIC0xMzk5LDggKzE0MDAsOCBAQAogCQkubmFtZSAgICAgICA9ICJ0ZWE2NDIwIiwKIAkJLmlkICAgICAgICAgPSBJMkNfRFJJVkVSSURfVEVBNjQyMCwKIAkJLmluc21vZG9wdCAgPSAmdGVhNjQyMCwKLQkJLmFkZHJfbG8gICAgPSBJMkNfVEVBNjQyMCA+PiAxLAotCQkuYWRkcl9oaSAgICA9IEkyQ19URUE2NDIwID4+IDEsCisJCS5hZGRyX2xvICAgID0gSTJDX0FERFJfVEVBNjQyMCA+PiAxLAorCQkuYWRkcl9oaSAgICA9IEkyQ19BRERSX1RFQTY0MjAgPj4gMSwKIAkJLnJlZ2lzdGVycyAgPSAxLAogCQkuZmxhZ3MgICAgICA9IENISVBfSEFTX0lOUFVUU0VMLAogCkBAIC0xNDEyLDggKzE0MTMsOCBAQAogCQkubmFtZSAgICAgICA9ICJ0ZGE4NDI1IiwKIAkJLmlkICAgICAgICAgPSBJMkNfRFJJVkVSSURfVERBODQyNSwKIAkJLmluc21vZG9wdCAgPSAmdGRhODQyNSwKLQkJLmFkZHJfbG8gICAgPSBJMkNfVERBODQyNSA+PiAxLAotCQkuYWRkcl9oaSAgICA9IEkyQ19UREE4NDI1ID4+IDEsCisJCS5hZGRyX2xvICAgID0gSTJDX0FERFJfVERBODQyNSA+PiAxLAorCQkuYWRkcl9oaSAgICA9IEkyQ19BRERSX1REQTg0MjUgPj4gMSwKIAkJLnJlZ2lzdGVycyAgPSA5LAogCQkuZmxhZ3MgICAgICA9IENISVBfSEFTX1ZPTFVNRSB8IENISVBfSEFTX0JBU1NUUkVCTEUgfCBDSElQX0hBU19JTlBVVFNFTCwKIApAQCAtMTQzNiw4ICsxNDM3LDggQEAKIAkJLm5hbWUgICAgICAgPSAicGljMTZjNTQgKFBWOTUxKSIsCiAJCS5pZCAgICAgICAgID0gSTJDX0RSSVZFUklEX1BJQzE2QzU0X1BWOSwKIAkJLmluc21vZG9wdCAgPSAmcGljMTZjNTQsCi0JCS5hZGRyX2xvICAgID0gSTJDX1BJQzE2QzU0ID4+IDEsCi0JCS5hZGRyX2hpICAgID0gSTJDX1BJQzE2QzU0Pj4gMSwKKwkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9QSUMxNkM1NCA+PiAxLAorCQkuYWRkcl9oaSAgICA9IEkyQ19BRERSX1BJQzE2QzU0Pj4gMSwKIAkJLnJlZ2lzdGVycyAgPSAyLAogCQkuZmxhZ3MgICAgICA9IENISVBfSEFTX0lOUFVUU0VMLAogCkBAIC0xNDQ1LDggKzE0NDYsNyBAQAogCQkuaW5wdXRtYXAgICA9IHtQSUMxNkM1NF9NSVNDX1NORF9OT1RNVVRFfFBJQzE2QzU0X01JU0NfU1dJVENIX1RVTkVSLAogCQkJICAgICBQSUMxNkM1NF9NSVNDX1NORF9OT1RNVVRFfFBJQzE2QzU0X01JU0NfU1dJVENIX0xJTkUsCiAJCQkgICAgIFBJQzE2QzU0X01JU0NfU05EX05PVE1VVEV8UElDMTZDNTRfTUlTQ19TV0lUQ0hfTElORSwKLQkJCSAgICAgUElDMTZDNTRfTUlTQ19TTkRfTVVURSxQSUMxNkM1NF9NSVNDX1NORF9NVVRFLAotCQkJICAgICBQSUMxNkM1NF9NSVNDX1NORF9OT1RNVVRFfSwKKwkJCSAgICAgUElDMTZDNTRfTUlTQ19TTkRfTVVURX0sCiAJCS5pbnB1dG11dGUgID0gUElDMTZDNTRfTUlTQ19TTkRfTVVURSwKIAl9LAogCXsKQEAgLTE0NTUsOCArMTQ1NSw4IEBACiAJCS8qLmlkICAgICAgICAgPSBJMkNfRFJJVkVSSURfVEE4ODc0WiwgKi8KIAkJLmNoZWNraXQgICAgPSB0YTg4NzR6X2NoZWNraXQsCiAJCS5pbnNtb2RvcHQgID0gJnRhODg3NHosCi0JCS5hZGRyX2xvICAgID0gSTJDX1REQTk4NDAgPj4gMSwKLQkJLmFkZHJfaGkgICAgPSBJMkNfVERBOTg0MCA+PiAxLAorCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1REQTk4NDAgPj4gMSwKKwkJLmFkZHJfaGkgICAgPSBJMkNfQUREUl9UREE5ODQwID4+IDEsCiAJCS5yZWdpc3RlcnMgID0gMiwKIAogCQkuZ2V0bW9kZSAgICA9IHRhODg3NHpfZ2V0bW9kZSwKQEAgLTE1MTQsNiArMTUxNCw3IEBACiAJY2hpcC0+dHlwZSA9IGRlc2MtY2hpcGxpc3Q7CiAJY2hpcC0+c2hhZG93LmNvdW50ID0gZGVzYy0+cmVnaXN0ZXJzKzE7CiAJY2hpcC0+cHJldm1vZGUgPSAtMTsKKwljaGlwLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwogCS8qIHJlZ2lzdGVyICovCiAJaTJjX2F0dGFjaF9jbGllbnQoJmNoaXAtPmMpOwogCkBAIC0xNTgxLDI4ICsxNTgyLDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdHZhdWRpb19zZXRfY3RybChzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXBsaXN0ICsgY2hpcC0+dHlwZTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPj0gMikKKwkJCXJldHVybiAtRVJBTkdFOworCQljaGlwLT5tdXRlZCA9IGN0cmwtPnZhbHVlOworCQlpZiAoY2hpcC0+bXV0ZWQpCisJCQljaGlwX3dyaXRlX21hc2tlZChjaGlwLGRlc2MtPmlucHV0cmVnLGRlc2MtPmlucHV0bXV0ZSxkZXNjLT5pbnB1dG1hc2spOworCQllbHNlCisJCQljaGlwX3dyaXRlX21hc2tlZChjaGlwLGRlc2MtPmlucHV0cmVnLAorCQkJCQlkZXNjLT5pbnB1dG1hcFtjaGlwLT5pbnB1dF0sZGVzYy0+aW5wdXRtYXNrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHZpZGVvNGxpbnV4IGludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogc3RhdGljIGludCBjaGlwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlfX3UxNiAqc2FyZyA9IGFyZzsKIAlzdHJ1Y3QgQ0hJUFNUQVRFICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IENISVBERVNDICAqZGVzYyA9IGNoaXBsaXN0ICsgY2hpcC0+dHlwZTsKIAogCXY0bF9kYmcoMSwgZGVidWcsICZjaGlwLT5jLCAiJXM6IGNoaXBfY29tbWFuZCAweCV4XG4iLCBjaGlwLT5jLm5hbWUsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQVVEQ19TRVRfSU5QVVQ6Ci0JCWlmIChkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKSB7Ci0JCQlpZiAoKnNhcmcgJiAweDgwKQotCQkJCWNoaXBfd3JpdGVfbWFza2VkKGNoaXAsZGVzYy0+aW5wdXRyZWcsZGVzYy0+aW5wdXRtdXRlLGRlc2MtPmlucHV0bWFzayk7Ci0JCQllbHNlCi0JCQkJY2hpcF93cml0ZV9tYXNrZWQoY2hpcCxkZXNjLT5pbnB1dHJlZyxkZXNjLT5pbnB1dG1hcFsqc2FyZ10sZGVzYy0+aW5wdXRtYXNrKTsKLQkJfQotCQlicmVhazsKLQogCWNhc2UgQVVEQ19TRVRfUkFESU86CiAJCWNoaXAtPnJhZGlvID0gMTsKIAkJY2hpcC0+d2F0Y2hfc3RlcmVvID0gMDsKQEAgLTE2NjYsMTYgKzE2NzksNjEgQEAKIAkJYnJlYWs7CiAJfQogCisJY2FzZSBWSURJT0NfU19DVFJMOgorCQlyZXR1cm4gdHZhdWRpb19zZXRfY3RybChjaGlwLCBhcmcpOworCisJY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKKwl7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJ0ID0gYXJnOworCisJCXJ0LT5pbnB1dCA9IGNoaXAtPmlucHV0OworCQlydC0+b3V0cHV0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKKwl7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJ0ID0gYXJnOworCisJCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpIHx8IHJ0LT5pbnB1dCA+PSA0KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkvKiBUaGVyZSBhcmUgZm91ciBpbnB1dHM6IHR1bmVyLCByYWRpbywgZXh0ZXJuIGFuZCBpbnRlcm4uICovCisJCWNoaXAtPmlucHV0ID0gcnQtPmlucHV0OworCQlpZiAoY2hpcC0+bXV0ZWQpCisJCQlicmVhazsKKwkJY2hpcF93cml0ZV9tYXNrZWQoY2hpcCwgZGVzYy0+aW5wdXRyZWcsCisJCQkJZGVzYy0+aW5wdXRtYXBbY2hpcC0+aW5wdXRdLCBkZXNjLT5pbnB1dG1hc2spOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ19TX0FVRElPOgorCXsKKwkJc3RydWN0IHY0bDJfYXVkaW8gKnNhcmcgPSBhcmc7CisKKwkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkgfHwgc2FyZy0+aW5kZXggPj0gNCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogVGhlcmUgYXJlIGZvdXIgaW5wdXRzOiB0dW5lciwgcmFkaW8sIGV4dGVybiBhbmQgaW50ZXJuLiAqLworCQljaGlwLT5pbnB1dCA9IHNhcmctPmluZGV4OworCQlpZiAoY2hpcC0+bXV0ZWQpCisJCQlicmVhazsKKwkJY2hpcF93cml0ZV9tYXNrZWQoY2hpcCwgZGVzYy0+aW5wdXRyZWcsCisJCQkJZGVzYy0+aW5wdXRtYXBbY2hpcC0+aW5wdXRdLCBkZXNjLT5pbnB1dG1hc2spOworCQlicmVhazsKKwl9CisKIAljYXNlIFZJRElPQ19TX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOwogCQlpbnQgbW9kZSA9IDA7CiAKKwkJaWYgKGNoaXAtPnJhZGlvKQorCQkJYnJlYWs7CiAJCXN3aXRjaCAodnQtPmF1ZG1vZGUpIHsKIAkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKIAkJCW1vZGUgPSBWSURFT19TT1VORF9NT05POwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CiAJCQltb2RlID0gVklERU9fU09VTkRfU1RFUkVPOwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgpAQCAtMTY4NSw4ICsxNzQzLDkgQEAKIAkJCW1vZGUgPSBWSURFT19TT1VORF9MQU5HMjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQljaGlwLT5hdWRtb2RlID0gdnQtPmF1ZG1vZGU7CiAKIAkJaWYgKGRlc2MtPnNldG1vZGUgJiYgbW9kZSkgewogCQkJY2hpcC0+d2F0Y2hfc3RlcmVvID0gMDsKQEAgLTE3MDQsNyArMTc2Myw3IEBACiAKIAkJaWYgKGNoaXAtPnJhZGlvKQogCQkJYnJlYWs7Ci0JCXZ0LT5hdWRtb2RlID0gMDsKKwkJdnQtPmF1ZG1vZGUgPSBjaGlwLT5hdWRtb2RlOwogCQl2dC0+cnhzdWJjaGFucyA9IDA7CiAJCXZ0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKIAkJCVY0TDJfVFVORVJfQ0FQX0xBTkcxIHwgVjRMMl9UVU5FUl9DQVBfTEFORzI7CkBAIC0xNzE2LDE5ICsxNzc1LDEyIEBACiAJCQl2dC0+cnhzdWJjaGFucyB8PSBWNEwyX1RVTkVSX1NVQl9NT05POwogCQlpZiAobW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykKIAkJCXZ0LT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwkJLyogTm90ZTogZm9yIFNBUCBpdCBzaG91bGQgYmUgbW9uby9sYW5nMiBvciBzdGVyZW8vbGFuZzIuCisJCSAgIFdoZW4gdGhpcyBtb2R1bGUgaXMgY29udmVydGVkIGZ1bGx5IHRvIHY0bDIsIHRoZW4gdGhpcworCQkgICBzaG91bGQgY2hhbmdlIGZvciB0aG9zZSBjaGlwcyB0aGF0IGNhbiBkZXRlY3QgU0FQLiAqLwogCQlpZiAobW9kZSAmIFZJREVPX1NPVU5EX0xBTkcxKQotCQkJdnQtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfAotCQkJCQkgIFY0TDJfVFVORVJfU1VCX0xBTkcyOwotCi0JCW1vZGUgPSBjaGlwLT5tb2RlOwotCQlpZiAobW9kZSAmIFZJREVPX1NPVU5EX01PTk8pCi0JCQl2dC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCQlpZiAobW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykKLQkJCXZ0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJaWYgKG1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkKLQkJCXZ0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwotCQlpZiAobW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQotCQkJdnQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzI7CisJCQl2dC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwKKwkJCQkJIFY0TDJfVFVORVJfU1VCX0xBTkcyOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmN2UxMTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKgotICogaTJjIGJ1cyBhZGRyZXNzZXMgZm9yIHRoZSBjaGlwcyBzdXBwb3J0ZWQgYnkgdHZhdWRpby5jCi0gKi8KLQotI2RlZmluZSBJMkNfVERBODQyNSAgICAgICAgMHg4MgotI2RlZmluZSBJMkNfVERBOTg0MCAgICAgICAgMHg4NCAvKiBhbHNvIHVzZWQgYnkgVEE4ODc0WiAqLwotI2RlZmluZSBJMkNfVERBOTg1eF9MICAgICAgMHhiNCAvKiBhbHNvIHVzZWQgYnkgOTg3MyAqLwotI2RlZmluZSBJMkNfVERBOTg1eF9IICAgICAgMHhiNgotI2RlZmluZSBJMkNfVERBOTg3NCAgICAgICAgMHhiMCAvKiBhbHNvIHVzZWQgYnkgOTg3NSAqLwotCi0jZGVmaW5lIEkyQ19URUE2MzAwICAgICAgICAweDgwIC8qIGFsc28gdXNlZCBieSA2MzIwICovCi0jZGVmaW5lIEkyQ19URUE2NDIwCSAgIDB4OTgKLQotI2RlZmluZSBJMkNfUElDMTZDNTQgICAgICAgMHg5NiAvKiBQVjk1MSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IDU4MjU1MWIuLmUwZDJmZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTI0OCwzMiArMjQ4LDMyIEBACiAJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1AzNDEwRCJ9LAogCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQxNSJ9LAogCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQzMCJ9LAotCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQMzQzOCJ9LAorCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQzOCJ9LAogCXtBVURJT19DSElQX1VOS05PV04sICAiQ1M1MzMxIn0sCiAJLyogMTAtMTQgKi8KIAl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0MzUifSwKIAl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0NDAifSwKIAl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0NDUifSwKLQl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDM0MTEifSwKLQl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDM0MTYifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0MTEifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDM0MTYifSwKIAkvKiAxNS0xOSAqLwogCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQyNSJ9LAotCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQMzQ1MSJ9LAotCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQMzQxOCJ9LAorCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQ1MSJ9LAorCXtBVURJT19DSElQX01TUDM0WFgsICAiTVNQMzQxOCJ9LAogCXtBVURJT19DSElQX1VOS05PV04sICAiVHlwZSAweDEyIn0sCiAJe0FVRElPX0NISVBfVU5LTk9XTiwgICJPS0k3NzE2In0sCiAJLyogMjAtMjQgKi8KLQl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0MTAifSwKLQl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0MjAifSwKLQl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0NDAifSwKLQl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0NTAifSwKLQl7QVVESU9fQ0hJUF9VTktOT1dOLCAgIk1TUDQ0MDgifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDQ0MTAifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDQ0MjAifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDQ0NDAifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDQ0NTAifSwKKwl7QVVESU9fQ0hJUF9NU1AzNFhYLCAgIk1TUDQ0MDgifSwKIAkvKiAyNS0yOSAqLwotCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQxOCJ9LAotCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQyOCJ9LAotCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQ0OCJ9LAotCXtBVURJT19DSElQX1VOS05PV04sICAiTVNQNDQ1OCJ9LAotCXtBVURJT19DSElQX1VOS05PV04sICAiVHlwZSAweDFkIn0sCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1A0NDE4In0sCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1A0NDI4In0sCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1A0NDQ4In0sCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJNU1A0NDU4In0sCisJe0FVRElPX0NISVBfTVNQMzRYWCwgICJUeXBlIDB4MWQifSwKIAkvKiAzMC0zNCAqLwogCXtBVURJT19DSElQX0lOVEVSTkFMLCAiQ1g4ODAifSwKIAl7QVVESU9fQ0hJUF9JTlRFUk5BTCwgIkNYODgxIn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCmluZGV4IDE4NjQ0MjMuLjY5ZDBmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCkBAIC0xLDggKzEsOCBAQAogLyoKLSAqIHR2cDUxNTAgLSBUZXhhcyBJbnN0cnVtZW50cyBUVlA1MTUwQShNKSB2aWRlbyBkZWNvZGVyIGRyaXZlcgorICogdHZwNTE1MCAtIFRleGFzIEluc3RydW1lbnRzIFRWUDUxNTBBL0FNMSB2aWRlbyBkZWNvZGVyIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgKG1jaGVoYWJAYnJ0dXJiby5jb20uYnIpCi0gKiBUaGlzIGNvZGUgaXMgcGxhY2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA2IE1hdXJvIENhcnZhbGhvIENoZWhhYiAobWNoZWhhYkBpbmZyYWRlYWQub3JnKQorICogVGhpcyBjb2RlIGlzIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgpAQCAtMTMsMTAgKzEzLDExIEBACiAKICNpbmNsdWRlICJ0dnA1MTUwX3JlZy5oIgogCi1NT0RVTEVfREVTQ1JJUFRJT04oIlRleGFzIEluc3RydW1lbnRzIFRWUDUxNTBBIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CS8qIHN0YW5kYXJkIGkyYyBpbnNtb2Qgb3B0aW9ucyAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJUZXhhcyBJbnN0cnVtZW50cyBUVlA1MTUwQSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKy8qIHN0YW5kYXJkIGkyYyBpbnNtb2Qgb3B0aW9ucyAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKIAkweGI4ID4+IDEsCiAJMHhiYSA+PiAxLApAQCAtMjksNiArMzAsOSBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKyNkZWZpbmUgdHZwNTE1MF9lcnIoZm10LCBhcmcuLi4pIGRvIHsgXAorCXByaW50ayhLRVJOX0VSUiAiJXMgJWQtJTA0eDogIiBmbXQsIGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIFwKKwkgICAgICAgaTJjX2FkYXB0ZXJfaWQoYy0+YWRhcHRlciksIGMtPmFkZHIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQogI2RlZmluZSB0dnA1MTUwX2luZm8oZm10LCBhcmcuLi4pIGRvIHsgXAogCXByaW50ayhLRVJOX0lORk8gIiVzICVkLSUwNHg6ICIgZm10LCBjLT5kcml2ZXItPmRyaXZlci5uYW1lLCBcCiAJICAgICAgIGkyY19hZGFwdGVyX2lkKGMtPmFkYXB0ZXIpLCBjLT5hZGRyICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKQEAgLTg0LDcgKzg4LDcgQEAKIHN0cnVjdCB0dnA1MTUwIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCi0JaW50IG5vcm07CisJdjRsMl9zdGRfaWQgbm9ybTsJLyogQ3VycmVudCBzZXQgc3RhbmRhcmQgKi8KIAlpbnQgaW5wdXQ7CiAJaW50IGVuYWJsZTsKIAlpbnQgYnJpZ2h0OwpAQCAtMTI1LDMxMCArMTI5LDE1NSBAQAogCQl0dnA1MTUwX2RiZygwLCAiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIiwgcmMpOwogfQogCitzdGF0aWMgdm9pZCBkdW1wX3JlZ19yYW5nZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY2hhciAqcywgdTggaW5pdCwgY29uc3QgdTggZW5kLGludCBtYXhfbGluZSkKK3sKKwlpbnQgaT0wOworCisJd2hpbGUgKGluaXQhPSh1OCkoZW5kKzEpKSB7CisJCWlmICgoaSVtYXhfbGluZSkgPT0gMCkgeworCQkJaWYgKGk+MCkKKwkJCQlwcmludGsoIlxuIik7CisJCQlwcmludGsoInR2cDUxNTA6ICVzIHJlZyAweCUwMnggPSAiLHMsaW5pdCk7CisJCX0KKwkJcHJpbnRrKCIlMDJ4ICIsdHZwNTE1MF9yZWFkKGMsIGluaXQpKTsKKworCQlpbml0Kys7CisJCWkrKzsKKwl9CisJcHJpbnRrKCJcbiIpOworfQorCiBzdGF0aWMgdm9pZCBkdW1wX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqYykKIHsKIAlwcmludGsoInR2cDUxNTA6IFZpZGVvIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gIzEgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZEX0lOX1NSQ19TRUxfMSkpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRF9JTl9TUkNfU0VMXzEpKTsKIAlwcmludGsoInR2cDUxNTA6IEFuYWxvZyBjaGFubmVsIGNvbnRyb2xzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BTkFMX0NITF9DVEwpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQU5BTF9DSExfQ1RMKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBPcGVyYXRpb24gbW9kZSBjb250cm9scyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfT1BfTU9ERV9DVEwpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfT1BfTU9ERV9DVEwpKTsKIAlwcmludGsoInR2cDUxNTA6IE1pc2NlbGxhbmVvdXMgY29udHJvbHMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX01JU0NfQ1RMKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBBdXRvc3dpdGNoIG1hc2s6IFRWUDUxNTBBIC8gVFZQNTE1MEFNID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BVVRPU1dfTVNLKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX01JU0NfQ1RMKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBBdXRvc3dpdGNoIG1hc2s9IDB4JTAyeFxuIiwKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQVVUT1NXX01TSykpOwogCXByaW50aygidHZwNTE1MDogQ29sb3Iga2lsbGVyIHRocmVzaG9sZCBjb250cm9sID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DT0xPUl9LSUxfVEhTSF9DVEwpKTsKLQlwcmludGsoInR2cDUxNTA6IEx1bWluYW5jZSBwcm9jZXNzaW5nIGNvbnRyb2wgIzEgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMSkpOwotCXByaW50aygidHZwNTE1MDogTHVtaW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbCAjMiA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTFVNQV9QUk9DX0NUTF8yKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NPTE9SX0tJTF9USFNIX0NUTCkpOworCXByaW50aygidHZwNTE1MDogTHVtaW5hbmNlIHByb2Nlc3NpbmcgY29udHJvbHMgIzEgIzIgYW5kICMzID0gJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMSksCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMiksCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xVTUFfUFJPQ19DVExfMykpOwogCXByaW50aygidHZwNTE1MDogQnJpZ2h0bmVzcyBjb250cm9sID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9CUklHSFRfQ1RMKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0JSSUdIVF9DVEwpKTsKIAlwcmludGsoInR2cDUxNTA6IENvbG9yIHNhdHVyYXRpb24gY29udHJvbCA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU0FUVVJBVElPTl9DVEwpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU0FUVVJBVElPTl9DVEwpKTsKIAlwcmludGsoInR2cDUxNTA6IEh1ZSBjb250cm9sID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9IVUVfQ1RMKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0hVRV9DVEwpKTsKIAlwcmludGsoInR2cDUxNTA6IENvbnRyYXN0IGNvbnRyb2wgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NPTlRSQVNUX0NUTCkpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DT05UUkFTVF9DVEwpKTsKIAlwcmludGsoInR2cDUxNTA6IE91dHB1dHMgYW5kIGRhdGEgcmF0ZXMgc2VsZWN0ID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9EQVRBX1JBVEVfU0VMKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMdW1pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MVU1BX1BST0NfQ1RMXzMpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfREFUQV9SQVRFX1NFTCkpOwogCXByaW50aygidHZwNTE1MDogQ29uZmlndXJhdGlvbiBzaGFyZWQgcGlucyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09ORl9TSEFSRURfUElOKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RhcnQgTVNCID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVF9NU0IpKTsKLQlwcmludGsoInR2cDUxNTA6IEFjdGl2ZSB2aWRlbyBjcm9wcGluZyBzdGFydCBMU0IgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUX0xTQikpOwotCXByaW50aygidHZwNTE1MDogQWN0aXZlIHZpZGVvIGNyb3BwaW5nIHN0b3AgTVNCID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVFBfTVNCKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RvcCBMU0IgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUUF9MU0IpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09ORl9TSEFSRURfUElOKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBBY3RpdmUgdmlkZW8gY3JvcHBpbmcgc3RhcnQgPSAweCUwMnglMDJ4XG4iLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVF9NU0IpLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVF9MU0IpKTsKKwlwcmludGsoInR2cDUxNTA6IEFjdGl2ZSB2aWRlbyBjcm9wcGluZyBzdG9wICA9IDB4JTAyeCUwMnhcbiIsCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0FDVF9WRF9DUk9QX1NUUF9NU0IpLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9BQ1RfVkRfQ1JPUF9TVFBfTFNCKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBHZW5sb2NrL1JUQyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfR0VOTE9DSykpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9HRU5MT0NLKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBIb3Jpem9udGFsIHN5bmMgc3RhcnQgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0hPUklaX1NZTkNfU1RBUlQpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSE9SSVpfU1lOQ19TVEFSVCkpOwogCXByaW50aygidHZwNTE1MDogVmVydGljYWwgYmxhbmtpbmcgc3RhcnQgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RBUlQpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkVSVF9CTEFOS0lOR19TVEFSVCkpOwogCXByaW50aygidHZwNTE1MDogVmVydGljYWwgYmxhbmtpbmcgc3RvcCA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkVSVF9CTEFOS0lOR19TVE9QKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBDaHJvbWluYW5jZSBwcm9jZXNzaW5nIGNvbnRyb2wgIzEgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NIUk9NQV9QUk9DX0NUTF8xKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBDaHJvbWluYW5jZSBwcm9jZXNzaW5nIGNvbnRyb2wgIzIgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NIUk9NQV9QUk9DX0NUTF8yKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfQkxBTktJTkdfU1RPUCkpOworCXByaW50aygidHZwNTE1MDogQ2hyb21pbmFuY2UgcHJvY2Vzc2luZyBjb250cm9sICMxIGFuZCAjMiA9ICUwMnggJTAyeFxuIiwKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ0hST01BX1BST0NfQ1RMXzEpLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DSFJPTUFfUFJPQ19DVExfMikpOwogCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IHJlc2V0IHJlZ2lzdGVyIEIgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9SRVNFVF9SRUdfQikpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfUkVTRVRfUkVHX0IpKTsKIAlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgQiA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX0VOQUJMRV9SRUdfQikpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfRU5BQkxFX1JFR19CKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbiByZWdpc3RlciBCID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRUX0NPTkZJR19SRUdfQikpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRUX0NPTkZJR19SRUdfQikpOwogCXByaW50aygidHZwNTE1MDogVmlkZW8gc3RhbmRhcmQgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJREVPX1NURCkpOwotCXByaW50aygidHZwNTE1MDogQ2IgZ2FpbiBmYWN0b3IgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NCX0dBSU5fRkFDVCkpOwotCXByaW50aygidHZwNTE1MDogQ3IgZ2FpbiBmYWN0b3IgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NSX0dBSU5fRkFDVE9SKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJREVPX1NURCkpOworCXByaW50aygidHZwNTE1MDogQ2hyb21hIGdhaW4gZmFjdG9yOiBDYj0weCUwMnggQ3I9MHglMDJ4XG4iLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQl9HQUlOX0ZBQ1QpLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DUl9HQUlOX0ZBQ1RPUikpOwogCXByaW50aygidHZwNTE1MDogTWFjcm92aXNpb24gb24gY291bnRlciA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTUFDUk9WSVNJT05fT05fQ1RSKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX01BQ1JPVklTSU9OX09OX0NUUikpOwogCXByaW50aygidHZwNTE1MDogTWFjcm92aXNpb24gb2ZmIGNvdW50ZXIgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX01BQ1JPVklTSU9OX09GRl9DVFIpKTsKLQlwcmludGsoInR2cDUxNTA6IHJldmlzaW9uIHNlbGVjdCAoVFZQNTE1MEFNMSBvbmx5KSA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUkVWX1NFTEVDVCkpOwotCXByaW50aygidHZwNTE1MDogTVNCIG9mIGRldmljZSBJRCA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTVNCX0RFVl9JRCkpOwotCXByaW50aygidHZwNTE1MDogTFNCIG9mIGRldmljZSBJRCA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTFNCX0RFVl9JRCkpOwotCXByaW50aygidHZwNTE1MDogUk9NIG1ham9yIHZlcnNpb24gPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1JPTV9NQUpPUl9WRVIpKTsKLQlwcmludGsoInR2cDUxNTA6IFJPTSBtaW5vciB2ZXJzaW9uID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9ST01fTUlOT1JfVkVSKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBWZXJ0aWNhbCBsaW5lIGNvdW50IE1TQiA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkVSVF9MTl9DT1VOVF9NU0IpKTsKLQlwcmludGsoInR2cDUxNTA6IFZlcnRpY2FsIGxpbmUgY291bnQgTFNCID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRVJUX0xOX0NPVU5UX0xTQikpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9NQUNST1ZJU0lPTl9PRkZfQ1RSKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBJVFUtUiBCVC42NTYuJWQgdGltaW5nKFRWUDUxNTBBTTEgb25seSlcbiIsCisJCQkJCSh0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9SRVZfU0VMRUNUKSYxKT8zOjQpOworCXByaW50aygidHZwNTE1MDogRGV2aWNlIElEID0gJTAyeCUwMnhcbiIsCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX01TQl9ERVZfSUQpLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MU0JfREVWX0lEKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBST00gdmVyc2lvbiA9IChoZXgpICUwMnguJTAyeFxuIiwKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUk9NX01BSk9SX1ZFUiksCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1JPTV9NSU5PUl9WRVIpKTsKKwlwcmludGsoInR2cDUxNTA6IFZlcnRpY2FsIGxpbmUgY291bnQgPSAweCUwMnglMDJ4XG4iLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRVJUX0xOX0NPVU5UX01TQiksCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZFUlRfTE5fQ09VTlRfTFNCKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIEIgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9TVEFUVVNfUkVHX0IpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX1NUQVRVU19SRUdfQikpOwogCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IGFjdGl2ZSByZWdpc3RlciBCID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfQUNUSVZFX1JFR19CKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBTdGF0dXMgcmVnaXN0ZXIgIzEgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1NUQVRVU19SRUdfMSkpOwotCXByaW50aygidHZwNTE1MDogU3RhdHVzIHJlZ2lzdGVyICMyID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TVEFUVVNfUkVHXzIpKTsKLQlwcmludGsoInR2cDUxNTA6IFN0YXR1cyByZWdpc3RlciAjMyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18zKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBTdGF0dXMgcmVnaXN0ZXIgIzQgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1NUQVRVU19SRUdfNCkpOwotCXByaW50aygidHZwNTE1MDogU3RhdHVzIHJlZ2lzdGVyICM1ID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9TVEFUVVNfUkVHXzUpKTsKLQlwcmludGsoInR2cDUxNTA6IENsb3NlZCBjYXB0aW9uIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQ19EQVRBX1JFRzEpKTsKLQlwcmludGsoInR2cDUxNTA6IENsb3NlZCBjYXB0aW9uIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQ19EQVRBX1JFRzIpKTsKLQlwcmludGsoInR2cDUxNTA6IENsb3NlZCBjYXB0aW9uIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQ19EQVRBX1JFRzMpKTsKLQlwcmludGsoInR2cDUxNTA6IENsb3NlZCBjYXB0aW9uIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9DQ19EQVRBX1JFRzQpKTsKLQlwcmludGsoInR2cDUxNTA6IFdTUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfV1NTX0RBVEFfUkVHMSkpOwotCXByaW50aygidHZwNTE1MDogV1NTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9XU1NfREFUQV9SRUcyKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBXU1MgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1dTU19EQVRBX1JFRzMpKTsKLQlwcmludGsoInR2cDUxNTA6IFdTUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfV1NTX0RBVEFfUkVHNCkpOwotCXByaW50aygidHZwNTE1MDogV1NTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9XU1NfREFUQV9SRUc1KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBXU1MgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1dTU19EQVRBX1JFRzYpKTsKLQlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMSkpOwotCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUcyKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzMpKTsKLQlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHNCkpOwotCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUc1KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzYpKTsKLQlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHNykpOwotCXByaW50aygidHZwNTE1MDogVlBTIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WUFNfREFUQV9SRUc4KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBWUFMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZQU19EQVRBX1JFRzkpKTsKLQlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTApKTsKLQlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTEpKTsKLQlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTIpKTsKLQlwcmludGsoInR2cDUxNTA6IFZQUyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTMpKTsKLQlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUcxKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHMikpOwotCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzMpKTsKLQlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUc0KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNSkpOwotCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzYpKTsKLQlwcmludGsoInR2cDUxNTA6IFZJVEMgZGF0YSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1ZJVENfREFUQV9SRUc3KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBWSVRDIGRhdGEgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WSVRDX0RBVEFfUkVHOCkpOwotCXByaW50aygidHZwNTE1MDogVklUQyBkYXRhIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVklUQ19EQVRBX1JFRzkpKTsKLQlwcmludGsoInR2cDUxNTA6IFZCSSBGSUZPIHJlYWQgZGF0YSA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkJJX0ZJRk9fUkVBRF9EQVRBKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMSA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMSkpOwotCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDEgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzIpKTsKLQlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAxID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMV8zKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMSA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfNCkpOwotCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDEgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8xXzUpKTsKLQlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAyID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMl8xKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMiA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMikpOwotCXByaW50aygidHZwNTE1MDogVGVsZXRleHQgZmlsdGVyIDIgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF8yXzMpKTsKLQlwcmludGsoInR2cDUxNTA6IFRlbGV0ZXh0IGZpbHRlciAyID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfMl80KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgMiA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfNSkpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfQUNUSVZFX1JFR19CKSk7CisJcHJpbnRrKCJ0dnA1MTUwOiBTdGF0dXMgcmVncyAjMSB0byAjNSA9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18xKSwKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18yKSwKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR18zKSwKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR180KSwKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfU1RBVFVTX1JFR181KSk7CisKKwlkdW1wX3JlZ19yYW5nZShjLCJUZWxldGV4dCBmaWx0ZXIgMSIsICAgVFZQNTE1MF9URUxFVEVYVF9GSUwxX0lOSSwKKwkJCQkJCVRWUDUxNTBfVEVMRVRFWFRfRklMMV9FTkQsOCk7CisJZHVtcF9yZWdfcmFuZ2UoYywiVGVsZXRleHQgZmlsdGVyIDIiLCAgIFRWUDUxNTBfVEVMRVRFWFRfRklMMl9JTkksCisJCQkJCQlUVlA1MTUwX1RFTEVURVhUX0ZJTDJfRU5ELDgpOworCiAJcHJpbnRrKCJ0dnA1MTUwOiBUZWxldGV4dCBmaWx0ZXIgZW5hYmxlID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9URUxFVEVYVF9GSUxfRU5BKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1RFTEVURVhUX0ZJTF9FTkEpKTsKIAlwcmludGsoInR2cDUxNTA6IEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgQSA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX1NUQVRVU19SRUdfQSkpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9JTlRfU1RBVFVTX1JFR19BKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIEEgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9FTkFCTEVfUkVHX0EpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfSU5UX0VOQUJMRV9SRUdfQSkpOwogCXByaW50aygidHZwNTE1MDogSW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9DT05GKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBWRFAgY29uZmlndXJhdGlvbiBSQU0gZGF0YSA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfVkRQX0NPTkZfUkFNX0RBVEEpKTsKLQlwcmludGsoInR2cDUxNTA6IENvbmZpZ3VyYXRpb24gUkFNIGFkZHJlc3MgbG93IGJ5dGUgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0NPTkZfUkFNX0FERFJfTE9XKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBDb25maWd1cmF0aW9uIFJBTSBhZGRyZXNzIGhpZ2ggYnl0ZSA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfQ09ORl9SQU1fQUREUl9ISUdIKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0lOVF9DT05GKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBWRFAgc3RhdHVzIHJlZ2lzdGVyID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRFBfU1RBVFVTX1JFRykpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9WRFBfU1RBVFVTX1JFRykpOwogCXByaW50aygidHZwNTE1MDogRklGTyB3b3JkIGNvdW50ID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GSUZPX1dPUkRfQ09VTlQpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRklGT19XT1JEX0NPVU5UKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBGSUZPIGludGVycnVwdCB0aHJlc2hvbGQgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fSU5UX1RIUkVTSE9MRCkpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GSUZPX0lOVF9USFJFU0hPTEQpKTsKIAlwcmludGsoInR2cDUxNTA6IEZJRk8gcmVzZXQgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fUkVTRVQpKTsKKwkJCQkJdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfRklGT19SRVNFVCkpOwogCXByaW50aygidHZwNTE1MDogTGluZSBudW1iZXIgaW50ZXJydXB0ID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX05VTUJFUl9JTlQpKTsKLQlwcmludGsoInR2cDUxNTA6IFBpeGVsIGFsaWdubWVudCByZWdpc3RlciBsb3cgYnl0ZSA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfUElYX0FMSUdOX1JFR19MT1cpKTsKLQlwcmludGsoInR2cDUxNTA6IFBpeGVsIGFsaWdubWVudCByZWdpc3RlciBoaWdoIGJ5dGUgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1BJWF9BTElHTl9SRUdfSElHSCkpOworCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX05VTUJFUl9JTlQpKTsKKwlwcmludGsoInR2cDUxNTA6IFBpeGVsIGFsaWdubWVudCByZWdpc3RlciA9IDB4JTAyeCUwMnhcbiIsCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1BJWF9BTElHTl9SRUdfSElHSCksCisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX1BJWF9BTElHTl9SRUdfTE9XKSk7CiAJcHJpbnRrKCJ0dnA1MTUwOiBGSUZPIG91dHB1dCBjb250cm9sID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GSUZPX09VVF9DVFJMKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBGdWxsIGZpZWxkIGVuYWJsZSAxID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQV8xKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBGdWxsIGZpZWxkIGVuYWJsZSAyID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQV8yKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzEpKTsKLQlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMikpOwotCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR18zKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQpKTsKLQlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNSkpOwotCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR182KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzcpKTsKLQlwcmludGsoInR2cDUxNTA6IExpbmUgbW9kZSByZWdpc3RlcnMgPSAweCUwMnhcbiIsCi0JICAgICAgIHR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfOCkpOwotCXByaW50aygidHZwNTE1MDogTGluZSBtb2RlIHJlZ2lzdGVycyA9IDB4JTAyeFxuIiwKLQkgICAgICAgdHZwNTE1MF9yZWFkKGMsIFRWUDUxNTBfTElORV9NT0RFX1JFR185KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzEwKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzExKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzEyKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzEzKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE0KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE1KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE2KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE3KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE4KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE5KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIwKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIxKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIyKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIzKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI0KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI1KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI3KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI4KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI5KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMwKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMxKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMyKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMzKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM0KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM1KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM2KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM3KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM4KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM5KSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQwKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQxKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQyKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQzKSk7Ci0JcHJpbnRrKCJ0dnA1MTUwOiBMaW5lIG1vZGUgcmVnaXN0ZXJzID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQ0KSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZJRk9fT1VUX0NUUkwpKTsKKwlwcmludGsoInR2cDUxNTA6IEZ1bGwgZmllbGQgZW5hYmxlID0gMHglMDJ4XG4iLAorCQkJCQl0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQSkpOwogCXByaW50aygidHZwNTE1MDogRnVsbCBmaWVsZCBtb2RlIHJlZ2lzdGVyID0gMHglMDJ4XG4iLAotCSAgICAgICB0dnA1MTUwX3JlYWQoYywgVFZQNTE1MF9GVUxMX0ZJRUxEX01PREVfUkVHKSk7CisJCQkJCXR2cDUxNTBfcmVhZChjLCBUVlA1MTUwX0ZVTExfRklFTERfTU9ERV9SRUcpKTsKKworCWR1bXBfcmVnX3JhbmdlKGMsIkNDICAgZGF0YSIsICAgVFZQNTE1MF9DQ19EQVRBX0lOSSwKKwkJCQkJVFZQNTE1MF9DQ19EQVRBX0VORCw4KTsKKworCWR1bXBfcmVnX3JhbmdlKGMsIldTUyAgZGF0YSIsICAgVFZQNTE1MF9XU1NfREFUQV9JTkksCisJCQkJCVRWUDUxNTBfV1NTX0RBVEFfRU5ELDgpOworCisJZHVtcF9yZWdfcmFuZ2UoYywiVlBTICBkYXRhIiwgICBUVlA1MTUwX1ZQU19EQVRBX0lOSSwKKwkJCQkJVFZQNTE1MF9WUFNfREFUQV9FTkQsOCk7CisKKwlkdW1wX3JlZ19yYW5nZShjLCJWSVRDIGRhdGEiLCAgIFRWUDUxNTBfVklUQ19EQVRBX0lOSSwKKwkJCQkJVFZQNTE1MF9WSVRDX0RBVEFfRU5ELDEwKTsKKworCWR1bXBfcmVnX3JhbmdlKGMsIkxpbmUgbW9kZSIsICAgVFZQNTE1MF9MSU5FX01PREVfSU5JLAorCQkJCQlUVlA1MTUwX0xJTkVfTU9ERV9FTkQsOCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01OTMsMTAgKzQ0MiwxMCBAQAogCQlUVlA1MTUwX0ZJRk9fT1VUX0NUUkwsMHgwMQogCX0sCiAJeyAvKiAweGNmICovCi0JCVRWUDUxNTBfRlVMTF9GSUVMRF9FTkFfMSwweDAwCisJCVRWUDUxNTBfRlVMTF9GSUVMRF9FTkEsMHgwMAogCX0sCiAJeyAvKiAweGQwICovCi0JCVRWUDUxNTBfRlVMTF9GSUVMRF9FTkFfMiwweDAwCisJCVRWUDUxNTBfTElORV9NT0RFX0lOSSwweDAwCiAJfSwKIAl7IC8qIDB4ZmMgKi8KIAkJVFZQNTE1MF9GVUxMX0ZJRUxEX01PREVfUkVHLDB4N2YKQEAgLTYyOSw1NCArNDc4LDEwMSBAQAogCX0KIH07CiAKK3N0cnVjdCB0dnA1MTUwX3ZiaV90eXBlIHsKKwl1bnNpZ25lZCBpbnQgdmJpX3R5cGU7CisJdW5zaWduZWQgaW50IGluaV9saW5lOworCXVuc2lnbmVkIGludCBlbmRfbGluZTsKKwl1bnNpZ25lZCBpbnQgYnlfZmllbGQgOjE7Cit9OworCiBzdHJ1Y3QgaTJjX3ZiaV9yYW1fdmFsdWUgewogCXUxNiByZWc7Ci0JdW5zaWduZWQgY2hhciB2YWx1ZXNbMjZdOworCXN0cnVjdCB0dnA1MTUwX3ZiaV90eXBlIHR5cGU7CisJdW5zaWduZWQgY2hhciB2YWx1ZXNbMTZdOwogfTsKIAorLyogVGhpcyBzdHJ1Y3QgaGF2ZSB0aGUgdmFsdWVzIGZvciBlYWNoIHN1cHBvcnRlZCBWQkkgU3RhbmRhcmQKKyAqIGJ5CisgdHZwNTE1MF92YmlfdHlwZXMgc2hvdWxkIGZvbGxvdyB0aGUgc2FtZSBvcmRlciBhcyB2YmlfcmFtX2RlZmF1bHQKKyAqIHZhbHVlIDAgbWVhbnMgcm9tIHBvc2l0aW9uIDB4MTAsIHZhbHVlIDEgbWVhbnMgcm9tIHBvc2l0aW9uIDB4MzAKKyAqIGFuZCBzbyBvbi4gVGhlcmUgYXJlIDE2IHBvc3NpYmxlIGxvY2F0aW9ucyBmcm9tIDAgdG8gMTUuCisgKi8KKwogc3RhdGljIHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSB2YmlfcmFtX2RlZmF1bHRbXSA9CiB7Ci0JezB4MDEwLCAvKiBXU1QgU0VDQU0gNiAqLwotCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYgLCAweGU3LCAweDJlLCAweDIwLCAweDI2LCAweGU2LCAweGI0LCAweDBlLCAweDAsIDB4MCwgMHgwLCAweDEwLCAweDAgfQorCXsweDAxMCwgLyogVGVsZXRleHQsIFNFQ0FNLCBXU1QgU3lzdGVtIEEgKi8KKwkJe1Y0TDJfU0xJQ0VEX1RFTEVURVhUX1NFQ0FNLDYsMjMsMX0sCisJCXsgMHhhYSwgMHhhYSwgMHhmZiwgMHhmZiwgMHhlNywgMHgyZSwgMHgyMCwgMHgyNiwKKwkJICAweGU2LCAweGI0LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwIH0KIAl9LAotCXsweDAzMCwgLyogV1NUIFBBTCBCIDYgKi8KLQkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmICwgMHgyNywgMHgyZSwgMHgyMCwgMHgyYiwgMHhhNiwgMHg3MiwgMHgxMCwgMHgwLCAweDAsIDB4MCwgMHgxMCwgMHgwIH0KKwl7MHgwMzAsIC8qIFRlbGV0ZXh0LCBQQUwsIFdTVCBTeXN0ZW0gQiAqLworCQl7VjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IsNiwyMiwxfSwKKwkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmLCAweDI3LCAweDJlLCAweDIwLCAweDJiLAorCQkgIDB4YTYsIDB4NzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAgfQogCX0sCi0JezB4MDUwLCAvKiBXU1QgUEFMIEMgNiAqLwotCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYgLCAweGU3LCAweDJlLCAweDIwLCAweDIyLCAweGE2LCAweDk4LCAweDBkLCAweDAsIDB4MCwgMHgwLCAweDEwLCAweDAgfQorCXsweDA1MCwgLyogVGVsZXRleHQsIFBBTCwgV1NUIFN5c3RlbSBDICovCisJCXtWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQyw2LDIyLDF9LAorCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4MmUsIDB4MjAsIDB4MjIsCisJCSAgMHhhNiwgMHg5OCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCB9CiAJfSwKLQl7MHgwNzAsIC8qIFdTVCBOVFNDIDYgKi8KLQkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmICwgMHgyNywgMHgyZSwgMHgyMCwgMHgyMywgMHg2OSwgMHg5MywgMHgwZCwgMHgwLCAweDAsIDB4MCwgMHgxMCwgMHgwIH0KKwl7MHgwNzAsIC8qIFRlbGV0ZXh0LCBOVFNDLCBXU1QgU3lzdGVtIEIgKi8KKwkJe1Y0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfQiwxMCwyMSwxfSwKKwkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmLCAweDI3LCAweDJlLCAweDIwLCAweDIzLAorCQkgIDB4NjksIDB4OTMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAgfQogCX0sCi0JezB4MDkwLCAvKiBOQUJUUywgTlRTQyA2ICovCi0JCXsgMHhhYSwgMHhhYSwgMHhmZiwgMHhmZiAsIDB4ZTcsIDB4MmUsIDB4MjAsIDB4MjIsIDB4NjksIDB4OTMsIDB4MGQsIDB4MCwgMHgwLCAweDAsIDB4MTUsIDB4MCB9CisJezB4MDkwLCAvKiBUZXRldGV4dCwgTlRTQyBOQUJUUyBTeXN0ZW0gQyAqLworCQl7VjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19DLDEwLDIxLDF9LAorCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4MmUsIDB4MjAsIDB4MjIsCisJCSAgMHg2OSwgMHg5MywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwMCB9CiAJfSwKLQl7MHgwYjAsIC8qIE5BQlRTLCBOVFNDLUogNiAqLwotCQl7IDB4YWEsIDB4YWEsIDB4ZmYsIDB4ZmYgLCAweGE3LCAweDJlLCAweDIwLCAweDIzLCAweDY5LCAweDkzLCAweDBkLCAweDAsIDB4MCwgMHgwLCAweDEwLCAweDAgfQorCXsweDBiMCwgLyogVGVsZXRleHQsIE5UU0MtSiwgTkFCVFMgU3lzdGVtIEQgKi8KKwkJe1Y0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfRCwxMCwyMSwxfSwKKwkJeyAweGFhLCAweGFhLCAweGZmLCAweGZmLCAweGE3LCAweDJlLCAweDIwLCAweDIzLAorCQkgIDB4NjksIDB4OTMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAgfQogCX0sCi0JezB4MGQwLCAvKiBDQywgUEFML1NFQ0FNIDYgKi8KLQkJeyAweGFhLCAweDJhLCAweGZmLCAweDNmICwgMHgwNCwgMHg1MSwgMHg2ZSwgMHgwMiwgMHhhNiwgMHg3YiwgMHgwOSwgMHgwLCAweDAsIDB4MCwgMHgyNywgMHgwIH0KKwl7MHgwZDAsIC8qIENsb3NlZCBDYXB0aW9uLCBQQUwvU0VDQU0gKi8KKwkJe1Y0TDJfU0xJQ0VEX0NBUFRJT05fNjI1LDIyLDIyLDF9LAorCQl7IDB4YWEsIDB4MmEsIDB4ZmYsIDB4M2YsIDB4MDQsIDB4NTEsIDB4NmUsIDB4MDIsCisJCSAgMHhhNiwgMHg3YiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNywgMHgwMCB9CiAJfSwKLQl7MHgwZjAsIC8qIENDLCBOVFNDIDYgKi8KLQkJeyAweGFhLCAweDJhLCAweGZmLCAweDNmICwgMHgwNCwgMHg1MSwgMHg2ZSwgMHgwMiwgMHg2OSwgMHg4YywgMHgwOSwgMHgwLCAweDAsIDB4MCwgMHgyNywgMHgwIH0KKwl7MHgwZjAsIC8qIENsb3NlZCBDYXB0aW9uLCBOVFNDICovCisJCXtWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwyMSwyMSwxfSwKKwkJeyAweGFhLCAweDJhLCAweGZmLCAweDNmLCAweDA0LCAweDUxLCAweDZlLCAweDAyLAorCQkgIDB4NjksIDB4OGMsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAgfQogCX0sCi0JezB4MTEwLCAvKiBXU1MsIFBBTC9TRUNBTSA2ICovCi0JCXsgMHg1YiwgMHg1NSwgMHhjNSwgMHhmZiAsIDB4MCwgMHg3MSwgMHg2ZSwgMHg0MiwgMHhhNiwgMHhjZCwgMHgwZiwgMHgwLCAweDAsIDB4MCwgMHgzYSwgMHgwIH0KKwl7MHgxMTAsIC8qIFdpZGUgU2NyZWVuIFNpZ25hbCwgUEFML1NFQ0FNICovCisJCXtWNEwyX1NMSUNFRF9XU1NfNjI1LDIzLDIzLDF9LAorCQl7IDB4NWIsIDB4NTUsIDB4YzUsIDB4ZmYsIDB4MDAsIDB4NzEsIDB4NmUsIDB4NDIsCisJCSAgMHhhNiwgMHhjZCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCB9CiAJfSwKLQl7MHgxMzAsIC8qIFdTUywgTlRTQyBDICovCi0JCXsgMHgzOCwgMHgwMCwgMHgzZiwgMHgwMCAsIDB4MCwgMHg3MSwgMHg2ZSwgMHg0MywgMHg2OSwgMHg3YywgMHgwOCwgMHgwLCAweDAsIDB4MCwgMHgzOSwgMHgwIH0KKwl7MHgxMzAsIC8qIFdpZGUgU2NyZWVuIFNpZ25hbCwgTlRTQyBDICovCisJCXtWNEwyX1NMSUNFRF9XU1NfNTI1LDIwLDIwLDF9LAorCQl7IDB4MzgsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4NzEsIDB4NmUsIDB4NDMsCisJCSAgMHg2OSwgMHg3YywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCB9CiAJfSwKLQl7MHgxNTAsIC8qIFZJVEMsIFBBTC9TRUNBTSA2ICovCi0JCXsgMHgwLCAweDAsIDB4MCwgMHgwICwgMHgwLCAweDhmLCAweDZkLCAweDQ5LCAweGE2LCAweDg1LCAweDA4LCAweDAsIDB4MCwgMHgwLCAweDRjLCAweDAgfQorCXsweDE1MCwgLyogVmVydGljYWwgSW50ZXJ2YWwgVGltZWNvZGUgKFZJVEMpLCBQQUwvU0VDQU0gKi8KKwkJe1Y0bDJfU0xJQ0VEX1ZJVENfNjI1LDYsMjIsMH0sCisJCXsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg2ZCwgMHg0OSwKKwkJICAweGE2LCAweDg1LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDAwIH0KIAl9LAotCXsweDE3MCwgLyogVklUQywgTlRTQyA2ICovCi0JCXsgMHgwLCAweDAsIDB4MCwgMHgwICwgMHgwLCAweDhmLCAweDZkLCAweDQ5LCAweDY5LCAweDk0LCAweDA4LCAweDAsIDB4MCwgMHgwLCAweDRjLCAweDAgfQorCXsweDE3MCwgLyogVmVydGljYWwgSW50ZXJ2YWwgVGltZWNvZGUgKFZJVEMpLCBOVFNDICovCisJCXtWNGwyX1NMSUNFRF9WSVRDXzUyNSwxMCwyMCwwfSwKKwkJeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhmLCAweDZkLCAweDQ5LAorCQkgIDB4NjksIDB4OTQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MDAgfQogCX0sCisJezB4MTkwLCAvKiBWaWRlbyBQcm9ncmFtIFN5c3RlbSAoVlBTKSwgUEFMICovCisJCXtWNEwyX1NMSUNFRF9WUFMsMTYsMTYsMH0sCisJCXsgMHhhYSwgMHhhYSwgMHhmZiwgMHhmZiwgMHhiYSwgMHhjZSwgMHgyYiwgMHgwZCwKKwkJICAweGE2LCAweGRhLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAwIH0KKwl9LAorCS8qIDB4MWQwIFVzZXIgcHJvZ3JhbW1hYmxlICovCisKKwkvKiBFbmQgb2Ygc3RydWN0ICovCiAJeyAodTE2KS0xIH0KIH07CiAKIHN0YXRpYyBpbnQgdHZwNTE1MF93cml0ZV9pbml0dGFiKHN0cnVjdCBpMmNfY2xpZW50ICpjLAotCQkJCSBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSAqcmVncykKKwkJCQljb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSAqcmVncykKIHsKIAl3aGlsZSAocmVncy0+cmVnICE9IDB4ZmYpIHsKIAkJdHZwNTE1MF93cml0ZShjLCByZWdzLT5yZWcsIHJlZ3MtPnZhbHVlKTsKQEAgLTY4NiwxNSArNTgyLDE1IEBACiB9CiAKIHN0YXRpYyBpbnQgdHZwNTE1MF92ZHBfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqYywKLQkJCQkgY29uc3Qgc3RydWN0IGkyY192YmlfcmFtX3ZhbHVlICpyZWdzKQorCQkJCWNvbnN0IHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qIERpc2FibGUgRnVsbCBGaWVsZCAqLwotCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQV8xLCAwKTsKKwl0dnA1MTUwX3dyaXRlKGMsIFRWUDUxNTBfRlVMTF9GSUVMRF9FTkEsIDApOwogCiAJLyogQmVmb3JlIHByb2dyYW1taW5nLCBMaW5lIG1vZGUgc2hvdWxkIGJlIGF0IDB4ZmYgKi8KLQlmb3IgKGk9VFZQNTE1MF9GVUxMX0ZJRUxEX0VOQV8yOyBpPD1UVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDQ7IGkrKykKKwlmb3IgKGk9VFZQNTE1MF9MSU5FX01PREVfSU5JOyBpPD1UVlA1MTUwX0xJTkVfTU9ERV9FTkQ7IGkrKykKIAkJdHZwNTE1MF93cml0ZShjLCBpLCAweGZmKTsKIAogCS8qIExvYWQgUmFtIFRhYmxlICovCkBAIC03MTAsNiArNjA2LDExNyBAQAogCXJldHVybiAwOwogfQogCisvKiBGaWxscyBWQkkgY2FwYWJpbGl0aWVzIGJhc2VkIG9uIGkyY192YmlfcmFtX3ZhbHVlIHN0cnVjdCAqLworc3RhdGljIHZvaWQgdHZwNTE1MF92YmlfZ2V0X2NhcChjb25zdCBzdHJ1Y3QgaTJjX3ZiaV9yYW1fdmFsdWUgKnJlZ3MsCisJCQkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKmNhcCkKK3sKKwlpbnQgbGluZTsKKworCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKKworCXdoaWxlIChyZWdzLT5yZWcgIT0gKHUxNiktMSApIHsKKwkJZm9yIChsaW5lPXJlZ3MtPnR5cGUuaW5pX2xpbmU7bGluZTw9cmVncy0+dHlwZS5lbmRfbGluZTtsaW5lKyspIHsKKwkJCWNhcC0+c2VydmljZV9saW5lc1swXVtsaW5lXSB8PSByZWdzLT50eXBlLnZiaV90eXBlOworCQl9CisJCWNhcC0+c2VydmljZV9zZXQgfD0gcmVncy0+dHlwZS52YmlfdHlwZTsKKworCQlyZWdzKys7CisJfQorfQorCisvKiBTZXQgdmJpIHByb2Nlc3NpbmcKKyAqIHR5cGUgLSBvbmUgb2YgdHZwNTE1MF92YmlfdHlwZXMKKyAqIGxpbmUgLSBsaW5lIHRvIGdhdGhlciBkYXRhCisgKiBmaWVsZHM6IGJpdCAwIGZpZWxkMSwgYml0IDEsIGZpZWxkMgorICogZmxhZ3MgKGRlZmF1bHQ9MHhmMCkgaXMgYSBiaXRtYXNrLCB3ZXJlIHNldCBtZWFuczoKKyAqCWJpdCA3OiBlbmFibGUgZmlsdGVyaW5nIG51bGwgYnl0ZXMgb24gQ0MKKyAqCWJpdCA2OiBzZW5kIGRhdGEgYWxzbyB0byBGSUZPCisgKgliaXQgNTogZG9uJ3QgYWxsb3cgZGF0YSB3aXRoIGVycm9ycyBvbiBGSUZPCisgKgliaXQgNDogZW5hYmxlIEVDQyB3aGVuIHBvc3NpYmxlCisgKiBwaXhfYWxpZ24gPSBwaXggYWxpZ25tZW50OgorICoJTFNCID0gZmllbGQxCisgKglNU0IgPSBmaWVsZDIKKyAqLworc3RhdGljIGludCB0dnA1MTUwX3NldF92Ymkoc3RydWN0IGkyY19jbGllbnQgKmMsCisJCQljb25zdCBzdHJ1Y3QgaTJjX3ZiaV9yYW1fdmFsdWUgKnJlZ3MsCisJCQl1bnNpZ25lZCBpbnQgdHlwZSx1OCBmbGFncywgaW50IGxpbmUsCisJCQljb25zdCBpbnQgZmllbGRzKQoreworCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXY0bDJfc3RkX2lkIHN0ZD1kZWNvZGVyLT5ub3JtOworCXU4IHJlZzsKKwlpbnQgcG9zPTA7CisKKwlpZiAoc3RkID09IFY0TDJfU1REX0FMTCkgeworCQl0dnA1MTUwX2VycigiVkJJIGNhbid0IGJlIGNvbmZpZ3VyZWQgd2l0aG91dCBrbm93aW5nIG51bWJlciBvZiBsaW5lc1xuIik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc3RkICYmIFY0TDJfU1REXzYyNV81MCkgeworCQkvKiBEb24ndCBmb2xsb3cgTlRTQyBMaW5lIG51bWJlciBjb252ZW5zaW9uICovCisJCWxpbmUgKz0gMzsKKwl9CisKKwlpZiAobGluZTw2fHxsaW5lPjI3KQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChyZWdzLT5yZWcgIT0gKHUxNiktMSApIHsKKwkJaWYgKCh0eXBlICYgcmVncy0+dHlwZS52YmlfdHlwZSkgJiYKKwkJICAgIChsaW5lPj1yZWdzLT50eXBlLmluaV9saW5lKSAmJgorCQkgICAgKGxpbmU8PXJlZ3MtPnR5cGUuZW5kX2xpbmUpKSB7CisJCQl0eXBlPXJlZ3MtPnR5cGUudmJpX3R5cGU7CisJCQlicmVhazsKKwkJfQorCisJCXJlZ3MrKzsKKwkJcG9zKys7CisJfQorCWlmIChyZWdzLT5yZWcgPT0gKHUxNiktMSkKKwkJcmV0dXJuIDA7CisKKwl0eXBlPXBvcyB8IChmbGFncyAmIDB4ZjApOworCXJlZz0oKGxpbmUtNik8PDEpK1RWUDUxNTBfTElORV9NT0RFX0lOSTsKKworCWlmIChmaWVsZHMmMSkgeworCQl0dnA1MTUwX3dyaXRlKGMsIHJlZywgdHlwZSk7CisJfQorCisJaWYgKGZpZWxkcyYyKSB7CisJCXR2cDUxNTBfd3JpdGUoYywgcmVnKzEsIHR5cGUpOworCX0KKworCXJldHVybiB0eXBlOworfQorCitzdGF0aWMgaW50IHR2cDUxNTBfZ2V0X3ZiaShzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCWNvbnN0IHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSAqcmVncywgaW50IGxpbmUpCit7CisJc3RydWN0IHR2cDUxNTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJdjRsMl9zdGRfaWQgc3RkPWRlY29kZXItPm5vcm07CisJdTggcmVnOworCWludCBwb3MsIHR5cGU9MDsKKworCWlmIChzdGQgPT0gVjRMMl9TVERfQUxMKSB7CisJCXR2cDUxNTBfZXJyKCJWQkkgY2FuJ3QgYmUgY29uZmlndXJlZCB3aXRob3V0IGtub3dpbmcgbnVtYmVyIG9mIGxpbmVzXG4iKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzdGQgJiYgVjRMMl9TVERfNjI1XzUwKSB7CisJCS8qIERvbid0IGZvbGxvdyBOVFNDIExpbmUgbnVtYmVyIGNvbnZlbnNpb24gKi8KKwkJbGluZSArPSAzOworCX0KKworCWlmIChsaW5lPDZ8fGxpbmU+MjcpCisJCXJldHVybiAwOworCisJcmVnPSgobGluZS02KTw8MSkrVFZQNTE1MF9MSU5FX01PREVfSU5JOworCisJcG9zPXR2cDUxNTBfcmVhZChjLCByZWcpJjB4MGY7CisJaWYgKHBvczwweDBmKQorCQl0eXBlPXJlZ3NbcG9zXS50eXBlLnZiaV90eXBlOworCisJcG9zPXR2cDUxNTBfcmVhZChjLCByZWcrMSkmMHgwZjsKKwlpZiAocG9zPDB4MGYpCisJCXR5cGV8PXJlZ3NbcG9zXS50eXBlLnZiaV90eXBlOworCisJcmV0dXJuIHR5cGU7Cit9CiBzdGF0aWMgaW50IHR2cDUxNTBfc2V0X3N0ZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdjRsMl9zdGRfaWQgc3RkKQogewogCXN0cnVjdCB0dnA1MTUwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwpAQCAtODU0LDYgKzg2MSw2OSBAQAogCQkqKHY0bDJfc3RkX2lkICopYXJnID0gZGVjb2Rlci0+bm9ybTsKIAkJYnJlYWs7CiAKKwljYXNlIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKmNhcCA9IGFyZzsKKwkJdHZwNTE1MF9kYmcoMSwgIlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQXG4iKTsKKworCQl0dnA1MTUwX3ZiaV9nZXRfY2FwKHZiaV9yYW1fZGVmYXVsdCwgY2FwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQ7CisJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzdmJpOworCQlpbnQgaTsKKworCQlmbXQgPSBhcmc7CisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJCWlmIChzdmJpLT5zZXJ2aWNlX3NldCAhPSAwKSB7CisJCQlmb3IgKGkgPSAwOyBpIDw9IDIzOyBpKyspIHsKKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKworCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV09dHZwNTE1MF9zZXRfdmJpKGMsCisJCQkJCSB2YmlfcmFtX2RlZmF1bHQsCisJCQkJCSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldLDB4ZjAsaSwzKTsKKwkJCX0KKwkJCS8qIEVuYWJsZXMgRklGTyAqLworCQkJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX0ZJRk9fT1VUX0NUUkwsMSk7CisJCX0gZWxzZSB7CisJCQkvKiBEaXNhYmxlcyBGSUZPKi8KKwkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9GSUZPX09VVF9DVFJMLDApOworCisJCQkvKiBEaXNhYmxlIEZ1bGwgRmllbGQgKi8KKwkJCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQSwgMCk7CisKKwkJCS8qIERpc2FibGUgTGluZSBtb2RlcyAqLworCQkJZm9yIChpPVRWUDUxNTBfTElORV9NT0RFX0lOSTsgaTw9VFZQNTE1MF9MSU5FX01PREVfRU5EOyBpKyspCisJCQkJdHZwNTE1MF93cml0ZShjLCBpLCAweGZmKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdDsKKwkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7CisKKwkJaW50IGksIG1hc2s9MDsKKworCQlmbXQgPSBhcmc7CisJCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKKworCQlmb3IgKGkgPSAwOyBpIDw9IDIzOyBpKyspIHsKKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV09dHZwNTE1MF9nZXRfdmJpKGMsCisJCQkJdmJpX3JhbV9kZWZhdWx0LGkpOworCQkJbWFza3w9c3ZiaS0+c2VydmljZV9saW5lc1swXVtpXTsKKwkJfQorCQlzdmJpLT5zZXJ2aWNlX3NldD1tYXNrOworCQlicmVhazsKKwl9CisKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiAJY2FzZSBWSURJT0NfSU5UX0dfUkVHSVNURVI6CiAJewpAQCAtODc4LDYgKzk0OCw3IEBACiAJfQogI2VuZGlmCiAKKwljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgogCWNhc2UgREVDT0RFUl9EVU1QOgogCQlkdW1wX3JlZyhjKTsKIAkJYnJlYWs7CkBAIC0xMDk3LDcgKzExNjgsNyBAQAogCiAJcnYgPSBpMmNfYXR0YWNoX2NsaWVudChjKTsKIAotCWNvcmUtPm5vcm0gPSBWNEwyX1NURF9BTEw7CisJY29yZS0+bm9ybSA9IFY0TDJfU1REX0FMTDsJLyogRGVmYXVsdCBpcyBhdXRvZGV0ZWN0ICovCiAJY29yZS0+aW5wdXQgPSAyOwogCWNvcmUtPmVuYWJsZSA9IDE7CiAJY29yZS0+YnJpZ2h0ID0gMzI3Njg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTBfcmVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTBfcmVnLmgKaW5kZXggY2Q0NWMxZC4uNDI0MDA0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwX3JlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MF9yZWcuaApAQCAtMSwzICsxLDEwIEBACisvKgorICogdHZwNTE1MCAtIFRleGFzIEluc3RydW1lbnRzIFRWUDUxNTBBL0FNMSB2aWRlbyBkZWNvZGVyIHJlZ2lzdGVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA2IE1hdXJvIENhcnZhbGhvIENoZWhhYiAobWNoZWhhYkBpbmZyYWRlYWQub3JnKQorICogVGhpcyBjb2RlIGlzIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCisgKi8KKwogI2RlZmluZSBUVlA1MTUwX1ZEX0lOX1NSQ19TRUxfMSAgICAgIDB4MDAgLyogVmlkZW8gaW5wdXQgc291cmNlIHNlbGVjdGlvbiAjMSAqLwogI2RlZmluZSBUVlA1MTUwX0FOQUxfQ0hMX0NUTCAgICAgICAgIDB4MDEgLyogQW5hbG9nIGNoYW5uZWwgY29udHJvbHMgKi8KICNkZWZpbmUgVFZQNTE1MF9PUF9NT0RFX0NUTCAgICAgICAgICAweDAyIC8qIE9wZXJhdGlvbiBtb2RlIGNvbnRyb2xzICovCkBAIC02NCw0OSArNzEsMzIgQEAKICNkZWZpbmUgVFZQNTE1MF9TVEFUVVNfUkVHXzQgICAgICAgIDB4OGIgLyogU3RhdHVzIHJlZ2lzdGVyICM0ICovCiAjZGVmaW5lIFRWUDUxNTBfU1RBVFVTX1JFR181ICAgICAgICAweDhjIC8qIFN0YXR1cyByZWdpc3RlciAjNSAqLwogLyogUmVzZXJ2ZWQJOERoLThGaCAqLwotI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfUkVHMSAgICAgICAgMHg5MCAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfUkVHMiAgICAgICAgMHg5MSAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfUkVHMyAgICAgICAgMHg5MiAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfUkVHNCAgICAgICAgMHg5MyAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1dTU19EQVRBX1JFRzEgICAgICAgMFg5NCAvKiBXU1MgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9XU1NfREFUQV9SRUcyICAgICAgIDBYOTUgLyogV1NTIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfV1NTX0RBVEFfUkVHMyAgICAgICAwWDk2IC8qIFdTUyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1dTU19EQVRBX1JFRzQgICAgICAgMFg5NyAvKiBXU1MgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9XU1NfREFUQV9SRUc1ICAgICAgIDBYOTggLyogV1NTIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfV1NTX0RBVEFfUkVHNiAgICAgICAwWDk5IC8qIFdTUyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzEgICAgICAgMHg5YSAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUcyICAgICAgIDB4OWIgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHMyAgICAgICAweDljIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzQgICAgICAgMHg5ZCAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUc1ICAgICAgIDB4OWUgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHNiAgICAgICAweDlmIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzcgICAgICAgMHhhMCAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUc4ICAgICAgIDB4YTEgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHOSAgICAgICAweGEyIC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzEwICAgICAgMHhhMyAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9WUFNfREFUQV9SRUcxMSAgICAgIDB4YTQgLyogVlBTIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfVlBTX0RBVEFfUkVHMTIgICAgICAweGE1IC8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX1JFRzEzICAgICAgMHhhNiAvKiBWUFMgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHMSAgICAgIDB4YTcgLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUcyICAgICAgMHhhOCAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzMgICAgICAweGE5IC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNCAgICAgIDB4YWEgLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUc1ICAgICAgMHhhYiAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzYgICAgICAweGFjIC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9WSVRDX0RBVEFfUkVHNyAgICAgIDB4YWQgLyogVklUQyBkYXRhIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX1ZJVENfREFUQV9SRUc4ICAgICAgMHhhZSAvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX1JFRzkgICAgICAweGFmIC8qIFZJVEMgZGF0YSByZWdpc3RlcnMgKi8KKyAvKiBDbG9zZWQgY2FwdGlvbiBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfSU5JICAgICAgICAgMHg5MAorI2RlZmluZSBUVlA1MTUwX0NDX0RBVEFfRU5EICAgICAgICAgMHg5MworCisgLyogV1NTIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfV1NTX0RBVEFfSU5JICAgICAgICAweDk0CisjZGVmaW5lIFRWUDUxNTBfV1NTX0RBVEFfRU5EICAgICAgICAweDk5CisKKy8qIFZQUyBkYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX0lOSSAgICAgICAgMHg5YQorI2RlZmluZSBUVlA1MTUwX1ZQU19EQVRBX0VORCAgICAgICAgMHhhNgorCisvKiBWSVRDIGRhdGEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX0lOSSAgICAgICAweGE3CisjZGVmaW5lIFRWUDUxNTBfVklUQ19EQVRBX0VORCAgICAgICAweGFmCisKICNkZWZpbmUgVFZQNTE1MF9WQklfRklGT19SRUFEX0RBVEEgIDB4YjAgLyogVkJJIEZJRk8gcmVhZCBkYXRhICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMSAgICAweGIxIC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMiAgICAweGIyIC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfMyAgICAweGIzIC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfNCAgICAweGI0IC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzFfNSAgICAweGI1IC8qIFRlbGV0ZXh0IGZpbHRlciAxICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMSAgICAweGI2IC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMiAgICAweGI3IC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfMyAgICAweGI4IC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfNCAgICAweGI5IC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCi0jZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMXzJfNSAgICAweGJhIC8qIFRlbGV0ZXh0IGZpbHRlciAyICovCisKKy8qIFRlbGV0ZXh0IGZpbHRlciAxICovCisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMMV9JTkkgIDB4YjEKKyNkZWZpbmUgVFZQNTE1MF9URUxFVEVYVF9GSUwxX0VORCAgMHhiNQorCisvKiBUZWxldGV4dCBmaWx0ZXIgMiAqLworI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTDJfSU5JICAweGI2CisjZGVmaW5lIFRWUDUxNTBfVEVMRVRFWFRfRklMMl9FTkQgIDB4YmEKKwogI2RlZmluZSBUVlA1MTUwX1RFTEVURVhUX0ZJTF9FTkEgICAgMHhiYiAvKiBUZWxldGV4dCBmaWx0ZXIgZW5hYmxlICovCiAvKiBSZXNlcnZlZAlCQ2gtQkZoICovCiAjZGVmaW5lIFRWUDUxNTBfSU5UX1NUQVRVU19SRUdfQSAgICAweGMwIC8qIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgQSAqLwpAQCAtMTI0LDUwICsxMTQsMTEgQEAKICNkZWZpbmUgVFZQNTE1MF9QSVhfQUxJR05fUkVHX0hJR0ggIDB4Y2MgLyogUGl4ZWwgYWxpZ25tZW50IHJlZ2lzdGVyIGhpZ2ggYnl0ZSAqLwogI2RlZmluZSBUVlA1MTUwX0ZJRk9fT1VUX0NUUkwgICAgICAgMHhjZCAvKiBGSUZPIG91dHB1dCBjb250cm9sICovCiAvKiBSZXNlcnZlZAlDRWggKi8KLSNkZWZpbmUgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQV8xICAgIDB4Y2YgLyogRnVsbCBmaWVsZCBlbmFibGUgMSAqLwotI2RlZmluZSBUVlA1MTUwX0ZVTExfRklFTERfRU5BXzIgICAgMHhkMCAvKiBGdWxsIGZpZWxkIGVuYWJsZSAyICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xICAgICAweGQxIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIgICAgIDB4ZDIgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMyAgICAgMHhkMyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR180ICAgICAweGQ0IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzUgICAgIDB4ZDUgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNiAgICAgMHhkNiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR183ICAgICAweGQ3IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzggICAgIDB4ZDggLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfOSAgICAgMHhkOSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMCAgICAweGRhIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzExICAgIDB4ZGIgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTIgICAgMHhkYyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xMyAgICAweGRkIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE0ICAgIDB4ZGUgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTUgICAgMHhkZiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xNiAgICAweGUwIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzE3ICAgIDB4ZTEgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMTggICAgMHhlMiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18xOSAgICAweGUzIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIwICAgIDB4ZTQgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjEgICAgMHhlNSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yMiAgICAweGU2IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzIzICAgIDB4ZTcgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjQgICAgMHhlOCAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yNSAgICAweGU5IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzI3ICAgIDB4ZWEgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMjggICAgMHhlYiAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18yOSAgICAweGVjIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMwICAgIDB4ZWQgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzEgICAgMHhlZSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zMiAgICAweGVmIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzMzICAgIDB4ZjAgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzQgICAgMHhmMSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zNSAgICAweGYyIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM2ICAgIDB4ZjMgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfMzcgICAgMHhmNCAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR18zOCAgICAweGY1IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzM5ICAgIDB4ZjYgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDAgICAgMHhmNyAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR180MSAgICAweGY4IC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgVFZQNTE1MF9MSU5FX01PREVfUkVHXzQyICAgIDB4ZjkgLyogTGluZSBtb2RlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBUVlA1MTUwX0xJTkVfTU9ERV9SRUdfNDMgICAgMHhmYSAvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX1JFR180NCAgICAweGZiIC8qIExpbmUgbW9kZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVFZQNTE1MF9GVUxMX0ZJRUxEX0VOQSAgICAgIDB4Y2YgLyogRnVsbCBmaWVsZCBlbmFibGUgMSAqLworCisvKiBMaW5lIG1vZGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX0lOSSAgICAgICAweGQwCisjZGVmaW5lIFRWUDUxNTBfTElORV9NT0RFX0VORCAgICAgICAweGZiCisKICNkZWZpbmUgVFZQNTE1MF9GVUxMX0ZJRUxEX01PREVfUkVHIDB4ZmMgLyogRnVsbCBmaWVsZCBtb2RlIHJlZ2lzdGVyICovCiAvKiBSZXNlcnZlZAlGRGgtRkZoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDQxMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9NYWtlZmlsZQpAQCAtMCwwICsxLDQgQEAKK29iai0kKENPTkZJR19VU0JfSUJNQ0FNKSAgICAgICAgKz0gaWJtY2FtLm8gdXNidmlkZW8ubyB1bHRyYWNhbS5vCitvYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IGtvbmljYXdjLm8gdXNidmlkZW8ubworb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB2aWNhbS5vIHVzYnZpZGVvLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvaWJtY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2libWNhbS5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL2libWNhbS5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2libWNhbS5jCmluZGV4IGE0MmMyMjIuLjc2Zjc3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL2libWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vaWJtY2FtLmMKQEAgLTEzMDAsMTEgKzEzMDAsMTEgQEAKIC8qCiAgKiBpYm1jYW1fbW9kZWwzX1BhY2tldDEoKQogICoKLSAqIDAwXzAwNzhfMDEyZAkKKyAqIDAwXzAwNzhfMDEyZAogICogMDBfMDA5N18wMTJmCi0gKiAwMF9kMTQxXzAxMjQJCisgKiAwMF9kMTQxXzAxMjQKICAqIDAwXzAwOTZfMDEyNwotICogMDBfZmVhOF8wMTI0CQorICogMDBfZmVhOF8wMTI0CiAqLwogc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsM19QYWNrZXQxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgdjEsIHVuc2lnbmVkIHNob3J0IHYyKQogewpAQCAtMjY4Nyw3ICsyNjg3LDcgQEAKIAkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNyk7CiAJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOwogCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKLQkJYnJlYWs7IAorCQlicmVhazsKIAl9CiAJdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7CiB9CkBAIC0zMjM4LDcgKzMyMzgsNyBAQAogCQl7MCwgMHgwMDYyLCAweDAxMDd9LAogCQl7MCwgMHgwMDAzLCAweDAxMTF9LAogCX07Ci0jZGVmaW5lIE5VTV9JTklUX0RBVEEgCisjZGVmaW5lIE5VTV9JTklUX0RBVEEKIAogCXVuc2lnbmVkIHNob3J0IGNvbXByZXNzaW9uID0gMDsJLyogMD1ub25lLCA3PWJlc3QgZnJhbWUgcmF0ZSAgKi8KIAlpbnQgZl9yYXRlOyAvKiAwPUZhc3Rlc3QgNz1zbG93ZXN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9rb25pY2F3Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL2tvbmljYXdjLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYwppbmRleCBlMmVkZTU4Li5jMTFmNWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9rb25pY2F3Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYwpAQCAtMzYsNyArMzYsNyBAQAogZW51bSBjdHJsX3JlcSB7CiAJU2V0V2hpdGViYWwJPSAweDAxLAogCVNldEJyaWdodG5lc3MJPSAweDAyLAotICAgICAgICBTZXRTaGFycG5lc3MJPSAweDAzLAorCVNldFNoYXJwbmVzcwk9IDB4MDMsCiAJU2V0Q29udHJhc3QJPSAweDA0LAogCVNldFNhdHVyYXRpb24JPSAweDA1LAogfTsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlTSVpFXzE2MFgxMzYJPSAxLAogCVNJWkVfMTc2WDE0NAk9IDIsCiAJU0laRV8zMjBYMjQwCT0gMywKLQkKKwogfTsKIAogI2RlZmluZSBNQVhfRlJBTUVfU0laRQlTSVpFXzMyMFgyNDAKQEAgLTY5LDcgKzY5LDcgQEAKIC8qIFNvbWUgZGVmYXVsdCB2YWx1ZXMgZm9yIGluaXRpYWwgY2FtZXJhIHNldHRpbmdzLAogICAgY2FuIGJlIHNldCBieSBtb2Rwcm9iZSAqLwogCi1zdGF0aWMgaW50IHNpemU7CQorc3RhdGljIGludCBzaXplOwogc3RhdGljIGludCBzcGVlZCA9IDY7CQkvKiBTcGVlZCAoZnBzKSAwIChzbG93ZXN0KSB0byA2IChmYXN0ZXN0KSAqLwogc3RhdGljIGludCBicmlnaHRuZXNzID0JTUFYX0JSSUdIVE5FU1MvMjsKIHN0YXRpYyBpbnQgY29udHJhc3QgPQlNQVhfQ09OVFJBU1QvMjsKQEAgLTEzMiwyNCArMTMyLDI0IEBACiAKIHN0YXRpYyBpbnQga29uaWNhd2NfY3RybF9tc2coc3RydWN0IHV2ZCAqdXZkLCB1OCBkaXIsIHU4IHJlcXVlc3QsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB2b2lkICpidWYsIGludCBsZW4pCiB7Ci0gICAgICAgIGludCByZXR2YWwgPSB1c2JfY29udHJvbF9tc2codXZkLT5kZXYsCisJaW50IHJldHZhbCA9IHVzYl9jb250cm9sX21zZyh1dmQtPmRldiwKIAkJZGlyID8gdXNiX3JjdmN0cmxwaXBlKHV2ZC0+ZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZSh1dmQtPmRldiwgMCksCiAJCSAgICByZXF1ZXN0LCAweDQwIHwgZGlyLCB2YWx1ZSwgaW5kZXgsIGJ1ZiwgbGVuLCAxMDAwKTsKLSAgICAgICAgcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKIH0KIAogCiBzdGF0aWMgaW5saW5lIHZvaWQga29uaWNhd2NfY2FtZXJhX29uKHN0cnVjdCB1dmQgKnV2ZCkKIHsKLSAgICAgICAgREVCVUcoMCwgImNhbWVyYSBvbiIpOwotICAgICAgICBrb25pY2F3Y19zZXRfbWlzYyh1dmQsIDB4MiwgMSwgMHgwYik7CisJREVCVUcoMCwgImNhbWVyYSBvbiIpOworCWtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAxLCAweDBiKTsKIH0KIAogCiBzdGF0aWMgaW5saW5lIHZvaWQga29uaWNhd2NfY2FtZXJhX29mZihzdHJ1Y3QgdXZkICp1dmQpCiB7Ci0gICAgICAgIERFQlVHKDAsICJjYW1lcmEgb2ZmIik7Ci0gICAgICAgIGtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAwLCAweDBiKTsKKwlERUJVRygwLCAiY2FtZXJhIG9mZiIpOworCWtvbmljYXdjX3NldF9taXNjKHV2ZCwgMHgyLCAwLCAweDBiKTsKIH0KIAogCkBAIC0zMTcsNyArMzE3LDcgQEAKIAkJCWJ1dHRvbiA9ICEhKHN0cyAmIDB4NDApOwogCQkJc3RzICY9IH4weDQwOwogCQl9Ci0JCQorCiAJCS8qIHdvcmsgb3V0IHRoZSBidXR0b24gc3RhdHVzLCBidXQgZG9uJ3QgZG8KIAkJICAgYW55dGhpbmcgd2l0aCBpdCBmb3Igbm93ICovCiAKQEAgLTMzMSw3ICszMzEsNyBAQAogCQkJZGlzY2FyZCsrOwogCQkJY29udGludWU7CiAJCX0KLQkJCisKIAkJaWYoKHN0cyA+IDB4MDEpICYmIChzdHMgPCAweDgwKSkgewogCQkJaW5mbygidW5rbm93biBzdGF0dXMgJTIuMngiLCBzdHMpOwogCQkJYmFkKys7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAkJCQlERUJVRygyLCAiZm91bmQgaW5pdGlhbCBpbWFnZSIpOwogCQkJCWNhbS0+bGFzdGZyYW1lID0gLTE7CiAJCQl9Ci0JCQkJCisKIAkJCW1hcmtlclszXSA9IHN0cyAmIDB4N0Y7CiAJCQlSaW5nUXVldWVfRW5xdWV1ZSgmdXZkLT5kcCwgbWFya2VyLCA0KTsKIAkJCXRvdGxlbiArPSA0OwpAQCAtMzY3LDE2ICszNjcsMTYgQEAKIAogc3RhdGljIHZvaWQgcmVzdWJtaXRfdXJiKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVyYiAqdXJiKQogewotICAgICAgICBpbnQgaSwgcmV0OwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlJBTUVTX1BFUl9ERVNDOyBpKyspIHsKLSAgICAgICAgICAgICAgICB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgdXJiLT5kZXYgPSB1dmQtPmRldjsKLSAgICAgICAgdXJiLT5zdGF0dXMgPSAwOworCWludCBpLCByZXQ7CisJZm9yIChpID0gMDsgaSA8IEZSQU1FU19QRVJfREVTQzsgaSsrKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKwl9CisJdXJiLT5kZXYgPSB1dmQtPmRldjsKKwl1cmItPnN0YXR1cyA9IDA7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlERUJVRygzLCAic3VibWl0dGluZyB1cmIgb2YgbGVuZ3RoICVkIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLSAgICAgICAgaWYocmV0KQotICAgICAgICAgICAgICAgIGVycigidXNiX3N1Ym1pdF91cmIgZXJyb3IgKCVkKSIsIHJldCk7CisJaWYocmV0KQorCQllcnIoInVzYl9zdWJtaXRfdXJiIGVycm9yICglZCkiLCByZXQpOwogCiB9CiAKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCX0KIAogCWNhbS0+bGFzdF9kYXRhX3VyYiA9IE5VTEw7Ci0JCisKIAkvKiBTdWJtaXQgYWxsIFVSQnMgKi8KIAlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgewogCQllcnJGbGFnID0gdXNiX3N1Ym1pdF91cmIoY2FtLT5zdHNfdXJiW2ldLCBHRlBfS0VSTkVMKTsKQEAgLTUzOSw3ICs1MzksNyBAQAogCiAKIHN0YXRpYyB2b2lkIGtvbmljYXdjX3Byb2Nlc3NfaXNvYyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCi17CQorewogCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOwogCWludCBtYXhsaW5lID0gY2FtLT5tYXhsaW5lOwogCWludCB5cGxhbmVzeiA9IGNhbS0+eXBsYW5lc3o7CkBAIC01ODMsMTMgKzU4MywxMyBAQAogCiAJaWYoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfU2Nhbm5pbmcpCiAJCXJldHVybjsKLQkJCisKIAkvKiBUcnkgdG8gbW92ZSBkYXRhIGZyb20gcXVldWUgaW50byBmcmFtZSBidWZmZXIKIAkgKiBXZSBnZXQgZGF0YSBpbiBibG9ja3Mgb2YgMzg0IGJ5dGVzIG1hZGUgdXAgb2Y6CiAJICogMjU2IFksIDY0IFUsIDY0IFYuCiAJICogVGhpcyBuZWVkcyB0byBiZSB3cml0dGVuIG91dCBhcyBhIFkgcGxhbmUsIGEgVSBwbGFuZSBhbmQgYSBWIHBsYW5lLgogCSAqLwotCQkKKwogCXdoaWxlICggZnJhbWUtPmN1cmxpbmUgPCBtYXhsaW5lICYmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSAzODQpKSB7CiAJCS8qIFkgKi8KIAkJUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGZyYW1lLT5kYXRhICsgKGZyYW1lLT5jdXJsaW5lICogMjU2KSwgMjU2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3VsdHJhY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VsdHJhY2FtLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvdWx0cmFjYW0uYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91bHRyYWNhbS5jCmluZGV4IDc1ZmY3NTUuLjEwYzU4YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3VsdHJhY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91bHRyYWNhbS5jCkBAIC0yMyw3ICsyMyw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJaW50IGluaXRpYWxpemVkOwkvKiBIYWQgd2UgYWxyZWFkeSBzZW50IGluaXQgc2VxdWVuY2U/ICovCiAJaW50IGNhbWVyYV9tb2RlbDsJLyogV2hhdCB0eXBlIG9mIElCTSBjYW1lcmEgd2UgZ290PyAqLwotICAgICAgICBpbnQgaGFzX2hkcjsKKwlpbnQgaGFzX2hkcjsKIH0gdWx0cmFjYW1fdDsKICNkZWZpbmUJVUxUUkFDQU1fVCh1dmQpCSgodWx0cmFjYW1fdCAqKSgodXZkKS0+dXNlcl9kYXRhKSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKaW5kZXggNjNhNzJlNS4uMTNiMzdjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKQEAgLTU3NCw3ICs1NzQsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiBKdXN0IHRoZSBibHVlIHNjcmVlbiAqLwogCQkJfQotCQkJCQorCiAJCQkqZisrID0gY2I7CiAJCQkqZisrID0gY2c7CiAJCQkqZisrID0gY3I7CkBAIC02OTAsMTQgKzY5MCwxMyBAQAogCX0KIAogCWJhc2Vfc2l6ZSA9IG51bV9jYW1zICogc2l6ZW9mKHN0cnVjdCB1dmQpICsgc2l6ZW9mKHN0cnVjdCB1c2J2aWRlbyk7Ci0JY2FtcyA9IChzdHJ1Y3QgdXNidmlkZW8gKikga21hbGxvYyhiYXNlX3NpemUsIEdGUF9LRVJORUwpOworCWNhbXMgPSAoc3RydWN0IHVzYnZpZGVvICopIGt6YWxsb2MoYmFzZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FtcyA9PSBOVUxMKSB7CiAJCWVycigiRmFpbGVkIHRvIGFsbG9jYXRlICVkLiBieXRlcyBmb3IgdXNidmlkZW8gc3RydWN0IiwgYmFzZV9zaXplKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRiZygiJXM6IEFsbG9jYXRlZCAkJXAgKCVkLiBieXRlcykgZm9yICVkLiBjYW1lcmFzIiwKIAkgICAgX19GVU5DVElPTl9fLCBjYW1zLCBiYXNlX3NpemUsIG51bV9jYW1zKTsKLQltZW1zZXQoY2FtcywgMCwgYmFzZV9zaXplKTsKIAogCS8qIENvcHkgY2FsbGJhY2tzLCBhcHBseSBkZWZhdWx0cyBmb3IgdGhvc2UgdGhhdCBhcmUgbm90IHNldCAqLwogCW1lbW1vdmUoJmNhbXMtPmNiLCBjYlRibCwgc2l6ZW9mKGNhbXMtPmNiKSk7CkBAIC03MTUsNyArNzE0LDcgQEAKIAljYW1zLT5tZF9tb2R1bGUgPSBtZDsKIAlpZiAoY2Ftcy0+bWRfbW9kdWxlID09IE5VTEwpCiAJCXdhcm4oIiVzOiBtb2R1bGUgPT0gTlVMTCEiLCBfX0ZVTkNUSU9OX18pOwotCWluaXRfTVVURVgoJmNhbXMtPmxvY2spOwkvKiB0byAxID09IGF2YWlsYWJsZSAqLworCW11dGV4X2luaXQoJmNhbXMtPmxvY2spOwkvKiB0byAxID09IGF2YWlsYWJsZSAqLwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jYW1zOyBpKyspIHsKIAkJc3RydWN0IHV2ZCAqdXAgPSAmY2Ftcy0+Y2FtW2ldOwpAQCAtODYzLDcgKzg2Miw3IEBACiAJaWYgKHV2ZC0+ZGVidWcgPiAwKQogCQlpbmZvKCIlcyglcC4pIiwgX19GVU5DVElPTl9fLCBpbnRmKTsKIAotCWRvd24oJnV2ZC0+bG9jayk7CisJbXV0ZXhfbG9jaygmdXZkLT5sb2NrKTsKIAl1dmQtPnJlbW92ZV9wZW5kaW5nID0gMTsgLyogTm93IGFsbCBJU08gZGF0YSB3aWxsIGJlIGlnbm9yZWQgKi8KIAogCS8qIEF0IHRoaXMgdGltZSB3ZSBhc2sgdG8gY2FuY2VsIG91dHN0YW5kaW5nIFVSQnMgKi8KQEAgLTg4Myw3ICs4ODIsNyBAQAogCQlpbmZvKCIlczogSW4gdXNlLCBkaXNjb25uZWN0IHBlbmRpbmcuIiwgX19GVU5DVElPTl9fKTsKIAllbHNlCiAJCXVzYnZpZGVvX0NhbWVyYVJlbGVhc2UodXZkKTsKLQl1cCgmdXZkLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnV2ZC0+bG9jayk7CiAJaW5mbygiVVNCIGNhbWVyYSBkaXNjb25uZWN0ZWQuIik7CiAKIAl1c2J2aWRlb19DbGllbnREZWNNb2RDb3VudCh1dmQpOwpAQCAtOTMwLDE5ICs5MjksMTkgQEAKIAkJZXJyKCJObyB1c2J2aWRlbyBoYW5kbGU/Iik7CiAJCXJldHVybiAtMTsKIAl9Ci0JZG93bigmY2Ftcy0+bG9jayk7CisJbXV0ZXhfbG9jaygmY2Ftcy0+bG9jayk7CiAJZm9yICh1ID0gMDsgdSA8IGNhbXMtPm51bV9jYW1lcmFzOyB1KyspIHsKIAkJc3RydWN0IHV2ZCAqdXZkID0gJmNhbXMtPmNhbVt1XTsKIAkJaWYgKCF1dmQtPnV2ZF91c2VkKSAvKiBUaGlzIG9uZSBpcyBmcmVlICovCiAJCXsKIAkJCXV2ZC0+dXZkX3VzZWQgPSAxOwkvKiBJbiB1c2Ugbm93ICovCi0JCQlpbml0X01VVEVYKCZ1dmQtPmxvY2spOwkvKiB0byAxID09IGF2YWlsYWJsZSAqLworCQkJbXV0ZXhfaW5pdCgmdXZkLT5sb2NrKTsJLyogdG8gMSA9PSBhdmFpbGFibGUgKi8KIAkJCXV2ZC0+ZGV2ID0gTlVMTDsKIAkJCXJ2ID0gdTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXVwKCZjYW1zLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmNhbXMtPmxvY2spOwogCXJldHVybiBydjsKIH0KIApAQCAtOTg0LDcgKzk4Myw3IEBACiAJLyogTm90IHJlbHlpbmcgdXBvbiBjYWxsZXIgd2UgaW5jcmVhc2UgbW9kdWxlIGNvdW50ZXIgb3Vyc2VsdmVzICovCiAJdXNidmlkZW9fQ2xpZW50SW5jTW9kQ291bnQodXZkKTsKIAotCWRvd24oJnV2ZC0+bG9jayk7CisJbXV0ZXhfbG9jaygmdXZkLT5sb2NrKTsKIAlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgewogCQl1dmQtPnNidWZbaV0udXJiID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOwogCQlpZiAodXZkLT5zYnVmW2ldLnVyYiA9PSBOVUxMKSB7CkBAIC0xMDA3LDcgKzEwMDYsNyBAQAogCSAqIHJldHVybiBjb250cm9sIHRvIHRoZSBjbGllbnQncyBwcm9iZSBmdW5jdGlvbiByaWdodCBub3cuCiAJICovCiBhbGxvY2F0ZV9kb25lOgotCXVwICgmdXZkLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnV2ZC0+bG9jayk7CiAJdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQodXZkKTsKIAlyZXR1cm4gdXZkOwogfQpAQCAtMTEyMSw3ICsxMTIwLDcgQEAKIAkJaW5mbygiJXMoJCVwKSIsIF9fRlVOQ1RJT05fXywgZGV2KTsKIAogCXVzYnZpZGVvX0NsaWVudEluY01vZENvdW50KHV2ZCk7Ci0JZG93bigmdXZkLT5sb2NrKTsKKwltdXRleF9sb2NrKCZ1dmQtPmxvY2spOwogCiAJaWYgKHV2ZC0+dXNlcikgewogCQllcnIoIiVzOiBTb21lb25lIHRyaWVkIHRvIG9wZW4gYW4gYWxyZWFkeSBvcGVuZWQgZGV2aWNlISIsIF9fRlVOQ1RJT05fXyk7CkBAIC0xMjAyLDcgKzEyMDEsNyBAQAogCQkJfQogCQl9CiAJfQotCXVwKCZ1dmQtPmxvY2spOworCW11dGV4X3VubG9jaygmdXZkLT5sb2NrKTsKIAlpZiAoZXJyQ29kZSAhPSAwKQogCQl1c2J2aWRlb19DbGllbnREZWNNb2RDb3VudCh1dmQpOwogCWlmICh1dmQtPmRlYnVnID4gMCkKQEAgLTEyMzEsNyArMTIzMCw3IEBACiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQogCQlpbmZvKCIlcygkJXApIiwgX19GVU5DVElPTl9fLCBkZXYpOwogCi0JZG93bigmdXZkLT5sb2NrKTsKKwltdXRleF9sb2NrKCZ1dmQtPmxvY2spOwogCUdFVF9DQUxMQkFDSyh1dmQsIHN0b3BEYXRhUHVtcCkodXZkKTsKIAl1c2J2aWRlb19ydmZyZWUodXZkLT5mYnVmLCB1dmQtPmZidWZfc2l6ZSk7CiAJdXZkLT5mYnVmID0gTlVMTDsKQEAgLTEyNDQsNyArMTI0Myw3IEBACiAKICNpZiBVU0JWSURFT19SRVBPUlRfU1RBVFMKIAl1c2J2aWRlb19SZXBvcnRTdGF0aXN0aWNzKHV2ZCk7Ci0jZW5kaWYgICAgCisjZW5kaWYKIAogCXV2ZC0+dXNlci0tOwogCWlmICh1dmQtPnJlbW92ZV9wZW5kaW5nKSB7CkBAIC0xMjUyLDcgKzEyNTEsNyBAQAogCQkJaW5mbygidXNidmlkZW9fdjRsX2Nsb3NlOiBGaW5hbCBkaXNjb25uZWN0LiIpOwogCQl1c2J2aWRlb19DYW1lcmFSZWxlYXNlKHV2ZCk7CiAJfQotCXVwKCZ1dmQtPmxvY2spOworCW11dGV4X3VubG9jaygmdXZkLT5sb2NrKTsKIAl1c2J2aWRlb19DbGllbnREZWNNb2RDb3VudCh1dmQpOwogCiAJaWYgKHV2ZC0+ZGVidWcgPiAxKQpAQCAtMTI5MSw3ICsxMjkwLDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJCWNhc2UgVklESU9DU0NIQU46Ci0JCXsJCisJCXsKIAkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOwogCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNDgsNyArMTM0Nyw3IEBACiAJCQl2dy0+Y2hyb21ha2V5ID0gMDsKIAkJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGdldEZQUykpCiAJCQkJdnctPmZsYWdzID0gR0VUX0NBTExCQUNLKHV2ZCwgZ2V0RlBTKSh1dmQpOwotCQkJZWxzZSAKKwkJCWVsc2UKIAkJCQl2dy0+ZmxhZ3MgPSAxMDsgLyogRklYTUU6IGRvIGJldHRlciEgKi8KIAkJCXJldHVybiAwOwogCQl9CkBAIC0xMzYwLDcgKzEzNTksNyBAQAogCQkJbWVtc2V0KHZtLCAwLCBzaXplb2YoKnZtKSk7CiAJCQl2bS0+c2l6ZSA9IHV2ZC0+bWF4X2ZyYW1lX3NpemUgKiBVU0JWSURFT19OVU1GUkFNRVM7CiAJCQl2bS0+ZnJhbWVzID0gVVNCVklERU9fTlVNRlJBTUVTOwotCQkJZm9yKGkgPSAwOyBpIDwgVVNCVklERU9fTlVNRlJBTUVTOyBpKyspIAorCQkJZm9yKGkgPSAwOyBpIDwgVVNCVklERU9fTlVNRlJBTUVTOyBpKyspCiAJCQkgIHZtLT5vZmZzZXRzW2ldID0gaSAqIHV2ZC0+bWF4X2ZyYW1lX3NpemU7CiAKIAkJCXJldHVybiAwOwpAQCAtMTQyNiw3ICsxNDI1LDcgQEAKIAogCQkJaWYgKCpmcmFtZU51bSA8IDAgfHwgKmZyYW1lTnVtID49IFVTQlZJREVPX05VTUZSQU1FUykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQkKKwogCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKIAkJCQlpbmZvKCJWSURJT0NTWU5DOiBzeW5jaW5nIHRvIGZyYW1lICVkLiIsICpmcmFtZU51bSk7CiAJCQlpZiAodXZkLT5mbGFncyAmIEZMQUdTX05PX0RFQ09ESU5HKQpAQCAtMTQ1NSw4ICsxNDU0LDggQEAKIAkJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOwogCiAJCQltZW1zZXQodmIsIDAsIHNpemVvZigqdmIpKTsKLSAJCQlyZXR1cm4gMDsKLSAJCX0KKwkJCXJldHVybiAwOworCQl9CiAJCWNhc2UgVklESU9DS0VZOgogCQkJcmV0dXJuIDA7CiAKQEAgLTE1MTIsNyArMTUxMSw3IEBACiAJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKIAkJaW5mbygiJXM6ICVaZC4gYnl0ZXMsIG5vYmxvY2s9JWQuIiwgX19GVU5DVElPTl9fLCBjb3VudCwgbm9ibG9jayk7CiAKLQlkb3duKCZ1dmQtPmxvY2spOwkKKwltdXRleF9sb2NrKCZ1dmQtPmxvY2spOwogCiAJLyogU2VlIGlmIGEgZnJhbWUgaXMgY29tcGxldGVkLCB0aGVuIHVzZSBpdC4gKi8KIAlmb3IoaSA9IDA7IGkgPCBVU0JWSURFT19OVU1GUkFNRVM7IGkrKykgewpAQCAtMTY0NCw3ICsxNjQzLDcgQEAKIAkJfQogCX0KIHJlYWRfZG9uZToKLQl1cCgmdXZkLT5sb2NrKTsJCisJbXV0ZXhfdW5sb2NrKCZ1dmQtPmxvY2spOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTcwNSw3ICsxNzA0LDcgQEAKIAkJCWluZm8oIk5vdCBzdHJlYW1pbmcsIGJ1dCBpbnRlcnJ1cHQhIik7CiAJCXJldHVybjsKIAl9Ci0JCisKIAl1dmQtPnN0YXRzLnVyYl9jb3VudCsrOwogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPD0gMCkKIAkJZ290byB1cmJfZG9uZV93aXRoOwpAQCAtMTc2NCw3ICsxNzYzLDcgQEAKIAl9CiAJaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgdmlkZW9TdGFydCkpCiAJCUdFVF9DQUxMQkFDSyh1dmQsIHZpZGVvU3RhcnQpKHV2ZCk7Ci0JZWxzZSAKKwllbHNlCiAJCWVycigiJXM6IHZpZGVvU3RhcnQgbm90IHNldCIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBXZSBkb3VibGUgYnVmZmVyIHRoZSBJc28gbGlzdHMgKi8KQEAgLTE4MzEsNyArMTgzMCw3IEBACiAJCS8qIEludm9rZSBtaW5pZHJpdmVyJ3MgbWFnaWMgdG8gc3RvcCB0aGUgY2FtZXJhICovCiAJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHZpZGVvU3RvcCkpCiAJCQlHRVRfQ0FMTEJBQ0sodXZkLCB2aWRlb1N0b3ApKHV2ZCk7Ci0JCWVsc2UgCisJCWVsc2UKIAkJCWVycigiJXM6IHZpZGVvU3RvcCBub3Qgc2V0IiwgX19GVU5DVElPTl9fKTsKIAogCQkvKiBTZXQgcGFja2V0IHNpemUgdG8gMCAqLwpAQCAtMTk2NCwxNCArMTk2MywxNCBAQAogCQlpbmZvKCIlcygkJXAsJWQuKSIsIF9fRlVOQ1RJT05fXywgdXZkLCBmcmFtZU51bSk7CiAKIAlzd2l0Y2ggKGZyYW1lLT5mcmFtZVN0YXRlKSB7Ci0gICAgICAgIGNhc2UgRnJhbWVTdGF0ZV9VbnVzZWQ6CisJY2FzZSBGcmFtZVN0YXRlX1VudXNlZDoKIAkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKIAkJCWluZm8oIiVzOiBGcmFtZVN0YXRlX1VudXNlZCIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRUlOVkFMOwotICAgICAgICBjYXNlIEZyYW1lU3RhdGVfUmVhZHk6Ci0gICAgICAgIGNhc2UgRnJhbWVTdGF0ZV9HcmFiYmluZzoKLSAgICAgICAgY2FzZSBGcmFtZVN0YXRlX0Vycm9yOgotICAgICAgICB7CisJY2FzZSBGcmFtZVN0YXRlX1JlYWR5OgorCWNhc2UgRnJhbWVTdGF0ZV9HcmFiYmluZzoKKwljYXNlIEZyYW1lU3RhdGVfRXJyb3I6CisJewogCQlpbnQgbnRyaWVzLCBzaWduYWxQZW5kaW5nOwogCXJlZG86CiAJCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKQEAgLTE5NzksNyArMTk3OCw3IEBACiAJCQkJaW5mbygiJXM6IENhbWVyYSBpcyBub3Qgb3BlcmF0aW9uYWwgKDEpIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCW50cmllcyA9IDA7IAorCQludHJpZXMgPSAwOwogCQlkbyB7CiAJCQlSaW5nUXVldWVfSW50ZXJydXB0aWJsZVNsZWVwT24oJnV2ZC0+ZHApOwogCQkJc2lnbmFsUGVuZGluZyA9IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpOwpAQCAtMjAxMSw3ICsyMDEwLDcgQEAKIAkJCQkJdXNidmlkZW9fQ29sbGVjdFJhd0RhdGEodXZkLCBmcmFtZSk7CiAJCQkJZWxzZSBpZiAoVkFMSURfQ0FMTEJBQ0sodXZkLCBwcm9jZXNzRGF0YSkpCiAJCQkJCUdFVF9DQUxMQkFDSyh1dmQsIHByb2Nlc3NEYXRhKSh1dmQsIGZyYW1lKTsKLQkJCQllbHNlIAorCQkJCWVsc2UKIAkJCQkJZXJyKCIlczogcHJvY2Vzc0RhdGEgbm90IHNldCIsIF9fRlVOQ1RJT05fXyk7CiAJCQl9CiAJCX0gd2hpbGUgKGZyYW1lLT5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfR3JhYmJpbmcpOwpAQCAtMjAyOCw4ICsyMDI3LDggQEAKIAkJCWdvdG8gcmVkbzsKIAkJfQogCQkvKiBOb3RlIHRoYXQgd2UgZmFsbCB0aHJvdWdoIHRvIG1lZXQgb3VyIGRlc3RpbnkgYmVsb3cgKi8KLSAgICAgICAgfQotICAgICAgICBjYXNlIEZyYW1lU3RhdGVfRG9uZToKKwl9CisJY2FzZSBGcmFtZVN0YXRlX0RvbmU6CiAJCS8qCiAJCSAqIERvIGFsbCBuZWNlc3NhcnkgcG9zdHByb2Nlc3Npbmcgb2YgZGF0YSBwcmVwYXJlZCBpbgogCQkgKiAiaW50ZXJydXB0IiBjb2RlIGFuZCB0aGUgY29sbGVjdGluZyBjb2RlIGFib3ZlLiBUaGUKQEAgLTIxNTgsNyArMjE1Nyw3IEBACiAgKiBIaXN0b3J5OgogICogMDktRmViLTIwMDEgIENyZWF0ZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHVzYnZpZGVvX1NvZnR3YXJlQ29udHJhc3RBZGp1c3RtZW50KHN0cnVjdCB1dmQgKnV2ZCwgCitzdGF0aWMgdm9pZCB1c2J2aWRlb19Tb2Z0d2FyZUNvbnRyYXN0QWRqdXN0bWVudChzdHJ1Y3QgdXZkICp1dmQsCiAJCQkJCQlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQogewogCWludCBpLCBqLCB2NGxfbGluZXNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3VzYnZpZGVvLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uaAppbmRleCA2YzM5MGExZi4uM2NiZjRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIE1vc3QgaGVscGZ1bCBkZWJ1Z2dpbmcgYWlkICovCiAjZGVmaW5lIGFzc2VydChleHByKSAoKHZvaWQpICgoZXhwcikgPyAwIDogKGVycigiYXNzZXJ0IGZhaWxlZCBhdCBsaW5lICVkIixfX0xJTkVfXykpKSkKQEAgLTE4OCwxMSArMTg5LDExIEBACiAKIC8qIFN0YXRpc3RpY3MgdGhhdCBjYW4gYmUgb3ZlcmxhaWQgb24gc2NyZWVuICovCiBzdHJ1Y3QgdXNidmlkZW9fc3RhdGlzdGljcyB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZnJhbWVfbnVtOwkvKiBTZXF1ZW50aWFsIG51bWJlciBvZiB0aGUgZnJhbWUgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyB1cmJfY291bnQ7ICAgICAgICAvKiBIb3cgbWFueSBVUkJzIHdlIHJlY2VpdmVkIHNvIGZhciAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHVyYl9sZW5ndGg7ICAgICAgIC8qIExlbmd0aCBvZiBsYXN0IFVSQiAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGFfY291bnQ7ICAgICAgIC8qIEhvdyBtYW55IGJ5dGVzIHdlIHJlY2VpdmVkICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2NvdW50OyAgICAgLyogSG93IG1hbnkgZnJhbWUgaGVhZGVycyB3ZSBmb3VuZCAqLworCXVuc2lnbmVkIGxvbmcgZnJhbWVfbnVtOwkvKiBTZXF1ZW50aWFsIG51bWJlciBvZiB0aGUgZnJhbWUgKi8KKwl1bnNpZ25lZCBsb25nIHVyYl9jb3VudDsgICAgICAgIC8qIEhvdyBtYW55IFVSQnMgd2UgcmVjZWl2ZWQgc28gZmFyICovCisJdW5zaWduZWQgbG9uZyB1cmJfbGVuZ3RoOyAgICAgICAvKiBMZW5ndGggb2YgbGFzdCBVUkIgKi8KKwl1bnNpZ25lZCBsb25nIGRhdGFfY291bnQ7ICAgICAgIC8qIEhvdyBtYW55IGJ5dGVzIHdlIHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyBoZWFkZXJfY291bnQ7ICAgICAvKiBIb3cgbWFueSBmcmFtZSBoZWFkZXJzIHdlIGZvdW5kICovCiAJdW5zaWduZWQgbG9uZyBpc29fc2tpcF9jb3VudDsJLyogSG93IG1hbnkgZW1wdHkgSVNPIHBhY2tldHMgcmVjZWl2ZWQgKi8KIAl1bnNpZ25lZCBsb25nIGlzb19lcnJfY291bnQ7CS8qIEhvdyBtYW55IGJhZCBJU08gcGFja2V0cyByZWNlaXZlZCAqLwogfTsKQEAgLTIxMyw3ICsyMTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiBGTEFHU19VU0JWSURFT194eHggKi8KIAl1bnNpZ25lZCBsb25nIHBhbGV0dGVCaXRzOwkvKiBXaGljaCBwYWxldHRlcyB3ZSBhY2NlcHQ/ICovCiAJdW5zaWduZWQgc2hvcnQgZGVmYXVsdFBhbGV0dGU7CS8qIFdoYXQgcGFsZXR0ZSB0byB1c2UgZm9yIHJlYWQoKSAqLwotCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KIAogCXZpZGVvc2l6ZV90IHZpZGVvc2l6ZTsJLyogQ3VycmVudCBzZXR0aW5nICovCkBAIC0yNzIsNyArMjczLDcgQEAKIAlpbnQgbnVtX2NhbWVyYXM7CQkvKiBBcyBhbGxvY2F0ZWQgKi8KIAlzdHJ1Y3QgdXNiX2RyaXZlciB1c2JkcnY7CS8qIEludGVyZmFjZSB0byB0aGUgVVNCIHN0YWNrICovCiAJY2hhciBkcnZOYW1lWzgwXTsJCS8qIERyaXZlciBuYW1lICovCi0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkJLyogTXV0ZXggcHJvdGVjdGluZyBjYW1lcmEgc3RydWN0dXJlcyAqLworCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogTXV0ZXggcHJvdGVjdGluZyBjYW1lcmEgc3RydWN0dXJlcyAqLwogCXN0cnVjdCB1c2J2aWRlb19jYiBjYjsJCS8qIFRhYmxlIG9mIGNhbGxiYWNrcyAodmlydHVhbCBtZXRob2RzKSAqLwogCXN0cnVjdCB2aWRlb19kZXZpY2UgdmR0OwkvKiBWaWRlbyBkZXZpY2UgdGVtcGxhdGUgKi8KIAlzdHJ1Y3QgdXZkICpjYW07CQkJLyogQXJyYXkgb2YgY2FtZXJhIHN0cnVjdHVyZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3ZpY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCmluZGV4IDVkZjE0NDAuLjkwZDQ4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3ZpY2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJ1c2J2aWRlby5oIgogCiAvLyAjZGVmaW5lIFZJQ0FNX0RFQlVHCkBAIC02OCwxMCArNjksMTAgQEAKICNkZWZpbmUgVklDQU1fSEVBREVSX1NJWkUgICAgICAgNjQKIAogI2RlZmluZSBjbGFtcCggeCwgbCwgaCApICAgICAgICBtYXhfdCggX190eXBlb2ZfXyggeCApLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggbCApLCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fdCggX190eXBlb2ZfXyggeCApLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaCApLCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHggKSApICkKKwkJCQkgICAgICAgKCBsICksICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICAgbWluX3QoIF9fdHlwZW9mX18oIHggKSwgIFwKKwkJCQkJICAgICAgKCBoICksICAgICAgICAgICAgXAorCQkJCQkgICAgICAoIHggKSApICkKIAogLyogTm90IHN1cmUgd2hhdCBhbGwgdGhlIGJ5dGVzIGluIHRoZXNlIGNoYXIKICAqIGFycmF5cyBkbywgYnV0IHRoZXkncmUgbmVjZXNzYXJ5IHRvIG1ha2UKQEAgLTM1Niw3ICszNTcsNyBAQAogICogTm90IHN1cmUgd2h5IHRoZXNlIGFyZSBub3QgeWV0IG5vbi1zdGF0aWNzIHdoaWNoIEkgY2FuIHJlZmVyZW5jZSB0aHJvdWdoCiAgKiB1c2J2aWRlby5oIHRoZSBzYW1lIGFzIGl0IGlzIGluIDIuNC4yMC4gIEkgYmV0IHRoaXMgd2lsbCBnZXQgZml4ZWQgc29tZXRpbWUKICAqIGluIHRoZSBmdXR1cmUuCi0gKiAKKyAqCiAqLwogc3RhdGljIHZvaWQgKnJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKQEAgLTQwNyw3ICs0MDgsNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwkvLyB1c2IgZGV2aWNlCiAKIAkvKiBndWFyZCBhZ2FpbnN0IHNpbXVsdGFuZW91cyBhY2Nlc3NlcyB0byB0aGUgY2FtZXJhICovCi0Jc3RydWN0IHNlbWFwaG9yZSBjYW1fbG9jazsKKwlzdHJ1Y3QgbXV0ZXggY2FtX2xvY2s7CiAKIAlpbnQgaXNfaW5pdGlhbGl6ZWQ7CiAJdTggb3Blbl9jb3VudDsKQEAgLTQ2MSwxMiArNDYyLDEyIEBACiAJCQkgICAgdTE2IHNpemUpCiB7CiAJaW50IHN0YXR1cyA9IC1FTk9ERVY7Ci0JZG93bigmY2FtLT5jYW1fbG9jayk7CisJbXV0ZXhfbG9jaygmY2FtLT5jYW1fbG9jayk7CiAJaWYgKGNhbS0+dWRldikgewogCQlzdGF0dXMgPSBfX3NlbmRfY29udHJvbF9tc2coY2FtLCByZXF1ZXN0LCB2YWx1ZSwKIAkJCQkJICAgIGluZGV4LCBjcCwgc2l6ZSk7CiAJfQotCXVwKCZjYW0tPmNhbV9sb2NrKTsKKwltdXRleF91bmxvY2soJmNhbS0+Y2FtX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiBzdGF0aWMgaW50CkBAIC02MDIsMTIgKzYwMywxMiBAQAogCWNhc2UgVklESU9DU1BJQ1Q6CiAJCXsKIAkJCXN0cnVjdCB2aWRlb19waWN0dXJlIHZwOwotCQkJCisKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmdnAsIHVzZXJfYXJnLCBzaXplb2YodnApKSkgewogCQkJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQkKKwogCQkJREJHKCJWSURJT0NTUElDVCBkZXB0aCA9ICVkLCBwYWwgPSAlZFxuIiwgdnAuZGVwdGgsCiAJCQkgICAgdnAucGFsZXR0ZSk7CiAKQEAgLTY1NCw3ICs2NTUsNyBAQAogCQkJfQogCiAJCQlEQkcoIlZJRElPQ1NXSU4gJWQgeCAlZFxuIiwgdncud2lkdGgsIHZ3LmhlaWdodCk7Ci0JCQkKKwogCQkJaWYgKCB2dy53aWR0aCAhPSAzMjAgfHwgdncuaGVpZ2h0ICE9IDI0MCApCiAJCQkJcmV0dmFsID0gLUVGQVVMVDsKIApAQCAtNzYzLDYgKzc2NCw3IEBACiAJaWYgKCFjYW0pIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAidmljYW0gdmlkZW9fZGV2aWNlIGltcHJvcGVybHkgaW5pdGlhbGl6ZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogdGhlIHZpZGVvZGV2X2xvY2sgaGVsZCBhYm92ZSB1cyBwcm90ZWN0cyB1cyBmcm9tCkBAIC04MDcsMTIgKzgwOSwxMiBAQAogCWNhbS0+bmVlZHNEdW1teVJlYWQgPSAxOwogCWNhbS0+b3Blbl9jb3VudCsrOwogCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FtOwkKLQkKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBjYW07CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIHZpY2FtX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTgzMSwxMyArODMzLDEzIEBACiAJcnZmcmVlKGNhbS0+ZnJhbWVidWYsIFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKIAlrZnJlZShjYW0tPmNudHJsYnVmKTsKIAotCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCW11dGV4X2xvY2soJmNhbS0+Y2FtX2xvY2spOwogCiAJY2FtLT5vcGVuX2NvdW50LS07CiAJb3Blbl9jb3VudCA9IGNhbS0+b3Blbl9jb3VudDsKIAl1ZGV2ID0gY2FtLT51ZGV2OwogCi0JdXAoJmNhbS0+Y2FtX2xvY2spOworCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7CiAKIAlpZiAoIW9wZW5fY291bnQgJiYgIXVkZXYpIHsKIAkJa2ZyZWUoY2FtKTsKQEAgLTk2MCw3ICs5NjIsNyBAQAogCXJlcXVlc3RbOF0gPSAwOwogCS8vIGJ5dGVzIDktMTUgZG8gbm90IHNlZW0gdG8gYWZmZWN0IGV4cG9zdXJlIG9yIGltYWdlIHF1YWxpdHkKIAotCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCW11dGV4X2xvY2soJmNhbS0+Y2FtX2xvY2spOwogCiAJaWYgKCFjYW0tPnVkZXYpIHsKIAkJZ290byBkb25lOwpAQCAtOTg1LDcgKzk4Nyw3IEBACiAJfQogCiAgZG9uZToKLQl1cCgmY2FtLT5jYW1fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmNhbV9sb2NrKTsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTExODUsNyArMTE4Nyw3IEBACiAKIAlpZiAoICFjYW0tPnByb2NfZGlyICkKIAkJcmV0dXJuOyAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHJldHVybiBhbiBlcnJvciBoZXJlCi0JCisKIAllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgic2h1dHRlciIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQljYW0tPnByb2NfZGlyKTsKIAlpZiAoZW50KSB7CkBAIC0xMjgwLDcgKzEyODIsNyBAQAogCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwogCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbTsKLQkKKwogCXByaW50ayhLRVJOX0lORk8gIlZpQ2FtIGJhc2VkIHdlYmNhbSBjb25uZWN0ZWRcbiIpOwogCiAJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CkBAIC0xMzA5LDcgKzEzMTEsNyBAQAogCiAJY2FtLT5zaHV0dGVyX3NwZWVkID0gMTU7CiAKLQlpbml0X01VVEVYKCZjYW0tPmNhbV9sb2NrKTsKKwltdXRleF9pbml0KCZjYW0tPmNhbV9sb2NrKTsKIAogCW1lbWNweSgmY2FtLT52ZGV2LCAmdmljYW1fdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZiAodmljYW1fdGVtcGxhdGUpKTsKQEAgLTEzMjksNyArMTMzMSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiVmlDYW0gd2ViY2FtIGRyaXZlciBub3cgY29udHJvbGxpbmcgdmlkZW8gZGV2aWNlICVkXG4iLGNhbS0+dmRldi5taW5vcik7CiAKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBjYW0pOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNTEsNyArMTM1Myw3IEBACiAKIAkvKiBzdG9wIHRoZSBjYW1lcmEgZnJvbSBiZWluZyB1c2VkICovCiAKLQlkb3duKCZjYW0tPmNhbV9sb2NrKTsKKwltdXRleF9sb2NrKCZjYW0tPmNhbV9sb2NrKTsKIAogCS8qIG1hcmsgdGhlIGNhbWVyYSBhcyBnb25lICovCiAKQEAgLTEzNjgsNyArMTM3MCw3IEBACiAKIAlvcGVuX2NvdW50ID0gY2FtLT5vcGVuX2NvdW50OwogCi0JdXAoJmNhbS0+Y2FtX2xvY2spOworCW11dGV4X3VubG9jaygmY2FtLT5jYW1fbG9jayk7CiAKIAlpZiAoIW9wZW5fY291bnQpIHsKIAkJa2ZyZWUoY2FtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCBjZDJjNDQ3Li4xMWE5N2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJbWVtc2V0KHZzLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKTsKIAl2cy0+aW5kZXggPSBpbmRleDsKIAl2cy0+aWQgICAgPSBpZDsKLQlpZiAoaWQgJiAoVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTF9NKSkgeworCWlmIChpZCAmIFY0TDJfU1REXzUyNV82MCkgewogCQl2cy0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKIAkJdnMtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMzAwMDA7CiAJCXZzLT5mcmFtZWxpbmVzID0gNTI1OwpAQCAtMTEwLDcgKzExMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHByaW9yaXR5IGhhbmRsaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTE3MSw3ICsxNzAsNyBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBzb21lIGFycmF5cyBmb3IgcHJldHR5LXByaW50aW5nIGRlYnVnIG1lc3NhZ2VzICAgICAgICAgICAgICAgICAgICAqLworLyogc29tZSBhcnJheXMgZm9yIHByZXR0eS1wcmludGluZyBkZWJ1ZyBtZXNzYWdlcyBvZiBlbnVtIHR5cGVzICAgICAgKi8KIAogY2hhciAqdjRsMl9maWVsZF9uYW1lc1tdID0gewogCVtWNEwyX0ZJRUxEX0FOWV0gICAgICAgID0gImFueSIsCkBAIC0xOTIsNiArMTkxLDE0IEBACiAJW1Y0TDJfQlVGX1RZUEVfVkJJX09VVFBVVF0gICAgPSAidmJpLW91dCIsCiB9OwogCitzdGF0aWMgY2hhciAqdjRsMl9tZW1vcnlfbmFtZXNbXSA9IHsKKwlbVjRMMl9NRU1PUllfTU1BUF0gICAgPSAibW1hcCIsCisJW1Y0TDJfTUVNT1JZX1VTRVJQVFJdID0gInVzZXJwdHIiLAorCVtWNEwyX01FTU9SWV9PVkVSTEFZXSA9ICJvdmVybGF5IiwKK307CisKKyNkZWZpbmUgcHJ0X25hbWVzKGEsYXJyKSAoKChhKT49MCkmJigoYSk8QVJSQVlfU0laRShhcnIpKSk/YXJyW2FdOiJ1bmtub3duIgorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGRlYnVnIGhlbHAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0zMDUsOCArMzEyLDYgQEAKIAlbX0lPQ19OUihERUNPREVSX0RVTVApXSAgICAgICAgICAgICAgICA9ICJERUNPREVSX0RVTVAiLAogI2VuZGlmCiAJW19JT0NfTlIoQVVEQ19TRVRfUkFESU8pXSAgICAgICAgICAgICAgPSAiQVVEQ19TRVRfUkFESU8iLAotCVtfSU9DX05SKEFVRENfU0VUX0lOUFVUKV0gICAgICAgICAgICAgID0gIkFVRENfU0VUX0lOUFVUIiwKLQlbX0lPQ19OUihNU1BfU0VUX01BVFJJWCldICAgICAgICAgICAgICA9ICJNU1BfU0VUX01BVFJJWCIsCiAKIAlbX0lPQ19OUihUVU5FUl9TRVRfVFlQRV9BRERSKV0gICAgICAgICA9ICJUVU5FUl9TRVRfVFlQRV9BRERSIiwKIAlbX0lPQ19OUihUVU5FUl9TRVRfU1RBTkRCWSldICAgICAgICAgICA9ICJUVU5FUl9TRVRfU1RBTkRCWSIsCkBAIC0zMjQsNiArMzI5LDE1IEBACiB9OwogI2RlZmluZSBWNEwyX0lOVF9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2ludF9pb2N0bHMpCiAKK3N0YXRpYyB2b2lkIHY0bF9wcmludF9waXhfZm10IChjaGFyICpzLCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpmbXQpCit7CisJcHJpbnRrICgiJXM6IHdpZHRoPSVkLCBoZWlnaHQ9JWQsIGZvcm1hdD0lZCwgZmllbGQ9JXMsICIKKwkJImJ5dGVzcGVybGluZT0lZCBzaXplaW1hZ2U9JWQsIGNvbG9yc3BhY2U9JWRcbiIsIHMsCisJCWZtdC0+d2lkdGgsZm10LT5oZWlnaHQsZm10LT5waXhlbGZvcm1hdCwKKwkJcHJ0X25hbWVzKGZtdC0+ZmllbGQsdjRsMl9maWVsZF9uYW1lcyksCisJCWZtdC0+Ynl0ZXNwZXJsaW5lLGZtdC0+c2l6ZWltYWdlLGZtdC0+Y29sb3JzcGFjZSk7Cit9OworCiAvKiBDb21tb24gaW9jdGwgZGVidWcgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkKICAgIGV4dGVybmFsIGlvY3RsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgaW50ZXJuYWwgVjRMIGlvY3RsICovCiB2b2lkIHY0bF9wcmludGtfaW9jdGwodW5zaWduZWQgaW50IGNtZCkKQEAgLTM2Miw2ICszNzYsNTM3IEBACiAJfQogfQogCisvKiBDb21tb24gaW9jdGwgZGVidWcgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkKKyAgIGV4dGVybmFsIGlvY3RsIG1lc3NhZ2VzIGFzIHdlbGwgYXMgaW50ZXJuYWwgVjRMIGlvY3RsIGFuZCBpdHMKKyAgIGFyZ3VtZW50cyAqLwordm9pZCB2NGxfcHJpbnRrX2lvY3RsX2FyZyhjaGFyICpzLHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlwcmludGsocyk7CisJcHJpbnRrKCI6ICIpOworCXY0bF9wcmludGtfaW9jdGwoY21kKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DX0lOVF9HX0NISVBfSURFTlQ6CisJeworCQllbnVtIHY0bDJfY2hpcF9pZGVudCAgKnA9YXJnOworCQlwcmludGsgKCIlczogY2hpcCBpZGVudD0lZFxuIiwgcywgKnApOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19QUklPUklUWToKKwljYXNlIFZJRElPQ19TX1BSSU9SSVRZOgorCXsKKwkJZW51bSB2NGwyX3ByaW9yaXR5ICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IHByaW9yaXR5PSVkXG4iLCBzLCAqcCk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19JTlRfU19UVU5FUl9NT0RFOgorCXsKKwkJZW51bSB2NGwyX3R1bmVyX3R5cGUgKnA9YXJnOworCQlwcmludGsgKCIlczogdHVuZXIgdHlwZT0lZFxuIiwgcywgKnApOworCQlicmVhazsKKwl9CisJY2FzZSBERUNPREVSX1NFVF9WQklfQllQQVNTOgorCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgorCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgorCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgorCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6CisJY2FzZSBERUNPREVSX1NFVF9HUElPOgorCWNhc2UgREVDT0RFUl9TRVRfTk9STToKKwljYXNlIFZJRElPQ0NBUFRVUkU6CisJY2FzZSBWSURJT0NTWU5DOgorCWNhc2UgVklESU9DU1dSSVRFTU9ERToKKwljYXNlIFRVTkVSX1NFVF9UWVBFX0FERFI6CisJY2FzZSBUVU5FUl9TRVRfU1RBTkRCWToKKwljYXNlIFREQTk4ODdfU0VUX0NPTkZJRzoKKwljYXNlIFZJRElPQ19PVkVSTEFZX09MRDoKKwljYXNlIFZJRElPQ19TVFJFQU1PRkY6CisJY2FzZSBWSURJT0NfR19PVVRQVVQ6CisJY2FzZSBWSURJT0NfU19PVVRQVVQ6CisJY2FzZSBWSURJT0NfU1RSRUFNT046CisJY2FzZSBWSURJT0NfR19JTlBVVDoKKwljYXNlIFZJRElPQ19PVkVSTEFZOgorCWNhc2UgVklESU9DX1NfSU5QVVQ6CisJeworCQlpbnQgKnA9YXJnOworCQlwcmludGsgKCIlczogdmFsdWU9JWRcbiIsIHMsICpwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQVVESU86CisJY2FzZSBWSURJT0NfU19BVURJTzoKKwljYXNlIFZJRElPQ19FTlVNQVVESU86CisJY2FzZSBWSURJT0NfR19BVURJT19PTEQ6CisJeworCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqcD1hcmc7CisKKwkJcHJpbnRrICgiJXM6IGluZGV4PSVkLCBuYW1lPSVzLCBjYXBhYmlsaXR5PSVkLCBtb2RlPSVkXG4iLAorCQkJcyxwLT5pbmRleCwgcC0+bmFtZSxwLT5jYXBhYmlsaXR5LCBwLT5tb2RlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQVVET1VUOgorCWNhc2UgVklESU9DX1NfQVVET1VUOgorCWNhc2UgVklESU9DX0VOVU1BVURPVVQ6CisJY2FzZSBWSURJT0NfR19BVURPVVRfT0xEOgorCXsKKwkJc3RydWN0IHY0bDJfYXVkaW9vdXQgKnA9YXJnOworCQlwcmludGsgKCIlczogaW5kZXg9JWQsIG5hbWU9JXMsIGNhcGFiaWxpdHk9JWQsIG1vZGU9JWRcbiIsIHMsCisJCQkJcC0+aW5kZXgsIHAtPm5hbWUsIHAtPmNhcGFiaWxpdHkscC0+bW9kZSk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19RQlVGOgorCWNhc2UgVklESU9DX0RRQlVGOgorCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyICpwPWFyZzsKKwkJc3RydWN0IHY0bDJfdGltZWNvZGUgKnRjPSZwLT50aW1lY29kZTsKKwkJcHJpbnRrICgiJXM6ICUwMmxkOiUwMmQ6JTAyZC4lMDhsZCBpbmRleD0lZCwgdHlwZT0lcywgIgorCQkJImJ5dGVzdXNlZD0lZCwgZmxhZ3M9MHglMDh4LCAiCisJCQkiZmllbGQ9JTBkLCBzZXF1ZW5jZT0lZCwgbWVtb3J5PSVzLCBvZmZzZXQvdXNlcnB0cj0weCUwOGx4XG4iLAorCQkJCXMsCisJCQkJKHAtPnRpbWVzdGFtcC50dl9zZWMvMzYwMCksCisJCQkJKGludCkocC0+dGltZXN0YW1wLnR2X3NlYy82MCklNjAsCisJCQkJKGludCkocC0+dGltZXN0YW1wLnR2X3NlYyU2MCksCisJCQkJcC0+dGltZXN0YW1wLnR2X3VzZWMsCisJCQkJcC0+aW5kZXgsCisJCQkJcHJ0X25hbWVzKHAtPnR5cGUsdjRsMl90eXBlX25hbWVzKSwKKwkJCQlwLT5ieXRlc3VzZWQscC0+ZmxhZ3MsCisJCQkJcC0+ZmllbGQscC0+c2VxdWVuY2UsCisJCQkJcHJ0X25hbWVzKHAtPm1lbW9yeSx2NGwyX21lbW9yeV9uYW1lcyksCisJCQkJcC0+bS51c2VycHRyKTsKKwkJcHJpbnRrICgiJXM6IHRpbWVjb2RlPSAlMDJkOiUwMmQ6JTAyZCB0eXBlPSVkLCAiCisJCQkiZmxhZ3M9MHglMDh4LCBmcmFtZXM9JWQsIHVzZXJiaXRzPTB4JXBcbiIsCisJCQkJcyx0Yy0+aG91cnMsdGMtPm1pbnV0ZXMsdGMtPnNlY29uZHMsCisJCQkJdGMtPnR5cGUsIHRjLT5mbGFncywgdGMtPmZyYW1lcywgdGMtPnVzZXJiaXRzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1FVRVJZQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBkcml2ZXI9JXMsIGNhcmQ9JXMsIGJ1cz0lcywgdmVyc2lvbj0weCUwOHgsICIKKwkJCSJjYXBhYmlsaXRpZXM9MHglMDh4XG4iLCBzLAorCQkJCXAtPmRyaXZlcixwLT5jYXJkLHAtPmJ1c19pbmZvLAorCQkJCXAtPnZlcnNpb24sCisJCQkJcC0+Y2FwYWJpbGl0aWVzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJY2FzZSBWSURJT0NfU19DVFJMX09MRDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKnA9YXJnOworCQlwcmludGsgKCIlczogaWQ9JWQsIHZhbHVlPSVkXG4iLCBzLCBwLT5pZCwgcC0+dmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19DUk9QOgorCWNhc2UgVklESU9DX1NfQ1JPUDoKKwl7CisJCXN0cnVjdCB2NGwyX2Nyb3AgKnA9YXJnOworCQkvKkZJWE1FOiBTaG91bGQgYWxzbyBzaG93IHJlY3Qgc3RydWN0cyAqLworCQlwcmludGsgKCIlczogdHlwZT0lZFxuIiwgcywgcC0+dHlwZSk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19DUk9QQ0FQOgorCWNhc2UgVklESU9DX0NST1BDQVBfT0xEOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcGNhcCAqcD1hcmc7CisJCS8qRklYTUU6IFNob3VsZCBhbHNvIHNob3cgcmVjdCBzdHJ1Y3RzICovCisJCXByaW50ayAoIiVzOiB0eXBlPSVkXG4iLCBzLCBwLT50eXBlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0lOVF9ERUNPREVfVkJJX0xJTkU6CisJeworCQlzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnA9YXJnOworCQlwcmludGsgKCIlczogaXNfc2Vjb25kX2ZpZWxkPSVkLCBwdHI9MHglMDhseCwgbGluZT0lZCwgIgorCQkJInR5cGU9JWRcbiIsIHMsCisJCQkJcC0+aXNfc2Vjb25kX2ZpZWxkLCh1bnNpZ25lZCBsb25nKXAtPnAscC0+bGluZSxwLT50eXBlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm10ZGVzYyAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgdHlwZT0lZCwgZmxhZ3M9JWQsIGRlc2NyaXB0aW9uPSVzLCIKKwkJCSIgcGl4ZWxmb3JtYXQ9JWRcbiIsIHMsCisJCQkJcC0+aW5kZXgsIHAtPnR5cGUsIHAtPmZsYWdzLHAtPmRlc2NyaXB0aW9uLAorCQkJCXAtPnBpeGVsZm9ybWF0KTsKKworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19GTVQ6CisJY2FzZSBWSURJT0NfU19GTVQ6CisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwl7CisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqcD1hcmc7CisJCXByaW50ayAoIiVzOiB0eXBlPSVzXG4iLCBzLAorCQkJCXBydF9uYW1lcyhwLT50eXBlLHY0bDJfdHlwZV9uYW1lcykpOworCQlzd2l0Y2ggKHAtPnR5cGUpIHsKKwkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCQl2NGxfcHJpbnRfcGl4X2ZtdCAocywgJnAtPmZtdC5waXgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwljYXNlIFZJRElPQ19HX0ZCVUY6CisJY2FzZSBWSURJT0NfU19GQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKnA9YXJnOworCQlwcmludGsgKCIlczogY2FwYWJpbGl0eT0lZCwgZmxhZ3M9JWQsIGJhc2U9MHglMDhseFxuIiwgcywKKwkJCQlwLT5jYXBhYmlsaXR5LHAtPmZsYWdzLCAodW5zaWduZWQgbG9uZylwLT5iYXNlKTsKKwkJdjRsX3ByaW50X3BpeF9mbXQgKHMsICZwLT5mbXQpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJeworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKnA9YXJnOworCQlwcmludGsgKCIlczogdHVuZXI9JWQsIHR5cGU9JWQsIGZyZXF1ZW5jeT0lZFxuIiwgcywKKwkJCQlwLT50dW5lcixwLT50eXBlLHAtPmZyZXF1ZW5jeSk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19FTlVNSU5QVVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgYXVkaW9zZXQ9JWQsICIKKwkJCSJ0dW5lcj0lZCwgc3RkPSVMZCwgc3RhdHVzPSVkXG4iLCBzLAorCQkJCXAtPmluZGV4LHAtPm5hbWUscC0+dHlwZSxwLT5hdWRpb3NldCwKKwkJCQlwLT50dW5lciwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXAtPnN0ZCwKKwkJCQlwLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKKwljYXNlIFZJRElPQ19TX0pQRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IHF1YWxpdHk9JWQsIEFQUG49JWQsIEFQUF9sZW49JWQsIENPTV9sZW49JWQsIgorCQkJIiBqcGVnX21hcmtlcnM9JWRcbiIsIHMsCisJCQkJcC0+cXVhbGl0eSxwLT5BUFBuLHAtPkFQUF9sZW4sCisJCQkJcC0+Q09NX2xlbixwLT5qcGVnX21hcmtlcnMpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19NT0RVTEFUT1I6CisJY2FzZSBWSURJT0NfU19NT0RVTEFUT1I6CisJeworCQlzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IgKnA9YXJnOworCQlwcmludGsgKCIlczogaW5kZXg9JWQsIG5hbWU9JXMsIGNhcGFiaWxpdHk9JWQsIHJhbmdlbG93PSVkLCIKKwkJCSIgcmFuZ2VoaWdoPSVkLCB0eHN1YmNoYW5zPSVkXG4iLCBzLAorCQkJCXAtPmluZGV4LCBwLT5uYW1lLHAtPmNhcGFiaWxpdHkscC0+cmFuZ2Vsb3csCisJCQkJcC0+cmFuZ2VoaWdoLHAtPnR4c3ViY2hhbnMpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19NUEVHQ09NUDoKKwljYXNlIFZJRElPQ19TX01QRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfbXBlZ19jb21wcmVzc2lvbiAqcD1hcmc7CisJCS8qRklYTUU6IFNldmVyYWwgZmllbGRzIG5vdCBzaG93biAqLworCQlwcmludGsgKCIlczogdHNfcGlkX3BtdD0lZCwgdHNfcGlkX2F1ZGlvPSVkLCB0c19waWRfdmlkZW89JWQsICIKKwkJCSJ0c19waWRfcGNyPSVkLCBwc19zaXplPSVkLCBhdV9zYW1wbGVfcmF0ZT0lZCwgIgorCQkJImF1X3Blc2lkPSVjLCB2aV9mcmFtZV9yYXRlPSVkLCB2aV9mcmFtZXNfcGVyX2dvcD0lZCwgIgorCQkJInZpX2JmcmFtZXNfY291bnQ9JWQsIHZpX3Blc2lkPSVjXG4iLCBzLAorCQkJCXAtPnRzX3BpZF9wbXQscC0+dHNfcGlkX2F1ZGlvLCBwLT50c19waWRfdmlkZW8sCisJCQkJcC0+dHNfcGlkX3BjciwgcC0+cHNfc2l6ZSwgcC0+YXVfc2FtcGxlX3JhdGUsCisJCQkJcC0+YXVfcGVzaWQsIHAtPnZpX2ZyYW1lX3JhdGUsCisJCQkJcC0+dmlfZnJhbWVzX3Blcl9nb3AsIHAtPnZpX2JmcmFtZXNfY291bnQsCisJCQkJcC0+dmlfcGVzaWQpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfRU5VTU9VVFBVVDoKKwl7CisJCXN0cnVjdCB2NGwyX291dHB1dCAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgbmFtZT0lcyx0eXBlPSVkLCBhdWRpb3NldD0lZCwgIgorCQkJIm1vZHVsYXRvcj0lZCwgc3RkPSVMZFxuIiwKKwkJCQlzLHAtPmluZGV4LHAtPm5hbWUscC0+dHlwZSxwLT5hdWRpb3NldCwKKwkJCQlwLT5tb2R1bGF0b3IsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwLT5zdGQpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IGlkPSVkLCB0eXBlPSVkLCBuYW1lPSVzLCBtaW4vbWF4PSVkLyVkLCIKKwkJCSIgc3RlcD0lZCwgZGVmYXVsdD0lZCwgZmxhZ3M9MHglMDh4XG4iLCBzLAorCQkJCXAtPmlkLHAtPnR5cGUscC0+bmFtZSxwLT5taW5pbXVtLHAtPm1heGltdW0sCisJCQkJcC0+c3RlcCxwLT5kZWZhdWx0X3ZhbHVlLHAtPmZsYWdzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1FVRVJZTUVOVToKKwl7CisJCXN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBpZD0lZCwgaW5kZXg9JWQsIG5hbWU9JXNcbiIsIHMsCisJCQkJcC0+aWQscC0+aW5kZXgscC0+bmFtZSk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19JTlRfR19SRUdJU1RFUjoKKwljYXNlIFZJRElPQ19JTlRfU19SRUdJU1RFUjoKKwl7CisJCXN0cnVjdCB2NGwyX3JlZ2lzdGVyICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IGkyY19pZD0lZCwgcmVnPSVsdSwgdmFsPSVkXG4iLCBzLAorCQkJCXAtPmkyY19pZCxwLT5yZWcscC0+dmFsKTsKKworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwl7CisJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IGNvdW50PSVkLCB0eXBlPSVzLCBtZW1vcnk9JXNcbiIsIHMsCisJCQkJcC0+Y291bnQsCisJCQkJcHJ0X25hbWVzKHAtPnR5cGUsdjRsMl90eXBlX25hbWVzKSwKKwkJCQlwcnRfbmFtZXMocC0+bWVtb3J5LHY0bDJfbWVtb3J5X25hbWVzKSk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOgorCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6CisJY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKKwljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgorCXsKKwkJc3RydWN0IHY0bDJfcm91dGluZyAgKnA9YXJnOworCQlwcmludGsgKCIlczogaW5wdXQ9MHgleCwgb3V0cHV0PTB4JXhcbiIsIHMsIHAtPmlucHV0LCBwLT5vdXRwdXQpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDoKKwl7CisJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IHNlcnZpY2Vfc2V0PSVkXG4iLCBzLAorCQkJCXAtPnNlcnZpY2Vfc2V0KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0lOVF9TX1ZCSV9EQVRBOgorCWNhc2UgVklESU9DX0lOVF9HX1ZCSV9EQVRBOgorCXsKKwkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhICAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBpZD0lZCwgZmllbGQ9JWQsIGxpbmU9JWRcbiIsIHMsCisJCQkJcC0+aWQsIHAtPmZpZWxkLCBwLT5saW5lKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0VOVU1TVEQ6CisJeworCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBpbmRleD0lZCwgaWQ9JUxkLCBuYW1lPSVzLCBmcHM9JWQvJWQsICIKKwkJCSJmcmFtZWxpbmVzPSVkXG4iLCBzLCBwLT5pbmRleCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXAtPmlkLCBwLT5uYW1lLAorCQkJCXAtPmZyYW1lcGVyaW9kLm51bWVyYXRvciwKKwkJCQlwLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciwKKwkJCQlwLT5mcmFtZWxpbmVzKTsKKworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19QQVJNOgorCWNhc2UgVklESU9DX1NfUEFSTToKKwljYXNlIFZJRElPQ19TX1BBUk1fT0xEOgorCXsKKwkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcD1hcmc7CisJCXByaW50ayAoIiVzOiB0eXBlPSVkXG4iLCBzLCBwLT50eXBlKTsKKworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfR19UVU5FUjoKKwljYXNlIFZJRElPQ19TX1RVTkVSOgorCXsKKwkJc3RydWN0IHY0bDJfdHVuZXIgKnA9YXJnOworCQlwcmludGsgKCIlczogaW5kZXg9JWQsIG5hbWU9JXMsIHR5cGU9JWQsIGNhcGFiaWxpdHk9JWQsICIKKwkJCSJyYW5nZWxvdz0lZCwgcmFuZ2VoaWdoPSVkLCBzaWduYWw9JWQsIGFmYz0lZCwgIgorCQkJInJ4c3ViY2hhbnM9JWQsIGF1ZG1vZGU9JWRcbiIsIHMsCisJCQkJcC0+aW5kZXgsIHAtPm5hbWUsIHAtPnR5cGUsCisJCQkJcC0+Y2FwYWJpbGl0eSwgcC0+cmFuZ2Vsb3cscC0+cmFuZ2VoaWdoLAorCQkJCXAtPnJ4c3ViY2hhbnMsIHAtPmF1ZG1vZGUsIHAtPnNpZ25hbCwKKwkJCQlwLT5hZmMpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NHVkJJRk1UOgorCWNhc2UgVklESU9DU1ZCSUZNVDoKKwl7CisJCXN0cnVjdCB2YmlfZm9ybWF0ICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IHNhbXBsaW5nX3JhdGU9JWQsIHNhbXBsZXNfcGVyX2xpbmU9JWQsICIKKwkJCSJzYW1wbGVfZm9ybWF0PSVkLCBzdGFydD0lZC8lZCwgY291bnQ9JWQvJWQsIGZsYWdzPSVkXG4iLCBzLAorCQkJCXAtPnNhbXBsaW5nX3JhdGUscC0+c2FtcGxlc19wZXJfbGluZSwKKwkJCQlwLT5zYW1wbGVfZm9ybWF0LHAtPnN0YXJ0WzBdLHAtPnN0YXJ0WzFdLAorCQkJCXAtPmNvdW50WzBdLHAtPmNvdW50WzFdLHAtPmZsYWdzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCXsKKwkJc3RydWN0IHZpZGVvX2F1ZGlvICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IGF1ZGlvPSVkLCB2b2x1bWU9JWQsIGJhc3M9JWQsIHRyZWJsZT0lZCwgIgorCQkJImZsYWdzPSVkLCBuYW1lPSVzLCBtb2RlPSVkLCBiYWxhbmNlPSVkLCBzdGVwPSVkXG4iLAorCQkJCXMscC0+YXVkaW8scC0+dm9sdW1lLHAtPmJhc3MsIHAtPnRyZWJsZSwKKwkJCQlwLT5mbGFncyxwLT5uYW1lLHAtPm1vZGUscC0+YmFsYW5jZSxwLT5zdGVwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DR0ZCVUY6CisJY2FzZSBWSURJT0NTRkJVRjoKKwl7CisJCXN0cnVjdCB2aWRlb19idWZmZXIgKnA9YXJnOworCQlwcmludGsgKCIlczogYmFzZT0lMDhseCwgaGVpZ2h0PSVkLCB3aWR0aD0lZCwgZGVwdGg9JWQsICIKKwkJCSJieXRlc3BlcmxpbmU9JWRcbiIsIHMsCisJCQkJKHVuc2lnbmVkIGxvbmcpIHAtPmJhc2UsIHAtPmhlaWdodCwgcC0+d2lkdGgsCisJCQkJcC0+ZGVwdGgscC0+Ynl0ZXNwZXJsaW5lKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DR0NBUDoKKwl7CisJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IG5hbWU9JXMsIHR5cGU9JWQsIGNoYW5uZWxzPSVkLCBhdWRpb3M9JWQsICIKKwkJCSJtYXh3aWR0aD0lZCwgbWF4aGVpZ2h0PSVkLCBtaW53aWR0aD0lZCwgbWluaGVpZ2h0PSVkXG4iLAorCQkJCXMscC0+bmFtZSxwLT50eXBlLHAtPmNoYW5uZWxzLHAtPmF1ZGlvcywKKwkJCQlwLT5tYXh3aWR0aCxwLT5tYXhoZWlnaHQscC0+bWlud2lkdGgsCisJCQkJcC0+bWluaGVpZ2h0KTsKKworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NHQ0FQVFVSRToKKwljYXNlIFZJRElPQ1NDQVBUVVJFOgorCXsKKwkJc3RydWN0IHZpZGVvX2NhcHR1cmUgKnA9YXJnOworCQlwcmludGsgKCIlczogeD0lZCwgeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZCwgZGVjaW1hdGlvbj0lZCwiCisJCQkiIGZsYWdzPSVkXG4iLCBzLAorCQkJCXAtPngsIHAtPnkscC0+d2lkdGgsIHAtPmhlaWdodCwKKwkJCQlwLT5kZWNpbWF0aW9uLHAtPmZsYWdzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DR0NIQU46CisJY2FzZSBWSURJT0NTQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IGNoYW5uZWw9JWQsIG5hbWU9JXMsIHR1bmVycz0lZCwgZmxhZ3M9JWQsICIKKwkJCSJ0eXBlPSVkLCBub3JtPSVkXG4iLCBzLAorCQkJCXAtPmNoYW5uZWwscC0+bmFtZSxwLT50dW5lcnMsCisJCQkJcC0+ZmxhZ3MscC0+dHlwZSxwLT5ub3JtKTsKKworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NTTUlDUk9DT0RFOgorCXsKKwkJc3RydWN0IHZpZGVvX2NvZGUgKnA9YXJnOworCQlwcmludGsgKCIlczogbG9hZHdoYXQ9JXMsIGRhdGFzaXplPSVkXG4iLCBzLAorCQkJCXAtPmxvYWR3aGF0LHAtPmRhdGFzaXplKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgorCXsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBmbGFncz0lZCwgaW5wdXRzPSVkLCBvdXRwdXRzPSVkXG4iLCBzLAorCQkJCXAtPmZsYWdzLHAtPmlucHV0cyxwLT5vdXRwdXRzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgREVDT0RFUl9JTklUOgorCXsKKwkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBsZW49JWNcbiIsIHMsIHAtPmxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ0dQTEFZSU5GTzoKKwl7CisJCXN0cnVjdCB2aWRlb19pbmZvICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IGZyYW1lX2NvdW50PSVkLCBoX3NpemU9JWQsIHZfc2l6ZT0lZCwgIgorCQkJInNtcHRlX3RpbWVjb2RlPSVkLCBwaWN0dXJlX3R5cGU9JWQsICIKKwkJCSJ0ZW1wb3JhbF9yZWZlcmVuY2U9JWQsIHVzZXJfZGF0YT0lc1xuIiwgcywKKwkJCQlwLT5mcmFtZV9jb3VudCwgcC0+aF9zaXplLAorCQkJCXAtPnZfc2l6ZSwgcC0+c21wdGVfdGltZWNvZGUsCisJCQkJcC0+cGljdHVyZV90eXBlLCBwLT50ZW1wb3JhbF9yZWZlcmVuY2UsCisJCQkJcC0+dXNlcl9kYXRhKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DS0VZOgorCXsKKwkJc3RydWN0IHZpZGVvX2tleSAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBrZXk9JXMsIGZsYWdzPSVkXG4iLCBzLAorCQkJCXAtPmtleSwgcC0+ZmxhZ3MpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NHTUJVRjoKKwl7CisJCXN0cnVjdCB2aWRlb19tYnVmICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IHNpemU9JWQsIGZyYW1lcz0lZCwgb2Zmc2V0cz0weCUwOGx4XG4iLCBzLAorCQkJCXAtPnNpemUsCisJCQkJcC0+ZnJhbWVzLAorCQkJCSh1bnNpZ25lZCBsb25nKXAtPm9mZnNldHMpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NNQ0FQVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19tbWFwICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IGZyYW1lPSVkLCBoZWlnaHQ9JWQsIHdpZHRoPSVkLCBmb3JtYXQ9JWRcbiIsIHMsCisJCQkJcC0+ZnJhbWUsCisJCQkJcC0+aGVpZ2h0LCBwLT53aWR0aCwKKwkJCQlwLT5mb3JtYXQpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NHUElDVDoKKwljYXNlIFZJRElPQ1NQSUNUOgorCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwPWFyZzsKKworCQlwcmludGsgKCIlczogYnJpZ2h0bmVzcz0lZCwgaHVlPSVkLCBjb2xvdXI9JWQsIGNvbnRyYXN0PSVkLCIKKwkJCSIgd2hpdGVuZXNzPSVkLCBkZXB0aD0lZCwgcGFsZXR0ZT0lZFxuIiwgcywKKwkJCQlwLT5icmlnaHRuZXNzLCBwLT5odWUsIHAtPmNvbG91ciwKKwkJCQlwLT5jb250cmFzdCwgcC0+d2hpdGVuZXNzLCBwLT5kZXB0aCwKKwkJCQlwLT5wYWxldHRlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DU1BMQVlNT0RFOgorCXsKKwkJc3RydWN0IHZpZGVvX3BsYXlfbW9kZSAqcD1hcmc7CisJCXByaW50ayAoIiVzOiBtb2RlPSVkLCBwMT0lZCwgcDI9JWRcbiIsIHMsCisJCQkJcC0+bW9kZSxwLT5wMSxwLT5wMik7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ0dUVU5FUjoKKwljYXNlIFZJRElPQ1NUVU5FUjoKKwl7CisJCXN0cnVjdCB2aWRlb190dW5lciAqcD1hcmc7CisJCXByaW50ayAoIiVzOiB0dW5lcj0lZCwgbmFtZT0lcywgcmFuZ2Vsb3c9JWxkLCByYW5nZWhpZ2g9JWxkLCAiCisJCQkiZmxhZ3M9JWQsIG1vZGU9JWQsIHNpZ25hbD0lZFxuIiwgcywKKwkJCQlwLT50dW5lciwgcC0+bmFtZSxwLT5yYW5nZWxvdywgcC0+cmFuZ2VoaWdoLAorCQkJCXAtPmZsYWdzLHAtPm1vZGUsIHAtPnNpZ25hbCk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ0dVTklUOgorCXsKKwkJc3RydWN0IHZpZGVvX3VuaXQgKnA9YXJnOworCQlwcmludGsgKCIlczogdmlkZW89JWQsIHZiaT0lZCwgcmFkaW89JWQsIGF1ZGlvPSVkLCAiCisJCQkidGVsZXRleHQ9JWRcbiIsIHMsCisJCQkJcC0+dmlkZW8scC0+dmJpLHAtPnJhZGlvLHAtPmF1ZGlvLHAtPnRlbGV0ZXh0KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DR1dJTjoKKwljYXNlIFZJRElPQ1NXSU46CisJeworCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICpwPWFyZzsKKwkJcHJpbnRrICgiJXM6IHg9JWQsIHk9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWQsIGNocm9tYWtleT0lZCwiCisJCQkiIGZsYWdzPSVkLCBjbGlwY291bnQ9JWRcbiIsIHMsCisJCQkJcC0+eCwgcC0+eSxwLT53aWR0aCwgcC0+aGVpZ2h0LAorCQkJCXAtPmNocm9tYWtleSxwLT5mbGFncywKKwkJCQlwLT5jbGlwY291bnQpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6CisJY2FzZSBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVROgorCWNhc2UgVklESU9DX0lOVF9TX1NUQU5EQlk6CisJeworCQl1MzIgKnA9YXJnOworCisJCXByaW50ayAoIiVzOiB2YWx1ZT0lZFxuIiwgcywgKnApOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCXsKKwkJdW5zaWduZWQgbG9uZyAqcD1hcmc7CisJCXByaW50ayAoIiVzOiB2YWx1ZT0lbHVcbiIsIHMsICpwKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfU1REOgorCWNhc2UgVklESU9DX1NfU1REOgorCWNhc2UgVklESU9DX1FVRVJZU1REOgorCXsKKwkJdjRsMl9zdGRfaWQgKnA9YXJnOworCisJCXByaW50ayAoIiVzOiB2YWx1ZT0lTHVcbiIsIHMsICh1bnNpZ25lZCBsb25nIGxvbmcpKnApOworCQlicmVhazsKKwl9CisJfQorfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBFWFBPUlRfU1lNQk9MKHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdCk7CkBAIC0zNzYsNiArOTIxLDcgQEAKIEVYUE9SVF9TWU1CT0wodjRsMl9maWVsZF9uYW1lcyk7CiBFWFBPUlRfU1lNQk9MKHY0bDJfdHlwZV9uYW1lcyk7CiBFWFBPUlRfU1lNQk9MKHY0bF9wcmludGtfaW9jdGwpOworRVhQT1JUX1NZTUJPTCh2NGxfcHJpbnRrX2lvY3RsX2FyZyk7CiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLWR2Yi5jCmluZGV4IDBhNDAwNGEuLmNhZjNlN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLWR2Yi5jCkBAIC05Niw3ICs5Niw3IEBACiAJaWYgKCFkZW11eC0+ZG14LmZyb250ZW5kKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJmR2Yi0+bG9jayk7CisJbXV0ZXhfbG9jaygmZHZiLT5sb2NrKTsKIAlkdmItPm5mZWVkcysrOwogCXJjID0gZHZiLT5uZmVlZHM7CiAKQEAgLTExMCw3ICsxMTAsNyBAQAogCX0KIAogb3V0OgotCXVwKCZkdmItPmxvY2spOworCW11dGV4X3VubG9jaygmZHZiLT5sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEyMCwxNCArMTIwLDE0IEBACiAJc3RydWN0IHZpZGVvYnVmX2R2YiAqZHZiID0gZGVtdXgtPnByaXY7CiAJaW50IGVyciA9IDA7CiAKLQlkb3duKCZkdmItPmxvY2spOworCW11dGV4X2xvY2soJmR2Yi0+bG9jayk7CiAJZHZiLT5uZmVlZHMtLTsKIAlpZiAoMCA9PSBkdmItPm5mZWVkcyAgJiYgIE5VTEwgIT0gZHZiLT50aHJlYWQpIHsKIAkJLy8gRklYTUU6IGN4ODgwMl9jYW5jZWxfYnVmZmVycyhkZXYpOwogCQllcnIgPSBrdGhyZWFkX3N0b3AoZHZiLT50aHJlYWQpOwogCQlkdmItPnRocmVhZCA9IE5VTEw7CiAJfQotCXVwKCZkdmItPmxvY2spOworCW11dGV4X3VubG9jaygmZHZiLT5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMzksNyArMTM5LDcgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0JaW5pdF9NVVRFWCgmZHZiLT5sb2NrKTsKKwltdXRleF9pbml0KCZkdmItPmxvY2spOwogCiAJLyogcmVnaXN0ZXIgYWRhcHRlciAqLwogCXJlc3VsdCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZkdmItPmFkYXB0ZXIsIGR2Yi0+bmFtZSwgbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi5jCmluZGV4IDllZjQ3NzUuLmQyY2EwZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW8tYnVmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYuYwpAQCAtMSwxNSArMSwyMCBAQAogLyoKICAqCiAgKiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgZm9yIHZpZGVvNGxpbnV4IGNhcHR1cmUgYnVmZmVycywgdG8gaGFuZGxlCi0gKiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUENJIERNQS4gIFJpZ2h0IG5vdyBidHR2ICsgc2FhNzEzNCB1c2UgaXQuCisgKiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgUENJIERNQS4KKyAqIFJpZ2h0IG5vdywgYnR0diwgc2FhNzEzNCwgc2FhNzE0NiBhbmQgY3g4OCB1c2UgaXQuCiAgKgogICogVGhlIGZ1bmN0aW9ucyBleHBlY3QgdGhlIGhhcmR3YXJlIGJlaW5nIGFibGUgdG8gc2NhdHRlciBnYXR0ZXIKICAqIChpLmUuIHRoZSBidWZmZXJzIGFyZSBub3QgbGluZWFyIGluIHBoeXNpY2FsIG1lbW9yeSwgYnV0IGZyYWdtZW50ZWQKICAqIGludG8gUEFHRV9TSVpFIGNodW5rcykuICBUaGV5IGFsc28gYXNzdW1lIHRoZSBkcml2ZXIgZG9lcyBub3QgbmVlZAotICogdG8gdG91Y2ggdGhlIHZpZGVvIGRhdGEgKHRodXMgaXQgaXMgcHJvYmFibHkgbm90IHVzZWZ1bCBmb3IgVVNCIDEuMQotICogYXMgZGF0YSBvZnRlbiBtdXN0IGJlIHVuY29tcHJlc3NlZCBieSB0aGUgZHJpdmVycykuCisgKiB0byB0b3VjaCB0aGUgdmlkZW8gZGF0YS4KKyAqCisgKiBkZXZpY2Ugc3BlY2lmaWMgbWFwL3VubWFwL3N5bmMgc3R1ZmYgbm93IGFyZSBtYXBwZWQgYXMgb3BlcmF0aW9ucworICogdG8gYWxsb3cgaXRzIHVzYWdlIGJ5IFVTQiBhbmQgdmlydHVhbCBkZXZpY2VzLgogICoKICAqIChjKSAyMDAxLTIwMDQgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU1VTRSBMYWJzXQorICogKGMpIDIwMDYgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKiAoYykgMjAwNiBUZWQgV2FsdGhlciBhbmQgSm9obiBTb2tvbAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTksOCArNjQsNyBAQAogCQlwZyA9IHZtYWxsb2NfdG9fcGFnZSh2aXJ0KTsKIAkJaWYgKE5VTEwgPT0gcGcpCiAJCQlnb3RvIGVycjsKLQkJaWYgKFBhZ2VIaWdoTWVtKHBnKSkKLQkJCUJVRygpOworCQlCVUdfT04oUGFnZUhpZ2hNZW0ocGcpKTsKIAkJc2dsaXN0W2ldLnBhZ2UgICA9IHBnOwogCQlzZ2xpc3RbaV0ubGVuZ3RoID0gUEFHRV9TSVpFOwogCX0KQEAgLTE2OCw2ICsxNzIsOSBAQAogCQlkcHJpbnRrKDEsInZtYWxsb2NfMzIoJWQgcGFnZXMpIGZhaWxlZFxuIixucl9wYWdlcyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwlkcHJpbnRrKDEsInZtYWxsb2MgaXMgYXQgYWRkciAweCUwOGx4LCBzaXplPSVkXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nKWRtYS0+dm1hbGxvYywKKwkJCQlucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKIAltZW1zZXQoZG1hLT52bWFsbG9jLDAsbnJfcGFnZXMgPDwgUEFHRV9TSElGVCk7CiAJZG1hLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwogCXJldHVybiAwOwpAQCAtMTg3LDggKzE5NCwxMCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdmlkZW9idWZfZG1hX3BjaV9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQoraW50IHZpZGVvYnVmX2RtYV9tYXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlKiBxLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKIHsKKwl2b2lkICAgICAgICAgICAgICAgICAgICpkZXY9cS0+ZGV2OworCiAJTUFHSUNfQ0hFQ0soZG1hLT5tYWdpYyxNQUdJQ19ETUFCVUYpOwogCUJVR19PTigwID09IGRtYS0+bnJfcGFnZXMpOwogCkBAIC0xOTgsNyArMjA3LDcgQEAKIAl9CiAJaWYgKGRtYS0+dm1hbGxvYykgewogCQlkbWEtPnNnbGlzdCA9IHZpZGVvYnVmX3ZtYWxsb2NfdG9fc2cKLQkJCShkbWEtPnZtYWxsb2MsZG1hLT5ucl9wYWdlcyk7CisJCQkJCQkoZG1hLT52bWFsbG9jLGRtYS0+bnJfcGFnZXMpOwogCX0KIAlpZiAoZG1hLT5idXNfYWRkcikgewogCQlkbWEtPnNnbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksIEdGUF9LRVJORUwpOwpAQCAtMjEzLDEzICsyMjIsMTQgQEAKIAkJZHByaW50aygxLCJzY2F0dGVybGlzdCBpcyBOVUxMXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCiAJaWYgKCFkbWEtPmJ1c19hZGRyKSB7Ci0JCWRtYS0+c2dsZW4gPSBwY2lfbWFwX3NnKGRldixkbWEtPnNnbGlzdCxkbWEtPm5yX3BhZ2VzLAotCQkJCQlkbWEtPmRpcmVjdGlvbik7CisJCWlmIChxLT5vcHMtPnZiX21hcF9zZykgeworCQkJZG1hLT5zZ2xlbiA9IHEtPm9wcy0+dmJfbWFwX3NnKGRldixkbWEtPnNnbGlzdCwKKwkJCQkJZG1hLT5ucl9wYWdlcywgZG1hLT5kaXJlY3Rpb24pOworCQl9CiAJCWlmICgwID09IGRtYS0+c2dsZW4pIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IHBjaV9tYXBfc2cgZmFpbGVkXG4iLF9fRlVOQ1RJT05fXyk7CisJCQkgICAgICAgIiVzOiB2aWRlb2J1Zl9tYXBfc2cgZmFpbGVkXG4iLF9fRlVOQ1RJT05fXyk7CiAJCQlrZnJlZShkbWEtPnNnbGlzdCk7CiAJCQlkbWEtPnNnbGlzdCA9IE5VTEw7CiAJCQlkbWEtPnNnbGVuID0gMDsKQEAgLTIyOSwyNCArMjM5LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB2aWRlb2J1Zl9kbWFfcGNpX3N5bmMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQoraW50IHZpZGVvYnVmX2RtYV9zeW5jKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSogcSxzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpCiB7CisJdm9pZCAgICAgICAgICAgICAgICAgICAqZGV2PXEtPmRldjsKKwogCU1BR0lDX0NIRUNLKGRtYS0+bWFnaWMsTUFHSUNfRE1BQlVGKTsKIAlCVUdfT04oIWRtYS0+c2dsZW4pOwogCi0JaWYgKCFkbWEtPmJ1c19hZGRyKQotCQlwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdShkZXYsZG1hLT5zZ2xpc3QsZG1hLT5ucl9wYWdlcyxkbWEtPmRpcmVjdGlvbik7CisJaWYgKCFkbWEtPmJ1c19hZGRyICYmIHEtPm9wcy0+dmJfZG1hX3N5bmNfc2cpCisJCXEtPm9wcy0+dmJfZG1hX3N5bmNfc2coZGV2LGRtYS0+c2dsaXN0LGRtYS0+bnJfcGFnZXMsCisJCQkJCQkJZG1hLT5kaXJlY3Rpb24pOworCiAJcmV0dXJuIDA7CiB9CiAKLWludCB2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKK2ludCB2aWRlb2J1Zl9kbWFfdW5tYXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlKiBxLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKIHsKKwl2b2lkICAgICAgICAgICAgICAgICAgICpkZXY9cS0+ZGV2OworCiAJTUFHSUNfQ0hFQ0soZG1hLT5tYWdpYyxNQUdJQ19ETUFCVUYpOwogCWlmICghZG1hLT5zZ2xlbikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIWRtYS0+YnVzX2FkZHIpCi0JCXBjaV91bm1hcF9zZyhkZXYsZG1hLT5zZ2xpc3QsZG1hLT5ucl9wYWdlcyxkbWEtPmRpcmVjdGlvbik7CisJaWYgKCFkbWEtPmJ1c19hZGRyICYmIHEtPm9wcy0+dmJfdW5tYXBfc2cpCisJCQlxLT5vcHMtPnZiX3VubWFwX3NnKGRldixkbWEtPnNnbGlzdCxkbWEtPm5yX3BhZ2VzLAorCQkJCQkJCWRtYS0+ZGlyZWN0aW9uKTsKIAlrZnJlZShkbWEtPnNnbGlzdCk7CiAJZG1hLT5zZ2xpc3QgPSBOVUxMOwogCWRtYS0+c2dsZW4gPSAwOwpAQCAtMzE5LDcgKzMzNiw3IEBACiB9CiAKIGludAotdmlkZW9idWZfaW9sb2NrKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAordmlkZW9idWZfaW9sb2NrKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSogcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCiAJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYnVmKQogewogCWludCBlcnIscGFnZXM7CkBAIC0zNTgsNyArMzc1LDcgQEAKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9Ci0JZXJyID0gdmlkZW9idWZfZG1hX3BjaV9tYXAocGNpLCZ2Yi0+ZG1hKTsKKwllcnIgPSB2aWRlb2J1Zl9kbWFfbWFwKHEsJnZiLT5kbWEpOwogCWlmICgwICE9IGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzY3LDkgKzM4NCw0MSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAordm9pZCB2aWRlb2J1Zl9xdWV1ZV9wY2koc3RydWN0IHZpZGVvYnVmX3F1ZXVlKiBxKQoreworCS8qIElmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIFBDSSBtYXAgc2cgKi8KKwlpZiAoIXEtPm9wcy0+dmJfbWFwX3NnKQorCQlxLT5vcHMtPnZiX21hcF9zZz0odmJfbWFwX3NnX3QgKilwY2lfbWFwX3NnOworCisJaWYgKCFxLT5vcHMtPnZiX2RtYV9zeW5jX3NnKQorCQlxLT5vcHMtPnZiX2RtYV9zeW5jX3NnPSh2Yl9tYXBfc2dfdCAqKXBjaV9kbWFfc3luY19zZ19mb3JfY3B1OworCWlmICghcS0+b3BzLT52Yl91bm1hcF9zZykKKwkJcS0+b3BzLT52Yl91bm1hcF9zZz0odmJfbWFwX3NnX3QgKilwY2lfdW5tYXBfc2c7Cit9CisKK2ludCB2aWRlb2J1Zl9wY2lfZG1hX21hcChzdHJ1Y3QgcGNpX2RldiAqcGNpLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgcTsKKworCXEuZGV2PXBjaTsKKwlxLm9wcy0+dmJfbWFwX3NnPSh2Yl9tYXBfc2dfdCAqKXBjaV91bm1hcF9zZzsKKworCXJldHVybiAodmlkZW9idWZfZG1hX3VubWFwKCZxLGRtYSkpOworfQorCitpbnQgdmlkZW9idWZfcGNpX2RtYV91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGNpLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgcTsKKworCXEuZGV2PXBjaTsKKwlxLm9wcy0+dmJfbWFwX3NnPSh2Yl9tYXBfc2dfdCAqKXBjaV91bm1hcF9zZzsKKworCXJldHVybiAodmlkZW9idWZfZG1hX3VubWFwKCZxLGRtYSkpOworfQorCiB2b2lkIHZpZGVvYnVmX3F1ZXVlX2luaXQoc3RydWN0IHZpZGVvYnVmX3F1ZXVlKiBxLAogCQkJIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgKm9wcywKLQkJCSBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJIHZvaWQgKmRldiwKIAkJCSBzcGlubG9ja190ICppcnFsb2NrLAogCQkJIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAogCQkJIGVudW0gdjRsMl9maWVsZCBmaWVsZCwKQEAgLTM3OCwxNCArNDI3LDE2IEBACiB7CiAJbWVtc2V0KHEsMCxzaXplb2YoKnEpKTsKIAlxLT5pcnFsb2NrID0gaXJxbG9jazsKLQlxLT5wY2kgICAgID0gcGNpOworCXEtPmRldiAgICAgPSBkZXY7CiAJcS0+dHlwZSAgICA9IHR5cGU7CiAJcS0+ZmllbGQgICA9IGZpZWxkOwogCXEtPm1zaXplICAgPSBtc2l6ZTsKIAlxLT5vcHMgICAgID0gb3BzOwogCXEtPnByaXZfZGF0YSA9IHByaXY7CiAKLQlpbml0X01VVEVYKCZxLT5sb2NrKTsKKwl2aWRlb2J1Zl9xdWV1ZV9wY2kocSk7CisKKwltdXRleF9pbml0KCZxLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcS0+c3RyZWFtKTsKIH0KIApAQCAtNDI4LDExICs0NzksMTIgQEAKIHZvaWQKIHZpZGVvYnVmX3F1ZXVlX2NhbmNlbChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzPTA7CiAJaW50IGk7CiAKIAkvKiByZW1vdmUgcXVldWVkIGJ1ZmZlcnMgZnJvbSBsaXN0ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUocS0+aXJxbG9jayxmbGFncyk7CisJaWYgKHEtPmlycWxvY2spCisJCXNwaW5fbG9ja19pcnFzYXZlKHEtPmlycWxvY2ssZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBWSURFT19NQVhfRlJBTUU7IGkrKykgewogCQlpZiAoTlVMTCA9PSBxLT5idWZzW2ldKQogCQkJY29udGludWU7CkBAIC00NDEsNyArNDkzLDggQEAKIAkJCXEtPmJ1ZnNbaV0tPnN0YXRlID0gU1RBVEVfRVJST1I7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5pcnFsb2NrLGZsYWdzKTsKKwlpZiAocS0+aXJxbG9jaykKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5pcnFsb2NrLGZsYWdzKTsKIAogCS8qIGZyZWUgYWxsIGJ1ZmZlcnMgKyBjbGVhciBxdWV1ZSAqLwogCWZvciAoaSA9IDA7IGkgPCBWSURFT19NQVhfRlJBTUU7IGkrKykgewpAQCAtNTM1LDIxICs1ODgsMzEgQEAKIAl1bnNpZ25lZCBpbnQgc2l6ZSxjb3VudDsKIAlpbnQgcmV0dmFsOwogCi0JaWYgKHJlcS0+dHlwZSAhPSBxLT50eXBlKQorCWlmIChyZXEtPnR5cGUgIT0gcS0+dHlwZSkgeworCQlkcHJpbnRrKDEsInJlcWJ1ZnM6IHF1ZXVlIHR5cGUgaW52YWxpZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChyZXEtPmNvdW50IDwgMSkKKwl9CisJaWYgKHJlcS0+Y291bnQgPCAxKSB7CisJCWRwcmludGsoMSwicmVxYnVmczogY291bnQgaW52YWxpZCAoJWQpXG4iLHJlcS0+Y291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVAgICAgICYmCiAJICAgIHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX1VTRVJQVFIgICYmCi0JICAgIHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX09WRVJMQVkpCisJICAgIHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX09WRVJMQVkpIHsKKwkJZHByaW50aygxLCJyZXFidWZzOiBtZW1vcnkgdHlwZSBpbnZhbGlkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JaWYgKHEtPnN0cmVhbWluZykKKwlpZiAocS0+c3RyZWFtaW5nKSB7CisJCWRwcmludGsoMSwicmVxYnVmczogc3RyZWFtaW5nIGFscmVhZHkgZXhpc3RzXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKLQlpZiAoIWxpc3RfZW1wdHkoJnEtPnN0cmVhbSkpCisJfQorCWlmICghbGlzdF9lbXB0eSgmcS0+c3RyZWFtKSkgeworCQlkcHJpbnRrKDEsInJlcWJ1ZnM6IHN0cmVhbSBydW5uaW5nXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKLQlkb3duKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT5sb2NrKTsKIAljb3VudCA9IHJlcS0+Y291bnQ7CiAJaWYgKGNvdW50ID4gVklERU9fTUFYX0ZSQU1FKQogCQljb3VudCA9IFZJREVPX01BWF9GUkFNRTsKQEAgLTU2MCwyNSArNjIzLDMzIEBACiAJCWNvdW50LCBzaXplLCAoY291bnQqc2l6ZSk+PlBBR0VfU0hJRlQpOwogCiAJcmV0dmFsID0gdmlkZW9idWZfbW1hcF9zZXR1cChxLGNvdW50LHNpemUscmVxLT5tZW1vcnkpOwotCWlmIChyZXR2YWwgPCAwKQorCWlmIChyZXR2YWwgPCAwKSB7CisJCWRwcmludGsoMSwicmVxYnVmczogbW1hcCBzZXR1cCByZXR1cm5lZCAlZFxuIixyZXR2YWwpOwogCQlnb3RvIGRvbmU7CisJfQogCiAJcmVxLT5jb3VudCA9IGNvdW50OwogCiAgZG9uZToKLQl1cCgmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBpbnQKIHZpZGVvYnVmX3F1ZXJ5YnVmKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQogewotCWlmICh1bmxpa2VseShiLT50eXBlICE9IHEtPnR5cGUpKQorCWlmICh1bmxpa2VseShiLT50eXBlICE9IHEtPnR5cGUpKSB7CisJCWRwcmludGsoMSwicXVlcnlidWY6IFdyb25nIHR5cGUuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHVubGlrZWx5KGItPmluZGV4IDwgMCB8fCBiLT5pbmRleCA+PSBWSURFT19NQVhfRlJBTUUpKQorCX0KKwlpZiAodW5saWtlbHkoYi0+aW5kZXggPCAwIHx8IGItPmluZGV4ID49IFZJREVPX01BWF9GUkFNRSkpIHsKKwkJZHByaW50aygxLCJxdWVyeWJ1ZjogaW5kZXggb3V0IG9mIHJhbmdlLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwotCWlmICh1bmxpa2VseShOVUxMID09IHEtPmJ1ZnNbYi0+aW5kZXhdKSkKKwl9CisJaWYgKHVubGlrZWx5KE5VTEwgPT0gcS0+YnVmc1tiLT5pbmRleF0pKSB7CisJCWRwcmludGsoMSwicXVlcnlidWY6IGJ1ZmZlciBpcyBudWxsLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAl2aWRlb2J1Zl9zdGF0dXMoYixxLT5idWZzW2ItPmluZGV4XSxxLT50eXBlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU4OSwzMSArNjYwLDQ1IEBACiB7CiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmOwogCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M9MDsKIAlpbnQgcmV0dmFsOwogCi0JZG93bigmcS0+bG9jayk7CisJbXV0ZXhfbG9jaygmcS0+bG9jayk7CiAJcmV0dmFsID0gLUVCVVNZOwotCWlmIChxLT5yZWFkaW5nKQorCWlmIChxLT5yZWFkaW5nKSB7CisJCWRwcmludGsoMSwicWJ1ZjogUmVhZGluZyBydW5uaW5nLi4uXG4iKTsKIAkJZ290byBkb25lOworCX0KIAlyZXR2YWwgPSAtRUlOVkFMOwotCWlmIChiLT50eXBlICE9IHEtPnR5cGUpCisJaWYgKGItPnR5cGUgIT0gcS0+dHlwZSkgeworCQlkcHJpbnRrKDEsInFidWY6IFdyb25nIHR5cGUuXG4iKTsKIAkJZ290byBkb25lOwotCWlmIChiLT5pbmRleCA8IDAgfHwgYi0+aW5kZXggPj0gVklERU9fTUFYX0ZSQU1FKQorCX0KKwlpZiAoYi0+aW5kZXggPCAwIHx8IGItPmluZGV4ID49IFZJREVPX01BWF9GUkFNRSkgeworCQlkcHJpbnRrKDEsInFidWY6IGluZGV4IG91dCBvZiByYW5nZS5cbiIpOwogCQlnb3RvIGRvbmU7CisJfQogCWJ1ZiA9IHEtPmJ1ZnNbYi0+aW5kZXhdOwotCWlmIChOVUxMID09IGJ1ZikKKwlpZiAoTlVMTCA9PSBidWYpIHsKKwkJZHByaW50aygxLCJxYnVmOiBidWZmZXIgaXMgbnVsbC5cbiIpOwogCQlnb3RvIGRvbmU7CisJfQogCU1BR0lDX0NIRUNLKGJ1Zi0+bWFnaWMsTUFHSUNfQlVGRkVSKTsKLQlpZiAoYnVmLT5tZW1vcnkgIT0gYi0+bWVtb3J5KQorCWlmIChidWYtPm1lbW9yeSAhPSBiLT5tZW1vcnkpIHsKKwkJZHByaW50aygxLCJxYnVmOiBtZW1vcnkgdHlwZSBpcyB3cm9uZy5cbiIpOwogCQlnb3RvIGRvbmU7CisJfQogCWlmIChidWYtPnN0YXRlID09IFNUQVRFX1FVRVVFRCB8fAotCSAgICBidWYtPnN0YXRlID09IFNUQVRFX0FDVElWRSkKKwkgICAgYnVmLT5zdGF0ZSA9PSBTVEFURV9BQ1RJVkUpIHsKKwkJZHByaW50aygxLCJxYnVmOiBidWZmZXIgaXMgYWxyZWFkeSBxdWV1ZWQgb3IgYWN0aXZlLlxuIik7CiAJCWdvdG8gZG9uZTsKKwl9CiAKIAlpZiAoYi0+ZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX0lOUFVUKSB7Ci0JCWlmIChiLT5pbnB1dCA+PSBxLT5pbnB1dHMpCisJCWlmIChiLT5pbnB1dCA+PSBxLT5pbnB1dHMpIHsKKwkJCWRwcmludGsoMSwicWJ1Zjogd3JvbmcgaW5wdXQuXG4iKTsKIAkJCWdvdG8gZG9uZTsKKwkJfQogCQlidWYtPmlucHV0ID0gYi0+aW5wdXQ7CiAJfSBlbHNlIHsKIAkJYnVmLT5pbnB1dCA9IFVOU0VUOwpAQCAtNjIxLDEyICs3MDYsMTYgQEAKIAogCXN3aXRjaCAoYi0+bWVtb3J5KSB7CiAJY2FzZSBWNEwyX01FTU9SWV9NTUFQOgotCQlpZiAoMCA9PSBidWYtPmJhZGRyKQorCQlpZiAoMCA9PSBidWYtPmJhZGRyKSB7CisJCQlkcHJpbnRrKDEsInFidWY6IG1tYXAgcmVxdWVzdGVkIGJ1dCBidWZmZXIgYWRkciBpcyB6ZXJvIVxuIik7CiAJCQlnb3RvIGRvbmU7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgotCQlpZiAoYi0+bGVuZ3RoIDwgYnVmLT5ic2l6ZSkKKwkJaWYgKGItPmxlbmd0aCA8IGJ1Zi0+YnNpemUpIHsKKwkJCWRwcmludGsoMSwicWJ1ZjogYnVmZmVyIGxlbmd0aCBpcyBub3QgZW5vdWdoXG4iKTsKIAkJCWdvdG8gZG9uZTsKKwkJfQogCQlpZiAoU1RBVEVfTkVFRFNfSU5JVCAhPSBidWYtPnN0YXRlICYmIGJ1Zi0+YmFkZHIgIT0gYi0+bS51c2VycHRyKQogCQkJcS0+b3BzLT5idWZfcmVsZWFzZShxLGJ1Zik7CiAJCWJ1Zi0+YmFkZHIgPSBiLT5tLnVzZXJwdHI7CkBAIC02MzUsMjQgKzcyNCwzMSBAQAogCQlidWYtPmJvZmYgPSBiLT5tLm9mZnNldDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJZHByaW50aygxLCJxYnVmOiB3cm9uZyBtZW1vcnkgdHlwZVxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlkcHJpbnRrKDEsInFidWY6IHJlcXVlc3RpbmcgbmV4dCBmaWVsZFxuIik7CiAJZmllbGQgPSB2aWRlb2J1Zl9uZXh0X2ZpZWxkKHEpOwogCXJldHZhbCA9IHEtPm9wcy0+YnVmX3ByZXBhcmUocSxidWYsZmllbGQpOwotCWlmICgwICE9IHJldHZhbCkKKwlpZiAoMCAhPSByZXR2YWwpIHsKKwkJZHByaW50aygxLCJxYnVmOiBidWZmZXJfcHJlcGFyZSByZXR1cm5lZCAlZFxuIixyZXR2YWwpOwogCQlnb3RvIGRvbmU7CisJfQogCiAJbGlzdF9hZGRfdGFpbCgmYnVmLT5zdHJlYW0sJnEtPnN0cmVhbSk7CiAJaWYgKHEtPnN0cmVhbWluZykgewotCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5pcnFsb2NrLGZsYWdzKTsKKwkJaWYgKHEtPmlycWxvY2spCisJCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5pcnFsb2NrLGZsYWdzKTsKIAkJcS0+b3BzLT5idWZfcXVldWUocSxidWYpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPmlycWxvY2ssZmxhZ3MpOworCQlpZiAocS0+aXJxbG9jaykKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+aXJxbG9jayxmbGFncyk7CiAJfQorCWRwcmludGsoMSwicWJ1Zjogc3VjY2VkZWRcbiIpOwogCXJldHZhbCA9IDA7CiAKICBkb25lOgotCXVwKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY2MywyOCArNzU5LDQxIEBACiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmOwogCWludCByZXR2YWw7CiAKLQlkb3duKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT5sb2NrKTsKIAlyZXR2YWwgPSAtRUJVU1k7Ci0JaWYgKHEtPnJlYWRpbmcpCisJaWYgKHEtPnJlYWRpbmcpIHsKKwkJZHByaW50aygxLCJkcWJ1ZjogUmVhZGluZyBydW5uaW5nLi4uXG4iKTsKIAkJZ290byBkb25lOworCX0KIAlyZXR2YWwgPSAtRUlOVkFMOwotCWlmIChiLT50eXBlICE9IHEtPnR5cGUpCisJaWYgKGItPnR5cGUgIT0gcS0+dHlwZSkgeworCQlkcHJpbnRrKDEsImRxYnVmOiBXcm9uZyB0eXBlLlxuIik7CiAJCWdvdG8gZG9uZTsKLQlpZiAobGlzdF9lbXB0eSgmcS0+c3RyZWFtKSkKKwl9CisJaWYgKGxpc3RfZW1wdHkoJnEtPnN0cmVhbSkpIHsKKwkJZHByaW50aygxLCJkcWJ1Zjogc3RyZWFtIHJ1bm5pbmdcbiIpOwogCQlnb3RvIGRvbmU7CisJfQogCWJ1ZiA9IGxpc3RfZW50cnkocS0+c3RyZWFtLm5leHQsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHN0cmVhbSk7CiAJcmV0dmFsID0gdmlkZW9idWZfd2FpdG9uKGJ1Ziwgbm9uYmxvY2tpbmcsIDEpOwotCWlmIChyZXR2YWwgPCAwKQorCWlmIChyZXR2YWwgPCAwKSB7CisJCWRwcmludGsoMSwiZHFidWY6IHdhaXRvbiByZXR1cm5lZCAlZFxuIixyZXR2YWwpOwogCQlnb3RvIGRvbmU7CisJfQogCXN3aXRjaCAoYnVmLT5zdGF0ZSkgewogCWNhc2UgU1RBVEVfRVJST1I6CisJCWRwcmludGsoMSwiZHFidWY6IHN0YXRlIGlzIGVycm9yXG4iKTsKIAkJcmV0dmFsID0gLUVJTzsKLQkJLyogZmFsbCB0aHJvdWdoICovCisJCXZpZGVvYnVmX2RtYV9zeW5jKHEsJmJ1Zi0+ZG1hKTsKKwkJYnVmLT5zdGF0ZSA9IFNUQVRFX0lETEU7CisJCWJyZWFrOwogCWNhc2UgU1RBVEVfRE9ORToKLQkJdmlkZW9idWZfZG1hX3BjaV9zeW5jKHEtPnBjaSwmYnVmLT5kbWEpOworCQlkcHJpbnRrKDEsImRxYnVmOiBzdGF0ZSBpcyBkb25lXG4iKTsKKwkJdmlkZW9idWZfZG1hX3N5bmMocSwmYnVmLT5kbWEpOwogCQlidWYtPnN0YXRlID0gU1RBVEVfSURMRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJZHByaW50aygxLCJkcWJ1Zjogc3RhdGUgaW52YWxpZFxuIik7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC02OTMsNyArODAyLDcgQEAKIAl2aWRlb2J1Zl9zdGF0dXMoYixidWYscS0+dHlwZSk7CiAKICBkb25lOgotCXVwKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTcwMSwxMCArODEwLDEwIEBACiB7CiAJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqYnVmOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzPTA7CiAJaW50IHJldHZhbDsKIAotCWRvd24oJnEtPmxvY2spOworCW11dGV4X2xvY2soJnEtPmxvY2spOwogCXJldHZhbCA9IC1FQlVTWTsKIAlpZiAocS0+cmVhZGluZykKIAkJZ290byBkb25lOwpAQCAtNzEyLDE2ICs4MjEsMTggQEAKIAlpZiAocS0+c3RyZWFtaW5nKQogCQlnb3RvIGRvbmU7CiAJcS0+c3RyZWFtaW5nID0gMTsKLQlzcGluX2xvY2tfaXJxc2F2ZShxLT5pcnFsb2NrLGZsYWdzKTsKKwlpZiAocS0+aXJxbG9jaykKKwkJc3Bpbl9sb2NrX2lycXNhdmUocS0+aXJxbG9jayxmbGFncyk7CiAJbGlzdF9mb3JfZWFjaChsaXN0LCZxLT5zdHJlYW0pIHsKIAkJYnVmID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBzdHJlYW0pOwogCQlpZiAoYnVmLT5zdGF0ZSA9PSBTVEFURV9QUkVQQVJFRCkKIAkJCXEtPm9wcy0+YnVmX3F1ZXVlKHEsYnVmKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5pcnFsb2NrLGZsYWdzKTsKKwlpZiAocS0+aXJxbG9jaykKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5pcnFsb2NrLGZsYWdzKTsKIAogIGRvbmU6Ci0JdXAoJnEtPmxvY2spOworCW11dGV4X3VubG9jaygmcS0+bG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNzI5LDcgKzg0MCw3IEBACiB7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKLQlkb3duKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT5sb2NrKTsKIAlpZiAoIXEtPnN0cmVhbWluZykKIAkJZ290byBkb25lOwogCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbChxKTsKQEAgLTczNyw3ICs4NDgsNyBAQAogCXJldHZhbCA9IDA7CiAKICBkb25lOgotCXVwKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTc0Niw3ICs4NTcsNyBAQAogCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncz0wOwogCWludCByZXR2YWw7CiAKIAkvKiBzZXR1cCBzdHVmZiAqLwpAQCAtNzYzLDEyICs4NzQsMTQgQEAKIAkJZ290byBkb25lOwogCiAJLyogc3RhcnQgY2FwdHVyZSAmIHdhaXQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZShxLT5pcnFsb2NrLGZsYWdzKTsKKwlpZiAocS0+aXJxbG9jaykKKwkJc3Bpbl9sb2NrX2lycXNhdmUocS0+aXJxbG9jayxmbGFncyk7CiAJcS0+b3BzLT5idWZfcXVldWUocSxxLT5yZWFkX2J1Zik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5pcnFsb2NrLGZsYWdzKTsKKwlpZiAocS0+aXJxbG9jaykKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5pcnFsb2NrLGZsYWdzKTsKIAlyZXR2YWwgPSB2aWRlb2J1Zl93YWl0b24ocS0+cmVhZF9idWYsMCwwKTsKIAlpZiAoMCA9PSByZXR2YWwpIHsKLQkJdmlkZW9idWZfZG1hX3BjaV9zeW5jKHEtPnBjaSwmcS0+cmVhZF9idWYtPmRtYSk7CisJCXZpZGVvYnVmX2RtYV9zeW5jKHEsJnEtPnJlYWRfYnVmLT5kbWEpOwogCQlpZiAoU1RBVEVfRVJST1IgPT0gcS0+cmVhZF9idWYtPnN0YXRlKQogCQkJcmV0dmFsID0gLUVJTzsKIAkJZWxzZQpAQCAtNzg4LDExICs5MDEsMTEgQEAKIAkJCSAgaW50IG5vbmJsb2NraW5nKQogewogCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M9MDsKIAl1bnNpZ25lZCBzaXplLCBuYnVmcywgYnl0ZXM7CiAJaW50IHJldHZhbDsKIAotCWRvd24oJnEtPmxvY2spOworCW11dGV4X2xvY2soJnEtPmxvY2spOwogCiAJbmJ1ZnMgPSAxOyBzaXplID0gMDsKIAlxLT5vcHMtPmJ1Zl9zZXR1cChxLCZuYnVmcywmc2l6ZSk7CkBAIC04MTAsNiArOTIzLDcgQEAKIAkJLyogbmVlZCB0byBjYXB0dXJlIGEgbmV3IGZyYW1lICovCiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCXEtPnJlYWRfYnVmID0gdmlkZW9idWZfYWxsb2MocS0+bXNpemUpOworCQlkcHJpbnRrKDEsInZpZGVvIGFsbG9jPTB4JTA4eFxuIiwodW5zaWduZWQgaW50KSBxLT5yZWFkX2J1Zik7CiAJCWlmIChOVUxMID09IHEtPnJlYWRfYnVmKQogCQkJZ290byBkb25lOwogCQlxLT5yZWFkX2J1Zi0+bWVtb3J5ID0gVjRMMl9NRU1PUllfVVNFUlBUUjsKQEAgLTgyMSw5ICs5MzUsMTEgQEAKIAkJCXEtPnJlYWRfYnVmID0gTlVMTDsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5pcnFsb2NrLGZsYWdzKTsKKwkJaWYgKHEtPmlycWxvY2spCisJCQlzcGluX2xvY2tfaXJxc2F2ZShxLT5pcnFsb2NrLGZsYWdzKTsKIAkJcS0+b3BzLT5idWZfcXVldWUocSxxLT5yZWFkX2J1Zik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+aXJxbG9jayxmbGFncyk7CisJCWlmIChxLT5pcnFsb2NrKQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5pcnFsb2NrLGZsYWdzKTsKIAkJcS0+cmVhZF9vZmYgPSAwOwogCX0KIApAQCAtODMxLDcgKzk0Nyw3IEBACiAJcmV0dmFsID0gdmlkZW9idWZfd2FpdG9uKHEtPnJlYWRfYnVmLCBub25ibG9ja2luZywgMSk7CiAJaWYgKDAgIT0gcmV0dmFsKQogCQlnb3RvIGRvbmU7Ci0JdmlkZW9idWZfZG1hX3BjaV9zeW5jKHEtPnBjaSwmcS0+cmVhZF9idWYtPmRtYSk7CisJdmlkZW9idWZfZG1hX3N5bmMocSwmcS0+cmVhZF9idWYtPmRtYSk7CiAKIAlpZiAoU1RBVEVfRVJST1IgPT0gcS0+cmVhZF9idWYtPnN0YXRlKSB7CiAJCS8qIGNhdGNoIEkvTyBlcnJvcnMgKi8KQEAgLTg2MCwxNCArOTc2LDE0IEBACiAJfQogCiAgZG9uZToKLQl1cCgmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBpbnQgdmlkZW9idWZfcmVhZF9zdGFydChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEpCiB7CiAJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncz0wOwogCWludCBjb3VudCA9IDAsIHNpemUgPSAwOwogCWludCBlcnIsIGk7CiAKQEAgLTg4OCwxMCArMTAwNCwxMiBAQAogCQkJcmV0dXJuIGVycjsKIAkJbGlzdF9hZGRfdGFpbCgmcS0+YnVmc1tpXS0+c3RyZWFtLCAmcS0+c3RyZWFtKTsKIAl9Ci0Jc3Bpbl9sb2NrX2lycXNhdmUocS0+aXJxbG9jayxmbGFncyk7CisJaWYgKHEtPmlycWxvY2spCisJCXNwaW5fbG9ja19pcnFzYXZlKHEtPmlycWxvY2ssZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCQlxLT5vcHMtPmJ1Zl9xdWV1ZShxLHEtPmJ1ZnNbaV0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+aXJxbG9jayxmbGFncyk7CisJaWYgKHEtPmlycWxvY2spCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+aXJxbG9jayxmbGFncyk7CiAJcS0+cmVhZGluZyA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC05MTksMTAgKzEwMzcsMTAgQEAKIHsKIAl1bnNpZ25lZCBpbnQgKmZjLCBieXRlczsKIAlpbnQgZXJyLCByZXR2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzPTA7CiAKIAlkcHJpbnRrKDIsIiVzXG4iLF9fRlVOQ1RJT05fXyk7Ci0JZG93bigmcS0+bG9jayk7CisJbXV0ZXhfbG9jaygmcS0+bG9jayk7CiAJcmV0dmFsID0gLUVCVVNZOwogCWlmIChxLT5zdHJlYW1pbmcpCiAJCWdvdG8gZG9uZTsKQEAgLTk4Niw5ICsxMTA0LDExIEBACiAJCWlmIChxLT5yZWFkX29mZiA9PSBxLT5yZWFkX2J1Zi0+c2l6ZSkgewogCQkJbGlzdF9hZGRfdGFpbCgmcS0+cmVhZF9idWYtPnN0cmVhbSwKIAkJCQkgICAgICAmcS0+c3RyZWFtKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKHEtPmlycWxvY2ssZmxhZ3MpOworCQkJaWYgKHEtPmlycWxvY2spCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUocS0+aXJxbG9jayxmbGFncyk7CiAJCQlxLT5vcHMtPmJ1Zl9xdWV1ZShxLHEtPnJlYWRfYnVmKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+aXJxbG9jayxmbGFncyk7CisJCQlpZiAocS0+aXJxbG9jaykKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPmlycWxvY2ssZmxhZ3MpOwogCQkJcS0+cmVhZF9idWYgPSBOVUxMOwogCQl9CiAJCWlmIChyZXR2YWwgPCAwKQpAQCAtOTk2LDcgKzExMTYsNyBAQAogCX0KIAogIGRvbmU6Ci0JdXAoJnEtPmxvY2spOworCW11dGV4X3VubG9jaygmcS0+bG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTAwNyw3ICsxMTI3LDcgQEAKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYgPSBOVUxMOwogCXVuc2lnbmVkIGludCByYyA9IDA7CiAKLQlkb3duKCZxLT5sb2NrKTsKKwltdXRleF9sb2NrKCZxLT5sb2NrKTsKIAlpZiAocS0+c3RyZWFtaW5nKSB7CiAJCWlmICghbGlzdF9lbXB0eSgmcS0+c3RyZWFtKSkKIAkJCWJ1ZiA9IGxpc3RfZW50cnkocS0+c3RyZWFtLm5leHQsCkBAIC0xMDM1LDcgKzExNTUsNyBAQAogCQkgICAgYnVmLT5zdGF0ZSA9PSBTVEFURV9FUlJPUikKIAkJCXJjID0gUE9MTElOfFBPTExSRE5PUk07CiAJfQotCXVwKCZxLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnEtPmxvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtMTA2NCw3ICsxMTg0LDcgQEAKIAltYXAtPmNvdW50LS07CiAJaWYgKDAgPT0gbWFwLT5jb3VudCkgewogCQlkcHJpbnRrKDEsIm11bm1hcCAlcCBxPSVwXG4iLG1hcCxxKTsKLQkJZG93bigmcS0+bG9jayk7CisJCW11dGV4X2xvY2soJnEtPmxvY2spOwogCQlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKIAkJCWlmIChOVUxMID09IHEtPmJ1ZnNbaV0pCiAJCQkJY29udGludWU7CkBAIC0xMDc2LDcgKzExOTYsNyBAQAogCQkJcS0+YnVmc1tpXS0+YmFkZHIgPSAwOwogCQkJcS0+b3BzLT5idWZfcmVsZWFzZShxLHEtPmJ1ZnNbaV0pOwogCQl9Ci0JCXVwKCZxLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKIAkJa2ZyZWUobWFwKTsKIAl9CiAJcmV0dXJuOwpAQCAtMTE3MCw3ICsxMjkwLDcgQEAKIAl1bnNpZ25lZCBpbnQgZmlyc3QsbGFzdCxzaXplLGk7CiAJaW50IHJldHZhbDsKIAotCWRvd24oJnEtPmxvY2spOworCW11dGV4X2xvY2soJnEtPmxvY2spOwogCXJldHZhbCA9IC1FSU5WQUw7CiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkgewogCQlkcHJpbnRrKDEsIm1tYXAgYXBwIGJ1ZzogUFJPVF9XUklURSBwbGVhc2VcbiIpOwpAQCAtMTIzOCw3ICsxMzU4LDcgQEAKIAlyZXR2YWwgPSAwOwogCiAgZG9uZToKLQl1cCgmcS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMjUwLDExICsxMzcwLDE0IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9kbWFfaW5pdF91c2VyKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2RtYV9pbml0X2tlcm5lbCk7CiBFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9kbWFfaW5pdF9vdmVybGF5KTsKLUVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2RtYV9wY2lfbWFwKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2RtYV9wY2lfc3luYyk7Ci1FWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2RtYV9tYXApOworRVhQT1JUX1NZTUJPTF9HUEwodmlkZW9idWZfZG1hX3N5bmMpOworRVhQT1JUX1NZTUJPTF9HUEwodmlkZW9idWZfZG1hX3VubWFwKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2RtYV9mcmVlKTsKIAorRVhQT1JUX1NZTUJPTF9HUEwodmlkZW9idWZfcGNpX2RtYV9tYXApOworRVhQT1JUX1NZTUJPTF9HUEwodmlkZW9idWZfcGNpX2RtYV91bm1hcCk7CisKIEVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2FsbG9jKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX3dhaXRvbik7CiBFWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9pb2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2NvZGVjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuaAppbmRleCAxNTZhZTU3Li44YzIzMzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvY29kZWMuaApAQCAtNTYsOCArNTYsOCBAQAogICAgdGhlIHNsYXZlIGlzIGJvdW5kIHRvIGl0KS4gT3RoZXJ3aXNlIGl0IGRvZXNuJ3QgbmVlZCB0aGlzIGZ1bmN0aW9ucyBhbmQKICAgIHRoZXJmb3IgdGhleSBtYXkgbm90IGJlIGluaXRpYWxpemVkLgogCi0gICBUaGUgb3RoZXIgZnVjdGlvbnMgYXJlIGp1c3QgZm9yIGNvbnZlbmllbmNlLCBhcyB0aGV5IGFyZSBmb3Igc2h1cmUgdXNlZCBieQotICAgbW9zdC9hbGwgb2YgdGhlIGNvZGVjcy4gVGhlIGxhc3Qgb25lcyBtYXkgYmUgb21taXRlZCwgdG9vLiAKKyAgIFRoZSBvdGhlciBmdWN0aW9ucyBhcmUganVzdCBmb3IgY29udmVuaWVuY2UsIGFzIHRoZXkgYXJlIGZvciBzdXJlIHVzZWQgYnkKKyAgIG1vc3QvYWxsIG9mIHRoZSBjb2RlY3MuIFRoZSBsYXN0IG9uZXMgbWF5IGJlIG9tbWl0ZWQsIHRvby4KIAogICAgU2VlIHRoZSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb24gYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHdoaWNoIGRhdGEgaGFzCiAgICB0byBiZSBzZXQgdXAgZm9yIHRoZSBtYXN0ZXIgYW5kIHRoZSBzbGF2ZS4KQEAgLTc1LDUyICs3NSw1MiBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKIC8qCi0gICA9PT09IG1hc3RlciBzZXR1cCA9PT09IAorICAgPT09PSBtYXN0ZXIgc2V0dXAgPT09PQogICAgbmFtZSAtPiBuYW1lIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGZvciByZWZlcmVuY2UgYW5kIGRlYnVnZ2luZwogICAgbWFzdGVyX2RhdGEgLT4gIGRhdGEgcmVmLiBmb3IgdGhlIG1hc3RlciAoZS5nLiB0aGUgenIzNjA1NSw1Nyw2NykKICAgIHJlYWRyZWcgLT4gcmVmLiB0byByZWFkLWZuIGZyb20gcmVnaXN0ZXIgKHNldHVwIGJ5IG1hc3RlciwgdXNlZCBieSBzbGF2ZSkKICAgIHdyaXRlcmVnIC0+IHJlZi4gdG8gd3JpdGUtZm4gdG8gcmVnaXN0ZXIgKHNldHVwIGJ5IG1hc3RlciwgdXNlZCBieSBzbGF2ZSkKLSAgICAgICAgICAgICAgIHRoaXMgdHdvIGZ1bmN0aW9ucyBkbyB0aGUgbG93bGV2ZWwgSS9PIGpvYgorCSAgICAgICB0aGlzIHR3byBmdW5jdGlvbnMgZG8gdGhlIGxvd2xldmVsIEkvTyBqb2IKIAotICAgPT09PSBzbGF2ZSBmdW5jdGlvbmFsaXR5IHNldHVwID09PT0gCi0gICBzbGF2ZV9kYXRhIC0+IGRhdGEgcmVmLiBmb3IgdGhlIHNsYXZlIChlLmcuIHRoZSB6cjM2MDUwLDYwKSAKKyAgID09PT0gc2xhdmUgZnVuY3Rpb25hbGl0eSBzZXR1cCA9PT09CisgICBzbGF2ZV9kYXRhIC0+IGRhdGEgcmVmLiBmb3IgdGhlIHNsYXZlIChlLmcuIHRoZSB6cjM2MDUwLDYwKQogICAgY2hlY2sgLT4gZm4tcmVmLiBjaGVja3MgYXZhaWxhYmlsaXR5IG9mIGFuIGRldmljZSwgcmV0dXJucyAtRUlPIG9uIGZhaWx1cmUgb3IKLSAgICAgICAgICAgIHRoZSB0eXBlIG9uIHN1Y2Nlc3MKLSAgICAgICAgICAgIHRoaXMgbWFrZXMgZXNwY2VjaWFsbHkgc2Vuc2UgaWYgYSBkcml2ZXIgbW9kdWxlIHN1cHBvcnRzIG1vcmUgdGhhbgotICAgICAgICAgICAgb25lIGNvZGVjIHdoaWNoIG1heSBiZSBxdWl0ZSBzaW1pbGFyIHRvIGFjY2VzcywgbmV2ZXJ0aGVsZXNzIGl0Ci0gICAgICAgICAgICBpcyBnb29kIGZvciBhIGZpcnN0IGZ1bmN0aW9uYWxpdHkgY2hlY2sgCisJICAgIHRoZSB0eXBlIG9uIHN1Y2Nlc3MKKwkgICAgdGhpcyBtYWtlcyBlc3BjZWNpYWxseSBzZW5zZSBpZiBhIGRyaXZlciBtb2R1bGUgc3VwcG9ydHMgbW9yZSB0aGFuCisJICAgIG9uZSBjb2RlYyB3aGljaCBtYXkgYmUgcXVpdGUgc2ltaWxhciB0byBhY2Nlc3MsIG5ldmVydGhlbGVzcyBpdAorCSAgICBpcyBnb29kIGZvciBhIGZpcnN0IGZ1bmN0aW9uYWxpdHkgY2hlY2sKIAotICAgLS0gbWFpbiBmdW5jdGlvbnMgeW91IGFsd2F5cyBuZWVkIGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIC0tIAorICAgLS0gbWFpbiBmdW5jdGlvbnMgeW91IGFsd2F5cyBuZWVkIGZvciBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIC0tCiAKICAgIHNldF9tb2RlIC0+IHRoaXMgZm4tcmVmLiByZXNldHMgdGhlIGVudGlyZSBjb2RlYywgYW5kIHNldHMgdXAgdGhlIG1vZGUKLSAgICAgICAgICAgICAgIHdpdGggdGhlIGxhc3QgZGVmaW5lZCBub3JtL3NpemUgKG9yIGRldmljZSBkZWZhdWx0IGlmIG5vdAotICAgICAgICAgICAgICAgYXZhaWxhYmxlKSAtIGl0IHJldHVybnMgMCBpZiB0aGUgbW9kZSBpcyBwb3NzaWJsZSAKKwkgICAgICAgd2l0aCB0aGUgbGFzdCBkZWZpbmVkIG5vcm0vc2l6ZSAob3IgZGV2aWNlIGRlZmF1bHQgaWYgbm90CisJICAgICAgIGF2YWlsYWJsZSkgLSBpdCByZXR1cm5zIDAgaWYgdGhlIG1vZGUgaXMgcG9zc2libGUKICAgIHNldF9zaXplIC0+IHRoaXMgZm4tcmVmLiBzZXRzIHRoZSBub3JtIGFuZCBpbWFnZSBzaXplIGZvcgotICAgICAgICAgICAgICAgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiAocmV0dXJucyAwIG9uIHN1Y2Nlc3MpIAotICAgICAgICAgICAgICAgdGhlIG5vcm0gcGFyYW0gaXMgZGVmaW5lZCBpbiB2aWRlb2Rldi5oIChWSURFT19NT0RFXyopIAorCSAgICAgICBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIChyZXR1cm5zIDAgb24gc3VjY2VzcykKKwkgICAgICAgdGhlIG5vcm0gcGFyYW0gaXMgZGVmaW5lZCBpbiB2aWRlb2Rldi5oIChWSURFT19NT0RFXyopCiAKICAgIGFkZGl0aW9uYWwgc2V0dXAgbWF5IGJlIGF2YWlsYWJsZSwgdG9vIC0gYnV0IHRoZSBjb2RlYyBzaG91bGQgd29yayB3aXRoCi0gICBzb21lIGRlZmF1bHQgdmFsdWVzIGV2ZW4gd2l0aG91dCB0aGlzIAorICAgc29tZSBkZWZhdWx0IHZhbHVlcyBldmVuIHdpdGhvdXQgdGhpcwogCi0gICBzZXRfZGF0YSAtPiBzZXRzIGRldmljZS1zcGVjaWZpYyBkYXRhICh0YWJsZXMsIHF1YWxpdHkgZXRjLikgCi0gICBnZXRfZGF0YSAtPiBxdWVyeSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAodGFibGVzLCBxdWFsaXR5IGV0Yy4pIAorICAgc2V0X2RhdGEgLT4gc2V0cyBkZXZpY2Utc3BlY2lmaWMgZGF0YSAodGFibGVzLCBxdWFsaXR5IGV0Yy4pCisgICBnZXRfZGF0YSAtPiBxdWVyeSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAodGFibGVzLCBxdWFsaXR5IGV0Yy4pCiAKLSAgIGlmIHRoZSBkZXZpY2UgZGVsaXZlcnMgaW50ZXJydXB0cywgdGhleSBtYXkgYmUgc2V0dXAvaGFuZGxlZCBoZXJlIAotICAgc2V0dXBfaW50ZXJydXB0IC0+IGNvZGVjIGlycSBzZXR1cCAobm90IG5lZWRlZCBmb3IgMzYwNTAvNjApIAotICAgaGFuZGxlX2ludGVycnVwdCAtPiBjb2RlYyBpcnEgaGFuZGxpbmcgKG5vdCBuZWVkZWQgZm9yIDM2MDUwLzYwKSAKKyAgIGlmIHRoZSBkZXZpY2UgZGVsaXZlcnMgaW50ZXJydXB0cywgdGhleSBtYXkgYmUgc2V0dXAvaGFuZGxlZCBoZXJlCisgICBzZXR1cF9pbnRlcnJ1cHQgLT4gY29kZWMgaXJxIHNldHVwIChub3QgbmVlZGVkIGZvciAzNjA1MC82MCkKKyAgIGhhbmRsZV9pbnRlcnJ1cHQgLT4gY29kZWMgaXJxIGhhbmRsaW5nIChub3QgbmVlZGVkIGZvciAzNjA1MC82MCkKIAotICAgaWYgdGhlIGRldmljZSBkZWxpdmVycyBwaWN0dXJlcywgdGhleSBtYXkgYmUgaGFuZGxlZCBoZXJlIAotICAgcHV0X2ltYWdlIC0+IHB1dHMgaW1hZ2UgZGF0YSB0byB0aGUgY29kZWMgKG5vdCBuZWVkZWQgZm9yIDM2MDUwLzYwKSAKLSAgIGdldF9pbWFnZSAtPiBnZXRzIGltYWdlIGRhdGEgZnJvbSB0aGUgY29kZWMgKG5vdCBuZWVkZWQgZm9yIDM2MDUwLzYwKSAKLSAgICAgICAgICAgICAgICB0aGUgY2FsbHMgaW5jbHVkZSBmcmFtZSBudW1iZXJzIGFuZCBmbGFncyAoZXZlbi9vZGQvLi4uKSAKLSAgICAgICAgICAgICAgICBpZiBuZWVkZWQgYW5kIGEgZmxhZyB3aGljaCBhbGxvd3MgYmxvY2tpbmcgdW50aWwgaXRzIHJlYWR5IAorICAgaWYgdGhlIGRldmljZSBkZWxpdmVycyBwaWN0dXJlcywgdGhleSBtYXkgYmUgaGFuZGxlZCBoZXJlCisgICBwdXRfaW1hZ2UgLT4gcHV0cyBpbWFnZSBkYXRhIHRvIHRoZSBjb2RlYyAobm90IG5lZWRlZCBmb3IgMzYwNTAvNjApCisgICBnZXRfaW1hZ2UgLT4gZ2V0cyBpbWFnZSBkYXRhIGZyb20gdGhlIGNvZGVjIChub3QgbmVlZGVkIGZvciAzNjA1MC82MCkKKwkJdGhlIGNhbGxzIGluY2x1ZGUgZnJhbWUgbnVtYmVycyBhbmQgZmxhZ3MgKGV2ZW4vb2RkLy4uLikKKwkJaWYgbmVlZGVkIGFuZCBhIGZsYWcgd2hpY2ggYWxsb3dzIGJsb2NraW5nIHVudGlsIGl0cyByZWFkeQogKi8KIAwKIC8qID09PT09PT09PT09PT09ICovCiAvKiB1c2VyIGludGVyZmFjZSAqLwogLyogPT09PT09PT09PT09PT0gKi8KIAotLyogCisvKgogICAgQ3VycmVudGx5IHRoZXJlIGlzIG9ubHkgYSBpbmZvcm1hdGlvbiBkaXNwbGF5IHBsYW5uZWQsIGFzIHRoZSBsYXllcgogICAgaXMgbm90IHZpc2libGUgZm9yIHRoZSB1c2VyIHNwYWNlIGF0IGFsbC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCmluZGV4IDA3ODg4MGUuLjc1ZTNkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKQEAgLTIyNCwxMyArMjI0LDEzIEBACiAJc3RydWN0ICB2aWRlb19kZXZpY2UgKnZmbCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkb3duKCZ2ZmwtPmxvY2spOworCW11dGV4X2xvY2soJnZmbC0+bG9jayk7CiAJaWYgKHZmbC0+dXNlcnMpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwogCX0gZWxzZSB7CiAJCXZmbC0+dXNlcnMrKzsKIAl9Ci0JdXAoJnZmbC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ2ZmwtPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTI3OSwyMyArMjc5LDIzIEBACiAJc3dpdGNoKHR5cGUpCiAJewogCQljYXNlIFZGTF9UWVBFX0dSQUJCRVI6Ci0JCQliYXNlPTA7Ci0JCQllbmQ9NjQ7CisJCQliYXNlPU1JTk9SX1ZGTF9UWVBFX0dSQUJCRVJfTUlOOworCQkJZW5kPU1JTk9SX1ZGTF9UWVBFX0dSQUJCRVJfTUFYKzE7CiAJCQluYW1lX2Jhc2UgPSAidmlkZW8iOwogCQkJYnJlYWs7CiAJCWNhc2UgVkZMX1RZUEVfVlRYOgotCQkJYmFzZT0xOTI7Ci0JCQllbmQ9MjI0OworCQkJYmFzZT1NSU5PUl9WRkxfVFlQRV9WVFhfTUlOOworCQkJZW5kPU1JTk9SX1ZGTF9UWVBFX1ZUWF9NQVgrMTsKIAkJCW5hbWVfYmFzZSA9ICJ2dHgiOwogCQkJYnJlYWs7CiAJCWNhc2UgVkZMX1RZUEVfVkJJOgotCQkJYmFzZT0yMjQ7Ci0JCQllbmQ9MjU2OworCQkJYmFzZT1NSU5PUl9WRkxfVFlQRV9WQklfTUlOOworCQkJZW5kPU1JTk9SX1ZGTF9UWVBFX1ZCSV9NQVgrMTsKIAkJCW5hbWVfYmFzZSA9ICJ2YmkiOwogCQkJYnJlYWs7CiAJCWNhc2UgVkZMX1RZUEVfUkFESU86Ci0JCQliYXNlPTY0OwotCQkJZW5kPTEyODsKKwkJCWJhc2U9TUlOT1JfVkZMX1RZUEVfUkFESU9fTUlOOworCQkJZW5kPU1JTk9SX1ZGTF9UWVBFX1JBRElPX01BWCsxOwogCQkJbmFtZV9iYXNlID0gInJhZGlvIjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMzI4LDcgKzMyOCw3IEBACiAJc3ByaW50Zih2ZmQtPmRldmZzX25hbWUsICJ2NGwvJXMlZCIsIG5hbWVfYmFzZSwgaSAtIGJhc2UpOwogCWRldmZzX21rX2NkZXYoTUtERVYoVklERU9fTUFKT1IsIHZmZC0+bWlub3IpLAogCQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSLCB2ZmQtPmRldmZzX25hbWUpOwotCWluaXRfTVVURVgoJnZmZC0+bG9jayk7CisJbXV0ZXhfaW5pdCgmdmZkLT5sb2NrKTsKIAogCS8qIHN5c2ZzIGNsYXNzICovCiAJbWVtc2V0KCZ2ZmQtPmNsYXNzX2RldiwgMHgwMCwgc2l6ZW9mKHZmZC0+Y2xhc3NfZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCmluZGV4IGM4ZmQ4MjMuLmE4YzEwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9wYWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0yNDUsNyArMjQ2LDcgQEAKIAlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqYnVmZmVyW1ZJTk9fRlJBTUVCVUZGRVJfQ09VTlRfTUFYXTsKIAogCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHF1ZXVlX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggcXVldWVfbXV0ZXg7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfd2FpdF9xdWV1ZTsKIH07CiAKQEAgLTI4Myw3ICsyODQsNyBAQAogCS8qIHRoZSBkcml2ZXIgaXMgY3VycmVudGx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlICovCiAJaW50IGNhcHR1cmluZzsKIAotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzcGlubG9ja190IGNhcHR1cmVfbG9jazsKIAogCXVuc2lnbmVkIGludCB1c2VyczsKQEAgLTExMzEsMTEgKzExMzIsMTEgQEAKIAlpZiAocS0+dHlwZSAhPSBWSU5PX01FTU9SWV9NTUFQKQogCQlyZXR1cm47CiAKLQlkb3duKCZxLT5xdWV1ZV9zZW0pOworCW11dGV4X2xvY2soJnEtPnF1ZXVlX211dGV4KTsKIAogCXZpbm9fcXVldWVfZnJlZV93aXRoX2NvdW50KHEsIHEtPmxlbmd0aCk7CiAKLQl1cCgmcS0+cXVldWVfc2VtKTsKKwltdXRleF91bmxvY2soJnEtPnF1ZXVlX211dGV4KTsKIH0KIAogc3RhdGljIGludCB2aW5vX3F1ZXVlX2luaXQoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfcXVldWUgKnEsCkBAIC0xMTU5LDcgKzExNjAsNyBAQAogCWlmICgqbGVuZ3RoIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZxLT5xdWV1ZV9zZW0pOworCW11dGV4X2xvY2soJnEtPnF1ZXVlX211dGV4KTsKIAogCWlmICgqbGVuZ3RoID4gVklOT19GUkFNRUJVRkZFUl9DT1VOVF9NQVgpCiAJCSpsZW5ndGggPSBWSU5PX0ZSQU1FQlVGRkVSX0NPVU5UX01BWDsKQEAgLTEyMTEsNyArMTIxMiw3IEBACiAJCXEtPm1hZ2ljID0gVklOT19RVUVVRV9NQUdJQzsKIAl9CiAKLQl1cCgmcS0+cXVldWVfc2VtKTsKKwltdXRleF91bmxvY2soJnEtPnF1ZXVlX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTU0LDEyICsxNTU1LDEyIEBACiAJdW5zaWduZWQgaW50IHcgPSB2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0OwogCXVuc2lnbmVkIGludCBkID0gdmNzLT5kZWNpbWF0aW9uOwogCXVuc2lnbmVkIGludCBicHAgPSB2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS5icHA7Ci0gICAgICAgIHVuc2lnbmVkIGludCBsc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbHNpemU7CiAKIAlkcHJpbnRrKCJ1cGRhdGVfbGluZV9zaXplKCk6IGJlZm9yZTogdyA9ICVkLCBkID0gJWQsICIKIAkJImxpbmVfc2l6ZSA9ICVkXG4iLCB3LCBkLCB2Y3MtPmxpbmVfc2l6ZSk7CiAKLSAgICAgICAgLyogbGluZSBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgOCBieXRlcyAqLworCS8qIGxpbmUgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMgKi8KIAlsc2l6ZSA9IChicHAgKiAodyAvIGQpKSAmIH43OwogCXcgPSAobHNpemUgLyBicHApICogZDsKIApAQCAtNDA0NSw3ICs0MDQ2LDcgQEAKIAlkcHJpbnRrKCJvcGVuKCk6IGNoYW5uZWwgPSAlY1xuIiwKIAkgICAgICAgKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPyAnQScgOiAnQicpOwogCi0JZG93bigmdmNzLT5zZW0pOworCW11dGV4X2xvY2soJnZjcy0+bXV0ZXgpOwogCiAJaWYgKHZjcy0+dXNlcnMpIHsKIAkJZHByaW50aygib3BlbigpOiBkcml2ZXIgYnVzeVxuIik7CkBAIC00MDYyLDcgKzQwNjMsNyBAQAogCXZjcy0+dXNlcnMrKzsKIAogIG91dDoKLQl1cCgmdmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmdmNzLT5tdXRleCk7CiAKIAlkcHJpbnRrKCJvcGVuKCk6ICVzIVxuIiwgcmV0ID8gImZhaWxlZCIgOiAiY29tcGxldGUiKTsKIApAQCAtNDA3NSw3ICs0MDc2LDcgQEAKIAlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwogCWRwcmludGsoImNsb3NlKCk6XG4iKTsKIAotCWRvd24oJnZjcy0+c2VtKTsKKwltdXRleF9sb2NrKCZ2Y3MtPm11dGV4KTsKIAogCXZjcy0+dXNlcnMtLTsKIApAQCAtNDA4Nyw3ICs0MDg4LDcgQEAKIAkJdmlub19xdWV1ZV9mcmVlKCZ2Y3MtPmZiX3F1ZXVlKTsKIAl9CiAKLQl1cCgmdmNzLT5zZW0pOworCW11dGV4X3VubG9jaygmdmNzLT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQxMzAsNyArNDEzMSw3IEBACiAKIAkvLyBUT0RPOiByZWplY3QgbW1hcCBpZiBhbHJlYWR5IG1hcHBlZAogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJaWYgKHZjcy0+cmVhZGluZykgewpAQCAtNDIxNCw3ICs0MjE1LDcgQEAKIAl2bWEtPnZtX29wcyA9ICZ2aW5vX3ZtX29wczsKIAogb3V0OgotCXVwKCZ2Y3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ2Y3MtPm11dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00Mzc0LDEyICs0Mzc1LDEyIEBACiAJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0OwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdmNzLT5zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJcmV0ID0gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCB2aW5vX2RvX2lvY3RsKTsKIAotCXVwKCZ2Y3MtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ2Y3MtPm11dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00NTY0LDEwICs0NTY1LDEwIEBACiAKIAl2Y3MtPmNhcHR1cmluZyA9IDA7CiAKLQlpbml0X01VVEVYKCZ2Y3MtPnNlbSk7CisJbXV0ZXhfaW5pdCgmdmNzLT5tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnZjcy0+Y2FwdHVyZV9sb2NrKTsKIAotCWluaXRfTVVURVgoJnZjcy0+ZmJfcXVldWUucXVldWVfc2VtKTsKKwltdXRleF9pbml0KCZ2Y3MtPmZiX3F1ZXVlLnF1ZXVlX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmdmNzLT5mYl9xdWV1ZS5xdWV1ZV9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2Y3MtPmZiX3F1ZXVlLmZyYW1lX3dhaXRfcXVldWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlODEzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwpAQCAtMCwwICsxLDE0NTQgQEAKKy8qCisgKiBWaXJ0dWFsIFZpZGVvIGRyaXZlciAtIFRoaXMgY29kZSBlbXVsYXRlcyBhIHJlYWwgdmlkZW8gZGV2aWNlIHdpdGggdjRsMiBhcGkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgYnk6CisgKiAgICAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYi0tYS50LS1pbmZyYWRlYWQub3JnPgorICogICAgICBUZWQgV2FsdGhlciA8dGVkLS1hLnQtLWVudW1lcmEuY29tPgorICogICAgICBKb2huIFNva29sIDxzb2tvbC0tYS50LS12aWRlb3RlY2hub2xvZ3kuY29tPgorICogICAgICBodHRwOi8vdjRsLnZpZGVvdGVjaG5vbG9neS5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIExpY2VuY2UsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlby1idWYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKy8qIFdha2UgdXAgYXQgYWJvdXQgMzAgZnBzICovCisjZGVmaW5lIFdBS0VfTlVNRVJBVE9SIDMwCisjZGVmaW5lIFdBS0VfREVOT01JTkFUT1IgMTAwMQorI2RlZmluZSBCVUZGRVJfVElNRU9VVCAgICAgbXNlY3NfdG9famlmZmllcyg1MDApICAvKiAwLjUgc2Vjb25kcyAqLworCisvKiBUaGVzZSB0aW1lcnMgYXJlIGZvciAxIGZwcyAtIHVzZWQgb25seSBmb3IgdGVzdGluZyAqLworLy8jZGVmaW5lIFdBS0VfREVOT01JTkFUT1IgMzAgLyogaGFjayBmb3IgdGVzdGluZyBwdXJwb3NlcyAqLworLy8jZGVmaW5lIEJVRkZFUl9USU1FT1VUICAgICBtc2Vjc190b19qaWZmaWVzKDUwMDApICAvKiA1IHNlY29uZHMgKi8KKworI2luY2x1ZGUgImZvbnQuaCIKKworI2lmbmRlZiBremFsbG9jCisjZGVmaW5lIGt6YWxsb2Moc2l6ZSwgZmxhZ3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXZvaWQgKl9fcmV0ID0ga21hbGxvYyhzaXplLCBmbGFncyk7ICAgICAgICAgICAgIFwKKwlpZiAoX19yZXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW1lbXNldChfX3JldCwgMCwgc2l6ZSk7ICAgICAgICAgICAgICAgICBcCisJX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKyNlbmRpZgorCitNT0RVTEVfREVTQ1JJUFRJT04oIlZpZGVvIFRlY2hub2xvZ3kgTWFnYXppbmUgVmlydHVhbCBWaWRlbyBDYXB0dXJlIEJvYXJkIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIsIFRlZCBXYWx0aGVyIGFuZCBKb2huIFNva29sIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKKyNkZWZpbmUgVklWSV9NQUpPUl9WRVJTSU9OIDAKKyNkZWZpbmUgVklWSV9NSU5PUl9WRVJTSU9OIDQKKyNkZWZpbmUgVklWSV9SRUxFQVNFIDAKKyNkZWZpbmUgVklWSV9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKFZJVklfTUFKT1JfVkVSU0lPTiwgVklWSV9NSU5PUl9WRVJTSU9OLCBWSVZJX1JFTEVBU0UpCisKK3N0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsgICAgICAgIC8qIC9kZXYvdmlkZW9OLCAtMSBmb3IgYXV0b2RldGVjdCAqLworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDApOworCitzdGF0aWMgaW50IGRlYnVnID0gMDsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKKworc3RhdGljIHVuc2lnbmVkIGludCB2aWRfbGltaXQgPSAxNjsKK21vZHVsZV9wYXJhbSh2aWRfbGltaXQsaW50LDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2aWRfbGltaXQsImNhcHR1cmUgbWVtb3J5IGxpbWl0IGluIG1lZ2FieXRlcyIpOworCisvKiBzdXBwb3J0ZWQgY29udHJvbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdml2aV9xY3RybFtdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCisJCS5kZWZhdWx0X3ZhbHVlID0gNjU1MzUsCisJCS5mbGFncyAgICAgICAgID0gMCwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCX0seworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiQnJpZ2h0bmVzcyIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxMjcsCisJCS5mbGFncyAgICAgICAgID0gMCwKKwl9LCB7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiQ29udHJhc3QiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMjU1LAorCQkuc3RlcCAgICAgICAgICA9IDB4MSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAorCQkuZmxhZ3MgICAgICAgICA9IDAsCisJfSwgeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiU2F0dXJhdGlvbiIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAyNTUsCisJCS5zdGVwICAgICAgICAgID0gMHgxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEyNywKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCX0sIHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9IVUUsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgICAgICAgPSAiSHVlIiwKKwkJLm1pbmltdW0gICAgICAgPSAtMTI4LAorCQkubWF4aW11bSAgICAgICA9IDEyNywKKwkJLnN0ZXAgICAgICAgICAgPSAweDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMCwKKwkJLmZsYWdzICAgICAgICAgPSAwLAorCX0KK307CisKK3N0YXRpYyBpbnQgcWN0bF9yZWdzW0FSUkFZX1NJWkUodml2aV9xY3RybCldOworCisjZGVmaW5lIGRwcmludGsobGV2ZWwsZm10LCBhcmcuLi4pCQkJICAgICBcCisJZG8geyAJCQkJCQkgICAgIFwKKwkJaWYgKGRlYnVnID49IChsZXZlbCkpCQkJICAgICBcCisJCQlwcmludGsoS0VSTl9ERUJVRyAidml2aTogIiBmbXQgLCAjIyBhcmcpOyAgICBcCisJfSB3aGlsZSAoMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQmFzaWMgc3RydWN0dXJlcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IHZpdmlfZm10IHsKKwljaGFyICAqbmFtZTsKKwl1MzIgICBmb3VyY2M7ICAgICAgICAgIC8qIHY0bDIgZm9ybWF0IGlkICovCisJaW50ICAgZGVwdGg7Cit9OworCitzdGF0aWMgc3RydWN0IHZpdmlfZm10IGZvcm1hdCA9IHsKKwkubmFtZSAgICAgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCisJLmZvdXJjYyAgID0gVjRMMl9QSVhfRk1UX1lVWVYsCisJLmRlcHRoICAgID0gMTYsCit9OworCitzdHJ1Y3Qgc2dfdG9fYWRkciB7CisJaW50IHBvczsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworfTsKKworLyogYnVmZmVyIGZvciBvbmUgdmlkZW8gZnJhbWUgKi8KK3N0cnVjdCB2aXZpX2J1ZmZlciB7CisJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7CisKKwlzdHJ1Y3Qgdml2aV9mbXQgICAgICAgICpmbXQ7CisKKwlzdHJ1Y3Qgc2dfdG9fYWRkciAgICAgICp0b19hZGRyOworfTsKKworc3RydWN0IHZpdmlfZG1hcXVldWUgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgcXVldWVkOworCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgdGltZW91dDsKKworCS8qIHRocmVhZCBmb3IgZ2VuZXJhdGluZyB2aWRlbyBzdHJlYW0qLworCXN0cnVjdCB0YXNrX3N0cnVjdCAgICAgICAgICprdGhyZWFkOworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICAgIHdxOworCS8qIENvdW50ZXJzIHRvIGNvbnRyb2wgZnBzIHJhdGUgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBpbmlfamlmZmllczsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQodml2aV9kZXZsaXN0KTsKKworc3RydWN0IHZpdmlfZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICB2aXZpX2Rldmxpc3Q7CisKKwlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICAgICBsb2NrOworCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnM7CisKKwkvKiB2YXJpb3VzIGRldmljZSBpbmZvICovCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcmVzb3VyY2VzOworCXN0cnVjdCB2aWRlb19kZXZpY2UgICAgICAgIHZpZGVvX2RldjsKKworCXN0cnVjdCB2aXZpX2RtYXF1ZXVlICAgICAgIHZpZHE7CisKKwkvKiBTZXZlcmFsIGNvdW50ZXJzICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaCxtLHMsdXMsamlmZmllczsKKwljaGFyICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RyWzEzXTsKK307CisKK3N0cnVjdCB2aXZpX2ZoIHsKKwlzdHJ1Y3Qgdml2aV9kZXYgICAgICAgICAgICAqZGV2OworCisJLyogdmlkZW8gY2FwdHVyZSAqLworCXN0cnVjdCB2aXZpX2ZtdCAgICAgICAgICAgICpmbXQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgd2lkdGgsaGVpZ2h0OworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgIHZiX3ZpZHE7CisKKwllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICB0eXBlOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRE1BIGFuZCB0aHJlYWQgZnVuY3Rpb25zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBCYXJzIGFuZCBDb2xvcnMgc2hvdWxkIG1hdGNoIHBvc2l0aW9ucyAqLworCitlbnVtIGNvbG9ycyB7CisJV0hJVEUsCisJQU1CQVIsCisJQ1lBTiwKKwlHUkVFTiwKKwlNQUdFTlRBLAorCVJFRCwKKwlCTFVFCit9OworCitzdGF0aWMgdTggYmFyc1s4XVszXSA9IHsKKwkvKiBSICAgRyAgIEIgKi8KKwl7MjA0LDIwNCwyMDR9LAkvKiB3aGl0ZSAqLworCXsyMDgsMjA4LCAgMH0sICAvKiBhbWJhciAqLworCXsgIDAsMjA2LDIwNn0sICAvKiBjeWFuICovCisJeyAgMCwyMzksICAwfSwgIC8qIGdyZWVuICovCisJezIzOSwgIDAsMjM5fSwgIC8qIG1hZ2VudGEgKi8KKwl7MjA1LCAgMCwgIDB9LCAgLyogcmVkICovCisJeyAgMCwgIDAsMjU1fSwgIC8qIGJsdWUgKi8KKwl7ICAwLCAgMCwgIDB9Cit9OworCisjZGVmaW5lIFRPX1kocixnLGIpICgoKDE2ODI5KnIgKzMzMDM5KmcgKzY0MTYqYiAgKyAzMjc2OCk+PjE2KSsxNikKKy8qIFJHQiB0byAgVihDcikgQ29sb3IgdHJhbnNmb3JtICovCisjZGVmaW5lIFRPX1YocixnLGIpICgoKDI4Nzg0KnIgLTI0MTAzKmcgLTQ2ODEqYiAgKyAzMjc2OCk+PjE2KSsxMjgpCisvKiBSR0IgdG8gIFUoQ2IpIENvbG9yIHRyYW5zZm9ybSAqLworI2RlZmluZSBUT19VKHIsZyxiKSAoKCgtOTcxNCpyIC0xOTA3MCpnICsyODc4NCpiICsgMzI3NjgpPj4xNikrMTI4KQorCisjZGVmaW5lIFRTVEFNUF9NSU5fWSAyNAorI2RlZmluZSBUU1RBTVBfTUFYX1kgVFNUQU1QX01JTl9ZKzE1CisjZGVmaW5lIFRTVEFNUF9NSU5fWCA2NAorCit2b2lkIHByZXBfdG9fYWRkcihzdHJ1Y3Qgc2dfdG9fYWRkciB0b19hZGRyW10sc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJaW50IGksIHBvcz0wOworCisJZm9yIChpPTA7aTx2Yi0+ZG1hLm5yX3BhZ2VzO2krKykgeworCQl0b19hZGRyW2ldLnNnPSZ2Yi0+ZG1hLnNnbGlzdFtpXTsKKwkJdG9fYWRkcltpXS5wb3M9cG9zOworCQlwb3MgKz0gdmItPmRtYS5zZ2xpc3RbaV0ubGVuZ3RoOworCX0KK30KKworaW5saW5lIGludCBnZXRfYWRkcl9wb3MoaW50IHBvcywgaW50IHBhZ2VzLCBzdHJ1Y3Qgc2dfdG9fYWRkciB0b19hZGRyW10pCit7CisJaW50IHAxPTAscDI9cGFnZXMtMSxwMz1wYWdlcy8yOworCisJLyogU2FuaXR5IHRlc3QgKi8KKwlCVUdfT04gKHBvcz49dG9fYWRkcltwMl0ucG9zK3RvX2FkZHJbcDJdLnNnLT5sZW5ndGgpOworCisJd2hpbGUgKHAxKzE8cDIpIHsKKwkJaWYgKHBvcyA8IHRvX2FkZHJbcDNdLnBvcykgeworCQkJcDI9cDM7CisJCX0gZWxzZSB7CisJCQlwMT1wMzsKKwkJfQorCQlwMz0ocDErcDIpLzI7CisJfQorCWlmIChwb3MgPj0gdG9fYWRkcltwMl0ucG9zKQorCQlwMT1wMjsKKworCXJldHVybiAocDEpOworfQorCit2b2lkIGdlbl9saW5lKHN0cnVjdCBzZ190b19hZGRyIHRvX2FkZHJbXSxpbnQgaW5pcG9zLGludCBwYWdlcyxpbnQgd21heCwKKwkJCQkJaW50IGhtYXgsIGludCBsaW5lLCBjaGFyICp0aW1lc3RyKQoreworCWludCAgdyxpLGoscG9zPWluaXBvcyxwZ3BvcyxvbGRwZyx5OworCWNoYXIgKnAsKnMsKmJhc2VwOworCXN0cnVjdCBwYWdlICpwZzsKKwl1OCAgIGNocixyLGcsYixjb2xvcjsKKworCS8qIEdldCBmaXJzdCBhZGRyIHBvaW50ZWQgdG8gcGl4ZWwgcG9zaXRpb24gKi8KKwlvbGRwZz1nZXRfYWRkcl9wb3MocG9zLHBhZ2VzLHRvX2FkZHIpOworCXBnPXBmbl90b19wYWdlKHRvX2FkZHJbb2xkcGddLnNnLT5kbWFfYWRkcmVzcyA+PiBQQUdFX1NISUZUKTsKKwliYXNlcCA9IGttYXBfYXRvbWljKHBnLCBLTV9CT1VOQ0VfUkVBRCkrdG9fYWRkcltvbGRwZ10uc2ctPm9mZnNldDsKKworCS8qIFdlIHdpbGwganVzdCBkdXBsaWNhdGUgdGhlIHNlY29uZCBwaXhlbCBhdCB0aGUgcGFja2V0ICovCisJd21heC89MjsKKworCS8qIEdlbmVyYXRlIGEgc3RhbmRhcmQgY29sb3IgYmFyIHBhdHRlcm4gKi8KKwlmb3IgKHc9MDt3PHdtYXg7dysrKSB7CisJCXI9YmFyc1t3Kjcvd21heF1bMF07CisJCWc9YmFyc1t3Kjcvd21heF1bMV07CisJCWI9YmFyc1t3Kjcvd21heF1bMl07CisKKwkJZm9yIChjb2xvcj0wO2NvbG9yPDQ7Y29sb3IrKykgeworCQkJcGdwb3M9Z2V0X2FkZHJfcG9zKHBvcyxwYWdlcyx0b19hZGRyKTsKKwkJCWlmIChwZ3BvcyE9b2xkcGcpIHsKKwkJCQlwZz1wZm5fdG9fcGFnZSh0b19hZGRyW3BncG9zXS5zZy0+ZG1hX2FkZHJlc3MgPj4gUEFHRV9TSElGVCk7CisJCQkJa3VubWFwX2F0b21pYyhiYXNlcCwgS01fQk9VTkNFX1JFQUQpOworCQkJCWJhc2VwPSBrbWFwX2F0b21pYyhwZywgS01fQk9VTkNFX1JFQUQpK3RvX2FkZHJbcGdwb3NdLnNnLT5vZmZzZXQ7CisJCQkJb2xkcGc9cGdwb3M7CisJCQl9CisJCQlwPWJhc2VwK3Bvcy10b19hZGRyW3BncG9zXS5wb3M7CisKKwkJCXN3aXRjaCAoY29sb3IpIHsKKwkJCQljYXNlIDA6CisJCQkJY2FzZSAyOgorCQkJCQkqcD1UT19ZKHIsZyxiKTsJCS8qIEx1bWluYW5jZSAqLworCQkJCQlicmVhazsKKwkJCQljYXNlIDE6CisJCQkJCSpwPVRPX1UocixnLGIpOwkJLyogQ2IgKi8KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQkqcD1UT19WKHIsZyxiKTsJCS8qIENyICovCisJCQkJCWJyZWFrOworCQkJfQorCQkJcG9zKys7CisJCX0KKwl9CisKKwkvKiBDaGVja3MgaWYgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aW1lc3RhbXAgKi8KKwlpZiAoVFNUQU1QX01BWF9ZPj1obWF4KQorCQlnb3RvIGVuZDsKKwlpZiAoVFNUQU1QX01JTl9YK3N0cmxlbih0aW1lc3RyKT49d21heCkKKwkJZ290byBlbmQ7CisKKwkvKiBQcmludCBzdHJlYW0gdGltZSAqLworCWlmIChsaW5lPj1UU1RBTVBfTUlOX1kgJiYgbGluZTw9VFNUQU1QX01BWF9ZKSB7CisJCWo9VFNUQU1QX01JTl9YOworCQlmb3IgKHM9dGltZXN0cjsqcztzKyspIHsKKwkJCWNocj1yb204eDE2X2JpdHNbKCpzLTB4MzApKjE2K2xpbmUtVFNUQU1QX01JTl9ZXTsKKwkJCWZvciAoaT0wO2k8NztpKyspIHsKKwkJCQlpZiAoY2hyJjE8PCg3LWkpKSB7IC8qIEZvbnQgY29sb3IqLworCQkJCQlyPWJhcnNbQkxVRV1bMF07CisJCQkJCWc9YmFyc1tCTFVFXVsxXTsKKwkJCQkJYj1iYXJzW0JMVUVdWzJdOworCQkJCQlyPWc9Yj0wOworCQkJCQlnPTE5ODsKKwkJCQl9IGVsc2UgeyAvKiBCYWNrZ3JvdW5kIGNvbG9yICovCisJCQkJCXI9YmFyc1tXSElURV1bMF07CisJCQkJCWc9YmFyc1tXSElURV1bMV07CisJCQkJCWI9YmFyc1tXSElURV1bMl07CisJCQkJCXI9Zz1iPTA7CisJCQkJfQorCisJCQkJcG9zPWluaXBvcytqKjI7CisJCQkJZm9yIChjb2xvcj0wO2NvbG9yPDQ7Y29sb3IrKykgeworCQkJCQlwZ3Bvcz1nZXRfYWRkcl9wb3MocG9zLHBhZ2VzLHRvX2FkZHIpOworCQkJCQlpZiAocGdwb3MhPW9sZHBnKSB7CisJCQkJCQlwZz1wZm5fdG9fcGFnZSh0b19hZGRyW3BncG9zXS4KKwkJCQkJCQkJc2ctPmRtYV9hZGRyZXNzCisJCQkJCQkJCT4+IFBBR0VfU0hJRlQpOworCQkJCQkJa3VubWFwX2F0b21pYyhiYXNlcCwKKwkJCQkJCQkJS01fQk9VTkNFX1JFQUQpOworCQkJCQkJYmFzZXA9IGttYXBfYXRvbWljKHBnLAorCQkJCQkJCUtNX0JPVU5DRV9SRUFEKSsKKwkJCQkJCQl0b19hZGRyW3BncG9zXS5zZy0+b2Zmc2V0OworCQkJCQkJb2xkcGc9cGdwb3M7CisJCQkJCX0KKwkJCQkJcD1iYXNlcCtwb3MtdG9fYWRkcltwZ3Bvc10ucG9zOworCisJCQkJCXk9VE9fWShyLGcsYik7CisKKwkJCQkJc3dpdGNoIChjb2xvcikgeworCQkJCQkJY2FzZSAwOgorCQkJCQkJY2FzZSAyOgorCQkJCQkJCSpwPVRPX1kocixnLGIpOwkJLyogTHVtaW5hbmNlICovCisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDE6CisJCQkJCQkJKnA9VE9fVShyLGcsYik7CQkvKiBDYiAqLworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAzOgorCQkJCQkJCSpwPVRPX1YocixnLGIpOwkJLyogQ3IgKi8KKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlwb3MrKzsKKwkJCQl9CisJCQkJaisrOworCQkJfQorCQl9CisJfQorCisKK2VuZDoKKwlrdW5tYXBfYXRvbWljKGJhc2VwLCBLTV9CT1VOQ0VfUkVBRCk7Cit9CitzdGF0aWMgdm9pZCB2aXZpX2ZpbGxidWZmKHN0cnVjdCB2aXZpX2RldiAqZGV2LHN0cnVjdCB2aXZpX2J1ZmZlciAqYnVmKQoreworCWludCBoLHBvcz0wOworCWludCBobWF4ICA9IGJ1Zi0+dmIuaGVpZ2h0OworCWludCB3bWF4ICA9IGJ1Zi0+dmIud2lkdGg7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI9JmJ1Zi0+dmI7CisJc3RydWN0IHNnX3RvX2FkZHIgKnRvX2FkZHI9YnVmLT50b19hZGRyOworCXN0cnVjdCB0aW1ldmFsIHRzOworCisJLyogVGVzdCBpZiBETUEgbWFwcGluZyBpcyByZWFkeSAqLworCWlmICghdmItPmRtYS5zZ2xpc3RbMF0uZG1hX2FkZHJlc3MpCisJCXJldHVybjsKKworCXByZXBfdG9fYWRkcih0b19hZGRyLHZiKTsKKworCS8qIENoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCBtZW1vcnkgKi8KKwlCVUdfT04oYnVmLT52Yi5kbWEubnJfcGFnZXMgPDwgUEFHRV9TSElGVCA8IChidWYtPnZiLndpZHRoKmJ1Zi0+dmIuaGVpZ2h0KSoyKTsKKworCWZvciAoaD0wO2g8aG1heDtoKyspIHsKKwkJZ2VuX2xpbmUodG9fYWRkcixwb3MsdmItPmRtYS5ucl9wYWdlcyx3bWF4LGhtYXgsaCxkZXYtPnRpbWVzdHIpOworCQlwb3MgKz0gd21heCoyOworCX0KKworCS8qIFVwZGF0ZXMgc3RyZWFtIHRpbWUgKi8KKworCWRldi0+dXMrPWppZmZpZXNfdG9fdXNlY3MoamlmZmllcy1kZXYtPmppZmZpZXMpOworCWRldi0+amlmZmllcz1qaWZmaWVzOworCWlmIChkZXYtPnVzPj0xMDAwMDAwKSB7CisJCWRldi0+dXMtPTEwMDAwMDA7CisJCWRldi0+cysrOworCQlpZiAoZGV2LT5zPj02MCkgeworCQkJZGV2LT5zLT02MDsKKwkJCWRldi0+bSsrOworCQkJaWYgKGRldi0+bT42MCkgeworCQkJCWRldi0+bS09NjA7CisJCQkJZGV2LT5oKys7CisJCQkJaWYgKGRldi0+aD4yNCkKKwkJCQkJZGV2LT5oLT0yNDsKKwkJCX0KKwkJfQorCX0KKwlzcHJpbnRmKGRldi0+dGltZXN0ciwiJTAyZDolMDJkOiUwMmQ6JTAzZCIsCisJCQlkZXYtPmgsZGV2LT5tLGRldi0+cywoZGV2LT51cys1MDApLzEwMDApOworCisJZHByaW50aygyLCJ2aXZpZmlsbCBhdCAlczogQnVmZmVyIDB4JTA4bHggc2l6ZT0gJWRcbiIsZGV2LT50aW1lc3RyLAorCQkJKHVuc2lnbmVkIGxvbmcpYnVmLT52Yi5kbWEudm1hbGxvYyxwb3MpOworCisJLyogQWR2aWNlIHRoYXQgYnVmZmVyIHdhcyBmaWxsZWQgKi8KKwlidWYtPnZiLnN0YXRlID0gU1RBVEVfRE9ORTsKKwlidWYtPnZiLmZpZWxkX2NvdW50Kys7CisJZG9fZ2V0dGltZW9mZGF5KCZ0cyk7CisJYnVmLT52Yi50cyA9IHRzOworCisJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVzdGFydF92aWRlb19xdWV1ZShzdHJ1Y3Qgdml2aV9kbWFxdWV1ZSAqZG1hX3EpOworCitzdGF0aWMgdm9pZCB2aXZpX3RocmVhZF90aWNrKHN0cnVjdCB2aXZpX2RtYXF1ZXVlICAqZG1hX3EpCit7CisJc3RydWN0IHZpdmlfYnVmZmVyICAgICpidWY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXY9IGNvbnRhaW5lcl9vZihkbWFfcSxzdHJ1Y3Qgdml2aV9kZXYsdmlkcSk7CisKKwlpbnQgYmM7CisKKwkvKiBBbm5vdW5jZXMgdmlkZW9idWYgdGhhdCBhbGwgd2VudCBvayAqLworCWZvciAoYmMgPSAwOzsgYmMrKykgeworCQlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpIHsKKwkJCWRwcmludGsoMSwiTm8gYWN0aXZlIHF1ZXVlIHRvIHNlcnZlXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsCisJCQkJIHN0cnVjdCB2aXZpX2J1ZmZlciwgdmIucXVldWUpOworCisJCS8qIE5vYm9keSBpcyB3YWl0aW5nIHNvbWV0aGluZyB0byBiZSBkb25lLCBqdXN0IHJldHVybiAqLworCQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJmJ1Zi0+dmIuZG9uZSkpIHsKKwkJCW1vZF90aW1lcigmZG1hX3EtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCQkJcmV0dXJuOworCQl9CisKKwkJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKKwkJZHByaW50aygyLCJbJXAvJWRdIHdha2V1cFxuIixidWYsYnVmLT52Yi5pKTsKKworCQkvKiBGaWxsIGJ1ZmZlciAqLworCQl2aXZpX2ZpbGxidWZmKGRldixidWYpOworCX0KKwlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpIHsKKwkJZGVsX3RpbWVyKCZkbWFfcS0+dGltZW91dCk7CisJfSBlbHNlIHsKKwkJbW9kX3RpbWVyKCZkbWFfcS0+dGltZW91dCwgamlmZmllcytCVUZGRVJfVElNRU9VVCk7CisJfQorCWlmIChiYyAhPSAxKQorCQlkcHJpbnRrKDEsIiVzOiAlZCBidWZmZXJzIGhhbmRsZWQgKHNob3VsZCBiZSAxKVxuIixfX0ZVTkNUSU9OX18sYmMpOworfQorCit2b2lkIHZpdmlfc2xlZXAoc3RydWN0IHZpdmlfZG1hcXVldWUgICpkbWFfcSkKK3sKKwlpbnQgdGltZW91dDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWRwcmludGsoMSwiJXMgZG1hX3E9MHglMDhseFxuIixfX0ZVTkNUSU9OX18sKHVuc2lnbmVkIGxvbmcpZG1hX3EpOworCisJYWRkX3dhaXRfcXVldWUoJmRtYV9xLT53cSwgJndhaXQpOworCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWRtYV9xLT5mcmFtZSsrOworCisJCS8qIENhbGN1bGF0ZSB0aW1lIHRvIHdha2UgdXAgKi8KKwkJdGltZW91dD1kbWFfcS0+aW5pX2ppZmZpZXMrbXNlY3NfdG9famlmZmllcygoZG1hX3EtPmZyYW1lKldBS0VfTlVNRVJBVE9SKjEwMDApL1dBS0VfREVOT01JTkFUT1IpLWppZmZpZXM7CisKKwkJaWYgKHRpbWVvdXQgPD0gMCkgeworCQkJaW50IG9sZD1kbWFfcS0+ZnJhbWU7CisJCQlkbWFfcS0+ZnJhbWU9KGppZmZpZXNfdG9fbXNlY3MoamlmZmllcy1kbWFfcS0+aW5pX2ppZmZpZXMpKldBS0VfREVOT01JTkFUT1IpLyhXQUtFX05VTUVSQVRPUioxMDAwKSsxOworCisJCQl0aW1lb3V0PWRtYV9xLT5pbmlfamlmZmllcyttc2Vjc190b19qaWZmaWVzKChkbWFfcS0+ZnJhbWUqV0FLRV9OVU1FUkFUT1IqMTAwMCkvV0FLRV9ERU5PTUlOQVRPUiktamlmZmllczsKKworCQkJZHByaW50aygxLCJ1bmRlcnJ1biwgbG9zZWQgJWQgZnJhbWVzLiAiCisJCQkJICAiTm93LCBmcmFtZSBpcyAlZC4gV2FraW5nIG9uICVkIGppZmZpZXNcbiIsCisJCQkJCWRtYV9xLT5mcmFtZS1vbGQsZG1hX3EtPmZyYW1lLHRpbWVvdXQpOworCQl9IGVsc2UKKwkJCWRwcmludGsoMSwid2lsbCBzbGVlcCBmb3IgJWkgamlmZmllc1xuIix0aW1lb3V0KTsKKworCQl2aXZpX3RocmVhZF90aWNrKGRtYV9xKTsKKworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUgKHRpbWVvdXQpOworCX0KKworCXJlbW92ZV93YWl0X3F1ZXVlKCZkbWFfcS0+d3EsICZ3YWl0KTsKKwl0cnlfdG9fZnJlZXplKCk7Cit9CisKK2ludCB2aXZpX3RocmVhZCh2b2lkICpkYXRhKQoreworCXN0cnVjdCB2aXZpX2RtYXF1ZXVlICAqZG1hX3E9ZGF0YTsKKworCWRwcmludGsoMSwidGhyZWFkIHN0YXJ0ZWRcbiIpOworCisJZm9yICg7OykgeworCQl2aXZpX3NsZWVwKGRtYV9xKTsKKworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisJfQorCWRwcmludGsoMSwgInRocmVhZDogZXhpdFxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2aXZpX3N0YXJ0X3RocmVhZChzdHJ1Y3Qgdml2aV9kbWFxdWV1ZSAgKmRtYV9xKQoreworCWRtYV9xLT5mcmFtZT0wOworCWRtYV9xLT5pbmlfamlmZmllcz1qaWZmaWVzOworCisJZHByaW50aygxLCIlc1xuIixfX0ZVTkNUSU9OX18pOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYV9xLT53cSk7CisKKwlkbWFfcS0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKHZpdmlfdGhyZWFkLCBkbWFfcSwgInZpdmkiKTsKKworCWlmIChkbWFfcS0+a3RocmVhZCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidml2aToga2VybmVsX3RocmVhZCgpIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkcHJpbnRrKDEsInJldHVybmluZyBmcm9tICVzXG4iLF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdml2aV9zdG9wX3RocmVhZChzdHJ1Y3Qgdml2aV9kbWFxdWV1ZSAgKmRtYV9xKQoreworCWRwcmludGsoMSwiJXNcbiIsX19GVU5DVElPTl9fKTsKKwkvKiBzaHV0ZG93biBjb250cm9sIHRocmVhZCAqLworCWlmIChkbWFfcS0+a3RocmVhZCkgeworCQlrdGhyZWFkX3N0b3AoZG1hX3EtPmt0aHJlYWQpOworCQlkbWFfcS0+a3RocmVhZD1OVUxMOworCX0KK30KKworc3RhdGljIGludCByZXN0YXJ0X3ZpZGVvX3F1ZXVlKHN0cnVjdCB2aXZpX2RtYXF1ZXVlICpkbWFfcSkKK3sKKwlzdHJ1Y3Qgdml2aV9idWZmZXIgKmJ1ZiwgKnByZXY7CisJc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKKworCWRwcmludGsoMSwiJXMgZG1hX3E9MHglMDhseFxuIixfX0ZVTkNUSU9OX18sKHVuc2lnbmVkIGxvbmcpZG1hX3EpOworCisJaWYgKCFsaXN0X2VtcHR5KCZkbWFfcS0+YWN0aXZlKSkgeworCQlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IHZpdmlfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJCWRwcmludGsoMiwicmVzdGFydF9xdWV1ZSBbJXAvJWRdOiByZXN0YXJ0IGRtYVxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pKTsKKworCQlkcHJpbnRrKDEsIlJlc3RhcnRpbmcgdmlkZW8gZG1hXG4iKTsKKwkJdml2aV9zdG9wX3RocmVhZChkbWFfcSk7CisvLwkJdml2aV9zdGFydF90aHJlYWQoZG1hX3EpOworCisJCS8qIGNhbmNlbCBhbGwgb3V0c3RhbmRpbmcgY2FwdHVyZSAvIHZiaSByZXF1ZXN0cyAqLworCQlsaXN0X2Zvcl9lYWNoKGl0ZW0sJmRtYV9xLT5hY3RpdmUpIHsKKwkJCWJ1ZiA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHZpdmlfYnVmZmVyLCB2Yi5xdWV1ZSk7CisKKwkJCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBTVEFURV9FUlJPUjsKKwkJCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CisJCX0KKwkJbW9kX3RpbWVyKCZkbWFfcS0+dGltZW91dCwgamlmZmllcytCVUZGRVJfVElNRU9VVCk7CisKKwkJcmV0dXJuIDA7CisJfQorCisJcHJldiA9IE5VTEw7CisJZm9yICg7OykgeworCQlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPnF1ZXVlZCkpCisJCQlyZXR1cm4gMDsKKwkJYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+cXVldWVkLm5leHQsIHN0cnVjdCB2aXZpX2J1ZmZlciwgdmIucXVldWUpOworCQlpZiAoTlVMTCA9PSBwcmV2KSB7CisJCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCZkbWFfcS0+YWN0aXZlKTsKKworCQkJZHByaW50aygxLCJSZXN0YXJ0aW5nIHZpZGVvIGRtYVxuIik7CisJCQl2aXZpX3N0b3BfdGhyZWFkKGRtYV9xKTsKKwkJCXZpdmlfc3RhcnRfdGhyZWFkKGRtYV9xKTsKKworCQkJYnVmLT52Yi5zdGF0ZSA9IFNUQVRFX0FDVElWRTsKKwkJCW1vZF90aW1lcigmZG1hX3EtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCQkJZHByaW50aygyLCJbJXAvJWRdIHJlc3RhcnRfcXVldWUgLSBmaXJzdCBhY3RpdmVcbiIsCisJCQkJYnVmLGJ1Zi0+dmIuaSk7CisKKwkJfSBlbHNlIGlmIChwcmV2LT52Yi53aWR0aCAgPT0gYnVmLT52Yi53aWR0aCAgJiYKKwkJCSAgIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodCAmJgorCQkJICAgcHJldi0+Zm10ICAgICAgID09IGJ1Zi0+Zm10KSB7CisJCQlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCZkbWFfcS0+YWN0aXZlKTsKKwkJCWJ1Zi0+dmIuc3RhdGUgPSBTVEFURV9BQ1RJVkU7CisJCQlkcHJpbnRrKDIsIlslcC8lZF0gcmVzdGFydF9xdWV1ZSAtIG1vdmUgdG8gYWN0aXZlXG4iLAorCQkJCWJ1ZixidWYtPnZiLmkpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJcHJldiA9IGJ1ZjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZpdmlfdmlkX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB2aXZpX2RldiAgICAgICpkZXYgID0gKHN0cnVjdCB2aXZpX2RldiopZGF0YTsKKwlzdHJ1Y3Qgdml2aV9kbWFxdWV1ZSAqdmlkcSA9ICZkZXYtPnZpZHE7CisJc3RydWN0IHZpdmlfYnVmZmVyICAgKmJ1ZjsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmdmlkcS0+YWN0aXZlKSkgeworCQlidWYgPSBsaXN0X2VudHJ5KHZpZHEtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3Qgdml2aV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCQlidWYtPnZiLnN0YXRlID0gU1RBVEVfRVJST1I7CisJCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CisJCXByaW50aygidml2aS8wOiBbJXAvJWRdIHRpbWVvdXRcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKKwl9CisKKwlyZXN0YXJ0X3ZpZGVvX3F1ZXVlKHZpZHEpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlWaWRlb2J1ZiBvcGVyYXRpb25zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludAorYnVmZmVyX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCisJKnNpemUgPSBmaC0+d2lkdGgqZmgtPmhlaWdodCoyOworCisJaWYgKDAgPT0gKmNvdW50KQorCQkqY291bnQgPSAzMjsKKwl3aGlsZSAoKnNpemUgKiAqY291bnQgPiB2aWRfbGltaXQgKiAxMDI0ICogMTAyNCkKKwkJKCpjb3VudCktLTsKKwlyZXR1cm4gMDsKK30KKwordm9pZAorZnJlZV9idWZmZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpdmlfYnVmZmVyICpidWYpCit7CisJZHByaW50aygxLCIlc1xuIixfX0ZVTkNUSU9OX18pOworCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlCVUcoKTsKKworCS8qRklYTUU6IE1heWJlIGEgc3BpbmxvY2sgaXMgcmVxdWlyZWQgaGVyZSAqLworCWtmcmVlKGJ1Zi0+dG9fYWRkcik7CisJYnVmLT50b19hZGRyPU5VTEw7CisKKwl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsMCwwKTsKKwl2aWRlb2J1Zl9kbWFfdW5tYXAodnEsICZidWYtPnZiLmRtYSk7CisJdmlkZW9idWZfZG1hX2ZyZWUoJmJ1Zi0+dmIuZG1hKTsKKwlidWYtPnZiLnN0YXRlID0gU1RBVEVfTkVFRFNfSU5JVDsKK30KKworI2RlZmluZSBub3JtX21heHcoKSAxMDI0CisjZGVmaW5lIG5vcm1fbWF4aCgpIDc2OAorc3RhdGljIGludAorYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkJCQllbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHZpdmlfZmggICAgICpmaCAgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCB2aXZpX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLHN0cnVjdCB2aXZpX2J1ZmZlcix2Yik7CisJaW50IHJjLCBpbml0X2J1ZmZlciA9IDA7CisKKy8vCWRwcmludGsoMSwiJXMsIGZpZWxkPSVkXG4iLF9fRlVOQ1RJT05fXyxmaWVsZCk7CisKKwlCVUdfT04oTlVMTCA9PSBmaC0+Zm10KTsKKwlpZiAoZmgtPndpZHRoICA8IDQ4IHx8IGZoLT53aWR0aCAgPiBub3JtX21heHcoKSB8fAorCSAgICBmaC0+aGVpZ2h0IDwgMzIgfHwgZmgtPmhlaWdodCA+IG5vcm1fbWF4aCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlidWYtPnZiLnNpemUgPSBmaC0+d2lkdGgqZmgtPmhlaWdodCoyOworCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgICYmICBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChidWYtPmZtdCAgICAgICAhPSBmaC0+Zm10ICAgIHx8CisJICAgIGJ1Zi0+dmIud2lkdGggICE9IGZoLT53aWR0aCAgfHwKKwkgICAgYnVmLT52Yi5oZWlnaHQgIT0gZmgtPmhlaWdodCB8fAorCWJ1Zi0+dmIuZmllbGQgICE9IGZpZWxkKSB7CisJCWJ1Zi0+Zm10ICAgICAgID0gZmgtPmZtdDsKKwkJYnVmLT52Yi53aWR0aCAgPSBmaC0+d2lkdGg7CisJCWJ1Zi0+dmIuaGVpZ2h0ID0gZmgtPmhlaWdodDsKKwkJYnVmLT52Yi5maWVsZCAgPSBmaWVsZDsKKwkJaW5pdF9idWZmZXIgPSAxOworCX0KKworCWlmIChTVEFURV9ORUVEU19JTklUID09IGJ1Zi0+dmIuc3RhdGUpIHsKKwkJaWYgKDAgIT0gKHJjID0gdmlkZW9idWZfaW9sb2NrKHZxLCZidWYtPnZiLE5VTEwpKSkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlidWYtPnZiLnN0YXRlID0gU1RBVEVfUFJFUEFSRUQ7CisKKwlpZiAoTlVMTCA9PSAoYnVmLT50b19hZGRyID0ga21hbGxvYyhzaXplb2YoKmJ1Zi0+dG9fYWRkcikgKiB2Yi0+ZG1hLm5yX3BhZ2VzLEdGUF9LRVJORUwpKSkgeworCQlyYz0tRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZnJlZV9idWZmZXIodnEsYnVmKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCitidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZpdmlfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLHN0cnVjdCB2aXZpX2J1ZmZlcix2Yik7CisJc3RydWN0IHZpdmlfZmggICAgICAgICpmaCAgICAgID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgdml2aV9kZXYgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OworCXN0cnVjdCB2aXZpX2RtYXF1ZXVlICAqdmlkcSAgICA9ICZkZXYtPnZpZHE7CisJc3RydWN0IHZpdmlfYnVmZmVyICAgICpwcmV2OworCisJaWYgKCFsaXN0X2VtcHR5KCZ2aWRxLT5xdWV1ZWQpKSB7CisJCWRwcmludGsoMSwiYWRkaW5nIHZiIHF1ZXVlPTB4JTA4bHhcbiIsKHVuc2lnbmVkIGxvbmcpJmJ1Zi0+dmIucXVldWUpOworCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCZ2aWRxLT5xdWV1ZWQpOworCQlidWYtPnZiLnN0YXRlID0gU1RBVEVfUVVFVUVEOworCQlkcHJpbnRrKDIsIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwKKwkJCWJ1ZiwgYnVmLT52Yi5pKTsKKwl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnZpZHEtPmFjdGl2ZSkpIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwmdmlkcS0+YWN0aXZlKTsKKworCQlidWYtPnZiLnN0YXRlID0gU1RBVEVfQUNUSVZFOworCQltb2RfdGltZXIoJnZpZHEtPnRpbWVvdXQsIGppZmZpZXMrQlVGRkVSX1RJTUVPVVQpOworCQlkcHJpbnRrKDIsIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gZmlyc3QgYWN0aXZlXG4iLAorCQkJYnVmLCBidWYtPnZiLmkpOworCisJCXZpdmlfc3RhcnRfdGhyZWFkKHZpZHEpOworCX0gZWxzZSB7CisJCXByZXYgPSBsaXN0X2VudHJ5KHZpZHEtPmFjdGl2ZS5wcmV2LCBzdHJ1Y3Qgdml2aV9idWZmZXIsIHZiLnF1ZXVlKTsKKwkJaWYgKHByZXYtPnZiLndpZHRoICA9PSBidWYtPnZiLndpZHRoICAmJgorCQkgICAgcHJldi0+dmIuaGVpZ2h0ID09IGJ1Zi0+dmIuaGVpZ2h0ICYmCisJCSAgICBwcmV2LT5mbXQgICAgICAgPT0gYnVmLT5mbXQpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsJnZpZHEtPmFjdGl2ZSk7CisJCQlidWYtPnZiLnN0YXRlID0gU1RBVEVfQUNUSVZFOworCQkJZHByaW50aygyLCJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmVcbiIsCisJCQkJYnVmLCBidWYtPnZiLmkpOworCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCZ2aWRxLT5xdWV1ZWQpOworCQkJYnVmLT52Yi5zdGF0ZSA9IFNUQVRFX1FVRVVFRDsKKwkJCWRwcmludGsoMiwiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsCisJCQkJYnVmLCBidWYtPnZiLmkpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3Qgdml2aV9idWZmZXIgICAqYnVmICA9IGNvbnRhaW5lcl9vZih2YixzdHJ1Y3Qgdml2aV9idWZmZXIsdmIpOworCXN0cnVjdCB2aXZpX2ZoICAgICAgICpmaCAgID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgdml2aV9kZXYgICAgICAqZGV2ICA9IChzdHJ1Y3Qgdml2aV9kZXYqKWZoLT5kZXY7CisJc3RydWN0IHZpdmlfZG1hcXVldWUgKnZpZHEgPSAmZGV2LT52aWRxOworCisJZHByaW50aygxLCIlc1xuIixfX0ZVTkNUSU9OX18pOworCisJdml2aV9zdG9wX3RocmVhZCh2aWRxKTsKKworCWZyZWVfYnVmZmVyKHZxLGJ1Zik7Cit9CisKK2ludCB2aXZpX21hcF9zZyAodm9pZCAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJICAgaW50IGRpcmVjdGlvbikKK3sKKwlpbnQgaTsKKworCWRwcmludGsoMSwiJXMsIG51bWJlciBvZiBwYWdlcz0lZFxuIixfX0ZVTkNUSU9OX18sbmVudHMpOworCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCisJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKysgKSB7CisJCUJVR19PTighc2dbaV0ucGFnZSk7CisKKwkJc2dbaV0uZG1hX2FkZHJlc3MgPSBwYWdlX3RvX3BoeXMoc2dbaV0ucGFnZSkgKyBzZ1tpXS5vZmZzZXQ7CisJfQorCisJcmV0dXJuIG5lbnRzOworfQorCitpbnQgdml2aV91bm1hcF9zZyh2b2lkICpkZXYsc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsaW50IG5yX3BhZ2VzLAorCQkJCQlpbnQgZGlyZWN0aW9uKQoreworCWRwcmludGsoMSwiJXNcbiIsX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHZpdmlfZG1hX3N5bmNfc2codm9pZCAqZGV2LHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LGludCBucl9wYWdlcywKKwkJCQkJaW50IGRpcmVjdGlvbikKK3sKKy8vCWRwcmludGsoMSwiJXNcbiIsX19GVU5DVElPTl9fKTsKKworLy8JZmx1c2hfd3JpdGVfYnVmZmVycygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB2aXZpX3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBidWZmZXJfcmVsZWFzZSwKKworCS8qIE5vbi1wY2kgaGFuZGxpbmcgcm91dGluZXMgKi8KKwkudmJfbWFwX3NnICAgICAgPSB2aXZpX21hcF9zZywKKwkudmJfZG1hX3N5bmNfc2cgPSB2aXZpX2RtYV9zeW5jX3NnLAorCS52Yl91bm1hcF9zZyAgICA9IHZpdmlfdW5tYXBfc2csCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlJT0NUTCBoYW5kbGluZworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB2aXZpX3RyeV9mbXQoc3RydWN0IHZpdmlfZGV2ICpkZXYsIHN0cnVjdCB2aXZpX2ZoICpmaCwKKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgdml2aV9mbXQgKmZtdDsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CisJdW5zaWduZWQgaW50IG1heHcsIG1heGg7CisKKwlpZiAoZm9ybWF0LmZvdXJjYyAhPSBmLT5mbXQucGl4LnBpeGVsZm9ybWF0KSB7CisJCWRwcmludGsoMSwiRm91cmNjIGZvcm1hdCBpbnZhbGlkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmbXQ9JmZvcm1hdDsKKworCWZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKworCWlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgeworLy8JCWZpZWxkPVY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJZmllbGQ9VjRMMl9GSUVMRF9TRVFfVEI7CisJfSBlbHNlIGlmIChWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgIT0gZmllbGQpIHsKKwkJZHByaW50aygxLCJGaWVsZCB0eXBlIGludmFsaWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWF4dyAgPSBub3JtX21heHcoKTsKKwltYXhoICA9IG5vcm1fbWF4aCgpOworCisJZi0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOworCWlmIChmLT5mbXQucGl4LmhlaWdodCA8IDMyKQorCQlmLT5mbXQucGl4LmhlaWdodCA9IDMyOworCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgpCisJCWYtPmZtdC5waXguaGVpZ2h0ID0gbWF4aDsKKwlpZiAoZi0+Zm10LnBpeC53aWR0aCA8IDQ4KQorCQlmLT5mbXQucGl4LndpZHRoID0gNDg7CisJaWYgKGYtPmZtdC5waXgud2lkdGggPiBtYXh3KQorCQlmLT5mbXQucGl4LndpZHRoID0gbWF4dzsKKwlmLT5mbXQucGl4LndpZHRoICY9IH4weDAzOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0KKwkJKGYtPmZtdC5waXgud2lkdGggKiBmbXQtPmRlcHRoKSA+PiAzOworCWYtPmZtdC5waXguc2l6ZWltYWdlID0KKwkJZi0+Zm10LnBpeC5oZWlnaHQgKiBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlc19nZXQoc3RydWN0IHZpdmlfZGV2ICpkZXYsIHN0cnVjdCB2aXZpX2ZoICpmaCkKK3sKKwkvKiBpcyBpdCBmcmVlPyAqLworCWRvd24oJmRldi0+bG9jayk7CisJaWYgKGRldi0+cmVzb3VyY2VzKSB7CisJCS8qIG5vLCBzb21lb25lIGVsc2UgdXNlcyBpdCAqLworCQl1cCgmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIGl0J3MgZnJlZSwgZ3JhYiBpdCAqLworCWRldi0+cmVzb3VyY2VzID0xOworCWRwcmludGsoMSwicmVzOiBnZXRcbiIpOworCXVwKCZkZXYtPmxvY2spOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCByZXNfbG9ja2VkKHN0cnVjdCB2aXZpX2RldiAqZGV2KQoreworCXJldHVybiAoZGV2LT5yZXNvdXJjZXMpOworfQorCitzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3Qgdml2aV9kZXYgKmRldiwgc3RydWN0IHZpdmlfZmggKmZoKQoreworCWRvd24oJmRldi0+bG9jayk7CisJZGV2LT5yZXNvdXJjZXMgPSAwOworCWRwcmludGsoMSwicmVzOiBwdXRcbiIpOworCXVwKCZkZXYtPmxvY2spOworfQorCitzdGF0aWMgaW50IHZpdmlfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgdml2aV9maCAgKmZoICAgICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiAgICA9IGZoLT5kZXY7CisJaW50IHJldD0wOworCisJaWYgKGRlYnVnKSB7CisJCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkKKwkJCXY0bF9wcmludGtfaW9jdGxfYXJnKCJ2aXZpKHcpIixjbWQsIGFyZyk7CisJCWVsc2UgaWYgKCFfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKSB7CisJCQl2NGxfcHJpbnRfaW9jdGwoInZpdmkiLCBjbWQpOworCQl9CisJfQorCisJc3dpdGNoKGNtZCkgeworCS8qIC0tLSBjYXBhYmlsaXRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfUVVFUllDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSAoc3RydWN0IHY0bDJfY2FwYWJpbGl0eSopYXJnOworCisJCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CisKKwkJc3RyY3B5KGNhcC0+ZHJpdmVyLCAidml2aSIpOworCQlzdHJjcHkoY2FwLT5jYXJkLCAidml2aSIpOworCQljYXAtPnZlcnNpb24gPSBWSVZJX1ZFUlNJT047CisJCWNhcC0+Y2FwYWJpbGl0aWVzID0KKwkJCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJCVY0TDJfQ0FQX1NUUkVBTUlORyAgICAgfAorCQkJCQlWNEwyX0NBUF9SRUFEV1JJVEU7CisJCWJyZWFrOworCX0KKwkvKiAtLS0gY2FwdHVyZSBpb2N0bHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZiA9IGFyZzsKKwkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGludCBpbmRleDsKKworCQlpbmRleCA9IGYtPmluZGV4OworCQl0eXBlICA9IGYtPnR5cGU7CisKKwkJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQlyZXQ9LUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQkJaWYgKGluZGV4ID4gMCl7CisJCQkJcmV0PS1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisJCQltZW1zZXQoZiwwLHNpemVvZigqZikpOworCisJCQlmLT5pbmRleCA9IGluZGV4OworCQkJZi0+dHlwZSAgPSB0eXBlOworCQkJc3RybGNweShmLT5kZXNjcmlwdGlvbixmb3JtYXQubmFtZSxzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwkJCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0LmZvdXJjYzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0PS1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZzsKKworCQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCXJldD0tRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQltZW1zZXQoJmYtPmZtdC5waXgsMCxzaXplb2YoZi0+Zm10LnBpeCkpOworCQlmLT5mbXQucGl4LndpZHRoICAgICAgICA9IGZoLT53aWR0aDsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgICAgICAgPSBmaC0+aGVpZ2h0OworCQlmLT5mbXQucGl4LmZpZWxkICAgICAgICA9IGZoLT52Yl92aWRxLmZpZWxkOworCQlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IGZoLT5mbXQtPmZvdXJjYzsKKwkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPQorCQkJKGYtPmZtdC5waXgud2lkdGggKiBmaC0+Zm10LT5kZXB0aCkgPj4gMzsKKwkJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPQorCQkJZi0+Zm10LnBpeC5oZWlnaHQgKiBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfRk1UOgorCXsKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOworCisJCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkJZHByaW50aygxLCJPbmx5IGNhcHR1cmUgc3VwcG9ydGVkLlxuIik7CisJCQlyZXQ9LUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gdml2aV90cnlfZm10KGRldixmaCxmKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKworCQlmaC0+Zm10ICAgICAgICAgICA9ICZmb3JtYXQ7CisJCWZoLT53aWR0aCAgICAgICAgID0gZi0+Zm10LnBpeC53aWR0aDsKKwkJZmgtPmhlaWdodCAgICAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKKwkJZmgtPnZiX3ZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCQlmaC0+dHlwZSAgICAgICAgICA9IGYtPnR5cGU7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1RSWV9GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7CisJCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkJcmV0PS1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXJldD12aXZpX3RyeV9mbXQoZGV2LGZoLGYpOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfUkVRQlVGUzoKKwkJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkJcmV0PS1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQ9dmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZpZHEsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgVklESU9DX1FVRVJZQlVGOgorCQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQlyZXQ9LUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldD12aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgVklESU9DX1FCVUY6CisJCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCXJldD0tRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcmV0PXZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBhcmcpOworCQlicmVhazsKKwljYXNlIFZJRElPQ19EUUJVRjoKKwkJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkJcmV0PS1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQ9dmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBhcmcsCisJCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwkJYnJlYWs7CisjaWZkZWYgSEFWRV9WNEwxCisJLyogLS0tIHN0cmVhbWluZyBjYXB0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwljYXNlIFZJRElPQ0dNQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX21idWYgKm1idWYgPSBhcmc7CisJCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcT0mZmgtPnZiX3ZpZHE7CisJCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzIHJlcTsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJbWVtc2V0KCZyZXEsMCxzaXplb2YocmVxKSk7CisJCXJlcS50eXBlICAgPSBxLT50eXBlOworCQlyZXEuY291bnQgID0gODsKKwkJcmVxLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJCXJldCA9IHZpZGVvYnVmX3JlcWJ1ZnMocSwmcmVxKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJbWVtc2V0KG1idWYsMCxzaXplb2YoKm1idWYpKTsKKwkJbWJ1Zi0+ZnJhbWVzID0gcmVxLmNvdW50OworCQltYnVmLT5zaXplICAgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbWJ1Zi0+ZnJhbWVzOyBpKyspIHsKKwkJCW1idWYtPm9mZnNldHNbaV0gID0gcS0+YnVmc1tpXS0+Ym9mZjsKKwkJCW1idWYtPnNpemUgICAgICAgKz0gcS0+YnVmc1tpXS0+YnNpemU7CisJCX0KKwkJYnJlYWs7CisJfQorI2VuZGlmCisJY2FzZSBWSURJT0NfU1RSRUFNT046CisJeworCQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghcmVzX2dldChkZXYsZmgpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0PXZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmJfdmlkcSk7CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TVFJFQU1PRkY6CisJeworCQlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQlyZXQ9LUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZpZHEpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlyZXNfZnJlZShkZXYsZmgpOworCQlicmVhazsKKwl9CisJLyogLS0tLS0tLS0tLSB0diBub3JtcyAtLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfRU5VTVNURDoKKwl7CisJCXN0cnVjdCB2NGwyX3N0YW5kYXJkICplID0gYXJnOworCisJCWlmIChlLT5pbmRleD4wKSB7CisJCQlyZXQ9LUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChlLCBWNEwyX1NURF9OVFNDX00sICJOVFNDLU0iKTsKKworCQkvKiBBbGxvd3Mgdml2aSB0byB1c2UgZGlmZmVyZW50IGZwcyBmcm9tIHZpZGVvIHN0ZCAqLworCQllLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSBXQUtFX05VTUVSQVRPUjsKKwkJZS0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSBXQUtFX0RFTk9NSU5BVE9SOworCisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19HX1NURDoKKwl7CisJCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKKworCQkqaWQgPSBWNEwyX1NURF9OVFNDX007CisJCWJyZWFrOworCX0KKwljYXNlIFZJRElPQ19TX1NURDoKKwl7CisJCWJyZWFrOworCX0KKwkvKiAtLS0tLS0gaW5wdXQgc3dpdGNoaW5nIC0tLS0tLS0tLS0gKi8KKwljYXNlIFZJRElPQ19FTlVNSU5QVVQ6CisJeyAvKiBvbmx5IG9uZSBpbnB1dCBpbiB0aGlzIHNhbXBsZSBkcml2ZXIgKi8KKwkJc3RydWN0IHY0bDJfaW5wdXQgKmlucCA9IGFyZzsKKworCQlpZiAoaW5wLT5pbmRleCAhPSAwKSB7CisJCQlyZXQ9LUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCW1lbXNldChpbnAsIDAsIHNpemVvZigqaW5wKSk7CisKKwkJaW5wLT5pbmRleCA9IDA7CisJCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJCWlucC0+c3RkID0gVjRMMl9TVERfTlRTQ19NOworCQlzdHJjcHkoaW5wLT5uYW1lLCJDYW1lcmEiKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJeworCQl1bnNpZ25lZCBpbnQgKmkgPSBhcmc7CisKKwkJKmkgPSAwOworCQlicmVhazsKKwl9CisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwl7CisJCXVuc2lnbmVkIGludCAqaSA9IGFyZzsKKworCQlpZiAoKmkgPiAwKQorCQkJcmV0PS1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCS8qIC0tLSBjb250cm9scyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCXsKKwkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodml2aV9xY3RybCk7IGkrKykKKwkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHZpdmlfcWN0cmxbaV0uaWQpIHsKKwkJCQltZW1jcHkocWMsICYodml2aV9xY3RybFtpXSksCisJCQkJCXNpemVvZigqcWMpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQlyZXQ9LUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX0dfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpdmlfcWN0cmwpOyBpKyspCisJCQlpZiAoY3RybC0+aWQgPT0gdml2aV9xY3RybFtpXS5pZCkgeworCQkJCWN0cmwtPnZhbHVlPXFjdGxfcmVnc1tpXTsKKwkJCQlicmVhazsKKwkJCX0KKworCQlyZXQ9LUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXZpX3FjdHJsKTsgaSsrKQorCQkJaWYgKGN0cmwtPmlkID09IHZpdmlfcWN0cmxbaV0uaWQpIHsKKwkJCQlpZiAoY3RybC0+dmFsdWUgPAorCQkJCQl2aXZpX3FjdHJsW2ldLm1pbmltdW0KKwkJCQkJfHwgY3RybC0+dmFsdWUgPgorCQkJCQl2aXZpX3FjdHJsW2ldLm1heGltdW0pIHsKKwkJCQkJCXJldD0tRVJBTkdFOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQlxY3RsX3JlZ3NbaV09Y3RybC0+dmFsdWU7CisJCQkJYnJlYWs7CisJCQl9CisJCXJldD0tRUlOVkFMOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0PXY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLGZpbGUsY21kLGFyZyx2aXZpX2RvX2lvY3RsKTsKKwl9CisKKwlpZiAoZGVidWcpIHsKKwkJaWYgKHJldDwwKSB7CisJCQl2NGxfcHJpbnRfaW9jdGwoInZpdmkoZXJyKSIsIGNtZCk7CisJCQlkcHJpbnRrKDEsImVycmNvZGU9JWRcbiIscmV0KTsKKwkJfSBlbHNlIGlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKQorCQkJdjRsX3ByaW50a19pb2N0bF9hcmcoInZpdmkocikiLGNtZCwgYXJnKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpdmlfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHZpdmlfZG9faW9jdGwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlGaWxlIG9wZXJhdGlvbnMgZm9yIHRoZSBkZXZpY2UKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgbGluZV9idWZfc2l6ZShub3JtKSAobm9ybV9tYXh3KG5vcm0pKihmb3JtYXQuZGVwdGgrNykvOCkKKworc3RhdGljIGludCB2aXZpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmgsKmRldiA9IE5VTEw7CisJc3RydWN0IHZpdmlfZmggKmZoOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOworCWludCBpOworCisJcHJpbnRrKEtFUk5fREVCVUcgInZpdmk6IG9wZW4gY2FsbGVkIChtaW5vcj0lZClcbiIsbWlub3IpOworCisJbGlzdF9mb3JfZWFjaChsaXN0LCZ2aXZpX2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpdmlfZGV2LCB2aXZpX2Rldmxpc3QpOworCQlpZiAoaC0+dmlkZW9fZGV2Lm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCX0KKwl9CisJaWYgKE5VTEwgPT0gZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCisJLyogSWYgbW9yZSB0aGFuIG9uZSB1c2VyLCBtdXRleCBzaG91bGQgYmUgYWRkZWQgKi8KKwlkZXYtPnVzZXJzKys7CisKKwlkcHJpbnRrKDEsIm9wZW4gbWlub3I9JWQgdHlwZT0lcyB1c2Vycz0lZFxuIiwKKwkJCQltaW5vcix2NGwyX3R5cGVfbmFtZXNbdHlwZV0sZGV2LT51c2Vycyk7CisKKwkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLworCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSxHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQlkZXYtPnVzZXJzLS07CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOworCWZoLT5kZXYgICAgICA9IGRldjsKKwlmaC0+dHlwZSAgICAgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZmgtPmZtdCAgICAgID0gJmZvcm1hdDsKKwlmaC0+d2lkdGggICAgPSA2NDA7CisJZmgtPmhlaWdodCAgID0gNDgwOworCisJLyogUHV0IGFsbCBjb250cm9scyBhdCBhIHNhbmUgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXZpX3FjdHJsKTsgaSsrKQorCQlxY3RsX3JlZ3NbaV0gPXZpdmlfcWN0cmxbaV0uZGVmYXVsdF92YWx1ZTsKKworCWRwcmludGsoMSwiT3BlbjogZmg9MHglMDhseCwgZGV2PTB4JTA4bHgsIGRldi0+dmlkcT0weCUwOGx4XG4iLAorCQkodW5zaWduZWQgbG9uZylmaCwodW5zaWduZWQgbG9uZylkZXYsKHVuc2lnbmVkIGxvbmcpJmRldi0+dmlkcSk7CisJZHByaW50aygxLCJPcGVuOiBsaXN0X2VtcHR5IHF1ZXVlZD0lZFxuIixsaXN0X2VtcHR5KCZkZXYtPnZpZHEucXVldWVkKSk7CisJZHByaW50aygxLCJPcGVuOiBsaXN0X2VtcHR5IGFjdGl2ZT0lZFxuIixsaXN0X2VtcHR5KCZkZXYtPnZpZHEuYWN0aXZlKSk7CisKKwkvKiBSZXNldHMgZnJhbWUgY291bnRlcnMgKi8KKwlkZXYtPmg9MDsKKwlkZXYtPm09MDsKKwlkZXYtPnM9MDsKKwlkZXYtPnVzPTA7CisJZGV2LT5qaWZmaWVzPWppZmZpZXM7CisJc3ByaW50ZihkZXYtPnRpbWVzdHIsIiUwMmQ6JTAyZDolMDJkOiUwM2QiLAorCQkJZGV2LT5oLGRldi0+bSxkZXYtPnMsKGRldi0+dXMrNTAwKS8xMDAwKTsKKworCXZpZGVvYnVmX3F1ZXVlX2luaXQoJmZoLT52Yl92aWRxLCAmdml2aV92aWRlb19xb3BzLAorCQkJTlVMTCwgTlVMTCwKKwkJCWZoLT50eXBlLAorCQkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJc2l6ZW9mKHN0cnVjdCB2aXZpX2J1ZmZlciksZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit2aXZpX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZmgtPnR5cGU9PVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQlpZiAocmVzX2xvY2tlZChmaC0+ZGV2KSkKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX29uZSgmZmgtPnZiX3ZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLAorCQkJCQlmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Cit2aXZpX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHZpdmlfYnVmZmVyICpidWY7CisKKwlkcHJpbnRrKDEsIiVzXG4iLF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGZoLT50eXBlKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCWlmIChyZXNfZ2V0KGZoLT5kZXYsZmgpKSB7CisJCWRwcmludGsoMSwicG9sbDogbW1hcCBpbnRlcmZhY2VcbiIpOworCQkvKiBzdHJlYW1pbmcgY2FwdHVyZSAqLworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZiX3ZpZHEuc3RyZWFtKSkKKwkJCXJldHVybiBQT0xMRVJSOworCQlidWYgPSBsaXN0X2VudHJ5KGZoLT52Yl92aWRxLnN0cmVhbS5uZXh0LHN0cnVjdCB2aXZpX2J1ZmZlcix2Yi5zdHJlYW0pOworCX0gZWxzZSB7CisJCWRwcmludGsoMSwicG9sbDogcmVhZCgpIGludGVyZmFjZVxuIik7CisJCS8qIHJlYWQoKSBjYXB0dXJlICovCisJCWJ1ZiA9IChzdHJ1Y3Qgdml2aV9idWZmZXIqKWZoLT52Yl92aWRxLnJlYWRfYnVmOworCQlpZiAoTlVMTCA9PSBidWYpCisJCQlyZXR1cm4gUE9MTEVSUjsKKwl9CisJcG9sbF93YWl0KGZpbGUsICZidWYtPnZiLmRvbmUsIHdhaXQpOworCWlmIChidWYtPnZiLnN0YXRlID09IFNUQVRFX0RPTkUgfHwKKwkgICAgYnVmLT52Yi5zdGF0ZSA9PSBTVEFURV9FUlJPUikKKwkJcmV0dXJuIFBPTExJTnxQT0xMUkROT1JNOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpdmlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgdml2aV9maCAgKmZoICAgICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiAgICA9IGZoLT5kZXY7CisJc3RydWN0IHZpdmlfZG1hcXVldWUgKnZpZHEgPSAmZGV2LT52aWRxOworCisJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKworCXZpdmlfc3RvcF90aHJlYWQodmlkcSk7CisJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmlkcSk7CisKKwlrZnJlZSAoZmgpOworCisJZGV2LT51c2Vycy0tOworCisJcHJpbnRrKEtFUk5fREVCVUcgInZpdmk6IGNsb3NlIGNhbGxlZCAobWlub3I9JWQsIHVzZXJzPSVkKVxuIixtaW5vcixkZXYtPnVzZXJzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2aXZpX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKK3sKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKKworCWRwcmludGsgKDEsIm1tYXAgY2FsbGVkLCB2bWE9MHglMDhseFxuIiwodW5zaWduZWQgbG9uZyl2bWEpOworCisJcmV0PXZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmlkcSwgdm1hKTsKKworCWRwcmludGsgKDEsInZtYSBzdGFydD0weCUwOGx4LCBzaXplPSVsZCwgcmV0PSVkXG4iLAorCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LAorCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX2VuZC0odW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LAorCQlyZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdml2aV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgPSB2aXZpX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gdml2aV9yZWxlYXNlLAorCS5yZWFkICAgICAgICAgICA9IHZpdmlfcmVhZCwKKwkucG9sbAkJPSB2aXZpX3BvbGwsCisJLmlvY3RsICAgICAgICAgID0gdml2aV9pb2N0bCwKKwkubW1hcAkJPSB2aXZpX21tYXAsCisJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugdml2aSA9IHsKKwkubmFtZQkJPSAiVlRNIFZpcnR1YWwgVmlkZW8gQ2FwdHVyZSBCb2FyZCIsCisJLnR5cGUJCT0gVklEX1RZUEVfQ0FQVFVSRSwKKwkuaGFyZHdhcmUJPSAwLAorCS5mb3BzICAgICAgICAgICA9ICZ2aXZpX2ZvcHMsCisJLm1pbm9yCQk9IC0xLAorLy8JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKK307CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlJbml0aWFsaXphdGlvbiBhbmQgbW9kdWxlIHN0dWZmCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdCB2aXZpX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB2aXZpX2RldiAqZGV2OworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKwlsaXN0X2FkZF90YWlsKCZkZXYtPnZpdmlfZGV2bGlzdCwmdml2aV9kZXZsaXN0KTsKKworCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEuYWN0aXZlKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLnF1ZXVlZCk7CisKKwkvKiBpbml0aWFsaXplIGxvY2tzICovCisJaW5pdF9NVVRFWCgmZGV2LT5sb2NrKTsKKworCWRldi0+dmlkcS50aW1lb3V0LmZ1bmN0aW9uID0gdml2aV92aWRfdGltZW91dDsKKwlkZXYtPnZpZHEudGltZW91dC5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWRldjsKKwlpbml0X3RpbWVyKCZkZXYtPnZpZHEudGltZW91dCk7CisKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnZpdmksIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKKwlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gQ2FwdHVyZSBCb2FyZCAoTG9hZCBzdGF0dXM6ICVkKVxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdml2aV9leGl0KHZvaWQpCit7CisJc3RydWN0IHZpdmlfZGV2ICpoOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsJnZpdmlfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgdml2aV9kZXYsIHZpdmlfZGV2bGlzdCk7CisJCWtmcmVlIChoKTsKKwl9CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnZpdmkpOworfQorCittb2R1bGVfaW5pdCh2aXZpX2luaXQpOworbW9kdWxlX2V4aXQodml2aV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKaW5kZXggZDBhMWU3Mi4uNDBiMjA1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiB2cHgzMjIwYSwgdnB4MzIxNmIgJiB2cHgzMjE0YyB2aWRlbyBkZWNvZGVyIGRyaXZlciB2ZXJzaW9uIDAuMC4xCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIExhdXJlbnQgUGluY2hhcnQgPGxwaW5jaGFydEBmcmVlZ2F0ZXMuYmU+CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KIAogI2RlZmluZSBJMkNfTkFNRSh4KSAoeCktPm5hbWUKIApAQCAtMTc3LDggKzE3Niw4IEBACiAKIHN0YXRpYyBpbnQKIHZweDMyMjBfd3JpdGVfZnBfYmxvY2sgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCSAgICAgICAgY29uc3QgdTE2ICAgICAgICAgKmRhdGEsCi0JCSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgIGxlbikKKwkJCWNvbnN0IHUxNiAgICAgICAgICpkYXRhLAorCQkJdW5zaWduZWQgaW50ICAgICAgIGxlbikKIHsKIAl1OCByZWc7CiAJaW50IHJldCA9IDA7CkBAIC0zMTcsNyArMzE2LDcgQEAKIAkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfZnAsCiAJCQkJICAgICAgIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKIAkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCQkKKwogCQljYXNlIFZJREVPX01PREVfTlRTQzoKIAkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X250c2MsCiAJCQkJCSAgICAgICBzaXplb2YoaW5pdF9udHNjKSA+PiAxKTsKQEAgLTMyNSw3ICszMjQsNyBAQAogCiAJCWNhc2UgVklERU9fTU9ERV9QQUw6CiAJCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJICAgICAgIAkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKKwkJCQkJICAgICAgIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CiAJCQlicmVhazsKIAkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgogCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfc2VjYW0sCkBAIC0zMzMsMTAgKzMzMiwxMCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJICAgICAgIAkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKKwkJCQkJICAgICAgIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CiAJCQlicmVhazsKIAkJfQotCX0JCQorCX0KIAkJYnJlYWs7CiAKIAljYXNlIERFQ09ERVJfRFVNUDoKQEAgLTQxMiw3ICs0MTEsNyBAQAogCiAJCS8qIEhlcmUgd2UgYmFjayB1cCB0aGUgaW5wdXQgc2VsZWN0aW9uIGJlY2F1c2UgaXQgZ2V0cwogCQkgICBvdmVyd3JpdHRlbiB3aGVuIHdlIGZpbGwgdGhlIHJlZ2lzdGVycyB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgIGNob29zZW4gdmlkZW8gbm9ybSAqLworCQkgICBjaG9vc2VuIHZpZGVvIG5vcm0gKi8KIAkJdGVtcF9pbnB1dCA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4ZjIpOwogCiAJCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IERFQ09ERVJfU0VUX05PUk0gJWRcbiIsCkBAIC01NzksNyArNTc4LDcgQEAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpZ25vcmUgPSBJMkNfQ0xJRU5UX0VORDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgYWRkcl9kYXRhID0gewogCS5ub3JtYWxfaTJjCQk9IG5vcm1hbF9pMmMsCiAJLnByb2JlCQkJPSAmaWdub3JlLApAQCAtNjYyLDcgKzY2MSw3IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0lORk8gCisJCQkJS0VSTl9JTkZPCiAJCQkJIiVzOiBXcm9uZyBwYXJ0IG51bWJlciAoMHglMDR4KVxuIiwKIAkJCQlfX2Z1bmNfXywgcG4pOwogCQkJa2ZyZWUoY2xpZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwppbmRleCBiN2IwYWZmLi44MGVmOGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCkBAIC0yNiw3ICsyNiw3IEBACiAJRG9lcyBhbnkgb3RoZXIgbW9kZWwgdXNpbmcgdGhlIHc5OTY2IGludGVyZmFjZSBjaGlwIGV4aXN0ID8KIAogCVRvZG86Ci0JCisKIAkqQWRkIGEgd29ya2luZyBFUFAgbW9kZSwgc2luY2UgRE1BIEVDUCByZWFkIGlzbid0IGltcGxlbWVudGVkCiAJaW4gdGhlIHBhcnBvcnQgZHJpdmVycy4gKFRoYXQncyB3aHkgaXQncyBzbyBzbG9vdykKIApAQCAtNDcsOSArNDcsOSBAQAogCSpQcm9iYWJseSBzb21lIGJ1Z3MgdGhhdCBJIGRvbid0IGtub3cgb2YKIAogCVBsZWFzZSBzdXBwb3J0IG1lIGJ5IHNlbmRpbmcgZmVlZGJhY2shCi0JCisKIAlDaGFuZ2VzOgotCQorCiAJQWxhbiBDb3g6CVJlbW92ZWQgUkdCIG1vZGUgZm9yIGtlcm5lbCBtZXJnZSwgYWRkZWQgVEhJU19NT0RVTEUKIAkJCWFuZCBvd25lciBzdXBwb3J0IGZvciBuZXdlciBtb2R1bGUgbG9ja3MKICovCkBAIC0yMDQsNyArMjA0LDcgQEAKICAqLwogCiAKLS8vIFNldCBjYW1lcmEgcGhhc2UgZmxhZ3MsIHNvIHdlIGtub3cgd2hhdCB0byB1bmluaXQgd2hlbiB0ZXJtaW5hdGluZyAKKy8vIFNldCBjYW1lcmEgcGhhc2UgZmxhZ3MsIHNvIHdlIGtub3cgd2hhdCB0byB1bmluaXQgd2hlbiB0ZXJtaW5hdGluZwogc3RhdGljIGlubGluZSB2b2lkIHc5OTY2X3NldFN0YXRlKHN0cnVjdCB3OTk2Nl9kZXYqIGNhbSwgaW50IG1hc2ssIGludCB2YWwpCiB7CiAJY2FtLT5kZXZfc3RhdGUgPSAoY2FtLT5kZXZfc3RhdGUgJiB+bWFzaykgXiB2YWw7CkBAIC0yMzMsNyArMjMzLDcgQEAKIAlwYXJwb3J0X3JlbGVhc2UoY2FtLT5wZGV2KTsKIAl3OTk2Nl9zZXRTdGF0ZShjYW0sIFc5OTY2X1NUQVRFX0NMQUlNRUQsIDApOwogfQotIAorCiAvLyBSZWFkIHJlZ2lzdGVyIGZyb20gVzk5NjYgaW50ZXJmYWNlLWNoaXAKIC8vIEV4cGVjdHMgYSBjbGFpbWVkIHBkZXYKIC8vIC0xIG9uIGVycm9yLCBlbHNlIHJlZ2lzdGVyIGRhdGEgKGJ5dGUpCkBAIC0yNDIsNyArMjQyLDcgQEAKIAkvLyBFQ1AsIHJlYWQsIHJlZ3RyYW5zZmVyLCBSRUcsIFJFRywgUkVHLCBSRUcsIFJFRwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgYWRkciA9IDB4ODAgfCAocmVnICYgMHgxZik7CiAJdW5zaWduZWQgY2hhciB2YWw7Ci0JCisKIAlpZiAocGFycG9ydF9uZWdvdGlhdGUoY2FtLT5wcG9ydCwgY2FtLT5wcG1vZGUgfCBJRUVFMTI4NF9BRERSKSAhPSAwKQogCQlyZXR1cm4gLTE7CiAJaWYgKHBhcnBvcnRfd3JpdGUoY2FtLT5wcG9ydCwgJmFkZHIsIDEpICE9IDEpCkBAIC0yNjMsNyArMjYzLDcgQEAKIAkvLyBFQ1AsIHdyaXRlLCByZWd0cmFuc2ZlciwgUkVHLCBSRUcsIFJFRywgUkVHLCBSRUcKIAljb25zdCB1bnNpZ25lZCBjaGFyIGFkZHIgPSAweGMwIHwgKHJlZyAmIDB4MWYpOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgdmFsID0gZGF0YTsKLQkKKwogCWlmIChwYXJwb3J0X25lZ290aWF0ZShjYW0tPnBwb3J0LCBjYW0tPnBwbW9kZSB8IElFRUUxMjg0X0FERFIpICE9IDApCiAJCXJldHVybiAtMTsKIAlpZiAocGFycG9ydF93cml0ZShjYW0tPnBwb3J0LCAmYWRkciwgMSkgIT0gMSkKQEAgLTI4NCw3ICsyODQsNyBAQAogewogCWlmIChjYW0tPmRldl9zdGF0ZSAhPSAwKQogCQlyZXR1cm4gLTE7Ci0JCisKIAljYW0tPnBwb3J0ID0gcG9ydDsKIAljYW0tPmJyaWdodG5lc3MgPSAxMjg7CiAJY2FtLT5jb250cmFzdCA9IDY0OwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJCQljYW0tPnBwbW9kZSA9IElFRUUxMjg0X01PREVfRVBQOwogCQllbHNlCiAJCQljYW0tPnBwbW9kZSA9IElFRUUxMjg0X01PREVfRUNQOwotCQlicmVhazsJCisJCWJyZWFrOwogCWNhc2UgMToJCS8vIGh3LSBvciBzdy1lY3AKIAkJY2FtLT5wcG1vZGUgPSBJRUVFMTI4NF9NT0RFX0VDUDsKIAkJYnJlYWs7CkBAIC0zMTAsNyArMzEwLDcgQEAKIAkJY2FtLT5wcG1vZGUgPSBJRUVFMTI4NF9NT0RFX0VQUDsKIAlicmVhazsKIAl9Ci0JCisKIC8vIFRlbGwgdGhlIHBhcnBvcnQgZHJpdmVyIHRoYXQgd2UgZXhpc3RzCiAJY2FtLT5wZGV2ID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UocG9ydCwgInc5OTY2IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCk7CiAJaWYgKGNhbS0+cGRldiA9PSBOVUxMKSB7CkBAIC0zMjAsNyArMzIwLDcgQEAKIAl3OTk2Nl9zZXRTdGF0ZShjYW0sIFc5OTY2X1NUQVRFX1BERVYsIFc5OTY2X1NUQVRFX1BERVYpOwogCiAJdzk5NjZfcGRldl9jbGFpbShjYW0pOwotCQorCiAvLyBTZXR1cCBhIGRlZmF1bHQgY2FwdHVyZSBtb2RlCiAJaWYgKHc5OTY2X3NldHVwKGNhbSwgMCwgMCwgMTAyMywgMTAyMywgMjAwLCAxNjApICE9IDApIHsKIAkJRFBSSU5URigidzk5NjZfc2V0dXAoKSBmYWlsZWQuXG4iKTsKQEAgLTMzMywxMSArMzMzLDExIEBACiAJbWVtY3B5KCZjYW0tPnZkZXYsICZ3OTk2Nl90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpKTsKIAljYW0tPnZkZXYucHJpdiA9IGNhbTsKIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpID09IC0xKQkJIAorCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpID09IC0xKQogCQlyZXR1cm4gLTE7Ci0JCisKIAl3OTk2Nl9zZXRTdGF0ZShjYW0sIFc5OTY2X1NUQVRFX1ZERVYsIFc5OTY2X1NUQVRFX1ZERVYpOwotCQorCiAJLy8gQWxsIG9rCiAJcHJpbnRrKAogCQkidzk5NjZjZjogRm91bmQgYW5kIGluaXRpYWxpemVkIGEgd2ViY2FtIG9uICVzLlxuIiwKQEAgLTM5MSw3ICszOTEsNyBAQAogCQkvLyBPbmx5IGNvbnRpbnVlIGFzIGxvbmcgYXMgd2Uga2VlcCBnZXR0aW5nIGJldHRlciB2YWx1ZXMKIAkJaWYgKGVyciA+IGJlc3RlcnIpCiAJCQlicmVhazsKLQkJCisKIAkJYmVzdGVyciA9IGVycjsKIAkJYmVzdGxlbiA9IGxlbjsKIAl9CkBAIC0zOTksNyArMzk5LDcgQEAKIAlyZXR1cm4gYmVzdGxlbjsKIH0KIAotLy8gTW9kaWZ5IGNhcHR1cmUgd2luZG93IChpZiBuZWNlc3NhcnkpIAorLy8gTW9kaWZ5IGNhcHR1cmUgd2luZG93IChpZiBuZWNlc3NhcnkpCiAvLyBhbmQgY2FsY3VsYXRlIGRvd25zY2FsaW5nCiAvLyBSZXR1cm4gLTEgb24gZXJyb3IKIHN0YXRpYyBpbnQgdzk5NjZfY2FsY3NjYWxlKGludCBzaXplLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQqIGJlZywgaW50KiBlbmQsIHVuc2lnbmVkIGNoYXIqIGZhY3RvcikKQEAgLTQwNyw3ICs0MDcsNyBAQAogCWludCBtYXhsZW4gPSBtYXggLSBtaW47CiAJaW50IGxlbiA9ICplbmQgLSAqYmVnICsgMTsKIAlpbnQgbmV3bGVuID0gdzk5NjZfZmluZGxlbihsZW4sIHNpemUsIG1heGxlbik7Ci0JaW50IGVyciA9IG5ld2xlbiAtIGxlbjsgCisJaW50IGVyciA9IG5ld2xlbiAtIGxlbjsKIAogCS8vIENoZWNrIGZvciBiYWQgZm9ybWF0CiAJaWYgKG5ld2xlbiA+IG1heGxlbiB8fCBuZXdsZW4gPCBzaXplKQpAQCAtNDUyLDggKzQ1Miw4IEBACiAJCTB4NDgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAJCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4YzAKIAl9OwotCQotCQorCisKIAlpZiAodypoKjIgPiBXOTk2Nl9TUkFNU0laRSkKIAl7CiAJCURQUklOVEYoImNhcHR1cmUgd2luZG93IGV4Y2VlZHMgU1JBTSBzaXplIS5cbiIpOwpAQCAtNDY5LDkgKzQ2OSw5IEBACiAJY2FtLT53aWR0aCA9IHc7CiAJY2FtLT5oZWlnaHQgPSBoOwogCi0JZW5oX3MgPSAwOwkKKwllbmhfcyA9IDA7CiAJZW5oX2UgPSB3KmgqMjsKLQkKKwogLy8gTW9kaWZ5IGNhcHR1cmUgd2luZG93IGlmIG5lY2Vzc2FyeSBhbmQgY2FsY3VsYXRlIGRvd25zY2FsaW5nCiAJaWYgKAogCQl3OTk2Nl9jYWxjc2NhbGUodywgVzk5NjZfV05EX01JTl9YLCBXOTk2Nl9XTkRfTUFYX1gsICZ4MSwgJngyLCAmc2NhbGVfeCkgIT0gMCB8fApAQCAtNDgyLDE0ICs0ODIsMTQgQEAKIAkJIiVkeCVkLCB4OiAlZDwtPiVkLCB5OiAlZDwtPiVkLCBzeDogJWQvNjQsIHN5OiAlZC82NC5cbiIsCiAJCXcsIGgsIHgxLCB4MiwgeTEsIHkyLCBzY2FsZV94Jn4weDgwLCBzY2FsZV95Jn4weDgwCiAJKTsKLQkKKwogLy8gU2V0dXAgcmVnaXN0ZXJzCiAJcmVnc1sweDAwXSA9IDB4MDA7CQkJLy8gU2V0IG5vcm1hbCBvcGVyYXRpb24KIAlyZWdzWzB4MDFdID0gMHgxODsJCQkvLyBDYXB0dXJlIG1vZGUKIAlyZWdzWzB4MDJdID0gc2NhbGVfeTsJCQkvLyBWLXNjYWxpbmcKIAlyZWdzWzB4MDNdID0gc2NhbGVfeDsJCQkvLyBILXNjYWxpbmcKLQkKLQkvLyBDYXB0dXJlIHdpbmRvdwkKKworCS8vIENhcHR1cmUgd2luZG93CiAJcmVnc1sweDA0XSA9ICh4MSAmIDB4MGZmKTsJCS8vIFgtc3RhcnQgKDggbG93IGJpdHMpCiAJcmVnc1sweDA1XSA9ICh4MSAmIDB4MzAwKT4+ODsJCS8vIFgtc3RhcnQgKDIgaGlnaCBiaXRzKQogCXJlZ3NbMHgwNl0gPSAoeTEgJiAweDBmZik7CQkvLyBZLXN0YXJ0ICg4IGxvdyBiaXRzKQpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJcmVnc1sweDBhXSA9ICh5MiAmIDB4MGZmKTsJCS8vIFktZW5kICg4IGxvdyBiaXRzKQogCiAJcmVnc1sweDBjXSA9IFc5OTY2X1NSQU1JRDsJCS8vIFNSQU0tYmFua3MgKDF4IDEyOGtiKQotCQorCiAJLy8gRW5oYW5jZW1lbnQgbGF5ZXIKIAlyZWdzWzB4MGRdID0gKGVuaF9zJiAweDAwMGZmKTsJCS8vIEVuaC4gc3RhcnQgKDAtNykKIAlyZWdzWzB4MGVdID0gKGVuaF9zJiAweDBmZjAwKT4+ODsJLy8gRW5oLiBzdGFydCAoOC0xNSkKQEAgLTUxNSw3ICs1MTUsNyBAQAogCXJlZ3NbMHgxOV0gPSAweGZmOwkJCS8vIEkvTyBwb3J0IGRpcmVjdGlvbiBjb250cm9sCiAJcmVnc1sweDFhXSA9IDB4ZmY7CQkJLy8gSS9PIHBvcnQgZGF0YSByZWdpc3RlcgogCXJlZ3NbMHgxYl0gPSAweDEwOwkJCS8vID8/PwotCQorCiAJLy8gU0FBNzExMSBjaGlwIHNldHRpbmdzCiAJc2FhNzExMV9yZWdzWzB4MGFdID0gY2FtLT5icmlnaHRuZXNzOwogCXNhYTcxMTFfcmVnc1sweDBiXSA9IGNhbS0+Y29udHJhc3Q7CkBAIC01NTEsNyArNTUxLDcgQEAKIAkJY2FtLT5pMmNfc3RhdGUgfD0gVzk5NjZfSTJDX1dfREFUQTsKIAllbHNlCiAJCWNhbS0+aTJjX3N0YXRlICY9IH5XOTk2Nl9JMkNfV19EQVRBOwotCQorCiAJdzk5NjZfd1JlZyhjYW0sIDB4MTgsIGNhbS0+aTJjX3N0YXRlKTsKIAl1ZGVsYXkoNSk7CiB9CkBAIC01NzcsNyArNTc3LDcgQEAKIAogCXc5OTY2X3dSZWcoY2FtLCAweDE4LCBjYW0tPmkyY19zdGF0ZSk7CiAJdWRlbGF5KDUpOwotCQorCiAJLy8gd2UgZ28gdG8gaGlnaCwgd2UgYWxzbyBleHBlY3QgdGhlIHBlcmlwaGVyYWwgdG8gYWNrLgogCWlmIChzdGF0ZSkgewogCQl0aW1lb3V0ID0gamlmZmllcyArIDEwMDsKQEAgLTYwNywxNiArNjA3LDE2IEBACiAJCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAoZGF0YSA+PiBpKSAmIDB4MDEpOwogCiAJCWlmICh3OTk2Nl9pMmNfc2V0c2NsKGNhbSwgMSkgPT0gLTEpCi0JCQlyZXR1cm4gLTE7CQkJCisJCQlyZXR1cm4gLTE7CiAJCXc5OTY2X2kyY19zZXRzY2woY2FtLCAwKTsKIAl9CiAKIAl3OTk2Nl9pMmNfc2V0c2RhKGNhbSwgMSk7Ci0JCisKIAlpZiAodzk5NjZfaTJjX3NldHNjbChjYW0sIDEpID09IC0xKQogCQlyZXR1cm4gLTE7CiAJdzk5NjZfaTJjX3NldHNjbChjYW0sIDApOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyNiw4ICs2MjYsOCBAQAogc3RhdGljIGludCB3OTk2Nl9pMmNfcmJ5dGUoc3RydWN0IHc5OTY2X2RldiogY2FtKQogewogCXVuc2lnbmVkIGNoYXIgZGF0YSA9IDB4MDA7Ci0JaW50IGk7CQotCQorCWludCBpOworCiAJdzk5NjZfaTJjX3NldHNkYShjYW0sIDEpOwogCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKQEAgLTYzNyw3ICs2MzcsNyBAQAogCQlkYXRhID0gZGF0YSA8PCAxOwogCQlpZiAodzk5NjZfaTJjX2dldHNkYShjYW0pKQogCQkJZGF0YSB8PSAweDAxOwotCQkKKwogCQl3OTk2Nl9pMmNfc2V0c2NsKGNhbSwgMCk7CiAJfQogCXJldHVybiBkYXRhOwpAQCAtNjczLDExICs2NzMsMTEgQEAKIAkJcmV0dXJuIC0xOwogCiAJdzk5NjZfaTJjX3NldHNkYShjYW0sIDApOwotCQorCiAJaWYgKHc5OTY2X2kyY19zZXRzY2woY2FtLCAxKSA9PSAtMSkKIAkJcmV0dXJuIC0xOwogCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAxKTsKLQkKKwogCXJldHVybiBkYXRhOwogfQogI2VuZGlmCkBAIC02OTksNyArNjk5LDcgQEAKIAl3OTk2Nl9pMmNfc2V0c2RhKGNhbSwgMCk7CiAJaWYgKHc5OTY2X2kyY19zZXRzY2woY2FtLCAxKSA9PSAtMSkKIAkJcmV0dXJuIC0xOwotCQkKKwogCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAxKTsKIAogCXJldHVybiAwOwpAQCAtNzE0LDcgKzcxNCw3IEBACiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CiAJc3RydWN0IHc5OTY2X2RldiAqY2FtID0gdmRldi0+cHJpdjsKLQkKKwogCXN3aXRjaChjbWQpCiAJewogCWNhc2UgVklESU9DR0NBUDoKQEAgLTc5MCwxNCArNzkwLDE0IEBACiAJCXN0cnVjdCB2aWRlb19waWN0dXJlICp2cGljID0gYXJnOwogCQlpZiAodnBpYy0+ZGVwdGggIT0gMTYgfHwgdnBpYy0+cGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1lVVjQyMikKIAkJCXJldHVybiAtRUlOVkFMOwotCQkJCisKIAkJY2FtLT5icmlnaHRuZXNzID0gdnBpYy0+YnJpZ2h0bmVzcyA+PiA4OwogCQljYW0tPmh1ZSA9ICh2cGljLT5odWUgPj4gOCkgLSAxMjg7CiAJCWNhbS0+Y29sb3IgPSB2cGljLT5jb2xvdXIgPj4gOTsKIAkJY2FtLT5jb250cmFzdCA9IHZwaWMtPmNvbnRyYXN0ID4+IDk7CiAKIAkJdzk5NjZfcGRldl9jbGFpbShjYW0pOwotCQkKKwogCQlpZiAoCiAJCQl3OTk2Nl93UmVnX2kyYyhjYW0sIDB4MGEsIGNhbS0+YnJpZ2h0bmVzcykgPT0gLTEgfHwKIAkJCXc5OTY2X3dSZWdfaTJjKGNhbSwgMHgwYiwgY2FtLT5jb250cmFzdCkgPT0gLTEgfHwKQEAgLTgwNyw3ICs4MDcsNyBAQAogCQkJdzk5NjZfcGRldl9yZWxlYXNlKGNhbSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQkKKwogCQl3OTk2Nl9wZGV2X3JlbGVhc2UoY2FtKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODE1LDEzICs4MTUsMTMgQEAKIAl7CiAJCWludCByZXQ7CiAJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3aW4gPSBhcmc7Ci0JCQorCiAJCWlmICh2d2luLT5mbGFncyAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICh2d2luLT5jbGlwY291bnQgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAodndpbi0+d2lkdGggPCAyIHx8IHZ3aW4tPndpZHRoID4gVzk5NjZfV05EX01BWF9XKQotCQkJcmV0dXJuIC1FSU5WQUw7CQkKKwkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAodndpbi0+aGVpZ2h0IDwgMSB8fCB2d2luLT5oZWlnaHQgPiBXOTk2Nl9XTkRfTUFYX0gpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODI5LDEyICs4MjksMTIgQEAKIAkJdzk5NjZfcGRldl9jbGFpbShjYW0pOwogCQlyZXQgPSB3OTk2Nl9zZXR1cChjYW0sIDAsIDAsIDEwMjMsIDEwMjMsIHZ3aW4tPndpZHRoLCB2d2luLT5oZWlnaHQpOwogCQl3OTk2Nl9wZGV2X3JlbGVhc2UoY2FtKTsKLQkJCisKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlEUFJJTlRGKCJWSURJT0NTV0lOOiB3OTk2Nl9zZXR1cCgpIGZhaWxlZC5cbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJCisKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgVklESU9DR1dJTjoKQEAgLTg0Niw3ICs4NDYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJLy8gVW5pbXBsZW1lbnRlZAotCWNhc2UgVklESU9DQ0FQVFVSRToJCisJY2FzZSBWSURJT0NDQVBUVVJFOgogCWNhc2UgVklESU9DR0ZCVUY6CiAJY2FzZSBWSURJT0NTRkJVRjoKIAljYXNlIFZJRElPQ0tFWToKQEAgLTg3NywxNyArODc3LDE3IEBACiAJdW5zaWduZWQgY2hhciBfX3VzZXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciBfX3VzZXIgKilidWY7CiAJdW5zaWduZWQgbG9uZyBkbGVmdCA9IGNvdW50OwogCXVuc2lnbmVkIGNoYXIgKnRidWY7Ci0JCisKIAkvLyBXaHkgd291bGQgYW55b25lIHdhbnQgbW9yZSB0aGFuIHRoaXM/PwogCWlmIChjb3VudCA+IGNhbS0+d2lkdGggKiBjYW0tPmhlaWdodCAqIDIpCiAJCXJldHVybiAtRUlOVkFMOwotCQorCiAJdzk5NjZfcGRldl9jbGFpbShjYW0pOwogCXc5OTY2X3dSZWcoY2FtLCAweDAwLCAweDAyKTsJLy8gUmVzZXQgRUNQLUZJRk8gYnVmZmVyCiAJdzk5NjZfd1JlZyhjYW0sIDB4MDAsIDB4MDApOwkvLyBSZXR1cm4gdG8gbm9ybWFsIG9wZXJhdGlvbgogCXc5OTY2X3dSZWcoY2FtLCAweDAxLCAweDk4KTsJLy8gRW5hYmxlIGNhcHR1cmUKIAotCS8vIHdyaXRlIHNwZWNpYWwgY2FwdHVyZS1hZGRyIGFuZCBuZWdvdGlhdGUgaW50byBkYXRhIHRyYW5zZmVyCQorCS8vIHdyaXRlIHNwZWNpYWwgY2FwdHVyZS1hZGRyIGFuZCBuZWdvdGlhdGUgaW50byBkYXRhIHRyYW5zZmVyCiAJaWYgKAogCQkocGFycG9ydF9uZWdvdGlhdGUoY2FtLT5wcG9ydCwgY2FtLT5wcG1vZGV8SUVFRTEyODRfQUREUikgIT0gMAkpfHwKIAkJKHBhcnBvcnRfd3JpdGUoY2FtLT5wcG9ydCwgJmFkZHIsIDEpICE9IDEJCQkJCQkpfHwKQEAgLTkwNiw3ICs5MDYsNyBAQAogCXdoaWxlKGRsZWZ0ID4gMCkKIAl7CiAJCXVuc2lnbmVkIGxvbmcgdHNpemUgPSAoZGxlZnQgPiBXOTk2Nl9SQlVGRkVSKSA/IFc5OTY2X1JCVUZGRVIgOiBkbGVmdDsKLQkKKwogCQlpZiAocGFycG9ydF9yZWFkKGNhbS0+cHBvcnQsIHRidWYsIHRzaXplKSA8IHRzaXplKSB7CiAJCQljb3VudCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKQEAgLTkzMyw3ICs5MzMsNyBAQAogc3RhdGljIHZvaWQgdzk5NjZfYXR0YWNoKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQogewogCWludCBpOwotCQorCiAJZm9yIChpID0gMDsgaSA8IFc5OTY2X01BWENBTVM7IGkrKykKIAl7CiAJCWlmICh3OTk2Nl9jYW1zW2ldLmRldl9zdGF0ZSAhPSAwKQkvLyBDYW0gaXMgYWxyZWFkeSBhc3NpZ25lZApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKc2ltaWxhcml0eSBpbmRleCA3OCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCA5OTM3ZmM2Li4yMGYyMTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMKQEAgLTQ3LDYgKzQ3LDEzIEBACiAjaW5jbHVkZSAidzk5NjhjZi5oIgogI2luY2x1ZGUgInc5OTY4Y2ZfZGVjb2Rlci5oIgogCitzdGF0aWMgc3RydWN0IHc5OTY4Y2ZfdnBwX3QqIHc5OTY4Y2ZfdnBwOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHc5OTY4Y2ZfdnBwbW9kX3dhaXQpOworCitzdGF0aWMgTElTVF9IRUFEKHc5OTY4Y2ZfZGV2X2xpc3QpOyAvKiBoZWFkIG9mIFY0TCByZWdpc3RlcmVkIGNhbWVyYXMgbGlzdCAqLworc3RhdGljIERFRklORV9NVVRFWCh3OTk2OGNmX2Rldmxpc3RfbXV0ZXgpOyAvKiBzZW1hcGhvcmUgZm9yIGxpc3QgdHJhdmVyc2FsICovCisKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHc5OTY4Y2ZfZGlzY29ubmVjdCk7IC8qIHByZXZlbnQgcmFjZXMgd2l0aCBvcGVuKCkgKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjQsMzkgKzcxLDM5IEBACiBzdGF0aWMgaW50IG92bW9kX2xvYWQgPSBXOTk2OENGX09WTU9EX0xPQUQ7CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2ltY2FtcyA9IFc5OTY4Q0ZfU0lNQ0FNUzsKIHN0YXRpYyBzaG9ydCB2aWRlb19ucltdPXtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IC0xfTsgLyotMT1maXJzdCBmcmVlKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3NpemVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfUEFDS0VUX1NJWkV9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heF9idWZmZXJzW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfQlVGRkVSU307Ci1zdGF0aWMgaW50IGRvdWJsZV9idWZmZXJbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9ET1VCTEVfQlVGRkVSfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3NpemVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9CisJCQkJICAgICBXOTk2OENGX1BBQ0tFVF9TSVpFfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXhfYnVmZmVyc1tdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KKwkJCQkgICAgICAgVzk5NjhDRl9CVUZGRVJTfTsKK3N0YXRpYyBpbnQgZG91YmxlX2J1ZmZlcltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KKwkJCSAgICAgIFc5OTY4Q0ZfRE9VQkxFX0JVRkZFUn07CiBzdGF0aWMgaW50IGNsYW1waW5nW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0NMQU1QSU5HfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBmaWx0ZXJfdHlwZVtdPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9GSUxURVJfVFlQRX07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZmlsdGVyX3R5cGVbXT0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KKwkJCQkgICAgICBXOTk2OENGX0ZJTFRFUl9UWVBFfTsKIHN0YXRpYyBpbnQgbGFyZ2V2aWV3W109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfTEFSR0VWSUVXfTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWNvbXByZXNzaW9uW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9ERUNPTVBSRVNTSU9OfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWNvbXByZXNzaW9uW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPQorCQkJCQkgVzk5NjhDRl9ERUNPTVBSRVNTSU9OfTsKIHN0YXRpYyBpbnQgdXBzY2FsaW5nW109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfVVBTQ0FMSU5HfTsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBmb3JjZV9wYWxldHRlW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAwfTsKIHN0YXRpYyBpbnQgZm9yY2VfcmdiW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0ZPUkNFX1JHQn07CiBzdGF0aWMgaW50IGF1dG9icmlnaHRbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQVVUT0JSSUdIVH07CiBzdGF0aWMgaW50IGF1dG9leHBbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQVVUT0VYUH07Ci1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbGlnaHRmcmVxW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0xJR0hURlJFUX07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbGlnaHRmcmVxW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPQorCQkJCSAgICAgVzk5NjhDRl9MSUdIVEZSRVF9Owogc3RhdGljIGludCBiYW5kaW5nZmlsdGVyW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0JBTkRJTkdGSUxURVJ9OworCQkJICAgICAgVzk5NjhDRl9CQU5ESU5HRklMVEVSfTsKIHN0YXRpYyBzaG9ydCBjbG9ja2RpdltdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9DTE9DS0RJVn07CiBzdGF0aWMgaW50IGJhY2tsaWdodFtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9CQUNLTElHSFR9Owogc3RhdGljIGludCBtaXJyb3JbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfTUlSUk9SfTsKIHN0YXRpYyBpbnQgbW9ub2Nocm9tZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdPVc5OTY4Q0ZfTU9OT0NIUk9NRX07Ci1zdGF0aWMgdW5zaWduZWQgaW50IGJyaWdodG5lc3NbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9CUklHSFRORVNTfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzc1tdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KKwkJCQkgICAgVzk5NjhDRl9CUklHSFRORVNTfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaHVlW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0hVRX07CiBzdGF0aWMgdW5zaWduZWQgaW50IGNvbG91cltdPXtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQ09MT1VSfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgY29udHJhc3RbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfQ09OVFJBU1R9Owotc3RhdGljIHVuc2lnbmVkIGludCB3aGl0ZW5lc3NbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX1dISVRFTkVTU307CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnRyYXN0W10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPQorCQkJCSAgVzk5NjhDRl9DT05UUkFTVH07CitzdGF0aWMgdW5zaWduZWQgaW50IHdoaXRlbmVzc1tdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KKwkJCQkgICBXOTk2OENGX1dISVRFTkVTU307CiAjaWZkZWYgVzk5NjhDRl9ERUJVRwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlYnVnID0gVzk5NjhDRl9ERUJVR19MRVZFTDsKIHN0YXRpYyBpbnQgc3BlY2lmaWNfZGVidWcgPSBXOTk2OENGX1NQRUNJRklDX0RFQlVHOwpAQCAtMTM4LDI1MSArMTQ1LDI1MSBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS01PRAotTU9EVUxFX1BBUk1fREVTQyhvdm1vZF9sb2FkLCAKLSAgICAgICAgICAgICAgICAgIlxuPDB8MT4gQXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nLiIKLSAgICAgICAgICAgICAgICAgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKLSAgICAgICAgICAgICAgICAgIlxuSWYgZW5hYmxlZCwnaW5zbW9kJyBzZWFyY2hlcyBmb3IgdGhlIHJlcXVpcmVkICdvdmNhbWNoaXAnIgotICAgICAgICAgICAgICAgICAiXG5tb2R1bGUgaW4gdGhlIHN5c3RlbSwgYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLCBhbmQiCi0gICAgICAgICAgICAgICAgICJcbmF0dGVtcHRzIHRvIGxvYWQgdGhhdCBtb2R1bGUgYXV0b21hdGljYWxseS4gVGhpcyBhY3Rpb24gaXMiCi0gICAgICAgICAgICAgICAgICJcbnBlcmZvcm1lZCBvbmNlIGFzIHNvb24gYXMgdGhlICd3OTk2OGNmJyBtb2R1bGUgaXMgbG9hZGVkIgotICAgICAgICAgICAgICAgICAiXG5pbnRvIG1lbW9yeS4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX09WTU9EX0xPQUQpIi4iCi0gICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhvdm1vZF9sb2FkLAorCQkgIlxuPDB8MT4gQXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nLiIKKwkJICJcbjAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCisJCSAiXG5JZiBlbmFibGVkLCdpbnNtb2QnIHNlYXJjaGVzIGZvciB0aGUgcmVxdWlyZWQgJ292Y2FtY2hpcCciCisJCSAiXG5tb2R1bGUgaW4gdGhlIHN5c3RlbSwgYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLCBhbmQiCisJCSAiXG5hdHRlbXB0cyB0byBsb2FkIHRoYXQgbW9kdWxlIGF1dG9tYXRpY2FsbHkuIFRoaXMgYWN0aW9uIGlzIgorCQkgIlxucGVyZm9ybWVkIG9uY2UgYXMgc29vbiBhcyB0aGUgJ3c5OTY4Y2YnIG1vZHVsZSBpcyBsb2FkZWQiCisJCSAiXG5pbnRvIG1lbW9yeS4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9PVk1PRF9MT0FEKSIuIgorCQkgIlxuIik7CiAjZW5kaWYKLU1PRFVMRV9QQVJNX0RFU0Moc2ltY2FtcywgCi0gICAgICAgICAgICAgICAgICJcbjxuPiBOdW1iZXIgb2YgY2FtZXJhcyBhbGxvd2VkIHRvIHN0cmVhbSBzaW11bHRhbmVvdXNseS4iCi0gICAgICAgICAgICAgICAgICJcbm4gbWF5IHZhcnkgZnJvbSAwIHRvICIKLSAgICAgICAgICAgICAgICAgX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUFYX0RFVklDRVMpIi4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1NJTUNBTVMpIi4iCi0gICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhzaW1jYW1zLAorCQkgIlxuPG4+IE51bWJlciBvZiBjYW1lcmFzIGFsbG93ZWQgdG8gc3RyZWFtIHNpbXVsdGFuZW91c2x5LiIKKwkJICJcbm4gbWF5IHZhcnkgZnJvbSAwIHRvICIKKwkJIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX01BWF9ERVZJQ0VTKSIuIgorCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfU0lNQ0FNUykiLiIKKwkJICJcbiIpOwogTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwKLSAgICAgICAgICAgICAgICAgIlxuPC0xfG5bLC4uLl0+IFNwZWNpZnkgVjRMIG1pbm9yIG1vZGUgbnVtYmVyLiIKLSAgICAgICAgICAgICAgICAgIlxuIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlIChkZWZhdWx0KSIKLSAgICAgICAgICAgICAgICAgIlxuICBuID0gdXNlIG1pbm9yIG51bWJlciBuIChpbnRlZ2VyID49IDApIgotICAgICAgICAgICAgICAgICAiXG5Zb3UgY2FuIHNwZWNpZnkgdXAgdG8gIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX01BWF9ERVZJQ0VTKQotICAgICAgICAgICAgICAgICAiIGNhbWVyYXMgdGhpcyB3YXkuIgotICAgICAgICAgICAgICAgICAiXG5Gb3IgZXhhbXBsZToiCi0gICAgICAgICAgICAgICAgICJcbnZpZGVvX25yPS0xLDIsLTEgd291bGQgYXNzaWduIG1pbm9yIG51bWJlciAyIHRvIgotICAgICAgICAgICAgICAgICAiXG50aGUgc2Vjb25kIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCIKLSAgICAgICAgICAgICAgICAgIlxub25lIGFuZCBmb3IgZXZlcnkgb3RoZXIgY2FtZXJhLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48LTF8blssLi4uXT4gU3BlY2lmeSBWNEwgbWlub3IgbW9kZSBudW1iZXIuIgorCQkgIlxuIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlIChkZWZhdWx0KSIKKwkJICJcbiAgbiA9IHVzZSBtaW5vciBudW1iZXIgbiAoaW50ZWdlciA+PSAwKSIKKwkJICJcbllvdSBjYW4gc3BlY2lmeSB1cCB0byAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUFYX0RFVklDRVMpCisJCSAiIGNhbWVyYXMgdGhpcyB3YXkuIgorCQkgIlxuRm9yIGV4YW1wbGU6IgorCQkgIlxudmlkZW9fbnI9LTEsMiwtMSB3b3VsZCBhc3NpZ24gbWlub3IgbnVtYmVyIDIgdG8iCisJCSAiXG50aGUgc2Vjb25kIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCIKKwkJICJcbm9uZSBhbmQgZm9yIGV2ZXJ5IG90aGVyIGNhbWVyYS4iCisJCSAiXG4iKTsKIE1PRFVMRV9QQVJNX0RFU0MocGFja2V0X3NpemUsCi0gICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTcGVjaWZ5IHRoZSBtYXhpbXVtIGRhdGEgcGF5bG9hZCIKLSAgICAgICAgICAgICAgICAgIlxuc2l6ZSBpbiBieXRlcyBmb3IgYWx0ZXJuYXRlIHNldHRpbmdzLCBmb3IgZWFjaCBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG5uIGlzIHNjYWxlZCBiZXR3ZWVuIDYzIGFuZCAxMDIzICIKLSAgICAgICAgICAgICAgICAgIihkZWZhdWx0IGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9QQUNLRVRfU0laRSkiKS4iCi0gICAgICAgICAgICAgICAgICJcbiIpOworCQkgIlxuPG5bLC4uLl0+IFNwZWNpZnkgdGhlIG1heGltdW0gZGF0YSBwYXlsb2FkIgorCQkgIlxuc2l6ZSBpbiBieXRlcyBmb3IgYWx0ZXJuYXRlIHNldHRpbmdzLCBmb3IgZWFjaCBkZXZpY2UuIgorCQkgIlxubiBpcyBzY2FsZWQgYmV0d2VlbiA2MyBhbmQgMTAyMyAiCisJCSAiKGRlZmF1bHQgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1BBQ0tFVF9TSVpFKSIpLiIKKwkJICJcbiIpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfYnVmZmVycywKLSAgICAgICAgICAgICAgICAgIlxuPG5bLC4uLl0+IEZvciBhZHZhbmNlZCB1c2Vycy4iCi0gICAgICAgICAgICAgICAgICJcblNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZpZGVvIGZyYW1lIGJ1ZmZlcnMiCi0gICAgICAgICAgICAgICAgICJcbnRvIGFsbG9jYXRlIGZvciBlYWNoIGRldmljZSwgZnJvbSAyIHRvICIKLSAgICAgICAgICAgICAgICAgX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUFYX0JVRkZFUlMpCi0gICAgICAgICAgICAgICAgICIuIChkZWZhdWx0IGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9CVUZGRVJTKSIpLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRvdWJsZV9idWZmZXIsIAotICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiAiCi0gICAgICAgICAgICAgICAgICJIYXJkd2FyZSBkb3VibGUgYnVmZmVyaW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuIgotICAgICAgICAgICAgICAgICAiXG5JdCBzaG91bGQgYmUgZW5hYmxlZCBpZiB5b3Ugd2FudCBzbW9vdGggdmlkZW8gb3V0cHV0OiBpZiIKLSAgICAgICAgICAgICAgICAgIlxueW91IG9idGFpbiBvdXQgb2Ygc3luYy4gdmlkZW8sIGRpc2FibGUgaXQsIG9yIHRyeSB0byIKLSAgICAgICAgICAgICAgICAgIlxuZGVjcmVhc2UgdGhlICdjbG9ja2RpdicgbW9kdWxlIHBhcmFtZXRlciB2YWx1ZS4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0RPVUJMRV9CVUZGRVIpCi0gICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0gICAgICAgICAgICAgICAgICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhjbGFtcGluZywgCi0gICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IFZpZGVvIGRhdGEgY2xhbXBpbmc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0NMQU1QSU5HKQotICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoZmlsdGVyX3R5cGUsIAotICAgICAgICAgICAgICAgICAiXG48MHwxfDJbLC4uLl0+IFZpZGVvIGZpbHRlciB0eXBlLiIKLSAgICAgICAgICAgICAgICAgIlxuMCBub25lLCAxICgxLTItMSkgMy10YXAgZmlsdGVyLCAiCi0gICAgICAgICAgICAgICAgICIyICgyLTMtNi0zLTIpIDUtdGFwIGZpbHRlci4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0ZJTFRFUl9UWVBFKQotICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG5UaGUgZmlsdGVyIGlzIHVzZWQgdG8gcmVkdWNlIG5vaXNlIGFuZCBhbGlhc2luZyBhcnRpZmFjdHMiCi0gICAgICAgICAgICAgICAgICJcbnByb2R1Y2VkIGJ5IHRoZSBDQ0Qgb3IgQ01PUyBpbWFnZSBzZW5zb3IsIGFuZCB0aGUgc2NhbGluZyIKLSAgICAgICAgICAgICAgICAgIiBwcm9jZXNzLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGxhcmdldmlldywgCi0gICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IExhcmdlIHZpZXc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0xBUkdFVklFVykKLSAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHVwc2NhbGluZywgCi0gICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IFNvZnR3YXJlIHNjYWxpbmcgKGZvciBub24tY29tcHJlc3NlZCB2aWRlbyk6IgotICAgICAgICAgICAgICAgICAiXG4wIGRpc2FibGVkLCAxIGVuYWJsZWQuIgotICAgICAgICAgICAgICAgICAiXG5EaXNhYmxlIGl0IGlmIHlvdSBoYXZlIGEgc2xvdyBDUFUgb3IgeW91IGRvbid0IGhhdmUiCi0gICAgICAgICAgICAgICAgICIgZW5vdWdoIG1lbW9yeS4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1VQU0NBTElORykKLSAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLSAgICAgICAgICAgICAgICAgIlxuSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgdGhpcyBwYXJhbWV0ZXIgaXMiCi0gICAgICAgICAgICAgICAgICIgc2V0IHRvIDAuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKKwkJICJcbjxuWywuLi5dPiBGb3IgYWR2YW5jZWQgdXNlcnMuIgorCQkgIlxuU3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdmlkZW8gZnJhbWUgYnVmZmVycyIKKwkJICJcbnRvIGFsbG9jYXRlIGZvciBlYWNoIGRldmljZSwgZnJvbSAyIHRvICIKKwkJIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX01BWF9CVUZGRVJTKQorCQkgIi4gKGRlZmF1bHQgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JVRkZFUlMpIikuIgorCQkgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRvdWJsZV9idWZmZXIsCisJCSAiXG48MHwxWywuLi5dPiAiCisJCSAiSGFyZHdhcmUgZG91YmxlIGJ1ZmZlcmluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKwkJICJcbkl0IHNob3VsZCBiZSBlbmFibGVkIGlmIHlvdSB3YW50IHNtb290aCB2aWRlbyBvdXRwdXQ6IGlmIgorCQkgIlxueW91IG9idGFpbiBvdXQgb2Ygc3luYy4gdmlkZW8sIGRpc2FibGUgaXQsIG9yIHRyeSB0byIKKwkJICJcbmRlY3JlYXNlIHRoZSAnY2xvY2tkaXYnIG1vZHVsZSBwYXJhbWV0ZXIgdmFsdWUuIgorCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfRE9VQkxFX0JVRkZFUikKKwkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCisJCSAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xhbXBpbmcsCisJCSAiXG48MHwxWywuLi5dPiBWaWRlbyBkYXRhIGNsYW1waW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuIgorCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQ0xBTVBJTkcpCisJCSAiIGZvciBldmVyeSBkZXZpY2UuIgorCQkgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGZpbHRlcl90eXBlLAorCQkgIlxuPDB8MXwyWywuLi5dPiBWaWRlbyBmaWx0ZXIgdHlwZS4iCisJCSAiXG4wIG5vbmUsIDEgKDEtMi0xKSAzLXRhcCBmaWx0ZXIsICIKKwkJICIyICgyLTMtNi0zLTIpIDUtdGFwIGZpbHRlci4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9GSUxURVJfVFlQRSkKKwkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCisJCSAiXG5UaGUgZmlsdGVyIGlzIHVzZWQgdG8gcmVkdWNlIG5vaXNlIGFuZCBhbGlhc2luZyBhcnRpZmFjdHMiCisJCSAiXG5wcm9kdWNlZCBieSB0aGUgQ0NEIG9yIENNT1MgaW1hZ2Ugc2Vuc29yLCBhbmQgdGhlIHNjYWxpbmciCisJCSAiIHByb2Nlc3MuIgorCQkgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGxhcmdldmlldywKKwkJICJcbjwwfDFbLC4uLl0+IExhcmdlIHZpZXc6IDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9MQVJHRVZJRVcpCisJCSAiIGZvciBldmVyeSBkZXZpY2UuIgorCQkgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKHVwc2NhbGluZywKKwkJICJcbjwwfDFbLC4uLl0+IFNvZnR3YXJlIHNjYWxpbmcgKGZvciBub24tY29tcHJlc3NlZCB2aWRlbyk6IgorCQkgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKwkJICJcbkRpc2FibGUgaXQgaWYgeW91IGhhdmUgYSBzbG93IENQVSBvciB5b3UgZG9uJ3QgaGF2ZSIKKwkJICIgZW5vdWdoIG1lbW9yeS4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9VUFNDQUxJTkcpCisJCSAiIGZvciBldmVyeSBkZXZpY2UuIgorCQkgIlxuSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgdGhpcyBwYXJhbWV0ZXIgaXMiCisJCSAiIHNldCB0byAwLiIKKwkJICJcbiIpOwogTU9EVUxFX1BBUk1fREVTQyhkZWNvbXByZXNzaW9uLAotICAgICAgICAgICAgICAgICAiXG48MHwxfDJbLC4uLl0+IFNvZnR3YXJlIHZpZGVvIGRlY29tcHJlc3Npb246IgotICAgICAgICAgICAgICAgICAiXG4tIDAgZGlzYWJsZXMgZGVjb21wcmVzc2lvbiAoZG9lc24ndCBhbGxvdyBmb3JtYXRzIG5lZWRpbmciCi0gICAgICAgICAgICAgICAgICIgZGVjb21wcmVzc2lvbikiCi0gICAgICAgICAgICAgICAgICJcbi0gMSBmb3JjZXMgZGVjb21wcmVzc2lvbiAoYWxsb3dzIGZvcm1hdHMgbmVlZGluZyIKLSAgICAgICAgICAgICAgICAgIiBkZWNvbXByZXNzaW9uIG9ubHkpOyIKLSAgICAgICAgICAgICAgICAgIlxuLSAyIGFsbG93cyBhbnkgcGVybWl0dGVkIGZvcm1hdHMuIgotICAgICAgICAgICAgICAgICAiXG5Gb3JtYXRzIHN1cHBvcnRpbmcgY29tcHJlc3NlZCB2aWRlbyBhcmUgWVVWNDIyUCBhbmQiCi0gICAgICAgICAgICAgICAgICIgWVVWNDIwUC9ZVVY0MjAgIgotICAgICAgICAgICAgICAgICAiXG5pbiBhbnkgcmVzb2x1dGlvbnMgd2hlcmUgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSAiCi0gICAgICAgICAgICAgICAgICJhIG11bHRpcGxlIG9mIDE2LiIKLSAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfREVDT01QUkVTU0lPTikKLSAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLSAgICAgICAgICAgICAgICAgIlxuSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgZm9yY2luZyBkZWNvbXByZXNzaW9uIGlzICIKLSAgICAgICAgICAgICAgICAgIlxubm90IGFsbG93ZWQ7IGluIHRoaXMgY2FzZSB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gMi4iCi0gICAgICAgICAgICAgICAgICJcbiIpOworCQkgIlxuPDB8MXwyWywuLi5dPiBTb2Z0d2FyZSB2aWRlbyBkZWNvbXByZXNzaW9uOiIKKwkJICJcbi0gMCBkaXNhYmxlcyBkZWNvbXByZXNzaW9uIChkb2Vzbid0IGFsbG93IGZvcm1hdHMgbmVlZGluZyIKKwkJICIgZGVjb21wcmVzc2lvbikiCisJCSAiXG4tIDEgZm9yY2VzIGRlY29tcHJlc3Npb24gKGFsbG93cyBmb3JtYXRzIG5lZWRpbmciCisJCSAiIGRlY29tcHJlc3Npb24gb25seSk7IgorCQkgIlxuLSAyIGFsbG93cyBhbnkgcGVybWl0dGVkIGZvcm1hdHMuIgorCQkgIlxuRm9ybWF0cyBzdXBwb3J0aW5nIGNvbXByZXNzZWQgdmlkZW8gYXJlIFlVVjQyMlAgYW5kIgorCQkgIiBZVVY0MjBQL1lVVjQyMCAiCisJCSAiXG5pbiBhbnkgcmVzb2x1dGlvbnMgd2hlcmUgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSAiCisJCSAiYSBtdWx0aXBsZSBvZiAxNi4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ERUNPTVBSRVNTSU9OKQorCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKwkJICJcbklmICd3OTk2OGNmLXZwcCcgaXMgbm90IHByZXNlbnQsIGZvcmNpbmcgZGVjb21wcmVzc2lvbiBpcyAiCisJCSAiXG5ub3QgYWxsb3dlZDsgaW4gdGhpcyBjYXNlIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byAyLiIKKwkJICJcbiIpOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9wYWxldHRlLAotICAgICAgICAgICAgICAgICAiXG48MCIKLSAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1VZVlkpCi0gICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjApCi0gICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjJQKQotICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfWVVWNDIwUCkKLSAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVWVYpCi0gICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjIpCi0gICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9HUkVZKQotICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfUkdCNTU1KQotICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfUkdCNTY1KQotICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfUkdCMjQpCi0gICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0IzMikKLSAgICAgICAgICAgICAgICAgIlssLi4uXT4iCi0gICAgICAgICAgICAgICAgICIgRm9yY2UgcGljdHVyZSBwYWxldHRlLiIKLSAgICAgICAgICAgICAgICAgIlxuSW4gb3JkZXI6IgotICAgICAgICAgICAgICAgICAiXG4tIDAgYWxsb3dzIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6IgotICAgICAgICAgICAgICAgICAiXG4tIFVZVlkgICAgMTYgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGRpc2FibGVkIgotICAgICAgICAgICAgICAgICAiXG4tIFlVVjQyMCAgMTIgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQiCi0gICAgICAgICAgICAgICAgICJcbi0gWVVWNDIyUCAxNiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZCIKLSAgICAgICAgICAgICAgICAgIlxuLSBZVVY0MjBQIDEyIGJwcCAtIE9yaWdpbmFsIHZpZGVvLCBjb21wcmVzc2lvbiBlbmFibGVkIgotICAgICAgICAgICAgICAgICAiXG4tIFlVVlkgICAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCi0gICAgICAgICAgICAgICAgICJcbi0gWVVWNDIyICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLSAgICAgICAgICAgICAgICAgIlxuLSBHUkVZICAgICA4IGJwcCAtIFNvZnR3YXJlIGNvbnZlcnNpb24gZnJvbSBVWVZZIgotICAgICAgICAgICAgICAgICAiXG4tIFJHQjU1NSAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCi0gICAgICAgICAgICAgICAgICJcbi0gUkdCNTY1ICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKLSAgICAgICAgICAgICAgICAgIlxuLSBSR0IyNCAgIDI0IGJwcCAtIFNvZnR3YXJlIGNvbnZlcnNpb24gZnJvbSBVWVZZIgotICAgICAgICAgICAgICAgICAiXG4tIFJHQjMyICAgMzIgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCi0gICAgICAgICAgICAgICAgICJcbldoZW4gbm90IDAsIHRoaXMgcGFyYW1ldGVyIHdpbGwgb3ZlcnJpZGUgJ2RlY29tcHJlc3Npb24nLiIKLSAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAwIGZvciBldmVyeSBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG5Jbml0aWFsIHBhbGV0dGUgaXMgIgotICAgICAgICAgICAgICAgICBfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9PTikiLiIKLSAgICAgICAgICAgICAgICAgIlxuSWYgJ3c5OTY4Y2YtdnBwJyBpcyBub3QgcHJlc2VudCwgdGhpcyBwYXJhbWV0ZXIgaXMiCi0gICAgICAgICAgICAgICAgICIgc2V0IHRvIDkgKFVZVlkpLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3JnYiwgCi0gICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IFJlYWQgUkdCIHZpZGVvIGRhdGEgaW5zdGVhZCBvZiBCR1I6IgotICAgICAgICAgICAgICAgICAiXG4gMSA9IHVzZSBSR0IgY29tcG9uZW50IG9yZGVyaW5nLiIKLSAgICAgICAgICAgICAgICAgIlxuIDAgPSB1c2UgQkdSIGNvbXBvbmVudCBvcmRlcmluZy4iCi0gICAgICAgICAgICAgICAgICJcblRoaXMgcGFyYW1ldGVyIGhhcyBlZmZlY3Qgd2hlbiB1c2luZyBSR0JYIHBhbGV0dGVzIG9ubHkuIgotICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9GT1JDRV9SR0IpCi0gICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0gICAgICAgICAgICAgICAgICJcbiIpOworCQkgIlxuPDAiCisJCSAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfVVlWWSkKKwkJICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjApCisJCSAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfWVVWNDIyUCkKKwkJICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjBQKQorCQkgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVWVYpCisJCSAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfWVVWNDIyKQorCQkgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX0dSRVkpCisJCSAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfUkdCNTU1KQorCQkgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1JHQjU2NSkKKwkJICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0IyNCkKKwkJICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0IzMikKKwkJICJbLC4uLl0+IgorCQkgIiBGb3JjZSBwaWN0dXJlIHBhbGV0dGUuIgorCQkgIlxuSW4gb3JkZXI6IgorCQkgIlxuLSAwIGFsbG93cyBhbnkgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzOiIKKwkJICJcbi0gVVlWWSAgICAxNiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZGlzYWJsZWQiCisJCSAiXG4tIFlVVjQyMCAgMTIgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQiCisJCSAiXG4tIFlVVjQyMlAgMTYgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQiCisJCSAiXG4tIFlVVjQyMFAgMTIgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQiCisJCSAiXG4tIFlVVlkgICAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisJCSAiXG4tIFlVVjQyMiAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisJCSAiXG4tIEdSRVkgICAgIDggYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisJCSAiXG4tIFJHQjU1NSAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisJCSAiXG4tIFJHQjU2NSAgMTYgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisJCSAiXG4tIFJHQjI0ICAgMjQgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisJCSAiXG4tIFJHQjMyICAgMzIgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisJCSAiXG5XaGVuIG5vdCAwLCB0aGlzIHBhcmFtZXRlciB3aWxsIG92ZXJyaWRlICdkZWNvbXByZXNzaW9uJy4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzIDAgZm9yIGV2ZXJ5IGRldmljZS4iCisJCSAiXG5Jbml0aWFsIHBhbGV0dGUgaXMgIgorCQkgX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfT04pIi4iCisJCSAiXG5JZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCB0aGlzIHBhcmFtZXRlciBpcyIKKwkJICIgc2V0IHRvIDkgKFVZVlkpLiIKKwkJICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9yZ2IsCisJCSAiXG48MHwxWywuLi5dPiBSZWFkIFJHQiB2aWRlbyBkYXRhIGluc3RlYWQgb2YgQkdSOiIKKwkJICJcbiAxID0gdXNlIFJHQiBjb21wb25lbnQgb3JkZXJpbmcuIgorCQkgIlxuIDAgPSB1c2UgQkdSIGNvbXBvbmVudCBvcmRlcmluZy4iCisJCSAiXG5UaGlzIHBhcmFtZXRlciBoYXMgZWZmZWN0IHdoZW4gdXNpbmcgUkdCWCBwYWxldHRlcyBvbmx5LiIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0ZPUkNFX1JHQikKKwkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCisJCSAiXG4iKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXV0b2JyaWdodCwKLSAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gSW1hZ2Ugc2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBicmlnaHRuZXNzOiIKLSAgICAgICAgICAgICAgICAgIlxuIDAgPSBubywgMSA9IHllcyIKLSAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQVVUT0JSSUdIVCkKLSAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48MHwxWywuLi5dPiBJbWFnZSBzZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGJyaWdodG5lc3M6IgorCQkgIlxuIDAgPSBubywgMSA9IHllcyIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0FVVE9CUklHSFQpCisJCSAiIGZvciBldmVyeSBkZXZpY2UuIgorCQkgIlxuIik7CiBNT0RVTEVfUEFSTV9ERVNDKGF1dG9leHAsCi0gICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IEltYWdlIHNlbnNvciBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgZXhwb3N1cmU6IgotICAgICAgICAgICAgICAgICAiXG4gMCA9IG5vLCAxID0geWVzIgotICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9BVVRPRVhQKQotICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKKwkJICJcbjwwfDFbLC4uLl0+IEltYWdlIHNlbnNvciBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgZXhwb3N1cmU6IgorCQkgIlxuIDAgPSBubywgMSA9IHllcyIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0FVVE9FWFApCisJCSAiIGZvciBldmVyeSBkZXZpY2UuIgorCQkgIlxuIik7CiBNT0RVTEVfUEFSTV9ERVNDKGxpZ2h0ZnJlcSwKLSAgICAgICAgICAgICAgICAgIlxuPDUwfDYwWywuLi5dPiBMaWdodCBmcmVxdWVuY3kgaW4gSHo6IgotICAgICAgICAgICAgICAgICAiXG4gNTAgZm9yIEV1cm9wZWFuIGFuZCBBc2lhbiBsaWdodGluZywiCi0gICAgICAgICAgICAgICAgICIgNjAgZm9yIEFtZXJpY2FuIGxpZ2h0aW5nLiIKLSAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTElHSFRGUkVRKQotICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKKwkJICJcbjw1MHw2MFssLi4uXT4gTGlnaHQgZnJlcXVlbmN5IGluIEh6OiIKKwkJICJcbiA1MCBmb3IgRXVyb3BlYW4gYW5kIEFzaWFuIGxpZ2h0aW5nLCIKKwkJICIgNjAgZm9yIEFtZXJpY2FuIGxpZ2h0aW5nLiIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0xJR0hURlJFUSkKKwkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCisJCSAiXG4iKTsKIE1PRFVMRV9QQVJNX0RFU0MoYmFuZGluZ2ZpbHRlciwKLSAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gQmFuZGluZyBmaWx0ZXIgdG8gcmVkdWNlIGVmZmVjdHMgb2YiCi0gICAgICAgICAgICAgICAgICIgZmx1b3Jlc2NlbnQgbGlnaHRpbmc6IgotICAgICAgICAgICAgICAgICAiXG4gMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKLSAgICAgICAgICAgICAgICAgIlxuVGhpcyBmaWx0ZXIgdHJpZXMgdG8gcmVkdWNlIHRoZSBwYXR0ZXJuIG9mIGhvcml6b250YWwiCi0gICAgICAgICAgICAgICAgICJcbmxpZ2h0L2RhcmsgYmFuZHMgY2F1c2VkIGJ5IHNvbWUgKHVzdWFsbHkgZmx1b3Jlc2NlbnQpIgotICAgICAgICAgICAgICAgICAiIGxpZ2h0aW5nLiIKLSAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQkFORElOR0ZJTFRFUikKLSAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48MHwxWywuLi5dPiBCYW5kaW5nIGZpbHRlciB0byByZWR1Y2UgZWZmZWN0cyBvZiIKKwkJICIgZmx1b3Jlc2NlbnQgbGlnaHRpbmc6IgorCQkgIlxuIDAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCisJCSAiXG5UaGlzIGZpbHRlciB0cmllcyB0byByZWR1Y2UgdGhlIHBhdHRlcm4gb2YgaG9yaXpvbnRhbCIKKwkJICJcbmxpZ2h0L2RhcmsgYmFuZHMgY2F1c2VkIGJ5IHNvbWUgKHVzdWFsbHkgZmx1b3Jlc2NlbnQpIgorCQkgIiBsaWdodGluZy4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9CQU5ESU5HRklMVEVSKQorCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKwkJICJcbiIpOwogTU9EVUxFX1BBUk1fREVTQyhjbG9ja2RpdiwKLSAgICAgICAgICAgICAgICAgIlxuPC0xfG5bLC4uLl0+ICIKLSAgICAgICAgICAgICAgICAgIkZvcmNlIHBpeGVsIGNsb2NrIGRpdmlzb3IgdG8gYSBzcGVjaWZpYyB2YWx1ZSAoZm9yIGV4cGVydHMpOiIKLSAgICAgICAgICAgICAgICAgIlxuICBuIG1heSB2YXJ5IGZyb20gMCB0byAxMjcuIgotICAgICAgICAgICAgICAgICAiXG4gLTEgZm9yIGF1dG9tYXRpYyB2YWx1ZS4iCi0gICAgICAgICAgICAgICAgICJcblNlZSBhbHNvIHRoZSAnZG91YmxlX2J1ZmZlcicgbW9kdWxlIHBhcmFtZXRlci4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0NMT0NLRElWKQotICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKKwkJICJcbjwtMXxuWywuLi5dPiAiCisJCSAiRm9yY2UgcGl4ZWwgY2xvY2sgZGl2aXNvciB0byBhIHNwZWNpZmljIHZhbHVlIChmb3IgZXhwZXJ0cyk6IgorCQkgIlxuICBuIG1heSB2YXJ5IGZyb20gMCB0byAxMjcuIgorCQkgIlxuIC0xIGZvciBhdXRvbWF0aWMgdmFsdWUuIgorCQkgIlxuU2VlIGFsc28gdGhlICdkb3VibGVfYnVmZmVyJyBtb2R1bGUgcGFyYW1ldGVyLiIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0NMT0NLRElWKQorCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKwkJICJcbiIpOwogTU9EVUxFX1BBUk1fREVTQyhiYWNrbGlnaHQsCi0gICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IE9iamVjdHMgYXJlIGxpdCBmcm9tIGJlaGluZDoiCi0gICAgICAgICAgICAgICAgICJcbiAwID0gbm8sIDEgPSB5ZXMiCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JBQ0tMSUdIVCkKLSAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48MHwxWywuLi5dPiBPYmplY3RzIGFyZSBsaXQgZnJvbSBiZWhpbmQ6IgorCQkgIlxuIDAgPSBubywgMSA9IHllcyIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JBQ0tMSUdIVCkKKwkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCisJCSAiXG4iKTsKIE1PRFVMRV9QQVJNX0RFU0MobWlycm9yLAotICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBSZXZlcnNlIGltYWdlIGhvcml6b250YWxseToiCi0gICAgICAgICAgICAgICAgICJcbiAwID0gbm8sIDEgPSB5ZXMiCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX01JUlJPUikKLSAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48MHwxWywuLi5dPiBSZXZlcnNlIGltYWdlIGhvcml6b250YWxseToiCisJCSAiXG4gMCA9IG5vLCAxID0geWVzIgorCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUlSUk9SKQorCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKwkJICJcbiIpOwogTU9EVUxFX1BBUk1fREVTQyhtb25vY2hyb21lLAotICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBVc2UgaW1hZ2Ugc2Vuc29yIGFzIG1vbm9jaHJvbWUgc2Vuc29yOiIKLSAgICAgICAgICAgICAgICAgIlxuIDAgPSBubywgMSA9IHllcyIKLSAgICAgICAgICAgICAgICAgIlxuTm90IGFsbCB0aGUgc2Vuc29ycyBzdXBwb3J0IG1vbm9jaHJvbWUgY29sb3IuIgotICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NT05PQ0hST01FKQotICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoYnJpZ2h0bmVzcywgCi0gICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBicmlnaHRuZXNzICgwLTY1NTM1KS4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JSSUdIVE5FU1MpCi0gICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0gICAgICAgICAgICAgICAgICJcblRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYgJ2F1dG9icmlnaHQnIGlzIGVuYWJsZWQuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKLU1PRFVMRV9QQVJNX0RFU0MoaHVlLCAKLSAgICAgICAgICAgICAgICAgIlxuPG5bLC4uLl0+IFNldCBwaWN0dXJlIGh1ZSAoMC02NTUzNSkuIgotICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9IVUUpCi0gICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0gICAgICAgICAgICAgICAgICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhjb2xvdXIsIAotICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgc2F0dXJhdGlvbiAoMC02NTUzNSkuIgotICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DT0xPVVIpCi0gICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCi0gICAgICAgICAgICAgICAgICJcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhjb250cmFzdCwgCi0gICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBjb250cmFzdCAoMC02NTUzNSkuIgotICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DT05UUkFTVCkKLSAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHdoaXRlbmVzcywgCi0gICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSB3aGl0ZW5lc3MgKDAtNjU1MzUpLiIKLSAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfV0hJVEVORVNTKQotICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKKwkJICJcbjwwfDFbLC4uLl0+IFVzZSBpbWFnZSBzZW5zb3IgYXMgbW9ub2Nocm9tZSBzZW5zb3I6IgorCQkgIlxuIDAgPSBubywgMSA9IHllcyIKKwkJICJcbk5vdCBhbGwgdGhlIHNlbnNvcnMgc3VwcG9ydCBtb25vY2hyb21lIGNvbG9yLiIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX01PTk9DSFJPTUUpCisJCSAiIGZvciBldmVyeSBkZXZpY2UuIgorCQkgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGJyaWdodG5lc3MsCisJCSAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgYnJpZ2h0bmVzcyAoMC02NTUzNSkuIgorCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQlJJR0hUTkVTUykKKwkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCisJCSAiXG5UaGlzIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0IGlmICdhdXRvYnJpZ2h0JyBpcyBlbmFibGVkLiIKKwkJICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhodWUsCisJCSAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgaHVlICgwLTY1NTM1KS4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9IVUUpCisJCSAiIGZvciBldmVyeSBkZXZpY2UuIgorCQkgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGNvbG91ciwKKwkJICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBzYXR1cmF0aW9uICgwLTY1NTM1KS4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DT0xPVVIpCisJCSAiIGZvciBldmVyeSBkZXZpY2UuIgorCQkgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGNvbnRyYXN0LAorCQkgIlxuPG5bLC4uLl0+IFNldCBwaWN0dXJlIGNvbnRyYXN0ICgwLTY1NTM1KS4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DT05UUkFTVCkKKwkJICIgZm9yIGV2ZXJ5IGRldmljZS4iCisJCSAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0Mod2hpdGVuZXNzLAorCQkgIlxuPG5bLC4uLl0+IFNldCBwaWN0dXJlIHdoaXRlbmVzcyAoMC02NTUzNSkuIgorCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfV0hJVEVORVNTKQorCQkgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKwkJICJcbiIpOwogI2lmZGVmIFc5OTY4Q0ZfREVCVUcKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsCi0gICAgICAgICAgICAgICAgICJcbjxuPiBEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbGV2ZWwsIGZyb20gMCB0byA2OiIKLSAgICAgICAgICAgICAgICAgIlxuMCA9IG5vbmUgKHVzZSBjYXJlZnVsbHkpIgotICAgICAgICAgICAgICAgICAiXG4xID0gY3JpdGljYWwgZXJyb3JzIgotICAgICAgICAgICAgICAgICAiXG4yID0gc2lnbmlmaWNhbnQgaW5mb3JtYXRpb25zIgotICAgICAgICAgICAgICAgICAiXG4zID0gY29uZmlndXJhdGlvbiBvciBnZW5lcmFsIG1lc3NhZ2VzIgotICAgICAgICAgICAgICAgICAiXG40ID0gd2FybmluZ3MiCi0gICAgICAgICAgICAgICAgICJcbjUgPSBjYWxsZWQgZnVuY3Rpb25zIgotICAgICAgICAgICAgICAgICAiXG42ID0gZnVuY3Rpb24gaW50ZXJuYWxzIgotICAgICAgICAgICAgICAgICAiXG5MZXZlbCA1IGFuZCA2IGFyZSB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5ICIKLSAgICAgICAgICAgICAgICAgIm9uZSBkZXZpY2UgaXMgdXNlZC4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0RFQlVHX0xFVkVMKSIuIgotICAgICAgICAgICAgICAgICAiXG4iKTsKKwkJICJcbjxuPiBEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbGV2ZWwsIGZyb20gMCB0byA2OiIKKwkJICJcbjAgPSBub25lICh1c2UgY2FyZWZ1bGx5KSIKKwkJICJcbjEgPSBjcml0aWNhbCBlcnJvcnMiCisJCSAiXG4yID0gc2lnbmlmaWNhbnQgaW5mb3JtYXRpb25zIgorCQkgIlxuMyA9IGNvbmZpZ3VyYXRpb24gb3IgZ2VuZXJhbCBtZXNzYWdlcyIKKwkJICJcbjQgPSB3YXJuaW5ncyIKKwkJICJcbjUgPSBjYWxsZWQgZnVuY3Rpb25zIgorCQkgIlxuNiA9IGZ1bmN0aW9uIGludGVybmFscyIKKwkJICJcbkxldmVsIDUgYW5kIDYgYXJlIHVzZWZ1bCBmb3IgdGVzdGluZyBvbmx5LCB3aGVuIG9ubHkgIgorCQkgIm9uZSBkZXZpY2UgaXMgdXNlZC4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ERUJVR19MRVZFTCkiLiIKKwkJICJcbiIpOwogTU9EVUxFX1BBUk1fREVTQyhzcGVjaWZpY19kZWJ1ZywKLSAgICAgICAgICAgICAgICAgIlxuPDB8MT4gRW5hYmxlIG9yIGRpc2FibGUgc3BlY2lmaWMgZGVidWdnaW5nIG1lc3NhZ2VzOiIKLSAgICAgICAgICAgICAgICAgIlxuMCA9IHByaW50IG1lc3NhZ2VzIGNvbmNlcm5pbmcgZXZlcnkgbGV2ZWwiCi0gICAgICAgICAgICAgICAgICIgPD0gJ2RlYnVnJyBsZXZlbC4iCi0gICAgICAgICAgICAgICAgICJcbjEgPSBwcmludCBtZXNzYWdlcyBjb25jZXJuaW5nIHRoZSBsZXZlbCIKLSAgICAgICAgICAgICAgICAgIiBpbmRpY2F0ZWQgYnkgJ2RlYnVnJy4iCi0gICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIgotICAgICAgICAgICAgICAgICBfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9TUEVDSUZJQ19ERUJVRykiLiIKLSAgICAgICAgICAgICAgICAgIlxuIik7CisJCSAiXG48MHwxPiBFbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2FnZXM6IgorCQkgIlxuMCA9IHByaW50IG1lc3NhZ2VzIGNvbmNlcm5pbmcgZXZlcnkgbGV2ZWwiCisJCSAiIDw9ICdkZWJ1ZycgbGV2ZWwuIgorCQkgIlxuMSA9IHByaW50IG1lc3NhZ2VzIGNvbmNlcm5pbmcgdGhlIGxldmVsIgorCQkgIiBpbmRpY2F0ZWQgYnkgJ2RlYnVnJy4iCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICIKKwkJIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX1NQRUNJRklDX0RFQlVHKSIuIgorCQkgIlxuIik7CiAjZW5kaWYgLyogVzk5NjhDRl9ERUJVRyAqLwogCiAKQEAgLTM5OSw3ICs0MDYsNyBAQAogc3RhdGljIGludCB3OTk2OGNmX2lvY3RsKHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmaWxlKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHNzaXplX3Qgdzk5NjhjZl9yZWFkKHN0cnVjdCBmaWxlKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QqKTsKIHN0YXRpYyBpbnQgdzk5NjhjZl92NGxfaW9jdGwoc3RydWN0IGlub2RlKiwgc3RydWN0IGZpbGUqLCB1bnNpZ25lZCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICopOworCQkJICAgICB2b2lkIF9fdXNlciAqKTsKIAogLyogVVNCLXNwZWNpZmljICovCiBzdGF0aWMgaW50IHc5OTY4Y2Zfc3RhcnRfdHJhbnNmZXIoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CkBAIC00MjEsMjUgKzQyOCwyNSBAQAogc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3JlYWRfYWNrKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwogc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwogc3RhdGljIGludCB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4KiB2YWx1ZSk7Ci1zdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlX2RhdGEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTE2IGFkZHJlc3MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHN1YmFkZHJlc3MsIHU4KiB2YWx1ZSk7CisJCQkJICAgICAgdTE2IGFkZHJlc3MsIHU4KiB2YWx1ZSk7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlX2RhdGEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTE2IGFkZHJlc3MsCisJCQkJCSAgIHU4IHN1YmFkZHJlc3MsIHU4KiB2YWx1ZSk7CiBzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2FkYXBfd3JpdGVfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MpOworCQkJCSAgICAgICB1MTYgYWRkcmVzcywgdTggc3ViYWRkcmVzcyk7CiBzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2FkYXBfZmFzdHdyaXRlX2J5dGVfZGF0YShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCB2YWx1ZSk7CisJCQkJCQl1MTYgYWRkcmVzcywgdTggc3ViYWRkcmVzcywKKwkJCQkJCXU4IHZhbHVlKTsKIAogLyogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgKi8KIHN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIqLCB1MTYgYWRkciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX3NtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyKiwgdTE2IGFkZHIsCisJCQkJICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLAorCQkJCSAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhKik7CiBzdGF0aWMgdTMyIHc5OTY4Y2ZfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyKik7CiBzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqKTsKIHN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCopOwogc3RhdGljIGludCB3OTk2OGNmX2kyY19jb250cm9sKHN0cnVjdCBpMmNfYWRhcHRlciosIHVuc2lnbmVkIGludCBjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAogLyogTWVtb3J5IG1hbmFnZW1lbnQgKi8KIHN0YXRpYyB2b2lkKiBydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpOwpAQCAtNDUxLDE3ICs0NTgsMTcgQEAKIHN0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKixpbnQgY2lkLGludCB2YWwpOwogc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9nZXRfY29udHJvbChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLGludCBjaWQsaW50ICp2YWwpOwogc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9jbWQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9pbml0KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwogc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl91cGRhdGVfc2V0dGluZ3Moc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CiBzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2dldF9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwotc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl91cGRhdGVfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdCk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSosCisJCQkJCSBzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0KTsKIAogLyogT3RoZXIgaGVscGVyIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgdzk5NjhjZl9jb25maWd1cmVfY2FtZXJhKHN0cnVjdCB3OTk2OGNmX2RldmljZSosc3RydWN0IHVzYl9kZXZpY2UqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdzk5NjhjZl9tb2RlbF9pZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZGV2X25yKTsKKwkJCQkgICAgIGVudW0gdzk5NjhjZl9tb2RlbF9pZCwKKwkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRldl9ucik7CiBzdGF0aWMgdm9pZCB3OTk2OGNmX2FkanVzdF9jb25maWd1cmF0aW9uKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwogc3RhdGljIGludCB3OTk2OGNmX3R1cm5fb25fbGVkKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOwogc3RhdGljIGludCB3OTk2OGNmX2luaXRfY2hpcChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKQEAgLTQ3MCw4ICs0NzcsOCBAQAogc3RhdGljIGlubGluZSB1OCB3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbih1MTYgcGFsZXR0ZSk7CiBzdGF0aWMgaW50IHc5OTY4Y2Zfc2V0X3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgc3RydWN0IHZpZGVvX3BpY3R1cmUpOwogc3RhdGljIGludCB3OTk2OGNmX3NldF93aW5kb3coc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgc3RydWN0IHZpZGVvX3dpbmRvdyk7Ci1zdGF0aWMgaW50IHc5OTY4Y2ZfcG9zdHByb2Nlc3NfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCopOworc3RhdGljIGludCB3OTk2OGNmX3Bvc3Rwcm9jZXNzX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSosCisJCQkJICAgICBzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90Kik7CiBzdGF0aWMgaW50IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiogdywgdTE2KiBoKTsKIHN0YXRpYyB2b2lkIHc5OTY4Y2ZfaW5pdF9mcmFtZWxpc3Qoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CiBzdGF0aWMgdm9pZCB3OTk2OGNmX3B1c2hfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTggZl9udW0pOwpAQCAtNDkwLDExICs0OTcsMTEgQEAKIAljb25zdCBjaGFyICpuYW1lOwogfTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgZWxlbWVudCBpbiB0aGUgc3ltYm9saWNfbGlzdCBhcnJheS4gVGhlCiAgIGVuZCBvZiB0aGUgbGlzdCBtdXN0IGJlIG1hcmtlZCB3aXRoIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSBOVUxMIG5hbWUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqIAorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKIHN5bWJvbGljKHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgbGlzdFtdLCBjb25zdCBpbnQgbnVtKQogewogCWludCBpOwpAQCAtNTYxLDcgKzU2OCw3IEBACiBzdGF0aWMgc3RydWN0IHc5OTY4Y2Zfc3ltYm9saWNfbGlzdCBkZWNvZGVyX2Vycmxpc3RbXSA9IHsKIAl7IFc5OTY4Q0ZfREVDX0VSUl9DT1JSVVBURURfREFUQSwgIkNvcnJ1cHRlZCBkYXRhIiB9LAogCXsgVzk5NjhDRl9ERUNfRVJSX0JVRl9PVkVSRkxPVywgICAiQnVmZmVyIG92ZXJmbG93IiB9LAotCXsgVzk5NjhDRl9ERUNfRVJSX05PX1NPSSwgICAgICAgICAiU09JIG1hcmtlciBub3QgZm91bmQiIH0sICAgICAKKwl7IFc5OTY4Q0ZfREVDX0VSUl9OT19TT0ksICAgICAgICAgIlNPSSBtYXJrZXIgbm90IGZvdW5kIiB9LAogCXsgVzk5NjhDRl9ERUNfRVJSX05PX1NPRjAsICAgICAgICAiU09GMCBtYXJrZXIgbm90IGZvdW5kIiB9LAogCXsgVzk5NjhDRl9ERUNfRVJSX05PX1NPUywgICAgICAgICAiU09TIG1hcmtlciBub3QgZm91bmQiIH0sCiAJeyBXOTk2OENGX0RFQ19FUlJfTk9fRU9JLCAgICAgICAgICJFT0kgbWFya2VyIG5vdCBmb3VuZCIgfSwKQEAgLTY4OCwyMCArNjk1LDE5IEBACiAJYnBwID0gKHc5OTY4Y2ZfdnBwKSA/IDQgOiAyOwogCWlmIChjYW0tPnVwc2NhbGluZykKIAkJdnBwX2J1ZnNpemUgPSBtYXgoVzk5NjhDRl9NQVhfV0lEVEgqVzk5NjhDRl9NQVhfSEVJR0hUKmJwcCwKLQkJICAgICAgICAgICAgICAgICAgY2FtLT5tYXh3aWR0aCpjYW0tPm1heGhlaWdodCpicHApOworCQkJCSAgY2FtLT5tYXh3aWR0aCpjYW0tPm1heGhlaWdodCpicHApOwogCWVsc2UKIAkJdnBwX2J1ZnNpemUgPSBjYW0tPm1heHdpZHRoKmNhbS0+bWF4aGVpZ2h0KmJwcDsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgVzk5NjhDRl9VUkJTOyBpKyspIHsKIAkJaWYgKCEoY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPQotCQkgICAgICBrbWFsbG9jKFc5OTY4Q0ZfSVNPX1BBQ0tFVFMqcF9zaXplLCBHRlBfS0VSTkVMKSkpIHsKKwkJICAgICAga3phbGxvYyhXOTk2OENGX0lTT19QQUNLRVRTKnBfc2l6ZSwgR0ZQX0tFUk5FTCkpKSB7CiAJCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlzb2Nocm9ub3VzICIKLQkJCSAgICAgICAidHJhbnNmZXIgYnVmZmVycyAoJXUgYnl0ZXMpIiwgCisJCQkgICAgICAgInRyYW5zZmVyIGJ1ZmZlcnMgKCV1IGJ5dGVzKSIsCiAJCQkgICAgcF9zaXplICogVzk5NjhDRl9JU09fUEFDS0VUUykKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCW1lbXNldChjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSwgMCwgVzk5NjhDRl9JU09fUEFDS0VUUypwX3NpemUpOwogCX0KIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRlbXBvcmFyeSBmcmFtZSBidWZmZXIgKi8KQEAgLTc3NCw3ICs3ODAsNyBAQAogICBvZiB0aGUgbmV4dCB2aWRlbyBmcmFtZTsgaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgaW4gYSBwYWNrZXQsIHRoZSBlbnRpcmUKICAgdmlkZW8gZnJhbWUgaXMgZGlzY2FyZGVkIGFuZCBncmFiYmVkIGFnYWluLgogICBJZiB0aGVyZSBhcmUgbm8gcmVxdWVzdGVkIGZyYW1lcyBpbiB0aGUgRklGTyBsaXN0LCBwYWNrZXRzIGFyZSBjb2xsZWN0ZWQgaW50bwotICBhIHRlbXBvcmFyeSBidWZmZXIuIAorICBhIHRlbXBvcmFyeSBidWZmZXIuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIHc5OTY4Y2ZfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC03OTMsNyArNzk5LDcgQEAKIAkvKiAiKCpmKSIgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgImNhbS0+ZnJhbWVfY3VycmVudCIgKi8KIAlmID0gJmNhbS0+ZnJhbWVfY3VycmVudDsKIAotCS8qIElmIGEgZnJhbWUgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB3ZSBhcmUgZ3JhYmJpbmcgaW50byAgCisJLyogSWYgYSBmcmFtZSBoYXMgYmVlbiByZXF1ZXN0ZWQgYW5kIHdlIGFyZSBncmFiYmluZyBpbnRvCiAJICAgdGhlIHRlbXBvcmFyeSBmcmFtZSwgd2UnbGwgc3dpdGNoIHRvIHRoYXQgcmVxdWVzdGVkIGZyYW1lICovCiAJaWYgKCgqZikgPT0gJmNhbS0+ZnJhbWVfdG1wICYmICpjYW0tPnJlcXVlc3RlZF9mcmFtZSkgewogCQlpZiAoY2FtLT5mcmFtZV90bXAuc3RhdHVzID09IEZfR1JBQkJJTkcpIHsKQEAgLTgwMiw3ICs4MDgsNyBAQAogCQkJKCpmKS0+bGVuZ3RoID0gY2FtLT5mcmFtZV90bXAubGVuZ3RoOwogCQkJbWVtY3B5KCgqZiktPmJ1ZmZlciwgY2FtLT5mcmFtZV90bXAuYnVmZmVyLAogCQkJICAgICAgICgqZiktPmxlbmd0aCk7Ci0JCQlEQkcoNiwgIlN3aXRjaGVkIGZyb20gdGVtcC4gZnJhbWUgdG8gZnJhbWUgIyVkIiwgCisJCQlEQkcoNiwgIlN3aXRjaGVkIGZyb20gdGVtcC4gZnJhbWUgdG8gZnJhbWUgIyVkIiwKIAkJCSAgICAoKmYpLT5udW1iZXIpCiAJCX0KIAl9CkBAIC04NDQsNyArODUwLDcgQEAKIAogCQkJaWYgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikgewogCQkJCWVyciA9IHc5OTY4Y2ZfdnBwLT5jaGVja19oZWFkZXJzKCgqZiktPmJ1ZmZlciwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmYpLT5sZW5ndGgpOworCQkJCQkJCQkgKCpmKS0+bGVuZ3RoKTsKIAkJCQlpZiAoZXJyKSB7CiAJCQkJCURCRyg0LCAiU2tpcCBjb3JydXB0ZWQgZnJhbWU6ICVzIiwKIAkJCQkJICAgIHN5bWJvbGljKGRlY29kZXJfZXJybGlzdCwgZXJyKSkKQEAgLTk2OSw3ICs5NzUsNyBAQAogCWNhbS0+ZnJhbWVfY3VycmVudCA9ICZjYW0tPmZyYW1lX3RtcDsKIAogCWlmICghKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikpCi0JCURCRyg1LCAiSXNvY2hyb25vdXMgdHJhbnNmZXIgc2l6ZTogJWx1IGJ5dGVzL2ZyYW1lIiwgCisJCURCRyg1LCAiSXNvY2hyb25vdXMgdHJhbnNmZXIgc2l6ZTogJWx1IGJ5dGVzL2ZyYW1lIiwKIAkJICAgICh1bnNpZ25lZCBsb25nKXRfc2l6ZSoyKQogCiAJREJHKDUsICJTdGFydGluZyB0aGUgaXNvY2hyb25vdXMgdHJhbnNmZXIuLi4iKQpAQCAtOTg2LDcgKzk5Miw3IEBACiAJCQkJdXNiX2ZyZWVfdXJiKGNhbS0+dXJiW2pdKTsKIAkJCX0KIAkJCURCRygxLCAiQ291bGRuJ3Qgc2VuZCBhIHRyYW5zZmVyIHJlcXVlc3QgdG8gdGhlICIKLQkJCSAgICAgICAiVVNCIGNvcmUgKGVycm9yICMlZCwgJXMpIiwgZXJyLCAKKwkJCSAgICAgICAiVVNCIGNvcmUgKGVycm9yICMlZCwgJXMpIiwgZXJyLAogCQkJICAgIHN5bWJvbGljKHVyYl9lcnJsaXN0LCBlcnIpKQogCQkJcmV0dXJuIGVycjsKIAkJfQpAQCAtMTAxMCw3ICsxMDE2LDcgQEAKIAlpZiAoIWNhbS0+c3RyZWFtaW5nKQogCQlyZXR1cm4gMDsKIAotCS8qIFRoaXMgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyB3aXRoIHVzYl9zdWJtaXRfdXJiKCkgCisJLyogVGhpcyBhdm9pZHMgcmFjZSBjb25kaXRpb25zIHdpdGggdXNiX3N1Ym1pdF91cmIoKQogCSAgIGluIHRoZSBVUkIgY29tcGxldGl0aW9uIGhhbmRsZXIgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT51cmJfbG9jaywgbG9ja19mbGFncyk7CiAJY2FtLT5zdHJlYW1pbmcgPSAwOwpAQCAtMTA0NCw3ICsxMDUwLDcgQEAKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFdyaXRlIGEgVzk5NjhDRiByZWdpc3Rlci4gCisgIFdyaXRlIGEgVzk5NjhDRiByZWdpc3Rlci4KICAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHc5OTY4Y2Zfd3JpdGVfcmVnKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1MTYgdmFsdWUsIHUxNiBpbmRleCkKQEAgLTEwNTMsOCArMTA1OSw4IEBACiAJaW50IHJlczsKIAogCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDAsCi0JICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOworCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOwogCiAJaWYgKHJlcyA8IDApCiAJCURCRyg0LCAiRmFpbGVkIHRvIHdyaXRlIGEgcmVnaXN0ZXIgIgpAQCAtMTA2Niw3ICsxMDcyLDcgQEAKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFJlYWQgYSBXOTk2OENGIHJlZ2lzdGVyLiAKKyAgUmVhZCBhIFc5OTY4Q0YgcmVnaXN0ZXIuCiAgIFJldHVybiB0aGUgcmVnaXN0ZXIgdmFsdWUgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHc5OTY4Y2ZfcmVhZF9yZWcoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHUxNiBpbmRleCkKQEAgLTEwNzYsOCArMTA4Miw4IEBACiAJaW50IHJlczsKIAogCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDEsCi0JICAgICAgICAgICAgICAgICAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCSAgICAgICAgICAgICAgICAgICAgICAwLCBpbmRleCwgYnVmZiwgMiwgVzk5NjhDRl9VU0JfQ1RSTF9USU1FT1VUKTsKKwkJCSAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMCwgaW5kZXgsIGJ1ZmYsIDIsIFc5OTY4Q0ZfVVNCX0NUUkxfVElNRU9VVCk7CiAKIAlpZiAocmVzIDwgMCkKIAkJREJHKDQsICJGYWlsZWQgdG8gcmVhZCBhIHJlZ2lzdGVyICIKQEAgLTExMDEsOCArMTEwNyw4IEBACiAJdmFsdWUgPSAqZGF0YSsrOwogCiAJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMCwKLQkgICAgICAgICAgICAgICAgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAotCSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgMHgwNiwgZGF0YSwgNiwgVzk5NjhDRl9VU0JfQ1RSTF9USU1FT1VUKTsKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIHZhbHVlLCAweDA2LCBkYXRhLCA2LCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOwogCiAJaWYgKHJlcyA8IDApCiAJCURCRyg0LCAiRmFpbGVkIHRvIHdyaXRlIHRoZSBGU0IgcmVnaXN0ZXJzICIKQEAgLTEyODEsOSArMTI4Nyw5IEBACiAKIAogLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkciBXciBbQV0gU3ViYWRkciBbQV0gVmFsdWUgW0FdIFAgKi8KLXN0YXRpYyBpbnQgCi13OTk2OGNmX2kyY19hZGFwX2Zhc3R3cml0ZV9ieXRlX2RhdGEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCBzdWJhZGRyZXNzLHU4IHZhbHVlKQorc3RhdGljIGludAordzk5NjhjZl9pMmNfYWRhcF9mYXN0d3JpdGVfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorCQkJCSAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MsdTggdmFsdWUpCiB7CiAJdTE2KiBkYXRhID0gY2FtLT5kYXRhX2J1ZmZlcjsKIAlpbnQgZXJyID0gMDsKQEAgLTEzNDIsNyArMTM0OCw3IEBACiAJCSAgICAgICAidmFsdWUgMHglMDJYIiwgYWRkcmVzcywgc3ViYWRkcmVzcywgdmFsdWUpCiAJZWxzZQogCQlEQkcoNSwgIkkyQyB3cml0ZSBieXRlIGRhdGEgZmFpbGVkLCBhZGRyLjB4JTA0WCwgIgotCQkgICAgICAgInN1YmFkZHIuMHglMDJYLCB2YWx1ZSAweCUwMlgiLCAKKwkJICAgICAgICJzdWJhZGRyLjB4JTAyWCwgdmFsdWUgMHglMDJYIiwKIAkJICAgIGFkZHJlc3MsIHN1YmFkZHJlc3MsIHZhbHVlKQogCiAJcmV0dXJuIGVycjsKQEAgLTEzNTAsMTAgKzEzNTYsMTAgQEAKIAogCiAvKiBTTUJ1cyBwcm90b2NvbDogUyBBZGRyIFdyIFtBXSBTdWJhZGRyIFtBXSBQIFMgQWRkcisxIFJkIFtBXSBbVmFsdWVdIE5BIFAgKi8KLXN0YXRpYyBpbnQgCi13OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCogdmFsdWUpCitzdGF0aWMgaW50Cit3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorCQkJCXUxNiBhZGRyZXNzLCB1OCBzdWJhZGRyZXNzLAorCQkJCXU4KiB2YWx1ZSkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtMTM3OCw3ICsxMzg0LDcgQEAKIAogCWlmICghZXJyKQogCQlEQkcoNSwgIkkyQyByZWFkIGJ5dGUgZGF0YSBkb25lLCBhZGRyLjB4JTA0WCwgIgotCQkgICAgICAgInN1YmFkZHIuMHglMDJYLCB2YWx1ZSAweCUwMlgiLCAKKwkJICAgICAgICJzdWJhZGRyLjB4JTAyWCwgdmFsdWUgMHglMDJYIiwKIAkJICAgIGFkZHJlc3MsIHN1YmFkZHJlc3MsICp2YWx1ZSkKIAllbHNlCiAJCURCRyg1LCAiSTJDIHJlYWQgYnl0ZSBkYXRhIGZhaWxlZCwgYWRkci4weCUwNFgsICIKQEAgLTEzOTAsOSArMTM5Niw5IEBACiAKIAogLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkcisxIFJkIFtBXSBbVmFsdWVdIE5BIFAgKi8KLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCogdmFsdWUpCisJCQkgICB1MTYgYWRkcmVzcywgdTgqIHZhbHVlKQogewogCWludCBlcnIgPSAwOwogCkBAIC0xNDA1LDcgKzE0MTEsNyBAQAogCWVyciArPSB3OTk2OGNmX3NtYnVzX3JlYWRfYnl0ZShjYW0sIHZhbHVlKTsKIAllcnIgKz0gdzk5NjhjZl9zbWJ1c193cml0ZV9hY2soY2FtKTsKIAllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdG9wKGNhbSk7Ci0gCisKIAkvKiBTZXJpYWwgZGF0YSBkaXNhYmxlICovCiAJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMDApOwogCkBAIC0xNDIxLDkgKzE0MjcsOSBAQAogCiAKIC8qIFNNQnVzIHByb3RvY29sOiBTIEFkZHIgV3IgW0FdIFZhbHVlIFtBXSBQICovCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdzk5NjhjZl9pMmNfYWRhcF93cml0ZV9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCB2YWx1ZSkKKwkJCSAgICB1MTYgYWRkcmVzcywgdTggdmFsdWUpCiB7CiAJREJHKDQsICJpMmNfd3JpdGVfYnl0ZSgpIGlzIGFuIHVuc3VwcG9ydGVkIHRyYW5zZmVyIG1vZGUiKQogCXJldHVybiAtRUlOVkFMOwpAQCAtMTQzNiwxMyArMTQ0MiwxMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQKLXc5OTY4Y2ZfaTJjX3NtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1MTYgYWRkciwgCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsIHU4IGNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKK3c5OTY4Y2ZfaTJjX3NtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB1MTYgYWRkciwKKwkJICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsIHU4IGNvbW1hbmQsCisJCSAgICAgICBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOwogCXU4IGk7Ci0JaW50IGVyciA9IDA7IAorCWludCBlcnIgPSAwOwogCiAJc3dpdGNoIChhZGRyKSB7CiAJCWNhc2UgT1Y2eHgwX1NJRDoKQEAgLTE0NTgsMjAgKzE0NjQsMjAgQEAKIAkJYWRkciA8PD0gMTsKIAogCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpCi0gCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF93cml0ZV9ieXRlKGNhbSwgYWRkciwgY29tbWFuZCk7Ci0JCWVsc2UgaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpIAorCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF93cml0ZV9ieXRlKGNhbSwgYWRkciwgY29tbWFuZCk7CisJCWVsc2UgaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpCiAJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShjYW0sYWRkciwmZGF0YS0+Ynl0ZSk7CiAKIAl9IGVsc2UgaWYgKHNpemUgPT0gSTJDX1NNQlVTX0JZVEVfREFUQSkgewogCQlhZGRyIDw8PSAxOwogCiAJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkKLSAJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX2Zhc3R3cml0ZV9ieXRlX2RhdGEoY2FtLCBhZGRyLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIGRhdGEtPmJ5dGUpOworCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF9mYXN0d3JpdGVfYnl0ZV9kYXRhKGNhbSwgYWRkciwKKwkJCQkJCQkgIGNvbW1hbmQsIGRhdGEtPmJ5dGUpOwogCQllbHNlIGlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKSB7CiAJCQlmb3IgKGkgPSAxOyBpIDw9IFc5OTY4Q0ZfSTJDX1JXX1JFVFJJRVM7IGkrKykgewogCQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlX2RhdGEoY2FtLGFkZHIsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsICZkYXRhLT5ieXRlKTsKKwkJCQkJCQkgY29tbWFuZCwgJmRhdGEtPmJ5dGUpOwogCQkJCWlmIChlcnIpIHsKIAkJCQkJaWYgKHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoY2FtKSkgewogCQkJCQkJZXJyID0gLUVJTzsKQEAgLTE1MTQsNyArMTUyMCw3IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfSBlbHNlIHsKLQkJREJHKDQsICJSZWplY3RlZCBjbGllbnQgWyVzXSB3aXRoIGRyaXZlciBbJXNdIiwgCisJCURCRyg0LCAiUmVqZWN0ZWQgY2xpZW50IFslc10gd2l0aCBkcml2ZXIgWyVzXSIsCiAJCSAgICBjbGllbnQtPm5hbWUsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTUzOSw5ICsxNTQ1LDkgQEAKIH0KIAogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdzk5NjhjZl9pMmNfY29udHJvbChzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGFkYXB0ZXIsIHVuc2lnbmVkIGludCBjbWQsCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQorCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjE5LDEyICsxNjI1LDEyIEBACiBzdGF0aWMgaW50IHc5OTY4Y2ZfaW5pdF9jaGlwKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQogewogCXVuc2lnbmVkIGxvbmcgaHdfYnVmc2l6ZSA9IGNhbS0+bWF4d2lkdGgqY2FtLT5tYXhoZWlnaHQqMiwKLQkgICAgICAgICAgICAgIHkwID0gMHgwMDAwLAotCSAgICAgICAgICAgICAgdTAgPSB5MCArIGh3X2J1ZnNpemUvMiwKLQkgICAgICAgICAgICAgIHYwID0gdTAgKyBod19idWZzaXplLzQsCi0JICAgICAgICAgICAgICB5MSA9IHYwICsgaHdfYnVmc2l6ZS80LAotCSAgICAgICAgICAgICAgdTEgPSB5MSArIGh3X2J1ZnNpemUvMiwKLQkgICAgICAgICAgICAgIHYxID0gdTEgKyBod19idWZzaXplLzQ7CisJCSAgICAgIHkwID0gMHgwMDAwLAorCQkgICAgICB1MCA9IHkwICsgaHdfYnVmc2l6ZS8yLAorCQkgICAgICB2MCA9IHUwICsgaHdfYnVmc2l6ZS80LAorCQkgICAgICB5MSA9IHYwICsgaHdfYnVmc2l6ZS80LAorCQkgICAgICB1MSA9IHkxICsgaHdfYnVmc2l6ZS8yLAorCQkgICAgICB2MSA9IHUxICsgaHdfYnVmc2l6ZS80OwogCWludCBlcnIgPSAwOwogCiAJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhmZjAwLCAweDAwKTsgLyogcG93ZXIgb2ZmICovCkBAIC0xNzU2LDcgKzE3NjIsNyBAQAogCQkJY2FtLT52cHBfZmxhZyA9IFZQUF9TV0FQX1lVVl9CWVRFUzsKIAkJCWh3X3BhbGV0dGUgPSBWSURFT19QQUxFVFRFX1VZVlk7CiAJCQlicmVhazsKLQkJLyogT3JpZ2luYWwgdmlkZW8gaXMgdXNlZCBpbnN0ZWFkIG9mIFJHQlggcGFsZXR0ZXMuIAorCQkvKiBPcmlnaW5hbCB2aWRlbyBpcyB1c2VkIGluc3RlYWQgb2YgUkdCWCBwYWxldHRlcy4KIAkJICAgU29mdHdhcmUgY29udmVyc2lvbiBsYXRlci4gKi8KIAkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6CiAJCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NTU6CkBAIC0xNzcxLDcgKzE3NzcsNyBAQAogCX0KIAogCS8qIE5PVEU6IGR1ZSB0byBtZW1vcnkgaXNzdWVzLCBpdCBpcyBiZXR0ZXIgdG8gZGlzYWJsZSB0aGUgaGFyZHdhcmUKLQkgICAgICAgICBkb3VibGUgYnVmZmVyaW5nIGR1cmluZyBjb21wcmVzc2lvbiAqLworCQkgZG91YmxlIGJ1ZmZlcmluZyBkdXJpbmcgY29tcHJlc3Npb24gKi8KIAlpZiAoY2FtLT5kb3VibGVfYnVmZmVyICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSkKIAkJcmVnX3YgfD0gMHgwMDgwOwogCkBAIC0xODI2LDggKzE4MzIsOCBAQAogCSNkZWZpbmUgX19VTlNDKHgpICgoeCkgPj4gMTApCiAKIAkvKiBNYWtlIHN1cmUgd2UgYXJlIHVzaW5nIGEgc3VwcG9ydGVkIHJlc29sdXRpb24gKi8KLQlpZiAoKGVyciA9IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKGNhbSwgKHUxNiopJndpbi53aWR0aCwgCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2Kikmd2luLmhlaWdodCkpKQorCWlmICgoZXJyID0gdzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoY2FtLCAodTE2Kikmd2luLndpZHRoLAorCQkJCQkgICAgICAodTE2Kikmd2luLmhlaWdodCkpKQogCQlnb3RvIGVycm9yOwogCiAJLyogU2NhbGluZyBmYWN0b3JzICovCkBAIC0xOTU2LDcgKzE5NjIsNyBAQAogCS8qIFNldHRpbmdzIGNoYW5nZWQsIHNvIHdlIGNsZWFyIHRoZSBmcmFtZSBidWZmZXJzICovCiAJbWVtc2V0KGNhbS0+ZnJhbWVbMF0uYnVmZmVyLCAwLCBjYW0tPm5idWZmZXJzKmNhbS0+ZnJhbWVbMF0uc2l6ZSk7CiAKLQlEQkcoNCwgIlRoZSBjYXB0dXJlIGFyZWEgaXMgJWR4JWQsIE9mZnNldCAoeCx5KT0oJXUsJXUpIiwgCisJREJHKDQsICJUaGUgY2FwdHVyZSBhcmVhIGlzICVkeCVkLCBPZmZzZXQgKHgseSk9KCV1LCV1KSIsCiAJICAgIHdpbi53aWR0aCwgd2luLmhlaWdodCwgd2luLngsIHdpbi55KQogCiAJUERCR0coIng9JXUgLHk9JXUsIHc9JXUsIGg9JXUsIGF4PSV1LCBheT0ldSwgc193aW4ueD0ldSwgc193aW4ueT0ldSwgIgpAQCAtMTk3MiwxMSArMTk3OCwxMSBAQAogfQogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEFkanVzdCB0aGUgYXNrZWQgdmFsdWVzIGZvciB3aW5kb3cgd2lkdGggYW5kIGhlaWdodC4KICAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHUxNiogd2lkdGgsIHUxNiogaGVpZ2h0KQogewogCXUxNiBtYXh3LCBtYXhoOwpAQCAtMTk4NiwxMCArMTk5MiwxMCBAQAogCiAJbWF4dyA9IGNhbS0+dXBzY2FsaW5nICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSAmJgogCSAgICAgICB3OTk2OGNmX3ZwcCA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX1dJRFRILCBjYW0tPm1heHdpZHRoKQotCSAgICAgICAgICAgICAgICAgICA6IGNhbS0+bWF4d2lkdGg7CisJCQkgICA6IGNhbS0+bWF4d2lkdGg7CiAJbWF4aCA9IGNhbS0+dXBzY2FsaW5nICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9ERUNPTVBSRVNTSU9OKSAmJgogCSAgICAgICB3OTk2OGNmX3ZwcCA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX0hFSUdIVCwgY2FtLT5tYXhoZWlnaHQpCi0JICAgICAgICAgICAgICAgICAgIDogY2FtLT5tYXhoZWlnaHQ7CisJCQkgICA6IGNhbS0+bWF4aGVpZ2h0OwogCiAJaWYgKCp3aWR0aCA+IG1heHcpCiAJCSp3aWR0aCA9IG1heHc7CkBAIC0yMDQ4LDcgKzIwNTQsNyBAQAogICBSZWFkLCBzdG9yZSBhbmQgcmVtb3ZlIHRoZSBmaXJzdCBwb2ludGVyIGluIHRoZSBGSUZPIGxpc3Qgb2YgcmVxdWVzdGVkCiAgIGZyYW1lcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIHc5OTY4Y2ZfcG9wX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiogZnJhbWVwKQogewogCXU4IGk7CkBAIC0yMDcyLDkgKzIwNzgsOSBAQAogICBIaWdoLWxldmVsIHZpZGVvIHBvc3QtcHJvY2Vzc2luZyByb3V0aW5lIG9uIGdyYWJiZWQgZnJhbWVzLgogICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgCi13OTk2OGNmX3Bvc3Rwcm9jZXNzX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnIpCitzdGF0aWMgaW50Cit3OTk2OGNmX3Bvc3Rwcm9jZXNzX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorCQkJICBzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiBmcikKIHsKIAl2b2lkICpwSW4gPSBmci0+YnVmZmVyLCAqcE91dCA9IGNhbS0+ZnJhbWVfdnBwLmJ1ZmZlciwgKnRtcDsKIAl1MTYgdyA9IGNhbS0+d2luZG93LndpZHRoLApAQCAtMjEyMSw3ICsyMTI3LDcgQEAKIAkJdzk5NjhjZl92cHAtPnV5dnlfdG9fcmdieChwSW4sIGZyLT5sZW5ndGgsIHBPdXQsIGZtdCwgcmdiKTsKIAkJZnItPmxlbmd0aCA9ICh3KmgqZCkvODsKIAkJX1BTV0FQKHBJbiwgcE91dCkKLQkJREJHKDYsICJVWVZZLTE2Yml0IHRvICVzIGNvbnZlcnNpb24gZG9uZSIsIAorCQlEQkcoNiwgIlVZVlktMTZiaXQgdG8gJXMgY29udmVyc2lvbiBkb25lIiwKIAkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIGZtdCkpCiAJfQogCkBAIC0yMTM3LDcgKzIxNDMsNyBAQAogICogSW1hZ2Ugc2Vuc29yIGNvbnRyb2wgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAogdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIGludCBjaWQsIGludCB2YWwpCiB7CiAJc3RydWN0IG92Y2FtY2hpcF9jb250cm9sIGN0bDsKQEAgLTIxNTIsNyArMjE1OCw3IEBACiB9CiAKIAotc3RhdGljIGludCAKK3N0YXRpYyBpbnQKIHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBpbnQgY2lkLCBpbnQqIHZhbCkKIHsKIAlzdHJ1Y3Qgb3ZjYW1jaGlwX2NvbnRyb2wgY3RsOwpAQCAtMjE5MiwzOCArMjE5OCwzOCBAQAogCWludCBlcnIgPSAwOwogCiAJLyogQXV0byBicmlnaHRuZXNzICovCi0JZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0FVVE9CUklHSFQsIAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+YXV0b19icnQpOworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9BVVRPQlJJR0hULAorCQkJCQkgY2FtLT5hdXRvX2JydCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCS8qIEF1dG8gZXhwb3N1cmUgKi8KLQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQVVUT0VYUCwgCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5hdXRvX2V4cCk7CisJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0FVVE9FWFAsCisJCQkJCSBjYW0tPmF1dG9fZXhwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJLyogQmFuZGluZyBmaWx0ZXIgKi8KLQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQkFOREZJTFQsIAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+YmFuZGZpbHQpOworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CQU5ERklMVCwKKwkJCQkJIGNhbS0+YmFuZGZpbHQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKIAkvKiBMaWdodCBmcmVxdWVuY3kgKi8KIAllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfRlJFUSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmxpZ2h0ZnJlcSk7CisJCQkJCSBjYW0tPmxpZ2h0ZnJlcSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCS8qIEJhY2sgbGlnaHQgKi8KIAllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQkFDS0xJR0hULAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+YmFja2xpZ2h0KTsKKwkJCQkJIGNhbS0+YmFja2xpZ2h0KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJLyogTWlycm9yICovCiAJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX01JUlJPUiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPm1pcnJvcik7CisJCQkJCSBjYW0tPm1pcnJvcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMjI3NSwxNSArMjI4MSwxNSBAQAogICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludAotdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdCkKK3c5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorCQkJICAgICAgc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdCkKIHsKIAlpbnQgZXJyID0gMDsKIAogCWlmICgoIWNhbS0+c2Vuc29yX2luaXRpYWxpemVkKQogCSAgICB8fCBwaWN0LmNvbnRyYXN0ICE9IGNhbS0+cGljdHVyZS5jb250cmFzdCkgewogCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQ09OVCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljdC5jb250cmFzdCk7CisJCQkJCQkgcGljdC5jb250cmFzdCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGZhaWw7CiAJCURCRyg0LCAiQ29udHJhc3QgY2hhbmdlZCBmcm9tICV1IHRvICV1IiwKQEAgLTIyOTEsMTAgKzIyOTcsMTAgQEAKIAkJY2FtLT5waWN0dXJlLmNvbnRyYXN0ID0gcGljdC5jb250cmFzdDsKIAl9CiAKLQlpZiAoKCghY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQpIHx8IAorCWlmICgoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkgfHwKIAkgICAgcGljdC5icmlnaHRuZXNzICE9IGNhbS0+cGljdHVyZS5icmlnaHRuZXNzKSAmJiAoIWNhbS0+YXV0b19icnQpKSB7Ci0JCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CUklHSFQsIAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0LmJyaWdodG5lc3MpOworCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQlJJR0hULAorCQkJCQkJIHBpY3QuYnJpZ2h0bmVzcyk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGZhaWw7CiAJCURCRyg0LCAiQnJpZ2h0bmVzcyBjaGFuZ2VkIGZyb20gJXUgdG8gJXUiLApAQCAtMjMwMyw4ICsyMzA5LDggQEAKIAl9CiAKIAlpZiAoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkgfHwgcGljdC5jb2xvdXIgIT0gY2FtLT5waWN0dXJlLmNvbG91cikgewotCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfU0FULCAKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljdC5jb2xvdXIpOworCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfU0FULAorCQkJCQkJIHBpY3QuY29sb3VyKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZmFpbDsKIAkJREJHKDQsICJDb2xvdXIgY2hhbmdlZCBmcm9tICV1IHRvICV1IiwKQEAgLTIzMTMsOCArMjMxOSw4IEBACiAJfQogCiAJaWYgKCghY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQpIHx8IHBpY3QuaHVlICE9IGNhbS0+cGljdHVyZS5odWUpIHsKLQkJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0hVRSwgCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY3QuaHVlKTsKKwkJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0hVRSwKKwkJCQkJCSBwaWN0Lmh1ZSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGZhaWw7CiAJCURCRyg0LCAiSHVlIGNoYW5nZWQgZnJvbSAldSB0byAldSIsCkBAIC0yMzQzLDEyICsyMzQ5LDEyIEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX2NtZChjYW0sIE9WQ0FNQ0hJUF9DTURfSU5JVElBTElaRSwgCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbS0+bW9ub2Nocm9tZSkpKQorCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFLAorCQkJCSAgICAgICZjYW0tPm1vbm9jaHJvbWUpKSkKIAkJZ290byBlcnJvcjsKIAotCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9RX1NVQlRZUEUsIAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYW0tPnNlbnNvcikpKQorCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9RX1NVQlRZUEUsCisJCQkJICAgICAgJmNhbS0+c2Vuc29yKSkpCiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBOT1RFOiBNYWtlIHN1cmUgd2lkdGggYW5kIGhlaWdodCBhcmUgYSBtdWx0aXBsZSBvZiAxNiAqLwpAQCAtMjQxMCwxNiArMjQxNiwxNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEZpbGwgc29tZSBiYXNpYyBmaWVsZHMgaW4gdGhlIG1haW4gZGV2aWNlIGRhdGEgc3RydWN0dXJlLgotICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIG9uIHc5OTY4Y2ZfdXNiX3Byb2JlKCkgZm9yIGVhY2ggcmVjb2duaXplZCAKKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBvbiB3OTk2OGNmX3VzYl9wcm9iZSgpIGZvciBlYWNoIHJlY29nbml6ZWQKICAgY2FtZXJhLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZAogdzk5NjhjZl9jb25maWd1cmVfY2FtZXJhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdzk5NjhjZl9tb2RlbF9pZCBtb2RfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZGV2X25yKQorCQkJIHN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2LAorCQkJIGVudW0gdzk5NjhjZl9tb2RlbF9pZCBtb2RfaWQsCisJCQkgY29uc3QgdW5zaWduZWQgc2hvcnQgZGV2X25yKQogewotCWluaXRfTVVURVgoJmNhbS0+ZmlsZW9wX3NlbSk7CisJbXV0ZXhfaW5pdCgmY2FtLT5maWxlb3BfbXV0ZXgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+b3Blbik7CiAJc3Bpbl9sb2NrX2luaXQoJmNhbS0+dXJiX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjYW0tPmZsaXN0X2xvY2spOwpAQCAtMjQzOCw2MCArMjQ0NCw2MCBAQAogCSAgICAgcGFja2V0X3NpemVbZGV2X25yXSA8IHdNYXhQYWNrZXRTaXplW2NhbS0+YWx0c2V0dGluZy0xXTsKIAkgICAgIGNhbS0+YWx0c2V0dGluZysrKTsKIAotCWNhbS0+bWF4X2J1ZmZlcnMgPSAobWF4X2J1ZmZlcnNbZGV2X25yXSA8IDIgfHwgCi0JICAgICAgICAgICAgICAgICAgICBtYXhfYnVmZmVyc1tkZXZfbnJdID4gVzk5NjhDRl9NQVhfQlVGRkVSUykKLQkgICAgICAgICAgICAgICAgICAgPyBXOTk2OENGX0JVRkZFUlMgOiAodTgpbWF4X2J1ZmZlcnNbZGV2X25yXTsKKwljYW0tPm1heF9idWZmZXJzID0gKG1heF9idWZmZXJzW2Rldl9ucl0gPCAyIHx8CisJCQkgICAgbWF4X2J1ZmZlcnNbZGV2X25yXSA+IFc5OTY4Q0ZfTUFYX0JVRkZFUlMpCisJCQkgICA/IFc5OTY4Q0ZfQlVGRkVSUyA6ICh1OCltYXhfYnVmZmVyc1tkZXZfbnJdOwogCi0JY2FtLT5kb3VibGVfYnVmZmVyID0gKGRvdWJsZV9idWZmZXJbZGV2X25yXSA9PSAwIHx8IAotCSAgICAgICAgICAgICAgICAgICAgICBkb3VibGVfYnVmZmVyW2Rldl9ucl0gPT0gMSkKLQkgICAgICAgICAgICAgICAgICAgICA/ICh1OClkb3VibGVfYnVmZmVyW2Rldl9ucl06Vzk5NjhDRl9ET1VCTEVfQlVGRkVSOworCWNhbS0+ZG91YmxlX2J1ZmZlciA9IChkb3VibGVfYnVmZmVyW2Rldl9ucl0gPT0gMCB8fAorCQkJICAgICAgZG91YmxlX2J1ZmZlcltkZXZfbnJdID09IDEpCisJCQkgICAgID8gKHU4KWRvdWJsZV9idWZmZXJbZGV2X25yXTpXOTk2OENGX0RPVUJMRV9CVUZGRVI7CiAKIAljYW0tPmNsYW1waW5nID0gKGNsYW1waW5nW2Rldl9ucl0gPT0gMCB8fCBjbGFtcGluZ1tkZXZfbnJdID09IDEpCi0JICAgICAgICAgICAgICAgID8gKHU4KWNsYW1waW5nW2Rldl9ucl0gOiBXOTk2OENGX0NMQU1QSU5HOwotCQorCQkJPyAodTgpY2xhbXBpbmdbZGV2X25yXSA6IFc5OTY4Q0ZfQ0xBTVBJTkc7CisKIAljYW0tPmZpbHRlcl90eXBlID0gKGZpbHRlcl90eXBlW2Rldl9ucl0gPT0gMCB8fAotCSAgICAgICAgICAgICAgICAgICAgZmlsdGVyX3R5cGVbZGV2X25yXSA9PSAxIHx8Ci0JICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfdHlwZVtkZXZfbnJdID09IDIpCi0JICAgICAgICAgICAgICAgICAgID8gKHU4KWZpbHRlcl90eXBlW2Rldl9ucl0gOiBXOTk2OENGX0ZJTFRFUl9UWVBFOworCQkJICAgIGZpbHRlcl90eXBlW2Rldl9ucl0gPT0gMSB8fAorCQkJICAgIGZpbHRlcl90eXBlW2Rldl9ucl0gPT0gMikKKwkJCSAgID8gKHU4KWZpbHRlcl90eXBlW2Rldl9ucl0gOiBXOTk2OENGX0ZJTFRFUl9UWVBFOwogCiAJY2FtLT5jYXB0dXJlID0gMTsKIAogCWNhbS0+bGFyZ2V2aWV3ID0gKGxhcmdldmlld1tkZXZfbnJdID09IDAgfHwgbGFyZ2V2aWV3W2Rldl9ucl0gPT0gMSkKLQkgICAgICAgICAgICAgICAgID8gKHU4KWxhcmdldmlld1tkZXZfbnJdIDogVzk5NjhDRl9MQVJHRVZJRVc7CisJCQkgPyAodTgpbGFyZ2V2aWV3W2Rldl9ucl0gOiBXOTk2OENGX0xBUkdFVklFVzsKIAotCWNhbS0+ZGVjb21wcmVzc2lvbiA9IChkZWNvbXByZXNzaW9uW2Rldl9ucl0gPT0gMCB8fCAKLQkgICAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzc2lvbltkZXZfbnJdID09IDEgfHwKLQkgICAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzc2lvbltkZXZfbnJdID09IDIpCi0JICAgICAgICAgICAgICAgICAgICAgPyAodTgpZGVjb21wcmVzc2lvbltkZXZfbnJdOlc5OTY4Q0ZfREVDT01QUkVTU0lPTjsKKwljYW0tPmRlY29tcHJlc3Npb24gPSAoZGVjb21wcmVzc2lvbltkZXZfbnJdID09IDAgfHwKKwkJCSAgICAgIGRlY29tcHJlc3Npb25bZGV2X25yXSA9PSAxIHx8CisJCQkgICAgICBkZWNvbXByZXNzaW9uW2Rldl9ucl0gPT0gMikKKwkJCSAgICAgPyAodTgpZGVjb21wcmVzc2lvbltkZXZfbnJdOlc5OTY4Q0ZfREVDT01QUkVTU0lPTjsKIAotCWNhbS0+dXBzY2FsaW5nID0gKHVwc2NhbGluZ1tkZXZfbnJdID09IDAgfHwgCi0JICAgICAgICAgICAgICAgICAgdXBzY2FsaW5nW2Rldl9ucl0gPT0gMSkKLQkgICAgICAgICAgICAgICAgID8gKHU4KXVwc2NhbGluZ1tkZXZfbnJdIDogVzk5NjhDRl9VUFNDQUxJTkc7CisJY2FtLT51cHNjYWxpbmcgPSAodXBzY2FsaW5nW2Rldl9ucl0gPT0gMCB8fAorCQkJICB1cHNjYWxpbmdbZGV2X25yXSA9PSAxKQorCQkJID8gKHU4KXVwc2NhbGluZ1tkZXZfbnJdIDogVzk5NjhDRl9VUFNDQUxJTkc7CiAKIAljYW0tPmF1dG9fYnJ0ID0gKGF1dG9icmlnaHRbZGV2X25yXSA9PSAwIHx8IGF1dG9icmlnaHRbZGV2X25yXSA9PSAxKQotCSAgICAgICAgICAgICAgICA/ICh1OClhdXRvYnJpZ2h0W2Rldl9ucl0gOiBXOTk2OENGX0FVVE9CUklHSFQ7CisJCQk/ICh1OClhdXRvYnJpZ2h0W2Rldl9ucl0gOiBXOTk2OENGX0FVVE9CUklHSFQ7CiAKIAljYW0tPmF1dG9fZXhwID0gKGF1dG9leHBbZGV2X25yXSA9PSAwIHx8IGF1dG9leHBbZGV2X25yXSA9PSAxKQotCSAgICAgICAgICAgICAgICA/ICh1OClhdXRvZXhwW2Rldl9ucl0gOiBXOTk2OENGX0FVVE9FWFA7CisJCQk/ICh1OClhdXRvZXhwW2Rldl9ucl0gOiBXOTk2OENGX0FVVE9FWFA7CiAKIAljYW0tPmxpZ2h0ZnJlcSA9IChsaWdodGZyZXFbZGV2X25yXSA9PSA1MCB8fCBsaWdodGZyZXFbZGV2X25yXSA9PSA2MCkKLQkgICAgICAgICAgICAgICAgID8gKHU4KWxpZ2h0ZnJlcVtkZXZfbnJdIDogVzk5NjhDRl9MSUdIVEZSRVE7CisJCQkgPyAodTgpbGlnaHRmcmVxW2Rldl9ucl0gOiBXOTk2OENGX0xJR0hURlJFUTsKIAotCWNhbS0+YmFuZGZpbHQgPSAoYmFuZGluZ2ZpbHRlcltkZXZfbnJdID09IDAgfHwgCi0JICAgICAgICAgICAgICAgICBiYW5kaW5nZmlsdGVyW2Rldl9ucl0gPT0gMSkKLQkgICAgICAgICAgICAgICAgPyAodTgpYmFuZGluZ2ZpbHRlcltkZXZfbnJdIDogVzk5NjhDRl9CQU5ESU5HRklMVEVSOworCWNhbS0+YmFuZGZpbHQgPSAoYmFuZGluZ2ZpbHRlcltkZXZfbnJdID09IDAgfHwKKwkJCSBiYW5kaW5nZmlsdGVyW2Rldl9ucl0gPT0gMSkKKwkJCT8gKHU4KWJhbmRpbmdmaWx0ZXJbZGV2X25yXSA6IFc5OTY4Q0ZfQkFORElOR0ZJTFRFUjsKIAogCWNhbS0+YmFja2xpZ2h0ID0gKGJhY2tsaWdodFtkZXZfbnJdID09IDAgfHwgYmFja2xpZ2h0W2Rldl9ucl0gPT0gMSkKLQkgICAgICAgICAgICAgICAgID8gKHU4KWJhY2tsaWdodFtkZXZfbnJdIDogVzk5NjhDRl9CQUNLTElHSFQ7CisJCQkgPyAodTgpYmFja2xpZ2h0W2Rldl9ucl0gOiBXOTk2OENGX0JBQ0tMSUdIVDsKIAogCWNhbS0+Y2xvY2tkaXYgPSAoY2xvY2tkaXZbZGV2X25yXSA9PSAtMSB8fCBjbG9ja2RpdltkZXZfbnJdID49IDApCi0JICAgICAgICAgICAgICAgID8gKHM4KWNsb2NrZGl2W2Rldl9ucl0gOiBXOTk2OENGX0NMT0NLRElWOworCQkJPyAoczgpY2xvY2tkaXZbZGV2X25yXSA6IFc5OTY4Q0ZfQ0xPQ0tESVY7CiAKIAljYW0tPm1pcnJvciA9IChtaXJyb3JbZGV2X25yXSA9PSAwIHx8IG1pcnJvcltkZXZfbnJdID09IDEpCi0JICAgICAgICAgICAgICA/ICh1OCltaXJyb3JbZGV2X25yXSA6IFc5OTY4Q0ZfTUlSUk9SOworCQkgICAgICA/ICh1OCltaXJyb3JbZGV2X25yXSA6IFc5OTY4Q0ZfTUlSUk9SOwogCiAJY2FtLT5tb25vY2hyb21lID0gKG1vbm9jaHJvbWVbZGV2X25yXSA9PSAwIHx8IG1vbm9jaHJvbWVbZGV2X25yXSA9PSAxKQotCSAgICAgICAgICAgICAgICAgID8gbW9ub2Nocm9tZVtkZXZfbnJdIDogVzk5NjhDRl9NT05PQ0hST01FOworCQkJICA/IG1vbm9jaHJvbWVbZGV2X25yXSA6IFc5OTY4Q0ZfTU9OT0NIUk9NRTsKIAogCWNhbS0+cGljdHVyZS5icmlnaHRuZXNzID0gKHUxNilicmlnaHRuZXNzW2Rldl9ucl07CiAJY2FtLT5waWN0dXJlLmh1ZSA9ICh1MTYpaHVlW2Rldl9ucl07CkBAIC0yNTEzLDcgKzI1MTksNyBAQAogCWNhbS0+cGljdHVyZS5kZXB0aCA9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgoY2FtLT5waWN0dXJlLnBhbGV0dGUpOwogCiAJY2FtLT5mb3JjZV9yZ2IgPSAoZm9yY2VfcmdiW2Rldl9ucl0gPT0gMCB8fCBmb3JjZV9yZ2JbZGV2X25yXSA9PSAxKQotCSAgICAgICAgICAgICAgICAgPyAodTgpZm9yY2VfcmdiW2Rldl9ucl0gOiBXOTk2OENGX0ZPUkNFX1JHQjsKKwkJCSA/ICh1OClmb3JjZV9yZ2JbZGV2X25yXSA6IFc5OTY4Q0ZfRk9SQ0VfUkdCOwogCiAJY2FtLT53aW5kb3cueCA9IDA7CiAJY2FtLT53aW5kb3cueSA9IDA7CkBAIC0yNTI1LDE2ICsyNTMxLDE2IEBACiAKIAlEQkcoMywgIiVzIGNvbmZpZ3VyZWQgd2l0aCBzZXR0aW5ncyAjJXU6IiwKIAkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGRldl9ucikKLQkKKwogCURCRygzLCAiLSBEYXRhIHBhY2tldCBzaXplIGZvciBVU0IgaXNvY2hybm91cyB0cmFuc2ZlcjogJXUgYnl0ZXMiLAogCSAgICB3TWF4UGFja2V0U2l6ZVtjYW0tPmFsdHNldHRpbmctMV0pCi0JCisKIAlEQkcoMywgIi0gTnVtYmVyIG9mIHJlcXVlc3RlZCB2aWRlbyBmcmFtZSBidWZmZXJzOiAldSIsCiAJICAgIGNhbS0+bWF4X2J1ZmZlcnMpCiAKIAlpZiAoY2FtLT5kb3VibGVfYnVmZmVyKQogCQlEQkcoMywgIi0gSGFyZHdhcmUgZG91YmxlIGJ1ZmZlcmluZyBlbmFibGVkIikKLQllbHNlIAorCWVsc2UKIAkJREJHKDMsICItIEhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmcgZGlzYWJsZWQiKQogCiAJaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMCkKQEAgLTI2NDIsMTIgKzI2NDgsMTIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBSZWxlYXNlIHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgZHJpdmVyLgotICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBkaXNjb25uZWN0IAorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBkaXNjb25uZWN0CiAgIChvciBvbiBjbG9zZSBpZiBkZWFsbG9jYXRpb24gaGFzIGJlZW4gZGVmZXJyZWQpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIHc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCiB7Ci0JZG93bigmdzk5NjhjZl9kZXZsaXN0X3NlbSk7CisJbXV0ZXhfbG9jaygmdzk5NjhjZl9kZXZsaXN0X211dGV4KTsKIAogCURCRygyLCAiVjRMIGRldmljZSBkZXJlZ2lzdGVyZWQ6IC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5taW5vcikKIApAQCAtMjY1OCw3ICsyNjY0LDcgQEAKIAlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKIAlrZnJlZShjYW0tPmRhdGFfYnVmZmVyKTsKIAotCXVwKCZ3OTk2OGNmX2Rldmxpc3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7CiB9CiAKIApAQCAtMjY3OCwxNCArMjY4NCwxNCBAQAogCiAJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CiAKLQlkb3duKCZjYW0tPmRldl9zZW0pOworCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsKIAogCWlmIChjYW0tPnNlbnNvciA9PSBDQ19VTktOT1dOKSB7CiAJCURCRygyLCAiTm8gc3VwcG9ydGVkIGltYWdlIHNlbnNvciBoYXMgYmVlbiBkZXRlY3RlZCBieSB0aGUgIgogCQkgICAgICAgIidvdmNhbWNoaXAnIG1vZHVsZSBmb3IgdGhlICVzICgvZGV2L3ZpZGVvJWQpLiBNYWtlICIKIAkJICAgICAgICJzdXJlIGl0IGlzIGxvYWRlZCAqYmVmb3JlKiAocmUpY29ubmVjdGluZyB0aGUgY2FtZXJhLiIsCiAJCSAgICBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSwgY2FtLT52NGxkZXYtPm1pbm9yKQotCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAJCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTI2OTQsMTQgKzI3MDAsMTQgQEAKIAkJREJHKDIsICIlcyAoL2Rldi92aWRlbyVkKSBoYXMgYmVlbiBhbHJlYWR5IG9jY3VwaWVkIGJ5ICclcyciLAogCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksY2FtLT52NGxkZXYtPm1pbm9yLGNhbS0+Y29tbWFuZCkKIAkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyl8fChmaWxwLT5mX2ZsYWdzICYgT19OREVMQVkpKSB7Ci0JCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCQkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIAkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CiAJCX0KLQkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfZXhjbHVzaXZlKGNhbS0+b3BlbiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmRpc2Nvbm5lY3RlZCB8fAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjYW0tPnVzZXJzKTsKKwkJCQkJCQkgY2FtLT5kaXNjb25uZWN0ZWQgfHwKKwkJCQkJCQkgIWNhbS0+dXNlcnMpOwogCQlpZiAoZXJyKSB7CiAJCQl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwogCQkJcmV0dXJuIGVycjsKQEAgLTI3MTAsNyArMjcxNiw3IEBACiAJCQl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJZG93bigmY2FtLT5kZXZfc2VtKTsKKwkJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCX0KIAogCURCRyg1LCAiT3BlbmluZyAnJXMnLCAvZGV2L3ZpZGVvJWQgLi4uIiwKQEAgLTI3MzksNyArMjc0NSw3IEBACiAKIAlEQkcoNSwgIlZpZGVvIGRldmljZSBpcyBvcGVuIikKIAotCXVwKCZjYW0tPmRldl9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTI3NDcsNyArMjc1Myw3IEBACiBkZWFsbG9jYXRlX21lbW9yeToKIAl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7CiAJREJHKDIsICJGYWlsZWQgdG8gb3BlbiB0aGUgdmlkZW8gZGV2aWNlIikKLQl1cCgmY2FtLT5kZXZfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKIAl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yNzU5LDEzICsyNzY1LDEzIEBACiAKIAljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKIAotCWRvd24oJmNhbS0+ZGV2X3NlbSk7IC8qIHByZXZlbnQgZGlzY29ubmVjdCgpIHRvIGJlIGNhbGxlZCAqLworCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsgLyogcHJldmVudCBkaXNjb25uZWN0KCkgdG8gYmUgY2FsbGVkICovCiAKIAl3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKTsKIAogCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkgewogCQl3OTk2OGNmX3JlbGVhc2VfcmVzb3VyY2VzKGNhbSk7Ci0JCXVwKCZjYW0tPmRldl9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKIAkJa2ZyZWUoY2FtKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjc3NSw3ICsyNzgxLDcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+b3BlbiwgMSk7CiAKIAlEQkcoNSwgIlZpZGVvIGRldmljZSBjbG9zZWQiKQotCXVwKCZjYW0tPmRldl9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzkyLDE4ICsyNzk4LDE4IEBACiAJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQlyZXR1cm4gLUVXT1VMREJMT0NLOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKIAkJREJHKDIsICJEZXZpY2Ugbm90IHByZXNlbnQiKQotCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmIChjYW0tPm1pc2NvbmZpZ3VyZWQpIHsKIAkJREJHKDIsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIpCi0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yODE0LDE1ICsyODIwLDE1IEBACiAJCXc5OTY4Y2ZfcHVzaF9mcmFtZShjYW0sIDEpOwogCiAJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNhbS0+d2FpdF9xdWV1ZSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5mcmFtZVswXS5zdGF0dXMgPT0gRl9SRUFEWSB8fAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmZyYW1lWzFdLnN0YXR1cyA9PSBGX1JFQURZIHx8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkKTsKKwkJCQkgICAgICAgY2FtLT5mcmFtZVswXS5zdGF0dXMgPT0gRl9SRUFEWSB8fAorCQkJCSAgICAgICBjYW0tPmZyYW1lWzFdLnN0YXR1cyA9PSBGX1JFQURZIHx8CisJCQkJICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkKTsKIAlpZiAoZXJyKSB7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0yODM2LDcgKzI4NDIsNyBAQAogCiAJaWYgKGNvcHlfdG9fdXNlcihidWYsIGZyLT5idWZmZXIsIGNvdW50KSkgewogCQlmci0+c3RhdHVzID0gRl9VTlVTRUQ7Ci0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCSpmX3BvcyArPSBjb3VudDsKQEAgLTI4NDUsNyArMjg1MSw3IEBACiAKIAlEQkcoNSwgIiV6dSBieXRlcyByZWFkIiwgY291bnQpCiAKLQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTI4NTMsMTIgKzI4NTksMTIgQEAKIHN0YXRpYyBpbnQgdzk5NjhjZl9tbWFwKHN0cnVjdCBmaWxlKiBmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisJCQkJICAgICB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKIAl1bnNpZ25lZCBsb25nIHZzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCSAgICAgICAgICAgICAgcHNpemUgPSBjYW0tPm5idWZmZXJzICogY2FtLT5mcmFtZVswXS5zaXplLAotCSAgICAgICAgICAgICAgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0LAotCSAgICAgICAgICAgICAgcG9zID0gKHVuc2lnbmVkIGxvbmcpY2FtLT5mcmFtZVswXS5idWZmZXIsCi0JICAgICAgICAgICAgICBwYWdlOworCQkgICAgICBwc2l6ZSA9IGNhbS0+bmJ1ZmZlcnMgKiBjYW0tPmZyYW1lWzBdLnNpemUsCisJCSAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydCwKKwkJICAgICAgcG9zID0gKHVuc2lnbmVkIGxvbmcpY2FtLT5mcmFtZVswXS5idWZmZXIsCisJCSAgICAgIHBhZ2U7CiAKIAlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKIAkJREJHKDIsICJEZXZpY2Ugbm90IHByZXNlbnQiKQpAQCAtMjg5Miw1MSArMjg5OCw1MSBAQAogCiBzdGF0aWMgaW50CiB3OTk2OGNmX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKwkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKIAlpbnQgZXJyOwogCiAJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkgewogCQlEQkcoMiwgIkRldmljZSBub3QgcHJlc2VudCIpCi0JCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGNhbS0+bWlzY29uZmlndXJlZCkgewogCQlEQkcoMiwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKLQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAllcnIgPSB3OTk2OGNmX3Y0bF9pb2N0bChpbm9kZSwgZmlscCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwogCi0JdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIAogCiBzdGF0aWMgaW50IHc5OTY4Y2ZfdjRsX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKiBhcmcpCiB7CiAJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CiAJY29uc3QgY2hhciogdjRsMV9pb2N0bHNbXSA9IHsKLQkJIj8iLCAiQ0dBUCIsICJHQ0hBTiIsICJTQ0hBTiIsICJHVFVORVIiLCAiU1RVTkVSIiwgCisJCSI/IiwgIkNHQVAiLCAiR0NIQU4iLCAiU0NIQU4iLCAiR1RVTkVSIiwgIlNUVU5FUiIsCiAJCSJHUElDVCIsICJTUElDVCIsICJDQ0FQVFVSRSIsICJHV0lOIiwgIlNXSU4iLCAiR0ZCVUYiLAogCQkiU0ZCVUYiLCAiS0VZIiwgIkdGUkVRIiwgIlNGUkVRIiwgIkdBVURJTyIsICJTQVVESU8iLAogCQkiU1lOQyIsICJNQ0FQVFVSRSIsICJHTUJVRiIsICJHVU5JVCIsICJHQ0FQVFVSRSIsICJTQ0FQVFVSRSIsCi0JCSJTUExBWU1PREUiLCAiU1dSSVRFTU9ERSIsICJHUExBWUlORk8iLCAiU01JQ1JPQ09ERSIsIAotCQkiR1ZCSUZNVCIsICJTVkJJRk1UIiAKKwkJIlNQTEFZTU9ERSIsICJTV1JJVEVNT0RFIiwgIkdQTEFZSU5GTyIsICJTTUlDUk9DT0RFIiwKKwkJIkdWQklGTVQiLCAiU1ZCSUZNVCIKIAl9OwogCiAJI2RlZmluZSBWNEwxX0lPQ1RMKGNtZCkgXAotCSAgICAgICAgKChfSU9DX05SKChjbWQpKSA8IEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpKSA/IFwKLQkgICAgICAgIHY0bDFfaW9jdGxzW19JT0NfTlIoKGNtZCkpXSA6ICI/IikKKwkJKChfSU9DX05SKChjbWQpKSA8IEFSUkFZX1NJWkUodjRsMV9pb2N0bHMpKSA/IFwKKwkJdjRsMV9pb2N0bHNbX0lPQ19OUigoY21kKSldIDogIj8iKQogCiAJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CiAKQEAgLTI5NTEsMTQgKzI5NTcsMTQgQEAKIAkJCS5taW53aWR0aCA9IGNhbS0+bWlud2lkdGgsCiAJCQkubWluaGVpZ2h0ID0gY2FtLT5taW5oZWlnaHQsCiAJCX07Ci0JCXNwcmludGYoY2FwLm5hbWUsICJXOTk2Wzg3XUNGIFVTQiBDYW1lcmEgIyVkIiwgCi0JCSAgICAgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJc3ByaW50ZihjYXAubmFtZSwgIlc5OTZbODddQ0YgVVNCIENhbWVyYSAjJWQiLAorCQkJY2FtLT52NGxkZXYtPm1pbm9yKTsKIAkJY2FwLm1heHdpZHRoID0gKGNhbS0+dXBzY2FsaW5nICYmIHc5OTY4Y2ZfdnBwKQotCQkgICAgICAgICAgICAgICA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX1dJRFRILCBjYW0tPm1heHdpZHRoKSAKLQkJICAgICAgICAgICAgICAgICA6IGNhbS0+bWF4d2lkdGg7CisJCQkgICAgICAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9XSURUSCwgY2FtLT5tYXh3aWR0aCkKKwkJCQkgOiBjYW0tPm1heHdpZHRoOwogCQljYXAubWF4aGVpZ2h0ID0gKGNhbS0+dXBzY2FsaW5nICYmIHc5OTY4Y2ZfdnBwKQotCQkgICAgICAgICAgICAgICAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9IRUlHSFQsIGNhbS0+bWF4aGVpZ2h0KQotCQkgICAgICAgICAgICAgICAgICA6IGNhbS0+bWF4aGVpZ2h0OworCQkJCT8gbWF4KCh1MTYpVzk5NjhDRl9NQVhfSEVJR0hULCBjYW0tPm1heGhlaWdodCkKKwkJCQkgIDogY2FtLT5tYXhoZWlnaHQ7CiAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYXAsIHNpemVvZihjYXApKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMzAyMyw3ICszMDI5LDcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZwaWN0LCBhcmcsIHNpemVvZihwaWN0KSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAoIChjYW0tPmZvcmNlX3BhbGV0dGUgfHwgIXc5OTY4Y2ZfdnBwKSAKKwkJaWYgKCAoY2FtLT5mb3JjZV9wYWxldHRlIHx8ICF3OTk2OGNmX3ZwcCkKIAkJICAgICAmJiBwaWN0LnBhbGV0dGUgIT0gY2FtLT5waWN0dXJlLnBhbGV0dGUgKSB7CiAJCQlEQkcoNCwgIlBhbGV0dGUgJXMgcmVqZWN0ZWQ6IG9ubHkgJXMgaXMgYWxsb3dlZCIsCiAJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSwKQEAgLTMwNDAsMjQgKzMwNDYsMjQgQEAKIAkJaWYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpIHsKIAkJICAgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAwKSB7CiAJCSAgICAgIGlmICh3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihwaWN0LnBhbGV0dGUpKSB7Ci0JCSAgICAgICAgIERCRyg0LCAiRGVjb21wcmVzc2lvbiBkaXNhYmxlZDogcGFsZXR0ZSAlcyBpcyBub3QgIgotCQkgICAgICAgICAgICAgICAgImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCi0JCSAgICAgICAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwaWN0LnBhbGV0dGUpKQotCQkgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJCSBEQkcoNCwgIkRlY29tcHJlc3Npb24gZGlzYWJsZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKKwkJCQkiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKKwkJCSAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSkKKwkJCSByZXR1cm4gLUVJTlZBTDsKIAkJICAgICAgfQogCQkgICB9IGVsc2UgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAxKSB7CiAJCSAgICAgIGlmICghdzk5NjhjZl9uZWVkX2RlY29tcHJlc3Npb24ocGljdC5wYWxldHRlKSkgewotCQkgICAgICAgICBEQkcoNCwgIkRlY29tcHJlc3Npb24gZm9yY2VkOiBwYWxldHRlICVzIGlzIG5vdCAiCi0JCSAgICAgICAgICAgICAgICAiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKLQkJICAgICAgICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSkpCi0JCSAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJIERCRyg0LCAiRGVjb21wcmVzc2lvbiBmb3JjZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKKwkJCQkiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKKwkJCSAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSkKKwkJCSByZXR1cm4gLUVJTlZBTDsKIAkJICAgICAgfQogCQkgICB9CiAJCX0KIAogCQlpZiAocGljdC5kZXB0aCAhPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKHBpY3QucGFsZXR0ZSkpIHsKIAkJCURCRyg0LCAiUmVxdWVzdGVkIGRlcHRoICV1IGJwcCBpcyBub3QgdmFsaWQgZm9yICVzICIKLQkJCSAgICAgICAicGFsZXR0ZTogaWdub3JlZCBhbmQgY2hhbmdlZCB0byAldSBicHAiLCAKKwkJCSAgICAgICAicGFsZXR0ZTogaWdub3JlZCBhbmQgY2hhbmdlZCB0byAldSBicHAiLAogCQkJICAgIHBpY3QuZGVwdGgsIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSksCiAJCQkgICAgdzk5NjhjZl92YWxpZF9kZXB0aChwaWN0LnBhbGV0dGUpKQogCQkJcGljdC5kZXB0aCA9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgocGljdC5wYWxldHRlKTsKQEAgLTMwNjgsOSArMzA3NCw5IEBACiAJCQkgICB8fCBjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgewogCQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZQogCQkJCSAgICAgICggY2FtLT53YWl0X3F1ZXVlLAotCQkJCSAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQgfHwKLQkJCQkgICAgICAgICghKmNhbS0+cmVxdWVzdGVkX2ZyYW1lICYmCi0JCQkJICAgICAgICAgIWNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSApOworCQkJCQljYW0tPmRpc2Nvbm5lY3RlZCB8fAorCQkJCQkoISpjYW0tPnJlcXVlc3RlZF9mcmFtZSAmJgorCQkJCQkgIWNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSApOwogCQkJCWlmIChlcnIpCiAJCQkJCXJldHVybiBlcnI7CiAJCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQpAQCAtMzExMCw3ICszMTE2LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmICgoZXJyID0gdzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoY2FtLCAodTE2Kikmd2luLndpZHRoLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYqKSZ3aW4uaGVpZ2h0KSkpIHsKKwkJCQkJCSAgICAgICh1MTYqKSZ3aW4uaGVpZ2h0KSkpIHsKIAkJCURCRyg0LCAiUmVzb2x1dGlvbiBub3Qgc3VwcG9ydGVkICgldXgldSkuICIKIAkJCSAgICAgICAiVklESU9DU1dJTiBmYWlsZWQiLCB3aW4ud2lkdGgsIHdpbi5oZWlnaHQpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMzEyNCw5ICszMTMwLDkgQEAKIAkJCSAgIHx8IGNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSB7CiAJCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlCiAJCQkJICAgICAgKCBjYW0tPndhaXRfcXVldWUsCi0JCQkJICAgICAgICBjYW0tPmRpc2Nvbm5lY3RlZCB8fAotCQkJCSAgICAgICAgKCEqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUgJiYKLQkJCQkgICAgICAgICAhY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpICk7CisJCQkJCWNhbS0+ZGlzY29ubmVjdGVkIHx8CisJCQkJCSghKmNhbS0+cmVxdWVzdGVkX2ZyYW1lICYmCisJCQkJCSAhY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpICk7CiAJCQkJaWYgKGVycikKIAkJCQkJcmV0dXJuIGVycjsKIAkJCQlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpCkBAIC0zMTY5LDcgKzMxNzUsNyBAQAogCQltYnVmLmZyYW1lcyA9IGNhbS0+bmJ1ZmZlcnM7CiAJCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspCiAJCQltYnVmLm9mZnNldHNbaV0gPSAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lW2ldLmJ1ZmZlciAtCi0JCQkgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lWzBdLmJ1ZmZlcjsKKwkJCQkJICAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lWzBdLmJ1ZmZlcjsKIAogCQlpZiAoY29weV90b191c2VyKGFyZywgJm1idWYsIHNpemVvZihtYnVmKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTMxODgsNyArMzE5NCw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlEQkcoNiwgIlZJRElPQ01DQVBUVVJFIGNhbGxlZDogZnJhbWUgIyV1LCBmb3JtYXQ9JXMsICVkeCVkIiwKLQkJICAgIG1tYXAuZnJhbWUsIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSwgCisJCSAgICBtbWFwLmZyYW1lLCBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCksCiAJCSAgICBtbWFwLndpZHRoLCBtbWFwLmhlaWdodCkKIAogCQlpZiAobW1hcC5mcmFtZSA+PSBjYW0tPm5idWZmZXJzKSB7CkBAIC0zMTk3LDcgKzMyMDMsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAobW1hcC5mb3JtYXQhPWNhbS0+cGljdHVyZS5wYWxldHRlICYmIAorCQlpZiAobW1hcC5mb3JtYXQhPWNhbS0+cGljdHVyZS5wYWxldHRlICYmCiAJCSAgICAoY2FtLT5mb3JjZV9wYWxldHRlIHx8ICF3OTk2OGNmX3ZwcCkpIHsKIAkJCURCRyg0LCAiUGFsZXR0ZSAlcyByZWplY3RlZDogb25seSAlcyBpcyBhbGxvd2VkIiwKIAkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCksCkBAIC0zMjA3LDcgKzMyMTMsNyBAQAogCiAJCWlmICghdzk5NjhjZl92YWxpZF9wYWxldHRlKG1tYXAuZm9ybWF0KSkgewogCQkJREJHKDQsICJQYWxldHRlICVzIG5vdCBzdXBwb3J0ZWQuICIKLQkJCSAgICAgICAiVklESU9DTUNBUFRVUkUgZmFpbGVkIiwgCisJCQkgICAgICAgIlZJRElPQ01DQVBUVVJFIGZhaWxlZCIsCiAJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTMyMTUsMjMgKzMyMjEsMjMgQEAKIAkJaWYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpIHsKIAkJICAgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAwKSB7CiAJCSAgICAgIGlmICh3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihtbWFwLmZvcm1hdCkpIHsKLQkJICAgICAgICAgREJHKDQsICJEZWNvbXByZXNzaW9uIGRpc2FibGVkOiBwYWxldHRlICVzIGlzIG5vdCAiCi0JCSAgICAgICAgICAgICAgICAiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKLQkJICAgICAgICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSkKLQkJICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQkgREJHKDQsICJEZWNvbXByZXNzaW9uIGRpc2FibGVkOiBwYWxldHRlICVzIGlzIG5vdCAiCisJCQkJImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCisJCQkgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSkKKwkJCSByZXR1cm4gLUVJTlZBTDsKIAkJICAgICAgfQogCQkgICB9IGVsc2UgaWYgKGNhbS0+ZGVjb21wcmVzc2lvbiA9PSAxKSB7CiAJCSAgICAgIGlmICghdzk5NjhjZl9uZWVkX2RlY29tcHJlc3Npb24obW1hcC5mb3JtYXQpKSB7Ci0JCSAgICAgICAgIERCRyg0LCAiRGVjb21wcmVzc2lvbiBmb3JjZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKLQkJICAgICAgICAgICAgICAgICJhbGxvd2VkLiBWSURJT0NTUElDVCBmYWlsZWQiLAotCQkgICAgICAgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQotCQkgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJCSBEQkcoNCwgIkRlY29tcHJlc3Npb24gZm9yY2VkOiBwYWxldHRlICVzIGlzIG5vdCAiCisJCQkJImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCisJCQkgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSkKKwkJCSByZXR1cm4gLUVJTlZBTDsKIAkJICAgICAgfQogCQkgICB9CiAJCX0KIAotCQlpZiAoKGVyciA9IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKGNhbSwgKHUxNiopJm1tYXAud2lkdGgsIAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYqKSZtbWFwLmhlaWdodCkpKSB7CisJCWlmICgoZXJyID0gdzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoY2FtLCAodTE2KikmbW1hcC53aWR0aCwKKwkJCQkJCSAgICAgICh1MTYqKSZtbWFwLmhlaWdodCkpKSB7CiAJCQlEQkcoNCwgIlJlc29sdXRpb24gbm90IHN1cHBvcnRlZCAoJWR4JWQpLiAiCiAJCQkgICAgICAgIlZJRElPQ01DQVBUVVJFIGZhaWxlZCIsCiAJCQkgICAgbW1hcC53aWR0aCwgbW1hcC5oZWlnaHQpCkBAIC0zMjUyLDEyICszMjU4LDEyIEBACiAJCQkJREJHKDYsICJWSURJT0NNQ0FQVFVSRS4gQ2hhbmdlIHNldHRpbmdzIGZvciAiCiAJCQkJICAgICAgICJmcmFtZSAjJXU6ICVkeCVkLCBmb3JtYXQgJXMuIFdhaXQuLi4iLAogCQkJCSAgICBtbWFwLmZyYW1lLCBtbWFwLndpZHRoLCBtbWFwLmhlaWdodCwKLQkJCSAgICAgICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIG1tYXAuZm9ybWF0KSkKKwkJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQogCQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZQogCQkJCSAgICAgICggY2FtLT53YWl0X3F1ZXVlLAotCQkJCSAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQgfHwKLQkJCQkgICAgICAgICghKmNhbS0+cmVxdWVzdGVkX2ZyYW1lICYmCi0JCQkJICAgICAgICAgIWNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSApOworCQkJCQljYW0tPmRpc2Nvbm5lY3RlZCB8fAorCQkJCQkoISpjYW0tPnJlcXVlc3RlZF9mcmFtZSAmJgorCQkJCQkgIWNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSApOwogCQkJCWlmIChlcnIpCiAJCQkJCXJldHVybiBlcnI7CiAJCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQpAQCAtMzI3NCw3ICszMjgwLDcgQEAKIAkJCQlnb3RvIGlvY3RsX2ZhaWw7CiAKIAkJCS8qIFRoaXMgYmVmb3JlIHNldF93aW5kb3cgKi8KLQkJCWlmICh3OTk2OGNmX3NldF9waWN0dXJlKGNhbSwgcGljdCkpIAorCQkJaWYgKHc5OTY4Y2Zfc2V0X3BpY3R1cmUoY2FtLCBwaWN0KSkKIAkJCQlnb3RvIGlvY3RsX2ZhaWw7CiAKIAkJCWlmICh3OTk2OGNmX3NldF93aW5kb3coY2FtLCB3aW4pKQpAQCAtMzI4NiwxMCArMzI5MiwxMCBAQAogCQl9IGVsc2UgCWlmIChmci0+cXVldWVkKSB7CiAKIAkJCURCRyg2LCAiV2FpdCB1bnRpbCBmcmFtZSAjJXUgaXMgZnJlZSIsIG1tYXAuZnJhbWUpCi0JCQkKLQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYW0tPndhaXRfcXVldWUsIAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkIHx8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFmci0+cXVldWVkKSk7CisKKwkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjYW0tPndhaXRfcXVldWUsCisJCQkJCQkgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQgfHwKKwkJCQkJCSAgICAgICAoIWZyLT5xdWV1ZWQpKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKQEAgLTMzMjksOSArMzMzNSw5IEBACiAJCQl9CiAJCWNhc2UgRl9FUlJPUjoKIAkJY2FzZSBGX0dSQUJCSU5HOgotCQkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNhbS0+d2FpdF9xdWV1ZSwgCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyLT5zdGF0dXMgPT0gRl9SRUFEWSkKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjYW0tPmRpc2Nvbm5lY3RlZCk7CisJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53YWl0X3F1ZXVlLAorCQkJCQkJICAgICAgIChmci0+c3RhdHVzID09IEZfUkVBRFkpCisJCQkJCQkgICAgICAgfHwgY2FtLT5kaXNjb25uZWN0ZWQpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQpAQCAtMzQzMyw3ICszNDM5LDcgQEAKIAkJREJHKDQsICJVbnN1cHBvcnRlZCBWNEwxIElPQ3RsOiBWSURJT0MlcyAiCiAJCSAgICAgICAiKHR5cGUgMHglMDFYLCAiCiAJCSAgICAgICAibi4gMHglMDFYLCAiCi0JCSAgICAgICAiZGlyLiAweCUwMVgsICIgCisJCSAgICAgICAiZGlyLiAweCUwMVgsICIKIAkJICAgICAgICJzaXplIDB4JTAyWCkiLAogCQkgICAgVjRMMV9JT0NUTChjbWQpLAogCQkgICAgX0lPQ19UWVBFKGNtZCksX0lPQ19OUihjbWQpLF9JT0NfRElSKGNtZCksX0lPQ19TSVpFKGNtZCkpCkBAIC0zNDkzLDIwICszNDk5LDE4IEBACiAJICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSB3aW5ib25kX2lkX3RhYmxlWzBdLmlkUHJvZHVjdCkKIAkJbW9kX2lkID0gVzk5NjhDRl9NT0RfQ0xWQldHUDsgLyogc2VlIGNhbWxpc3RbXSB0YWJsZSAqLwogCWVsc2UgaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICA9PSB3aW5ib25kX2lkX3RhYmxlWzFdLmlkVmVuZG9yICYmCi0JICAgICAgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IHdpbmJvbmRfaWRfdGFibGVbMV0uaWRQcm9kdWN0KQorCQkgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IHdpbmJvbmRfaWRfdGFibGVbMV0uaWRQcm9kdWN0KQogCQltb2RfaWQgPSBXOTk2OENGX01PRF9HRU5FUklDOyAvKiBzZWUgY2FtbGlzdFtdIHRhYmxlICovCiAJZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKQotCSAgICAgICAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwkJICBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhbSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoY2FtLCAwLCBzaXplb2YoKmNhbSkpOwotCi0JaW5pdF9NVVRFWCgmY2FtLT5kZXZfc2VtKTsKLQlkb3duKCZjYW0tPmRldl9zZW0pOworCW11dGV4X2luaXQoJmNhbS0+ZGV2X211dGV4KTsKKwltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAKIAljYW0tPnVzYmRldiA9IHVkZXY7CiAJLyogTk9URTogYSBsb2NhbCBjb3B5IGlzIHVzZWQgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zICovCkBAIC0zNTE4LDEwICszNTIyLDEwIEBACiAJCXNpbWNhbXMgPSBXOTk2OENGX1NJTUNBTVM7CiAKIAkvKiBIb3cgbWFueSBjYW1lcmFzIGFyZSBjb25uZWN0ZWQgPyAqLwotCWRvd24oJnc5OTY4Y2ZfZGV2bGlzdF9zZW0pOworCW11dGV4X2xvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaChwdHIsICZ3OTk2OGNmX2Rldl9saXN0KQogCQlzYysrOwotCXVwKCZ3OTk2OGNmX2Rldmxpc3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7CiAKIAlpZiAoc2MgPj0gc2ltY2FtcykgewogCQlEQkcoMiwgIkRldmljZSByZWplY3RlZDogdG9vIG1hbnkgY29ubmVjdGVkIGNhbWVyYXMgIgpAQCAtMzUzMiwyMSArMzUzNiwxOSBAQAogCiAKIAkvKiBBbGxvY2F0ZSAyIGJ5dGVzIG9mIG1lbW9yeSBmb3IgY2FtZXJhIGNvbnRyb2wgVVNCIHRyYW5zZmVycyAqLwotCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpKSkgeworCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSBremFsbG9jKDIsIEdGUF9LRVJORUwpKSkgewogCQlEQkcoMSwiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjYW1lcmEgY29udHJvbCB0cmFuc2ZlcnMiKQogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQotCW1lbXNldChjYW0tPmNvbnRyb2xfYnVmZmVyLCAwLCAyKTsKIAogCS8qIEFsbG9jYXRlIDggYnl0ZXMgb2YgbWVtb3J5IGZvciBVU0IgZGF0YSB0cmFuc2ZlcnMgdG8gdGhlIEZTQiAqLwotCWlmICghKGNhbS0+ZGF0YV9idWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpKSkgeworCWlmICghKGNhbS0+ZGF0YV9idWZmZXIgPSBremFsbG9jKDgsIEdGUF9LRVJORUwpKSkgewogCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSAiCiAJCSAgICAgICAidHJhbnNmZXJzIHRvIHRoZSBGU0IiKQogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CiAJfQotCW1lbXNldChjYW0tPmRhdGFfYnVmZmVyLCAwLCA4KTsKIAogCS8qIFJlZ2lzdGVyIHRoZSBWNEwgZGV2aWNlICovCiAJY2FtLT52NGxkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKQEAgLTM1NjcsNyArMzU2OSw3IEBACiAJY2FtLT52NGxkZXYtPmRldiA9ICZjYW0tPmRldjsKIAogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fbnJbZGV2X25yXSk7CisJCQkJICAgIHZpZGVvX25yW2Rldl9ucl0pOwogCWlmIChlcnIpIHsKIAkJREJHKDEsICJWNEwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQiKQogCQlpZiAoZXJyID09IC1FTkZJTEUgJiYgdmlkZW9fbnJbZGV2X25yXSA9PSAtMSkKQEAgLTM1ODMsOSArMzU4NSw5IEBACiAJdzk5NjhjZl9jb25maWd1cmVfY2FtZXJhKGNhbSwgdWRldiwgbW9kX2lkLCBkZXZfbnIpOwogCiAJLyogQWRkIGEgbmV3IGVudHJ5IGludG8gdGhlIGxpc3Qgb2YgVjRMIHJlZ2lzdGVyZWQgZGV2aWNlcyAqLwotCWRvd24oJnc5OTY4Y2ZfZGV2bGlzdF9zZW0pOworCW11dGV4X2xvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7CiAJbGlzdF9hZGQoJmNhbS0+djRsbGlzdCwgJnc5OTY4Y2ZfZGV2X2xpc3QpOwotCXVwKCZ3OTk2OGNmX2Rldmxpc3Rfc2VtKTsKKwltdXRleF91bmxvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7CiAJZGV2X25yID0gKGRldl9uciA8IFc5OTY4Q0ZfTUFYX0RFVklDRVMtMSkgPyBkZXZfbnIrMSA6IDA7CiAKIAl3OTk2OGNmX3R1cm5fb25fbGVkKGNhbSk7CkBAIC0zNTkzLDcgKzM1OTUsNyBAQAogCXc5OTY4Y2ZfaTJjX2luaXQoY2FtKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FtKTsKLQl1cCgmY2FtLT5kZXZfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIAogZmFpbDogLyogRnJlZSB1bnVzZWQgbWVtb3J5ICovCkBAIC0zNjAxLDcgKzM2MDMsNyBAQAogCWtmcmVlKGNhbS0+ZGF0YV9idWZmZXIpOwogCWlmIChjYW0tPnY0bGRldikKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2FtLT52NGxkZXYpOwotCXVwKCZjYW0tPmRldl9zZW0pOworCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCWtmcmVlKGNhbSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTM2MDksMTQgKzM2MTEsMTQgQEAKIAogc3RhdGljIHZvaWQgdzk5NjhjZl91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSogaW50ZikKIHsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IAorCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0KIAkgICAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCiAJZG93bl93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIAogCWlmIChjYW0pIHsKIAkJLyogUHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIGRhdGEgKi8KLQkJZG93bigmY2FtLT5kZXZfc2VtKTsgCisJCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsKIAogCQljYW0tPmRpc2Nvbm5lY3RlZCA9IDE7CiAKQEAgLTM2MzUsNyArMzYzNyw3IEBACiAJCX0gZWxzZQogCQkJdzk5NjhjZl9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOwogCi0JCXVwKCZjYW0tPmRldl9zZW0pOworCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKIAogCQlpZiAoIWNhbS0+dXNlcnMpCiAJCQlrZnJlZShjYW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuaAppbmRleCA0N2E2ZmY3Li4yODM2YjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPG1lZGlhL292Y2FtY2hpcC5oPgogCkBAIC02MSw3ICs2MSw3IEBACiAKIC8qIE1heGltdW0gZGF0YSBwYXlsb2FkIHNpemVzIGluIGJ5dGVzIGZvciBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KIHN0YXRpYyBjb25zdCB1MTYgd01heFBhY2tldFNpemVbXSA9IHsxMDIzLCA5NTksIDg5NSwgODMxLCA3NjcsIDcwMywgNjM5LCA1NzUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxMSwgNDQ3LCAzODMsIDMxOSwgMjU1LCAxOTEsIDEyNywgIDYzfTsKKwkJCQkgICAgICA1MTEsIDQ0NywgMzgzLCAzMTksIDI1NSwgMTkxLCAxMjcsICA2M307CiAjZGVmaW5lIFc5OTY4Q0ZfUEFDS0VUX1NJWkUgICAgICAxMDIzIC8qIGFjY29yZGluZyB0byB3TWF4UGFja2V0U2l6ZXNbXSAqLwogI2RlZmluZSBXOTk2OENGX01JTl9QQUNLRVRfU0laRSAgNjMgLyogbWluaW11bSB2YWx1ZSAqLwogI2RlZmluZSBXOTk2OENGX0lTT19QQUNLRVRTICAgICAgNSAvKiBuLm9mIHBhY2tldHMgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVycyAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBXOTk2OENGX01PRFVMRV9OQU1FICAgICAiVjRMIGRyaXZlciBmb3IgVzk5Nls4N11DRiBKUEVHIFVTQiAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR1YWwgTW9kZSBDYW1lcmEgQ2hpcCIKKwkJCQkiRHVhbCBNb2RlIENhbWVyYSBDaGlwIgogI2RlZmluZSBXOTk2OENGX01PRFVMRV9WRVJTSU9OICAiMToxLjMzLWJhc2ljIgogI2RlZmluZSBXOTk2OENGX01PRFVMRV9BVVRIT1IgICAiKEMpIDIwMDItMjAwNCBMdWNhIFJpc29saWEiCiAjZGVmaW5lIFc5OTY4Q0ZfQVVUSE9SX0VNQUlMICAgICI8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iCkBAIC0xOTQsMTQgKzE5NCw2IEBACiAJVlBQX1VZVllfVE9fUkdCWCA9IDB4MDgsCiB9OwogCi1zdGF0aWMgc3RydWN0IHc5OTY4Y2ZfdnBwX3QqIHc5OTY4Y2ZfdnBwOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHc5OTY4Y2ZfdnBwbW9kX3dhaXQpOwotCi1zdGF0aWMgTElTVF9IRUFEKHc5OTY4Y2ZfZGV2X2xpc3QpOyAvKiBoZWFkIG9mIFY0TCByZWdpc3RlcmVkIGNhbWVyYXMgbGlzdCAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgodzk5NjhjZl9kZXZsaXN0X3NlbSk7IC8qIHNlbWFwaG9yZSBmb3IgbGlzdCB0cmF2ZXJzYWwgKi8KLQotc3RhdGljIERFQ0xBUkVfUldTRU0odzk5NjhjZl9kaXNjb25uZWN0KTsgLyogcHJldmVudCByYWNlcyB3aXRoIG9wZW4oKSAqLwotCiAvKiBNYWluIGRldmljZSBkcml2ZXIgc3RydWN0dXJlICovCiBzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgewogCXN0cnVjdCBkZXZpY2UgZGV2OyAvKiBkZXZpY2Ugc3RydWN0dXJlICovCkBAIC0yNzcsMTAgKzI2OSwxMCBAQAogCXN0cnVjdCBpMmNfY2xpZW50KiBzZW5zb3JfY2xpZW50OwogCiAJLyogTG9ja3MgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGRldl9zZW0sICAgIC8qIGZvciBwcm9iZSwgZGlzY29ubmVjdCxvcGVuIGFuZCBjbG9zZSAqLwotCSAgICAgICAgICAgICAgICAgZmlsZW9wX3NlbTsgLyogZm9yIHJlYWQgYW5kIGlvY3RsICovCisJc3RydWN0IG11dGV4IGRldl9tdXRleCwgICAgLyogZm9yIHByb2JlLCBkaXNjb25uZWN0LG9wZW4gYW5kIGNsb3NlICovCisJCQkgZmlsZW9wX211dGV4OyAvKiBmb3IgcmVhZCBhbmQgaW9jdGwgKi8KIAlzcGlubG9ja190IHVyYl9sb2NrLCAgIC8qIGZvciBzdWJtaXRfdXJiKCkgYW5kIHVubGlua191cmIoKSAqLwotCSAgICAgICAgICAgZmxpc3RfbG9jazsgLyogZm9yIHJlcXVlc3RlZCBmcmFtZSBsaXN0IGFjY2Vzc2VzICovCisJCSAgIGZsaXN0X2xvY2s7IC8qIGZvciByZXF1ZXN0ZWQgZnJhbWUgbGlzdCBhY2Nlc3NlcyAqLwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW4sIHdhaXRfcXVldWU7CiAKIAljaGFyIGNvbW1hbmRbMTZdOyAvKiBuYW1lIG9mIHRoZSBwcm9ncmFtIGhvbGRpbmcgdGhlIGRldmljZSAqLwpAQCAtMzA3LDcgKzI5OSw3IEBACiAJCQlkZXZfd2FybigmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCiAJCWVsc2UgaWYgKChsZXZlbCkgPj0gNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkJZGV2X2luZm8oJmNhbS0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCAgICAgICAgICAgICAgXAotCQkJICAgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAorCQkJCSBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIC8qIEZvciBnZW5lcmljIGtlcm5lbCAobm90IGRldmljZSBzcGVjaWZpYykgbWVzc2FnZXMgKi8KQEAgLTMxOSw3ICszMTEsNyBAQAogCQkJcHJfaW5mbygidzk5NjhjZjogIiBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgXAogCQllbHNlIGlmICgobGV2ZWwpID49IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkJCXByX2RlYnVnKCJ3OTk2OGNmOiBbJXM6JWRdICIgZm10ICJcbiIsIF9fRlVOQ1RJT05fXywgIFwKLQkJCSAgICAgICAgIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZl9kZWNvZGVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2ZfZGVjb2Rlci5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfZGVjb2Rlci5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2ZfZGVjb2Rlci5oCmluZGV4IDMxZmFjY2IuLjU5ZGVjYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfZGVjb2Rlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZl9kZWNvZGVyLmgKQEAgLTc4LDkgKzc4LDkgQEAKICNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX05PX0VPSSAgICAgICAgICAtNgogCiBleHRlcm4gdm9pZCB3OTk2OGNmX2luaXRfZGVjb2Rlcih2b2lkKTsKLWV4dGVybiBpbnQgdzk5NjhjZl9jaGVja19oZWFkZXJzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIFBpbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJVRl9TSVpFKTsKLWV4dGVybiBpbnQgdzk5NjhjZl9kZWNvZGUoY29uc3QgY2hhciogUGluLCBjb25zdCB1bnNpZ25lZCBsb25nIEJVRl9TSVpFLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgVywgY29uc3QgdW5zaWduZWQgSCwgY2hhciogUG91dCk7CitleHRlcm4gaW50IHc5OTY4Y2ZfY2hlY2tfaGVhZGVycyhjb25zdCB1bnNpZ25lZCBjaGFyKiBQaW4sCisJCQkJIGNvbnN0IHVuc2lnbmVkIGxvbmcgQlVGX1NJWkUpOworZXh0ZXJuIGludCB3OTk2OGNmX2RlY29kZShjb25zdCBjaGFyKiBQaW4sIGNvbnN0IHVuc2lnbmVkIGxvbmcgQlVGX1NJWkUsCisJCQkgIGNvbnN0IHVuc2lnbmVkIFcsIGNvbnN0IHVuc2lnbmVkIEgsIGNoYXIqIFBvdXQpOwogCiAjZW5kaWYgLyogX1c5OTY4Q0ZfREVDT0RFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZl92cHAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZl92cHAuaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmX3ZwcC5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2ZfdnBwLmgKaW5kZXggZjNiOTFiNy4uODhjOWI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZl92cHAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2ZfdnBwLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlKiBvd25lcjsKIAlpbnQgKCpjaGVja19oZWFkZXJzKShjb25zdCB1bnNpZ25lZCBjaGFyKiwgY29uc3QgdW5zaWduZWQgbG9uZyk7CiAJaW50ICgqZGVjb2RlKShjb25zdCBjaGFyKiwgY29uc3QgdW5zaWduZWQgbG9uZywgY29uc3QgdW5zaWduZWQsCi0JICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCwgY2hhciopOworCQkgICAgICBjb25zdCB1bnNpZ25lZCwgY2hhciopOwogCXZvaWQgKCpzd2FwX3l1dmJ5dGVzKSh2b2lkKiwgdW5zaWduZWQgbG9uZyk7CiAJdm9pZCAoKnV5dnlfdG9fcmdieCkodTgqLCB1bnNpZ25lZCBsb25nLCB1OCosIHUxNiwgdTgpOwogCXZvaWQgKCpzY2FsZV91cCkodTgqLCB1OCosIHUxNiwgdTE2LCB1MTYsIHUxNiwgdTE2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCmluZGV4IDhjYjY0ZjguLmQ4MWE4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYwpAQCAtNzksMjEgKzc5LDI2IEBACiAJCQkgIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3Qgd204Nzc1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB2NGwyX2F1ZGlvICppbnB1dCA9IGFyZzsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKIAlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19TX0FVRElPOgorCWNhc2UgVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkc6CisJCXJvdXRlLT5pbnB1dCA9IHN0YXRlLT5pbnB1dDsKKwkJcm91dGUtPm91dHB1dCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKIAkJLyogVGhlcmUgYXJlIDQgaW5wdXRzIGFuZCBvbmUgb3V0cHV0LiBaZXJvIG9yIG1vcmUgaW5wdXRzCiAJCSAgIGFyZSBtdWx0aXBsZXhlZCB0b2dldGhlciB0byB0aGUgb3V0cHV0LiBIZW5jZSB0aGVyZSBhcmUKIAkJICAgMTYgY29tYmluYXRpb25zLgogCQkgICBJZiBvbmx5IG9uZSBpbnB1dCBpcyBhY3RpdmUgKHRoZSBub3JtYWwgY2FzZSkgdGhlbiB0aGUKIAkJICAgaW5wdXQgdmFsdWVzIDEsIDIsIDQgb3IgOCBzaG91bGQgYmUgdXNlZC4gKi8KLQkJaWYgKGlucHV0LT5pbmRleCA+IDE1KSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgIkludmFsaWQgaW5wdXQgJWQuXG4iLCBpbnB1dC0+aW5kZXgpOworCQlpZiAocm91dGUtPmlucHV0ID4gMTUpIHsKKwkJCXY0bF9lcnIoY2xpZW50LCAiSW52YWxpZCBpbnB1dCAlZC5cbiIsIHJvdXRlLT5pbnB1dCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlzdGF0ZS0+aW5wdXQgPSBpbnB1dC0+aW5kZXg7CisJCXN0YXRlLT5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKIAkJaWYgKHN0YXRlLT5tdXRlZCkKIAkJCWJyZWFrOwogCQl3bTg3NzVfd3JpdGUoY2xpZW50LCBSMjEsIDB4MGMwKTsKQEAgLTEwMiwxMSArMTA3LDYgQEAKIAkJd204Nzc1X3dyaXRlKGNsaWVudCwgUjIxLCAweDEwMCArIHN0YXRlLT5pbnB1dCk7CiAJCWJyZWFrOwogCi0JY2FzZSBWSURJT0NfR19BVURJTzoKLQkJbWVtc2V0KGlucHV0LCAwLCBzaXplb2YoKmlucHV0KSk7Ci0JCWlucHV0LT5pbmRleCA9IHN0YXRlLT5pbnB1dDsKLQkJYnJlYWs7Ci0KIAljYXNlIFZJRElPQ19HX0NUUkw6CiAJCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDkxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK3pjMDMwMS1vYmpzICAgICA6PSB6YzAzMDFfY29yZS5vIHpjMDMwMV9wYXMyMDJiY2IubworCitvYmotJChDT05GSUdfVVNCX1pDMDMwMSkgICAgICAgICs9IHpjMDMwMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDEuaApzaW1pbGFyaXR5IGluZGV4IDY1JQpjb3B5IGZyb20gZHJpdmVycy91c2IvbWVkaWEvc245YzEwMi5oCmNvcHkgdG8gZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxLmgKaW5kZXggMTdkNjBjMS4uYjljOTNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVjRMMiBkcml2ZXIgZm9yIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVjRMMiBkcml2ZXIgZm9yIFpDMDMwMSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgpAQCAtMTgsOCArMTgsOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmbmRlZiBfU045QzEwMl9IXwotI2RlZmluZSBfU045QzEwMl9IXworI2lmbmRlZiBfWkMwMzAxX0hfCisjZGVmaW5lIF9aQzAzMDFfSF8KIAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KQEAgLTMyLDM3ICszMiwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAotI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisjaW5jbHVkZSAiemMwMzAxX3NlbnNvci5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgU045QzEwMl9ERUJVRwotI2RlZmluZSBTTjlDMTAyX0RFQlVHX0xFVkVMICAgICAgIDIKLSNkZWZpbmUgU045QzEwMl9NQVhfREVWSUNFUyAgICAgICA2NAotI2RlZmluZSBTTjlDMTAyX1BSRVNFUlZFX0lNR1NDQUxFIDAKLSNkZWZpbmUgU045QzEwMl9GT1JDRV9NVU5NQVAgICAgICAwCi0jZGVmaW5lIFNOOUMxMDJfTUFYX0ZSQU1FUyAgICAgICAgMzIKLSNkZWZpbmUgU045QzEwMl9VUkJTICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNOOUMxMDJfSVNPX1BBQ0tFVFMgICAgICAgNwotI2RlZmluZSBTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HIDgKLSNkZWZpbmUgU045QzEwMl9VUkJfVElNRU9VVCAgICAgICBtc2Vjc190b19qaWZmaWVzKDIgKiBTTjlDMTAyX0lTT19QQUNLRVRTKQotI2RlZmluZSBTTjlDMTAyX0NUUkxfVElNRU9VVCAgICAgIDMwMAorI2RlZmluZSBaQzAzMDFfREVCVUcKKyNkZWZpbmUgWkMwMzAxX0RFQlVHX0xFVkVMICAgICAgICAgMgorI2RlZmluZSBaQzAzMDFfTUFYX0RFVklDRVMgICAgICAgICA2NAorI2RlZmluZSBaQzAzMDFfRk9SQ0VfTVVOTUFQICAgICAgICAwCisjZGVmaW5lIFpDMDMwMV9NQVhfRlJBTUVTICAgICAgICAgIDMyCisjZGVmaW5lIFpDMDMwMV9DT01QUkVTU0lPTl9RVUFMSVRZIDAKKyNkZWZpbmUgWkMwMzAxX1VSQlMgICAgICAgICAgICAgICAgMgorI2RlZmluZSBaQzAzMDFfSVNPX1BBQ0tFVFMgICAgICAgICA3CisjZGVmaW5lIFpDMDMwMV9BTFRFUk5BVEVfU0VUVElORyAgIDcKKyNkZWZpbmUgWkMwMzAxX1VSQl9USU1FT1VUICAgICAgICAgbXNlY3NfdG9famlmZmllcygyICogWkMwMzAxX0lTT19QQUNLRVRTKQorI2RlZmluZSBaQzAzMDFfQ1RSTF9USU1FT1VUICAgICAgICAxMDAKKyNkZWZpbmUgWkMwMzAxX0ZSQU1FX1RJTUVPVVQgICAgICAgMgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWVudW0gc245YzEwMl9icmlkZ2UgewotCUJSSURHRV9TTjlDMTAxID0gMHgwMSwKLQlCUklER0VfU045QzEwMiA9IDB4MDIsCi0JQlJJREdFX1NOOUMxMDMgPSAweDA0LAotfTsKK1pDMDMwMV9JRF9UQUJMRQorWkMwMzAxX1NFTlNPUl9UQUJMRQogCi1TTjlDMTAyX0lEX1RBQkxFCi1TTjlDMTAyX1NFTlNPUl9UQUJMRQotCi1lbnVtIHNuOWMxMDJfZnJhbWVfc3RhdGUgeworZW51bSB6YzAzMDFfZnJhbWVfc3RhdGUgewogCUZfVU5VU0VELAogCUZfUVVFVUVELAogCUZfR1JBQkJJTkcsCkBAIC03MCw5NyArNjcsODcgQEAKIAlGX0VSUk9SLAogfTsKIAotc3RydWN0IHNuOWMxMDJfZnJhbWVfdCB7CitzdHJ1Y3QgemMwMzAxX2ZyYW1lX3QgewogCXZvaWQqIGJ1Zm1lbTsKIAlzdHJ1Y3QgdjRsMl9idWZmZXIgYnVmOwotCWVudW0gc245YzEwMl9mcmFtZV9zdGF0ZSBzdGF0ZTsKKwllbnVtIHpjMDMwMV9mcmFtZV9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyYW1lOwogCXVuc2lnbmVkIGxvbmcgdm1hX3VzZV9jb3VudDsKIH07CiAKLWVudW0gc245YzEwMl9kZXZfc3RhdGUgeworZW51bSB6YzAzMDFfZGV2X3N0YXRlIHsKIAlERVZfSU5JVElBTElaRUQgPSAweDAxLAogCURFVl9ESVNDT05ORUNURUQgPSAweDAyLAogCURFVl9NSVNDT05GSUdVUkVEID0gMHgwNCwKIH07CiAKLWVudW0gc245YzEwMl9pb19tZXRob2QgeworZW51bSB6YzAzMDFfaW9fbWV0aG9kIHsKIAlJT19OT05FLAogCUlPX1JFQUQsCiAJSU9fTU1BUCwKIH07CiAKLWVudW0gc245YzEwMl9zdHJlYW1fc3RhdGUgeworZW51bSB6YzAzMDFfc3RyZWFtX3N0YXRlIHsKIAlTVFJFQU1fT0ZGLAogCVNUUkVBTV9JTlRFUlJVUFQsCiAJU1RSRUFNX09OLAogfTsKIAotdHlwZWRlZiBjaGFyIHNuOWMxMDNfc29mX2hlYWRlcl90WzE4XTsKLXR5cGVkZWYgY2hhciBzbjljMTAyX3NvZl9oZWFkZXJfdFsxMl07Ci10eXBlZGVmIGNoYXIgc245YzEwMl9lb2ZfaGVhZGVyX3RbNF07Ci0KLXN0cnVjdCBzbjljMTAyX3N5c2ZzX2F0dHIgewotCXU4IHJlZywgaTJjX3JlZzsKLQlzbjljMTAzX3NvZl9oZWFkZXJfdCBmcmFtZV9oZWFkZXI7Ci19OwotCi1zdHJ1Y3Qgc245YzEwMl9tb2R1bGVfcGFyYW0geworc3RydWN0IHpjMDMwMV9tb2R1bGVfcGFyYW0gewogCXU4IGZvcmNlX211bm1hcDsKKwl1MTYgZnJhbWVfdGltZW91dDsKIH07CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKHNuOWMxMDJfc3lzZnNfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTShzbjljMTAyX2Rpc2Nvbm5lY3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0oemMwMzAxX2Rpc2Nvbm5lY3QpOwogCi1zdHJ1Y3Qgc245YzEwMl9kZXZpY2Ugeworc3RydWN0IHpjMDMwMV9kZXZpY2UgewogCXN0cnVjdCB2aWRlb19kZXZpY2UqIHY0bGRldjsKIAotCWVudW0gc245YzEwMl9icmlkZ2UgYnJpZGdlOwotCXN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yOworCXN0cnVjdCB6YzAzMDFfc2Vuc29yIHNlbnNvcjsKIAogCXN0cnVjdCB1c2JfZGV2aWNlKiB1c2JkZXY7Ci0Jc3RydWN0IHVyYiogdXJiW1NOOUMxMDJfVVJCU107Ci0Jdm9pZCogdHJhbnNmZXJfYnVmZmVyW1NOOUMxMDJfVVJCU107CisJc3RydWN0IHVyYiogdXJiW1pDMDMwMV9VUkJTXTsKKwl2b2lkKiB0cmFuc2Zlcl9idWZmZXJbWkMwMzAxX1VSQlNdOwogCXU4KiBjb250cm9sX2J1ZmZlcjsKIAotCXN0cnVjdCBzbjljMTAyX2ZyYW1lX3QgKmZyYW1lX2N1cnJlbnQsIGZyYW1lW1NOOUMxMDJfTUFYX0ZSQU1FU107CisJc3RydWN0IHpjMDMwMV9mcmFtZV90ICpmcmFtZV9jdXJyZW50LCBmcmFtZVtaQzAzMDFfTUFYX0ZSQU1FU107CiAJc3RydWN0IGxpc3RfaGVhZCBpbnF1ZXVlLCBvdXRxdWV1ZTsKIAl1MzIgZnJhbWVfY291bnQsIG5idWZmZXJzLCBucmVhZGJ1ZmZlcnM7CiAKLQllbnVtIHNuOWMxMDJfaW9fbWV0aG9kIGlvOwotCWVudW0gc245YzEwMl9zdHJlYW1fc3RhdGUgc3RyZWFtOworCWVudW0gemMwMzAxX2lvX21ldGhvZCBpbzsKKwllbnVtIHpjMDMwMV9zdHJlYW1fc3RhdGUgc3RyZWFtOwogCiAJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIGNvbXByZXNzaW9uOwogCi0Jc3RydWN0IHNuOWMxMDJfc3lzZnNfYXR0ciBzeXNmczsKLQlzbjljMTAzX3NvZl9oZWFkZXJfdCBzb2ZfaGVhZGVyOwotCXUxNiByZWdbNjNdOworCXN0cnVjdCB6YzAzMDFfbW9kdWxlX3BhcmFtIG1vZHVsZV9wYXJhbTsKIAotCXN0cnVjdCBzbjljMTAyX21vZHVsZV9wYXJhbSBtb2R1bGVfcGFyYW07Ci0KLQllbnVtIHNuOWMxMDJfZGV2X3N0YXRlIHN0YXRlOworCWVudW0gemMwMzAxX2Rldl9zdGF0ZSBzdGF0ZTsKIAl1OCB1c2VyczsKIAotCXN0cnVjdCBzZW1hcGhvcmUgZGV2X3NlbSwgZmlsZW9wX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggZGV2X211dGV4LCBmaWxlb3BfbXV0ZXg7CiAJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW4sIHdhaXRfZnJhbWUsIHdhaXRfc3RyZWFtOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkCi1zbjljMTAyX2F0dGFjaF9zZW5zb3Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCi0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCitzdHJ1Y3QgemMwMzAxX2RldmljZSoKK3pjMDMwMV9tYXRjaF9pZChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0JY2FtLT5zZW5zb3IgPSBzZW5zb3I7Ci0JY2FtLT5zZW5zb3ItPnVzYmRldiA9IGNhbS0+dXNiZGV2OworCXJldHVybiB1c2JfbWF0Y2hfaWQodXNiX2lmbnVtX3RvX2lmKGNhbS0+dXNiZGV2LCAwKSwgaWQpID8gY2FtIDogTlVMTDsKK30KKwordm9pZAoremMwMzAxX2F0dGFjaF9zZW5zb3Ioc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgc3RydWN0IHpjMDMwMV9zZW5zb3IqIHNlbnNvcikKK3sKKwltZW1jcHkoJmNhbS0+c2Vuc29yLCBzZW5zb3IsIHNpemVvZihzdHJ1Y3QgemMwMzAxX3NlbnNvcikpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICN1bmRlZiBEQkcKICN1bmRlZiBLREJHCi0jaWZkZWYgU045QzEwMl9ERUJVRworI2lmZGVmIFpDMDMwMV9ERUJVRwogIwlkZWZpbmUgREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNzAsNyArMTU3LDE3IEBACiAJCQlkZXZfaW5mbygmY2FtLT51c2JkZXYtPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICBcCiAJCWVsc2UgaWYgKChsZXZlbCkgPj0gMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkJZGV2X2luZm8oJmNhbS0+dXNiZGV2LT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgXAotCQkJICAgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAorCQkJCSBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisjCWRlZmluZSBLREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGRlYnVnID49IChsZXZlbCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKChsZXZlbCkgPT0gMSB8fCAobGV2ZWwpID09IDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcl9pbmZvKCJ6YzAzMDE6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICBcCisJCWVsc2UgaWYgKChsZXZlbCkgPT0gMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcHJfZGVidWcoInpjMDMwMTogWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sICAgXAorCQkJCSBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAjCWRlZmluZSBWNExEQkcobGV2ZWwsIG5hbWUsIGNtZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNzgsMjcgKzE3NSwxOCBAQAogCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCXY0bF9wcmludF9pb2N0bChuYW1lLCBjbWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKLSMJZGVmaW5lIEtEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoZGVidWcgPj0gKGxldmVsKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAoKGxldmVsKSA9PSAxIHx8IChsZXZlbCkgPT0gMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCXByX2luZm8oInNuOWMxMDI6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKLQkJZWxzZSBpZiAoKGxldmVsKSA9PSAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlwcl9kZWJ1Zygic245YzEwMjogWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sICBcCi0JCQkgICAgICAgICBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCiAjZWxzZQogIwlkZWZpbmUgREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKQotIwlkZWZpbmUgVjRMREJHKGxldmVsLCBuYW1lLCBjbWQpIGRvIHs7fSB3aGlsZSgwKQogIwlkZWZpbmUgS0RCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7O30gd2hpbGUoMCkKKyMJZGVmaW5lIFY0TERCRyhsZXZlbCwgbmFtZSwgY21kKSBkbyB7O30gd2hpbGUoMCkKICNlbmRpZgogCiAjdW5kZWYgUERCRwogI2RlZmluZSBQREJHKGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZGV2X2luZm8oJmNhbS0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncykKK2Rldl9pbmZvKCZjYW0tPnVzYmRldi0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpCiAKICN1bmRlZiBQREJHRwogI2RlZmluZSBQREJHRyhmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKSAvKiBwbGFjZWhvbGRlciAqLwogCi0jZW5kaWYgLyogX1NOOUMxMDJfSF8gKi8KKyNlbmRpZiAvKiBfWkMwMzAxX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmFkMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwpAQCAtMCwwICsxLDIwNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZpZGVvNExpbnV4MiBkcml2ZXIgZm9yIFpDMDMwMSBJbWFnZSBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEluZm9ybWF0aW9ucyBhYm91dCB0aGUgY2hpcCBpbnRlcm5hbHMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgSTJDIHByb3RvY29sICoKKyAqIGhhdmUgYmVlbiB0YWtlbiBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBaQzAzMHggVmlkZW80TGludXgxICAgICAgICoKKyAqIGRyaXZlciB3cml0dGVuIGJ5IEFuZHJldyBCaXJrZXR0IDxhbmR5QG5vYnVncy5vcmc+ICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJ6YzAzMDEuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFpDMDMwMV9NT0RVTEVfTkFNRSAgICAiVjRMMiBkcml2ZXIgZm9yIFpDMDMwMSAiICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgICAgICAiSW1hZ2UgUHJvY2Vzc29yIGFuZCBDb250cm9sIENoaXAiCisjZGVmaW5lIFpDMDMwMV9NT0RVTEVfQVVUSE9SICAiKEMpIDIwMDYgTHVjYSBSaXNvbGlhIgorI2RlZmluZSBaQzAzMDFfQVVUSE9SX0VNQUlMICAgIjxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIKKyNkZWZpbmUgWkMwMzAxX01PRFVMRV9MSUNFTlNFICJHUEwiCisjZGVmaW5lIFpDMDMwMV9NT0RVTEVfVkVSU0lPTiAiMToxLjAzIgorI2RlZmluZSBaQzAzMDFfTU9EVUxFX1ZFUlNJT05fQ09ERSAgS0VSTkVMX1ZFUlNJT04oMSwgMCwgMykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgemMwMzAxX2lkX3RhYmxlKTsKKworTU9EVUxFX0FVVEhPUihaQzAzMDFfTU9EVUxFX0FVVEhPUiAiICIgWkMwMzAxX0FVVEhPUl9FTUFJTCk7CitNT0RVTEVfREVTQ1JJUFRJT04oWkMwMzAxX01PRFVMRV9OQU1FKTsKK01PRFVMRV9WRVJTSU9OKFpDMDMwMV9NT0RVTEVfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRShaQzAzMDFfTU9EVUxFX0xJQ0VOU0UpOworCitzdGF0aWMgc2hvcnQgdmlkZW9fbnJbXSA9IHtbMCAuLi4gWkMwMzAxX01BWF9ERVZJQ0VTLTFdID0gLTF9OworbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBzaG9ydCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLAorCQkgIlxuPC0xfG5bLC4uLl0+IFNwZWNpZnkgVjRMMiBtaW5vciBtb2RlIG51bWJlci4iCisJCSAiXG4gLTEgPSB1c2UgbmV4dCBhdmFpbGFibGUgKGRlZmF1bHQpIgorCQkgIlxuICBuID0gdXNlIG1pbm9yIG51bWJlciBuIChpbnRlZ2VyID49IDApIgorCQkgIlxuWW91IGNhbiBzcGVjaWZ5IHVwIHRvICIKKwkJIF9fTU9EVUxFX1NUUklORyhaQzAzMDFfTUFYX0RFVklDRVMpICIgY2FtZXJhcyB0aGlzIHdheS4iCisJCSAiXG5Gb3IgZXhhbXBsZToiCisJCSAiXG52aWRlb19ucj0tMSwyLC0xIHdvdWxkIGFzc2lnbiBtaW5vciBudW1iZXIgMiB0byIKKwkJICJcbnRoZSBzZWNvbmQgcmVnaXN0ZXJlZCBjYW1lcmEgYW5kIHVzZSBhdXRvIGZvciB0aGUgZmlyc3QiCisJCSAiXG5vbmUgYW5kIGZvciBldmVyeSBvdGhlciBjYW1lcmEuIgorCQkgIlxuIik7CisKK3N0YXRpYyBzaG9ydCBmb3JjZV9tdW5tYXBbXSA9IHtbMCAuLi4gWkMwMzAxX01BWF9ERVZJQ0VTLTFdID0KKwkJCSAgICAgICBaQzAzMDFfRk9SQ0VfTVVOTUFQfTsKK21vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9tdW5tYXAsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9tdW5tYXAsCisJCSAiXG48MHwxWywuLi5dPiBGb3JjZSB0aGUgYXBwbGljYXRpb24gdG8gdW5tYXAgcHJldmlvdXNseSIKKwkJICJcbm1hcHBlZCBidWZmZXIgbWVtb3J5IGJlZm9yZSBjYWxsaW5nIGFueSBWSURJT0NfU19DUk9QIG9yIgorCQkgIlxuVklESU9DX1NfRk1UIGlvY3RsJ3MuIE5vdCBhbGwgdGhlIGFwcGxpY2F0aW9ucyBzdXBwb3J0IgorCQkgIlxudGhpcyBmZWF0dXJlLiBUaGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpYyBmb3IgZWFjaCIKKwkJICJcbmRldGVjdGVkIGNhbWVyYS4iCisJCSAiXG4gMCA9IGRvIG5vdCBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIgorCQkgIlxuIDEgPSBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIChzYXZlIG1lbW9yeSkiCisJCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoU045QzEwMl9GT1JDRV9NVU5NQVApIi4iCisJCSAiXG4iKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBmcmFtZV90aW1lb3V0W10gPSB7WzAgLi4uIFpDMDMwMV9NQVhfREVWSUNFUy0xXSA9CisJCQkJICAgICAgIFpDMDMwMV9GUkFNRV9USU1FT1VUfTsKK21vZHVsZV9wYXJhbV9hcnJheShmcmFtZV90aW1lb3V0LCB1aW50LCBOVUxMLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZnJhbWVfdGltZW91dCwKKwkJICJcbjxuWywuLi5dPiBUaW1lb3V0IGZvciBhIHZpZGVvIGZyYW1lIGluIHNlY29uZHMuIgorCQkgIlxuVGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWMgZm9yIGVhY2ggZGV0ZWN0ZWQgY2FtZXJhLiIKKwkJICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhaQzAzMDFfRlJBTUVfVElNRU9VVCkiLiIKKwkJICJcbiIpOworCisjaWZkZWYgWkMwMzAxX0RFQlVHCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVidWcgPSBaQzAzMDFfREVCVUdfTEVWRUw7Cittb2R1bGVfcGFyYW0oZGVidWcsIHVzaG9ydCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAorCQkgIlxuPG4+IERlYnVnZ2luZyBpbmZvcm1hdGlvbiBsZXZlbCwgZnJvbSAwIHRvIDM6IgorCQkgIlxuMCA9IG5vbmUgKHVzZSBjYXJlZnVsbHkpIgorCQkgIlxuMSA9IGNyaXRpY2FsIGVycm9ycyIKKwkJICJcbjIgPSBzaWduaWZpY2FudCBpbmZvcm1hdGlvbnMiCisJCSAiXG4zID0gbW9yZSB2ZXJib3NlIG1lc3NhZ2VzIgorCQkgIlxuTGV2ZWwgMyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5ICIKKwkJICJvbmUgZGV2aWNlIGlzIHVzZWQuIgorCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFpDMDMwMV9ERUJVR19MRVZFTCkiLiIKKwkJICJcbiIpOworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHUzMgoremMwMzAxX3JlcXVlc3RfYnVmZmVycyhzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB1MzIgY291bnQsCisJCSAgICAgICBlbnVtIHpjMDMwMV9pb19tZXRob2QgaW8pCit7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcCA9ICYoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdCk7CisJc3RydWN0IHY0bDJfcmVjdCogciA9ICYoY2FtLT5zZW5zb3IuY3JvcGNhcC5ib3VuZHMpOworCWNvbnN0IHNpemVfdCBpbWFnZXNpemUgPSBjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgfHwKKwkJCQkgaW8gPT0gSU9fUkVBRCA/CisJCQkJIChwLT53aWR0aCAqIHAtPmhlaWdodCAqIHAtPnByaXYpIC8gOCA6CisJCQkJIChyLT53aWR0aCAqIHItPmhlaWdodCAqIHAtPnByaXYpIC8gODsKKwl2b2lkKiBidWZmID0gTlVMTDsKKwl1MzIgaTsKKworCWlmIChjb3VudCA+IFpDMDMwMV9NQVhfRlJBTUVTKQorCQljb3VudCA9IFpDMDMwMV9NQVhfRlJBTUVTOworCisJY2FtLT5uYnVmZmVycyA9IGNvdW50OworCXdoaWxlIChjYW0tPm5idWZmZXJzID4gMCkgeworCQlpZiAoKGJ1ZmYgPSB2bWFsbG9jXzMyKGNhbS0+bmJ1ZmZlcnMgKiBQQUdFX0FMSUdOKGltYWdlc2l6ZSkpKSkKKwkJCWJyZWFrOworCQljYW0tPm5idWZmZXJzLS07CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykgeworCQljYW0tPmZyYW1lW2ldLmJ1Zm1lbSA9IGJ1ZmYgKyBpKlBBR0VfQUxJR04oaW1hZ2VzaXplKTsKKwkJY2FtLT5mcmFtZVtpXS5idWYuaW5kZXggPSBpOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5tLm9mZnNldCA9IGkqUEFHRV9BTElHTihpbWFnZXNpemUpOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5sZW5ndGggPSBpbWFnZXNpemU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLnNlcXVlbmNlID0gMDsKKwkJY2FtLT5mcmFtZVtpXS5idWYuZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLm1lbW9yeSA9IFY0TDJfTUVNT1JZX01NQVA7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLmZsYWdzID0gMDsKKwl9CisKKwlyZXR1cm4gY2FtLT5uYnVmZmVyczsKK30KKworCitzdGF0aWMgdm9pZCB6YzAzMDFfcmVsZWFzZV9idWZmZXJzKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCit7CisJaWYgKGNhbS0+bmJ1ZmZlcnMpIHsKKwkJdmZyZWUoY2FtLT5mcmFtZVswXS5idWZtZW0pOworCQljYW0tPm5idWZmZXJzID0gMDsKKwl9CisJY2FtLT5mcmFtZV9jdXJyZW50ID0gTlVMTDsKK30KKworCitzdGF0aWMgdm9pZCB6YzAzMDFfZW1wdHlfZnJhbWVxdWV1ZXMoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSkKK3sKKwl1MzIgaTsKKworCUlOSVRfTElTVF9IRUFEKCZjYW0tPmlucXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZjYW0tPm91dHF1ZXVlKTsKKworCWZvciAoaSA9IDA7IGkgPCBaQzAzMDFfTUFYX0ZSQU1FUzsgaSsrKSB7CisJCWNhbS0+ZnJhbWVbaV0uc3RhdGUgPSBGX1VOVVNFRDsKKwkJY2FtLT5mcmFtZVtpXS5idWYuYnl0ZXN1c2VkID0gMDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgemMwMzAxX3JlcXVldWVfb3V0cXVldWUoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSkKK3sKKwlzdHJ1Y3QgemMwMzAxX2ZyYW1lX3QgKmk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZjYW0tPm91dHF1ZXVlLCBmcmFtZSkgeworCQlpLT5zdGF0ZSA9IEZfUVVFVUVEOworCQlsaXN0X2FkZCgmaS0+ZnJhbWUsICZjYW0tPmlucXVldWUpOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZjYW0tPm91dHF1ZXVlKTsKK30KKworCitzdGF0aWMgdm9pZCB6YzAzMDFfcXVldWVfdW51c2VkZnJhbWVzKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCit7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCXUzMiBpOworCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykKKwkJaWYgKGNhbS0+ZnJhbWVbaV0uc3RhdGUgPT0gRl9VTlVTRUQpIHsKKwkJCWNhbS0+ZnJhbWVbaV0uc3RhdGUgPSBGX1FVRVVFRDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQkJbGlzdF9hZGRfdGFpbCgmY2FtLT5mcmFtZVtpXS5mcmFtZSwgJmNhbS0+aW5xdWV1ZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IHpjMDMwMV93cml0ZV9yZWcoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdTE2IGluZGV4LCB1MTYgdmFsdWUpCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwlpbnQgcmVzOworCisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHhhMCwgMHg0MCwKKwkJCSAgICAgIHZhbHVlLCBpbmRleCwgTlVMTCwgMCwgWkMwMzAxX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApIHsKKwkJREJHKDMsICJGYWlsZWQgdG8gd3JpdGUgYSByZWdpc3RlciAoaW5kZXggMHglMDRYLCAiCisJCSAgICAgICAidmFsdWUgMHglMDJYLCBlcnJvciAlZCkiLGluZGV4LCB2YWx1ZSwgcmVzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisKK2ludCB6YzAzMDFfcmVhZF9yZWcoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdTE2IGluZGV4KQoreworCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CisJdTgqIGJ1ZmYgPSBjYW0tPmNvbnRyb2xfYnVmZmVyOworCWludCByZXM7CisKKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweGExLCAweGMwLAorCQkJICAgICAgMHgwMDAxLCBpbmRleCwgYnVmZiwgMSwgWkMwMzAxX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApCisJCURCRygzLCAiRmFpbGVkIHRvIHJlYWQgYSByZWdpc3RlciAoaW5kZXggMHglMDRYLCBlcnJvciAlZCkiLAorCQkgICAgaW5kZXgsIHJlcyk7CisKKwlQREJHRygiUmVhZDogaW5kZXggMHglMDRYLCB2YWx1ZTogMHglMDRYIiwgaW5kZXgsIChpbnQpKCpidWZmKSk7CisKKwlyZXR1cm4gKHJlcyA+PSAwKSA/IChpbnQpKCpidWZmKSA6IC0xOworfQorCisKK2ludCB6YzAzMDFfaTJjX3JlYWQoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdTE2IGFkZHJlc3MsIHU4IGxlbmd0aCkKK3sKKwlpbnQgZXJyID0gMCwgcmVzLCByMCwgcjE7CisKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5MiwgYWRkcmVzcyk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwOTAsIDB4MDIpOworCisJbXNsZWVwKDEpOworCisJcmVzID0gemMwMzAxX3JlYWRfcmVnKGNhbSwgMHgwMDkxKTsKKwlpZiAocmVzIDwgMCkKKwkJZXJyICs9IHJlczsKKwlyMCA9IHpjMDMwMV9yZWFkX3JlZyhjYW0sIDB4MDA5NSk7CisJaWYgKHIwIDwgMCkKKwkJZXJyICs9IHIwOworCXIxID0gemMwMzAxX3JlYWRfcmVnKGNhbSwgMHgwMDk2KTsKKwlpZiAocjEgPCAwKQorCQllcnIgKz0gcjE7CisKKwlyZXMgPSAobGVuZ3RoIDw9IDEpID8gcjAgOiByMCB8IChyMSA8PCA4KTsKKworCWlmIChlcnIpCisJCURCRygzLCAiSTJDIHJlYWQgZmFpbGVkIGF0IGFkZHJlc3MgMHglMDRYLCB2YWx1ZTogMHglMDRYIiwKKwkJICAgIGFkZHJlc3MsIHJlcyk7CisKKworCVBEQkdHKCJJMkMgcmVhZDogYWRkcmVzcyAweCUwNFgsIHZhbHVlOiAweCUwNFgiLCBhZGRyZXNzLCByZXMpOworCisJcmV0dXJuIGVyciA/IC0xIDogcmVzOworfQorCisKK2ludCB6YzAzMDFfaTJjX3dyaXRlKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHUxNiBhZGRyZXNzLCB1MTYgdmFsdWUpCit7CisJaW50IGVyciA9IDAsIHJlczsKKworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDkyLCBhZGRyZXNzKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5MywgdmFsdWUgJiAweGZmKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5NCwgdmFsdWUgPj4gOCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwOTAsIDB4MDEpOworCisJbXNsZWVwKDEpOworCisJcmVzID0gemMwMzAxX3JlYWRfcmVnKGNhbSwgMHgwMDkxKTsKKwlpZiAocmVzIDwgMCkKKwkJZXJyICs9IHJlczsKKworCWlmIChlcnIpCisJCURCRygzLCAiSTJDIHdyaXRlIGZhaWxlZCBhdCBhZGRyZXNzIDB4JTA0WCwgdmFsdWU6IDB4JTA0WCIsCisJCSAgICBhZGRyZXNzLCB2YWx1ZSk7CisKKwlQREJHRygiSTJDIHdyaXRlOiBhZGRyZXNzIDB4JTA0WCwgdmFsdWU6IDB4JTA0WCIsIGFkZHJlc3MsIHZhbHVlKTsKKworCXJldHVybiBlcnIgPyAtMSA6IDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgemMwMzAxX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzKiByZWdzKQoreworCXN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0gPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHpjMDMwMV9mcmFtZV90KiogZjsKKwlzaXplX3QgaW1hZ2VzaXplOworCXU4IGk7CisJaW50IGVyciA9IDA7CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkKKwkJcmV0dXJuOworCisJZiA9ICZjYW0tPmZyYW1lX2N1cnJlbnQ7CisKKwlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX0lOVEVSUlVQVCkgeworCQljYW0tPnN0cmVhbSA9IFNUUkVBTV9PRkY7CisJCWlmICgoKmYpKQorCQkJKCpmKS0+c3RhdGUgPSBGX1FVRVVFRDsKKwkJREJHKDMsICJTdHJlYW0gaW50ZXJydXB0ZWQiKTsKKwkJd2FrZV91cCgmY2FtLT53YWl0X3N0cmVhbSk7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm47CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT0ZGIHx8IGxpc3RfZW1wdHkoJmNhbS0+aW5xdWV1ZSkpCisJCWdvdG8gcmVzdWJtaXRfdXJiOworCisJaWYgKCEoKmYpKQorCQkoKmYpID0gbGlzdF9lbnRyeShjYW0tPmlucXVldWUubmV4dCwgc3RydWN0IHpjMDMwMV9mcmFtZV90LAorCQkJCSAgZnJhbWUpOworCisJaW1hZ2VzaXplID0gKGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQud2lkdGggKgorCQkgICAgIGNhbS0+c2Vuc29yLnBpeF9mb3JtYXQuaGVpZ2h0ICoKKwkJICAgICBjYW0tPnNlbnNvci5waXhfZm9ybWF0LnByaXYpIC8gODsKKworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGxlbiwgc3RhdHVzOworCQl2b2lkICpwb3M7CisJCXUxNiogc29pOworCQl1OCBzb2Y7CisKKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlzdGF0dXMgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJcG9zID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgKyB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQlpZiAoc3RhdHVzKSB7CisJCQlEQkcoMywgIkVycm9yIGluIGlzb2Nocm9ub3VzIGZyYW1lIik7CisJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNvZiA9ICgqKHNvaSA9IHBvcykgPT0gMHhkOGZmKTsKKworCQlQREJHRygiSXNvY2hybm91cyBmcmFtZTogbGVuZ3RoICV1LCAjJXUgaSwiLCBsZW4sIGkpOworCisJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX1FVRVVFRCB8fCAoKmYpLT5zdGF0ZSA9PSBGX0VSUk9SKQorc3RhcnRfb2ZfZnJhbWU6CisJCQlpZiAoc29mKSB7CisJCQkJKCpmKS0+c3RhdGUgPSBGX0dSQUJCSU5HOworCQkJCSgqZiktPmJ1Zi5ieXRlc3VzZWQgPSAwOworCQkJCWRvX2dldHRpbWVvZmRheSgmKCpmKS0+YnVmLnRpbWVzdGFtcCk7CisJCQkJREJHKDMsICJTT0YgZGV0ZWN0ZWQ6IG5ldyB2aWRlbyBmcmFtZSIpOworCQkJfQorCisJCWlmICgoKmYpLT5zdGF0ZSA9PSBGX0dSQUJCSU5HKSB7CisJCQlpZiAoc29mICYmICgqZiktPmJ1Zi5ieXRlc3VzZWQpCisJCQkJCWdvdG8gZW5kX29mX2ZyYW1lOworCisJCQlpZiAoKCpmKS0+YnVmLmJ5dGVzdXNlZCArIGxlbiA+IGltYWdlc2l6ZSkgeworCQkJCURCRygzLCAiVmlkZW8gZnJhbWUgc2l6ZSBleGNlZWRlZCIpOworCQkJCSgqZiktPnN0YXRlID0gRl9FUlJPUjsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJbWVtY3B5KCgqZiktPmJ1Zm1lbSsoKmYpLT5idWYuYnl0ZXN1c2VkLCBwb3MsIGxlbik7CisJCQkoKmYpLT5idWYuYnl0ZXN1c2VkICs9IGxlbjsKKworCQkJaWYgKCgqZiktPmJ1Zi5ieXRlc3VzZWQgPT0gaW1hZ2VzaXplKSB7CisJCQkJdTMyIGI7CitlbmRfb2ZfZnJhbWU6CisJCQkJYiA9ICgqZiktPmJ1Zi5ieXRlc3VzZWQ7CisJCQkJKCpmKS0+c3RhdGUgPSBGX0RPTkU7CisJCQkJKCpmKS0+YnVmLnNlcXVlbmNlPSArK2NhbS0+ZnJhbWVfY291bnQ7CisJCQkJc3Bpbl9sb2NrKCZjYW0tPnF1ZXVlX2xvY2spOworCQkJCWxpc3RfbW92ZV90YWlsKCYoKmYpLT5mcmFtZSwgJmNhbS0+b3V0cXVldWUpOworCQkJCWlmICghbGlzdF9lbXB0eSgmY2FtLT5pbnF1ZXVlKSkKKwkJCQkJKCpmKSA9IGxpc3RfZW50cnkoY2FtLT5pbnF1ZXVlLm5leHQsCisJCQkJCQkgICAgICAgc3RydWN0IHpjMDMwMV9mcmFtZV90LAorCQkJCQkJCSAgZnJhbWUpOworCQkJCWVsc2UKKwkJCQkJKCpmKSA9IE5VTEw7CisJCQkJc3Bpbl91bmxvY2soJmNhbS0+cXVldWVfbG9jayk7CisJCQkJREJHKDMsICJWaWRlbyBmcmFtZSBjYXB0dXJlZDogOiAlbHUgYnl0ZXMiLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykoYikpOworCisJCQkJaWYgKCEoKmYpKQorCQkJCQlnb3RvIHJlc3VibWl0X3VyYjsKKworCQkJCWlmIChzb2YpCisJCQkJCWdvdG8gc3RhcnRfb2ZfZnJhbWU7CisJCQl9CisJCX0KKwl9CisKK3Jlc3VibWl0X3VyYjoKKwl1cmItPmRldiA9IGNhbS0+dXNiZGV2OworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGVyciA8IDAgJiYgZXJyICE9IC1FUEVSTSkgeworCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQlEQkcoMSwgInVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkIik7CisJfQorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfZnJhbWUpOworfQorCisKK3N0YXRpYyBpbnQgemMwMzAxX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVzYmRldjsKKwlzdHJ1Y3QgdXJiKiB1cmI7CisJY29uc3QgdW5zaWduZWQgaW50IHdNYXhQYWNrZXRTaXplW10gPSB7MCwgMTI4LCAxOTIsIDI1NiwgMzg0LAorCQkJCQkgICAgICAgNTEyLCA3NjgsIDEwMjN9OworCWNvbnN0IHVuc2lnbmVkIGludCBwc3ogPSB3TWF4UGFja2V0U2l6ZVtaQzAzMDFfQUxURVJOQVRFX1NFVFRJTkddOworCXM4IGksIGo7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgWkMwMzAxX1VSQlM7IGkrKykgeworCQljYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSA9IGt6YWxsb2MoWkMwMzAxX0lTT19QQUNLRVRTICogcHN6LAorCQkJCQkJICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCURCRygxLCAiTm90IGVub3VnaCBtZW1vcnkiKTsKKwkJCWdvdG8gZnJlZV9idWZmZXJzOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IFpDMDMwMV9VUkJTOyBpKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihaQzAzMDFfSVNPX1BBQ0tFVFMsIEdGUF9LRVJORUwpOworCQljYW0tPnVyYltpXSA9IHVyYjsKKwkJaWYgKCF1cmIpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlEQkcoMSwgInVzYl9hbGxvY191cmIoKSBmYWlsZWQiKTsKKwkJCWdvdG8gZnJlZV91cmJzOworCQl9CisJCXVyYi0+ZGV2ID0gdWRldjsKKwkJdXJiLT5jb250ZXh0ID0gY2FtOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWRldiwgMSk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBaQzAzMDFfSVNPX1BBQ0tFVFM7CisJCXVyYi0+Y29tcGxldGUgPSB6YzAzMDFfdXJiX2NvbXBsZXRlOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwc3ogKiBaQzAzMDFfSVNPX1BBQ0tFVFM7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQlmb3IgKGogPSAwOyBqIDwgWkMwMzAxX0lTT19QQUNLRVRTOyBqKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gcHN6ICogajsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gcHN6OworCQl9CisJfQorCisJZXJyID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgWkMwMzAxX0FMVEVSTkFURV9TRVRUSU5HKTsKKwlpZiAoZXJyKSB7CisJCURCRygxLCAidXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQiKTsKKwkJZ290byBmcmVlX3VyYnM7CisJfQorCisJY2FtLT5mcmFtZV9jdXJyZW50ID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBaQzAzMDFfVVJCUzsgaSsrKSB7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKGNhbS0+dXJiW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJZm9yIChqID0gaS0xOyBqID49IDA7IGotLSkKKwkJCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbal0pOworCQkJREJHKDEsICJ1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCwgZXJyb3IgJWQiLCBlcnIpOworCQkJZ290byBmcmVlX3VyYnM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZnJlZV91cmJzOgorCWZvciAoaSA9IDA7IChpIDwgWkMwMzAxX1VSQlMpICYmICBjYW0tPnVyYltpXTsgaSsrKQorCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbaV0pOworCitmcmVlX2J1ZmZlcnM6CisJZm9yIChpID0gMDsgKGkgPCBaQzAzMDFfVVJCUykgJiYgY2FtLT50cmFuc2Zlcl9idWZmZXJbaV07IGkrKykKKwkJa2ZyZWUoY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0pOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHpjMDMwMV9zdG9wX3RyYW5zZmVyKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVzYmRldjsKKwlzOCBpOworCWludCBlcnIgPSAwOworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IFpDMDMwMV9VUkJTLTE7IGkgPj0gMDsgaS0tKSB7CisJCXVzYl9raWxsX3VyYihjYW0tPnVyYltpXSk7CisJCXVzYl9mcmVlX3VyYihjYW0tPnVyYltpXSk7CisJCWtmcmVlKGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldKTsKKwl9CisKKwllcnIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCAwLCAwKTsgLyogMCBNYi9zICovCisJaWYgKGVycikKKwkJREJHKDMsICJ1c2Jfc2V0X2ludGVyZmFjZSgpIGZhaWxlZCIpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHpjMDMwMV9zdHJlYW1faW50ZXJydXB0KHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCit7CisJbG9uZyB0aW1lb3V0OworCisJY2FtLT5zdHJlYW0gPSBTVFJFQU1fSU5URVJSVVBUOworCXRpbWVvdXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoY2FtLT53YWl0X3N0cmVhbSwKKwkJCQkgICAgIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT0ZGKSB8fAorCQkJCSAgICAgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSwKKwkJCQkgICAgIFpDMDMwMV9VUkJfVElNRU9VVCk7CisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllbHNlIGlmIChjYW0tPnN0cmVhbSAhPSBTVFJFQU1fT0ZGKSB7CisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCURCRygxLCAiVVJCIHRpbWVvdXQgcmVhY2hlZC4gVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBUbyAiCisJCSAgICAgICAidXNlIGl0LCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKKwkJICAgIGNhbS0+djRsZGV2LT5taW5vcik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK3pjMDMwMV9zZXRfY29tcHJlc3Npb24oc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwKKwkJICAgICAgIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiogY29tcHJlc3Npb24pCit7CisJaW50IHIsIGVyciA9IDA7CisKKwlpZiAoKHIgPSB6YzAzMDFfcmVhZF9yZWcoY2FtLCAweDAwMDgpKSA8IDApCisJCWVyciArPSByOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDA4LCByIHwgMHgxMSB8IGNvbXByZXNzaW9uLT5xdWFsaXR5KTsKKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IHpjMDMwMV9pbml0KHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHpjMDMwMV9zZW5zb3IqIHMgPSAmY2FtLT5zZW5zb3I7CisJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmw7CisJc3RydWN0IHY0bDJfcmVjdCogcmVjdDsKKwl1OCBpID0gMDsKKwlpbnQgZXJyID0gMDsKKworCWlmICghKGNhbS0+c3RhdGUgJiBERVZfSU5JVElBTElaRUQpKSB7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+b3Blbik7CisJCXFjdHJsID0gcy0+cWN0cmw7CisJCXJlY3QgPSAmKHMtPmNyb3BjYXAuZGVmcmVjdCk7CisJCWNhbS0+Y29tcHJlc3Npb24ucXVhbGl0eSA9IFpDMDMwMV9DT01QUkVTU0lPTl9RVUFMSVRZOworCX0gZWxzZSB7IC8qIHVzZSBjdXJyZW50IHZhbHVlcyAqLworCQlxY3RybCA9IHMtPl9xY3RybDsKKwkJcmVjdCA9ICYocy0+X3JlY3QpOworCX0KKworCWlmIChzLT5pbml0KSB7CisJCWVyciA9IHMtPmluaXQoY2FtKTsKKwkJaWYgKGVycikgeworCQkJREJHKDMsICJTZW5zb3IgaW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKChlcnIgPSB6YzAzMDFfc2V0X2NvbXByZXNzaW9uKGNhbSwgJmNhbS0+Y29tcHJlc3Npb24pKSkgeworCQlEQkcoMywgInNldF9jb21wcmVzc2lvbigpIGZhaWxlZCIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChzLT5zZXRfY3JvcCkKKwkJaWYgKChlcnIgPSBzLT5zZXRfY3JvcChjYW0sIHJlY3QpKSkgeworCQkJREJHKDMsICJzZXRfY3JvcCgpIGZhaWxlZCIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJaWYgKHMtPnNldF9jdHJsKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMtPnFjdHJsKTsgaSsrKQorCQkJaWYgKHMtPnFjdHJsW2ldLmlkICE9IDAgJiYKKwkJCSAgICAhKHMtPnFjdHJsW2ldLmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQpKSB7CisJCQkJY3RybC5pZCA9IHMtPnFjdHJsW2ldLmlkOworCQkJCWN0cmwudmFsdWUgPSBxY3RybFtpXS5kZWZhdWx0X3ZhbHVlOworCQkJCWVyciA9IHMtPnNldF9jdHJsKGNhbSwgJmN0cmwpOworCQkJCWlmIChlcnIpIHsKKwkJCQkJREJHKDMsICJTZXQgJXMgY29udHJvbCBmYWlsZWQiLAorCQkJCQkgICAgcy0+cWN0cmxbaV0ubmFtZSk7CisJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCQkJCURCRygzLCAiSW1hZ2Ugc2Vuc29yIHN1cHBvcnRzICclcycgY29udHJvbCIsCisJCQkJICAgIHMtPnFjdHJsW2ldLm5hbWUpOworCQkJfQorCX0KKworCWlmICghKGNhbS0+c3RhdGUgJiBERVZfSU5JVElBTElaRUQpKSB7CisJCW11dGV4X2luaXQoJmNhbS0+ZmlsZW9wX211dGV4KTsKKwkJc3Bpbl9sb2NrX2luaXQoJmNhbS0+cXVldWVfbG9jayk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9mcmFtZSk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbS0+d2FpdF9zdHJlYW0pOworCQljYW0tPm5yZWFkYnVmZmVycyA9IDI7CisJCW1lbWNweShzLT5fcWN0cmwsIHMtPnFjdHJsLCBzaXplb2Yocy0+cWN0cmwpKTsKKwkJbWVtY3B5KCYocy0+X3JlY3QpLCAmKHMtPmNyb3BjYXAuZGVmcmVjdCksCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHY0bDJfcmVjdCkpOworCQljYW0tPnN0YXRlIHw9IERFVl9JTklUSUFMSVpFRDsKKwl9CisKKwlEQkcoMiwgIkluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHpjMDMwMV9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKQoreworCURCRygyLCAiVjRMMiBkZXZpY2UgL2Rldi92aWRlbyVkIGRlcmVnaXN0ZXJlZCIsIGNhbS0+djRsZGV2LT5taW5vcik7CisJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIE5VTEwpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGNhbS0+djRsZGV2KTsKKwlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHpjMDMwMV9vcGVuKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwKQoreworCXN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW07CisJaW50IGVyciA9IDA7CisKKwkvKgorCSAgIFRoaXMgaXMgdGhlIG9ubHkgc2FmZSB3YXkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aAorCSAgIGRpc2Nvbm5lY3QKKwkqLworCWlmICghZG93bl9yZWFkX3RyeWxvY2soJnpjMDMwMV9kaXNjb25uZWN0KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5kZXZfbXV0ZXgpKSB7CisJCXVwX3JlYWQoJnpjMDMwMV9kaXNjb25uZWN0KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlpZiAoY2FtLT51c2VycykgeworCQlEQkcoMiwgIkRldmljZSAvZGV2L3ZpZGVvJWQgaXMgYnVzeS4uLiIsIGNhbS0+djRsZGV2LT5taW5vcik7CisJCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8CisJCSAgICAoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSkgeworCQkJZXJyID0gLUVXT1VMREJMT0NLOworCQkJZ290byBvdXQ7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CisJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUoY2FtLT5vcGVuLAorCQkJCQkJICBjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRAorCQkJCQkJCSB8fCAhY2FtLT51c2Vycyk7CisJCWlmIChlcnIpIHsKKwkJCXVwX3JlYWQoJnpjMDMwMV9kaXNjb25uZWN0KTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCQl1cF9yZWFkKCZ6YzAzMDFfZGlzY29ubmVjdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7CisJfQorCisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCWVyciA9IHpjMDMwMV9pbml0KGNhbSk7CisJCWlmIChlcnIpIHsKKwkJCURCRygxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkIGFnYWluLiAiCisJCQkgICAgICAgIkkgd2lsbCByZXRyeSBvbiBuZXh0IG9wZW4oKS4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWNhbS0+c3RhdGUgJj0gfkRFVl9NSVNDT05GSUdVUkVEOworCX0KKworCWlmICgoZXJyID0gemMwMzAxX3N0YXJ0X3RyYW5zZmVyKGNhbSkpKQorCQlnb3RvIG91dDsKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGNhbTsKKwljYW0tPnVzZXJzKys7CisJY2FtLT5pbyA9IElPX05PTkU7CisJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT0ZGOworCWNhbS0+bmJ1ZmZlcnMgPSAwOworCWNhbS0+ZnJhbWVfY291bnQgPSAwOworCXpjMDMwMV9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCisJREJHKDMsICJWaWRlbyBkZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4iLCBjYW0tPnY0bGRldi0+bWlub3IpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CisJdXBfcmVhZCgmemMwMzAxX2Rpc2Nvbm5lY3QpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB6YzAzMDFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCkKK3sKKwlzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7IC8qIHByZXZlbnQgZGlzY29ubmVjdCgpIHRvIGJlIGNhbGxlZCAqLworCisJemMwMzAxX3N0b3BfdHJhbnNmZXIoY2FtKTsKKworCXpjMDMwMV9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKKworCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQl6YzAzMDFfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKwkJdXNiX3B1dF9kZXYoY2FtLT51c2JkZXYpOworCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKKwkJa2ZyZWUoY2FtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FtLT51c2Vycy0tOworCXdha2VfdXBfaW50ZXJydXB0aWJsZV9ucigmY2FtLT5vcGVuLCAxKTsKKworCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBjbG9zZWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOworCisJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3NpemVfdAoremMwMzAxX3JlYWQoc3RydWN0IGZpbGUqIGZpbHAsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCogZl9wb3MpCit7CisJc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXN0cnVjdCB6YzAzMDFfZnJhbWVfdCogZiwgKiBpOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlsb25nIHRpbWVvdXQ7CisJaW50IGVyciA9IDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0ICIKKwkJICAgICAgICJhZ2Fpbi4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjYW0tPmlvID09IElPX01NQVApIHsKKwkJREJHKDMsICJDbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGFnYWluIHRvIGNob29zZSB0aGUgcmVhZCAiCisJCSAgICAgICAibWV0aG9kIik7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY2FtLT5pbyA9PSBJT19OT05FKSB7CisJCWlmICghemMwMzAxX3JlcXVlc3RfYnVmZmVycyhjYW0sIGNhbS0+bnJlYWRidWZmZXJzLCBJT19SRUFEKSkgeworCQkJREJHKDEsICJyZWFkKCkgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSIpOworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQljYW0tPmlvID0gSU9fUkVBRDsKKwkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT047CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJmNhbS0+aW5xdWV1ZSkpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkKKwkJCXpjMDMwMV9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCQl6YzAzMDFfcXVldWVfdW51c2VkZnJhbWVzKGNhbSk7CisJfQorCisJaWYgKCFjb3VudCkgeworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB7CisJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQKKwkJCSAgKCBjYW0tPndhaXRfZnJhbWUsCisJCQkgICAgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgfHwKKwkJCSAgICAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8CisJCQkgICAgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCksCisJCQkgICAgY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCAqCisJCQkgICAgMTAwMCAqIG1zZWNzX3RvX2ppZmZpZXMoMSkgKTsKKwkJaWYgKHRpbWVvdXQgPCAwKSB7CisJCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKKwkJCXJldHVybiB0aW1lb3V0OworCQl9CisJCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoIXRpbWVvdXQgfHwgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkpIHsKKwkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlmID0gbGlzdF9lbnRyeShjYW0tPm91dHF1ZXVlLnByZXYsIHN0cnVjdCB6YzAzMDFfZnJhbWVfdCwgZnJhbWUpOworCisJaWYgKGNvdW50ID4gZi0+YnVmLmJ5dGVzdXNlZCkKKwkJY291bnQgPSBmLT5idWYuYnl0ZXN1c2VkOworCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGYtPmJ1Zm1lbSwgY291bnQpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gZXhpdDsKKwl9CisJKmZfcG9zICs9IGNvdW50OworCitleGl0OgorCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJmNhbS0+b3V0cXVldWUsIGZyYW1lKQorCQlpLT5zdGF0ZSA9IEZfVU5VU0VEOworCUlOSVRfTElTVF9IRUFEKCZjYW0tPm91dHF1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCisJemMwMzAxX3F1ZXVlX3VudXNlZGZyYW1lcyhjYW0pOworCisJUERCR0coIkZyYW1lICMlbHUsIGJ5dGVzIHJlYWQ6ICV6dSIsCisJICAgICAgKHVuc2lnbmVkIGxvbmcpZi0+YnVmLmluZGV4LCBjb3VudCk7CisKKwltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKK30KKworCitzdGF0aWMgdW5zaWduZWQgaW50IHpjMDMwMV9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlzdHJ1Y3QgemMwMzAxX2ZyYW1lX3QqIGY7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX211dGV4KSkKKwkJcmV0dXJuIFBPTExFUlI7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCURCRygxLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCAiCisJCSAgICAgICAiYWdhaW4uIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNhbS0+aW8gPT0gSU9fTk9ORSkgeworCQlpZiAoIXpjMDMwMV9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBjYW0tPm5yZWFkYnVmZmVycywgSU9fUkVBRCkpIHsKKwkJCURCRygxLCAicG9sbCgpIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkiKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJY2FtLT5pbyA9IElPX1JFQUQ7CisJCWNhbS0+c3RyZWFtID0gU1RSRUFNX09OOworCX0KKworCWlmIChjYW0tPmlvID09IElPX1JFQUQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmNhbS0+b3V0cXVldWUsIGZyYW1lKQorCQkJZi0+c3RhdGUgPSBGX1VOVVNFRDsKKwkJSU5JVF9MSVNUX0hFQUQoJmNhbS0+b3V0cXVldWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQl6YzAzMDFfcXVldWVfdW51c2VkZnJhbWVzKGNhbSk7CisJfQorCisJcG9sbF93YWl0KGZpbHAsICZjYW0tPndhaXRfZnJhbWUsIHdhaXQpOworCisJaWYgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisKKwlyZXR1cm4gbWFzazsKKworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJcmV0dXJuIFBPTExFUlI7Cit9CisKKworc3RhdGljIHZvaWQgemMwMzAxX3ZtX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0KiB2bWEpCit7CisJc3RydWN0IHpjMDMwMV9mcmFtZV90KiBmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJZi0+dm1hX3VzZV9jb3VudCsrOworfQorCisKK3N0YXRpYyB2b2lkIHpjMDMwMV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqIHZtYSkKK3sKKwkvKiBOT1RFOiBidWZmZXJzIGFyZSBub3QgZnJlZWQgaGVyZSAqLworCXN0cnVjdCB6YzAzMDFfZnJhbWVfdCogZiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCWYtPnZtYV91c2VfY291bnQtLTsKK30KKworCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpjMDMwMV92bV9vcHMgPSB7CisJLm9wZW4gPSB6YzAzMDFfdm1fb3BlbiwKKwkuY2xvc2UgPSB6YzAzMDFfdm1fY2xvc2UsCit9OworCisKK3N0YXRpYyBpbnQgemMwMzAxX21tYXAoc3RydWN0IGZpbGUqIGZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCSAgICAgIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl2b2lkICpwb3M7CisJdTMyIGk7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0ICIKKwkJICAgICAgICJhZ2Fpbi4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChjYW0tPmlvICE9IElPX01NQVAgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHx8CisJICAgIHNpemUgIT0gUEFHRV9BTElHTihjYW0tPmZyYW1lWzBdLmJ1Zi5sZW5ndGgpKSB7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKSB7CisJCWlmICgoY2FtLT5mcmFtZVtpXS5idWYubS5vZmZzZXQ+PlBBR0VfU0hJRlQpID09IHZtYS0+dm1fcGdvZmYpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gY2FtLT5uYnVmZmVycykgeworCQltdXRleF91bmxvY2soJmNhbS0+ZmlsZW9wX211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOworCisJcG9zID0gY2FtLT5mcmFtZVtpXS5idWZtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7IC8qIHNpemUgaXMgcGFnZS1hbGlnbmVkICovCisJCWlmICh2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCB2bWFsbG9jX3RvX3BhZ2UocG9zKSkpIHsKKwkJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwl2bWEtPnZtX29wcyA9ICZ6YzAzMDFfdm1fb3BzOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gJmNhbS0+ZnJhbWVbaV07CisKKwl6YzAzMDFfdm1fb3Blbih2bWEpOworCisJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50Cit6YzAzMDFfdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgY2FwID0geworCQkuZHJpdmVyID0gInpjMDMwMSIsCisJCS52ZXJzaW9uID0gWkMwMzAxX01PRFVMRV9WRVJTSU9OX0NPREUsCisJCS5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFIHwKKwkJCQlWNEwyX0NBUF9TVFJFQU1JTkcsCisJfTsKKworCXN0cmxjcHkoY2FwLmNhcmQsIGNhbS0+djRsZGV2LT5uYW1lLCBzaXplb2YoY2FwLmNhcmQpKTsKKwlpZiAodXNiX21ha2VfcGF0aChjYW0tPnVzYmRldiwgY2FwLmJ1c19pbmZvLCBzaXplb2YoY2FwLmJ1c19pbmZvKSkgPCAwKQorCQlzdHJsY3B5KGNhcC5idXNfaW5mbywgY2FtLT51c2JkZXYtPmRldi5idXNfaWQsCisJCQlzaXplb2YoY2FwLmJ1c19pbmZvKSk7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmNhcCwgc2l6ZW9mKGNhcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2NfZW51bWlucHV0KHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX2lucHV0IGk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmksIGFyZywgc2l6ZW9mKGkpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoaS5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJmksIDAsIHNpemVvZihpKSk7CisJc3RyY3B5KGkubmFtZSwgIkNhbWVyYSIpOworCWkudHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmksIHNpemVvZihpKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAoremMwMzAxX3ZpZGlvY19nX2lucHV0KHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCWludCBpbmRleCA9IDA7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmluZGV4LCBzaXplb2YoaW5kZXgpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit6YzAzMDFfdmlkaW9jX3NfaW5wdXQoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJaW50IGluZGV4OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmRleCwgYXJnLCBzaXplb2YoaW5kZXgpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoaW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit6YzAzMDFfdmlkaW9jX3F1ZXJ5X2N0cmwoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJc3RydWN0IHpjMDMwMV9zZW5zb3IqIHMgPSAmY2FtLT5zZW5zb3I7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjOworCXU4IGk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnFjLCBhcmcsIHNpemVvZihxYykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMtPnFjdHJsKTsgaSsrKQorCQlpZiAocWMuaWQgJiYgcWMuaWQgPT0gcy0+cWN0cmxbaV0uaWQpIHsKKwkJCW1lbWNweSgmcWMsICYocy0+cWN0cmxbaV0pLCBzaXplb2YocWMpKTsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcWMsIHNpemVvZihxYykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2NfZ19jdHJsKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB6YzAzMDFfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKKwlpbnQgZXJyID0gMDsKKwl1OCBpOworCisJaWYgKCFzLT5nZXRfY3RybCAmJiAhcy0+c2V0X2N0cmwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjdHJsLCBhcmcsIHNpemVvZihjdHJsKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCFzLT5nZXRfY3RybCkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzLT5xY3RybCk7IGkrKykKKwkJCWlmIChjdHJsLmlkID09IHMtPnFjdHJsW2ldLmlkKSB7CisJCQkJY3RybC52YWx1ZSA9IHMtPl9xY3RybFtpXS5kZWZhdWx0X3ZhbHVlOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCWVyciA9IHMtPmdldF9jdHJsKGNhbSwgJmN0cmwpOworCitleGl0OgorCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3RybCwgc2l6ZW9mKGN0cmwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2Nfc19jdHJsKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB6YzAzMDFfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKKwl1OCBpOworCWludCBlcnIgPSAwOworCisJaWYgKCFzLT5zZXRfY3RybCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZywgc2l6ZW9mKGN0cmwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzLT5xY3RybCk7IGkrKykKKwkJaWYgKGN0cmwuaWQgPT0gcy0+cWN0cmxbaV0uaWQpIHsKKwkJCWlmIChzLT5xY3RybFtpXS5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGN0cmwudmFsdWUgPCBzLT5xY3RybFtpXS5taW5pbXVtIHx8CisJCQkgICAgY3RybC52YWx1ZSA+IHMtPnFjdHJsW2ldLm1heGltdW0pCisJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQljdHJsLnZhbHVlIC09IGN0cmwudmFsdWUgJSBzLT5xY3RybFtpXS5zdGVwOworCQkJYnJlYWs7CisJCX0KKworCWlmICgoZXJyID0gcy0+c2V0X2N0cmwoY2FtLCAmY3RybCkpKQorCQlyZXR1cm4gZXJyOworCisJcy0+X3FjdHJsW2ldLmRlZmF1bHRfdmFsdWUgPSBjdHJsLnZhbHVlOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAoremMwMzAxX3ZpZGlvY19jcm9wY2FwKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX2Nyb3BjYXAqIGNjID0gJihjYW0tPnNlbnNvci5jcm9wY2FwKTsKKworCWNjLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSAxOworCWNjLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDE7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgY2MsIHNpemVvZigqY2MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit6YzAzMDFfdmlkaW9jX2dfY3JvcChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgemMwMzAxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKKwlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3AgPSB7CisJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCX07CisKKwltZW1jcHkoJihjcm9wLmMpLCAmKHMtPl9yZWN0KSwgc2l6ZW9mKHN0cnVjdCB2NGwyX3JlY3QpKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3JvcCwgc2l6ZW9mKGNyb3ApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit6YzAzMDFfdmlkaW9jX3NfY3JvcChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgemMwMzAxX3NlbnNvciogcyA9ICZjYW0tPnNlbnNvcjsKKwlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7CisJc3RydWN0IHY0bDJfcmVjdCogcmVjdDsKKwlzdHJ1Y3QgdjRsMl9yZWN0KiBib3VuZHMgPSAmKHMtPmNyb3BjYXAuYm91bmRzKTsKKwljb25zdCBlbnVtIHpjMDMwMV9zdHJlYW1fc3RhdGUgc3RyZWFtID0gY2FtLT5zdHJlYW07CisJY29uc3QgdTMyIG5idWZmZXJzID0gY2FtLT5uYnVmZmVyczsKKwl1MzIgaTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY3JvcCwgYXJnLCBzaXplb2YoY3JvcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJlY3QgPSAmKGNyb3AuYyk7CisKKwlpZiAoY3JvcC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwKQorCQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQorCQkJaWYgKGNhbS0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgeworCQkJCURCRygzLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQuICIKKwkJCQkgICAgICAgIlVubWFwIHRoZSBidWZmZXJzIGZpcnN0LiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJaWYgKCFzLT5zZXRfY3JvcCkgeworCQltZW1jcHkocmVjdCwgJihzLT5fcmVjdCksIHNpemVvZigqcmVjdCkpOworCQlpZiAoY29weV90b191c2VyKGFyZywgJmNyb3AsIHNpemVvZihjcm9wKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVjdC0+bGVmdCAmPSB+N0w7CisJcmVjdC0+dG9wICY9IH43TDsKKwlpZiAocmVjdC0+d2lkdGggPCA4KQorCQlyZWN0LT53aWR0aCA9IDg7CisJaWYgKHJlY3QtPmhlaWdodCA8IDgpCisJCXJlY3QtPmhlaWdodCA9IDg7CisJaWYgKHJlY3QtPndpZHRoID4gYm91bmRzLT53aWR0aCkKKwkJcmVjdC0+d2lkdGggPSBib3VuZHMtPndpZHRoOworCWlmIChyZWN0LT5oZWlnaHQgPiBib3VuZHMtPmhlaWdodCkKKwkJcmVjdC0+aGVpZ2h0ID0gYm91bmRzLT5oZWlnaHQ7CisJaWYgKHJlY3QtPmxlZnQgPCBib3VuZHMtPmxlZnQpCisJCXJlY3QtPmxlZnQgPSBib3VuZHMtPmxlZnQ7CisJaWYgKHJlY3QtPnRvcCA8IGJvdW5kcy0+dG9wKQorCQlyZWN0LT50b3AgPSBib3VuZHMtPnRvcDsKKwlpZiAocmVjdC0+bGVmdCArIHJlY3QtPndpZHRoID4gYm91bmRzLT5sZWZ0ICsgYm91bmRzLT53aWR0aCkKKwkJcmVjdC0+bGVmdCA9IGJvdW5kcy0+bGVmdCtib3VuZHMtPndpZHRoIC0gcmVjdC0+d2lkdGg7CisJaWYgKHJlY3QtPnRvcCArIHJlY3QtPmhlaWdodCA+IGJvdW5kcy0+dG9wICsgYm91bmRzLT5oZWlnaHQpCisJCXJlY3QtPnRvcCA9IGJvdW5kcy0+dG9wK2JvdW5kcy0+aGVpZ2h0IC0gcmVjdC0+aGVpZ2h0OworCXJlY3QtPndpZHRoICY9IH43TDsKKwlyZWN0LT5oZWlnaHQgJj0gfjdMOworCisJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJaWYgKChlcnIgPSB6YzAzMDFfc3RyZWFtX2ludGVycnVwdChjYW0pKSkKKwkJCXJldHVybiBlcnI7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmNyb3AsIHNpemVvZihjcm9wKSkpIHsKKwkJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKQorCQl6YzAzMDFfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisKKwlpZiAocy0+c2V0X2Nyb3ApCisJCWVyciArPSBzLT5zZXRfY3JvcChjYW0sIHJlY3QpOworCisJaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KKwkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKKwkJREJHKDEsICJWSURJT0NfU19DUk9QIGZhaWxlZCBiZWNhdXNlIG9mIGhhcmR3YXJlIHByb2JsZW1zLiBUbyAiCisJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAorCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcy0+cGl4X2Zvcm1hdC53aWR0aCA9IHJlY3QtPndpZHRoOworCXMtPnBpeF9mb3JtYXQuaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OworCW1lbWNweSgmKHMtPl9yZWN0KSwgcmVjdCwgc2l6ZW9mKCpyZWN0KSk7CisKKwlpZiAoKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKSAmJgorCSAgICBuYnVmZmVycyAhPSB6YzAzMDFfcmVxdWVzdF9idWZmZXJzKGNhbSwgbmJ1ZmZlcnMsIGNhbS0+aW8pKSB7CisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCURCRygxLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQgYmVjYXVzZSBvZiBub3QgZW5vdWdoIG1lbW9yeS4gVG8gIgorCQkgICAgICAgInVzZSB0aGUgY2FtZXJhLCBjbG9zZSBhbmQgb3BlbiAvZGV2L3ZpZGVvJWQgYWdhaW4uIiwKKwkJICAgIGNhbS0+djRsZGV2LT5taW5vcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChjYW0tPmlvID09IElPX1JFQUQpCisJCXpjMDMwMV9lbXB0eV9mcmFtZXF1ZXVlcyhjYW0pOworCWVsc2UgaWYgKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCkKKwkJemMwMzAxX3JlcXVldWVfb3V0cXVldWUoY2FtKTsKKworCWNhbS0+c3RyZWFtID0gc3RyZWFtOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAoremMwMzAxX3ZpZGlvY19lbnVtX2ZtdChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgdjRsMl9mbXRkZXNjIGZtdGQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmZtdGQsIGFyZywgc2l6ZW9mKGZtdGQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoZm10ZC5pbmRleCA9PSAwKSB7CisJCXN0cmNweShmbXRkLmRlc2NyaXB0aW9uLCAiSlBFRyIpOworCQlmbXRkLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUc7CisJCWZtdGQuZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJZm10ZC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCW1lbXNldCgmZm10ZC5yZXNlcnZlZCwgMCwgc2l6ZW9mKGZtdGQucmVzZXJ2ZWQpKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm10ZCwgc2l6ZW9mKGZtdGQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit6YzAzMDFfdmlkaW9jX2dfZm10KHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmb3JtYXQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGZtdCA9ICYoY2FtLT5zZW5zb3IucGl4X2Zvcm1hdCk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmZvcm1hdCwgYXJnLCBzaXplb2YoZm9ybWF0KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGZvcm1hdC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwZm10LT5ieXRlc3BlcmxpbmUgPSAwOworCXBmbXQtPnNpemVpbWFnZSA9IHBmbXQtPmhlaWdodCAqICgocGZtdC0+d2lkdGgqcGZtdC0+cHJpdikvOCk7CisJcGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJbWVtY3B5KCYoZm9ybWF0LmZtdC5waXgpLCBwZm10LCBzaXplb2YoKnBmbXQpKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAoremMwMzAxX3ZpZGlvY190cnlfc19mbXQoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCXZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB6YzAzMDFfc2Vuc29yKiBzID0gJmNhbS0+c2Vuc29yOworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmb3JtYXQ7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBmbXQgPSAmKHMtPnBpeF9mb3JtYXQpOworCXN0cnVjdCB2NGwyX3JlY3QqIGJvdW5kcyA9ICYocy0+Y3JvcGNhcC5ib3VuZHMpOworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsKKwljb25zdCBlbnVtIHpjMDMwMV9zdHJlYW1fc3RhdGUgc3RyZWFtID0gY2FtLT5zdHJlYW07CisJY29uc3QgdTMyIG5idWZmZXJzID0gY2FtLT5uYnVmZmVyczsKKwl1MzIgaTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZm9ybWF0LCBhcmcsIHNpemVvZihmb3JtYXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlwaXggPSAmKGZvcm1hdC5mbXQucGl4KTsKKworCWlmIChmb3JtYXQudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KCZyZWN0LCAmKHMtPl9yZWN0KSwgc2l6ZW9mKHJlY3QpKTsKKworCWlmICghcy0+c2V0X2Nyb3ApIHsKKwkJcGl4LT53aWR0aCA9IHJlY3Qud2lkdGg7CisJCXBpeC0+aGVpZ2h0ID0gcmVjdC5oZWlnaHQ7CisJfSBlbHNlIHsKKwkJcmVjdC53aWR0aCA9IHBpeC0+d2lkdGg7CisJCXJlY3QuaGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CisJfQorCisJaWYgKHJlY3Qud2lkdGggPCA4KQorCQlyZWN0LndpZHRoID0gODsKKwlpZiAocmVjdC5oZWlnaHQgPCA4KQorCQlyZWN0LmhlaWdodCA9IDg7CisJaWYgKHJlY3Qud2lkdGggPiBib3VuZHMtPmxlZnQgKyBib3VuZHMtPndpZHRoIC0gcmVjdC5sZWZ0KQorCQlyZWN0LndpZHRoID0gYm91bmRzLT5sZWZ0ICsgYm91bmRzLT53aWR0aCAtIHJlY3QubGVmdDsKKwlpZiAocmVjdC5oZWlnaHQgPiBib3VuZHMtPnRvcCArIGJvdW5kcy0+aGVpZ2h0IC0gcmVjdC50b3ApCisJCXJlY3QuaGVpZ2h0ID0gYm91bmRzLT50b3AgKyBib3VuZHMtPmhlaWdodCAtIHJlY3QudG9wOworCXJlY3Qud2lkdGggJj0gfjdMOworCXJlY3QuaGVpZ2h0ICY9IH43TDsKKworCXBpeC0+d2lkdGggPSByZWN0LndpZHRoOworCXBpeC0+aGVpZ2h0ID0gcmVjdC5oZWlnaHQ7CisJcGl4LT5waXhlbGZvcm1hdCA9IHBmbXQtPnBpeGVsZm9ybWF0OworCXBpeC0+cHJpdiA9IHBmbXQtPnByaXY7CisJcGl4LT5jb2xvcnNwYWNlID0gcGZtdC0+Y29sb3JzcGFjZTsKKwlwaXgtPmJ5dGVzcGVybGluZSA9IDA7CisJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmhlaWdodCAqICgocGl4LT53aWR0aCAqIHBpeC0+cHJpdikgLyA4KTsKKwlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCisJaWYgKGNtZCA9PSBWSURJT0NfVFJZX0ZNVCkgeworCQlpZiAoY29weV90b191c2VyKGFyZywgJmZvcm1hdCwgc2l6ZW9mKGZvcm1hdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKworCWlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXApCisJCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspCisJCQlpZiAoY2FtLT5mcmFtZVtpXS52bWFfdXNlX2NvdW50KSB7CisJCQkJREJHKDMsICJWSURJT0NfU19GTVQgZmFpbGVkLiAiCisJCQkJICAgICAgICJVbm1hcCB0aGUgYnVmZmVycyBmaXJzdC4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT04pCisJCWlmICgoZXJyID0gemMwMzAxX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCisJCQlyZXR1cm4gZXJyOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKSkgeworCQljYW0tPnN0cmVhbSA9IHN0cmVhbTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCB8fCBjYW0tPmlvID09IElPX1JFQUQpCisJCXpjMDMwMV9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKKworCWlmIChzLT5zZXRfY3JvcCkKKwkJZXJyICs9IHMtPnNldF9jcm9wKGNhbSwgJnJlY3QpOworCisJaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KKwkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKKwkJREJHKDEsICJWSURJT0NfU19GTVQgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgcHJvYmxlbXMuIFRvICIKKwkJICAgICAgICJ1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gL2Rldi92aWRlbyVkIGFnYWluLiIsCisJCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltZW1jcHkocGZtdCwgcGl4LCBzaXplb2YoKnBpeCkpOworCW1lbWNweSgmKHMtPl9yZWN0KSwgJnJlY3QsIHNpemVvZihyZWN0KSk7CisKKwlpZiAoKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKSAmJgorCSAgICBuYnVmZmVycyAhPSB6YzAzMDFfcmVxdWVzdF9idWZmZXJzKGNhbSwgbmJ1ZmZlcnMsIGNhbS0+aW8pKSB7CisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCURCRygxLCAiVklESU9DX1NfRk1UIGZhaWxlZCBiZWNhdXNlIG9mIG5vdCBlbm91Z2ggbWVtb3J5LiBUbyAiCisJCSAgICAgICAidXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLAorCQkgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGNhbS0+aW8gPT0gSU9fUkVBRCkKKwkJemMwMzAxX2VtcHR5X2ZyYW1lcXVldWVzKGNhbSk7CisJZWxzZSBpZiAoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwKQorCQl6YzAzMDFfcmVxdWV1ZV9vdXRxdWV1ZShjYW0pOworCisJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit6YzAzMDFfdmlkaW9jX2dfanBlZ2NvbXAoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYW0tPmNvbXByZXNzaW9uLCBzaXplb2YoY2FtLT5jb21wcmVzc2lvbikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2Nfc19qcGVnY29tcChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gamM7CisJY29uc3QgZW51bSB6YzAzMDFfc3RyZWFtX3N0YXRlIHN0cmVhbSA9IGNhbS0+c3RyZWFtOworCWludCBlcnIgPSAwOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZqYywgYXJnLCBzaXplb2YoamMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoamMucXVhbGl0eSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT04pCisJCWlmICgoZXJyID0gemMwMzAxX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCisJCQlyZXR1cm4gZXJyOworCisJZXJyICs9IHpjMDMwMV9zZXRfY29tcHJlc3Npb24oY2FtLCAmamMpOworCWlmIChlcnIpIHsgLyogYXRvbWljLCBubyByb2xsYmFjayBpbiBpb2N0bCgpICovCisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCURCRygxLCAiVklESU9DX1NfSlBFR0NPTVAgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgorCQkgICAgICAgInByb2JsZW1zLiBUbyB1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gIgorCQkgICAgICAgIi9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwljYW0tPmNvbXByZXNzaW9uLnF1YWxpdHkgPSBqYy5xdWFsaXR5OworCisJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit6YzAzMDFfdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgcmI7CisJdTMyIGk7CisJaW50IGVycjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmcmIsIGFyZywgc2l6ZW9mKHJiKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHJiLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJICAgIHJiLm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjYW0tPmlvID09IElPX1JFQUQpIHsKKwkJREJHKDMsICJDbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGFnYWluIHRvIGNob29zZSB0aGUgbW1hcCAiCisJCSAgICAgICAiSS9PIG1ldGhvZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQorCQlpZiAoY2FtLT5mcmFtZVtpXS52bWFfdXNlX2NvdW50KSB7CisJCQlEQkcoMywgIlZJRElPQ19SRVFCVUZTIGZhaWxlZC4gIgorCQkJICAgICAgICJQcmV2aW91cyBidWZmZXJzIGFyZSBzdGlsbCBtYXBwZWQuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJaWYgKChlcnIgPSB6YzAzMDFfc3RyZWFtX2ludGVycnVwdChjYW0pKSkKKwkJCXJldHVybiBlcnI7CisKKwl6YzAzMDFfZW1wdHlfZnJhbWVxdWV1ZXMoY2FtKTsKKworCXpjMDMwMV9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKKwlpZiAocmIuY291bnQpCisJCXJiLmNvdW50ID0gemMwMzAxX3JlcXVlc3RfYnVmZmVycyhjYW0sIHJiLmNvdW50LCBJT19NTUFQKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcmIsIHNpemVvZihyYikpKSB7CisJCXpjMDMwMV9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKKwkJY2FtLT5pbyA9IElPX05PTkU7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWNhbS0+aW8gPSByYi5jb3VudCA/IElPX01NQVAgOiBJT19OT05FOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAoremMwMzAxX3ZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgdjRsMl9idWZmZXIgYjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYiwgYXJnLCBzaXplb2YoYikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChiLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJICAgIGIuaW5kZXggPj0gY2FtLT5uYnVmZmVycyB8fCBjYW0tPmlvICE9IElPX01NQVApCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KCZiLCAmY2FtLT5mcmFtZVtiLmluZGV4XS5idWYsIHNpemVvZihiKSk7CisKKwlpZiAoY2FtLT5mcmFtZVtiLmluZGV4XS52bWFfdXNlX2NvdW50KQorCQliLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOworCisJaWYgKGNhbS0+ZnJhbWVbYi5pbmRleF0uc3RhdGUgPT0gRl9ET05FKQorCQliLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKwllbHNlIGlmIChjYW0tPmZyYW1lW2IuaW5kZXhdLnN0YXRlICE9IEZfVU5VU0VEKQorCQliLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZiLCBzaXplb2YoYikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2NfcWJ1ZihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgdjRsMl9idWZmZXIgYjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmIsIGFyZywgc2l6ZW9mKGIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoYi50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCSAgICBiLmluZGV4ID49IGNhbS0+bmJ1ZmZlcnMgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjYW0tPmZyYW1lW2IuaW5kZXhdLnN0YXRlICE9IEZfVU5VU0VEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhbS0+ZnJhbWVbYi5pbmRleF0uc3RhdGUgPSBGX1FVRVVFRDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmNhbS0+ZnJhbWVbYi5pbmRleF0uZnJhbWUsICZjYW0tPmlucXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwlQREJHRygiRnJhbWUgIyVsdSBxdWV1ZWQiLCAodW5zaWduZWQgbG9uZyliLmluZGV4KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2NfZHFidWYoc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgc3RydWN0IGZpbGUqIGZpbHAsCisJCSAgICB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgdjRsMl9idWZmZXIgYjsKKwlzdHJ1Y3QgemMwMzAxX2ZyYW1lX3QgKmY7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWxvbmcgdGltZW91dDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYiwgYXJnLCBzaXplb2YoYikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChiLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8IGNhbS0+aW8hPSBJT19NTUFQKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgeworCQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09GRikKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJdGltZW91dCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CisJCQkgICggY2FtLT53YWl0X2ZyYW1lLAorCQkJICAgICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8CisJCQkgICAgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAorCQkJICAgIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpLAorCQkJICAgIGNhbS0+bW9kdWxlX3BhcmFtLmZyYW1lX3RpbWVvdXQgKgorCQkJICAgIDEwMDAgKiBtc2Vjc190b19qaWZmaWVzKDEpICk7CisJCWlmICh0aW1lb3V0IDwgMCkKKwkJCXJldHVybiB0aW1lb3V0OworCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKCF0aW1lb3V0IHx8IChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpKQorCQkJcmV0dXJuIC1FSU87CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisJZiA9IGxpc3RfZW50cnkoY2FtLT5vdXRxdWV1ZS5uZXh0LCBzdHJ1Y3QgemMwMzAxX2ZyYW1lX3QsIGZyYW1lKTsKKwlsaXN0X2RlbChjYW0tPm91dHF1ZXVlLm5leHQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+cXVldWVfbG9jaywgbG9ja19mbGFncyk7CisKKwlmLT5zdGF0ZSA9IEZfVU5VU0VEOworCisJbWVtY3B5KCZiLCAmZi0+YnVmLCBzaXplb2YoYikpOworCWlmIChmLT52bWFfdXNlX2NvdW50KQorCQliLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZiLCBzaXplb2YoYikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCVBEQkdHKCJGcmFtZSAjJWx1IGRlcXVldWVkIiwgKHVuc2lnbmVkIGxvbmcpZi0+YnVmLmluZGV4KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2Nfc3RyZWFtb24oc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJaW50IHR5cGU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnR5cGUsIGFyZywgc2l6ZW9mKHR5cGUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsaXN0X2VtcHR5KCZjYW0tPmlucXVldWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhbS0+c3RyZWFtID0gU1RSRUFNX09OOworCisJREJHKDMsICJTdHJlYW0gb24iKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCWludCB0eXBlLCBlcnI7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnR5cGUsIGFyZywgc2l6ZW9mKHR5cGUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT04pCisJCWlmICgoZXJyID0gemMwMzAxX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCisJCQlyZXR1cm4gZXJyOworCisJemMwMzAxX2VtcHR5X2ZyYW1lcXVldWVzKGNhbSk7CisKKwlEQkcoMywgIlN0cmVhbSBvZmYiKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2NfZ19wYXJtKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gc3A7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNwLCBhcmcsIHNpemVvZihzcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzcC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcC5wYXJtLmNhcHR1cmUuZXh0ZW5kZWRtb2RlID0gMDsKKwlzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBjYW0tPm5yZWFkYnVmZmVyczsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3AsIHNpemVvZihzcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3pjMDMwMV92aWRpb2Nfc19wYXJtKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gc3A7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNwLCBhcmcsIHNpemVvZihzcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzcC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcC5wYXJtLmNhcHR1cmUuZXh0ZW5kZWRtb2RlID0gMDsKKworCWlmIChzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPT0gMCkKKwkJc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gY2FtLT5ucmVhZGJ1ZmZlcnM7CisKKwlpZiAoc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID4gWkMwMzAxX01BWF9GUkFNRVMpCisJCXNwLnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IFpDMDMwMV9NQVhfRlJBTUVTOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZzcCwgc2l6ZW9mKHNwKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJY2FtLT5ucmVhZGJ1ZmZlcnMgPSBzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnM7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHpjMDMwMV9pb2N0bF92NGwyKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBWSURJT0NfUVVFUllDQVA6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX3F1ZXJ5Y2FwKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2NfZW51bWlucHV0KGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX0dfSU5QVVQ6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX2dfaW5wdXQoY2FtLCBhcmcpOworCisJY2FzZSBWSURJT0NfU19JTlBVVDoKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2Nfc19pbnB1dChjYW0sIGFyZyk7CisKKwljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX3F1ZXJ5X2N0cmwoY2FtLCBhcmcpOworCisJY2FzZSBWSURJT0NfR19DVFJMOgorCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19nX2N0cmwoY2FtLCBhcmcpOworCisJY2FzZSBWSURJT0NfU19DVFJMX09MRDoKKwljYXNlIFZJRElPQ19TX0NUUkw6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX3NfY3RybChjYW0sIGFyZyk7CisKKwljYXNlIFZJRElPQ19DUk9QQ0FQX09MRDoKKwljYXNlIFZJRElPQ19DUk9QQ0FQOgorCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19jcm9wY2FwKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX0dfQ1JPUDoKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2NfZ19jcm9wKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX1NfQ1JPUDoKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2Nfc19jcm9wKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19lbnVtX2ZtdChjYW0sIGFyZyk7CisKKwljYXNlIFZJRElPQ19HX0ZNVDoKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2NfZ19mbXQoY2FtLCBhcmcpOworCisJY2FzZSBWSURJT0NfVFJZX0ZNVDoKKwljYXNlIFZJRElPQ19TX0ZNVDoKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2NfdHJ5X3NfZm10KGNhbSwgY21kLCBhcmcpOworCisJY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2NfZ19qcGVnY29tcChjYW0sIGFyZyk7CisKKwljYXNlIFZJRElPQ19TX0pQRUdDT01QOgorCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19zX2pwZWdjb21wKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX1JFUUJVRlM6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX3JlcWJ1ZnMoY2FtLCBhcmcpOworCisJY2FzZSBWSURJT0NfUVVFUllCVUY6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX3F1ZXJ5YnVmKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX1FCVUY6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX3FidWYoY2FtLCBhcmcpOworCisJY2FzZSBWSURJT0NfRFFCVUY6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX2RxYnVmKGNhbSwgZmlscCwgYXJnKTsKKworCWNhc2UgVklESU9DX1NUUkVBTU9OOgorCQlyZXR1cm4gemMwMzAxX3ZpZGlvY19zdHJlYW1vbihjYW0sIGFyZyk7CisKKwljYXNlIFZJRElPQ19TVFJFQU1PRkY6CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX3N0cmVhbW9mZihjYW0sIGFyZyk7CisKKwljYXNlIFZJRElPQ19HX1BBUk06CisJCXJldHVybiB6YzAzMDFfdmlkaW9jX2dfcGFybShjYW0sIGFyZyk7CisKKwljYXNlIFZJRElPQ19TX1BBUk1fT0xEOgorCWNhc2UgVklESU9DX1NfUEFSTToKKwkJcmV0dXJuIHpjMDMwMV92aWRpb2Nfc19wYXJtKGNhbSwgYXJnKTsKKworCWNhc2UgVklESU9DX0dfU1REOgorCWNhc2UgVklESU9DX1NfU1REOgorCWNhc2UgVklESU9DX1FVRVJZU1REOgorCWNhc2UgVklESU9DX0VOVU1TVEQ6CisJY2FzZSBWSURJT0NfUVVFUllNRU5VOgorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCisJfQorfQorCisKK3N0YXRpYyBpbnQgemMwMzAxX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCWludCBlcnIgPSAwOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3BfbXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCURCRygxLCAiRGV2aWNlIG5vdCBwcmVzZW50Iik7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCURCRygxLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCAiCisJCSAgICAgICAiYWdhaW4uIik7CisJCW11dGV4X3VubG9jaygmY2FtLT5maWxlb3BfbXV0ZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlWNExEQkcoMywgInpjMDMwMSIsIGNtZCk7CisKKwllcnIgPSB6YzAzMDFfaW9jdGxfdjRsMihpbm9kZSwgZmlscCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCisJbXV0ZXhfdW5sb2NrKCZjYW0tPmZpbGVvcF9tdXRleCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpjMDMwMV9mb3BzID0geworCS5vd25lciA9ICAgVEhJU19NT0RVTEUsCisJLm9wZW4gPSAgICB6YzAzMDFfb3BlbiwKKwkucmVsZWFzZSA9IHpjMDMwMV9yZWxlYXNlLAorCS5pb2N0bCA9ICAgemMwMzAxX2lvY3RsLAorCS5yZWFkID0gICAgemMwMzAxX3JlYWQsCisJLnBvbGwgPSAgICB6YzAzMDFfcG9sbCwKKwkubW1hcCA9ICAgIHpjMDMwMV9tbWFwLAorCS5sbHNlZWsgPSAgbm9fbGxzZWVrLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50Cit6YzAzMDFfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlKiBpbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCogaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW07CisJc3RhdGljIHVuc2lnbmVkIGludCBkZXZfbnIgPSAwOworCXVuc2lnbmVkIGludCBpOworCWludCBlcnIgPSAwOworCisJaWYgKCEoY2FtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpjMDMwMV9kZXZpY2UpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FtLT51c2JkZXYgPSB1ZGV2OworCisJaWYgKCEoY2FtLT5jb250cm9sX2J1ZmZlciA9IGt6YWxsb2MoNCwgR0ZQX0tFUk5FTCkpKSB7CisJCURCRygxLCAia21hbGxvYygpIGZhaWxlZCIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKCEoY2FtLT52NGxkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKSkpIHsKKwkJREJHKDEsICJ2aWRlb19kZXZpY2VfYWxsb2MoKSBmYWlsZWQiKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCW11dGV4X2luaXQoJmNhbS0+ZGV2X211dGV4KTsKKworCURCRygyLCAiWkMwMzAxIEltYWdlIFByb2Nlc3NvciBhbmQgQ29udHJvbCBDaGlwIGRldGVjdGVkICIKKwkgICAgICAgIih2aWQvcGlkIDB4JTA0WC8weCUwNFgpIixpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCisJZm9yICAoaSA9IDA7IHpjMDMwMV9zZW5zb3JfdGFibGVbaV07IGkrKykgeworCQllcnIgPSB6YzAzMDFfc2Vuc29yX3RhYmxlW2ldKGNhbSk7CisJCWlmICghZXJyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFlcnIpCisJCURCRygyLCAiJXMgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIiwgY2FtLT5zZW5zb3IubmFtZSk7CisJZWxzZSB7CisJCURCRygxLCAiTm8gc3VwcG9ydGVkIGltYWdlIHNlbnNvciBkZXRlY3RlZCIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKHpjMDMwMV9pbml0KGNhbSkpIHsKKwkJREJHKDEsICJJbml0aWFsaXphdGlvbiBmYWlsZWQuIEkgd2lsbCByZXRyeSBvbiBvcGVuKCkuIik7CisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJfQorCisJc3RyY3B5KGNhbS0+djRsZGV2LT5uYW1lLCAiWkMwMzAxIFBDIENhbWVyYSIpOworCWNhbS0+djRsZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOworCWNhbS0+djRsZGV2LT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NDQUxFUzsKKwljYW0tPnY0bGRldi0+aGFyZHdhcmUgPSAwOworCWNhbS0+djRsZGV2LT5mb3BzID0gJnpjMDMwMV9mb3BzOworCWNhbS0+djRsZGV2LT5taW5vciA9IHZpZGVvX25yW2Rldl9ucl07CisJY2FtLT52NGxkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgY2FtKTsKKworCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwKKwkJCQkgICAgdmlkZW9fbnJbZGV2X25yXSk7CisJaWYgKGVycikgeworCQlEQkcoMSwgIlY0TDIgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQiKTsKKwkJaWYgKGVyciA9PSAtRU5GSUxFICYmIHZpZGVvX25yW2Rldl9ucl0gPT0gLTEpCisJCQlEQkcoMSwgIkZyZWUgL2Rldi92aWRlb1ggbm9kZSBub3QgZm91bmQiKTsKKwkJdmlkZW9fbnJbZGV2X25yXSA9IC0xOworCQlkZXZfbnIgPSAoZGV2X25yIDwgWkMwMzAxX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOworCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKKwkJZ290byBmYWlsOworCX0KKworCURCRygyLCAiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bWlub3IpOworCisJY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwID0gZm9yY2VfbXVubWFwW2Rldl9ucl07CisJY2FtLT5tb2R1bGVfcGFyYW0uZnJhbWVfdGltZW91dCA9IGZyYW1lX3RpbWVvdXRbZGV2X25yXTsKKworCWRldl9uciA9IChkZXZfbnIgPCBaQzAzMDFfTUFYX0RFVklDRVMtMSkgPyBkZXZfbnIrMSA6IDA7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhbSk7CisKKwltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKKworCXJldHVybiAwOworCitmYWlsOgorCWlmIChjYW0pIHsKKwkJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CisJCWlmIChjYW0tPnY0bGRldikKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKGNhbS0+djRsZGV2KTsKKwkJa2ZyZWUoY2FtKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCB6YzAzMDFfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UqIGludGYpCit7CisJc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoIWNhbSkKKwkJcmV0dXJuOworCisJZG93bl93cml0ZSgmemMwMzAxX2Rpc2Nvbm5lY3QpOworCisJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOworCisJREJHKDIsICJEaXNjb25uZWN0aW5nICVzLi4uIiwgY2FtLT52NGxkZXYtPm5hbWUpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmY2FtLT5vcGVuKTsKKworCWlmIChjYW0tPnVzZXJzKSB7CisJCURCRygyLCAiRGV2aWNlIC9kZXYvdmlkZW8lZCBpcyBvcGVuISBEZXJlZ2lzdHJhdGlvbiBhbmQgIgorCQkgICAgICAgIm1lbW9yeSBkZWFsbG9jYXRpb24gYXJlIGRlZmVycmVkIG9uIGNsb3NlLiIsCisJCSAgICBjYW0tPnY0bGRldi0+bWlub3IpOworCQljYW0tPnN0YXRlIHw9IERFVl9NSVNDT05GSUdVUkVEOworCQl6YzAzMDFfc3RvcF90cmFuc2ZlcihjYW0pOworCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FtLT53YWl0X2ZyYW1lKTsKKwkJd2FrZV91cCgmY2FtLT53YWl0X3N0cmVhbSk7CisJCXVzYl9nZXRfZGV2KGNhbS0+dXNiZGV2KTsKKwl9IGVsc2UgeworCQljYW0tPnN0YXRlIHw9IERFVl9ESVNDT05ORUNURUQ7CisJCXpjMDMwMV9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOworCX0KKworCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOworCisJaWYgKCFjYW0tPnVzZXJzKQorCQlrZnJlZShjYW0pOworCisJdXBfd3JpdGUoJnpjMDMwMV9kaXNjb25uZWN0KTsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgemMwMzAxX3VzYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAgICAgICAiemMwMzAxIiwKKwkuaWRfdGFibGUgPSAgIHpjMDMwMV9pZF90YWJsZSwKKwkucHJvYmUgPSAgICAgIHpjMDMwMV91c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB6YzAzMDFfdXNiX2Rpc2Nvbm5lY3QsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHpjMDMwMV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAwOworCisJS0RCRygyLCBaQzAzMDFfTU9EVUxFX05BTUUgIiB2IiBaQzAzMDFfTU9EVUxFX1ZFUlNJT04pOworCUtEQkcoMywgWkMwMzAxX01PRFVMRV9BVVRIT1IpOworCisJaWYgKChlcnIgPSB1c2JfcmVnaXN0ZXIoJnpjMDMwMV91c2JfZHJpdmVyKSkpCisJCUtEQkcoMSwgInVzYl9yZWdpc3RlcigpIGZhaWxlZCIpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgemMwMzAxX21vZHVsZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnpjMDMwMV91c2JfZHJpdmVyKTsKK30KKworCittb2R1bGVfaW5pdCh6YzAzMDFfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoemMwMzAxX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9wYXMyMDJiY2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9wYXMyMDJiY2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWFkZjAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3BhczIwMmJjYi5jCkBAIC0wLDAgKzEsMzYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbHVnLWluIGZvciBQQVMyMDJCQ0IgaW1hZ2Ugc2Vuc29yIGNvbm5lY3RlZCB0byB0aGUgWkMwMzAhIEltYWdlICAgICAgICAqCisgKiBQcm9jZXNzb3IgYW5kIENvbnRyb2wgQ2hpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBJbml0aWFsaXphdGlvbiB2YWx1ZXMgb2YgdGhlIFpDMDMwMSBoYXZlIGJlZW4gdGFrZW4gZnJvbSB0aGUgU1BDQTVYWCAgICAqCisgKiBkcml2ZXIgbWFpbnRhaW5lZCBieSBNaWNoZWwgWGhhYXJkIDxteGhhYXJkQG1hZ2ljLmZyPiAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgTk9URTogU2Vuc29yIGNvbnRyb2xzIGFyZSBkaXNhYmxlZCBmb3Igbm93LCBiZWNvdXNlIGNoYW5naW5nIHRoZW0gd2hpbGUKKwkgc3RyZWFtaW5nIHNvbWV0aW1lcyByZXN1bHRzIGluIG91dC1vZi1zeW5jIHZpZGVvIGZyYW1lcy4gV2UnbGwgdXNlCisJIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uLCB1bnRpbCB3ZSBrbm93IGhvdyB0byBzdG9wIGFuZCBzdGFydCB2aWRlbworCSBpbiB0aGUgY2hpcC4gSG93ZXZlciwgdGhlIGltYWdlIHF1YWxpdHkgc3RpbGwgbG9va3MgZ29vZCB1bmRlciB2YXJpb3VzCisJIGxpZ2h0IGNvbmRpdGlvbnMuCisqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJ6YzAzMDFfc2Vuc29yLmgiCisKKworc3RhdGljIHN0cnVjdCB6YzAzMDFfc2Vuc29yIHBhczIwMmJjYjsKKworCitzdGF0aWMgaW50IHBhczIwMmJjYl9pbml0KHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwMiwgMHgwMCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDMsIDB4MDIpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDA0LCAweDgwKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwNSwgMHgwMSk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDYsIDB4RTApOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDk4LCAweDAwKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5QSwgMHgwMyk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMUEsIDB4MDApOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTFDLCAweDAzKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5QiwgMHgwMSk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwOUMsIDB4RTYpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDlELCAweDAyKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA5RSwgMHg4Nik7CisKKwllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MDIsIDB4MDIpOworCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwQSwgMHgwMSk7CisJZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDBCLCAweDAxKTsKKwllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MEQsIDB4MDApOworCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgxMiwgMHgwNSk7CisJZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDEzLCAweDYzKTsKKwllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MTUsIDB4NzApOworCisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMDEsIDB4QjcpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTAwLCAweDBEKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE4OSwgMHgwNik7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQUQsIDB4MDApOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUM1LCAweDAzKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDFDQiwgMHgxMyk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAyNTAsIDB4MDgpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMzAxLCAweDA4KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE4RCwgMHg3MCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDgsIDB4MDMpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMUM2LCAweDA0KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDFDQiwgMHgwNyk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMjAsIDB4MTEpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTIxLCAweDM3KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyMiwgMHg1OCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMjMsIDB4NzkpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTI0LCAweDkxKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyNSwgMHhBNik7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMjYsIDB4QjgpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTI3LCAweEM3KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyOCwgMHhEMyk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMjksIDB4REUpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTJBLCAweEU2KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyQiwgMHhFRCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMkMsIDB4RjMpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTJELCAweEY4KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEyRSwgMHhGQik7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMkYsIDB4RkYpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTMwLCAweDI2KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzMSwgMHgyMyk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMzIsIDB4MjApOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTMzLCAweDFDKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzNCwgMHgxNik7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMzUsIDB4MTMpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTM2LCAweDEwKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzNywgMHgwRCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMzgsIDB4MEIpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTM5LCAweDA5KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzQSwgMHgwNyk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxM0IsIDB4MDYpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTNDLCAweDA1KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEzRCwgMHgwNCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxM0UsIDB4MDMpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTNGLCAweDAyKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwQSwgMHg0Qyk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMEIsIDB4RjUpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTBDLCAweEZGKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDEwRCwgMHhGOSk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMEUsIDB4NTEpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTBGLCAweEY1KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExMCwgMHhGQik7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMTEsIDB4RUQpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTEyLCAweDVGKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE4MCwgMHgwMCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMTksIDB4MDApOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDg3LCAweDIwKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA4OCwgMHgyMSk7CisKKwllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MjAsIDB4MDIpOworCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgyMSwgMHgxQik7CisJZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDAzLCAweDQ0KTsKKwllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MEUsIDB4MDEpOworCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwRiwgMHgwMCk7CisKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDFBOSwgMHgxNCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxQUEsIDB4MjQpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTkwLCAweDAwKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE5MSwgMHgwMik7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOTIsIDB4MUIpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTk1LCAweDAwKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE5NiwgMHgwMCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOTcsIDB4NEQpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMThDLCAweDEwKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE4RiwgMHgyMCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMUQsIDB4NDQpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDFFLCAweDZGKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAxRiwgMHhBRCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMjAsIDB4RUIpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDg3LCAweDBGKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDA4OCwgMHgwRSk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxODAsIDB4NDApOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTkyLCAweDFCKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDE5MSwgMHgwMik7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxOTAsIDB4MDApOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTE2LCAweDFEKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExNywgMHg0MCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMTgsIDB4OTkpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTgwLCAweDQyKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDExNiwgMHgxRCk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAxMTcsIDB4NDApOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMTE4LCAweDk5KTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAwNywgMHgwMCk7CisKKwllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDEpOworCisJbXNsZWVwKDEwMCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgcGFzMjAyYmNiX2dldF9jdHJsKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiBjYW0sCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQl7CisJCQlpbnQgcjEgPSB6YzAzMDFfaTJjX3JlYWQoY2FtLCAweDA0LCAxKSwKKwkJCSAgICByMiA9IHpjMDMwMV9pMmNfcmVhZChjYW0sIDB4MDUsIDEpOworCQkJaWYgKHIxIDwgMCB8fCByMiA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCQljdHJsLT52YWx1ZSA9IChyMSA8PCA2KSB8IChyMiAmIDB4M2YpOworCQl9CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSB6YzAzMDFfaTJjX3JlYWQoY2FtLCAweDA5LCAxKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MGY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gemMwMzAxX2kyY19yZWFkKGNhbSwgMHgwNywgMSkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDBmOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWlmICgoY3RybC0+dmFsdWUgPSB6YzAzMDFfaTJjX3JlYWQoY2FtLCAweDEwLCAxKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MWY7CisJCXJldHVybiAwOworCWNhc2UgWkMwMzAxX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSB6YzAzMDFfaTJjX3JlYWQoY2FtLCAweDA4LCAxKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MGY7CisJCXJldHVybiAwOworCWNhc2UgWkMwMzAxX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREU6CisJCWlmICgoY3RybC0+dmFsdWUgPSB6YzAzMDFfaTJjX3JlYWQoY2FtLCAweDBjLCAxKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworCitzdGF0aWMgaW50IHBhczIwMmJjYl9zZXRfY3RybChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MDQsIGN0cmwtPnZhbHVlID4+IDYpOworCQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MDUsIGN0cmwtPnZhbHVlICYgMHgzZik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwOSwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDA3LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJZXJyICs9IHpjMDMwMV9pMmNfd3JpdGUoY2FtLCAweDEwLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgWkMwMzAxX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgwOCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFpDMDMwMV9WNEwyX0NJRF9EQUNfTUFHTklUVURFOgorCQllcnIgKz0gemMwMzAxX2kyY193cml0ZShjYW0sIDB4MGMsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWVyciArPSB6YzAzMDFfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwMSk7CisKKwlyZXR1cm4gZXJyID8gLUVJTyA6IDA7Cit9CisKKworc3RhdGljIHN0cnVjdCB6YzAzMDFfc2Vuc29yIHBhczIwMmJjYiA9IHsKKwkubmFtZSA9ICJQQVMyMDJCQ0IiLAorCS5pbml0ID0gJnBhczIwMmJjYl9pbml0LAorCS5xY3RybCA9IHsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJleHBvc3VyZSIsCisJCQkubWluaW11bSA9IDB4MDFlNSwKKwkJCS5tYXhpbXVtID0gMHgzZmZmLAorCQkJLnN0ZXAgPSAweDAwMDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDFlNSwKKwkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ2xvYmFsIGdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDFmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDBjLAorCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJCX0sCisJCXsKKwkJCS5pZCA9IFpDMDMwMV9WNEwyX0NJRF9EQUNfTUFHTklUVURFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiREFDIG1hZ25pdHVkZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4ZmYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJyZWQgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MGYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisJCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiYmx1ZSBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgwZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNSwKKwkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVELAorCQl9LAorCQl7CisJCQkuaWQgPSBaQzAzMDFfVjRMMl9DSURfR1JFRU5fQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdyZWVuIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDBmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQsCisJCX0sCisJfSwKKwkuZ2V0X2N0cmwgPSAmcGFzMjAyYmNiX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZwYXMyMDJiY2Jfc2V0X2N0cmwsCisJLmNyb3BjYXAgPSB7CisJCS5ib3VuZHMgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJCS5kZWZyZWN0ID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCX0sCisJLnBpeF9mb3JtYXQgPSB7CisJCS53aWR0aCA9IDY0MCwKKwkJLmhlaWdodCA9IDQ4MCwKKwkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUcsCisJCS5wcml2ID0gOCwKKwl9LAorfTsKKworCitpbnQgemMwMzAxX3Byb2JlX3BhczIwMmJjYihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKQoreworCWludCByMCA9IDAsIHIxID0gMCwgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgcGlkID0gMDsKKworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDAxKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAxMCwgMHgwZSk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwMDEsIDB4MDEpOworCWVyciArPSB6YzAzMDFfd3JpdGVfcmVnKGNhbSwgMHgwMDEyLCAweDAzKTsKKwllcnIgKz0gemMwMzAxX3dyaXRlX3JlZyhjYW0sIDB4MDAxMiwgMHgwMSk7CisJZXJyICs9IHpjMDMwMV93cml0ZV9yZWcoY2FtLCAweDAwOGQsIDB4MDgpOworCisJbXNsZWVwKDEwKTsKKworCXIwID0gemMwMzAxX2kyY19yZWFkKGNhbSwgMHgwMCwgMSk7CisJcjEgPSB6YzAzMDFfaTJjX3JlYWQoY2FtLCAweDAxLCAxKTsKKworCWlmIChyMCA8IDAgfHwgcjEgPCAwIHx8IGVycikKKwkJcmV0dXJuIC1FSU87CisKKwlwaWQgPSAocjAgPDwgNCkgfCAoKHIxICYgMHhmMCkgPj4gNCk7CisJaWYgKHBpZCAhPSAweDAxNykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl6YzAzMDFfYXR0YWNoX3NlbnNvcihjYW0sICZwYXMyMDJiY2IpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5NWMyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9zZW5zb3IuaApAQCAtMCwwICsxLDEwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJIGZvciBpbWFnZSBzZW5zb3JzIGNvbm5lY3RlZCB0byB0aGUgWkMwMzAhIEltYWdlIFByb2Nlc3NvciBhbmQgICAgICAgKgorICogQ29udHJvbCBDaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfWkMwMzAxX1NFTlNPUl9IXworI2RlZmluZSBfWkMwMzAxX1NFTlNPUl9IXworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgemMwMzAxX2RldmljZTsKK3N0cnVjdCB6YzAzMDFfc2Vuc29yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBpbnQgemMwMzAxX3Byb2JlX3BhczIwMmJjYihzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtKTsKKworI2RlZmluZSBaQzAzMDFfU0VOU09SX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLyogV2VhayBkZXRlY3Rpb25zIG11c3QgZ28gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGludCAoKnpjMDMwMV9zZW5zb3JfdGFibGVbXSkoc3RydWN0IHpjMDMwMV9kZXZpY2UqKSA9IHsgICAgICAgICAgICAgICAgXAorCSZ6YzAzMDFfcHJvYmVfcGFzMjAyYmNiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKK2V4dGVybiBzdHJ1Y3QgemMwMzAxX2RldmljZSoKK3pjMDMwMV9tYXRjaF9pZChzdHJ1Y3QgemMwMzAxX2RldmljZSogY2FtLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCitleHRlcm4gdm9pZAoremMwMzAxX2F0dGFjaF9zZW5zb3Ioc3RydWN0IHpjMDMwMV9kZXZpY2UqIGNhbSwgc3RydWN0IHpjMDMwMV9zZW5zb3IqIHNlbnNvcik7CisKKyNkZWZpbmUgWkMwMzAxX1VTQl9ERVZJQ0UodmVuZCwgcHJvZCwgaW50Y2xhc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkuaWRWZW5kb3IgPSAodmVuZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5pZFByb2R1Y3QgPSAocHJvZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLmJJbnRlcmZhY2VDbGFzcyA9IChpbnRjbGFzcykKKworI2RlZmluZSBaQzAzMDFfSURfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpjMDMwMV9pZF90YWJsZVtdID0gIHsgICAgICAgICAgICAgICAgICAgICAgXAorCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMTcsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBaQzAzMDFfVVNCX0RFVklDRSgweDA0MWUsIDB4NDAxYywgMHhmZiksIH0sIC8qIFBBUzEwNiAqLyAgICAgICAgICAgIFwKKwl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MDQxZSwgMHg0MDFlLCAweGZmKSwgfSwgLyogSFY3MTMxQiAqLyAgICAgICAgICAgXAorCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMzQsIDB4ZmYpLCB9LCAvKiBQQVMxMDYgKi8gICAgICAgICAgICBcCisJeyBaQzAzMDFfVVNCX0RFVklDRSgweDA0MWUsIDB4NDAzNSwgMHhmZiksIH0sIC8qIFBBUzEwNiAqLyAgICAgICAgICAgIFwKKwl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGFlLCAweGZmKSwgfSwgLyogUEFTMjAyQkNCICovICAgICAgICAgXAorCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMDEsIDB4ZmYpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBaQzAzMDFfVVNCX0RFVklDRSgweDEwZmQsIDB4ODA1MCwgMHhmZiksIH0sIC8qIFRBUzUxMzBEICovICAgICAgICAgIFwKKwl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gaW50IHpjMDMwMV93cml0ZV9yZWcoc3RydWN0IHpjMDMwMV9kZXZpY2UqLCB1MTYgaW5kZXgsIHUxNiB2YWx1ZSk7CitleHRlcm4gaW50IHpjMDMwMV9yZWFkX3JlZyhzdHJ1Y3QgemMwMzAxX2RldmljZSosIHUxNiBpbmRleCk7CitleHRlcm4gaW50IHpjMDMwMV9pMmNfd3JpdGUoc3RydWN0IHpjMDMwMV9kZXZpY2UqLCB1MTYgYWRkcmVzcywgdTE2IHZhbHVlKTsKK2V4dGVybiBpbnQgemMwMzAxX2kyY19yZWFkKHN0cnVjdCB6YzAzMDFfZGV2aWNlKiwgdTE2IGFkZHJlc3MsIHU4IGxlbmd0aCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBaQzAzMDFfTUFYX0NUUkxTIFY0TDJfQ0lEX0xBU1RQMS1WNEwyX0NJRF9CQVNFKzEwCisjZGVmaW5lIFpDMDMwMV9WNEwyX0NJRF9EQUNfTUFHTklUVURFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRQorI2RlZmluZSBaQzAzMDFfVjRMMl9DSURfR1JFRU5fQkFMQU5DRSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxCisKK3N0cnVjdCB6YzAzMDFfc2Vuc29yIHsKKwljaGFyIG5hbWVbMzJdOworCisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsW1pDMDMwMV9NQVhfQ1RSTFNdOworCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY3JvcGNhcDsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBpeF9mb3JtYXQ7CisKKwlpbnQgKCppbml0KShzdHJ1Y3QgemMwMzAxX2RldmljZSopOworCWludCAoKmdldF9jdHJsKShzdHJ1Y3QgemMwMzAxX2RldmljZSosIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpOworCWludCAoKnNldF9jdHJsKShzdHJ1Y3QgemMwMzAxX2RldmljZSosCisJCQljb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKTsKKwlpbnQgKCpzZXRfY3JvcCkoc3RydWN0IHpjMDMwMV9kZXZpY2UqLCBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KTsKKworCS8qIFByaXZhdGUgKi8KKwlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgX3FjdHJsW1pDMDMwMV9NQVhfQ1RSTFNdOworCXN0cnVjdCB2NGwyX3JlY3QgX3JlY3Q7Cit9OworCisjZW5kaWYgLyogX1pDMDMwMV9TRU5TT1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4uaAppbmRleCA5ZmU2YWQzLi4wMTY2ZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi5oCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogem9yYW4gLSBJb21lZ2EgQnV6IGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBSYWluZXIgSm9oYW5uaSA8UmFpbmVyQEpvaGFubmkuZGU+CkBAIC0zOTUsNyArMzk1LDcgQEAKIAlzdHJ1Y3QgdmlkZW9jb2RlYyAqY29kZWM7CS8qIHZpZGVvIGNvZGVjICovCiAJc3RydWN0IHZpZGVvY29kZWMgKnZmZTsJLyogdmlkZW8gZnJvbnQgZW5kICovCiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHJlc291cmNlX2xvY2s7CS8qIHByZXZlbnQgZXZpbCBzdHVmZiAqLworCXN0cnVjdCBtdXRleCByZXNvdXJjZV9sb2NrOwkvKiBwcmV2ZW50IGV2aWwgc3R1ZmYgKi8KIAogCXU4IGluaXRpYWxpemVkOwkJLyogZmxhZyBpZiB6b3JhbiBoYXMgYmVlbiBjb3JyZWN0bHkgaW5pdGFsaXplZCAqLwogCWludCB1c2VyOwkJLyogbnVtYmVyIG9mIGN1cnJlbnQgdXNlcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMKaW5kZXggMjQ2ZTY3Yy4uMGE4NWM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmMKQEAgLTQsNyArNCw3IEBACiAgKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgogICoKICAqIFRoaXMgcGFydCBoYW5kbGVzIGNhcmQtc3BlY2lmaWMgZGF0YSBhbmQgZGV0ZWN0aW9uCi0gKiAKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+CiAgKgogICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTY3Myw3ICs2NzQsNyBAQAogCQlLRVJOX0RFQlVHICIlczogaTJjX2NsaWVudF9yZWdpc3RlcigpIC0gZHJpdmVyIGlkID0gJWRcbiIsCiAJCVpSX0RFVk5BTUUoenIpLCBjbGllbnQtPmRyaXZlci0+aWQpOwogCi0JZG93bigmenItPnJlc291cmNlX2xvY2spOworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCWlmICh6ci0+dXNlciA+IDApIHsKIAkJLyogd2UncmUgYWxyZWFkeSBidXN5LCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvCkBAIC02OTQsNyArNjk1LDcgQEAKIAl9CiAKIGNsaWVudHJlZ191bmxvY2tfYW5kX3JldHVybjoKLQl1cCgmenItPnJlc291cmNlX2xvY2spOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTcwNyw3ICs3MDgsNyBAQAogCiAJZHByaW50aygyLCBLRVJOX0RFQlVHICIlczogaTJjX2NsaWVudF91bnJlZ2lzdGVyKClcbiIsIFpSX0RFVk5BTUUoenIpKTsKIAotCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAlpZiAoenItPnVzZXIgPiAwKSB7CiAJCXJlcyA9IC1FQlVTWTsKQEAgLTcyMiw3ICs3MjMsNyBAQAogCQlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwgIk1KUEVHWyVkXSIsIHpyLT5pZCk7CiAJfQogY2xpZW50dW5yZWdfdW5sb2NrX2FuZF9yZXR1cm46Ci0JdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC05OTUsMTAgKzk5Niw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogenIzNjA1N19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQogewotCXUzMiAqbWVtOwotCXZvaWQgKnZkZXY7Ci0JdW5zaWduZWQgbWVtX25lZWRlZDsKLQlpbnQgajsKKwlpbnQgaiwgZXJyOwogCWludCB0d28gPSAyOwogCWludCB6ZXJvID0gMDsKIApAQCAtMTA0OSwxOSArMTA0NywxNiBAQAogCiAJLyogYWxsb2NhdGUgbWVtb3J5ICpiZWZvcmUqIGRvaW5nIGFueXRoaW5nIHRvIHRoZSBoYXJkd2FyZQogCSAqIGluIGNhc2UgYWxsb2NhdGlvbiBmYWlscyAqLwotCW1lbV9uZWVkZWQgPSBCVVpfTlVNX1NUQVRfQ09NICogNDsKLQltZW0gPSBremFsbG9jKG1lbV9uZWVkZWQsIEdGUF9LRVJORUwpOwotCXZkZXYgPSAodm9pZCAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtZW0gfHwgIXZkZXYpIHsKKwl6ci0+c3RhdF9jb20gPSBremFsbG9jKEJVWl9OVU1fU1RBVF9DT00gKiA0LCBHRlBfS0VSTkVMKTsKKwl6ci0+dmlkZW9fZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghenItPnN0YXRfY29tIHx8ICF6ci0+dmlkZW9fZGV2KSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCiAJCQkiJXM6IHpyMzYwNTdfaW5pdCgpIC0ga21hbGxvYyAoU1RBVF9DT00pIGZhaWxlZFxuIiwKIAkJCVpSX0RFVk5BTUUoenIpKTsKLQkJa2ZyZWUodmRldik7Ci0JCWtmcmVlKG1lbSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXRfZnJlZTsKIAl9Ci0JenItPnN0YXRfY29tID0gbWVtOwogCWZvciAoaiA9IDA7IGogPCBCVVpfTlVNX1NUQVRfQ09NOyBqKyspIHsKIAkJenItPnN0YXRfY29tW2pdID0gMTsJLyogbWFyayBhcyB1bmF2YWlsYWJsZSB0byB6cjM2MDU3ICovCiAJfQpAQCAtMTA2OSwxNiArMTA2NCwxMSBAQAogCS8qCiAJICogICBOb3cgYWRkIHRoZSB0ZW1wbGF0ZSBhbmQgcmVnaXN0ZXIgdGhlIGRldmljZSB1bml0LgogCSAqLwotCXpyLT52aWRlb19kZXYgPSB2ZGV2OwogCW1lbWNweSh6ci0+dmlkZW9fZGV2LCAmem9yYW5fdGVtcGxhdGUsIHNpemVvZih6b3Jhbl90ZW1wbGF0ZSkpOwogCXN0cmNweSh6ci0+dmlkZW9fZGV2LT5uYW1lLCBaUl9ERVZOQU1FKHpyKSk7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSh6ci0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLAotCQkJCSAgdmlkZW9fbnIpIDwgMCkgewotCQl6b3Jhbl91bnJlZ2lzdGVyX2kyYyh6cik7Ci0JCWtmcmVlKCh2b2lkICopIHpyLT5zdGF0X2NvbSk7Ci0JCWtmcmVlKHZkZXYpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh6ci0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXhpdF91bnJlZ2lzdGVyOwogCiAJem9yYW5faW5pdF9oYXJkd2FyZSh6cik7CiAJaWYgKCp6cl9kZWJ1ZyA+IDIpCkBAIC0xMDkyLDYgKzEwODIsMTMgQEAKIAl6ci0+em9yYW5fcHJvYyA9IE5VTEw7CiAJenItPmluaXRpYWxpemVkID0gMTsKIAlyZXR1cm4gMDsKKworZXhpdF91bnJlZ2lzdGVyOgorCXpvcmFuX3VucmVnaXN0ZXJfaTJjKHpyKTsKK2V4aXRfZnJlZToKKwlrZnJlZSh6ci0+c3RhdF9jb20pOworCWtmcmVlKHpyLT52aWRlb19kZXYpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTIxLDcgKzExMTgsNyBAQAogCWJ0d3JpdGUoMCwgWlIzNjA1N19TUEdQUENSKTsKIAlmcmVlX2lycSh6ci0+cGNpX2Rldi0+aXJxLCB6cik7CiAJLyogdW5tYXAgYW5kIGZyZWUgbWVtb3J5ICovCi0Ja2ZyZWUoKHZvaWQgKikgenItPnN0YXRfY29tKTsKKwlrZnJlZSh6ci0+c3RhdF9jb20pOwogCXpvcmFuX3Byb2NfY2xlYW51cCh6cik7CiAJaW91bm1hcCh6ci0+enIzNjA1N19tZW0pOwogCXBjaV9kaXNhYmxlX2RldmljZSh6ci0+cGNpX2Rldik7CkBAIC0xMjA2LDcgKzEyMDMsNyBAQAogCQl6ci0+aWQgPSB6b3Jhbl9udW07CiAJCXNucHJpbnRmKFpSX0RFVk5BTUUoenIpLCBzaXplb2YoWlJfREVWTkFNRSh6cikpLCAiTUpQRUdbJXVdIiwgenItPmlkKTsKIAkJc3Bpbl9sb2NrX2luaXQoJnpyLT5zcGlubG9jayk7Ci0JCWluaXRfTVVURVgoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfaW5pdCgmenItPnJlc291cmNlX2xvY2spOwogCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkKIAkJCWNvbnRpbnVlOwogCQl6ci0+enIzNjA1N19hZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoenItPnBjaV9kZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuaAppbmRleCBlNWI2YWNkLi5hZDk5N2MzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9jYXJkLmgKQEAgLTQsNyArNCw3IEBACiAgKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgogICoKICAqIFRoaXMgcGFydCBoYW5kbGVzIGNhcmQtc3BlY2lmaWMgZGF0YSBhbmQgZGV0ZWN0aW9uCi0gKiAKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+CiAgKgogICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuYwppbmRleCA0ZTE1YWZkLi5jNjkwYjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmMKQEAgLTQsNyArNCw3IEBACiAgKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgogICoKICAqIFRoaXMgcGFydCBoYW5kbGVzIGRldmljZSBhY2Nlc3MgKFBDSS9JMkMvY29kZWMvLi4uKQotICogCisgKgogICogQ29weXJpZ2h0IChDKSAyMDAwIFNlcmd1ZWkgTWlyaWRvbm92IDxtaXJzZXZAY2ljZXNlLm14PgogICoKICAqIEN1cnJlbnRseSBtYWludGFpbmVkIGJ5OgpAQCAtNDkyLDcgKzQ5Miw3IEBACiAJLyogKFJvbmFsZCkgZG9uJ3Qgd3JpdGUgdGhpcyBpZiBvdmVybGF5X21hc2sgPSBOVUxMICovCiAJaWYgKHpyLT5vdmVybGF5X21hc2spIHsKIAkJLyogV3JpdGUgb3ZlcmxheSBjbGlwcGluZyBtYXNrIGRhdGEsIGJ1dCBkb24ndCBlbmFibGUgb3ZlcmxheSBjbGlwcGluZyAqLwotCQkvKiBSSjogc2luY2UgdGhpcyBtYWtlcyBvbmx5IHNlbnNlIG9uIHRoZSBzY3JlZW4sIHdlIHVzZSAKKwkJLyogUko6IHNpbmNlIHRoaXMgbWFrZXMgb25seSBzZW5zZSBvbiB0aGUgc2NyZWVuLCB3ZSB1c2UKIAkJICogenItPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGggaW5zdGVhZCBvZiB2aWRlb193aWR0aCAqLwogCiAJCW1hc2tfbGluZV9zaXplID0gKEJVWl9NQVhfV0lEVEggKyAzMSkgLyAzMjsKQEAgLTgxOSwxMiArODE5LDEyIEBACiAJaWYgKHpyLT5jYXJkLnZmZV9wb2wuaHN5bmNfcG9sKQogCQlidG9yKFpSMzYwNTdfVkZFSENSX0hTUG9sLCBaUjM2MDU3X1ZGRUhDUik7CiAJZWxzZQotCQlidGFuZCh+WlIzNjA1N19WRkVIQ1JfSFNQb2wsIFpSMzYwNTdfVkZFSENSKTsJCQorCQlidGFuZCh+WlIzNjA1N19WRkVIQ1JfSFNQb2wsIFpSMzYwNTdfVkZFSENSKTsKIAlyZWcgPSAoKHR2bi0+SFN5bmNTdGFydCkgPDwgWlIzNjA1N19IU1BfSHN5bmNTdGFydCkgfAogCSAgICAgICh0dm4tPld0IDw8IFpSMzYwNTdfSFNQX0xpbmVUb3QpOwogCWJ0d3JpdGUocmVnLCBaUjM2MDU3X0hTUCk7CiAJcmVnID0gKCh6ci0+anBnX3NldHRpbmdzLmltZ194ICsKLQkgICAgICAgIHR2bi0+SFN0YXJ0ICsgNCkgPDwgWlIzNjA1N19GSEFQX05BWCkgfAorCQl0dm4tPkhTdGFydCArIDQpIDw8IFpSMzYwNTdfRkhBUF9OQVgpIHwKIAkgICAgICAoenItPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggPDwgWlIzNjA1N19GSEFQX1BBWCk7CiAJYnR3cml0ZShyZWcsIFpSMzYwNTdfRkhBUCk7CiAKQEAgLTEyNzIsMTUgKzEyNzIsMTUgQEAKIAlpZiAoenItPkpQRUdfZXJyb3IgIT0gMSkgewogCQkvKgogCQkgKiBGaXJzdCBlbnRyeTogZXJyb3IganVzdCBoYXBwZW5lZCBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbgotCQkgKiAKKwkJICoKIAkJICogSW4gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOgotCQkgKiAKKwkJICoKIAkJICogUG9zc2libGUgZ2xpdGNoIGluIFRWIHNpZ25hbC4gSW4gdGhpcyBjYXNlIHdlIHNob3VsZAogCQkgKiBzdG9wIHRoZSBjb2RlYyBhbmQgd2FpdCBmb3IgZ29vZCBxdWFsaXR5IHNpZ25hbCBiZWZvcmUKIAkJICogcmVzdGFydGluZyBpdCB0byBhdm9pZCBmdXJ0aGVyIHByb2JsZW1zCi0JCSAqIAorCQkgKgogCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKLQkJICogCisJCSAqCiAJCSAqIEJhZCBKUEVHIGZyYW1lOiB3ZSBoYXZlIHRvIG1hcmsgaXQgYXMgcHJvY2Vzc2VkIChjb2RlYyBjcmFzaGVkCiAJCSAqIGFuZCB3YXMgbm90IGFibGUgdG8gZG8gaXQgaXRzZWxmKSwgYW5kIHRvIHJlbW92ZSBpdCBmcm9tIHF1ZXVlLgogCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RldmljZS5oCmluZGV4IGYzMTUyMDMuLmYxOTcwNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZGV2aWNlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kZXZpY2UuaApAQCAtNCw3ICs0LDcgQEAKICAqIE1lZGlhIExhYnMgTE1MMzMvTE1MMzNSMTAuCiAgKgogICogVGhpcyBwYXJ0IGhhbmRsZXMgY2FyZC1zcGVjaWZpYyBkYXRhIGFuZCBkZXRlY3Rpb24KLSAqIAorICoKICAqIENvcHlyaWdodCAoQykgMjAwMCBTZXJndWVpIE1pcmlkb25vdiA8bWlyc2V2QGNpY2VzZS5teD4KICAqCiAgKiBDdXJyZW50bHkgbWFpbnRhaW5lZCBieToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCmluZGV4IDQ4NTU1M2IuLmI1YTU3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYwpAQCAtODEsNiArODEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgInpvcmFuLmgiCiAjaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCiAjaW5jbHVkZSAiem9yYW5fY2FyZC5oIgpAQCAtOTMsNyArOTQsNyBAQAogCQkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfFwKIAkJCQlWNEwyX0NBUF9WSURFT19PVVRQVVQgfFwKIAkJCQlWNEwyX0NBUF9WSURFT19PVkVSTEFZIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKwkJCSAgICAgICkKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtMTY0LDcgKzE2NSw3IEBACiAjZW5kaWYKIAkJLmRlcHRoID0gMTYsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKLQkJICAgICAgICAgWk9SQU5fRk9STUFUX09WRVJMQVksCisJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJfSwgewogCQkubmFtZSA9ICJIYXJkd2FyZS1lbmNvZGVkIE1vdGlvbi1KUEVHIiwKIAkJLnBhbGV0dGUgPSAtMSwKQEAgLTY2OSw3ICs2NzAsNyBAQAogCQkJCQkJCQkgICAgICAgal0pKSkpOwogCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykKIAkJCQkJICBidXNfdG9fdmlydAotCQkJCQkgICAgICAgICAgKGxlMzJfdG9fY3B1CisJCQkJCQkgIChsZTMyX3RvX2NwdQogCQkJCQkJICAgKGZoLT5qcGdfYnVmZmVycy4KIAkJCQkJCSAgICAgIGJ1ZmZlcltpXS4KIAkJCQkJCSAgICAgIGZyYWdfdGFiWzIgKiBqXSkpKTsKQEAgLTEyOTIsNyArMTI5Myw3IEBACiAKIAkvKiBzZWUgZnMvZGV2aWNlLmMgLSB0aGUga2VybmVsIGFscmVhZHkgbG9ja3MgZHVyaW5nIG9wZW4oKSwKIAkgKiBzbyBsb2NraW5nIG91cnNlbHZlcyBvbmx5IGNhdXNlcyBkZWFkbG9ja3MgKi8KLQkvKmRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsqLworCS8qbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOyovCiAKIAlpZiAoIXpyLT5kZWNvZGVyKSB7CiAJCWRwcmludGsoMSwKQEAgLTEzNzEsNyArMTM3Miw3IEBACiAJaWYgKHpyLT51c2VyKysgPT0gMCkKIAkJZmlyc3Rfb3BlbiA9IDE7CiAKLQkvKnVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KKwkvKm11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOyovCiAKIAkvKiBkZWZhdWx0IHNldHVwIC0gVE9ETzogbG9vayBhdCBmbGFncyAqLwogCWlmIChmaXJzdF9vcGVuKSB7CS8qIEZpcnN0IGRldmljZSBvcGVuICovCkBAIC0xNDAxLDcgKzE0MDIsNyBAQAogCiAJLyogaWYgdGhlcmUncyBubyBkZXZpY2UgZm91bmQsIHdlIGRpZG4ndCBvYnRhaW4gdGhlIGxvY2sgZWl0aGVyICovCiAJaWYgKHpyKSB7Ci0JCS8qdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsqLworCQkvKm11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOyovCiAJfQogCiAJcmV0dXJuIHJlczsKQEAgLTE0MTksNyArMTQyMCw3IEBACiAKIAkvKiBrZXJuZWwgbG9ja3MgKGZzL2RldmljZS5jKSwgc28gZG9uJ3QgZG8gdGhhdCBvdXJzZWx2ZXMKIAkgKiAocHJldmVudHMgZGVhZGxvY2tzKSAqLwotCS8qZG93bigmenItPnJlc291cmNlX2xvY2spOyovCisJLyptdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KIAogCXpvcmFuX2Nsb3NlX2VuZF9zZXNzaW9uKGZpbGUpOwogCkBAIC0xNDY2LDcgKzE0NjcsNyBAQAogCX0KIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAotCS8qdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsqLworCS8qbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KIAogCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogem9yYW5fY2xvc2UoKSBkb25lXG4iLCBaUl9ERVZOQU1FKHpyKSk7CiAKQEAgLTE4NzAsNyArMTg3MSw3IEBACiAKIHN0YXRpYyBpbnQKIHpvcmFuX3NldF9ub3JtIChzdHJ1Y3Qgem9yYW4gKnpyLAotCSAgICAgICAgaW50ICAgICAgICAgICBub3JtKSAvKiBWSURFT19NT0RFXyogKi8KKwkJaW50ICAgICAgICAgICBub3JtKSAvKiBWSURFT19NT0RFXyogKi8KIHsKIAlpbnQgbm9ybV9lbmNvZGVyLCBvbjsKIApAQCAtMjAwNSw5ICsyMDA2LDkgQEAKIAogc3RhdGljIGludAogem9yYW5fZG9faW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JICAgICAgICBzdHJ1Y3QgZmlsZSAgKmZpbGUsCi0JICAgICAgICB1bnNpZ25lZCBpbnQgIGNtZCwKLQkgICAgICAgIHZvaWQgICAgICAgICAqYXJnKQorCQlzdHJ1Y3QgZmlsZSAgKmZpbGUsCisJCXVuc2lnbmVkIGludCAgY21kLAorCQl2b2lkICAgICAgICAgKmFyZykKIHsKIAlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CkBAIC0yMDI3LDE0ICsyMDI4LDE0IEBACiAJICogYnV0IG1vdmluZyB0aGUgZnJlZSBjb2RlIG91dHNpZGUgdGhlIG11bm1hcCgpIGhhbmRsZXIgZml4ZXMKIAkgKiBhbGwgdGhpcy4uLiBJZiBzb21lb25lIGtub3dzIHdoeSwgcGxlYXNlIGV4cGxhaW4gbWUgKFJvbmFsZCkKIAkgKi8KLQlpZiAoIWRvd25fdHJ5bG9jaygmenItPnJlc291cmNlX2xvY2spKSB7CisJaWYgKCEhbXV0ZXhfdHJ5bG9jaygmenItPnJlc291cmNlX2xvY2spKSB7CiAJCS8qIHdlIG9idGFpbmVkIGl0ISBMZXQncyB0cnkgdG8gZnJlZSBzb21lIHRoaW5ncyAqLwogCQlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKQogCQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKIAkJaWYgKGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkKIAkJCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7CiAKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJfQogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTIwNTEsMTIgKzIwNTIsMTIgQEAKIAogCQl2Y2FwLT5jaGFubmVscyA9IHpyLT5jYXJkLmlucHV0czsKIAkJdmNhcC0+YXVkaW9zID0gMDsKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXZjYXAtPm1heHdpZHRoID0gQlVaX01BWF9XSURUSDsKIAkJdmNhcC0+bWF4aGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CiAJCXZjYXAtPm1pbndpZHRoID0gQlVaX01JTl9XSURUSDsKIAkJdmNhcC0+bWluaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTIwODQsOSArMjA4NSw5IEBACiAJCXZjaGFuLT50dW5lcnMgPSAwOwogCQl2Y2hhbi0+ZmxhZ3MgPSAwOwogCQl2Y2hhbi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJdmNoYW4tPm5vcm0gPSB6ci0+bm9ybTsKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXZjaGFuLT5jaGFubmVsID0gY2hhbm5lbDsKIAogCQlyZXR1cm4gMDsKQEAgLTIwOTQsNyArMjA5NSw3IEBACiAJCWJyZWFrOwogCiAJCS8qIFJKOiB0aGUgZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vcm9hZHJ1bm5lci5zd2Fuc2VhLmxpbnV4Lm9yZy51ay92NGxhcGkuc2h0bWwgc2F5czoKLQkJICogCisJCSAqCiAJCSAqICogIlRoZSBWSURJT0NTQ0hBTiBpb2N0bCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBzd2l0Y2hlcyB0aGUgY2FwdHVyZSB0byB0aGlzIGlucHV0LiIKIAkJICogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl4KIAkJICogKiBUaGUgZmFtb3MgQlRUViBkcml2ZXIgaGFzIGl0IGltcGxlbWVudGVkIHdpdGggYSBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBhcmd1bWVudApAQCAtMjExMyw3ICsyMTE0LDcgQEAKIAkJCSIlczogVklESU9DU0NIQU4gLSBjaGFubmVsPSVkLCBub3JtPSVkXG4iLAogCQkJWlJfREVWTkFNRSh6ciksIHZjaGFuLT5jaGFubmVsLCB2Y2hhbi0+bm9ybSk7CiAKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCWlmICgocmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCB2Y2hhbi0+Y2hhbm5lbCkpKQogCQkJZ290byBzY2hhbl91bmxvY2tfYW5kX3JldHVybjsKIAkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfbm9ybSh6ciwgdmNoYW4tPm5vcm0pKSkKQEAgLTIxMjIsNyArMjEyMyw3IEBACiAJCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCiAJCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKIAlzY2hhbl91bmxvY2tfYW5kX3JldHVybjoKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXJldHVybiByZXM7CiAJfQogCQlicmVhazsKQEAgLTIxMzQsNyArMjEzNSw3IEBACiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dQSUNUXG4iLCBaUl9ERVZOQU1FKHpyKSk7CiAKIAkJbWVtc2V0KHZwaWN0LCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXZwaWN0LT5odWUgPSB6ci0+aHVlOwogCQl2cGljdC0+YnJpZ2h0bmVzcyA9IHpyLT5icmlnaHRuZXNzOwogCQl2cGljdC0+Y29udHJhc3QgPSB6ci0+Y29udHJhc3Q7CkBAIC0yMTQ1LDcgKzIxNDYsNyBAQAogCQl9IGVsc2UgewogCQkJdnBpY3QtPmRlcHRoID0gMDsKIAkJfQotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMTgwLDcgKzIxODEsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX1BJQ1RVUkUsIHZwaWN0KTsKIApAQCAtMjE5MSw3ICsyMTkyLDcgQEAKIAogCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQgPSAmem9yYW5fZm9ybWF0c1tpXTsKIAotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMjA0LDkgKzIyMDUsOSBAQAogCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NDQVBUVVJFIC0gb249JWRcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJcmVzID0gc2V0dXBfb3ZlcmxheShmaWxlLCAqb24pOwotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTIyMTksMTIgKzIyMjAsMTIgQEAKIAkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR1dJTlxuIiwgWlJfREVWTkFNRSh6cikpOwogCiAJCW1lbXNldCh2d2luLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdykpOwotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJdndpbi0+eCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLng7CiAJCXZ3aW4tPnkgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OwogCQl2d2luLT53aWR0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoOwogCQl2d2luLT5oZWlnaHQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQ7Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQl2d2luLT5jbGlwY291bnQgPSAwOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMjQxLDEyICsyMjQyLDEyIEBACiAJCQlaUl9ERVZOQU1FKHpyKSwgdndpbi0+eCwgdndpbi0+eSwgdndpbi0+d2lkdGgsCiAJCQl2d2luLT5oZWlnaHQsIHZ3aW4tPmNsaXBjb3VudCk7CiAKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXJlcyA9CiAJCSAgICBzZXR1cF93aW5kb3coZmlsZSwgdndpbi0+eCwgdndpbi0+eSwgdndpbi0+d2lkdGgsCiAJCQkJIHZ3aW4tPmhlaWdodCwgdndpbi0+Y2xpcHMsCiAJCQkJIHZ3aW4tPmNsaXBjb3VudCwgTlVMTCk7Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQpAQCAtMjI1OCw5ICsyMjU5LDkgQEAKIAogCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHRkJVRlxuIiwgWlJfREVWTkFNRSh6cikpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQkqdmJ1ZiA9IHpyLT5idWZmZXI7Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAJCWJyZWFrOwpAQCAtMjI4NywxMiArMjI4OCwxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJcmVzID0KIAkJICAgIHNldHVwX2ZidWZmZXIoZmlsZSwgdmJ1Zi0+YmFzZSwgJnpvcmFuX2Zvcm1hdHNbaV0sCiAJCQkJICB2YnVmLT53aWR0aCwgdmJ1Zi0+aGVpZ2h0LAogCQkJCSAgdmJ1Zi0+Ynl0ZXNwZXJsaW5lKTsKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9CkBAIC0yMzA1LDkgKzIzMDYsOSBAQAogCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NTWU5DIC0gZnJhbWU9JWRcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJcmVzID0gdjRsX3N5bmMoZmlsZSwgKmZyYW1lKTsKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCWlmICghcmVzKQogCQkJenItPnY0bF9zeW5jX3RhaWwrKzsKIAkJcmV0dXJuIHJlczsKQEAgLTIzMjUsOSArMjMyNiw5IEBACiAJCQlaUl9ERVZOQU1FKHpyKSwgdm1hcC0+ZnJhbWUsIHZtYXAtPndpZHRoLCB2bWFwLT5oZWlnaHQsCiAJCQl2bWFwLT5mb3JtYXQpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQlyZXMgPSB2NGxfZ3JhYihmaWxlLCB2bWFwKTsKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXJldHVybiByZXM7CiAJfQogCQlicmVhazsKQEAgLTIzNDgsNyArMjM0OSw3IEBACiAJCQkgICAgaSAqIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKIAkJfQogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJCWRwcmludGsoMSwKQEAgLTIzNjcsNyArMjM2OCw3IEBACiAJCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIFY0TCBidWZmZXJzICovCiAJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKIAl2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTI0MjEsNyArMjQyMiw3IEBACiAJCWJwYXJhbXMtPm1ham9yX3ZlcnNpb24gPSBNQUpPUl9WRVJTSU9OOwogCQlicGFyYW1zLT5taW5vcl92ZXJzaW9uID0gTUlOT1JfVkVSU0lPTjsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlicGFyYW1zLT5ub3JtID0genItPm5vcm07CiAJCWJwYXJhbXMtPmlucHV0ID0genItPmlucHV0OwpAQCAtMjQ1MCw3ICsyNDUxLDcgQEAKIAkJYnBhcmFtcy0+anBlZ19tYXJrZXJzID0KIAkJICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzOwogCi0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWJwYXJhbXMtPlZGSUZPX0ZCID0gMDsKIApAQCAtMjQ4Niw3ICsyNDg3LDcgQEAKIAkJICAgICAgIHNpemVvZihicGFyYW1zLT5DT01fZGF0YSkpOwogCQlzZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnMgPSBicGFyYW1zLT5qcGVnX21hcmtlcnM7CiAKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX0lETEUpIHsKIAkJCWRwcmludGsoMSwKQEAgLTI1MDYsNyArMjUwNyw3IEBACiAKIAkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOwogCXNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQpAQCAtMjUzOCw3ICsyNTM5LDcgQEAKIAkJICAgIGJyZXEtPnNpemUgPiBNQVhfS01BTExPQ19NRU0pCiAJCQlicmVxLT5zaXplID0gTUFYX0tNQUxMT0NfTUVNOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJCWRwcmludGsoMSwKQEAgLTI1NjEsNyArMjU2Miw3IEBACiAJCSAqIGFsc28gYmUgKl9QTEFZLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgaGVyZSAqLwogCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOwogCWpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9CkBAIC0yNTc0LDkgKzI1NzUsOSBAQAogCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfUUJVRl9DQVBUIC0gZnJhbWU9JWRcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJcmVzID0ganBnX3FidWYoZmlsZSwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpOwotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTI1ODksOSArMjU5MCw5IEBACiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19RQlVGX1BMQVkgLSBmcmFtZT0lZFxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQlyZXMgPSBqcGdfcWJ1ZihmaWxlLCAqZnJhbWUsIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9CkBAIC0yNjA0LDkgKzI2MDUsOSBAQAogCiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19TWU5DXG4iLCBaUl9ERVZOQU1FKHpyKSk7CiAKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXJlcyA9IGpwZ19zeW5jKGZpbGUsIGJzeW5jKTsKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9CkBAIC0yNjMwLDcgKzI2MzEsNyBAQAogCQlpbnB1dCA9IHpyLT5jYXJkLmlucHV0W2JzdGF0LT5pbnB1dF0ubXV4c2VsOwogCQlub3JtID0gVklERU9fTU9ERV9BVVRPOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWlmICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9JRExFKSB7CiAJCQlkcHJpbnRrKDEsCkBAIC0yNjU1LDcgKzI2NTYsNyBAQAogCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaW5wdXQpOwogCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7CiAJZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWlmICghcmVzKSB7CiAJCQlic3RhdC0+c2lnbmFsID0KQEAgLTI3NjMsNyArMjc2NCw3IEBACiAJCXN3aXRjaCAoZm10LT50eXBlKSB7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgogCi0JCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJCWZtdC0+Zm10Lndpbi53LmxlZnQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy54OwogCQkJZm10LT5mbXQud2luLncudG9wID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueTsKQEAgLTI3NzYsMTQgKzI3NzcsMTQgQEAKIAkJCWVsc2UKIAkJCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKIAotCQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCQlicmVhazsKIAogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKIAkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKIAotCQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCQlpZiAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAmJgogCQkJICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKQEAgLTI4MzcsNyArMjgzOCw3IEBACiAJCQkJICAgIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CiAJCQl9CiAKLQkJCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQkJYnJlYWs7CiAKQEAgLTI4NzAsNyArMjg3MSw3IEBACiAJCQkJZm10LT5mbXQud2luLncuaGVpZ2h0LAogCQkJCWZtdC0+Zm10Lndpbi5jbGlwY291bnQsCiAJCQkJZm10LT5mbXQud2luLmJpdG1hcCk7Ci0JCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCQlyZXMgPQogCQkJICAgIHNldHVwX3dpbmRvdyhmaWxlLCBmbXQtPmZtdC53aW4udy5sZWZ0LAogCQkJCQkgZm10LT5mbXQud2luLncudG9wLApAQCAtMjg4MCw3ICsyODgxLDcgQEAKIAkJCQkJICAgZm10LT5mbXQud2luLmNsaXBzLAogCQkJCQkgZm10LT5mbXQud2luLmNsaXBjb3VudCwKIAkJCQkJIGZtdC0+Zm10Lndpbi5iaXRtYXApOwotCQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQkJcmV0dXJuIHJlczsKIAkJCWJyZWFrOwogCkBAIC0yOTE3LDcgKzI5MTgsNyBAQAogCQkJfQogCiAJCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgewotCQkJCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7CiAKQEAgLTI5OTUsNyArMjk5Niw3IEBACiAJCQkJICAgIFpPUkFOX01BUF9NT0RFX0pQR19SRUMgOgogCQkJCSAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWTsKIAkJCXNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJCX0gZWxzZSB7CiAJCQkJZm9yIChpID0gMDsgaSA8IHpvcmFuX251bV9mb3JtYXRzOyBpKyspCiAJCQkJCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0KQEAgLTMwMTAsNyArMzAxMSw3IEBACiAJCQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQl9Ci0JCQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fAogCQkJCSAgICAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCAmJgogCQkJCSAgICAgZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPQpAQCAtMzA1Miw3ICszMDUzLDcgQEAKIAogCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKIAkJCXNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJCX0KIAogCQkJYnJlYWs7CkBAIC0zMDc3LDcgKzMwNzgsNyBAQAogCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19GQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7CiAKIAkJbWVtc2V0KGZiLCAwLCBzaXplb2YoKmZiKSk7Ci0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQlmYi0+YmFzZSA9IHpyLT5idWZmZXIuYmFzZTsKIAkJZmItPmZtdC53aWR0aCA9IHpyLT5idWZmZXIud2lkdGg7CiAJCWZiLT5mbXQuaGVpZ2h0ID0genItPmJ1ZmZlci5oZWlnaHQ7CkBAIC0zMDg2LDcgKzMwODcsNyBAQAogCQkJCWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+Zm91cmNjOwogCQl9CiAJCWZiLT5mbXQuYnl0ZXNwZXJsaW5lID0genItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQlmYi0+Zm10LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKIAkJZmItPmZtdC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKIAkJZmItPmZsYWdzID0gVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWTsKQEAgLTMxMjEsMTIgKzMxMjIsMTIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXJlcyA9CiAJCSAgICBzZXR1cF9mYnVmZmVyKGZpbGUsIGZiLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwKIAkJCQkgIGZiLT5mbXQud2lkdGgsIGZiLT5mbXQuaGVpZ2h0LAogCQkJCSAgZmItPmZtdC5ieXRlc3BlcmxpbmUpOwotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTMxMzksOSArMzE0MCw5IEBACiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19QUkVWSUVXIC0gb249JWRcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJcmVzID0gc2V0dXBfb3ZlcmxheShmaWxlLCAqb24pOwotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTMxNjMsNyArMzE2NCw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJCWRwcmludGsoMSwKQEAgLTMyMjQsNyArMzIyNSw3IEBACiAJCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CiAJCX0KIAl2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMjQ1LDkgKzMyNDYsOSBAQAogCQlidWYtPnR5cGUgPSB0eXBlOwogCQlidWYtPmluZGV4ID0gaW5kZXg7CiAKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIGJ1Zi0+aW5kZXgpOwotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTMyNjIsNyArMzI2Myw3IEBACiAJCQlLRVJOX0RFQlVHICIlczogVklESU9DX1FCVUYgLSB0eXBlPSVkLCBpbmRleD0lZFxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGJ1Zi0+aW5kZXgpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CiAJCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgpAQCAtMzMyMiw3ICszMzIzLDcgQEAKIAkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKIAkJfQogCXFidWZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQpAQCAtMzMzNiw3ICszMzM3LDcgQEAKIAkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0RRQlVGIC0gdHlwZT0lZFxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CiAJCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgpAQCAtMzQxMCw3ICszNDExLDcgQEAKIAkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CiAJCX0KIAlkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9CkBAIC0zNDIyLDcgKzM0MjMsNyBAQAogCiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PTlxuIiwgWlJfREVWTkFNRSh6cikpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CiAJCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLwpAQCAtMzQ3MCw3ICszNDcxLDcgQEAKIAkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOwogCQl9CiAJc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOgotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTM0ODIsNyArMzQ4Myw3IEBACiAKIAkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NUUkVBTU9GRlxuIiwgWlJfREVWTkFNRSh6cikpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CiAJCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLwpAQCAtMzU0MCw3ICszNTQxLDcgQEAKIAkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKIAkJfQogCXN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQpAQCAtMzYwMCw3ICszNjAxLDcgQEAKIAkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXN3aXRjaCAoY3RybC0+aWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQkJY3RybC0+dmFsdWUgPSB6ci0+YnJpZ2h0bmVzczsKQEAgLTM2MTUsNyArMzYxNiw3IEBACiAJCQljdHJsLT52YWx1ZSA9IHpyLT5odWU7CiAJCQlicmVhazsKIAkJfQotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0zNjQyLDcgKzM2NDMsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJc3dpdGNoIChjdHJsLT5pZCkgewogCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CiAJCQl6ci0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOwpAQCAtMzY2NCw3ICszNjY1LDcgQEAKIAogCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX1BJQ1RVUkUsICZwaWN0KTsKIAotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0zNzMyLDkgKzM3MzMsOSBAQAogCiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX1NURFxuIiwgWlJfREVWTkFNRSh6cikpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQlub3JtID0genItPm5vcm07Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXN3aXRjaCAobm9ybSkgewogCQljYXNlIFZJREVPX01PREVfUEFMOgpAQCAtMzc3NiwxMyArMzc3NywxMyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfbm9ybSh6ciwgbm9ybSkpKQogCQkJZ290byBzc3RkX3VubG9ja19hbmRfcmV0dXJuOwogCiAJCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKIAlzc3RkX3VubG9ja19hbmRfcmV0dXJuOgotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJcmV0dXJuIHJlczsKIAl9CiAJCWJyZWFrOwpAQCAtMzgwOSw5ICszODEwLDkgQEAKIAkJaW5wLT5zdGQgPSBWNEwyX1NURF9BTEw7CiAKIAkJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7CiAJCQlpbnAtPnN0YXR1cyB8PSBWNEwyX0lOX1NUX05PX1BPV0VSOwpAQCAtMzgzMCw5ICszODMxLDkgQEAKIAogCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19JTlBVVFxuIiwgWlJfREVWTkFNRSh6cikpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQkqaW5wdXQgPSB6ci0+aW5wdXQ7Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTM4NDUsMTQgKzM4NDYsMTQgQEAKIAkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfSU5QVVQgLSBpbnB1dD0lZFxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCAqaW5wdXQpOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9pbnB1dCh6ciwgKmlucHV0KSkpCiAJCQlnb3RvIHNpbnB1dF91bmxvY2tfYW5kX3JldHVybjsKIAogCQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwogCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7CiAJc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOgotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJcmV0dXJuIHJlczsKIAl9CiAJCWJyZWFrOwpAQCAtMzkxNCw3ICszOTE1LDcgQEAKIAkJbWVtc2V0KGNyb3BjYXAsIDAsIHNpemVvZigqY3JvcGNhcCkpOwogCQljcm9wY2FwLT50eXBlID0gdHlwZTsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlpZiAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgogCQkgICAgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CkBAIC0zOTM0LDcgKzM5MzUsNyBAQAogCQljcm9wY2FwLT5kZWZyZWN0LndpZHRoID0gQlVaX01JTl9XSURUSDsKIAkJY3JvcGNhcC0+ZGVmcmVjdC5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKIAljcm9wY2FwX3VubG9ja19hbmRfcmV0dXJuOgotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJcmV0dXJuIHJlczsKIAl9CiAJCWJyZWFrOwpAQCAtMzk1MCw3ICszOTUxLDcgQEAKIAkJbWVtc2V0KGNyb3AsIDAsIHNpemVvZigqY3JvcCkpOwogCQljcm9wLT50eXBlID0gdHlwZTsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgogCQkgICAgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CkBAIC0zOTY5LDcgKzM5NzAsNyBAQAogCQljcm9wLT5jLmhlaWdodCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodDsKIAogCWdjcm9wX3VubG9ja19hbmRfcmV0dXJuOgotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KQEAgLTM5ODgsNyArMzk4OSw3IEBACiAJCQlaUl9ERVZOQU1FKHpyKSwgY3JvcC0+dHlwZSwgY3JvcC0+Yy5sZWZ0LCBjcm9wLT5jLnRvcCwKIAkJCWNyb3AtPmMud2lkdGgsIGNyb3AtPmMuaGVpZ2h0KTsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCQlkcHJpbnRrKDEsCkBAIC00MDI0LDcgKzQwMjUsNyBAQAogCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7CiAKIAlzY3JvcF91bmxvY2tfYW5kX3JldHVybjoKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCXJldHVybiByZXM7CiAJfQogCQlicmVhazsKQEAgLTQwMzgsNyArNDAzOSw3IEBACiAKIAkJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKIAotCQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlwYXJhbXMtPnF1YWxpdHkgPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLnF1YWxpdHk7CiAJCXBhcmFtcy0+QVBQbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQbjsKQEAgLTQwNTMsNyArNDA1NCw3IEBACiAJCXBhcmFtcy0+anBlZ19tYXJrZXJzID0KIAkJICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzOwogCi0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTQwNzQsNyArNDA3NSw3IEBACiAKIAkJc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zOwogCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgfHwKIAkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewpAQCAtNDA5Myw3ICs0MDk0LDcgQEAKIAkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7CiAJCWZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zID0gc2V0dGluZ3MuanBnX2NvbXA7CiAJc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOgotCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC00MTI3LDcgKzQxMjgsNyBAQAogCiAJCXN3aXRjaCAoZm10LT50eXBlKSB7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCQlpZiAoZm10LT5mbXQud2luLncud2lkdGggPiBCVVpfTUFYX1dJRFRIKQogCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gQlVaX01BWF9XSURUSDsKQEAgLTQxMzgsNyArNDEzOSw3IEBACiAJCQlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQpCiAJCQkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7CiAKLQkJCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgpAQCAtNDE0Niw3ICs0MTQ3LDcgQEAKIAkJCWlmIChmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgewogCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKQEAgLTQyMjksNyArNDIzMCw3IEBACiAJCQkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47CiAJCQl9CiAJCXRyeWZtdF91bmxvY2tfYW5kX3JldHVybjoKLQkJCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQkJcmV0dXJuIHJlczsKIAkJCWJyZWFrOwpAQCAtNDI4MCw3ICs0MjgxLDcgQEAKIAkgKiBpZiBubyBidWZmZXJzIHF1ZXVlZCBvciBzbywgcmV0dXJuIFBPTExOVkFMCiAJICovCiAKLQlkb3duKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKIAljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKQEAgLTQzMjksNyArNDMzMCw3IEBACiAJfQogCiBwb2xsX3VubG9ja19hbmRfcmV0dXJuOgotCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtNDM4NSw3ICs0Mzg2LDcgQEAKIAkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXApCiAJCQkJCWJyZWFrOwogCQkJaWYgKGkgPT0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKIAkJCQkJanBnX3FidWYoZmlsZSwgLTEsIHpyLT5jb2RlY19tb2RlKTsKQEAgLTQzOTgsNyArNDM5OSw3IEBACiAJCQkJZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCQkJZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMTsKIAotCQkJCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAJCQl9CiAKIAkJCWJyZWFrOwpAQCAtNDQyMSw3ICs0NDIyLDcgQEAKIAkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApCiAJCQkJCWJyZWFrOwogCQkJaWYgKGkgPT0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKIAkJCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CkBAIC00NDM0LDcgKzQ0MzUsNyBAQAogCQkJCWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogCQkJCWZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDE7CiAKLQkJCQl1cCgmenItPnJlc291cmNlX2xvY2spOworCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCQkJfQogCiAJCQlicmVhazsKQEAgLTQ0ODksNyArNDQ5MCw3IEBACiAJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKIAogCQkvKiBsb2NrICovCi0JCWRvd24oJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCS8qIE1hcCB0aGUgTUpQRUcgYnVmZmVycyAqLwogCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKQEAgLTQ1NzksMTMgKzQ1ODAsMTMgQEAKIAogCQl9CiAJanBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCXVwKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCWJyZWFrOwogCiAJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CiAKLQkJZG93bigmenItPnJlc291cmNlX2xvY2spOworCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJLyogTWFwIHRoZSBWNEwgYnVmZmVycyAqLwogCQlpZiAoIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKQEAgLTQ2NTcsNyArNDY1OCw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAl2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjoKLQkJdXAoJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fcHJvY2ZzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5jCmluZGV4IGYwZDliMTMuLmEwMGZhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fcHJvY2ZzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9wcm9jZnMuYwpAQCAtNCw3ICs0LDcgQEAKICAqIE1lZGlhIExhYnMgTE1MMzMvTE1MMzNSMTAuCiAgKgogICogVGhpcyBwYXJ0IGhhbmRsZXMgdGhlIHByb2NGUyBlbnRyaWVzICgvcHJvYy9aT1JBTlslZF0pCi0gKiAKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+CiAgKgogICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9wcm9jZnMuaAppbmRleCA4OTA0ZmM5Li5mMmQ1YjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX3Byb2Nmcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fcHJvY2ZzLmgKQEAgLTQsNyArNCw3IEBACiAgKiBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLgogICoKICAqIFRoaXMgcGFydCBoYW5kbGVzIGNhcmQtc3BlY2lmaWMgZGF0YSBhbmQgZGV0ZWN0aW9uCi0gKiAKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgU2VyZ3VlaSBNaXJpZG9ub3YgPG1pcnNldkBjaWNlc2UubXg+CiAgKgogICogQ3VycmVudGx5IG1haW50YWluZWQgYnk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwMTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjAxNi5jCmluZGV4IDEwMTMwZWYuLjYyZjc3NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjAxNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjAxNi5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLS8qIGluY2x1ZGVzIGZvciBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHJlZ2FyZGluZyB2aWRlbyAKKy8qIGluY2x1ZGVzIGZvciBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHJlZ2FyZGluZyB2aWRlbwogICAgI2luY2x1ZGU8bGludXgvdmlkZW9kZXYuaD4gKi8KIAogLyogSS9PIGNvbW1hbmRzLCBlcnJvciBjb2RlcyAqLwpAQCAtMTQzLDggKzE0Myw4IEBACiAKIHN0YXRpYyB2b2lkCiB6cjM2MDE2X3dyaXRlaSAoc3RydWN0IHpyMzYwMTYgKnB0ciwKLQkgICAgICAgIHUxNiAgICAgICAgICAgICByZWcsCi0JICAgICAgICB1OCAgICAgICAgICAgICAgdmFsdWUpCisJCXUxNiAgICAgICAgICAgICByZWcsCisJCXU4ICAgICAgICAgICAgICB2YWx1ZSkKIHsKIAlkcHJpbnRrKDQsICIlczogd3JpdGluZyBpbmRpcmVjdCAweCUwMnggdG8gMHglMDR4XG4iLCBwdHItPm5hbWUsCiAJCXZhbHVlLCByZWcpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCWRwcmludGsoMSwgIlxuIik7CiAJfQogCS8vIGZvciB0ZXN0aW5nIGp1c3Qgd3JpdGUgMCwgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSB0byBhIHJlZ2lzdGVyIGFuZCByZWFkCi0JLy8gaXQgYmFjayBpbiBib3RoIGNhc2VzIAorCS8vIGl0IGJhY2sgaW4gYm90aCBjYXNlcwogCXpyMzYwMTZfd3JpdGVpKHB0ciwgWlIwMTZJX1BBWF9MTywgMHgwMCk7CiAJaWYgKHpyMzYwMTZfcmVhZGkocHRyLCBaUjAxNklfUEFYX0xPKSAhPSAweDApIHsKIAkJZHByaW50aygxLApAQCAtMjMyLDE3ICsyMzIsMTcgQEAKIHN0YXRpYyBpbnQgenIzNjAxNl9wdXNoaXQgKHN0cnVjdCB6cjM2MDE2ICpwdHIsCiAJCQkgICB1MTYgICAgICAgICAgICAgc3RhcnRyZWcsCiAJCQkgICB1MTYgICAgICAgICAgICAgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgKmRhdGEpCisJCQkgICBjb25zdCBjaGFyICAgICAqZGF0YSkKIHsKLSAgICAgICAgaW50IGk9MDsKKwlpbnQgaT0wOwogCi0gICAgICAgIGRwcmludGsoNCwgIiVzOiB3cml0ZSBkYXRhIGJsb2NrIHRvIDB4JTA0eCAobGVuPSVkKVxuIiwKKwlkcHJpbnRrKDQsICIlczogd3JpdGUgZGF0YSBibG9jayB0byAweCUwNHggKGxlbj0lZClcbiIsCiAJCXB0ci0+bmFtZSwgc3RhcnRyZWcsbGVuKTsKLSAgICAgICAgd2hpbGUgKGk8bGVuKSB7Ci0gICAgICAgICAgICAgICAgenIzNjAxNl93cml0ZWkocHRyLCBzdGFydHJlZysrLCAgZGF0YVtpKytdKTsKLSAgICAgICAgfQorCXdoaWxlIChpPGxlbikgeworCQl6cjM2MDE2X3dyaXRlaShwdHIsIHN0YXJ0cmVnKyssICBkYXRhW2krK10pOworCX0KIAotICAgICAgICByZXR1cm4gaTsKKwlyZXR1cm4gaTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jCmluZGV4IGJkMGNkMjguLmE2YmJkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjA1MC5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLS8qIGluY2x1ZGVzIGZvciBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHJlZ2FyZGluZyB2aWRlbyAKKy8qIGluY2x1ZGVzIGZvciBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHJlZ2FyZGluZyB2aWRlbwogICAgI2luY2x1ZGU8bGludXgvdmlkZW9kZXYuaD4gKi8KIAogLyogSS9PIGNvbW1hbmRzLCBlcnJvciBjb2RlcyAqLwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIAl3aGlsZSAoISh6cjM2MDUwX3JlYWRfc3RhdHVzMShwdHIpICYgMHg0KSkgewogCQl1ZGVsYXkoMSk7Ci0JCWlmIChpKysgPiAyMDAwMDApIHsJLy8gMjAwbXMsIHRoZXJlIGlzIGZvciBzaHVyZSBzb21ldGhpbmcgd3JvbmchISEKKwkJaWYgKGkrKyA+IDIwMDAwMCkgewkvLyAyMDBtcywgdGhlcmUgaXMgZm9yIHN1cmUgc29tZXRoaW5nIHdyb25nISEhCiAJCQlkcHJpbnRrKDEsCiAJCQkJIiVzOiB0aW1vdXQgYXQgd2FpdF9lbmQgKGxhc3Qgc3RhdHVzOiAweCUwMngpXG4iLAogCQkJCXB0ci0+bmFtZSwgcHRyLT5zdGF0dXMxKTsKQEAgLTE3MSw3ICsxNzEsNyBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgTG9jYWwgaGVscGVyIGZ1bmN0aW9uOgogCi0gICBiYXNpYyB0ZXN0IG9mICJjb25uZWN0aXZpdHkiLCB3cml0ZXMvcmVhZHMgdG8vZnJvbSBtZW1vcnkgdGhlIFNPRiBtYXJrZXIgCisgICBiYXNpYyB0ZXN0IG9mICJjb25uZWN0aXZpdHkiLCB3cml0ZXMvcmVhZHMgdG8vZnJvbSBtZW1vcnkgdGhlIFNPRiBtYXJrZXIKICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogc3RhdGljIGludApAQCAtMjE4LDkgKzIxOCw5IEBACiAKIHN0YXRpYyBpbnQKIHpyMzYwNTBfcHVzaGl0IChzdHJ1Y3QgenIzNjA1MCAqcHRyLAotCSAgICAgICAgdTE2ICAgICAgICAgICAgIHN0YXJ0cmVnLAotCSAgICAgICAgdTE2ICAgICAgICAgICAgIGxlbiwKLQkgICAgICAgIGNvbnN0IGNoYXIgICAgICpkYXRhKQorCQl1MTYgICAgICAgICAgICAgc3RhcnRyZWcsCisJCXUxNiAgICAgICAgICAgICBsZW4sCisJCWNvbnN0IGNoYXIgICAgICpkYXRhKQogewogCWludCBpID0gMDsKIApAQCAtMzQ1LDcgKzM0NSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIFNPRiAoc3RhcnQgb2YgZnJhbWUpIHNlZ21lbnQgZGVwZW5kcyBvbiB3aWR0aCwgaGVpZ2h0IGFuZCBzYW1wbGluZyByYXRpbwotICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGVhY2ggY29sb3IgY29tcG9uZW50ICovCisJCQkgb2YgZWFjaCBjb2xvciBjb21wb25lbnQgKi8KIAogc3RhdGljIGludAogenIzNjA1MF9zZXRfc29mIChzdHJ1Y3QgenIzNjA1MCAqcHRyKQpAQCAtMzc2LDggKzM3Niw4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogU09TIChzdGFydCBvZiBzY2FuKSBzZWdtZW50IGRlcGVuZHMgb24gdGhlIHVzZWQgc2NhbiBjb21wb25lbnRzIAotICAgICAgICAgICAgICAgICAgICAgICAgb2YgZWFjaCBjb2xvciBjb21wb25lbnQgKi8KKy8qIFNPUyAoc3RhcnQgb2Ygc2Nhbikgc2VnbWVudCBkZXBlbmRzIG9uIHRoZSB1c2VkIHNjYW4gY29tcG9uZW50cworCQkJb2YgZWFjaCBjb2xvciBjb21wb25lbnQgKi8KIAogc3RhdGljIGludAogenIzNjA1MF9zZXRfc29zIChzdHJ1Y3QgenIzNjA1MCAqcHRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDU3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTcuaAppbmRleCAxNTlhYmZhLi41NGM5MzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNTcuaApAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIHpyMzYwNTcuaCAtIHpyMzYwNTcgcmVnaXN0ZXIgb2Zmc2V0cwogICoKICAqIENvcHlyaWdodCAoQykgMTk5OCBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KQEAgLTI3LDE0ICsyNywxNCBAQAogI2RlZmluZSBaUjM2MDU3X1ZGRUhDUiAgICAgICAgICAweDAwMAkvKiBWaWRlbyBGcm9udCBFbmQsIEhvcml6b250YWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogI2RlZmluZSBaUjM2MDU3X1ZGRUhDUl9IU1BvbCAgICAgICAgICAgICgxPDwzMCkKICNkZWZpbmUgWlIzNjA1N19WRkVIQ1JfSFN0YXJ0ICAgICAgICAgICAxMAotI2RlZmluZSBaUjM2MDU3X1ZGRUhDUl9IRW5kCSAgICAgICAgMAotI2RlZmluZSBaUjM2MDU3X1ZGRUhDUl9IbWFzawkgICAgICAgIDB4M2ZmCisjZGVmaW5lIFpSMzYwNTdfVkZFSENSX0hFbmQJCTAKKyNkZWZpbmUgWlIzNjA1N19WRkVIQ1JfSG1hc2sJCTB4M2ZmCiAKICNkZWZpbmUgWlIzNjA1N19WRkVWQ1IgICAgICAgICAgMHgwMDQJLyogVmlkZW8gRnJvbnQgRW5kLCBWZXJ0aWNhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAjZGVmaW5lIFpSMzYwNTdfVkZFVkNSX1ZTUG9sICAgICAgICAgICAgKDE8PDMwKQogI2RlZmluZSBaUjM2MDU3X1ZGRVZDUl9WU3RhcnQgICAgICAgICAgIDEwCi0jZGVmaW5lIFpSMzYwNTdfVkZFVkNSX1ZFbmQJICAgICAgICAwCi0jZGVmaW5lIFpSMzYwNTdfVkZFVkNSX1ZtYXNrCSAgICAgICAgMHgzZmYKKyNkZWZpbmUgWlIzNjA1N19WRkVWQ1JfVkVuZAkJMAorI2RlZmluZSBaUjM2MDU3X1ZGRVZDUl9WbWFzawkJMHgzZmYKIAogI2RlZmluZSBaUjM2MDU3X1ZGRVNQRlIgICAgICAgICAweDAwOAkvKiBWaWRlbyBGcm9udCBFbmQsIFNjYWxlciBhbmQgUGl4ZWwgRm9ybWF0IFJlZ2lzdGVyICovCiAjZGVmaW5lIFpSMzYwNTdfVkZFU1BGUl9FeHRGbCAgICAgICAgICAgKDE8PDI2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MDYwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNjAuYwppbmRleCAyOGZhMzFhLi45N2M4ZjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYwNjAuYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0vKiBpbmNsdWRlcyBmb3Igc3RydWN0dXJlcyBhbmQgZGVmaW5lcyByZWdhcmRpbmcgdmlkZW8gCisvKiBpbmNsdWRlcyBmb3Igc3RydWN0dXJlcyBhbmQgZGVmaW5lcyByZWdhcmRpbmcgdmlkZW8KICAgICNpbmNsdWRlPGxpbnV4L3ZpZGVvZGV2Lmg+ICovCiAKIC8qIEkvTyBjb21tYW5kcywgZXJyb3IgY29kZXMgKi8KQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAJd2hpbGUgKHpyMzYwNjBfcmVhZF9zdGF0dXMocHRyKSAmIFpSMDYwX0NGU1JfQnVzeSkgewogCQl1ZGVsYXkoMSk7Ci0JCWlmIChpKysgPiAyMDAwMDApIHsJLy8gMjAwbXMsIHRoZXJlIGlzIGZvciBzaHVyZSBzb21ldGhpbmcgd3JvbmchISEKKwkJaWYgKGkrKyA+IDIwMDAwMCkgewkvLyAyMDBtcywgdGhlcmUgaXMgZm9yIHN1cmUgc29tZXRoaW5nIHdyb25nISEhCiAJCQlkcHJpbnRrKDEsCiAJCQkJIiVzOiB0aW1vdXQgYXQgd2FpdF9lbmQgKGxhc3Qgc3RhdHVzOiAweCUwMngpXG4iLAogCQkJCXB0ci0+bmFtZSwgcHRyLT5zdGF0dXMpOwpAQCAtMTczLDcgKzE3Myw3IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICBMb2NhbCBoZWxwZXIgZnVuY3Rpb246CiAKLSAgIGJhc2ljIHRlc3Qgb2YgImNvbm5lY3Rpdml0eSIsIHdyaXRlcy9yZWFkcyB0by9mcm9tIG1lbW9yeSB0aGUgU09GIG1hcmtlciAKKyAgIGJhc2ljIHRlc3Qgb2YgImNvbm5lY3Rpdml0eSIsIHdyaXRlcy9yZWFkcyB0by9mcm9tIG1lbW9yeSB0aGUgU09GIG1hcmtlcgogICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiBzdGF0aWMgaW50CkBAIC0yMDgsOSArMjA4LDkgQEAKIAogc3RhdGljIGludAogenIzNjA2MF9wdXNoaXQgKHN0cnVjdCB6cjM2MDYwICpwdHIsCi0JICAgICAgICB1MTYgICAgICAgICAgICAgc3RhcnRyZWcsCi0JICAgICAgICB1MTYgICAgICAgICAgICAgbGVuLAotCSAgICAgICAgY29uc3QgY2hhciAgICAgKmRhdGEpCisJCXUxNiAgICAgICAgICAgICBzdGFydHJlZywKKwkJdTE2ICAgICAgICAgICAgIGxlbiwKKwkJY29uc3QgY2hhciAgICAgKmRhdGEpCiB7CiAJaW50IGkgPSAwOwogCkBAIC0zMzUsNyArMzM1LDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogU09GIChzdGFydCBvZiBmcmFtZSkgc2VnbWVudCBkZXBlbmRzIG9uIHdpZHRoLCBoZWlnaHQgYW5kIHNhbXBsaW5nIHJhdGlvCi0gICAgICAgICAgICAgICAgICAgICAgICAgb2YgZWFjaCBjb2xvciBjb21wb25lbnQgKi8KKwkJCSBvZiBlYWNoIGNvbG9yIGNvbXBvbmVudCAqLwogCiBzdGF0aWMgaW50CiB6cjM2MDYwX3NldF9zb2YgKHN0cnVjdCB6cjM2MDYwICpwdHIpCkBAIC0zNjcsOCArMzY3LDggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBTT1MgKHN0YXJ0IG9mIHNjYW4pIHNlZ21lbnQgZGVwZW5kcyBvbiB0aGUgdXNlZCBzY2FuIGNvbXBvbmVudHMgCi0gICAgICAgICAgICAgICAgICAgICAgICBvZiBlYWNoIGNvbG9yIGNvbXBvbmVudCAqLworLyogU09TIChzdGFydCBvZiBzY2FuKSBzZWdtZW50IGRlcGVuZHMgb24gdGhlIHVzZWQgc2NhbiBjb21wb25lbnRzCisJCQlvZiBlYWNoIGNvbG9yIGNvbXBvbmVudCAqLwogCiBzdGF0aWMgaW50CiB6cjM2MDYwX3NldF9zb3MgKHN0cnVjdCB6cjM2MDYwICpwdHIpCkBAIC0zODUsNyArMzg1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTk9fT0ZfQ09NUE9ORU5UUzsgaSsrKSB7CiAJCXNvc19kYXRhWzUgKyAoaSAqIDIpXSA9IGk7CS8vIGluZGV4CiAJCXNvc19kYXRhWzYgKyAoaSAqIDIpXSA9ICh6cjM2MDYwX3RkW2ldIDw8IDQpIHwKLQkJCQkgICAgICAgIHpyMzYwNjBfdGFbaV07IC8vIEFDL0RDIHRibC5zZWwuCisJCQkJCXpyMzYwNjBfdGFbaV07IC8vIEFDL0RDIHRibC5zZWwuCiAJfQogCXNvc19kYXRhWzIgKyAxICsgKDIgKiBOT19PRl9DT01QT05FTlRTKSArIDJdID0gMDA7CS8vIHNjYW4gc3RhcnQKIAlzb3NfZGF0YVsyICsgMSArICgyICogTk9fT0ZfQ09NUE9ORU5UUykgKyAzXSA9IDB4M2Y7CkBAIC05OTksNyArOTk5LDcgQEAKIAkJZHByaW50aygxLAogCQkJInpyMzYwNjA6IHNvbWV0aGluZydzIHdyb25nIC0gJWQgY29kZWNzIGxlZnQgc29tZWhvdy5cbiIsCiAJCQl6cjM2MDYwX2NvZGVjcyk7Ci0JfSAKKwl9CiAKIAkvKiBob3dldmVyLCB3ZSBjYW4ndCBqdXN0IHN0YXkgYWxpdmUgKi8KIAl2aWRlb2NvZGVjX3VucmVnaXN0ZXIoJnpyMzYwNjBfY29kZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYwppbmRleCBkNGM2MzNiLi42YWMzYjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYwpAQCAtNzAsMTAgKzcwLDEwIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlpvcmFuIFpSMzYxMjAgYmFzZWQgZnJhbWVncmFiYmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLU1PRFVMRV9QQVJNKHRyaXRvbjEsImkiKTsKLU1PRFVMRV9QQVJNKGNhcmR0eXBlLCIxLSIgX19NT0RVTEVfU1RSSU5HKFpPUkFOX01BWCkgImkiKTsKLU1PRFVMRV9QQVJNKHZpZGVvX25yLCJpIik7Ci1NT0RVTEVfUEFSTSh2YmlfbnIsImkiKTsKK21vZHVsZV9wYXJhbSh0cml0b24xLCB1aW50LCAwKTsKK21vZHVsZV9wYXJhbV9hcnJheShjYXJkdHlwZSwgdWludCwgTlVMTCwgMCk7Cittb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7Cittb2R1bGVfcGFyYW0odmJpX25yLCBpbnQsIDApOwogCiBzdGF0aWMgaW50IHpvcmFuX2NhcmRzOwogc3RhdGljIHN0cnVjdCB6b3JhbiB6b3JhbnNbWk9SQU5fTUFYXTsKQEAgLTMxNiw3ICszMTYsNyBAQAogCQkJCWl0ZW0tPnN0YXR1cyA9IEZCVUZGRVJfQlVTWTsKIAkJCQlpZiAoIWxhc3RpdGVtKQogCQkJCQl6dHYtPndvcmtxdWV1ZSA9IGl0ZW07Ci0JCQkJZWxzZSAKKwkJCQllbHNlCiAJCQkJCWxhc3RpdGVtLT5uZXh0ID0gaXRlbTsKIAkJCQlsYXN0aXRlbSA9IGl0ZW07CiAJCQl9CkBAIC01MTYsNyArNTE2LDcgQEAKIAl6cmFvcigoenR2LT52aWRJbnRlcmxhY2UqeXN0ZXApPDwwLH5aT1JBTl9PQ1JfTUFTS1NUUklERSxaT1JBTl9PQ1IpOwogfQogCi1zdHJ1Y3QgdHZub3JtIAorc3RydWN0IHR2bm9ybQogewogCXUxNiBXdCwgV2EsIEh0LCBIYSwgSFN0YXJ0LCBWU3RhcnQ7CiB9OwpAQCAtNjYwLDcgKzY2MCw3IEBACiAJCWludCBIb3JEY20gPSA2NC1YOwogCQlpbnQgaGNyb3AxID0gMiooV2EtV2UpLzQ7CiAJCS8qCi0JCSAqIEJVR0ZJWDogSnVoYSBOdXJtZWxhIDxqdW5raUBxbi1scHIyLTE2NS5xdWlja25ldC5pbmV0LmZpPiAKKwkJICogQlVHRklYOiBKdWhhIE51cm1lbGEgPGp1bmtpQHFuLWxwcjItMTY1LnF1aWNrbmV0LmluZXQuZmk+CiAJCSAqIGZvdW5kIHRoZSBzb2x1dGlvbiB0byB0aGUgY29sb3IgcGhhc2Ugc2hpZnQuCiAJCSAqIFNlZSBDaGFuZ2VMb2cgZm9yIHRoZSBmdWxsIGV4cGxhbmF0aW9uKQogCQkgKi8KQEAgLTgxMiwxMiArODEyLDEyIEBACiAKIAl6b3Jhbl9jb21tb25fY2xvc2UoenR2KTsKIAotICAgICAgICAvKgotICAgICAgICAgKiAgICAgIFRoaXMgaXMgc3Vja3kgYnV0IHJpZ2h0IG5vdyBJIGNhbid0IGZpbmQgYSBnb29kIHdheSB0bwotICAgICAgICAgKiAgICAgIGJlIHN1cmUgaXRzIHNhZmUgdG8gZnJlZSB0aGUgYnVmZmVyLiBXZSB3YWl0IDUtNiBmaWVsZHMKLSAgICAgICAgICogICAgICB3aGljaCBpcyBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBiZSBzdXJlLgotICAgICAgICAgKi8KLSAgICAgICAgbXNsZWVwKDEwMCk7CQkJLyogV2FpdCAxLzEwdGggb2YgYSBzZWNvbmQgKi8KKwkvKgorCSAqICAgICAgVGhpcyBpcyBzdWNreSBidXQgcmlnaHQgbm93IEkgY2FuJ3QgZmluZCBhIGdvb2Qgd2F5IHRvCisJICogICAgICBiZSBzdXJlIGl0cyBzYWZlIHRvIGZyZWUgdGhlIGJ1ZmZlci4gV2Ugd2FpdCA1LTYgZmllbGRzCisJICogICAgICB3aGljaCBpcyBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBiZSBzdXJlLgorCSAqLworCW1zbGVlcCgxMDApOwkJCS8qIFdhaXQgMS8xMHRoIG9mIGEgc2Vjb25kICovCiAKIAkvKiBmcmVlIHRoZSBhbGxvY2F0ZWQgZnJhbWVidWZmZXIgKi8KIAliZnJlZSh6dHYtPmZidWZmZXIsIFpPUkFOX01BWF9GQlVGU0laRSk7CkBAIC0xNDM2LDcgKzE0MzYsNyBAQAogCiAJIC8qIFdoeSBpc24ndCB0aGlzIGluIHRoZSBBUEk/CiAJICAqIEFuZCB3aHkgZG9lc24ndCBpdCB0YWtlIGEgYnVmZmVyIG51bWJlcj8KLQkgY2FzZSBCVFRWX0ZJRUxETlI6IAorCSBjYXNlIEJUVFZfRklFTEROUjoKIAkgewogCQl1bnNpZ25lZCBsb25nIHYgPSB6dHYtPmxhc3RmaWVsZG5yOwogCQlpZiAoY29weV90b191c2VyKGFyZywmdixzaXplb2YodikpKQpAQCAtMTU1NywxMiArMTU1NywxMiBAQAogCiAJem9yYW5fY29tbW9uX2Nsb3NlKHp0dik7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogICAgICBUaGlzIGlzIHN1Y2t5IGJ1dCByaWdodCBub3cgSSBjYW4ndCBmaW5kIGEgZ29vZCB3YXkgdG8KLSAgICAgICAgICogICAgICBiZSBzdXJlIGl0cyBzYWZlIHRvIGZyZWUgdGhlIGJ1ZmZlci4gV2Ugd2FpdCA1LTYgZmllbGRzCi0gICAgICAgICAqICAgICAgd2hpY2ggaXMgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gYmUgc3VyZS4KLSAgICAgICAgICovCi0gICAgICAgIG1zbGVlcCgxMDApOwkJCS8qIFdhaXQgMS8xMHRoIG9mIGEgc2Vjb25kICovCisJLyoKKwkgKiAgICAgIFRoaXMgaXMgc3Vja3kgYnV0IHJpZ2h0IG5vdyBJIGNhbid0IGZpbmQgYSBnb29kIHdheSB0bworCSAqICAgICAgYmUgc3VyZSBpdHMgc2FmZSB0byBmcmVlIHRoZSBidWZmZXIuIFdlIHdhaXQgNS02IGZpZWxkcworCSAqICAgICAgd2hpY2ggaXMgbW9yZSB0aGFuIHN1ZmZpY2llbnQgdG8gYmUgc3VyZS4KKwkgKi8KKwltc2xlZXAoMTAwKTsJCQkvKiBXYWl0IDEvMTB0aCBvZiBhIHNlY29uZCAqLwogCiAJZm9yIChpdGVtPXp0di0+cmVhZGluZm87IGl0ZW0hPXp0di0+cmVhZGluZm8rWk9SQU5fVkJJX0JVRkZFUlM7IGl0ZW0rKykKIAl7CkBAIC0xNjIwLDcgKzE2MjAsNyBAQAogCQkJd3JpdGVfdW5sb2NrX2lycSgmenR2LT5sb2NrKTsKIAkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CiAJCX0KLQkJCisKIAkJLyogbWFyayB0aGUgdW51c2VkIGJ1ZmZlciBhcyB3YW50ZWQgKi8KIAkJdW51c2VkLT5zdGF0dXMgPSBGQlVGRkVSX0JVU1k7CiAJCXVudXNlZC0+bmV4dCA9IDA7CkBAIC0xNjcxLDcgKzE2NzEsNyBAQAogCWlmIChjb3VudCA9PSAyKjE5KjIwNDgpIHsKIAkJLyoKIAkJICogRXh0cmVtZSBIQUNLLCBvbGQgVkJJIHByb2dyYW1zIGV4cGVjdCAyMDQ4IHBvaW50cwotCQkgKiBvZiBkYXRhLCBhbmQgd2Ugb25seSBnb3QgODY0IG9yc28uIERvdWJsZSBlYWNoIAorCQkgKiBvZiBkYXRhLCBhbmQgd2Ugb25seSBnb3QgODY0IG9yc28uIERvdWJsZSBlYWNoCiAJCSAqIGRhdGFwb2ludCBhbmQgY2xlYXIgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuCiAJCSAqIFRoaXMgd2F5IHdlIGhhdmUgYXBwZWFyIHRvIGhhdmUgYQogCQkgKiBzYW1wbGVfZnJlcXVlbmN5IG9mIDI5LjUgTWMuCkBAIC0xOTU2LDcgKzE5NTYsNyBAQAogCQl6cmFuZCh+Wk9SQU5fVkRDX1RSSUNPTSwgWk9SQU5fVkRDKTsKIAogCS8qIGV4dGVybmFsIEZMIGRldGVybWluZXMgVE9QIGZyYW1lICovCi0JenJvcihaT1JBTl9WRkVDX0VYVEZMLCBaT1JBTl9WRkVDKTsgCisJenJvcihaT1JBTl9WRkVDX0VYVEZMLCBaT1JBTl9WRkVDKTsKIAogCS8qIHNldCBIU3BvbCAqLwogCWlmICh6dHYtPmNhcmQtPmhzeW5jX3BvcykKQEAgLTIwMTIsNyArMjAxMiw3IEBACiAJc3RydWN0IHpvcmFuICp6dHY7CiAJaW50IGk7CiAKLQlmb3IgKGk9MDtpPG1heDsgaSsrKSAKKwlmb3IgKGk9MDtpPG1heDsgaSsrKQogCXsKIAkJenR2ID0gJnpvcmFuc1tpXTsKIApAQCAtMjAyOSw3ICsyMDI5LDcgQEAKIAogCQkvKiBmcmVlIGl0ICovCiAJCWZyZWVfaXJxKHp0di0+ZGV2LT5pcnEsenR2KTsKLSAKKwogICAgIAkJLyogdW5yZWdpc3RlciBpMmNfYnVzICovCiAJCWkyY191bnJlZ2lzdGVyX2J1cygoJnp0di0+aTJjKSk7CiAKQEAgLTIwNTAsNyArMjA1MCw3IEBACiBpbnQgX19pbml0IHpyMzYxMjBfaW5pdCh2b2lkKQogewogCWludAljYXJkOwotIAorCiAJaGFuZGxlX2NoaXBzZXQoKTsKIAl6b3Jhbl9jYXJkcyA9IGZpbmRfem9yYW4oKTsKIAlpZiAoem9yYW5fY2FyZHM8MCkKQEAgLTIwNjMsNyArMjA2Myw3IEBACiAJCQkvKiBvbmx5IHJlbGVhc2UgdGhlIHpvcmFucyB3ZSBoYXZlIHJlZ2lzdGVyZWQgKi8KIAkJCXJlbGVhc2Vfem9yYW4oY2FyZCk7CiAJCQlyZXR1cm4gLUVJTzsKLQkJfSAKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwLmgKaW5kZXggNTcxZjhlOC4uYTcxZTQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwLmgKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgICAgenIzNjEyMC5oIC0gWm9yYW4gMzYxMjAvMzYxMjUgYmFzZWQgZnJhbWVncmFiYmVycwogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgUGF1bGluZSBNaWRkZWxpbmsgKG1pZGRlbGluQHBvbHl3YXJlLm5sKQpAQCAtODksNyArODksNyBAQAogCXVsb25nKglvdmVybGF5OwkvKiBrZXJuZWwgYWRkciBvZiBvdmVybGF5IG1hc2sJCSovCiB9OwogCi1zdHJ1Y3Qgem9yYW4gCitzdHJ1Y3Qgem9yYW4KIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZpZGVvX2RldjsKICNkZWZpbmUgQ0FSRF9ERUJVRwlLRVJOX0RFQlVHICIlcyglbHUpOiAiCkBAIC0xMDYsNyArMTA2LDcgQEAKIAl1aW50CQlub3JtOwkJLyogMD1QQUwsIDE9TlRTQywgMj1TRUNBTQkqLwogCXVpbnQJCXR1bmVyX2ZyZXE7CS8qIEN1cnJlbnQgZnJlcSBpbiBrSHoJCSovCiAJc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdHVyZTsJLyogQ3VycmVudCBwaWN0dXJlIHBhcmFtcwkqLwotICAKKwogCS8qIHZpZGVvY2FyZCBkZXRhaWxzICovCiAJdWludAkJc3dpZHRoOwkJLyogc2NyZWVuIHdpZHRoCQkJKi8KIAl1aW50CQlzaGVpZ2h0OwkvKiBzY3JlZW4gaGVpZ2h0CQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwX2kyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwX2kyYy5jCmluZGV4IDZiZmU4NGQuLjIxZmRlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjEyMF9pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjBfaTJjLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAkgY2FzZSBJMkNfRFJJVkVSSURfVklERU9ERUNPREVSOgogCQlERUJVRyhwcmludGsoQ0FSRF9JTkZPICJkZWNvZGVyIGF0dGFjaGVkXG4iLENBUkQpKTsKIAotCQkvKiBmZXRjaCB0aGUgY2FwYWJpbGl0ZXMgb2YgdGhlIGRlY29kZXIgKi8KKwkJLyogZmV0Y2ggdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZGVjb2RlciAqLwogCQlydiA9IGkyY19jb250cm9sX2RldmljZSgmenR2LT5pMmMsIEkyQ19EUklWRVJJRF9WSURFT0RFQ09ERVIsIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUywgJmRjKTsKIAkJaWYgKHJ2KSB7CiAJCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiZGVjb2RlciBpcyBub3QgVjRMIGF3YXJlIVxuIixDQVJEKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWcgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWcKaW5kZXggZTY3Y2YxNS4uYmJjMjI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vS2NvbmZpZwpAQCAtOSw2ICs5LDcgQEAKIAl0cmlzdGF0ZSAiRnVzaW9uIE1QVCBTY3NpSG9zdCBkcml2ZXJzIGZvciBTUEkiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQogCXNlbGVjdCBGVVNJT04KKwlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAktLS1oZWxwLS0tCiAJICBTQ1NJIEhPU1Qgc3VwcG9ydCBmb3IgYSBwYXJhbGxlbCBTQ1NJIGhvc3QgYWRhcHRlcnMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vTWFrZWZpbGUgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL01ha2VmaWxlCmluZGV4IDMzYWNlMzcuLjUxNzQwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKICNFWFRSQV9DRkxBR1MgKz0gLURNUFRfREVCVUdfTVNHX0ZSQU1FCiAjRVhUUkFfQ0ZMQUdTICs9IC1ETVBUX0RFQlVHX1NHCiAjRVhUUkFfQ0ZMQUdTICs9IC1ETVBUX0RFQlVHX0VWRU5UUworI0VYVFJBX0NGTEFHUyArPSAtRE1QVF9ERUJVR19WRVJCT1NFX0VWRU5UUwogI0VYVFJBX0NGTEFHUyArPSAtRE1QVF9ERUJVR19JTklUCiAjRVhUUkFfQ0ZMQUdTICs9IC1ETVBUX0RFQlVHX0VYSVQKICNFWFRSQV9DRkxBR1MgKz0gLURNUFRfREVCVUdfRkFJTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19zYXMuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbHNpL21waV9sb2dfc2FzLmgKaW5kZXggOTI1OWQxYS4uYTljMTRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9sc2kvbXBpX2xvZ19zYXMuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL2xzaS9tcGlfbG9nX3Nhcy5oCkBAIC0zLDM4ICszLDExIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgQ29weXJpZ2h0IDIwMDMgTFNJIExvZ2ljIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgVGhpcyBmaWxlIGlzIGNvbmZpZGVudGlhbCBhbmQgYSB0cmFkZSBzZWNyZXQgb2YgTFNJIExvZ2ljLiAgVGhlICAgICAgICAqCi0gKiAgcmVjZWlwdCBvZiBvciBwb3NzZXNzaW9uIG9mIHRoaXMgZmlsZSBkb2VzIG5vdCBjb252ZXkgYW55IHJpZ2h0cyB0byAgICAqCi0gKiAgcmVwcm9kdWNlIG9yIGRpc2Nsb3NlIGl0cyBjb250ZW50cyBvciB0byBtYW51ZmFjdHVyZSwgdXNlLCBvciBzZWxsICAgICAqCi0gKiAgYW55dGhpbmcgaXQgbWF5IGRlc2NyaWJlLCBpbiB3aG9sZSwgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgc3BlY2lmaWMgICAqCi0gKiAgd3JpdHRlbiBjb25zZW50IG9mIExTSSBMb2dpYyBDb3Jwb3JhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAtLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIGluY2x1ZGUgZmlsZSBjb250YWlucyBTQVMgZmlybXdhcmUgaW50ZXJmYWNlIElPQyBMb2cgSW5mbyBjb2RlcyAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogICAgICAgICAgIE5hbWU6ICBpb3BpSW9jTG9nSW5mby5oCi0gKiAgICAgICAgICBUaXRsZTogIFNBUyBGaXJtd2FyZSBJT1AgSW50ZXJmYWNlIElPQyBMb2cgSW5mbyBEZWZpbml0aW9ucwotICogICAgIFByb2dyYW1tZXI6ICBHdXkgS2VuZGFsbAotICogIENyZWF0aW9uIERhdGU6ICBTZXB0ZW1iZXIgMjQsIDIwMDMKLSAqCi0gKiAgVmVyc2lvbiBIaXN0b3J5Ci0gKiAgLS0tLS0tLS0tLS0tLS0tCi0gKgotICogIExhc3QgVXBkYXRlZAotICogIC0tLS0tLS0tLS0tLS0KLSAqICBWZXJzaW9uICAgICAgICAgJXZlcnNpb246IDIyICUKLSAqICBEYXRlIFVwZGF0ZWQgICAgJWRhdGVfbW9kaWZpZWQ6ICUKLSAqICBQcm9ncmFtbWVyICAgICAgJWNyZWF0ZWRfYnk6IG5wZXJ1Y2NhICUKLSAqCi0gKiAgRGF0ZSAgICAgIFdobyAgIERlc2NyaXB0aW9uCi0gKiAgLS0tLS0tLS0gIC0tLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAwOS8yNC8wMyAgR1dLICAgSW5pdGlhbCB2ZXJzaW9uCi0gKgotICoKLSAqIERlc2NyaXB0aW9uCi0gKiAtLS0tLS0tLS0tLS0KLSAqIFRoaXMgaW5jbHVkZSBmaWxlIGNvbnRhaW5zIFNBUyBmaXJtd2FyZSBpbnRlcmZhY2UgSU9DIExvZyBJbmZvIGNvZGVzCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKi8KIAogI2lmbmRlZiBJT1BJX0lPQ0xPR0lORk9fSF9JTkNMVURFRApAQCAtNTcsNiArMzAsOCBAQAogI2RlZmluZSBJT0NfTE9HSU5GT19PUklHSU5BVE9SX1BMICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTAwMDAwMCkKICNkZWZpbmUgSU9DX0xPR0lORk9fT1JJR0lOQVRPUl9JUiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDIwMDAwMDApCiAKKyNkZWZpbmUgSU9DX0xPR0lORk9fT1JJR0lOQVRPUl9NQVNLICAgICAgICAgICAgICAgICAgICAgKDB4MEYwMDAwMDApCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogTE9HSU5GT19DT0RFIGRlZmluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTc4LDExICs1MywyNyBAQAogI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0NPTkZJR19JTlZBTElEX1BBR0VfREVGQVVMVCAgICAoMHgwMDAzMDcwMCkgLyogRGVmYXVsdCBQYWdlIG5vdCBmb3VuZCAqLwogI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX1RBU0tfVEVSTUlOQVRFRCAgICAgICAgICAgICAgICAoMHgwMDA1MDAwMCkKIAorI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9SRUFEX0FDVElPTl9FUlIwUiAgICAoMHgwMDA2MDAwMSkgLyogUmVhZCBBY3Rpb24gbm90IHN1cHBvcnRlZCBmb3IgU0VQIG1zZyAqLworI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9JTlZBTElEX0JVU19JRF9FUlIwUiAoMHgwMDA2MDAwMikgLyogSW52YWxpZCBCdXMvSUQgaW4gU0VQIG1zZyAqLworCisjZGVmaW5lIElPUF9MT0dJTkZPX0NPREVfVEFSR0VUX0FTU0lTVF9URVJNSU5BVEVEICAgICAgICgweDAwMDcwMDAxKQorI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX1RBUkdFVF9TVEFUVVNfU0VORF9URVJNSU5BVEVEICAoMHgwMDA3MDAwMikKKyNkZWZpbmUgSU9QX0xPR0lORk9fQ09ERV9UQVJHRVRfTU9ERV9BQk9SVF9BTExfSU8gICAgICAgKDB4MDAwNzAwMDMpCisjZGVmaW5lIElPUF9MT0dJTkZPX0NPREVfVEFSR0VUX01PREVfQUJPUlRfRVhBQ1RfSU8gICAgICgweDAwMDcwMDA0KQorI2RlZmluZSBJT1BfTE9HSU5GT19DT0RFX1RBUkdFVF9NT0RFX0FCT1JUX0VYQUNUX0lPX1JFUSAoMHgwMDA3MDAwNSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBQTCBMT0dJTkZPX0NPREUgZGVmaW5lcywgdmFsaWQgaWYgSU9DX0xPR0lORk9fT1JJR0lOQVRPUiA9IFBMICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfT1BFTl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMTAwMDApCisjZGVmaW5lIFBMX0xPR19JTkZPX0NPREVfT1BFTl9GQUlMVVJFX05PX0RFU1RfVElNRV9PVVQgICAgICAoMHgwMDAxMDAwMSkKKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX09QRU5fRkFJTFVSRV9CQURfREVTVElOQVRJT04gICAgICAgICgweDAwMDEwMDExKQorI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfT1BFTl9GQUlMVVJFX1BST1RPQ09MX05PVF9TVVBQT1JURUQgKDB4MDAwMTAwMTMpCisjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9PUEVOX0ZBSUxVUkVfU1RQX1JFU09VUkNFU19CU1kgICAgICAoMHgwMDAxMDAxOCkKKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX09QRU5fRkFJTFVSRV9XUk9OR19ERVNUSU5BVElPTiAgICAgICgweDAwMDEwMDE5KQorI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfT1BFTl9GQUlMVVJFX09SUl9USU1FT1VUICAgICAgICAgICAgKDBYMDAwMTAwMUEpCisjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9PUEVOX0ZBSUxVUkVfUEFUSFdBWV9CTE9DS0VEICAgICAgICAoMHgwMDAxMDAxQikKKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX09QRU5fRkFJTFVSRV9BV1RfTUFYRUQgICAgICAgICAgICAgICgweDAwMDEwMDFDKQogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfSU5WQUxJRF9TR0wgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMjAwMDApCiAjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9XUk9OR19SRUxfT0ZGX09SX0ZSQU1FX0xFTkdUSCAgICAgICAoMHgwMDAzMDAwMCkKICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0ZSQU1FX1hGRVJfRVJST1IgICAgICAgICAgICAgICAgICAgICgweDAwMDQwMDAwKQpAQCAtOTcsNiArODgsNyBAQAogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfU0FUQV9MSU5LX0RPV04gICAgICAgICAgICAgICAgICAgICAgKDB4MDAwRDAwMDApCiAjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9ESVNDT1ZFUllfU0FUQV9JTklUX1dfSU9TICAgICAgICAgICAoMHgwMDBFMDAwMCkKICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0NPTkZJR19JTlZBTElEX1BBR0UgICAgICAgICAgICAgICAgICgweDAwMEYwMDAwKQorI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfQ09ORklHX1BMX05PVF9JTklUSUFMSVpFRCAgICAgICAgICAgKDB4MDAwRjAwMDEpIC8qIFBMIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGNhbid0IGRvIGNvbmZpZyBwYWdlIHJlcS4gKi8KICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0NPTkZJR19JTlZBTElEX1BBR0VfUFQgICAgICAgICAgICAgICgweDAwMEYwMTAwKSAvKiBJbnZhbGlkIFBhZ2UgVHlwZSAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfQ09ORklHX0lOVkFMSURfUEFHRV9OVU1fUEhZUyAgICAgICAgKDB4MDAwRjAyMDApIC8qIEludmFsaWQgTnVtYmVyIG9mIFBoeXMgKi8KICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0NPTkZJR19JTlZBTElEX1BBR0VfTk9UX0lNUCAgICAgICAgICgweDAwMEYwMzAwKSAvKiBDYXNlIE5vdCBIYW5kbGVkICovCkBAIC0xMDUsMTEgKzk3LDIzIEBACiAjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9DT05GSUdfSU5WQUxJRF9QQUdFX1BIWSAgICAgICAgICAgICAoMHgwMDBGMDYwMCkgLyogSW52YWxpZCBQaHkgKi8KICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0NPTkZJR19JTlZBTElEX1BBR0VfTk9fT1dORVIgICAgICAgICgweDAwMEYwNzAwKSAvKiBObyBPd25lciBGb3VuZCAqLwogI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRFNDVlJZX1NBVEFfSU5JVF9USU1FT1VUICAgICAgICAgICAgKDB4MDAxMDAwMDApCi0jZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDExMDAwMCkKLSNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTIwMDAwKQorI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAxMTAwMDApIC8qIFNlZSBTdWItQ29kZXMgYmVsb3cgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTIwMDAwKSAvKiBTZWUgU3ViLUNvZGVzIGJlbG93ICovCiAjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9JT19OT1RfWUVUX0VYRUNVVEVEICAgICAgICAgICAgICAgICAoMHgwMDEzMDAwMCkKICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0lPX0VYRUNVVEVEICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTQwMDAwKQorI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfUEVSU19SRVNWX09VVF9OT1RfQUZGSUxfT1dORVIgICAgICAgKDB4MDAxNTAwMDApCisjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9PUEVOX1RYRE1BX0FCT1JUICAgICAgICAgICAgICAgICAgICAoMHgwMDE2MDAwMCkKICNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9PUEVOX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBQTF9MT0dJTkZPX1NVQl9DT0RFX09QRU5fRkFJTFVSRV9OT19ERVNUX1RJTUVPVVQgICAgKDB4MDAwMDAxMDEpCisjZGVmaW5lIFBMX0xPR0lORk9fU1VCX0NPREVfT1BFTl9GQUlMVVJFX09SUl9USU1FT1VUICAgICAgICAoMHgwMDAwMDExQSkgLyogT3BlbiBSZWplY3QgKFJldHJ5KSBUaW1lb3V0ICovCisjZGVmaW5lIFBMX0xPR0lORk9fU1VCX0NPREVfT1BFTl9GQUlMVVJFX1BBVEhXQVlfQkxPQ0tFRCAgICAoMHgwMDAwMDExQikKKyNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9PUEVOX0ZBSUxVUkVfQVdUX01BWEVEICAgICAgICAgICgweDAwMDAwMTFDKSAvKiBBcmJpdHJhdGlvbiBXYWl0IFRpbWVyIE1heGVkICovCisKKyNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9UQVJHRVRfQlVTX1JFU0VUICAgICAgICAgICAgICAgICgweDAwMDAwMTIwKQorI2RlZmluZSBQTF9MT0dJTkZPX1NVQl9DT0RFX1RSQU5TUE9SVF9MQVlFUiAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMzApICAvKiBMZWF2ZSBsb3dlciBuaWJibGUgKDEtZikgcmVzZXJ2ZWQuICovCisjZGVmaW5lIFBMX0xPR0lORk9fU1VCX0NPREVfUE9SVF9MQVlFUiAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDE0MCkgIC8qIExlYXZlIGxvd2VyIG5pYmJsZSAoMS1mKSByZXNlcnZlZC4gKi8KKworCiAjZGVmaW5lIFBMX0xPR0lORk9fU1VCX0NPREVfSU5WQUxJRF9TR0wgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMCkKICNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9XUk9OR19SRUxfT0ZGX09SX0ZSQU1FX0xFTkdUSCAgICgweDAwMDAwMzAwKQogI2RlZmluZSBQTF9MT0dJTkZPX1NVQl9DT0RFX0ZSQU1FX1hGRVJfRVJST1IgICAgICAgICAgICAgICAgKDB4MDAwMDA0MDApCkBAIC0xMjMsMjYgKzEyNywzOSBAQAogI2RlZmluZSBQTF9MT0dJTkZPX1NVQl9DT0RFX1JYX0ZNX0NVUlJFTlRfRlJBTUVfRVJST1IgICAgICAgKDB4MDAwMDBDMDApCiAjZGVmaW5lIFBMX0xPR0lORk9fU1VCX0NPREVfU0FUQV9MSU5LX0RPV04gICAgICAgICAgICAgICAgICAoMHgwMDAwMEQwMCkKICNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9ESVNDT1ZFUllfU0FUQV9JTklUX1dfSU9TICAgICAgICgweDAwMDAwRTAwKQorI2RlZmluZSBQTF9MT0dJTkZPX1NVQl9DT0RFX0RJU0NPVkVSWV9SRU1PVEVfU0VQX1JFU0VUICAgICAgKDB4MDAwMDBFMDEpCisjZGVmaW5lIFBMX0xPR0lORk9fU1VCX0NPREVfU0VDT05EX09QRU4gICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEYwMCkKICNkZWZpbmUgUExfTE9HSU5GT19TVUJfQ09ERV9EU0NWUllfU0FUQV9JTklUX1RJTUVPVVQgICAgICAgICgweDAwMDAxMDAwKQogCiAKICNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TTVBfRlJBTUVfRkFJTFVSRSAgICAgICAgICgweDAwMjAwMDAwKSAvKiBDYW4ndCBnZXQgU01QIEZyYW1lICovCi0jZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfU01QX1JFQURfRVJST1IgICAgICAgICAgICAoMHgwMDIwMDAwMSkgLyogRXJyb3Igb2NjdXJlZCBvbiBTTVAgUmVhZCAqLwotI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX1NNUF9XUklURV9FUlJPUiAgICAgICAgICAgKDB4MDAyMDAwMDIpIC8qIEVycm9yIG9jY3VyZWQgb24gU01QIFdyaXRlICovCi0jZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfTk9UX1NVUFBPUlRFRF9PTl9FTkNMICAgICAoMHgwMDIwMDAwNCkgLyogRW5jbCBNZ210IHNlcnZpY2VzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgV1dJRCAqLwotI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX0FERFJfTU9ERV9OT1RfU1VQUE9SVEVEICAgKDB4MDAyMDAwMDUpIC8qIEFkZHJlc3MgTW9kZSBub3Qgc3VwcG9yZWQgKi8KLSNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9CQURfU0xPVF9OVU0gICAgICAgICAgICAgICgweDAwMjAwMDA2KSAvKiBJbnZhbGlkIFNsb3QgTnVtYmVyIGluIFNFUCBNc2cgKi8KLSNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TR1BJT19OT1RfUFJFU0VOVCAgICAgICAgICgweDAwMjAwMDA3KSAvKiBTR1BJTyBub3QgcHJlc2VudC9lbmFibGVkICovCisjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfU01QX1JFQURfRVJST1IgICAgICAgICAgICAoMHgwMDIwMDAxMCkgLyogRXJyb3Igb2NjdXJlZCBvbiBTTVAgUmVhZCAqLworI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX1NNUF9XUklURV9FUlJPUiAgICAgICAgICAgKDB4MDAyMDAwMjApIC8qIEVycm9yIG9jY3VyZWQgb24gU01QIFdyaXRlICovCisjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfTk9UX1NVUFBPUlRFRF9PTl9FTkNMICAgICAoMHgwMDIwMDA0MCkgLyogRW5jbCBNZ210IHNlcnZpY2VzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgV1dJRCAqLworI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX0FERFJfTU9ERV9OT1RfU1VQUE9SVEVEICAgKDB4MDAyMDAwNTApIC8qIEFkZHJlc3MgTW9kZSBub3Qgc3VwcG9yZWQgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9CQURfU0xPVF9OVU0gICAgICAgICAgICAgICgweDAwMjAwMDYwKSAvKiBJbnZhbGlkIFNsb3QgTnVtYmVyIGluIFNFUCBNc2cgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TR1BJT19OT1RfUFJFU0VOVCAgICAgICAgICgweDAwMjAwMDcwKSAvKiBTR1BJTyBub3QgcHJlc2VudC9lbmFibGVkICovCisjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfR1BJT19OT1RfQ09ORklHVVJFRCAgICAgICAoMHgwMDIwMDA4MCkgLyogR1BJTyBub3QgY29uZmlndXJlZCAqLworI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX0dQSU9fRlJBTUVfRVJST1IgICAgICAgICAgKDB4MDAyMDAwOTApIC8qIEdQSU8gY2FuJ3QgYWxsb2NhdGUgYSBmcmFtZSAqLworI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX0dQSU9fQ09ORklHX1BBR0VfRVJST1IgICAgKDB4MDAyMDAwQTApIC8qIEdQSU8gZmFpbGVkIGNvbmZpZyBwYWdlIHJlcXVlc3QgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TRVNfRlJBTUVfQUxMT0NfRVJST1IgICAgICgweDAwMjAwMEIwKSAvKiBDYW4ndCBnZXQgZnJhbWUgZm9yIFNFUyBjb21tYW5kICovCisjZGVmaW5lIFBMX0xPR0lORk9fQ09ERV9FTkNMX01HTVRfU0VTX0lPX0VSUk9SICAgICAgICAgICAgICAoMHgwMDIwMDBDMCkgLyogSS9PIGV4ZWN1dGlvbiBlcnJvciAqLworI2RlZmluZSBQTF9MT0dJTkZPX0NPREVfRU5DTF9NR01UX1NFU19SRVRSSUVTX0VYSEFVU1RFRCAgICAgKDB4MDAyMDAwRDApIC8qIFNFUCBJL08gcmV0cmllcyBleGhhdXN0ZWQgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19DT0RFX0VOQ0xfTUdNVF9TTVBfRlJBTUVfQUxMT0NfRVJST1IgICAgICgweDAwMjAwMEUwKSAvKiBDYW4ndCBnZXQgZnJhbWUgZm9yIFNNUCBjb21tYW5kICovCiAKICNkZWZpbmUgUExfTE9HSU5GT19EQV9TRVBfTk9UX1BSRVNFTlQgICAgICAgICAgICAgICAgICAgICAgICgweDAwMjAwMTAwKSAvKiBTRVAgbm90IHByZXNlbnQgd2hlbiBtc2cgcmVjZWl2ZWQgKi8KICNkZWZpbmUgUExfTE9HSU5GT19EQV9TRVBfU0lOR0xFX1RIUkVBRF9FUlJPUiAgICAgICAgICAgICAgICgweDAwMjAwMTAxKSAvKiBDYW4gb25seSBhY2NlcHQgMSBtc2cgYXQgYSB0aW1lICovCiAjZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX0lTVFdJX0lOVFJfSU5fSURMRV9TVEFURSAgICAgICAgICAoMHgwMDIwMDEwMikgLyogSVNUV0kgaW50ZXJydXB0IHJlY3ZkLiB3aGlsZSBJRExFICovCiAjZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX1JFQ0VJVkVEX05BQ0tfRlJPTV9TTEFWRSAgICAgICAgICAoMHgwMDIwMDEwMykgLyogU0VQIE5BQ0snZCwgaXQgaXMgYnVzeSAqLwotI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9CQURfU1RBVFVTX0hEUl9DSEtTVU0gICAgICAgICAgICAgKDB4MDAyMDAxMDQpIC8qIFNFUCBzdG9wcGVkIG9yIHNlbnQgYmFkIGNoa3N1bSBpbiBIZHIgKi8KLSNkZWZpbmUgUExfTE9HSU5GT19EQV9TRVBfVU5TVVBQT1JURURfU0NTSV9TVEFUVVNfMSAgICAgICAgICgweDAwMjAwMTA1KSAvKiBTRVAgcmV0dXJuZWQgdW5rbm93biBzY3NpIHN0YXR1cyAqLwotI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9VTlNVUFBPUlRFRF9TQ1NJX1NUQVRVU18yICAgICAgICAgKDB4MDAyMDAxMDYpIC8qIFNFUCByZXR1cm5lZCB1bmtub3duIHNjc2kgc3RhdHVzICovCi0jZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX0NIS1NVTV9FUlJPUl9BRlRFUl9TVE9QICAgICAgICAgICAoMHgwMDIwMDEwNykgLyogU0VQIHJldHVybmVkIGJhZCBjaGtzdW0gYWZ0ZXIgU1RPUCAqLwotI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9DSEtTVU1fRVJST1JfQUZURVJfU1RPUF9HRVREQVRBICAgKDB4MDAyMDAxMDgpIC8qIFNFUCByZXR1cm5lZCBiYWQgY2hrc3VtIGFmdGVyIFNUT1Agd2hpbGUgZ2V0dGluIGRhdGEqLworI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9ESURfTk9UX1JFQ0VJVkVfQUNLICAgICAgICAgICAgICAgKDB4MDAyMDAxMDQpIC8qIFNFUCBkaWRuJ3QgcmN2LiBBQ0sgKExhc3QgUmN2ZCBCaXQgPSAxKSAqLworI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9CQURfU1RBVFVTX0hEUl9DSEtTVU0gICAgICAgICAgICAgKDB4MDAyMDAxMDUpIC8qIFNFUCBzdG9wcGVkIG9yIHNlbnQgYmFkIGNoa3N1bSBpbiBIZHIgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19EQV9TRVBfU1RPUF9PTl9EQVRBICAgICAgICAgICAgICAgICAgICAgICgweDAwMjAwMTA2KSAvKiBTRVAgc3RvcHBlZCB3aGlsZSB0cmFuc2ZlcmluZyBkYXRhICovCisjZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX1NUT1BfT05fU0VOU0VfREFUQSAgICAgICAgICAgICAgICAoMHgwMDIwMDEwNykgLyogU0VQIHN0b3BwZWQgd2hpbGUgdHJhbnNmZXJpbmcgc2Vuc2UgZGF0YSAqLworI2RlZmluZSBQTF9MT0dJTkZPX0RBX1NFUF9VTlNVUFBPUlRFRF9TQ1NJX1NUQVRVU18xICAgICAgICAgKDB4MDAyMDAxMDgpIC8qIFNFUCByZXR1cm5lZCB1bmtub3duIHNjc2kgc3RhdHVzICovCisjZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX1VOU1VQUE9SVEVEX1NDU0lfU1RBVFVTXzIgICAgICAgICAoMHgwMDIwMDEwOSkgLyogU0VQIHJldHVybmVkIHVua25vd24gc2NzaSBzdGF0dXMgKi8KKyNkZWZpbmUgUExfTE9HSU5GT19EQV9TRVBfQ0hLU1VNX0VSUk9SX0FGVEVSX1NUT1AgICAgICAgICAgICgweDAwMjAwMTBBKSAvKiBTRVAgcmV0dXJuZWQgYmFkIGNoa3N1bSBhZnRlciBTVE9QICovCisjZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX0NIS1NVTV9FUlJPUl9BRlRFUl9TVE9QX0dFVERBVEEgICAoMHgwMDIwMDEwQikgLyogU0VQIHJldHVybmVkIGJhZCBjaGtzdW0gYWZ0ZXIgU1RPUCB3aGlsZSBnZXR0aW4gZGF0YSovCisjZGVmaW5lIFBMX0xPR0lORk9fREFfU0VQX1VOU1VQUE9SVEVEX0NPTU1BTkQgICAgICAgICAgICAgICAoMHgwMDIwMDEwQykgLyogU0VQIGRvZXNuJ3Qgc3VwcG9ydCBDREIgb3Bjb2RlICovCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDY0MmE2MWIuLjI2NjQxNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xODAsNiArMTgwLDcgQEAKIHN0YXRpYyB2b2lkCW1wdF9mY19sb2dfaW5mbyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgbG9nX2luZm8pOwogc3RhdGljIHZvaWQJbXB0X3NwaV9sb2dfaW5mbyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgbG9nX2luZm8pOwogc3RhdGljIHZvaWQJbXB0X3Nhc19sb2dfaW5mbyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgbG9nX2luZm8pOworc3RhdGljIGludAltcHRfcmVhZF9pb2NfcGdfMyhNUFRfQURBUFRFUiAqaW9jKTsKIAogLyogbW9kdWxlIGVudHJ5IHBvaW50ICovCiBzdGF0aWMgaW50ICBfX2luaXQgICAgZnVzaW9uX2luaXQgICh2b2lkKTsKQEAgLTQyOCw3ICs0MjksNyBAQAogCQlyZXN1bHRzID0gUHJvY2Vzc0V2ZW50Tm90aWZpY2F0aW9uKGlvYywgcEV2UmVwbHksICZldkhhbmRsZXJzKTsKIAkJaWYgKHJlc3VsdHMgIT0gZXZIYW5kbGVycykgewogCQkJLyogQ0hFQ0tNRSEgQW55IHNwZWNpYWwgaGFuZGxpbmcgbmVlZGVkIGhlcmU/ICovCi0JCQlkZXZ0cHJpbnRrKChNWUlPQ19zX1dBUk5fRk1UICJDYWxsZWQgJWQgZXZlbnQgaGFuZGxlcnMsIHN1bSByZXN1bHRzID0gJWRcbiIsCisJCQlkZXZ0dmVyYm9zZXByaW50aygoTVlJT0Nfc19XQVJOX0ZNVCAiQ2FsbGVkICVkIGV2ZW50IGhhbmRsZXJzLCBzdW0gcmVzdWx0cyA9ICVkXG4iLAogCQkJCQlpb2MtPm5hbWUsIGV2SGFuZGxlcnMsIHJlc3VsdHMpKTsKIAkJfQogCkBAIC00MzgsMTAgKzQzOSwxMCBAQAogCQkgKi8KIAkJaWYgKHBFdlJlcGx5LT5Nc2dGbGFncyAmIE1QSV9NU0dGTEFHU19DT05USU5VQVRJT05fUkVQTFkpIHsKIAkJCWZyZWVyZXEgPSAwOwotCQkJZGV2dHByaW50aygoTVlJT0Nfc19XQVJOX0ZNVCAiRVZFTlRfTk9USUZJQ0FUSU9OIHJlcGx5ICVwIGRvZXMgbm90IHJldHVybiBSZXF1ZXN0IGZyYW1lXG4iLAorCQkJZGV2dHZlcmJvc2VwcmludGsoKE1ZSU9DX3NfV0FSTl9GTVQgIkVWRU5UX05PVElGSUNBVElPTiByZXBseSAlcCBkb2VzIG5vdCByZXR1cm4gUmVxdWVzdCBmcmFtZVxuIiwKIAkJCQlpb2MtPm5hbWUsIHBFdlJlcGx5KSk7CiAJCX0gZWxzZSB7Ci0JCQlkZXZ0cHJpbnRrKChNWUlPQ19zX1dBUk5fRk1UICJFVkVOVF9OT1RJRklDQVRJT04gcmVwbHkgJXAgcmV0dXJucyBSZXF1ZXN0IGZyYW1lXG4iLAorCQkJZGV2dHZlcmJvc2VwcmludGsoKE1ZSU9DX3NfV0FSTl9GTVQgIkVWRU5UX05PVElGSUNBVElPTiByZXBseSAlcCByZXR1cm5zIFJlcXVlc3QgZnJhbWVcbiIsCiAJCQkJaW9jLT5uYW1lLCBwRXZSZXBseSkpOwogCQl9CiAKQEAgLTExMjAsNjUgKzExMjEsNiBAQAogCXJldHVybiAtMTsKIH0KIAotaW50Ci1tcHRfYWx0X2lvY193YWl0KE1QVF9BREFQVEVSICppb2MpCi17Ci0JaW50IGxvb3BfY291bnQgPSAzMCAqIDQ7ICAvKiBXYWl0IDMwIHNlY29uZHMgKi8KLQlpbnQgc3RhdHVzID0gLTE7IC8qIC0xIG1lYW5zIGZhaWxlZCB0byBnZXQgYm9hcmQgUkVBRFkgKi8KLQotCWRvIHsKLQkJc3Bpbl9sb2NrKCZpb2MtPmluaXRpYWxpemluZ19oYmFfbG9jayk7Ci0JCWlmIChpb2MtPmluaXRpYWxpemluZ19oYmFfbG9ja19mbGFnID09IDApIHsKLQkJCWlvYy0+aW5pdGlhbGl6aW5nX2hiYV9sb2NrX2ZsYWc9MTsKLQkJCXNwaW5fdW5sb2NrKCZpb2MtPmluaXRpYWxpemluZ19oYmFfbG9jayk7Ci0JCQlzdGF0dXMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmlvYy0+aW5pdGlhbGl6aW5nX2hiYV9sb2NrKTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dChIWi80KTsKLQl9IHdoaWxlICgtLWxvb3BfY291bnQpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwotLyoKLSAqCW1wdF9icmluZ3VwX2FkYXB0ZXIgLSBUaGlzIGlzIGEgd3JhcHBlciBmdW5jdGlvbiBmb3IgbXB0X2RvX2lvY19yZWNvdmVyeQotICoJQGlvYzogUG9pbnRlciB0byBNUFQgYWRhcHRlciBzdHJ1Y3R1cmUKLSAqCUBzbGVlcEZsYWc6IFVzZSBzY2hlZHVsZSBpZiBDQU5fU0xFRVAgZWxzZSB1c2UgdWRlbGF5LgotICoKLSAqCVRoaXMgcm91dGluZSBwZXJmb3JtcyBhbGwgdGhlIHN0ZXBzIG5lY2Vzc2FyeSB0byBicmluZyB0aGUgSU9DCi0gKgl0byBhIE9QRVJBVElPTkFMIHN0YXRlLgotICoKLSAqICAgICAgU3BlY2lhbCBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCB3aXRoIHNwaW4gbG9jaydzIHNvIGFzIHRvIGFsbG93Ci0gKiAgICAgIHRoZSBkdihkb21haW4gdmFsaWRhdGlvbikgd29yayB0aHJlYWQgdG8gc3VjY2VlZCBvbiB0aGUgb3RoZXIgY2hhbm5lbAotICogICAgICB0aGF0IG1heWJlIG9jY3VyaW5nIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqICAgICAgV2l0aG91dCB0aGlzIGxvY2ssIHRoZSBkdiB3b3VsZCBmYWlsIHdoZW4gbWVzc2FnZSBmcmFtZXMgd2VyZQotICogICAgICByZXF1ZXN0ZWQgZHVyaW5nIGhiYSBicmluZ3VwIG9uIHRoZSBhbHRlcm5hdGUgaW9jLgotICovCi1zdGF0aWMgaW50Ci1tcHRfYnJpbmd1cF9hZGFwdGVyKE1QVF9BREFQVEVSICppb2MsIGludCBzbGVlcEZsYWcpCi17Ci0JaW50IHI7Ci0KLQlpZihpb2MtPmFsdF9pb2MpIHsKLQkJaWYoKHI9bXB0X2FsdF9pb2Nfd2FpdChpb2MtPmFsdF9pb2MpIT0wKSkKLQkJCXJldHVybiByOwotCX0KLQotCXIgPSBtcHRfZG9faW9jX3JlY292ZXJ5KGlvYywgTVBUX0hPU1RFVkVOVF9JT0NfQlJJTkdVUCwKLQkgICAgQ0FOX1NMRUVQKTsKLQotCWlmKGlvYy0+YWx0X2lvYykgewotCQlzcGluX2xvY2soJmlvYy0+YWx0X2lvYy0+aW5pdGlhbGl6aW5nX2hiYV9sb2NrKTsKLQkJaW9jLT5hbHRfaW9jLT5pbml0aWFsaXppbmdfaGJhX2xvY2tfZmxhZz0wOwotCQlzcGluX3VubG9jaygmaW9jLT5hbHRfaW9jLT5pbml0aWFsaXppbmdfaGJhX2xvY2spOwotCX0KLQotcmV0dXJuIHI7Ci19Ci0KIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCiAgKgltcHRfYXR0YWNoIC0gSW5zdGFsbCBhIFBDSSBpbnRlbGxpZ2VudCBNUFQgYWRhcHRlci4KQEAgLTE0ODIsNyArMTQyNCw4IEBACiAJICovCiAJbXB0X2RldGVjdF9ib3VuZF9wb3J0cyhpb2MsIHBkZXYpOwogCi0JaWYgKChyID0gbXB0X2JyaW5ndXBfYWRhcHRlcihpb2MsIENBTl9TTEVFUCkpICE9IDApeworCWlmICgociA9IG1wdF9kb19pb2NfcmVjb3ZlcnkoaW9jLCBNUFRfSE9TVEVWRU5UX0lPQ19CUklOR1VQLAorCSAgICBDQU5fU0xFRVApKSAhPSAwKXsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBNWU5BTQogCQkgICI6IFdBUk5JTkcgLSAlcyBkaWQgbm90IGluaXRpYWxpemUgcHJvcGVybHkhICglZClcbiIsCiAJCSAgaW9jLT5uYW1lLCByKTsKQEAgLTE2MjksNyArMTU3Miw2IEBACiAJTVBUX0FEQVBURVIgKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl1MzIgZGV2aWNlX3N0YXRlID0gcGRldi0+Y3VycmVudF9zdGF0ZTsKIAlpbnQgcmVjb3Zlcnlfc3RhdGU7Ci0JaW50IGlpOwogCiAJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKIAkicGNpLXJlc3VtZTogcGRldj0weCVwLCBzbG90PSVzLCBQcmV2aW91cyBvcGVyYXRpbmcgc3RhdGUgW0QlZF1cbiIsCkBAIC0xNjQzLDE0ICsxNTg1LDYgQEAKIAlDSElQUkVHX1dSSVRFMzIoJmlvYy0+Y2hpcC0+SW50TWFzaywgTVBJX0hJTV9ESU0pOwogCWlvYy0+YWN0aXZlID0gMTsKIAotCS8qIEYvVyBub3QgcnVubmluZyAqLwotCWlmKCFDSElQUkVHX1JFQUQzMigmaW9jLT5jaGlwLT5Eb29yYmVsbCkpIHsKLQkJLyogZW5hYmxlIGRvbWFpbiB2YWxpZGF0aW9uIGZsYWdzICovCi0JCWZvciAoaWk9MDsgaWkgPCBNUFRfTUFYX1NDU0lfREVWSUNFUzsgaWkrKykgewotCQkJaW9jLT5zcGlfZGF0YS5kdlN0YXR1c1tpaV0gfD0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKLQkJfQotCX0KLQogCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCiAJCSJwY2ktcmVzdW1lOiBpb2Mtc3RhdGU9MHgleCxkb29yYmVsbD0weCV4XG4iLAogCQlpb2MtPm5hbWUsCkBAIC00OTM4LDcgKzQ4NzIsNyBAQAogCXJldHVybiByYzsKIH0KIAotaW50CitzdGF0aWMgaW50CiBtcHRfcmVhZF9pb2NfcGdfMyhNUFRfQURBUFRFUiAqaW9jKQogewogCUlPQ1BhZ2UzX3QJCSpwSW9jMzsKQEAgLTUxNDYsMTMgKzUwODAsMTMgQEAKIAogCWV2bnAgPSAoRXZlbnROb3RpZmljYXRpb25fdCAqKSBtcHRfZ2V0X21zZ19mcmFtZShtcHRfYmFzZV9pbmRleCwgaW9jKTsKIAlpZiAoZXZucCA9PSBOVUxMKSB7Ci0JCWRldnRwcmludGsoKE1ZSU9DX3NfV0FSTl9GTVQgIlVuYWJsZSB0byBhbGxvY2F0ZSBldmVudCByZXF1ZXN0IGZyYW1lIVxuIiwKKwkJZGV2dHZlcmJvc2VwcmludGsoKE1ZSU9DX3NfV0FSTl9GTVQgIlVuYWJsZSB0byBhbGxvY2F0ZSBldmVudCByZXF1ZXN0IGZyYW1lIVxuIiwKIAkJCQlpb2MtPm5hbWUpKTsKIAkJcmV0dXJuIDA7CiAJfQogCW1lbXNldChldm5wLCAwLCBzaXplb2YoKmV2bnApKTsKIAotCWRldnRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIlNlbmRpbmcgRXZlbnROb3RpZmljYXRpb24gKCVkKSByZXF1ZXN0ICVwXG4iLCBpb2MtPm5hbWUsIEV2U3dpdGNoLCBldm5wKSk7CisJZGV2dHZlcmJvc2VwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIlNlbmRpbmcgRXZlbnROb3RpZmljYXRpb24gKCVkKSByZXF1ZXN0ICVwXG4iLCBpb2MtPm5hbWUsIEV2U3dpdGNoLCBldm5wKSk7CiAKIAlldm5wLT5GdW5jdGlvbiA9IE1QSV9GVU5DVElPTl9FVkVOVF9OT1RJRklDQVRJT047CiAJZXZucC0+Q2hhaW5PZmZzZXQgPSAwOwpAQCAtNTkwNywyNCArNTg0MSwyNyBAQAogCQlicmVhazsKIAljYXNlIE1QSV9FVkVOVF9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0U6CiAJeworCQljaGFyIGJ1Zls1MF07CisJCXU4IGlkID0gKHU4KShldkRhdGEwKTsKIAkJdTggUmVhc29uQ29kZSA9ICh1OCkoZXZEYXRhMCA+PiAxNik7CiAJCXN3aXRjaCAoUmVhc29uQ29kZSkgewogCQljYXNlIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQURERUQ6Ci0JCQlkcyA9ICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IEFkZGVkIjsKKwkJCXNwcmludGYoYnVmLCJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IEFkZGVkOiBpZD0lZCIsIGlkKTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSV9FVkVOVF9TQVNfREVWX1NUQVRfUkNfTk9UX1JFU1BPTkRJTkc6Ci0JCQlkcyA9ICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IERlbGV0ZWQiOworCQkJc3ByaW50ZihidWYsIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogRGVsZXRlZDogaWQ9JWQiLCBpZCk7CiAJCQlicmVhazsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEE6Ci0JCQlkcyA9ICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IFNNQVJUIERhdGEiOworCQkJc3ByaW50ZihidWYsIlNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZTogU01BUlQgRGF0YTogaWQ9JWQiLCBpZCk7CiAJCQlicmVhazsKIAkJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX05PX1BFUlNJU1RfQURERUQ6Ci0JCQlkcyA9ICJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IE5vIFBlcnNpc3RhbmN5IEFkZGVkIjsKKwkJCXNwcmludGYoYnVmLCJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IE5vIFBlcnNpc3RhbmN5IEFkZGVkOiBpZD0lZCIsIGlkKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZHMgPSAiU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlOiBVbmtub3duIjsKKwkJCXNwcmludGYoYnVmLCJTQVMgRGV2aWNlIFN0YXR1cyBDaGFuZ2U6IFVua25vd246IGlkPSVkIiwgaWQpOwogCQlicmVhazsKIAkJfQorCQlkcyA9IGJ1ZjsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJX0VWRU5UX09OX0JVU19USU1FUl9FWFBJUkVEOgpAQCAtNTk0MCwxMSArNTg3Nyw5NyBAQAogCQlkcyA9ICJQZXJzaXN0ZW50IFRhYmxlIEZ1bGwiOwogCQlicmVhazsKIAljYXNlIE1QSV9FVkVOVF9TQVNfUEhZX0xJTktfU1RBVFVTOgotCQlkcyA9ICJTQVMgUEhZIExpbmsgU3RhdHVzIjsKKwl7CisJCWNoYXIgYnVmWzUwXTsKKwkJdTggTGlua1JhdGVzID0gKHU4KShldkRhdGEwID4+IDgpOworCQl1OCBQaHlOdW1iZXIgPSAodTgpKGV2RGF0YTApOworCQlMaW5rUmF0ZXMgPSAoTGlua1JhdGVzICYgTVBJX0VWRU5UX1NBU19QTFNfTFJfQ1VSUkVOVF9NQVNLKSA+PgorCQkJTVBJX0VWRU5UX1NBU19QTFNfTFJfQ1VSUkVOVF9TSElGVDsKKwkJc3dpdGNoIChMaW5rUmF0ZXMpIHsKKwkJY2FzZSBNUElfRVZFTlRfU0FTX1BMU19MUl9SQVRFX1VOS05PV046CisJCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKKwkJCSAgICIgUmF0ZSBVbmtub3duIixQaHlOdW1iZXIpOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1NBU19QTFNfTFJfUkFURV9QSFlfRElTQUJMRUQ6CisJCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKKwkJCSAgICIgUGh5IERpc2FibGVkIixQaHlOdW1iZXIpOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX1NBU19QTFNfTFJfUkFURV9GQUlMRURfU1BFRURfTkVHT1RJQVRJT046CisJCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkOiIKKwkJCSAgICIgRmFpbGVkIFNwZWVkIE5lZ28iLFBoeU51bWJlcik7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfU0FTX1BMU19MUl9SQVRFX1NBVEFfT09CX0NPTVBMRVRFOgorCQkJc3ByaW50ZihidWYsIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCisJCQkgICAiIFNhdGEgT09CIENvbXBsZXRlZCIsUGh5TnVtYmVyKTsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9TQVNfUExTX0xSX1JBVEVfMV81OgorCQkJc3ByaW50ZihidWYsIlNBUyBQSFkgTGluayBTdGF0dXM6IFBoeT0lZDoiCisJCQkgICAiIFJhdGUgMS41IEdicHMiLFBoeU51bWJlcik7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfU0FTX1BMU19MUl9SQVRFXzNfMDoKKwkJCXNwcmludGYoYnVmLCJTQVMgUEhZIExpbmsgU3RhdHVzOiBQaHk9JWQ6IgorCQkJICAgIiBSYXRlIDMuMCBHcGJzIixQaHlOdW1iZXIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKGJ1ZiwiU0FTIFBIWSBMaW5rIFN0YXR1czogUGh5PSVkIiwgUGh5TnVtYmVyKTsKKwkJCWJyZWFrOworCQl9CisJCWRzID0gYnVmOwogCQlicmVhazsKKwl9CiAJY2FzZSBNUElfRVZFTlRfU0FTX0RJU0NPVkVSWV9FUlJPUjoKIAkJZHMgPSAiU0FTIERpc2NvdmVyeSBFcnJvciI7CiAJCWJyZWFrOworCWNhc2UgTVBJX0VWRU5UX0lSX1JFU1lOQ19VUERBVEU6CisJeworCQl1OCByZXN5bmNfY29tcGxldGUgPSAodTgpKGV2RGF0YTAgPj4gMTYpOworCQljaGFyIGJ1Zls0MF07CisJCXNwcmludGYoYnVmLCJJUiBSZXN5bmMgVXBkYXRlOiBDb21wbGV0ZSA9ICVkOiIscmVzeW5jX2NvbXBsZXRlKTsKKwkJZHMgPSBidWY7CisJCWJyZWFrOworCX0KKwljYXNlIE1QSV9FVkVOVF9JUjI6CisJeworCQl1OCBSZWFzb25Db2RlID0gKHU4KShldkRhdGEwID4+IDE2KTsKKwkJc3dpdGNoIChSZWFzb25Db2RlKSB7CisJCWNhc2UgTVBJX0VWRU5UX0lSMl9SQ19MRF9TVEFURV9DSEFOR0VEOgorCQkJZHMgPSAiSVIyOiBMRCBTdGF0ZSBDaGFuZ2VkIjsKKwkJCWJyZWFrOworCQljYXNlIE1QSV9FVkVOVF9JUjJfUkNfUERfU1RBVEVfQ0hBTkdFRDoKKwkJCWRzID0gIklSMjogUEQgU3RhdGUgQ2hhbmdlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfSVIyX1JDX0JBRF9CTE9DS19UQUJMRV9GVUxMOgorCQkJZHMgPSAiSVIyOiBCYWQgQmxvY2sgVGFibGUgRnVsbCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfSVIyX1JDX1BEX0lOU0VSVEVEOgorCQkJZHMgPSAiSVIyOiBQRCBJbnNlcnRlZCI7CisJCQlicmVhazsKKwkJY2FzZSBNUElfRVZFTlRfSVIyX1JDX1BEX1JFTU9WRUQ6CisJCQlkcyA9ICJJUjI6IFBEIFJlbW92ZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX0lSMl9SQ19GT1JFSUdOX0NGR19ERVRFQ1RFRDoKKwkJCWRzID0gIklSMjogRm9yZWlnbiBDRkcgRGV0ZWN0ZWQiOworCQkJYnJlYWs7CisJCWNhc2UgTVBJX0VWRU5UX0lSMl9SQ19SRUJVSUxEX01FRElVTV9FUlJPUjoKKwkJCWRzID0gIklSMjogUmVidWlsZCBNZWRpdW0gRXJyb3IiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcyA9ICJJUjIiOworCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBNUElfRVZFTlRfU0FTX0RJU0NPVkVSWToKKwl7CisJCWlmIChldkRhdGEwKQorCQkJZHMgPSAiU0FTIERpc2NvdmVyeTogU3RhcnQiOworCQllbHNlCisJCQlkcyA9ICJTQVMgRGlzY292ZXJ5OiBTdG9wIjsKKwkJYnJlYWs7CisJfQorCWNhc2UgTVBJX0VWRU5UX0xPR19FTlRSWV9BRERFRDoKKwkJZHMgPSAiU0FTIExvZyBFbnRyeSBBZGRlZCI7CisJCWJyZWFrOwogCiAJLyoKIAkgKiAgTVBUIGJhc2UgImN1c3RvbSIgZXZlbnRzIG1heSBiZSBhZGRlZCBoZXJlLi4uCkBAIC01OTg5LDEyICs2MDEyLDEyIEBACiAJfQogCiAJRXZlbnREZXNjcmlwdGlvblN0cihldmVudCwgZXZEYXRhMCwgZXZTdHIpOwotCWRldnRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIk1QVCBldmVudCAoJXM9JTAyWGgpIGRldGVjdGVkIVxuIiwKKwlkZXZ0cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJNUFQgZXZlbnQ6KCUwMlhoKSA6ICVzXG4iLAogCQkJaW9jLT5uYW1lLAotCQkJZXZTdHIsCi0JCQlldmVudCkpOworCQkJZXZlbnQsCisJCQlldlN0cikpOwogCi0jaWYgZGVmaW5lZChNUFRfREVCVUcpIHx8IGRlZmluZWQoTVBUX0RFQlVHX0VWRU5UUykKKyNpZiBkZWZpbmVkKE1QVF9ERUJVRykgfHwgZGVmaW5lZChNUFRfREVCVUdfVkVSQk9TRV9FVkVOVFMpCiAJcHJpbnRrKEtFUk5fSU5GTyBNWU5BTSAiOiBFdmVudCBkYXRhOlxuIiBLRVJOX0lORk8pOwogCWZvciAoaWkgPSAwOyBpaSA8IGV2RGF0YUxlbjsgaWkrKykKIAkJcHJpbnRrKCIgJTA4eCIsIGxlMzJfdG9fY3B1KHBFdmVudFJlcGx5LT5EYXRhW2lpXSkpOwpAQCAtNjA1Myw3ICs2MDc2LDcgQEAKIAkgKi8KIAlmb3IgKGlpPU1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUy0xOyBpaTsgaWktLSkgewogCQlpZiAoTXB0RXZIYW5kbGVyc1tpaV0pIHsKLQkJCWRldnRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIlJvdXRpbmcgRXZlbnQgdG8gZXZlbnQgaGFuZGxlciAjJWRcbiIsCisJCQlkZXZ0dmVyYm9zZXByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiUm91dGluZyBFdmVudCB0byBldmVudCBoYW5kbGVyICMlZFxuIiwKIAkJCQkJaW9jLT5uYW1lLCBpaSkpOwogCQkJciArPSAoKihNcHRFdkhhbmRsZXJzW2lpXSkpKGlvYywgcEV2ZW50UmVwbHkpOwogCQkJaGFuZGxlcnMrKzsKQEAgLTYwNjUsMTAgKzYwODgsMTAgQEAKIAkgKiAgSWYgbmVlZGVkLCBzZW5kIChhIHNpbmdsZSkgRXZlbnRBY2suCiAJICovCiAJaWYgKHBFdmVudFJlcGx5LT5BY2tSZXF1aXJlZCA9PSBNUElfRVZFTlRfTk9USUZJQ0FUSU9OX0FDS19SRVFVSVJFRCkgewotCQlkZXZ0cHJpbnRrKChNWUlPQ19zX1dBUk5fRk1UCisJCWRldnR2ZXJib3NlcHJpbnRrKChNWUlPQ19zX1dBUk5fRk1UCiAJCQkiRXZlbnRBY2sgcmVxdWlyZWRcbiIsaW9jLT5uYW1lKSk7CiAJCWlmICgoaWkgPSBTZW5kRXZlbnRBY2soaW9jLCBwRXZlbnRSZXBseSkpICE9IDApIHsKLQkJCWRldnRwcmludGsoKE1ZSU9DX3NfV0FSTl9GTVQgIlNlbmRFdmVudEFjayByZXR1cm5lZCAlZFxuIiwKKwkJCWRldnR2ZXJib3NlcHJpbnRrKChNWUlPQ19zX1dBUk5fRk1UICJTZW5kRXZlbnRBY2sgcmV0dXJuZWQgJWRcbiIsCiAJCQkJCWlvYy0+bmFtZSwgaWkpKTsKIAkJfQogCX0KQEAgLTYyMDUsOCArNjIyOCw4IEBACiAJCSJBYm9ydCIsCQkJCQkvKiAxMmggKi8KIAkJIklPIE5vdCBZZXQgRXhlY3V0ZWQiLAkJCQkvKiAxM2ggKi8KIAkJIklPIEV4ZWN1dGVkIiwJCQkJCS8qIDE0aCAqLwotCQlOVUxMLAkJCQkJCS8qIDE1aCAqLwotCQlOVUxMLAkJCQkJCS8qIDE2aCAqLworCQkiUGVyc2lzdGFudCBSZXNlcnZhdGlvbiBPdXQgTm90IEFmZmlsaWF0aW9uIE93bmVyIiwgLyogMTVoICovCisJCSJPcGVuIFRyYW5zbWl0IERNQSBBYm9ydCIsCQkJLyogMTZoICovCiAJCU5VTEwsCQkJCQkJLyogMTdoICovCiAJCU5VTEwsCQkJCQkJLyogMThoICovCiAJCU5VTEwsCQkJCQkJLyogMTloICovCkBAIC02NDMxLDExICs2NDU0LDkgQEAKIEVYUE9SVF9TWU1CT0wobXB0X0hhcmRSZXNldEhhbmRsZXIpOwogRVhQT1JUX1NZTUJPTChtcHRfY29uZmlnKTsKIEVYUE9SVF9TWU1CT0wobXB0X2ZpbmRJbVZvbHVtZXMpOwotRVhQT1JUX1NZTUJPTChtcHRfcmVhZF9pb2NfcGdfMyk7CiBFWFBPUlRfU1lNQk9MKG1wdF9hbGxvY19md19tZW1vcnkpOwogRVhQT1JUX1NZTUJPTChtcHRfZnJlZV9md19tZW1vcnkpOwogRVhQT1JUX1NZTUJPTChtcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbik7Ci1FWFBPUlRfU1lNQk9MKG1wdF9hbHRfaW9jX3dhaXQpOwogRVhQT1JUX1NZTUJPTChtcHRiYXNlX0dldEZjUG9ydFBhZ2UwKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaCBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCmluZGV4IDcyM2Q1NDMuLmJlN2U4NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oCkBAIC03Niw4ICs3Niw4IEBACiAjZGVmaW5lIENPUFlSSUdIVAkiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgIiBNT0RVTEVBVVRIT1IKICNlbmRpZgogCi0jZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wMy4wNyIKLSNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjAzLjA3IgorI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDMuMDgiCisjZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wMy4wOCIKICNkZWZpbmUgV0hBVF9NQUdJQ19TVFJJTkcJCSJAIiAiKCIgIiMiICIpIgogCiAjZGVmaW5lIHNob3dfbXB0bW9kX3ZlcihzLHZlcikgIFwKQEAgLTMzMSw2ICszMzEsNyBAQAogICoJVmlydERldmljZSAtIEZDIExVTiBkZXZpY2Ugb3IgU0NTSSB0YXJnZXQgZGV2aWNlCiAgKi8KIHR5cGVkZWYgc3RydWN0IF9WaXJ0VGFyZ2V0IHsKKwlzdHJ1Y3Qgc2NzaV90YXJnZXQJKnN0YXJnZXQ7CiAJdTgJCQkgdGZsYWdzOwogCXU4CQkJIGlvY19pZDsKIAl1OAkJCSB0YXJnZXRfaWQ7CkBAIC0zNDMsMTQgKzM0NCwxMCBAQAogCXU4CQkJIHR5cGU7CQkvKiBieXRlIDAgb2YgSW5xdWlyeSBkYXRhICovCiAJdTMyCQkJIG51bV9sdW5zOwogCXUzMgkJCSBsdW5zWzhdOwkJLyogTWF4IExVTnMgaXMgMjU2ICovCi0JdTgJCQkgaW5xX2RhdGFbOF07CiB9IFZpcnRUYXJnZXQ7CiAKIHR5cGVkZWYgc3RydWN0IF9WaXJ0RGV2aWNlIHsKLQlWaXJ0VGFyZ2V0CSAJKnZ0YXJnZXQ7Ci0JdTgJCQkgaW9jX2lkOwotCXU4CQkJIGJ1c19pZDsKLQl1OAkJCSB0YXJnZXRfaWQ7CisJVmlydFRhcmdldAkJKnZ0YXJnZXQ7CiAJdTgJCQkgY29uZmlndXJlZF9sdW47CiAJdTMyCQkJIGx1bjsKIH0gVmlydERldmljZTsKQEAgLTM2NCw2ICszNjEsNyBAQAogI2RlZmluZSBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTCQkweDA4CiAjZGVmaW5lIE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfNTYJMHgxMAogI2RlZmluZSBNUFRfVEFSR0VUX0ZMQUdTX1NBRl9URV9JU1NVRUQJMHgyMAorI2RlZmluZSBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UCTB4NDAKIAogLyoKICAqCS9wcm9jL21wdCBpbnRlcmZhY2UKQEAgLTQ0NywxMyArNDQ1LDYgQEAKICAqCVN1YnN0cnVjdHVyZSB0byBzdG9yZSBTQ1NJIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcGFnZSBkYXRhCiAgKi8KIAkJCQkJCS8qIGR2U3RhdHVzIGRlZmluZXM6ICovCi0jZGVmaW5lIE1QVF9TQ1NJQ0ZHX05FR09USUFURQkJMHgwMQkvKiBOZWdvdGlhdGUgb24gbmV4dCBJTyAqLwotI2RlZmluZSBNUFRfU0NTSUNGR19ORUVEX0RWCQkweDAyCS8qIFNjaGVkdWxlIERWICovCi0jZGVmaW5lIE1QVF9TQ1NJQ0ZHX0RWX1BFTkRJTkcJCTB4MDQJLyogRFYgb24gdGhpcyBwaHlzaWNhbCBpZCBwZW5kaW5nICovCi0jZGVmaW5lIE1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FCQkweDA4CS8qIERWIGhhcyBub3QgYmVlbiBwZXJmb3JtZWQgKi8KLSNkZWZpbmUgTVBUX1NDU0lDRkdfQkxLX05FR08JCTB4MTAJLyogV3JpdGVTRFAxIHdpdGggV0RUUiBhbmQgU0RUUiBkaXNhYmxlZCAqLwotI2RlZmluZSBNUFRfU0NTSUNGR19SRUxPQURfSU9DX1BHMwkweDIwCS8qIElPQyBQZyAzIGRhdGEgaXMgb2Jzb2xldGUgKi8KLQkJCQkJCS8qIEFyZ3MgcGFzc2VkIHRvIHdyaXRlU0RQMTogKi8KICNkZWZpbmUgTVBUX1NDU0lDRkdfVVNFX05WUkFNCQkweDAxCS8qIFdyaXRlU0RQMSB1c2luZyBOVlJBTSAqLwogI2RlZmluZSBNUFRfU0NTSUNGR19BTExfSURTCQkweDAyCS8qIFdyaXRlU0RQMSB0byBhbGwgSURTICovCiAvKiAjZGVmaW5lIE1QVF9TQ1NJQ0ZHX0JMS19ORUdPCQkweDEwCSAgIFdyaXRlU0RQMSB3aXRoIFdEVFIgYW5kIFNEVFIgZGlzYWJsZWQgKi8KQEAgLTQ2NCw3ICs0NTUsNiBAQAogCUlPQ1BhZ2U0X3QJKnBJb2NQZzQ7CQkvKiBTRVAgZGV2aWNlcyBhZGRyZXNzaW5nICovCiAJZG1hX2FkZHJfdAkgSW9jUGc0X2RtYTsJCS8qIFBoeXMgQWRkciBvZiBJT0NQYWdlNCBkYXRhICovCiAJaW50CQkgSW9jUGc0U3o7CQkvKiBJT0NQYWdlNCBzaXplICovCi0JdTgJCSBkdlN0YXR1c1tNUFRfTUFYX1NDU0lfREVWSUNFU107CiAJdTgJCSBtaW5TeW5jRmFjdG9yOwkJLyogMHhGRiBpZiBhc3luYyAqLwogCXU4CQkgbWF4U3luY09mZnNldDsJCS8qIDAgaWYgYXN5bmMgKi8KIAl1OAkJIG1heEJ1c1dpZHRoOwkJLyogMCBpZiBuYXJyb3csIDEgaWYgd2lkZSAqLwpAQCAtNDc0LDEzICs0NjQsMTEgQEAKIAl1OAkJIHNkcDB2ZXJzaW9uOwkJLyogU0RQMCB2ZXJzaW9uICovCiAJdTgJCSBzZHAwbGVuZ3RoOwkJLyogU0RQMCBsZW5ndGggICovCiAJdTgJCSBkdlNjaGVkdWxlZDsJCS8qIDEgaWYgc2NoZWR1bGVkICovCi0JdTgJCSBmb3JjZUR2OwkJLyogMSB0byBmb3JjZSBEViBzY2hlZHVsaW5nICovCiAJdTgJCSBub1FhczsJCQkvKiBEaXNhYmxlIFFBUyBmb3IgdGhpcyBhZGFwdGVyICovCiAJdTgJCSBTYWZfVGU7CQkvKiAxIHRvIGZvcmNlIGFsbCBQcm9jZXNzb3JzIGFzCiAJCQkJCQkgKiBTQUYtVEUgaWYgSW5xdWlyeSBkYXRhIGxlbmd0aAogCQkJCQkJICogaXMgdG9vIHNob3J0IHRvIGNoZWNrIGZvciBTQUYtVEUKIAkJCQkJCSAqLwotCXU4CQkgbXB0X2R2OwkJLyogY29tbWFuZCBsaW5lIG9wdGlvbjogZW5oYW5jZWQ9MSwgYmFzaWM9MCAqLwogCXU4CQkgYnVzX3Jlc2V0OwkJLyogMSB0byBhbGxvdyBidXMgcmVzZXQgKi8KIAl1OAkJIHJzdmRbMV07CiB9U3BpQ2ZnRGF0YTsKQEAgLTYzMSw2ICs2MTksMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQJIHNhc190b3BvbG9neTsKIAlzdHJ1Y3QgbXV0ZXgJCSBzYXNfdG9wb2xvZ3lfbXV0ZXg7CisJc3RydWN0IG11dGV4CQkgc2FzX2Rpc2NvdmVyeV9tdXRleDsKKwl1OAkJCSBzYXNfZGlzY292ZXJ5X3J1bnRpbWU7CisJdTgJCQkgc2FzX2Rpc2NvdmVyeV9pZ25vcmVfZXZlbnRzOworCWludAkJCSBzYXNfaW5kZXg7IC8qIGluZGV4IHJlZnJlbmNpbmcgKi8KIAlNUFRfU0FTX01HTVQJCSBzYXNfbWdtdDsKIAlpbnQJCQkgbnVtX3BvcnRzOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkgbXB0c2NzaWhfcGVyc2lzdFRhc2s7CkBAIC03MjgsMTIgKzcyMCwxOCBAQAogI2RlZmluZSBkaHNwcmludGsoeCkKICNlbmRpZgogCi0jaWZkZWYgTVBUX0RFQlVHX0VWRU5UUworI2lmIGRlZmluZWQoTVBUX0RFQlVHX0VWRU5UUykgfHwgZGVmaW5lZChNUFRfREVCVUdfVkVSQk9TRV9FVkVOVFMpCiAjZGVmaW5lIGRldnRwcmludGsoeCkgIHByaW50ayB4CiAjZWxzZQogI2RlZmluZSBkZXZ0cHJpbnRrKHgpCiAjZW5kaWYKIAorI2lmZGVmIE1QVF9ERUJVR19WRVJCT1NFX0VWRU5UUworI2RlZmluZSBkZXZ0dmVyYm9zZXByaW50ayh4KSAgcHJpbnRrIHgKKyNlbHNlCisjZGVmaW5lIGRldnR2ZXJib3NlcHJpbnRrKHgpCisjZW5kaWYKKwogI2lmZGVmIE1QVF9ERUJVR19SRVNFVAogI2RlZmluZSBkcnNwcmludGsoeCkgIHByaW50ayB4CiAjZWxzZQpAQCAtMTAzMCwxMCArMTAyOCw4IEBACiBleHRlcm4gdm9pZAkgbXB0X2FsbG9jX2Z3X21lbW9yeShNUFRfQURBUFRFUiAqaW9jLCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZAkgbXB0X2ZyZWVfZndfbWVtb3J5KE1QVF9BREFQVEVSICppb2MpOwogZXh0ZXJuIGludAkgbXB0X2ZpbmRJbVZvbHVtZXMoTVBUX0FEQVBURVIgKmlvYyk7Ci1leHRlcm4gaW50CSBtcHRfcmVhZF9pb2NfcGdfMyhNUFRfQURBUFRFUiAqaW9jKTsKIGV4dGVybiBpbnQJIG1wdGJhc2Vfc2FzX3BlcnNpc3Rfb3BlcmF0aW9uKE1QVF9BREFQVEVSICppb2MsIHU4IHBlcnNpc3Rfb3Bjb2RlKTsKIGV4dGVybiBpbnQJIG1wdGJhc2VfR2V0RmNQb3J0UGFnZTAoTVBUX0FEQVBURVIgKmlvYywgaW50IHBvcnRudW0pOwotZXh0ZXJuIGludAkgbXB0X2FsdF9pb2Nfd2FpdChNUFRfQURBUFRFUiAqaW9jKTsKIAogLyoKICAqICBQdWJsaWMgZGF0YSBkZWNsJ3MuLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCmluZGV4IDliNjRlMDcuLmI0OTY3YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAgKiBFdmVudCBIYW5kbGVyIGZ1bmN0aW9uCiAgKi8KIHN0YXRpYyBpbnQgbXB0Y3RsX2V2ZW50X3Byb2Nlc3MoTVBUX0FEQVBURVIgKmlvYywgRXZlbnROb3RpZmljYXRpb25SZXBseV90ICpwRXZSZXBseSk7Ci1zdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqYXN5bmNfcXVldWU9TlVMTDsKK3N0YXRpYyBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqYXN5bmNfcXVldWU9TlVMTDsKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCSBpZiAoZXZlbnQgPT0gMHgyMSApIHsKIAkJaW9jLT5hZW5fZXZlbnRfcmVhZF9mbGFnPTE7CiAJCWRjdGxwcmludGsoKCJSYWlzZWQgU0lHSU8gdG8gYXBwbGljYXRpb25cbiIpKTsKLQkJZGV2dHByaW50aygoIlJhaXNlZCBTSUdJTyB0byBhcHBsaWNhdGlvblxuIikpOworCQlkZXZ0dmVyYm9zZXByaW50aygoIlJhaXNlZCBTSUdJTyB0byBhcHBsaWNhdGlvblxuIikpOwogCQlraWxsX2Zhc3luYygmYXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKIAkJcmV0dXJuIDE7CiAJIH0KQEAgLTUxNSw3ICs1MTUsNyBAQAogCWlmIChpb2MtPmV2ZW50cyAmJiAoaW9jLT5ldmVudFR5cGVzICYgKCAxIDw8IGV2ZW50KSkpIHsKIAkJaW9jLT5hZW5fZXZlbnRfcmVhZF9mbGFnPTE7CiAJCWRjdGxwcmludGsoKCJSYWlzZWQgU0lHSU8gdG8gYXBwbGljYXRpb25cbiIpKTsKLQkJZGV2dHByaW50aygoIlJhaXNlZCBTSUdJTyB0byBhcHBsaWNhdGlvblxuIikpOworCQlkZXZ0dmVyYm9zZXByaW50aygoIlJhaXNlZCBTSUdJTyB0byBhcHBsaWNhdGlvblxuIikpOwogCQlraWxsX2Zhc3luYygmYXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0yOTY4LDcgKzI5NjgsNyBAQAogCX0KIAogCWlmIChtcHRfZXZlbnRfcmVnaXN0ZXIobXB0Y3RsX2lkLCBtcHRjdGxfZXZlbnRfcHJvY2VzcykgPT0gMCkgewotCQlkZXZ0cHJpbnRrKChLRVJOX0lORk8gTVlOQU0KKwkJZGV2dHZlcmJvc2VwcmludGsoKEtFUk5fSU5GTyBNWU5BTQogCQkgICI6IFJlZ2lzdGVyZWQgZm9yIElPQyBldmVudCBub3RpZmljYXRpb25zXG4iKSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggYzNhMzQ5OS4uYjM0M2YyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKm1wdGZjX3RyYW5zcG9ydF90ZW1wbGF0ZSA9IE5VTEw7CiAKLXN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBtcHRmY190cmFuc3BvcnRfZnVuY3Rpb25zID0geworc3RhdGljIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBtcHRmY190cmFuc3BvcnRfZnVuY3Rpb25zID0gewogCS5kZF9mY3Jwb3J0X3NpemUgPSA4LAogCS5zaG93X2hvc3Rfbm9kZV9uYW1lID0gMSwKIAkuc2hvd19ob3N0X3BvcnRfbmFtZSA9IDEsCkBAIC0zNDksMjQgKzM0OSw2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1tcHRmY19yZW1hcF9zZGV2KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqYXJnKQotewotCVZpcnREZXZpY2UJCSp2ZGV2OwotCVZpcnRUYXJnZXQJCSp2dGFyZ2V0OwotCXN0cnVjdCBzY3NpX3RhcmdldAkqc3RhcmdldDsKLQotCXN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKLQlpZiAoc3RhcmdldC0+aG9zdGRhdGEgPT0gYXJnKSB7Ci0JCXZ0YXJnZXQgPSBhcmc7Ci0JCXZkZXYgPSBzZGV2LT5ob3N0ZGF0YTsKLQkJaWYgKHZkZXYpIHsKLQkJCXZkZXYtPmJ1c19pZCA9IHZ0YXJnZXQtPmJ1c19pZDsKLQkJCXZkZXYtPnRhcmdldF9pZCA9IHZ0YXJnZXQtPnRhcmdldF9pZDsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKIG1wdGZjX3JlZ2lzdGVyX2RldihNUFRfQURBUFRFUiAqaW9jLCBpbnQgY2hhbm5lbCwgRkNEZXZpY2VQYWdlMF90ICpwZzApCiB7CiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIHJwb3J0X2lkczsKQEAgLTQyMyw4ICs0MDUsNiBAQAogCQkJCWlmICh2dGFyZ2V0KSB7CiAJCQkJCXZ0YXJnZXQtPnRhcmdldF9pZCA9IHBnMC0+Q3VycmVudFRhcmdldElEOwogCQkJCQl2dGFyZ2V0LT5idXNfaWQgPSBwZzAtPkN1cnJlbnRCdXM7Ci0JCQkJCXN0YXJnZXRfZm9yX2VhY2hfZGV2aWNlKHJpLT5zdGFyZ2V0LAotCQkJCQkJdnRhcmdldCxtcHRmY19yZW1hcF9zZGV2KTsKIAkJCQl9CiAJCQkJcmktPnJlbWFwX25lZWRlZCA9IDA7CiAJCQl9CkBAIC00MzIsNyArNDEyLDcgQEAKIAkJCQkibXB0ZmNfcmVnX2Rldi4lZDogJXgsICVsbHggLyAlbGx4LCB0aWQgJWQsICIKIAkJCQkicnBvcnQgdGlkICVkLCB0bW8gJWRcbiIsCiAJCQkJCWlvYy0+bmFtZSwKLQkJCQkJb2MtPnNoLT5ob3N0X25vLAorCQkJCQlpb2MtPnNoLT5ob3N0X25vLAogCQkJCQlwZzAtPlBvcnRJZGVudGlmaWVyLAogCQkJCQlwZzAtPldXTk4sCiAJCQkJCXBnMC0+V1dQTiwKQEAgLTUxNCw3ICs0OTQsNyBAQAogICoJUmV0dXJuIG5vbi16ZXJvIGlmIGFsbG9jYXRpb24gZmFpbHMuCiAgKglJbml0IG1lbW9yeSBvbmNlIHBlciBMVU4uCiAgKi8KLWludAorc3RhdGljIGludAogbXB0ZmNfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCU1QVF9TQ1NJX0hPU1QJCSpoZDsKQEAgLTU1MywyMyArNTMzLDI2IEBACiAJfQogCiAJdmRldi0+dnRhcmdldCA9IHZ0YXJnZXQ7Ci0JdmRldi0+aW9jX2lkID0gaGQtPmlvYy0+aWQ7CiAJdmRldi0+bHVuID0gc2Rldi0+bHVuOwotCXZkZXYtPnRhcmdldF9pZCA9IHZ0YXJnZXQtPnRhcmdldF9pZDsKLQl2ZGV2LT5idXNfaWQgPSB2dGFyZ2V0LT5idXNfaWQ7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZC0+aW9jLT5mY19ycG9ydF9sb2NrLGZsYWdzKTsKIAogCXZ0YXJnZXQtPm51bV9sdW5zKys7CiAKKyNpZmRlZiBETVBUX0RFQlVHX0ZDCisJIHsKKwlzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqcmk7CisJcmkgPSAqKChzdHJ1Y3QgbXB0ZmNfcnBvcnRfaW5mbyAqKilycG9ydC0+ZGRfZGF0YSk7CiAJZGZjcHJpbnRrICgoTVlJT0Nfc19JTkZPX0ZNVAogCQkibXB0ZmNfc2x2X2FsbG9jLiVkOiBudW1fbHVucyAlZCwgc2Rldi5pZCAlZCwgIgogCSAgICAgICAgIkN1cnJlbnRUYXJnZXRJRCAlZCwgJXggJWxseCAlbGx4XG4iLAotCQlpb2MtPm5hbWUsCisJCWhkLT5pb2MtPm5hbWUsCiAJCXNkZXYtPmhvc3QtPmhvc3Rfbm8sCiAJCXZ0YXJnZXQtPm51bV9sdW5zLAogCQlzZGV2LT5pZCwgcmktPnBnMC5DdXJyZW50VGFyZ2V0SUQsCiAJCXJpLT5wZzAuUG9ydElkZW50aWZpZXIsIHJpLT5wZzAuV1dQTiwgcmktPnBnMC5XV05OKSk7CisJfQorI2VuZGlmCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk0MSw3ICs5MjQsNyBAQAogCW1wdGZjSW50ZXJuYWxDdHggPSBtcHRfcmVnaXN0ZXIobXB0c2NzaWhfc2NhbmR2X2NvbXBsZXRlLCBNUFRGQ19EUklWRVIpOwogCiAJaWYgKG1wdF9ldmVudF9yZWdpc3RlcihtcHRmY0RvbmVDdHgsIG1wdHNjc2loX2V2ZW50X3Byb2Nlc3MpID09IDApIHsKLQkJZGV2dHByaW50aygoS0VSTl9JTkZPIE1ZTkFNCisJCWRldnR2ZXJib3NlcHJpbnRrKChLRVJOX0lORk8gTVlOQU0KIAkJICAiOiBSZWdpc3RlcmVkIGZvciBJT0MgZXZlbnQgbm90aWZpY2F0aW9uc1xuIikpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKaW5kZXggNzNmNTk1Mi4uMzE0YzNhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCkBAIC0xMTUyLDEwICsxMTUyLDcgQEAKIAkJCQlwcml2LT5tcHRfcnhmaWR4X3RhaWwsCiAJCQkJTVBUX0xBTl9NQVhfQlVDS0VUU19PVVQpOwogCi0JCXBhbmljKCJEYW1uIGl0IEppbSEgSSdtIGEgZG9jdG9yLCBub3QgYSBwcm9ncmFtbWVyISAiCi0JCQkJIk9oLCB3YWl0IGEgc2VjLCBJIGFtIGEgcHJvZ3JhbW1lci4gIgotCQkJCSJBbmQsIHdobydzIEppbT8hPyFcbiIKLQkJCQkiQXJyZ2doaCEgV2UndmUgZG9uZSBpdCBhZ2FpbiFcbiIpOworCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKHJlbWFpbmluZyA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKaW5kZXggMjUxMmQwZS4uMDEwZDRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCkBAIC0xMDQsNiArMTA0LDEzIEBACiAJdTE2CQkJaGFuZGxlOwogCXUxNgkJCXBhcmVudF9oYW5kbGU7CiAJdTgJCQlwaHlfaWQ7CisJdTgJCQlwaHlzX2Rpc2tfbnVtOworCXU4CQkJcGh5c19kaXNrX251bV92YWxpZDsKK307CisKK3N0cnVjdCBtcHRzYXNfZGlzY292ZXJ5X2V2ZW50IHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKKwlNUFRfQURBUFRFUgkJKmlvYzsKIH07CiAKIC8qCkBAIC0xMTcsNiArMTI0LDggQEAKIHN0cnVjdCBtcHRzYXNfZGV2aW5mbyB7CiAJdTE2CWhhbmRsZTsJCS8qIHVuaXF1ZSBpZCB0byBhZGRyZXNzIHRoaXMgZGV2aWNlICovCiAJdTE2CWhhbmRsZV9wYXJlbnQ7CS8qIHVuaXF1ZSBpZCB0byBhZGRyZXNzIHBhcmVudCBkZXZpY2UgKi8KKwl1MTYJaGFuZGxlX2VuY2xvc3VyZTsgLyogZW5jbG9zdXJlIGlkZW50aWZpZXIgb2YgdGhlIGVuY2xvc3VyZSAqLworCXUxNglzbG90OwkJLyogcGh5c2ljYWwgc2xvdCBpbiBlbmNsb3N1cmUgKi8KIAl1OAlwaHlfaWQ7CQkvKiBwaHkgbnVtYmVyIG9mIHBhcmVudCBkZXZpY2UgKi8KIAl1OAlwb3J0X2lkOwkvKiBzYXMgcGh5c2ljYWwgcG9ydCB0aGlzIGRldmljZQogCQkJCSAgIGlzIGFzc29jJ2Qgd2l0aCAqLwpAQCAtMTM3LDYgKzE0Niw3IEBACiAJc3RydWN0IG1wdHNhc19kZXZpbmZvIGF0dGFjaGVkOwkvKiBwb2ludCB0byBhdHRhY2hlZCBkZXZpY2UgaW5mbyAqLwogCXN0cnVjdCBzYXNfcGh5ICpwaHk7CiAJc3RydWN0IHNhc19ycGh5ICpycGh5OworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKIH07CiAKIHN0cnVjdCBtcHRzYXNfcG9ydGluZm8gewpAQCAtMTQ2LDYgKzE1NiwxNyBAQAogCXN0cnVjdCBtcHRzYXNfcGh5aW5mbyAqcGh5X2luZm87CiB9OwogCitzdHJ1Y3QgbXB0c2FzX2VuY2xvc3VyZSB7CisJdTY0CWVuY2xvc3VyZV9sb2dpY2FsX2lkOwkvKiBUaGUgV1dOIGZvciB0aGUgZW5jbG9zdXJlICovCisJdTE2CWVuY2xvc3VyZV9oYW5kbGU7CS8qIHVuaXF1ZSBpZCB0byBhZGRyZXNzIHRoaXMgKi8KKwl1MTYJZmxhZ3M7CQkJLyogZGV0YWlscyBlbmNsb3N1cmUgbWFuYWdlbWVudCAqLworCXUxNgludW1fc2xvdDsJCS8qIG51bSBzbG90cyAqLworCXUxNglzdGFydF9zbG90OwkJLyogZmlyc3Qgc2xvdCAqLworCXU4CXN0YXJ0X2lkOwkJLyogc3RhcnRpbmcgbG9naWNhbCB0YXJnZXQgaWQgKi8KKwl1OAlzdGFydF9jaGFubmVsOwkJLyogc3RhcnRpbmcgbG9naWNhbCBjaGFubmVsIGlkICovCisJdTgJc2VwX2lkOwkJCS8qIFNFUCBkZXZpY2UgbG9naWNhbCB0YXJnZXQgaWQgKi8KKwl1OAlzZXBfY2hhbm5lbDsJCS8qIFNFUCBjaGFubmVsIGxvZ2ljYWwgY2hhbm5lbCBpZCAqLworfTsKIAogI2lmZGVmIFNBU0RFQlVHCiBzdGF0aWMgdm9pZCBtcHRzYXNfcHJpbnRfcGh5X2RhdGEoTVBJX1NBU19JT19VTklUMF9QSFlfREFUQSAqcGh5X2RhdGEpCkBAIC0yMDUsNiArMjI2LDcgQEAKIAogCXByaW50aygiLS0tLSBTQVMgREVWSUNFIFBBR0UgMCAtLS0tLS0tLS1cbiIpOwogCXByaW50aygiSGFuZGxlPTB4JVhcbiIgLGxlMTZfdG9fY3B1KHBnMC0+RGV2SGFuZGxlKSk7CisJcHJpbnRrKCJQYXJlbnQgSGFuZGxlPTB4JVhcbiIgLGxlMTZfdG9fY3B1KHBnMC0+UGFyZW50RGV2SGFuZGxlKSk7CiAJcHJpbnRrKCJFbmNsb3N1cmUgSGFuZGxlPTB4JVhcbiIsIGxlMTZfdG9fY3B1KHBnMC0+RW5jbG9zdXJlSGFuZGxlKSk7CiAJcHJpbnRrKCJTbG90PTB4JVhcbiIsIGxlMTZfdG9fY3B1KHBnMC0+U2xvdCkpOwogCXByaW50aygiU0FTIEFkZHJlc3M9MHglbGxYXG4iLCBsZTY0X3RvX2NwdShzYXNfYWRkcmVzcykpOwpAQCAtMjQzLDYgKzI2NSwxMTEgQEAKICNkZWZpbmUgbXB0c2FzX3ByaW50X2V4cGFuZGVyX3BnMShwZzEpCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorc3RhdGljIGlubGluZSBNUFRfQURBUFRFUiAqcGh5X3RvX2lvYyhzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHBoeS0+ZGV2LnBhcmVudCk7CisJcmV0dXJuICgoTVBUX1NDU0lfSE9TVCAqKXNob3N0LT5ob3N0ZGF0YSktPmlvYzsKK30KKworc3RhdGljIGlubGluZSBNUFRfQURBUFRFUiAqcnBoeV90b19pb2Moc3RydWN0IHNhc19ycGh5ICpycGh5KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHJwaHktPmRldi5wYXJlbnQtPnBhcmVudCk7CisJcmV0dXJuICgoTVBUX1NDU0lfSE9TVCAqKXNob3N0LT5ob3N0ZGF0YSktPmlvYzsKK30KKworLyoKKyAqIG1wdHNhc19maW5kX3BvcnRpbmZvX2J5X2hhbmRsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBzYXNfdG9wb2xvZ3lfbXV0ZXggYWxyZWFkeSBoZWxkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICoKK21wdHNhc19maW5kX3BvcnRpbmZvX2J5X2hhbmRsZShNUFRfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlKQoreworCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbywgKnJjPU5VTEw7CisJaW50IGk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnRfaW5mbywgJmlvYy0+c2FzX3RvcG9sb2d5LCBsaXN0KQorCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrKQorCQkJaWYgKHBvcnRfaW5mby0+cGh5X2luZm9baV0uaWRlbnRpZnkuaGFuZGxlID09IGhhbmRsZSkgeworCQkJCXJjID0gcG9ydF9pbmZvOworCQkJCWdvdG8gb3V0OworCQkJfQorIG91dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK21wdHNhc19zYXNfZW5jbG9zdXJlX3BnMChNUFRfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgbXB0c2FzX2VuY2xvc3VyZSAqZW5jbG9zdXJlLAorCQl1MzIgZm9ybSwgdTMyIGZvcm1fc3BlY2lmaWMpCit7CisJQ29uZmlnRXh0ZW5kZWRQYWdlSGVhZGVyX3QgaGRyOworCUNPTkZJR1BBUk1TIGNmZzsKKwlTYXNFbmNsb3N1cmVQYWdlMF90ICpidWZmZXI7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCWludCBlcnJvcjsKKwlfX2xlNjQgbGVfaWRlbnRpZmllcjsKKworCW1lbXNldCgmaGRyLCAwLCBzaXplb2YoaGRyKSk7CisJaGRyLlBhZ2VWZXJzaW9uID0gTVBJX1NBU0VOQ0xPU1VSRTBfUEFHRVZFUlNJT047CisJaGRyLlBhZ2VOdW1iZXIgPSAwOworCWhkci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfRVhURU5ERUQ7CisJaGRyLkV4dFBhZ2VUeXBlID0gTVBJX0NPTkZJR19FWFRQQUdFVFlQRV9FTkNMT1NVUkU7CisKKwljZmcuY2ZnaGRyLmVoZHIgPSAmaGRyOworCWNmZy5waHlzQWRkciA9IC0xOworCWNmZy5wYWdlQWRkciA9IGZvcm0gKyBmb3JtX3NwZWNpZmljOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwljZmcuZGlyID0gMDsJLyogcmVhZCAqLworCWNmZy50aW1lb3V0ID0gMTA7CisKKwllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCWlmICghaGRyLkV4dFBhZ2VMZW5ndGgpIHsKKwkJZXJyb3IgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCWJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBoZHIuRXh0UGFnZUxlbmd0aCAqIDQsCisJCQkmZG1hX2hhbmRsZSk7CisJaWYgKCFidWZmZXIpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljZmcucGh5c0FkZHIgPSBkbWFfaGFuZGxlOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKworCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCisJLyogc2F2ZSBjb25maWcgZGF0YSAqLworCW1lbWNweSgmbGVfaWRlbnRpZmllciwgJmJ1ZmZlci0+RW5jbG9zdXJlTG9naWNhbElELCBzaXplb2YoX19sZTY0KSk7CisJZW5jbG9zdXJlLT5lbmNsb3N1cmVfbG9naWNhbF9pZCA9IGxlNjRfdG9fY3B1KGxlX2lkZW50aWZpZXIpOworCWVuY2xvc3VyZS0+ZW5jbG9zdXJlX2hhbmRsZSA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+RW5jbG9zdXJlSGFuZGxlKTsKKwllbmNsb3N1cmUtPmZsYWdzID0gbGUxNl90b19jcHUoYnVmZmVyLT5GbGFncyk7CisJZW5jbG9zdXJlLT5udW1fc2xvdCA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+TnVtU2xvdHMpOworCWVuY2xvc3VyZS0+c3RhcnRfc2xvdCA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+U3RhcnRTbG90KTsKKwllbmNsb3N1cmUtPnN0YXJ0X2lkID0gYnVmZmVyLT5TdGFydFRhcmdldElEOworCWVuY2xvc3VyZS0+c3RhcnRfY2hhbm5lbCA9IGJ1ZmZlci0+U3RhcnRCdXM7CisJZW5jbG9zdXJlLT5zZXBfaWQgPSBidWZmZXItPlNFUFRhcmdldElEOworCWVuY2xvc3VyZS0+c2VwX2NoYW5uZWwgPSBidWZmZXItPlNFUEJ1czsKKworIG91dF9mcmVlX2NvbnNpc3RlbnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGRyLkV4dFBhZ2VMZW5ndGggKiA0LAorCQkJICAgIGJ1ZmZlciwgZG1hX2hhbmRsZSk7Cisgb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorbXB0c2FzX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc2Rldik7CisKKwlyZXR1cm4gbXB0c2NzaWhfc2xhdmVfY29uZmlndXJlKHNkZXYpOworfQogCiAvKgogICogVGhpcyBpcyBwcmV0dHkgdWdseS4gIFdlIHdpbGwgYmUgYWJsZSB0byBzZXJpb3VzbHkgY2xlYW4gaXQgdXAKQEAgLTI1OSw2ICszODYsNyBAQAogCVZpcnRUYXJnZXQJCSp2dGFyZ2V0OwogCVZpcnREZXZpY2UJCSp2ZGV2OwogCXN0cnVjdCBzY3NpX3RhcmdldCAJKnN0YXJnZXQ7CisJdTMyCQkJdGFyZ2V0X2lkOwogCWludCBpOwogCiAJdmRldiA9IGt6YWxsb2Moc2l6ZW9mKFZpcnREZXZpY2UpLCBHRlBfS0VSTkVMKTsKQEAgLTI2NywxMCArMzk1LDEwIEBACiAJCQkJaGQtPmlvYy0+bmFtZSwgc2l6ZW9mKFZpcnREZXZpY2UpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXZkZXYtPmlvY19pZCA9IGhkLT5pb2MtPmlkOwogCXNkZXYtPmhvc3RkYXRhID0gdmRldjsKIAlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CiAJdnRhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOworCXZ0YXJnZXQtPmlvY19pZCA9IGhkLT5pb2MtPmlkOwogCXZkZXYtPnZ0YXJnZXQgPSB2dGFyZ2V0OwogCWlmICh2dGFyZ2V0LT5udW1fbHVucyA9PSAwKSB7CiAJCXZ0YXJnZXQtPnRmbGFncyA9IE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVN8TVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZOwpAQCAtMjgxLDggKzQwOSw4IEBACiAJICBSQUlEIHZvbHVtZXMgcGxhY2VkIGJleW9uZCB0aGUgbGFzdCBleHBlY3RlZCBwb3J0LgogCSovCiAJaWYgKHNkZXYtPmNoYW5uZWwgPT0gaGQtPmlvYy0+bnVtX3BvcnRzKSB7Ci0JCXZkZXYtPnRhcmdldF9pZCA9IHNkZXYtPmlkOwotCQl2ZGV2LT5idXNfaWQgPSAwOworCQl0YXJnZXRfaWQgPSBzZGV2LT5pZDsKKwkJdnRhcmdldC0+YnVzX2lkID0gMDsKIAkJdmRldi0+bHVuID0gMDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjkzLDExICs0MjEsMjEgQEAKIAkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9waHlzOyBpKyspIHsKIAkJCWlmIChwLT5waHlfaW5mb1tpXS5hdHRhY2hlZC5zYXNfYWRkcmVzcyA9PQogCQkJCQlycGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcykgewotCQkJCXZkZXYtPnRhcmdldF9pZCA9Ci0JCQkJCXAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmlkOwotCQkJCXZkZXYtPmJ1c19pZCA9IHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLmNoYW5uZWw7CisJCQkJdGFyZ2V0X2lkID0gcC0+cGh5X2luZm9baV0uYXR0YWNoZWQuaWQ7CisJCQkJdnRhcmdldC0+YnVzX2lkID0gcC0+cGh5X2luZm9baV0uYXR0YWNoZWQuY2hhbm5lbDsKIAkJCQl2ZGV2LT5sdW4gPSBzZGV2LT5sdW47Ci0gCW11dGV4X3VubG9jaygmaGQtPmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKKwkJCQlwLT5waHlfaW5mb1tpXS5zdGFyZ2V0ID0gc2Rldi0+c2Rldl90YXJnZXQ7CisJCQkJLyoKKwkJCQkgKiBFeHBvc2luZyBoaWRkZW4gZGlzayAoUkFJRCkKKwkJCQkgKi8KKwkJCQlpZiAobXB0c2NzaWhfaXNfcGh5c19kaXNrKGhkLT5pb2MsIHRhcmdldF9pZCkpIHsKKwkJCQkJdGFyZ2V0X2lkID0gbXB0c2NzaWhfcmFpZF9pZF90b19udW0oaGQsCisJCQkJCQkJdGFyZ2V0X2lkKTsKKwkJCQkJdmRldi0+dnRhcmdldC0+dGZsYWdzIHw9CisJCQkJCSAgICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UOworCQkJCQlzZGV2LT5ub191bGRfYXR0YWNoID0gMTsKKwkJCQl9CisJCQkJbXV0ZXhfdW5sb2NrKCZoZC0+aW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CkBAIC0zMDgsOSArNDQ2LDcgQEAKIAlyZXR1cm4gLUVOWElPOwogCiAgb3V0OgotCXZ0YXJnZXQtPmlvY19pZCA9IHZkZXYtPmlvY19pZDsKLQl2dGFyZ2V0LT50YXJnZXRfaWQgPSB2ZGV2LT50YXJnZXRfaWQ7Ci0JdnRhcmdldC0+YnVzX2lkID0gdmRldi0+YnVzX2lkOworCXZ0YXJnZXQtPnRhcmdldF9pZCA9IHRhcmdldF9pZDsKIAl2dGFyZ2V0LT5udW1fbHVucysrOwogCXJldHVybiAwOwogfQpAQCAtMzIwLDQxICs0NTYsMTcgQEAKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gc2Rldi0+aG9zdDsKIAlNUFRfU0NTSV9IT1NUICpoZCA9IChNUFRfU0NTSV9IT1NUICopaG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IHNhc19ycGh5ICpycGh5OwotCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnA7Ci0JaW50IGk7CiAJVmlydERldmljZSAqdmRldjsKIAogCS8qCi0JICogSGFuZGxlIGhvdHBsdWcgcmVtb3ZhbCBjYXNlLgotCSAqIFdlIG5lZWQgdG8gY2xlYXIgb3V0IGF0dGFjaGVkIGRhdGEgc3RydWN0dXJlLgotCSAqLwotCXJwaHkgPSBkZXZfdG9fcnBoeShzZGV2LT5zZGV2X3RhcmdldC0+ZGV2LnBhcmVudCk7Ci0KLQltdXRleF9sb2NrKCZoZC0+aW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmhkLT5pb2MtPnNhc190b3BvbG9neSwgbGlzdCkgewotCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX3BoeXM7IGkrKykgewotCQkJaWYgKHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnNhc19hZGRyZXNzID09Ci0JCQkJCXJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKSB7Ci0JCQkJbWVtc2V0KCZwLT5waHlfaW5mb1tpXS5hdHRhY2hlZCwgMCwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOwotCQkJCXAtPnBoeV9pbmZvW2ldLnJwaHkgPSBOVUxMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JfQotCi0gb3V0OgotCW11dGV4X3VubG9jaygmaGQtPmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKLQkvKgogCSAqIElzc3VlIHRhcmdldCByZXNldCB0byBmbHVzaCBmaXJtd2FyZSBvdXRzdGFuZGluZyBjb21tYW5kcy4KIAkgKi8KIAl2ZGV2ID0gc2Rldi0+aG9zdGRhdGE7CiAJaWYgKHZkZXYtPmNvbmZpZ3VyZWRfbHVuKXsKIAkJaWYgKG1wdHNjc2loX1RNSGFuZGxlcihoZCwKIAkJICAgICBNUElfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1RBUkdFVF9SRVNFVCwKLQkJICAgICB2ZGV2LT5idXNfaWQsCi0JCSAgICAgdmRldi0+dGFyZ2V0X2lkLAorCQkgICAgIHZkZXYtPnZ0YXJnZXQtPmJ1c19pZCwKKwkJICAgICB2ZGV2LT52dGFyZ2V0LT50YXJnZXRfaWQsCiAJCSAgICAgMCwgMCwgNSAvKiA1IHNlY29uZCB0aW1lb3V0ICovKQogCQkgICAgIDwgMCl7CiAKQEAgLTM2NCw3ICs0NzYsNyBAQAogCQkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQKIAkJICAgICAgICJFcnJvciBwcm9jZXNzaW5nIFRhc2tNZ210IGlkPSVkIFRBUkdFVF9SRVNFVFxuIiwKIAkJCQloZC0+aW9jLT5uYW1lLAotCQkJCXZkZXYtPnRhcmdldF9pZCk7CisJCQkJdmRldi0+dnRhcmdldC0+dGFyZ2V0X2lkKTsKIAogCQkJaGQtPnRtUGVuZGluZyA9IDA7CiAJCQloZC0+dG1TdGF0ZSA9IFRNX1NUQVRFX05PTkU7CkBAIC0zODIsNyArNDk0LDcgQEAKIAkucXVldWVjb21tYW5kCQkJPSBtcHRzY3NpaF9xY21kLAogCS50YXJnZXRfYWxsb2MJCQk9IG1wdHNjc2loX3RhcmdldF9hbGxvYywKIAkuc2xhdmVfYWxsb2MJCQk9IG1wdHNhc19zbGF2ZV9hbGxvYywKLQkuc2xhdmVfY29uZmlndXJlCQk9IG1wdHNjc2loX3NsYXZlX2NvbmZpZ3VyZSwKKwkuc2xhdmVfY29uZmlndXJlCQk9IG1wdHNhc19zbGF2ZV9jb25maWd1cmUsCiAJLnRhcmdldF9kZXN0cm95CQkJPSBtcHRzY3NpaF90YXJnZXRfZGVzdHJveSwKIAkuc2xhdmVfZGVzdHJveQkJCT0gbXB0c2FzX3NsYXZlX2Rlc3Ryb3ksCiAJLmNoYW5nZV9xdWV1ZV9kZXB0aCAJCT0gbXB0c2NzaWhfY2hhbmdlX3F1ZXVlX2RlcHRoLApAQCAtMzk5LDEyICs1MTEsNiBAQAogCS51c2VfY2x1c3RlcmluZwkJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiB9OwogCi1zdGF0aWMgaW5saW5lIE1QVF9BREFQVEVSICpwaHlfdG9faW9jKHN0cnVjdCBzYXNfcGh5ICpwaHkpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QocGh5LT5kZXYucGFyZW50KTsKLQlyZXR1cm4gKChNUFRfU0NTSV9IT1NUICopc2hvc3QtPmhvc3RkYXRhKS0+aW9jOwotfQotCiBzdGF0aWMgaW50IG1wdHNhc19nZXRfbGlua2Vycm9ycyhzdHJ1Y3Qgc2FzX3BoeSAqcGh5KQogewogCU1QVF9BREFQVEVSICppb2MgPSBwaHlfdG9faW9jKHBoeSk7CkBAIC01NDYsOCArNjUyLDY3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50CittcHRzYXNfZ2V0X2VuY2xvc3VyZV9pZGVudGlmaWVyKHN0cnVjdCBzYXNfcnBoeSAqcnBoeSwgdTY0ICppZGVudGlmaWVyKQoreworCU1QVF9BREFQVEVSICppb2MgPSBycGh5X3RvX2lvYyhycGh5KTsKKwlpbnQgaSwgZXJyb3I7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcDsKKwlzdHJ1Y3QgbXB0c2FzX2VuY2xvc3VyZSBlbmNsb3N1cmVfaW5mbzsKKwl1NjQgZW5jbG9zdXJlX2hhbmRsZTsKKworCW11dGV4X2xvY2soJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZpb2MtPnNhc190b3BvbG9neSwgbGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX3BoeXM7IGkrKykgeworCQkJaWYgKHAtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnNhc19hZGRyZXNzID09CisJCQkgICAgcnBoeS0+aWRlbnRpZnkuc2FzX2FkZHJlc3MpIHsKKwkJCQllbmNsb3N1cmVfaGFuZGxlID0gcC0+cGh5X2luZm9baV0uCisJCQkJCWF0dGFjaGVkLmhhbmRsZV9lbmNsb3N1cmU7CisJCQkJZ290byBmb3VuZF9pbmZvOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworCXJldHVybiAtRU5YSU87CisKKyBmb3VuZF9pbmZvOgorCW11dGV4X3VubG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworCW1lbXNldCgmZW5jbG9zdXJlX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgbXB0c2FzX2VuY2xvc3VyZSkpOworCWVycm9yID0gbXB0c2FzX3Nhc19lbmNsb3N1cmVfcGcwKGlvYywgJmVuY2xvc3VyZV9pbmZvLAorCQkJKE1QSV9TQVNfRU5DTE9TX1BHQURfRk9STV9IQU5ETEUgPDwKKwkJCSBNUElfU0FTX0VOQ0xPU19QR0FEX0ZPUk1fU0hJRlQpLCBlbmNsb3N1cmVfaGFuZGxlKTsKKwlpZiAoIWVycm9yKQorCQkqaWRlbnRpZmllciA9IGVuY2xvc3VyZV9pbmZvLmVuY2xvc3VyZV9sb2dpY2FsX2lkOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludAorbXB0c2FzX2dldF9iYXlfaWRlbnRpZmllcihzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkpCit7CisJTVBUX0FEQVBURVIgKmlvYyA9IHJwaHlfdG9faW9jKHJwaHkpOworCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnA7CisJaW50IGksIHJjOworCisJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmlvYy0+c2FzX3RvcG9sb2d5LCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fcGh5czsgaSsrKSB7CisJCQlpZiAocC0+cGh5X2luZm9baV0uYXR0YWNoZWQuc2FzX2FkZHJlc3MgPT0KKwkJCSAgICBycGh5LT5pZGVudGlmeS5zYXNfYWRkcmVzcykgeworCQkJCXJjID0gcC0+cGh5X2luZm9baV0uYXR0YWNoZWQuc2xvdDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCX0KKwlyYyA9IC1FTlhJTzsKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSBtcHRzYXNfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKIAkuZ2V0X2xpbmtlcnJvcnMJCT0gbXB0c2FzX2dldF9saW5rZXJyb3JzLAorCS5nZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIgPSBtcHRzYXNfZ2V0X2VuY2xvc3VyZV9pZGVudGlmaWVyLAorCS5nZXRfYmF5X2lkZW50aWZpZXIJPSBtcHRzYXNfZ2V0X2JheV9pZGVudGlmaWVyLAogCS5waHlfcmVzZXQJCT0gbXB0c2FzX3BoeV9yZXNldCwKIH07CiAKQEAgLTYwNyw2ICs3NzIsOSBAQAogCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CiAJfQogCisJaWYgKHBvcnRfaW5mby0+bnVtX3BoeXMpCisJCXBvcnRfaW5mby0+aGFuZGxlID0KKwkJICAgIGxlMTZfdG9fY3B1KGJ1ZmZlci0+UGh5RGF0YVswXS5Db250cm9sbGVyRGV2SGFuZGxlKTsKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydF9pbmZvLT5udW1fcGh5czsgaSsrKSB7CiAJCW1wdHNhc19wcmludF9waHlfZGF0YSgmYnVmZmVyLT5QaHlEYXRhW2ldKTsKIAkJcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5waHlfaWQgPSBpOwpAQCAtNzEzLDYgKzg4MSw3IEBACiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KIAljZmcudGltZW91dCA9IDEwOwogCisJbWVtc2V0KGRldmljZV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1wdHNhc19kZXZpbmZvKSk7CiAJZXJyb3IgPSBtcHRfY29uZmlnKGlvYywgJmNmZyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKQEAgLTczOSw2ICs5MDgsOSBAQAogCiAJZGV2aWNlX2luZm8tPmhhbmRsZSA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+RGV2SGFuZGxlKTsKIAlkZXZpY2VfaW5mby0+aGFuZGxlX3BhcmVudCA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+UGFyZW50RGV2SGFuZGxlKTsKKwlkZXZpY2VfaW5mby0+aGFuZGxlX2VuY2xvc3VyZSA9CisJICAgIGxlMTZfdG9fY3B1KGJ1ZmZlci0+RW5jbG9zdXJlSGFuZGxlKTsKKwlkZXZpY2VfaW5mby0+c2xvdCA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+U2xvdCk7CiAJZGV2aWNlX2luZm8tPnBoeV9pZCA9IGJ1ZmZlci0+UGh5TnVtOwogCWRldmljZV9pbmZvLT5wb3J0X2lkID0gYnVmZmVyLT5QaHlzaWNhbFBvcnQ7CiAJZGV2aWNlX2luZm8tPmlkID0gYnVmZmVyLT5UYXJnZXRJRDsKQEAgLTc4MCw2ICs5NTIsNyBAQAogCWNmZy5kaXIgPSAwOwkvKiByZWFkICovCiAJY2ZnLnRpbWVvdXQgPSAxMDsKIAorCW1lbXNldChwb3J0X2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvKSk7CiAJZXJyb3IgPSBtcHRfY29uZmlnKGlvYywgJmNmZyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKQEAgLTg4MCw3ICsxMDUzLDYgQEAKIAlwaHlfaW5mby0+aWRlbnRpZnkuaGFuZGxlID0gbGUxNl90b19jcHUoYnVmZmVyLT5Pd25lckRldkhhbmRsZSk7CiAJcGh5X2luZm8tPmF0dGFjaGVkLmhhbmRsZSA9IGxlMTZfdG9fY3B1KGJ1ZmZlci0+QXR0YWNoZWREZXZIYW5kbGUpOwogCi0KICBvdXRfZnJlZV9jb25zaXN0ZW50OgogCXBjaV9mcmVlX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsIGhkci5FeHRQYWdlTGVuZ3RoICogNCwKIAkJCSAgICBidWZmZXIsIGRtYV9oYW5kbGUpOwpAQCAtOTcwLDEyICsxMTQyLDE5IEBACiBzdGF0aWMgaW50IG1wdHNhc19wcm9iZV9vbmVfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IG1wdHNhc19waHlpbmZvICpwaHlfaW5mbywgaW50IGluZGV4LCBpbnQgbG9jYWwpCiB7CisJTVBUX0FEQVBURVIgKmlvYzsKIAlzdHJ1Y3Qgc2FzX3BoeSAqcGh5OwogCWludCBlcnJvcjsKIAotCXBoeSA9IHNhc19waHlfYWxsb2MoZGV2LCBpbmRleCk7Ci0JaWYgKCFwaHkpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcGh5X2luZm8tPnBoeSkgeworCQlwaHkgPSBzYXNfcGh5X2FsbG9jKGRldiwgaW5kZXgpOworCQlpZiAoIXBoeSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0gZWxzZQorCQlwaHkgPSBwaHlfaW5mby0+cGh5OwogCiAJcGh5LT5wb3J0X2lkZW50aWZpZXIgPSBwaHlfaW5mby0+cG9ydF9pZDsKIAltcHRzYXNfcGFyc2VfZGV2aWNlX2luZm8oJnBoeS0+aWRlbnRpZnksICZwaHlfaW5mby0+aWRlbnRpZnkpOwpAQCAtMTA2MSwyNCArMTI0MCw1NCBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAobG9jYWwpCi0JCXBoeS0+bG9jYWxfYXR0YWNoZWQgPSAxOworCWlmICghcGh5X2luZm8tPnBoeSkgewogCi0JZXJyb3IgPSBzYXNfcGh5X2FkZChwaHkpOwotCWlmIChlcnJvcikgewotCQlzYXNfcGh5X2ZyZWUocGh5KTsKLQkJcmV0dXJuIGVycm9yOworCQlpZiAobG9jYWwpCisJCQlwaHktPmxvY2FsX2F0dGFjaGVkID0gMTsKKworCQllcnJvciA9IHNhc19waHlfYWRkKHBoeSk7CisJCWlmIChlcnJvcikgeworCQkJc2FzX3BoeV9mcmVlKHBoeSk7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwkJcGh5X2luZm8tPnBoeSA9IHBoeTsKIAl9Ci0JcGh5X2luZm8tPnBoeSA9IHBoeTsKIAotCWlmIChwaHlfaW5mby0+YXR0YWNoZWQuaGFuZGxlKSB7CisJaWYgKChwaHlfaW5mby0+YXR0YWNoZWQuaGFuZGxlKSAmJgorCSAgICAoIXBoeV9pbmZvLT5ycGh5KSkgeworCiAJCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKKwkJc3RydWN0IHNhc19pZGVudGlmeSBpZGVudGlmeTsKIAotCQlycGh5ID0gc2FzX3JwaHlfYWxsb2MocGh5KTsKKwkJaW9jID0gcGh5X3RvX2lvYyhwaHlfaW5mby0+cGh5KTsKKworCQkvKgorCQkgKiBMZXQgdGhlIGhvdHBsdWdfd29yayB0aHJlYWQgaGFuZGxlIHByb2Nlc3NpbmcKKwkJICogdGhlIGFkZGluZy9yZW1vdmluZyBvZiBkZXZpY2VzIHRoYXQgb2NjdXIKKwkJICogYWZ0ZXIgc3RhcnQgb2YgZGF5LgorCQkgKi8KKwkJaWYgKGlvYy0+c2FzX2Rpc2NvdmVyeV9ydW50aW1lICYmCisJCQltcHRzYXNfaXNfZW5kX2RldmljZSgmcGh5X2luZm8tPmF0dGFjaGVkKSkKKwkJCXJldHVybiAwOworCisJCW1wdHNhc19wYXJzZV9kZXZpY2VfaW5mbygmaWRlbnRpZnksICZwaHlfaW5mby0+YXR0YWNoZWQpOworCQlzd2l0Y2ggKGlkZW50aWZ5LmRldmljZV90eXBlKSB7CisJCWNhc2UgU0FTX0VORF9ERVZJQ0U6CisJCQlycGh5ID0gc2FzX2VuZF9kZXZpY2VfYWxsb2MocGh5KTsKKwkJCWJyZWFrOworCQljYXNlIFNBU19FREdFX0VYUEFOREVSX0RFVklDRToKKwkJY2FzZSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRToKKwkJCXJwaHkgPSBzYXNfZXhwYW5kZXJfYWxsb2MocGh5LCBpZGVudGlmeS5kZXZpY2VfdHlwZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJwaHkgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KIAkJaWYgKCFycGh5KQogCQkJcmV0dXJuIDA7IC8qIG5vbi1mYXRhbDogYW4gcnBoeSBjYW4gYmUgYWRkZWQgbGF0ZXIgKi8KIAotCQltcHRzYXNfcGFyc2VfZGV2aWNlX2luZm8oJnJwaHktPmlkZW50aWZ5LCAmcGh5X2luZm8tPmF0dGFjaGVkKTsKKwkJcnBoeS0+aWRlbnRpZnkgPSBpZGVudGlmeTsKKwogCQllcnJvciA9IHNhc19ycGh5X2FkZChycGh5KTsKIAkJaWYgKGVycm9yKSB7CiAJCQlzYXNfcnBoeV9mcmVlKHJwaHkpOwpAQCAtMTA5MiwyNCArMTMwMSwzNyBAQAogfQogCiBzdGF0aWMgaW50Ci1tcHRzYXNfcHJvYmVfaGJhX3BoeXMoTVBUX0FEQVBURVIgKmlvYywgaW50ICppbmRleCkKK21wdHNhc19wcm9iZV9oYmFfcGh5cyhNUFRfQURBUFRFUiAqaW9jKQogewotCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbzsKKwlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwb3J0X2luZm8sICpoYmE7CiAJdTMyIGhhbmRsZSA9IDB4RkZGRjsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNLCBpOwogCi0JcG9ydF9pbmZvID0ga3phbGxvYyhzaXplb2YoKnBvcnRfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghcG9ydF9pbmZvKQorCWhiYSA9IGt6YWxsb2Moc2l6ZW9mKCpwb3J0X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoISBoYmEpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSBtcHRzYXNfc2FzX2lvX3VuaXRfcGcwKGlvYywgcG9ydF9pbmZvKTsKKwllcnJvciA9IG1wdHNhc19zYXNfaW9fdW5pdF9wZzAoaW9jLCBoYmEpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnJlZV9wb3J0X2luZm87CiAKLQlpb2MtPm51bV9wb3J0cyA9IHBvcnRfaW5mby0+bnVtX3BoeXM7CiAJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwotCWxpc3RfYWRkX3RhaWwoJnBvcnRfaW5mby0+bGlzdCwgJmlvYy0+c2FzX3RvcG9sb2d5KTsKKwlwb3J0X2luZm8gPSBtcHRzYXNfZmluZF9wb3J0aW5mb19ieV9oYW5kbGUoaW9jLCBoYmEtPmhhbmRsZSk7CisJaWYgKCFwb3J0X2luZm8pIHsKKwkJcG9ydF9pbmZvID0gaGJhOworCQlsaXN0X2FkZF90YWlsKCZwb3J0X2luZm8tPmxpc3QsICZpb2MtPnNhc190b3BvbG9neSk7CisJfSBlbHNlIHsKKwkJcG9ydF9pbmZvLT5oYW5kbGUgPSBoYmEtPmhhbmRsZTsKKwkJZm9yIChpID0gMDsgaSA8IGhiYS0+bnVtX3BoeXM7IGkrKykKKwkJCXBvcnRfaW5mby0+cGh5X2luZm9baV0ubmVnb3RpYXRlZF9saW5rX3JhdGUgPQorCQkJCWhiYS0+cGh5X2luZm9baV0ubmVnb3RpYXRlZF9saW5rX3JhdGU7CisJCWlmIChoYmEtPnBoeV9pbmZvKQorCQkJa2ZyZWUoaGJhLT5waHlfaW5mbyk7CisJCWtmcmVlKGhiYSk7CisJCWhiYSA9IE5VTEw7CisJfQogCW11dGV4X3VubG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworCWlvYy0+bnVtX3BvcnRzID0gcG9ydF9pbmZvLT5udW1fcGh5czsKIAogCWZvciAoaSA9IDA7IGkgPCBwb3J0X2luZm8tPm51bV9waHlzOyBpKyspIHsKIAkJbXB0c2FzX3Nhc19waHlfcGcwKGlvYywgJnBvcnRfaW5mby0+cGh5X2luZm9baV0sCkBAIC0xMTMyLDM4ICsxMzU0LDQ5IEBACiAJCX0KIAogCQltcHRzYXNfcHJvYmVfb25lX3BoeSgmaW9jLT5zaC0+c2hvc3RfZ2VuZGV2LAotCQkJCSAgICAgJnBvcnRfaW5mby0+cGh5X2luZm9baV0sICppbmRleCwgMSk7Ci0JCSgqaW5kZXgpKys7CisJCSAgICAmcG9ydF9pbmZvLT5waHlfaW5mb1tpXSwgaW9jLT5zYXNfaW5kZXgsIDEpOworCQlpb2MtPnNhc19pbmRleCsrOwogCX0KIAogCXJldHVybiAwOwogCiAgb3V0X2ZyZWVfcG9ydF9pbmZvOgotCWtmcmVlKHBvcnRfaW5mbyk7CisJaWYgKGhiYSkKKwkJa2ZyZWUoaGJhKTsKICBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50Ci1tcHRzYXNfcHJvYmVfZXhwYW5kZXJfcGh5cyhNUFRfQURBUFRFUiAqaW9jLCB1MzIgKmhhbmRsZSwgaW50ICppbmRleCkKK21wdHNhc19wcm9iZV9leHBhbmRlcl9waHlzKE1QVF9BREFQVEVSICppb2MsIHUzMiAqaGFuZGxlKQogewotCXN0cnVjdCBtcHRzYXNfcG9ydGluZm8gKnBvcnRfaW5mbywgKnA7CisJc3RydWN0IG1wdHNhc19wb3J0aW5mbyAqcG9ydF9pbmZvLCAqcCwgKmV4OwogCWludCBlcnJvciA9IC1FTk9NRU0sIGksIGo7CiAKLQlwb3J0X2luZm8gPSBremFsbG9jKHNpemVvZigqcG9ydF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwb3J0X2luZm8pCisJZXggPSBremFsbG9jKHNpemVvZigqcG9ydF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFleCkKIAkJZ290byBvdXQ7CiAKLQllcnJvciA9IG1wdHNhc19zYXNfZXhwYW5kZXJfcGcwKGlvYywgcG9ydF9pbmZvLAorCWVycm9yID0gbXB0c2FzX3Nhc19leHBhbmRlcl9wZzAoaW9jLCBleCwKIAkJKE1QSV9TQVNfRVhQQU5EX1BHQURfRk9STV9HRVRfTkVYVF9IQU5ETEUgPDwKIAkJIE1QSV9TQVNfRVhQQU5EX1BHQURfRk9STV9TSElGVCksICpoYW5kbGUpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnJlZV9wb3J0X2luZm87CiAKLQkqaGFuZGxlID0gcG9ydF9pbmZvLT5oYW5kbGU7CisJKmhhbmRsZSA9IGV4LT5oYW5kbGU7CiAKIAltdXRleF9sb2NrKCZpb2MtPnNhc190b3BvbG9neV9tdXRleCk7Ci0JbGlzdF9hZGRfdGFpbCgmcG9ydF9pbmZvLT5saXN0LCAmaW9jLT5zYXNfdG9wb2xvZ3kpOworCXBvcnRfaW5mbyA9IG1wdHNhc19maW5kX3BvcnRpbmZvX2J5X2hhbmRsZShpb2MsICpoYW5kbGUpOworCWlmICghcG9ydF9pbmZvKSB7CisJCXBvcnRfaW5mbyA9IGV4OworCQlsaXN0X2FkZF90YWlsKCZwb3J0X2luZm8tPmxpc3QsICZpb2MtPnNhc190b3BvbG9neSk7CisJfSBlbHNlIHsKKwkJcG9ydF9pbmZvLT5oYW5kbGUgPSBleC0+aGFuZGxlOworCQlpZiAoZXgtPnBoeV9pbmZvKQorCQkJa2ZyZWUoZXgtPnBoeV9pbmZvKTsKKwkJa2ZyZWUoZXgpOworCQlleCA9IE5VTEw7CisJfQogCW11dGV4X3VubG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwogCiAJZm9yIChpID0gMDsgaSA8IHBvcnRfaW5mby0+bnVtX3BoeXM7IGkrKykgewpAQCAtMTE4OSw2ICsxNDIyLDggQEAKIAkJCQkoTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSA8PAogCQkJCSBNUElfU0FTX0RFVklDRV9QR0FEX0ZPUk1fU0hJRlQpLAogCQkJCXBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQuaGFuZGxlKTsKKwkJCXBvcnRfaW5mby0+cGh5X2luZm9baV0uYXR0YWNoZWQucGh5X2lkID0KKwkJCSAgICBwb3J0X2luZm8tPnBoeV9pbmZvW2ldLnBoeV9pZDsKIAkJfQogCiAJCS8qCkBAIC0xMjA4LDI3ICsxNDQzLDEzNyBAQAogCQltdXRleF91bmxvY2soJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKIAogCQltcHRzYXNfcHJvYmVfb25lX3BoeShwYXJlbnQsICZwb3J0X2luZm8tPnBoeV9pbmZvW2ldLAotCQkJCSAgICAgKmluZGV4LCAwKTsKLQkJKCppbmRleCkrKzsKKwkJICAgIGlvYy0+c2FzX2luZGV4LCAwKTsKKwkJaW9jLT5zYXNfaW5kZXgrKzsKIAl9CiAKIAlyZXR1cm4gMDsKIAogIG91dF9mcmVlX3BvcnRfaW5mbzoKLQlrZnJlZShwb3J0X2luZm8pOworCWlmIChleCkgeworCQlpZiAoZXgtPnBoeV9pbmZvKQorCQkJa2ZyZWUoZXgtPnBoeV9pbmZvKTsKKwkJa2ZyZWUoZXgpOworCX0KICBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCisvKgorICogbXB0c2FzX2RlbGV0ZV9leHBhbmRlcl9waHlzCisgKgorICoKKyAqIFRoaXMgd2lsbCB0cmF2ZXJzZSB0b3BvbG9neSwgYW5kIHJlbW92ZSBleHBhbmRlcnMKKyAqIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50CisgKi8KK3N0YXRpYyB2b2lkCittcHRzYXNfZGVsZXRlX2V4cGFuZGVyX3BoeXMoTVBUX0FEQVBURVIgKmlvYykKK3sKKwlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvIGJ1ZmZlcjsKKwlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwb3J0X2luZm8sICpuLCAqcGFyZW50OworCWludCBpOworCisJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0X2luZm8sIG4sICZpb2MtPnNhc190b3BvbG9neSwgbGlzdCkgeworCisJCWlmIChwb3J0X2luZm8tPnBoeV9pbmZvICYmCisJCSAgICAoIShwb3J0X2luZm8tPnBoeV9pbmZvWzBdLmlkZW50aWZ5LmRldmljZV9pbmZvICYKKwkJICAgIE1QSV9TQVNfREVWSUNFX0lORk9fU01QX1RBUkdFVCkpKQorCQkJY29udGludWU7CisKKwkJaWYgKG1wdHNhc19zYXNfZXhwYW5kZXJfcGcwKGlvYywgJmJ1ZmZlciwKKwkJICAgICAoTVBJX1NBU19FWFBBTkRfUEdBRF9GT1JNX0hBTkRMRSA8PAorCQkgICAgIE1QSV9TQVNfRVhQQU5EX1BHQURfRk9STV9TSElGVCksIHBvcnRfaW5mby0+aGFuZGxlKSkgeworCisJCQkvKgorCQkJICogT2J0YWluIHRoZSBwb3J0X2luZm8gaW5zdGFuY2UgdG8gdGhlIHBhcmVudCBwb3J0CisJCQkgKi8KKwkJCXBhcmVudCA9IG1wdHNhc19maW5kX3BvcnRpbmZvX2J5X2hhbmRsZShpb2MsCisJCQkgICAgcG9ydF9pbmZvLT5waHlfaW5mb1swXS5pZGVudGlmeS5oYW5kbGVfcGFyZW50KTsKKworCQkJaWYgKCFwYXJlbnQpCisJCQkJZ290byBuZXh0X3BvcnQ7CisKKwkJCS8qCisJCQkgKiBEZWxldGUgcnBoeXMgaW4gdGhlIHBhcmVudCB0aGF0IHBvaW50CisJCQkgKiB0byB0aGlzIGV4cGFuZGVyLiAgVGhlIHRyYW5zcG9ydCBsYXllciB3aWxsCisJCQkgKiBjbGVhbnVwIGFsbCB0aGUgY2hpbGRyZW4uCisJCQkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBwYXJlbnQtPm51bV9waHlzOyBpKyspIHsKKwkJCQlpZiAoKCFwYXJlbnQtPnBoeV9pbmZvW2ldLnJwaHkpIHx8CisJCQkJICAgIChwYXJlbnQtPnBoeV9pbmZvW2ldLmF0dGFjaGVkLnNhc19hZGRyZXNzICE9CisJCQkJICAgcG9ydF9pbmZvLT5waHlfaW5mb1tpXS5pZGVudGlmeS5zYXNfYWRkcmVzcykpCisJCQkJCWNvbnRpbnVlOworCQkJCXNhc19ycGh5X2RlbGV0ZShwYXJlbnQtPnBoeV9pbmZvW2ldLnJwaHkpOworCQkJCW1lbXNldCgmcGFyZW50LT5waHlfaW5mb1tpXS5hdHRhY2hlZCwgMCwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOworCQkJCXBhcmVudC0+cGh5X2luZm9baV0ucnBoeSA9IE5VTEw7CisJCQkJcGFyZW50LT5waHlfaW5mb1tpXS5zdGFyZ2V0ID0gTlVMTDsKKwkJCX0KKyBuZXh0X3BvcnQ6CisJCQlsaXN0X2RlbCgmcG9ydF9pbmZvLT5saXN0KTsKKwkJCWlmIChwb3J0X2luZm8tPnBoeV9pbmZvKQorCQkJCWtmcmVlKHBvcnRfaW5mby0+cGh5X2luZm8pOworCQkJa2ZyZWUocG9ydF9pbmZvKTsKKwkJfQorCQkvKgorCQkqIEZyZWUgdGhpcyBtZW1vcnkgYWxsb2NhdGVkIGZyb20gaW5zaWRlCisJCSogbXB0c2FzX3Nhc19leHBhbmRlcl9wZzAKKwkJKi8KKwkJaWYgKGJ1ZmZlci5waHlfaW5mbykKKwkJCWtmcmVlKGJ1ZmZlci5waHlfaW5mbyk7CisJfQorCW11dGV4X3VubG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOworfQorCisvKgorICogU3RhcnQgb2YgZGF5IGRpc2NvdmVyeQorICovCiBzdGF0aWMgdm9pZAogbXB0c2FzX3NjYW5fc2FzX3RvcG9sb2d5KE1QVF9BREFQVEVSICppb2MpCiB7CiAJdTMyIGhhbmRsZSA9IDB4RkZGRjsKLQlpbnQgaW5kZXggPSAwOworCWludCBpOwogCi0JbXB0c2FzX3Byb2JlX2hiYV9waHlzKGlvYywgJmluZGV4KTsKLQl3aGlsZSAoIW1wdHNhc19wcm9iZV9leHBhbmRlcl9waHlzKGlvYywgJmhhbmRsZSwgJmluZGV4KSkKKwltdXRleF9sb2NrKCZpb2MtPnNhc19kaXNjb3ZlcnlfbXV0ZXgpOworCW1wdHNhc19wcm9iZV9oYmFfcGh5cyhpb2MpOworCXdoaWxlICghbXB0c2FzX3Byb2JlX2V4cGFuZGVyX3BoeXMoaW9jLCAmaGFuZGxlKSkKIAkJOworCS8qCisJICBSZXBvcnRpbmcgUkFJRCB2b2x1bWVzLgorCSovCisJaWYgKCFpb2MtPnJhaWRfZGF0YS5wSW9jUGcyKQorCQlnb3RvIG91dDsKKwlpZiAoIWlvYy0+cmFpZF9kYXRhLnBJb2NQZzItPk51bUFjdGl2ZVZvbHVtZXMpCisJCWdvdG8gb3V0OworCWZvciAoaT0wOyBpPGlvYy0+cmFpZF9kYXRhLnBJb2NQZzItPk51bUFjdGl2ZVZvbHVtZXM7IGkrKykgeworCQlzY3NpX2FkZF9kZXZpY2UoaW9jLT5zaCwgaW9jLT5udW1fcG9ydHMsCisJCSAgICBpb2MtPnJhaWRfZGF0YS5wSW9jUGcyLT5SYWlkVm9sdW1lW2ldLlZvbHVtZUlELCAwKTsKKwl9Cisgb3V0OgorCW11dGV4X3VubG9jaygmaW9jLT5zYXNfZGlzY292ZXJ5X211dGV4KTsKK30KKworLyoKKyAqIFdvcmsgcXVldWUgdGhyZWFkIHRvIGhhbmRsZSBSdW50aW1lIGRpc2NvdmVyeQorICogTWVyZSBwdXJwb3NlIGlzIHRoZSBob3QgYWRkL2RlbGV0ZSBvZiBleHBhbmRlcnMKKyAqLworc3RhdGljIHZvaWQKK21wdHNjc2loX2Rpc2NvdmVyeV93b3JrKHZvaWQgKiBhcmcpCit7CisJc3RydWN0IG1wdHNhc19kaXNjb3ZlcnlfZXZlbnQgKmV2ID0gYXJnOworCU1QVF9BREFQVEVSICppb2MgPSBldi0+aW9jOworCXUzMiBoYW5kbGUgPSAweEZGRkY7CisKKwltdXRleF9sb2NrKCZpb2MtPnNhc19kaXNjb3ZlcnlfbXV0ZXgpOworCWlvYy0+c2FzX2Rpc2NvdmVyeV9ydW50aW1lPTE7CisJbXB0c2FzX2RlbGV0ZV9leHBhbmRlcl9waHlzKGlvYyk7CisJbXB0c2FzX3Byb2JlX2hiYV9waHlzKGlvYyk7CisJd2hpbGUgKCFtcHRzYXNfcHJvYmVfZXhwYW5kZXJfcGh5cyhpb2MsICZoYW5kbGUpKQorCQk7CisJa2ZyZWUoZXYpOworCWlvYy0+c2FzX2Rpc2NvdmVyeV9ydW50aW1lPTA7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPnNhc19kaXNjb3ZlcnlfbXV0ZXgpOwogfQogCiBzdGF0aWMgc3RydWN0IG1wdHNhc19waHlpbmZvICoKQEAgLTEyNDYsMTAgKzE1OTEsOCBAQAogCQkoTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0hBTkRMRSA8PAogCQkgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwKIAkJcGFyZW50X2hhbmRsZSk7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50aygibXB0c2FzOiBmYWlsZWQgdG8gcmV0cmlldmUgZGV2aWNlIHBhZ2VcbiIpOworCWlmIChlcnJvcikKIAkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJLyoKIAkgKiBUaGUgcGh5X2luZm8gc3RydWN0dXJlcyBhcmUgbmV2ZXIgZGVhbGxvY2F0ZWQgZHVyaW5nIGxpZmV0aW1lIG9mCkBAIC0xMjk2LDYgKzE2MzksMzUgQEAKIAlyZXR1cm4gcGh5X2luZm87CiB9CiAKKy8qCisgKiBXb3JrIHF1ZXVlIHRocmVhZCB0byBjbGVhciB0aGUgcGVyc2l0ZW5jeSB0YWJsZQorICovCitzdGF0aWMgdm9pZAorbXB0c2NzaWhfc2FzX3BlcnNpc3RfY2xlYXJfdGFibGUodm9pZCAqIGFyZykKK3sKKwlNUFRfQURBUFRFUiAqaW9jID0gKE1QVF9BREFQVEVSICopYXJnOworCisJbXB0YmFzZV9zYXNfcGVyc2lzdF9vcGVyYXRpb24oaW9jLCBNUElfU0FTX09QX0NMRUFSX05PVF9QUkVTRU5UKTsKK30KKworc3RhdGljIHZvaWQKK21wdHNhc19yZXByb2JlX2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHZvaWQgKmRhdGEpCit7CisJc2Rldi0+bm9fdWxkX2F0dGFjaCA9IGRhdGEgPyAxIDogMDsKKwlzY3NpX2RldmljZV9yZXByb2JlKHNkZXYpOworfQorCitzdGF0aWMgdm9pZAorbXB0c2FzX3JlcHJvYmVfdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCwgaW50IHVsZF9hdHRhY2gpCit7CisJc3RhcmdldF9mb3JfZWFjaF9kZXZpY2Uoc3RhcmdldCwgdWxkX2F0dGFjaCA/ICh2b2lkICopMSA6IE5VTEwsCisJCQltcHRzYXNfcmVwcm9iZV9sdW4pOworfQorCisKKy8qCisgKiBXb3JrIHF1ZXVlIHRocmVhZCB0byBoYW5kbGUgU0FTIGhvdHBsdWcgZXZlbnRzCisgKi8KIHN0YXRpYyB2b2lkCiBtcHRzYXNfaG90cGx1Z193b3JrKHZvaWQgKmFyZykKIHsKQEAgLTEzMDQsMTYgKzE2NzYsMzkgQEAKIAlzdHJ1Y3QgbXB0c2FzX3BoeWluZm8gKnBoeV9pbmZvOwogCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IHNhc19pZGVudGlmeSBpZGVudGlmeTsKIAljaGFyICpkcyA9IE5VTEw7CiAJc3RydWN0IG1wdHNhc19kZXZpbmZvIHNhc19kZXZpY2U7CisJVmlydFRhcmdldCAqdnRhcmdldDsKKworCW11dGV4X2xvY2soJmlvYy0+c2FzX2Rpc2NvdmVyeV9tdXRleCk7CiAKIAlzd2l0Y2ggKGV2LT5ldmVudF90eXBlKSB7CiAJY2FzZSBNUFRTQVNfREVMX0RFVklDRToKIAogCQlwaHlfaW5mbyA9IG1wdHNhc19maW5kX3BoeWluZm9fYnlfdGFyZ2V0KGlvYywgZXYtPmlkKTsKLQkJaWYgKCFwaHlfaW5mbykgewotCQkJcHJpbnRrKCJtcHRzYXM6IHJlbW92ZSBldmVudCBmb3Igbm9uLWV4aXN0YW50IFBIWS5cbiIpOworCisJCS8qCisJCSAqIFNhbml0eSBjaGVja3MsIGZvciBub24tZXhpc3RpbmcgcGh5cyBhbmQgcmVtb3RlIHJwaHlzLgorCQkgKi8KKwkJaWYgKCFwaHlfaW5mbykKIAkJCWJyZWFrOworCQlpZiAoIXBoeV9pbmZvLT5ycGh5KQorCQkJYnJlYWs7CisJCWlmIChwaHlfaW5mby0+c3RhcmdldCkgeworCQkJdnRhcmdldCA9IHBoeV9pbmZvLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKworCQkJaWYgKCF2dGFyZ2V0KQorCQkJCWJyZWFrOworCQkJLyoKKwkJCSAqIEhhbmRsaW5nICBSQUlEIGNvbXBvbmVudHMKKwkJCSAqLworCQkJaWYgKGV2LT5waHlzX2Rpc2tfbnVtX3ZhbGlkKSB7CisJCQkJdnRhcmdldC0+dGFyZ2V0X2lkID0gZXYtPnBoeXNfZGlza19udW07CisJCQkJdnRhcmdldC0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7CisJCQkJbXB0c2FzX3JlcHJvYmVfdGFyZ2V0KHZ0YXJnZXQtPnN0YXJnZXQsIDEpOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAKIAkJaWYgKHBoeV9pbmZvLT5hdHRhY2hlZC5kZXZpY2VfaW5mbyAmIE1QSV9TQVNfREVWSUNFX0lORk9fU1NQX1RBUkdFVCkKQEAgLTEzMjcsNTUgKzE3MjIsNzQgQEAKIAkJICAgICAgICJyZW1vdmluZyAlcyBkZXZpY2UsIGNoYW5uZWwgJWQsIGlkICVkLCBwaHkgJWRcbiIsCiAJCSAgICAgICBpb2MtPm5hbWUsIGRzLCBldi0+Y2hhbm5lbCwgZXYtPmlkLCBwaHlfaW5mby0+cGh5X2lkKTsKIAotCQlpZiAocGh5X2luZm8tPnJwaHkpIHsKLQkJCXNhc19ycGh5X2RlbGV0ZShwaHlfaW5mby0+cnBoeSk7Ci0JCQlwaHlfaW5mby0+cnBoeSA9IE5VTEw7Ci0JCX0KKwkJc2FzX3JwaHlfZGVsZXRlKHBoeV9pbmZvLT5ycGh5KTsKKwkJbWVtc2V0KCZwaHlfaW5mby0+YXR0YWNoZWQsIDAsIHNpemVvZihzdHJ1Y3QgbXB0c2FzX2RldmluZm8pKTsKKwkJcGh5X2luZm8tPnJwaHkgPSBOVUxMOworCQlwaHlfaW5mby0+c3RhcmdldCA9IE5VTEw7CiAJCWJyZWFrOwogCWNhc2UgTVBUU0FTX0FERF9ERVZJQ0U6CiAKIAkJLyoKLQkJICogV2hlbiB0aGVyZSBpcyBubyBzYXMgYWRkcmVzcywKLQkJICogUkFJRCB2b2x1bWVzIGFyZSBiZWluZyBkZWxldGVkLAotCQkgKiBhbmQgaGlkZGVuIHBoeSBkaXNrIGFyZSBiZWluZyBhZGRlZC4KLQkJICogV2UgZG9uJ3Qga25vdyB0aGUgU0FTIGRhdGEgeWV0LAotCQkgKiBzbyBsb29rdXAgc2FzIGRldmljZSBwYWdlIHRvIGdldAotCQkgKiBwZXJ0YWluaW5nIGluZm8KKwkJICogUmVmcmVzaCBzYXMgZGV2aWNlIHBnMCBkYXRhCiAJCSAqLwotCQlpZiAoIWV2LT5zYXNfYWRkcmVzcykgewotCQkJaWYgKG1wdHNhc19zYXNfZGV2aWNlX3BnMChpb2MsCi0JCQkgICAgJnNhc19kZXZpY2UsIGV2LT5pZCwKLQkJCSAgICAoTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX0JVU19UQVJHRVRfSUQgPDwKLQkJCSAgICAgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSkpCi0JCQkJYnJlYWs7Ci0JCQlldi0+aGFuZGxlID0gc2FzX2RldmljZS5oYW5kbGU7Ci0JCQlldi0+cGFyZW50X2hhbmRsZSA9IHNhc19kZXZpY2UuaGFuZGxlX3BhcmVudDsKLQkJCWV2LT5jaGFubmVsID0gc2FzX2RldmljZS5jaGFubmVsOwotCQkJZXYtPnBoeV9pZCA9IHNhc19kZXZpY2UucGh5X2lkOwotCQkJZXYtPnNhc19hZGRyZXNzID0gc2FzX2RldmljZS5zYXNfYWRkcmVzczsKLQkJCWV2LT5kZXZpY2VfaW5mbyA9IHNhc19kZXZpY2UuZGV2aWNlX2luZm87Ci0JCX0KKwkJaWYgKG1wdHNhc19zYXNfZGV2aWNlX3BnMChpb2MsICZzYXNfZGV2aWNlLAorCQkgICAgKE1QSV9TQVNfREVWSUNFX1BHQURfRk9STV9CVVNfVEFSR0VUX0lEIDw8CisJCSAgICAgTVBJX1NBU19ERVZJQ0VfUEdBRF9GT1JNX1NISUZUKSwgZXYtPmlkKSkKKwkJCWJyZWFrOwogCiAJCXBoeV9pbmZvID0gbXB0c2FzX2ZpbmRfcGh5aW5mb19ieV9wYXJlbnQoaW9jLAotCQkJCWV2LT5wYXJlbnRfaGFuZGxlLCBldi0+cGh5X2lkKTsKKwkJCQlzYXNfZGV2aWNlLmhhbmRsZV9wYXJlbnQsIHNhc19kZXZpY2UucGh5X2lkKTsKKwogCQlpZiAoIXBoeV9pbmZvKSB7Ci0JCQlwcmludGsoIm1wdHNhczogYWRkIGV2ZW50IGZvciBub24tZXhpc3RhbnQgUEhZLlxuIik7CisJCQl1MzIgaGFuZGxlID0gMHhGRkZGOworCisJCQkvKgorCQkJKiBJdHMgcG9zc2libGUgd2hlbiBhbiBleHBhbmRlciBoYXMgYmVlbiBob3QgYWRkZWQKKwkJCSogY29udGFpbmluZyBhdHRhY2hlZCBkZXZpY2VzLCB0aGUgc2FzIGZpcm13YXJlCisJCQkqIG1heSBzZW5kIGEgUkNfQURERUQgZXZlbnQgcHJpb3IgdG8gdGhlCisJCQkqIERJU0NPVkVSWSBTVE9QIGV2ZW50LiBJZiB0aGF0IG9jY3Vycywgb3VyCisJCQkqIHZpZXcgb2YgdGhlIHRvcG9sb2d5IGluIHRoZSBkcml2ZXIgaW4gcmVzcGVjdCB0byB0aGlzCisJCQkqIGV4cGFuZGVyIG1pZ2h0IG9mIG5vdCBiZWVuIHNldHVwLCBhbmQgd2UgaGl0IHRoaXMKKwkJCSogY29uZGl0aW9uLgorCQkJKiBUaGVyZWZvcmUsIHRoaXMgY29kZSBraWNrcyBvZmYgZGlzY292ZXJ5IHRvCisJCQkqIHJlZnJlc2ggdGhlIGRhdGEuCisJCQkqIFRoZW4gYWdhaW4sIHdlIGNoZWNrIHdoZXRoZXIgdGhlIHBhcmVudCBwaHkgaGFzCisJCQkqIGJlZW4gY3JlYXRlZC4KKwkJCSovCisJCQlpb2MtPnNhc19kaXNjb3ZlcnlfcnVudGltZT0xOworCQkJbXB0c2FzX2RlbGV0ZV9leHBhbmRlcl9waHlzKGlvYyk7CisJCQltcHRzYXNfcHJvYmVfaGJhX3BoeXMoaW9jKTsKKwkJCXdoaWxlICghbXB0c2FzX3Byb2JlX2V4cGFuZGVyX3BoeXMoaW9jLCAmaGFuZGxlKSkKKwkJCQk7CisJCQlpb2MtPnNhc19kaXNjb3ZlcnlfcnVudGltZT0wOworCisJCQlwaHlfaW5mbyA9IG1wdHNhc19maW5kX3BoeWluZm9fYnlfcGFyZW50KGlvYywKKwkJCQlzYXNfZGV2aWNlLmhhbmRsZV9wYXJlbnQsIHNhc19kZXZpY2UucGh5X2lkKTsKKwkJCWlmICghcGh5X2luZm8pCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocGh5X2luZm8tPnN0YXJnZXQpIHsKKwkJCXZ0YXJnZXQgPSBwaHlfaW5mby0+c3RhcmdldC0+aG9zdGRhdGE7CisKKwkJCWlmICghdnRhcmdldCkKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBIYW5kbGluZyAgUkFJRCBjb21wb25lbnRzCisJCQkgKi8KKwkJCWlmICh2dGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKSB7CisJCQkJdnRhcmdldC0+dGZsYWdzICY9IH5NUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UOworCQkJCXZ0YXJnZXQtPnRhcmdldF9pZCA9IGV2LT5pZDsKKwkJCQltcHRzYXNfcmVwcm9iZV90YXJnZXQocGh5X2luZm8tPnN0YXJnZXQsIDApOworCQkJfQogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAocGh5X2luZm8tPnJwaHkpIHsKLQkJCXByaW50aygibXB0c2FzOiB0cnlpbmcgdG8gYWRkIGV4aXN0aW5nIGRldmljZS5cbiIpOworCQlpZiAocGh5X2luZm8tPnJwaHkpCiAJCQlicmVhazsKLQkJfQogCi0JCS8qIGZpbGwgYXR0YWNoZWQgaW5mbyAqLwotCQlwaHlfaW5mby0+YXR0YWNoZWQuaGFuZGxlID0gZXYtPmhhbmRsZTsKLQkJcGh5X2luZm8tPmF0dGFjaGVkLnBoeV9pZCA9IGV2LT5waHlfaWQ7Ci0JCXBoeV9pbmZvLT5hdHRhY2hlZC5wb3J0X2lkID0gcGh5X2luZm8tPmlkZW50aWZ5LnBvcnRfaWQ7Ci0JCXBoeV9pbmZvLT5hdHRhY2hlZC5pZCA9IGV2LT5pZDsKLQkJcGh5X2luZm8tPmF0dGFjaGVkLmNoYW5uZWwgPSBldi0+Y2hhbm5lbDsKLQkJcGh5X2luZm8tPmF0dGFjaGVkLnNhc19hZGRyZXNzID0gZXYtPnNhc19hZGRyZXNzOwotCQlwaHlfaW5mby0+YXR0YWNoZWQuZGV2aWNlX2luZm8gPSBldi0+ZGV2aWNlX2luZm87CisJCW1lbWNweSgmcGh5X2luZm8tPmF0dGFjaGVkLCAmc2FzX2RldmljZSwKKwkJICAgIHNpemVvZihzdHJ1Y3QgbXB0c2FzX2RldmluZm8pKTsKIAogCQlpZiAocGh5X2luZm8tPmF0dGFjaGVkLmRldmljZV9pbmZvICYgTVBJX1NBU19ERVZJQ0VfSU5GT19TU1BfVEFSR0VUKQogCQkJZHMgPSAic3NwIjsKQEAgLTEzODgsMTMgKzE4MDIsMjMgQEAKIAkJICAgICAgICJhdHRhY2hpbmcgJXMgZGV2aWNlLCBjaGFubmVsICVkLCBpZCAlZCwgcGh5ICVkXG4iLAogCQkgICAgICAgaW9jLT5uYW1lLCBkcywgZXYtPmNoYW5uZWwsIGV2LT5pZCwgZXYtPnBoeV9pZCk7CiAKLQotCQlycGh5ID0gc2FzX3JwaHlfYWxsb2MocGh5X2luZm8tPnBoeSk7CisJCW1wdHNhc19wYXJzZV9kZXZpY2VfaW5mbygmaWRlbnRpZnksICZwaHlfaW5mby0+YXR0YWNoZWQpOworCQlzd2l0Y2ggKGlkZW50aWZ5LmRldmljZV90eXBlKSB7CisJCWNhc2UgU0FTX0VORF9ERVZJQ0U6CisJCQlycGh5ID0gc2FzX2VuZF9kZXZpY2VfYWxsb2MocGh5X2luZm8tPnBoeSk7CisJCQlicmVhazsKKwkJY2FzZSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0U6CisJCWNhc2UgU0FTX0ZBTk9VVF9FWFBBTkRFUl9ERVZJQ0U6CisJCQlycGh5ID0gc2FzX2V4cGFuZGVyX2FsbG9jKHBoeV9pbmZvLT5waHksIGlkZW50aWZ5LmRldmljZV90eXBlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcnBoeSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQogCQlpZiAoIXJwaHkpCiAJCQlicmVhazsgLyogbm9uLWZhdGFsOiBhbiBycGh5IGNhbiBiZSBhZGRlZCBsYXRlciAqLwogCi0JCXJwaHktPnNjc2lfdGFyZ2V0X2lkID0gcGh5X2luZm8tPmF0dGFjaGVkLmlkOwotCQltcHRzYXNfcGFyc2VfZGV2aWNlX2luZm8oJnJwaHktPmlkZW50aWZ5LCAmcGh5X2luZm8tPmF0dGFjaGVkKTsKKwkJcnBoeS0+aWRlbnRpZnkgPSBpZGVudGlmeTsKIAkJaWYgKHNhc19ycGh5X2FkZChycGh5KSkgewogCQkJc2FzX3JwaHlfZnJlZShycGh5KTsKIAkJCWJyZWFrOwpAQCAtMTQxMyw3ICsxODM3LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXByaW50ayhNWUlPQ19zX0lORk9fRk1UCi0JCSAgICAgICAiYXR0YWNoaW5nIGRldmljZSwgY2hhbm5lbCAlZCwgaWQgJWRcbiIsCisJCSAgICAgICAiYXR0YWNoaW5nIHJhaWQgdm9sdW1lLCBjaGFubmVsICVkLCBpZCAlZFxuIiwKIAkJICAgICAgIGlvYy0+bmFtZSwgaW9jLT5udW1fcG9ydHMsIGV2LT5pZCk7CiAJCXNjc2lfYWRkX2RldmljZShpb2MtPnNoLAogCQkJaW9jLT5udW1fcG9ydHMsCkBAIC0xNDMwLDcgKzE4NTQsNyBAQAogCQlpZiAoIXNkZXYpCiAJCQlicmVhazsKIAkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQKLQkJICAgICAgICJyZW1vdmluZyBkZXZpY2UsIGNoYW5uZWwgJWQsIGlkICVkXG4iLAorCQkgICAgICAgInJlbW92aW5nIHJhaWQgdm9sdW1lLCBjaGFubmVsICVkLCBpZCAlZFxuIiwKIAkJICAgICAgIGlvYy0+bmFtZSwgaW9jLT5udW1fcG9ydHMsIGV2LT5pZCk7CiAJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2KTsKIAkJc2NzaV9kZXZpY2VfcHV0KHNkZXYpOwpAQCAtMTQzOSw2ICsxODYzLDcgQEAKIAl9CiAKIAlrZnJlZShldik7CisJbXV0ZXhfdW5sb2NrKCZpb2MtPnNhc19kaXNjb3ZlcnlfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTQ1NSwzNSArMTg4MCw1MSBAQAogCSAgICAgIE1QSV9TQVNfREVWSUNFX0lORk9fU0FUQV9ERVZJQ0UgKSkgPT0gMCkKIAkJcmV0dXJuOwogCi0JaWYgKChzYXNfZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAmCi0JICAgICAoTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BRERFRCB8Ci0JICAgICAgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19OT1RfUkVTUE9ORElORykpID09IDApCi0JCXJldHVybjsKKwlzd2l0Y2ggKHNhc19ldmVudF9kYXRhLT5SZWFzb25Db2RlKSB7CisJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FEREVEOgorCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19OT1RfUkVTUE9ORElORzoKKwkJZXYgPSBrbWFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFldikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXB0c2FzOiBsb3N0IGhvdHBsdWcgZXZlbnRcbiIpOworCQkJYnJlYWs7CisJCX0KIAotCWV2ID0ga21hbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFldikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtcHRzYXM6IGxvc3QgaG90cGx1ZyBldmVudFxuIik7Ci0JCXJldHVybjsKKwkJSU5JVF9XT1JLKCZldi0+d29yaywgbXB0c2FzX2hvdHBsdWdfd29yaywgZXYpOworCQlldi0+aW9jID0gaW9jOworCQlldi0+aGFuZGxlID0gbGUxNl90b19jcHUoc2FzX2V2ZW50X2RhdGEtPkRldkhhbmRsZSk7CisJCWV2LT5wYXJlbnRfaGFuZGxlID0KKwkJICAgIGxlMTZfdG9fY3B1KHNhc19ldmVudF9kYXRhLT5QYXJlbnREZXZIYW5kbGUpOworCQlldi0+Y2hhbm5lbCA9IHNhc19ldmVudF9kYXRhLT5CdXM7CisJCWV2LT5pZCA9IHNhc19ldmVudF9kYXRhLT5UYXJnZXRJRDsKKwkJZXYtPnBoeV9pZCA9IHNhc19ldmVudF9kYXRhLT5QaHlOdW07CisJCW1lbWNweSgmc2FzX2FkZHJlc3MsICZzYXNfZXZlbnRfZGF0YS0+U0FTQWRkcmVzcywKKwkJICAgIHNpemVvZihfX2xlNjQpKTsKKwkJZXYtPnNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoc2FzX2FkZHJlc3MpOworCQlldi0+ZGV2aWNlX2luZm8gPSBkZXZpY2VfaW5mbzsKKworCQlpZiAoc2FzX2V2ZW50X2RhdGEtPlJlYXNvbkNvZGUgJgorCQkgICAgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19BRERFRCkKKwkJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0FERF9ERVZJQ0U7CisJCWVsc2UKKwkJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0RFTF9ERVZJQ0U7CisJCXNjaGVkdWxlX3dvcmsoJmV2LT53b3JrKTsKKwkJYnJlYWs7CisJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX05PX1BFUlNJU1RfQURERUQ6CisJLyoKKwkgKiBQZXJzaXN0ZW50IHRhYmxlIGlzIGZ1bGwuCisJICovCisJCUlOSVRfV09SSygmaW9jLT5tcHRzY3NpaF9wZXJzaXN0VGFzaywKKwkJICAgIG1wdHNjc2loX3Nhc19wZXJzaXN0X2NsZWFyX3RhYmxlLAorCQkgICAgKHZvaWQgKilpb2MpOworCQlzY2hlZHVsZV93b3JrKCZpb2MtPm1wdHNjc2loX3BlcnNpc3RUYXNrKTsKKwkJYnJlYWs7CisJY2FzZSBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEE6CisJLyogVE9ETyAqLworCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQ6CisJLyogVE9ETyAqLworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KLQotCi0JSU5JVF9XT1JLKCZldi0+d29yaywgbXB0c2FzX2hvdHBsdWdfd29yaywgZXYpOwotCWV2LT5pb2MgPSBpb2M7Ci0JZXYtPmhhbmRsZSA9IGxlMTZfdG9fY3B1KHNhc19ldmVudF9kYXRhLT5EZXZIYW5kbGUpOwotCWV2LT5wYXJlbnRfaGFuZGxlID0gbGUxNl90b19jcHUoc2FzX2V2ZW50X2RhdGEtPlBhcmVudERldkhhbmRsZSk7Ci0JZXYtPmNoYW5uZWwgPSBzYXNfZXZlbnRfZGF0YS0+QnVzOwotCWV2LT5pZCA9IHNhc19ldmVudF9kYXRhLT5UYXJnZXRJRDsKLQlldi0+cGh5X2lkID0gc2FzX2V2ZW50X2RhdGEtPlBoeU51bTsKLQltZW1jcHkoJnNhc19hZGRyZXNzLCAmc2FzX2V2ZW50X2RhdGEtPlNBU0FkZHJlc3MsIHNpemVvZihfX2xlNjQpKTsKLQlldi0+c2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShzYXNfYWRkcmVzcyk7Ci0JZXYtPmRldmljZV9pbmZvID0gZGV2aWNlX2luZm87Ci0KLQlpZiAoc2FzX2V2ZW50X2RhdGEtPlJlYXNvbkNvZGUgJiBNUElfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FEREVEKQotCQlldi0+ZXZlbnRfdHlwZSA9IE1QVFNBU19BRERfREVWSUNFOwotCWVsc2UKLQkJZXYtPmV2ZW50X3R5cGUgPSBNUFRTQVNfREVMX0RFVklDRTsKLQotCXNjaGVkdWxlX3dvcmsoJmV2LT53b3JrKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE1MTIsNiArMTk1Myw5IEBACiAJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0FERF9ERVZJQ0U7CiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfUEhZU0RJU0tfQ1JFQVRFRDoKKwkJaW9jLT5yYWlkX2RhdGEuaXNSYWlkID0gMTsKKwkJZXYtPnBoeXNfZGlza19udW1fdmFsaWQgPSAxOworCQlldi0+cGh5c19kaXNrX251bSA9IHJhaWRfZXZlbnRfZGF0YS0+UGh5c0Rpc2tOdW07CiAJCWV2LT5ldmVudF90eXBlID0gTVBUU0FTX0RFTF9ERVZJQ0U7CiAJCWJyZWFrOwogCWNhc2UgTVBJX0VWRU5UX1JBSURfUkNfVk9MVU1FX0RFTEVURUQ6CkBAIC0xNTMzLDE1ICsxOTc3LDMxIEBACiAJc2NoZWR1bGVfd29yaygmZXYtPndvcmspOwogfQogCi0vKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCi0vKiB3b3JrIHF1ZXVlIHRocmVhZCB0byBjbGVhciB0aGUgcGVyc2l0ZW5jeSB0YWJsZSAqLwogc3RhdGljIHZvaWQKLW1wdHNjc2loX3Nhc19wZXJzaXN0X2NsZWFyX3RhYmxlKHZvaWQgKiBhcmcpCittcHRzY3NpaF9zZW5kX2Rpc2NvdmVyeShNUFRfQURBUFRFUiAqaW9jLAorCUVWRU5UX0RBVEFfU0FTX0RJU0NPVkVSWSAqZGlzY292ZXJ5X2RhdGEpCiB7Ci0JTVBUX0FEQVBURVIgKmlvYyA9IChNUFRfQURBUFRFUiAqKWFyZzsKKwlzdHJ1Y3QgbXB0c2FzX2Rpc2NvdmVyeV9ldmVudCAqZXY7CiAKLQltcHRiYXNlX3Nhc19wZXJzaXN0X29wZXJhdGlvbihpb2MsIE1QSV9TQVNfT1BfQ0xFQVJfTk9UX1BSRVNFTlQpOwotfQorCS8qCisJICogRGlzY292ZXJ5U3RhdHVzCisJICoKKwkgKiBUaGlzIGZsYWcgd2lsbCBiZSBub24temVybyB3aGVuIGZpcm13YXJlCisJICoga2lja3Mgb2ZmIGRpc2NvdmVyeSwgYW5kIHJldHVybiB0byB6ZXJvCisJICogb25jZSBpdHMgY29tcGxldGVkLgorCSAqLworCWlmIChkaXNjb3ZlcnlfZGF0YS0+RGlzY292ZXJ5U3RhdHVzKQorCQlyZXR1cm47CisKKwlldiA9IGttYWxsb2Moc2l6ZW9mKCpldiksIEdGUF9BVE9NSUMpOworCWlmICghZXYpCisJCXJldHVybjsKKwltZW1zZXQoZXYsMCxzaXplb2Yoc3RydWN0IG1wdHNhc19kaXNjb3ZlcnlfZXZlbnQpKTsKKwlJTklUX1dPUksoJmV2LT53b3JrLCBtcHRzY3NpaF9kaXNjb3Zlcnlfd29yaywgZXYpOworCWV2LT5pb2MgPSBpb2M7CisJc2NoZWR1bGVfd29yaygmZXYtPndvcmspOworfTsKKwogCiBzdGF0aWMgaW50CiBtcHRzYXNfZXZlbnRfcHJvY2VzcyhNUFRfQURBUFRFUiAqaW9jLCBFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKnJlcGx5KQpAQCAtMTU1Miw2ICsyMDEyLDE3IEBACiAJaWYgKCFpb2MtPnNoKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogc2FzX2Rpc2NvdmVyeV9pZ25vcmVfZXZlbnRzCisJICoKKwkgKiBUaGlzIGZsYWcgaXMgdG8gcHJldmVudCBhbnltb3JlIHByb2Nlc3Npbmcgb2YKKwkgKiBzYXMgZXZlbnRzIG9uY2UgbXB0c2FzX3JlbW92ZSBmdW5jdGlvbiBpcyBjYWxsZWQuCisJICovCisJaWYgKGlvYy0+c2FzX2Rpc2NvdmVyeV9pZ25vcmVfZXZlbnRzKSB7CisJCXJjID0gbXB0c2NzaWhfZXZlbnRfcHJvY2Vzcyhpb2MsIHJlcGx5KTsKKwkJZ290byBvdXQ7CisJfQorCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTVBJX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKIAkJbXB0c2NzaWhfc2VuZF9zYXNfZXZlbnQoaW9jLApAQCAtMTU2Nyw2ICsyMDM4LDEwIEBACiAJCSAgICAodm9pZCAqKWlvYyk7CiAJCXNjaGVkdWxlX3dvcmsoJmlvYy0+bXB0c2NzaWhfcGVyc2lzdFRhc2spOwogCQlicmVhazsKKwkgY2FzZSBNUElfRVZFTlRfU0FTX0RJU0NPVkVSWToKKwkJbXB0c2NzaWhfc2VuZF9kaXNjb3ZlcnkoaW9jLAorCQkJKEVWRU5UX0RBVEFfU0FTX0RJU0NPVkVSWSAqKXJlcGx5LT5EYXRhKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSBtcHRzY3NpaF9ldmVudF9wcm9jZXNzKGlvYywgcmVwbHkpOwogCQlicmVhazsKQEAgLTE2NjgsNyArMjE0Myw3IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmaW9jLT5zYXNfdG9wb2xvZ3kpOwogCW11dGV4X2luaXQoJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKLQorCW11dGV4X2luaXQoJmlvYy0+c2FzX2Rpc2NvdmVyeV9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmaW9jLT5zYXNfbWdtdC5tdXRleCk7CiAJaW5pdF9jb21wbGV0aW9uKCZpb2MtPnNhc19tZ210LmRvbmUpOwogCkBAIC0xNzgxLDIwICsyMjU2LDYgQEAKIAogCW1wdHNhc19zY2FuX3Nhc190b3BvbG9neShpb2MpOwogCi0JLyoKLQkgIFJlcG9ydGluZyBSQUlEIHZvbHVtZXMuCi0JKi8KLQlpZiAoIWlvYy0+cmFpZF9kYXRhLnBJb2NQZzIpCi0JCXJldHVybiAwOwotCWlmICghaW9jLT5yYWlkX2RhdGEucElvY1BnMi0+TnVtQWN0aXZlVm9sdW1lcykKLQkJcmV0dXJuIDA7Ci0JZm9yIChpaT0wO2lpPGlvYy0+cmFpZF9kYXRhLnBJb2NQZzItPk51bUFjdGl2ZVZvbHVtZXM7aWkrKykgewotCQlzY3NpX2FkZF9kZXZpY2Uoc2gsCi0JCQlpb2MtPm51bV9wb3J0cywKLQkJCWlvYy0+cmFpZF9kYXRhLnBJb2NQZzItPlJhaWRWb2x1bWVbaWldLlZvbHVtZUlELAotCQkJMCk7Ci0JfQotCiAJcmV0dXJuIDA7CiAKIG91dF9tcHRzYXNfcHJvYmU6CkBAIC0xODA4LDExICsyMjY5LDE0IEBACiAJTVBUX0FEQVBURVIgKmlvYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbXB0c2FzX3BvcnRpbmZvICpwLCAqbjsKIAorCWlvYy0+c2FzX2Rpc2NvdmVyeV9pZ25vcmVfZXZlbnRzPTE7CiAJc2FzX3JlbW92ZV9ob3N0KGlvYy0+c2gpOwogCiAJbXV0ZXhfbG9jaygmaW9jLT5zYXNfdG9wb2xvZ3lfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmaW9jLT5zYXNfdG9wb2xvZ3ksIGxpc3QpIHsKIAkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQlpZiAocC0+cGh5X2luZm8pCisJCQlrZnJlZShwLT5waHlfaW5mbyk7CiAJCWtmcmVlKHApOwogCX0KIAltdXRleF91bmxvY2soJmlvYy0+c2FzX3RvcG9sb2d5X211dGV4KTsKQEAgLTE4NjcsNyArMjMzMSw3IEBACiAJbXB0c2FzTWdtdEN0eCA9IG1wdF9yZWdpc3RlcihtcHRzYXNfbWdtdF9kb25lLCBNUFRTQVNfRFJJVkVSKTsKIAogCWlmIChtcHRfZXZlbnRfcmVnaXN0ZXIobXB0c2FzRG9uZUN0eCwgbXB0c2FzX2V2ZW50X3Byb2Nlc3MpID09IDApIHsKLQkJZGV2dHByaW50aygoS0VSTl9JTkZPIE1ZTkFNCisJCWRldnR2ZXJib3NlcHJpbnRrKChLRVJOX0lORk8gTVlOQU0KIAkJICAiOiBSZWdpc3RlcmVkIGZvciBJT0MgZXZlbnQgbm90aWZpY2F0aW9uc1xuIikpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDRmZWU2YmVmLi4zNzI5MDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCkBAIC0xMTQsMjEgKzExNCw2IEBACiAJdTgJCXJzdmQ7CiB9IElOVEVSTkFMX0NNRDsKIAotdHlwZWRlZiBzdHJ1Y3QgX25lZ29wYXJtcyB7Ci0JdTggd2lkdGg7Ci0JdTggb2Zmc2V0OwotCXU4IGZhY3RvcjsKLQl1OCBmbGFnczsKLX0gTkVHT1BBUk1TOwotCi10eXBlZGVmIHN0cnVjdCBfZHZfcGFyYW1ldGVycyB7Ci0JTkVHT1BBUk1TCSBtYXg7Ci0JTkVHT1BBUk1TCSBub3c7Ci0JdTgJCSBjbWQ7Ci0JdTgJCSBpZDsKLQl1MTYJCSBwYWQxOwotfSBEVlBBUkFNRVRFUlM7Ci0KIC8qCiAgKiAgT3RoZXIgcHJpdmF0ZS9mb3J3YXJkIHByb3Rvcy4uLgogICovCkBAIC0xNDksMjggKzEzNCwxMiBAQAogaW50CQltcHRzY3NpaF9pb2NfcmVzZXQoTVBUX0FEQVBURVIgKmlvYywgaW50IHBvc3RfcmVzZXQpOwogaW50CQltcHRzY3NpaF9ldmVudF9wcm9jZXNzKE1QVF9BREFQVEVSICppb2MsIEV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqcEV2UmVwbHkpOwogCi1zdGF0aWMgdm9pZAltcHRzY3NpaF9pbml0VGFyZ2V0KE1QVF9TQ1NJX0hPU1QgKmhkLCBWaXJ0VGFyZ2V0ICp2dGFyZ2V0LCB1OCBsdW4sIGNoYXIgKmRhdGEsIGludCBkbGVuKTsKLXN0YXRpYyB2b2lkCW1wdHNjc2loX3NldFRhcmdldE5lZ29QYXJtcyhNUFRfU0NTSV9IT1NUICpoZCwgVmlydFRhcmdldCAqdnRhcmdldCwgY2hhciBieXRlNTYpOwotc3RhdGljIHZvaWQJbXB0c2NzaWhfc2V0RGV2aWNlUGFnZTFGbGFncyAodTggd2lkdGgsIHU4IGZhY3RvciwgdTggb2Zmc2V0LCBpbnQgKnJlcXVlc3RlZFB0ciwgaW50ICpjb25maWd1cmF0aW9uUHRyLCB1OCBmbGFncyk7Ci1zdGF0aWMgdm9pZAltcHRzY3NpaF9ub19uZWdvdGlhdGUoTVBUX1NDU0lfSE9TVCAqaGQsIHN0cnVjdCBzY3NpX2NtbmQgKnNjKTsKLXN0YXRpYyBpbnQJbXB0c2NzaWhfd3JpdGVTRFAxKE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgcG9ydG51bSwgaW50IHRhcmdldCwgaW50IGZsYWdzKTsKK3N0YXRpYyB2b2lkCW1wdHNjc2loX2luaXRUYXJnZXQoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnRUYXJnZXQgKnZ0YXJnZXQsIHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitzdGF0aWMgdm9pZAltcHRzY3NpaF9zZXRUYXJnZXROZWdvUGFybXMoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnRUYXJnZXQgKnZ0YXJnZXQsIHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiBzdGF0aWMgaW50CW1wdHNjc2loX3dyaXRlSU9DUGFnZTQoTVBUX1NDU0lfSE9TVCAqaGQsIGludCB0YXJnZXRfaWQsIGludCBidXMpOwogaW50CQltcHRzY3NpaF9zY2FuZHZfY29tcGxldGUoTVBUX0FEQVBURVIgKmlvYywgTVBUX0ZSQU1FX0hEUiAqbWYsIE1QVF9GUkFNRV9IRFIgKnIpOwogc3RhdGljIGludAltcHRzY3NpaF9kb19jbWQoTVBUX1NDU0lfSE9TVCAqaGQsIElOVEVSTkFMX0NNRCAqaW9jbWQpOwogc3RhdGljIHZvaWQJbXB0c2NzaWhfc3luY2hyb25pemVfY2FjaGUoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnREZXZpY2UgKnZkZXZpY2UpOwotc3RhdGljIHZvaWQJbXB0c2NzaWhfbmVnb3RpYXRlX3RvX2FzeW5fbmFycm93KE1QVF9TQ1NJX0hPU1QgKmhkLCBWaXJ0RGV2aWNlICp2ZGV2aWNlKTsKLXN0YXRpYyBpbnQJbXB0c2NzaWhfaXNfcGh5c19kaXNrKE1QVF9BREFQVEVSICppb2MsIGludCBpZCk7Ci0KLSNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KLXN0YXRpYyBpbnQJbXB0c2NzaWhfZG9fcmFpZChNUFRfU0NTSV9IT1NUICpoZCwgdTggYWN0aW9uLCBJTlRFUk5BTF9DTUQgKmlvKTsKLXN0YXRpYyB2b2lkCW1wdHNjc2loX2RvbWFpblZhbGlkYXRpb24odm9pZCAqaGQpOwotc3RhdGljIHZvaWQJbXB0c2NzaWhfcWFzX2NoZWNrKE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgaWQpOwotc3RhdGljIGludAltcHRzY3NpaF9kb0R2KE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgY2hhbm5lbCwgaW50IHRhcmdldCk7Ci1zdGF0aWMgdm9pZAltcHRzY3NpaF9kdl9wYXJtcyhNUFRfU0NTSV9IT1NUICpoZCwgRFZQQVJBTUVURVJTICpkdix2b2lkICpwUGFnZSk7Ci1zdGF0aWMgdm9pZAltcHRzY3NpaF9maWxsYnVmKGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsIGludCBpbmRleCwgaW50IHdpZHRoKTsKLXN0YXRpYyB2b2lkCW1wdHNjc2loX3NldF9kdmZsYWdzX3JhaWQoTVBUX1NDU0lfSE9TVCAqaGQsIGludCBpZCk7Ci1zdGF0aWMgdm9pZAltcHRzY3NpaF9zZXRfZHZmbGFncyhNUFRfU0NTSV9IT1NUICpoZCwgc3RydWN0IHNjc2lfY21uZCAqc2MpOwotI2VuZGlmCiAKIHZvaWQgCQltcHRzY3NpaF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKik7CiB2b2lkIAkJbXB0c2NzaWhfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKik7CkBAIC0xODEsMTYgKzE1MCw2IEBACiAKICNkZWZpbmUgU05TX0xFTihzY3ApCXNpemVvZigoc2NwKS0+c2Vuc2VfYnVmZmVyKQogCi0jaWZkZWYgTVBUU0NTSUhfRU5BQkxFX0RPTUFJTl9WQUxJREFUSU9OCi0vKgotICogRG9tYWluIFZhbGlkYXRpb24gdGFzayBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhkdnRhc2tRX2xvY2spOwotc3RhdGljIGludCBkdnRhc2tRX2FjdGl2ZSA9IDA7Ci1zdGF0aWMgaW50IGR2dGFza1FfcmVsZWFzZSA9IDA7Ci1zdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0CWR2VGFza1FfdGFzazsKLSNlbmRpZgotCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCiAvKioKICAqCW1wdHNjc2loX2FkZF9zZ2UgLSBQbGFjZSBhIHNpbXBsZSBTR0UgYXQgYWRkcmVzcyBwQWRkci4KQEAgLTY4Nyw5ICs2NDYsNiBAQAogCQkJICovCiAJCQlzYy0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwogCi0JCQkvKiBHRU0gV29ya2Fyb3VuZC4gKi8KLQkJCWlmIChpb2MtPmJ1c190eXBlID09IFNQSSkKLQkJCQltcHRzY3NpaF9ub19uZWdvdGlhdGUoaGQsIHNjKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19TQ1NJX1JFU0lEVUFMX01JU01BVENIOgkvKiAweDAwNDkgKi8KQEAgLTkzMSw3ICs4ODcsNyBAQAogCQkJZHNwcmludGsoKCAic2VhcmNoX3J1bm5pbmc6IGZvdW5kIChzYz0lcCwgbWYgPSAlcCkgdGFyZ2V0ICVkLCBsdW4gJWQgXG4iLAogCQkJCQloZC0+U2NzaUxvb2t1cFtpaV0sIG1mLCBtZi0+VGFyZ2V0SUQsIG1mLT5MVU5bMV0pKTsKIAotCQkJaWYgKChtZi0+VGFyZ2V0SUQgIT0gKCh1OCl2ZGV2aWNlLT50YXJnZXRfaWQpKSB8fCAobWYtPkxVTlsxXSAhPSAoKHU4KSB2ZGV2aWNlLT5sdW4pKSkKKwkJCWlmICgobWYtPlRhcmdldElEICE9ICgodTgpdmRldmljZS0+dnRhcmdldC0+dGFyZ2V0X2lkKSkgfHwgKG1mLT5MVU5bMV0gIT0gKCh1OCkgdmRldmljZS0+bHVuKSkpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIENsZWFudXAKQEAgLTEwMDUsMTAgKzk2MSw2IEBACiAJTVBUX0FEQVBURVIgCQkqaW9jID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBTY3NpX0hvc3QgCSpob3N0ID0gaW9jLT5zaDsKIAlNUFRfU0NTSV9IT1NUCQkqaGQ7Ci0jaWZkZWYgTVBUU0NTSUhfRU5BQkxFX0RPTUFJTl9WQUxJREFUSU9OCi0JaW50IAkJIAljb3VudDsKLQl1bnNpZ25lZCBsb25nCSAJZmxhZ3M7Ci0jZW5kaWYJCiAJaW50IHN6MTsKIAogCWlmKCFob3N0KSB7CkBAIC0xMDIxLDI1ICs5NzMsNiBAQAogCWlmKChoZCA9IChNUFRfU0NTSV9IT1NUICopaG9zdC0+aG9zdGRhdGEpID09IE5VTEwpCiAJCXJldHVybjsKIAotI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgotCS8qIENoZWNrIERWIHRocmVhZCBhY3RpdmUgKi8KLQljb3VudCA9IDEwICogSFo7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmR2dGFza1FfbG9jaywgZmxhZ3MpOwotCWlmIChkdnRhc2tRX2FjdGl2ZSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdnRhc2tRX2xvY2ssIGZsYWdzKTsKLQkJd2hpbGUoZHZ0YXNrUV9hY3RpdmUgJiYgLS1jb3VudCkKLQkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKLQl9IGVsc2UgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdnRhc2tRX2xvY2ssIGZsYWdzKTsKLQl9Ci0JaWYgKCFjb3VudCkKLQkJcHJpbnRrKEtFUk5fRVJSIE1ZTkFNICI6IEVSUk9SIC0gRFYgdGhyZWFkIHN0aWxsIGFjdGl2ZSFcbiIpOwotI2lmIGRlZmluZWQoTVBUX0RFQlVHX0RWKSB8fCBkZWZpbmVkKE1QVF9ERUJVR19EVl9USU5ZKQotCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSIE1ZTkFNICI6IERWIHRocmVhZCBvcmlnICVkLCBjb3VudCAlZFxuIiwgMTAgKiBIWiwgY291bnQpOwotI2VuZGlmCi0jZW5kaWYKLQogCW1wdHNjc2loX3NodXRkb3duKHBkZXYpOwogCiAJc3oxPTA7CkBAIC0xMTI3LDIxICsxMDYwLDYgQEAKIAlpZighaGQpCiAJCXJldHVybiAwOwogCi0jaWZkZWYgTVBUU0NTSUhfRU5BQkxFX0RPTUFJTl9WQUxJREFUSU9OCi0JewotCXVuc2lnbmVkIGxvbmcgbGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkdnRhc2tRX2xvY2ssIGxmbGFncyk7Ci0JaWYgKCFkdnRhc2tRX2FjdGl2ZSkgewotCQlkdnRhc2tRX2FjdGl2ZSA9IDE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR2dGFza1FfbG9jaywgbGZsYWdzKTsKLQkJSU5JVF9XT1JLKCZkdlRhc2tRX3Rhc2ssCi0JCSAgbXB0c2NzaWhfZG9tYWluVmFsaWRhdGlvbiwgKHZvaWQgKikgaGQpOwotCQlzY2hlZHVsZV93b3JrKCZkdlRhc2tRX3Rhc2spOwotCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR2dGFza1FfbG9jaywgbGZsYWdzKTsKLQl9Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMTcsNiArMTIzNSwxNCBAQAogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAl9CiAKKwlpZiAoKGhkLT5pb2MtPmJ1c190eXBlID09IFNQSSkgJiYKKwkgICAgdmRldi0+dnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVCAmJgorCSAgICBtcHRzY3NpaF9yYWlkX2lkX3RvX251bShoZCwgU0NwbnQtPmRldmljZS0+aWQpIDwgMCkgeworCQlTQ3BudC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CisJCWRvbmUoU0NwbnQpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqICBQdXQgdG9nZXRoZXIgYSBNUFQgU0NTSSByZXF1ZXN0Li4uCiAJICovCkBAIC0xMzYwLDEwICsxMjg2LDEzIEBACiAKIAkvKiBVc2UgdGhlIGFib3ZlIGluZm9ybWF0aW9uIHRvIHNldCB1cCB0aGUgbWVzc2FnZSBmcmFtZQogCSAqLwotCXBTY3NpUmVxLT5UYXJnZXRJRCA9ICh1OCkgdmRldi0+dGFyZ2V0X2lkOwotCXBTY3NpUmVxLT5CdXMgPSB2ZGV2LT5idXNfaWQ7CisJcFNjc2lSZXEtPlRhcmdldElEID0gKHU4KSB2ZGV2LT52dGFyZ2V0LT50YXJnZXRfaWQ7CisJcFNjc2lSZXEtPkJ1cyA9IHZkZXYtPnZ0YXJnZXQtPmJ1c19pZDsKIAlwU2NzaVJlcS0+Q2hhaW5PZmZzZXQgPSAwOwotCXBTY3NpUmVxLT5GdW5jdGlvbiA9IE1QSV9GVU5DVElPTl9TQ1NJX0lPX1JFUVVFU1Q7CisJaWYgKHZkZXYtPnZ0YXJnZXQtPnRmbGFncyAmICBNUFRfVEFSR0VUX0ZMQUdTX1JBSURfQ09NUE9ORU5UKQorCQlwU2NzaVJlcS0+RnVuY3Rpb24gPSBNUElfRlVOQ1RJT05fUkFJRF9TQ1NJX0lPX1BBU1NUSFJPVUdIOworCWVsc2UKKwkJcFNjc2lSZXEtPkZ1bmN0aW9uID0gTVBJX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVDsKIAlwU2NzaVJlcS0+Q0RCTGVuZ3RoID0gU0NwbnQtPmNtZF9sZW47CiAJcFNjc2lSZXEtPlNlbnNlQnVmZmVyTGVuZ3RoID0gTVBUX1NFTlNFX0JVRkZFUl9TSVpFOwogCXBTY3NpUmVxLT5SZXNlcnZlZCA9IDA7CkBAIC0xNDExLDQ5ICsxMzQwLDYgQEAKIAloZC0+U2NzaUxvb2t1cFtteV9pZHhdID0gU0NwbnQ7CiAJU0NwbnQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCi0jaWZkZWYgTVBUU0NTSUhfRU5BQkxFX0RPTUFJTl9WQUxJREFUSU9OCi0JaWYgKGhkLT5pb2MtPmJ1c190eXBlID09IFNQSSkgewotCQlpbnQgZHZTdGF0dXMgPSBoZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1t2ZGV2LT50YXJnZXRfaWRdOwotCQlpbnQgaXNzdWVDbWQgPSAxOwotCi0JCWlmIChkdlN0YXR1cyB8fCBoZC0+aW9jLT5zcGlfZGF0YS5mb3JjZUR2KSB7Ci0KLQkJCWlmICgoZHZTdGF0dXMgJiBNUFRfU0NTSUNGR19ORUVEX0RWKSB8fAotCQkJCShoZC0+aW9jLT5zcGlfZGF0YS5mb3JjZUR2ICYgTVBUX1NDU0lDRkdfTkVFRF9EVikpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGxmbGFnczsKLQkJCQkvKiBTY2hlZHVsZSBEViBpZiBuZWNlc3NhcnkgKi8KLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHZ0YXNrUV9sb2NrLCBsZmxhZ3MpOwotCQkJCWlmICghZHZ0YXNrUV9hY3RpdmUpIHsKLQkJCQkJZHZ0YXNrUV9hY3RpdmUgPSAxOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdnRhc2tRX2xvY2ssIGxmbGFncyk7Ci0JCQkJCUlOSVRfV09SSygmZHZUYXNrUV90YXNrLCBtcHRzY3NpaF9kb21haW5WYWxpZGF0aW9uLCAodm9pZCAqKSBoZCk7Ci0KLQkJCQkJc2NoZWR1bGVfd29yaygmZHZUYXNrUV90YXNrKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdnRhc2tRX2xvY2ssIGxmbGFncyk7Ci0JCQkJfQotCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmZvcmNlRHYgJj0gfk1QVF9TQ1NJQ0ZHX05FRURfRFY7Ci0JCQl9Ci0KLQkJCS8qIFRyeWluZyB0byBkbyBEViB0byB0aGlzIHRhcmdldCwgZXh0ZW5kIHRpbWVvdXQuCi0JCQkgKiBXYWl0IHRvIGlzc3VlIHVudGlsIGZsYWcgaXMgY2xlYXIKLQkJCSAqLwotCQkJaWYgKGR2U3RhdHVzICYgTVBUX1NDU0lDRkdfRFZfUEVORElORykgewotCQkJCW1vZF90aW1lcigmU0NwbnQtPmVoX3RpbWVvdXQsIGppZmZpZXMgKyA0MCAqIEhaKTsKLQkJCQlpc3N1ZUNtZCA9IDA7Ci0JCQl9Ci0KLQkJCS8qIFNldCB0aGUgRFYgZmxhZ3MuCi0JCQkgKi8KLQkJCWlmIChkdlN0YXR1cyAmIE1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FKQotCQkJCW1wdHNjc2loX3NldF9kdmZsYWdzKGhkLCBTQ3BudCk7Ci0KLQkJCWlmICghaXNzdWVDbWQpCi0JCQkJZ290byBmYWlsOwotCQl9Ci0JfQotI2VuZGlmCi0KIAltcHRfcHV0X21zZ19mcmFtZShoZC0+aW9jLT5Eb25lQ3R4LCBoZC0+aW9jLCBtZik7CiAJZG1mcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJJc3N1ZWQgU0NTSSBjbWQgKCVwKSBtZj0lcCBpZHg9JWRcbiIsCiAJCQloZC0+aW9jLT5uYW1lLCBTQ3BudCwgbWYsIG15X2lkeCkpOwpAQCAtMTgxNiw3ICsxNzAyLDcgQEAKIAogCXZkZXYgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlyZXR2YWwgPSBtcHRzY3NpaF9UTUhhbmRsZXIoaGQsIE1QSV9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJPUlRfVEFTSywKLQkJdmRldi0+YnVzX2lkLCB2ZGV2LT50YXJnZXRfaWQsIHZkZXYtPmx1biwKKwkJdmRldi0+dnRhcmdldC0+YnVzX2lkLCB2ZGV2LT52dGFyZ2V0LT50YXJnZXRfaWQsIHZkZXYtPmx1biwKIAkJY3R4MmFib3J0LCBtcHRzY3NpaF9nZXRfdG1fdGltZW91dChpb2MpKTsKIAogCXByaW50ayAoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiB0YXNrIGFib3J0OiAlcyAoc2M9JXApXG4iLApAQCAtMTg2Nyw3ICsxNzUzLDcgQEAKIAogCXZkZXYgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlyZXR2YWwgPSBtcHRzY3NpaF9UTUhhbmRsZXIoaGQsIE1QSV9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VULAotCQl2ZGV2LT5idXNfaWQsIHZkZXYtPnRhcmdldF9pZCwKKwkJdmRldi0+dnRhcmdldC0+YnVzX2lkLCB2ZGV2LT52dGFyZ2V0LT50YXJnZXRfaWQsCiAJCTAsIDAsIG1wdHNjc2loX2dldF90bV90aW1lb3V0KGhkLT5pb2MpKTsKIAogCXByaW50ayAoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiB0YXJnZXQgcmVzZXQ6ICVzIChzYz0lcClcbiIsCkBAIC0xOTE4LDcgKzE4MDQsNyBAQAogCiAJdmRldiA9IFNDcG50LT5kZXZpY2UtPmhvc3RkYXRhOwogCXJldHZhbCA9IG1wdHNjc2loX1RNSGFuZGxlcihoZCwgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9SRVNFVF9CVVMsCi0JCXZkZXYtPmJ1c19pZCwgMCwgMCwgMCwgbXB0c2NzaWhfZ2V0X3RtX3RpbWVvdXQoaGQtPmlvYykpOworCQl2ZGV2LT52dGFyZ2V0LT5idXNfaWQsIDAsIDAsIDAsIG1wdHNjc2loX2dldF90bV90aW1lb3V0KGhkLT5pb2MpKTsKIAogCXByaW50ayAoS0VSTl9XQVJOSU5HIE1ZTkFNICI6ICVzOiBidXMgcmVzZXQ6ICVzIChzYz0lcClcbiIsCiAJCWhkLT5pb2MtPm5hbWUsCkBAIC0yMjE4LDYgKzIxMDQsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogU2VhcmNoIElPQyBwYWdlIDMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgaGlkZGVuIHBoeXNpY2FsIGRpc2sKKyAqCisgKi8KK2ludAorbXB0c2NzaWhfaXNfcGh5c19kaXNrKE1QVF9BREFQVEVSICppb2MsIGludCBpZCkKK3sKKwlpbnQgaTsKKworCWlmICghaW9jLT5yYWlkX2RhdGEuaXNSYWlkIHx8ICFpb2MtPnJhaWRfZGF0YS5wSW9jUGczKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaWQgPT0gaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2tbaV0uUGh5c0Rpc2tJRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChtcHRzY3NpaF9pc19waHlzX2Rpc2spOworCitpbnQKK21wdHNjc2loX3JhaWRfaWRfdG9fbnVtKE1QVF9TQ1NJX0hPU1QgKmhkLCB1aW50IHBoeXNkaXNraWQpCit7CisJaW50IGk7CisKKwlpZiAoIWhkLT5pb2MtPnJhaWRfZGF0YS5pc1JhaWQgfHwgIWhkLT5pb2MtPnJhaWRfZGF0YS5wSW9jUGczKQorCQlyZXR1cm4gLUVOWElPOworCisJZm9yIChpID0gMDsgaSA8IGhkLT5pb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7IGkrKykgeworCQlpZiAocGh5c2Rpc2tpZCA9PQorCQkgICAgaGQtPmlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrW2ldLlBoeXNEaXNrSUQpCisJCQlyZXR1cm4gaGQtPmlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPlBoeXNEaXNrW2ldLlBoeXNEaXNrTnVtOworCX0KKworCXJldHVybiAtRU5YSU87Cit9CitFWFBPUlRfU1lNQk9MKG1wdHNjc2loX3JhaWRfaWRfdG9fbnVtKTsKKwogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoKICAqCU9TIGVudHJ5IHBvaW50IHRvIGFsbG93IGhvc3QgZHJpdmVyIHRvIGFsbG9jIG1lbW9yeQpAQCAtMjIzMyw2ICsyMTU1LDcgQEAKIAlpZiAoIXZ0YXJnZXQpCiAJCXJldHVybiAtRU5PTUVNOwogCXN0YXJnZXQtPmhvc3RkYXRhID0gdnRhcmdldDsKKwl2dGFyZ2V0LT5zdGFyZ2V0ID0gc3RhcmdldDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI1OCwxNCArMjE4MSwxMiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl2ZGV2LT5pb2NfaWQgPSBoZC0+aW9jLT5pZDsKLQl2ZGV2LT50YXJnZXRfaWQgPSBzZGV2LT5pZDsKLQl2ZGV2LT5idXNfaWQgPSBzZGV2LT5jaGFubmVsOwogCXZkZXYtPmx1biA9IHNkZXYtPmx1bjsKIAlzZGV2LT5ob3N0ZGF0YSA9IHZkZXY7CiAKIAlzdGFyZ2V0ID0gc2NzaV90YXJnZXQoc2Rldik7CiAJdnRhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOworCiAJdmRldi0+dnRhcmdldCA9IHZ0YXJnZXQ7CiAKIAlpZiAodnRhcmdldC0+bnVtX2x1bnMgPT0gMCkgewpAQCAtMjI3NCwxNCArMjE5NSwxMSBAQAogCQl2dGFyZ2V0LT50ZmxhZ3MgPSBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTOwogCQl2dGFyZ2V0LT50YXJnZXRfaWQgPSBzZGV2LT5pZDsKIAkJdnRhcmdldC0+YnVzX2lkID0gc2Rldi0+Y2hhbm5lbDsKLQkJaWYgKGhkLT5pb2MtPmJ1c190eXBlID09IFNQSSkgewotCQkJaWYgKGhkLT5pb2MtPnJhaWRfZGF0YS5pc1JhaWQgJiAoMSA8PCBzZGV2LT5pZCkpIHsKLQkJCQl2dGFyZ2V0LT5yYWlkVm9sdW1lID0gMTsKLQkJCQlkZHZ0cHJpbnRrKChLRVJOX0lORk8KKwkJaWYgKGhkLT5pb2MtPmJ1c190eXBlID09IFNQSSAmJiBzZGV2LT5jaGFubmVsID09IDAgJiYKKwkJICAgIGhkLT5pb2MtPnJhaWRfZGF0YS5pc1JhaWQgJiAoMSA8PCBzZGV2LT5pZCkpIHsKKwkJCXZ0YXJnZXQtPnJhaWRWb2x1bWUgPSAxOworCQkJZGR2dHByaW50aygoS0VSTl9JTkZPCiAJCQkJICAgICJSQUlEIFZvbHVtZSBAIGlkICVkXG4iLCBzZGV2LT5pZCkpOwotCQkJfQotCQl9IGVsc2UgewotCQkJdnRhcmdldC0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfSU5RVUlSWTsKIAkJfQogCX0KIAl2dGFyZ2V0LT5udW1fbHVucysrOwpAQCAtMjMyMSwxOSArMjIzOSw2IEBACiAJdnRhcmdldC0+bHVuc1swXSAmPSB+KDEgPDwgdmRldmljZS0+bHVuKTsKIAl2dGFyZ2V0LT5udW1fbHVucy0tOwogCWlmICh2dGFyZ2V0LT5udW1fbHVucyA9PSAwKSB7Ci0JCW1wdHNjc2loX25lZ290aWF0ZV90b19hc3luX25hcnJvdyhoZCwgdmRldmljZSk7Ci0JCWlmIChoZC0+aW9jLT5idXNfdHlwZSA9PSBTUEkpIHsKLQkJCWlmIChtcHRzY3NpaF9pc19waHlzX2Rpc2soaGQtPmlvYywgdnRhcmdldC0+dGFyZ2V0X2lkKSkgewotCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmZvcmNlRHYgfD0gTVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzM7Ci0JCQl9IGVsc2UgewotCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW3Z0YXJnZXQtPnRhcmdldF9pZF0gPQotCQkJCQlNUFRfU0NTSUNGR19ORUdPVElBVEU7Ci0JCQkJaWYgKCFoZC0+bmVnb052cmFtKSB7Ci0JCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW3Z0YXJnZXQtPnRhcmdldF9pZF0gfD0KLQkJCQkJCU1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FOwotCQkJCX0KLQkJCX0KLQkJfQogCQloZC0+VGFyZ2V0c1tzZGV2LT5pZF0gPSBOVUxMOwogCX0KIAltcHRzY3NpaF9zeW5jaHJvbml6ZV9jYWNoZShoZCwgdmRldmljZSk7CkBAIC0yMzYyLDE4ICsyMjY3LDEzIEBACiAJdnRhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOwogCiAJaWYgKGhkLT5pb2MtPmJ1c190eXBlID09IFNQSSkgewotCQlpZiAodnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZKSB7Ci0JCQlpZiAoISh2dGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1FfWUVTKSkKLQkJCQltYXhfZGVwdGggPSAxOwotCQkJZWxzZSBpZiAoKCh2dGFyZ2V0LT5pbnFfZGF0YVswXSAmIDB4MWYpID09IDB4MDApICYmCi0JCQkgICAgICAgICAodnRhcmdldC0+bWluU3luY0ZhY3RvciA8PSBNUFRfVUxUUkExNjAgKSkKLQkJCQltYXhfZGVwdGggPSBNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdIOwotCQkJZWxzZQotCQkJCW1heF9kZXB0aCA9IE1QVF9TQ1NJX0NNRF9QRVJfREVWX0xPVzsKLQkJfSBlbHNlIHsKLQkJCS8qIGVycm9yIGNhc2UgLSBObyBJbnEuIERhdGEgKi8KKwkJaWYgKCEodnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19RX1lFUykpCiAJCQltYXhfZGVwdGggPSAxOwotCQl9CisJCWVsc2UgaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLICYmCisJCQkgdnRhcmdldC0+bWluU3luY0ZhY3RvciA8PSBNUFRfVUxUUkExNjApCisJCQltYXhfZGVwdGggPSBNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdIOworCQllbHNlCisJCQltYXhfZGVwdGggPSBNUFRfU0NTSV9DTURfUEVSX0RFVl9MT1c7CiAJfSBlbHNlCiAJCW1heF9kZXB0aCA9IE1QVF9TQ1NJX0NNRF9QRVJfREVWX0hJR0g7CiAKQEAgLTI0MjcsOCArMjMyNyw3IEBACiAJbHVuX2luZGV4ID0gKHZkZXZpY2UtPmx1biA+PiA1KTsgIC8qIDMyIGx1bnMgcGVyIGx1bl9pbmRleCAqLwogCWluZGV4ZWRfbHVuID0gKHZkZXZpY2UtPmx1biAlIDMyKTsKIAl2dGFyZ2V0LT5sdW5zW2x1bl9pbmRleF0gfD0gKDEgPDwgaW5kZXhlZF9sdW4pOwotCW1wdHNjc2loX2luaXRUYXJnZXQoaGQsIHZ0YXJnZXQsIHNkZXYtPmx1biwgc2Rldi0+aW5xdWlyeSwKLQkgICAgc2Rldi0+aW5xdWlyeV9sZW4gKTsKKwltcHRzY3NpaF9pbml0VGFyZ2V0KGhkLCB2dGFyZ2V0LCBzZGV2KTsKIAltcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgoc2RldiwgTVBUX1NDU0lfQ01EX1BFUl9ERVZfSElHSCk7CiAKIAlkc3ByaW50aygoTVlJT0Nfc19JTkZPX0ZNVApAQCAtMjU5NywxMCArMjQ5Niw2IEBACiAKIAkJLyogNC4gUmVuZWdvdGlhdGUgdG8gYWxsIGRldmljZXMsIGlmIFNQSQogCQkgKi8KLQkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gU1BJKSB7Ci0JCQlkbmVnb3ByaW50aygoIndyaXRlU0RQMTogQUxMX0lEUyBVU0VfTlZSQU1cbiIpKTsKLQkJCW1wdHNjc2loX3dyaXRlU0RQMShoZCwgMCwgMCwgTVBUX1NDU0lDRkdfQUxMX0lEUyB8IE1QVF9TQ1NJQ0ZHX1VTRV9OVlJBTSk7Ci0JCX0KIAogCQkvKiA1LiBFbmFibGUgbmV3IGNvbW1hbmRzIHRvIGJlIHBvc3RlZAogCQkgKi8KQEAgLTI2MjQsMTMgKzI1MTksNiBAQAogCQkJaGQtPmNtZFB0ciA9IE5VTEw7CiAJCX0KIAotCQkvKiA3LiBTUEk6IFNldCBmbGFnIHRvIGZvcmNlIERWIGFuZCByZS1yZWFkIElPQyBQYWdlIDMKLQkJICovCi0JCWlmIChpb2MtPmJ1c190eXBlID09IFNQSSkgewotCQkJaW9jLT5zcGlfZGF0YS5mb3JjZUR2ID0gTVBUX1NDU0lDRkdfTkVFRF9EViB8IE1QVF9TQ1NJQ0ZHX1JFTE9BRF9JT0NfUEczOwotCQkJZGR2dHByaW50aygoIlNldCByZWxvYWQgSU9DIFBnMyBGbGFnXG4iKSk7Ci0JCX0KLQogCQkvKiA3LiBGQzogUmVzY2FuIGZvciBibG9ja2VkIHJwb3J0cyB3aGljaCBtaWdodCBoYXZlIHJldHVybmVkLgogCQkgKi8KIAkJZWxzZSBpZiAoaW9jLT5idXNfdHlwZSA9PSBGQykgewpAQCAtMjY1OSw3ICsyNTQ3LDcgQEAKIAlpbnQgd29ya19jb3VudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGV2dHByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiTVBUIGV2ZW50ICg9JTAyWGgpIHJvdXRlZCB0byBTQ1NJIGhvc3QgZHJpdmVyIVxuIiwKKwlkZXZ0dmVyYm9zZXByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiTVBUIGV2ZW50ICg9JTAyWGgpIHJvdXRlZCB0byBTQ1NJIGhvc3QgZHJpdmVyIVxuIiwKIAkJCWlvYy0+bmFtZSwgZXZlbnQpKTsKIAogCWlmIChpb2MtPnNoID09IE5VTEwgfHwKQEAgLTI2OTksMTggKzI1ODcsNyBAQAogCQlicmVhazsKIAogCWNhc2UgTVBJX0VWRU5UX0lOVEVHUkFURURfUkFJRDoJCQkvKiAwQiAqLwotCXsKLSNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KLQkJcE1waUV2ZW50RGF0YVJhaWRfdCBwUmFpZEV2ZW50RGF0YSA9Ci0JCSAgICAocE1waUV2ZW50RGF0YVJhaWRfdCkgcEV2UmVwbHktPkRhdGE7Ci0JCS8qIERvbWFpbiBWYWxpZGF0aW9uIE5lZWRlZCAqLwotCQlpZiAoaW9jLT5idXNfdHlwZSA9PSBTUEkgJiYKLQkJICAgIHBSYWlkRXZlbnREYXRhLT5SZWFzb25Db2RlID09Ci0JCSAgICBNUElfRVZFTlRfUkFJRF9SQ19ET01BSU5fVkFMX05FRURFRCkKLQkJCW1wdHNjc2loX3NldF9kdmZsYWdzX3JhaWQoaGQsIHBSYWlkRXZlbnREYXRhLT5QaHlzRGlza051bSk7Ci0jZW5kaWYKIAkJYnJlYWs7Ci0JfQogCiAJY2FzZSBNUElfRVZFTlRfTk9ORToJCQkJLyogMDAgKi8KIAljYXNlIE1QSV9FVkVOVF9MT0dfREFUQToJCQkvKiAwMSAqLwpAQCAtMjcyOSw5ICsyNjA2LDcgQEAKICAqCW1wdHNjc2loX2luaXRUYXJnZXQgLSBUYXJnZXQsIExVTiBhbGxvYy9mcmVlIGZ1bmN0aW9uYWxpdHkuCiAgKglAaGQ6IFBvaW50ZXIgdG8gTVBUX1NDU0lfSE9TVCBzdHJ1Y3R1cmUKICAqCUB2dGFyZ2V0OiBwZXIgdGFyZ2V0IHByaXZhdGUgZGF0YQotICoJQGx1bjogU0NTSSBMVU4gaWQKLSAqCUBkYXRhOiBQb2ludGVyIHRvIGRhdGEKLSAqCUBkbGVuOiBOdW1iZXIgb2YgSU5RVUlSWSBieXRlcworICoJQHNkZXY6IFNDU0kgZGV2aWNlCiAgKgogICoJTk9URTogSXQncyBvbmx5IFNBRkUgdG8gY2FsbCB0aGlzIHJvdXRpbmUgaWYgZGF0YSBwb2ludHMgdG8KICAqCXNhbmUgJiB2YWxpZCBTVEFOREFSRCBJTlFVSVJZIGRhdGEhCkBAIC0yNzQxLDk4ICsyNjE2LDQ2IEBACiAgKgogICovCiBzdGF0aWMgdm9pZAotbXB0c2NzaWhfaW5pdFRhcmdldChNUFRfU0NTSV9IT1NUICpoZCwgVmlydFRhcmdldCAqdnRhcmdldCwgdTggbHVuLCBjaGFyICpkYXRhLCBpbnQgZGxlbikKK21wdHNjc2loX2luaXRUYXJnZXQoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnRUYXJnZXQgKnZ0YXJnZXQsCisJCSAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0JU3BpQ2ZnRGF0YQkqcFNwaTsKLQljaGFyCQlkYXRhXzU2OwotCWludAkJaW5xX2xlbjsKLQogCWRpbml0cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJpbml0VGFyZ2V0IGJ1cz0lZCBpZD0lZCBsdW49JWQgaGQ9JXBcbiIsCiAJCWhkLT5pb2MtPm5hbWUsIHZ0YXJnZXQtPmJ1c19pZCwgdnRhcmdldC0+dGFyZ2V0X2lkLCBsdW4sIGhkKSk7CiAKLQkvKgotCSAqIElmIHRoZSBwZXJpcGhlcmFsIHF1YWxpZmllciBmaWx0ZXIgaXMgZW5hYmxlZCB0aGVuIGlmIHRoZSB0YXJnZXQgcmVwb3J0cyBhIDB4MQotCSAqIChpLmUuIFRoZSB0YXJnZXIgaXMgY2FwYWJsZSBvZiBzdXBwb3J0aW5nIHRoZSBzcGVjaWZpZWQgcGVyaXBoZXJhbCBkZXZpY2UgdHlwZQotCSAqIG9uIHRoaXMgbG9naWNhbCB1bml0OyBob3dldmVyLCB0aGUgcGh5c2ljYWwgZGV2aWNlIGlzIG5vdCBjdXJyZW50bHkgY29ubmVjdGVkCi0JICogdG8gdGhpcyBsb2dpY2FsIHVuaXQpIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgMHgzIChpLmUuIFRoZSB0YXJnZXQgaXMgbm90Ci0JICogY2FwYWJsZSBvZiBzdXBwb3J0aW5nIGEgcGh5c2ljYWwgZGV2aWNlIG9uIHRoaXMgbG9naWNhbCB1bml0KS4gVGhpcyBpcyB0byB3b3JrCi0JICogYXJvdW5kIGEgYnVnIGluIHRoIGVtaWQtbGF5ZXIgaW4gc29tZSBkaXN0cmlidXRpb25zIGluIHdoaWNoIHRoZSBtaWQtbGF5ZXIgd2lsbAotCSAqIGNvbnRpbnVlIHRvIHRyeSB0byBjb21tdW5pY2F0ZSB0byB0aGUgTFVOIGFuZCBldm50dWFsbHkgY3JlYXRlIGEgZHVtbXkgTFVOLgotCSovCi0JaWYgKGhkLT5tcHRfcHFfZmlsdGVyICYmIGRsZW4gJiYgKGRhdGFbMF0gJiAweEUwKSkKLQkJZGF0YVswXSB8PSAweDQwOwotCiAJLyogSXMgTFVOIHN1cHBvcnRlZD8gSWYgc28sIHVwcGVyIDIgYml0cyB3aWxsIGJlIDAKIAkqIGluIGZpcnN0IGJ5dGUgb2YgaW5xdWlyeSBkYXRhLgogCSovCi0JaWYgKGRhdGFbMF0gJiAweGUwKQorCWlmIChzZGV2LT5pbnFfcGVyaXBoX3F1YWwgIT0gMCkKIAkJcmV0dXJuOwogCiAJaWYgKHZ0YXJnZXQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaWYgKGRhdGEpCi0JCXZ0YXJnZXQtPnR5cGUgPSBkYXRhWzBdOworCXZ0YXJnZXQtPnR5cGUgPSBzZGV2LT50eXBlOwogCiAJaWYgKGhkLT5pb2MtPmJ1c190eXBlICE9IFNQSSkKIAkJcmV0dXJuOwogCi0JaWYgKChkYXRhWzBdID09IFRZUEVfUFJPQ0VTU09SKSAmJiAoaGQtPmlvYy0+c3BpX2RhdGEuU2FmX1RlKSkgeworCWlmICgoc2Rldi0+dHlwZSA9PSBUWVBFX1BST0NFU1NPUikgJiYgKGhkLT5pb2MtPnNwaV9kYXRhLlNhZl9UZSkpIHsKIAkJLyogVHJlYXQgYWxsIFByb2Nlc3NvcnMgYXMgU0FGLVRFIGlmCiAJCSAqIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgc2V0ICovCiAJCXZ0YXJnZXQtPnRmbGFncyB8PSBNUFRfVEFSR0VUX0ZMQUdTX1NBRl9URV9JU1NVRUQ7CiAJCW1wdHNjc2loX3dyaXRlSU9DUGFnZTQoaGQsIHZ0YXJnZXQtPnRhcmdldF9pZCwgdnRhcmdldC0+YnVzX2lkKTsKLQl9ZWxzZSBpZiAoKGRhdGFbMF0gPT0gVFlQRV9QUk9DRVNTT1IpICYmCisJfWVsc2UgaWYgKChzZGV2LT50eXBlID09IFRZUEVfUFJPQ0VTU09SKSAmJgogCQkhKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfU0FGX1RFX0lTU1VFRCApKSB7Ci0JCWlmICggZGxlbiA+IDQ5ICkgewotCQkJdnRhcmdldC0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfSU5RVUlSWTsKLQkJCWlmICggZGF0YVs0NF0gPT0gJ1MnICYmCi0JCQkgICAgIGRhdGFbNDVdID09ICdBJyAmJgotCQkJICAgICBkYXRhWzQ2XSA9PSAnRicgJiYKLQkJCSAgICAgZGF0YVs0N10gPT0gJy0nICYmCi0JCQkgICAgIGRhdGFbNDhdID09ICdUJyAmJgotCQkJICAgICBkYXRhWzQ5XSA9PSAnRScgKSB7CisJCWlmIChzZGV2LT5pbnF1aXJ5X2xlbiA+IDQ5ICkgeworCQkJaWYgKHNkZXYtPmlucXVpcnlbNDRdID09ICdTJyAmJgorCQkJICAgIHNkZXYtPmlucXVpcnlbNDVdID09ICdBJyAmJgorCQkJICAgIHNkZXYtPmlucXVpcnlbNDZdID09ICdGJyAmJgorCQkJICAgIHNkZXYtPmlucXVpcnlbNDddID09ICctJyAmJgorCQkJICAgIHNkZXYtPmlucXVpcnlbNDhdID09ICdUJyAmJgorCQkJICAgIHNkZXYtPmlucXVpcnlbNDldID09ICdFJyApIHsKIAkJCQl2dGFyZ2V0LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19TQUZfVEVfSVNTVUVEOwogCQkJCW1wdHNjc2loX3dyaXRlSU9DUGFnZTQoaGQsIHZ0YXJnZXQtPnRhcmdldF9pZCwgdnRhcmdldC0+YnVzX2lkKTsKIAkJCX0KIAkJfQogCX0KLQlpZiAoISh2dGFyZ2V0LT50ZmxhZ3MgJiBNUFRfVEFSR0VUX0ZMQUdTX1ZBTElEX0lOUVVJUlkpKSB7Ci0JCWlucV9sZW4gPSBkbGVuIDwgOCA/IGRsZW4gOiA4OwotCQltZW1jcHkgKHZ0YXJnZXQtPmlucV9kYXRhLCBkYXRhLCBpbnFfbGVuKTsKLQkJLyogSWYgaGF2ZSBub3QgZG9uZSBEViwgc2V0IHRoZSBEViBmbGFnLgotCQkgKi8KLQkJcFNwaSA9ICZoZC0+aW9jLT5zcGlfZGF0YTsKLQkJaWYgKChkYXRhWzBdID09IFRZUEVfVEFQRSkgfHwgKGRhdGFbMF0gPT0gVFlQRV9QUk9DRVNTT1IpKSB7Ci0JCQlpZiAocFNwaS0+ZHZTdGF0dXNbdnRhcmdldC0+dGFyZ2V0X2lkXSAmIE1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FKQotCQkJCXBTcGktPmR2U3RhdHVzW3Z0YXJnZXQtPnRhcmdldF9pZF0gfD0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKLQkJfQotCQl2dGFyZ2V0LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19WQUxJRF9JTlFVSVJZOwotCi0JCWRhdGFfNTYgPSAweDBGOyAgLyogRGVmYXVsdCB0byBmdWxsIGNhcGFiaWxpdGllcyBpZiBJbnEgZGF0YSBsZW5ndGggaXMgPCA1NyAqLwotCQlpZiAoZGxlbiA+IDU2KSB7Ci0JCQlpZiAoICghKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfNTYpKSkgewotCQkJLyogVXBkYXRlIHRoZSB0YXJnZXQgY2FwYWJpbGl0aWVzCi0JCQkgKi8KLQkJCQlkYXRhXzU2ID0gZGF0YVs1Nl07Ci0JCQkJdnRhcmdldC0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfVkFMSURfNTY7Ci0JCQl9Ci0JCX0KLQkJbXB0c2NzaWhfc2V0VGFyZ2V0TmVnb1Bhcm1zKGhkLCB2dGFyZ2V0LCBkYXRhXzU2KTsKLQl9IGVsc2UgewotCQkvKiBJbml0aWFsIElucXVpcnkgbWF5IG5vdCByZXF1ZXN0IGVub3VnaCBkYXRhIGJ5dGVzIHRvCi0JCSAqIG9idGFpbiBieXRlIDU3LiAgRFYgd2lsbDsgaWYgdGFyZ2V0IGRvZXNuJ3QgcmV0dXJuCi0JCSAqIGF0IGxlYXN0IDU3IGJ5dGVzLCBkYXRhWzU2XSB3aWxsIGJlIHplcm8uICovCi0JCWlmIChkbGVuID4gNTYpIHsKLQkJCWlmICggKCEodnRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WQUxJRF81NikpKSB7Ci0JCQkvKiBVcGRhdGUgdGhlIHRhcmdldCBjYXBhYmlsaXRpZXMKLQkJCSAqLwotCQkJCWRhdGFfNTYgPSBkYXRhWzU2XTsKLQkJCQl2dGFyZ2V0LT50ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19WQUxJRF81NjsKLQkJCQltcHRzY3NpaF9zZXRUYXJnZXROZWdvUGFybXMoaGQsIHZ0YXJnZXQsIGRhdGFfNTYpOwotCQkJfQotCQl9Ci0JfQorCW1wdHNjc2loX3NldFRhcmdldE5lZ29QYXJtcyhoZCwgdnRhcmdldCwgc2Rldik7CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KQEAgLTI4NDIsNjYgKzI2NjUsNTEgQEAKICAqCiAgKi8KIHN0YXRpYyB2b2lkCi1tcHRzY3NpaF9zZXRUYXJnZXROZWdvUGFybXMoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnRUYXJnZXQgKnRhcmdldCwgY2hhciBieXRlNTYpCittcHRzY3NpaF9zZXRUYXJnZXROZWdvUGFybXMoTVBUX1NDU0lfSE9TVCAqaGQsIFZpcnRUYXJnZXQgKnRhcmdldCwKKwkJCSAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJU3BpQ2ZnRGF0YSAqcHNwaV9kYXRhID0gJmhkLT5pb2MtPnNwaV9kYXRhOwogCWludCAgaWQgPSAoaW50KSB0YXJnZXQtPnRhcmdldF9pZDsKIAlpbnQgIG52cmFtOwotCVZpcnRUYXJnZXQJKnZ0YXJnZXQ7Ci0JaW50IGlpOwogCXU4IHdpZHRoID0gTVBUX05BUlJPVzsKIAl1OCBmYWN0b3IgPSBNUFRfQVNZTkM7CiAJdTggb2Zmc2V0ID0gMDsKLQl1OCB2ZXJzaW9uLCBuZmFjdG9yOworCXU4IG5mYWN0b3I7CiAJdTggbm9RYXMgPSAxOwogCiAJdGFyZ2V0LT5uZWdvRmxhZ3MgPSBwc3BpX2RhdGEtPm5vUWFzOwogCi0JLyogbm9RYXMgPT0gMCA9PiBkZXZpY2Ugc3VwcG9ydHMgUUFTLiBOZWVkIGJ5dGUgNTYgb2YgSW5xIHRvIGRldGVybWluZQotCSAqIHN1cHBvcnQuIElmIGF2YWlsYWJsZSwgZGVmYXVsdCBRQVMgdG8gb2ZmIGFuZCBhbGxvdyBlbmFibGluZy4KLQkgKiBJZiBub3QgYXZhaWxhYmxlLCBkZWZhdWx0IFFBUyB0byBvbiwgdHVybiBvZmYgZm9yIG5vbi1kaXNrcy4KLQkgKi8KKwkvKiBub1FhcyA9PSAwID0+IGRldmljZSBzdXBwb3J0cyBRQVMuICovCiAKLQkvKiBTZXQgZmxhZ3MgYmFzZWQgb24gSW5xdWlyeSBkYXRhCi0JICovCi0JdmVyc2lvbiA9IHRhcmdldC0+aW5xX2RhdGFbMl0gJiAweDA3OwotCWlmICh2ZXJzaW9uIDwgMikgeworCWlmIChzZGV2LT5zY3NpX2xldmVsIDwgU0NTSV8yKSB7CiAJCXdpZHRoID0gMDsKIAkJZmFjdG9yID0gTVBUX1VMVFJBMjsKIAkJb2Zmc2V0ID0gcHNwaV9kYXRhLT5tYXhTeW5jT2Zmc2V0OwogCQl0YXJnZXQtPnRmbGFncyAmPSB+TVBUX1RBUkdFVF9GTEFHU19RX1lFUzsKIAl9IGVsc2UgewotCQlpZiAodGFyZ2V0LT5pbnFfZGF0YVs3XSAmIDB4MjApIHsKKwkJaWYgKHNjc2lfZGV2aWNlX3dpZGUoc2RldikpIHsKIAkJCXdpZHRoID0gMTsKIAkJfQogCi0JCWlmICh0YXJnZXQtPmlucV9kYXRhWzddICYgMHgxMCkgeworCQlpZiAoc2NzaV9kZXZpY2Vfc3luYyhzZGV2KSkgewogCQkJZmFjdG9yID0gcHNwaV9kYXRhLT5taW5TeW5jRmFjdG9yOwotCQkJaWYgKHRhcmdldC0+dGZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WQUxJRF81NikgewotCQkJCS8qIGJpdHMgMiAmIDMgc2hvdyBDbG9ja2luZyBzdXBwb3J0ICovCi0JCQkJaWYgKChieXRlNTYgJiAweDBDKSA9PSAwKQorCQkJaWYgKCFzY3NpX2RldmljZV9kdChzZGV2KSkKIAkJCQkJZmFjdG9yID0gTVBUX1VMVFJBMjsKKwkJCWVsc2UgeworCQkJCWlmICghc2NzaV9kZXZpY2VfaXVzKHNkZXYpICYmCisJCQkJICAgICFzY3NpX2RldmljZV9xYXMoc2RldikpCisJCQkJCWZhY3RvciA9IE1QVF9VTFRSQTE2MDsKIAkJCQllbHNlIHsKLQkJCQkJaWYgKChieXRlNTYgJiAweDAzKSA9PSAwKQotCQkJCQkJZmFjdG9yID0gTVBUX1VMVFJBMTYwOwotCQkJCQllbHNlIHsKLQkJCQkJCWZhY3RvciA9IE1QVF9VTFRSQTMyMDsKLQkJCQkJCWlmIChieXRlNTYgJiAweDAyKQotCQkJCQkJewotCQkJCQkJCWRkdnRwcmludGsoKEtFUk5fSU5GTyAiRW5hYmxpbmcgUUFTIGR1ZSB0byBieXRlNTY9JTAyeCBvbiBpZD0lZCFcbiIsIGJ5dGU1NiwgaWQpKTsKLQkJCQkJCQlub1FhcyA9IDA7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAodGFyZ2V0LT5pbnFfZGF0YVswXSA9PSBUWVBFX1RBUEUpIHsKLQkJCQkJCQlpZiAoYnl0ZTU2ICYgMHgwMSkKLQkJCQkJCQkJdGFyZ2V0LT5uZWdvRmxhZ3MgfD0gTVBUX1RBUEVfTkVHT19JRFA7Ci0JCQkJCQl9CisJCQkJCWZhY3RvciA9IE1QVF9VTFRSQTMyMDsKKwkJCQkJaWYgKHNjc2lfZGV2aWNlX3FhcyhzZGV2KSkgeworCQkJCQkJZGR2dHByaW50aygoS0VSTl9JTkZPICJFbmFibGluZyBRQVMgZHVlIHRvIGJ5dGU1Nj0lMDJ4IG9uIGlkPSVkIVxuIiwgYnl0ZTU2LCBpZCkpOworCQkJCQkJbm9RYXMgPSAwOwogCQkJCQl9CisJCQkJCWlmIChzZGV2LT50eXBlID09IFRZUEVfVEFQRSAmJgorCQkJCQkgICAgc2NzaV9kZXZpY2VfaXVzKHNkZXYpKQorCQkJCQkJdGFyZ2V0LT5uZWdvRmxhZ3MgfD0gTVBUX1RBUEVfTkVHT19JRFA7CiAJCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlkZHZ0cHJpbnRrKChLRVJOX0lORk8gIkVuYWJsaW5nIFFBUyBvbiBpZD0lZCBkdWUgdG8gflRBUkdFVF9GTEFHU19WQUxJRF81NiFcbiIsIGlkKSk7Ci0JCQkJbm9RYXMgPSAwOwogCQkJfQotCiAJCQlvZmZzZXQgPSBwc3BpX2RhdGEtPm1heFN5bmNPZmZzZXQ7CiAKIAkJCS8qIElmIFJBSUQsIG5ldmVyIGRpc2FibGUgUUFTCkBAIC0yOTE5LDcgKzI3MjcsNyBAQAogCQl9CiAJfQogCi0JaWYgKCAodGFyZ2V0LT5pbnFfZGF0YVs3XSAmIDB4MDIpID09IDApIHsKKwlpZiAoIXNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpIHsKIAkJdGFyZ2V0LT50ZmxhZ3MgJj0gfk1QVF9UQVJHRVRfRkxBR1NfUV9ZRVM7CiAJfQogCkBAIC0yOTc3LDMwNSArMjc4NSwyMyBAQAogCWlmICggZmFjdG9yID4gTVBUX1VMVFJBMzIwICkKIAkJbm9RYXMgPSAwOwogCi0JLyogR0VNLCBwcm9jZXNzb3IgV09SS0FST1VORAotCSAqLwotCWlmICgodGFyZ2V0LT5pbnFfZGF0YVswXSA9PSBUWVBFX1BST0NFU1NPUikgfHwgKHRhcmdldC0+aW5xX2RhdGFbMF0gPiAweDA4KSkgewotCQl0YXJnZXQtPm5lZ29GbGFncyB8PSAoTVBUX1RBUkdFVF9OT19ORUdPX1dJREUgfCBNUFRfVEFSR0VUX05PX05FR09fU1lOQyk7Ci0JCXBzcGlfZGF0YS0+ZHZTdGF0dXNbaWRdIHw9IE1QVF9TQ1NJQ0ZHX0JMS19ORUdPOwotCX0gZWxzZSB7Ci0JCWlmIChub1FhcyAmJiAocHNwaV9kYXRhLT5ub1FhcyA9PSAwKSkgewotCQkJcHNwaV9kYXRhLT5ub1FhcyB8PSBNUFRfVEFSR0VUX05PX05FR09fUUFTOwotCQkJdGFyZ2V0LT5uZWdvRmxhZ3MgfD0gTVBUX1RBUkdFVF9OT19ORUdPX1FBUzsKKwlpZiAobm9RYXMgJiYgKHBzcGlfZGF0YS0+bm9RYXMgPT0gMCkpIHsKKwkJcHNwaV9kYXRhLT5ub1FhcyB8PSBNUFRfVEFSR0VUX05PX05FR09fUUFTOworCQl0YXJnZXQtPm5lZ29GbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fUUFTOwogCi0JCQkvKiBEaXNhYmxlIFFBUyBpbiBhIG1peGVkIGNvbmZpZ3VyYXRpb24gY2FzZQotCSAJCSovCisJCS8qIERpc2FibGUgUUFTIGluIGEgbWl4ZWQgY29uZmlndXJhdGlvbiBjYXNlCisJCSAqLwogCi0JCQlkZHZ0cHJpbnRrKChLRVJOX0lORk8gIkRpc2FibGluZyBRQVMgZHVlIHRvIG5vUWFzPSUwMnggb24gaWQ9JWQhXG4iLCBub1FhcywgaWQpKTsKLQkJCWZvciAoaWkgPSAwOyBpaSA8IGlkOyBpaSsrKSB7Ci0JCQkJaWYgKCAodnRhcmdldCA9IGhkLT5UYXJnZXRzW2lpXSkgKSB7Ci0JCQkJCXZ0YXJnZXQtPm5lZ29GbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fUUFTOwotCQkJCQltcHRzY3NpaF93cml0ZVNEUDEoaGQsIDAsIGlpLCB2dGFyZ2V0LT5uZWdvRmxhZ3MpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCS8qIFdyaXRlIFNEUDEgb24gdGhpcyBJL08gdG8gdGhpcyB0YXJnZXQgKi8KLQlpZiAocHNwaV9kYXRhLT5kdlN0YXR1c1tpZF0gJiBNUFRfU0NTSUNGR19ORUdPVElBVEUpIHsKLQkJZGR2dHByaW50aygoS0VSTl9JTkZPICJNUFRfU0NTSUNGR19ORUdPVElBVEUgb24gaWQ9JWQhXG4iLCBpZCkpOwotCQltcHRzY3NpaF93cml0ZVNEUDEoaGQsIDAsIGlkLCBoZC0+bmVnb052cmFtKTsKLQkJcHNwaV9kYXRhLT5kdlN0YXR1c1tpZF0gJj0gfk1QVF9TQ1NJQ0ZHX05FR09USUFURTsKLQl9IGVsc2UgaWYgKHBzcGlfZGF0YS0+ZHZTdGF0dXNbaWRdICYgTVBUX1NDU0lDRkdfQkxLX05FR08pIHsKLQkJZGR2dHByaW50aygoS0VSTl9JTkZPICJNUFRfU0NTSUNGR19CTEtfTkVHTyBvbiBpZD0lZCFcbiIsIGlkKSk7Ci0JCW1wdHNjc2loX3dyaXRlU0RQMShoZCwgMCwgaWQsIE1QVF9TQ1NJQ0ZHX0JMS19ORUdPKTsKLQkJcHNwaV9kYXRhLT5kdlN0YXR1c1tpZF0gJj0gfk1QVF9TQ1NJQ0ZHX0JMS19ORUdPOworCQlkZHZ0cHJpbnRrKChLRVJOX0lORk8gIkRpc2FibGluZyBRQVMgZHVlIHRvIG5vUWFzPSUwMnggb24gaWQ9JWQhXG4iLCBub1FhcywgaWQpKTsKIAl9CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KLS8qCi0gKiBJZiBubyBUYXJnZXQsIGJ1cyByZXNldCBvbiAxc3QgSS9PLiBTZXQgdGhlIGZsYWcgdG8KLSAqIHByZXZlbnQgYW55IGZ1dHVyZSBuZWdvdGlhdGlvbnMgdG8gdGhpcyBkZXZpY2UuCi0gKi8KLXN0YXRpYyB2b2lkCi1tcHRzY3NpaF9ub19uZWdvdGlhdGUoTVBUX1NDU0lfSE9TVCAqaGQsIHN0cnVjdCBzY3NpX2NtbmQgKnNjKQotewotCVZpcnREZXZpY2UJKnZkZXY7Ci0KLQlpZiAoKHZkZXYgPSBzYy0+ZGV2aWNlLT5ob3N0ZGF0YSkgIT0gTlVMTCkKLQkJaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbdmRldi0+dGFyZ2V0X2lkXSB8PSBNUFRfU0NTSUNGR19CTEtfTkVHTzsKLQlyZXR1cm47Ci19CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCiAgKiAgU0NTSSBDb25maWcgUGFnZSBmdW5jdGlvbmFsaXR5IC4uLgogICovCi0vKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCi0vKgltcHRzY3NpaF9zZXREZXZpY2VQYWdlMUZsYWdzICAtIGFkZCBSZXF1ZXN0ZWQgYW5kIENvbmZpZ3VyYXRpb24gZmllbGRzIGZsYWdzCi0gKgliYXNlZCBvbiB3aWR0aCwgZmFjdG9yIGFuZCBvZmZzZXQgcGFyYW1ldGVycy4KLSAqCUB3aWR0aDogYnVzIHdpZHRoCi0gKglAZmFjdG9yOiBzeW5jIGZhY3RvcgotICoJQG9mZnNldDogc3luYyBvZmZzZXQKLSAqCUByZXF1ZXN0ZWRQdHI6IHBvaW50ZXIgdG8gcmVxdWVzdGVkIHZhbHVlcyAodXBkYXRlZCkKLSAqCUBjb25maWd1cmF0aW9uUHRyOiBwb2ludGVyIHRvIGNvbmZpZ3VyYXRpb24gdmFsdWVzICh1cGRhdGVkKQotICoJQGZsYWdzOiBmbGFncyB0byBibG9jayBXRFRSIG9yIFNEVFIgbmVnb3RpYXRpb24KLSAqCi0gKglSZXR1cm46IE5vbmUuCi0gKgotICoJUmVtYXJrOiBDYWxsZWQgYnkgd3JpdGVTRFAxIGFuZCBfZHZfcGFyYW1zCi0gKi8KLXN0YXRpYyB2b2lkCi1tcHRzY3NpaF9zZXREZXZpY2VQYWdlMUZsYWdzICh1OCB3aWR0aCwgdTggZmFjdG9yLCB1OCBvZmZzZXQsIGludCAqcmVxdWVzdGVkUHRyLCBpbnQgKmNvbmZpZ3VyYXRpb25QdHIsIHU4IGZsYWdzKQotewotCXU4IG5vd2lkZSA9IGZsYWdzICYgTVBUX1RBUkdFVF9OT19ORUdPX1dJREU7Ci0JdTggbm9zeW5jID0gZmxhZ3MgJiBNUFRfVEFSR0VUX05PX05FR09fU1lOQzsKLQotCSpjb25maWd1cmF0aW9uUHRyID0gMDsKLQkqcmVxdWVzdGVkUHRyID0gd2lkdGggPyBNUElfU0NTSURFVlBBR0UxX1JQX1dJREUgOiAwOwotCSpyZXF1ZXN0ZWRQdHIgfD0gKG9mZnNldCA8PCAxNikgfCAoZmFjdG9yIDw8IDgpOwotCi0JaWYgKHdpZHRoICYmIG9mZnNldCAmJiAhbm93aWRlICYmICFub3N5bmMpIHsKLQkJaWYgKGZhY3RvciA8IE1QVF9VTFRSQTE2MCkgewotCQkJKnJlcXVlc3RlZFB0ciB8PSAoTVBJX1NDU0lERVZQQUdFMV9SUF9JVSArIE1QSV9TQ1NJREVWUEFHRTFfUlBfRFQpOwotCQkJaWYgKChmbGFncyAmIE1QVF9UQVJHRVRfTk9fTkVHT19RQVMpID09IDApCi0JCQkJKnJlcXVlc3RlZFB0ciB8PSBNUElfU0NTSURFVlBBR0UxX1JQX1FBUzsKLQkJCWlmIChmbGFncyAmIE1QVF9UQVBFX05FR09fSURQKQotCQkJCSpyZXF1ZXN0ZWRQdHIgfD0gMHgwODAwMDAwMDsKLQkJfSBlbHNlIGlmIChmYWN0b3IgPCBNUFRfVUxUUkEyKSB7Ci0JCQkqcmVxdWVzdGVkUHRyIHw9IE1QSV9TQ1NJREVWUEFHRTFfUlBfRFQ7Ci0JCX0KLQl9Ci0KLQlpZiAobm93aWRlKQotCQkqY29uZmlndXJhdGlvblB0ciB8PSBNUElfU0NTSURFVlBBR0UxX0NPTkZfV0RUUl9ESVNBTExPV0VEOwotCi0JaWYgKG5vc3luYykKLQkJKmNvbmZpZ3VyYXRpb25QdHIgfD0gTVBJX1NDU0lERVZQQUdFMV9DT05GX1NEVFJfRElTQUxMT1dFRDsKLQotCXJldHVybjsKLX0KLQotLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwotLyoJbXB0c2NzaWhfd3JpdGVTRFAxICAtIHdyaXRlIFNDU0kgRGV2aWNlIFBhZ2UgMQotICoJQGhkOiBQb2ludGVyIHRvIGEgU0NTSSBIb3N0IFN0cnVjdXRyZQotICoJQHBvcnRudW06IElPQyBwb3J0IG51bWJlcgotICoJQHRhcmdldF9pZDogd3JpdGVTRFAxIGZvciBzaW5nbGUgSUQKLSAqCUBmbGFnczogTVBUX1NDU0lDRkdfQUxMX0lEUywgTVBUX1NDU0lDRkdfVVNFX05WUkFNLCBNUFRfU0NTSUNGR19CTEtfTkVHTwotICoKLSAqCVJldHVybjogLUVGQVVMVCBpZiByZWFkIG9mIGNvbmZpZyBwYWdlIGhlYWRlciBmYWlscwotICoJCW9yIDAgaWYgc3VjY2Vzcy4KLSAqCi0gKglSZW1hcms6IElmIGEgdGFyZ2V0IGhhcyBiZWVuIGZvdW5kLCB0aGUgc2V0dGluZ3MgZnJvbSB0aGUKLSAqCQl0YXJnZXQgc3RydWN0dXJlIGFyZSB1c2VkLCBlbHNlIHRoZSBkZXZpY2UgaXMgc2V0Ci0gKgkJdG8gYXN5bmMvbmFycm93LgotICoKLSAqCVJlbWFyazogQ2FsbGVkIGR1cmluZyBpbml0IGFuZCBhZnRlciBhIEZXIHJlbG9hZC4KLSAqCVJlbWFyazogV2UgZG8gbm90IHdhaXQgZm9yIGEgcmV0dXJuLCB3cml0ZSBwYWdlcyBzZXF1ZW50aWFsbHkuCi0gKi8KLXN0YXRpYyBpbnQKLW1wdHNjc2loX3dyaXRlU0RQMShNUFRfU0NTSV9IT1NUICpoZCwgaW50IHBvcnRudW0sIGludCB0YXJnZXRfaWQsIGludCBmbGFncykKLXsKLQlNUFRfQURBUFRFUgkJKmlvYyA9IGhkLT5pb2M7Ci0JQ29uZmlnX3QJCSpwUmVxOwotCVNDU0lEZXZpY2VQYWdlMV90CSpwRGF0YTsKLQlWaXJ0VGFyZ2V0CQkqdnRhcmdldD1OVUxMOwotCU1QVF9GUkFNRV9IRFIJCSptZjsKLQlkbWFfYWRkcl90CQkgZGF0YURtYTsKLQl1MTYJCQkgcmVxX2lkeDsKLQl1MzIJCQkgZnJhbWVPZmZzZXQ7Ci0JdTMyCQkJIHJlcXVlc3RlZCwgY29uZmlndXJhdGlvbiwgZmxhZ3NMZW5ndGg7Ci0JaW50CQkJIGlpLCBudnJhbTsKLQlpbnQJCQkgaWQgPSAwLCBtYXhpZCA9IDA7Ci0JdTgJCQkgd2lkdGg7Ci0JdTgJCQkgZmFjdG9yOwotCXU4CQkJIG9mZnNldDsKLQl1OAkJCSBidXMgPSAwOwotCXU4CQkJIG5lZ29GbGFnczsKLQl1OAkJCSBtYXh3aWR0aCwgbWF4b2Zmc2V0LCBtYXhmYWN0b3I7Ci0KLQlpZiAoaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGZsYWdzICYgTVBUX1NDU0lDRkdfQUxMX0lEUykgewotCQlpZCA9IDA7Ci0JCW1heGlkID0gaW9jLT5zaC0+bWF4X2lkIC0gMTsKLQl9IGVsc2UgaWYgKGlvYy0+c2gpIHsKLQkJaWQgPSB0YXJnZXRfaWQ7Ci0JCW1heGlkID0gbWluX3QoaW50LCBpZCwgaW9jLT5zaC0+bWF4X2lkIC0gMSk7Ci0JfQotCi0JZm9yICg7IGlkIDw9IG1heGlkOyBpZCsrKSB7Ci0KLQkJaWYgKGlkID09IGlvYy0+cGZhY3RzW3BvcnRudW1dLlBvcnRTQ1NJSUQpCi0JCQljb250aW51ZTsKLQotCQkvKiBVc2UgTlZSQU0gdG8gZ2V0IGFkYXB0ZXIgYW5kIHRhcmdldCBtYXhpbXVtcwotCQkgKiBEYXRhIG92ZXItcmlkZW4gYnkgdGFyZ2V0IHN0cnVjdHVyZSBpbmZvcm1hdGlvbiwgaWYgcHJlc2VudAotCQkgKi8KLQkJbWF4d2lkdGggPSBpb2MtPnNwaV9kYXRhLm1heEJ1c1dpZHRoOwotCQltYXhvZmZzZXQgPSBpb2MtPnNwaV9kYXRhLm1heFN5bmNPZmZzZXQ7Ci0JCW1heGZhY3RvciA9IGlvYy0+c3BpX2RhdGEubWluU3luY0ZhY3RvcjsKLQkJaWYgKGlvYy0+c3BpX2RhdGEubnZyYW0gJiYgKGlvYy0+c3BpX2RhdGEubnZyYW1baWRdICE9IE1QVF9IT1NUX05WUkFNX0lOVkFMSUQpKSB7Ci0JCQludnJhbSA9IGlvYy0+c3BpX2RhdGEubnZyYW1baWRdOwotCi0JCQlpZiAobWF4d2lkdGgpCi0JCQkJbWF4d2lkdGggPSBudnJhbSAmIE1QVF9OVlJBTV9XSURFX0RJU0FCTEUgPyAwIDogMTsKLQotCQkJaWYgKG1heG9mZnNldCA+IDApIHsKLQkJCQltYXhmYWN0b3IgPSAobnZyYW0gJiBNUFRfTlZSQU1fU1lOQ19NQVNLKSA+PiA4OwotCQkJCWlmIChtYXhmYWN0b3IgPT0gMCkgewotCQkJCQkvKiBLZXkgZm9yIGFzeW5jICovCi0JCQkJCW1heGZhY3RvciA9IE1QVF9BU1lOQzsKLQkJCQkJbWF4b2Zmc2V0ID0gMDsKLQkJCQl9IGVsc2UgaWYgKG1heGZhY3RvciA8IGlvYy0+c3BpX2RhdGEubWluU3luY0ZhY3RvcikgewotCQkJCQltYXhmYWN0b3IgPSBpb2MtPnNwaV9kYXRhLm1pblN5bmNGYWN0b3I7Ci0JCQkJfQotCQkJfSBlbHNlCi0JCQkJbWF4ZmFjdG9yID0gTVBUX0FTWU5DOwotCQl9Ci0KLQkJLyogU2V0IHRoZSBuZWdvdGlhdGlvbiBmbGFncy4KLQkJICovCi0JCW5lZ29GbGFncyA9IGlvYy0+c3BpX2RhdGEubm9RYXM7Ci0JCWlmICghbWF4d2lkdGgpCi0JCQluZWdvRmxhZ3MgfD0gTVBUX1RBUkdFVF9OT19ORUdPX1dJREU7Ci0KLQkJaWYgKCFtYXhvZmZzZXQpCi0JCQluZWdvRmxhZ3MgfD0gTVBUX1RBUkdFVF9OT19ORUdPX1NZTkM7Ci0KLQkJaWYgKGZsYWdzICYgTVBUX1NDU0lDRkdfVVNFX05WUkFNKSB7Ci0JCQl3aWR0aCA9IG1heHdpZHRoOwotCQkJZmFjdG9yID0gbWF4ZmFjdG9yOwotCQkJb2Zmc2V0ID0gbWF4b2Zmc2V0OwotCQl9IGVsc2UgewotCQkJd2lkdGggPSAwOwotCQkJZmFjdG9yID0gTVBUX0FTWU5DOwotCQkJb2Zmc2V0ID0gMDsKLQkJCS8vbmVnb0ZsYWdzID0gMDsKLQkJCS8vbmVnb0ZsYWdzID0gTVBUX1RBUkdFVF9OT19ORUdPX1NZTkM7Ci0JCX0KLQotCQkvKiBJZiBpZCBpcyBub3QgYSByYWlkIHZvbHVtZSwgZ2V0IHRoZSB1cGRhdGVkCi0JCSAqIHRyYW5zbWlzc2lvbiBzZXR0aW5ncyBmcm9tIHRoZSB0YXJnZXQgc3RydWN0dXJlLgotCQkgKi8KLQkJaWYgKGhkLT5UYXJnZXRzICYmICh2dGFyZ2V0ID0gaGQtPlRhcmdldHNbaWRdKSAmJiAhdnRhcmdldC0+cmFpZFZvbHVtZSkgewotCQkJd2lkdGggPSB2dGFyZ2V0LT5tYXhXaWR0aDsKLQkJCWZhY3RvciA9IHZ0YXJnZXQtPm1pblN5bmNGYWN0b3I7Ci0JCQlvZmZzZXQgPSB2dGFyZ2V0LT5tYXhPZmZzZXQ7Ci0JCQluZWdvRmxhZ3MgPSB2dGFyZ2V0LT5uZWdvRmxhZ3M7Ci0JCX0KLQotI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgotCQkvKiBGb3JjZSB0byBhc3luYyBhbmQgbmFycm93IGlmIERWIGhhcyBub3QgYmVlbiBleGVjdXRlZAotCQkgKiBmb3IgdGhpcyBJRAotCQkgKi8KLQkJaWYgKChoZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1tpZF0gJiBNUFRfU0NTSUNGR19EVl9OT1RfRE9ORSkgIT0gMCkgewotCQkJd2lkdGggPSAwOwotCQkJZmFjdG9yID0gTVBUX0FTWU5DOwotCQkJb2Zmc2V0ID0gMDsKLQkJfQotI2VuZGlmCi0KLQkJaWYgKGZsYWdzICYgTVBUX1NDU0lDRkdfQkxLX05FR08pCi0JCQluZWdvRmxhZ3MgfD0gTVBUX1RBUkdFVF9OT19ORUdPX1dJREUgfCBNUFRfVEFSR0VUX05PX05FR09fU1lOQzsKLQotCQltcHRzY3NpaF9zZXREZXZpY2VQYWdlMUZsYWdzKHdpZHRoLCBmYWN0b3IsIG9mZnNldCwKLQkJCQkJJnJlcXVlc3RlZCwgJmNvbmZpZ3VyYXRpb24sIG5lZ29GbGFncyk7Ci0JCWRuZWdvcHJpbnRrKCgid3JpdGVTRFAxOiBpZD0lZCB3aWR0aD0lZCBmYWN0b3I9JXggb2Zmc2V0PSV4IG5lZ29GbGFncz0leCByZXF1ZXN0PSV4IGNvbmZpZz0leFxuIiwKLQkJCXRhcmdldF9pZCwgd2lkdGgsIGZhY3Rvciwgb2Zmc2V0LCBuZWdvRmxhZ3MsIHJlcXVlc3RlZCwgY29uZmlndXJhdGlvbikpOwotCi0JCS8qIEdldCBhIE1GIGZvciB0aGlzIGNvbW1hbmQuCi0JCSAqLwotCQlpZiAoKG1mID0gbXB0X2dldF9tc2dfZnJhbWUoaW9jLT5Eb25lQ3R4LCBpb2MpKSA9PSBOVUxMKSB7Ci0JCQlkZmFpbHByaW50aygoTVlJT0Nfc19XQVJOX0ZNVCAid3JpdGUgU0RQMTogbm8gbXNnIGZyYW1lcyFcbiIsCi0JCQkJaW9jLT5uYW1lKSk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCi0JCWRkdnByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiV3JpdGVTRFAxIChtZj0lcCwgaWQ9JWQsIHJlcT0weCV4LCBjZmc9MHgleClcbiIsCi0JCQloZC0+aW9jLT5uYW1lLCBtZiwgaWQsIHJlcXVlc3RlZCwgY29uZmlndXJhdGlvbikpOwotCi0KLQkJLyogU2V0IHRoZSByZXF1ZXN0IGFuZCB0aGUgZGF0YSBwb2ludGVycy4KLQkJICogUmVxdWVzdCB0YWtlczogMzYgYnl0ZXMgKDMyIGJpdCBTR0UpCi0JCSAqIFNDU0kgRGV2aWNlIFBhZ2UgMSByZXF1aXJlcyAxNiBieXRlcwotCQkgKiA0MCArIDE2IDw9IHNpemUgb2YgU0NTSSBJTyBSZXF1ZXN0ID0gNTYgYnl0ZXMKLQkJICogYW5kIE1GIHNpemUgPj0gNjQgYnl0ZXMuCi0JCSAqIFBsYWNlIGRhdGEgYXQgZW5kIG9mIE1GLgotCQkgKi8KLQkJcFJlcSA9IChDb25maWdfdCAqKW1mOwotCi0JCXJlcV9pZHggPSBsZTE2X3RvX2NwdShtZi0+dS5mcmFtZS5od2hkci5tc2djdHh1LmZsZC5yZXFfaWR4KTsKLQkJZnJhbWVPZmZzZXQgPSBpb2MtPnJlcV9zeiAtIHNpemVvZihTQ1NJRGV2aWNlUGFnZTFfdCk7Ci0KLQkJcERhdGEgPSAoU0NTSURldmljZVBhZ2UxX3QgKikoKHU4ICopIG1mICsgZnJhbWVPZmZzZXQpOwotCQlkYXRhRG1hID0gaW9jLT5yZXFfZnJhbWVzX2RtYSArIChyZXFfaWR4ICogaW9jLT5yZXFfc3opICsgZnJhbWVPZmZzZXQ7Ci0KLQkJLyogQ29tcGxldGUgdGhlIHJlcXVlc3QgZnJhbWUgKHNhbWUgZm9yIGFsbCByZXF1ZXN0cykuCi0JCSAqLwotCQlwUmVxLT5BY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQ7Ci0JCXBSZXEtPlJlc2VydmVkID0gMDsKLQkJcFJlcS0+Q2hhaW5PZmZzZXQgPSAwOwotCQlwUmVxLT5GdW5jdGlvbiA9IE1QSV9GVU5DVElPTl9DT05GSUc7Ci0JCXBSZXEtPkV4dFBhZ2VMZW5ndGggPSAwOwotCQlwUmVxLT5FeHRQYWdlVHlwZSA9IDA7Ci0JCXBSZXEtPk1zZ0ZsYWdzID0gMDsKLQkJZm9yIChpaT0wOyBpaSA8IDg7IGlpKyspIHsKLQkJCXBSZXEtPlJlc2VydmVkMltpaV0gPSAwOwotCQl9Ci0JCXBSZXEtPkhlYWRlci5QYWdlVmVyc2lvbiA9IGlvYy0+c3BpX2RhdGEuc2RwMXZlcnNpb247Ci0JCXBSZXEtPkhlYWRlci5QYWdlTGVuZ3RoID0gaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoOwotCQlwUmVxLT5IZWFkZXIuUGFnZU51bWJlciA9IDE7Ci0JCXBSZXEtPkhlYWRlci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfU0NTSV9ERVZJQ0U7Ci0JCXBSZXEtPlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoaWQgfCAoYnVzIDw8IDggKSk7Ci0KLQkJLyogQWRkIGEgU0dFIHRvIHRoZSBjb25maWcgcmVxdWVzdC4KLQkJICovCi0JCWZsYWdzTGVuZ3RoID0gTVBUX1NHRV9GTEFHU19TU0lNUExFX1dSSVRFIHwgaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoICogNDsKLQotCQltcHRfYWRkX3NnZSgoY2hhciAqKSZwUmVxLT5QYWdlQnVmZmVyU0dFLCBmbGFnc0xlbmd0aCwgZGF0YURtYSk7Ci0KLQkJLyogU2V0IHVwIHRoZSBjb21tb24gZGF0YSBwb3J0aW9uCi0JCSAqLwotCQlwRGF0YS0+SGVhZGVyLlBhZ2VWZXJzaW9uID0gcFJlcS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCQlwRGF0YS0+SGVhZGVyLlBhZ2VMZW5ndGggPSBwUmVxLT5IZWFkZXIuUGFnZUxlbmd0aDsKLQkJcERhdGEtPkhlYWRlci5QYWdlTnVtYmVyID0gcFJlcS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JCXBEYXRhLT5IZWFkZXIuUGFnZVR5cGUgPSBwUmVxLT5IZWFkZXIuUGFnZVR5cGU7Ci0JCXBEYXRhLT5SZXF1ZXN0ZWRQYXJhbWV0ZXJzID0gY3B1X3RvX2xlMzIocmVxdWVzdGVkKTsKLQkJcERhdGEtPlJlc2VydmVkID0gMDsKLQkJcERhdGEtPkNvbmZpZ3VyYXRpb24gPSBjcHVfdG9fbGUzMihjb25maWd1cmF0aW9uKTsKLQotCQlkcHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCi0JCQkid3JpdGUgU0RQMTogaWQgJWQgcGdhZGRyIDB4JXggcmVxIDB4JXggY29uZmlnIDB4JXhcbiIsCi0JCQkJaW9jLT5uYW1lLCBpZCwgKGlkIHwgKGJ1czw8OCkpLAotCQkJCXJlcXVlc3RlZCwgY29uZmlndXJhdGlvbikpOwotCi0JCW1wdF9wdXRfbXNnX2ZyYW1lKGlvYy0+RG9uZUN0eCwgaW9jLCBtZik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qCW1wdHNjc2loX3dyaXRlSU9DUGFnZTQgIC0gd3JpdGUgSU9DIFBhZ2UgNApAQCAtMzQ2NSw2ICsyOTkxLDcgQEAKIAkJCQkJY29tcGxldGlvbkNvZGUgPSBNUFRfU0NBTkRWX0dPT0Q7CiAJCQkJZWxzZQogCQkJCQljb21wbGV0aW9uQ29kZSA9IE1QVF9TQ0FORFZfU09NRV9FUlJPUjsKKwkJCQltZW1jcHkoaGQtPnBMb2NhbC0+c2Vuc2UsIHByLCBzaXplb2YoaGQtPnBMb2NhbC0+c2Vuc2UpKTsKIAogCQkJfSBlbHNlIGlmIChwUmVwbHktPlNDU0lTdGF0ZSAmIE1QSV9TQ1NJX1NUQVRFX0FVVE9TRU5TRV9WQUxJRCkgewogCQkJCXU4CQkqc2Vuc2VfZGF0YTsKQEAgLTM1NzgsNzggKzMxMDUsNiBAQAogCXJldHVybjsKIH0KIAotI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgotLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwotLyoJbXB0c2NzaWhfZG9fcmFpZCAtIEZvcm1hdCBhbmQgSXNzdWUgYSBSQUlEIHZvbHVtZSByZXF1ZXN0IG1lc3NhZ2UuCi0gKglAaGQ6IFBvaW50ZXIgdG8gc2NzaSBob3N0IHN0cnVjdHVyZQotICoJQGFjdGlvbjogV2hhdCBkbyBiZSBkb25lLgotICoJQGlkOiBMb2dpY2FsIHRhcmdldCBpZC4KLSAqCUBidXM6IFRhcmdldCBsb2NhdGlvbnMgYnVzLgotICoKLSAqCVJldHVybnM6IDwgMCBvbiBhIGZhdGFsIGVycm9yCi0gKgkJMCBvbiBzdWNjZXNzCi0gKgotICoJUmVtYXJrOiBXYWl0IHRvIHJldHVybiB1bnRpbCByZXBseSBwcm9jZXNzZWQgYnkgdGhlIElTUi4KLSAqLwotc3RhdGljIGludAotbXB0c2NzaWhfZG9fcmFpZChNUFRfU0NTSV9IT1NUICpoZCwgdTggYWN0aW9uLCBJTlRFUk5BTF9DTUQgKmlvKQotewotCU1waVJhaWRBY3Rpb25SZXF1ZXN0X3QJKnBSZXE7Ci0JTVBUX0ZSQU1FX0hEUgkJKm1mOwotCWludAkJCWluX2lzcjsKLQotCWluX2lzciA9IGluX2ludGVycnVwdCgpOwotCWlmIChpbl9pc3IpIHsKLQkJZHByaW50aygoTVlJT0Nfc19XQVJOX0ZNVCAiSW50ZXJuYWwgcmFpZCByZXF1ZXN0IG5vdCBhbGxvd2VkIGluIElTUiBjb250ZXh0IVxuIiwKLSAgICAgICAJCQkJaGQtPmlvYy0+bmFtZSkpOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQotCS8qIEdldCBhbmQgUG9wdWxhdGUgYSBmcmVlIEZyYW1lCi0JICovCi0JaWYgKChtZiA9IG1wdF9nZXRfbXNnX2ZyYW1lKGhkLT5pb2MtPkludGVybmFsQ3R4LCBoZC0+aW9jKSkgPT0gTlVMTCkgewotCQlkZHZwcmludGsoKE1ZSU9DX3NfV0FSTl9GTVQgIl9kb19yYWlkOiBubyBtc2cgZnJhbWVzIVxuIiwKLQkJCQkJaGQtPmlvYy0+bmFtZSkpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JcFJlcSA9IChNcGlSYWlkQWN0aW9uUmVxdWVzdF90ICopbWY7Ci0JcFJlcS0+QWN0aW9uID0gYWN0aW9uOwotCXBSZXEtPlJlc2VydmVkMSA9IDA7Ci0JcFJlcS0+Q2hhaW5PZmZzZXQgPSAwOwotCXBSZXEtPkZ1bmN0aW9uID0gTVBJX0ZVTkNUSU9OX1JBSURfQUNUSU9OOwotCXBSZXEtPlZvbHVtZUlEID0gaW8tPmlkOwotCXBSZXEtPlZvbHVtZUJ1cyA9IGlvLT5idXM7Ci0JcFJlcS0+UGh5c0Rpc2tOdW0gPSBpby0+cGh5c0Rpc2tOdW07Ci0JcFJlcS0+TXNnRmxhZ3MgPSAwOwotCXBSZXEtPlJlc2VydmVkMiA9IDA7Ci0JcFJlcS0+QWN0aW9uRGF0YVdvcmQgPSAwOyAvKiBSZXNlcnZlZCBmb3IgdGhpcyBhY3Rpb24gKi8KLQkvL3BSZXEtPkFjdGlvbkRhdGFTR0UgPSAwOwotCi0JbXB0X2FkZF9zZ2UoKGNoYXIgKikmcFJlcS0+QWN0aW9uRGF0YVNHRSwKLQkJTVBUX1NHRV9GTEFHU19TU0lNUExFX1JFQUQgfCAwLCAoZG1hX2FkZHJfdCkgLTEpOwotCi0JZGR2cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJSQUlEIFZvbHVtZSBhY3Rpb24gJXggaWQgJWRcbiIsCi0JCQloZC0+aW9jLT5uYW1lLCBhY3Rpb24sIGlvLT5pZCkpOwotCi0JaGQtPnBMb2NhbCA9IE5VTEw7Ci0JaGQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqMTA7IC8qIDEwIHNlY29uZCB0aW1lb3V0ICovCi0JaGQtPnNjYW5kdl93YWl0X2RvbmUgPSAwOwotCi0JLyogU2F2ZSBjbWQgcG9pbnRlciwgZm9yIHJlc291cmNlIGZyZWUgaWYgdGltZW91dCBvcgotCSAqIEZXIHJlbG9hZCBvY2N1cnMKLQkgKi8KLQloZC0+Y21kUHRyID0gbWY7Ci0KLQlhZGRfdGltZXIoJmhkLT50aW1lcik7Ci0JbXB0X3B1dF9tc2dfZnJhbWUoaGQtPmlvYy0+SW50ZXJuYWxDdHgsIGhkLT5pb2MsIG1mKTsKLQl3YWl0X2V2ZW50KGhkLT5zY2FuZHZfd2FpdHEsIGhkLT5zY2FuZHZfd2FpdF9kb25lKTsKLQotCWlmICgoaGQtPnBMb2NhbCA9PSBOVUxMKSB8fCAoaGQtPnBMb2NhbC0+Y29tcGxldGlvbiAhPSBNUFRfU0NBTkRWX0dPT0QpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiB+TVBUU0NTSUhfRU5BQkxFX0RPTUFJTl9WQUxJREFUSU9OICovCiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgpAQCAtMzkwMyw5MyArMzM1OCw2IEBACiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KIC8qKgotICoJbXB0c2NzaWhfbmVnb3RpYXRlX3RvX2FzeW5fbmFycm93IC0gUmVzdG9yZSBkZXZpY2VzIHRvIGRlZmF1bHQgc3RhdGUKLSAqCUBoZDogUG9pbnRlciB0byBhIFNDU0kgSE9TVCBzdHJ1Y3R1cmUKLSAqCUB2dGFyZ2V0OiBwZXIgZGV2aWNlIHByaXZhdGUgZGF0YQotICoKLSAqCVVzZXMgdGhlIElTUiwgYnV0IHdpdGggc3BlY2lhbCBwcm9jZXNzaW5nLgotICoJTVVTVCBiZSBzaW5nbGUtdGhyZWFkZWQuCi0gKgotICovCi1zdGF0aWMgdm9pZAotbXB0c2NzaWhfbmVnb3RpYXRlX3RvX2FzeW5fbmFycm93KE1QVF9TQ1NJX0hPU1QgKmhkLCBWaXJ0RGV2aWNlICp2ZGV2aWNlKQotewotCVZpcnRUYXJnZXQJCSp2dGFyZ2V0ID0gdmRldmljZS0+dnRhcmdldDsKLQlNUFRfQURBUFRFUgkJKmlvYz0gaGQtPmlvYzsKLQlTQ1NJRGV2aWNlUGFnZTFfdAkqcGNmZzFEYXRhOwotCUNPTkZJR1BBUk1TCQkgY2ZnOwotCWRtYV9hZGRyX3QJCSBjZmcxX2RtYV9hZGRyOwotCUNvbmZpZ1BhZ2VIZWFkZXJfdAkgaGVhZGVyOwotCWludAkJCSBpZDsKLQlpbnQJCQkgcmVxdWVzdGVkLCBjb25maWd1cmF0aW9uLCBkYXRhLGk7Ci0JdTgJCQkgZmxhZ3MsIGZhY3RvcjsKLQotCWlmICgoaW9jLT5idXNfdHlwZSAhPSBTUEkpIHx8Ci0JCSghdmRldmljZS0+Y29uZmlndXJlZF9sdW4pKQotCQlyZXR1cm47Ci0KLQlpZiAoIWlvYy0+c3BpX2RhdGEuc2RwMWxlbmd0aCkKLQkJcmV0dXJuOwotCi0JcGNmZzFEYXRhID0gKFNDU0lEZXZpY2VQYWdlMV90ICopcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wY2lkZXYsCi0JCSBpb2MtPnNwaV9kYXRhLnNkcDFsZW5ndGggKiA0LCAmY2ZnMV9kbWFfYWRkcik7Ci0KLQlpZiAocGNmZzFEYXRhID09IE5VTEwpCi0JCXJldHVybjsKLQotCWhlYWRlci5QYWdlVmVyc2lvbiA9IGlvYy0+c3BpX2RhdGEuc2RwMXZlcnNpb247Ci0JaGVhZGVyLlBhZ2VMZW5ndGggPSBpb2MtPnNwaV9kYXRhLnNkcDFsZW5ndGg7Ci0JaGVhZGVyLlBhZ2VOdW1iZXIgPSAxOwotCWhlYWRlci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfU0NTSV9ERVZJQ0U7Ci0JY2ZnLmNmZ2hkci5oZHIgPSAmaGVhZGVyOwotCWNmZy5waHlzQWRkciA9IGNmZzFfZG1hX2FkZHI7Ci0JY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVDsKLQljZmcuZGlyID0gMTsKLQljZmcudGltZW91dCA9IDA7Ci0KLQlpZiAodnRhcmdldC0+cmFpZFZvbHVtZSAmJiBpb2MtPnJhaWRfZGF0YS5wSW9jUGczKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7IGkrKykgewotCQkJaWQgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlza1tpXS5QaHlzRGlza0lEOwotCQkJZmxhZ3MgPSBoZC0+aW9jLT5zcGlfZGF0YS5ub1FhczsKLQkJCWlmIChoZC0+aW9jLT5zcGlfZGF0YS5udnJhbSAmJiAoaGQtPmlvYy0+c3BpX2RhdGEubnZyYW1baWRdICE9IE1QVF9IT1NUX05WUkFNX0lOVkFMSUQpKSB7Ci0JCQkJZGF0YSA9IGhkLT5pb2MtPnNwaV9kYXRhLm52cmFtW2lkXTsKLQkJCQlpZiAoZGF0YSAmIE1QVF9OVlJBTV9XSURFX0RJU0FCTEUpCi0JCQkJCWZsYWdzIHw9IE1QVF9UQVJHRVRfTk9fTkVHT19XSURFOwotCQkJCWZhY3RvciA9IChkYXRhICYgTVBUX05WUkFNX1NZTkNfTUFTSykgPj4gTVBUX05WUkFNX1NZTkNfU0hJRlQ7Ci0JCQkJaWYgKChmYWN0b3IgPT0gMCkgfHwgKGZhY3RvciA9PSBNUFRfQVNZTkMpKQotCQkJCQlmbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fU1lOQzsKLQkJCX0KLQkJCW1wdHNjc2loX3NldERldmljZVBhZ2UxRmxhZ3MoMCwgTVBUX0FTWU5DLCAwLCAmcmVxdWVzdGVkLAotCQkJCSZjb25maWd1cmF0aW9uLCBmbGFncyk7Ci0JCQlkbmVnb3ByaW50aygoIm5lZ28gYXN5biBuYXJyb3c6IGlkPSVkIHdpZHRoPTAgZmFjdG9yPU1QVF9BU1lOQyAiCi0JCQkJIm9mZnNldD0wIG5lZ29GbGFncz0leCByZXF1ZXN0PSV4IGNvbmZpZz0leFxuIiwKLQkJCQlpZCwgZmxhZ3MsIHJlcXVlc3RlZCwgY29uZmlndXJhdGlvbikpOwotCQkJcGNmZzFEYXRhLT5SZXF1ZXN0ZWRQYXJhbWV0ZXJzID0gY3B1X3RvX2xlMzIocmVxdWVzdGVkKTsKLQkJCXBjZmcxRGF0YS0+UmVzZXJ2ZWQgPSAwOwotCQkJcGNmZzFEYXRhLT5Db25maWd1cmF0aW9uID0gY3B1X3RvX2xlMzIoY29uZmlndXJhdGlvbik7Ci0JCQljZmcucGFnZUFkZHIgPSAodnRhcmdldC0+YnVzX2lkPDw4KSB8IGlkOwotCQkJbXB0X2NvbmZpZyhoZC0+aW9jLCAmY2ZnKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWZsYWdzID0gdnRhcmdldC0+bmVnb0ZsYWdzOwotCQltcHRzY3NpaF9zZXREZXZpY2VQYWdlMUZsYWdzKDAsIE1QVF9BU1lOQywgMCwgJnJlcXVlc3RlZCwKLQkJCQkmY29uZmlndXJhdGlvbiwgZmxhZ3MpOwotCQlkbmVnb3ByaW50aygoIm5lZ28gYXN5biBuYXJyb3c6IGlkPSVkIHdpZHRoPTAgZmFjdG9yPU1QVF9BU1lOQyAiCi0JCQkib2Zmc2V0PTAgbmVnb0ZsYWdzPSV4IHJlcXVlc3Q9JXggY29uZmlnPSV4XG4iLAotCQkJdnRhcmdldC0+dGFyZ2V0X2lkLCBmbGFncywgcmVxdWVzdGVkLCBjb25maWd1cmF0aW9uKSk7Ci0JCXBjZmcxRGF0YS0+UmVxdWVzdGVkUGFyYW1ldGVycyA9IGNwdV90b19sZTMyKHJlcXVlc3RlZCk7Ci0JCXBjZmcxRGF0YS0+UmVzZXJ2ZWQgPSAwOwotCQlwY2ZnMURhdGEtPkNvbmZpZ3VyYXRpb24gPSBjcHVfdG9fbGUzMihjb25maWd1cmF0aW9uKTsKLQkJY2ZnLnBhZ2VBZGRyID0gKHZ0YXJnZXQtPmJ1c19pZDw8OCkgfCB2dGFyZ2V0LT50YXJnZXRfaWQ7Ci0JCW1wdF9jb25maWcoaGQtPmlvYywgJmNmZyk7Ci0JfQotCi0JaWYgKHBjZmcxRGF0YSkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgaGVhZGVyLlBhZ2VMZW5ndGggKiA0LCBwY2ZnMURhdGEsIGNmZzFfZG1hX2FkZHIpOwotfQotCi0vKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCi0vKioKICAqCW1wdHNjc2loX3N5bmNocm9uaXplX2NhY2hlIC0gU2VuZCBTWU5DSFJPTklaRV9DQUNIRSB0byBhbGwgZGlza3MuCiAgKglAaGQ6IFBvaW50ZXIgdG8gYSBTQ1NJIEhPU1Qgc3RydWN0dXJlCiAgKglAdnRhcmdldDogcGVyIGRldmljZSBwcml2YXRlIGRhdGEKQEAgLTQwMTQsMTYzNyArMzM4MiwxNSBAQAogCWlvY21kLmRhdGFfZG1hID0gLTE7CiAJaW9jbWQuc2l6ZSA9IDA7CiAJaW9jbWQucnN2ZCA9IGlvY21kLnJzdmQyID0gMDsKLQlpb2NtZC5idXMgPSB2ZGV2aWNlLT5idXNfaWQ7Ci0JaW9jbWQuaWQgPSB2ZGV2aWNlLT50YXJnZXRfaWQ7CisJaW9jbWQuYnVzID0gdmRldmljZS0+dnRhcmdldC0+YnVzX2lkOworCWlvY21kLmlkID0gdmRldmljZS0+dnRhcmdldC0+dGFyZ2V0X2lkOwogCWlvY21kLmx1biA9ICh1OCl2ZGV2aWNlLT5sdW47CiAKLQlpZiAoKHZkZXZpY2UtPnZ0YXJnZXQtPnR5cGUgJiBUWVBFX0RJU0spICYmCisJaWYgKCh2ZGV2aWNlLT52dGFyZ2V0LT50eXBlID09IFRZUEVfRElTSykgJiYKIAkgICAgKHZkZXZpY2UtPmNvbmZpZ3VyZWRfbHVuKSkKIAkJbXB0c2NzaWhfZG9fY21kKGhkLCAmaW9jbWQpOwogfQogCi0vKiBTZWFyY2ggSU9DIHBhZ2UgMyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBoaWRkZW4gcGh5c2ljYWwgZGlzawotICovCi1zdGF0aWMgaW50Ci1tcHRzY3NpaF9pc19waHlzX2Rpc2soTVBUX0FEQVBURVIgKmlvYywgaW50IGlkKQotewotCWludCBpOwotCi0JaWYgKCFpb2MtPnJhaWRfZGF0YS5pc1JhaWQgfHwgIWlvYy0+cmFpZF9kYXRhLnBJb2NQZzMpCi0JCXJldHVybiAwOwotCi0JZm9yIChpID0gMDsgaSA8IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsgaSsrKSB7Ci0JCWlmIChpZCA9PSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlza1tpXS5QaHlzRGlza0lEKQotCQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBNUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04KLS8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KLS8qKgotICoJbXB0c2NzaWhfZG9tYWluVmFsaWRhdGlvbiAtIFRvcCBsZXZlbCBoYW5kbGVyIGZvciBkb21haW4gdmFsaWRhdGlvbi4KLSAqCUBoZDogUG9pbnRlciB0byBNUFRfU0NTSV9IT1NUIHN0cnVjdHVyZS4KLSAqCi0gKglVc2VzIHRoZSBJU1IsIGJ1dCB3aXRoIHNwZWNpYWwgcHJvY2Vzc2luZy4KLSAqCUNhbGxlZCBmcm9tIHNjaGVkdWxlLCBzaG91bGQgbm90IGJlIGluIGludGVycnVwdCBtb2RlLgotICoJV2hpbGUgdGhyZWFkIGFsaXZlLCBkbyBkdiBmb3IgYWxsIGRldmljZXMgbmVlZGluZyBkdgotICoKLSAqCVJldHVybjogTm9uZS4KLSAqLwotc3RhdGljIHZvaWQKLW1wdHNjc2loX2RvbWFpblZhbGlkYXRpb24odm9pZCAqYXJnKQotewotCU1QVF9TQ1NJX0hPU1QJCSpoZDsKLQlNUFRfQURBUFRFUgkJKmlvYzsKLQl1bnNpZ25lZCBsb25nCQkgZmxhZ3M7Ci0JaW50IAkJCSBpZCwgbWF4aWQsIGR2U3RhdHVzLCBkaWQ7Ci0JaW50CQkJIGlpLCBpc1BoeXNEaXNrOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmR2dGFza1FfbG9jaywgZmxhZ3MpOwotCWR2dGFza1FfYWN0aXZlID0gMTsKLQlpZiAoZHZ0YXNrUV9yZWxlYXNlKSB7Ci0JCWR2dGFza1FfYWN0aXZlID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHZ0YXNrUV9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHZ0YXNrUV9sb2NrLCBmbGFncyk7Ci0KLQkvKiBGb3IgdGhpcyBpb2MsIGxvb3AgdGhyb3VnaCBhbGwgZGV2aWNlcyBhbmQgZG8gZHYgdG8gZWFjaCBkZXZpY2UuCi0JICogV2hlbiBjb21wbGV0ZSB3aXRoIHRoaXMgaW9jLCBzZWFyY2ggdGhyb3VnaCB0aGUgaW9jIGxpc3QsIGFuZAotCSAqIGZvciBlYWNoIHNjc2kgaW9jIGZvdW5kLCBkbyBkdiBmb3IgYWxsIGRldmljZXMuIEV4aXQgd2hlbiBubwotCSAqIGRldmljZSBuZWVkcyBkdi4KLQkgKi8KLQlkaWQgPSAxOwotCXdoaWxlIChkaWQpIHsKLQkJZGlkID0gMDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2MsICZpb2NfbGlzdCwgbGlzdCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmR2dGFza1FfbG9jaywgZmxhZ3MpOwotCQkJaWYgKGR2dGFza1FfcmVsZWFzZSkgewotCQkJCWR2dGFza1FfYWN0aXZlID0gMDsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdnRhc2tRX2xvY2ssIGZsYWdzKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdnRhc2tRX2xvY2ssIGZsYWdzKTsKLQotCQkJbXNsZWVwKDI1MCk7Ci0KLQkJCS8qIERWIG9ubHkgdG8gU1BJIGFkYXB0ZXJzICovCi0JCQlpZiAoaW9jLT5idXNfdHlwZSAhPSBTUEkpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGxvb2tzIG9rICovCi0JCQlpZiAoaW9jLT5zaCA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCi0JCQloZCA9IChNUFRfU0NTSV9IT1NUICopIGlvYy0+c2gtPmhvc3RkYXRhOwotCQkJaWYgKGhkID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICgoaW9jLT5zcGlfZGF0YS5mb3JjZUR2ICYgTVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzMpICE9IDApIHsKLQkJCQltcHRfcmVhZF9pb2NfcGdfMyhpb2MpOwotCQkJCWlmIChpb2MtPnJhaWRfZGF0YS5wSW9jUGczKSB7Ci0JCQkJCUlvYzNQaHlzRGlza190ICpwUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKLQkJCQkJaW50CQludW1QRGlzayA9IGlvYy0+cmFpZF9kYXRhLnBJb2NQZzMtPk51bVBoeXNEaXNrczsKLQotCQkJCQl3aGlsZSAobnVtUERpc2spIHsKLQkJCQkJCWlmIChpb2MtPnNwaV9kYXRhLmR2U3RhdHVzW3BQRGlzay0+UGh5c0Rpc2tJRF0gJiBNUFRfU0NTSUNGR19EVl9OT1RfRE9ORSkKLQkJCQkJCQlpb2MtPnNwaV9kYXRhLmR2U3RhdHVzW3BQRGlzay0+UGh5c0Rpc2tJRF0gfD0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKLQotCQkJCQkJcFBEaXNrKys7Ci0JCQkJCQludW1QRGlzay0tOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlvYy0+c3BpX2RhdGEuZm9yY2VEdiAmPSB+TVBUX1NDU0lDRkdfUkVMT0FEX0lPQ19QRzM7Ci0JCQl9Ci0KLQkJCW1heGlkID0gbWluX3QoaW50LCBpb2MtPnNoLT5tYXhfaWQsIE1QVF9NQVhfU0NTSV9ERVZJQ0VTKTsKLQotCQkJZm9yIChpZCA9IDA7IGlkIDwgbWF4aWQ7IGlkKyspIHsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHZ0YXNrUV9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKGR2dGFza1FfcmVsZWFzZSkgewotCQkJCQlkdnRhc2tRX2FjdGl2ZSA9IDA7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR2dGFza1FfbG9jaywgZmxhZ3MpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmR2dGFza1FfbG9jaywgZmxhZ3MpOwotCQkJCWR2U3RhdHVzID0gaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbaWRdOwotCi0JCQkJaWYgKGR2U3RhdHVzICYgTVBUX1NDU0lDRkdfTkVFRF9EVikgewotCQkJCQlkaWQrKzsKLQkJCQkJaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbaWRdIHw9IE1QVF9TQ1NJQ0ZHX0RWX1BFTkRJTkc7Ci0JCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW2lkXSAmPSB+TVBUX1NDU0lDRkdfTkVFRF9EVjsKLQotCQkJCQltc2xlZXAoMjUwKTsKLQotCQkJCQkvKiBJZiBoaWRkZW4gcGh5cyBkaXNrLCBibG9jayBJTydzIHRvIGFsbAotCQkJCQkgKglyYWlkIHZvbHVtZXMKLQkJCQkJICogZWxzZSwgcHJvY2VzcyBub3JtYWxseQotCQkJCQkgKi8KLQkJCQkJaXNQaHlzRGlzayA9IG1wdHNjc2loX2lzX3BoeXNfZGlzayhpb2MsIGlkKTsKLQkJCQkJaWYgKGlzUGh5c0Rpc2spIHsKLQkJCQkJCWZvciAoaWk9MDsgaWkgPCBNUFRfTUFYX1NDU0lfREVWSUNFUzsgaWkrKykgewotCQkJCQkJCWlmIChoZC0+aW9jLT5yYWlkX2RhdGEuaXNSYWlkICYgKDEgPDwgaWkpKSB7Ci0JCQkJCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW2lpXSB8PSBNUFRfU0NTSUNGR19EVl9QRU5ESU5HOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCWlmKG1wdF9hbHRfaW9jX3dhaXQoaGQtPmlvYykhPTApIHsKLQkJCQkJCWRkdnByaW50aygoTVlJT0Nfc19XQVJOX0ZNVCAiYWx0X2lvYyBidXN5IVxuIiwKLQkJCQkJCSAgICBoZC0+aW9jLT5uYW1lKSk7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCi0JCQkJCWlmIChtcHRzY3NpaF9kb0R2KGhkLCAwLCBpZCkgPT0gMSkgewotCQkJCQkJLyogVW50YWdnZWQgZGV2aWNlIHdhcyBidXN5LCB0cnkgYWdhaW4KLQkJCQkJCSAqLwotCQkJCQkJaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbaWRdIHw9IE1QVF9TQ1NJQ0ZHX05FRURfRFY7Ci0JCQkJCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1tpZF0gJj0gfk1QVF9TQ1NJQ0ZHX0RWX1BFTkRJTkc7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKiBEViBpcyBjb21wbGV0ZS4gQ2xlYXIgZmxhZ3MuCi0JCQkJCQkgKi8KLQkJCQkJCWhkLT5pb2MtPnNwaV9kYXRhLmR2U3RhdHVzW2lkXSAmPSB+KE1QVF9TQ1NJQ0ZHX0RWX05PVF9ET05FIHwgTVBUX1NDU0lDRkdfRFZfUEVORElORyk7Ci0JCQkJCX0KLQotCQkJCQlzcGluX2xvY2soJmhkLT5pb2MtPmluaXRpYWxpemluZ19oYmFfbG9jayk7Ci0JCQkJCWhkLT5pb2MtPmluaXRpYWxpemluZ19oYmFfbG9ja19mbGFnPTA7Ci0JCQkJCXNwaW5fdW5sb2NrKCZoZC0+aW9jLT5pbml0aWFsaXppbmdfaGJhX2xvY2spOwotCi0JCQkJCWlmIChpc1BoeXNEaXNrKSB7Ci0JCQkJCQlmb3IgKGlpPTA7IGlpIDwgTVBUX01BWF9TQ1NJX0RFVklDRVM7IGlpKyspIHsKLQkJCQkJCQlpZiAoaGQtPmlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IGlpKSkgewotCQkJCQkJCQloZC0+aW9jLT5zcGlfZGF0YS5kdlN0YXR1c1tpaV0gJj0gfk1QVF9TQ1NJQ0ZHX0RWX1BFTkRJTkc7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJaWYgKGhkLT5pb2MtPnNwaV9kYXRhLm5vUWFzKQotCQkJCQkJbXB0c2NzaWhfcWFzX2NoZWNrKGhkLCBpZCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmR2dGFza1FfbG9jaywgZmxhZ3MpOwotCWR2dGFza1FfYWN0aXZlID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkdnRhc2tRX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybjsKLX0KLQotLyogV3JpdGUgU0RQMSBpZiBubyBRQVMgaGFzIGJlZW4gZW5hYmxlZAotICovCi1zdGF0aWMgdm9pZAotbXB0c2NzaWhfcWFzX2NoZWNrKE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgaWQpCi17Ci0JVmlydFRhcmdldCAqdnRhcmdldDsKLQlpbnQgaWk7Ci0KLQlpZiAoaGQtPlRhcmdldHMgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JZm9yIChpaT0wOyBpaSA8IE1QVF9NQVhfU0NTSV9ERVZJQ0VTOyBpaSsrKSB7Ci0JCWlmIChpaSA9PSBpZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgoaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbaWldICYgTVBUX1NDU0lDRkdfRFZfTk9UX0RPTkUpICE9IDApCi0JCQljb250aW51ZTsKLQotCQl2dGFyZ2V0ID0gaGQtPlRhcmdldHNbaWldOwotCi0JCWlmICgodnRhcmdldCAhPSBOVUxMKSAmJiAoIXZ0YXJnZXQtPnJhaWRWb2x1bWUpKSB7Ci0JCQlpZiAoKHZ0YXJnZXQtPm5lZ29GbGFncyAmIGhkLT5pb2MtPnNwaV9kYXRhLm5vUWFzKSA9PSAwKSB7Ci0JCQkJdnRhcmdldC0+bmVnb0ZsYWdzIHw9IGhkLT5pb2MtPnNwaV9kYXRhLm5vUWFzOwotCQkJCWRuZWdvcHJpbnRrKCgid3JpdGVTRFAxOiBpZD0lZCBmbGFncz0wXG4iLCBpZCkpOwotCQkJCW1wdHNjc2loX3dyaXRlU0RQMShoZCwgMCwgaWksIDApOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG1wdHNjc2loX2lzX3BoeXNfZGlzayhoZC0+aW9jLCBpaSkgPT0gMSkgewotCQkJCWRuZWdvcHJpbnRrKCgid3JpdGVTRFAxOiBpZD0lZCBTQ1NJQ0ZHX1VTRV9OVlJBTVxuIiwgaWQpKTsKLQkJCQltcHRzY3NpaF93cml0ZVNEUDEoaGQsIDAsIGlpLCBNUFRfU0NTSUNGR19VU0VfTlZSQU0pOwotCQkJfQotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotCi0KLSNkZWZpbmUgTVBUX0dFVF9OVlJBTV9WQUxTCTB4MDEKLSNkZWZpbmUgTVBUX1VQREFURV9NQVgJCTB4MDIKLSNkZWZpbmUgTVBUX1NFVF9NQVgJCTB4MDQKLSNkZWZpbmUgTVBUX1NFVF9NSU4JCTB4MDgKLSNkZWZpbmUgTVBUX0ZBTExCQUNLCQkweDEwCi0jZGVmaW5lIE1QVF9TQVZFCQkweDIwCi0KLS8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KLS8qKgotICoJbXB0c2NzaWhfZG9EdiAtIFBlcmZvcm0gZG9tYWluIHZhbGlkYXRpb24gdG8gYSB0YXJnZXQuCi0gKglAaGQ6IFBvaW50ZXIgdG8gTVBUX1NDU0lfSE9TVCBzdHJ1Y3R1cmUuCi0gKglAcG9ydG51bTogSU9DIHBvcnQgbnVtYmVyLgotICoJQHRhcmdldDogUGh5c2ljYWwgSUQgb2YgdGhpcyB0YXJnZXQKLSAqCi0gKglVc2VzIHRoZSBJU1IsIGJ1dCB3aXRoIHNwZWNpYWwgcHJvY2Vzc2luZy4KLSAqCU1VU1QgYmUgc2luZ2xlLXRocmVhZGVkLgotICoJVGVzdCB3aWxsIGV4aXQgaWYgdGFyZ2V0IGlzIGF0IGFzeW5jICYgbmFycm93LgotICoKLSAqCVJldHVybjogTm9uZS4KLSAqLwotc3RhdGljIGludAotbXB0c2NzaWhfZG9EdihNUFRfU0NTSV9IT1NUICpoZCwgaW50IGJ1c19udW1iZXIsIGludCBpZCkKLXsKLQlNUFRfQURBUFRFUgkJKmlvYyA9IGhkLT5pb2M7Ci0JVmlydFRhcmdldAkJKnZ0YXJnZXQ7Ci0JU0NTSURldmljZVBhZ2UxX3QJKnBjZmcxRGF0YTsKLQlTQ1NJRGV2aWNlUGFnZTBfdAkqcGNmZzBEYXRhOwotCXU4CQkJKnBidWYxOwotCXU4CQkJKnBidWYyOwotCXU4CQkJKnBEdkJ1ZjsKLQlkbWFfYWRkcl90CQkgZHZidWZfZG1hID0gLTE7Ci0JZG1hX2FkZHJfdAkJIGJ1ZjFfZG1hID0gLTE7Ci0JZG1hX2FkZHJfdAkJIGJ1ZjJfZG1hID0gLTE7Ci0JZG1hX2FkZHJfdAkJIGNmZzFfZG1hX2FkZHIgPSAtMTsKLQlkbWFfYWRkcl90CQkgY2ZnMF9kbWFfYWRkciA9IC0xOwotCUNvbmZpZ1BhZ2VIZWFkZXJfdAkgaGVhZGVyMTsKLQlDb25maWdQYWdlSGVhZGVyX3QJIGhlYWRlcjA7Ci0JRFZQQVJBTUVURVJTCQkgZHY7Ci0JSU5URVJOQUxfQ01ECQkgaW9jbWQ7Ci0JQ09ORklHUEFSTVMJCSBjZmc7Ci0JaW50CQkJIGR2X2FsbG9jID0gMDsKLQlpbnQJCQkgcmMsIHN6ID0gMDsKLQlpbnQJCQkgYnVmc2l6ZSA9IDA7Ci0JaW50CQkJIGRhdGFCdWZTaXplID0gMDsKLQlpbnQJCQkgZWNob0J1ZlNpemUgPSAwOwotCWludAkJCSBub3REb25lOwotCWludAkJCSBwYXR0OwotCWludAkJCSByZXBlYXQ7Ci0JaW50CQkJIHJldGNvZGUgPSAwOwotCWludAkJCSBuZmFjdG9yID0gIE1QVF9VTFRSQTMyMDsKLQljaGFyCQkJIGZpcnN0UGFzcyA9IDE7Ci0JY2hhcgkJCSBkb0ZhbGxiYWNrID0gMDsKLQljaGFyCQkJIHJlYWRQYWdlMDsKLQljaGFyCQkJIGJ1cywgbHVuOwotCWNoYXIJCQkgaW5xMCA9IDA7Ci0KLQlpZiAoaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGlvYy0+c3BpX2RhdGEuc2RwMGxlbmd0aCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCS8qIElmIG11bHRpcGxlIGJ1c2VzIGFyZSB1c2VkLCByZXF1aXJlIHRoYXQgdGhlIGluaXRpYXRvcgotCSAqIGlkIGJlIHRoZSBzYW1lIG9uIGFsbCBidXNlcy4KLQkgKi8KLQlpZiAoaWQgPT0gaW9jLT5wZmFjdHNbMF0uUG9ydFNDU0lJRCkKLQkJcmV0dXJuIDA7Ci0KLQlsdW4gPSAwOwotCWJ1cyA9ICh1OCkgYnVzX251bWJlcjsKLQlkZHZ0cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UCi0JCQkiRFYgc3RhcnRlZDogYnVzPSVkLCBpZD0lZCBkdiBAICVwXG4iLAotCQkJaW9jLT5uYW1lLCBidXMsIGlkLCAmZHYpKTsKLQotCS8qIFByZXAgRFYgc3RydWN0dXJlCi0JICovCi0JbWVtc2V0ICgmZHYsIDAsIHNpemVvZihEVlBBUkFNRVRFUlMpKTsKLQlkdi5pZCA9IGlkOwotCi0JLyogUG9wdWxhdGUgdG1heCB3aXRoIHRoZSBjdXJyZW50IG1heGltdW0KLQkgKiB0cmFuc2ZlciBwYXJhbWV0ZXJzIGZvciB0aGlzIHRhcmdldC4KLQkgKiBFeGl0IGlmIG5hcnJvdyBhbmQgYXN5bmMuCi0JICovCi0JZHYuY21kID0gTVBUX0dFVF9OVlJBTV9WQUxTOwotCW1wdHNjc2loX2R2X3Bhcm1zKGhkLCAmZHYsIE5VTEwpOwotCi0JLyogUHJlcCBTQ1NJIElPIHN0cnVjdHVyZQotCSAqLwotCWlvY21kLmlkID0gaWQ7Ci0JaW9jbWQuYnVzID0gYnVzOwotCWlvY21kLmx1biA9IGx1bjsKLQlpb2NtZC5mbGFncyA9IDA7Ci0JaW9jbWQucGh5c0Rpc2tOdW0gPSAtMTsKLQlpb2NtZC5yc3ZkID0gaW9jbWQucnN2ZDIgPSAwOwotCi0JdnRhcmdldCA9IGhkLT5UYXJnZXRzW2lkXTsKLQotCS8qIFVzZSB0YWdnZWQgY29tbWFuZHMgaWYgcG9zc2libGUuCi0JICovCi0JaWYgKHZ0YXJnZXQpIHsKLQkJaWYgKHZ0YXJnZXQtPnRmbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfUV9ZRVMpCi0JCQlpb2NtZC5mbGFncyB8PSBNUFRfSUNGTEFHX1RBR0dFRF9DTUQ7Ci0JCWVsc2UgewotCQkJaWYgKGhkLT5pb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkIDwgMHgwMTAwMDYwMCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKChoZC0+aW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCA+PSAweDAxMDEwMDAwKSAmJgotCQkJCShoZC0+aW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCA8IDB4MDEwMTBCMDApKQotCQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JLyogUHJlcCBjZmcgc3RydWN0dXJlCi0JICovCi0JY2ZnLnBhZ2VBZGRyID0gKGJ1czw8OCkgfCBpZDsKLQljZmcuY2ZnaGRyLmhkciA9IE5VTEw7Ci0KLQkvKiBQcmVwIFNEUDAgaGVhZGVyCi0JICovCi0JaGVhZGVyMC5QYWdlVmVyc2lvbiA9IGlvYy0+c3BpX2RhdGEuc2RwMHZlcnNpb247Ci0JaGVhZGVyMC5QYWdlTGVuZ3RoID0gaW9jLT5zcGlfZGF0YS5zZHAwbGVuZ3RoOwotCWhlYWRlcjAuUGFnZU51bWJlciA9IDA7Ci0JaGVhZGVyMC5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfU0NTSV9ERVZJQ0U7Ci0KLQkvKiBQcmVwIFNEUDEgaGVhZGVyCi0JICovCi0JaGVhZGVyMS5QYWdlVmVyc2lvbiA9IGlvYy0+c3BpX2RhdGEuc2RwMXZlcnNpb247Ci0JaGVhZGVyMS5QYWdlTGVuZ3RoID0gaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoOwotCWhlYWRlcjEuUGFnZU51bWJlciA9IDE7Ci0JaGVhZGVyMS5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfU0NTSV9ERVZJQ0U7Ci0KLQlpZiAoaGVhZGVyMC5QYWdlTGVuZ3RoICYgMSkKLQkJZHZfYWxsb2MgPSAoaGVhZGVyMC5QYWdlTGVuZ3RoICogNCkgKyA0OwotCi0JZHZfYWxsb2MgKz0gICgyMDQ4ICsgKGhlYWRlcjEuUGFnZUxlbmd0aCAqIDQpKTsKLQotCXBEdkJ1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGlvYy0+cGNpZGV2LCBkdl9hbGxvYywgJmR2YnVmX2RtYSk7Ci0JaWYgKHBEdkJ1ZiA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCXN6ID0gMDsKLQlwYnVmMSA9ICh1OCAqKXBEdkJ1ZjsKLQlidWYxX2RtYSA9IGR2YnVmX2RtYTsKLQlzeiArPTEwMjQ7Ci0KLQlwYnVmMiA9ICh1OCAqKSAocER2QnVmICsgc3opOwotCWJ1ZjJfZG1hID0gZHZidWZfZG1hICsgc3o7Ci0Jc3ogKz0xMDI0OwotCi0JcGNmZzBEYXRhID0gKFNDU0lEZXZpY2VQYWdlMF90ICopIChwRHZCdWYgKyBzeik7Ci0JY2ZnMF9kbWFfYWRkciA9IGR2YnVmX2RtYSArIHN6OwotCXN6ICs9IGhlYWRlcjAuUGFnZUxlbmd0aCAqIDQ7Ci0KLQkvKiA4LWJ5dGUgYWxpZ25tZW50Ci0JICovCi0JaWYgKGhlYWRlcjAuUGFnZUxlbmd0aCAmIDEpCi0JCXN6ICs9IDQ7Ci0KLQlwY2ZnMURhdGEgPSAoU0NTSURldmljZVBhZ2UxX3QgKikgKHBEdkJ1ZiArIHN6KTsKLQljZmcxX2RtYV9hZGRyID0gZHZidWZfZG1hICsgc3o7Ci0KLQkvKiBTa2lwIHRoaXMgSUQ/IFNldCBjZmcuY2ZnaGRyLmhkciB0byBmb3JjZSBjb25maWcgcGFnZSB3cml0ZQotCSAqLwotCXsKLQkJU3BpQ2ZnRGF0YSAqcHNwaV9kYXRhID0gJmhkLT5pb2MtPnNwaV9kYXRhOwotCQlpZiAocHNwaV9kYXRhLT5udnJhbSAmJiAocHNwaV9kYXRhLT5udnJhbVtpZF0gIT0gTVBUX0hPU1RfTlZSQU1fSU5WQUxJRCkpIHsKLQkJCS8qIFNldCB0aGUgZmFjdG9yIGZyb20gbnZyYW0gKi8KLQkJCW5mYWN0b3IgPSAocHNwaV9kYXRhLT5udnJhbVtpZF0gJiBNUFRfTlZSQU1fU1lOQ19NQVNLKSA+PiA4OwotCQkJaWYgKG5mYWN0b3IgPCBwc3BpX2RhdGEtPm1pblN5bmNGYWN0b3IgKQotCQkJCW5mYWN0b3IgPSBwc3BpX2RhdGEtPm1pblN5bmNGYWN0b3I7Ci0KLQkJCWlmICghKHBzcGlfZGF0YS0+bnZyYW1baWRdICYgTVBUX05WUkFNX0lEX1NDQU5fRU5BQkxFKSB8fAotCQkJCShwc3BpX2RhdGEtPlBvcnRGbGFncyA9PSBNUElfU0NTSVBPUlRQQUdFMl9QT1JUX0ZMQUdTX09GRl9EVikgKSB7Ci0KLQkJCQlkZHZwcmludGsoKE1ZSU9DX3NfTk9URV9GTVQgIkRWIFNraXBwZWQ6IGJ1cywgaWQsIGx1biAoJWQsICVkLCAlZClcbiIsCi0JCQkJCWlvYy0+bmFtZSwgYnVzLCBpZCwgbHVuKSk7Ci0KLQkJCQlkdi5jbWQgPSBNUFRfU0VUX01BWDsKLQkJCQltcHRzY3NpaF9kdl9wYXJtcyhoZCwgJmR2LCAodm9pZCAqKXBjZmcxRGF0YSk7Ci0JCQkJY2ZnLmNmZ2hkci5oZHIgPSAmaGVhZGVyMTsKLQotCQkJCS8qIFNhdmUgdGhlIGZpbmFsIG5lZ290aWF0ZWQgc2V0dGluZ3MgdG8KLQkJCQkgKiBTQ1NJIGRldmljZSBwYWdlIDEuCi0JCQkJICovCi0JCQkJY2ZnLnBoeXNBZGRyID0gY2ZnMV9kbWFfYWRkcjsKLQkJCQljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UOwotCQkJCWNmZy5kaXIgPSAxOwotCQkJCW1wdF9jb25maWcoaGQtPmlvYywgJmNmZyk7Ci0JCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIEZpbmlzaCBpb2NtZCBpbml0aXRpYWxpemF0aW9uIC0gaGlkZGVuIG9yIHZpc2libGUgZGlzaz8gKi8KLQlpZiAoaW9jLT5yYWlkX2RhdGEucElvY1BnMykgewotCQkvKiBTZWFyY2ggSU9DIHBhZ2UgMyBmb3IgbWF0Y2hpbmcgaWQKLQkJICovCi0JCUlvYzNQaHlzRGlza190ICpwUERpc2sgPSAgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7Ci0JCWludAkJbnVtUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7Ci0KLQkJd2hpbGUgKG51bVBEaXNrKSB7Ci0JCQlpZiAocFBEaXNrLT5QaHlzRGlza0lEID09IGlkKSB7Ci0JCQkJLyogbWF0Y2ggKi8KLQkJCQlpb2NtZC5mbGFncyB8PSBNUFRfSUNGTEFHX1BIWVNfRElTSzsKLQkJCQlpb2NtZC5waHlzRGlza051bSA9IHBQRGlzay0+UGh5c0Rpc2tOdW07Ci0KLQkJCQkvKiBRdWllc2NlIHRoZSBJTQotCQkJCSAqLwotCQkJCWlmIChtcHRzY3NpaF9kb19yYWlkKGhkLCBNUElfUkFJRF9BQ1RJT05fUVVJRVNDRV9QSFlTX0lPLCAmaW9jbWQpIDwgMCkgewotCQkJCQlkZHZwcmludGsoKE1ZSU9DX3NfRVJSX0ZNVCAiUkFJRCBRdWVpc2NlIEZBSUxFRCFcbiIsIGlvYy0+bmFtZSkpOwotCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJCXBQRGlzaysrOwotCQkJbnVtUERpc2stLTsKLQkJfQotCX0KLQotCS8qIFJBSUQgVm9sdW1lIElEJ3MgbWF5IGRvdWJsZSBmb3IgYSBwaHlzaWNhbCBkZXZpY2UuIElmIFJBSUQgYnV0Ci0JICogbm90IGEgcGh5c2ljYWwgSUQgYXMgd2VsbCwgc2tpcCBEVi4KLQkgKi8KLQlpZiAoKGhkLT5pb2MtPnJhaWRfZGF0YS5pc1JhaWQgJiAoMSA8PCBpZCkpICYmICEoaW9jbWQuZmxhZ3MgJiBNUFRfSUNGTEFHX1BIWVNfRElTSykpCi0JCWdvdG8gdGFyZ2V0X2RvbmU7Ci0KLQotCS8qIEJhc2ljIFRlc3QuCi0JICogQXN5bmMgJiBOYXJyb3cgLSBJbnF1aXJ5Ci0JICogQXN5bmMgJiBOYXJyb3cgLSBJbnF1aXJ5Ci0JICogTWF4aW11bSB0cmFuc2ZlciByYXRlIC0gSW5xdWlyeQotCSAqIENvbXBhcmUgYnVmZmVyczoKLQkgKglJZiBjb21wYXJlLCB0ZXN0IGNvbXBsZXRlLgotCSAqCUlmIG1pc2NvbXBhcmUgYW5kIGZpcnN0IHBhc3MsIHJlcGVhdAotCSAqCUlmIG1pc2NvbXBhcmUgYW5kIG5vdCBmaXJzdCBwYXNzLCBmYWxsIGJhY2sgYW5kIHJlcGVhdAotCSAqLwotCWhkLT5wTG9jYWwgPSBOVUxMOwotCXJlYWRQYWdlMCA9IDA7Ci0Jc3ogPSBTQ1NJX01BWF9JTlFVSVJZX0JZVEVTOwotCXJjID0gTVBUX1NDQU5EVl9HT09EOwotCXdoaWxlICgxKSB7Ci0JCWRkdnByaW50aygoTVlJT0Nfc19OT1RFX0ZNVCAiRFY6IFN0YXJ0IEJhc2ljIHRlc3Qgb24gaWQ9JWRcbiIsIGlvYy0+bmFtZSwgaWQpKTsKLQkJcmV0Y29kZSA9IDA7Ci0JCWR2LmNtZCA9IE1QVF9TRVRfTUlOOwotCQltcHRzY3NpaF9kdl9wYXJtcyhoZCwgJmR2LCAodm9pZCAqKXBjZmcxRGF0YSk7Ci0KLQkJY2ZnLmNmZ2hkci5oZHIgPSAmaGVhZGVyMTsKLQkJY2ZnLnBoeXNBZGRyID0gY2ZnMV9kbWFfYWRkcjsKLQkJY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfV1JJVEVfQ1VSUkVOVDsKLQkJY2ZnLmRpciA9IDE7Ci0JCWlmIChtcHRfY29uZmlnKGhkLT5pb2MsICZjZmcpICE9IDApCi0JCQlnb3RvIHRhcmdldF9kb25lOwotCi0JCS8qIFdpZGUgLSBuYXJyb3cgLSB3aWRlIHdvcmthcm91bmQgY2FzZQotCQkgKi8KLQkJaWYgKChyYyA9PSBNUFRfU0NBTkRWX0lTU1VFX1NFTlNFKSAmJiBkdi5tYXgud2lkdGgpIHsKLQkJCS8qIFNlbmQgYW4gdW50YWdnZWQgY29tbWFuZCB0byByZXNldCBkaXNrIFFzIGNvcnJ1cHRlZAotCQkJICogd2hlbiBhIHBhcml0eSBlcnJvciBvY2N1cnMgb24gYSBSZXF1ZXN0IFNlbnNlLgotCQkJICovCi0JCQlpZiAoKGhkLT5pb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkID49IDB4MDEwMDA2MDApIHx8Ci0JCQkJKChoZC0+aW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCA+PSAweDAxMDEwMDAwKSAmJgotCQkJCShoZC0+aW9jLT5mYWN0cy5GV1ZlcnNpb24uV29yZCA8IDB4MDEwMTBCMDApKSApIHsKLQotCQkJCWlvY21kLmNtZCA9IFJFUVVFU1RfU0VOU0U7Ci0JCQkJaW9jbWQuZGF0YV9kbWEgPSBidWYxX2RtYTsKLQkJCQlpb2NtZC5kYXRhID0gcGJ1ZjE7Ci0JCQkJaW9jbWQuc2l6ZSA9IDB4MTI7Ci0JCQkJaWYgKG1wdHNjc2loX2RvX2NtZChoZCwgJmlvY21kKSA8IDApCi0JCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCQkJZWxzZSB7Ci0JCQkJCWlmIChoZC0+cExvY2FsID09IE5VTEwpCi0JCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCQlyYyA9IGhkLT5wTG9jYWwtPmNvbXBsZXRpb247Ci0JCQkJCWlmICgocmMgPT0gTVBUX1NDQU5EVl9HT09EKSB8fCAocmMgPT0gTVBUX1NDQU5EVl9TRU5TRSkpIHsKLQkJCQkJCWR2Lm1heC53aWR0aCA9IDA7Ci0JCQkJCQlkb0ZhbGxiYWNrID0gMDsKLQkJCQkJfSBlbHNlCi0JCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCX0KLQkJCX0gZWxzZQotCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCX0KLQotCQlpb2NtZC5jbWQgPSBJTlFVSVJZOwotCQlpb2NtZC5kYXRhX2RtYSA9IGJ1ZjFfZG1hOwotCQlpb2NtZC5kYXRhID0gcGJ1ZjE7Ci0JCWlvY21kLnNpemUgPSBzejsKLQkJbWVtc2V0KHBidWYxLCAweDAwLCBzeik7Ci0JCWlmIChtcHRzY3NpaF9kb19jbWQoaGQsICZpb2NtZCkgPCAwKQotCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJZWxzZSB7Ci0JCQlpZiAoaGQtPnBMb2NhbCA9PSBOVUxMKQotCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCQlyYyA9IGhkLT5wTG9jYWwtPmNvbXBsZXRpb247Ci0JCQlpZiAocmMgPT0gTVBUX1NDQU5EVl9HT09EKSB7Ci0JCQkJaWYgKGhkLT5wTG9jYWwtPnNjc2lTdGF0dXMgPT0gU0FNX1NUQVRfQlVTWSkgewotCQkJCQlpZiAoKGlvY21kLmZsYWdzICYgTVBUX0lDRkxBR19UQUdHRURfQ01EKSA9PSAwKQotCQkJCQkJcmV0Y29kZSA9IDE7Ci0JCQkJCWVsc2UKLQkJCQkJCXJldGNvZGUgPSAwOwotCi0JCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCQkJfQotCQkJfSBlbHNlIGlmICAocmMgPT0gTVBUX1NDQU5EVl9TRU5TRSkgewotCQkJCTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogSWYgZmlyc3QgY29tbWFuZCBkb2Vzbid0IGNvbXBsZXRlCi0JCQkJICogd2l0aCBhIGdvb2Qgc3RhdHVzIG9yIHdpdGggYSBjaGVjayBjb25kaXRpb24sCi0JCQkJICogZXhpdC4KLQkJCQkgKi8KLQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJfQotCQl9Ci0KLQkJLyogUmVzZXQgdGhlIHNpemUgZm9yIGRpc2tzCi0JCSAqLwotCQlpbnEwID0gKCpwYnVmMSkgJiAweDFGOwotCQlpZiAoKGlucTAgPT0gMCkgJiYgdnRhcmdldCAmJiAhdnRhcmdldC0+cmFpZFZvbHVtZSkgewotCQkJc3ogPSAweDQwOwotCQkJaW9jbWQuc2l6ZSA9IHN6OwotCQl9Ci0KLQkJLyogQW5vdGhlciBHRU0gd29ya2Fyb3VuZC4gQ2hlY2sgcGVyaXBoZXJhbCBkZXZpY2UgdHlwZSwKLQkJICogaWYgUFJPQ0VTU09SLCBxdWl0IERWLgotCQkgKi8KLQkJaWYgKGlucTAgPT0gVFlQRV9QUk9DRVNTT1IpIHsKLQkJCW1wdHNjc2loX2luaXRUYXJnZXQoaGQsCi0JCQkJdnRhcmdldCwKLQkJCQlsdW4sCi0JCQkJcGJ1ZjEsCi0JCQkJc3opOwotCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJfQotCi0JCWlmIChpbnEwID4gMHgwOCkKLQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0KLQkJaWYgKG1wdHNjc2loX2RvX2NtZChoZCwgJmlvY21kKSA8IDApCi0JCQlnb3RvIHRhcmdldF9kb25lOwotCi0JCWlmIChzeiA9PSAweDQwKSB7Ci0JCQlpZiAoKHZ0YXJnZXQtPm1heFdpZHRoID09IDEpICYmICh2dGFyZ2V0LT5tYXhPZmZzZXQpICYmIChuZmFjdG9yIDwgMHgwQSkKLQkJCQkmJiAodnRhcmdldC0+bWluU3luY0ZhY3RvciA+IDB4MDkpKSB7Ci0JCQkJaWYgKChwYnVmMVs1Nl0gJiAweDA0KSA9PSAwKQotCQkJCQk7Ci0JCQkJZWxzZSBpZiAoKHBidWYxWzU2XSAmIDB4MDEpID09IDEpIHsKLQkJCQkJdnRhcmdldC0+bWluU3luY0ZhY3RvciA9Ci0JCQkJCSAgICBuZmFjdG9yID4gTVBUX1VMVFJBMzIwID8gbmZhY3RvciA6IE1QVF9VTFRSQTMyMDsKLQkJCQl9IGVsc2UgewotCQkJCQl2dGFyZ2V0LT5taW5TeW5jRmFjdG9yID0KLQkJCQkJICAgIG5mYWN0b3IgPiBNUFRfVUxUUkExNjAgPyBuZmFjdG9yIDogTVBUX1VMVFJBMTYwOwotCQkJCX0KLQotCQkJCWR2Lm1heC5mYWN0b3IgPSB2dGFyZ2V0LT5taW5TeW5jRmFjdG9yOwotCi0JCQkJaWYgKChwYnVmMVs1Nl0gJiAweDAyKSA9PSAwKSB7Ci0JCQkJCXZ0YXJnZXQtPm5lZ29GbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fUUFTOwotCQkJCQloZC0+aW9jLT5zcGlfZGF0YS5ub1FhcyA9IE1QVF9UQVJHRVRfTk9fTkVHT19RQVM7Ci0JCQkJCWRkdnByaW50aygoTVlJT0Nfc19OT1RFX0ZNVAotCQkJCQkgICAgIkRWOiBTdGFydCBCYXNpYyBub1FhcyBvbiBpZD0lZCBkdWUgdG8gcGJ1ZjFbNTZdPSV4XG4iLAotCQkJCQkgICAgaW9jLT5uYW1lLCBpZCwgcGJ1ZjFbNTZdKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGRvRmFsbGJhY2spCi0JCQlkdi5jbWQgPSBNUFRfRkFMTEJBQ0s7Ci0JCWVsc2UKLQkJCWR2LmNtZCA9IE1QVF9TRVRfTUFYOwotCi0JCW1wdHNjc2loX2R2X3Bhcm1zKGhkLCAmZHYsICh2b2lkICopcGNmZzFEYXRhKTsKLQkJaWYgKG1wdF9jb25maWcoaGQtPmlvYywgJmNmZykgIT0gMCkKLQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0KLQkJaWYgKCghZHYubm93LndpZHRoKSAmJiAoIWR2Lm5vdy5vZmZzZXQpKQotCQkJZ290byB0YXJnZXRfZG9uZTsKLQotCQlpb2NtZC5jbWQgPSBJTlFVSVJZOwotCQlpb2NtZC5kYXRhX2RtYSA9IGJ1ZjJfZG1hOwotCQlpb2NtZC5kYXRhID0gcGJ1ZjI7Ci0JCWlvY21kLnNpemUgPSBzejsKLQkJbWVtc2V0KHBidWYyLCAweDAwLCBzeik7Ci0JCWlmIChtcHRzY3NpaF9kb19jbWQoaGQsICZpb2NtZCkgPCAwKQotCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJZWxzZSBpZiAoaGQtPnBMb2NhbCA9PSBOVUxMKQotCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJZWxzZSB7Ci0JCQkvKiBTYXZlIHRoZSByZXR1cm4gY29kZS4KLQkJCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBhc3MsCi0JCQkgKiByZWFkIFNDU0kgRGV2aWNlIFBhZ2UgMAotCQkJICogYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IG1heCBwYXJhbWV0ZXJzLgotCQkJICovCi0JCQlyYyA9IGhkLT5wTG9jYWwtPmNvbXBsZXRpb247Ci0JCQlkb0ZhbGxiYWNrID0gMDsKLQkJCWlmIChyYyA9PSBNUFRfU0NBTkRWX0dPT0QpIHsKLQkJCQlpZiAoIXJlYWRQYWdlMCkgewotCQkJCQl1MzIgc2RwMF9pbmZvOwotCQkJCQl1MzIgc2RwMF9uZWdvOwotCi0JCQkJCWNmZy5jZmdoZHIuaGRyID0gJmhlYWRlcjA7Ci0JCQkJCWNmZy5waHlzQWRkciA9IGNmZzBfZG1hX2FkZHI7Ci0JCQkJCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQkJCQkJY2ZnLmRpciA9IDA7Ci0KLQkJCQkJaWYgKG1wdF9jb25maWcoaGQtPmlvYywgJmNmZykgIT0gMCkKLQkJCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0KLQkJCQkJc2RwMF9pbmZvID0gbGUzMl90b19jcHUocGNmZzBEYXRhLT5JbmZvcm1hdGlvbikgJiAweDBFOwotCQkJCQlzZHAwX25lZ28gPSAobGUzMl90b19jcHUocGNmZzBEYXRhLT5OZWdvdGlhdGVkUGFyYW1ldGVycykgJiAweEZGMDAgKSA+PiA4OwotCi0JCQkJCS8qIFF1YW50dW0gYW5kIEZ1aml0c3Ugd29ya2Fyb3VuZHMuCi0JCQkJCSAqIFF1YW50dW06IFBQUiBVMzIwIC0+IFBQUiByZXBseSB3aXRoIFVsdHJhMiBhbmQgd2lkZQotCQkJCQkgKiBGdWppdHN1OiBQUFIgVTMyMCAtPiBNc2cgUmVqZWN0IGFuZCBVbHRyYTIgYW5kIHdpZGUKLQkJCQkJICogUmVzZXRhcnQgd2l0aCBhIHJlcXVlc3QgZm9yIFUxNjAuCi0JCQkJCSAqLwotCQkJCQlpZiAoKGR2Lm5vdy5mYWN0b3IgPT0gTVBUX1VMVFJBMzIwKSAmJiAoc2RwMF9uZWdvID09IE1QVF9VTFRSQTIpKSB7Ci0JCQkJCQkJZG9GYWxsYmFjayA9IDE7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlkdi5jbWQgPSBNUFRfVVBEQVRFX01BWDsKLQkJCQkJCW1wdHNjc2loX2R2X3Bhcm1zKGhkLCAmZHYsICh2b2lkICopcGNmZzBEYXRhKTsKLQkJCQkJCS8qIFVwZGF0ZSB0aGUgU0NTSSBkZXZpY2UgcGFnZSAxIGFyZWEKLQkJCQkJCSAqLwotCQkJCQkJcGNmZzFEYXRhLT5SZXF1ZXN0ZWRQYXJhbWV0ZXJzID0gcGNmZzBEYXRhLT5OZWdvdGlhdGVkUGFyYW1ldGVyczsKLQkJCQkJCXJlYWRQYWdlMCA9IDE7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQkvKiBRdWFudHVtIHdvcmthcm91bmQuIFJlc3RhcnQgdGhpcyB0ZXN0IHdpbGwgdGhlIGZhbGxiYWNrCi0JCQkJICogZmxhZyBzZXQuCi0JCQkJICovCi0JCQkJaWYgKGRvRmFsbGJhY2sgPT0gMCkgewotCQkJCQlpZiAobWVtY21wKHBidWYxLCBwYnVmMiwgc3opICE9IDApIHsKLQkJCQkJCWlmICghZmlyc3RQYXNzKQotCQkJCQkJCWRvRmFsbGJhY2sgPSAxOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZGR2cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UCi0JCQkJCQkgICAgIkRWOklucXVpcnkgY29tcGFyZWQgaWQ9JWQsIGNhbGxpbmcgaW5pdFRhcmdldFxuIiwgaW9jLT5uYW1lLCBpZCkpOwotCQkJCQkJaGQtPmlvYy0+c3BpX2RhdGEuZHZTdGF0dXNbaWRdICY9IH5NUFRfU0NTSUNGR19EVl9OT1RfRE9ORTsKLQkJCQkJCW1wdHNjc2loX2luaXRUYXJnZXQoaGQsCi0JCQkJCQkJdnRhcmdldCwKLQkJCQkJCQlsdW4sCi0JCQkJCQkJcGJ1ZjEsCi0JCQkJCQkJc3opOwotCQkJCQkJYnJlYWs7CS8qIHRlc3QgY29tcGxldGUgKi8KLQkJCQkJfQotCQkJCX0KLQotCi0JCQl9IGVsc2UgaWYgKHJjID09IE1QVF9TQ0FORFZfSVNTVUVfU0VOU0UpCi0JCQkJZG9GYWxsYmFjayA9IDE7CS8qIHNldCBmYWxsYmFjayBmbGFnICovCi0JCQllbHNlIGlmICgocmMgPT0gTVBUX1NDQU5EVl9ESURfUkVTRVQpIHx8Ci0JCQkJIChyYyA9PSBNUFRfU0NBTkRWX1NFTlNFKSB8fAotCQkJCSAocmMgPT0gTVBUX1NDQU5EVl9GQUxMQkFDSykpCi0JCQkJZG9GYWxsYmFjayA9IDE7CS8qIHNldCBmYWxsYmFjayBmbGFnICovCi0JCQllbHNlCi0JCQkJZ290byB0YXJnZXRfZG9uZTsKLQotCQkJZmlyc3RQYXNzID0gMDsKLQkJfQotCX0KLQlkZHZwcmludGsoKE1ZSU9DX3NfTk9URV9GTVQgIkRWOiBCYXNpYyB0ZXN0IG9uIGlkPSVkIGNvbXBsZXRlZCBPSy5cbiIsIGlvYy0+bmFtZSwgaWQpKTsKLQotCWlmIChpb2MtPnNwaV9kYXRhLm1wdF9kdiA9PSAwKQotCQlnb3RvIHRhcmdldF9kb25lOwotCi0JaW5xMCA9ICgqcGJ1ZjEpICYgMHgxRjsKLQotCS8qIENvbnRpbnVlIG9ubHkgZm9yIGRpc2tzCi0JICovCi0JaWYgKGlucTAgIT0gMCkKLQkJZ290byB0YXJnZXRfZG9uZTsKLQotCWlmICggaW9jLT5zcGlfZGF0YS5Qb3J0RmxhZ3MgPT0gTVBJX1NDU0lQT1JUUEFHRTJfUE9SVF9GTEFHU19CQVNJQ19EVl9PTkxZICkKLQkJZ290byB0YXJnZXRfZG9uZTsKLQotCS8qIFN0YXJ0IHRoZSBFbmhhbmNlZCBUZXN0LgotCSAqIDApIGlzc3VlIFRVUiB0byBjbGVhciBvdXQgY2hlY2sgY29uZGl0aW9ucwotCSAqIDEpIHJlYWQgY2FwYWNpdHkgb2YgZWNobyAocmVndWxhcikgYnVmZmVyCi0JICogMikgcmVzZXJ2ZSBkZXZpY2UKLQkgKiAzKSBkbyB3cml0ZS1yZWFkLWNvbXBhcmUgZGF0YSBwYXR0ZXJuIHRlc3QKLQkgKiA0KSByZWxlYXNlCi0JICogNSkgdXBkYXRlIG5lZ28gcGFybXMgdG8gdGFyZ2V0IHN0cnVjdAotCSAqLwotCWNmZy5jZmdoZHIuaGRyID0gJmhlYWRlcjE7Ci0JY2ZnLnBoeXNBZGRyID0gY2ZnMV9kbWFfYWRkcjsKLQljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UOwotCWNmZy5kaXIgPSAxOwotCi0JaW9jbWQuY21kID0gVEVTVF9VTklUX1JFQURZOwotCWlvY21kLmRhdGFfZG1hID0gLTE7Ci0JaW9jbWQuZGF0YSA9IE5VTEw7Ci0JaW9jbWQuc2l6ZSA9IDA7Ci0Jbm90RG9uZSA9IDE7Ci0Jd2hpbGUgKG5vdERvbmUpIHsKLQkJaWYgKG1wdHNjc2loX2RvX2NtZChoZCwgJmlvY21kKSA8IDApCi0JCQlnb3RvIHRhcmdldF9kb25lOwotCi0JCWlmIChoZC0+cExvY2FsID09IE5VTEwpCi0JCQlnb3RvIHRhcmdldF9kb25lOwotCi0JCXJjID0gaGQtPnBMb2NhbC0+Y29tcGxldGlvbjsKLQkJaWYgKHJjID09IE1QVF9TQ0FORFZfR09PRCkKLQkJCW5vdERvbmUgPSAwOwotCQllbHNlIGlmIChyYyA9PSBNUFRfU0NBTkRWX1NFTlNFKSB7Ci0JCQl1OCBza2V5ID0gaGQtPnBMb2NhbC0+c2Vuc2VbMl0gJiAweDBGOwotCQkJdTggYXNjID0gaGQtPnBMb2NhbC0+c2Vuc2VbMTJdOwotCQkJdTggYXNjcSA9IGhkLT5wTG9jYWwtPnNlbnNlWzEzXTsKLQkJCWRkdnByaW50aygoTVlJT0Nfc19JTkZPX0ZNVAotCQkJCSJTZW5zZUtleTpBU0M6QVNDUSA9ICgleDolMDJ4OiUwMngpXG4iLAotCQkJCWlvYy0+bmFtZSwgc2tleSwgYXNjLCBhc2NxKSk7Ci0KLQkJCWlmIChza2V5ID09IFVOSVRfQVRURU5USU9OKQotCQkJCW5vdERvbmUrKzsgLyogcmVwZWF0ICovCi0JCQllbHNlIGlmICgoc2tleSA9PSBOT1RfUkVBRFkpICYmCi0JCQkJCShhc2MgPT0gMHgwNCkmJihhc2NxID09IDB4MDEpKSB7Ci0JCQkJLyogd2FpdCB0aGVuIHJlcGVhdCAqLwotCQkJCW1kZWxheSAoMjAwMCk7Ci0JCQkJbm90RG9uZSsrOwotCQkJfSBlbHNlIGlmICgoc2tleSA9PSBOT1RfUkVBRFkpICYmIChhc2MgPT0gMHgzQSkpIHsKLQkJCQkvKiBubyBtZWRpdW0sIHRyeSByZWFkIHRlc3QgYW55d2F5ICovCi0JCQkJbm90RG9uZSA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgotCQkJCSAqLwotCQkJCWRkdnByaW50aygoTVlJT0Nfc19JTkZPX0ZNVCAiRFY6IGZhdGFsIGVycm9yLiIsCi0JCQkJCQlpb2MtPm5hbWUpKTsKLQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJfQotCQl9IGVsc2UKLQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JfQotCi0JaW9jbWQuY21kID0gUkVBRF9CVUZGRVI7Ci0JaW9jbWQuZGF0YV9kbWEgPSBidWYxX2RtYTsKLQlpb2NtZC5kYXRhID0gcGJ1ZjE7Ci0JaW9jbWQuc2l6ZSA9IDQ7Ci0JaW9jbWQuZmxhZ3MgfD0gTVBUX0lDRkxBR19CVUZfQ0FQOwotCi0JZGF0YUJ1ZlNpemUgPSAwOwotCWVjaG9CdWZTaXplID0gMDsKLQlmb3IgKHBhdHQgPSAwOyBwYXR0IDwgMjsgcGF0dCsrKSB7Ci0JCWlmIChwYXR0ID09IDApCi0JCQlpb2NtZC5mbGFncyB8PSBNUFRfSUNGTEFHX0VDSE87Ci0JCWVsc2UKLQkJCWlvY21kLmZsYWdzICY9IH5NUFRfSUNGTEFHX0VDSE87Ci0KLQkJbm90RG9uZSA9IDE7Ci0JCXdoaWxlIChub3REb25lKSB7Ci0JCQlidWZzaXplID0gMDsKLQotCQkJLyogSWYgbm90IHJlYWR5IGFmdGVyIDggdHJpYWxzLAotCQkJICogZ2l2ZSB1cCBvbiB0aGlzIGRldmljZS4KLQkJCSAqLwotCQkJaWYgKG5vdERvbmUgPiA4KQotCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0KLQkJCWlmIChtcHRzY3NpaF9kb19jbWQoaGQsICZpb2NtZCkgPCAwKQotCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCQllbHNlIGlmIChoZC0+cExvY2FsID09IE5VTEwpCi0JCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJCWVsc2UgewotCQkJCXJjID0gaGQtPnBMb2NhbC0+Y29tcGxldGlvbjsKLQkJCQlkZHZwcmludGsoKCJSZWFkQnVmZmVyIENvbXAgQ29kZSAlZCIsIHJjKSk7Ci0JCQkJZGR2cHJpbnRrKCgiICBidWZmOiAlMHggJTB4ICUweCAlMHhcbiIsCi0JCQkJCXBidWYxWzBdLCBwYnVmMVsxXSwgcGJ1ZjFbMl0sIHBidWYxWzNdKSk7Ci0KLQkJCQlpZiAocmMgPT0gTVBUX1NDQU5EVl9HT09EKSB7Ci0JCQkJCW5vdERvbmUgPSAwOwotCQkJCQlpZiAoaW9jbWQuZmxhZ3MgJiBNUFRfSUNGTEFHX0VDSE8pIHsKLQkJCQkJCWJ1ZnNpemUgPSAgKChwYnVmMVsyXSAmIDB4MUYpIDw8OCkgfCBwYnVmMVszXTsKLQkJCQkJCWlmIChwYnVmMVswXSAmIDB4MDEpCi0JCQkJCQkJaW9jbWQuZmxhZ3MgfD0gTVBUX0lDRkxBR19FQk9TOwotCQkJCQl9IGVsc2UgewotCQkJCQkJYnVmc2l6ZSA9ICBwYnVmMVsxXTw8MTYgfCBwYnVmMVsyXTw8OCB8IHBidWYxWzNdOwotCQkJCQl9Ci0JCQkJfSBlbHNlIGlmIChyYyA9PSBNUFRfU0NBTkRWX1NFTlNFKSB7Ci0JCQkJCXU4IHNrZXkgPSBoZC0+cExvY2FsLT5zZW5zZVsyXSAmIDB4MEY7Ci0JCQkJCXU4IGFzYyA9IGhkLT5wTG9jYWwtPnNlbnNlWzEyXTsKLQkJCQkJdTggYXNjcSA9IGhkLT5wTG9jYWwtPnNlbnNlWzEzXTsKLQkJCQkJZGR2cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCi0JCQkJCQkiU2Vuc2VLZXk6QVNDOkFTQ1EgPSAoJXg6JTAyeDolMDJ4KVxuIiwKLQkJCQkJCWlvYy0+bmFtZSwgc2tleSwgYXNjLCBhc2NxKSk7Ci0JCQkJCWlmIChza2V5ID09IElMTEVHQUxfUkVRVUVTVCkgewotCQkJCQkJbm90RG9uZSA9IDA7Ci0JCQkJCX0gZWxzZSBpZiAoc2tleSA9PSBVTklUX0FUVEVOVElPTikgewotCQkJCQkJbm90RG9uZSsrOyAvKiByZXBlYXQgKi8KLQkJCQkJfSBlbHNlIGlmICgoc2tleSA9PSBOT1RfUkVBRFkpICYmCi0JCQkJCQkoYXNjID09IDB4MDQpJiYoYXNjcSA9PSAweDAxKSkgewotCQkJCQkJLyogd2FpdCB0aGVuIHJlcGVhdCAqLwotCQkJCQkJbWRlbGF5ICgyMDAwKTsKLQkJCQkJCW5vdERvbmUrKzsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgotCQkJCQkJICovCi0JCQkJCQlkZHZwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkRWOiBmYXRhbCBlcnJvci4iLAotCQkJCQkJCWlvYy0+bmFtZSkpOwotCQkJCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsCi0JCQkJCSAqLwotCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfRUNITykKLQkJCWVjaG9CdWZTaXplID0gYnVmc2l6ZTsKLQkJZWxzZQotCQkJZGF0YUJ1ZlNpemUgPSBidWZzaXplOwotCX0KLQlzeiA9IDA7Ci0JaW9jbWQuZmxhZ3MgJj0gfk1QVF9JQ0ZMQUdfQlVGX0NBUDsKLQotCS8qIFVzZSBlY2hvIGJ1ZmZlcnMgaWYgcG9zc2libGUsCi0JICogRXhpdCBpZiBib3RoIGJ1ZmZlcnMgYXJlIDAuCi0JICovCi0JaWYgKGVjaG9CdWZTaXplID4gMCkgewotCQlpb2NtZC5mbGFncyB8PSBNUFRfSUNGTEFHX0VDSE87Ci0JCWlmIChkYXRhQnVmU2l6ZSA+IDApCi0JCQlidWZzaXplID0gbWluKGVjaG9CdWZTaXplLCBkYXRhQnVmU2l6ZSk7Ci0JCWVsc2UKLQkJCWJ1ZnNpemUgPSBlY2hvQnVmU2l6ZTsKLQl9IGVsc2UgaWYgKGRhdGFCdWZTaXplID09IDApCi0JCWdvdG8gdGFyZ2V0X2RvbmU7Ci0KLQlkZHZwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIiVzIEJ1ZmZlciBDYXBhY2l0eSAlZFxuIiwgaW9jLT5uYW1lLAotCQkoaW9jbWQuZmxhZ3MgJiBNUFRfSUNGTEFHX0VDSE8pID8gIkVjaG8iIDogIiAiLCBidWZzaXplKSk7Ci0KLQkvKiBEYXRhIGJ1ZmZlcnMgZm9yIHdyaXRlLXJlYWQtY29tcGFyZSB0ZXN0IG1heCAxSy4KLQkgKi8KLQlzeiA9IG1pbihidWZzaXplLCAxMDI0KTsKLQotCS8qIC0tLSBsb29wIC0tLS0KLQkgKiBPbiBmaXJzdCBwYXNzLCBhbHdheXMgaXNzdWUgYSByZXNlcnZlLgotCSAqIE9uIGFkZGl0aW9uYWwgbG9vcHMsIG9ubHkgaWYgYSByZXNldCBoYXMgb2NjdXJyZWQuCi0JICogaW9jbWQuZmxhZ3MgaW5kaWNhdGVzIGlmIGVjaG8gb3IgcmVndWxhciBidWZmZXIKLQkgKi8KLQlmb3IgKHBhdHQgPSAwOyBwYXR0IDwgNDsgcGF0dCsrKSB7Ci0JCWRkdnByaW50aygoIlBhdHRlcm4gJWRcbiIsIHBhdHQpKTsKLQkJaWYgKChpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfUkVTRVJWRUQpICYmIChpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfRElEX1JFU0VUKSkgewotCQkJaW9jbWQuY21kID0gVEVTVF9VTklUX1JFQURZOwotCQkJaW9jbWQuZGF0YV9kbWEgPSAtMTsKLQkJCWlvY21kLmRhdGEgPSBOVUxMOwotCQkJaW9jbWQuc2l6ZSA9IDA7Ci0JCQlpZiAobXB0c2NzaWhfZG9fY21kKGhkLCAmaW9jbWQpIDwgMCkKLQkJCQlnb3RvIHRhcmdldF9kb25lOwotCi0JCQlpb2NtZC5jbWQgPSBSRUxFQVNFOwotCQkJaW9jbWQuZGF0YV9kbWEgPSAtMTsKLQkJCWlvY21kLmRhdGEgPSBOVUxMOwotCQkJaW9jbWQuc2l6ZSA9IDA7Ci0JCQlpZiAobXB0c2NzaWhfZG9fY21kKGhkLCAmaW9jbWQpIDwgMCkKLQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJZWxzZSBpZiAoaGQtPnBMb2NhbCA9PSBOVUxMKQotCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCQllbHNlIHsKLQkJCQlyYyA9IGhkLT5wTG9jYWwtPmNvbXBsZXRpb247Ci0JCQkJZGR2cHJpbnRrKCgiUmVsZWFzZSByYyAlZFxuIiwgcmMpKTsKLQkJCQlpZiAocmMgPT0gTVBUX1NDQU5EVl9HT09EKQotCQkJCQlpb2NtZC5mbGFncyAmPSB+TVBUX0lDRkxBR19SRVNFUlZFRDsKLQkJCQllbHNlCi0JCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCQl9Ci0JCQlpb2NtZC5mbGFncyAmPSB+TVBUX0lDRkxBR19SRVNFUlZFRDsKLQkJfQotCQlpb2NtZC5mbGFncyAmPSB+TVBUX0lDRkxBR19ESURfUkVTRVQ7Ci0KLQkJaWYgKGlvY21kLmZsYWdzICYgTVBUX0lDRkxBR19FQk9TKQotCQkJZ290byBza2lwX1Jlc2VydmU7Ci0KLQkJcmVwZWF0ID0gNTsKLQkJd2hpbGUgKHJlcGVhdCAmJiAoIShpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfUkVTRVJWRUQpKSkgewotCQkJaW9jbWQuY21kID0gUkVTRVJWRTsKLQkJCWlvY21kLmRhdGFfZG1hID0gLTE7Ci0JCQlpb2NtZC5kYXRhID0gTlVMTDsKLQkJCWlvY21kLnNpemUgPSAwOwotCQkJaWYgKG1wdHNjc2loX2RvX2NtZChoZCwgJmlvY21kKSA8IDApCi0JCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJCWVsc2UgaWYgKGhkLT5wTG9jYWwgPT0gTlVMTCkKLQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJZWxzZSB7Ci0JCQkJcmMgPSBoZC0+cExvY2FsLT5jb21wbGV0aW9uOwotCQkJCWlmIChyYyA9PSBNUFRfU0NBTkRWX0dPT0QpIHsKLQkJCQkJaW9jbWQuZmxhZ3MgfD0gTVBUX0lDRkxBR19SRVNFUlZFRDsKLQkJCQl9IGVsc2UgaWYgKHJjID09IE1QVF9TQ0FORFZfU0VOU0UpIHsKLQkJCQkJLyogV2FpdCBpZiBjb21pbmcgcmVhZHkKLQkJCQkJICovCi0JCQkJCXU4IHNrZXkgPSBoZC0+cExvY2FsLT5zZW5zZVsyXSAmIDB4MEY7Ci0JCQkJCXU4IGFzYyA9IGhkLT5wTG9jYWwtPnNlbnNlWzEyXTsKLQkJCQkJdTggYXNjcSA9IGhkLT5wTG9jYWwtPnNlbnNlWzEzXTsKLQkJCQkJZGR2cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCi0JCQkJCQkiRFY6IFJlc2VydmUgRmFpbGVkOiAiLCBpb2MtPm5hbWUpKTsKLQkJCQkJZGR2cHJpbnRrKCgiU2Vuc2VLZXk6QVNDOkFTQ1EgPSAoJXg6JTAyeDolMDJ4KVxuIiwKLQkJCQkJCQlza2V5LCBhc2MsIGFzY3EpKTsKLQotCQkJCQlpZiAoKHNrZXkgPT0gTk9UX1JFQURZKSAmJiAoYXNjID09IDB4MDQpJiYKLQkJCQkJCQkJCShhc2NxID09IDB4MDEpKSB7Ci0JCQkJCQkvKiB3YWl0IHRoZW4gcmVwZWF0ICovCi0JCQkJCQltZGVsYXkgKDIwMDApOwotCQkJCQkJbm90RG9uZSsrOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZGR2cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCi0JCQkJCQkJIkRWOiBSZXNlcnZlZCBGYWlsZWQuIiwgaW9jLT5uYW1lKSk7Ci0JCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZGR2cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJEVjogUmVzZXJ2ZWQgRmFpbGVkLiIsCi0JCQkJCQkJIGlvYy0+bmFtZSkpOwotCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCX0KLQkJCX0KLQkJfQotCi1za2lwX1Jlc2VydmU6Ci0JCW1wdHNjc2loX2ZpbGxidWYocGJ1ZjEsIHN6LCBwYXR0LCAxKTsKLQkJaW9jbWQuY21kID0gV1JJVEVfQlVGRkVSOwotCQlpb2NtZC5kYXRhX2RtYSA9IGJ1ZjFfZG1hOwotCQlpb2NtZC5kYXRhID0gcGJ1ZjE7Ci0JCWlvY21kLnNpemUgPSBzejsKLQkJaWYgKG1wdHNjc2loX2RvX2NtZChoZCwgJmlvY21kKSA8IDApCi0JCQlnb3RvIHRhcmdldF9kb25lOwotCQllbHNlIGlmIChoZC0+cExvY2FsID09IE5VTEwpCi0JCQlnb3RvIHRhcmdldF9kb25lOwotCQllbHNlIHsKLQkJCXJjID0gaGQtPnBMb2NhbC0+Y29tcGxldGlvbjsKLQkJCWlmIChyYyA9PSBNUFRfU0NBTkRWX0dPT0QpCi0JCQkJOwkJLyogSXNzdWUgcmVhZCBidWZmZXIgKi8KLQkJCWVsc2UgaWYgKHJjID09IE1QVF9TQ0FORFZfRElEX1JFU0VUKSB7Ci0JCQkJLyogSWYgdXNpbmcgZWNobyBidWZmZXJzLCByZXNldCB0byBkYXRhIGJ1ZmZlcnMuCi0JCQkJICogRWxzZSBkbyBGYWxsYmFjayBhbmQgcmVzdGFydAotCQkJCSAqIHRoaXMgdGVzdCAocmUtaXNzdWUgcmVzZXJ2ZQotCQkJCSAqIGJlY2F1c2Ugb2YgYnVzIHJlc2V0KS4KLQkJCQkgKi8KLQkJCQlpZiAoKGlvY21kLmZsYWdzICYgTVBUX0lDRkxBR19FQ0hPKSAmJiAoZGF0YUJ1ZlNpemUgPj0gYnVmc2l6ZSkpIHsKLQkJCQkJaW9jbWQuZmxhZ3MgJj0gfk1QVF9JQ0ZMQUdfRUNITzsKLQkJCQl9IGVsc2UgewotCQkJCQlkdi5jbWQgPSBNUFRfRkFMTEJBQ0s7Ci0JCQkJCW1wdHNjc2loX2R2X3Bhcm1zKGhkLCAmZHYsICh2b2lkICopcGNmZzFEYXRhKTsKLQotCQkJCQlpZiAobXB0X2NvbmZpZyhoZC0+aW9jLCAmY2ZnKSAhPSAwKQotCQkJCQkJZ290byB0YXJnZXRfZG9uZTsKLQotCQkJCQlpZiAoKCFkdi5ub3cud2lkdGgpICYmICghZHYubm93Lm9mZnNldCkpCi0JCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCX0KLQotCQkJCWlvY21kLmZsYWdzIHw9IE1QVF9JQ0ZMQUdfRElEX1JFU0VUOwotCQkJCXBhdHQgPSAtMTsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSBpZiAocmMgPT0gTVBUX1NDQU5EVl9TRU5TRSkgewotCQkJCS8qIFJlc3RhcnQgZGF0YSB0ZXN0IGlmIFVBLCBlbHNlIHF1aXQuCi0JCQkJICovCi0JCQkJdTggc2tleSA9IGhkLT5wTG9jYWwtPnNlbnNlWzJdICYgMHgwRjsKLQkJCQlkZHZwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQKLQkJCQkJIlNlbnNlS2V5OkFTQzpBU0NRID0gKCV4OiUwMng6JTAyeClcbiIsIGlvYy0+bmFtZSwgc2tleSwKLQkJCQkJaGQtPnBMb2NhbC0+c2Vuc2VbMTJdLCBoZC0+cExvY2FsLT5zZW5zZVsxM10pKTsKLQkJCQlpZiAoc2tleSA9PSBVTklUX0FUVEVOVElPTikgewotCQkJCQlwYXR0ID0gLTE7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSBpZiAoc2tleSA9PSBJTExFR0FMX1JFUVVFU1QpIHsKLQkJCQkJaWYgKGlvY21kLmZsYWdzICYgTVBUX0lDRkxBR19FQ0hPKSB7Ci0JCQkJCQlpZiAoZGF0YUJ1ZlNpemUgPj0gYnVmc2l6ZSkgewotCQkJCQkJCWlvY21kLmZsYWdzICY9IH5NUFRfSUNGTEFHX0VDSE87Ci0JCQkJCQkJcGF0dCA9IC0xOwotCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogZmF0YWwgZXJyb3IgKi8KLQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJfQotCQl9Ci0KLQkJaW9jbWQuY21kID0gUkVBRF9CVUZGRVI7Ci0JCWlvY21kLmRhdGFfZG1hID0gYnVmMl9kbWE7Ci0JCWlvY21kLmRhdGEgPSBwYnVmMjsKLQkJaW9jbWQuc2l6ZSA9IHN6OwotCQlpZiAobXB0c2NzaWhfZG9fY21kKGhkLCAmaW9jbWQpIDwgMCkKLQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCWVsc2UgaWYgKGhkLT5wTG9jYWwgPT0gTlVMTCkKLQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0JCWVsc2UgewotCQkJcmMgPSBoZC0+cExvY2FsLT5jb21wbGV0aW9uOwotCQkJaWYgKHJjID09IE1QVF9TQ0FORFZfR09PRCkgewotCQkJCSAvKiBJZiBidWZmZXJzIGNvbXBhcmUsCi0JCQkJICAqIGdvIHRvIG5leHQgcGF0dGVybiwKLQkJCQkgICogZWxzZSwgZG8gYSBmYWxsYmFjayBhbmQgcmVzdGFydAotCQkJCSAgKiBkYXRhIHRyYW5zZmVyIHRlc3QuCi0JCQkJICAqLwotCQkJCWlmIChtZW1jbXAgKHBidWYxLCBwYnVmMiwgc3opID09IDApIHsKLQkJCQkJOyAvKiBnb3RvIG5leHQgcGF0dGVybiAqLwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIE1pc2NvbXBhcmUgd2l0aCBFY2hvIGJ1ZmZlciwgZ28gdG8gZGF0YSBidWZmZXIsCi0JCQkJCSAqIGlmIHRoYXQgYnVmZmVyIGV4aXN0cy4KLQkJCQkJICogTWlzY29tcGFyZSB3aXRoIERhdGEgYnVmZmVyLCBjaGVjayBmaXJzdCA0IGJ5dGVzLAotCQkJCQkgKiBzb21lIGRldmljZXMgcmV0dXJuIGNhcGFjaXR5LiBFeGl0IGluIHRoaXMgY2FzZS4KLQkJCQkJICovCi0JCQkJCWlmIChpb2NtZC5mbGFncyAmIE1QVF9JQ0ZMQUdfRUNITykgewotCQkJCQkJaWYgKGRhdGFCdWZTaXplID49IGJ1ZnNpemUpCi0JCQkJCQkJaW9jbWQuZmxhZ3MgJj0gfk1QVF9JQ0ZMQUdfRUNITzsKLQkJCQkJCWVsc2UKLQkJCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaWYgKGRhdGFCdWZTaXplID09IChwYnVmMlsxXTw8MTYgfCBwYnVmMlsyXTw8OCB8IHBidWYyWzNdKSkgewotCQkJCQkJCS8qIEFyZ2guIERldmljZSByZXR1cm5pbmcgd3JvbmcgZGF0YS4KLQkJCQkJCQkgKiBRdWl0IERWIGZvciB0aGlzIGRldmljZS4KLQkJCQkJCQkgKi8KLQkJCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCQkJfQotCi0JCQkJCQkvKiBIYWQgYW4gYWN0dWFsIG1pc2NvbXBhcmUuIFNsb3cgZG93bi4qLwotCQkJCQkJZHYuY21kID0gTVBUX0ZBTExCQUNLOwotCQkJCQkJbXB0c2NzaWhfZHZfcGFybXMoaGQsICZkdiwgKHZvaWQgKilwY2ZnMURhdGEpOwotCi0JCQkJCQlpZiAobXB0X2NvbmZpZyhoZC0+aW9jLCAmY2ZnKSAhPSAwKQotCQkJCQkJCWdvdG8gdGFyZ2V0X2RvbmU7Ci0KLQkJCQkJCWlmICgoIWR2Lm5vdy53aWR0aCkgJiYgKCFkdi5ub3cub2Zmc2V0KSkKLQkJCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJCQl9Ci0KLQkJCQkJcGF0dCA9IC0xOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKHJjID09IE1QVF9TQ0FORFZfRElEX1JFU0VUKSB7Ci0JCQkJLyogRG8gRmFsbGJhY2sgYW5kIHJlc3RhcnQKLQkJCQkgKiB0aGlzIHRlc3QgKHJlLWlzc3VlIHJlc2VydmUKLQkJCQkgKiBiZWNhdXNlIG9mIGJ1cyByZXNldCkuCi0JCQkJICovCi0JCQkJZHYuY21kID0gTVBUX0ZBTExCQUNLOwotCQkJCW1wdHNjc2loX2R2X3Bhcm1zKGhkLCAmZHYsICh2b2lkICopcGNmZzFEYXRhKTsKLQotCQkJCWlmIChtcHRfY29uZmlnKGhkLT5pb2MsICZjZmcpICE9IDApCi0JCQkJCSBnb3RvIHRhcmdldF9kb25lOwotCi0JCQkJaWYgKCghZHYubm93LndpZHRoKSAmJiAoIWR2Lm5vdy5vZmZzZXQpKQotCQkJCQlnb3RvIHRhcmdldF9kb25lOwotCi0JCQkJaW9jbWQuZmxhZ3MgfD0gTVBUX0lDRkxBR19ESURfUkVTRVQ7Ci0JCQkJcGF0dCA9IC0xOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmIChyYyA9PSBNUFRfU0NBTkRWX1NFTlNFKSB7Ci0JCQkJLyogUmVzdGFydCBkYXRhIHRlc3QgaWYgVUEsIGVsc2UgcXVpdC4KLQkJCQkgKi8KLQkJCQl1OCBza2V5ID0gaGQtPnBMb2NhbC0+c2Vuc2VbMl0gJiAweDBGOwotCQkJCWRkdnByaW50aygoTVlJT0Nfc19JTkZPX0ZNVAotCQkJCQkiU2Vuc2VLZXk6QVNDOkFTQ1EgPSAoJXg6JTAyeDolMDJ4KVxuIiwgaW9jLT5uYW1lLCBza2V5LAotCQkJCQloZC0+cExvY2FsLT5zZW5zZVsxMl0sIGhkLT5wTG9jYWwtPnNlbnNlWzEzXSkpOwotCQkJCWlmIChza2V5ID09IFVOSVRfQVRURU5USU9OKSB7Ci0JCQkJCXBhdHQgPSAtMTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJZ290byB0YXJnZXRfZG9uZTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogZmF0YWwgZXJyb3IgKi8KLQkJCQlnb3RvIHRhcmdldF9kb25lOwotCQkJfQotCQl9Ci0KLQl9IC8qIC0tLSBlbmQgb2YgcGF0dCBsb29wIC0tLS0gKi8KLQotdGFyZ2V0X2RvbmU6Ci0JaWYgKGlvY21kLmZsYWdzICYgTVBUX0lDRkxBR19SRVNFUlZFRCkgewotCQlpb2NtZC5jbWQgPSBSRUxFQVNFOwotCQlpb2NtZC5kYXRhX2RtYSA9IC0xOwotCQlpb2NtZC5kYXRhID0gTlVMTDsKLQkJaW9jbWQuc2l6ZSA9IDA7Ci0JCWlmIChtcHRzY3NpaF9kb19jbWQoaGQsICZpb2NtZCkgPCAwKQotCQkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIkRWOiBSZWxlYXNlIGZhaWxlZC4gaWQgJWQiLAotCQkJCQlpb2MtPm5hbWUsIGlkKTsKLQkJZWxzZSBpZiAoaGQtPnBMb2NhbCkgewotCQkJaWYgKGhkLT5wTG9jYWwtPmNvbXBsZXRpb24gPT0gTVBUX1NDQU5EVl9HT09EKQotCQkJCWlvY21kLmZsYWdzICY9IH5NUFRfSUNGTEFHX1JFU0VSVkVEOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgIkRWOiBSZWxlYXNlIGZhaWxlZC4gaWQgJWQiLAotCQkJCQkJaW9jLT5uYW1lLCBpZCk7Ci0JCX0KLQl9Ci0KLQotCS8qIFNldCBpZiBjZmcxX2RtYV9hZGRyIGNvbnRlbnRzIGlzIHZhbGlkCi0JICovCi0JaWYgKChjZmcuY2ZnaGRyLmhkciAhPSBOVUxMKSAmJiAocmV0Y29kZSA9PSAwKSl7Ci0JCS8qIElmIGRpc2ssIG5vdCBVMzIwLCBkaXNhYmxlIFFBUwotCQkgKi8KLQkJaWYgKChpbnEwID09IDApICYmIChkdi5ub3cuZmFjdG9yID4gTVBUX1VMVFJBMzIwKSkgewotCQkJaGQtPmlvYy0+c3BpX2RhdGEubm9RYXMgPSBNUFRfVEFSR0VUX05PX05FR09fUUFTOwotCQkJZGR2cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UCi0JCQkgICAgIm5vUWFzIHNldCBkdWUgdG8gaWQ9JWQgaGFzIGZhY3Rvcj0leFxuIiwgaW9jLT5uYW1lLCBpZCwgZHYubm93LmZhY3RvcikpOwotCQl9Ci0KLQkJZHYuY21kID0gTVBUX1NBVkU7Ci0JCW1wdHNjc2loX2R2X3Bhcm1zKGhkLCAmZHYsICh2b2lkICopcGNmZzFEYXRhKTsKLQotCQkvKiBEb3VibGUgd3JpdGVzIHRvIFNEUDEgY2FuIGNhdXNlIHByb2JsZW1zLAotCQkgKiBza2lwIHNhdmUgb2YgdGhlIGZpbmFsIG5lZ290aWF0ZWQgc2V0dGluZ3MgdG8KLQkJICogU0NTSSBkZXZpY2UgcGFnZSAxLgotCQkgKgotCQljZmcuY2ZnaGRyLmhkciA9ICZoZWFkZXIxOwotCQljZmcucGh5c0FkZHIgPSBjZmcxX2RtYV9hZGRyOwotCQljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UOwotCQljZmcuZGlyID0gMTsKLQkJbXB0X2NvbmZpZyhoZC0+aW9jLCAmY2ZnKTsKLQkJICovCi0JfQotCi0JLyogSWYgdGhpcyBpcyBhIFJBSUQgUGFzc3Rocm91Z2gsIGVuYWJsZSBpbnRlcm5hbCBJT3MKLQkgKi8KLQlpZiAoaW9jbWQuZmxhZ3MgJiBNUFRfSUNGTEFHX1BIWVNfRElTSykgewotCQlpZiAobXB0c2NzaWhfZG9fcmFpZChoZCwgTVBJX1JBSURfQUNUSU9OX0VOQUJMRV9QSFlTX0lPLCAmaW9jbWQpIDwgMCkKLQkJCWRkdnByaW50aygoTVlJT0Nfc19FUlJfRk1UICJSQUlEIEVuYWJsZSBGQUlMRUQhXG4iLCBpb2MtPm5hbWUpKTsKLQl9Ci0KLQkvKiBEb25lIHdpdGggdGhlIERWIHNjYW4gb2YgdGhlIGN1cnJlbnQgdGFyZ2V0Ci0JICovCi0JaWYgKHBEdkJ1ZikKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChpb2MtPnBjaWRldiwgZHZfYWxsb2MsIHBEdkJ1ZiwgZHZidWZfZG1hKTsKLQotCWRkdnRwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQgIkRWIERvbmUgaWQ9JWRcbiIsCi0JCQlpb2MtPm5hbWUsIGlkKSk7Ci0KLQlyZXR1cm4gcmV0Y29kZTsKLX0KLQotLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwotLyoJbXB0c2NzaWhfZHZfcGFybXMgLSBwZXJmb3JtIGEgdmFyaWV0eSBvZiBvcGVyYXRpb25zIG9uIHRoZQotICoJcGFyYW1ldGVycyB1c2VkIGZvciBuZWdvdGlhdGlvbi4KLSAqCUBoZDogUG9pbnRlciB0byBhIFNDU0kgaG9zdC4KLSAqCUBkdjogUG9pbnRlciB0byBhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBtYXhpbXVtIGFuZCBjdXJyZW50Ci0gKgkJbmVnb3RpYXRlZCBwYXJhbWV0ZXJzLgotICovCi1zdGF0aWMgdm9pZAotbXB0c2NzaWhfZHZfcGFybXMoTVBUX1NDU0lfSE9TVCAqaGQsIERWUEFSQU1FVEVSUyAqZHYsdm9pZCAqcFBhZ2UpCi17Ci0JVmlydFRhcmdldAkJKnZ0YXJnZXQ7Ci0JU0NTSURldmljZVBhZ2UwX3QJKnBQYWdlMDsKLQlTQ1NJRGV2aWNlUGFnZTFfdAkqcFBhZ2UxOwotCWludAkJCXZhbCA9IDAsIGRhdGEsIGNvbmZpZ3VyYXRpb247Ci0JdTgJCQl3aWR0aCA9IDA7Ci0JdTgJCQlvZmZzZXQgPSAwOwotCXU4CQkJZmFjdG9yID0gMDsKLQl1OAkJCW5lZ29GbGFncyA9IDA7Ci0JdTgJCQljbWQgPSBkdi0+Y21kOwotCXU4CQkJaWQgPSBkdi0+aWQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTVBUX0dFVF9OVlJBTV9WQUxTOgotCQlkZHZwcmludGsoKE1ZSU9DX3NfTk9URV9GTVQgIkdldHRpbmcgTlZSQU06ICIsCi0JCQkJCQkJIGhkLT5pb2MtPm5hbWUpKTsKLQkJLyogR2V0IHRoZSBOVlJBTSB2YWx1ZXMgYW5kIHNhdmUgaW4gdG1heAotCQkgKiBJZiBub3QgYW4gTFZEIGJ1cywgdGhlIGFkYXB0ZXIgbWluU3luY0ZhY3RvciBoYXMgYmVlbgotCQkgKiBhbHJlYWR5IHRocm90dGxlZCBiYWNrLgotCQkgKi8KLQkJbmVnb0ZsYWdzID0gaGQtPmlvYy0+c3BpX2RhdGEubm9RYXM7Ci0JCWlmICgoaGQtPlRhcmdldHMpJiYoKHZ0YXJnZXQgPSBoZC0+VGFyZ2V0c1soaW50KWlkXSkgIT0gTlVMTCkgJiYgIXZ0YXJnZXQtPnJhaWRWb2x1bWUpIHsKLQkJCXdpZHRoID0gdnRhcmdldC0+bWF4V2lkdGg7Ci0JCQlvZmZzZXQgPSB2dGFyZ2V0LT5tYXhPZmZzZXQ7Ci0JCQlmYWN0b3IgPSB2dGFyZ2V0LT5taW5TeW5jRmFjdG9yOwotCQkJbmVnb0ZsYWdzIHw9IHZ0YXJnZXQtPm5lZ29GbGFnczsKLQkJfSBlbHNlIHsKLQkJCWlmIChoZC0+aW9jLT5zcGlfZGF0YS5udnJhbSAmJiAoaGQtPmlvYy0+c3BpX2RhdGEubnZyYW1baWRdICE9IE1QVF9IT1NUX05WUkFNX0lOVkFMSUQpKSB7Ci0JCQkJZGF0YSA9IGhkLT5pb2MtPnNwaV9kYXRhLm52cmFtW2lkXTsKLQkJCQl3aWR0aCA9IGRhdGEgJiBNUFRfTlZSQU1fV0lERV9ESVNBQkxFID8gMCA6IDE7Ci0JCQkJaWYgKChvZmZzZXQgPSBoZC0+aW9jLT5zcGlfZGF0YS5tYXhTeW5jT2Zmc2V0KSA9PSAwKQotCQkJCQlmYWN0b3IgPSBNUFRfQVNZTkM7Ci0JCQkJZWxzZSB7Ci0JCQkJCWZhY3RvciA9IChkYXRhICYgTVBUX05WUkFNX1NZTkNfTUFTSykgPj4gTVBUX05WUkFNX1NZTkNfU0hJRlQ7Ci0JCQkJCWlmICgoZmFjdG9yID09IDApIHx8IChmYWN0b3IgPT0gTVBUX0FTWU5DKSl7Ci0JCQkJCQlmYWN0b3IgPSBNUFRfQVNZTkM7Ci0JCQkJCQlvZmZzZXQgPSAwOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl3aWR0aCA9IE1QVF9OQVJST1c7Ci0JCQkJb2Zmc2V0ID0gMDsKLQkJCQlmYWN0b3IgPSBNUFRfQVNZTkM7Ci0JCQl9Ci0KLQkJCS8qIFNldCB0aGUgbmVnb3RpYXRpb24gZmxhZ3MgKi8KLQkJCWlmICghd2lkdGgpCi0JCQkJbmVnb0ZsYWdzIHw9IE1QVF9UQVJHRVRfTk9fTkVHT19XSURFOwotCi0JCQlpZiAoIW9mZnNldCkKLQkJCQluZWdvRmxhZ3MgfD0gTVBUX1RBUkdFVF9OT19ORUdPX1NZTkM7Ci0JCX0KLQotCQkvKiBsaW1pdCBieSBhZGFwdGVyIGNhcGFiaWxpdGllcyAqLwotCQl3aWR0aCA9IG1pbih3aWR0aCwgaGQtPmlvYy0+c3BpX2RhdGEubWF4QnVzV2lkdGgpOwotCQlvZmZzZXQgPSBtaW4ob2Zmc2V0LCBoZC0+aW9jLT5zcGlfZGF0YS5tYXhTeW5jT2Zmc2V0KTsKLQkJZmFjdG9yID0gbWF4KGZhY3RvciwgaGQtPmlvYy0+c3BpX2RhdGEubWluU3luY0ZhY3Rvcik7Ci0KLQkJLyogQ2hlY2sgQ29uc2lzdGVuY3kgKi8KLQkJaWYgKG9mZnNldCAmJiAoZmFjdG9yIDwgTVBUX1VMVFJBMikgJiYgIXdpZHRoKQotCQkJZmFjdG9yID0gTVBUX1VMVFJBMjsKLQotCQlkdi0+bWF4LndpZHRoID0gd2lkdGg7Ci0JCWR2LT5tYXgub2Zmc2V0ID0gb2Zmc2V0OwotCQlkdi0+bWF4LmZhY3RvciA9IGZhY3RvcjsKLQkJZHYtPm1heC5mbGFncyA9IG5lZ29GbGFnczsKLQkJZGR2cHJpbnRrKCgiIGlkPSVkIHdpZHRoPSVkIGZhY3Rvcj0leCBvZmZzZXQ9JXggZmxhZ3M9JXhcbiIsCi0JCQkJaWQsIHdpZHRoLCBmYWN0b3IsIG9mZnNldCwgbmVnb0ZsYWdzKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBNUFRfVVBEQVRFX01BWDoKLQkJZGR2cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UCi0JCQkiVXBkYXRpbmcgd2l0aCBTRFAwIERhdGE6ICIsIGhkLT5pb2MtPm5hbWUpKTsKLQkJLyogVXBkYXRlIHRtYXggdmFsdWVzIHdpdGggdGhvc2UgZnJvbSBEZXZpY2UgUGFnZSAwLiovCi0JCXBQYWdlMCA9IChTQ1NJRGV2aWNlUGFnZTBfdCAqKSBwUGFnZTsKLQkJaWYgKHBQYWdlMCkgewotCQkJdmFsID0gbGUzMl90b19jcHUocFBhZ2UwLT5OZWdvdGlhdGVkUGFyYW1ldGVycyk7Ci0JCQlkdi0+bWF4LndpZHRoID0gdmFsICYgTVBJX1NDU0lERVZQQUdFMF9OUF9XSURFID8gMSA6IDA7Ci0JCQlkdi0+bWF4Lm9mZnNldCA9ICh2YWwmTVBJX1NDU0lERVZQQUdFMF9OUF9ORUdfU1lOQ19PRkZTRVRfTUFTSykgPj4gMTY7Ci0JCQlkdi0+bWF4LmZhY3RvciA9ICh2YWwmTVBJX1NDU0lERVZQQUdFMF9OUF9ORUdfU1lOQ19QRVJJT0RfTUFTSykgPj4gODsKLQkJfQotCi0JCWR2LT5ub3cud2lkdGggPSBkdi0+bWF4LndpZHRoOwotCQlkdi0+bm93Lm9mZnNldCA9IGR2LT5tYXgub2Zmc2V0OwotCQlkdi0+bm93LmZhY3RvciA9IGR2LT5tYXguZmFjdG9yOwotCQlkZHZwcmludGsoKCJpZD0lZCB3aWR0aD0lZCBmYWN0b3I9JXggb2Zmc2V0PSV4IGZsYWdzPSV4XG4iLAotCQkJCWlkLCBkdi0+bm93LndpZHRoLCBkdi0+bm93LmZhY3RvciwgZHYtPm5vdy5vZmZzZXQsIGR2LT5ub3cuZmxhZ3MpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1QVF9TRVRfTUFYOgotCQlkZHZwcmludGsoKE1ZSU9DX3NfTk9URV9GTVQgIlNldHRpbmcgTWF4OiAiLAotCQkJCQkJCQloZC0+aW9jLT5uYW1lKSk7Ci0JCS8qIFNldCBjdXJyZW50IHRvIHRoZSBtYXggdmFsdWVzLiBVcGRhdGUgdGhlIGNvbmZpZyBwYWdlLiovCi0JCWR2LT5ub3cud2lkdGggPSBkdi0+bWF4LndpZHRoOwotCQlkdi0+bm93Lm9mZnNldCA9IGR2LT5tYXgub2Zmc2V0OwotCQlkdi0+bm93LmZhY3RvciA9IGR2LT5tYXguZmFjdG9yOwotCQlkdi0+bm93LmZsYWdzID0gZHYtPm1heC5mbGFnczsKLQotCQlwUGFnZTEgPSAoU0NTSURldmljZVBhZ2UxX3QgKilwUGFnZTsKLQkJaWYgKHBQYWdlMSkgewotCQkJbXB0c2NzaWhfc2V0RGV2aWNlUGFnZTFGbGFncyAoZHYtPm5vdy53aWR0aCwgZHYtPm5vdy5mYWN0b3IsCi0JCQkJZHYtPm5vdy5vZmZzZXQsICZ2YWwsICZjb25maWd1cmF0aW9uLCBkdi0+bm93LmZsYWdzKTsKLQkJCWRuZWdvcHJpbnRrKCgiU2V0dGluZyBNYXg6IGlkPSVkIHdpZHRoPSVkIGZhY3Rvcj0leCBvZmZzZXQ9JXggbmVnb0ZsYWdzPSV4IHJlcXVlc3Q9JXggY29uZmlnPSV4XG4iLAotCQkJCWlkLCBkdi0+bm93LndpZHRoLCBkdi0+bm93LmZhY3RvciwgZHYtPm5vdy5vZmZzZXQsIGR2LT5ub3cuZmxhZ3MsIHZhbCwgY29uZmlndXJhdGlvbikpOwotCQkJcFBhZ2UxLT5SZXF1ZXN0ZWRQYXJhbWV0ZXJzID0gY3B1X3RvX2xlMzIodmFsKTsKLQkJCXBQYWdlMS0+UmVzZXJ2ZWQgPSAwOwotCQkJcFBhZ2UxLT5Db25maWd1cmF0aW9uID0gY3B1X3RvX2xlMzIoY29uZmlndXJhdGlvbik7Ci0JCX0KLQotCQlkZHZwcmludGsoKCJpZD0lZCB3aWR0aD0lZCBmYWN0b3I9JXggb2Zmc2V0PSV4IG5lZ29GbGFncz0leCByZXF1ZXN0PSV4IGNvbmZpZ3VyYXRpb249JXhcbiIsCi0JCQkJaWQsIGR2LT5ub3cud2lkdGgsIGR2LT5ub3cuZmFjdG9yLCBkdi0+bm93Lm9mZnNldCwgZHYtPm5vdy5mbGFncywgdmFsLCBjb25maWd1cmF0aW9uKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBNUFRfU0VUX01JTjoKLQkJZGR2cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UICJTZXR0aW5nIE1pbjogIiwKLQkJCQkJCQkJaGQtPmlvYy0+bmFtZSkpOwotCQkvKiBTZXQgcGFnZSB0byBhc3luY2hyb25vdXMgYW5kIG5hcnJvdwotCQkgKiBEbyBub3QgdXBkYXRlIG5vdywgYnJlYWtzIGZhbGxiYWNrIHJvdXRpbmUuICovCi0JCXdpZHRoID0gTVBUX05BUlJPVzsKLQkJb2Zmc2V0ID0gMDsKLQkJZmFjdG9yID0gTVBUX0FTWU5DOwotCQluZWdvRmxhZ3MgPSBkdi0+bWF4LmZsYWdzOwotCi0JCXBQYWdlMSA9IChTQ1NJRGV2aWNlUGFnZTFfdCAqKXBQYWdlOwotCQlpZiAocFBhZ2UxKSB7Ci0JCQltcHRzY3NpaF9zZXREZXZpY2VQYWdlMUZsYWdzICh3aWR0aCwgZmFjdG9yLAotCQkJCW9mZnNldCwgJnZhbCwgJmNvbmZpZ3VyYXRpb24sIG5lZ29GbGFncyk7Ci0JCQlkbmVnb3ByaW50aygoIlNldHRpbmcgTWluOiBpZD0lZCB3aWR0aD0lZCBmYWN0b3I9JXggb2Zmc2V0PSV4IG5lZ29GbGFncz0leCByZXF1ZXN0PSV4IGNvbmZpZz0leFxuIiwKLQkJCQlpZCwgd2lkdGgsIGZhY3Rvciwgb2Zmc2V0LCBuZWdvRmxhZ3MsIHZhbCwgY29uZmlndXJhdGlvbikpOwotCQkJcFBhZ2UxLT5SZXF1ZXN0ZWRQYXJhbWV0ZXJzID0gY3B1X3RvX2xlMzIodmFsKTsKLQkJCXBQYWdlMS0+UmVzZXJ2ZWQgPSAwOwotCQkJcFBhZ2UxLT5Db25maWd1cmF0aW9uID0gY3B1X3RvX2xlMzIoY29uZmlndXJhdGlvbik7Ci0JCX0KLQkJZGR2cHJpbnRrKCgiaWQ9JWQgd2lkdGg9JWQgZmFjdG9yPSV4IG9mZnNldD0leCByZXF1ZXN0PSV4IGNvbmZpZz0leCBuZWdvRmxhZ3M9JXhcbiIsCi0JCQkJaWQsIHdpZHRoLCBmYWN0b3IsIG9mZnNldCwgdmFsLCBjb25maWd1cmF0aW9uLCBuZWdvRmxhZ3MpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1QVF9GQUxMQkFDSzoKLQkJZGR2cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UCi0JCQkiRmFsbGJhY2s6IFN0YXJ0OiBvZmZzZXQgJWQsIGZhY3RvciAleCwgd2lkdGggJWQgXG4iLAotCQkJCWhkLT5pb2MtPm5hbWUsIGR2LT5ub3cub2Zmc2V0LAotCQkJCWR2LT5ub3cuZmFjdG9yLCBkdi0+bm93LndpZHRoKSk7Ci0JCXdpZHRoID0gZHYtPm5vdy53aWR0aDsKLQkJb2Zmc2V0ID0gZHYtPm5vdy5vZmZzZXQ7Ci0JCWZhY3RvciA9IGR2LT5ub3cuZmFjdG9yOwotCQlpZiAoKG9mZnNldCkgJiYgKGR2LT5tYXgud2lkdGgpKSB7Ci0JCQlpZiAoZmFjdG9yIDwgTVBUX1VMVFJBMTYwKQotCQkJCWZhY3RvciA9IE1QVF9VTFRSQTE2MDsKLQkJCWVsc2UgaWYgKGZhY3RvciA8IE1QVF9VTFRSQTIpIHsKLQkJCQlmYWN0b3IgPSBNUFRfVUxUUkEyOwotCQkJCXdpZHRoID0gTVBUX1dJREU7Ci0JCQl9IGVsc2UgaWYgKChmYWN0b3IgPT0gTVBUX1VMVFJBMikgJiYgd2lkdGgpIHsKLQkJCQlmYWN0b3IgPSBNUFRfVUxUUkEyOwotCQkJCXdpZHRoID0gTVBUX05BUlJPVzsKLQkJCX0gZWxzZSBpZiAoZmFjdG9yIDwgTVBUX1VMVFJBKSB7Ci0JCQkJZmFjdG9yID0gTVBUX1VMVFJBOwotCQkJCXdpZHRoID0gTVBUX1dJREU7Ci0JCQl9IGVsc2UgaWYgKChmYWN0b3IgPT0gTVBUX1VMVFJBKSAmJiB3aWR0aCkgewotCQkJCXdpZHRoID0gTVBUX05BUlJPVzsKLQkJCX0gZWxzZSBpZiAoZmFjdG9yIDwgTVBUX0ZBU1QpIHsKLQkJCQlmYWN0b3IgPSBNUFRfRkFTVDsKLQkJCQl3aWR0aCA9IE1QVF9XSURFOwotCQkJfSBlbHNlIGlmICgoZmFjdG9yID09IE1QVF9GQVNUKSAmJiB3aWR0aCkgewotCQkJCWZhY3RvciA9IE1QVF9GQVNUOwotCQkJCXdpZHRoID0gTVBUX05BUlJPVzsKLQkJCX0gZWxzZSBpZiAoZmFjdG9yIDwgTVBUX1NDU0kpIHsKLQkJCQlmYWN0b3IgPSBNUFRfU0NTSTsKLQkJCQl3aWR0aCA9IE1QVF9XSURFOwotCQkJfSBlbHNlIGlmICgoZmFjdG9yID09IE1QVF9TQ1NJKSAmJiB3aWR0aCkgewotCQkJCWZhY3RvciA9IE1QVF9TQ1NJOwotCQkJCXdpZHRoID0gTVBUX05BUlJPVzsKLQkJCX0gZWxzZSB7Ci0JCQkJZmFjdG9yID0gTVBUX0FTWU5DOwotCQkJCW9mZnNldCA9IDA7Ci0JCQl9Ci0KLQkJfSBlbHNlIGlmIChvZmZzZXQpIHsKLQkJCXdpZHRoID0gTVBUX05BUlJPVzsKLQkJCWlmIChmYWN0b3IgPCBNUFRfVUxUUkEpCi0JCQkJZmFjdG9yID0gTVBUX1VMVFJBOwotCQkJZWxzZSBpZiAoZmFjdG9yIDwgTVBUX0ZBU1QpCi0JCQkJZmFjdG9yID0gTVBUX0ZBU1Q7Ci0JCQllbHNlIGlmIChmYWN0b3IgPCBNUFRfU0NTSSkKLQkJCQlmYWN0b3IgPSBNUFRfU0NTSTsKLQkJCWVsc2UgewotCQkJCWZhY3RvciA9IE1QVF9BU1lOQzsKLQkJCQlvZmZzZXQgPSAwOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQl3aWR0aCA9IE1QVF9OQVJST1c7Ci0JCQlmYWN0b3IgPSBNUFRfQVNZTkM7Ci0JCX0KLQkJZHYtPm1heC5mbGFncyB8PSBNUFRfVEFSR0VUX05PX05FR09fUUFTOwotCQlkdi0+bWF4LmZsYWdzICY9IH5NUFRfVEFQRV9ORUdPX0lEUDsKLQotCQlkdi0+bm93LndpZHRoID0gd2lkdGg7Ci0JCWR2LT5ub3cub2Zmc2V0ID0gb2Zmc2V0OwotCQlkdi0+bm93LmZhY3RvciA9IGZhY3RvcjsKLQkJZHYtPm5vdy5mbGFncyA9IGR2LT5tYXguZmxhZ3M7Ci0KLQkJcFBhZ2UxID0gKFNDU0lEZXZpY2VQYWdlMV90ICopcFBhZ2U7Ci0JCWlmIChwUGFnZTEpIHsKLQkJCW1wdHNjc2loX3NldERldmljZVBhZ2UxRmxhZ3MgKHdpZHRoLCBmYWN0b3IsIG9mZnNldCwgJnZhbCwKLQkJCQkJCSZjb25maWd1cmF0aW9uLCBkdi0+bm93LmZsYWdzKTsKLQkJCWRuZWdvcHJpbnRrKCgiRmluaXNoOiBpZD0lZCB3aWR0aD0lZCBvZmZzZXQ9JWQgZmFjdG9yPSV4IG5lZ29GbGFncz0leCByZXF1ZXN0PSV4IGNvbmZpZz0leFxuIiwKLQkJCSAgICAgaWQsIHdpZHRoLCBvZmZzZXQsIGZhY3RvciwgZHYtPm5vdy5mbGFncywgdmFsLCBjb25maWd1cmF0aW9uKSk7Ci0KLQkJCXBQYWdlMS0+UmVxdWVzdGVkUGFyYW1ldGVycyA9IGNwdV90b19sZTMyKHZhbCk7Ci0JCQlwUGFnZTEtPlJlc2VydmVkID0gMDsKLQkJCXBQYWdlMS0+Q29uZmlndXJhdGlvbiA9IGNwdV90b19sZTMyKGNvbmZpZ3VyYXRpb24pOwotCQl9Ci0KLQkJZGR2cHJpbnRrKCgiRmluaXNoOiBpZD0lZCBvZmZzZXQ9JWQgZmFjdG9yPSV4IHdpZHRoPSVkIHJlcXVlc3Q9JXggY29uZmlnPSV4XG4iLAotCQkJICAgICBpZCwgZHYtPm5vdy5vZmZzZXQsIGR2LT5ub3cuZmFjdG9yLCBkdi0+bm93LndpZHRoLCB2YWwsIGNvbmZpZ3VyYXRpb24pKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1QVF9TQVZFOgotCQlkZHZwcmludGsoKE1ZSU9DX3NfTk9URV9GTVQKLQkJCSJTYXZpbmcgdG8gVGFyZ2V0IHN0cnVjdHVyZTogIiwgaGQtPmlvYy0+bmFtZSkpOwotCQlkZHZwcmludGsoKCJpZD0lZCB3aWR0aD0leCBmYWN0b3I9JXggb2Zmc2V0PSVkIGZsYWdzPSV4XG4iLAotCQkJICAgICBpZCwgZHYtPm5vdy53aWR0aCwgZHYtPm5vdy5mYWN0b3IsIGR2LT5ub3cub2Zmc2V0LCBkdi0+bm93LmZsYWdzKSk7Ci0KLQkJLyogU2F2ZSB0aGVzZSB2YWx1ZXMgdG8gdGFyZ2V0IHN0cnVjdHVyZXMKLQkJICogb3Igb3ZlcndyaXRlIG52cmFtIChwaHlzIGRpc2tzIG9ubHkpLgotCQkgKi8KLQotCQlpZiAoKGhkLT5UYXJnZXRzKSYmKCh2dGFyZ2V0ID0gaGQtPlRhcmdldHNbKGludClpZF0pICE9IE5VTEwpICYmICF2dGFyZ2V0LT5yYWlkVm9sdW1lICkgewotCQkJdnRhcmdldC0+bWF4V2lkdGggPSBkdi0+bm93LndpZHRoOwotCQkJdnRhcmdldC0+bWF4T2Zmc2V0ID0gZHYtPm5vdy5vZmZzZXQ7Ci0JCQl2dGFyZ2V0LT5taW5TeW5jRmFjdG9yID0gZHYtPm5vdy5mYWN0b3I7Ci0JCQl2dGFyZ2V0LT5uZWdvRmxhZ3MgPSBkdi0+bm93LmZsYWdzOwotCQl9IGVsc2UgewotCQkJLyogUHJlc2VydiBhbGwgZmxhZ3MsIHVzZQotCQkJICogcmVhZC1tb2RpZnktd3JpdGUgYWxnb3JpdGhtCi0JCQkgKi8KLQkJCWlmIChoZC0+aW9jLT5zcGlfZGF0YS5udnJhbSkgewotCQkJCWRhdGEgPSBoZC0+aW9jLT5zcGlfZGF0YS5udnJhbVtpZF07Ci0KLQkJCQlpZiAoZHYtPm5vdy53aWR0aCkKLQkJCQkJZGF0YSAmPSB+TVBUX05WUkFNX1dJREVfRElTQUJMRTsKLQkJCQllbHNlCi0JCQkJCWRhdGEgfD0gTVBUX05WUkFNX1dJREVfRElTQUJMRTsKLQotCQkJCWlmICghZHYtPm5vdy5vZmZzZXQpCi0JCQkJCWZhY3RvciA9IE1QVF9BU1lOQzsKLQotCQkJCWRhdGEgJj0gfk1QVF9OVlJBTV9TWU5DX01BU0s7Ci0JCQkJZGF0YSB8PSAoZHYtPm5vdy5mYWN0b3IgPDwgTVBUX05WUkFNX1NZTkNfU0hJRlQpICYgTVBUX05WUkFNX1NZTkNfTUFTSzsKLQotCQkJCWhkLT5pb2MtPnNwaV9kYXRhLm52cmFtW2lkXSA9IGRhdGE7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotfQotCi0vKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCi0vKgltcHRzY3NpaF9maWxsYnVmIC0gZmlsbCBhIGJ1ZmZlciB3aXRoIGEgc3BlY2lhbCBkYXRhIHBhdHRlcm4KLSAqCQljbGVhbnVwLiBGb3IgYnVzIHNjYW4gb25seS4KLSAqCi0gKglAYnVmZmVyOiBQb2ludGVyIHRvIGRhdGEgYnVmZmVyIHRvIGJlIGZpbGxlZC4KLSAqCUBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8gZmlsbAotICoJQGluZGV4OiBQYXR0ZXJuIGluZGV4Ci0gKglAd2lkdGg6IGJ1cyB3aWR0aCwgMCAoOCBiaXRzKSBvciAxICgxNiBiaXRzKQotICovCi1zdGF0aWMgdm9pZAotbXB0c2NzaWhfZmlsbGJ1ZihjaGFyICpidWZmZXIsIGludCBzaXplLCBpbnQgaW5kZXgsIGludCB3aWR0aCkKLXsKLQljaGFyICpwdHIgPSBidWZmZXI7Ci0JaW50IGlpOwotCWNoYXIgYnl0ZTsKLQlzaG9ydCB2YWw7Ci0KLQlzd2l0Y2ggKGluZGV4KSB7Ci0JY2FzZSAwOgotCi0JCWlmICh3aWR0aCkgewotCQkJLyogUGF0dGVybjogIDAwMDAgRkZGRiAwMDAwIEZGRkYKLQkJCSAqLwotCQkJZm9yIChpaT0wOyBpaSA8IHNpemU7IGlpKyssIHB0cisrKSB7Ci0JCQkJaWYgKGlpICYgMHgwMikKLQkJCQkJKnB0ciA9IDB4RkY7Ci0JCQkJZWxzZQotCQkJCQkqcHRyID0gMHgwMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFBhdHRlcm46ICAwMCBGRiAwMCBGRgotCQkJICovCi0JCQlmb3IgKGlpPTA7IGlpIDwgc2l6ZTsgaWkrKywgcHRyKyspIHsKLQkJCQlpZiAoaWkgJiAweDAxKQotCQkJCQkqcHRyID0gMHhGRjsKLQkJCQllbHNlCi0JCQkJCSpwdHIgPSAweDAwOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSAxOgotCQlpZiAod2lkdGgpIHsKLQkJCS8qIFBhdHRlcm46ICA1NTU1IEFBQUEgNTU1NSBBQUFBIDU1NTUKLQkJCSAqLwotCQkJZm9yIChpaT0wOyBpaSA8IHNpemU7IGlpKyssIHB0cisrKSB7Ci0JCQkJaWYgKGlpICYgMHgwMikKLQkJCQkJKnB0ciA9IDB4QUE7Ci0JCQkJZWxzZQotCQkJCQkqcHRyID0gMHg1NTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFBhdHRlcm46ICA1NSBBQSA1NSBBQSA1NQotCQkJICovCi0JCQlmb3IgKGlpPTA7IGlpIDwgc2l6ZTsgaWkrKywgcHRyKyspIHsKLQkJCQlpZiAoaWkgJiAweDAxKQotCQkJCQkqcHRyID0gMHhBQTsKLQkJCQllbHNlCi0JCQkJCSpwdHIgPSAweDU1OwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQkvKiBQYXR0ZXJuOiAgMDAgMDEgMDIgMDMgMDQgMDUKLQkJICogLi4uIEZFIEZGIDAwIDAxLi4KLQkJICovCi0JCWZvciAoaWk9MDsgaWkgPCBzaXplOyBpaSsrLCBwdHIrKykKLQkJCSpwdHIgPSAoY2hhcikgaWk7Ci0JCWJyZWFrOwotCi0JY2FzZSAzOgotCQlpZiAod2lkdGgpIHsKLQkJCS8qIFdpZGUgUGF0dGVybjogIEZGRkUgMDAwMSBGRkZEIDAwMDIKLQkJCSAqIC4uLiAgNDAwMCBERkZGIDgwMDAgRUZGRgotCQkJICovCi0JCQlieXRlID0gMDsKLQkJCWZvciAoaWk9MDsgaWkgPCBzaXplLzI7IGlpKyspIHsKLQkJCQkvKiBDcmVhdGUgdGhlIGJhc2UgcGF0dGVybgotCQkJCSAqLwotCQkJCXZhbCA9ICgxIDw8IGJ5dGUpOwotCQkJCS8qIGV2ZXJ5IDY0ICgweDQwKSBieXRlcyBmbGlwIHRoZSBwYXR0ZXJuCi0JCQkJICogc2luY2Ugd2UgZmlsbCAyIGJ5dGVzIC8gaXRlcmF0aW9uLAotCQkJCSAqIHRlc3QgZm9yIGlpID0gMHgyMAotCQkJCSAqLwotCQkJCWlmIChpaSAmIDB4MjApCi0JCQkJCXZhbCA9IH4odmFsKTsKLQotCQkJCWlmIChpaSAmIDB4MDEpIHsKLQkJCQkJKnB0ciA9IChjaGFyKSggKHZhbCAmIDB4RkYwMCkgPj4gOCk7Ci0JCQkJCXB0cisrOwotCQkJCQkqcHRyID0gKGNoYXIpKHZhbCAmIDB4RkYpOwotCQkJCQlieXRlKys7Ci0JCQkJCWJ5dGUgJj0gMHgwRjsKLQkJCQl9IGVsc2UgewotCQkJCQl2YWwgPSB+dmFsOwotCQkJCQkqcHRyID0gKGNoYXIpKCAodmFsICYgMHhGRjAwKSA+PiA4KTsKLQkJCQkJcHRyKys7Ci0JCQkJCSpwdHIgPSAoY2hhcikodmFsICYgMHhGRik7Ci0JCQkJfQotCi0JCQkJcHRyKys7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOYXJyb3cgUGF0dGVybjogIEZFIDAxIEZEIDAyIEZCIDA0Ci0JCQkgKiAuLiA3RiA4MCAwMSBGRSAwMiBGRCAuLi4gIDgwIDdGCi0JCQkgKi8KLQkJCWJ5dGUgPSAwOwotCQkJZm9yIChpaT0wOyBpaSA8IHNpemU7IGlpKyssIHB0cisrKSB7Ci0JCQkJLyogQmFzZSBwYXR0ZXJuIC0gZmlyc3QgMzIgYnl0ZXMKLQkJCQkgKi8KLQkJCQlpZiAoaWkgJiAweDAxKSB7Ci0JCQkJCSpwdHIgPSAoMSA8PCBieXRlKTsKLQkJCQkJYnl0ZSsrOwotCQkJCQlieXRlICY9IDB4MDc7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJKnB0ciA9IChjaGFyKSAofigxIDw8IGJ5dGUpKTsKLQkJCQl9Ci0KLQkJCQkvKiBGbGlwIHRoZSBwYXR0ZXJuIGV2ZXJ5IDMyIGJ5dGVzCi0JCQkJICovCi0JCQkJaWYgKGlpICYgMHgyMCkKLQkJCQkJKnB0ciA9IH4oKnB0cik7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotfQotCi0vKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCi0vKiBJZiBEViBkaXNhYmxlZCAobmVnb052cmFtIHNldCB0byBVU0VfTlZBUk0pIG9yIGlmIG5vdCBMVU4gMCwgcmV0dXJuLgotICogRWxzZSBzZXQgdGhlIE5FRURfRFYgZmxhZyBhZnRlciBSZWFkIENhcGFjaXR5IElzc3VlZCAoZGlza3MpCi0gKiBvciBNb2RlIFNlbnNlIChjZHJvbXMpLgotICoKLSAqIFRhcGVzLCBpbml0VGFyZ2V0IHdpbGwgc2V0IHRoaXMgZmxhZyBvbiBjb21wbGV0aW9uIG9mIElucXVpcnkgY29tbWFuZC4KLSAqIENhbGxlZCBvbmx5IGlmIERWX05PVF9ET05FIGZsYWcgaXMgc2V0Ci0gKi8KLXN0YXRpYyB2b2lkCi1tcHRzY3NpaF9zZXRfZHZmbGFncyhNUFRfU0NTSV9IT1NUICpoZCwgc3RydWN0IHNjc2lfY21uZCAqc2MpCi17Ci0JTVBUX0FEQVBURVIJKmlvYyA9IGhkLT5pb2M7Ci0JdTggY21kOwotCVNwaUNmZ0RhdGEJKnBTcGk7Ci0KLQlkZHZ0cHJpbnRrKChNWUlPQ19zX05PVEVfRk1UCi0JCSIgc2V0X2R2ZmxhZ3M6IGlkPSVkIGx1bj0lZCBuZWdvTnZyYW09JXggY21kPSV4XG4iLAotCQloZC0+aW9jLT5uYW1lLCBzYy0+ZGV2aWNlLT5pZCwgc2MtPmRldmljZS0+bHVuICwgaGQtPm5lZ29OdnJhbSwgc2MtPmNtbmRbMF0pKTsKLQotCWlmICgoc2MtPmRldmljZS0+bHVuICE9IDApIHx8IChoZC0+bmVnb052cmFtICE9IDApKQotCQlyZXR1cm47Ci0KLQljbWQgPSBzYy0+Y21uZFswXTsKLQotCWlmICgoY21kID09IFJFQURfQ0FQQUNJVFkpIHx8IChjbWQgPT0gTU9ERV9TRU5TRSkpIHsKLQkJcFNwaSA9ICZpb2MtPnNwaV9kYXRhOwotCQlpZiAoKGlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IHNjLT5kZXZpY2UtPmlkKSkgJiYgaW9jLT5yYWlkX2RhdGEucElvY1BnMykgewotCQkJLyogU2V0IE5FRURfRFYgZm9yIGFsbCBoaWRkZW4gZGlza3MKLQkJCSAqLwotCQkJSW9jM1BoeXNEaXNrX3QgKnBQRGlzayA9ICBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5QaHlzRGlzazsKLQkJCWludAkJbnVtUERpc2sgPSBpb2MtPnJhaWRfZGF0YS5wSW9jUGczLT5OdW1QaHlzRGlza3M7Ci0KLQkJCXdoaWxlIChudW1QRGlzaykgewotCQkJCXBTcGktPmR2U3RhdHVzW3BQRGlzay0+UGh5c0Rpc2tJRF0gfD0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKLQkJCQlkZHZ0cHJpbnRrKCgiTkVFRF9EViBzZXQgZm9yIHBoeXMgZGlzayBpZCAlZFxuIiwgcFBEaXNrLT5QaHlzRGlza0lEKSk7Ci0JCQkJcFBEaXNrKys7Ci0JCQkJbnVtUERpc2stLTsKLQkJCX0KLQkJfQotCQlwU3BpLT5kdlN0YXR1c1tzYy0+ZGV2aWNlLT5pZF0gfD0gTVBUX1NDU0lDRkdfTkVFRF9EVjsKLQkJZGR2dHByaW50aygoIk5FRURfRFYgc2V0IGZvciB2aXNpYmxlIGRpc2sgaWQgJWRcbiIsIHNjLT5kZXZpY2UtPmlkKSk7Ci0JfQotfQotCi0vKiBtcHRzY3NpaF9yYWlkX3NldF9kdl9mbGFncygpCi0gKgotICogTmV3IG9yIHJlcGxhY2VkIGRpc2suIFNldCBEViBmbGFnIGFuZCBzY2hlZHVsZSBEVi4KLSAqLwotc3RhdGljIHZvaWQKLW1wdHNjc2loX3NldF9kdmZsYWdzX3JhaWQoTVBUX1NDU0lfSE9TVCAqaGQsIGludCBpZCkKLXsKLQlNUFRfQURBUFRFUgkqaW9jID0gaGQtPmlvYzsKLQlTcGlDZmdEYXRhCSpwU3BpID0gJmlvYy0+c3BpX2RhdGE7Ci0JSW9jM1BoeXNEaXNrX3QJKnBQRGlzazsKLQlpbnQJCSBudW1QRGlzazsKLQotCWlmIChoZC0+bmVnb052cmFtICE9IDApCi0JCXJldHVybjsKLQotCWRkdnRwcmludGsoKCJEViByZXF1ZXN0ZWQgZm9yIHBoeXMgZGlzayBpZCAlZFxuIiwgaWQpKTsKLQlpZiAoaW9jLT5yYWlkX2RhdGEucElvY1BnMykgewotCQlwUERpc2sgPSAgaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+UGh5c0Rpc2s7Ci0JCW51bVBEaXNrID0gaW9jLT5yYWlkX2RhdGEucElvY1BnMy0+TnVtUGh5c0Rpc2tzOwotCQl3aGlsZSAobnVtUERpc2spIHsKLQkJCWlmIChpZCA9PSBwUERpc2stPlBoeXNEaXNrTnVtKSB7Ci0JCQkJcFNwaS0+ZHZTdGF0dXNbcFBEaXNrLT5QaHlzRGlza0lEXSA9Ci0JCQkJICAgIChNUFRfU0NTSUNGR19ORUVEX0RWIHwgTVBUX1NDU0lDRkdfRFZfTk9UX0RPTkUpOwotCQkJCXBTcGktPmZvcmNlRHYgPSBNUFRfU0NTSUNGR19ORUVEX0RWOwotCQkJCWRkdnRwcmludGsoKCJORUVEX0RWIHNldCBmb3IgcGh5cyBkaXNrIGlkICVkXG4iLAotCQkJCSAgICBwUERpc2stPlBoeXNEaXNrSUQpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXBQRGlzaysrOwotCQkJbnVtUERpc2stLTsKLQkJfQotCi0JCWlmIChudW1QRGlzayA9PSAwKSB7Ci0JCQkvKiBUaGUgcGh5c2ljYWwgZGlzayB0aGF0IG5lZWRzIERWIHdhcyBub3QgZm91bmQKLQkJCSAqIGluIHRoZSBzdG9yZWQgSU9DIFBhZ2UgMy4gVGhlIGRyaXZlciBtdXN0IHJlbG9hZAotCQkJICogdGhpcyBwYWdlLiBEViByb3V0aW5lIHdpbGwgc2V0IHRoZSBORUVEX0RWIGZsYWcgZm9yCi0JCQkgKiBhbGwgcGh5cyBkaXNrcyB0aGF0IGhhdmUgRFZfTk9UX0RPTkUgc2V0LgotCQkJICovCi0JCQlwU3BpLT5mb3JjZUR2ID0gTVBUX1NDU0lDRkdfTkVFRF9EViB8IE1QVF9TQ1NJQ0ZHX1JFTE9BRF9JT0NfUEczOwotCQkJZGR2dHByaW50aygoInBoeXMgZGlzayAlZCBub3QgZm91bmQuIFNldHRpbmcgcmVsb2FkIElPQyBQZzMgRmxhZ1xuIixpZCkpOwotCQl9Ci0JfQotfQotI2VuZGlmIC8qIH5NUFRTQ1NJSF9FTkFCTEVfRE9NQUlOX1ZBTElEQVRJT04gKi8KLQogRVhQT1JUX1NZTUJPTChtcHRzY3NpaF9yZW1vdmUpOwogRVhQT1JUX1NZTUJPTChtcHRzY3NpaF9zaHV0ZG93bik7CiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKaW5kZXggNDRiMjQ4ZC4uMTRhNWI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaApAQCAtNjAsMTYgKzYwLDYgQEAKIAogI2RlZmluZSBNUFRfU0NTSV9NQVhfU0VDVE9SUyAgICA4MTkyCiAKLS8qIFRvIGRpc2FibGUgZG9tYWluIHZhbGlkYXRpb24sIHVuY29tbWVudCB0aGUKLSAqIGZvbGxvd2luZyBsaW5lLiBObyBlZmZlY3QgZm9yIEZDIGRldmljZXMuCi0gKiBGb3IgU0NTSSBkZXZpY2VzLCBkcml2ZXIgd2lsbCBuZWdvdGlhdGUgdG8KLSAqIE5WUkFNIHNldHRpbmdzIChpZiBhdmFpbGFibGUpIG9yIHRvIG1heGltdW0gYWRhcHRlcgotICogY2FwYWJpbGl0aWVzLgotICovCi0KLSNkZWZpbmUgTVBUU0NTSUhfRU5BQkxFX0RPTUFJTl9WQUxJREFUSU9OCi0KLQogLyogU0NTSSBkcml2ZXIgc2V0dXAgc3RydWN0dXJlLiBTZXR0aW5ncyBjYW4gYmUgb3ZlcnJpZGRlbgogICogYnkgY29tbWFuZCBsaW5lIG9wdGlvbnMuCiAgKi8KQEAgLTEwOSwzICs5OSw1IEBACiBleHRlcm4gaW50IG1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpOwogZXh0ZXJuIHZvaWQgbXB0c2NzaWhfdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpOwogZXh0ZXJuIGludCBtcHRzY3NpaF9UTUhhbmRsZXIoTVBUX1NDU0lfSE9TVCAqaGQsIHU4IHR5cGUsIHU4IGNoYW5uZWwsIHU4IHRhcmdldCwgdTggbHVuLCBpbnQgY3R4MmFib3J0LCB1bG9uZyB0aW1lb3V0KTsKK2V4dGVybiBpbnQgbXB0c2NzaWhfcmFpZF9pZF90b19udW0oTVBUX1NDU0lfSE9TVCAqaGQsIHVpbnQgcGh5c2Rpc2tpZCk7CitleHRlcm4gaW50IG1wdHNjc2loX2lzX3BoeXNfZGlzayhNUFRfQURBUFRFUiAqaW9jLCBpbnQgaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggZjE0OGRmYS4uMDljNzQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC01NiwxMiArNTYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4JLyogbm90aWZpZXIgY29kZSAqLwogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZF9jbGFzcy5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfc3BpLmg+CiAKICNpbmNsdWRlICJtcHRiYXNlLmgiCiAjaW5jbHVkZSAibXB0c2NzaWguaCIKQEAgLTc2LDIwICs3OSw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIENvbW1hbmQgbGluZSBhcmdzICovCi0jaWZkZWYgTVBUU0NTSUhfRU5BQkxFX0RPTUFJTl9WQUxJREFUSU9OCi1zdGF0aWMgaW50IG1wdF9kdiA9IE1QVFNDU0lIX0RPTUFJTl9WQUxJREFUSU9OOwotbW9kdWxlX3BhcmFtKG1wdF9kdiwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobXB0X2R2LCAiIERWIEFsZ29yaXRobTogZW5oYW5jZWQ9MSwgYmFzaWM9MCAoZGVmYXVsdD1NUFRTQ1NJSF9ET01BSU5fVkFMSURBVElPTj0xKSIpOwotCi1zdGF0aWMgaW50IG1wdF93aWR0aCA9IE1QVFNDU0lIX01BWF9XSURUSDsKLW1vZHVsZV9wYXJhbShtcHRfd2lkdGgsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1wdF93aWR0aCwgIiBNYXggQnVzIFdpZHRoOiB3aWRlPTEsIG5hcnJvdz0wIChkZWZhdWx0PU1QVFNDU0lIX01BWF9XSURUSD0xKSIpOwotCi1zdGF0aWMgdXNob3J0IG1wdF9mYWN0b3IgPSBNUFRTQ1NJSF9NSU5fU1lOQzsKLW1vZHVsZV9wYXJhbShtcHRfZmFjdG9yLCB1c2hvcnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtcHRfZmFjdG9yLCAiIE1pbiBTeW5jIEZhY3RvciAoZGVmYXVsdD1NUFRTQ1NJSF9NSU5fU1lOQz0weDA4KSIpOwotI2VuZGlmCi0KIHN0YXRpYyBpbnQgbXB0X3NhZl90ZSA9IE1QVFNDU0lIX1NBRl9URTsKIG1vZHVsZV9wYXJhbShtcHRfc2FmX3RlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtcHRfc2FmX3RlLCAiIEZvcmNlIGVuYWJsaW5nIFNFUCBQcm9jZXNzb3I6IGVuYWJsZT0xICAoZGVmYXVsdD1NUFRTQ1NJSF9TQUZfVEU9MCkiKTsKQEAgLTk4LDEwICs4NywzMDggQEAKIG1vZHVsZV9wYXJhbShtcHRfcHFfZmlsdGVyLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtcHRfcHFfZmlsdGVyLCAiIEVuYWJsZSBwZXJpcGhlcmFsIHF1YWxpZmllciBmaWx0ZXI6IGVuYWJsZT0xICAoZGVmYXVsdD0wKSIpOwogCitzdGF0aWMgdm9pZCBtcHRzcGlfd3JpdGVfb2Zmc2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqLCBpbnQpOworc3RhdGljIHZvaWQgbXB0c3BpX3dyaXRlX3dpZHRoKHN0cnVjdCBzY3NpX3RhcmdldCAqLCBpbnQpOworc3RhdGljIGludCBtcHRzcGlfd3JpdGVfc3BpX2RldmljZV9wZzEoc3RydWN0IHNjc2lfdGFyZ2V0ICosCisJCQkJICAgICAgIHN0cnVjdCBfQ09ORklHX1BBR0VfU0NTSV9ERVZJQ0VfMSAqKTsKKworc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqbXB0c3BpX3RyYW5zcG9ydF90ZW1wbGF0ZSA9IE5VTEw7CisKIHN0YXRpYyBpbnQJbXB0c3BpRG9uZUN0eCA9IC0xOwogc3RhdGljIGludAltcHRzcGlUYXNrQ3R4ID0gLTE7CiBzdGF0aWMgaW50CW1wdHNwaUludGVybmFsQ3R4ID0gLTE7IC8qIFVzZWQgb25seSBmb3IgaW50ZXJuYWwgY29tbWFuZHMgKi8KIAorc3RhdGljIGludCBtcHRzcGlfdGFyZ2V0X2FsbG9jKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdCgmc3RhcmdldC0+ZGV2KTsKKwlzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkID0gKHN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqKXNob3N0LT5ob3N0ZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKGhkID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gbXB0c2NzaWhfdGFyZ2V0X2FsbG9jKHN0YXJnZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBpZiB3ZSdyZSBhIGRldmljZSBvbiB2aXJ0dWFsIGNoYW5uZWwgMSBhbmQgd2UncmUgbm90IHBhcnQKKwkgKiBvZiBhbiBhcnJheSwganVzdCByZXR1cm4gaGVyZSAob3RoZXJ3aXNlIHRoZSBzZXR1cCBiZWxvdworCSAqIG1heSBhY3R1YWxseSBhZmZlY3QgYSByZWFsIHBoeXNpY2FsIGRldmljZSBvbiBjaGFubmVsIDAgKi8KKwlpZiAoc3RhcmdldC0+Y2hhbm5lbCA9PSAxICYmCisJICAgIG1wdHNjc2loX3JhaWRfaWRfdG9fbnVtKGhkLCBzdGFyZ2V0LT5pZCkgPCAwKQorCQlyZXR1cm4gMDsKKworCWlmIChoZC0+aW9jLT5zcGlfZGF0YS5udnJhbSAmJgorCSAgICBoZC0+aW9jLT5zcGlfZGF0YS5udnJhbVtzdGFyZ2V0LT5pZF0gIT0gTVBUX0hPU1RfTlZSQU1fSU5WQUxJRCkgeworCQl1MzIgbnZyYW0gPSBoZC0+aW9jLT5zcGlfZGF0YS5udnJhbVtzdGFyZ2V0LT5pZF07CisJCXNwaV9taW5fcGVyaW9kKHN0YXJnZXQpID0gKG52cmFtICYgTVBUX05WUkFNX1NZTkNfTUFTSykgPj4gTVBUX05WUkFNX1NZTkNfU0hJRlQ7CisJCXNwaV9tYXhfd2lkdGgoc3RhcmdldCkgPSBudnJhbSAmIE1QVF9OVlJBTV9XSURFX0RJU0FCTEUgPyAwIDogMTsKKwl9IGVsc2UgeworCQlzcGlfbWluX3BlcmlvZChzdGFyZ2V0KSA9IGhkLT5pb2MtPnNwaV9kYXRhLm1pblN5bmNGYWN0b3I7CisJCXNwaV9tYXhfd2lkdGgoc3RhcmdldCkgPSBoZC0+aW9jLT5zcGlfZGF0YS5tYXhCdXNXaWR0aDsKKwl9CisJc3BpX21heF9vZmZzZXQoc3RhcmdldCkgPSBoZC0+aW9jLT5zcGlfZGF0YS5tYXhTeW5jT2Zmc2V0OworCisJc3BpX29mZnNldChzdGFyZ2V0KSA9IDA7CisJbXB0c3BpX3dyaXRlX3dpZHRoKHN0YXJnZXQsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXB0c3BpX3JlYWRfc3BpX2RldmljZV9wZzAoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LAorCQkJICAgICBzdHJ1Y3QgX0NPTkZJR19QQUdFX1NDU0lfREVWSUNFXzAgKnBhc3NfcGcwKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KCZzdGFyZ2V0LT5kZXYpOworCXN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqaGQgPSAoc3RydWN0IF9NUFRfU0NTSV9IT1NUICopc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBfTVBUX0FEQVBURVIgKmlvYyA9IGhkLT5pb2M7CisJc3RydWN0IF9DT05GSUdfUEFHRV9TQ1NJX0RFVklDRV8wICpwZzA7CisJZG1hX2FkZHJfdCBwZzBfZG1hOworCWludCBzaXplOworCXN0cnVjdCBfeF9jb25maWdfcGFybXMgY2ZnOworCXN0cnVjdCBfQ09ORklHX1BBR0VfSEVBREVSIGhkcjsKKwlpbnQgZXJyID0gLUVCVVNZOworCisJLyogTm8gU1BJIHBhcmFtZXRlcnMgZm9yIFJBSUQgZGV2aWNlcyAqLworCWlmIChzdGFyZ2V0LT5jaGFubmVsID09IDAgJiYKKwkgICAgKGhkLT5pb2MtPnJhaWRfZGF0YS5pc1JhaWQgJiAoMSA8PCBzdGFyZ2V0LT5pZCkpKQorCQlyZXR1cm4gLTE7CisKKwlzaXplID0gaW9jLT5zcGlfZGF0YS5zZHAwbGVuZ3RoICogNDsKKwkvKgorCWlmIChpb2MtPnNwaV9kYXRhLnNkcDBsZW5ndGggJiAxKQorCQlzaXplICs9IHNpemUgKyA0OworCXNpemUgKz0gMjA0ODsKKwkqLworCisJcGcwID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpb2MtPnBjaWRldi0+ZGV2LCBzaXplLCAmcGcwX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBnMCA9PSBOVUxMKSB7CisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fRVJSLCBzdGFyZ2V0LCAiZG1hX2FsbG9jX2NvaGVyZW50IGZvciBwYXJhbWV0ZXJzIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldCgmaGRyLCAwLCBzaXplb2YoaGRyKSk7CisKKwloZHIuUGFnZVZlcnNpb24gPSBpb2MtPnNwaV9kYXRhLnNkcDB2ZXJzaW9uOworCWhkci5QYWdlTGVuZ3RoID0gaW9jLT5zcGlfZGF0YS5zZHAwbGVuZ3RoOworCWhkci5QYWdlTnVtYmVyID0gMDsKKwloZHIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX1NDU0lfREVWSUNFOworCisJbWVtc2V0KCZjZmcsIDAsIHNpemVvZihjZmcpKTsKKworCWNmZy5jZmdoZHIuaGRyID0gJmhkcjsKKwljZmcucGh5c0FkZHIgPSBwZzBfZG1hOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKKwljZmcuZGlyID0gMDsKKwljZmcucGFnZUFkZHIgPSBzdGFyZ2V0LT5pZDsKKworCWlmIChtcHRfY29uZmlnKGlvYywgJmNmZykpIHsKKwkJc3RhcmdldF9wcmludGsoS0VSTl9FUlIsIHN0YXJnZXQsICJtcHRfY29uZmlnIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCWVyciA9IDA7CisJbWVtY3B5KHBhc3NfcGcwLCBwZzAsIHNpemUpOworCisgb3V0X2ZyZWU6CisJZG1hX2ZyZWVfY29oZXJlbnQoJmlvYy0+cGNpZGV2LT5kZXYsIHNpemUsIHBnMCwgcGcwX2RtYSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHUzMiBtcHRzcGlfZ2V0UlAoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXUzMiBuZWdvID0gMDsKKworCW5lZ28gfD0gc3BpX2l1KHN0YXJnZXQpID8gTVBJX1NDU0lERVZQQUdFMV9SUF9JVSA6IDA7CisJbmVnbyB8PSBzcGlfZHQoc3RhcmdldCkgPyBNUElfU0NTSURFVlBBR0UxX1JQX0RUIDogMDsKKwluZWdvIHw9IHNwaV9xYXMoc3RhcmdldCkgPyBNUElfU0NTSURFVlBBR0UxX1JQX1FBUyA6IDA7CisJbmVnbyB8PSBzcGlfaG9sZF9tY3Moc3RhcmdldCkgPyBNUElfU0NTSURFVlBBR0UxX1JQX0hPTERfTUNTIDogMDsKKwluZWdvIHw9IHNwaV93cl9mbG93KHN0YXJnZXQpID8gTVBJX1NDU0lERVZQQUdFMV9SUF9XUl9GTE9XIDogMDsKKwluZWdvIHw9IHNwaV9yZF9zdHJtKHN0YXJnZXQpID8gTVBJX1NDU0lERVZQQUdFMV9SUF9SRF9TVFJNIDogMDsKKwluZWdvIHw9IHNwaV9ydGkoc3RhcmdldCkgPyBNUElfU0NTSURFVlBBR0UxX1JQX1JUSSA6IDA7CisJbmVnbyB8PSBzcGlfcGNvbXBfZW4oc3RhcmdldCkgPyBNUElfU0NTSURFVlBBR0UxX1JQX1BDT01QX0VOIDogMDsKKworCW5lZ28gfD0gKHNwaV9wZXJpb2Qoc3RhcmdldCkgPDwgIE1QSV9TQ1NJREVWUEFHRTFfUlBfU0hJRlRfTUlOX1NZTkNfUEVSSU9EKSAmIE1QSV9TQ1NJREVWUEFHRTFfUlBfTUlOX1NZTkNfUEVSSU9EX01BU0s7CisJbmVnbyB8PSAoc3BpX29mZnNldChzdGFyZ2V0KSA8PCBNUElfU0NTSURFVlBBR0UxX1JQX1NISUZUX01BWF9TWU5DX09GRlNFVCkgJiBNUElfU0NTSURFVlBBR0UxX1JQX01BWF9TWU5DX09GRlNFVF9NQVNLOworCW5lZ28gfD0gc3BpX3dpZHRoKHN0YXJnZXQpID8gIE1QSV9TQ1NJREVWUEFHRTFfUlBfV0lERSA6IDA7CisKKwlyZXR1cm4gbmVnbzsKK30KKworc3RhdGljIHZvaWQgbXB0c3BpX3JlYWRfcGFyYW1ldGVycyhzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJaW50IG5lZ287CisJc3RydWN0IF9DT05GSUdfUEFHRV9TQ1NJX0RFVklDRV8wIHBnMDsKKworCW1wdHNwaV9yZWFkX3NwaV9kZXZpY2VfcGcwKHN0YXJnZXQsICZwZzApOworCisJbmVnbyA9IGxlMzJfdG9fY3B1KHBnMC5OZWdvdGlhdGVkUGFyYW1ldGVycyk7CisKKwlzcGlfaXUoc3RhcmdldCkgPSAobmVnbyAmIE1QSV9TQ1NJREVWUEFHRTBfTlBfSVUpID8gMSA6IDA7CisJc3BpX2R0KHN0YXJnZXQpID0gKG5lZ28gJiBNUElfU0NTSURFVlBBR0UwX05QX0RUKSA/IDEgOiAwOworCXNwaV9xYXMoc3RhcmdldCkgPSAobmVnbyAmIE1QSV9TQ1NJREVWUEFHRTBfTlBfUUFTKSA/IDEgOiAwOworCXNwaV93cl9mbG93KHN0YXJnZXQpID0gKG5lZ28gJiBNUElfU0NTSURFVlBBR0UwX05QX1dSX0ZMT1cpID8gMSA6IDA7CisJc3BpX3JkX3N0cm0oc3RhcmdldCkgPSAobmVnbyAmIE1QSV9TQ1NJREVWUEFHRTBfTlBfUkRfU1RSTSkgPyAxIDogMDsKKwlzcGlfcnRpKHN0YXJnZXQpID0gKG5lZ28gJiBNUElfU0NTSURFVlBBR0UwX05QX1JUSSkgPyAxIDogMDsKKwlzcGlfcGNvbXBfZW4oc3RhcmdldCkgPSAobmVnbyAmIE1QSV9TQ1NJREVWUEFHRTBfTlBfUENPTVBfRU4pID8gMSA6IDA7CisJc3BpX2hvbGRfbWNzKHN0YXJnZXQpID0gKG5lZ28gJiBNUElfU0NTSURFVlBBR0UwX05QX0hPTERfTUNTKSA/IDEgOiAwOworCXNwaV9wZXJpb2Qoc3RhcmdldCkgPSAobmVnbyAmIE1QSV9TQ1NJREVWUEFHRTBfTlBfTkVHX1NZTkNfUEVSSU9EX01BU0spID4+IE1QSV9TQ1NJREVWUEFHRTBfTlBfU0hJRlRfU1lOQ19QRVJJT0Q7CisJc3BpX29mZnNldChzdGFyZ2V0KSA9IChuZWdvICYgTVBJX1NDU0lERVZQQUdFMF9OUF9ORUdfU1lOQ19PRkZTRVRfTUFTSykgPj4gTVBJX1NDU0lERVZQQUdFMF9OUF9TSElGVF9TWU5DX09GRlNFVDsKKwlzcGlfd2lkdGgoc3RhcmdldCkgPSAobmVnbyAmIE1QSV9TQ1NJREVWUEFHRTBfTlBfV0lERSkgPyAxIDogMDsKK30KKworc3RhdGljIGludAorbXB0c2NzaWhfcXVpZXNjZV9yYWlkKE1QVF9TQ1NJX0hPU1QgKmhkLCBpbnQgcXVpZXNjZSwgaW50IGRpc2spCit7CisJTXBpUmFpZEFjdGlvblJlcXVlc3RfdAkqcFJlcTsKKwlNUFRfRlJBTUVfSERSCQkqbWY7CisKKwkvKiBHZXQgYW5kIFBvcHVsYXRlIGEgZnJlZSBGcmFtZQorCSAqLworCWlmICgobWYgPSBtcHRfZ2V0X21zZ19mcmFtZShoZC0+aW9jLT5JbnRlcm5hbEN0eCwgaGQtPmlvYykpID09IE5VTEwpIHsKKwkJZGR2cHJpbnRrKChNWUlPQ19zX1dBUk5fRk1UICJfZG9fcmFpZDogbm8gbXNnIGZyYW1lcyFcbiIsCisJCQkJCWhkLT5pb2MtPm5hbWUpKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXBSZXEgPSAoTXBpUmFpZEFjdGlvblJlcXVlc3RfdCAqKW1mOworCWlmIChxdWllc2NlKQorCQlwUmVxLT5BY3Rpb24gPSBNUElfUkFJRF9BQ1RJT05fUVVJRVNDRV9QSFlTX0lPOworCWVsc2UKKwkJcFJlcS0+QWN0aW9uID0gTVBJX1JBSURfQUNUSU9OX0VOQUJMRV9QSFlTX0lPOworCXBSZXEtPlJlc2VydmVkMSA9IDA7CisJcFJlcS0+Q2hhaW5PZmZzZXQgPSAwOworCXBSZXEtPkZ1bmN0aW9uID0gTVBJX0ZVTkNUSU9OX1JBSURfQUNUSU9OOworCXBSZXEtPlZvbHVtZUlEID0gZGlzazsKKwlwUmVxLT5Wb2x1bWVCdXMgPSAwOworCXBSZXEtPlBoeXNEaXNrTnVtID0gMDsKKwlwUmVxLT5Nc2dGbGFncyA9IDA7CisJcFJlcS0+UmVzZXJ2ZWQyID0gMDsKKwlwUmVxLT5BY3Rpb25EYXRhV29yZCA9IDA7IC8qIFJlc2VydmVkIGZvciB0aGlzIGFjdGlvbiAqLworCisJbXB0X2FkZF9zZ2UoKGNoYXIgKikmcFJlcS0+QWN0aW9uRGF0YVNHRSwKKwkJTVBUX1NHRV9GTEFHU19TU0lNUExFX1JFQUQgfCAwLCAoZG1hX2FkZHJfdCkgLTEpOworCisJZGR2cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UICJSQUlEIFZvbHVtZSBhY3Rpb24gJXggaWQgJWRcbiIsCisJCQloZC0+aW9jLT5uYW1lLCBhY3Rpb24sIGlvLT5pZCkpOworCisJaGQtPnBMb2NhbCA9IE5VTEw7CisJaGQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqMTA7IC8qIDEwIHNlY29uZCB0aW1lb3V0ICovCisJaGQtPnNjYW5kdl93YWl0X2RvbmUgPSAwOworCisJLyogU2F2ZSBjbWQgcG9pbnRlciwgZm9yIHJlc291cmNlIGZyZWUgaWYgdGltZW91dCBvcgorCSAqIEZXIHJlbG9hZCBvY2N1cnMKKwkgKi8KKwloZC0+Y21kUHRyID0gbWY7CisKKwlhZGRfdGltZXIoJmhkLT50aW1lcik7CisJbXB0X3B1dF9tc2dfZnJhbWUoaGQtPmlvYy0+SW50ZXJuYWxDdHgsIGhkLT5pb2MsIG1mKTsKKwl3YWl0X2V2ZW50KGhkLT5zY2FuZHZfd2FpdHEsIGhkLT5zY2FuZHZfd2FpdF9kb25lKTsKKworCWlmICgoaGQtPnBMb2NhbCA9PSBOVUxMKSB8fCAoaGQtPnBMb2NhbC0+Y29tcGxldGlvbiAhPSAwKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1wdHNwaV9kdl9kZXZpY2Uoc3RydWN0IF9NUFRfU0NTSV9IT1NUICpoZCwKKwkJCSAgICAgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCVZpcnRUYXJnZXQgKnZ0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KS0+aG9zdGRhdGE7CisKKwkvKiBubyBEViBvbiBSQUlEIGRldmljZXMgKi8KKwlpZiAoc2Rldi0+Y2hhbm5lbCA9PSAwICYmCisJICAgIChoZC0+aW9jLT5yYWlkX2RhdGEuaXNSYWlkICYgKDEgPDwgc2Rldi0+aWQpKSkKKwkJcmV0dXJuOworCisJLyogSWYgdGhpcyBpcyBhIHBpZWNlIG9mIGEgUkFJRCwgdGhlbiBxdWllc2NlIGZpcnN0ICovCisJaWYgKHNkZXYtPmNoYW5uZWwgPT0gMSAmJgorCSAgICBtcHRzY3NpaF9xdWllc2NlX3JhaWQoaGQsIDEsIHZ0YXJnZXQtPnRhcmdldF9pZCkgPCAwKSB7CisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX3RhcmdldChzZGV2KSwKKwkJCSAgICAgICAiSW50ZWdyYXRlZCBSQUlEIHF1aWVzY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNwaV9kdl9kZXZpY2Uoc2Rldik7CisKKwlpZiAoc2Rldi0+Y2hhbm5lbCA9PSAxICYmCisJICAgIG1wdHNjc2loX3F1aWVzY2VfcmFpZChoZCwgMCwgdnRhcmdldC0+dGFyZ2V0X2lkKSA8IDApCisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX3RhcmdldChzZGV2KSwKKwkJCSAgICAgICAiSW50ZWdyYXRlZCBSQUlEIHJlc3VtZSBmYWlsZWRcbiIpOworCisJbXB0c3BpX3JlYWRfcGFyYW1ldGVycyhzZGV2LT5zZGV2X3RhcmdldCk7CisJc3BpX2Rpc3BsYXlfeGZlcl9hZ3JlZW1lbnQoc2Rldi0+c2Rldl90YXJnZXQpOworCW1wdHNwaV9yZWFkX3BhcmFtZXRlcnMoc2Rldi0+c2Rldl90YXJnZXQpOworfQorCitzdGF0aWMgaW50IG1wdHNwaV9zbGF2ZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJaW50IHJldDsKKwlNUFRfU0NTSV9IT1NUICpoZCA9IChNUFRfU0NTSV9IT1NUICopc2Rldi0+aG9zdC0+aG9zdGRhdGE7CisJLyogZ2NjIGRvZXNuJ3Qgc2VlIHRoYXQgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJsZSBvY2N1ciB3aXRoaW4KKwkgKiB0aGUgaWYoKSBzdGF0ZW1lbnRzLCBzbyBzdG9wIGl0IGZyb20gd2hpbmluZyAqLworCWludCBwaHlzZGlza251bSA9IDA7CisKKwlpZiAoc2Rldi0+Y2hhbm5lbCA9PSAxKSB7CisJCXBoeXNkaXNrbnVtID0gbXB0c2NzaWhfcmFpZF9pZF90b19udW0oaGQsIHNkZXYtPmlkKTsKKworCQlpZiAocGh5c2Rpc2tudW0gPCAwKQorCQkJcmV0dXJuIHBoeXNkaXNrbnVtOworCX0KKworCXJldCA9IG1wdHNjc2loX3NsYXZlX2FsbG9jKHNkZXYpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzZGV2LT5jaGFubmVsID09IDEpIHsKKwkJVmlydERldmljZSAqdmRldiA9IHNkZXYtPmhvc3RkYXRhOworCQlzZGV2LT5ub191bGRfYXR0YWNoID0gMTsKKwkJdmRldi0+dnRhcmdldC0+dGZsYWdzIHw9IE1QVF9UQVJHRVRfRkxBR1NfUkFJRF9DT01QT05FTlQ7CisJCS8qIFRoZSByZWFsIGNoYW5uZWwgZm9yIHRoaXMgZGV2aWNlIGlzIHplcm8gKi8KKwkJdmRldi0+dnRhcmdldC0+YnVzX2lkID0gMDsKKwkJLyogVGhlIGFjdHVhbCBwaHlzZGlza251bSAoZm9yIFJBSUQgcGFzc3Rocm91Z2gpICovCisJCXZkZXYtPnZ0YXJnZXQtPnRhcmdldF9pZCA9IHBoeXNkaXNrbnVtOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wdHNwaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWludCByZXQgPSBtcHRzY3NpaF9zbGF2ZV9jb25maWd1cmUoc2Rldik7CisJc3RydWN0IF9NUFRfU0NTSV9IT1NUICpoZCA9CisJCShzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHNkZXYtPmNoYW5uZWwgPT0gMSB8fAorCSAgICAgIShoZC0+aW9jLT5yYWlkX2RhdGEuaXNSYWlkICYgKDEgPDwgc2Rldi0+aWQpKSkgJiYKKwkgICAgIXNwaV9pbml0aWFsX2R2KHNkZXYtPnNkZXZfdGFyZ2V0KSkKKwkJbXB0c3BpX2R2X2RldmljZShoZCwgc2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXB0c3BpX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOworCVZpcnRUYXJnZXQgKnZ0YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKKwlWaXJ0RGV2aWNlICp2ZGV2aWNlID0gc2Rldi0+aG9zdGRhdGE7CisKKwkvKiBXaWxsIHRoaXMgYmUgdGhlIGxhc3QgbHVuIG9uIGEgbm9uLXJhaWQgZGV2aWNlPyAqLworCWlmICh2dGFyZ2V0LT5udW1fbHVucyA9PSAxICYmIHZkZXZpY2UtPmNvbmZpZ3VyZWRfbHVuKSB7CisJCXN0cnVjdCBfQ09ORklHX1BBR0VfU0NTSV9ERVZJQ0VfMSBwZzE7CisKKwkJLyogQXN5bmMgTmFycm93ICovCisJCXBnMS5SZXF1ZXN0ZWRQYXJhbWV0ZXJzID0gMDsKKwkJcGcxLlJlc2VydmVkID0gMDsKKwkJcGcxLkNvbmZpZ3VyYXRpb24gPSAwOworCisJCW1wdHNwaV93cml0ZV9zcGlfZGV2aWNlX3BnMShzdGFyZ2V0LCAmcGcxKTsKKwl9CisKKwltcHRzY3NpaF9zbGF2ZV9kZXN0cm95KHNkZXYpOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBtcHRzcGlfZHJpdmVyX3RlbXBsYXRlID0gewogCS5tb2R1bGUJCQkJPSBUSElTX01PRFVMRSwKIAkucHJvY19uYW1lCQkJPSAibXB0c3BpIiwKQEAgLTEwOSwxMSArMzk2LDExIEBACiAJLm5hbWUJCQkJPSAiTVBUIFNQSSBIb3N0IiwKIAkuaW5mbwkJCQk9IG1wdHNjc2loX2luZm8sCiAJLnF1ZXVlY29tbWFuZAkJCT0gbXB0c2NzaWhfcWNtZCwKLQkudGFyZ2V0X2FsbG9jCQkJPSBtcHRzY3NpaF90YXJnZXRfYWxsb2MsCi0JLnNsYXZlX2FsbG9jCQkJPSBtcHRzY3NpaF9zbGF2ZV9hbGxvYywKLQkuc2xhdmVfY29uZmlndXJlCQk9IG1wdHNjc2loX3NsYXZlX2NvbmZpZ3VyZSwKKwkudGFyZ2V0X2FsbG9jCQkJPSBtcHRzcGlfdGFyZ2V0X2FsbG9jLAorCS5zbGF2ZV9hbGxvYwkJCT0gbXB0c3BpX3NsYXZlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUJCT0gbXB0c3BpX3NsYXZlX2NvbmZpZ3VyZSwKIAkudGFyZ2V0X2Rlc3Ryb3kJCQk9IG1wdHNjc2loX3RhcmdldF9kZXN0cm95LAotCS5zbGF2ZV9kZXN0cm95CQkJPSBtcHRzY3NpaF9zbGF2ZV9kZXN0cm95LAorCS5zbGF2ZV9kZXN0cm95CQkJPSBtcHRzcGlfc2xhdmVfZGVzdHJveSwKIAkuY2hhbmdlX3F1ZXVlX2RlcHRoIAkJPSBtcHRzY3NpaF9jaGFuZ2VfcXVldWVfZGVwdGgsCiAJLmVoX2Fib3J0X2hhbmRsZXIJCT0gbXB0c2NzaWhfYWJvcnQsCiAJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyCT0gbXB0c2NzaWhfZGV2X3Jlc2V0LApAQCAtMTI4LDYgKzQxNSwzNjAgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogfTsKIAorc3RhdGljIGludCBtcHRzcGlfd3JpdGVfc3BpX2RldmljZV9wZzEoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LAorCQkJICAgICAgIHN0cnVjdCBfQ09ORklHX1BBR0VfU0NTSV9ERVZJQ0VfMSAqcGFzc19wZzEpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QoJnN0YXJnZXQtPmRldik7CisJc3RydWN0IF9NUFRfU0NTSV9IT1NUICpoZCA9IChzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKilzaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IF9NUFRfQURBUFRFUiAqaW9jID0gaGQtPmlvYzsKKwlzdHJ1Y3QgX0NPTkZJR19QQUdFX1NDU0lfREVWSUNFXzEgKnBnMTsKKwlkbWFfYWRkcl90IHBnMV9kbWE7CisJaW50IHNpemU7CisJc3RydWN0IF94X2NvbmZpZ19wYXJtcyBjZmc7CisJc3RydWN0IF9DT05GSUdfUEFHRV9IRUFERVIgaGRyOworCWludCBlcnIgPSAtRUJVU1k7CisKKwkvKiBkb24ndCBhbGxvdyB1cGRhdGluZyBuZWdvIHBhcmFtZXRlcnMgb24gUkFJRCBkZXZpY2VzICovCisJaWYgKHN0YXJnZXQtPmNoYW5uZWwgPT0gMCAmJgorCSAgICAoaGQtPmlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IHN0YXJnZXQtPmlkKSkpCisJCXJldHVybiAtMTsKKworCXNpemUgPSBpb2MtPnNwaV9kYXRhLnNkcDFsZW5ndGggKiA0OworCisJcGcxID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpb2MtPnBjaWRldi0+ZGV2LCBzaXplLCAmcGcxX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBnMSA9PSBOVUxMKSB7CisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fRVJSLCBzdGFyZ2V0LCAiZG1hX2FsbG9jX2NvaGVyZW50IGZvciBwYXJhbWV0ZXJzIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldCgmaGRyLCAwLCBzaXplb2YoaGRyKSk7CisKKwloZHIuUGFnZVZlcnNpb24gPSBpb2MtPnNwaV9kYXRhLnNkcDF2ZXJzaW9uOworCWhkci5QYWdlTGVuZ3RoID0gaW9jLT5zcGlfZGF0YS5zZHAxbGVuZ3RoOworCWhkci5QYWdlTnVtYmVyID0gMTsKKwloZHIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX1NDU0lfREVWSUNFOworCisJbWVtc2V0KCZjZmcsIDAsIHNpemVvZihjZmcpKTsKKworCWNmZy5jZmdoZHIuaGRyID0gJmhkcjsKKwljZmcucGh5c0FkZHIgPSBwZzFfZG1hOworCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX1dSSVRFX0NVUlJFTlQ7CisJY2ZnLmRpciA9IDE7CisJY2ZnLnBhZ2VBZGRyID0gc3RhcmdldC0+aWQ7CisKKwltZW1jcHkocGcxLCBwYXNzX3BnMSwgc2l6ZSk7CisKKwlwZzEtPkhlYWRlci5QYWdlVmVyc2lvbiA9IGhkci5QYWdlVmVyc2lvbjsKKwlwZzEtPkhlYWRlci5QYWdlTGVuZ3RoID0gaGRyLlBhZ2VMZW5ndGg7CisJcGcxLT5IZWFkZXIuUGFnZU51bWJlciA9IGhkci5QYWdlTnVtYmVyOworCXBnMS0+SGVhZGVyLlBhZ2VUeXBlID0gaGRyLlBhZ2VUeXBlOworCisJaWYgKG1wdF9jb25maWcoaW9jLCAmY2ZnKSkgeworCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0VSUiwgc3RhcmdldCwgIm1wdF9jb25maWcgZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJZXJyID0gMDsKKworIG91dF9mcmVlOgorCWRtYV9mcmVlX2NvaGVyZW50KCZpb2MtPnBjaWRldi0+ZGV2LCBzaXplLCBwZzEsIHBnMV9kbWEpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIG1wdHNwaV93cml0ZV9vZmZzZXQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBfQ09ORklHX1BBR0VfU0NTSV9ERVZJQ0VfMSBwZzE7CisJdTMyIG5lZ287CisKKwlpZiAob2Zmc2V0IDwgMCkKKwkJb2Zmc2V0ID0gMDsKKworCWlmIChvZmZzZXQgPiAyNTUpCisJCW9mZnNldCA9IDI1NTsKKworCWlmIChzcGlfb2Zmc2V0KHN0YXJnZXQpID09IC0xKQorCQltcHRzcGlfcmVhZF9wYXJhbWV0ZXJzKHN0YXJnZXQpOworCisJc3BpX29mZnNldChzdGFyZ2V0KSA9IG9mZnNldDsKKworCW5lZ28gPSBtcHRzcGlfZ2V0UlAoc3RhcmdldCk7CisKKwlwZzEuUmVxdWVzdGVkUGFyYW1ldGVycyA9IGNwdV90b19sZTMyKG5lZ28pOworCXBnMS5SZXNlcnZlZCA9IDA7CisJcGcxLkNvbmZpZ3VyYXRpb24gPSAwOworCisJbXB0c3BpX3dyaXRlX3NwaV9kZXZpY2VfcGcxKHN0YXJnZXQsICZwZzEpOworfQorCitzdGF0aWMgdm9pZCBtcHRzcGlfd3JpdGVfcGVyaW9kKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCwgaW50IHBlcmlvZCkKK3sKKwlzdHJ1Y3QgX0NPTkZJR19QQUdFX1NDU0lfREVWSUNFXzEgcGcxOworCXUzMiBuZWdvOworCisJaWYgKHBlcmlvZCA8IDgpCisJCXBlcmlvZCA9IDg7CisKKwlpZiAocGVyaW9kID4gMjU1KQorCQlwZXJpb2QgPSAyNTU7CisKKwlpZiAoc3BpX3BlcmlvZChzdGFyZ2V0KSA9PSAtMSkKKwkJbXB0c3BpX3JlYWRfcGFyYW1ldGVycyhzdGFyZ2V0KTsKKworCWlmIChwZXJpb2QgPT0gOCkgeworCQlzcGlfaXUoc3RhcmdldCkgPSAxOworCQlzcGlfZHQoc3RhcmdldCkgPSAxOworCX0gZWxzZSBpZiAocGVyaW9kID09IDkpIHsKKwkJc3BpX2R0KHN0YXJnZXQpID0gMTsKKwl9CisKKwlzcGlfcGVyaW9kKHN0YXJnZXQpID0gcGVyaW9kOworCisJbmVnbyA9IG1wdHNwaV9nZXRSUChzdGFyZ2V0KTsKKworCXBnMS5SZXF1ZXN0ZWRQYXJhbWV0ZXJzID0gY3B1X3RvX2xlMzIobmVnbyk7CisJcGcxLlJlc2VydmVkID0gMDsKKwlwZzEuQ29uZmlndXJhdGlvbiA9IDA7CisKKwltcHRzcGlfd3JpdGVfc3BpX2RldmljZV9wZzEoc3RhcmdldCwgJnBnMSk7Cit9CisKK3N0YXRpYyB2b2lkIG1wdHNwaV93cml0ZV9kdChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQsIGludCBkdCkKK3sKKwlzdHJ1Y3QgX0NPTkZJR19QQUdFX1NDU0lfREVWSUNFXzEgcGcxOworCXUzMiBuZWdvOworCisJaWYgKHNwaV9wZXJpb2Qoc3RhcmdldCkgPT0gLTEpCisJCW1wdHNwaV9yZWFkX3BhcmFtZXRlcnMoc3RhcmdldCk7CisKKwlpZiAoIWR0ICYmIHNwaV9wZXJpb2Qoc3RhcmdldCkgPCAxMCkKKwkJc3BpX3BlcmlvZChzdGFyZ2V0KSA9IDEwOworCisJc3BpX2R0KHN0YXJnZXQpID0gZHQ7CisKKwluZWdvID0gbXB0c3BpX2dldFJQKHN0YXJnZXQpOworCisKKwlwZzEuUmVxdWVzdGVkUGFyYW1ldGVycyA9IGNwdV90b19sZTMyKG5lZ28pOworCXBnMS5SZXNlcnZlZCA9IDA7CisJcGcxLkNvbmZpZ3VyYXRpb24gPSAwOworCisJbXB0c3BpX3dyaXRlX3NwaV9kZXZpY2VfcGcxKHN0YXJnZXQsICZwZzEpOworfQorCitzdGF0aWMgdm9pZCBtcHRzcGlfd3JpdGVfaXUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LCBpbnQgaXUpCit7CisJc3RydWN0IF9DT05GSUdfUEFHRV9TQ1NJX0RFVklDRV8xIHBnMTsKKwl1MzIgbmVnbzsKKworCWlmIChzcGlfcGVyaW9kKHN0YXJnZXQpID09IC0xKQorCQltcHRzcGlfcmVhZF9wYXJhbWV0ZXJzKHN0YXJnZXQpOworCisJaWYgKCFpdSAmJiBzcGlfcGVyaW9kKHN0YXJnZXQpIDwgOSkKKwkJc3BpX3BlcmlvZChzdGFyZ2V0KSA9IDk7CisKKwlzcGlfaXUoc3RhcmdldCkgPSBpdTsKKworCW5lZ28gPSBtcHRzcGlfZ2V0UlAoc3RhcmdldCk7CisKKwlwZzEuUmVxdWVzdGVkUGFyYW1ldGVycyA9IGNwdV90b19sZTMyKG5lZ28pOworCXBnMS5SZXNlcnZlZCA9IDA7CisJcGcxLkNvbmZpZ3VyYXRpb24gPSAwOworCisJbXB0c3BpX3dyaXRlX3NwaV9kZXZpY2VfcGcxKHN0YXJnZXQsICZwZzEpOworfQorCisjZGVmaW5lIE1QVFNQSV9TSU1QTEVfVFJBTlNQT1JUX1BBUk0ocGFybSkgCQkJCVwKK3N0YXRpYyB2b2lkIG1wdHNwaV93cml0ZV8jI3Bhcm0oc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LCBpbnQgcGFybSlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBfQ09ORklHX1BBR0VfU0NTSV9ERVZJQ0VfMSBwZzE7CQkJCVwKKwl1MzIgbmVnbzsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXNwaV8jI3Bhcm0oc3RhcmdldCkgPSBwYXJtOwkJCQkJXAorCQkJCQkJCQkJXAorCW5lZ28gPSBtcHRzcGlfZ2V0UlAoc3RhcmdldCk7CQkJCQlcCisJCQkJCQkJCQlcCisJcGcxLlJlcXVlc3RlZFBhcmFtZXRlcnMgPSBjcHVfdG9fbGUzMihuZWdvKTsJCQlcCisJcGcxLlJlc2VydmVkID0gMDsJCQkJCQlcCisJcGcxLkNvbmZpZ3VyYXRpb24gPSAwOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwltcHRzcGlfd3JpdGVfc3BpX2RldmljZV9wZzEoc3RhcmdldCwgJnBnMSk7CQkJCVwKK30KKworTVBUU1BJX1NJTVBMRV9UUkFOU1BPUlRfUEFSTShyZF9zdHJtKQorTVBUU1BJX1NJTVBMRV9UUkFOU1BPUlRfUEFSTSh3cl9mbG93KQorTVBUU1BJX1NJTVBMRV9UUkFOU1BPUlRfUEFSTShydGkpCitNUFRTUElfU0lNUExFX1RSQU5TUE9SVF9QQVJNKGhvbGRfbWNzKQorTVBUU1BJX1NJTVBMRV9UUkFOU1BPUlRfUEFSTShwY29tcF9lbikKKworc3RhdGljIHZvaWQgbXB0c3BpX3dyaXRlX3FhcyhzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQsIGludCBxYXMpCit7CisJc3RydWN0IF9DT05GSUdfUEFHRV9TQ1NJX0RFVklDRV8xIHBnMTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdCgmc3RhcmdldC0+ZGV2KTsKKwlzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkID0gKHN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqKXNob3N0LT5ob3N0ZGF0YTsKKwlWaXJ0VGFyZ2V0ICp2dGFyZ2V0ID0gc3RhcmdldC0+aG9zdGRhdGE7CisJdTMyIG5lZ287CisKKwlpZiAoKHZ0YXJnZXQtPm5lZ29GbGFncyAmIE1QVF9UQVJHRVRfTk9fTkVHT19RQVMpIHx8CisJICAgIGhkLT5pb2MtPnNwaV9kYXRhLm5vUWFzKQorCQlzcGlfcWFzKHN0YXJnZXQpID0gMDsKKwllbHNlCisJCXNwaV9xYXMoc3RhcmdldCkgPSBxYXM7CisKKwluZWdvID0gbXB0c3BpX2dldFJQKHN0YXJnZXQpOworCisJcGcxLlJlcXVlc3RlZFBhcmFtZXRlcnMgPSBjcHVfdG9fbGUzMihuZWdvKTsKKwlwZzEuUmVzZXJ2ZWQgPSAwOworCXBnMS5Db25maWd1cmF0aW9uID0gMDsKKworCW1wdHNwaV93cml0ZV9zcGlfZGV2aWNlX3BnMShzdGFyZ2V0LCAmcGcxKTsKK30KKworc3RhdGljIHZvaWQgbXB0c3BpX3dyaXRlX3dpZHRoKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCwgaW50IHdpZHRoKQoreworCXN0cnVjdCBfQ09ORklHX1BBR0VfU0NTSV9ERVZJQ0VfMSBwZzE7CisJdTMyIG5lZ287CisKKwlpZiAoIXdpZHRoKSB7CisJCXNwaV9kdChzdGFyZ2V0KSA9IDA7CisJCWlmIChzcGlfcGVyaW9kKHN0YXJnZXQpIDwgMTApCisJCQlzcGlfcGVyaW9kKHN0YXJnZXQpID0gMTA7CisJfQorCisJc3BpX3dpZHRoKHN0YXJnZXQpID0gd2lkdGg7CisKKwluZWdvID0gbXB0c3BpX2dldFJQKHN0YXJnZXQpOworCisJcGcxLlJlcXVlc3RlZFBhcmFtZXRlcnMgPSBjcHVfdG9fbGUzMihuZWdvKTsKKwlwZzEuUmVzZXJ2ZWQgPSAwOworCXBnMS5Db25maWd1cmF0aW9uID0gMDsKKworCW1wdHNwaV93cml0ZV9zcGlfZGV2aWNlX3BnMShzdGFyZ2V0LCAmcGcxKTsKK30KKworc3RydWN0IHdvcmtfcXVldWVfd3JhcHBlciB7CisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJc3RydWN0IF9NUFRfU0NTSV9IT1NUCSpoZDsKKwlpbnQJCQlkaXNrOworfTsKKworc3RhdGljIHZvaWQgbXB0X3dvcmtfd3JhcHBlcih2b2lkICpkYXRhKQoreworCXN0cnVjdCB3b3JrX3F1ZXVlX3dyYXBwZXIgKndxdyA9IChzdHJ1Y3Qgd29ya19xdWV1ZV93cmFwcGVyICopZGF0YTsKKwlzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkID0gd3F3LT5oZDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGhkLT5pb2MtPnNoOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwlpbnQgZGlzayA9IHdxdy0+ZGlzazsKKwlzdHJ1Y3QgX0NPTkZJR19QQUdFX0lPQ18zICpwZzM7CisKKwlrZnJlZSh3cXcpOworCisJbXB0X2ZpbmRJbVZvbHVtZXMoaGQtPmlvYyk7CisJcGczID0gaGQtPmlvYy0+cmFpZF9kYXRhLnBJb2NQZzM7CisJaWYgKCFwZzMpCisJCXJldHVybjsKKworCXNob3N0X2Zvcl9lYWNoX2RldmljZShzZGV2LHNob3N0KSB7CisJCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjc2lfdGFyZ2V0KHNkZXYpOworCQlWaXJ0VGFyZ2V0ICp2dGFyZ2V0ID0gc3RhcmdldC0+aG9zdGRhdGE7CisKKwkJLyogb25seSB3YW50IHRvIHNlYXJjaCBSQUlEIGNvbXBvbmVudHMgKi8KKwkJaWYgKHNkZXYtPmNoYW5uZWwgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFRoZSB0YXJnZXRfaWQgaXMgdGhlIHJhaWQgUGh5c0Rpc2tOdW0sIGV2ZW4gaWYKKwkJICogc3RhcmdldC0+aWQgaXMgdGhlIGFjdHVhbCB0YXJnZXQgYWRkcmVzcyAqLworCQlpZih2dGFyZ2V0LT50YXJnZXRfaWQgIT0gZGlzaykKKwkJCWNvbnRpbnVlOworCisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgdnRhcmdldC0+c3RhcmdldCwKKwkJCSAgICAgICAiSW50ZWdyYXRlZCBSQUlEIHJlcXVlc3RzIERWIG9mIG5ldyBkZXZpY2VcbiIpOworCQltcHRzcGlfZHZfZGV2aWNlKGhkLCBzZGV2KTsKKwl9CisJc2hvc3RfcHJpbnRrKEtFUk5fSU5GTywgc2hvc3QsCisJCSAgICAgIkludGVncmF0ZWQgUkFJRCBkZXRlY3RzIG5ldyBkZXZpY2UgJWRcbiIsIGRpc2spOworCXNjc2lfc2Nhbl90YXJnZXQoJmhkLT5pb2MtPnNoLT5zaG9zdF9nZW5kZXYsIDEsIGRpc2ssIDAsIDEpOworfQorCisKK3N0YXRpYyB2b2lkIG1wdF9kdl9yYWlkKHN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqaGQsIGludCBkaXNrKQoreworCXN0cnVjdCB3b3JrX3F1ZXVlX3dyYXBwZXIgKndxdyA9IGttYWxsb2Moc2l6ZW9mKCp3cXcpLCBHRlBfQVRPTUlDKTsKKworCWlmICghd3F3KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgaGQtPmlvYy0+c2gsCisJCQkgICAgICJGYWlsZWQgdG8gYWN0IG9uIFJBSUQgZXZlbnQgZm9yIHBoeXNpY2FsIGRpc2sgJWRcbiIsCisJCQkgICBkaXNrKTsKKwkJcmV0dXJuOworCX0KKwlJTklUX1dPUksoJndxdy0+d29yaywgbXB0X3dvcmtfd3JhcHBlciwgd3F3KTsKKwl3cXctPmhkID0gaGQ7CisJd3F3LT5kaXNrID0gZGlzazsKKworCXNjaGVkdWxlX3dvcmsoJndxdy0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQKK21wdHNwaV9ldmVudF9wcm9jZXNzKE1QVF9BREFQVEVSICppb2MsIEV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqcEV2UmVwbHkpCit7CisJdTggZXZlbnQgPSBsZTMyX3RvX2NwdShwRXZSZXBseS0+RXZlbnQpICYgMHhGRjsKKwlzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkID0gKHN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqKWlvYy0+c2gtPmhvc3RkYXRhOworCisJaWYgKGhkICYmIGV2ZW50ID09ICBNUElfRVZFTlRfSU5URUdSQVRFRF9SQUlEKSB7CisJCWludCByZWFzb24KKwkJCT0gKGxlMzJfdG9fY3B1KHBFdlJlcGx5LT5EYXRhWzBdKSAmIDB4MDBGRjAwMDApID4+IDE2OworCisJCWlmIChyZWFzb24gPT0gTVBJX0VWRU5UX1JBSURfUkNfRE9NQUlOX1ZBTF9ORUVERUQpIHsKKwkJCWludCBkaXNrID0gKGxlMzJfdG9fY3B1KHBFdlJlcGx5LT5EYXRhWzBdKSAmIDB4RkYwMDAwMDApID4+IDI0OworCQkJbXB0X2R2X3JhaWQoaGQsIGRpc2spOworCQl9CisJfQorCXJldHVybiBtcHRzY3NpaF9ldmVudF9wcm9jZXNzKGlvYywgcEV2UmVwbHkpOworfQorCitzdGF0aWMgaW50CittcHRzcGlfZGVueV9iaW5kaW5nKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgX01QVF9TQ1NJX0hPU1QgKmhkID0KKwkJKHN0cnVjdCBfTVBUX1NDU0lfSE9TVCAqKWRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KS0+aG9zdGRhdGE7CisJcmV0dXJuICgoaGQtPmlvYy0+cmFpZF9kYXRhLmlzUmFpZCAmICgxIDw8IHN0YXJnZXQtPmlkKSkgJiYKKwkJc3RhcmdldC0+Y2hhbm5lbCA9PSAwKSA/IDEgOiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9mdW5jdGlvbl90ZW1wbGF0ZSBtcHRzcGlfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKKwkuZ2V0X29mZnNldAk9IG1wdHNwaV9yZWFkX3BhcmFtZXRlcnMsCisJLnNldF9vZmZzZXQJPSBtcHRzcGlfd3JpdGVfb2Zmc2V0LAorCS5zaG93X29mZnNldAk9IDEsCisJLmdldF9wZXJpb2QJPSBtcHRzcGlfcmVhZF9wYXJhbWV0ZXJzLAorCS5zZXRfcGVyaW9kCT0gbXB0c3BpX3dyaXRlX3BlcmlvZCwKKwkuc2hvd19wZXJpb2QJPSAxLAorCS5nZXRfd2lkdGgJPSBtcHRzcGlfcmVhZF9wYXJhbWV0ZXJzLAorCS5zZXRfd2lkdGgJPSBtcHRzcGlfd3JpdGVfd2lkdGgsCisJLnNob3dfd2lkdGgJPSAxLAorCS5nZXRfaXUJCT0gbXB0c3BpX3JlYWRfcGFyYW1ldGVycywKKwkuc2V0X2l1CQk9IG1wdHNwaV93cml0ZV9pdSwKKwkuc2hvd19pdQk9IDEsCisJLmdldF9kdAkJPSBtcHRzcGlfcmVhZF9wYXJhbWV0ZXJzLAorCS5zZXRfZHQJCT0gbXB0c3BpX3dyaXRlX2R0LAorCS5zaG93X2R0CT0gMSwKKwkuZ2V0X3Fhcwk9IG1wdHNwaV9yZWFkX3BhcmFtZXRlcnMsCisJLnNldF9xYXMJPSBtcHRzcGlfd3JpdGVfcWFzLAorCS5zaG93X3Fhcwk9IDEsCisJLmdldF93cl9mbG93CT0gbXB0c3BpX3JlYWRfcGFyYW1ldGVycywKKwkuc2V0X3dyX2Zsb3cJPSBtcHRzcGlfd3JpdGVfd3JfZmxvdywKKwkuc2hvd193cl9mbG93CT0gMSwKKwkuZ2V0X3JkX3N0cm0JPSBtcHRzcGlfcmVhZF9wYXJhbWV0ZXJzLAorCS5zZXRfcmRfc3RybQk9IG1wdHNwaV93cml0ZV9yZF9zdHJtLAorCS5zaG93X3JkX3N0cm0JPSAxLAorCS5nZXRfcnRpCT0gbXB0c3BpX3JlYWRfcGFyYW1ldGVycywKKwkuc2V0X3J0aQk9IG1wdHNwaV93cml0ZV9ydGksCisJLnNob3dfcnRpCT0gMSwKKwkuZ2V0X3Bjb21wX2VuCT0gbXB0c3BpX3JlYWRfcGFyYW1ldGVycywKKwkuc2V0X3Bjb21wX2VuCT0gbXB0c3BpX3dyaXRlX3Bjb21wX2VuLAorCS5zaG93X3Bjb21wX2VuCT0gMSwKKwkuZ2V0X2hvbGRfbWNzCT0gbXB0c3BpX3JlYWRfcGFyYW1ldGVycywKKwkuc2V0X2hvbGRfbWNzCT0gbXB0c3BpX3dyaXRlX2hvbGRfbWNzLAorCS5zaG93X2hvbGRfbWNzCT0gMSwKKwkuZGVueV9iaW5kaW5nCT0gbXB0c3BpX2RlbnlfYmluZGluZywKK307CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTdXBwb3J0ZWQgaGFyZHdhcmUKQEAgLTI0Miw3ICs4ODMsMTQgQEAKIAlzaC0+bWF4X2lkID0gTVBUX01BWF9TQ1NJX0RFVklDRVM7CiAKIAlzaC0+bWF4X2x1biA9IE1QVF9MQVNUX0xVTiArIDE7Ci0Jc2gtPm1heF9jaGFubmVsID0gMDsKKwkvKgorCSAqIElmIFJBSUQgRmlybXdhcmUgRGV0ZWN0ZWQsIHNldHVwIHZpcnR1YWwgY2hhbm5lbAorCSAqLworCWlmICgoaW9jLT5mYWN0cy5Qcm9kdWN0SUQgJiBNUElfRldfSEVBREVSX1BJRF9QUk9EX01BU0spCisJICAgID4gTVBJX0ZXX0hFQURFUl9QSURfUFJPRF9UQVJHRVRfU0NTSSkKKwkJc2gtPm1heF9jaGFubmVsID0gMTsKKwllbHNlCisJCXNoLT5tYXhfY2hhbm5lbCA9IDA7CiAJc2gtPnRoaXNfaWQgPSBpb2MtPnBmYWN0c1swXS5Qb3J0U0NTSUlEOwogCiAJLyogUmVxdWlyZWQgZW50cnkuCkBAIC0zMDEsNyArOTQ5LDggQEAKIAkgKiBpbmRpY2F0ZXMgYSBkZXZpY2UgZXhpc3RzLgogCSAqIG1heF9pZCA9IDEgKyBtYXhpbXVtIGlkIChob3N0cy5oKQogCSAqLwotCWhkLT5UYXJnZXRzID0ga2NhbGxvYyhzaC0+bWF4X2lkLCBzaXplb2Yodm9pZCAqKSwgR0ZQX0FUT01JQyk7CisJaGQtPlRhcmdldHMgPSBrY2FsbG9jKHNoLT5tYXhfaWQgKiAoc2gtPm1heF9jaGFubmVsICsgMSksCisJCQkgICAgICBzaXplb2Yodm9pZCAqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFoZC0+VGFyZ2V0cykgewogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X21wdHNwaV9wcm9iZTsKQEAgLTMzNCw0OSArOTgzLDIzIEBACiAJaW9jLT5zcGlfZGF0YS5TYWZfVGUgPSBtcHRfc2FmX3RlOwogCWhkLT5tcHRfcHFfZmlsdGVyID0gbXB0X3BxX2ZpbHRlcjsKIAotI2lmZGVmIE1QVFNDU0lIX0VOQUJMRV9ET01BSU5fVkFMSURBVElPTgotCWlmIChpb2MtPnNwaV9kYXRhLm1heEJ1c1dpZHRoID4gbXB0X3dpZHRoKQotCQlpb2MtPnNwaV9kYXRhLm1heEJ1c1dpZHRoID0gbXB0X3dpZHRoOwotCWlmIChpb2MtPnNwaV9kYXRhLm1pblN5bmNGYWN0b3IgPCBtcHRfZmFjdG9yKQotCQlpb2MtPnNwaV9kYXRhLm1pblN5bmNGYWN0b3IgPSBtcHRfZmFjdG9yOwotCWlmIChpb2MtPnNwaV9kYXRhLm1pblN5bmNGYWN0b3IgPT0gTVBUX0FTWU5DKSB7Ci0JCWlvYy0+c3BpX2RhdGEubWF4U3luY09mZnNldCA9IDA7Ci0JfQotCWlvYy0+c3BpX2RhdGEubXB0X2R2ID0gbXB0X2R2OwotCWhkLT5uZWdvTnZyYW0gPSAwOwotCi0JZGR2cHJpbnRrKChNWUlPQ19zX0lORk9fRk1UCi0JCSJkdiAleCB3aWR0aCAleCBmYWN0b3IgJXggc2FmX3RlICV4IG1wdF9wcV9maWx0ZXIgJXhcbiIsCi0JCWlvYy0+bmFtZSwKLQkJbXB0X2R2LAotCQltcHRfd2lkdGgsCi0JCW1wdF9mYWN0b3IsCi0JCW1wdF9zYWZfdGUsCi0JCW1wdF9wcV9maWx0ZXIpKTsKLSNlbHNlCiAJaGQtPm5lZ29OdnJhbSA9IE1QVF9TQ1NJQ0ZHX1VTRV9OVlJBTTsKIAlkZHZwcmludGsoKE1ZSU9DX3NfSU5GT19GTVQKIAkJInNhZl90ZSAleCBtcHRfcHFfZmlsdGVyICV4XG4iLAogCQlpb2MtPm5hbWUsCiAJCW1wdF9zYWZfdGUsCiAJCW1wdF9wcV9maWx0ZXIpKTsKLSNlbmRpZgotCi0JaW9jLT5zcGlfZGF0YS5mb3JjZUR2ID0gMDsKIAlpb2MtPnNwaV9kYXRhLm5vUWFzID0gMDsKIAotCWZvciAoaWk9MDsgaWkgPCBNUFRfTUFYX1NDU0lfREVWSUNFUzsgaWkrKykKLQkJaW9jLT5zcGlfZGF0YS5kdlN0YXR1c1tpaV0gPQotCQkgIE1QVF9TQ1NJQ0ZHX05FR09USUFURTsKLQotCWZvciAoaWk9MDsgaWkgPCBNUFRfTUFYX1NDU0lfREVWSUNFUzsgaWkrKykKLQkJaW9jLT5zcGlfZGF0YS5kdlN0YXR1c1tpaV0gfD0KLQkJICBNUFRfU0NTSUNGR19EVl9OT1RfRE9ORTsKLQogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhkLT5zY2FuZHZfd2FpdHEpOwogCWhkLT5zY2FuZHZfd2FpdF9kb25lID0gMDsKIAloZC0+bGFzdF9xdWV1ZV9mdWxsID0gMDsKIAorCS8qIFNvbWUgdmVyc2lvbnMgb2YgdGhlIGZpcm13YXJlIGRvbid0IHN1cHBvcnQgcGFnZSAwOyB3aXRob3V0CisJICogdGhhdCB3ZSBjYW4ndCBnZXQgdGhlIHBhcmFtZXRlcnMgKi8KKwlpZiAoaGQtPmlvYy0+c3BpX2RhdGEuc2RwMGxlbmd0aCAhPSAwKQorCQlzaC0+dHJhbnNwb3J0dCA9IG1wdHNwaV90cmFuc3BvcnRfdGVtcGxhdGU7CisKIAllcnJvciA9IHNjc2lfYWRkX2hvc3QgKHNoLCAmaW9jLT5wY2lkZXYtPmRldik7CiAJaWYoZXJyb3IpIHsKIAkJZHByaW50aygoS0VSTl9FUlIgTVlOQU0KQEAgLTQyMywxNSArMTA0NiwxOCBAQAogc3RhdGljIGludCBfX2luaXQKIG1wdHNwaV9pbml0KHZvaWQpCiB7Ci0KIAlzaG93X21wdG1vZF92ZXIobXlfTkFNRSwgbXlfVkVSU0lPTik7CiAKKwltcHRzcGlfdHJhbnNwb3J0X3RlbXBsYXRlID0gc3BpX2F0dGFjaF90cmFuc3BvcnQoJm1wdHNwaV90cmFuc3BvcnRfZnVuY3Rpb25zKTsKKwlpZiAoIW1wdHNwaV90cmFuc3BvcnRfdGVtcGxhdGUpCisJCXJldHVybiAtRU5PREVWOworCiAJbXB0c3BpRG9uZUN0eCA9IG1wdF9yZWdpc3RlcihtcHRzY3NpaF9pb19kb25lLCBNUFRTUElfRFJJVkVSKTsKIAltcHRzcGlUYXNrQ3R4ID0gbXB0X3JlZ2lzdGVyKG1wdHNjc2loX3Rhc2ttZ210X2NvbXBsZXRlLCBNUFRTUElfRFJJVkVSKTsKIAltcHRzcGlJbnRlcm5hbEN0eCA9IG1wdF9yZWdpc3RlcihtcHRzY3NpaF9zY2FuZHZfY29tcGxldGUsIE1QVFNQSV9EUklWRVIpOwogCi0JaWYgKG1wdF9ldmVudF9yZWdpc3RlcihtcHRzcGlEb25lQ3R4LCBtcHRzY3NpaF9ldmVudF9wcm9jZXNzKSA9PSAwKSB7Ci0JCWRldnRwcmludGsoKEtFUk5fSU5GTyBNWU5BTQorCWlmIChtcHRfZXZlbnRfcmVnaXN0ZXIobXB0c3BpRG9uZUN0eCwgbXB0c3BpX2V2ZW50X3Byb2Nlc3MpID09IDApIHsKKwkJZGV2dHZlcmJvc2VwcmludGsoKEtFUk5fSU5GTyBNWU5BTQogCQkgICI6IFJlZ2lzdGVyZWQgZm9yIElPQyBldmVudCBub3RpZmljYXRpb25zXG4iKSk7CiAJfQogCkBAIC00NjUsNiArMTA5MSw3IEBACiAJbXB0X2RlcmVnaXN0ZXIobXB0c3BpSW50ZXJuYWxDdHgpOwogCW1wdF9kZXJlZ2lzdGVyKG1wdHNwaVRhc2tDdHgpOwogCW1wdF9kZXJlZ2lzdGVyKG1wdHNwaURvbmVDdHgpOworCXNwaV9yZWxlYXNlX3RyYW5zcG9ydChtcHRzcGlfdHJhbnNwb3J0X3RlbXBsYXRlKTsKIH0KIAogbW9kdWxlX2luaXQobXB0c3BpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9kZWJ1Zy5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9kZWJ1Zy5jCmluZGV4IDQwZDRlYTguLjVhNmNjYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZGVidWcuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2RlYnVnLmMKQEAgLTQxOSw1OCArNDE5LDUzIEBACiAJCWQgPSAodTggKikgKHJvd3MgKyAyKTsKIAkJc3RhdGUgPSBwWzFdIDw8IDggfCBwWzBdOwogCi0JCXByaW50ayhLRVJOX0RFQlVHICJUSUQgJTA0WDpbIiwgc3RhdGUgJiAweEZGRik7CisJCXByaW50aygiVElEICUwNFg6WyIsIHN0YXRlICYgMHhGRkYpOwogCQlzdGF0ZSA+Pj0gMTI7CiAJCWlmIChzdGF0ZSAmICgxIDw8IDApKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkgiKTsJLyogSGlkZGVuICovCisJCQlwcmludGsoIkgiKTsJLyogSGlkZGVuICovCiAJCWlmIChzdGF0ZSAmICgxIDw8IDIpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiUCIpOwkvKiBQcmVzZW50ICovCisJCQlwcmludGsoIlAiKTsJLyogUHJlc2VudCAqLwogCQkJaWYgKHN0YXRlICYgKDEgPDwgMSkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIkMiKTsJLyogQ29udHJvbGxlZCAqLworCQkJCXByaW50aygiQyIpOwkvKiBDb250cm9sbGVkICovCiAJCX0KIAkJaWYgKHN0YXRlID4gOSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIqIik7CS8qIEhhcmQgKi8KKwkJCXByaW50aygiKiIpOwkvKiBIYXJkICovCiAKLQkJcHJpbnRrKEtFUk5fREVCVUcgIl06Iik7CisJCXByaW50aygiXToiKTsKIAogCQlzd2l0Y2ggKHBbM10gJiAweEZGRkYpIHsKIAkJY2FzZSAwOgogCQkJLyogQWRhcHRlciBwcml2YXRlIGJ1cyAtIGVhc3kgKi8KLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgICAgIkxvY2FsIGJ1cyAlZDogSS9PIGF0IDB4JTA0WCBNZW0gMHglMDhYIiwgcFsyXSwKKwkJCXByaW50aygiTG9jYWwgYnVzICVkOiBJL08gYXQgMHglMDRYIE1lbSAweCUwOFgiLCBwWzJdLAogCQkJICAgICAgIGRbMV0gPDwgOCB8IGRbMF0sICoodTMyICopIChkICsgNCkpOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKIAkJCS8qIElTQSBidXMgKi8KLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgICAgIklTQSAlZDogQ1NOICVkIEkvTyBhdCAweCUwNFggTWVtIDB4JTA4WCIsIHBbMl0sCisJCQlwcmludGsoIklTQSAlZDogQ1NOICVkIEkvTyBhdCAweCUwNFggTWVtIDB4JTA4WCIsIHBbMl0sCiAJCQkgICAgICAgZFsyXSwgZFsxXSA8PCA4IHwgZFswXSwgKih1MzIgKikgKGQgKyA0KSk7CiAJCQlicmVhazsKIAogCQljYXNlIDI6CS8qIEVJU0EgYnVzICovCi0JCQlwcmludGsoS0VSTl9ERUJVRwotCQkJICAgICAgICJFSVNBICVkOiBTbG90ICVkIEkvTyBhdCAweCUwNFggTWVtIDB4JTA4WCIsCisJCQlwcmludGsoIkVJU0EgJWQ6IFNsb3QgJWQgSS9PIGF0IDB4JTA0WCBNZW0gMHglMDhYIiwKIAkJCSAgICAgICBwWzJdLCBkWzNdLCBkWzFdIDw8IDggfCBkWzBdLCAqKHUzMiAqKSAoZCArIDQpKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgMzoJLyogTUNBIGJ1cyAqLwotCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCSAgICAgICAiTUNBICVkOiBTbG90ICVkIEkvTyBhdCAweCUwNFggTWVtIDB4JTA4WCIsIHBbMl0sCisJCQlwcmludGsoIk1DQSAlZDogU2xvdCAlZCBJL08gYXQgMHglMDRYIE1lbSAweCUwOFgiLCBwWzJdLAogCQkJICAgICAgIGRbM10sIGRbMV0gPDwgOCB8IGRbMF0sICoodTMyICopIChkICsgNCkpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSA0OgkvKiBQQ0kgYnVzICovCi0JCQlwcmludGsoS0VSTl9ERUJVRwotCQkJICAgICAgICJQQ0kgJWQ6IEJ1cyAlZCBEZXZpY2UgJWQgRnVuY3Rpb24gJWQiLCBwWzJdLAorCQkJcHJpbnRrKCJQQ0kgJWQ6IEJ1cyAlZCBEZXZpY2UgJWQgRnVuY3Rpb24gJWQiLCBwWzJdLAogCQkJICAgICAgIGRbMl0sIGRbMV0sIGRbMF0pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDgwOgkvKiBPdGhlciAqLwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlVuc3VwcG9ydGVkIGJ1cyB0eXBlLiIpOworCQkJcHJpbnRrKCJVbnN1cHBvcnRlZCBidXMgdHlwZS4iKTsKIAkJCWJyZWFrOwogCQl9Ci0JCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOworCQlwcmludGsoIlxuIik7CiAJCXJvd3MgKz0gbGVuZ3RoOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYwppbmRleCA5YmI5ODU5Li41ZWExMzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCkBAIC01Nyw2ICs1NywxMyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogbm9kZSBpbiBnbG9iYWwgd2FpdCBsaXN0ICovCiB9OwogCisvKiBXb3JrIHN0cnVjdCBuZWVkZWQgdG8gaGFuZGxlIExDVCBOT1RJRlkgcmVwbGllcyAqLworc3RydWN0IGkyb19leGVjX2xjdF9ub3RpZnlfd29yayB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CS8qIHdvcmsgc3RydWN0ICovCisJc3RydWN0IGkyb19jb250cm9sbGVyICpjOwkvKiBjb250cm9sbGVyIG9uIHdoaWNoIHRoZSBMQ1QgTk9USUZZCisJCQkJCSAgIHdhcyByZWNlaXZlZCAqLworfTsKKwogLyogRXhlYyBPU00gY2xhc3MgaGFuZGxpbmcgZGVmaW5pdGlvbiAqLwogc3RhdGljIHN0cnVjdCBpMm9fY2xhc3NfaWQgaTJvX2V4ZWNfY2xhc3NfaWRbXSA9IHsKIAl7STJPX0NMQVNTX0VYRUNVVElWRX0sCkBAIC0zNTUsOSArMzYyLDEyIEBACiAgKgluZXcgTENUIGFuZCBpZiB0aGUgYnVmZmVyIGZvciB0aGUgTENUIHdhcyB0byBzbWFsbCBzZW5kcyBhIExDVCBOT1RJRlkKICAqCWFnYWluLCBvdGhlcndpc2Ugc2VuZCBMQ1QgTk9USUZZIHRvIGdldCBpbmZvcm1lZCBvbiBuZXh0IExDVCBjaGFuZ2UuCiAgKi8KLXN0YXRpYyB2b2lkIGkyb19leGVjX2xjdF9tb2RpZmllZChzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmMpCitzdGF0aWMgdm9pZCBpMm9fZXhlY19sY3RfbW9kaWZpZWQoc3RydWN0IGkyb19leGVjX2xjdF9ub3RpZnlfd29yayAqd29yaykKIHsKIAl1MzIgY2hhbmdlX2luZCA9IDA7CisJc3RydWN0IGkyb19jb250cm9sbGVyICpjID0gd29yay0+YzsKKworCWtmcmVlKHdvcmspOwogCiAJaWYgKGkyb19kZXZpY2VfcGFyc2VfbGN0KGMpICE9IC1FQUdBSU4pCiAJCWNoYW5nZV9pbmQgPSBjLT5sY3QtPmNoYW5nZV9pbmQgKyAxOwpAQCAtNDEwLDcgKzQyMCw3IEBACiAJCXJldHVybiBpMm9fbXNnX3Bvc3Rfd2FpdF9jb21wbGV0ZShjLCBtLCBtc2csIGNvbnRleHQpOwogCiAJaWYgKChsZTMyX3RvX2NwdShtc2ctPnUuaGVhZFsxXSkgPj4gMjQpID09IEkyT19DTURfTENUX05PVElGWSkgewotCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcms7CisJCXN0cnVjdCBpMm9fZXhlY19sY3Rfbm90aWZ5X3dvcmsgKndvcms7CiAKIAkJcHJfZGVidWcoIiVzOiBMQ1Qgbm90aWZ5IHJlY2VpdmVkXG4iLCBjLT5uYW1lKTsKIApAQCAtNDE4LDggKzQyOCwxMSBAQAogCQlpZiAoIXdvcmspCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlJTklUX1dPUksod29yaywgKHZvaWQgKCopKHZvaWQgKikpaTJvX2V4ZWNfbGN0X21vZGlmaWVkLCBjKTsKLQkJcXVldWVfd29yayhpMm9fZXhlY19kcml2ZXIuZXZlbnRfcXVldWUsIHdvcmspOworCQl3b3JrLT5jID0gYzsKKworCQlJTklUX1dPUksoJndvcmstPndvcmssICh2b2lkICgqKSh2b2lkICopKWkyb19leGVjX2xjdF9tb2RpZmllZCwKKwkJCSAgd29yayk7CisJCXF1ZXVlX3dvcmsoaTJvX2V4ZWNfZHJpdmVyLmV2ZW50X3F1ZXVlLCAmd29yay0+d29yayk7CiAJCXJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggNTUwZjI5Ny4uZmMzYzg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC0zLDYgKzMsNyBAQAogIwogCiBtZW51ICJNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMiCisJZGVwZW5kcyBvbiBBUkNIX1NBMTEwMAogCiBjb25maWcgTUNQCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmggYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbS5oCmluZGV4IDFjZWYyMzguLjZhYmE0MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmgKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc20uaApAQCAtMTAxLDE1ICsxMDEsMTYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21tYW5kX3B1dChzdHJ1Y3QgY29tbWFuZCAqY21kKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3BpbmxvY2tfdCAqbG9jayA9IGNtZC0+bG9jazsKIAotCXNwaW5fbG9ja19pcnFzYXZlKGNtZC0+bG9jaywgZmxhZ3MpOwotICAgICAgICBrb2JqZWN0X3B1dCgmY21kLT5rb2JqKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNtZC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKKwlrb2JqZWN0X3B1dCgmY21kLT5rb2JqKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbW1hbmRfZ2V0KHN0cnVjdCBjb21tYW5kICpjbWQpCiB7Ci0gICAgICAgIGtvYmplY3RfZ2V0KCZjbWQtPmtvYmopOworCWtvYmplY3RfZ2V0KCZjbWQtPmtvYmopOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL0tjb25maWcgYi9kcml2ZXJzL21tYy9LY29uZmlnCmluZGV4IDVkMzk3YjcuLjNmNWQ3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvS2NvbmZpZwpAQCAtNDksNiArNDksMTcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE1NQ19TREhDSQorCXRyaXN0YXRlICJTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIHN1cHBvcnQgIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gUENJICYmIE1NQyAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGlzIHNlbGVjdCB0aGUgZ2VuZXJpYyBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlLgorCSAgSXQgaXMgdXNlZCBieSBtYW51ZmFjdHVyZXJzIHN1Y2ggYXMgVGV4YXMgSW5zdHJ1bWVudHMoUiksIFJpY29oKFIpCisJICBhbmQgVG9zaGliYShSKS4gTW9zdCBjb250cm9sbGVycyBmb3VuZCBpbiBsYXB0b3BzIGFyZSBvZiB0aGlzIHR5cGUuCisJICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX1dCU0QKIAl0cmlzdGF0ZSAiV2luYm9uZCBXODNMNTF4RCBTRC9NTUMgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1NQyAmJiBJU0FfRE1BX0FQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9NYWtlZmlsZQppbmRleCBlMzUxZTcxLi43NjlkNTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9NYWtlZmlsZQpAQCAtMTcsNiArMTcsNyBAQAogIwogb2JqLSQoQ09ORklHX01NQ19BUk1NTUNJKQkrPSBtbWNpLm8KIG9iai0kKENPTkZJR19NTUNfUFhBKQkJKz0gcHhhbWNpLm8KK29iai0kKENPTkZJR19NTUNfU0RIQ0kpCQkrPSBzZGhjaS5vCiBvYmotJChDT05GSUdfTU1DX1dCU0QpCQkrPSB3YnNkLm8KIG9iai0kKENPTkZJR19NTUNfQVUxWCkJCSs9IGF1MXhtbWMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9hdTF4bW1jLmMgYi9kcml2ZXJzL21tYy9hdTF4bW1jLmMKaW5kZXggMjI3YzM5YS4uODVlODljNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvYXUxeG1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2F1MXhtbWMuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC04Nyw3ICs4Nyw3IEBACiBzdGF0aWMgaW50IGRtYSA9IDE7CiAKICNpZmRlZiBNT0RVTEUKLU1PRFVMRV9QQVJNKGRtYSwgImkiKTsKK21vZHVsZV9wYXJhbShkbWEsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkbWEsICJVc2UgRE1BIGVuZ2luZSBmb3IgZGF0YSB0cmFuc2ZlcnMgKDAgPSBkaXNhYmxlZCkiKTsKICNlbmRpZgogCkBAIC0xOTQsNyArMTk0LDcgQEAKIAogCXUzMiBtbWNjbWQgPSAoY21kLT5vcGNvZGUgPDwgU0RfQ01EX0NJX1NISUZUKTsKIAotCXN3aXRjaCAobW1jX3JzcF90eXBlKGNtZC0+ZmxhZ3MpKSB7CisJc3dpdGNoIChtbWNfcmVzcF90eXBlKGNtZCkpIHsKIAljYXNlIE1NQ19SU1BfUjE6CiAJCW1tY2NtZCB8PSBTRF9DTURfUlRfMTsKIAkJYnJlYWs7CkBAIC03NDAsNyArNzQwLDYgQEAKIHN0YXRpYyB2b2lkIGF1MXhtbWNfZG1hX2NhbGxiYWNrKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGF1MXhtbWNfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgYXUxeG1tY19ob3N0ICopIGRldl9pZDsKLQl1MzIgc3RhdHVzOwogCiAJLyogQXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0cyAqLwogCkBAIC04ODcsNyArODg2LDcgQEAKIAkuc2V0X2lvcwk9IGF1MXhtbWNfc2V0X2lvcywKIH07CiAKLXN0YXRpYyBpbnQgYXUxeG1tY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdTF4bW1jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAKIAlpbnQgaSwgcmV0ID0gMDsKQEAgLTkwNCw3ICs5MDMsNyBAQAogCWRpc2FibGVfaXJxKEFVMTEwMF9TRF9JUlEpOwogCiAJZm9yKGkgPSAwOyBpIDwgQVUxWE1NQ19DT05UUk9MTEVSX0NPVU5UOyBpKyspIHsKLQkJc3RydWN0IG1tY19ob3N0ICptbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IGF1MXhtbWNfaG9zdCksIGRldik7CisJCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBhdTF4bW1jX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAkJc3RydWN0IGF1MXhtbWNfaG9zdCAqaG9zdCA9IDA7CiAKIAkJaWYgKCFtbWMpIHsKQEAgLTk2Nyw3ICs5NjYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF1MXhtbWNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGF1MXhtbWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAKIAlpbnQgaTsKQEAgLTk5NywyMyArOTk2LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTF4bW1jX2RyaXZlciA9IHsKLQkubmFtZSAgICAgICAgICA9IERSSVZFUl9OQU1FLAotCS5idXMgICAgICAgICAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxeG1tY19kcml2ZXIgPSB7CiAJLnByb2JlICAgICAgICAgPSBhdTF4bW1jX3Byb2JlLAogCS5yZW1vdmUgICAgICAgID0gYXUxeG1tY19yZW1vdmUsCiAJLnN1c3BlbmQgICAgICAgPSBOVUxMLAotCS5yZXN1bWUgICAgICAgID0gTlVMTAorCS5yZXN1bWUgICAgICAgID0gTlVMTCwKKwkuZHJpdmVyICAgICAgICA9IHsKKwkJLm5hbWUgID0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF1MXhtbWNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmF1MXhtbWNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTF4bW1jX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4bW1jX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxeG1tY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTF4bW1jX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MXhtbWNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9weGFtY2kuYyBiL2RyaXZlcnMvbW1jL3B4YW1jaS5jCmluZGV4IDI4NWQ3ZDAuLmMzMmZhZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3B4YW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL3B4YW1jaS5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKCFyIHx8IGlycSA9PSBOT19JUlEpCisJaWYgKCFyIHx8IGlycSA8IDApCiAJCXJldHVybiAtRU5YSU87CiAKIAlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCBTWl80SywgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL3NkaGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4MTFkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL3NkaGNpLmMKQEAgLTAsMCArMSwxMjY1IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbW1jL3NkaGNpLmMgLSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBQaWVycmUgT3NzbWFuLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworIC8qCisgICogTm90ZSB0aGF0IFBJTyB0cmFuc2ZlciBpcyByYXRoZXIgY3JhcHB5IGF0bS4gVGhlIGJ1ZmZlciBmdWxsL2VtcHR5CisgICogaW50ZXJydXB0cyBhcmVuJ3QgcmVsaWFibGUgc28gd2UgY3VycmVudGx5IHRyYW5zZmVyIHRoZSBlbnRpcmUgYnVmZmVyCisgICogZGlyZWN0bHkuIFBhdGNoZXMgdG8gc29sdmUgdGhlIHByb2JsZW0gYXJlIHdlbGNvbWUuCisgICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvcHJvdG9jb2wuaD4KKworI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCisjaW5jbHVkZSAic2RoY2kuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAic2RoY2kiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjExIgorCisjZGVmaW5lIEJVR01BSUwgIjxzZGhjaS1kZXZlbEBsaXN0LmRyemV1cy5jeD4iCisKKyNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCisjZGVmaW5lIERCRyhmLCB4Li4uKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIiBbJXMoKV06ICIgZiwgX19mdW5jX18sIyMgeCkKKyNlbHNlCisjZGVmaW5lIERCRyhmLCB4Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCS8qIGhhbmRsZSBhbnkgU0QgaG9zdCBjb250cm9sbGVyICovCisJe1BDSV9ERVZJQ0VfQ0xBU1MoKFBDSV9DTEFTU19TWVNURU1fU0RIQ0kgPDwgOCksIDB4RkZGRjAwKX0sCisJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lfaWRzKTsKKworc3RhdGljIHZvaWQgc2RoY2lfcHJlcGFyZV9kYXRhKHN0cnVjdCBzZGhjaV9ob3N0ICosIHN0cnVjdCBtbWNfZGF0YSAqKTsKK3N0YXRpYyB2b2lkIHNkaGNpX2ZpbmlzaF9kYXRhKHN0cnVjdCBzZGhjaV9ob3N0ICopOworCitzdGF0aWMgdm9pZCBzZGhjaV9zZW5kX2NvbW1hbmQoc3RydWN0IHNkaGNpX2hvc3QgKiwgc3RydWN0IG1tY19jb21tYW5kICopOworc3RhdGljIHZvaWQgc2RoY2lfZmluaXNoX2NvbW1hbmQoc3RydWN0IHNkaGNpX2hvc3QgKik7CisKK3N0YXRpYyB2b2lkIHNkaGNpX2R1bXByZWdzKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ID09PT09PT09PT09PT09IFJFR0lTVEVSIERVTVAgPT09PT09PT09PT09PT1cbiIpOworCisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogU3lzIGFkZHI6IDB4JTA4eCB8IFZlcnNpb246ICAweCUwOHhcbiIsCisJCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0RNQV9BRERSRVNTKSwKKwkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9WRVJTSU9OKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQmxrIHNpemU6IDB4JTA4eCB8IEJsayBjbnQ6ICAweCUwOHhcbiIsCisJCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0JMT0NLX1NJWkUpLAorCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19DT1VOVCkpOworCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IEFyZ3VtZW50OiAweCUwOHggfCBUcm4gbW9kZTogMHglMDh4XG4iLAorCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9BUkdVTUVOVCksCisJCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX1RSQU5TRkVSX01PREUpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBQcmVzZW50OiAgMHglMDh4IHwgSG9zdCBjdGw6IDB4JTA4eFxuIiwKKwkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSksCisJCXJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCkpOworCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IFBvd2VyOiAgICAweCUwOHggfCBCbGsgZ2FwOiAgMHglMDh4XG4iLAorCQlyZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKSwKKwkJcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQkxPQ0tfR0FQX0NPTlRST0wpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBXYWtlLXVwOiAgMHglMDh4IHwgQ2xvY2s6ICAgIDB4JTA4eFxuIiwKKwkJcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfV0FMS19VUF9DT05UUk9MKSwKKwkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCkpOworCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IFRpbWVvdXQ6ICAweCUwOHggfCBJbnQgc3RhdDogMHglMDh4XG4iLAorCQlyZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9USU1FT1VUX0NPTlRST0wpLAorCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogSW50IGVuYWI6IDB4JTA4eCB8IFNpZyBlbmFiOiAweCUwOHhcbiIsCisJCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9FTkFCTEUpLAorCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9TSUdOQUxfRU5BQkxFKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQUMxMiBlcnI6IDB4JTA4eCB8IFNsb3QgaW50OiAweCUwOHhcbiIsCisJCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0FDTUQxMl9FUlIpLAorCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9TTE9UX0lOVF9TVEFUVVMpKTsKKwlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBDYXBzOiAgICAgMHglMDh4IHwgTWF4IGN1cnI6IDB4JTA4eFxuIiwKKwkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0FQQUJJTElUSUVTKSwKKwkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfTUFYX0NVUlJFTlQpKTsKKworCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIExvdyBsZXZlbCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHNkaGNpX3Jlc2V0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCBtYXNrKQoreworCXdyaXRlYihtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9TT0ZUV0FSRV9SRVNFVCk7CisKKwlpZiAobWFzayAmIFNESENJX1JFU0VUX0FMTCkgeworCQlob3N0LT5jbG9jayA9IDA7CisKKwkJbWRlbGF5KDUwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX2luaXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJdTMyIGludG1hc2s7CisKKwlzZGhjaV9yZXNldChob3N0LCBTREhDSV9SRVNFVF9BTEwpOworCisJaW50bWFzayA9IH4oU0RIQ0lfSU5UX0NBUkRfSU5UIHwgU0RIQ0lfSU5UX0JVRl9FTVBUWSB8IFNESENJX0lOVF9CVUZfRlVMTCk7CisKKwl3cml0ZWwoaW50bWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7CisJd3JpdGVsKGludG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOworCisJLyogVGhpcyBpcyB1bmtub3duIG1hZ2ljLiAqLworCXdyaXRlYigweEUsIGhvc3QtPmlvYWRkciArIFNESENJX1RJTUVPVVRfQ09OVFJPTCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX2FjdGl2YXRlX2xlZChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwl1OCBjdHJsOworCisJY3RybCA9IHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJY3RybCB8PSBTREhDSV9DVFJMX0xFRDsKKwl3cml0ZWIoY3RybCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfZGVhY3RpdmF0ZV9sZWQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJdTggY3RybDsKKworCWN0cmwgPSByZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCWN0cmwgJj0gflNESENJX0NUUkxfTEVEOworCXdyaXRlYihjdHJsLCBob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcmUgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgY2hhciogc2RoY2lfa21hcF9zZyhzdHJ1Y3Qgc2RoY2lfaG9zdCogaG9zdCkKK3sKKwlob3N0LT5tYXBwZWRfc2cgPSBrbWFwX2F0b21pYyhob3N0LT5jdXJfc2ctPnBhZ2UsIEtNX0JJT19TUkNfSVJRKTsKKwlyZXR1cm4gaG9zdC0+bWFwcGVkX3NnICsgaG9zdC0+Y3VyX3NnLT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZGhjaV9rdW5tYXBfc2coc3RydWN0IHNkaGNpX2hvc3QqIGhvc3QpCit7CisJa3VubWFwX2F0b21pYyhob3N0LT5tYXBwZWRfc2csIEtNX0JJT19TUkNfSVJRKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2RoY2lfbmV4dF9zZyhzdHJ1Y3Qgc2RoY2lfaG9zdCogaG9zdCkKK3sKKwkvKgorCSAqIFNraXAgdG8gbmV4dCBTRyBlbnRyeS4KKwkgKi8KKwlob3N0LT5jdXJfc2crKzsKKwlob3N0LT5udW1fc2ctLTsKKworCS8qCisJICogQW55IGVudHJpZXMgbGVmdD8KKwkgKi8KKwlpZiAoaG9zdC0+bnVtX3NnID4gMCkgeworCQlob3N0LT5vZmZzZXQgPSAwOworCQlob3N0LT5yZW1haW4gPSBob3N0LT5jdXJfc2ctPmxlbmd0aDsKKwl9CisKKwlyZXR1cm4gaG9zdC0+bnVtX3NnOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV90cmFuc2Zlcl9waW8oc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJY2hhciAqYnVmZmVyOworCXUzMiBtYXNrOworCWludCBieXRlcywgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG1heF9qaWZmaWVzOworCisJQlVHX09OKCFob3N0LT5kYXRhKTsKKworCWlmIChob3N0LT5udW1fc2cgPT0gMCkKKwkJcmV0dXJuOworCisJYnl0ZXMgPSAwOworCWlmIChob3N0LT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCW1hc2sgPSBTREhDSV9EQVRBX0FWQUlMQUJMRTsKKwllbHNlCisJCW1hc2sgPSBTREhDSV9TUEFDRV9BVkFJTEFCTEU7CisKKwlidWZmZXIgPSBzZGhjaV9rbWFwX3NnKGhvc3QpICsgaG9zdC0+b2Zmc2V0OworCisJLyogVHJhbnNmZXIgc2hvdWxkbid0IHRha2UgbW9yZSB0aGFuIDUgcyAqLworCW1heF9qaWZmaWVzID0gamlmZmllcyArIEhaICogNTsKKworCXdoaWxlIChob3N0LT5zaXplID4gMCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXhfamlmZmllcykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBJTyB0cmFuc2ZlciBzdGFsbGVkLiAiCisJCQkJIlBsZWFzZSByZXBvcnQgdGhpcyB0byAiCisJCQkJQlVHTUFJTCAiLlxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQkJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CisKKwkJCXNkaGNpX2t1bm1hcF9zZyhob3N0KTsKKworCQkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSBNTUNfRVJSX0ZBSUxFRDsKKwkJCXNkaGNpX2ZpbmlzaF9kYXRhKGhvc3QpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCEocmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJiBtYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCXNpemUgPSBtaW4oaG9zdC0+c2l6ZSwgaG9zdC0+cmVtYWluKTsKKworCQlpZiAoc2l6ZSA+PSA0KSB7CisJCQlpZiAoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQkJCSoodTMyKilidWZmZXIgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOworCQkJZWxzZQorCQkJCXdyaXRlbCgqKHUzMiopYnVmZmVyLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOworCQkJc2l6ZSA9IDQ7CisJCX0gZWxzZSBpZiAoc2l6ZSA+PSAyKSB7CisJCQlpZiAoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQkJCSoodTE2KilidWZmZXIgPSByZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOworCQkJZWxzZQorCQkJCXdyaXRldygqKHUxNiopYnVmZmVyLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CVUZGRVIpOworCQkJc2l6ZSA9IDI7CisJCX0gZWxzZSB7CisJCQlpZiAoaG9zdC0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQkJCSoodTgqKWJ1ZmZlciA9IHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0JVRkZFUik7CisJCQllbHNlCisJCQkJd3JpdGViKCoodTgqKWJ1ZmZlciwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQlVGRkVSKTsKKwkJCXNpemUgPSAxOworCQl9CisKKwkJYnVmZmVyICs9IHNpemU7CisJCWhvc3QtPm9mZnNldCArPSBzaXplOworCQlob3N0LT5yZW1haW4gLT0gc2l6ZTsKKworCQlieXRlcyArPSBzaXplOworCQlob3N0LT5zaXplIC09IHNpemU7CisKKwkJaWYgKGhvc3QtPnJlbWFpbiA9PSAwKSB7CisJCQlzZGhjaV9rdW5tYXBfc2coaG9zdCk7CisJCQlpZiAoc2RoY2lfbmV4dF9zZyhob3N0KSA9PSAwKSB7CisJCQkJREJHKCJQSU8gdHJhbnNmZXI6ICVkIGJ5dGVzXG4iLCBieXRlcyk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnVmZmVyID0gc2RoY2lfa21hcF9zZyhob3N0KTsKKwkJfQorCX0KKworCXNkaGNpX2t1bm1hcF9zZyhob3N0KTsKKworCURCRygiUElPIHRyYW5zZmVyOiAlZCBieXRlc1xuIiwgYnl0ZXMpOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV9wcmVwYXJlX2RhdGEoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKK3sKKwl1MTYgbW9kZTsKKworCVdBUk5fT04oaG9zdC0+ZGF0YSk7CisKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCXdyaXRldygwLCBob3N0LT5pb2FkZHIgKyBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwkJcmV0dXJuOworCX0KKworCURCRygiYmxrc3ogJTA0eCBibGtzICUwNHggZmxhZ3MgJTA4eFxuIiwKKwkJMSA8PCBkYXRhLT5ibGtzel9iaXRzLCBkYXRhLT5ibG9ja3MsIGRhdGEtPmZsYWdzKTsKKwlEQkcoInRzYWMgJWQgbXMgbnNhYyAlZCBjbGtcbiIsCisJCWRhdGEtPnRpbWVvdXRfbnMgLyAxMDAwMDAwLCBkYXRhLT50aW1lb3V0X2Nsa3MpOworCisJbW9kZSA9IFNESENJX1RSTlNfQkxLX0NOVF9FTjsKKwlpZiAoZGF0YS0+YmxvY2tzID4gMSkKKwkJbW9kZSB8PSBTREhDSV9UUk5TX01VTFRJOworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCisJCW1vZGUgfD0gU0RIQ0lfVFJOU19SRUFEOworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpCisJCW1vZGUgfD0gU0RIQ0lfVFJOU19ETUE7CisKKwl3cml0ZXcobW9kZSwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfVFJBTlNGRVJfTU9ERSk7CisKKwl3cml0ZXcoMSA8PCBkYXRhLT5ibGtzel9iaXRzLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19TSVpFKTsKKwl3cml0ZXcoZGF0YS0+YmxvY2tzLCBob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19DT1VOVCk7CisKKwlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfRE1BKSB7CisJCWludCBjb3VudDsKKworCQljb3VudCA9IHBjaV9tYXBfc2coaG9zdC0+Y2hpcC0+cGRldiwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwKKwkJCShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpP1BDSV9ETUFfRlJPTURFVklDRTpQQ0lfRE1BX1RPREVWSUNFKTsKKwkJQlVHX09OKGNvdW50ICE9IDEpOworCisJCXdyaXRlbChzZ19kbWFfYWRkcmVzcyhkYXRhLT5zZyksIGhvc3QtPmlvYWRkciArIFNESENJX0RNQV9BRERSRVNTKTsKKwl9IGVsc2UgeworCQlob3N0LT5zaXplID0gKDEgPDwgZGF0YS0+Ymxrc3pfYml0cykgKiBkYXRhLT5ibG9ja3M7CisKKwkJaG9zdC0+Y3VyX3NnID0gZGF0YS0+c2c7CisJCWhvc3QtPm51bV9zZyA9IGRhdGEtPnNnX2xlbjsKKworCQlob3N0LT5vZmZzZXQgPSAwOworCQlob3N0LT5yZW1haW4gPSBob3N0LT5jdXJfc2ctPmxlbmd0aDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX2ZpbmlzaF9kYXRhKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKKwl1MzIgaW50bWFzazsKKwl1MTYgYmxvY2tzOworCisJQlVHX09OKCFob3N0LT5kYXRhKTsKKworCWRhdGEgPSBob3N0LT5kYXRhOworCWhvc3QtPmRhdGEgPSBOVUxMOworCisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkgeworCQlwY2lfdW5tYXBfc2coaG9zdC0+Y2hpcC0+cGRldiwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwKKwkJCShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpP1BDSV9ETUFfRlJPTURFVklDRTpQQ0lfRE1BX1RPREVWSUNFKTsKKwl9IGVsc2UgeworCQlpbnRtYXNrID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfU0lHTkFMX0VOQUJMRSk7CisJCWludG1hc2sgJj0gfihTREhDSV9JTlRfQlVGX0VNUFRZIHwgU0RIQ0lfSU5UX0JVRl9GVUxMKTsKKwkJd3JpdGVsKGludG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOworCisJCWludG1hc2sgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfRU5BQkxFKTsKKwkJaW50bWFzayAmPSB+KFNESENJX0lOVF9CVUZfRU1QVFkgfCBTREhDSV9JTlRfQlVGX0ZVTEwpOworCQl3cml0ZWwoaW50bWFzaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX0VOQUJMRSk7CisJfQorCisJLyoKKwkgKiBDb250cm9sbGVyIGRvZXNuJ3QgY291bnQgZG93biB3aGVuIGluIHNpbmdsZSBibG9jayBtb2RlLgorCSAqLworCWlmICgoZGF0YS0+YmxvY2tzID09IDEpICYmIChkYXRhLT5lcnJvciA9PSBNTUNfRVJSX05PTkUpKQorCQlibG9ja3MgPSAwOworCWVsc2UKKwkJYmxvY2tzID0gcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQkxPQ0tfQ09VTlQpOworCWRhdGEtPmJ5dGVzX3hmZXJlZCA9ICgxIDw8IGRhdGEtPmJsa3N6X2JpdHMpICogKGRhdGEtPmJsb2NrcyAtIGJsb2Nrcyk7CisKKwlpZiAoKGRhdGEtPmVycm9yID09IE1NQ19FUlJfTk9ORSkgJiYgYmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbnRyb2xsZXIgc2lnbmFsbGVkIGNvbXBsZXRpb24gZXZlbiAiCisJCQkidGhvdWdoIHRoZXJlIHdlcmUgYmxvY2tzIGxlZnQuIFBsZWFzZSByZXBvcnQgdGhpcyAiCisJCQkidG8gIiBCVUdNQUlMICIuXG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCWRhdGEtPmVycm9yID0gTU1DX0VSUl9GQUlMRUQ7CisJfQorCisJaWYgKGhvc3QtPnNpemUgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlZCBieXRlcyB3ZXJlIGxlZnQgdW50cmFuc2ZlcnJlZC4gIgorCQkJIlBsZWFzZSByZXBvcnQgdGhpcyB0byAiIEJVR01BSUwgIi5cbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgaG9zdC0+c2l6ZSk7CisJCWRhdGEtPmVycm9yID0gTU1DX0VSUl9GQUlMRUQ7CisJfQorCisJREJHKCJFbmRpbmcgZGF0YSB0cmFuc2ZlciAoJWQgYnl0ZXMpXG4iLCBkYXRhLT5ieXRlc194ZmVyZWQpOworCisJaWYgKGRhdGEtPnN0b3ApIHsKKwkJLyoKKwkJICogVGhlIGNvbnRyb2xsZXIgbmVlZHMgYSByZXNldCBvZiBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lcworCQkgKiB1cG9uIGVycm9yIGNvbmRpdGlvbnMuCisJCSAqLworCQlpZiAoZGF0YS0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKSB7CisJCQlzZGhjaV9yZXNldChob3N0LCBTREhDSV9SRVNFVF9DTUQpOworCQkJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfREFUQSk7CisJCX0KKworCQlzZGhjaV9zZW5kX2NvbW1hbmQoaG9zdCwgZGF0YS0+c3RvcCk7CisJfSBlbHNlCisJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPmZpbmlzaF90YXNrbGV0KTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfc2VuZF9jb21tYW5kKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlpbnQgZmxhZ3M7CisJdTMyIHByZXNlbnQ7CisJdW5zaWduZWQgbG9uZyBtYXhfamlmZmllczsKKworCVdBUk5fT04oaG9zdC0+Y21kKTsKKworCURCRygiU2VuZGluZyBjbWQgKCV4KVxuIiwgY21kLT5vcGNvZGUpOworCisJLyogV2FpdCBtYXggMTAgbXMgKi8KKwltYXhfamlmZmllcyA9IGppZmZpZXMgKyAoSFogKyA5OSkvMTAwOworCWRvIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbWF4X2ppZmZpZXMpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb250cm9sbGVyIG5ldmVyIHJlbGVhc2VkICIKKwkJCQkiaW5oaWJpdCBiaXRzLiBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gIgorCQkJCUJVR01BSUwgIi5cbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJCXNkaGNpX2R1bXByZWdzKGhvc3QpOworCQkJY21kLT5lcnJvciA9IE1NQ19FUlJfRkFJTEVEOworCQkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOworCQkJcmV0dXJuOworCQl9CisJCXByZXNlbnQgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKTsKKwl9IHdoaWxlIChwcmVzZW50ICYgKFNESENJX0NNRF9JTkhJQklUIHwgU0RIQ0lfREFUQV9JTkhJQklUKSk7CisKKwltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgMTAgKiBIWik7CisKKwlob3N0LT5jbWQgPSBjbWQ7CisKKwlzZGhjaV9wcmVwYXJlX2RhdGEoaG9zdCwgY21kLT5kYXRhKTsKKworCXdyaXRlbChjbWQtPmFyZywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQVJHVU1FTlQpOworCisJaWYgKChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpICYmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbnN1cHBvcnRlZCByZXNwb25zZSB0eXBlISAiCisJCQkiUGxlYXNlIHJlcG9ydCB0aGlzIHRvICIgQlVHTUFJTCAiLlxuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJY21kLT5lcnJvciA9IE1NQ19FUlJfSU5WQUxJRDsKKwkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKCEoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkpCisJCWZsYWdzID0gU0RIQ0lfQ01EX1JFU1BfTk9ORTsKKwllbHNlIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpCisJCWZsYWdzID0gU0RIQ0lfQ01EX1JFU1BfTE9ORzsKKwllbHNlIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZKQorCQlmbGFncyA9IFNESENJX0NNRF9SRVNQX1NIT1JUX0JVU1k7CisJZWxzZQorCQlmbGFncyA9IFNESENJX0NNRF9SRVNQX1NIT1JUOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0NSQykKKwkJZmxhZ3MgfD0gU0RIQ0lfQ01EX0NSQzsKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfT1BDT0RFKQorCQlmbGFncyB8PSBTREhDSV9DTURfSU5ERVg7CisJaWYgKGNtZC0+ZGF0YSkKKwkJZmxhZ3MgfD0gU0RIQ0lfQ01EX0RBVEE7CisKKwl3cml0ZWwoU0RIQ0lfTUFLRV9DTUQoY21kLT5vcGNvZGUsIGZsYWdzKSwKKwkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ09NTUFORCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX2ZpbmlzaF9jb21tYW5kKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCWludCBpOworCisJQlVHX09OKGhvc3QtPmNtZCA9PSBOVUxMKTsKKworCWlmIChob3N0LT5jbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CisJCWlmIChob3N0LT5jbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKKwkJCS8qIENSQyBpcyBzdHJpcHBlZCBzbyB3ZSBuZWVkIHRvIGRvIHNvbWUgc2hpZnRpbmcuICovCisJCQlmb3IgKGkgPSAwO2kgPCA0O2krKykgeworCQkJCWhvc3QtPmNtZC0+cmVzcFtpXSA9IHJlYWRsKGhvc3QtPmlvYWRkciArCisJCQkJCVNESENJX1JFU1BPTlNFICsgKDMtaSkqNCkgPDwgODsKKwkJCQlpZiAoaSAhPSAzKQorCQkJCQlob3N0LT5jbWQtPnJlc3BbaV0gfD0KKwkJCQkJCXJlYWRiKGhvc3QtPmlvYWRkciArCisJCQkJCQlTREhDSV9SRVNQT05TRSArICgzLWkpKjQtMSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlob3N0LT5jbWQtPnJlc3BbMF0gPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9SRVNQT05TRSk7CisJCX0KKwl9CisKKwlob3N0LT5jbWQtPmVycm9yID0gTU1DX0VSUl9OT05FOworCisJREJHKCJFbmRpbmcgY21kICgleClcbiIsIGhvc3QtPmNtZC0+b3Bjb2RlKTsKKworCWlmIChob3N0LT5jbWQtPmRhdGEpIHsKKwkJdTMyIGludG1hc2s7CisKKwkJaG9zdC0+ZGF0YSA9IGhvc3QtPmNtZC0+ZGF0YTsKKworCQlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpKSB7CisJCQkvKgorCQkJICogRG9uJ3QgZW5hYmxlIHRoZSBpbnRlcnJ1cHRzIHVudGlsIG5vdyB0byBtYWtlIHN1cmUgd2UKKwkJCSAqIGdldCBzdGFibGUgaGFuZGxpbmcgb2YgdGhlIEZJRk8uCisJCQkgKi8KKwkJCWludG1hc2sgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfRU5BQkxFKTsKKwkJCWludG1hc2sgfD0gU0RIQ0lfSU5UX0JVRl9FTVBUWSB8IFNESENJX0lOVF9CVUZfRlVMTDsKKwkJCXdyaXRlbChpbnRtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfRU5BQkxFKTsKKworCQkJaW50bWFzayA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOworCQkJaW50bWFzayB8PSBTREhDSV9JTlRfQlVGX0VNUFRZIHwgU0RIQ0lfSU5UX0JVRl9GVUxMOworCQkJd3JpdGVsKGludG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX1NJR05BTF9FTkFCTEUpOworCisJCQkvKgorCQkJICogVGhlIGJ1ZmZlciBpbnRlcnJ1cHRzIGFyZSB0byB1bnJlbGlhYmxlIHNvIHdlCisJCQkgKiBzdGFydCB0aGUgdHJhbnNmZXIgaW1tZWRpYXRseS4KKwkJCSAqLworCQkJc2RoY2lfdHJhbnNmZXJfcGlvKGhvc3QpOworCQl9CisJfSBlbHNlCisJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPmZpbmlzaF90YXNrbGV0KTsKKworCWhvc3QtPmNtZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX3NldF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGNsb2NrKQoreworCWludCBkaXY7CisJdTE2IGNsazsKKwl1bnNpZ25lZCBsb25nIG1heF9qaWZmaWVzOworCisJaWYgKGNsb2NrID09IGhvc3QtPmNsb2NrKQorCQlyZXR1cm47CisKKwl3cml0ZXcoMCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CisKKwlpZiAoY2xvY2sgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGRpdiA9IDE7ZGl2IDwgMjU2O2RpdiAqPSAyKSB7CisJCWlmICgoaG9zdC0+bWF4X2NsayAvIGRpdikgPD0gY2xvY2spCisJCQlicmVhazsKKwl9CisJZGl2ID4+PSAxOworCisJY2xrID0gZGl2IDw8IFNESENJX0RJVklERVJfU0hJRlQ7CisJY2xrIHw9IFNESENJX0NMT0NLX0lOVF9FTjsKKwl3cml0ZXcoY2xrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9DTE9DS19DT05UUk9MKTsKKworCS8qIFdhaXQgbWF4IDEwIG1zICovCisJbWF4X2ppZmZpZXMgPSBqaWZmaWVzICsgKEhaICsgOTkpLzEwMDsKKwlkbyB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1heF9qaWZmaWVzKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW50ZXJuYWwgY2xvY2sgbmV2ZXIgc3RhYmlsaXNlZC4gIgorCQkJCSJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gIiBCVUdNQUlMICIuXG4iLAorCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJCXNkaGNpX2R1bXByZWdzKGhvc3QpOworCQkJcmV0dXJuOworCQl9CisJCWNsayA9IHJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0NMT0NLX0NPTlRST0wpOworCX0gd2hpbGUgKCEoY2xrICYgU0RIQ0lfQ0xPQ0tfSU5UX1NUQUJMRSkpOworCisJY2xrIHw9IFNESENJX0NMT0NLX0NBUkRfRU47CisJd3JpdGV3KGNsaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CisKK291dDoKKwlob3N0LT5jbG9jayA9IGNsb2NrOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIE1NQyBjYWxsYmFja3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHNkaGNpX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlXQVJOX09OKGhvc3QtPm1ycSAhPSBOVUxMKTsKKworCXNkaGNpX2FjdGl2YXRlX2xlZChob3N0KTsKKworCWhvc3QtPm1ycSA9IG1ycTsKKworCWlmICghKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpICYgU0RIQ0lfQ0FSRF9QUkVTRU5UKSkgeworCQlob3N0LT5tcnEtPmNtZC0+ZXJyb3IgPSBNTUNfRVJSX1RJTUVPVVQ7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPmZpbmlzaF90YXNrbGV0KTsKKwl9IGVsc2UKKwkJc2RoY2lfc2VuZF9jb21tYW5kKGhvc3QsIG1ycS0+Y21kKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGN0cmw7CisKKwlob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlEQkcoImNsb2NrICV1SHogYnVzbW9kZSAldSBwb3dlcm1vZGUgJXUgY3MgJXUgVmRkICV1IHdpZHRoICV1XG4iLAorCSAgICAgaW9zLT5jbG9jaywgaW9zLT5idXNfbW9kZSwgaW9zLT5wb3dlcl9tb2RlLCBpb3MtPmNoaXBfc2VsZWN0LAorCSAgICAgaW9zLT52ZGQsIGlvcy0+YnVzX3dpZHRoKTsKKworCS8qCisJICogUmVzZXQgdGhlIGNoaXAgb24gZWFjaCBwb3dlciBvZmYuCisJICogU2hvdWxkIGNsZWFyIG91dCBhbnkgd2VpcmQgc3RhdGVzLgorCSAqLworCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikgeworCQl3cml0ZWwoMCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfU0lHTkFMX0VOQUJMRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJc2RoY2lfaW5pdChob3N0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlzZGhjaV9zZXRfY2xvY2soaG9zdCwgaW9zLT5jbG9jayk7CisKKwlpZiAoaW9zLT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpCisJCXdyaXRlYigwLCBob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKwllbHNlCisJCXdyaXRlYigweEZGLCBob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKworCWN0cmwgPSByZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCisJCWN0cmwgfD0gU0RIQ0lfQ1RSTF80QklUQlVTOworCWVsc2UKKwkJY3RybCAmPSB+U0RIQ0lfQ1RSTF80QklUQlVTOworCXdyaXRlYihjdHJsLCBob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNkaGNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwcmVzZW50OworCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJcHJlc2VudCA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuICEocHJlc2VudCAmIFNESENJX1dSSVRFX1BST1RFQ1QpOworfQorCitzdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyBzZGhjaV9vcHMgPSB7CisJLnJlcXVlc3QJPSBzZGhjaV9yZXF1ZXN0LAorCS5zZXRfaW9zCT0gc2RoY2lfc2V0X2lvcywKKwkuZ2V0X3JvCQk9IHNkaGNpX2dldF9ybywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGFza2xldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc2RoY2lfdGFza2xldF9jYXJkKHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWhvc3QgPSAoc3RydWN0IHNkaGNpX2hvc3QqKXBhcmFtOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWlmICghKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpICYgU0RIQ0lfQ0FSRF9QUkVTRU5UKSkgeworCQlpZiAoaG9zdC0+bXJxKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYXJkIHJlbW92ZWQgZHVyaW5nIHRyYW5zZmVyIVxuIiwKKwkJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSZXNldHRpbmcgY29udHJvbGxlci5cbiIsCisJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCisJCQlzZGhjaV9yZXNldChob3N0LCBTREhDSV9SRVNFVF9DTUQpOworCQkJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfREFUQSk7CisKKwkJCWhvc3QtPm1ycS0+Y21kLT5lcnJvciA9IE1NQ19FUlJfRkFJTEVEOworCQkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV90YXNrbGV0X2ZpbmlzaCh1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7CisKKwlob3N0ID0gKHN0cnVjdCBzZGhjaV9ob3N0KilwYXJhbTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwlkZWxfdGltZXIoJmhvc3QtPnRpbWVyKTsKKworCW1ycSA9IGhvc3QtPm1ycTsKKworCURCRygiRW5kaW5nIHJlcXVlc3QsIGNtZCAoJXgpXG4iLCBtcnEtPmNtZC0+b3Bjb2RlKTsKKworCS8qCisJICogVGhlIGNvbnRyb2xsZXIgbmVlZHMgYSByZXNldCBvZiBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lcworCSAqIHVwb24gZXJyb3IgY29uZGl0aW9ucy4KKwkgKi8KKwlpZiAoKG1ycS0+Y21kLT5lcnJvciAhPSBNTUNfRVJSX05PTkUpIHx8CisJCShtcnEtPmRhdGEgJiYgKChtcnEtPmRhdGEtPmVycm9yICE9IE1NQ19FUlJfTk9ORSkgfHwKKwkJKG1ycS0+ZGF0YS0+c3RvcCAmJiAobXJxLT5kYXRhLT5zdG9wLT5lcnJvciAhPSBNTUNfRVJSX05PTkUpKSkpKSB7CisJCXNkaGNpX3Jlc2V0KGhvc3QsIFNESENJX1JFU0VUX0NNRCk7CisJCXNkaGNpX3Jlc2V0KGhvc3QsIFNESENJX1JFU0VUX0RBVEEpOworCX0KKworCWhvc3QtPm1ycSA9IE5VTEw7CisJaG9zdC0+Y21kID0gTlVMTDsKKwlob3N0LT5kYXRhID0gTlVMTDsKKworCXNkaGNpX2RlYWN0aXZhdGVfbGVkKGhvc3QpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX3RpbWVvdXRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlob3N0ID0gKHN0cnVjdCBzZGhjaV9ob3N0KilkYXRhOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWlmIChob3N0LT5tcnEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVGltZW91dCB3YWl0aW5nIGZvciBoYXJkd2FyZSBpbnRlcnJ1cHQuICIKKwkJCSJQbGVhc2UgcmVwb3J0IHRoaXMgdG8gIiBCVUdNQUlMICIuXG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQlzZGhjaV9kdW1wcmVncyhob3N0KTsKKworCQlpZiAoaG9zdC0+ZGF0YSkgeworCQkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSBNTUNfRVJSX1RJTUVPVVQ7CisJCQlzZGhjaV9maW5pc2hfZGF0YShob3N0KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChob3N0LT5jbWQpCisJCQkJaG9zdC0+Y21kLT5lcnJvciA9IE1NQ19FUlJfVElNRU9VVDsKKwkJCWVsc2UKKwkJCQlob3N0LT5tcnEtPmNtZC0+ZXJyb3IgPSBNTUNfRVJSX1RJTUVPVVQ7CisKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPmZpbmlzaF90YXNrbGV0KTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBJbnRlcnJ1cHQgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBzZGhjaV9jbWRfaXJxKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgaW50bWFzaykKK3sKKwlCVUdfT04oaW50bWFzayA9PSAwKTsKKworCWlmICghaG9zdC0+Y21kKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEdvdCBjb21tYW5kIGludGVycnVwdCBldmVuIHRob3VnaCBubyAiCisJCQkiY29tbWFuZCBvcGVyYXRpb24gd2FzIGluIHByb2dyZXNzLlxuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUGxlYXNlIHJlcG9ydCB0aGlzIHRvICIgQlVHTUFJTCAiLlxuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW50bWFzayAmIFNESENJX0lOVF9SRVNQT05TRSkKKwkJc2RoY2lfZmluaXNoX2NvbW1hbmQoaG9zdCk7CisJZWxzZSB7CisJCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX1RJTUVPVVQpCisJCQlob3N0LT5jbWQtPmVycm9yID0gTU1DX0VSUl9USU1FT1VUOworCQllbHNlIGlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0NSQykKKwkJCWhvc3QtPmNtZC0+ZXJyb3IgPSBNTUNfRVJSX0JBRENSQzsKKwkJZWxzZSBpZiAoaW50bWFzayAmIChTREhDSV9JTlRfRU5EX0JJVCB8IFNESENJX0lOVF9JTkRFWCkpCisJCQlob3N0LT5jbWQtPmVycm9yID0gTU1DX0VSUl9GQUlMRUQ7CisJCWVsc2UKKwkJCWhvc3QtPmNtZC0+ZXJyb3IgPSBNTUNfRVJSX0lOVkFMSUQ7CisKKwkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOworCX0KK30KKworc3RhdGljIHZvaWQgc2RoY2lfZGF0YV9pcnEoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiBpbnRtYXNrKQoreworCUJVR19PTihpbnRtYXNrID09IDApOworCisJaWYgKCFob3N0LT5kYXRhKSB7CisJCS8qCisJCSAqIEEgZGF0YSBlbmQgaW50ZXJydXB0IGlzIHNlbnQgdG9nZXRoZXIgd2l0aCB0aGUgcmVzcG9uc2UKKwkJICogZm9yIHRoZSBzdG9wIGNvbW1hbmQuCisJCSAqLworCQlpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX0VORCkKKwkJCXJldHVybjsKKworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBHb3QgZGF0YSBpbnRlcnJ1cHQgZXZlbiB0aG91Z2ggbm8gIgorCQkJImRhdGEgb3BlcmF0aW9uIHdhcyBpbiBwcm9ncmVzcy5cbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBsZWFzZSByZXBvcnQgdGhpcyB0byAiIEJVR01BSUwgIi5cbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCXNkaGNpX2R1bXByZWdzKGhvc3QpOworCisJCXJldHVybjsKKwl9CisKKwlpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX1RJTUVPVVQpCisJCWhvc3QtPmRhdGEtPmVycm9yID0gTU1DX0VSUl9USU1FT1VUOworCWVsc2UgaWYgKGludG1hc2sgJiBTREhDSV9JTlRfREFUQV9DUkMpCisJCWhvc3QtPmRhdGEtPmVycm9yID0gTU1DX0VSUl9CQURDUkM7CisJZWxzZSBpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX0VORF9CSVQpCisJCWhvc3QtPmRhdGEtPmVycm9yID0gTU1DX0VSUl9GQUlMRUQ7CisKKwlpZiAoaG9zdC0+ZGF0YS0+ZXJyb3IgIT0gTU1DX0VSUl9OT05FKQorCQlzZGhjaV9maW5pc2hfZGF0YShob3N0KTsKKwllbHNlIHsKKwkJaWYgKGludG1hc2sgJiAoU0RIQ0lfSU5UX0JVRl9GVUxMIHwgU0RIQ0lfSU5UX0JVRl9FTVBUWSkpCisJCQlzZGhjaV90cmFuc2Zlcl9waW8oaG9zdCk7CisKKwkJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfREFUQV9FTkQpCisJCQlzZGhjaV9maW5pc2hfZGF0YShob3N0KTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzZGhjaV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpcnFyZXR1cm5fdCByZXN1bHQ7CisJc3RydWN0IHNkaGNpX2hvc3QqIGhvc3QgPSBkZXZfaWQ7CisJdTMyIGludG1hc2s7CisKKwlzcGluX2xvY2soJmhvc3QtPmxvY2spOworCisJaW50bWFzayA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCisJaWYgKCFpbnRtYXNrKSB7CisJCXJlc3VsdCA9IElSUV9OT05FOworCQlnb3RvIG91dDsKKwl9CisKKwlEQkcoIioqKiAlcyBnb3QgaW50ZXJydXB0OiAweCUwOHhcbiIsIGhvc3QtPnNsb3RfZGVzY3IsIGludG1hc2spOworCisJaWYgKGludG1hc2sgJiAoU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwgU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFKSkKKwkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+Y2FyZF90YXNrbGV0KTsKKworCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0NNRF9NQVNLKSB7CisJCXNkaGNpX2NtZF9pcnEoaG9zdCwgaW50bWFzayAmIFNESENJX0lOVF9DTURfTUFTSyk7CisKKwkJd3JpdGVsKGludG1hc2sgJiBTREhDSV9JTlRfQ01EX01BU0ssCisJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKwl9CisKKwlpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX01BU0spIHsKKwkJc2RoY2lfZGF0YV9pcnEoaG9zdCwgaW50bWFzayAmIFNESENJX0lOVF9EQVRBX01BU0spOworCisJCXdyaXRlbChpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfTUFTSywKKwkJCWhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCX0KKworCWludG1hc2sgJj0gfihTREhDSV9JTlRfQ01EX01BU0sgfCBTREhDSV9JTlRfREFUQV9NQVNLKTsKKworCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0NBUkRfSU5UKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgY2FyZCBpbnRlcnJ1cHQuIFBsZWFzZSAiCisJCQkicmVwb3J0IHRoaXMgdG8gIiBCVUdNQUlMICIuXG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQlzZGhjaV9kdW1wcmVncyhob3N0KTsKKwl9CisKKwlpZiAoaW50bWFzayAmIFNESENJX0lOVF9CVVNfUE9XRVIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5leHBlY3RlZCBidXMgcG93ZXIgaW50ZXJydXB0LiBQbGVhc2UgIgorCQkJInJlcG9ydCB0aGlzIHRvICIgQlVHTUFJTCAiLlxuIiwKKwkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKKwkJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CisJfQorCisJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfQUNNRDEyRVJSKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuZXhwZWN0ZWQgYXV0byBDTUQxMiBlcnJvci4gUGxlYXNlICIKKwkJCSJyZXBvcnQgdGhpcyB0byAiIEJVR01BSUwgIi5cbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCXNkaGNpX2R1bXByZWdzKGhvc3QpOworCisJCXdyaXRldyh+MCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQUNNRDEyX0VSUik7CisJfQorCisJaWYgKGludG1hc2spCisJCXdyaXRlbChpbnRtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKTsKKworCXJlc3VsdCA9IElSUV9IQU5ETEVEOworCitvdXQ6CisJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBTdXNwZW5kL3Jlc3VtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgc2RoY2lfc3VzcGVuZCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2RoY2lfY2hpcCAqY2hpcDsKKwlpbnQgaSwgcmV0OworCisJY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWNoaXApCisJCXJldHVybiAwOworCisJREJHKCJTdXNwZW5kaW5nLi4uXG4iKTsKKworCWZvciAoaSA9IDA7aSA8IGNoaXAtPm51bV9zbG90cztpKyspIHsKKwkJaWYgKCFjaGlwLT5ob3N0c1tpXSkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KGNoaXAtPmhvc3RzW2ldLT5tbWMsIHN0YXRlKTsKKwkJaWYgKHJldCkgeworCQkJZm9yIChpLS07aSA+PSAwO2ktLSkKKwkJCQltbWNfcmVzdW1lX2hvc3QoY2hpcC0+aG9zdHNbaV0tPm1tYyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZGhjaV9yZXN1bWUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBzZGhjaV9jaGlwICpjaGlwOworCWludCBpLCByZXQ7CisKKwljaGlwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghY2hpcCkKKwkJcmV0dXJuIDA7CisKKwlEQkcoIlJlc3VtaW5nLi4uXG4iKTsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKworCWZvciAoaSA9IDA7aSA8IGNoaXAtPm51bV9zbG90cztpKyspIHsKKwkJaWYgKCFjaGlwLT5ob3N0c1tpXSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2hpcC0+aG9zdHNbaV0tPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkKKwkJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCQlzZGhjaV9pbml0KGNoaXAtPmhvc3RzW2ldKTsKKwkJcmV0ID0gbW1jX3Jlc3VtZV9ob3N0KGNoaXAtPmhvc3RzW2ldLT5tbWMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogQ09ORklHX1BNICovCisKKyNkZWZpbmUgc2RoY2lfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHNkaGNpX3Jlc3VtZSBOVUxMCisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXZpY2UgcHJvYmluZy9yZW1vdmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZGhjaV9wcm9iZV9zbG90KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgc2xvdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZGhjaV9jaGlwICpjaGlwOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jOworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OworCisJdTggZmlyc3RfYmFyOworCXVuc2lnbmVkIGludCBjYXBzOworCisJY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlCVUdfT04oIWNoaXApOworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1NMT1RfSU5GTywgJmZpcnN0X2Jhcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZpcnN0X2JhciAmPSBQQ0lfU0xPVF9JTkZPX0ZJUlNUX0JBUl9NQVNLOworCisJaWYgKGZpcnN0X2JhciA+IDUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IEludmFsaWQgZmlyc3QgQkFSLiBBYm9ydGluZy5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgZmlyc3RfYmFyICsgc2xvdCkgJiBJT1JFU09VUkNFX01FTSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IEJBUiBpcyBub3QgaW9tZW0uIEFib3J0aW5nLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGZpcnN0X2JhciArIHNsb3QpICE9IDB4MTAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiBJbnZhbGlkIGlvbWVtIHNpemUuIEFib3J0aW5nLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3Qgc2RoY2lfaG9zdCksICZwZGV2LT5kZXYpOworCWlmICghbW1jKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCWhvc3QtPm1tYyA9IG1tYzsKKworCWhvc3QtPmJhciA9IGZpcnN0X2JhciArIHNsb3Q7CisKKwlob3N0LT5hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGhvc3QtPmJhcik7CisJaG9zdC0+aXJxID0gcGRldi0+aXJxOworCisJREJHKCJzbG90ICVkIGF0IDB4JTA4bHgsIGlycSAlZFxuIiwgc2xvdCwgaG9zdC0+YWRkciwgaG9zdC0+aXJxKTsKKworCXNucHJpbnRmKGhvc3QtPnNsb3RfZGVzY3IsIDIwLCAic2RoY2k6c2xvdCVkIiwgc2xvdCk7CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgaG9zdC0+YmFyLCBob3N0LT5zbG90X2Rlc2NyKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKKwlob3N0LT5pb2FkZHIgPSBpb3JlbWFwX25vY2FjaGUoaG9zdC0+YWRkciwKKwkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCBob3N0LT5iYXIpKTsKKwlpZiAoIWhvc3QtPmlvYWRkcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHJlbGVhc2U7CisJfQorCisJY2FwcyA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0NBUEFCSUxJVElFUyk7CisKKwlpZiAoKGNhcHMgJiBTREhDSV9DQU5fRE9fRE1BKSAmJiAoKHBkZXYtPmNsYXNzICYgMHgwMDAwRkYpID09IDB4MDEpKQorCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0VfRE1BOworCisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkgeworCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLiAiCisJCQkJIkZhbGxpbmcgYmFjayB0byBQSU8uXG4iLCBob3N0LT5zbG90X2Rlc2NyKTsKKwkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9VU0VfRE1BOworCQl9CisJfQorCisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSkKKwkJcGNpX3NldF9tYXN0ZXIocGRldik7CisJZWxzZSAvKiBYWFg6IEhhY2sgdG8gZ2V0IE1NQyBsYXllciB0byBhdm9pZCBoaWdobWVtICovCisJCXBkZXYtPmRtYV9tYXNrID0gMDsKKworCWhvc3QtPm1heF9jbGsgPSAoY2FwcyAmIFNESENJX0NMT0NLX0JBU0VfTUFTSykgPj4gU0RIQ0lfQ0xPQ0tfQkFTRV9TSElGVDsKKwlob3N0LT5tYXhfY2xrICo9IDEwMDAwMDA7CisKKwkvKgorCSAqIFNldCBob3N0IHBhcmFtZXRlcnMuCisJICovCisJbW1jLT5vcHMgPSAmc2RoY2lfb3BzOworCW1tYy0+Zl9taW4gPSBob3N0LT5tYXhfY2xrIC8gMjU2OworCW1tYy0+Zl9tYXggPSBob3N0LT5tYXhfY2xrOworCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0OworCW1tYy0+Y2FwcyA9IE1NQ19DQVBfNF9CSVRfREFUQTsKKworCXNwaW5fbG9ja19pbml0KCZob3N0LT5sb2NrKTsKKworCS8qCisJICogTWF4aW11bSBudW1iZXIgb2Ygc2VnbWVudHMuIEhhcmR3YXJlIGNhbm5vdCBkbyBzY2F0dGVyIGxpc3RzLgorCSAqLworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpCisJCW1tYy0+bWF4X2h3X3NlZ3MgPSAxOworCWVsc2UKKwkJbW1jLT5tYXhfaHdfc2VncyA9IDE2OworCW1tYy0+bWF4X3BoeXNfc2VncyA9IDE2OworCisJLyoKKwkgKiBNYXhpbXVtIG51bWJlciBvZiBzZWN0b3JzIGluIG9uZSB0cmFuc2Zlci4gTGltaXRlZCBieSBzZWN0b3IKKwkgKiBjb3VudCByZWdpc3Rlci4KKwkgKi8KKwltbWMtPm1heF9zZWN0b3JzID0gMHgzRkZGOworCisJLyoKKwkgKiBNYXhpbXVtIHNlZ21lbnQgc2l6ZS4gQ291bGQgYmUgb25lIHNlZ21lbnQgd2l0aCB0aGUgbWF4aW11bSBudW1iZXIKKwkgKiBvZiBzZWN0b3JzLgorCSAqLworCW1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfc2VjdG9ycyAqIDUxMjsKKworCS8qCisJICogSW5pdCB0YXNrbGV0cy4KKwkgKi8KKwl0YXNrbGV0X2luaXQoJmhvc3QtPmNhcmRfdGFza2xldCwKKwkJc2RoY2lfdGFza2xldF9jYXJkLCAodW5zaWduZWQgbG9uZylob3N0KTsKKwl0YXNrbGV0X2luaXQoJmhvc3QtPmZpbmlzaF90YXNrbGV0LAorCQlzZGhjaV90YXNrbGV0X2ZpbmlzaCwgKHVuc2lnbmVkIGxvbmcpaG9zdCk7CisKKwlzZXR1cF90aW1lcigmaG9zdC0+dGltZXIsIHNkaGNpX3RpbWVvdXRfdGltZXIsIChpbnQpaG9zdCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIHNkaGNpX2lycSwgU0FfU0hJUlEsCisJCWhvc3QtPnNsb3RfZGVzY3IsIGhvc3QpOworCWlmIChyZXQpCisJCWdvdG8gdW5tYXA7CisKKwlzZGhjaV9pbml0KGhvc3QpOworCisjaWZkZWYgQ09ORklHX01NQ19ERUJVRworCXNkaGNpX2R1bXByZWdzKGhvc3QpOworI2VuZGlmCisKKwlob3N0LT5jaGlwID0gY2hpcDsKKwljaGlwLT5ob3N0c1tzbG90XSA9IGhvc3Q7CisKKwltbWNfYWRkX2hvc3QobW1jKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBTREhDSSBhdCAweCUwOGx4IGlycSAlZCAlc1xuIiwgbW1jX2hvc3RuYW1lKG1tYyksCisJCWhvc3QtPmFkZHIsIGhvc3QtPmlycSwKKwkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSk/IkRNQSI6IlBJTyIpOworCisJcmV0dXJuIDA7CisKK3VubWFwOgorCXRhc2tsZXRfa2lsbCgmaG9zdC0+Y2FyZF90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJmhvc3QtPmZpbmlzaF90YXNrbGV0KTsKKworCWlvdW5tYXAoaG9zdC0+aW9hZGRyKTsKK3JlbGVhc2U6CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIGhvc3QtPmJhcik7CitmcmVlOgorCW1tY19mcmVlX2hvc3QobW1jKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX3JlbW92ZV9zbG90KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgc2RoY2lfY2hpcCAqY2hpcDsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdDsKKworCWNoaXAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaG9zdCA9IGNoaXAtPmhvc3RzW3Nsb3RdOworCW1tYyA9IGhvc3QtPm1tYzsKKworCWNoaXAtPmhvc3RzW3Nsb3RdID0gTlVMTDsKKworCW1tY19yZW1vdmVfaG9zdChtbWMpOworCisJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQUxMKTsKKworCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CisKKwlkZWxfdGltZXJfc3luYygmaG9zdC0+dGltZXIpOworCisJdGFza2xldF9raWxsKCZob3N0LT5jYXJkX3Rhc2tsZXQpOworCXRhc2tsZXRfa2lsbCgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOworCisJaW91bm1hcChob3N0LT5pb2FkZHIpOworCisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIGhvc3QtPmJhcik7CisKKwltbWNfZnJlZV9ob3N0KG1tYyk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IHJldCwgaTsKKwl1OCBzbG90czsKKwlzdHJ1Y3Qgc2RoY2lfY2hpcCAqY2hpcDsKKworCUJVR19PTihwZGV2ID09IE5VTEwpOworCUJVR19PTihlbnQgPT0gTlVMTCk7CisKKwlEQkcoImZvdW5kIGF0ICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CisKKwlyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfU0xPVF9JTkZPLCAmc2xvdHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzbG90cyA9IFBDSV9TTE9UX0lORk9fU0xPVFMoc2xvdHMpICsgMTsKKwlEQkcoImZvdW5kICVkIHNsb3QocylcbiIsIHNsb3RzKTsKKwlpZiAoc2xvdHMgPT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZGhjaV9jaGlwKSArCisJCXNpemVvZihzdHJ1Y3Qgc2RoY2lfaG9zdCopICogc2xvdHMsIEdGUF9LRVJORUwpOworCWlmICghY2hpcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwljaGlwLT5wZGV2ID0gcGRldjsKKworCWNoaXAtPm51bV9zbG90cyA9IHNsb3RzOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGlwKTsKKworCWZvciAoaSA9IDA7aSA8IHNsb3RzO2krKykgeworCQlyZXQgPSBzZGhjaV9wcm9iZV9zbG90KHBkZXYsIGkpOworCQlpZiAocmV0KSB7CisJCQlmb3IgKGktLTtpID49IDA7aS0tKQorCQkJCXNkaGNpX3JlbW92ZV9zbG90KHBkZXYsIGkpOworCQkJZ290byBmcmVlOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2ZyZWU6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGNoaXApOworCitlcnI6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzZGhjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisJc3RydWN0IHNkaGNpX2NoaXAgKmNoaXA7CisKKwljaGlwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGNoaXApIHsKKwkJZm9yIChpID0gMDtpIDwgY2hpcC0+bnVtX3Nsb3RzO2krKykKKwkJCXNkaGNpX3JlbW92ZV9zbG90KHBkZXYsIGkpOworCisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCQlrZnJlZShjaGlwKTsKKwl9CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzZGhjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAJRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0JcGNpX2lkcywKKwkucHJvYmUgPSAJc2RoY2lfcHJvYmUsCisJLnJlbW92ZSA9CV9fZGV2ZXhpdF9wKHNkaGNpX3JlbW92ZSksCisJLnN1c3BlbmQgPQlzZGhjaV9zdXNwZW5kLAorCS5yZXN1bWUJPQlzZGhjaV9yZXN1bWUsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIERyaXZlciBpbml0L2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHNkaGNpX2Rydl9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRQorCQkiOiBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciwgIgorCQlEUklWRVJfVkVSU0lPTiAiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IENvcHlyaWdodChjKSBQaWVycmUgT3NzbWFuXG4iKTsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzZGhjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RoY2lfZHJ2X2V4aXQodm9pZCkKK3sKKwlEQkcoIkV4aXRpbmdcbiIpOworCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzZGhjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZGhjaV9kcnZfaW5pdCk7Cittb2R1bGVfZXhpdChzZGhjaV9kcnZfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlBpZXJyZSBPc3NtYW4gPGRyemV1c0BkcnpldXMuY3g+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIik7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9zZGhjaS5oIGIvZHJpdmVycy9tbWMvc2RoY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjI3MGVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvc2RoY2kuaApAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL21tYy9zZGhjaS5oIC0gU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFBpZXJyZSBPc3NtYW4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKgorICogUENJIHJlZ2lzdGVycworICovCisKKyNkZWZpbmUgUENJX1NMT1RfSU5GTwkJCTB4NDAJLyogOCBiaXRzICovCisjZGVmaW5lICBQQ0lfU0xPVF9JTkZPX1NMT1RTKHgpCQkoKHggPj4gNCkgJiA3KQorI2RlZmluZSAgUENJX1NMT1RfSU5GT19GSVJTVF9CQVJfTUFTSwkweDA3CisKKy8qCisgKiBDb250cm9sbGVyIHJlZ2lzdGVycworICovCisKKyNkZWZpbmUgU0RIQ0lfRE1BX0FERFJFU1MJMHgwMAorCisjZGVmaW5lIFNESENJX0JMT0NLX1NJWkUJMHgwNAorCisjZGVmaW5lIFNESENJX0JMT0NLX0NPVU5UCTB4MDYKKworI2RlZmluZSBTREhDSV9BUkdVTUVOVAkJMHgwOAorCisjZGVmaW5lIFNESENJX1RSQU5TRkVSX01PREUJMHgwQworI2RlZmluZSAgU0RIQ0lfVFJOU19ETUEJCTB4MDEKKyNkZWZpbmUgIFNESENJX1RSTlNfQkxLX0NOVF9FTgkweDAyCisjZGVmaW5lICBTREhDSV9UUk5TX0FDTUQxMgkweDA0CisjZGVmaW5lICBTREhDSV9UUk5TX1JFQUQJMHgxMAorI2RlZmluZSAgU0RIQ0lfVFJOU19NVUxUSQkweDIwCisKKyNkZWZpbmUgU0RIQ0lfQ09NTUFORAkJMHgwRQorI2RlZmluZSAgU0RIQ0lfQ01EX1JFU1BfTUFTSwkweDAzCisjZGVmaW5lICBTREhDSV9DTURfQ1JDCQkweDA4CisjZGVmaW5lICBTREhDSV9DTURfSU5ERVgJMHgxMAorI2RlZmluZSAgU0RIQ0lfQ01EX0RBVEEJCTB4MjAKKworI2RlZmluZSAgU0RIQ0lfQ01EX1JFU1BfTk9ORQkweDAwCisjZGVmaW5lICBTREhDSV9DTURfUkVTUF9MT05HCTB4MDEKKyNkZWZpbmUgIFNESENJX0NNRF9SRVNQX1NIT1JUCTB4MDIKKyNkZWZpbmUgIFNESENJX0NNRF9SRVNQX1NIT1JUX0JVU1kgMHgwMworCisjZGVmaW5lIFNESENJX01BS0VfQ01EKGMsIGYpICgoKGMgJiAweGZmKSA8PCA4KSB8IChmICYgMHhmZikpCisKKyNkZWZpbmUgU0RIQ0lfUkVTUE9OU0UJCTB4MTAKKworI2RlZmluZSBTREhDSV9CVUZGRVIJCTB4MjAKKworI2RlZmluZSBTREhDSV9QUkVTRU5UX1NUQVRFCTB4MjQKKyNkZWZpbmUgIFNESENJX0NNRF9JTkhJQklUCTB4MDAwMDAwMDEKKyNkZWZpbmUgIFNESENJX0RBVEFfSU5ISUJJVAkweDAwMDAwMDAyCisjZGVmaW5lICBTREhDSV9ET0lOR19XUklURQkweDAwMDAwMTAwCisjZGVmaW5lICBTREhDSV9ET0lOR19SRUFECTB4MDAwMDAyMDAKKyNkZWZpbmUgIFNESENJX1NQQUNFX0FWQUlMQUJMRQkweDAwMDAwNDAwCisjZGVmaW5lICBTREhDSV9EQVRBX0FWQUlMQUJMRQkweDAwMDAwODAwCisjZGVmaW5lICBTREhDSV9DQVJEX1BSRVNFTlQJMHgwMDAxMDAwMAorI2RlZmluZSAgU0RIQ0lfV1JJVEVfUFJPVEVDVAkweDAwMDgwMDAwCisKKyNkZWZpbmUgU0RIQ0lfSE9TVF9DT05UUk9MIAkweDI4CisjZGVmaW5lICBTREhDSV9DVFJMX0xFRAkJMHgwMQorI2RlZmluZSAgU0RIQ0lfQ1RSTF80QklUQlVTCTB4MDIKKworI2RlZmluZSBTREhDSV9QT1dFUl9DT05UUk9MCTB4MjkKKworI2RlZmluZSBTREhDSV9CTE9DS19HQVBfQ09OVFJPTAkweDJBCisKKyNkZWZpbmUgU0RIQ0lfV0FMS19VUF9DT05UUk9MCTB4MkIKKworI2RlZmluZSBTREhDSV9DTE9DS19DT05UUk9MCTB4MkMKKyNkZWZpbmUgIFNESENJX0RJVklERVJfU0hJRlQJOAorI2RlZmluZSAgU0RIQ0lfQ0xPQ0tfQ0FSRF9FTgkweDAwMDQKKyNkZWZpbmUgIFNESENJX0NMT0NLX0lOVF9TVEFCTEUJMHgwMDAyCisjZGVmaW5lICBTREhDSV9DTE9DS19JTlRfRU4JMHgwMDAxCisKKyNkZWZpbmUgU0RIQ0lfVElNRU9VVF9DT05UUk9MCTB4MkUKKworI2RlZmluZSBTREhDSV9TT0ZUV0FSRV9SRVNFVAkweDJGCisjZGVmaW5lICBTREhDSV9SRVNFVF9BTEwJMHgwMQorI2RlZmluZSAgU0RIQ0lfUkVTRVRfQ01ECTB4MDIKKyNkZWZpbmUgIFNESENJX1JFU0VUX0RBVEEJMHgwNAorCisjZGVmaW5lIFNESENJX0lOVF9TVEFUVVMJMHgzMAorI2RlZmluZSBTREhDSV9JTlRfRU5BQkxFCTB4MzQKKyNkZWZpbmUgU0RIQ0lfU0lHTkFMX0VOQUJMRQkweDM4CisjZGVmaW5lICBTREhDSV9JTlRfUkVTUE9OU0UJMHgwMDAwMDAwMQorI2RlZmluZSAgU0RIQ0lfSU5UX0RBVEFfRU5ECTB4MDAwMDAwMDIKKyNkZWZpbmUgIFNESENJX0lOVF9ETUFfRU5ECTB4MDAwMDAwMDgKKyNkZWZpbmUgIFNESENJX0lOVF9CVUZfRU1QVFkJMHgwMDAwMDAxMAorI2RlZmluZSAgU0RIQ0lfSU5UX0JVRl9GVUxMCTB4MDAwMDAwMjAKKyNkZWZpbmUgIFNESENJX0lOVF9DQVJEX0lOU0VSVAkweDAwMDAwMDQwCisjZGVmaW5lICBTREhDSV9JTlRfQ0FSRF9SRU1PVkUJMHgwMDAwMDA4MAorI2RlZmluZSAgU0RIQ0lfSU5UX0NBUkRfSU5UCTB4MDAwMDAxMDAKKyNkZWZpbmUgIFNESENJX0lOVF9USU1FT1VUCTB4MDAwMTAwMDAKKyNkZWZpbmUgIFNESENJX0lOVF9DUkMJCTB4MDAwMjAwMDAKKyNkZWZpbmUgIFNESENJX0lOVF9FTkRfQklUCTB4MDAwNDAwMDAKKyNkZWZpbmUgIFNESENJX0lOVF9JTkRFWAkweDAwMDgwMDAwCisjZGVmaW5lICBTREhDSV9JTlRfREFUQV9USU1FT1VUCTB4MDAxMDAwMDAKKyNkZWZpbmUgIFNESENJX0lOVF9EQVRBX0NSQwkweDAwMjAwMDAwCisjZGVmaW5lICBTREhDSV9JTlRfREFUQV9FTkRfQklUCTB4MDA0MDAwMDAKKyNkZWZpbmUgIFNESENJX0lOVF9CVVNfUE9XRVIJMHgwMDgwMDAwMAorI2RlZmluZSAgU0RIQ0lfSU5UX0FDTUQxMkVSUgkweDAxMDAwMDAwCisKKyNkZWZpbmUgIFNESENJX0lOVF9OT1JNQUxfTUFTSwkweDAwMDA3RkZGCisjZGVmaW5lICBTREhDSV9JTlRfRVJST1JfTUFTSwkweEZGRkY4MDAwCisKKyNkZWZpbmUgIFNESENJX0lOVF9DTURfTUFTSwkoU0RIQ0lfSU5UX1JFU1BPTlNFIHwgU0RIQ0lfSU5UX1RJTUVPVVQgfCBcCisJCVNESENJX0lOVF9DUkMgfCBTREhDSV9JTlRfRU5EX0JJVCB8IFNESENJX0lOVF9JTkRFWCkKKyNkZWZpbmUgIFNESENJX0lOVF9EQVRBX01BU0sJKFNESENJX0lOVF9EQVRBX0VORCB8IFNESENJX0lOVF9ETUFfRU5EIHwgXAorCQlTREhDSV9JTlRfQlVGX0VNUFRZIHwgU0RIQ0lfSU5UX0JVRl9GVUxMIHwgXAorCQlTREhDSV9JTlRfREFUQV9USU1FT1VUIHwgU0RIQ0lfSU5UX0RBVEFfQ1JDIHwgXAorCQlTREhDSV9JTlRfREFUQV9FTkRfQklUKQorCisjZGVmaW5lIFNESENJX0FDTUQxMl9FUlIJMHgzQworCisvKiAzRS0zRiByZXNlcnZlZCAqLworCisjZGVmaW5lIFNESENJX0NBUEFCSUxJVElFUwkweDQwCisjZGVmaW5lICBTREhDSV9DQU5fRE9fRE1BCTB4MDA0MDAwMDAKKyNkZWZpbmUgIFNESENJX0NMT0NLX0JBU0VfTUFTSwkweDAwMDAzRjAwCisjZGVmaW5lICBTREhDSV9DTE9DS19CQVNFX1NISUZUCTgKKworLyogNDQtNDcgcmVzZXJ2ZWQgZm9yIG1vcmUgY2FwcyAqLworCisjZGVmaW5lIFNESENJX01BWF9DVVJSRU5UCTB4NDgKKworLyogNEMtNEYgcmVzZXJ2ZWQgZm9yIG1vcmUgbWF4IGN1cnJlbnQgKi8KKworLyogNTAtRkIgcmVzZXJ2ZWQgKi8KKworI2RlZmluZSBTREhDSV9TTE9UX0lOVF9TVEFUVVMJMHhGQworCisjZGVmaW5lIFNESENJX0hPU1RfVkVSU0lPTgkweEZFCisKK3N0cnVjdCBzZGhjaV9jaGlwOworCitzdHJ1Y3Qgc2RoY2lfaG9zdCB7CisJc3RydWN0IHNkaGNpX2NoaXAJKmNoaXA7CisJc3RydWN0IG1tY19ob3N0CQkqbW1jOwkJLyogTU1DIHN0cnVjdHVyZSAqLworCisJc3BpbmxvY2tfdAkJbG9jazsJCS8qIE11dGV4ICovCisKKwlpbnQJCQlmbGFnczsJCS8qIEhvc3QgYXR0cmlidXRlcyAqLworI2RlZmluZSBTREhDSV9VU0VfRE1BCQkoMTw8MCkKKworCXVuc2lnbmVkIGludAkJbWF4X2NsazsJLyogTWF4IHBvc3NpYmxlIGZyZXEgKE1IeikgKi8KKworCXVuc2lnbmVkIGludAkJY2xvY2s7CQkvKiBDdXJyZW50IGNsb2NrIChNSHopICovCisKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QJKm1ycTsJCS8qIEN1cnJlbnQgcmVxdWVzdCAqLworCXN0cnVjdCBtbWNfY29tbWFuZAkqY21kOwkJLyogQ3VycmVudCBjb21tYW5kICovCisJc3RydWN0IG1tY19kYXRhCQkqZGF0YTsJCS8qIEN1cnJlbnQgZGF0YSByZXF1ZXN0ICovCisKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKmN1cl9zZzsJLyogV2UncmUgd29ya2luZyBvbiB0aGlzICovCisJY2hhcgkJCSptYXBwZWRfc2c7CS8qIFRoaXMgaXMgd2hlcmUgaXQncyBtYXBwZWQgKi8KKwlpbnQJCQludW1fc2c7CQkvKiBFbnRyaWVzIGxlZnQgKi8KKwlpbnQJCQlvZmZzZXQ7CQkvKiBPZmZzZXQgaW50byBjdXJyZW50IHNnICovCisJaW50CQkJcmVtYWluOwkJLyogQnl0ZXMgbGVmdCBpbiBjdXJyZW50ICovCisKKwlpbnQJCQlzaXplOwkJLyogUmVtYWluaW5nIGJ5dGVzIGluIHRyYW5zZmVyICovCisKKwljaGFyCQkJc2xvdF9kZXNjclsyMF07CS8qIE5hbWUgZm9yIHJlc2VydmF0aW9ucyAqLworCisJaW50CQkJaXJxOwkJLyogRGV2aWNlIElSUSAqLworCWludAkJCWJhcjsJCS8qIFBDSSBCQVIgaW5kZXggKi8KKwl1bnNpZ25lZCBsb25nCQlhZGRyOwkJLyogQnVzIGFkZHJlc3MgKi8KKwl2b2lkIF9faW9tZW0gKgkJaW9hZGRyOwkJLyogTWFwcGVkIGFkZHJlc3MgKi8KKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAljYXJkX3Rhc2tsZXQ7CS8qIFRhc2tsZXQgc3RydWN0dXJlcyAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlmaW5pc2hfdGFza2xldDsKKworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwkJLyogVGltZXIgZm9yIHRpbWVvdXRzICovCit9OworCitzdHJ1Y3Qgc2RoY2lfY2hpcCB7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCisJaW50CQkJbnVtX3Nsb3RzOwkvKiBTbG90cyBvbiBjb250cm9sbGVyICovCisJc3RydWN0IHNkaGNpX2hvc3QJKmhvc3RzWzBdOwkvKiBQb2ludGVycyB0byBob3N0cyAqLworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKaW5kZXggNjljMDQ5NDUuLjFjMDc0ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCkBAIC00MDgsNiArNDA4LDcgQEAKIAkJY2ZpLT5jaGlwc1tpXS5idWZmZXJfd3JpdGVfdGltZSA9IDE8PGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0VHlwOwogCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAxPDxjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwOwogCQljZmktPmNoaXBzW2ldLnJlZl9wb2ludF9jb3VudGVyID0gMDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNmaS0+Y2hpcHNbaV0ud3EpKTsKIAl9CiAKIAltYXAtPmZsZHJ2ID0gJmNmaV9pbnRlbGV4dF9jaGlwZHJ2OwpAQCAtMTAxOSw4ICsxMDIwLDggQEAKICNkZWZpbmUgWElQX0lOVkFMX0NBQ0hFRF9SQU5HRShtYXAsIGZyb20sIHNpemUpICBcCiAJSU5WQUxJREFURV9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKQogCi0jZGVmaW5lIElOVkFMSURBVEVfQ0FDSEVfVURFTEFZKG1hcCwgY2hpcCwgYWRyLCBsZW4sIHVzZWMpICBcCi0JVURFTEFZKG1hcCwgY2hpcCwgYWRyLCB1c2VjKQorI2RlZmluZSBJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIGFkciwgbGVuLCB1c2VjKSAgXAorCVVERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIHVzZWMpCiAKIC8qCiAgKiBFeHRyYSBub3RlczoKQEAgLTEwNTIsNyArMTA1Myw3IEBACiAJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsgIFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgSU5WQUxJREFURV9DQUNIRV9VREVMQVkobWFwLCBjaGlwLCBhZHIsIGxlbiwgdXNlYykgIFwKKyNkZWZpbmUgSU5WQUxJREFURV9DQUNIRV9VREVMQVkobWFwLCBjaGlwLCBjbWRfYWRyLCBhZHIsIGxlbiwgdXNlYykgIFwKIGRvIHsgIFwKIAlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7ICBcCiAJSU5WQUxJREFURV9DQUNIRURfUkFOR0UobWFwLCBhZHIsIGxlbik7ICBcCkBAIC0xMjg0LDcgKzEyODUsNyBAQAogCW1hcF93cml0ZShtYXAsIGRhdHVtLCBhZHIpOwogCWNoaXAtPnN0YXRlID0gbW9kZTsKIAotCUlOVkFMSURBVEVfQ0FDSEVfVURFTEFZKG1hcCwgY2hpcCwKKwlJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGFkciwKIAkJCQlhZHIsIG1hcF9iYW5rd2lkdGgobWFwKSwKIAkJCQljaGlwLT53b3JkX3dyaXRlX3RpbWUpOwogCkBAIC0xNTcyLDggKzE1NzMsOCBAQAogCW1hcF93cml0ZShtYXAsIENNRCgweGQwKSwgY21kX2Fkcik7CiAJY2hpcC0+c3RhdGUgPSBGTF9XUklUSU5HOwogCi0JSU5WQUxJREFURV9DQUNIRV9VREVMQVkobWFwLCBjaGlwLAotCQkJCWNtZF9hZHIsIGxlbiwKKwlJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsCisJCQkJYWRyLCBsZW4sCiAJCQkJY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUpOwogCiAJdGltZW8gPSBqaWZmaWVzICsgKEhaLzIpOwpAQCAtMTc0NCw3ICsxNzQ1LDcgQEAKIAljaGlwLT5zdGF0ZSA9IEZMX0VSQVNJTkc7CiAJY2hpcC0+ZXJhc2Vfc3VzcGVuZGVkID0gMDsKIAotCUlOVkFMSURBVEVfQ0FDSEVfVURFTEFZKG1hcCwgY2hpcCwKKwlJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGFkciwKIAkJCQlhZHIsIGxlbiwKIAkJCQljaGlwLT5lcmFzZV90aW1lKjEwMDAvMik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkX2RhdGFmbGFzaC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKaW5kZXggMTU1NzM3ZS4uYTE5NDgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQkgKiB3ZSdyZSBhdCBhIGJsb2NrIGJvdW5kYXJ5IGFuZCBuZWVkIHRvIGVyYXNlIHRoZSB3aG9sZSBibG9jay4KIAkJICovCiAJCXBhZ2VhZGRyID0gaW5zdHItPmFkZHIgLyBwcml2LT5wYWdlX3NpemU7Ci0JCWRvX2Jsb2NrID0gKHBhZ2VhZGRyICYgMHg3KSA9PSAwICYmIGluc3RyLT5sZW4gPD0gYmxvY2tzaXplOworCQlkb19ibG9jayA9IChwYWdlYWRkciAmIDB4NykgPT0gMCAmJiBpbnN0ci0+bGVuID49IGJsb2Nrc2l6ZTsKIAkJcGFnZWFkZHIgPSBwYWdlYWRkciA8PCBwcml2LT5wYWdlX29mZnNldDsKIAogCQljb21tYW5kWzBdID0gZG9fYmxvY2sgPyBPUF9FUkFTRV9CTE9DSyA6IE9QX0VSQVNFX1BBR0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwppbmRleCBmMGY4OTE2Li5mOTg4YzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmZGVmIENPTkZJR19NVERfREVCVUcKIHN0YXRpYyBpbnQgZGVidWcgPSBDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U7Ci1NT0RVTEVfUEFSTShkZWJ1ZywgImkiKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJTZXQgRGVidWcgTGV2ZWwgMD1xdWlldCwgNT1ub2lzeSIpOwogI3VuZGVmIERFQlVHCiAjZGVmaW5lIERFQlVHKG4sIGZvcm1hdCwgYXJnLi4uKSBcCkBAIC04OSwxNyArODksMTcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX1BBUk0oYmFua3dpZHRoLCAiaSIpOworbW9kdWxlX3BhcmFtKGJhbmt3aWR0aCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYmFua3dpZHRoLCAiU2V0IGJhbmt3aWR0aCAoMT04IGJpdCwgMj0xNiBiaXQsIGRlZmF1bHQ9MikiKTsKLU1PRFVMRV9QQVJNKG1lbV9zcGVlZCwgImkiKTsKK21vZHVsZV9wYXJhbShtZW1fc3BlZWQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1lbV9zcGVlZCwgIlNldCBtZW1vcnkgYWNjZXNzIHNwZWVkIGluIG5zIik7Ci1NT0RVTEVfUEFSTShmb3JjZV9zaXplLCAiaSIpOworbW9kdWxlX3BhcmFtKGZvcmNlX3NpemUsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3NpemUsICJGb3JjZSBzaXplIG9mIGNhcmQgaW4gTWlCICgxLTY0KSIpOwotTU9EVUxFX1BBUk0oc2V0dnBwLCAiaSIpOworbW9kdWxlX3BhcmFtKHNldHZwcCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2V0dnBwLCAiU2V0IFZwcCAoMD1OZXZlciwgMT1PbiB3cml0ZXMsIDI9QWx3YXlzIG9uLCBkZWZhdWx0PTApIik7Ci1NT0RVTEVfUEFSTSh2cHAsICJpIik7Cittb2R1bGVfcGFyYW0odnBwLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh2cHAsICJWcHAgdmFsdWUgaW4gMS8xMHRocyBlZyAzMz0zLjNWIDEyMD0xMlYgKERhbmdlcm91cykiKTsKLU1PRFVMRV9QQVJNKG1lbV90eXBlLCAiaSIpOworbW9kdWxlX3BhcmFtKG1lbV90eXBlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtZW1fdHlwZSwgIlNldCBNZW1vcnkgdHlwZSAoMD1GbGFzaCwgMT1SQU0sIDI9Uk9NLCBkZWZhdWx0PTApIik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcmVkYm9vdC5jIGIvZHJpdmVycy9tdGQvcmVkYm9vdC5jCmluZGV4IDdiN2NhNWEuLjg4MTVjOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3JlZGJvb3QuYworKysgYi9kcml2ZXJzL210ZC9yZWRib290LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogJElkOiByZWRib290LmMsdiAxLjE4IDIwMDUvMTEvMDcgMTE6MTQ6MjEgZ2xlaXhuZXIgRXhwICQKKyAqICRJZDogcmVkYm9vdC5jLHYgMS4xOSAyMDA1LzEyLzAxIDEwOjAzOjUxIGR3bXcyIEV4cCAkCiAgKgogICogUGFyc2UgUmVkQm9vdC1zdHlsZSBGbGFzaCBJbWFnZSBTeXN0ZW0gKEZJUykgdGFibGVzIGFuZAogICogcHJvZHVjZSBhIExpbnV4IHBhcnRpdGlvbiBhcnJheSB0byBtYXRjaC4KQEAgLTg5LDggKzg5LDMyIEBACiAJCQlpID0gbnVtc2xvdHM7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoIW1lbWNtcChidWZbaV0ubmFtZSwgIkZJUyBkaXJlY3RvcnkiLCAxNCkpCisJCWlmICghbWVtY21wKGJ1ZltpXS5uYW1lLCAiRklTIGRpcmVjdG9yeSIsIDE0KSkgeworCQkJLyogVGhpcyBpcyBhcHBhcmVudGx5IHRoZSBGSVMgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUKKwkJCSAqIEZJUyBkaXJlY3RvcnkgaXRzZWxmLiAgVGhlIEZJUyBkaXJlY3Rvcnkgc2l6ZSBpcworCQkJICogb25lIGVyYXNlIGJsb2NrOyBpZiB0aGUgYnVmW2ldLnNpemUgZmllbGQgaXMKKwkJCSAqIHN3YWIzMihlcmFzZXNpemUpIHRoZW4gd2Uga25vdyB3ZSBhcmUgbG9va2luZyBhdAorCQkJICogYSBieXRlIHN3YXBwZWQgRklTIGRpcmVjdG9yeSAtIHN3YXAgYWxsIHRoZSBlbnRyaWVzIQorCQkJICogKE5PVEU6IHRoaXMgaXMgJ3NpemUnIG5vdCAnZGF0YV9sZW5ndGgnOyBzaXplIGlzCisJCQkgKiB0aGUgZnVsbCBzaXplIG9mIHRoZSBlbnRyeS4pCisJCQkgKi8KKwkJCWlmIChzd2FiMzIoYnVmW2ldLnNpemUpID09IG1hc3Rlci0+ZXJhc2VzaXplKSB7CisJCQkJaW50IGo7CisJCQkJZm9yIChqID0gMDsgaiA8IG51bXNsb3RzICYmIGJ1ZltqXS5uYW1lWzBdICE9IDB4ZmY7ICsraikgeworCQkJCQkvKiBUaGUgdW5zaWduZWQgbG9uZyBmaWVsZHMgd2VyZSB3cml0dGVuIHdpdGggdGhlCisJCQkJCSAqIHdyb25nIGJ5dGUgc2V4LCBuYW1lIGFuZCBwYWQgaGF2ZSBubyBieXRlIHNleC4KKwkJCQkJICovCisJCQkJCXN3YWIzMnMoJmJ1ZltqXS5mbGFzaF9iYXNlKTsKKwkJCQkJc3dhYjMycygmYnVmW2pdLm1lbV9iYXNlKTsKKwkJCQkJc3dhYjMycygmYnVmW2pdLnNpemUpOworCQkJCQlzd2FiMzJzKCZidWZbal0uZW50cnlfcG9pbnQpOworCQkJCQlzd2FiMzJzKCZidWZbal0uZGF0YV9sZW5ndGgpOworCQkJCQlzd2FiMzJzKCZidWZbal0uZGVzY19ja3N1bSk7CisJCQkJCXN3YWIzMnMoJmJ1ZltqXS5maWxlX2Nrc3VtKTsKKwkJCQl9CisJCQl9CiAJCQlicmVhazsKKwkJfQogCX0KIAlpZiAoaSA9PSBudW1zbG90cykgewogCQkvKiBEaWRuJ3QgZmluZCBpdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggODI0ZTQzMC4uZGM4NDVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC0xMDAsNiArMTAwLDEwIEBACiBzdGF0aWMgY2hhciB2ZXJzaW9uQVtdIF9faW5pdGRhdGEgPSBEUlZfTkFNRSAiLmM6IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiBiZWNrZXJAc2N5bGQuY29tXG4iOwogc3RhdGljIGNoYXIgdmVyc2lvbkJbXSBfX2luaXRkYXRhID0gImh0dHA6Ly93d3cuc2N5bGQuY29tL25ldHdvcmsvM2M1MDkuaHRtbFxuIjsKIAorI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiAoZGVmaW5lZChDT05GSUdfTUNBKSB8fCBkZWZpbmVkKENPTkZJR19FSVNBKSkKKyNkZWZpbmUgRUwzX1NVU1BFTkQKKyNlbmRpZgorCiAjaWZkZWYgRUwzX0RFQlVHCiBzdGF0aWMgaW50IGVsM19kZWJ1ZyA9IEVMM19ERUJVRzsKICNlbHNlCkBAIC0xNzQsOSArMTc4LDYgQEAKIAkvKiBza2Igc2VuZC1xdWV1ZSAqLwogCWludCBoZWFkLCBzaXplOwogCXN0cnVjdCBza19idWZmICpxdWV1ZVtTS0JfUVVFVUVfU0laRV07Ci0jaWZkZWYgQ09ORklHX1BNX0xFR0FDWQotCXN0cnVjdCBwbV9kZXYgKnBtZGV2OwotI2VuZGlmCiAJZW51bSB7CiAJCUVMM19NQ0EsCiAJCUVMM19QTlAsCkBAIC0yMDEsMTEgKzIwMiwxNSBAQAogc3RhdGljIHZvaWQgZWwzX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbDNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwotI2lmZGVmIENPTkZJR19QTV9MRUdBQ1kKLXN0YXRpYyBpbnQgZWwzX3N1c3BlbmQoc3RydWN0IHBtX2RldiAqcGRldik7Ci1zdGF0aWMgaW50IGVsM19yZXN1bWUoc3RydWN0IHBtX2RldiAqcGRldik7Ci1zdGF0aWMgaW50IGVsM19wbV9jYWxsYmFjayhzdHJ1Y3QgcG1fZGV2ICpwZGV2LCBwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSk7CisjaWZkZWYgRUwzX1NVU1BFTkQKK3N0YXRpYyBpbnQgZWwzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqLCBwbV9tZXNzYWdlX3QpOworc3RhdGljIGludCBlbDNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKik7CisjZWxzZQorI2RlZmluZSBlbDNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGVsM19yZXN1bWUgTlVMTAogI2VuZGlmCisKKwogLyogZ2VuZXJpYyBkZXZpY2UgcmVtb3ZlIGZvciBhbGwgZGV2aWNlIHR5cGVzICovCiAjaWYgZGVmaW5lZChDT05GSUdfRUlTQSkgfHwgZGVmaW5lZChDT05GSUdfTUNBKQogc3RhdGljIGludCBlbDNfZGV2aWNlX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKQEAgLTIyOSw3ICsyMzQsOSBAQAogCQkuZHJpdmVyICAgPSB7CiAJCQkJLm5hbWUgICAgPSAiM2M1MDkiLAogCQkJCS5wcm9iZSAgID0gZWwzX2Vpc2FfcHJvYmUsCi0JCQkJLnJlbW92ZSAgPSBfX2RldmV4aXRfcCAoZWwzX2RldmljZV9yZW1vdmUpCisJCQkJLnJlbW92ZSAgPSBfX2RldmV4aXRfcCAoZWwzX2RldmljZV9yZW1vdmUpLAorCQkJCS5zdXNwZW5kID0gZWwzX3N1c3BlbmQsCisJCQkJLnJlc3VtZSAgPSBlbDNfcmVzdW1lLAogCQl9CiB9OwogI2VuZGlmCkBAIC0yNjIsNiArMjY5LDggQEAKIAkJCQkuYnVzID0gJm1jYV9idXNfdHlwZSwKIAkJCQkucHJvYmUgPSBlbDNfbWNhX3Byb2JlLAogCQkJCS5yZW1vdmUgPSBfX2RldmV4aXRfcChlbDNfZGV2aWNlX3JlbW92ZSksCisJCQkJLnN1c3BlbmQgPSBlbDNfc3VzcGVuZCwKKwkJCQkucmVzdW1lICA9IGVsM19yZXN1bWUsCiAJCX0sCiB9OwogI2VuZGlmIC8qIENPTkZJR19NQ0EgKi8KQEAgLTM2MiwxMCArMzcxLDYgQEAKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCSh2b2lkKSBscDsJCQkJLyogS2VlcCBnY2MgcXVpZXQuLi4gKi8KLSNpZmRlZiBDT05GSUdfUE1fTEVHQUNZCi0JaWYgKGxwLT5wbWRldikKLQkJcG1fdW5yZWdpc3RlcihscC0+cG1kZXYpOwotI2VuZGlmCiAjaWYgZGVmaW5lZChfX0lTQVBOUF9fKQogCWlmIChscC0+dHlwZSA9PSBFTDNfUE5QKQogCQlwbnBfZGV2aWNlX2RldGFjaCh0b19wbnBfZGV2KGxwLT5kZXYpKTsKQEAgLTU3MiwxNiArNTc3LDYgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDE7CiAKLSNpZmRlZiBDT05GSUdfUE1fTEVHQUNZCi0JLyogcmVnaXN0ZXIgcG93ZXIgbWFuYWdlbWVudCAqLwotCWxwLT5wbWRldiA9IHBtX3JlZ2lzdGVyKFBNX0lTQV9ERVYsIGNhcmRfaWR4LCBlbDNfcG1fY2FsbGJhY2spOwotCWlmIChscC0+cG1kZXYpIHsKLQkJc3RydWN0IHBtX2RldiAqcDsKLQkJcCA9IGxwLT5wbWRldjsKLQkJcC0+ZGF0YSA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldjsKLQl9Ci0jZW5kaWYKLQogCWVsM19jYXJkcysrOwogCWxwLT5uZXh0X2RldiA9IGVsM19yb290X2RldjsKIAllbDNfcm9vdF9kZXYgPSBkZXY7CkBAIC0xNDgwLDIwICsxNDc1LDE3IEBACiB9CiAKIC8qIFBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KLSNpZmRlZiBDT05GSUdfUE1fTEVHQUNZCisjaWZkZWYgRUwzX1NVU1BFTkQKIAogc3RhdGljIGludAotZWwzX3N1c3BlbmQoc3RydWN0IHBtX2RldiAqcGRldikKK2VsM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGVsM19wcml2YXRlICpscDsKIAlpbnQgaW9hZGRyOwogCQotCWlmICghcGRldiAmJiAhcGRldi0+ZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilwZGV2LT5kYXRhOworCWRldiA9IHBkZXYtPmRyaXZlcl9kYXRhOwogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIApAQCAtMTUxMCwxNyArMTUwMiwxNCBAQAogfQogCiBzdGF0aWMgaW50Ci1lbDNfcmVzdW1lKHN0cnVjdCBwbV9kZXYgKnBkZXYpCitlbDNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKnBkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBlbDNfcHJpdmF0ZSAqbHA7CiAJaW50IGlvYWRkcjsKIAkKLQlpZiAoIXBkZXYgJiYgIXBkZXYtPmRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopcGRldi0+ZGF0YTsKKwlkZXYgPSBwZGV2LT5kcml2ZXJfZGF0YTsKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKQEAgLTE1MzYsMjAgKzE1MjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1lbDNfcG1fY2FsbGJhY2soc3RydWN0IHBtX2RldiAqcGRldiwgcG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpCi17Ci0Jc3dpdGNoIChycXN0KSB7Ci0JCWNhc2UgUE1fU1VTUEVORDoKLQkJCXJldHVybiBlbDNfc3VzcGVuZChwZGV2KTsKLQotCQljYXNlIFBNX1JFU1VNRToKLQkJCXJldHVybiBlbDNfcmVzdW1lKHBkZXYpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QTV9MRUdBQ1kgKi8KKyNlbmRpZiAvKiBFTDNfU1VTUEVORCAqLwogCiAvKiBQYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIHBhc3NlZCBpbnRvIHRoZSBtb2R1bGUuICovCiBzdGF0aWMgaW50IGRlYnVnID0gLTE7CkBAIC0xNTc0LDYgKzE1NTAsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBlbDNfaW5pdF9tb2R1bGUodm9pZCkKIHsKKwlpbnQgcmV0ID0gMDsKIAllbDNfY2FyZHMgPSAwOwogCiAJaWYgKGRlYnVnID49IDApCkBAIC0xNTg5LDE0ICsxNTY2LDE2IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0VJU0EKLQlpZiAoZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKCZlbDNfZWlzYV9kcml2ZXIpIDwgMCkgewotCQllaXNhX2RyaXZlcl91bnJlZ2lzdGVyICgmZWwzX2Vpc2FfZHJpdmVyKTsKLQl9CisJcmV0ID0gZWlzYV9kcml2ZXJfcmVnaXN0ZXIoJmVsM19laXNhX2RyaXZlcik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUNBCi0JbWNhX3JlZ2lzdGVyX2RyaXZlcigmZWwzX21jYV9kcml2ZXIpOworCXsKKwkJaW50IGVyciA9IG1jYV9yZWdpc3Rlcl9kcml2ZXIoJmVsM19tY2FfZHJpdmVyKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gZXJyOworCX0KICNlbmRpZgotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBlbDNfY2xlYW51cF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTIzLmMgYi9kcml2ZXJzL25ldC8zYzUyMy5jCmluZGV4IDllMWZlMmUuLmI0MDg4NWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyMy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKQEAgLTEwNSw2ICsxMDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21jYS1sZWdhY3kuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC02NTgsNyArNjU5LDcgQEAKIAogCXMgPSBqaWZmaWVzOwkJLyogd2FybmluZzogb25seSBhY3RpdmUgd2l0aCBpbnRlcnJ1cHRzIG9uICEhICovCiAJd2hpbGUgKCEoY2ZnX2NtZC0+Y21kX3N0YXR1cyAmIFNUQVRfQ09NUEwpKSB7Ci0JCWlmIChqaWZmaWVzIC0gcyA+IDMwKkhaLzEwMCkKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcyArIDMwKkhaLzEwMCkpCiAJCQlicmVhazsKIAl9CiAKQEAgLTY4NCw3ICs2ODUsNyBAQAogCiAJcyA9IGppZmZpZXM7CiAJd2hpbGUgKCEoaWFzX2NtZC0+Y21kX3N0YXR1cyAmIFNUQVRfQ09NUEwpKSB7Ci0JCWlmIChqaWZmaWVzIC0gcyA+IDMwKkhaLzEwMCkKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcyArIDMwKkhaLzEwMCkpCiAJCQlicmVhazsKIAl9CiAKQEAgLTcwOSw3ICs3MTAsNyBAQAogCiAJcyA9IGppZmZpZXM7CiAJd2hpbGUgKCEodGRyX2NtZC0+Y21kX3N0YXR1cyAmIFNUQVRfQ09NUEwpKSB7Ci0JCWlmIChqaWZmaWVzIC0gcyA+IDMwKkhaLzEwMCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzICsgMzAqSFovMTAwKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVkIFByb2JsZW1zIHdoaWxlIHJ1bm5pbmcgdGhlIFREUi5cbiIsIGRldi0+bmFtZSwgX19MSU5FX18pOwogCQkJcmVzdWx0ID0gMTsKIAkJCWJyZWFrOwpAQCAtNzk4LDcgKzc5OSw3IEBACiAJCQllbG1jX2lkX2F0dG41ODYoKTsKIAkJCXMgPSBqaWZmaWVzOwogCQkJd2hpbGUgKCEobWNfY21kLT5jbWRfc3RhdHVzICYgU1RBVF9DT01QTCkpIHsKLQkJCQlpZiAoamlmZmllcyAtIHMgPiAzMCpIWi8xMDApCisJCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcyArIDMwKkhaLzEwMCkpCiAJCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKCEobWNfY21kLT5jbWRfc3RhdHVzICYgU1RBVF9DT01QTCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTl4LmMgYi9kcml2ZXJzL25ldC8zYzU5eC5jCmluZGV4IDdmNDcxMjQuLmQzMzkzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtMjU4LDYgKzI1OCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vpc2EuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgkJCS8qIEZvciBOUl9JUlFTIG9ubHkuICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTg0MSw3ICs4NDIsNyBAQAogCVhDVlJfMTAwYmFzZUZ4LCBYQ1ZSX01JST02LCBYQ1ZSX05XQVk9OCwgWENWUl9FeHRNSUk9OSwgWENWUl9EZWZhdWx0PTEwLAogfTsKIAotc3RhdGljIHN0cnVjdCBtZWRpYV90YWJsZSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX3RhYmxlIHsKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGludCBtZWRpYV9iaXRzOjE2LAkJLyogQml0cyB0byBzZXQgaW4gV240X01lZGlhIHJlZ2lzdGVyLiAqLwogCQltYXNrOjgsCQkJCQkJLyogVGhlIHRyYW5zY2VpdmVyLXByZXNlbnQgYml0IGluIFduM19Db25maWcuKi8KQEAgLTEwOTUsMTQgKzEwOTYsMTggQEAKIAlpbnQgb3JpZ19jYXJkc19mb3VuZCA9IHZvcnRleF9jYXJkc19mb3VuZDsKIAogI2lmZGVmIENPTkZJR19FSVNBCi0JaWYgKGVpc2FfZHJpdmVyX3JlZ2lzdGVyICgmdm9ydGV4X2Vpc2FfZHJpdmVyKSA+PSAwKSB7Ci0JCQkvKiBCZWNhdXNlIG9mIHRoZSB3YXkgRUlTQSBidXMgaXMgcHJvYmVkLCB3ZSBjYW5ub3QgYXNzdW1lCi0JCQkgKiBhbnkgZGV2aWNlIGhhdmUgYmVlbiBmb3VuZCB3aGVuIHdlIGV4aXQgZnJvbQotCQkJICogZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKHRoZSBidXMgcm9vdCBkcml2ZXIgbWF5IG5vdCBiZQotCQkJICogaW5pdGlhbGl6ZWQgeWV0KS4gU28gd2UgYmxpbmRseSBhc3N1bWUgc29tZXRoaW5nIHdhcwotCQkJICogZm91bmQsIGFuZCBsZXQgdGhlIHN5c2ZzIG1hZ2ljIGhhcHBlbmQuLi4gKi8KLQkJCQotCQkJZWlzYV9mb3VuZCA9IDE7CisJaW50IGVycjsKKworCWVyciA9IGVpc2FfZHJpdmVyX3JlZ2lzdGVyICgmdm9ydGV4X2Vpc2FfZHJpdmVyKTsKKwlpZiAoIWVycikgeworCQkvKgorCQkgKiBCZWNhdXNlIG9mIHRoZSB3YXkgRUlTQSBidXMgaXMgcHJvYmVkLCB3ZSBjYW5ub3QgYXNzdW1lCisJCSAqIGFueSBkZXZpY2UgaGF2ZSBiZWVuIGZvdW5kIHdoZW4gd2UgZXhpdCBmcm9tCisJCSAqIGVpc2FfZHJpdmVyX3JlZ2lzdGVyICh0aGUgYnVzIHJvb3QgZHJpdmVyIG1heSBub3QgYmUKKwkJICogaW5pdGlhbGl6ZWQgeWV0KS4gU28gd2UgYmxpbmRseSBhc3N1bWUgc29tZXRoaW5nIHdhcworCQkgKiBmb3VuZCwgYW5kIGxldCB0aGUgc3lzZnMgbWFnaWMgaGFwcGVuZC4uLgorCQkgKi8KKwkJZWlzYV9mb3VuZCA9IDE7CiAJfQogI2VuZGlmCiAJCkBAIC0xNDQ1LDcgKzE0NTAsNyBAQAogCX0KIAogCXsKLQkJc3RhdGljIGNvbnN0IGNoYXIgKiByYW1fc3BsaXRbXSA9IHsiNTozIiwgIjM6MSIsICIxOjEiLCAiMzo1In07CisJCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmFtX3NwbGl0W10gPSB7IjU6MyIsICIzOjEiLCAiMToxIiwgIjM6NSJ9OwogCQl1bnNpZ25lZCBpbnQgY29uZmlnOwogCQlFTDNXSU5ET1coMyk7CiAJCXZwLT5hdmFpbGFibGVfbWVkaWEgPSBpb3JlYWQxNihpb2FkZHIgKyBXbjNfT3B0aW9ucyk7CkBAIC0yNzI0LDcgKzI3MjksNyBAQAogCQkJc2tiID0gZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaKTsKIAkJCWlmIChza2IgPT0gTlVMTCkgewogCQkJCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfamlmOwotCQkJCWlmICgoamlmZmllcyAtIGxhc3RfamlmKSA+IDEwICogSFopIHsKKwkJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X2ppZiArIDEwICogSFopKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtZW1vcnkgc2hvcnRhZ2VcbiIsIGRldi0+bmFtZSk7CiAJCQkJCWxhc3RfamlmID0gamlmZmllczsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC83OTkwLmMgYi9kcml2ZXJzL25ldC83OTkwLmMKaW5kZXggMThiMDI3ZS4uODY2MzNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvNzk5MC5jCisrKyBiL2RyaXZlcnMvbmV0Lzc5OTAuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAvKiBVc2VkIGZvciB0aGUgdGVtcG9yYWwgaW5ldCBlbnRyaWVzIGFuZCByb3V0aW5nICovCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IGY4MjJjZDMuLmNlOTk4NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC0xMTE4LDEzICsxMTE4LDE4IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyB2b2lkIGNwX2luaXRfcmluZ3NfaW5kZXggKHN0cnVjdCBjcF9wcml2YXRlICpjcCkKK3sKKwljcC0+cnhfdGFpbCA9IDA7CisJY3AtPnR4X2hlYWQgPSBjcC0+dHhfdGFpbCA9IDA7Cit9CisKIHN0YXRpYyBpbnQgY3BfaW5pdF9yaW5ncyAoc3RydWN0IGNwX3ByaXZhdGUgKmNwKQogewogCW1lbXNldChjcC0+dHhfcmluZywgMCwgc2l6ZW9mKHN0cnVjdCBjcF9kZXNjKSAqIENQX1RYX1JJTkdfU0laRSk7CiAJY3AtPnR4X3JpbmdbQ1BfVFhfUklOR19TSVpFIC0gMV0ub3B0czEgPSBjcHVfdG9fbGUzMihSaW5nRW5kKTsKIAotCWNwLT5yeF90YWlsID0gMDsKLQljcC0+dHhfaGVhZCA9IGNwLT50eF90YWlsID0gMDsKKwljcF9pbml0X3JpbmdzX2luZGV4KGNwKTsKIAogCXJldHVybiBjcF9yZWZpbGxfcnggKGNwKTsKIH0KQEAgLTEyNzEsNyArMTI3Niw3IEBACiB9CiAjZW5kaWYgLyogQlJPS0VOICovCiAKLXN0YXRpYyBjaGFyIG1paV8yXzgxMzlfbWFwWzhdID0geworc3RhdGljIGNvbnN0IGNoYXIgbWlpXzJfODEzOV9tYXBbOF0gPSB7CiAJQmFzaWNNb2RlQ3RybCwKIAlCYXNpY01vZGVTdGF0dXMsCiAJMCwKQEAgLTE4ODYsMzAgKzE4OTEsMzAgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjcC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKGNwLT5wZGV2ICYmIGNwLT53b2xfZW5hYmxlZCkgewotCQlwY2lfc2F2ZV9zdGF0ZSAoY3AtPnBkZXYpOwotCQljcF9zZXRfZDNfc3RhdGUgKGNwKTsKLQl9CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCBjcC0+d29sX2VuYWJsZWQpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3BfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBjcF9wcml2YXRlICpjcDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKKwlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZXYgPSBwY2lfZ2V0X2RydmRhdGEgKHBkZXYpOwotCWNwICA9IG5ldGRldl9wcml2KGRldik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAwOwogCiAJbmV0aWZfZGV2aWNlX2F0dGFjaCAoZGV2KTsKLQkKLQlpZiAoY3AtPnBkZXYgJiYgY3AtPndvbF9lbmFibGVkKSB7Ci0JCXBjaV9zZXRfcG93ZXJfc3RhdGUgKGNwLT5wZGV2LCBQQ0lfRDApOwotCQlwY2lfcmVzdG9yZV9zdGF0ZSAoY3AtPnBkZXYpOwotCX0KLQkKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKKworCS8qIEZJWE1FOiBzaCp0IG1heSBoYXBwZW4gaWYgdGhlIFJ4IHJpbmcgYnVmZmVyIGlzIGRlcGxldGVkICovCisJY3BfaW5pdF9yaW5nc19pbmRleCAoY3ApOwogCWNwX2luaXRfaHcgKGNwKTsKIAluZXRpZl9zdGFydF9xdWV1ZSAoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IDJiZWFjNTUuLmZlYWU3ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCiAKIC8qIGluZGV4ZWQgYnkgYm9hcmRfdCwgYWJvdmUgKi8KLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAl1MzIgaHdfZmxhZ3M7CiB9IGJvYXJkX2luZm9bXSBfX2RldmluaXRkYXRhID0gewpAQCAtMTEzMSw3ICsxMTMxLDcgQEAKICAgIE5vIGV4dHJhIGRlbGF5IGlzIG5lZWRlZCB3aXRoIDMzTWh6IFBDSSwgYnV0IDY2TWh6IG1heSBjaGFuZ2UgdGhpcy4KICAqLwogCi0jZGVmaW5lIGVlcHJvbV9kZWxheSgpCVJUTF9SMzIoQ2ZnOTM0NikKKyNkZWZpbmUgZWVwcm9tX2RlbGF5KCkJKHZvaWQpUlRMX1IzMihDZmc5MzQ2KQogCiAvKiBUaGUgRUVQUk9NIGNvbW1hbmRzIGluY2x1ZGUgdGhlIGFsd2F5LXNldCBsZWFkaW5nIGJpdC4gKi8KICNkZWZpbmUgRUVfV1JJVEVfQ01ECSg1KQpAQCAtMTE5Miw3ICsxMTkyLDcgQEAKICNkZWZpbmUgbWRpb19kZWxheSgpCVJUTF9SOChDb25maWc0KQogCiAKLXN0YXRpYyBjaGFyIG1paV8yXzgxMzlfbWFwWzhdID0geworc3RhdGljIGNvbnN0IGNoYXIgbWlpXzJfODEzOV9tYXBbOF0gPSB7CiAJQmFzaWNNb2RlQ3RybCwKIAlCYXNpY01vZGVTdGF0dXMsCiAJMCwKQEAgLTE2MDUsNyArMTYwNSw3IEBACiAJaWYgKHRwLT53YXRjaGRvZ19maXJlZCkgewogCQl0cC0+d2F0Y2hkb2dfZmlyZWQgPSAwOwogCQlydGw4MTM5X3R4X3RpbWVvdXRfdGFzayhfZGF0YSk7Ci0JfSBlbHNlIGlmIChydG5sX3NobG9ja19ub3dhaXQoKSA9PSAwKSB7CisJfSBlbHNlIGlmIChydG5sX3RyeWxvY2soKSkgewogCQlydGw4MTM5X3RocmVhZF9pdGVyIChkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKIAkJcnRubF91bmxvY2sgKCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgyNTk2LmMgYi9kcml2ZXJzL25ldC84MjU5Ni5jCmluZGV4IDEzYjc0NWIuLmRhMGM4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgyNTk2LmMKKysrIGIvZHJpdmVycy9uZXQvODI1OTYuYwpAQCAtNjE0LDcgKzYxNCw3IEBACiBzdGF0aWMgaW50IGluaXRfaTU5Nl9tZW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaTU5Nl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSNpZiAhZGVmaW5lZChFTkFCTEVfTVZNRTE2eF9ORVQpICYmICFkZWZpbmVkKEVOQUJMRV9CVk1FNjAwMF9ORVQpCisjaWYgIWRlZmluZWQoRU5BQkxFX01WTUUxNnhfTkVUKSAmJiAhZGVmaW5lZChFTkFCTEVfQlZNRTYwMDBfTkVUKSB8fCBkZWZpbmVkKEVOQUJMRV9BUFJJQ09UKQogCXNob3J0IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGU0NWE4ZjkuLmUyMGI4NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtNjYsNyArNjYsNyBAQAogCSAgJ1RydW5raW5nJyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAnQm9uZGluZycgaW4gTGludXguCiAKIAkgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoCi0JICBwZXJmb21hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uCisJICBwZXJmb3JtYW5jZSBhbmQgaGlnaCBhdmFpbGFiaWxpdHkgb3BlcmF0aW9uLgogCiAJICBSZWZlciB0byA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQ+IGZvciBtb3JlCiAJICBpbmZvcm1hdGlvbi4KQEAgLTY5OCw4ICs2OTgsOCBAQAogCWRlcGVuZHMgb24gTkVUX1ZFTkRPUl8zQ09NICYmIChQQ0kgfHwgRUlTQSkKIAlzZWxlY3QgTUlJCiAJLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkcml2ZXIgc3VwcG9ydCBmb3IgYSBsYXJnZSBudW1iZXIgb2YgMTBtYnBzIGFuZAotCSAgMTAvMTAwbWJwcyBFSVNBLCBQQ0kgYW5kIFBDTUNJQSAzQ29tIG5ldHdvcmsgY2FyZHM6CisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGRyaXZlciBzdXBwb3J0IGZvciBhIGxhcmdlIG51bWJlciBvZiAxME1icHMgYW5kCisJICAxMC8xMDBNYnBzIEVJU0EsIFBDSSBhbmQgUENNQ0lBIDNDb20gbmV0d29yayBjYXJkczoKIAogCSAgIlZvcnRleCIgICAgKEZhc3QgRXRoZXJMaW5rIDNjNTkwLzNjNTkyLzNjNTk1LzNjNTk3KSBFSVNBIGFuZCBQQ0kKIAkgICJCb29tZXJhbmciIChFdGhlckxpbmsgWEwgM2M5MDAgb3IgM2M5MDUpICAgICAgICAgICAgUENJCkBAIC0xMDIxLDcgKzEwMjEsNyBAQAogCWRlcGVuZHMgb24gTkVUX0lTQQogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgb2YgdGhpcyB0eXBlLCBzYXkgWS4gVGhpcwotCSAgZHJpdmVyIHN1cHBvcnRzIGludGVsIGk4MjU5NXtGWCxUWH0gYmFzZWQgYm9hcmRzLiBOb3RlIGhvd2V2ZXIKKwkgIGRyaXZlciBzdXBwb3J0cyBJbnRlbCBpODI1OTV7RlgsVFh9IGJhc2VkIGJvYXJkcy4gTm90ZSBob3dldmVyCiAJICB0aGF0IHRoZSBFdGhlckV4cHJlc3MgUFJPLzEwMCBFdGhlcm5ldCBjYXJkIGhhcyBpdHMgb3duIHNlcGFyYXRlCiAJICBkcml2ZXIuICBQbGVhc2UgcmVhZCB0aGUgRXRoZXJuZXQtSE9XVE8sIGF2YWlsYWJsZSBmcm9tCiAJICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LgpAQCAtMTA4Nyw3ICsxMDg3LDggQEAKIAkgIHdpdGhvdXQgYSBzcGVjaWZpYyBkcml2ZXIgYXJlIGNvbXBhdGlibGUgd2l0aCBORTIwMDAuCiAKIAkgIElmIHlvdSBoYXZlIGEgUENJIE5FMjAwMCBjYXJkIGhvd2V2ZXIsIHNheSBOIGhlcmUgYW5kIFkgdG8gIlBDSQotCSAgTkUyMDAwIHN1cHBvcnQiLCBhYm92ZS4gSWYgeW91IGhhdmUgYSBORTIwMDAgY2FyZCBhbmQgYXJlIHJ1bm5pbmcgb24KKwkgIE5FMjAwMCBhbmQgY2xvbmUgc3VwcG9ydCIgdW5kZXIgIkVJU0EsIFZMQiwgUENJIGFuZCBvbiBib2FyZAorCSAgY29udHJvbGxlcnMiIGJlbG93LiBJZiB5b3UgaGF2ZSBhIE5FMjAwMCBjYXJkIGFuZCBhcmUgcnVubmluZyBvbgogCSAgYW4gTUNBIHN5c3RlbSAoYSBidXMgc3lzdGVtIHVzZWQgb24gc29tZSBJQk0gUFMvMiBjb21wdXRlcnMgYW5kCiAJICBsYXB0b3BzKSwgc2F5IE4gaGVyZSBhbmQgWSB0byAiTkUvMiAobmUyMDAwIE1DQSB2ZXJzaW9uKSBzdXBwb3J0IiwKIAkgIGJlbG93LgpAQCAtMTIwNyw3ICsxMjA4LDcgQEAKIAloZWxwCiAJICBBZGRpdGlvbmFsIHJlY2VpdmUgc2tiIGhlYWRyb29tLiBOb3RlLCB0aGF0IGRyaXZlcgogCSAgd2lsbCBhbHdheXMgcmVzZXJ2ZSBhdCBsZWFzdCAyIGJ5dGVzIHRvIG1ha2UgSVAgaGVhZGVyCi0JICBhbGlnbmVkLCBzbyB1c3VhbHkgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGQgYW55IGFkZGl0aW9uYWwKKwkgIGFsaWduZWQsIHNvIHVzdWFsbHkgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGQgYW55IGFkZGl0aW9uYWwKIAkgIGhlYWRyb29tLgogCSAgCiAJICBJZiB1bnN1cmUsIHNldCB0byAwLgpAQCAtMTM3MSw4ICsxMzcyLDggQEAKIAkgIGNhbGxlZCBiNDQuCiAKIGNvbmZpZyBGT1JDRURFVEgKLQl0cmlzdGF0ZSAiUmV2ZXJzZSBFbmdpbmVlcmVkIG5Gb3JjZSBFdGhlcm5ldCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gTkVUX1BDSSAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMCisJdHJpc3RhdGUgIm5Gb3JjZSBFdGhlcm5ldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUX1BDSSAmJiBQQ0kKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjb250cm9sbGVyIG9mIHRoaXMgdHlwZSwgc2F5IFkgYW5kCiAJICByZWFkIHRoZSBFdGhlcm5ldC1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTE2MTMsMTEgKzE2MTQsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBGYXN0IEV0aGVybmV0IFBDSSBuZXR3b3JrIGNhcmRzIGJhc2VkIG9uCiAJICB0aGUgU2lTIDkwMCBhbmQgU2lTIDcwMTYgY2hpcHMuIFRoZSBTaVMgOTAwIGNvcmUgaXMgYWxzbyBlbWJlZGRlZCBpbgotCSAgU2lTIDYzMCBhbmQgU2lTIDU0MCBjaGlwc2V0cy4gIElmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSwgc2F5IFkgYW5kCi0JICByZWFkIHRoZSBFdGhlcm5ldC1IT1dUTywgYXZhaWxhYmxlIGF0Ci0JICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LiAgUGxlYXNlIHJlYWQKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaXM5MDAudHh0PiBhbmQgY29tbWVudHMgYXQgdGhlCi0JICBiZWdpbm5pbmcgb2YgPGZpbGU6ZHJpdmVycy9uZXQvc2lzOTAwLmM+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCSAgU2lTIDYzMCBhbmQgU2lTIDU0MCBjaGlwc2V0cy4KIAogCSAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBBTUQgNzlDOTAxIEhvbWVQTkEgc28gdGhhdCB5b3UgY2FuIHVzZQogCSAgeW91ciBwaG9uZSBsaW5lIGFzIGEgbmV0d29yayBjYWJsZS4KQEAgLTE5MTcsNyArMTkxNCw3IEBACiAJZGVwZW5kcyBvbiBFMTAwMAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBsZWdhY3kgcmVjZWl2ZSBwYXRoIGZvciBQQ0kgZXhwcmVzcwotCSAgaGFkd2FyZS4KKwkgIGhhcmR3YXJlLgogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKQEAgLTE5MzMsNyArMTkzMCw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBteXJpX3NidXMuICBUaGlzIGlzIHJlY29tbWVuZGVkLgogCiBjb25maWcgTlM4MzgyMAotCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdCBEUDgzODIwIHN1cHBvcnQiCisJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4MzgyMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4MzgyMCBzZXJpZXMKQEAgLTIxNzUsNiArMjE3Miw3IEBACiBjb25maWcgU1BJREVSX05FVAogCXRyaXN0YXRlICJTcGlkZXIgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgUFBDX0NFTEwKKwlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgY2hpcHMgcHJlc2VudCBvbiB0aGUKIAkgIENlbGwgUHJvY2Vzc29yLUJhc2VkIEJsYWRlcyBmcm9tIElCTS4KQEAgLTIxOTQsNiArMjE5Miw3IEBACiBjb25maWcgTVY2NDNYWF9FVEgKIAl0cmlzdGF0ZSAiTVYtNjQzWFggRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1PTUVOQ09fT0NFTE9UX0MgfHwgTU9NRU5DT19KQUdVQVJfQVRYIHx8IE1WNjQzNjAgfHwgTU9NRU5DT19PQ0VMT1RfMyB8fCBQUENfTVVMVElQTEFURk9STQorCXNlbGVjdCBNSUkKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBFdGhlcm5ldCBvbiB0aGUgTWFydmVsbCBNVjY0M1hYCiAJICBjaGlwc2V0IHdoaWNoIGlzIHVzZWQgaW4gdGhlIE1vbWVuY28gT2NlbG90IEMgYW5kIEphZ3VhciBBVFggYW5kCkBAIC0yNTEzLDcgKzI1MTIsNyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGUgcGFja2V0cyBwYXNzaW5nIG92ZXIKIAkgIFBQUCBpbnRlcmZhY2VzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGNvbnRyb2wgd2hpY2ggcGFja2V0cyBjb3VudCBhcwogCSAgYWN0aXZpdHkgKGkuZS4gd2hpY2ggcGFja2V0cyB3aWxsIHJlc2V0IHRoZSBpZGxlIHRpbWVyIG9yIGJyaW5nIHVwCi0JICBhIGRlbWFuZC1kaWFsbGVkIGxpbmspIGFuZCB3aGljaCBwYWNrZXRzIGFyZSB0byBiZSBkcm9wcGVkIGVudGlyZWx5LgorCSAgYSBkZW1hbmQtZGlhbGVkIGxpbmspIGFuZCB3aGljaCBwYWNrZXRzIGFyZSB0byBiZSBkcm9wcGVkIGVudGlyZWx5LgogCSAgWW91IG5lZWQgdG8gc2F5IFkgaGVyZSBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIHBhc3MtZmlsdGVyIGFuZAogCSAgYWN0aXZlLWZpbHRlciBvcHRpb25zIHRvIHBwcGQuCiAKQEAgLTI3MDEsOCArMjcwMCw4IEBACiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2hhcGVyLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAkgIEFuIGFsdGVybmF0aXZlIHRvIHRoaXMgdHJhZmZpYyBzaGFwZXIgaXMgdGhlIGV4cGVyaW1lbnRhbAotCSAgQ2xhc3MtQmFzZWQgUXVldWVpbmcgKENCUSkgc2NoZWR1bGluZyBzdXBwb3J0IHdoaWNoIHlvdSBnZXQgaWYgeW91Ci0JICBzYXkgWSB0byAiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nIiBhYm92ZS4KKwkgIENsYXNzLUJhc2VkIFF1ZXVpbmcgKENCUSkgc2NoZWR1bGluZyBzdXBwb3J0IHdoaWNoIHlvdSBnZXQgaWYgeW91CisJICBzYXkgWSB0byAiUW9TIGFuZC9vciBmYWlyIHF1ZXVpbmciIGFib3ZlLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzaGFwZXIuICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCAwMGU3MmIxLi5iOTA0NjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtNTgsOCArNTgsOCBAQAogb2JqLSQoQ09ORklHX0ZFQUxOWCkgKz0gZmVhbG54Lm8KIG9iai0kKENPTkZJR19USUdPTjMpICs9IHRnMy5vCiBvYmotJChDT05GSUdfQk5YMikgKz0gYm54Mi5vCi1zcGlkZXJuZXQteSArPSBzcGlkZXJfbmV0Lm8gc3BpZGVyX25ldF9ldGh0b29sLm8gc3VuZ2VtX3BoeS5vCi1vYmotJChDT05GSUdfU1BJREVSX05FVCkgKz0gc3BpZGVybmV0Lm8KK3NwaWRlcm5ldC15ICs9IHNwaWRlcl9uZXQubyBzcGlkZXJfbmV0X2V0aHRvb2wubworb2JqLSQoQ09ORklHX1NQSURFUl9ORVQpICs9IHNwaWRlcm5ldC5vIHN1bmdlbV9waHkubwogb2JqLSQoQ09ORklHX1RDMzU4MTUpICs9IHRjMzU4MTUubwogb2JqLSQoQ09ORklHX1NLR0UpICs9IHNrZ2Uubwogb2JqLSQoQ09ORklHX1NLWTIpICs9IHNreTIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYTIwNjUuYyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKaW5kZXggOGU1MzhhNi4uNzliYjU2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYTIwNjUuYworKysgYi9kcml2ZXJzL25ldC9hMjA2NS5jCkBAIC04MjksNyArODI5LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYTIwNjVfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gem9ycm9fbW9kdWxlX2luaXQoJmEyMDY1X2RyaXZlcik7CisJcmV0dXJuIHpvcnJvX3JlZ2lzdGVyX2RyaXZlcigmYTIwNjVfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGEyMDY1X2NsZWFudXBfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcG5lLmMgYi9kcml2ZXJzL25ldC9hcG5lLmMKaW5kZXggYTk0MjE2Yi4uYjk4MjBiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBuZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FwbmUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0yMTYsNyArMjE3LDcgQEAKIAlvdXRiKGluYihpb2FkZHIgKyBORV9SRVNFVCksIGlvYWRkciArIE5FX1JFU0VUKTsKIAogCXdoaWxlICgoaW5iKGlvYWRkciArIE5FX0VOMF9JU1IpICYgRU5JU1JfUkVTRVQpID09IDApCi0JCWlmIChqaWZmaWVzIC0gcmVzZXRfc3RhcnRfdGltZSA+IDIqSFovMTAwKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHJlc2V0X3N0YXJ0X3RpbWUgKyAyKkhaLzEwMCkpIHsKIAkJCXByaW50aygiIG5vdCBmb3VuZCAobm8gcmVzZXQgYWNrKS5cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTM4Miw3ICszODMsNyBAQAogCiAgICAgLyogVGhpcyBjaGVjayBfc2hvdWxkX25vdF8gYmUgbmVjZXNzYXJ5LCBvbWl0IGV2ZW50dWFsbHkuICovCiAgICAgd2hpbGUgKChpbmIoTkVfQkFTRStORV9FTjBfSVNSKSAmIEVOSVNSX1JFU0VUKSA9PSAwKQotCWlmIChqaWZmaWVzIC0gcmVzZXRfc3RhcnRfdGltZSA+IDIqSFovMTAwKSB7CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcmVzZXRfc3RhcnRfdGltZSArIDIqSFovMTAwKSkgewogCSAgICBwcmludGsoIiVzOiBuZV9yZXNldF84MzkwKCkgZGlkIG5vdCBjb21wbGV0ZS5cbiIsIGRldi0+bmFtZSk7CiAJICAgIGJyZWFrOwogCX0KQEAgLTUzMCw3ICs1MzEsNyBAQAogICAgIGRtYV9zdGFydCA9IGppZmZpZXM7CiAKICAgICB3aGlsZSAoKGluYihORV9CQVNFICsgTkVfRU4wX0lTUikgJiBFTklTUl9SREMpID09IDApCi0JaWYgKGppZmZpZXMgLSBkbWFfc3RhcnQgPiAyKkhaLzEwMCkgewkJLyogMjBtcyAqLworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRtYV9zdGFydCArIDIqSFovMTAwKSkgewkvKiAyMG1zICovCiAJCXByaW50aygiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgVHggUkRDLlxuIiwgZGV2LT5uYW1lKTsKIAkJYXBuZV9yZXNldF84MzkwKGRldik7CiAJCU5TODM5MF9pbml0KGRldiwxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvYXJjbmV0L0tjb25maWcKaW5kZXggOTQ4ZGUyNS4uNzI4NGNjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L0tjb25maWcKQEAgLTY4LDEwICs2OCwxMCBAQAogICAgICAgICAgIHBhY2tldCBpcyBzdHVmZmVkIHdpdGggYW4gZXh0cmEgNCBieXRlICJjb29raWUiIHdoaWNoIGRvZXNuJ3QKICAgICAgICAgICBhY3R1YWxseSBhcHBlYXIgb24gdGhlIG5ldHdvcmsuIEFmdGVyIHRyYW5zbWl0IHRoZSBkcml2ZXIgd2lsbCBzZW5kCiAgICAgICAgICAgYmFjayBhIHBhY2tldCB3aXRoIHByb3RvY29sIGJ5dGUgMCBjb250YWluaW5nIHRoZSBzdGF0dXMgb2YgdGhlCi0gICAgICAgICAgdHJhbnNtaXRpb246CisgICAgICAgICAgdHJhbnNtaXNzaW9uOgogICAgICAgICAgICAgIDA9bm8gaGFyZHdhcmUgYWNrbm93bGVkZ2UKICAgICAgICAgICAgICAxPWV4Y2Vzc2l2ZSBuYWsKLSAgICAgICAgICAgICAyPXRyYW5zbWl0aW9uIGFjY2VwdGVkIGJ5IHRoZSByZWNpZXZlciBoYXJkd2FyZQorICAgICAgICAgICAgIDI9dHJhbnNtaXNzaW9uIGFjY2VwdGVkIGJ5IHRoZSByZWNlaXZlciBoYXJkd2FyZQogCiAgICAgICAgICAgUmVjZWl2ZWQgcGFja2V0cyBhcmUgYWxzbyBzdHVmZmVkIHdpdGggdGhlIGV4dHJhIDQgYnl0ZXMgYnV0IGl0IHdpbGwKICAgICAgICAgICBiZSByYW5kb20gZGF0YS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmF3bW9kZS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMKaW5kZXggZTFlYTI5Yi4uZTc1NTVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMKQEAgLTQyLDcgKzQyLDcgQEAKIHN0YXRpYyBpbnQgcHJlcGFyZV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYXJjaGRyICpwa3QsIGludCBsZW5ndGgsCiAJCSAgICAgIGludCBidWZudW0pOwogCi1zdHJ1Y3QgQXJjUHJvdG8gcmF3bW9kZV9wcm90byA9CitzdGF0aWMgc3RydWN0IEFyY1Byb3RvIHJhd21vZGVfcHJvdG8gPQogewogCS5zdWZmaXgJCT0gJ3InLAogCS5tdHUJCT0gWE1UVSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmMtcmltaS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yaW1pLmMKaW5kZXggMzhjM2YwMy4uOGM4ZDZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yaW1pLmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yaW1pLmMKQEAgLTk3LDI1ICs5Nyw0NCBAQAogCQkgICAgICAgIm11c3Qgc3BlY2lmeSB0aGUgc2htZW0gYW5kIGlycSFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJaWYgKGRldi0+ZGV2X2FkZHJbMF0gPT0gMCkgeworCQlCVUdNU0coRF9OT1JNQUwsICJZb3UgbmVlZCB0byBzcGVjaWZ5IHlvdXIgY2FyZCdzIHN0YXRpb24gIgorCQkgICAgICAgIklEIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAkvKgotCSAqIEdyYWIgdGhlIG1lbW9yeSByZWdpb24gYXQgbWVtX3N0YXJ0IGZvciBCVUZGRVJfU0laRSBieXRlcy4KKwkgKiBHcmFiIHRoZSBtZW1vcnkgcmVnaW9uIGF0IG1lbV9zdGFydCBmb3IgTUlSUk9SX1NJWkUgYnl0ZXMuCiAJICogTGF0ZXIgaW4gYXJjcmltaV9mb3VuZCgpIHRoZSByZWFsIHNpemUgd2lsbCBiZSBkZXRlcm1pbmVkCiAJICogYW5kIHRoaXMgcmVzZXJ2ZSB3aWxsIGJlIHJlbGVhc2VkIGFuZCB0aGUgY29ycmVjdCBzaXplCiAJICogd2lsbCBiZSB0YWtlbi4KIAkgKi8KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPm1lbV9zdGFydCwgQlVGRkVSX1NJWkUsICJhcmNuZXQgKDkweHgpIikpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPm1lbV9zdGFydCwgTUlSUk9SX1NJWkUsICJhcmNuZXQgKDkweHgpIikpIHsKIAkJQlVHTVNHKERfTk9STUFMLCAiQ2FyZCBtZW1vcnkgYWxyZWFkeSBhbGxvY2F0ZWRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKGRldi0+ZGV2X2FkZHJbMF0gPT0gMCkgewotCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5tZW1fc3RhcnQsIEJVRkZFUl9TSVpFKTsKLQkJQlVHTVNHKERfTk9STUFMLCAiWW91IG5lZWQgdG8gc3BlY2lmeSB5b3VyIGNhcmQncyBzdGF0aW9uICIKLQkJICAgICAgICJJRCFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJcmV0dXJuIGFyY3JpbWlfZm91bmQoZGV2KTsKIH0KIAorc3RhdGljIGludCBjaGVja19taXJyb3IodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnA7CisJaW50IHJlcyA9IC0xOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYWRkciwgc2l6ZSwgImFyY25ldCAoOTB4eCkiKSkKKwkJcmV0dXJuIC0xOworCisJcCA9IGlvcmVtYXAoYWRkciwgc2l6ZSk7CisJaWYgKHApIHsKKwkJaWYgKHJlYWRiKHApID09IFRFU1R2YWx1ZSkKKwkJCXJlcyA9IDE7CisJCWVsc2UKKwkJCXJlcyA9IDA7CisJCWlvdW5tYXAocCk7CisJfQorCisJcmVsZWFzZV9tZW1fcmVnaW9uKGFkZHIsIHNpemUpOworCXJldHVybiByZXM7Cit9CiAKIC8qCiAgKiBTZXQgdXAgdGhlIHN0cnVjdCBuZXRfZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhcmQuICBDYWxsZWQgYWZ0ZXIKQEAgLTEyNSwxOSArMTQ0LDI4IEBACiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHA7CiAJdW5zaWduZWQgbG9uZyBmaXJzdF9taXJyb3IsIGxhc3RfbWlycm9yLCBzaG1lbTsKKwl2b2lkIF9faW9tZW0gKnA7CiAJaW50IG1pcnJvcl9zaXplOwogCWludCBlcnI7CiAKKwlwID0gaW9yZW1hcChkZXYtPm1lbV9zdGFydCwgTUlSUk9SX1NJWkUpOworCWlmICghcCkgeworCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5tZW1fc3RhcnQsIE1JUlJPUl9TSVpFKTsKKwkJQlVHTVNHKERfTk9STUFMLCAiQ2FuJ3QgaW9yZW1hcFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCS8qIHJlc2VydmUgdGhlIGlycSAqLwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmFyY25ldF9pbnRlcnJ1cHQsIDAsICJhcmNuZXQgKFJJTSBJKSIsIGRldikpIHsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+bWVtX3N0YXJ0LCBCVUZGRVJfU0laRSk7CisJCWlvdW5tYXAocCk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPm1lbV9zdGFydCwgTUlSUk9SX1NJWkUpOwogCQlCVUdNU0coRF9OT1JNQUwsICJDYW4ndCBnZXQgSVJRICVkIVxuIiwgZGV2LT5pcnEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlzaG1lbSA9IGRldi0+bWVtX3N0YXJ0OwotCWlzYV93cml0ZWIoVEVTVHZhbHVlLCBzaG1lbSk7Ci0JaXNhX3dyaXRlYihkZXYtPmRldl9hZGRyWzBdLCBzaG1lbSArIDEpOwkvKiBhY3R1YWxseSB0aGUgbm9kZSBJRCAqLworCXdyaXRlYihURVNUdmFsdWUsIHApOworCXdyaXRlYihkZXYtPmRldl9hZGRyWzBdLCBwICsgMSk7CS8qIGFjdHVhbGx5IHRoZSBub2RlIElEICovCiAKIAkvKiBmaW5kIHRoZSByZWFsIHNoYXJlZCBtZW1vcnkgc3RhcnQvZW5kIHBvaW50cywgaW5jbHVkaW5nIG1pcnJvcnMgKi8KIApAQCAtMTQ2LDE3ICsxNzQsMTggQEAKIAkgKiAyayAob3IgdGhlcmUgYXJlIG5vIG1pcnJvcnMgYXQgYWxsKSBidXQgb24gc29tZSwgaXQncyA0ay4KIAkgKi8KIAltaXJyb3Jfc2l6ZSA9IE1JUlJPUl9TSVpFOwotCWlmIChpc2FfcmVhZGIoc2htZW0pID09IFRFU1R2YWx1ZQotCSAgICAmJiBpc2FfcmVhZGIoc2htZW0gLSBtaXJyb3Jfc2l6ZSkgIT0gVEVTVHZhbHVlCi0JICAgICYmIGlzYV9yZWFkYihzaG1lbSAtIDIgKiBtaXJyb3Jfc2l6ZSkgPT0gVEVTVHZhbHVlKQotCQltaXJyb3Jfc2l6ZSAqPSAyOworCWlmIChyZWFkYihwKSA9PSBURVNUdmFsdWUKKwkgICAgJiYgY2hlY2tfbWlycm9yKHNobWVtIC0gTUlSUk9SX1NJWkUsIE1JUlJPUl9TSVpFKSA9PSAwCisJICAgICYmIGNoZWNrX21pcnJvcihzaG1lbSAtIDIgKiBNSVJST1JfU0laRSwgTUlSUk9SX1NJWkUpID09IDEpCisJCW1pcnJvcl9zaXplID0gMiAqIE1JUlJPUl9TSVpFOwogCi0JZmlyc3RfbWlycm9yID0gbGFzdF9taXJyb3IgPSBzaG1lbTsKLQl3aGlsZSAoaXNhX3JlYWRiKGZpcnN0X21pcnJvcikgPT0gVEVTVHZhbHVlKQorCWZpcnN0X21pcnJvciA9IHNobWVtIC0gbWlycm9yX3NpemU7CisJd2hpbGUgKGNoZWNrX21pcnJvcihmaXJzdF9taXJyb3IsIG1pcnJvcl9zaXplKSA9PSAxKQogCQlmaXJzdF9taXJyb3IgLT0gbWlycm9yX3NpemU7CiAJZmlyc3RfbWlycm9yICs9IG1pcnJvcl9zaXplOwogCi0Jd2hpbGUgKGlzYV9yZWFkYihsYXN0X21pcnJvcikgPT0gVEVTVHZhbHVlKQorCWxhc3RfbWlycm9yID0gc2htZW0gKyBtaXJyb3Jfc2l6ZTsKKwl3aGlsZSAoY2hlY2tfbWlycm9yKGxhc3RfbWlycm9yLCBtaXJyb3Jfc2l6ZSkgPT0gMSkKIAkJbGFzdF9taXJyb3IgKz0gbWlycm9yX3NpemU7CiAJbGFzdF9taXJyb3IgLT0gbWlycm9yX3NpemU7CiAKQEAgLTE4MSw3ICsyMTAsOCBAQAogCSAqIHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS4gIFRoZXJlIGlzIGEgVkVSWSBzbGltIGNoYW5jZSB0aGlzIGNvdWxkCiAJICogZmFpbC4KIAkgKi8KLQlyZWxlYXNlX21lbV9yZWdpb24oc2htZW0sIEJVRkZFUl9TSVpFKTsKKwlpb3VubWFwKHApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihzaG1lbSwgTUlSUk9SX1NJWkUpOwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGRldi0+bWVtX3N0YXJ0LAogCQkJCWRldi0+bWVtX2VuZCAtIGRldi0+bWVtX3N0YXJ0ICsgMSwKIAkJCQkiYXJjbmV0ICg5MHh4KSIpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKaW5kZXggMTJlZjUyYy4uNjRlMmNhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FyY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogLyogImRvIG5vdGhpbmciIGZ1bmN0aW9ucyBmb3IgcHJvdG9jb2wgZHJpdmVycyAqLwogc3RhdGljIHZvaWQgbnVsbF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVmbnVtLApAQCAtNjEsNiArNjIsNyBAQAogc3RhdGljIGludCBudWxsX3ByZXBhcmVfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGFyY2hkciAqcGt0LAogCQkJICAgaW50IGxlbmd0aCwgaW50IGJ1Zm51bSk7CiAKK3N0YXRpYyB2b2lkIGFyY25ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVmbnVtKTsKIAogLyoKICAqIG9uZSBBcmNQcm90byBwZXIgcG9zc2libGUgcHJvdG8gSUQuICBOb25lIG9mIHRoZSBlbGVtZW50cyBvZgpAQCAtNzEsNyArNzMsNyBAQAogIHN0cnVjdCBBcmNQcm90byAqYXJjX3Byb3RvX21hcFsyNTZdLCAqYXJjX3Byb3RvX2RlZmF1bHQsCiAgICAqYXJjX2JjYXN0X3Byb3RvLCAqYXJjX3Jhd19wcm90bzsKIAotc3RydWN0IEFyY1Byb3RvIGFyY19wcm90b19udWxsID0KK3N0YXRpYyBzdHJ1Y3QgQXJjUHJvdG8gYXJjX3Byb3RvX251bGwgPQogewogCS5zdWZmaXgJCT0gJz8nLAogCS5tdHUJCT0gWE1UVSwKQEAgLTkwLDcgKzkyLDYgQEAKIEVYUE9SVF9TWU1CT0woYXJjX3Byb3RvX2RlZmF1bHQpOwogRVhQT1JUX1NZTUJPTChhcmNfYmNhc3RfcHJvdG8pOwogRVhQT1JUX1NZTUJPTChhcmNfcmF3X3Byb3RvKTsKLUVYUE9SVF9TWU1CT0woYXJjX3Byb3RvX251bGwpOwogRVhQT1JUX1NZTUJPTChhcmNuZXRfdW5yZWdpc3Rlcl9wcm90byk7CiBFWFBPUlRfU1lNQk9MKGFyY25ldF9kZWJ1Zyk7CiBFWFBPUlRfU1lNQk9MKGFsbG9jX2FyY2Rldik7CkBAIC0xMTgsNyArMTE5LDcgQEAKIAogCWFyY25ldF9kZWJ1ZyA9IGRlYnVnOwogCi0JcHJpbnRrKFZFUlNJT04pOworCXByaW50aygiYXJjbmV0IGxvYWRlZC5cbiIpOwogCiAjaWZkZWYgQUxQSEFfV0FSTklORwogCUJVR0xWTChEX0VYVFJBKSB7CkBAIC0xNzgsOCArMTc5LDggQEAKICAqIER1bXAgdGhlIGNvbnRlbnRzIG9mIGFuIEFSQ25ldCBidWZmZXIKICAqLwogI2lmIChBUkNORVRfREVCVUdfTUFYICYgKERfUlggfCBEX1RYKSkKLXZvaWQgYXJjbmV0X2R1bXBfcGFja2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBidWZudW0sIGNoYXIgKmRlc2MsCi0JCQlpbnQgdGFrZV9hcmNuZXRfbG9jaykKK3N0YXRpYyB2b2lkIGFyY25ldF9kdW1wX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVmbnVtLAorCQkJICAgICAgIGNoYXIgKmRlc2MsIGludCB0YWtlX2FyY25ldF9sb2NrKQogewogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gZGV2LT5wcml2OwogCWludCBpLCBsZW5ndGg7CkBAIC0yMDgsNyArMjA5LDEwIEBACiAKIH0KIAotRVhQT1JUX1NZTUJPTChhcmNuZXRfZHVtcF9wYWNrZXQpOworI2Vsc2UKKworI2RlZmluZSBhcmNuZXRfZHVtcF9wYWNrZXQoZGV2LCBidWZudW0sIGRlc2MsdGFrZV9hcmNuZXRfbG9jaykgZG8geyB9IHdoaWxlICgwKQorCiAjZW5kaWYKIAogCkBAIC03MzMsNyArNzM3LDcgQEAKIAkKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKGppZmZpZXMgLSBscC0+bGFzdF90aW1lb3V0ID4gMTAqSFopIHsKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBscC0+bGFzdF90aW1lb3V0ICsgMTAqSFopKSB7CiAJCUJVR01TRyhEX0VYVFJBLCAidHggdGltZWQgb3V0JXMgKHN0YXR1cz0lWGgsIGludG1hc2s9JVhoLCBkZXN0PSUwMlhoKVxuIiwKIAkJICAgICAgIG1zZywgc3RhdHVzLCBscC0+aW50bWFzaywgbHAtPmxhc3R0cmFuc19kZXN0KTsKIAkJbHAtPmxhc3RfdGltZW91dCA9IGppZmZpZXM7CkBAIC05OTYsNyArMTAwMCw3IEBACiAgKiBUaGlzIGlzIGEgZ2VuZXJpYyBwYWNrZXQgcmVjZWl2ZXIgdGhhdCBjYWxscyBhcmNuZXQ/P19yeCBkZXBlbmRpbmcgb24gdGhlCiAgKiBwcm90b2NvbCBJRCBmb3VuZC4KICAqLwotdm9pZCBhcmNuZXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1Zm51bSkKK3N0YXRpYyB2b2lkIGFyY25ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVmbnVtKQogewogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gZGV2LT5wcml2OwogCXN0cnVjdCBhcmNoZHIgcGt0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTkweHguYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb205MHh4LmMKaW5kZXggNmMyYzliOS4uNDMxNTBiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTkweHguYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tOTB4eC5jCkBAIC01Myw3ICs1Myw3IEBACiAKIAogLyogSW50ZXJuYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCi1zdGF0aWMgaW50IGNvbTkweHhfZm91bmQoaW50IGlvYWRkciwgaW50IGFpcnEsIHVfbG9uZyBzaG1lbSk7CitzdGF0aWMgaW50IGNvbTkweHhfZm91bmQoaW50IGlvYWRkciwgaW50IGFpcnEsIHVfbG9uZyBzaG1lbSwgdm9pZCBfX2lvbWVtICopOwogc3RhdGljIHZvaWQgY29tOTB4eF9jb21tYW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb21tYW5kKTsKIHN0YXRpYyBpbnQgY29tOTB4eF9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBjb205MHh4X3NldG1hc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1hc2spOwpAQCAtMTE2LDE0ICsxMTYsMjYgQEAKIAl1bnNpZ25lZCBsb25nIGFpcnFtYXNrOwogCWludCBwb3J0c1soMHgzZjAgLSAweDIwMCkgLyAxNiArIDFdID0KIAl7MH07Ci0JdV9sb25nIHNobWVtc1soMHhGRjgwMCAtIDB4QTAwMDApIC8gMjA0OCArIDFdID0KLQl7MH07CisJdW5zaWduZWQgbG9uZyAqc2htZW1zOworCXZvaWQgX19pb21lbSAqKmlvbWVtOwogCWludCBudW1wb3J0cywgbnVtc2htZW1zLCAqcG9ydDsKIAl1X2xvbmcgKnA7CisJaW50IGluZGV4OwogCiAJaWYgKCFpbyAmJiAhaXJxICYmICFzaG1lbSAmJiAhKmRldmljZSAmJiBjb205MHh4X3NraXBfcHJvYmUpCiAJCXJldHVybjsKIAorCXNobWVtcyA9IGt6YWxsb2MoKCgweDEwMDAwLTB4YTAwMDApIC8gMHg4MDApICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJIEdGUF9LRVJORUwpOworCWlmICghc2htZW1zKQorCQlyZXR1cm47CisJaW9tZW0gPSBremFsbG9jKCgoMHgxMDAwMC0weGEwMDAwKSAvIDB4ODAwKSAqIHNpemVvZih2b2lkIF9faW9tZW0gKiksCisJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb21lbSkgeworCQlrZnJlZShzaG1lbXMpOworCQlyZXR1cm47CisJfQorCiAJQlVHTFZMKERfTk9STUFMKSBwcmludGsoVkVSU0lPTik7CiAKIAkvKiBzZXQgdXAgdGhlIGFycmF5cyB3aGVyZSB3ZSdsbCBzdG9yZSB0aGUgcG9zc2libGUgcHJvYmUgYWRkcmVzc2VzICovCkBAIC0xNzksNiArMTkxLDggQEAKIAogCWlmICghbnVtcG9ydHMpIHsKIAkJQlVHTVNHMihEX05PUk1BTCwgIlMxOiBObyBBUkNuZXQgY2FyZHMgZm91bmQuXG4iKTsKKwkJa2ZyZWUoc2htZW1zKTsKKwkJa2ZyZWUoaW9tZW0pOwogCQlyZXR1cm47CiAJfQogCS8qIFN0YWdlIDI6IHdlIGhhdmUgbm93IHJlc2V0IGFueSBwb3NzaWJsZSBBUkNuZXQgY2FyZHMsIHNvIHdlIGNhbid0CkBAIC0yMDIsOCArMjE2LDggQEAKIAkgKiAweEQxIGJ5dGUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBvciBhcmUgcmVhZC1vbmx5LgogCSAqLwogCW51bXByaW50ID0gLTE7Ci0JZm9yIChwID0gJnNobWVtc1swXTsgcCA8IHNobWVtcyArIG51bXNobWVtczsgcCsrKSB7Ci0JCXVfbG9uZyBwdHIgPSAqcDsKKwlmb3IgKGluZGV4ID0gMCwgcCA9ICZzaG1lbXNbMF07IGluZGV4IDwgbnVtc2htZW1zOyBwKyssIGluZGV4KyspIHsKKwkJdm9pZCBfX2lvbWVtICpiYXNlOwogCiAJCW51bXByaW50Kys7CiAJCW51bXByaW50ICU9IDg7CkBAIC0yMTMsMzggKzIyNyw0OSBAQAogCQl9CiAJCUJVR01TRzIoRF9JTklULCAiJWxYaCAiLCAqcCk7CiAKLQkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oKnAsIEJVRkZFUl9TSVpFLCAiYXJjbmV0ICg5MHh4KSIpKSB7CisJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKCpwLCBNSVJST1JfU0laRSwgImFyY25ldCAoOTB4eCkiKSkgewogCQkJQlVHTVNHMihEX0lOSVRfUkVBU09OUywgIihyZXF1ZXN0X21lbV9yZWdpb24pXG4iKTsKIAkJCUJVR01TRzIoRF9JTklUX1JFQVNPTlMsICJTdGFnZSAzOiAiKTsKIAkJCUJVR0xWTChEX0lOSVRfUkVBU09OUykgbnVtcHJpbnQgPSAwOwotCQkJKnAtLSA9IHNobWVtc1stLW51bXNobWVtc107Ci0JCQljb250aW51ZTsKKwkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmIChpc2FfcmVhZGIocHRyKSAhPSBURVNUdmFsdWUpIHsKKwkJYmFzZSA9IGlvcmVtYXAoKnAsIE1JUlJPUl9TSVpFKTsKKwkJaWYgKCFiYXNlKSB7CisJCQlCVUdNU0cyKERfSU5JVF9SRUFTT05TLCAiKGlvcmVtYXApXG4iKTsKKwkJCUJVR01TRzIoRF9JTklUX1JFQVNPTlMsICJTdGFnZSAzOiAiKTsKKwkJCUJVR0xWTChEX0lOSVRfUkVBU09OUykgbnVtcHJpbnQgPSAwOworCQkJZ290byBvdXQxOworCQl9CisJCWlmIChyZWFkYihiYXNlKSAhPSBURVNUdmFsdWUpIHsKIAkJCUJVR01TRzIoRF9JTklUX1JFQVNPTlMsICIoJTAyWGggIT0gJTAyWGgpXG4iLAotCQkJCWlzYV9yZWFkYihwdHIpLCBURVNUdmFsdWUpOworCQkJCXJlYWRiKGJhc2UpLCBURVNUdmFsdWUpOwogCQkJQlVHTVNHMihEX0lOSVRfUkVBU09OUywgIlMzOiAiKTsKIAkJCUJVR0xWTChEX0lOSVRfUkVBU09OUykgbnVtcHJpbnQgPSAwOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKCpwLCBCVUZGRVJfU0laRSk7Ci0JCQkqcC0tID0gc2htZW1zWy0tbnVtc2htZW1zXTsKLQkJCWNvbnRpbnVlOworCQkJZ290byBvdXQyOwogCQl9CiAJCS8qIEJ5IHdyaXRpbmcgMHg0MiB0byB0aGUgVEVTVHZhbHVlIGxvY2F0aW9uLCB3ZSBhbHNvIG1ha2UKIAkJICogc3VyZSBubyAibWlycm9yIiBzaG1lbSBhcmVhcyBzaG93IHVwIC0gaWYgdGhleSBvY2N1cgogCQkgKiBpbiBhbm90aGVyIHBhc3MgdGhyb3VnaCB0aGlzIGxvb3AsIHRoZXkgd2lsbCBiZSBkaXNjYXJkZWQKIAkJICogYmVjYXVzZSAqY3B0ciAhPSBURVNUdmFsdWUuCiAJCSAqLwotCQlpc2Ffd3JpdGViKDB4NDIsIHB0cik7Ci0JCWlmIChpc2FfcmVhZGIocHRyKSAhPSAweDQyKSB7CisJCXdyaXRlYigweDQyLCBiYXNlKTsKKwkJaWYgKHJlYWRiKGJhc2UpICE9IDB4NDIpIHsKIAkJCUJVR01TRzIoRF9JTklUX1JFQVNPTlMsICIocmVhZCBvbmx5KVxuIik7CiAJCQlCVUdNU0cyKERfSU5JVF9SRUFTT05TLCAiUzM6ICIpOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKCpwLCBCVUZGRVJfU0laRSk7Ci0JCQkqcC0tID0gc2htZW1zWy0tbnVtc2htZW1zXTsKLQkJCWNvbnRpbnVlOworCQkJZ290byBvdXQyOwogCQl9CiAJCUJVR01TRzIoRF9JTklUX1JFQVNPTlMsICJcbiIpOwogCQlCVUdNU0cyKERfSU5JVF9SRUFTT05TLCAiUzM6ICIpOwogCQlCVUdMVkwoRF9JTklUX1JFQVNPTlMpIG51bXByaW50ID0gMDsKKwkJaW9tZW1baW5kZXhdID0gYmFzZTsKKwkJY29udGludWU7CisJb3V0MjoKKwkJaW91bm1hcChiYXNlKTsKKwlvdXQxOgorCQlyZWxlYXNlX21lbV9yZWdpb24oKnAsIE1JUlJPUl9TSVpFKTsKKwlvdXQ6CisJCSpwLS0gPSBzaG1lbXNbLS1udW1zaG1lbXNdOworCQlpbmRleC0tOwogCX0KIAlCVUdNU0cyKERfSU5JVCwgIlxuIik7CiAKQEAgLTI1Miw2ICsyNzcsOCBAQAogCQlCVUdNU0cyKERfTk9STUFMLCAiUzM6IE5vIEFSQ25ldCBjYXJkcyBmb3VuZC5cbiIpOwogCQlmb3IgKHBvcnQgPSAmcG9ydHNbMF07IHBvcnQgPCBwb3J0cyArIG51bXBvcnRzOyBwb3J0KyspCiAJCQlyZWxlYXNlX3JlZ2lvbigqcG9ydCwgQVJDTkVUX1RPVEFMX1NJWkUpOworCQlrZnJlZShzaG1lbXMpOworCQlrZnJlZShpb21lbSk7CiAJCXJldHVybjsKIAl9CiAJLyogU3RhZ2UgNDogc29tZXRoaW5nIG9mIGEgZHVtbXksIHRvIHJlcG9ydCB0aGUgc2htZW1zIHRoYXQgYXJlCkBAIC0zNTEsMzAgKzM3OCwzMiBAQAogCQkJbWRlbGF5KFJFU0VUdGltZSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBqdXN0IG9uZSBzaG1lbSBhbmQgcG9ydCwgYXNzdW1lIHRoZXkgbWF0Y2ggKi8KLQkJCWlzYV93cml0ZWIoVEVTVHZhbHVlLCBzaG1lbXNbMF0pOworCQkJd3JpdGViKFRFU1R2YWx1ZSwgaW9tZW1bMF0pOwogCQl9CiAjZWxzZQogCQlpbmIoX1JFU0VUKTsKIAkJbWRlbGF5KFJFU0VUdGltZSk7CiAjZW5kaWYKIAotCQlmb3IgKHAgPSAmc2htZW1zWzBdOyBwIDwgc2htZW1zICsgbnVtc2htZW1zOyBwKyspIHsKLQkJCXVfbG9uZyBwdHIgPSAqcDsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtc2htZW1zOyBpbmRleCsrKSB7CisJCQl1X2xvbmcgcHRyID0gc2htZW1zW2luZGV4XTsKKwkJCXZvaWQgX19pb21lbSAqYmFzZSA9IGlvbWVtW2luZGV4XTsKIAotCQkJaWYgKGlzYV9yZWFkYihwdHIpID09IFRFU1R2YWx1ZSkgewkvKiBmb3VuZCBvbmUgKi8KKwkJCWlmIChyZWFkYihiYXNlKSA9PSBURVNUdmFsdWUpIHsJLyogZm91bmQgb25lICovCiAJCQkJQlVHTVNHMihEX0lOSVQsICIlbFhoKVxuIiwgKnApOwogCQkJCW9wZW5wYXJlbiA9IDA7CiAKIAkJCQkvKiByZWdpc3RlciB0aGUgY2FyZCAqLwotCQkJCWlmIChjb205MHh4X2ZvdW5kKCpwb3J0LCBhaXJxLCAqcCkgPT0gMCkKKwkJCQlpZiAoY29tOTB4eF9mb3VuZCgqcG9ydCwgYWlycSwgcHRyLCBiYXNlKSA9PSAwKQogCQkJCQlmb3VuZCA9IDE7CiAJCQkJbnVtcHJpbnQgPSAtMTsKIAogCQkJCS8qIHJlbW92ZSBzaG1lbSBmcm9tIHRoZSBsaXN0ICovCi0JCQkJKnAgPSBzaG1lbXNbLS1udW1zaG1lbXNdOworCQkJCXNobWVtc1tpbmRleF0gPSBzaG1lbXNbLS1udW1zaG1lbXNdOworCQkJCWlvbWVtW2luZGV4XSA9IGlvbWVtW251bXNobWVtc107CiAJCQkJYnJlYWs7CS8qIGdvIHRvIHRoZSBuZXh0IEkvTyBwb3J0ICovCiAJCQl9IGVsc2UgewotCQkJCUJVR01TRzIoRF9JTklUX1JFQVNPTlMsICIlWGgtIiwgaXNhX3JlYWRiKHB0cikpOworCQkJCUJVR01TRzIoRF9JTklUX1JFQVNPTlMsICIlWGgtIiwgcmVhZGIoYmFzZSkpOwogCQkJfQogCQl9CiAKQEAgLTM5MSwxNyArNDIwLDQwIEBACiAJQlVHTFZMKERfSU5JVF9SRUFTT05TKSBwcmludGsoIlxuIik7CiAKIAkvKiBOb3cgcHV0IGJhY2sgVEVTVHZhbHVlIG9uIGFsbCBsZWZ0b3ZlciBzaG1lbXMuICovCi0JZm9yIChwID0gJnNobWVtc1swXTsgcCA8IHNobWVtcyArIG51bXNobWVtczsgcCsrKSB7Ci0JCWlzYV93cml0ZWIoVEVTVHZhbHVlLCAqcCk7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbigqcCwgQlVGRkVSX1NJWkUpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bXNobWVtczsgaW5kZXgrKykgeworCQl3cml0ZWIoVEVTVHZhbHVlLCBpb21lbVtpbmRleF0pOworCQlpb3VubWFwKGlvbWVtW2luZGV4XSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihzaG1lbXNbaW5kZXhdLCBNSVJST1JfU0laRSk7CiAJfQorCWtmcmVlKHNobWVtcyk7CisJa2ZyZWUoaW9tZW0pOwogfQogCitzdGF0aWMgaW50IGNoZWNrX21pcnJvcih1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKQoreworCXZvaWQgX19pb21lbSAqcDsKKwlpbnQgcmVzID0gLTE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihhZGRyLCBzaXplLCAiYXJjbmV0ICg5MHh4KSIpKQorCQlyZXR1cm4gLTE7CisKKwlwID0gaW9yZW1hcChhZGRyLCBzaXplKTsKKwlpZiAocCkgeworCQlpZiAocmVhZGIocCkgPT0gVEVTVHZhbHVlKQorCQkJcmVzID0gMTsKKwkJZWxzZQorCQkJcmVzID0gMDsKKwkJaW91bm1hcChwKTsKKwl9CisKKwlyZWxlYXNlX21lbV9yZWdpb24oYWRkciwgc2l6ZSk7CisJcmV0dXJuIHJlczsKK30KIAogLyogU2V0IHVwIHRoZSBzdHJ1Y3QgbmV0X2RldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYXJkLiAgQ2FsbGVkIGFmdGVyCiAgKiBwcm9iaW5nIHN1Y2NlZWRzLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBjb205MHh4X2ZvdW5kKGludCBpb2FkZHIsIGludCBhaXJxLCB1X2xvbmcgc2htZW0pCitzdGF0aWMgaW50IF9faW5pdCBjb205MHh4X2ZvdW5kKGludCBpb2FkZHIsIGludCBhaXJxLCB1X2xvbmcgc2htZW0sIHZvaWQgX19pb21lbSAqcCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscDsKQEAgLTQxMiw3ICs0NjQsOCBAQAogCWRldiA9IGFsbG9jX2FyY2RldihkZXZpY2UpOwogCWlmICghZGV2KSB7CiAJCUJVR01TRzIoRF9OT1JNQUwsICJjb205MHh4OiBDYW4ndCBhbGxvY2F0ZSBkZXZpY2UhXG4iKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHNobWVtLCBCVUZGRVJfU0laRSk7CisJCWlvdW5tYXAocCk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihzaG1lbSwgTUlSUk9SX1NJWkUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbHAgPSBkZXYtPnByaXY7CkBAIC00MjMsMjQgKzQ3NiwyNyBAQAogCSAqIDJrIChvciB0aGVyZSBhcmUgbm8gbWlycm9ycyBhdCBhbGwpIGJ1dCBvbiBzb21lLCBpdCdzIDRrLgogCSAqLwogCW1pcnJvcl9zaXplID0gTUlSUk9SX1NJWkU7Ci0JaWYgKGlzYV9yZWFkYihzaG1lbSkgPT0gVEVTVHZhbHVlCi0JICAgICYmIGlzYV9yZWFkYihzaG1lbSAtIG1pcnJvcl9zaXplKSAhPSBURVNUdmFsdWUKLQkgICAgJiYgaXNhX3JlYWRiKHNobWVtIC0gMiAqIG1pcnJvcl9zaXplKSA9PSBURVNUdmFsdWUpCi0JCW1pcnJvcl9zaXplICo9IDI7CisJaWYgKHJlYWRiKHApID09IFRFU1R2YWx1ZSAmJgorCSAgICBjaGVja19taXJyb3Ioc2htZW0gLSBNSVJST1JfU0laRSwgTUlSUk9SX1NJWkUpID09IDAgJiYKKwkgICAgY2hlY2tfbWlycm9yKHNobWVtIC0gMiAqIE1JUlJPUl9TSVpFLCBNSVJST1JfU0laRSkgPT0gMSkKKwkJbWlycm9yX3NpemUgPSAyICogTUlSUk9SX1NJWkU7CiAKLQlmaXJzdF9taXJyb3IgPSBsYXN0X21pcnJvciA9IHNobWVtOwotCXdoaWxlIChpc2FfcmVhZGIoZmlyc3RfbWlycm9yKSA9PSBURVNUdmFsdWUpCisJZmlyc3RfbWlycm9yID0gc2htZW0gLSBtaXJyb3Jfc2l6ZTsKKwl3aGlsZSAoY2hlY2tfbWlycm9yKGZpcnN0X21pcnJvciwgbWlycm9yX3NpemUpID09IDEpCiAJCWZpcnN0X21pcnJvciAtPSBtaXJyb3Jfc2l6ZTsKIAlmaXJzdF9taXJyb3IgKz0gbWlycm9yX3NpemU7CiAKLQl3aGlsZSAoaXNhX3JlYWRiKGxhc3RfbWlycm9yKSA9PSBURVNUdmFsdWUpCisJbGFzdF9taXJyb3IgPSBzaG1lbSArIG1pcnJvcl9zaXplOworCXdoaWxlIChjaGVja19taXJyb3IobGFzdF9taXJyb3IsIG1pcnJvcl9zaXplKSA9PSAxKQogCQlsYXN0X21pcnJvciArPSBtaXJyb3Jfc2l6ZTsKIAlsYXN0X21pcnJvciAtPSBtaXJyb3Jfc2l6ZTsKIAogCWRldi0+bWVtX3N0YXJ0ID0gZmlyc3RfbWlycm9yOwogCWRldi0+bWVtX2VuZCA9IGxhc3RfbWlycm9yICsgTUlSUk9SX1NJWkUgLSAxOwogCi0JcmVsZWFzZV9tZW1fcmVnaW9uKHNobWVtLCBCVUZGRVJfU0laRSk7CisJaW91bm1hcChwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oc2htZW0sIE1JUlJPUl9TSVpFKTsKKwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGRldi0+bWVtX3N0YXJ0LCBkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCArIDEsICJhcmNuZXQgKDkweHgpIikpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEwNTEuYwppbmRleCA2ZDc5MTM3Li42ZDZjNjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAkJICAgICAgaW50IGJ1Zm51bSk7CiAKIAotc3RydWN0IEFyY1Byb3RvIHJmYzEwNTFfcHJvdG8gPQorc3RhdGljIHN0cnVjdCBBcmNQcm90byByZmMxMDUxX3Byb3RvID0KIHsKIAkuc3VmZml4CQk9ICdzJywKIAkubXR1CQk9IFhNVFUgLSBSRkMxMDUxX0hEUl9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMjAxLmMKaW5kZXggNmI2YWU0Yi4uYmVlMzQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jCkBAIC00Myw3ICs0Myw3IEBACiAJCSAgICAgIGludCBidWZudW0pOwogc3RhdGljIGludCBjb250aW51ZV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVmbnVtKTsKIAotc3RydWN0IEFyY1Byb3RvIHJmYzEyMDFfcHJvdG8gPQorc3RhdGljIHN0cnVjdCBBcmNQcm90byByZmMxMjAxX3Byb3RvID0KIHsKIAkuc3VmZml4CQk9ICdhJywKIAkubXR1CQk9IDE1MDAsCS8qIGNvdWxkIGJlIG1vcmUsIGJ1dCBzb21lIHJlY2VpdmVycyBjYW4ndCBoYW5kbGUgaXQuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyaWFkbmUuYyBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuYwppbmRleCA5ZmU5M2FjLi5kMWI2YjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmlhZG5lLmMKKysrIGIvZHJpdmVycy9uZXQvYXJpYWRuZS5jCkBAIC04NjQsNyArODY0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXJpYWRuZV9pbml0X21vZHVsZSh2b2lkKQogewotICAgIHJldHVybiB6b3Jyb19tb2R1bGVfaW5pdCgmYXJpYWRuZV9kcml2ZXIpOworICAgIHJldHVybiB6b3Jyb19yZWdpc3Rlcl9kcml2ZXIoJmFyaWFkbmVfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFyaWFkbmVfY2xlYW51cF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnIGIvZHJpdmVycy9uZXQvYXJtL0tjb25maWcKaW5kZXggNjI1MTg0Yi4uNzdmZTIwZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCkBAIC0zMSwzICszMSwxMSBAQAogCWhlbHAKIAkgIElmIHlvdSBoYXZlIGFuIEFjb3JuIHN5c3RlbSB3aXRoIG9uZSBvZiB0aGVzZSBuZXR3b3JrIGNhcmRzLCB5b3UKIAkgIHNob3VsZCBzYXkgWSB0byB0aGlzIG9wdGlvbiBpZiB5b3Ugd2lzaCB0byB1c2UgaXQgd2l0aCBMaW51eC4KKworY29uZmlnIEFSTV9BVDkxX0VUSEVSCisJdHJpc3RhdGUgIkFUOTFSTTkyMDAgRXRoZXJuZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBBUk0gJiYgQVJDSF9BVDkxUk05MjAwCisJc2VsZWN0IE1JSQorCWhlbHAKKwkgIElmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYSBrZXJuZWwgZm9yIHRoZSBBVDkxUk05MjAwIGFuZCBlbmFibGUKKwkgIGV0aGVybmV0IHN1cHBvcnQsIHRoZW4geW91IHNob3VsZCBhbHdheXMgYW5zd2VyIFkgdG8gdGhpcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2FybS9NYWtlZmlsZQppbmRleCBiYzI2M2VkLi40MmM5NWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvYXJtL01ha2VmaWxlCkBAIC03LDMgKzcsNCBAQAogb2JqLSQoQ09ORklHX0FSTV9FVEhFUkgpCSs9IGV0aGVyaC5vCiBvYmotJChDT05GSUdfQVJNX0VUSEVSMykJKz0gZXRoZXIzLm8KIG9iai0kKENPTkZJR19BUk1fRVRIRVIxKQkrPSBldGhlcjEubworb2JqLSQoQ09ORklHX0FSTV9BVDkxX0VUSEVSKQkrPSBhdDkxX2V0aGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwppbmRleCA1M2UzYWZjLi4wOWQ1YzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCkBAIC02OTYsNyArNjk2LDkgQEAKIAlkZXYtPmJhc2VfYWRkciA9IHJlcy0+c3RhcnQ7CiAJZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCi0gICAgCXJldCA9IC1FTk9ERVY7CisJcmV0ID0gLUVOT0RFVjsKKwlpZiAoZGV2LT5pcnEgPCAwKQorCQlnb3RvIG5vZGV2OwogCWlmICghcmVxdWVzdF9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIDB4MTgsIGRldi0+bmFtZSkpCiAJCWdvdG8gbm9kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMgYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MDNkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCkBAIC0wLDAgKzEsMTExMCBAQAorLyoKKyAqIEV0aGVybmV0IGRyaXZlciBmb3IgdGhlIEF0bWVsIEFUOTFSTTkyMDAgKFRodW5kZXIpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlIChQdHkpIEx0ZAorICoKKyAqIEJhc2VkIG9uIGFuIGVhcmxpZXIgQXRtZWwgRU1BQyBtYWNyb2NlbGwgZHJpdmVyIGJ5IEF0bWVsIGFuZCBMaW5lbyBJbmMuCisgKiBJbml0aWFsIHZlcnNpb24gYnkgUmljayBCcm9uc29uIDAxLzExLzIwMDMKKyAqCisgKiBJbnRlbCBMWFQ5NzFBIFBIWSBzdXBwb3J0IGJ5IENocmlzdG9waGVyIEJhaG5zICYgRGF2aWQgS25pY2tlcmJvY2tlcgorICogICAoUG9sYXJvaWQgQ29ycG9yYXRpb24pCisgKgorICogUmVhbHRlayBSVEw4MjAxKEIpTCBQSFkgc3VwcG9ydCBieSBSb21hbiBBdnJhbWVua28gPHJvbWFuQGltc3lzdGVtcy5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFybTkyMDBfZW1hYy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCisjaW5jbHVkZSAiYXQ5MV9ldGhlci5oIgorCisjZGVmaW5lIERSVl9OQU1FCSJhdDkxX2V0aGVyIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wIgorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmF0OTFfZGV2Oworc3RhdGljIHN0cnVjdCBjbGsgKmV0aGVyX2NsazsKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKKy8qCisgKiBSZWFkIGZyb20gYSBFTUFDIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXQ5MV9lbWFjX3JlYWQodW5zaWduZWQgaW50IHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKmVtYWNfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfRU1BQzsKKworCXJldHVybiBfX3Jhd19yZWFkbChlbWFjX2Jhc2UgKyByZWcpOworfQorCisvKgorICogV3JpdGUgdG8gYSBFTUFDIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ5MV9lbWFjX3dyaXRlKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICplbWFjX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopQVQ5MV9WQV9CQVNFX0VNQUM7CisKKwlfX3Jhd193cml0ZWwodmFsdWUsIGVtYWNfYmFzZSArIHJlZyk7Cit9CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBQSFkgSU5URVJGQUNFIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCisvKgorICogRW5hYmxlIHRoZSBNRElPIGJpdCBpbiBNQUMgY29udHJvbCByZWdpc3RlcgorICogV2hlbiBub3QgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0LWhhbmRsZXIsIGFjY2VzcyB0byB0aGUgUEhZIG11c3QgYmUKKyAqICBwcm90ZWN0ZWQgYnkgYSBzcGlubG9jay4KKyAqLworc3RhdGljIHZvaWQgZW5hYmxlX21kaSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3RsOworCisJY3RsID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0NUTCk7CisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19DVEwsIGN0bCB8IEFUOTFfRU1BQ19NUEUpOwkvKiBlbmFibGUgbWFuYWdlbWVudCBwb3J0ICovCit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBNRElPIGJpdCBpbiB0aGUgTUFDIGNvbnRyb2wgcmVnaXN0ZXIKKyAqLworc3RhdGljIHZvaWQgZGlzYWJsZV9tZGkodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGN0bDsKKworCWN0bCA9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19DVEwpOworCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfQ1RMLCBjdGwgJiB+QVQ5MV9FTUFDX01QRSk7CS8qIGRpc2FibGUgbWFuYWdlbWVudCBwb3J0ICovCit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBQSFkgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ5MV9waHlfd2FpdCh2b2lkKSB7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDI7CisKKwl3aGlsZSAoIShhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfU1IpICYgQVQ5MV9FTUFDX1NSX0lETEUpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlwcmludGsoImF0OTFfZXRoZXI6IE1JTyB0aW1lb3V0XG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNwdV9yZWxheCgpOworCX0KK30KKworLyoKKyAqIFdyaXRlIHZhbHVlIHRvIHRoZSBhIFBIWSByZWdpc3RlcgorICogTm90ZTogTURJIGludGVyZmFjZSBpcyBhc3N1bWVkIHRvIGFscmVhZHkgaGF2ZSBiZWVuIGVuYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3BoeSh1bnNpZ25lZCBjaGFyIHBoeV9hZGRyLCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX01BTiwgQVQ5MV9FTUFDX01BTl84MDJfMyB8IEFUOTFfRU1BQ19SV19XCisJCXwgKChwaHlfYWRkciAmIDB4MWYpIDw8IDIzKSB8IChhZGRyZXNzIDw8IDE4KSB8ICh2YWx1ZSAmIEFUOTFfRU1BQ19EQVRBKSk7CisKKwkvKiBXYWl0IHVudGlsIElETEUgYml0IGluIE5ldHdvcmsgU3RhdHVzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgKi8KKwlhdDkxX3BoeV93YWl0KCk7Cit9CisKKy8qCisgKiBSZWFkIHZhbHVlIHN0b3JlZCBpbiBhIFBIWSByZWdpc3Rlci4KKyAqIE5vdGU6IE1ESSBpbnRlcmZhY2UgaXMgYXNzdW1lZCB0byBhbHJlYWR5IGhhdmUgYmVlbiBlbmFibGVkLgorICovCitzdGF0aWMgdm9pZCByZWFkX3BoeSh1bnNpZ25lZCBjaGFyIHBoeV9hZGRyLCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MsIHVuc2lnbmVkIGludCAqdmFsdWUpCit7CisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19NQU4sIEFUOTFfRU1BQ19NQU5fODAyXzMgfCBBVDkxX0VNQUNfUldfUgorCQl8ICgocGh5X2FkZHIgJiAweDFmKSA8PCAyMykgfCAoYWRkcmVzcyA8PCAxOCkpOworCisJLyogV2FpdCB1bnRpbCBJRExFIGJpdCBpbiBOZXR3b3JrIFN0YXR1cyByZWdpc3RlciBpcyBjbGVhcmVkICovCisJYXQ5MV9waHlfd2FpdCgpOworCisJKnZhbHVlID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX01BTikgJiBBVDkxX0VNQUNfREFUQTsKK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFBIWSBNQU5BR0VNRU5UIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKKy8qCisgKiBBY2Nlc3MgdGhlIFBIWSB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgbGluayBzcGVlZCBhbmQgbW9kZSwgYW5kIHVwZGF0ZSB0aGUKKyAqIE1BQyBhY2NvcmRpbmdseS4KKyAqIElmIG5vIGxpbmsgb3IgYXV0by1uZWdvdGlhdGlvbiBpcyBidXN5LCB0aGVuIG5vIGNoYW5nZXMgYXJlIG1hZGUuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9saW5rc3BlZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9wcml2YXRlICpscCA9IChzdHJ1Y3QgYXQ5MV9wcml2YXRlICopIGRldi0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgYm1zciwgYm1jciwgbHBhLCBtYWNfY2ZnOworCXVuc2lnbmVkIGludCBzcGVlZCwgZHVwbGV4OworCisJaWYgKCFtaWlfbGlua19vaygmbHAtPm1paSkpIHsJCS8qIG5vIGxpbmsgKi8KKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgZG93bi5cbiIsIGRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBMaW5rIHVwLCBvciBhdXRvLW5lZ290aWF0aW9uIHN0aWxsIGluIHByb2dyZXNzICovCisJcmVhZF9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfQk1TUiwgJmJtc3IpOworCXJlYWRfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0JNQ1IsICZibWNyKTsKKwlpZiAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsJCQkJLyogQXV0b05lZ290aWF0aW9uIGlzIGVuYWJsZWQgKi8KKwkJaWYgKCEoYm1zciAmIEJNU1JfQU5FR0NPTVBMRVRFKSkKKwkJCXJldHVybjsJCQkvKiBEbyBub3RoaW5nIC0gYW5vdGhlciBpbnRlcnJ1cHQgZ2VuZXJhdGVkIHdoZW4gbmVnb3RpYXRpb24gY29tcGxldGUgKi8KKworCQlyZWFkX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9MUEEsICZscGEpOworCQlpZiAoKGxwYSAmIExQQV8xMDBGVUxMKSB8fCAobHBhICYgTFBBXzEwMEhBTEYpKSBzcGVlZCA9IFNQRUVEXzEwMDsKKwkJZWxzZSBzcGVlZCA9IFNQRUVEXzEwOworCQlpZiAoKGxwYSAmIExQQV8xMDBGVUxMKSB8fCAobHBhICYgTFBBXzEwRlVMTCkpIGR1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlIGR1cGxleCA9IERVUExFWF9IQUxGOworCX0gZWxzZSB7CisJCXNwZWVkID0gKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwOworCQlkdXBsZXggPSAoYm1jciAmIEJNQ1JfRlVMTERQTFgpID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIE1BQyAqLworCW1hY19jZmcgPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfQ0ZHKSAmIH4oQVQ5MV9FTUFDX1NQRCB8IEFUOTFfRU1BQ19GRCk7CisJaWYgKHNwZWVkID09IFNQRUVEXzEwMCkgeworCQlpZiAoZHVwbGV4ID09IERVUExFWF9GVUxMKQkJLyogMTAwIEZ1bGwgRHVwbGV4ICovCisJCQltYWNfY2ZnIHw9IEFUOTFfRU1BQ19TUEQgfCBBVDkxX0VNQUNfRkQ7CisJCWVsc2UJCQkJCS8qIDEwMCBIYWxmIER1cGxleCAqLworCQkJbWFjX2NmZyB8PSBBVDkxX0VNQUNfU1BEOworCX0gZWxzZSB7CisJCWlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpCQkvKiAxMCBGdWxsIER1cGxleCAqLworCQkJbWFjX2NmZyB8PSBBVDkxX0VNQUNfRkQ7CisJCWVsc2Uge30JCQkJCS8qIDEwIEhhbGYgRHVwbGV4ICovCisJfQorCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfQ0ZHLCBtYWNfY2ZnKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIG5vdyAlaS0lc1xuIiwgZGV2LT5uYW1lLCBzcGVlZCwgKGR1cGxleCA9PSBEVVBMRVhfRlVMTCkgPyAiRnVsbER1cGxleCIgOiAiSGFsZkR1cGxleCIpOworCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKK30KKworLyoKKyAqIEhhbmRsZSBpbnRlcnJ1cHRzIGZyb20gdGhlIFBIWQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYXQ5MWV0aGVyX3BoeV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKKwlzdHJ1Y3QgYXQ5MV9wcml2YXRlICpscCA9IChzdHJ1Y3QgYXQ5MV9wcml2YXRlICopIGRldi0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgcGh5OworCisJLyoKKwkgKiBUaGlzIGhhbmRlciBpcyB0cmlnZ2VyZWQgb24gYm90aCBlZGdlcywgYnV0IHRoZSBQSFkgY2hpcHMgZXhwZWN0CisJICogbGV2ZWwtdHJpZ2dlcmluZy4gIFdlIHRoZXJlZm9yZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSBQSFkgYWN0dWFsbHkgaGFzCisJICogYW4gSVJRIHBlbmRpbmcuCisJICovCisJZW5hYmxlX21kaSgpOworCWlmICgobHAtPnBoeV90eXBlID09IE1JSV9ETTkxNjFfSUQpIHx8IChscC0+cGh5X3R5cGUgPT0gTUlJX0RNOTE2MUFfSUQpKSB7CisJCXJlYWRfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0RTSU5UUl9SRUcsICZwaHkpOwkvKiBhY2sgaW50ZXJydXB0IGluIERhdmljb20gUEhZICovCisJCWlmICghKHBoeSAmICgxIDw8IDApKSkKKwkJCWdvdG8gZG9uZTsKKwl9CisJZWxzZSBpZiAobHAtPnBoeV90eXBlID09IE1JSV9MWFQ5NzFBX0lEKSB7CisJCXJlYWRfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0lTSU5UU19SRUcsICZwaHkpOwkvKiBhY2sgaW50ZXJydXB0IGluIEludGVsIFBIWSAqLworCQlpZiAoIShwaHkgJiAoMSA8PCAyKSkpCisJCQlnb3RvIGRvbmU7CisJfQorCWVsc2UgaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfQkNNNTIyMV9JRCkgeworCQlyZWFkX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9CQ01JTlRSX1JFRywgJnBoeSk7CS8qIGFjayBpbnRlcnJ1cHQgaW4gQnJvYWRjb20gUEhZICovCisJCWlmICghKHBoeSAmICgxIDw8IDApKSkKKwkJCWdvdG8gZG9uZTsKKwl9CisJZWxzZSBpZiAobHAtPnBoeV90eXBlID09IE1JSV9LUzg3MjFfSUQpIHsKKwkJcmVhZF9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfVFBJU1RBVFVTLCAmcGh5KTsJCS8qIGFjayBpbnRlcnJ1cHQgaW4gTWljcmVsIFBIWSAqLworCQlpZiAoIShwaHkgJiAoKDEgPDwgMikgfCAxKSkpCisJCQlnb3RvIGRvbmU7CisJfQorCisJdXBkYXRlX2xpbmtzcGVlZChkZXYpOworCitkb25lOgorCWRpc2FibGVfbWRpKCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGFuZCBlbmFibGUgdGhlIFBIWSBpbnRlcnJ1cHQgZm9yIGxpbmstc3RhdGUgY2hhbmdlcworICovCitzdGF0aWMgdm9pZCBlbmFibGVfcGh5aXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0OTFfcHJpdmF0ZSAqbHAgPSAoc3RydWN0IGF0OTFfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJdW5zaWduZWQgaW50IGRzaW50ciwgaXJxX251bWJlcjsKKwlpbnQgc3RhdHVzOworCisJaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfUlRMODIwMV9JRCkJLyogUlRMODIwMSBkb2VzIG5vdCBoYXZlIGFuIGludGVycnVwdCAqLworCQlyZXR1cm47CisJaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfRFA4Mzg0N19JRCkJLyogRFA4Mzg0NyBkb2VzIG5vdCBoYXZlIGFuIGludGVycnVwdCAqLworCQlyZXR1cm47CisJaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfQUMxMDFMX0lEKQkvKiBBQzEwMUwgaW50ZXJydXB0IG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJCXJldHVybjsKKworCWlycV9udW1iZXIgPSBscC0+Ym9hcmRfZGF0YS5waHlfaXJxX3BpbjsKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShpcnFfbnVtYmVyLCBhdDkxZXRoZXJfcGh5X2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdDkxX2V0aGVyOiBQSFkgSVJRICVkIHJlcXVlc3QgZmFpbGVkIC0gc3RhdHVzICVkIVxuIiwgaXJxX251bWJlciwgc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwllbmFibGVfbWRpKCk7CisKKwlpZiAoKGxwLT5waHlfdHlwZSA9PSBNSUlfRE05MTYxX0lEKSB8fCAobHAtPnBoeV90eXBlID09IE1JSV9ETTkxNjFBX0lEKSkgewkvKiBmb3IgRGF2aWNvbSBQSFkgKi8KKwkJcmVhZF9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfRFNJTlRSX1JFRywgJmRzaW50cik7CisJCWRzaW50ciA9IGRzaW50ciAmIH4weGYwMDsJCS8qIGNsZWFyIGJpdHMgOC4uMTEgKi8KKwkJd3JpdGVfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0RTSU5UUl9SRUcsIGRzaW50cik7CisJfQorCWVsc2UgaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfTFhUOTcxQV9JRCkgewkvKiBmb3IgSW50ZWwgUEhZICovCisJCXJlYWRfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0lTSU5URV9SRUcsICZkc2ludHIpOworCQlkc2ludHIgPSBkc2ludHIgfCAweGYyOwkJCS8qIHNldCBiaXRzIDEsIDQuLjcgKi8KKwkJd3JpdGVfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0lTSU5URV9SRUcsIGRzaW50cik7CisJfQorCWVsc2UgaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfQkNNNTIyMV9JRCkgewkvKiBmb3IgQnJvYWRjb20gUEhZICovCisJCWRzaW50ciA9ICgxIDw8IDE1KSB8ICggMSA8PCAxNCk7CisJCXdyaXRlX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9CQ01JTlRSX1JFRywgZHNpbnRyKTsKKwl9CisJZWxzZSBpZiAobHAtPnBoeV90eXBlID09IE1JSV9LUzg3MjFfSUQpIHsJLyogZm9yIE1pY3JlbCBQSFkgKi8KKwkJZHNpbnRyID0gKDEgPDwgMTApIHwgKCAxIDw8IDgpOworCQl3cml0ZV9waHkobHAtPnBoeV9hZGRyZXNzLCBNSUlfVFBJU1RBVFVTLCBkc2ludHIpOworCX0KKworCWRpc2FibGVfbWRpKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBQSFkgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGRpc2FibGVfcGh5aXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0OTFfcHJpdmF0ZSAqbHAgPSAoc3RydWN0IGF0OTFfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJdW5zaWduZWQgaW50IGRzaW50cjsKKwl1bnNpZ25lZCBpbnQgaXJxX251bWJlcjsKKworCWlmIChscC0+cGh5X3R5cGUgPT0gTUlJX1JUTDgyMDFfSUQpIAkvKiBSVEw4MjAxIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJydXB0ICovCisJCXJldHVybjsKKwlpZiAobHAtPnBoeV90eXBlID09IE1JSV9EUDgzODQ3X0lEKQkvKiBEUDgzODQ3IGRvZXMgbm90IGhhdmUgYW4gaW50ZXJydXB0ICovCisJCXJldHVybjsKKwlpZiAobHAtPnBoeV90eXBlID09IE1JSV9BQzEwMUxfSUQpCS8qIEFDMTAxTCBpbnRlcnJ1cHQgbm90IHN1cHBvcnRlZCB5ZXQgKi8KKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOworCWVuYWJsZV9tZGkoKTsKKworCWlmICgobHAtPnBoeV90eXBlID09IE1JSV9ETTkxNjFfSUQpIHx8IChscC0+cGh5X3R5cGUgPT0gTUlJX0RNOTE2MUFfSUQpKSB7CS8qIGZvciBEYXZpY29tIFBIWSAqLworCQlyZWFkX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9EU0lOVFJfUkVHLCAmZHNpbnRyKTsKKwkJZHNpbnRyID0gZHNpbnRyIHwgMHhmMDA7CQkJLyogc2V0IGJpdHMgOC4uMTEgKi8KKwkJd3JpdGVfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0RTSU5UUl9SRUcsIGRzaW50cik7CisJfQorCWVsc2UgaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfTFhUOTcxQV9JRCkgewkvKiBmb3IgSW50ZWwgUEhZICovCisJCXJlYWRfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0lTSU5URV9SRUcsICZkc2ludHIpOworCQlkc2ludHIgPSBkc2ludHIgJiB+MHhmMjsJCQkvKiBjbGVhciBiaXRzIDEsIDQuLjcgKi8KKwkJd3JpdGVfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0lTSU5URV9SRUcsIGRzaW50cik7CisJfQorCWVsc2UgaWYgKGxwLT5waHlfdHlwZSA9PSBNSUlfQkNNNTIyMV9JRCkgewkvKiBmb3IgQnJvYWRjb20gUEhZICovCisJCXJlYWRfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0JDTUlOVFJfUkVHLCAmZHNpbnRyKTsKKwkJZHNpbnRyID0gfigxIDw8IDE0KTsKKwkJd3JpdGVfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX0JDTUlOVFJfUkVHLCBkc2ludHIpOworCX0KKwllbHNlIGlmIChscC0+cGh5X3R5cGUgPT0gTUlJX0tTODcyMV9JRCkgewkvKiBmb3IgTWljcmVsIFBIWSAqLworCQlyZWFkX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9UUElTVEFUVVMsICZkc2ludHIpOworCQlkc2ludHIgPSB+KCgxIDw8IDEwKSB8ICgxIDw8IDgpKTsKKwkJd3JpdGVfcGh5KGxwLT5waHlfYWRkcmVzcywgTUlJX1RQSVNUQVRVUywgZHNpbnRyKTsKKwl9CisKKwlkaXNhYmxlX21kaSgpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCisJaXJxX251bWJlciA9IGxwLT5ib2FyZF9kYXRhLnBoeV9pcnFfcGluOworCWZyZWVfaXJxKGlycV9udW1iZXIsIGRldik7CQkJLyogRnJlZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworfQorCisvKgorICogUGVyZm9ybSBhIHNvZnR3YXJlIHJlc2V0IG9mIHRoZSBQSFkuCisgKi8KKyNpZiAwCitzdGF0aWMgdm9pZCByZXNldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9wcml2YXRlICpscCA9IChzdHJ1Y3QgYXQ5MV9wcml2YXRlICopIGRldi0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgYm1jcjsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwllbmFibGVfbWRpKCk7CisKKwkvKiBQZXJmb3JtIFBIWSByZXNldCAqLworCXdyaXRlX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKKworCS8qIFdhaXQgdW50aWwgUEhZIHJlc2V0IGlzIGNvbXBsZXRlICovCisJZG8geworCQlyZWFkX3BoeShscC0+cGh5X2FkZHJlc3MsIE1JSV9CTUNSLCAmYm1jcik7CisJfSB3aGlsZSAoIShibWNyICYmIEJNQ1JfUkVTRVQpKTsKKworCWRpc2FibGVfbWRpKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7Cit9CisjZW5kaWYKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBBRERSRVNTIE1BTkFHRU1FTlQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKKy8qCisgKiBOT1RFOiBZb3VyIGJvb3Rsb2FkZXIgbXVzdCBhbHdheXMgc2V0IHRoZSBNQUMgYWRkcmVzcyBjb3JyZWN0bHkgYmVmb3JlCisgKiBib290aW5nIGludG8gTGludXguCisgKgorICogLSBJdCBtdXN0IGFsd2F5cyBzZXQgdGhlIE1BQyBhZGRyZXNzIGFmdGVyIHJlc2V0LCBldmVuIGlmIGl0IGRvZXNuJ3QKKyAqICAgaGFwcGVuIHRvIGFjY2VzcyB0aGUgRXRoZXJuZXQgd2hpbGUgaXQncyBib290aW5nLiAgU29tZSB2ZXJzaW9ucyBvZgorICogICBVLUJvb3Qgb24gdGhlIEFUOTFSTTkyMDAtREsgZG8gbm90IGRvIHRoaXMuCisgKgorICogLSBMaWtld2lzZSBpdCBtdXN0IHN0b3JlIHRoZSBhZGRyZXNzZXMgaW4gdGhlIGNvcnJlY3QgYnl0ZSBvcmRlci4KKyAqICAgTWljcm9Nb25pdG9yICh1TW9uKSBvbiB0aGUgQ1NCMzM3IGRvZXMgdGhpcyBpbmNvcnJlY3RseSAoYW5kCisgKiAgIGNvbnRpbnVlcyB0byBkbyBzbywgZm9yIGJ1Zy1jb21wYXRpYmlsaXR5KS4KKyAqLworCitzdGF0aWMgc2hvcnQgX19pbml0IHVucGFja19tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaGksIHVuc2lnbmVkIGludCBsbykKK3sKKwljaGFyIGFkZHJbNl07CisKKwlpZiAobWFjaGluZV9pc19jc2IzMzcoKSkgeworCQlhZGRyWzVdID0gKGxvICYgMHhmZik7CQkJLyogVGhlIENTQjMzNyBib290bG9hZGVyIHN0b3JlcyB0aGUgTUFDIHRoZSB3cm9uZy13YXkgYXJvdW5kICovCisJCWFkZHJbNF0gPSAobG8gJiAweGZmMDApID4+IDg7CisJCWFkZHJbM10gPSAobG8gJiAweGZmMDAwMCkgPj4gMTY7CisJCWFkZHJbMl0gPSAobG8gJiAweGZmMDAwMDAwKSA+PiAyNDsKKwkJYWRkclsxXSA9IChoaSAmIDB4ZmYpOworCQlhZGRyWzBdID0gKGhpICYgMHhmZjAwKSA+PiA4OworCX0KKwllbHNlIHsKKwkJYWRkclswXSA9IChsbyAmIDB4ZmYpOworCQlhZGRyWzFdID0gKGxvICYgMHhmZjAwKSA+PiA4OworCQlhZGRyWzJdID0gKGxvICYgMHhmZjAwMDApID4+IDE2OworCQlhZGRyWzNdID0gKGxvICYgMHhmZjAwMDAwMCkgPj4gMjQ7CisJCWFkZHJbNF0gPSAoaGkgJiAweGZmKTsKKwkJYWRkcls1XSA9IChoaSAmIDB4ZmYwMCkgPj4gODsKKwl9CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyKSkgeworCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgJmFkZHIsIDYpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIGV0aGVybmV0IE1BQyBhZGRyZXNzIGluIGRldi0+ZGV2X2FkZHIKKyAqLworc3RhdGljIHZvaWQgX19pbml0IGdldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCS8qIENoZWNrIFNwZWNpZmljLUFkZHJlc3MgMSAqLworCWlmICh1bnBhY2tfbWFjX2FkZHJlc3MoZGV2LCBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfU0ExSCksIGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19TQTFMKSkpCisJCXJldHVybjsKKwkvKiBDaGVjayBTcGVjaWZpYy1BZGRyZXNzIDIgKi8KKwlpZiAodW5wYWNrX21hY19hZGRyZXNzKGRldiwgYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX1NBMkgpLCBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfU0EyTCkpKQorCQlyZXR1cm47CisJLyogQ2hlY2sgU3BlY2lmaWMtQWRkcmVzcyAzICovCisJaWYgKHVucGFja19tYWNfYWRkcmVzcyhkZXYsIGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19TQTNIKSwgYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX1NBM0wpKSkKKwkJcmV0dXJuOworCS8qIENoZWNrIFNwZWNpZmljLUFkZHJlc3MgNCAqLworCWlmICh1bnBhY2tfbWFjX2FkZHJlc3MoZGV2LCBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfU0E0SCksIGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19TQTRMKSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0VSUiAiYXQ5MV9ldGhlcjogWW91ciBib290bG9hZGVyIGRpZCBub3QgY29uZmlndXJlIGEgTUFDIGFkZHJlc3MuXG4iKTsKK30KKworLyoKKyAqIFByb2dyYW0gdGhlIGhhcmR3YXJlIE1BQyBhZGRyZXNzIGZyb20gZGV2LT5kZXZfYWRkci4KKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19TQTFMLCAoZGV2LT5kZXZfYWRkclszXSA8PCAyNCkgfCAoZGV2LT5kZXZfYWRkclsyXSA8PCAxNikgfCAoZGV2LT5kZXZfYWRkclsxXSA8PCA4KSB8IChkZXYtPmRldl9hZGRyWzBdKSk7CisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19TQTFILCAoZGV2LT5kZXZfYWRkcls1XSA8PCA4KSB8IChkZXYtPmRldl9hZGRyWzRdKSk7CisKKwlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX1NBMkwsIDApOworCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfU0EySCwgMCk7Cit9CisKKy8qCisgKiBTdG9yZSB0aGUgbmV3IGhhcmR3YXJlIGFkZHJlc3MgaW4gZGV2LT5kZXZfYWRkciwgYW5kIHVwZGF0ZSB0aGUgTUFDLgorICovCitzdGF0aWMgaW50IHNldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkKiBhZGRyKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyA9IGFkZHI7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcmVzcy0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyZXNzLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKwl1cGRhdGVfbWFjX2FkZHJlc3MoZGV2KTsKKworCXByaW50aygiJXM6IFNldHRpbmcgTUFDIGFkZHJlc3MgdG8gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIGRldi0+bmFtZSwKKwkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKKwkJZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbmxpbmUgaGFzaF9iaXRfdmFsdWUoaW50IGJpdG5yLCBfX3U4ICphZGRyKQoreworCWlmIChhZGRyW2JpdG5yIC8gOF0gJiAoMSA8PCAoYml0bnIgJSA4KSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGhhc2ggYWRkcmVzcyByZWdpc3RlciBpcyA2NCBiaXRzIGxvbmcgYW5kIHRha2VzIHVwIHR3byBsb2NhdGlvbnMgaW4gdGhlIG1lbW9yeSBtYXAuCisgKiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUgc3RvcmVkIGluIEVNQUNfSFNMIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudAorICogYml0cyBpbiBFTUFDX0hTSC4KKyAqCisgKiBUaGUgdW5pY2FzdCBoYXNoIGVuYWJsZSBhbmQgdGhlIG11bHRpY2FzdCBoYXNoIGVuYWJsZSBiaXRzIGluIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24KKyAqICByZWdpc3RlciBlbmFibGUgdGhlIHJlY2VwdGlvbiBvZiBoYXNoIG1hdGNoZWQgZnJhbWVzLiBUaGUgZGVzdGluYXRpb24gYWRkcmVzcyBpcworICogIHJlZHVjZWQgdG8gYSA2IGJpdCBpbmRleCBpbnRvIHRoZSA2NCBiaXQgaGFzaCByZWdpc3RlciB1c2luZyB0aGUgZm9sbG93aW5nIGhhc2ggZnVuY3Rpb24uCisgKiBUaGUgaGFzaCBmdW5jdGlvbiBpcyBhbiBleGNsdXNpdmUgb3Igb2YgZXZlcnkgc2l4dGggYml0IG9mIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLgorICogICBoYXNoX2luZGV4WzVdID0gZGFbNV0gXiBkYVsxMV0gXiBkYVsxN10gXiBkYVsyM10gXiBkYVsyOV0gXiBkYVszNV0gXiBkYVs0MV0gXiBkYVs0N10KKyAqICAgaGFzaF9pbmRleFs0XSA9IGRhWzRdIF4gZGFbMTBdIF4gZGFbMTZdIF4gZGFbMjJdIF4gZGFbMjhdIF4gZGFbMzRdIF4gZGFbNDBdIF4gZGFbNDZdCisgKiAgIGhhc2hfaW5kZXhbM10gPSBkYVszXSBeIGRhWzA5XSBeIGRhWzE1XSBeIGRhWzIxXSBeIGRhWzI3XSBeIGRhWzMzXSBeIGRhWzM5XSBeIGRhWzQ1XQorICogICBoYXNoX2luZGV4WzJdID0gZGFbMl0gXiBkYVswOF0gXiBkYVsxNF0gXiBkYVsyMF0gXiBkYVsyNl0gXiBkYVszMl0gXiBkYVszOF0gXiBkYVs0NF0KKyAqICAgaGFzaF9pbmRleFsxXSA9IGRhWzFdIF4gZGFbMDddIF4gZGFbMTNdIF4gZGFbMTldIF4gZGFbMjVdIF4gZGFbMzFdIF4gZGFbMzddIF4gZGFbNDNdCisgKiAgIGhhc2hfaW5kZXhbMF0gPSBkYVswXSBeIGRhWzA2XSBeIGRhWzEyXSBeIGRhWzE4XSBeIGRhWzI0XSBeIGRhWzMwXSBeIGRhWzM2XSBeIGRhWzQyXQorICogZGFbMF0gcmVwcmVzZW50cyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBmaXJzdCBieXRlIHJlY2VpdmVkLCB0aGF0IGlzLCB0aGUgbXVsdGljYXN0LworICogIHVuaWNhc3QgaW5kaWNhdG9yLCBhbmQgZGFbNDddIHJlcHJlc2VudHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBsYXN0IGJ5dGUKKyAqICByZWNlaXZlZC4KKyAqIElmIHRoZSBoYXNoIGluZGV4IHBvaW50cyB0byBhIGJpdCB0aGF0IGlzIHNldCBpbiB0aGUgaGFzaCByZWdpc3RlciB0aGVuIHRoZSBmcmFtZSB3aWxsIGJlCisgKiAgbWF0Y2hlZCBhY2NvcmRpbmcgdG8gd2hldGhlciB0aGUgZnJhbWUgaXMgbXVsdGljYXN0IG9yIHVuaWNhc3QuCisgKiBBIG11bHRpY2FzdCBtYXRjaCB3aWxsIGJlIHNpZ25hbGxlZCBpZiB0aGUgbXVsdGljYXN0IGhhc2ggZW5hYmxlIGJpdCBpcyBzZXQsIGRhWzBdIGlzIDEgYW5kCisgKiAgdGhlIGhhc2ggaW5kZXggcG9pbnRzIHRvIGEgYml0IHNldCBpbiB0aGUgaGFzaCByZWdpc3Rlci4KKyAqIEEgdW5pY2FzdCBtYXRjaCB3aWxsIGJlIHNpZ25hbGxlZCBpZiB0aGUgdW5pY2FzdCBoYXNoIGVuYWJsZSBiaXQgaXMgc2V0LCBkYVswXSBpcyAwIGFuZCB0aGUKKyAqICBoYXNoIGluZGV4IHBvaW50cyB0byBhIGJpdCBzZXQgaW4gdGhlIGhhc2ggcmVnaXN0ZXIuCisgKiBUbyByZWNlaXZlIGFsbCBtdWx0aWNhc3QgZnJhbWVzLCB0aGUgaGFzaCByZWdpc3RlciBzaG91bGQgYmUgc2V0IHdpdGggYWxsIG9uZXMgYW5kIHRoZQorICogIG11bHRpY2FzdCBoYXNoIGVuYWJsZSBiaXQgc2hvdWxkIGJlIHNldCBpbiB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgorICovCisKKy8qCisgKiBSZXR1cm4gdGhlIGhhc2ggaW5kZXggdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBoYXNoX2dldF9pbmRleChfX3U4ICphZGRyKQoreworCWludCBpLCBqLCBiaXR2YWw7CisJaW50IGhhc2hfaW5kZXggPSAwOworCisJZm9yIChqID0gMDsgaiA8IDY7IGorKykgeworCQlmb3IgKGkgPSAwLCBiaXR2YWwgPSAwOyBpIDwgODsgaSsrKQorCQkJYml0dmFsIF49IGhhc2hfYml0X3ZhbHVlKGkqNiArIGosIGFkZHIpOworCisJCWhhc2hfaW5kZXggfD0gKGJpdHZhbCA8PCBqKTsKKwl9CisKKyAgICAgICAgcmV0dXJuIGhhc2hfaW5kZXg7Cit9CisKKy8qCisgKiBBZGQgbXVsdGljYXN0IGFkZHJlc3NlcyB0byB0aGUgaW50ZXJuYWwgbXVsdGljYXN0LWhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkIGF0OTFldGhlcl9zZXRoYXNodGFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmN1cnI7CisJdW5zaWduZWQgbG9uZyBtY19maWx0ZXJbMl07CisJdW5zaWduZWQgaW50IGksIGJpdG5yOworCisJbWNfZmlsdGVyWzBdID0gbWNfZmlsdGVyWzFdID0gMDsKKworCWN1cnIgPSBkZXYtPm1jX2xpc3Q7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgY3VyciA9IGN1cnItPm5leHQpIHsKKwkJaWYgKCFjdXJyKSBicmVhazsJLyogdW5leHBlY3RlZCBlbmQgb2YgbGlzdCAqLworCisJCWJpdG5yID0gaGFzaF9nZXRfaW5kZXgoY3Vyci0+ZG1pX2FkZHIpOworCQltY19maWx0ZXJbYml0bnIgPj4gNV0gfD0gMSA8PCAoYml0bnIgJiAzMSk7CisJfQorCisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19IU0gsIG1jX2ZpbHRlclswXSk7CisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19IU0wsIG1jX2ZpbHRlclsxXSk7Cit9CisKKy8qCisgKiBFbmFibGUvRGlzYWJsZSBwcm9taXNjdW91cyBhbmQgbXVsdGljYXN0IG1vZGVzLgorICovCitzdGF0aWMgdm9pZCBhdDkxZXRoZXJfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGNmZzsKKworCWNmZyA9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19DRkcpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykJCQkvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworCQljZmcgfD0gQVQ5MV9FTUFDX0NBRjsKKwllbHNlIGlmIChkZXYtPmZsYWdzICYgKH5JRkZfUFJPTUlTQykpCQkvKiBEaXNhYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KKwkJY2ZnICY9IH5BVDkxX0VNQUNfQ0FGOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsJCS8qIEVuYWJsZSBhbGwgbXVsdGljYXN0IG1vZGUgKi8KKwkJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19IU0gsIC0xKTsKKwkJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19IU0wsIC0xKTsKKwkJY2ZnIHw9IEFUOTFfRU1BQ19NVEk7CisJfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgewkJCS8qIEVuYWJsZSBzcGVjaWZpYyBtdWx0aWNhc3RzICovCisJCWF0OTFldGhlcl9zZXRoYXNodGFibGUoZGV2KTsKKwkJY2ZnIHw9IEFUOTFfRU1BQ19NVEk7CisJfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgKH5JRkZfQUxMTVVMVEkpKSB7CS8qIERpc2FibGUgYWxsIG11bHRpY2FzdCBtb2RlICovCisJCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfSFNILCAwKTsKKwkJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19IU0wsIDApOworCQljZmcgJj0gfkFUOTFfRU1BQ19NVEk7CisJfQorCisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19DRkcsIGNmZyk7Cit9CisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBFVEhUT09MIFNVUFBPUlQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisKKworc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCXJlYWRfcGh5KHBoeV9pZCwgbG9jYXRpb24sICZ2YWx1ZSk7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbHVlKQoreworCXdyaXRlX3BoeShwaHlfaWQsIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MWV0aGVyX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgYXQ5MV9wcml2YXRlICpscCA9IChzdHJ1Y3QgYXQ5MV9wcml2YXRlICopIGRldi0+cHJpdjsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOworCWVuYWJsZV9tZGkoKTsKKworCXJldCA9IG1paV9ldGh0b29sX2dzZXQoJmxwLT5taWksIGNtZCk7CisKKwlkaXNhYmxlX21kaSgpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCisJaWYgKGxwLT5waHlfbWVkaWEgPT0gUE9SVF9GSUJSRSkgewkJLyogb3ZlcnJpZGUgbWVkaWEgdHlwZSBzaW5jZSBtaWkuYyBkb2Vzbid0IGtub3cgKi8KKwkJY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfRklCUkU7CisJCWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdDkxZXRoZXJfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBhdDkxX3ByaXZhdGUgKmxwID0gKHN0cnVjdCBhdDkxX3ByaXZhdGUgKikgZGV2LT5wcml2OworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7CisJZW5hYmxlX21kaSgpOworCisJcmV0ID0gbWlpX2V0aHRvb2xfc3NldCgmbHAtPm1paSwgY21kKTsKKworCWRpc2FibGVfbWRpKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0OTFldGhlcl9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9wcml2YXRlICpscCA9IChzdHJ1Y3QgYXQ5MV9wcml2YXRlICopIGRldi0+cHJpdjsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOworCWVuYWJsZV9tZGkoKTsKKworCXJldCA9IG1paV9ud2F5X3Jlc3RhcnQoJmxwLT5taWkpOworCisJZGlzYWJsZV9tZGkoKTsKKwlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFldGhlcl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOworCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7CisJc3RybGNweShpbmZvLT5idXNfaW5mbywgZGV2LT5jbGFzc19kZXYuZGV2LT5idXNfaWQsIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF0OTFldGhlcl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzCT0gYXQ5MWV0aGVyX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCT0gYXQ5MWV0aGVyX3NldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8JPSBhdDkxZXRoZXJfZ2V0X2RydmluZm8sCisJLm53YXlfcmVzZXQJPSBhdDkxZXRoZXJfbndheXJlc2V0LAorCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCit9OworCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIE1BQyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCisvKgorICogSW5pdGlhbGl6ZSBhbmQgc3RhcnQgdGhlIFJlY2VpdmVyIGFuZCBUcmFuc21pdCBzdWJzeXN0ZW1zCisgKi8KK3N0YXRpYyB2b2lkIGF0OTFldGhlcl9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdDkxX3ByaXZhdGUgKmxwID0gKHN0cnVjdCBhdDkxX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCByZWN2X2Rlc2NfYnVmcyAqZGxpc3QsICpkbGlzdF9waHlzOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgY3RsOworCisJZGxpc3QgPSBscC0+ZGxpc3Q7CisJZGxpc3RfcGh5cyA9IGxwLT5kbGlzdF9waHlzOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9SWF9ERVNDUjsgaSsrKSB7CisJCWRsaXN0LT5kZXNjcmlwdG9yc1tpXS5hZGRyID0gKHVuc2lnbmVkIGludCkgJmRsaXN0X3BoeXMtPnJlY3ZfYnVmW2ldWzBdOworCQlkbGlzdC0+ZGVzY3JpcHRvcnNbaV0uc2l6ZSA9IDA7CisJfQorCisJLyogU2V0IHRoZSBXcmFwIGJpdCBvbiB0aGUgbGFzdCBkZXNjcmlwdG9yICovCisJZGxpc3QtPmRlc2NyaXB0b3JzW2ktMV0uYWRkciB8PSBFTUFDX0RFU0NfV1JBUDsKKworCS8qIFJlc2V0IGJ1ZmZlciBpbmRleCAqLworCWxwLT5yeEJ1ZmZJbmRleCA9IDA7CisKKwkvKiBQcm9ncmFtIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciBsaXN0IGluIFJ4IEJ1ZmZlciBRdWV1ZSByZWdpc3RlciAqLworCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfUkJRUCwgKHVuc2lnbmVkIGxvbmcpIGRsaXN0X3BoeXMpOworCisJLyogRW5hYmxlIFJlY2VpdmUgYW5kIFRyYW5zbWl0ICovCisJY3RsID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0NUTCk7CisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19DVEwsIGN0bCB8IEFUOTFfRU1BQ19SRSB8IEFUOTFfRU1BQ19URSk7Cit9CisKKy8qCisgKiBPcGVuIHRoZSBldGhlcm5ldCBpbnRlcmZhY2UKKyAqLworc3RhdGljIGludCBhdDkxZXRoZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdDkxX3ByaXZhdGUgKmxwID0gKHN0cnVjdCBhdDkxX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgY3RsOworCisgICAgICAgIGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkKKyAgICAgICAgCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCWNsa19lbmFibGUoZXRoZXJfY2xrKTsJCQkvKiBSZS1lbmFibGUgUGVyaXBoZXJhbCBjbG9jayAqLworCisJLyogQ2xlYXIgaW50ZXJuYWwgc3RhdGlzdGljcyAqLworCWN0bCA9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19DVEwpOworCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfQ1RMLCBjdGwgfCBBVDkxX0VNQUNfQ1NSKTsKKworCS8qIFVwZGF0ZSB0aGUgTUFDIGFkZHJlc3MgKGluY2FzZSB1c2VyIGhhcyBjaGFuZ2VkIGl0KSAqLworCXVwZGF0ZV9tYWNfYWRkcmVzcyhkZXYpOworCisJLyogRW5hYmxlIFBIWSBpbnRlcnJ1cHQgKi8KKwllbmFibGVfcGh5aXJxKGRldik7CisKKwkvKiBFbmFibGUgTUFDIGludGVycnVwdHMgKi8KKwlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0lFUiwgQVQ5MV9FTUFDX1JDT00gfCBBVDkxX0VNQUNfUkJOQQorCQkJCXwgQVQ5MV9FTUFDX1RVTkQgfCBBVDkxX0VNQUNfUlRSWSB8IEFUOTFfRU1BQ19UQ09NCisJCQkJfCBBVDkxX0VNQUNfUk9WUiB8IEFUOTFfRU1BQ19BQlQpOworCisJLyogRGV0ZXJtaW5lIGN1cnJlbnQgbGluayBzcGVlZCAqLworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwllbmFibGVfbWRpKCk7CisJdXBkYXRlX2xpbmtzcGVlZChkZXYpOworCWRpc2FibGVfbWRpKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CisKKwlhdDkxZXRoZXJfc3RhcnQoZGV2KTsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCXJldHVybiAwOworfQorCisvKgorICogQ2xvc2UgdGhlIGludGVyZmFjZQorICovCitzdGF0aWMgaW50IGF0OTFldGhlcl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgY3RsOworCisJLyogRGlzYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIgKi8KKwljdGwgPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfQ1RMKTsKKwlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0NUTCwgY3RsICYgfihBVDkxX0VNQUNfVEUgfCBBVDkxX0VNQUNfUkUpKTsKKworCS8qIERpc2FibGUgUEhZIGludGVycnVwdCAqLworCWRpc2FibGVfcGh5aXJxKGRldik7CisKKwkvKiBEaXNhYmxlIE1BQyBpbnRlcnJ1cHRzICovCisJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19JRFIsIEFUOTFfRU1BQ19SQ09NIHwgQVQ5MV9FTUFDX1JCTkEKKwkJCQl8IEFUOTFfRU1BQ19UVU5EIHwgQVQ5MV9FTUFDX1JUUlkgfCBBVDkxX0VNQUNfVENPTQorCQkJCXwgQVQ5MV9FTUFDX1JPVlIgfCBBVDkxX0VNQUNfQUJUKTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWNsa19kaXNhYmxlKGV0aGVyX2Nsayk7CQkJLyogRGlzYWJsZSBQZXJpcGhlcmFsIGNsb2NrICovCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRyYW5zbWl0IHBhY2tldC4KKyAqLworc3RhdGljIGludCBhdDkxZXRoZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXQ5MV9wcml2YXRlICpscCA9IChzdHJ1Y3QgYXQ5MV9wcml2YXRlICopIGRldi0+cHJpdjsKKworCWlmIChhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfVFNSKSAmIEFUOTFfRU1BQ19UU1JfQk5RKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCQkvKiBTdG9yZSBwYWNrZXQgaW5mb3JtYXRpb24gKHRvIGZyZWUgd2hlbiBUeCBjb21wbGV0ZWQpICovCisJCWxwLT5za2IgPSBza2I7CisJCWxwLT5za2JfbGVuZ3RoID0gc2tiLT5sZW47CisJCWxwLT5za2JfcGh5c2FkZHIgPSBkbWFfbWFwX3NpbmdsZShOVUxMLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwkJbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJCS8qIFNldCBhZGRyZXNzIG9mIHRoZSBkYXRhIGluIHRoZSBUcmFuc21pdCBBZGRyZXNzIHJlZ2lzdGVyICovCisJCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfVEFSLCBscC0+c2tiX3BoeXNhZGRyKTsKKwkJLyogU2V0IGxlbmd0aCBvZiB0aGUgcGFja2V0IGluIHRoZSBUcmFuc21pdCBDb250cm9sIHJlZ2lzdGVyICovCisJCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfVENSLCBza2ItPmxlbik7CisKKwkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdDkxX2V0aGVyLmM6IGF0OTFldGhlcl90eCgpIGNhbGxlZCwgYnV0IGRldmljZSBpcyBidXN5IVxuIik7CisJCXJldHVybiAxOwkvKiBpZiB3ZSByZXR1cm4gYW55dGhpbmcgYnV0IHplcm8sIGRldi5jOjEwNTUgY2FsbHMga2ZyZWVfc2tiKHNrYikKKwkJCQlvbiB0aGlzIHNrYiwgaGUgYWxzbyByZXBvcnRzIC1FTkVURE9XTiBhbmQgcHJpbnRrJ3MsIHNvIGVpdGhlcgorCQkJCXdlIGZyZWUgYW5kIHJldHVybigwKSBvciBkb24ndCBmcmVlIGFuZCByZXR1cm4gMSAqLworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVXBkYXRlIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgZnJvbSB0aGUgaW50ZXJuYWwgc3RhdGlzdGljcyByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXQ5MWV0aGVyX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0OTFfcHJpdmF0ZSAqbHAgPSAoc3RydWN0IGF0OTFfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJaW50IGFsZSwgbGVuZXJyLCBzZXFlLCBsY29sLCBlY29sOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlscC0+c3RhdHMucnhfcGFja2V0cyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfT0spOwkJLyogR29vZCBmcmFtZXMgcmVjZWl2ZWQgKi8KKwkJYWxlID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0FMRSk7CisJCWxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gYWxlOwkJCQkvKiBBbGlnbm1lbnQgZXJyb3JzICovCisJCWxlbmVyciA9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19FTFIpICsgYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX1VTRik7CisJCWxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzICs9IGxlbmVycjsJCQkJLyogRXhjZXNzaXZlIExlbmd0aCBvciBVbmRlcnNpemUgRnJhbWUgZXJyb3IgKi8KKwkJc2VxZSA9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19TRVFFKTsKKwkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMgKz0gc2VxZTsJCQkJLyogQ1JDIGVycm9yICovCisJCWxwLT5zdGF0cy5yeF9maWZvX2Vycm9ycyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfRFJGQyk7CS8qIFJlY2VpdmUgYnVmZmVyIG5vdCBhdmFpbGFibGUgKi8KKwkJbHAtPnN0YXRzLnJ4X2Vycm9ycyArPSAoYWxlICsgbGVuZXJyICsgc2VxZQorCQkJKyBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfQ0RFKSArIGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19SSkIpKTsKKworCQlscC0+c3RhdHMudHhfcGFja2V0cyArPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfRlJBKTsJCS8qIEZyYW1lcyBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgKi8KKwkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzICs9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19UVUUpOwkvKiBUcmFuc21pdCBGSUZPIHVuZGVycnVucyAqLworCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0NTRSk7CS8qIENhcnJpZXIgU2Vuc2UgZXJyb3JzICovCisJCWxwLT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzICs9IGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19TUUVFKTsvKiBIZWFydGJlYXQgZXJyb3IgKi8KKworCQlsY29sID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0xDT0wpOworCQllY29sID0gYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0VDT0wpOworCQlscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycyArPSBsY29sOwkJCS8qIExhdGUgY29sbGlzaW9ucyAqLworCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gZWNvbDsJCQkvKiAxNiBjb2xsaXNpb25zICovCisKKwkJbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0gKGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19TQ09MKSArIGF0OTFfZW1hY19yZWFkKEFUOTFfRU1BQ19NQ09MKSArIGxjb2wgKyBlY29sKTsKKwl9CisJcmV0dXJuICZscC0+c3RhdHM7Cit9CisKKy8qCisgKiBFeHRyYWN0IHJlY2VpdmVkIGZyYW1lIGZyb20gYnVmZmVyIGRlc2NyaXB0b3JzIGFuZCBzZW50IHRvIHVwcGVyIGxheWVycy4KKyAqIChDYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCkKKyAqLworc3RhdGljIHZvaWQgYXQ5MWV0aGVyX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0OTFfcHJpdmF0ZSAqbHAgPSAoc3RydWN0IGF0OTFfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IHJlY3ZfZGVzY19idWZzICpkbGlzdDsKKwl1bnNpZ25lZCBjaGFyICpwX3JlY3Y7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgcGt0bGVuOworCisJZGxpc3QgPSBscC0+ZGxpc3Q7CisJd2hpbGUgKGRsaXN0LT5kZXNjcmlwdG9yc1tscC0+cnhCdWZmSW5kZXhdLmFkZHIgJiBFTUFDX0RFU0NfRE9ORSkgeworCQlwX3JlY3YgPSBkbGlzdC0+cmVjdl9idWZbbHAtPnJ4QnVmZkluZGV4XTsKKwkJcGt0bGVuID0gZGxpc3QtPmRlc2NyaXB0b3JzW2xwLT5yeEJ1ZmZJbmRleF0uc2l6ZSAmIDB4N2ZmOwkvKiBMZW5ndGggb2YgZnJhbWUgaW5jbHVkaW5nIEZDUyAqLworCQlza2IgPSBhbGxvY19za2IocGt0bGVuICsgMiwgR0ZQX0FUT01JQyk7CisJCWlmIChza2IgIT0gTlVMTCkgeworCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgcGt0bGVuKSwgcF9yZWN2LCBwa3RsZW4pOworCisJCQlza2ItPmRldiA9IGRldjsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQlza2ItPmxlbiA9IHBrdGxlbjsKKwkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0bGVuOworCQkJbmV0aWZfcngoc2tiKTsKKwkJfQorCQllbHNlIHsKKwkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkICs9IDE7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsKKwkJfQorCisJCWlmIChkbGlzdC0+ZGVzY3JpcHRvcnNbbHAtPnJ4QnVmZkluZGV4XS5zaXplICYgRU1BQ19NVUxUSUNBU1QpCisJCQlscC0+c3RhdHMubXVsdGljYXN0Kys7CisKKwkJZGxpc3QtPmRlc2NyaXB0b3JzW2xwLT5yeEJ1ZmZJbmRleF0uYWRkciAmPSB+RU1BQ19ERVNDX0RPTkU7CS8qIHJlc2V0IG93bmVyc2hpcCBiaXQgKi8KKwkJaWYgKGxwLT5yeEJ1ZmZJbmRleCA9PSBNQVhfUlhfREVTQ1ItMSkJCQkJLyogd3JhcCBhZnRlciBsYXN0IGJ1ZmZlciAqLworCQkJbHAtPnJ4QnVmZkluZGV4ID0gMDsKKwkJZWxzZQorCQkJbHAtPnJ4QnVmZkluZGV4Kys7CisJfQorfQorCisvKgorICogTUFDIGludGVycnVwdCBoYW5kbGVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBhdDkxZXRoZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7CisJc3RydWN0IGF0OTFfcHJpdmF0ZSAqbHAgPSAoc3RydWN0IGF0OTFfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBpbnRzdGF0dXMsIGN0bDsKKworCS8qIE1BQyBJbnRlcnJ1cHQgU3RhdHVzIHJlZ2lzdGVyIGluZGljYXRlcyB3aGF0IGludGVycnVwdHMgYXJlIHBlbmRpbmcuCisJICAgSXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIG9uY2UgcmVhZC4gKi8KKwlpbnRzdGF0dXMgPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfSVNSKTsKKworCWlmIChpbnRzdGF0dXMgJiBBVDkxX0VNQUNfUkNPTSkJCS8qIFJlY2VpdmUgY29tcGxldGUgKi8KKwkJYXQ5MWV0aGVyX3J4KGRldik7CisKKwlpZiAoaW50c3RhdHVzICYgQVQ5MV9FTUFDX1RDT00pIHsJCS8qIFRyYW5zbWl0IGNvbXBsZXRlICovCisJCS8qIFRoZSBUQ09NIGJpdCBpcyBzZXQgZXZlbiBpZiB0aGUgdHJhbnNtaXNzaW9uIGZhaWxlZC4gKi8KKwkJaWYgKGludHN0YXR1cyAmIChBVDkxX0VNQUNfVFVORCB8IEFUOTFfRU1BQ19SVFJZKSkKKwkJCWxwLT5zdGF0cy50eF9lcnJvcnMgKz0gMTsKKworCQlpZiAobHAtPnNrYikgeworCQkJZGV2X2tmcmVlX3NrYl9pcnEobHAtPnNrYik7CisJCQlscC0+c2tiID0gTlVMTDsKKwkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgbHAtPnNrYl9waHlzYWRkciwgbHAtPnNrYl9sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCQl9CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9CisKKwkvKiBXb3JrLWFyb3VuZCBmb3IgRXJyYXRhICMxMSAqLworCWlmIChpbnRzdGF0dXMgJiBBVDkxX0VNQUNfUkJOQSkgeworCQljdGwgPSBhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfQ1RMKTsKKwkJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19DVEwsIGN0bCAmIH5BVDkxX0VNQUNfUkUpOworCQlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0NUTCwgY3RsIHwgQVQ5MV9FTUFDX1JFKTsKKwl9CisKKwlpZiAoaW50c3RhdHVzICYgQVQ5MV9FTUFDX1JPVlIpCisJCXByaW50aygiJXM6IFJPVlIgZXJyb3JcbiIsIGRldi0+bmFtZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBldGhlcm5ldCBpbnRlcmZhY2UKKyAqLworc3RhdGljIGludCBfX2luaXQgYXQ5MWV0aGVyX3NldHVwKHVuc2lnbmVkIGxvbmcgcGh5X3R5cGUsIHVuc2lnbmVkIHNob3J0IHBoeV9hZGRyZXNzLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdDkxX2V0aF9kYXRhICpib2FyZF9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgYXQ5MV9wcml2YXRlICpscDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXM7CisKKwlpZiAoYXQ5MV9kZXYpCQkJLyogYWxyZWFkeSBpbml0aWFsaXplZCAqLworCQlyZXR1cm4gMDsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgYXQ5MV9wcml2YXRlKSk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5iYXNlX2FkZHIgPSBBVDkxX1ZBX0JBU0VfRU1BQzsKKwlkZXYtPmlycSA9IEFUOTFfSURfRU1BQzsKKwlTRVRfTU9EVUxFX09XTkVSKGRldik7CisKKwkvKiBJbnN0YWxsIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgYXQ5MWV0aGVyX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpKSB7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBETUEgUmVjZWl2ZSBkZXNjcmlwdG9ycyAqLworCWxwID0gKHN0cnVjdCBhdDkxX3ByaXZhdGUgKilkZXYtPnByaXY7CisJbHAtPmRsaXN0ID0gKHN0cnVjdCByZWN2X2Rlc2NfYnVmcyAqKSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCByZWN2X2Rlc2NfYnVmcyksIChkbWFfYWRkcl90ICopICZscC0+ZGxpc3RfcGh5cywgR0ZQX0tFUk5FTCk7CisJaWYgKGxwLT5kbGlzdCA9PSBOVUxMKSB7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlmcmVlX25ldGRldihkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbHAtPmJvYXJkX2RhdGEgPSAqYm9hcmRfZGF0YTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCisJc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKKworCWV0aGVyX3NldHVwKGRldik7CisJZGV2LT5vcGVuID0gYXQ5MWV0aGVyX29wZW47CisJZGV2LT5zdG9wID0gYXQ5MWV0aGVyX2Nsb3NlOworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYXQ5MWV0aGVyX3R4OworCWRldi0+Z2V0X3N0YXRzID0gYXQ5MWV0aGVyX3N0YXRzOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gYXQ5MWV0aGVyX3NldF9yeF9tb2RlOworCWRldi0+c2V0X21hY19hZGRyZXNzID0gc2V0X21hY19hZGRyZXNzOworCWRldi0+ZXRodG9vbF9vcHMgPSAmYXQ5MWV0aGVyX2V0aHRvb2xfb3BzOworCisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKworCWdldF9tYWNfYWRkcmVzcyhkZXYpOwkJLyogR2V0IGV0aGVybmV0IGFkZHJlc3MgYW5kIHN0b3JlIGl0IGluIGRldi0+ZGV2X2FkZHIgKi8KKwl1cGRhdGVfbWFjX2FkZHJlc3MoZGV2KTsJLyogUHJvZ3JhbSBldGhlcm5ldCBhZGRyZXNzIGludG8gTUFDICovCisKKwlhdDkxX2VtYWNfd3JpdGUoQVQ5MV9FTUFDX0NUTCwgMCk7CisKKwlpZiAobHAtPmJvYXJkX2RhdGEuaXNfcm1paSkKKwkJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19DRkcsIEFUOTFfRU1BQ19DTEtfRElWMzIgfCBBVDkxX0VNQUNfQklHIHwgQVQ5MV9FTUFDX1JNSUkpOworCWVsc2UKKwkJYXQ5MV9lbWFjX3dyaXRlKEFUOTFfRU1BQ19DRkcsIEFUOTFfRU1BQ19DTEtfRElWMzIgfCBBVDkxX0VNQUNfQklHKTsKKworCS8qIFBlcmZvcm0gUEhZLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOworCWVuYWJsZV9tZGkoKTsKKwlpZiAoKHBoeV90eXBlID09IE1JSV9ETTkxNjFfSUQpIHx8IChscC0+cGh5X3R5cGUgPT0gTUlJX0RNOTE2MUFfSUQpKSB7CisJCXJlYWRfcGh5KHBoeV9hZGRyZXNzLCBNSUlfRFNDUl9SRUcsICZ2YWwpOworCQlpZiAoKHZhbCAmICgxIDw8IDEwKSkgPT0gMCkJCQkvKiBEU0NSIGJpdCAxMCBpcyAwIC0tIGZpYmVyIG1vZGUgKi8KKwkJCWxwLT5waHlfbWVkaWEgPSBQT1JUX0ZJQlJFOworCX0gZWxzZSBpZiAobWFjaGluZV9pc19jc2IzMzcoKSkgeworCQkvKiBtaXggbGluayBhY3Rpdml0eSBzdGF0dXMgaW50byBMRUQyIGxpbmsgc3RhdGUgKi8KKwkJd3JpdGVfcGh5KHBoeV9hZGRyZXNzLCBNSUlfTEVEQ1RSTF9SRUcsIDB4MGQyMik7CisJfQorCWRpc2FibGVfbWRpKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CisKKwlscC0+bWlpLmRldiA9IGRldjsJCS8qIFN1cHBvcnQgZm9yIGV0aHRvb2wgKi8KKwlscC0+bWlpLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKKwlscC0+bWlpLm1kaW9fd3JpdGUgPSBtZGlvX3dyaXRlOworCisJbHAtPnBoeV90eXBlID0gcGh5X3R5cGU7CS8qIFR5cGUgb2YgUEhZIGNvbm5lY3RlZCAqLworCWxwLT5waHlfYWRkcmVzcyA9IHBoeV9hZGRyZXNzOwkvKiBNREkgYWRkcmVzcyBvZiBQSFkgKi8KKworCS8qIFJlZ2lzdGVyIHRoZSBuZXR3b3JrIGludGVyZmFjZSAqLworCXJlcyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyZXMpIHsKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIHNpemVvZihzdHJ1Y3QgcmVjdl9kZXNjX2J1ZnMpLCBscC0+ZGxpc3QsIChkbWFfYWRkcl90KWxwLT5kbGlzdF9waHlzKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJYXQ5MV9kZXYgPSBkZXY7CisKKwkvKiBEZXRlcm1pbmUgY3VycmVudCBsaW5rIHNwZWVkICovCisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOworCWVuYWJsZV9tZGkoKTsKKwl1cGRhdGVfbGlua3NwZWVkKGRldik7CisJZGlzYWJsZV9tZGkoKTsKKwlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOwkJLyogd2lsbCBiZSBlbmFibGVkIGluIG9wZW4oKSAqLworCisJLyogRGlzcGxheSBldGhlcm5ldCBiYW5uZXIgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogQVQ5MSBldGhlcm5ldCBhdCAweCUwOHggaW50PSVkICVzJXMgKCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwKKwkJZGV2LT5uYW1lLCAodWludCkgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxLAorCQlhdDkxX2VtYWNfcmVhZChBVDkxX0VNQUNfQ0ZHKSAmIEFUOTFfRU1BQ19TUEQgPyAiMTAwLSIgOiAiMTAtIiwKKwkJYXQ5MV9lbWFjX3JlYWQoQVQ5MV9FTUFDX0NGRykgJiBBVDkxX0VNQUNfRkQgPyAiRnVsbER1cGxleCIgOiAiSGFsZkR1cGxleCIsCisJCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sIGRldi0+ZGV2X2FkZHJbMl0sCisJCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOworCWlmICgocGh5X3R5cGUgPT0gTUlJX0RNOTE2MV9JRCkgfHwgKGxwLT5waHlfdHlwZSA9PSBNSUlfRE05MTYxQV9JRCkpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBEYXZpY29tIDkxOTYgUEhZICVzXG4iLCBkZXYtPm5hbWUsIChscC0+cGh5X21lZGlhID09IFBPUlRfRklCUkUpID8gIihGaWJlcikiIDogIihDb3BwZXIpIik7CisJZWxzZSBpZiAocGh5X3R5cGUgPT0gTUlJX0xYVDk3MUFfSUQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJbnRlbCBMWFQ5NzFBIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwllbHNlIGlmIChwaHlfdHlwZSA9PSBNSUlfUlRMODIwMV9JRCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlYWx0ZWsgUlRMODIwMShCKUwgUEhZXG4iLCBkZXYtPm5hbWUpOworCWVsc2UgaWYgKHBoeV90eXBlID09IE1JSV9CQ001MjIxX0lEKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogQnJvYWRjb20gQkNNNTIyMSBQSFlcbiIsIGRldi0+bmFtZSk7CisJZWxzZSBpZiAocGh5X3R5cGUgPT0gTUlJX0RQODM4NDdfSUQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIERQODM4NDcgUEhZXG4iLCBkZXYtPm5hbWUpOworCWVsc2UgaWYgKHBoeV90eXBlID09IE1JSV9BQzEwMUxfSUQpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBbHRpbWEgQUMxMDFMIFBIWVxuIiwgZGV2LT5uYW1lKTsKKwllbHNlIGlmIChwaHlfdHlwZSA9PSBNSUlfS1M4NzIxX0lEKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogTWljcmVsIEtTODcyMSBQSFlcbiIsIGRldi0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERldGVjdCBNQUMgYW5kIFBIWSBhbmQgcGVyZm9ybSBpbml0aWFsaXphdGlvbgorICovCitzdGF0aWMgaW50IF9faW5pdCBhdDkxZXRoZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1bnNpZ25lZCBpbnQgcGh5aWQxLCBwaHlpZDI7CisJaW50IGRldGVjdGVkID0gLTE7CisJdW5zaWduZWQgbG9uZyBwaHlfaWQ7CisJdW5zaWduZWQgc2hvcnQgcGh5X2FkZHJlc3MgPSAwOworCisJZXRoZXJfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZXRoZXJfY2xrIik7CisJaWYgKCFldGhlcl9jbGspIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdDkxX2V0aGVyOiBubyBjbG9jayBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWNsa19lbmFibGUoZXRoZXJfY2xrKTsJCQkJCS8qIEVuYWJsZSBQZXJpcGhlcmFsIGNsb2NrICovCisKKwl3aGlsZSAoKGRldGVjdGVkICE9IDApICYmIChwaHlfYWRkcmVzcyA8IDMyKSkgeworCQkvKiBSZWFkIHRoZSBQSFkgSUQgcmVnaXN0ZXJzICovCisJCWVuYWJsZV9tZGkoKTsKKwkJcmVhZF9waHkocGh5X2FkZHJlc3MsIE1JSV9QSFlTSUQxLCAmcGh5aWQxKTsKKwkJcmVhZF9waHkocGh5X2FkZHJlc3MsIE1JSV9QSFlTSUQyLCAmcGh5aWQyKTsKKwkJZGlzYWJsZV9tZGkoKTsKKworCQlwaHlfaWQgPSAocGh5aWQxIDw8IDE2KSB8IChwaHlpZDIgJiAweGZmZjApOworCQlzd2l0Y2ggKHBoeV9pZCkgeworCQkJY2FzZSBNSUlfRE05MTYxX0lEOgkJLyogRGF2aWNvbSA5MTYxOiBQSFlfSUQxID0gMHgxODEsIFBIWV9JRDIgPSBCODgxICovCisJCQljYXNlIE1JSV9ETTkxNjFBX0lEOgkJLyogRGF2aWNvbSA5MTYxQTogUEhZX0lEMSA9IDB4MTgxLCBQSFlfSUQyID0gQjhBMCAqLworCQkJY2FzZSBNSUlfTFhUOTcxQV9JRDoJCS8qIEludGVsIExYVDk3MUE6IFBIWV9JRDEgPSAweDEzLCBQSFlfSUQyID0gNzhFMCAqLworCQkJY2FzZSBNSUlfUlRMODIwMV9JRDoJCS8qIFJlYWx0ZWsgUlRMODIwMTogUEhZX0lEMSA9IDAsIFBIWV9JRDIgPSAweDgyMDEgKi8KKwkJCWNhc2UgTUlJX0JDTTUyMjFfSUQ6CQkvKiBCcm9hZGNvbSBCQ001MjIxOiBQSFlfSUQxID0gMHg0MCwgUEhZX0lEMiA9IDB4NjFlMCAqLworCQkJY2FzZSBNSUlfRFA4Mzg0N19JRDoJCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgRFA4Mzg0NzogICovCisJCQljYXNlIE1JSV9BQzEwMUxfSUQ6CQkvKiBBbHRpbWEgQUMxMDFMOiBQSFlfSUQxID0gMHgyMiwgUEhZX0lEMiA9IDB4NTUyMCAqLworCQkJY2FzZSBNSUlfS1M4NzIxX0lEOgkJLyogTWljcmVsIEtTODcyMTogUEhZX0lEMSA9IDB4MjIsIFBIWV9JRDIgPSAweDE2MTAgKi8KKwkJCQlkZXRlY3RlZCA9IGF0OTFldGhlcl9zZXR1cChwaHlfaWQsIHBoeV9hZGRyZXNzLCBwZGV2KTsKKwkJCQlicmVhazsKKwkJfQorCisJCXBoeV9hZGRyZXNzKys7CisJfQorCisJY2xrX2Rpc2FibGUoZXRoZXJfY2xrKTsJCQkJCS8qIERpc2FibGUgUGVyaXBoZXJhbCBjbG9jayAqLworCisJcmV0dXJuIGRldGVjdGVkOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdDkxZXRoZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGF0OTFfcHJpdmF0ZSAqbHAgPSAoc3RydWN0IGF0OTFfcHJpdmF0ZSAqKSBhdDkxX2Rldi0+cHJpdjsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KGF0OTFfZGV2KTsKKwlmcmVlX2lycShhdDkxX2Rldi0+aXJxLCBhdDkxX2Rldik7CisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCByZWN2X2Rlc2NfYnVmcyksIGxwLT5kbGlzdCwgKGRtYV9hZGRyX3QpbHAtPmRsaXN0X3BoeXMpOworCWNsa19wdXQoZXRoZXJfY2xrKTsKKworCWZyZWVfbmV0ZGV2KGF0OTFfZGV2KTsKKwlhdDkxX2RldiA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0OTFldGhlcl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGF0OTFldGhlcl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0OTFldGhlcl9yZW1vdmUpLAorCS8qIEZJWE1FOiAgc3VwcG9ydCBzdXNwZW5kIGFuZCByZXN1bWUgKi8KKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUlZfTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGF0OTFldGhlcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXQ5MWV0aGVyX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdDkxZXRoZXJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdDkxZXRoZXJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYXQ5MWV0aGVyX2luaXQpCittb2R1bGVfZXhpdChhdDkxZXRoZXJfZXhpdCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBVDkxUk05MjAwIEVNQUMgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJBbmRyZXcgVmljdG9yIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5oIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODg1NzM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIEV0aGVybmV0IGRyaXZlciBmb3IgdGhlIEF0bWVsIEFUOTFSTTkyMDAgKFRodW5kZXIpCisgKgorICogIENvcHlyaWdodCAoQykgU0FOIFBlb3BsZSAoUHR5KSBMdGQKKyAqCisgKiBCYXNlZCBvbiBhbiBlYXJsaWVyIEF0bWVsIEVNQUMgbWFjcm9jZWxsIGRyaXZlciBieSBBdG1lbCBhbmQgTGluZW8gSW5jLgorICogSW5pdGlhbCB2ZXJzaW9uIGJ5IFJpY2sgQnJvbnNvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQVQ5MV9FVEhFUk5FVAorI2RlZmluZSBBVDkxX0VUSEVSTkVUCisKKworLyogRGF2aWNvbSA5MTYxIFBIWSAqLworI2RlZmluZSBNSUlfRE05MTYxX0lECTB4MDE4MWI4ODAKKyNkZWZpbmUgTUlJX0RNOTE2MUFfSUQJMHgwMTgxYjhhMAorCisvKiBEYXZpY29tIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBNSUlfRFNDUl9SRUcJMTYKKyNkZWZpbmUgTUlJX0RTQ1NSX1JFRwkxNworI2RlZmluZSBNSUlfRFNJTlRSX1JFRwkyMQorCisvKiBJbnRlbCBMWFQ5NzFBIFBIWSAqLworI2RlZmluZSBNSUlfTFhUOTcxQV9JRAkweDAwMTM3OEUwCisKKy8qIEludGVsIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBNSUlfSVNJTlRFX1JFRwkxOAorI2RlZmluZSBNSUlfSVNJTlRTX1JFRwkxOQorI2RlZmluZSBNSUlfTEVEQ1RSTF9SRUcJMjAKKworLyogUmVhbHRlayBSVEw4MjAxIFBIWSAqLworI2RlZmluZSBNSUlfUlRMODIwMV9JRAkweDAwMDA4MjAwCisKKy8qIEJyb2FkY29tIEJDTTUyMjEgUEhZICovCisjZGVmaW5lIE1JSV9CQ001MjIxX0lECTB4MDA0MDYxZTAKKworLyogQnJvYWRjb20gc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1JSV9CQ01JTlRSX1JFRwkyNgorCisvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIERQODM4NDcgKi8KKyNkZWZpbmUgTUlJX0RQODM4NDdfSUQJMHgyMDAwNWMzMAorCisvKiBBbHRpbWEgQUMxMDFMIFBIWSAqLworI2RlZmluZSBNSUlfQUMxMDFMX0lECTB4MDAyMjU1MjAKKworLyogTWljcmVsIEtTODcyMSBQSFkgKi8KKyNkZWZpbmUgTUlJX0tTODcyMV9JRAkweDAwMjIxNjEwCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworCisjZGVmaW5lIE1BWF9SQlVGRl9TWgkweDYwMAkJLyogMTUxOCByb3VuZGVkIHVwICovCisjZGVmaW5lIE1BWF9SWF9ERVNDUgk5CQkvKiBtYXggbnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVycyAqLworCisjZGVmaW5lIEVNQUNfREVTQ19ET05FCTB4MDAwMDAwMDEJLyogYml0IGZvciBpZiBETUEgaXMgZG9uZSAqLworI2RlZmluZSBFTUFDX0RFU0NfV1JBUAkweDAwMDAwMDAyCS8qIGJpdCBmb3Igd3JhcCAqLworCisjZGVmaW5lIEVNQUNfQlJPQURDQVNUCTB4ODAwMDAwMDAJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKyNkZWZpbmUgRU1BQ19NVUxUSUNBU1QJMHg0MDAwMDAwMAkvKiBtdWx0aWNhc3QgYWRkcmVzcyAqLworI2RlZmluZSBFTUFDX1VOSUNBU1QJMHgyMDAwMDAwMAkvKiB1bmljYXN0IGFkZHJlc3MgKi8KKworc3RydWN0IHJiZl90Cit7CisJdW5zaWduZWQgaW50IGFkZHI7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworc3RydWN0IHJlY3ZfZGVzY19idWZzCit7CisJc3RydWN0IHJiZl90IGRlc2NyaXB0b3JzW01BWF9SWF9ERVNDUl07CQkvKiBtdXN0IGJlIG9uIHNpemVvZiAocmJmX3QpIGJvdW5kYXJ5ICovCisJY2hhciByZWN2X2J1ZltNQVhfUlhfREVTQ1JdW01BWF9SQlVGRl9TWl07CS8qIG11c3QgYmUgb24gbG9uZyBib3VuZGFyeSAqLworfTsKKworc3RydWN0IGF0OTFfcHJpdmF0ZQoreworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWk7CQkJLyogZXRodG9vbCBzdXBwb3J0ICovCisJc3RydWN0IGF0OTFfZXRoX2RhdGEgYm9hcmRfZGF0YTsJLyogYm9hcmQtc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLworCisJLyogUEhZICovCisJdW5zaWduZWQgbG9uZyBwaHlfdHlwZTsJCQkvKiB0eXBlIG9mIFBIWSAoUEhZX0lEKSAqLworCXNwaW5sb2NrX3QgbG9jazsJCQkvKiBsb2NrIGZvciBNREkgaW50ZXJmYWNlICovCisJc2hvcnQgcGh5X21lZGlhOwkJCS8qIG1lZGlhIGludGVyZmFjZSB0eXBlICovCisJdW5zaWduZWQgc2hvcnQgcGh5X2FkZHJlc3M7CQkvKiA1LWJpdCBNREkgYWRkcmVzcyBvZiBQSFkgKDAuLjMxKSAqLworCisJLyogVHJhbnNtaXQgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwkJCS8qIGhvbGRzIHNrYiB1bnRpbCB4bWl0IGludGVycnVwdCBjb21wbGV0ZXMgKi8KKwlkbWFfYWRkcl90IHNrYl9waHlzYWRkcjsJCS8qIHBoeXMgYWRkciBmcm9tIHBjaV9tYXBfc2luZ2xlICovCisJaW50IHNrYl9sZW5ndGg7CQkJCS8qIHNhdmVkIHNrYiBsZW5ndGggZm9yIHBjaV91bm1hcF9zaW5nbGUgKi8KKworCS8qIFJlY2VpdmUgKi8KKwlpbnQgcnhCdWZmSW5kZXg7CQkJLyogaW5kZXggaW50byByZWNlaXZlIGRlc2NyaXB0b3IgbGlzdCAqLworCXN0cnVjdCByZWN2X2Rlc2NfYnVmcyAqZGxpc3Q7CQkvKiBkZXNjcmlwdG9yIGxpc3QgYWRkcmVzcyAqLworCXN0cnVjdCByZWN2X2Rlc2NfYnVmcyAqZGxpc3RfcGh5czsJLyogZGVzY3JpcHRvciBsaXN0IHBoeXNpY2FsIGFkZHJlc3MgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCmluZGV4IDZhOTNiNjYuLmQ1MmRlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9lY2FyZC5oPgpAQCAtMzU1LDcgKzM1Niw3IEBACiAJZG1hX3N0YXJ0ID0gamlmZmllczsKIAogCXdoaWxlICgocmVhZGIgKGFkZHIgKyBFTjBfSVNSKSAmIEVOSVNSX1JEQykgPT0gMCkKLQkJaWYgKGppZmZpZXMgLSBkbWFfc3RhcnQgPiAyKkhaLzEwMCkgeyAvKiAyMG1zICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRtYV9zdGFydCArIDIqSFovMTAwKSkgeyAvKiAyMG1zICovCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIFRYIFJEQ1xuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJZXRoZXJoX3Jlc2V0IChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRhcmlfYmlvbmV0LmMgYi9kcml2ZXJzL25ldC9hdGFyaV9iaW9uZXQuYwppbmRleCAwMDk1Mzg0Zi4uNWU1ZjgwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRhcmlfYmlvbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXRhcmlfYmlvbmV0LmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogICogR2xvYmFsIHZhcmlhYmxlICdiaW9uZXRfZGVidWcnLiBDYW4gYmUgc2V0IGF0IGxvYWQgdGltZSBieSAnaW5zbW9kJwogICovCiB1bnNpZ25lZCBpbnQgYmlvbmV0X2RlYnVnID0gTkVUX0RFQlVHOwotTU9EVUxFX1BBUk0oYmlvbmV0X2RlYnVnLCAiaSIpOworbW9kdWxlX3BhcmFtKGJpb25ldF9kZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYmlvbmV0X2RlYnVnLCAiYmlvbmV0IGRlYnVnIGxldmVsICgwLTIpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0YXJpX3BhbXNuZXQuYyBiL2RyaXZlcnMvbmV0L2F0YXJpX3BhbXNuZXQuYwppbmRleCA4Yjk5NzgwLi5kNjAzOWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGFyaV9wYW1zbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXRhcmlfcGFtc25ldC5jCkBAIC0xMTksNyArMTE5LDcgQEAKICAqIEdsb2JhbCB2YXJpYWJsZSAncGFtc25ldF9kZWJ1ZycuIENhbiBiZSBzZXQgYXQgbG9hZCB0aW1lIGJ5ICdpbnNtb2QnCiAgKi8KIHVuc2lnbmVkIGludCBwYW1zbmV0X2RlYnVnID0gTkVUX0RFQlVHOwotTU9EVUxFX1BBUk0ocGFtc25ldF9kZWJ1ZywgImkiKTsKK21vZHVsZV9wYXJhbShwYW1zbmV0X2RlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwYW1zbmV0X2RlYnVnLCAicGFtc25ldCBkZWJ1ZyBlbmFibGUgKDAtMSkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCmluZGV4IGUwMWI2YTcuLjQ0MmIyY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKQEAgLTc4LDcgKzc4LDcgQEAKICNlbHNlCiBzdGF0aWMgaW50IGxhbmNlX2RlYnVnID0gMTsKICNlbmRpZgotTU9EVUxFX1BBUk0obGFuY2VfZGVidWcsICJpIik7Cittb2R1bGVfcGFyYW0obGFuY2VfZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxhbmNlX2RlYnVnLCAiYXRhcmlsYW5jZSBkZWJ1ZyBsZXZlbCAoMC0zKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggY2QwYjFkYy4uMTM2MzA4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtOTAsOCArOTAsNiBAQAogc3RhdGljIGludCBhdTEwMDBfc2V0X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7CiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXUxMDAwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyLCB1MzIpOwotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOwogc3RhdGljIHZvaWQgYXUxMDAwX3RpbWVyKHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIGludCBhdTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCk7CiBzdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCk7CkBAIC0xODI1LDE2ICsxODIzLDExIEBACiAJfQogfQogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAKLXVwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzLCB1MzIgcGt0X2xlbikKK3N0YXRpYyB2b2lkIHVwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdHVzKQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmF1cC0+c3RhdHM7CiAKLQlwcy0+dHhfcGFja2V0cysrOwotCXBzLT50eF9ieXRlcyArPSBwa3RfbGVuOwotCiAJaWYgKHN0YXR1cyAmIFRYX0ZSQU1FX0FCT1JURUQpIHsKIAkJaWYgKGRldi0+aWZfcG9ydCA9PSBJRl9QT1JUXzEwMEJBU0VGWCkgewogCQkJaWYgKHN0YXR1cyAmIChUWF9KQUJfVElNRU9VVCB8IFRYX1VOREVSUlVOKSkgewpAQCAtMTg2Nyw3ICsxODYwLDcgQEAKIAlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOwogCiAJd2hpbGUgKHB0eGQtPmJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgewotCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMsIHB0eGQtPmxlbiAmIDB4M2ZmKTsKKwkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKIAkJcHR4ZC0+YnVmZl9zdGF0ICY9IH5UWF9UX0RPTkU7CiAJCXB0eGQtPmxlbiA9IDA7CiAJCWF1X3N5bmMoKTsKQEAgLTE4ODksNiArMTg4Miw3IEBACiBzdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmF1cC0+c3RhdHM7CiAJdm9sYXRpbGUgdHhfZG1hX3QgKnB0eGQ7CiAJdTMyIGJ1ZmZfc3RhdDsKIAlkYl9kZXN0X3QgKnBEQjsKQEAgLTE5MDgsNyArMTkwMiw3IEBACiAJCXJldHVybiAxOwogCX0KIAllbHNlIGlmIChidWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKLQkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzLCBwdHhkLT5sZW4gJiAweDNmZik7CisJCXVwZGF0ZV90eF9zdGF0cyhkZXYsIHB0eGQtPnN0YXR1cyk7CiAJCXB0eGQtPmxlbiA9IDA7CiAJfQogCkBAIC0xOTI4LDYgKzE5MjIsOSBAQAogCWVsc2UKIAkJcHR4ZC0+bGVuID0gc2tiLT5sZW47CiAKKwlwcy0+dHhfcGFja2V0cysrOworCXBzLT50eF9ieXRlcyArPSBwdHhkLT5sZW47CisKIAlwdHhkLT5idWZmX3N0YXQgPSBwREItPmRtYV9hZGRyIHwgVFhfRE1BX0VOQUJMRTsKIAlhdV9zeW5jKCk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTkzNiw3ICsxOTMzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3J4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpCiB7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSAoc3RydWN0IGF1MTAwMF9wcml2YXRlICopIGRldi0+cHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCBhMjQyMDBkLi4yNjcxZGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC05LDEzICs5LDU0IEBACiAgKiBXcml0dGVuIGJ5OiBNaWNoYWVsIENoYW4gIChtY2hhbkBicm9hZGNvbS5jb20pCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2lmZGVmIE5FVElGX0ZfSFdfVkxBTl9UWAorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNkZWZpbmUgQkNNX1ZMQU4gMQorI2VuZGlmCisjaWZkZWYgTkVUSUZfRl9UU08KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjZGVmaW5lIEJDTV9UU08gMQorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisKICNpbmNsdWRlICJibngyLmgiCiAjaW5jbHVkZSAiYm54Ml9mdy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDIiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNC4zMSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKYW51YXJ5IDE5LCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNC4zOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXJjaCAyMiwgMjAwNiIKIAogI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCiAKQEAgLTQ2LDcgKzg3LDcgQEAKIH0gYm9hcmRfdDsKIAogLyogaW5kZXhlZCBieSBib2FyZF90LCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAljaGFyICpuYW1lOwogfSBib2FyZF9pbmZvW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTcwNiAxMDAwQmFzZS1UIiB9LApAQCAtMzEzLDggKzM1NCw2IEBACiBzdGF0aWMgdm9pZAogYm54Ml9lbmFibGVfaW50KHN0cnVjdCBibngyICpicCkKIHsKLQl1MzIgdmFsOwotCiAJUkVHX1dSKGJwLCBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRCwKIAkgICAgICAgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfSU5ERVhfVkFMSUQgfAogCSAgICAgICBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9NQVNLX0lOVCB8IGJwLT5sYXN0X3N0YXR1c19pZHgpOwpAQCAtMzIyLDggKzM2MSw3IEBACiAJUkVHX1dSKGJwLCBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRCwKIAkgICAgICAgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfSU5ERVhfVkFMSUQgfCBicC0+bGFzdF9zdGF0dXNfaWR4KTsKIAotCXZhbCA9IFJFR19SRChicCwgQk5YMl9IQ19DT01NQU5EKTsKLQlSRUdfV1IoYnAsIEJOWDJfSENfQ09NTUFORCwgdmFsIHwgQk5YMl9IQ19DT01NQU5EX0NPQUxfTk9XKTsKKwlSRUdfV1IoYnAsIEJOWDJfSENfQ09NTUFORCwgYnAtPmhjX2NtZCB8IEJOWDJfSENfQ09NTUFORF9DT0FMX05PVyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zNjAsMTUgKzM5OCwxMyBAQAogc3RhdGljIHZvaWQKIGJueDJfZnJlZV9tZW0oc3RydWN0IGJueDIgKmJwKQogewotCWlmIChicC0+c3RhdHNfYmxrKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYnAtPnBkZXYsIHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jayksCi0JCQkJICAgIGJwLT5zdGF0c19ibGssIGJwLT5zdGF0c19ibGtfbWFwcGluZyk7Ci0JCWJwLT5zdGF0c19ibGsgPSBOVUxMOwotCX0KKwlpbnQgaTsKKwogCWlmIChicC0+c3RhdHVzX2JsaykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBzaXplb2Yoc3RydWN0IHN0YXR1c19ibG9jayksCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYnAtPnBkZXYsIGJwLT5zdGF0dXNfc3RhdHNfc2l6ZSwKIAkJCQkgICAgYnAtPnN0YXR1c19ibGssIGJwLT5zdGF0dXNfYmxrX21hcHBpbmcpOwogCQlicC0+c3RhdHVzX2JsayA9IE5VTEw7CisJCWJwLT5zdGF0c19ibGsgPSBOVUxMOwogCX0KIAlpZiAoYnAtPnR4X2Rlc2NfcmluZykgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LApAQCAtMzc4LDI1ICs0MTQsMjggQEAKIAl9CiAJa2ZyZWUoYnAtPnR4X2J1Zl9yaW5nKTsKIAlicC0+dHhfYnVmX3JpbmcgPSBOVUxMOwotCWlmIChicC0+cnhfZGVzY19yaW5nKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYnAtPnBkZXYsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgcnhfYmQpICogUlhfREVTQ19DTlQsCi0JCQkJICAgIGJwLT5yeF9kZXNjX3JpbmcsIGJwLT5yeF9kZXNjX21hcHBpbmcpOwotCQlicC0+cnhfZGVzY19yaW5nID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X21heF9yaW5nOyBpKyspIHsKKwkJaWYgKGJwLT5yeF9kZXNjX3JpbmdbaV0pCisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCByeF9iZCkgKiBSWF9ERVNDX0NOVCwKKwkJCQkJICAgIGJwLT5yeF9kZXNjX3JpbmdbaV0sCisJCQkJCSAgICBicC0+cnhfZGVzY19tYXBwaW5nW2ldKTsKKwkJYnAtPnJ4X2Rlc2NfcmluZ1tpXSA9IE5VTEw7CiAJfQotCWtmcmVlKGJwLT5yeF9idWZfcmluZyk7CisJdmZyZWUoYnAtPnJ4X2J1Zl9yaW5nKTsKIAlicC0+cnhfYnVmX3JpbmcgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50CiBibngyX2FsbG9jX21lbShzdHJ1Y3QgYm54MiAqYnApCiB7Ci0JYnAtPnR4X2J1Zl9yaW5nID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN3X2JkKSAqIFRYX0RFU0NfQ05ULAotCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaW50IGksIHN0YXR1c19ibGtfc2l6ZTsKKworCWJwLT50eF9idWZfcmluZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzd19iZCkgKiBUWF9ERVNDX0NOVCwKKwkJCQkgIEdGUF9LRVJORUwpOwogCWlmIChicC0+dHhfYnVmX3JpbmcgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoYnAtPnR4X2J1Zl9yaW5nLCAwLCBzaXplb2Yoc3RydWN0IHN3X2JkKSAqIFRYX0RFU0NfQ05UKTsKIAlicC0+dHhfZGVzY19yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnBkZXYsCiAJCQkJCSAgICAgICAgc2l6ZW9mKHN0cnVjdCB0eF9iZCkgKgogCQkJCQkJVFhfREVTQ19DTlQsCkBAIC00MDQsMzQgKzQ0Myw0MCBAQAogCWlmIChicC0+dHhfZGVzY19yaW5nID09IE5VTEwpCiAJCWdvdG8gYWxsb2NfbWVtX2VycjsKIAotCWJwLT5yeF9idWZfcmluZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzd19iZCkgKiBSWF9ERVNDX0NOVCwKLQkJCQkgICAgIEdGUF9LRVJORUwpOworCWJwLT5yeF9idWZfcmluZyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzd19iZCkgKiBSWF9ERVNDX0NOVCAqCisJCQkJICBicC0+cnhfbWF4X3JpbmcpOwogCWlmIChicC0+cnhfYnVmX3JpbmcgPT0gTlVMTCkKIAkJZ290byBhbGxvY19tZW1fZXJyOwogCi0JbWVtc2V0KGJwLT5yeF9idWZfcmluZywgMCwgc2l6ZW9mKHN0cnVjdCBzd19iZCkgKiBSWF9ERVNDX0NOVCk7Ci0JYnAtPnJ4X2Rlc2NfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGJwLT5wZGV2LAotCQkJCQkgICAgICAgIHNpemVvZihzdHJ1Y3QgcnhfYmQpICoKLQkJCQkJCVJYX0RFU0NfQ05ULAotCQkJCQkJJmJwLT5yeF9kZXNjX21hcHBpbmcpOwotCWlmIChicC0+cnhfZGVzY19yaW5nID09IE5VTEwpCi0JCWdvdG8gYWxsb2NfbWVtX2VycjsKKwltZW1zZXQoYnAtPnJ4X2J1Zl9yaW5nLCAwLCBzaXplb2Yoc3RydWN0IHN3X2JkKSAqIFJYX0RFU0NfQ05UICoKKwkJCQkgICBicC0+cnhfbWF4X3JpbmcpOwogCi0JYnAtPnN0YXR1c19ibGsgPSBwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwKLQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzdGF0dXNfYmxvY2spLAorCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfbWF4X3Jpbmc7IGkrKykgeworCQlicC0+cnhfZGVzY19yaW5nW2ldID0KKwkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGJwLT5wZGV2LAorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgcnhfYmQpICogUlhfREVTQ19DTlQsCisJCQkJCSAgICAgJmJwLT5yeF9kZXNjX21hcHBpbmdbaV0pOworCQlpZiAoYnAtPnJ4X2Rlc2NfcmluZ1tpXSA9PSBOVUxMKQorCQkJZ290byBhbGxvY19tZW1fZXJyOworCisJfQorCisJLyogQ29tYmluZSBzdGF0dXMgYW5kIHN0YXRpc3RpY3MgYmxvY2tzIGludG8gb25lIGFsbG9jYXRpb24uICovCisJc3RhdHVzX2Jsa19zaXplID0gTDFfQ0FDSEVfQUxJR04oc2l6ZW9mKHN0cnVjdCBzdGF0dXNfYmxvY2spKTsKKwlicC0+c3RhdHVzX3N0YXRzX3NpemUgPSBzdGF0dXNfYmxrX3NpemUgKworCQkJCXNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jayk7CisKKwlicC0+c3RhdHVzX2JsayA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGJwLT5wZGV2LCBicC0+c3RhdHVzX3N0YXRzX3NpemUsCiAJCQkJCSAgICAgICZicC0+c3RhdHVzX2Jsa19tYXBwaW5nKTsKIAlpZiAoYnAtPnN0YXR1c19ibGsgPT0gTlVMTCkKIAkJZ290byBhbGxvY19tZW1fZXJyOwogCi0JbWVtc2V0KGJwLT5zdGF0dXNfYmxrLCAwLCBzaXplb2Yoc3RydWN0IHN0YXR1c19ibG9jaykpOworCW1lbXNldChicC0+c3RhdHVzX2JsaywgMCwgYnAtPnN0YXR1c19zdGF0c19zaXplKTsKIAotCWJwLT5zdGF0c19ibGsgPSBwY2lfYWxsb2NfY29uc2lzdGVudChicC0+cGRldiwKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfYmxvY2spLAotCQkJCQkgICAgICZicC0+c3RhdHNfYmxrX21hcHBpbmcpOwotCWlmIChicC0+c3RhdHNfYmxrID09IE5VTEwpCi0JCWdvdG8gYWxsb2NfbWVtX2VycjsKKwlicC0+c3RhdHNfYmxrID0gKHZvaWQgKikgKCh1bnNpZ25lZCBsb25nKSBicC0+c3RhdHVzX2JsayArCisJCQkJICBzdGF0dXNfYmxrX3NpemUpOwogCi0JbWVtc2V0KGJwLT5zdGF0c19ibGssIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jaykpOworCWJwLT5zdGF0c19ibGtfbWFwcGluZyA9IGJwLT5zdGF0dXNfYmxrX21hcHBpbmcgKyBzdGF0dXNfYmxrX3NpemU7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTUyMCw3ICsxNTY1LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBzd19iZCAqcnhfYnVmID0gJmJwLT5yeF9idWZfcmluZ1tpbmRleF07CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwotCXN0cnVjdCByeF9iZCAqcnhiZCA9ICZicC0+cnhfZGVzY19yaW5nW2luZGV4XTsKKwlzdHJ1Y3QgcnhfYmQgKnJ4YmQgPSAmYnAtPnJ4X2Rlc2NfcmluZ1tSWF9SSU5HKGluZGV4KV1bUlhfSURYKGluZGV4KV07CiAJdW5zaWduZWQgbG9uZyBhbGlnbjsKIAogCXNrYiA9IGRldl9hbGxvY19za2IoYnAtPnJ4X2J1Zl9zaXplKTsKQEAgLTE2NTYsMjMgKzE3MDEsMzAgQEAKIGJueDJfcmV1c2Vfcnhfc2tiKHN0cnVjdCBibngyICpicCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl1MTYgY29ucywgdTE2IHByb2QpCiB7Ci0Jc3RydWN0IHN3X2JkICpjb25zX3J4X2J1ZiA9ICZicC0+cnhfYnVmX3JpbmdbY29uc107Ci0Jc3RydWN0IHN3X2JkICpwcm9kX3J4X2J1ZiA9ICZicC0+cnhfYnVmX3JpbmdbcHJvZF07Ci0Jc3RydWN0IHJ4X2JkICpjb25zX2JkID0gJmJwLT5yeF9kZXNjX3JpbmdbY29uc107Ci0Jc3RydWN0IHJ4X2JkICpwcm9kX2JkID0gJmJwLT5yeF9kZXNjX3JpbmdbcHJvZF07CisJc3RydWN0IHN3X2JkICpjb25zX3J4X2J1ZiwgKnByb2RfcnhfYnVmOworCXN0cnVjdCByeF9iZCAqY29uc19iZCwgKnByb2RfYmQ7CisKKwljb25zX3J4X2J1ZiA9ICZicC0+cnhfYnVmX3JpbmdbY29uc107CisJcHJvZF9yeF9idWYgPSAmYnAtPnJ4X2J1Zl9yaW5nW3Byb2RdOwogCiAJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGJwLT5wZGV2LAogCQlwY2lfdW5tYXBfYWRkcihjb25zX3J4X2J1ZiwgbWFwcGluZyksCiAJCWJwLT5yeF9vZmZzZXQgKyBSWF9DT1BZX1RIUkVTSCwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCXByb2RfcnhfYnVmLT5za2IgPSBjb25zX3J4X2J1Zi0+c2tiOworCWJwLT5yeF9wcm9kX2JzZXEgKz0gYnAtPnJ4X2J1Zl91c2Vfc2l6ZTsKKworCXByb2RfcnhfYnVmLT5za2IgPSBza2I7CisKKwlpZiAoY29ucyA9PSBwcm9kKQorCQlyZXR1cm47CisKIAlwY2lfdW5tYXBfYWRkcl9zZXQocHJvZF9yeF9idWYsIG1hcHBpbmcsCiAJCQlwY2lfdW5tYXBfYWRkcihjb25zX3J4X2J1ZiwgbWFwcGluZykpOwogCi0JbWVtY3B5KHByb2RfYmQsIGNvbnNfYmQsIDgpOwotCi0JYnAtPnJ4X3Byb2RfYnNlcSArPSBicC0+cnhfYnVmX3VzZV9zaXplOwotCisJY29uc19iZCA9ICZicC0+cnhfZGVzY19yaW5nW1JYX1JJTkcoY29ucyldW1JYX0lEWChjb25zKV07CisJcHJvZF9iZCA9ICZicC0+cnhfZGVzY19yaW5nW1JYX1JJTkcocHJvZCldW1JYX0lEWChwcm9kKV07CisJcHJvZF9iZC0+cnhfYmRfaGFkZHJfaGkgPSBjb25zX2JkLT5yeF9iZF9oYWRkcl9oaTsKKwlwcm9kX2JkLT5yeF9iZF9oYWRkcl9sbyA9IGNvbnNfYmQtPnJ4X2JkX2hhZGRyX2xvOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNjk5LDE0ICsxNzUxLDE5IEBACiAJCXUzMiBzdGF0dXM7CiAJCXN0cnVjdCBzd19iZCAqcnhfYnVmOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlkbWFfYWRkcl90IGRtYV9hZGRyOwogCiAJCXN3X3JpbmdfY29ucyA9IFJYX1JJTkdfSURYKHN3X2NvbnMpOwogCQlzd19yaW5nX3Byb2QgPSBSWF9SSU5HX0lEWChzd19wcm9kKTsKIAogCQlyeF9idWYgPSAmYnAtPnJ4X2J1Zl9yaW5nW3N3X3JpbmdfY29uc107CiAJCXNrYiA9IHJ4X2J1Zi0+c2tiOwotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYnAtPnBkZXYsCi0JCQlwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCisJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKKworCQlkbWFfYWRkciA9IHBjaV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyk7CisKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGJwLT5wZGV2LCBkbWFfYWRkciwKIAkJCWJwLT5yeF9vZmZzZXQgKyBSWF9DT1BZX1RIUkVTSCwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQlyeF9oZHIgPSAoc3RydWN0IGwyX2ZoZHIgKikgc2tiLT5kYXRhOwpAQCAtMTc0Nyw4ICsxODA0LDcgQEAKIAkJCXNrYiA9IG5ld19za2I7CiAJCX0KIAkJZWxzZSBpZiAoYm54Ml9hbGxvY19yeF9za2IoYnAsIHN3X3JpbmdfcHJvZCkgPT0gMCkgewotCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwKLQkJCQlwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgZG1hX2FkZHIsCiAJCQkJYnAtPnJ4X2J1Zl91c2Vfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQkJc2tiX3Jlc2VydmUoc2tiLCBicC0+cnhfb2Zmc2V0KTsKQEAgLTE3OTQsOCArMTg1MCw2IEBACiAJCXJ4X3BrdCsrOwogCiBuZXh0X3J4OgotCQlyeF9idWYtPnNrYiA9IE5VTEw7Ci0KIAkJc3dfY29ucyA9IE5FWFRfUlhfQkQoc3dfY29ucyk7CiAJCXN3X3Byb2QgPSBORVhUX1JYX0JEKHN3X3Byb2QpOwogCkBAIC0xOTA2LDYgKzE5NjAsMTMgQEAKIAkJc3Bpbl9sb2NrKCZicC0+cGh5X2xvY2spOwogCQlibngyX3BoeV9pbnQoYnApOwogCQlzcGluX3VubG9jaygmYnAtPnBoeV9sb2NrKTsKKworCQkvKiBUaGlzIGlzIG5lZWRlZCB0byB0YWtlIGNhcmUgb2YgdHJhbnNpZW50IHN0YXR1cworCQkgKiBkdXJpbmcgbGluayBjaGFuZ2VzLgorCQkgKi8KKwkJUkVHX1dSKGJwLCBCTlgyX0hDX0NPTU1BTkQsCisJCSAgICAgICBicC0+aGNfY21kIHwgQk5YMl9IQ19DT01NQU5EX0NPQUxfTk9XX1dPX0lOVCk7CisJCVJFR19SRChicCwgQk5YMl9IQ19DT01NQU5EKTsKIAl9CiAKIAlpZiAoYnAtPnN0YXR1c19ibGstPnN0YXR1c190eF9xdWlja19jb25zdW1lcl9pbmRleDAgIT0gYnAtPmh3X3R4X2NvbnMpCkBAIC0zMjg3LDYgKzMzNDgsOCBAQAogCiAJdWRlbGF5KDIwKTsKIAorCWJwLT5oY19jbWQgPSBSRUdfUkQoYnAsIEJOWDJfSENfQ09NTUFORCk7CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTMzNDAsMjcgKzM0MDMsMzUgQEAKIAlicC0+aHdfcnhfY29ucyA9IDA7CiAJYnAtPnJ4X3Byb2RfYnNlcSA9IDA7CiAJCQotCXJ4YmQgPSAmYnAtPnJ4X2Rlc2NfcmluZ1swXTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JYX0RFU0NfQ05UOyBpKyssIHJ4YmQrKykgewotCQlyeGJkLT5yeF9iZF9sZW4gPSBicC0+cnhfYnVmX3VzZV9zaXplOwotCQlyeGJkLT5yeF9iZF9mbGFncyA9IFJYX0JEX0ZMQUdTX1NUQVJUIHwgUlhfQkRfRkxBR1NfRU5EOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X21heF9yaW5nOyBpKyspIHsKKwkJaW50IGo7CiAKLQlyeGJkLT5yeF9iZF9oYWRkcl9oaSA9ICh1NjQpIGJwLT5yeF9kZXNjX21hcHBpbmcgPj4gMzI7Ci0JcnhiZC0+cnhfYmRfaGFkZHJfbG8gPSAodTY0KSBicC0+cnhfZGVzY19tYXBwaW5nICYgMHhmZmZmZmZmZjsKKwkJcnhiZCA9ICZicC0+cnhfZGVzY19yaW5nW2ldWzBdOworCQlmb3IgKGogPSAwOyBqIDwgTUFYX1JYX0RFU0NfQ05UOyBqKyssIHJ4YmQrKykgeworCQkJcnhiZC0+cnhfYmRfbGVuID0gYnAtPnJ4X2J1Zl91c2Vfc2l6ZTsKKwkJCXJ4YmQtPnJ4X2JkX2ZsYWdzID0gUlhfQkRfRkxBR1NfU1RBUlQgfCBSWF9CRF9GTEFHU19FTkQ7CisJCX0KKwkJaWYgKGkgPT0gKGJwLT5yeF9tYXhfcmluZyAtIDEpKQorCQkJaiA9IDA7CisJCWVsc2UKKwkJCWogPSBpICsgMTsKKwkJcnhiZC0+cnhfYmRfaGFkZHJfaGkgPSAodTY0KSBicC0+cnhfZGVzY19tYXBwaW5nW2pdID4+IDMyOworCQlyeGJkLT5yeF9iZF9oYWRkcl9sbyA9ICh1NjQpIGJwLT5yeF9kZXNjX21hcHBpbmdbal0gJgorCQkJCSAgICAgICAweGZmZmZmZmZmOworCX0KIAogCXZhbCA9IEJOWDJfTDJDVFhfQ1RYX1RZUEVfQ1RYX0JEX0NITl9UWVBFX1ZBTFVFOwogCXZhbCB8PSBCTlgyX0wyQ1RYX0NUWF9UWVBFX1NJWkVfTDI7CiAJdmFsIHw9IDB4MDIgPDwgODsKIAlDVFhfV1IoYnAsIEdFVF9DSURfQUREUihSWF9DSUQpLCBCTlgyX0wyQ1RYX0NUWF9UWVBFLCB2YWwpOwogCi0JdmFsID0gKHU2NCkgYnAtPnJ4X2Rlc2NfbWFwcGluZyA+PiAzMjsKKwl2YWwgPSAodTY0KSBicC0+cnhfZGVzY19tYXBwaW5nWzBdID4+IDMyOwogCUNUWF9XUihicCwgR0VUX0NJRF9BRERSKFJYX0NJRCksIEJOWDJfTDJDVFhfTlhfQkRIQUREUl9ISSwgdmFsKTsKIAotCXZhbCA9ICh1NjQpIGJwLT5yeF9kZXNjX21hcHBpbmcgJiAweGZmZmZmZmZmOworCXZhbCA9ICh1NjQpIGJwLT5yeF9kZXNjX21hcHBpbmdbMF0gJiAweGZmZmZmZmZmOwogCUNUWF9XUihicCwgR0VUX0NJRF9BRERSKFJYX0NJRCksIEJOWDJfTDJDVFhfTlhfQkRIQUREUl9MTywgdmFsKTsKIAotCWZvciAoIDtyaW5nX3Byb2QgPCBicC0+cnhfcmluZ19zaXplOyApIHsKKwlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCWlmIChibngyX2FsbG9jX3J4X3NrYihicCwgcmluZ19wcm9kKSA8IDApIHsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMzc1LDYgKzM0NDYsMjkgQEAKIH0KIAogc3RhdGljIHZvaWQKK2JueDJfc2V0X3J4X3Jpbmdfc2l6ZShzdHJ1Y3QgYm54MiAqYnAsIHUzMiBzaXplKQoreworCXUzMiBudW1fcmluZ3MsIG1heDsKKworCWJwLT5yeF9yaW5nX3NpemUgPSBzaXplOworCW51bV9yaW5ncyA9IDE7CisJd2hpbGUgKHNpemUgPiBNQVhfUlhfREVTQ19DTlQpIHsKKwkJc2l6ZSAtPSBNQVhfUlhfREVTQ19DTlQ7CisJCW51bV9yaW5ncysrOworCX0KKwkvKiByb3VuZCB0byBuZXh0IHBvd2VyIG9mIDIgKi8KKwltYXggPSBNQVhfUlhfUklOR1M7CisJd2hpbGUgKChtYXggJiBudW1fcmluZ3MpID09IDApCisJCW1heCA+Pj0gMTsKKworCWlmIChudW1fcmluZ3MgIT0gbWF4KQorCQltYXggPDw9IDE7CisKKwlicC0+cnhfbWF4X3JpbmcgPSBtYXg7CisJYnAtPnJ4X21heF9yaW5nX2lkeCA9IChicC0+cnhfbWF4X3JpbmcgKiBSWF9ERVNDX0NOVCkgLSAxOworfQorCitzdGF0aWMgdm9pZAogYm54Ml9mcmVlX3R4X3NrYnMoc3RydWN0IGJueDIgKmJwKQogewogCWludCBpOwpAQCAtMzQxOSw3ICszNTEzLDcgQEAKIAlpZiAoYnAtPnJ4X2J1Zl9yaW5nID09IE5VTEwpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDA7IGkgPCBSWF9ERVNDX0NOVDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGJwLT5yeF9tYXhfcmluZ19pZHg7IGkrKykgewogCQlzdHJ1Y3Qgc3dfYmQgKnJ4X2J1ZiA9ICZicC0+cnhfYnVmX3JpbmdbaV07CiAJCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKIApAQCAtMzQ3Niw3ICszNTcwLDcgQEAKIHsKIAlpbnQgcmV0OwogCWludCBpOwotCXN0YXRpYyBzdHJ1Y3QgeworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCQl1MTYgICBvZmZzZXQ7CiAJCXUxNiAgIGZsYWdzOwogCQl1MzIgICByd19tYXNrOwpAQCAtMzUwNiw3NCArMzYwMCw5IEBACiAJCXsgMHgwYzAwLCAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0sCiAJCXsgMHgwYzA0LCAwLCAweDAwMDAwMDAwLCAweDAzZmYwMDAxIH0sCiAJCXsgMHgwYzA4LCAwLCAweDBmMGZmMDczLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgwYzBjLCAwLCAweDAwZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgwYzMwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzM0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzM4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzNjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzQwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzQ0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzQ4LCAwLCAweDAwMDAwMDAwLCAweDAwMDdmZmZmIH0sCi0JCXsgMHgwYzRjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzUwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzU0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzU4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzVjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzYwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzY0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzY4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzZjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzcwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzc0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzc4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzdjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzgwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzg0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzg4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzhjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzkwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzk0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzk4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwYzljLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2EwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2E0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2E4LCAwLCAweDAwMDAwMDAwLCAweDAwMDdmZmZmIH0sCi0JCXsgMHgwY2FjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2IwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2I0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2I4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2JjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2MwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2M0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2M4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2NjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2QwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2Q0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2Q4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2RjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2UwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2U0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2U4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2VjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2YwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2Y0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2Y4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwY2ZjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwZDAwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgwZDA0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCiAKIAkJeyAweDEwMDAsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSwKIAkJeyAweDEwMDQsIDAsIDB4MDAwMDAwMDAsIDB4MDAwZjAwMDEgfSwKLQkJeyAweDEwNDQsIDAsIDB4MDAwMDAwMDAsIDB4ZmZjMDAzZmYgfSwKLQkJeyAweDEwODAsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMWZmZmYgfSwKLQkJeyAweDEwODQsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDEwODgsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDEwOGMsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDEwOTAsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDEwOTQsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDEwOTgsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDEwOWMsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDEwYTAsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKIAogCQl7IDB4MTQwOCwgMCwgMHgwMWMwMDgwMCwgMHgwMDAwMDAwMCB9LAogCQl7IDB4MTQ5YywgMCwgMHg4MDAwZmZmZiwgMHgwMDAwMDAwMCB9LApAQCAtMzU4NSwxMTEgKzM2MTQsOSBAQAogCQl7IDB4MTRjNCwgMCwgMHgwMDAwM2ZmZiwgMHgwMDAwMDAwMCB9LAogCQl7IDB4MTRjYywgMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSB9LAogCQl7IDB4MTRkMCwgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MTUwMCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUwNCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUwOCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUwYywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUxMCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUxNCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUxOCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUxYywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUyMCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUyNCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUyOCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUyYywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUzMCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUzNCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUzOCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTUzYywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTU0MCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTU0NCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTU0OCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTU0YywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTU1MCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTU1NCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTU1OCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYwMCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYwNCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYwOCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYwYywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYxMCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYxNCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYxOCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYxYywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYyMCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYyNCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYyOCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYyYywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYzMCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYzNCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYzOCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTYzYywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTY0MCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTY0NCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTY0OCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTY0YywgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTY1MCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQl7IDB4MTY1NCwgMCwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAogCiAJCXsgMHgxODAwLCAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0sCiAJCXsgMHgxODA0LCAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAzIH0sCi0JCXsgMHgxODQwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgxODQ0LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgxODQ4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgxODRjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgxODUwLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgxOTAwLCAwLCAweDdmZmJmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTA0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTBjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTE0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTFjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTI0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTJjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTM0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTNjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTQ0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTRjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTU0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTVjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTY0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTZjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTc0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTdjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgxOTgwLCAwLCAweDA3MDBmZmZmLCAweDAwMDAwMDAwIH0sCi0KLQkJeyAweDFjMDAsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSwKLQkJeyAweDFjMDQsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMgfSwKLQkJeyAweDFjMDgsIDAsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFjNDAsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDFjNDQsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDFjNDgsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDFjNGMsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDFjNTAsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkJeyAweDFkMDAsIDAsIDB4N2ZmYmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkMDQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkMGMsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkMTQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkMWMsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkMjQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkMmMsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkMzQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkM2MsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkNDQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkNGMsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkNTQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkNWMsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkNjQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkNmMsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkNzQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkN2MsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDFkODAsIDAsIDB4MDcwMGZmZmYsIDB4MDAwMDAwMDAgfSwKLQotCQl7IDB4MjAwNCwgMCwgMHgwMDAwMDAwMCwgMHgwMzM3MDAwZiB9LAotCQl7IDB4MjAwOCwgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MjAwYywgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MjAxMCwgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MjAxNCwgMCwgMHg4MDFmZmY4MCwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MjAxOCwgMCwgMHgwMDAwMDNmZiwgMHgwMDAwMDAwMCB9LAogCiAJCXsgMHgyODAwLCAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0sCiAJCXsgMHgyODA0LCAwLCAweDAwMDAwMDAwLCAweDAwMDAzZjAxIH0sCkBAIC0zNzA3LDE2ICszNjM0LDYgQEAKIAkJeyAweDJjMDAsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTEgfSwKIAkJeyAweDJjMDQsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMzAwMDcgfSwKIAotCQl7IDB4MzAwMCwgMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSB9LAotCQl7IDB4MzAwNCwgMCwgMHgwMDAwMDAwMCwgMHgwMDcwMDdmZiB9LAotCQl7IDB4MzAwOCwgMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCB9LAotCQl7IDB4MzAwYywgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MzAxMCwgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MzAxNCwgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MzAzNCwgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MzAzOCwgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4MzA1MCwgMCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCB9LAotCiAJCXsgMHgzYzAwLCAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0sCiAJCXsgMHgzYzA0LCAwLCAweDAwMDAwMDAwLCAweDAwMDcwMDAwIH0sCiAJCXsgMHgzYzA4LCAwLCAweDAwMDA3ZjcxLCAweDA3ZjAwMDAwIH0sCkBAIC0zNzI2LDg4ICszNjQzLDExIEBACiAJCXsgMHgzYzE4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCiAJCXsgMHgzYzFjLCAwLCAweGZmZmZmMDAwLCAweDAwMDAwMDAwIH0sCiAJCXsgMHgzYzIwLCAwLCAweGZmZmZmZjAwLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzI0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzI4LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzJjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzMwLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzM0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzM4LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzNjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzQwLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzQ0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzQ4LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzRjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzUwLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzU0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzU4LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzVjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzYwLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzY0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzY4LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzZjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzcwLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzc0LCAwLCAweDAwMDAwMDNmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzc4LCAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzdjLCAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzgwLCAwLCAweDNmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzg0LCAwLCAweDAwMDAwMDNmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHgzYzg4LCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0JCXsgMHgzYzhjLCAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCi0KLQkJeyAweDQwMDAsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSwKLQkJeyAweDQwMDQsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMzAwMDAgfSwKLQkJeyAweDQwMDgsIDAsIDB4MDAwMDBmZjAsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDQwMGMsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDQwODgsIDAsIDB4MDAwMDAwMDAsIDB4MDAwNzAzMDMgfSwKLQotCQl7IDB4NDQwMCwgMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSB9LAotCQl7IDB4NDQwNCwgMCwgMHgwMDAwMDAwMCwgMHgwMDAwM2YwMSB9LAotCQl7IDB4NDQwOCwgMCwgMHg3ZmZmMDBmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4NDQwYywgMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQl7IDB4NDQxMCwgMCwgMHhmZmZmLCAgICAgMHgwMDAwIH0sCi0JCXsgMHg0NDE0LCAwLCAweGZmZmYsICAgICAweDAwMDAgfSwKLQkJeyAweDQ0MTgsIDAsIDB4ZmZmZiwgICAgIDB4MDAwMCB9LAotCQl7IDB4NDQxYywgMCwgMHhmZmZmLCAgICAgMHgwMDAwIH0sCi0JCXsgMHg0NDI4LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg0NDJjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg0NDMwLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg0NDM0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg0NDM4LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg0NDNjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg0NDQwLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg0NDQ0LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0KLQkJeyAweDRjMDAsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSwKLQkJeyAweDRjMDQsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwM2YgfSwKLQkJeyAweDRjMDgsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDRjMGMsIDAsIDB4MDAwN2ZjMDAsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDRjMTAsIDAsIDB4ODAwMDNmZTAsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDRjMTQsIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLQkJeyAweDRjNDQsIDAsIDB4MDAwMDAwMDAsIDB4OWZmZjlmZmYgfSwKLQkJeyAweDRjNDgsIDAsIDB4MDAwMDAwMDAsIDB4YjMwMDlmZmYgfSwKLQkJeyAweDRjNGMsIDAsIDB4MDAwMDAwMDAsIDB4NzdmMzNiMzAgfSwKLQkJeyAweDRjNTAsIDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKIAogCQl7IDB4NTAwNCwgMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDA3ZiB9LAogCQl7IDB4NTAwOCwgMCwgMHgwZjAwMDdmZiwgMHgwMDAwMDAwMCB9LAogCQl7IDB4NTAwYywgMCwgMHhmODAwZjgwMCwgMHgwN2ZmMDdmZiB9LAogCi0JCXsgMHg1NDAwLCAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDAxIH0sCi0JCXsgMHg1NDA0LCAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDNmIH0sCi0JCXsgMHg1NDA4LCAwLCAweDAwMDAwMDFmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDBjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDEwLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDE0LCAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDE4LCAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDFjLCAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDIwLCAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDI4LCAwLCAweDAwMDAwMGZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDJjLCAwLCAweGZmMDBmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDMwLCAwLCAweDAwMWZmZjgwLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDM4LCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDNjLCAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0JCXsgMHg1NDQwLCAwLCAweGY4MDBmODAwLCAweDA3ZmYwN2ZmIH0sCi0KIAkJeyAweDVjMDAsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEgfSwKIAkJeyAweDVjMDQsIDAsIDB4MDAwMDAwMDAsIDB4MDAwMzAwMGYgfSwKIAkJeyAweDVjMDgsIDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAgfSwKQEAgLTM4OTEsNyArMzczMSw3IEBACiBzdGF0aWMgaW50CiBibngyX2RvX21lbV90ZXN0KHN0cnVjdCBibngyICpicCwgdTMyIHN0YXJ0LCB1MzIgc2l6ZSkKIHsKLQlzdGF0aWMgdTMyIHRlc3RfcGF0dGVybltdID0geyAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDU1NTU1NTU1LAorCXN0YXRpYyBjb25zdCB1MzIgdGVzdF9wYXR0ZXJuW10gPSB7IDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4NTU1NTU1NTUsCiAJCTB4YWFhYWFhYWEgLCAweGFhNTVhYTU1LCAweDU1YWE1NWFhIH07CiAJaW50IGk7CiAKQEAgLTM5MTYsNyArMzc1Niw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7Ci0Jc3RhdGljIHN0cnVjdCB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJCXUzMiAgIG9mZnNldDsKIAkJdTMyICAgbGVuOwogCX0gbWVtX3RibFtdID0gewpAQCAtMzk0OSw3ICszNzg5LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcnhfc2tiOwogCXVuc2lnbmVkIGNoYXIgKnBhY2tldDsKIAl1MTYgcnhfc3RhcnRfaWR4LCByeF9pZHg7Ci0JdTMyIHZhbDsKIAlkbWFfYWRkcl90IG1hcDsKIAlzdHJ1Y3QgdHhfYmQgKnR4YmQ7CiAJc3RydWN0IHN3X2JkICpyeF9idWY7CkBAIC0zOTgwLDggKzM4MTksOSBAQAogCW1hcCA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsIHBrdF9zaXplLAogCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAotCXZhbCA9IFJFR19SRChicCwgQk5YMl9IQ19DT01NQU5EKTsKLQlSRUdfV1IoYnAsIEJOWDJfSENfQ09NTUFORCwgdmFsIHwgQk5YMl9IQ19DT01NQU5EX0NPQUxfTk9XX1dPX0lOVCk7CisJUkVHX1dSKGJwLCBCTlgyX0hDX0NPTU1BTkQsCisJICAgICAgIGJwLT5oY19jbWQgfCBCTlgyX0hDX0NPTU1BTkRfQ09BTF9OT1dfV09fSU5UKTsKKwogCVJFR19SRChicCwgQk5YMl9IQ19DT01NQU5EKTsKIAogCXVkZWxheSg1KTsKQEAgLTQwMDUsOCArMzg0NSw5IEBACiAKIAl1ZGVsYXkoMTAwKTsKIAotCXZhbCA9IFJFR19SRChicCwgQk5YMl9IQ19DT01NQU5EKTsKLQlSRUdfV1IoYnAsIEJOWDJfSENfQ09NTUFORCwgdmFsIHwgQk5YMl9IQ19DT01NQU5EX0NPQUxfTk9XX1dPX0lOVCk7CisJUkVHX1dSKGJwLCBCTlgyX0hDX0NPTU1BTkQsCisJICAgICAgIGJwLT5oY19jbWQgfCBCTlgyX0hDX0NPTU1BTkRfQ09BTF9OT1dfV09fSU5UKTsKKwogCVJFR19SRChicCwgQk5YMl9IQ19DT01NQU5EKTsKIAogCXVkZWxheSg1KTsKQEAgLTQxNDIsNyArMzk4Myw2IEBACiBibngyX3Rlc3RfaW50cihzdHJ1Y3QgYm54MiAqYnApCiB7CiAJaW50IGk7Ci0JdTMyIHZhbDsKIAl1MTYgc3RhdHVzX2lkeDsKIAogCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKQEAgLTQxNTEsOCArMzk5MSw3IEBACiAJc3RhdHVzX2lkeCA9IFJFR19SRChicCwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTUQpICYgMHhmZmZmOwogCiAJLyogVGhpcyByZWdpc3RlciBpcyBub3QgdG91Y2hlZCBkdXJpbmcgcnVuLXRpbWUuICovCi0JdmFsID0gUkVHX1JEKGJwLCBCTlgyX0hDX0NPTU1BTkQpOwotCVJFR19XUihicCwgQk5YMl9IQ19DT01NQU5ELCB2YWwgfCBCTlgyX0hDX0NPTU1BTkRfQ09BTF9OT1cpOworCVJFR19XUihicCwgQk5YMl9IQ19DT01NQU5ELCBicC0+aGNfY21kIHwgQk5YMl9IQ19DT01NQU5EX0NPQUxfTk9XKTsKIAlSRUdfUkQoYnAsIEJOWDJfSENfQ09NTUFORCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewpAQCAtNDc5NCw2ICs0NjMzLDY0IEBACiAJaW5mby0+ZndfdmVyc2lvbls1XSA9IDA7CiB9CiAKKyNkZWZpbmUgQk5YMl9SRUdEVU1QX0xFTgkJKDMyICogMTAyNCkKKworc3RhdGljIGludAorYm54Ml9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gQk5YMl9SRUdEVU1QX0xFTjsKK30KKworc3RhdGljIHZvaWQKK2JueDJfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqX3ApCit7CisJdTMyICpwID0gX3AsIGksIG9mZnNldDsKKwl1OCAqb3JpZ19wID0gX3A7CisJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgcmVnX2JvdW5kYXJpZXNbXSA9IHsgMHgwMDAwLCAweDAwOTgsIDB4MDQwMCwgMHgwNDVjLAorCQkJCSAweDA4MDAsIDB4MDg4MCwgMHgwYzAwLCAweDBjMTAsCisJCQkJIDB4MGMzMCwgMHgwZDA4LCAweDEwMDAsIDB4MTAxYywKKwkJCQkgMHgxMDQwLCAweDEwNDgsIDB4MTA4MCwgMHgxMGE0LAorCQkJCSAweDE0MDAsIDB4MTQ5MCwgMHgxNDk4LCAweDE0ZjAsCisJCQkJIDB4MTUwMCwgMHgxNTVjLCAweDE1ODAsIDB4MTVkYywKKwkJCQkgMHgxNjAwLCAweDE2NTgsIDB4MTY4MCwgMHgxNmQ4LAorCQkJCSAweDE4MDAsIDB4MTgyMCwgMHgxODQwLCAweDE4NTQsCisJCQkJIDB4MTg4MCwgMHgxODk0LCAweDE5MDAsIDB4MTk4NCwKKwkJCQkgMHgxYzAwLCAweDFjMGMsIDB4MWM0MCwgMHgxYzU0LAorCQkJCSAweDFjODAsIDB4MWM5NCwgMHgxZDAwLCAweDFkODQsCisJCQkJIDB4MjAwMCwgMHgyMDMwLCAweDIzYzAsIDB4MjQwMCwKKwkJCQkgMHgyODAwLCAweDI4MjAsIDB4MjgzMCwgMHgyODUwLAorCQkJCSAweDJiNDAsIDB4MmMxMCwgMHgyZmMwLCAweDMwNTgsCisJCQkJIDB4M2MwMCwgMHgzYzk0LCAweDQwMDAsIDB4NDAxMCwKKwkJCQkgMHg0MDgwLCAweDQwOTAsIDB4NDNjMCwgMHg0NDU4LAorCQkJCSAweDRjMDAsIDB4NGMxOCwgMHg0YzQwLCAweDRjNTQsCisJCQkJIDB4NGZjMCwgMHg1MDEwLCAweDUzYzAsIDB4NTQ0NCwKKwkJCQkgMHg1YzAwLCAweDVjMTgsIDB4NWM4MCwgMHg1YzkwLAorCQkJCSAweDVmYzAsIDB4NjAwMCwgMHg2NDAwLCAweDY0MjgsCisJCQkJIDB4NjgwMCwgMHg2ODQ4LCAweDY4NGMsIDB4Njg2MCwKKwkJCQkgMHg2ODg4LCAweDY5MTAsIDB4ODAwMCB9OworCisJcmVncy0+dmVyc2lvbiA9IDA7CisKKwltZW1zZXQocCwgMCwgQk5YMl9SRUdEVU1QX0xFTik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCisJCXJldHVybjsKKworCWkgPSAwOworCW9mZnNldCA9IHJlZ19ib3VuZGFyaWVzWzBdOworCXAgKz0gb2Zmc2V0OworCXdoaWxlIChvZmZzZXQgPCBCTlgyX1JFR0RVTVBfTEVOKSB7CisJCSpwKysgPSBSRUdfUkQoYnAsIG9mZnNldCk7CisJCW9mZnNldCArPSA0OworCQlpZiAob2Zmc2V0ID09IHJlZ19ib3VuZGFyaWVzW2kgKyAxXSkgeworCQkJb2Zmc2V0ID0gcmVnX2JvdW5kYXJpZXNbaSArIDJdOworCQkJcCA9ICh1MzIgKikgKG9yaWdfcCArIG9mZnNldCk7CisJCQlpICs9IDI7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkCiBibngyX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewpAQCAtNDk3OSw3ICs0ODc2LDcgQEAKIHsKIAlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JYX0RFU0NfQ05UOworCWVyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9UT1RBTF9SWF9ERVNDX0NOVDsKIAllcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CiAJZXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKIApAQCAtNDk5NiwxNyArNDg5MywyOCBAQAogewogCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoKGVyaW5nLT5yeF9wZW5kaW5nID4gTUFYX1JYX0RFU0NfQ05UKSB8fAorCWlmICgoZXJpbmctPnJ4X3BlbmRpbmcgPiBNQVhfVE9UQUxfUlhfREVTQ19DTlQpIHx8CiAJCShlcmluZy0+dHhfcGVuZGluZyA+IE1BWF9UWF9ERVNDX0NOVCkgfHwKIAkJKGVyaW5nLT50eF9wZW5kaW5nIDw9IE1BWF9TS0JfRlJBR1MpKSB7CiAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWJwLT5yeF9yaW5nX3NpemUgPSBlcmluZy0+cnhfcGVuZGluZzsKKwlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgeworCQlibngyX25ldGlmX3N0b3AoYnApOworCQlibngyX3Jlc2V0X2NoaXAoYnAsIEJOWDJfRFJWX01TR19DT0RFX1JFU0VUKTsKKwkJYm54Ml9mcmVlX3NrYnMoYnApOworCQlibngyX2ZyZWVfbWVtKGJwKTsKKwl9CisKKwlibngyX3NldF9yeF9yaW5nX3NpemUoYnAsIGVyaW5nLT5yeF9wZW5kaW5nKTsKIAlicC0+dHhfcmluZ19zaXplID0gZXJpbmctPnR4X3BlbmRpbmc7CiAKIAlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgewotCQlibngyX25ldGlmX3N0b3AoYnApOworCQlpbnQgcmM7CisKKwkJcmMgPSBibngyX2FsbG9jX21lbShicCk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKIAkJYm54Ml9pbml0X25pYyhicCk7CiAJCWJueDJfbmV0aWZfc3RhcnQoYnApOwogCX0KQEAgLTUxMjIsNyArNTAzMCw3IEBACiAKICNkZWZpbmUgU1RBVFNfT0ZGU0VUMzIob2Zmc2V0X25hbWUpIChvZmZzZXRvZihzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jaywgb2Zmc2V0X25hbWUpIC8gNCkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgYm54Ml9zdGF0c19vZmZzZXRfYXJyW0JOWDJfTlVNX1NUQVRTXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGJueDJfc3RhdHNfb2Zmc2V0X2FycltCTlgyX05VTV9TVEFUU10gPSB7CiAgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9JZkhDSW5PY3RldHNfaGkpLAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZIQ0luQmFkT2N0ZXRzX2hpKSwKICAgICBTVEFUU19PRkZTRVQzMihzdGF0X0lmSENPdXRPY3RldHNfaGkpLApAQCAtNTM2MCw2ICs1MjY4LDggQEAKIAkuZ2V0X3NldHRpbmdzCQk9IGJueDJfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gYm54Ml9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IGJueDJfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbgkJPSBibngyX2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MJCT0gYm54Ml9nZXRfcmVncywKIAkuZ2V0X3dvbAkJPSBibngyX2dldF93b2wsCiAJLnNldF93b2wJCT0gYm54Ml9zZXRfd29sLAogCS5ud2F5X3Jlc2V0CQk9IGJueDJfbndheV9yZXNldCwKQEAgLTU2NzgsNyArNTU4OCw3IEBACiAJYnAtPm1hY19hZGRyWzVdID0gKHU4KSByZWc7CiAKIAlicC0+dHhfcmluZ19zaXplID0gTUFYX1RYX0RFU0NfQ05UOwotCWJwLT5yeF9yaW5nX3NpemUgPSAxMDA7CisJYm54Ml9zZXRfcnhfcmluZ19zaXplKGJwLCAxMDApOwogCiAJYnAtPnJ4X2NzdW0gPSAxOwogCkBAIC01ODk3LDYgKzU4MDcsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKIAorCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJYm54Ml9uZXRpZl9zdG9wKGJwKTsKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggOWY2OTFjYi4uYjg3OTI1ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyLmgKQEAgLTEzLDQ1ICsxMyw2IEBACiAjaWZuZGVmIEJOWDJfSAogI2RlZmluZSBCTlgyX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaWZkZWYgTkVUSUZfRl9IV19WTEFOX1RYCi0jaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2RlZmluZSBCQ01fVkxBTiAxCi0jZW5kaWYKLSNpZmRlZiBORVRJRl9GX1RTTwotI2luY2x1ZGUgPG5ldC9pcC5oPgotI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KLSNkZWZpbmUgQkNNX1RTTyAxCi0jZW5kaWYKLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+Ci0KIC8qIEhhcmR3YXJlIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXV0b21hdGljYWxseQogICogZ2VuZXJhdGVkIGZyb20gUlRMIGNvZGUuIERvIG5vdCBtb2RpZnkuCiAgKi8KQEAgLTM3OTIsOCArMzc1MywxMCBAQAogI2RlZmluZSBUWF9ERVNDX0NOVCAgKEJDTV9QQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHR4X2JkKSkKICNkZWZpbmUgTUFYX1RYX0RFU0NfQ05UIChUWF9ERVNDX0NOVCAtIDEpCiAKKyNkZWZpbmUgTUFYX1JYX1JJTkdTCTQKICNkZWZpbmUgUlhfREVTQ19DTlQgIChCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCByeF9iZCkpCiAjZGVmaW5lIE1BWF9SWF9ERVNDX0NOVCAoUlhfREVTQ19DTlQgLSAxKQorI2RlZmluZSBNQVhfVE9UQUxfUlhfREVTQ19DTlQgKE1BWF9SWF9ERVNDX0NOVCAqIE1BWF9SWF9SSU5HUykKIAogI2RlZmluZSBORVhUX1RYX0JEKHgpICgoKHgpICYgKE1BWF9UWF9ERVNDX0NOVCAtIDEpKSA9PQkJCVwKIAkJKE1BWF9UWF9ERVNDX0NOVCAtIDEpKSA/CQkJCVwKQEAgLTM4MDUsOCArMzc2OCwxMCBAQAogCQkoTUFYX1JYX0RFU0NfQ05UIC0gMSkpID8JCQkJXAogCSh4KSArIDIgOiAoeCkgKyAxCiAKLSNkZWZpbmUgUlhfUklOR19JRFgoeCkgKCh4KSAmIE1BWF9SWF9ERVNDX0NOVCkKKyNkZWZpbmUgUlhfUklOR19JRFgoeCkgKCh4KSAmIGJwLT5yeF9tYXhfcmluZ19pZHgpCiAKKyNkZWZpbmUgUlhfUklORyh4KSAoKCh4KSAmIH5NQVhfUlhfREVTQ19DTlQpID4+IDgpCisjZGVmaW5lIFJYX0lEWCh4KSAoKHgpICYgTUFYX1JYX0RFU0NfQ05UKQogCiAvKiBDb250ZXh0IHNpemUuICovCiAjZGVmaW5lIENUWF9TSElGVCAgICAgICAgICAgICAgICAgICA3CkBAIC0zOTAzLDE1ICszODY4LDI2IEBACiAJc3RydWN0IHN0YXR1c19ibG9jawkqc3RhdHVzX2JsazsKIAl1MzIgCQkJbGFzdF9zdGF0dXNfaWR4OwogCi0Jc3RydWN0IHR4X2JkCQkqdHhfZGVzY19yaW5nOwotCXN0cnVjdCBzd19iZAkJKnR4X2J1Zl9yaW5nOwotCXUzMgkJCXR4X3Byb2RfYnNlcTsKLQl1MTYJCQl0eF9wcm9kOwotCXUxNgkJCXR4X2NvbnM7Ci0JaW50CQkJdHhfcmluZ19zaXplOworCXUzMgkJCWZsYWdzOworI2RlZmluZSBQQ0lYX0ZMQUcJCQkxCisjZGVmaW5lIFBDSV8zMkJJVF9GTEFHCQkJMgorI2RlZmluZSBPTkVfVERNQV9GTEFHCQkJNAkvKiBubyBsb25nZXIgdXNlZCAqLworI2RlZmluZSBOT19XT0xfRkxBRwkJCTgKKyNkZWZpbmUgVVNJTkdfREFDX0ZMQUcJCQkweDEwCisjZGVmaW5lIFVTSU5HX01TSV9GTEFHCQkJMHgyMAorI2RlZmluZSBBU0ZfRU5BQkxFX0ZMQUcJCQkweDQwCiAKLQl1MTYJCQlod190eF9jb25zOwotCXUxNgkJCWh3X3J4X2NvbnM7CisJLyogUHV0IHR4IHByb2R1Y2VyIGFuZCBjb25zdW1lciBmaWVsZHMgaW4gc2VwYXJhdGUgY2FjaGUgbGluZXMuICovCisKKwl1MzIJCXR4X3Byb2RfYnNlcSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKEwxX0NBQ0hFX0JZVEVTKSkpOworCXUxNgkJdHhfcHJvZDsKKworCXN0cnVjdCB0eF9iZAkqdHhfZGVzY19yaW5nOworCXN0cnVjdCBzd19iZAkqdHhfYnVmX3Jpbmc7CisJaW50CQl0eF9yaW5nX3NpemU7CisKKwl1MTYJCXR4X2NvbnMgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKTsKKwl1MTYJCWh3X3R4X2NvbnM7CiAKICNpZmRlZiBCQ01fVkxBTiAKIAlzdHJ1Y3QJCQl2bGFuX2dyb3VwICp2bGdycDsKQEAgLTM5MjAsMTkgKzM4OTYsMjMgQEAKIAl1MzIJCQlyeF9vZmZzZXQ7CiAJdTMyCQkJcnhfYnVmX3VzZV9zaXplOwkvKiB1c2VhYmxlIHNpemUgKi8KIAl1MzIJCQlyeF9idWZfc2l6ZTsJCS8qIHdpdGggYWxpZ25tZW50ICovCi0Jc3RydWN0IHJ4X2JkCQkqcnhfZGVzY19yaW5nOwotCXN0cnVjdCBzd19iZAkJKnJ4X2J1Zl9yaW5nOworCXUzMgkJCXJ4X21heF9yaW5nX2lkeDsKKwogCXUzMgkJCXJ4X3Byb2RfYnNlcTsKIAl1MTYJCQlyeF9wcm9kOwogCXUxNgkJCXJ4X2NvbnM7CisJdTE2CQkJaHdfcnhfY29uczsKIAogCXUzMgkJCXJ4X2NzdW07CiAKKwlzdHJ1Y3Qgc3dfYmQJCSpyeF9idWZfcmluZzsKKwlzdHJ1Y3QgcnhfYmQJCSpyeF9kZXNjX3JpbmdbTUFYX1JYX1JJTkdTXTsKKwogCS8qIE9ubHkgdXNlZCB0byBzeW5jaHJvbml6ZSBuZXRpZl9zdG9wX3F1ZXVlL3dha2VfcXVldWUgd2hlbiB0eCAqLwogCS8qIHJpbmcgaXMgZnVsbCAqLwogCXNwaW5sb2NrX3QJCXR4X2xvY2s7CiAKLQkvKiBFbmQgb2YgZmlsZWRzIHVzZWQgaW4gdGhlIHBlcmZvcm1hbmNlIGNvZGUgcGF0aHMuICovCisJLyogRW5kIG9mIGZpZWxkcyB1c2VkIGluIHRoZSBwZXJmb3JtYW5jZSBjb2RlIHBhdGhzLiAqLwogCiAJY2hhcgkJCSpuYW1lOwogCkBAIC0zOTQ1LDE1ICszOTI1LDYgQEAKIAkvKiBVc2VkIHRvIHN5bmNocm9uaXplIHBoeSBhY2Nlc3Nlcy4gKi8KIAlzcGlubG9ja190CQlwaHlfbG9jazsKIAotCXUzMgkJCWZsYWdzOwotI2RlZmluZSBQQ0lYX0ZMQUcJCQkxCi0jZGVmaW5lIFBDSV8zMkJJVF9GTEFHCQkJMgotI2RlZmluZSBPTkVfVERNQV9GTEFHCQkJNAkvKiBubyBsb25nZXIgdXNlZCAqLwotI2RlZmluZSBOT19XT0xfRkxBRwkJCTgKLSNkZWZpbmUgVVNJTkdfREFDX0ZMQUcJCQkweDEwCi0jZGVmaW5lIFVTSU5HX01TSV9GTEFHCQkJMHgyMAotI2RlZmluZSBBU0ZfRU5BQkxFX0ZMQUcJCQkweDQwCi0KIAl1MzIJCQlwaHlfZmxhZ3M7CiAjZGVmaW5lIFBIWV9TRVJERVNfRkxBRwkJCTEKICNkZWZpbmUgUEhZX0NSQ19GSVhfRkxBRwkJMgpAQCAtNDAwNCw4ICszOTc1LDkgQEAKIAlkbWFfYWRkcl90CQl0eF9kZXNjX21hcHBpbmc7CiAKIAorCWludAkJCXJ4X21heF9yaW5nOwogCWludAkJCXJ4X3Jpbmdfc2l6ZTsKLQlkbWFfYWRkcl90CQlyeF9kZXNjX21hcHBpbmc7CisJZG1hX2FkZHJfdAkJcnhfZGVzY19tYXBwaW5nW01BWF9SWF9SSU5HU107CiAKIAl1MTYJCQl0eF9xdWlja19jb25zX3RyaXA7CiAJdTE2CQkJdHhfcXVpY2tfY29uc190cmlwX2ludDsKQEAgLTQwMjksNiArNDAwMSw3IEBACiAJc3RydWN0IHN0YXRpc3RpY3NfYmxvY2sJKnN0YXRzX2JsazsKIAlkbWFfYWRkcl90CQlzdGF0c19ibGtfbWFwcGluZzsKIAorCXUzMgkJCWhjX2NtZDsKIAl1MzIJCQlyeF9tb2RlOwogCiAJdTE2CQkJcmVxX2xpbmVfc3BlZWQ7CkBAIC00MDczLDYgKzQwNDYsOCBAQAogCiAJc3RydWN0IGZsYXNoX3NwZWMJKmZsYXNoX2luZm87CiAJdTMyCQkJZmxhc2hfc2l6ZTsKKworCWludAkJCXN0YXR1c19zdGF0c19zaXplOwogfTsKIAogc3RhdGljIHUzMiBibngyX3JlZ19yZF9pbmQoc3RydWN0IGJueDIgKmJwLCB1MzIgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJfZncuaCBiL2RyaXZlcnMvbmV0L2JueDJfZncuaAppbmRleCAwYzIxYmQ4Li44MTU4OTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyX2Z3LmgKKysrIGIvZHJpdmVycy9uZXQvYm54Ml9mdy5oCkBAIC0xNCwyMCArMTQsMjAgQEAKICAqIGFjY29tcGFueWluZyBpdC4KICAqLwogCi1zdGF0aWMgaW50IGJueDJfQ09NX2IwNkZ3UmVsZWFzZU1ham9yID0gMHgxOwotc3RhdGljIGludCBibngyX0NPTV9iMDZGd1JlbGVhc2VNaW5vciA9IDB4MDsKLXN0YXRpYyBpbnQgYm54Ml9DT01fYjA2RndSZWxlYXNlRml4ID0gMHgwOwotc3RhdGljIHUzMiBibngyX0NPTV9iMDZGd1N0YXJ0QWRkciA9IDB4MDgwMDA4YjQ7Ci1zdGF0aWMgdTMyIGJueDJfQ09NX2IwNkZ3VGV4dEFkZHIgPSAweDA4MDAwMDAwOwotc3RhdGljIGludCBibngyX0NPTV9iMDZGd1RleHRMZW4gPSAweDU3YmM7Ci1zdGF0aWMgdTMyIGJueDJfQ09NX2IwNkZ3RGF0YUFkZHIgPSAweDA4MDA1ODQwOwotc3RhdGljIGludCBibngyX0NPTV9iMDZGd0RhdGFMZW4gPSAweDA7Ci1zdGF0aWMgdTMyIGJueDJfQ09NX2IwNkZ3Um9kYXRhQWRkciA9IDB4MDgwMDU3YzA7Ci1zdGF0aWMgaW50IGJueDJfQ09NX2IwNkZ3Um9kYXRhTGVuID0gMHg1ODsKLXN0YXRpYyB1MzIgYm54Ml9DT01fYjA2RndCc3NBZGRyID0gMHgwODAwNTg2MDsKLXN0YXRpYyBpbnQgYm54Ml9DT01fYjA2RndCc3NMZW4gPSAweDg4Owotc3RhdGljIHUzMiBibngyX0NPTV9iMDZGd1Nic3NBZGRyID0gMHgwODAwNTg0MDsKLXN0YXRpYyBpbnQgYm54Ml9DT01fYjA2RndTYnNzTGVuID0gMHgxYzsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9DT01fYjA2RndSZWxlYXNlTWFqb3IgPSAweDE7CitzdGF0aWMgY29uc3QgaW50IGJueDJfQ09NX2IwNkZ3UmVsZWFzZU1pbm9yID0gMHgwOworc3RhdGljIGNvbnN0IGludCBibngyX0NPTV9iMDZGd1JlbGVhc2VGaXggPSAweDA7CitzdGF0aWMgY29uc3QgdTMyIGJueDJfQ09NX2IwNkZ3U3RhcnRBZGRyID0gMHgwODAwMDhiNDsKK3N0YXRpYyBjb25zdCB1MzIgYm54Ml9DT01fYjA2RndUZXh0QWRkciA9IDB4MDgwMDAwMDA7CitzdGF0aWMgY29uc3QgaW50IGJueDJfQ09NX2IwNkZ3VGV4dExlbiA9IDB4NTdiYzsKK3N0YXRpYyBjb25zdCB1MzIgYm54Ml9DT01fYjA2RndEYXRhQWRkciA9IDB4MDgwMDU4NDA7CitzdGF0aWMgY29uc3QgaW50IGJueDJfQ09NX2IwNkZ3RGF0YUxlbiA9IDB4MDsKK3N0YXRpYyBjb25zdCB1MzIgYm54Ml9DT01fYjA2RndSb2RhdGFBZGRyID0gMHgwODAwNTdjMDsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9DT01fYjA2RndSb2RhdGFMZW4gPSAweDU4Oworc3RhdGljIGNvbnN0IHUzMiBibngyX0NPTV9iMDZGd0Jzc0FkZHIgPSAweDA4MDA1ODYwOworc3RhdGljIGNvbnN0IGludCBibngyX0NPTV9iMDZGd0Jzc0xlbiA9IDB4ODg7CitzdGF0aWMgY29uc3QgdTMyIGJueDJfQ09NX2IwNkZ3U2Jzc0FkZHIgPSAweDA4MDA1ODQwOworc3RhdGljIGNvbnN0IGludCBibngyX0NPTV9iMDZGd1Nic3NMZW4gPSAweDFjOwogc3RhdGljIHUzMiBibngyX0NPTV9iMDZGd1RleHRbKDB4NTdiYy80KSArIDFdID0gewogCTB4MGEwMDAyMmQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4NjM2ZjZkMjAsIDB4MzIyZTM1MmUsCiAJMHgzODAwMDAwMCwgMHgwMjA1MDgwMiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAxNCwgMHgwMDAwMDAzMiwKQEAgLTIzMjUsMjAgKzIzMjUsMjAgQEAKIAkweDAwMDAwMDBjLCAweDI5NTIwMDAwLCAweDAwMDAwMDE4LCAweDgwMDAwMDAyLCAweDAwMDAwMDBjLCAweDI5ODAwMDAwLAogCTB4MDAwMDAwMTgsIDB4MDA1NzAwMDAgfTsKIAotc3RhdGljIGludCBibngyX1RQQVRfYjA2RndSZWxlYXNlTWFqb3IgPSAweDE7Ci1zdGF0aWMgaW50IGJueDJfVFBBVF9iMDZGd1JlbGVhc2VNaW5vciA9IDB4MDsKLXN0YXRpYyBpbnQgYm54Ml9UUEFUX2IwNkZ3UmVsZWFzZUZpeCA9IDB4MDsKLXN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3U3RhcnRBZGRyID0gMHgwODAwMDg2MDsKLXN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3VGV4dEFkZHIgPSAweDA4MDAwODAwOwotc3RhdGljIGludCBibngyX1RQQVRfYjA2RndUZXh0TGVuID0gMHgxMjJjOwotc3RhdGljIHUzMiBibngyX1RQQVRfYjA2RndEYXRhQWRkciA9IDB4MDgwMDFhNjA7Ci1zdGF0aWMgaW50IGJueDJfVFBBVF9iMDZGd0RhdGFMZW4gPSAweDA7Ci1zdGF0aWMgdTMyIGJueDJfVFBBVF9iMDZGd1JvZGF0YUFkZHIgPSAweDAwMDAwMDAwOwotc3RhdGljIGludCBibngyX1RQQVRfYjA2RndSb2RhdGFMZW4gPSAweDA7Ci1zdGF0aWMgdTMyIGJueDJfVFBBVF9iMDZGd0Jzc0FkZHIgPSAweDA4MDAxYWEwOwotc3RhdGljIGludCBibngyX1RQQVRfYjA2RndCc3NMZW4gPSAweDI1MDsKLXN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3U2Jzc0FkZHIgPSAweDA4MDAxYTYwOwotc3RhdGljIGludCBibngyX1RQQVRfYjA2RndTYnNzTGVuID0gMHgzNDsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3UmVsZWFzZU1ham9yID0gMHgxOworc3RhdGljIGNvbnN0IGludCBibngyX1RQQVRfYjA2RndSZWxlYXNlTWlub3IgPSAweDA7CitzdGF0aWMgY29uc3QgaW50IGJueDJfVFBBVF9iMDZGd1JlbGVhc2VGaXggPSAweDA7CitzdGF0aWMgY29uc3QgdTMyIGJueDJfVFBBVF9iMDZGd1N0YXJ0QWRkciA9IDB4MDgwMDA4NjA7CitzdGF0aWMgY29uc3QgdTMyIGJueDJfVFBBVF9iMDZGd1RleHRBZGRyID0gMHgwODAwMDgwMDsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3VGV4dExlbiA9IDB4MTIyYzsKK3N0YXRpYyBjb25zdCB1MzIgYm54Ml9UUEFUX2IwNkZ3RGF0YUFkZHIgPSAweDA4MDAxYTYwOworc3RhdGljIGNvbnN0IGludCBibngyX1RQQVRfYjA2RndEYXRhTGVuID0gMHgwOworc3RhdGljIGNvbnN0IHUzMiBibngyX1RQQVRfYjA2RndSb2RhdGFBZGRyID0gMHgwMDAwMDAwMDsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3Um9kYXRhTGVuID0gMHgwOworc3RhdGljIGNvbnN0IHUzMiBibngyX1RQQVRfYjA2RndCc3NBZGRyID0gMHgwODAwMWFhMDsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3QnNzTGVuID0gMHgyNTA7CitzdGF0aWMgY29uc3QgdTMyIGJueDJfVFBBVF9iMDZGd1Nic3NBZGRyID0gMHgwODAwMWE2MDsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3U2Jzc0xlbiA9IDB4MzQ7CiBzdGF0aWMgdTMyIGJueDJfVFBBVF9iMDZGd1RleHRbKDB4MTIyYy80KSArIDFdID0gewogCTB4MGEwMDAyMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMGQsIDB4NzQ3MDYxNzQsIDB4MjAzMjJlMzUsCiAJMHgyZTMxMzEwMCwgMHgwMjA1MGIwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKQEAgLTI1NDAsMjAgKzI1NDAsMjAgQEAKIHN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3QnNzWygweDI1MC80KSArIDFdID0geyAweDAgfTsKIHN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3U2Jzc1soMHgzNC80KSArIDFdID0geyAweDAgfTsKIAotc3RhdGljIGludCBibngyX1RYUF9iMDZGd1JlbGVhc2VNYWpvciA9IDB4MTsKLXN0YXRpYyBpbnQgYm54Ml9UWFBfYjA2RndSZWxlYXNlTWlub3IgPSAweDA7Ci1zdGF0aWMgaW50IGJueDJfVFhQX2IwNkZ3UmVsZWFzZUZpeCA9IDB4MDsKLXN0YXRpYyB1MzIgYm54Ml9UWFBfYjA2RndTdGFydEFkZHIgPSAweDA4MDAzNGIwOwotc3RhdGljIHUzMiBibngyX1RYUF9iMDZGd1RleHRBZGRyID0gMHgwODAwMDAwMDsKLXN0YXRpYyBpbnQgYm54Ml9UWFBfYjA2RndUZXh0TGVuID0gMHg1NzQ4Owotc3RhdGljIHUzMiBibngyX1RYUF9iMDZGd0RhdGFBZGRyID0gMHgwODAwNTc2MDsKLXN0YXRpYyBpbnQgYm54Ml9UWFBfYjA2RndEYXRhTGVuID0gMHgwOwotc3RhdGljIHUzMiBibngyX1RYUF9iMDZGd1JvZGF0YUFkZHIgPSAweDAwMDAwMDAwOwotc3RhdGljIGludCBibngyX1RYUF9iMDZGd1JvZGF0YUxlbiA9IDB4MDsKLXN0YXRpYyB1MzIgYm54Ml9UWFBfYjA2RndCc3NBZGRyID0gMHgwODAwNTdhMDsKLXN0YXRpYyBpbnQgYm54Ml9UWFBfYjA2RndCc3NMZW4gPSAweDFjNDsKLXN0YXRpYyB1MzIgYm54Ml9UWFBfYjA2RndTYnNzQWRkciA9IDB4MDgwMDU3NjA7Ci1zdGF0aWMgaW50IGJueDJfVFhQX2IwNkZ3U2Jzc0xlbiA9IDB4Mzg7CitzdGF0aWMgY29uc3QgaW50IGJueDJfVFhQX2IwNkZ3UmVsZWFzZU1ham9yID0gMHgxOworc3RhdGljIGNvbnN0IGludCBibngyX1RYUF9iMDZGd1JlbGVhc2VNaW5vciA9IDB4MDsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9UWFBfYjA2RndSZWxlYXNlRml4ID0gMHgwOworc3RhdGljIGNvbnN0IHUzMiBibngyX1RYUF9iMDZGd1N0YXJ0QWRkciA9IDB4MDgwMDM0YjA7CitzdGF0aWMgY29uc3QgdTMyIGJueDJfVFhQX2IwNkZ3VGV4dEFkZHIgPSAweDA4MDAwMDAwOworc3RhdGljIGNvbnN0IGludCBibngyX1RYUF9iMDZGd1RleHRMZW4gPSAweDU3NDg7CitzdGF0aWMgY29uc3QgdTMyIGJueDJfVFhQX2IwNkZ3RGF0YUFkZHIgPSAweDA4MDA1NzYwOworc3RhdGljIGNvbnN0IGludCBibngyX1RYUF9iMDZGd0RhdGFMZW4gPSAweDA7CitzdGF0aWMgY29uc3QgdTMyIGJueDJfVFhQX2IwNkZ3Um9kYXRhQWRkciA9IDB4MDAwMDAwMDA7CitzdGF0aWMgY29uc3QgaW50IGJueDJfVFhQX2IwNkZ3Um9kYXRhTGVuID0gMHgwOworc3RhdGljIGNvbnN0IHUzMiBibngyX1RYUF9iMDZGd0Jzc0FkZHIgPSAweDA4MDA1N2EwOworc3RhdGljIGNvbnN0IGludCBibngyX1RYUF9iMDZGd0Jzc0xlbiA9IDB4MWM0Oworc3RhdGljIGNvbnN0IHUzMiBibngyX1RYUF9iMDZGd1Nic3NBZGRyID0gMHgwODAwNTc2MDsKK3N0YXRpYyBjb25zdCBpbnQgYm54Ml9UWFBfYjA2RndTYnNzTGVuID0gMHgzODsKIHN0YXRpYyB1MzIgYm54Ml9UWFBfYjA2RndUZXh0WygweDU3NDgvNCkgKyAxXSA9IHsKIAkweDBhMDAwZDJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDBkLCAweDc0Nzg3MDIwLCAweDMyMmUzNTJlLAogCTB4MzgwMDAwMDAsIDB4MDIwNTA4MDAsIDB4MDAwMDAwMGEsIDB4MDAwMDAzZTgsIDB4MDAwMGVhNjAsIDB4MDAwMDAwMDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggZjJhNjMxOC4uZTgzYmM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtMTI2MSw3ICsxMjYxLDcgQEAKIAlzdHJ1Y3QgZXRoaGRyICpldGhfZGF0YTsKIAlzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gJihCT05EX0FMQl9JTkZPKGJvbmQpKTsKIAlzdHJ1Y3Qgc2xhdmUgKnR4X3NsYXZlID0gTlVMTDsKLQlzdGF0aWMgdTMyIGlwX2JjYXN0ID0gMHhmZmZmZmZmZjsKKwlzdGF0aWMgY29uc3QgdTMyIGlwX2JjYXN0ID0gMHhmZmZmZmZmZjsKIAlpbnQgaGFzaF9zaXplID0gMDsKIAlpbnQgZG9fdHhfYmFsYW5jZSA9IDE7CiAJdTMyIGhhc2hfaW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYmNmOWYxNy4uMmQwYWMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZlcnNpb24gPQogCURSVl9ERVNDUklQVElPTiAiOiB2IiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOwogCiBMSVNUX0hFQUQoYm9uZF9kZXZfbGlzdCk7CkBAIC0xMDQwLDYgKzEwNDAsMTAgQEAKIAlpZiAoKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV9UTEIpIHx8CiAJICAgIChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfQUxCKSkgewogCQlib25kX2FsYl9oYW5kbGVfYWN0aXZlX2NoYW5nZShib25kLCBuZXdfYWN0aXZlKTsKKwkJaWYgKG9sZF9hY3RpdmUpCisJCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhvbGRfYWN0aXZlKTsKKwkJaWYgKG5ld19hY3RpdmUpCisJCQlib25kX3NldF9zbGF2ZV9hY3RpdmVfZmxhZ3MobmV3X2FjdGl2ZSk7CiAJfSBlbHNlIHsKIAkJYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUgPSBuZXdfYWN0aXZlOwogCX0KQEAgLTE0NDMsMTUgKzE0NDcsMTYgQEAKIAogCXN3aXRjaCAoYm9uZC0+cGFyYW1zLm1vZGUpIHsKIAljYXNlIEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVA6Ci0JCS8qIGlmIHdlJ3JlIGluIGFjdGl2ZS1iYWNrdXAgbW9kZSwgd2UgbmVlZCBvbmUgYW5kIG9ubHkgb25lIGFjdGl2ZQotCQkgKiBpbnRlcmZhY2UuIFRoZSBiYWNrdXAgaW50ZXJmYWNlcyB3aWxsIGhhdmUgdGhlaXIgTk9BUlAgZmxhZyBzZXQKLQkJICogYmVjYXVzZSB3ZSBuZWVkIHRoZW0gdG8gYmUgY29tcGxldGVseSBkZWFmIGFuZCBub3QgdG8gcmVzcG9uZCB0bwotCQkgKiBhbnkgQVJQIHJlcXVlc3Qgb24gdGhlIG5ldHdvcmsgdG8gYXZvaWQgZm9vbGluZyBhIHN3aXRjaC4gVGh1cywKLQkJICogc2luY2Ugd2UgZ3VhcmFudGVlIHRoYXQgY3Vycl9hY3RpdmVfc2xhdmUgYWx3YXlzIHBvaW50IHRvIHRoZSBsYXN0Ci0JCSAqIHVzYWJsZSBpbnRlcmZhY2UsIHdlIGp1c3QgaGF2ZSB0byB2ZXJpZnkgdGhpcyBpbnRlcmZhY2UncyBmbGFnLgorCQkvKiBpZiB3ZSdyZSBpbiBhY3RpdmUtYmFja3VwIG1vZGUsIHdlIG5lZWQgb25lIGFuZAorCQkgKiBvbmx5IG9uZSBhY3RpdmUgaW50ZXJmYWNlLiBUaGUgYmFja3VwIGludGVyZmFjZXMKKwkJICogd2lsbCBoYXZlIHRoZWlyIFNMQVZFX0lOQUNUSVZFIGZsYWcgc2V0IGJlY2F1c2Ugd2UKKwkJICogbmVlZCB0aGVtIHRvIGJlIGRyb3AgYWxsIHBhY2tldHMuIFRodXMsIHNpbmNlIHdlCisJCSAqIGd1YXJhbnRlZSB0aGF0IGN1cnJfYWN0aXZlX3NsYXZlIGFsd2F5cyBwb2ludCB0bworCQkgKiB0aGUgbGFzdCB1c2FibGUgaW50ZXJmYWNlLCB3ZSBqdXN0IGhhdmUgdG8gdmVyaWZ5CisJCSAqIHRoaXMgaW50ZXJmYWNlJ3MgZmxhZy4KIAkJICovCiAJCWlmICgoKCFib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSkgfHwKLQkJICAgICAoYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUtPmRldi0+ZmxhZ3MgJiBJRkZfTk9BUlApKSAmJgorCQkgICAgIChib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZS0+ZGV2LT5wcml2X2ZsYWdzICYgSUZGX1NMQVZFX0lOQUNUSVZFKSkgJiYKIAkJICAgIChuZXdfc2xhdmUtPmxpbmsgIT0gQk9ORF9MSU5LX0RPV04pKSB7CiAJCQlkcHJpbnRrKCJUaGlzIGlzIHRoZSBmaXJzdCBhY3RpdmUgc2xhdmVcbiIpOwogCQkJLyogZmlyc3Qgc2xhdmUgb3Igbm8gYWN0aXZlIHNsYXZlIHlldCwgYW5kIHRoaXMgbGluawpAQCAtMTQ5Miw2ICsxNDk3LDggQEAKIAkJCSAqIGlzIE9LLCBzbyBtYWtlIHRoaXMgaW50ZXJmYWNlIHRoZSBhY3RpdmUgb25lCiAJCQkgKi8KIAkJCWJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShib25kLCBuZXdfc2xhdmUpOworCQl9IGVsc2UgeworCQkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3MobmV3X3NsYXZlKTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTcyNCwxMyArMTczMSw4IEBACiAJYWRkci5zYV9mYW1pbHkgPSBzbGF2ZV9kZXYtPnR5cGU7CiAJZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKIAotCS8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHN0YXRlIG9mIHRoZQotCSAqIElGRl9OT0FSUCBmbGFnIHRoYXQgbWlnaHQgaGF2ZSBiZWVuCi0JICogc2V0IGJ5IGJvbmRfc2V0X3NsYXZlX2luYWN0aXZlX2ZsYWdzKCkKLQkgKi8KLQlpZiAoKHNsYXZlLT5vcmlnaW5hbF9mbGFncyAmIElGRl9OT0FSUCkgPT0gMCkgewotCQlzbGF2ZV9kZXYtPmZsYWdzICY9IH5JRkZfTk9BUlA7Ci0JfQorCXNsYXZlX2Rldi0+cHJpdl9mbGFncyAmPSB+KElGRl9NQVNURVJfODAyM0FEIHwgSUZGX01BU1RFUl9BTEIgfAorCQkJCSAgIElGRl9TTEFWRV9JTkFDVElWRSk7CiAKIAlrZnJlZShzbGF2ZSk7CiAKQEAgLTE4MTYsMTIgKzE4MTgsOCBAQAogCQlhZGRyLnNhX2ZhbWlseSA9IHNsYXZlX2Rldi0+dHlwZTsKIAkJZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKIAotCQkvKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgSUZGX05PQVJQIGZsYWcgdGhhdCBtaWdodCBoYXZlCi0JCSAqIGJlZW4gc2V0IGJ5IGJvbmRfc2V0X3NsYXZlX2luYWN0aXZlX2ZsYWdzKCkKLQkJICovCi0JCWlmICgoc2xhdmUtPm9yaWdpbmFsX2ZsYWdzICYgSUZGX05PQVJQKSA9PSAwKSB7Ci0JCQlzbGF2ZV9kZXYtPmZsYWdzICY9IH5JRkZfTk9BUlA7Ci0JCX0KKwkJc2xhdmVfZGV2LT5wcml2X2ZsYWdzICY9IH4oSUZGX01BU1RFUl84MDIzQUQgfCBJRkZfTUFTVEVSX0FMQiB8CisJCQkJCSAgIElGRl9TTEFWRV9JTkFDVElWRSk7CiAKIAkJa2ZyZWUoc2xhdmUpOwogCkBAIC00MDYxLDE0ICs0MDU5LDE3IEBACiAJCWJvbmRfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBib25kX3htaXRfYnJvYWRjYXN0OwogCQlicmVhazsKIAljYXNlIEJPTkRfTU9ERV84MDIzQUQ6CisJCWJvbmRfc2V0X21hc3Rlcl8zYWRfZmxhZ3MoYm9uZCk7CiAJCWJvbmRfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBib25kXzNhZF94bWl0X3hvcjsKIAkJaWYgKGJvbmQtPnBhcmFtcy54bWl0X3BvbGljeSA9PSBCT05EX1hNSVRfUE9MSUNZX0xBWUVSMzQpCiAJCQlib25kLT54bWl0X2hhc2hfcG9saWN5ID0gYm9uZF94bWl0X2hhc2hfcG9saWN5X2wzNDsKIAkJZWxzZQogCQkJYm9uZC0+eG1pdF9oYXNoX3BvbGljeSA9IGJvbmRfeG1pdF9oYXNoX3BvbGljeV9sMjsKIAkJYnJlYWs7Ci0JY2FzZSBCT05EX01PREVfVExCOgogCWNhc2UgQk9ORF9NT0RFX0FMQjoKKwkJYm9uZF9zZXRfbWFzdGVyX2FsYl9mbGFncyhib25kKTsKKwkJLyogRkFMTFRIUlUgKi8KKwljYXNlIEJPTkRfTU9ERV9UTEI6CiAJCWJvbmRfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBib25kX2FsYl94bWl0OwogCQlib25kX2Rldi0+c2V0X21hY19hZGRyZXNzID0gYm9uZF9hbGJfc2V0X21hY19hZGRyZXNzOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKaW5kZXggMDQxYmNjNS4uNWE5YmQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKQEAgLTQyNCw2ICs0MjQsMTIgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfSBlbHNlIHsKKwkJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV84MDIzQUQpCisJCQlib25kX3Vuc2V0X21hc3Rlcl8zYWRfZmxhZ3MoYm9uZCk7CisKKwkJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV9BTEIpCisJCQlib25kX3Vuc2V0X21hc3Rlcl9hbGJfZmxhZ3MoYm9uZCk7CisKIAkJYm9uZC0+cGFyYW1zLm1vZGUgPSBuZXdfdmFsdWU7CiAJCWJvbmRfc2V0X21vZGVfb3BzKGJvbmQsIGJvbmQtPnBhcmFtcy5tb2RlKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlczogc2V0dGluZyBtb2RlIHRvICVzICglZCkuXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAppbmRleCAzZGQ3OGQwLi5jZTlkYzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaApAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgImJvbmRfM2FkLmgiCiAjaW5jbHVkZSAiYm9uZF9hbGIuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTgkiMy4wLjEiCi0jZGVmaW5lIERSVl9SRUxEQVRFCSJKYW51YXJ5IDksIDIwMDYiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIzLjAuMiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIkZlYnJ1YXJ5IDIxLCAyMDA2IgogI2RlZmluZSBEUlZfTkFNRQkiYm9uZGluZyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJFdGhlcm5ldCBDaGFubmVsIEJvbmRpbmcgRHJpdmVyIgogCkBAIC0yMzAsMTQgKzIzMCwzNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3Moc3RydWN0IHNsYXZlICpzbGF2ZSkKIHsKLQlzbGF2ZS0+c3RhdGUgPSBCT05EX1NUQVRFX0JBQ0tVUDsKLQlzbGF2ZS0+ZGV2LT5mbGFncyB8PSBJRkZfTk9BUlA7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBzbGF2ZS0+ZGV2LT5tYXN0ZXItPnByaXY7CisJaWYgKGJvbmQtPnBhcmFtcy5tb2RlICE9IEJPTkRfTU9ERV9UTEIgJiYKKwkgICAgYm9uZC0+cGFyYW1zLm1vZGUgIT0gQk9ORF9NT0RFX0FMQikKKwkJc2xhdmUtPnN0YXRlID0gQk9ORF9TVEFURV9CQUNLVVA7CisJc2xhdmUtPmRldi0+cHJpdl9mbGFncyB8PSBJRkZfU0xBVkVfSU5BQ1RJVkU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib25kX3NldF9zbGF2ZV9hY3RpdmVfZmxhZ3Moc3RydWN0IHNsYXZlICpzbGF2ZSkKIHsKIAlzbGF2ZS0+c3RhdGUgPSBCT05EX1NUQVRFX0FDVElWRTsKLQlzbGF2ZS0+ZGV2LT5mbGFncyAmPSB+SUZGX05PQVJQOworCXNsYXZlLT5kZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9TTEFWRV9JTkFDVElWRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJvbmRfc2V0X21hc3Rlcl8zYWRfZmxhZ3Moc3RydWN0IGJvbmRpbmcgKmJvbmQpCit7CisJYm9uZC0+ZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9NQVNURVJfODAyM0FEOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm9uZF91bnNldF9tYXN0ZXJfM2FkX2ZsYWdzKHN0cnVjdCBib25kaW5nICpib25kKQoreworCWJvbmQtPmRldi0+cHJpdl9mbGFncyAmPSB+SUZGX01BU1RFUl84MDIzQUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBib25kX3NldF9tYXN0ZXJfYWxiX2ZsYWdzKHN0cnVjdCBib25kaW5nICpib25kKQoreworCWJvbmQtPmRldi0+cHJpdl9mbGFncyB8PSBJRkZfTUFTVEVSX0FMQjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJvbmRfdW5zZXRfbWFzdGVyX2FsYl9mbGFncyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKK3sKKwlib25kLT5kZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9NQVNURVJfQUxCOwogfQogCiBzdHJ1Y3Qgdmxhbl9lbnRyeSAqYm9uZF9uZXh0X3ZsYW4oc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCB2bGFuX2VudHJ5ICpjdXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCA2ZTI5NWZjLi5hYzQ4Zjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC05MSw2ICs5MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAKQEAgLTE5MSwxMiArMTkyLDE1IEBACiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJRFJWX01PRFVMRV9OQU1FICIuYzp2IiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CiAKK3N0YXRpYyBpbnQgY2Fzc2luaV9kZWJ1ZyA9IC0xOwkvKiAtMSA9PSB1c2UgQ0FTX0RFRl9NU0dfRU5BQkxFIGFzIHZhbHVlICovCitzdGF0aWMgaW50IGxpbmtfbW9kZTsKKwogTU9EVUxFX0FVVEhPUigiQWRyaWFuIFN1biAoYXN1bkBkYXJrc3VucmlzaW5nLmNvbSkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VuIENhc3NpbmkoKykgZXRoZXJuZXQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfUEFSTShjYXNzaW5pX2RlYnVnLCAiaSIpOworbW9kdWxlX3BhcmFtKGNhc3NpbmlfZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNhc3NpbmlfZGVidWcsICJDYXNzaW5pIGJpdG1hcHBlZCBkZWJ1Z2dpbmcgbWVzc2FnZSBlbmFibGUgdmFsdWUiKTsKLU1PRFVMRV9QQVJNKGxpbmtfbW9kZSwgImkiKTsKK21vZHVsZV9wYXJhbShsaW5rX21vZGUsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxpbmtfbW9kZSwgImRlZmF1bHQgbGluayBtb2RlIik7CiAKIC8qCkBAIC0yMDgsNyArMjEyLDcgQEAKICAqIFZhbHVlIGluIHNlY29uZHMsIGZvciB1c2VyIGlucHV0LgogICovCiBzdGF0aWMgaW50IGxpbmtkb3duX3RpbWVvdXQgPSBERUZBVUxUX0xJTktET1dOX1RJTUVPVVQ7Ci1NT0RVTEVfUEFSTShsaW5rZG93bl90aW1lb3V0LCAiaSIpOworbW9kdWxlX3BhcmFtKGxpbmtkb3duX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxpbmtkb3duX3RpbWVvdXQsCiAibWluIHJlc2V0IGludGVydmFsIGluIHNlYy4gZm9yIFBDUyBsaW5rZG93biBpc3N1ZTsgZGlzYWJsZWQgaWYgbm90IHBvc2l0aXZlIik7CiAKQEAgLTIyMCw4ICsyMjQsNiBAQAogc3RhdGljIGludCBsaW5rX3RyYW5zaXRpb25fdGltZW91dDsKIAogCi1zdGF0aWMgaW50IGNhc3NpbmlfZGVidWcgPSAtMTsJLyogLTEgPT0gdXNlIENBU19ERUZfTVNHX0VOQUJMRSBhcyB2YWx1ZSAqLwotc3RhdGljIGludCBsaW5rX21vZGU7CiAKIHN0YXRpYyB1MTYgbGlua19tb2Rlc1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJQk1DUl9BTkVOQUJMRSwJCQkgLyogMCA6IGF1dG9uZWcgKi8KQEAgLTM4OTIsNyArMzg5NCw3IEBACiAJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbTl9UWF9SSU5HU10pOwogfQogCi0vKiBTaHV0IGRvd24gdGhlIGNoaXAsIG11c3QgYmUgY2FsbGVkIHdpdGggcG1fc2VtIGhlbGQuICAqLworLyogU2h1dCBkb3duIHRoZSBjaGlwLCBtdXN0IGJlIGNhbGxlZCB3aXRoIHBtX211dGV4IGhlbGQuICAqLwogc3RhdGljIHZvaWQgY2FzX3NodXRkb3duKHN0cnVjdCBjYXMgKmNwKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MzExLDExICs0MzEzLDExIEBACiAJaW50IGh3X3dhc191cCwgZXJyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkb3duKCZjcC0+cG1fc2VtKTsKKwltdXRleF9sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCiAJaHdfd2FzX3VwID0gY3AtPmh3X3J1bm5pbmc7CiAKLQkvKiBUaGUgcG93ZXItbWFuYWdlbWVudCBzZW1hcGhvcmUgcHJvdGVjdHMgdGhlIGh3X3J1bm5pbmcKKwkvKiBUaGUgcG93ZXItbWFuYWdlbWVudCBtdXRleCBwcm90ZWN0cyB0aGUgaHdfcnVubmluZwogCSAqIGV0Yy4gc3RhdGUgc28gaXQgaXMgc2FmZSB0byBkbyB0aGlzIGJpdCB3aXRob3V0IGNwLT5sb2NrCiAJICovCiAJaWYgKCFjcC0+aHdfcnVubmluZykgewpAQCAtNDM2NCw3ICs0MzY2LDcgQEAKIAljYXNfdW5sb2NrX2FsbF9yZXN0b3JlKGNwLCBmbGFncyk7CiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCXVwKCZjcC0+cG1fc2VtKTsKKwltdXRleF91bmxvY2soJmNwLT5wbV9tdXRleCk7CiAJcmV0dXJuIDA7CiAKIGVycl9zcGFyZToKQEAgLTQzNzIsNyArNDM3NCw3IEBACiAJY2FzX2ZyZWVfcnhkcyhjcCk7CiBlcnJfdHhfdGlueToKIAljYXNfdHhfdGlueV9mcmVlKGNwKTsKLQl1cCgmY3AtPnBtX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQzODIsNyArNDM4NCw3IEBACiAJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogTWFrZSBzdXJlIHdlIGRvbid0IGdldCBkaXN0cmFjdGVkIGJ5IHN1c3BlbmQvcmVzdW1lICovCi0JZG93bigmY3AtPnBtX3NlbSk7CisJbXV0ZXhfbG9jaygmY3AtPnBtX211dGV4KTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtNDM5OSw3ICs0NDAxLDcgQEAKIAljYXNfc3BhcmVfZnJlZShjcCk7CiAJY2FzX2ZyZWVfcnhkcyhjcCk7CiAJY2FzX3R4X3RpbnlfZnJlZShjcCk7Ci0JdXAoJmNwLT5wbV9zZW0pOworCW11dGV4X3VubG9jaygmY3AtPnBtX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDgzNCwxMCArNDgzNiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjID0gLUVPUE5PVFNVUFA7CiAJCi0JLyogSG9sZCB0aGUgUE0gc2VtYXBob3JlIHdoaWxlIGRvaW5nIGlvY3RsJ3Mgb3Igd2UgbWF5IGNvbGxpZGUKKwkvKiBIb2xkIHRoZSBQTSBtdXRleCB3aGlsZSBkb2luZyBpb2N0bCdzIG9yIHdlIG1heSBjb2xsaWRlCiAJICogd2l0aCBvcGVuL2Nsb3NlIGFuZCBwb3dlciBtYW5hZ2VtZW50IGFuZCBvb3BzLgogCSAqLwotCWRvd24oJmNwLT5wbV9zZW0pOworCW11dGV4X2xvY2soJmNwLT5wbV9tdXRleCk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgkJLyogR2V0IGFkZHJlc3Mgb2YgTUlJIFBIWSBpbiB1c2UuICovCiAJCWRhdGEtPnBoeV9pZCA9IGNwLT5waHlfYWRkcjsKQEAgLTQ4NjcsNyArNDg2OSw3IEBACiAJCWJyZWFrOwogCX07CiAKLQl1cCgmY3AtPnBtX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCXJldHVybiByYzsKIH0KIApAQCAtNDk5NCw3ICs0OTk2LDcgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJmNwLT50eF9sb2NrW2ldKTsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJmNwLT5zdGF0X2xvY2tbTl9UWF9SSU5HU10pOwotCWluaXRfTVVURVgoJmNwLT5wbV9zZW0pOworCW11dGV4X2luaXQoJmNwLT5wbV9tdXRleCk7CiAKIAlpbml0X3RpbWVyKCZjcC0+bGlua190aW1lcik7CiAJY3AtPmxpbmtfdGltZXIuZnVuY3Rpb24gPSBjYXNfbGlua190aW1lcjsKQEAgLTUxMTYsMTAgKzUxMTgsMTAgQEAKIAkJCSAgICBjcC0+aW5pdF9ibG9jaywgY3AtPmJsb2NrX2R2bWEpOwogCiBlcnJfb3V0X2lvdW5tYXA6Ci0JZG93bigmY3AtPnBtX3NlbSk7CisJbXV0ZXhfbG9jaygmY3AtPnBtX211dGV4KTsKIAlpZiAoY3AtPmh3X3J1bm5pbmcpCiAJCWNhc19zaHV0ZG93bihjcCk7Ci0JdXAoJmNwLT5wbV9zZW0pOworCW11dGV4X3VubG9jaygmY3AtPnBtX211dGV4KTsKIAogCWlvdW5tYXAoY3AtPnJlZ3MpOwogCkBAIC01MTUyLDExICs1MTU0LDExIEBACiAJY3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKLQlkb3duKCZjcC0+cG1fc2VtKTsKKwltdXRleF9sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJaWYgKGNwLT5od19ydW5uaW5nKQogCQljYXNfc2h1dGRvd24oY3ApOwotCXVwKCZjcC0+cG1fc2VtKTsKKwltdXRleF91bmxvY2soJmNwLT5wbV9tdXRleCk7CiAKICNpZiAxCiAJaWYgKGNwLT5vcmlnX2NhY2hlbGluZV9zaXplKSB7CkBAIC01MTgzLDEwICs1MTg1LDcgQEAKIAlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIFdlIGhvbGQgdGhlIFBNIHNlbWFwaG9yZSBkdXJpbmcgZW50aXJlIGRyaXZlcgotCSAqIHNsZWVwIHRpbWUKLQkgKi8KLQlkb3duKCZjcC0+cG1fc2VtKTsKKwltdXRleF9sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCQogCS8qIElmIHRoZSBkcml2ZXIgaXMgb3BlbmVkLCB3ZSBzdG9wIHRoZSBETUEgKi8KIAlpZiAoY3AtPm9wZW5lZCkgewpAQCAtNTIwNiw2ICs1MjA1LDcgQEAKIAogCWlmIChjcC0+aHdfcnVubmluZykKIAkJY2FzX3NodXRkb3duKGNwKTsKKwltdXRleF91bmxvY2soJmNwLT5wbV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMTcsNiArNTIxNyw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogcmVzdW1pbmdcbiIsIGRldi0+bmFtZSk7CiAKKwltdXRleF9sb2NrKCZjcC0+cG1fbXV0ZXgpOwogCWNhc19oYXJkX3Jlc2V0KGNwKTsKIAlpZiAoY3AtPm9wZW5lZCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTIyOSw3ICs1MjMwLDcgQEAKIAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJfQotCXVwKCZjcC0+cG1fc2VtKTsKKwltdXRleF91bmxvY2soJmNwLT5wbV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmggYi9kcml2ZXJzL25ldC9jYXNzaW5pLmgKaW5kZXggODgwNjNlZi4uYWI1NWM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5oCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuaApAQCAtNDI4NCw3ICs0Mjg0LDcgQEAKIAkgKiAoaWUuIG5vdCBwb3dlciBtYW5hZ2VkKSAqLwogCWludCBod19ydW5uaW5nOwogCWludCBvcGVuZWQ7Ci0Jc3RydWN0IHNlbWFwaG9yZSBwbV9zZW07IC8qIG9wZW4vY2xvc2Uvc3VzcGVuZC9yZXN1bWUgKi8KKwlzdHJ1Y3QgbXV0ZXggcG1fbXV0ZXg7IC8qIG9wZW4vY2xvc2Uvc3VzcGVuZC9yZXN1bWUgKi8KIAogCXN0cnVjdCBjYXNfaW5pdF9ibG9jayAqaW5pdF9ibG9jazsKIAlzdHJ1Y3QgY2FzX3R4X2Rlc2MgKmluaXRfdHhkc1tNQVhfVFhfUklOR1NdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCmluZGV4IDM0OWViZTcuLjdmZTI2MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiBzdGF0aWMgaW50IGRmbHRfbXNnX2VuYWJsZSA9IERGTFRfTVNHX0VOQUJMRTsKIAotTU9EVUxFX1BBUk0oZGZsdF9tc2dfZW5hYmxlLCAiaSIpOworbW9kdWxlX3BhcmFtKGRmbHRfbXNnX2VuYWJsZSwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGZsdF9tc2dfZW5hYmxlLCAiQ2hlbHNpbyBUMSBtZXNzYWdlIGVuYWJsZSBiaXRtYXAiKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2VzcGkuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCmluZGV4IDIzMDY0MjUuLjU0MmU1ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCkBAIC04NywxNSArODcsOSBAQAogc3RhdGljIGludCB0cmljbl9pbml0KGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKIAlpbnQgICAgIGkgICAgICAgICAgICAgICA9IDA7Ci0JaW50ICAgICBzbWUgICAgICAgICAgICAgPSAxOwogCWludCAgICAgc3RhdCAgICAgICAgICAgID0gMDsKIAlpbnQgICAgIHRpbWVvdXQgICAgICAgICA9IDA7CiAJaW50ICAgICBpc19yZWFkeSAgICAgICAgPSAwOwotCWludCAgICAgZHluYW1pY19kZXNrZXcgID0gMDsKLQotCWlmIChkeW5hbWljX2Rlc2tldykKLQkJc21lID0gMDsKLQogCiAJLyogMSAqLwogCXRpbWVvdXQ9MTAwMDsKQEAgLTExMywxMSArMTA3LDkgQEAKIAl9CiAKIAkvKiAyICovCi0JaWYgKHNtZSkgewotCQl0cmljbl93cml0ZShhZGFwdGVyLCAwLCAwLCAwLCBUUklDTl9DTkZHLCAweDgxKTsKLQkJdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMSwgMCwgVFJJQ05fQ05GRywgMHg4MSk7Ci0JCXRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIDAsIFRSSUNOX0NORkcsIDB4ODEpOwotCX0KKwl0cmljbl93cml0ZShhZGFwdGVyLCAwLCAwLCAwLCBUUklDTl9DTkZHLCAweDgxKTsKKwl0cmljbl93cml0ZShhZGFwdGVyLCAwLCAxLCAwLCBUUklDTl9DTkZHLCAweDgxKTsKKwl0cmljbl93cml0ZShhZGFwdGVyLCAwLCAyLCAwLCBUUklDTl9DTkZHLCAweDgxKTsKIAlmb3IgKGk9MTsgaTw9IDg7IGkrKykgdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMCwgaSwgVFJJQ05fQ05GRywgMHhmMSk7CiAJZm9yIChpPTE7IGk8PSAyOyBpKyspIHRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDEsIGksIFRSSUNOX0NORkcsIDB4ZjEpOwogCWZvciAoaT0xOyBpPD0gMzsgaSsrKSB0cmljbl93cml0ZShhZGFwdGVyLCAwLCAyLCBpLCBUUklDTl9DTkZHLCAweGUxKTsKQEAgLTI5Niw5ICsyODgsNyBAQAogCiBzdHJ1Y3QgcGVlc3BpICp0MV9lc3BpX2NyZWF0ZShhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IHBlZXNwaSAqZXNwaSA9IGttYWxsb2Moc2l6ZW9mKCplc3BpKSwgR0ZQX0tFUk5FTCk7Ci0KLQltZW1zZXQoZXNwaSwgMCwgc2l6ZW9mKCplc3BpKSk7CisJc3RydWN0IHBlZXNwaSAqZXNwaSA9IGt6YWxsb2Moc2l6ZW9mKCplc3BpKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoZXNwaSkKIAkJZXNwaS0+YWRhcHRlciA9IGFkYXB0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCAyYzViODQ5Li4zMGZmOGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTEwMjEsNyArMTAyMSw3IEBACiAJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KG5kLT5pZl9wb3J0LAogCQkJCQkgICAgICAgJnNnZS0+c3RvcHBlZF90eF9xdWV1ZXMpICYmCiAJCQkgICAgbmV0aWZfcnVubmluZyhuZCkpIHsKLQkJCQlzZ2UtPnN0YXRzLmNtZFFfcmVzdGFydGVkWzNdKys7CisJCQkJc2dlLT5zdGF0cy5jbWRRX3Jlc3RhcnRlZFsyXSsrOwogCQkJCW5ldGlmX3dha2VfcXVldWUobmQpOwogCQkJfQogCQl9CkBAIC0xMzUwLDcgKzEzNTAsNyBAQAogCSAJaWYgKHVubGlrZWx5KGNyZWRpdHMgPCBjb3VudCkpIHsKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJCXNldF9iaXQoZGV2LT5pZl9wb3J0LCAmc2dlLT5zdG9wcGVkX3R4X3F1ZXVlcyk7Ci0JCQlzZ2UtPnN0YXRzLmNtZFFfZnVsbFszXSsrOworCQkJc2dlLT5zdGF0cy5jbWRRX2Z1bGxbMl0rKzsKIAkJCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKIAkJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQogCQkJCUNIX0VSUigiJXM6IFR4IHJpbmcgZnVsbCB3aGlsZSBxdWV1ZSBhd2FrZSFcbiIsCkBAIC0xMzU4LDcgKzEzNTgsNyBAQAogCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCQl9CiAJCWlmICh1bmxpa2VseShjcmVkaXRzIC0gY291bnQgPCBxLT5zdG9wX3RocmVzKSkgewotCQkJc2dlLT5zdGF0cy5jbWRRX2Z1bGxbM10rKzsKKwkJCXNnZS0+c3RhdHMuY21kUV9mdWxsWzJdKys7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQlzZXRfYml0KGRldi0+aWZfcG9ydCwgJnNnZS0+c3RvcHBlZF90eF9xdWV1ZXMpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc3Vici5jCmluZGV4IDFlYmI1ZDEuLjEyZTRlOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc3Vici5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc3Vici5jCkBAIC02ODYsNyArNjg2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX19kZXZpbml0IGdldF9wY2lfbW9kZShhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBjaGVsc2lvX3BjaV9wYXJhbXMgKnApCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIHNob3J0IHNwZWVkX21hcFtdID0geyAzMywgNjYsIDEwMCwgMTMzIH07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNwZWVkX21hcFtdID0geyAzMywgNjYsIDEwMCwgMTMzIH07CiAJdTMyIHBjaV9tb2RlOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFkYXB0ZXItPnBkZXYsIEFfUENJQ0ZHX01PREUsICZwY2lfbW9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZTYyMC5jIGIvZHJpdmVycy9uZXQvZGU2MjAuYwppbmRleCAwMDY5ZjVmLi4yMmZjNWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZTYyMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RlNjIwLmMKQEAgLTEwMTIsNyArMTAxMiw3IEBACiAjaWZkZWYgTU9EVUxFCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmRlNjIwX2RldjsKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJZGU2MjBfZGV2ID0gZGU2MjBfcHJvYmUoLTEpOwogCWlmIChJU19FUlIoZGU2MjBfZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IDAzODA0Y2MuLjA5NDFkNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtMTQxMiw3ICsxNDEyLDcgQEAKIAkJaXJxID0gMTE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IG1jYV9wcm9iZSBJUlEgZXJyb3IuICBZb3Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlICglZCkuXG4iLCBkZXYtPm5hbWUsIHdoZXJlKTsKKwkJcHJpbnRrKCIlczogbWNhX3Byb2JlIElSUSBlcnJvci4gIFlvdSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKCVkKS5cbiIsIG1kZXYtPm5hbWUsIHdoZXJlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZ3JzLmMgYi9kcml2ZXJzL25ldC9kZ3JzLmMKaW5kZXggNzBiNDdlNC4uZTE3NWQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGdycy5jCisrKyBiL2RyaXZlcnMvbmV0L2RncnMuYwpAQCAtOTkzLDcgKzk5Myw3IEBACiAJaW50CQlpczsKIAl1bnNpZ25lZCBsb25nCWk7CiAKLQlzdGF0aWMgaW50CWl2MmlzWzE2XSA9IHsKKwlzdGF0aWMgY29uc3QgaW50IGl2MmlzWzE2XSA9IHsKIAkJCQkwLCAwLCAwLCBFUzRIX0lTX0lOVDMsCiAJCQkJMCwgRVM0SF9JU19JTlQ1LCAwLCBFUzRIX0lTX0lOVDcsCiAJCQkJMCwgMCwgRVM0SF9JU19JTlQxMCwgRVM0SF9JU19JTlQxMSwKQEAgLTE1NTEsNyArMTU1MSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBkZ3JzX2luaXRfbW9kdWxlICh2b2lkKQogewogCWludAlpOwotCWludAljYXJkY291bnQgPSAwOworCWludAllcnI7CiAKIAkvKgogCSAqCUNvbW1hbmQgbGluZSB2YXJpYWJsZSBvdmVycmlkZXMKQEAgLTE1OTMsMTMgKzE1OTMsMTMgQEAKIAkgKglGaW5kIGFuZCBjb25maWd1cmUgYWxsIHRoZSBjYXJkcwogCSAqLwogI2lmZGVmIENPTkZJR19FSVNBCi0JY2FyZGNvdW50ID0gZWlzYV9kcml2ZXJfcmVnaXN0ZXIoJmRncnNfZWlzYV9kcml2ZXIpOwotCWlmIChjYXJkY291bnQgPCAwKQotCQlyZXR1cm4gY2FyZGNvdW50OworCWVyciA9IGVpc2FfZHJpdmVyX3JlZ2lzdGVyKCZkZ3JzX2Vpc2FfZHJpdmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogI2VuZGlmCi0JY2FyZGNvdW50ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGdyc19wY2lfZHJpdmVyKTsKLQlpZiAoY2FyZGNvdW50KQotCQlyZXR1cm4gY2FyZGNvdW50OworCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRncnNfcGNpX2RyaXZlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGdyc19maXJtd2FyZS5jIGIvZHJpdmVycy9uZXQvZGdyc19maXJtd2FyZS5jCmluZGV4IDFlNDllMWUuLjhjMjBkNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RncnNfZmlybXdhcmUuYworKysgYi9kcml2ZXJzL25ldC9kZ3JzX2Zpcm13YXJlLmMKQEAgLTEsNCArMSw0IEBACi1zdGF0aWMgaW50IGRncnNfZmlybW51bSA9IDU1MDsKK3N0YXRpYyBjb25zdCBpbnQgZGdyc19maXJtbnVtID0gNTUwOwogc3RhdGljIGNoYXIgZGdyc19maXJtdmVyW10gPSAiJFZlcnNpb24kIjsKIHN0YXRpYyBjaGFyIGRncnNfZmlybWRhdGVbXSA9ICIxMS8xNi85NiAwMzo0NToxNSI7CiBzdGF0aWMgdW5zaWduZWQgY2hhciBkZ3JzX2NvZGVbXSBfX2luaXRkYXRhID0gewpAQCAtOTk2Myw0ICs5OTYzLDQgQEAKIAkxMDksNDYsOTksMCwxMTQsOTksMCwwLDQ4LDEyMCwwLDAsCiAJMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKIAl9IDsKLXN0YXRpYyBpbnQgZGdyc19uY29kZSA9IDExOTUyMCA7CitzdGF0aWMgY29uc3QgaW50IGRncnNfbmNvZGUgPSAxMTk1MjAgOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5jIGIvZHJpdmVycy9uZXQvZGwyay5jCmluZGV4IDQzMGM2MjguLjFmMzYyNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTUwLDggKzUwLDggQEAKIAogKi8KICNkZWZpbmUgRFJWX05BTUUJIkQtTGluayBETDIwMDAtYmFzZWQgbGludXggZHJpdmVyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkidjEuMTdhIgotI2RlZmluZSBEUlZfUkVMREFURQkiMjAwMi8xMC8wNCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JInYxLjE3YiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjIwMDYvMDMvMTAiCiAjaW5jbHVkZSAiZGwyay5oIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CkBAIC05MCw4ICs5MCw4IEBACiAjZGVmaW5lIEVuYWJsZUludCgpIFwKIHdyaXRldyhERUZBVUxUX0lOVFIsIGlvYWRkciArIEludEVuYWJsZSkKIAotc3RhdGljIGludCBtYXhfaW50cmxvb3AgPSA1MDsKLXN0YXRpYyBpbnQgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDB4NDA7CitzdGF0aWMgY29uc3QgaW50IG1heF9pbnRybG9vcCA9IDUwOworc3RhdGljIGNvbnN0IGludCBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMHg0MDsKIAogc3RhdGljIGludCByaW9fb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCByaW9fdGltZXIgKHVuc2lnbmVkIGxvbmcgZGF0YSk7CkBAIC03NjUsNyArNzY1LDcgQEAKIAkJCWJyZWFrOwogCQlza2IgPSBucC0+dHhfc2tidWZmW2VudHJ5XTsKIAkJcGNpX3VubWFwX3NpbmdsZSAobnAtPnBkZXYsCi0JCQkJICBucC0+dHhfcmluZ1tlbnRyeV0uZnJhZ2luZm8sCisJCQkJICBucC0+dHhfcmluZ1tlbnRyeV0uZnJhZ2luZm8gJiAweGZmZmZmZmZmZmZmZiwKIAkJCQkgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJaWYgKGlycSkKIAkJCWRldl9rZnJlZV9za2JfaXJxIChza2IpOwpAQCAtODkyLDE0ICs4OTIsMTYgQEAKIAogCQkJLyogU21hbGwgc2tidWZmcyBmb3Igc2hvcnQgcGFja2V0cyAqLwogCQkJaWYgKHBrdF9sZW4gPiBjb3B5X3RocmVzaCkgewotCQkJCXBjaV91bm1hcF9zaW5nbGUgKG5wLT5wZGV2LCBkZXNjLT5mcmFnaW5mbywKKwkJCQlwY2lfdW5tYXBfc2luZ2xlIChucC0+cGRldiwKKwkJCQkJCSAgZGVzYy0+ZnJhZ2luZm8gJiAweGZmZmZmZmZmZmZmZiwKIAkJCQkJCSAgbnAtPnJ4X2J1Zl9zeiwKIAkJCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCQlza2JfcHV0IChza2IgPSBucC0+cnhfc2tidWZmW2VudHJ5XSwgcGt0X2xlbik7CiAJCQkJbnAtPnJ4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwogCQkJfSBlbHNlIGlmICgoc2tiID0gZGV2X2FsbG9jX3NrYiAocGt0X2xlbiArIDIpKSAhPSBOVUxMKSB7CiAJCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KG5wLT5wZGV2LAotCQkJCQkJCSAgICBkZXNjLT5mcmFnaW5mbywKKwkJCQkgIAkJCSAgICBkZXNjLT5mcmFnaW5mbyAmIAorCQkJCQkJCSAgICAJMHhmZmZmZmZmZmZmZmYsCiAJCQkJCQkJICAgIG5wLT5yeF9idWZfc3osCiAJCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiLT5kZXYgPSBkZXY7CkBAIC05MTAsNyArOTEyLDggQEAKIAkJCQkJCSAgcGt0X2xlbiwgMCk7CiAJCQkJc2tiX3B1dCAoc2tiLCBwa3RfbGVuKTsKIAkJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UobnAtPnBkZXYsCi0JCQkJCQkJICAgICAgIGRlc2MtPmZyYWdpbmZvLAorCQkJCSAgCQkJICAgICAgIGRlc2MtPmZyYWdpbmZvICYKKwkJCQkJCQkgICAgICAgCSAweGZmZmZmZmZmZmZmZiwKIAkJCQkJCQkgICAgICAgbnAtPnJ4X2J1Zl9zeiwKIAkJCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCX0KQEAgLTE3OTYsOCArMTc5OSw5IEBACiAJCW5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvID0gMDsKIAkJc2tiID0gbnAtPnJ4X3NrYnVmZltpXTsKIAkJaWYgKHNrYikgewotCQkJcGNpX3VubWFwX3NpbmdsZSAobnAtPnBkZXYsIG5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvLAotCQkJCQkgIHNrYi0+bGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGNpX3VubWFwX3NpbmdsZShucC0+cGRldiwgCisJCQkJCSBucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyAmIDB4ZmZmZmZmZmZmZmZmLAorCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiIChza2IpOwogCQkJbnAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CiAJCX0KQEAgLTE4MDUsOCArMTgwOSw5IEBACiAJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKSB7CiAJCXNrYiA9IG5wLT50eF9za2J1ZmZbaV07CiAJCWlmIChza2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUgKG5wLT5wZGV2LCBucC0+dHhfcmluZ1tpXS5mcmFnaW5mbywKLQkJCQkJICBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wZGV2LCAKKwkJCQkJIG5wLT50eF9yaW5nW2ldLmZyYWdpbmZvICYgMHhmZmZmZmZmZmZmZmYsCisJCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiIChza2IpOwogCQkJbnAtPnR4X3NrYnVmZltpXSA9IE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCAyNDI1M2M4Li4zMWFjMDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC01OTgsOCArNTk4LDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZuaWMtPmNtZF9sb2NrLCBmbGFncyk7CiAJd3JpdGViKGlycV9tYXNrX25vbmUsICZuaWMtPmNzci0+c2NiLmNtZF9oaSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmljLT5jbWRfbG9jaywgZmxhZ3MpOwogCWUxMDBfd3JpdGVfZmx1c2gobmljKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuaWMtPmNtZF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDBfZGlzYWJsZV9pcnEoc3RydWN0IG5pYyAqbmljKQpAQCAtNjA4LDggKzYwOCw4IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbmljLT5jbWRfbG9jaywgZmxhZ3MpOwogCXdyaXRlYihpcnFfbWFza19hbGwsICZuaWMtPmNzci0+c2NiLmNtZF9oaSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmljLT5jbWRfbG9jaywgZmxhZ3MpOwogCWUxMDBfd3JpdGVfZmx1c2gobmljKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuaWMtPmNtZF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDBfaHdfcmVzZXQoc3RydWN0IG5pYyAqbmljKQpAQCAtMTU4Miw4ICsxNTgyLDggQEAKIAkgKiBpbnRlcnJ1cHQgbWFzayBiaXQgYW5kIHRoZSBTVyBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBiaXQgKi8KIAlzcGluX2xvY2tfaXJxKCZuaWMtPmNtZF9sb2NrKTsKIAl3cml0ZWIocmVhZGIoJm5pYy0+Y3NyLT5zY2IuY21kX2hpKSB8IGlycV9zd19nZW4sJm5pYy0+Y3NyLT5zY2IuY21kX2hpKTsKLQlzcGluX3VubG9ja19pcnEoJm5pYy0+Y21kX2xvY2spOwogCWUxMDBfd3JpdGVfZmx1c2gobmljKTsKKwlzcGluX3VubG9ja19pcnEoJm5pYy0+Y21kX2xvY2spOwogCiAJZTEwMF91cGRhdGVfc3RhdHMobmljKTsKIAllMTAwX2FkanVzdF9hZGFwdGl2ZV9pZnMobmljLCBjbWQuc3BlZWQsIGNtZC5kdXBsZXgpOwpAQCAtMjE1NCw2ICsyMTU0LDkgQEAKIAogCW1zbGVlcCgxMCk7CiAKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobmljLT5wZGV2LCBuaWMtPnJ4X3RvX2NsZWFuLT5kbWFfYWRkciwKKwkJCVJGRF9CVUZfTEVOLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCiAJaWYobWVtY21wKG5pYy0+cnhfdG9fY2xlYW4tPnNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgcmZkKSwKIAkgICBza2ItPmRhdGEsIEVUSF9EQVRBX0xFTikpCiAJCWVyciA9IC1FQUdBSU47CkBAIC0yMTYxLDggKzIxNjQsOCBAQAogZXJyX2xvb3BiYWNrX25vbmU6CiAJbWRpb193cml0ZShuaWMtPm5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUiwgMCk7CiAJbmljLT5sb29wYmFjayA9IGxiX25vbmU7Ci0JZTEwMF9od19pbml0KG5pYyk7CiAJZTEwMF9jbGVhbl9jYnMobmljKTsKKwllMTAwX2h3X3Jlc2V0KG5pYyk7CiBlcnJfY2xlYW5fcng6CiAJZTEwMF9yeF9jbGVhbl9saXN0KG5pYyk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCmluZGV4IDI3Yzc3MzAuLjI4MWRlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaApAQCAtODMsMTAgKzgzLDYgQEAKIHN0cnVjdCBlMTAwMF9hZGFwdGVyOwogCiAjaW5jbHVkZSAiZTEwMDBfaHcuaCIKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNlbmRpZgogCiAjaWZkZWYgREJHCiAjZGVmaW5lIEUxMDAwX0RCRyhhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiZTEwMDA6ICIgYXJncykKQEAgLTE2OSwxMiArMTY1LDYgQEAKIAl1aW50MTZfdCBuZXh0X3RvX3dhdGNoOwogfTsKIAotI2lmZGVmIENPTkZJR19FMTAwMF9NUQotc3RydWN0IGUxMDAwX3F1ZXVlX3N0YXRzIHsKLQl1aW50NjRfdCBwYWNrZXRzOwotCXVpbnQ2NF90IGJ5dGVzOwotfTsKLSNlbmRpZgogCiBzdHJ1Y3QgZTEwMDBfcHNfcGFnZSB7IHN0cnVjdCBwYWdlICpwc19wYWdlW1BTX1BBR0VfQlVGRkVSU107IH07CiBzdHJ1Y3QgZTEwMDBfcHNfcGFnZV9kbWEgeyB1aW50NjRfdCBwc19wYWdlX2RtYVtQU19QQUdFX0JVRkZFUlNdOyB9OwpAQCAtMTk4LDEyICsxODgsNyBAQAogCXNwaW5sb2NrX3QgdHhfbG9jazsKIAl1aW50MTZfdCB0ZGg7CiAJdWludDE2X3QgdGR0OwotCiAJYm9vbGVhbl90IGxhc3RfdHhfdHNvOwotCi0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi0Jc3RydWN0IGUxMDAwX3F1ZXVlX3N0YXRzIHR4X3N0YXRzOwotI2VuZGlmCiB9OwogCiBzdHJ1Y3QgZTEwMDBfcnhfcmluZyB7CkBAIC0yMjUsMTcgKzIxMCwxMSBAQAogCXN0cnVjdCBlMTAwMF9wc19wYWdlICpwc19wYWdlOwogCXN0cnVjdCBlMTAwMF9wc19wYWdlX2RtYSAqcHNfcGFnZV9kbWE7CiAKLQlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiX3RvcDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiX3ByZXY7Ci0KIAkvKiBjcHUgZm9yIHJ4IHF1ZXVlICovCiAJaW50IGNwdTsKIAogCXVpbnQxNl90IHJkaDsKIAl1aW50MTZfdCByZHQ7Ci0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi0Jc3RydWN0IGUxMDAwX3F1ZXVlX3N0YXRzIHJ4X3N0YXRzOwotI2VuZGlmCiB9OwogCiAjZGVmaW5lIEUxMDAwX0RFU0NfVU5VU0VEKFIpIFwKQEAgLTI2Myw2ICsyNDIsNyBAQAogCXVpbnQzMl90IHJ4X2J1ZmZlcl9sZW47CiAJdWludDMyX3QgcGFydF9udW07CiAJdWludDMyX3Qgd29sOworCXVpbnQzMl90IGtzcDNfcG9ydF9hOwogCXVpbnQzMl90IHNtYXJ0c3BlZWQ7CiAJdWludDMyX3QgZW5fbW5nX3B0OwogCXVpbnQxNl90IGxpbmtfc3BlZWQ7CkBAIC0yNzIsOCArMjUyLDggQEAKIAlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAjZW5kaWYKIAlhdG9taWNfdCBpcnFfc2VtOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF90aW1lb3V0X3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7CiAJdWludDhfdCBmY19hdXRvbmVnOwogCiAJc3RydWN0IHRpbWVyX2xpc3QgYmxpbmtfdGltZXI7CkBAIC0yODEsOSArMjYxLDYgQEAKIAogCS8qIFRYICovCiAJc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4X3Jpbmc7ICAgICAgLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQlzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqKmNwdV90eF9yaW5nOyAvKiBwZXItY3B1ICovCi0jZW5kaWYKIAl1bnNpZ25lZCBsb25nIHR4X3F1ZXVlX2xlbjsKIAl1aW50MzJfdCB0eGRfY21kOwogCXVpbnQzMl90IHR4X2ludF9kZWxheTsKQEAgLTMwNCwyNCArMjgxLDE5IEBACiAJLyogUlggKi8KICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCWJvb2xlYW5fdCAoKmNsZWFuX3J4KSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCQkgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKLQkJCQkJCSAgIGludCAqd29ya19kb25lLCBpbnQgd29ya190b19kbyk7CisJCQkgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCisJCQkgICAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKTsKICNlbHNlCiAJYm9vbGVhbl90ICgqY2xlYW5fcngpIChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJCSAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nKTsKKwkJCSAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZyk7CiAjZW5kaWYKIAl2b2lkICgqYWxsb2NfcnhfYnVmKSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCQkgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAotCQkJCQkJICBpbnQgY2xlYW5lZF9jb3VudCk7CisJCQkgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKKwkJCQlpbnQgY2xlYW5lZF9jb3VudCk7CiAJc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3Jpbmc7ICAgICAgLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQogCXN0cnVjdCBuZXRfZGV2aWNlICpwb2xsaW5nX25ldGRldjsgIC8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQlzdHJ1Y3QgbmV0X2RldmljZSAqKmNwdV9uZXRkZXY7ICAgICAvKiBwZXItY3B1ICovCi0Jc3RydWN0IGNhbGxfYXN5bmNfZGF0YV9zdHJ1Y3Qgcnhfc2NoZWRfY2FsbF9kYXRhOwotCWNwdW1hc2tfdCBjcHVtYXNrOwotI2VuZGlmCiAJaW50IG51bV90eF9xdWV1ZXM7CiAJaW50IG51bV9yeF9xdWV1ZXM7CiAKQEAgLTM1NiwxMCArMzI4LDM3IEBACiAJc3RydWN0IGUxMDAwX3J4X3JpbmcgdGVzdF9yeF9yaW5nOwogCiAKLQl1MzIgKmNvbmZpZ19zcGFjZTsKKwl1aW50MzJfdCAqY29uZmlnX3NwYWNlOwogCWludCBtc2dfZW5hYmxlOwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAJYm9vbGVhbl90IGhhdmVfbXNpOwogI2VuZGlmCisJLyogdG8gbm90IG1lc3MgdXAgY2FjaGUgYWxpZ25tZW50LCBhbHdheXMgYWRkIHRvIHRoZSBib3R0b20gKi8KKwlib29sZWFuX3QgdHhiMmI7CisjaWZkZWYgTkVUSUZfRl9UU08KKwlib29sZWFuX3QgdHNvX2ZvcmNlOworI2VuZGlmCiB9OworCisKKy8qICBlMTAwMF9tYWluLmMgICovCitleHRlcm4gY2hhciBlMTAwMF9kcml2ZXJfbmFtZVtdOworZXh0ZXJuIGNoYXIgZTEwMDBfZHJpdmVyX3ZlcnNpb25bXTsKK2ludCBlMTAwMF91cChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBlMTAwMF9yZXNldChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZTEwMDBfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGUxMDAwX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZTEwMDBfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGUxMDAwX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGUxMDAwX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50MTZfdCBzcGRkcGx4KTsKKworLyogIGUxMDAwX2V0aHRvb2wuYyAgKi8KK3ZvaWQgZTEwMDBfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCisvKiAgZTEwMDBfcGFyYW0uYyAgKi8KK3ZvaWQgZTEwMDBfY2hlY2tfb3B0aW9ucyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CisKKwogI2VuZGlmIC8qIF9FMTAwMF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IDVjZWRjODEuLmVjY2NjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTMyLDE5ICszMiw2IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1leHRlcm4gY2hhciBlMTAwMF9kcml2ZXJfbmFtZVtdOwotZXh0ZXJuIGNoYXIgZTEwMDBfZHJpdmVyX3ZlcnNpb25bXTsKLQotZXh0ZXJuIGludCBlMTAwMF91cChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gdm9pZCBlMTAwMF9kb3duKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiB2b2lkIGUxMDAwX3Jlc2V0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiBpbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1aW50MTZfdCBzcGRkcGx4KTsKLWV4dGVybiBpbnQgZTEwMDBfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gaW50IGUxMDAwX3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIHZvaWQgZTEwMDBfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiB2b2lkIGUxMDAwX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gdm9pZCBlMTAwMF91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotCiBzdHJ1Y3QgZTEwMDBfc3RhdHMgewogCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKIAlpbnQgc2l6ZW9mX3N0YXQ7CkBAIC02MCw3ICs0Nyw2IEBACiAJeyAidHhfYnl0ZXMiLCBFMTAwMF9TVEFUKG5ldF9zdGF0cy50eF9ieXRlcykgfSwKIAl7ICJyeF9lcnJvcnMiLCBFMTAwMF9TVEFUKG5ldF9zdGF0cy5yeF9lcnJvcnMpIH0sCiAJeyAidHhfZXJyb3JzIiwgRTEwMDBfU1RBVChuZXRfc3RhdHMudHhfZXJyb3JzKSB9LAotCXsgInJ4X2Ryb3BwZWQiLCBFMTAwMF9TVEFUKG5ldF9zdGF0cy5yeF9kcm9wcGVkKSB9LAogCXsgInR4X2Ryb3BwZWQiLCBFMTAwMF9TVEFUKG5ldF9zdGF0cy50eF9kcm9wcGVkKSB9LAogCXsgIm11bHRpY2FzdCIsIEUxMDAwX1NUQVQobmV0X3N0YXRzLm11bHRpY2FzdCkgfSwKIAl7ICJjb2xsaXNpb25zIiwgRTEwMDBfU1RBVChuZXRfc3RhdHMuY29sbGlzaW9ucykgfSwKQEAgLTY4LDcgKzU0LDYgQEAKIAl7ICJyeF9vdmVyX2Vycm9ycyIsIEUxMDAwX1NUQVQobmV0X3N0YXRzLnJ4X292ZXJfZXJyb3JzKSB9LAogCXsgInJ4X2NyY19lcnJvcnMiLCBFMTAwMF9TVEFUKG5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzKSB9LAogCXsgInJ4X2ZyYW1lX2Vycm9ycyIsIEUxMDAwX1NUQVQobmV0X3N0YXRzLnJ4X2ZyYW1lX2Vycm9ycykgfSwKLQl7ICJyeF9maWZvX2Vycm9ycyIsIEUxMDAwX1NUQVQobmV0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzKSB9LAogCXsgInJ4X25vX2J1ZmZlcl9jb3VudCIsIEUxMDAwX1NUQVQoc3RhdHMucm5iYykgfSwKIAl7ICJyeF9taXNzZWRfZXJyb3JzIiwgRTEwMDBfU1RBVChuZXRfc3RhdHMucnhfbWlzc2VkX2Vycm9ycykgfSwKIAl7ICJ0eF9hYm9ydGVkX2Vycm9ycyIsIEUxMDAwX1NUQVQobmV0X3N0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKSB9LApAQCAtOTcsMTQgKzgyLDcgQEAKIAl7ICJhbGxvY19yeF9idWZmX2ZhaWxlZCIsIEUxMDAwX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpIH0sCiB9OwogCi0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi0jZGVmaW5lIEUxMDAwX1FVRVVFX1NUQVRTX0xFTiBcCi0JKCgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKiluZXRkZXYtPnByaXYpLT5udW1fdHhfcXVldWVzICsgXAotCSAoKHN0cnVjdCBlMTAwMF9hZGFwdGVyICopbmV0ZGV2LT5wcml2KS0+bnVtX3J4X3F1ZXVlcykgXAotCSogKHNpemVvZihzdHJ1Y3QgZTEwMDBfcXVldWVfc3RhdHMpIC8gc2l6ZW9mKHVpbnQ2NF90KSkKLSNlbHNlCiAjZGVmaW5lIEUxMDAwX1FVRVVFX1NUQVRTX0xFTiAwCi0jZW5kaWYKICNkZWZpbmUgRTEwMDBfR0xPQkFMX1NUQVRTX0xFTglcCiAJc2l6ZW9mKGUxMDAwX2dzdHJpbmdzX3N0YXRzKSAvIHNpemVvZihzdHJ1Y3QgZTEwMDBfc3RhdHMpCiAjZGVmaW5lIEUxMDAwX1NUQVRTX0xFTiAoRTEwMDBfR0xPQkFMX1NUQVRTX0xFTiArIEUxMDAwX1FVRVVFX1NUQVRTX0xFTikKQEAgLTM0Niw2ICszMjQsOSBAQAogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCWVsc2UKIAkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087CisKKwlEUFJJTlRLKFBST0JFLCBJTkZPLCAiVFNPIGlzICVzXG4iLCBkYXRhID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CisJYWRhcHRlci0+dHNvX2ZvcmNlID0gVFJVRTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBORVRJRl9GX1RTTyAqLwpAQCAtNTk0LDYgKzU3NSw3IEBACiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgogCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKIAkJc3ByaW50ZihmaXJtd2FyZV92ZXJzaW9uLCAiJWQuJWQtJWQiLAogCQkJKGVlcHJvbV9kYXRhICYgMHhGMDAwKSA+PiAxMiwKIAkJCShlZXByb21fZGF0YSAmIDB4MEZGMCkgPj4gNCwKQEAgLTY0Miw2ICs2MjQsOSBAQAogCXN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeGRyLCAqcnhfb2xkLCAqcnhfbmV3OwogCWludCBpLCBlcnIsIHR4X3Jpbmdfc2l6ZSwgcnhfcmluZ19zaXplOwogCisJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAl0eF9yaW5nX3NpemUgPSBzaXplb2Yoc3RydWN0IGUxMDAwX3R4X3JpbmcpICogYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKIAlyeF9yaW5nX3NpemUgPSBzaXplb2Yoc3RydWN0IGUxMDAwX3J4X3JpbmcpICogYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKIApAQCAtNjY5LDkgKzY1NCw2IEBACiAJdHhkciA9IGFkYXB0ZXItPnR4X3Jpbmc7CiAJcnhkciA9IGFkYXB0ZXItPnJ4X3Jpbmc7CiAKLQlpZiAoKHJpbmctPnJ4X21pbmlfcGVuZGluZykgfHwgKHJpbmctPnJ4X2p1bWJvX3BlbmRpbmcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXJ4ZHItPmNvdW50ID0gbWF4KHJpbmctPnJ4X3BlbmRpbmcsKHVpbnQzMl90KUUxMDAwX01JTl9SWEQpOwogCXJ4ZHItPmNvdW50ID0gbWluKHJ4ZHItPmNvdW50LCh1aW50MzJfdCkobWFjX3R5cGUgPCBlMTAwMF84MjU0NCA/CiAJCUUxMDAwX01BWF9SWEQgOiBFMTAwMF9NQVhfODI1NDRfUlhEKSk7CkBAIC03NjcsNiArNzQ5LDcgQEAKIAkvKiB0aGVyZSBhcmUgc2V2ZXJhbCBiaXRzIG9uIG5ld2VyIGhhcmR3YXJlIHRoYXQgYXJlIHIvdyAqLwogCWNhc2UgZTEwMDBfODI1NzE6CiAJY2FzZSBlMTAwMF84MjU3MjoKKwljYXNlIGUxMDAwXzgwMDAzZXMybGFuOgogCQl0b2dnbGUgPSAweDdGRkZGM0ZGOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTczOgpAQCAtMTI1Niw2ICsxMjM5LDEwIEBACiAJCWUxMDAwX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LCBQSFlfQ1RSTCwgMHg5MTQwKTsKIAkJLyogYXV0b25lZyBvZmYgKi8KIAkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV9DVFJMLCAweDgxNDApOworCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcucGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpIHsKKwkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsCisJCSAgICAgICAgICAgICAgICAgICAgR0c4MjU2M19QSFlfS01STl9NT0RFX0NUUkwsCisJCSAgICAgICAgICAgICAgICAgICAgMHgxQ0UpOwogCX0KIAkvKiBmb3JjZSAxMDAwLCBzZXQgbG9vcGJhY2sgKi8KIAllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZX0NUUkwsIDB4NDE0MCk7CkBAIC0xMzI1LDYgKzEzMTIsNyBAQAogCWNhc2UgZTEwMDBfODI1NzE6CiAJY2FzZSBlMTAwMF84MjU3MjoKIAljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAJCXJldHVybiBlMTAwMF9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjayhhZGFwdGVyKTsKIAkJYnJlYWs7CiAKQEAgLTE0MDUsNiArMTM5MywxMSBAQAogCWNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CiAJZGVmYXVsdDoKIAkJaHctPmF1dG9uZWcgPSBUUlVFOworCQlpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKSB7CisJCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LAorCQkJCQkgICAgR0c4MjU2M19QSFlfS01STl9NT0RFX0NUUkwsCisJCQkJCSAgICAweDE4MCk7CisJCX0KIAkJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgJnBoeV9yZWcpOwogCQlpZiAocGh5X3JlZyAmIE1JSV9DUl9MT09QQkFDSykgewogCQkJcGh5X3JlZyAmPSB+TUlJX0NSX0xPT1BCQUNLOwpAQCAtMTY0MCwxMCArMTYzMywyNiBAQAogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2RUJfUVVBRF9DT1BQRVI6CiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NDVFTV9GSUJFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0NUVNX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1FVQURfQ09QUEVSOgogCQl3b2wtPnN1cHBvcnRlZCA9IDA7CiAJCXdvbC0+d29sb3B0cyAgID0gMDsKIAkJcmV0dXJuOwogCisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzOgorCQkvKiBkZXZpY2UgaWQgMTBCNSBwb3J0LUEgc3VwcG9ydHMgd29sICovCisJCWlmICghYWRhcHRlci0+a3NwM19wb3J0X2EpIHsKKwkJCXdvbC0+c3VwcG9ydGVkID0gMDsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBLU1AzIGRvZXMgbm90IHN1cHBwb3J0IFVDQVNUIHdha2UtdXBzIGZvciBhbnkgaW50ZXJmYWNlICovCisJCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQ0FTVCB8IFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDOworCisJCWlmIChhZGFwdGVyLT53b2wgJiBFMTAwMF9XVUZDX0VYKQorCQkJRFBSSU5USyhEUlYsIEVSUiwgIkludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0ICIKKwkJICAgICAgICAiZGlyZWN0ZWQgKHVuaWNhc3QpIGZyYW1lIHdha2UtdXAgcGFja2V0c1xuIik7CisJCXdvbC0+d29sb3B0cyA9IDA7CisJCWdvdG8gZG9fZGVmYXVsdHM7CisKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfRklCRVI6CiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUjoKQEAgLTE2NTgsOCArMTY2Nyw5IEBACiAJZGVmYXVsdDoKIAkJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX1VDQVNUIHwgV0FLRV9NQ0FTVCB8CiAJCQkJIFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDOwotCiAJCXdvbC0+d29sb3B0cyA9IDA7CisKK2RvX2RlZmF1bHRzOgogCQlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19FWCkKIAkJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1VDQVNUOwogCQlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19NQykKQEAgLTE2ODQsMTAgKzE2OTQsMjIgQEAKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0M0dDX0NPUFBFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0NEVJX0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2RUJfUVVBRF9DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0NUVNX0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ1RU1fQ09QUEVSOgogCQlyZXR1cm4gd29sLT53b2xvcHRzID8gLUVPUE5PVFNVUFAgOiAwOwogCisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzOgorCQkvKiBkZXZpY2UgaWQgMTBCNSBwb3J0LUEgc3VwcG9ydHMgd29sICovCisJCWlmICghYWRhcHRlci0+a3NwM19wb3J0X2EpCisJCQlyZXR1cm4gd29sLT53b2xvcHRzID8gLUVPUE5PVFNVUFAgOiAwOworCisJCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1VDQVNUKSB7CisJCQlEUFJJTlRLKERSViwgRVJSLCAiSW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgIgorCQkgICAgICAgICJkaXJlY3RlZCAodW5pY2FzdCkgZnJhbWUgd2FrZS11cCBwYWNrZXRzXG4iKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZFQl9GSUJFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfRklCRVI6CkBAIC0xNzk5LDExICsxODIxLDYgQEAKIAkJc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1aW50NjRfdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi0JdWludDY0X3QgKnF1ZXVlX3N0YXQ7Ci0JaW50IHN0YXRfY291bnQgPSBzaXplb2Yoc3RydWN0IGUxMDAwX3F1ZXVlX3N0YXRzKSAvIHNpemVvZih1aW50NjRfdCk7Ci0JaW50IGosIGs7Ci0jZW5kaWYKIAlpbnQgaTsKIAogCWUxMDAwX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKQEAgLTE4MTIsMjkgKzE4MjksMTIgQEAKIAkJZGF0YVtpXSA9IChlMTAwMF9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQogCQkJc2l6ZW9mKHVpbnQ2NF90KSkgPyAqKHVpbnQ2NF90ICopcCA6ICoodWludDMyX3QgKilwOwogCX0KLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaisrKSB7Ci0JCXF1ZXVlX3N0YXQgPSAodWludDY0X3QgKikmYWRhcHRlci0+dHhfcmluZ1tqXS50eF9zdGF0czsKLQkJZm9yIChrID0gMDsgayA8IHN0YXRfY291bnQ7IGsrKykKLQkJCWRhdGFbaSArIGtdID0gcXVldWVfc3RhdFtrXTsKLQkJaSArPSBrOwotCX0KLQlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaisrKSB7Ci0JCXF1ZXVlX3N0YXQgPSAodWludDY0X3QgKikmYWRhcHRlci0+cnhfcmluZ1tqXS5yeF9zdGF0czsKLQkJZm9yIChrID0gMDsgayA8IHN0YXRfY291bnQ7IGsrKykKLQkJCWRhdGFbaSArIGtdID0gcXVldWVfc3RhdFtrXTsKLQkJaSArPSBrOwotCX0KLSNlbmRpZgogLyoJQlVHX09OKGkgIT0gRTEwMDBfU1RBVFNfTEVOKTsgKi8KIH0KIAogc3RhdGljIHZvaWQKIGUxMDAwX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSkKIHsKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0jZW5kaWYKIAl1aW50OF90ICpwID0gZGF0YTsKIAlpbnQgaTsKIApAQCAtMTg0OSwyMCArMTg0OSw2IEBACiAJCQkgICAgICAgRVRIX0dTVFJJTkdfTEVOKTsKIAkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOwogCQl9Ci0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJCXNwcmludGYocCwgInR4X3F1ZXVlXyV1X3BhY2tldHMiLCBpKTsKLQkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOwotCQkJc3ByaW50ZihwLCAidHhfcXVldWVfJXVfYnl0ZXMiLCBpKTsKLQkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJCXNwcmludGYocCwgInJ4X3F1ZXVlXyV1X3BhY2tldHMiLCBpKTsKLQkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOwotCQkJc3ByaW50ZihwLCAicnhfcXVldWVfJXVfYnl0ZXMiLCBpKTsKLQkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOwotCQl9Ci0jZW5kaWYKIC8qCQlCVUdfT04ocCAtIGRhdGEgIT0gRTEwMDBfU1RBVFNfTEVOICogRVRIX0dTVFJJTkdfTEVOKTsgKi8KIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKaW5kZXggYmVlZWMwZi4uNTIzYzJjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCkBAIC0xMDAsNiArMTAwLDggQEAKIAogI2RlZmluZSBFMTAwMF9XUklURV9SRUdfSU8oYSwgcmVnLCB2YWwpIFwKIAkgICAgZTEwMDBfd3JpdGVfcmVnX2lvKChhKSwgRTEwMDBfIyNyZWcsIHZhbCkKK3N0YXRpYyBpbnQzMl90IGUxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMF8xMDAoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgaW50MzJfdCBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAogLyogSUdQIGNhYmxlIGxlbmd0aCB0YWJsZSAqLwogc3RhdGljIGNvbnN0CkBAIC0xNTMsNiArMTU1LDExIEBACiAgICAgICAgICAgICBody0+cGh5X3R5cGUgPSBlMTAwMF9waHlfaWdwOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICBjYXNlIEdHODI1NjNfRV9QSFlfSUQ6CisgICAgICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pIHsKKyAgICAgICAgICAgIGh3LT5waHlfdHlwZSA9IGUxMDAwX3BoeV9nZzgyNTYzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgLyogRmFsbCBUaHJvdWdoICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgLyogU2hvdWxkIG5ldmVyIGhhdmUgbG9hZGVkIG9uIHRoaXMgZGV2aWNlICovCkBAIC0zNTMsMTIgKzM2MCwxOSBAQAogICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTczTDoKICAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODI1NzM7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX0NPUFBFUl9EUFQ6CisgICAgY2FzZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fU0VSREVTX0RQVDoKKyAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODAwMDNlczJsYW47CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8qIFNob3VsZCBuZXZlciBoYXZlIGxvYWRlZCBvbiB0aGlzIGRldmljZSAqLwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9NQUNfVFlQRTsKICAgICB9CiAKICAgICBzd2l0Y2goaHctPm1hY190eXBlKSB7CisgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKKyAgICAgICAgaHctPnN3Zndfc3luY19wcmVzZW50ID0gVFJVRTsKKyAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCiAgICAgY2FzZSBlMTAwMF84MjU3MToKICAgICBjYXNlIGUxMDAwXzgyNTcyOgogICAgIGNhc2UgZTEwMDBfODI1NzM6CkBAIC0zOTksNiArNDEzLDcgQEAKICAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1NFUkRFUzoKICAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1NFUkRFUzoKICAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MkVJX1NFUkRFUzoKKyAgICBjYXNlIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfRFBUOgogICAgICAgICBody0+bWVkaWFfdHlwZSA9IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNTc1LDYgKzU5MCw3IEBACiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgY2FzZSBlMTAwMF84MjU3MToKICAgICAgICAgY2FzZSBlMTAwMF84MjU3MjoKKyAgICAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9nZXRfYXV0b19yZF9kb25lKGh3KTsKICAgICAgICAgICAgIGlmKHJldF92YWwpCiAgICAgICAgICAgICAgICAgLyogV2UgZG9uJ3Qgd2FudCB0byBjb250aW51ZSBhY2Nlc3NpbmcgTUFDIHJlZ2lzdGVycy4gKi8KQEAgLTY0MSw2ICs2NTcsNyBAQAogICAgIHVpbnQxNl90IGNtZF9tbXJiYzsKICAgICB1aW50MTZfdCBzdGF0X21tcmJjOwogICAgIHVpbnQzMl90IG10YV9zaXplOworICAgIHVpbnQzMl90IHJlZ19kYXRhOwogICAgIHVpbnQzMl90IGN0cmxfZXh0OwogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9pbml0X2h3Iik7CkBAIC03MzksNiArNzU2LDcgQEAKICAgICAgICAgY2FzZSBlMTAwMF84MjU3MToKICAgICAgICAgY2FzZSBlMTAwMF84MjU3MjoKICAgICAgICAgY2FzZSBlMTAwMF84MjU3MzoKKyAgICAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICAgICAgICAgIGN0cmwgfD0gRTEwMDBfVFhEQ1RMX0NPVU5UX0RFU0M7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzUyLDEyICs3NzAsMzQgQEAKICAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgZTEwMDBfODAwMDNlczJsYW46CisgICAgICAgIC8qIEVuYWJsZSByZXRyYW5zbWl0IG9uIGxhdGUgY29sbGlzaW9ucyAqLworICAgICAgICByZWdfZGF0YSA9IEUxMDAwX1JFQURfUkVHKGh3LCBUQ1RMKTsKKyAgICAgICAgcmVnX2RhdGEgfD0gRTEwMDBfVENUTF9SVExDOworICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRDVEwsIHJlZ19kYXRhKTsKKworICAgICAgICAvKiBDb25maWd1cmUgR2lnYWJpdCBDYXJyeSBFeHRlbmQgUGFkZGluZyAqLworICAgICAgICByZWdfZGF0YSA9IEUxMDAwX1JFQURfUkVHKGh3LCBUQ1RMX0VYVCk7CisgICAgICAgIHJlZ19kYXRhICY9IH5FMTAwMF9UQ1RMX0VYVF9HQ0VYX01BU0s7CisgICAgICAgIHJlZ19kYXRhIHw9IERFRkFVTFRfODAwMDNFUzJMQU5fVENUTF9FWFRfR0NFWDsKKyAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBUQ1RMX0VYVCwgcmVnX2RhdGEpOworCisgICAgICAgIC8qIENvbmZpZ3VyZSBUcmFuc21pdCBJbnRlci1QYWNrZXQgR2FwICovCisgICAgICAgIHJlZ19kYXRhID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRJUEcpOworICAgICAgICByZWdfZGF0YSAmPSB+RTEwMDBfVElQR19JUEdUX01BU0s7CisgICAgICAgIHJlZ19kYXRhIHw9IERFRkFVTFRfODAwMDNFUzJMQU5fVElQR19JUEdUXzEwMDA7CisgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVElQRywgcmVnX2RhdGEpOworCisgICAgICAgIHJlZ19kYXRhID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIEZGTFQsIDB4MDAwMSk7CisgICAgICAgIHJlZ19kYXRhICY9IH4weDAwMTAwMDAwOworICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEZGTFQsIDB4MDAwMSwgcmVnX2RhdGEpOworICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KICAgICBjYXNlIGUxMDAwXzgyNTcxOgogICAgIGNhc2UgZTEwMDBfODI1NzI6CiAgICAgICAgIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgVFhEQ1RMMSk7Ci0gICAgICAgIGN0cmwgJj0gfkUxMDAwX1RYRENUTF9XVEhSRVNIOwotICAgICAgICBjdHJsIHw9IEUxMDAwX1RYRENUTF9DT1VOVF9ERVNDIHwgRTEwMDBfVFhEQ1RMX0ZVTExfVFhfREVTQ19XQjsKLSAgICAgICAgY3RybCB8PSAoMSA8PCAyMik7CisgICAgICAgIGN0cmwgPSAoY3RybCAmIH5FMTAwMF9UWERDVExfV1RIUkVTSCkgfCBFMTAwMF9UWERDVExfRlVMTF9UWF9ERVNDX1dCOworICAgICAgICBpZihody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpCisgICAgICAgICAgICBjdHJsIHw9IEUxMDAwX1RYRENUTF9DT1VOVF9ERVNDOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYRENUTDEsIGN0cmwpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC05MDYsNyArOTQ2LDEzIEBACiAgICAgICogc2lnbmFsIGRldGVjdGlvbi4gIFNvIHRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGUxMDAwX3NldHVwX3Bjc19saW5rKCkKICAgICAgKiBvciBlMTAwMF9waHlfc2V0dXAoKSBpcyBjYWxsZWQuCiAgICAgICovCi0gICAgaWYoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQzKSB7CisgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MykgeworCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9lZXByb20oaHcsIEVFUFJPTV9JTklUX0NPTlRST0wyX1JFRywKKwkJCQkJCQkJCTEsICZlZXByb21fZGF0YSk7CisJCWlmIChyZXRfdmFsKSB7CisJCQlERUJVR09VVCgiRUVQUk9NIFJlYWQgRXJyb3JcbiIpOworCQkJcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOworCQl9CiAgICAgICAgIGN0cmxfZXh0ID0gKChlZXByb21fZGF0YSAmIEVFUFJPTV9XT1JEMEZfU1dQRElPX0VYVCkgPDwKICAgICAgICAgICAgICAgICAgICAgU1dEUElPX19FWFRfU0hJRlQpOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkxfRVhULCBjdHJsX2V4dCk7CkBAIC0xMzA4LDYgKzEzNTQsMTU0IEBACiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3BwZXIgbGluayBzZXR1cCBmb3IgZTEwMDBfcGh5X2dnODI1NjMgc2VyaWVzLgorKgorKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludDMyX3QKK2UxMDAwX2NvcHBlcl9saW5rX2dncF9zZXR1cChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworICAgIGludDMyX3QgcmV0X3ZhbDsKKyAgICB1aW50MTZfdCBwaHlfZGF0YTsKKyAgICB1aW50MzJfdCByZWdfZGF0YTsKKworICAgIERFQlVHRlVOQygiZTEwMDBfY29wcGVyX2xpbmtfZ2dwX3NldHVwIik7CisKKyAgICBpZighaHctPnBoeV9yZXNldF9kaXNhYmxlKSB7CisgICAgICAgIAorICAgICAgICAvKiBFbmFibGUgQ1JTIG9uIFRYIGZvciBoYWxmLWR1cGxleCBvcGVyYXRpb24uICovCisgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX01BQ19TUEVDX0NUUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKKyAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIHJldHVybiByZXRfdmFsOworCisgICAgICAgIHBoeV9kYXRhIHw9IEdHODI1NjNfTVNDUl9BU1NFUlRfQ1JTX09OX1RYOworICAgICAgICAvKiBVc2UgMjVNSHogZm9yIGJvdGggbGluayBkb3duIGFuZCAxMDAwQkFTRS1UIGZvciBUeCBjbG9jayAqLworICAgICAgICBwaHlfZGF0YSB8PSBHRzgyNTYzX01TQ1JfVFhfQ0xLXzEwMDBNQlBTXzI1TUhaOworCisgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9NQUNfU1BFQ19DVFJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlfZGF0YSk7CisgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKKworICAgICAgICAvKiBPcHRpb25zOgorICAgICAgICAgKiAgIE1ESS9NREktWCA9IDAgKGRlZmF1bHQpCisgICAgICAgICAqICAgMCAtIEF1dG8gZm9yIGFsbCBzcGVlZHMKKyAgICAgICAgICogICAxIC0gTURJIG1vZGUKKyAgICAgICAgICogICAyIC0gTURJLVggbW9kZQorICAgICAgICAgKiAgIDMgLSBBdXRvIGZvciAxMDAwQmFzZS1UIG9ubHkgKE1ESS1YIGZvciAxMC8xMDBCYXNlLVQgbW9kZXMpCisgICAgICAgICAqLworICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7CisgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKKworICAgICAgICBwaHlfZGF0YSAmPSB+R0c4MjU2M19QU0NSX0NST1NTT1ZFUl9NT0RFX01BU0s7CisKKyAgICAgICAgc3dpdGNoIChody0+bWRpeCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBwaHlfZGF0YSB8PSBHRzgyNTYzX1BTQ1JfQ1JPU1NPVkVSX01PREVfTURJOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHBoeV9kYXRhIHw9IEdHODI1NjNfUFNDUl9DUk9TU09WRVJfTU9ERV9NRElYOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHBoeV9kYXRhIHw9IEdHODI1NjNfUFNDUl9DUk9TU09WRVJfTU9ERV9BVVRPOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBPcHRpb25zOgorICAgICAgICAgKiAgIGRpc2FibGVfcG9sYXJpdHlfY29ycmVjdGlvbiA9IDAgKGRlZmF1bHQpCisgICAgICAgICAqICAgICAgIEF1dG9tYXRpYyBDb3JyZWN0aW9uIGZvciBSZXZlcnNlZCBDYWJsZSBQb2xhcml0eQorICAgICAgICAgKiAgIDAgLSBEaXNhYmxlZAorICAgICAgICAgKiAgIDEgLSBFbmFibGVkCisgICAgICAgICAqLworICAgICAgICBwaHlfZGF0YSAmPSB+R0c4MjU2M19QU0NSX1BPTEFSSVRZX1JFVkVSU0FMX0RJU0FCTEU7CisgICAgICAgIGlmKGh3LT5kaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb24gPT0gMSkKKyAgICAgICAgICAgIHBoeV9kYXRhIHw9IEdHODI1NjNfUFNDUl9QT0xBUklUWV9SRVZFUlNBTF9ESVNBQkxFOworICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgR0c4MjU2M19QSFlfU1BFQ19DVFJMLCBwaHlfZGF0YSk7CisKKyAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIHJldHVybiByZXRfdmFsOworCisgICAgICAgIC8qIFNXIFJlc2V0IHRoZSBQSFkgc28gYWxsIGNoYW5nZXMgdGFrZSBlZmZlY3QgKi8KKyAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3BoeV9yZXNldChodyk7CisgICAgICAgIGlmIChyZXRfdmFsKSB7CisgICAgICAgICAgICBERUJVR09VVCgiRXJyb3IgUmVzZXR0aW5nIHRoZSBQSFlcbiIpOworICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgICAgIH0KKyAgICB9IC8qIHBoeV9yZXNldF9kaXNhYmxlICovCisKKyAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSB7CisgICAgICAgIC8qIEJ5cGFzcyBSWCBhbmQgVFggRklGTydzICovCisgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9rbXJuX3JlZyhodywgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfRklGT19DVFJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfS1VNQ1RSTFNUQV9GSUZPX0NUUkxfUlhfQllQQVNTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0tVTUNUUkxTVEFfRklGT19DVFJMX1RYX0JZUEFTUyk7CisgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisKKyAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgR0c4MjU2M19QSFlfU1BFQ19DVFJMXzIsICZwaHlfZGF0YSk7CisgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisKKyAgICAgICAgcGh5X2RhdGEgJj0gfkdHODI1NjNfUFNDUjJfUkVWRVJTRV9BVVRPX05FRzsKKyAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX1NQRUNfQ1RSTF8yLCBwaHlfZGF0YSk7CisKKyAgICAgICAgaWYgKHJldF92YWwpCisgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKKworICAgICAgICByZWdfZGF0YSA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMX0VYVCk7CisgICAgICAgIHJlZ19kYXRhICY9IH4oRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0spOworICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkxfRVhULCByZWdfZGF0YSk7CisKKyAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgR0c4MjU2M19QSFlfUFdSX01HTVRfQ1RSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7CisgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisKKyAgICAgICAgLyogRG8gbm90IGluaXQgdGhlc2UgcmVnaXN0ZXJzIHdoZW4gdGhlIEhXIGlzIGluIElBTVQgbW9kZSwgc2luY2UgdGhlCisgICAgICAgICAqIGZpcm13YXJlIHdpbGwgaGF2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoZW0uICBXZSBvbmx5IGluaXRpYWxpemUKKyAgICAgICAgICogdGhlbSBpZiB0aGUgSFcgaXMgbm90IGluIElBTVQgbW9kZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChlMTAwMF9jaGVja19tbmdfbW9kZShodykgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIC8qIEVuYWJsZSBFbGVjdHJpY2FsIElkbGUgb24gdGhlIFBIWSAqLworICAgICAgICAgICAgcGh5X2RhdGEgfD0gR0c4MjU2M19QTUNSX0VOQUJMRV9FTEVDVFJJQ0FMX0lETEU7CisgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgR0c4MjU2M19QSFlfUFdSX01HTVRfQ1RSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOworCisgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9LTVJOX01PREVfQ1RSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOworCisgICAgICAgICAgICAvKiBFbmFibGUgUGFzcyBGYWxzZSBDYXJyaWVyIG9uIHRoZSBQSFkgKi8KKyAgICAgICAgICAgIHBoeV9kYXRhIHw9IEdHODI1NjNfS01DUl9QQVNTX0ZBTFNFX0NBUlJJRVI7CisKKyAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9LTVJOX01PREVfQ1RSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOworICAgICAgICB9CisKKyAgICAgICAgLyogV29ya2Fyb3VuZDogRGlzYWJsZSBwYWRkaW5nIGluIEt1bWVyYW4gaW50ZXJmYWNlIGluIHRoZSBNQUMKKyAgICAgICAgICogYW5kIGluIHRoZSBQSFkgdG8gYXZvaWQgQ1JDIGVycm9ycy4KKyAgICAgICAgICovCisgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX0lOQkFORF9DVFJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7CisgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgICAgIHBoeV9kYXRhIHw9IEdHODI1NjNfSUNSX0RJU19QQURESU5HOworICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgR0c4MjU2M19QSFlfSU5CQU5EX0NUUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKKyAgICAgICAgaWYgKHJldF92YWwpCisgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHBlciBsaW5rIHNldHVwIGZvciBlMTAwMF9waHlfbTg4IHNlcmllcy4KQEAgLTE1MTgsNiArMTcxMiw3IEBACiAgICAgaW50MzJfdCByZXRfdmFsOwogICAgIHVpbnQxNl90IGk7CiAgICAgdWludDE2X3QgcGh5X2RhdGE7CisgICAgdWludDE2X3QgcmVnX2RhdGE7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3NldHVwX2NvcHBlcl9saW5rIik7CiAKQEAgLTE1MjYsNiArMTcyMSwyMiBAQAogICAgIGlmKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCisgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKKyAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgorICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9rbXJuX3JlZyhodywgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfSU5CX0NUUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWdfZGF0YSk7CisgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgICAgIHJlZ19kYXRhIHw9IEUxMDAwX0tVTUNUUkxTVEFfSU5CX0NUUkxfRElTX1BBRERJTkc7CisgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9rbXJuX3JlZyhodywgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfSU5CX0NUUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSk7CisgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fAogICAgICAgICBody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncF8yKSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9jb3BwZXJfbGlua19pZ3Bfc2V0dXAoaHcpOwpAQCAtMTUzNSw2ICsxNzQ2LDEwIEBACiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9jb3BwZXJfbGlua19tZ3Bfc2V0dXAoaHcpOwogICAgICAgICBpZihyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgfSBlbHNlIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpIHsKKyAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2NvcHBlcl9saW5rX2dncF9zZXR1cChodyk7CisgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICB9CiAKICAgICBpZihody0+YXV0b25lZykgewpAQCAtMTU4Miw2ICsxNzk3LDU5IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29uZmlndXJlIHRoZSBNQUMtdG8tUEhZIGludGVyZmFjZSBmb3IgMTAvMTAwTWJwcworKgorKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludDMyX3QKK2UxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMF8xMDAoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKyAgICBpbnQzMl90IHJldF92YWwgPSBFMTAwMF9TVUNDRVNTOworICAgIHVpbnQzMl90IHRpcGc7CisgICAgdWludDE2X3QgcmVnX2RhdGE7CisKKyAgICBERUJVR0ZVTkMoImUxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMF8xMDAiKTsKKworICAgIHJlZ19kYXRhID0gRTEwMDBfS1VNQ1RSTFNUQV9IRF9DVFJMXzEwXzEwMF9ERUZBVUxUOworICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9rbXJuX3JlZyhodywgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfSERfQ1RSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEpOworICAgIGlmIChyZXRfdmFsKQorICAgICAgICByZXR1cm4gcmV0X3ZhbDsKKworICAgIC8qIENvbmZpZ3VyZSBUcmFuc21pdCBJbnRlci1QYWNrZXQgR2FwICovCisgICAgdGlwZyA9IEUxMDAwX1JFQURfUkVHKGh3LCBUSVBHKTsKKyAgICB0aXBnICY9IH5FMTAwMF9USVBHX0lQR1RfTUFTSzsKKyAgICB0aXBnIHw9IERFRkFVTFRfODAwMDNFUzJMQU5fVElQR19JUEdUXzEwXzEwMDsKKyAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRJUEcsIHRpcGcpOworCisgICAgcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQzMl90CitlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworICAgIGludDMyX3QgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7CisgICAgdWludDE2X3QgcmVnX2RhdGE7CisgICAgdWludDMyX3QgdGlwZzsKKworICAgIERFQlVHRlVOQygiZTEwMDBfY29uZmlndXJlX2ttcm5fZm9yXzEwMDAiKTsKKworICAgIHJlZ19kYXRhID0gRTEwMDBfS1VNQ1RSTFNUQV9IRF9DVFJMXzEwMDBfREVGQVVMVDsKKyAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfa21ybl9yZWcoaHcsIEUxMDAwX0tVTUNUUkxTVEFfT0ZGU0VUX0hEX0NUUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhKTsKKyAgICBpZiAocmV0X3ZhbCkKKyAgICAgICAgcmV0dXJuIHJldF92YWw7CisKKyAgICAvKiBDb25maWd1cmUgVHJhbnNtaXQgSW50ZXItUGFja2V0IEdhcCAqLworICAgIHRpcGcgPSBFMTAwMF9SRUFEX1JFRyhodywgVElQRyk7CisgICAgdGlwZyAmPSB+RTEwMDBfVElQR19JUEdUX01BU0s7CisgICAgdGlwZyB8PSBERUZBVUxUXzgwMDAzRVMyTEFOX1RJUEdfSVBHVF8xMDAwOworICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVElQRywgdGlwZyk7CisKKyAgICByZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBDb25maWd1cmVzIFBIWSBhdXRvbmVnIGFuZCBmbG93IGNvbnRyb2wgYWR2ZXJ0aXNlbWVudCBzZXR0aW5ncwogKgogKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQpAQCAtMTgwMiw3ICsyMDcwLDggQEAKICAgICAvKiBXcml0ZSB0aGUgY29uZmlndXJlZCB2YWx1ZXMgYmFjayB0byB0aGUgRGV2aWNlIENvbnRyb2wgUmVnLiAqLwogICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgY3RybCk7CiAKLSAgICBpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpIHsKKyAgICBpZiAoKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfbTg4KSB8fAorICAgICAgICAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogICAgICAgICBpZihyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CkBAIC0xODcxLDcgKzIxNDAsOCBAQAogICAgICAgICAgICAgbXNlY19kZWxheSgxMDApOwogICAgICAgICB9CiAgICAgICAgIGlmKChpID09IDApICYmCi0gICAgICAgICAgIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X204OCkpIHsKKyAgICAgICAgICAgKChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X204OCkgfHwKKyAgICAgICAgICAgIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpKSkgewogICAgICAgICAgICAgLyogV2UgZGlkbid0IGdldCBsaW5rLiAgUmVzZXQgdGhlIERTUCBhbmQgd2FpdCBhZ2FpbiBmb3IgbGluay4gKi8KICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9waHlfcmVzZXRfZHNwKGh3KTsKICAgICAgICAgICAgIGlmKHJldF92YWwpIHsKQEAgLTE5MzAsNiArMjIwMCwyNyBAQAogICAgICAgICAgICAgaWYocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKSB7CisgICAgICAgIC8qIFRoZSBUWF9DTEsgb2YgdGhlIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyIGRlZmF1bHRzCisgICAgICAgICAqIHRvIDIuNU1IeiBvbiBhIHJlc2V0LiAgV2UgbmVlZCB0byByZS1mb3JjZSBpdCBiYWNrIHRvIDI1TUh6LCBpZgorICAgICAgICAgKiB3ZSdyZSBub3QgaW4gYSBmb3JjZWQgMTAvZHVwbGV4IGNvbmZpZ3VyYXRpb24uICovCisgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX01BQ19TUEVDX0NUUkwsICZwaHlfZGF0YSk7CisgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisKKyAgICAgICAgcGh5X2RhdGEgJj0gfkdHODI1NjNfTVNDUl9UWF9DTEtfTUFTSzsKKyAgICAgICAgaWYgKChody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9PSBlMTAwMF8xMF9mdWxsKSB8fAorICAgICAgICAgICAgKGh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID09IGUxMDAwXzEwX2hhbGYpKQorICAgICAgICAgICAgcGh5X2RhdGEgfD0gR0c4MjU2M19NU0NSX1RYX0NMS18xME1CUFNfMl81TUhaOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwaHlfZGF0YSB8PSBHRzgyNTYzX01TQ1JfVFhfQ0xLXzEwME1CUFNfMjVNSFo7CisKKyAgICAgICAgLyogQWxzbyBkdWUgdG8gdGhlIHJlc2V0LCB3ZSBuZWVkIHRvIGVuYWJsZSBDUlMgb24gVHguICovCisgICAgICAgIHBoeV9kYXRhIHw9IEdHODI1NjNfTVNDUl9BU1NFUlRfQ1JTX09OX1RYOworCisgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9NQUNfU1BFQ19DVFJMLCBwaHlfZGF0YSk7CisgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQpAQCAtMjU5Miw2ICsyODgzLDE2IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikgJiYgCisgICAgICAgIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikpIHsKKyAgICAgICAgaWYgKCpzcGVlZCA9PSBTUEVFRF8xMDAwKQorICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMDAwKGh3KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2NvbmZpZ3VyZV9rbXJuX2Zvcl8xMF8xMDAoaHcpOworICAgICAgICBpZiAocmV0X3ZhbCkKKyAgICAgICAgICAgIHJldHVybiByZXRfdmFsOworICAgIH0KKwogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCkBAIC0yNzY3LDYgKzMwNjgsNzIgQEAKICAgICByZXR1cm4gZGF0YTsKIH0KIAoraW50MzJfdAorZTEwMDBfc3dmd19zeW5jX2FjcXVpcmUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3QgbWFzaykKK3sKKyAgICB1aW50MzJfdCBzd2Z3X3N5bmMgPSAwOworICAgIHVpbnQzMl90IHN3bWFzayA9IG1hc2s7CisgICAgdWludDMyX3QgZndtYXNrID0gbWFzayA8PCAxNjsKKyAgICBpbnQzMl90IHRpbWVvdXQgPSAyMDA7CisKKyAgICBERUJVR0ZVTkMoImUxMDAwX3N3Zndfc3luY19hY3F1aXJlIik7CisKKyAgICBpZiAoIWh3LT5zd2Z3X3N5bmNfcHJlc2VudCkKKyAgICAgICAgcmV0dXJuIGUxMDAwX2dldF9od19lZXByb21fc2VtYXBob3JlKGh3KTsKKworICAgIHdoaWxlKHRpbWVvdXQpIHsKKyAgICAgICAgICAgIGlmIChlMTAwMF9nZXRfaHdfZWVwcm9tX3NlbWFwaG9yZShodykpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfU1dGV19TWU5DOworCisgICAgICAgICAgICBzd2Z3X3N5bmMgPSBFMTAwMF9SRUFEX1JFRyhodywgU1dfRldfU1lOQyk7CisgICAgICAgICAgICBpZiAoIShzd2Z3X3N5bmMgJiAoZndtYXNrIHwgc3dtYXNrKSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogZmlybXdhcmUgY3VycmVudGx5IHVzaW5nIHJlc291cmNlIChmd21hc2spICovCisgICAgICAgICAgICAvKiBvciBvdGhlciBzb2Z0d2FyZSB0aHJlYWQgY3VycmVudGx5IHVzaW5nIHJlc291cmNlIChzd21hc2spICovCisgICAgICAgICAgICBlMTAwMF9wdXRfaHdfZWVwcm9tX3NlbWFwaG9yZShodyk7CisgICAgICAgICAgICBtc2VjX2RlbGF5X2lycSg1KTsKKyAgICAgICAgICAgIHRpbWVvdXQtLTsKKyAgICB9CisKKyAgICBpZiAoIXRpbWVvdXQpIHsKKyAgICAgICAgREVCVUdPVVQoIkRyaXZlciBjYW4ndCBhY2Nlc3MgcmVzb3VyY2UsIFNXX0ZXX1NZTkMgdGltZW91dC5cbiIpOworICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9TV0ZXX1NZTkM7CisgICAgfQorCisgICAgc3dmd19zeW5jIHw9IHN3bWFzazsKKyAgICBFMTAwMF9XUklURV9SRUcoaHcsIFNXX0ZXX1NZTkMsIHN3Zndfc3luYyk7CisKKyAgICBlMTAwMF9wdXRfaHdfZWVwcm9tX3NlbWFwaG9yZShodyk7CisgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7Cit9CisKK3ZvaWQKK2UxMDAwX3N3Zndfc3luY19yZWxlYXNlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQxNl90IG1hc2spCit7CisgICAgdWludDMyX3Qgc3dmd19zeW5jOworICAgIHVpbnQzMl90IHN3bWFzayA9IG1hc2s7CisKKyAgICBERUJVR0ZVTkMoImUxMDAwX3N3Zndfc3luY19yZWxlYXNlIik7CisKKyAgICBpZiAoIWh3LT5zd2Z3X3N5bmNfcHJlc2VudCkgeworICAgICAgICBlMTAwMF9wdXRfaHdfZWVwcm9tX3NlbWFwaG9yZShodyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBpZiAoZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUoaHcpKQorICAgICAqICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsgKi8KKyAgICB3aGlsZSAoZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUoaHcpICE9IEUxMDAwX1NVQ0NFU1MpOworICAgICAgICAvKiBlbXB0eSAqLworCisgICAgc3dmd19zeW5jID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNXX0ZXX1NZTkMpOworICAgIHN3Zndfc3luYyAmPSB+c3dtYXNrOworICAgIEUxMDAwX1dSSVRFX1JFRyhodywgU1dfRldfU1lOQywgc3dmd19zeW5jKTsKKworICAgIGUxMDAwX3B1dF9od19lZXByb21fc2VtYXBob3JlKGh3KTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFJlYWRzIHRoZSB2YWx1ZSBmcm9tIGEgUEhZIHJlZ2lzdGVyLCBpZiB0aGUgdmFsdWUgaXMgb24gYSBzcGVjaWZpYyBub24gemVybwogKiBwYWdlLCBzZXRzIHRoZSBwYWdlIGZpcnN0LgpAQCAtMjc3OSwyMiArMzE0Niw1NSBAQAogICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwaHlfZGF0YSkKIHsKICAgICB1aW50MzJfdCByZXRfdmFsOworICAgIHVpbnQxNl90IHN3Znc7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3JlYWRfcGh5X3JlZyIpOwogCisgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmCisgICAgICAgIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpKSB7CisgICAgICAgIHN3ZncgPSBFMTAwMF9TV0ZXX1BIWTFfU007CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dmdyA9IEUxMDAwX1NXRldfUEhZMF9TTTsKKyAgICB9CisgICAgaWYgKGUxMDAwX3N3Zndfc3luY19hY3F1aXJlKGh3LCBzd2Z3KSkKKyAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfU1dGV19TWU5DOworCiAgICAgaWYoKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwIHx8IAogICAgICAgICBody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncF8yKSAmJgogICAgICAgIChyZWdfYWRkciA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpKSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnX2V4KGh3LCBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KXJlZ19hZGRyKTsKICAgICAgICAgaWYocmV0X3ZhbCkgeworICAgICAgICAgICAgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UoaHcsIHN3ZncpOwogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfZ2c4MjU2MykgeworICAgICAgICBpZiAoKChyZWdfYWRkciAmIE1BWF9QSFlfUkVHX0FERFJFU1MpID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgfHwKKyAgICAgICAgICAgIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pKSB7CisgICAgICAgICAgICAvKiBTZWxlY3QgQ29uZmlndXJhdGlvbiBQYWdlICovCisgICAgICAgICAgICBpZiAoKHJlZ19hZGRyICYgTUFYX1BIWV9SRUdfQUREUkVTUykgPCBHRzgyNTYzX01JTl9BTFRfUkVHKSB7CisgICAgICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWdfZXgoaHcsIEdHODI1NjNfUEhZX1BBR0VfU0VMRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKCh1aW50MTZfdClyZWdfYWRkciA+PiBHRzgyNTYzX1BBR0VfU0hJRlQpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogVXNlIEFsdGVybmF0aXZlIFBhZ2UgU2VsZWN0IHJlZ2lzdGVyIHRvIGFjY2VzcworICAgICAgICAgICAgICAgICAqIHJlZ2lzdGVycyAzMCBhbmQgMzEKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRzgyNTYzX1BIWV9QQUdFX1NFTEVDVF9BTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkoKHVpbnQxNl90KXJlZ19hZGRyID4+IEdHODI1NjNfUEFHRV9TSElGVCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkgeworICAgICAgICAgICAgICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWdfZXgoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiByZWdfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKIAorICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKICAgICByZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMjg4NSwyMiArMzI4NSw1NSBAQAogICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwaHlfZGF0YSkKIHsKICAgICB1aW50MzJfdCByZXRfdmFsOworICAgIHVpbnQxNl90IHN3Znc7CiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3dyaXRlX3BoeV9yZWciKTsKIAorICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSAmJgorICAgICAgICAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgeworICAgICAgICBzd2Z3ID0gRTEwMDBfU1dGV19QSFkxX1NNOworICAgIH0gZWxzZSB7CisgICAgICAgIHN3ZncgPSBFMTAwMF9TV0ZXX1BIWTBfU007CisgICAgfQorICAgIGlmIChlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShodywgc3dmdykpCisgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKKwogICAgIGlmKChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCB8fCAKICAgICAgICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMikgJiYKICAgICAgICAocmVnX2FkZHIgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdClyZWdfYWRkcik7CiAgICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICB9CisgICAgfSBlbHNlIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpIHsKKyAgICAgICAgaWYgKCgocmVnX2FkZHIgJiBNQVhfUEhZX1JFR19BRERSRVNTKSA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHx8CisgICAgICAgICAgICAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSkgeworICAgICAgICAgICAgLyogU2VsZWN0IENvbmZpZ3VyYXRpb24gUGFnZSAqLworICAgICAgICAgICAgaWYgKChyZWdfYWRkciAmIE1BWF9QSFlfUkVHX0FERFJFU1MpIDwgR0c4MjU2M19NSU5fQUxUX1JFRykgeworICAgICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnX2V4KGh3LCBHRzgyNTYzX1BIWV9QQUdFX1NFTEVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSgodWludDE2X3QpcmVnX2FkZHIgPj4gR0c4MjU2M19QQUdFX1NISUZUKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIFVzZSBBbHRlcm5hdGl2ZSBQYWdlIFNlbGVjdCByZWdpc3RlciB0byBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgKiByZWdpc3RlcnMgMzAgYW5kIDMxCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWdfZXgoaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0c4MjU2M19QSFlfUEFHRV9TRUxFQ1RfQUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKCh1aW50MTZfdClyZWdfYWRkciA+PiBHRzgyNTYzX1BBR0VfU0hJRlQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJldF92YWwpIHsKKyAgICAgICAgICAgICAgICBlMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShodywgc3dmdyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZ19leChodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIHJlZ19hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKIAorICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKICAgICByZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMjk2Nyw2ICszNDAwLDY1IEBACiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CiAKK2ludDMyX3QKK2UxMDAwX3JlYWRfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVnX2FkZHIsCisgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpkYXRhKQoreworICAgIHVpbnQzMl90IHJlZ192YWw7CisgICAgdWludDE2X3Qgc3dmdzsKKyAgICBERUJVR0ZVTkMoImUxMDAwX3JlYWRfa21ybl9yZWciKTsKKworICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSAmJgorICAgICAgICAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgeworICAgICAgICBzd2Z3ID0gRTEwMDBfU1dGV19QSFkxX1NNOworICAgIH0gZWxzZSB7CisgICAgICAgIHN3ZncgPSBFMTAwMF9TV0ZXX1BIWTBfU007CisgICAgfQorICAgIGlmIChlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShodywgc3dmdykpCisgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKKworICAgIC8qIFdyaXRlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyAgICByZWdfdmFsID0gKChyZWdfYWRkciA8PCBFMTAwMF9LVU1DVFJMU1RBX09GRlNFVF9TSElGVCkgJgorICAgICAgICAgICAgICBFMTAwMF9LVU1DVFJMU1RBX09GRlNFVCkgfAorICAgICAgICAgICAgICBFMTAwMF9LVU1DVFJMU1RBX1JFTjsKKyAgICBFMTAwMF9XUklURV9SRUcoaHcsIEtVTUNUUkxTVEEsIHJlZ192YWwpOworICAgIHVkZWxheSgyKTsKKworICAgIC8qIFJlYWQgdGhlIGRhdGEgcmV0dXJuZWQgKi8KKyAgICByZWdfdmFsID0gRTEwMDBfUkVBRF9SRUcoaHcsIEtVTUNUUkxTVEEpOworICAgICpkYXRhID0gKHVpbnQxNl90KXJlZ192YWw7CisKKyAgICBlMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShodywgc3dmdyk7CisgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QKK2UxMDAwX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWdfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGRhdGEpCit7CisgICAgdWludDMyX3QgcmVnX3ZhbDsKKyAgICB1aW50MTZfdCBzd2Z3OworICAgIERFQlVHRlVOQygiZTEwMDBfd3JpdGVfa21ybl9yZWciKTsKKworICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSAmJgorICAgICAgICAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgeworICAgICAgICBzd2Z3ID0gRTEwMDBfU1dGV19QSFkxX1NNOworICAgIH0gZWxzZSB7CisgICAgICAgIHN3ZncgPSBFMTAwMF9TV0ZXX1BIWTBfU007CisgICAgfQorICAgIGlmIChlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShodywgc3dmdykpCisgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKKworICAgIHJlZ192YWwgPSAoKHJlZ19hZGRyIDw8IEUxMDAwX0tVTUNUUkxTVEFfT0ZGU0VUX1NISUZUKSAmCisgICAgICAgICAgICAgIEUxMDAwX0tVTUNUUkxTVEFfT0ZGU0VUKSB8IGRhdGE7CisgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBLVU1DVFJMU1RBLCByZWdfdmFsKTsKKyAgICB1ZGVsYXkoMik7CisKKyAgICBlMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShodywgc3dmdyk7CisgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogUmV0dXJucyB0aGUgUEhZIHRvIHRoZSBwb3dlci1vbiByZXNldCBzdGF0ZQpAQCAtMjk3OSw2ICszNDcxLDcgQEAKICAgICB1aW50MzJfdCBjdHJsLCBjdHJsX2V4dDsKICAgICB1aW50MzJfdCBsZWRfY3RybDsKICAgICBpbnQzMl90IHJldF92YWw7CisgICAgdWludDE2X3Qgc3dmdzsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfcGh5X2h3X3Jlc2V0Iik7CiAKQEAgLTI5OTEsMTEgKzM0ODQsMjEgQEAKICAgICBERUJVR09VVCgiUmVzZXR0aW5nIFBoeS4uLlxuIik7CiAKICAgICBpZihody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0MykgeworICAgICAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikgJiYKKyAgICAgICAgICAgIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpKSB7CisgICAgICAgICAgICBzd2Z3ID0gRTEwMDBfU1dGV19QSFkxX1NNOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dmdyA9IEUxMDAwX1NXRldfUEhZMF9TTTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZTEwMDBfc3dmd19zeW5jX2FjcXVpcmUoaHcsIHN3ZncpKSB7CisgICAgICAgICAgICBlMTAwMF9yZWxlYXNlX3NvZnR3YXJlX3NlbWFwaG9yZShodyk7CisgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9TV0ZXX1NZTkM7CisgICAgICAgIH0KICAgICAgICAgLyogUmVhZCB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIGFzc2VydCB0aGUgRTEwMDBfQ1RSTF9QSFlfUlNUCiAgICAgICAgICAqIGJpdC4gVGhlbiwgdGFrZSBpdCBvdXQgb2YgcmVzZXQuCiAgICAgICAgICAqIEZvciBwcmUtZTEwMDBfODI1NzEgaGFyZHdhcmUsIHdlIGRlbGF5IGZvciAxMG1zIGJldHdlZW4gdGhlIGFzc2VydCAKICAgICAgICAgICogYW5kIGRlYXNzZXJ0LiAgRm9yIGUxMDAwXzgyNTcxIGhhcmR3YXJlIGFuZCBsYXRlciwgd2UgaW5zdGVhZCBkZWxheQotICAgICAgICAgKiBmb3IgMTBtcyBhZnRlciB0aGUgZGVhc3NlcnRpb24uCisgICAgICAgICAqIGZvciA1MHVzIGJldHdlZW4gYW5kIDEwbXMgYWZ0ZXIgdGhlIGRlYXNzZXJ0aW9uLgogICAgICAgICAgKi8KICAgICAgICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsIHwgRTEwMDBfQ1RSTF9QSFlfUlNUKTsKQEAgLTMwMTEsNiArMzUxNCw3IEBACiAgICAgICAgIAogICAgICAgICBpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxKQogICAgICAgICAgICAgbXNlY19kZWxheSgxMCk7CisgICAgICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBSZWFkIHRoZSBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCBSZWdpc3RlciwgYXNzZXJ0IHRoZSBQSFlfUkVTRVRfRElSCiAgICAgICAgICAqIGJpdCB0byBwdXQgdGhlIFBIWSBpbnRvIHJlc2V0LiBUaGVuLCB0YWtlIGl0IG91dCBvZiByZXNldC4KQEAgLTMwMzcsNiArMzU0MSw3IEBACiAKICAgICAvKiBXYWl0IGZvciBGVyB0byBmaW5pc2ggUEhZIGNvbmZpZ3VyYXRpb24uICovCiAgICAgcmV0X3ZhbCA9IGUxMDAwX2dldF9waHlfY2ZnX2RvbmUoaHcpOworICAgIGUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfc2VtYXBob3JlKGh3KTsKIAogICAgIHJldHVybiByZXRfdmFsOwogfQpAQCAtMzExNCw2ICszNjE5LDE1IEBACiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogICAgIH0KIAorICAgIC8qIEVTQi0yIFBIWSByZWFkcyByZXF1aXJlIGUxMDAwX3BoeV9nZzgyNTYzIHRvIGJlIHNldCBiZWNhdXNlIG9mIGEgd29yay0KKyAgICAgKiBhcm91bmQgdGhhdCBmb3JjZXMgUEhZIHBhZ2UgMCB0byBiZSBzZXQgb3IgdGhlIHJlYWRzIGZhaWwuICBUaGUgcmVzdCBvZgorICAgICAqIHRoZSBjb2RlIGluIHRoaXMgcm91dGluZSB1c2VzIGUxMDAwX3JlYWRfcGh5X3JlZyB0byByZWFkIHRoZSBQSFkgSUQuCisgICAgICogU28gZm9yIEVTQi0yIHdlIG5lZWQgdG8gaGF2ZSB0aGlzIHNldCBzbyBvdXIgcmVhZHMgd29uJ3QgZmFpbC4gIElmIHRoZQorICAgICAqIGF0dGFjaGVkIFBIWSBpcyBub3QgYSBlMTAwMF9waHlfZ2c4MjU2MywgdGhlIHJvdXRpbmVzIGJlbG93IHdpbGwgZmlndXJlCisgICAgICogdGhpcyBvdXQgYXMgd2VsbC4gKi8KKyAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKQorICAgICAgICBody0+cGh5X3R5cGUgPSBlMTAwMF9waHlfZ2c4MjU2MzsKKwogICAgIC8qIFJlYWQgdGhlIFBIWSBJRCBSZWdpc3RlcnMgdG8gaWRlbnRpZnkgd2hpY2ggUEhZIGlzIG9uYm9hcmQuICovCiAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0lEMSwgJnBoeV9pZF9oaWdoKTsKICAgICBpZihyZXRfdmFsKQpAQCAtMzE1MSw2ICszNjY1LDkgQEAKICAgICBjYXNlIGUxMDAwXzgyNTczOgogICAgICAgICBpZihody0+cGh5X2lkID09IE04OEUxMTExX0lfUEhZX0lEKSBtYXRjaCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgZTEwMDBfODAwMDNlczJsYW46CisgICAgICAgIGlmIChody0+cGh5X2lkID09IEdHODI1NjNfRV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgREVCVUdPVVQxKCJJbnZhbGlkIE1BQyB0eXBlICVkXG4iLCBody0+bWFjX3R5cGUpOwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7CkBAIC0zMTc3LDggKzM2OTQsMTAgQEAKICAgICBERUJVR0ZVTkMoImUxMDAwX3BoeV9yZXNldF9kc3AiKTsKIAogICAgIGRvIHsKLSAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIDI5LCAweDAwMWQpOwotICAgICAgICBpZihyZXRfdmFsKSBicmVhazsKKyAgICAgICAgaWYgKGh3LT5waHlfdHlwZSAhPSBlMTAwMF9waHlfZ2c4MjU2MykgeworICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIDI5LCAweDAwMWQpOworICAgICAgICAgICAgaWYocmV0X3ZhbCkgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIDMwLCAweDAwYzEpOwogICAgICAgICBpZihyZXRfdmFsKSBicmVhazsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIDMwLCAweDAwMDApOwpAQCAtMzMxMCw4ICszODI5LDE3IEBACiAgICAgICAgIC8qIENhYmxlIExlbmd0aCBFc3RpbWF0aW9uIGFuZCBMb2NhbC9SZW1vdGUgUmVjZWl2ZXIgSW5mb3JtYXRpb24KICAgICAgICAgICogYXJlIG9ubHkgdmFsaWQgYXQgMTAwMCBNYnBzLgogICAgICAgICAgKi8KLSAgICAgICAgcGh5X2luZm8tPmNhYmxlX2xlbmd0aCA9ICgocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX0NBQkxFX0xFTkdUSCkgPj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNODhFMTAwMF9QU1NSX0NBQkxFX0xFTkdUSF9TSElGVCk7CisgICAgICAgIGlmIChody0+cGh5X3R5cGUgIT0gZTEwMDBfcGh5X2dnODI1NjMpIHsKKyAgICAgICAgICAgIHBoeV9pbmZvLT5jYWJsZV9sZW5ndGggPSAoKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9DQUJMRV9MRU5HVEgpID4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE04OEUxMDAwX1BTU1JfQ0FCTEVfTEVOR1RIX1NISUZUKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX0RTUF9ESVNUQU5DRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOworCisgICAgICAgICAgICBwaHlfaW5mby0+Y2FibGVfbGVuZ3RoID0gcGh5X2RhdGEgJiBHRzgyNTYzX0RTUERfQ0FCTEVfTEVOR1RIOworICAgICAgICB9CiAKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV9kYXRhKTsKICAgICAgICAgaWYocmV0X3ZhbCkKQEAgLTMzOTIsNyArMzkyMCw4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNldHMgdXAgZWVwcm9tIHZhcmlhYmxlcyBpbiB0aGUgaHcgc3RydWN0LiAgTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgbWFjX3R5cGUKLSAqIGlzIGNvbmZpZ3VyZWQuCisgKiBpcyBjb25maWd1cmVkLiAgQWRkaXRpb25hbGx5LCBpZiB0aGlzIGlzIElDSDgsIHRoZSBmbGFzaCBjb250cm9sbGVyIEdiRQorICogcmVnaXN0ZXJzIG11c3QgYmUgbWFwcGVkLCBvciB0aGlzIHdpbGwgY3Jhc2guCiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM1MDUsNiArNDAzNCwyMCBAQAogICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgorICAgICAgICBlZXByb20tPnR5cGUgPSBlMTAwMF9lZXByb21fc3BpOworICAgICAgICBlZXByb20tPm9wY29kZV9iaXRzID0gODsKKyAgICAgICAgZWVwcm9tLT5kZWxheV91c2VjID0gMTsKKyAgICAgICAgaWYgKGVlY2QgJiBFMTAwMF9FRUNEX0FERFJfQklUUykgeworICAgICAgICAgICAgZWVwcm9tLT5wYWdlX3NpemUgPSAzMjsKKyAgICAgICAgICAgIGVlcHJvbS0+YWRkcmVzc19iaXRzID0gMTY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlZXByb20tPnBhZ2Vfc2l6ZSA9IDg7CisgICAgICAgICAgICBlZXByb20tPmFkZHJlc3NfYml0cyA9IDg7CisgICAgICAgIH0KKyAgICAgICAgZWVwcm9tLT51c2VfZWVyZCA9IFRSVUU7CisgICAgICAgIGVlcHJvbS0+dXNlX2Vld3IgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzY4NSw5ICs0MjI4LDggQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfYWNxdWlyZV9lZXByb20iKTsKIAotICAgIGlmKGUxMDAwX2dldF9od19lZXByb21fc2VtYXBob3JlKGh3KSkKLSAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOwotCisgICAgaWYgKGUxMDAwX3N3Zndfc3luY19hY3F1aXJlKGh3LCBFMTAwMF9TV0ZXX0VFUF9TTSkpCisgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKICAgICBlZWNkID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFQ0QpOwogCiAgICAgaWYgKGh3LT5tYWNfdHlwZSAhPSBlMTAwMF84MjU3MykgewpAQCAtMzcwNiw3ICs0MjQ4LDcgQEAKICAgICAgICAgICAgICAgICBlZWNkICY9IH5FMTAwMF9FRUNEX1JFUTsKICAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOwogICAgICAgICAgICAgICAgIERFQlVHT1VUKCJDb3VsZCBub3QgYWNxdWlyZSBFRVBST00gZ3JhbnRcbiIpOwotICAgICAgICAgICAgICAgIGUxMDAwX3B1dF9od19lZXByb21fc2VtYXBob3JlKGh3KTsKKyAgICAgICAgICAgICAgICBlMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShodywgRTEwMDBfU1dGV19FRVBfU00pOwogICAgICAgICAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzgyOSw3ICs0MzcxLDcgQEAKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKICAgICB9CiAKLSAgICBlMTAwMF9wdXRfaHdfZWVwcm9tX3NlbWFwaG9yZShodyk7CisgICAgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UoaHcsIEUxMDAwX1NXRldfRUVQX1NNKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzkwOCw2ICs0NDUwLDggQEAKICAgICBpZiAoZTEwMDBfaXNfb25ib2FyZF9udm1fZWVwcm9tKGh3KSA9PSBUUlVFICYmCiAgICAgaHctPmVlcHJvbS51c2VfZWVyZCA9PSBGQUxTRSkgewogICAgICAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgeworICAgICAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvKiBQcmVwYXJlIHRoZSBFRVBST00gZm9yIHJlYWRpbmcgICovCiAgICAgICAgICAgICBpZiAoZTEwMDBfYWNxdWlyZV9lZXByb20oaHcpICE9IEUxMDAwX1NVQ0NFU1MpCkBAIC00MDI1LDYgKzQ1NjksOSBAQAogICAgIHVpbnQzMl90ICAgIGkgICAgICAgICAgICAgID0gMDsKICAgICBpbnQzMl90ICAgICBlcnJvciAgICAgICAgICA9IDA7CiAKKyAgICBpZiAoZTEwMDBfc3dmd19zeW5jX2FjcXVpcmUoaHcsIEUxMDAwX1NXRldfRUVQX1NNKSkKKyAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfU1dGV19TWU5DOworCiAgICAgZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKICAgICAgICAgcmVnaXN0ZXJfdmFsdWUgPSAoZGF0YVtpXSA8PCBFMTAwMF9FRVBST01fUldfUkVHX0RBVEEpIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKChvZmZzZXQraSkgPDwgRTEwMDBfRUVQUk9NX1JXX0FERFJfU0hJRlQpIHwgCkBAIC00MDQ0LDYgKzQ1OTEsNyBAQAogICAgICAgICB9ICAgICAgIAogICAgIH0KICAgICAKKyAgICBlMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShodywgRTEwMDBfU1dGV19FRVBfU00pOwogICAgIHJldHVybiBlcnJvcjsKIH0KIApAQCAtNDA4NSw2ICs0NjMzLDggQEAKIHsKICAgICB1aW50MzJfdCBlZWNkID0gMDsKIAorICAgIERFQlVHRlVOQygiZTEwMDBfaXNfb25ib2FyZF9udm1fZWVwcm9tIik7CisKICAgICBpZihody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpIHsKICAgICAgICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKIApAQCAtNDUxMSw2ICs1MDYxLDcgQEAKICAgICBjYXNlIGUxMDAwXzgyNTQ2OgogICAgIGNhc2UgZTEwMDBfODI1NDZfcmV2XzM6CiAgICAgY2FzZSBlMTAwMF84MjU3MToKKyAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgogICAgICAgICBpZihFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCiAgICAgICAgICAgICBody0+cGVybV9tYWNfYWRkcls1XSBePSAweDAxOwogICAgICAgICBicmVhazsKQEAgLTQ3NDksOCArNTMwMCwzNyBAQAogICAgIHJhcl9sb3cgPSAoKHVpbnQzMl90KSBhZGRyWzBdIHwKICAgICAgICAgICAgICAgICgodWludDMyX3QpIGFkZHJbMV0gPDwgOCkgfAogICAgICAgICAgICAgICAgKCh1aW50MzJfdCkgYWRkclsyXSA8PCAxNikgfCAoKHVpbnQzMl90KSBhZGRyWzNdIDw8IDI0KSk7CisgICAgcmFyX2hpZ2ggPSAoKHVpbnQzMl90KSBhZGRyWzRdIHwgKCh1aW50MzJfdCkgYWRkcls1XSA8PCA4KSk7CiAKLSAgICByYXJfaGlnaCA9ICgodWludDMyX3QpIGFkZHJbNF0gfCAoKHVpbnQzMl90KSBhZGRyWzVdIDw8IDgpIHwgRTEwMDBfUkFIX0FWKTsKKyAgICAvKiBEaXNhYmxlIFJ4IGFuZCBmbHVzaCBhbGwgUnggZnJhbWVzIGJlZm9yZSBlbmFibGluZyBSU1MgdG8gYXZvaWQgUngKKyAgICAgKiB1bml0IGhhbmcuCisgICAgICoKKyAgICAgKiBEZXNjcmlwdGlvbjoKKyAgICAgKiBJZiB0aGVyZSBhcmUgYW55IFJ4IGZyYW1lcyBxdWV1ZWQgdXAgb3Igb3RoZXJ3aXNlIHByZXNlbnQgaW4gdGhlIEhXCisgICAgICogYmVmb3JlIFJTUyBpcyBlbmFibGVkLCBhbmQgdGhlbiB3ZSBlbmFibGUgUlNTLCB0aGUgSFcgUnggdW5pdCB3aWxsCisgICAgICogaGFuZy4gIFRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUsIHdlIGhhdmUgdG8gZGlzYWJsZSByZWNlaXZlcyBhbmQKKyAgICAgKiBmbHVzaCBvdXQgYWxsIFJ4IGZyYW1lcyBiZWZvcmUgd2UgZW5hYmxlIFJTUy4gVG8gZG8gc28sIHdlIG1vZGlmeSB3ZQorICAgICAqIHJlZGlyZWN0IGFsbCBSeCB0cmFmZmljIHRvIG1hbmFnZWFiaWxpdHkgYW5kIHRoZW4gcmVzZXQgdGhlIEhXLgorICAgICAqIFRoaXMgZmx1c2hlcyBhd2F5IFJ4IGZyYW1lcywgYW5kIChzaW5jZSB0aGUgcmVkaXJlY3Rpb25zIHRvCisgICAgICogbWFuYWdlYWJpbGl0eSBwZXJzaXN0cyBhY3Jvc3MgcmVzZXRzKSBrZWVwcyBuZXcgb25lcyBmcm9tIGNvbWluZyBpbgorICAgICAqIHdoaWxlIHdlIHdvcmsuICBUaGVuLCB3ZSBjbGVhciB0aGUgQWRkcmVzcyBWYWxpZCBBViBiaXQgZm9yIGFsbCBNQUMKKyAgICAgKiBhZGRyZXNzZXMgYW5kIHVuZG8gdGhlIHJlLWRpcmVjdGlvbiB0byBtYW5hZ2VhYmlsaXR5LgorICAgICAqIE5vdywgZnJhbWVzIGFyZSBjb21pbmcgaW4gYWdhaW4sIGJ1dCB0aGUgTUFDIHdvbid0IGFjY2VwdCB0aGVtLCBzbworICAgICAqIGZhciBzbyBnb29kLiAgV2Ugbm93IHByb2NlZWQgdG8gaW5pdGlhbGl6ZSBSU1MgKGlmIG5lY2Vzc2FyeSkgYW5kCisgICAgICogY29uZmlndXJlIHRoZSBSeCB1bml0LiAgTGFzdCwgd2UgcmUtZW5hYmxlIHRoZSBBViBiaXRzIGFuZCBjb250aW51ZQorICAgICAqIG9uIG91ciBtZXJyeSB3YXkuCisgICAgICovCisgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKKyAgICBjYXNlIGUxMDAwXzgyNTcxOgorICAgIGNhc2UgZTEwMDBfODI1NzI6CisgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKKyAgICAgICAgaWYgKGh3LT5sZWF2ZV9hdl9iaXRfb2ZmID09IFRSVUUpCisgICAgICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiBJbmRpY2F0ZSB0byBoYXJkd2FyZSB0aGUgQWRkcmVzcyBpcyBWYWxpZC4gKi8KKyAgICAgICAgcmFyX2hpZ2ggfD0gRTEwMDBfUkFIX0FWOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAoaW5kZXggPDwgMSksIHJhcl9sb3cpOwogICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsICgoaW5kZXggPDwgMSkgKyAxKSwgcmFyX2hpZ2gpOwpAQCAtNTMzMCw2ICs1OTEwLDcgQEAKICAgICAgICAgaHctPmJ1c193aWR0aCA9IGUxMDAwX2J1c193aWR0aF9wY2lleF8xOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwXzgyNTcxOgorICAgIGNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAgICAgICAgIGh3LT5idXNfdHlwZSA9IGUxMDAwX2J1c190eXBlX3BjaV9leHByZXNzOwogICAgICAgICBody0+YnVzX3NwZWVkID0gZTEwMDBfYnVzX3NwZWVkXzI1MDA7CiAgICAgICAgIGh3LT5idXNfd2lkdGggPSBlMTAwMF9idXNfd2lkdGhfcGNpZXhfNDsKQEAgLTU0NzUsNiArNjA1NiwzNCBAQAogICAgICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfZ2c4MjU2MykgeworICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9EU1BfRElTVEFOQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKKyAgICAgICAgaWYgKHJldF92YWwpCisgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKKyAgICAgICAgY2FibGVfbGVuZ3RoID0gcGh5X2RhdGEgJiBHRzgyNTYzX0RTUERfQ0FCTEVfTEVOR1RIOworCisgICAgICAgIHN3aXRjaCAoY2FibGVfbGVuZ3RoKSB7CisgICAgICAgIGNhc2UgZTEwMDBfZ2dfY2FibGVfbGVuZ3RoXzYwOgorICAgICAgICAgICAgKm1pbl9sZW5ndGggPSAwOworICAgICAgICAgICAgKm1heF9sZW5ndGggPSBlMTAwMF9pZ3BfY2FibGVfbGVuZ3RoXzYwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZTEwMDBfZ2dfY2FibGVfbGVuZ3RoXzYwXzExNToKKyAgICAgICAgICAgICptaW5fbGVuZ3RoID0gZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF82MDsKKyAgICAgICAgICAgICptYXhfbGVuZ3RoID0gZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xMTU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBlMTAwMF9nZ19jYWJsZV9sZW5ndGhfMTE1XzE1MDoKKyAgICAgICAgICAgICptaW5fbGVuZ3RoID0gZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xMTU7CisgICAgICAgICAgICAqbWF4X2xlbmd0aCA9IGUxMDAwX2lncF9jYWJsZV9sZW5ndGhfMTUwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZTEwMDBfZ2dfY2FibGVfbGVuZ3RoXzE1MDoKKyAgICAgICAgICAgICptaW5fbGVuZ3RoID0gZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xNTA7CisgICAgICAgICAgICAqbWF4X2xlbmd0aCA9IGUxMDAwX2lncF9jYWJsZV9sZW5ndGhfMTgwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9QSFk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZihody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCkgeyAvKiBGb3IgSUdQIFBIWSAqLwogICAgICAgICB1aW50MTZfdCBhZ2NfcmVnX2FycmF5W0lHUDAxRTEwMDBfUEhZX0NIQU5ORUxfTlVNXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7SUdQMDFFMTAwMF9QSFlfQUdDX0EsCkBAIC01NTg0LDcgKzYxOTMsOCBAQAogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9jaGVja19wb2xhcml0eSIpOwogCi0gICAgaWYoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpIHsKKyAgICBpZiAoKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfbTg4KSB8fAorICAgICAgICAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKSkgewogICAgICAgICAvKiByZXR1cm4gdGhlIFBvbGFyaXR5IGJpdCBpbiB0aGUgU3RhdHVzIHJlZ2lzdGVyLiAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKQEAgLTU2NTMsNyArNjI2Myw4IEBACiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBody0+c3BlZWRfZG93bmdyYWRlZCA9IChwaHlfZGF0YSAmIElHUDAxRTEwMDBfUExIUl9TU19ET1dOR1JBREUpID8gMSA6IDA7Ci0gICAgfSBlbHNlIGlmKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfbTg4KSB7CisgICAgfSBlbHNlIGlmICgoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpIHx8CisgICAgICAgICAgICAgICAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKICAgICAgICAgaWYocmV0X3ZhbCkKQEAgLTY2ODYsNiArNzI5Nyw3IEBACiAgICAgY2FzZSBlMTAwMF84MjU3MToKICAgICBjYXNlIGUxMDAwXzgyNTcyOgogICAgIGNhc2UgZTEwMDBfODI1NzM6CisgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICAgICAgd2hpbGUodGltZW91dCkgewogICAgICAgICAgICAgaWYgKEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKSAmIEUxMDAwX0VFQ0RfQVVUT19SRCkgYnJlYWs7CiAgICAgICAgICAgICBlbHNlIG1zZWNfZGVsYXkoMSk7CkBAIC02NzI5LDYgKzczNDEsMTEgQEAKICAgICBkZWZhdWx0OgogICAgICAgICBtc2VjX2RlbGF5KDEwKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKKyAgICAgICAgLyogU2VwYXJhdGUgKl9DRkdfRE9ORV8qIGJpdCBmb3IgZWFjaCBwb3J0ICovCisgICAgICAgIGlmIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCisgICAgICAgICAgICBjZmdfbWFzayA9IEUxMDAwX0VFUFJPTV9DRkdfRE9ORV9QT1JUXzE7CisgICAgICAgIC8qIEZhbGwgVGhyb3VnaCAqLwogICAgIGNhc2UgZTEwMDBfODI1NzE6CiAgICAgY2FzZSBlMTAwMF84MjU3MjoKICAgICAgICAgd2hpbGUgKHRpbWVvdXQpIHsKQEAgLTY3NDYsMTIgKzczNjMsNiBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICAvKiBQSFkgY29uZmlndXJhdGlvbiBmcm9tIE5WTSBqdXN0IHN0YXJ0cyBhZnRlciBFRUNEX0FVVE9fUkQgc2V0cyB0byBoaWdoLgotICAgICAqIE5lZWQgdG8gd2FpdCBmb3IgUEhZIGNvbmZpZ3VyYXRpb24gY29tcGxldGlvbiBiZWZvcmUgYWNjZXNzaW5nIE5WTQotICAgICAqIGFuZCBQSFkuICovCi0gICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykKLSAgICAgICAgbXNlY19kZWxheSgyNSk7Ci0KICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KIApAQCAtNjc3Nyw2ICs3Mzg4LDExIEBACiAgICAgaWYoIWh3LT5lZXByb21fc2VtYXBob3JlX3ByZXNlbnQpCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogCisgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikgeworICAgICAgICAvKiBHZXQgdGhlIFNXIHNlbWFwaG9yZS4gKi8KKyAgICAgICAgaWYgKGUxMDAwX2dldF9zb2Z0d2FyZV9zZW1hcGhvcmUoaHcpICE9IEUxMDAwX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CisgICAgfQogCiAgICAgLyogR2V0IHRoZSBGVyBzZW1hcGhvcmUuICovCiAgICAgdGltZW91dCA9IGh3LT5lZXByb20ud29yZF9zaXplICsgMTsKQEAgLTY4MjIsMTAgKzc0MzgsNzUgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBTV1NNKTsKKyAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSB7CisgICAgICAgIC8qIFJlbGVhc2UgYm90aCBzZW1hcGhvcmVzLiAqLworICAgICAgICBzd3NtICY9IH4oRTEwMDBfU1dTTV9TTUJJIHwgRTEwMDBfU1dTTV9TV0VTTUJJKTsKKyAgICB9IGVsc2UKICAgICAgICAgc3dzbSAmPSB+KEUxMDAwX1NXU01fU1dFU01CSSk7CiAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBTV1NNLCBzd3NtKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE9idGFpbmluZyBzb2Z0d2FyZSBzZW1hcGhvcmUgYml0IChTTUJJKSBiZWZvcmUgcmVzZXR0aW5nIFBIWS4KKyAqCisgKiBodzogU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCisgKgorICogcmV0dXJuczogLSBFMTAwMF9FUlJfUkVTRVQgaWYgZmFpbCB0byBvYnRhaW4gc2VtYXBob3JlLgorICogICAgICAgICAgICBFMTAwMF9TVUNDRVNTIGF0IGFueSBvdGhlciBjYXNlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQzMl90CitlMTAwMF9nZXRfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisgICAgaW50MzJfdCB0aW1lb3V0ID0gaHctPmVlcHJvbS53b3JkX3NpemUgKyAxOworICAgIHVpbnQzMl90IHN3c207CisKKyAgICBERUJVR0ZVTkMoImUxMDAwX2dldF9zb2Z0d2FyZV9zZW1hcGhvcmUiKTsKKworICAgIGlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfODAwMDNlczJsYW4pCisgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOworCisgICAgd2hpbGUodGltZW91dCkgeworICAgICAgICBzd3NtID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNXU00pOworICAgICAgICAvKiBJZiBTTUJJIGJpdCBjbGVhcmVkLCBpdCBpcyBub3cgc2V0IGFuZCB3ZSBob2xkIHRoZSBzZW1hcGhvcmUgKi8KKyAgICAgICAgaWYoIShzd3NtICYgRTEwMDBfU1dTTV9TTUJJKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtc2VjX2RlbGF5X2lycSgxKTsKKyAgICAgICAgdGltZW91dC0tOworICAgIH0KKworICAgIGlmKCF0aW1lb3V0KSB7CisgICAgICAgIERFQlVHT1VUKCJEcml2ZXIgY2FuJ3QgYWNjZXNzIGRldmljZSAtIFNNQkkgYml0IGlzIHNldC5cbiIpOworICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9SRVNFVDsKKyAgICB9CisKKyAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFJlbGVhc2Ugc2VtYXBob3JlIGJpdCAoU01CSSkuCisgKgorICogaHc6IFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkCitlMTAwMF9yZWxlYXNlX3NvZnR3YXJlX3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworICAgIHVpbnQzMl90IHN3c207CisKKyAgICBERUJVR0ZVTkMoImUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfc2VtYXBob3JlIik7CisKKyAgICBpZiAoaHctPm1hY190eXBlICE9IGUxMDAwXzgwMDAzZXMybGFuKQorICAgICAgICByZXR1cm47CisKKyAgICBzd3NtID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNXU00pOworICAgIC8qIFJlbGVhc2UgdGhlIFNXIHNlbWFwaG9yZXMuKi8KKyAgICBzd3NtICY9IH5FMTAwMF9TV1NNX1NNQkk7CisgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBTV1NNLCBzd3NtKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ2hlY2tzIGlmIFBIWSByZXNldCBpcyBibG9ja2VkIGR1ZSB0byBTT0wvSURFUiBzZXNzaW9uLCBmb3IgZXhhbXBsZS4KICAqIFJldHVybmluZyBFMTAwMF9CTEtfUEhZX1JFU0VUIGlzbid0IG5lY2Vzc2FyaWx5IGFuIGVycm9yLiAgQnV0IGl0J3MgdXAgdG8KQEAgLTY4NjIsNiArNzU0Myw3IEBACiAgICAgY2FzZSBlMTAwMF84MjU3MToKICAgICBjYXNlIGUxMDAwXzgyNTcyOgogICAgIGNhc2UgZTEwMDBfODI1NzM6CisgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICAgICAgZndzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBGV1NNKTsKICAgICAgICAgaWYoKGZ3c20gJiBFMTAwMF9GV1NNX01PREVfTUFTSykgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBUUlVFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKaW5kZXggZjEyMTlkZC4uMTUwZTQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCkBAIC02MCw2ICs2MCw3IEBACiAgICAgZTEwMDBfODI1NzEsCiAgICAgZTEwMDBfODI1NzIsCiAgICAgZTEwMDBfODI1NzMsCisgICAgZTEwMDBfODAwMDNlczJsYW4sCiAgICAgZTEwMDBfbnVtX21hY3MKIH0gZTEwMDBfbWFjX3R5cGU7CiAKQEAgLTEzOSw2ICsxNDAsMTMgQEAKIH0gZTEwMDBfY2FibGVfbGVuZ3RoOwogCiB0eXBlZGVmIGVudW0geworICAgIGUxMDAwX2dnX2NhYmxlX2xlbmd0aF82MCA9IDAsCisgICAgZTEwMDBfZ2dfY2FibGVfbGVuZ3RoXzYwXzExNSA9IDEsCisgICAgZTEwMDBfZ2dfY2FibGVfbGVuZ3RoXzExNV8xNTAgPSAyLAorICAgIGUxMDAwX2dnX2NhYmxlX2xlbmd0aF8xNTAgPSA0Cit9IGUxMDAwX2dnX2NhYmxlX2xlbmd0aDsKKwordHlwZWRlZiBlbnVtIHsKICAgICBlMTAwMF9pZ3BfY2FibGVfbGVuZ3RoXzEwICA9IDEwLAogICAgIGUxMDAwX2lncF9jYWJsZV9sZW5ndGhfMjAgID0gMjAsCiAgICAgZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8zMCAgPSAzMCwKQEAgLTIwOCw2ICsyMTYsNyBAQAogICAgIGUxMDAwX3BoeV9tODggPSAwLAogICAgIGUxMDAwX3BoeV9pZ3AsCiAgICAgZTEwMDBfcGh5X2lncF8yLAorICAgIGUxMDAwX3BoeV9nZzgyNTYzLAogICAgIGUxMDAwX3BoeV91bmRlZmluZWQgPSAweEZGCiB9IGUxMDAwX3BoeV90eXBlOwogCkBAIC0yODEsNiArMjkwLDcgQEAKICNkZWZpbmUgRTEwMDBfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HIDEwCiAjZGVmaW5lIEUxMDAwX0VSUl9IT1NUX0lOVEVSRkFDRV9DT01NQU5EIDExCiAjZGVmaW5lIEUxMDAwX0JMS19QSFlfUkVTRVQgICAxMgorI2RlZmluZSBFMTAwMF9FUlJfU1dGV19TWU5DIDEzCiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIC8qIEluaXRpYWxpemF0aW9uICovCkBAIC0zMDQsNiArMzE0LDggQEAKIGludDMyX3QgZTEwMDBfcGh5X3Jlc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogaW50MzJfdCBlMTAwMF9waHlfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbyk7CiBpbnQzMl90IGUxMDAwX3ZhbGlkYXRlX21kaV9zZXR0aW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpOworaW50MzJfdCBlMTAwMF9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZ19hZGRyLCB1aW50MTZfdCAqZGF0YSk7CitpbnQzMl90IGUxMDAwX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZ19hZGRyLCB1aW50MTZfdCBkYXRhKTsKIAogLyogRUVQUk9NIEZ1bmN0aW9ucyAqLwogaW50MzJfdCBlMTAwMF9pbml0X2VlcHJvbV9wYXJhbXMoc3RydWN0IGUxMDAwX2h3ICpodyk7CkBAIC00NTQsNiArNDY2LDggQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTczRV9JQU1UICAgICAgICAgMHgxMDhDCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0wgICAgICAgICAgICAgIDB4MTA5QQogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzIDB4MTBCNQorI2RlZmluZSBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVCAgICAgMHgxMDk2CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfRFBUICAgICAweDEwOTgKIAogCiAjZGVmaW5lIE5PREVfQUREUkVTU19TSVpFIDYKQEAgLTg1MCw2ICs4NjQsNyBAQAogI2RlZmluZSBFMTAwMF9UWENXICAgICAweDAwMTc4ICAvKiBUWCBDb25maWd1cmF0aW9uIFdvcmQgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9SWENXICAgICAweDAwMTgwICAvKiBSWCBDb25maWd1cmF0aW9uIFdvcmQgLSBSTyAqLwogI2RlZmluZSBFMTAwMF9UQ1RMICAgICAweDAwNDAwICAvKiBUWCBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVENUTF9FWFQgMHgwMDQwNCAgLyogRXh0ZW5kZWQgVFggQ29udHJvbCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1RJUEcgICAgIDB4MDA0MTAgIC8qIFRYIEludGVyLXBhY2tldCBnYXAgLVJXICovCiAjZGVmaW5lIEUxMDAwX1RCVCAgICAgIDB4MDA0NDggIC8qIFRYIEJ1cnN0IFRpbWVyIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfQUlUICAgICAgMHgwMDQ1OCAgLyogQWRhcHRpdmUgSW50ZXJmcmFtZSBTcGFjaW5nIFRocm90dGxlIC0gUlcgKi8KQEAgLTk5Niw2ICsxMDExLDExIEBACiAjZGVmaW5lIEUxMDAwX0ZGTVQgICAgIDB4MDkwMDAgIC8qIEZsZXhpYmxlIEZpbHRlciBNYXNrIFRhYmxlIC0gUlcgQXJyYXkgKi8KICNkZWZpbmUgRTEwMDBfRkZWVCAgICAgMHgwOTgwMCAgLyogRmxleGlibGUgRmlsdGVyIFZhbHVlIFRhYmxlIC0gUlcgQXJyYXkgKi8KIAorI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBIDB4MDAwMzQgLyogTUFDLVBIWSBpbnRlcmZhY2UgLSBSVyAqLworI2RlZmluZSBFMTAwMF9NRFBIWUEgICAgIDB4MDAwM0MgIC8qIFBIWSBhZGRyZXNzIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQzJIICAgICAweDA1ODYwICAvKiBNYW5hZ21lbnQgQ29udHJvbCBUbyBIb3N0IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfU1dfRldfU1lOQyAweDA1QjVDIC8qIFNvZnR3YXJlLUZpcm13YXJlIFN5bmNocm9uaXphdGlvbiAtIFJXICovCisKICNkZWZpbmUgRTEwMDBfR0NSICAgICAgIDB4MDVCMDAgLyogUENJLUV4IENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfR1NDTF8xICAgIDB4MDVCMTAgLyogUENJLUV4IFN0YXRpc3RpYyBDb250cm9sICMxICovCiAjZGVmaW5lIEUxMDAwX0dTQ0xfMiAgICAweDA1QjE0IC8qIFBDSS1FeCBTdGF0aXN0aWMgQ29udHJvbCAjMiAqLwpAQCAtMTA2NSw2ICsxMDg1LDcgQEAKICNkZWZpbmUgRTEwMDBfODI1NDJfUlhDVyAgICAgRTEwMDBfUlhDVwogI2RlZmluZSBFMTAwMF84MjU0Ml9NVEEgICAgICAweDAwMjAwCiAjZGVmaW5lIEUxMDAwXzgyNTQyX1RDVEwgICAgIEUxMDAwX1RDVEwKKyNkZWZpbmUgRTEwMDBfODI1NDJfVENUTF9FWFQgRTEwMDBfVENUTF9FWFQKICNkZWZpbmUgRTEwMDBfODI1NDJfVElQRyAgICAgRTEwMDBfVElQRwogI2RlZmluZSBFMTAwMF84MjU0Ml9UREJBTCAgICAweDAwNDIwCiAjZGVmaW5lIEUxMDAwXzgyNTQyX1REQkFIICAgIDB4MDA0MjQKQEAgLTEyMTIsNiArMTIzMyw4IEBACiAjZGVmaW5lIEUxMDAwXzgyNTQyX1JTU1JLICAgICAgIEUxMDAwX1JTU1JLCiAjZGVmaW5lIEUxMDAwXzgyNTQyX1JTU0lNICAgICAgIEUxMDAwX1JTU0lNCiAjZGVmaW5lIEUxMDAwXzgyNTQyX1JTU0lSICAgICAgIEUxMDAwX1JTU0lSCisjZGVmaW5lIEUxMDAwXzgyNTQyX0tVTUNUUkxTVEEgRTEwMDBfS1VNQ1RSTFNUQQorI2RlZmluZSBFMTAwMF84MjU0Ml9TV19GV19TWU5DIEUxMDAwX1NXX0ZXX1NZTkMKIAogLyogU3RhdGlzdGljcyBjb3VudGVycyBjb2xsZWN0ZWQgYnkgdGhlIE1BQyAqLwogc3RydWN0IGUxMDAwX2h3X3N0YXRzIHsKQEAgLTEzMDMsNiArMTMyNiw3IEBACiAgICAgZTEwMDBfZmZlX2NvbmZpZyBmZmVfY29uZmlnX3N0YXRlOwogICAgIHVpbnQzMl90IGFzZl9maXJtd2FyZV9wcmVzZW50OwogICAgIHVpbnQzMl90IGVlcHJvbV9zZW1hcGhvcmVfcHJlc2VudDsKKyAgICB1aW50MzJfdCBzd2Z3X3N5bmNfcHJlc2VudDsKICAgICB1bnNpZ25lZCBsb25nIGlvX2Jhc2U7CiAgICAgdWludDMyX3QgcGh5X2lkOwogICAgIHVpbnQzMl90IHBoeV9yZXZpc2lvbjsKQEAgLTEzNjEsNiArMTM4NSw3IEBACiAgICAgYm9vbGVhbl90IGlmc19wYXJhbXNfZm9yY2VkOwogICAgIGJvb2xlYW5fdCBpbl9pZnNfbW9kZTsKICAgICBib29sZWFuX3QgbW5nX3JlZ19hY2Nlc3NfZGlzYWJsZWQ7CisgICAgYm9vbGVhbl90IGxlYXZlX2F2X2JpdF9vZmY7CiB9OwogCiAKQEAgLTEzOTMsNiArMTQxOCw4IEBACiAjZGVmaW5lIEUxMDAwX0NUUkxfRlJDRFBYICAgMHgwMDAwMTAwMCAgLyogRm9yY2UgRHVwbGV4ICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRF9VRF9FTiAgMHgwMDAwMjAwMCAgLyogRG9jay9VbmRvY2sgZW5hYmxlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRF9VRF9QT0xBUklUWSAweDAwMDA0MDAwIC8qIERlZmluZWQgcG9sYXJpdHkgb2YgRG9jay9VbmRvY2sgaW5kaWNhdGlvbiBpbiBTRFBbMF0gKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9GT1JDRV9QSFlfUkVTRVQgMHgwMDAwODAwMCAvKiBSZXNldCBib3RoIFBIWSBwb3J0cywgdGhyb3VnaCBQSFlSU1RfTiBwaW4gKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19FTiAweDAwMDEwMDAwIC8qIGVuYWJsZSBsaW5rIHN0YXR1cyBmcm9tIGV4dGVybmFsIExJTktfMCBhbmQgTElOS18xIHBpbnMgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4wICAweDAwMDQwMDAwICAvKiBTV0RQSU4gMCB2YWx1ZSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjEgIDB4MDAwODAwMDAgIC8qIFNXRFBJTiAxIHZhbHVlICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElOMiAgMHgwMDEwMDAwMCAgLyogU1dEUElOIDIgdmFsdWUgKi8KQEAgLTE0MjksNiArMTQ1NiwxNiBAQAogI2RlZmluZSBFMTAwMF9TVEFUVVNfQlVTNjQgICAgICAweDAwMDAxMDAwICAgICAgLyogSW4gNjQgYml0IHNsb3QgKi8KICNkZWZpbmUgRTEwMDBfU1RBVFVTX1BDSVhfTU9ERSAgMHgwMDAwMjAwMCAgICAgIC8qIFBDSS1YIG1vZGUgKi8KICNkZWZpbmUgRTEwMDBfU1RBVFVTX1BDSVhfU1BFRUQgMHgwMDAwQzAwMCAgICAgIC8qIFBDSS1YIGJ1cyBzcGVlZCAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfQk1DX1NLVV8wICAweDAwMTAwMDAwIC8qIEJNQyBVU0IgcmVkaXJlY3QgZGlzYWJsZWQgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX0JNQ19TS1VfMSAgMHgwMDIwMDAwMCAvKiBCTUMgU1JBTSBkaXNhYmxlZCAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfQk1DX1NLVV8yICAweDAwNDAwMDAwIC8qIEJNQyBTRFJBTSBkaXNhYmxlZCAqLworI2RlZmluZSBFMTAwMF9TVEFUVVNfQk1DX0NSWVBUTyAweDAwODAwMDAwIC8qIEJNQyBjcnlwdG8gZGlzYWJsZWQgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX0JNQ19MSVRFICAgMHgwMTAwMDAwMCAvKiBCTUMgZXh0ZXJuYWwgY29kZSBleGVjdXRpb24gZGlzYWJsZWQgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX1JHTUlJX0VOQUJMRSAweDAyMDAwMDAwIC8qIFJHTUlJIGRpc2FibGVkICovCisjZGVmaW5lIEUxMDAwX1NUQVRVU19GVVNFXzggICAgICAgMHgwNDAwMDAwMAorI2RlZmluZSBFMTAwMF9TVEFUVVNfRlVTRV85ICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgRTEwMDBfU1RBVFVTX1NFUkRFUzBfRElTICAweDEwMDAwMDAwIC8qIFNFUkRFUyBkaXNhYmxlZCBvbiBwb3J0IDAgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX1NFUkRFUzFfRElTICAweDIwMDAwMDAwIC8qIFNFUkRFUyBkaXNhYmxlZCBvbiBwb3J0IDEgKi8KIAogLyogQ29uc3RhbnRzIHVzZWQgdG8gaW50cmVwcmV0IHRoZSBtYXNrZWQgUENJLVggYnVzIHNwZWVkLiAqLwogI2RlZmluZSBFMTAwMF9TVEFUVVNfUENJWF9TUEVFRF82NiAgMHgwMDAwMDAwMCAvKiBQQ0ktWCBidXMgc3BlZWQgIDUwLTY2IE1IeiAqLwpAQCAtMTUwNiw2ICsxNTQzLDggQEAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0sgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfR01JSSAweDAwMDAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9UQkkgIDB4MDBDMDAwMDAKKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX0tNUk4gICAgMHgwMDAwMDAwMAorI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfU0VSREVTICAweDAwQzAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1dSX1dNQVJLX01BU0sgIDB4MDMwMDAwMDAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfV1JfV01BUktfMjU2ICAgMHgwMDAwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9XUl9XTUFSS18zMjAgICAweDAxMDAwMDAwCkBAIC0xNTE1LDYgKzE1NTQsOSBAQAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRCAgICAgICAweDEwMDAwMDAwICAvKiBEcml2ZXIgbG9hZGVkIGJpdCBmb3IgRlcgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfSUFNRSAgICAgICAgICAgMHgwODAwMDAwMCAgLyogSW50ZXJydXB0IGFja25vd2xlZGdlIEF1dG8tbWFzayAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9JTlRfVElNRVJfQ0xSICAweDIwMDAwMDAwICAvKiBDbGVhciBJbnRlcnJ1cHQgdGltZXJzIGFmdGVyIElNUyBjbGVhciAqLworI2RlZmluZSBFMTAwMF9DUlRMX0VYVF9QQl9QQVJFTiAgICAgICAweDAxMDAwMDAwIC8qIHBhY2tldCBidWZmZXIgcGFyaXR5IGVycm9yIGRldGVjdGlvbiBlbmFibGVkICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0RGX1BBUkVOICAgICAgIDB4MDIwMDAwMDAgLyogZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0dIT1NUX1BBUkVOICAgIDB4NDAwMDAwMDAKIAogLyogTURJIENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfTURJQ19EQVRBX01BU0sgMHgwMDAwRkZGRgpAQCAtMTUyOCw2ICsxNTcwLDMyIEBACiAjZGVmaW5lIEUxMDAwX01ESUNfSU5UX0VOICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgRTEwMDBfTURJQ19FUlJPUiAgICAgMHg0MDAwMDAwMAogCisjZGVmaW5lIEUxMDAwX0tVTUNUUkxTVEFfTUFTSyAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBX09GRlNFVCAgICAgICAgIDB4MDAxRjAwMDAKKyNkZWZpbmUgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfU0hJRlQgICAxNgorI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBX1JFTiAgICAgICAgICAgIDB4MDAyMDAwMDAKKworI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBX09GRlNFVF9GSUZPX0NUUkwgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEUxMDAwX0tVTUNUUkxTVEFfT0ZGU0VUX0NUUkwgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfSU5CX0NUUkwgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBX09GRlNFVF9ESUFHICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEUxMDAwX0tVTUNUUkxTVEFfT0ZGU0VUX1RJTUVPVVRTICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfSU5CX1BBUkFNICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBX09GRlNFVF9IRF9DVFJMICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEUxMDAwX0tVTUNUUkxTVEFfT0ZGU0VUX00yUF9TRVJERVMgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgRTEwMDBfS1VNQ1RSTFNUQV9PRkZTRVRfTTJQX01PREVTICAgICAgMHgwMDAwMDAxRgorCisvKiBGSUZPIENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfS1VNQ1RSTFNUQV9GSUZPX0NUUkxfUlhfQllQQVNTICAgMHgwMDAwMDAwOAorI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBX0ZJRk9fQ1RSTF9UWF9CWVBBU1MgICAweDAwMDAwODAwCisKKy8qIEluLUJhbmQgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9LVU1DVFJMU1RBX0lOQl9DVFJMX0RJU19QQURESU5HICAweDAwMDAwMDEwCisKKy8qIEhhbGYtRHVwbGV4IENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfS1VNQ1RSTFNUQV9IRF9DVFJMXzEwXzEwMF9ERUZBVUxUIDB4MDAwMDAwMDQKKyNkZWZpbmUgRTEwMDBfS1VNQ1RSTFNUQV9IRF9DVFJMXzEwMDBfREVGQVVMVCAgMHgwMDAwMDAwMAorCiAvKiBMRUQgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9NT0RFX01BU0sgICAgICAgMHgwMDAwMDAwRgogI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9NT0RFX1NISUZUICAgICAgMApAQCAtMTU5MCw2ICsxNjU4LDEzIEBACiAjZGVmaW5lIEUxMDAwX0lDUl9NTkcgICAgICAgICAgIDB4MDAwNDAwMDAgLyogTWFuYWdlYWJpbGl0eSBldmVudCAqLwogI2RlZmluZSBFMTAwMF9JQ1JfRE9DSyAgICAgICAgICAweDAwMDgwMDAwIC8qIERvY2svVW5kb2NrICovCiAjZGVmaW5lIEUxMDAwX0lDUl9JTlRfQVNTRVJURUQgIDB4ODAwMDAwMDAgLyogSWYgdGhpcyBiaXQgYXNzZXJ0ZWQsIHRoZSBkcml2ZXIgc2hvdWxkIGNsYWltIHRoZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjAgMHgwMDEwMDAwMCAvKiBxdWV1ZSAwIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1RYRF9GSUZPX1BBUjAgMHgwMDIwMDAwMCAvKiBxdWV1ZSAwIFR4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX0hPU1RfQVJCX1BBUiAgMHgwMDQwMDAwMCAvKiBob3N0IGFyYiByZWFkIGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1BCX1BBUiAgICAgICAgMHgwMDgwMDAwMCAvKiBwYWNrZXQgYnVmZmVyIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9JQ1JfUlhEX0ZJRk9fUEFSMSAweDAxMDAwMDAwIC8qIHF1ZXVlIDEgUnggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9JQ1JfVFhEX0ZJRk9fUEFSMSAweDAyMDAwMDAwIC8qIHF1ZXVlIDEgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9JQ1JfQUxMX1BBUklUWSAgICAweDAzRjAwMDAwIC8qIGFsbCBwYXJpdHkgZXJyb3IgYml0cyAqLwogCiAvKiBJbnRlcnJ1cHQgQ2F1c2UgU2V0ICovCiAjZGVmaW5lIEUxMDAwX0lDU19UWERXICAgICAgRTEwMDBfSUNSX1RYRFcgICAgICAvKiBUcmFuc21pdCBkZXNjIHdyaXR0ZW4gYmFjayAqLwpAQCAtMTYxMCw2ICsxNjg1LDEyIEBACiAjZGVmaW5lIEUxMDAwX0lDU19BQ0sgICAgICAgRTEwMDBfSUNSX0FDSyAgICAgICAvKiBSZWNlaXZlIEFjayBmcmFtZSAqLwogI2RlZmluZSBFMTAwMF9JQ1NfTU5HICAgICAgIEUxMDAwX0lDUl9NTkcgICAgICAgLyogTWFuYWdlYWJpbGl0eSBldmVudCAqLwogI2RlZmluZSBFMTAwMF9JQ1NfRE9DSyAgICAgIEUxMDAwX0lDUl9ET0NLICAgICAgLyogRG9jay9VbmRvY2sgKi8KKyNkZWZpbmUgRTEwMDBfSUNTX1JYRF9GSUZPX1BBUjAgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjAgLyogcXVldWUgMCBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lDU19UWERfRklGT19QQVIwIEUxMDAwX0lDUl9UWERfRklGT19QQVIwIC8qIHF1ZXVlIDAgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9JQ1NfSE9TVF9BUkJfUEFSICBFMTAwMF9JQ1JfSE9TVF9BUkJfUEFSICAvKiBob3N0IGFyYiByZWFkIGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSUNTX1BCX1BBUiAgICAgICAgRTEwMDBfSUNSX1BCX1BBUiAgICAgICAgLyogcGFja2V0IGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSUNTX1JYRF9GSUZPX1BBUjEgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjEgLyogcXVldWUgMSBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lDU19UWERfRklGT19QQVIxIEUxMDAwX0lDUl9UWERfRklGT19QQVIxIC8qIHF1ZXVlIDEgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLwogCiAvKiBJbnRlcnJ1cHQgTWFzayBTZXQgKi8KICNkZWZpbmUgRTEwMDBfSU1TX1RYRFcgICAgICBFMTAwMF9JQ1JfVFhEVyAgICAgIC8qIFRyYW5zbWl0IGRlc2Mgd3JpdHRlbiBiYWNrICovCkBAIC0xNjMwLDYgKzE3MTEsMTIgQEAKICNkZWZpbmUgRTEwMDBfSU1TX0FDSyAgICAgICBFMTAwMF9JQ1JfQUNLICAgICAgIC8qIFJlY2VpdmUgQWNrIGZyYW1lICovCiAjZGVmaW5lIEUxMDAwX0lNU19NTkcgICAgICAgRTEwMDBfSUNSX01ORyAgICAgICAvKiBNYW5hZ2VhYmlsaXR5IGV2ZW50ICovCiAjZGVmaW5lIEUxMDAwX0lNU19ET0NLICAgICAgRTEwMDBfSUNSX0RPQ0sgICAgICAvKiBEb2NrL1VuZG9jayAqLworI2RlZmluZSBFMTAwMF9JTVNfUlhEX0ZJRk9fUEFSMCBFMTAwMF9JQ1JfUlhEX0ZJRk9fUEFSMCAvKiBxdWV1ZSAwIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1RYRF9GSUZPX1BBUjAgRTEwMDBfSUNSX1RYRF9GSUZPX1BBUjAgLyogcXVldWUgMCBUeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lNU19IT1NUX0FSQl9QQVIgIEUxMDAwX0lDUl9IT1NUX0FSQl9QQVIgIC8qIGhvc3QgYXJiIHJlYWQgYnVmZmVyIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9JTVNfUEJfUEFSICAgICAgICBFMTAwMF9JQ1JfUEJfUEFSICAgICAgICAvKiBwYWNrZXQgYnVmZmVyIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9JTVNfUlhEX0ZJRk9fUEFSMSBFMTAwMF9JQ1JfUlhEX0ZJRk9fUEFSMSAvKiBxdWV1ZSAxIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1RYRF9GSUZPX1BBUjEgRTEwMDBfSUNSX1RYRF9GSUZPX1BBUjEgLyogcXVldWUgMSBUeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCiAKIC8qIEludGVycnVwdCBNYXNrIENsZWFyICovCiAjZGVmaW5lIEUxMDAwX0lNQ19UWERXICAgICAgRTEwMDBfSUNSX1RYRFcgICAgICAvKiBUcmFuc21pdCBkZXNjIHdyaXR0ZW4gYmFjayAqLwpAQCAtMTY1MCw2ICsxNzM3LDEyIEBACiAjZGVmaW5lIEUxMDAwX0lNQ19BQ0sgICAgICAgRTEwMDBfSUNSX0FDSyAgICAgICAvKiBSZWNlaXZlIEFjayBmcmFtZSAqLwogI2RlZmluZSBFMTAwMF9JTUNfTU5HICAgICAgIEUxMDAwX0lDUl9NTkcgICAgICAgLyogTWFuYWdlYWJpbGl0eSBldmVudCAqLwogI2RlZmluZSBFMTAwMF9JTUNfRE9DSyAgICAgIEUxMDAwX0lDUl9ET0NLICAgICAgLyogRG9jay9VbmRvY2sgKi8KKyNkZWZpbmUgRTEwMDBfSU1DX1JYRF9GSUZPX1BBUjAgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjAgLyogcXVldWUgMCBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lNQ19UWERfRklGT19QQVIwIEUxMDAwX0lDUl9UWERfRklGT19QQVIwIC8qIHF1ZXVlIDAgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9JTUNfSE9TVF9BUkJfUEFSICBFMTAwMF9JQ1JfSE9TVF9BUkJfUEFSICAvKiBob3N0IGFyYiByZWFkIGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSU1DX1BCX1BBUiAgICAgICAgRTEwMDBfSUNSX1BCX1BBUiAgICAgICAgLyogcGFja2V0IGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSU1DX1JYRF9GSUZPX1BBUjEgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjEgLyogcXVldWUgMSBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lNQ19UWERfRklGT19QQVIxIEUxMDAwX0lDUl9UWERfRklGT19QQVIxIC8qIHF1ZXVlIDEgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLwogCiAvKiBSZWNlaXZlIENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9SU1QgICAgICAgICAgICAweDAwMDAwMDAxICAgIC8qIFNvZnR3YXJlIHJlc2V0ICovCkBAIC0xNzE5LDYgKzE4MTIsMTIgQEAKICNkZWZpbmUgRTEwMDBfUFNSQ1RMX0JTSVpFMl9TSElGVCAgNiAgICAgICAgICAgIC8qIFNoaWZ0IF9sZWZ0XyA2ICovCiAjZGVmaW5lIEUxMDAwX1BTUkNUTF9CU0laRTNfU0hJRlQgMTQgICAgICAgICAgICAvKiBTaGlmdCBfbGVmdF8gMTQgKi8KIAorLyogU1dfV19TWU5DIGRlZmluaXRpb25zICovCisjZGVmaW5lIEUxMDAwX1NXRldfRUVQX1NNICAgICAweDAwMDEKKyNkZWZpbmUgRTEwMDBfU1dGV19QSFkwX1NNICAgIDB4MDAwMgorI2RlZmluZSBFMTAwMF9TV0ZXX1BIWTFfU00gICAgMHgwMDA0CisjZGVmaW5lIEUxMDAwX1NXRldfTUFDX0NTUl9TTSAweDAwMDgKKwogLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCiAjZGVmaW5lIEUxMDAwX1JEVF9ERUxBWSAweDAwMDBmZmZmICAgICAgLyogRGVsYXkgdGltZXIgKDE9MTAyNHVzKSAqLwogI2RlZmluZSBFMTAwMF9SRFRfRlBEQiAgMHg4MDAwMDAwMCAgICAgIC8qIEZsdXNoIGRlc2NyaXB0b3IgYmxvY2sgKi8KQEAgLTE3OTcsNiArMTg5NiwxMSBAQAogI2RlZmluZSBFMTAwMF9UQ1RMX1JUTEMgICAweDAxMDAwMDAwICAgIC8qIFJlLXRyYW5zbWl0IG9uIGxhdGUgY29sbGlzaW9uICovCiAjZGVmaW5lIEUxMDAwX1RDVExfTlJUVSAgIDB4MDIwMDAwMDAgICAgLyogTm8gUmUtdHJhbnNtaXQgb24gdW5kZXJydW4gKi8KICNkZWZpbmUgRTEwMDBfVENUTF9NVUxSICAgMHgxMDAwMDAwMCAgICAvKiBNdWx0aXBsZSByZXF1ZXN0IHN1cHBvcnQgKi8KKy8qIEV4dGVuZGVkIFRyYW5zbWl0IENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfVENUTF9FWFRfQlNUX01BU0sgIDB4MDAwMDAzRkYgLyogQmFja29mZiBTbG90IFRpbWUgKi8KKyNkZWZpbmUgRTEwMDBfVENUTF9FWFRfR0NFWF9NQVNLIDB4MDAwRkZDMDAgLyogR2lnYWJpdCBDYXJyeSBFeHRlbmQgUGFkZGluZyAqLworCisjZGVmaW5lIERFRkFVTFRfODAwMDNFUzJMQU5fVENUTF9FWFRfR0NFWCAgIDB4MDAwMTAwMDAKIAogLyogUmVjZWl2ZSBDaGVja3N1bSBDb250cm9sICovCiAjZGVmaW5lIEUxMDAwX1JYQ1NVTV9QQ1NTX01BU0sgMHgwMDAwMDBGRiAgIC8qIFBhY2tldCBDaGVja3N1bSBTdGFydCAqLwpAQCAtMTg3NCw2ICsxOTc4LDcgQEAKICNkZWZpbmUgRTEwMDBfTUFOQ19UQ09fUkVTRVQgICAgIDB4MDAwMTAwMDAgLyogVENPIFJlc2V0IE9jY3VycmVkICovCiAjZGVmaW5lIEUxMDAwX01BTkNfUkNWX1RDT19FTiAgICAweDAwMDIwMDAwIC8qIFJlY2VpdmUgVENPIFBhY2tldHMgRW5hYmxlZCAqLwogI2RlZmluZSBFMTAwMF9NQU5DX1JFUE9SVF9TVEFUVVMgMHgwMDA0MDAwMCAvKiBTdGF0dXMgUmVwb3J0aW5nIEVuYWJsZWQgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19SQ1ZfQUxMICAgICAgIDB4MDAwODAwMDAgLyogUmVjZWl2ZSBBbGwgRW5hYmxlZCAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0JMS19QSFlfUlNUX09OX0lERSAgIDB4MDAwNDAwMDAgLyogQmxvY2sgcGh5IHJlc2V0cyAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0VOX01BQ19BRERSX0ZJTFRFUiAgIDB4MDAxMDAwMDAgLyogRW5hYmxlIE1BQyBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmaWx0ZXJpbmcgKi8KQEAgLTE5NjIsMTkgKzIwNjcsMTkgQEAKIC8qIFBDSS1FeCByZWdpc3RlcnMgKi8KIAogLyogUENJLUV4IENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgRTEwMDBfR0NSX1JYRF9OT19TTk9PUAkJCTB4MDAwMDAwMDEKLSNkZWZpbmUgRTEwMDBfR0NSX1JYRFNDV19OT19TTk9PUAkJMHgwMDAwMDAwMgotI2RlZmluZSBFMTAwMF9HQ1JfUlhEU0NSX05PX1NOT09QCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEUxMDAwX0dDUl9UWERfTk9fU05PT1AJCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEUxMDAwX0dDUl9UWERTQ1dfTk9fU05PT1AJCTB4MDAwMDAwMTAKLSNkZWZpbmUgRTEwMDBfR0NSX1RYRFNDUl9OT19TTk9PUAkJMHgwMDAwMDAyMAorI2RlZmluZSBFMTAwMF9HQ1JfUlhEX05PX1NOT09QICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRTEwMDBfR0NSX1JYRFNDV19OT19TTk9PUCAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEUxMDAwX0dDUl9SWERTQ1JfTk9fU05PT1AgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBFMTAwMF9HQ1JfVFhEX05PX1NOT09QICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRTEwMDBfR0NSX1RYRFNDV19OT19TTk9PUCAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEUxMDAwX0dDUl9UWERTQ1JfTk9fU05PT1AgICAgICAgMHgwMDAwMDAyMAogCi0jZGVmaW5lIFBDSV9FWF9OT19TTk9PUF9BTEwgKEUxMDAwX0dDUl9SWERfTk9fU05PT1AJCXwgXAotCQkJCQkJCSBFMTAwMF9HQ1JfUlhEU0NXX05PX1NOT09QCXwgXAotCQkJCQkJCSBFMTAwMF9HQ1JfUlhEU0NSX05PX1NOT09QCXwgXAotCQkJCQkJCSBFMTAwMF9HQ1IgVFhEX05PX1NOT09QCQl8IFwKLQkJCQkJCQkgRTEwMDBfR0NSX1RYRFNDV19OT19TTk9PUAl8IFwKLQkJCQkJCQkgRTEwMDBfR0NSX1RYRFNDUl9OT19TTk9PUCkKKyNkZWZpbmUgUENJX0VYX05PX1NOT09QX0FMTCAoRTEwMDBfR0NSX1JYRF9OT19TTk9PUCAgICAgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9HQ1JfUlhEU0NXX05PX1NOT09QICAgICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0dDUl9SWERTQ1JfTk9fU05PT1AgICAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfR0NSX1RYRF9OT19TTk9PUCAgICAgICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9HQ1JfVFhEU0NXX05PX1NOT09QICAgICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0dDUl9UWERTQ1JfTk9fU05PT1ApCiAKICNkZWZpbmUgRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWCAweDA4MDAwMDAwCiAvKiBGdW5jdGlvbiBBY3RpdmUgYW5kIFBvd2VyIFN0YXRlIHRvIE1ORyAqLwpAQCAtMjAzNSwxMiArMjE0MCwxNCBAQAogI2RlZmluZSBFRVBST01fSU5JVF9DT05UUk9MMV9SRUcgICAgICAweDAwMEEKICNkZWZpbmUgRUVQUk9NX0lOSVRfQ09OVFJPTDJfUkVHICAgICAgMHgwMDBGCiAjZGVmaW5lIEVFUFJPTV9JTklUX0NPTlRST0wzX1BPUlRfQiAgIDB4MDAxNAorI2RlZmluZSBFRVBST01fSU5JVF8zR0lPXzMgICAgICAgICAgICAweDAwMUEKICNkZWZpbmUgRUVQUk9NX0lOSVRfQ09OVFJPTDNfUE9SVF9BICAgMHgwMDI0CiAjZGVmaW5lIEVFUFJPTV9DRkcgICAgICAgICAgICAgICAgICAgIDB4MDAxMgogI2RlZmluZSBFRVBST01fRkxBU0hfVkVSU0lPTiAgICAgICAgICAweDAwMzIKICNkZWZpbmUgRUVQUk9NX0NIRUNLU1VNX1JFRyAgICAgICAgICAgMHgwMDNGCiAKICNkZWZpbmUgRTEwMDBfRUVQUk9NX0NGR19ET05FICAgICAgICAgMHgwMDA0MDAwMCAgIC8qIE1ORyBjb25maWcgY3ljbGUgZG9uZSAqLworI2RlZmluZSBFMTAwMF9FRVBST01fQ0ZHX0RPTkVfUE9SVF8xICAweDAwMDgwMDAwICAgLyogLi4uZm9yIHNlY29uZCBwb3J0ICovCiAKIC8qIFdvcmQgZGVmaW5pdGlvbnMgZm9yIElEIExFRCBTZXR0aW5ncyAqLwogI2RlZmluZSBJRF9MRURfUkVTRVJWRURfMDAwMCAweDAwMDAKQEAgLTIwODQsNiArMjE5MSw5IEBACiAjZGVmaW5lIEVFUFJPTV9XT1JEMEZfQU5FICAgICAgICAweDA4MDAKICNkZWZpbmUgRUVQUk9NX1dPUkQwRl9TV1BESU9fRVhUIDB4MDBGMAogCisvKiBNYXNrIGJpdHMgZm9yIGZpZWxkcyBpbiBXb3JkIDB4MWEgb2YgdGhlIEVFUFJPTSAqLworI2RlZmluZSBFRVBST01fV09SRDFBX0FTUE1fTUFTSyAgMHgwMDBDCisKIC8qIEZvciBjaGVja3N1bW1pbmcsIHRoZSBzdW0gb2YgYWxsIHdvcmRzIGluIHRoZSBFRVBST00gc2hvdWxkIGVxdWFsIDB4QkFCQS4gKi8KICNkZWZpbmUgRUVQUk9NX1NVTSAweEJBQkEKIApAQCAtMjEyNiw4ICsyMjM2LDExIEBACiAKICNkZWZpbmUgREVGQVVMVF84MjU0Ml9USVBHX0lQR1IyIDEwCiAjZGVmaW5lIERFRkFVTFRfODI1NDNfVElQR19JUEdSMiA2CisjZGVmaW5lIERFRkFVTFRfODAwMDNFUzJMQU5fVElQR19JUEdSMiA3CiAjZGVmaW5lIEUxMDAwX1RJUEdfSVBHUjJfU0hJRlQgIDIwCiAKKyNkZWZpbmUgREVGQVVMVF84MDAwM0VTMkxBTl9USVBHX0lQR1RfMTBfMTAwIDB4MDAwMDAwMDkKKyNkZWZpbmUgREVGQVVMVF84MDAwM0VTMkxBTl9USVBHX0lQR1RfMTAwMCAgIDB4MDAwMDAwMDgKICNkZWZpbmUgRTEwMDBfVFhETUFDX0RQUCAweDAwMDAwMDAxCiAKIC8qIEFkYXB0aXZlIElGUyBkZWZpbmVzICovCkBAIC0yMzY4LDYgKzI0ODEsNzggQEAKIAogI2RlZmluZSBJR1AwMUUxMDAwX0FOQUxPR19SRUdTX1BBR0UgIDB4MjBDMAogCisvKiBCaXRzLi4uCisgKiAxNS01OiBwYWdlCisgKiA0LTA6IHJlZ2lzdGVyIG9mZnNldAorICovCisjZGVmaW5lIEdHODI1NjNfUEFHRV9TSElGVCAgICAgICAgNQorI2RlZmluZSBHRzgyNTYzX1JFRyhwYWdlLCByZWcpICAgIFwKKyAgICAgICAgKCgocGFnZSkgPDwgR0c4MjU2M19QQUdFX1NISUZUKSB8ICgocmVnKSAmIE1BWF9QSFlfUkVHX0FERFJFU1MpKQorI2RlZmluZSBHRzgyNTYzX01JTl9BTFRfUkVHICAgICAgIDMwCisKKy8qIEdHODI1NjMgU3BlY2lmaWMgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdHODI1NjNfUEhZX1NQRUNfQ1RSTCAgICAgICAgICAgXAorICAgICAgICBHRzgyNTYzX1JFRygwLCAxNikgLyogUEhZIFNwZWNpZmljIENvbnRyb2wgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfU1BFQ19TVEFUVVMgICAgICAgICBcCisgICAgICAgIEdHODI1NjNfUkVHKDAsIDE3KSAvKiBQSFkgU3BlY2lmaWMgU3RhdHVzICovCisjZGVmaW5lIEdHODI1NjNfUEhZX0lOVF9FTkFCTEUgICAgICAgICAgXAorICAgICAgICBHRzgyNTYzX1JFRygwLCAxOCkgLyogSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9TUEVDX1NUQVRVU18yICAgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMCwgMTkpIC8qIFBIWSBTcGVjaWZpYyBTdGF0dXMgMiAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9SWF9FUlJfQ05UUiAgICAgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMCwgMjEpIC8qIFJlY2VpdmUgRXJyb3IgQ291bnRlciAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9QQUdFX1NFTEVDVCAgICAgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMCwgMjIpIC8qIFBhZ2UgU2VsZWN0ICovCisjZGVmaW5lIEdHODI1NjNfUEhZX1NQRUNfQ1RSTF8yICAgICAgICAgXAorICAgICAgICBHRzgyNTYzX1JFRygwLCAyNikgLyogUEhZIFNwZWNpZmljIENvbnRyb2wgMiAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9QQUdFX1NFTEVDVF9BTFQgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMCwgMjkpIC8qIEFsdGVybmF0ZSBQYWdlIFNlbGVjdCAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9URVNUX0NMS19DVFJMICAgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMCwgMzApIC8qIFRlc3QgQ2xvY2sgQ29udHJvbCAodXNlIHJlZy4gMjkgdG8gc2VsZWN0KSAqLworCisjZGVmaW5lIEdHODI1NjNfUEhZX01BQ19TUEVDX0NUUkwgICAgICAgXAorICAgICAgICBHRzgyNTYzX1JFRygyLCAyMSkgLyogTUFDIFNwZWNpZmljIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfTUFDX1NQRUNfQ1RSTF8yICAgICBcCisgICAgICAgIEdHODI1NjNfUkVHKDIsIDI2KSAvKiBNQUMgU3BlY2lmaWMgQ29udHJvbCAyICovCisKKyNkZWZpbmUgR0c4MjU2M19QSFlfRFNQX0RJU1RBTkNFICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoNSwgMjYpIC8qIERTUCBEaXN0YW5jZSAqLworCisvKiBQYWdlIDE5MyAtIFBvcnQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfS01STl9NT0RFX0NUUkwgICBcCisgICAgICAgIEdHODI1NjNfUkVHKDE5MywgMTYpIC8qIEt1bWVyYW4gTW9kZSBDb250cm9sICovCisjZGVmaW5lIEdHODI1NjNfUEhZX1BPUlRfUkVTRVQgICAgICAgICAgXAorICAgICAgICBHRzgyNTYzX1JFRygxOTMsIDE3KSAvKiBQb3J0IFJlc2V0ICovCisjZGVmaW5lIEdHODI1NjNfUEhZX1JFVklTSU9OX0lEICAgICAgICAgXAorICAgICAgICBHRzgyNTYzX1JFRygxOTMsIDE4KSAvKiBSZXZpc2lvbiBJRCAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9ERVZJQ0VfSUQgICAgICAgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMTkzLCAxOSkgLyogRGV2aWNlIElEICovCisjZGVmaW5lIEdHODI1NjNfUEhZX1BXUl9NR01UX0NUUkwgICAgICAgXAorICAgICAgICBHRzgyNTYzX1JFRygxOTMsIDIwKSAvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfUkFURV9BREFQVF9DVFJMICAgICBcCisgICAgICAgIEdHODI1NjNfUkVHKDE5MywgMjUpIC8qIFJhdGUgQWRhcHRhdGlvbiBDb250cm9sICovCisKKy8qIFBhZ2UgMTk0IC0gS01STiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfS01STl9GSUZPX0NUUkxfU1RBVCBcCisgICAgICAgIEdHODI1NjNfUkVHKDE5NCwgMTYpIC8qIEZJRk8ncyBDb250cm9sL1N0YXR1cyAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9LTVJOX0NUUkwgICAgICAgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMTk0LCAxNykgLyogQ29udHJvbCAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9JTkJBTkRfQ1RSTCAgICAgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMTk0LCAxOCkgLyogSW5iYW5kIENvbnRyb2wgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfS01STl9ESUFHTk9TVElDICAgICBcCisgICAgICAgIEdHODI1NjNfUkVHKDE5NCwgMTkpIC8qIERpYWdub3N0aWMgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfQUNLX1RJTUVPVVRTICAgICAgICBcCisgICAgICAgIEdHODI1NjNfUkVHKDE5NCwgMjApIC8qIEFja25vd2xlZGdlIFRpbWVvdXRzICovCisjZGVmaW5lIEdHODI1NjNfUEhZX0FEVl9BQklMSVRZICAgICAgICAgXAorICAgICAgICBHRzgyNTYzX1JFRygxOTQsIDIxKSAvKiBBZHZlcnRpc2VkIEFiaWxpdHkgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfTElOS19QQVJUTkVSX0FEVl9BQklMSVRZIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMTk0LCAyMykgLyogTGluayBQYXJ0bmVyIEFkdmVydGlzZWQgQWJpbGl0eSAqLworI2RlZmluZSBHRzgyNTYzX1BIWV9BRFZfTkVYVF9QQUdFICAgICAgIFwKKyAgICAgICAgR0c4MjU2M19SRUcoMTk0LCAyNCkgLyogQWR2ZXJ0aXNlZCBOZXh0IFBhZ2UgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfTElOS19QQVJUTkVSX0FEVl9ORVhUX1BBR0UgXAorICAgICAgICBHRzgyNTYzX1JFRygxOTQsIDI1KSAvKiBMaW5rIFBhcnRuZXIgQWR2ZXJ0aXNlZCBOZXh0IHBhZ2UgKi8KKyNkZWZpbmUgR0c4MjU2M19QSFlfS01STl9NSVNDICAgICAgICAgICBcCisgICAgICAgIEdHODI1NjNfUkVHKDE5NCwgMjYpIC8qIE1pc2MuICovCiAKIC8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9DUl9TUEVFRF9TRUxFQ1RfTVNCIDB4MDA0MCAgLyogYml0cyA2LDEzOiAxMD0xMDAwLCAwMT0xMDAsIDAwPTEwICovCkBAIC0yNjgxLDYgKzI4NjYsMTEzIEBACiAjZGVmaW5lIElHUDAxRTEwMDBfQU5BTE9HX0ZVU0VfRklORV8xICAgICAgICAgICAgICAgMHgwMDgwCiAjZGVmaW5lIElHUDAxRTEwMDBfQU5BTE9HX0ZVU0VfRklORV8xMCAgICAgICAgICAgICAgMHgwNTAwCiAKKy8qIEdHODI1NjMgUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAoUGFnZSAwLCBSZWdpc3RlciAxNiAqLworI2RlZmluZSBHRzgyNTYzX1BTQ1JfRElTQUJMRV9KQUJCRVIgICAgICAgICAgICAgMHgwMDAxIC8qIDE9RGlzYWJsZSBKYWJiZXIgKi8KKyNkZWZpbmUgR0c4MjU2M19QU0NSX1BPTEFSSVRZX1JFVkVSU0FMX0RJU0FCTEUgIDB4MDAwMiAvKiAxPVBvbGFyaXR5IFJldmVyc2FsIERpc2FibGVkICovCisjZGVmaW5lIEdHODI1NjNfUFNDUl9QT1dFUl9ET1dOICAgICAgICAgICAgICAgICAweDAwMDQgLyogMT1Qb3dlciBEb3duICovCisjZGVmaW5lIEdHODI1NjNfUFNDUl9DT1BQRVJfVFJBTlNNSVRFUl9ESVNBQkxFICAweDAwMDggLyogMT1UcmFuc21pdHRlciBEaXNhYmxlZCAqLworI2RlZmluZSBHRzgyNTYzX1BTQ1JfQ1JPU1NPVkVSX01PREVfTUFTSyAgICAgICAgMHgwMDYwCisjZGVmaW5lIEdHODI1NjNfUFNDUl9DUk9TU09WRVJfTU9ERV9NREkgICAgICAgICAweDAwMDAgLyogMDA9TWFudWFsIE1ESSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIEdHODI1NjNfUFNDUl9DUk9TU09WRVJfTU9ERV9NRElYICAgICAgICAweDAwMjAgLyogMDE9TWFudWFsIE1ESVggY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBHRzgyNTYzX1BTQ1JfQ1JPU1NPVkVSX01PREVfQVVUTyAgICAgICAgMHgwMDYwIC8qIDExPUF1dG9tYXRpYyBjcm9zc292ZXIgKi8KKyNkZWZpbmUgR0c4MjU2M19QU0NSX0VOQUxCRV9FWFRFTkRFRF9ESVNUQU5DRSAgIDB4MDA4MCAvKiAxPUVuYWJsZSBFeHRlbmRlZCBEaXN0YW5jZSAqLworI2RlZmluZSBHRzgyNTYzX1BTQ1JfRU5FUkdZX0RFVEVDVF9NQVNLICAgICAgICAgMHgwMzAwCisjZGVmaW5lIEdHODI1NjNfUFNDUl9FTkVSR1lfREVURUNUX09GRiAgICAgICAgICAweDAwMDAgLyogMDAsMDE9T2ZmICovCisjZGVmaW5lIEdHODI1NjNfUFNDUl9FTkVSR1lfREVURUNUX1JYICAgICAgICAgICAweDAyMDAgLyogMTA9U2Vuc2Ugb24gUnggb25seSAoRW5lcmd5IERldGVjdCkgKi8KKyNkZWZpbmUgR0c4MjU2M19QU0NSX0VORVJHWV9ERVRFQ1RfUlhfVE0gICAgICAgIDB4MDMwMCAvKiAxMT1TZW5zZSBhbmQgVHggTkxQICovCisjZGVmaW5lIEdHODI1NjNfUFNDUl9GT1JDRV9MSU5LX0dPT0QgICAgICAgICAgICAweDA0MDAgLyogMT1Gb3JjZSBMaW5rIEdvb2QgKi8KKyNkZWZpbmUgR0c4MjU2M19QU0NSX0RPV05TSElGVF9FTkFCTEUgICAgICAgICAgIDB4MDgwMCAvKiAxPUVuYWJsZSBEb3duc2hpZnQgKi8KKyNkZWZpbmUgR0c4MjU2M19QU0NSX0RPV05TSElGVF9DT1VOVEVSX01BU0sgICAgIDB4NzAwMAorI2RlZmluZSBHRzgyNTYzX1BTQ1JfRE9XTlNISUZUX0NPVU5URVJfU0hJRlQgICAgMTIKKworLyogUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAoUGFnZSAwLCBSZWdpc3RlciAxNykgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX0pBQkJFUiAgICAgICAgICAgICAgICAweDAwMDEgLyogMT1KYWJiZXIgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX1BPTEFSSVRZICAgICAgICAgICAgICAweDAwMDIgLyogMT1Qb2xhcml0eSBSZXZlcnNlZCAqLworI2RlZmluZSBHRzgyNTYzX1BTU1JfTElOSyAgICAgICAgICAgICAgICAgIDB4MDAwOCAvKiAxPUxpbmsgaXMgVXAgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX0VORVJHWV9ERVRFQ1QgICAgICAgICAweDAwMTAgLyogMT1TbGVlcCwgMD1BY3RpdmUgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX0RPV05TSElGVCAgICAgICAgICAgICAweDAwMjAgLyogMT1Eb3duc2hpZnQgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX0NST1NTT1ZFUl9TVEFUVVMgICAgICAweDAwNDAgLyogMT1NRElYLCAwPU1ESSAqLworI2RlZmluZSBHRzgyNTYzX1BTU1JfUlhfUEFVU0VfRU5BQkxFRCAgICAgIDB4MDEwMCAvKiAxPVJlY2VpdmUgUGF1c2UgRW5hYmxlZCAqLworI2RlZmluZSBHRzgyNTYzX1BTU1JfVFhfUEFVU0VfRU5BQkxFRCAgICAgIDB4MDIwMCAvKiAxPVRyYW5zbWl0IFBhdXNlIEVuYWJsZWQgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX0xJTktfVVAgICAgICAgICAgICAgICAweDA0MDAgLyogMT1MaW5rIFVwICovCisjZGVmaW5lIEdHODI1NjNfUFNTUl9TUEVFRF9EVVBMRVhfUkVTT0xWRUQgMHgwODAwIC8qIDE9UmVzb2x2ZWQgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX1BBR0VfUkVDRUlWRUQgICAgICAgICAweDEwMDAgLyogMT1QYWdlIFJlY2VpdmVkICovCisjZGVmaW5lIEdHODI1NjNfUFNTUl9EVVBMRVggICAgICAgICAgICAgICAgMHgyMDAwIC8qIDEtRnVsbC1EdXBsZXggKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX1NQRUVEX01BU0sgICAgICAgICAgICAweEMwMDAKKyNkZWZpbmUgR0c4MjU2M19QU1NSX1NQRUVEXzEwTUJQUyAgICAgICAgICAweDAwMDAgLyogMDA9MTBNYnBzICovCisjZGVmaW5lIEdHODI1NjNfUFNTUl9TUEVFRF8xMDBNQlBTICAgICAgICAgMHg0MDAwIC8qIDAxPTEwME1icHMgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSX1NQRUVEXzEwMDBNQlBTICAgICAgICAweDgwMDAgLyogMTA9MTAwME1icHMgKi8KKworLyogUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAyIChQYWdlIDAsIFJlZ2lzdGVyIDE5KSAqLworI2RlZmluZSBHRzgyNTYzX1BTU1IyX0pBQkJFUiAgICAgICAgICAgICAgICAweDAwMDEgLyogMT1KYWJiZXIgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSMl9QT0xBUklUWV9DSEFOR0VEICAgICAgMHgwMDAyIC8qIDE9UG9sYXJpdHkgQ2hhbmdlZCAqLworI2RlZmluZSBHRzgyNTYzX1BTU1IyX0VORVJHWV9ERVRFQ1RfQ0hBTkdFRCAweDAwMTAgLyogMT1FbmVyZ3kgRGV0ZWN0IENoYW5nZWQgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSMl9ET1dOU0hJRlRfSU5URVJSVVBUICAgMHgwMDIwIC8qIDE9RG93bnNoaWZ0IERldGVjdGVkICovCisjZGVmaW5lIEdHODI1NjNfUFNTUjJfTURJX0NST1NTT1ZFUl9DSEFOR0UgIDB4MDA0MCAvKiAxPUNyb3Nzb3ZlciBDaGFuZ2VkICovCisjZGVmaW5lIEdHODI1NjNfUFNTUjJfRkFMU0VfQ0FSUklFUiAgICAgICAgIDB4MDEwMCAvKiAxPUZhbHNlIENhcnJpZXIgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSMl9TWU1CT0xfRVJST1IgICAgICAgICAgMHgwMjAwIC8qIDE9U3ltYm9sIEVycm9yICovCisjZGVmaW5lIEdHODI1NjNfUFNTUjJfTElOS19TVEFUVVNfQ0hBTkdFRCAgIDB4MDQwMCAvKiAxPUxpbmsgU3RhdHVzIENoYW5nZWQgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSMl9BVVRPX05FR19DT01QTEVURUQgICAgMHgwODAwIC8qIDE9QXV0by1OZWcgQ29tcGxldGVkICovCisjZGVmaW5lIEdHODI1NjNfUFNTUjJfUEFHRV9SRUNFSVZFRCAgICAgICAgIDB4MTAwMCAvKiAxPVBhZ2UgUmVjZWl2ZWQgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSMl9EVVBMRVhfQ0hBTkdFRCAgICAgICAgMHgyMDAwIC8qIDE9RHVwbGV4IENoYW5nZWQgKi8KKyNkZWZpbmUgR0c4MjU2M19QU1NSMl9TUEVFRF9DSEFOR0VEICAgICAgICAgMHg0MDAwIC8qIDE9U3BlZWQgQ2hhbmdlZCAqLworI2RlZmluZSBHRzgyNTYzX1BTU1IyX0FVVE9fTkVHX0VSUk9SICAgICAgICAweDgwMDAgLyogMT1BdXRvLU5lZyBFcnJvciAqLworCisvKiBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWdpc3RlciAyIChQYWdlIDAsIFJlZ2lzdGVyIDI2KSAqLworI2RlZmluZSBHRzgyNTYzX1BTQ1IyXzEwQlRfUE9MQVJJVFlfRk9SQ0UgICAgICAgICAgIDB4MDAwMiAvKiAxPUZvcmNlIE5lZ2F0aXZlIFBvbGFyaXR5ICovCisjZGVmaW5lIEdHODI1NjNfUFNDUjJfMTAwME1CX1RFU1RfU0VMRUNUX01BU0sgICAgICAgMHgwMDBDCisjZGVmaW5lIEdHODI1NjNfUFNDUjJfMTAwME1CX1RFU1RfU0VMRUNUX05PUk1BTCAgICAgMHgwMDAwIC8qIDAwLDAxPU5vcm1hbCBPcGVyYXRpb24gKi8KKyNkZWZpbmUgR0c4MjU2M19QU0NSMl8xMDAwTUJfVEVTVF9TRUxFQ1RfMTEyTlMgICAgICAweDAwMDggLyogMTA9U2VsZWN0IDExMm5zIFNlcXVlbmNlICovCisjZGVmaW5lIEdHODI1NjNfUFNDUjJfMTAwME1CX1RFU1RfU0VMRUNUXzE2TlMgICAgICAgMHgwMDBDIC8qIDExPVNlbGVjdCAxNm5zIFNlcXVlbmNlICovCisjZGVmaW5lIEdHODI1NjNfUFNDUjJfUkVWRVJTRV9BVVRPX05FRyAgICAgICAgICAgICAgMHgyMDAwIC8qIDE9UmV2ZXJzZSBBdXRvLU5lZ290aWF0aW9uICovCisjZGVmaW5lIEdHODI1NjNfUFNDUjJfMTAwMEJUX0RJU0FCTEUgICAgICAgICAgICAgICAgMHg0MDAwIC8qIDE9RGlzYWJsZSAxMDAwQkFTRS1UICovCisjZGVmaW5lIEdHODI1NjNfUFNDUjJfVFJBTlNNSVRFUl9UWVBFX01BU0sgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIEdHODI1NjNfUFNDUjJfVFJBTlNNSVRURVJfVFlQRV9DTEFTU19CICAgICAgMHgwMDAwIC8qIDA9Q2xhc3MgQiAqLworI2RlZmluZSBHRzgyNTYzX1BTQ1IyX1RSQU5TTUlUVEVSX1RZUEVfQ0xBU1NfQSAgICAgIDB4ODAwMCAvKiAxPUNsYXNzIEEgKi8KKworLyogTUFDIFNwZWNpZmljIENvbnRyb2wgUmVnaXN0ZXIgKFBhZ2UgMiwgUmVnaXN0ZXIgMjEpICovCisvKiBUeCBjbG9jayBzcGVlZCBmb3IgTGluayBEb3duIGFuZCAxMDAwQkFTRS1UIGZvciB0aGUgZm9sbG93aW5nIHNwZWVkcyAqLworI2RlZmluZSBHRzgyNTYzX01TQ1JfVFhfQ0xLX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNworI2RlZmluZSBHRzgyNTYzX01TQ1JfVFhfQ0xLXzEwTUJQU18yXzVNSFogICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBHRzgyNTYzX01TQ1JfVFhfQ0xLXzEwME1CUFNfMjVNSFogICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBHRzgyNTYzX01TQ1JfVFhfQ0xLXzEwMDBNQlBTXzJfNU1IWiAgICAgICAgIDB4MDAwNgorI2RlZmluZSBHRzgyNTYzX01TQ1JfVFhfQ0xLXzEwMDBNQlBTXzI1TUhaICAgICAgICAgIDB4MDAwNworCisjZGVmaW5lIEdHODI1NjNfTVNDUl9BU1NFUlRfQ1JTX09OX1RYICAgICAgICAgICAgICAgMHgwMDEwIC8qIDE9QXNzZXJ0ICovCisKKy8qIERTUCBEaXN0YW5jZSBSZWdpc3RlciAoUGFnZSA1LCBSZWdpc3RlciAyNikgKi8KKyNkZWZpbmUgR0c4MjU2M19EU1BEX0NBQkxFX0xFTkdUSCAgICAgICAgICAgICAgIDB4MDAwNyAvKiAwID0gPDUwTTsKKwkJCQkJCQkgICAgICAxID0gNTAtODBNOworCQkJCQkJCSAgICAgIDIgPSA4MC0xMTBNOworCQkJCQkJCSAgICAgIDMgPSAxMTAtMTQwTTsKKwkJCQkJCQkgICAgICA0ID0gPjE0ME0gKi8KKworLyogS3VtZXJhbiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKFBhZ2UgMTkzLCBSZWdpc3RlciAxNikgKi8KKyNkZWZpbmUgR0c4MjU2M19LTUNSX1BIWV9MRURTX0VOICAgICAgICAgICAgICAgICAgICAweDAwMjAgLyogMT1QSFkgTEVEcywgMD1LdW1lcmFuIEluYmFuZCBMRURzICovCisjZGVmaW5lIEdHODI1NjNfS01DUl9GT1JDRV9MSU5LX1VQICAgICAgICAgICAgICAgICAgMHgwMDQwIC8qIDE9Rm9yY2UgTGluayBVcCAqLworI2RlZmluZSBHRzgyNTYzX0tNQ1JfU1VQUFJFU1NfU0dNSUlfRVBEX0VYVCAgICAgICAgIDB4MDA4MAorI2RlZmluZSBHRzgyNTYzX0tNQ1JfTURJT19CVVNfU1BFRURfU0VMRUNUX01BU0sgICAgIDB4MDQwMAorI2RlZmluZSBHRzgyNTYzX0tNQ1JfTURJT19CVVNfU1BFRURfU0VMRUNUICAgICAgICAgIDB4MDQwMCAvKiAxPTYuMjVNSHosIDA9MC44TUh6ICovCisjZGVmaW5lIEdHODI1NjNfS01DUl9QQVNTX0ZBTFNFX0NBUlJJRVIgICAgICAgICAgICAgMHgwODAwCisKKy8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlciAoUGFnZSAxOTMsIFJlZ2lzdGVyIDIwKSAqLworI2RlZmluZSBHRzgyNTYzX1BNQ1JfRU5BQkxFX0VMRUNUUklDQUxfSURMRSAgICAgICAgIDB4MDAwMSAvKiAxPUVuYWxiZSBTRVJERVMgRWxlY3RyaWNhbCBJZGxlICovCisjZGVmaW5lIEdHODI1NjNfUE1DUl9ESVNBQkxFX1BPUlQgICAgICAgICAgICAgICAgICAgMHgwMDAyIC8qIDE9RGlzYWJsZSBQb3J0ICovCisjZGVmaW5lIEdHODI1NjNfUE1DUl9ESVNBQkxFX1NFUkRFUyAgICAgICAgICAgICAgICAgMHgwMDA0IC8qIDE9RGlzYWJsZSBTRVJERVMgKi8KKyNkZWZpbmUgR0c4MjU2M19QTUNSX1JFVkVSU0VfQVVUT19ORUcgICAgICAgICAgICAgICAweDAwMDggLyogMT1FbmFibGUgUmV2ZXJzZSBBdXRvLU5lZ290aWF0aW9uICovCisjZGVmaW5lIEdHODI1NjNfUE1DUl9ESVNBQkxFXzEwMDBfTk9OX0QwICAgICAgICAgICAgMHgwMDEwIC8qIDE9RGlzYWJsZSAxMDAwTWJwcyBBdXRvLU5lZyBpbiBub24gRDAgKi8KKyNkZWZpbmUgR0c4MjU2M19QTUNSX0RJU0FCTEVfMTAwMCAgICAgICAgICAgICAgICAgICAweDAwMjAgLyogMT1EaXNhYmxlIDEwMDBNYnBzIEF1dG8tTmVnIEFsd2F5cyAqLworI2RlZmluZSBHRzgyNTYzX1BNQ1JfUkVWRVJTRV9BVVRPX05FR19EMEEgICAgICAgICAgIDB4MDA0MCAvKiAxPUVuYWJsZSBEMGEgUmV2ZXJzZSBBdXRvLU5lZ290aWF0aW9uICovCisjZGVmaW5lIEdHODI1NjNfUE1DUl9GT1JDRV9QT1dFUl9TVEFURSAgICAgICAgICAgICAgMHgwMDgwIC8qIDE9Rm9yY2UgUG93ZXIgU3RhdGUgKi8KKyNkZWZpbmUgR0c4MjU2M19QTUNSX1BST0dSQU1NRURfUE9XRVJfU1RBVEVfTUFTSyAgICAweDAzMDAKKyNkZWZpbmUgR0c4MjU2M19QTUNSX1BST0dSQU1NRURfUE9XRVJfU1RBVEVfRFIgICAgICAweDAwMDAgLyogMDA9RHIgKi8KKyNkZWZpbmUgR0c4MjU2M19QTUNSX1BST0dSQU1NRURfUE9XRVJfU1RBVEVfRDBVICAgICAweDAxMDAgLyogMDE9RDB1ICovCisjZGVmaW5lIEdHODI1NjNfUE1DUl9QUk9HUkFNTUVEX1BPV0VSX1NUQVRFX0QwQSAgICAgMHgwMjAwIC8qIDEwPUQwYSAqLworI2RlZmluZSBHRzgyNTYzX1BNQ1JfUFJPR1JBTU1FRF9QT1dFUl9TVEFURV9EMyAgICAgIDB4MDMwMCAvKiAxMT1EMyAqLworCisvKiBJbi1CYW5kIENvbnRyb2wgUmVnaXN0ZXIgKFBhZ2UgMTk0LCBSZWdpc3RlciAxOCkgKi8KKyNkZWZpbmUgR0c4MjU2M19JQ1JfRElTX1BBRERJTkcgICAgICAgICAgICAgICAgICAgICAweDAwMTAgLyogRGlzYWJsZSBQYWRkaW5nIFVzZSAqLworCiAKIC8qIEJpdCBkZWZpbml0aW9ucyBmb3IgdmFsaWQgUEhZIElEcy4gKi8KIC8qIEkgPSBJbnRlZ3JhdGVkCkBAIC0yNjk1LDYgKzI5ODcsNyBAQAogI2RlZmluZSBNODhFMTAxMV9JX1JFVl80ICAgMHgwNAogI2RlZmluZSBNODhFMTExMV9JX1BIWV9JRCAgMHgwMTQxMENDMAogI2RlZmluZSBMMUxYVDk3MUFfUEhZX0lEICAgMHgwMDEzNzhFMAorI2RlZmluZSBHRzgyNTYzX0VfUEhZX0lEICAgMHgwMTQxMENBMAogCiAvKiBNaXNjZWxsYW5lb3VzIFBIWSBiaXQgZGVmaW5pdGlvbnMuICovCiAjZGVmaW5lIFBIWV9QUkVBTUJMRSAgICAgICAgMHhGRkZGRkZGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCmluZGV4IDMxZTMzMjkuLjQ5Y2QwOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKQEAgLTI5LDYgKzI5LDIzIEBACiAjaW5jbHVkZSAiZTEwMDAuaCIKIAogLyogQ2hhbmdlIExvZworICogNy4wLjMzICAgICAgMy1GZWItMjAwNgorICogICBvIEFkZGVkIGFub3RoZXIgZml4IGZvciB0aGUgcGFzcyBmYWxzZSBjYXJyaWVyIGJpdAorICogNy4wLjMyICAgICAgMjQtSmFuLTIwMDYKKyAqICAgbyBOZWVkIHRvIHJlYnVpbGQgd2l0aCBub2V3IHZlcnNpb24gbnVtYmVyIGZvciB0aGUgcGFzcyBmYWxzZSBjYXJyaWVyIAorICogICAgIGZpeCBpbiBlMTAwMF9ody5jCisgKiA3LjAuMzAgICAgICAxOC1KYW4tMjAwNgorICogICBvIGZpeHVwIGZvciB0c28gd29ya2Fyb3VuZCB0byBkaXNhYmxlIGl0IGZvciBwY2kteAorICogICBvIGZpeCBtZW0gbGVhayBvbiA4MjU0MgorICogICBvIGZpeGVzIGZvciAxMCBNYi9zIGNvbm5lY3Rpb25zIGFuZCBpbmNvcnJlY3Qgc3RhdHMKKyAqIDcuMC4yOCAgICAgIDAxLzA2LzIwMDYKKyAqICAgbyBoYXJkd2FyZSB3b3JrYXJvdW5kIHRvIG9ubHkgc2V0ICJzcGVlZCBtb2RlIiBiaXQgZm9yIDFHIGxpbmsuCisgKiA3LjAuMjYgICAgICAxMi8yMy8yMDA1CisgKiAgIG8gd2FrZSBvbiBsYW4gc3VwcG9ydCBtb2RpZmllZCBmb3IgZGV2aWNlIElEIDEwQjUKKyAqICAgbyBmaXggZGhjcCArIHZsYW4gaXNzdWUgbm90IG1ha2luZyBpdCB0byB0aGUgaUFNVCBmaXJtd2FyZQorICogNy4wLjI0ICAgICAgMTIvOS8yMDA1CisgKiAgIG8gTmV3IGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoZSBHaWdhYml0IE5JQyBlbWJlZGRlZCBpbiB0aGUgc291dGggYnJpZGdlCisgKiAgIG8gRml4ZXMgdG8gdGhlIHJlY3ljbGluZyBsb2dpYyAoc2tiLT50YWlsKSBmcm9tIElCTSBMVEMKICAqIDYuMy45CTEyLzE2LzIwMDUKICAqICAgbyBpbmNvcnBvcmF0ZSBmaXggZm9yIHJlY3ljbGVkIHNrYnMgZnJvbSBJQk0gTFRDCiAgKiA2LjMuNwkxMS8xOC8yMDA1CkBAIC00Niw1NCArNjMsOCBAQAogICogICAgIHJ4X2J1ZmZlcl9sZW4KICAqIDYuMy4xCTkvMTkvMDUKICAqICAgbyBVc2UgYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgaW4gVHggSHVuZyBEZXRlY3QgbG9naWMgCi0gICAgICAgKGUxMDAwX2NsZWFuX3R4X2lycSkKKyAqICAgICAgKGUxMDAwX2NsZWFuX3R4X2lycSkKICAqICAgbyBTdXBwb3J0IGZvciA4MDg2OjEwQjUgZGV2aWNlIChRdWFkIFBvcnQpCi0gKiA2LjIuMTQJOS8xNS8wNQotICogICBvIEluIEFNVCBlbmFibGVkIGNvbmZpZ3VyYXRpb25zLCBzZXQvcmVzZXQgRFJWX0xPQUQgYml0IG9uIGludGVyZmFjZSAKLSAqICAgICBvcGVuL2Nsb3NlIAotICogNi4yLjEzICAgICAgIDkvMTQvMDUKLSAqICAgbyBJbnZva2UgZTEwMDBfY2hlY2tfbW5nX21vZGUgb25seSBmb3IgODI1N3ggY29udHJvbGxlcnMgc2luY2UgaXQgCi0gKiAgICAgYWNjZXNzZXMgdGhlIEZXU00gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGluIG90aGVyIGNvbnRyb2xsZXJzCi0gKiA2LjIuMTIgICAgICAgOS85LzA1Ci0gKiAgIG8gQWRkIHN1cHBvcnQgZm9yIGRldmljZSBpZCBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUgotICogICBvIHNldCBSQ1RMOlNFQ1JDIG9ubHkgZm9yIGNvbnRyb2xsZXJzIG5ld2VyIHRoYW4gODI1NDMuIAotICogICBvIFdoZW4gdGhlIG4vdyBpbnRlcmZhY2UgY29tZXMgZG93biByZXNldCBEUlZfTE9BRCBiaXQgdG8gbm90aWZ5IGYvdy4KLSAqICAgICBUaGlzIGNvZGUgd2FzIG1vdmVkIGZyb20gZTEwMDBfcmVtb3ZlIHRvIGUxMDAwX2Nsb3NlCi0gKiA2LjIuMTAgICAgICAgOS82LzA1Ci0gKiAgIG8gRml4IGVycm9yIGluIHVwZGF0aW5nIFJEVCBpbiBlbDEwMDBfYWxsb2NfcnhfYnVmZmVyc1tfcHNdIC0tIG9uZSBvZmYuCi0gKiAgIG8gRW5hYmxlIGZjIGJ5IGRlZmF1bHQgb24gODI1NzMgY29udHJvbGxlcnMgKGRvIG5vdCByZWFkIGVlcHJvbSkKLSAqICAgbyBGaXggcnhfZXJyb3JzIHN0YXRpc3RpYyBub3QgdG8gaW5jbHVkZSBtaXNzZWRfcGFja2V0X2NvdW50Ci0gKiAgIG8gRml4IHJ4X2Ryb3BwZWQgc3RhdGlzdGljIG5vdCB0byBpbmNsdWRlIG1pc3NlZF9wYWNrZXRfY291bnQgCi0gICAgICAgKFBhZHJhaWcgQnJhZHkpCi0gKiA2LjIuOSAgICAgICAgOC8zMC8wNQotICogICBvIFJlbW92ZSBjYWxsIHRvIHVwZGF0ZSBzdGF0aXN0aWNzIGZyb20gdGhlIGNvbnRyb2xsZXIgaWIgZTEwMDBfZ2V0X3N0YXRzCi0gKiA2LjIuOCAgICAgICAgOC8zMC8wNQotICogICBvIEltcHJvdmVkIGFsZ29yaXRobSBmb3IgcnggYnVmZmVyIGFsbG9jYXRpb24vcmR0IHVwZGF0ZQotICogICBvIEZsb3cgY29udHJvbCB3YXRlcm1hcmtzIHJlbGF0aXZlIHRvIHJ4IFBCQSBzaXplCi0gKiAgIG8gU2ltcGxpZmllZCAnVHggSHVuZycgZGV0ZWN0IGxvZ2ljCi0gKiA2LjIuNyAJOC8xNy8wNQotICogICBvIFJlcG9ydCByeCBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlcyBhbmQgdHggdGltZW91dCBjb3VudHMgaW4gc3RhdHMKLSAqIDYuMi42IAk4LzE2LzA1Ci0gKiAgIG8gSW1wbGVtZW50IHdvcmthcm91bmQgZm9yIGNvbnRyb2xsZXIgZXJyYXR1bSAtLSBsaW5lYXIgbm9uLXRzbyBwYWNrZXQKLSAqICAgICBmb2xsb3dpbmcgYSBUU08gZ2V0cyB3cml0dGVuIGJhY2sgcHJlbWF0dXJlbHkKLSAqIDYuMi41CTgvMTUvMDUKLSAqICAgbyBTZXQgbmV0ZGV2LT50eF9xdWV1ZV9sZW4gYmFzZWQgb24gbGluayBzcGVlZC9kdXBsZXggc2V0dGluZ3MuCi0gKiAgIG8gRml4IG5ldF9zdGF0cy5yeF9maWZvX2Vycm9ycyA8cEBkcmFpZ0JyYWR5LmNvbT4KLSAqICAgbyBEbyBub3QgcG93ZXIgb2ZmIFBIWSBpZiBTb0wvSURFUiBzZXNzaW9uIGlzIGFjdGl2ZQotICogNi4yLjQJOC8xMC8wNQotICogICBvIEZpeCBsb29wYmFjayB0ZXN0IHNldHVwL2NsZWFudXAgZm9yIDgyNTcxLzMgY29udHJvbGxlcnMKLSAqICAgbyBGaXggcGFyc2luZyBvZiBvdXRnb2luZyBwYWNrZXRzIChlMTAwMF90cmFuc2Zlcl9kaGNwX2luZm8pIHRvIHRyZWF0Ci0gKiAgICAgYWxsIHBhY2tldHMgYXMgcmF3Ci0gKiAgIG8gUHJldmVudCBvcGVyYXRpb25zIHRoYXQgd2lsbCBjYXVzZSB0aGUgUEhZIHRvIGJlIHJlc2V0IGlmIFNvTC9JREVSCi0gKiAgICAgc2Vzc2lvbnMgYXJlIGFjdGl2ZSBhbmQgbG9nIGEgbWVzc2FnZQotICogNi4yLjIJNy8yMS8wNQotICogICBvIHVzZWQgZml4ZWQgc2l6ZSBkZXNjcmlwdG9ycyBmb3IgYWxsIE1UVSBzaXplcywgcmVkdWNlcyBtZW1vcnkgbG9hZAotICogNi4xLjIJNC8xMy8wNQotICogICBvIEZpeGVkIGV0aHRvb2wgZGlhZ25vc3RpY3MKLSAqICAgbyBFbmFibGVkIGZsb3cgY29udHJvbCB0byB0YWtlIGRlZmF1bHQgZWVwcm9tIHNldHRpbmdzCi0gKiAgIG8gQWRkZWQgc3RhdHNfbG9jayBhcm91bmQgZTEwMDBfcmVhZF9waHlfcmVnIGNvbW1hbmRzIHRvIGF2b2lkIGNvbmN1cnJlbnQKLSAqICAgICBjYWxscywgb25lIGZyb20gbWlpX2lvY3RsIGFuZCBvdGhlciBmcm9tIHdpdGhpbiB1cGRhdGVfc3RhdHMgd2hpbGUgCi0gKiAgICAgcHJvY2Vzc2luZyBNSUlSRUcgaW9jdGwuCiAgKi8KIAogY2hhciBlMTAwMF9kcml2ZXJfbmFtZVtdID0gImUxMDAwIjsKQEAgLTEwMyw3ICs3NCw3IEBACiAjZWxzZQogI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKICNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTiAiNi4zLjktazIiRFJJVkVSTkFQSQorI2RlZmluZSBEUlZfVkVSU0lPTiAiNy4wLjMzLWsyIkRSSVZFUk5BUEkKIGNoYXIgZTEwMDBfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNoYXIgZTEwMDBfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIjsKIApAQCAtMTU3LDMyICsxMjgsMjYgQEAKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDhBKSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDhCKSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDhDKSwKKwlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDk2KSwKKwlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDk4KSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDk5KSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMDlBKSwKIAlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMEI1KSwKKwlJTlRFTF9FMTAwMF9FVEhFUk5FVF9ERVZJQ0UoMHgxMEI5KSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJezAsfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGUxMDAwX3BjaV90YmwpOwogCi1pbnQgZTEwMDBfdXAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBlMTAwMF9kb3duKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZTEwMDBfcmVzZXQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdWludDE2X3Qgc3BkZHBseCk7Ci1pbnQgZTEwMDBfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgZTEwMDBfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGUxMDAwX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGUxMDAwX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgaW50IGUxMDAwX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4ZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3R4X3JpbmcgKnR4ZHIpOwogc3RhdGljIGludCBlMTAwMF9zZXR1cF9yeF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeGRyKTsKIHN0YXRpYyB2b2lkIGUxMDAwX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZyk7CiBzdGF0aWMgdm9pZCBlMTAwMF9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcpOwotdm9pZCBlMTAwMF91cGRhdGVfc3RhdHMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcpOwogCiAvKiBMb2NhbCBGdW5jdGlvbiBQcm90b3R5cGVzICovCiAKQEAgLTE5MSw5ICsxNTYsNiBAQAogc3RhdGljIGludCBlMTAwMF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgZTEwMDBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHN0YXRpYyBpbnQgZTEwMDBfYWxsb2NfcXVldWVzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLXN0YXRpYyB2b2lkIGUxMDAwX3NldHVwX3F1ZXVlX21hcHBpbmcoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotI2VuZGlmCiBzdGF0aWMgaW50IGUxMDAwX3N3X2luaXQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIGludCBlMTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIGludCBlMTAwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKQEAgLTI0MSwxMSArMjAzLDEwIEBACiBzdGF0aWMgaW50IGUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKIHN0YXRpYyBpbnQgZTEwMDBfbWlpX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLAogCQkJICAgaW50IGNtZCk7Ci12b2lkIGUxMDAwX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyB2b2lkIGUxMDAwX2VudGVyXzgyNTQyX3JzdChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgdm9pZCBlMTAwMF9sZWF2ZV84MjU0Ml9yc3Qoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIHZvaWQgZTEwMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGUxMDAwX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGUxMDAwX3Jlc2V0X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlMTAwMF9zbWFydHNwZWVkKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyBpbmxpbmUgaW50IGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0yNjUsMTQgKzIyNiw2IEBACiBzdGF0aWMgdm9pZCBlMTAwMF9uZXRwb2xsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi0vKiBmb3IgbXVsdGlwbGUgUnggcXVldWVzICovCi12b2lkIGUxMDAwX3J4X3NjaGVkdWxlKHZvaWQgKmRhdGEpOwotI2VuZGlmCi0KLS8qIEV4cG9ydGVkIGZyb20gb3RoZXIgbW9kdWxlcyAqLwotCi1leHRlcm4gdm9pZCBlMTAwMF9jaGVja19vcHRpb25zKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGUxMDAwX2RyaXZlciA9IHsKIAkubmFtZSAgICAgPSBlMTAwMF9kcml2ZXJfbmFtZSwKQEAgLTM4MCw3ICszMzMsOCBAQAogCQkJCQkodmlkICE9IG9sZF92aWQpICYmCiAJCQkJCSFhZGFwdGVyLT52bGdycC0+dmxhbl9kZXZpY2VzW29sZF92aWRdKQogCQkJCWUxMDAwX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LCBvbGRfdmlkKTsKLQkJfQorCQl9IGVsc2UKKwkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gdmlkOwogCX0KIH0KIApAQCAtNTAyLDEwICs0NTYsNiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotI2lmZGVmIENPTkZJR19FMTAwMF9NUQotCWUxMDAwX3NldHVwX3F1ZXVlX21hcHBpbmcoYWRhcHRlcik7Ci0jZW5kaWYKLQogCWFkYXB0ZXItPnR4X3F1ZXVlX2xlbiA9IG5ldGRldi0+dHhfcXVldWVfbGVuOwogCiAJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CkBAIC01MjYsOSArNDc2LDcgQEAKIAkJCQkgICAgIGUxMDAwX2NoZWNrX21uZ19tb2RlKCZhZGFwdGVyLT5odyk7CiAKIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQl3aGlsZSAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJ4X3NjaGVkX2NhbGxfZGF0YS5jb3VudCkgIT0gMCk7Ci0jZW5kaWYKKwogCWZyZWVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgbmV0ZGV2KTsKICNpZmRlZiBDT05GSUdfUENJX01TSQogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ3X3Jldl8yICYmCkBAIC01ODcsNiArNTM1LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgorCWNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAJCXBiYSA9IEUxMDAwX1BCQV8zOEs7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzM6CkBAIC02MTksNyArNTY4LDEwIEBACiAKIAlhZGFwdGVyLT5ody5mY19oaWdoX3dhdGVyID0gZmNfaGlnaF93YXRlcl9tYXJrOwogCWFkYXB0ZXItPmh3LmZjX2xvd193YXRlciA9IGZjX2hpZ2hfd2F0ZXJfbWFyayAtIDg7Ci0JYWRhcHRlci0+aHcuZmNfcGF1c2VfdGltZSA9IEUxMDAwX0ZDX1BBVVNFX1RJTUU7CisJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKQorCQlhZGFwdGVyLT5ody5mY19wYXVzZV90aW1lID0gMHhGRkZGOworCWVsc2UKKwkJYWRhcHRlci0+aHcuZmNfcGF1c2VfdGltZSA9IEUxMDAwX0ZDX1BBVVNFX1RJTUU7CiAJYWRhcHRlci0+aHcuZmNfc2VuZF94b24gPSAxOwogCWFkYXB0ZXItPmh3LmZjID0gYWRhcHRlci0+aHcub3JpZ2luYWxfZmM7CiAKQEAgLTY2Myw2ICs2MTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47CiAKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kID0gMDsKKwlzdGF0aWMgaW50IGUxMDAwX2tzcDNfcG9ydF9hID0gMDsgLyogZ2xvYmFsIGtzcDMgcG9ydCBhIGluZGljYXRpb24gKi8KIAlpbnQgaSwgZXJyLCBwY2lfdXNpbmdfZGFjOwogCXVpbnQxNl90IGVlcHJvbV9kYXRhOwogCXVpbnQxNl90IGVlcHJvbV9hcG1lX21hc2sgPSBFMTAwMF9FRVBST01fQVBNRTsKQEAgLTc1NSw2ICs3MDgsMTUgQEAKIAlpZiAoKGVyciA9IGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jaygmYWRhcHRlci0+aHcpKSkKIAkJRFBSSU5USyhQUk9CRSwgSU5GTywgIlBIWSByZXNldCBpcyBibG9ja2VkIGR1ZSB0byBTT0wvSURFUiBzZXNzaW9uLlxuIik7CiAKKwkvKiBpZiBrc3AzLCBpbmRpY2F0ZSBpZiBpdCdzIHBvcnQgYSBiZWluZyBzZXR1cCAqLworCWlmIChwZGV2LT5kZXZpY2UgPT0gRTEwMDBfREVWX0lEXzgyNTQ2R0JfUVVBRF9DT1BQRVJfS1NQMyAmJiAKKwkJCWUxMDAwX2tzcDNfcG9ydF9hID09IDApIAorCQlhZGFwdGVyLT5rc3AzX3BvcnRfYSA9IDE7CisJZTEwMDBfa3NwM19wb3J0X2ErKzsKKwkvKiBSZXNldCBmb3IgbXVsdGlwbGUgS1AzIGFkYXB0ZXJzICovCisJaWYgKGUxMDAwX2tzcDNfcG9ydF9hID09IDQpCisJCWUxMDAwX2tzcDNfcG9ydF9hID0gMDsKKwogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgewogCQluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8CiAJCQkJICAgTkVUSUZfRl9IV19DU1VNIHwKQEAgLTgyNiw4ICs3ODgsOCBAQAogCWFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLmZ1bmN0aW9uID0gJmUxMDAwX3VwZGF0ZV9waHlfaW5mbzsKIAlhZGFwdGVyLT5waHlfaW5mb190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXI7CiAKLQlJTklUX1dPUksoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzaywKLQkJKHZvaWQgKCopKHZvaWQgKikpZTEwMDBfdHhfdGltZW91dF90YXNrLCBuZXRkZXYpOworCUlOSVRfV09SSygmYWRhcHRlci0+cmVzZXRfdGFzaywKKwkJKHZvaWQgKCopKHZvaWQgKikpZTEwMDBfcmVzZXRfdGFzaywgbmV0ZGV2KTsKIAogCS8qIHdlJ3JlIGdvaW5nIHRvIHJlc2V0LCBzbyBhc3N1bWUgd2UgaGF2ZSBubyBsaW5rIGZvciBub3cgKi8KIApAQCAtODU0LDYgKzgxNiw3IEBACiAJY2FzZSBlMTAwMF84MjU0NjoKIAljYXNlIGUxMDAwXzgyNTQ2X3Jldl8zOgogCWNhc2UgZTEwMDBfODI1NzE6CisJY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKIAkJaWYgKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpewogCQkJZTEwMDBfcmVhZF9lZXByb20oJmFkYXB0ZXItPmh3LAogCQkJCUVFUFJPTV9JTklUX0NPTlRST0wzX1BPUlRfQiwgMSwgJmVlcHJvbV9kYXRhKTsKQEAgLTk1Nyw3ICs5MjAsNyBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlfX2Rldl9wdXQoJmFkYXB0ZXItPnBvbGxpbmdfbmV0ZGV2W2ldKTsKKwkJZGV2X3B1dCgmYWRhcHRlci0+cG9sbGluZ19uZXRkZXZbaV0pOwogI2VuZGlmCiAKIAlpZiAoIWUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jaygmYWRhcHRlci0+aHcpKQpAQCAtOTcyLDEwICs5MzUsNiBAQAogCWlvdW5tYXAoYWRhcHRlci0+aHcuaHdfYWRkcik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAotI2lmZGVmIENPTkZJR19FMTAwMF9NUQotCWZyZWVfcGVyY3B1KGFkYXB0ZXItPmNwdV9uZXRkZXYpOwotCWZyZWVfcGVyY3B1KGFkYXB0ZXItPmNwdV90eF9yaW5nKTsKLSNlbmRpZgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0xMDU2LDQwICsxMDE1LDggQEAKIAkJaHctPm1hc3Rlcl9zbGF2ZSA9IEUxMDAwX01BU1RFUl9TTEFWRTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyAqLwotCXN3aXRjaCAoaHctPm1hY190eXBlKSB7Ci0JY2FzZSBlMTAwMF84MjU3MToKLQljYXNlIGUxMDAwXzgyNTcyOgotCQkvKiBUaGVzZSBjb250cm9sbGVycyBzdXBwb3J0IDIgdHggcXVldWVzLCBidXQgd2l0aCBhIHNpbmdsZQotCQkgKiBxZGlzYyBpbXBsZW1lbnRhdGlvbiwgbXVsdGlwbGUgdHggcXVldWVzIGFyZW4ndCBxdWl0ZSBhcwotCQkgKiBpbnRlcmVzdGluZy4gIElmIHdlIGNhbiBmaW5kIGEgbG9naWNhbCB3YXkgb2YgbWFwcGluZwotCQkgKiBmbG93cyB0byBhIHF1ZXVlLCB0aGVuIHBlcmhhcHMgd2UgY2FuIHVwIHRoZSBudW1fdHhfcXVldWUKLQkJICogY291bnQgYmFjayB0byBpdHMgZGVmYXVsdC4gIFVudGlsIHRoZW4sIHdlIHJ1biB0aGUgcmlzayBvZgotCQkgKiB0ZXJyaWJsZSBwZXJmb3JtYW5jZSBkdWUgdG8gU0FDSyBvdmVybG9hZC4gKi8KLQkJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IDE7Ci0JCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKLQkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7Ci0JCWJyZWFrOwotCX0KLQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gbWluKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsIG51bV9vbmxpbmVfY3B1cygpKTsKLQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbWluKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsIG51bV9vbmxpbmVfY3B1cygpKTsKLQlEUFJJTlRLKERSViwgSU5GTywgIk11bHRpcXVldWUgRW5hYmxlZDogUnggUXVldWUgY291bnQgPSAldSAlc1xuIiwKLQkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKLQkJKChhZGFwdGVyLT5udW1fcnhfcXVldWVzID09IDEpCi0JCSA/ICgobnVtX29ubGluZV9jcHVzKCkgPiAxKQotCQkJPyAiKGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlIGluIGN1cnJlbnQgYWRhcHRlcikiCi0JCQk6ICIoZHVlIHRvIHVuc3VwcG9ydGVkIHN5c3RlbSBjb25maWd1cmF0aW9uKSIpCi0JCSA6ICIiKSk7Ci0JRFBSSU5USyhEUlYsIElORk8sICJNdWx0aXF1ZXVlIEVuYWJsZWQ6IFR4IFF1ZXVlIGNvdW50ID0gJXVcbiIsCi0JCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOwotI2Vsc2UKIAlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKIAlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKLSNlbmRpZgogCiAJaWYgKGUxMDAwX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKSkgewogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBxdWV1ZXNcbiIpOwpAQCAtMTE1Miw1MSArMTA3OSw5IEBACiAJbWVtc2V0KGFkYXB0ZXItPnBvbGxpbmdfbmV0ZGV2LCAwLCBzaXplKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi0JYWRhcHRlci0+cnhfc2NoZWRfY2FsbF9kYXRhLmZ1bmMgPSBlMTAwMF9yeF9zY2hlZHVsZTsKLQlhZGFwdGVyLT5yeF9zY2hlZF9jYWxsX2RhdGEuaW5mbyA9IGFkYXB0ZXItPm5ldGRldjsKLQotCWFkYXB0ZXItPmNwdV9uZXRkZXYgPSBhbGxvY19wZXJjcHUoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci0JYWRhcHRlci0+Y3B1X3R4X3JpbmcgPSBhbGxvY19wZXJjcHUoc3RydWN0IGUxMDAwX3R4X3JpbmcgKik7Ci0jZW5kaWYKLQogCXJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCi0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi1zdGF0aWMgdm9pZCBfX2RldmluaXQKLWUxMDAwX3NldHVwX3F1ZXVlX21hcHBpbmcoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGksIGNwdTsKLQotCWFkYXB0ZXItPnJ4X3NjaGVkX2NhbGxfZGF0YS5mdW5jID0gZTEwMDBfcnhfc2NoZWR1bGU7Ci0JYWRhcHRlci0+cnhfc2NoZWRfY2FsbF9kYXRhLmluZm8gPSBhZGFwdGVyLT5uZXRkZXY7Ci0JY3B1c19jbGVhcihhZGFwdGVyLT5yeF9zY2hlZF9jYWxsX2RhdGEuY3B1bWFzayk7Ci0KLQlhZGFwdGVyLT5jcHVfbmV0ZGV2ID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBuZXRfZGV2aWNlICopOwotCWFkYXB0ZXItPmNwdV90eF9yaW5nID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBlMTAwMF90eF9yaW5nICopOwotCi0JbG9ja19jcHVfaG90cGx1ZygpOwotCWkgPSAwOwotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCSpwZXJfY3B1X3B0cihhZGFwdGVyLT5jcHVfdHhfcmluZywgY3B1KSA9ICZhZGFwdGVyLT50eF9yaW5nW2kgJSBhZGFwdGVyLT5udW1fdHhfcXVldWVzXTsKLQkJLyogVGhpcyBpcyBpbmNvbXBsZXRlIGJlY2F1c2Ugd2UnZCBsaWtlIHRvIGFzc2lnbiBzZXBhcmF0ZQotCQkgKiBwaHlzaWNhbCBjcHVzIHRvIHRoZXNlIG5ldGRldiBwb2xsaW5nIHN0cnVjdHVyZXMgYW5kCi0JCSAqIGF2b2lkIHNhdHVyYXRpbmcgYSBzdWJzZXQgb2YgY3B1cy4KLQkJICovCi0JCWlmIChpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcykgewotCQkJKnBlcl9jcHVfcHRyKGFkYXB0ZXItPmNwdV9uZXRkZXYsIGNwdSkgPSAmYWRhcHRlci0+cG9sbGluZ19uZXRkZXZbaV07Ci0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNwdSA9IGNwdTsKLQkJCWNwdV9zZXQoY3B1LCBhZGFwdGVyLT5jcHVtYXNrKTsKLQkJfSBlbHNlCi0JCQkqcGVyX2NwdV9wdHIoYWRhcHRlci0+Y3B1X25ldGRldiwgY3B1KSA9IE5VTEw7Ci0KLQkJaSsrOwotCX0KLQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKLX0KLSNlbmRpZgotCiAvKioKICAqIGUxMDAwX29wZW4gLSBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUgYWN0aXZlCiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xNDM1LDE4ICsxMzIwLDYgQEAKIAkvKiBTZXR1cCB0aGUgSFcgVHggSGVhZCBhbmQgVGFpbCBkZXNjcmlwdG9yIHBvaW50ZXJzICovCiAKIAlzd2l0Y2ggKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpIHsKLQljYXNlIDI6Ci0JCXRkYmEgPSBhZGFwdGVyLT50eF9yaW5nWzFdLmRtYTsKLQkJdGRsZW4gPSBhZGFwdGVyLT50eF9yaW5nWzFdLmNvdW50ICoKLQkJCXNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYyk7Ci0JCUUxMDAwX1dSSVRFX1JFRyhodywgVERCQUwxLCAodGRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCkpOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIFREQkFIMSwgKHRkYmEgPj4gMzIpKTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBURExFTjEsIHRkbGVuKTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUREgxLCAwKTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBURFQxLCAwKTsKLQkJYWRhcHRlci0+dHhfcmluZ1sxXS50ZGggPSBFMTAwMF9UREgxOwotCQlhZGFwdGVyLT50eF9yaW5nWzFdLnRkdCA9IEUxMDAwX1REVDE7Ci0JCS8qIEZhbGwgVGhyb3VnaCAqLwogCWNhc2UgMToKIAlkZWZhdWx0OgogCQl0ZGJhID0gYWRhcHRlci0+dHhfcmluZ1swXS5kbWE7CkBAIC0xNDc3LDYgKzEzNTAsMTAgQEAKIAkJaXBncjEgPSBERUZBVUxUXzgyNTQyX1RJUEdfSVBHUjE7CiAJCWlwZ3IyID0gREVGQVVMVF84MjU0Ml9USVBHX0lQR1IyOwogCQlicmVhazsKKwljYXNlIGUxMDAwXzgwMDAzZXMybGFuOgorCQlpcGdyMSA9IERFRkFVTFRfODI1NDNfVElQR19JUEdSMTsKKwkJaXBncjIgPSBERUZBVUxUXzgwMDAzRVMyTEFOX1RJUEdfSVBHUjI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlwZ3IxID0gREVGQVVMVF84MjU0M19USVBHX0lQR1IxOwogCQlpcGdyMiA9IERFRkFVTFRfODI1NDNfVElQR19JUEdSMjsKQEAgLTE0OTcsMTAgKzEzNzQsMTMgQEAKIAl0Y3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRDVEwpOwogCiAJdGN0bCAmPSB+RTEwMDBfVENUTF9DVDsKLQl0Y3RsIHw9IEUxMDAwX1RDVExfRU4gfCBFMTAwMF9UQ1RMX1BTUCB8IEUxMDAwX1RDVExfUlRMQyB8CisJdGN0bCB8PSBFMTAwMF9UQ1RMX1BTUCB8IEUxMDAwX1RDVExfUlRMQyB8CiAJCShFMTAwMF9DT0xMSVNJT05fVEhSRVNIT0xEIDw8IEUxMDAwX0NUX1NISUZUKTsKIAotCUUxMDAwX1dSSVRFX1JFRyhodywgVENUTCwgdGN0bCk7CisjaWZkZWYgRElTQUJMRV9NVUxSCisJLyogZGlzYWJsZSBNdWx0aXBsZSBSZWFkcyBmb3IgZGVidWdnaW5nICovCisJdGN0bCAmPSB+RTEwMDBfVENUTF9NVUxSOworI2VuZGlmCiAKIAlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcxIHx8IGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MikgewogCQl0YXJjID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRBUkMwKTsKQEAgLTE1MTMsNiArMTM5MywxNSBAQAogCQllbHNlCiAJCQl0YXJjIHw9ICgxIDw8IDI4KTsKIAkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUQVJDMSwgdGFyYyk7CisJfSBlbHNlIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pIHsKKwkJdGFyYyA9IEUxMDAwX1JFQURfUkVHKGh3LCBUQVJDMCk7CisJCXRhcmMgfD0gMTsKKwkJaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKQorCQkJdGFyYyB8PSAoMSA8PCAyMCk7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgVEFSQzAsIHRhcmMpOworCQl0YXJjID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRBUkMxKTsKKwkJdGFyYyB8PSAxOworCQlFMTAwMF9XUklURV9SRUcoaHcsIFRBUkMxLCB0YXJjKTsKIAl9CiAKIAllMTAwMF9jb25maWdfY29sbGlzaW9uX2Rpc3QoaHcpOwpAQCAtMTUzMSw2ICsxNDIwLDkgQEAKIAlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ0ICYmCiAJICAgIGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2l4KQogCQlhZGFwdGVyLT5wY2l4XzgyNTQ0ID0gMTsKKworCUUxMDAwX1dSSVRFX1JFRyhodywgVENUTCwgdGN0bCk7CisKIH0KIAogLyoqCkBAIC0xNjM1LDggKzE1MjcsNiBAQAogCiAJcnhkci0+bmV4dF90b19jbGVhbiA9IDA7CiAJcnhkci0+bmV4dF90b191c2UgPSAwOwotCXJ4ZHItPnJ4X3NrYl90b3AgPSBOVUxMOwotCXJ4ZHItPnJ4X3NrYl9wcmV2ID0gTlVMTDsKIAogCXJldHVybiAwOwogfQpAQCAtMTcxMyw4ICsxNjAzLDIzIEBACiAJCXJjdGwgfD0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA8PCAweDExOwogCX0gZWxzZSB7CiAJCXJjdGwgJj0gfkUxMDAwX1JDVExfU1pfNDA5NjsKLQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9CU0VYOwotCQlyY3RsIHw9IEUxMDAwX1JDVExfU1pfMjA0ODsKKwkJcmN0bCB8PSBFMTAwMF9SQ1RMX0JTRVg7IAorCQlzd2l0Y2ggKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4pIHsKKwkJY2FzZSBFMTAwMF9SWEJVRkZFUl8yMDQ4OgorCQlkZWZhdWx0OgorCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NaXzIwNDg7CisJCQlyY3RsICY9IH5FMTAwMF9SQ1RMX0JTRVg7CisJCQlicmVhazsKKwkJY2FzZSBFMTAwMF9SWEJVRkZFUl80MDk2OgorCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NaXzQwOTY7CisJCQlicmVhazsKKwkJY2FzZSBFMTAwMF9SWEJVRkZFUl84MTkyOgorCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NaXzgxOTI7CisJCQlicmVhazsKKwkJY2FzZSBFMTAwMF9SWEJVRkZFUl8xNjM4NDoKKwkJCXJjdGwgfD0gRTEwMDBfUkNUTF9TWl8xNjM4NDsKKwkJCWJyZWFrOworCQl9CiAJfQogCiAjaWZuZGVmIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVApAQCAtMTc3NywxMiArMTY4Miw5IEBACiAJdWludDY0X3QgcmRiYTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXVpbnQzMl90IHJkbGVuLCByY3RsLCByeGNzdW0sIGN0cmxfZXh0OwotI2lmZGVmIENPTkZJR19FMTAwMF9NUQotCXVpbnQzMl90IHJldGEsIG1ycWM7Ci0JaW50IGk7Ci0jZW5kaWYKIAogCWlmIChhZGFwdGVyLT5yeF9wc19wYWdlcykgeworCQkvKiB0aGlzIGlzIGEgMzIgYnl0ZSBkZXNjcmlwdG9yICovCiAJCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqCiAJCQlzaXplb2YodW5pb24gZTEwMDBfcnhfZGVzY19wYWNrZXRfc3BsaXQpOwogCQlhZGFwdGVyLT5jbGVhbl9yeCA9IGUxMDAwX2NsZWFuX3J4X2lycV9wczsKQEAgLTE4MjQsMTggKzE3MjYsNiBAQAogCS8qIFNldHVwIHRoZSBIVyBSeCBIZWFkIGFuZCBUYWlsIERlc2NyaXB0b3IgUG9pbnRlcnMgYW5kCiAJICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nICovCiAJc3dpdGNoIChhZGFwdGVyLT5udW1fcnhfcXVldWVzKSB7Ci0jaWZkZWYgQ09ORklHX0UxMDAwX01RCi0JY2FzZSAyOgotCQlyZGJhID0gYWRhcHRlci0+cnhfcmluZ1sxXS5kbWE7Ci0JCUUxMDAwX1dSSVRFX1JFRyhodywgUkRCQUwxLCAocmRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCkpOwotCQlFMTAwMF9XUklURV9SRUcoaHcsIFJEQkFIMSwgKHJkYmEgPj4gMzIpKTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSRExFTjEsIHJkbGVuKTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSREgxLCAwKTsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSRFQxLCAwKTsKLQkJYWRhcHRlci0+cnhfcmluZ1sxXS5yZGggPSBFMTAwMF9SREgxOwotCQlhZGFwdGVyLT5yeF9yaW5nWzFdLnJkdCA9IEUxMDAwX1JEVDE7Ci0JCS8qIEZhbGwgVGhyb3VnaCAqLwotI2VuZGlmCiAJY2FzZSAxOgogCWRlZmF1bHQ6CiAJCXJkYmEgPSBhZGFwdGVyLT5yeF9yaW5nWzBdLmRtYTsKQEAgLTE4NDksNDYgKzE3MzksNiBAQAogCQlicmVhazsKIAl9CiAKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA+IDEpIHsKLQkJdWludDMyX3QgcmFuZG9tWzEwXTsKLQotCQlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kb21bMF0sIDQwKTsKLQotCQlpZiAoaHctPm1hY190eXBlIDw9IGUxMDAwXzgyNTcyKSB7Ci0JCQlFMTAwMF9XUklURV9SRUcoaHcsIFJTU0lSLCAwKTsKLQkJCUUxMDAwX1dSSVRFX1JFRyhodywgUlNTSU0sIDApOwotCQl9Ci0KLQkJc3dpdGNoIChhZGFwdGVyLT5udW1fcnhfcXVldWVzKSB7Ci0JCWNhc2UgMjoKLQkJZGVmYXVsdDoKLQkJCXJldGEgPSAweDAwODAwMDgwOwotCQkJbXJxYyA9IEUxMDAwX01SUUNfRU5BQkxFX1JTU18yUTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogRmlsbCBvdXQgcmVkaXJlY3Rpb24gdGFibGUgKi8KLQkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0JCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIFJFVEEsIGksIHJldGEpOwotCQkvKiBGaWxsIG91dCBoYXNoIGZ1bmN0aW9uIHNlZWRzICovCi0JCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBSU1NSSywgaSwgcmFuZG9tW2ldKTsKLQotCQltcnFjIHw9IChFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY0IHwKLQkJCSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY0X1RDUCk7Ci0JCUUxMDAwX1dSSVRFX1JFRyhodywgTVJRQywgbXJxYyk7Ci0JfQotCi0JLyogTXVsdGlxdWV1ZSBhbmQgcGFja2V0IGNoZWNrc3VtbWluZyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLwotCWlmIChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpIHsKLQkJcnhjc3VtID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJYQ1NVTSk7Ci0JCXJ4Y3N1bSB8PSBFMTAwMF9SWENTVU1fUENTRDsKLQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSWENTVU0sIHJ4Y3N1bSk7Ci0JfQotCi0jZWxzZQotCiAJLyogRW5hYmxlIDgyNTQzIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgKi8KIAlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSB7CiAJCXJ4Y3N1bSA9IEUxMDAwX1JFQURfUkVHKGh3LCBSWENTVU0pOwpAQCAtMTkwNyw3ICsxNzU3LDYgQEAKIAkJfQogCQlFMTAwMF9XUklURV9SRUcoaHcsIFJYQ1NVTSwgcnhjc3VtKTsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX0UxMDAwX01RICovCiAKIAlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTczKQogCQlFMTAwMF9XUklURV9SRUcoaHcsIEVSVCwgMHgwMTAwKTsKQEAgLTIxMDcsMTYgKzE5NTYsNiBAQAogCQl9CiAJfQogCi0JLyogdGhlcmUgYWxzbyBtYXkgYmUgc29tZSBjYWNoZWQgZGF0YSBpbiBvdXIgYWRhcHRlciAqLwotCWlmIChyeF9yaW5nLT5yeF9za2JfdG9wKSB7Ci0JCWRldl9rZnJlZV9za2IocnhfcmluZy0+cnhfc2tiX3RvcCk7Ci0KLQkJLyogcnhfc2tiX3ByZXYgd2lsbCBiZSB3aXBlZCBvdXQgYnkgcnhfc2tiX3RvcCAqLwotCQlyeF9yaW5nLT5yeF9za2JfdG9wID0gTlVMTDsKLQkJcnhfcmluZy0+cnhfc2tiX3ByZXYgPSBOVUxMOwotCX0KLQotCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZTEwMDBfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwogCW1lbXNldChyeF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZTEwMDBfcHNfcGFnZSkgKiByeF9yaW5nLT5jb3VudDsKQEAgLTIzODksNyArMjIyOCw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhkciA9IGFkYXB0ZXItPnR4X3Jpbmc7Ci0JdWludDMyX3QgbGluazsKKwl1aW50MzJfdCBsaW5rLCB0Y3RsOwogCiAJZTEwMDBfY2hlY2tfZm9yX2xpbmsoJmFkYXB0ZXItPmh3KTsKIAlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpIHsKQEAgLTI0MTUsMjAgKzIyNTQsNjEgQEAKIAkJCSAgICAgICBhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBGVUxMX0RVUExFWCA/CiAJCQkgICAgICAgIkZ1bGwgRHVwbGV4IiA6ICJIYWxmIER1cGxleCIpOwogCi0JCQkvKiB0d2VhayB0eF9xdWV1ZV9sZW4gYWNjb3JkaW5nIHRvIHNwZWVkL2R1cGxleCAqLworCQkJLyogdHdlYWsgdHhfcXVldWVfbGVuIGFjY29yZGluZyB0byBzcGVlZC9kdXBsZXgKKwkJCSAqIGFuZCBhZGp1c3QgdGhlIHRpbWVvdXQgZmFjdG9yICovCiAJCQluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IGFkYXB0ZXItPnR4X3F1ZXVlX2xlbjsKIAkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTsKLQkJCWlmIChhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBIQUxGX0RVUExFWCkgeworCQkJYWRhcHRlci0+dHhiMmIgPSAxOworCQkJc3dpdGNoIChhZGFwdGVyLT5saW5rX3NwZWVkKSB7CisJCQljYXNlIFNQRUVEXzEwOgorCQkJCWFkYXB0ZXItPnR4YjJiID0gMDsKKwkJCQluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwOworCQkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gODsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1BFRURfMTAwOgorCQkJCWFkYXB0ZXItPnR4YjJiID0gMDsKKwkJCQluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKKwkJCQkvKiBtYXliZSBhZGQgc29tZSB0aW1lb3V0IGZhY3RvciA/ICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICgoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODI1NzEgfHwgCisJCQkgICAgIGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTcyKSAmJgorCQkJICAgIGFkYXB0ZXItPnR4YjJiID09IDApIHsKKyNkZWZpbmUgU1BFRURfTU9ERV9CSVQgKDEgPDwgMjEpCisJCQkJdWludDMyX3QgdGFyYzA7CisJCQkJdGFyYzAgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRBUkMwKTsKKwkJCQl0YXJjMCAmPSB+U1BFRURfTU9ERV9CSVQ7CisJCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVEFSQzAsIHRhcmMwKTsKKwkJCX0KKwkJCQkKKyNpZmRlZiBORVRJRl9GX1RTTworCQkJLyogZGlzYWJsZSBUU08gZm9yIHBjaWUgYW5kIDEwLzEwMCBzcGVlZHMsIHRvIGF2b2lkCisJCQkgKiBzb21lIGhhcmR3YXJlIGlzc3VlcyAqLworCQkJaWYgKCFhZGFwdGVyLT50c29fZm9yY2UgJiYKKwkJCSAgICBhZGFwdGVyLT5ody5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2lfZXhwcmVzcyl7CiAJCQkJc3dpdGNoIChhZGFwdGVyLT5saW5rX3NwZWVkKSB7CiAJCQkJY2FzZSBTUEVFRF8xMDoKLQkJCQkJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDsKLQkJCQkJYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgPSA4OwotCQkJCQlicmVhazsKIAkJCQljYXNlIFNQRUVEXzEwMDoKLQkJCQkJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CisJCQkJCURQUklOVEsoUFJPQkUsSU5GTywKKwkJCQkgICAgICAgICIxMC8xMDAgc3BlZWQ6IGRpc2FibGluZyBUU09cbiIpOworCQkJCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTUEVFRF8xMDAwOgorCQkJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBvb3BzICovCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KKyNlbmRpZgorCisJCQkvKiBlbmFibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSwgbmVlZCB0byBkbyB0aGlzCisJCQkgKiBhZnRlciBzZXR0aW5nIFRBUkMwICovCisJCQl0Y3RsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBUQ1RMKTsKKwkJCXRjdGwgfD0gRTEwMDBfVENUTF9FTjsKKwkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFRDVEwsIHRjdGwpOwogCiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CkBAIC0yNDQzLDYgKzIzMjMsMTYgQEAKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLCBqaWZmaWVzICsgMiAqIEhaKTsKKworCQkJLyogODAwMDNFUzJMQU4gd29ya2Fyb3VuZC0tCisJCQkgKiBGb3IgcGFja2V0IGJ1ZmZlciB3b3JrLWFyb3VuZCBvbiBsaW5rIGRvd24gZXZlbnQ7CisJCQkgKiBkaXNhYmxlIHJlY2VpdmVzIGluIHRoZSBJU1IgYW5kCisJCQkgKiByZXNldCBkZXZpY2UgaGVyZSBpbiB0aGUgd2F0Y2hkb2cKKwkJCSAqLworCQkJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSB7CisJCQkJLyogcmVzZXQgZGV2aWNlICovCisJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJCQl9CiAJCX0KIAogCQllMTAwMF9zbWFydHNwZWVkKGFkYXB0ZXIpOwpAQCAtMjQ2MiwxNiArMjM1MiwxNCBAQAogCiAJZTEwMDBfdXBkYXRlX2FkYXB0aXZlKCZhZGFwdGVyLT5odyk7CiAKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQl0eGRyID0gKnBlcl9jcHVfcHRyKGFkYXB0ZXItPmNwdV90eF9yaW5nLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotI2VuZGlmCiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJaWYgKEUxMDAwX0RFU0NfVU5VU0VEKHR4ZHIpICsgMSA8IHR4ZHItPmNvdW50KSB7CiAJCQkvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKIAkJCSAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nCiAJCQkgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC4KIAkJCSAqIChEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCkuICovCi0JCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2spOworCQkJYWRhcHRlci0+dHhfdGltZW91dF9jb3VudCsrOworCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CiAJCX0KIAl9CiAKQEAgLTI2NDYsOSArMjUzNCw5IEBACiAJCS8qIFdvcmthcm91bmQgZm9yIENvbnRyb2xsZXIgZXJyYXR1bSAtLQogCQkgKiBkZXNjcmlwdG9yIGZvciBub24tdHNvIHBhY2tldCBpbiBhIGxpbmVhciBTS0IgdGhhdCBmb2xsb3dzIGEKIAkJICogdHNvIGdldHMgd3JpdHRlbiBiYWNrIHByZW1hdHVyZWx5IGJlZm9yZSB0aGUgZGF0YSBpcyBmdWxseQotCQkgKiBETUFkIHRvIHRoZSBjb250cm9sbGVyICovCisJCSAqIERNQSdkIHRvIHRoZSBjb250cm9sbGVyICovCiAJCWlmICghc2tiLT5kYXRhX2xlbiAmJiB0eF9yaW5nLT5sYXN0X3R4X3RzbyAmJgotCQkJCSFza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplKSB7CisJCSAgICAhc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkgewogCQkJdHhfcmluZy0+bGFzdF90eF90c28gPSAwOwogCQkJc2l6ZSAtPSA0OwogCQl9CkBAIC0yODM3LDcgKzI3MjUsNyBAQAogCQkJICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU5fU1VQUE9SVCkpICkKIAkJCXJldHVybiAwOwogCX0KLQlpZiAoKHNrYi0+bGVuID4gTUlOSU1VTV9ESENQX1BBQ0tFVF9TSVpFKSAmJiAoIXNrYi0+cHJvdG9jb2wpKSB7CisJaWYgKHNrYi0+bGVuID4gTUlOSU1VTV9ESENQX1BBQ0tFVF9TSVpFKSB7CiAJCXN0cnVjdCBldGhoZHIgKmV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0+ZGF0YTsKIAkJaWYgKChodG9ucyhFVEhfUF9JUCkgPT0gZXRoLT5oX3Byb3RvKSkgewogCQkJY29uc3Qgc3RydWN0IGlwaGRyICppcCA9CkBAIC0yODc4LDExICsyNzY2LDcgQEAKIAl1bnNpZ25lZCBpbnQgZjsKIAlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKIAotI2lmZGVmIENPTkZJR19FMTAwMF9NUQotCXR4X3JpbmcgPSAqcGVyX2NwdV9wdHIoYWRhcHRlci0+Y3B1X3R4X3JpbmcsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0jZWxzZQogCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOwotI2VuZGlmCiAKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPD0gMCkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTI5MDIsMjEgKzI3ODYsMjkgQEAKIAkJbWF4X3Blcl90eGQgPSBtaW4obXNzIDw8IDIsIG1heF9wZXJfdHhkKTsKIAkJbWF4X3R4ZF9wd3IgPSBmbHMobWF4X3Blcl90eGQpIC0gMTsKIAotCS8qIFRTTyBXb3JrYXJvdW5kIGZvciA4MjU3MS8yIENvbnRyb2xsZXJzIC0tIGlmIHNrYi0+ZGF0YQorCS8qIFRTTyBXb3JrYXJvdW5kIGZvciA4MjU3MS8yLzMgQ29udHJvbGxlcnMgLS0gaWYgc2tiLT5kYXRhCiAJICogcG9pbnRzIHRvIGp1c3QgaGVhZGVyLCBwdWxsIGEgZmV3IGJ5dGVzIG9mIHBheWxvYWQgZnJvbQogCSAqIGZyYWdzIGludG8gc2tiLT5kYXRhICovCiAJCWhkcl9sZW4gPSAoKHNrYi0+aC5yYXcgLSBza2ItPmRhdGEpICsgKHNrYi0+aC50aC0+ZG9mZiA8PCAyKSk7Ci0JCWlmIChza2ItPmRhdGFfbGVuICYmIChoZHJfbGVuID09IChza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4pKSAmJgotCQkJKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTcxIHx8Ci0JCQlhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MikpIHsKLQkJCXVuc2lnbmVkIGludCBwdWxsX3NpemU7Ci0JCQlwdWxsX3NpemUgPSBtaW4oKHVuc2lnbmVkIGludCk0LCBza2ItPmRhdGFfbGVuKTsKLQkJCWlmICghX19wc2tiX3B1bGxfdGFpbChza2IsIHB1bGxfc2l6ZSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIl9fcHNrYl9wdWxsX3RhaWwgZmFpbGVkLlxuIik7Ci0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHNrYi0+ZGF0YV9sZW4gJiYgKGhkcl9sZW4gPT0gKHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbikpKSB7CisJCQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CisJCQkJdW5zaWduZWQgaW50IHB1bGxfc2l6ZTsKKwkJCWNhc2UgZTEwMDBfODI1NzE6CisJCQljYXNlIGUxMDAwXzgyNTcyOgorCQkJY2FzZSBlMTAwMF84MjU3MzoKKwkJCQlwdWxsX3NpemUgPSBtaW4oKHVuc2lnbmVkIGludCk0LCBza2ItPmRhdGFfbGVuKTsKKwkJCQlpZiAoIV9fcHNrYl9wdWxsX3RhaWwoc2tiLCBwdWxsX3NpemUpKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAKKwkJCQkJCSJfX3Bza2JfcHVsbF90YWlsIGZhaWxlZC5cbiIpOworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQkJCX0KKwkJCQlsZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIGRvIG5vdGhpbmcgKi8KKwkJCQlicmVhazsKIAkJCX0KLQkJCWxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKIAkJfQogCX0KIApAQCAtMjkzMiw3ICsyODI0LDcgQEAKICNpZmRlZiBORVRJRl9GX1RTTwogCS8qIENvbnRyb2xsZXIgRXJyYXR1bSB3b3JrYXJvdW5kICovCiAJaWYgKCFza2ItPmRhdGFfbGVuICYmIHR4X3JpbmctPmxhc3RfdHhfdHNvICYmCi0JCSFza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplKQorCSAgICAhc2tiX3NoaW5mbyhza2IpLT50c29fc2l6ZSkKIAkJY291bnQrKzsKICNlbmRpZgogCkBAIC0yOTU1LDcgKzI4NDcsOSBAQAogCWlmIChhZGFwdGVyLT5wY2l4XzgyNTQ0KQogCQljb3VudCArPSBucl9mcmFnczsKIAotCWlmIChhZGFwdGVyLT5ody50eF9wa3RfZmlsdGVyaW5nICYmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykgKQorCisJaWYgKGFkYXB0ZXItPmh3LnR4X3BrdF9maWx0ZXJpbmcgJiYKKwkgICAgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgyNTczKSkKIAkJZTEwMDBfdHJhbnNmZXJfZGhjcF9pbmZvKGFkYXB0ZXIsIHNrYik7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0zMDMzLDE1ICsyOTI3LDE1IEBACiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJLyogRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2spOworCWFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQrKzsKKwlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIH0KIAogc3RhdGljIHZvaWQKLWUxMDAwX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorZTEwMDBfcmVzZXRfdGFzayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQrKzsKIAllMTAwMF9kb3duKGFkYXB0ZXIpOwogCWUxMDAwX3VwKGFkYXB0ZXIpOwogfQpAQCAtMzA3Niw2ICsyOTcwLDcgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IG1heF9mcmFtZSA9IG5ld19tdHUgKyBFTkVUX0hFQURFUl9TSVpFICsgRVRIRVJORVRfRkNTX1NJWkU7CisJdWludDE2X3QgZWVwcm9tX2RhdGEgPSAwOwogCiAJaWYgKChtYXhfZnJhbWUgPCBNSU5JTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpIHx8CiAJICAgIChtYXhfZnJhbWUgPiBNQVhfSlVNQk9fRlJBTUVfU0laRSkpIHsKQEAgLTMwODcsMTQgKzI5ODIsMjggQEAKIAlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU0Ml9yZXYyXzA6CiAJY2FzZSBlMTAwMF84MjU0Ml9yZXYyXzE6Ci0JY2FzZSBlMTAwMF84MjU3MzoKIAkJaWYgKG1heF9mcmFtZSA+IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgewogCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiSnVtYm8gRnJhbWVzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1NzM6CisJCS8qIG9ubHkgZW5hYmxlIGp1bWJvIGZyYW1lcyBpZiBBU1BNIGlzIGRpc2FibGVkIGNvbXBsZXRlbHkKKwkJICogdGhpcyBtZWFucyBib3RoIGJpdHMgbXVzdCBiZSB6ZXJvIGluIDB4MUEgYml0cyAzOjIgKi8KKwkJZTEwMDBfcmVhZF9lZXByb20oJmFkYXB0ZXItPmh3LCBFRVBST01fSU5JVF8zR0lPXzMsIDEsCisJCSAgICAgICAgICAgICAgICAgICZlZXByb21fZGF0YSk7CisJCWlmIChlZXByb21fZGF0YSAmIEVFUFJPTV9XT1JEMUFfQVNQTV9NQVNLKSB7CisJCQlpZiAobWF4X2ZyYW1lID4gTUFYSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFKSB7CisJCQkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkJICAgICAgICAgICAgCSJKdW1ibyBGcmFtZXMgbm90IHN1cHBvcnRlZC5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoIHRvIGdldCBzdXBwb3J0ICovCiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgorCWNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAjZGVmaW5lIE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSA5MjM0CiAJCWlmIChtYXhfZnJhbWUgPiBNQVhfU1REX0pVTUJPX0ZSQU1FX1NJWkUpIHsKIAkJCURQUklOVEsoUFJPQkUsIEVSUiwgIk1UVSA+IDkyMTYgbm90IHN1cHBvcnRlZC5cbiIpOwpAQCAtMzEwNiwyNCArMzAxNSwyNyBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBzaW5jZSB0aGUgZHJpdmVyIGNvZGUgbm93IHN1cHBvcnRzIHNwbGl0dGluZyBhIHBhY2tldCBhY3Jvc3MKLQkgKiBtdWx0aXBsZSBkZXNjcmlwdG9ycywgbW9zdCBvZiB0aGUgZmlmbyByZWxhdGVkIGxpbWl0YXRpb25zIG9uCi0JICoganVtYm8gZnJhbWUgdHJhZmZpYyBoYXZlIGdvbmUgYXdheS4KLQkgKiBzaW1wbHkgdXNlIDJrIGRlc2NyaXB0b3JzIGZvciBldmVyeXRoaW5nLgotCSAqCi0JICogTk9URTogZGV2X2FsbG9jX3NrYiByZXNlcnZlcyAxNiBieXRlcywgYW5kIHR5cGljYWxseSBORVRfSVBfQUxJR04KLQkgKiBtZWFucyB3ZSByZXNlcnZlIDIgbW9yZSwgdGhpcyBwdXNoZXMgdXMgdG8gYWxsb2NhdGUgZnJvbSB0aGUgbmV4dAotCSAqIGxhcmdlciBzbGFiIHNpemUKLQkgKiBpLmUuIFJYQlVGRkVSXzIwNDggLS0+IHNpemUtNDA5NiBzbGFiICovCiAKLQkvKiByZWNlbnQgaGFyZHdhcmUgc3VwcG9ydHMgMUtCIGdyYW51bGFyaXR5ICovCiAJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID4gZTEwMDBfODI1NDdfcmV2XzIpIHsKLQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9Ci0JCSAgICAoKG1heF9mcmFtZSA8IEUxMDAwX1JYQlVGRkVSXzIwNDgpID8KLQkJICAgICAgICBtYXhfZnJhbWUgOiBFMTAwMF9SWEJVRkZFUl8yMDQ4KTsKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IG1heF9mcmFtZTsKIAkJRTEwMDBfUk9VTkRVUChhZGFwdGVyLT5yeF9idWZmZXJfbGVuLCAxMDI0KTsKLQl9IGVsc2UKLQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzIwNDg7CisJfSBlbHNlIHsKKwkJaWYodW5saWtlbHkoKGFkYXB0ZXItPmh3Lm1hY190eXBlIDwgZTEwMDBfODI1NDMpICYmCisJCSAgIChtYXhfZnJhbWUgPiBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpKSkgeworCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiSnVtYm8gRnJhbWVzIG5vdCBzdXBwb3J0ZWQgIgorCQkJCQkgICAgIm9uIDgyNTQyXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJaWYobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzIwNDgpCisJCQkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzIwNDg7CisJCQllbHNlIGlmKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl80MDk2KQorCQkJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl80MDk2OworCQkJZWxzZSBpZihtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfODE5MikKKwkJCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfODE5MjsKKwkJCWVsc2UgaWYobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzE2Mzg0KQorCQkJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8xNjM4NDsKKwkJfQorCX0KIAogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKIApAQCAtMzI0NSwxMSArMzE1NywxNSBAQAogCiAJLyogUnggRXJyb3JzICovCiAKKwkvKiBSTEVDIG9uIHNvbWUgbmV3ZXIgaGFyZHdhcmUgY2FuIGJlIGluY29ycmVjdCBzbyBidWlsZAorCSogb3VyIG93biB2ZXJzaW9uIGJhc2VkIG9uIFJVQyBhbmQgUk9DICovCiAJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2Vycm9ycyA9IGFkYXB0ZXItPnN0YXRzLnJ4ZXJyYyArCiAJCWFkYXB0ZXItPnN0YXRzLmNyY2VycnMgKyBhZGFwdGVyLT5zdGF0cy5hbGduZXJyYyArCi0JCWFkYXB0ZXItPnN0YXRzLnJsZWMgKyBhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyOworCQlhZGFwdGVyLT5zdGF0cy5ydWMgKyBhZGFwdGVyLT5zdGF0cy5yb2MgKworCQlhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyOwogCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9kcm9wcGVkID0gMDsKLQlhZGFwdGVyLT5uZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IGFkYXB0ZXItPnN0YXRzLnJsZWM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5ydWMgKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+c3RhdHMucm9jOwogCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMuY3JjZXJyczsKIAlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZnJhbWVfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMuYWxnbmVycmM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5tcGM7CkBAIC0zMjgyLDI5ICszMTk4LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLXZvaWQKLWUxMDAwX3J4X3NjaGVkdWxlKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnBvbGxfZGV2LCAqbmV0ZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKLQlpbnQgdGhpc19jcHUgPSBnZXRfY3B1KCk7Ci0KLQlwb2xsX2RldiA9ICpwZXJfY3B1X3B0cihhZGFwdGVyLT5jcHVfbmV0ZGV2LCB0aGlzX2NwdSk7Ci0JaWYgKHBvbGxfZGV2ID09IE5VTEwpIHsKLQkJcHV0X2NwdSgpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKHBvbGxfZGV2KSkpCi0JCV9fbmV0aWZfcnhfc2NoZWR1bGUocG9sbF9kZXYpOwotCWVsc2UKLQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKLQotCXB1dF9jcHUoKTsKLX0KLSNlbmRpZgotCiAvKioKICAqIGUxMDAwX2ludHIgLSBJbnRlcnJ1cHQgSGFuZGxlcgogICogQGlycTogaW50ZXJydXB0IG51bWJlcgpAQCAtMzMxOCw3ICszMjExLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1aW50MzJfdCBpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKKwl1aW50MzJfdCByY3RsLCBpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKICNpZm5kZWYgQ09ORklHX0UxMDAwX05BUEkKIAlpbnQgaTsKICNlbHNlCkBAIC0zMzQwLDYgKzMyMzMsMTcgQEAKIAogCWlmICh1bmxpa2VseShpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpKSB7CiAJCWh3LT5nZXRfbGlua19zdGF0dXMgPSAxOworCQkvKiA4MDAwM0VTMkxBTiB3b3JrYXJvdW5kLS0KKwkJICogRm9yIHBhY2tldCBidWZmZXIgd29yay1hcm91bmQgb24gbGluayBkb3duIGV2ZW50OworCQkgKiBkaXNhYmxlIHJlY2VpdmVzIGhlcmUgaW4gdGhlIElTUiBhbmQKKwkJICogcmVzZXQgYWRhcHRlciBpbiB3YXRjaGRvZworCQkgKi8KKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgorCQkgICAgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSkgeworCQkJLyogZGlzYWJsZSByZWNlaXZlcyAqLworCQkJcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKKwkJCUUxMDAwX1dSSVRFX1JFRyhodywgUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKKwkJfQogCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKIAl9CiAKQEAgLTMzNDksMjYgKzMyNTMsMTEgQEAKIAkJRTEwMDBfV1JJVEVfUkVHKGh3LCBJTUMsIH4wKTsKIAkJRTEwMDBfV1JJVEVfRkxVU0goaHcpOwogCX0KLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJ4X3NjaGVkX2NhbGxfZGF0YS5jb3VudCkgPT0gMCkgewotCQkvKiBXZSBtdXN0IHNldHVwIHRoZSBjcHVtYXNrIG9uY2UgY291bnQgPT0gMCBzaW5jZQotCQkgKiBlYWNoIGNwdSBiaXQgaXMgY2xlYXJlZCB3aGVuIHRoZSB3b3JrIGlzIGRvbmUuICovCi0JCWFkYXB0ZXItPnJ4X3NjaGVkX2NhbGxfZGF0YS5jcHVtYXNrID0gYWRhcHRlci0+Y3B1bWFzazsKLQkJYXRvbWljX2FkZChhZGFwdGVyLT5udW1fcnhfcXVldWVzIC0gMSwgJmFkYXB0ZXItPmlycV9zZW0pOwotCQlhdG9taWNfc2V0KCZhZGFwdGVyLT5yeF9zY2hlZF9jYWxsX2RhdGEuY291bnQsCi0JCSAgICAgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7Ci0JCXNtcF9jYWxsX2FzeW5jX21hc2soJmFkYXB0ZXItPnJ4X3NjaGVkX2NhbGxfZGF0YSk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCJjYWxsX2RhdGEuY291bnQgPT0gJXVcbiIsIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yeF9zY2hlZF9jYWxsX2RhdGEuY291bnQpKTsKLQl9Ci0jZWxzZSAvKiBpZiAhQ09ORklHX0UxMDAwX01RICovCiAJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5wb2xsaW5nX25ldGRldlswXSkpKQogCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5wb2xsaW5nX25ldGRldlswXSk7CiAJZWxzZQogCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOwotI2VuZGlmIC8qIENPTkZJR19FMTAwMF9NUSAqLwotCi0jZWxzZSAvKiBpZiAhQ09ORklHX0UxMDAwX05BUEkgKi8KKyNlbHNlCiAJLyogV3JpdGluZyBJTUMgYW5kIElNUyBpcyBuZWVkZWQgZm9yIDgyNTQ3LgogCSAqIER1ZSB0byBIdWIgTGluayBidXMgYmVpbmcgb2NjdXBpZWQsIGFuIGludGVycnVwdAogCSAqIGRlLWFzc2VydGlvbiBtZXNzYWdlIGlzIG5vdCBhYmxlIHRvIGJlIHNlbnQuCkBAIC0zMzkyLDcgKzMyODEsNyBAQAogCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKQogCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCi0jZW5kaWYgLyogQ09ORklHX0UxMDAwX05BUEkgKi8KKyNlbmRpZgogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzQ2OCw2ICszMzU3LDkgQEAKIAlzdHJ1Y3QgZTEwMDBfdHhfZGVzYyAqdHhfZGVzYywgKmVvcF9kZXNjOwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CisjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworI2VuZGlmCiAJYm9vbGVhbl90IGNsZWFuZWQgPSBGQUxTRTsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwpAQCAtMzQ4MCwyMSArMzM3MiwyMCBAQAogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKIAotI2lmZGVmIENPTkZJR19FMTAwMF9NUQotCQkJdHhfcmluZy0+dHhfc3RhdHMuYnl0ZXMgKz0gYnVmZmVyX2luZm8tPmxlbmd0aDsKLSNlbmRpZgogCQkJZTEwMDBfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgYnVmZmVyX2luZm8pOwogCQkJbWVtc2V0KHR4X2Rlc2MsIDAsIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykpOwogCiAJCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CiAJCX0KIAotI2lmZGVmIENPTkZJR19FMTAwMF9NUQotCQl0eF9yaW5nLT50eF9zdGF0cy5wYWNrZXRzKys7Ci0jZW5kaWYKIAogCQllb3AgPSB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOwogCQllb3BfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGVvcCk7CisjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKKyNkZWZpbmUgRTEwMDBfVFhfV0VJR0hUIDY0CisJCS8qIHdlaWdodCBvZiBhIHNvcnQgZm9yIHR4LCB0byBhdm9pZCBlbmRsZXNzIHRyYW5zbWl0IGNsZWFudXAgKi8KKwkJaWYgKGNvdW50KysgPT0gRTEwMDBfVFhfV0VJR0hUKSBicmVhazsKKyNlbmRpZgogCX0KIAogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwpAQCAtMzUxMyw3ICszNDA0LDcgQEAKIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBGQUxTRTsKIAkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCiAJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArCi0JCSAgICAgICAgICAgICAgIGFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yICogSFopCisJCSAgICAgICAgICAgICAgIChhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciAqIEhaKSkKIAkJICAgICYmICEoRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYKIAkJICAgICAgICAgRTEwMDBfU1RBVFVTX1RYT0ZGKSkgewogCkBAIC0zNjIwLDcgKzM1MTEsNyBAQAogCXVpbnQ4X3QgbGFzdF9ieXRlOwogCXVuc2lnbmVkIGludCBpOwogCWludCBjbGVhbmVkX2NvdW50ID0gMDsKLQlib29sZWFuX3QgY2xlYW5lZCA9IEZBTFNFLCBtdWx0aV9kZXNjcmlwdG9yID0gRkFMU0U7CisJYm9vbGVhbl90IGNsZWFuZWQgPSBGQUxTRTsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKQEAgLTM2MzgsMTAgKzM1MjksMTUgQEAKIAkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKIAkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAKKwkJcHJlZmV0Y2goc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKKwogCQlpZiAoKytpID09IHJ4X3JpbmctPmNvdW50KSBpID0gMDsKIAkJbmV4dF9yeGQgPSBFMTAwMF9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKKwkJcHJlZmV0Y2gobmV4dF9yeGQpOworCiAJCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQluZXh0X3NrYiA9IG5leHRfYnVmZmVyLT5za2I7CisJCXByZWZldGNoKG5leHRfc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKIAogCQljbGVhbmVkID0gVFJVRTsKIAkJY2xlYW5lZF9jb3VudCsrOwpAQCAtMzY1Miw0MyArMzU0OCwxMiBAQAogCiAJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPmxlbmd0aCk7CiAKLQkJc2tiX3B1dChza2IsIGxlbmd0aCk7Ci0KLQkJaWYgKCEoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfRU9QKSkgewotCQkJaWYgKCFyeF9yaW5nLT5yeF9za2JfdG9wKSB7Ci0JCQkJcnhfcmluZy0+cnhfc2tiX3RvcCA9IHNrYjsKLQkJCQlyeF9yaW5nLT5yeF9za2JfdG9wLT5sZW4gPSBsZW5ndGg7Ci0JCQkJcnhfcmluZy0+cnhfc2tiX3ByZXYgPSBza2I7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChza2Jfc2hpbmZvKHJ4X3JpbmctPnJ4X3NrYl90b3ApLT5mcmFnX2xpc3QpIHsKLQkJCQkJcnhfcmluZy0+cnhfc2tiX3ByZXYtPm5leHQgPSBza2I7Ci0JCQkJCXNrYi0+cHJldiA9IHJ4X3JpbmctPnJ4X3NrYl9wcmV2OwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNrYl9zaGluZm8ocnhfcmluZy0+cnhfc2tiX3RvcCktPmZyYWdfbGlzdCA9IHNrYjsKLQkJCQl9Ci0JCQkJcnhfcmluZy0+cnhfc2tiX3ByZXYgPSBza2I7Ci0JCQkJcnhfcmluZy0+cnhfc2tiX3RvcC0+ZGF0YV9sZW4gKz0gbGVuZ3RoOwotCQkJfQorCQlpZiAodW5saWtlbHkoIShzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9FT1ApKSkgeworCQkJLyogQWxsIHJlY2VpdmVzIG11c3QgZml0IGludG8gYSBzaW5nbGUgYnVmZmVyICovCisJCQlFMTAwMF9EQkcoIiVzOiBSZWNlaXZlIHBhY2tldCBjb25zdW1lZCBtdWx0aXBsZSIKKwkJCQkgICIgYnVmZmVyc1xuIiwgbmV0ZGV2LT5uYW1lKTsKKwkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCQlnb3RvIG5leHRfZGVzYzsKLQkJfSBlbHNlIHsKLQkJCWlmIChyeF9yaW5nLT5yeF9za2JfdG9wKSB7Ci0JCQkJaWYgKHNrYl9zaGluZm8ocnhfcmluZy0+cnhfc2tiX3RvcCkKLQkJCQkJCQktPmZyYWdfbGlzdCkgewotCQkJCQlyeF9yaW5nLT5yeF9za2JfcHJldi0+bmV4dCA9IHNrYjsKLQkJCQkJc2tiLT5wcmV2ID0gcnhfcmluZy0+cnhfc2tiX3ByZXY7Ci0JCQkJfSBlbHNlCi0JCQkJCXNrYl9zaGluZm8ocnhfcmluZy0+cnhfc2tiX3RvcCkKLQkJCQkJCQktPmZyYWdfbGlzdCA9IHNrYjsKLQotCQkJCXJ4X3JpbmctPnJ4X3NrYl90b3AtPmRhdGFfbGVuICs9IGxlbmd0aDsKLQkJCQlyeF9yaW5nLT5yeF9za2JfdG9wLT5sZW4gKz0KLQkJCQkJcnhfcmluZy0+cnhfc2tiX3RvcC0+ZGF0YV9sZW47Ci0KLQkJCQlza2IgPSByeF9yaW5nLT5yeF9za2JfdG9wOwotCQkJCW11bHRpX2Rlc2NyaXB0b3IgPSBUUlVFOwotCQkJCXJ4X3JpbmctPnJ4X3NrYl90b3AgPSBOVUxMOwotCQkJCXJ4X3JpbmctPnJ4X3NrYl9wcmV2ID0gTlVMTDsKLQkJCX0KIAkJfQogCiAJCWlmICh1bmxpa2VseShyeF9kZXNjLT5lcnJvcnMgJiBFMTAwMF9SWERfRVJSX0ZSQU1FX0VSUl9NQVNLKSkgewpAQCAtMzcxMiwxMCArMzU3Nyw3IEBACiAJCSAqIHBlcmZvcm1hbmNlIGZvciBzbWFsbCBwYWNrZXRzIHdpdGggbGFyZ2UgYW1vdW50cwogCQkgKiBvZiByZWFzc2VtYmx5IGJlaW5nIGRvbmUgaW4gdGhlIHN0YWNrICovCiAjZGVmaW5lIEUxMDAwX0NCX0xFTkdUSCAyNTYKLQkJaWYgKChsZW5ndGggPCBFMTAwMF9DQl9MRU5HVEgpICYmCi0JCSAgICFyeF9yaW5nLT5yeF9za2JfdG9wICYmCi0JCSAgIC8qIG9yIG1heWJlIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9FT1ApICYmICovCi0JCSAgICFtdWx0aV9kZXNjcmlwdG9yKSB7CisJCWlmIChsZW5ndGggPCBFMTAwMF9DQl9MRU5HVEgpIHsKIAkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0KIAkJCSAgICBkZXZfYWxsb2Nfc2tiKGxlbmd0aCArIE5FVF9JUF9BTElHTik7CiAJCQlpZiAobmV3X3NrYikgewpAQCAtMzcyOSw3ICszNTkxLDggQEAKIAkJCQlza2IgPSBuZXdfc2tiOwogCQkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCQkJfQotCQl9CisJCX0gZWxzZQorCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CiAKIAkJLyogZW5kIGNvcHlicmVhayBjb2RlICovCiAKQEAgLTM3MzcsNyArMzYwMCw3IEBACiAJCWUxMDAwX3J4X2NoZWNrc3VtKGFkYXB0ZXIsCiAJCQkJICAodWludDMyX3QpKHN0YXR1cykgfAogCQkJCSAgKCh1aW50MzJfdCkocnhfZGVzYy0+ZXJyb3JzKSA8PCAyNCksCi0JCQkJICByeF9kZXNjLT5jc3VtLCBza2IpOworCQkJCSAgbGUxNl90b19jcHUocnhfZGVzYy0+Y3N1bSksIHNrYik7CiAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQpAQCAtMzc2MCwxMCArMzYyMyw2IEBACiAJCX0KICNlbmRpZiAvKiBDT05GSUdfRTEwMDBfTkFQSSAqLwogCQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotI2lmZGVmIENPTkZJR19FMTAwMF9NUQotCQlyeF9yaW5nLT5yeF9zdGF0cy5wYWNrZXRzKys7Ci0JCXJ4X3JpbmctPnJ4X3N0YXRzLmJ5dGVzICs9IGxlbmd0aDsKLSNlbmRpZgogCiBuZXh0X2Rlc2M6CiAJCXJ4X2Rlc2MtPnN0YXR1cyA9IDA7CkBAIC0zNzc0LDYgKzM2MzMsNyBAQAogCQkJY2xlYW5lZF9jb3VudCA9IDA7CiAJCX0KIAorCQkvKiB1c2UgcHJlZmV0Y2hlZCB2YWx1ZXMgKi8KIAkJcnhfZGVzYyA9IG5leHRfcnhkOwogCQlidWZmZXJfaW5mbyA9IG5leHRfYnVmZmVyOwogCX0KQEAgLTM4MTYsOSArMzY3Niw5IEBACiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0NfUFMoKnJ4X3JpbmcsIGkpOwogCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi5taWRkbGUuc3RhdHVzX2Vycm9yKTsKLQlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAogCXdoaWxlIChzdGF0ZXJyICYgRTEwMDBfUlhEX1NUQVRfREQpIHsKKwkJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXBzX3BhZ2UgPSAmcnhfcmluZy0+cHNfcGFnZVtpXTsKIAkJcHNfcGFnZV9kbWEgPSAmcnhfcmluZy0+cHNfcGFnZV9kbWFbaV07CiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKQEAgLTM4MjgsMTAgKzM2ODgsMTYgQEAKICNlbmRpZgogCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwogCisJCS8qIGluIHRoZSBwYWNrZXQgc3BsaXQgY2FzZSB0aGlzIGlzIGhlYWRlciBvbmx5ICovCisJCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CisKIAkJaWYgKCsraSA9PSByeF9yaW5nLT5jb3VudCkgaSA9IDA7CiAJCW5leHRfcnhkID0gRTEwMDBfUlhfREVTQ19QUygqcnhfcmluZywgaSk7CisJCXByZWZldGNoKG5leHRfcnhkKTsKKwogCQluZXh0X2J1ZmZlciA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJbmV4dF9za2IgPSBuZXh0X2J1ZmZlci0+c2tiOworCQlwcmVmZXRjaChuZXh0X3NrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CiAKIAkJY2xlYW5lZCA9IFRSVUU7CiAJCWNsZWFuZWRfY291bnQrKzsKQEAgLTM4NjMsMjkgKzM3MjksNTUgQEAKIAkJLyogR29vZCBSZWNlaXZlICovCiAJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCi0JCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5yeF9wc19wYWdlczsgaisrKSB7Ci0JCQlpZiAoIShsZW5ndGggPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGhbal0pKSkKLQkJCQlicmVhazsKKwkJeworCQkvKiB0aGlzIGxvb2tzIHVnbHksIGJ1dCBpdCBzZWVtcyBjb21waWxlciBpc3N1ZXMgbWFrZSBpdAorCQkgICBtb3JlIGVmZmljaWVudCB0aGFuIHJldXNpbmcgaiAqLworCQlpbnQgbDEgPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGhbMF0pOwogCisJCS8qIHBhZ2UgYWxsb2MvcHV0IHRha2VzIHRvbyBsb25nIGFuZCBlZmZlY3RzIHNtYWxsIHBhY2tldAorCQkgKiB0aHJvdWdocHV0LCBzbyB1bnNwbGl0IHNtYWxsIHBhY2tldHMgYW5kIHNhdmUgdGhlIGFsbG9jL3B1dCovCisJCWlmIChsMSAmJiAoKGxlbmd0aCArIGwxKSA8IEUxMDAwX0NCX0xFTkdUSCkpIHsKKwkJCXU4ICp2YWRkcjsKKwkJCS8qIHRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gYWJvdXQgaG93IHRvIGNhbGwgCisJCQkgKiBrbWFwX2F0b21pYywgc28gd2UgY2FuJ3QgaG9sZCB0aGUgbWFwcGluZworCQkJICogdmVyeSBsb25nICovCisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocGRldiwKKwkJCQlwc19wYWdlX2RtYS0+cHNfcGFnZV9kbWFbMF0sCisJCQkJUEFHRV9TSVpFLAorCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQl2YWRkciA9IGttYXBfYXRvbWljKHBzX3BhZ2UtPnBzX3BhZ2VbMF0sCisJCQkgICAgICAgICAgICAgICAgICAgIEtNX1NLQl9EQVRBX1NPRlRJUlEpOworCQkJbWVtY3B5KHNrYi0+dGFpbCwgdmFkZHIsIGwxKTsKKwkJCWt1bm1hcF9hdG9taWModmFkZHIsIEtNX1NLQl9EQVRBX1NPRlRJUlEpOworCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHBkZXYsCisJCQkJcHNfcGFnZV9kbWEtPnBzX3BhZ2VfZG1hWzBdLAorCQkJCVBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXNrYl9wdXQoc2tiLCBsMSk7CisJCQlsZW5ndGggKz0gbDE7CisJCQlnb3RvIGNvcHlkb25lOworCQl9IC8qIGlmICovCisJCX0KKwkJCisJCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5yeF9wc19wYWdlczsgaisrKSB7CisJCQlpZiAoIShsZW5ndGg9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxlbmd0aFtqXSkpKQorCQkJCWJyZWFrOwogCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgcHNfcGFnZV9kbWEtPnBzX3BhZ2VfZG1hW2pdLAogCQkJCQlQQUdFX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlwc19wYWdlX2RtYS0+cHNfcGFnZV9kbWFbal0gPSAwOwotCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tqXS5wYWdlID0KLQkJCQlwc19wYWdlLT5wc19wYWdlW2pdOworCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgaiwgcHNfcGFnZS0+cHNfcGFnZVtqXSwgMCwKKwkJCSAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwogCQkJcHNfcGFnZS0+cHNfcGFnZVtqXSA9IE5VTEw7Ci0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdLnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal0uc2l6ZSA9IGxlbmd0aDsKLQkJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKIAkJCXNrYi0+bGVuICs9IGxlbmd0aDsKIAkJCXNrYi0+ZGF0YV9sZW4gKz0gbGVuZ3RoOwogCQl9CiAKK2NvcHlkb25lOgogCQllMTAwMF9yeF9jaGVja3N1bShhZGFwdGVyLCBzdGF0ZXJyLAotCQkJCSAgcnhfZGVzYy0+d2IubG93ZXIuaGlfZHdvcmQuY3N1bV9pcC5jc3VtLCBza2IpOworCQkJCSAgbGUxNl90b19jcHUocnhfZGVzYy0+d2IubG93ZXIuaGlfZHdvcmQuY3N1bV9pcC5jc3VtKSwgc2tiKTsKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKIAogCQlpZiAobGlrZWx5KHJ4X2Rlc2MtPndiLnVwcGVyLmhlYWRlcl9zdGF0dXMgJgotCQkJICBFMTAwMF9SWERQU19IRFJTVEFUX0hEUlNQKSkKKwkJCSAgIGNwdV90b19sZTE2KEUxMDAwX1JYRFBTX0hEUlNUQVRfSERSU1ApKSkKIAkJCWFkYXB0ZXItPnJ4X2hkcl9zcGxpdCsrOwogI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJCWlmICh1bmxpa2VseShhZGFwdGVyLT52bGdycCAmJiAoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX1ZQKSkpIHsKQEAgLTM5MDUsMTMgKzM3OTcsOSBAQAogCQl9CiAjZW5kaWYgLyogQ09ORklHX0UxMDAwX05BUEkgKi8KIAkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLSNpZmRlZiBDT05GSUdfRTEwMDBfTVEKLQkJcnhfcmluZy0+cnhfc3RhdHMucGFja2V0cysrOwotCQlyeF9yaW5nLT5yeF9zdGF0cy5ieXRlcyArPSBsZW5ndGg7Ci0jZW5kaWYKIAogbmV4dF9kZXNjOgotCQlyeF9kZXNjLT53Yi5taWRkbGUuc3RhdHVzX2Vycm9yICY9IH4weEZGOworCQlyeF9kZXNjLT53Yi5taWRkbGUuc3RhdHVzX2Vycm9yICY9IGNwdV90b19sZTMyKH4weEZGKTsKIAkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAKIAkJLyogcmV0dXJuIHNvbWUgYnVmZmVycyB0byBoYXJkd2FyZSwgb25lIGF0IGEgdGltZSBpcyB0b28gc2xvdyAqLwpAQCAtMzkyMCw2ICszODA4LDcgQEAKIAkJCWNsZWFuZWRfY291bnQgPSAwOwogCQl9CiAKKwkJLyogdXNlIHByZWZldGNoZWQgdmFsdWVzICovCiAJCXJ4X2Rlc2MgPSBuZXh0X3J4ZDsKIAkJYnVmZmVyX2luZm8gPSBuZXh0X2J1ZmZlcjsKIApAQCAtMzk2Myw3ICszODUyLDYgQEAKIAkJCWdvdG8gbWFwX3NrYjsKIAkJfQogCi0KIAkJaWYgKHVubGlrZWx5KCFza2IpKSB7CiAJCQkvKiBCZXR0ZXIgbHVjayBuZXh0IHJvdW5kICovCiAJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwpAQCAtNDI2OSw3ICs0MTU3LDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfbTg4KSB7CisJCWlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQkJc3dpdGNoIChkYXRhLT5yZWdfbnVtKSB7CiAJCQljYXNlIFBIWV9DVFJMOgogCQkJCWlmIChtaWlfcmVnICYgTUlJX0NSX1BPV0VSX0RPV04pCkBAIC00Mjg1LDggKzQxNzMsOCBAQAogCQkJCQllbHNlCiAJCQkJCQlzcGRkcGx4ID0gU1BFRURfMTA7CiAJCQkJCXNwZGRwbHggKz0gKG1paV9yZWcgJiAweDEwMCkKLQkJCQkJCSAgID8gRlVMTF9EVVBMRVggOgotCQkJCQkJICAgSEFMRl9EVVBMRVg7CisJCQkJCQkgICA/IERVUExFWF9GVUxMIDoKKwkJCQkJCSAgIERVUExFWF9IQUxGOwogCQkJCQlyZXR2YWwgPSBlMTAwMF9zZXRfc3BkX2RwbHgoYWRhcHRlciwKIAkJCQkJCQkJICAgIHNwZGRwbHgpOwogCQkJCQlpZiAocmV0dmFsKSB7CkBAIC00NTE2LDggKzQ0MDQsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi0vKiB0aGVzZSBmdW5jdGlvbnMgc2F2ZSBhbmQgcmVzdG9yZSAxNiBvciA2NCBkd29yZHMgKDY0LTI1NiBieXRlcykgb2YgY29uZmlnCi0gKiBzcGFjZSB2ZXJzdXMgdGhlIDY0IGJ5dGVzIHRoYXQgcGNpX1tzYXZlfHJlc3RvcmVdX3N0YXRlIGhhbmRsZQorLyogU2F2ZS9yZXN0b3JlIDE2IG9yIDY0IGR3b3JkcyBvZiBQQ0kgY29uZmlnIHNwYWNlIGRlcGVuZGluZyBvbiB3aGljaAorICogYnVzIHdlJ3JlIG9uIChQQ0koWCkgdnMuIFBDSS1FKQogICovCiAjZGVmaW5lIFBDSUVfQ09ORklHX1NQQUNFX0xFTiAyNTYKICNkZWZpbmUgUENJX0NPTkZJR19TUEFDRV9MRU4gNjQKQEAgLTQ1MjcsNiArNDQxNSw3IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGFkYXB0ZXItPnBkZXY7CiAJaW50IHNpemU7CiAJaW50IGk7CisKIAlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NzEpCiAJCXNpemUgPSBQQ0lFX0NPTkZJR19TUEFDRV9MRU47CiAJZWxzZQpAQCAtNDU1MCw4ICs0NDM5LDEwIEBACiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGFkYXB0ZXItPnBkZXY7CiAJaW50IHNpemU7CiAJaW50IGk7CisKIAlpZiAoYWRhcHRlci0+Y29uZmlnX3NwYWNlID09IE5VTEwpCiAJCXJldHVybjsKKwogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkKIAkJc2l6ZSA9IFBDSUVfQ09ORklHX1NQQUNFX0xFTjsKIAllbHNlCkBAIC00NTc5LDggKzQ0NzAsOCBAQAogCQllMTAwMF9kb3duKGFkYXB0ZXIpOwogCiAjaWZkZWYgQ09ORklHX1BNCi0JLyogaW1wbGVtZW50IG91ciBvd24gdmVyc2lvbiBvZiBwY2lfc2F2ZV9zdGF0ZShwZGV2KSBiZWNhdXNlIHBjaSAKLQkgKiBleHByZXNzIGFkYXB0ZXJzIGhhdmUgbGFyZ2VyIDI1NiBieXRlIGNvbmZpZyBzcGFjZXMgKi8KKwkvKiBJbXBsZW1lbnQgb3VyIG93biB2ZXJzaW9uIG9mIHBjaV9zYXZlX3N0YXRlKHBkZXYpIGJlY2F1c2UgcGNpLQorCSAqIGV4cHJlc3MgYWRhcHRlcnMgaGF2ZSAyNTYtYnl0ZSBjb25maWcgc3BhY2VzLiAqLwogCXJldHZhbCA9IGUxMDAwX3BjaV9zYXZlX3N0YXRlKGFkYXB0ZXIpOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CkBAIC00NjM3LDcgKzQ1MjgsNyBAQAogCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKIAkJaWYgKHJldHZhbCkKIAkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIHdha2VcbiIpOwotCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7IC8qIDQgPT0gRDMgY29sZCAqLworCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CiAJCWlmIChyZXR2YWwpCiAJCQlEUFJJTlRLKFBST0JFLCBFUlIsICJFcnJvciBlbmFibGluZyBEMyBjb2xkIHdha2VcbiIpOwogCX0KQEAgLTQ2NTMsNyArNDU0NCw4IEBACiAJCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiRXJyb3IgZW5hYmxpbmcgRDMgd2FrZVxuIik7CiAJCQlyZXR2YWwgPSBwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CiAJCQlpZiAocmV0dmFsKQotCQkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkVycm9yIGVuYWJsaW5nIEQzIGNvbGQgd2FrZVxuIik7CisJCQkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkJCSAgICAgICAgIkVycm9yIGVuYWJsaW5nIEQzIGNvbGQgd2FrZVxuIik7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jCmluZGV4IDM3NjhkODMuLmUwYTRkMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJCUJVRygpOwogCX0KIAotCURQUklOVEsoUFJPQkUsIElORk8sICJJbnZhbGlkICVzIHNwZWNpZmllZCAoJWkpICVzXG4iLAorCURQUklOVEsoUFJPQkUsIElORk8sICJJbnZhbGlkICVzIHZhbHVlIHNwZWNpZmllZCAoJWkpICVzXG4iLAogCSAgICAgICBvcHQtPm5hbWUsICp2YWx1ZSwgb3B0LT5lcnIpOwogCSp2YWx1ZSA9IG9wdC0+ZGVmOwogCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VlcHJvMTAwLmMgYi9kcml2ZXJzL25ldC9lZXBybzEwMC5jCmluZGV4IDhjNjJjZWQuLjQ2N2ZjODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VlcHJvMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZWVwcm8xMDAuYwpAQCAtMjcsNyArMjcsNyBAQAogCQlyeF9hbGlnbiBzdXBwb3J0OiBlbmFibGVzIHJ4IERNQSB3aXRob3V0IGNhdXNpbmcgdW5hbGlnbmVkIGFjY2Vzc2VzLgogKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2ZXJzaW9uID0KICJlZXBybzEwMC5jOnYxLjA5ai10IDkvMjkvOTkgRG9uYWxkIEJlY2tlciBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2VlcHJvMTAwLmh0bWxcbiIKICJlZXBybzEwMC5jOiAkUmV2aXNpb246IDEuMzYgJCAyMDAwLzExLzE3IE1vZGlmaWVkIGJ5IEFuZHJleSBWLiBTYXZvY2hraW4gPHNhd0BzYXcuc3cuY29tLnNnPiBhbmQgb3RoZXJzXG4iOwogCkBAIC00NjksNyArNDY5LDcgQEAKIAkweDMxLCAweDA1LCB9OwogCiAvKiBQSFkgbWVkaWEgaW50ZXJmYWNlIGNoaXBzLiAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnBoeXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGh5c1tdID0gewogCSJOb25lIiwgImk4MjU1My1BL0IiLCAiaTgyNTUzLUMiLCAiaTgyNTAzIiwKIAkiRFA4Mzg0MCIsICI4MGMyNDAiLCAiODBjMjQiLCAiaTgyNTU1IiwKIAkidW5rbm93bi04IiwgInVua25vd24tOSIsICJEUDgzODQwQSIsICJ1bmtub3duLTExIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwppbmRleCBmMTE5ZWM0Li4yZjdiODY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcGljMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAogCiAvKiBpbmRleGVkIGJ5IGNoaXBfdCAqLwotc3RhdGljIHN0cnVjdCBlcGljX2NoaXBfaW5mbyBwY2lfaWRfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGVwaWNfY2hpcF9pbmZvIHBjaV9pZF90YmxbXSA9IHsKIAl7ICJTTVNDIEVQSUMvMTAwIDgzYzE3MCIsCiAJIEVQSUNfSU9UWVBFLCBFUElDX1RPVEFMX1NJWkUsIFRZUEUyX0lOVFIgfCBOT19NSUkgfCBNSUlfUFdSRFdOIH0sCiAJeyAiU01TQyBFUElDLzEwMCA4M2MxNzAiLApAQCAtMjkxLDcgKzI5MSw3IEBACiAJCQkgUnhEb25lIHwgUnhTdGFydGVkIHwgUnhFYXJseVdhcm4gfCBSeE92ZXJmbG93IHwgUnhGdWxsKQogI2RlZmluZSBFcGljTm9ybWFsRXZlbnQJKDB4MDAwMGZmZmYgJiB+RXBpY05hcGlFdmVudCkKIAotc3RhdGljIHUxNiBtZWRpYTJtaWljdGxbMTZdID0geworc3RhdGljIGNvbnN0IHUxNiBtZWRpYTJtaWljdGxbMTZdID0gewogCTAsIDB4MEMwMCwgMHgwQzAwLCAweDIwMDAsICAweDAxMDAsIDB4MjEwMCwgMCwgMCwKIAkwLCAwLCAwLCAwLCAgMCwgMCwgMCwgMCB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGgxNmkuYyBiL2RyaXZlcnMvbmV0L2V0aDE2aS5jCmluZGV4IGYzMmE2YjMuLmI2NzU0NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aDE2aS5jCkBAIC0xNjEsNiArMTYxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4JCSAgCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkgIApAQCAtNzU0LDcgKzc1NSw3IEBACiAKIHN0YXRpYyBpbnQgZXRoMTZpX3NlbmRfcHJvYmVfcGFja2V0KGludCBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmIsIGludCBsKQogewotCWludCBzdGFydHRpbWU7CisJdW5zaWduZWQgbG9uZyBzdGFydHRpbWU7CiAKIAlvdXRiKDB4ZmYsIGlvYWRkciArIFRYX1NUQVRVU19SRUcpOwogCkBAIC03NjUsNyArNzY2LDcgQEAKIAlvdXRiKFRYX1NUQVJUIHwgMSwgaW9hZGRyICsgVFJBTlNNSVRfU1RBUlRfUkVHKTsgCiAKIAl3aGlsZSggKGluYihpb2FkZHIgKyBUWF9TVEFUVVNfUkVHKSAmIDB4ODApID09IDApIHsKLQkJaWYoIChqaWZmaWVzIC0gc3RhcnR0aW1lKSA+IFRYX1RJTUVPVVQpIHsKKwkJaWYoIHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnR0aW1lICsgVFhfVElNRU9VVCkpIHsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0KQEAgLTc3NSwxOCArNzc2LDE4IEBACiAKIHN0YXRpYyBpbnQgZXRoMTZpX3JlY2VpdmVfcHJvYmVfcGFja2V0KGludCBpb2FkZHIpCiB7Ci0JaW50IHN0YXJ0dGltZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0dGltZTsKIAogCXN0YXJ0dGltZSA9IGppZmZpZXM7CiAKIAl3aGlsZSgoaW5iKGlvYWRkciArIFRYX1NUQVRVU19SRUcpICYgMHgyMCkgPT0gMCkgewotCQlpZiggKGppZmZpZXMgLSBzdGFydHRpbWUpID4gVFhfVElNRU9VVCkgeworCQlpZiggdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydHRpbWUgKyBUWF9USU1FT1VUKSkgewogCiAJCQlpZihldGgxNmlfZGVidWcgPiAxKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJUaW1lb3V0IG9jY3VycmVkIHdhaXRpbmcgdHJhbnNtaXQgcGFja2V0IHJlY2VpdmVkXG4iKTsKIAkJCXN0YXJ0dGltZSA9IGppZmZpZXM7CiAJCQl3aGlsZSgoaW5iKGlvYWRkciArIFJYX1NUQVRVU19SRUcpICYgMHg4MCkgPT0gMCkgewotCQkJCWlmKCAoamlmZmllcyAtIHN0YXJ0dGltZSkgPiBUWF9USU1FT1VUKSB7CisJCQkJaWYoIHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnR0aW1lICsgVFhfVElNRU9VVCkpIHsKIAkJCQkJaWYoZXRoMTZpX2RlYnVnID4gMSkKIAkJCQkJCXByaW50ayhLRVJOX0RFQlVHICJUaW1lb3V0IG9jY3VycmVkIHdhaXRpbmcgcmVjZWl2ZSBwYWNrZXRcbiIpOwogCQkJCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWFsbnguYyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCmluZGV4IDU1ZGJlOWEuLmE4NDQ5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlpbnQgZmxhZ3M7CiB9OwogCi1zdGF0aWMgc3RydWN0IGNoaXBfaW5mbyBza2VsX25ldGRydl90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2hpcF9pbmZvIHNrZWxfbmV0ZHJ2X3RibFtdID0gewogCXsiMTAwLzEwTSBFdGhlcm5ldCBQQ0kgQWRhcHRlciIsIDEzNiwgSEFTX01JSV9YQ1ZSfSwKIAl7IjEwMC8xME0gRXRoZXJuZXQgUENJIEFkYXB0ZXIiLCAxMzYsIEhBU19DSElQX1hDVlJ9LAogCXsiMTAwMC8xMDAvMTBNIEV0aGVybmV0IFBDSSBBZGFwdGVyIiwgMTM2LCBIQVNfTUlJX1hDVlJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWFpbi5jCmluZGV4IGI0ZjNhOWYuLjdlNDMzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY184eHgvZmVjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY19tYWluLmMKQEAgLTU1LDExICs1NSwxMSBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNb3Rvcm9sYSA4eHggRkVDIGV0aGVybmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1NT0RVTEVfUEFSTShmZWNfOHh4X2RlYnVnLCAiaSIpOworaW50IGZlY184eHhfZGVidWcgPSAtMTsJCS8qIC0xID09IHVzZSBGRUNfOFhYX0RFRl9NU0dfRU5BQkxFIGFzIHZhbHVlICovCittb2R1bGVfcGFyYW0oZmVjXzh4eF9kZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZmVjXzh4eF9kZWJ1ZywKIAkJICJGRUMgOHh4IGJpdG1hcHBlZCBkZWJ1Z2dpbmcgbWVzc2FnZSBlbmFibGUgdmFsdWUiKTsKIAotaW50IGZlY184eHhfZGVidWcgPSAtMTsJCS8qIC0xID09IHVzZSBGRUNfOFhYX0RFRl9NU0dfRU5BQkxFIGFzIHZhbHVlICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDM2ODJlYzYuLmU3ZmMyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0xMDIsNiArMTAyLDkgQEAKICAqCTAuNDc6IDI2IE9jdCAyMDA1OiBBZGQgcGh5YWRkciAwIGluIHBoeSBzY2FuLgogICoJMC40ODogMjQgRGVjIDIwMDU6IERpc2FibGUgVFNPLCBidWdmaXggZm9yIHBjaV9tYXBfc2luZ2xlCiAgKgkwLjQ5OiAxMCBEZWMgMjAwNTogRml4IHRzbyBmb3IgbGFyZ2UgYnVmZmVycy4KKyAqCTAuNTA6IDIwIEphbiAyMDA2OiBBZGQgODAyMXBxIHRhZ2dpbmcgc3VwcG9ydC4KKyAqCTAuNTE6IDIwIEphbiAyMDA2OiBBZGQgNjRiaXQgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgcmluZ3MuCisgKgkwLjUyOiAyMCBKYW4gMjAwNjogQWRkIE1TSS9NU0lYIHN1cHBvcnQuCiAgKgogICogS25vd24gYnVnczoKICAqIFdlIHN1c3BlY3QgdGhhdCBvbiBzb21lIGhhcmR3YXJlIG5vIFRYIGRvbmUgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkLgpAQCAtMTEzLDcgKzExNiw3IEBACiAgKiBERVZfTkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdlbmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUgbmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC40OSIKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjUyIgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE1Myw2ICsxNTYsOSBAQAogI2RlZmluZSBERVZfSEFTX0xBUkdFREVTQwkweDAwMDQJLyogZGV2aWNlIHN1cHBvcnRzIGp1bWJvIGZyYW1lcyBhbmQgbmVlZHMgcGFja2V0IGZvcm1hdCAyICovCiAjZGVmaW5lIERFVl9IQVNfSElHSF9ETUEgICAgICAgIDB4MDAwOCAgLyogZGV2aWNlIHN1cHBvcnRzIDY0Yml0IGRtYSAqLwogI2RlZmluZSBERVZfSEFTX0NIRUNLU1VNICAgICAgICAweDAwMTAgIC8qIGRldmljZSBzdXBwb3J0cyB0eCBhbmQgcnggY2hlY2tzdW0gb2ZmbG9hZHMgKi8KKyNkZWZpbmUgREVWX0hBU19WTEFOICAgICAgICAgICAgMHgwMDIwICAvKiBkZXZpY2Ugc3VwcG9ydHMgdmxhbiB0YWdnaW5nIGFuZCBzdHJpcGluZyAqLworI2RlZmluZSBERVZfSEFTX01TSSAgICAgICAgICAgICAweDAwNDAgIC8qIGRldmljZSBzdXBwb3J0cyBNU0kgKi8KKyNkZWZpbmUgREVWX0hBU19NU0lfWCAgICAgICAgICAgMHgwMDgwICAvKiBkZXZpY2Ugc3VwcG9ydHMgTVNJLVggKi8KIAogZW51bSB7CiAJTnZSZWdJcnFTdGF0dXMgPSAweDAwMCwKQEAgLTE2NiwxNCArMTcyLDE3IEBACiAjZGVmaW5lIE5WUkVHX0lSUV9UWF9PSwkJCTB4MDAxMAogI2RlZmluZSBOVlJFR19JUlFfVElNRVIJCQkweDAwMjAKICNkZWZpbmUgTlZSRUdfSVJRX0xJTksJCQkweDAwNDAKLSNkZWZpbmUgTlZSRUdfSVJRX1RYX0VSUk9SCQkweDAwODAKLSNkZWZpbmUgTlZSRUdfSVJRX1RYMQkJCTB4MDEwMAorI2RlZmluZSBOVlJFR19JUlFfUlhfRk9SQ0VECQkweDAwODAKKyNkZWZpbmUgTlZSRUdfSVJRX1RYX0ZPUkNFRAkJMHgwMTAwCiAjZGVmaW5lIE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVAkweDAwZGYKICNkZWZpbmUgTlZSRUdfSVJRTUFTS19DUFUJCTB4MDA0MAorI2RlZmluZSBOVlJFR19JUlFfVFhfQUxMCQkoTlZSRUdfSVJRX1RYX0VSUnxOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RYX0ZPUkNFRCkKKyNkZWZpbmUgTlZSRUdfSVJRX1JYX0FMTAkJKE5WUkVHX0lSUV9SWF9FUlJPUnxOVlJFR19JUlFfUlh8TlZSRUdfSVJRX1JYX05PQlVGfE5WUkVHX0lSUV9SWF9GT1JDRUQpCisjZGVmaW5lIE5WUkVHX0lSUV9PVEhFUgkJCShOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkspCiAKICNkZWZpbmUgTlZSRUdfSVJRX1VOS05PV04JKH4oTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUZ8TlZSRUdfSVJRX1RYX0VSUnwgXAotCQkJCQlOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RJTUVSfE5WUkVHX0lSUV9MSU5LfE5WUkVHX0lSUV9UWF9FUlJPUnwgXAotCQkJCQlOVlJFR19JUlFfVFgxKSkKKwkJCQkJTlZSRUdfSVJRX1RYX09LfE5WUkVHX0lSUV9USU1FUnxOVlJFR19JUlFfTElOS3xOVlJFR19JUlFfUlhfRk9SQ0VEfCBcCisJCQkJCU5WUkVHX0lSUV9UWF9GT1JDRUQpKQogCiAJTnZSZWdVbmtub3duU2V0dXBSZWc2ID0gMHgwMDgsCiAjZGVmaW5lIE5WUkVHX1VOS1NFVFVQNl9WQUwJCTMKQEAgLTE4NSw2ICsxOTQsMTAgQEAKIAlOdlJlZ1BvbGxpbmdJbnRlcnZhbCA9IDB4MDBjLAogI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFRfVEhST1VHSFBVVAk5NzAKICNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX0NQVQkxMworCU52UmVnTVNJTWFwMCA9IDB4MDIwLAorCU52UmVnTVNJTWFwMSA9IDB4MDI0LAorCU52UmVnTVNJSXJxTWFzayA9IDB4MDMwLAorI2RlZmluZSBOVlJFR19NU0lfVkVDVE9SXzBfRU5BQkxFRCAweDAxCiAJTnZSZWdNaXNjMSA9IDB4MDgwLAogI2RlZmluZSBOVlJFR19NSVNDMV9IRAkJMHgwMgogI2RlZmluZSBOVlJFR19NSVNDMV9GT1JDRQkweDNiMGYzYwpAQCAtMjU0LDYgKzI2NywxMCBAQAogI2RlZmluZSBOVlJFR19UWFJYQ1RMX0RFU0NfMQkwCiAjZGVmaW5lIE5WUkVHX1RYUlhDVExfREVTQ18yCTB4MDIxMDAKICNkZWZpbmUgTlZSRUdfVFhSWENUTF9ERVNDXzMJMHgwMjIwMAorI2RlZmluZSBOVlJFR19UWFJYQ1RMX1ZMQU5TVFJJUCAweDAwMDQwCisjZGVmaW5lIE5WUkVHX1RYUlhDVExfVkxBTklOUwkweDAwMDgwCisJTnZSZWdUeFJpbmdQaHlzQWRkckhpZ2ggPSAweDE0OCwKKwlOdlJlZ1J4UmluZ1BoeXNBZGRySGlnaCA9IDB4MTRDLAogCU52UmVnTUlJU3RhdHVzID0gMHgxODAsCiAjZGVmaW5lIE5WUkVHX01JSVNUQVRfRVJST1IJCTB4MDAwMQogI2RlZmluZSBOVlJFR19NSUlTVEFUX0xJTktDSEFOR0UJMHgwMDA4CkBAIC0zMDMsNiArMzIwLDExIEBACiAjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEVfRDEJCTB4MDAwMQogI2RlZmluZSBOVlJFR19QT1dFUlNUQVRFX0QyCQkweDAwMDIKICNkZWZpbmUgTlZSRUdfUE9XRVJTVEFURV9EMwkJMHgwMDAzCisJTnZSZWdWbGFuQ29udHJvbCA9IDB4MzAwLAorI2RlZmluZSBOVlJFR19WTEFOQ09OVFJPTF9FTkFCTEUJMHgyMDAwCisJTnZSZWdNU0lYTWFwMCA9IDB4M2UwLAorCU52UmVnTVNJWE1hcDEgPSAweDNlNCwKKwlOdlJlZ01TSVhJcnFTdGF0dXMgPSAweDNmMCwKIH07CiAKIC8qIEJpZyBlbmRpYW46IHNob3VsZCB3b3JrLCBidXQgaXMgdW50ZXN0ZWQgKi8KQEAgLTMxNCw3ICszMzYsNyBAQAogc3RydWN0IHJpbmdfZGVzY19leCB7CiAJdTMyIFBhY2tldEJ1ZmZlckhpZ2g7CiAJdTMyIFBhY2tldEJ1ZmZlckxvdzsKLQl1MzIgUmVzZXJ2ZWQ7CisJdTMyIFR4VmxhbjsKIAl1MzIgRmxhZ0xlbjsKIH07CiAKQEAgLTM1NSw2ICszNzcsOCBAQAogI2RlZmluZSBOVl9UWDJfQ0hFQ0tTVU1fTDMJKDE8PDI3KQogI2RlZmluZSBOVl9UWDJfQ0hFQ0tTVU1fTDQJKDE8PDI2KQogCisjZGVmaW5lIE5WX1RYM19WTEFOX1RBR19QUkVTRU5UICgxPDwxOCkKKwogI2RlZmluZSBOVl9SWF9ERVNDUklQVE9SVkFMSUQJKDE8PDE2KQogI2RlZmluZSBOVl9SWF9NSVNTRURGUkFNRQkoMTw8MTcpCiAjZGVmaW5lIE5WX1JYX1NVQlNUUkFDVDEJKDE8PDE4KQpAQCAtMzg1LDYgKzQwOSw5IEBACiAjZGVmaW5lIE5WX1JYMl9FUlJPUgkJKDE8PDMwKQogI2RlZmluZSBOVl9SWDJfQVZBSUwJCSgxPDwzMSkKIAorI2RlZmluZSBOVl9SWDNfVkxBTl9UQUdfUFJFU0VOVCAoMTw8MTYpCisjZGVmaW5lIE5WX1JYM19WTEFOX1RBR19NQVNLCSgweDAwMDBGRkZGKQorCiAvKiBNaXNjZWxhbmVvdXMgaGFyZHdhcmUgcmVsYXRlZCBkZWZpbmVzOiAqLwogI2RlZmluZSBOVl9QQ0lfUkVHU1oJCTB4MjcwCiAKQEAgLTQ3NSw2ICs1MDIsMTggQEAKICNkZWZpbmUgTFBBXzEwMDBGVUxMCTB4MDgwMAogI2RlZmluZSBMUEFfMTAwMEhBTEYJMHgwNDAwCiAKKy8qIE1TSS9NU0ktWCBkZWZpbmVzICovCisjZGVmaW5lIE5WX01TSV9YX01BWF9WRUNUT1JTICA4CisjZGVmaW5lIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSyAweDAwMGYKKyNkZWZpbmUgTlZfTVNJX0NBUEFCTEUgICAgICAgIDB4MDAxMAorI2RlZmluZSBOVl9NU0lfWF9DQVBBQkxFICAgICAgMHgwMDIwCisjZGVmaW5lIE5WX01TSV9FTkFCTEVEICAgICAgICAweDAwNDAKKyNkZWZpbmUgTlZfTVNJX1hfRU5BQkxFRCAgICAgIDB4MDA4MAorCisjZGVmaW5lIE5WX01TSV9YX1ZFQ1RPUl9BTEwgICAweDAKKyNkZWZpbmUgTlZfTVNJX1hfVkVDVE9SX1JYICAgIDB4MAorI2RlZmluZSBOVl9NU0lfWF9WRUNUT1JfVFggICAgMHgxCisjZGVmaW5lIE5WX01TSV9YX1ZFQ1RPUl9PVEhFUiAweDIKIAogLyoKICAqIFNNUCBsb2NraW5nOgpAQCAtNTExLDYgKzU1MCw3IEBACiAJdTMyIGlycW1hc2s7CiAJdTMyIGRlc2NfdmVyOwogCXUzMiB0eHJ4Y3RsX2JpdHM7CisJdTMyIHZsYW5jdGxfYml0czsKIAogCXZvaWQgX19pb21lbSAqYmFzZTsKIApAQCAtNTI1LDYgKzU2NSw3IEBACiAJdW5zaWduZWQgaW50IHBrdF9saW1pdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBvb21fa2ljazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBuaWNfcG9sbDsKKwl1MzIgbmljX3BvbGxfaXJxOwogCiAJLyogbWVkaWEgZGV0ZWN0aW9uIHdvcmthcm91bmQuCiAJICogTG9ja2luZzogV2l0aGluIGlycSBoYW5kZXIgb3IgZGlzYWJsZV9pcnErc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC01NDAsNiArNTgxLDEzIEBACiAJZG1hX2FkZHJfdCB0eF9kbWFbVFhfUklOR107CiAJdW5zaWduZWQgaW50IHR4X2RtYV9sZW5bVFhfUklOR107CiAJdTMyIHR4X2ZsYWdzOworCisJLyogdmxhbiBmaWVsZHMgKi8KKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxhbmdycDsKKworCS8qIG1zaS9tc2kteCBmaWVsZHMgKi8KKwl1MzIgbXNpX2ZsYWdzOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaV94X2VudHJ5W05WX01TSV9YX01BWF9WRUNUT1JTXTsKIH07CiAKIC8qCkBAIC01NjcsNiArNjE1LDE2IEBACiAgKi8KIHN0YXRpYyBpbnQgcG9sbF9pbnRlcnZhbCA9IC0xOwogCisvKgorICogRGlzYWJsZSBNU0kgaW50ZXJydXB0cworICovCitzdGF0aWMgaW50IGRpc2FibGVfbXNpID0gMDsKKworLyoKKyAqIERpc2FibGUgTVNJWCBpbnRlcnJ1cHRzCisgKi8KK3N0YXRpYyBpbnQgZGlzYWJsZV9tc2l4ID0gMDsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmVfcHJpdiAqZ2V0X252cHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjEyLDYgKzY3MCwzMyBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIE5WX1NFVFVQX1JYX1JJTkcgMHgwMQorI2RlZmluZSBOVl9TRVRVUF9UWF9SSU5HIDB4MDIKKworc3RhdGljIHZvaWQgc2V0dXBfaHdfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHJ4dHhfZmxhZ3MpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisKKwlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKKwkJaWYgKHJ4dHhfZmxhZ3MgJiBOVl9TRVRVUF9SWF9SSU5HKSB7CisJCQl3cml0ZWwoKHUzMikgY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkciksIGJhc2UgKyBOdlJlZ1J4UmluZ1BoeXNBZGRyKTsKKwkJfQorCQlpZiAocnh0eF9mbGFncyAmIE5WX1NFVFVQX1RYX1JJTkcpIHsKKwkJCXdyaXRlbCgodTMyKSBjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyICsgUlhfUklORypzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykpLCBiYXNlICsgTnZSZWdUeFJpbmdQaHlzQWRkcik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocnh0eF9mbGFncyAmIE5WX1NFVFVQX1JYX1JJTkcpIHsKKwkJCXdyaXRlbCgodTMyKSBjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyKSwgYmFzZSArIE52UmVnUnhSaW5nUGh5c0FkZHIpOworCQkJd3JpdGVsKCh1MzIpIChjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyKSA+PiAzMiksIGJhc2UgKyBOdlJlZ1J4UmluZ1BoeXNBZGRySGlnaCk7CisJCX0KKwkJaWYgKHJ4dHhfZmxhZ3MgJiBOVl9TRVRVUF9UWF9SSU5HKSB7CisJCQl3cml0ZWwoKHUzMikgY3B1X3RvX2xlNjQobnAtPnJpbmdfYWRkciArIFJYX1JJTkcqc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHIpOworCQkJd3JpdGVsKCh1MzIpIChjcHVfdG9fbGU2NChucC0+cmluZ19hZGRyICsgUlhfUklORypzaXplb2Yoc3RydWN0IHJpbmdfZGVzY19leCkpID4+IDMyKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHJIaWdoKTsKKwkJfQorCX0KK30KKwogI2RlZmluZSBNSUlfUkVBRAkoLTEpCiAvKiBtaWlfcnc6IHJlYWQvd3JpdGUgYSByZWdpc3RlciBvbiB0aGUgUEhZLgogICoKQEAgLTkwMywxNCArOTg4LDI3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKKwkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCisJICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09IDB4MSkpKSB7CisJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwl9IGVsc2UgeworCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IpOworCX0KIAlpZiAobnZfYWxsb2NfcngoZGV2KSkgewogCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJaWYgKCFucC0+aW5fc2h1dGRvd24pCiAJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCX0KLQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKKwkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCisJICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09IDB4MSkpKSB7CisJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCX0gZWxzZSB7CisJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIG52X2luaXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCkBAIC05NjUsNyArMTA2Myw3IEBACiAJfQogCiAJaWYgKG5wLT50eF9za2J1ZmZbc2tibnJdKSB7Ci0JCWRldl9rZnJlZV9za2JfaXJxKG5wLT50eF9za2J1ZmZbc2tibnJdKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPnR4X3NrYnVmZltza2Jucl0pOwogCQlucC0+dHhfc2tidWZmW3NrYm5yXSA9IE5VTEw7CiAJCXJldHVybiAxOwogCX0gZWxzZSB7CkBAIC0xMDMxLDYgKzExMjksNyBAQAogCXUzMiBiY250OwogCXUzMiBzaXplID0gc2tiLT5sZW4tc2tiLT5kYXRhX2xlbjsKIAl1MzIgZW50cmllcyA9IChzaXplID4+IE5WX1RYMl9UU09fTUFYX1NISUZUKSArICgoc2l6ZSAmIChOVl9UWDJfVFNPX01BWF9TSVpFLTEpKSA/IDEgOiAwKTsKKwl1MzIgdHhfZmxhZ3NfdmxhbiA9IDA7CiAKIAkvKiBhZGQgZnJhZ21lbnRzIHRvIGVudHJpZXMgY291bnQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnRzOyBpKyspIHsKQEAgLTExMTEsMTAgKzEyMTAsMTYgQEAKICNlbmRpZgogCXR4X2ZsYWdzX2V4dHJhID0gKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXID8gKE5WX1RYMl9DSEVDS1NVTV9MM3xOVl9UWDJfQ0hFQ0tTVU1fTDQpIDogMCk7CiAKKwkvKiB2bGFuIHRhZyAqLworCWlmIChucC0+dmxhbmdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJdHhfZmxhZ3NfdmxhbiA9IE5WX1RYM19WTEFOX1RBR19QUkVTRU5UIHwgdmxhbl90eF90YWdfZ2V0KHNrYik7CisJfQorCiAJLyogc2V0IHR4IGZsYWdzICovCiAJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7CiAJCW5wLT50eF9yaW5nLm9yaWdbc3RhcnRfbnJdLkZsYWdMZW4gfD0gY3B1X3RvX2xlMzIodHhfZmxhZ3MgfCB0eF9mbGFnc19leHRyYSk7CiAJfSBlbHNlIHsKKwkJbnAtPnR4X3JpbmcuZXhbc3RhcnRfbnJdLlR4VmxhbiA9IGNwdV90b19sZTMyKHR4X2ZsYWdzX3ZsYW4pOwogCQlucC0+dHhfcmluZy5leFtzdGFydF9ucl0uRmxhZ0xlbiB8PSBjcHVfdG9fbGUzMih0eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKIAl9CQogCkBAIC0xMjA5LDkgKzEzMTQsMTQgQEAKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIHN0YXR1czsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBHb3QgdHhfdGltZW91dC4gaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsCi0JCQlyZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLKTsKKwlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCXN0YXR1cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLOworCWVsc2UKKwkJc3RhdHVzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBHb3QgdHhfdGltZW91dC4gaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIHN0YXR1cyk7CiAKIAl7CiAJCWludCBpOwpAQCAtMTI3MywxMCArMTM4Myw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHhfdGltZW91dDogZGVhZCBlbnRyaWVzIVxuIiwgZGV2LT5uYW1lKTsKIAkJbnZfZHJhaW5fdHgoZGV2KTsKIAkJbnAtPm5leHRfdHggPSBucC0+bmljX3R4ID0gMDsKLQkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQotCQkJd3JpdGVsKCh1MzIpIChucC0+cmluZ19hZGRyICsgUlhfUklORypzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykpLCBiYXNlICsgTnZSZWdUeFJpbmdQaHlzQWRkcik7Ci0JCWVsc2UKLQkJCXdyaXRlbCgodTMyKSAobnAtPnJpbmdfYWRkciArIFJYX1JJTkcqc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHIpOworCQlzZXR1cF9od19yaW5ncyhkZXYsIE5WX1NFVFVQX1RYX1JJTkcpOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQogCkBAIC0xMzQyLDYgKzE0NDksOCBAQAogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIEZsYWdzOworCXUzMiB2bGFuZmxhZ3MgPSAwOworCiAKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMzU3LDYgKzE0NjYsNyBAQAogCQl9IGVsc2UgewogCQkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5leFtpXS5GbGFnTGVuKTsKIAkJCWxlbiA9IG52X2Rlc2NyX2dldGxlbmd0aF9leCgmbnAtPnJ4X3JpbmcuZXhbaV0sIG5wLT5kZXNjX3Zlcik7CisJCQl2bGFuZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5leFtpXS5QYWNrZXRCdWZmZXJMb3cpOwogCQl9CiAKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfcnhfcHJvY2VzczogbG9va2luZyBhdCBwYWNrZXQgJWQsIEZsYWdzIDB4JXguXG4iLApAQCAtMTQ3NCw3ICsxNTg0LDExIEBACiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3J4X3Byb2Nlc3M6IHBhY2tldCAlZCB3aXRoICVkIGJ5dGVzLCBwcm90byAlZCBhY2NlcHRlZC5cbiIsCiAJCQkJCWRldi0+bmFtZSwgbnAtPmN1cl9yeCwgbGVuLCBza2ItPnByb3RvY29sKTsKLQkJbmV0aWZfcngoc2tiKTsKKwkJaWYgKG5wLT52bGFuZ3JwICYmICh2bGFuZmxhZ3MgJiBOVl9SWDNfVkxBTl9UQUdfUFJFU0VOVCkpIHsKKwkJCXZsYW5faHdhY2NlbF9yeChza2IsIG5wLT52bGFuZ3JwLCB2bGFuZmxhZ3MgJiBOVl9SWDNfVkxBTl9UQUdfTUFTSyk7CisJCX0gZWxzZSB7CisJCQluZXRpZl9yeChza2IpOworCQl9CiAJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCW5wLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCW5wLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CkBAIC0xNTIzLDcgKzE2MzcsMTUgQEAKIAkJICogZ3Vlc3NlZCwgdGhlcmUgaXMgcHJvYmFibHkgYSBzaW1wbGVyIGFwcHJvYWNoLgogCQkgKiBDaGFuZ2luZyB0aGUgTVRVIGlzIGEgcmFyZSBldmVudCwgaXQgc2hvdWxkbid0IG1hdHRlci4KIAkJICovCi0JCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpIHx8CisJCSAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSAmJiAKKwkJICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09IDB4MSkpKSB7CisJCQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJCX0gZWxzZSB7CisJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IpOworCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yKTsKKwkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CisJCX0KIAkJc3Bpbl9sb2NrX2JoKCZkZXYtPnhtaXRfbG9jayk7CiAJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkvKiBzdG9wIGVuZ2luZXMgKi8KQEAgLTE1NDQsMTEgKzE2NjYsNyBAQAogCQl9CiAJCS8qIHJlaW5pdCBuaWMgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KIAkJd3JpdGVsKG5wLT5yeF9idWZfc3osIGJhc2UgKyBOdlJlZ09mZmxvYWRDb25maWcpOwotCQl3cml0ZWwoKHUzMikgbnAtPnJpbmdfYWRkciwgYmFzZSArIE52UmVnUnhSaW5nUGh5c0FkZHIpOwotCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCi0JCQl3cml0ZWwoKHUzMikgKG5wLT5yaW5nX2FkZHIgKyBSWF9SSU5HKnNpemVvZihzdHJ1Y3QgcmluZ19kZXNjKSksIGJhc2UgKyBOdlJlZ1R4UmluZ1BoeXNBZGRyKTsKLQkJZWxzZQotCQkJd3JpdGVsKCh1MzIpIChucC0+cmluZ19hZGRyICsgUlhfUklORypzaXplb2Yoc3RydWN0IHJpbmdfZGVzY19leCkpLCBiYXNlICsgTnZSZWdUeFJpbmdQaHlzQWRkcik7CisJCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOwogCQl3cml0ZWwoICgoUlhfUklORy0xKSA8PCBOVlJFR19SSU5HU1pfUlhTSElGVCkgKyAoKFRYX1JJTkctMSkgPDwgTlZSRUdfUklOR1NaX1RYU0hJRlQpLAogCQkJYmFzZSArIE52UmVnUmluZ1NpemVzKTsKIAkJcGNpX3B1c2goYmFzZSk7CkBAIC0xNTYwLDcgKzE2NzgsMTUgQEAKIAkJbnZfc3RhcnRfdHgoZGV2KTsKIAkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB8fAorCQkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCisJCSAgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSA9PSAweDEpKSkgeworCQkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJCX0gZWxzZSB7CisJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CisJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CisJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xODY2LDggKzE5OTIsMTMgQEAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxXG4iLCBkZXYtPm5hbWUpOwogCiAJZm9yIChpPTA7IDsgaSsrKSB7Ci0JCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ0lycVN0YXR1cykgJiBOVlJFR19JUlFTVEFUX01BU0s7Ci0JCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgeworCQkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKKwkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUVNUQVRfTUFTSzsKKwkJCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCQl9CiAJCXBjaV9wdXNoKGJhc2UpOwogCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQpAQCAtMTkwNywxMSArMjAzOCwxNiBAQAogCQlpZiAoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykgewogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQorCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJCWVsc2UKKwkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCQkJcGNpX3B1c2goYmFzZSk7CiAKLQkJCWlmICghbnAtPmluX3NodXRkb3duKQorCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKKwkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CiAJCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOworCQkJfQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0b28gbWFueSBpdGVyYXRpb25zICglZCkgaW4gbnZfbmljX2lycS5cbiIsIGRldi0+bmFtZSwgaSk7CiAJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQkJYnJlYWs7CkBAIC0xOTIzLDIyICsyMDU5LDIxMiBAQAogCXJldHVybiBJUlFfUkVUVkFMKGkpOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV90eChpbnQgZm9vLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiBldmVudHM7CisJaW50IGk7CisKKwlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9uaWNfaXJxX3R4XG4iLCBkZXYtPm5hbWUpOworCisJZm9yIChpPTA7IDsgaSsrKSB7CisJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRX1RYX0FMTDsKKwkJd3JpdGVsKE5WUkVHX0lSUV9UWF9BTEwsIGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCQlwY2lfcHVzaChiYXNlKTsKKwkJZHByaW50ayhLRVJOX0RFQlVHICIlczogdHggaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50cyk7CisJCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKKwkJCWJyZWFrOworCisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQludl90eF9kb25lKGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQorCQlpZiAoZXZlbnRzICYgKE5WUkVHX0lSUV9UWF9FUlIpKSB7CisJCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCBldmVudHMgMHgleC4gUHJvYmFibHkgVFggZmFpbC5cbiIsCisJCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7CisJCX0KKwkJaWYgKGkgPiBtYXhfaW50ZXJydXB0X3dvcmspIHsKKwkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KKwkJCXdyaXRlbChOVlJFR19JUlFfVFhfQUxMLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJCXBjaV9wdXNoKGJhc2UpOworCisJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgeworCQkJCW5wLT5uaWNfcG9sbF9pcnEgfD0gTlZSRUdfSVJRX1RYX0FMTDsKKwkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7CisJCQl9CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRvbyBtYW55IGl0ZXJhdGlvbnMgKCVkKSBpbiBudl9uaWNfaXJxX3R4LlxuIiwgZGV2LT5uYW1lLCBpKTsKKwkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCisJfQorCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfdHggY29tcGxldGVkXG4iLCBkZXYtPm5hbWUpOworCisJcmV0dXJuIElSUV9SRVRWQUwoaSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX3J4KGludCBmb28sIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIGV2ZW50czsKKwlpbnQgaTsKKworCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfcnhcbiIsIGRldi0+bmFtZSk7CisKKwlmb3IgKGk9MDsgOyBpKyspIHsKKwkJZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFfUlhfQUxMOworCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJCXBjaV9wdXNoKGJhc2UpOworCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByeCBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKKwkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQorCQkJYnJlYWs7CisJCQorCQludl9yeF9wcm9jZXNzKGRldik7CisJCWlmIChudl9hbGxvY19yeChkZXYpKSB7CisJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJCWlmICghbnAtPmluX3NodXRkb3duKQorCQkJCW1vZF90aW1lcigmbnAtPm9vbV9raWNrLCBqaWZmaWVzICsgT09NX1JFRklMTCk7CisJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQl9CisJCQorCQlpZiAoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykgeworCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLworCQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQkJcGNpX3B1c2goYmFzZSk7CisKKwkJCWlmICghbnAtPmluX3NodXRkb3duKSB7CisJCQkJbnAtPm5pY19wb2xsX2lycSB8PSBOVlJFR19JUlFfUlhfQUxMOworCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfcnguXG4iLCBkZXYtPm5hbWUsIGkpOworCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwl9CisJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9yeCBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChpKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfb3RoZXIoaW50IGZvbywgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwl1MzIgZXZlbnRzOworCWludCBpOworCisJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9vdGhlclxuIiwgZGV2LT5uYW1lKTsKKworCWZvciAoaT0wOyA7IGkrKykgeworCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKSAmIE5WUkVHX0lSUV9PVEhFUjsKKwkJd3JpdGVsKE5WUkVHX0lSUV9PVEhFUiwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJCXBjaV9wdXNoKGJhc2UpOworCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnE6ICUwOHhcbiIsIGRldi0+bmFtZSwgZXZlbnRzKTsKKwkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQorCQkJYnJlYWs7CisJCQorCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspIHsKKwkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJbnZfbGlua19pcnEoZGV2KTsKKwkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCX0KKwkJaWYgKG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSB7CisJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJCW52X2xpbmtjaGFuZ2UoZGV2KTsKKwkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKKwkJfQorCQlpZiAoZXZlbnRzICYgKE5WUkVHX0lSUV9VTktOT1dOKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCB1bmtub3duIGV2ZW50cyAweCV4LiBQbGVhc2UgcmVwb3J0XG4iLAorCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOworCQl9CisJCWlmIChpID4gbWF4X2ludGVycnVwdF93b3JrKSB7CisJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCisJCQl3cml0ZWwoTlZSRUdfSVJRX09USEVSLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJCXBjaV9wdXNoKGJhc2UpOworCisJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgeworCQkJCW5wLT5uaWNfcG9sbF9pcnEgfD0gTlZSRUdfSVJRX09USEVSOworCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnFfb3RoZXIuXG4iLCBkZXYtPm5hbWUsIGkpOworCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwl9CisJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9vdGhlciBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChpKTsKK30KKwogc3RhdGljIHZvaWQgbnZfZG9fbmljX3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIG1hc2sgPSAwOwogCi0JZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwotCS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHN5bmNocm9uaXplX2lycShkZXYtPmlycSkgaGVyZT8gKi8KIAkvKgorCSAqIEZpcnN0IGRpc2FibGUgaXJxKHMpIGFuZCB0aGVuCiAJICogcmVlbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljLCB3ZSBoYXZlIHRvIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcKIAkgKiBudl9uaWNfaXJxIGJlY2F1c2UgdGhhdCBtYXkgZGVjaWRlIHRvIGRvIG90aGVyd2lzZQogCSAqLwotCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwKKwkgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgJiYgCisJICAgICAoKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9WRUNUT1JTX01BU0spID09IDB4MSkpKSB7CisJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJbWFzayA9IG5wLT5pcnFtYXNrOworCX0gZWxzZSB7CisJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX1JYX0FMTCkgeworCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKKwkJCW1hc2sgfD0gTlZSRUdfSVJRX1JYX0FMTDsKKwkJfQorCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9UWF9BTEwpIHsKKwkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CisJCQltYXNrIHw9IE5WUkVHX0lSUV9UWF9BTEw7CisJCX0KKwkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfT1RIRVIpIHsKKwkJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfT1RIRVJdLnZlY3Rvcik7CisJCQltYXNrIHw9IE5WUkVHX0lSUV9PVEhFUjsKKwkJfQorCX0KKwlucC0+bmljX3BvbGxfaXJxID0gMDsKKworCS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHN5bmNocm9uaXplX2lycShkZXYtPmlycSkgaGVyZT8gKi8KKwkKKwl3cml0ZWwobWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CiAJcGNpX3B1c2goYmFzZSk7Ci0JbnZfbmljX2lycSgoaW50KSAwLCAodm9pZCAqKSBkYXRhLCAoc3RydWN0IHB0X3JlZ3MgKikgTlVMTCk7Ci0JZW5hYmxlX2lycShkZXYtPmlycSk7CisKKwlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkgfHwgCisJICAgICgobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpICYmIAorCSAgICAgKChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfVkVDVE9SU19NQVNLKSA9PSAweDEpKSkgeworCQludl9uaWNfaXJxKChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBOVUxMKTsKKwkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJfSBlbHNlIHsKKwkJaWYgKG5wLT5uaWNfcG9sbF9pcnEgJiBOVlJFR19JUlFfUlhfQUxMKSB7CisJCQludl9uaWNfaXJxX3J4KChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBOVUxMKTsKKwkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKKwkJfQorCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9UWF9BTEwpIHsKKwkJCW52X25pY19pcnFfdHgoKGludCkgMCwgKHZvaWQgKikgZGF0YSwgKHN0cnVjdCBwdF9yZWdzICopIE5VTEwpOworCQkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IpOworCQl9CisJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX09USEVSKSB7CisJCQludl9uaWNfaXJxX290aGVyKChpbnQpIDAsICh2b2lkICopIGRhdGEsIChzdHJ1Y3QgcHRfcmVncyAqKSBOVUxMKTsKKwkJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yKTsKKwkJfQorCX0KIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0yMjE3LDExICsyNTQzLDY2IEBACiAJLmdldF9wZXJtX2FkZHIgPSBldGh0b29sX29wX2dldF9wZXJtX2FkZHIsCiB9OwogCitzdGF0aWMgdm9pZCBudl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCisJLyogc2F2ZSB2bGFuIGdyb3VwICovCisJbnAtPnZsYW5ncnAgPSBncnA7CisKKwlpZiAoZ3JwKSB7CisJCS8qIGVuYWJsZSB2bGFuIG9uIE1BQyAqLworCQlucC0+dHhyeGN0bF9iaXRzIHw9IE5WUkVHX1RYUlhDVExfVkxBTlNUUklQIHwgTlZSRUdfVFhSWENUTF9WTEFOSU5TOworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgdmxhbiBvbiBNQUMgKi8KKwkJbnAtPnR4cnhjdGxfYml0cyAmPSB+TlZSRUdfVFhSWENUTF9WTEFOU1RSSVA7CisJCW5wLT50eHJ4Y3RsX2JpdHMgJj0gfk5WUkVHX1RYUlhDVExfVkxBTklOUzsKKwl9CisKKwl3cml0ZWwobnAtPnR4cnhjdGxfYml0cywgZ2V0X2h3YmFzZShkZXYpICsgTnZSZWdUeFJ4Q29udHJvbCk7CisKKwlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKK307CisKK3N0YXRpYyB2b2lkIG52X3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQoreworCS8qIG5vdGhpbmcgdG8gZG8gKi8KK307CisKK3N0YXRpYyB2b2lkIHNldF9tc2l4X3ZlY3Rvcl9tYXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZlY3RvciwgdTMyIGlycW1hc2spCit7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwlpbnQgaTsKKwl1MzIgbXNpeG1hcCA9IDA7CisKKwkvKiBFYWNoIGludGVycnVwdCBiaXQgY2FuIGJlIG1hcHBlZCB0byBhIE1TSVggdmVjdG9yICg0IGJpdHMpLgorCSAqIE1TSVhNYXAwIHJlcHJlc2VudHMgdGhlIGZpcnN0IDggaW50ZXJydXB0cyBhbmQgTVNJWE1hcDEgcmVwcmVzZW50cworCSAqIHRoZSByZW1haW5pbmcgOCBpbnRlcnJ1cHRzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKChpcnFtYXNrID4+IGkpICYgMHgxKSB7CisJCQltc2l4bWFwIHw9IHZlY3RvciA8PCAoaSA8PCAyKTsKKwkJfQorCX0KKwl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnTVNJWE1hcDApIHwgbXNpeG1hcCwgYmFzZSArIE52UmVnTVNJWE1hcDApOworCisJbXNpeG1hcCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoKGlycW1hc2sgPj4gKGkgKyA4KSkgJiAweDEpIHsKKwkJCW1zaXhtYXAgfD0gdmVjdG9yIDw8IChpIDw8IDIpOworCQl9CisJfQorCXdyaXRlbChyZWFkbChiYXNlICsgTnZSZWdNU0lYTWFwMSkgfCBtc2l4bWFwLCBiYXNlICsgTnZSZWdNU0lYTWFwMSk7Cit9CisKIHN0YXRpYyBpbnQgbnZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQlpbnQgcmV0LCBvb20sIGk7CisJaW50IHJldCA9IDE7CisJaW50IG9vbSwgaTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAibnZfb3BlbjogYmVnaW5cbiIpOwogCkBAIC0yMjUzLDExICsyNjM0LDcgQEAKIAludl9jb3B5X21hY190b19odyhkZXYpOwogCiAJLyogNCkgZ2l2ZSBodyByaW5ncyAqLwotCXdyaXRlbCgodTMyKSBucC0+cmluZ19hZGRyLCBiYXNlICsgTnZSZWdSeFJpbmdQaHlzQWRkcik7Ci0JaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQotCQl3cml0ZWwoKHUzMikgKG5wLT5yaW5nX2FkZHIgKyBSWF9SSU5HKnNpemVvZihzdHJ1Y3QgcmluZ19kZXNjKSksIGJhc2UgKyBOdlJlZ1R4UmluZ1BoeXNBZGRyKTsKLQllbHNlCi0JCXdyaXRlbCgodTMyKSAobnAtPnJpbmdfYWRkciArIFJYX1JJTkcqc2l6ZW9mKHN0cnVjdCByaW5nX2Rlc2NfZXgpKSwgYmFzZSArIE52UmVnVHhSaW5nUGh5c0FkZHIpOworCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOwogCXdyaXRlbCggKChSWF9SSU5HLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgoVFhfUklORy0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCiAJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CiAKQEAgLTIyNjUsNiArMjY0Miw3IEBACiAJd3JpdGVsKG5wLT5saW5rc3BlZWQsIGJhc2UgKyBOdlJlZ0xpbmtTcGVlZCk7CiAJd3JpdGVsKE5WUkVHX1VOS1NFVFVQM19WQUwxLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWczKTsKIAl3cml0ZWwobnAtPnR4cnhjdGxfYml0cywgYmFzZSArIE52UmVnVHhSeENvbnRyb2wpOworCXdyaXRlbChucC0+dmxhbmN0bF9iaXRzLCBiYXNlICsgTnZSZWdWbGFuQ29udHJvbCk7CiAJcGNpX3B1c2goYmFzZSk7CiAJd3JpdGVsKE5WUkVHX1RYUlhDVExfQklUMXxucC0+dHhyeGN0bF9iaXRzLCBiYXNlICsgTnZSZWdUeFJ4Q29udHJvbCk7CiAJcmVnX2RlbGF5KGRldiwgTnZSZWdVbmtub3duU2V0dXBSZWc1LCBOVlJFR19VTktTRVRVUDVfQklUMzEsIE5WUkVHX1VOS1NFVFVQNV9CSVQzMSwKQEAgLTIzMTUsOSArMjY5Myw3NyBAQAogCXdyaXRlbChOVlJFR19JUlFTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CiAJcGNpX3B1c2goYmFzZSk7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZHJhaW47CisJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSB7CisJCWZvciAoaSA9IDA7IGkgPCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSyk7IGkrKykgeworCQkJbnAtPm1zaV94X2VudHJ5W2ldLmVudHJ5ID0gaTsKKwkJfQorCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpeChucC0+cGNpX2RldiwgbnAtPm1zaV94X2VudHJ5LCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSykpKSA9PSAwKSB7CisJCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0VOQUJMRUQ7CisJCQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCkgeworCQkJCS8qIFJlcXVlc3QgaXJxIGZvciByeCBoYW5kbGluZyAqLworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsICZudl9uaWNfaXJxX3J4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHJ4ICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZHJhaW47CisJCQkJfQorCQkJCS8qIFJlcXVlc3QgaXJxIGZvciB0eCBoYW5kbGluZyAqLworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IsICZudl9uaWNfaXJxX3R4LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHR4ICVkXG4iLCByZXQpOworCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwkJCQkJZ290byBvdXRfZHJhaW47CisJCQkJfQorCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBsaW5rIGFuZCB0aW1lciBoYW5kbGluZyAqLworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IsICZudl9uaWNfaXJxX290aGVyLCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIGxpbmsgJWRcbiIsIHJldCk7CisJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOworCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOworCQkJCQlnb3RvIG91dF9kcmFpbjsKKwkJCQl9CisKKwkJCQkvKiBtYXAgaW50ZXJydXB0cyB0byB0aGVpciByZXNwZWN0aXZlIHZlY3RvciAqLworCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lYTWFwMCk7CisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAxKTsKKwkJCQlzZXRfbXNpeF92ZWN0b3JfbWFwKGRldiwgTlZfTVNJX1hfVkVDVE9SX1JYLCBOVlJFR19JUlFfUlhfQUxMKTsKKwkJCQlzZXRfbXNpeF92ZWN0b3JfbWFwKGRldiwgTlZfTVNJX1hfVkVDVE9SX1RYLCBOVlJFR19JUlFfVFhfQUxMKTsKKwkJCQlzZXRfbXNpeF92ZWN0b3JfbWFwKGRldiwgTlZfTVNJX1hfVkVDVE9SX09USEVSLCBOVlJFR19JUlFfT1RIRVIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgYWxsIGludGVycnVwdHMgKi8KKwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3RvciwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CisJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CisJCQkJCWdvdG8gb3V0X2RyYWluOworCQkJCX0KKworCQkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHZlY3RvciAwICovCisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ01TSVhNYXAwKTsKKwkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJWE1hcDEpOworCQkJfQorCQl9CisJfQorCWlmIChyZXQgIT0gMCAmJiBucC0+bXNpX2ZsYWdzICYgTlZfTVNJX0NBUEFCTEUpIHsKKwkJaWYgKChyZXQgPSBwY2lfZW5hYmxlX21zaShucC0+cGNpX2RldikpID09IDApIHsKKwkJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0VOQUJMRUQ7CisJCQlpZiAocmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkICVkXG4iLCByZXQpOworCQkJCXBjaV9kaXNhYmxlX21zaShucC0+cGNpX2Rldik7CisJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX0VOQUJMRUQ7CisJCQkJZ290byBvdXRfZHJhaW47CisJCQl9CisKKwkJCS8qIG1hcCBpbnRlcnJ1cHRzIHRvIHZlY3RvciAwICovCisJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJTWFwMCk7CisJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnTVNJTWFwMSk7CisJCQkvKiBlbmFibGUgbXNpIHZlY3RvciAwICovCisJCQl3cml0ZWwoTlZSRUdfTVNJX1ZFQ1RPUl8wX0VOQUJMRUQsIGJhc2UgKyBOdlJlZ01TSUlycU1hc2spOworCQl9CisJfQorCWlmIChyZXQgIT0gMCkgeworCQlpZiAocmVxdWVzdF9pcnEobnAtPnBjaV9kZXYtPmlycSwgJm52X25pY19pcnEsIFNBX1NISVJRLCBkZXYtPm5hbWUsIGRldikgIT0gMCkKKwkJCWdvdG8gb3V0X2RyYWluOworCX0KIAogCS8qIGFzayBmb3IgaW50ZXJydXB0cyAqLwogCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CkBAIC0yMzY0LDYgKzI4MTAsNyBAQAogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZTsKKwlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAlucC0+aW5fc2h1dGRvd24gPSAxOwpAQCAtMjM4MSwxMyArMjgyOCwzMSBAQAogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgb3Igd2Ugd2lsbCBsb2NrIHVwICovCiAJYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB7CisJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJfSBlbHNlIHsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfRU5BQkxFRCkKKwkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNU0lJcnFNYXNrKTsKKwkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCX0KIAlwY2lfcHVzaChiYXNlKTsKIAlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElycW1hc2sgaXMgemVybyBhZ2FpblxuIiwgZGV2LT5uYW1lKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCi0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSB7CisJCWZvciAoaSA9IDA7IGkgPCAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX1ZFQ1RPUlNfTUFTSyk7IGkrKykgeworCQkJZnJlZV9pcnEobnAtPm1zaV94X2VudHJ5W2ldLnZlY3RvciwgZGV2KTsKKwkJfQorCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKKwkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKKwl9IGVsc2UgeworCQlmcmVlX2lycShucC0+cGNpX2Rldi0+aXJxLCBkZXYpOworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9FTkFCTEVEKSB7CisJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOworCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX0VOQUJMRUQ7CisJCX0KKwl9CiAKIAlkcmFpbl9yaW5nKGRldik7CiAKQEAgLTI0NzEsNyArMjkzNiwxNCBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiA2NC1iaXQgRE1BIGZhaWxlZCwgdXNpbmcgMzItYml0IGFkZHJlc3NpbmcgZm9yIGRldmljZSAlcy5cbiIsCiAJCQkJCXBjaV9uYW1lKHBjaV9kZXYpKTsKIAkJfSBlbHNlIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lfZGV2LCAweDAwMDAwMDdmZmZmZmZmZmZVTEwpKSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiA2NC1iaXQgRE1BIChjb25zaXN0ZW50KSBmYWlsZWQgZm9yIGRldmljZSAlcy5cbiIsCisJCQkJCXBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJCQlnb3RvIG91dF9yZWxyZWc7CisJCQl9IGVsc2UgeworCQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogdXNpbmcgSElHSERNQVxuIik7CisJCQl9CiAJCX0KIAkJbnAtPnR4cnhjdGxfYml0cyA9IE5WUkVHX1RYUlhDVExfREVTQ18zOwogCX0gZWxzZSBpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19MQVJHRURFU0MpIHsKQEAgLTI0OTYsNiArMjk2OCwyMiBAQAogI2VuZGlmCiAgCX0KIAorCW5wLT52bGFuY3RsX2JpdHMgPSAwOworCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1ZMQU4pIHsKKwkJbnAtPnZsYW5jdGxfYml0cyA9IE5WUkVHX1ZMQU5DT05UUk9MX0VOQUJMRTsKKwkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fVFg7CisJCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IG52X3ZsYW5fcnhfcmVnaXN0ZXI7CisJCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IG52X3ZsYW5fcnhfa2lsbF92aWQ7CisJfQorCisJbnAtPm1zaV9mbGFncyA9IDA7CisJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSSkgJiYgIWRpc2FibGVfbXNpKSB7CisJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0NBUEFCTEU7CisJfQorCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0lfWCkgJiYgIWRpc2FibGVfbXNpeCkgeworCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9YX0NBUEFCTEU7CisJfQorCiAJZXJyID0gLUVOT01FTTsKIAlucC0+YmFzZSA9IGlvcmVtYXAoYWRkciwgTlZfUENJX1JFR1NaKTsKIAlpZiAoIW5wLT5iYXNlKQpAQCAtMjU3OCwxMCArMzA2NiwxNSBAQAogCX0gZWxzZSB7CiAJCW5wLT50eF9mbGFncyA9IE5WX1RYMl9WQUxJRDsKIAl9Ci0JaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQpCisJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQpIHsKIAkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQ7Ci0JZWxzZQorCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0NBUEFCTEUpIC8qIHNldCBudW1iZXIgb2YgdmVjdG9ycyAqLworCQkJbnAtPm1zaV9mbGFncyB8PSAweDAwMDM7CisJfSBlbHNlIHsKIAkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX0NQVTsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSAvKiBzZXQgbnVtYmVyIG9mIHZlY3RvcnMgKi8KKwkJCW5wLT5tc2lfZmxhZ3MgfD0gMHgwMDAxOworCX0KIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9USU1FUklSUSkKIAkJbnAtPmlycW1hc2sgfD0gTlZSRUdfSVJRX1RJTUVSOwpAQCAtMjczNywxMSArMzIzMCwxMSBAQAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUEsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1gsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWCwKIAl9LAogCXswLH0sCiB9OwpAQCAtMjc3MSw2ICszMjY0LDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiIpOwogbW9kdWxlX3BhcmFtKHBvbGxfaW50ZXJ2YWwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvbGxfaW50ZXJ2YWwsICJJbnRlcnZhbCBkZXRlcm1pbmVzIGhvdyBmcmVxdWVudCB0aW1lciBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0uIE1pbiBpcyAwIGFuZCBNYXggaXMgNjU1MzUuIik7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9tc2ksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfbXNpLCAiRGlzYWJsZSBNU0kgaW50ZXJydXB0cyBieSBzZXR0aW5nIHRvIDEuIik7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9tc2l4LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX21zaXgsICJEaXNhYmxlIE1TSVggaW50ZXJydXB0cyBieSBzZXR0aW5nIHRvIDEuIik7CiAKIE1PRFVMRV9BVVRIT1IoIk1hbmZyZWQgU3ByYXVsIDxtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJldmVyc2UgRW5naW5lZXJlZCBuRm9yY2UgZXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCBmNWQ0OWExLi4xOTYyOThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTU4LDExICs1OCwxMSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKIAotTU9EVUxFX1BBUk0oZnNfZW5ldF9kZWJ1ZywgImkiKTsKK2ludCBmc19lbmV0X2RlYnVnID0gLTE7CQkvKiAtMSA9PSB1c2UgRlNfRU5FVF9ERUZfTVNHX0VOQUJMRSBhcyB2YWx1ZSAqLworbW9kdWxlX3BhcmFtKGZzX2VuZXRfZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZzX2VuZXRfZGVidWcsCiAJCSAiRnJlZXNjYWxlIGJpdG1hcHBlZCBkZWJ1Z2dpbmcgbWVzc2FnZSBlbmFibGUgdmFsdWUiKTsKIAotaW50IGZzX2VuZXRfZGVidWcgPSAtMTsJCS8qIC0xID09IHVzZSBGU19FTkVUX0RFRl9NU0dfRU5BQkxFIGFzIHZhbHVlICovCiAKIHN0YXRpYyB2b2lkIGZzX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYwppbmRleCBlNjdiMWQwLi45NWUyYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYwpAQCAtMTE4LDYgKzExOCw4IEBACiAKIAkvKiBGaWxsIG91dCBJUlEgZmllbGQgKi8KIAlmZXAtPmludGVycnVwdCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGZlcC0+aW50ZXJydXB0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBBdHRhY2ggdGhlIG1lbW9yeSBmb3IgdGhlIEZDQyBQYXJhbWV0ZXIgUkFNICovCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJmY2NfcHJhbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwppbmRleCAyZThmNDQ0Li4zZGFkNjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwpAQCAtMTQ0LDYgKzE0NCw4IEBACiAJCiAJLyogRmlsbCBvdXQgSVJRIGZpZWxkICovCiAJZmVwLT5pbnRlcnJ1cHQgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCJpbnRlcnJ1cHQiKTsKKwlpZiAoZmVwLT5pbnRlcnJ1cHQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAkKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJlZ3MiKTsKIAlmZXAtPmZlYy5mZWNwID0odm9pZCopci0+c3RhcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jCmluZGV4IGEzODk3ZmQuLmE3NzJiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jCkBAIC0xMTgsNiArMTE4LDggQEAKIAogCS8qIEZpbGwgb3V0IElSUSBmaWVsZCAqLwogCWZlcC0+aW50ZXJydXB0ID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImludGVycnVwdCIpOworCWlmIChmZXAtPmludGVycnVwdCA8IDApCisJCXJldHVybiAtRUlOVkFMOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJyZWdzIik7CiAJZmVwLT5zY2Muc2NjcCA9ICh2b2lkICopci0+c3RhcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggMGU4ZTNmYy4uNzcxZTI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMTkzLDggKzE5MywxMiBAQAogCQlwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJ0eCIpOwogCQlwcml2LT5pbnRlcnJ1cHRSZWNlaXZlID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInJ4Iik7CiAJCXByaXYtPmludGVycnVwdEVycm9yID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImVycm9yIik7CisJCWlmIChwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCA8IDAgfHwgcHJpdi0+aW50ZXJydXB0UmVjZWl2ZSA8IDAgfHwgcHJpdi0+aW50ZXJydXB0RXJyb3IgPCAwKQorCQkJZ290byByZWdzX2ZhaWw7CiAJfSBlbHNlIHsKIAkJcHJpdi0+aW50ZXJydXB0VHJhbnNtaXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCQlpZiAocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQgPCAwKQorCQkJZ290byByZWdzX2ZhaWw7CiAJfQogCiAJLyogZ2V0IGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgbWVtb3J5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMgYi9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMKaW5kZXggNTk1OGE2My4uMmQyNDM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguYwpAQCAtMTE0LDggKzExNCw4IEBACiAKIHN0YXRpYyBjaGFyIG1hYzBbMThdID0gIjAwLjAyLjAzLjA0LjA1LjA2IjsKIHN0YXRpYyBjaGFyIG1hYzFbMThdID0gIjAwLjAxLjAyLjAzLjA0LjA1IjsKLU1PRFVMRV9QQVJNKG1hYzAsICJjMTgiKTsKLU1PRFVMRV9QQVJNKG1hYzEsICJjMTgiKTsKK21vZHVsZV9wYXJhbV9zdHJpbmcobWFjMCwgbWFjMCwgMTgsIDApOworbW9kdWxlX3BhcmFtX3N0cmluZyhtYWMxLCBtYWMwLCAxOCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1hYzAsICJNQUMgYWRkcmVzcyBmb3IgR1Q5NjEwMCBldGhlcm5ldCBwb3J0IDAiKTsKIE1PRFVMRV9QQVJNX0RFU0MobWFjMSwgIk1BQyBhZGRyZXNzIGZvciBHVDk2MTAwIGV0aGVybmV0IHBvcnQgMSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKaW5kZXggYmM5YTNiZi4uMGVhNGNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiBzdGF0aWMgdm9pZCBoYW1hY2hpX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIGVudW0gY2FwYWJpbGl0eV9mbGFncyB7Q2FuSGF2ZU1JST0xLCB9Owotc3RhdGljIHN0cnVjdCBjaGlwX2luZm8geworc3RhdGljIGNvbnN0IHN0cnVjdCBjaGlwX2luZm8gewogCXUxNgl2ZW5kb3JfaWQsIGRldmljZV9pZCwgZGV2aWNlX2lkX21hc2ssIHBhZDsKIAljb25zdCBjaGFyICpuYW1lOwogCXZvaWQgKCptZWRpYV90aW1lcikodW5zaWduZWQgbG9uZyBkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwppbmRleCBlNDE4OGQwLi45MjIwZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCkBAIC05MDUsNyArOTA1LDcgQEAKIAkvKiBhdXRvcHJvYmUgYmF1ZCByYXRlICovCiAJdHN0YXJ0ID0gamlmZmllczsKIAlpID0gMDsKLQl3aGlsZSAoKHNpZ25lZCkoamlmZmllcy10c3RhcnQtSFovMykgPCAwKSB7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRzdGFydCArIEhaLzMpKSB7CiAJCWlmIChwcC0+b3BzLT5lcHBfcmVhZF9hZGRyKHBwLCAmc3RhdCwgMSwgMCkgIT0gMSkKIAkJCWdvdG8gZXBwdGltZW91dDsKIAkJaWYgKChzdGF0ICYgKEVQUF9OUkFFRnxFUFBfTlJIRikpID09IEVQUF9OUkhGKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCmluZGV4IGM4ZGM0MDIuLjc5YThmYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAogTU9EVUxFX0FVVEhPUigiS2xhdXMgS3VkaWVsa2EiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBoaWdoLXNwZWVkIFNDQyBib2FyZHMiKTsKLU1PRFVMRV9QQVJNKGlvLCAiMS0iIF9fTU9EVUxFX1NUUklORyhNQVhfTlVNX0RFVlMpICJpIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaW8sIGludCwgTlVMTCwgMCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkbWFzY2NfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKaW5kZXggZGM1ZTlkNS4uZDgxYThlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCiBNT0RVTEVfQVVUSE9SKCJSYWxmIEJhZWNobGUgREw1UkIgPHJhbGZAbGludXgtbWlwcy5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIktJU1MgZHJpdmVyIGZvciBBWC4yNSBvdmVyIFRUWXMiKTsKLU1PRFVMRV9QQVJNKGNyY19mb3JjZSwgImkiKTsKK21vZHVsZV9wYXJhbShjcmNfZm9yY2UsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNyY19mb3JjZSwgImNyYyBbMCA9IGF1dG8gfCAxID0gbm9uZSB8IDIgPSBmbGV4bmV0IHwgMyA9IHNtYWNrXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTX0xESVNDKE5fQVgyNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocC1wbHVzLmMgYi9kcml2ZXJzL25ldC9ocC1wbHVzLmMKaW5kZXggNzRlMTY3ZS4uMGQ3YTYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAtcGx1cy5jCisrKyBiL2RyaXZlcnMvbmV0L2hwLXBsdXMuYwpAQCAtMjUwLDYgKzI1MCwxMiBAQAogCQllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJmhwcF9tZW1fYmxvY2tfb3V0cHV0OwogCQllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJmhwcF9tZW1fZ2V0XzgzOTBfaGRyOwogCQlkZXYtPm1lbV9zdGFydCA9IG1lbV9zdGFydDsKKwkJZWlfc3RhdHVzLm1lbSA9IGlvcmVtYXAobWVtX3N0YXJ0LAorCQkJCQkoSFBfU1RPUF9QRyAtIEhQX1NUQVJUX1BHKSoyNTYpOworCQlpZiAoIWVpX3N0YXR1cy5tZW0pIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQogCQllaV9zdGF0dXMucm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0ICsgVFhfUEFHRVMvMioyNTY7CiAJCWRldi0+bWVtX2VuZCA9IGVpX3N0YXR1cy5ybWVtX2VuZAogCQkJPSBkZXYtPm1lbV9zdGFydCArIChIUF9TVE9QX1BHIC0gSFBfU1RBUlRfUEcpKjI1NjsKQEAgLTI2Miw4ICsyNjgsMTAgQEAKIAogCXJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXR2YWwpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dDE7CiAJcmV0dXJuIDA7CitvdXQxOgorCWlvdW5tYXAoZWlfc3RhdHVzLm1lbSk7CiBvdXQ6CiAJcmVsZWFzZV9yZWdpb24oaW9hZGRyLCBIUF9JT19FWFRFTlQpOwogCXJldHVybiByZXR2YWw7CkBAIC0zNzIsNyArMzgwLDcgQEAKIAogCW91dHcoKHJpbmdfcGFnZTw8OCksIGlvYWRkciArIEhQUF9JTl9BRERSKTsKIAlvdXR3KG9wdGlvbl9yZWcgJiB+KE1lbURpc2FibGUgKyBCb290Uk9NRW5iKSwgaW9hZGRyICsgSFBQX09QVElPTik7Ci0JaXNhX21lbWNweV9mcm9taW8oaGRyLCBkZXYtPm1lbV9zdGFydCwgc2l6ZW9mKHN0cnVjdCBlODM5MF9wa3RfaGRyKSk7CisJbWVtY3B5X2Zyb21pbyhoZHIsIGVpX3N0YXR1cy5tZW0sIHNpemVvZihzdHJ1Y3QgZTgzOTBfcGt0X2hkcikpOwogCW91dHcob3B0aW9uX3JlZywgaW9hZGRyICsgSFBQX09QVElPTik7CiAJaGRyLT5jb3VudCA9IChsZTE2X3RvX2NwdShoZHItPmNvdW50KSArIDMpICYgfjM7CS8qIFJvdW5kIHVwIGFsbG9jYXRpb24uICovCiB9CkBAIC0zOTEsNyArMzk5LDcgQEAKIAkgICBBbHNvIG5vdGUgdGhhdCB3ZSAqY2FuJ3QqIHVzZSBldGhfaW9fY29weV9hbmRfc3VtKCkgYmVjYXVzZQogCSAgIGl0IHdpbGwgbm90IGFsd2F5cyBjb3B5ICJjb3VudCIgYnl0ZXMgKGUuZy4gcGFkZGVkIElQKS4gICovCiAKLQlpc2FfbWVtY3B5X2Zyb21pbyhza2ItPmRhdGEsIGRldi0+bWVtX3N0YXJ0LCBjb3VudCk7CisJbWVtY3B5X2Zyb21pbyhza2ItPmRhdGEsIGVpX3N0YXR1cy5tZW0sIGNvdW50KTsKIAlvdXR3KG9wdGlvbl9yZWcsIGlvYWRkciArIEhQUF9PUFRJT04pOwogfQogCkBAIC00MTYsNyArNDI0LDcgQEAKIAogCW91dHcoc3RhcnRfcGFnZSA8PCA4LCBpb2FkZHIgKyBIUFBfT1VUX0FERFIpOwogCW91dHcob3B0aW9uX3JlZyAmIH4oTWVtRGlzYWJsZSArIEJvb3RST01FbmIpLCBpb2FkZHIgKyBIUFBfT1BUSU9OKTsKLQlpc2FfbWVtY3B5X3RvaW8oZGV2LT5tZW1fc3RhcnQsIGJ1ZiwgKGNvdW50ICsgMykgJiB+Myk7CisJbWVtY3B5X3RvaW8oZWlfc3RhdHVzLm1lbSwgYnVmLCAoY291bnQgKyAzKSAmIH4zKTsKIAlvdXR3KG9wdGlvbl9yZWcsIGlvYWRkciArIEhQUF9PUFRJT04pOwogCiAJcmV0dXJuOwpAQCAtNDcwLDYgKzQ3OCw3IEBACiBzdGF0aWMgdm9pZCBjbGVhbnVwX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBOQjogaHBwX2Nsb3NlKCkgaGFuZGxlcyBmcmVlX2lycSAqLworCWlvdW5tYXAoZWlfc3RhdHVzLm1lbSk7CiAJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIgLSBOSUNfT0ZGU0VULCBIUF9JT19FWFRFTlQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocDEwMC5jIGIvZHJpdmVycy9uZXQvaHAxMDAuYwppbmRleCA1NWM3ZWQ2Li4yNDdjOGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocDEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC0xNDk5LDcgKzE1MDAsNyBAQAogCQlwcmludGsoImhwMTAwOiAlczogc3RhcnRfeG1pdF9ibTogTm8gVFggUERMIGF2YWlsYWJsZS5cbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAkJLyogbm90IHdhaXRlZCBsb25nIGVub3VnaCBzaW5jZSBsYXN0IHR4PyAqLwotCQlpZiAoamlmZmllcyAtIGRldi0+dHJhbnNfc3RhcnQgPCBIWikKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRldi0+dHJhbnNfc3RhcnQgKyBIWikpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlpZiAoaHAxMDBfY2hlY2tfbGFuKGRldikpCkBAIC0xNjUyLDcgKzE2NTMsNyBAQAogCQlwcmludGsoImhwMTAwOiAlczogc3RhcnRfeG1pdDogdHggZnJlZSBtZW0gPSAweCV4XG4iLCBkZXYtPm5hbWUsIGkpOwogI2VuZGlmCiAJCS8qIG5vdCB3YWl0ZWQgbG9uZyBlbm91Z2ggc2luY2UgbGFzdCBmYWlsZWQgdHggdHJ5PyAqLwotCQlpZiAoamlmZmllcyAtIGRldi0+dHJhbnNfc3RhcnQgPCBIWikgeworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgZGV2LT50cmFuc19zdGFydCArIEhaKSkgewogI2lmZGVmIEhQMTAwX0RFQlVHCiAJCQlwcmludGsoImhwMTAwOiAlczogdHJhbnNfc3RhcnQgdGltaW5nIHByb2JsZW1cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTE3MTgsMTcgKzE3MTksMTAgQEAKIAlocDEwMF9vdXR3KGksIEZSQUdNRU5UX0xFTik7CS8qIGFuZCBmaXJzdC9vbmx5IGZyYWdtZW50IGxlbmd0aCAgICAqLwogCiAJaWYgKGxwLT5tb2RlID09IDIpIHsJLyogbWVtb3J5IG1hcHBlZCAqLwotCQlpZiAobHAtPm1lbV9wdHJfdmlydCkgewkvKiBoaWdoIHBjaSBtZW1vcnkgd2FzIHJlbWFwcGVkICovCi0JCQkvKiBOb3RlOiBUaGUgSjI1ODVCIG5lZWRzIGFsaWdubWVudCB0byAzMmJpdHMgaGVyZSEgICovCi0JCQltZW1jcHlfdG9pbyhscC0+bWVtX3B0cl92aXJ0LCBza2ItPmRhdGEsIChza2ItPmxlbiArIDMpICYgfjMpOwotCQkJaWYgKCFva19mbGFnKQotCQkJCW1lbXNldF9pbyhscC0+bWVtX3B0cl92aXJ0LCAwLCBIUDEwMF9NSU5fUEFDS0VUX1NJWkUgLSBza2ItPmxlbik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3RlOiBUaGUgSjI1ODVCIG5lZWRzIGFsaWdubWVudCB0byAzMmJpdHMgaGVyZSEgICovCi0JCQlpc2FfbWVtY3B5X3RvaW8obHAtPm1lbV9wdHJfcGh5cywgc2tiLT5kYXRhLCAoc2tiLT5sZW4gKyAzKSAmIH4zKTsKLQkJCWlmICghb2tfZmxhZykKLQkJCQlpc2FfbWVtc2V0X2lvKGxwLT5tZW1fcHRyX3BoeXMsIDAsIEhQMTAwX01JTl9QQUNLRVRfU0laRSAtIHNrYi0+bGVuKTsKLQkJfQorCQkvKiBOb3RlOiBUaGUgSjI1ODVCIG5lZWRzIGFsaWdubWVudCB0byAzMmJpdHMgaGVyZSEgICovCisJCW1lbWNweV90b2lvKGxwLT5tZW1fcHRyX3ZpcnQsIHNrYi0+ZGF0YSwgKHNrYi0+bGVuICsgMykgJiB+Myk7CisJCWlmICghb2tfZmxhZykKKwkJCW1lbXNldF9pbyhscC0+bWVtX3B0cl92aXJ0LCAwLCBIUDEwMF9NSU5fUEFDS0VUX1NJWkUgLSBza2ItPmxlbik7CiAJfSBlbHNlIHsJCS8qIHByb2dyYW1tZWQgaS9vICovCiAJCW91dHNsKGlvYWRkciArIEhQMTAwX1JFR19EQVRBMzIsIHNrYi0+ZGF0YSwKIAkJICAgICAgKHNrYi0+bGVuICsgMykgPj4gMik7CkBAIC0xNzk4LDEwICsxNzkyLDcgQEAKIAkJLyogRmlyc3Qgd2UgZ2V0IHRoZSBoZWFkZXIsIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSAqLwogCQkvKiBhY3R1YWwgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBwYWNrZXQuICovCiAJCWlmIChscC0+bW9kZSA9PSAyKSB7CS8qIG1lbW9yeSBtYXBwZWQgbW9kZSAqLwotCQkJaWYgKGxwLT5tZW1fcHRyX3ZpcnQpCS8qIGlmIG1lbW9yeSB3YXMgcmVtYXBwZWQgKi8KLQkJCQloZWFkZXIgPSByZWFkbChscC0+bWVtX3B0cl92aXJ0KTsKLQkJCWVsc2UKLQkJCQloZWFkZXIgPSBpc2FfcmVhZGwobHAtPm1lbV9wdHJfcGh5cyk7CisJCQloZWFkZXIgPSByZWFkbChscC0+bWVtX3B0cl92aXJ0KTsKIAkJfSBlbHNlCQkvKiBwcm9ncmFtbWVkIGkvbyAqLwogCQkJaGVhZGVyID0gaHAxMDBfaW5sKERBVEEzMik7CiAKQEAgLTE4MzMsMTMgKzE4MjQsOSBAQAogCQkJcHRyID0gc2tiLT5kYXRhOwogCiAJCQkvKiBOb3cgdHJhbnNmZXIgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZCBpbnRvIHRoYXQgYXJlYSAqLwotCQkJaWYgKGxwLT5tb2RlID09IDIpIHsKLQkJCQlpZiAobHAtPm1lbV9wdHJfdmlydCkKLQkJCQkJbWVtY3B5X2Zyb21pbyhwdHIsIGxwLT5tZW1fcHRyX3ZpcnQscGt0X2xlbik7Ci0JCQkJLyogTm90ZSBhbGlnbm1lbnQgdG8gMzJiaXQgdHJhbnNmZXJzICovCi0JCQkJZWxzZQotCQkJCQlpc2FfbWVtY3B5X2Zyb21pbyhwdHIsIGxwLT5tZW1fcHRyX3BoeXMsIHBrdF9sZW4pOwotCQkJfSBlbHNlCS8qIGlvIG1hcHBlZCAqLworCQkJaWYgKGxwLT5tb2RlID09IDIpCisJCQkJbWVtY3B5X2Zyb21pbyhwdHIsIGxwLT5tZW1fcHRyX3ZpcnQscGt0X2xlbik7CisJCQllbHNlCS8qIGlvIG1hcHBlZCAqLwogCQkJCWluc2woaW9hZGRyICsgSFAxMDBfUkVHX0RBVEEzMiwgcHRyLCBwa3RfbGVuID4+IDIpOwogCiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHBsYW5jZS5jIGIvZHJpdmVycy9uZXQvaHBsYW5jZS5jCmluZGV4IGQ4NDEwNjMuLjY4NTY5MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9ocGxhbmNlLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCiBpbnQgX19pbml0IGhwbGFuY2VfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gZGlvX21vZHVsZV9pbml0KCZocGxhbmNlX2RyaXZlcik7CisJcmV0dXJuIGRpb19yZWdpc3Rlcl9kcml2ZXIoJmhwbGFuY2VfZHJpdmVyKTsKIH0KIAogdm9pZCBfX2V4aXQgaHBsYW5jZV9jbGVhbnVwX21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlkcmEuYyBiL2RyaXZlcnMvbmV0L2h5ZHJhLmMKaW5kZXggNmUwY2E3My4uZDlmYjhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHlkcmEuYworKysgYi9kcml2ZXJzL25ldC9oeWRyYS5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaHlkcmFfaW5pdF9tb2R1bGUodm9pZCkKIHsKLSAgICByZXR1cm4gem9ycm9fbW9kdWxlX2luaXQoJmh5ZHJhX2RyaXZlcik7CisgICAgcmV0dXJuIHpvcnJvX3JlZ2lzdGVyX2RyaXZlcigmaHlkcmFfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGh5ZHJhX2NsZWFudXBfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMKaW5kZXggNTkxYzU4Ni4uN2U0OTUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbWFjX3R4X2VuYWJsZShzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQogewotCXN0cnVjdCBlbWFjX3JlZ3MgKnAgPSBkZXYtPmVtYWNwOworCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcjsKIApAQCAtMjIwLDcgKzIyMCw3IEBACiAKIHN0YXRpYyB2b2lkIGVtYWNfdHhfZGlzYWJsZShzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQogewotCXN0cnVjdCBlbWFjX3JlZ3MgKnAgPSBkZXYtPmVtYWNwOworCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcjsKIApAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIHN0YXRpYyB2b2lkIGVtYWNfcnhfZW5hYmxlKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYpCiB7Ci0Jc3RydWN0IGVtYWNfcmVncyAqcCA9IGRldi0+ZW1hY3A7CisJc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiByOwogCkBAIC0yNzUsNyArMjc1LDcgQEAKIAogc3RhdGljIHZvaWQgZW1hY19yeF9kaXNhYmxlKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYpCiB7Ci0Jc3RydWN0IGVtYWNfcmVncyAqcCA9IGRldi0+ZW1hY3A7CisJc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiByOwogCkBAIC0yOTksNyArMjk5LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGVtYWNfcnhfZGlzYWJsZV9hc3luYyhzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQogewotCXN0cnVjdCBlbWFjX3JlZ3MgKnAgPSBkZXYtPmVtYWNwOworCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcjsKIApAQCAtMzE1LDcgKzMxNSw3IEBACiAKIHN0YXRpYyBpbnQgZW1hY19yZXNldChzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQogewotCXN0cnVjdCBlbWFjX3JlZ3MgKnAgPSBkZXYtPmVtYWNwOworCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbiA9IDIwOwogCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAogc3RhdGljIHZvaWQgZW1hY19oYXNoX21jKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYpCiB7Ci0Jc3RydWN0IGVtYWNfcmVncyAqcCA9IGRldi0+ZW1hY3A7CisJc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKIAl1MTYgZ2FodFs0XSA9IHsgMCB9OwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCkBAIC0zOTMsNyArMzkzLDcgQEAKIC8qIEJIcyBkaXNhYmxlZCAqLwogc3RhdGljIGludCBlbWFjX2NvbmZpZ3VyZShzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2KQogewotCXN0cnVjdCBlbWFjX3JlZ3MgKnAgPSBkZXYtPmVtYWNwOworCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXYtPm5kZXY7CiAJaW50IGdpZ2U7CiAJdTMyIHI7CkBAIC01NTUsNyArNTU1LDcgQEAKIAogc3RhdGljIGludCBfX2VtYWNfbWRpb19yZWFkKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYsIHU4IGlkLCB1OCByZWcpCiB7Ci0Jc3RydWN0IGVtYWNfcmVncyAqcCA9IGRldi0+ZW1hY3A7CisJc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKIAl1MzIgcjsKIAlpbnQgbjsKIApAQCAtNjA0LDcgKzYwNCw3IEBACiBzdGF0aWMgdm9pZCBfX2VtYWNfbWRpb193cml0ZShzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2LCB1OCBpZCwgdTggcmVnLAogCQkJICAgICAgdTE2IHZhbCkKIHsKLQlzdHJ1Y3QgZW1hY19yZWdzICpwID0gZGV2LT5lbWFjcDsKKwlzdHJ1Y3QgZW1hY19yZWdzIF9faW9tZW0gKnAgPSBkZXYtPmVtYWNwOwogCWludCBuOwogCiAJREJHMigiJWQ6IG1kaW9fd3JpdGUoJTAyeCwlMDJ4LCUwNHgpIiBOTCwgZGV2LT5kZWYtPmluZGV4LCBpZCwgcmVnLApAQCAtNjY2LDcgKzY2Niw3IEBACiBzdGF0aWMgdm9pZCBlbWFjX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gbmRldi0+cHJpdjsKLQlzdHJ1Y3QgZW1hY19yZWdzICpwID0gZGV2LT5lbWFjcDsKKwlzdHJ1Y3QgZW1hY19yZWdzIF9faW9tZW0gKnAgPSBkZXYtPmVtYWNwOwogCXUzMiBybXIgPSBlbWFjX2lmZjJybXIobmRldik7CiAKIAlEQkcoIiVkOiBtdWx0aWNhc3QgJTA4eCIgTkwsIGRldi0+ZGVmLT5pbmRleCwgcm1yKTsKQEAgLTgyNSw3ICs4MjUsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBlbWFjX2FsbG9jX3J4X3NrYihzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2LCBpbnQgc2xvdCwKLQkJCQkgICAgaW50IGZsYWdzKQorCQkJCSAgICBnZnBfdCBmbGFncykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKGRldi0+cnhfc2tiX3NpemUsIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCkBAIC0xMDQ3LDcgKzEwNDcsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBlbWFjX3htaXRfZmluaXNoKHN0cnVjdCBvY3BfZW5ldF9wcml2YXRlICpkZXYsIGludCBsZW4pCiB7Ci0Jc3RydWN0IGVtYWNfcmVncyAqcCA9IGRldi0+ZW1hY3A7CisJc3RydWN0IGVtYWNfcmVncyBfX2lvbWVtICpwID0gZGV2LT5lbWFjcDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldi0+bmRldjsKIAogCS8qIFNlbmQgdGhlIHBhY2tldCBvdXQgKi8KQEAgLTE1MTksNyArMTUxOSw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgZW1hY19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qgb2NwX2VuZXRfcHJpdmF0ZSAqZGV2ID0gZGV2X2luc3RhbmNlOwotCXN0cnVjdCBlbWFjX3JlZ3MgKnAgPSBkZXYtPmVtYWNwOworCXN0cnVjdCBlbWFjX3JlZ3MgX19pb21lbSAqcCA9IGRldi0+ZW1hY3A7CiAJc3RydWN0IGlibV9lbWFjX2Vycm9yX3N0YXRzICpzdCA9ICZkZXYtPmVzdGF0czsKIAogCXUzMiBpc3IgPSBpbl9iZTMyKCZwLT5pc3IpOwpAQCAtMTYxOSwxNyArMTYxOSwxNyBAQAogCiAJREJHKCIlZDogcmVtb3ZlIiBOTCwgZGV2LT5kZWYtPmluZGV4KTsKIAotCW9jcF9zZXRfZHJ2ZGF0YShvY3BkZXYsIDApOworCW9jcF9zZXRfZHJ2ZGF0YShvY3BkZXYsIE5VTEwpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldi0+bmRldik7CiAKIAl0YWhfZmluaShkZXYtPnRhaF9kZXYpOwogCXJnbWlpX2ZpbmkoZGV2LT5yZ21paV9kZXYsIGRldi0+cmdtaWlfaW5wdXQpOwogCXptaWlfZmluaShkZXYtPnptaWlfZGV2LCBkZXYtPnptaWlfaW5wdXQpOwogCi0JZW1hY19kYmdfcmVnaXN0ZXIoZGV2LT5kZWYtPmluZGV4LCAwKTsKKwllbWFjX2RiZ19yZWdpc3RlcihkZXYtPmRlZi0+aW5kZXgsIE5VTEwpOwogCiAJbWFsX3VucmVnaXN0ZXJfY29tbWFjKGRldi0+bWFsLCAmZGV2LT5jb21tYWMpOwotCWlvdW5tYXAoKHZvaWQgKilkZXYtPmVtYWNwKTsKKwlpb3VubWFwKGRldi0+ZW1hY3ApOwogCWtmcmVlKGRldi0+bmRldik7CiB9CiAKQEAgLTIwNDgsOSArMjA0OCw3IEBACiAJCWdvdG8gb3V0NDsKIAogCS8qIE1hcCBFTUFDIHJlZ3MgKi8KLQlkZXYtPmVtYWNwID0KLQkgICAgKHN0cnVjdCBlbWFjX3JlZ3MgKilpb3JlbWFwKGRldi0+ZGVmLT5wYWRkciwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBlbWFjX3JlZ3MpKTsKKwlkZXYtPmVtYWNwID0gaW9yZW1hcChkZXYtPmRlZi0+cGFkZHIsIHNpemVvZihzdHJ1Y3QgZW1hY19yZWdzKSk7CiAJaWYgKCFkZXYtPmVtYWNwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZW1hYyVkOiBjb3VsZCBub3QgaW9yZW1hcCBkZXZpY2UgcmVnaXN0ZXJzIVxuIiwKIAkJICAgICAgIGRldi0+ZGVmLT5pbmRleCk7CkBAIC0yMjEwLDcgKzIyMDgsNyBAQAogCiAJcmV0dXJuIDA7CiAgICAgICBvdXQ2OgotCWlvdW5tYXAoKHZvaWQgKilkZXYtPmVtYWNwKTsKKwlpb3VubWFwKGRldi0+ZW1hY3ApOwogICAgICAgb3V0NToKIAl0YWhfZmluaShkZXYtPnRhaF9kZXYpOwogICAgICAgb3V0NDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuaAppbmRleCA5MTFhYmJhLi5mNjEyNzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5oCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgewogCXN0cnVjdCBuZXRfZGV2aWNlCQkqbmRldjsJCS8qIDAgKi8KLQlzdHJ1Y3QgZW1hY19yZWdzCQkqZW1hY3A7CisJc3RydWN0IGVtYWNfcmVncwkJX19pb21lbSAqZW1hY3A7CiAJCiAJc3RydWN0IG1hbF9kZXNjcmlwdG9yCQkqdHhfZGVzYzsKIAlpbnQJCQkJdHhfY250OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuYyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2RlYnVnLmMKaW5kZXggNzVkM2I4Ni4uYzdlMWVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfZGVidWcuYworKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19kZWJ1Zy5jCkBAIC01OCw3ICs1OCw3IEBACiAKIHN0YXRpYyB2b2lkIGVtYWNfbWFjX2R1bXAoaW50IGlkeCwgc3RydWN0IG9jcF9lbmV0X3ByaXZhdGUgKmRldikKIHsKLQlzdHJ1Y3QgZW1hY19yZWdzICpwID0gZGV2LT5lbWFjcDsKKwlzdHJ1Y3QgZW1hY19yZWdzIF9faW9tZW0gKnAgPSBkZXYtPmVtYWNwOwogCiAJcHJpbnRrKCIqKiBFTUFDJWQgcmVnaXN0ZXJzICoqXG4iCiAJICAgICAgICJNUjAgPSAweCUwOHggTVIxID0gMHglMDh4IFRNUjAgPSAweCUwOHggVE1SMSA9IDB4JTA4eFxuIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuaCBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3JnbWlpLmgKaW5kZXggYTFmZmI4YS4uN2YwM2Q1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfcmdtaWkuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19yZ21paS5oCkBAIC0zMSw3ICszMSw3IEBACiAKIC8qIFJHTUlJIGRldmljZSAqLwogc3RydWN0IGlibV9vY3BfcmdtaWkgewotCXN0cnVjdCByZ21paV9yZWdzICpiYXNlOworCXN0cnVjdCByZ21paV9yZWdzIF9faW9tZW0gKmJhc2U7CiAJaW50IHVzZXJzOwkJLyogbnVtYmVyIG9mIEVNQUNzIHVzaW5nIHRoaXMgUkdNSUkgYnJpZGdlICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmMgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmMKaW5kZXggMzVjMTE4NS4uZTEyOWUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3ptaWkuYwpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIGludCBfX2luaXQgem1paV9pbml0KHN0cnVjdCBvY3BfZGV2aWNlICpvY3BkZXYsIGludCBpbnB1dCwgaW50ICptb2RlKQogewogCXN0cnVjdCBpYm1fb2NwX3ptaWkgKmRldiA9IG9jcF9nZXRfZHJ2ZGF0YShvY3BkZXYpOwotCXN0cnVjdCB6bWlpX3JlZ3MgKnA7CisJc3RydWN0IHptaWlfcmVncyBfX2lvbWVtICpwOwogCiAJWk1JSV9EQkcoIiVkOiBpbml0KCVkLCAlZCkiIE5MLCBvY3BkZXYtPmRlZi0+aW5kZXgsIGlucHV0LCAqbW9kZSk7CiAKQEAgLTk0LDggKzk0LDcgQEAKIAkJfQogCQlkZXYtPm1vZGUgPSBQSFlfTU9ERV9OQTsKIAotCQlwID0gKHN0cnVjdCB6bWlpX3JlZ3MgKilpb3JlbWFwKG9jcGRldi0+ZGVmLT5wYWRkciwKLQkJCQkJCXNpemVvZihzdHJ1Y3Qgem1paV9yZWdzKSk7CisJCXAgPSBpb3JlbWFwKG9jcGRldi0+ZGVmLT5wYWRkciwgc2l6ZW9mKHN0cnVjdCB6bWlpX3JlZ3MpKTsKIAkJaWYgKCFwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiem1paSVkOiBjb3VsZCBub3QgaW9yZW1hcCBkZXZpY2UgcmVnaXN0ZXJzIVxuIiwKQEAgLTIzMSw3ICsyMzAsNyBAQAogCWlmICghLS1kZXYtPnVzZXJzKSB7CiAJCS8qIEZyZWUgZXZlcnl0aGluZyBpZiB0aGlzIGlzIHRoZSBsYXN0IHVzZXIgKi8KIAkJb2NwX3NldF9kcnZkYXRhKG9jcGRldiwgTlVMTCk7Ci0JCWlvdW5tYXAoKHZvaWQgKilkZXYtPmJhc2UpOworCQlpb3VubWFwKGRldi0+YmFzZSk7CiAJCWtmcmVlKGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5oIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfem1paS5oCmluZGV4IDBiYjI2MDYuLjkyYzg1NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX3ptaWkuaAorKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY196bWlpLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogLyogWk1JSSBkZXZpY2UgKi8KIHN0cnVjdCBpYm1fb2NwX3ptaWkgewotCXN0cnVjdCB6bWlpX3JlZ3MgKmJhc2U7CisJc3RydWN0IHptaWlfcmVncyBfX2lvbWVtICpiYXNlOwogCWludCBtb2RlOwkJLyogc3Vic2V0IG9mIFBIWV9NT0RFX1hYWFggKi8KIAlpbnQgdXNlcnM7CQkvKiBudW1iZXIgb2YgRU1BQ3MgdXNpbmcgdGhpcyBaTUlJIGJyaWRnZSAqLwogCXUzMiBmZXJfc2F2ZTsJCS8qIEZFUiB2YWx1ZSBsZWZ0IGJ5IGZpcm13YXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZmIuYyBiL2RyaXZlcnMvbmV0L2lmYi5jCmluZGV4IDFiNjk5MjUuLjMxZmIyZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lmYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lmYi5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZCAgICAgdHE7CiB9OwogCi1zdGF0aWMgaW50IG51bWlmYnMgPSAxOworc3RhdGljIGludCBudW1pZmJzID0gMjsKIAogc3RhdGljIHZvaWQgcmlfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldik7CiBzdGF0aWMgaW50IGlmYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCmluZGV4IDdhMDgxMzQuLjVlNmQwMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKQEAgLTY0LDYgKzY0LDE0IEBACiAJICBkb25nbGVzIHlvdSB3aWxsIGhhdmUgdG8gc3RhcnQgaXJhdHRhY2ggbGlrZSB0aGlzOgogCSAgImlyYXR0YWNoIC1kIHRla3JhbSIuCiAKK2NvbmZpZyBUT0lNMzIzMl9ET05HTEUKKwl0cmlzdGF0ZSAiVE9JTTMyMzIgSXJEYSBkb25nbGUiCisJZGVwZW5kcyBvbiBET05HTEUgJiYgSVJEQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIFZpc2hheS9UZW1pYworCSAgVE9JTTMyMzIgYW5kIFRPSU00MjMyIGJhc2VkIGRvbmdsZXMuCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorCiBjb25maWcgTElURUxJTktfRE9OR0xFCiAJdHJpc3RhdGUgIlBhcmFsbGF4IExpdGVMaW5rIGRvbmdsZSIKIAlkZXBlbmRzIG9uIERPTkdMRSAmJiBJUkRBCkBAIC0yODMsNyArMjkxLDcgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgc3VwcG9ydCBmb3IgdGhlIFVTQiBJckRBIEZJUiBEb25nbGUKIAkgIGRldmljZSBkcml2ZXIuICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpcmRhLXVzYi4gIElyREEtVVNCIHN1cHBvcnQgdGhlIHZhcmlvdXMgSXJEQSBVU0IKLQkgIGRvbmdsZXMgYXZhaWxhYmxlIGFuZCBtb3N0IG9mIHRoZWlyIHBlY3VsYXJpdGllcy4gIFRob3NlIGRvbmdsZXMKKwkgIGRvbmdsZXMgYXZhaWxhYmxlIGFuZCBtb3N0IG9mIHRoZWlyIHBlY3VsaWFyaXRpZXMuICBUaG9zZSBkb25nbGVzCiAJICBwbHVnIGluIHRoZSBVU0IgcG9ydCBvZiB5b3VyIGNvbXB1dGVyLCBhcmUgcGx1ZyBhbmQgcGxheSwgYW5kCiAJICBzdXBwb3J0IFNJUiBhbmQgRklSICg0TWJwcykgc3BlZWRzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRob3NlCiAJICBkb25nbGVzIHRlbmQgdG8gYmUgbGVzcyBlZmZpY2llbnQgdGhhbiBhIEZJUiBjaGlwc2V0LgpAQCAtMzYwLDcgKzM2OCw3IEBACiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgQUxpIE01MTIzIEZJUgogCSAgQ29udHJvbGxlci4gIFRoZSBBTGkgTTUxMjMgRklSIENvbnRyb2xsZXIgaXMgZW1iZWRkZWQgaW4gQUxpIE0xNTQzQywKLQkgIE0xNTM1LCBNMTUzNUQsIE0xNTM1KywgTTE1MzVEIFNvdXJ0aCBCcmlkZ2UuICBUaGlzIGRyaXZlciBzdXBwb3J0cworCSAgTTE1MzUsIE0xNTM1RCwgTTE1MzUrLCBNMTUzNUQgU291dGggQnJpZGdlLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMKIAkgIFNJUiwgTUlSIGFuZCBGSVIgKDRNYnBzKSBzcGVlZHMuCiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlCmluZGV4IDcyY2JmZGMuLjI3YWI3NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9NYWtlZmlsZQpAQCAtNDMsNiArNDMsNyBAQAogb2JqLSQoQ09ORklHX01DUDIxMjBfRE9OR0xFKQkrPSBtY3AyMTIwLXNpci5vCiBvYmotJChDT05GSUdfQUNUMjAwTF9ET05HTEUpCSs9IGFjdDIwMGwtc2lyLm8KIG9iai0kKENPTkZJR19NQTYwMF9ET05HTEUpCSs9IG1hNjAwLXNpci5vCitvYmotJChDT05GSUdfVE9JTTMyMzJfRE9OR0xFKQkrPSB0b2ltMzIzMi1zaXIubwogCiAjIFRoZSBTSVIgaGVscGVyIG1vZHVsZQogc2lyLWRldi1vYmpzIDo9IHNpcl9kZXYubyBzaXJfZG9uZ2xlLm8gc2lyX2t0aHJlYWQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCmluZGV4IDMxMzc1OTIuLjkxMGMwY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKQEAgLTE3NzgsNyArMTc3OCw3IEBACiBzdGF0aWMgaW50IF9faW5pdAogZG9uYXVib2VfaW5pdCAodm9pZCkKIHsKLSAgcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmZG9uYXVib2VfcGNpX2RyaXZlcik7CisgIHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkb25hdWJvZV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2VwNzIxMV9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9lcDcyMTFfaXIuYwppbmRleCAzMTg5NjI2Li40Y2JhMzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2VwNzIxMV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvZXA3MjExX2lyLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhX2RldmljZS5oPgpAQCAtMjMsNiArMjQsOCBAQAogc3RhdGljIGludCAgZXA3MjExX2lyX2NoYW5nZV9zcGVlZChzdHJ1Y3QgaXJkYV90YXNrICp0YXNrKTsKIHN0YXRpYyBpbnQgIGVwNzIxMV9pcl9yZXNldChzdHJ1Y3QgaXJkYV90YXNrICp0YXNrKTsKIAorc3RhdGljIERFRklORV9TUElOTE9DSyhlcDcyMTFfbG9jayk7CisKIHN0YXRpYyBzdHJ1Y3QgZG9uZ2xlX3JlZyBkb25nbGUgPSB7CiAJLnR5cGUgPSBJUkRBX0VQNzIxMV9JUiwKIAkub3BlbiA9IGVwNzIxMV9pcl9vcGVuLApAQCAtMzYsNyArMzksNyBAQAogewogCXVuc2lnbmVkIGludCBzeXNjb24xLCBmbGFnczsKIAotCXNhdmVfZmxhZ3MoZmxhZ3MpOyBjbGkoKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXA3MjExX2xvY2ssIGZsYWdzKTsKIAogCS8qIFR1cm4gb24gdGhlIFNJUiBlbmNvZGVyLiAqLwogCXN5c2NvbjEgPSBjbHBzX3JlYWRsKFNZU0NPTjEpOwpAQCAtNDYsMTQgKzQ5LDE0IEBACiAJLyogWFhYOiBXZSBzaG91bGQgZGlzYWJsZSBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cyBvbiB0aGUgZmlyc3QKIAkJVUFSVCAoaW50ZXJydXB0ICMxNCkuICovCiAKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcDcyMTFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBlcDcyMTFfaXJfY2xvc2UoZG9uZ2xlX3QgKnNlbGYpCiB7CiAJdW5zaWduZWQgaW50IHN5c2NvbjEsIGZsYWdzOwogCi0Jc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZlcDcyMTFfbG9jaywgZmxhZ3MpOwogCiAJLyogVHVybiBvZmYgdGhlIFNJUiBlbmNvZGVyLiAqLwogCXN5c2NvbjEgPSBjbHBzX3JlYWRsKFNZU0NPTjEpOwpAQCAtNjMsNyArNjYsNyBAQAogCS8qIFhYWDogSWYgd2UndmUgZGlzYWJsZWQgdGhlIG1vZGVtIHN0YXR1cyBpbnRlcnJ1cHRzLCB3ZSBzaG91bGQKIAkJcmVzZXQgdGhlbSBiYWNrIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLiAqLwogCi0JcmVzdG9yZV9mbGFncyhmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXA3MjExX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwppbmRleCBmYTE3NmZmLi42ZTJlYzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIHN0YXRpYyB2b2lkIHNwZWVkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBzdGF0aWMgdm9pZCB3cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIHZvaWQgaXJkYV91c2JfcmVjZWl2ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGlyZGFfdXNiX3J4X2RlZmVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyBpbnQgaXJkYV91c2JfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGlyZGFfdXNiX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaXJkYV91c2JfbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwpAQCAtNjc3LDYgKzY3OCwxMiBAQAogICogb24gdGhlIGludGVycnVwdCBwaXBlIGFuZCBoYW5nIHRoZSBSeCBVUkIgb25seSB3aGVuIGFuIGludGVycnVwdCBpcwogICogcmVjZWl2ZWQuCiAgKiBKZWFuIElJCisgKgorICogTm90ZSA6IGRvbid0IHJlYWQgdGhlIGFib3ZlIGFzIHdoYXQgd2UgYXJlIGN1cnJlbnRseSBkb2luZywgYnV0IGFzCisgKiBzb21ldGhpbmcgd2UgY291bGQgZG8gd2l0aCBLQyBkb25nbGUuIEFsc28gZG9uJ3QgZm9yZ2V0IHRoYXQgdGhlCisgKiBpbnRlcnJ1cHQgcGlwZSBpcyBub3QgcGFydCBvZiB0aGUgb3JpZ2luYWwgc3RhbmRhcmQsIHNvIHRoaXMgd291bGQKKyAqIG5lZWQgdG8gYmUgb3B0aW9uYWwuLi4KKyAqIEplYW4gSUkKICAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03MDQsMTAgKzcxMSw4IEBACiAJLyogUmVpbml0aWFsaXplIFVSQiAqLwogCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VsZi0+dXNiZGV2LCAKIAkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHNlbGYtPnVzYmRldiwgc2VsZi0+YnVsa19pbl9lcCksIAotCQkgICAgICBza2ItPmRhdGEsIHNrYi0+dHJ1ZXNpemUsCisJCSAgICAgIHNrYi0+ZGF0YSwgSVJEQV9TS0JfTUFYX01UVSwKICAgICAgICAgICAgICAgICAgICAgICBpcmRhX3VzYl9yZWNlaXZlLCBza2IpOwotCS8qIE5vdGUgOiB1bmxpbmsgKm11c3QqIGJlIHN5bmNocm9ub3VzIGJlY2F1c2Ugb2YgdGhlIGNvZGUgaW4gCi0JICogaXJkYV91c2JfbmV0X2Nsb3NlKCkgLT4gZnJlZSB0aGUgc2tiIC0gSmVhbiBJSSAqLwogCXVyYi0+c3RhdHVzID0gMDsKIAogCS8qIENhbiBiZSBjYWxsZWQgZnJvbSBpcmRhX3VzYl9yZWNlaXZlIChpcnEgaGFuZGxlcikgLT4gR0ZQX0FUT01JQyAqLwpAQCAtNzM0LDcgKzczOSw4IEBACiAJc3RydWN0IGlyZGFfc2tiX2NiICpjYjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiOwogCXN0cnVjdCBza19idWZmICpkYXRhc2tiOwotCWludAkJZG9jb3B5OworCXN0cnVjdCB1cmIgKm5leHRfdXJiOworCXVuc2lnbmVkIGludCBsZW4sIGRvY29weTsKIAogCUlSREFfREVCVUcoMiwgIiVzKCksIGxlbj0lZFxuIiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQpAQCAtNzU1LDIwICs3NjEsMzcgQEAKIAlpZiAodXJiLT5zdGF0dXMgIT0gMCkgewogCQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJCWNhc2UgLUVJTFNFUToKLQkJCXNlbGYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJc2VsZi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwkKLQkJCWJyZWFrOworCQkJLyogQWxzbyBwcmVjdXJzb3IgdG8gYSBob3QtdW5wbHVnIG9uIFVIQ0kuICovCisJCQkvKiBGYWxsdGhyb3VnaC4uLiAqLwogCQljYXNlIC1FQ09OTlJFU0VUOgkJLyogLTEwNCAqLwotCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgQ29ubmVjdGlvbiBSZXNldCAoLTEwNCksIHRyYW5zZmVyX2ZsYWdzIDB4JTA0WCBcbiIsIF9fRlVOQ1RJT05fXywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCQkvKiBSYW5kb20gZXJyb3IsIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5ICovCiAJCQkvKiB1aGNpX2NsZWFudXBfdW5saW5rKCkgaXMgZ29pbmcgdG8ga2lsbCB0aGUgUngKIAkJCSAqIFVSQiBqdXN0IGFmdGVyIHdlIHJldHVybi4gTm8gcHJvYmxlbSwgYXQgdGhpcwogCQkJICogcG9pbnQgdGhlIFVSQiB3aWxsIGJlIGlkbGUgOy0pIC0gSmVhbiBJSSAqLwotCQkJYnJlYWs7CisJCWNhc2UgLUVTSFVURE9XTjoJCS8qIC0xMDggKi8KKwkJCS8qIFRoYXQncyB1c3VhbGx5IGEgaG90LXVucGx1Zy4gU3VibWl0IHdpbGwgZmFpbC4uLiAqLworCQljYXNlIC1FVElNRURPVVQ6CQkvKiAtMTEwICovCisJCQkvKiBVc3VhbGx5IHByZWN1cnNvciB0byBhIGhvdC11bnBsdWcgb24gT0hDSS4gKi8KIAkJZGVmYXVsdDoKLQkJCUlSREFfREVCVUcoMCwgIiVzKCksIFJYIHN0YXR1cyAlZCx0cmFuc2Zlcl9mbGFncyAweCUwNFggXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwkJCXNlbGYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJSVJEQV9ERUJVRygwLCAiJXMoKSwgUlggc3RhdHVzICVkLCB0cmFuc2Zlcl9mbGFncyAweCUwNFggXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWdvdG8gZG9uZTsKKwkJLyogSWYgd2UgcmVjZWl2ZWQgYW4gZXJyb3IsIHdlIGRvbid0IHdhbnQgdG8gcmVzdWJtaXQgdGhlCisJCSAqIFJ4IFVSQiBzdHJhaWdodCBhd2F5IGJ1dCB0byBnaXZlIHRoZSBVU0IgbGF5ZXIgYSBsaXR0bGUKKwkJICogYml0IG9mIGJyZWF0aGluZyByb29tLgorCQkgKiBXZSBhcmUgaW4gdGhlIFVTQiB0aHJlYWQgY29udGV4dCwgdGhlcmVmb3JlIHRoZXJlIGlzIGEKKwkJICogZGFuZ2VyIG9mIHJlY3Vyc2lvbiAobmV3IFVSQiB3ZSBzdWJtaXQgZmFpbHMsIHdlIGNvbWUKKwkJICogYmFjayBoZXJlKS4KKwkJICogV2l0aCByZWNlbnQgVVNCIHN0YWNrICgyLjYuMTUrKSwgSSdtIHNlZWluZyB0aGF0IG9uCisJCSAqIGhvdCB1bnBsdWcgb2YgdGhlIGRvbmdsZS4uLgorCQkgKiBMb3dlc3QgZWZmZWN0aXZlIHRpbWVyIGlzIDEwbXMuLi4KKwkJICogSmVhbiBJSSAqLworCQlzZWxmLT5yeF9kZWZlcl90aW1lci5mdW5jdGlvbiA9ICZpcmRhX3VzYl9yeF9kZWZlcl9leHBpcmVkOworCQlzZWxmLT5yeF9kZWZlcl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHVyYjsKKwkJbW9kX3RpbWVyKCZzZWxmLT5yeF9kZWZlcl90aW1lciwgamlmZmllcyArICgxMCAqIEhaIC8gMTAwMCkpOworCQlyZXR1cm47CiAJfQogCQogCS8qIENoZWNrIGZvciBlbXB0eSBmcmFtZXMgKi8KQEAgLTgyOCwxMCArODUxLDExIEBACiAJZGF0YXNrYi0+ZGV2ID0gc2VsZi0+bmV0ZGV2OwogCWRhdGFza2ItPm1hYy5yYXcgID0gZGF0YXNrYi0+ZGF0YTsKIAlkYXRhc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lSREEpOworCWxlbiA9IGRhdGFza2ItPmxlbjsKIAluZXRpZl9yeChkYXRhc2tiKTsKIAogCS8qIEtlZXAgc3RhdHMgdXAgdG8gZGF0ZSAqLwotCXNlbGYtPnN0YXRzLnJ4X2J5dGVzICs9IGRhdGFza2ItPmxlbjsKKwlzZWxmLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAJc2VsZi0+c3RhdHMucnhfcGFja2V0cysrOwogCXNlbGYtPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAKQEAgLTg0NSwxMyArODY5LDQ1IEBACiAJICogaWRsZSBzbG90Li4uLgogCSAqIEplYW4gSUkgKi8KIAkvKiBOb3RlIDogd2l0aCB0aGlzIHNjaGVtZSwgd2UgY291bGQgc3VibWl0IHRoZSBpZGxlIFVSQiBiZWZvcmUKLQkgKiBwcm9jZXNzaW5nIHRoZSBSeCBVUkIuIEFub3RoZXIgdGltZS4uLiBKZWFuIElJICovCisJICogcHJvY2Vzc2luZyB0aGUgUnggVVJCLiBJIGRvbid0IHRoaW5rIGl0IHdvdWxkIGJ1eSB1cyBhbnl0aGluZyBhcworCSAqIHdlIGFyZSBydW5uaW5nIGluIHRoZSBVU0IgdGhyZWFkIGNvbnRleHQuIEplYW4gSUkgKi8KKwluZXh0X3VyYiA9IHNlbGYtPmlkbGVfcnhfdXJiOwogCi0JLyogU3VibWl0IHRoZSBpZGxlIFVSQiB0byByZXBsYWNlIHRoZSBVUkIgd2UndmUganVzdCByZWNlaXZlZCAqLwotCWlyZGFfdXNiX3N1Ym1pdChzZWxmLCBza2IsIHNlbGYtPmlkbGVfcnhfdXJiKTsKIAkvKiBSZWN5Y2xlIFJ4IFVSQiA6IE5vdywgdGhlIGlkbGUgVVJCIGlzIHRoZSBwcmVzZW50IG9uZSAqLwogCXVyYi0+Y29udGV4dCA9IE5VTEw7CiAJc2VsZi0+aWRsZV9yeF91cmIgPSB1cmI7CisKKwkvKiBTdWJtaXQgdGhlIGlkbGUgVVJCIHRvIHJlcGxhY2UgdGhlIFVSQiB3ZSd2ZSBqdXN0IHJlY2VpdmVkLgorCSAqIERvIGl0IGxhc3QgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLi4uIEplYW4gSUkgKi8KKwlpcmRhX3VzYl9zdWJtaXQoc2VsZiwgc2tiLCBuZXh0X3VyYik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBJbiBjYXNlIG9mIGVycm9ycywgd2Ugd2FudCB0aGUgVVNCIGxheWVyIHRvIGhhdmUgdGltZSB0byByZWNvdmVyLgorICogTm93LCBpdCBpcyB0aW1lIHRvIHJlc3VibWl0IG91dXIgUnggVVJCLi4uCisgKi8KK3N0YXRpYyB2b2lkIGlyZGFfdXNiX3J4X2RlZmVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IChzdHJ1Y3QgdXJiICopIGRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmOyAKKwlzdHJ1Y3QgaXJkYV9za2JfY2IgKmNiOworCXN0cnVjdCB1cmIgKm5leHRfdXJiOworCisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIEZpbmQgb3Vyc2VsdmVzICovCisJY2IgPSAoc3RydWN0IGlyZGFfc2tiX2NiICopIHNrYi0+Y2I7CisJSVJEQV9BU1NFUlQoY2IgIT0gTlVMTCwgcmV0dXJuOyk7CisJc2VsZiA9IChzdHJ1Y3QgaXJkYV91c2JfY2IgKikgY2ItPmNvbnRleHQ7CisJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKKworCS8qIFNhbWUgc3R1ZmYgYXMgd2hlbiBSeCBpcyBkb25lLCBzZWUgYWJvdmUuLi4gKi8KKwluZXh0X3VyYiA9IHNlbGYtPmlkbGVfcnhfdXJiOworCXVyYi0+Y29udGV4dCA9IE5VTEw7CisJc2VsZi0+aWRsZV9yeF91cmIgPSB1cmI7CisJaXJkYV91c2Jfc3VibWl0KHNlbGYsIHNrYiwgbmV4dF91cmIpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC05OTAsNiArMTA0Niw5IEBACiAJLyogU3RvcCBuZXR3b3JrIFR4IHF1ZXVlICovCiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCisJLyogS2lsbCBkZWZlcmVkIFJ4IFVSQiAqLworCWRlbF90aW1lcigmc2VsZi0+cnhfZGVmZXJfdGltZXIpOworCiAJLyogRGVhbGxvY2F0ZSBhbGwgdGhlIFJ4IHBhdGggYnVmZmVycyAoVVJCcyBhbmQgc2tiKSAqLwogCWZvciAoaSA9IDA7IGkgPCBJVV9NQVhfUlhfVVJCUzsgaSsrKSB7CiAJCXN0cnVjdCB1cmIgKnVyYiA9IHNlbGYtPnJ4X3VyYltpXTsKQEAgLTEzNjUsNiArMTQyNCw3IEBACiAJc2VsZiA9IG5ldC0+cHJpdjsKIAlzZWxmLT5uZXRkZXYgPSBuZXQ7CiAJc3Bpbl9sb2NrX2luaXQoJnNlbGYtPmxvY2spOworCWluaXRfdGltZXIoJnNlbGYtPnJ4X2RlZmVyX3RpbWVyKTsKIAogCS8qIENyZWF0ZSBhbGwgb2YgdGhlIG5lZWRlZCB1cmJzICovCiAJZm9yIChpID0gMDsgaSA8IElVX01BWF9SWF9VUkJTOyBpKyspIHsKQEAgLTE0OTgsNiArMTU1OCw5IEBACiAJICogVGhpcyB3aWxsIHN0b3AvZGVzYWN0aXZhdGUgdGhlIFR4IHBhdGguIC0gSmVhbiBJSSAqLwogCXNlbGYtPnByZXNlbnQgPSAwOwogCisJLyogS2lsbCBkZWZlcmVkIFJ4IFVSQiAqLworCWRlbF90aW1lcigmc2VsZi0+cnhfZGVmZXJfdGltZXIpOworCiAJLyogV2UgbmVlZCB0byBoYXZlIGlycSBlbmFibGVkIHRvIHVubGluayB0aGUgVVJCcy4gVGhhdCdzIE9LLAogCSAqIGF0IHRoaXMgcG9pbnQgdGhlIFR4IHBhdGggaXMgZ29uZSAtIEplYW4gSUkgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CkBAIC0xNTA3LDExICsxNTcwLDExIEBACiAJCS8qIEFjY2VwdCBubyBtb3JlIHRyYW5zbWlzc2lvbnMgKi8KIAkJLypuZXRpZl9kZXZpY2VfZGV0YWNoKHNlbGYtPm5ldGRldik7Ki8KIAkJbmV0aWZfc3RvcF9xdWV1ZShzZWxmLT5uZXRkZXYpOwotCQkvKiBTdG9wIGFsbCB0aGUgcmVjZWl2ZSBVUkJzICovCisJCS8qIFN0b3AgYWxsIHRoZSByZWNlaXZlIFVSQnMuIE11c3QgYmUgc3luY2hyb25vdXMuICovCiAJCWZvciAoaSA9IDA7IGkgPCBJVV9NQVhfUlhfVVJCUzsgaSsrKQogCQkJdXNiX2tpbGxfdXJiKHNlbGYtPnJ4X3VyYltpXSk7CiAJCS8qIENhbmNlbCBUeCBhbmQgc3BlZWQgVVJCLgotCQkgKiBUb2dnbGUgZmxhZ3MgdG8gbWFrZSBzdXJlIGl0J3Mgc3luY2hyb25vdXMuICovCisJCSAqIE1ha2Ugc3VyZSBpdCdzIHN5bmNocm9ub3VzIHRvIGF2b2lkIHJhY2VzLiAqLwogCQl1c2Jfa2lsbF91cmIoc2VsZi0+dHhfdXJiKTsKIAkJdXNiX2tpbGxfdXJiKHNlbGYtPnNwZWVkX3VyYik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCmluZGV4IGJkOGY2NjUuLjQwMjZhZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKQEAgLTEzNiw4ICsxMzYsNiBAQAogCV9fdTE2IGJ1bGtfb3V0X210dTsJCS8qIE1heCBUeCBwYWNrZXQgc2l6ZSBpbiBieXRlcyAqLwogCV9fdTggIGJ1bGtfaW50X2VwOwkJLyogSW50ZXJydXB0IEVuZHBvaW50IGFzc2lnbm1lbnRzICovCiAKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CS8qIGZvciB0aW1lb3V0cyAqLwotCiAJc3RydWN0IHVyYiAqcnhfdXJiW0lVX01BWF9SWF9VUkJTXTsJLyogVVJCcyB1c2VkIHRvIHJlY2VpdmUgZGF0YSBmcmFtZXMgKi8KIAlzdHJ1Y3QgdXJiICppZGxlX3J4X3VyYjsJLyogUG9pbnRlciB0byBpZGxlIFVSQiBpbiBSeCBwYXRoICovCiAJc3RydWN0IHVyYiAqdHhfdXJiOwkJLyogVVJCIHVzZWQgdG8gc2VuZCBkYXRhIGZyYW1lcyAqLwpAQCAtMTQ3LDE3ICsxNDUsMTggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgaXJsYXBfY2IgICAqaXJsYXA7CS8qIFRoZSBsaW5rIGxheWVyIHdlIGFyZSBiaW5kZWQgdG8gKi8KIAlzdHJ1Y3QgcW9zX2luZm8gcW9zOwotCWhhc2hiaW5fdCAqdHhfbGlzdDsJCS8qIFF1ZXVlZCB0cmFuc21pdCBza2IncyAqLwogCWNoYXIgKnNwZWVkX2J1ZmY7CQkvKiBCdWZmZXIgZm9yIHNwZWVkIGNoYW5nZXMgKi8KIAogCXN0cnVjdCB0aW1ldmFsIHN0YW1wOwogCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAotCXNwaW5sb2NrX3QgbG9jazsJCS8qIEZvciBzZXJpYWxpemluZyBvcGVyYXRpb25zICovCisJc3BpbmxvY2tfdCBsb2NrOwkJLyogRm9yIHNlcmlhbGl6aW5nIFR4IG9wZXJhdGlvbnMgKi8KIAogCV9fdTE2IHhib2ZzOwkJCS8qIEN1cnJlbnQgeGJvZnMgc2V0dGluZyAqLwogCV9fczE2IG5ld194Ym9mczsJCS8qIHhib2ZzIHdlIG5lZWQgdG8gc2V0ICovCiAJX191MzIgc3BlZWQ7CQkJLyogQ3VycmVudCBzcGVlZCAqLwogCV9fczMyIG5ld19zcGVlZDsJCS8qIHNwZWVkIHdlIG5lZWQgdG8gc2V0ICovCisKKwlzdHJ1Y3QgdGltZXJfbGlzdCByeF9kZWZlcl90aW1lcjsJLyogV2FpdCBmb3IgUnggZXJyb3IgdG8gY2xlYXIgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJwb3J0LmMgYi9kcml2ZXJzL25ldC9pcmRhL2lycG9ydC5jCmluZGV4IDYwNzAxOTUuLjk4ZmE1MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJwb3J0LmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcnBvcnQuYwpAQCAtMTExOCw5ICsxMTE4LDkgQEAKICAJfQogfQogCi1NT0RVTEVfUEFSTShpbywgIjEtNGkiKTsKK21vZHVsZV9wYXJhbV9hcnJheShpbywgaW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJCYXNlIEkvTyBhZGRyZXNzZXMiKTsKLU1PRFVMRV9QQVJNKGlycSwgIjEtNGkiKTsKK21vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSBsaW5lcyIpOwogCiBNT0RVTEVfQVVUSE9SKCJEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYwppbmRleCAxMDE3NTBiLi42YTk4YjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGFfZGV2aWNlLmg+CkBAIC0zMzgsNyArMzM5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogc2VyaWFsaXplIGxkaXNjIG9wZW4vY2xvc2Ugd2l0aCBzaXJfZGV2ICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChpcnR0eV9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChpcnR0eV9tdXRleCk7CiAKIC8qIG5vdGlmaWVyIGZyb20gc2lyX2RldiB3aGVuIGlyZGElIGRldmljZSBnZXRzIG9wZW5lZCAoaWZ1cCkgKi8KIApAQCAtMzQ4LDExICszNDksMTEgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJLyogc2VyaWFsaXplIHdpdGggbGRpc2Mgb3Blbi9jbG9zZSAqLwotCWRvd24oJmlydHR5X3NlbSk7CisJbXV0ZXhfbG9jaygmaXJ0dHlfbXV0ZXgpOwogCiAJcHJpdiA9IGRldi0+cHJpdjsKIAlpZiAodW5saWtlbHkoIXByaXYgfHwgcHJpdi0+bWFnaWMhPUlSVFRZX01BR0lDKSkgewotCQl1cCgmaXJ0dHlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZpcnR0eV9tdXRleCk7CiAJCXJldHVybiAtRVNUQUxFOwogCX0KIApAQCAtMzYzLDcgKzM2NCw3IEBACiAJLyogTWFrZSBzdXJlIHdlIGNhbiByZWNlaXZlIG1vcmUgZGF0YSAqLwogCWlydHR5X3N0b3BfcmVjZWl2ZXIodHR5LCBGQUxTRSk7CiAKLQl1cCgmaXJ0dHlfc2VtKTsKKwltdXRleF91bmxvY2soJmlydHR5X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc1LDExICszNzYsMTEgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJLyogc2VyaWFsaXplIHdpdGggbGRpc2Mgb3Blbi9jbG9zZSAqLwotCWRvd24oJmlydHR5X3NlbSk7CisJbXV0ZXhfbG9jaygmaXJ0dHlfbXV0ZXgpOwogCiAJcHJpdiA9IGRldi0+cHJpdjsKIAlpZiAodW5saWtlbHkoIXByaXYgfHwgcHJpdi0+bWFnaWMhPUlSVFRZX01BR0lDKSkgewotCQl1cCgmaXJ0dHlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZpcnR0eV9tdXRleCk7CiAJCXJldHVybiAtRVNUQUxFOwogCX0KIApAQCAtMzkwLDcgKzM5MSw3IEBACiAJaWYgKHR0eS0+ZHJpdmVyLT5zdG9wKQogCQl0dHktPmRyaXZlci0+c3RvcCh0dHkpOwogCi0JdXAoJmlydHR5X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpcnR0eV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNCwxMyArNTE1LDEzIEBACiAJcHJpdi0+ZGV2ID0gZGV2OwogCiAJLyogc2VyaWFsaXplIHdpdGggc3RhcnRfZGV2IC0gaW4gY2FzZSB3ZSB3ZXJlIHJhY2luZyB3aXRoIGlmdXAgKi8KLQlkb3duKCZpcnR0eV9zZW0pOworCW11dGV4X2xvY2soJmlydHR5X211dGV4KTsKIAogCWRldi0+cHJpdiA9IHByaXY7CiAJdHR5LT5kaXNjX2RhdGEgPSBwcml2OwogCXR0eS0+cmVjZWl2ZV9yb29tID0gNjU1MzY7CiAKLQl1cCgmaXJ0dHlfc2VtKTsKKwltdXRleF91bmxvY2soJmlydHR5X211dGV4KTsKIAogCUlSREFfREVCVUcoMCwgIiVzIC0gJXM6IGlyZGEgbGluZSBkaXNjaXBsaW5lIG9wZW5lZFxuIiwgX19GVU5DVElPTl9fLCB0dHktPm5hbWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKaW5kZXggZWU3MTdkMC4uODMxNDFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwpAQCAtMTIsNiArMTIsNyBAQAogICogICAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTggTGljaGVuIFdhbmcsIDxsd2FuZ0BhY3Rpc3lzLmNvbT4KICAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTggQWN0aXN5cyBDb3JwLiwgd3d3LmFjdGlzeXMuY29tCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgogICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKICAqICAgICAgCiAgKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKQEAgLTUzLDE0ICs1NCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8bGludXgvcG1fbGVnYWN5Lmg+Ci0KICNpbmNsdWRlIDxuZXQvaXJkYS93cmFwcGVyLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGFfZGV2aWNlLmg+CkBAIC03MiwxNCArNzIsMjcgQEAKIAogc3RhdGljIGNoYXIgKmRyaXZlcl9uYW1lID0gIm5zYy1pcmNjIjsKIAorLyogUG93ZXIgTWFuYWdlbWVudCAqLworI2RlZmluZSBOU0NfSVJDQ19EUklWRVJfTkFNRSAgICAgICAgICAgICAgICAgICJuc2MtaXJjYyIKK3N0YXRpYyBpbnQgbnNjX2lyY2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitzdGF0aWMgaW50IG5zY19pcmNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuc2NfaXJjY19kcml2ZXIgPSB7CisJLnN1c3BlbmQJPSBuc2NfaXJjY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gbnNjX2lyY2NfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IE5TQ19JUkNDX0RSSVZFUl9OQU1FLAorCX0sCit9OworCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwogc3RhdGljIGludCBxb3NfbXR0X2JpdHMgPSAweDA3OyAgLyogMSBtcyBvciBtb3JlICovCiBzdGF0aWMgaW50IGRvbmdsZV9pZDsKIAogLyogVXNlIEJJT1Mgc2V0dGlvbnMgYnkgZGVmYXVsdCwgYnV0IHVzZXIgbWF5IHN1cHBseSBtb2R1bGUgcGFyYW1ldGVycyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpb1tdICA9IHsgfjAsIH4wLCB+MCwgfjAgfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXJxW10gPSB7IDAsIDAsIDAsIDAsIDAgfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZG1hW10gPSB7IDAsIDAsIDAsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW9bXSAgPSB7IH4wLCB+MCwgfjAsIH4wLCB+MCB9Oworc3RhdGljIHVuc2lnbmVkIGludCBpcnFbXSA9IHsgIDAsICAwLCAgMCwgIDAsICAwIH07CitzdGF0aWMgdW5zaWduZWQgaW50IGRtYVtdID0geyAgMCwgIDAsICAwLCAgMCwgIDAgfTsKIAogc3RhdGljIGludCBuc2NfaXJjY19wcm9iZV8xMDgobnNjX2NoaXBfdCAqY2hpcCwgY2hpcGlvX3QgKmluZm8pOwogc3RhdGljIGludCBuc2NfaXJjY19wcm9iZV8zMzgobnNjX2NoaXBfdCAqY2hpcCwgY2hpcGlvX3QgKmluZm8pOwpAQCAtODcsNiArMTAwLDcgQEAKIHN0YXRpYyBpbnQgbnNjX2lyY2NfaW5pdF8xMDgobnNjX2NoaXBfdCAqY2hpcCwgY2hpcGlvX3QgKmluZm8pOwogc3RhdGljIGludCBuc2NfaXJjY19pbml0XzMzOChuc2NfY2hpcF90ICpjaGlwLCBjaGlwaW9fdCAqaW5mbyk7CiBzdGF0aWMgaW50IG5zY19pcmNjX2luaXRfMzl4KG5zY19jaGlwX3QgKmNoaXAsIGNoaXBpb190ICppbmZvKTsKK3N0YXRpYyBpbnQgbnNjX2lyY2NfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCk7CiAKIC8qIFRoZXNlIGFyZSB0aGUga25vd24gTlNDIGNoaXBzICovCiBzdGF0aWMgbnNjX2NoaXBfdCBjaGlwc1tdID0gewpAQCAtMTAxLDExICsxMTUsMTIgQEAKIAkvKiBDb250cmlidXRlZCBieSBKYW4gRnJleSAtIElCTSBBMzAvQTMxICovCiAJeyAiUEM4NzM5eCIsIHsgMHgyZSwgMHg0ZSwgMHgwIH0sIDB4MjAsIDB4ZWEsIDB4ZmYsIAogCSAgbnNjX2lyY2NfcHJvYmVfMzl4LCBuc2NfaXJjY19pbml0XzM5eCB9LAorCXsgIklCTSIsIHsgMHgyZSwgMHg0ZSwgMHgwIH0sIDB4MjAsIDB4ZjQsIDB4ZmYsCisgCSAgbnNjX2lyY2NfcHJvYmVfMzl4LCBuc2NfaXJjY19pbml0XzM5eCB9LAogCXsgTlVMTCB9CiB9OwogCi0vKiBNYXggNCBpbnN0YW5jZXMgZm9yIG5vdyAqLwotc3RhdGljIHN0cnVjdCBuc2NfaXJjY19jYiAqZGV2X3NlbGZbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9Oworc3RhdGljIHN0cnVjdCBuc2NfaXJjY19jYiAqZGV2X3NlbGZbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OwogCiBzdGF0aWMgY2hhciAqZG9uZ2xlX3R5cGVzW10gPSB7CiAJIkRpZmZlcmVudGlhbCBzZXJpYWwgaW50ZXJmYWNlIiwKQEAgLTEyNiw4ICsxNDEsMjQgQEAKIAkiTm8gZG9uZ2xlIGNvbm5lY3RlZCIsCiB9OwogCisvKiBQTlAgcHJvYmluZyAqLworc3RhdGljIGNoaXBpb190IHBucF9pbmZvOworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIG5zY19pcmNjX3BucF90YWJsZVtdID0geworCXsgLmlkID0gIk5TQzYwMDEiLCAuZHJpdmVyX2RhdGEgPSAwIH0sCisJeyAuaWQgPSAiSUJNMDA3MSIsIC5kcml2ZXJfZGF0YSA9IDAgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBuc2NfaXJjY19wbnBfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgbnNjX2lyY2NfcG5wX2RyaXZlciA9IHsKKwkubmFtZSA9ICJuc2MtaXJjYyIsCisJLmlkX3RhYmxlID0gbnNjX2lyY2NfcG5wX3RhYmxlLAorCS5wcm9iZSA9IG5zY19pcmNjX3BucF9wcm9iZSwKK307CisKIC8qIFNvbWUgcHJvdG90eXBlcyAqLwotc3RhdGljIGludCAgbnNjX2lyY2Nfb3BlbihpbnQgaSwgY2hpcGlvX3QgKmluZm8pOworc3RhdGljIGludCAgbnNjX2lyY2Nfb3BlbihjaGlwaW9fdCAqaW5mbyk7CiBzdGF0aWMgaW50ICBuc2NfaXJjY19jbG9zZShzdHJ1Y3QgbnNjX2lyY2NfY2IgKnNlbGYpOwogc3RhdGljIGludCAgbnNjX2lyY2Nfc2V0dXAoY2hpcGlvX3QgKmluZm8pOwogc3RhdGljIHZvaWQgbnNjX2lyY2NfcGlvX3JlY2VpdmUoc3RydWN0IG5zY19pcmNjX2NiICpzZWxmKTsKQEAgLTE0Niw3ICsxNzcsMTAgQEAKIHN0YXRpYyBpbnQgIG5zY19pcmNjX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIG5zY19pcmNjX25ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnNjX2lyY2NfbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbnNjX2lyY2NfcG1wcm9jKHN0cnVjdCBwbV9kZXYgKmRldiwgcG1fcmVxdWVzdF90IHJxc3QsIHZvaWQgKmRhdGEpOworCisvKiBHbG9iYWxzICovCitzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOworc3RhdGljIGludCBwbnBfc3VjY2VlZGVkOwogCiAvKgogICogRnVuY3Rpb24gbnNjX2lyY2NfaW5pdCAoKQpAQCAtMTU4LDI4ICsxOTIsMzYgQEAKIHsKIAljaGlwaW9fdCBpbmZvOwogCW5zY19jaGlwX3QgKmNoaXA7Ci0JaW50IHJldCA9IC1FTk9ERVY7CisJaW50IHJldDsKIAlpbnQgY2ZnX2Jhc2U7CiAJaW50IGNmZywgaWQ7CiAJaW50IHJlZzsKIAlpbnQgaSA9IDA7CiAKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm5zY19pcmNjX2RyaXZlcik7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBJUkRBX0VSUk9SKCIlcywgQ2FuJ3QgcmVnaXN0ZXIgZHJpdmVyIVxuIiwgZHJpdmVyX25hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworIAkvKiBSZWdpc3RlciB3aXRoIFBuUCBzdWJzeXN0ZW0gdG8gZGV0ZWN0IGRpc2FibGUgcG9ydHMgKi8KKwlyZXQgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZuc2NfaXJjY19wbnBfZHJpdmVyKTsKKworIAlpZiAocmV0ID49IDApCisgCQlwbnBfcmVnaXN0ZXJlZCA9IDE7CisKKwlyZXQgPSAtRU5PREVWOworCiAJLyogUHJvYmUgZm9yIGFsbCB0aGUgTlNDIGNoaXBzZXRzIHdlIGtub3cgYWJvdXQgKi8KLQlmb3IgKGNoaXA9Y2hpcHM7IGNoaXAtPm5hbWUgOyBjaGlwKyspIHsKKwlmb3IgKGNoaXAgPSBjaGlwczsgY2hpcC0+bmFtZSA7IGNoaXArKykgewogCQlJUkRBX0RFQlVHKDIsICIlcygpLCBQcm9iaW5nIGZvciAlcyAuLi5cbiIsIF9fRlVOQ1RJT05fXywKIAkJCSAgIGNoaXAtPm5hbWUpOwogCQkKIAkJLyogVHJ5IGFsbCBjb25maWcgcmVnaXN0ZXJzIGZvciB0aGlzIGNoaXAgKi8KLQkJZm9yIChjZmc9MDsgY2ZnPDM7IGNmZysrKSB7CisJCWZvciAoY2ZnID0gMDsgY2ZnIDwgQVJSQVlfU0laRShjaGlwLT5jZmcpOyBjZmcrKykgewogCQkJY2ZnX2Jhc2UgPSBjaGlwLT5jZmdbY2ZnXTsKIAkJCWlmICghY2ZnX2Jhc2UpCiAJCQkJY29udGludWU7Ci0JCQkKLQkJCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGNoaXBpb190KSk7Ci0JCQlpbmZvLmNmZ19iYXNlID0gY2ZnX2Jhc2U7Ci0JCQlpbmZvLmZpcl9iYXNlID0gaW9baV07Ci0JCQlpbmZvLmRtYSA9IGRtYVtpXTsKLQkJCWluZm8uaXJxID0gaXJxW2ldOwogCiAJCQkvKiBSZWFkIGluZGV4IHJlZ2lzdGVyICovCiAJCQlyZWcgPSBpbmIoY2ZnX2Jhc2UpOwpAQCAtMTk0LDI0ICsyMzYsNjUgQEAKIAkJCWlmICgoaWQgJiBjaGlwLT5jaWRfbWFzaykgPT0gY2hpcC0+Y2lkX3ZhbHVlKSB7CiAJCQkJSVJEQV9ERUJVRygyLCAiJXMoKSBGb3VuZCAlcyBjaGlwLCByZXZpc2lvbj0lZFxuIiwKIAkJCQkJICAgX19GVU5DVElPTl9fLCBjaGlwLT5uYW1lLCBpZCAmIH5jaGlwLT5jaWRfbWFzayk7Ci0JCQkJLyogCi0JCQkJICogSWYgdGhlIHVzZXIgc3VwcGxpZXMgdGhlIGJhc2UgYWRkcmVzcywgdGhlbgotCQkJCSAqIHdlIGluaXQgdGhlIGNoaXAsIGlmIG5vdCB3ZSBwcm9iZSB0aGUgdmFsdWVzCi0JCQkJICogc2V0IGJ5IHRoZSBCSU9TCi0JCQkJICovCQkJCQotCQkJCWlmIChpb1tpXSA8IDB4MjAwMCkgewotCQkJCQljaGlwLT5pbml0KGNoaXAsICZpbmZvKTsKLQkJCQl9IGVsc2UKLQkJCQkJY2hpcC0+cHJvYmUoY2hpcCwgJmluZm8pOwogCi0JCQkJaWYgKG5zY19pcmNjX29wZW4oaSwgJmluZm8pID09IDApCi0JCQkJCXJldCA9IDA7CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBmb3VuZCBhIGNvcnJlY3QgUG5QIHNldHRpbmcsCisJCQkJICogd2UgZmlyc3QgdHJ5IGl0LgorCQkJCSAqLworCQkJCWlmIChwbnBfc3VjY2VlZGVkKSB7CisJCQkJCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGNoaXBpb190KSk7CisJCQkJCWluZm8uY2ZnX2Jhc2UgPSBjZmdfYmFzZTsKKwkJCQkJaW5mby5maXJfYmFzZSA9IHBucF9pbmZvLmZpcl9iYXNlOworCQkJCQlpbmZvLmRtYSA9IHBucF9pbmZvLmRtYTsKKwkJCQkJaW5mby5pcnEgPSBwbnBfaW5mby5pcnE7CisKKwkJCQkJaWYgKGluZm8uZmlyX2Jhc2UgPCAweDIwMDApIHsKKwkJCQkJCUlSREFfTUVTU0FHRSgiJXMsIGNoaXAtPmluaXRcbiIsIGRyaXZlcl9uYW1lKTsKKwkJCQkJCWNoaXAtPmluaXQoY2hpcCwgJmluZm8pOworCQkJCQl9IGVsc2UKKwkJCQkJCWNoaXAtPnByb2JlKGNoaXAsICZpbmZvKTsKKworCQkJCQlpZiAobnNjX2lyY2Nfb3BlbigmaW5mbykgPj0gMCkKKwkJCQkJCXJldCA9IDA7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBPcGVuaW5nIGJhc2VkIG9uIFBuUCB2YWx1ZXMgZmFpbGVkLgorCQkJCSAqIExldCdzIGZhbGxiYWNrIHRvIHVzZXIgdmFsdWVzLCBvciBwcm9iZQorCQkJCSAqIHRoZSBjaGlwLgorCQkJCSAqLworCQkJCWlmIChyZXQpIHsKKwkJCQkJSVJEQV9ERUJVRygyLCAiJXMsIFBuUCBpbml0IGZhaWxlZFxuIiwgZHJpdmVyX25hbWUpOworCQkJCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihjaGlwaW9fdCkpOworCQkJCQlpbmZvLmNmZ19iYXNlID0gY2ZnX2Jhc2U7CisJCQkJCWluZm8uZmlyX2Jhc2UgPSBpb1tpXTsKKwkJCQkJaW5mby5kbWEgPSBkbWFbaV07CisJCQkJCWluZm8uaXJxID0gaXJxW2ldOworCisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSB1c2VyIHN1cHBsaWVzIHRoZSBiYXNlIGFkZHJlc3MsIHRoZW4KKwkJCQkJICogd2UgaW5pdCB0aGUgY2hpcCwgaWYgbm90IHdlIHByb2JlIHRoZSB2YWx1ZXMKKwkJCQkJICogc2V0IGJ5IHRoZSBCSU9TCisJCQkJCSAqLworCQkJCQlpZiAoaW9baV0gPCAweDIwMDApIHsKKwkJCQkJCWNoaXAtPmluaXQoY2hpcCwgJmluZm8pOworCQkJCQl9IGVsc2UKKwkJCQkJCWNoaXAtPnByb2JlKGNoaXAsICZpbmZvKTsKKworCQkJCQlpZiAobnNjX2lyY2Nfb3BlbigmaW5mbykgPj0gMCkKKwkJCQkJCXJldCA9IDA7CisJCQkJfQogCQkJCWkrKzsKIAkJCX0gZWxzZSB7CiAJCQkJSVJEQV9ERUJVRygyLCAiJXMoKSwgV3JvbmcgY2hpcCBpZD0weCUwMnhcbiIsIF9fRlVOQ1RJT05fXywgaWQpOwogCQkJfQogCQl9IAotCQkKKwl9CisKKwlpZiAocmV0KSB7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZuc2NfaXJjY19kcml2ZXIpOworCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJm5zY19pcmNjX3BucF9kcml2ZXIpOworCQlwbnBfcmVnaXN0ZXJlZCA9IDA7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTIyNywxMiArMzEwLDE3IEBACiB7CiAJaW50IGk7CiAKLQlwbV91bnJlZ2lzdGVyX2FsbChuc2NfaXJjY19wbXByb2MpOwotCi0JZm9yIChpPTA7IGkgPCA0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZfc2VsZik7IGkrKykgewogCQlpZiAoZGV2X3NlbGZbaV0pCiAJCQluc2NfaXJjY19jbG9zZShkZXZfc2VsZltpXSk7CiAJfQorCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5zY19pcmNjX2RyaXZlcik7CisKKwlpZiAocG5wX3JlZ2lzdGVyZWQpCisgCQlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJm5zY19pcmNjX3BucF9kcml2ZXIpOworCisJcG5wX3JlZ2lzdGVyZWQgPSAwOwogfQogCiAvKgpAQCAtMjQxLDE2ICszMjksMjYgQEAKICAqICAgIE9wZW4gZHJpdmVyIGluc3RhbmNlCiAgKgogICovCi1zdGF0aWMgaW50IF9faW5pdCBuc2NfaXJjY19vcGVuKGludCBpLCBjaGlwaW9fdCAqaW5mbykKK3N0YXRpYyBpbnQgX19pbml0IG5zY19pcmNjX29wZW4oY2hpcGlvX3QgKmluZm8pCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbnNjX2lyY2NfY2IgKnNlbGY7Ci0gICAgICAgIHN0cnVjdCBwbV9kZXYgKnBtZGV2OwogCXZvaWQgKnJldDsKLQlpbnQgZXJyOworCWludCBlcnIsIGNoaXBfaW5kZXg7CiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCisKKyAJZm9yIChjaGlwX2luZGV4ID0gMDsgY2hpcF9pbmRleCA8IEFSUkFZX1NJWkUoZGV2X3NlbGYpOyBjaGlwX2luZGV4KyspIHsKKwkJaWYgKCFkZXZfc2VsZltjaGlwX2luZGV4XSkKKwkJCWJyZWFrOworCX0KKworCWlmIChjaGlwX2luZGV4ID09IEFSUkFZX1NJWkUoZGV2X3NlbGYpKSB7CisJCUlSREFfRVJST1IoIiVzKCksIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBjaGlwcyByZWFjaGVkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJSVJEQV9NRVNTQUdFKCIlcywgRm91bmQgY2hpcCBhdCBiYXNlPTB4JTAzeFxuIiwgZHJpdmVyX25hbWUsCiAJCSAgICAgaW5mby0+Y2ZnX2Jhc2UpOwogCkBAIC0yNzEsOCArMzY5LDggQEAKIAlzcGluX2xvY2tfaW5pdCgmc2VsZi0+bG9jayk7CiAgICAKIAkvKiBOZWVkIHRvIHN0b3JlIHNlbGYgc29tZXdoZXJlICovCi0JZGV2X3NlbGZbaV0gPSBzZWxmOwotCXNlbGYtPmluZGV4ID0gaTsKKwlkZXZfc2VsZltjaGlwX2luZGV4XSA9IHNlbGY7CisJc2VsZi0+aW5kZXggPSBjaGlwX2luZGV4OwogCiAJLyogSW5pdGlhbGl6ZSBJTyAqLwogCXNlbGYtPmlvLmNmZ19iYXNlICA9IGluZm8tPmNmZ19iYXNlOwpAQCAtMzUxLDcgKzQ0OSw3IEBACiAKIAkvKiBDaGVjayBpZiB1c2VyIGhhcyBzdXBwbGllZCBhIHZhbGlkIGRvbmdsZSBpZCBvciBub3QgKi8KIAlpZiAoKGRvbmdsZV9pZCA8PSAwKSB8fAotCSAgICAoZG9uZ2xlX2lkID49IChzaXplb2YoZG9uZ2xlX3R5cGVzKSAvIHNpemVvZihkb25nbGVfdHlwZXNbMF0pKSkgKSB7CisJICAgIChkb25nbGVfaWQgPj0gQVJSQVlfU0laRShkb25nbGVfdHlwZXMpKSkgewogCQlkb25nbGVfaWQgPSBuc2NfaXJjY19yZWFkX2RvbmdsZV9pZChzZWxmLT5pby5maXJfYmFzZSk7CiAJCQogCQlJUkRBX01FU1NBR0UoIiVzLCBGb3VuZCBkb25nbGU6ICVzXG4iLCBkcml2ZXJfbmFtZSwKQEAgLTM2NCwxMSArNDYyLDE4IEBACiAJc2VsZi0+aW8uZG9uZ2xlX2lkID0gZG9uZ2xlX2lkOwogCW5zY19pcmNjX2luaXRfZG9uZ2xlX2ludGVyZmFjZShzZWxmLT5pby5maXJfYmFzZSwgZG9uZ2xlX2lkKTsKIAotICAgICAgICBwbWRldiA9IHBtX3JlZ2lzdGVyKFBNX1NZU19ERVYsIFBNX1NZU19JUkRBLCBuc2NfaXJjY19wbXByb2MpOwotICAgICAgICBpZiAocG1kZXYpCi0gICAgICAgICAgICAgICAgcG1kZXYtPmRhdGEgPSBzZWxmOworIAlzZWxmLT5wbGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoTlNDX0lSQ0NfRFJJVkVSX05BTUUsCisgCQkJCQkJICAgICAgc2VsZi0+aW5kZXgsIE5VTEwsIDApOworIAlpZiAoSVNfRVJSKHNlbGYtPnBsZGV2KSkgeworIAkJZXJyID0gUFRSX0VSUihzZWxmLT5wbGRldik7CisgCQlnb3RvIG91dDU7CisgCX0KKyAJcGxhdGZvcm1fc2V0X2RydmRhdGEoc2VsZi0+cGxkZXYsIHNlbGYpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNoaXBfaW5kZXg7CisKKyBvdXQ1OgorIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogIG91dDQ6CiAJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgc2VsZi0+dHhfYnVmZi50cnVlc2l6ZSwKIAkJCSAgc2VsZi0+dHhfYnVmZi5oZWFkLCBzZWxmLT50eF9idWZmX2RtYSk7CkBAIC0zNzksNyArNDg0LDcgQEAKIAlyZWxlYXNlX3JlZ2lvbihzZWxmLT5pby5maXJfYmFzZSwgc2VsZi0+aW8uZmlyX2V4dCk7CiAgb3V0MToKIAlmcmVlX25ldGRldihkZXYpOwotCWRldl9zZWxmW2ldID0gTlVMTDsKKwlkZXZfc2VsZltjaGlwX2luZGV4XSA9IE5VTEw7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzk5LDYgKzUwNCw4IEBACiAKICAgICAgICAgaW9iYXNlID0gc2VsZi0+aW8uZmlyX2Jhc2U7CiAKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzZWxmLT5wbGRldik7CisKIAkvKiBSZW1vdmUgbmV0ZGV2aWNlICovCiAJdW5yZWdpc3Rlcl9uZXRkZXYoc2VsZi0+bmV0ZGV2KTsKIApAQCAtODA2LDYgKzkxMyw0MyBAQAogCXJldHVybiAwOwogfQogCisvKiBQTlAgcHJvYmluZyAqLworc3RhdGljIGludCBuc2NfaXJjY19wbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmlkKQoreworCW1lbXNldCgmcG5wX2luZm8sIDAsIHNpemVvZihjaGlwaW9fdCkpOworCXBucF9pbmZvLmlycSA9IC0xOworCXBucF9pbmZvLmRtYSA9IC0xOworCXBucF9zdWNjZWVkZWQgPSAxOworCisJLyogVGhlcmUgZG9uJ3Qgc2VlbSB0byBiZSBhbnkgd2F5IHRvIGdldCB0aGUgY2ZnX2Jhc2UuCisJICogT24gbXkgYm94LCBjZmdfYmFzZSBpcyBpbiB0aGUgUG5QIGRlc2NyaXB0b3Igb2YgdGhlCisJICogbW90aGVyYm9hcmQuIE9oIHdlbGwuLi4gSmVhbiBJSSAqLworCisJaWYgKHBucF9wb3J0X3ZhbGlkKGRldiwgMCkgJiYKKwkJIShwbnBfcG9ydF9mbGFncyhkZXYsIDApICYgSU9SRVNPVVJDRV9ESVNBQkxFRCkpCisJCXBucF9pbmZvLmZpcl9iYXNlID0gcG5wX3BvcnRfc3RhcnQoZGV2LCAwKTsKKworCWlmIChwbnBfaXJxX3ZhbGlkKGRldiwgMCkgJiYKKwkJIShwbnBfaXJxX2ZsYWdzKGRldiwgMCkgJiBJT1JFU09VUkNFX0RJU0FCTEVEKSkKKwkJcG5wX2luZm8uaXJxID0gcG5wX2lycShkZXYsIDApOworCisJaWYgKHBucF9kbWFfdmFsaWQoZGV2LCAwKSAmJgorCQkhKHBucF9kbWFfZmxhZ3MoZGV2LCAwKSAmIElPUkVTT1VSQ0VfRElTQUJMRUQpKQorCQlwbnBfaW5mby5kbWEgPSBwbnBfZG1hKGRldiwgMCk7CisKKwlJUkRBX0RFQlVHKDAsICIlcygpIDogRnJvbSBQblAsIGZvdW5kIGZpcmJhc2UgMHglMDNYIDsgaXJxICVkIDsgZG1hICVkLlxuIiwKKwkJICAgX19GVU5DVElPTl9fLCBwbnBfaW5mby5maXJfYmFzZSwgcG5wX2luZm8uaXJxLCBwbnBfaW5mby5kbWEpOworCisJaWYoKHBucF9pbmZvLmZpcl9iYXNlID09IDApIHx8CisJICAgKHBucF9pbmZvLmlycSA9PSAtMSkgfHwgKHBucF9pbmZvLmRtYSA9PSAtMSkpIHsKKwkJLyogUmV0dXJuaW5nIGFuIGVycm9yIHdpbGwgZGlzYWJsZSB0aGUgZGV2aWNlLiBZdWNrICEgKi8KKwkJLy9yZXR1cm4gLUVJTlZBTDsKKwkJcG5wX3N1Y2NlZWRlZCA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBGdW5jdGlvbiBuc2NfaXJjY19zZXR1cCAoaW5mbykKICAqCkBAIC0yMTYxLDQ3ICsyMzA1LDg1IEBACiAJcmV0dXJuICZzZWxmLT5zdGF0czsKIH0KIAotc3RhdGljIHZvaWQgbnNjX2lyY2Nfc3VzcGVuZChzdHJ1Y3QgbnNjX2lyY2NfY2IgKnNlbGYpCitzdGF0aWMgaW50IG5zY19pcmNjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JSVJEQV9NRVNTQUdFKCIlcywgU3VzcGVuZGluZ1xuIiwgZHJpdmVyX25hbWUpOworICAgICAJc3RydWN0IG5zY19pcmNjX2NiICpzZWxmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKyAJaW50IGJhbms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyAJaW50IGlvYmFzZSA9IHNlbGYtPmlvLmZpcl9iYXNlOwogCiAJaWYgKHNlbGYtPmlvLnN1c3BlbmRlZCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAotCW5zY19pcmNjX25ldF9jbG9zZShzZWxmLT5uZXRkZXYpOworCUlSREFfREVCVUcoMSwgIiVzLCBTdXNwZW5kaW5nXG4iLCBkcml2ZXJfbmFtZSk7CiAKKwlydG5sX2xvY2soKTsKKwlpZiAobmV0aWZfcnVubmluZyhzZWxmLT5uZXRkZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2goc2VsZi0+bmV0ZGV2KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKKwkJLyogU2F2ZSBjdXJyZW50IGJhbmsgKi8KKwkJYmFuayA9IGluYihpb2Jhc2UrQlNSKTsKKworCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwkJc3dpdGNoX2JhbmsoaW9iYXNlLCBCQU5LMCk7CisJCW91dGIoMCwgaW9iYXNlK0lFUik7CisKKwkJLyogUmVzdG9yZSBiYW5rIHJlZ2lzdGVyICovCisJCW91dGIoYmFuaywgaW9iYXNlK0JTUik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+bG9jaywgZmxhZ3MpOworCQlmcmVlX2lycShzZWxmLT5pby5pcnEsIHNlbGYtPm5ldGRldik7CisJCWRpc2FibGVfZG1hKHNlbGYtPmlvLmRtYSk7CisJfQogCXNlbGYtPmlvLnN1c3BlbmRlZCA9IDE7Ci19CisJcnRubF91bmxvY2soKTsKIAotc3RhdGljIHZvaWQgbnNjX2lyY2Nfd2FrZXVwKHN0cnVjdCBuc2NfaXJjY19jYiAqc2VsZikKLXsKLQlpZiAoIXNlbGYtPmlvLnN1c3BlbmRlZCkKLQkJcmV0dXJuOwotCi0JbnNjX2lyY2Nfc2V0dXAoJnNlbGYtPmlvKTsKLQluc2NfaXJjY19uZXRfb3BlbihzZWxmLT5uZXRkZXYpOwotCQotCUlSREFfTUVTU0FHRSgiJXMsIFdha2luZyB1cFxuIiwgZHJpdmVyX25hbWUpOwotCi0Jc2VsZi0+aW8uc3VzcGVuZGVkID0gMDsKLX0KLQotc3RhdGljIGludCBuc2NfaXJjY19wbXByb2Moc3RydWN0IHBtX2RldiAqZGV2LCBwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSkKLXsKLSAgICAgICAgc3RydWN0IG5zY19pcmNjX2NiICpzZWxmID0gKHN0cnVjdCBuc2NfaXJjY19jYiopIGRldi0+ZGF0YTsKLSAgICAgICAgaWYgKHNlbGYpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJxc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFBNX1NVU1BFTkQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBuc2NfaXJjY19zdXNwZW5kKHNlbGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBQTV9SRVNVTUU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBuc2NfaXJjY193YWtldXAoc2VsZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBuc2NfaXJjY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworIAlzdHJ1Y3QgbnNjX2lyY2NfY2IgKnNlbGYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFzZWxmLT5pby5zdXNwZW5kZWQpCisJCXJldHVybiAwOworCisJSVJEQV9ERUJVRygxLCAiJXMsIFdha2luZyB1cFxuIiwgZHJpdmVyX25hbWUpOworCisJcnRubF9sb2NrKCk7CisJbnNjX2lyY2Nfc2V0dXAoJnNlbGYtPmlvKTsKKwluc2NfaXJjY19pbml0X2RvbmdsZV9pbnRlcmZhY2Uoc2VsZi0+aW8uZmlyX2Jhc2UsIHNlbGYtPmlvLmRvbmdsZV9pZCk7CisKKwlpZiAobmV0aWZfcnVubmluZyhzZWxmLT5uZXRkZXYpKSB7CisJCWlmIChyZXF1ZXN0X2lycShzZWxmLT5pby5pcnEsIG5zY19pcmNjX2ludGVycnVwdCwgMCwKKwkJCQlzZWxmLT5uZXRkZXYtPm5hbWUsIHNlbGYtPm5ldGRldikpIHsKKyAJCSAgICAJSVJEQV9XQVJOSU5HKCIlcywgdW5hYmxlIHRvIGFsbG9jYXRlIGlycT0lZFxuIiwKKwkJCQkgICAgIGRyaXZlcl9uYW1lLCBzZWxmLT5pby5pcnEpOworCisJCQkvKgorCQkJICogRG9uJ3QgZmFpbCByZXN1bWUgcHJvY2VzcywganVzdCBraWxsIHRoaXMKKwkJCSAqIG5ldHdvcmsgaW50ZXJmYWNlCisJCQkgKi8KKwkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHNlbGYtPm5ldGRldik7CisJCX0gZWxzZSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VsZi0+bG9jaywgZmxhZ3MpOworCQkJbnNjX2lyY2NfY2hhbmdlX3NwZWVkKHNlbGYsIHNlbGYtPmlvLnNwZWVkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKKwkJCW5ldGlmX2RldmljZV9hdHRhY2goc2VsZi0+bmV0ZGV2KTsKKwkJfQorCisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKKwkJbnNjX2lyY2NfY2hhbmdlX3NwZWVkKHNlbGYsIDk2MDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CisJfQorCXNlbGYtPmlvLnN1c3BlbmRlZCA9IDA7CisJcnRubF91bmxvY2soKTsKKworIAlyZXR1cm4gMDsKK30KKwogTU9EVUxFX0FVVEhPUigiRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJOU0MgSXJEQSBEZXZpY2UgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmggYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmgKaW5kZXggNmVkZjdlNS4uZGFjZjY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuaApAQCAtMjY5LDcgKzI2OSw3IEBACiAJX191MzIgbmV3X3NwZWVkOwogCWludCBpbmRleDsgICAgICAgICAgICAgICAgIC8qIEluc3RhbmNlIGluZGV4ICovCiAKLSAgICAgICAgc3RydWN0IHBtX2RldiAqZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2OwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9iYW5rKGludCBpb2Jhc2UsIGludCBiYW5rKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZG9uZ2xlLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYwppbmRleCA4ZDIyNTkyLi5kN2UzMmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kb25nbGUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogCkBAIC0yOCw3ICsyOSw3IEBACiAgKi8KIAogc3RhdGljIExJU1RfSEVBRChkb25nbGVfbGlzdCk7CQkJLyogbGlzdCBvZiByZWdpc3RlcmVkIGRvbmdsZSBkcml2ZXJzICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChkb25nbGVfbGlzdF9sb2NrKTsJCS8qIHByb3RlY3RzIHRoZSBsaXN0ICovCitzdGF0aWMgREVGSU5FX01VVEVYKGRvbmdsZV9saXN0X2xvY2spOwkJLyogcHJvdGVjdHMgdGhlIGxpc3QgKi8KIAogaW50IGlyZGFfcmVnaXN0ZXJfZG9uZ2xlKHN0cnVjdCBkb25nbGVfZHJpdmVyICpuZXcpCiB7CkBAIC0zOCwyNSArMzksMjUgQEAKIAlJUkRBX0RFQlVHKDAsICIlcyA6IHJlZ2lzdGVyaW5nIGRvbmdsZSBcIiVzXCIgKCVkKS5cbiIsCiAJCSAgIF9fRlVOQ1RJT05fXywgbmV3LT5kcml2ZXJfbmFtZSwgbmV3LT50eXBlKTsKIAotCWRvd24oJmRvbmdsZV9saXN0X2xvY2spOworCW11dGV4X2xvY2soJmRvbmdsZV9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2goZW50cnksICZkb25nbGVfbGlzdCkgewogCQlkcnYgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgZG9uZ2xlX2RyaXZlciwgZG9uZ2xlX2xpc3QpOwogCQlpZiAobmV3LT50eXBlID09IGRydi0+dHlwZSkgewotCQkJdXAoJmRvbmdsZV9saXN0X2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZkb25nbGVfbGlzdF9sb2NrKTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9CiAJfQogCWxpc3RfYWRkKCZuZXctPmRvbmdsZV9saXN0LCAmZG9uZ2xlX2xpc3QpOwotCXVwKCZkb25nbGVfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRvbmdsZV9saXN0X2xvY2spOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpcmRhX3JlZ2lzdGVyX2RvbmdsZSk7CiAKIGludCBpcmRhX3VucmVnaXN0ZXJfZG9uZ2xlKHN0cnVjdCBkb25nbGVfZHJpdmVyICpkcnYpCiB7Ci0JZG93bigmZG9uZ2xlX2xpc3RfbG9jayk7CisJbXV0ZXhfbG9jaygmZG9uZ2xlX2xpc3RfbG9jayk7CiAJbGlzdF9kZWwoJmRydi0+ZG9uZ2xlX2xpc3QpOwotCXVwKCZkb25nbGVfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRvbmdsZV9saXN0X2xvY2spOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpcmRhX3VucmVnaXN0ZXJfZG9uZ2xlKTsKQEAgLTc1LDcgKzc2LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAkKIAkvKiBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgZG9uZ2xlcyAqLwotCWRvd24oJmRvbmdsZV9saXN0X2xvY2spOworCW11dGV4X2xvY2soJmRvbmdsZV9saXN0X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmRvbmdsZV9saXN0KSB7CiAJCWRydiA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCBkb25nbGVfZHJpdmVyLCBkb25nbGVfbGlzdCk7CkBAIC0xMDksMTQgKzExMCwxNCBAQAogCWlmICghZHJ2LT5vcGVuICB8fCAgKGVycj1kcnYtPm9wZW4oZGV2KSkhPTApCiAJCWdvdG8gb3V0X3JlamVjdDsJCS8qIGZhaWxlZCB0byBvcGVuIGRyaXZlciAqLwogCi0JdXAoJmRvbmdsZV9saXN0X2xvY2spOworCW11dGV4X3VubG9jaygmZG9uZ2xlX2xpc3RfbG9jayk7CiAJcmV0dXJuIDA7CiAKIG91dF9yZWplY3Q6CiAJZGV2LT5kb25nbGVfZHJ2ID0gTlVMTDsKIAltb2R1bGVfcHV0KGRydi0+b3duZXIpOwogb3V0X3VubG9jazoKLQl1cCgmZG9uZ2xlX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkb25nbGVfbGlzdF9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3RvaW0zMjMyLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS90b2ltMzIzMi1zaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFhOWIwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdG9pbTMyMzItc2lyLmMKQEAgLTAsMCArMSwzNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZTogICAgICB0b2ltMzIzMi1zaXIuYworICogVmVyc2lvbjogICAgICAgMS4wCisgKiBEZXNjcmlwdGlvbjogICBJbXBsZW1lbnRhdGlvbiBvZiBkb25nbGVzIGJhc2VkIG9uIHRoZSBWaXNoYXkvVGVtaWMKKyAqIAkJICBUT0lNMzIzMiBTSVIgRW5kZWMgY2hpcHNldC4gQ3VycmVudGx5IG9ubHkgdGhlCisgKiAJCSAgSVJXYXZlIElSMzIwU1QtMiBpcyB0ZXN0ZWQsIGFsdGhvdWdoIGl0IHNob3VsZCB3b3JrCisgKiAJCSAgd2l0aCBhbnkgVE9JTTMyMzIgb3IgVE9JTTQyMzIgY2hpcHNldCBiYXNlZCBSUzIzMgorICogCQkgIGRvbmdsZSB3aXRoIG1pbmltYWwgbW9kaWZpY2F0aW9uLgorICogCQkgIEJhc2VkIGhlYXZpbHkgb24gdGhlIFRla3JhbSBkcml2ZXIgKHRla3JhbS5jKSwKKyAqIAkJICB3aXRoIHRoYW5rcyB0byBEYWcgQnJhdHRsaSBhbmQgTWFydGluIERpZWhsLgorICogU3RhdHVzOiAgICAgICAgRXhwZXJpbWVudGFsLgorICogQXV0aG9yOiAgICAgICAgRGF2aWQgQmFzZGVuIDxkYXZpZGItaXJkYUByY3B0LnRvPgorICogQ3JlYXRlZCBhdDogICAgVGh1IEZlYiAwOSAyMzo0NzozMiAyMDA2CisgKgorICogICAgIENvcHlyaWdodCAoYykgMjAwNiBEYXZpZCBCYXNkZW4uCisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGksCisgKiAgICAgQ29weXJpZ2h0IChjKSAyMDAyIE1hcnRpbiBEaWVobCwKKyAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCisgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoaXMgZHJpdmVyIGhhcyBjdXJyZW50bHkgb25seSBiZWVuIHRlc3RlZCBvbiB0aGUgSVJXYXZlIElSMzIwU1QtMgorICoKKyAqIFBST1RPQ09MOgorICoKKyAqIFRoZSBwcm90b2NvbCBmb3IgdGFsa2luZyB0byB0aGUgVE9JTTMyMzIgaXMgcXVpdGUgZWFzeSwgYW5kIGlzCisgKiBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCBSUzIzMiB3aXRoIG9ubHkgbGV2ZWwgY29udmVydG9ycy4gVGhlCisgKiBCUi9+RCBsaW5lIG9uIHRoZSBjaGlwIGlzIGJyb3VnaHQgaGlnaCB0byBzaWduYWwgJ2NvbW1hbmQgbW9kZScsCisgKiB3aGVyZSBhIGNvbW1hbmQgYnl0ZSBpcyBzZW50IHRvIHNlbGVjdCB0aGUgYmF1ZHJhdGUgb2YgdGhlIFJTMjMyCisgKiBpbnRlcmZhY2UgYW5kIHRoZSBwdWxzZSBsZW5ndGggb2YgdGhlIElSREEgb3V0cHV0LiBXaGVuIEJSL35ECisgKiBpcyBicm91Z2h0IGxvdywgdGhlIGRvbmdsZSB0aGVuIGNoYW5nZXMgdG8gdGhlIHNlbGVjdGVkIGJhdWRyYXRlLAorICogYW5kIHRoZSBSUzIzMiBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgZGF0YSB1bnRpbCBCUi9+RCBpcyBicm91Z2h0CisgKiBoaWdoIGFnYWluLiBUaGUgaW5pdGlhbCBzcGVlZCBmb3IgdGhlIFRPSU14MzIzIGFmdGVyIFJFU0VUIGlzCisgKiA5NjAwIGJhdWQuICBUaGUgYmF1ZHJhdGUgZm9yIGNvbW1hbmQtbW9kZSBpcyB0aGUgbGFzdCBzZWxlY3RlZAorICogYmF1ZC1yYXRlLCBvciA5NjAwIGFmdGVyIGEgUkVTRVQuCisgKgorICogVGhlICBkb25nbGUgSSBoYXZlIChiZWxvdykgYWRkcyBzb21lIGV4dHJhIGhhcmR3YXJlIG9uIHRoZSBmcm9udCBlbmQsCisgKiBidXQgdGhpcyBpcyBtb3N0bHkgZGlyZWN0ZWQgdG93YXJkcyBwYXJpYXNpdGljIHBvd2VyIGZyb20gdGhlIFJTMjMyCisgKiBsaW5lIHJhdGhlciB0aGFuIGNoYW5naW5nIHZlcnkgbXVjaCBhYm91dCBob3cgdG8gY29tbXVuaWNhdGUgd2l0aAorICogdGhlIFRPSU0zMjMyLgorICoKKyAqIFRoZSBwcm90b2NvbCB0byB0YWxrIHRvIHRoZSBUT0lNNDIzMiBjaGlwc2V0IHNlZW1zIHRvIGJlIGFsbW9zdAorICogaWRlbnRpY2FsIHRvIHRoZSBUT0lNMzIzMiAoYW5kIHRoZSA0MjMyIGRhdGFzaGVldCBpcyBtb3JlIGRldGFpbGVkKQorICogc28gdGhpcyBjb2RlIHdpbGwgcHJvYmFibHkgd29yayBvbiB0aGF0IGFzIHdlbGwsIGFsdGhvdWdoIEkgaGF2ZW4ndAorICogdGVzdGVkIGl0IG9uIHRoYXQgaGFyZHdhcmUuCisgKgorICogVGFyZ2V0IGRvbmdsZSB2YXJpYXRpb25zIHRoYXQgbWlnaHQgYmUgY29tbW9uOgorICoKKyAqIERUUiBhbmQgUlRTIGZ1bmN0aW9uOgorICogICBUaGUgZGF0YSBzaGVldCBmb3IgdGhlIDQyMzIgaGFzIGEgc2FtcGxlIGltcGxlbWVudGF0aW9uIHRoYXQgaG9va3MgdGhlCisgKiAgIERUUiBhbmQgUlRTIGxpbmVzIHRvIHRoZSBSRVNFVCBhbmQgQmF1ZFJhdGUvfkRhdGEgbGluZXMgb2YgdGhlCisgKiAgIGNoaXAgKHRocm91Z2ggbGluZS1jb252ZXJ0ZXJzKS4gR2l2ZW4gYm90aCBEVFIgYW5kIFJUUyB3b3VsZCBoYXZlIHRvCisgKiAgIGJlIGhlbGQgbG93IGluIG5vcm1hbCBvcGVyYXRpb24sIGFuZCB0aGUgVE9JTXgyMzIgcmVxdWlyZXMgKzVWIHRvCisgKiAgIHNpZ25hbCBncm91bmQsIG1vc3QgZG9uZ2xlIGRlc2lnbmVycyB3b3VsZCBhbG1vc3QgY2VydGFpbmx5IGNob29zZQorICogICBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGtlcHQgYXQgbGVhc3Qgb25lIG9mIERUUiBvciBSVFMgaGlnaCBpbgorICogICBub3JtYWwgb3BlcmF0aW9uIHRvIHByb3ZpZGUgcG93ZXIgdG8gdGhlIGRvbmdsZSwgYnV0IHdpbGwgbGlrZWx5CisgKiAgIHZhcnkgYmV0d2VlbiBkZXNpZ25zLgorICoKKyAqIFVzZXIgc3BlY2lmaWVkIGNvbW1hbmQgYml0czoKKyAqICBUaGVyZSBhcmUgdHdvIHVzZXItY29udHJvbGxhYmxlIG91dHB1dCBsaW5lcyBmcm9tIHRoZSBUT0lNeDIzMiB0aGF0CisgKiAgY2FuIGJlIHNldCBsb3cgb3IgaGlnaCBieSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGluIHRoZQorICogIGhpZ2gtbmliYmxlIG9mIHRoZSBjb21tYW5kIGJ5dGUgKHdoZW4gc2V0dGluZyBzcGVlZCBhbmQgcHVsc2UgbGVuZ3RoKS4KKyAqICBUaGVzZSBtaWdodCBiZSB1c2VkIHRvIHN3aXRjaCBvbiBhbmQgb2ZmIGFkZGVkIGhhcmR3YXJlIG9yIGV4dHJhCisgKiAgZG9uZ2xlIGZlYXR1cmVzLgorICoKKyAqCisgKiBUYXJnZXQgaGFyZHdhcmU6IElSV2F2ZSBJUjMyMFNULTIKKyAqCisgKiAJVGhlIElSV2F2ZSBJUjMyMFNULTIgaXMgYSBzaW1wbGUgZG9uZ2xlIGJhc2VkIG9uIHRoZSBWaXNoYXkvVGVtaWMKKyAqIAlUT0lNMzIzMiBTSVIgRW5kZWMgYW5kIHRoZSBWaXNoYXkvVGVtaWMgVEZEUzQ1MDAgU0lSIElSREEgdHJhbnNjaWV2ZXIuCisgKiAJSXQgdXNlcyBhIGhleCBpbnZlcnRlciBhbmQgc29tZSBkaXNjcmV0ZSBjb21wb25lbnRzIHRvIGJ1ZmZlciBhbmQKKyAqIAlsaW5lIGNvbnZlcnQgdGhlIFJTMjMyIGRvd24gdG8gNVYuCisgKgorICogCVRoZSBkb25nbGUgaXMgcG93ZXJlZCB0aHJvdWdoIGEgdm9sdGFnZSByZWd1bGF0b3IsIGZlZCBieSBhIGxhcmdlCisgKiAJY2FwYWNpdG9yLiBUbyBzd2l0Y2ggdGhlIGRvbmdsZSBvbiwgRFRSIGlzIGJyb3VnaHQgaGlnaCB0byBjaGFyZ2UKKyAqIAl0aGUgY2FwYWNpdG9yIGFuZCBkcml2ZSB0aGUgdm9sdGFnZSByZWd1bGF0b3IuIERUUiBpc24ndCBhc3NvY2lhdGVkCisgKiAJd2l0aCBhbnkgY29udHJvbCBsaW5lcyBvbiB0aGUgVE9JTTMyMzIuIFBhcmlzaXRpYyBwb3dlciBpcyBhbHNvIHRha2VuCisgKiAJZnJvbSB0aGUgUlRTLCBURCBhbmQgUkQgbGluZXMgd2hlbiBicm91Z2h0IGhpZ2gsIGJ1dCB0aHJvdWdoIHJlc2lzdG9ycy4KKyAqIAlXaGVuIERUUiBpcyBsb3csIHRoZSBjaXJjdWl0IG1pZ2h0IGxvc2UgcG93ZXIgZXZlbiB3aXRoIFJUUyBoaWdoLgorICoKKyAqIAlSVFMgaXMgaW52ZXJ0ZWQgYW5kIGF0dGFjaGVkIHRvIHRoZSBCUi9+RCBpbnB1dCBwaW4uIFdoZW4gUlRTCisgKiAJaXMgaGlnaCwgQlIvfkQgaXMgbG93LCBhbmQgdGhlIFRPSU0zMjMyIGlzIGluIHRoZSBub3JtYWwgJ2RhdGEnIG1vZGUuCisgKiAJUlRTIGlzIGJyb3VnaHQgbG93LCBCUi9+RCBpcyBoaWdoLCBhbmQgdGhlIFRPSU0zMjMyIGlzIGluICdjb21tYW5kCisgKiAJbW9kZScuCisgKgorICogCUZvciBzb21lIHVua25vd24gcmVhc29uLCB0aGUgUkVTRVQgbGluZSBpc24ndCBhY3R1YWxseSBjb25uZWN0ZWQKKyAqIAl0byBhbnl0aGluZy4gVGhpcyBtZWFucyB0byByZXNldCB0aGUgZG9uZ2xlIHRvIGdldCBpdCB0byBhIGtub3duCisgKiAJc3RhdGUgKDk2MDAgYmF1ZCkgeW91IG11c3QgZHJvcCBEVFIgYW5kIFJUUyBsb3csIHdhaXQgZm9yIHRoZSBwb3dlcgorICogCWNhcGFjaXRvciB0byBkaXNjaGFyZ2UsIGFuZCB0aGVuIGJyaW5nIERUUiAoYW5kIFJUUyBmb3IgZGF0YSBtb2RlKQorICogCWhpZ2ggYWdhaW4sIGFuZCB3YWl0IGZvciB0aGUgY2FwYWNpdG9yIHRvIGNoYXJnZSwgdGhlIHBvd2VyIHN1cHBseQorICogCXRvIHN0YWJpbGlzZSwgYW5kIHRoZSBvc2NpbGxhdG9yIGNsb2NrIHRvIHN0YWJpbGlzZS4KKyAqCisgKiAJRm9ydHVuYXRlbHksIGlmIHRoZSBjdXJyZW50IGJhdWRyYXRlIGlzIGtub3duLCB0aGUgY2hpcHNldCBjYW4KKyAqIAllYXNpbHkgY2hhbmdlIHNwZWVkIGJ5IGVudGVyaW5nIGNvbW1hbmQgbW9kZSB3aXRob3V0IGhhdmluZyB0bworICogCXJlc2V0IHRoZSBkb25nbGUgZmlyc3QuCisgKgorICogCU1ham9yIENvbXBvbmVudHM6CisgKgorICogCS0gVmlzaGF5L1RlbWljIFRPSU0zMjMyIFNJUiBFbmRlYyB0byBjaGFuZ2UgUlMyMzIgcHVsc2UgdGltaW5ncworICogCSAgdG8gSVJEQSBwdWxzZSB0aW1pbmdzCisgKiAJLSAzLjY4NjRNSHogY3J5c3RhbCB0byBkcml2ZSBUT0lNMzIzMiBjbG9jayBvc2NpbGxhdG9yCisgKiAJLSBETTc0bFMwNE0gSW52ZXJ0aW5nIEhleCBsaW5lIGJ1ZmZlciBmb3IgUlMyMzIgaW5wdXQgYnVmZmVyaW5nCisgKiAJICBhbmQgbGV2ZWwgY29udmVyc2lvbgorICogCS0gUEoyOTUxQUMgMTUwbUEgdm9sdGFnZSByZWd1bGF0b3IKKyAqIAktIFZpc2hheS9UZW1pYyBURkRTNDUwMAlTSVIgSVJEQSBmcm9udC1lbmQgdHJhbnNjZWl2ZXIKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgorCisjaW5jbHVkZSAic2lyLWRldi5oIgorCitzdGF0aWMgaW50IHRvaW0zMjMyZGVsYXkgPSAxNTA7CS8qIGRlZmF1bHQgaXMgMTUwIG1zICovCittb2R1bGVfcGFyYW0odG9pbTMyMzJkZWxheSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModG9pbTMyMzJkZWxheSwgInRvaW0zMjMyIGRvbmdsZSB3cml0ZSBjb21wbGV0ZSBkZWxheSIpOworCisjaWYgMAorc3RhdGljIGludCB0b2ltMzIzMmZsaXBkdHIgPSAwOwkvKiBkZWZhdWx0IGlzIERUUiBoaWdoIHRvIHJlc2V0ICovCittb2R1bGVfcGFyYW0odG9pbTMyMzJmbGlwZHRyLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0b2ltMzIzMmZsaXBkdHIsICJ0b2ltMzIzMiBkb25nbGUgaW52ZXJ0IERUUiAoUmVzZXQpIik7CisKK3N0YXRpYyBpbnQgdG9pbTMyMzJmbGlwcnRzID0gMDsJLyogZGVmYXVsdCBpcyBSVFMgaGlnaCBmb3IgYmF1ZCBjaGFuZ2UgKi8KK21vZHVsZV9wYXJhbSh0b2ltMzIzMmZsaXB0cnMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRvaW0zMjMyZmxpcHJ0cywgInRvaW0zMjMyIGRvbmdsZSBpbnZlcnQgUlRTIChCUi9EKSIpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgdG9pbTMyMzJfb3BlbihzdHJ1Y3Qgc2lyX2RldiAqKTsKK3N0YXRpYyBpbnQgdG9pbTMyMzJfY2xvc2Uoc3RydWN0IHNpcl9kZXYgKik7CitzdGF0aWMgaW50IHRvaW0zMjMyX2NoYW5nZV9zcGVlZChzdHJ1Y3Qgc2lyX2RldiAqLCB1bnNpZ25lZCk7CitzdGF0aWMgaW50IHRvaW0zMjMyX3Jlc2V0KHN0cnVjdCBzaXJfZGV2ICopOworCisjZGVmaW5lIFRPSU0zMjMyXzExNTIwMCAweDAwCisjZGVmaW5lIFRPSU0zMjMyXzU3NjAwICAweDAxCisjZGVmaW5lIFRPSU0zMjMyXzM4NDAwICAweDAyCisjZGVmaW5lIFRPSU0zMjMyXzE5MjAwICAweDAzCisjZGVmaW5lIFRPSU0zMjMyXzk2MDAgICAweDA2CisjZGVmaW5lIFRPSU0zMjMyXzI0MDAgICAweDBBCisKKyNkZWZpbmUgVE9JTTMyMzJfUFcgICAgIDB4MTAgLyogUHVsc2Ugc2VsZWN0IGJpdCAqLworCitzdGF0aWMgc3RydWN0IGRvbmdsZV9kcml2ZXIgdG9pbTMyMzIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZQk9ICJWaXNoYXkgVE9JTTMyMzIiLAorCS50eXBlCQk9IElSREFfVE9JTTMyMzJfRE9OR0xFLAorCS5vcGVuCQk9IHRvaW0zMjMyX29wZW4sCisJLmNsb3NlCQk9IHRvaW0zMjMyX2Nsb3NlLAorCS5yZXNldAkJPSB0b2ltMzIzMl9yZXNldCwKKwkuc2V0X3NwZWVkCT0gdG9pbTMyMzJfY2hhbmdlX3NwZWVkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdG9pbTMyMzJfc2lyX2luaXQodm9pZCkKK3sKKwlpZiAodG9pbTMyMzJkZWxheSA8IDEgIHx8ICB0b2ltMzIzMmRlbGF5ID4gNTAwKQorCQl0b2ltMzIzMmRlbGF5ID0gMjAwOworCUlSREFfREVCVUcoMSwgIiVzIC0gdXNpbmcgJWQgbXMgZGVsYXlcbiIsCisJCXRvaW0zMjMyLmRyaXZlcl9uYW1lLCB0b2ltMzIzMmRlbGF5KTsKKwlyZXR1cm4gaXJkYV9yZWdpc3Rlcl9kb25nbGUoJnRvaW0zMjMyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHRvaW0zMjMyX3Npcl9jbGVhbnVwKHZvaWQpCit7CisJaXJkYV91bnJlZ2lzdGVyX2RvbmdsZSgmdG9pbTMyMzIpOworfQorCitzdGF0aWMgaW50IHRvaW0zMjMyX29wZW4oc3RydWN0IHNpcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcW9zX2luZm8gKnFvcyA9ICZkZXYtPnFvczsKKworCUlSREFfREVCVUcoMiwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBQdWxsIHRoZSBsaW5lcyBoaWdoIHRvIHN0YXJ0IHdpdGguCisJICoKKwkgKiBGb3IgdGhlIElSMzIwU1QtMiwgd2UgbmVlZCB0byBjaGFyZ2UgdGhlIG1haW4gc3VwcGx5IGNhcGFjaXRvciB0bworCSAqIHN3aXRjaCB0aGUgZGV2aWNlIG9uLiBXZSBrZWVwIERUUiBoaWdoIHRocm91Z2hvdXQgdG8gZG8gdGhpcy4KKwkgKiBXaGVuIFJUUywgVEQgYW5kIFJEIGFyZSBoaWdoLCB0aGV5IHdpbGwgYWxzbyB0cmlja2xlLWNoYXJnZSB0aGUKKwkgKiBjYXAuIFJUUyBpcyBoaWdoIGZvciBkYXRhIHRyYW5zbWlzc2lvbiwgYW5kIGxvdyBmb3IgYmF1ZCByYXRlIHNlbGVjdC4KKwkgKiAJLS0gREdCCisJICovCisJc2lyZGV2X3NldF9kdHJfcnRzKGRldiwgVFJVRSwgVFJVRSk7CisKKwkvKiBUaGUgVE9JMzIzMiBzdXBwb3J0cyBtYW55IHNwZWVkcyBiZXR3ZWVuIDEyMDBicHMgYW5kIDExNTAwMGJwcy4KKwkgKiBXZSByZWFsbHkgb25seSBjYXJlIGFib3V0IHRob3NlIHN1cHBvcnRlZCBieSB0aGUgSVJEQSBzcGVjLCBidXQKKwkgKiAzODQwMCBzZWVtcyB0byBiZSBpbXBsZW1lbnRlZCBpbiBtYW55IHBsYWNlcyAqLworCXFvcy0+YmF1ZF9yYXRlLmJpdHMgJj0gSVJfMjQwMHxJUl85NjAwfElSXzE5MjAwfElSXzM4NDAwfElSXzU3NjAwfElSXzExNTIwMDsKKworCS8qIEZyb20gdGhlIHRla3JhbSBkcml2ZXIuIE5vdCBzdXJlIHdoYXQgYSByZWFzb25hYmxlIHZhbHVlIGlzIC0tIERHQiAqLworCXFvcy0+bWluX3R1cm5fdGltZS5iaXRzID0gMHgwMTsgLyogTmVlZHMgYXQgbGVhc3QgMTAgbXMgKi8KKwlpcmRhX3Fvc19iaXRzX3RvX3ZhbHVlKHFvcyk7CisKKwkvKiBpcmRhIHRocmVhZCB3YWl0cyA1MCBtc2VjIGZvciBwb3dlciBzZXR0bGluZyAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9pbTMyMzJfY2xvc2Uoc3RydWN0IHNpcl9kZXYgKmRldikKK3sKKwlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogUG93ZXIgb2ZmIGRvbmdsZSAqLworCXNpcmRldl9zZXRfZHRyX3J0cyhkZXYsIEZBTFNFLCBGQUxTRSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZ1bmN0aW9uIHRvaW0zMjMyY2hhbmdlX3NwZWVkIChkZXYsIHN0YXRlLCBzcGVlZCkKKyAqCisgKiAgICBTZXQgdGhlIHNwZWVkIGZvciB0aGUgVE9JTTMyMzIgYmFzZWQgZG9uZ2xlLiBXYXJuaW5nLCB0aGlzCisgKiAgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgcHJvY2VzcyBjb250ZXh0IQorICoKKyAqICAgIEFsZ29yaXRobQorICogICAgMS4ga2VlcCBEVFIgaGlnaCBidXQgY2xlYXIgUlRTIHRvIGJyaW5nIGludG8gYmF1ZCBwcm9ncmFtbWluZyBtb2RlCisgKiAgICAyLiB3YWl0IGF0IGxlYXN0IDd1cyB0byBlbnRlciBwcm9ncmFtbWluZyBtb2RlCisgKiAgICAzLiBzZW5kIGNvbnRyb2wgd29yZCB0byBzZXQgYmF1ZCByYXRlIGFuZCB0aW1pbmcKKyAqICAgIDQuIHdhaXQgYXQgbGVhc3QgMXVzCisgKiAgICA1LiBicmluZyBSVFMgaGlnaCB0byBlbnRlciBEQVRBIG1vZGUgKFJTMjMyIGlzIHBhc3NlZCB0aHJvdWdoIHRvIHRyYW5zY2VpdmVyKQorICogICAgNi4gc2hvdWxkIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5IChhbHRob3VnaCBwcm9iYWJseSB3b3J0aCB3YWl0aW5nKQorICovCisKKyNkZWZpbmUgVE9JTTMyMzJfU1RBVEVfV0FJVF9TUEVFRAkoU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRCArIDEpCisKK3N0YXRpYyBpbnQgdG9pbTMyMzJfY2hhbmdlX3NwZWVkKHN0cnVjdCBzaXJfZGV2ICpkZXYsIHVuc2lnbmVkIHNwZWVkKQoreworCXVuc2lnbmVkIHN0YXRlID0gZGV2LT5mc20uc3Vic3RhdGU7CisJdW5zaWduZWQgZGVsYXkgPSAwOworCXU4IGJ5dGU7CisJc3RhdGljIGludCByZXQgPSAwOworCisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaChzdGF0ZSkgeworCWNhc2UgU0lSREVWX1NUQVRFX0RPTkdMRV9TUEVFRDoKKworCQkvKiBGaWd1cmUgb3V0IHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQgYXMgYSBjb250cm9sIGJ5dGUgKi8KKwkJc3dpdGNoIChzcGVlZCkgeworCQljYXNlIDI0MDA6CisJCQlieXRlID0gVE9JTTMyMzJfUFd8VE9JTTMyMzJfMjQwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3BlZWQgPSA5NjAwOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCS8qIGZhbGwgdGhydSAqLworCQljYXNlIDk2MDA6CisJCQlieXRlID0gVE9JTTMyMzJfUFd8VE9JTTMyMzJfOTYwMDsKKwkJCWJyZWFrOworCQljYXNlIDE5MjAwOgorCQkJYnl0ZSA9IFRPSU0zMjMyX1BXfFRPSU0zMjMyXzE5MjAwOworCQkJYnJlYWs7CisJCWNhc2UgMzg0MDA6CisJCQlieXRlID0gVE9JTTMyMzJfUFd8VE9JTTMyMzJfMzg0MDA7CisJCQlicmVhazsKKwkJY2FzZSA1NzYwMDoKKwkJCWJ5dGUgPSBUT0lNMzIzMl9QV3xUT0lNMzIzMl81NzYwMDsKKwkJCWJyZWFrOworCQljYXNlIDExNTIwMDoKKwkJCWJ5dGUgPSBUT0lNMzIzMl8xMTUyMDA7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFNldCBEVFIsIENsZWFyIFJUUzogR28gaW50byBiYXVkIHByb2dyYW1taW5nIG1vZGUgKi8KKwkJc2lyZGV2X3NldF9kdHJfcnRzKGRldiwgVFJVRSwgRkFMU0UpOworCisJCS8qIFdhaXQgYXQgbGVhc3QgN3VzICovCisJCXVkZWxheSgxNCk7CisKKwkJLyogV3JpdGUgY29udHJvbCBieXRlICovCisJCXNpcmRldl9yYXdfd3JpdGUoZGV2LCAmYnl0ZSwgMSk7CisKKwkJZGV2LT5zcGVlZCA9IHNwZWVkOworCisJCXN0YXRlID0gVE9JTTMyMzJfU1RBVEVfV0FJVF9TUEVFRDsKKwkJZGVsYXkgPSB0b2ltMzIzMmRlbGF5OworCQlicmVhazsKKworCWNhc2UgVE9JTTMyMzJfU1RBVEVfV0FJVF9TUEVFRDoKKwkJLyogSGF2ZSB0cmFuc21pdHRlZCBjb250cm9sIGJ5dGUgKiBXYWl0IGZvciAnYXQgbGVhc3QgMXVzJyAqLworCQl1ZGVsYXkoMTQpOworCisJCS8qIFNldCBEVFIsIFNldCBSVFM6IEdvIGludG8gbm9ybWFsIGRhdGEgbW9kZSAqLworCQlzaXJkZXZfc2V0X2R0cl9ydHMoZGV2LCBUUlVFLCBUUlVFKTsKKworCQkvKiBXYWl0IChUT0RPOiBjaGVjayB0aGlzIGlzIG5lZWRlZCkgKi8KKwkJdWRlbGF5KDUwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIiVzIC0gdW5kZWZpbmVkIHN0YXRlICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXRlKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJZGV2LT5mc20uc3Vic3RhdGUgPSBzdGF0ZTsKKwlyZXR1cm4gKGRlbGF5ID4gMCkgPyBkZWxheSA6IHJldDsKK30KKworLyoKKyAqIEZ1bmN0aW9uIHRvaW0zMjMycmVzZXQgKGRyaXZlcikKKyAqCisgKiAgICAgIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSB0b2ltMzIzMiBkb25nbGUuIFdhcm5pbmcsIHRoaXMgZnVuY3Rpb24KKyAqICAgICAgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHByb2Nlc3MgY29udGV4dCEhCisgKgorICogV2hhdCB3ZSBzaG91bGQgZG8gaXM6CisgKiAJMC4gUHVsbCBSRVNFVCBoaWdoCisgKiAJMS4gV2FpdCBmb3IgYXQgbGVhc3QgN3VzCisgKiAJMi4gUHVsbCBSRVNFVCBsb3cKKyAqIAkzLiBXYWl0IGZvciBhdCBsZWFzdCA3dXMKKyAqIAk0LiBQdWxsIEJSL35EIGhpZ2gKKyAqIAk1LiBXYWl0IGZvciBhdCBsZWFzdCA3dXMKKyAqIAk2LiBTZW5kIGNvbnRyb2wgYnl0ZSB0byBzZXQgYmF1ZCByYXRlCisgKiAJNy4gV2FpdCBhdCBsZWFzdCAxdXMgYWZ0ZXIgc3RvcCBiaXQKKyAqIAk4LiBQdWxsIEJSL35EIGxvdworICogCTkuIFNob3VsZCB0aGVuIGJlIGluIGRhdGEgbW9kZQorICoKKyAqIEJlY2F1c2UgdGhlIElSMzIwU1QtMiBkb2Vzbid0IGhhdmUgdGhlIFJFU0VUIGxpbmUgY29ubmVjdGVkIGZvciBzb21lIHJlYXNvbiwKKyAqIHdlJ2xsIGhhdmUgdG8gZG8gc29tZXRoaW5nIGVsc2UuCisgKgorICogVGhlIGRlZmF1bHQgc3BlZWQgYWZ0ZXIgYSBSRVNFVCBpcyA5NjAwLCBzbyBsZXRzIHRyeSBqdXN0IGJyaW5naW5nIGl0IHVwIGluCisgKiBkYXRhIG1vZGUgYWZ0ZXIgc3dpdGNoaW5nIGl0IG9mZiwgd2FpdGluZyBmb3IgdGhlIHN1cHBseSBjYXBhY2l0b3IgdG8KKyAqIGRpc2NoYXJnZSwgYW5kIHRoZW4gc3dpdGNoIGl0IGJhY2sgb24uIFRoaXMgaXNuJ3QgYWN0dWFsbHkgcHVsbGluZyBSRVNFVAorICogaGlnaCwgYnV0IGl0IHNlZW1zIHRvIGhhdmUgdGhlIHNhbWUgZWZmZWN0LgorICoKKyAqIFRoaXMgYmVoYXZpb3VyIHdpbGwgcHJvYmFibHkgd29yayBvbiBkb25nbGVzIHRoYXQgaGF2ZSB0aGUgUkVTRVQgbGluZSBjb25uZWN0ZWQsCisgKiBidXQgaWYgbm90LCBhZGQgYSBmbGFnIGZvciB0aGUgSVIzMjBTVC0yLCBhbmQgaW1wbG1lbnQgdGhlIGFib3ZlLWxpc3RlZCBwcm9wZXIKKyAqIGJlaGF2aW91ci4KKyAqCisgKiBSVFMgaXMgaW52ZXJ0ZWQgYW5kIHRoZW4gZmVkIHRvIEJSL35ELCBzbyB0byBwdXQgaXQgaW4gcHJvZ3JhbW1pbmcgbW9kZSwgd2UKKyAqIG5lZWQgdG8gaGF2ZSBwdWxsIFJUUyBsb3cKKyAqLworCitzdGF0aWMgaW50IHRvaW0zMjMyX3Jlc2V0KHN0cnVjdCBzaXJfZGV2ICpkZXYpCit7CisJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIFN3aXRjaCBvZmYgYm90aCBEVFIgYW5kIFJUUyB0byBzd2l0Y2ggb2ZmIGRvbmdsZSAqLworCXNpcmRldl9zZXRfZHRyX3J0cyhkZXYsIEZBTFNFLCBGQUxTRSk7CisKKwkvKiBTaG91bGQgc2xlZXAgYSB3aGlsZS4gVGhpcyBtaWdodCBiZSBldmlsIGRvaW5nIGl0IHRoaXMgd2F5LiovCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcyg1MCkpOworCisJLyogU2V0IERUUiwgU2V0IFJUUyAoZGF0YSBtb2RlKSAqLworCXNpcmRldl9zZXRfZHRyX3J0cyhkZXYsIFRSVUUsIFRSVUUpOworCisJLyogV2FpdCBhdCBsZWFzdCAxMCBtcyBmb3IgcG93ZXIgdG8gc3RhYmlsaXplIGFnYWluICovCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxMCkpOworCisJLyogU3BlZWQgc2hvdWxkIG5vdyBiZSA5NjAwICovCisJZGV2LT5zcGVlZCA9IDk2MDA7CisKKwlyZXR1cm4gMDsKK30KKworTU9EVUxFX0FVVEhPUigiRGF2aWQgQmFzZGVuIDxkYXZpZGItbGludXhAcmNwdC50bz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVmlzaGF5L1RlbWljIFRPSU0zMjMyIGJhc2VkIGRvbmdsZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygiaXJkYS1kb25nbGUtMTIiKTsgLyogSVJEQV9UT0lNMzIzMl9ET05HTEUgKi8KKworbW9kdWxlX2luaXQodG9pbTMyMzJfc2lyX2luaXQpOworbW9kdWxlX2V4aXQodG9pbTMyMzJfc2lyX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCBhOWY0OWYwLi45N2E0OWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtMTg4Nyw3ICsxODg3LDcgQEAKIAkJdmxzaV9wcm9jX3Jvb3QtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCi0JcmV0ID0gcGNpX21vZHVsZV9pbml0KCZ2bHNpX2lyZGFfZHJpdmVyKTsKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ2bHNpX2lyZGFfZHJpdmVyKTsKIAogCWlmIChyZXQgJiYgdmxzaV9wcm9jX3Jvb3QpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRElSLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvZW5wMjYxMS5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9lbnAyNjExLmMKaW5kZXggZDgyNjUxYS4uNmY3ZGNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhwMjAwMC9lbnAyNjExLmMKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9lbnAyNjExLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3VlbmdpbmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdWVuZ2luZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAiaXhwZGV2LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwppbmRleCAwOWYwM2Y0Li43N2YxMDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3VlbmdpbmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdWVuZ2luZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAiaXhwMjQwMF9yeC51Y29kZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xhbmNlLmMgYi9kcml2ZXJzL25ldC9sYW5jZS5jCmluZGV4IGQxZDcxNGYuLmJiNWFkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvbGFuY2UuYwpAQCAtNDY0LDIwICs0NjQsMjUgQEAKIAlzdGF0aWMgaW50IGRpZF92ZXJzaW9uOwkJCS8qIEFscmVhZHkgcHJpbnRlZCB2ZXJzaW9uIGluZm8uICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gLUVOT01FTTsKKwl2b2lkIF9faW9tZW0gKmJpb3M7CiAKIAkvKiBGaXJzdCB3ZSBsb29rIGZvciBzcGVjaWFsIGNhc2VzLgogCSAgIENoZWNrIGZvciBIUCdzIG9uLWJvYXJkIGV0aGVybmV0IGJ5IGxvb2tpbmcgZm9yICdIUCcgaW4gdGhlIEJJT1MuCiAJICAgVGhlcmUgYXJlIHR3byBIUCB2ZXJzaW9ucywgY2hlY2sgdGhlIEJJT1MgZm9yIHRoZSBjb25maWd1cmF0aW9uIHBvcnQuCiAJICAgVGhpcyBtZXRob2QgcHJvdmlkZWQgYnkgTC4gSnVsbGlhcmQsIExhdXJlbnRfSnVsbGlhcmRAZ3Jlbm9ibGUuaHAuY29tLgogCSAgICovCi0JaWYgKGlzYV9yZWFkdygweDAwMGYwMTAyKSA9PSAweDUwNDgpICB7CisJYmlvcyA9IGlvcmVtYXAoMHhmMDBmMCwgMHgxNCk7CisJaWYgKCFiaW9zKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocmVhZHcoYmlvcyArIDB4MTIpID09IDB4NTA0OCkgIHsKIAkJc3RhdGljIGNvbnN0IHNob3J0IGlvYWRkcl90YWJsZVtdID0geyAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MH07Ci0JCWludCBocF9wb3J0ID0gKGlzYV9yZWFkbCgweDAwMGYwMGYxKSAmIDEpICA/IDB4NDk5IDogMHg5OTsKKwkJaW50IGhwX3BvcnQgPSAocmVhZGwoYmlvcyArIDEpICYgMSkgID8gMHg0OTkgOiAweDk5OwogCQkvKiBXZSBjYW4gaGF2ZSBib2FyZHMgb3RoZXIgdGhhbiB0aGUgYnVpbHQtaW4hICBWZXJpZnkgdGhpcyBpcyBvbi1ib2FyZC4gKi8KIAkJaWYgKChpbmIoaHBfcG9ydCkgJiAweGMwKSA9PSAweDgwCiAJCQkmJiBpb2FkZHJfdGFibGVbaW5iKGhwX3BvcnQpICYgM10gPT0gaW9hZGRyKQogCQkJaHBfYnVpbHRpbiA9IGhwX3BvcnQ7CiAJfQorCWlvdW5tYXAoYmlvcyk7CiAJLyogV2UgYWxzbyByZWNvZ25pemUgdGhlIEhQIFZlY3RyYSBvbi1ib2FyZCBoZXJlLCBidXQgY2hlY2sgYmVsb3cuICovCiAJaHBKMjQwNUEgPSAoaW5iKGlvYWRkcikgPT0gMHgwOCAmJiBpbmIoaW9hZGRyKzEpID09IDB4MDAKIAkJCQkmJiBpbmIoaW9hZGRyKzIpID09IDB4MDkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGFzaV84MjU5Ni5jIGIvZHJpdmVycy9uZXQvbGFzaV84MjU5Ni5jCmluZGV4IGY3YjcyMzguLjk1Nzg4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xhc2lfODI1OTYuYworKysgYi9kcml2ZXJzL25ldC9sYXNpXzgyNTk2LmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogTU9EVUxFX0FVVEhPUigiUmljaGFyZCBIaXJzdCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJpODI1OTYgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfUEFSTShpNTk2X2RlYnVnLCAiaSIpOworbW9kdWxlX3BhcmFtKGk1OTZfZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGk1OTZfZGVidWcsICJsYXNpXzgyNTk2IGRlYnVnIG1hc2siKTsKIAogLyogQ29weSBmcmFtZXMgc2hvcnRlciB0aGFuIHJ4X2NvcHlicmVhaywgb3RoZXJ3aXNlIHBhc3Mgb24gdXAgaW4KQEAgLTE1MjAsOSArMTUyMCw5IEBACiAJfQogfQogCi1NT0RVTEVfUEFSTShkZWJ1ZywgImkiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJsYXNpXzgyNTk2IGRlYnVnIG1hc2siKTsKIHN0YXRpYyBpbnQgZGVidWcgPSAtMTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJsYXNpXzgyNTk2IGRlYnVnIG1hc2siKTsKIAogc3RhdGljIGludCBudW1fZHJpdmVyczsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2c1tNQVhfRFJJVkVSU107CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sb29wYmFjay5jIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwppbmRleCA2OTBhMWFhLi4wYzEzNzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKQEAgLTE3MiwxMSArMTcyLDkgQEAKIAogCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CiAKLQlmb3IgKGk9MDsgaSA8IE5SX0NQVVM7IGkrKykgeworCWZvcl9lYWNoX2NwdShpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYl9zdGF0czsKIAotCQlpZiAoIWNwdV9wb3NzaWJsZShpKSkgCi0JCQljb250aW51ZTsKIAkJbGJfc3RhdHMgPSAmcGVyX2NwdShsb29wYmFja19zdGF0cywgaSk7CiAJCXN0YXRzLT5yeF9ieXRlcyAgICs9IGxiX3N0YXRzLT5yeF9ieXRlczsKIAkJc3RhdHMtPnR4X2J5dGVzICAgKz0gbGJfc3RhdHMtPnR4X2J5dGVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjODl4MC5jIGIvZHJpdmVycy9uZXQvbWFjODl4MC5jCmluZGV4IGY2NWIwZGIuLmNkM2M5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hYzg5eDAuYworKysgYi9kcml2ZXJzL25ldC9tYWM4OXgwLmMKQEAgLTYyOSw3ICs2MjksNyBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfY3M4OXgwOwogc3RhdGljIGludCBkZWJ1ZzsKIAotTU9EVUxFX1BBUk0oZGVidWcsICJpIik7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQ1M4OVswMl0wIGRlYnVnIGxldmVsICgwLTUpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY2UuYwppbmRleCAyYTVhZGQyLi43Nzc5MmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjZS5jCkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogCiBNT0RVTEVfQVVUSE9SKCJQYXVsIE1hY2tlcnJhcyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlck1hYyBNQUNFIGRyaXZlci4iKTsKLU1PRFVMRV9QQVJNKHBvcnRfYWF1aSwgImkiKTsKK21vZHVsZV9wYXJhbShwb3J0X2FhdWksIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvcnRfYWF1aSwgIk1BQ0UgdXNlcyBBQVVJIHBvcnQgKDAtMSkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKaW5kZXggMDJkNWM2OC4uZjZmM2RhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCkBAIC02MjIsNyArNjIyLDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X3VucmVnaXN0ZXI6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKTsKIAogCXJldHVybiAtRU5PTUVNOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWV0aC5jIGIvZHJpdmVycy9uZXQvbWV0aC5jCmluZGV4IGUyMzY1NWYuLmQ2NDRiZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21ldGguYworKysgYi9kcml2ZXJzL25ldC9tZXRoLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAogI2lmZGVmIEhBVkVfVFhfVElNRU9VVAogc3RhdGljIGludCB0aW1lb3V0ID0gVFhfVElNRU9VVDsKLU1PRFVMRV9QQVJNKHRpbWVvdXQsICJpIik7Cittb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKaW5kZXggYzA5OThlZi4uOWYyNjYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzIFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgkJCSAgIERhbGUgRmFybnN3b3J0aCA8ZGFsZUBmYXJuc3dvcnRoLm9yZz4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3RldmVuIEouIEhpbGwgPHNqaGlsbDFAcm9ja3dlbGxjb2xsaW5zLmNvbT4KQEAgLTM3LDggKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC01MiwzOSArNTAsMTYgQEAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlICJtdjY0M3h4X2V0aC5oIgogCi0vKgotICogVGhlIGZpcnN0IHBhcnQgaXMgdGhlIGhpZ2ggbGV2ZWwgZHJpdmVyIG9mIHRoZSBnaWdFIGV0aGVybmV0IHBvcnRzLgotICovCi0KLS8qIENvbnN0YW50cyAqLwotI2RlZmluZSBWTEFOX0hMRU4JCTQKLSNkZWZpbmUgRkNTX0xFTgkJCTQKLSNkZWZpbmUgRE1BX0FMSUdOCQk4CS8qIGh3IHJlcXVpcmVzIDgtYnl0ZSBhbGlnbm1lbnQgKi8KLSNkZWZpbmUgSFdfSVBfQUxJR04JCTIJLyogaHcgYWxpZ25zIElQIGhlYWRlciAqLwotI2RlZmluZSBXUkFQCQkJSFdfSVBfQUxJR04gKyBFVEhfSExFTiArIFZMQU5fSExFTiArIEZDU19MRU4KLSNkZWZpbmUgUlhfU0tCX1NJWkUJCSgoZGV2LT5tdHUgKyBXUkFQICsgNykgJiB+MHg3KQotCi0jZGVmaW5lIElOVF9VTk1BU0tfQUxMCQkJMHgwMDA3ZmZmZgotI2RlZmluZSBJTlRfVU5NQVNLX0FMTF9FWFQJCTB4MDAxMWZmZmYKLSNkZWZpbmUgSU5UX01BU0tfQUxMCQkJMHgwMDAwMDAwMAotI2RlZmluZSBJTlRfTUFTS19BTExfRVhUCQkweDAwMDAwMDAwCi0jZGVmaW5lIElOVF9DQVVTRV9DSEVDS19CSVRTCQlJTlRfQ0FVU0VfVU5NQVNLX0FMTAotI2RlZmluZSBJTlRfQ0FVU0VfQ0hFQ0tfQklUU19FWFQJSU5UX0NBVVNFX1VOTUFTS19BTExfRVhUCi0KLSNpZmRlZiBNVjY0M1hYX0NIRUNLU1VNX09GRkxPQURfVFgKLSNkZWZpbmUgTUFYX0RFU0NTX1BFUl9TS0IJKE1BWF9TS0JfRlJBR1MgKyAxKQotI2Vsc2UKLSNkZWZpbmUgTUFYX0RFU0NTX1BFUl9TS0IJMQotI2VuZGlmCi0KLSNkZWZpbmUgUEhZX1dBSVRfSVRFUkFUSU9OUwkxMDAwCS8qIDEwMDAgaXRlcmF0aW9ucyAqIDEwdVMgPSAxMG1TIG1heCAqLwotI2RlZmluZSBQSFlfV0FJVF9NSUNST19TRUNPTkRTCTEwCi0KIC8qIFN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyBpbnQgZXRoX3BvcnRfbGlua19pc191cCh1bnNpZ25lZCBpbnQgZXRoX3BvcnRfbnVtKTsKIHN0YXRpYyB2b2lkIGV0aF9wb3J0X3VjX2FkZHJfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQl1bnNpZ25lZCBjaGFyICpNYWNBZGRyKTsKIHN0YXRpYyB2b2lkIGV0aF9wb3J0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KHVuc2lnbmVkIGludCBwb3J0X251bSwKKwkJCQkJCXVuc2lnbmVkIGludCBxdWV1ZXMpOworc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcG9ydF9lbmFibGVfcngodW5zaWduZWQgaW50IHBvcnRfbnVtLAorCQkJCQkJdW5zaWduZWQgaW50IHF1ZXVlcyk7CitzdGF0aWMgdW5zaWduZWQgaW50IG12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV90eCh1bnNpZ25lZCBpbnQgcG9ydF9udW0pOworc3RhdGljIHVuc2lnbmVkIGludCBtdjY0M3h4X2V0aF9wb3J0X2Rpc2FibGVfcngodW5zaWduZWQgaW50IHBvcnRfbnVtKTsKIHN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwpAQCAtOTMsOCArNjgsMTIgQEAKICNpZmRlZiBNVjY0M1hYX05BUEkKIHN0YXRpYyBpbnQgbXY2NDN4eF9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KTsKICNlbmRpZgorc3RhdGljIGludCBldGhlcm5ldF9waHlfZ2V0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0pOwogc3RhdGljIHZvaWQgZXRoZXJuZXRfcGh5X3NldCh1bnNpZ25lZCBpbnQgZXRoX3BvcnRfbnVtLCBpbnQgcGh5X2FkZHIpOwogc3RhdGljIGludCBldGhlcm5ldF9waHlfZGV0ZWN0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0pOworc3RhdGljIGludCBtdjY0M3h4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOworc3RhdGljIHZvaWQgbXY2NDN4eF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbCk7CitzdGF0aWMgaW50IG12NjQzeHhfZXRoX2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbXY2NDN4eF9ldGh0b29sX29wczsKIAogc3RhdGljIGNoYXIgbXY2NDN4eF9kcml2ZXJfbmFtZVtdID0gIm12NjQzeHhfZXRoIjsKQEAgLTE1Myw2NyArMTMyLDUzIEBACiB9CiAKIC8qCi0gKiBtdjY0M3h4X2V0aF9yeF90YXNrCisgKiBtdjY0M3h4X2V0aF9yeF9yZWZpbGxfZGVzY3MKICAqCiAgKiBGaWxscyAvIHJlZmlsbHMgUlggcXVldWUgb24gYSBjZXJ0YWluIGdpZ2FiaXQgZXRoZXJuZXQgcG9ydAogICoKICAqIElucHV0IDoJcG9pbnRlciB0byBldGhlcm5ldCBpbnRlcmZhY2UgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCiAgKiBPdXRwdXQgOglOL0EKICAqLwotc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcnhfdGFzayh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcnhfcmVmaWxsX2Rlc2NzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CiAJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwa3RfaW5mbyBwa3RfaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCB1bmFsaWduZWQ7CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbXAtPnJ4X3Rhc2tfYnVzeSkpCi0JCXBhbmljKCIlczogRXJyb3IgaW4gdGVzdF9zZXRfYml0IC8gY2xlYXJfYml0IiwgZGV2LT5uYW1lKTsKLQotCXdoaWxlIChtcC0+cnhfcmluZ19za2JzIDwgKG1wLT5yeF9yaW5nX3NpemUgLSA1KSkgewotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKFJYX1NLQl9TSVpFICsgRE1BX0FMSUdOKTsKKwl3aGlsZSAobXAtPnJ4X2Rlc2NfY291bnQgPCBtcC0+cnhfcmluZ19zaXplKSB7CisJCXNrYiA9IGRldl9hbGxvY19za2IoRVRIX1JYX1NLQl9TSVpFICsgRVRIX0RNQV9BTElHTik7CiAJCWlmICghc2tiKQogCQkJYnJlYWs7Ci0JCW1wLT5yeF9yaW5nX3NrYnMrKzsKLQkJdW5hbGlnbmVkID0gKHUzMilza2ItPmRhdGEgJiAoRE1BX0FMSUdOIC0gMSk7CisJCW1wLT5yeF9kZXNjX2NvdW50Kys7CisJCXVuYWxpZ25lZCA9ICh1MzIpc2tiLT5kYXRhICYgKEVUSF9ETUFfQUxJR04gLSAxKTsKIAkJaWYgKHVuYWxpZ25lZCkKLQkJCXNrYl9yZXNlcnZlKHNrYiwgRE1BX0FMSUdOIC0gdW5hbGlnbmVkKTsKKwkJCXNrYl9yZXNlcnZlKHNrYiwgRVRIX0RNQV9BTElHTiAtIHVuYWxpZ25lZCk7CiAJCXBrdF9pbmZvLmNtZF9zdHMgPSBFVEhfUlhfRU5BQkxFX0lOVEVSUlVQVDsKLQkJcGt0X2luZm8uYnl0ZV9jbnQgPSBSWF9TS0JfU0laRTsKLQkJcGt0X2luZm8uYnVmX3B0ciA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHNrYi0+ZGF0YSwgUlhfU0tCX1NJWkUsCi0JCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJcGt0X2luZm8uYnl0ZV9jbnQgPSBFVEhfUlhfU0tCX1NJWkU7CisJCXBrdF9pbmZvLmJ1Zl9wdHIgPSBkbWFfbWFwX3NpbmdsZShOVUxMLCBza2ItPmRhdGEsCisJCQkJCUVUSF9SWF9TS0JfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAkJcGt0X2luZm8ucmV0dXJuX2luZm8gPSBza2I7CiAJCWlmIChldGhfcnhfcmV0dXJuX2J1ZmYobXAsICZwa3RfaW5mbykgIT0gRVRIX09LKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiJXM6IEVycm9yIGFsbG9jYXRpbmcgUlggUmluZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9Ci0JCXNrYl9yZXNlcnZlKHNrYiwgSFdfSVBfQUxJR04pOworCQlza2JfcmVzZXJ2ZShza2IsIEVUSF9IV19JUF9BTElHTik7CiAJfQotCWNsZWFyX2JpdCgwLCAmbXAtPnJ4X3Rhc2tfYnVzeSk7CiAJLyoKIAkgKiBJZiBSWCByaW5nIGlzIGVtcHR5IG9mIFNLQiwgc2V0IGEgdGltZXIgdG8gdHJ5IGFsbG9jYXRpbmcKLQkgKiBhZ2FpbiBpbiBhIGxhdGVyIHRpbWUgLgorCSAqIGFnYWluIGF0IGEgbGF0ZXIgdGltZS4KIAkgKi8KLQlpZiAoKG1wLT5yeF9yaW5nX3NrYnMgPT0gMCkgJiYgKG1wLT5yeF90aW1lcl9mbGFnID09IDApKSB7CisJaWYgKG1wLT5yeF9kZXNjX2NvdW50ID09IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJ4IHJpbmcgaXMgZW1wdHlcbiIsIGRldi0+bmFtZSk7Ci0JCS8qIEFmdGVyIDEwMG1TZWMgKi8KLQkJbXAtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyAoSFogLyAxMCk7CisJCW1wLT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaIC8gMTApOwkvKiAxMDAgbVNlYyAqLwogCQlhZGRfdGltZXIoJm1wLT50aW1lb3V0KTsKLQkJbXAtPnJ4X3RpbWVyX2ZsYWcgPSAxOwogCX0KLSNpZmRlZiBNVjY0M1hYX1JYX1FVRVVFX0ZJTExfT05fVEFTSwotCWVsc2UgewotCQkvKiBSZXR1cm4gaW50ZXJydXB0cyAqLwotCQltdl93cml0ZShNVjY0M1hYX0VUSF9JTlRFUlJVUFRfTUFTS19SRUcobXAtPnBvcnRfbnVtKSwKLQkJCQkJCQlJTlRfVU5NQVNLX0FMTCk7Ci0JfQotI2VuZGlmCiB9CiAKIC8qCi0gKiBtdjY0M3h4X2V0aF9yeF90YXNrX3RpbWVyX3dyYXBwZXIKKyAqIG12NjQzeHhfZXRoX3J4X3JlZmlsbF9kZXNjc190aW1lcl93cmFwcGVyCiAgKgogICogVGltZXIgcm91dGluZSB0byB3YWtlIHVwIFJYIHF1ZXVlIGZpbGxpbmcgdGFzay4gVGhpcyBmdW5jdGlvbiBpcwogICogdXNlZCBvbmx5IGluIGNhc2UgdGhlIFJYIHF1ZXVlIGlzIGVtcHR5LCBhbmQgYWxsIGFsbG9jX3NrYiBoYXMKQEAgLTIyMiwxMyArMTg3LDkgQEAKICAqIElucHV0IDoJcG9pbnRlciB0byBldGhlcm5ldCBpbnRlcmZhY2UgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCiAgKiBPdXRwdXQgOglOL0EKICAqLwotc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcnhfdGFza190aW1lcl93cmFwcGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdjY0M3h4X2V0aF9yeF9yZWZpbGxfZGVzY3NfdGltZXJfd3JhcHBlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7Ci0Jc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JbXAtPnJ4X3RpbWVyX2ZsYWcgPSAwOwotCW12NjQzeHhfZXRoX3J4X3Rhc2soKHZvaWQgKilkYXRhKTsKKwltdjY0M3h4X2V0aF9yeF9yZWZpbGxfZGVzY3MoKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YSk7CiB9CiAKIC8qCkBAIC0yNDUsOCArMjA2LDcgQEAKIAl1bnNpZ25lZCBpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07CiAKIAlldGhfcG9ydF9pbml0X21hY190YWJsZXMocG9ydF9udW0pOwotCW1lbWNweShtcC0+cG9ydF9tYWNfYWRkciwgZGV2LT5kZXZfYWRkciwgNik7Ci0JZXRoX3BvcnRfdWNfYWRkcl9zZXQocG9ydF9udW0sIG1wLT5wb3J0X21hY19hZGRyKTsKKwlldGhfcG9ydF91Y19hZGRyX3NldChwb3J0X251bSwgZGV2LT5kZXZfYWRkcik7CiB9CiAKIC8qCkBAIC0yNjAsMTMgKzIyMCwxNCBAQAogc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGNvbmZpZ19yZWc7CiAKKwljb25maWdfcmVnID0gbXZfcmVhZChNVjY0M1hYX0VUSF9QT1JUX0NPTkZJR19SRUcobXAtPnBvcnRfbnVtKSk7CiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJbXAtPnBvcnRfY29uZmlnIHw9ICh1MzIpIE1WNjQzWFhfRVRIX1VOSUNBU1RfUFJPTUlTQ1VPVVNfTU9ERTsKKwkJY29uZmlnX3JlZyB8PSAodTMyKSBNVjY0M1hYX0VUSF9VTklDQVNUX1BST01JU0NVT1VTX01PREU7CiAJZWxzZQotCQltcC0+cG9ydF9jb25maWcgJj0gfih1MzIpIE1WNjQzWFhfRVRIX1VOSUNBU1RfUFJPTUlTQ1VPVVNfTU9ERTsKLQotCW12X3dyaXRlKE1WNjQzWFhfRVRIX1BPUlRfQ09ORklHX1JFRyhtcC0+cG9ydF9udW0pLCBtcC0+cG9ydF9jb25maWcpOworCQljb25maWdfcmVnICY9IH4odTMyKSBNVjY0M1hYX0VUSF9VTklDQVNUX1BST01JU0NVT1VTX01PREU7CisJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUE9SVF9DT05GSUdfUkVHKG1wLT5wb3J0X251bSksIGNvbmZpZ19yZWcpOwogCiAJZXRoX3BvcnRfc2V0X211bHRpY2FzdF9saXN0KGRldik7CiB9CkBAIC0zMjIsNTMgKzI4Myw4MiBAQAogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCWV0aF9wb3J0X3Jlc2V0KG1wLT5wb3J0X251bSk7Ci0JZXRoX3BvcnRfc3RhcnQobXApOworCWV0aF9wb3J0X3N0YXJ0KGRldik7CiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogfQogCi0vKgotICogbXY2NDN4eF9ldGhfZnJlZV90eF9xdWV1ZQorLyoqCisgKiBtdjY0M3h4X2V0aF9mcmVlX3R4X2Rlc2NzIC0gRnJlZSB0aGUgdHggZGVzYyBkYXRhIGZvciBjb21wbGV0ZWQgZGVzY3JpcHRvcnMKICAqCi0gKiBJbnB1dCA6CWRldiAtIGEgcG9pbnRlciB0byB0aGUgcmVxdWlyZWQgaW50ZXJmYWNlCi0gKgotICogT3V0cHV0IDoJMCBpZiB3YXMgYWJsZSB0byByZWxlYXNlIHNrYiAsIG5vbnplcm8gb3RoZXJ3aXNlCisgKiBJZiBmb3JjZSBpcyBub24temVybywgZnJlZXMgdW5jb21wbGV0ZWQgZGVzY3JpcHRvcnMgYXMgd2VsbAogICovCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX2ZyZWVfdHhfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJdW5zaWduZWQgaW50IGV0aF9pbnRfY2F1c2VfZXh0KQoraW50IG12NjQzeHhfZXRoX2ZyZWVfdHhfZGVzY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlKQogewogCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbXAtPnN0YXRzOwotCXN0cnVjdCBwa3RfaW5mbyBwa3RfaW5mbzsKLQlpbnQgcmVsZWFzZWQgPSAxOworCXN0cnVjdCBldGhfdHhfZGVzYyAqZGVzYzsKKwl1MzIgY21kX3N0czsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHR4X2luZGV4OworCWRtYV9hZGRyX3QgYWRkcjsKKwlpbnQgY291bnQ7CisJaW50IHJlbGVhc2VkID0gMDsKIAotCWlmICghKGV0aF9pbnRfY2F1c2VfZXh0ICYgKEJJVDAgfCBCSVQ4KSkpCi0JCXJldHVybiByZWxlYXNlZDsKKwl3aGlsZSAobXAtPnR4X2Rlc2NfY291bnQgPiAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+bG9jaywgZmxhZ3MpOworCQl0eF9pbmRleCA9IG1wLT50eF91c2VkX2Rlc2NfcTsKKwkJZGVzYyA9ICZtcC0+cF90eF9kZXNjX2FyZWFbdHhfaW5kZXhdOworCQljbWRfc3RzID0gZGVzYy0+Y21kX3N0czsKIAotCS8qIENoZWNrIG9ubHkgcXVldWUgMCAqLwotCXdoaWxlIChldGhfdHhfcmV0dXJuX2Rlc2MobXAsICZwa3RfaW5mbykgPT0gRVRIX09LKSB7Ci0JCWlmIChwa3RfaW5mby5jbWRfc3RzICYgQklUMCkgeworCQlpZiAoIWZvcmNlICYmIChjbWRfc3RzICYgRVRIX0JVRkZFUl9PV05FRF9CWV9ETUEpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIHJlbGVhc2VkOworCQl9CisKKwkJbXAtPnR4X3VzZWRfZGVzY19xID0gKHR4X2luZGV4ICsgMSkgJSBtcC0+dHhfcmluZ19zaXplOworCQltcC0+dHhfZGVzY19jb3VudC0tOworCisJCWFkZHIgPSBkZXNjLT5idWZfcHRyOworCQljb3VudCA9IGRlc2MtPmJ5dGVfY250OworCQlza2IgPSBtcC0+dHhfc2tiW3R4X2luZGV4XTsKKwkJaWYgKHNrYikKKwkJCW1wLT50eF9za2JbdHhfaW5kZXhdID0gTlVMTDsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+bG9jaywgZmxhZ3MpOworCisJCWlmIChjbWRfc3RzICYgRVRIX0VSUk9SX1NVTU1BUlkpIHsKIAkJCXByaW50aygiJXM6IEVycm9yIGluIFRYXG4iLCBkZXYtPm5hbWUpOwotCQkJc3RhdHMtPnR4X2Vycm9ycysrOworCQkJbXAtPnN0YXRzLnR4X2Vycm9ycysrOwogCQl9CiAKLQkJaWYgKHBrdF9pbmZvLmNtZF9zdHMgJiBFVEhfVFhfRklSU1RfREVTQykKLQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgcGt0X2luZm8uYnVmX3B0ciwKLQkJCQkJcGt0X2luZm8uYnl0ZV9jbnQsCi0JCQkJCURNQV9UT19ERVZJQ0UpOworCQlpZiAoY21kX3N0cyAmIEVUSF9UWF9GSVJTVF9ERVNDKQorCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCBhZGRyLCBjb3VudCwgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCWRtYV91bm1hcF9wYWdlKE5VTEwsIHBrdF9pbmZvLmJ1Zl9wdHIsCi0JCQkJCXBrdF9pbmZvLmJ5dGVfY250LAotCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJCWRtYV91bm1hcF9wYWdlKE5VTEwsIGFkZHIsIGNvdW50LCBETUFfVE9fREVWSUNFKTsKIAotCQlpZiAocGt0X2luZm8ucmV0dXJuX2luZm8pIHsKLQkJCWRldl9rZnJlZV9za2JfaXJxKHBrdF9pbmZvLnJldHVybl9pbmZvKTsKLQkJCXJlbGVhc2VkID0gMDsKLQkJfQorCQlpZiAoc2tiKQorCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKworCQlyZWxlYXNlZCA9IDE7CiAJfQogCiAJcmV0dXJuIHJlbGVhc2VkOwogfQogCitzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9mcmVlX2NvbXBsZXRlZF90eF9kZXNjcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChtdjY0M3h4X2V0aF9mcmVlX3R4X2Rlc2NzKGRldiwgMCkgJiYKKwkgICAgbXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50ID49IE1BWF9ERVNDU19QRVJfU0tCKQorCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2ZyZWVfYWxsX3R4X2Rlc2NzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJbXY2NDN4eF9ldGhfZnJlZV90eF9kZXNjcyhkZXYsIDEpOworfQorCiAvKgogICogbXY2NDN4eF9ldGhfcmVjZWl2ZQogICoKQEAgLTM4MCwxMSArMzcwLDcgQEAKICAqCiAgKiBPdXRwdXQgOgludW1iZXIgb2Ygc2VydmVkIHBhY2tldHMKICAqLwotI2lmZGVmIE1WNjQzWFhfTkFQSQogc3RhdGljIGludCBtdjY0M3h4X2V0aF9yZWNlaXZlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBidWRnZXQpCi0jZWxzZQotc3RhdGljIGludCBtdjY0M3h4X2V0aF9yZWNlaXZlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi0jZW5kaWYKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJm1wLT5zdGF0czsKQEAgLTM5MiwxNSArMzc4LDE0IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcGt0X2luZm8gcGt0X2luZm87CiAKLSNpZmRlZiBNVjY0M1hYX05BUEkKIAl3aGlsZSAoYnVkZ2V0LS0gPiAwICYmIGV0aF9wb3J0X3JlY2VpdmUobXAsICZwa3RfaW5mbykgPT0gRVRIX09LKSB7Ci0jZWxzZQotCXdoaWxlIChldGhfcG9ydF9yZWNlaXZlKG1wLCAmcGt0X2luZm8pID09IEVUSF9PSykgewotI2VuZGlmCi0JCW1wLT5yeF9yaW5nX3NrYnMtLTsKKwkJbXAtPnJ4X2Rlc2NfY291bnQtLTsKIAkJcmVjZWl2ZWRfcGFja2V0cysrOwogCi0JCS8qIFVwZGF0ZSBzdGF0aXN0aWNzLiBOb3RlIGJ5dGUgY291bnQgaW5jbHVkZXMgNCBieXRlIENSQyBjb3VudCAqLworCQkvKgorCQkgKiBVcGRhdGUgc3RhdGlzdGljcy4KKwkJICogTm90ZSBieXRlIGNvdW50IGluY2x1ZGVzIDQgYnl0ZSBDUkMgY291bnQKKwkJICovCiAJCXN0YXRzLT5yeF9wYWNrZXRzKys7CiAJCXN0YXRzLT5yeF9ieXRlcyArPSBwa3RfaW5mby5ieXRlX2NudDsKIAkJc2tiID0gcGt0X2luZm8ucmV0dXJuX2luZm87CkBAIC00NDgsMTAgKzQzMyw2MSBAQAogCQl9CiAJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJfQorCW12NjQzeHhfZXRoX3J4X3JlZmlsbF9kZXNjcyhkZXYpOwkvKiBGaWxsIFJYIHJpbmcgd2l0aCBza2IncyAqLwogCiAJcmV0dXJuIHJlY2VpdmVkX3BhY2tldHM7CiB9CiAKKy8qIFNldCB0aGUgbXY2NDN4eCBwb3J0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIHRoZSBzcGVlZC9kdXBsZXggbW9kZS4gKi8KK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX3VwZGF0ZV9wc2NyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOworCXUzMiBvX3BzY3IsIG5fcHNjcjsKKwl1bnNpZ25lZCBpbnQgcXVldWVzOworCisJb19wc2NyID0gbXZfcmVhZChNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSkpOworCW5fcHNjciA9IG9fcHNjcjsKKworCS8qIGNsZWFyIHNwZWVkLCBkdXBsZXggYW5kIHJ4IGJ1ZmZlciBzaXplIGZpZWxkcyAqLworCW5fcHNjciAmPSB+KE1WNjQzWFhfRVRIX1NFVF9NSUlfU1BFRURfVE9fMTAwICB8CisJCSAgIE1WNjQzWFhfRVRIX1NFVF9HTUlJX1NQRUVEX1RPXzEwMDAgfAorCQkgICBNVjY0M1hYX0VUSF9TRVRfRlVMTF9EVVBMRVhfTU9ERSAgIHwKKwkJICAgTVY2NDNYWF9FVEhfTUFYX1JYX1BBQ0tFVF9NQVNLKTsKKworCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCW5fcHNjciB8PSBNVjY0M1hYX0VUSF9TRVRfRlVMTF9EVVBMRVhfTU9ERTsKKworCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwKQorCQluX3BzY3IgfD0gTVY2NDNYWF9FVEhfU0VUX0dNSUlfU1BFRURfVE9fMTAwMCB8CisJCQkgIE1WNjQzWFhfRVRIX01BWF9SWF9QQUNLRVRfOTcwMEJZVEU7CisJZWxzZSB7CisJCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDApCisJCQluX3BzY3IgfD0gTVY2NDNYWF9FVEhfU0VUX01JSV9TUEVFRF9UT18xMDA7CisJCW5fcHNjciB8PSBNVjY0M1hYX0VUSF9NQVhfUlhfUEFDS0VUXzE1MjJCWVRFOworCX0KKworCWlmIChuX3BzY3IgIT0gb19wc2NyKSB7CisJCWlmICgob19wc2NyICYgTVY2NDNYWF9FVEhfU0VSSUFMX1BPUlRfRU5BQkxFKSA9PSAwKQorCQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLAorCQkJCQkJCQluX3BzY3IpOworCQllbHNlIHsKKwkJCXF1ZXVlcyA9IG12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV90eChwb3J0X251bSk7CisKKwkJCW9fcHNjciAmPSB+TVY2NDNYWF9FVEhfU0VSSUFMX1BPUlRfRU5BQkxFOworCQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLAorCQkJCQkJCQlvX3BzY3IpOworCQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLAorCQkJCQkJCQluX3BzY3IpOworCQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLAorCQkJCQkJCQluX3BzY3IpOworCQkJaWYgKHF1ZXVlcykKKwkJCQltdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eChwb3J0X251bSwgcXVldWVzKTsKKwkJfQorCX0KK30KKwogLyoKICAqIG12NjQzeHhfZXRoX2ludF9oYW5kbGVyCiAgKgpAQCAtNDczLDc4ICs1MDksNTIgQEAKIAogCS8qIFJlYWQgaW50ZXJydXB0IGNhdXNlIHJlZ2lzdGVycyAqLwogCWV0aF9pbnRfY2F1c2UgPSBtdl9yZWFkKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9DQVVTRV9SRUcocG9ydF9udW0pKSAmCi0JCQkJCQlJTlRfVU5NQVNLX0FMTDsKLQotCWlmIChldGhfaW50X2NhdXNlICYgQklUMSkKKwkJCQkJCUVUSF9JTlRfVU5NQVNLX0FMTDsKKwlpZiAoZXRoX2ludF9jYXVzZSAmIEVUSF9JTlRfQ0FVU0VfRVhUKSB7CiAJCWV0aF9pbnRfY2F1c2VfZXh0ID0gbXZfcmVhZCgKIAkJCU1WNjQzWFhfRVRIX0lOVEVSUlVQVF9DQVVTRV9FWFRFTkRfUkVHKHBvcnRfbnVtKSkgJgotCQkJCQkJSU5UX1VOTUFTS19BTExfRVhUOworCQkJCQkJRVRIX0lOVF9VTk1BU0tfQUxMX0VYVDsKKwkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX0NBVVNFX0VYVEVORF9SRUcocG9ydF9udW0pLAorCQkJCQkJCX5ldGhfaW50X2NhdXNlX2V4dCk7CisJfQogCi0jaWZkZWYgTVY2NDNYWF9OQVBJCi0JaWYgKCEoZXRoX2ludF9jYXVzZSAmIDB4MDAwN2ZmZmQpKSB7Ci0JCS8qIERvbnQgYWNrIHRoZSBSeCBpbnRlcnJ1cHQgKi8KLSNlbmRpZgotCQkvKgotCQkgKiBDbGVhciBzcGVjaWZpYyBldGhlcm5ldCBwb3J0IGludHJlcnJ1cHQgcmVnaXN0ZXJzIGJ5Ci0JCSAqIGFja25vd2xlZGluZyByZWxldmFudCBiaXRzLgotCQkgKi8KLQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX0NBVVNFX1JFRyhwb3J0X251bSksCi0JCQkJCQkJfmV0aF9pbnRfY2F1c2UpOwotCQlpZiAoZXRoX2ludF9jYXVzZV9leHQgIT0gMHgwKQotCQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX0NBVVNFX0VYVEVORF9SRUcKLQkJCQkJKHBvcnRfbnVtKSwgfmV0aF9pbnRfY2F1c2VfZXh0KTsKKwkvKiBQSFkgc3RhdHVzIGNoYW5nZWQgKi8KKwlpZiAoZXRoX2ludF9jYXVzZV9leHQgJiBFVEhfSU5UX0NBVVNFX1BIWSkgeworCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOwogCi0JCS8qIFVEUCBjaGFuZ2UgOiBXZSBtYXkgbmVlZCB0aGlzICovCi0JCWlmICgoZXRoX2ludF9jYXVzZV9leHQgJiAweDAwMDBmZmZmKSAmJgotCQkgICAgKG12NjQzeHhfZXRoX2ZyZWVfdHhfcXVldWUoZGV2LCBldGhfaW50X2NhdXNlX2V4dCkgPT0gMCkgJiYKLQkJICAgIChtcC0+dHhfcmluZ19zaXplID4gbXAtPnR4X3Jpbmdfc2ticyArIE1BWF9ERVNDU19QRVJfU0tCKSkKLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLSNpZmRlZiBNVjY0M1hYX05BUEkKLQl9IGVsc2UgewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7Ci0JCQkvKiBNYXNrIGFsbCB0aGUgaW50ZXJydXB0cyAqLwotCQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwKLQkJCQkJCQkJSU5UX01BU0tfQUxMKTsKLQkJCS8qIHdhaXQgZm9yIHByZXZpb3VzIHdyaXRlIHRvIGNvbXBsZXRlICovCi0JCQltdl9yZWFkKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSkpOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYpOworCQlpZiAobWlpX2xpbmtfb2soJm1wLT5taWkpKSB7CisJCQltaWlfZXRodG9vbF9nc2V0KCZtcC0+bWlpLCAmY21kKTsKKwkJCW12NjQzeHhfZXRoX3VwZGF0ZV9wc2NyKGRldiwgJmNtZCk7CisJCQltdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV90eChwb3J0X251bSwKKwkJCQkJCSAgIEVUSF9UWF9RVUVVRVNfRU5BQkxFRCk7CisJCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKwkJCQlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50ID49CisJCQkJCQkJTUFYX0RFU0NTX1BFUl9TS0IpCisJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJCX0KKwkJfSBlbHNlIGlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCX0KLSNlbHNlCi0JCWlmIChldGhfaW50X2NhdXNlICYgKEJJVDIgfCBCSVQxMSkpCi0JCQltdjY0M3h4X2V0aF9yZWNlaXZlX3F1ZXVlKGRldiwgMCk7CisJfQogCi0JCS8qCi0JCSAqIEFmdGVyIGZvcndhcmRlZCByZWNlaXZlZCBwYWNrZXRzIHRvIHVwcGVyIGxheWVyLCBhZGQgYSB0YXNrCi0JCSAqIGluIGFuIGludGVycnVwdHMgZW5hYmxlZCBjb250ZXh0IHRoYXQgcmVmaWxscyB0aGUgUlggcmluZwotCQkgKiB3aXRoIHNrYidzLgotCQkgKi8KLSNpZmRlZiBNVjY0M1hYX1JYX1FVRVVFX0ZJTExfT05fVEFTSwotCQkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzIG9uIGV0aGVybmV0IHBvcnQgKi8KKyNpZmRlZiBNVjY0M1hYX05BUEkKKwlpZiAoZXRoX2ludF9jYXVzZSAmIEVUSF9JTlRfQ0FVU0VfUlgpIHsKKwkJLyogc2NoZWR1bGUgdGhlIE5BUEkgcG9sbCByb3V0aW5lIHRvIG1haW50YWluIHBvcnQgKi8KIAkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwKLQkJCQkJCQlJTlRfTUFTS19BTEwpOwotCQkvKiB3YWl0IGZvciBwcmV2aW91cyB3cml0ZSB0byB0YWtlIGVmZmVjdCAqLworCQkJCQkJCUVUSF9JTlRfTUFTS19BTEwpOworCQkvKiB3YWl0IGZvciBwcmV2aW91cyB3cml0ZSB0byBjb21wbGV0ZSAqLwogCQltdl9yZWFkKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSkpOwogCi0JCXF1ZXVlX3Rhc2soJm1wLT5yeF90YXNrLCAmdHFfaW1tZWRpYXRlKTsKLQkJbWFya19iaChJTU1FRElBVEVfQkgpOworCQluZXRpZl9yeF9zY2hlZHVsZShkZXYpOworCX0KICNlbHNlCi0JCW1wLT5yeF90YXNrLmZ1bmMoZGV2KTsKKwlpZiAoZXRoX2ludF9jYXVzZSAmIEVUSF9JTlRfQ0FVU0VfUlgpCisJCW12NjQzeHhfZXRoX3JlY2VpdmVfcXVldWUoZGV2LCBJTlRfTUFYKTsKKwlpZiAoZXRoX2ludF9jYXVzZV9leHQgJiBFVEhfSU5UX0NBVVNFX1RYKQorCQltdjY0M3h4X2V0aF9mcmVlX2NvbXBsZXRlZF90eF9kZXNjcyhkZXYpOwogI2VuZGlmCi0jZW5kaWYKLQl9Ci0JLyogUEhZIHN0YXR1cyBjaGFuZ2VkICovCi0JaWYgKGV0aF9pbnRfY2F1c2VfZXh0ICYgKEJJVDE2IHwgQklUMjApKSB7Ci0JCWlmIChldGhfcG9ydF9saW5rX2lzX3VwKHBvcnRfbnVtKSkgewotCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJLyogU3RhcnQgVFggcXVldWUgKi8KLQkJCW12X3dyaXRlKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHCi0JCQkJCQkJCShwb3J0X251bSksIDEpOwotCQl9IGVsc2UgewotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJfQotCX0KIAogCS8qCiAJICogSWYgbm8gcmVhbCBpbnRlcnJ1cHQgb2NjdXJlZCwgZXhpdC4KQEAgLTY3MCw5ICs2ODAsNiBAQAogCW1wLT5yeF91c2VkX2Rlc2NfcSA9IDA7CiAKIAltcC0+cnhfZGVzY19hcmVhX3NpemUgPSByeF9kZXNjX251bSAqIHNpemVvZihzdHJ1Y3QgZXRoX3J4X2Rlc2MpOwotCi0JLyogQWRkIHRoZSBxdWV1ZSB0byB0aGUgbGlzdCBvZiBSWCBxdWV1ZXMgb2YgdGhpcyBwb3J0ICovCi0JbXAtPnBvcnRfcnhfcXVldWVfY29tbWFuZCB8PSAxOwogfQogCiAvKgpAQCAtNzEyLDE0ICs3MTksMzYgQEAKIAogCW1wLT50eF9jdXJyX2Rlc2NfcSA9IDA7CiAJbXAtPnR4X3VzZWRfZGVzY19xID0gMDsKLSNpZmRlZiBNVjY0M1hYX0NIRUNLU1VNX09GRkxPQURfVFgKLQltcC0+dHhfZmlyc3RfZGVzY19xID0gMDsKLSNlbmRpZgogCiAJbXAtPnR4X2Rlc2NfYXJlYV9zaXplID0gdHhfZGVzY19udW0gKiBzaXplb2Yoc3RydWN0IGV0aF90eF9kZXNjKTsKK30KIAotCS8qIEFkZCB0aGUgcXVldWUgdG8gdGhlIGxpc3Qgb2YgVHggcXVldWVzIG9mIHRoaXMgcG9ydCAqLwotCW1wLT5wb3J0X3R4X3F1ZXVlX2NvbW1hbmQgfD0gMTsKK3N0YXRpYyBpbnQgbXY2NDN4eF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnI7CisKKwlzcGluX2xvY2tfaXJxKCZtcC0+bG9jayk7CisJZXJyID0gbWlpX2V0aHRvb2xfc3NldCgmbXAtPm1paSwgY21kKTsKKwlzcGluX3VubG9ja19pcnEoJm1wLT5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbXY2NDN4eF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnI7CisKKwlzcGluX2xvY2tfaXJxKCZtcC0+bG9jayk7CisJZXJyID0gbWlpX2V0aHRvb2xfZ3NldCgmbXAtPm1paSwgY21kKTsKKwlzcGluX3VubG9ja19pcnEoJm1wLT5sb2NrKTsKKworCS8qIFRoZSBQSFkgbWF5IHN1cHBvcnQgMTAwMGJhc2VUX0hhbGYsIGJ1dCB0aGUgbXY2NDN4eCBkb2VzIG5vdCAqLworCWNtZC0+c3VwcG9ydGVkICY9IH5TVVBQT1JURURfMTAwMGJhc2VUX0hhbGY7CisJY21kLT5hZHZlcnRpc2luZyAmPSB+QURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZjsKKworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC03NTAsMjMgKzc3OSwxMiBAQAogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKLQkvKiBTdG9wIFJYIFF1ZXVlcyAqLwotCW12X3dyaXRlKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcocG9ydF9udW0pLCAweDAwMDBmZjAwKTsKLQotCS8qIFNldCB0aGUgTUFDIEFkZHJlc3MgKi8KLQltZW1jcHkobXAtPnBvcnRfbWFjX2FkZHIsIGRldi0+ZGV2X2FkZHIsIDYpOwotCiAJZXRoX3BvcnRfaW5pdChtcCk7CiAKLQlJTklUX1dPUksoJm1wLT5yeF90YXNrLCAodm9pZCAoKikodm9pZCAqKSltdjY0M3h4X2V0aF9yeF90YXNrLCBkZXYpOwotCiAJbWVtc2V0KCZtcC0+dGltZW91dCwgMCwgc2l6ZW9mKHN0cnVjdCB0aW1lcl9saXN0KSk7Ci0JbXAtPnRpbWVvdXQuZnVuY3Rpb24gPSBtdjY0M3h4X2V0aF9yeF90YXNrX3RpbWVyX3dyYXBwZXI7CisJbXAtPnRpbWVvdXQuZnVuY3Rpb24gPSBtdjY0M3h4X2V0aF9yeF9yZWZpbGxfZGVzY3NfdGltZXJfd3JhcHBlcjsKIAltcC0+dGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwogCi0JbXAtPnJ4X3Rhc2tfYnVzeSA9IDA7Ci0JbXAtPnJ4X3RpbWVyX2ZsYWcgPSAwOwotCiAJLyogQWxsb2NhdGUgUlggYW5kIFRYIHNrYiByaW5ncyAqLwogCW1wLT5yeF9za2IgPSBrbWFsbG9jKHNpemVvZigqbXAtPnJ4X3NrYikgKiBtcC0+cnhfcmluZ19zaXplLAogCQkJCQkJCQlHRlBfS0VSTkVMKTsKQEAgLTc4NCw3ICs4MDIsNyBAQAogCX0KIAogCS8qIEFsbG9jYXRlIFRYIHJpbmcgKi8KLQltcC0+dHhfcmluZ19za2JzID0gMDsKKwltcC0+dHhfZGVzY19jb3VudCA9IDA7CiAJc2l6ZSA9IG1wLT50eF9yaW5nX3NpemUgKiBzaXplb2Yoc3RydWN0IGV0aF90eF9kZXNjKTsKIAltcC0+dHhfZGVzY19hcmVhX3NpemUgPSBzaXplOwogCkBAIC04MDksNyArODI3LDcgQEAKIAlldGhlcl9pbml0X3R4X2Rlc2NfcmluZyhtcCk7CiAKIAkvKiBBbGxvY2F0ZSBSWCByaW5nICovCi0JbXAtPnJ4X3Jpbmdfc2ticyA9IDA7CisJbXAtPnJ4X2Rlc2NfY291bnQgPSAwOwogCXNpemUgPSBtcC0+cnhfcmluZ19zaXplICogc2l6ZW9mKHN0cnVjdCBldGhfcnhfZGVzYyk7CiAJbXAtPnJ4X2Rlc2NfYXJlYV9zaXplID0gc2l6ZTsKIApAQCAtODM5LDkgKzg1NywxMyBAQAogCiAJZXRoZXJfaW5pdF9yeF9kZXNjX3JpbmcobXApOwogCi0JbXY2NDN4eF9ldGhfcnhfdGFzayhkZXYpOwkvKiBGaWxsIFJYIHJpbmcgd2l0aCBza2IncyAqLworCW12NjQzeHhfZXRoX3J4X3JlZmlsbF9kZXNjcyhkZXYpOwkvKiBGaWxsIFJYIHJpbmcgd2l0aCBza2IncyAqLwogCi0JZXRoX3BvcnRfc3RhcnQobXApOworCS8qIENsZWFyIGFueSBwZW5kaW5nIGV0aGVybmV0IHBvcnQgaW50ZXJydXB0cyAqLworCW12X3dyaXRlKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9DQVVTRV9SRUcocG9ydF9udW0pLCAwKTsKKwltdl93cml0ZShNVjY0M1hYX0VUSF9JTlRFUlJVUFRfQ0FVU0VfRVhURU5EX1JFRyhwb3J0X251bSksIDApOworCisJZXRoX3BvcnRfc3RhcnQoZGV2KTsKIAogCS8qIEludGVycnVwdCBDb2FsZXNjaW5nICovCiAKQEAgLTg1MywxNiArODc1LDEzIEBACiAJbXAtPnR4X2ludF9jb2FsID0KIAkJZXRoX3BvcnRfc2V0X3R4X2NvYWwocG9ydF9udW0sIDEzMzAwMDAwMCwgTVY2NDNYWF9UWF9DT0FMKTsKIAotCS8qIENsZWFyIGFueSBwZW5kaW5nIGV0aGVybmV0IHBvcnQgaW50ZXJydXB0cyAqLwotCW12X3dyaXRlKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9DQVVTRV9SRUcocG9ydF9udW0pLCAwKTsKLQltdl93cml0ZShNVjY0M1hYX0VUSF9JTlRFUlJVUFRfQ0FVU0VfRVhURU5EX1JFRyhwb3J0X251bSksIDApOwotCiAJLyogVW5tYXNrIHBoeSBhbmQgbGluayBzdGF0dXMgY2hhbmdlcyBpbnRlcnJ1cHRzICovCiAJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX0VYVEVORF9NQVNLX1JFRyhwb3J0X251bSksCi0JCQkJCQlJTlRfVU5NQVNLX0FMTF9FWFQpOworCQkJCQkJRVRIX0lOVF9VTk1BU0tfQUxMX0VYVCk7CiAKIAkvKiBVbm1hc2sgUlggYnVmZmVyIGFuZCBUWCBlbmQgaW50ZXJydXB0ICovCi0JbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgSU5UX1VOTUFTS19BTEwpOworCW12X3dyaXRlKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIEVUSF9JTlRfVU5NQVNLX0FMTCk7CisKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfdHhfc2tiOgpAQCAtODc4LDI1ICs4OTcsMTQgQEAKIHN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2ZyZWVfdHhfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwotCXVuc2lnbmVkIGludCBjdXJyOwotCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkvKiBTdG9wIFR4IFF1ZXVlcyAqLwotCW12X3dyaXRlKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSwgMHgwMDAwZmYwMCk7CisJbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3R4KG1wLT5wb3J0X251bSk7CiAKLQkvKiBGcmVlIG91dHN0YW5kaW5nIHNrYidzIG9uIFRYIHJpbmdzICovCi0JZm9yIChjdXJyID0gMDsgbXAtPnR4X3Jpbmdfc2ticyAmJiBjdXJyIDwgbXAtPnR4X3Jpbmdfc2l6ZTsgY3VycisrKSB7Ci0JCXNrYiA9IG1wLT50eF9za2JbY3Vycl07Ci0JCWlmIChza2IpIHsKLQkJCW1wLT50eF9yaW5nX3NrYnMgLT0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCW1wLT50eF9yaW5nX3NrYnMtLTsKLQkJfQotCX0KLQlpZiAobXAtPnR4X3Jpbmdfc2ticykKLQkJcHJpbnRrKCIlczogRXJyb3Igb24gVHggZGVzY3JpcHRvciBmcmVlIC0gY291bGQgbm90IGZyZWUgJWQiCi0JCQkJIiBkZXNjcmlwdG9yc1xuIiwgZGV2LT5uYW1lLCBtcC0+dHhfcmluZ19za2JzKTsKKwkvKiBGcmVlIG91dHN0YW5kaW5nIHNrYidzIG9uIFRYIHJpbmcgKi8KKwltdjY0M3h4X2V0aF9mcmVlX2FsbF90eF9kZXNjcyhkZXYpOworCisJQlVHX09OKG1wLT50eF91c2VkX2Rlc2NfcSAhPSBtcC0+dHhfY3Vycl9kZXNjX3EpOwogCiAJLyogRnJlZSBUWCByaW5nICovCiAJaWYgKG1wLT50eF9zcmFtX3NpemUpCkBAIC05MTMsMjEgKzkyMSwyMSBAQAogCWludCBjdXJyOwogCiAJLyogU3RvcCBSWCBRdWV1ZXMgKi8KLQltdl93cml0ZShNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSwgMHgwMDAwZmYwMCk7CisJbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3J4KHBvcnRfbnVtKTsKIAogCS8qIEZyZWUgcHJlYWxsb2NhdGVkIHNrYidzIG9uIFJYIHJpbmdzICovCi0JZm9yIChjdXJyID0gMDsgbXAtPnJ4X3Jpbmdfc2ticyAmJiBjdXJyIDwgbXAtPnJ4X3Jpbmdfc2l6ZTsgY3VycisrKSB7CisJZm9yIChjdXJyID0gMDsgbXAtPnJ4X2Rlc2NfY291bnQgJiYgY3VyciA8IG1wLT5yeF9yaW5nX3NpemU7IGN1cnIrKykgewogCQlpZiAobXAtPnJ4X3NrYltjdXJyXSkgewogCQkJZGV2X2tmcmVlX3NrYihtcC0+cnhfc2tiW2N1cnJdKTsKLQkJCW1wLT5yeF9yaW5nX3NrYnMtLTsKKwkJCW1wLT5yeF9kZXNjX2NvdW50LS07CiAJCX0KIAl9CiAKLQlpZiAobXAtPnJ4X3Jpbmdfc2ticykKKwlpZiAobXAtPnJ4X2Rlc2NfY291bnQpCiAJCXByaW50ayhLRVJOX0VSUgogCQkJIiVzOiBFcnJvciBpbiBmcmVlaW5nIFJ4IFJpbmcuICVkIHNrYidzIHN0aWxsIgogCQkJIiBzdHVjayBpbiBSWCBSaW5nIC0gaWdub3JpbmcgdGhlbVxuIiwgZGV2LT5uYW1lLAotCQkJbXAtPnJ4X3Jpbmdfc2ticyk7CisJCQltcC0+cnhfZGVzY19jb3VudCk7CiAJLyogRnJlZSBSWCByaW5nICovCiAJaWYgKG1wLT5yeF9zcmFtX3NpemUpCiAJCWlvdW5tYXAobXAtPnBfcnhfZGVzY19hcmVhKTsKQEAgLTk1Miw3ICs5NjAsNyBAQAogCXVuc2lnbmVkIGludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKIAogCS8qIE1hc2sgYWxsIGludGVycnVwdHMgb24gZXRoZXJuZXQgcG9ydCAqLwotCW12X3dyaXRlKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIElOVF9NQVNLX0FMTCk7CisJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgRVRIX0lOVF9NQVNLX0FMTCk7CiAJLyogd2FpdCBmb3IgcHJldmlvdXMgd3JpdGUgdG8gY29tcGxldGUgKi8KIAltdl9yZWFkKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSkpOwogCkBAIC05NzcsMzAgKzk4NSw2IEBACiB9CiAKICNpZmRlZiBNVjY0M1hYX05BUEkKLXN0YXRpYyB2b2lkIG12NjQzeHhfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHBrdF9pbmZvIHBrdF9pbmZvOwotCi0Jd2hpbGUgKGV0aF90eF9yZXR1cm5fZGVzYyhtcCwgJnBrdF9pbmZvKSA9PSBFVEhfT0spIHsKLQkJaWYgKHBrdF9pbmZvLmNtZF9zdHMgJiBFVEhfVFhfRklSU1RfREVTQykKLQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgcGt0X2luZm8uYnVmX3B0ciwKLQkJCQkJcGt0X2luZm8uYnl0ZV9jbnQsCi0JCQkJCURNQV9UT19ERVZJQ0UpOwotCQllbHNlCi0JCQlkbWFfdW5tYXBfcGFnZShOVUxMLCBwa3RfaW5mby5idWZfcHRyLAotCQkJCQlwa3RfaW5mby5ieXRlX2NudCwKLQkJCQkJRE1BX1RPX0RFVklDRSk7Ci0KLQkJaWYgKHBrdF9pbmZvLnJldHVybl9pbmZvKQotCQkJZGV2X2tmcmVlX3NrYl9pcnEocGt0X2luZm8ucmV0dXJuX2luZm8pOwotCX0KLQotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYKLQkJCW1wLT50eF9yaW5nX3NpemUgPiBtcC0+dHhfcmluZ19za2JzICsgTUFYX0RFU0NTX1BFUl9TS0IpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLX0KLQogLyoKICAqIG12NjQzeHhfcG9sbAogICoKQEAgLTEwMTQsNyArOTk4LDcgQEAKIAogI2lmZGVmIE1WNjQzWFhfVFhfRkFTVF9SRUZJTEwKIAlpZiAoKyttcC0+dHhfY2xlYW5fdGhyZXNob2xkID4gNSkgewotCQltdjY0M3h4X3R4KGRldik7CisJCW12NjQzeHhfZXRoX2ZyZWVfY29tcGxldGVkX3R4X2Rlc2NzKGRldik7CiAJCW1wLT50eF9jbGVhbl90aHJlc2hvbGQgPSAwOwogCX0KICNlbmRpZgpAQCAtMTAyNSw3ICsxMDA5LDYgQEAKIAkJaWYgKG9yaWdfYnVkZ2V0ID4gZGV2LT5xdW90YSkKIAkJCW9yaWdfYnVkZ2V0ID0gZGV2LT5xdW90YTsKIAkJd29ya19kb25lID0gbXY2NDN4eF9ldGhfcmVjZWl2ZV9xdWV1ZShkZXYsIG9yaWdfYnVkZ2V0KTsKLQkJbXAtPnJ4X3Rhc2suZnVuYyhkZXYpOwogCQkqYnVkZ2V0IC09IHdvcmtfZG9uZTsKIAkJZGV2LT5xdW90YSAtPSB3b3JrX2RvbmU7CiAJCWlmICh3b3JrX2RvbmUgPj0gb3JpZ19idWRnZXQpCkBAIC0xMDM3LDE0ICsxMDIwLDE3IEBACiAJCW12X3dyaXRlKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9DQVVTRV9SRUcocG9ydF9udW0pLCAwKTsKIAkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX0NBVVNFX0VYVEVORF9SRUcocG9ydF9udW0pLCAwKTsKIAkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwKLQkJCQkJCUlOVF9VTk1BU0tfQUxMKTsKKwkJCQkJCUVUSF9JTlRfVU5NQVNLX0FMTCk7CiAJfQogCiAJcmV0dXJuIGRvbmUgPyAwIDogMTsKIH0KICNlbmRpZgogCi0vKiBIYXJkd2FyZSBjYW4ndCBoYW5kbGUgdW5hbGlnbmVkIGZyYWdtZW50cyBzbWFsbGVyIHRoYW4gOSBieXRlcy4KKy8qKgorICogaGFzX3RpbnlfdW5hbGlnbmVkX2ZyYWdzIC0gY2hlY2sgaWYgc2tiIGhhcyBhbnkgc21hbGwsIHVuYWxpZ25lZCBmcmFnbWVudHMKKyAqCisgKiBIYXJkd2FyZSBjYW4ndCBoYW5kbGUgdW5hbGlnbmVkIGZyYWdtZW50cyBzbWFsbGVyIHRoYW4gOSBieXRlcy4KICAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGRldGVjdHMgdGhhdCBjYXNlLgogICovCiAKQEAgLTEwNjEsNTEgKzEwNDcsMTQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogZXRoX2FsbG9jX3R4X2Rlc2NfaW5kZXggLSByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXh0IGF2YWlsYWJsZSB0eCBkZXNjCisgKi8KK3N0YXRpYyBpbnQgZXRoX2FsbG9jX3R4X2Rlc2NfaW5kZXgoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCit7CisJaW50IHR4X2Rlc2NfY3VycjsKIAotLyoKLSAqIG12NjQzeHhfZXRoX3N0YXJ0X3htaXQKKwlCVUdfT04obXAtPnR4X2Rlc2NfY291bnQgPj0gbXAtPnR4X3Jpbmdfc2l6ZSk7CisKKwl0eF9kZXNjX2N1cnIgPSBtcC0+dHhfY3Vycl9kZXNjX3E7CisJbXAtPnR4X2N1cnJfZGVzY19xID0gKHR4X2Rlc2NfY3VyciArIDEpICUgbXAtPnR4X3Jpbmdfc2l6ZTsKKworCUJVR19PTihtcC0+dHhfY3Vycl9kZXNjX3EgPT0gbXAtPnR4X3VzZWRfZGVzY19xKTsKKworCXJldHVybiB0eF9kZXNjX2N1cnI7Cit9CisKKy8qKgorICogZXRoX3R4X2ZpbGxfZnJhZ19kZXNjcyAtIGZpbGwgdHggaHcgZGVzY3JpcHRvcnMgZm9yIGFuIHNrYidzIGZyYWdtZW50cy4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHF1ZXVlcyBhIHBhY2tldCBpbiB0aGUgVHggZGVzY3JpcHRvciBmb3IKLSAqIHJlcXVpcmVkIHBvcnQuCisgKiBFbnN1cmUgdGhlIGRhdGEgZm9yIGVhY2ggZnJhZ21lbnQgdG8gYmUgdHJhbnNtaXR0ZWQgaXMgbWFwcGVkIHByb3Blcmx5LAorICogdGhlbiBmaWxsIGluIGRlc2NyaXB0b3JzIGluIHRoZSB0eCBodyBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgZXRoX3R4X2ZpbGxfZnJhZ19kZXNjcyhzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBmcmFnOworCWludCB0eF9pbmRleDsKKwlzdHJ1Y3QgZXRoX3R4X2Rlc2MgKmRlc2M7CisKKwlmb3IgKGZyYWcgPSAwOyBmcmFnIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgZnJhZysrKSB7CisJCXNrYl9mcmFnX3QgKnRoaXNfZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZyYWddOworCisJCXR4X2luZGV4ID0gZXRoX2FsbG9jX3R4X2Rlc2NfaW5kZXgobXApOworCQlkZXNjID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9pbmRleF07CisKKwkJZGVzYy0+Y21kX3N0cyA9IEVUSF9CVUZGRVJfT1dORURfQllfRE1BOworCQkvKiBMYXN0IEZyYWcgZW5hYmxlcyBpbnRlcnJ1cHQgYW5kIGZyZWVzIHRoZSBza2IgKi8KKwkJaWYgKGZyYWcgPT0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgLSAxKSkgeworCQkJZGVzYy0+Y21kX3N0cyB8PSBFVEhfWkVST19QQURESU5HIHwKKwkJCQkJIEVUSF9UWF9MQVNUX0RFU0MgfAorCQkJCQkgRVRIX1RYX0VOQUJMRV9JTlRFUlJVUFQ7CisJCQltcC0+dHhfc2tiW3R4X2luZGV4XSA9IHNrYjsKKwkJfSBlbHNlCisJCQltcC0+dHhfc2tiW3R4X2luZGV4XSA9IDA7CisKKwkJZGVzYyA9ICZtcC0+cF90eF9kZXNjX2FyZWFbdHhfaW5kZXhdOworCQlkZXNjLT5sNGlfY2hrID0gMDsKKwkJZGVzYy0+Ynl0ZV9jbnQgPSB0aGlzX2ZyYWctPnNpemU7CisJCWRlc2MtPmJ1Zl9wdHIgPSBkbWFfbWFwX3BhZ2UoTlVMTCwgdGhpc19mcmFnLT5wYWdlLAorCQkJCQkJdGhpc19mcmFnLT5wYWdlX29mZnNldCwKKwkJCQkJCXRoaXNfZnJhZy0+c2l6ZSwKKwkJCQkJCURNQV9UT19ERVZJQ0UpOworCX0KK30KKworLyoqCisgKiBldGhfdHhfc3VibWl0X2Rlc2NzX2Zvcl9za2IgLSBzdWJtaXQgZGF0YSBmcm9tIGFuIHNrYiB0byB0aGUgdHggaHcKICAqCi0gKiBJbnB1dCA6CXNrYiAtIGEgcG9pbnRlciB0byBzb2NrZXQgYnVmZmVyCi0gKgkJZGV2IC0gYSBwb2ludGVyIHRvIHRoZSByZXF1aXJlZCBwb3J0CisgKiBFbnN1cmUgdGhlIGRhdGEgZm9yIGFuIHNrYiB0byBiZSB0cmFuc21pdHRlZCBpcyBtYXBwZWQgcHJvcGVybHksCisgKiB0aGVuIGZpbGwgaW4gZGVzY3JpcHRvcnMgaW4gdGhlIHR4IGh3IHF1ZXVlIGFuZCBzdGFydCB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGV0aF90eF9zdWJtaXRfZGVzY3NfZm9yX3NrYihzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgdHhfaW5kZXg7CisJc3RydWN0IGV0aF90eF9kZXNjICpkZXNjOworCXUzMiBjbWRfc3RzOworCWludCBsZW5ndGg7CisJaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKworCWNtZF9zdHMgPSBFVEhfVFhfRklSU1RfREVTQyB8IEVUSF9HRU5fQ1JDIHwgRVRIX0JVRkZFUl9PV05FRF9CWV9ETUE7CisKKwl0eF9pbmRleCA9IGV0aF9hbGxvY190eF9kZXNjX2luZGV4KG1wKTsKKwlkZXNjID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9pbmRleF07CisKKwlpZiAobnJfZnJhZ3MpIHsKKwkJZXRoX3R4X2ZpbGxfZnJhZ19kZXNjcyhtcCwgc2tiKTsKKworCQlsZW5ndGggPSBza2JfaGVhZGxlbihza2IpOworCQltcC0+dHhfc2tiW3R4X2luZGV4XSA9IDA7CisJfSBlbHNlIHsKKwkJY21kX3N0cyB8PSBFVEhfWkVST19QQURESU5HIHwKKwkJCSAgIEVUSF9UWF9MQVNUX0RFU0MgfAorCQkJICAgRVRIX1RYX0VOQUJMRV9JTlRFUlJVUFQ7CisJCWxlbmd0aCA9IHNrYi0+bGVuOworCQltcC0+dHhfc2tiW3R4X2luZGV4XSA9IHNrYjsKKwl9CisKKwlkZXNjLT5ieXRlX2NudCA9IGxlbmd0aDsKKwlkZXNjLT5idWZfcHRyID0gZG1hX21hcF9zaW5nbGUoTlVMTCwgc2tiLT5kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7CisJCUJVR19PTihza2ItPnByb3RvY29sICE9IEVUSF9QX0lQKTsKKworCQljbWRfc3RzIHw9IEVUSF9HRU5fVENQX1VEUF9DSEVDS1NVTSB8CisJCQkgICBFVEhfR0VOX0lQX1ZfNF9DSEVDS1NVTSAgfAorCQkJICAgc2tiLT5uaC5pcGgtPmlobCA8PCBFVEhfVFhfSUhMX1NISUZUOworCisJCXN3aXRjaCAoc2tiLT5uaC5pcGgtPnByb3RvY29sKSB7CisJCWNhc2UgSVBQUk9UT19VRFA6CisJCQljbWRfc3RzIHw9IEVUSF9VRFBfRlJBTUU7CisJCQlkZXNjLT5sNGlfY2hrID0gc2tiLT5oLnVoLT5jaGVjazsKKwkJCWJyZWFrOworCQljYXNlIElQUFJPVE9fVENQOgorCQkJZGVzYy0+bDRpX2NoayA9IHNrYi0+aC50aC0+Y2hlY2s7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJfSBlbHNlIHsKKwkJLyogRXJyYXRhIEJUUyAjNTAsIElITCBtdXN0IGJlIDUgaWYgbm8gSFcgY2hlY2tzdW0gKi8KKwkJY21kX3N0cyB8PSA1IDw8IEVUSF9UWF9JSExfU0hJRlQ7CisJCWRlc2MtPmw0aV9jaGsgPSAwOworCX0KKworCS8qIGVuc3VyZSBhbGwgb3RoZXIgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4gYmVmb3JlIGZpcnN0IGNtZF9zdHMgKi8KKwl3bWIoKTsKKwlkZXNjLT5jbWRfc3RzID0gY21kX3N0czsKKworCS8qIGVuc3VyZSBhbGwgZGVzY3JpcHRvcnMgYXJlIHdyaXR0ZW4gYmVmb3JlIHBva2luZyBoYXJkd2FyZSAqLworCXdtYigpOworCW12NjQzeHhfZXRoX3BvcnRfZW5hYmxlX3R4KG1wLT5wb3J0X251bSwgRVRIX1RYX1FVRVVFU19FTkFCTEVEKTsKKworCW1wLT50eF9kZXNjX2NvdW50ICs9IG5yX2ZyYWdzICsgMTsKK30KKworLyoqCisgKiBtdjY0M3h4X2V0aF9zdGFydF94bWl0IC0gcXVldWUgYW4gc2tiIHRvIHRoZSBoYXJkd2FyZSBmb3IgdHJhbnNtaXNzaW9uCiAgKgotICogT3V0cHV0IDoJemVybyB1cG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBtdjY0M3h4X2V0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZtcC0+c3RhdHM7Ci0JRVRIX0ZVTkNfUkVUX1NUQVRVUyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcGt0X2luZm8gcGt0X2luZm87CiAKLQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzOiBUcmllZCBzZW5kaW5nIHBhY2tldCB3aGVuIGludGVyZmFjZSBpcyBzdG9wcGVkXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJcmV0dXJuIDE7Ci0JfQorCUJVR19PTihuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpOworCUJVR19PTihza2IgPT0gTlVMTCk7CisJQlVHX09OKG1wLT50eF9yaW5nX3NpemUgLSBtcC0+dHhfZGVzY19jb3VudCA8IE1BWF9ERVNDU19QRVJfU0tCKTsKIAotCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCi0JaWYgKChtcC0+dHhfcmluZ19zaXplIC0gbXAtPnR4X3Jpbmdfc2ticykgPD0KLQkJCQkJKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkgewotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzOiBCdWcgaW4gbXY2NDN4eF9ldGggLSBUcnlpbmcgdG8gdHJhbnNtaXQgd2hlbiIKLQkJCSIgcXVldWUgZnVsbCAhXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBQYXJhbm9pZCBjaGVjayAtIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAqLwotCWlmIChza2IgPT0gTlVMTCkgewotCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwotCQlwcmludGsoS0VSTl9FUlIgIm12NjQzMjBfZXRoIHBhcmFub2lkIGNoZWNrIGZhaWxlZFxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotI2lmZGVmIE1WNjQzWFhfQ0hFQ0tTVU1fT0ZGTE9BRF9UWAogCWlmIChoYXNfdGlueV91bmFsaWduZWRfZnJhZ3Moc2tiKSkgewogCQlpZiAoKHNrYl9saW5lYXJpemUoc2tiLCBHRlBfQVRPTUlDKSAhPSAwKSkgewogCQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKQEAgLTExMTcsMTY3ICsxMTk5LDE0IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXAtPmxvY2ssIGZsYWdzKTsKIAotCWlmICghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykgewotCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fSFcpIHsKLQkJCS8qIEVycmF0YSBCVFMgIzUwLCBJSEwgbXVzdCBiZSA1IGlmIG5vIEhXIGNoZWNrc3VtICovCi0JCQlwa3RfaW5mby5jbWRfc3RzID0gRVRIX1RYX0VOQUJMRV9JTlRFUlJVUFQgfAotCQkJCQkgICBFVEhfVFhfRklSU1RfREVTQyB8Ci0JCQkJCSAgIEVUSF9UWF9MQVNUX0RFU0MgfAotCQkJCQkgICA1IDw8IEVUSF9UWF9JSExfU0hJRlQ7Ci0JCQlwa3RfaW5mby5sNGlfY2hrID0gMDsKLQkJfSBlbHNlIHsKLQkJCXBrdF9pbmZvLmNtZF9zdHMgPSBFVEhfVFhfRU5BQkxFX0lOVEVSUlVQVCB8Ci0JCQkJCSAgIEVUSF9UWF9GSVJTVF9ERVNDIHwKLQkJCQkJICAgRVRIX1RYX0xBU1RfREVTQyB8Ci0JCQkJCSAgIEVUSF9HRU5fVENQX1VEUF9DSEVDS1NVTSB8Ci0JCQkJCSAgIEVUSF9HRU5fSVBfVl80X0NIRUNLU1VNIHwKLQkJCQkJICAgc2tiLT5uaC5pcGgtPmlobCA8PCBFVEhfVFhfSUhMX1NISUZUOwotCQkJLyogQ1BVIGFscmVhZHkgY2FsY3VsYXRlZCBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtLiAqLwotCQkJaWYgKChza2ItPnByb3RvY29sID09IEVUSF9QX0lQKSAmJgotCQkJICAgIChza2ItPm5oLmlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApICkgewotCQkJCXBrdF9pbmZvLmNtZF9zdHMgfD0gRVRIX1VEUF9GUkFNRTsKLQkJCQlwa3RfaW5mby5sNGlfY2hrID0gc2tiLT5oLnVoLT5jaGVjazsKLQkJCX0gZWxzZSBpZiAoKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVApICYmCi0JCQkJICAgKHNrYi0+bmguaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkpCi0JCQkJcGt0X2luZm8ubDRpX2NoayA9IHNrYi0+aC50aC0+Y2hlY2s7Ci0JCQllbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJIiVzOiBjaGtzdW0gcHJvdG8gIT0gSVB2NCBUQ1Agb3IgVURQXG4iLAotCQkJCQlkZXYtPm5hbWUpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5sb2NrLCBmbGFncyk7Ci0JCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCX0KLQkJcGt0X2luZm8uYnl0ZV9jbnQgPSBza2ItPmxlbjsKLQkJcGt0X2luZm8uYnVmX3B0ciA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJCQkJRE1BX1RPX0RFVklDRSk7Ci0JCXBrdF9pbmZvLnJldHVybl9pbmZvID0gc2tiOwotCQlzdGF0dXMgPSBldGhfcG9ydF9zZW5kKG1wLCAmcGt0X2luZm8pOwotCQlpZiAoKHN0YXR1cyA9PSBFVEhfRVJST1IpIHx8IChzdGF0dXMgPT0gRVRIX1FVRVVFX0ZVTEwpKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igb24gdHJhbnNtaXR0aW5nIHBhY2tldFxuIiwKLQkJCQkJCQkJZGV2LT5uYW1lKTsKLQkJc3RhdHMtPnR4X2J5dGVzICs9IHBrdF9pbmZvLmJ5dGVfY250OwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBmcmFnOwotCi0JCS8qIGZpcnN0IGZyYWcgd2hpY2ggaXMgc2tiIGhlYWRlciAqLwotCQlwa3RfaW5mby5ieXRlX2NudCA9IHNrYl9oZWFkbGVuKHNrYik7Ci0JCXBrdF9pbmZvLmJ1Zl9wdHIgPSBkbWFfbWFwX3NpbmdsZShOVUxMLCBza2ItPmRhdGEsCi0JCQkJCQkJc2tiX2hlYWRsZW4oc2tiKSwKLQkJCQkJCQlETUFfVE9fREVWSUNFKTsKLQkJcGt0X2luZm8ubDRpX2NoayA9IDA7Ci0JCXBrdF9pbmZvLnJldHVybl9pbmZvID0gMDsKLQotCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fSFcpCi0JCQkvKiBFcnJhdGEgQlRTICM1MCwgSUhMIG11c3QgYmUgNSBpZiBubyBIVyBjaGVja3N1bSAqLwotCQkJcGt0X2luZm8uY21kX3N0cyA9IEVUSF9UWF9GSVJTVF9ERVNDIHwKLQkJCQkJICAgNSA8PCBFVEhfVFhfSUhMX1NISUZUOwotCQllbHNlIHsKLQkJCXBrdF9pbmZvLmNtZF9zdHMgPSBFVEhfVFhfRklSU1RfREVTQyB8Ci0JCQkJCSAgIEVUSF9HRU5fVENQX1VEUF9DSEVDS1NVTSB8Ci0JCQkJCSAgIEVUSF9HRU5fSVBfVl80X0NIRUNLU1VNIHwKLQkJCQkJICAgc2tiLT5uaC5pcGgtPmlobCA8PCBFVEhfVFhfSUhMX1NISUZUOwotCQkJLyogQ1BVIGFscmVhZHkgY2FsY3VsYXRlZCBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtLiAqLwotCQkJaWYgKChza2ItPnByb3RvY29sID09IEVUSF9QX0lQKSAmJgotCQkJICAgIChza2ItPm5oLmlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApKSB7Ci0JCQkJcGt0X2luZm8uY21kX3N0cyB8PSBFVEhfVURQX0ZSQU1FOwotCQkJCXBrdF9pbmZvLmw0aV9jaGsgPSBza2ItPmgudWgtPmNoZWNrOwotCQkJfSBlbHNlIGlmICgoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUCkgJiYKLQkJCQkgICAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSkKLQkJCQlwa3RfaW5mby5sNGlfY2hrID0gc2tiLT5oLnRoLT5jaGVjazsKLQkJCWVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiJXM6IGNoa3N1bSBwcm90byAhPSBJUHY0IFRDUCBvciBVRFBcbiIsCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQotCi0JCXN0YXR1cyA9IGV0aF9wb3J0X3NlbmQobXAsICZwa3RfaW5mbyk7Ci0JCWlmIChzdGF0dXMgIT0gRVRIX09LKSB7Ci0JCQlpZiAoKHN0YXR1cyA9PSBFVEhfRVJST1IpKQotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiJXM6IEVycm9yIG9uIHRyYW5zbWl0dGluZyBwYWNrZXRcbiIsCi0JCQkJCWRldi0+bmFtZSk7Ci0JCQlpZiAoc3RhdHVzID09IEVUSF9RVUVVRV9GVUxMKQotCQkJCXByaW50aygiRXJyb3Igb24gUXVldWUgRnVsbCBcbiIpOwotCQkJaWYgKHN0YXR1cyA9PSBFVEhfUVVFVUVfTEFTVF9SRVNPVVJDRSkKLQkJCQlwcmludGsoIlR4IHJlc291cmNlIGVycm9yIFxuIik7Ci0JCX0KLQkJc3RhdHMtPnR4X2J5dGVzICs9IHBrdF9pbmZvLmJ5dGVfY250OwotCi0JCS8qIENoZWNrIGZvciB0aGUgcmVtYWluaW5nIGZyYWdzICovCi0JCWZvciAoZnJhZyA9IDA7IGZyYWcgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBmcmFnKyspIHsKLQkJCXNrYl9mcmFnX3QgKnRoaXNfZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZyYWddOwotCQkJcGt0X2luZm8ubDRpX2NoayA9IDB4MDAwMDsKLQkJCXBrdF9pbmZvLmNtZF9zdHMgPSAweDAwMDAwMDAwOwotCi0JCQkvKiBMYXN0IEZyYWcgZW5hYmxlcyBpbnRlcnJ1cHQgYW5kIGZyZWVzIHRoZSBza2IgKi8KLQkJCWlmIChmcmFnID09IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMSkpIHsKLQkJCQlwa3RfaW5mby5jbWRfc3RzIHw9IEVUSF9UWF9FTkFCTEVfSU5URVJSVVBUIHwKLQkJCQkJCQlFVEhfVFhfTEFTVF9ERVNDOwotCQkJCXBrdF9pbmZvLnJldHVybl9pbmZvID0gc2tiOwotCQkJfSBlbHNlIHsKLQkJCQlwa3RfaW5mby5yZXR1cm5faW5mbyA9IDA7Ci0JCQl9Ci0JCQlwa3RfaW5mby5sNGlfY2hrID0gMDsKLQkJCXBrdF9pbmZvLmJ5dGVfY250ID0gdGhpc19mcmFnLT5zaXplOwotCi0JCQlwa3RfaW5mby5idWZfcHRyID0gZG1hX21hcF9wYWdlKE5VTEwsIHRoaXNfZnJhZy0+cGFnZSwKLQkJCQkJCQl0aGlzX2ZyYWctPnBhZ2Vfb2Zmc2V0LAotCQkJCQkJCXRoaXNfZnJhZy0+c2l6ZSwKLQkJCQkJCQlETUFfVE9fREVWSUNFKTsKLQotCQkJc3RhdHVzID0gZXRoX3BvcnRfc2VuZChtcCwgJnBrdF9pbmZvKTsKLQotCQkJaWYgKHN0YXR1cyAhPSBFVEhfT0spIHsKLQkJCQlpZiAoKHN0YXR1cyA9PSBFVEhfRVJST1IpKQotCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBvbiAiCi0JCQkJCQkJInRyYW5zbWl0dGluZyBwYWNrZXRcbiIsCi0JCQkJCQkJZGV2LT5uYW1lKTsKLQotCQkJCWlmIChzdGF0dXMgPT0gRVRIX1FVRVVFX0xBU1RfUkVTT1VSQ0UpCi0JCQkJCXByaW50aygiVHggcmVzb3VyY2UgZXJyb3IgXG4iKTsKLQotCQkJCWlmIChzdGF0dXMgPT0gRVRIX1FVRVVFX0ZVTEwpCi0JCQkJCXByaW50aygiUXVldWUgaXMgZnVsbCBcbiIpOwotCQkJfQotCQkJc3RhdHMtPnR4X2J5dGVzICs9IHBrdF9pbmZvLmJ5dGVfY250OwotCQl9Ci0JfQotI2Vsc2UKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXAtPmxvY2ssIGZsYWdzKTsKLQotCXBrdF9pbmZvLmNtZF9zdHMgPSBFVEhfVFhfRU5BQkxFX0lOVEVSUlVQVCB8IEVUSF9UWF9GSVJTVF9ERVNDIHwKLQkJCQkJCQlFVEhfVFhfTEFTVF9ERVNDOwotCXBrdF9pbmZvLmw0aV9jaGsgPSAwOwotCXBrdF9pbmZvLmJ5dGVfY250ID0gc2tiLT5sZW47Ci0JcGt0X2luZm8uYnVmX3B0ciA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJCQkJCURNQV9UT19ERVZJQ0UpOwotCXBrdF9pbmZvLnJldHVybl9pbmZvID0gc2tiOwotCXN0YXR1cyA9IGV0aF9wb3J0X3NlbmQobXAsICZwa3RfaW5mbyk7Ci0JaWYgKChzdGF0dXMgPT0gRVRIX0VSUk9SKSB8fCAoc3RhdHVzID09IEVUSF9RVUVVRV9GVUxMKSkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igb24gdHJhbnNtaXR0aW5nIHBhY2tldFxuIiwKLQkJCQkJCQkJZGV2LT5uYW1lKTsKLQlzdGF0cy0+dHhfYnl0ZXMgKz0gcGt0X2luZm8uYnl0ZV9jbnQ7Ci0jZW5kaWYKLQotCS8qIENoZWNrIGlmIFRYIHF1ZXVlIGNhbiBoYW5kbGUgYW5vdGhlciBza2IuIElmIG5vdCwgdGhlbgotCSAqIHNpZ25hbCBoaWdoZXIgbGF5ZXJzIHRvIHN0b3AgcmVxdWVzdGluZyBUWAotCSAqLwotCWlmIChtcC0+dHhfcmluZ19zaXplIDw9IChtcC0+dHhfcmluZ19za2JzICsgTUFYX0RFU0NTX1BFUl9TS0IpKQotCQkvKgotCQkgKiBTdG9wIGdldHRpbmcgc2tiJ3MgZnJvbSB1cHBlciBsYXllcnMuCi0JCSAqIEdldHRpbmcgc2tiJ3MgZnJvbSB1cHBlciBsYXllcnMgd2lsbCBiZSBlbmFibGVkIGFnYWluIGFmdGVyCi0JCSAqIHBhY2tldHMgYXJlIHJlbGVhc2VkLgotCQkgKi8KLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogVXBkYXRlIHN0YXRpc3RpY3MgYW5kIHN0YXJ0IG9mIHRyYW5zbWl0dGlvbiB0aW1lICovCisJZXRoX3R4X3N1Ym1pdF9kZXNjc19mb3Jfc2tiKG1wLCBza2IpOworCXN0YXRzLT50eF9ieXRlcyA9IHNrYi0+bGVuOwogCXN0YXRzLT50eF9wYWNrZXRzKys7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKKwlpZiAobXAtPnR4X3Jpbmdfc2l6ZSAtIG1wLT50eF9kZXNjX2NvdW50IDwgTUFYX0RFU0NTX1BFUl9TS0IpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsJCS8qIHN1Y2Nlc3MgKi8KQEAgLTEzMDYsMTYgKzEyMzUsNDUgQEAKIAlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IHBvcnRfbnVtID0gbXAtPnBvcnRfbnVtOwogCi0JbXZfd3JpdGUoTVY2NDNYWF9FVEhfSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSwgSU5UX01BU0tfQUxMKTsKKwltdl93cml0ZShNVjY0M1hYX0VUSF9JTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX01BU0tfQUxMKTsKIAkvKiB3YWl0IGZvciBwcmV2aW91cyB3cml0ZSB0byBjb21wbGV0ZSAqLwogCW12X3JlYWQoTVY2NDNYWF9FVEhfSU5URVJSVVBUX01BU0tfUkVHKHBvcnRfbnVtKSk7CiAKIAltdjY0M3h4X2V0aF9pbnRfaGFuZGxlcihuZXRkZXYtPmlycSwgbmV0ZGV2LCBOVUxMKTsKIAotCW12X3dyaXRlKE1WNjQzWFhfRVRIX0lOVEVSUlVQVF9NQVNLX1JFRyhwb3J0X251bSksIElOVF9VTk1BU0tfQUxMKTsKKwltdl93cml0ZShNVjY0M1hYX0VUSF9JTlRFUlJVUFRfTUFTS19SRUcocG9ydF9udW0pLCBFVEhfSU5UX1VOTUFTS19BTEwpOwogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIG12NjQzeHhfaW5pdF9ldGh0b29sX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2FkZHJlc3MsCisJCQkJICAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOworCisJY21kLT5wb3J0ID0gUE9SVF9NSUk7CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJY21kLT5waHlfYWRkcmVzcyA9IHBoeV9hZGRyZXNzOworCisJaWYgKHNwZWVkID09IDApIHsKKwkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJCS8qIG1paSBsaWIgY2hlY2tzLCBidXQgZG9lc24ndCB1c2Ugc3BlZWQgb24gQVVUT05FR19FTkFCTEUgKi8KKwkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmICB8CisJCQkJICAgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgIHwKKwkJCQkgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCSAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwkJaWYgKG1wLT5taWkuc3VwcG9ydHNfZ21paSkKKwkJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKKwl9IGVsc2UgeworCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJCWNtZC0+c3BlZWQgPSBzcGVlZDsKKwkJY21kLT5kdXBsZXggPSBkdXBsZXg7CisJfQorfQorCiAvKi8KICAqIG12NjQzeHhfZXRoX3Byb2JlCiAgKgpAQCAtMTMzNiw2ICsxMjk0LDkgQEAKIAl1OCAqcDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyOworCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7CisJaW50IGR1cGxleCA9IERVUExFWF9IQUxGOworCWludCBzcGVlZCA9IDA7CQkJLyogZGVmYXVsdCB0byBhdXRvLW5lZ290aWF0aW9uICovCiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSkpOwogCWlmICghZGV2KQpAQCAtMTM3Myw2ICsxMzM0LDcgQEAKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IG1wLT50eF9yaW5nX3NpemU7CiAJZGV2LT5iYXNlX2FkZHIgPSAwOwogCWRldi0+Y2hhbmdlX210dSA9IG12NjQzeHhfZXRoX2NoYW5nZV9tdHU7CisJZGV2LT5kb19pb2N0bCA9IG12NjQzeHhfZXRoX2RvX2lvY3RsOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZtdjY0M3h4X2V0aHRvb2xfb3BzKTsKIAogI2lmZGVmIE1WNjQzWFhfQ0hFQ0tTVU1fT0ZGTE9BRF9UWApAQCAtMTM5MywzMyArMTM1NSwxNyBAQAogCiAJLyogc2V0IGRlZmF1bHQgY29uZmlnIHZhbHVlcyAqLwogCWV0aF9wb3J0X3VjX2FkZHJfZ2V0KGRldiwgZGV2LT5kZXZfYWRkcik7Ci0JbXAtPnBvcnRfY29uZmlnID0gTVY2NDNYWF9FVEhfUE9SVF9DT05GSUdfREVGQVVMVF9WQUxVRTsKLQltcC0+cG9ydF9jb25maWdfZXh0ZW5kID0gTVY2NDNYWF9FVEhfUE9SVF9DT05GSUdfRVhURU5EX0RFRkFVTFRfVkFMVUU7Ci0JbXAtPnBvcnRfc2RtYV9jb25maWcgPSBNVjY0M1hYX0VUSF9QT1JUX1NETUFfQ09ORklHX0RFRkFVTFRfVkFMVUU7Ci0JbXAtPnBvcnRfc2VyaWFsX2NvbnRyb2wgPSBNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX0RFRkFVTFRfVkFMVUU7CiAJbXAtPnJ4X3Jpbmdfc2l6ZSA9IE1WNjQzWFhfRVRIX1BPUlRfREVGQVVMVF9SRUNFSVZFX1FVRVVFX1NJWkU7CiAJbXAtPnR4X3Jpbmdfc2l6ZSA9IE1WNjQzWFhfRVRIX1BPUlRfREVGQVVMVF9UUkFOU01JVF9RVUVVRV9TSVpFOwogCiAJcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAocGQpIHsKLQkJaWYgKHBkLT5tYWNfYWRkciAhPSBOVUxMKQorCQlpZiAocGQtPm1hY19hZGRyKQogCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHBkLT5tYWNfYWRkciwgNik7CiAKIAkJaWYgKHBkLT5waHlfYWRkciB8fCBwZC0+Zm9yY2VfcGh5X2FkZHIpCiAJCQlldGhlcm5ldF9waHlfc2V0KHBvcnRfbnVtLCBwZC0+cGh5X2FkZHIpOwogCi0JCWlmIChwZC0+cG9ydF9jb25maWcgfHwgcGQtPmZvcmNlX3BvcnRfY29uZmlnKQotCQkJbXAtPnBvcnRfY29uZmlnID0gcGQtPnBvcnRfY29uZmlnOwotCi0JCWlmIChwZC0+cG9ydF9jb25maWdfZXh0ZW5kIHx8IHBkLT5mb3JjZV9wb3J0X2NvbmZpZ19leHRlbmQpCi0JCQltcC0+cG9ydF9jb25maWdfZXh0ZW5kID0gcGQtPnBvcnRfY29uZmlnX2V4dGVuZDsKLQotCQlpZiAocGQtPnBvcnRfc2RtYV9jb25maWcgfHwgcGQtPmZvcmNlX3BvcnRfc2RtYV9jb25maWcpCi0JCQltcC0+cG9ydF9zZG1hX2NvbmZpZyA9IHBkLT5wb3J0X3NkbWFfY29uZmlnOwotCi0JCWlmIChwZC0+cG9ydF9zZXJpYWxfY29udHJvbCB8fCBwZC0+Zm9yY2VfcG9ydF9zZXJpYWxfY29udHJvbCkKLQkJCW1wLT5wb3J0X3NlcmlhbF9jb250cm9sID0gcGQtPnBvcnRfc2VyaWFsX2NvbnRyb2w7Ci0KIAkJaWYgKHBkLT5yeF9xdWV1ZV9zaXplKQogCQkJbXAtPnJ4X3Jpbmdfc2l6ZSA9IHBkLT5yeF9xdWV1ZV9zaXplOwogCkBAIC0xNDM1LDE2ICsxMzgxLDMzIEBACiAJCQltcC0+cnhfc3JhbV9zaXplID0gcGQtPnJ4X3NyYW1fc2l6ZTsKIAkJCW1wLT5yeF9zcmFtX2FkZHIgPSBwZC0+cnhfc3JhbV9hZGRyOwogCQl9CisKKwkJZHVwbGV4ID0gcGQtPmR1cGxleDsKKwkJc3BlZWQgPSBwZC0+c3BlZWQ7CiAJfQogCisJLyogSG9vayB1cCBNSUkgc3VwcG9ydCBmb3IgZXRodG9vbCAqLworCW1wLT5taWkuZGV2ID0gZGV2OworCW1wLT5taWkubWRpb19yZWFkID0gbXY2NDN4eF9tZGlvX3JlYWQ7CisJbXAtPm1paS5tZGlvX3dyaXRlID0gbXY2NDN4eF9tZGlvX3dyaXRlOworCW1wLT5taWkucGh5X2lkID0gZXRoZXJuZXRfcGh5X2dldChwb3J0X251bSk7CisJbXAtPm1paS5waHlfaWRfbWFzayA9IDB4M2Y7CisJbXAtPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOworCiAJZXJyID0gZXRoZXJuZXRfcGh5X2RldGVjdChwb3J0X251bSk7CiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygiTVY2NDN4eCBldGhlcm5ldCBwb3J0ICVkOiAiCiAJCQkJCSJObyBQSFkgZGV0ZWN0ZWQgYXQgYWRkciAlZFxuIiwKIAkJCQkJcG9ydF9udW0sIGV0aGVybmV0X3BoeV9nZXQocG9ydF9udW0pKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAJfQogCisJZXRoZXJuZXRfcGh5X3Jlc2V0KHBvcnRfbnVtKTsKKwltcC0+bWlpLnN1cHBvcnRzX2dtaWkgPSBtaWlfY2hlY2tfZ21paV9zdXBwb3J0KCZtcC0+bWlpKTsKKwltdjY0M3h4X2luaXRfZXRodG9vbF9jbWQoZGV2LCBtcC0+bWlpLnBoeV9pZCwgc3BlZWQsIGR1cGxleCwgJmNtZCk7CisJbXY2NDN4eF9ldGhfdXBkYXRlX3BzY3IoZGV2LCAmY21kKTsKKwltdjY0M3h4X3NldF9zZXR0aW5ncyhkZXYsICZjbWQpOworCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC0xNjg5LDI2ICsxNjUyLDkgQEAKICAqCQl0byB0aGUgUnggZGVzY3JpcHRvciByaW5nIHRvIGVuYWJsZSB0aGUgcmV1c2Ugb2YgdGhpcyBzb3VyY2UuCiAgKgkJUmV0dXJuIFJ4IHJlc291cmNlIGlzIGRvbmUgdXNpbmcgdGhlIGV0aF9yeF9yZXR1cm5fYnVmZiBBUEkuCiAgKgotICoJCVRyYW5zbWl0IG9wZXJhdGlvbjoKLSAqCQlUaGUgZXRoX3BvcnRfc2VuZCBBUEkgc3VwcG9ydHMgU2NhdHRlci1HYXRoZXIgd2hpY2ggZW5hYmxlcyB0bwotICoJCXNlbmQgYSBwYWNrZXQgc3Bhbm5lZCBvdmVyIG11bHRpcGxlIGJ1ZmZlcnMuIFRoaXMgbWVhbnMgdGhhdAotICoJCWZvciBlYWNoIHBhY2tldCBpbmZvIHN0cnVjdHVyZSBnaXZlbiBieSB0aGUgdXNlciBhbmQgcHV0IGludG8KLSAqCQl0aGUgVHggZGVzY3JpcHRvcnMgcmluZywgd2lsbCBiZSB0cmFuc21pdHRlZCBvbmx5IGlmIHRoZSAnTEFTVCcKLSAqCQliaXQgd2lsbCBiZSBzZXQgaW4gdGhlIHBhY2tldCBpbmZvIGNvbW1hbmQgc3RhdHVzIGZpZWxkLiBUaGlzCi0gKgkJQVBJIGFsc28gY29uc2lkZXIgcmVzdHJpY3Rpb24gcmVnYXJkaW5nIGJ1ZmZlciBhbGlnbm1lbnRzIGFuZAotICoJCXNpemVzLgotICoJCVRoZSB1c2VyIG11c3QgcmV0dXJuIGEgVHggcmVzb3VyY2UgYWZ0ZXIgZW5zdXJpbmcgdGhlIGJ1ZmZlcgotICoJCWhhcyBiZWVuIHRyYW5zbWl0dGVkIHRvIGVuYWJsZSB0aGUgVHggcmluZyBpbmRleGVzIHRvIHVwZGF0ZS4KLSAqCi0gKgkJQk9BUkQgTEFZT1VUCi0gKgkJVGhpcyBkZXZpY2UgaXMgb24tYm9hcmQuICBObyBqdW1wZXIgZGlhZ3JhbSBpcyBuZWNlc3NhcnkuCi0gKgotICoJCUVYVEVSTkFMIElOVEVSRkFDRQotICoKICAqCVByaW9yIHRvIGNhbGxpbmcgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZXRoX3BvcnRfaW5pdCgpIHRoZSB1c2VyCiAgKgltdXN0IHNldCB0aGUgZm9sbG93aW5nIGZpZWxkcyB1bmRlciBtdjY0M3h4X3ByaXZhdGUgc3RydWN0OgogICoJcG9ydF9udW0JCVVzZXIgRXRoZXJuZXQgcG9ydCBudW1iZXIuCi0gKglwb3J0X21hY19hZGRyWzZdCVVzZXIgZGVmaW5lZCBwb3J0IE1BQyBhZGRyZXNzLgogICoJcG9ydF9jb25maWcJCVVzZXIgcG9ydCBjb25maWd1cmF0aW9uIHZhbHVlLgogICoJcG9ydF9jb25maWdfZXh0ZW5kCVVzZXIgcG9ydCBjb25maWcgZXh0ZW5kIHZhbHVlLgogICoJcG9ydF9zZG1hX2NvbmZpZwlVc2VyIHBvcnQgU0RNQSBjb25maWcgdmFsdWUuCkBAIC0xNzI1LDIwICsxNjcxLDEyIEBACiAgKgkJcmV0dXJuX2luZm8JVHgvUnggdXNlciByZXNvdXJjZSByZXR1cm4gaW5mb3JtYXRpb24uCiAgKi8KIAotLyogZGVmaW5lcyAqLwotLyogU0RNQSBjb21tYW5kIG1hY3JvcyAqLwotI2RlZmluZSBFVEhfRU5BQkxFX1RYX1FVRVVFKGV0aF9wb3J0KSBcCi0JbXZfd3JpdGUoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcoZXRoX3BvcnQpLCAxKQotCi0vKiBsb2NhbHMgKi8KLQogLyogUEhZIHJvdXRpbmVzICovCiBzdGF0aWMgaW50IGV0aGVybmV0X3BoeV9nZXQodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSk7CiBzdGF0aWMgdm9pZCBldGhlcm5ldF9waHlfc2V0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0sIGludCBwaHlfYWRkcik7CiAKIC8qIEV0aGVybmV0IFBvcnQgcm91dGluZXMgKi8KLXN0YXRpYyBpbnQgZXRoX3BvcnRfdWNfYWRkcih1bnNpZ25lZCBpbnQgZXRoX3BvcnRfbnVtLCB1bnNpZ25lZCBjaGFyIHVjX25pYmJsZSwKLQkJCQkJCQkJaW50IG9wdGlvbik7CitzdGF0aWMgdm9pZCBldGhfcG9ydF9zZXRfZmlsdGVyX3RhYmxlX2VudHJ5KGludCB0YWJsZSwgdW5zaWduZWQgY2hhciBlbnRyeSk7CiAKIC8qCiAgKiBldGhfcG9ydF9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgRXRoZXJuZXQgcG9ydCBkcml2ZXIKQEAgLTE3NjYsMTcgKzE3MDQsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgZXRoX3BvcnRfaW5pdChzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCkKIHsKLQltcC0+cG9ydF9yeF9xdWV1ZV9jb21tYW5kID0gMDsKLQltcC0+cG9ydF90eF9xdWV1ZV9jb21tYW5kID0gMDsKLQogCW1wLT5yeF9yZXNvdXJjZV9lcnIgPSAwOwotCW1wLT50eF9yZXNvdXJjZV9lcnIgPSAwOwogCiAJZXRoX3BvcnRfcmVzZXQobXAtPnBvcnRfbnVtKTsKIAogCWV0aF9wb3J0X2luaXRfbWFjX3RhYmxlcyhtcC0+cG9ydF9udW0pOwotCi0JZXRoZXJuZXRfcGh5X3Jlc2V0KG1wLT5wb3J0X251bSk7CiB9CiAKIC8qCkBAIC0xNzk4LDcgKzE3MzAsNyBAQAogICoJYW5kIGV0aGVyX2luaXRfcnhfZGVzY19yaW5nIGZvciBSeCBxdWV1ZXMpLgogICoKICAqIElOUFVUOgotICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAJRXRoZXJuZXQgcG9ydCBjb250cm9sIHN0cnVjdAorICoJZGV2IC0gYSBwb2ludGVyIHRvIHRoZSByZXF1aXJlZCBpbnRlcmZhY2UKICAqCiAgKiBPVVRQVVQ6CiAgKglFdGhlcm5ldCBwb3J0IGlzIHJlYWR5IHRvIHJlY2VpdmUgYW5kIHRyYW5zbWl0LgpAQCAtMTgwNiwxMCArMTczOCwxMyBAQAogICogUkVUVVJOOgogICoJTm9uZS4KICAqLwotc3RhdGljIHZvaWQgZXRoX3BvcnRfc3RhcnQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApCitzdGF0aWMgdm9pZCBldGhfcG9ydF9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgcG9ydF9udW0gPSBtcC0+cG9ydF9udW07CiAJaW50IHR4X2N1cnJfZGVzYywgcnhfY3Vycl9kZXNjOworCXUzMiBwc2NyOworCXN0cnVjdCBldGh0b29sX2NtZCBldGh0b29sX2NtZDsKIAogCS8qIEFzc2lnbm1lbnQgb2YgVHggQ1RSUCBvZiBnaXZlbiBxdWV1ZSAqLwogCXR4X2N1cnJfZGVzYyA9IG1wLT50eF9jdXJyX2Rlc2NfcTsKQEAgLTE4MjIsMzcgKzE3NTcsNDUgQEAKIAkJKHUzMikoKHN0cnVjdCBldGhfcnhfZGVzYyAqKW1wLT5yeF9kZXNjX2RtYSArIHJ4X2N1cnJfZGVzYykpOwogCiAJLyogQWRkIHRoZSBhc3NpZ25lZCBFdGhlcm5ldCBhZGRyZXNzIHRvIHRoZSBwb3J0J3MgYWRkcmVzcyB0YWJsZSAqLwotCWV0aF9wb3J0X3VjX2FkZHJfc2V0KHBvcnRfbnVtLCBtcC0+cG9ydF9tYWNfYWRkcik7CisJZXRoX3BvcnRfdWNfYWRkcl9zZXQocG9ydF9udW0sIGRldi0+ZGV2X2FkZHIpOwogCiAJLyogQXNzaWduIHBvcnQgY29uZmlndXJhdGlvbiBhbmQgY29tbWFuZC4gKi8KLQltdl93cml0ZShNVjY0M1hYX0VUSF9QT1JUX0NPTkZJR19SRUcocG9ydF9udW0pLCBtcC0+cG9ydF9jb25maWcpOworCW12X3dyaXRlKE1WNjQzWFhfRVRIX1BPUlRfQ09ORklHX1JFRyhwb3J0X251bSksCisJCQkgIE1WNjQzWFhfRVRIX1BPUlRfQ09ORklHX0RFRkFVTFRfVkFMVUUpOwogCiAJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUE9SVF9DT05GSUdfRVhURU5EX1JFRyhwb3J0X251bSksCi0JCQkJCQltcC0+cG9ydF9jb25maWdfZXh0ZW5kKTsKKwkJCSAgTVY2NDNYWF9FVEhfUE9SVF9DT05GSUdfRVhURU5EX0RFRkFVTFRfVkFMVUUpOwogCisJcHNjciA9IG12X3JlYWQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pKTsKIAotCS8qIEluY3JlYXNlIHRoZSBSeCBzaWRlIGJ1ZmZlciBzaXplIGlmIHN1cHBvcnRpbmcgR2lnRSAqLwotCWlmIChtcC0+cG9ydF9zZXJpYWxfY29udHJvbCAmIE1WNjQzWFhfRVRIX1NFVF9HTUlJX1NQRUVEX1RPXzEwMDApCi0JCW12X3dyaXRlKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwKLQkJCShtcC0+cG9ydF9zZXJpYWxfY29udHJvbCAmIDB4ZmZmMWZmZmYpIHwgKDB4NSA8PCAxNykpOwotCWVsc2UKLQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLAotCQkJCQkJbXAtPnBvcnRfc2VyaWFsX2NvbnRyb2wpOworCXBzY3IgJj0gfihNVjY0M1hYX0VUSF9TRVJJQUxfUE9SVF9FTkFCTEUgfCBNVjY0M1hYX0VUSF9GT1JDRV9MSU5LX1BBU1MpOworCW12X3dyaXRlKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgcHNjcik7CiAKLQltdl93cml0ZShNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksCi0JCW12X3JlYWQoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pKSB8Ci0JCQkJCQlNVjY0M1hYX0VUSF9TRVJJQUxfUE9SVF9FTkFCTEUpOworCXBzY3IgfD0gTVY2NDNYWF9FVEhfRElTQUJMRV9BVVRPX05FR19GT1JfRkxPV19DVFJMIHwKKwkJTVY2NDNYWF9FVEhfRElTQUJMRV9BVVRPX05FR19TUEVFRF9HTUlJICAgIHwKKwkJTVY2NDNYWF9FVEhfRElTQUJMRV9BVVRPX05FR19GT1JfRFVQTFggICAgIHwKKwkJTVY2NDNYWF9FVEhfRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAkgICB8CisJCU1WNjQzWFhfRVRIX1NFUklBTF9QT1JUX0NPTlRST0xfUkVTRVJWRUQ7CisKKwltdl93cml0ZShNVjY0M1hYX0VUSF9QT1JUX1NFUklBTF9DT05UUk9MX1JFRyhwb3J0X251bSksIHBzY3IpOworCisJcHNjciB8PSBNVjY0M1hYX0VUSF9TRVJJQUxfUE9SVF9FTkFCTEU7CisJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUE9SVF9TRVJJQUxfQ09OVFJPTF9SRUcocG9ydF9udW0pLCBwc2NyKTsKIAogCS8qIEFzc2lnbiBwb3J0IFNETUEgY29uZmlndXJhdGlvbiAqLwogCW12X3dyaXRlKE1WNjQzWFhfRVRIX1NETUFfQ09ORklHX1JFRyhwb3J0X251bSksCi0JCQkJCQkJbXAtPnBvcnRfc2RtYV9jb25maWcpOworCQkJICBNVjY0M1hYX0VUSF9QT1JUX1NETUFfQ09ORklHX0RFRkFVTFRfVkFMVUUpOwogCiAJLyogRW5hYmxlIHBvcnQgUnguICovCi0JbXZfd3JpdGUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSksCi0JCQkJCQltcC0+cG9ydF9yeF9xdWV1ZV9jb21tYW5kKTsKKwltdjY0M3h4X2V0aF9wb3J0X2VuYWJsZV9yeChwb3J0X251bSwgRVRIX1JYX1FVRVVFU19FTkFCTEVEKTsKIAogCS8qIERpc2FibGUgcG9ydCBiYW5kd2lkdGggbGltaXRzIGJ5IGNsZWFyaW5nIE1UVSByZWdpc3RlciAqLwogCW12X3dyaXRlKE1WNjQzWFhfRVRIX01BWElNVU1fVFJBTlNNSVRfVU5JVChwb3J0X251bSksIDApOworCisJLyogc2F2ZSBwaHkgc2V0dGluZ3MgYWNyb3NzIHJlc2V0ICovCisJbXY2NDN4eF9nZXRfc2V0dGluZ3MoZGV2LCAmZXRodG9vbF9jbWQpOworCWV0aGVybmV0X3BoeV9yZXNldChtcC0+cG9ydF9udW0pOworCW12NjQzeHhfc2V0X3NldHRpbmdzKGRldiwgJmV0aHRvb2xfY21kKTsKIH0KIAogLyoKQEAgLTE4NjYsOCArMTgwOSw5IEBACiAgKgljaGFyICoJCXBfYWRkcgkJQWRkcmVzcyB0byBiZSBzZXQKICAqCiAgKiBPVVRQVVQ6Ci0gKglTZXQgTUFDIGFkZHJlc3MgbG93IGFuZCBoaWdoIHJlZ2lzdGVycy4gYWxzbyBjYWxscyBldGhfcG9ydF91Y19hZGRyKCkKLSAqCVRvIHNldCB0aGUgdW5pY2FzdCB0YWJsZSB3aXRoIHRoZSBwcm9wZXIgaW5mb3JtYXRpb24uCisgKglTZXQgTUFDIGFkZHJlc3MgbG93IGFuZCBoaWdoIHJlZ2lzdGVycy4gYWxzbyBjYWxscworICoJZXRoX3BvcnRfc2V0X2ZpbHRlcl90YWJsZV9lbnRyeSgpIHRvIHNldCB0aGUgdW5pY2FzdAorICoJdGFibGUgd2l0aCB0aGUgcHJvcGVyIGluZm9ybWF0aW9uLgogICoKICAqIFJFVFVSTjoKICAqCU4vQS4KQEAgLTE4NzgsNiArMTgyMiw3IEBACiB7CiAJdW5zaWduZWQgaW50IG1hY19oOwogCXVuc2lnbmVkIGludCBtYWNfbDsKKwlpbnQgdGFibGU7CiAKIAltYWNfbCA9IChwX2FkZHJbNF0gPDwgOCkgfCAocF9hZGRyWzVdKTsKIAltYWNfaCA9IChwX2FkZHJbMF0gPDwgMjQpIHwgKHBfYWRkclsxXSA8PCAxNikgfCAocF9hZGRyWzJdIDw8IDgpIHwKQEAgLTE4ODcsOSArMTgzMiw4IEBACiAJbXZfd3JpdGUoTVY2NDNYWF9FVEhfTUFDX0FERFJfSElHSChldGhfcG9ydF9udW0pLCBtYWNfaCk7CiAKIAkvKiBBY2NlcHQgZnJhbWVzIG9mIHRoaXMgYWRkcmVzcyAqLwotCWV0aF9wb3J0X3VjX2FkZHIoZXRoX3BvcnRfbnVtLCBwX2FkZHJbNV0sIEFDQ0VQVF9NQUNfQUREUik7Ci0KLQlyZXR1cm47CisJdGFibGUgPSBNVjY0M1hYX0VUSF9EQV9GSUxURVJfVU5JQ0FTVF9UQUJMRV9CQVNFKGV0aF9wb3J0X251bSk7CisJZXRoX3BvcnRfc2V0X2ZpbHRlcl90YWJsZV9lbnRyeSh0YWJsZSwgcF9hZGRyWzVdICYgMHgwZik7CiB9CiAKIC8qCkBAIC0xOTI4LDcyICsxODcyLDYgQEAKIH0KIAogLyoKLSAqIGV0aF9wb3J0X3VjX2FkZHIgLSBUaGlzIGZ1bmN0aW9uIFNldCB0aGUgcG9ydCB1bmljYXN0IGFkZHJlc3MgdGFibGUKLSAqCi0gKiBERVNDUklQVElPTjoKLSAqCVRoaXMgZnVuY3Rpb24gbG9jYXRlcyB0aGUgcHJvcGVyIGVudHJ5IGluIHRoZSBVbmljYXN0IHRhYmxlIGZvciB0aGUKLSAqCXNwZWNpZmllZCBNQUMgbmliYmxlIGFuZCBzZXRzIGl0cyBwcm9wZXJ0aWVzIGFjY29yZGluZyB0byBmdW5jdGlvbgotICoJcGFyYW1ldGVycy4KLSAqCi0gKiBJTlBVVDoKLSAqCXVuc2lnbmVkIGludAlldGhfcG9ydF9udW0JUG9ydCBudW1iZXIuCi0gKgl1bnNpZ25lZCBjaGFyCXVjX25pYmJsZQlVbmljYXN0IE1BQyBBZGRyZXNzIGxhc3QgbmliYmxlLgotICoJaW50IAkJb3B0aW9uCQkwID0gQWRkLCAxID0gcmVtb3ZlIGFkZHJlc3MuCi0gKgotICogT1VUUFVUOgotICoJVGhpcyBmdW5jdGlvbiBhZGQvcmVtb3ZlcyBNQUMgYWRkcmVzc2VzIGZyb20gdGhlIHBvcnQgdW5pY2FzdCBhZGRyZXNzCi0gKgl0YWJsZS4KLSAqCi0gKiBSRVRVUk46Ci0gKgl0cnVlIGlzIG91dHB1dCBzdWNjZWVkZWQuCi0gKglmYWxzZSBpZiBvcHRpb24gcGFyYW1ldGVyIGlzIGludmFsaWQuCi0gKgotICovCi1zdGF0aWMgaW50IGV0aF9wb3J0X3VjX2FkZHIodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSwgdW5zaWduZWQgY2hhciB1Y19uaWJibGUsCi0JCQkJCQkJCWludCBvcHRpb24pCi17Ci0JdW5zaWduZWQgaW50IHVuaWNhc3RfcmVnOwotCXVuc2lnbmVkIGludCB0Ymxfb2Zmc2V0OwotCXVuc2lnbmVkIGludCByZWdfb2Zmc2V0OwotCi0JLyogTG9jYXRlIHRoZSBVbmljYXN0IHRhYmxlIGVudHJ5ICovCi0JdWNfbmliYmxlID0gKDB4ZiAmIHVjX25pYmJsZSk7Ci0JdGJsX29mZnNldCA9ICh1Y19uaWJibGUgLyA0KSAqIDQ7CS8qIFJlZ2lzdGVyIG9mZnNldCBmcm9tIHVuaWNhc3QgdGFibGUgYmFzZSAqLwotCXJlZ19vZmZzZXQgPSB1Y19uaWJibGUgJSA0OwkvKiBFbnRyeSBvZmZzZXQgd2l0aGluIHRoZSBhYm92ZSByZWdpc3RlciAqLwotCi0Jc3dpdGNoIChvcHRpb24pIHsKLQljYXNlIFJFSkVDVF9NQUNfQUREUjoKLQkJLyogQ2xlYXIgYWNjZXB0cyBmcmFtZSBiaXQgYXQgZ2l2ZW4gdW5pY2FzdCBEQSB0YWJsZSBlbnRyeSAqLwotCQl1bmljYXN0X3JlZyA9IG12X3JlYWQoKE1WNjQzWFhfRVRIX0RBX0ZJTFRFUl9VTklDQVNUX1RBQkxFX0JBU0UKLQkJCQkJCShldGhfcG9ydF9udW0pICsgdGJsX29mZnNldCkpOwotCi0JCXVuaWNhc3RfcmVnICY9ICgweDBFIDw8ICg4ICogcmVnX29mZnNldCkpOwotCi0JCW12X3dyaXRlKChNVjY0M1hYX0VUSF9EQV9GSUxURVJfVU5JQ0FTVF9UQUJMRV9CQVNFCi0JCQkJKGV0aF9wb3J0X251bSkgKyB0Ymxfb2Zmc2V0KSwgdW5pY2FzdF9yZWcpOwotCQlicmVhazsKLQotCWNhc2UgQUNDRVBUX01BQ19BRERSOgotCQkvKiBTZXQgYWNjZXB0cyBmcmFtZSBiaXQgYXQgdW5pY2FzdCBEQSBmaWx0ZXIgdGFibGUgZW50cnkgKi8KLQkJdW5pY2FzdF9yZWcgPQotCQkJbXZfcmVhZCgoTVY2NDNYWF9FVEhfREFfRklMVEVSX1VOSUNBU1RfVEFCTEVfQkFTRQotCQkJCQkJKGV0aF9wb3J0X251bSkgKyB0Ymxfb2Zmc2V0KSk7Ci0KLQkJdW5pY2FzdF9yZWcgfD0gKDB4MDEgPDwgKDggKiByZWdfb2Zmc2V0KSk7Ci0KLQkJbXZfd3JpdGUoKE1WNjQzWFhfRVRIX0RBX0ZJTFRFUl9VTklDQVNUX1RBQkxFX0JBU0UKLQkJCQkoZXRoX3BvcnRfbnVtKSArIHRibF9vZmZzZXQpLCB1bmljYXN0X3JlZyk7Ci0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoKICAqIFRoZSBlbnRyaWVzIGluIGVhY2ggdGFibGUgYXJlIGluZGV4ZWQgYnkgYSBoYXNoIG9mIGEgcGFja2V0J3MgTUFDCiAgKiBhZGRyZXNzLiAgT25lIGJpdCBpbiBlYWNoIGVudHJ5IGRldGVybWluZXMgd2hldGhlciB0aGUgcGFja2V0IGlzCiAgKiBhY2NlcHRlZC4gIFRoZXJlIGFyZSA0IGVudHJpZXMgKGVhY2ggOCBiaXRzIHdpZGUpIGluIGVhY2ggcmVnaXN0ZXIKQEAgLTIyMDUsOCArMjA4Myw4IEBACiAKIAkvKiBDbGVhciBEQSBmaWx0ZXIgdW5pY2FzdCB0YWJsZSAoRXhfZEZVVCkgKi8KIAlmb3IgKHRhYmxlX2luZGV4ID0gMDsgdGFibGVfaW5kZXggPD0gMHhDOyB0YWJsZV9pbmRleCArPSA0KQotCQltdl93cml0ZSgoTVY2NDNYWF9FVEhfREFfRklMVEVSX1VOSUNBU1RfVEFCTEVfQkFTRQotCQkJCQkoZXRoX3BvcnRfbnVtKSArIHRhYmxlX2luZGV4KSwgMCk7CisJCW12X3dyaXRlKE1WNjQzWFhfRVRIX0RBX0ZJTFRFUl9VTklDQVNUX1RBQkxFX0JBU0UKKwkJCQkJKGV0aF9wb3J0X251bSkgKyB0YWJsZV9pbmRleCwgMCk7CiAKIAlmb3IgKHRhYmxlX2luZGV4ID0gMDsgdGFibGVfaW5kZXggPD0gMHhGQzsgdGFibGVfaW5kZXggKz0gNCkgewogCQkvKiBDbGVhciBEQSBmaWx0ZXIgc3BlY2lhbCBtdWx0aWNhc3QgdGFibGUgKEV4X2RGU01UKSAqLwpAQCAtMjM4OSw2ICsyMjY3LDczIEBACiAJZXRoX3BvcnRfcmVhZF9zbWlfcmVnKGV0aF9wb3J0X251bSwgMCwgJnBoeV9yZWdfZGF0YSk7CiAJcGh5X3JlZ19kYXRhIHw9IDB4ODAwMDsJLyogU2V0IGJpdCAxNSB0byByZXNldCB0aGUgUEhZICovCiAJZXRoX3BvcnRfd3JpdGVfc21pX3JlZyhldGhfcG9ydF9udW0sIDAsIHBoeV9yZWdfZGF0YSk7CisKKwkvKiB3YWl0IGZvciBQSFkgdG8gY29tZSBvdXQgb2YgcmVzZXQgKi8KKwlkbyB7CisJCXVkZWxheSgxKTsKKwkJZXRoX3BvcnRfcmVhZF9zbWlfcmVnKGV0aF9wb3J0X251bSwgMCwgJnBoeV9yZWdfZGF0YSk7CisJfSB3aGlsZSAocGh5X3JlZ19kYXRhICYgMHg4MDAwKTsKK30KKworc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcG9ydF9lbmFibGVfdHgodW5zaWduZWQgaW50IHBvcnRfbnVtLAorCQkJCQl1bnNpZ25lZCBpbnQgcXVldWVzKQoreworCW12X3dyaXRlKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSwgcXVldWVzKTsKK30KKworc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfcG9ydF9lbmFibGVfcngodW5zaWduZWQgaW50IHBvcnRfbnVtLAorCQkJCQl1bnNpZ25lZCBpbnQgcXVldWVzKQoreworCW12X3dyaXRlKE1WNjQzWFhfRVRIX1JFQ0VJVkVfUVVFVUVfQ09NTUFORF9SRUcocG9ydF9udW0pLCBxdWV1ZXMpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV90eCh1bnNpZ25lZCBpbnQgcG9ydF9udW0pCit7CisJdTMyIHF1ZXVlczsKKworCS8qIFN0b3AgVHggcG9ydCBhY3Rpdml0eS4gQ2hlY2sgcG9ydCBUeCBhY3Rpdml0eS4gKi8KKwlxdWV1ZXMgPSBtdl9yZWFkKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSkKKwkJCQkJCQkmIDB4RkY7CisJaWYgKHF1ZXVlcykgeworCQkvKiBJc3N1ZSBzdG9wIGNvbW1hbmQgZm9yIGFjdGl2ZSBxdWV1ZXMgb25seSAqLworCQltdl93cml0ZShNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSksCisJCQkJCQkJKHF1ZXVlcyA8PCA4KSk7CisKKwkJLyogV2FpdCBmb3IgYWxsIFR4IGFjdGl2aXR5IHRvIHRlcm1pbmF0ZS4gKi8KKwkJLyogQ2hlY2sgcG9ydCBjYXVzZSByZWdpc3RlciB0aGF0IGFsbCBUeCBxdWV1ZXMgYXJlIHN0b3BwZWQgKi8KKwkJd2hpbGUgKG12X3JlYWQoTVY2NDNYWF9FVEhfVFJBTlNNSVRfUVVFVUVfQ09NTUFORF9SRUcocG9ydF9udW0pKQorCQkJCQkJCSYgMHhGRikKKwkJCXVkZWxheShQSFlfV0FJVF9NSUNST19TRUNPTkRTKTsKKworCQkvKiBXYWl0IGZvciBUeCBGSUZPIHRvIGVtcHR5ICovCisJCXdoaWxlIChtdl9yZWFkKE1WNjQzWFhfRVRIX1BPUlRfU1RBVFVTX1JFRyhwb3J0X251bSkpICYKKwkJCQkJCQlFVEhfUE9SVF9UWF9GSUZPX0VNUFRZKQorCQkJdWRlbGF5KFBIWV9XQUlUX01JQ1JPX1NFQ09ORFMpOworCX0KKworCXJldHVybiBxdWV1ZXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3J4KHVuc2lnbmVkIGludCBwb3J0X251bSkKK3sKKwl1MzIgcXVldWVzOworCisJLyogU3RvcCBSeCBwb3J0IGFjdGl2aXR5LiBDaGVjayBwb3J0IFJ4IGFjdGl2aXR5LiAqLworCXF1ZXVlcyA9IG12X3JlYWQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSkpCisJCQkJCQkJJiAweEZGOworCWlmIChxdWV1ZXMpIHsKKwkJLyogSXNzdWUgc3RvcCBjb21tYW5kIGZvciBhY3RpdmUgcXVldWVzIG9ubHkgKi8KKwkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSksCisJCQkJCQkJKHF1ZXVlcyA8PCA4KSk7CisKKwkJLyogV2FpdCBmb3IgYWxsIFJ4IGFjdGl2aXR5IHRvIHRlcm1pbmF0ZS4gKi8KKwkJLyogQ2hlY2sgcG9ydCBjYXVzZSByZWdpc3RlciB0aGF0IGFsbCBSeCBxdWV1ZXMgYXJlIHN0b3BwZWQgKi8KKwkJd2hpbGUgKG12X3JlYWQoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSkpCisJCQkJCQkJJiAweEZGKQorCQkJdWRlbGF5KFBIWV9XQUlUX01JQ1JPX1NFQ09ORFMpOworCX0KKworCXJldHVybiBxdWV1ZXM7CiB9CiAKIC8qCkBAIC0yNDEzLDcwICsyMzU4LDIxIEBACiB7CiAJdW5zaWduZWQgaW50IHJlZ19kYXRhOwogCi0JLyogU3RvcCBUeCBwb3J0IGFjdGl2aXR5LiBDaGVjayBwb3J0IFR4IGFjdGl2aXR5LiAqLwotCXJlZ19kYXRhID0gbXZfcmVhZChNVjY0M1hYX0VUSF9UUkFOU01JVF9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSkpOwotCi0JaWYgKHJlZ19kYXRhICYgMHhGRikgewotCQkvKiBJc3N1ZSBzdG9wIGNvbW1hbmQgZm9yIGFjdGl2ZSBjaGFubmVscyBvbmx5ICovCi0JCW12X3dyaXRlKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSwKLQkJCQkJCQkocmVnX2RhdGEgPDwgOCkpOwotCi0JCS8qIFdhaXQgZm9yIGFsbCBUeCBhY3Rpdml0eSB0byB0ZXJtaW5hdGUuICovCi0JCS8qIENoZWNrIHBvcnQgY2F1c2UgcmVnaXN0ZXIgdGhhdCBhbGwgVHggcXVldWVzIGFyZSBzdG9wcGVkICovCi0JCXdoaWxlIChtdl9yZWFkKE1WNjQzWFhfRVRIX1RSQU5TTUlUX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSkKLQkJCQkJCQkJCSYgMHhGRikKLQkJCXVkZWxheSgxMCk7Ci0JfQotCi0JLyogU3RvcCBSeCBwb3J0IGFjdGl2aXR5LiBDaGVjayBwb3J0IFJ4IGFjdGl2aXR5LiAqLwotCXJlZ19kYXRhID0gbXZfcmVhZChNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSk7Ci0KLQlpZiAocmVnX2RhdGEgJiAweEZGKSB7Ci0JCS8qIElzc3VlIHN0b3AgY29tbWFuZCBmb3IgYWN0aXZlIGNoYW5uZWxzIG9ubHkgKi8KLQkJbXZfd3JpdGUoTVY2NDNYWF9FVEhfUkVDRUlWRV9RVUVVRV9DT01NQU5EX1JFRyhwb3J0X251bSksCi0JCQkJCQkJKHJlZ19kYXRhIDw8IDgpKTsKLQotCQkvKiBXYWl0IGZvciBhbGwgUnggYWN0aXZpdHkgdG8gdGVybWluYXRlLiAqLwotCQkvKiBDaGVjayBwb3J0IGNhdXNlIHJlZ2lzdGVyIHRoYXQgYWxsIFJ4IHF1ZXVlcyBhcmUgc3RvcHBlZCAqLwotCQl3aGlsZSAobXZfcmVhZChNVjY0M1hYX0VUSF9SRUNFSVZFX1FVRVVFX0NPTU1BTkRfUkVHKHBvcnRfbnVtKSkKLQkJCQkJCQkJCSYgMHhGRikKLQkJCXVkZWxheSgxMCk7Ci0JfQorCW12NjQzeHhfZXRoX3BvcnRfZGlzYWJsZV90eChwb3J0X251bSk7CisJbXY2NDN4eF9ldGhfcG9ydF9kaXNhYmxlX3J4KHBvcnRfbnVtKTsKIAogCS8qIENsZWFyIGFsbCBNSUIgY291bnRlcnMgKi8KIAlldGhfY2xlYXJfbWliX2NvdW50ZXJzKHBvcnRfbnVtKTsKIAogCS8qIFJlc2V0IHRoZSBFbmFibGUgYml0IGluIHRoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAJcmVnX2RhdGEgPSBtdl9yZWFkKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSk7Ci0JcmVnX2RhdGEgJj0gfk1WNjQzWFhfRVRIX1NFUklBTF9QT1JUX0VOQUJMRTsKKwlyZWdfZGF0YSAmPSB+KE1WNjQzWFhfRVRIX1NFUklBTF9QT1JUX0VOQUJMRQkJfAorCQkJTVY2NDNYWF9FVEhfRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAl8CisJCQlNVjY0M1hYX0VUSF9GT1JDRV9MSU5LX1BBU1MpOwogCW12X3dyaXRlKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSwgcmVnX2RhdGEpOwogfQogCiAKLXN0YXRpYyBpbnQgZXRoX3BvcnRfYXV0b25lZ19zdXBwb3J0ZWQodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSkKLXsKLQl1bnNpZ25lZCBpbnQgcGh5X3JlZ19kYXRhMDsKLQotCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhldGhfcG9ydF9udW0sIDAsICZwaHlfcmVnX2RhdGEwKTsKLQotCXJldHVybiBwaHlfcmVnX2RhdGEwICYgMHgxMDAwOwotfQotCi1zdGF0aWMgaW50IGV0aF9wb3J0X2xpbmtfaXNfdXAodW5zaWduZWQgaW50IGV0aF9wb3J0X251bSkKLXsKLQl1bnNpZ25lZCBpbnQgcGh5X3JlZ19kYXRhMTsKLQotCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhldGhfcG9ydF9udW0sIDEsICZwaHlfcmVnX2RhdGExKTsKLQotCWlmIChldGhfcG9ydF9hdXRvbmVnX3N1cHBvcnRlZChldGhfcG9ydF9udW0pKSB7Ci0JCWlmIChwaHlfcmVnX2RhdGExICYgMHgyMCkJLyogYXV0by1uZWcgY29tcGxldGUgKi8KLQkJCXJldHVybiAxOwotCX0gZWxzZSBpZiAocGh5X3JlZ19kYXRhMSAmIDB4NCkJCS8qIGxpbmsgdXAgKi8KLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIGV0aF9wb3J0X3JlYWRfc21pX3JlZyAtIFJlYWQgUEhZIHJlZ2lzdGVycwogICoKQEAgLTI1ODIsMjUwICsyNDc4LDIxIEBACiB9CiAKIC8qCi0gKiBldGhfcG9ydF9zZW5kIC0gU2VuZCBhbiBFdGhlcm5ldCBwYWNrZXQKLSAqCi0gKiBERVNDUklQVElPTjoKLSAqCVRoaXMgcm91dGluZSBzZW5kIGEgZ2l2ZW4gcGFja2V0IGRlc2NyaWJlZCBieSBwX3BrdGluZm8gcGFyYW1ldGVyLiBJdAotICoJc3VwcG9ydHMgdHJhbnNtaXR0aW5nIG9mIGEgcGFja2V0IHNwYW5lZCBvdmVyIG11bHRpcGxlIGJ1ZmZlcnMuIFRoZQotICoJcm91dGluZSB1cGRhdGVzICdjdXJyJyBhbmQgJ2ZpcnN0JyBpbmRleGVzIGFjY29yZGluZyB0byB0aGUgcGFja2V0Ci0gKglzZWdtZW50IHBhc3NlZCB0byB0aGUgcm91dGluZS4gSW4gY2FzZSB0aGUgcGFja2V0IHNlZ21lbnQgaXMgZmlyc3QsCi0gKgl0aGUgJ2ZpcnN0JyBpbmRleCBpcyB1cGRhdGUuIEluIGFueSBjYXNlLCB0aGUgJ2N1cnInIGluZGV4IGlzIHVwZGF0ZWQuCi0gKglJZiB0aGUgcm91dGluZSBnZXQgaW50byBUeCByZXNvdXJjZSBlcnJvciBpdCBhc3NpZ25zICdjdXJyJyBpbmRleCBhcwotICoJJ2ZpcnN0Jy4gVGhpcyB3YXkgdGhlIGZ1bmN0aW9uIGNhbiBhYm9ydCBUeCBwcm9jZXNzIG9mIG11bHRpcGxlCi0gKglkZXNjcmlwdG9ycyBwZXIgcGFja2V0LgotICoKLSAqIElOUFVUOgotICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZQkqbXAJCUV0aGVybmV0IFBvcnQgQ29udHJvbCBzcnR1Y3QuCi0gKglzdHJ1Y3QgcGt0X2luZm8JCSpwX3BrdF9pbmZvCVVzZXIgcGFja2V0IGJ1ZmZlci4KLSAqCi0gKiBPVVRQVVQ6Ci0gKglUeCByaW5nICdjdXJyJyBhbmQgJ2ZpcnN0JyBpbmRleGVzIGFyZSB1cGRhdGVkLgotICoKLSAqIFJFVFVSTjoKLSAqCUVUSF9RVUVVRV9GVUxMIGluIGNhc2Ugb2YgVHggcmVzb3VyY2UgZXJyb3IuCi0gKglFVEhfRVJST1IgaW4gY2FzZSB0aGUgcm91dGluZSBjYW4gbm90IGFjY2VzcyBUeCBkZXNjIHJpbmcuCi0gKglFVEhfUVVFVUVfTEFTVF9SRVNPVVJDRSBpZiB0aGUgcm91dGluZSB1c2VzIHRoZSBsYXN0IFR4IHJlc291cmNlLgotICoJRVRIX09LIG90aGVyd2lzZS4KLSAqCisgKiBXcmFwcGVycyBmb3IgTUlJIHN1cHBvcnQgbGlicmFyeS4KICAqLwotI2lmZGVmIE1WNjQzWFhfQ0hFQ0tTVU1fT0ZGTE9BRF9UWAotLyoKLSAqIE1vZGlmaWVkIHRvIGluY2x1ZGUgdGhlIGZpcnN0IGRlc2NyaXB0b3IgcG9pbnRlciBpbiBjYXNlIG9mIFNHCi0gKi8KLXN0YXRpYyBFVEhfRlVOQ19SRVRfU1RBVFVTIGV0aF9wb3J0X3NlbmQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJCSBzdHJ1Y3QgcGt0X2luZm8gKnBfcGt0X2luZm8pCitzdGF0aWMgaW50IG12NjQzeHhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbikKIHsKLQlpbnQgdHhfZGVzY19jdXJyLCB0eF9kZXNjX3VzZWQsIHR4X2ZpcnN0X2Rlc2MsIHR4X25leHRfZGVzYzsKLQlzdHJ1Y3QgZXRoX3R4X2Rlc2MgKmN1cnJlbnRfZGVzY3JpcHRvcjsKLQlzdHJ1Y3QgZXRoX3R4X2Rlc2MgKmZpcnN0X2Rlc2NyaXB0b3I7Ci0JdTMyIGNvbW1hbmQ7CisJaW50IHZhbDsKKwlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQkvKiBEbyBub3QgcHJvY2VzcyBUeCByaW5nIGluIGNhc2Ugb2YgVHggcmluZyByZXNvdXJjZSBlcnJvciAqLwotCWlmIChtcC0+dHhfcmVzb3VyY2VfZXJyKQotCQlyZXR1cm4gRVRIX1FVRVVFX0ZVTEw7Ci0KLQkvKgotCSAqIFRoZSBoYXJkd2FyZSByZXF1aXJlcyB0aGF0IGVhY2ggYnVmZmVyIHRoYXQgaXMgPD0gOCBieXRlcwotCSAqIGluIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgb24gYW4gOCBieXRlIGJvdW5kYXJ5LgotCSAqLwotCWlmIChwX3BrdF9pbmZvLT5ieXRlX2NudCA8PSA4ICYmIHBfcGt0X2luZm8tPmJ1Zl9wdHIgJiAweDcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkibXY2NDN4eF9ldGggcG9ydCAlZDogcGFja2V0IHNpemUgPD0gOCBwcm9ibGVtXG4iLAotCQkJbXAtPnBvcnRfbnVtKTsKLQkJcmV0dXJuIEVUSF9FUlJPUjsKLQl9Ci0KLQltcC0+dHhfcmluZ19za2JzKys7Ci0JQlVHX09OKG1wLT50eF9yaW5nX3NrYnMgPiBtcC0+dHhfcmluZ19zaXplKTsKLQotCS8qIEdldCB0aGUgVHggRGVzYyByaW5nIGluZGV4ZXMgKi8KLQl0eF9kZXNjX2N1cnIgPSBtcC0+dHhfY3Vycl9kZXNjX3E7Ci0JdHhfZGVzY191c2VkID0gbXAtPnR4X3VzZWRfZGVzY19xOwotCi0JY3VycmVudF9kZXNjcmlwdG9yID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9kZXNjX2N1cnJdOwotCi0JdHhfbmV4dF9kZXNjID0gKHR4X2Rlc2NfY3VyciArIDEpICUgbXAtPnR4X3Jpbmdfc2l6ZTsKLQotCWN1cnJlbnRfZGVzY3JpcHRvci0+YnVmX3B0ciA9IHBfcGt0X2luZm8tPmJ1Zl9wdHI7Ci0JY3VycmVudF9kZXNjcmlwdG9yLT5ieXRlX2NudCA9IHBfcGt0X2luZm8tPmJ5dGVfY250OwotCWN1cnJlbnRfZGVzY3JpcHRvci0+bDRpX2NoayA9IHBfcGt0X2luZm8tPmw0aV9jaGs7Ci0JbXAtPnR4X3NrYlt0eF9kZXNjX2N1cnJdID0gcF9wa3RfaW5mby0+cmV0dXJuX2luZm87Ci0KLQljb21tYW5kID0gcF9wa3RfaW5mby0+Y21kX3N0cyB8IEVUSF9aRVJPX1BBRERJTkcgfCBFVEhfR0VOX0NSQyB8Ci0JCQkJCQkJRVRIX0JVRkZFUl9PV05FRF9CWV9ETUE7Ci0JaWYgKGNvbW1hbmQgJiBFVEhfVFhfRklSU1RfREVTQykgewotCQl0eF9maXJzdF9kZXNjID0gdHhfZGVzY19jdXJyOwotCQltcC0+dHhfZmlyc3RfZGVzY19xID0gdHhfZmlyc3RfZGVzYzsKLQkJZmlyc3RfZGVzY3JpcHRvciA9IGN1cnJlbnRfZGVzY3JpcHRvcjsKLQkJbXAtPnR4X2ZpcnN0X2NvbW1hbmQgPSBjb21tYW5kOwotCX0gZWxzZSB7Ci0JCXR4X2ZpcnN0X2Rlc2MgPSBtcC0+dHhfZmlyc3RfZGVzY19xOwotCQlmaXJzdF9kZXNjcmlwdG9yID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9maXJzdF9kZXNjXTsKLQkJQlVHX09OKGZpcnN0X2Rlc2NyaXB0b3IgPT0gTlVMTCk7Ci0JCWN1cnJlbnRfZGVzY3JpcHRvci0+Y21kX3N0cyA9IGNvbW1hbmQ7Ci0JfQotCi0JaWYgKGNvbW1hbmQgJiBFVEhfVFhfTEFTVF9ERVNDKSB7Ci0JCXdtYigpOwotCQlmaXJzdF9kZXNjcmlwdG9yLT5jbWRfc3RzID0gbXAtPnR4X2ZpcnN0X2NvbW1hbmQ7Ci0KLQkJd21iKCk7Ci0JCUVUSF9FTkFCTEVfVFhfUVVFVUUobXAtPnBvcnRfbnVtKTsKLQotCQkvKgotCQkgKiBGaW5pc2ggVHggcGFja2V0LiBVcGRhdGUgZmlyc3QgZGVzYyBpbiBjYXNlIG9mIFR4IHJlc291cmNlCi0JCSAqIGVycm9yICovCi0JCXR4X2ZpcnN0X2Rlc2MgPSB0eF9uZXh0X2Rlc2M7Ci0JCW1wLT50eF9maXJzdF9kZXNjX3EgPSB0eF9maXJzdF9kZXNjOwotCX0KLQotCS8qIENoZWNrIGZvciByaW5nIGluZGV4IG92ZXJsYXAgaW4gdGhlIFR4IGRlc2MgcmluZyAqLwotCWlmICh0eF9uZXh0X2Rlc2MgPT0gdHhfZGVzY191c2VkKSB7Ci0JCW1wLT50eF9yZXNvdXJjZV9lcnIgPSAxOwotCQltcC0+dHhfY3Vycl9kZXNjX3EgPSB0eF9maXJzdF9kZXNjOwotCi0JCXJldHVybiBFVEhfUVVFVUVfTEFTVF9SRVNPVVJDRTsKLQl9Ci0KLQltcC0+dHhfY3Vycl9kZXNjX3EgPSB0eF9uZXh0X2Rlc2M7Ci0KLQlyZXR1cm4gRVRIX09LOworCWV0aF9wb3J0X3JlYWRfc21pX3JlZyhtcC0+cG9ydF9udW0sIGxvY2F0aW9uLCAmdmFsKTsKKwlyZXR1cm4gdmFsOwogfQotI2Vsc2UKLXN0YXRpYyBFVEhfRlVOQ19SRVRfU1RBVFVTIGV0aF9wb3J0X3NlbmQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCi0JCQkJCSBzdHJ1Y3QgcGt0X2luZm8gKnBfcGt0X2luZm8pCisKK3N0YXRpYyB2b2lkIG12NjQzeHhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWwpCiB7Ci0JaW50IHR4X2Rlc2NfY3VycjsKLQlpbnQgdHhfZGVzY191c2VkOwotCXN0cnVjdCBldGhfdHhfZGVzYyAqY3VycmVudF9kZXNjcmlwdG9yOwotCXVuc2lnbmVkIGludCBjb21tYW5kX3N0YXR1czsKLQotCS8qIERvIG5vdCBwcm9jZXNzIFR4IHJpbmcgaW4gY2FzZSBvZiBUeCByaW5nIHJlc291cmNlIGVycm9yICovCi0JaWYgKG1wLT50eF9yZXNvdXJjZV9lcnIpCi0JCXJldHVybiBFVEhfUVVFVUVfRlVMTDsKLQotCW1wLT50eF9yaW5nX3NrYnMrKzsKLQlCVUdfT04obXAtPnR4X3Jpbmdfc2ticyA+IG1wLT50eF9yaW5nX3NpemUpOwotCi0JLyogR2V0IHRoZSBUeCBEZXNjIHJpbmcgaW5kZXhlcyAqLwotCXR4X2Rlc2NfY3VyciA9IG1wLT50eF9jdXJyX2Rlc2NfcTsKLQl0eF9kZXNjX3VzZWQgPSBtcC0+dHhfdXNlZF9kZXNjX3E7Ci0JY3VycmVudF9kZXNjcmlwdG9yID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9kZXNjX2N1cnJdOwotCi0JY29tbWFuZF9zdGF0dXMgPSBwX3BrdF9pbmZvLT5jbWRfc3RzIHwgRVRIX1pFUk9fUEFERElORyB8IEVUSF9HRU5fQ1JDOwotCWN1cnJlbnRfZGVzY3JpcHRvci0+YnVmX3B0ciA9IHBfcGt0X2luZm8tPmJ1Zl9wdHI7Ci0JY3VycmVudF9kZXNjcmlwdG9yLT5ieXRlX2NudCA9IHBfcGt0X2luZm8tPmJ5dGVfY250OwotCW1wLT50eF9za2JbdHhfZGVzY19jdXJyXSA9IHBfcGt0X2luZm8tPnJldHVybl9pbmZvOwotCi0JLyogU2V0IGxhc3QgZGVzYyB3aXRoIERNQSBvd25lcnNoaXAgYW5kIGludGVycnVwdCBlbmFibGUuICovCi0Jd21iKCk7Ci0JY3VycmVudF9kZXNjcmlwdG9yLT5jbWRfc3RzID0gY29tbWFuZF9zdGF0dXMgfAotCQkJRVRIX0JVRkZFUl9PV05FRF9CWV9ETUEgfCBFVEhfVFhfRU5BQkxFX0lOVEVSUlVQVDsKLQotCXdtYigpOwotCUVUSF9FTkFCTEVfVFhfUVVFVUUobXAtPnBvcnRfbnVtKTsKLQotCS8qIEZpbmlzaCBUeCBwYWNrZXQuIFVwZGF0ZSBmaXJzdCBkZXNjIGluIGNhc2Ugb2YgVHggcmVzb3VyY2UgZXJyb3IgKi8KLQl0eF9kZXNjX2N1cnIgPSAodHhfZGVzY19jdXJyICsgMSkgJSBtcC0+dHhfcmluZ19zaXplOwotCi0JLyogVXBkYXRlIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgKi8KLQltcC0+dHhfY3Vycl9kZXNjX3EgPSB0eF9kZXNjX2N1cnI7Ci0KLQkvKiBDaGVjayBmb3IgcmluZyBpbmRleCBvdmVybGFwIGluIHRoZSBUeCBkZXNjIHJpbmcgKi8KLQlpZiAodHhfZGVzY19jdXJyID09IHR4X2Rlc2NfdXNlZCkgewotCQltcC0+dHhfcmVzb3VyY2VfZXJyID0gMTsKLQkJcmV0dXJuIEVUSF9RVUVVRV9MQVNUX1JFU09VUkNFOwotCX0KLQotCXJldHVybiBFVEhfT0s7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIGV0aF90eF9yZXR1cm5fZGVzYyAtIEZyZWUgYWxsIHVzZWQgVHggZGVzY3JpcHRvcnMKLSAqCi0gKiBERVNDUklQVElPTjoKLSAqCVRoaXMgcm91dGluZSByZXR1cm5zIHRoZSB0cmFuc21pdHRlZCBwYWNrZXQgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlci4KLSAqCUl0IHVzZXMgdGhlICdmaXJzdCcgaW5kZXggdG8gc3VwcG9ydCBUeCBkZXNjIHJldHVybiBpbiBjYXNlIGEgdHJhbnNtaXQKLSAqCW9mIGEgcGFja2V0IHNwYW5uZWQgb3ZlciBtdWx0aXBsZSBidWZmZXIgc3RpbGwgaW4gcHJvY2Vzcy4KLSAqCUluIGNhc2UgdGhlIFR4IHF1ZXVlIHdhcyBpbiAicmVzb3VyY2UgZXJyb3IiIGNvbmRpdGlvbiwgd2hlcmUgdGhlcmUgYXJlCi0gKglubyBhdmFpbGFibGUgVHggcmVzb3VyY2VzLCB0aGUgZnVuY3Rpb24gcmVzZXRzIHRoZSByZXNvdXJjZSBlcnJvciBmbGFnLgotICoKLSAqIElOUFVUOgotICoJc3RydWN0IG12NjQzeHhfcHJpdmF0ZQkqbXAJCUV0aGVybmV0IFBvcnQgQ29udHJvbCBzcnR1Y3QuCi0gKglzdHJ1Y3QgcGt0X2luZm8JCSpwX3BrdF9pbmZvCVVzZXIgcGFja2V0IGJ1ZmZlci4KLSAqCi0gKiBPVVRQVVQ6Ci0gKglUeCByaW5nICdmaXJzdCcgYW5kICd1c2VkJyBpbmRleGVzIGFyZSB1cGRhdGVkLgotICoKLSAqIFJFVFVSTjoKLSAqCUVUSF9PSyBvbiBzdWNjZXNzCi0gKglFVEhfRVJST1Igb3RoZXJ3aXNlLgotICoKLSAqLwotc3RhdGljIEVUSF9GVU5DX1JFVF9TVEFUVVMgZXRoX3R4X3JldHVybl9kZXNjKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCQkJc3RydWN0IHBrdF9pbmZvICpwX3BrdF9pbmZvKQotewotCWludCB0eF9kZXNjX3VzZWQ7Ci0JaW50IHR4X2J1c3lfZGVzYzsKLQlzdHJ1Y3QgZXRoX3R4X2Rlc2MgKnBfdHhfZGVzY191c2VkOwotCXVuc2lnbmVkIGludCBjb21tYW5kX3N0YXR1czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSBFVEhfT0s7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXAtPmxvY2ssIGZsYWdzKTsKLQotI2lmZGVmIE1WNjQzWFhfQ0hFQ0tTVU1fT0ZGTE9BRF9UWAotCXR4X2J1c3lfZGVzYyA9IG1wLT50eF9maXJzdF9kZXNjX3E7Ci0jZWxzZQotCXR4X2J1c3lfZGVzYyA9IG1wLT50eF9jdXJyX2Rlc2NfcTsKLSNlbmRpZgotCi0JLyogR2V0IHRoZSBUeCBEZXNjIHJpbmcgaW5kZXhlcyAqLwotCXR4X2Rlc2NfdXNlZCA9IG1wLT50eF91c2VkX2Rlc2NfcTsKLQotCXBfdHhfZGVzY191c2VkID0gJm1wLT5wX3R4X2Rlc2NfYXJlYVt0eF9kZXNjX3VzZWRdOwotCi0JLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKHBfdHhfZGVzY191c2VkID09IE5VTEwpIHsKLQkJZXJyID0gRVRIX0VSUk9SOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBTdG9wIHJlbGVhc2UuIEFib3V0IHRvIG92ZXJsYXAgdGhlIGN1cnJlbnQgYXZhaWxhYmxlIFR4IGRlc2NyaXB0b3IgKi8KLQlpZiAodHhfZGVzY191c2VkID09IHR4X2J1c3lfZGVzYyAmJiAhbXAtPnR4X3Jlc291cmNlX2VycikgewotCQllcnIgPSBFVEhfRVJST1I7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWNvbW1hbmRfc3RhdHVzID0gcF90eF9kZXNjX3VzZWQtPmNtZF9zdHM7Ci0KLQkvKiBTdGlsbCB0cmFuc21pdHRpbmcuLi4gKi8KLQlpZiAoY29tbWFuZF9zdGF0dXMgJiAoRVRIX0JVRkZFUl9PV05FRF9CWV9ETUEpKSB7Ci0JCWVyciA9IEVUSF9FUlJPUjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogUGFzcyB0aGUgcGFja2V0IGluZm9ybWF0aW9uIHRvIHRoZSBjYWxsZXIgKi8KLQlwX3BrdF9pbmZvLT5jbWRfc3RzID0gY29tbWFuZF9zdGF0dXM7Ci0JcF9wa3RfaW5mby0+cmV0dXJuX2luZm8gPSBtcC0+dHhfc2tiW3R4X2Rlc2NfdXNlZF07Ci0JcF9wa3RfaW5mby0+YnVmX3B0ciA9IHBfdHhfZGVzY191c2VkLT5idWZfcHRyOwotCXBfcGt0X2luZm8tPmJ5dGVfY250ID0gcF90eF9kZXNjX3VzZWQtPmJ5dGVfY250OwotCW1wLT50eF9za2JbdHhfZGVzY191c2VkXSA9IE5VTEw7Ci0KLQkvKiBVcGRhdGUgdGhlIG5leHQgZGVzY3JpcHRvciB0byByZWxlYXNlLiAqLwotCW1wLT50eF91c2VkX2Rlc2NfcSA9ICh0eF9kZXNjX3VzZWQgKyAxKSAlIG1wLT50eF9yaW5nX3NpemU7Ci0KLQkvKiBBbnkgVHggcmV0dXJuIGNhbmNlbHMgdGhlIFR4IHJlc291cmNlIGVycm9yIHN0YXR1cyAqLwotCW1wLT50eF9yZXNvdXJjZV9lcnIgPSAwOwotCi0JQlVHX09OKG1wLT50eF9yaW5nX3NrYnMgPT0gMCk7Ci0JbXAtPnR4X3Jpbmdfc2ticy0tOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiBlcnI7CisJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWV0aF9wb3J0X3dyaXRlX3NtaV9yZWcobXAtPnBvcnRfbnVtLCBsb2NhdGlvbiwgdmFsKTsKIH0KIAogLyoKQEAgLTMwMTcsMTExICsyNjg0LDYgQEAKICNkZWZpbmUgTVY2NDNYWF9TVEFUU19MRU4JXAogCXNpemVvZihtdjY0M3h4X2dzdHJpbmdzX3N0YXRzKSAvIHNpemVvZihzdHJ1Y3QgbXY2NDN4eF9zdGF0cykKIAotc3RhdGljIGludAotbXY2NDN4eF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQotewotCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2LT5wcml2OwotCWludCBwb3J0X251bSA9IG1wLT5wb3J0X251bTsKLQlpbnQgYXV0b25lZyA9IGV0aF9wb3J0X2F1dG9uZWdfc3VwcG9ydGVkKHBvcnRfbnVtKTsKLQlpbnQgbW9kZV8xMF9iaXQ7Ci0JaW50IGF1dG9fZHVwbGV4OwotCWludCBoYWxmX2R1cGxleCA9IDA7Ci0JaW50IGZ1bGxfZHVwbGV4ID0gMDsKLQlpbnQgYXV0b19zcGVlZDsKLQlpbnQgc3BlZWRfMTAgPSAwOwotCWludCBzcGVlZF8xMDAgPSAwOwotCWludCBzcGVlZF8xMDAwID0gMDsKLQotCXUzMiBwY3MgPSBtdl9yZWFkKE1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfUkVHKHBvcnRfbnVtKSk7Ci0JdTMyIHBzciA9IG12X3JlYWQoTVY2NDNYWF9FVEhfUE9SVF9TVEFUVVNfUkVHKHBvcnRfbnVtKSk7Ci0KLQltb2RlXzEwX2JpdCA9IHBzciAmIE1WNjQzWFhfRVRIX1BPUlRfU1RBVFVTX01PREVfMTBfQklUOwotCi0JaWYgKG1vZGVfMTBfYml0KSB7Ci0JCWVjbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7Ci0JfSBlbHNlIHsKLQkJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYJCXwKLQkJCQkgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsCQl8Ci0JCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYJCXwKLQkJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbAkJfAotCQkJCSAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbAkJfAotCQkJCSAgIChhdXRvbmVnID8gU1VQUE9SVEVEX0F1dG9uZWcgOiAwKQl8Ci0JCQkJICAgU1VQUE9SVEVEX1RQKTsKLQotCQlhdXRvX2R1cGxleCA9ICEocGNzICYgTVY2NDNYWF9FVEhfRElTQUJMRV9BVVRPX05FR19GT1JfRFVQTFgpOwotCQlhdXRvX3NwZWVkID0gIShwY3MgJiBNVjY0M1hYX0VUSF9ESVNBQkxFX0FVVE9fTkVHX1NQRUVEX0dNSUkpOwotCi0JCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF9UUDsKLQotCQlpZiAoYXV0b25lZykgewotCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOwotCi0JCQlpZiAoYXV0b19kdXBsZXgpIHsKLQkJCQloYWxmX2R1cGxleCA9IDE7Ci0JCQkJZnVsbF9kdXBsZXggPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAocGNzICYgTVY2NDNYWF9FVEhfU0VUX0ZVTExfRFVQTEVYX01PREUpCi0JCQkJCWZ1bGxfZHVwbGV4ID0gMTsKLQkJCQllbHNlCi0JCQkJCWhhbGZfZHVwbGV4ID0gMTsKLQkJCX0KLQotCQkJaWYgKGF1dG9fc3BlZWQpIHsKLQkJCQlzcGVlZF8xMCA9IDE7Ci0JCQkJc3BlZWRfMTAwID0gMTsKLQkJCQlzcGVlZF8xMDAwID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHBjcyAmIE1WNjQzWFhfRVRIX1NFVF9HTUlJX1NQRUVEX1RPXzEwMDApCi0JCQkJCXNwZWVkXzEwMDAgPSAxOwotCQkJCWVsc2UgaWYgKHBjcyAmIE1WNjQzWFhfRVRIX1NFVF9NSUlfU1BFRURfVE9fMTAwKQotCQkJCQlzcGVlZF8xMDAgPSAxOwotCQkJCWVsc2UKLQkJCQkJc3BlZWRfMTAgPSAxOwotCQkJfQotCi0JCQlpZiAoc3BlZWRfMTAgJiBoYWxmX2R1cGxleCkKLQkJCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZjsKLQkJCWlmIChzcGVlZF8xMCAmIGZ1bGxfZHVwbGV4KQotCQkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsOwotCQkJaWYgKHNwZWVkXzEwMCAmIGhhbGZfZHVwbGV4KQotCQkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKLQkJCWlmIChzcGVlZF8xMDAgJiBmdWxsX2R1cGxleCkKLQkJCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7Ci0JCQlpZiAoc3BlZWRfMTAwMCkKLQkJCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwotCQl9Ci0JfQotCi0JZWNtZC0+cG9ydCA9IFBPUlRfVFA7Ci0JZWNtZC0+cGh5X2FkZHJlc3MgPSBldGhlcm5ldF9waHlfZ2V0KHBvcnRfbnVtKTsKLQotCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKLQotCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJaWYgKG1vZGVfMTBfYml0KQotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKLQkJZWxzZSB7Ci0JCQlpZiAocHNyICYgTVY2NDNYWF9FVEhfUE9SVF9TVEFUVVNfR01JSV8xMDAwKQotCQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKLQkJCWVsc2UgaWYgKHBzciAmIE1WNjQzWFhfRVRIX1BPUlRfU1RBVFVTX01JSV8xMDApCi0JCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQllbHNlCi0JCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKLQkJfQotCi0JCWlmIChwc3IgJiBNVjY0M1hYX0VUSF9QT1JUX1NUQVRVU19GVUxMX0RVUExFWCkKLQkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwotCQllbHNlCi0JCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOwotCQllY21kLT5kdXBsZXggPSAtMTsKLQl9Ci0KLQllY21kLT5hdXRvbmVnID0gYXV0b25lZyA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBtdjY0M3h4X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKQEAgLTMxNjgsMTUgKzI3MzAsNDEgQEAKIAl9CiB9CiAKK3N0YXRpYyB1MzIgbXY2NDN4eF9ldGhfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gbWlpX2xpbmtfb2soJm1wLT5taWkpOworfQorCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX253YXlfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZtcC0+bWlpKTsKK30KKworc3RhdGljIGludCBtdjY0M3h4X2V0aF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJm1wLT5taWksIGlmX21paShpZnIpLCBjbWQsIE5VTEwpOworfQorCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG12NjQzeHhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyAgICAgICAgICAgPSBtdjY0M3h4X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzICAgICAgICAgICA9IG12NjQzeHhfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgID0gbXY2NDN4eF9nZXRfZHJ2aW5mbywKLQkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9saW5rICAgICAgICAgICAgICAgPSBtdjY0M3h4X2V0aF9nZXRfbGluaywKIAkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKIAkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IG12NjQzeHhfZ2V0X3N0cmluZ3MsCiAJLmdldF9zdGF0c19jb3VudCAgICAgICAgPSBtdjY0M3h4X2dldF9zdGF0c19jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgICAgICA9IG12NjQzeHhfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zdHJpbmdzICAgICAgICAgICAgPSBtdjY0M3h4X2dldF9zdHJpbmdzLAorCS5nZXRfc3RhdHNfY291bnQgICAgICAgID0gbXY2NDN4eF9nZXRfc3RhdHNfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzICAgICAgPSBtdjY0M3h4X2dldF9ldGh0b29sX3N0YXRzLAorCS5ud2F5X3Jlc2V0CQk9IG12NjQzeHhfZXRoX253YXlfcmVzdGFydCwKIH07CiAKIC8qKioqKioqKioqKioqIEVuZCBldGh0b29sIHN1cHBvcnQgKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmggYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5oCmluZGV4IGY3NjlmOWIuLjQyNjJjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguaApAQCAtNSw1MyArNSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4Lmg+CiAKLSNkZWZpbmUJQklUMAkweDAwMDAwMDAxCi0jZGVmaW5lCUJJVDEJMHgwMDAwMDAwMgotI2RlZmluZQlCSVQyCTB4MDAwMDAwMDQKLSNkZWZpbmUJQklUMwkweDAwMDAwMDA4Ci0jZGVmaW5lCUJJVDQJMHgwMDAwMDAxMAotI2RlZmluZQlCSVQ1CTB4MDAwMDAwMjAKLSNkZWZpbmUJQklUNgkweDAwMDAwMDQwCi0jZGVmaW5lCUJJVDcJMHgwMDAwMDA4MAotI2RlZmluZQlCSVQ4CTB4MDAwMDAxMDAKLSNkZWZpbmUJQklUOQkweDAwMDAwMjAwCi0jZGVmaW5lCUJJVDEwCTB4MDAwMDA0MDAKLSNkZWZpbmUJQklUMTEJMHgwMDAwMDgwMAotI2RlZmluZQlCSVQxMgkweDAwMDAxMDAwCi0jZGVmaW5lCUJJVDEzCTB4MDAwMDIwMDAKLSNkZWZpbmUJQklUMTQJMHgwMDAwNDAwMAotI2RlZmluZQlCSVQxNQkweDAwMDA4MDAwCi0jZGVmaW5lCUJJVDE2CTB4MDAwMTAwMDAKLSNkZWZpbmUJQklUMTcJMHgwMDAyMDAwMAotI2RlZmluZQlCSVQxOAkweDAwMDQwMDAwCi0jZGVmaW5lCUJJVDE5CTB4MDAwODAwMDAKLSNkZWZpbmUJQklUMjAJMHgwMDEwMDAwMAotI2RlZmluZQlCSVQyMQkweDAwMjAwMDAwCi0jZGVmaW5lCUJJVDIyCTB4MDA0MDAwMDAKLSNkZWZpbmUJQklUMjMJMHgwMDgwMDAwMAotI2RlZmluZQlCSVQyNAkweDAxMDAwMDAwCi0jZGVmaW5lCUJJVDI1CTB4MDIwMDAwMDAKLSNkZWZpbmUJQklUMjYJMHgwNDAwMDAwMAotI2RlZmluZQlCSVQyNwkweDA4MDAwMDAwCi0jZGVmaW5lCUJJVDI4CTB4MTAwMDAwMDAKLSNkZWZpbmUJQklUMjkJMHgyMDAwMDAwMAotI2RlZmluZQlCSVQzMAkweDQwMDAwMDAwCi0jZGVmaW5lCUJJVDMxCTB4ODAwMDAwMDAKLQotLyoKLSAqICBUaGUgZmlyc3QgcGFydCBpcyB0aGUgaGlnaCBsZXZlbCBkcml2ZXIgb2YgdGhlIGdpZ0UgZXRoZXJuZXQgcG9ydHMuCi0gKi8KLQogLyogQ2hlY2tzdW0gb2ZmbG9hZCBmb3IgVHggd29ya3MgZm9yIG1vc3QgcGFja2V0cywgYnV0CiAgKiBmYWlscyBpZiBwcmV2aW91cyBwYWNrZXQgc2VudCBkaWQgbm90IHVzZSBodyBjc3VtCiAgKi8KICNkZWZpbmUJTVY2NDNYWF9DSEVDS1NVTV9PRkZMT0FEX1RYCiAjZGVmaW5lCU1WNjQzWFhfTkFQSQogI2RlZmluZQlNVjY0M1hYX1RYX0ZBU1RfUkVGSUxMCi0jdW5kZWYJTVY2NDNYWF9SWF9RVUVVRV9GSUxMX09OX1RBU0sJLyogRG9lcyBub3Qgd29yaywgeWV0ICovCiAjdW5kZWYJTVY2NDNYWF9DT0FMCiAKIC8qCkBAIC03MywyNSArMzYsNTAgQEAKICNkZWZpbmUgTVY2NDNYWF9SWF9DT0FMIDEwMAogI2VuZGlmCiAKLS8qCi0gKiBUaGUgc2Vjb25kIHBhcnQgaXMgdGhlIGxvdyBsZXZlbCBkcml2ZXIgb2YgdGhlIGdpZ0UgZXRoZXJuZXQgcG9ydHMuCi0gKi8KKyNpZmRlZiBNVjY0M1hYX0NIRUNLU1VNX09GRkxPQURfVFgKKyNkZWZpbmUgTUFYX0RFU0NTX1BFUl9TS0IJKE1BWF9TS0JfRlJBR1MgKyAxKQorI2Vsc2UKKyNkZWZpbmUgTUFYX0RFU0NTX1BFUl9TS0IJMQorI2VuZGlmCiAKIC8qCi0gKiBIZWFkZXIgRmlsZSBmb3IgOiBNVi02NDN4eCBuZXR3b3JrIGludGVyZmFjZSBoZWFkZXIKLSAqCi0gKiBERVNDUklQVElPTjoKLSAqCVRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgbWFjcm9zIHR5cGVkZWZzIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBmb3IKLSAqCXRoZSBNYXJ2ZWxsIEdpZyBCaXQgRXRoZXJuZXQgQ29udHJvbGxlci4KLSAqCi0gKiBERVBFTkRFTkNJRVM6Ci0gKglOb25lLgotICoKKyAqIFRoZSBNVjY0M1hYIEhXIHJlcXVpcmVzIDgtYnl0ZSBhbGlnbm1lbnQuICBIb3dldmVyLCB3aGVuIEkvTworICogaXMgbm9uLWNhY2hlLWNvaGVyZW50LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBJL08gYnVmZmVycworICogd2UgdXNlIGRvbid0IHNoYXJlIGNhY2hlIGxpbmVzIHdpdGggb3RoZXIgZGF0YS4KICAqLworI2lmIGRlZmluZWQoQ09ORklHX0RNQV9OT05DT0hFUkVOVCkgfHwgZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQorI2RlZmluZSBFVEhfRE1BX0FMSUdOCQlMMV9DQUNIRV9CWVRFUworI2Vsc2UKKyNkZWZpbmUgRVRIX0RNQV9BTElHTgkJOAorI2VuZGlmCiAKLS8qIE1BQyBhY2NlcGV0L3JlamVjdCBtYWNyb3MgKi8KLSNkZWZpbmUgQUNDRVBUX01BQ19BRERSCQkJCTAKLSNkZWZpbmUgUkVKRUNUX01BQ19BRERSCQkJCTEKKyNkZWZpbmUgRVRIX1ZMQU5fSExFTgkJNAorI2RlZmluZSBFVEhfRkNTX0xFTgkJNAorI2RlZmluZSBFVEhfSFdfSVBfQUxJR04JCTIJCS8qIGh3IGFsaWducyBJUCBoZWFkZXIgKi8KKyNkZWZpbmUgRVRIX1dSQVBQRVJfTEVOCQkoRVRIX0hXX0lQX0FMSUdOICsgRVRIX0hMRU4gKyBcCisJCQkJCUVUSF9WTEFOX0hMRU4gKyBFVEhfRkNTX0xFTikKKyNkZWZpbmUgRVRIX1JYX1NLQl9TSVpFCQkoZGV2LT5tdHUgKyBFVEhfV1JBUFBFUl9MRU4gKyBFVEhfRE1BX0FMSUdOKQorCisjZGVmaW5lIEVUSF9SWF9RVUVVRVNfRU5BQkxFRAkoMSA8PCAwKQkvKiB1c2Ugb25seSBRMCBmb3IgcmVjZWl2ZSAqLworI2RlZmluZSBFVEhfVFhfUVVFVUVTX0VOQUJMRUQJKDEgPDwgMCkJLyogdXNlIG9ubHkgUTAgZm9yIHRyYW5zbWl0ICovCisKKyNkZWZpbmUgRVRIX0lOVF9DQVVTRV9SWF9ET05FCShFVEhfUlhfUVVFVUVTX0VOQUJMRUQgPDwgMikKKyNkZWZpbmUgRVRIX0lOVF9DQVVTRV9SWF9FUlJPUgkoRVRIX1JYX1FVRVVFU19FTkFCTEVEIDw8IDkpCisjZGVmaW5lIEVUSF9JTlRfQ0FVU0VfUlgJKEVUSF9JTlRfQ0FVU0VfUlhfRE9ORSB8IEVUSF9JTlRfQ0FVU0VfUlhfRVJST1IpCisjZGVmaW5lIEVUSF9JTlRfQ0FVU0VfRVhUCTB4MDAwMDAwMDIKKyNkZWZpbmUgRVRIX0lOVF9VTk1BU0tfQUxMCShFVEhfSU5UX0NBVVNFX1JYIHwgRVRIX0lOVF9DQVVTRV9FWFQpCisKKyNkZWZpbmUgRVRIX0lOVF9DQVVTRV9UWF9ET05FCShFVEhfVFhfUVVFVUVTX0VOQUJMRUQgPDwgMCkKKyNkZWZpbmUgRVRIX0lOVF9DQVVTRV9UWF9FUlJPUgkoRVRIX1RYX1FVRVVFU19FTkFCTEVEIDw8IDgpCisjZGVmaW5lIEVUSF9JTlRfQ0FVU0VfVFgJKEVUSF9JTlRfQ0FVU0VfVFhfRE9ORSB8IEVUSF9JTlRfQ0FVU0VfVFhfRVJST1IpCisjZGVmaW5lIEVUSF9JTlRfQ0FVU0VfUEhZCTB4MDAwMTAwMDAKKyNkZWZpbmUgRVRIX0lOVF9VTk1BU0tfQUxMX0VYVAkoRVRIX0lOVF9DQVVTRV9UWCB8IEVUSF9JTlRfQ0FVU0VfUEhZKQorCisjZGVmaW5lIEVUSF9JTlRfTUFTS19BTEwJMHgwMDAwMDAwMAorI2RlZmluZSBFVEhfSU5UX01BU0tfQUxMX0VYVAkweDAwMDAwMDAwCisKKyNkZWZpbmUgUEhZX1dBSVRfSVRFUkFUSU9OUwkxMDAwCS8qIDEwMDAgaXRlcmF0aW9ucyAqIDEwdVMgPSAxMG1TIG1heCAqLworI2RlZmluZSBQSFlfV0FJVF9NSUNST19TRUNPTkRTCTEwCiAKIC8qIEJ1ZmZlciBvZmZzZXQgZnJvbSBidWZmZXIgcG9pbnRlciAqLwogI2RlZmluZSBSWF9CVUZfT0ZGU0VUCQkJCTB4MgpAQCAtMTMzLDg4ICsxMjEsNzEgQEAKICNkZWZpbmUgRVRIX01JQl9MQVRFX0NPTExJU0lPTgkJCTB4N2MKIAogLyogUG9ydCBzZXJpYWwgc3RhdHVzIHJlZyAoUFNSKSAqLwotI2RlZmluZSBFVEhfSU5URVJGQUNFX0dNSUlfTUlJCQkJMAotI2RlZmluZSBFVEhfSU5URVJGQUNFX1BDTQkJCUJJVDAKLSNkZWZpbmUgRVRIX0xJTktfSVNfRE9XTgkJCTAKLSNkZWZpbmUgRVRIX0xJTktfSVNfVVAJCQkJQklUMQotI2RlZmluZSBFVEhfUE9SVF9BVF9IQUxGX0RVUExFWAkJCTAKLSNkZWZpbmUgRVRIX1BPUlRfQVRfRlVMTF9EVVBMRVgJCQlCSVQyCi0jZGVmaW5lIEVUSF9SWF9GTE9XX0NUUkxfRElTQUJMRUQJCTAKLSNkZWZpbmUgRVRIX1JYX0ZMT1dfQ1RSTF9FTkJBTEVECQlCSVQzCi0jZGVmaW5lIEVUSF9HTUlJX1NQRUVEXzEwMF8xMAkJCTAKLSNkZWZpbmUgRVRIX0dNSUlfU1BFRURfMTAwMAkJCUJJVDQKLSNkZWZpbmUgRVRIX01JSV9TUEVFRF8xMAkJCTAKLSNkZWZpbmUgRVRIX01JSV9TUEVFRF8xMDAJCQlCSVQ1Ci0jZGVmaW5lIEVUSF9OT19UWAkJCQkwCi0jZGVmaW5lIEVUSF9UWF9JTl9QUk9HUkVTUwkJCUJJVDcKLSNkZWZpbmUgRVRIX0JZUEFTU19OT19BQ1RJVkUJCQkwCi0jZGVmaW5lIEVUSF9CWVBBU1NfQUNUSVZFCQkJQklUOAotI2RlZmluZSBFVEhfUE9SVF9OT1RfQVRfUEFSVElUSU9OX1NUQVRFCQkwCi0jZGVmaW5lIEVUSF9QT1JUX0FUX1BBUlRJVElPTl9TVEFURQkJQklUOQotI2RlZmluZSBFVEhfUE9SVF9UWF9GSUZPX05PVF9FTVBUWQkJMAotI2RlZmluZSBFVEhfUE9SVF9UWF9GSUZPX0VNUFRZCQkJQklUMTAKLQotI2RlZmluZSBFVEhfREVGQVVMVF9SWF9CUERVX1FVRVVFXzMJCShCSVQyMyB8IEJJVDIyKQotI2RlZmluZSBFVEhfREVGQVVMVF9SWF9CUERVX1FVRVVFXzQJCUJJVDI0Ci0jZGVmaW5lIEVUSF9ERUZBVUxUX1JYX0JQRFVfUVVFVUVfNQkJKEJJVDI0IHwgQklUMjIpCi0jZGVmaW5lIEVUSF9ERUZBVUxUX1JYX0JQRFVfUVVFVUVfNgkJKEJJVDI0IHwgQklUMjMpCi0jZGVmaW5lIEVUSF9ERUZBVUxUX1JYX0JQRFVfUVVFVUVfNwkJKEJJVDI0IHwgQklUMjMgfCBCSVQyMikKKyNkZWZpbmUgRVRIX0lOVEVSRkFDRV9QQ00JCQkweDAwMDAwMDAxCisjZGVmaW5lIEVUSF9MSU5LX0lTX1VQCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRVRIX1BPUlRfQVRfRlVMTF9EVVBMRVgJCQkweDAwMDAwMDA0CisjZGVmaW5lIEVUSF9SWF9GTE9XX0NUUkxfRU5BQkxFRAkJMHgwMDAwMDAwOAorI2RlZmluZSBFVEhfR01JSV9TUEVFRF8xMDAwCQkJMHgwMDAwMDAxMAorI2RlZmluZSBFVEhfTUlJX1NQRUVEXzEwMAkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRVRIX1RYX0lOX1BST0dSRVNTCQkJMHgwMDAwMDA4MAorI2RlZmluZSBFVEhfQllQQVNTX0FDVElWRQkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgRVRIX1BPUlRfQVRfUEFSVElUSU9OX1NUQVRFCQkweDAwMDAwMjAwCisjZGVmaW5lIEVUSF9QT1JUX1RYX0ZJRk9fRU1QVFkJCQkweDAwMDAwNDAwCiAKIC8qIFNNSSByZWcgKi8KLSNkZWZpbmUgRVRIX1NNSV9CVVNZCQlCSVQyOAkvKiAwIC0gV3JpdGUsIDEgLSBSZWFkCQkqLwotI2RlZmluZSBFVEhfU01JX1JFQURfVkFMSUQJQklUMjcJLyogMCAtIFdyaXRlLCAxIC0gUmVhZAkJKi8KLSNkZWZpbmUgRVRIX1NNSV9PUENPREVfV1JJVEUJMAkvKiBDb21wbGV0aW9uIG9mIFJlYWQgb3BlcmF0aW9uICovCi0jZGVmaW5lIEVUSF9TTUlfT1BDT0RFX1JFQUQgCUJJVDI2CS8qIE9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcwkqLworI2RlZmluZSBFVEhfU01JX0JVU1kJCTB4MTAwMDAwMDAJLyogMCAtIFdyaXRlLCAxIC0gUmVhZAkqLworI2RlZmluZSBFVEhfU01JX1JFQURfVkFMSUQJMHgwODAwMDAwMAkvKiAwIC0gV3JpdGUsIDEgLSBSZWFkCSovCisjZGVmaW5lIEVUSF9TTUlfT1BDT0RFX1dSSVRFCTAJCS8qIENvbXBsZXRpb24gb2YgUmVhZAkqLworI2RlZmluZSBFVEhfU01JX09QQ09ERV9SRUFEIAkweDA0MDAwMDAwCS8qIE9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAqLworCisvKiBJbnRlcnJ1cHQgQ2F1c2UgUmVnaXN0ZXIgQml0IERlZmluaXRpb25zICovCiAKIC8qIFNETUEgY29tbWFuZCBzdGF0dXMgZmllbGRzIG1hY3JvcyAqLwogCiAvKiBUeCAmIFJ4IGRlc2NyaXB0b3JzIHN0YXR1cyAqLwotI2RlZmluZSBFVEhfRVJST1JfU1VNTUFSWQkJCShCSVQwKQorI2RlZmluZSBFVEhfRVJST1JfU1VNTUFSWQkJCTB4MDAwMDAwMDEKIAogLyogVHggJiBSeCBkZXNjcmlwdG9ycyBjb21tYW5kICovCi0jZGVmaW5lIEVUSF9CVUZGRVJfT1dORURfQllfRE1BCQkJKEJJVDMxKQorI2RlZmluZSBFVEhfQlVGRkVSX09XTkVEX0JZX0RNQQkJCTB4ODAwMDAwMDAKIAogLyogVHggZGVzY3JpcHRvcnMgc3RhdHVzICovCi0jZGVmaW5lIEVUSF9MQ19FUlJPUgkJCQkoMCAgICApCi0jZGVmaW5lIEVUSF9VUl9FUlJPUgkJCQkoQklUMSApCi0jZGVmaW5lIEVUSF9STF9FUlJPUgkJCQkoQklUMiApCi0jZGVmaW5lIEVUSF9MTENfU05BUF9GT1JNQVQJCQkoQklUOSApCisjZGVmaW5lIEVUSF9MQ19FUlJPUgkJCQkwCisjZGVmaW5lIEVUSF9VUl9FUlJPUgkJCQkweDAwMDAwMDAyCisjZGVmaW5lIEVUSF9STF9FUlJPUgkJCQkweDAwMDAwMDA0CisjZGVmaW5lIEVUSF9MTENfU05BUF9GT1JNQVQJCQkweDAwMDAwMjAwCiAKIC8qIFJ4IGRlc2NyaXB0b3JzIHN0YXR1cyAqLwotI2RlZmluZSBFVEhfQ1JDX0VSUk9SCQkJCSgwICAgICkKLSNkZWZpbmUgRVRIX09WRVJSVU5fRVJST1IJCQkoQklUMSApCi0jZGVmaW5lIEVUSF9NQVhfRlJBTUVfTEVOR1RIX0VSUk9SCQkoQklUMiApCi0jZGVmaW5lIEVUSF9SRVNPVVJDRV9FUlJPUgkJCSgoQklUMiB8IEJJVDEpKQotI2RlZmluZSBFVEhfVkxBTl9UQUdHRUQJCQkJKEJJVDE5KQotI2RlZmluZSBFVEhfQlBEVV9GUkFNRQkJCQkoQklUMjApCi0jZGVmaW5lIEVUSF9UQ1BfRlJBTUVfT1ZFUl9JUF9WXzQJCSgwICAgICkKLSNkZWZpbmUgRVRIX1VEUF9GUkFNRV9PVkVSX0lQX1ZfNAkJKEJJVDIxKQotI2RlZmluZSBFVEhfT1RIRVJfRlJBTUVfVFlQRQkJCShCSVQyMikKLSNkZWZpbmUgRVRIX0xBWUVSXzJfSVNfRVRIX1ZfMgkJCShCSVQyMykKLSNkZWZpbmUgRVRIX0ZSQU1FX1RZUEVfSVBfVl80CQkJKEJJVDI0KQotI2RlZmluZSBFVEhfRlJBTUVfSEVBREVSX09LCQkJKEJJVDI1KQotI2RlZmluZSBFVEhfUlhfTEFTVF9ERVNDCQkJKEJJVDI2KQotI2RlZmluZSBFVEhfUlhfRklSU1RfREVTQwkJCShCSVQyNykKLSNkZWZpbmUgRVRIX1VOS05PV05fREVTVElOQVRJT05fQUREUgkJKEJJVDI4KQotI2RlZmluZSBFVEhfUlhfRU5BQkxFX0lOVEVSUlVQVAkJCShCSVQyOSkKLSNkZWZpbmUgRVRIX0xBWUVSXzRfQ0hFQ0tTVU1fT0sJCQkoQklUMzApCisjZGVmaW5lIEVUSF9PVkVSUlVOX0VSUk9SCQkJMHgwMDAwMDAwMgorI2RlZmluZSBFVEhfTUFYX0ZSQU1FX0xFTkdUSF9FUlJPUgkJMHgwMDAwMDAwNAorI2RlZmluZSBFVEhfUkVTT1VSQ0VfRVJST1IJCQkweDAwMDAwMDA2CisjZGVmaW5lIEVUSF9WTEFOX1RBR0dFRAkJCQkweDAwMDgwMDAwCisjZGVmaW5lIEVUSF9CUERVX0ZSQU1FCQkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgRVRIX1VEUF9GUkFNRV9PVkVSX0lQX1ZfNAkJMHgwMDIwMDAwMAorI2RlZmluZSBFVEhfT1RIRVJfRlJBTUVfVFlQRQkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgRVRIX0xBWUVSXzJfSVNfRVRIX1ZfMgkJCTB4MDA4MDAwMDAKKyNkZWZpbmUgRVRIX0ZSQU1FX1RZUEVfSVBfVl80CQkJMHgwMTAwMDAwMAorI2RlZmluZSBFVEhfRlJBTUVfSEVBREVSX09LCQkJMHgwMjAwMDAwMAorI2RlZmluZSBFVEhfUlhfTEFTVF9ERVNDCQkJMHgwNDAwMDAwMAorI2RlZmluZSBFVEhfUlhfRklSU1RfREVTQwkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgRVRIX1VOS05PV05fREVTVElOQVRJT05fQUREUgkJMHgxMDAwMDAwMAorI2RlZmluZSBFVEhfUlhfRU5BQkxFX0lOVEVSUlVQVAkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgRVRIX0xBWUVSXzRfQ0hFQ0tTVU1fT0sJCQkweDQwMDAwMDAwCiAKIC8qIFJ4IGRlc2NyaXB0b3JzIGJ5dGUgY291bnQgKi8KLSNkZWZpbmUgRVRIX0ZSQU1FX0ZSQUdNRU5URUQJCQkoQklUMikKKyNkZWZpbmUgRVRIX0ZSQU1FX0ZSQUdNRU5URUQJCQkweDAwMDAwMDA0CiAKIC8qIFR4IGRlc2NyaXB0b3JzIGNvbW1hbmQgKi8KLSNkZWZpbmUgRVRIX0xBWUVSXzRfQ0hFQ0tTVU1fRklSU1RfREVTQwkJKEJJVDEwKQotI2RlZmluZSBFVEhfRlJBTUVfU0VUX1RPX1ZMQU4JCQkoQklUMTUpCi0jZGVmaW5lIEVUSF9UQ1BfRlJBTUUJCQkJKDAgICAgKQotI2RlZmluZSBFVEhfVURQX0ZSQU1FCQkJCShCSVQxNikKLSNkZWZpbmUgRVRIX0dFTl9UQ1BfVURQX0NIRUNLU1VNCQkoQklUMTcpCi0jZGVmaW5lIEVUSF9HRU5fSVBfVl80X0NIRUNLU1VNCQkJKEJJVDE4KQotI2RlZmluZSBFVEhfWkVST19QQURESU5HCQkJKEJJVDE5KQotI2RlZmluZSBFVEhfVFhfTEFTVF9ERVNDCQkJKEJJVDIwKQotI2RlZmluZSBFVEhfVFhfRklSU1RfREVTQwkJCShCSVQyMSkKLSNkZWZpbmUgRVRIX0dFTl9DUkMJCQkJKEJJVDIyKQotI2RlZmluZSBFVEhfVFhfRU5BQkxFX0lOVEVSUlVQVAkJCShCSVQyMykKLSNkZWZpbmUgRVRIX0FVVE9fTU9ERQkJCQkoQklUMzApCisjZGVmaW5lIEVUSF9MQVlFUl80X0NIRUNLU1VNX0ZJUlNUX0RFU0MJCTB4MDAwMDA0MDAKKyNkZWZpbmUgRVRIX0ZSQU1FX1NFVF9UT19WTEFOCQkJMHgwMDAwODAwMAorI2RlZmluZSBFVEhfVURQX0ZSQU1FCQkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgRVRIX0dFTl9UQ1BfVURQX0NIRUNLU1VNCQkweDAwMDIwMDAwCisjZGVmaW5lIEVUSF9HRU5fSVBfVl80X0NIRUNLU1VNCQkJMHgwMDA0MDAwMAorI2RlZmluZSBFVEhfWkVST19QQURESU5HCQkJMHgwMDA4MDAwMAorI2RlZmluZSBFVEhfVFhfTEFTVF9ERVNDCQkJMHgwMDEwMDAwMAorI2RlZmluZSBFVEhfVFhfRklSU1RfREVTQwkJCTB4MDAyMDAwMDAKKyNkZWZpbmUgRVRIX0dFTl9DUkMJCQkJMHgwMDQwMDAwMAorI2RlZmluZSBFVEhfVFhfRU5BQkxFX0lOVEVSUlVQVAkJCTB4MDA4MDAwMDAKKyNkZWZpbmUgRVRIX0FVVE9fTU9ERQkJCQkweDQwMDAwMDAwCiAKICNkZWZpbmUgRVRIX1RYX0lITF9TSElGVAkJCTExCiAKQEAgLTMyNCwxMyArMjk1LDYgQEAKIAogc3RydWN0IG12NjQzeHhfcHJpdmF0ZSB7CiAJaW50IHBvcnRfbnVtOwkJCS8qIFVzZXIgRXRoZXJuZXQgcG9ydCBudW1iZXIJKi8KLQl1OCBwb3J0X21hY19hZGRyWzZdOwkJLyogVXNlciBkZWZpbmVkIHBvcnQgTUFDIGFkZHJlc3MuKi8KLQl1MzIgcG9ydF9jb25maWc7CQkvKiBVc2VyIHBvcnQgY29uZmlndXJhdGlvbiB2YWx1ZSovCi0JdTMyIHBvcnRfY29uZmlnX2V4dGVuZDsJCS8qIFVzZXIgcG9ydCBjb25maWcgZXh0ZW5kIHZhbHVlKi8KLQl1MzIgcG9ydF9zZG1hX2NvbmZpZzsJCS8qIFVzZXIgcG9ydCBTRE1BIGNvbmZpZyB2YWx1ZQkqLwotCXUzMiBwb3J0X3NlcmlhbF9jb250cm9sOwkvKiBVc2VyIHBvcnQgc2VyaWFsIGNvbnRyb2wgdmFsdWUgKi8KLQl1MzIgcG9ydF90eF9xdWV1ZV9jb21tYW5kOwkvKiBQb3J0IGFjdGl2ZSBUeCBxdWV1ZXMgc3VtbWFyeSovCi0JdTMyIHBvcnRfcnhfcXVldWVfY29tbWFuZDsJLyogUG9ydCBhY3RpdmUgUnggcXVldWVzIHN1bW1hcnkqLwogCiAJdTMyIHJ4X3NyYW1fYWRkcjsJCS8qIEJhc2UgYWRkcmVzcyBvZiByeCBzcmFtIGFyZWEgKi8KIAl1MzIgcnhfc3JhbV9zaXplOwkJLyogU2l6ZSBvZiByeCBzcmFtIGFyZWEJCSovCkBAIC0zMzgsNyArMzAyLDYgQEAKIAl1MzIgdHhfc3JhbV9zaXplOwkJLyogU2l6ZSBvZiB0eCBzcmFtIGFyZWEJCSovCiAKIAlpbnQgcnhfcmVzb3VyY2VfZXJyOwkJLyogUnggcmluZyByZXNvdXJjZSBlcnJvciBmbGFnICovCi0JaW50IHR4X3Jlc291cmNlX2VycjsJCS8qIFR4IHJpbmcgcmVzb3VyY2UgZXJyb3IgZmxhZyAqLwogCiAJLyogVHgvUnggcmluZ3MgbWFuYWdtZW50IGluZGV4ZXMgZmllbGRzLiBGb3IgZHJpdmVyIHVzZSAqLwogCkBAIC0zNDcsMTAgKzMxMCw2IEBACiAKIAkvKiBOZXh0IGF2YWlsYWJsZSBhbmQgZmlyc3QgcmV0dXJuaW5nIFR4IHJlc291cmNlICovCiAJaW50IHR4X2N1cnJfZGVzY19xLCB0eF91c2VkX2Rlc2NfcTsKLSNpZmRlZiBNVjY0M1hYX0NIRUNLU1VNX09GRkxPQURfVFgKLQlpbnQgdHhfZmlyc3RfZGVzY19xOwotCXUzMiB0eF9maXJzdF9jb21tYW5kOwotI2VuZGlmCiAKICNpZmRlZiBNVjY0M1hYX1RYX0ZBU1RfUkVGSUxMCiAJdTMyIHR4X2NsZWFuX3RocmVzaG9sZDsKQEAgLTM1OCw1NCArMzE3LDQzIEBACiAKIAlzdHJ1Y3QgZXRoX3J4X2Rlc2MgKnBfcnhfZGVzY19hcmVhOwogCWRtYV9hZGRyX3QgcnhfZGVzY19kbWE7Ci0JdW5zaWduZWQgaW50IHJ4X2Rlc2NfYXJlYV9zaXplOworCWludCByeF9kZXNjX2FyZWFfc2l6ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKIAogCXN0cnVjdCBldGhfdHhfZGVzYyAqcF90eF9kZXNjX2FyZWE7CiAJZG1hX2FkZHJfdCB0eF9kZXNjX2RtYTsKLQl1bnNpZ25lZCBpbnQgdHhfZGVzY19hcmVhX3NpemU7CisJaW50IHR4X2Rlc2NfYXJlYV9zaXplOwogCXN0cnVjdCBza19idWZmICoqdHhfc2tiOwogCiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKIAotCS8qCi0JICogRm9ybWVyIHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2IG1lbWJlcnMgc3RhcnQgaGVyZQotCSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBtdjY0M3h4X21pYl9jb3VudGVycyBtaWJfY291bnRlcnM7CiAJc3BpbmxvY2tfdCBsb2NrOwogCS8qIFNpemUgb2YgVHggUmluZyBwZXIgcXVldWUgKi8KLQl1bnNpZ25lZCBpbnQgdHhfcmluZ19zaXplOwotCS8qIEFtbW9udCBvZiBTS0JzIG91dHN0YW5kaW5nIG9uIFR4IHF1ZXVlICovCi0JdW5zaWduZWQgaW50IHR4X3Jpbmdfc2ticzsKKwlpbnQgdHhfcmluZ19zaXplOworCS8qIE51bWJlciBvZiB0eCBkZXNjcmlwdG9ycyBpbiB1c2UgKi8KKwlpbnQgdHhfZGVzY19jb3VudDsKIAkvKiBTaXplIG9mIFJ4IFJpbmcgcGVyIHF1ZXVlICovCi0JdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2l6ZTsKLQkvKiBBbW1vdW50IG9mIFNLQnMgYWxsb2NhdGVkIHRvIFJ4IFJpbmcgcGVyIHF1ZXVlICovCi0JdW5zaWduZWQgaW50IHJ4X3Jpbmdfc2ticzsKLQotCS8qCi0JICogcnhfdGFzayB1c2VkIHRvIGZpbGwgUlggcmluZyBvdXQgb2YgYm90dG9tIGhhbGYgY29udGV4dAotCSAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCByeF90YXNrOworCWludCByeF9yaW5nX3NpemU7CisJLyogTnVtYmVyIG9mIHJ4IGRlc2NyaXB0b3JzIGluIHVzZSAqLworCWludCByeF9kZXNjX2NvdW50OwogCiAJLyoKIAkgKiBVc2VkIGluIGNhc2UgUlggUmluZyBpcyBlbXB0eSwgd2hpY2ggY2FuIGJlIGNhdXNlZCB3aGVuCiAJICogc3lzdGVtIGRvZXMgbm90IGhhdmUgcmVzb3VyY2VzIChza2IncykKIAkgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OwotCWxvbmcgcnhfdGFza19idXN5IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKFNNUF9DQUNIRV9CWVRFUykpKTsKLQl1bnNpZ25lZCByeF90aW1lcl9mbGFnOwogCiAJdTMyIHJ4X2ludF9jb2FsOwogCXUzMiB0eF9pbnRfY29hbDsKKwlzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpOwogfTsKIAotLyogZXRoZXJuZXQuaCBBUEkgbGlzdCAqLwotCiAvKiBQb3J0IG9wZXJhdGlvbiBjb250cm9sIHJvdXRpbmVzICovCiBzdGF0aWMgdm9pZCBldGhfcG9ydF9pbml0KHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wKTsKIHN0YXRpYyB2b2lkIGV0aF9wb3J0X3Jlc2V0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0pOwotc3RhdGljIHZvaWQgZXRoX3BvcnRfc3RhcnQoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXApOworc3RhdGljIHZvaWQgZXRoX3BvcnRfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIFBvcnQgTUFDIGFkZHJlc3Mgcm91dGluZXMgKi8KIHN0YXRpYyB2b2lkIGV0aF9wb3J0X3VjX2FkZHJfc2V0KHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0sCkBAIC00MjMsMTAgKzM3MSw2IEBACiBzdGF0aWMgdm9pZCBldGhfY2xlYXJfbWliX2NvdW50ZXJzKHVuc2lnbmVkIGludCBldGhfcG9ydF9udW0pOwogCiAvKiBQb3J0IGRhdGEgZmxvdyBjb250cm9sIHJvdXRpbmVzICovCi1zdGF0aWMgRVRIX0ZVTkNfUkVUX1NUQVRVUyBldGhfcG9ydF9zZW5kKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLAotCQkJCQkgc3RydWN0IHBrdF9pbmZvICpwX3BrdF9pbmZvKTsKLXN0YXRpYyBFVEhfRlVOQ19SRVRfU1RBVFVTIGV0aF90eF9yZXR1cm5fZGVzYyhzdHJ1Y3QgbXY2NDN4eF9wcml2YXRlICptcCwKLQkJCQkJICAgICAgc3RydWN0IHBrdF9pbmZvICpwX3BrdF9pbmZvKTsKIHN0YXRpYyBFVEhfRlVOQ19SRVRfU1RBVFVTIGV0aF9wb3J0X3JlY2VpdmUoc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXAsCiAJCQkJCSAgICBzdHJ1Y3QgcGt0X2luZm8gKnBfcGt0X2luZm8pOwogc3RhdGljIEVUSF9GVU5DX1JFVF9TVEFUVVMgZXRoX3J4X3JldHVybl9idWZmKHN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCmluZGV4IDlkNmQyNTQuLjhkNDk5OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYworKysgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKQEAgLTMsNiArMyw3IEBACiAJV3JpdHRlbi9jb3B5cmlnaHQgMTk5OS0yMDAxIGJ5IERvbmFsZCBCZWNrZXIuCiAJUG9ydGlvbnMgY29weXJpZ2h0IChjKSAyMDAxLDIwMDIgU3VuIE1pY3Jvc3lzdGVtcyAodGhvY2tpbkBzdW4uY29tKQogCVBvcnRpb25zIGNvcHlyaWdodCAyMDAxLDIwMDIgTWFuZnJlZCBTcHJhdWwgKG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbSkKKwlQb3J0aW9ucyBjb3B5cmlnaHQgMjAwNCBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgogCiAJVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgogCXRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCkBAIC0xMzUsOCArMTM2LDYgQEAKIAogCVRPRE86CiAJKiBiaWcgZW5kaWFuIHN1cHBvcnQgd2l0aCBDRkc6QkVNIGluc3RlYWQgb2YgY3B1X3RvX2xlMzIKLQkqIHN1cHBvcnQgZm9yIGFuIGV4dGVybmFsIFBIWQotCSogTkFQSQogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTYwLDYgKzE1OSw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JLyogUHJvY2Vzc29yIHR5cGUgZm9yIGNhY2hlIGFsaWdubWVudC4gKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0xODMsMTMgKzE4MywxMSBAQAogCQkJCSBORVRJRl9NU0dfVFhfRVJSKQogc3RhdGljIGludCBkZWJ1ZyA9IC0xOwogCi0vKiBNYXhpbXVtIGV2ZW50cyAoUnggcGFja2V0cywgZXRjLikgdG8gaGFuZGxlIGF0IGVhY2ggaW50ZXJydXB0LiAqLwotc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSAyMDsKIHN0YXRpYyBpbnQgbXR1OwogCiAvKiBNYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGZpbHRlciAodnMuIHJ4LWFsbC1tdWx0aWNhc3QpLgogICAgVGhpcyBjaGlwIHVzZXMgYSA1MTIgZWxlbWVudCBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBFdGhlcm5ldCBDUkMuICAqLwotc3RhdGljIGludCBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMTAwOworc3RhdGljIGNvbnN0IGludCBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMTAwOwogCiAvKiBTZXQgdGhlIGNvcHkgYnJlYWtwb2ludCBmb3IgdGhlIGNvcHktb25seS10aW55LWZyYW1lcyBzY2hlbWUuCiAgICBTZXR0aW5nIHRvID4gMTUxOCBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuICovCkBAIC0yNTEsMTQgKzI0OSwxMSBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJOYXRpb25hbCBTZW1pY29uZHVjdG9yIERQODM4MXggc2VyaWVzIFBDSSBFdGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotbW9kdWxlX3BhcmFtKG1heF9pbnRlcnJ1cHRfd29yaywgaW50LCAwKTsKIG1vZHVsZV9wYXJhbShtdHUsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0ocnhfY29weWJyZWFrLCBpbnQsIDApOwogbW9kdWxlX3BhcmFtX2FycmF5KG9wdGlvbnMsIGludCwgTlVMTCwgMCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZnVsbF9kdXBsZXgsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywgCi0JIkRQODM4MXggbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKG10dSwgIkRQODM4MXggTVRVIChhbGwgYm9hcmRzKSIpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRQODM4MXggZGVmYXVsdCBkZWJ1ZyBsZXZlbCIpOwogTU9EVUxFX1BBUk1fREVTQyhyeF9jb3B5YnJlYWssIApAQCAtMzc0LDcgKzM2OSw3IEBACiAKICAKIC8qIGFycmF5IG9mIGJvYXJkIGRhdGEgZGlyZWN0bHkgaW5kZXhlZCBieSBwY2lfdGJsW3hdLmRyaXZlcl9kYXRhICovCi1zdGF0aWMgc3RydWN0IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIH0gbmF0c2VtaV9wY2lfaW5mb1tdIF9fZGV2aW5pdGRhdGEgPSB7CkBAIC02OTEsNiArNjg2LDggQEAKIAkvKiBCYXNlZCBvbiBNVFUrc2xhY2suICovCiAJdW5zaWduZWQgaW50IHJ4X2J1Zl9zejsKIAlpbnQgb29tOworCS8qIEludGVycnVwdCBzdGF0dXMgKi8KKwl1MzIgaW50cl9zdGF0dXM7CiAJLyogRG8gbm90IHRvdWNoIHRoZSBuaWMgcmVnaXN0ZXJzICovCiAJaW50IGhhbmRzX29mZjsKIAkvKiBleHRlcm5hbCBwaHkgdGhhdCBpcyB1c2VkOiBvbmx5IHZhbGlkIGlmIGRldi0+aWZfcG9ydCAhPSBQT1JUX1RQICovCkBAIC03NDgsNyArNzQ1LDggQEAKIHN0YXRpYyBpbnQgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIHZvaWQgbmV0ZGV2X2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbnRyX3N0YXR1cyk7Ci1zdGF0aWMgdm9pZCBuZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG5hdHNlbWlfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCk7CitzdGF0aWMgdm9pZCBuZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKTsKIHN0YXRpYyB2b2lkIG5ldGRldl90eF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBuYXRzZW1pX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC03NzYsNiArNzc0LDE4IEBACiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgZGV2LT5iYXNlX2FkZHI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYXRzZW1pX2lycV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl3cml0ZWwoMSwgbnNfaW9hZGRyKGRldikgKyBJbnRyRW5hYmxlKTsKKwlyZWFkbChuc19pb2FkZHIoZGV2KSArIEludHJFbmFibGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmF0c2VtaV9pcnFfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXdyaXRlbCgwLCBuc19pb2FkZHIoZGV2KSArIEludHJFbmFibGUpOworCXJlYWRsKG5zX2lvYWRkcihkZXYpICsgSW50ckVuYWJsZSk7Cit9CisKIHN0YXRpYyB2b2lkIG1vdmVfaW50X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWRkcikKIHsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTg3OSw2ICs4ODksNyBAQAogCXNwaW5fbG9ja19pbml0KCZucC0+bG9jayk7CiAJbnAtPm1zZ19lbmFibGUgPSAoZGVidWcgPj0gMCkgPyAoMTw8ZGVidWcpLTEgOiBOQVRTRU1JX0RFRl9NU0c7CiAJbnAtPmhhbmRzX29mZiA9IDA7CisJbnAtPmludHJfc3RhdHVzID0gMDsKIAogCS8qIEluaXRpYWwgcG9ydDoKIAkgKiAtIElmIHRoZSBuaWMgd2FzIGNvbmZpZ3VyZWQgdG8gdXNlIGFuIGV4dGVybmFsIHBoeSBhbmQgaWYgZmluZF9taWkKQEAgLTkzMiw2ICs5NDMsOSBAQAogCWRldi0+ZG9faW9jdGwgPSAmbmV0ZGV2X2lvY3RsOwogCWRldi0+dHhfdGltZW91dCA9ICZ0eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOworCWRldi0+cG9sbCA9IG5hdHNlbWlfcG9sbDsKKwlkZXYtPndlaWdodCA9IDY0OworCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAlkZXYtPnBvbGxfY29udHJvbGxlciA9ICZuYXRzZW1pX3BvbGxfY29udHJvbGxlcjsKICNlbmRpZgpAQCAtMTQ4NCw2ICsxNDk4LDMxIEBACiAJd3JpdGVsKHJmY3IsIGlvYWRkciArIFJ4RmlsdGVyQWRkcik7CiB9CiAKK3N0YXRpYyB2b2lkIHJlc2V0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBuc19pb2FkZHIoZGV2KTsKKworCW5wLT5pbnRyX3N0YXR1cyAmPSB+UnhSZXNldERvbmU7CisKKwl3cml0ZWwoUnhSZXNldCwgaW9hZGRyICsgQ2hpcENtZCk7CisKKwlmb3IgKGk9MDtpPE5BVFNFTUlfSFdfVElNRU9VVDtpKyspIHsKKwkJbnAtPmludHJfc3RhdHVzIHw9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOworCQlpZiAobnAtPmludHJfc3RhdHVzICYgUnhSZXNldERvbmUpCisJCQlicmVhazsKKwkJdWRlbGF5KDE1KTsKKwl9CisJaWYgKGk9PU5BVFNFTUlfSFdfVElNRU9VVCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUlggcmVzZXQgZGlkIG5vdCBjb21wbGV0ZSBpbiAlZCB1c2VjLlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaSoxNSk7CisJfSBlbHNlIGlmIChuZXRpZl9tc2dfaHcobnApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSWCByZXNldCB0b29rICVkIHVzZWMuXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBpKjE1KTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG5hdHNlbWlfcmVsb2FkX2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjE1OCw2OCArMjE5Nyw5MiBAQAogCX0KIH0KIAotLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCi0gICBhZnRlciB0aGUgVHggdGhyZWFkLiAqLworLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXNuJ3QgYWN0dWFsbHkgaGFuZGxlIGludGVycnVwdHMgaXRzZWxmLCBpdAorICogc2NoZWR1bGVzIGEgTkFQSSBwb2xsIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIGRvLiAqLwogc3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pbnN0YW5jZTsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKiBpb2FkZHIgPSBuc19pb2FkZHIoZGV2KTsKLQlpbnQgYm9ndXNjbnQgPSBtYXhfaW50ZXJydXB0X3dvcms7Ci0JdW5zaWduZWQgaW50IGhhbmRsZWQgPSAwOwogCiAJaWYgKG5wLT5oYW5kc19vZmYpCiAJCXJldHVybiBJUlFfTk9ORTsKKwkKKwkvKiBSZWFkaW5nIGF1dG9tYXRpY2FsbHkgYWNrbm93bGVkZ2VzLiAqLworCW5wLT5pbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOworCisJaWYgKG5ldGlmX21zZ19pbnRyKG5wKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICIlczogSW50ZXJydXB0LCBzdGF0dXMgJSMwOHgsIG1hc2sgJSMwOHguXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBucC0+aW50cl9zdGF0dXMsCisJCSAgICAgICByZWFkbChpb2FkZHIgKyBJbnRyTWFzaykpOworCisJaWYgKCFucC0+aW50cl9zdGF0dXMpIAorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlwcmVmZXRjaCgmbnAtPnJ4X3NrYnVmZltucC0+Y3VyX3J4ICUgUlhfUklOR19TSVpFXSk7CisKKwlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CisJCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgcmVnaXN0ZXIgZm9yIHBvbGwgKi8KKwkJbmF0c2VtaV9pcnFfZGlzYWJsZShkZXYpOworCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldik7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogVGhpcyBpcyB0aGUgTkFQSSBwb2xsIHJvdXRpbmUuICBBcyB3ZWxsIGFzIHRoZSBzdGFuZGFyZCBSWCBoYW5kbGluZworICogaXQgYWxzbyBoYW5kbGVzIGFsbCBvdGhlciBpbnRlcnJ1cHRzIHRoYXQgdGhlIGNoaXAgbWlnaHQgcmFpc2UuCisgKi8KK3N0YXRpYyBpbnQgbmF0c2VtaV9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQoreworCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqIGlvYWRkciA9IG5zX2lvYWRkcihkZXYpOworCisJaW50IHdvcmtfdG9fZG8gPSBtaW4oKmJ1ZGdldCwgZGV2LT5xdW90YSk7CisJaW50IHdvcmtfZG9uZSA9IDA7CisKIAlkbyB7Ci0JCS8qIFJlYWRpbmcgYXV0b21hdGljYWxseSBhY2tub3dsZWRnZXMgYWxsIGludCBzb3VyY2VzLiAqLwotCQl1MzIgaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBJbnRyU3RhdHVzKTsKLQotCQlpZiAobmV0aWZfbXNnX2ludHIobnApKQotCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkiJXM6IEludGVycnVwdCwgc3RhdHVzICUjMDh4LCBtYXNrICUjMDh4LlxuIiwKLQkJCQlkZXYtPm5hbWUsIGludHJfc3RhdHVzLAotCQkJCXJlYWRsKGlvYWRkciArIEludHJNYXNrKSk7Ci0KLQkJaWYgKGludHJfc3RhdHVzID09IDApCi0JCQlicmVhazsKLQkJaGFuZGxlZCA9IDE7Ci0KLQkJaWYgKGludHJfc3RhdHVzICYKLQkJICAgKEludHJSeERvbmUgfCBJbnRyUnhJbnRyIHwgUnhTdGF0dXNGSUZPT3ZlciB8Ci0JCSAgICBJbnRyUnhFcnIgfCBJbnRyUnhPdmVycnVuKSkgewotCQkJbmV0ZGV2X3J4KGRldik7Ci0JCX0KLQotCQlpZiAoaW50cl9zdGF0dXMgJgotCQkgICAoSW50clR4RG9uZSB8IEludHJUeEludHIgfCBJbnRyVHhJZGxlIHwgSW50clR4RXJyKSkgeworCQlpZiAobnAtPmludHJfc3RhdHVzICYKKwkJICAgIChJbnRyVHhEb25lIHwgSW50clR4SW50ciB8IEludHJUeElkbGUgfCBJbnRyVHhFcnIpKSB7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCW5ldGRldl90eF9kb25lKGRldik7CiAJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQl9CiAKIAkJLyogQWJub3JtYWwgZXJyb3Igc3VtbWFyeS91bmNvbW1vbiBldmVudHMgaGFuZGxlcnMuICovCi0JCWlmIChpbnRyX3N0YXR1cyAmIEludHJBYm5vcm1hbFN1bW1hcnkpCi0JCQluZXRkZXZfZXJyb3IoZGV2LCBpbnRyX3N0YXR1cyk7Ci0KLQkJaWYgKC0tYm9ndXNjbnQgPCAwKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2ludHIobnApKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkJIiVzOiBUb28gbXVjaCB3b3JrIGF0IGludGVycnVwdCwgIgotCQkJCQkic3RhdHVzPSUjMDh4LlxuIiwKLQkJCQkJZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7Ci0JCQlicmVhazsKKwkJaWYgKG5wLT5pbnRyX3N0YXR1cyAmIEludHJBYm5vcm1hbFN1bW1hcnkpCisJCQluZXRkZXZfZXJyb3IoZGV2LCBucC0+aW50cl9zdGF0dXMpOworCQkKKwkJaWYgKG5wLT5pbnRyX3N0YXR1cyAmCisJCSAgICAoSW50clJ4RG9uZSB8IEludHJSeEludHIgfCBSeFN0YXR1c0ZJRk9PdmVyIHwKKwkJICAgICBJbnRyUnhFcnIgfCBJbnRyUnhPdmVycnVuKSkgeworCQkJbmV0ZGV2X3J4KGRldiwgJndvcmtfZG9uZSwgd29ya190b19kbyk7CiAJCX0KLQl9IHdoaWxlICgxKTsKKwkJCisJCSpidWRnZXQgLT0gd29ya19kb25lOworCQlkZXYtPnF1b3RhIC09IHdvcmtfZG9uZTsKIAotCWlmIChuZXRpZl9tc2dfaW50cihucCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpdGluZyBpbnRlcnJ1cHQuXG4iLCBkZXYtPm5hbWUpOworCQlpZiAod29ya19kb25lID49IHdvcmtfdG9fZG8pCisJCQlyZXR1cm4gMTsKIAotCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworCQlucC0+aW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBJbnRyU3RhdHVzKTsKKwl9IHdoaWxlIChucC0+aW50cl9zdGF0dXMpOworCisJbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKworCS8qIFJlZW5hYmxlIGludGVycnVwdHMgcHJvdmlkaW5nIG5vdGhpbmcgaXMgdHJ5aW5nIHRvIHNodXQKKwkgKiB0aGUgY2hpcCBkb3duLiAqLworCXNwaW5fbG9jaygmbnAtPmxvY2spOworCWlmICghbnAtPmhhbmRzX29mZiAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCW5hdHNlbWlfaXJxX2VuYWJsZShkZXYpOworCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogVGhpcyByb3V0aW5lIGlzIGxvZ2ljYWxseSBwYXJ0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgYnV0IHNlcGFyYXRlZAogICAgZm9yIGNsYXJpdHkgYW5kIGJldHRlciByZWdpc3RlciBhbGxvY2F0aW9uLiAqLwotc3RhdGljIHZvaWQgbmV0ZGV2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBuZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQogewogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlbnRyeSA9IG5wLT5jdXJfcnggJSBSWF9SSU5HX1NJWkU7CkBAIC0yMjM3LDYgKzIzMDAsMTIgQEAKIAkJCQllbnRyeSwgZGVzY19zdGF0dXMpOwogCQlpZiAoLS1ib2d1c2NudCA8IDApCiAJCQlicmVhazsKKworCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQorCQkJYnJlYWs7CisKKwkJKCp3b3JrX2RvbmUpKys7CisKIAkJcGt0X2xlbiA9IChkZXNjX3N0YXR1cyAmIERlc2NTaXplTWFzaykgLSA0OwogCQlpZiAoKGRlc2Nfc3RhdHVzJihEZXNjTW9yZXxEZXNjUGt0T0t8RGVzY1J4TG9uZykpICE9IERlc2NQa3RPSyl7CiAJCQlpZiAoZGVzY19zdGF0dXMgJiBEZXNjTW9yZSkgewpAQCAtMjI0OCw2ICsyMzE3LDIzIEBACiAJCQkJCQkic3RhdHVzICUjMDh4LlxuIiwgZGV2LT5uYW1lLAogCQkJCQkJbnAtPmN1cl9yeCwgZGVzY19zdGF0dXMpOwogCQkJCW5wLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisKKwkJCQkvKiBUaGUgUlggc3RhdGUgbWFjaGluZSBoYXMgcHJvYmFibHkKKwkJCQkgKiBsb2NrZWQgdXAgYmVuZWF0aCB1cy4gIEZvbGxvdyB0aGUKKwkJCQkgKiByZXNldCBwcm9jZWR1cmUgZG9jdW1lbnRlZCBpbgorCQkJCSAqIEFOLTEyODcuICovCisKKwkJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CisJCQkJcmVzZXRfcngoZGV2KTsKKwkJCQlyZWluaXRfcngoZGV2KTsKKwkJCQl3cml0ZWwobnAtPnJpbmdfZG1hLCBpb2FkZHIgKyBSeFJpbmdQdHIpOworCQkJCWNoZWNrX2xpbmsoZGV2KTsKKwkJCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKworCQkJCS8qIFdlJ2xsIGVuYWJsZSBSWCBvbiBleGl0IGZyb20gdGhpcworCQkJCSAqIGZ1bmN0aW9uLiAqLworCQkJCWJyZWFrOworCiAJCQl9IGVsc2UgewogCQkJCS8qIFRoZXJlIHdhcyBhbiBlcnJvci4gKi8KIAkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CkBAIC0yMjkzLDcgKzIzNzksNyBAQAogCQkJCW5wLT5yeF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJCX0KIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCQluZXRpZl9yeChza2IpOworCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCQlucC0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJbnAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CkBAIC0zMDc0LDkgKzMxNjAsNyBAQAogCWRlbF90aW1lcl9zeW5jKCZucC0+dGltZXIpOwogCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7Ci0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzLCBhbmQgZmx1c2ggcG9zdGVkIHdyaXRlcyAqLwotCXdyaXRlbCgwLCBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKLQlyZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsKKwluYXRzZW1pX2lycV9kaXNhYmxlKGRldik7CiAJbnAtPmhhbmRzX29mZiA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJZW5hYmxlX2lycShkZXYtPmlycSk7CkBAIC0zMTU4LDYgKzMyNDIsOSBAQAogICoJKiBuZXRkZXZfdGltZXI6IHRpbWVyIHN0b3BwZWQgYnkgbmF0c2VtaV9zdXNwZW5kLgogICoJKiBpbnRyX2hhbmRsZXI6IGRvZXNuJ3QgYWNxdWlyZSB0aGUgc3BpbmxvY2suIHN1c3BlbmQgY2FsbHMKICAqCQlkaXNhYmxlX2lycSgpIHRvIGVuZm9yY2Ugc3luY2hyb25pemF0aW9uLgorICogICAgICAqIG5hdHNlbWlfcG9sbDogY2hlY2tzIGJlZm9yZSByZWVuYWJsaW5nIGludGVycnVwdHMuICBzdXNwZW5kCisgKiAgICAgICAgICAgICAgc2V0cyBoYW5kc19vZmYsIGRpc2FibGVzIGludGVycnVwdHMgYW5kIHRoZW4gd2FpdHMgd2l0aAorICogICAgICAgICAgICAgIG5ldGlmX3BvbGxfZGlzYWJsZSgpLgogICoKICAqIEludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZCwgb3RoZXJ3aXNlIGhhbmRzX29mZiBjYW4gY2F1c2UgaXJxIHN0b3Jtcy4KICAqLwpAQCAtMzE4Myw2ICszMjcwLDggQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwogCisJCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOworCiAJCS8qIFVwZGF0ZSB0aGUgZXJyb3IgY291bnRzLiAqLwogCQlfX2dldF9zdGF0cyhkZXYpOwogCkBAIC0zMjM1LDYgKzMzMjQsNyBAQAogCQltb2RfdGltZXIoJm5wLT50aW1lciwgamlmZmllcyArIDEqSFopOwogCX0KIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJbmV0aWZfcG9sbF9lbmFibGUoZGV2KTsKIG91dDoKIAlydG5sX3VubG9jaygpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUtaDgzMDAuYyBiL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMKaW5kZXggOGY0MDM2OC4uN2VhM2Q1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUtaDgzMDAuYworKysgYi9kcml2ZXJzL25ldC9uZS1oODMwMC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTM2NSw3ICszNjYsNyBAQAogCiAJLyogVGhpcyBjaGVjayBfc2hvdWxkX25vdF8gYmUgbmVjZXNzYXJ5LCBvbWl0IGV2ZW50dWFsbHkuICovCiAJd2hpbGUgKChpbmJfcChORV9CQVNFK0VOMF9JU1IpICYgRU5JU1JfUkVTRVQpID09IDApCi0JCWlmIChqaWZmaWVzIC0gcmVzZXRfc3RhcnRfdGltZSA+IDIqSFovMTAwKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHJlc2V0X3N0YXJ0X3RpbWUgKyAyKkhaLzEwMCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBuZV9yZXNldF84MzkwKCkgZGlkIG5vdCBjb21wbGV0ZS5cbiIsIGRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNTgwLDcgKzU4MSw3IEBACiAjZW5kaWYKIAogCXdoaWxlICgoaW5iX3AoTkVfQkFTRSArIEVOMF9JU1IpICYgRU5JU1JfUkRDKSA9PSAwKQotCQlpZiAoamlmZmllcyAtIGRtYV9zdGFydCA+IDIqSFovMTAwKSB7CQkvKiAyMG1zICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRtYV9zdGFydCArIDIqSFovMTAwKSkgewkJLyogMjBtcyAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgVHggUkRDLlxuIiwgZGV2LT5uYW1lKTsKIAkJCW5lX3Jlc2V0XzgzOTAoZGV2KTsKIAkJCU5TODM5MF9pbml0KGRldiwxKTsKQEAgLTYwMCw5ICs2MDEsOSBAQAogc3RhdGljIGludCBpcnFbTUFYX05FX0NBUkRTXTsKIHN0YXRpYyBpbnQgYmFkW01BWF9ORV9DQVJEU107CS8qIDB4YmFkID0gYmFkIHNpZyBvciBubyByZXNldCBhY2sgKi8KIAotTU9EVUxFX1BBUk0oaW8sICIxLSIgX19NT0RVTEVfU1RSSU5HKE1BWF9ORV9DQVJEUykgImkiKTsKLU1PRFVMRV9QQVJNKGlycSwgIjEtIiBfX01PRFVMRV9TVFJJTkcoTUFYX05FX0NBUkRTKSAiaSIpOwotTU9EVUxFX1BBUk0oYmFkLCAiMS0iIF9fTU9EVUxFX1NUUklORyhNQVhfTkVfQ0FSRFMpICJpIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaW8sIGludCwgTlVMTCwgMCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXJxLCBpbnQsIE5VTEwsIDApOworbW9kdWxlX3BhcmFtX2FycmF5KGJhZCwgaW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYmFzZSBhZGRyZXNzKGVzKSIpOwogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJJUlEgbnVtYmVyKHMpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkg4LzMwMCBORTIwMDAgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZS5jIGIvZHJpdmVycy9uZXQvbmUuYwppbmRleCA5NGY3ODJkLi4wOGIyMThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZS5jCisrKyBiL2RyaXZlcnMvbmV0L25lLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMzQxLDcgKzM0Miw3IEBACiAJCW91dGIoaW5iKGlvYWRkciArIE5FX1JFU0VUKSwgaW9hZGRyICsgTkVfUkVTRVQpOwogCiAJCXdoaWxlICgoaW5iX3AoaW9hZGRyICsgRU4wX0lTUikgJiBFTklTUl9SRVNFVCkgPT0gMCkKLQkJaWYgKGppZmZpZXMgLSByZXNldF9zdGFydF90aW1lID4gMipIWi8xMDApIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcmVzZXRfc3RhcnRfdGltZSArIDIqSFovMTAwKSkgewogCQkJaWYgKGJhZF9jYXJkKSB7CiAJCQkJcHJpbnRrKCIgKHdhcm5pbmc6IG5vIHJlc2V0IGFjaykiKTsKIAkJCQlicmVhazsKQEAgLTU4MCw3ICs1ODEsNyBAQAogCiAJLyogVGhpcyBjaGVjayBfc2hvdWxkX25vdF8gYmUgbmVjZXNzYXJ5LCBvbWl0IGV2ZW50dWFsbHkuICovCiAJd2hpbGUgKChpbmJfcChORV9CQVNFK0VOMF9JU1IpICYgRU5JU1JfUkVTRVQpID09IDApCi0JCWlmIChqaWZmaWVzIC0gcmVzZXRfc3RhcnRfdGltZSA+IDIqSFovMTAwKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHJlc2V0X3N0YXJ0X3RpbWUgKyAyKkhaLzEwMCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBuZV9yZXNldF84MzkwKCkgZGlkIG5vdCBjb21wbGV0ZS5cbiIsIGRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNzg3LDcgKzc4OCw3IEBACiAjZW5kaWYKIAogCXdoaWxlICgoaW5iX3AobmljX2Jhc2UgKyBFTjBfSVNSKSAmIEVOSVNSX1JEQykgPT0gMCkKLQkJaWYgKGppZmZpZXMgLSBkbWFfc3RhcnQgPiAyKkhaLzEwMCkgewkJLyogMjBtcyAqLworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkbWFfc3RhcnQgKyAyKkhaLzEwMCkpIHsJCS8qIDIwbXMgKi8KIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIFR4IFJEQy5cbiIsIGRldi0+bmFtZSk7CiAJCQluZV9yZXNldF84MzkwKGRldik7CiAJCQlOUzgzOTBfaW5pdChkZXYsMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTIuYyBiL2RyaXZlcnMvbmV0L25lMi5jCmluZGV4IGU2ZGYzNzUuLjJhYTdiNzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTIuYworKysgYi9kcml2ZXJzL25ldC9uZTIuYwpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMzk1LDcgKzM5Niw3IEBACiAJCW91dGIoaW5iKGJhc2VfYWRkciArIE5FX1JFU0VUKSwgYmFzZV9hZGRyICsgTkVfUkVTRVQpOwogCiAJCXdoaWxlICgoaW5iX3AoYmFzZV9hZGRyICsgRU4wX0lTUikgJiBFTklTUl9SRVNFVCkgPT0gMCkKLQkJCWlmIChqaWZmaWVzIC0gcmVzZXRfc3RhcnRfdGltZSA+IDIqSFovMTAwKSB7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCByZXNldF9zdGFydF90aW1lICsgMipIWi8xMDApKSB7CiAJCQkJcHJpbnRrKCIgbm90IGZvdW5kIChubyByZXNldCBhY2spLlxuIik7CiAJCQkJcmV0dmFsID0gLUVOT0RFVjsKIAkJCQlnb3RvIG91dDsKQEAgLTU0OCw3ICs1NDksNyBAQAogCiAJLyogVGhpcyBjaGVjayBfc2hvdWxkX25vdF8gYmUgbmVjZXNzYXJ5LCBvbWl0IGV2ZW50dWFsbHkuICovCiAJd2hpbGUgKChpbmJfcChORV9CQVNFK0VOMF9JU1IpICYgRU5JU1JfUkVTRVQpID09IDApCi0JCWlmIChqaWZmaWVzIC0gcmVzZXRfc3RhcnRfdGltZSA+IDIqSFovMTAwKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHJlc2V0X3N0YXJ0X3RpbWUgKyAyKkhaLzEwMCkpIHsKIAkJCXByaW50aygiJXM6IG5lX3Jlc2V0XzgzOTAoKSBkaWQgbm90IGNvbXBsZXRlLlxuIiwgCiAJCQkJCWRldi0+bmFtZSk7CiAJCQlicmVhazsKQEAgLTc0OSw3ICs3NTAsNyBAQAogI2VuZGlmCiAKIAl3aGlsZSAoKGluYl9wKG5pY19iYXNlICsgRU4wX0lTUikgJiBFTklTUl9SREMpID09IDApCi0JCWlmIChqaWZmaWVzIC0gZG1hX3N0YXJ0ID4gMipIWi8xMDApIHsJCS8qIDIwbXMgKi8KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZG1hX3N0YXJ0ICsgMipIWi8xMDApKSB7CQkvKiAyMG1zICovCiAJCQlwcmludGsoIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIFR4IFJEQy5cbiIsIGRldi0+bmFtZSk7CiAJCQluZV9yZXNldF84MzkwKGRldik7CiAJCQlOUzgzOTBfaW5pdChkZXYsMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTUwMTAuYyBiL2RyaXZlcnMvbmV0L25pNTAxMC5jCmluZGV4IDJhYjAxYTUuLmE2OGJmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNTAxMC5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTAxMC5jCkBAIC03NjYsOCArNzY2LDggQEAKICNpZmRlZiBNT0RVTEUKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X25pNTAxMDsKIAotTU9EVUxFX1BBUk0oaW8sICJpIik7Ci1NT0RVTEVfUEFSTShpcnEsICJpIik7Cittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Cittb2R1bGVfcGFyYW0oaXJxLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbywgIm5pNTAxMCBJL08gYmFzZSBhZGRyZXNzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIm5pNTAxMCBJUlEgbnVtYmVyIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBiMGMzYjZhLi4wZmVkZTUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwpAQCAtMTE2LDYgKzExNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTY1MSw3ICs2NTIsNyBAQAogc3RhdGljIHZvaWQgZmFzdGNhbGwgcGh5X2ludHIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IG5zODM4MjAgKmRldiA9IFBSSVYobmRldik7Ci0Jc3RhdGljIGNoYXIgKnNwZWVkc1tdID0geyAiMTAiLCAiMTAwIiwgIjEwMDAiLCAiMTAwMCg/KSIsICIxMDAwRiIgfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqc3BlZWRzW10gPSB7ICIxMCIsICIxMDAiLCAiMTAwMCIsICIxMDAwKD8pIiwgIjEwMDBGIiB9OwogCXUzMiBjZmcsIG5ld19jZmc7CiAJdTMyIHRiaXNyLCB0YW5hciwgdGFubHBhcjsKIAlpbnQgc3BlZWQsIGZ1bGxkdXBsZXgsIG5ld2xpbmtzdGF0ZTsKQEAgLTE2MDcsNyArMTYwOCw3IEBACiB7CiAJc3RydWN0IG5zODM4MjAgKmRldiA9IFBSSVYobmRldik7CiAJaW50IHRpbWVkX291dCA9IDA7Ci0JbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXUzMiBzdGF0dXM7CiAJaW50IGxvb3BzID0gMDsKIApAQCAtMTYyNSw3ICsxNjI2LDcgQEAKIAkJCWJyZWFrOwogCQlpZiAoc3RhdHVzICYgZmFpbCkKIAkJCWJyZWFrOwotCQlpZiAoKGppZmZpZXMgLSBzdGFydCkgPj0gSFopIHsKKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc3RhcnQgKyBIWikpIHsKIAkJCXRpbWVkX291dCA9IDE7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb2FrbmV0LmMgYi9kcml2ZXJzL25ldC9vYWtuZXQuYwppbmRleCA2MjE2N2EyLi5kMGY2ODZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vYWtuZXQuYworKysgYi9kcml2ZXJzL25ldC9vYWtuZXQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNjA2LDcgKzYwNyw3IEBACiAjZW5kaWYKIAogCXdoaWxlICgoZWlfaWJwKGJhc2UgKyBFTjBfSVNSKSAmIEVOSVNSX1JEQykgPT0gMCkgewotCQlpZiAoamlmZmllcyAtIHN0YXJ0ID4gT0FLTkVUX1dBSVQpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnQgKyBPQUtORVRfV0FJVCkpIHsKIAkJCXByaW50aygiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgVHggUkRDLlxuIiwgZGV2LT5uYW1lKTsKIAkJCW9ha25ldF9yZXNldF84MzkwKGRldik7CiAJCQlOUzgzOTBfaW5pdChkZXYsIFRSVUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwppbmRleCA0ODc3NGVmLi5jZTkwYmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKICAgZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGNoYXIgKnJhbV9zcGxpdFtdID0geyI1OjMiLCAiMzoxIiwgIjE6MSIsICIzOjUifTsKK3N0YXRpYyBjb25zdCBjaGFyICpyYW1fc3BsaXRbXSA9IHsiNTozIiwgIjM6MSIsICIxOjEiLCAiMzo1In07CiAKIHN0YXRpYyB2b2lkIHRjNTc0X2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwppbmRleCAxYzNjOWM2Li4zZGJhNTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpAQCAtMTE1LDcgKzExNiw3IEBACiAgICAgc3BpbmxvY2tfdAkJbG9jazsKIH07CiAKLXN0YXRpYyBjaGFyICppZl9uYW1lc1tdID0geyAiYXV0byIsICIxMGJhc2VUIiwgIjEwYmFzZTIiLCAiQVVJIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKmlmX25hbWVzW10gPSB7ICJhdXRvIiwgIjEwYmFzZVQiLCAiMTBiYXNlMiIsICJBVUkiIH07CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC03OTYsNyArNzk3LDcgQEAKICAgICBtZWRpYSA9IGludyhpb2FkZHIrV040X01FRElBKSAmIDB4YzgxMDsKIAogICAgIC8qIElnbm9yZSBjb2xsaXNpb25zIHVubGVzcyB3ZSd2ZSBoYWQgbm8gaXJxJ3MgcmVjZW50bHkgKi8KLSAgICBpZiAoamlmZmllcyAtIGxwLT5sYXN0X2lycSA8IEhaKSB7CisgICAgaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGxwLT5sYXN0X2lycSArIEhaKSkgewogCW1lZGlhICY9IH4weDAwMTA7CiAgICAgfSBlbHNlIHsKIAkvKiBUcnkgaGFyZGVyIHRvIGRldGVjdCBjYXJyaWVyIGVycm9ycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCAwMWRkZmM4Li5hYTU1ODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtODA2LDYgKzgwNiw3IEBACiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjZmLCAweDAzMDkpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDI3NCwgMHgxMTA2KSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDhhMDEsIDB4YzFhYiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFtYmlDb20sSW5jLiIsICJGYXN0IEV0aGVybmV0IFBDIENhcmQoQU1CODExMCkiLCAweDQ5YjAyMGE3LCAweDExOWNjOWZjKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjQoIkZhc3QgRXRoZXJuZXQiLCAiMTYtYml0IFBDIENhcmQiLCAiQVg4ODE5MCIsIDB4YjRiZTE0ZTMsIDB4OWExMmViNmEsIDB4YWI5YmU1ZWYpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBU0lYIiwgIkFYODgxOTAiLCAweDA5NTk4MjNiLCAweGFiOWJlNWVmKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQmlsbGlvbnRvbiIsICJMTkEtMTAwQiIsIDB4NTUyYWI2ODIsIDB4YmMzYjg3ZTEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggMjhmZTJmYi4uYjdhYzE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCkBAIC0zMDksNyArMzA5LDcgQEAKIHN0YXRpYyBpbnQgbWZjX3RyeV9pb19wb3J0KGRldl9saW5rX3QgKmxpbmspCiB7CiAgICAgaW50IGksIHJldDsKLSAgICBzdGF0aWMga2lvX2FkZHJfdCBzZXJpYWxfYmFzZVs1XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTgsIDB4MCB9OworICAgIHN0YXRpYyBjb25zdCBraW9fYWRkcl90IHNlcmlhbF9iYXNlWzVdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCwgMHgwIH07CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAJbGluay0+aW8uQmFzZVBvcnQyID0gc2VyaWFsX2Jhc2VbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggNGEyMzIyNS4uNzg3MTc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtMzg4LDcgKzM4OCw3IEBACiBEUlZfTkFNRSAiICIgRFJWX1ZFUlNJT04gIiAoUm9nZXIgQy4gUGFvKSI7CiAjZW5kaWYKIAotc3RhdGljIGNoYXIgKmlmX25hbWVzW109eworc3RhdGljIGNvbnN0IGNoYXIgKmlmX25hbWVzW109ewogICAgICJBdXRvIiwgIjEwYmFzZVQiLCAiQk5DIiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggZDg1Yjc1OGYzLi5iNDZlNWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYwpAQCAtNjYsNyArNjYsNyBAQAogCiAjZGVmaW5lIFBDTkVUX1JEQ19USU1FT1VUICgyKkhaLzEwMCkJLyogTWF4IHdhaXQgaW4gamlmZmllcyBmb3IgVHggUkRDICovCiAKLXN0YXRpYyBjaGFyICppZl9uYW1lc1tdID0geyAiYXV0byIsICIxMGJhc2VUIiwgIjEwYmFzZTIifTsKK3N0YXRpYyBjb25zdCBjaGFyICppZl9uYW1lc1tdID0geyAiYXV0byIsICIxMGJhc2VUIiwgIjEwYmFzZTIifTsKIAogI2lmZGVmIFBDTUNJQV9ERUJVRwogc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKQEAgLTE3MjcsNiArMTcyNyw3IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkxpbmtzeXMiLCAiRXRoZXJGYXN0IDEwLzEwMCBQQyBDYXJkIChQQ01QQzEwMCBWMikiLCAweDA3MzNjYzgxLCAweDNhM2IyOGU5KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiTGlua3N5cyIsICJIb21lTGluayBQaG9uZWxpbmUgKyAxMC8xMDAgTmV0d29yayBQQyBDYXJkIChQQ00xMDBIMSkiLCAweDczM2NjODEsIDB4N2EzZTVjM2EpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJMb2dpdGVjIiwgIkxQTS1MTjEwMFRYIiwgMHg4OGZjZGVkYSwgMHg2ZDc3MjczNyksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkxvZ2l0ZWMiLCAiTFBNLUxOMTAwVEUiLCAweDg4ZmNkZWRhLCAweDBlNzE0YmVlKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiTG9naXRlYyIsICJMUE0tTE4yMFQiLCAweDg4ZmNkZWRhLCAweDgxMDkwOTIyKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiTE9OR1NISU5FIiwgIlBDTUNJQSBFdGhlcm5ldCBDYXJkIiwgMHhmODY2YjBiMCwgMHg2ZjY2NTJlMCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIk1BQ05JQ0EiLCAiTUUxLUpFSURBIiwgMHgyMDg0MWI2OCwgMHhhZjhhMzU3OCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDAxMjI0MTVkZi4uODgzOWM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3NtYzkxYzkyX2NzLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBjaGFyICppZl9uYW1lc1tdID0geyAiYXV0byIsICIxMGJhc2VUIiwgIjEwYmFzZTIifTsKK3N0YXRpYyBjb25zdCBjaGFyICppZl9uYW1lc1tdID0geyAiYXV0byIsICIxMGJhc2VUIiwgIjEwYmFzZTIifTsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIApAQCAtNzc3LDcgKzc3Nyw3IEBACiBzdGF0aWMgaW50IG9zaV9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLSAgICBzdGF0aWMga2lvX2FkZHJfdCBjb21bNF0gPSB7IDB4M2Y4LCAweDJmOCwgMHgzZTgsIDB4MmU4IH07CisgICAgc3RhdGljIGNvbnN0IGtpb19hZGRyX3QgY29tWzRdID0geyAweDNmOCwgMHgyZjgsIDB4M2U4LCAweDJlOCB9OwogICAgIGludCBpLCBqOwogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwppbmRleCA1OTNkOGFkLi5lZWQ0OTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogI2RlZmluZSBYSVJDUkVHNDVfUkVWCSAxNSAvKiBSZXZpc2lvbiBSZWdpc3RlciAocmQpICovCiAjZGVmaW5lIFhJUkNSRUc1MF9JQQk4ICAgLyogSW5kaXZpZHVhbCBBZGRyZXNzICg4LTEzKSAqLwogCi1zdGF0aWMgY2hhciAqaWZfbmFtZXNbXSA9IHsgIkF1dG8iLCAiMTBCYXNlVCIsICIxMEJhc2UyIiwgIkFVSSIsICIxMDBCYXNlVCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICppZl9uYW1lc1tdID0geyAiQXV0byIsICIxMEJhc2VUIiwgIjEwQmFzZTIiLCAiQVVJIiwgIjEwMEJhc2VUIiB9OwogCiAvKioqKioqKioqKioqKioqKgogICogQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCA4ZjZjZjhjLi45NTk1Zjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0yMiwxMiArMjIsMTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIERSVl9OQU1FCSJwY25ldDMyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4zMWMiCi0jZGVmaW5lIERSVl9SRUxEQVRFCSIwMS5Ob3YuMjAwNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMzIiCisjZGVmaW5lIERSVl9SRUxEQVRFCSIxOC5NYXIuMjAwNiIKICNkZWZpbmUgUEZYCQlEUlZfTkFNRSAiOiAiCiAKLXN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0KLURSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiB0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlXG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZlcnNpb24gPQorICAgIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiB0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlXG4iOwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01OCwxOCArNTgsMjMgQEAKICAqIFBDSSBkZXZpY2UgaWRlbnRpZmllcnMgZm9yICJuZXcgc3R5bGUiIExpbnV4IFBDSSBEZXZpY2UgRHJpdmVycwogICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNuZXQzMl9wY2lfdGJsW10gPSB7Ci0gICAgeyBQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfTEFOQ0VfSE9NRSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAotICAgIHsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCi0gICAgLyoKLSAgICAgKiBBZGFwdGVycyB0aGF0IHdlcmUgc29sZCB3aXRoIElCTSdzIFJTLzYwMDAgb3IgcFNlcmllcyBoYXJkd2FyZSBoYXZlCi0gICAgICogdGhlIGluY29ycmVjdCB2ZW5kb3IgaWQuCi0gICAgICovCi0gICAgeyBQQ0lfVkVORE9SX0lEX1RSSURFTlQsIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAotCSAgICBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCA8PCA4LCAweGZmZmYwMCwgMCB9LAotICAgIHsgMCwgfQorCXsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFX0hPTUUsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCisJLyoKKwkgKiBBZGFwdGVycyB0aGF0IHdlcmUgc29sZCB3aXRoIElCTSdzIFJTLzYwMDAgb3IgcFNlcmllcyBoYXJkd2FyZSBoYXZlCisJICogdGhlIGluY29ycmVjdCB2ZW5kb3IgaWQuCisJICovCisJeyBQQ0lfVkVORE9SX0lEX1RSSURFTlQsIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkgIFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgsIDB4ZmZmZjAwLCAwfSwKKworCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBwY25ldDMyX3BjaV90YmwpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjbmV0MzJfcGNpX3RibCk7CiAKIHN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CiAKQEAgLTc3LDEzICs4MiwxMSBAQAogICogVkxCIEkvTyBhZGRyZXNzZXMKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBwY25ldDMyX3BvcnRsaXN0W10gX19pbml0ZGF0YSA9Ci0JeyAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MCwgMCB9OwotCi0KKyAgICB7IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwLCAwIH07CiAKIHN0YXRpYyBpbnQgcGNuZXQzMl9kZWJ1ZyA9IDA7Ci1zdGF0aWMgaW50IHR4X3N0YXJ0ID0gMTsgLyogTWFwcGluZyAtLSAwOjIwLCAxOjY0LCAyOjEyOCwgMzp+MjIwIChkZXBlbmRzIG9uIGNoaXAgdmVycykgKi8KLXN0YXRpYyBpbnQgcGNuZXQzMnZsYjsJIC8qIGNoZWNrIGZvciBWTEIgY2FyZHMgPyAqLworc3RhdGljIGludCB0eF9zdGFydCA9IDE7CS8qIE1hcHBpbmcgLS0gMDoyMCwgMTo2NCwgMjoxMjgsIDM6fjIyMCAoZGVwZW5kcyBvbiBjaGlwIHZlcnMpICovCitzdGF0aWMgaW50IHBjbmV0MzJ2bGI7CQkvKiBjaGVjayBmb3IgVkxCIGNhcmRzID8gKi8KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpwY25ldDMyX2RldjsKIApAQCAtMTA5LDMzICsxMTIsMzUgQEAKICAqIHRhYmxlIHRvIHRyYW5zbGF0ZSBvcHRpb24gdmFsdWVzIGZyb20gdHVsaXAKICAqIHRvIGludGVybmFsIG9wdGlvbnMKICAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgb3B0aW9uc19tYXBwaW5nW10gPSB7Ci0gICAgUENORVQzMl9QT1JUX0FTRUwsCQkJICAgLyogIDAgQXV0by1zZWxlY3QJICAqLwotICAgIFBDTkVUMzJfUE9SVF9BVUksCQkJICAgLyogIDEgQk5DL0FVSQkgICovCi0gICAgUENORVQzMl9QT1JUX0FVSSwJCQkgICAvKiAgMiBBVUkvQk5DCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfQVNFTCwJCQkgICAvKiAgMyBub3Qgc3VwcG9ydGVkCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfMTBCVCB8IFBDTkVUMzJfUE9SVF9GRCwgICAvKiAgNCAxMGJhc2VULUZECSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfQVNFTCwJCQkgICAvKiAgNSBub3Qgc3VwcG9ydGVkCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfQVNFTCwJCQkgICAvKiAgNiBub3Qgc3VwcG9ydGVkCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfQVNFTCwJCQkgICAvKiAgNyBub3Qgc3VwcG9ydGVkCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfQVNFTCwJCQkgICAvKiAgOCBub3Qgc3VwcG9ydGVkCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfTUlJLAkJCSAgIC8qICA5IE1JSSAxMGJhc2VUCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfTUlJIHwgUENORVQzMl9QT1JUX0ZELAkgICAvKiAxMCBNSUkgMTBiYXNlVC1GRAkgICovCi0gICAgUENORVQzMl9QT1JUX01JSSwJCQkgICAvKiAxMSBNSUkgKGF1dG9zZWwpCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfMTBCVCwJCQkgICAvKiAxMiAxMEJhc2VUCSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfTUlJIHwgUENORVQzMl9QT1JUXzEwMCwgICAvKiAxMyBNSUkgMTAwQmFzZVR4CSAgKi8KLSAgICBQQ05FVDMyX1BPUlRfTUlJIHwgUENORVQzMl9QT1JUXzEwMCB8IFBDTkVUMzJfUE9SVF9GRCwgLyogMTQgTUlJIDEwMEJhc2VUeC1GRCAqLwotICAgIFBDTkVUMzJfUE9SVF9BU0VMCQkJICAgLyogMTUgbm90IHN1cHBvcnRlZAkgICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvcHRpb25zX21hcHBpbmdbXSA9IHsKKwlQQ05FVDMyX1BPUlRfQVNFTCwJCQkvKiAgMCBBdXRvLXNlbGVjdCAgICAgICovCisJUENORVQzMl9QT1JUX0FVSSwJCQkvKiAgMSBCTkMvQVVJICAgICAgICAgICovCisJUENORVQzMl9QT1JUX0FVSSwJCQkvKiAgMiBBVUkvQk5DICAgICAgICAgICovCisJUENORVQzMl9QT1JUX0FTRUwsCQkJLyogIDMgbm90IHN1cHBvcnRlZCAgICAqLworCVBDTkVUMzJfUE9SVF8xMEJUIHwgUENORVQzMl9QT1JUX0ZELAkvKiAgNCAxMGJhc2VULUZEICAgICAgICovCisJUENORVQzMl9QT1JUX0FTRUwsCQkJLyogIDUgbm90IHN1cHBvcnRlZCAgICAqLworCVBDTkVUMzJfUE9SVF9BU0VMLAkJCS8qICA2IG5vdCBzdXBwb3J0ZWQgICAgKi8KKwlQQ05FVDMyX1BPUlRfQVNFTCwJCQkvKiAgNyBub3Qgc3VwcG9ydGVkICAgICovCisJUENORVQzMl9QT1JUX0FTRUwsCQkJLyogIDggbm90IHN1cHBvcnRlZCAgICAqLworCVBDTkVUMzJfUE9SVF9NSUksCQkJLyogIDkgTUlJIDEwYmFzZVQgICAgICAqLworCVBDTkVUMzJfUE9SVF9NSUkgfCBQQ05FVDMyX1BPUlRfRkQsCS8qIDEwIE1JSSAxMGJhc2VULUZEICAgKi8KKwlQQ05FVDMyX1BPUlRfTUlJLAkJCS8qIDExIE1JSSAoYXV0b3NlbCkgICAgKi8KKwlQQ05FVDMyX1BPUlRfMTBCVCwJCQkvKiAxMiAxMEJhc2VUICAgICAgICAgICovCisJUENORVQzMl9QT1JUX01JSSB8IFBDTkVUMzJfUE9SVF8xMDAsCS8qIDEzIE1JSSAxMDBCYXNlVHggICAgKi8KKwkJCQkJCS8qIDE0IE1JSSAxMDBCYXNlVHgtRkQgKi8KKwlQQ05FVDMyX1BPUlRfTUlJIHwgUENORVQzMl9QT1JUXzEwMCB8IFBDTkVUMzJfUE9SVF9GRCwKKwlQQ05FVDMyX1BPUlRfQVNFTAkJCS8qIDE1IG5vdCBzdXBwb3J0ZWQgICAgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyIHBjbmV0MzJfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7Ci0gICAgIkxvb3BiYWNrIHRlc3QgIChvZmZsaW5lKSIKKwkiTG9vcGJhY2sgdGVzdCAgKG9mZmxpbmUpIgogfTsKKwogI2RlZmluZSBQQ05FVDMyX1RFU1RfTEVOIChzaXplb2YocGNuZXQzMl9nc3RyaW5nc190ZXN0KSAvIEVUSF9HU1RSSU5HX0xFTikKIAotI2RlZmluZSBQQ05FVDMyX05VTV9SRUdTIDE2OAorI2RlZmluZSBQQ05FVDMyX05VTV9SRUdTIDEzNgogCi0jZGVmaW5lIE1BWF9VTklUUyA4CS8qIE1vcmUgYXJlIHN1cHBvcnRlZCwgbGltaXQgb25seSBvbiBvcHRpb25zICovCisjZGVmaW5lIE1BWF9VTklUUyA4CQkvKiBNb3JlIGFyZSBzdXBwb3J0ZWQsIGxpbWl0IG9ubHkgb24gb3B0aW9ucyAqLwogc3RhdGljIGludCBvcHRpb25zW01BWF9VTklUU107CiBzdGF0aWMgaW50IGZ1bGxfZHVwbGV4W01BWF9VTklUU107CiBzdGF0aWMgaW50IGhvbWVwbmFbTUFYX1VOSVRTXTsKQEAgLTE1MSwxMjQgKzE1Niw2IEBACiAgKi8KIAogLyoKLSAqIEhpc3Rvcnk6Ci0gKiB2MC4wMTogIEluaXRpYWwgdmVyc2lvbgotICoJICAgb25seSB0ZXN0ZWQgb24gQWxwaGEgTm9uYW1lIEJvYXJkCi0gKiB2MC4wMjogIGNoYW5nZWQgSVJRIGhhbmRsaW5nIGZvciBuZXcgaW50ZXJydXB0IHNjaGVtZSAoZGV2X2lkKQotICoJICAgdGVzdGVkIG9uIGEgQVNVUyBTUDNHCi0gKiB2MC4xMDogIGZpeGVkIGFuIG9kZCBwcm9ibGVtIHdpdGggdGhlIDc5Qzk3NCBpbiBhIENvbXBhcSBEZXNrcHJvIFhMCi0gKgkgICBsb29rcyBsaWtlIHRoZSA5NzQgZG9lc24ndCBsaWtlIHN0b3BwaW5nIGFuZCByZXN0YXJ0aW5nIGluIGEKLSAqCSAgIHNob3J0IHBlcmlvZCBvZiB0aW1lOyBub3cgd2UgZG8gYSByZWluaXQgb2YgdGhlIGxhbmNlOyB0aGUKLSAqCSAgIGJ1ZyB3YXMgdHJpZ2dlcmVkIGJ5IGRvaW5nIGlmY29uZmlnIGV0aDAgPGlwPiBicm9hZGNhc3QgPGFkZHI+Ci0gKgkgICBhbmQgaGFuZ3MgdGhlIG1hY2hpbmUgKHRoYW5rcyB0byBLbGF1cyBMaWVkbCBmb3IgZGVidWdnaW5nKQotICogdjAuMTI6ICBieSBzdWdnZXN0aW9uIGZyb20gRG9uYWxkIEJlY2tlcjogUmVuYW1lZCBkcml2ZXIgdG8gcGNuZXQzMiwKLSAqCSAgIG1hZGUgaXQgc3RhbmRhbG9uZSAobm8gbmVlZCBmb3IgbGFuY2UuYykKLSAqIHYwLjEzOiAgYWRkZWQgYWRkaXRpb25hbCBQQ0kgZGV0ZWN0aW5nIGZvciBzcGVjaWFsIFBDSSBkZXZpY2VzIChDb21wYXEpCi0gKiB2MC4xNDogIHN0cmlwcGVkIGRvd24gYWRkaXRpb25hbCBQQ0kgcHJvYmUgKHRoYW5rcyB0byBEYXZpZCBDIE5pZW1pCi0gKgkgICBhbmQgc3ZlbmVyaWNAeHM0YWxsLm5sIGZvciB0ZXN0aW5nIHRoaXMgb24gdGhlaXIgQ29tcGFxIGJveGVzKQotICogdjAuMTU6ICBhZGRlZCA3OUM5NjUgKFZMQikgcHJvYmUKLSAqCSAgIGFkZGVkIGludGVycnVwdCBzaGFyaW5nIGZvciBQQ0kgY2hpcHMKLSAqIHYwLjE2OiAgZml4ZWQgc2V0X211bHRpY2FzdF9saXN0IG9uIEFscGhhIG1hY2hpbmVzCi0gKiB2MC4xNzogIHJlbW92ZWQgaGFjayBmcm9tIGRldi5jOyBub3cgcGNuZXQzMiB1c2VzIGV0aGlmX3Byb2JlIGluIFNwYWNlLmMKLSAqIHYwLjE5OiAgY2hhbmdlZCBzZXR0aW5nIG9mIGF1dG9zZWxlY3QgYml0Ci0gKiB2MC4yMDogIHJlbW92ZWQgYWRkaXRpb25hbCBDb21wYXEgUENJIHByb2JlOyB0aGVyZSBpcyBub3cgYSB3b3JraW5nIG9uZQotICoJICAgaW4gYXJjaC9pMzg2L2Jpb3MzMi5jCi0gKiB2MC4yMTogIGFkZGVkIGVuZGlhbiBjb252ZXJzaW9uIGZvciBwcGMsIGZyb20gd29yayBieSBjb3J0QGNzLm5tdC5lZHUKLSAqIHYwLjIyOiAgYWRkZWQgcHJpbnRpbmcgb2Ygc3RhdHVzIHRvIHJpbmcgZHVtcAotICogdjAuMjM6ICBjaGFuZ2VkIGVuZXRfc3RhdGlzdGljcyB0byBuZXRfZGV2aXZlX3N0YXRzCi0gKiB2MC45MDogIGFkZGVkIG11bHRpY2FzdCBmaWx0ZXIKLSAqCSAgIGFkZGVkIG1vZHVsZSBzdXBwb3J0Ci0gKgkgICBjaGFuZ2VkIGlycSBwcm9iZSB0byBuZXcgc3R5bGUKLSAqCSAgIGFkZGVkIFBDbmV0RmFzdCBjaGlwIGlkCi0gKgkgICBhZGRlZCBmaXggZm9yIHJlY2VpdmUgc3RhbGxzIHdpdGggSW50ZWwgc2F0dXJuIGNoaXBzZXRzCi0gKgkgICBhZGRlZCBpbi1wbGFjZSByeCBza2JzIGxpa2UgaW4gdGhlIHR1bGlwIGRyaXZlcgotICoJICAgbWlub3IgY2xlYW51cHMKLSAqIHYwLjkxOiAgYWRkZWQgUENuZXRGYXN0KyBjaGlwIGlkCi0gKgkgICBiYWNrIHBvcnQgdG8gMi4wLngKLSAqIHYxLjAwOiAgYWRkZWQgc29tZSBzdHVmZiBmcm9tIERvbmFsZCBCZWNrZXIncyAyLjAuMzQgdmVyc2lvbgotICoJICAgYWRkZWQgc3VwcG9ydCBmb3IgYnl0ZSBjb3VudGVycyBpbiBuZXRfZGV2X3N0YXRzCi0gKiB2MS4wMTogIGRvIHJpbmcgZHVtcHMsIG9ubHkgd2hlbiBkZWJ1Z2dpbmcgdGhlIGRyaXZlcgotICoJICAgaW5jcmVhc2VkIHRoZSB0cmFuc21pdCB0aW1lb3V0Ci0gKiB2MS4wMjogIGZpeGVkIG1lbW9yeSBsZWFrIGluIHBjbmV0MzJfaW5pdF9yaW5nKCkKLSAqIHYxLjEwOiAgd29ya2Fyb3VuZCBmb3Igc3RvcHBlZCB0cmFuc21pdHRlcgotICoJICAgYWRkZWQgcG9ydCBzZWxlY3Rpb24gZm9yIG1vZHVsZXMKLSAqCSAgIGRldGVjdCBzcGVjaWFsIFQxL0UxIFdBTiBjYXJkIGFuZCBzZXR1cCBwb3J0IHNlbGVjdGlvbgotICogdjEuMTE6ICBmaXhlZCB3cm9uZyBjaGVja2luZyBvZiBUeCBlcnJvcnMKLSAqIHYxLjIwOiAgYWRkZWQgY2hlY2sgb2YgcmV0dXJuIHZhbHVlIGttYWxsb2MgKGNwZXRlcnNvQGNzLndhc2hpbmd0b24uZWR1KQotICoJICAgYWRkZWQgc2F2ZSBvcmlnaW5hbCBrbWFsbG9jIGFkZHIgZm9yIGZyZWVpbmcgKG1jckBzb2xpZHVtLmNvbSkKLSAqCSAgIGFkZGVkIHN1cHBvcnQgZm9yIFBDbmV0SG9tZSBjaGlwIChqb2VATUlULkVEVSkKLSAqCSAgIHJld3JpdHRlbiBQQ0kgY2FyZCBkZXRlY3Rpb24KLSAqCSAgIGFkZGVkIGR3aW8gbW9kZSB0byBnZXQgZHJpdmVyIHdvcmtpbmcgb24gc29tZSBQUEMgbWFjaGluZXMKLSAqIHYxLjIxOiAgYWRkZWQgbWlpIHNlbGVjdGlvbiBhbmQgbWlpIGlvY3RsCi0gKiB2MS4yMjogIGNoYW5nZWQgcGNpIHNjYW5uaW5nIGNvZGUgdG8gbWFrZSBQUEMgcGVvcGxlIGhhcHB5Ci0gKgkgICBmaXhlZCBzd2l0Y2hpbmcgdG8gMzJiaXQgbW9kZSBpbiBwY25ldDMyX29wZW4oKSAodGhhbmtzCi0gKgkgICB0byBNaWNoYWVsIFJpY2hhcmQgPG1jckBzb2xpZHVtLmNvbT4gZm9yIG5vdGljaW5nIHRoaXMgb25lKQotICoJICAgYWRkZWQgc3ViIHZlbmRvci9kZXZpY2UgaWQgbWF0Y2hpbmcgKHRoYW5rcyBhZ2FpbiB0bwotICoJICAgTWljaGFlbCBSaWNoYXJkIDxtY3JAc29saWR1bS5jb20+KQotICoJICAgYWRkZWQgY2hpcCBpZCBmb3IgNzljOTczLzk3NSAodGhhbmtzIHRvIFphY2ggQnJvd24gPHphYkB6YWJiby5uZXQ+KQotICogdjEuMjMgICBmaXhlZCBzbWFsbCBidWcsIHdoZW4gbWFudWFsIHNlbGVjdGluZyBNSUkgc3BlZWQvZHVwbGV4Ci0gKiB2MS4yNCAgIEFwcGxpZWQgVGhvbWFzJyBwYXRjaCB0byB1c2UgVHhTdGFydFBvaW50IGFuZCB0aHVzIGRlY3JlYXNlIFR4RklGTwotICoJICAgdW5kZXJmbG93cy4JQWRkZWQgdHhfc3RhcnRfcHQgbW9kdWxlIHBhcmFtZXRlci4gSW5jcmVhc2VkCi0gKgkgICBUWF9SSU5HX1NJWkUgZnJvbSAxNiB0byAzMi4JQWRkZWQgI2lmZGVmJ2QgY29kZSB0byB1c2UgRFhTVUZMTwotICoJICAgZm9yIEZBU1RbK10gY2hpcHNldHMuIDxrYWZAZmMuaHAuY29tPgotICogdjEuMjRhYyBBZGRlZCBTTVAgc3BpbmxvY2tpbmcgLSBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgotICogdjEuMjVrZiBBZGRlZCBObyBJbnRlcnJ1cHQgb24gc3VjY2Vzc2Z1bCBUeCBmb3Igc29tZSBUeCdzIDxrYWZAZmMuaHAuY29tPgotICogdjEuMjYgICBDb252ZXJ0ZWQgdG8gcGNpX2FsbG9jX2NvbnNpc3RlbnQsIEphbWV5IEhpY2tzIC8gR2VvcmdlIEZyYW5jZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGphbWV5QGNybC5kZWMuY29tPgotICogLQkgICBGaXhlZCBhIGZldyBidWdzLCByZWxhdGVkIHRvIHJ1bm5pbmcgdGhlIGNvbnRyb2xsZXIgaW4gMzJiaXQgbW9kZS4KLSAqCSAgIDIzIE9jdCwgMjAwMC4gIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICoJICAgQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogdjEuMjZwICBGaXggb29wcyBvbiBybW1vZCtpbnNtb2Q7IHBsdWcgaS9vIHJlc291cmNlIGxlYWsgLSBQYXVsIEdvcnRtYWtlcgotICogdjEuMjcgICBpbXByb3ZlZCBDU1IvUFJPTSBhZGRyZXNzIGRldGVjdGlvbiwgbG90cyBvZiBjbGVhbnVwcywKLSAqIAkgICBuZXcgcGNuZXQzMnZsYiBtb2R1bGUgb3B0aW9uLCBIUC1QQVJJU0Mgc3VwcG9ydCwKLSAqIAkgICBhZGRlZCBtb2R1bGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9ucywKLSAqIAkgICBpbml0aWFsIGV0aHRvb2wgc3VwcG9ydCAtIEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KLSAqIHYxLjI3YSAgU3VuIEZlYiAxMCAyMDAyIEdvIFRhbmlndWNoaSA8Z29AdHVyYm9saW51eC5jby5qcD4KLSAqCSAgIHVzZSBhbGxvY19ldGhlcmRldiBhbmQgcmVnaXN0ZXJfbmV0ZGV2Ci0gKgkgICBmaXggcGNpIHByb2JlIG5vdCBpbmNyZW1lbnQgY2FyZHNfZm91bmQKLSAqCSAgIEZEIGF1dG8gbmVnb3RpYXRlIGVycm9yIHdvcmthcm91bmQgZm9yIHhTZXJpZXMyNTAKLSAqCSAgIGNsZWFuIHVwIGFuZCB1c2luZyBuZXcgbWlpIG1vZHVsZQotICogdjEuMjdiICBTZXAgMzAgMjAwMiBLZW50IFlvZGVyIDx5b2RlcjFAdXMuaWJtLmNvbT4KLSAqIAkgICBBZGRlZCB0aW1lciBmb3IgY2FibGUgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VzLgotICogdjEuMjggICAyMCBGZWIgMjAwNCBEb24gRnJ5IDxicmF6aWxudXRAdXMuaWJtLmNvbT4KLSAqCSAgIEpvbiBNYXNvbiA8am9ubWFzb25AdXMuaWJtLmNvbT4sIENoaW5tYXkgQWxiYWwgPGFsYmFsQGluLmlibS5jb20+Ci0gKgkgICBOb3cgdXNlcyBldGh0b29sX29wcywgbmV0aWZfbXNnXyogYW5kIGdlbmVyaWNfbWlpX2lvY3RsLgotICoJICAgRml4ZXMgYm9ndXMgJ0J1cyBtYXN0ZXIgYXJiaXRyYXRpb24gZmFpbHVyZScsIHBjaV9bdW5dbWFwX3NpbmdsZQotICoJICAgbGVuZ3RoIGVycm9ycywgYW5kIHRyYW5zbWl0IGhhbmdzLiAgQ2xlYW5zIHVwIGFmdGVyIGVycm9ycyBpbiBvcGVuLgotICoJICAgSmltIExld2lzIDxqa2xld2lzQHVzLmlibS5jb20+IGFkZGVkIGV0aGVybmV0IGxvb3BiYWNrIHRlc3QuCi0gKgkgICBUaG9tYXMgTXVuY2sgU3RlZW5ob2xkdCA8dG11c0B0bXVzLmRrPiBub24tbWlpIGlvY3RsIGNvcnJlY3Rpb25zLgotICogdjEuMjkgICA2IEFwciAyMDA0IEppbSBMZXdpcyA8amtsZXdpc0B1cy5pYm0uY29tPiBhZGRlZCBwaHlzaWNhbAotICoJICAgaWRlbnRpZmljYXRpb24gY29kZSAoYmxpbmsgbGVkJ3MpIGFuZCByZWdpc3RlciBkdW1wLgotICoJICAgRG9uIEZyeSBhZGRlZCB0aW1lciBmb3IgOTcxLzk3MiBzbyBza2J1ZnMgZG9uJ3QgcmVtYWluIG9uIHR4IHJpbmcKLSAqCSAgIGZvcmV2ZXIuCi0gKiB2MS4zMCAgIDE4IE1heSAyMDA0IERvbiBGcnkgcmVtb3ZlZCB0aW1lciBhbmQgTGFzdCBUcmFuc21pdCBJbnRlcnJ1cHQKLSAqCSAgIChsdGludCkgYXMgdGhleSBhZGRlZCBjb21wbGV4aXR5IGFuZCBkaWRuJ3QgZ2l2ZSBnb29kIHRocm91Z2hwdXQuCi0gKiB2MS4zMGEgIDIyIE1heSAyMDA0IERvbiBGcnkgbGltaXQgZnJhbWVzIHJlY2VpdmVkIGR1cmluZyBpbnRlcnJ1cHQuCi0gKiB2MS4zMGIgIDI0IE1heSAyMDA0IERvbiBGcnkgZml4IGJvZ3VzIHR4IGNhcnJpZXIgZXJyb3JzIHdpdGggNzljOTczLAotICoJICAgYXNzaXN0ZWQgYnkgQnJ1Y2UgUGVucm9kIDxibXBlbnJvZEBlbmRydW50ZWNobm9sb2dpZXMuY29tPi4KLSAqIHYxLjMwYyAgMjUgTWF5IDIwMDQgRG9uIEZyeSBhZGRlZCBuZXRpZl93YWtlX3F1ZXVlIGFmdGVyIHBjbmV0MzJfcmVzdGFydC4KLSAqIHYxLjMwZCAgMDEgSnVuIDIwMDQgRG9uIEZyeSBkaXNjYXJkIG92ZXJzaXplIHJ4IHBhY2tldHMuCi0gKiB2MS4zMGUgIDExIEp1biAyMDA0IERvbiBGcnkgcmVjb3ZlciBhZnRlciBmaWZvIGVycm9yIGFuZCByeCBoYW5nLgotICogdjEuMzBmICAxNiBKdW4gMjAwNCBEb24gRnJ5IGNsZWFudXAgSVJRIHRvIGFsbG93IDAgYW5kIDEgZm9yIFBDSSwKLSAqIAkgICBleHBhbmRpbmcgb24gc3VnZ2VzdGlvbnMgZnJvbSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+LAotICogCSAgIGFuZCBCcmlhbiBNdXJwaHkgPGJyaWFuQG11cnBoeS5kaz4uCi0gKiB2MS4zMGcgIDIyIEp1biAyMDA0IFBhdHJpY2sgU2ltbW9ucyA8cHNpbW1vbnNAZmxhc2gubmV0PiBhZGRlZCBvcHRpb24KLSAqCSAgIGhvbWVwbmEgZm9yIHNlbGVjdGluZyBIb21lUE5BIG1vZGUgZm9yIFBDTmV0L0hvbWUgNzlDOTc4LgotICogdjEuMzBoICAyNCBKdW4gMjAwNCBEb24gRnJ5IGNvcnJlY3RseSBzZWxlY3QgYXV0bywgc3BlZWQsIGR1cGxleCBpbiBiY3IzMi4KLSAqIHYxLjMwaSAgMjggSnVuIDIwMDQgRG9uIEZyeSBjaGFuZ2UgdG8gdXNlIG1vZHVsZV9wYXJhbS4KLSAqIHYxLjMwaiAgMjkgQXByIDIwMDUgRG9uIEZyeSBmaXggc2tiL21hcCBsZWFrIHdpdGggbG9vcGJhY2sgdGVzdC4KLSAqIHYxLjMxICAgMDIgU2VwIDIwMDUgSHViZXJ0IFdTIExpbiA8d3NsaW5AdHcuaWJtLmMwbT4gYWRkZWQgc2V0X3JpbmdwYXJhbSgpLgotICogdjEuMzFhICAxMiBTZXAgMjAwNSBIdWJlcnQgV1MgTGluIDx3c2xpbkB0dy5pYm0uYzBtPiBzZXQgbWluIHJpbmcgc2l6ZSB0byA0Ci0gKgkgICB0byBhbGxvdyBsb29wYmFjayB0ZXN0IHRvIHdvcmsgdW5jaGFuZ2VkLgotICogdjEuMzFiICAwNiBPY3QgMjAwNSBEb24gRnJ5IGNoYW5nZWQgYWxsb2NfcmluZyB0byBzaG93IG5hbWUgb2YgZGV2aWNlCi0gKgkgICBpZiBhbGxvY2F0aW9uIGZhaWxzCi0gKiB2MS4zMWMgIDAxIE5vdiAyMDA1IERvbiBGcnkgQWxsaWVkIFRlbGVzeW4gMjcwMC8yNzAxIEZYIGFyZSAxMDBNYml0IG9ubHkuCi0gKgkgICBGb3JjZSAxMDBNYml0IEZEIGlmIEF1dG8gKEFTRUwpIGlzIHNlbGVjdGVkLgotICoJICAgU2VlIEJ1Z3ppbGxhIDI2NjkgYW5kIDQ1NTEuCi0gKi8KLQotCi0vKgogICogU2V0IHRoZSBudW1iZXIgb2YgVHggYW5kIFJ4IGJ1ZmZlcnMsIHVzaW5nIExvZ18yKCMgYnVmZmVycykuCiAgKiBSZWFzb25hYmxlIGRlZmF1bHQgdmFsdWVzIGFyZSA0IFR4IGJ1ZmZlcnMsIGFuZCAxNiBSeCBidWZmZXJzLgogICogVGhhdCB0cmFuc2xhdGVzIHRvIDIgKDQgPT0gMl5eMikgYW5kIDQgKDE2ID09IDJeXjQpLgpAQCAtMzAzLDQyICsxOTAsNDIgQEAKIAogLyogVGhlIFBDTkVUMzIgUnggYW5kIFR4IHJpbmcgZGVzY3JpcHRvcnMuICovCiBzdHJ1Y3QgcGNuZXQzMl9yeF9oZWFkIHsKLSAgICB1MzIgYmFzZTsKLSAgICBzMTYgYnVmX2xlbmd0aDsKLSAgICBzMTYgc3RhdHVzOwotICAgIHUzMiBtc2dfbGVuZ3RoOwotICAgIHUzMiByZXNlcnZlZDsKKwl1MzIJYmFzZTsKKwlzMTYJYnVmX2xlbmd0aDsKKwlzMTYJc3RhdHVzOworCXUzMgltc2dfbGVuZ3RoOworCXUzMglyZXNlcnZlZDsKIH07CiAKIHN0cnVjdCBwY25ldDMyX3R4X2hlYWQgewotICAgIHUzMiBiYXNlOwotICAgIHMxNiBsZW5ndGg7Ci0gICAgczE2IHN0YXR1czsKLSAgICB1MzIgbWlzYzsKLSAgICB1MzIgcmVzZXJ2ZWQ7CisJdTMyCWJhc2U7CisJczE2CWxlbmd0aDsKKwlzMTYJc3RhdHVzOworCXUzMgltaXNjOworCXUzMglyZXNlcnZlZDsKIH07CiAKIC8qIFRoZSBQQ05FVDMyIDMyLUJpdCBpbml0aWFsaXphdGlvbiBibG9jaywgZGVzY3JpYmVkIGluIGRhdGFib29rLiAqLwogc3RydWN0IHBjbmV0MzJfaW5pdF9ibG9jayB7Ci0gICAgdTE2IG1vZGU7Ci0gICAgdTE2IHRsZW5fcmxlbjsKLSAgICB1OAlwaHlzX2FkZHJbNl07Ci0gICAgdTE2IHJlc2VydmVkOwotICAgIHUzMiBmaWx0ZXJbMl07Ci0gICAgLyogUmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZyBiYXNlLCBhbG9uZyB3aXRoIGV4dHJhIGJpdHMuICovCi0gICAgdTMyIHJ4X3Jpbmc7Ci0gICAgdTMyIHR4X3Jpbmc7CisJdTE2CW1vZGU7CisJdTE2CXRsZW5fcmxlbjsKKwl1OAlwaHlzX2FkZHJbNl07CisJdTE2CXJlc2VydmVkOworCXUzMglmaWx0ZXJbMl07CisJLyogUmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmluZyBiYXNlLCBhbG9uZyB3aXRoIGV4dHJhIGJpdHMuICovCisJdTMyCXJ4X3Jpbmc7CisJdTMyCXR4X3Jpbmc7CiB9OwogCiAvKiBQQ25ldDMyIGFjY2VzcyBmdW5jdGlvbnMgKi8KIHN0cnVjdCBwY25ldDMyX2FjY2VzcyB7Ci0gICAgdTE2ICgqcmVhZF9jc3IpKHVuc2lnbmVkIGxvbmcsIGludCk7Ci0gICAgdm9pZCAoKndyaXRlX2NzcikodW5zaWduZWQgbG9uZywgaW50LCB1MTYpOwotICAgIHUxNiAoKnJlYWRfYmNyKSh1bnNpZ25lZCBsb25nLCBpbnQpOwotICAgIHZvaWQgKCp3cml0ZV9iY3IpKHVuc2lnbmVkIGxvbmcsIGludCwgdTE2KTsKLSAgICB1MTYgKCpyZWFkX3JhcCkodW5zaWduZWQgbG9uZyk7Ci0gICAgdm9pZCAoKndyaXRlX3JhcCkodW5zaWduZWQgbG9uZywgdTE2KTsKLSAgICB2b2lkICgqcmVzZXQpKHVuc2lnbmVkIGxvbmcpOworCXUxNgkoKnJlYWRfY3NyKSAodW5zaWduZWQgbG9uZywgaW50KTsKKwl2b2lkCSgqd3JpdGVfY3NyKSAodW5zaWduZWQgbG9uZywgaW50LCB1MTYpOworCXUxNgkoKnJlYWRfYmNyKSAodW5zaWduZWQgbG9uZywgaW50KTsKKwl2b2lkCSgqd3JpdGVfYmNyKSAodW5zaWduZWQgbG9uZywgaW50LCB1MTYpOworCXUxNgkoKnJlYWRfcmFwKSAodW5zaWduZWQgbG9uZyk7CisJdm9pZAkoKndyaXRlX3JhcCkgKHVuc2lnbmVkIGxvbmcsIHUxNik7CisJdm9pZAkoKnJlc2V0KSAodW5zaWduZWQgbG9uZyk7CiB9OwogCiAvKgpAQCAtMzQ2LDc2MCArMjMzLDc5NCBAQAogICogc28gdGhlIHN0cnVjdHVyZSBzaG91bGQgYmUgYWxsb2NhdGVkIHVzaW5nIHBjaV9hbGxvY19jb25zaXN0ZW50KCkuCiAgKi8KIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgewotICAgIHN0cnVjdCBwY25ldDMyX2luaXRfYmxvY2sgaW5pdF9ibG9jazsKLSAgICAvKiBUaGUgVHggYW5kIFJ4IHJpbmcgZW50cmllcyBtdXN0IGJlIGFsaWduZWQgb24gMTYtYnl0ZSBib3VuZGFyaWVzIGluIDMyYml0IG1vZGUuICovCi0gICAgc3RydWN0IHBjbmV0MzJfcnhfaGVhZCAgICAqcnhfcmluZzsKLSAgICBzdHJ1Y3QgcGNuZXQzMl90eF9oZWFkICAgICp0eF9yaW5nOwotICAgIGRtYV9hZGRyX3QJCWRtYV9hZGRyOwkvKiBETUEgYWRkcmVzcyBvZiBiZWdpbm5pbmcgb2YgdGhpcwotCQkJCQkgICBvYmplY3QsIHJldHVybmVkIGJ5Ci0JCQkJCSAgIHBjaV9hbGxvY19jb25zaXN0ZW50ICovCi0gICAgc3RydWN0IHBjaV9kZXYJKnBjaV9kZXY7CS8qIFBvaW50ZXIgdG8gdGhlIGFzc29jaWF0ZWQgcGNpIGRldmljZQotCQkJCQkgICBzdHJ1Y3R1cmUgKi8KLSAgICBjb25zdCBjaGFyCQkqbmFtZTsKLSAgICAvKiBUaGUgc2F2ZWQgYWRkcmVzcyBvZiBhIHNlbnQtaW4tcGxhY2UgcGFja2V0L2J1ZmZlciwgZm9yIHNrZnJlZSgpLiAqLwotICAgIHN0cnVjdCBza19idWZmCSoqdHhfc2tidWZmOwotICAgIHN0cnVjdCBza19idWZmCSoqcnhfc2tidWZmOwotICAgIGRtYV9hZGRyX3QJCSp0eF9kbWFfYWRkcjsKLSAgICBkbWFfYWRkcl90CQkqcnhfZG1hX2FkZHI7Ci0gICAgc3RydWN0IHBjbmV0MzJfYWNjZXNzCWE7Ci0gICAgc3BpbmxvY2tfdAkJbG9jazsJCS8qIEd1YXJkIGxvY2sgKi8KLSAgICB1bnNpZ25lZCBpbnQJY3VyX3J4LCBjdXJfdHg7CS8qIFRoZSBuZXh0IGZyZWUgcmluZyBlbnRyeSAqLwotICAgIHVuc2lnbmVkIGludAlyeF9yaW5nX3NpemU7CS8qIGN1cnJlbnQgcnggcmluZyBzaXplICovCi0gICAgdW5zaWduZWQgaW50CXR4X3Jpbmdfc2l6ZTsJLyogY3VycmVudCB0eCByaW5nIHNpemUgKi8KLSAgICB1bnNpZ25lZCBpbnQJcnhfbW9kX21hc2s7CS8qIHJ4IHJpbmcgbW9kdWxhciBtYXNrICovCi0gICAgdW5zaWduZWQgaW50CXR4X21vZF9tYXNrOwkvKiB0eCByaW5nIG1vZHVsYXIgbWFzayAqLwotICAgIHVuc2lnbmVkIHNob3J0CXJ4X2xlbl9iaXRzOwotICAgIHVuc2lnbmVkIHNob3J0CXR4X2xlbl9iaXRzOwotICAgIGRtYV9hZGRyX3QJCXJ4X3JpbmdfZG1hX2FkZHI7Ci0gICAgZG1hX2FkZHJfdAkJdHhfcmluZ19kbWFfYWRkcjsKLSAgICB1bnNpZ25lZCBpbnQJZGlydHlfcngsIGRpcnR5X3R4OyAvKiBUaGUgcmluZyBlbnRyaWVzIHRvIGJlIGZyZWUoKWVkLiAqLwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotICAgIGNoYXIJCXR4X2Z1bGw7Ci0gICAgaW50CQkJb3B0aW9uczsKLSAgICB1bnNpZ25lZCBpbnQJc2hhcmVkX2lycToxLAkvKiBzaGFyZWQgaXJxIHBvc3NpYmxlICovCi0JCQlkeHN1ZmxvOjEsCS8qIGRpc2FibGUgdHJhbnNtaXQgc3RvcCBvbiB1ZmxvICovCi0JCQltaWk6MTsJCS8qIG1paSBwb3J0IGF2YWlsYWJsZSAqLwotICAgIHN0cnVjdCBuZXRfZGV2aWNlCSpuZXh0OwotICAgIHN0cnVjdCBtaWlfaWZfaW5mbwltaWlfaWY7Ci0gICAgc3RydWN0IHRpbWVyX2xpc3QJd2F0Y2hkb2dfdGltZXI7Ci0gICAgc3RydWN0IHRpbWVyX2xpc3QJYmxpbmtfdGltZXI7Ci0gICAgdTMyCQkJbXNnX2VuYWJsZTsJLyogZGVidWcgbWVzc2FnZSBsZXZlbCAqLworCXN0cnVjdCBwY25ldDMyX2luaXRfYmxvY2sgaW5pdF9ibG9jazsKKwkvKiBUaGUgVHggYW5kIFJ4IHJpbmcgZW50cmllcyBtdXN0IGJlIGFsaWduZWQgb24gMTYtYnl0ZSBib3VuZGFyaWVzIGluIDMyYml0IG1vZGUuICovCisJc3RydWN0IHBjbmV0MzJfcnhfaGVhZAkqcnhfcmluZzsKKwlzdHJ1Y3QgcGNuZXQzMl90eF9oZWFkCSp0eF9yaW5nOworCWRtYV9hZGRyX3QJCWRtYV9hZGRyOy8qIERNQSBhZGRyZXNzIG9mIGJlZ2lubmluZyBvZiB0aGlzCisJCQkJICAgb2JqZWN0LCByZXR1cm5lZCBieSBwY2lfYWxsb2NfY29uc2lzdGVudCAqLworCXN0cnVjdCBwY2lfZGV2CQkqcGNpX2RldjsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwkvKiBUaGUgc2F2ZWQgYWRkcmVzcyBvZiBhIHNlbnQtaW4tcGxhY2UgcGFja2V0L2J1ZmZlciwgZm9yIHNrZnJlZSgpLiAqLworCXN0cnVjdCBza19idWZmCQkqKnR4X3NrYnVmZjsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKipyeF9za2J1ZmY7CisJZG1hX2FkZHJfdAkJKnR4X2RtYV9hZGRyOworCWRtYV9hZGRyX3QJCSpyeF9kbWFfYWRkcjsKKwlzdHJ1Y3QgcGNuZXQzMl9hY2Nlc3MJYTsKKwlzcGlubG9ja190CQlsb2NrOwkJLyogR3VhcmQgbG9jayAqLworCXVuc2lnbmVkIGludAkJY3VyX3J4LCBjdXJfdHg7CS8qIFRoZSBuZXh0IGZyZWUgcmluZyBlbnRyeSAqLworCXVuc2lnbmVkIGludAkJcnhfcmluZ19zaXplOwkvKiBjdXJyZW50IHJ4IHJpbmcgc2l6ZSAqLworCXVuc2lnbmVkIGludAkJdHhfcmluZ19zaXplOwkvKiBjdXJyZW50IHR4IHJpbmcgc2l6ZSAqLworCXVuc2lnbmVkIGludAkJcnhfbW9kX21hc2s7CS8qIHJ4IHJpbmcgbW9kdWxhciBtYXNrICovCisJdW5zaWduZWQgaW50CQl0eF9tb2RfbWFzazsJLyogdHggcmluZyBtb2R1bGFyIG1hc2sgKi8KKwl1bnNpZ25lZCBzaG9ydAkJcnhfbGVuX2JpdHM7CisJdW5zaWduZWQgc2hvcnQJCXR4X2xlbl9iaXRzOworCWRtYV9hZGRyX3QJCXJ4X3JpbmdfZG1hX2FkZHI7CisJZG1hX2FkZHJfdAkJdHhfcmluZ19kbWFfYWRkcjsKKwl1bnNpZ25lZCBpbnQJCWRpcnR5X3J4LAkvKiByaW5nIGVudHJpZXMgdG8gYmUgZnJlZWQuICovCisJCQkJZGlydHlfdHg7CisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKwljaGFyCQkJdHhfZnVsbDsKKwljaGFyCQkJcGh5Y291bnQ7CS8qIG51bWJlciBvZiBwaHlzIGZvdW5kICovCisJaW50CQkJb3B0aW9uczsKKwl1bnNpZ25lZCBpbnQJCXNoYXJlZF9pcnE6MSwJLyogc2hhcmVkIGlycSBwb3NzaWJsZSAqLworCQkJCWR4c3VmbG86MSwgICAvKiBkaXNhYmxlIHRyYW5zbWl0IHN0b3Agb24gdWZsbyAqLworCQkJCW1paToxOwkJLyogbWlpIHBvcnQgYXZhaWxhYmxlICovCisJc3RydWN0IG5ldF9kZXZpY2UJKm5leHQ7CisJc3RydWN0IG1paV9pZl9pbmZvCW1paV9pZjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZ190aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlibGlua190aW1lcjsKKwl1MzIJCQltc2dfZW5hYmxlOwkvKiBkZWJ1ZyBtZXNzYWdlIGxldmVsICovCisKKwkvKiBlYWNoIGJpdCBpbmRpY2F0ZXMgYW4gYXZhaWxhYmxlIFBIWSAqLworCXUzMgkJCXBoeW1hc2s7CiB9OwogCiBzdGF0aWMgdm9pZCBwY25ldDMyX3Byb2JlX3ZsYnVzKHZvaWQpOwotc3RhdGljIGludCAgcGNuZXQzMl9wcm9iZV9wY2koc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7Ci1zdGF0aWMgaW50ICBwY25ldDMyX3Byb2JlMSh1bnNpZ25lZCBsb25nLCBpbnQsIHN0cnVjdCBwY2lfZGV2ICopOwotc3RhdGljIGludCAgcGNuZXQzMl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCAgcGNuZXQzMl9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50ICBwY25ldDMyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50ICBwY25ldDMyX3J4KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgcGNuZXQzMl90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgcGNuZXQzMl9wcm9iZV9wY2koc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7CitzdGF0aWMgaW50IHBjbmV0MzJfcHJvYmUxKHVuc2lnbmVkIGxvbmcsIGludCwgc3RydWN0IHBjaV9kZXYgKik7CitzdGF0aWMgaW50IHBjbmV0MzJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBpbnQgcGNuZXQzMl9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgaW50IHBjbmV0MzJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBpbnQgcGNuZXQzMl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIHBjbmV0MzJfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBwY25ldDMyX2ludGVycnVwdChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Ci1zdGF0aWMgaW50ICBwY25ldDMyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIGludCBwY25ldDMyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwY25ldDMyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIHBjbmV0MzJfbG9hZF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBwY25ldDMyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgIHBjbmV0MzJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCk7CitzdGF0aWMgaW50IHBjbmV0MzJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCk7CiBzdGF0aWMgdm9pZCBwY25ldDMyX3dhdGNoZG9nKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZ19udW0pOwotc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnX251bSwgaW50IHZhbCk7CitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWdfbnVtLAorCQkgICAgICAgaW50IHZhbCk7CiBzdGF0aWMgdm9pZCBwY25ldDMyX3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNzcjBfYml0cyk7CiBzdGF0aWMgdm9pZCBwY25ldDMyX2V0aHRvb2xfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCXN0cnVjdCBldGh0b29sX3Rlc3QgKmV0aF90ZXN0LCB1NjQgKmRhdGEpOwotc3RhdGljIGludCBwY25ldDMyX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDY0X3QgKmRhdGExKTsKKwkJCQkgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRoX3Rlc3QsIHU2NCAqIGRhdGEpOworc3RhdGljIGludCBwY25ldDMyX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDY0X3QgKiBkYXRhMSk7CiBzdGF0aWMgaW50IHBjbmV0MzJfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7CiBzdGF0aWMgdm9pZCBwY25ldDMyX2xlZF9ibGlua19jYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcGNuZXQzMl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBwY25ldDMyX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsCi0Jdm9pZCAqcHRyKTsKKwkJCSAgICAgdm9pZCAqcHRyKTsKIHN0YXRpYyB2b2lkIHBjbmV0MzJfcHVyZ2VfdHhfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcGNuZXQzMl9hbGxvY19yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKm5hbWUpOwogc3RhdGljIHZvaWQgcGNuZXQzMl9mcmVlX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KK3N0YXRpYyB2b2lkIHBjbmV0MzJfY2hlY2tfbWVkaWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHZlcmJvc2UpOwogCiBlbnVtIHBjaV9mbGFnc19iaXQgewotICAgIFBDSV9VU0VTX0lPPTEsIFBDSV9VU0VTX01FTT0yLCBQQ0lfVVNFU19NQVNURVI9NCwKLSAgICBQQ0lfQUREUjA9MHgxMDw8MCwgUENJX0FERFIxPTB4MTA8PDEsIFBDSV9BRERSMj0weDEwPDwyLCBQQ0lfQUREUjM9MHgxMDw8MywKKwlQQ0lfVVNFU19JTyA9IDEsIFBDSV9VU0VTX01FTSA9IDIsIFBDSV9VU0VTX01BU1RFUiA9IDQsCisJUENJX0FERFIwID0gMHgxMCA8PCAwLCBQQ0lfQUREUjEgPSAweDEwIDw8IDEsIFBDSV9BRERSMiA9CisJICAgIDB4MTAgPDwgMiwgUENJX0FERFIzID0gMHgxMCA8PCAzLAogfTsKIAotCi1zdGF0aWMgdTE2IHBjbmV0MzJfd2lvX3JlYWRfY3NyICh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBpbmRleCkKK3N0YXRpYyB1MTYgcGNuZXQzMl93aW9fcmVhZF9jc3IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgpCiB7Ci0gICAgb3V0dyAoaW5kZXgsIGFkZHIrUENORVQzMl9XSU9fUkFQKTsKLSAgICByZXR1cm4gaW53IChhZGRyK1BDTkVUMzJfV0lPX1JEUCk7CisJb3V0dyhpbmRleCwgYWRkciArIFBDTkVUMzJfV0lPX1JBUCk7CisJcmV0dXJuIGludyhhZGRyICsgUENORVQzMl9XSU9fUkRQKTsKIH0KIAotc3RhdGljIHZvaWQgcGNuZXQzMl93aW9fd3JpdGVfY3NyICh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBpbmRleCwgdTE2IHZhbCkKK3N0YXRpYyB2b2lkIHBjbmV0MzJfd2lvX3dyaXRlX2Nzcih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBpbmRleCwgdTE2IHZhbCkKIHsKLSAgICBvdXR3IChpbmRleCwgYWRkcitQQ05FVDMyX1dJT19SQVApOwotICAgIG91dHcgKHZhbCwgYWRkcitQQ05FVDMyX1dJT19SRFApOworCW91dHcoaW5kZXgsIGFkZHIgKyBQQ05FVDMyX1dJT19SQVApOworCW91dHcodmFsLCBhZGRyICsgUENORVQzMl9XSU9fUkRQKTsKIH0KIAotc3RhdGljIHUxNiBwY25ldDMyX3dpb19yZWFkX2JjciAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgpCitzdGF0aWMgdTE2IHBjbmV0MzJfd2lvX3JlYWRfYmNyKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGluZGV4KQogewotICAgIG91dHcgKGluZGV4LCBhZGRyK1BDTkVUMzJfV0lPX1JBUCk7Ci0gICAgcmV0dXJuIGludyAoYWRkcitQQ05FVDMyX1dJT19CRFApOworCW91dHcoaW5kZXgsIGFkZHIgKyBQQ05FVDMyX1dJT19SQVApOworCXJldHVybiBpbncoYWRkciArIFBDTkVUMzJfV0lPX0JEUCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjbmV0MzJfd2lvX3dyaXRlX2JjciAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgsIHUxNiB2YWwpCitzdGF0aWMgdm9pZCBwY25ldDMyX3dpb193cml0ZV9iY3IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgsIHUxNiB2YWwpCiB7Ci0gICAgb3V0dyAoaW5kZXgsIGFkZHIrUENORVQzMl9XSU9fUkFQKTsKLSAgICBvdXR3ICh2YWwsIGFkZHIrUENORVQzMl9XSU9fQkRQKTsKKwlvdXR3KGluZGV4LCBhZGRyICsgUENORVQzMl9XSU9fUkFQKTsKKwlvdXR3KHZhbCwgYWRkciArIFBDTkVUMzJfV0lPX0JEUCk7CiB9CiAKLXN0YXRpYyB1MTYgcGNuZXQzMl93aW9fcmVhZF9yYXAgKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyB1MTYgcGNuZXQzMl93aW9fcmVhZF9yYXAodW5zaWduZWQgbG9uZyBhZGRyKQogewotICAgIHJldHVybiBpbncgKGFkZHIrUENORVQzMl9XSU9fUkFQKTsKKwlyZXR1cm4gaW53KGFkZHIgKyBQQ05FVDMyX1dJT19SQVApOwogfQogCi1zdGF0aWMgdm9pZCBwY25ldDMyX3dpb193cml0ZV9yYXAgKHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IHZhbCkKK3N0YXRpYyB2b2lkIHBjbmV0MzJfd2lvX3dyaXRlX3JhcCh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiB2YWwpCiB7Ci0gICAgb3V0dyAodmFsLCBhZGRyK1BDTkVUMzJfV0lPX1JBUCk7CisJb3V0dyh2YWwsIGFkZHIgKyBQQ05FVDMyX1dJT19SQVApOwogfQogCi1zdGF0aWMgdm9pZCBwY25ldDMyX3dpb19yZXNldCAodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHZvaWQgcGNuZXQzMl93aW9fcmVzZXQodW5zaWduZWQgbG9uZyBhZGRyKQogewotICAgIGludyAoYWRkcitQQ05FVDMyX1dJT19SRVNFVCk7CisJaW53KGFkZHIgKyBQQ05FVDMyX1dJT19SRVNFVCk7CiB9CiAKLXN0YXRpYyBpbnQgcGNuZXQzMl93aW9fY2hlY2sgKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbnQgcGNuZXQzMl93aW9fY2hlY2sodW5zaWduZWQgbG9uZyBhZGRyKQogewotICAgIG91dHcgKDg4LCBhZGRyK1BDTkVUMzJfV0lPX1JBUCk7Ci0gICAgcmV0dXJuIChpbncgKGFkZHIrUENORVQzMl9XSU9fUkFQKSA9PSA4OCk7CisJb3V0dyg4OCwgYWRkciArIFBDTkVUMzJfV0lPX1JBUCk7CisJcmV0dXJuIChpbncoYWRkciArIFBDTkVUMzJfV0lPX1JBUCkgPT0gODgpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjbmV0MzJfYWNjZXNzIHBjbmV0MzJfd2lvID0gewotICAgIC5yZWFkX2Nzcgk9IHBjbmV0MzJfd2lvX3JlYWRfY3NyLAotICAgIC53cml0ZV9jc3IJPSBwY25ldDMyX3dpb193cml0ZV9jc3IsCi0gICAgLnJlYWRfYmNyCT0gcGNuZXQzMl93aW9fcmVhZF9iY3IsCi0gICAgLndyaXRlX2Jjcgk9IHBjbmV0MzJfd2lvX3dyaXRlX2JjciwKLSAgICAucmVhZF9yYXAJPSBwY25ldDMyX3dpb19yZWFkX3JhcCwKLSAgICAud3JpdGVfcmFwCT0gcGNuZXQzMl93aW9fd3JpdGVfcmFwLAotICAgIC5yZXNldAk9IHBjbmV0MzJfd2lvX3Jlc2V0CisJLnJlYWRfY3NyID0gcGNuZXQzMl93aW9fcmVhZF9jc3IsCisJLndyaXRlX2NzciA9IHBjbmV0MzJfd2lvX3dyaXRlX2NzciwKKwkucmVhZF9iY3IgPSBwY25ldDMyX3dpb19yZWFkX2JjciwKKwkud3JpdGVfYmNyID0gcGNuZXQzMl93aW9fd3JpdGVfYmNyLAorCS5yZWFkX3JhcCA9IHBjbmV0MzJfd2lvX3JlYWRfcmFwLAorCS53cml0ZV9yYXAgPSBwY25ldDMyX3dpb193cml0ZV9yYXAsCisJLnJlc2V0ID0gcGNuZXQzMl93aW9fcmVzZXQKIH07CiAKLXN0YXRpYyB1MTYgcGNuZXQzMl9kd2lvX3JlYWRfY3NyICh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBpbmRleCkKK3N0YXRpYyB1MTYgcGNuZXQzMl9kd2lvX3JlYWRfY3NyKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGluZGV4KQogewotICAgIG91dGwgKGluZGV4LCBhZGRyK1BDTkVUMzJfRFdJT19SQVApOwotICAgIHJldHVybiAoaW5sIChhZGRyK1BDTkVUMzJfRFdJT19SRFApICYgMHhmZmZmKTsKKwlvdXRsKGluZGV4LCBhZGRyICsgUENORVQzMl9EV0lPX1JBUCk7CisJcmV0dXJuIChpbmwoYWRkciArIFBDTkVUMzJfRFdJT19SRFApICYgMHhmZmZmKTsKIH0KIAotc3RhdGljIHZvaWQgcGNuZXQzMl9kd2lvX3dyaXRlX2NzciAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgsIHUxNiB2YWwpCitzdGF0aWMgdm9pZCBwY25ldDMyX2R3aW9fd3JpdGVfY3NyKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGluZGV4LCB1MTYgdmFsKQogewotICAgIG91dGwgKGluZGV4LCBhZGRyK1BDTkVUMzJfRFdJT19SQVApOwotICAgIG91dGwgKHZhbCwgYWRkcitQQ05FVDMyX0RXSU9fUkRQKTsKKwlvdXRsKGluZGV4LCBhZGRyICsgUENORVQzMl9EV0lPX1JBUCk7CisJb3V0bCh2YWwsIGFkZHIgKyBQQ05FVDMyX0RXSU9fUkRQKTsKIH0KIAotc3RhdGljIHUxNiBwY25ldDMyX2R3aW9fcmVhZF9iY3IgKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGluZGV4KQorc3RhdGljIHUxNiBwY25ldDMyX2R3aW9fcmVhZF9iY3IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgpCiB7Ci0gICAgb3V0bCAoaW5kZXgsIGFkZHIrUENORVQzMl9EV0lPX1JBUCk7Ci0gICAgcmV0dXJuIChpbmwgKGFkZHIrUENORVQzMl9EV0lPX0JEUCkgJiAweGZmZmYpOworCW91dGwoaW5kZXgsIGFkZHIgKyBQQ05FVDMyX0RXSU9fUkFQKTsKKwlyZXR1cm4gKGlubChhZGRyICsgUENORVQzMl9EV0lPX0JEUCkgJiAweGZmZmYpOwogfQogCi1zdGF0aWMgdm9pZCBwY25ldDMyX2R3aW9fd3JpdGVfYmNyICh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBpbmRleCwgdTE2IHZhbCkKK3N0YXRpYyB2b2lkIHBjbmV0MzJfZHdpb193cml0ZV9iY3IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgaW5kZXgsIHUxNiB2YWwpCiB7Ci0gICAgb3V0bCAoaW5kZXgsIGFkZHIrUENORVQzMl9EV0lPX1JBUCk7Ci0gICAgb3V0bCAodmFsLCBhZGRyK1BDTkVUMzJfRFdJT19CRFApOworCW91dGwoaW5kZXgsIGFkZHIgKyBQQ05FVDMyX0RXSU9fUkFQKTsKKwlvdXRsKHZhbCwgYWRkciArIFBDTkVUMzJfRFdJT19CRFApOwogfQogCi1zdGF0aWMgdTE2IHBjbmV0MzJfZHdpb19yZWFkX3JhcCAodW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIHUxNiBwY25ldDMyX2R3aW9fcmVhZF9yYXAodW5zaWduZWQgbG9uZyBhZGRyKQogewotICAgIHJldHVybiAoaW5sIChhZGRyK1BDTkVUMzJfRFdJT19SQVApICYgMHhmZmZmKTsKKwlyZXR1cm4gKGlubChhZGRyICsgUENORVQzMl9EV0lPX1JBUCkgJiAweGZmZmYpOwogfQogCi1zdGF0aWMgdm9pZCBwY25ldDMyX2R3aW9fd3JpdGVfcmFwICh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiB2YWwpCitzdGF0aWMgdm9pZCBwY25ldDMyX2R3aW9fd3JpdGVfcmFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IHZhbCkKIHsKLSAgICBvdXRsICh2YWwsIGFkZHIrUENORVQzMl9EV0lPX1JBUCk7CisJb3V0bCh2YWwsIGFkZHIgKyBQQ05FVDMyX0RXSU9fUkFQKTsKIH0KIAotc3RhdGljIHZvaWQgcGNuZXQzMl9kd2lvX3Jlc2V0ICh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgdm9pZCBwY25ldDMyX2R3aW9fcmVzZXQodW5zaWduZWQgbG9uZyBhZGRyKQogewotICAgIGlubCAoYWRkcitQQ05FVDMyX0RXSU9fUkVTRVQpOworCWlubChhZGRyICsgUENORVQzMl9EV0lPX1JFU0VUKTsKIH0KIAotc3RhdGljIGludCBwY25ldDMyX2R3aW9fY2hlY2sgKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbnQgcGNuZXQzMl9kd2lvX2NoZWNrKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLSAgICBvdXRsICg4OCwgYWRkcitQQ05FVDMyX0RXSU9fUkFQKTsKLSAgICByZXR1cm4gKChpbmwgKGFkZHIrUENORVQzMl9EV0lPX1JBUCkgJiAweGZmZmYpID09IDg4KTsKKwlvdXRsKDg4LCBhZGRyICsgUENORVQzMl9EV0lPX1JBUCk7CisJcmV0dXJuICgoaW5sKGFkZHIgKyBQQ05FVDMyX0RXSU9fUkFQKSAmIDB4ZmZmZikgPT0gODgpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjbmV0MzJfYWNjZXNzIHBjbmV0MzJfZHdpbyA9IHsKLSAgICAucmVhZF9jc3IJPSBwY25ldDMyX2R3aW9fcmVhZF9jc3IsCi0gICAgLndyaXRlX2Nzcgk9IHBjbmV0MzJfZHdpb193cml0ZV9jc3IsCi0gICAgLnJlYWRfYmNyCT0gcGNuZXQzMl9kd2lvX3JlYWRfYmNyLAotICAgIC53cml0ZV9iY3IJPSBwY25ldDMyX2R3aW9fd3JpdGVfYmNyLAotICAgIC5yZWFkX3JhcAk9IHBjbmV0MzJfZHdpb19yZWFkX3JhcCwKLSAgICAud3JpdGVfcmFwCT0gcGNuZXQzMl9kd2lvX3dyaXRlX3JhcCwKLSAgICAucmVzZXQJPSBwY25ldDMyX2R3aW9fcmVzZXQKKwkucmVhZF9jc3IgPSBwY25ldDMyX2R3aW9fcmVhZF9jc3IsCisJLndyaXRlX2NzciA9IHBjbmV0MzJfZHdpb193cml0ZV9jc3IsCisJLnJlYWRfYmNyID0gcGNuZXQzMl9kd2lvX3JlYWRfYmNyLAorCS53cml0ZV9iY3IgPSBwY25ldDMyX2R3aW9fd3JpdGVfYmNyLAorCS5yZWFkX3JhcCA9IHBjbmV0MzJfZHdpb19yZWFkX3JhcCwKKwkud3JpdGVfcmFwID0gcGNuZXQzMl9kd2lvX3dyaXRlX3JhcCwKKwkucmVzZXQgPSBwY25ldDMyX2R3aW9fcmVzZXQKIH07CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgcGNuZXQzMl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBkaXNhYmxlX2lycShkZXYtPmlycSk7Ci0gICAgcGNuZXQzMl9pbnRlcnJ1cHQoMCwgZGV2LCBOVUxMKTsKLSAgICBlbmFibGVfaXJxKGRldi0+aXJxKTsKKwlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJcGNuZXQzMl9pbnRlcnJ1cHQoMCwgZGV2LCBOVUxMKTsKKwllbmFibGVfaXJxKGRldi0+aXJxKTsKIH0KICNlbmRpZgogCi0KIHN0YXRpYyBpbnQgcGNuZXQzMl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7Ci0gICAgc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICBpbnQgciA9IC1FT1BOT1RTVVBQOworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHIgPSAtRU9QTk9UU1VQUDsKIAotICAgIGlmIChscC0+bWlpKSB7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JbWlpX2V0aHRvb2xfZ3NldCgmbHAtPm1paV9pZiwgY21kKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCXIgPSAwOwotICAgIH0KLSAgICByZXR1cm4gcjsKKwlpZiAobHAtPm1paSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJbWlpX2V0aHRvb2xfZ3NldCgmbHAtPm1paV9pZiwgY21kKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJciA9IDA7CisJfQorCXJldHVybiByOwogfQogCiBzdGF0aWMgaW50IHBjbmV0MzJfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgaW50IHIgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByID0gLUVPUE5PVFNVUFA7CiAKLSAgICBpZiAobHAtPm1paSkgewotCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCXIgPSBtaWlfZXRodG9vbF9zc2V0KCZscC0+bWlpX2lmLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0gICAgfQotICAgIHJldHVybiByOworCWlmIChscC0+bWlpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQlyID0gbWlpX2V0aHRvb2xfc3NldCgmbHAtPm1paV9pZiwgY21kKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyB2b2lkIHBjbmV0MzJfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3N0YXRpYyB2b2lkIHBjbmV0MzJfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwogCi0gICAgc3RyY3B5IChpbmZvLT5kcml2ZXIsIERSVl9OQU1FKTsKLSAgICBzdHJjcHkgKGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKLSAgICBpZiAobHAtPnBjaV9kZXYpCi0Jc3RyY3B5IChpbmZvLT5idXNfaW5mbywgcGNpX25hbWUobHAtPnBjaV9kZXYpKTsKLSAgICBlbHNlCi0Jc3ByaW50ZihpbmZvLT5idXNfaW5mbywgIlZMQiAweCVseCIsIGRldi0+YmFzZV9hZGRyKTsKKwlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CisJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKKwlpZiAobHAtPnBjaV9kZXYpCisJCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUobHAtPnBjaV9kZXYpKTsKKwllbHNlCisJCXNwcmludGYoaW5mby0+YnVzX2luZm8sICJWTEIgMHglbHgiLCBkZXYtPmJhc2VfYWRkcik7CiB9CiAKIHN0YXRpYyB1MzIgcGNuZXQzMl9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgaW50IHI7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcjsKIAotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotICAgIGlmIChscC0+bWlpKSB7Ci0JciA9IG1paV9saW5rX29rKCZscC0+bWlpX2lmKTsKLSAgICB9IGVsc2UgewotCXVsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwkvKiBjYXJkIGJhc2UgSS9PIGFkZHJlc3MgKi8KLQlyID0gKGxwLT5hLnJlYWRfYmNyKGlvYWRkciwgNCkgIT0gMHhjMCk7Ci0gICAgfQotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJaWYgKGxwLT5taWkpIHsKKwkJciA9IG1paV9saW5rX29rKCZscC0+bWlpX2lmKTsKKwl9IGVsc2UgeworCQl1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsJLyogY2FyZCBiYXNlIEkvTyBhZGRyZXNzICovCisJCXIgPSAobHAtPmEucmVhZF9iY3IoaW9hZGRyLCA0KSAhPSAweGMwKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotICAgIHJldHVybiByOworCXJldHVybiByOwogfQogCiBzdGF0aWMgdTMyIHBjbmV0MzJfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0gICAgcmV0dXJuIGxwLT5tc2dfZW5hYmxlOworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXJldHVybiBscC0+bXNnX2VuYWJsZTsKIH0KIAogc3RhdGljIHZvaWQgcGNuZXQzMl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIGxwLT5tc2dfZW5hYmxlID0gdmFsdWU7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJbHAtPm1zZ19lbmFibGUgPSB2YWx1ZTsKIH0KIAogc3RhdGljIGludCBwY25ldDMyX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIGludCByID0gLUVPUE5PVFNVUFA7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgciA9IC1FT1BOT1RTVVBQOwogCi0gICAgaWYgKGxwLT5taWkpIHsKKwlpZiAobHAtPm1paSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJciA9IG1paV9ud2F5X3Jlc3RhcnQoJmxwLT5taWlfaWYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgcGNuZXQzMl9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQoreworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCisJZXJpbmctPnR4X21heF9wZW5kaW5nID0gVFhfTUFYX1JJTkdfU0laRSAtIDE7CisJZXJpbmctPnR4X3BlbmRpbmcgPSBscC0+dHhfcmluZ19zaXplIC0gMTsKKwllcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBSWF9NQVhfUklOR19TSVpFIC0gMTsKKwllcmluZy0+cnhfcGVuZGluZyA9IGxwLT5yeF9yaW5nX3NpemUgLSAxOworfQorCitzdGF0aWMgaW50IHBjbmV0MzJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQoreworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlpZiAoZXJpbmctPnJ4X21pbmlfcGVuZGluZyB8fCBlcmluZy0+cnhfanVtYm9fcGVuZGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlwY25ldDMyX2Nsb3NlKGRldik7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlyID0gbWlpX253YXlfcmVzdGFydCgmbHAtPm1paV9pZik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjbmV0MzJfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQotewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotCi0gICAgZXJpbmctPnR4X21heF9wZW5kaW5nID0gVFhfTUFYX1JJTkdfU0laRSAtIDE7Ci0gICAgZXJpbmctPnR4X3BlbmRpbmcgPSBscC0+dHhfcmluZ19zaXplIC0gMTsKLSAgICBlcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBSWF9NQVhfUklOR19TSVpFIC0gMTsKLSAgICBlcmluZy0+cnhfcGVuZGluZyA9IGxwLT5yeF9yaW5nX3NpemUgLSAxOwotfQotCi1zdGF0aWMgaW50IHBjbmV0MzJfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQotewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAoZXJpbmctPnJ4X21pbmlfcGVuZGluZyB8fCBlcmluZy0+cnhfanVtYm9fcGVuZGluZykKLQlyZXR1cm4gLUVJTlZBTDsKLQotICAgIGlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JcGNuZXQzMl9jbG9zZShkZXYpOwotCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0gICAgcGNuZXQzMl9mcmVlX3JpbmcoZGV2KTsKLSAgICBscC0+dHhfcmluZ19zaXplID0gbWluKGVyaW5nLT50eF9wZW5kaW5nLCAodW5zaWduZWQgaW50KSBUWF9NQVhfUklOR19TSVpFKTsKLSAgICBscC0+cnhfcmluZ19zaXplID0gbWluKGVyaW5nLT5yeF9wZW5kaW5nLCAodW5zaWduZWQgaW50KSBSWF9NQVhfUklOR19TSVpFKTsKLQotICAgIC8qIHNldCB0aGUgbWluaW11bSByaW5nIHNpemUgdG8gNCwgdG8gYWxsb3cgdGhlIGxvb3BiYWNrIHRlc3QgdG8gd29yawotICAgICAqIHVuY2hhbmdlZC4KLSAgICAgKi8KLSAgICBmb3IgKGkgPSAyOyBpIDw9IFBDTkVUMzJfTE9HX01BWF9UWF9CVUZGRVJTOyBpKyspIHsKLQlpZiAobHAtPnR4X3Jpbmdfc2l6ZSA8PSAoMSA8PCBpKSkKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgIGxwLT50eF9yaW5nX3NpemUgPSAoMSA8PCBpKTsKLSAgICBscC0+dHhfbW9kX21hc2sgPSBscC0+dHhfcmluZ19zaXplIC0gMTsKLSAgICBscC0+dHhfbGVuX2JpdHMgPSAoaSA8PCAxMik7Ci0KLSAgICBmb3IgKGkgPSAyOyBpIDw9IFBDTkVUMzJfTE9HX01BWF9SWF9CVUZGRVJTOyBpKyspIHsKLQlpZiAobHAtPnJ4X3Jpbmdfc2l6ZSA8PSAoMSA8PCBpKSkKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgIGxwLT5yeF9yaW5nX3NpemUgPSAoMSA8PCBpKTsKLSAgICBscC0+cnhfbW9kX21hc2sgPSBscC0+cnhfcmluZ19zaXplIC0gMTsKLSAgICBscC0+cnhfbGVuX2JpdHMgPSAoaSA8PCA0KTsKLQotICAgIGlmIChwY25ldDMyX2FsbG9jX3JpbmcoZGV2LCBkZXYtPm5hbWUpKSB7CiAJcGNuZXQzMl9mcmVlX3JpbmcoZGV2KTsKKwlscC0+dHhfcmluZ19zaXplID0KKwkgICAgbWluKGVyaW5nLT50eF9wZW5kaW5nLCAodW5zaWduZWQgaW50KVRYX01BWF9SSU5HX1NJWkUpOworCWxwLT5yeF9yaW5nX3NpemUgPQorCSAgICBtaW4oZXJpbmctPnJ4X3BlbmRpbmcsICh1bnNpZ25lZCBpbnQpUlhfTUFYX1JJTkdfU0laRSk7CisKKwkvKiBzZXQgdGhlIG1pbmltdW0gcmluZyBzaXplIHRvIDQsIHRvIGFsbG93IHRoZSBsb29wYmFjayB0ZXN0IHRvIHdvcmsKKwkgKiB1bmNoYW5nZWQuCisJICovCisJZm9yIChpID0gMjsgaSA8PSBQQ05FVDMyX0xPR19NQVhfVFhfQlVGRkVSUzsgaSsrKSB7CisJCWlmIChscC0+dHhfcmluZ19zaXplIDw9ICgxIDw8IGkpKQorCQkJYnJlYWs7CisJfQorCWxwLT50eF9yaW5nX3NpemUgPSAoMSA8PCBpKTsKKwlscC0+dHhfbW9kX21hc2sgPSBscC0+dHhfcmluZ19zaXplIC0gMTsKKwlscC0+dHhfbGVuX2JpdHMgPSAoaSA8PCAxMik7CisKKwlmb3IgKGkgPSAyOyBpIDw9IFBDTkVUMzJfTE9HX01BWF9SWF9CVUZGRVJTOyBpKyspIHsKKwkJaWYgKGxwLT5yeF9yaW5nX3NpemUgPD0gKDEgPDwgaSkpCisJCQlicmVhazsKKwl9CisJbHAtPnJ4X3Jpbmdfc2l6ZSA9ICgxIDw8IGkpOworCWxwLT5yeF9tb2RfbWFzayA9IGxwLT5yeF9yaW5nX3NpemUgLSAxOworCWxwLT5yeF9sZW5fYml0cyA9IChpIDw8IDQpOworCisJaWYgKHBjbmV0MzJfYWxsb2NfcmluZyhkZXYsIGRldi0+bmFtZSkpIHsKKwkJcGNuZXQzMl9mcmVlX3JpbmcoZGV2KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gLUVOT01FTTsKLSAgICB9CiAKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJICAgICAgICIlczogUmluZyBQYXJhbSBTZXR0aW5nczogUlg6ICVkLCBUWDogJWRcbiIsIGRldi0+bmFtZSwKKwkJICAgICAgIGxwLT5yeF9yaW5nX3NpemUsIGxwLT50eF9yaW5nX3NpemUpOwogCi0gICAgaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfRFJWKQotCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogUmluZyBQYXJhbSBTZXR0aW5nczogUlg6ICVkLCBUWDogJWRcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbHAtPnJ4X3Jpbmdfc2l6ZSwgbHAtPnR4X3Jpbmdfc2l6ZSk7CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcGNuZXQzMl9vcGVuKGRldik7CiAKLSAgICBpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCXBjbmV0MzJfb3BlbihkZXYpOwotCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBjbmV0MzJfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCitzdGF0aWMgdm9pZCBwY25ldDMyX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsCisJCQkJdTggKiBkYXRhKQogewotICAgIG1lbWNweShkYXRhLCBwY25ldDMyX2dzdHJpbmdzX3Rlc3QsIHNpemVvZihwY25ldDMyX2dzdHJpbmdzX3Rlc3QpKTsKKwltZW1jcHkoZGF0YSwgcGNuZXQzMl9nc3RyaW5nc190ZXN0LCBzaXplb2YocGNuZXQzMl9nc3RyaW5nc190ZXN0KSk7CiB9CiAKIHN0YXRpYyBpbnQgcGNuZXQzMl9zZWxmX3Rlc3RfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByZXR1cm4gUENORVQzMl9URVNUX0xFTjsKKwlyZXR1cm4gUENORVQzMl9URVNUX0xFTjsKIH0KIAogc3RhdGljIHZvaWQgcGNuZXQzMl9ldGh0b29sX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQlzdHJ1Y3QgZXRodG9vbF90ZXN0ICp0ZXN0LCB1NjQgKmRhdGEpCisJCQkJIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqIGRhdGEpCiB7Ci0gICAgc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0gICAgaW50IHJjOworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCWludCByYzsKIAotICAgIGlmICh0ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7Ci0JcmMgPSBwY25ldDMyX2xvb3BiYWNrX3Rlc3QoZGV2LCBkYXRhKTsKLQlpZiAocmMpIHsKLQkgICAgaWYgKG5ldGlmX21zZ19odyhscCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTG9vcGJhY2sgdGVzdCBmYWlsZWQuXG4iLCBkZXYtPm5hbWUpOwotCSAgICB0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJaWYgKHRlc3QtPmZsYWdzID09IEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKKwkJcmMgPSBwY25ldDMyX2xvb3BiYWNrX3Rlc3QoZGV2LCBkYXRhKTsKKwkJaWYgKHJjKSB7CisJCQlpZiAobmV0aWZfbXNnX2h3KGxwKSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IExvb3BiYWNrIHRlc3QgZmFpbGVkLlxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJfSBlbHNlIGlmIChuZXRpZl9tc2dfaHcobHApKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMb29wYmFjayB0ZXN0IHBhc3NlZC5cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKIAl9IGVsc2UgaWYgKG5ldGlmX21zZ19odyhscCkpCi0JICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogTG9vcGJhY2sgdGVzdCBwYXNzZWQuXG4iLCBkZXYtPm5hbWUpOwotICAgIH0gZWxzZSBpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIHRlc3RzIHRvIHJ1biAoc3BlY2lmeSAnT2ZmbGluZScgb24gZXRodG9vbCkuIiwJICAgIGRldi0+bmFtZSk7Ci19IC8qIGVuZCBwY25ldDMyX2V0aHRvb2xfdGVzdCAqLworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIiVzOiBObyB0ZXN0cyB0byBydW4gKHNwZWNpZnkgJ09mZmxpbmUnIG9uIGV0aHRvb2wpLiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworfQkJCQkvKiBlbmQgcGNuZXQzMl9ldGh0b29sX3Rlc3QgKi8KIAotc3RhdGljIGludCBwY25ldDMyX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDY0X3QgKmRhdGExKQorc3RhdGljIGludCBwY25ldDMyX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDY0X3QgKiBkYXRhMSkKIHsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9hY2Nlc3MgKmEgPSAmbHAtPmE7CS8qIGFjY2VzcyB0byByZWdpc3RlcnMgKi8KLSAgICB1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsJLyogY2FyZCBiYXNlIEkvTyBhZGRyZXNzICovCi0gICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsJCS8qIHNrIGJ1ZmYgKi8KLSAgICBpbnQgeCwgaTsJCQkJLyogY291bnRlcnMgKi8KLSAgICBpbnQgbnVtYnVmZnMgPSA0OwkJCS8qIG51bWJlciBvZiBUWC9SWCBidWZmZXJzIGFuZCBkZXNjcyAqLwotICAgIHUxNiBzdGF0dXMgPSAweDgzMDA7CQkvKiBUWCByaW5nIHN0YXR1cyAqLwotICAgIHUxNiB0ZXN0c3RhdHVzOwkJCS8qIHRlc3Qgb2YgcmluZyBzdGF0dXMgKi8KLSAgICBpbnQgcmM7CQkJCS8qIHJldHVybiBjb2RlICovCi0gICAgaW50IHNpemU7CQkJCS8qIHNpemUgb2YgcGFja2V0cyAqLwotICAgIHVuc2lnbmVkIGNoYXIgKnBhY2tldDsJCS8qIHNvdXJjZSBwYWNrZXQgZGF0YSAqLwotICAgIHN0YXRpYyBpbnQgZGF0YV9sZW4gPSA2MDsJCS8qIGxlbmd0aCBvZiBzb3VyY2UgcGFja2V0cyAqLwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyB0aWNrczsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcGNuZXQzMl9hY2Nlc3MgKmEgPSAmbHAtPmE7CS8qIGFjY2VzcyB0byByZWdpc3RlcnMgKi8KKwl1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsJLyogY2FyZCBiYXNlIEkvTyBhZGRyZXNzICovCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsJLyogc2sgYnVmZiAqLworCWludCB4LCBpOwkJLyogY291bnRlcnMgKi8KKwlpbnQgbnVtYnVmZnMgPSA0OwkvKiBudW1iZXIgb2YgVFgvUlggYnVmZmVycyBhbmQgZGVzY3MgKi8KKwl1MTYgc3RhdHVzID0gMHg4MzAwOwkvKiBUWCByaW5nIHN0YXR1cyAqLworCXUxNiB0ZXN0c3RhdHVzOwkJLyogdGVzdCBvZiByaW5nIHN0YXR1cyAqLworCWludCByYzsJCQkvKiByZXR1cm4gY29kZSAqLworCWludCBzaXplOwkJLyogc2l6ZSBvZiBwYWNrZXRzICovCisJdW5zaWduZWQgY2hhciAqcGFja2V0OwkvKiBzb3VyY2UgcGFja2V0IGRhdGEgKi8KKwlzdGF0aWMgY29uc3QgaW50IGRhdGFfbGVuID0gNjA7CS8qIGxlbmd0aCBvZiBzb3VyY2UgcGFja2V0cyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB0aWNrczsKIAotICAgICpkYXRhMSA9IDE7CQkJLyogc3RhdHVzIG9mIHRlc3QsIGRlZmF1bHQgdG8gZmFpbCAqLwotICAgIHJjID0gMTsJCQkvKiBkZWZhdWx0IHRvIGZhaWwgKi8KKwkqZGF0YTEgPSAxOwkJLyogc3RhdHVzIG9mIHRlc3QsIGRlZmF1bHQgdG8gZmFpbCAqLworCXJjID0gMTsJCQkvKiBkZWZhdWx0IHRvIGZhaWwgKi8KIAotICAgIGlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JcGNuZXQzMl9jbG9zZShkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXBjbmV0MzJfY2xvc2UoZGV2KTsKIAotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCi0gICAgLyogUmVzZXQgdGhlIFBDTkVUMzIgKi8KLSAgICBscC0+YS5yZXNldCAoaW9hZGRyKTsKKwkvKiBSZXNldCB0aGUgUENORVQzMiAqLworCWxwLT5hLnJlc2V0KGlvYWRkcik7CiAKLSAgICAvKiBzd2l0Y2ggcGNuZXQzMiB0byAzMmJpdCBtb2RlICovCi0gICAgbHAtPmEud3JpdGVfYmNyIChpb2FkZHIsIDIwLCAyKTsKKwkvKiBzd2l0Y2ggcGNuZXQzMiB0byAzMmJpdCBtb2RlICovCisJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMjAsIDIpOwogCi0gICAgbHAtPmluaXRfYmxvY2subW9kZSA9IGxlMTZfdG9fY3B1KChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9QT1JUU0VMKSA8PCA3KTsKLSAgICBscC0+aW5pdF9ibG9jay5maWx0ZXJbMF0gPSAwOwotICAgIGxwLT5pbml0X2Jsb2NrLmZpbHRlclsxXSA9IDA7CisJbHAtPmluaXRfYmxvY2subW9kZSA9CisJICAgIGxlMTZfdG9fY3B1KChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9QT1JUU0VMKSA8PCA3KTsKKwlscC0+aW5pdF9ibG9jay5maWx0ZXJbMF0gPSAwOworCWxwLT5pbml0X2Jsb2NrLmZpbHRlclsxXSA9IDA7CiAKLSAgICAvKiBwdXJnZSAmIGluaXQgcmluZ3MgYnV0IGRvbid0IGFjdHVhbGx5IHJlc3RhcnQgKi8KLSAgICBwY25ldDMyX3Jlc3RhcnQoZGV2LCAweDAwMDApOworCS8qIHB1cmdlICYgaW5pdCByaW5ncyBidXQgZG9uJ3QgYWN0dWFsbHkgcmVzdGFydCAqLworCXBjbmV0MzJfcmVzdGFydChkZXYsIDB4MDAwMCk7CiAKLSAgICBscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDAwMDQpOwkvKiBTZXQgU1RPUCBiaXQgKi8KKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDAwMDQpOwkvKiBTZXQgU1RPUCBiaXQgKi8KIAotICAgIC8qIEluaXRpYWxpemUgVHJhbnNtaXQgYnVmZmVycy4gKi8KLSAgICBzaXplID0gZGF0YV9sZW4gKyAxNTsKLSAgICBmb3IgKHg9MDsgeDxudW1idWZmczsgeCsrKSB7Ci0JaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKSkpIHsKLQkgICAgaWYgKG5ldGlmX21zZ19odyhscCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQ2Fubm90IGFsbG9jYXRlIHNrYiBhdCBsaW5lOiAlZCFcbiIsCi0JCSAgICBkZXYtPm5hbWUsIF9fTElORV9fKTsKLQkgICAgZ290byBjbGVhbl91cDsKKwkvKiBJbml0aWFsaXplIFRyYW5zbWl0IGJ1ZmZlcnMuICovCisJc2l6ZSA9IGRhdGFfbGVuICsgMTU7CisJZm9yICh4ID0gMDsgeCA8IG51bWJ1ZmZzOyB4KyspIHsKKwkJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKSkpIHsKKwkJCWlmIChuZXRpZl9tc2dfaHcobHApKQorCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICIlczogQ2Fubm90IGFsbG9jYXRlIHNrYiBhdCBsaW5lOiAlZCFcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgX19MSU5FX18pOworCQkJZ290byBjbGVhbl91cDsKKwkJfSBlbHNlIHsKKwkJCXBhY2tldCA9IHNrYi0+ZGF0YTsKKwkJCXNrYl9wdXQoc2tiLCBzaXplKTsJLyogY3JlYXRlIHNwYWNlIGZvciBkYXRhICovCisJCQlscC0+dHhfc2tidWZmW3hdID0gc2tiOworCQkJbHAtPnR4X3JpbmdbeF0ubGVuZ3RoID0gbGUxNl90b19jcHUoLXNrYi0+bGVuKTsKKwkJCWxwLT50eF9yaW5nW3hdLm1pc2MgPSAwOworCisJCQkvKiBwdXQgREEgYW5kIFNBIGludG8gdGhlIHNrYiAqLworCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCQkqcGFja2V0KysgPSBkZXYtPmRldl9hZGRyW2ldOworCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCQkqcGFja2V0KysgPSBkZXYtPmRldl9hZGRyW2ldOworCQkJLyogdHlwZSAqLworCQkJKnBhY2tldCsrID0gMHgwODsKKwkJCSpwYWNrZXQrKyA9IDB4MDY7CisJCQkvKiBwYWNrZXQgbnVtYmVyICovCisJCQkqcGFja2V0KysgPSB4OworCQkJLyogZmlsbCBwYWNrZXQgd2l0aCBkYXRhICovCisJCQlmb3IgKGkgPSAwOyBpIDwgZGF0YV9sZW47IGkrKykKKwkJCQkqcGFja2V0KysgPSBpOworCisJCQlscC0+dHhfZG1hX2FkZHJbeF0gPQorCQkJICAgIHBjaV9tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCQkgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWxwLT50eF9yaW5nW3hdLmJhc2UgPQorCQkJICAgICh1MzIpIGxlMzJfdG9fY3B1KGxwLT50eF9kbWFfYWRkclt4XSk7CisJCQl3bWIoKTsJLyogTWFrZSBzdXJlIG93bmVyIGNoYW5nZXMgYWZ0ZXIgYWxsIG90aGVycyBhcmUgdmlzaWJsZSAqLworCQkJbHAtPnR4X3JpbmdbeF0uc3RhdHVzID0gbGUxNl90b19jcHUoc3RhdHVzKTsKKwkJfQorCX0KKworCXggPSBhLT5yZWFkX2Jjcihpb2FkZHIsIDMyKTsJLyogc2V0IGludGVybmFsIGxvb3BiYWNrIGluIEJTUjMyICovCisJeCA9IHggfCAweDAwMDI7CisJYS0+d3JpdGVfYmNyKGlvYWRkciwgMzIsIHgpOworCisJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgMTUsIDB4MDA0NCk7CS8qIHNldCBpbnQgbG9vcGJhY2sgaW4gQ1NSMTUgKi8KKworCXRlc3RzdGF0dXMgPSBsZTE2X3RvX2NwdSgweDgwMDApOworCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIDB4MDAwMik7CS8qIFNldCBTVFJUIGJpdCAqLworCisJLyogQ2hlY2sgc3RhdHVzIG9mIGRlc2NyaXB0b3JzICovCisJZm9yICh4ID0gMDsgeCA8IG51bWJ1ZmZzOyB4KyspIHsKKwkJdGlja3MgPSAwOworCQlybWIoKTsKKwkJd2hpbGUgKChscC0+cnhfcmluZ1t4XS5zdGF0dXMgJiB0ZXN0c3RhdHVzKSAmJiAodGlja3MgPCAyMDApKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCQkJbWRlbGF5KDEpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJCQlybWIoKTsKKwkJCXRpY2tzKys7CisJCX0KKwkJaWYgKHRpY2tzID09IDIwMCkgeworCQkJaWYgKG5ldGlmX21zZ19odyhscCkpCisJCQkJcHJpbnRrKCIlczogRGVzYyAlZCBmYWlsZWQgdG8gcmVzZXQhXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIHgpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDAwMDQpOwkvKiBTZXQgU1RPUCBiaXQgKi8KKwl3bWIoKTsKKwlpZiAobmV0aWZfbXNnX2h3KGxwKSAmJiBuZXRpZl9tc2dfcGt0ZGF0YShscCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBsb29wYmFjayBwYWNrZXRzOlxuIiwgZGV2LT5uYW1lKTsKKworCQlmb3IgKHggPSAwOyB4IDwgbnVtYnVmZnM7IHgrKykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQYWNrZXQgJWQ6XG4iLCBkZXYtPm5hbWUsIHgpOworCQkJc2tiID0gbHAtPnJ4X3NrYnVmZlt4XTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCQlwcmludGsoIiUwMnggIiwgKihza2ItPmRhdGEgKyBpKSk7CisJCQl9CisJCQlwcmludGsoIlxuIik7CisJCX0KKwl9CisKKwl4ID0gMDsKKwlyYyA9IDA7CisJd2hpbGUgKHggPCBudW1idWZmcyAmJiAhcmMpIHsKKwkJc2tiID0gbHAtPnJ4X3NrYnVmZlt4XTsKKwkJcGFja2V0ID0gbHAtPnR4X3NrYnVmZlt4XS0+ZGF0YTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJaWYgKCooc2tiLT5kYXRhICsgaSkgIT0gcGFja2V0W2ldKSB7CisJCQkJaWYgKG5ldGlmX21zZ19odyhscCkpCisJCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJCSAgICAgICAiJXM6IEVycm9yIGluIGNvbXBhcmUhICUyeCAtICUwMnggJTAyeFxuIiwKKwkJCQkJICAgICAgIGRldi0+bmFtZSwgaSwgKihza2ItPmRhdGEgKyBpKSwKKwkJCQkJICAgICAgIHBhY2tldFtpXSk7CisJCQkJcmMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXgrKzsKKwl9CisJaWYgKCFyYykgeworCQkqZGF0YTEgPSAwOworCX0KKworICAgICAgY2xlYW5fdXA6CisJcGNuZXQzMl9wdXJnZV90eF9yaW5nKGRldik7CisJeCA9IGEtPnJlYWRfY3NyKGlvYWRkciwgMTUpICYgMHhGRkZGOworCWEtPndyaXRlX2Nzcihpb2FkZHIsIDE1LCAoeCAmIH4weDAwNDQpKTsJLyogcmVzZXQgYml0cyA2IGFuZCAyICovCisKKwl4ID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAzMik7CS8qIHJlc2V0IGludGVybmFsIGxvb3BiYWNrICovCisJeCA9IHggJiB+MHgwMDAyOworCWEtPndyaXRlX2Jjcihpb2FkZHIsIDMyLCB4KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXBjbmV0MzJfb3BlbihkZXYpOwogCX0gZWxzZSB7Ci0JICAgIHBhY2tldCA9IHNrYi0+ZGF0YTsKLQkgICAgc2tiX3B1dChza2IsIHNpemUpOwkJLyogY3JlYXRlIHNwYWNlIGZvciBkYXRhICovCi0JICAgIGxwLT50eF9za2J1ZmZbeF0gPSBza2I7Ci0JICAgIGxwLT50eF9yaW5nW3hdLmxlbmd0aCA9IGxlMTZfdG9fY3B1KC1za2ItPmxlbik7Ci0JICAgIGxwLT50eF9yaW5nW3hdLm1pc2MgPSAwOwotCi0gICAgICAgICAgICAvKiBwdXQgREEgYW5kIFNBIGludG8gdGhlIHNrYiAqLwotCSAgICBmb3IgKGk9MDsgaTw2OyBpKyspCi0JCSpwYWNrZXQrKyA9IGRldi0+ZGV2X2FkZHJbaV07Ci0JICAgIGZvciAoaT0wOyBpPDY7IGkrKykKLQkJKnBhY2tldCsrID0gZGV2LT5kZXZfYWRkcltpXTsKLQkgICAgLyogdHlwZSAqLwotCSAgICAqcGFja2V0KysgPSAweDA4OwotCSAgICAqcGFja2V0KysgPSAweDA2OwotCSAgICAvKiBwYWNrZXQgbnVtYmVyICovCi0JICAgICpwYWNrZXQrKyA9IHg7Ci0JICAgIC8qIGZpbGwgcGFja2V0IHdpdGggZGF0YSAqLwotCSAgICBmb3IgKGk9MDsgaTxkYXRhX2xlbjsgaSsrKQotCQkqcGFja2V0KysgPSBpOwotCi0JICAgIGxwLT50eF9kbWFfYWRkclt4XSA9IHBjaV9tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBza2ItPmRhdGEsCi0JCSAgICBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JICAgIGxwLT50eF9yaW5nW3hdLmJhc2UgPSAodTMyKWxlMzJfdG9fY3B1KGxwLT50eF9kbWFfYWRkclt4XSk7Ci0JICAgIHdtYigpOyAvKiBNYWtlIHN1cmUgb3duZXIgY2hhbmdlcyBhZnRlciBhbGwgb3RoZXJzIGFyZSB2aXNpYmxlICovCi0JICAgIGxwLT50eF9yaW5nW3hdLnN0YXR1cyA9IGxlMTZfdG9fY3B1KHN0YXR1cyk7CisJCWxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDIwLCA0KTsJLyogcmV0dXJuIHRvIDE2Yml0IG1vZGUgKi8KIAl9Ci0gICAgfQogCi0gICAgeCA9IGEtPnJlYWRfYmNyKGlvYWRkciwgMzIpOwkvKiBzZXQgaW50ZXJuYWwgbG9vcGJhY2sgaW4gQlNSMzIgKi8KLSAgICB4ID0geCB8IDB4MDAwMjsKLSAgICBhLT53cml0ZV9iY3IoaW9hZGRyLCAzMiwgeCk7Ci0KLSAgICBscC0+YS53cml0ZV9jc3IgKGlvYWRkciwgMTUsIDB4MDA0NCk7CS8qIHNldCBpbnQgbG9vcGJhY2sgaW4gQ1NSMTUgKi8KLQotICAgIHRlc3RzdGF0dXMgPSBsZTE2X3RvX2NwdSgweDgwMDApOwotICAgIGxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIDB4MDAwMik7CQkvKiBTZXQgU1RSVCBiaXQgKi8KLQotICAgIC8qIENoZWNrIHN0YXR1cyBvZiBkZXNjcmlwdG9ycyAqLwotICAgIGZvciAoeD0wOyB4PG51bWJ1ZmZzOyB4KyspIHsKLQl0aWNrcyA9IDA7Ci0Jcm1iKCk7Ci0Jd2hpbGUgKChscC0+cnhfcmluZ1t4XS5zdGF0dXMgJiB0ZXN0c3RhdHVzKSAmJiAodGlja3MgPCAyMDApKSB7Ci0JICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JICAgIG1kZWxheSgxKTsKLQkgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JICAgIHJtYigpOwotCSAgICB0aWNrcysrOwotCX0KLQlpZiAodGlja3MgPT0gMjAwKSB7Ci0JICAgIGlmIChuZXRpZl9tc2dfaHcobHApKQotCQlwcmludGsoIiVzOiBEZXNjICVkIGZhaWxlZCB0byByZXNldCFcbiIsZGV2LT5uYW1lLHgpOwotCSAgICBicmVhazsKLQl9Ci0gICAgfQotCi0gICAgbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgMCwgMHgwMDA0KTsJCS8qIFNldCBTVE9QIGJpdCAqLwotICAgIHdtYigpOwotICAgIGlmIChuZXRpZl9tc2dfaHcobHApICYmIG5ldGlmX21zZ19wa3RkYXRhKGxwKSkgewotCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggbG9vcGJhY2sgcGFja2V0czpcbiIsIGRldi0+bmFtZSk7Ci0KLQlmb3IgKHg9MDsgeDxudW1idWZmczsgeCsrKSB7Ci0JICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogUGFja2V0ICVkOlxuIiwgZGV2LT5uYW1lLCB4KTsKLQkgICAgc2tiID0gbHAtPnJ4X3NrYnVmZlt4XTsKLQkgICAgZm9yIChpPTA7IGk8c2l6ZTsgaSsrKSB7Ci0JCXByaW50aygiJTAyeCAiLCAqKHNrYi0+ZGF0YStpKSk7Ci0JICAgIH0KLQkgICAgcHJpbnRrKCJcbiIpOwotCX0KLSAgICB9Ci0KLSAgICB4ID0gMDsKLSAgICByYyA9IDA7Ci0gICAgd2hpbGUgKHg8bnVtYnVmZnMgJiYgIXJjKSB7Ci0Jc2tiID0gbHAtPnJ4X3NrYnVmZlt4XTsKLQlwYWNrZXQgPSBscC0+dHhfc2tidWZmW3hdLT5kYXRhOwotCWZvciAoaT0wOyBpPHNpemU7IGkrKykgewotCSAgICBpZiAoKihza2ItPmRhdGEraSkgIT0gcGFja2V0W2ldKSB7Ci0JCWlmIChuZXRpZl9tc2dfaHcobHApKQotCQkgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBFcnJvciBpbiBjb21wYXJlISAlMnggLSAlMDJ4ICUwMnhcbiIsCi0JCQkgICAgZGV2LT5uYW1lLCBpLCAqKHNrYi0+ZGF0YStpKSwgcGFja2V0W2ldKTsKLQkJcmMgPSAxOwotCQlicmVhazsKLQkgICAgfQotCX0KLQl4Kys7Ci0gICAgfQotICAgIGlmICghcmMpIHsKLQkqZGF0YTEgPSAwOwotICAgIH0KLQotY2xlYW5fdXA6Ci0gICAgcGNuZXQzMl9wdXJnZV90eF9yaW5nKGRldik7Ci0gICAgeCA9IGEtPnJlYWRfY3NyKGlvYWRkciwgMTUpICYgMHhGRkZGOwotICAgIGEtPndyaXRlX2Nzcihpb2FkZHIsIDE1LCAoeCAmIH4weDAwNDQpKTsJLyogcmVzZXQgYml0cyA2IGFuZCAyICovCi0KLSAgICB4ID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAzMik7CQkvKiByZXNldCBpbnRlcm5hbCBsb29wYmFjayAqLwotICAgIHggPSB4ICYgfjB4MDAwMjsKLSAgICBhLT53cml0ZV9iY3IoaW9hZGRyLCAzMiwgeCk7Ci0KLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCi0gICAgaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCXBjbmV0MzJfb3BlbihkZXYpOwotICAgIH0gZWxzZSB7Ci0JbHAtPmEud3JpdGVfYmNyIChpb2FkZHIsIDIwLCA0KTsJLyogcmV0dXJuIHRvIDE2Yml0IG1vZGUgKi8KLSAgICB9Ci0KLSAgICByZXR1cm4ocmMpOwotfSAvKiBlbmQgcGNuZXQzMl9sb29wYmFja190ZXN0ICAqLworCXJldHVybiAocmMpOworfQkJCQkvKiBlbmQgcGNuZXQzMl9sb29wYmFja190ZXN0ICAqLwogCiBzdGF0aWMgdm9pZCBwY25ldDMyX2xlZF9ibGlua19jYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIHN0cnVjdCBwY25ldDMyX2FjY2VzcyAqYSA9ICZscC0+YTsKLSAgICB1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIGludCBpOworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCBwY25ldDMyX2FjY2VzcyAqYSA9ICZscC0+YTsKKwl1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0gICAgZm9yIChpPTQ7IGk8ODsgaSsrKSB7Ci0JYS0+d3JpdGVfYmNyKGlvYWRkciwgaSwgYS0+cmVhZF9iY3IoaW9hZGRyLCBpKSBeIDB4NDAwMCk7Ci0gICAgfQotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gNDsgaSA8IDg7IGkrKykgeworCQlhLT53cml0ZV9iY3IoaW9hZGRyLCBpLCBhLT5yZWFkX2Jjcihpb2FkZHIsIGkpIF4gMHg0MDAwKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotICAgIG1vZF90aW1lcigmbHAtPmJsaW5rX3RpbWVyLCBQQ05FVDMyX0JMSU5LX1RJTUVPVVQpOworCW1vZF90aW1lcigmbHAtPmJsaW5rX3RpbWVyLCBQQ05FVDMyX0JMSU5LX1RJTUVPVVQpOwogfQogCiBzdGF0aWMgaW50IHBjbmV0MzJfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9hY2Nlc3MgKmEgPSAmbHAtPmE7Ci0gICAgdWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICBpbnQgaSwgcmVnc1s0XTsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgcGNuZXQzMl9hY2Nlc3MgKmEgPSAmbHAtPmE7CisJdWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgcmVnc1s0XTsKIAotICAgIGlmICghbHAtPmJsaW5rX3RpbWVyLmZ1bmN0aW9uKSB7Ci0JaW5pdF90aW1lcigmbHAtPmJsaW5rX3RpbWVyKTsKLQlscC0+YmxpbmtfdGltZXIuZnVuY3Rpb24gPSAodm9pZCAqKSBwY25ldDMyX2xlZF9ibGlua19jYWxsYmFjazsKLQlscC0+YmxpbmtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7Ci0gICAgfQorCWlmICghbHAtPmJsaW5rX3RpbWVyLmZ1bmN0aW9uKSB7CisJCWluaXRfdGltZXIoJmxwLT5ibGlua190aW1lcik7CisJCWxwLT5ibGlua190aW1lci5mdW5jdGlvbiA9ICh2b2lkICopcGNuZXQzMl9sZWRfYmxpbmtfY2FsbGJhY2s7CisJCWxwLT5ibGlua190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCX0KIAotICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGJjcnMgKi8KLSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLSAgICBmb3IgKGk9NDsgaTw4OyBpKyspIHsKLQlyZWdzW2ktNF0gPSBhLT5yZWFkX2Jjcihpb2FkZHIsIGkpOwotICAgIH0KLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCS8qIFNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGJjcnMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKSB7CisJCXJlZ3NbaSAtIDRdID0gYS0+cmVhZF9iY3IoaW9hZGRyLCBpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotICAgIG1vZF90aW1lcigmbHAtPmJsaW5rX3RpbWVyLCBqaWZmaWVzKTsKLSAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCW1vZF90aW1lcigmbHAtPmJsaW5rX3RpbWVyLCBqaWZmaWVzKTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0gICAgaWYgKCghZGF0YSkgfHwgKGRhdGEgPiAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKSkpCi0gICAgZGF0YSA9ICh1MzIpKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopOworCWlmICgoIWRhdGEpIHx8IChkYXRhID4gKHUzMikgKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopKSkKKwkJZGF0YSA9ICh1MzIpIChNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKTsKIAotICAgIG1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKLSAgICBkZWxfdGltZXJfc3luYygmbHAtPmJsaW5rX3RpbWVyKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZShkYXRhICogMTAwMCk7CisJZGVsX3RpbWVyX3N5bmMoJmxwLT5ibGlua190aW1lcik7CiAKLSAgICAvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgYmNycyAqLwotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotICAgIGZvciAoaT00OyBpPDg7IGkrKykgewotCWEtPndyaXRlX2Jjcihpb2FkZHIsIGksIHJlZ3NbaS00XSk7Ci0gICAgfQotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGJjcnMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKSB7CisJCWEtPndyaXRlX2Jjcihpb2FkZHIsIGksIHJlZ3NbaSAtIDRdKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCisjZGVmaW5lIFBDTkVUMzJfUkVHU19QRVJfUEhZCTMyCisjZGVmaW5lIFBDTkVUMzJfTUFYX1BIWVMJMzIKIHN0YXRpYyBpbnQgcGNuZXQzMl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByZXR1cm4oUENORVQzMl9OVU1fUkVHUyAqIHNpemVvZih1MTYpKTsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlpbnQgaiA9IGxwLT5waHljb3VudCAqIFBDTkVUMzJfUkVHU19QRVJfUEhZOworCisJcmV0dXJuICgoUENORVQzMl9OVU1fUkVHUyArIGopICogc2l6ZW9mKHUxNikpOwogfQogCiBzdGF0aWMgdm9pZCBwY25ldDMyX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsCi0Jdm9pZCAqcHRyKQorCQkJICAgICB2b2lkICpwdHIpCiB7Ci0gICAgaW50IGksIGNzcjA7Ci0gICAgdTE2ICpidWZmID0gcHRyOwotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIHN0cnVjdCBwY25ldDMyX2FjY2VzcyAqYSA9ICZscC0+YTsKLSAgICB1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICBpbnQgdGlja3M7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgY3NyMDsKKwl1MTYgKmJ1ZmYgPSBwdHI7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJc3RydWN0IHBjbmV0MzJfYWNjZXNzICphID0gJmxwLT5hOworCXVsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCWludCB0aWNrczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLSAgICBjc3IwID0gYS0+cmVhZF9jc3IoaW9hZGRyLCAwKTsKLSAgICBpZiAoIShjc3IwICYgMHgwMDA0KSkgewkvKiBJZiBub3Qgc3RvcHBlZCAqLwotCS8qIHNldCBTVVNQRU5EIChTUE5EKSAtIENTUjUgYml0IDAgKi8KLQlhLT53cml0ZV9jc3IoaW9hZGRyLCA1LCAweDAwMDEpOworCWNzcjAgPSBhLT5yZWFkX2Nzcihpb2FkZHIsIDApOworCWlmICghKGNzcjAgJiAweDAwMDQpKSB7CS8qIElmIG5vdCBzdG9wcGVkICovCisJCS8qIHNldCBTVVNQRU5EIChTUE5EKSAtIENTUjUgYml0IDAgKi8KKwkJYS0+d3JpdGVfY3NyKGlvYWRkciwgNSwgMHgwMDAxKTsKIAotCS8qIHBvbGwgd2FpdGluZyBmb3IgYml0IHRvIGJlIHNldCAqLwotCXRpY2tzID0gMDsKLQl3aGlsZSAoIShhLT5yZWFkX2Nzcihpb2FkZHIsIDUpICYgMHgwMDAxKSkgewotCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCSAgICBtZGVsYXkoMSk7Ci0JICAgIHNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCSAgICB0aWNrcysrOwotCSAgICBpZiAodGlja3MgPiAyMDApIHsKLQkJaWYgKG5ldGlmX21zZ19odyhscCkpCi0JCSAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IEVycm9yIGdldHRpbmcgaW50byBzdXNwZW5kIVxuIiwKLQkJCSAgICBkZXYtPm5hbWUpOwotCQlicmVhazsKLQkgICAgfQorCQkvKiBwb2xsIHdhaXRpbmcgZm9yIGJpdCB0byBiZSBzZXQgKi8KKwkJdGlja3MgPSAwOworCQl3aGlsZSAoIShhLT5yZWFkX2Nzcihpb2FkZHIsIDUpICYgMHgwMDAxKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJCW1kZWxheSgxKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCQkJdGlja3MrKzsKKwkJCWlmICh0aWNrcyA+IDIwMCkgeworCQkJCWlmIChuZXRpZl9tc2dfaHcobHApKQorCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgIiVzOiBFcnJvciBnZXR0aW5nIGludG8gc3VzcGVuZCFcbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CiAJfQotICAgIH0KIAotICAgIC8qIHJlYWQgYWRkcmVzcyBQUk9NICovCi0gICAgZm9yIChpPTA7IGk8MTY7IGkgKz0gMikKLQkqYnVmZisrID0gaW53KGlvYWRkciArIGkpOworCS8qIHJlYWQgYWRkcmVzcyBQUk9NICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDIpCisJCSpidWZmKysgPSBpbncoaW9hZGRyICsgaSk7CiAKLSAgICAvKiByZWFkIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMgKi8KLSAgICBmb3IgKGk9MDsgaTw5MDsgaSsrKSB7Ci0JKmJ1ZmYrKyA9IGEtPnJlYWRfY3NyKGlvYWRkciwgaSk7Ci0gICAgfQotCi0gICAgKmJ1ZmYrKyA9IGEtPnJlYWRfY3NyKGlvYWRkciwgMTEyKTsKLSAgICAqYnVmZisrID0gYS0+cmVhZF9jc3IoaW9hZGRyLCAxMTQpOwotCi0gICAgLyogcmVhZCBidXMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KLSAgICBmb3IgKGk9MDsgaTwzMDsgaSsrKSB7Ci0JKmJ1ZmYrKyA9IGEtPnJlYWRfYmNyKGlvYWRkciwgaSk7Ci0gICAgfQotICAgICpidWZmKysgPSAwOwkvKiBza2lwIGJjcjMwIHNvIGFzIG5vdCB0byBoYW5nIDc5Qzk3NiAqLwotICAgIGZvciAoaT0zMTsgaTwzNjsgaSsrKSB7Ci0JKmJ1ZmYrKyA9IGEtPnJlYWRfYmNyKGlvYWRkciwgaSk7Ci0gICAgfQotCi0gICAgLyogcmVhZCBtaWkgcGh5IHJlZ2lzdGVycyAqLwotICAgIGlmIChscC0+bWlpKSB7Ci0JZm9yIChpPTA7IGk8MzI7IGkrKykgewotCSAgICBscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMywgKChscC0+bWlpX2lmLnBoeV9pZCkgPDwgNSkgfCBpKTsKLQkgICAgKmJ1ZmYrKyA9IGxwLT5hLnJlYWRfYmNyKGlvYWRkciwgMzQpOworCS8qIHJlYWQgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCA5MDsgaSsrKSB7CisJCSpidWZmKysgPSBhLT5yZWFkX2Nzcihpb2FkZHIsIGkpOwogCX0KLSAgICB9CiAKLSAgICBpZiAoIShjc3IwICYgMHgwMDA0KSkgewkvKiBJZiBub3Qgc3RvcHBlZCAqLwotCS8qIGNsZWFyIFNVU1BFTkQgKFNQTkQpIC0gQ1NSNSBiaXQgMCAqLwotCWEtPndyaXRlX2Nzcihpb2FkZHIsIDUsIDB4MDAwMCk7Ci0gICAgfQorCSpidWZmKysgPSBhLT5yZWFkX2Nzcihpb2FkZHIsIDExMik7CisJKmJ1ZmYrKyA9IGEtPnJlYWRfY3NyKGlvYWRkciwgMTE0KTsKIAotICAgIGkgPSBidWZmIC0gKHUxNiAqKXB0cjsKLSAgICBmb3IgKDsgaSA8IFBDTkVUMzJfTlVNX1JFR1M7IGkrKykKLQkqYnVmZisrID0gMDsKKwkvKiByZWFkIGJ1cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKSB7CisJCSpidWZmKysgPSBhLT5yZWFkX2Jjcihpb2FkZHIsIGkpOworCX0KKwkqYnVmZisrID0gMDsJCS8qIHNraXAgYmNyMzAgc28gYXMgbm90IHRvIGhhbmcgNzlDOTc2ICovCisJZm9yIChpID0gMzE7IGkgPCAzNjsgaSsrKSB7CisJCSpidWZmKysgPSBhLT5yZWFkX2Jjcihpb2FkZHIsIGkpOworCX0KIAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJLyogcmVhZCBtaWkgcGh5IHJlZ2lzdGVycyAqLworCWlmIChscC0+bWlpKSB7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgUENORVQzMl9NQVhfUEhZUzsgaisrKSB7CisJCQlpZiAobHAtPnBoeW1hc2sgJiAoMSA8PCBqKSkgeworCQkJCWZvciAoaSA9IDA7IGkgPCBQQ05FVDMyX1JFR1NfUEVSX1BIWTsgaSsrKSB7CisJCQkJCWxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDMzLAorCQkJCQkJCShqIDw8IDUpIHwgaSk7CisJCQkJCSpidWZmKysgPSBscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDM0KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIShjc3IwICYgMHgwMDA0KSkgewkvKiBJZiBub3Qgc3RvcHBlZCAqLworCQkvKiBjbGVhciBTVVNQRU5EIChTUE5EKSAtIENTUjUgYml0IDAgKi8KKwkJYS0+d3JpdGVfY3NyKGlvYWRkciwgNSwgMHgwMDAwKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHBjbmV0MzJfZXRodG9vbF9vcHMgPSB7Ci0gICAgLmdldF9zZXR0aW5ncwk9IHBjbmV0MzJfZ2V0X3NldHRpbmdzLAotICAgIC5zZXRfc2V0dGluZ3MJPSBwY25ldDMyX3NldF9zZXR0aW5ncywKLSAgICAuZ2V0X2RydmluZm8JPSBwY25ldDMyX2dldF9kcnZpbmZvLAotICAgIC5nZXRfbXNnbGV2ZWwJPSBwY25ldDMyX2dldF9tc2dsZXZlbCwKLSAgICAuc2V0X21zZ2xldmVsCT0gcGNuZXQzMl9zZXRfbXNnbGV2ZWwsCi0gICAgLm53YXlfcmVzZXQJCT0gcGNuZXQzMl9ud2F5X3Jlc2V0LAotICAgIC5nZXRfbGluawkJPSBwY25ldDMyX2dldF9saW5rLAotICAgIC5nZXRfcmluZ3BhcmFtCT0gcGNuZXQzMl9nZXRfcmluZ3BhcmFtLAotICAgIC5zZXRfcmluZ3BhcmFtCT0gcGNuZXQzMl9zZXRfcmluZ3BhcmFtLAotICAgIC5nZXRfdHhfY3N1bQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0gICAgLmdldF9zZwkJPSBldGh0b29sX29wX2dldF9zZywKLSAgICAuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCi0gICAgLmdldF9zdHJpbmdzCT0gcGNuZXQzMl9nZXRfc3RyaW5ncywKLSAgICAuc2VsZl90ZXN0X2NvdW50CT0gcGNuZXQzMl9zZWxmX3Rlc3RfY291bnQsCi0gICAgLnNlbGZfdGVzdAkJPSBwY25ldDMyX2V0aHRvb2xfdGVzdCwKLSAgICAucGh5c19pZAkJPSBwY25ldDMyX3BoeXNfaWQsCi0gICAgLmdldF9yZWdzX2xlbgk9IHBjbmV0MzJfZ2V0X3JlZ3NfbGVuLAotICAgIC5nZXRfcmVncwkJPSBwY25ldDMyX2dldF9yZWdzLAotICAgIC5nZXRfcGVybV9hZGRyCT0gZXRodG9vbF9vcF9nZXRfcGVybV9hZGRyLAorCS5nZXRfc2V0dGluZ3MJCT0gcGNuZXQzMl9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwkJPSBwY25ldDMyX3NldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8JCT0gcGNuZXQzMl9nZXRfZHJ2aW5mbywKKwkuZ2V0X21zZ2xldmVsCQk9IHBjbmV0MzJfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJCT0gcGNuZXQzMl9zZXRfbXNnbGV2ZWwsCisJLm53YXlfcmVzZXQJCT0gcGNuZXQzMl9ud2F5X3Jlc2V0LAorCS5nZXRfbGluawkJPSBwY25ldDMyX2dldF9saW5rLAorCS5nZXRfcmluZ3BhcmFtCQk9IHBjbmV0MzJfZ2V0X3JpbmdwYXJhbSwKKwkuc2V0X3JpbmdwYXJhbQkJPSBwY25ldDMyX3NldF9yaW5ncGFyYW0sCisJLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCisJLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAorCS5nZXRfc3RyaW5ncwkJPSBwY25ldDMyX2dldF9zdHJpbmdzLAorCS5zZWxmX3Rlc3RfY291bnQJPSBwY25ldDMyX3NlbGZfdGVzdF9jb3VudCwKKwkuc2VsZl90ZXN0CQk9IHBjbmV0MzJfZXRodG9vbF90ZXN0LAorCS5waHlzX2lkCQk9IHBjbmV0MzJfcGh5c19pZCwKKwkuZ2V0X3JlZ3NfbGVuCQk9IHBjbmV0MzJfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncwkJPSBwY25ldDMyX2dldF9yZWdzLAorCS5nZXRfcGVybV9hZGRyCQk9IGV0aHRvb2xfb3BfZ2V0X3Blcm1fYWRkciwKIH07CiAKIC8qIG9ubHkgcHJvYmVzIGZvciBub24tUENJIGRldmljZXMsIHRoZSByZXN0IGFyZSBoYW5kbGVkIGJ5CiAgKiBwY2lfcmVnaXN0ZXJfZHJpdmVyIHZpYSBwY25ldDMyX3Byb2JlX3BjaSAqLwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQKLXBjbmV0MzJfcHJvYmVfdmxidXModm9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY25ldDMyX3Byb2JlX3ZsYnVzKHZvaWQpCiB7Ci0gICAgdW5zaWduZWQgaW50ICpwb3J0LCBpb2FkZHI7CisJdW5zaWduZWQgaW50ICpwb3J0LCBpb2FkZHI7CiAKLSAgICAvKiBzZWFyY2ggZm9yIFBDbmV0MzIgVkxCIGNhcmRzIGF0IGtub3duIGFkZHJlc3NlcyAqLwotICAgIGZvciAocG9ydCA9IHBjbmV0MzJfcG9ydGxpc3Q7IChpb2FkZHIgPSAqcG9ydCk7IHBvcnQrKykgewotCWlmIChyZXF1ZXN0X3JlZ2lvbihpb2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSwgInBjbmV0MzJfcHJvYmVfdmxidXMiKSkgewotCSAgICAvKiBjaGVjayBpZiB0aGVyZSBpcyByZWFsbHkgYSBwY25ldCBjaGlwIG9uIHRoYXQgaW9hZGRyICovCi0JICAgIGlmICgoaW5iKGlvYWRkciArIDE0KSA9PSAweDU3KSAmJiAoaW5iKGlvYWRkciArIDE1KSA9PSAweDU3KSkgewotCQlwY25ldDMyX3Byb2JlMShpb2FkZHIsIDAsIE5VTEwpOwotCSAgICB9IGVsc2UgewotCQlyZWxlYXNlX3JlZ2lvbihpb2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSk7Ci0JICAgIH0KKwkvKiBzZWFyY2ggZm9yIFBDbmV0MzIgVkxCIGNhcmRzIGF0IGtub3duIGFkZHJlc3NlcyAqLworCWZvciAocG9ydCA9IHBjbmV0MzJfcG9ydGxpc3Q7IChpb2FkZHIgPSAqcG9ydCk7IHBvcnQrKykgeworCQlpZiAocmVxdWVzdF9yZWdpb24KKwkJICAgIChpb2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSwgInBjbmV0MzJfcHJvYmVfdmxidXMiKSkgeworCQkJLyogY2hlY2sgaWYgdGhlcmUgaXMgcmVhbGx5IGEgcGNuZXQgY2hpcCBvbiB0aGF0IGlvYWRkciAqLworCQkJaWYgKChpbmIoaW9hZGRyICsgMTQpID09IDB4NTcpCisJCQkgICAgJiYgKGluYihpb2FkZHIgKyAxNSkgPT0gMHg1NykpIHsKKwkJCQlwY25ldDMyX3Byb2JlMShpb2FkZHIsIDAsIE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlyZWxlYXNlX3JlZ2lvbihpb2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSk7CisJCQl9CisJCX0KIAl9Ci0gICAgfQogfQogCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0CiBwY25ldDMyX3Byb2JlX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLSAgICB1bnNpZ25lZCBsb25nIGlvYWRkcjsKLSAgICBpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyOworCWludCBlcnI7CiAKLSAgICBlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLSAgICBpZiAoZXJyIDwgMCkgewotCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCSAgICBwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gZW5hYmxlIGRldmljZSAtLSBlcnI9JWRcbiIsIGVycik7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAgICAgImZhaWxlZCB0byBlbmFibGUgZGV2aWNlIC0tIGVycj0lZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlpb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJaWYgKCFpb2FkZHIpIHsKKwkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAgICAgImNhcmQgaGFzIG5vIFBDSSBJTyByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChwZGV2LCBQQ05FVDMyX0RNQV9NQVNLKSkgeworCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSAgICAgICAiYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgMzJiaXQgUENJIGJ1c21hc3RlciBETUFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKHJlcXVlc3RfcmVnaW9uKGlvYWRkciwgUENORVQzMl9UT1RBTF9TSVpFLCAicGNuZXQzMl9wcm9iZV9wY2kiKSA9PQorCSAgICBOVUxMKSB7CisJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgICAgICJpbyBhZGRyZXNzIHJhbmdlIGFscmVhZHkgYWxsb2NhdGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwllcnIgPSBwY25ldDMyX3Byb2JlMShpb2FkZHIsIDEsIHBkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwl9CiAJcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLSAgICBpb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApOwotICAgIGlmICghaW9hZGRyKSB7Ci0JaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JICAgIHByaW50ayAoS0VSTl9FUlIgUEZYICJjYXJkIGhhcyBubyBQQ0kgSU8gcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQotCi0gICAgaWYgKCFwY2lfZG1hX3N1cHBvcnRlZChwZGV2LCBQQ05FVDMyX0RNQV9NQVNLKSkgewotCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCSAgICBwcmludGsoS0VSTl9FUlIgUEZYICJhcmNoaXRlY3R1cmUgZG9lcyBub3Qgc3VwcG9ydCAzMmJpdCBQQ0kgYnVzbWFzdGVyIERNQVxuIik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQotICAgIGlmIChyZXF1ZXN0X3JlZ2lvbihpb2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSwgInBjbmV0MzJfcHJvYmVfcGNpIikgPT0gTlVMTCkgewotCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCSAgICBwcmludGsoS0VSTl9FUlIgUEZYICJpbyBhZGRyZXNzIHJhbmdlIGFscmVhZHkgYWxsb2NhdGVkXG4iKTsKLQlyZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIGVyciA9ICBwY25ldDMyX3Byb2JlMShpb2FkZHIsIDEsIHBkZXYpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotICAgIH0KLSAgICByZXR1cm4gZXJyOwogfQogCi0KIC8qIHBjbmV0MzJfcHJvYmUxCiAgKiAgQ2FsbGVkIGZyb20gYm90aCBwY25ldDMyX3Byb2JlX3ZsYnVzIGFuZCBwY25ldF9wcm9iZV9wY2kuCiAgKiAgcGRldiB3aWxsIGJlIE5VTEwgd2hlbiBjYWxsZWQgZnJvbSBwY25ldDMyX3Byb2JlX3ZsYnVzLgpAQCAtMTEwNyw2MzAgKzEwMjgsNzY0IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogcGNuZXQzMl9wcm9iZTEodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBzaGFyZWQsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwOwotICAgIGRtYV9hZGRyX3QgbHBfZG1hX2FkZHI7Ci0gICAgaW50IGksIG1lZGlhOwotICAgIGludCBmZHgsIG1paSwgZnNldCwgZHhzdWZsbzsKLSAgICBpbnQgY2hpcF92ZXJzaW9uOwotICAgIGNoYXIgKmNoaXBuYW1lOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0gICAgc3RydWN0IHBjbmV0MzJfYWNjZXNzICphID0gTlVMTDsKLSAgICB1OCBwcm9tYWRkcls2XTsKLSAgICBpbnQgcmV0ID0gLUVOT0RFVjsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscDsKKwlkbWFfYWRkcl90IGxwX2RtYV9hZGRyOworCWludCBpLCBtZWRpYTsKKwlpbnQgZmR4LCBtaWksIGZzZXQsIGR4c3VmbG87CisJaW50IGNoaXBfdmVyc2lvbjsKKwljaGFyICpjaGlwbmFtZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBwY25ldDMyX2FjY2VzcyAqYSA9IE5VTEw7CisJdTggcHJvbWFkZHJbNl07CisJaW50IHJldCA9IC1FTk9ERVY7CiAKLSAgICAvKiByZXNldCB0aGUgY2hpcCAqLwotICAgIHBjbmV0MzJfd2lvX3Jlc2V0KGlvYWRkcik7CisJLyogcmVzZXQgdGhlIGNoaXAgKi8KKwlwY25ldDMyX3dpb19yZXNldChpb2FkZHIpOwogCi0gICAgLyogTk9URTogMTYtYml0IGNoZWNrIGlzIGZpcnN0LCBvdGhlcndpc2Ugc29tZSBvbGRlciBQQ25ldCBjaGlwcyBmYWlsICovCi0gICAgaWYgKHBjbmV0MzJfd2lvX3JlYWRfY3NyKGlvYWRkciwgMCkgPT0gNCAmJiBwY25ldDMyX3dpb19jaGVjayhpb2FkZHIpKSB7Ci0JYSA9ICZwY25ldDMyX3dpbzsKLSAgICB9IGVsc2UgewotCXBjbmV0MzJfZHdpb19yZXNldChpb2FkZHIpOwotCWlmIChwY25ldDMyX2R3aW9fcmVhZF9jc3IoaW9hZGRyLCAwKSA9PSA0ICYmIHBjbmV0MzJfZHdpb19jaGVjayhpb2FkZHIpKSB7Ci0JICAgIGEgPSAmcGNuZXQzMl9kd2lvOwotCX0gZWxzZQotCSAgICBnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKLSAgICB9Ci0KLSAgICBjaGlwX3ZlcnNpb24gPSBhLT5yZWFkX2Nzcihpb2FkZHIsIDg4KSB8IChhLT5yZWFkX2Nzcihpb2FkZHIsODkpIDw8IDE2KTsKLSAgICBpZiAoKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpICYmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0hXKSkKLQlwcmludGsoS0VSTl9JTkZPICIgIFBDbmV0IGNoaXAgdmVyc2lvbiBpcyAlI3guXG4iLCBjaGlwX3ZlcnNpb24pOwotICAgIGlmICgoY2hpcF92ZXJzaW9uICYgMHhmZmYpICE9IDB4MDAzKSB7Ci0JaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JICAgIHByaW50ayhLRVJOX0lORk8gUEZYICJVbnN1cHBvcnRlZCBjaGlwIHZlcnNpb24uXG4iKTsKLQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKLSAgICB9Ci0KLSAgICAvKiBpbml0aWFsaXplIHZhcmlhYmxlcyAqLwotICAgIGZkeCA9IG1paSA9IGZzZXQgPSBkeHN1ZmxvID0gMDsKLSAgICBjaGlwX3ZlcnNpb24gPSAoY2hpcF92ZXJzaW9uID4+IDEyKSAmIDB4ZmZmZjsKLQotICAgIHN3aXRjaCAoY2hpcF92ZXJzaW9uKSB7Ci0gICAgY2FzZSAweDI0MjA6Ci0JY2hpcG5hbWUgPSAiUENuZXQvUENJIDc5Qzk3MCI7IC8qIFBDSSAqLwotCWJyZWFrOwotICAgIGNhc2UgMHgyNDMwOgotCWlmIChzaGFyZWQpCi0JICAgIGNoaXBuYW1lID0gIlBDbmV0L1BDSSA3OUM5NzAiOyAvKiA5NzAgZ2l2ZXMgdGhlIHdyb25nIGNoaXAgaWQgYmFjayAqLwotCWVsc2UKLQkgICAgY2hpcG5hbWUgPSAiUENuZXQvMzIgNzlDOTY1IjsgLyogNDg2L1ZMIGJ1cyAqLwotCWJyZWFrOwotICAgIGNhc2UgMHgyNjIxOgotCWNoaXBuYW1lID0gIlBDbmV0L1BDSSBJSSA3OUM5NzBBIjsgLyogUENJICovCi0JZmR4ID0gMTsKLQlicmVhazsKLSAgICBjYXNlIDB4MjYyMzoKLQljaGlwbmFtZSA9ICJQQ25ldC9GQVNUIDc5Qzk3MSI7IC8qIFBDSSAqLwotCWZkeCA9IDE7IG1paSA9IDE7IGZzZXQgPSAxOwotCWJyZWFrOwotICAgIGNhc2UgMHgyNjI0OgotCWNoaXBuYW1lID0gIlBDbmV0L0ZBU1QrIDc5Qzk3MiI7IC8qIFBDSSAqLwotCWZkeCA9IDE7IG1paSA9IDE7IGZzZXQgPSAxOwotCWJyZWFrOwotICAgIGNhc2UgMHgyNjI1OgotCWNoaXBuYW1lID0gIlBDbmV0L0ZBU1QgSUlJIDc5Qzk3MyI7IC8qIFBDSSAqLwotCWZkeCA9IDE7IG1paSA9IDE7Ci0JYnJlYWs7Ci0gICAgY2FzZSAweDI2MjY6Ci0JY2hpcG5hbWUgPSAiUENuZXQvSG9tZSA3OUM5NzgiOyAvKiBQQ0kgKi8KLQlmZHggPSAxOwotCS8qCi0JICogVGhpcyBpcyBiYXNlZCBvbiBzcGVjcyBwdWJsaXNoZWQgYXQgd3d3LmFtZC5jb20uICBUaGlzIHNlY3Rpb24KLQkgKiBhc3N1bWVzIHRoYXQgYSBjYXJkIHdpdGggYSA3OUM5Nzggd2FudHMgdG8gZ28gaW50byBzdGFuZGFyZAotCSAqIGV0aGVybmV0IG1vZGUuICBUaGUgNzlDOTc4IGNhbiBhbHNvIGdvIGludG8gMU1iIEhvbWVQTkEgbW9kZSwKLQkgKiBhbmQgdGhlIG1vZHVsZSBvcHRpb24gaG9tZXBuYT0xIGNhbiBzZWxlY3QgdGhpcyBpbnN0ZWFkLgotCSAqLwotCW1lZGlhID0gYS0+cmVhZF9iY3IoaW9hZGRyLCA0OSk7Ci0JbWVkaWEgJj0gfjM7CQkvKiBkZWZhdWx0IHRvIDEwTWIgZXRoZXJuZXQgKi8KLQlpZiAoY2FyZHNfZm91bmQgPCBNQVhfVU5JVFMgJiYgaG9tZXBuYVtjYXJkc19mb3VuZF0pCi0JICAgIG1lZGlhIHw9IDE7IAkvKiBzd2l0Y2ggdG8gaG9tZSB3aXJpbmcgbW9kZSAqLwotCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCSAgICBwcmludGsoS0VSTl9ERUJVRyBQRlggIm1lZGlhIHNldCB0byAlc01iaXQgbW9kZS5cbiIsIAotCQkgICAgKG1lZGlhICYgMSkgPyAiMSIgOiAiMTAiKTsKLQlhLT53cml0ZV9iY3IoaW9hZGRyLCA0OSwgbWVkaWEpOwotCWJyZWFrOwotICAgIGNhc2UgMHgyNjI3OgotCWNoaXBuYW1lID0gIlBDbmV0L0ZBU1QgSUlJIDc5Qzk3NSI7IC8qIFBDSSAqLwotCWZkeCA9IDE7IG1paSA9IDE7Ci0JYnJlYWs7Ci0gICAgY2FzZSAweDI2Mjg6Ci0JY2hpcG5hbWUgPSAiUENuZXQvUFJPIDc5Qzk3NiI7Ci0JZmR4ID0gMTsgbWlpID0gMTsKLQlicmVhazsKLSAgICBkZWZhdWx0OgotCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCSAgICBwcmludGsoS0VSTl9JTkZPIFBGWCAiUENuZXQgdmVyc2lvbiAlI3gsIG5vIFBDbmV0MzIgY2hpcC5cbiIsCi0JCSAgICBjaGlwX3ZlcnNpb24pOwotCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwotICAgIH0KLQotICAgIC8qCi0gICAgICoJT24gc2VsZWN0ZWQgY2hpcHMgdHVybiBvbiB0aGUgQkNSMTg6Tk9VRkxPIGJpdC4gVGhpcyBzdG9wcyB0cmFuc21pdAotICAgICAqCXN0YXJ0aW5nIHVudGlsIHRoZSBwYWNrZXQgaXMgbG9hZGVkLiBTdHJpa2Ugb25lIGZvciByZWxpYWJpbGl0eSwgbG9zZQotICAgICAqCW9uZSBmb3IgbGF0ZW5jeSAtIGFsdGhvdWdoIG9uIFBDSSB0aGlzIGlzbnQgYSBiaWcgbG9zcy4gT2xkZXIgY2hpcHMKLSAgICAgKgloYXZlIEZJRk8ncyBzbWFsbGVyIHRoYW4gYSBwYWNrZXQsIHNvIHlvdSBjYW4ndCBkbyB0aGlzLgotICAgICAqCVR1cm4gb24gQkNSMTg6QnVyc3RSZEVuIGFuZCBCQ1IxODpCdXJzdFdyRW4uCi0gICAgICovCi0KLSAgICBpZiAoZnNldCkgewotCWEtPndyaXRlX2Jjcihpb2FkZHIsIDE4LCAoYS0+cmVhZF9iY3IoaW9hZGRyLCAxOCkgfCAweDA4NjApKTsKLQlhLT53cml0ZV9jc3IoaW9hZGRyLCA4MCwgKGEtPnJlYWRfY3NyKGlvYWRkciwgODApICYgMHgwQzAwKSB8IDB4MGMwMCk7Ci0JZHhzdWZsbyA9IDE7Ci0gICAgfQotCi0gICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoMCk7Ci0gICAgaWYgKCFkZXYpIHsKLQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkgICAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIik7Ci0JcmV0ID0gLUVOT01FTTsKLQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKLSAgICB9Ci0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKLQotICAgIGlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCXByaW50ayhLRVJOX0lORk8gUEZYICIlcyBhdCAlIzNseCwiLCBjaGlwbmFtZSwgaW9hZGRyKTsKLQotICAgIC8qIEluIG1vc3QgY2hpcHMsIGFmdGVyIGEgY2hpcCByZXNldCwgdGhlIGV0aGVybmV0IGFkZHJlc3MgaXMgcmVhZCBmcm9tIHRoZQotICAgICAqIHN0YXRpb24gYWRkcmVzcyBQUk9NIGF0IHRoZSBiYXNlIGFkZHJlc3MgYW5kIHByb2dyYW1tZWQgaW50byB0aGUKLSAgICAgKiAiUGh5c2ljYWwgQWRkcmVzcyBSZWdpc3RlcnMiIENTUjEyLTE0LgotICAgICAqIEFzIGEgcHJlY2F1dGlvbmFyeSBtZWFzdXJlLCB3ZSByZWFkIHRoZSBQUk9NIHZhbHVlcyBhbmQgY29tcGxhaW4gaWYKLSAgICAgKiB0aGV5IGRpc2FncmVlIHdpdGggdGhlIENTUnMuICBFaXRoZXIgd2F5LCB3ZSB1c2UgdGhlIENTUiB2YWx1ZXMsIGFuZAotICAgICAqIGRvdWJsZSBjaGVjayB0aGF0IHRoZXkgYXJlIHZhbGlkLgotICAgICAqLwotICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCXZhbCA9IGEtPnJlYWRfY3NyKGlvYWRkciwgaSsxMikgJiAweDBmZmZmOwotCS8qIFRoZXJlIG1heSBiZSBlbmRpYW5uZXNzIGlzc3VlcyBoZXJlLiAqLwotCWRldi0+ZGV2X2FkZHJbMippXSA9IHZhbCAmIDB4MGZmOwotCWRldi0+ZGV2X2FkZHJbMippKzFdID0gKHZhbCA+PiA4KSAmIDB4MGZmOwotICAgIH0KLQotICAgIC8qIHJlYWQgUFJPTSBhZGRyZXNzIGFuZCBjb21wYXJlIHdpdGggQ1NSIGFkZHJlc3MgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCXByb21hZGRyW2ldID0gaW5iKGlvYWRkciArIGkpOwotCi0gICAgaWYgKG1lbWNtcChwcm9tYWRkciwgZGV2LT5kZXZfYWRkciwgNikKLQl8fCAhaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewotCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKHByb21hZGRyKSkgewotCSAgICBpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkgewotCQlwcmludGsoIiB3YXJuaW5nOiBDU1IgYWRkcmVzcyBpbnZhbGlkLFxuIik7Ci0JCXByaW50ayhLRVJOX0lORk8gIiAgICB1c2luZyBpbnN0ZWFkIFBST00gYWRkcmVzcyBvZiIpOwotCSAgICB9Ci0JICAgIG1lbWNweShkZXYtPmRldl9hZGRyLCBwcm9tYWRkciwgNik7CisJLyogTk9URTogMTYtYml0IGNoZWNrIGlzIGZpcnN0LCBvdGhlcndpc2Ugc29tZSBvbGRlciBQQ25ldCBjaGlwcyBmYWlsICovCisJaWYgKHBjbmV0MzJfd2lvX3JlYWRfY3NyKGlvYWRkciwgMCkgPT0gNCAmJiBwY25ldDMyX3dpb19jaGVjayhpb2FkZHIpKSB7CisJCWEgPSAmcGNuZXQzMl93aW87CisJfSBlbHNlIHsKKwkJcGNuZXQzMl9kd2lvX3Jlc2V0KGlvYWRkcik7CisJCWlmIChwY25ldDMyX2R3aW9fcmVhZF9jc3IoaW9hZGRyLCAwKSA9PSA0CisJCSAgICAmJiBwY25ldDMyX2R3aW9fY2hlY2soaW9hZGRyKSkgeworCQkJYSA9ICZwY25ldDMyX2R3aW87CisJCX0gZWxzZQorCQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQotICAgIH0KLSAgICBtZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCi0gICAgLyogaWYgdGhlIGV0aGVybmV0IGFkZHJlc3MgaXMgbm90IHZhbGlkLCBmb3JjZSB0byAwMDowMDowMDowMDowMDowMCAqLwotICAgIGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPnBlcm1fYWRkcikpCi0JbWVtc2V0KGRldi0+ZGV2X2FkZHIsIDAsIHNpemVvZihkZXYtPmRldl9hZGRyKSk7CisJY2hpcF92ZXJzaW9uID0KKwkgICAgYS0+cmVhZF9jc3IoaW9hZGRyLCA4OCkgfCAoYS0+cmVhZF9jc3IoaW9hZGRyLCA4OSkgPDwgMTYpOworCWlmICgocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkgJiYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfSFcpKQorCQlwcmludGsoS0VSTl9JTkZPICIgIFBDbmV0IGNoaXAgdmVyc2lvbiBpcyAlI3guXG4iLAorCQkgICAgICAgY2hpcF92ZXJzaW9uKTsKKwlpZiAoKGNoaXBfdmVyc2lvbiAmIDB4ZmZmKSAhPSAweDAwMykgeworCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJVbnN1cHBvcnRlZCBjaGlwIHZlcnNpb24uXG4iKTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQogCi0gICAgaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpIHsKKwkvKiBpbml0aWFsaXplIHZhcmlhYmxlcyAqLworCWZkeCA9IG1paSA9IGZzZXQgPSBkeHN1ZmxvID0gMDsKKwljaGlwX3ZlcnNpb24gPSAoY2hpcF92ZXJzaW9uID4+IDEyKSAmIDB4ZmZmZjsKKworCXN3aXRjaCAoY2hpcF92ZXJzaW9uKSB7CisJY2FzZSAweDI0MjA6CisJCWNoaXBuYW1lID0gIlBDbmV0L1BDSSA3OUM5NzAiOwkvKiBQQ0kgKi8KKwkJYnJlYWs7CisJY2FzZSAweDI0MzA6CisJCWlmIChzaGFyZWQpCisJCQljaGlwbmFtZSA9ICJQQ25ldC9QQ0kgNzlDOTcwIjsJLyogOTcwIGdpdmVzIHRoZSB3cm9uZyBjaGlwIGlkIGJhY2sgKi8KKwkJZWxzZQorCQkJY2hpcG5hbWUgPSAiUENuZXQvMzIgNzlDOTY1IjsJLyogNDg2L1ZMIGJ1cyAqLworCQlicmVhazsKKwljYXNlIDB4MjYyMToKKwkJY2hpcG5hbWUgPSAiUENuZXQvUENJIElJIDc5Qzk3MEEiOwkvKiBQQ0kgKi8KKwkJZmR4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSAweDI2MjM6CisJCWNoaXBuYW1lID0gIlBDbmV0L0ZBU1QgNzlDOTcxIjsJLyogUENJICovCisJCWZkeCA9IDE7CisJCW1paSA9IDE7CisJCWZzZXQgPSAxOworCQlicmVhazsKKwljYXNlIDB4MjYyNDoKKwkJY2hpcG5hbWUgPSAiUENuZXQvRkFTVCsgNzlDOTcyIjsJLyogUENJICovCisJCWZkeCA9IDE7CisJCW1paSA9IDE7CisJCWZzZXQgPSAxOworCQlicmVhazsKKwljYXNlIDB4MjYyNToKKwkJY2hpcG5hbWUgPSAiUENuZXQvRkFTVCBJSUkgNzlDOTczIjsJLyogUENJICovCisJCWZkeCA9IDE7CisJCW1paSA9IDE7CisJCWJyZWFrOworCWNhc2UgMHgyNjI2OgorCQljaGlwbmFtZSA9ICJQQ25ldC9Ib21lIDc5Qzk3OCI7CS8qIFBDSSAqLworCQlmZHggPSAxOworCQkvKgorCQkgKiBUaGlzIGlzIGJhc2VkIG9uIHNwZWNzIHB1Ymxpc2hlZCBhdCB3d3cuYW1kLmNvbS4gIFRoaXMgc2VjdGlvbgorCQkgKiBhc3N1bWVzIHRoYXQgYSBjYXJkIHdpdGggYSA3OUM5Nzggd2FudHMgdG8gZ28gaW50byBzdGFuZGFyZAorCQkgKiBldGhlcm5ldCBtb2RlLiAgVGhlIDc5Qzk3OCBjYW4gYWxzbyBnbyBpbnRvIDFNYiBIb21lUE5BIG1vZGUsCisJCSAqIGFuZCB0aGUgbW9kdWxlIG9wdGlvbiBob21lcG5hPTEgY2FuIHNlbGVjdCB0aGlzIGluc3RlYWQuCisJCSAqLworCQltZWRpYSA9IGEtPnJlYWRfYmNyKGlvYWRkciwgNDkpOworCQltZWRpYSAmPSB+MzsJLyogZGVmYXVsdCB0byAxME1iIGV0aGVybmV0ICovCisJCWlmIChjYXJkc19mb3VuZCA8IE1BWF9VTklUUyAmJiBob21lcG5hW2NhcmRzX2ZvdW5kXSkKKwkJCW1lZGlhIHw9IDE7CS8qIHN3aXRjaCB0byBob21lIHdpcmluZyBtb2RlICovCisJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJtZWRpYSBzZXQgdG8gJXNNYml0IG1vZGUuXG4iLAorCQkJICAgICAgIChtZWRpYSAmIDEpID8gIjEiIDogIjEwIik7CisJCWEtPndyaXRlX2Jjcihpb2FkZHIsIDQ5LCBtZWRpYSk7CisJCWJyZWFrOworCWNhc2UgMHgyNjI3OgorCQljaGlwbmFtZSA9ICJQQ25ldC9GQVNUIElJSSA3OUM5NzUiOwkvKiBQQ0kgKi8KKwkJZmR4ID0gMTsKKwkJbWlpID0gMTsKKwkJYnJlYWs7CisJY2FzZSAweDI2Mjg6CisJCWNoaXBuYW1lID0gIlBDbmV0L1BSTyA3OUM5NzYiOworCQlmZHggPSAxOworCQltaWkgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkgICAgICAgIlBDbmV0IHZlcnNpb24gJSN4LCBubyBQQ25ldDMyIGNoaXAuXG4iLAorCQkJICAgICAgIGNoaXBfdmVyc2lvbik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCS8qCisJICogIE9uIHNlbGVjdGVkIGNoaXBzIHR1cm4gb24gdGhlIEJDUjE4Ok5PVUZMTyBiaXQuIFRoaXMgc3RvcHMgdHJhbnNtaXQKKwkgKiAgc3RhcnRpbmcgdW50aWwgdGhlIHBhY2tldCBpcyBsb2FkZWQuIFN0cmlrZSBvbmUgZm9yIHJlbGlhYmlsaXR5LCBsb3NlCisJICogIG9uZSBmb3IgbGF0ZW5jeSAtIGFsdGhvdWdoIG9uIFBDSSB0aGlzIGlzbnQgYSBiaWcgbG9zcy4gT2xkZXIgY2hpcHMKKwkgKiAgaGF2ZSBGSUZPJ3Mgc21hbGxlciB0aGFuIGEgcGFja2V0LCBzbyB5b3UgY2FuJ3QgZG8gdGhpcy4KKwkgKiAgVHVybiBvbiBCQ1IxODpCdXJzdFJkRW4gYW5kIEJDUjE4OkJ1cnN0V3JFbi4KKwkgKi8KKworCWlmIChmc2V0KSB7CisJCWEtPndyaXRlX2Jjcihpb2FkZHIsIDE4LCAoYS0+cmVhZF9iY3IoaW9hZGRyLCAxOCkgfCAweDA4NjApKTsKKwkJYS0+d3JpdGVfY3NyKGlvYWRkciwgODAsCisJCQkgICAgIChhLT5yZWFkX2Nzcihpb2FkZHIsIDgwKSAmIDB4MEMwMCkgfCAweDBjMDApOworCQlkeHN1ZmxvID0gMTsKKwl9CisKKwlkZXYgPSBhbGxvY19ldGhlcmRldigwKTsKKwlpZiAoIWRldikgeworCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKworCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXMgYXQgJSMzbHgsIiwgY2hpcG5hbWUsIGlvYWRkcik7CisKKwkvKiBJbiBtb3N0IGNoaXBzLCBhZnRlciBhIGNoaXAgcmVzZXQsIHRoZSBldGhlcm5ldCBhZGRyZXNzIGlzIHJlYWQgZnJvbSB0aGUKKwkgKiBzdGF0aW9uIGFkZHJlc3MgUFJPTSBhdCB0aGUgYmFzZSBhZGRyZXNzIGFuZCBwcm9ncmFtbWVkIGludG8gdGhlCisJICogIlBoeXNpY2FsIEFkZHJlc3MgUmVnaXN0ZXJzIiBDU1IxMi0xNC4KKwkgKiBBcyBhIHByZWNhdXRpb25hcnkgbWVhc3VyZSwgd2UgcmVhZCB0aGUgUFJPTSB2YWx1ZXMgYW5kIGNvbXBsYWluIGlmCisJICogdGhleSBkaXNhZ3JlZSB3aXRoIHRoZSBDU1JzLiAgRWl0aGVyIHdheSwgd2UgdXNlIHRoZSBDU1IgdmFsdWVzLCBhbmQKKwkgKiBkb3VibGUgY2hlY2sgdGhhdCB0aGV5IGFyZSB2YWxpZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisJCXZhbCA9IGEtPnJlYWRfY3NyKGlvYWRkciwgaSArIDEyKSAmIDB4MGZmZmY7CisJCS8qIFRoZXJlIG1heSBiZSBlbmRpYW5uZXNzIGlzc3VlcyBoZXJlLiAqLworCQlkZXYtPmRldl9hZGRyWzIgKiBpXSA9IHZhbCAmIDB4MGZmOworCQlkZXYtPmRldl9hZGRyWzIgKiBpICsgMV0gPSAodmFsID4+IDgpICYgMHgwZmY7CisJfQorCisJLyogcmVhZCBQUk9NIGFkZHJlc3MgYW5kIGNvbXBhcmUgd2l0aCBDU1IgYWRkcmVzcyAqLwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JICAgIHByaW50aygiICUyLjJ4IiwgZGV2LT5kZXZfYWRkcltpXSk7CisJCXByb21hZGRyW2ldID0gaW5iKGlvYWRkciArIGkpOwogCi0JLyogVmVyc2lvbiAweDI2MjMgYW5kIDB4MjYyNCAqLwotCWlmICgoKGNoaXBfdmVyc2lvbiArIDEpICYgMHhmZmZlKSA9PSAweDI2MjQpIHsKLQkgICAgaSA9IGEtPnJlYWRfY3NyKGlvYWRkciwgODApICYgMHgwQzAwOyAgLyogQ2hlY2sgdHhfc3RhcnRfcHQgKi8KLQkgICAgcHJpbnRrKCJcbiIgS0VSTl9JTkZPICIgICAgdHhfc3RhcnRfcHQoMHglMDR4KToiLGkpOwotCSAgICBzd2l0Y2goaT4+MTApIHsKLQkJY2FzZSAwOiBwcmludGsoIiAgMjAgYnl0ZXMsIik7IGJyZWFrOwotCQljYXNlIDE6IHByaW50aygiICA2NCBieXRlcywiKTsgYnJlYWs7Ci0JCWNhc2UgMjogcHJpbnRrKCIgMTI4IGJ5dGVzLCIpOyBicmVhazsKLQkJY2FzZSAzOiBwcmludGsoIn4yMjAgYnl0ZXMsIik7IGJyZWFrOwotCSAgICB9Ci0JICAgIGkgPSBhLT5yZWFkX2Jjcihpb2FkZHIsIDE4KTsgIC8qIENoZWNrIEJ1cnN0L0J1cyBjb250cm9sICovCi0JICAgIHByaW50aygiIEJDUjE4KCV4KToiLGkmMHhmZmZmKTsKLQkgICAgaWYgKGkgJiAoMTw8NSkpIHByaW50aygiQnVyc3RXckVuICIpOwotCSAgICBpZiAoaSAmICgxPDw2KSkgcHJpbnRrKCJCdXJzdFJkRW4gIik7Ci0JICAgIGlmIChpICYgKDE8PDcpKSBwcmludGsoIkRXb3JkSU8gIik7Ci0JICAgIGlmIChpICYgKDE8PDExKSkgcHJpbnRrKCJOb1VGbG93ICIpOwotCSAgICBpID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAyNSk7Ci0JICAgIHByaW50aygiXG4iIEtFUk5fSU5GTyAiICAgIFNSQU1TSVpFPTB4JTA0eCwiLGk8PDgpOwotCSAgICBpID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAyNik7Ci0JICAgIHByaW50aygiIFNSQU1fQk5EPTB4JTA0eCwiLGk8PDgpOwotCSAgICBpID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAyNyk7Ci0JICAgIGlmIChpICYgKDE8PDE0KSkgcHJpbnRrKCJMb3dMYXRSeCIpOworCWlmIChtZW1jbXAocHJvbWFkZHIsIGRldi0+ZGV2X2FkZHIsIDYpCisJICAgIHx8ICFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CisJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKHByb21hZGRyKSkgeworCQkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpIHsKKwkJCQlwcmludGsoIiB3YXJuaW5nOiBDU1IgYWRkcmVzcyBpbnZhbGlkLFxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAiICAgIHVzaW5nIGluc3RlYWQgUFJPTSBhZGRyZXNzIG9mIik7CisJCQl9CisJCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgcHJvbWFkZHIsIDYpOworCQl9CiAJfQotICAgIH0KKwltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCi0gICAgZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7Ci0gICAgLyogcGNpX2FsbG9jX2NvbnNpc3RlbnQgcmV0dXJucyBwYWdlLWFsaWduZWQgbWVtb3J5LCBzbyB3ZSBkbyBub3QgaGF2ZSB0byBjaGVjayB0aGUgYWxpZ25tZW50ICovCi0gICAgaWYgKChscCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZigqbHApLCAmbHBfZG1hX2FkZHIpKSA9PSBOVUxMKSB7Ci0JaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JICAgIHByaW50ayhLRVJOX0VSUiBQRlggIkNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIik7Ci0JcmV0ID0gLUVOT01FTTsKLQlnb3RvIGVycl9mcmVlX25ldGRldjsKLSAgICB9CisJLyogaWYgdGhlIGV0aGVybmV0IGFkZHJlc3MgaXMgbm90IHZhbGlkLCBmb3JjZSB0byAwMDowMDowMDowMDowMDowMCAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPnBlcm1fYWRkcikpCisJCW1lbXNldChkZXYtPmRldl9hZGRyLCAwLCBzaXplb2YoZGV2LT5kZXZfYWRkcikpOwogCi0gICAgbWVtc2V0KGxwLCAwLCBzaXplb2YoKmxwKSk7Ci0gICAgbHAtPmRtYV9hZGRyID0gbHBfZG1hX2FkZHI7Ci0gICAgbHAtPnBjaV9kZXYgPSBwZGV2OworCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKSB7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQlwcmludGsoIiAlMi4yeCIsIGRldi0+ZGV2X2FkZHJbaV0pOwogCi0gICAgc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKKwkJLyogVmVyc2lvbiAweDI2MjMgYW5kIDB4MjYyNCAqLworCQlpZiAoKChjaGlwX3ZlcnNpb24gKyAxKSAmIDB4ZmZmZSkgPT0gMHgyNjI0KSB7CisJCQlpID0gYS0+cmVhZF9jc3IoaW9hZGRyLCA4MCkgJiAweDBDMDA7CS8qIENoZWNrIHR4X3N0YXJ0X3B0ICovCisJCQlwcmludGsoIlxuIiBLRVJOX0lORk8gIiAgICB0eF9zdGFydF9wdCgweCUwNHgpOiIsIGkpOworCQkJc3dpdGNoIChpID4+IDEwKSB7CisJCQljYXNlIDA6CisJCQkJcHJpbnRrKCIgIDIwIGJ5dGVzLCIpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXByaW50aygiICA2NCBieXRlcywiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlwcmludGsoIiAxMjggYnl0ZXMsIik7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJcHJpbnRrKCJ+MjIwIGJ5dGVzLCIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaSA9IGEtPnJlYWRfYmNyKGlvYWRkciwgMTgpOwkvKiBDaGVjayBCdXJzdC9CdXMgY29udHJvbCAqLworCQkJcHJpbnRrKCIgQkNSMTgoJXgpOiIsIGkgJiAweGZmZmYpOworCQkJaWYgKGkgJiAoMSA8PCA1KSkKKwkJCQlwcmludGsoIkJ1cnN0V3JFbiAiKTsKKwkJCWlmIChpICYgKDEgPDwgNikpCisJCQkJcHJpbnRrKCJCdXJzdFJkRW4gIik7CisJCQlpZiAoaSAmICgxIDw8IDcpKQorCQkJCXByaW50aygiRFdvcmRJTyAiKTsKKwkJCWlmIChpICYgKDEgPDwgMTEpKQorCQkJCXByaW50aygiTm9VRmxvdyAiKTsKKwkJCWkgPSBhLT5yZWFkX2Jjcihpb2FkZHIsIDI1KTsKKwkJCXByaW50aygiXG4iIEtFUk5fSU5GTyAiICAgIFNSQU1TSVpFPTB4JTA0eCwiLCBpIDw8IDgpOworCQkJaSA9IGEtPnJlYWRfYmNyKGlvYWRkciwgMjYpOworCQkJcHJpbnRrKCIgU1JBTV9CTkQ9MHglMDR4LCIsIGkgPDwgOCk7CisJCQlpID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAyNyk7CisJCQlpZiAoaSAmICgxIDw8IDE0KSkKKwkJCQlwcmludGsoIkxvd0xhdFJ4Iik7CisJCX0KKwl9CiAKLSAgICBTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKLSAgICBkZXYtPnByaXYgPSBscDsKLSAgICBscC0+bmFtZSA9IGNoaXBuYW1lOwotICAgIGxwLT5zaGFyZWRfaXJxID0gc2hhcmVkOwotICAgIGxwLT50eF9yaW5nX3NpemUgPSBUWF9SSU5HX1NJWkU7CQkvKiBkZWZhdWx0IHR4IHJpbmcgc2l6ZSAqLwotICAgIGxwLT5yeF9yaW5nX3NpemUgPSBSWF9SSU5HX1NJWkU7CQkvKiBkZWZhdWx0IHJ4IHJpbmcgc2l6ZSAqLwotICAgIGxwLT50eF9tb2RfbWFzayA9IGxwLT50eF9yaW5nX3NpemUgLSAxOwotICAgIGxwLT5yeF9tb2RfbWFzayA9IGxwLT5yeF9yaW5nX3NpemUgLSAxOwotICAgIGxwLT50eF9sZW5fYml0cyA9IChQQ05FVDMyX0xPR19UWF9CVUZGRVJTIDw8IDEyKTsKLSAgICBscC0+cnhfbGVuX2JpdHMgPSAoUENORVQzMl9MT0dfUlhfQlVGRkVSUyA8PCA0KTsKLSAgICBscC0+bWlpX2lmLmZ1bGxfZHVwbGV4ID0gZmR4OwotICAgIGxwLT5taWlfaWYucGh5X2lkX21hc2sgPSAweDFmOwotICAgIGxwLT5taWlfaWYucmVnX251bV9tYXNrID0gMHgxZjsKLSAgICBscC0+ZHhzdWZsbyA9IGR4c3VmbG87Ci0gICAgbHAtPm1paSA9IG1paTsKLSAgICBscC0+bXNnX2VuYWJsZSA9IHBjbmV0MzJfZGVidWc7Ci0gICAgaWYgKChjYXJkc19mb3VuZCA+PSBNQVhfVU5JVFMpIHx8IChvcHRpb25zW2NhcmRzX2ZvdW5kXSA+IHNpemVvZihvcHRpb25zX21hcHBpbmcpKSkKLQlscC0+b3B0aW9ucyA9IFBDTkVUMzJfUE9SVF9BU0VMOwotICAgIGVsc2UKLQlscC0+b3B0aW9ucyA9IG9wdGlvbnNfbWFwcGluZ1tvcHRpb25zW2NhcmRzX2ZvdW5kXV07Ci0gICAgbHAtPm1paV9pZi5kZXYgPSBkZXY7Ci0gICAgbHAtPm1paV9pZi5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7Ci0gICAgbHAtPm1paV9pZi5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsKKwlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKKwkvKiBwY2lfYWxsb2NfY29uc2lzdGVudCByZXR1cm5zIHBhZ2UtYWxpZ25lZCBtZW1vcnksIHNvIHdlIGRvIG5vdCBoYXZlIHRvIGNoZWNrIHRoZSBhbGlnbm1lbnQgKi8KKwlpZiAoKGxwID0KKwkgICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZigqbHApLCAmbHBfZG1hX2FkZHIpKSA9PSBOVUxMKSB7CisJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgICAgICJDb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwl9CiAKLSAgICBpZiAoZmR4ICYmICEobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfQVNFTCkgJiYKLQkJKChjYXJkc19mb3VuZD49TUFYX1VOSVRTKSB8fCBmdWxsX2R1cGxleFtjYXJkc19mb3VuZF0pKQotCWxwLT5vcHRpb25zIHw9IFBDTkVUMzJfUE9SVF9GRDsKKwltZW1zZXQobHAsIDAsIHNpemVvZigqbHApKTsKKwlscC0+ZG1hX2FkZHIgPSBscF9kbWFfYWRkcjsKKwlscC0+cGNpX2RldiA9IHBkZXY7CiAKLSAgICBpZiAoIWEpIHsKLQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkgICAgcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gYWNjZXNzIG1ldGhvZHNcbiIpOwotCXJldCA9IC1FTk9ERVY7Ci0JZ290byBlcnJfZnJlZV9jb25zaXN0ZW50OwotICAgIH0KLSAgICBscC0+YSA9ICphOworCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CiAKLSAgICAvKiBwcmlvciB0byByZWdpc3Rlcl9uZXRkZXYsIGRldi0+bmFtZSBpcyBub3QgeWV0IGNvcnJlY3QgKi8KLSAgICBpZiAocGNuZXQzMl9hbGxvY19yaW5nKGRldiwgcGNpX25hbWUobHAtPnBjaV9kZXYpKSkgewotCXJldCA9IC1FTk9NRU07Ci0JZ290byBlcnJfZnJlZV9yaW5nOwotICAgIH0KLSAgICAvKiBkZXRlY3Qgc3BlY2lhbCBUMS9FMSBXQU4gY2FyZCBieSBjaGVja2luZyBmb3IgTUFDIGFkZHJlc3MgKi8KLSAgICBpZiAoZGV2LT5kZXZfYWRkclswXSA9PSAweDAwICYmIGRldi0+ZGV2X2FkZHJbMV0gPT0gMHhlMAorCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOworCWRldi0+cHJpdiA9IGxwOworCWxwLT5uYW1lID0gY2hpcG5hbWU7CisJbHAtPnNoYXJlZF9pcnEgPSBzaGFyZWQ7CisJbHAtPnR4X3Jpbmdfc2l6ZSA9IFRYX1JJTkdfU0laRTsJLyogZGVmYXVsdCB0eCByaW5nIHNpemUgKi8KKwlscC0+cnhfcmluZ19zaXplID0gUlhfUklOR19TSVpFOwkvKiBkZWZhdWx0IHJ4IHJpbmcgc2l6ZSAqLworCWxwLT50eF9tb2RfbWFzayA9IGxwLT50eF9yaW5nX3NpemUgLSAxOworCWxwLT5yeF9tb2RfbWFzayA9IGxwLT5yeF9yaW5nX3NpemUgLSAxOworCWxwLT50eF9sZW5fYml0cyA9IChQQ05FVDMyX0xPR19UWF9CVUZGRVJTIDw8IDEyKTsKKwlscC0+cnhfbGVuX2JpdHMgPSAoUENORVQzMl9MT0dfUlhfQlVGRkVSUyA8PCA0KTsKKwlscC0+bWlpX2lmLmZ1bGxfZHVwbGV4ID0gZmR4OworCWxwLT5taWlfaWYucGh5X2lkX21hc2sgPSAweDFmOworCWxwLT5taWlfaWYucmVnX251bV9tYXNrID0gMHgxZjsKKwlscC0+ZHhzdWZsbyA9IGR4c3VmbG87CisJbHAtPm1paSA9IG1paTsKKwlscC0+bXNnX2VuYWJsZSA9IHBjbmV0MzJfZGVidWc7CisJaWYgKChjYXJkc19mb3VuZCA+PSBNQVhfVU5JVFMpCisJICAgIHx8IChvcHRpb25zW2NhcmRzX2ZvdW5kXSA+IHNpemVvZihvcHRpb25zX21hcHBpbmcpKSkKKwkJbHAtPm9wdGlvbnMgPSBQQ05FVDMyX1BPUlRfQVNFTDsKKwllbHNlCisJCWxwLT5vcHRpb25zID0gb3B0aW9uc19tYXBwaW5nW29wdGlvbnNbY2FyZHNfZm91bmRdXTsKKwlscC0+bWlpX2lmLmRldiA9IGRldjsKKwlscC0+bWlpX2lmLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKKwlscC0+bWlpX2lmLm1kaW9fd3JpdGUgPSBtZGlvX3dyaXRlOworCisJaWYgKGZkeCAmJiAhKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0FTRUwpICYmCisJICAgICgoY2FyZHNfZm91bmQgPj0gTUFYX1VOSVRTKSB8fCBmdWxsX2R1cGxleFtjYXJkc19mb3VuZF0pKQorCQlscC0+b3B0aW9ucyB8PSBQQ05FVDMyX1BPUlRfRkQ7CisKKwlpZiAoIWEpIHsKKwkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBhY2Nlc3MgbWV0aG9kc1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfY29uc2lzdGVudDsKKwl9CisJbHAtPmEgPSAqYTsKKworCS8qIHByaW9yIHRvIHJlZ2lzdGVyX25ldGRldiwgZGV2LT5uYW1lIGlzIG5vdCB5ZXQgY29ycmVjdCAqLworCWlmIChwY25ldDMyX2FsbG9jX3JpbmcoZGV2LCBwY2lfbmFtZShscC0+cGNpX2RldikpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfcmluZzsKKwl9CisJLyogZGV0ZWN0IHNwZWNpYWwgVDEvRTEgV0FOIGNhcmQgYnkgY2hlY2tpbmcgZm9yIE1BQyBhZGRyZXNzICovCisJaWYgKGRldi0+ZGV2X2FkZHJbMF0gPT0gMHgwMCAmJiBkZXYtPmRldl9hZGRyWzFdID09IDB4ZTAKIAkgICAgJiYgZGV2LT5kZXZfYWRkclsyXSA9PSAweDc1KQotCWxwLT5vcHRpb25zID0gUENORVQzMl9QT1JUX0ZEIHwgUENORVQzMl9QT1JUX0dQU0k7CisJCWxwLT5vcHRpb25zID0gUENORVQzMl9QT1JUX0ZEIHwgUENORVQzMl9QT1JUX0dQU0k7CiAKLSAgICBscC0+aW5pdF9ibG9jay5tb2RlID0gbGUxNl90b19jcHUoMHgwMDAzKTsJLyogRGlzYWJsZSBSeCBhbmQgVHguICovCi0gICAgbHAtPmluaXRfYmxvY2sudGxlbl9ybGVuID0gbGUxNl90b19jcHUobHAtPnR4X2xlbl9iaXRzIHwgbHAtPnJ4X2xlbl9iaXRzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCWxwLT5pbml0X2Jsb2NrLnBoeXNfYWRkcltpXSA9IGRldi0+ZGV2X2FkZHJbaV07Ci0gICAgbHAtPmluaXRfYmxvY2suZmlsdGVyWzBdID0gMHgwMDAwMDAwMDsKLSAgICBscC0+aW5pdF9ibG9jay5maWx0ZXJbMV0gPSAweDAwMDAwMDAwOwotICAgIGxwLT5pbml0X2Jsb2NrLnJ4X3JpbmcgPSAodTMyKWxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nX2RtYV9hZGRyKTsKLSAgICBscC0+aW5pdF9ibG9jay50eF9yaW5nID0gKHUzMilsZTMyX3RvX2NwdShscC0+dHhfcmluZ19kbWFfYWRkcik7CisJbHAtPmluaXRfYmxvY2subW9kZSA9IGxlMTZfdG9fY3B1KDB4MDAwMyk7CS8qIERpc2FibGUgUnggYW5kIFR4LiAqLworCWxwLT5pbml0X2Jsb2NrLnRsZW5fcmxlbiA9CisJICAgIGxlMTZfdG9fY3B1KGxwLT50eF9sZW5fYml0cyB8IGxwLT5yeF9sZW5fYml0cyk7CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJbHAtPmluaXRfYmxvY2sucGh5c19hZGRyW2ldID0gZGV2LT5kZXZfYWRkcltpXTsKKwlscC0+aW5pdF9ibG9jay5maWx0ZXJbMF0gPSAweDAwMDAwMDAwOworCWxwLT5pbml0X2Jsb2NrLmZpbHRlclsxXSA9IDB4MDAwMDAwMDA7CisJbHAtPmluaXRfYmxvY2sucnhfcmluZyA9ICh1MzIpIGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nX2RtYV9hZGRyKTsKKwlscC0+aW5pdF9ibG9jay50eF9yaW5nID0gKHUzMikgbGUzMl90b19jcHUobHAtPnR4X3JpbmdfZG1hX2FkZHIpOwogCi0gICAgLyogc3dpdGNoIHBjbmV0MzIgdG8gMzJiaXQgbW9kZSAqLwotICAgIGEtPndyaXRlX2Jjcihpb2FkZHIsIDIwLCAyKTsKKwkvKiBzd2l0Y2ggcGNuZXQzMiB0byAzMmJpdCBtb2RlICovCisJYS0+d3JpdGVfYmNyKGlvYWRkciwgMjAsIDIpOwogCi0gICAgYS0+d3JpdGVfY3NyKGlvYWRkciwgMSwgKGxwLT5kbWFfYWRkciArIG9mZnNldG9mKHN0cnVjdCBwY25ldDMyX3ByaXZhdGUsCi0JCSAgICBpbml0X2Jsb2NrKSkgJiAweGZmZmYpOwotICAgIGEtPndyaXRlX2Nzcihpb2FkZHIsIDIsIChscC0+ZG1hX2FkZHIgKyBvZmZzZXRvZihzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlLAotCQkgICAgaW5pdF9ibG9jaykpID4+IDE2KTsKKwlhLT53cml0ZV9jc3IoaW9hZGRyLCAxLCAobHAtPmRtYV9hZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSwKKwkJCQkJCQkgaW5pdF9ibG9jaykpICYgMHhmZmZmKTsKKwlhLT53cml0ZV9jc3IoaW9hZGRyLCAyLCAobHAtPmRtYV9hZGRyICsgb2Zmc2V0b2Yoc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSwKKwkJCQkJCQkgaW5pdF9ibG9jaykpID4+IDE2KTsKIAotICAgIGlmIChwZGV2KSB7CQkvKiB1c2UgdGhlIElSUSBwcm92aWRlZCBieSBQQ0kgKi8KLQlkZXYtPmlycSA9IHBkZXYtPmlycTsKLQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkgICAgcHJpbnRrKCIgYXNzaWduZWQgSVJRICVkLlxuIiwgZGV2LT5pcnEpOwotICAgIH0gZWxzZSB7Ci0JdW5zaWduZWQgbG9uZyBpcnFfbWFzayA9IHByb2JlX2lycV9vbigpOworCWlmIChwZGV2KSB7CQkvKiB1c2UgdGhlIElSUSBwcm92aWRlZCBieSBQQ0kgKi8KKwkJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQorCQkJcHJpbnRrKCIgYXNzaWduZWQgSVJRICVkLlxuIiwgZGV2LT5pcnEpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSBwcm9iZV9pcnFfb24oKTsKIAotCS8qCi0JICogVG8gYXV0by1JUlEgd2UgZW5hYmxlIHRoZSBpbml0aWFsaXphdGlvbi1kb25lIGFuZCBETUEgZXJyb3IKLQkgKiBpbnRlcnJ1cHRzLiBGb3IgSVNBIGJvYXJkcyB3ZSBnZXQgYSBETUEgZXJyb3IsIGJ1dCBWTEIgYW5kIFBDSQotCSAqIGJvYXJkcyB3aWxsIHdvcmsuCi0JICovCi0JLyogVHJpZ2dlciBhbiBpbml0aWFsaXphdGlvbiBqdXN0IGZvciB0aGUgaW50ZXJydXB0LiAqLwotCWEtPndyaXRlX2NzciAoaW9hZGRyLCAwLCAweDQxKTsKLQltZGVsYXkgKDEpOworCQkvKgorCQkgKiBUbyBhdXRvLUlSUSB3ZSBlbmFibGUgdGhlIGluaXRpYWxpemF0aW9uLWRvbmUgYW5kIERNQSBlcnJvcgorCQkgKiBpbnRlcnJ1cHRzLiBGb3IgSVNBIGJvYXJkcyB3ZSBnZXQgYSBETUEgZXJyb3IsIGJ1dCBWTEIgYW5kIFBDSQorCQkgKiBib2FyZHMgd2lsbCB3b3JrLgorCQkgKi8KKwkJLyogVHJpZ2dlciBhbiBpbml0aWFsaXphdGlvbiBqdXN0IGZvciB0aGUgaW50ZXJydXB0LiAqLworCQlhLT53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDQxKTsKKwkJbWRlbGF5KDEpOwogCi0JZGV2LT5pcnEgPSBwcm9iZV9pcnFfb2ZmIChpcnFfbWFzayk7Ci0JaWYgKCFkZXYtPmlycSkgewotCSAgICBpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJcHJpbnRrKCIsIGZhaWxlZCB0byBkZXRlY3QgSVJRIGxpbmUuXG4iKTsKLQkgICAgcmV0ID0gLUVOT0RFVjsKLQkgICAgZ290byBlcnJfZnJlZV9yaW5nOworCQlkZXYtPmlycSA9IHByb2JlX2lycV9vZmYoaXJxX21hc2spOworCQlpZiAoIWRldi0+aXJxKSB7CisJCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKKwkJCQlwcmludGsoIiwgZmFpbGVkIHRvIGRldGVjdCBJUlEgbGluZS5cbiIpOworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX2ZyZWVfcmluZzsKKwkJfQorCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKKwkJCXByaW50aygiLCBwcm9iZWQgSVJRICVkLlxuIiwgZGV2LT5pcnEpOwogCX0KLQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkgICAgcHJpbnRrKCIsIHByb2JlZCBJUlEgJWQuXG4iLCBkZXYtPmlycSk7Ci0gICAgfQogCi0gICAgLyogU2V0IHRoZSBtaWkgcGh5X2lkIHNvIHRoYXQgd2UgY2FuIHF1ZXJ5IHRoZSBsaW5rIHN0YXRlICovCi0gICAgaWYgKGxwLT5taWkpCi0JbHAtPm1paV9pZi5waHlfaWQgPSAoKGxwLT5hLnJlYWRfYmNyIChpb2FkZHIsIDMzKSkgPj4gNSkgJiAweDFmOworCS8qIFNldCB0aGUgbWlpIHBoeV9pZCBzbyB0aGF0IHdlIGNhbiBxdWVyeSB0aGUgbGluayBzdGF0ZSAqLworCWlmIChscC0+bWlpKSB7CisJCS8qIGxwLT5waHljb3VudCBhbmQgbHAtPnBoeW1hc2sgYXJlIHNldCB0byAwIGJ5IG1lbXNldCBhYm92ZSAqLwogCi0gICAgaW5pdF90aW1lciAoJmxwLT53YXRjaGRvZ190aW1lcik7Ci0gICAgbHAtPndhdGNoZG9nX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwotICAgIGxwLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICh2b2lkICopICZwY25ldDMyX3dhdGNoZG9nOworCQlscC0+bWlpX2lmLnBoeV9pZCA9ICgobHAtPmEucmVhZF9iY3IoaW9hZGRyLCAzMykpID4+IDUpICYgMHgxZjsKKwkJLyogc2NhbiBmb3IgUEhZcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgUENORVQzMl9NQVhfUEhZUzsgaSsrKSB7CisJCQl1bnNpZ25lZCBzaG9ydCBpZDEsIGlkMjsKIAotICAgIC8qIFRoZSBQQ05FVDMyLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5vcGVuID0gJnBjbmV0MzJfb3BlbjsKLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZwY25ldDMyX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zdG9wID0gJnBjbmV0MzJfY2xvc2U7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmcGNuZXQzMl9nZXRfc3RhdHM7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmcGNuZXQzMl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0gICAgZGV2LT5kb19pb2N0bCA9ICZwY25ldDMyX2lvY3RsOwotICAgIGRldi0+ZXRodG9vbF9vcHMgPSAmcGNuZXQzMl9ldGh0b29sX29wczsKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBwY25ldDMyX3R4X3RpbWVvdXQ7Ci0gICAgZGV2LT53YXRjaGRvZ190aW1lbyA9ICg1KkhaKTsKKwkJCWlkMSA9IG1kaW9fcmVhZChkZXYsIGksIE1JSV9QSFlTSUQxKTsKKwkJCWlmIChpZDEgPT0gMHhmZmZmKQorCQkJCWNvbnRpbnVlOworCQkJaWQyID0gbWRpb19yZWFkKGRldiwgaSwgTUlJX1BIWVNJRDIpOworCQkJaWYgKGlkMiA9PSAweGZmZmYpCisJCQkJY29udGludWU7CisJCQlpZiAoaSA9PSAzMSAmJiAoKGNoaXBfdmVyc2lvbiArIDEpICYgMHhmZmZlKSA9PSAweDI2MjQpCisJCQkJY29udGludWU7CS8qIDc5Qzk3MSAmIDc5Qzk3MiBoYXZlIHBoYW50b20gcGh5IGF0IGlkIDMxICovCisJCQlscC0+cGh5Y291bnQrKzsKKwkJCWxwLT5waHltYXNrIHw9ICgxIDw8IGkpOworCQkJbHAtPm1paV9pZi5waHlfaWQgPSBpOworCQkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCQkgICAgICAgIkZvdW5kIFBIWSAlMDR4OiUwNHggYXQgYWRkcmVzcyAlZC5cbiIsCisJCQkJICAgICAgIGlkMSwgaWQyLCBpKTsKKwkJfQorCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMywgKGxwLT5taWlfaWYucGh5X2lkKSA8PCA1KTsKKwkJaWYgKGxwLT5waHljb3VudCA+IDEpIHsKKwkJCWxwLT5vcHRpb25zIHw9IFBDTkVUMzJfUE9SVF9NSUk7CisJCX0KKwl9CisKKwlpbml0X3RpbWVyKCZscC0+d2F0Y2hkb2dfdGltZXIpOworCWxwLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCWxwLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICh2b2lkICopJnBjbmV0MzJfd2F0Y2hkb2c7CisKKwkvKiBUaGUgUENORVQzMi1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLworCWRldi0+b3BlbiA9ICZwY25ldDMyX29wZW47CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmcGNuZXQzMl9zdGFydF94bWl0OworCWRldi0+c3RvcCA9ICZwY25ldDMyX2Nsb3NlOworCWRldi0+Z2V0X3N0YXRzID0gJnBjbmV0MzJfZ2V0X3N0YXRzOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnBjbmV0MzJfc2V0X211bHRpY2FzdF9saXN0OworCWRldi0+ZG9faW9jdGwgPSAmcGNuZXQzMl9pb2N0bDsKKwlkZXYtPmV0aHRvb2xfb3BzID0gJnBjbmV0MzJfZXRodG9vbF9vcHM7CisJZGV2LT50eF90aW1lb3V0ID0gcGNuZXQzMl90eF90aW1lb3V0OworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAoNSAqIEhaKTsKIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0gICAgZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBwY25ldDMyX3BvbGxfY29udHJvbGxlcjsKKwlkZXYtPnBvbGxfY29udHJvbGxlciA9IHBjbmV0MzJfcG9sbF9jb250cm9sbGVyOwogI2VuZGlmCiAKLSAgICAvKiBGaWxsIGluIHRoZSBnZW5lcmljIGZpZWxkcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLSAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpCi0JZ290byBlcnJfZnJlZV9yaW5nOworCS8qIEZpbGwgaW4gdGhlIGdlbmVyaWMgZmllbGRzIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLworCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkKKwkJZ290byBlcnJfZnJlZV9yaW5nOwogCi0gICAgaWYgKHBkZXYpIHsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLSAgICB9IGVsc2UgewotCWxwLT5uZXh0ID0gcGNuZXQzMl9kZXY7Ci0JcGNuZXQzMl9kZXYgPSBkZXY7Ci0gICAgfQorCWlmIChwZGV2KSB7CisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCX0gZWxzZSB7CisJCWxwLT5uZXh0ID0gcGNuZXQzMl9kZXY7CisJCXBjbmV0MzJfZGV2ID0gZGV2OworCX0KIAotICAgIGlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWdpc3RlcmVkIGFzICVzXG4iLCBkZXYtPm5hbWUsIGxwLT5uYW1lKTsKLSAgICBjYXJkc19mb3VuZCsrOworCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBhcyAlc1xuIiwgZGV2LT5uYW1lLCBscC0+bmFtZSk7CisJY2FyZHNfZm91bmQrKzsKIAotICAgIC8qIGVuYWJsZSBMRUQgd3JpdGVzICovCi0gICAgYS0+d3JpdGVfYmNyKGlvYWRkciwgMiwgYS0+cmVhZF9iY3IoaW9hZGRyLCAyKSB8IDB4MTAwMCk7CisJLyogZW5hYmxlIExFRCB3cml0ZXMgKi8KKwlhLT53cml0ZV9iY3IoaW9hZGRyLCAyLCBhLT5yZWFkX2Jjcihpb2FkZHIsIDIpIHwgMHgxMDAwKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogCi1lcnJfZnJlZV9yaW5nOgotICAgIHBjbmV0MzJfZnJlZV9yaW5nKGRldik7Ci1lcnJfZnJlZV9jb25zaXN0ZW50OgotICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIHNpemVvZigqbHApLCBscCwgbHAtPmRtYV9hZGRyKTsKLWVycl9mcmVlX25ldGRldjoKLSAgICBmcmVlX25ldGRldihkZXYpOwotZXJyX3JlbGVhc2VfcmVnaW9uOgotICAgIHJlbGVhc2VfcmVnaW9uKGlvYWRkciwgUENORVQzMl9UT1RBTF9TSVpFKTsKLSAgICByZXR1cm4gcmV0OworICAgICAgZXJyX2ZyZWVfcmluZzoKKwlwY25ldDMyX2ZyZWVfcmluZyhkZXYpOworICAgICAgZXJyX2ZyZWVfY29uc2lzdGVudDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LCBzaXplb2YoKmxwKSwgbHAsIGxwLT5kbWFfYWRkcik7CisgICAgICBlcnJfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYoZGV2KTsKKyAgICAgIGVycl9yZWxlYXNlX3JlZ2lvbjoKKwlyZWxlYXNlX3JlZ2lvbihpb2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSk7CisJcmV0dXJuIHJldDsKIH0KIAotCiAvKiBpZiBhbnkgYWxsb2NhdGlvbiBmYWlscywgY2FsbGVyIG11c3QgYWxzbyBjYWxsIHBjbmV0MzJfZnJlZV9yaW5nICovCiBzdGF0aWMgaW50IHBjbmV0MzJfYWxsb2NfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpuYW1lKQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwogCi0gICAgbHAtPnR4X3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChscC0+cGNpX2RldiwKLQkgICAgc2l6ZW9mKHN0cnVjdCBwY25ldDMyX3R4X2hlYWQpICogbHAtPnR4X3Jpbmdfc2l6ZSwKLQkgICAgJmxwLT50eF9yaW5nX2RtYV9hZGRyKTsKLSAgICBpZiAobHAtPnR4X3JpbmcgPT0gTlVMTCkgewotCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKLQkgICAgcHJpbnRrKCJcbiIgS0VSTl9FUlIgUEZYICIlczogQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAotCQkgICAgbmFtZSk7Ci0JcmV0dXJuIC1FTk9NRU07Ci0gICAgfQorCWxwLT50eF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgcGNuZXQzMl90eF9oZWFkKSAqCisJCQkJCSAgIGxwLT50eF9yaW5nX3NpemUsCisJCQkJCSAgICZscC0+dHhfcmluZ19kbWFfYWRkcik7CisJaWYgKGxwLT50eF9yaW5nID09IE5VTEwpIHsKKwkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfRFJWKQorCQkJcHJpbnRrKCJcbiIgS0VSTl9FUlIgUEZYCisJCQkgICAgICAgIiVzOiBDb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsCisJCQkgICAgICAgbmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotICAgIGxwLT5yeF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsCi0JICAgIHNpemVvZihzdHJ1Y3QgcGNuZXQzMl9yeF9oZWFkKSAqIGxwLT5yeF9yaW5nX3NpemUsCi0JICAgICZscC0+cnhfcmluZ19kbWFfYWRkcik7Ci0gICAgaWYgKGxwLT5yeF9yaW5nID09IE5VTEwpIHsKLQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19EUlYpCi0JICAgIHByaW50aygiXG4iIEtFUk5fRVJSIFBGWCAiJXM6IENvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwKLQkJICAgIG5hbWUpOwotCXJldHVybiAtRU5PTUVNOwotICAgIH0KKwlscC0+cnhfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGxwLT5wY2lfZGV2LAorCQkJCQkgICBzaXplb2Yoc3RydWN0IHBjbmV0MzJfcnhfaGVhZCkgKgorCQkJCQkgICBscC0+cnhfcmluZ19zaXplLAorCQkJCQkgICAmbHAtPnJ4X3JpbmdfZG1hX2FkZHIpOworCWlmIChscC0+cnhfcmluZyA9PSBOVUxMKSB7CisJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKKwkJCXByaW50aygiXG4iIEtFUk5fRVJSIFBGWAorCQkJICAgICAgICIlczogQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAorCQkJICAgICAgIG5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLSAgICBscC0+dHhfZG1hX2FkZHIgPSBrbWFsbG9jKHNpemVvZihkbWFfYWRkcl90KSAqIGxwLT50eF9yaW5nX3NpemUsCi0JICAgIEdGUF9BVE9NSUMpOwotICAgIGlmICghbHAtPnR4X2RtYV9hZGRyKSB7Ci0JaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfRFJWKQotCSAgICBwcmludGsoIlxuIiBLRVJOX0VSUiBQRlggIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBuYW1lKTsKLQlyZXR1cm4gLUVOT01FTTsKLSAgICB9Ci0gICAgbWVtc2V0KGxwLT50eF9kbWFfYWRkciwgMCwgc2l6ZW9mKGRtYV9hZGRyX3QpICogbHAtPnR4X3Jpbmdfc2l6ZSk7CisJbHAtPnR4X2RtYV9hZGRyID0ga21hbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiBscC0+dHhfcmluZ19zaXplLAorCQkJCSAgR0ZQX0FUT01JQyk7CisJaWYgKCFscC0+dHhfZG1hX2FkZHIpIHsKKwkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfRFJWKQorCQkJcHJpbnRrKCJcbiIgS0VSTl9FUlIgUEZYCisJCQkgICAgICAgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBuYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChscC0+dHhfZG1hX2FkZHIsIDAsIHNpemVvZihkbWFfYWRkcl90KSAqIGxwLT50eF9yaW5nX3NpemUpOwogCi0gICAgbHAtPnJ4X2RtYV9hZGRyID0ga21hbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiBscC0+cnhfcmluZ19zaXplLAotCSAgICBHRlBfQVRPTUlDKTsKLSAgICBpZiAoIWxwLT5yeF9kbWFfYWRkcikgewotCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKLQkgICAgcHJpbnRrKCJcbiIgS0VSTl9FUlIgUEZYICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgbmFtZSk7Ci0JcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotICAgIG1lbXNldChscC0+cnhfZG1hX2FkZHIsIDAsIHNpemVvZihkbWFfYWRkcl90KSAqIGxwLT5yeF9yaW5nX3NpemUpOworCWxwLT5yeF9kbWFfYWRkciA9IGttYWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICogbHAtPnJ4X3Jpbmdfc2l6ZSwKKwkJCQkgIEdGUF9BVE9NSUMpOworCWlmICghbHAtPnJ4X2RtYV9hZGRyKSB7CisJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKKwkJCXByaW50aygiXG4iIEtFUk5fRVJSIFBGWAorCQkJICAgICAgICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgbmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQobHAtPnJ4X2RtYV9hZGRyLCAwLCBzaXplb2YoZG1hX2FkZHJfdCkgKiBscC0+cnhfcmluZ19zaXplKTsKIAotICAgIGxwLT50eF9za2J1ZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIGxwLT50eF9yaW5nX3NpemUsCi0JICAgIEdGUF9BVE9NSUMpOwotICAgIGlmICghbHAtPnR4X3NrYnVmZikgewotCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKLQkgICAgcHJpbnRrKCJcbiIgS0VSTl9FUlIgUEZYICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgbmFtZSk7Ci0JcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotICAgIG1lbXNldChscC0+dHhfc2tidWZmLCAwLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKiBscC0+dHhfcmluZ19zaXplKTsKKwlscC0+dHhfc2tidWZmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKiBscC0+dHhfcmluZ19zaXplLAorCQkJCUdGUF9BVE9NSUMpOworCWlmICghbHAtPnR4X3NrYnVmZikgeworCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19EUlYpCisJCQlwcmludGsoIlxuIiBLRVJOX0VSUiBQRlgKKwkJCSAgICAgICAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsIG5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGxwLT50eF9za2J1ZmYsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIGxwLT50eF9yaW5nX3NpemUpOwogCi0gICAgbHAtPnJ4X3NrYnVmZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBza19idWZmICopICogbHAtPnJ4X3Jpbmdfc2l6ZSwKLQkgICAgR0ZQX0FUT01JQyk7Ci0gICAgaWYgKCFscC0+cnhfc2tidWZmKSB7Ci0JaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfRFJWKQotCSAgICBwcmludGsoIlxuIiBLRVJOX0VSUiBQRlggIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBuYW1lKTsKLQlyZXR1cm4gLUVOT01FTTsKLSAgICB9Ci0gICAgbWVtc2V0KGxwLT5yeF9za2J1ZmYsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIGxwLT5yeF9yaW5nX3NpemUpOworCWxwLT5yeF9za2J1ZmYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIGxwLT5yeF9yaW5nX3NpemUsCisJCQkJR0ZQX0FUT01JQyk7CisJaWYgKCFscC0+cnhfc2tidWZmKSB7CisJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKKwkJCXByaW50aygiXG4iIEtFUk5fRVJSIFBGWAorCQkJICAgICAgICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgbmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQobHAtPnJ4X3NrYnVmZiwgMCwgc2l6ZW9mKHN0cnVjdCBza19idWZmICopICogbHAtPnJ4X3Jpbmdfc2l6ZSk7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgdm9pZCBwY25ldDMyX2ZyZWVfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwogCi0gICAga2ZyZWUobHAtPnR4X3NrYnVmZik7Ci0gICAgbHAtPnR4X3NrYnVmZiA9IE5VTEw7CisJa2ZyZWUobHAtPnR4X3NrYnVmZik7CisJbHAtPnR4X3NrYnVmZiA9IE5VTEw7CiAKLSAgICBrZnJlZShscC0+cnhfc2tidWZmKTsKLSAgICBscC0+cnhfc2tidWZmID0gTlVMTDsKKwlrZnJlZShscC0+cnhfc2tidWZmKTsKKwlscC0+cnhfc2tidWZmID0gTlVMTDsKIAotICAgIGtmcmVlKGxwLT50eF9kbWFfYWRkcik7Ci0gICAgbHAtPnR4X2RtYV9hZGRyID0gTlVMTDsKKwlrZnJlZShscC0+dHhfZG1hX2FkZHIpOworCWxwLT50eF9kbWFfYWRkciA9IE5VTEw7CiAKLSAgICBrZnJlZShscC0+cnhfZG1hX2FkZHIpOwotICAgIGxwLT5yeF9kbWFfYWRkciA9IE5VTEw7CisJa2ZyZWUobHAtPnJ4X2RtYV9hZGRyKTsKKwlscC0+cnhfZG1hX2FkZHIgPSBOVUxMOwogCi0gICAgaWYgKGxwLT50eF9yaW5nKSB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChscC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCBwY25ldDMyX3R4X2hlYWQpICogbHAtPnR4X3Jpbmdfc2l6ZSwKLQkJbHAtPnR4X3JpbmcsIGxwLT50eF9yaW5nX2RtYV9hZGRyKTsKLQlscC0+dHhfcmluZyA9IE5VTEw7Ci0gICAgfQorCWlmIChscC0+dHhfcmluZykgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHBjbmV0MzJfdHhfaGVhZCkgKgorCQkJCSAgICBscC0+dHhfcmluZ19zaXplLCBscC0+dHhfcmluZywKKwkJCQkgICAgbHAtPnR4X3JpbmdfZG1hX2FkZHIpOworCQlscC0+dHhfcmluZyA9IE5VTEw7CisJfQogCi0gICAgaWYgKGxwLT5yeF9yaW5nKSB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChscC0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCBwY25ldDMyX3J4X2hlYWQpICogbHAtPnJ4X3Jpbmdfc2l6ZSwKLQkJbHAtPnJ4X3JpbmcsIGxwLT5yeF9yaW5nX2RtYV9hZGRyKTsKLQlscC0+cnhfcmluZyA9IE5VTEw7Ci0gICAgfQorCWlmIChscC0+cnhfcmluZykgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHBjbmV0MzJfcnhfaGVhZCkgKgorCQkJCSAgICBscC0+cnhfcmluZ19zaXplLCBscC0+cnhfcmluZywKKwkJCQkgICAgbHAtPnJ4X3JpbmdfZG1hX2FkZHIpOworCQlscC0+cnhfcmluZyA9IE5VTEw7CisJfQogfQogCi0KLXN0YXRpYyBpbnQKLXBjbmV0MzJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBwY25ldDMyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICB1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotICAgIHUxNiB2YWw7Ci0gICAgaW50IGk7Ci0gICAgaW50IHJjOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1MTYgdmFsOworCWludCBpOworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmcGNuZXQzMl9pbnRlcnJ1cHQsCi0JCSAgICBscC0+c2hhcmVkX2lycSA/IFNBX1NISVJRIDogMCwgZGV2LT5uYW1lLCAodm9pZCAqKWRldikpIHsKLQlyZXR1cm4gLUVBR0FJTjsKLSAgICB9Ci0KLSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLSAgICAvKiBDaGVjayBmb3IgYSB2YWxpZCBzdGF0aW9uIGFkZHJlc3MgKi8KLSAgICBpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKLQlyYyA9IC1FSU5WQUw7Ci0JZ290byBlcnJfZnJlZV9pcnE7Ci0gICAgfQotCi0gICAgLyogUmVzZXQgdGhlIFBDTkVUMzIgKi8KLSAgICBscC0+YS5yZXNldCAoaW9hZGRyKTsKLQotICAgIC8qIHN3aXRjaCBwY25ldDMyIHRvIDMyYml0IG1vZGUgKi8KLSAgICBscC0+YS53cml0ZV9iY3IgKGlvYWRkciwgMjAsIDIpOwotCi0gICAgaWYgKG5ldGlmX21zZ19pZnVwKGxwKSkKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHBjbmV0MzJfb3BlbigpIGlycSAlZCB0eC9yeCByaW5ncyAlI3gvJSN4IGluaXQgJSN4LlxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSwKLQkgICAgICAgKHUzMikgKGxwLT50eF9yaW5nX2RtYV9hZGRyKSwKLQkgICAgICAgKHUzMikgKGxwLT5yeF9yaW5nX2RtYV9hZGRyKSwKLQkgICAgICAgKHUzMikgKGxwLT5kbWFfYWRkciArIG9mZnNldG9mKHN0cnVjdCBwY25ldDMyX3ByaXZhdGUsIGluaXRfYmxvY2spKSk7Ci0KLSAgICAvKiBzZXQvcmVzZXQgYXV0b3NlbGVjdCBiaXQgKi8KLSAgICB2YWwgPSBscC0+YS5yZWFkX2JjciAoaW9hZGRyLCAyKSAmIH4yOwotICAgIGlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9BU0VMKQotCXZhbCB8PSAyOwotICAgIGxwLT5hLndyaXRlX2JjciAoaW9hZGRyLCAyLCB2YWwpOwotCi0gICAgLyogaGFuZGxlIGZ1bGwgZHVwbGV4IHNldHRpbmcgKi8KLSAgICBpZiAobHAtPm1paV9pZi5mdWxsX2R1cGxleCkgewotCXZhbCA9IGxwLT5hLnJlYWRfYmNyIChpb2FkZHIsIDkpICYgfjM7Ci0JaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0ZEKSB7Ci0JICAgIHZhbCB8PSAxOwotCSAgICBpZiAobHAtPm9wdGlvbnMgPT0gKFBDTkVUMzJfUE9SVF9GRCB8IFBDTkVUMzJfUE9SVF9BVUkpKQotCQl2YWwgfD0gMjsKLQl9IGVsc2UgaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0FTRUwpIHsKLQkvKiB3b3JrYXJvdW5kIG9mIHhTZXJpZXMyNTAsIHR1cm4gb24gZm9yIDc5Qzk3NSBvbmx5ICovCi0JICAgIGkgPSAoKGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgODgpIHwKLQkJCShscC0+YS5yZWFkX2Nzcihpb2FkZHIsODkpIDw8IDE2KSkgPj4gMTIpICYgMHhmZmZmOwotCSAgICBpZiAoaSA9PSAweDI2MjcpCi0JCXZhbCB8PSAzOworCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJnBjbmV0MzJfaW50ZXJydXB0LAorCQkJbHAtPnNoYXJlZF9pcnEgPyBTQV9TSElSUSA6IDAsIGRldi0+bmFtZSwKKwkJCSh2b2lkICopZGV2KSkgeworCQlyZXR1cm4gLUVBR0FJTjsKIAl9Ci0JbHAtPmEud3JpdGVfYmNyIChpb2FkZHIsIDksIHZhbCk7Ci0gICAgfQogCi0gICAgLyogc2V0L3Jlc2V0IEdQU0kgYml0IGluIHRlc3QgcmVnaXN0ZXIgKi8KLSAgICB2YWwgPSBscC0+YS5yZWFkX2NzciAoaW9hZGRyLCAxMjQpICYgfjB4MTA7Ci0gICAgaWYgKChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9QT1JUU0VMKSA9PSBQQ05FVDMyX1BPUlRfR1BTSSkKLQl2YWwgfD0gMHgxMDsKLSAgICBscC0+YS53cml0ZV9jc3IgKGlvYWRkciwgMTI0LCB2YWwpOworCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOworCS8qIENoZWNrIGZvciBhIHZhbGlkIHN0YXRpb24gYWRkcmVzcyAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KIAotICAgIC8qIEFsbGllZCBUZWxlc3luIEFUIDI3MDAvMjcwMSBGWCBhcmUgMTAwTWJpdCBvbmx5IGFuZCBkbyBub3QgbmVnb3RpYXRlICovCi0gICAgaWYgKGxwLT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVQgJiYKKwkvKiBSZXNldCB0aGUgUENORVQzMiAqLworCWxwLT5hLnJlc2V0KGlvYWRkcik7CisKKwkvKiBzd2l0Y2ggcGNuZXQzMiB0byAzMmJpdCBtb2RlICovCisJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMjAsIDIpOworCisJaWYgKG5ldGlmX21zZ19pZnVwKGxwKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICIlczogcGNuZXQzMl9vcGVuKCkgaXJxICVkIHR4L3J4IHJpbmdzICUjeC8lI3ggaW5pdCAlI3guXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgKHUzMikgKGxwLT50eF9yaW5nX2RtYV9hZGRyKSwKKwkJICAgICAgICh1MzIpIChscC0+cnhfcmluZ19kbWFfYWRkciksCisJCSAgICAgICAodTMyKSAobHAtPmRtYV9hZGRyICsKKwkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBwY25ldDMyX3ByaXZhdGUsIGluaXRfYmxvY2spKSk7CisKKwkvKiBzZXQvcmVzZXQgYXV0b3NlbGVjdCBiaXQgKi8KKwl2YWwgPSBscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDIpICYgfjI7CisJaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0FTRUwpCisJCXZhbCB8PSAyOworCWxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDIsIHZhbCk7CisKKwkvKiBoYW5kbGUgZnVsbCBkdXBsZXggc2V0dGluZyAqLworCWlmIChscC0+bWlpX2lmLmZ1bGxfZHVwbGV4KSB7CisJCXZhbCA9IGxwLT5hLnJlYWRfYmNyKGlvYWRkciwgOSkgJiB+MzsKKwkJaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0ZEKSB7CisJCQl2YWwgfD0gMTsKKwkJCWlmIChscC0+b3B0aW9ucyA9PSAoUENORVQzMl9QT1JUX0ZEIHwgUENORVQzMl9QT1JUX0FVSSkpCisJCQkJdmFsIHw9IDI7CisJCX0gZWxzZSBpZiAobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfQVNFTCkgeworCQkJLyogd29ya2Fyb3VuZCBvZiB4U2VyaWVzMjUwLCB0dXJuIG9uIGZvciA3OUM5NzUgb25seSAqLworCQkJaSA9ICgobHAtPmEucmVhZF9jc3IoaW9hZGRyLCA4OCkgfAorCQkJICAgICAgKGxwLT5hLgorCQkJICAgICAgIHJlYWRfY3NyKGlvYWRkciwgODkpIDw8IDE2KSkgPj4gMTIpICYgMHhmZmZmOworCQkJaWYgKGkgPT0gMHgyNjI3KQorCQkJCXZhbCB8PSAzOworCQl9CisJCWxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDksIHZhbCk7CisJfQorCisJLyogc2V0L3Jlc2V0IEdQU0kgYml0IGluIHRlc3QgcmVnaXN0ZXIgKi8KKwl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDEyNCkgJiB+MHgxMDsKKwlpZiAoKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX1BPUlRTRUwpID09IFBDTkVUMzJfUE9SVF9HUFNJKQorCQl2YWwgfD0gMHgxMDsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAxMjQsIHZhbCk7CisKKwkvKiBBbGxpZWQgVGVsZXN5biBBVCAyNzAwLzI3MDEgRlggYXJlIDEwME1iaXQgb25seSBhbmQgZG8gbm90IG5lZ290aWF0ZSAqLworCWlmIChscC0+cGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FUICYmCiAJICAgIChscC0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSA9PSBQQ0lfU1VCREVWSUNFX0lEX0FUXzI3MDBGWCB8fAogCSAgICAgbHAtPnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9BVF8yNzAxRlgpKSB7Ci0JaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0FTRUwpIHsKLQkgICAgbHAtPm9wdGlvbnMgPSBQQ05FVDMyX1BPUlRfRkQgfCBQQ05FVDMyX1BPUlRfMTAwOwotCSAgICBpZiAobmV0aWZfbXNnX2xpbmsobHApKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNldHRpbmcgMTAwTWItRnVsbCBEdXBsZXguXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0FTRUwpIHsKKwkJCWxwLT5vcHRpb25zID0gUENORVQzMl9QT1JUX0ZEIHwgUENORVQzMl9QT1JUXzEwMDsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhscCkpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgIiVzOiBTZXR0aW5nIDEwME1iLUZ1bGwgRHVwbGV4LlxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJfQogCX0KLSAgICB9Ci0gICAgewotCS8qCi0JICogMjQgSnVuIDIwMDQgYWNjb3JkaW5nIEFNRCwgaW4gb3JkZXIgdG8gY2hhbmdlIHRoZSBQSFksCi0JICogREFOQVMgKG9yIERJU1BNIGZvciA3OUM5NzYpIG11c3QgYmUgc2V0OyB0aGVuIHNlbGVjdCB0aGUgc3BlZWQsCi0JICogZHVwbGV4LCBhbmQvb3IgZW5hYmxlIGF1dG8gbmVnb3RpYXRpb24sIGFuZCBjbGVhciBEQU5BUwotCSAqLwotCWlmIChscC0+bWlpICYmICEobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfQVNFTCkpIHsKLQkgICAgbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMzIsCi0JCQkJbHAtPmEucmVhZF9iY3IoaW9hZGRyLCAzMikgfCAweDAwODApOwotCSAgICAvKiBkaXNhYmxlIEF1dG8gTmVnb3RpYXRpb24sIHNldCAxME1wYnMsIEhEICovCi0JICAgIHZhbCA9IGxwLT5hLnJlYWRfYmNyKGlvYWRkciwgMzIpICYgfjB4Yjg7Ci0JICAgIGlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9GRCkKLQkJdmFsIHw9IDB4MTA7Ci0JICAgIGlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF8xMDApCi0JCXZhbCB8PSAweDA4OwotCSAgICBscC0+YS53cml0ZV9iY3IgKGlvYWRkciwgMzIsIHZhbCk7CisJaWYgKGxwLT5waHljb3VudCA8IDIpIHsKKwkJLyoKKwkJICogMjQgSnVuIDIwMDQgYWNjb3JkaW5nIEFNRCwgaW4gb3JkZXIgdG8gY2hhbmdlIHRoZSBQSFksCisJCSAqIERBTkFTIChvciBESVNQTSBmb3IgNzlDOTc2KSBtdXN0IGJlIHNldDsgdGhlbiBzZWxlY3QgdGhlIHNwZWVkLAorCQkgKiBkdXBsZXgsIGFuZC9vciBlbmFibGUgYXV0byBuZWdvdGlhdGlvbiwgYW5kIGNsZWFyIERBTkFTCisJCSAqLworCQlpZiAobHAtPm1paSAmJiAhKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0FTRUwpKSB7CisJCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMiwKKwkJCQkJbHAtPmEucmVhZF9iY3IoaW9hZGRyLCAzMikgfCAweDAwODApOworCQkJLyogZGlzYWJsZSBBdXRvIE5lZ290aWF0aW9uLCBzZXQgMTBNcGJzLCBIRCAqLworCQkJdmFsID0gbHAtPmEucmVhZF9iY3IoaW9hZGRyLCAzMikgJiB+MHhiODsKKwkJCWlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9GRCkKKwkJCQl2YWwgfD0gMHgxMDsKKwkJCWlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF8xMDApCisJCQkJdmFsIHw9IDB4MDg7CisJCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMiwgdmFsKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9BU0VMKSB7CisJCQkJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMzIsCisJCQkJCQlscC0+YS5yZWFkX2Jjcihpb2FkZHIsCisJCQkJCQkJICAgICAgIDMyKSB8IDB4MDA4MCk7CisJCQkJLyogZW5hYmxlIGF1dG8gbmVnb3RpYXRlLCBzZXR1cCwgZGlzYWJsZSBmZCAqLworCQkJCXZhbCA9IGxwLT5hLnJlYWRfYmNyKGlvYWRkciwgMzIpICYgfjB4OTg7CisJCQkJdmFsIHw9IDB4MjA7CisJCQkJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMzIsIHZhbCk7CisJCQl9CisJCX0KIAl9IGVsc2UgewotCSAgICBpZiAobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfQVNFTCkgewotCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMiwKLQkJCWxwLT5hLnJlYWRfYmNyKGlvYWRkciwgMzIpIHwgMHgwMDgwKTsKLQkJLyogZW5hYmxlIGF1dG8gbmVnb3RpYXRlLCBzZXR1cCwgZGlzYWJsZSBmZCAqLwotCQl2YWwgPSBscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDMyKSAmIH4weDk4OwotCQl2YWwgfD0gMHgyMDsKLQkJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMzIsIHZhbCk7Ci0JICAgIH0KKwkJaW50IGZpcnN0X3BoeSA9IC0xOworCQl1MTYgYm1jcjsKKwkJdTMyIGJjcjk7CisJCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOworCisJCS8qCisJCSAqIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG90aGVyIHdheSB0byBoYW5kbGUgbXVsdGlwbGUgUEhZcworCQkgKiBvdGhlciB0aGFuIHR1cm5pbmcgb2ZmIGFsbCBhdXRvbWF0aWNzCisJCSAqLworCQl2YWwgPSBscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDIpOworCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAyLCB2YWwgJiB+Mik7CisJCXZhbCA9IGxwLT5hLnJlYWRfYmNyKGlvYWRkciwgMzIpOworCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMiwgdmFsICYgfigxIDw8IDcpKTsJLyogc3RvcCBNSUkgbWFuYWdlciAqLworCisJCWlmICghKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0FTRUwpKSB7CisJCQkvKiBzZXR1cCBlY21kICovCisJCQllY21kLnBvcnQgPSBQT1JUX01JSTsKKwkJCWVjbWQudHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCQkJZWNtZC5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQkJZWNtZC5zcGVlZCA9CisJCQkgICAgbHAtPgorCQkJICAgIG9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfMTAwID8gU1BFRURfMTAwIDogU1BFRURfMTA7CisJCQliY3I5ID0gbHAtPmEucmVhZF9iY3IoaW9hZGRyLCA5KTsKKworCQkJaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0ZEKSB7CisJCQkJZWNtZC5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCQliY3I5IHw9ICgxIDw8IDApOworCQkJfSBlbHNlIHsKKwkJCQllY21kLmR1cGxleCA9IERVUExFWF9IQUxGOworCQkJCWJjcjkgfD0gfigxIDw8IDApOworCQkJfQorCQkJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgOSwgYmNyOSk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgUENORVQzMl9NQVhfUEhZUzsgaSsrKSB7CisJCQlpZiAobHAtPnBoeW1hc2sgJiAoMSA8PCBpKSkgeworCQkJCS8qIGlzb2xhdGUgYWxsIGJ1dCB0aGUgZmlyc3QgUEhZICovCisJCQkJYm1jciA9IG1kaW9fcmVhZChkZXYsIGksIE1JSV9CTUNSKTsKKwkJCQlpZiAoZmlyc3RfcGh5ID09IC0xKSB7CisJCQkJCWZpcnN0X3BoeSA9IGk7CisJCQkJCW1kaW9fd3JpdGUoZGV2LCBpLCBNSUlfQk1DUiwKKwkJCQkJCSAgIGJtY3IgJiB+Qk1DUl9JU09MQVRFKTsKKwkJCQl9IGVsc2UgeworCQkJCQltZGlvX3dyaXRlKGRldiwgaSwgTUlJX0JNQ1IsCisJCQkJCQkgICBibWNyIHwgQk1DUl9JU09MQVRFKTsKKwkJCQl9CisJCQkJLyogdXNlIG1paV9ldGh0b29sX3NzZXQgdG8gc2V0dXAgUEhZICovCisJCQkJbHAtPm1paV9pZi5waHlfaWQgPSBpOworCQkJCWVjbWQucGh5X2FkZHJlc3MgPSBpOworCQkJCWlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9BU0VMKSB7CisJCQkJCW1paV9ldGh0b29sX2dzZXQoJmxwLT5taWlfaWYsICZlY21kKTsKKwkJCQkJZWNtZC5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJCQkJfQorCQkJCW1paV9ldGh0b29sX3NzZXQoJmxwLT5taWlfaWYsICZlY21kKTsKKwkJCX0KKwkJfQorCQlscC0+bWlpX2lmLnBoeV9pZCA9IGZpcnN0X3BoeTsKKwkJaWYgKG5ldGlmX21zZ19saW5rKGxwKSkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVc2luZyBQSFkgbnVtYmVyICVkLlxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGZpcnN0X3BoeSk7CiAJfQotICAgIH0KIAogI2lmZGVmIERPX0RYU1VGTE8KLSAgICBpZiAobHAtPmR4c3VmbG8pIHsgLyogRGlzYWJsZSB0cmFuc21pdCBzdG9wIG9uIHVuZGVyZmxvdyAqLwotCXZhbCA9IGxwLT5hLnJlYWRfY3NyIChpb2FkZHIsIDMpOwotCXZhbCB8PSAweDQwOwotCWxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCAzLCB2YWwpOwotICAgIH0KKwlpZiAobHAtPmR4c3VmbG8pIHsJLyogRGlzYWJsZSB0cmFuc21pdCBzdG9wIG9uIHVuZGVyZmxvdyAqLworCQl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDMpOworCQl2YWwgfD0gMHg0MDsKKwkJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgMywgdmFsKTsKKwl9CiAjZW5kaWYKIAotICAgIGxwLT5pbml0X2Jsb2NrLm1vZGUgPSBsZTE2X3RvX2NwdSgobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfUE9SVFNFTCkgPDwgNyk7Ci0gICAgcGNuZXQzMl9sb2FkX211bHRpY2FzdChkZXYpOworCWxwLT5pbml0X2Jsb2NrLm1vZGUgPQorCSAgICBsZTE2X3RvX2NwdSgobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfUE9SVFNFTCkgPDwgNyk7CisJcGNuZXQzMl9sb2FkX211bHRpY2FzdChkZXYpOwogCi0gICAgaWYgKHBjbmV0MzJfaW5pdF9yaW5nKGRldikpIHsKLQlyYyA9IC1FTk9NRU07Ci0JZ290byBlcnJfZnJlZV9yaW5nOwotICAgIH0KLQotICAgIC8qIFJlLWluaXRpYWxpemUgdGhlIFBDTkVUMzIsIGFuZCBzdGFydCBpdCB3aGVuIGRvbmUuICovCi0gICAgbHAtPmEud3JpdGVfY3NyIChpb2FkZHIsIDEsIChscC0+ZG1hX2FkZHIgKwotCQlvZmZzZXRvZihzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlLCBpbml0X2Jsb2NrKSkgJiAweGZmZmYpOwotICAgIGxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCAyLCAobHAtPmRtYV9hZGRyICsKLQkJb2Zmc2V0b2Yoc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSwgaW5pdF9ibG9jaykpID4+IDE2KTsKLQotICAgIGxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCA0LCAweDA5MTUpOwotICAgIGxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCAwLCAweDAwMDEpOwotCi0gICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQotICAgIC8qIElmIHdlIGhhdmUgbWlpLCBwcmludCB0aGUgbGluayBzdGF0dXMgYW5kIHN0YXJ0IHRoZSB3YXRjaGRvZyAqLwotICAgIGlmIChscC0+bWlpKSB7Ci0JbWlpX2NoZWNrX21lZGlhICgmbHAtPm1paV9pZiwgbmV0aWZfbXNnX2xpbmsobHApLCAxKTsKLQltb2RfdGltZXIgKCYobHAtPndhdGNoZG9nX3RpbWVyKSwgUENORVQzMl9XQVRDSERPR19USU1FT1VUKTsKLSAgICB9Ci0KLSAgICBpID0gMDsKLSAgICB3aGlsZSAoaSsrIDwgMTAwKQotCWlmIChscC0+YS5yZWFkX2NzciAoaW9hZGRyLCAwKSAmIDB4MDEwMCkKLQkgICAgYnJlYWs7Ci0gICAgLyoKLSAgICAgKiBXZSB1c2VkIHRvIGNsZWFyIHRoZSBJbml0RG9uZSBiaXQsIDB4MDEwMCwgaGVyZSBidXQgTWFyayBTdG9ja3RvbgotICAgICAqIHJlcG9ydHMgdGhhdCBkb2luZyBzbyB0cmlnZ2VycyBhIGJ1ZyBpbiB0aGUgJzk3NC4KLSAgICAgKi8KLSAgICBscC0+YS53cml0ZV9jc3IgKGlvYWRkciwgMCwgMHgwMDQyKTsKLQotICAgIGlmIChuZXRpZl9tc2dfaWZ1cChscCkpCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwY25ldDMyIG9wZW4gYWZ0ZXIgJWQgdGlja3MsIGluaXQgYmxvY2sgJSN4IGNzcjAgJTQuNHguXG4iLAotCQlkZXYtPm5hbWUsIGksICh1MzIpIChscC0+ZG1hX2FkZHIgKwotCQkgICAgb2Zmc2V0b2Yoc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSwgaW5pdF9ibG9jaykpLAotCQlscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApKTsKLQotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0KLSAgICByZXR1cm4gMDsJLyogQWx3YXlzIHN1Y2NlZWQgKi8KLQotZXJyX2ZyZWVfcmluZzoKLSAgICAvKiBmcmVlIGFueSBhbGxvY2F0ZWQgc2tidWZmcyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBscC0+cnhfcmluZ19zaXplOyBpKyspIHsKLQlscC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOwotCWlmIChscC0+cnhfc2tidWZmW2ldKSB7Ci0JICAgIHBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsIGxwLT5yeF9kbWFfYWRkcltpXSwgUEtUX0JVRl9TWi0yLAotCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkgICAgZGV2X2tmcmVlX3NrYihscC0+cnhfc2tidWZmW2ldKTsKKwlpZiAocGNuZXQzMl9pbml0X3JpbmcoZGV2KSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfcmluZzsKIAl9Ci0JbHAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7Ci0JbHAtPnJ4X2RtYV9hZGRyW2ldID0gMDsKLSAgICB9CiAKLSAgICBwY25ldDMyX2ZyZWVfcmluZyhkZXYpOworCS8qIFJlLWluaXRpYWxpemUgdGhlIFBDTkVUMzIsIGFuZCBzdGFydCBpdCB3aGVuIGRvbmUuICovCisJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgMSwgKGxwLT5kbWFfYWRkciArCisJCQkJICAgIG9mZnNldG9mKHN0cnVjdCBwY25ldDMyX3ByaXZhdGUsCisJCQkJCSAgICAgaW5pdF9ibG9jaykpICYgMHhmZmZmKTsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAyLAorCQkJKGxwLT5kbWFfYWRkciArCisJCQkgb2Zmc2V0b2Yoc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSwgaW5pdF9ibG9jaykpID4+IDE2KTsKIAotICAgIC8qCi0gICAgICogU3dpdGNoIGJhY2sgdG8gMTZiaXQgbW9kZSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGR1bWIKLSAgICAgKiBET1MgcGFja2V0IGRyaXZlciBhZnRlciBhIHdhcm0gcmVib290Ci0gICAgICovCi0gICAgbHAtPmEud3JpdGVfYmNyIChpb2FkZHIsIDIwLCA0KTsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCA0LCAweDA5MTUpOworCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIDB4MDAwMSk7CiAKLWVycl9mcmVlX2lycToKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotICAgIGZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotICAgIHJldHVybiByYzsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJLyogUHJpbnQgdGhlIGxpbmsgc3RhdHVzIGFuZCBzdGFydCB0aGUgd2F0Y2hkb2cgKi8KKwlwY25ldDMyX2NoZWNrX21lZGlhKGRldiwgMSk7CisJbW9kX3RpbWVyKCYobHAtPndhdGNoZG9nX3RpbWVyKSwgUENORVQzMl9XQVRDSERPR19USU1FT1VUKTsKKworCWkgPSAwOworCXdoaWxlIChpKysgPCAxMDApCisJCWlmIChscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApICYgMHgwMTAwKQorCQkJYnJlYWs7CisJLyoKKwkgKiBXZSB1c2VkIHRvIGNsZWFyIHRoZSBJbml0RG9uZSBiaXQsIDB4MDEwMCwgaGVyZSBidXQgTWFyayBTdG9ja3RvbgorCSAqIHJlcG9ydHMgdGhhdCBkb2luZyBzbyB0cmlnZ2VycyBhIGJ1ZyBpbiB0aGUgJzk3NC4KKwkgKi8KKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDAwNDIpOworCisJaWYgKG5ldGlmX21zZ19pZnVwKGxwKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICIlczogcGNuZXQzMiBvcGVuIGFmdGVyICVkIHRpY2tzLCBpbml0IGJsb2NrICUjeCBjc3IwICU0LjR4LlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaSwKKwkJICAgICAgICh1MzIpIChscC0+ZG1hX2FkZHIgKworCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSwgaW5pdF9ibG9jaykpLAorCQkgICAgICAgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAwKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CQkvKiBBbHdheXMgc3VjY2VlZCAqLworCisgICAgICBlcnJfZnJlZV9yaW5nOgorCS8qIGZyZWUgYW55IGFsbG9jYXRlZCBza2J1ZmZzICovCisJZm9yIChpID0gMDsgaSA8IGxwLT5yeF9yaW5nX3NpemU7IGkrKykgeworCQlscC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOworCQlpZiAobHAtPnJ4X3NrYnVmZltpXSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGNpX2RldiwgbHAtPnJ4X2RtYV9hZGRyW2ldLAorCQkJCQkgUEtUX0JVRl9TWiAtIDIsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlkZXZfa2ZyZWVfc2tiKGxwLT5yeF9za2J1ZmZbaV0pOworCQl9CisJCWxwLT5yeF9za2J1ZmZbaV0gPSBOVUxMOworCQlscC0+cnhfZG1hX2FkZHJbaV0gPSAwOworCX0KKworCXBjbmV0MzJfZnJlZV9yaW5nKGRldik7CisKKwkvKgorCSAqIFN3aXRjaCBiYWNrIHRvIDE2Yml0IG1vZGUgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBkdW1iCisJICogRE9TIHBhY2tldCBkcml2ZXIgYWZ0ZXIgYSB3YXJtIHJlYm9vdAorCSAqLworCWxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDIwLCA0KTsKKworICAgICAgZXJyX2ZyZWVfaXJxOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtMTc0Niw3MjcgKzE4MDEsODkzIEBACiAgKiByZXN0YXJ0aW5nIHRoZSBjaGlwLCBidXQgSSdtIHRvbyBsYXp5IHRvIGRvIHNvIHJpZ2h0IG5vdy4gIGRwbGF0dEAzZG8uY29tCiAgKi8KIAotc3RhdGljIHZvaWQKLXBjbmV0MzJfcHVyZ2VfdHhfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcGNuZXQzMl9wdXJnZV90eF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0gICAgaW50IGk7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJaW50IGk7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbHAtPnR4X3Jpbmdfc2l6ZTsgaSsrKSB7Ci0JbHAtPnR4X3JpbmdbaV0uc3RhdHVzID0gMDsJLyogQ1BVIG93bnMgYnVmZmVyICovCi0Jd21iKCk7CS8qIE1ha2Ugc3VyZSBhZGFwdGVyIHNlZXMgb3duZXIgY2hhbmdlICovCi0JaWYgKGxwLT50eF9za2J1ZmZbaV0pIHsKLQkgICAgcGNpX3VubWFwX3NpbmdsZShscC0+cGNpX2RldiwgbHAtPnR4X2RtYV9hZGRyW2ldLAotCQkgICAgbHAtPnR4X3NrYnVmZltpXS0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkgICAgZGV2X2tmcmVlX3NrYl9hbnkobHAtPnR4X3NrYnVmZltpXSk7CisJZm9yIChpID0gMDsgaSA8IGxwLT50eF9yaW5nX3NpemU7IGkrKykgeworCQlscC0+dHhfcmluZ1tpXS5zdGF0dXMgPSAwOwkvKiBDUFUgb3ducyBidWZmZXIgKi8KKwkJd21iKCk7CQkvKiBNYWtlIHN1cmUgYWRhcHRlciBzZWVzIG93bmVyIGNoYW5nZSAqLworCQlpZiAobHAtPnR4X3NrYnVmZltpXSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGNpX2RldiwgbHAtPnR4X2RtYV9hZGRyW2ldLAorCQkJCQkgbHAtPnR4X3NrYnVmZltpXS0+bGVuLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShscC0+dHhfc2tidWZmW2ldKTsKKwkJfQorCQlscC0+dHhfc2tidWZmW2ldID0gTlVMTDsKKwkJbHAtPnR4X2RtYV9hZGRyW2ldID0gMDsKIAl9Ci0JbHAtPnR4X3NrYnVmZltpXSA9IE5VTEw7Ci0JbHAtPnR4X2RtYV9hZGRyW2ldID0gMDsKLSAgICB9CiB9CiAKLQogLyogSW5pdGlhbGl6ZSB0aGUgUENORVQzMiBSeCBhbmQgVHggcmluZ3MuICovCi1zdGF0aWMgaW50Ci1wY25ldDMyX2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBwY25ldDMyX2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIGludCBpOworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCWludCBpOwogCi0gICAgbHAtPnR4X2Z1bGwgPSAwOwotICAgIGxwLT5jdXJfcnggPSBscC0+Y3VyX3R4ID0gMDsKLSAgICBscC0+ZGlydHlfcnggPSBscC0+ZGlydHlfdHggPSAwOworCWxwLT50eF9mdWxsID0gMDsKKwlscC0+Y3VyX3J4ID0gbHAtPmN1cl90eCA9IDA7CisJbHAtPmRpcnR5X3J4ID0gbHAtPmRpcnR5X3R4ID0gMDsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBscC0+cnhfcmluZ19zaXplOyBpKyspIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tidWZmID0gbHAtPnJ4X3NrYnVmZltpXTsKLQlpZiAocnhfc2tidWZmID09IE5VTEwpIHsKLQkgICAgaWYgKCEocnhfc2tidWZmID0gbHAtPnJ4X3NrYnVmZltpXSA9IGRldl9hbGxvY19za2IgKFBLVF9CVUZfU1opKSkgewotCQkvKiB0aGVyZSBpcyBub3QgbXVjaCwgd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKi8KLQkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfRFJWKQotCQkgICAgcHJpbnRrKEtFUk5fRVJSICIlczogcGNuZXQzMl9pbml0X3JpbmcgZGV2X2FsbG9jX3NrYiBmYWlsZWQuXG4iLAotCQkJICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtMTsKLQkgICAgfQotCSAgICBza2JfcmVzZXJ2ZSAocnhfc2tidWZmLCAyKTsKKwlmb3IgKGkgPSAwOyBpIDwgbHAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7CisJCXN0cnVjdCBza19idWZmICpyeF9za2J1ZmYgPSBscC0+cnhfc2tidWZmW2ldOworCQlpZiAocnhfc2tidWZmID09IE5VTEwpIHsKKwkJCWlmICghCisJCQkgICAgKHJ4X3NrYnVmZiA9IGxwLT5yeF9za2J1ZmZbaV0gPQorCQkJICAgICBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU1opKSkgeworCQkJCS8qIHRoZXJlIGlzIG5vdCBtdWNoLCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCAqLworCQkJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiJXM6IHBjbmV0MzJfaW5pdF9yaW5nIGRldl9hbGxvY19za2IgZmFpbGVkLlxuIiwKKwkJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJc2tiX3Jlc2VydmUocnhfc2tidWZmLCAyKTsKKwkJfQorCisJCXJtYigpOworCQlpZiAobHAtPnJ4X2RtYV9hZGRyW2ldID09IDApCisJCQlscC0+cnhfZG1hX2FkZHJbaV0gPQorCQkJICAgIHBjaV9tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCByeF9za2J1ZmYtPmRhdGEsCisJCQkJCSAgIFBLVF9CVUZfU1ogLSAyLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlscC0+cnhfcmluZ1tpXS5iYXNlID0gKHUzMikgbGUzMl90b19jcHUobHAtPnJ4X2RtYV9hZGRyW2ldKTsKKwkJbHAtPnJ4X3JpbmdbaV0uYnVmX2xlbmd0aCA9IGxlMTZfdG9fY3B1KDIgLSBQS1RfQlVGX1NaKTsKKwkJd21iKCk7CQkvKiBNYWtlIHN1cmUgb3duZXIgY2hhbmdlcyBhZnRlciBhbGwgb3RoZXJzIGFyZSB2aXNpYmxlICovCisJCWxwLT5yeF9yaW5nW2ldLnN0YXR1cyA9IGxlMTZfdG9fY3B1KDB4ODAwMCk7CisJfQorCS8qIFRoZSBUeCBidWZmZXIgYWRkcmVzcyBpcyBmaWxsZWQgaW4gYXMgbmVlZGVkLCBidXQgd2UgZG8gbmVlZCB0byBjbGVhcgorCSAqIHRoZSB1cHBlciBvd25lcnNoaXAgYml0LiAqLworCWZvciAoaSA9IDA7IGkgPCBscC0+dHhfcmluZ19zaXplOyBpKyspIHsKKwkJbHAtPnR4X3JpbmdbaV0uc3RhdHVzID0gMDsJLyogQ1BVIG93bnMgYnVmZmVyICovCisJCXdtYigpOwkJLyogTWFrZSBzdXJlIGFkYXB0ZXIgc2VlcyBvd25lciBjaGFuZ2UgKi8KKwkJbHAtPnR4X3JpbmdbaV0uYmFzZSA9IDA7CisJCWxwLT50eF9kbWFfYWRkcltpXSA9IDA7CiAJfQogCi0Jcm1iKCk7Ci0JaWYgKGxwLT5yeF9kbWFfYWRkcltpXSA9PSAwKQotCSAgICBscC0+cnhfZG1hX2FkZHJbaV0gPSBwY2lfbWFwX3NpbmdsZShscC0+cGNpX2Rldiwgcnhfc2tidWZmLT5kYXRhLAotCQkgICAgUEtUX0JVRl9TWi0yLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCWxwLT5yeF9yaW5nW2ldLmJhc2UgPSAodTMyKWxlMzJfdG9fY3B1KGxwLT5yeF9kbWFfYWRkcltpXSk7Ci0JbHAtPnJ4X3JpbmdbaV0uYnVmX2xlbmd0aCA9IGxlMTZfdG9fY3B1KDItUEtUX0JVRl9TWik7Ci0Jd21iKCk7CS8qIE1ha2Ugc3VyZSBvd25lciBjaGFuZ2VzIGFmdGVyIGFsbCBvdGhlcnMgYXJlIHZpc2libGUgKi8KLQlscC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBsZTE2X3RvX2NwdSgweDgwMDApOwotICAgIH0KLSAgICAvKiBUaGUgVHggYnVmZmVyIGFkZHJlc3MgaXMgZmlsbGVkIGluIGFzIG5lZWRlZCwgYnV0IHdlIGRvIG5lZWQgdG8gY2xlYXIKLSAgICAgKiB0aGUgdXBwZXIgb3duZXJzaGlwIGJpdC4gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbHAtPnR4X3Jpbmdfc2l6ZTsgaSsrKSB7Ci0JbHAtPnR4X3JpbmdbaV0uc3RhdHVzID0gMDsJLyogQ1BVIG93bnMgYnVmZmVyICovCi0Jd21iKCk7CS8qIE1ha2Ugc3VyZSBhZGFwdGVyIHNlZXMgb3duZXIgY2hhbmdlICovCi0JbHAtPnR4X3JpbmdbaV0uYmFzZSA9IDA7Ci0JbHAtPnR4X2RtYV9hZGRyW2ldID0gMDsKLSAgICB9Ci0KLSAgICBscC0+aW5pdF9ibG9jay50bGVuX3JsZW4gPSBsZTE2X3RvX2NwdShscC0+dHhfbGVuX2JpdHMgfCBscC0+cnhfbGVuX2JpdHMpOwotICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JbHAtPmluaXRfYmxvY2sucGh5c19hZGRyW2ldID0gZGV2LT5kZXZfYWRkcltpXTsKLSAgICBscC0+aW5pdF9ibG9jay5yeF9yaW5nID0gKHUzMilsZTMyX3RvX2NwdShscC0+cnhfcmluZ19kbWFfYWRkcik7Ci0gICAgbHAtPmluaXRfYmxvY2sudHhfcmluZyA9ICh1MzIpbGUzMl90b19jcHUobHAtPnR4X3JpbmdfZG1hX2FkZHIpOwotICAgIHdtYigpOwkvKiBNYWtlIHN1cmUgYWxsIGNoYW5nZXMgYXJlIHZpc2libGUgKi8KLSAgICByZXR1cm4gMDsKKwlscC0+aW5pdF9ibG9jay50bGVuX3JsZW4gPQorCSAgICBsZTE2X3RvX2NwdShscC0+dHhfbGVuX2JpdHMgfCBscC0+cnhfbGVuX2JpdHMpOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWxwLT5pbml0X2Jsb2NrLnBoeXNfYWRkcltpXSA9IGRldi0+ZGV2X2FkZHJbaV07CisJbHAtPmluaXRfYmxvY2sucnhfcmluZyA9ICh1MzIpIGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nX2RtYV9hZGRyKTsKKwlscC0+aW5pdF9ibG9jay50eF9yaW5nID0gKHUzMikgbGUzMl90b19jcHUobHAtPnR4X3JpbmdfZG1hX2FkZHIpOworCXdtYigpOwkJCS8qIE1ha2Ugc3VyZSBhbGwgY2hhbmdlcyBhcmUgdmlzaWJsZSAqLworCXJldHVybiAwOwogfQogCiAvKiB0aGUgcGNuZXQzMiBoYXMgYmVlbiBpc3N1ZWQgYSBzdG9wIG9yIHJlc2V0LiAgV2FpdCBmb3IgdGhlIHN0b3AgYml0CiAgKiB0aGVuIGZsdXNoIHRoZSBwZW5kaW5nIHRyYW5zbWl0IG9wZXJhdGlvbnMsIHJlLWluaXRpYWxpemUgdGhlIHJpbmcsCiAgKiBhbmQgdGVsbCB0aGUgY2hpcCB0byBpbml0aWFsaXplLgogICovCi1zdGF0aWMgdm9pZAotcGNuZXQzMl9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjc3IwX2JpdHMpCitzdGF0aWMgdm9pZCBwY25ldDMyX3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNzcjBfYml0cykKIHsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICB1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotICAgIGludCBpOwotCi0gICAgLyogd2FpdCBmb3Igc3RvcCAqLwotICAgIGZvciAoaT0wOyBpPDEwMDsgaSsrKQotCWlmIChscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApICYgMHgwMDA0KQotCSAgIGJyZWFrOwotCi0gICAgaWYgKGkgPj0gMTAwICYmIG5ldGlmX21zZ19kcnYobHApKQotCXByaW50ayhLRVJOX0VSUiAiJXM6IHBjbmV0MzJfcmVzdGFydCB0aW1lZCBvdXQgd2FpdGluZyBmb3Igc3RvcC5cbiIsCi0JCWRldi0+bmFtZSk7Ci0KLSAgICBwY25ldDMyX3B1cmdlX3R4X3JpbmcoZGV2KTsKLSAgICBpZiAocGNuZXQzMl9pbml0X3JpbmcoZGV2KSkKLQlyZXR1cm47Ci0KLSAgICAvKiBSZUluaXQgUmluZyAqLwotICAgIGxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCAwLCAxKTsKLSAgICBpID0gMDsKLSAgICB3aGlsZSAoaSsrIDwgMTAwMCkKLQlpZiAobHAtPmEucmVhZF9jc3IgKGlvYWRkciwgMCkgJiAweDAxMDApCi0JICAgIGJyZWFrOwotCi0gICAgbHAtPmEud3JpdGVfY3NyIChpb2FkZHIsIDAsIGNzcjBfYml0cyk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXBjbmV0MzJfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICB1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyLCBmbGFnczsKLQotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotICAgIC8qIFRyYW5zbWl0dGVyIHRpbWVvdXQsIHNlcmlvdXMgcHJvYmxlbXMuICovCi0gICAgaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfRFJWKQotCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU0LjR4LCByZXNldHRpbmcuXG4iLAotCQlkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgMCkpOwotICAgIGxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCAwLCAweDAwMDQpOwotICAgIGxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLSAgICBpZiAobmV0aWZfbXNnX3R4X2VycihscCkpIHsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCWludCBpOwotCXByaW50ayhLRVJOX0RFQlVHICIgUmluZyBkYXRhIGR1bXA6IGRpcnR5X3R4ICVkIGN1cl90eCAlZCVzIGN1cl9yeCAlZC4iLAotCSAgIGxwLT5kaXJ0eV90eCwgbHAtPmN1cl90eCwgbHAtPnR4X2Z1bGwgPyAiIChmdWxsKSIgOiAiIiwKLQkgICBscC0+Y3VyX3J4KTsKLQlmb3IgKGkgPSAwIDsgaSA8IGxwLT5yeF9yaW5nX3NpemU7IGkrKykKLQlwcmludGsoIiVzICUwOHggJTA0eCAlMDh4ICUwNHgiLCBpICYgMSA/ICIiIDogIlxuICIsCi0JICAgICAgIGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2ldLmJhc2UpLAotCSAgICAgICAoLWxlMTZfdG9fY3B1KGxwLT5yeF9yaW5nW2ldLmJ1Zl9sZW5ndGgpKSAmIDB4ZmZmZiwKLQkgICAgICAgbGUzMl90b19jcHUobHAtPnJ4X3JpbmdbaV0ubXNnX2xlbmd0aCksCi0JICAgICAgIGxlMTZfdG9fY3B1KGxwLT5yeF9yaW5nW2ldLnN0YXR1cykpOwotCWZvciAoaSA9IDAgOyBpIDwgbHAtPnR4X3Jpbmdfc2l6ZTsgaSsrKQotCXByaW50aygiJXMgJTA4eCAlMDR4ICUwOHggJTA0eCIsIGkgJiAxID8gIiIgOiAiXG4gIiwKLQkgICAgICAgbGUzMl90b19jcHUobHAtPnR4X3JpbmdbaV0uYmFzZSksCi0JICAgICAgICgtbGUxNl90b19jcHUobHAtPnR4X3JpbmdbaV0ubGVuZ3RoKSkgJiAweGZmZmYsCi0JICAgICAgIGxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2ldLm1pc2MpLAotCSAgICAgICBsZTE2X3RvX2NwdShscC0+dHhfcmluZ1tpXS5zdGF0dXMpKTsKLQlwcmludGsoIlxuIik7Ci0gICAgfQotICAgIHBjbmV0MzJfcmVzdGFydChkZXYsIDB4MDA0Mik7CiAKLSAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLSAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7CisJLyogd2FpdCBmb3Igc3RvcCAqLworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykKKwkJaWYgKGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgMCkgJiAweDAwMDQpCisJCQlicmVhazsKIAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJaWYgKGkgPj0gMTAwICYmIG5ldGlmX21zZ19kcnYobHApKQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczogcGNuZXQzMl9yZXN0YXJ0IHRpbWVkIG91dCB3YWl0aW5nIGZvciBzdG9wLlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisKKwlwY25ldDMyX3B1cmdlX3R4X3JpbmcoZGV2KTsKKwlpZiAocGNuZXQzMl9pbml0X3JpbmcoZGV2KSkKKwkJcmV0dXJuOworCisJLyogUmVJbml0IFJpbmcgKi8KKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAxKTsKKwlpID0gMDsKKwl3aGlsZSAoaSsrIDwgMTAwMCkKKwkJaWYgKGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgMCkgJiAweDAxMDApCisJCQlicmVhazsKKworCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIGNzcjBfYml0cyk7CiB9CiAKLQotc3RhdGljIGludAotcGNuZXQzMl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBwY25ldDMyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICB1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotICAgIHUxNiBzdGF0dXM7Ci0gICAgaW50IGVudHJ5OwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkciwgZmxhZ3M7CiAKLSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkvKiBUcmFuc21pdHRlciB0aW1lb3V0LCBzZXJpb3VzIHByb2JsZW1zLiAqLworCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU0LjR4LCByZXNldHRpbmcuXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApKTsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDAwMDQpOworCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwlpZiAobmV0aWZfbXNnX3R4X2VycihscCkpIHsKKwkJaW50IGk7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiIFJpbmcgZGF0YSBkdW1wOiBkaXJ0eV90eCAlZCBjdXJfdHggJWQlcyBjdXJfcnggJWQuIiwKKwkJICAgICAgIGxwLT5kaXJ0eV90eCwgbHAtPmN1cl90eCwgbHAtPnR4X2Z1bGwgPyAiIChmdWxsKSIgOiAiIiwKKwkJICAgICAgIGxwLT5jdXJfcngpOworCQlmb3IgKGkgPSAwOyBpIDwgbHAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKQorCQkJcHJpbnRrKCIlcyAlMDh4ICUwNHggJTA4eCAlMDR4IiwgaSAmIDEgPyAiIiA6ICJcbiAiLAorCQkJICAgICAgIGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2ldLmJhc2UpLAorCQkJICAgICAgICgtbGUxNl90b19jcHUobHAtPnJ4X3JpbmdbaV0uYnVmX2xlbmd0aCkpICYKKwkJCSAgICAgICAweGZmZmYsIGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2ldLm1zZ19sZW5ndGgpLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGxwLT5yeF9yaW5nW2ldLnN0YXR1cykpOworCQlmb3IgKGkgPSAwOyBpIDwgbHAtPnR4X3Jpbmdfc2l6ZTsgaSsrKQorCQkJcHJpbnRrKCIlcyAlMDh4ICUwNHggJTA4eCAlMDR4IiwgaSAmIDEgPyAiIiA6ICJcbiAiLAorCQkJICAgICAgIGxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2ldLmJhc2UpLAorCQkJICAgICAgICgtbGUxNl90b19jcHUobHAtPnR4X3JpbmdbaV0ubGVuZ3RoKSkgJiAweGZmZmYsCisJCQkgICAgICAgbGUzMl90b19jcHUobHAtPnR4X3JpbmdbaV0ubWlzYyksCisJCQkgICAgICAgbGUxNl90b19jcHUobHAtPnR4X3JpbmdbaV0uc3RhdHVzKSk7CisJCXByaW50aygiXG4iKTsKKwl9CisJcGNuZXQzMl9yZXN0YXJ0KGRldiwgMHgwMDQyKTsKIAotICAgIGlmIChuZXRpZl9tc2dfdHhfcXVldWVkKGxwKSkgewotCXByaW50ayhLRVJOX0RFQlVHICIlczogcGNuZXQzMl9zdGFydF94bWl0KCkgY2FsbGVkLCBjc3IwICU0LjR4LlxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApKTsKLSAgICB9CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCi0gICAgLyogRGVmYXVsdCBzdGF0dXMgLS0gd2lsbCBub3QgZW5hYmxlIFN1Y2Nlc3NmdWwtVHhEb25lCi0gICAgICogaW50ZXJydXB0IHdoZW4gdGhhdCBvcHRpb24gaXMgYXZhaWxhYmxlIHRvIHVzLgotICAgICAqLwotICAgIHN0YXR1cyA9IDB4ODMwMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworfQogCi0gICAgLyogRmlsbCBpbiBhIFR4IHJpbmcgZW50cnkgKi8KK3N0YXRpYyBpbnQgcGNuZXQzMl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1MTYgc3RhdHVzOworCWludCBlbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgLyogTWFzayB0byByaW5nIGJ1ZmZlciBib3VuZGFyeS4gKi8KLSAgICBlbnRyeSA9IGxwLT5jdXJfdHggJiBscC0+dHhfbW9kX21hc2s7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLSAgICAvKiBDYXV0aW9uOiB0aGUgd3JpdGUgb3JkZXIgaXMgaW1wb3J0YW50IGhlcmUsIHNldCB0aGUgc3RhdHVzCi0gICAgICogd2l0aCB0aGUgIm93bmVyc2hpcCIgYml0cyBsYXN0LiAqLworCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKGxwKSkgeworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIiVzOiBwY25ldDMyX3N0YXJ0X3htaXQoKSBjYWxsZWQsIGNzcjAgJTQuNHguXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApKTsKKwl9CiAKLSAgICBscC0+dHhfcmluZ1tlbnRyeV0ubGVuZ3RoID0gbGUxNl90b19jcHUoLXNrYi0+bGVuKTsKKwkvKiBEZWZhdWx0IHN0YXR1cyAtLSB3aWxsIG5vdCBlbmFibGUgU3VjY2Vzc2Z1bC1UeERvbmUKKwkgKiBpbnRlcnJ1cHQgd2hlbiB0aGF0IG9wdGlvbiBpcyBhdmFpbGFibGUgdG8gdXMuCisJICovCisJc3RhdHVzID0gMHg4MzAwOwogCi0gICAgbHAtPnR4X3JpbmdbZW50cnldLm1pc2MgPSAweDAwMDAwMDAwOworCS8qIEZpbGwgaW4gYSBUeCByaW5nIGVudHJ5ICovCiAKLSAgICBscC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKLSAgICBscC0+dHhfZG1hX2FkZHJbZW50cnldID0gcGNpX21hcF9zaW5nbGUobHAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotICAgIGxwLT50eF9yaW5nW2VudHJ5XS5iYXNlID0gKHUzMilsZTMyX3RvX2NwdShscC0+dHhfZG1hX2FkZHJbZW50cnldKTsKLSAgICB3bWIoKTsgLyogTWFrZSBzdXJlIG93bmVyIGNoYW5nZXMgYWZ0ZXIgYWxsIG90aGVycyBhcmUgdmlzaWJsZSAqLwotICAgIGxwLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMgPSBsZTE2X3RvX2NwdShzdGF0dXMpOworCS8qIE1hc2sgdG8gcmluZyBidWZmZXIgYm91bmRhcnkuICovCisJZW50cnkgPSBscC0+Y3VyX3R4ICYgbHAtPnR4X21vZF9tYXNrOwogCi0gICAgbHAtPmN1cl90eCsrOwotICAgIGxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkvKiBDYXV0aW9uOiB0aGUgd3JpdGUgb3JkZXIgaXMgaW1wb3J0YW50IGhlcmUsIHNldCB0aGUgc3RhdHVzCisJICogd2l0aCB0aGUgIm93bmVyc2hpcCIgYml0cyBsYXN0LiAqLwogCi0gICAgLyogVHJpZ2dlciBhbiBpbW1lZGlhdGUgc2VuZCBwb2xsLiAqLwotICAgIGxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCAwLCAweDAwNDgpOworCWxwLT50eF9yaW5nW2VudHJ5XS5sZW5ndGggPSBsZTE2X3RvX2NwdSgtc2tiLT5sZW4pOwogCi0gICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbHAtPnR4X3JpbmdbZW50cnldLm1pc2MgPSAweDAwMDAwMDAwOwogCi0gICAgaWYgKGxwLT50eF9yaW5nWyhlbnRyeSsxKSAmIGxwLT50eF9tb2RfbWFza10uYmFzZSAhPSAwKSB7Ci0JbHAtPnR4X2Z1bGwgPSAxOwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICB9Ci0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLSAgICByZXR1cm4gMDsKKwlscC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKKwlscC0+dHhfZG1hX2FkZHJbZW50cnldID0KKwkgICAgcGNpX21hcF9zaW5nbGUobHAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCWxwLT50eF9yaW5nW2VudHJ5XS5iYXNlID0gKHUzMikgbGUzMl90b19jcHUobHAtPnR4X2RtYV9hZGRyW2VudHJ5XSk7CisJd21iKCk7CQkJLyogTWFrZSBzdXJlIG93bmVyIGNoYW5nZXMgYWZ0ZXIgYWxsIG90aGVycyBhcmUgdmlzaWJsZSAqLworCWxwLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMgPSBsZTE2X3RvX2NwdShzdGF0dXMpOworCisJbHAtPmN1cl90eCsrOworCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKworCS8qIFRyaWdnZXIgYW4gaW1tZWRpYXRlIHNlbmQgcG9sbC4gKi8KKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDAwNDgpOworCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwlpZiAobHAtPnR4X3JpbmdbKGVudHJ5ICsgMSkgJiBscC0+dHhfbW9kX21hc2tdLmJhc2UgIT0gMCkgeworCQlscC0+dHhfZnVsbCA9IDE7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogVGhlIFBDTkVUMzIgaW50ZXJydXB0IGhhbmRsZXIuICovCiBzdGF0aWMgaXJxcmV0dXJuX3QKLXBjbmV0MzJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQorcGNuZXQzMl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwOwotICAgIHVuc2lnbmVkIGxvbmcgaW9hZGRyOwotICAgIHUxNiBjc3IwLHJhcDsKLSAgICBpbnQgYm9ndXNjbnQgPSAgbWF4X2ludGVycnVwdF93b3JrOwotICAgIGludCBtdXN0X3Jlc3RhcnQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscDsKKwl1bnNpZ25lZCBsb25nIGlvYWRkcjsKKwl1MTYgY3NyMCwgcmFwOworCWludCBib2d1c2NudCA9IG1heF9pbnRlcnJ1cHRfd29yazsKKwlpbnQgbXVzdF9yZXN0YXJ0OwogCi0gICAgaWYgKCFkZXYpIHsKLQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19JTlRSKQotCSAgICBwcmludGsgKEtFUk5fREVCVUcgIiVzKCk6IGlycSAlZCBmb3IgdW5rbm93biBkZXZpY2VcbiIsCi0JCV9fRlVOQ1RJT05fXywgaXJxKTsKLQlyZXR1cm4gSVJRX05PTkU7Ci0gICAgfQotCi0gICAgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgbHAgPSBkZXYtPnByaXY7Ci0KLSAgICBzcGluX2xvY2soJmxwLT5sb2NrKTsKLQotICAgIHJhcCA9IGxwLT5hLnJlYWRfcmFwKGlvYWRkcik7Ci0gICAgd2hpbGUgKChjc3IwID0gbHAtPmEucmVhZF9jc3IgKGlvYWRkciwgMCkpICYgMHg4ZjAwICYmIC0tYm9ndXNjbnQgPj0gMCkgewotCWlmIChjc3IwID09IDB4ZmZmZikgewotCSAgICBicmVhazsJCQkvKiBQQ01DSUEgcmVtb3ZlIGhhcHBlbmVkICovCisJaWYgKCFkZXYpIHsKKwkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfSU5UUikKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcygpOiBpcnEgJWQgZm9yIHVua25vd24gZGV2aWNlXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJcmV0dXJuIElSUV9OT05FOwogCX0KLQkvKiBBY2tub3dsZWRnZSBhbGwgb2YgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHNvdXJjZXMgQVNBUC4gKi8KLQlscC0+YS53cml0ZV9jc3IgKGlvYWRkciwgMCwgY3NyMCAmIH4weDAwNGYpOwogCi0JbXVzdF9yZXN0YXJ0ID0gMDsKKwlpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlscCA9IGRldi0+cHJpdjsKKworCXNwaW5fbG9jaygmbHAtPmxvY2spOworCisJcmFwID0gbHAtPmEucmVhZF9yYXAoaW9hZGRyKTsKKwl3aGlsZSAoKGNzcjAgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApKSAmIDB4OGYwMCAmJiAtLWJvZ3VzY250ID49IDApIHsKKwkJaWYgKGNzcjAgPT0gMHhmZmZmKSB7CisJCQlicmVhazsJLyogUENNQ0lBIHJlbW92ZSBoYXBwZW5lZCAqLworCQl9CisJCS8qIEFja25vd2xlZGdlIGFsbCBvZiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc291cmNlcyBBU0FQLiAqLworCQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCBjc3IwICYgfjB4MDA0Zik7CisKKwkJbXVzdF9yZXN0YXJ0ID0gMDsKKworCQlpZiAobmV0aWZfbXNnX2ludHIobHApKQorCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiJXM6IGludGVycnVwdCAgY3NyMD0lIzIuMnggbmV3IGNzcj0lIzIuMnguXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgY3NyMCwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAwKSk7CisKKwkJaWYgKGNzcjAgJiAweDA0MDApCS8qIFJ4IGludGVycnVwdCAqLworCQkJcGNuZXQzMl9yeChkZXYpOworCisJCWlmIChjc3IwICYgMHgwMjAwKSB7CS8qIFR4LWRvbmUgaW50ZXJydXB0ICovCisJCQl1bnNpZ25lZCBpbnQgZGlydHlfdHggPSBscC0+ZGlydHlfdHg7CisJCQlpbnQgZGVsdGE7CisKKwkJCXdoaWxlIChkaXJ0eV90eCAhPSBscC0+Y3VyX3R4KSB7CisJCQkJaW50IGVudHJ5ID0gZGlydHlfdHggJiBscC0+dHhfbW9kX21hc2s7CisJCQkJaW50IHN0YXR1cyA9CisJCQkJICAgIChzaG9ydClsZTE2X3RvX2NwdShscC0+dHhfcmluZ1tlbnRyeV0uCisJCQkJCQkgICAgICAgc3RhdHVzKTsKKworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlicmVhazsJLyogSXQgc3RpbGwgaGFzbid0IGJlZW4gVHhlZCAqLworCisJCQkJbHAtPnR4X3JpbmdbZW50cnldLmJhc2UgPSAwOworCisJCQkJaWYgKHN0YXR1cyAmIDB4NDAwMCkgeworCQkJCQkvKiBUaGVyZSB3YXMgYW4gbWFqb3IgZXJyb3IsIGxvZyBpdC4gKi8KKwkJCQkJaW50IGVycl9zdGF0dXMgPQorCQkJCQkgICAgbGUzMl90b19jcHUobHAtPnR4X3JpbmdbZW50cnldLgorCQkJCQkJCW1pc2MpOworCQkJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJCQkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKGxwKSkKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJICAgICAgICIlczogVHggZXJyb3Igc3RhdHVzPSUwNHggZXJyX3N0YXR1cz0lMDh4XG4iLAorCQkJCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzLAorCQkJCQkJICAgICAgIGVycl9zdGF0dXMpOworCQkJCQlpZiAoZXJyX3N0YXR1cyAmIDB4MDQwMDAwMDApCisJCQkJCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCQkJaWYgKGVycl9zdGF0dXMgJiAweDA4MDAwMDAwKQorCQkJCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJCWlmIChlcnJfc3RhdHVzICYgMHgxMDAwMDAwMCkKKwkJCQkJCWxwLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisjaWZuZGVmIERPX0RYU1VGTE8KKwkJCQkJaWYgKGVycl9zdGF0dXMgJiAweDQwMDAwMDAwKSB7CisJCQkJCQlscC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCQkJCS8qIEFja2shICBPbiBGSUZPIGVycm9ycyB0aGUgVHggdW5pdCBpcyB0dXJuZWQgb2ZmISAqLworCQkJCQkJLyogUmVtb3ZlIHRoaXMgdmVyYm9zaXR5IGxhdGVyISAqLworCQkJCQkJaWYgKG5ldGlmX21zZ190eF9lcnIobHApKQorCQkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJCSAgICAgICAiJXM6IFR4IEZJRk8gZXJyb3IhIENTUjA9JTQuNHhcbiIsCisJCQkJCQkJICAgICAgIGRldi0+bmFtZSwgY3NyMCk7CisJCQkJCQltdXN0X3Jlc3RhcnQgPSAxOworCQkJCQl9CisjZWxzZQorCQkJCQlpZiAoZXJyX3N0YXR1cyAmIDB4NDAwMDAwMDApIHsKKwkJCQkJCWxwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJCQkJaWYgKCFscC0+ZHhzdWZsbykgewkvKiBJZiBjb250cm9sbGVyIGRvZXNuJ3QgcmVjb3ZlciAuLi4gKi8KKwkJCQkJCQkvKiBBY2trISAgT24gRklGTyBlcnJvcnMgdGhlIFR4IHVuaXQgaXMgdHVybmVkIG9mZiEgKi8KKwkJCQkJCQkvKiBSZW1vdmUgdGhpcyB2ZXJib3NpdHkgbGF0ZXIhICovCisJCQkJCQkJaWYgKG5ldGlmX21zZ190eF9lcnIKKwkJCQkJCQkgICAgKGxwKSkKKwkJCQkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkJCSAgICAgICAiJXM6IFR4IEZJRk8gZXJyb3IhIENTUjA9JTQuNHhcbiIsCisJCQkJCQkJCSAgICAgICBkZXYtPgorCQkJCQkJCQkgICAgICAgbmFtZSwKKwkJCQkJCQkJICAgICAgIGNzcjApOworCQkJCQkJCW11c3RfcmVzdGFydCA9IDE7CisJCQkJCQl9CisJCQkJCX0KKyNlbmRpZgorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzdGF0dXMgJiAweDE4MDApCisJCQkJCQlscC0+c3RhdHMuY29sbGlzaW9ucysrOworCQkJCQlscC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJCX0KKworCQkJCS8qIFdlIG11c3QgZnJlZSB0aGUgb3JpZ2luYWwgc2tiICovCisJCQkJaWYgKGxwLT50eF9za2J1ZmZbZW50cnldKSB7CisJCQkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsCisJCQkJCQkJIGxwLT50eF9kbWFfYWRkcltlbnRyeV0sCisJCQkJCQkJIGxwLT50eF9za2J1ZmZbZW50cnldLT4KKwkJCQkJCQkgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJZGV2X2tmcmVlX3NrYl9pcnEobHAtPnR4X3NrYnVmZltlbnRyeV0pOworCQkJCQlscC0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CisJCQkJCWxwLT50eF9kbWFfYWRkcltlbnRyeV0gPSAwOworCQkJCX0KKwkJCQlkaXJ0eV90eCsrOworCQkJfQorCisJCQlkZWx0YSA9CisJCQkgICAgKGxwLT5jdXJfdHggLSBkaXJ0eV90eCkgJiAobHAtPnR4X21vZF9tYXNrICsKKwkJCQkJCSAgICAgICBscC0+dHhfcmluZ19zaXplKTsKKwkJCWlmIChkZWx0YSA+IGxwLT50eF9yaW5nX3NpemUpIHsKKwkJCQlpZiAobmV0aWZfbXNnX2RydihscCkpCisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgIiVzOiBvdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWQsIGZ1bGw9JWQuXG4iLAorCQkJCQkgICAgICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgbHAtPmN1cl90eCwKKwkJCQkJICAgICAgIGxwLT50eF9mdWxsKTsKKwkJCQlkaXJ0eV90eCArPSBscC0+dHhfcmluZ19zaXplOworCQkJCWRlbHRhIC09IGxwLT50eF9yaW5nX3NpemU7CisJCQl9CisKKwkJCWlmIChscC0+dHhfZnVsbCAmJgorCQkJICAgIG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJgorCQkJICAgIGRlbHRhIDwgbHAtPnR4X3Jpbmdfc2l6ZSAtIDIpIHsKKwkJCQkvKiBUaGUgcmluZyBpcyBubyBsb25nZXIgZnVsbCwgY2xlYXIgdGJ1c3kuICovCisJCQkJbHAtPnR4X2Z1bGwgPSAwOworCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJCX0KKwkJCWxwLT5kaXJ0eV90eCA9IGRpcnR5X3R4OworCQl9CisKKwkJLyogTG9nIG1pc2MgZXJyb3JzLiAqLworCQlpZiAoY3NyMCAmIDB4NDAwMCkKKwkJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsJLyogVHggYmFiYmxlLiAqLworCQlpZiAoY3NyMCAmIDB4MTAwMCkgeworCQkJLyoKKwkJCSAqIHRoaXMgaGFwcGVucyB3aGVuIG91ciByZWNlaXZlIHJpbmcgaXMgZnVsbC4gVGhpcyBzaG91bGRuJ3QKKwkJCSAqIGJlIGEgcHJvYmxlbSBhcyB3ZSB3aWxsIHNlZSBub3JtYWwgcnggaW50ZXJydXB0cyBmb3IgdGhlIGZyYW1lcworCQkJICogaW4gdGhlIHJlY2VpdmUgcmluZy4gQnV0IHRoZXJlIGFyZSBzb21lIFBDSSBjaGlwc2V0cyAoSSBjYW4KKwkJCSAqIHJlcHJvZHVjZSB0aGlzIG9uIFNQM0cgd2l0aCBJbnRlbCBzYXR1cm4gY2hpcHNldCkgd2hpY2ggaGF2ZQorCQkJICogc29tZXRpbWVzIHByb2JsZW1zIGFuZCB3aWxsIGZpbGwgdXAgdGhlIHJlY2VpdmUgcmluZyB3aXRoCisJCQkgKiBlcnJvciBkZXNjcmlwdG9ycy4gSW4gdGhpcyBzaXR1YXRpb24gd2UgZG9uJ3QgZ2V0IGEgcngKKwkJCSAqIGludGVycnVwdCwgYnV0IGEgbWlzc2VkIGZyYW1lIGludGVycnVwdCBzb29uZXIgb3IgbGF0ZXIuCisJCQkgKiBTbyB3ZSB0cnkgdG8gY2xlYW4gdXAgb3VyIHJlY2VpdmUgcmluZyBoZXJlLgorCQkJICovCisJCQlwY25ldDMyX3J4KGRldik7CisJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CS8qIE1pc3NlZCBhIFJ4IGZyYW1lLiAqLworCQl9CisJCWlmIChjc3IwICYgMHgwODAwKSB7CisJCQlpZiAobmV0aWZfbXNnX2RydihscCkpCisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogQnVzIG1hc3RlciBhcmJpdHJhdGlvbiBmYWlsdXJlLCBzdGF0dXMgJTQuNHguXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjApOworCQkJLyogdW5saWtlIGZvciB0aGUgbGFuY2UsIHRoZXJlIGlzIG5vIHJlc3RhcnQgbmVlZGVkICovCisJCX0KKworCQlpZiAobXVzdF9yZXN0YXJ0KSB7CisJCQkvKiByZXNldCB0aGUgY2hpcCB0byBjbGVhciB0aGUgZXJyb3IgY29uZGl0aW9uLCB0aGVuIHJlc3RhcnQgKi8KKwkJCWxwLT5hLnJlc2V0KGlvYWRkcik7CisJCQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCA0LCAweDA5MTUpOworCQkJcGNuZXQzMl9yZXN0YXJ0KGRldiwgMHgwMDAyKTsKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJfQorCX0KKworCS8qIFNldCBpbnRlcnJ1cHQgZW5hYmxlLiAqLworCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIDB4MDA0MCk7CisJbHAtPmEud3JpdGVfcmFwKGlvYWRkciwgcmFwKTsKIAogCWlmIChuZXRpZl9tc2dfaW50cihscCkpCi0JICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogaW50ZXJydXB0ICBjc3IwPSUjMi4yeCBuZXcgY3NyPSUjMi4yeC5cbiIsCi0JCSAgIGRldi0+bmFtZSwgY3NyMCwgbHAtPmEucmVhZF9jc3IgKGlvYWRkciwgMCkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBjc3IwPSUjNC40eC5cbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgMCkpOwogCi0JaWYgKGNzcjAgJiAweDA0MDApCQkvKiBSeCBpbnRlcnJ1cHQgKi8KLQkgICAgcGNuZXQzMl9yeChkZXYpOworCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CiAKLQlpZiAoY3NyMCAmIDB4MDIwMCkgewkJLyogVHgtZG9uZSBpbnRlcnJ1cHQgKi8KLQkgICAgdW5zaWduZWQgaW50IGRpcnR5X3R4ID0gbHAtPmRpcnR5X3R4OwotCSAgICBpbnQgZGVsdGE7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQogCi0JICAgIHdoaWxlIChkaXJ0eV90eCAhPSBscC0+Y3VyX3R4KSB7Ci0JCWludCBlbnRyeSA9IGRpcnR5X3R4ICYgbHAtPnR4X21vZF9tYXNrOwotCQlpbnQgc3RhdHVzID0gKHNob3J0KWxlMTZfdG9fY3B1KGxwLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMpOworc3RhdGljIGludCBwY25ldDMyX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJaW50IGVudHJ5ID0gbHAtPmN1cl9yeCAmIGxwLT5yeF9tb2RfbWFzazsKKwlpbnQgYm9ndXNjbnQgPSBscC0+cnhfcmluZ19zaXplIC8gMjsKIAotCQlpZiAoc3RhdHVzIDwgMCkKLQkJICAgIGJyZWFrOwkJLyogSXQgc3RpbGwgaGFzbid0IGJlZW4gVHhlZCAqLworCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCisJd2hpbGUgKChzaG9ydClsZTE2X3RvX2NwdShscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKSA+PSAwKSB7CisJCWludCBzdGF0dXMgPSAoc2hvcnQpbGUxNl90b19jcHUobHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cykgPj4gODsKIAotCQlscC0+dHhfcmluZ1tlbnRyeV0uYmFzZSA9IDA7CisJCWlmIChzdGF0dXMgIT0gMHgwMykgewkvKiBUaGVyZSB3YXMgYW4gZXJyb3IuICovCisJCQkvKgorCQkJICogVGhlcmUgaXMgYSB0cmlja3kgZXJyb3Igbm90ZWQgYnkgSm9obiBNdXJwaHksCisJCQkgKiA8bXVyZkBwZXJmdGVjaC5jb20+IHRvIFJ1c3MgTmVsc29uOiBFdmVuIHdpdGggZnVsbC1zaXplZAorCQkJICogYnVmZmVycyBpdCdzIHBvc3NpYmxlIGZvciBhIGphYmJlciBwYWNrZXQgdG8gdXNlIHR3bworCQkJICogYnVmZmVycywgd2l0aCBvbmx5IHRoZSBsYXN0IGNvcnJlY3RseSBub3RpbmcgdGhlIGVycm9yLgorCQkJICovCisJCQlpZiAoc3RhdHVzICYgMHgwMSkJLyogT25seSBjb3VudCBhIGdlbmVyYWwgZXJyb3IgYXQgdGhlICovCisJCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwkvKiBlbmQgb2YgYSBwYWNrZXQuICovCisJCQlpZiAoc3RhdHVzICYgMHgyMCkKKwkJCQlscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQlpZiAoc3RhdHVzICYgMHgxMCkKKwkJCQlscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCWlmIChzdGF0dXMgJiAweDA4KQorCQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQlpZiAoc3RhdHVzICYgMHgwNCkKKwkJCQlscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCWxwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJj0gbGUxNl90b19jcHUoMHgwM2ZmKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE1hbGxvYyB1cCBuZXcgYnVmZmVyLCBjb21wYXRpYmxlIHdpdGggbmV0LTJlLiAqLworCQkJc2hvcnQgcGt0X2xlbiA9CisJCQkgICAgKGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2VudHJ5XS5tc2dfbGVuZ3RoKSAmIDB4ZmZmKQorCQkJICAgIC0gNDsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJaWYgKHN0YXR1cyAmIDB4NDAwMCkgewotCQkgICAgLyogVGhlcmUgd2FzIGFuIG1ham9yIGVycm9yLCBsb2cgaXQuICovCi0JCSAgICBpbnQgZXJyX3N0YXR1cyA9IGxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2VudHJ5XS5taXNjKTsKLQkJICAgIGxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJICAgIGlmIChuZXRpZl9tc2dfdHhfZXJyKGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFR4IGVycm9yIHN0YXR1cz0lMDR4IGVycl9zdGF0dXM9JTA4eFxuIiwKLQkJCQlkZXYtPm5hbWUsIHN0YXR1cywgZXJyX3N0YXR1cyk7Ci0JCSAgICBpZiAoZXJyX3N0YXR1cyAmIDB4MDQwMDAwMDApIGxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkgICAgaWYgKGVycl9zdGF0dXMgJiAweDA4MDAwMDAwKSBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJICAgIGlmIChlcnJfc3RhdHVzICYgMHgxMDAwMDAwMCkgbHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKLSNpZm5kZWYgRE9fRFhTVUZMTwotCQkgICAgaWYgKGVycl9zdGF0dXMgJiAweDQwMDAwMDAwKSB7Ci0JCQlscC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKLQkJCS8qIEFja2shICBPbiBGSUZPIGVycm9ycyB0aGUgVHggdW5pdCBpcyB0dXJuZWQgb2ZmISAqLwotCQkJLyogUmVtb3ZlIHRoaXMgdmVyYm9zaXR5IGxhdGVyISAqLwotCQkJaWYgKG5ldGlmX21zZ190eF9lcnIobHApKQotCQkJICAgIHByaW50ayhLRVJOX0VSUiAiJXM6IFR4IEZJRk8gZXJyb3IhIENTUjA9JTQuNHhcbiIsCi0JCQkJICAgIGRldi0+bmFtZSwgY3NyMCk7Ci0JCQltdXN0X3Jlc3RhcnQgPSAxOwotCQkgICAgfQotI2Vsc2UKLQkJICAgIGlmIChlcnJfc3RhdHVzICYgMHg0MDAwMDAwMCkgewotCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7Ci0JCQlpZiAoISBscC0+ZHhzdWZsbykgeyAgLyogSWYgY29udHJvbGxlciBkb2Vzbid0IHJlY292ZXIgLi4uICovCi0JCQkgICAgLyogQWNrayEgIE9uIEZJRk8gZXJyb3JzIHRoZSBUeCB1bml0IGlzIHR1cm5lZCBvZmYhICovCi0JCQkgICAgLyogUmVtb3ZlIHRoaXMgdmVyYm9zaXR5IGxhdGVyISAqLwotCQkJICAgIGlmIChuZXRpZl9tc2dfdHhfZXJyKGxwKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUeCBGSUZPIGVycm9yISBDU1IwPSU0LjR4XG4iLAotCQkJCQlkZXYtPm5hbWUsIGNzcjApOwotCQkJICAgIG11c3RfcmVzdGFydCA9IDE7CisJCQkvKiBEaXNjYXJkIG92ZXJzaXplIGZyYW1lcy4gKi8KKwkJCWlmICh1bmxpa2VseShwa3RfbGVuID4gUEtUX0JVRl9TWiAtIDIpKSB7CisJCQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQorCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICIlczogSW1wb3NzaWJsZSBwYWNrZXQgc2l6ZSAlZCFcbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4pOworCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCX0gZWxzZSBpZiAocGt0X2xlbiA8IDYwKSB7CisJCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIobHApKQorCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSdW50IHBhY2tldCFcbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCX0gZWxzZSB7CisJCQkJaW50IHJ4X2luX3BsYWNlID0gMDsKKworCQkJCWlmIChwa3RfbGVuID4gcnhfY29weWJyZWFrKSB7CisJCQkJCXN0cnVjdCBza19idWZmICpuZXdza2I7CisKKwkJCQkJaWYgKChuZXdza2IgPQorCQkJCQkgICAgIGRldl9hbGxvY19za2IoUEtUX0JVRl9TWikpKSB7CisJCQkJCQlza2JfcmVzZXJ2ZShuZXdza2IsIDIpOworCQkJCQkJc2tiID0gbHAtPnJ4X3NrYnVmZltlbnRyeV07CisJCQkJCQlwY2lfdW5tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LAorCQkJCQkJCQkgbHAtPgorCQkJCQkJCQkgcnhfZG1hX2FkZHIKKwkJCQkJCQkJIFtlbnRyeV0sCisJCQkJCQkJCSBQS1RfQlVGX1NaIC0gMiwKKwkJCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CisJCQkJCQlscC0+cnhfc2tidWZmW2VudHJ5XSA9IG5ld3NrYjsKKwkJCQkJCW5ld3NrYi0+ZGV2ID0gZGV2OworCQkJCQkJbHAtPnJ4X2RtYV9hZGRyW2VudHJ5XSA9CisJCQkJCQkgICAgcGNpX21hcF9zaW5nbGUobHAtPnBjaV9kZXYsCisJCQkJCQkJCSAgIG5ld3NrYi0+ZGF0YSwKKwkJCQkJCQkJICAgUEtUX0JVRl9TWiAtCisJCQkJCQkJCSAgIDIsCisJCQkJCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCQlscC0+cnhfcmluZ1tlbnRyeV0uYmFzZSA9CisJCQkJCQkgICAgbGUzMl90b19jcHUobHAtPgorCQkJCQkJCQlyeF9kbWFfYWRkcgorCQkJCQkJCQlbZW50cnldKTsKKwkJCQkJCXJ4X2luX3BsYWNlID0gMTsKKwkJCQkJfSBlbHNlCisJCQkJCQlza2IgPSBOVUxMOworCQkJCX0gZWxzZSB7CisJCQkJCXNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbiArIDIpOworCQkJCX0KKworCQkJCWlmIChza2IgPT0gTlVMTCkgeworCQkJCQlpbnQgaTsKKwkJCQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQorCQkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkgICAgICAgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZGVmZXJyaW5nIHBhY2tldC5cbiIsCisJCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQkJZm9yIChpID0gMDsgaSA8IGxwLT5yeF9yaW5nX3NpemU7IGkrKykKKwkJCQkJCWlmICgoc2hvcnQpCisJCQkJCQkgICAgbGUxNl90b19jcHUobHAtPgorCQkJCQkJCQlyeF9yaW5nWyhlbnRyeSArCisJCQkJCQkJCQkgaSkKKwkJCQkJCQkJCSYgbHAtPgorCQkJCQkJCQkJcnhfbW9kX21hc2tdLgorCQkJCQkJCQlzdGF0dXMpIDwgMCkKKwkJCQkJCQlicmVhazsKKworCQkJCQlpZiAoaSA+IGxwLT5yeF9yaW5nX3NpemUgLSAyKSB7CisJCQkJCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCQkJbHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyB8PQorCQkJCQkJICAgIGxlMTZfdG9fY3B1KDB4ODAwMCk7CisJCQkJCQl3bWIoKTsJLyogTWFrZSBzdXJlIGFkYXB0ZXIgc2VlcyBvd25lciBjaGFuZ2UgKi8KKwkJCQkJCWxwLT5jdXJfcngrKzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2tiLT5kZXYgPSBkZXY7CisJCQkJaWYgKCFyeF9pbl9wbGFjZSkgeworCQkJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduICovCisJCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsJLyogTWFrZSByb29tICovCisJCQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShscC0+cGNpX2RldiwKKwkJCQkJCQkJICAgIGxwLT4KKwkJCQkJCQkJICAgIHJ4X2RtYV9hZGRyCisJCQkJCQkJCSAgICBbZW50cnldLAorCQkJCQkJCQkgICAgUEtUX0JVRl9TWiAtCisJCQkJCQkJCSAgICAyLAorCQkJCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJZXRoX2NvcHlfYW5kX3N1bShza2IsCisJCQkJCQkJICh1bnNpZ25lZCBjaGFyICopKGxwLT4KKwkJCQkJCQkJCSAgIHJ4X3NrYnVmZgorCQkJCQkJCQkJICAgW2VudHJ5XS0+CisJCQkJCQkJCQkgICBkYXRhKSwKKwkJCQkJCQkgcGt0X2xlbiwgMCk7CisJCQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShscC0+CisJCQkJCQkJCSAgICAgICBwY2lfZGV2LAorCQkJCQkJCQkgICAgICAgbHAtPgorCQkJCQkJCQkgICAgICAgcnhfZG1hX2FkZHIKKwkJCQkJCQkJICAgICAgIFtlbnRyeV0sCisJCQkJCQkJCSAgICAgICBQS1RfQlVGX1NaCisJCQkJCQkJCSAgICAgICAtIDIsCisJCQkJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCX0KKwkJCQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCQluZXRpZl9yeChza2IpOworCQkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCX0KLQkJICAgIH0KLSNlbmRpZgotCQl9IGVsc2UgewotCQkgICAgaWYgKHN0YXR1cyAmIDB4MTgwMCkKLQkJCWxwLT5zdGF0cy5jb2xsaXNpb25zKys7Ci0JCSAgICBscC0+c3RhdHMudHhfcGFja2V0cysrOwogCQl9Ci0KLQkJLyogV2UgbXVzdCBmcmVlIHRoZSBvcmlnaW5hbCBza2IgKi8KLQkJaWYgKGxwLT50eF9za2J1ZmZbZW50cnldKSB7Ci0JCSAgICBwY2lfdW5tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBscC0+dHhfZG1hX2FkZHJbZW50cnldLAotCQkJbHAtPnR4X3NrYnVmZltlbnRyeV0tPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCSAgICBkZXZfa2ZyZWVfc2tiX2lycShscC0+dHhfc2tidWZmW2VudHJ5XSk7Ci0JCSAgICBscC0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7Ci0JCSAgICBscC0+dHhfZG1hX2FkZHJbZW50cnldID0gMDsKLQkJfQotCQlkaXJ0eV90eCsrOwotCSAgICB9Ci0KLQkgICAgZGVsdGEgPSAobHAtPmN1cl90eCAtIGRpcnR5X3R4KSAmIChscC0+dHhfbW9kX21hc2sgKyBscC0+dHhfcmluZ19zaXplKTsKLQkgICAgaWYgKGRlbHRhID4gbHAtPnR4X3Jpbmdfc2l6ZSkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCSAgICBwcmludGsoS0VSTl9FUlIgIiVzOiBvdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWQsIGZ1bGw9JWQuXG4iLAotCQkJICAgIGRldi0+bmFtZSwgZGlydHlfdHgsIGxwLT5jdXJfdHgsIGxwLT50eF9mdWxsKTsKLQkJZGlydHlfdHggKz0gbHAtPnR4X3Jpbmdfc2l6ZTsKLQkJZGVsdGEgLT0gbHAtPnR4X3Jpbmdfc2l6ZTsKLQkgICAgfQotCi0JICAgIGlmIChscC0+dHhfZnVsbCAmJgotCQluZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYKLQkJZGVsdGEgPCBscC0+dHhfcmluZ19zaXplIC0gMikgewotCQkvKiBUaGUgcmluZyBpcyBubyBsb25nZXIgZnVsbCwgY2xlYXIgdGJ1c3kuICovCi0JCWxwLT50eF9mdWxsID0gMDsKLQkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKLQkgICAgfQotCSAgICBscC0+ZGlydHlfdHggPSBkaXJ0eV90eDsKKwkJLyoKKwkJICogVGhlIGRvY3Mgc2F5IHRoYXQgdGhlIGJ1ZmZlciBsZW5ndGggaXNuJ3QgdG91Y2hlZCwgYnV0IEFuZHJldyBCb3lkCisJCSAqIG9mIFFOWCByZXBvcnRzIHRoYXQgc29tZSByZXZzIG9mIHRoZSA3OUM5NjUgY2xlYXIgaXQuCisJCSAqLworCQlscC0+cnhfcmluZ1tlbnRyeV0uYnVmX2xlbmd0aCA9IGxlMTZfdG9fY3B1KDIgLSBQS1RfQlVGX1NaKTsKKwkJd21iKCk7CQkvKiBNYWtlIHN1cmUgb3duZXIgY2hhbmdlcyBhZnRlciBhbGwgb3RoZXJzIGFyZSB2aXNpYmxlICovCisJCWxwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgfD0gbGUxNl90b19jcHUoMHg4MDAwKTsKKwkJZW50cnkgPSAoKytscC0+Y3VyX3J4KSAmIGxwLT5yeF9tb2RfbWFzazsKKwkJaWYgKC0tYm9ndXNjbnQgPD0gMCkKKwkJCWJyZWFrOwkvKiBkb24ndCBzdGF5IGluIGxvb3AgZm9yZXZlciAqLwogCX0KIAotCS8qIExvZyBtaXNjIGVycm9ycy4gKi8KLQlpZiAoY3NyMCAmIDB4NDAwMCkgbHAtPnN0YXRzLnR4X2Vycm9ycysrOyAvKiBUeCBiYWJibGUuICovCi0JaWYgKGNzcjAgJiAweDEwMDApIHsKLQkgICAgLyoKLQkgICAgICogdGhpcyBoYXBwZW5zIHdoZW4gb3VyIHJlY2VpdmUgcmluZyBpcyBmdWxsLiBUaGlzIHNob3VsZG4ndAotCSAgICAgKiBiZSBhIHByb2JsZW0gYXMgd2Ugd2lsbCBzZWUgbm9ybWFsIHJ4IGludGVycnVwdHMgZm9yIHRoZSBmcmFtZXMKLQkgICAgICogaW4gdGhlIHJlY2VpdmUgcmluZy4gQnV0IHRoZXJlIGFyZSBzb21lIFBDSSBjaGlwc2V0cyAoSSBjYW4KLQkgICAgICogcmVwcm9kdWNlIHRoaXMgb24gU1AzRyB3aXRoIEludGVsIHNhdHVybiBjaGlwc2V0KSB3aGljaCBoYXZlCi0JICAgICAqIHNvbWV0aW1lcyBwcm9ibGVtcyBhbmQgd2lsbCBmaWxsIHVwIHRoZSByZWNlaXZlIHJpbmcgd2l0aAotCSAgICAgKiBlcnJvciBkZXNjcmlwdG9ycy4gSW4gdGhpcyBzaXR1YXRpb24gd2UgZG9uJ3QgZ2V0IGEgcngKLQkgICAgICogaW50ZXJydXB0LCBidXQgYSBtaXNzZWQgZnJhbWUgaW50ZXJydXB0IHNvb25lciBvciBsYXRlci4KLQkgICAgICogU28gd2UgdHJ5IHRvIGNsZWFuIHVwIG91ciByZWNlaXZlIHJpbmcgaGVyZS4KLQkgICAgICovCi0JICAgIHBjbmV0MzJfcngoZGV2KTsKLQkgICAgbHAtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KLQl9Ci0JaWYgKGNzcjAgJiAweDA4MDApIHsKLQkgICAgaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCdXMgbWFzdGVyIGFyYml0cmF0aW9uIGZhaWx1cmUsIHN0YXR1cyAlNC40eC5cbiIsCi0JCQlkZXYtPm5hbWUsIGNzcjApOwotCSAgICAvKiB1bmxpa2UgZm9yIHRoZSBsYW5jZSwgdGhlcmUgaXMgbm8gcmVzdGFydCBuZWVkZWQgKi8KLQl9Ci0KLQlpZiAobXVzdF9yZXN0YXJ0KSB7Ci0JICAgIC8qIHJlc2V0IHRoZSBjaGlwIHRvIGNsZWFyIHRoZSBlcnJvciBjb25kaXRpb24sIHRoZW4gcmVzdGFydCAqLwotCSAgICBscC0+YS5yZXNldChpb2FkZHIpOwotCSAgICBscC0+YS53cml0ZV9jc3IoaW9hZGRyLCA0LCAweDA5MTUpOwotCSAgICBwY25ldDMyX3Jlc3RhcnQoZGV2LCAweDAwMDIpOwotCSAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQotICAgIH0KLQotICAgIC8qIFNldCBpbnRlcnJ1cHQgZW5hYmxlLiAqLwotICAgIGxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCAwLCAweDAwNDApOwotICAgIGxwLT5hLndyaXRlX3JhcCAoaW9hZGRyLHJhcCk7Ci0KLSAgICBpZiAobmV0aWZfbXNnX2ludHIobHApKQotCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpdGluZyBpbnRlcnJ1cHQsIGNzcjA9JSM0LjR4LlxuIiwKLQkJZGV2LT5uYW1lLCBscC0+YS5yZWFkX2NzciAoaW9hZGRyLCAwKSk7Ci0KLSAgICBzcGluX3VubG9jaygmbHAtPmxvY2spOwotCi0gICAgcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1wY25ldDMyX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHBjbmV0MzJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICBpbnQgZW50cnkgPSBscC0+Y3VyX3J4ICYgbHAtPnJ4X21vZF9tYXNrOwotICAgIGludCBib2d1c2NudCA9IGxwLT5yeF9yaW5nX3NpemUgLyAyOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgIC8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCi0gICAgd2hpbGUgKChzaG9ydClsZTE2X3RvX2NwdShscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKSA+PSAwKSB7Ci0JaW50IHN0YXR1cyA9IChzaG9ydClsZTE2X3RvX2NwdShscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKSA+PiA4OworCWRlbF90aW1lcl9zeW5jKCZscC0+d2F0Y2hkb2dfdGltZXIpOwogCi0JaWYgKHN0YXR1cyAhPSAweDAzKSB7CQkJLyogVGhlcmUgd2FzIGFuIGVycm9yLiAqLwotCSAgICAvKgotCSAgICAgKiBUaGVyZSBpcyBhIHRyaWNreSBlcnJvciBub3RlZCBieSBKb2huIE11cnBoeSwKLQkgICAgICogPG11cmZAcGVyZnRlY2guY29tPiB0byBSdXNzIE5lbHNvbjogRXZlbiB3aXRoIGZ1bGwtc2l6ZWQKLQkgICAgICogYnVmZmVycyBpdCdzIHBvc3NpYmxlIGZvciBhIGphYmJlciBwYWNrZXQgdG8gdXNlIHR3bwotCSAgICAgKiBidWZmZXJzLCB3aXRoIG9ubHkgdGhlIGxhc3QgY29ycmVjdGx5IG5vdGluZyB0aGUgZXJyb3IuCi0JICAgICAqLwotCSAgICBpZiAoc3RhdHVzICYgMHgwMSkJLyogT25seSBjb3VudCBhIGdlbmVyYWwgZXJyb3IgYXQgdGhlICovCi0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCi0JICAgIGlmIChzdGF0dXMgJiAweDIwKSBscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiAweDEwKSBscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkgICAgaWYgKHN0YXR1cyAmIDB4MDgpIGxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JICAgIGlmIChzdGF0dXMgJiAweDA0KSBscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKLQkgICAgbHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyAmPSBsZTE2X3RvX2NwdSgweDAzZmYpOwotCX0gZWxzZSB7Ci0JICAgIC8qIE1hbGxvYyB1cCBuZXcgYnVmZmVyLCBjb21wYXRpYmxlIHdpdGggbmV0LTJlLiAqLwotCSAgICBzaG9ydCBwa3RfbGVuID0gKGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2VudHJ5XS5tc2dfbGVuZ3RoKSAmIDB4ZmZmKS00OwotCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCSAgICAvKiBEaXNjYXJkIG92ZXJzaXplIGZyYW1lcy4gKi8KLQkgICAgaWYgKHVubGlrZWx5KHBrdF9sZW4gPiBQS1RfQlVGX1NaIC0gMikpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkgICAgcHJpbnRrKEtFUk5fRVJSICIlczogSW1wb3NzaWJsZSBwYWNrZXQgc2l6ZSAlZCFcbiIsCi0JCQkgICAgZGV2LT5uYW1lLCBwa3RfbGVuKTsKLQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCSAgICB9IGVsc2UgaWYgKHBrdF9sZW4gPCA2MCkgewotCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCi0JCSAgICBwcmludGsoS0VSTl9FUlIgIiVzOiBSdW50IHBhY2tldCFcbiIsIGRldi0+bmFtZSk7Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkgICAgfSBlbHNlIHsKLQkJaW50IHJ4X2luX3BsYWNlID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCQlpZiAocGt0X2xlbiA+IHJ4X2NvcHlicmVhaykgewotCQkgICAgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYjsKKwlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgMTEyKTsKIAotCQkgICAgaWYgKChuZXdza2IgPSBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU1opKSkgewotCQkJc2tiX3Jlc2VydmUgKG5ld3NrYiwgMik7Ci0JCQlza2IgPSBscC0+cnhfc2tidWZmW2VudHJ5XTsKLQkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsIGxwLT5yeF9kbWFfYWRkcltlbnRyeV0sCi0JCQkJUEtUX0JVRl9TWi0yLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJc2tiX3B1dCAoc2tiLCBwa3RfbGVuKTsKLQkJCWxwLT5yeF9za2J1ZmZbZW50cnldID0gbmV3c2tiOwotCQkJbmV3c2tiLT5kZXYgPSBkZXY7Ci0JCQlscC0+cnhfZG1hX2FkZHJbZW50cnldID0KLQkJCSAgICBwY2lfbWFwX3NpbmdsZShscC0+cGNpX2RldiwgbmV3c2tiLT5kYXRhLAotCQkJCSAgICBQS1RfQlVGX1NaLTIsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlscC0+cnhfcmluZ1tlbnRyeV0uYmFzZSA9IGxlMzJfdG9fY3B1KGxwLT5yeF9kbWFfYWRkcltlbnRyeV0pOwotCQkJcnhfaW5fcGxhY2UgPSAxOwotCQkgICAgfSBlbHNlCi0JCQlza2IgPSBOVUxMOwotCQl9IGVsc2UgewotCQkgICAgc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKzIpOwotCQl9CisJaWYgKG5ldGlmX21zZ19pZmRvd24obHApKQorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMi4yeC5cbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgMCkpOwogCi0JCWlmIChza2IgPT0gTlVMTCkgewotCQkgICAgaW50IGk7Ci0JCSAgICBpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZGVmZXJyaW5nIHBhY2tldC5cbiIsCi0JCQkJZGV2LT5uYW1lKTsKLQkJICAgIGZvciAoaSA9IDA7IGkgPCBscC0+cnhfcmluZ19zaXplOyBpKyspCi0JCQlpZiAoKHNob3J0KWxlMTZfdG9fY3B1KGxwLT5yeF9yaW5nWyhlbnRyeStpKQotCQkJCSAgICAmIGxwLT5yeF9tb2RfbWFza10uc3RhdHVzKSA8IDApCi0JCQkgICAgYnJlYWs7CisJLyogV2Ugc3RvcCB0aGUgUENORVQzMiBoZXJlIC0tIGl0IG9jY2FzaW9uYWxseSBwb2xscyBtZW1vcnkgaWYgd2UgZG9uJ3QuICovCisJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgMCwgMHgwMDA0KTsKIAotCQkgICAgaWYgKGkgPiBscC0+cnhfcmluZ19zaXplIC0yKSB7Ci0JCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJbHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyB8PSBsZTE2X3RvX2NwdSgweDgwMDApOwotCQkJd21iKCk7CS8qIE1ha2Ugc3VyZSBhZGFwdGVyIHNlZXMgb3duZXIgY2hhbmdlICovCi0JCQlscC0+Y3VyX3J4Kys7Ci0JCSAgICB9Ci0JCSAgICBicmVhazsKLQkJfQotCQlza2ItPmRldiA9IGRldjsKLQkJaWYgKCFyeF9pbl9wbGFjZSkgewotCQkgICAgc2tiX3Jlc2VydmUoc2tiLDIpOyAvKiAxNiBieXRlIGFsaWduICovCi0JCSAgICBza2JfcHV0KHNrYixwa3RfbGVuKTsJLyogTWFrZSByb29tICovCi0JCSAgICBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobHAtPnBjaV9kZXYsCi0JCQkJCQlscC0+cnhfZG1hX2FkZHJbZW50cnldLAotCQkJCQkJUEtUX0JVRl9TWi0yLAotCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJICAgIGV0aF9jb3B5X2FuZF9zdW0oc2tiLAotCQkJICAgICh1bnNpZ25lZCBjaGFyICopKGxwLT5yeF9za2J1ZmZbZW50cnldLT5kYXRhKSwKLQkJCSAgICBwa3RfbGVuLDApOwotCQkgICAgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGxwLT5wY2lfZGV2LAotCQkJCQkJICAgbHAtPnJ4X2RtYV9hZGRyW2VudHJ5XSwKLQkJCQkJCSAgIFBLVF9CVUZfU1otMiwKLQkJCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCX0KLQkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQlza2ItPnByb3RvY29sPWV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwotCQluZXRpZl9yeChza2IpOwotCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCQlscC0+c3RhdHMucnhfcGFja2V0cysrOwotCSAgICB9Ci0JfQogCS8qCi0JICogVGhlIGRvY3Mgc2F5IHRoYXQgdGhlIGJ1ZmZlciBsZW5ndGggaXNuJ3QgdG91Y2hlZCwgYnV0IEFuZHJldyBCb3lkCi0JICogb2YgUU5YIHJlcG9ydHMgdGhhdCBzb21lIHJldnMgb2YgdGhlIDc5Qzk2NSBjbGVhciBpdC4KKwkgKiBTd2l0Y2ggYmFjayB0byAxNmJpdCBtb2RlIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggZHVtYgorCSAqIERPUyBwYWNrZXQgZHJpdmVyIGFmdGVyIGEgd2FybSByZWJvb3QKIAkgKi8KLQlscC0+cnhfcmluZ1tlbnRyeV0uYnVmX2xlbmd0aCA9IGxlMTZfdG9fY3B1KDItUEtUX0JVRl9TWik7Ci0Jd21iKCk7IC8qIE1ha2Ugc3VyZSBvd25lciBjaGFuZ2VzIGFmdGVyIGFsbCBvdGhlcnMgYXJlIHZpc2libGUgKi8KLQlscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzIHw9IGxlMTZfdG9fY3B1KDB4ODAwMCk7Ci0JZW50cnkgPSAoKytscC0+Y3VyX3J4KSAmIGxwLT5yeF9tb2RfbWFzazsKLQlpZiAoLS1ib2d1c2NudCA8PSAwKSBicmVhazsJLyogZG9uJ3Qgc3RheSBpbiBsb29wIGZvcmV2ZXIgKi8KLSAgICB9CisJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMjAsIDQpOwogCi0gICAgcmV0dXJuIDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBmcmVlIGFsbCBhbGxvY2F0ZWQgc2tidWZmcyAqLworCWZvciAoaSA9IDA7IGkgPCBscC0+cnhfcmluZ19zaXplOyBpKyspIHsKKwkJbHAtPnJ4X3JpbmdbaV0uc3RhdHVzID0gMDsKKwkJd21iKCk7CQkvKiBNYWtlIHN1cmUgYWRhcHRlciBzZWVzIG93bmVyIGNoYW5nZSAqLworCQlpZiAobHAtPnJ4X3NrYnVmZltpXSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGNpX2RldiwgbHAtPnJ4X2RtYV9hZGRyW2ldLAorCQkJCQkgUEtUX0JVRl9TWiAtIDIsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlkZXZfa2ZyZWVfc2tiKGxwLT5yeF9za2J1ZmZbaV0pOworCQl9CisJCWxwLT5yeF9za2J1ZmZbaV0gPSBOVUxMOworCQlscC0+cnhfZG1hX2FkZHJbaV0gPSAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBscC0+dHhfcmluZ19zaXplOyBpKyspIHsKKwkJbHAtPnR4X3JpbmdbaV0uc3RhdHVzID0gMDsJLyogQ1BVIG93bnMgYnVmZmVyICovCisJCXdtYigpOwkJLyogTWFrZSBzdXJlIGFkYXB0ZXIgc2VlcyBvd25lciBjaGFuZ2UgKi8KKwkJaWYgKGxwLT50eF9za2J1ZmZbaV0pIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsIGxwLT50eF9kbWFfYWRkcltpXSwKKwkJCQkJIGxwLT50eF9za2J1ZmZbaV0tPmxlbiwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZGV2X2tmcmVlX3NrYihscC0+dHhfc2tidWZmW2ldKTsKKwkJfQorCQlscC0+dHhfc2tidWZmW2ldID0gTlVMTDsKKwkJbHAtPnR4X2RtYV9hZGRyW2ldID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXBjbmV0MzJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcGNuZXQzMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICB1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIGludCBpOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1MTYgc2F2ZWRfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgZGVsX3RpbWVyX3N5bmMoJmxwLT53YXRjaGRvZ190aW1lcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJc2F2ZWRfYWRkciA9IGxwLT5hLnJlYWRfcmFwKGlvYWRkcik7CisJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDExMik7CisJbHAtPmEud3JpdGVfcmFwKGlvYWRkciwgc2F2ZWRfYWRkcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCi0gICAgbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBscC0+YS5yZWFkX2NzciAoaW9hZGRyLCAxMTIpOwotCi0gICAgaWYgKG5ldGlmX21zZ19pZmRvd24obHApKQotCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnguXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyIChpb2FkZHIsIDApKTsKLQotICAgIC8qIFdlIHN0b3AgdGhlIFBDTkVUMzIgaGVyZSAtLSBpdCBvY2Nhc2lvbmFsbHkgcG9sbHMgbWVtb3J5IGlmIHdlIGRvbid0LiAqLwotICAgIGxwLT5hLndyaXRlX2NzciAoaW9hZGRyLCAwLCAweDAwMDQpOwotCi0gICAgLyoKLSAgICAgKiBTd2l0Y2ggYmFjayB0byAxNmJpdCBtb2RlIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggZHVtYgotICAgICAqIERPUyBwYWNrZXQgZHJpdmVyIGFmdGVyIGEgd2FybSByZWJvb3QKLSAgICAgKi8KLSAgICBscC0+YS53cml0ZV9iY3IgKGlvYWRkciwgMjAsIDQpOwotCi0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQotICAgIGZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0KLSAgICAvKiBmcmVlIGFsbCBhbGxvY2F0ZWQgc2tidWZmcyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBscC0+cnhfcmluZ19zaXplOyBpKyspIHsKLQlscC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOwotCXdtYigpOwkJLyogTWFrZSBzdXJlIGFkYXB0ZXIgc2VlcyBvd25lciBjaGFuZ2UgKi8KLQlpZiAobHAtPnJ4X3NrYnVmZltpXSkgewotCSAgICBwY2lfdW5tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBscC0+cnhfZG1hX2FkZHJbaV0sIFBLVF9CVUZfU1otMiwKLQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JICAgIGRldl9rZnJlZV9za2IobHAtPnJ4X3NrYnVmZltpXSk7Ci0JfQotCWxwLT5yeF9za2J1ZmZbaV0gPSBOVUxMOwotCWxwLT5yeF9kbWFfYWRkcltpXSA9IDA7Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IGxwLT50eF9yaW5nX3NpemU7IGkrKykgewotCWxwLT50eF9yaW5nW2ldLnN0YXR1cyA9IDA7CS8qIENQVSBvd25zIGJ1ZmZlciAqLwotCXdtYigpOwkJLyogTWFrZSBzdXJlIGFkYXB0ZXIgc2VlcyBvd25lciBjaGFuZ2UgKi8KLQlpZiAobHAtPnR4X3NrYnVmZltpXSkgewotCSAgICBwY2lfdW5tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBscC0+dHhfZG1hX2FkZHJbaV0sCi0JCSAgICBscC0+dHhfc2tidWZmW2ldLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCSAgICBkZXZfa2ZyZWVfc2tiKGxwLT50eF9za2J1ZmZbaV0pOwotCX0KLQlscC0+dHhfc2tidWZmW2ldID0gTlVMTDsKLQlscC0+dHhfZG1hX2FkZHJbaV0gPSAwOwotICAgIH0KLQotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLXBjbmV0MzJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0gICAgc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0gICAgdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICB1MTYgc2F2ZWRfYWRkcjsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0gICAgc2F2ZWRfYWRkciA9IGxwLT5hLnJlYWRfcmFwKGlvYWRkcik7Ci0gICAgbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBscC0+YS5yZWFkX2NzciAoaW9hZGRyLCAxMTIpOwotICAgIGxwLT5hLndyaXRlX3JhcChpb2FkZHIsIHNhdmVkX2FkZHIpOwotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0KLSAgICByZXR1cm4gJmxwLT5zdGF0czsKKwlyZXR1cm4gJmxwLT5zdGF0czsKIH0KIAogLyogdGFrZW4gZnJvbSB0aGUgc3VubGFuY2UgZHJpdmVyLCB3aGljaCBpdCB0b29rIGZyb20gdGhlIGRlcGNhIGRyaXZlciAqLwotc3RhdGljIHZvaWQgcGNuZXQzMl9sb2FkX211bHRpY2FzdCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHBjbmV0MzJfbG9hZF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLSAgICB2b2xhdGlsZSBzdHJ1Y3QgcGNuZXQzMl9pbml0X2Jsb2NrICppYiA9ICZscC0+aW5pdF9ibG9jazsKLSAgICB2b2xhdGlsZSB1MTYgKm1jYXN0X3RhYmxlID0gKHUxNiAqKSZpYi0+ZmlsdGVyOwotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pPWRldi0+bWNfbGlzdDsKLSAgICBjaGFyICphZGRyczsKLSAgICBpbnQgaTsKLSAgICB1MzIgY3JjOworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXZvbGF0aWxlIHN0cnVjdCBwY25ldDMyX2luaXRfYmxvY2sgKmliID0gJmxwLT5pbml0X2Jsb2NrOworCXZvbGF0aWxlIHUxNiAqbWNhc3RfdGFibGUgPSAodTE2ICopICYgaWItPmZpbHRlcjsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwljaGFyICphZGRyczsKKwlpbnQgaTsKKwl1MzIgY3JjOwogCi0gICAgLyogc2V0IGFsbCBtdWx0aWNhc3QgYml0cyAqLwotICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JaWItPmZpbHRlclswXSA9IDB4ZmZmZmZmZmY7Ci0JaWItPmZpbHRlclsxXSA9IDB4ZmZmZmZmZmY7CisJLyogc2V0IGFsbCBtdWx0aWNhc3QgYml0cyAqLworCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCWliLT5maWx0ZXJbMF0gPSAweGZmZmZmZmZmOworCQlpYi0+ZmlsdGVyWzFdID0gMHhmZmZmZmZmZjsKKwkJcmV0dXJuOworCX0KKwkvKiBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciAqLworCWliLT5maWx0ZXJbMF0gPSAwOworCWliLT5maWx0ZXJbMV0gPSAwOworCisJLyogQWRkIGFkZHJlc3NlcyAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOworCQlkbWkgPSBkbWktPm5leHQ7CisKKwkJLyogbXVsdGljYXN0IGFkZHJlc3M/ICovCisJCWlmICghKCphZGRycyAmIDEpKQorCQkJY29udGludWU7CisKKwkJY3JjID0gZXRoZXJfY3JjX2xlKDYsIGFkZHJzKTsKKwkJY3JjID0gY3JjID4+IDI2OworCQltY2FzdF90YWJsZVtjcmMgPj4gNF0gPQorCQkgICAgbGUxNl90b19jcHUobGUxNl90b19jcHUobWNhc3RfdGFibGVbY3JjID4+IDRdKSB8CisJCQkJKDEgPDwgKGNyYyAmIDB4ZikpKTsKKwl9CiAJcmV0dXJuOwotICAgIH0KLSAgICAvKiBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciAqLwotICAgIGliLT5maWx0ZXJbMF0gPSAwOwotICAgIGliLT5maWx0ZXJbMV0gPSAwOwotCi0gICAgLyogQWRkIGFkZHJlc3NlcyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKLQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JZG1pICAgPSBkbWktPm5leHQ7Ci0KLQkvKiBtdWx0aWNhc3QgYWRkcmVzcz8gKi8KLQlpZiAoISgqYWRkcnMgJiAxKSkKLQkgICAgY29udGludWU7Ci0KLQljcmMgPSBldGhlcl9jcmNfbGUoNiwgYWRkcnMpOwotCWNyYyA9IGNyYyA+PiAyNjsKLQltY2FzdF90YWJsZSBbY3JjID4+IDRdID0gbGUxNl90b19jcHUoCi0JCWxlMTZfdG9fY3B1KG1jYXN0X3RhYmxlIFtjcmMgPj4gNF0pIHwgKDEgPDwgKGNyYyAmIDB4ZikpKTsKLSAgICB9Ci0gICAgcmV0dXJuOwogfQogCi0KIC8qCiAgKiBTZXQgb3IgY2xlYXIgdGhlIG11bHRpY2FzdCBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRvci4KICAqLwogc3RhdGljIHZvaWQgcGNuZXQzMl9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICB1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyLCBmbGFnczsKLSAgICBzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyLCBmbGFnczsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKIAotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotICAgIGlmIChkZXYtPmZsYWdzJklGRl9QUk9NSVNDKSB7Ci0JLyogTG9nIGFueSBuZXQgdGFwcy4gKi8KLQlpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQkgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7Ci0JbHAtPmluaXRfYmxvY2subW9kZSA9IGxlMTZfdG9fY3B1KDB4ODAwMCB8IChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9QT1JUU0VMKSA8PCA3KTsKLSAgICB9IGVsc2UgewotCWxwLT5pbml0X2Jsb2NrLm1vZGUgPSBsZTE2X3RvX2NwdSgobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfUE9SVFNFTCkgPDwgNyk7Ci0JcGNuZXQzMl9sb2FkX211bHRpY2FzdCAoZGV2KTsKLSAgICB9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQkvKiBMb2cgYW55IG5ldCB0YXBzLiAqLworCQlpZiAobmV0aWZfbXNnX2h3KGxwKSkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCWxwLT5pbml0X2Jsb2NrLm1vZGUgPQorCQkgICAgbGUxNl90b19jcHUoMHg4MDAwIHwgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX1BPUlRTRUwpIDw8CisJCQkJNyk7CisJfSBlbHNlIHsKKwkJbHAtPmluaXRfYmxvY2subW9kZSA9CisJCSAgICBsZTE2X3RvX2NwdSgobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfUE9SVFNFTCkgPDwgNyk7CisJCXBjbmV0MzJfbG9hZF9tdWx0aWNhc3QoZGV2KTsKKwl9CiAKLSAgICBscC0+YS53cml0ZV9jc3IgKGlvYWRkciwgMCwgMHgwMDA0KTsgLyogVGVtcG9yYXJpbHkgc3RvcCB0aGUgbGFuY2UuICovCi0gICAgcGNuZXQzMl9yZXN0YXJ0KGRldiwgMHgwMDQyKTsgLyogIFJlc3VtZSBub3JtYWwgb3BlcmF0aW9uICovCi0gICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIDB4MDAwNCk7CS8qIFRlbXBvcmFyaWx5IHN0b3AgdGhlIGxhbmNlLiAqLworCXBjbmV0MzJfcmVzdGFydChkZXYsIDB4MDA0Mik7CS8qICBSZXN1bWUgbm9ybWFsIG9wZXJhdGlvbiAqLworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyogVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCB0aGUgbHAtPmxvY2sgaXMgaGVsZCAqLwogc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZ19udW0pCiB7Ci0gICAgc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7Ci0gICAgdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICB1MTYgdmFsX291dDsKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXUxNiB2YWxfb3V0OwogCi0gICAgaWYgKCFscC0+bWlpKQotCXJldHVybiAwOworCWlmICghbHAtPm1paSkKKwkJcmV0dXJuIDA7CiAKLSAgICBscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMywgKChwaHlfaWQgJiAweDFmKSA8PCA1KSB8IChyZWdfbnVtICYgMHgxZikpOwotICAgIHZhbF9vdXQgPSBscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDM0KTsKKwlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMywgKChwaHlfaWQgJiAweDFmKSA8PCA1KSB8IChyZWdfbnVtICYgMHgxZikpOworCXZhbF9vdXQgPSBscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDM0KTsKIAotICAgIHJldHVybiB2YWxfb3V0OworCXJldHVybiB2YWxfb3V0OwogfQogCiAvKiBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGF0IHRoZSBscC0+bG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWdfbnVtLCBpbnQgdmFsKQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIHVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotICAgIGlmICghbHAtPm1paSkKLQlyZXR1cm47CisJaWYgKCFscC0+bWlpKQorCQlyZXR1cm47CiAKLSAgICBscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAzMywgKChwaHlfaWQgJiAweDFmKSA8PCA1KSB8IChyZWdfbnVtICYgMHgxZikpOwotICAgIGxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDM0LCB2YWwpOworCWxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDMzLCAoKHBoeV9pZCAmIDB4MWYpIDw8IDUpIHwgKHJlZ19udW0gJiAweDFmKSk7CisJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMzQsIHZhbCk7CiB9CiAKIHN0YXRpYyBpbnQgcGNuZXQzMl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIGludCByYzsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgLyogU0lPQ1tHU11NSUl4eHggaW9jdGxzICovCi0gICAgaWYgKGxwLT5taWkpIHsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGdlbmVyaWNfbWlpX2lvY3RsKCZscC0+bWlpX2lmLCBpZl9taWkocnEpLCBjbWQsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0gICAgfSBlbHNlIHsKLQlyYyA9IC1FT1BOT1RTVVBQOwotICAgIH0KKwkvKiBTSU9DW0dTXU1JSXh4eCBpb2N0bHMgKi8KKwlpZiAobHAtPm1paSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJcmMgPSBnZW5lcmljX21paV9pb2N0bCgmbHAtPm1paV9pZiwgaWZfbWlpKHJxKSwgY21kLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlyYyA9IC1FT1BOT1RTVVBQOworCX0KIAotICAgIHJldHVybiByYzsKKwlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgcGNuZXQzMl9jaGVja19vdGhlcnBoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWkgPSBscC0+bWlpX2lmOworCXUxNiBibWNyOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFBDTkVUMzJfTUFYX1BIWVM7IGkrKykgeworCQlpZiAoaSA9PSBscC0+bWlpX2lmLnBoeV9pZCkKKwkJCWNvbnRpbnVlOwkvKiBza2lwIGFjdGl2ZSBwaHkgKi8KKwkJaWYgKGxwLT5waHltYXNrICYgKDEgPDwgaSkpIHsKKwkJCW1paS5waHlfaWQgPSBpOworCQkJaWYgKG1paV9saW5rX29rKCZtaWkpKSB7CisJCQkJLyogZm91bmQgUEhZIHdpdGggYWN0aXZlIGxpbmsgKi8KKwkJCQlpZiAobmV0aWZfbXNnX2xpbmsobHApKQorCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSAgICAgICAiJXM6IFVzaW5nIFBIWSBudW1iZXIgJWQuXG4iLAorCQkJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKKworCQkJCS8qIGlzb2xhdGUgaW5hY3RpdmUgcGh5ICovCisJCQkJYm1jciA9CisJCQkJICAgIG1kaW9fcmVhZChkZXYsIGxwLT5taWlfaWYucGh5X2lkLCBNSUlfQk1DUik7CisJCQkJbWRpb193cml0ZShkZXYsIGxwLT5taWlfaWYucGh5X2lkLCBNSUlfQk1DUiwKKwkJCQkJICAgYm1jciB8IEJNQ1JfSVNPTEFURSk7CisKKwkJCQkvKiBkZS1pc29sYXRlIG5ldyBwaHkgKi8KKwkJCQlibWNyID0gbWRpb19yZWFkKGRldiwgaSwgTUlJX0JNQ1IpOworCQkJCW1kaW9fd3JpdGUoZGV2LCBpLCBNSUlfQk1DUiwKKwkJCQkJICAgYm1jciAmIH5CTUNSX0lTT0xBVEUpOworCisJCQkJLyogc2V0IG5ldyBwaHkgYWRkcmVzcyAqLworCQkJCWxwLT5taWlfaWYucGh5X2lkID0gaTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNob3cgdGhlIHN0YXR1cyBvZiB0aGUgbWVkaWEuICBTaW1pbGFyIHRvIG1paV9jaGVja19tZWRpYSBob3dldmVyIGl0CisgKiBjb3JyZWN0bHkgc2hvd3MgdGhlIGxpbmsgc3BlZWQgZm9yIGFsbCAodGVzdGVkKSBwY25ldDMyIHZhcmlhbnRzLgorICogRGV2aWNlcyB3aXRoIG5vIG1paSBqdXN0IHJlcG9ydCBsaW5rIHN0YXRlIHdpdGhvdXQgc3BlZWQuCisgKgorICogQ2FsbGVyIGlzIGFzc3VtZWQgdG8gaG9sZCBhbmQgcmVsZWFzZSB0aGUgbHAtPmxvY2suCisgKi8KKworc3RhdGljIHZvaWQgcGNuZXQzMl9jaGVja19tZWRpYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdmVyYm9zZSkKK3sKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlpbnQgY3Vycl9saW5rOworCWludCBwcmV2X2xpbmsgPSBuZXRpZl9jYXJyaWVyX29rKGRldikgPyAxIDogMDsKKwl1MzIgYmNyOTsKKworCWlmIChscC0+bWlpKSB7CisJCWN1cnJfbGluayA9IG1paV9saW5rX29rKCZscC0+bWlpX2lmKTsKKwl9IGVsc2UgeworCQl1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsJLyogY2FyZCBiYXNlIEkvTyBhZGRyZXNzICovCisJCWN1cnJfbGluayA9IChscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDQpICE9IDB4YzApOworCX0KKwlpZiAoIWN1cnJfbGluaykgeworCQlpZiAocHJldl9saW5rIHx8IHZlcmJvc2UpIHsKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCQlpZiAobmV0aWZfbXNnX2xpbmsobHApKQorCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJCX0KKwkJaWYgKGxwLT5waHljb3VudCA+IDEpIHsKKwkJCWN1cnJfbGluayA9IHBjbmV0MzJfY2hlY2tfb3RoZXJwaHkoZGV2KTsKKwkJCXByZXZfbGluayA9IDA7CisJCX0KKwl9IGVsc2UgaWYgKHZlcmJvc2UgfHwgIXByZXZfbGluaykgeworCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCWlmIChscC0+bWlpKSB7CisJCQlpZiAobmV0aWZfbXNnX2xpbmsobHApKSB7CisJCQkJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisJCQkJbWlpX2V0aHRvb2xfZ3NldCgmbHAtPm1paV9pZiwgJmVjbWQpOworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgIiVzOiBsaW5rIHVwLCAlc01icHMsICVzLWR1cGxleFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLAorCQkJCSAgICAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDApID8gIjEwMCIgOiAiMTAiLAorCQkJCSAgICAgICAoZWNtZC5kdXBsZXggPT0KKwkJCQkJRFVQTEVYX0ZVTEwpID8gImZ1bGwiIDogImhhbGYiKTsKKwkJCX0KKwkJCWJjcjkgPSBscC0+YS5yZWFkX2JjcihkZXYtPmJhc2VfYWRkciwgOSk7CisJCQlpZiAoKGJjcjkgJiAoMSA8PCAwKSkgIT0gbHAtPm1paV9pZi5mdWxsX2R1cGxleCkgeworCQkJCWlmIChscC0+bWlpX2lmLmZ1bGxfZHVwbGV4KQorCQkJCQliY3I5IHw9ICgxIDw8IDApOworCQkJCWVsc2UKKwkJCQkJYmNyOSAmPSB+KDEgPDwgMCk7CisJCQkJbHAtPmEud3JpdGVfYmNyKGRldi0+YmFzZV9hZGRyLCA5LCBiY3I5KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhscCkpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdXBcbiIsIGRldi0+bmFtZSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDaGVjayBmb3IgbG9zcyBvZiBsaW5rIGFuZCBsaW5rIGVzdGFibGlzaG1lbnQuCisgKiBDYW4gbm90IHVzZSBtaWlfY2hlY2tfbWVkaWEgYmVjYXVzZSBpdCBkb2VzIG5vdGhpbmcgaWYgbW9kZSBpcyBmb3JjZWQuCisgKi8KKwogc3RhdGljIHZvaWQgcGNuZXQzMl93YXRjaGRvZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgIC8qIFByaW50IHRoZSBsaW5rIHN0YXR1cyBpZiBpdCBoYXMgY2hhbmdlZCAqLwotICAgIGlmIChscC0+bWlpKSB7CisJLyogUHJpbnQgdGhlIGxpbmsgc3RhdHVzIGlmIGl0IGhhcyBjaGFuZ2VkICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JbWlpX2NoZWNrX21lZGlhICgmbHAtPm1paV9pZiwgbmV0aWZfbXNnX2xpbmsobHApLCAwKTsKKwlwY25ldDMyX2NoZWNrX21lZGlhKGRldiwgMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLSAgICB9CiAKLSAgICBtb2RfdGltZXIgKCYobHAtPndhdGNoZG9nX3RpbWVyKSwgUENORVQzMl9XQVRDSERPR19USU1FT1VUKTsKKwltb2RfdGltZXIoJihscC0+d2F0Y2hkb2dfdGltZXIpLCBQQ05FVDMyX1dBVENIRE9HX1RJTUVPVVQpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgcGNuZXQzMl9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotICAgIGlmIChkZXYpIHsKLQlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlpZiAoZGV2KSB7CisJCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwogCi0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlwY25ldDMyX2ZyZWVfcmluZyhkZXYpOwotCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBQQ05FVDMyX1RPVEFMX1NJWkUpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIHNpemVvZigqbHApLCBscCwgbHAtPmRtYV9hZGRyKTsKLQlmcmVlX25ldGRldihkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0gICAgfQorCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlwY25ldDMyX2ZyZWVfcmluZyhkZXYpOworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgUENORVQzMl9UT1RBTF9TSVpFKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChscC0+cGNpX2Rldiwgc2l6ZW9mKCpscCksIGxwLCBscC0+ZG1hX2FkZHIpOworCQlmcmVlX25ldGRldihkZXYpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY25ldDMyX2RyaXZlciA9IHsKLSAgICAubmFtZQk9IERSVl9OQU1FLAotICAgIC5wcm9iZQk9IHBjbmV0MzJfcHJvYmVfcGNpLAotICAgIC5yZW1vdmUJPSBfX2RldmV4aXRfcChwY25ldDMyX3JlbW92ZV9vbmUpLAotICAgIC5pZF90YWJsZQk9IHBjbmV0MzJfcGNpX3RibCwKKwkubmFtZSA9IERSVl9OQU1FLAorCS5wcm9iZSA9IHBjbmV0MzJfcHJvYmVfcGNpLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChwY25ldDMyX3JlbW92ZV9vbmUpLAorCS5pZF90YWJsZSA9IHBjbmV0MzJfcGNpX3RibCwKIH07CiAKIC8qIEFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHRoYXQgbWF5IGJlIHBhc3NlZCBpbi4uLiAqLwpAQCAtMjQ3Nyw5ICsyNjk4LDExIEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCBEUlZfTkFNRSAiIGRlYnVnIGxldmVsIik7CiBtb2R1bGVfcGFyYW0obWF4X2ludGVycnVwdF93b3JrLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtYXhfaW50ZXJydXB0X3dvcmssIERSVl9OQU1FICIgbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywKKwkJIERSVl9OQU1FICIgbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7CiBtb2R1bGVfcGFyYW0ocnhfY29weWJyZWFrLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhyeF9jb3B5YnJlYWssIERSVl9OQU1FICIgY29weSBicmVha3BvaW50IGZvciBjb3B5LW9ubHktdGlueS1mcmFtZXMiKTsKK01PRFVMRV9QQVJNX0RFU0MocnhfY29weWJyZWFrLAorCQkgRFJWX05BTUUgIiBjb3B5IGJyZWFrcG9pbnQgZm9yIGNvcHktb25seS10aW55LWZyYW1lcyIpOwogbW9kdWxlX3BhcmFtKHR4X3N0YXJ0X3B0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0eF9zdGFydF9wdCwgRFJWX05BTUUgIiB0cmFuc21pdCBzdGFydCBwb2ludCAoMC0zKSIpOwogbW9kdWxlX3BhcmFtKHBjbmV0MzJ2bGIsIGludCwgMCk7CkBAIC0yNDkwLDcgKzI3MTMsOSBAQAogTU9EVUxFX1BBUk1fREVTQyhmdWxsX2R1cGxleCwgRFJWX05BTUUgIiBmdWxsIGR1cGxleCBzZXR0aW5nKHMpICgxKSIpOwogLyogTW9kdWxlIFBhcmFtZXRlciBmb3IgSG9tZVBOQSBjYXJkcyBhZGRlZCBieSBQYXRyaWNrIFNpbW1vbnMsIDIwMDQgKi8KIG1vZHVsZV9wYXJhbV9hcnJheShob21lcG5hLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhob21lcG5hLCBEUlZfTkFNRSAiIG1vZGUgZm9yIDc5Qzk3OCBjYXJkcyAoMSBmb3IgSG9tZVBOQSwgMCBmb3IgRXRoZXJuZXQsIGRlZmF1bHQgRXRoZXJuZXQiKTsKK01PRFVMRV9QQVJNX0RFU0MoaG9tZXBuYSwKKwkJIERSVl9OQU1FCisJCSAiIG1vZGUgZm9yIDc5Qzk3OCBjYXJkcyAoMSBmb3IgSG9tZVBOQSwgMCBmb3IgRXRoZXJuZXQsIGRlZmF1bHQgRXRoZXJuZXQiKTsKIAogTU9EVUxFX0FVVEhPUigiVGhvbWFzIEJvZ2VuZG9lcmZlciIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFBDbmV0MzIgYW5kIFBDbmV0UENJIGJhc2VkIGV0aGVyY2FyZHMiKTsKQEAgLTI1MDAsNDQgKzI3MjUsNDQgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGNuZXQzMl9pbml0X21vZHVsZSh2b2lkKQogewotICAgIHByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKIAotICAgIHBjbmV0MzJfZGVidWcgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgUENORVQzMl9NU0dfREVGQVVMVCk7CisJcGNuZXQzMl9kZWJ1ZyA9IG5ldGlmX21zZ19pbml0KGRlYnVnLCBQQ05FVDMyX01TR19ERUZBVUxUKTsKIAotICAgIGlmICgodHhfc3RhcnRfcHQgPj0gMCkgJiYgKHR4X3N0YXJ0X3B0IDw9IDMpKQotCXR4X3N0YXJ0ID0gdHhfc3RhcnRfcHQ7CisJaWYgKCh0eF9zdGFydF9wdCA+PSAwKSAmJiAodHhfc3RhcnRfcHQgPD0gMykpCisJCXR4X3N0YXJ0ID0gdHhfc3RhcnRfcHQ7CiAKLSAgICAvKiBmaW5kIHRoZSBQQ0kgZGV2aWNlcyAqLwotICAgIGlmICghcGNpX21vZHVsZV9pbml0KCZwY25ldDMyX2RyaXZlcikpCi0JcGNuZXQzMl9oYXZlX3BjaSA9IDE7CisJLyogZmluZCB0aGUgUENJIGRldmljZXMgKi8KKwlpZiAoIXBjaV9tb2R1bGVfaW5pdCgmcGNuZXQzMl9kcml2ZXIpKQorCQlwY25ldDMyX2hhdmVfcGNpID0gMTsKIAotICAgIC8qIHNob3VsZCB3ZSBmaW5kIGFueSByZW1haW5pbmcgVkxidXMgZGV2aWNlcyA/ICovCi0gICAgaWYgKHBjbmV0MzJ2bGIpCi0JcGNuZXQzMl9wcm9iZV92bGJ1cygpOworCS8qIHNob3VsZCB3ZSBmaW5kIGFueSByZW1haW5pbmcgVkxidXMgZGV2aWNlcyA/ICovCisJaWYgKHBjbmV0MzJ2bGIpCisJCXBjbmV0MzJfcHJvYmVfdmxidXMoKTsKIAotICAgIGlmIChjYXJkc19mb3VuZCAmJiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkpCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVkIGNhcmRzX2ZvdW5kLlxuIiwgY2FyZHNfZm91bmQpOworCWlmIChjYXJkc19mb3VuZCAmJiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkpCisJCXByaW50ayhLRVJOX0lORk8gUEZYICIlZCBjYXJkc19mb3VuZC5cbiIsIGNhcmRzX2ZvdW5kKTsKIAotICAgIHJldHVybiAocGNuZXQzMl9oYXZlX3BjaSArIGNhcmRzX2ZvdW5kKSA/IDAgOiAtRU5PREVWOworCXJldHVybiAocGNuZXQzMl9oYXZlX3BjaSArIGNhcmRzX2ZvdW5kKSA/IDAgOiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGNuZXQzMl9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXh0X2RldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV4dF9kZXY7CiAKLSAgICB3aGlsZSAocGNuZXQzMl9kZXYpIHsKLQlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IHBjbmV0MzJfZGV2LT5wcml2OwotCW5leHRfZGV2ID0gbHAtPm5leHQ7Ci0JdW5yZWdpc3Rlcl9uZXRkZXYocGNuZXQzMl9kZXYpOwotCXBjbmV0MzJfZnJlZV9yaW5nKHBjbmV0MzJfZGV2KTsKLQlyZWxlYXNlX3JlZ2lvbihwY25ldDMyX2Rldi0+YmFzZV9hZGRyLCBQQ05FVDMyX1RPVEFMX1NJWkUpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIHNpemVvZigqbHApLCBscCwgbHAtPmRtYV9hZGRyKTsKLQlmcmVlX25ldGRldihwY25ldDMyX2Rldik7Ci0JcGNuZXQzMl9kZXYgPSBuZXh0X2RldjsKLSAgICB9CisJd2hpbGUgKHBjbmV0MzJfZGV2KSB7CisJCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gcGNuZXQzMl9kZXYtPnByaXY7CisJCW5leHRfZGV2ID0gbHAtPm5leHQ7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KHBjbmV0MzJfZGV2KTsKKwkJcGNuZXQzMl9mcmVlX3JpbmcocGNuZXQzMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihwY25ldDMyX2Rldi0+YmFzZV9hZGRyLCBQQ05FVDMyX1RPVEFMX1NJWkUpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LCBzaXplb2YoKmxwKSwgbHAsIGxwLT5kbWFfYWRkcik7CisJCWZyZWVfbmV0ZGV2KHBjbmV0MzJfZGV2KTsKKwkJcGNuZXQzMl9kZXYgPSBuZXh0X2RldjsKKwl9CiAKLSAgICBpZiAocGNuZXQzMl9oYXZlX3BjaSkKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBjbmV0MzJfZHJpdmVyKTsKKwlpZiAocGNuZXQzMl9oYXZlX3BjaSkKKwkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwY25ldDMyX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHBjbmV0MzJfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IDE0NzRiN2MuLjMzY2VjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogfTsKIAogLyogQSBtYXBwaW5nIG9mIGFsbCBTVVBQT1JURUQgc2V0dGluZ3MgdG8gc3BlZWQvZHVwbGV4ICovCi1zdGF0aWMgc3RydWN0IHBoeV9zZXR0aW5nIHNldHRpbmdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9zZXR0aW5nIHNldHRpbmdzW10gPSB7CiAJewogCQkuc3BlZWQgPSAxMDAwMCwKIAkJLmR1cGxleCA9IERVUExFWF9GVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGxpcC5jIGIvZHJpdmVycy9uZXQvcGxpcC5jCmluZGV4IDg3ZWUzMjcuLmQ0NDQ5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BsaXAuYworKysgYi9kcml2ZXJzL25ldC9wbGlwLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogI2lmbmRlZiBORVRfREVCVUcKICNkZWZpbmUgTkVUX0RFQlVHIDEKICNlbmRpZgotc3RhdGljIHVuc2lnbmVkIGludCBuZXRfZGVidWcgPSBORVRfREVCVUc7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5ldF9kZWJ1ZyA9IE5FVF9ERUJVRzsKIAogI2RlZmluZSBFTkFCTEUoaXJxKSAgaWYgKGlycSAhPSAtMSkgZW5hYmxlX2lycShpcnEpCiAjZGVmaW5lIERJU0FCTEUoaXJxKSBpZiAoaXJxICE9IC0xKSBkaXNhYmxlX2lycShpcnEpCkBAIC0zNTEsNyArMzUxLDcgQEAKIHR5cGVkZWYgaW50ICgqcGxpcF9mdW5jKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2xvY2FsICpubCwKIAkJCSBzdHJ1Y3QgcGxpcF9sb2NhbCAqc25kLCBzdHJ1Y3QgcGxpcF9sb2NhbCAqcmN2KTsKIAotc3RhdGljIHBsaXBfZnVuYyBjb25uZWN0aW9uX3N0YXRlX3RhYmxlW10gPQorc3RhdGljIGNvbnN0IHBsaXBfZnVuYyBjb25uZWN0aW9uX3N0YXRlX3RhYmxlW10gPQogewogCXBsaXBfbm9uZSwKIAlwbGlwX3JlY2VpdmVfcGFja2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwppbmRleCBhYTY1NDBiLi4yMzY1OWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BwcF9jaGFubmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogCkBAIC01NzAsNyArNTcxLDcgQEAKIAkJICogY2hhcmFjdGVyIGlmIG5lY2Vzc2FyeS4KIAkJICovCiAJCWlmIChpc2xjcCB8fCBmbGFnX3RpbWUgPT0gMAotCQkgICAgfHwgamlmZmllcyAtIGFwLT5sYXN0X3htaXQgPj0gZmxhZ190aW1lKQorCQkgICAgfHwgdGltZV9hZnRlcl9lcShqaWZmaWVzLCBhcC0+bGFzdF94bWl0ICsgZmxhZ190aW1lKSkKIAkJCSpidWYrKyA9IFBQUF9GTEFHOwogCQlhcC0+bGFzdF94bWl0ID0gamlmZmllczsKIAkJZmNzID0gUFBQX0lOSVRGQ1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwppbmRleCAwMjQ1ZTQwLi5iMjA3M2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L3NsaGNfdmouaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKQEAgLTE5OCwxMSArMTk5LDExIEBACiBzdGF0aWMgdm9pZCBjYXJkbWFwX2Rlc3Ryb3koc3RydWN0IGNhcmRtYXAgKiptYXApOwogCiAvKgotICogYWxsX3BwcF9zZW0gcHJvdGVjdHMgdGhlIGFsbF9wcHBfdW5pdHMgbWFwcGluZy4KKyAqIGFsbF9wcHBfbXV0ZXggcHJvdGVjdHMgdGhlIGFsbF9wcHBfdW5pdHMgbWFwcGluZy4KICAqIEl0IGFsc28gZW5zdXJlcyB0aGF0IGZpbmRpbmcgYSBwcHAgdW5pdCBpbiB0aGUgYWxsX3BwcF91bml0cyBtYXAKICAqIGFuZCB1cGRhdGluZyBpdHMgZmlsZS5yZWZjbnQgZmllbGQgaXMgYXRvbWljLgogICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChhbGxfcHBwX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGFsbF9wcHBfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBjYXJkbWFwICphbGxfcHBwX3VuaXRzOwogc3RhdGljIGF0b21pY190IHBwcF91bml0X2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CiAKQEAgLTgwNCw3ICs4MDUsNyBAQAogCQkvKiBBdHRhY2ggdG8gYW4gZXhpc3RpbmcgcHBwIHVuaXQgKi8KIAkJaWYgKGdldF91c2VyKHVuaXQsIHApKQogCQkJYnJlYWs7Ci0JCWRvd24oJmFsbF9wcHBfc2VtKTsKKwkJbXV0ZXhfbG9jaygmYWxsX3BwcF9tdXRleCk7CiAJCWVyciA9IC1FTlhJTzsKIAkJcHBwID0gcHBwX2ZpbmRfdW5pdCh1bml0KTsKIAkJaWYgKHBwcCAhPSAwKSB7CkBAIC04MTIsNyArODEzLDcgQEAKIAkJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZwcHAtPmZpbGU7CiAJCQllcnIgPSAwOwogCQl9Ci0JCXVwKCZhbGxfcHBwX3NlbSk7CisJCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CiAJCWJyZWFrOwogCiAJY2FzZSBQUFBJT0NBVFRDSEFOOgpAQCAtMTY5MSw4ICsxNjkyLDggQEAKIAkJICAgIHx8IHBwcC0+bnBtb2RlW25waV0gIT0gTlBNT0RFX1BBU1MpIHsKIAkJCWtmcmVlX3NrYihza2IpOwogCQl9IGVsc2UgewotCQkJc2tiX3B1bGwoc2tiLCAyKTsJLyogY2hvcCBvZmYgcHJvdG9jb2wgKi8KLQkJCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYi0+ZGF0YSAtIDIsIDIpOworCQkJLyogY2hvcCBvZmYgcHJvdG9jb2wgKi8KKwkJCXNrYl9wdWxsX3Jjc3VtKHNrYiwgMik7CiAJCQlza2ItPmRldiA9IHBwcC0+ZGV2OwogCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKG5waW5kZXhfdG9fZXRoZXJ0eXBlW25waV0pOwogCQkJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwpAQCAtMjQ0Niw3ICsyNDQ3LDcgQEAKIAlkZXYtPmRvX2lvY3RsID0gcHBwX25ldF9pb2N0bDsKIAogCXJldCA9IC1FRVhJU1Q7Ci0JZG93bigmYWxsX3BwcF9zZW0pOworCW11dGV4X2xvY2soJmFsbF9wcHBfbXV0ZXgpOwogCWlmICh1bml0IDwgMCkKIAkJdW5pdCA9IGNhcmRtYXBfZmluZF9maXJzdF9mcmVlKGFsbF9wcHBfdW5pdHMpOwogCWVsc2UgaWYgKGNhcmRtYXBfZ2V0KGFsbF9wcHBfdW5pdHMsIHVuaXQpICE9IE5VTEwpCkBAIC0yNDY1LDEyICsyNDY2LDEyIEBACiAKIAlhdG9taWNfaW5jKCZwcHBfdW5pdF9jb3VudCk7CiAJY2FyZG1hcF9zZXQoJmFsbF9wcHBfdW5pdHMsIHVuaXQsIHBwcCk7Ci0JdXAoJmFsbF9wcHBfc2VtKTsKKwltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOwogCSpyZXRwID0gMDsKIAlyZXR1cm4gcHBwOwogCiBvdXQyOgotCXVwKCZhbGxfcHBwX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZhbGxfcHBwX211dGV4KTsKIAlmcmVlX25ldGRldihkZXYpOwogb3V0MToKIAlrZnJlZShwcHApOwpAQCAtMjUwMCw3ICsyNTAxLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JZG93bigmYWxsX3BwcF9zZW0pOworCW11dGV4X2xvY2soJmFsbF9wcHBfbXV0ZXgpOwogCXBwcF9sb2NrKHBwcCk7CiAJZGV2ID0gcHBwLT5kZXY7CiAJcHBwLT5kZXYgPSBOVUxMOwpAQCAtMjUxNCw3ICsyNTE1LDcgQEAKIAlwcHAtPmZpbGUuZGVhZCA9IDE7CiAJcHBwLT5vd25lciA9IE5VTEw7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcHAtPmZpbGUucndhaXQpOwotCXVwKCZhbGxfcHBwX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZhbGxfcHBwX211dGV4KTsKIH0KIAogLyoKQEAgLTI1NTYsNyArMjU1Nyw3IEBACiAKIC8qCiAgKiBMb2NhdGUgYW4gZXhpc3RpbmcgcHBwIHVuaXQuCi0gKiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGxvY2tlZCB0aGUgYWxsX3BwcF9zZW0uCisgKiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGxvY2tlZCB0aGUgYWxsX3BwcF9tdXRleC4KICAqLwogc3RhdGljIHN0cnVjdCBwcHAgKgogcHBwX2ZpbmRfdW5pdChpbnQgdW5pdCkKQEAgLTI2MDEsNyArMjYwMiw3IEBACiAJaW50IHJldCA9IC1FTlhJTzsKIAlpbnQgaGRybGVuOwogCi0JZG93bigmYWxsX3BwcF9zZW0pOworCW11dGV4X2xvY2soJmFsbF9wcHBfbXV0ZXgpOwogCXBwcCA9IHBwcF9maW5kX3VuaXQodW5pdCk7CiAJaWYgKHBwcCA9PSAwKQogCQlnb3RvIG91dDsKQEAgLTI2MjYsNyArMjYyNyw3IEBACiAgb3V0bDoKIAl3cml0ZV91bmxvY2tfYmgoJnBjaC0+dXBsKTsKICBvdXQ6Ci0JdXAoJmFsbF9wcHBfc2VtKTsKKwltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCmluZGV4IDMzY2I4MjUuLjMzMjU1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiBwcHBfcHJpbnRfaGV4IChyZWdpc3RlciBfX3U4ICogb3V0LCBjb25zdCBfX3U4ICogaW4sIGludCBjb3VudCkKIHsKIAlyZWdpc3RlciBfX3U4IG5leHRfY2g7Ci0Jc3RhdGljIGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisJc3RhdGljIGNvbnN0IGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CiAKIAl3aGlsZSAoY291bnQtLSA+IDApIHsKIAkJbmV4dF9jaCA9ICppbisrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggOTM2OWY4MS4uNDc1ZGM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC0zMzcsOCArMzM3LDcgQEAKIAlpZiAoc2stPnNrX3N0YXRlICYgUFBQT1hfQk9VTkQpIHsKIAkJc3RydWN0IHBwcG9lX2hkciAqcGggPSAoc3RydWN0IHBwcG9lX2hkciAqKSBza2ItPm5oLnJhdzsKIAkJaW50IGxlbiA9IG50b2hzKHBoLT5sZW5ndGgpOwotCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSk7Ci0JCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHBoLCBzaXplb2YoKnBoKSk7CisJCXNrYl9wdWxsX3Jjc3VtKHNrYiwgc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpKTsKIAkJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIGxlbikpCiAJCQlnb3RvIGFib3J0X2tmcmVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCA2ZTEwMTg0Li4wYWQzMzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTExMywxMSArMTEzLDExIEBACiBzdGF0aWMgaW50IG51bV9tZWRpYSA9IDA7CiAKIC8qIE1heGltdW0gZXZlbnRzIChSeCBwYWNrZXRzLCBldGMuKSB0byBoYW5kbGUgYXQgZWFjaCBpbnRlcnJ1cHQuICovCi1zdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDIwOworc3RhdGljIGNvbnN0IGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSAyMDsKIAogLyogTWF4aW11bSBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBmaWx0ZXIgKHZzLiBSeC1hbGwtbXVsdGljYXN0KS4KICAgIFRoZSBSVEwgY2hpcHMgdXNlIGEgNjQgZWxlbWVudCBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBFdGhlcm5ldCBDUkMuICovCi1zdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAzMjsKK3N0YXRpYyBjb25zdCBpbnQgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDMyOwogCiAvKiBNQUMgYWRkcmVzcyBsZW5ndGggKi8KICNkZWZpbmUgTUFDX0FERFJfTEVOCTYKQEAgLTI4Nyw2ICsyODcsMjAgQEAKIAlUeEludGVyRnJhbWVHYXBTaGlmdCA9IDI0LAogCVR4RE1BU2hpZnQgPSA4LAkvKiBETUEgYnVyc3QgdmFsdWUgKDAtNykgaXMgc2hpZnQgdGhpcyBtYW55IGJpdHMgKi8KIAorCS8qIENvbmZpZzEgcmVnaXN0ZXIgcC4yNCAqLworCVBNRW5hYmxlCT0gKDEgPDwgMCksCS8qIFBvd2VyIE1hbmFnZW1lbnQgRW5hYmxlICovCisKKwkvKiBDb25maWczIHJlZ2lzdGVyIHAuMjUgKi8KKwlNYWdpY1BhY2tldAk9ICgxIDw8IDUpLAkvKiBXYWtlIHVwIHdoZW4gcmVjZWl2ZXMgYSBNYWdpYyBQYWNrZXQgKi8KKwlMaW5rVXAJCT0gKDEgPDwgNCksCS8qIFdha2UgdXAgd2hlbiB0aGUgY2FibGUgY29ubmVjdGlvbiBpcyByZS1lc3RhYmxpc2hlZCAqLworCisJLyogQ29uZmlnNSByZWdpc3RlciBwLjI3ICovCisJQldGCQk9ICgxIDw8IDYpLAkvKiBBY2NlcHQgQnJvYWRjYXN0IHdha2V1cCBmcmFtZSAqLworCU1XRgkJPSAoMSA8PCA1KSwJLyogQWNjZXB0IE11bHRpY2FzdCB3YWtldXAgZnJhbWUgKi8KKwlVV0YJCT0gKDEgPDwgNCksCS8qIEFjY2VwdCBVbmljYXN0IHdha2V1cCBmcmFtZSAqLworCUxhbldha2UJCT0gKDEgPDwgMSksCS8qIExhbldha2UgZW5hYmxlL2Rpc2FibGUgKi8KKwlQTUVTdGF0dXMJPSAoMSA8PCAwKSwJLyogUE1FIHN0YXR1cyBjYW4gYmUgcmVzZXQgYnkgUENJIFJTVCMgKi8KKwogCS8qIFRCSUNTUiBwLjI4ICovCiAJVEJJUmVzZXQJPSAweDgwMDAwMDAwLAogCVRCSUxvb3BiYWNrCT0gMHg0MDAwMDAwMCwKQEAgLTQzMyw2ICs0NDcsNyBAQAogCXVuc2lnbmVkIGludCAoKnBoeV9yZXNldF9wZW5kaW5nKSh2b2lkIF9faW9tZW0gKik7CiAJdW5zaWduZWQgaW50ICgqbGlua19vaykodm9pZCBfX2lvbWVtICopOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0YXNrOworCXVuc2lnbmVkIHdvbF9lbmFibGVkIDogMTsKIH07CiAKIE1PRFVMRV9BVVRIT1IoIlJlYWx0ZWsgYW5kIHRoZSBMaW51eCByODE2OSBjcmV3IDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPiIpOwpAQCAtNjA3LDYgKzYyMiw4MCBAQAogCSpkdXBsZXggPSBwLT5kdXBsZXg7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKKwl1OCBvcHRpb25zOworCisJd29sLT53b2xvcHRzID0gMDsKKworI2RlZmluZSBXQUtFX0FOWSAoV0FLRV9QSFkgfCBXQUtFX01BR0lDIHwgV0FLRV9VQ0FTVCB8IFdBS0VfQkNBU1QgfCBXQUtFX01DQVNUKQorCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9BTlk7CisKKwlzcGluX2xvY2tfaXJxKCZ0cC0+bG9jayk7CisKKwlvcHRpb25zID0gUlRMX1I4KENvbmZpZzEpOworCWlmICghKG9wdGlvbnMgJiBQTUVuYWJsZSkpCisJCWdvdG8gb3V0X3VubG9jazsKKworCW9wdGlvbnMgPSBSVExfUjgoQ29uZmlnMyk7CisJaWYgKG9wdGlvbnMgJiBMaW5rVXApCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1BIWTsKKwlpZiAob3B0aW9ucyAmIE1hZ2ljUGFja2V0KQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKKworCW9wdGlvbnMgPSBSVExfUjgoQ29uZmlnNSk7CisJaWYgKG9wdGlvbnMgJiBVV0YpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1VDQVNUOworCWlmIChvcHRpb25zICYgQldGKQorCSAgICAgICAgd29sLT53b2xvcHRzIHw9IFdBS0VfQkNBU1Q7CisJaWYgKG9wdGlvbnMgJiBNV0YpCisJICAgICAgICB3b2wtPndvbG9wdHMgfD0gV0FLRV9NQ0FTVDsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsKK30KKworc3RhdGljIGludCBydGw4MTY5X3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisJaW50IGk7CisJc3RhdGljIHN0cnVjdCB7CisJCXUzMiBvcHQ7CisJCXUxNiByZWc7CisJCXU4ICBtYXNrOworCX0gY2ZnW10gPSB7CisJCXsgV0FLRV9BTlksICAgQ29uZmlnMSwgUE1FbmFibGUgfSwKKwkJeyBXQUtFX1BIWSwgICBDb25maWczLCBMaW5rVXAgfSwKKwkJeyBXQUtFX01BR0lDLCBDb25maWczLCBNYWdpY1BhY2tldCB9LAorCQl7IFdBS0VfVUNBU1QsIENvbmZpZzUsIFVXRiB9LAorCQl7IFdBS0VfQkNBU1QsIENvbmZpZzUsIEJXRiB9LAorCQl7IFdBS0VfTUNBU1QsIENvbmZpZzUsIE1XRiB9LAorCQl7IFdBS0VfQU5ZLCAgIENvbmZpZzUsIExhbldha2UgfQorCX07CisKKwlzcGluX2xvY2tfaXJxKCZ0cC0+bG9jayk7CisKKwlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnKTsgaSsrKSB7CisJCXU4IG9wdGlvbnMgPSBSVExfUjgoY2ZnW2ldLnJlZykgJiB+Y2ZnW2ldLm1hc2s7CisJCWlmICh3b2wtPndvbG9wdHMgJiBjZmdbaV0ub3B0KQorCQkJb3B0aW9ucyB8PSBjZmdbaV0ubWFzazsKKwkJUlRMX1c4KGNmZ1tpXS5yZWcsIG9wdGlvbnMpOworCX0KKworCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOworCisJdHAtPndvbF9lbmFibGVkID0gKHdvbC0+d29sb3B0cykgPyAxIDogMDsKKworCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewpAQCAtMTAyNSw2ICsxMTE0LDggQEAKIAkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCiAJLnNldF90c28JCT0gZXRodG9vbF9vcF9zZXRfdHNvLAogCS5nZXRfcmVncwkJPSBydGw4MTY5X2dldF9yZWdzLAorCS5nZXRfd29sCQk9IHJ0bDgxNjlfZ2V0X3dvbCwKKwkuc2V0X3dvbAkJPSBydGw4MTY5X3NldF93b2wsCiAJLmdldF9zdHJpbmdzCQk9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsCiAJLmdldF9zdGF0c19jb3VudAk9IHJ0bDgxNjlfZ2V0X3N0YXRzX2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCkBAIC0xNDQyLDYgKzE1MzMsMTEgQEAKIAl9CiAJdHAtPmNoaXBzZXQgPSBpOwogCisJUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlSVExfVzgoQ29uZmlnMSwgUlRMX1I4KENvbmZpZzEpIHwgUE1FbmFibGUpOworCVJUTF9XOChDb25maWc1LCBSVExfUjgoQ29uZmlnNSkgJiBQTUVTdGF0dXMpOworCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOworCiAJKmlvYWRkcl9vdXQgPSBpb2FkZHI7CiAJKmRldl9vdXQgPSBkZXY7CiBvdXQ6CkBAIC0xNjEyLDQ5ICsxNzA4LDYgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBydGw4MTY5X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gMDsKLQkKLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHRzLCBzdG9wIFJ4IGFuZCBUeCAqLwotCVJUTF9XMTYoSW50ck1hc2ssIDApOwotCVJUTF9XOChDaGlwQ21kLCAwKTsKLQkJCi0JLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudHMuICovCi0JdHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gUlRMX1IzMihSeE1pc3NlZCk7Ci0JUlRMX1czMihSeE1pc3NlZCwgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JICAgIHJldHVybiAwOwotCi0JbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCXJ0bDgxNjlfaHdfc3RhcnQoZGV2KTsKLQotCXJldHVybiAwOwotfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQogc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnhidWZzaXplKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI3MDAsNiArMjc1Myw1NiBAQAogCXJldHVybiAmdHAtPnN0YXRzOwogfQogCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgcnRsODE2OV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gb3V0OworCisJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJnRwLT5sb2NrKTsKKworCXJ0bDgxNjlfYXNpY19kb3duKGlvYWRkcik7CisKKwl0cC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSBSVExfUjMyKFJ4TWlzc2VkKTsKKwlSVExfVzMyKFJ4TWlzc2VkLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCB0cC0+d29sX2VuYWJsZWQpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworb3V0OgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgxNjlfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZ290byBvdXQ7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7CisKKwlydGw4MTY5X3NjaGVkdWxlX3dvcmsoZGV2LCBydGw4MTY5X3Jlc2V0X3Rhc2spOworb3V0OgorCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGw4MTY5X3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gTU9EVUxFTkFNRSwKIAkuaWRfdGFibGUJPSBydGw4MTY5X3BjaV90YmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggNDliNTk3Yy4uNzkyMDhmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtNTcsMjMgKzU3LDI3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAvKiBsb2NhbCBpbmNsdWRlICovCiAjaW5jbHVkZSAiczJpby5oIgogI2luY2x1ZGUgInMyaW8tcmVncy5oIgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICJWZXJzaW9uIDIuMC45LjQiCisjZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMTEuMiIKIAogLyogUzJpbyBEcml2ZXIgbmFtZSAmIHZlcnNpb24uICovCiBzdGF0aWMgY2hhciBzMmlvX2RyaXZlcl9uYW1lW10gPSAiTmV0ZXJpb24iOwogc3RhdGljIGNoYXIgczJpb19kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiAKLWludCByeGRfc2l6ZVs0XSA9IHszMiw0OCw0OCw2NH07Ci1pbnQgcnhkX2NvdW50WzRdID0gezEyNyw4NSw4NSw2M307CitzdGF0aWMgaW50IHJ4ZF9zaXplWzRdID0gezMyLDQ4LDQ4LDY0fTsKK3N0YXRpYyBpbnQgcnhkX2NvdW50WzRdID0gezEyNyw4NSw4NSw2M307CiAKIHN0YXRpYyBpbmxpbmUgaW50IFJYRF9JU19VUDJEVChSeERfdCAqcnhkcCkKIHsKQEAgLTE2OCw2ICsxNzIsMTEgQEAKIAl7IlxuIERSSVZFUiBTVEFUSVNUSUNTIn0sCiAJeyJzaW5nbGVfYml0X2VjY19lcnJzIn0sCiAJeyJkb3VibGVfYml0X2VjY19lcnJzIn0sCisJKCJscm9fYWdncmVnYXRlZF9wa3RzIiksCisJKCJscm9fZmx1c2hfYm90aF9jb3VudCIpLAorCSgibHJvX291dF9vZl9zZXF1ZW5jZV9wa3RzIiksCisJKCJscm9fZmx1c2hfZHVlX3RvX21heF9wa3RzIiksCisJKCJscm9fYXZnX2FnZ3JfcGt0cyIpLAogfTsKIAogI2RlZmluZSBTMklPX1NUQVRfTEVOIHNpemVvZihldGh0b29sX3N0YXRzX2tleXMpLyBFVEhfR1NUUklOR19MRU4KQEAgLTIxNCw3ICsyMjMsNyBAQAogI2RlZmluZSBTV0lUQ0hfU0lHTgkweEE1QTVBNUE1QTVBNUE1QTVVTEwKICNkZWZpbmUJRU5EX1NJR04JMHgwCiAKLXN0YXRpYyB1NjQgaGVyY19hY3RfZHR4X2NmZ1tdID0geworc3RhdGljIGNvbnN0IHU2NCBoZXJjX2FjdF9kdHhfY2ZnW10gPSB7CiAJLyogU2V0IGFkZHJlc3MgKi8KIAkweDgwMDAwNTE1MzY3NTAwMDBVTEwsIDB4ODAwMDA1MTUzNjc1MDBFMFVMTCwKIAkvKiBXcml0ZSBkYXRhICovCkBAIC0yMzUsNyArMjQ0LDcgQEAKIAlFTkRfU0lHTgogfTsKIAotc3RhdGljIHU2NCB4ZW5hX21kaW9fY2ZnW10gPSB7CitzdGF0aWMgY29uc3QgdTY0IHhlbmFfbWRpb19jZmdbXSA9IHsKIAkvKiBSZXNldCBQTUEgUExMICovCiAJMHhDMDAxMDEwMDAwMDAwMDAwVUxMLCAweEMwMDEwMTAwMDAwMDAwRTBVTEwsCiAJMHhDMDAxMDEwMDAwODAwMEU0VUxMLApAQCAtMjQ1LDcgKzI1NCw3IEBACiAJRU5EX1NJR04KIH07CiAKLXN0YXRpYyB1NjQgeGVuYV9kdHhfY2ZnW10gPSB7CitzdGF0aWMgY29uc3QgdTY0IHhlbmFfZHR4X2NmZ1tdID0gewogCTB4ODAwMDA1MTUwMDAwMDAwMFVMTCwgMHg4MDAwMDUxNTAwMDAwMEUwVUxMLAogCTB4ODAwMDA1MTVEOTM1MDBFNFVMTCwgMHg4MDAxMDUxNTAwMDAwMDAwVUxMLAogCTB4ODAwMTA1MTUwMDAwMDBFMFVMTCwgMHg4MDAxMDUxNTAwMUUwMEU0VUxMLApAQCAtMjczLDcgKzI4Miw3IEBACiAgKiBDb25zdGFudHMgZm9yIEZpeGluZyB0aGUgTWFjQWRkcmVzcyBwcm9ibGVtIHNlZW4gbW9zdGx5IG9uCiAgKiBBbHBoYSBtYWNoaW5lcy4KICAqLwotc3RhdGljIHU2NCBmaXhfbWFjW10gPSB7CitzdGF0aWMgY29uc3QgdTY0IGZpeF9tYWNbXSA9IHsKIAkweDAwNjAwMDAwMDAwMDAwMDBVTEwsIDB4MDA2MDYwMDAwMDAwMDAwMFVMTCwKIAkweDAwNDA2MDAwMDAwMDAwMDBVTEwsIDB4MDAwMDYwMDAwMDAwMDAwMFVMTCwKIAkweDAwMjA2MDAwMDAwMDAwMDBVTEwsIDB4MDA2MDYwMDAwMDAwMDAwMFVMTCwKQEAgLTMxNyw2ICszMjYsMTIgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnhzeW5jX2ZyZXF1ZW5jeSA9IDM7CiAvKiBJbnRlcnJ1cHQgdHlwZS4gVmFsdWVzIGNhbiBiZSAwKElOVEEpLCAxKE1TSSksIDIoTVNJX1gpICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGludHJfdHlwZSA9IDA7CisvKiBMYXJnZSByZWNlaXZlIG9mZmxvYWQgZmVhdHVyZSAqLworc3RhdGljIHVuc2lnbmVkIGludCBscm8gPSAwOworLyogTWF4IHBrdHMgdG8gYmUgYWdncmVnYXRlZCBieSBMUk8gYXQgb25lIHRpbWUuIElmIG5vdCBzcGVjaWZpZWQsCisgKiBhZ2dyZWdhdGlvbiBoYXBwZW5zIHVudGlsIHdlIGhpdCBtYXggSVAgcGt0IHNpemUoNjRLKQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGxyb19tYXhfcGt0cyA9IDB4RkZGRjsKIAogLyoKICAqIFMySU8gZGV2aWNlIHRhYmxlLgpAQCAtMTQ3Niw2ICsxNDkxLDE5IEBACiAJd3JpdGVsKCh1MzIpICh2YWw2NCA+PiAzMiksIChhZGQgKyA0KSk7CiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+bWFjX2NmZyk7CiAKKwkvKiBFbmFibGUgRkNTIHN0cmlwcGluZyBieSBhZGFwdGVyICovCisJYWRkID0gJmJhcjAtPm1hY19jZmc7CisJdmFsNjQgPSByZWFkcSgmYmFyMC0+bWFjX2NmZyk7CisJdmFsNjQgfD0gTUFDX0NGR19STUFDX1NUUklQX0ZDUzsKKwlpZiAobmljLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKQorCQl3cml0ZXEodmFsNjQsICZiYXIwLT5tYWNfY2ZnKTsKKwllbHNlIHsKKwkJd3JpdGVxKFJNQUNfQ0ZHX0tFWSgweDRDMEQpLCAmYmFyMC0+cm1hY19jZmdfa2V5KTsKKwkJd3JpdGVsKCh1MzIpICh2YWw2NCksIGFkZCk7CisJCXdyaXRlcShSTUFDX0NGR19LRVkoMHg0QzBEKSwgJmJhcjAtPnJtYWNfY2ZnX2tleSk7CisJCXdyaXRlbCgodTMyKSAodmFsNjQgPj4gMzIpLCAoYWRkICsgNCkpOworCX0KKwogCS8qCiAJICogU2V0IHRoZSB0aW1lIHZhbHVlIHRvIGJlIGluc2VydGVkIGluIHRoZSBwYXVzZSBmcmFtZQogCSAqIGdlbmVyYXRlZCBieSB4ZW5hLgpAQCAtMjEyNyw3ICsyMTU1LDcgQEAKIAl9CiB9CiAKLWludCBmaWxsX3J4ZF8zYnVmKG5pY190ICpuaWMsIFJ4RF90ICpyeGRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBmaWxsX3J4ZF8zYnVmKG5pY190ICpuaWMsIFJ4RF90ICpyeGRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuaWMtPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19saXN0OwpAQCAtMjU2OSw2ICsyNTk3LDggQEAKICNpZm5kZWYgQ09ORklHX1MySU9fTkFQSQogCWludCBwa3RfY250ID0gMDsKICNlbmRpZgorCWludCBpOworCiAJc3Bpbl9sb2NrKCZuaWMtPnJ4X2xvY2spOwogCWlmIChhdG9taWNfcmVhZCgmbmljLT5jYXJkX3N0YXRlKSA9PSBDQVJEX0RPV04pIHsKIAkJREJHX1BSSU5UKElOVFJfREJHLCAiJXM6ICVzIGdvaW5nIGRvd24gZm9yIHJlc2V0XG4iLApAQCAtMjY2MSw2ICsyNjkxLDE4IEBACiAJCQlicmVhazsKICNlbmRpZgogCX0KKwlpZiAobmljLT5scm8pIHsKKwkJLyogQ2xlYXIgYWxsIExSTyBzZXNzaW9ucyBiZWZvcmUgZXhpdGluZyAqLworCQlmb3IgKGk9MDsgaTxNQVhfTFJPX1NFU1NJT05TOyBpKyspIHsKKwkJCWxyb190ICpscm8gPSAmbmljLT5scm8wX25baV07CisJCQlpZiAobHJvLT5pbl91c2UpIHsKKwkJCQl1cGRhdGVfTDNMNF9oZWFkZXIobmljLCBscm8pOworCQkJCXF1ZXVlX3J4X2ZyYW1lKGxyby0+cGFyZW50KTsKKwkJCQljbGVhcl9scm9fc2Vzc2lvbihscm8pOworCQkJfQorCQl9CisJfQorCiAJc3Bpbl91bmxvY2soJm5pYy0+cnhfbG9jayk7CiB9CiAKQEAgLTI4NTIsNyArMjg5NCw3IEBACiAgKiAgdm9pZC4KICAqLwogCi12b2lkIHMyaW9fcmVzZXQobmljX3QgKiBzcCkKK3N0YXRpYyB2b2lkIHMyaW9fcmVzZXQobmljX3QgKiBzcCkKIHsKIAlYRU5BX2Rldl9jb25maWdfdCBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAJdTY0IHZhbDY0OwpAQCAtMjk0MCw3ICsyOTgyLDcgQEAKICAqICBTVUNDRVNTIG9uIHN1Y2Nlc3MgYW5kIEZBSUxVUkUgb24gZmFpbHVyZS4KICAqLwogCi1pbnQgczJpb19zZXRfc3dhcHBlcihuaWNfdCAqIHNwKQorc3RhdGljIGludCBzMmlvX3NldF9zd2FwcGVyKG5pY190ICogc3ApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwpAQCAtMzA4OSw3ICszMTMxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHJlc3RvcmVfeG1zaV9kYXRhKG5pY190ICpuaWMpCitzdGF0aWMgdm9pZCByZXN0b3JlX3htc2lfZGF0YShuaWNfdCAqbmljKQogewogCVhFTkFfZGV2X2NvbmZpZ190IF9faW9tZW0gKmJhcjAgPSBuaWMtPmJhcjA7CiAJdTY0IHZhbDY0OwpAQCAtMzE4MCw3ICszMjIyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHMyaW9fZW5hYmxlX21zaV94KG5pY190ICpuaWMpCitzdGF0aWMgaW50IHMyaW9fZW5hYmxlX21zaV94KG5pY190ICpuaWMpCiB7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKIAl1NjQgdHhfbWF0LCByeF9tYXQ7CkBAIC0zNjY4LDIzICszNzEwLDMyIEBACiAJICogZWxzZSBzY2hlZHVsZSBhIHRhc2tsZXQgdG8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVycy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCWludCByeGJfc2l6ZSA9IGF0b21pY19yZWFkKCZzcC0+cnhfYnVmc19sZWZ0W2ldKTsKLQkJaW50IGxldmVsID0gcnhfYnVmZmVyX2xldmVsKHNwLCByeGJfc2l6ZSwgaSk7CisJCWlmICghc3AtPmxybykgeworCQkJaW50IHJ4Yl9zaXplID0gYXRvbWljX3JlYWQoJnNwLT5yeF9idWZzX2xlZnRbaV0pOworCQkJaW50IGxldmVsID0gcnhfYnVmZmVyX2xldmVsKHNwLCByeGJfc2l6ZSwgaSk7CiAKLQkJaWYgKChsZXZlbCA9PSBQQU5JQykgJiYgKCFUQVNLTEVUX0lOX1VTRSkpIHsKLQkJCURCR19QUklOVChJTlRSX0RCRywgIiVzOiBSeCBCRCBoaXQgIiwgZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChJTlRSX0RCRywgIlBBTklDIGxldmVsc1xuIik7Ci0JCQlpZiAoKHJldCA9IGZpbGxfcnhfYnVmZmVycyhzcCwgaSkpID09IC1FTk9NRU0pIHsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOk91dCBvZiBtZW1vcnkiLAotCQkJCQkgIGRldi0+bmFtZSk7Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIgaW4gSVNSISFcbiIpOworCQkJaWYgKChsZXZlbCA9PSBQQU5JQykgJiYgKCFUQVNLTEVUX0lOX1VTRSkpIHsKKwkJCQlEQkdfUFJJTlQoSU5UUl9EQkcsICIlczogUnggQkQgaGl0ICIsIAorCQkJCQkJCWRldi0+bmFtZSk7CisJCQkJREJHX1BSSU5UKElOVFJfREJHLCAiUEFOSUMgbGV2ZWxzXG4iKTsKKwkJCQlpZiAoKHJldCA9IGZpbGxfcnhfYnVmZmVycyhzcCwgaSkpID09IC1FTk9NRU0pIHsKKwkJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwKKwkJCQkJCSAgZGV2LT5uYW1lKTsKKwkJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIgaW4gSVNSISFcbiIpOworCQkJCQljbGVhcl9iaXQoMCwgKCZzcC0+dGFza2xldF9zdGF0dXMpKTsKKwkJCQkJYXRvbWljX2RlYygmc3AtPmlzcl9jbnQpOworCQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQkJfQogCQkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOwotCQkJCWF0b21pY19kZWMoJnNwLT5pc3JfY250KTsKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9IGVsc2UgaWYgKGxldmVsID09IExPVykgeworCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNwLT50YXNrKTsKIAkJCX0KLQkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOwotCQl9IGVsc2UgaWYgKGxldmVsID09IExPVykgewotCQkJdGFza2xldF9zY2hlZHVsZSgmc3AtPnRhc2spOworCQl9CisJCWVsc2UgaWYgKGZpbGxfcnhfYnVmZmVycyhzcCwgaSkgPT0gLUVOT01FTSkgeworCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6T3V0IG9mIG1lbW9yeSIsCisJCQkJCQkJZGV2LT5uYW1lKTsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiBpbiBSeCBJbnRyISFcbiIpOworCQkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC0zNjk3LDI5ICszNzQ4LDM3IEBACiB7CiAJcmluZ19pbmZvX3QgKnJpbmcgPSAocmluZ19pbmZvX3QgKilkZXZfaWQ7CiAJbmljX3QgKnNwID0gcmluZy0+bmljOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOwogCWludCByeGJfc2l6ZSwgbGV2ZWwsIHJuZ19uOwogCiAJYXRvbWljX2luYygmc3AtPmlzcl9jbnQpOwogCXJ4X2ludHJfaGFuZGxlcihyaW5nKTsKIAogCXJuZ19uID0gcmluZy0+cmluZ19ubzsKLQlyeGJfc2l6ZSA9IGF0b21pY19yZWFkKCZzcC0+cnhfYnVmc19sZWZ0W3JuZ19uXSk7Ci0JbGV2ZWwgPSByeF9idWZmZXJfbGV2ZWwoc3AsIHJ4Yl9zaXplLCBybmdfbik7CisJaWYgKCFzcC0+bHJvKSB7CisJCXJ4Yl9zaXplID0gYXRvbWljX3JlYWQoJnNwLT5yeF9idWZzX2xlZnRbcm5nX25dKTsKKwkJbGV2ZWwgPSByeF9idWZmZXJfbGV2ZWwoc3AsIHJ4Yl9zaXplLCBybmdfbik7CiAKLQlpZiAoKGxldmVsID09IFBBTklDKSAmJiAoIVRBU0tMRVRfSU5fVVNFKSkgewotCQlpbnQgcmV0OwotCQlEQkdfUFJJTlQoSU5UUl9EQkcsICIlczogUnggQkQgaGl0ICIsIF9fRlVOQ1RJT05fXyk7Ci0JCURCR19QUklOVChJTlRSX0RCRywgIlBBTklDIGxldmVsc1xuIik7Ci0JCWlmICgocmV0ID0gZmlsbF9yeF9idWZmZXJzKHNwLCBybmdfbikpID09IC1FTk9NRU0pIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiT3V0IG9mIG1lbW9yeSBpbiAlcyIsCi0JCQkJICBfX0ZVTkNUSU9OX18pOworCQlpZiAoKGxldmVsID09IFBBTklDKSAmJiAoIVRBU0tMRVRfSU5fVVNFKSkgeworCQkJaW50IHJldDsKKwkJCURCR19QUklOVChJTlRSX0RCRywgIiVzOiBSeCBCRCBoaXQgIiwgX19GVU5DVElPTl9fKTsKKwkJCURCR19QUklOVChJTlRSX0RCRywgIlBBTklDIGxldmVsc1xuIik7CisJCQlpZiAoKHJldCA9IGZpbGxfcnhfYnVmZmVycyhzcCwgcm5nX24pKSA9PSAtRU5PTUVNKSB7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICJPdXQgb2YgbWVtb3J5IGluICVzIiwKKwkJCQkJICBfX0ZVTkNUSU9OX18pOworCQkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KIAkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOwotCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UgaWYgKGxldmVsID09IExPVykgeworCQkJdGFza2xldF9zY2hlZHVsZSgmc3AtPnRhc2spOwogCQl9Ci0JCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOwotCX0gZWxzZSBpZiAobGV2ZWwgPT0gTE9XKSB7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJnNwLT50YXNrKTsKIAl9CisJZWxzZSBpZiAoZmlsbF9yeF9idWZmZXJzKHNwLCBybmdfbikgPT0gLUVOT01FTSkgeworCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwgZGV2LT5uYW1lKTsKKwkJCURCR19QUklOVChFUlJfREJHLCAiIGluIFJ4IEludHIhIVxuIik7CisJfQorCiAJYXRvbWljX2RlYygmc3AtPmlzcl9jbnQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMzg3NSwyNCArMzkzNCwzMyBAQAogCSAqLwogI2lmbmRlZiBDT05GSUdfUzJJT19OQVBJCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlpbnQgcmV0OwotCQlpbnQgcnhiX3NpemUgPSBhdG9taWNfcmVhZCgmc3AtPnJ4X2J1ZnNfbGVmdFtpXSk7Ci0JCWludCBsZXZlbCA9IHJ4X2J1ZmZlcl9sZXZlbChzcCwgcnhiX3NpemUsIGkpOworCQlpZiAoIXNwLT5scm8pIHsKKwkJCWludCByZXQ7CisJCQlpbnQgcnhiX3NpemUgPSBhdG9taWNfcmVhZCgmc3AtPnJ4X2J1ZnNfbGVmdFtpXSk7CisJCQlpbnQgbGV2ZWwgPSByeF9idWZmZXJfbGV2ZWwoc3AsIHJ4Yl9zaXplLCBpKTsKIAotCQlpZiAoKGxldmVsID09IFBBTklDKSAmJiAoIVRBU0tMRVRfSU5fVVNFKSkgewotCQkJREJHX1BSSU5UKElOVFJfREJHLCAiJXM6IFJ4IEJEIGhpdCAiLCBkZXYtPm5hbWUpOwotCQkJREJHX1BSSU5UKElOVFJfREJHLCAiUEFOSUMgbGV2ZWxzXG4iKTsKLQkJCWlmICgocmV0ID0gZmlsbF9yeF9idWZmZXJzKHNwLCBpKSkgPT0gLUVOT01FTSkgewotCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6T3V0IG9mIG1lbW9yeSIsCi0JCQkJCSAgZGV2LT5uYW1lKTsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiBpbiBJU1IhIVxuIik7CisJCQlpZiAoKGxldmVsID09IFBBTklDKSAmJiAoIVRBU0tMRVRfSU5fVVNFKSkgeworCQkJCURCR19QUklOVChJTlRSX0RCRywgIiVzOiBSeCBCRCBoaXQgIiwgCisJCQkJCQkJZGV2LT5uYW1lKTsKKwkJCQlEQkdfUFJJTlQoSU5UUl9EQkcsICJQQU5JQyBsZXZlbHNcbiIpOworCQkJCWlmICgocmV0ID0gZmlsbF9yeF9idWZmZXJzKHNwLCBpKSkgPT0gLUVOT01FTSkgeworCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOk91dCBvZiBtZW1vcnkiLAorCQkJCQkJICBkZXYtPm5hbWUpOworCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiBpbiBJU1IhIVxuIik7CisJCQkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOworCQkJCQlhdG9taWNfZGVjKCZzcC0+aXNyX2NudCk7CisJCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCQl9CiAJCQkJY2xlYXJfYml0KDAsICgmc3AtPnRhc2tsZXRfc3RhdHVzKSk7Ci0JCQkJYXRvbWljX2RlYygmc3AtPmlzcl9jbnQpOwotCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0gZWxzZSBpZiAobGV2ZWwgPT0gTE9XKSB7CisJCQkJdGFza2xldF9zY2hlZHVsZSgmc3AtPnRhc2spOwogCQkJfQotCQkJY2xlYXJfYml0KDAsICgmc3AtPnRhc2tsZXRfc3RhdHVzKSk7Ci0JCX0gZWxzZSBpZiAobGV2ZWwgPT0gTE9XKSB7Ci0JCQl0YXNrbGV0X3NjaGVkdWxlKCZzcC0+dGFzayk7CisJCX0KKwkJZWxzZSBpZiAoZmlsbF9yeF9idWZmZXJzKHNwLCBpKSA9PSAtRU5PTUVNKSB7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwKKwkJCQkJCQlkZXYtPm5hbWUpOworCQkJCURCR19QUklOVChFUlJfREJHLCAiIGluIFJ4IGludHIhIVxuIik7CisJCQkJYnJlYWs7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTQwOTIsNiArNDE2MCw3IEBACiAJCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKIAkJCW1lbWNweShzcC0+dXNyX2FkZHJzW2ldLmFkZHIsIG1jbGlzdC0+ZG1pX2FkZHIsCiAJCQkgICAgICAgRVRIX0FMRU4pOworCQkJbWFjX2FkZHIgPSAwOwogCQkJZm9yIChqID0gMDsgaiA8IEVUSF9BTEVOOyBqKyspIHsKIAkJCQltYWNfYWRkciB8PSBtY2xpc3QtPmRtaV9hZGRyW2pdOwogCQkJCW1hY19hZGRyIDw8PSA4OwpAQCAtNDEyOCw3ICs0MTk3LDcgQEAKICAqICBhcyBkZWZpbmVkIGluIGVycm5vLmggZmlsZSBvbiBmYWlsdXJlLgogICovCiAKLWludCBzMmlvX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqIGFkZHIpCitzdGF0aWMgaW50IHMyaW9fc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICogYWRkcikKIHsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwpAQCAtNTA0Myw2ICs1MTEyLDcgQEAKIAlpbnQgaSA9IDA7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwogCVN0YXRJbmZvX3QgKnN0YXRfaW5mbyA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvOworCXU2NCB0bXA7CiAKIAlzMmlvX3VwZHRfc3RhdHMoc3ApOwogCXRtcF9zdGF0c1tpKytdID0KQEAgLTUxMzQsNiArNTIwNCwxNiBAQAogCXRtcF9zdGF0c1tpKytdID0gMDsKIAl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5zaW5nbGVfZWNjX2VycnM7CiAJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuZG91YmxlX2VjY19lcnJzOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmNsdWJiZWRfZnJtc19jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc2VuZGluZ19ib3RoOworCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lm91dG9mX3NlcXVlbmNlX3BrdHM7CisJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuZmx1c2hfbWF4X3BrdHM7CisJdG1wID0gMDsKKwlpZiAoc3RhdF9pbmZvLT5zd19zdGF0Lm51bV9hZ2dyZWdhdGlvbnMpIHsKKwkJdG1wID0gc3RhdF9pbmZvLT5zd19zdGF0LnN1bV9hdmdfcGt0c19hZ2dyZWdhdGVkOworCQlkb19kaXYodG1wLCBzdGF0X2luZm8tPnN3X3N0YXQubnVtX2FnZ3JlZ2F0aW9ucyk7CisJfQorCXRtcF9zdGF0c1tpKytdID0gdG1wOwogfQogCiBzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTU1MTUsNiArNTU5NSwxNCBAQAogCS8qIFNldHRpbmcgaXRzIHJlY2VpdmUgbW9kZSAqLwogCXMyaW9fc2V0X211bHRpY2FzdChkZXYpOwogCisJaWYgKHNwLT5scm8pIHsKKwkJLyogSW5pdGlhbGl6ZSBtYXggYWdncmVnYXRhYmxlIHBrdHMgYmFzZWQgb24gTVRVICovCisJCXNwLT5scm9fbWF4X2FnZ3JfcGVyX3Nlc3MgPSAoKDE8PDE2KSAtIDEpIC8gZGV2LT5tdHU7CisJCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UoaWYgc3BlY2lmaWVkKSB1c2VyIHByb3ZpZGVkIHZhbHVlICovCisJCWlmIChscm9fbWF4X3BrdHMgPCBzcC0+bHJvX21heF9hZ2dyX3Blcl9zZXNzKQorCQkJc3AtPmxyb19tYXhfYWdncl9wZXJfc2VzcyA9IGxyb19tYXhfcGt0czsKKwl9CisKIAkvKiBFbmFibGUgdGFza2xldCBmb3IgdGhlIGRldmljZSAqLwogCXRhc2tsZXRfaW5pdCgmc3AtPnRhc2ssIHMyaW9fdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIGRldik7CiAKQEAgLTU2MDcsNiArNTY5NSw3IEBACiAJCSgodW5zaWduZWQgbG9uZykgcnhkcC0+SG9zdF9Db250cm9sKTsKIAlpbnQgcmluZ19ubyA9IHJpbmdfZGF0YS0+cmluZ19ubzsKIAl1MTYgbDNfY3N1bSwgbDRfY3N1bTsKKwlscm9fdCAqbHJvOwogCiAJc2tiLT5kZXYgPSBkZXY7CiAJaWYgKHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9UX0NPREUpIHsKQEAgLTU2NTUsNyArNTc0NCw4IEBACiAJCQlza2JfcHV0KHNrYiwgYnVmMl9sZW4pOwogCX0KIAotCWlmICgocnhkcC0+Q29udHJvbF8xICYgVENQX09SX1VEUF9GUkFNRSkgJiYKKwlpZiAoKHJ4ZHAtPkNvbnRyb2xfMSAmIFRDUF9PUl9VRFBfRlJBTUUpICYmICgoIXNwLT5scm8pIHx8CisJICAgIChzcC0+bHJvICYmICghKHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9GUkFNRV9JUF9GUkFHKSkpKSAmJgogCSAgICAoc3AtPnJ4X2NzdW0pKSB7CiAJCWwzX2NzdW0gPSBSWERfR0VUX0wzX0NLU1VNKHJ4ZHAtPkNvbnRyb2xfMSk7CiAJCWw0X2NzdW0gPSBSWERfR0VUX0w0X0NLU1VNKHJ4ZHAtPkNvbnRyb2xfMSk7CkBAIC01NjY2LDYgKzU3NTYsNTQgQEAKIAkJCSAqIGEgZmxhZyBpbiB0aGUgUnhELgogCQkJICovCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJaWYgKHNwLT5scm8pIHsKKwkJCQl1MzIgdGNwX2xlbjsKKwkJCQl1OCAqdGNwOworCQkJCWludCByZXQgPSAwOworCisJCQkJcmV0ID0gczJpb19jbHViX3RjcF9zZXNzaW9uKHNrYi0+ZGF0YSwgJnRjcCwKKwkJCQkJCSZ0Y3BfbGVuLCAmbHJvLCByeGRwLCBzcCk7CisJCQkJc3dpdGNoIChyZXQpIHsKKwkJCQkJY2FzZSAzOiAvKiBCZWdpbiBhbmV3ICovCisJCQkJCQlscm8tPnBhcmVudCA9IHNrYjsKKwkJCQkJCWdvdG8gYWdncmVnYXRlOworCQkJCQljYXNlIDE6IC8qIEFnZ3JlZ2F0ZSAqLworCQkJCQl7CisJCQkJCQlscm9fYXBwZW5kX3BrdChzcCwgbHJvLAorCQkJCQkJCXNrYiwgdGNwX2xlbik7CisJCQkJCQlnb3RvIGFnZ3JlZ2F0ZTsKKwkJCQkJfQorCQkJCQljYXNlIDQ6IC8qIEZsdXNoIHNlc3Npb24gKi8KKwkJCQkJeworCQkJCQkJbHJvX2FwcGVuZF9wa3Qoc3AsIGxybywKKwkJCQkJCQlza2IsIHRjcF9sZW4pOworCQkJCQkJcXVldWVfcnhfZnJhbWUobHJvLT5wYXJlbnQpOworCQkJCQkJY2xlYXJfbHJvX3Nlc3Npb24obHJvKTsKKwkJCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT4KKwkJCQkJCSAgICBzd19zdGF0LmZsdXNoX21heF9wa3RzKys7CisJCQkJCQlnb3RvIGFnZ3JlZ2F0ZTsKKwkJCQkJfQorCQkJCQljYXNlIDI6IC8qIEZsdXNoIGJvdGggKi8KKwkJCQkJCWxyby0+cGFyZW50LT5kYXRhX2xlbiA9CisJCQkJCQkJbHJvLT5mcmFnc19sZW47CisJCQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+CisJCQkJCQkgICAgIHN3X3N0YXQuc2VuZGluZ19ib3RoKys7CisJCQkJCQlxdWV1ZV9yeF9mcmFtZShscm8tPnBhcmVudCk7CisJCQkJCQljbGVhcl9scm9fc2Vzc2lvbihscm8pOworCQkJCQkJZ290byBzZW5kX3VwOworCQkJCQljYXNlIDA6IC8qIHNlc3Npb25zIGV4Y2VlZGVkICovCisJCQkJCWNhc2UgNTogLyoKKwkJCQkJCSAqIEZpcnN0IHBrdCBpbiBzZXNzaW9uIG5vdAorCQkJCQkJICogTDMvTDQgYWdncmVnYXRhYmxlCisJCQkJCQkgKi8KKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJCQkJIiVzOiBTYW1hZGhhbmEhIVxuIiwKKwkJCQkJCQkgX19GVU5DVElPTl9fKTsKKwkJCQkJCUJVRygpOworCQkJCX0KKwkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBQYWNrZXQgd2l0aCBlcnJvbmVvdXMgY2hlY2tzdW0sIGxldCB0aGUKQEAgLTU2NzcsMjUgKzU4MTUsMzEgQEAKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCX0KIAotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJaWYgKCFzcC0+bHJvKSB7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAjaWZkZWYgQ09ORklHX1MySU9fTkFQSQotCWlmIChzcC0+dmxncnAgJiYgUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpKSB7Ci0JCS8qIFF1ZXVlaW5nIHRoZSB2bGFuIGZyYW1lIHRvIHRoZSB1cHBlciBsYXllciAqLwotCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBzcC0+dmxncnAsCi0JCQlSWERfR0VUX1ZMQU5fVEFHKHJ4ZHAtPkNvbnRyb2xfMikpOwotCX0gZWxzZSB7Ci0JCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0JfQorCQlpZiAoc3AtPnZsZ3JwICYmIFJYRF9HRVRfVkxBTl9UQUcocnhkcC0+Q29udHJvbF8yKSkgeworCQkJLyogUXVldWVpbmcgdGhlIHZsYW4gZnJhbWUgdG8gdGhlIHVwcGVyIGxheWVyICovCisJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBzcC0+dmxncnAsCisJCQkJUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpKTsKKwkJfSBlbHNlIHsKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJCX0KICNlbHNlCi0JaWYgKHNwLT52bGdycCAmJiBSWERfR0VUX1ZMQU5fVEFHKHJ4ZHAtPkNvbnRyb2xfMikpIHsKLQkJLyogUXVldWVpbmcgdGhlIHZsYW4gZnJhbWUgdG8gdGhlIHVwcGVyIGxheWVyICovCi0JCXZsYW5faHdhY2NlbF9yeChza2IsIHNwLT52bGdycCwKLQkJCVJYRF9HRVRfVkxBTl9UQUcocnhkcC0+Q29udHJvbF8yKSk7Ci0JfSBlbHNlIHsKLQkJbmV0aWZfcngoc2tiKTsKLQl9CisJCWlmIChzcC0+dmxncnAgJiYgUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpKSB7CisJCQkvKiBRdWV1ZWluZyB0aGUgdmxhbiBmcmFtZSB0byB0aGUgdXBwZXIgbGF5ZXIgKi8KKwkJCXZsYW5faHdhY2NlbF9yeChza2IsIHNwLT52bGdycCwKKwkJCQlSWERfR0VUX1ZMQU5fVEFHKHJ4ZHAtPkNvbnRyb2xfMikpOworCQl9IGVsc2UgeworCQkJbmV0aWZfcngoc2tiKTsKKwkJfQogI2VuZGlmCisJfSBlbHNlIHsKK3NlbmRfdXA6CisJCXF1ZXVlX3J4X2ZyYW1lKHNrYik7CisJfQkJCiAJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKK2FnZ3JlZ2F0ZToKIAlhdG9taWNfZGVjKCZzcC0+cnhfYnVmc19sZWZ0W3Jpbmdfbm9dKTsKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KQEAgLTU3MTMsNyArNTg1Nyw3IEBACiAgKiAgdm9pZC4KICAqLwogCi12b2lkIHMyaW9fbGluayhuaWNfdCAqIHNwLCBpbnQgbGluaykKK3N0YXRpYyB2b2lkIHMyaW9fbGluayhuaWNfdCAqIHNwLCBpbnQgbGluaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIHNwLT5kZXY7CiAKQEAgLTU3MzgsNyArNTg4Miw3IEBACiAgKiAgcmV0dXJucyB0aGUgcmV2aXNpb24gSUQgb2YgdGhlIGRldmljZS4KICAqLwogCi1pbnQgZ2V0X3hlbmFfcmV2X2lkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIGludCBnZXRfeGVuYV9yZXZfaWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdTggaWQgPSAwOwogCWludCByZXQ7CkBAIC01ODA3LDYgKzU5NTEsOCBAQAogI2VuZGlmCiBtb2R1bGVfcGFyYW0ocnhzeW5jX2ZyZXF1ZW5jeSwgaW50LCAwKTsKIG1vZHVsZV9wYXJhbShpbnRyX3R5cGUsIGludCwgMCk7Cittb2R1bGVfcGFyYW0obHJvLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGxyb19tYXhfcGt0cywgaW50LCAwKTsKIAogLyoqCiAgKiAgczJpb19pbml0X25pYyAtIEluaXRpYWxpemF0aW9uIG9mIHRoZSBhZGFwdGVyIC4KQEAgLTU5MzgsNiArNjA4NCw3IEBACiAJZWxzZQogCQlzcC0+ZGV2aWNlX3R5cGUgPSBYRlJBTUVfSV9ERVZJQ0U7CiAKKwlzcC0+bHJvID0gbHJvOwogCQkKIAkvKiBJbml0aWFsaXplIHNvbWUgUENJL1BDSS1YIGZpZWxkcyBvZiB0aGUgTklDLiAqLwogCXMyaW9faW5pdF9wY2koc3ApOwpAQCAtNjI0MSw2ICs2Mzg4LDEwIEBACiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IDMtQnVmZmVyIG1vZGUgc3VwcG9ydCBoYXMgYmVlbiAiCiAJCQkgICJlbmFibGVkXG4iLGRldi0+bmFtZSk7CiAKKwlpZiAoc3AtPmxybykKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTGFyZ2UgcmVjZWl2ZSBvZmZsb2FkIGVuYWJsZWRcbiIsCisJCQlkZXYtPm5hbWUpOworCiAJLyogSW5pdGlhbGl6ZSBkZXZpY2UgbmFtZSAqLwogCXN0cmNweShzcC0+bmFtZSwgZGV2LT5uYW1lKTsKIAlpZiAoc3AtPmRldmljZV90eXBlICYgWEZSQU1FX0lJX0RFVklDRSkKQEAgLTYzNDMsNyArNjQ5NCw3IEBACiAgKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY2xlYW51cCByb3V0aW5lIGZvciB0aGUgZHJpdmVyLiBJdCB1bnJlZ2lzdCAqIGVycyB0aGUgZHJpdmVyLgogICovCiAKLXZvaWQgczJpb19jbG9zZXIodm9pZCkKK3N0YXRpYyB2b2lkIHMyaW9fY2xvc2VyKHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzMmlvX2RyaXZlcik7CiAJREJHX1BSSU5UKElOSVRfREJHLCAiY2xlYW51cCBkb25lXG4iKTsKQEAgLTYzNTEsMyArNjUwMiwzMTggQEAKIAogbW9kdWxlX2luaXQoczJpb19zdGFydGVyKTsKIG1vZHVsZV9leGl0KHMyaW9fY2xvc2VyKTsKKworc3RhdGljIGludCBjaGVja19MMl9scm9fY2FwYWJsZSh1OCAqYnVmZmVyLCBzdHJ1Y3QgaXBoZHIgKippcCwgCisJCXN0cnVjdCB0Y3BoZHIgKip0Y3AsIFJ4RF90ICpyeGRwKQoreworCWludCBpcF9vZmY7CisJdTggbDJfdHlwZSA9ICh1OCkoKHJ4ZHAtPkNvbnRyb2xfMSA+PiAzNykgJiAweDcpLCBpcF9sZW47CisKKwlpZiAoIShyeGRwLT5Db250cm9sXzEgJiBSWERfRlJBTUVfUFJPVE9fVENQKSkgeworCQlEQkdfUFJJTlQoSU5JVF9EQkcsIiVzOiBOb24tVENQIGZyYW1lcyBub3Qgc3VwcG9ydGVkIGZvciBMUk9cbiIsCisJCQkgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBUT0RPOgorCSAqIEJ5IGRlZmF1bHQgdGhlIFZMQU4gZmllbGQgaW4gdGhlIE1BQyBpcyBzdHJpcHBlZCBieSB0aGUgY2FyZCwgaWYgdGhpcworCSAqIGZlYXR1cmUgaXMgdHVybmVkIG9mZiBpbiByeF9wYV9jZmcgcmVnaXN0ZXIsIHRoZW4gdGhlIGlwX29mZiBmaWVsZAorCSAqIGhhcyB0byBiZSBzaGlmdGVkIGJ5IGEgZnVydGhlciAyIGJ5dGVzCisJICovCisJc3dpdGNoIChsMl90eXBlKSB7CisJCWNhc2UgMDogLyogRElYIHR5cGUgKi8KKwkJY2FzZSA0OiAvKiBESVggdHlwZSB3aXRoIFZMQU4gKi8KKwkJCWlwX29mZiA9IEhFQURFUl9FVEhFUk5FVF9JSV84MDJfM19TSVpFOworCQkJYnJlYWs7CisJCS8qIExMQywgU05BUCBldGMgYXJlIGNvbnNpZGVyZWQgbm9uLW1lcmdlYWJsZSAqLworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCX0KKworCSppcCA9IChzdHJ1Y3QgaXBoZHIgKikoKHU4ICopYnVmZmVyICsgaXBfb2ZmKTsKKwlpcF9sZW4gPSAodTgpKCgqaXApLT5paGwpOworCWlwX2xlbiA8PD0gMjsKKwkqdGNwID0gKHN0cnVjdCB0Y3BoZHIgKikoKHVuc2lnbmVkIGxvbmcpKmlwICsgaXBfbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX2Zvcl9zb2NrZXRfbWF0Y2gobHJvX3QgKmxybywgc3RydWN0IGlwaGRyICppcCwKKwkJCQkgIHN0cnVjdCB0Y3BoZHIgKnRjcCkKK3sKKwlEQkdfUFJJTlQoSU5GT19EQkcsIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKChscm8tPmlwaC0+c2FkZHIgIT0gaXAtPnNhZGRyKSB8fCAobHJvLT5pcGgtPmRhZGRyICE9IGlwLT5kYWRkcikgfHwKKwkgICAobHJvLT50Y3BoLT5zb3VyY2UgIT0gdGNwLT5zb3VyY2UpIHx8IChscm8tPnRjcGgtPmRlc3QgIT0gdGNwLT5kZXN0KSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfbDRfcHlsZF9sZW5ndGgoc3RydWN0IGlwaGRyICppcCwgc3RydWN0IHRjcGhkciAqdGNwKQoreworCXJldHVybihudG9ocyhpcC0+dG90X2xlbikgLSAoaXAtPmlobCA8PCAyKSAtICh0Y3AtPmRvZmYgPDwgMikpOworfQorCitzdGF0aWMgdm9pZCBpbml0aWF0ZV9uZXdfc2Vzc2lvbihscm9fdCAqbHJvLCB1OCAqbDJoLAorCQkgICAgIHN0cnVjdCBpcGhkciAqaXAsIHN0cnVjdCB0Y3BoZHIgKnRjcCwgdTMyIHRjcF9weWxkX2xlbikKK3sKKwlEQkdfUFJJTlQoSU5GT19EQkcsIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJbHJvLT5sMmggPSBsMmg7CisJbHJvLT5pcGggPSBpcDsKKwlscm8tPnRjcGggPSB0Y3A7CisJbHJvLT50Y3BfbmV4dF9zZXEgPSB0Y3BfcHlsZF9sZW4gKyBudG9obCh0Y3AtPnNlcSk7CisJbHJvLT50Y3BfYWNrID0gbnRvaGwodGNwLT5hY2tfc2VxKTsKKwlscm8tPnNnX251bSA9IDE7CisJbHJvLT50b3RhbF9sZW4gPSBudG9ocyhpcC0+dG90X2xlbik7CisJbHJvLT5mcmFnc19sZW4gPSAwOworCS8qIAorCSAqIGNoZWNrIGlmIHdlIHNhdyBUQ1AgdGltZXN0YW1wLiBPdGhlciBjb25zaXN0ZW5jeSBjaGVja3MgaGF2ZQorCSAqIGFscmVhZHkgYmVlbiBkb25lLgorIAkgKi8KKwlpZiAodGNwLT5kb2ZmID09IDgpIHsKKwkJdTMyICpwdHI7CisJCXB0ciA9ICh1MzIgKikodGNwKzEpOworCQlscm8tPnNhd190cyA9IDE7CisJCWxyby0+Y3VyX3RzdmFsID0gKihwdHIrMSk7CisJCWxyby0+Y3VyX3RzZWNyID0gKihwdHIrMik7CisJfQorCWxyby0+aW5fdXNlID0gMTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX0wzTDRfaGVhZGVyKG5pY190ICpzcCwgbHJvX3QgKmxybykKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwID0gbHJvLT5pcGg7CisJc3RydWN0IHRjcGhkciAqdGNwID0gbHJvLT50Y3BoOworCXUxNiBuY2hrOworCVN0YXRJbmZvX3QgKnN0YXRpbmZvID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm87CisJREJHX1BSSU5UKElORk9fREJHLCIlczogQmVlbiBoZXJlLi4uXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogVXBkYXRlIEwzIGhlYWRlciAqLworCWlwLT50b3RfbGVuID0gaHRvbnMobHJvLT50b3RhbF9sZW4pOworCWlwLT5jaGVjayA9IDA7CisJbmNoayA9IGlwX2Zhc3RfY3N1bSgodTggKilscm8tPmlwaCwgaXAtPmlobCk7CisJaXAtPmNoZWNrID0gbmNoazsKKworCS8qIFVwZGF0ZSBMNCBoZWFkZXIgKi8KKwl0Y3AtPmFja19zZXEgPSBscm8tPnRjcF9hY2s7CisJdGNwLT53aW5kb3cgPSBscm8tPndpbmRvdzsKKworCS8qIFVwZGF0ZSB0c2VjciBmaWVsZCBpZiB0aGlzIHNlc3Npb24gaGFzIHRpbWVzdGFtcHMgZW5hYmxlZCAqLworCWlmIChscm8tPnNhd190cykgeworCQl1MzIgKnB0ciA9ICh1MzIgKikodGNwICsgMSk7CisJCSoocHRyKzIpID0gbHJvLT5jdXJfdHNlY3I7CisJfQorCisJLyogVXBkYXRlIGNvdW50ZXJzIHJlcXVpcmVkIGZvciBjYWxjdWxhdGlvbiBvZgorCSAqIGF2ZXJhZ2Ugbm8uIG9mIHBhY2tldHMgYWdncmVnYXRlZC4KKwkgKi8KKwlzdGF0aW5mby0+c3dfc3RhdC5zdW1fYXZnX3BrdHNfYWdncmVnYXRlZCArPSBscm8tPnNnX251bTsKKwlzdGF0aW5mby0+c3dfc3RhdC5udW1fYWdncmVnYXRpb25zKys7Cit9CisKK3N0YXRpYyB2b2lkIGFnZ3JlZ2F0ZV9uZXdfcngobHJvX3QgKmxybywgc3RydWN0IGlwaGRyICppcCwKKwkJc3RydWN0IHRjcGhkciAqdGNwLCB1MzIgbDRfcHlsZCkKK3sKKwlEQkdfUFJJTlQoSU5GT19EQkcsIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fRlVOQ1RJT05fXyk7CisJbHJvLT50b3RhbF9sZW4gKz0gbDRfcHlsZDsKKwlscm8tPmZyYWdzX2xlbiArPSBsNF9weWxkOworCWxyby0+dGNwX25leHRfc2VxICs9IGw0X3B5bGQ7CisJbHJvLT5zZ19udW0rKzsKKworCS8qIFVwZGF0ZSBhY2sgc2VxIG5vLiBhbmQgd2luZG93IGFkKGZyb20gdGhpcyBwa3QpIGluIExSTyBvYmplY3QgKi8KKwlscm8tPnRjcF9hY2sgPSB0Y3AtPmFja19zZXE7CisJbHJvLT53aW5kb3cgPSB0Y3AtPndpbmRvdzsKKwkKKwlpZiAobHJvLT5zYXdfdHMpIHsKKwkJdTMyICpwdHI7CisJCS8qIFVwZGF0ZSB0c2VjciBhbmQgdHN2YWwgZnJvbSB0aGlzIHBhY2tldCAqLworCQlwdHIgPSAodTMyICopICh0Y3AgKyAxKTsKKwkJbHJvLT5jdXJfdHN2YWwgPSAqKHB0ciArIDEpOyAKKwkJbHJvLT5jdXJfdHNlY3IgPSAqKHB0ciArIDIpOworCX0KK30KKworc3RhdGljIGludCB2ZXJpZnlfbDNfbDRfbHJvX2NhcGFibGUobHJvX3QgKmxfbHJvLCBzdHJ1Y3QgaXBoZHIgKmlwLAorCQkJCSAgICBzdHJ1Y3QgdGNwaGRyICp0Y3AsIHUzMiB0Y3BfcHlsZF9sZW4pCit7CisJdTggKnB0cjsKKworCURCR19QUklOVChJTkZPX0RCRywiJXM6IEJlZW4gaGVyZS4uLlxuIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghdGNwX3B5bGRfbGVuKSB7CisJCS8qIFJ1bnQgZnJhbWUgb3IgYSBwdXJlIGFjayAqLworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGlwLT5paGwgIT0gNSkgLyogSVAgaGFzIG9wdGlvbnMgKi8KKwkJcmV0dXJuIC0xOworCisJaWYgKHRjcC0+dXJnIHx8IHRjcC0+cHNoIHx8IHRjcC0+cnN0IHx8IHRjcC0+c3luIHx8IHRjcC0+ZmluIHx8CisJCQkJCQkJCSF0Y3AtPmFjaykgeworCQkvKgorCQkgKiBDdXJyZW50bHkgcmVjb2duaXplIG9ubHkgdGhlIGFjayBjb250cm9sIHdvcmQgYW5kCisJCSAqIGFueSBvdGhlciBjb250cm9sIGZpZWxkIGJlaW5nIHNldCB3b3VsZCByZXN1bHQgaW4KKwkJICogZmx1c2hpbmcgdGhlIExSTyBzZXNzaW9uCisJCSAqLworCQlyZXR1cm4gLTE7CisJfQorCisJLyogCisJICogQWxsb3cgb25seSBvbmUgVENQIHRpbWVzdGFtcCBvcHRpb24uIERvbid0IGFnZ3JlZ2F0ZSBpZgorCSAqIGFueSBvdGhlciBvcHRpb25zIGFyZSBkZXRlY3RlZC4KKwkgKi8KKwlpZiAodGNwLT5kb2ZmICE9IDUgJiYgdGNwLT5kb2ZmICE9IDgpCisJCXJldHVybiAtMTsKKworCWlmICh0Y3AtPmRvZmYgPT0gOCkgeworCQlwdHIgPSAodTggKikodGNwICsgMSk7CQorCQl3aGlsZSAoKnB0ciA9PSBUQ1BPUFRfTk9QKQorCQkJcHRyKys7CisJCWlmICgqcHRyICE9IFRDUE9QVF9USU1FU1RBTVAgfHwgKihwdHIrMSkgIT0gVENQT0xFTl9USU1FU1RBTVApCisJCQlyZXR1cm4gLTE7CisKKwkJLyogRW5zdXJlIHRpbWVzdGFtcCB2YWx1ZSBpbmNyZWFzZXMgbW9ub3RvbmljYWxseSAqLworCQlpZiAobF9scm8pCisJCQlpZiAobF9scm8tPmN1cl90c3ZhbCA+ICooKHUzMiAqKShwdHIrMikpKQorCQkJCXJldHVybiAtMTsKKworCQkvKiB0aW1lc3RhbXAgZWNobyByZXBseSBzaG91bGQgYmUgbm9uLXplcm8gKi8KKwkJaWYgKCooKHUzMiAqKShwdHIrNikpID09IDApIAorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzMmlvX2NsdWJfdGNwX3Nlc3Npb24odTggKmJ1ZmZlciwgdTggKip0Y3AsIHUzMiAqdGNwX2xlbiwgbHJvX3QgKipscm8sCisJCSAgICAgIFJ4RF90ICpyeGRwLCBuaWNfdCAqc3ApCit7CisJc3RydWN0IGlwaGRyICppcDsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoOworCWludCByZXQgPSAwLCBpOworCisJaWYgKCEocmV0ID0gY2hlY2tfTDJfbHJvX2NhcGFibGUoYnVmZmVyLCAmaXAsIChzdHJ1Y3QgdGNwaGRyICoqKXRjcCwKKwkJCQkJIHJ4ZHApKSkgeworCQlEQkdfUFJJTlQoSU5GT19EQkcsIklQIFNhZGRyOiAleCBEYWRkcjogJXhcbiIsCisJCQkgIGlwLT5zYWRkciwgaXAtPmRhZGRyKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gcmV0OworCX0KKworCXRjcGggPSAoc3RydWN0IHRjcGhkciAqKSp0Y3A7CisJKnRjcF9sZW4gPSBnZXRfbDRfcHlsZF9sZW5ndGgoaXAsIHRjcGgpOworCWZvciAoaT0wOyBpPE1BWF9MUk9fU0VTU0lPTlM7IGkrKykgeworCQlscm9fdCAqbF9scm8gPSAmc3AtPmxybzBfbltpXTsKKwkJaWYgKGxfbHJvLT5pbl91c2UpIHsKKwkJCWlmIChjaGVja19mb3Jfc29ja2V0X21hdGNoKGxfbHJvLCBpcCwgdGNwaCkpCisJCQkJY29udGludWU7CisJCQkvKiBTb2NrIHBhaXIgbWF0Y2hlZCAqLworCQkJKmxybyA9IGxfbHJvOworCisJCQlpZiAoKCpscm8pLT50Y3BfbmV4dF9zZXEgIT0gbnRvaGwodGNwaC0+c2VxKSkgeworCQkJCURCR19QUklOVChJTkZPX0RCRywgIiVzOk91dCBvZiBvcmRlci4gZXhwZWN0ZWQgIgorCQkJCQkgICIweCV4LCBhY3R1YWwgMHgleFxuIiwgX19GVU5DVElPTl9fLAorCQkJCQkgICgqbHJvKS0+dGNwX25leHRfc2VxLAorCQkJCQkgIG50b2hsKHRjcGgtPnNlcSkpOworCisJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPgorCQkJCSAgIHN3X3N0YXQub3V0b2Zfc2VxdWVuY2VfcGt0cysrOworCQkJCXJldCA9IDI7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICghdmVyaWZ5X2wzX2w0X2xyb19jYXBhYmxlKGxfbHJvLCBpcCwgdGNwaCwqdGNwX2xlbikpCisJCQkJcmV0ID0gMTsgLyogQWdncmVnYXRlICovCisJCQllbHNlCisJCQkJcmV0ID0gMjsgLyogRmx1c2ggYm90aCAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmV0ID09IDApIHsKKwkJLyogQmVmb3JlIHNlYXJjaGluZyBmb3IgYXZhaWxhYmxlIExSTyBvYmplY3RzLAorCQkgKiBjaGVjayBpZiB0aGUgcGt0IGlzIEwzL0w0IGFnZ3JlZ2F0YWJsZS4gSWYgbm90CisJCSAqIGRvbid0IGNyZWF0ZSBuZXcgTFJPIHNlc3Npb24uIEp1c3Qgc2VuZCB0aGlzCisJCSAqIHBhY2tldCB1cC4KKwkJICovCisJCWlmICh2ZXJpZnlfbDNfbDRfbHJvX2NhcGFibGUoTlVMTCwgaXAsIHRjcGgsICp0Y3BfbGVuKSkgeworCQkJcmV0dXJuIDU7CisJCX0KKworCQlmb3IgKGk9MDsgaTxNQVhfTFJPX1NFU1NJT05TOyBpKyspIHsKKwkJCWxyb190ICpsX2xybyA9ICZzcC0+bHJvMF9uW2ldOworCQkJaWYgKCEobF9scm8tPmluX3VzZSkpIHsKKwkJCQkqbHJvID0gbF9scm87CisJCQkJcmV0ID0gMzsgLyogQmVnaW4gYW5ldyAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKHJldCA9PSAwKSB7IC8qIHNlc3Npb25zIGV4Y2VlZGVkICovCisJCURCR19QUklOVChJTkZPX0RCRywiJXM6QWxsIExSTyBzZXNzaW9ucyBhbHJlYWR5IGluIHVzZVxuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJKmxybyA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAzOgorCQkJaW5pdGlhdGVfbmV3X3Nlc3Npb24oKmxybywgYnVmZmVyLCBpcCwgdGNwaCwgKnRjcF9sZW4pOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXVwZGF0ZV9MM0w0X2hlYWRlcihzcCwgKmxybyk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYWdncmVnYXRlX25ld19yeCgqbHJvLCBpcCwgdGNwaCwgKnRjcF9sZW4pOworCQkJaWYgKCgqbHJvKS0+c2dfbnVtID09IHNwLT5scm9fbWF4X2FnZ3JfcGVyX3Nlc3MpIHsKKwkJCQl1cGRhdGVfTDNMNF9oZWFkZXIoc3AsICpscm8pOworCQkJCXJldCA9IDQ7IC8qIEZsdXNoIHRoZSBMUk8gKi8KKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJHX1BSSU5UKEVSUl9EQkcsIiVzOkRvbnQga25vdywgY2FuJ3Qgc2F5ISFcbiIsCisJCQkJX19GVU5DVElPTl9fKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2xyb19zZXNzaW9uKGxyb190ICpscm8pCit7CisJc3RhdGljIHUxNiBscm9fc3RydWN0X3NpemUgPSBzaXplb2YobHJvX3QpOworCisJbWVtc2V0KGxybywgMCwgbHJvX3N0cnVjdF9zaXplKTsKK30KKworc3RhdGljIHZvaWQgcXVldWVfcnhfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CisKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworI2lmZGVmIENPTkZJR19TMklPX05BUEkKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOworI2Vsc2UKKwluZXRpZl9yeChza2IpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGxyb19hcHBlbmRfcGt0KG5pY190ICpzcCwgbHJvX3QgKmxybywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgIHUzMiB0Y3BfbGVuKQoreworCXN0cnVjdCBza19idWZmICp0bXAsICpmaXJzdCA9IGxyby0+cGFyZW50OworCisJZmlyc3QtPmxlbiArPSB0Y3BfbGVuOworCWZpcnN0LT5kYXRhX2xlbiA9IGxyby0+ZnJhZ3NfbGVuOworCXNrYl9wdWxsKHNrYiwgKHNrYi0+bGVuIC0gdGNwX2xlbikpOworCWlmICgodG1wID0gc2tiX3NoaW5mbyhmaXJzdCktPmZyYWdfbGlzdCkpIHsKKwkJd2hpbGUgKHRtcC0+bmV4dCkKKwkJCXRtcCA9IHRtcC0+bmV4dDsKKwkJdG1wLT5uZXh0ID0gc2tiOworCX0KKwllbHNlCisJCXNrYl9zaGluZm8oZmlyc3QpLT5mcmFnX2xpc3QgPSBza2I7CisJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuY2x1YmJlZF9mcm1zX2NudCsrOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uaCBiL2RyaXZlcnMvbmV0L3MyaW8uaAppbmRleCA4NTJhNmE4Li4wYTBiNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmgKKysrIGIvZHJpdmVycy9uZXQvczJpby5oCkBAIC02NCw3ICs2NCw3IEBACiAjZGVmaW5lCUlOVFJfREJHCTQKIAogLyogR2xvYmFsIHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgcHJlc2VudCBkZWJ1ZyBsZXZlbCBvZiB0aGUgZHJpdmVyLiAqLwotaW50IGRlYnVnX2xldmVsID0gRVJSX0RCRzsJLyogRGVmYXVsdCBsZXZlbC4gKi8KK3N0YXRpYyBpbnQgZGVidWdfbGV2ZWwgPSBFUlJfREJHOwogCiAvKiBERUJVRyBtZXNzYWdlIHByaW50LiAqLwogI2RlZmluZSBEQkdfUFJJTlQoZGJnX2xldmVsLCBhcmdzLi4uKSAgaWYoIShkZWJ1Z19sZXZlbDxkYmdfbGV2ZWwpKSBwcmludGsoYXJncykKQEAgLTc4LDYgKzc4LDEzIEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHNpbmdsZV9lY2NfZXJyczsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZG91YmxlX2VjY19lcnJzOworCS8qIExSTyBzdGF0aXN0aWNzICovCisJdW5zaWduZWQgbG9uZyBsb25nIGNsdWJiZWRfZnJtc19jbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHNlbmRpbmdfYm90aDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgb3V0b2Zfc2VxdWVuY2VfcGt0czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZmx1c2hfbWF4X3BrdHM7CisJdW5zaWduZWQgbG9uZyBsb25nIHN1bV9hdmdfcGt0c19hZ2dyZWdhdGVkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBudW1fYWdncmVnYXRpb25zOwogfSBzd1N0YXRfdDsKIAogLyogVGhlIHN0YXRpc3RpY3MgYmxvY2sgb2YgWGVuYSAqLwpAQCAtMjY4LDcgKzI3NSw3IEBACiAjZGVmaW5lIE1BWF9SWF9SSU5HUyA4CiAKIC8qIEZJRk8gbWFwcGluZ3MgZm9yIGFsbCBwb3NzaWJsZSBudW1iZXIgb2YgZmlmb3MgY29uZmlndXJlZCAqLwotaW50IGZpZm9fbWFwW11bTUFYX1RYX0ZJRk9TXSA9IHsKK3N0YXRpYyBpbnQgZmlmb19tYXBbXVtNQVhfVFhfRklGT1NdID0gewogCXswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKIAl7MCwgMCwgMCwgMCwgMSwgMSwgMSwgMX0sCiAJezAsIDAsIDAsIDEsIDEsIDEsIDIsIDJ9LApAQCAtNjgwLDYgKzY4NywyNCBAQAogCXU2NCBkYXRhOwogfTsKIAorLyogRGF0YSBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IGEgTFJPIHNlc3Npb24gKi8KK3R5cGVkZWYgc3RydWN0IGxybyB7CisJc3RydWN0IHNrX2J1ZmYJKnBhcmVudDsKKwl1OAkJKmwyaDsKKwlzdHJ1Y3QgaXBoZHIJKmlwaDsKKwlzdHJ1Y3QgdGNwaGRyCSp0Y3BoOworCXUzMgkJdGNwX25leHRfc2VxOworCXUzMgkJdGNwX2FjazsKKwlpbnQJCXRvdGFsX2xlbjsKKwlpbnQJCWZyYWdzX2xlbjsKKwlpbnQJCXNnX251bTsKKwlpbnQJCWluX3VzZTsKKwl1MTYJCXdpbmRvdzsKKwl1MzIJCWN1cl90c3ZhbDsKKwl1MzIJCWN1cl90c2VjcjsKKwl1OAkJc2F3X3RzOworfWxyb190OworCiAvKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIG9uZSBpbnN0YW5jZSBvZiB0aGUgTklDICovCiBzdHJ1Y3QgczJpb19uaWMgewogCWludCByeGRfbW9kZTsKQEAgLTc4NCw2ICs4MDksMTMgQEAKICNkZWZpbmUgWEZSQU1FX0lJX0RFVklDRQkyCiAJdTggZGV2aWNlX3R5cGU7CiAKKyNkZWZpbmUgTUFYX0xST19TRVNTSU9OUwkzMgorCWxyb190IGxybzBfbltNQVhfTFJPX1NFU1NJT05TXTsKKwl1bnNpZ25lZCBsb25nCWNsdWJiZWRfZnJtc19jbnQ7CisJdW5zaWduZWQgbG9uZwlzZW5kaW5nX2JvdGg7CisJdTgJCWxybzsKKwl1MTYJCWxyb19tYXhfYWdncl9wZXJfc2VzczsKKwogI2RlZmluZSBJTlRBCTAKICNkZWZpbmUgTVNJCTEKICNkZWZpbmUgTVNJX1gJMgpAQCAtOTExLDE4ICs5NDMsMTYgQEAKIHN0YXRpYyB2b2lkIGFsYXJtX2ludHJfaGFuZGxlcihzdHJ1Y3QgczJpb19uaWMgKnNwKTsKIAogc3RhdGljIGludCBzMmlvX3N0YXJ0ZXIodm9pZCk7Ci12b2lkIHMyaW9fY2xvc2VyKHZvaWQpOwogc3RhdGljIHZvaWQgczJpb190eF93YXRjaGRvZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHMyaW9fdGFza2xldCh1bnNpZ25lZCBsb25nIGRldl9hZGRyKTsKIHN0YXRpYyB2b2lkIHMyaW9fc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcnhfb3NtX2hhbmRsZXIocmluZ19pbmZvX3QgKnJpbmdfZGF0YSwgUnhEX3QgKiByeGRwKTsKLXZvaWQgczJpb19saW5rKG5pY190ICogc3AsIGludCBsaW5rKTsKLXZvaWQgczJpb19yZXNldChuaWNfdCAqIHNwKTsKK3N0YXRpYyB2b2lkIHMyaW9fbGluayhuaWNfdCAqIHNwLCBpbnQgbGluayk7CiAjaWYgZGVmaW5lZChDT05GSUdfUzJJT19OQVBJKQogc3RhdGljIGludCBzMmlvX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpOwogI2VuZGlmCiBzdGF0aWMgdm9pZCBzMmlvX2luaXRfcGNpKG5pY190ICogc3ApOwotaW50IHMyaW9fc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICogYWRkcik7CitzdGF0aWMgaW50IHMyaW9fc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICogYWRkcik7CiBzdGF0aWMgdm9pZCBzMmlvX2FsYXJtX2hhbmRsZSh1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIGludCBzMmlvX2VuYWJsZV9tc2kobmljX3QgKm5pYyk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgczJpb19tc2lfaGFuZGxlKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpAQCAtOTMwLDE0ICs5NjAsMTkgQEAKIHMyaW9fbXNpeF9yaW5nX2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIHN0YXRpYyBpcnFyZXR1cm5fdAogczJpb19tc2l4X2ZpZm9faGFuZGxlKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotaW50IHMyaW9fZW5hYmxlX21zaV94KG5pY190ICpuaWMpOwogc3RhdGljIGlycXJldHVybl90IHMyaW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIGludCB2ZXJpZnlfeGVuYV9xdWllc2NlbmNlKG5pY190ICpzcCwgdTY0IHZhbDY0LCBpbnQgZmxhZyk7CiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyB2b2lkIHMyaW9fc2V0X2xpbmsodW5zaWduZWQgbG9uZyBkYXRhKTsKLWludCBzMmlvX3NldF9zd2FwcGVyKG5pY190ICogc3ApOworc3RhdGljIGludCBzMmlvX3NldF9zd2FwcGVyKG5pY190ICogc3ApOwogc3RhdGljIHZvaWQgczJpb19jYXJkX2Rvd24obmljX3QgKm5pYyk7CiBzdGF0aWMgaW50IHMyaW9fY2FyZF91cChuaWNfdCAqbmljKTsKLWludCBnZXRfeGVuYV9yZXZfaWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotdm9pZCByZXN0b3JlX3htc2lfZGF0YShuaWNfdCAqbmljKTsKK3N0YXRpYyBpbnQgZ2V0X3hlbmFfcmV2X2lkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfeG1zaV9kYXRhKG5pY190ICpuaWMpOworCitzdGF0aWMgaW50IHMyaW9fY2x1Yl90Y3Bfc2Vzc2lvbih1OCAqYnVmZmVyLCB1OCAqKnRjcCwgdTMyICp0Y3BfbGVuLCBscm9fdCAqKmxybywgUnhEX3QgKnJ4ZHAsIG5pY190ICpzcCk7CitzdGF0aWMgdm9pZCBjbGVhcl9scm9fc2Vzc2lvbihscm9fdCAqbHJvKTsKK3N0YXRpYyB2b2lkIHF1ZXVlX3J4X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIHZvaWQgdXBkYXRlX0wzTDRfaGVhZGVyKG5pY190ICpzcCwgbHJvX3QgKmxybyk7CitzdGF0aWMgdm9pZCBscm9fYXBwZW5kX3BrdChuaWNfdCAqc3AsIGxyb190ICpscm8sIHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0Y3BfbGVuKTsKICNlbmRpZgkJCQkvKiBfUzJJT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEwMDAuYyBiL2RyaXZlcnMvbmV0L3NiMTAwMC5jCmluZGV4IDc2MTM5NDcuLjY2Y2YyMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTAwMC5jCkBAIC01OSw3ICs1OSw3IEBACiAjaWZkZWYgU0IxMDAwX0RFQlVHCiBzdGF0aWMgaW50IHNiMTAwMF9kZWJ1ZyA9IFNCMTAwMF9ERUJVRzsKICNlbHNlCi1zdGF0aWMgaW50IHNiMTAwMF9kZWJ1ZyA9IDE7CitzdGF0aWMgY29uc3QgaW50IHNiMTAwMF9kZWJ1ZyA9IDE7CiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IGludCBTQjEwMDBfSU9fRVhURU5UID0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwppbmRleCBhYTRjYTE4Li5mMmJlOWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyLDIwMDMgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyLDIwMDMsMjAwNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIFNCTUFDX0VUSDBfSFdBRERSICI0MDowMDowMDowMDowMTowMCIKICNkZWZpbmUgU0JNQUNfRVRIMV9IV0FERFIgIjQwOjAwOjAwOjAwOjAxOjAxIgogI2RlZmluZSBTQk1BQ19FVEgyX0hXQUREUiAiNDA6MDA6MDA6MDA6MDE6MDIiCisjZGVmaW5lIFNCTUFDX0VUSDNfSFdBRERSICI0MDowMDowMDowMDowMTowMyIKICNlbmRpZgogCiAKQEAgLTU3LDcgKzU4LDcgQEAKIAogI2RlZmluZSBDT05GSUdfU0JNQUNfQ09BTEVTQ0UKIAotI2RlZmluZSBNQVhfVU5JVFMgMwkJLyogTW9yZSBhcmUgc3VwcG9ydGVkLCBsaW1pdCBvbmx5IG9uIG9wdGlvbnMgKi8KKyNkZWZpbmUgTUFYX1VOSVRTIDQJCS8qIE1vcmUgYXJlIHN1cHBvcnRlZCwgbGltaXQgb25seSBvbiBvcHRpb25zICovCiAKIC8qIFRpbWUgaW4gamlmZmllcyBiZWZvcmUgY29uY2x1ZGluZyB0aGUgdHJhbnNtaXR0ZXIgaXMgaHVuZy4gKi8KICNkZWZpbmUgVFhfVElNRU9VVCAgKDIqSFopCkBAIC04NSwxMSArODYsMTEgQEAKICAgIFRoZSBtZWRpYSB0eXBlIGlzIHVzdWFsbHkgcGFzc2VkIGluICdvcHRpb25zW10nLgogKi8KICNpZmRlZiBNT0RVTEUKLXN0YXRpYyBpbnQgb3B0aW9uc1tNQVhfVU5JVFNdID0gey0xLCAtMSwgLTF9Oworc3RhdGljIGludCBvcHRpb25zW01BWF9VTklUU10gPSB7LTEsIC0xLCAtMSwgLTF9OwogbW9kdWxlX3BhcmFtX2FycmF5KG9wdGlvbnMsIGludCwgTlVMTCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKG9wdGlvbnMsICIxLSIgX19NT0RVTEVfU1RSSU5HKE1BWF9VTklUUykpOwogCi1zdGF0aWMgaW50IGZ1bGxfZHVwbGV4W01BWF9VTklUU10gPSB7LTEsIC0xLCAtMX07CitzdGF0aWMgaW50IGZ1bGxfZHVwbGV4W01BWF9VTklUU10gPSB7LTEsIC0xLCAtMSwgLTF9OwogbW9kdWxlX3BhcmFtX2FycmF5KGZ1bGxfZHVwbGV4LCBpbnQsIE5VTEwsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhmdWxsX2R1cGxleCwgIjEtIiBfX01PRFVMRV9TVFJJTkcoTUFYX1VOSVRTKSk7CiAjZW5kaWYKQEAgLTEwNSwxMyArMTA2LDI2IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfZGVmcy5oPgorI2lmIGRlZmluZWQoQ09ORklHX1NJQllURV9CQ00xeDU1KSB8fCBkZWZpbmVkKENPTkZJR19TSUJZVEVfQkNNMXg4MCkKKyNpbmNsdWRlIDxhc20vc2lieXRlL2JjbTE0ODBfcmVncy5oPgorI2luY2x1ZGUgPGFzbS9zaWJ5dGUvYmNtMTQ4MF9pbnQuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX1NJQllURV9TQjEyNTApIHx8IGRlZmluZWQoQ09ORklHX1NJQllURV9CQ00xMTJYKQogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9pbnQuaD4KKyNlbHNlCisjZXJyb3IgaW52YWxpZCBTaUJ5dGUgTUFDIGNvbmZpZ3VhdGlvbgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfc2NkLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfbWFjLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfaW50Lmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfc2NkLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TSUJZVEVfQkNNMXg1NSkgfHwgZGVmaW5lZChDT05GSUdfU0lCWVRFX0JDTTF4ODApCisjZGVmaW5lIFVOSVRfSU5UKG4pCQkoS19CQ00xNDgwX0lOVF9NQUNfMCArICgobikgKiAyKSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NJQllURV9TQjEyNTApIHx8IGRlZmluZWQoQ09ORklHX1NJQllURV9CQ00xMTJYKQorI2RlZmluZSBVTklUX0lOVChuKQkJKEtfSU5UX01BQ18wICsgKG4pKQorI2Vsc2UKKyNlcnJvciBpbnZhbGlkIFNpQnl0ZSBNQUMgY29uZmlndWF0aW9uCisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBTaW1wbGUgdHlwZXMKQEAgLTE0NzYsMTAgKzE0OTAsMTAgQEAKIAkgKiBhbmQgbWFrZSBzdXJlIHRoYXQgUkRfVEhSU0ggKyBXUl9USFJTSCA8PTEyOCBmb3IgcGFzczIgYW5kIGFib3ZlCiAJICogVXNlIGEgbGFyZ2VyIFJEX1RIUlNIIGZvciBnaWdhYml0CiAJICovCi0JaWYgKHBlcmlwaF9yZXYgPj0gMikKLQkJdGhfdmFsdWUgPSA2NDsKLQllbHNlCisJaWYgKHNvY190eXBlID09IEtfU1lTX1NPQ19UWVBFX0JDTTEyNTAgJiYgcGVyaXBoX3JldiA8IDIpCiAJCXRoX3ZhbHVlID0gMjg7CisJZWxzZQorCQl0aF92YWx1ZSA9IDY0OwogCiAJZmlmbyA9IFZfTUFDX1RYX1dSX1RIUlNIKDQpIHwJLyogTXVzdCBiZSAnNCcgb3IgJzgnICovCiAJCSgocy0+c2JtX3NwZWVkID09IHNibWFjX3NwZWVkXzEwMDApCkBAIC0xNTg5LDEzICsxNjAzLDE3IEBACiAJICogVHVybiBvbiB0aGUgcmVzdCBvZiB0aGUgYml0cyBpbiB0aGUgZW5hYmxlIHJlZ2lzdGVyCiAJICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TSUJZVEVfQkNNMXg1NSkgfHwgZGVmaW5lZChDT05GSUdfU0lCWVRFX0JDTTF4ODApCisJX19yYXdfd3JpdGVxKE1fTUFDX1JYRE1BX0VOMCB8CisJCSAgICAgICBNX01BQ19UWERNQV9FTjAsIHMtPnNibV9tYWNlbmFibGUpOworI2VsaWYgZGVmaW5lZChDT05GSUdfU0lCWVRFX1NCMTI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0lCWVRFX0JDTTExMlgpCiAJX19yYXdfd3JpdGVxKE1fTUFDX1JYRE1BX0VOMCB8CiAJCSAgICAgICBNX01BQ19UWERNQV9FTjAgfAogCQkgICAgICAgTV9NQUNfUlhfRU5BQkxFIHwKIAkJICAgICAgIE1fTUFDX1RYX0VOQUJMRSwgcy0+c2JtX21hY2VuYWJsZSk7Ci0KLQotCisjZWxzZQorI2Vycm9yIGludmFsaWQgU2lCeXRlIE1BQyBjb25maWd1YXRpb24KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NCTUFDX0NPQUxFU0NFCiAJLyoKQEAgLTE3ODYsMTEgKzE4MDQsMTIgQEAKIAlyZWcgJj0gfk1fTUFDX0lQSERSX09GRlNFVCB8IFZfTUFDX0lQSERSX09GRlNFVCgxNSk7CiAJX19yYXdfd3JpdGVxKHJlZywgc2MtPnNibV9yeGZpbHRlcik7CiAKLQkvKiByZWFkIHN5c3RlbSBpZGVudGlmaWNhdGlvbiB0byBkZXRlcm1pbmUgcmV2aXNpb24gKi8KLQlpZiAocGVyaXBoX3JldiA+PSAyKSB7Ci0JCXNjLT5yeF9od19jaGVja3N1bSA9IEVOQUJMRTsKLQl9IGVsc2UgeworCS8qIEJDTTEyNTAgcGFzczEgZGlkbid0IGhhdmUgaGFyZHdhcmUgY2hlY2tzdW0uICBFdmVyeXRoaW5nCisJICAgbGF0ZXIgZG9lcy4gICovCisJaWYgKHNvY190eXBlID09IEtfU1lTX1NPQ19UWVBFX0JDTTEyNTAgJiYgcGVyaXBoX3JldiA8IDIpIHsKIAkJc2MtPnJ4X2h3X2NoZWNrc3VtID0gRElTQUJMRTsKKwl9IGVsc2UgeworCQlzYy0+cnhfaHdfY2hlY2tzdW0gPSBFTkFCTEU7CiAJfQogfQogCkBAIC0yMjIwLDcgKzIyMzksNyBAQAogCiAKIAotI2lmIGRlZmluZWQoU0JNQUNfRVRIMF9IV0FERFIpIHx8IGRlZmluZWQoU0JNQUNfRVRIMV9IV0FERFIpIHx8IGRlZmluZWQoU0JNQUNfRVRIMl9IV0FERFIpCisjaWYgZGVmaW5lZChTQk1BQ19FVEgwX0hXQUREUikgfHwgZGVmaW5lZChTQk1BQ19FVEgxX0hXQUREUikgfHwgZGVmaW5lZChTQk1BQ19FVEgyX0hXQUREUikgfHwgZGVmaW5lZChTQk1BQ19FVEgzX0hXQUREUikKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgU0JNQUNfUEFSU0VfWERJR0lUKHN0cikKICAqCkBAIC0yNzkyLDcgKzI4MTEsNyBAQAogCiAKIAotI2lmIGRlZmluZWQoU0JNQUNfRVRIMF9IV0FERFIpIHx8IGRlZmluZWQoU0JNQUNfRVRIMV9IV0FERFIpIHx8IGRlZmluZWQoU0JNQUNfRVRIMl9IV0FERFIpCisjaWYgZGVmaW5lZChTQk1BQ19FVEgwX0hXQUREUikgfHwgZGVmaW5lZChTQk1BQ19FVEgxX0hXQUREUikgfHwgZGVmaW5lZChTQk1BQ19FVEgyX0hXQUREUikgfHwgZGVmaW5lZChTQk1BQ19FVEgzX0hXQUREUikKIHN0YXRpYyB2b2lkCiBzYm1hY19zZXR1cF9od2FkZHIoaW50IGNoYW4sY2hhciAqYWRkcikKIHsKQEAgLTI4MTgsMjUgKzI4MzcsNyBAQAogCXVuc2lnbmVkIGxvbmcgcG9ydDsKIAlpbnQgY2hpcF9tYXhfdW5pdHM7CiAKLQkvKgotCSAqIEZvciBicmluZ3VwIHdoZW4gbm90IHVzaW5nIHRoZSBmaXJtd2FyZSwgd2UgY2FuIHByZS1maWxsCi0JICogdGhlIE1BQyBhZGRyZXNzZXMgdXNpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwotCSAqIHNwZWNpZmllZCBpbiB0aGlzIGZpbGUgKG9yIG1heWJlIGZyb20gdGhlIGNvbmZpZyBmaWxlPykKLQkgKi8KLSNpZmRlZiBTQk1BQ19FVEgwX0hXQUREUgotCXNibWFjX3NldHVwX2h3YWRkcigwLFNCTUFDX0VUSDBfSFdBRERSKTsKLSNlbmRpZgotI2lmZGVmIFNCTUFDX0VUSDFfSFdBRERSCi0Jc2JtYWNfc2V0dXBfaHdhZGRyKDEsU0JNQUNfRVRIMV9IV0FERFIpOwotI2VuZGlmCi0jaWZkZWYgU0JNQUNfRVRIMl9IV0FERFIKLQlzYm1hY19zZXR1cF9od2FkZHIoMixTQk1BQ19FVEgyX0hXQUREUik7Ci0jZW5kaWYKLQotCS8qCi0JICogV2FsayB0aHJvdWdoIHRoZSBFdGhlcm5ldCBjb250cm9sbGVycyBhbmQgZmluZAotCSAqIHRob3NlIHdobyBoYXZlIHRoZWlyIE1BQyBhZGRyZXNzZXMgc2V0LgotCSAqLworCS8qIFNldCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSB1bml0cyBiYXNlZCBvbiB0aGUgU09DIHR5cGUuICAqLwogCXN3aXRjaCAoc29jX3R5cGUpIHsKIAljYXNlIEtfU1lTX1NPQ19UWVBFX0JDTTEyNTA6CiAJY2FzZSBLX1NZU19TT0NfVFlQRV9CQ00xMjUwX0FMVDoKQEAgLTI4NDgsNiArMjg0OSwxMCBAQAogCWNhc2UgS19TWVNfU09DX1RZUEVfQkNNMTI1MF9BTFQyOiAvKiBIeWJyaWQgKi8KIAkJY2hpcF9tYXhfdW5pdHMgPSAyOwogCQlicmVhazsKKwljYXNlIEtfU1lTX1NPQ19UWVBFX0JDTTF4NTU6CisJY2FzZSBLX1NZU19TT0NfVFlQRV9CQ00xeDgwOgorCQljaGlwX21heF91bml0cyA9IDQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWNoaXBfbWF4X3VuaXRzID0gMDsKIAkJYnJlYWs7CkBAIC0yODU1LDYgKzI4NjAsMzIgQEAKIAlpZiAoY2hpcF9tYXhfdW5pdHMgPiBNQVhfVU5JVFMpCiAJCWNoaXBfbWF4X3VuaXRzID0gTUFYX1VOSVRTOwogCisJLyoKKwkgKiBGb3IgYnJpbmd1cCB3aGVuIG5vdCB1c2luZyB0aGUgZmlybXdhcmUsIHdlIGNhbiBwcmUtZmlsbAorCSAqIHRoZSBNQUMgYWRkcmVzc2VzIHVzaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKwkgKiBzcGVjaWZpZWQgaW4gdGhpcyBmaWxlIChvciBtYXliZSBmcm9tIHRoZSBjb25maWcgZmlsZT8pCisJICovCisjaWZkZWYgU0JNQUNfRVRIMF9IV0FERFIKKwlpZiAoY2hpcF9tYXhfdW5pdHMgPiAwKQorCSAgc2JtYWNfc2V0dXBfaHdhZGRyKDAsU0JNQUNfRVRIMF9IV0FERFIpOworI2VuZGlmCisjaWZkZWYgU0JNQUNfRVRIMV9IV0FERFIKKwlpZiAoY2hpcF9tYXhfdW5pdHMgPiAxKQorCSAgc2JtYWNfc2V0dXBfaHdhZGRyKDEsU0JNQUNfRVRIMV9IV0FERFIpOworI2VuZGlmCisjaWZkZWYgU0JNQUNfRVRIMl9IV0FERFIKKwlpZiAoY2hpcF9tYXhfdW5pdHMgPiAyKQorCSAgc2JtYWNfc2V0dXBfaHdhZGRyKDIsU0JNQUNfRVRIMl9IV0FERFIpOworI2VuZGlmCisjaWZkZWYgU0JNQUNfRVRIM19IV0FERFIKKwlpZiAoY2hpcF9tYXhfdW5pdHMgPiAzKQorCSAgc2JtYWNfc2V0dXBfaHdhZGRyKDMsU0JNQUNfRVRIM19IV0FERFIpOworI2VuZGlmCisKKwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgRXRoZXJuZXQgY29udHJvbGxlcnMgYW5kIGZpbmQKKwkgKiB0aG9zZSB3aG8gaGF2ZSB0aGVpciBNQUMgYWRkcmVzc2VzIHNldC4KKwkgKi8KIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGNoaXBfbWF4X3VuaXRzOyBpZHgrKykgewogCiAJICAgICAgICAvKgpAQCAtMjg4Niw3ICsyOTE3LDcgQEAKIAogCQlwcmludGsoS0VSTl9ERUJVRyAic2JtYWM6IGNvbmZpZ3VyaW5nIE1BQyBhdCAlbHhcbiIsIHBvcnQpOwogCi0JCWRldi0+aXJxID0gS19JTlRfTUFDXzAgKyBpZHg7CisJCWRldi0+aXJxID0gVU5JVF9JTlQoaWR4KTsKIAkJZGV2LT5iYXNlX2FkZHIgPSBwb3J0OwogCQlkZXYtPm1lbV9lbmQgPSAwOwogCQlpZiAoc2JtYWNfaW5pdChkZXYsIGlkeCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMgYi9kcml2ZXJzL25ldC9zZWVxODAwNS5jCmluZGV4IDc5ZGNhMzkuLmJjZWYwM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMKKysrIGIvZHJpdmVycy9uZXQvc2VlcTgwMDUuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNjk5LDcgKzcwMCw3IEBACiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCWludCBzdGF0dXMgPSBpbncoU0VFUV9TVEFUVVMpOwogCWludCB0cmFuc21pdF9wdHIgPSAwOwotCWludCB0bXA7CisJdW5zaWduZWQgbG9uZyB0bXA7CiAKIAlpZiAobmV0X2RlYnVnPjQpIHsKIAkJcHJpbnRrKCIlczogc2VuZCAweCUwNHhcbiIsZGV2LT5uYW1lLGxlbmd0aCk7CkBAIC03MjQsNyArNzI1LDcgQEAKIAkKIAkvKiBkcmFpbiBGSUZPICovCiAJdG1wID0gamlmZmllczsKLQl3aGlsZSAoICgoKHN0YXR1cz1pbncoU0VFUV9TVEFUVVMpKSAmIFNFRVFTVEFUX0ZJRk9fRU1QVFkpID09IDApICYmIChqaWZmaWVzIC0gdG1wIDwgSFopKQorCXdoaWxlICggKCgoc3RhdHVzPWludyhTRUVRX1NUQVRVUykpICYgU0VFUVNUQVRfRklGT19FTVBUWSkgPT0gMCkgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdG1wICsgSFopKQogCQltYigpOwogCQogCS8qIGRvaXQgISAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2dpc2VlcS5jIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5jCmluZGV4IGE0NjE0ZGYuLmY5NWE1YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NnaXNlZXEuYworKysgYi9kcml2ZXJzL25ldC9zZ2lzZWVxLmMKQEAgLTMsNiArMyw5IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk2IERhdmlkIFMuIE1pbGxlciAoZG1AZW5nci5zZ2kuY29tKQogICovCisKKyN1bmRlZiBERUJVRworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTU5LDggKzYyLDYgQEAKIAkJCSAgICBzcC0+dHhfb2xkICsgKFNFRVFfVFhfQlVGRkVSUyAtIDEpIC0gc3AtPnR4X25ldyA6IFwKIAkJCSAgICBzcC0+dHhfb2xkIC0gc3AtPnR4X25ldyAtIDEpCiAKLSNkZWZpbmUgREVCVUcKLQogc3RydWN0IHNnaXNlZXFfcnhfZGVzYyB7CiAJdm9sYXRpbGUgc3RydWN0IGhwY19kbWFfZGVzYyByZG1hOwogCXZvbGF0aWxlIHNpZ25lZCBpbnQgYnVmX3ZhZGRyOwpAQCAtMjA5LDcgKzIxMCw3IEBACiBzdGF0aWMgc3RydWN0IHNnaXNlZXFfcHJpdmF0ZSAqZ3ByaXY7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdkZXY7CiAKLXZvaWQgc2dpc2VlcV9kdW1wX3JpbmdzKHZvaWQpCitzdGF0aWMgdm9pZCBzZ2lzZWVxX2R1bXBfcmluZ3Modm9pZCkKIHsKIAlzdGF0aWMgaW50IG9uY2U7CiAJc3RydWN0IHNnaXNlZXFfcnhfZGVzYyAqciA9IGdwcml2LT5yeF9kZXNjOwpAQCAtMzExLDkgKzMxMiw5IEBACiAJCQkgICAgICBzdHJ1Y3Qgc2dpc2VlcV9yZWdzICpzcmVncykKIHsKIAlzdHJ1Y3Qgc2dpc2VlcV9yeF9kZXNjICpyZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyIHBrdF9zdGF0dXM7Ci0JdW5zaWduZWQgY2hhciAqcGt0X3BvaW50ZXIgPSAwOworCXVuc2lnbmVkIGNoYXIgKnBrdF9wb2ludGVyID0gTlVMTDsKIAlpbnQgbGVuID0gMDsKIAl1bnNpZ25lZCBpbnQgb3JpZ19lbmQgPSBQUkVWX1JYKHNwLT5yeF9uZXcpOwogCkBAIC01MTUsMTIgKzUxNiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgc2dpc2VlcV9teV9yZXNldCh2b2lkKQotewotCXByaW50aygiUkVTRVQhXG4iKTsKLQlzZ2lzZWVxX3Jlc2V0KGdkZXYpOwotfQotCiBzdGF0aWMgaW50IHNnaXNlZXFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzZ2lzZWVxX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoYXBlci5jIGIvZHJpdmVycy9uZXQvc2hhcGVyLmMKaW5kZXggMjIxMzU0ZS4uODhlMjEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hhcGVyLmMKKysrIGIvZHJpdmVycy9uZXQvc2hhcGVyLmMKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfc2hhcGVyLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KQEAgLTE2OCw3ICsxNjksNyBAQAogCQkvKgogCQkgKglRdWV1ZSBvdmVyIHRpbWUuIFNwaWxsIHBhY2tldC4KIAkJICovCi0JCWlmKFNIQVBFUkNCKHNrYiktPnNoYXBlY2xvY2stamlmZmllcyA+IFNIQVBFUl9MQVRFTkNZKSB7CisJCWlmKHRpbWVfYWZ0ZXIoU0hBUEVSQ0Ioc2tiKS0+c2hhcGVjbG9jayxqaWZmaWVzICsgU0hBUEVSX0xBVEVOQ1kpKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlzaGFwZXItPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXMxOTAuYyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCmluZGV4IGVkNGJjOTEuLjMxZGQzZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczE5MC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCkBAIC0zNjYsNyArMzY2LDcgQEAKICAqIE1heGltdW0gbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gZmlsdGVyICh2cy4gUngtYWxsLW11bHRpY2FzdCkuCiAgKiBUaGUgY2hpcHMgdXNlIGEgNjQgZWxlbWVudCBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBFdGhlcm5ldCBDUkMuCiAgKi8KLXN0YXRpYyBpbnQgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDMyOworc3RhdGljIGNvbnN0IGludCBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMzI7CiAKIHN0YXRpYyB2b2lkIF9fbWRpb19jbWQodm9pZCBfX2lvbWVtICppb2FkZHIsIHUzMiBjdGwpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IDNkOTVmYTIuLjI1MzQ0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlTSVNfOTAwID0gMCwKIAlTSVNfNzAxNgogfTsKLXN0YXRpYyBjaGFyICogY2FyZF9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKiBjYXJkX25hbWVzW10gPSB7CiAJIlNpUyA5MDAgUENJIEZhc3QgRXRoZXJuZXQiLAogCSJTaVMgNzAxNiBQQ0kgRmFzdCBFdGhlcm5ldCIKIH07CkBAIC0xMTUsNyArMTE1LDcgQEAKIAogc3RhdGljIHZvaWQgc2lzOTAwX3JlYWRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgaW50ICpzcGVlZCwgaW50ICpkdXBsZXgpOwogCi1zdGF0aWMgc3RydWN0IG1paV9jaGlwX2luZm8geworc3RhdGljIGNvbnN0IHN0cnVjdCBtaWlfY2hpcF9pbmZvIHsKIAljb25zdCBjaGFyICogbmFtZTsKIAl1MTYgcGh5X2lkMDsKIAl1MTYgcGh5X2lkMTsKQEAgLTEyOCw2ICsxMjgsNyBAQAogCXsgIlNpUyA5MDAgSW50ZXJuYWwgTUlJIFBIWSIsIAkJMHgwMDFkLCAweDgwMDAsIExBTiB9LAogCXsgIlNpUyA3MDE0IFBoeXNpY2FsIExheWVyIFNvbHV0aW9uIiwgCTB4MDAxNiwgMHhmODMwLCBMQU4gfSwKIAl7ICJBbHRpbWF0YSBBQzEwMUxGIFBIWSIsICAgICAgICAgICAgICAgMHgwMDIyLCAweDU1MjAsIExBTiB9LAorCXsgIkFETSA3MDAxIExBTiBQSFkiLAkJCTB4MDAyZSwgMHhjYzYwLCBMQU4gfSwKIAl7ICJBTUQgNzlDOTAxIDEwQkFTRS1UIFBIWSIsICAJCTB4MDAwMCwgMHg2QjcwLCBMQU4gfSwKIAl7ICJBTUQgNzlDOTAxIEhvbWVQTkEgUEhZIiwJCTB4MDAwMCwgMHg2QjkwLCBIT01FfSwKIAl7ICJJQ1MgTEFOIFBIWSIsCQkJMHgwMDE1LCAweEY0NDAsIExBTiB9LApAQCAtNDAwLDcgKzQwMSw3IEBACiAJdm9pZCAqcmluZ19zcGFjZTsKIAlsb25nIGlvYWRkcjsKIAlpbnQgaSwgcmV0OwotCWNoYXIgKmNhcmRfbmFtZSA9IGNhcmRfbmFtZXNbcGNpX2lkLT5kcml2ZXJfZGF0YV07CisJY29uc3QgY2hhciAqY2FyZF9uYW1lID0gY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXTsKIAljb25zdCBjaGFyICpkZXZfbmFtZSA9IHBjaV9uYW1lKHBjaV9kZXYpOwogCiAvKiB3aGVuIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2Ugb25seSBwcmludCB2ZXJzaW9uIGlmIGRldmljZSBpcyBmb3VuZCAqLwpAQCAtNTQwLDcgKzU0MSw3IEBACiAJcHJpbnRrKCIlMi4yeC5cbiIsIG5ldF9kZXYtPmRldl9hZGRyW2ldKTsKIAogCS8qIERldGVjdCBXYWtlIG9uIExhbiBzdXBwb3J0ICovCi0JcmV0ID0gaW5sKENGR1BNQyAmIFBNRVNQKTsKKwlyZXQgPSAoaW5sKG5ldF9kZXYtPmJhc2VfYWRkciArIENGR1BNQykgJiBQTUVTUCkgPj4gMjc7CiAJaWYgKG5ldGlmX21zZ19wcm9iZShzaXNfcHJpdikgJiYgKHJldCAmIFBNRV9EM0MpID09IDApCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXYWtlIG9uIExBTiBvbmx5IGF2YWlsYWJsZSBmcm9tIHN1c3BlbmQgdG8gUkFNLiIsIG5ldF9kZXYtPm5hbWUpOwogCkBAIC0xMjc1LDcgKzEyNzYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKIAlzdHJ1Y3Qgc2lzOTAwX3ByaXZhdGUgKnNpc19wcml2ID0gbmV0X2Rldi0+cHJpdjsKIAlzdHJ1Y3QgbWlpX3BoeSAqbWlpX3BoeSA9IHNpc19wcml2LT5taWk7Ci0Jc3RhdGljIGludCBuZXh0X3RpY2sgPSA1KkhaOworCXN0YXRpYyBjb25zdCBpbnQgbmV4dF90aWNrID0gNSpIWjsKIAl1MTYgc3RhdHVzOwogCiAJaWYgKCFzaXNfcHJpdi0+YXV0b25nX2NvbXBsZXRlKXsKQEAgLTIwNDAsNyArMjA0MSw3IEBACiAKIAlpZiAod29sLT53b2xvcHRzID09IDApIHsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHNpc19wcml2LT5wY2lfZGV2LCBDRkdQTUNTUiwgJmNmZ3BtY3NyKTsKLQkJY2ZncG1jc3IgfD0gflBNRV9FTjsKKwkJY2ZncG1jc3IgJj0gflBNRV9FTjsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzaXNfcHJpdi0+cGNpX2RldiwgQ0ZHUE1DU1IsIGNmZ3BtY3NyKTsKIAkJb3V0bChwbWN0cmxfYml0cywgcG1jdHJsX2FkZHIpOwogCQlpZiAobmV0aWZfbXNnX3dvbChzaXNfcHJpdikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2thZGRyLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2thZGRyLmgKaW5kZXggM2EyZWE0YS4uNDIzYWQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrYWRkci5oCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2FkZHIuaApAQCAtMjM2LDE4ICsyMzYsNiBAQAogCVNLX1UzMglQb3J0TnVtYmVyLAogCWludAlGbGFncyk7CiAKLWV4dGVybglpbnQJU2tBZGRyWG1hY01jQ2xlYXIoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCVNLX1UzMglQb3J0TnVtYmVyLAotCWludAlGbGFncyk7Ci0KLWV4dGVybglpbnQJU2tBZGRyR21hY01jQ2xlYXIoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCVNLX1UzMglQb3J0TnVtYmVyLAotCWludAlGbGFncyk7Ci0KIGV4dGVybglpbnQJU2tBZGRyTWNBZGQoCiAJU0tfQUMJCSpwQUMsCiAJU0tfSU9DCQlJb0MsCkBAIC0yNTUsMzUgKzI0MywxMSBAQAogCVNLX01BQ19BRERSCSpwTWMsCiAJaW50CQlGbGFncyk7CiAKLWV4dGVybglpbnQJU2tBZGRyWG1hY01jQWRkKAotCVNLX0FDCQkqcEFDLAotCVNLX0lPQwkJSW9DLAotCVNLX1UzMgkJUG9ydE51bWJlciwKLQlTS19NQUNfQUREUgkqcE1jLAotCWludAkJRmxhZ3MpOwotCi1leHRlcm4JaW50CVNrQWRkckdtYWNNY0FkZCgKLQlTS19BQwkJKnBBQywKLQlTS19JT0MJCUlvQywKLQlTS19VMzIJCVBvcnROdW1iZXIsCi0JU0tfTUFDX0FERFIJKnBNYywKLQlpbnQJCUZsYWdzKTsKLQogZXh0ZXJuCWludAlTa0FkZHJNY1VwZGF0ZSgKIAlTS19BQwkqcEFDLAogCVNLX0lPQwlJb0MsCiAJU0tfVTMyCVBvcnROdW1iZXIpOwogCi1leHRlcm4JaW50CVNrQWRkclhtYWNNY1VwZGF0ZSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JU0tfVTMyCVBvcnROdW1iZXIpOwotCi1leHRlcm4JaW50CVNrQWRkckdtYWNNY1VwZGF0ZSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JU0tfVTMyCVBvcnROdW1iZXIpOwotCiBleHRlcm4JaW50CVNrQWRkck92ZXJyaWRlKAogCVNLX0FDCQkqcEFDLAogCVNLX0lPQwkJSW9DLApAQCAtMjk3LDE4ICsyNjEsNiBAQAogCVNLX1UzMglQb3J0TnVtYmVyLAogCWludAlOZXdQcm9tTW9kZSk7CiAKLWV4dGVybglpbnQJU2tBZGRyWG1hY1Byb21pc2N1b3VzQ2hhbmdlKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlTS19VMzIJUG9ydE51bWJlciwKLQlpbnQJTmV3UHJvbU1vZGUpOwotCi1leHRlcm4JaW50CVNrQWRkckdtYWNQcm9taXNjdW91c0NoYW5nZSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JU0tfVTMyCVBvcnROdW1iZXIsCi0JaW50CU5ld1Byb21Nb2RlKTsJCi0KICNpZm5kZWYgU0tfU0xJTQogZXh0ZXJuCWludAlTa0FkZHJTd2FwKAogCVNLX0FDCSpwQUMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tjc3VtLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tjc3VtLmgKaW5kZXggMmI5NGFkYi4uNmUyNTZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrY3N1bS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2NzdW0uaApAQCAtMjAzLDEyICsyMDMsNiBAQAogCXVuc2lnbmVkCUNoZWNrc3VtMiwKIAlpbnQJCQlOZXROdW1iZXIpOwogCi1leHRlcm4gdm9pZCBTa0NzR2V0U2VuZEluZm8oCi0JU0tfQUMJCQkJKnBBYywKLQl2b2lkCQkJCSpwSXBIZWFkZXIsCi0JU0tDU19QQUNLRVRfSU5GTwkqcFBhY2tldEluZm8sCi0JaW50CQkJCQlOZXROdW1iZXIpOwotCiBleHRlcm4gdm9pZCBTa0NzU2V0UmVjZWl2ZUZsYWdzKAogCVNLX0FDCQkqcEFjLAogCXVuc2lnbmVkCVJlY2VpdmVGbGFncywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlaW5pdC5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vpbml0LmgKaW5kZXggMTg0ZjQ3Yy4uMTQzZTYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vpbml0LmgKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vpbml0LmgKQEAgLTQ2NCwxMiArNDY0LDYgQEAKIC8qCiAgKiBwdWJsaWMgZnVuY3Rpb25zIGluIHNrZ2Vpbml0LmMKICAqLwotZXh0ZXJuIHZvaWQJU2tHZVBvbGxSeEQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlTS19CT09MCVBvbGxSeEQpOwotCiBleHRlcm4gdm9pZAlTa0dlUG9sbFR4RCgKIAlTS19BQwkqcEFDLAogCVNLX0lPQwlJb0MsCkBAIC01MjIsMTAgKzUxNiw2IEBACiAJaW50CQlMZWQsCiAJaW50CQlNb2RlKTsKIAotZXh0ZXJuIHZvaWQJU2tHZUluaXRSYW1JZmFjZSgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MpOwotCiBleHRlcm4gaW50CVNrR2VJbml0QXNzaWduUmFtVG9RdWV1ZXMoCiAJU0tfQUMJKnBBQywKIAlpbnQJCUFjdGl2ZVBvcnQsCkBAIC01NDksMTEgKzUzOSw2IEBACiAJU0tfSU9DCUlvQywKIAlpbnQJCVBvcnQpOwogCi1leHRlcm4gdm9pZAlTa01hY0NsZWFyUnN0KAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQpOwotCiBleHRlcm4gdm9pZAlTa1htSW5pdE1hYygKIAlTS19BQwkqcEFDLAogCVNLX0lPQwlJb0MsCkBAIC01ODAsMTEgKzU2NSw2IEBACiAJU0tfSU9DCUlvQywKIAlpbnQJCVBvcnQpOwogCi1leHRlcm4gdm9pZAlTa01hY0ZsdXNoUnhGaWZvKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQpOwotCiBleHRlcm4gdm9pZAlTa01hY0lycSgKIAlTS19BQwkqcEFDLAogCVNLX0lPQwlJb0MsCkBAIC02MDEsMTIgKzU4MSw2IEBACiAJaW50CQlQb3J0LAogCVNLX1UxNglJU3RhdHVzKTsKIAotZXh0ZXJuIHZvaWQgIFNrTWFjU2V0UnhUeEVuKAotCVNLX0FDCSpwQUMsCi0JU0tfSU9DCUlvQywKLQlpbnQJCVBvcnQsCi0JaW50CQlQYXJhKTsKLQogZXh0ZXJuIGludCAgU2tNYWNSeFR4RW5hYmxlKAogCVNLX0FDCSpwQUMsCiAJU0tfSU9DCUlvQywKQEAgLTY1OSwxNiArNjMzLDYgQEAKIAlpbnQJCVN0YXJ0TnVtLAogCWludAkJU3RvcE51bSk7CiAKLWV4dGVybiB2b2lkCVNrWG1Jbml0RHVwTWQoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCk7Ci0KLWV4dGVybiB2b2lkCVNrWG1Jbml0UGF1c2VNZCgKLQlTS19BQwkqcEFDLAotCVNLX0lPQwlJb0MsCi0JaW50CQlQb3J0KTsKLQogZXh0ZXJuIHZvaWQJU2tYbUF1dG9OZWdMaXBhWG1hYygKIAlTS19BQwkqcEFDLAogCVNLX0lPQwlJb0MsCkBAIC03MjksMTcgKzY5Myw2IEBACiAJaW50CQlQb3J0LAogCVNLX0JPT0wJU3RhcnRUZXN0KTsKIAotZXh0ZXJuIGludCBTa0dtRW50ZXJMb3dQb3dlck1vZGUoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCwKLQlTS19VOAlNb2RlKTsKLQotZXh0ZXJuIGludCBTa0dtTGVhdmVMb3dQb3dlck1vZGUoCi0JU0tfQUMJKnBBQywKLQlTS19JT0MJSW9DLAotCWludAkJUG9ydCk7Ci0KICNpZmRlZiBTS19ESUFHCiBleHRlcm4gdm9pZAlTa0dlUGh5UmVhZCgKIAlTS19BQwkqcEFDLApAQCAtNzgyLDcgKzczNSw2IEBACiAvKgogICogcHVibGljIGZ1bmN0aW9ucyBpbiBza2dlaW5pdC5jCiAgKi8KLWV4dGVybiB2b2lkCVNrR2VQb2xsUnhEKCk7CiBleHRlcm4gdm9pZAlTa0dlUG9sbFR4RCgpOwogZXh0ZXJuIHZvaWQJU2tHZVllbGxvd0xFRCgpOwogZXh0ZXJuIGludAlTa0dlQ2ZnU3luYygpOwpAQCAtNzkyLDcgKzc0NCw2IEBACiBleHRlcm4gdm9pZAlTa0dlRGVJbml0KCk7CiBleHRlcm4gaW50CVNrR2VJbml0UG9ydCgpOwogZXh0ZXJuIHZvaWQJU2tHZVhtaXRMRUQoKTsKLWV4dGVybiB2b2lkCVNrR2VJbml0UmFtSWZhY2UoKTsKIGV4dGVybiBpbnQJU2tHZUluaXRBc3NpZ25SYW1Ub1F1ZXVlcygpOwogCiAvKgpAQCAtODAxLDE4ICs3NTIsMTUgQEAKIGV4dGVybiB2b2lkIFNrTWFjUnhUeERpc2FibGUoKTsKIGV4dGVybiB2b2lkCVNrTWFjU29mdFJzdCgpOwogZXh0ZXJuIHZvaWQJU2tNYWNIYXJkUnN0KCk7Ci1leHRlcm4gdm9pZAlTa01hY0NsZWFyUnN0KCk7CiBleHRlcm4gdm9pZCBTa01hY0luaXRQaHkoKTsKIGV4dGVybiBpbnQgIFNrTWFjUnhUeEVuYWJsZSgpOwogZXh0ZXJuIHZvaWQgU2tNYWNQcm9taXNjTW9kZSgpOwogZXh0ZXJuIHZvaWQgU2tNYWNIYXNoaW5nKCk7CiBleHRlcm4gdm9pZCBTa01hY0lycURpc2FibGUoKTsKIGV4dGVybiB2b2lkCVNrTWFjRmx1c2hUeEZpZm8oKTsKLWV4dGVybiB2b2lkCVNrTWFjRmx1c2hSeEZpZm8oKTsKIGV4dGVybiB2b2lkCVNrTWFjSXJxKCk7CiBleHRlcm4gaW50CVNrTWFjQXV0b05lZ0RvbmUoKTsKIGV4dGVybiB2b2lkCVNrTWFjQXV0b05lZ0xpcGFQaHkoKTsKLWV4dGVybiB2b2lkIFNrTWFjU2V0UnhUeEVuKCk7CiBleHRlcm4gdm9pZAlTa1htSW5pdE1hYygpOwogZXh0ZXJuIHZvaWQJU2tYbVBoeVJlYWQoKTsKIGV4dGVybiB2b2lkCVNrWG1QaHlXcml0ZSgpOwpAQCAtODIwLDggKzc2OCw2IEBACiBleHRlcm4gdm9pZAlTa0dtUGh5UmVhZCgpOwogZXh0ZXJuIHZvaWQJU2tHbVBoeVdyaXRlKCk7CiBleHRlcm4gdm9pZAlTa1htQ2xyRXhhY3RBZGRyKCk7Ci1leHRlcm4gdm9pZAlTa1htSW5pdER1cE1kKCk7Ci1leHRlcm4gdm9pZAlTa1htSW5pdFBhdXNlTWQoKTsKIGV4dGVybiB2b2lkCVNrWG1BdXRvTmVnTGlwYVhtYWMoKTsKIGV4dGVybiBpbnQJU2tYbVVwZGF0ZVN0YXRzKCk7CiBleHRlcm4gaW50CVNrR21VcGRhdGVTdGF0cygpOwpAQCAtODMyLDggKzc3OCw2IEBACiBleHRlcm4gaW50CVNrWG1PdmVyZmxvd1N0YXR1cygpOwogZXh0ZXJuIGludAlTa0dtT3ZlcmZsb3dTdGF0dXMoKTsKIGV4dGVybiBpbnQJU2tHbUNhYmxlRGlhZ1N0YXR1cygpOwotZXh0ZXJuIGludAlTa0dtRW50ZXJMb3dQb3dlck1vZGUoKTsKLWV4dGVybiBpbnQJU2tHbUxlYXZlTG93UG93ZXJNb2RlKCk7CiAKICNpZmRlZiBTS19ESUFHCiBleHRlcm4gdm9pZAlTa0dlUGh5UmVhZCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vwbm1pLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZXBubWkuaAppbmRleCAzYjI3NzNlLi4xZWQyMTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZXBubWkuaAorKysgYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZXBubWkuaApAQCAtOTQ2LDEwICs5NDYsNiBAQAogICogRnVuY3Rpb24gcHJvdG90eXBlcwogICovCiBleHRlcm4gaW50IFNrUG5taUluaXQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IExldmVsKTsKLWV4dGVybiBpbnQgU2tQbm1pR2V0VmFyKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBJZCwgdm9pZCogcEJ1ZiwKLQl1bnNpZ25lZCBpbnQqIHBMZW4sIFNLX1UzMiBJbnN0YW5jZSwgU0tfVTMyIE5ldEluZGV4KTsKLWV4dGVybiBpbnQgU2tQbm1pUHJlU2V0VmFyKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBJZCwKLQl2b2lkKiBwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIFNLX1UzMiBJbnN0YW5jZSwgU0tfVTMyIE5ldEluZGV4KTsKIGV4dGVybiBpbnQgU2tQbm1pU2V0VmFyKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBJZCwgdm9pZCogcEJ1ZiwKIAl1bnNpZ25lZCBpbnQgKnBMZW4sIFNLX1UzMiBJbnN0YW5jZSwgU0tfVTMyIE5ldEluZGV4KTsKIGV4dGVybiBpbnQgU2tQbm1pR2V0U3RydWN0KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIHZvaWQqIHBCdWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL2gvc2tnZXNpcnEuaCBiL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlc2lycS5oCmluZGV4IGI0ODZiZDkuLjNlZWM2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlc2lycS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2dlc2lycS5oCkBAIC0xMDUsNyArMTA1LDYgQEAKIAogZXh0ZXJuIHZvaWQgU2tHZVNpcnFJc3IoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIElzdGF0dXMpOwogZXh0ZXJuIGludCAgU2tHZVNpcnFFdmVudChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgRXZlbnQsIFNLX0VWUEFSQSBQYXJhKTsKLWV4dGVybiB2b2lkIFNrSFdMaW5rVXAoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgaW50IFBvcnQpOwogZXh0ZXJuIHZvaWQgU2tIV0xpbmtEb3duKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIGludCBQb3J0KTsKIAogI2VuZGlmCS8qIF9JTkNfU0tHRVNJUlFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vaC9za2kyYy5oIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NraTJjLmgKaW5kZXggNTk4YmI0Mi4uNmE2M2Y0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NraTJjLmgKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NraTJjLmgKQEAgLTE2Miw5ICsxNjIsNiBAQAogfSBTS19JMkM7CiAKIGV4dGVybiBpbnQgU2tJMmNJbml0KFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIGludCBMZXZlbCk7Ci1leHRlcm4gaW50IFNrSTJjV3JpdGUoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIERhdGEsIGludCBEZXYsIGludCBTaXplLAotCQkJCQkgICBpbnQgUmVnLCBpbnQgQnVyc3QpOwotZXh0ZXJuIGludCBTa0kyY1JlYWRTZW5zb3IoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfU0VOU09SICpwU2VuKTsKICNpZmRlZiBTS19ESUFHCiBleHRlcm4JU0tfVTMyIFNrSTJjUmVhZChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgRGV2LCBpbnQgU2l6ZSwgaW50IFJlZywKIAkJCQkJCSBpbnQgQnVyc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdnBkLmggYi9kcml2ZXJzL25ldC9zazk4bGluL2gvc2t2cGQuaAppbmRleCBkYWE5YThkLi5mZGQ5ZTQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdnBkLmgKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrdnBkLmgKQEAgLTE4MywxNCArMTgzLDYgQEAKIAlpbnQJCQlhZGRyKTsKICNlbmRpZgkvKiBTS0RJQUcgKi8KIAotZXh0ZXJuIGludAlWcGRTZXR1cFBhcmEoCi0JU0tfQUMJCSpwQUMsCi0JY29uc3QgY2hhcgkqa2V5LAotCWNvbnN0IGNoYXIJKmJ1ZiwKLQlpbnQJCQlsZW4sCi0JaW50CQkJdHlwZSwKLQlpbnQJCQlvcCk7Ci0KIGV4dGVybiBTS19WUERfU1RBVFVTCSpWcGRTdGF0KAogCVNLX0FDCQkqcEFDLAogCVNLX0lPQwkJSW9DKTsKQEAgLTIyNywxMSArMjE5LDYgQEAKIAlTS19BQwkJKnBBQywKIAlTS19JT0MJCUlvQyk7CiAKLWV4dGVybiB2b2lkCVZwZEVyckxvZygKLQlTS19BQwkJKnBBQywKLQlTS19JT0MJCUlvQywKLQljaGFyCQkqbXNnKTsKLQogI2lmZGVmCVNLRElBRwogZXh0ZXJuIGludAlWcGRSZWFkQmxvY2soCiAJU0tfQUMJCSpwQUMsCkBAIC0yNDksNyArMjM2LDYgQEAKICNlbmRpZgkvKiBTS0RJQUcgKi8KICNlbHNlCS8qIFNLX0tSX1BST1RPICovCiBleHRlcm4gU0tfVTMyCVZwZFJlYWREV29yZCgpOwotZXh0ZXJuIGludAlWcGRTZXR1cFBhcmEoKTsKIGV4dGVybiBTS19WUERfU1RBVFVTCSpWcGRTdGF0KCk7CiBleHRlcm4gaW50CVZwZEtleXMoKTsKIGV4dGVybiBpbnQJVnBkUmVhZCgpOwpAQCAtMjU3LDcgKzI0Myw2IEBACiBleHRlcm4gaW50CVZwZFdyaXRlKCk7CiBleHRlcm4gaW50CVZwZERlbGV0ZSgpOwogZXh0ZXJuIGludAlWcGRVcGRhdGUoKTsKLWV4dGVybiB2b2lkCVZwZEVyckxvZygpOwogI2VuZGlmCS8qIFNLX0tSX1BST1RPICovCiAKICNlbmRpZgkvKiBfX0lOQ19TS1ZQRF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2FkZHIuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2thZGRyLmMKaW5kZXggYTdlMjVlZC4uNmU2YzU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2FkZHIuYworKysgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrYWRkci5jCkBAIC04Nyw2ICs4NywyMSBAQAogc3RhdGljIGludAlOZXh0MFtTS19NQVhfTUFDU10gPSB7MH07CiAjZW5kaWYJLyogREVCVUcgKi8KIAorc3RhdGljIGludCBTa0FkZHJHbWFjTWNBZGQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIFBvcnROdW1iZXIsCisJCQkgICBTS19NQUNfQUREUiAqcE1jLCBpbnQgRmxhZ3MpOworc3RhdGljIGludCBTa0FkZHJHbWFjTWNDbGVhcihTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgUG9ydE51bWJlciwKKwkJCSAgICAgaW50IEZsYWdzKTsKK3N0YXRpYyBpbnQgU2tBZGRyR21hY01jVXBkYXRlKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBQb3J0TnVtYmVyKTsKK3N0YXRpYyBpbnQgU2tBZGRyR21hY1Byb21pc2N1b3VzQ2hhbmdlKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsCisJCQkJICAgICAgIFNLX1UzMiBQb3J0TnVtYmVyLCBpbnQgTmV3UHJvbU1vZGUpOworc3RhdGljIGludCBTa0FkZHJYbWFjTWNBZGQoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIFBvcnROdW1iZXIsCisJCQkgICBTS19NQUNfQUREUiAqcE1jLCBpbnQgRmxhZ3MpOworc3RhdGljIGludCBTa0FkZHJYbWFjTWNDbGVhcihTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgUG9ydE51bWJlciwKKwkJCSAgICAgaW50IEZsYWdzKTsKK3N0YXRpYyBpbnQgU2tBZGRyWG1hY01jVXBkYXRlKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBQb3J0TnVtYmVyKTsKK3N0YXRpYyBpbnQgU2tBZGRyWG1hY1Byb21pc2N1b3VzQ2hhbmdlKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsCisJCQkJICAgICAgIFNLX1UzMiBQb3J0TnVtYmVyLCBpbnQgTmV3UHJvbU1vZGUpOworCiAvKiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNzIsNyArMzg3LDcgQEAKICAqCVNLX0FERFJfU1VDQ0VTUwogICoJU0tfQUREUl9JTExFR0FMX1BPUlQKICAqLwotaW50CVNrQWRkclhtYWNNY0NsZWFyKAorc3RhdGljIGludAlTa0FkZHJYbWFjTWNDbGVhcigKIFNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KIFNLX0lPQwlJb0MsCQkvKiBJL08gY29udGV4dCAqLwogU0tfVTMyCVBvcnROdW1iZXIsCS8qIEluZGV4IG9mIGFmZmVjdGVkIHBvcnQgKi8KQEAgLTQyOSw3ICs0NDQsNyBAQAogICoJU0tfQUREUl9TVUNDRVNTCiAgKglTS19BRERSX0lMTEVHQUxfUE9SVAogICovCi1pbnQJU2tBZGRyR21hY01jQ2xlYXIoCitzdGF0aWMgaW50CVNrQWRkckdtYWNNY0NsZWFyKAogU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwogU0tfSU9DCUlvQywJCS8qIEkvTyBjb250ZXh0ICovCiBTS19VMzIJUG9ydE51bWJlciwJLyogSW5kZXggb2YgYWZmZWN0ZWQgcG9ydCAqLwpAQCAtNTE5LDcgKzUzNCw3IEBACiAgKiBSZXR1cm5zOgogICoJSGFzaCB2YWx1ZSBvZiBtdWx0aWNhc3QgYWRkcmVzcy4KICAqLwotU0tfVTMyIFNrWG1hY01jSGFzaCgKK3N0YXRpYyBTS19VMzIgU2tYbWFjTWNIYXNoKAogdW5zaWduZWQgY2hhciAqcE1jKQkvKiBNdWx0aWNhc3QgYWRkcmVzcyAqLwogewogCVNLX1UzMiBJZHg7CkBAIC01NTcsNyArNTcyLDcgQEAKICAqIFJldHVybnM6CiAgKglIYXNoIHZhbHVlIG9mIG11bHRpY2FzdCBhZGRyZXNzLgogICovCi1TS19VMzIgU2tHbWFjTWNIYXNoKAorc3RhdGljIFNLX1UzMiBTa0dtYWNNY0hhc2goCiB1bnNpZ25lZCBjaGFyICpwTWMpCS8qIE11bHRpY2FzdCBhZGRyZXNzICovCiB7CiAJU0tfVTMyIERhdGE7CkBAIC02NzIsNyArNjg3LDcgQEAKICAqCVNLX01DX0lMTEVHQUxfQUREUkVTUwogICoJU0tfTUNfUkxNVF9PVkVSRkxPVwogICovCi1pbnQJU2tBZGRyWG1hY01jQWRkKAorc3RhdGljIGludAlTa0FkZHJYbWFjTWNBZGQoCiBTS19BQwkJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwogU0tfSU9DCQlJb0MsCQkvKiBJL08gY29udGV4dCAqLwogU0tfVTMyCQlQb3J0TnVtYmVyLAkvKiBQb3J0IE51bWJlciAqLwpAQCAtNzc4LDcgKzc5Myw3IEBACiAgKglTS19NQ19GSUxURVJJTkdfSU5FWEFDVAogICoJU0tfTUNfSUxMRUdBTF9BRERSRVNTCiAgKi8KLWludAlTa0FkZHJHbWFjTWNBZGQoCitzdGF0aWMgaW50CVNrQWRkckdtYWNNY0FkZCgKIFNLX0FDCQkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MJCUlvQywJCS8qIEkvTyBjb250ZXh0ICovCiBTS19VMzIJCVBvcnROdW1iZXIsCS8qIFBvcnQgTnVtYmVyICovCkBAIC05MzcsNyArOTUyLDcgQEAKICAqCVNLX01DX0ZJTFRFUklOR19JTkVYQUNUCiAgKglTS19BRERSX0lMTEVHQUxfUE9SVAogICovCi1pbnQJU2tBZGRyWG1hY01jVXBkYXRlKAorc3RhdGljIGludAlTa0FkZHJYbWFjTWNVcGRhdGUoCiBTS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MJSW9DLAkJLyogSS9PIGNvbnRleHQgKi8KIFNLX1UzMglQb3J0TnVtYmVyKQkvKiBQb3J0IE51bWJlciAqLwpAQCAtMTA4Miw3ICsxMDk3LDcgQEAKICAqCVNLX01DX0ZJTFRFUklOR19JTkVYQUNUCiAgKglTS19BRERSX0lMTEVHQUxfUE9SVAogICovCi1pbnQJU2tBZGRyR21hY01jVXBkYXRlKAorc3RhdGljIGludAlTa0FkZHJHbWFjTWNVcGRhdGUoCiBTS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MJSW9DLAkJLyogSS9PIGNvbnRleHQgKi8KIFNLX1UzMglQb3J0TnVtYmVyKQkvKiBQb3J0IE51bWJlciAqLwpAQCAtMTQ2OCw3ICsxNDgzLDcgQEAKICAqCVNLX0FERFJfU1VDQ0VTUwogICoJU0tfQUREUl9JTExFR0FMX1BPUlQKICAqLwotaW50CVNrQWRkclhtYWNQcm9taXNjdW91c0NoYW5nZSgKK3N0YXRpYyBpbnQJU2tBZGRyWG1hY1Byb21pc2N1b3VzQ2hhbmdlKAogU0tfQUMJKnBBQywJCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KIFNLX0lPQwlJb0MsCQkJLyogSS9PIGNvbnRleHQgKi8KIFNLX1UzMglQb3J0TnVtYmVyLAkJLyogcG9ydCB3aG9zZSBwcm9taXNjdW91cyBtb2RlIGNoYW5nZXMgKi8KQEAgLTE1ODUsNyArMTYwMCw3IEBACiAgKglTS19BRERSX1NVQ0NFU1MKICAqCVNLX0FERFJfSUxMRUdBTF9QT1JUCiAgKi8KLWludAlTa0FkZHJHbWFjUHJvbWlzY3VvdXNDaGFuZ2UoCitzdGF0aWMgaW50CVNrQWRkckdtYWNQcm9taXNjdW91c0NoYW5nZSgKIFNLX0FDCSpwQUMsCQkJLyogYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MJSW9DLAkJCS8qIEkvTyBjb250ZXh0ICovCiBTS19VMzIJUG9ydE51bWJlciwJCS8qIHBvcnQgd2hvc2UgcHJvbWlzY3VvdXMgbW9kZSBjaGFuZ2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCmluZGV4IGE1ZjJiMWUuLjM4YTI2ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jCkBAIC0xNzI3LDcgKzE3MjcsNyBAQAogCQlwVHhkLT5WRGF0YUhpZ2ggPSAoU0tfVTMyKSAoUGh5c0FkZHIgPj4gMzIpOwogCQlwVHhkLT5wTUJ1ZiAgICAgPSBwTWVzc2FnZTsKIAkJCi0JCXBUeGQtPlRCQ29udHJvbCA9IENvbnRyb2wgfCBCTVVfT1dOIHwgc2tfZnJhZy0+c2l6ZTs7CisJCXBUeGQtPlRCQ29udHJvbCA9IENvbnRyb2wgfCBCTVVfT1dOIHwgc2tfZnJhZy0+c2l6ZTsKIAogCQkvKiAKIAkJKiogRG8gd2UgaGF2ZSB0aGUgbGFzdCBmcmFnbWVudD8gCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2Vpbml0LmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2Vpbml0LmMKaW5kZXggNmNiNDlkZC4uNjdmMWQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZWluaXQuYwpAQCAtNTksMzQgKzU5LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqCVNrR2VQb2xsUnhEKCkgLSBFbmFibGUgLyBEaXNhYmxlIERlc2NyaXB0b3IgUG9sbGluZyBvZiBSeEQgUmluZwotICoKLSAqIERlc2NyaXB0aW9uOgotICoJRW5hYmxlIG9yIGRpc2FibGUgdGhlIGRlc2NyaXB0b3IgcG9sbGluZyBvZiB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yCi0gKglyaW5nIChSeEQpIGZvciBwb3J0ICdQb3J0Jy4KLSAqCVRoZSBuZXcgY29uZmlndXJhdGlvbiBpcyAqbm90KiBzYXZlZCBvdmVyIGFueSBTa0dlU3RvcFBvcnQoKSBhbmQKLSAqCVNrR2VJbml0UG9ydCgpIGNhbGxzLgotICoKLSAqIFJldHVybnM6Ci0gKglub3RoaW5nCi0gKi8KLXZvaWQgU2tHZVBvbGxSeEQoCi1TS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotU0tfQk9PTCBQb2xsUnhEKQkvKiBTS19UUlVFIChlbmFibGUgcG9sLiksIFNLX0ZBTFNFIChkaXNhYmxlIHBvbC4pICovCi17Ci0JU0tfR0VQT1JUICpwUHJ0OwotCi0JcFBydCA9ICZwQUMtPkdJbmkuR1BbUG9ydF07Ci0KLQlTS19PVVQzMihJb0MsIFFfQUREUihwUHJ0LT5QUnhRT2ZmLCBRX0NTUiksIChQb2xsUnhEKSA/Ci0JCUNTUl9FTkFfUE9MIDogQ1NSX0RJU19QT0wpOwotfQkvKiBTa0dlUG9sbFJ4RCAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKglTa0dlUG9sbFR4RCgpIC0gRW5hYmxlIC8gRGlzYWJsZSBEZXNjcmlwdG9yIFBvbGxpbmcgb2YgVHhEIFJpbmdzCiAgKgogICogRGVzY3JpcHRpb246CkBAIC05NTIsNyArOTI0LDcgQEAKICAqIFJldHVybnM6CiAgKglub3RoaW5nCiAgKi8KLXZvaWQgU2tHZUluaXRSYW1JZmFjZSgKK3N0YXRpYyB2b2lkIFNrR2VJbml0UmFtSWZhY2UoCiBTS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MJSW9DKQkJLyogSU8gY29udGV4dCAqLwogewpAQCAtMTQwOSw4MyArMTM4MSw2IEBACiAKIH0JLyogU2tHZUluaXQwKi8KIAotI2lmZGVmIFNLX1BDSV9SRVNFVAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHZVBjaVJlc2V0KCkgLSBSZXNldCBQQ0kgaW50ZXJmYWNlCi0gKgotICogRGVzY3JpcHRpb246Ci0gKglvIFJlYWQgUENJIGNvbmZpZ3VyYXRpb24uCi0gKglvIENoYW5nZSBwb3dlciBzdGF0ZSB0byAzLgotICoJbyBDaGFuZ2UgcG93ZXIgc3RhdGUgdG8gMC4KLSAqCW8gUmVzdG9yZSBQQ0kgY29uZmlndXJhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOgotICoJMDoJU3VjY2Vzcy4KLSAqCTE6CVBvd2VyIHN0YXRlIGNvdWxkIG5vdCBiZSBjaGFuZ2VkIHRvIDMuCi0gKi8KLXN0YXRpYyBpbnQgU2tHZVBjaVJlc2V0KAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQykJCS8qIElPIGNvbnRleHQgKi8KLXsKLQlpbnQJCWk7Ci0JU0tfVTE2CVBtQ3RsU3RzOwotCVNLX1UzMglCcDE7Ci0JU0tfVTMyCUJwMjsKLQlTS19VMTYJUGNpQ21kOwotCVNLX1U4CUNsczsKLQlTS19VOAlMYXQ7Ci0JU0tfVTgJQ29uZmlnU3BhY2VbUENJX0NGR19TSVpFXTsKLQotCS8qCi0JICogTm90ZTogU3dpdGNoaW5nIHRvIEQzIHN0YXRlIGlzIGxpa2UgYSBzb2Z0d2FyZSByZXNldC4KLQkgKgkJIFN3aXRjaGluZyBmcm9tIEQzIHRvIEQwIGlzIGEgaGFyZHdhcmUgcmVzZXQuCi0JICoJCSBXZSBoYXZlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFBDSV9DRkdfU0laRTsgaSsrKSB7Ci0JCVNrUGNpUmVhZENmZ0RXb3JkKHBBQywgaSo0LCAmQ29uZmlnU3BhY2VbaV0pOwotCX0KLQotCS8qIFdlIGtub3cgdGhlIFJBTSBJbnRlcmZhY2UgQXJiaXRlciBpcyBlbmFibGVkLiAqLwotCVNrUGNpV3JpdGVDZmdXb3JkKHBBQywgUENJX1BNX0NUTF9TVFMsIFBDSV9QTV9TVEFURV9EMyk7Ci0JU2tQY2lSZWFkQ2ZnV29yZChwQUMsIFBDSV9QTV9DVExfU1RTLCAmUG1DdGxTdHMpOwotCQotCWlmICgoUG1DdGxTdHMgJiBQQ0lfUE1fU1RBVEVfTVNLKSAhPSBQQ0lfUE1fU1RBVEVfRDMpIHsKLQkJcmV0dXJuKDEpOwotCX0KLQotCS8qIFJldHVybiB0byBEMCBzdGF0ZS4gKi8KLQlTa1BjaVdyaXRlQ2ZnV29yZChwQUMsIFBDSV9QTV9DVExfU1RTLCBQQ0lfUE1fU1RBVEVfRDApOwotCi0JLyogQ2hlY2sgZm9yIEQwIHN0YXRlLiAqLwotCVNrUGNpUmVhZENmZ1dvcmQocEFDLCBQQ0lfUE1fQ1RMX1NUUywgJlBtQ3RsU3RzKTsKLQkKLQlpZiAoKFBtQ3RsU3RzICYgUENJX1BNX1NUQVRFX01TSykgIT0gUENJX1BNX1NUQVRFX0QwKSB7Ci0JCXJldHVybigxKTsKLQl9Ci0KLQkvKiBDaGVjayBQQ0kgQ29uZmlnIFJlZ2lzdGVycy4gKi8KLQlTa1BjaVJlYWRDZmdXb3JkKHBBQywgUENJX0NPTU1BTkQsICZQY2lDbWQpOwotCVNrUGNpUmVhZENmZ0J5dGUocEFDLCBQQ0lfQ0FDSEVfTFNaLCAmQ2xzKTsKLQlTa1BjaVJlYWRDZmdEV29yZChwQUMsIFBDSV9CQVNFXzFTVCwgJkJwMSk7Ci0JU2tQY2lSZWFkQ2ZnRFdvcmQocEFDLCBQQ0lfQkFTRV8yTkQsICZCcDIpOwotCVNrUGNpUmVhZENmZ0J5dGUocEFDLCBQQ0lfTEFUX1RJTSwgJkxhdCk7Ci0JCi0JaWYgKFBjaUNtZCAhPSAwIHx8IENscyAhPSAoU0tfVTgpMCB8fCBMYXQgIT0gKFNLX1U4KTAgfHwKLQkJKEJwMSAmIDB4ZmZmZmZmZjBMKSAhPSAwIHx8IEJwMiAhPSAxKSB7Ci0JCXJldHVybigxKTsKLQl9Ci0KLQkvKiBSZXN0b3JlIFBDSSBDb25maWcgU3BhY2UuICovCi0JZm9yIChpID0gMDsgaSA8IFBDSV9DRkdfU0laRTsgaSsrKSB7Ci0JCVNrUGNpV3JpdGVDZmdEV29yZChwQUMsIGkqNCwgQ29uZmlnU3BhY2VbaV0pOwotCX0KLQotCXJldHVybigwKTsKLX0JLyogU2tHZVBjaVJlc2V0ICovCi0KLSNlbmRpZiAvKiBTS19QQ0lfUkVTRVQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE1MjQsMTAgKzE0MTksNiBAQAogCS8qIHNhdmUgQ0xLX1JVTiBiaXRzIChZVUtPTi1MaXRlKSAqLwogCVNLX0lOMTYoSW9DLCBCMF9DVFNULCAmQ3RybFN0YXQpOwogCi0jaWZkZWYgU0tfUENJX1JFU0VUCi0JKHZvaWQpU2tHZVBjaVJlc2V0KHBBQywgSW9DKTsKLSNlbmRpZiAvKiBTS19QQ0lfUkVTRVQgKi8KLQogCS8qIGRvIHRoZSBTVy1yZXNldCAqLwogCVNLX09VVDgoSW9DLCBCMF9DVFNULCBDU19SU1RfU0VUKTsKIApAQCAtMTk5MSwxMSArMTg4Miw2IEBACiAJaW50CWk7CiAJU0tfVTE2CVdvcmQ7CiAKLSNpZmRlZiBTS19QSFlfTFBfTU9ERQotCVNLX1U4CUJ5dGU7Ci0JU0tfVTE2CVBtQ3RsU3RzOwotI2VuZGlmIC8qIFNLX1BIWV9MUF9NT0RFICovCi0KICNpZiAoIWRlZmluZWQoU0tfU0xJTSkgJiYgIWRlZmluZWQoVkNQVSkpCiAJLyogZW5zdXJlIEkyQyBpcyByZWFkeSAqLwogCVNrSTJjV2FpdElycShwQUMsIElvQyk7CkBAIC0yMDEwLDM4ICsxODk2LDYgQEAKIAkJfQogCX0KIAotI2lmZGVmIFNLX1BIWV9MUF9NT0RFCi0gICAgLyoKLQkgKiBmb3IgcG93ZXIgc2F2aW5nIHB1cnBvc2VzIHdpdGhpbiBtb2JpbGUgZW52aXJvbm1lbnRzCi0JICogd2Ugc2V0IHRoZSBQSFkgdG8gY29tYSBtb2RlIGFuZCBzd2l0Y2ggdG8gRDMgcG93ZXIgc3RhdGUuCi0JICovCi0JaWYgKHBBQy0+R0luaS5HSVl1a29uTGl0ZSAmJgotCQlwQUMtPkdJbmkuR0lDaGlwUmV2ID49IENISVBfUkVWX1lVX0xJVEVfQTMpIHsKLQotCQkvKiBmb3IgYWxsIHBvcnRzIHN3aXRjaCBQSFkgdG8gY29tYSBtb2RlICovCi0JCWZvciAoaSA9IDA7IGkgPCBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7IGkrKykgewotCQkJCi0JCQlTa0dtRW50ZXJMb3dQb3dlck1vZGUocEFDLCBJb0MsIGksIFBIWV9QTV9ERUVQX1NMRUVQKTsKLQkJfQotCi0JCWlmIChwQUMtPkdJbmkuR0lWYXV4QXZhaWwpIHsKLQkJCS8qIHN3aXRjaCBwb3dlciB0byBWQVVYICovCi0JCQlCeXRlID0gUENfVkFVWF9FTkEgfCBQQ19WQ0NfRU5BIHwgUENfVkFVWF9PTiB8IFBDX1ZDQ19PRkY7Ci0KLQkJCVNLX09VVDgoSW9DLCBCMF9QT1dFUl9DVFJMLCBCeXRlKTsKLQkJfQotCQkKLQkJLyogc3dpdGNoIHRvIEQzIHN0YXRlICovCi0JCVNLX0lOMTYoSW9DLCBQQ0lfQyhQQ0lfUE1fQ1RMX1NUUyksICZQbUN0bFN0cyk7Ci0KLQkJUG1DdGxTdHMgfD0gUENJX1BNX1NUQVRFX0QzOwotCi0JCVNLX09VVDgoSW9DLCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT04pOwotCi0JCVNLX09VVDE2KElvQywgUENJX0MoUENJX1BNX0NUTF9TVFMpLCBQbUN0bFN0cyk7Ci0JfQotI2VuZGlmIC8qIFNLX1BIWV9MUF9NT0RFICovCi0KIAkvKiBSZXNldCBhbGwgYml0cyBpbiB0aGUgUENJIFNUQVRVUyByZWdpc3RlciAqLwogCS8qCiAJICogTm90ZTogUENJIENmZyBjeWNsZXMgY2Fubm90IGJlIHVzZWQsIGJlY2F1c2UgdGhleSBhcmUgbm90CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2VtaWIuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZW1pYi5jCmluZGV4IDI5OTFiYzguLjBhNmY2N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZW1pYi5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZW1pYi5jCkBAIC04NzEsMTMgKzg3MSw2IEBACiAJCXNpemVvZihTS19QTk1JX0NPTkYpLAogCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mUGh5VHlwZSksCiAJCVNLX1BOTUlfUk8sIE1hY1ByaXZhdGVDb25mLCAwfSwKLSNpZmRlZiBTS19QSFlfTFBfTU9ERQotCQl7T0lEX1NLR0VfUEhZX0xQX01PREUsCi0JCVNLX1BOTUlfTUFDX0VOVFJJRVMsCi0JCXNpemVvZihTS19QTk1JX0NPTkYpLAotCQlTS19QTk1JX09GRihDb25mKSArIFNLX1BOTUlfQ05GX09GRihDb25mUGh5TW9kZSksCi0JCVNLX1BOTUlfUlcsIE1hY1ByaXZhdGVDb25mLCAwfSwKLSNlbmRpZgkKIAl7T0lEX1NLR0VfTElOS19DQVAsCiAJCVNLX1BOTUlfTUFDX0VOVFJJRVMsCiAJCXNpemVvZihTS19QTk1JX0NPTkYpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlcG5taS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlcG5taS5jCmluZGV4IGEzODYxNzIuLmIzNmRkOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZXBubWkuYworKysgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2Vwbm1pLmMKQEAgLTU2LDEwICs1Niw2IEBACiAgKiBQdWJsaWMgRnVuY3Rpb24gcHJvdG90eXBlcwogICovCiBpbnQgU2tQbm1pSW5pdChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBpbnQgbGV2ZWwpOwotaW50IFNrUG5taUdldFZhcihTS19BQyAqcEFDLCBTS19JT0MgSW9DLCBTS19VMzIgSWQsIHZvaWQgKnBCdWYsCi0JdW5zaWduZWQgaW50ICpwTGVuLCBTS19VMzIgSW5zdGFuY2UsIFNLX1UzMiBOZXRJbmRleCk7Ci1pbnQgU2tQbm1pUHJlU2V0VmFyKFNLX0FDICpwQUMsIFNLX0lPQyBJb0MsIFNLX1UzMiBJZCwgdm9pZCAqcEJ1ZiwKLQl1bnNpZ25lZCBpbnQgKnBMZW4sIFNLX1UzMiBJbnN0YW5jZSwgU0tfVTMyIE5ldEluZGV4KTsKIGludCBTa1BubWlTZXRWYXIoU0tfQUMgKnBBQywgU0tfSU9DIElvQywgU0tfVTMyIElkLCB2b2lkICpwQnVmLAogCXVuc2lnbmVkIGludCAqcExlbiwgU0tfVTMyIEluc3RhbmNlLCBTS19VMzIgTmV0SW5kZXgpOwogaW50IFNrUG5taUdldFN0cnVjdChTS19BQyAqcEFDLCBTS19JT0MgSW9DLCB2b2lkICpwQnVmLApAQCAtNTg3LDcgKzU4Myw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IChlLmcuIHBvcnQgaW5zdGFuY2UgMyBvbiBhIHR3byBwb3J0CiAgKgkgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci4KICAqLwotaW50IFNrUG5taUdldFZhcigKK3N0YXRpYyBpbnQgU2tQbm1pR2V0VmFyKAogU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KIFNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwpAQCAtNjI5LDcgKzYyNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IChlLmcuIHBvcnQgaW5zdGFuY2UgMyBvbiBhIHR3byBwb3J0CiAgKgkgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci4KICAqLwotaW50IFNrUG5taVByZVNldFZhcigKK3N0YXRpYyBpbnQgU2tQbm1pUHJlU2V0VmFyKAogU0tfQUMgKnBBQywJCS8qIFBvaW50ZXIgdG8gYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MgSW9DLAkJLyogSU8gY29udGV4dCBoYW5kbGUgKi8KIFNLX1UzMiBJZCwJCS8qIE9iamVjdCBJRCB0aGF0IGlzIHRvIGJlIHByb2Nlc3NlZCAqLwpAQCAtNTA2Miw5ICs1MDU4LDYgQEAKIAkJY2FzZSBPSURfU0tHRV9TUEVFRF9DQVA6CiAJCWNhc2UgT0lEX1NLR0VfU1BFRURfTU9ERToKIAkJY2FzZSBPSURfU0tHRV9TUEVFRF9TVEFUVVM6Ci0jaWZkZWYgU0tfUEhZX0xQX01PREUKLQkJY2FzZSBPSURfU0tHRV9QSFlfTFBfTU9ERToKLSNlbmRpZgogCQkJaWYgKCpwTGVuIDwgKExpbWl0IC0gTG9nUG9ydEluZGV4KSAqIHNpemVvZihTS19VOCkpIHsKIAogCQkJCSpwTGVuID0gKExpbWl0IC0gTG9nUG9ydEluZGV4KSAqIHNpemVvZihTS19VOCk7CkBAIC01MTQwLDI4ICs1MTMzLDYgQEAKIAkJCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1UzMik7CiAJCQkJYnJlYWs7CiAKLSNpZmRlZiBTS19QSFlfTFBfTU9ERQotCQkJY2FzZSBPSURfU0tHRV9QSFlfTFBfTU9ERToKLQkJCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJCWlmIChMb2dQb3J0SW5kZXggPT0gMCkgewotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvKiBHZXQgdmFsdWUgZm9yIHBoeXNpY2FsIHBvcnRzICovCi0JCQkJCQlQaHlzUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKHBBQywgTG9nUG9ydEluZGV4KTsKLQkJCQkJCVZhbDggPSAoU0tfVTgpIHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QUGh5UG93ZXJTdGF0ZTsKLQkJCQkJCSpwQnVmUHRyID0gVmFsODsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsgLyogRHVhbE5ldE1vZGUgKi8KLQkJCQkJCi0JCQkJCVZhbDggPSAoU0tfVTgpIHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QUGh5UG93ZXJTdGF0ZTsKLQkJCQkJKnBCdWZQdHIgPSBWYWw4OwotCQkJCX0KLQkJCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1U4KTsKLQkJCQlicmVhazsKLSNlbmRpZgotCiAJCQljYXNlIE9JRF9TS0dFX0xJTktfQ0FQOgogCQkJCWlmICghcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnKSB7IC8qIFNpbmdsZU5ldE1vZGUgKi8KIAkJCQkJaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7CkBAIC01NDc4LDE2ICs1NDQ5LDYgQEAKIAkJfQogCQlicmVhazsKIAotI2lmZGVmIFNLX1BIWV9MUF9NT0RFCi0JY2FzZSBPSURfU0tHRV9QSFlfTFBfTU9ERToKLQkJaWYgKCpwTGVuIDwgTGltaXQgLSBMb2dQb3J0SW5kZXgpIHsKLQotCQkJKnBMZW4gPSBMaW1pdCAtIExvZ1BvcnRJbmRleDsKLQkJCXJldHVybiAoU0tfUE5NSV9FUlJfVE9PX1NIT1JUKTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotCiAJY2FzZSBPSURfU0tHRV9NVFU6CiAJCWlmICgqcExlbiA8IHNpemVvZihTS19VMzIpKSB7CiAKQEAgLTU4NDUsMTE2ICs1ODA2LDYgQEAKIAkJCU9mZnNldCArPSBzaXplb2YoU0tfVTMyKTsKIAkJCWJyZWFrOwogCQkKLSNpZmRlZiBTS19QSFlfTFBfTU9ERQotCQljYXNlIE9JRF9TS0dFX1BIWV9MUF9NT0RFOgotCQkJLyogVGhlIHByZXNldCBlbmRzIGhlcmUgKi8KLQkJCWlmIChBY3Rpb24gPT0gU0tfUE5NSV9QUkVTRVQpIHsKLQotCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfT0spOwotCQkJfQotCi0JCQlpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgeyAvKiBTaW5nbGVOZXRNb2RlICovCi0JCQkJaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7Ci0JCQkJCU9mZnNldCA9IDA7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLyogU2V0IHZhbHVlIGZvciBwaHlzaWNhbCBwb3J0cyAqLwotCQkJCQlQaHlzUG9ydEluZGV4ID0gU0tfUE5NSV9QT1JUX0xPRzJQSFlTKHBBQywgTG9nUG9ydEluZGV4KTsKLQotCQkJCQlzd2l0Y2ggKCoocEJ1ZiArIE9mZnNldCkpIHsKLQkJCQkJCWNhc2UgMDoKLQkJCQkJCQkvKiBJZiBMb3dQb3dlck1vZGUgaXMgYWN0aXZlLCB3ZSBjYW4gbGVhdmUgaXQuICovCi0JCQkJCQkJaWYgKHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QUGh5UG93ZXJTdGF0ZSkgewotCi0JCQkJCQkJCVZhbDMyID0gU2tHbUxlYXZlTG93UG93ZXJNb2RlKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4KTsKLQkJCQkJCQkJCi0JCQkJCQkJCWlmIChwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUFBoeVBvd2VyU3RhdGUgPCAzKQl7Ci0JCQkJCQkJCQkKLQkJCQkJCQkJCVNrRHJ2SW5pdEFkYXB0ZXIocEFDKTsKLQkJCQkJCQkJfQotCQkJCQkJCQlicmVhazsKLQkJCQkJCQl9Ci0JCQkJCQkJZWxzZSB7Ci0JCQkJCQkJCSpwTGVuID0gMDsKLQkJCQkJCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJCQkJCQl9Ci0JCQkJCQljYXNlIDE6Ci0JCQkJCQljYXNlIDI6Ci0JCQkJCQljYXNlIDM6Ci0JCQkJCQljYXNlIDQ6Ci0JCQkJCQkJLyogSWYgbm8gTG93UG93ZXJNb2RlIGlzIGFjdGl2ZSwgd2UgY2FuIGVudGVyIGl0LiAqLwotCQkJCQkJCWlmICghcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBQaHlQb3dlclN0YXRlKSB7Ci0KLQkJCQkJCQkJaWYgKCgqKHBCdWYgKyBPZmZzZXQpKSA8IDMpCXsKLQkJCQkJCQkJCi0JCQkJCQkJCQlTa0RydkRlSW5pdEFkYXB0ZXIocEFDKTsKLQkJCQkJCQkJfQotCi0JCQkJCQkJCVZhbDMyID0gU2tHbUVudGVyTG93UG93ZXJNb2RlKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCAqcEJ1Zik7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCX0KLQkJCQkJCQllbHNlIHsKLQkJCQkJCQkJKnBMZW4gPSAwOwotCQkJCQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJCQkJCX0KLQkJCQkJCWRlZmF1bHQ6Ci0JCQkJCQkJKnBMZW4gPSAwOwotCQkJCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfQkFEX1ZBTFVFKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgeyAvKiBEdWFsTmV0TW9kZSAqLwotCQkJCQotCQkJCXN3aXRjaCAoKihwQnVmICsgT2Zmc2V0KSkgewotCQkJCQljYXNlIDA6Ci0JCQkJCQkvKiBJZiB3ZSBhcmUgaW4gYSBMb3dQb3dlck1vZGUsIHdlIGNhbiBsZWF2ZSBpdC4gKi8KLQkJCQkJCWlmIChwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUFBoeVBvd2VyU3RhdGUpIHsKLQotCQkJCQkJCVZhbDMyID0gU2tHbUxlYXZlTG93UG93ZXJNb2RlKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4KTsKLQkJCQkJCQkKLQkJCQkJCQlpZiAocEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBQaHlQb3dlclN0YXRlIDwgMykJewotCi0JCQkJCQkJCVNrRHJ2SW5pdEFkYXB0ZXIocEFDKTsKLQkJCQkJCQl9Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQllbHNlIHsKLQkJCQkJCQkqcExlbiA9IDA7Ci0JCQkJCQkJcmV0dXJuIChTS19QTk1JX0VSUl9HRU5FUkFMKTsKLQkJCQkJCX0KLQkJCQkJCi0JCQkJCWNhc2UgMToKLQkJCQkJY2FzZSAyOgotCQkJCQljYXNlIDM6Ci0JCQkJCWNhc2UgNDoKLQkJCQkJCS8qIElmIHdlIGFyZSBub3QgYWxyZWFkeSBpbiBMb3dQb3dlck1vZGUsIHdlIGNhbiBlbnRlciBpdC4gKi8KLQkJCQkJCWlmICghcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBQaHlQb3dlclN0YXRlKSB7Ci0KLQkJCQkJCQlpZiAoKCoocEJ1ZiArIE9mZnNldCkpIDwgMykJewotCi0JCQkJCQkJCVNrRHJ2RGVJbml0QWRhcHRlcihwQUMpOwotCQkJCQkJCX0KLQkJCQkJCQllbHNlIHsKLQotCQkJCQkJCQlWYWwzMiA9IFNrR21FbnRlckxvd1Bvd2VyTW9kZShwQUMsIElvQywgUGh5c1BvcnRJbmRleCwgKnBCdWYpOwotCQkJCQkJCX0KLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJCWVsc2UgewotCQkJCQkJCSpwTGVuID0gMDsKLQkJCQkJCQlyZXR1cm4gKFNLX1BOTUlfRVJSX0dFTkVSQUwpOwotCQkJCQkJfQotCQkJCQkKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCSpwTGVuID0gMDsKLQkJCQkJCXJldHVybiAoU0tfUE5NSV9FUlJfQkFEX1ZBTFVFKTsKLQkJCQl9Ci0JCQl9Ci0JCQlPZmZzZXQgKz0gc2l6ZW9mKFNLX1U4KTsKLQkJCWJyZWFrOwotI2VuZGlmCi0KIAkJZGVmYXVsdDoKICAgICAgICAgICAgIFNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfUE5NSSwgU0tfREJHQ0FUX0VSUiwKICAgICAgICAgICAgICAgICAoIk1hY1ByaXZhdGVDb25mOiBVbmtub3duIE9JRCBzaG91bGQgYmUgaGFuZGxlZCBiZWZvcmUgc2V0IikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlc2lycS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlc2lycS5jCmluZGV4IDg3NTIwZjAuLmFiNjZkODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZXNpcnEuYworKysgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2VzaXJxLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogICoKICAqIFJldHVybnM6IE4vQQogICovCi12b2lkIFNrSFdMaW5rVXAoCitzdGF0aWMgdm9pZCBTa0hXTGlua1VwKAogU0tfQUMJKnBBQywJLyogYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MJSW9DLAkvKiBJTyBjb250ZXh0ICovCiBpbnQJCVBvcnQpCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KQEAgLTYxMiwxNCArNjEyLDYgQEAKIAkJCQkgKiB3ZSBpZ25vcmUgdGhvc2UKIAkJCQkgKi8KIAkJCQlwUHJ0LT5IYWxmRHVwVGltZXJBY3RpdmUgPSBTS19UUlVFOwotI2lmZGVmIFhYWAotCQkJCUxlbiA9IHNpemVvZihTS19VNjQpOwotCQkJCVNrUG5taUdldFZhcihwQUMsIElvQywgT0lEX1NLR0VfU1RBVF9UWF9PQ1RFVFMsIChjaGFyICopJk9jdGV0cywKLQkJCQkJJkxlbiwgKFNLX1UzMilTS19QTk1JX1BPUlRfUEhZUzJJTlNUKHBBQywgMCksCi0JCQkJCXBBQy0+UmxtdC5Qb3J0WzBdLk5ldC0+TmV0TnVtYmVyKTsKLQkJCQkKLQkJCQlwUHJ0LT5MYXN0T2N0ZXRzID0gT2N0ZXRzOwotI2VuZGlmIC8qIFhYWCAqLwogCQkJCS8qIFNuYXAgc3RhdGlzdGljIGNvdW50ZXJzICovCiAJCQkJKHZvaWQpU2tYbVVwZGF0ZVN0YXRzKHBBQywgSW9DLCAwKTsKIApAQCAtNjUzLDE0ICs2NDUsNiBAQAogCQkJCSBwUHJ0LT5QTGlua01vZGVTdGF0dXMgPT0gU0tfTE1PREVfU1RBVF9BVVRPSEFMRikgJiYKIAkJCQkhcFBydC0+SGFsZkR1cFRpbWVyQWN0aXZlKSB7CiAJCQkJcFBydC0+SGFsZkR1cFRpbWVyQWN0aXZlID0gU0tfVFJVRTsKLSNpZmRlZiBYWFgKLQkJCQlMZW4gPSBzaXplb2YoU0tfVTY0KTsKLQkJCQlTa1BubWlHZXRWYXIocEFDLCBJb0MsIE9JRF9TS0dFX1NUQVRfVFhfT0NURVRTLCAoY2hhciAqKSZPY3RldHMsCi0JCQkJCSZMZW4sIChTS19VMzIpU0tfUE5NSV9QT1JUX1BIWVMySU5TVChwQUMsIDEpLAotCQkJCQlwQUMtPlJsbXQuUG9ydFsxXS5OZXQtPk5ldE51bWJlcik7Ci0JCQkJCi0JCQkJcFBydC0+TGFzdE9jdGV0cyA9IE9jdGV0czsKLSNlbmRpZiAvKiBYWFggKi8KIAkJCQkvKiBTbmFwIHN0YXRpc3RpYyBjb3VudGVycyAqLwogCQkJCSh2b2lkKVNrWG1VcGRhdGVTdGF0cyhwQUMsIElvQywgMSk7CiAKQEAgLTIwODUsMTIgKzIwNjksNiBAQAogCQkJcFBydC0+SGFsZkR1cFRpbWVyQWN0aXZlID0gU0tfRkFMU0U7CiAJCQlpZiAocFBydC0+UExpbmtNb2RlU3RhdHVzID09IFNLX0xNT0RFX1NUQVRfSEFMRiB8fAogCQkJCXBQcnQtPlBMaW5rTW9kZVN0YXR1cyA9PSBTS19MTU9ERV9TVEFUX0FVVE9IQUxGKSB7Ci0jaWZkZWYgWFhYCi0JCQkJTGVuID0gc2l6ZW9mKFNLX1U2NCk7Ci0JCQkJU2tQbm1pR2V0VmFyKHBBQywgSW9DLCBPSURfU0tHRV9TVEFUX1RYX09DVEVUUywgKGNoYXIgKikmT2N0ZXRzLAotCQkJCQkmTGVuLCAoU0tfVTMyKVNLX1BOTUlfUE9SVF9QSFlTMklOU1QocEFDLCBQb3J0KSwKLQkJCQkJcEFDLT5SbG10LlBvcnRbUG9ydF0uTmV0LT5OZXROdW1iZXIpOwotI2VuZGlmIC8qIFhYWCAqLwogCQkJCS8qIFNuYXAgc3RhdGlzdGljIGNvdW50ZXJzICovCiAJCQkJKHZvaWQpU2tYbVVwZGF0ZVN0YXRzKHBBQywgSW9DLCBQb3J0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2kyYy5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2kyYy5jCmluZGV4IDA3NWEwNDYuLjc5YmY1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tpMmMuYworKysgYi9kcml2ZXJzL25ldC9zazk4bGluL3NraTJjLmMKQEAgLTM5Niw3ICszOTYsNyBAQAogICoJCQkxOgllcnJvciwJIHRyYW5zZmVyIGRvZXMgbm90IGNvbXBsZXRlLCBJMkMgdHJhbnNmZXIKICAqCQkJCQkJIGtpbGxlZCwgd2FpdCBsb29wIHRlcm1pbmF0ZWQuCiAgKi8KLWludAlTa0kyY1dhaXQoCitzdGF0aWMgaW50CVNrSTJjV2FpdCgKIFNLX0FDCSpwQUMsCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwogU0tfSU9DCUlvQywJLyogSS9PIENvbnRleHQgKi8KIGludAkJRXZlbnQpCS8qIGNvbXBsZXRlIGV2ZW50IHRvIHdhaXQgZm9yIChJMkNfUkVBRCBvciBJMkNfV1JJVEUpICovCkBAIC00ODEsNyArNDgxLDcgQEAKICAqIHJldHVybnMJMDoJc3VjY2VzcwogICoJCQkxOgllcnJvcgogICovCi1pbnQgU2tJMmNXcml0ZSgKK3N0YXRpYyBpbnQgU2tJMmNXcml0ZSgKIFNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KIFNLX0lPQwlJb0MsCQkvKiBJL08gQ29udGV4dCAqLwogU0tfVTMyCUkyY0RhdGEsCS8qIEkyQyBEYXRhIHRvIHdyaXRlICovCkBAIC01MzgsNyArNTM4LDcgQEAKICAqCQkxIGlmIHRoZSByZWFkIGlzIGNvbXBsZXRlZAogICoJCTAgaWYgdGhlIHJlYWQgbXVzdCBiZSBjb250aW51ZWQgKEkyQyBCdXMgc3RpbGwgYWxsb2NhdGVkKQogICovCi1pbnQJU2tJMmNSZWFkU2Vuc29yKAorc3RhdGljIGludAlTa0kyY1JlYWRTZW5zb3IoCiBTS19BQwkJKnBBQywJLyogQWRhcHRlciBDb250ZXh0ICovCiBTS19JT0MJCUlvQywJLyogSS9PIENvbnRleHQgKi8KIFNLX1NFTlNPUgkqcFNlbikJLyogU2Vuc29yIHRvIGJlIHJlYWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tsbTgwLmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrbG04MC5jCmluZGV4IDY4MjkyZDEuLmEyMDRmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tsbTgwLmMKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2xtODAuYwpAQCAtMzQsNzkgKzM0LDcgQEAKICNpbmNsdWRlICJoL2xtODAuaCIKICNpbmNsdWRlICJoL3NrZHJ2Mm5kLmgiCQkvKiBBZGFwdGVyIENvbnRyb2wtIGFuZCBEcml2ZXIgc3BlY2lmaWMgRGVmLiAqLwogCi0jaWZkZWYJU0tfRElBRwotI2RlZmluZQlCUkVBS19PUl9XQUlUKHBBQyxJb0MsRXZlbnQpCVNrSTJjV2FpdChwQUMsSW9DLEV2ZW50KQotI2Vsc2UJLyogblNLX0RJQUcgKi8KICNkZWZpbmUJQlJFQUtfT1JfV0FJVChwQUMsSW9DLEV2ZW50KQlicmVhawotI2VuZGlmCS8qIG5TS19ESUFHICovCi0KLSNpZmRlZglTS19ESUFHCi0vKgotICogcmVhZCB0aGUgcmVnaXN0ZXIgJ1JlZycgZnJvbSB0aGUgZGV2aWNlICdEZXYnCi0gKgotICogcmV0dXJuIAlyZWFkIGVycm9yCS0xCi0gKgkJc3VjY2VzcwkJdGhlIHJlYWQgdmFsdWUKLSAqLwotaW50CVNrTG04MFJjdlJlZygKLVNLX0lPQwlJb0MsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLWludAkJRGV2LAkJLyogSTJDIGRldmljZSBhZGRyZXNzICovCi1pbnQJCVJlZykJCS8qIHJlZ2lzdGVyIHRvIHJlYWQgKi8KLXsKLQlpbnQJVmFsID0gMDsKLQlpbnQJVGVtcEV4dDsKLQotCS8qIFNpZ25hbCBkZXZpY2UgbnVtYmVyICovCi0JaWYgKFNrSTJjU25kRGV2KElvQywgRGV2LCBJMkNfV1JJVEUpKSB7Ci0JCXJldHVybigtMSk7Ci0JfQotCi0JaWYgKFNrSTJjU25kQnl0ZShJb0MsIFJlZykpIHsKLQkJcmV0dXJuKC0xKTsKLQl9Ci0KLQkvKiByZXBlYXQgc3RhcnQgKi8KLQlpZiAoU2tJMmNTbmREZXYoSW9DLCBEZXYsIEkyQ19SRUFEKSkgewotCQlyZXR1cm4oLTEpOwotCX0KLQotCXN3aXRjaCAoUmVnKSB7Ci0JY2FzZSBMTTgwX1RFTVBfSU46Ci0JCVZhbCA9IChpbnQpU2tJMmNSY3ZCeXRlKElvQywgMSk7Ci0KLQkJLyogRmlyc3Q6IGNvcnJlY3QgdGhlIHZhbHVlOiBpdCBtaWdodCBiZSBuZWdhdGl2ZSAqLwotCQlpZiAoKFZhbCAmIDB4ODApICE9IDApIHsKLQkJCS8qIFZhbHVlIGlzIG5lZ2F0aXZlICovCi0JCQlWYWwgPSBWYWwgLSAyNTY7Ci0JCX0KLQkJVmFsID0gVmFsICogU0tfTE04MF9URU1QX0xTQjsKLQkJU2tJMmNTdG9wKElvQyk7Ci0JCQotCQlUZW1wRXh0ID0gKGludClTa0xtODBSY3ZSZWcoSW9DLCBMTTgwX0FERFIsIExNODBfVEVNUF9DVFJMKTsKLQkJCi0JCWlmIChWYWwgPiAwKSB7Ci0JCQlWYWwgKz0gKChUZW1wRXh0ID4+IDcpICogU0tfTE04MF9URU1QRVhUX0xTQik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlWYWwgLT0gKChUZW1wRXh0ID4+IDcpICogU0tfTE04MF9URU1QRVhUX0xTQik7Ci0JCX0KLQkJcmV0dXJuKFZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgTE04MF9WVDBfSU46Ci0JY2FzZSBMTTgwX1ZUMV9JTjoKLQljYXNlIExNODBfVlQyX0lOOgotCWNhc2UgTE04MF9WVDNfSU46Ci0JCVZhbCA9IChpbnQpU2tJMmNSY3ZCeXRlKElvQywgMSkgKiBTS19MTTgwX1ZUX0xTQjsKLQkJYnJlYWs7Ci0JCi0JZGVmYXVsdDoKLQkJVmFsID0gKGludClTa0kyY1JjdkJ5dGUoSW9DLCAxKTsKLQkJYnJlYWs7Ci0JfQotCi0JU2tJMmNTdG9wKElvQyk7Ci0JcmV0dXJuKFZhbCk7Ci19Ci0jZW5kaWYJLyogU0tfRElBRyAqLwogCiAvKgogICogcmVhZCBhIHNlbnNvcnMgdmFsdWUgKExNODAgc3BlY2lmaWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrcmxtdC5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za3JsbXQuYwppbmRleCA5ZWExMWFiLi5iZThkMWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrcmxtdC5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tybG10LmMKQEAgLTI4Miw3ICsyODIsNiBAQAogCiBTS19NQUNfQUREUglTa1JsbXRNY0FkZHIgPQl7ezB4MDEsICAweDAwLCAgMHg1QSwgIDB4NTIsICAweDRDLCAgMHg0RH19OwogU0tfTUFDX0FERFIJQnJpZGdlTWNBZGRyID0Je3sweDAxLCAgMHg4MCwgIDB4QzIsICAweDAwLCAgMHgwMCwgIDB4MDB9fTsKLVNLX01BQ19BRERSCUJjQWRkciA9IAkJe3sweEZGLCAgMHhGRiwgIDB4RkYsICAweEZGLCAgMHhGRiwgIDB4RkZ9fTsKIAogLyogbG9jYWwgdmFyaWFibGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za3ZwZC5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za3ZwZC5jCmluZGV4IGViM2M4OTg4Li4xNzc4NjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrdnBkLmMKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za3ZwZC5jCkBAIC0xMzIsNjUgKzEzMiw2IEBACiAKICNlbmRpZgkvKiBTS0RJQUcgKi8KIAotI2lmIDAKLQotLyoKLQlXcml0ZSB0aGUgZHdvcmQgJ2RhdGEnIGF0IGFkZHJlc3MgJ2FkZHInIGludG8gdGhlIFZQRCBFRVBST00sIGFuZAotCXZlcmlmeSB0aGF0IHRoZSBkYXRhIGlzIHdyaXR0ZW4uCi0KLSBOZWVkZWQgVGltZToKLQotLgkJCQlNSU4JCU1BWAotLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0uIHdyaXRlCQkJCTEuOCBtcwkJMy42IG1zCi0uIGludGVybmFsIHdyaXRlIGN5bGVzCQkwLjcgbXMJCTcuMCBtcwotLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0uIG92ZXIgYWxsIHByb2dyYW0gdGltZQkgCTIuNSBtcwkJMTAuNiBtcwotLiByZWFkCQkJCTEuMyBtcwkJMi42IG1zCi0uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS4gb3ZlciBhbGwgCQkJMy44IG1zCQkxMy4yIG1zCi0uCi0KLQotIFJldHVybnMJMDoJc3VjY2VzcwotCQkJMToJZXJyb3IsCUkyQyB0cmFuc2ZlciBkb2VzIG5vdCB0ZXJtaW5hdGUKLQkJCTI6CWVycm9yLAlkYXRhIHZlcmlmeSBlcnJvcgotCi0gKi8KLXN0YXRpYyBpbnQgVnBkV3JpdGVEV29yZCgKLVNLX0FDCSpwQUMsCS8qIHBBQyBwb2ludGVyICovCi1TS19JT0MJSW9DLAkvKiBJTyBDb250ZXh0ICovCi1pbnQJCWFkZHIsCS8qIFZQRCBhZGRyZXNzICovCi1TS19VMzIJZGF0YSkJLyogVlBEIGRhdGEgdG8gd3JpdGUgKi8KLXsKLQkvKiBzdGFydCBWUEQgd3JpdGUgKi8KLQkvKiBEb24ndCBzd2FwIGhlcmUsIGl0J3MgYSBkYXRhIHN0cmVhbSBvZiBieXRlcyAqLwotCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfQ1RSTCwKLQkJKCJWUEQgd3JpdGUgZHdvcmQgYXQgYWRkciAweCV4LCBkYXRhID0gMHgleFxuIixhZGRyLGRhdGEpKTsKLQlWUERfT1VUMzIocEFDLCBJb0MsIFBDSV9WUERfREFUX1JFRywgKFNLX1UzMilkYXRhKTsKLQkvKiBCdXQgZG8gaXQgaGVyZSAqLwotCWFkZHIgfD0gVlBEX1dSSVRFOwotCi0JVlBEX09VVDE2KHBBQywgSW9DLCBQQ0lfVlBEX0FEUl9SRUcsIChTS19VMTYpKGFkZHIgfCBWUERfV1JJVEUpKTsKLQotCS8qIHRoaXMgbWF5IHRha2UgdXAgdG8gMTAsNiBtcyAqLwotCWlmIChWcGRXYWl0KHBBQywgSW9DLCBWUERfV1JJVEUpKSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfRVJSLAotCQkJKCJXcml0ZSBUaW1lZCBPdXRcbiIpKTsKLQkJcmV0dXJuKDEpOwotCX07Ci0KLQkvKiB2ZXJpZnkgZGF0YSAqLwotCWlmIChWcGRSZWFkRFdvcmQocEFDLCBJb0MsIGFkZHIpICE9IGRhdGEpIHsKLQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIgfCBTS19EQkdDQVRfRkFUQUwsCi0JCQkoIkRhdGEgVmVyaWZ5IEVycm9yXG4iKSk7Ci0JCXJldHVybigyKTsKLQl9Ci0JcmV0dXJuKDApOwotfQkvKiBWcGRXcml0ZURXb3JkICovCi0KLSNlbmRpZgkvKiAwICovCi0KIC8qCiAgKglSZWFkIG9uZSBTdHJlYW0gb2YgJ2xlbicgYnl0ZXMgb2YgVlBEIGRhdGEsIHN0YXJ0aW5nIGF0ICdhZGRyJyBmcm9tCiAgKglvciB0byB0aGUgSTJDIEVFUFJPTS4KQEAgLTcyOCw3ICs2NjksNyBAQAogICoJCTY6CWZhdGFsIFZQRCBlcnJvcgogICoKICAqLwotaW50CVZwZFNldHVwUGFyYSgKK3N0YXRpYyBpbnQJVnBkU2V0dXBQYXJhKAogU0tfQUMJKnBBQywJCS8qIGNvbW1vbiBkYXRhIGJhc2UgKi8KIGNvbnN0IGNoYXIJKmtleSwJLyoga2V5d29yZCB0byBpbnNlcnQgKi8KIGNvbnN0IGNoYXIJKmJ1ZiwJLyogYnVmZmVyIHdpdGggdGhlIGtleXdvcmQgdmFsdWUgKi8KQEAgLTExNDgsNTAgKzEwODksMyBAQAogCXJldHVybigwKTsKIH0KIAotCi0KLS8qCi0gKglSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgVlBEIEVFUFJPTSBhbmQgY29weSBpdCB0byB0aGUgVlBEIGJ1ZmZlcgotICoJaWYgbm90IGFscmVhZHkgZG9uZS4gSWYgdGhlIGtleXdvcmQgIlZGIiBpcyBub3QgcHJlc2VudCBpdCB3aWxsIGJlCi0gKgljcmVhdGVkIGFuZCB0aGUgZXJyb3IgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBzdG9yZWQgdG8gdGhpcyBrZXl3b3JkLgotICoJSWYgIlZGIiBpcyBub3QgcHJlc2VudCB0aGUgZXJyb3IgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBzdG9yZWQgdG8gdGhlCi0gKglrZXl3b3JkICJWTCIuICJWTCIgd2lsbCBjcmVhdGVkIG9yIG92ZXJ3cml0dGVuIGlmICJWRiIgaXMgcHJlc2VudC4KLSAqCVRoZSBWUEQgcmVhZC93cml0ZSBhcmVhIGlzIHNhdmVkIHRvIHRoZSBWUEQgRUVQUk9NLgotICoKLSAqIHJldHVybnMgbm90aGluZywgZXJyb3JzIHdpbGwgYmUgaWdub3JlZC4KLSAqLwotdm9pZCBWcGRFcnJMb2coCi1TS19BQwkqcEFDLAkvKiBjb21tb24gZGF0YSBiYXNlICovCi1TS19JT0MJSW9DLAkvKiBJTyBDb250ZXh0ICovCi1jaGFyCSptc2cpCS8qIGVycm9yIGxvZyBtZXNzYWdlICovCi17Ci0JU0tfVlBEX1BBUkEgKnYsIHZmOwkvKiBWRiAqLwotCWludCBsZW47Ci0KLQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX1RYLAotCQkoIlZQRCBlcnJvciBsb2cgbXNnICVzXG4iLCBtc2cpKTsKLQlpZiAoKHBBQy0+dnBkLnYudnBkX3N0YXR1cyAmIFZQRF9WQUxJRCkgPT0gMCkgewotCQlpZiAoVnBkSW5pdChwQUMsIElvQykgIT0gMCkgewotCQkJU0tfREJHX01TRyhwQUMsIFNLX0RCR01PRF9WUEQsIFNLX0RCR0NBVF9FUlIsCi0JCQkJKCJWUEQgaW5pdCBlcnJvclxuIikpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JbGVuID0gc3RybGVuKG1zZyk7Ci0JaWYgKGxlbiA+IFZQRF9NQVhfTEVOKSB7Ci0JCS8qIGN1dCBpdCAqLwotCQlsZW4gPSBWUERfTUFYX0xFTjsKLQl9Ci0JaWYgKCh2ID0gdnBkX2ZpbmRfcGFyYShwQUMsIFZQRF9WRiwgJnZmKSkgIT0gTlVMTCkgewotCQlTS19EQkdfTVNHKHBBQywgU0tfREJHTU9EX1ZQRCwgU0tfREJHQ0FUX1RYLCAoIm92ZXJ3cml0ZSBWTFxuIikpOwotCQkodm9pZClWcGRTZXR1cFBhcmEocEFDLCBWUERfVkwsIG1zZywgbGVuLCBWUERfUldfS0VZLCBPV1JfS0VZKTsKLQl9Ci0JZWxzZSB7Ci0JCVNLX0RCR19NU0cocEFDLCBTS19EQkdNT0RfVlBELCBTS19EQkdDQVRfVFgsICgid3JpdGUgVkZcbiIpKTsKLQkJKHZvaWQpVnBkU2V0dXBQYXJhKHBBQywgVlBEX1ZGLCBtc2csIGxlbiwgVlBEX1JXX0tFWSwgQUREX0tFWSk7Ci0JfQotCi0JKHZvaWQpVnBkVXBkYXRlKHBBQywgSW9DKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za3htYWMyLmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NreG1hYzIuYwppbmRleCA0MmQyZDk2Li5iNGU3NTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NreG1hYzIuYworKysgYi9kcml2ZXJzL25ldC9zazk4bGluL3NreG1hYzIuYwpAQCAtNDEsMTMgKzQxLDEzIEBACiAjZW5kaWYKIAogI2lmZGVmIEdFTkVTSVMKLUJDT01fSEFDSyBCY29tUmVnQTFIYWNrW10gPSB7CitzdGF0aWMgQkNPTV9IQUNLIEJjb21SZWdBMUhhY2tbXSA9IHsKICB7IDB4MTgsIDB4MGMyMCB9LCB7IDB4MTcsIDB4MDAxMiB9LCB7IDB4MTUsIDB4MTEwNCB9LCB7IDB4MTcsIDB4MDAxMyB9LAogIHsgMHgxNSwgMHgwNDA0IH0sIHsgMHgxNywgMHg4MDA2IH0sIHsgMHgxNSwgMHgwMTMyIH0sIHsgMHgxNywgMHg4MDA2IH0sCiAgeyAweDE1LCAweDAyMzIgfSwgeyAweDE3LCAweDgwMEQgfSwgeyAweDE1LCAweDAwMEYgfSwgeyAweDE4LCAweDA0MjAgfSwKICB7IDAsIDAgfQogfTsKLUJDT01fSEFDSyBCY29tUmVnQzBIYWNrW10gPSB7CitzdGF0aWMgQkNPTV9IQUNLIEJjb21SZWdDMEhhY2tbXSA9IHsKICB7IDB4MTgsIDB4MGMyMCB9LCB7IDB4MTcsIDB4MDAxMiB9LCB7IDB4MTUsIDB4MTIwNCB9LCB7IDB4MTcsIDB4MDAxMyB9LAogIHsgMHgxNSwgMHgwQTA0IH0sIHsgMHgxOCwgMHgwNDIwIH0sCiAgeyAwLCAwIH0KQEAgLTc5MCw3ICs3OTAsNyBAQAogICogUmV0dXJuczoKICAqCW5vdGhpbmcKICAqLwotdm9pZCBTa01hY0ZsdXNoUnhGaWZvKAorc3RhdGljIHZvaWQgU2tNYWNGbHVzaFJ4RmlmbygKIFNLX0FDCSpwQUMsCS8qIGFkYXB0ZXIgY29udGV4dCAqLwogU0tfSU9DCUlvQywJLyogSU8gY29udGV4dCAqLwogaW50CQlQb3J0KQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCkBAIC0xMjMxLDM4ICsxMjMxLDYgQEAKIH0JLyogU2tNYWNIYXJkUnN0ICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrTWFjQ2xlYXJSc3QoKSAtIENsZWFyIHRoZSBNQUMgcmVzZXQKLSAqCi0gKiBEZXNjcmlwdGlvbjoJY2FsbHMgYSBjbGVhciBNQUMgcmVzZXQgcm91dGluZSBkZXAuIG9uIGJvYXJkIHR5cGUKLSAqCi0gKiBSZXR1cm5zOgotICoJbm90aGluZwotICovCi12b2lkIFNrTWFjQ2xlYXJSc3QoCi1TS19BQwkqcEFDLAkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotewotCQotI2lmZGVmIEdFTkVTSVMKLQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykgewotCQkKLQkJU2tYbUNsZWFyUnN0KHBBQywgSW9DLCBQb3J0KTsKLQl9Ci0jZW5kaWYgLyogR0VORVNJUyAqLwotCQotI2lmZGVmIFlVS09OCi0JaWYgKHBBQy0+R0luaS5HSVl1a29uKSB7Ci0JCQotCQlTa0dtQ2xlYXJSc3QocEFDLCBJb0MsIFBvcnQpOwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi19CS8qIFNrTWFjQ2xlYXJSc3QgKi8KLQotCiAjaWZkZWYgR0VORVNJUwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE3MTMsNyArMTY4MSw3IEBACiAgKiBSZXR1cm5zOgogICoJbm90aGluZwogICovCi12b2lkIFNrWG1Jbml0RHVwTWQoCitzdGF0aWMgdm9pZCBTa1htSW5pdER1cE1kKAogU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwogU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KIGludAkJUG9ydCkJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KQEAgLTE3NjEsNyArMTcyOSw3IEBACiAgKiBSZXR1cm5zOgogICoJbm90aGluZwogICovCi12b2lkIFNrWG1Jbml0UGF1c2VNZCgKK3N0YXRpYyB2b2lkIFNrWG1Jbml0UGF1c2VNZCgKIFNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KIFNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCiBpbnQJCVBvcnQpCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCkBAIC0yMDc2LDI4MyArMjA0NCw3IEBACiB9CS8qIFNrWG1Jbml0UGh5QmNvbSAqLwogI2VuZGlmIC8qIEdFTkVTSVMgKi8KIAotCiAjaWZkZWYgWVVLT04KLSNpZm5kZWYgU0tfU0xJTQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNrR21FbnRlckxvd1Bvd2VyTW9kZSgpCi0gKgotICogRGVzY3JpcHRpb246CQotICoJVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBNYXJ2ZWxsIEFsYXNrYSBQSFkgdG8gdGhlIGxvdyBwb3dlciBtb2RlCi0gKglnaXZlbiBieSBwYXJhbWV0ZXIgbW9kZS4KLSAqCVRoZSBmb2xsb3dpbmcgbG93IHBvd2VyIG1vZGVzIGFyZSBhdmFpbGFibGU6Ci0gKgkJCi0gKgkJLSBDb21hIE1vZGUgKERlZXAgU2xlZXApOgotICoJCQlQb3dlciBjb25zdW1wdGlvbjogfjE1IC0gMzAgbVcKLSAqCQkJVGhlIFBIWSBjYW5ub3Qgd2FrZSB1cCBvbiBpdHMgb3duLgotICoKLSAqCQktIElFRUUgMjIuMi40LjEuNSBjb21wYXRpYmxlIHBvd2VyIGRvd24gbW9kZQotICoJCQlQb3dlciBjb25zdW1wdGlvbjogfjI0MCBtVwotICoJCQlUaGUgUEhZIGNhbm5vdCB3YWtlIHVwIG9uIGl0cyBvd24uCi0gKgotICoJCS0gZW5lcmd5IGRldGVjdCBtb2RlCi0gKgkJCVBvd2VyIGNvbnN1bXB0aW9uOiB+MTYwIG1XCi0gKgkJCVRoZSBQSFkgY2FuIHdha2UgdXAgb24gaXRzIG93biBieSBkZXRlY3RpbmcgYWN0aXZpdHkKLSAqCQkJb24gdGhlIENBVCA1IGNhYmxlLgotICoKLSAqCQktIGVuZXJneSBkZXRlY3QgcGx1cyBtb2RlCi0gKgkJCVBvd2VyIGNvbnN1bXB0aW9uOiB+MTUwIG1XCi0gKgkJCVRoZSBQSFkgY2FuIHdha2UgdXAgb24gaXRzIG93biBieSBkZXRlY3RpbmcgYWN0aXZpdHkKLSAqCQkJb24gdGhlIENBVCA1IGNhYmxlLgotICoJCQlDb25uZWN0ZWQgZGV2aWNlcyBjYW4gYmUgd29rZW4gdXAgYnkgc2VuZGluZyBub3JtYWwgbGluawotICoJCQlwdWxzZXMgZXZlcnkgb25lIHNlY29uZC4KLSAqCi0gKiBOb3RlOgotICoKLSAqIFJldHVybnM6Ci0gKgkJMDogb2sKLSAqCQkxOiBlcnJvcgotICovCi1pbnQgU2tHbUVudGVyTG93UG93ZXJNb2RlKAotU0tfQUMJKnBBQywJCS8qIGFkYXB0ZXIgY29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKGUuZy4gTUFDXzEpICovCi1TS19VOAlNb2RlKQkJLyogbG93IHBvd2VyIG1vZGUgKi8KLXsKLQlTS19VMTYJV29yZDsKLQlTS19VMzIJRFdvcmQ7Ci0JU0tfVTgJTGFzdE1vZGU7Ci0JaW50CQlSZXQgPSAwOwotCi0JaWYgKHBBQy0+R0luaS5HSVl1a29uTGl0ZSAmJgotCSAgICBwQUMtPkdJbmkuR0lDaGlwUmV2ID49IENISVBfUkVWX1lVX0xJVEVfQTMpIHsKLQotCQkvKiBzYXZlIGN1cnJlbnQgcG93ZXIgbW9kZSAqLwotCQlMYXN0TW9kZSA9IHBBQy0+R0luaS5HUFtQb3J0XS5QUGh5UG93ZXJTdGF0ZTsKLQkJcEFDLT5HSW5pLkdQW1BvcnRdLlBQaHlQb3dlclN0YXRlID0gTW9kZTsKLQotCQlzd2l0Y2ggKE1vZGUpIHsKLQkJCS8qIGNvbWEgbW9kZSAoZGVlcCBzbGVlcCkgKi8KLQkJCWNhc2UgUEhZX1BNX0RFRVBfU0xFRVA6Ci0JCQkJLyogc2V0dXAgR2VuZXJhbCBQdXJwb3NlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQkJCQlHTV9PVVQxNihJb0MsIDAsIEdNX0dQX0NUUkwsIEdNX0dQQ1JfRkxfUEFTUyB8Ci0JCQkJCUdNX0dQQ1JfU1BFRURfMTAwIHwgR01fR1BDUl9BVV9BTExfRElTKTsKLQotCQkJCS8qIGFwcGx5IENPTUEgbW9kZSB3b3JrYXJvdW5kICovCi0JCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCAyOSwgMHgwMDFmKTsKLQkJCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIDMwLCAweGZmZjMpOwotCi0JCQkJU0tfSU4zMihJb0MsIFBDSV9DKFBDSV9PVVJfUkVHXzEpLCAmRFdvcmQpOwotCi0JCQkJU0tfT1VUOChJb0MsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7Ci0JCQkJCi0JCQkJLyogU2V0IFBIWSB0byBDb21hIE1vZGUgKi8KLQkJCQlTS19PVVQzMihJb0MsIFBDSV9DKFBDSV9PVVJfUkVHXzEpLCBEV29yZCB8IFBDSV9QSFlfQ09NQSk7Ci0JCQkJCi0JCQkJU0tfT1VUOChJb0MsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOwotCi0JCQlicmVhazsKLQkJCQotCQkJLyogSUVFRSAyMi4yLjQuMS41IGNvbXBhdGlibGUgcG93ZXIgZG93biBtb2RlICovCi0JCQljYXNlIFBIWV9QTV9JRUVFX1BPV0VSX0RPV046Ci0JCQkJLyoKLQkJCQkgKiAtIGRpc2FibGUgTUFDIDEyNSBNSHogY2xvY2sKLQkJCQkgKiAtIGFsbG93IE1BQyBwb3dlciBkb3duCi0JCQkJICovCi0JCQkJU2tHbVBoeVJlYWQocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCAmV29yZCk7Ci0JCQkJV29yZCB8PSBQSFlfTV9QQ19ESVNfMTI1Q0xLOwotCQkJCVdvcmQgJj0JflBIWV9NX1BDX01BQ19QT1dfVVA7Ci0JCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgV29yZCk7Ci0KLQkJCQkvKgotCQkJCSAqIHJlZ2lzdGVyIGNoYW5nZXMgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNvZnR3YXJlCi0JCQkJICogcmVzZXQgdG8gdGFrZSBlZmZlY3QKLQkJCQkgKi8KLQkJCQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQ1RSTCwgJldvcmQpOwotCQkJCVdvcmQgfD0gUEhZX0NUX1JFU0VUOwotCQkJCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQ1RSTCwgV29yZCk7Ci0KLQkJCQkvKiBzd2l0Y2ggSUVFRSBjb21wYXRpYmxlIHBvd2VyIGRvd24gbW9kZSBvbiAqLwotCQkJCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9DVFJMLCAmV29yZCk7Ci0JCQkJV29yZCB8PSBQSFlfQ1RfUERPV047Ci0JCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9DVFJMLCBXb3JkKTsKLQkJCWJyZWFrOwotCi0JCQkvKiBlbmVyZ3kgZGV0ZWN0IGFuZCBlbmVyZ3kgZGV0ZWN0IHBsdXMgbW9kZSAqLwotCQkJY2FzZSBQSFlfUE1fRU5FUkdZX0RFVEVDVDoKLQkJCWNhc2UgUEhZX1BNX0VORVJHWV9ERVRFQ1RfUExVUzoKLQkJCQkvKgotCQkJCSAqIC0gZGlzYWJsZSBNQUMgMTI1IE1IeiBjbG9jawotCQkJCSAqLwotCQkJCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgJldvcmQpOwotCQkJCVdvcmQgfD0gUEhZX01fUENfRElTXzEyNUNMSzsKLQkJCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCBXb3JkKTsKLQkJCQkKLQkJCQkvKiBhY3RpdmF0ZSBlbmVyZ3kgZGV0ZWN0IG1vZGUgMSAqLwotCQkJCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgJldvcmQpOwotCi0JCQkJLyogZW5lcmd5IGRldGVjdCBtb2RlICovCi0JCQkJaWYgKE1vZGUgPT0gUEhZX1BNX0VORVJHWV9ERVRFQ1QpIHsKLQkJCQkJV29yZCB8PSBQSFlfTV9QQ19FTl9ERVQ7Ci0JCQkJfQotCQkJCS8qIGVuZXJneSBkZXRlY3QgcGx1cyBtb2RlICovCi0JCQkJZWxzZSB7Ci0JCQkJCVdvcmQgfD0gUEhZX01fUENfRU5fREVUX1BMVVM7Ci0JCQkJfQotCi0JCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgV29yZCk7Ci0KLQkJCQkvKgotCQkJCSAqIHJlaW5pdGlhbGl6ZSB0aGUgUEhZIHRvIGZvcmNlIGEgc29mdHdhcmUgcmVzZXQKLQkJCQkgKiB3aGljaCBpcyBuZWNlc3NhcnkgYWZ0ZXIgdGhlIHJlZ2lzdGVyIHNldHRpbmdzCi0JCQkJICogZm9yIHRoZSBlbmVyZ3kgZGV0ZWN0IG1vZGVzLgotCQkJCSAqIEZ1cnRoZXJtb3JlIHJlaW5pdGlhbGlzYXRpb24gcHJldmVudHMgdGhhdCB0aGUKLQkJCQkgKiBQSFkgaXMgcnVubmluZyBvdXQgb2YgYSBzdGFibGUgc3RhdGUuCi0JCQkJICovCi0JCQkJU2tHbUluaXRQaHlNYXJ2KHBBQywgSW9DLCBQb3J0LCBTS19GQUxTRSk7Ci0JCQlicmVhazsKLQotCQkJLyogZG9uJ3QgY2hhbmdlIGN1cnJlbnQgcG93ZXIgbW9kZSAqLwotCQkJZGVmYXVsdDoKLQkJCQlwQUMtPkdJbmkuR1BbUG9ydF0uUFBoeVBvd2VyU3RhdGUgPSBMYXN0TW9kZTsKLQkJCQlSZXQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JLyogbG93IHBvd2VyIG1vZGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY2hpcCAqLwotCWVsc2UgewotCQlSZXQgPSAxOwotCX0KLQotCXJldHVybihSZXQpOwotCi19CS8qIFNrR21FbnRlckxvd1Bvd2VyTW9kZSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tHbUxlYXZlTG93UG93ZXJNb2RlKCkKLSAqCi0gKiBEZXNjcmlwdGlvbjoJCi0gKglMZWF2ZSB0aGUgY3VycmVudCBsb3cgcG93ZXIgbW9kZSBhbmQgc3dpdGNoIHRvIG5vcm1hbCBtb2RlCi0gKgotICogTm90ZToKLSAqCi0gKiBSZXR1cm5zOgotICoJCTA6CW9rCi0gKgkJMToJZXJyb3IKLSAqLwotaW50IFNrR21MZWF2ZUxvd1Bvd2VyTW9kZSgKLVNLX0FDCSpwQUMsCQkvKiBhZGFwdGVyIGNvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQpCQkvKiBQb3J0IEluZGV4IChlLmcuIE1BQ18xKSAqLwotewotCVNLX1UzMglEV29yZDsKLQlTS19VMTYJV29yZDsKLQlTS19VOAlMYXN0TW9kZTsKLQlpbnQJCVJldCA9IDA7Ci0KLQlpZiAocEFDLT5HSW5pLkdJWXVrb25MaXRlICYmCi0JCXBBQy0+R0luaS5HSUNoaXBSZXYgPj0gQ0hJUF9SRVZfWVVfTElURV9BMykgewotCi0JCS8qIHNhdmUgY3VycmVudCBwb3dlciBtb2RlICovCi0JCUxhc3RNb2RlID0gcEFDLT5HSW5pLkdQW1BvcnRdLlBQaHlQb3dlclN0YXRlOwotCQlwQUMtPkdJbmkuR1BbUG9ydF0uUFBoeVBvd2VyU3RhdGUgPSBQSFlfUE1fT1BFUkFUSU9OQUxfTU9ERTsKLQotCQlzd2l0Y2ggKExhc3RNb2RlKSB7Ci0JCQkvKiBjb21hIG1vZGUgKGRlZXAgc2xlZXApICovCi0JCQljYXNlIFBIWV9QTV9ERUVQX1NMRUVQOgotCQkJCVNLX0lOMzIoSW9DLCBQQ0lfQyhQQ0lfT1VSX1JFR18xKSwgJkRXb3JkKTsKLQotCQkJCVNLX09VVDgoSW9DLCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT04pOwotCQkJCQotCQkJCS8qIFJlbGVhc2UgUEhZIGZyb20gQ29tYSBNb2RlICovCi0JCQkJU0tfT1VUMzIoSW9DLCBQQ0lfQyhQQ0lfT1VSX1JFR18xKSwgRFdvcmQgJiB+UENJX1BIWV9DT01BKTsKLQkJCQkKLQkJCQlTS19PVVQ4KElvQywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09GRik7Ci0JCQkJCi0JCQkJU0tfSU4zMihJb0MsIEIyX0dQX0lPLCAmRFdvcmQpOwotCi0JCQkJLyogc2V0IHRvIG91dHB1dCAqLwotCQkJCURXb3JkIHw9IChHUF9ESVJfOSB8IEdQX0lPXzkpOwotCi0JCQkJLyogc2V0IFBIWSByZXNldCAqLwotCQkJCVNLX09VVDMyKElvQywgQjJfR1BfSU8sIERXb3JkKTsKLQotCQkJCURXb3JkICY9IH5HUF9JT185OyAvKiBjbGVhciBQSFkgcmVzZXQgKGFjdGl2ZSBoaWdoKSAqLwotCi0JCQkJLyogY2xlYXIgUEhZIHJlc2V0ICovCi0JCQkJU0tfT1VUMzIoSW9DLCBCMl9HUF9JTywgRFdvcmQpOwotCQkJYnJlYWs7Ci0JCQkKLQkJCS8qIElFRUUgMjIuMi40LjEuNSBjb21wYXRpYmxlIHBvd2VyIGRvd24gbW9kZSAqLwotCQkJY2FzZSBQSFlfUE1fSUVFRV9QT1dFUl9ET1dOOgotCQkJCS8qCi0JCQkJICogLSBlbmFibGUgTUFDIDEyNSBNSHogY2xvY2sKLQkJCQkgKiAtIHNldCBNQUMgcG93ZXIgdXAKLQkJCQkgKi8KLQkJCQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsICZXb3JkKTsKLQkJCQlXb3JkICY9IH5QSFlfTV9QQ19ESVNfMTI1Q0xLOwotCQkJCVdvcmQgfD0JUEhZX01fUENfTUFDX1BPV19VUDsKLQkJCQlTa0dtUGh5V3JpdGUocEFDLCBJb0MsIFBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCBXb3JkKTsKLQotCQkJCS8qCi0JCQkJICogcmVnaXN0ZXIgY2hhbmdlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc29mdHdhcmUKLQkJCQkgKiByZXNldCB0byB0YWtlIGVmZmVjdAotCQkJCSAqLwotCQkJCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9DVFJMLCAmV29yZCk7Ci0JCQkJV29yZCB8PSBQSFlfQ1RfUkVTRVQ7Ci0JCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9DVFJMLCBXb3JkKTsKLQotCQkJCS8qIHN3aXRjaCBJRUVFIGNvbXBhdGlibGUgcG93ZXIgZG93biBtb2RlIG9mZiAqLwotCQkJCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9DVFJMLCAmV29yZCk7Ci0JCQkJV29yZCAmPSB+UEhZX0NUX1BET1dOOwotCQkJCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfQ1RSTCwgV29yZCk7Ci0JCQlicmVhazsKLQotCQkJLyogZW5lcmd5IGRldGVjdCBhbmQgZW5lcmd5IGRldGVjdCBwbHVzIG1vZGUgKi8KLQkJCWNhc2UgUEhZX1BNX0VORVJHWV9ERVRFQ1Q6Ci0JCQljYXNlIFBIWV9QTV9FTkVSR1lfREVURUNUX1BMVVM6Ci0JCQkJLyoKLQkJCQkgKiAtIGVuYWJsZSBNQUMgMTI1IE1IeiBjbG9jawotCQkJCSAqLwotCQkJCVNrR21QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgJldvcmQpOwotCQkJCVdvcmQgJj0gflBIWV9NX1BDX0RJU18xMjVDTEs7Ci0JCQkJU2tHbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgV29yZCk7Ci0JCQkJCi0JCQkJLyogZGlzYWJsZSBlbmVyZ3kgZGV0ZWN0IG1vZGUgKi8KLQkJCQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsICZXb3JkKTsKLQkJCQlXb3JkICY9IH5QSFlfTV9QQ19FTl9ERVRfTVNLOwotCQkJCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgUEhZX01BUlZfUEhZX0NUUkwsIFdvcmQpOwotCi0JCQkJLyoKLQkJCQkgKiByZWluaXRpYWxpemUgdGhlIFBIWSB0byBmb3JjZSBhIHNvZnR3YXJlIHJlc2V0Ci0JCQkJICogd2hpY2ggaXMgbmVjZXNzYXJ5IGFmdGVyIHRoZSByZWdpc3RlciBzZXR0aW5ncwotCQkJCSAqIGZvciB0aGUgZW5lcmd5IGRldGVjdCBtb2Rlcy4KLQkJCQkgKiBGdXJ0aGVybW9yZSByZWluaXRpYWxpc2F0aW9uIHByZXZlbnRzIHRoYXQgdGhlCi0JCQkJICogUEhZIGlzIHJ1bm5pbmcgb3V0IG9mIGEgc3RhYmxlIHN0YXRlLgotCQkJCSAqLwotCQkJCVNrR21Jbml0UGh5TWFydihwQUMsIElvQywgUG9ydCwgU0tfRkFMU0UpOwotCQkJYnJlYWs7Ci0KLQkJCS8qIGRvbid0IGNoYW5nZSBjdXJyZW50IHBvd2VyIG1vZGUgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJcEFDLT5HSW5pLkdQW1BvcnRdLlBQaHlQb3dlclN0YXRlID0gTGFzdE1vZGU7Ci0JCQkJUmV0ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCS8qIGxvdyBwb3dlciBtb2RlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgKi8KLQllbHNlIHsKLQkJUmV0ID0gMTsKLQl9Ci0KLQlyZXR1cm4oUmV0KTsKLQotfQkvKiBTa0dtTGVhdmVMb3dQb3dlck1vZGUgKi8KLSNlbmRpZiAvKiAhU0tfU0xJTSAqLwotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKglTa0dtSW5pdFBoeU1hcnYoKSAtIEluaXRpYWxpemUgdGhlIE1hcnZlbGwgUGh5IHJlZ2lzdGVycwpAQCAtMzQyMCwxNDUgKzMxMTIsNiBAQAogfQkvKiBTa01hY0F1dG9OZWdEb25lICovCiAKIAotI2lmZGVmIEdFTkVTSVMKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa1htU2V0UnhUeEVuKCkgLSBTcGVjaWFsIFNldCBSeC9UeCBFbmFibGUgYW5kIHNvbWUgZmVhdHVyZXMgaW4gWE1BQwotICoKLSAqIERlc2NyaXB0aW9uOgotICogIHNldHMgTUFDIG9yIFBIWSBMb29wQmFjayBhbmQgRHVwbGV4IE1vZGUgaW4gdGhlIE1NVSBDb21tYW5kIFJlZy4KLSAqICBlbmFibGVzIFJ4L1R4Ci0gKgotICogUmV0dXJuczogTi9BCi0gKi8KLXN0YXRpYyB2b2lkIFNrWG1TZXRSeFR4RW4oCi1TS19BQwkqcEFDLAkJLyogQWRhcHRlciBDb250ZXh0ICovCi1TS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwotaW50CQlQb3J0LAkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwotaW50CQlQYXJhKQkJLyogUGFyYW1ldGVyIHRvIHNldDogTUFDIG9yIFBIWSBMb29wQmFjaywgRHVwbGV4IE1vZGUgKi8KLXsKLQlTS19VMTYJV29yZDsKLQotCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9NTVVfQ01ELCAmV29yZCk7Ci0KLQlzd2l0Y2ggKFBhcmEgJiAoU0tfTUFDX0xPT1BCX09OIHwgU0tfTUFDX0xPT1BCX09GRikpIHsKLQljYXNlIFNLX01BQ19MT09QQl9PTjoKLQkJV29yZCB8PSBYTV9NTVVfTUFDX0xCOwotCQlicmVhazsKLQljYXNlIFNLX01BQ19MT09QQl9PRkY6Ci0JCVdvcmQgJj0gflhNX01NVV9NQUNfTEI7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAoUGFyYSAmIChTS19QSFlfTE9PUEJfT04gfCBTS19QSFlfTE9PUEJfT0ZGKSkgewotCWNhc2UgU0tfUEhZX0xPT1BCX09OOgotCQlXb3JkIHw9IFhNX01NVV9HTUlJX0xPT1A7Ci0JCWJyZWFrOwotCWNhc2UgU0tfUEhZX0xPT1BCX09GRjoKLQkJV29yZCAmPSB+WE1fTU1VX0dNSUlfTE9PUDsKLQkJYnJlYWs7Ci0JfQotCQotCXN3aXRjaCAoUGFyYSAmIChTS19QSFlfRlVMTERfT04gfCBTS19QSFlfRlVMTERfT0ZGKSkgewotCWNhc2UgU0tfUEhZX0ZVTExEX09OOgotCQlXb3JkIHw9IFhNX01NVV9HTUlJX0ZEOwotCQlicmVhazsKLQljYXNlIFNLX1BIWV9GVUxMRF9PRkY6Ci0JCVdvcmQgJj0gflhNX01NVV9HTUlJX0ZEOwotCQlicmVhazsKLQl9Ci0JCi0JWE1fT1VUMTYoSW9DLCBQb3J0LCBYTV9NTVVfQ01ELCBXb3JkIHwgWE1fTU1VX0VOQV9SWCB8IFhNX01NVV9FTkFfVFgpOwotCi0JLyogZHVtbXkgcmVhZCB0byBlbnN1cmUgd3JpdGluZyAqLwotCVhNX0lOMTYoSW9DLCBQb3J0LCBYTV9NTVVfQ01ELCAmV29yZCk7Ci0KLX0JLyogU2tYbVNldFJ4VHhFbiAqLwotI2VuZGlmIC8qIEdFTkVTSVMgKi8KLQotCi0jaWZkZWYgWVVLT04KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKglTa0dtU2V0UnhUeEVuKCkgLSBTcGVjaWFsIFNldCBSeC9UeCBFbmFibGUgYW5kIHNvbWUgZmVhdHVyZXMgaW4gR01BQwotICoKLSAqIERlc2NyaXB0aW9uOgotICogIHNldHMgTUFDIExvb3BCYWNrIGFuZCBEdXBsZXggTW9kZSBpbiB0aGUgR2VuZXJhbCBQdXJwb3NlIENvbnRyb2wgUmVnLgotICogIGVuYWJsZXMgUngvVHgKLSAqCi0gKiBSZXR1cm5zOiBOL0EKLSAqLwotc3RhdGljIHZvaWQgU2tHbVNldFJ4VHhFbigKLVNLX0FDCSpwQUMsCQkvKiBBZGFwdGVyIENvbnRleHQgKi8KLVNLX0lPQwlJb0MsCQkvKiBJTyBjb250ZXh0ICovCi1pbnQJCVBvcnQsCQkvKiBQb3J0IEluZGV4IChNQUNfMSArIG4pICovCi1pbnQJCVBhcmEpCQkvKiBQYXJhbWV0ZXIgdG8gc2V0OiBNQUMgTG9vcEJhY2ssIER1cGxleCBNb2RlICovCi17Ci0JU0tfVTE2CUN0cmw7Ci0JCi0JR01fSU4xNihJb0MsIFBvcnQsIEdNX0dQX0NUUkwsICZDdHJsKTsKLQotCXN3aXRjaCAoUGFyYSAmIChTS19NQUNfTE9PUEJfT04gfCBTS19NQUNfTE9PUEJfT0ZGKSkgewotCWNhc2UgU0tfTUFDX0xPT1BCX09OOgotCQlDdHJsIHw9IEdNX0dQQ1JfTE9PUF9FTkE7Ci0JCWJyZWFrOwotCWNhc2UgU0tfTUFDX0xPT1BCX09GRjoKLQkJQ3RybCAmPSB+R01fR1BDUl9MT09QX0VOQTsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChQYXJhICYgKFNLX1BIWV9GVUxMRF9PTiB8IFNLX1BIWV9GVUxMRF9PRkYpKSB7Ci0JY2FzZSBTS19QSFlfRlVMTERfT046Ci0JCUN0cmwgfD0gR01fR1BDUl9EVVBfRlVMTDsKLQkJYnJlYWs7Ci0JY2FzZSBTS19QSFlfRlVMTERfT0ZGOgotCQlDdHJsICY9IH5HTV9HUENSX0RVUF9GVUxMOwotCQlicmVhazsKLQl9Ci0JCi0gICAgR01fT1VUMTYoSW9DLCBQb3J0LCBHTV9HUF9DVFJMLCAoU0tfVTE2KShDdHJsIHwgR01fR1BDUl9SWF9FTkEgfAotCQlHTV9HUENSX1RYX0VOQSkpOwotCi0JLyogZHVtbXkgcmVhZCB0byBlbnN1cmUgd3JpdGluZyAqLwotCUdNX0lOMTYoSW9DLCBQb3J0LCBHTV9HUF9DVFJMLCAmQ3RybCk7Ci0KLX0JLyogU2tHbVNldFJ4VHhFbiAqLwotI2VuZGlmIC8qIFlVS09OICovCi0KLQotI2lmbmRlZiBTS19TTElNCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJU2tNYWNTZXRSeFR4RW4oKSAtIFNwZWNpYWwgU2V0IFJ4L1R4IEVuYWJsZSBhbmQgcGFyYW1ldGVycwotICoKLSAqIERlc2NyaXB0aW9uOgljYWxscyB0aGUgU3BlY2lhbCBTZXQgUngvVHggRW5hYmxlIHJvdXRpbmVzIGRlcC4gb24gYm9hcmQgdHlwZQotICoKLSAqIFJldHVybnM6IE4vQQotICovCi12b2lkIFNrTWFjU2V0UnhUeEVuKAotU0tfQUMJKnBBQywJCS8qIEFkYXB0ZXIgQ29udGV4dCAqLwotU0tfSU9DCUlvQywJCS8qIElPIGNvbnRleHQgKi8KLWludAkJUG9ydCwJCS8qIFBvcnQgSW5kZXggKE1BQ18xICsgbikgKi8KLWludAkJUGFyYSkKLXsKLSNpZmRlZiBHRU5FU0lTCi0JaWYgKHBBQy0+R0luaS5HSUdlbmVzaXMpIHsKLQkJCi0JCVNrWG1TZXRSeFR4RW4ocEFDLCBJb0MsIFBvcnQsIFBhcmEpOwotCX0KLSNlbmRpZiAvKiBHRU5FU0lTICovCi0JCi0jaWZkZWYgWVVLT04KLQlpZiAocEFDLT5HSW5pLkdJWXVrb24pIHsKLQkJCi0JCVNrR21TZXRSeFR4RW4ocEFDLCBJb0MsIFBvcnQsIFBhcmEpOwotCX0KLSNlbmRpZiAvKiBZVUtPTiAqLwotCi19CS8qIFNrTWFjU2V0UnhUeEVuICovCi0jZW5kaWYgLyogIVNLX1NMSU0gKi8KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICoJU2tNYWNSeFR4RW5hYmxlKCkgLSBFbmFibGUgUngvVHggYWN0aXZpdHkgaWYgcG9ydCBpcyB1cApAQCAtMzk3Niw3ICszNTI5LDcgQEAKICAqIFJldHVybnM6CiAgKglub3RoaW5nCiAgKi8KLXZvaWQgU2tYbUlycSgKK3N0YXRpYyB2b2lkIFNrWG1JcnEoCiBTS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwogaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwpAQCAtNDExMiw3ICszNjY1LDcgQEAKICAqIFJldHVybnM6CiAgKglub3RoaW5nCiAgKi8KLXZvaWQgU2tHbUlycSgKK3N0YXRpYyB2b2lkIFNrR21JcnEoCiBTS19BQwkqcEFDLAkJLyogYWRhcHRlciBjb250ZXh0ICovCiBTS19JT0MJSW9DLAkJLyogSU8gY29udGV4dCAqLwogaW50CQlQb3J0KQkJLyogUG9ydCBJbmRleCAoTUFDXzEgKyBuKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9mcGx1c3RtLmMgYi9kcml2ZXJzL25ldC9za2ZwL2ZwbHVzdG0uYwppbmRleCBhMmVkNDdmLi4wNzg0ZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2ZwbHVzdG0uYworKysgYi9kcml2ZXJzL25ldC9za2ZwL2ZwbHVzdG0uYwpAQCAtODksMjEgKzg5LDIxIEBACiAvKgogICogdXNlZnVsIGludGVycnVwdCBiaXRzCiAgKi8KLXN0YXRpYyBpbnQgbWFjX2ltc2sxdSA9IEZNX1NUWEFCUlMgfCBGTV9TVFhBQlJBMCB8IEZNX1NYTVRBQlQgOwotc3RhdGljIGludCBtYWNfaW1zazFsID0gRk1fU1FMQ0tTIHwgRk1fU1FMQ0tBMCB8IEZNX1NQQ0VQRFMgfCBGTV9TUENFUERBMHwKK3N0YXRpYyBjb25zdCBpbnQgbWFjX2ltc2sxdSA9IEZNX1NUWEFCUlMgfCBGTV9TVFhBQlJBMCB8IEZNX1NYTVRBQlQgOworc3RhdGljIGNvbnN0IGludCBtYWNfaW1zazFsID0gRk1fU1FMQ0tTIHwgRk1fU1FMQ0tBMCB8IEZNX1NQQ0VQRFMgfCBGTV9TUENFUERBMHwKIAkJCUZNX1NUQlVSUyB8IEZNX1NUQlVSQTAgOwogCiAJLyogZGVsZXRlIEZNX1NSQkZMIGFmdGVyIHRlc3RzICovCi1zdGF0aWMgaW50IG1hY19pbXNrMnUgPSBGTV9TRVJSU0YgfCBGTV9TTkZTTEQgfCBGTV9TUkNWT1ZSIHwgRk1fU1JCRkwgfAorc3RhdGljIGNvbnN0IGludCBtYWNfaW1zazJ1ID0gRk1fU0VSUlNGIHwgRk1fU05GU0xEIHwgRk1fU1JDVk9WUiB8IEZNX1NSQkZMIHwKIAkJCUZNX1NNWUNMTSA7Ci1zdGF0aWMgaW50IG1hY19pbXNrMmwgPSBGTV9TVFJURVhSIHwgRk1fU0RVUENMTSB8IEZNX1NGUk1DVFIgfAorc3RhdGljIGNvbnN0IGludCBtYWNfaW1zazJsID0gRk1fU1RSVEVYUiB8IEZNX1NEVVBDTE0gfCBGTV9TRlJNQ1RSIHwKIAkJCUZNX1NFUlJDVFIgfCBGTV9TTFNUQ1RSIHwKIAkJCUZNX1NUUlRFWFAgfCBGTV9TTVVMVERBIHwgRk1fU1JOR09QIDsKIAotc3RhdGljIGludCBtYWNfaW1zazN1ID0gRk1fU1JDVk9WUjIgfCBGTV9TUkJGTDIgOwotc3RhdGljIGludCBtYWNfaW1zazNsID0gRk1fU1JQRVJSUTIgfCBGTV9TUlBFUlJRMSA7CitzdGF0aWMgY29uc3QgaW50IG1hY19pbXNrM3UgPSBGTV9TUkNWT1ZSMiB8IEZNX1NSQkZMMiA7CitzdGF0aWMgY29uc3QgaW50IG1hY19pbXNrM2wgPSBGTV9TUlBFUlJRMiB8IEZNX1NSUEVSUlExIDsKIAotc3RhdGljIGludCBtYWNfYmVhY29uX2ltc2sydSA9IEZNX1NPVFJCRUMgfCBGTV9TTVlCRUMgfCBGTV9TQkVDIHwKK3N0YXRpYyBjb25zdCBpbnQgbWFjX2JlYWNvbl9pbXNrMnUgPSBGTV9TT1RSQkVDIHwgRk1fU01ZQkVDIHwgRk1fU0JFQyB8CiAJCQlGTV9TTE9DTE0gfCBGTV9TSElDTE0gfCBGTV9TTVlDTE0gfCBGTV9TQ0xNIDsKIAogCkBAIC01NDksMTIgKzU0OSwxMiBAQAogc3RhdGljIHZvaWQgZW5hYmxlX2Zvcm1hYyhzdHJ1Y3Qgc19zbWMgKnNtYykKIHsKIAkvKiBzZXQgZm9ybWFjIElNU0sgOiAwIGVuYWJsZXMgaXJxICovCi0Jb3V0cHcoRk1fQShGTV9JTVNLMVUpLH5tYWNfaW1zazF1KSA7Ci0Jb3V0cHcoRk1fQShGTV9JTVNLMUwpLH5tYWNfaW1zazFsKSA7Ci0Jb3V0cHcoRk1fQShGTV9JTVNLMlUpLH5tYWNfaW1zazJ1KSA7Ci0Jb3V0cHcoRk1fQShGTV9JTVNLMkwpLH5tYWNfaW1zazJsKSA7Ci0Jb3V0cHcoRk1fQShGTV9JTVNLM1UpLH5tYWNfaW1zazN1KSA7Ci0Jb3V0cHcoRk1fQShGTV9JTVNLM0wpLH5tYWNfaW1zazNsKSA7CisJb3V0cHcoRk1fQShGTV9JTVNLMVUpLCh1bnNpZ25lZCBzaG9ydCl+bWFjX2ltc2sxdSk7CisJb3V0cHcoRk1fQShGTV9JTVNLMUwpLCh1bnNpZ25lZCBzaG9ydCl+bWFjX2ltc2sxbCk7CisJb3V0cHcoRk1fQShGTV9JTVNLMlUpLCh1bnNpZ25lZCBzaG9ydCl+bWFjX2ltc2sydSk7CisJb3V0cHcoRk1fQShGTV9JTVNLMkwpLCh1bnNpZ25lZCBzaG9ydCl+bWFjX2ltc2sybCk7CisJb3V0cHcoRk1fQShGTV9JTVNLM1UpLCh1bnNpZ25lZCBzaG9ydCl+bWFjX2ltc2szdSk7CisJb3V0cHcoRk1fQShGTV9JTVNLM0wpLCh1bnNpZ25lZCBzaG9ydCl+bWFjX2ltc2szbCk7CiB9CiAKICNpZiAwCS8qIFJlbW92ZWQgYmVjYXVzZSB0aGUgZHJpdmVyIHNob3VsZCB1c2UgdGhlIEFTSUNzIFRYIGNvbXBsZXRlIElSUS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMgYi9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCmluZGV4IGNkMGFhNGMuLjc0ZTEyOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAgKiBEbyB3ZSBuZWVkIHRoZSBFQlVGIGVycm9yIGR1cmluZyBzaWduYWxpbmcsIHRvbywgdG8gZGV0ZWN0IFNVUEVSTkVUXzMKICAqIFBMTCBidWc/CiAgKi8KLXN0YXRpYyBpbnQgcGxjX2ltc2tfbmEgPSBQTF9QQ01fQ09ERSB8IFBMX1RSQUNFX1BST1AgfCBQTF9QQ01fQlJFQUsgfAorc3RhdGljIGNvbnN0IGludCBwbGNfaW1za19uYSA9IFBMX1BDTV9DT0RFIHwgUExfVFJBQ0VfUFJPUCB8IFBMX1BDTV9CUkVBSyB8CiAJCQlQTF9QQ01fRU5BQkxFRCB8IFBMX1NFTEZfVEVTVCB8IFBMX0VCVUZfRVJSOwogI2Vsc2UJLyogU1VQRVJORVRfMyAqLwogLyoKQEAgLTE5NSw3ICsxOTUsNyBAQAogc3RhdGljIGludCBwbGNfaW1za19uYSA9IFBMX1BDTV9DT0RFIHwgUExfVFJBQ0VfUFJPUCB8IFBMX1BDTV9CUkVBSyB8CiAJCQlQTF9QQ01fRU5BQkxFRCB8IFBMX1NFTEZfVEVTVCA7CiAjZW5kaWYJLyogU1VQRVJORVRfMyAqLwotc3RhdGljIGludCBwbGNfaW1za19hY3QgPSBQTF9QQ01fQ09ERSB8IFBMX1RSQUNFX1BST1AgfCBQTF9QQ01fQlJFQUsgfAorc3RhdGljIGNvbnN0IGludCBwbGNfaW1za19hY3QgPSBQTF9QQ01fQ09ERSB8IFBMX1RSQUNFX1BST1AgfCBQTF9QQ01fQlJFQUsgfAogCQkJUExfUENNX0VOQUJMRUQgfCBQTF9TRUxGX1RFU1QgfCBQTF9FQlVGX0VSUjsKIAogLyogZXh0ZXJuYWwgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwppbmRleCA0YjVlZDJjLi5jN2ZiNjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKQEAgLTY3LDcgKzY3LDcgQEAKIC8qIGVhY2ggbmV3IHJlbGVhc2UhISEgKi8KICNkZWZpbmUgVkVSU0lPTgkJIjIuMDciCiAKLXN0YXRpYyBjb25zdCBjaGFyICpib290X21zZyA9IAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBib290X21zZyA9IAogCSJTeXNLb25uZWN0IEZEREkgUENJIEFkYXB0ZXIgZHJpdmVyIHYiIFZFUlNJT04gIiBmb3JcbiIKIAkiICBTSy01NXh4L1NLLTU4eHggYWRhcHRlcnMgKFNLLU5FVCBGRERJLUZQL1VQL0xQKSI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCA2N2ZiMTliLi4zNWRiZjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAic2tnZS5oIgogCiAjZGVmaW5lIERSVl9OQU1FCQkic2tnZSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS41IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiICIKIAogI2RlZmluZSBERUZBVUxUX1RYX1JJTkdfU0laRQkxMjgKQEAgLTEwNCw3ICsxMDQsNiBAQAogc3RhdGljIGNvbnN0IGludCByeHFhZGRyW10gPSB7IFFfUjEsIFFfUjIgfTsKIHN0YXRpYyBjb25zdCB1MzIgcnhpcnFtYXNrW10gPSB7IElTX1IxX0YsIElTX1IyX0YgfTsKIHN0YXRpYyBjb25zdCB1MzIgdHhpcnFtYXNrW10gPSB7IElTX1hBMV9GLCBJU19YQTJfRiB9Owotc3RhdGljIGNvbnN0IHUzMiBwb3J0aXJxbWFza1tdID0geyBJU19QT1JUXzEsIElTX1BPUlRfMiB9OwogCiBzdGF0aWMgaW50IHNrZ2VfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0zNTgsNyArMzU3LDcgQEAKIAlza2dlLT5uZXRfc3RhdHMucnhfYnl0ZXMgPSBkYXRhWzFdOwogCXNrZ2UtPm5ldF9zdGF0cy50eF9wYWNrZXRzID0gZGF0YVsyXSArIGRhdGFbNF0gKyBkYXRhWzZdOwogCXNrZ2UtPm5ldF9zdGF0cy5yeF9wYWNrZXRzID0gZGF0YVszXSArIGRhdGFbNV0gKyBkYXRhWzddOwotCXNrZ2UtPm5ldF9zdGF0cy5tdWx0aWNhc3QgPSBkYXRhWzVdICsgZGF0YVs3XTsKKwlza2dlLT5uZXRfc3RhdHMubXVsdGljYXN0ID0gZGF0YVszXSArIGRhdGFbNV07CiAJc2tnZS0+bmV0X3N0YXRzLmNvbGxpc2lvbnMgPSBkYXRhWzEwXTsKIAlza2dlLT5uZXRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSBkYXRhWzEyXTsKIApAQCAtNzI4LDE5ICs3MjcsMTggQEAKICAqIEFsbG9jYXRlIHJpbmcgZWxlbWVudHMgYW5kIGNoYWluIHRoZW0gdG9nZXRoZXIKICAqIE9uZS10by1vbmUgYXNzb2NpYXRpb24gb2YgYm9hcmQgZGVzY3JpcHRvcnMgd2l0aCByaW5nIGVsZW1lbnRzCiAgKi8KLXN0YXRpYyBpbnQgc2tnZV9yaW5nX2FsbG9jKHN0cnVjdCBza2dlX3JpbmcgKnJpbmcsIHZvaWQgKnZhZGRyLCB1NjQgYmFzZSkKK3N0YXRpYyBpbnQgc2tnZV9yaW5nX2FsbG9jKHN0cnVjdCBza2dlX3JpbmcgKnJpbmcsIHZvaWQgKnZhZGRyLCB1MzIgYmFzZSkKIHsKIAlzdHJ1Y3Qgc2tnZV90eF9kZXNjICpkOwogCXN0cnVjdCBza2dlX2VsZW1lbnQgKmU7CiAJaW50IGk7CiAKLQlyaW5nLT5zdGFydCA9IGttYWxsb2Moc2l6ZW9mKCplKSpyaW5nLT5jb3VudCwgR0ZQX0tFUk5FTCk7CisJcmluZy0+c3RhcnQgPSBrY2FsbG9jKHNpemVvZigqZSksIHJpbmctPmNvdW50LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJpbmctPnN0YXJ0KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaSA9IDAsIGUgPSByaW5nLT5zdGFydCwgZCA9IHZhZGRyOyBpIDwgcmluZy0+Y291bnQ7IGkrKywgZSsrLCBkKyspIHsKIAkJZS0+ZGVzYyA9IGQ7Ci0JCWUtPnNrYiA9IE5VTEw7CiAJCWlmIChpID09IHJpbmctPmNvdW50IC0gMSkgewogCQkJZS0+bmV4dCA9IHJpbmctPnN0YXJ0OwogCQkJZC0+bmV4dF9vZmZzZXQgPSBiYXNlOwpAQCAtNzgzLDcgKzc4MSw3IEBACiAgKiBOb3RlOiBETUEgYWRkcmVzcyBpcyBub3QgY2hhbmdlZCBieSBjaGlwLgogICogCSBNVFUgbm90IGNoYW5nZWQgd2hpbGUgcmVjZWl2ZXIgYWN0aXZlLgogICovCi1zdGF0aWMgdm9pZCBza2dlX3J4X3JldXNlKHN0cnVjdCBza2dlX2VsZW1lbnQgKmUsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGlubGluZSB2b2lkIHNrZ2VfcnhfcmV1c2Uoc3RydWN0IHNrZ2VfZWxlbWVudCAqZSwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJc3RydWN0IHNrZ2VfcnhfZGVzYyAqcmQgPSBlLT5kZXNjOwogCkBAIC04MzEsNyArODI5LDcgQEAKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihza2dlLT5yeF9idWZfc2l6ZSArIE5FVF9JUF9BTElHTik7CisJCXNrYiA9IGFsbG9jX3NrYihza2dlLT5yeF9idWZfc2l6ZSArIE5FVF9JUF9BTElHTiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTg0OSw4ICs4NDcsNyBAQAogCQkgICAgTEVEX0JMS19PRkZ8TEVEX1NZTkNfT0ZGfExFRF9PTik7CiAKIAluZXRpZl9jYXJyaWVyX29uKHNrZ2UtPm5ldGRldik7Ci0JaWYgKHNrZ2UtPnR4X2F2YWlsID4gTUFYX1NLQl9GUkFHUyArIDEpCi0JCW5ldGlmX3dha2VfcXVldWUoc2tnZS0+bmV0ZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKHNrZ2UtPm5ldGRldik7CiAKIAlpZiAobmV0aWZfbXNnX2xpbmsoc2tnZSkpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYCkBAIC04NzksMTMgKzg3NiwxMiBAQAogCWludCBpOwogCiAJeG1fd3JpdGUxNihodywgcG9ydCwgWE1fUEhZX0FERFIsIHJlZyB8IGh3LT5waHlfYWRkcik7Ci0JeG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9QSFlfREFUQSk7CisJKnZhbCA9IHhtX3JlYWQxNihodywgcG9ydCwgWE1fUEhZX0RBVEEpOwogCi0JLyogTmVlZCB0byB3YWl0IGZvciBleHRlcm5hbCBQSFkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgUEhZX1JFVFJJRVM7IGkrKykgewotCQl1ZGVsYXkoMSk7CiAJCWlmICh4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQpICYgWE1fTU1VX1BIWV9SRFkpCiAJCQlnb3RvIHJlYWR5OworCQl1ZGVsYXkoMSk7CiAJfQogCiAJcmV0dXJuIC1FVElNRURPVVQ7CkBAIC05MTgsNyArOTE0LDEyIEBACiAKICByZWFkeToKIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9QSFlfREFUQSwgdmFsKTsKLQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX1JFVFJJRVM7IGkrKykgeworCQlpZiAoISh4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQpICYgWE1fTU1VX1BIWV9CVVNZKSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMSk7CisJfQorCXJldHVybiAtRVRJTUVET1VUOwogfQogCiBzdGF0aWMgdm9pZCBnZW5lc2lzX2luaXQoc3RydWN0IHNrZ2VfaHcgKmh3KQpAQCAtMTE2OCwxMyArMTE2OSwxNyBAQAogCXUzMiByOwogCWNvbnN0IHU4IHplcm9bNl0gID0geyAwIH07CiAKLQkvKiBDbGVhciBNSUIgY291bnRlcnMgKi8KLQl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9TVEFUX0NNRCwKLQkJCVhNX1NDX0NMUl9SWEMgfCBYTV9TQ19DTFJfVFhDKTsKLQkvKiBDbGVhciB0d28gdGltZXMgYWNjb3JkaW5nIHRvIEVycmF0YSAjMyAqLwotCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX1NUQVRfQ01ELAotCQkJWE1fU0NfQ0xSX1JYQyB8IFhNX1NDX0NMUl9UWEMpOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXNrZ2Vfd3JpdGUxNihodywgU0tfUkVHKHBvcnQsIFRYX01GRl9DVFJMMSksCisJCQkgICAgIE1GRl9TRVRfTUFDX1JTVCk7CisJCWlmIChza2dlX3JlYWQxNihodywgU0tfUkVHKHBvcnQsIFRYX01GRl9DVFJMMSkpICYgTUZGX1NFVF9NQUNfUlNUKQorCQkJZ290byByZXNldF9vazsKKwkJdWRlbGF5KDEpOworCX0KIAorCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogZ2VuZXNpcyByZXNldCBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisKKyByZXNldF9vazoKIAkvKiBVbnJlc2V0IHRoZSBYTUFDLiAqLwogCXNrZ2Vfd3JpdGUxNihodywgU0tfUkVHKHBvcnQsIFRYX01GRl9DVFJMMSksIE1GRl9DTFJfTUFDX1JTVCk7CiAKQEAgLTExOTEsNyArMTE5Niw3IEBACiAJCXIgfD0gR1BfRElSXzJ8R1BfSU9fMjsKIAogCXNrZ2Vfd3JpdGUzMihodywgQjJfR1BfSU8sIHIpOwotCXNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7CisKIAogCS8qIEVuYWJsZSBHTUlJIGludGVyZmFjZSAqLwogCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX0hXX0NGRywgWE1fSFdfR01JSV9NRCk7CkBAIC0xMjA1LDYgKzEyMTAsMTMgQEAKIAlmb3IgKGkgPSAxOyBpIDwgMTY7IGkrKykKIAkJeG1fb3V0YWRkcihodywgcG9ydCwgWE1fRVhNKGkpLCB6ZXJvKTsKIAorCS8qIENsZWFyIE1JQiBjb3VudGVycyAqLworCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX1NUQVRfQ01ELAorCQkJWE1fU0NfQ0xSX1JYQyB8IFhNX1NDX0NMUl9UWEMpOworCS8qIENsZWFyIHR3byB0aW1lcyBhY2NvcmRpbmcgdG8gRXJyYXRhICMzICovCisJeG1fd3JpdGUxNihodywgcG9ydCwgWE1fU1RBVF9DTUQsCisJCQlYTV9TQ19DTFJfUlhDIHwgWE1fU0NfQ0xSX1RYQyk7CisKIAkvKiBjb25maWd1cmUgUnggSGlnaCBXYXRlciBNYXJrIChYTV9SWF9ISV9XTSkgKi8KIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9SWF9ISV9XTSwgMTQ1MCk7CiAKQEAgLTIxNDIsNyArMjE1NCw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZW5hYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOwogCiAJaWYgKGRldi0+bXR1ID4gUlhfQlVGX1NJWkUpCi0JCXNrZ2UtPnJ4X2J1Zl9zaXplID0gZGV2LT5tdHUgKyBFVEhfSExFTiArIE5FVF9JUF9BTElHTjsKKwkJc2tnZS0+cnhfYnVmX3NpemUgPSBkZXYtPm10dSArIEVUSF9ITEVOOwogCWVsc2UKIAkJc2tnZS0+cnhfYnVmX3NpemUgPSBSWF9CVUZfU0laRTsKIApAQCAtMjE1NCwyNSArMjE2NiwyOSBAQAogCWlmICghc2tnZS0+bWVtKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCUJVR19PTihza2dlLT5kbWEgJiA3KTsKKworCWlmICgodTY0KXNrZ2UtPmRtYSA+PiAzMiAhPSAoKHU2NCkgc2tnZS0+ZG1hICsgc2tnZS0+bWVtX3NpemUpID4+IDMyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggInBjaV9hbGxvY19jb25zaXN0ZW50IHJlZ2lvbiBjcm9zc2VzIDRHIGJvdW5kYXJ5XG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmcmVlX3BjaV9tZW07CisJfQorCiAJbWVtc2V0KHNrZ2UtPm1lbSwgMCwgc2tnZS0+bWVtX3NpemUpOwogCi0JaWYgKChlcnIgPSBza2dlX3JpbmdfYWxsb2MoJnNrZ2UtPnJ4X3JpbmcsIHNrZ2UtPm1lbSwgc2tnZS0+ZG1hKSkpCisJZXJyID0gc2tnZV9yaW5nX2FsbG9jKCZza2dlLT5yeF9yaW5nLCBza2dlLT5tZW0sIHNrZ2UtPmRtYSk7CisJaWYgKGVycikKIAkJZ290byBmcmVlX3BjaV9tZW07CiAKIAllcnIgPSBza2dlX3J4X2ZpbGwoc2tnZSk7CiAJaWYgKGVycikKIAkJZ290byBmcmVlX3J4X3Jpbmc7CiAKLQlpZiAoKGVyciA9IHNrZ2VfcmluZ19hbGxvYygmc2tnZS0+dHhfcmluZywgc2tnZS0+bWVtICsgcnhfc2l6ZSwKLQkJCQkgICBza2dlLT5kbWEgKyByeF9zaXplKSkpCisJZXJyID0gc2tnZV9yaW5nX2FsbG9jKCZza2dlLT50eF9yaW5nLCBza2dlLT5tZW0gKyByeF9zaXplLAorCQkJICAgICAgc2tnZS0+ZG1hICsgcnhfc2l6ZSk7CisJaWYgKGVycikKIAkJZ290byBmcmVlX3J4X3Jpbmc7CiAKLQlza2dlLT50eF9hdmFpbCA9IHNrZ2UtPnR4X3JpbmcuY291bnQgLSAxOwotCi0JLyogRW5hYmxlIElSUSBmcm9tIHBvcnQgKi8KLQlody0+aW50cl9tYXNrIHw9IHBvcnRpcnFtYXNrW3BvcnRdOwotCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7Ci0KIAkvKiBJbml0aWFsaXplIE1BQyAqLwogCXNwaW5fbG9ja19iaCgmaHctPnBoeV9sb2NrKTsKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQpAQCAtMjIyOSw5ICsyMjQ1LDYgQEAKIAllbHNlCiAJCXl1a29uX3N0b3Aoc2tnZSk7CiAKLQlody0+aW50cl9tYXNrICY9IH5wb3J0aXJxbWFza1tza2dlLT5wb3J0XTsKLQlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOwotCiAJLyogU3RvcCB0cmFuc21pdHRlciAqLwogCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIodHhxYWRkcltwb3J0XSwgUV9DU1IpLCBDU1JfU1RPUCk7CiAJc2tnZV93cml0ZTMyKGh3LCBSQl9BRERSKHR4cWFkZHJbcG9ydF0sIFJCX0NUUkwpLApAQCAtMjI3OCw2ICsyMjkxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNrZ2VfYXZhaWwoY29uc3Qgc3RydWN0IHNrZ2VfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gKChyaW5nLT50b19jbGVhbiA+IHJpbmctPnRvX3VzZSkgPyAwIDogcmluZy0+Y291bnQpCisJCSsgKHJpbmctPnRvX2NsZWFuIC0gcmluZy0+dG9fdXNlKSAtIDE7Cit9CisKIHN0YXRpYyBpbnQgc2tnZV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yMjg4LDI3ICsyMzA3LDI0IEBACiAJaW50IGk7CiAJdTMyIGNvbnRyb2wsIGxlbjsKIAl1NjQgbWFwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlza2IgPSBza2JfcGFkdG8oc2tiLCBFVEhfWkxFTik7CiAJaWYgKCFza2IpCiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaWYgKCFzcGluX3RyeWxvY2soJnNrZ2UtPnR4X2xvY2spKSB7Ci0gCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KLSAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLSAJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwotIAl9CisJCS8qIENvbGxpc2lvbiAtIHRlbGwgdXBwZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLworCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKKwl9CiAKLQlpZiAodW5saWtlbHkoc2tnZS0+dHhfYXZhaWwgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsxKSkgeworCWlmICh1bmxpa2VseShza2dlX2F2YWlsKCZza2dlLT50eF9yaW5nKSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkgewogCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNrZ2UtPnR4X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2soJnNrZ2UtPnR4X2xvY2spOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC0yMzc3LDQ5ICsyMzkzLDUxIEBACiAJCSAgICAgICBkZXYtPm5hbWUsIGUgLSByaW5nLT5zdGFydCwgc2tiLT5sZW4pOwogCiAJcmluZy0+dG9fdXNlID0gZS0+bmV4dDsKLQlza2dlLT50eF9hdmFpbCAtPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKLQlpZiAoc2tnZS0+dHhfYXZhaWwgPD0gTUFYX1NLQl9GUkFHUyArIDEpIHsKKwlpZiAoc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPD0gTUFYX1NLQl9GUkFHUyArIDEpIHsKIAkJcHJfZGVidWcoIiVzOiB0cmFuc21pdCBxdWV1ZSBmdWxsXG4iLCBkZXYtPm5hbWUpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJfQogCisJbW1pb3diKCk7CisJc3Bpbl91bmxvY2soJnNrZ2UtPnR4X2xvY2spOworCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2tnZS0+dHhfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNrZ2VfdHhfZnJlZShzdHJ1Y3Qgc2tnZV9odyAqaHcsIHN0cnVjdCBza2dlX2VsZW1lbnQgKmUpCitzdGF0aWMgdm9pZCBza2dlX3R4X2NvbXBsZXRlKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UsIHN0cnVjdCBza2dlX2VsZW1lbnQgKmxhc3QpCiB7Ci0JLyogVGhpcyByaW5nIGVsZW1lbnQgY2FuIGJlIHNrYiBvciBmcmFnbWVudCAqLwotCWlmIChlLT5za2IpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShody0+cGRldiwKLQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcihlLCBtYXBhZGRyKSwKLQkJCSAgICAgICBwY2lfdW5tYXBfbGVuKGUsIG1hcGxlbiksCi0JCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWRldl9rZnJlZV9za2JfYW55KGUtPnNrYik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBza2dlLT5ody0+cGRldjsKKwlzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplOworCisJZm9yIChlID0gc2tnZS0+dHhfcmluZy50b19jbGVhbjsgZSAhPSBsYXN0OyBlID0gZS0+bmV4dCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZS0+c2tiOworCQlpbnQgaTsKKwogCQllLT5za2IgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXBjaV91bm1hcF9wYWdlKGh3LT5wZGV2LAotCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKGUsIG1hcGFkZHIpLAotCQkJICAgICAgIHBjaV91bm1hcF9sZW4oZSwgbWFwbGVuKSwKLQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBwY2lfdW5tYXBfYWRkcihlLCBtYXBhZGRyKSwKKwkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCQkJZSA9IGUtPm5leHQ7CisJCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBwY2lfdW5tYXBfYWRkcihlLCBtYXBhZGRyKSwKKwkJCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplLAorCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJfQorCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CisJc2tnZS0+dHhfcmluZy50b19jbGVhbiA9IGU7CiB9CiAKIHN0YXRpYyB2b2lkIHNrZ2VfdHhfY2xlYW4oc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSkKIHsKLQlzdHJ1Y3Qgc2tnZV9yaW5nICpyaW5nID0gJnNrZ2UtPnR4X3Jpbmc7Ci0Jc3RydWN0IHNrZ2VfZWxlbWVudCAqZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNrZ2UtPnR4X2xvY2ssIGZsYWdzKTsKLQlmb3IgKGUgPSByaW5nLT50b19jbGVhbjsgZSAhPSByaW5nLT50b191c2U7IGUgPSBlLT5uZXh0KSB7Ci0JCSsrc2tnZS0+dHhfYXZhaWw7Ci0JCXNrZ2VfdHhfZnJlZShza2dlLT5odywgZSk7Ci0JfQotCXJpbmctPnRvX2NsZWFuID0gZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza2dlLT50eF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2JoKCZza2dlLT50eF9sb2NrKTsKKwlza2dlX3R4X2NvbXBsZXRlKHNrZ2UsIHNrZ2UtPnR4X3JpbmcudG9fdXNlKTsKKwluZXRpZl93YWtlX3F1ZXVlKHNrZ2UtPm5ldGRldik7CisJc3Bpbl91bmxvY2tfYmgoJnNrZ2UtPnR4X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBza2dlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI1NzgsNyArMjU5Niw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAlpZiAobGVuIDwgUlhfQ09QWV9USFJFU0hPTEQpIHsKLQkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyAyKTsKKwkJc2tiID0gYWxsb2Nfc2tiKGxlbiArIDIsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXNrYikKIAkJCWdvdG8gcmVzdWJtaXQ7CiAKQEAgLTI1OTMsMTAgKzI2MTEsMTEgQEAKIAkJc2tnZV9yeF9yZXVzZShlLCBza2dlLT5yeF9idWZfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2I7Ci0JCW5za2IgPSBkZXZfYWxsb2Nfc2tiKHNrZ2UtPnJ4X2J1Zl9zaXplICsgTkVUX0lQX0FMSUdOKTsKKwkJbnNrYiA9IGFsbG9jX3NrYihza2dlLT5yeF9idWZfc2l6ZSArIE5FVF9JUF9BTElHTiwgR0ZQX0FUT01JQyk7CiAJCWlmICghbnNrYikKIAkJCWdvdG8gcmVzdWJtaXQ7CiAKKwkJc2tiX3Jlc2VydmUobnNrYiwgTkVUX0lQX0FMSUdOKTsKIAkJcGNpX3VubWFwX3NpbmdsZShza2dlLT5ody0+cGRldiwKIAkJCQkgcGNpX3VubWFwX2FkZHIoZSwgbWFwYWRkciksCiAJCQkJIHBjaV91bm1hcF9sZW4oZSwgbWFwbGVuKSwKQEAgLTI2NDQsNiArMjY2MywzNiBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBza2dlX3R4X2RvbmUoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSkKK3sKKwlzdHJ1Y3Qgc2tnZV9yaW5nICpyaW5nID0gJnNrZ2UtPnR4X3Jpbmc7CisJc3RydWN0IHNrZ2VfZWxlbWVudCAqZSwgKmxhc3Q7CisKKwlzcGluX2xvY2soJnNrZ2UtPnR4X2xvY2spOworCWxhc3QgPSByaW5nLT50b19jbGVhbjsKKwlmb3IgKGUgPSByaW5nLT50b19jbGVhbjsgZSAhPSByaW5nLT50b191c2U7IGUgPSBlLT5uZXh0KSB7CisJCXN0cnVjdCBza2dlX3R4X2Rlc2MgKnRkID0gZS0+ZGVzYzsKKworCQlpZiAodGQtPmNvbnRyb2wgJiBCTVVfT1dOKQorCQkJYnJlYWs7CisKKwkJaWYgKHRkLT5jb250cm9sICYgQk1VX0VPRikgeworCQkJbGFzdCA9IGUtPm5leHQ7CisJCQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X2RvbmUoc2tnZSkpKQorCQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHR4IGRvbmUgc2xvdCAldGRcbiIsCisJCQkJICAgICAgIHNrZ2UtPm5ldGRldi0+bmFtZSwgZSAtIHJpbmctPnN0YXJ0KTsKKwkJfQorCX0KKworCXNrZ2VfdHhfY29tcGxldGUoc2tnZSwgbGFzdCk7CisKKwlza2dlX3dyaXRlOChza2dlLT5odywgUV9BRERSKHR4cWFkZHJbc2tnZS0+cG9ydF0sIFFfQ1NSKSwgQ1NSX0lSUV9DTF9GKTsKKworCWlmIChza2dlX2F2YWlsKCZza2dlLT50eF9yaW5nKSA+IE1BWF9TS0JfRlJBR1MgKyAxKQorCQluZXRpZl93YWtlX3F1ZXVlKHNrZ2UtPm5ldGRldik7CisKKwlzcGluX3VubG9jaygmc2tnZS0+dHhfbG9jayk7Cit9CiAKIHN0YXRpYyBpbnQgc2tnZV9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQogewpAQCAtMjY1MSw4ICsyNzAwLDEwIEBACiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CiAJc3RydWN0IHNrZ2VfcmluZyAqcmluZyA9ICZza2dlLT5yeF9yaW5nOwogCXN0cnVjdCBza2dlX2VsZW1lbnQgKmU7Ci0JdW5zaWduZWQgaW50IHRvX2RvID0gbWluKGRldi0+cXVvdGEsICpidWRnZXQpOwotCXVuc2lnbmVkIGludCB3b3JrX2RvbmUgPSAwOworCWludCB0b19kbyA9IG1pbihkZXYtPnF1b3RhLCAqYnVkZ2V0KTsKKwlpbnQgd29ya19kb25lID0gMDsKKworCXNrZ2VfdHhfZG9uZShza2dlKTsKIAogCWZvciAoZSA9IHJpbmctPnRvX2NsZWFuOyBwcmVmZXRjaChlLT5uZXh0KSwgd29ya19kb25lIDwgdG9fZG87IGUgPSBlLT5uZXh0KSB7CiAJCXN0cnVjdCBza2dlX3J4X2Rlc2MgKnJkID0gZS0+ZGVzYzsKQEAgLTI2NjQsMjIgKzI3MTUsMjAgQEAKIAkJaWYgKGNvbnRyb2wgJiBCTVVfT1dOKQogCQkJYnJlYWs7CiAKLSAJCXNrYiA9IHNrZ2VfcnhfZ2V0KHNrZ2UsIGUsIGNvbnRyb2wsIHJkLT5zdGF0dXMsCi0gCQkJCSAgbGUxNl90b19jcHUocmQtPmNzdW0yKSk7CisJCXNrYiA9IHNrZ2VfcnhfZ2V0KHNrZ2UsIGUsIGNvbnRyb2wsIHJkLT5zdGF0dXMsCisJCQkJICBsZTE2X3RvX2NwdShyZC0+Y3N1bTIpKTsKIAkJaWYgKGxpa2VseShza2IpKSB7CiAJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAogCQkJKyt3b3JrX2RvbmU7Ci0JCX0gZWxzZQotCQkJc2tnZV9yeF9yZXVzZShlLCBza2dlLT5yeF9idWZfc2l6ZSk7CisJCX0KIAl9CiAJcmluZy0+dG9fY2xlYW4gPSBlOwogCiAJLyogcmVzdGFydCByZWNlaXZlciAqLwogCXdtYigpOwotCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIocnhxYWRkcltza2dlLT5wb3J0XSwgUV9DU1IpLAotCQkgICAgQ1NSX1NUQVJUIHwgQ1NSX0lSUV9DTF9GKTsKKwlza2dlX3dyaXRlOChodywgUV9BRERSKHJ4cWFkZHJbc2tnZS0+cG9ydF0sIFFfQ1NSKSwgQ1NSX1NUQVJUKTsKIAogCSpidWRnZXQgLT0gd29ya19kb25lOwogCWRldi0+cXVvdGEgLT0gd29ya19kb25lOwpAQCAtMjY4OCw0NyArMjczNywxNCBAQAogCQlyZXR1cm4gMTsgLyogbm90IGRvbmUgKi8KIAogCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7Ci0JaHctPmludHJfbWFzayB8PSBwb3J0aXJxbWFza1tza2dlLT5wb3J0XTsKLQlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOwotCXNrZ2VfcmVhZDMyKGh3LCBCMF9JTVNLKTsKKwltbWlvd2IoKTsKKworICAJaHctPmludHJfbWFzayB8PSBza2dlLT5wb3J0ID09IDAgPyAoSVNfUjFfRnxJU19YQTFfRikgOiAoSVNfUjJfRnxJU19YQTJfRik7CisgIAlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBza2dlX3R4X2ludHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKLQlzdHJ1Y3Qgc2tnZV9yaW5nICpyaW5nID0gJnNrZ2UtPnR4X3Jpbmc7Ci0Jc3RydWN0IHNrZ2VfZWxlbWVudCAqZTsKLQotCXNwaW5fbG9jaygmc2tnZS0+dHhfbG9jayk7Ci0JZm9yIChlID0gcmluZy0+dG9fY2xlYW47IHByZWZldGNoKGUtPm5leHQpLCBlICE9IHJpbmctPnRvX3VzZTsgZSA9IGUtPm5leHQpIHsKLQkJc3RydWN0IHNrZ2VfdHhfZGVzYyAqdGQgPSBlLT5kZXNjOwotCQl1MzIgY29udHJvbDsKLQotCQlybWIoKTsKLQkJY29udHJvbCA9IHRkLT5jb250cm9sOwotCQlpZiAoY29udHJvbCAmIEJNVV9PV04pCi0JCQlicmVhazsKLQotCQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X2RvbmUoc2tnZSkpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogdHggZG9uZSBzbG90ICV0ZCBzdGF0dXMgMHgleFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGUgLSByaW5nLT5zdGFydCwgdGQtPnN0YXR1cyk7Ci0KLQkJc2tnZV90eF9mcmVlKGh3LCBlKTsKLQkJZS0+c2tiID0gTlVMTDsKLQkJKytza2dlLT50eF9hdmFpbDsKLQl9Ci0JcmluZy0+dG9fY2xlYW4gPSBlOwotCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIodHhxYWRkcltza2dlLT5wb3J0XSwgUV9DU1IpLCBDU1JfSVJRX0NMX0YpOwotCi0JaWYgKHNrZ2UtPnR4X2F2YWlsID4gTUFYX1NLQl9GUkFHUyArIDEpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQotCXNwaW5fdW5sb2NrKCZza2dlLT50eF9sb2NrKTsKLX0KLQogLyogUGFyaXR5IGVycm9ycyBzZWVtIHRvIGhhcHBlbiB3aGVuIEdlbmVzaXMgaXMgY29ubmVjdGVkIHRvIGEgc3dpdGNoCiAgKiB3aXRoIG5vIG90aGVyIHBvcnRzIHByZXNlbnQuIEhlYXJ0YmVhdCBlcnJvcj8/CiAgKi8KQEAgLTI3NTEsMTcgKzI3NjcsNiBAQAogCQkJICAgID8gR01GX0NMSV9UWF9GQyA6IEdNRl9DTElfVFhfUEUpOwogfQogCi1zdGF0aWMgdm9pZCBza2dlX3BjaV9jbGVhcihzdHJ1Y3Qgc2tnZV9odyAqaHcpCi17Ci0JdTE2IHN0YXR1czsKLQotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfU1RBVFVTLCAmc3RhdHVzKTsKLQlza2dlX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09OKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaHctPnBkZXYsIFBDSV9TVEFUVVMsCi0JCQkgICAgICBzdGF0dXMgfCBQQ0lfU1RBVFVTX0VSUk9SX0JJVFMpOwotCXNrZ2Vfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT0ZGKTsKLX0KLQogc3RhdGljIHZvaWQgc2tnZV9tYWNfaW50cihzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0KQogewogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCkBAIC0yODAzLDIzICsyODA4LDM5IEBACiAJaWYgKGh3c3RhdHVzICYgSVNfTTJfUEFSX0VSUikKIAkJc2tnZV9tYWNfcGFyaXR5KGh3LCAxKTsKIAotCWlmIChod3N0YXR1cyAmIElTX1IxX1BBUl9FUlIpCisJaWYgKGh3c3RhdHVzICYgSVNfUjFfUEFSX0VSUikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcmVjZWl2ZSBxdWV1ZSBwYXJpdHkgZXJyb3JcbiIsCisJCSAgICAgICBody0+ZGV2WzBdLT5uYW1lKTsKIAkJc2tnZV93cml0ZTMyKGh3LCBCMF9SMV9DU1IsIENTUl9JUlFfQ0xfUCk7CisJfQogCi0JaWYgKGh3c3RhdHVzICYgSVNfUjJfUEFSX0VSUikKKwlpZiAoaHdzdGF0dXMgJiBJU19SMl9QQVJfRVJSKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByZWNlaXZlIHF1ZXVlIHBhcml0eSBlcnJvclxuIiwKKwkJICAgICAgIGh3LT5kZXZbMV0tPm5hbWUpOwogCQlza2dlX3dyaXRlMzIoaHcsIEIwX1IyX0NTUiwgQ1NSX0lSUV9DTF9QKTsKKwl9CiAKIAlpZiAoaHdzdGF0dXMgJiAoSVNfSVJRX01TVF9FUlJ8SVNfSVJRX1NUQVQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImhhcmR3YXJlIGVycm9yIGRldGVjdGVkIChzdGF0dXMgMHgleClcbiIsCi0JCSAgICAgICBod3N0YXR1cyk7CisJCXUxNiBwY2lfc3RhdHVzLCBwY2lfY21kOwogCi0JCXNrZ2VfcGNpX2NsZWFyKGh3KTsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoaHctPnBkZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfU1RBVFVTLCAmcGNpX3N0YXR1cyk7CisKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFBDSSBlcnJvciBjbWQ9JSN4IHN0YXR1cz0lI3hcbiIsCisJCQkgICAgICAgcGNpX25hbWUoaHctPnBkZXYpLCBwY2lfY21kLCBwY2lfc3RhdHVzKTsKKworCQkvKiBXcml0ZSB0aGUgZXJyb3IgYml0cyBiYWNrIHRvIGNsZWFyIHRoZW0uICovCisJCXBjaV9zdGF0dXMgJj0gUENJX1NUQVRVU19FUlJPUl9CSVRTOworCQlza2dlX3dyaXRlOChodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09OKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfQ09NTUFORCwKKwkJCQkgICAgICBwY2lfY21kIHwgUENJX0NPTU1BTkRfU0VSUiB8IFBDSV9DT01NQU5EX1BBUklUWSk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChody0+cGRldiwgUENJX1NUQVRVUywgcGNpX3N0YXR1cyk7CisJCXNrZ2Vfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT0ZGKTsKIAogCQkvKiBpZiBlcnJvciBzdGlsbCBzZXQgdGhlbiBqdXN0IGlnbm9yZSBpdCAqLwogCQlod3N0YXR1cyA9IHNrZ2VfcmVhZDMyKGh3LCBCMF9IV0VfSVNSQyk7CiAJCWlmIChod3N0YXR1cyAmIElTX0lSUV9TVEFUKSB7Ci0JCQlwcl9kZWJ1ZygiSVJRIHN0YXR1cyAleDogc3RpbGwgc2V0IGlnbm9yaW5nIGhhcmR3YXJlIGVycm9yc1xuIiwKLQkJCSAgICAgICBod3N0YXR1cyk7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAidW5hYmxlIHRvIGNsZWFyIGVycm9yIChzbyBpZ25vcmluZyB0aGVtKVxuIik7CiAJCQlody0+aW50cl9tYXNrICY9IH5JU19IV19FUlI7CiAJCX0KIAl9CkBAIC0yODM2LDEyICsyODU3LDExIEBACiAJaW50IHBvcnQ7CiAKIAlzcGluX2xvY2soJmh3LT5waHlfbG9jayk7Ci0JZm9yIChwb3J0ID0gMDsgcG9ydCA8IDI7IHBvcnQrKykgeworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBody0+cG9ydHM7IHBvcnQrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltwb3J0XTsKKwkJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJaWYgKGRldiAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCWlmIChody0+Y2hpcF9pZCAhPSBDSElQX0lEX0dFTkVTSVMpCiAJCQkJeXVrb25fcGh5X2ludHIoc2tnZSk7CiAJCQllbHNlCkBAIC0yODUwLDQ0ICsyODcwLDM5IEBACiAJfQogCXNwaW5fdW5sb2NrKCZody0+cGh5X2xvY2spOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlody0+aW50cl9tYXNrIHw9IElTX0VYVF9SRUc7CiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBza2dlX3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcHJlZmV0Y2goc2tnZS0+cnhfcmluZy50b19jbGVhbik7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHNrZ2VfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBza2dlX2h3ICpodyA9IGRldl9pZDsKLQl1MzIgc3RhdHVzID0gc2tnZV9yZWFkMzIoaHcsIEIwX1NQX0lTUkMpOworCXUzMiBzdGF0dXM7CiAKLQlpZiAoc3RhdHVzID09IDAgfHwgc3RhdHVzID09IH4wKSAvKiBob3RwbHVnIG9yIHNoYXJlZCBpcnEgKi8KKwkvKiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgbWFza3MgSVJRICovCisJc3RhdHVzID0gc2tnZV9yZWFkMzIoaHcsIEIwX1NQX0lTUkMpOworCWlmIChzdGF0dXMgPT0gMCkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0Jc3RhdHVzICY9IGh3LT5pbnRyX21hc2s7Ci0JaWYgKHN0YXR1cyAmIElTX1IxX0YpIHsKLQkJaHctPmludHJfbWFzayAmPSB+SVNfUjFfRjsKLQkJc2tnZV93YWtldXAoaHctPmRldlswXSk7CisJaWYgKHN0YXR1cyAmIElTX0VYVF9SRUcpIHsKKwkJaHctPmludHJfbWFzayAmPSB+SVNfRVhUX1JFRzsKKwkJdGFza2xldF9zY2hlZHVsZSgmaHctPmV4dF90YXNrbGV0KTsKIAl9CiAKLQlpZiAoc3RhdHVzICYgSVNfUjJfRikgewotCQlody0+aW50cl9tYXNrICY9IH5JU19SMl9GOwotCQlza2dlX3dha2V1cChody0+ZGV2WzFdKTsKKwlpZiAoc3RhdHVzICYgKElTX1IxX0Z8SVNfWEExX0YpKSB7CisJCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIoUV9SMSwgUV9DU1IpLCBDU1JfSVJRX0NMX0YpOworCQlody0+aW50cl9tYXNrICY9IH4oSVNfUjFfRnxJU19YQTFfRik7CisJCW5ldGlmX3J4X3NjaGVkdWxlKGh3LT5kZXZbMF0pOwogCX0KIAotCWlmIChzdGF0dXMgJiBJU19YQTFfRikKLQkJc2tnZV90eF9pbnRyKGh3LT5kZXZbMF0pOworCWlmIChzdGF0dXMgJiAoSVNfUjJfRnxJU19YQTJfRikpIHsKKwkJc2tnZV93cml0ZTgoaHcsIFFfQUREUihRX1IyLCBRX0NTUiksIENTUl9JUlFfQ0xfRik7CisJCWh3LT5pbnRyX21hc2sgJj0gfihJU19SMl9GfElTX1hBMl9GKTsKKwkJbmV0aWZfcnhfc2NoZWR1bGUoaHctPmRldlsxXSk7CisJfQogCi0JaWYgKHN0YXR1cyAmIElTX1hBMl9GKQotCQlza2dlX3R4X2ludHIoaHctPmRldlsxXSk7CisJaWYgKGxpa2VseSgoc3RhdHVzICYgaHctPmludHJfbWFzaykgPT0gMCkpCisJCXJldHVybiBJUlFfSEFORExFRDsKIAogCWlmIChzdGF0dXMgJiBJU19QQV9UT19SWDEpIHsKIAkJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGh3LT5kZXZbMF0pOwpAQCAtMjkxNiwxMSArMjkzMSw2IEBACiAJaWYgKHN0YXR1cyAmIElTX0hXX0VSUikKIAkJc2tnZV9lcnJvcl9pcnEoaHcpOwogCi0JaWYgKHN0YXR1cyAmIElTX0VYVF9SRUcpIHsKLQkJaHctPmludHJfbWFzayAmPSB+SVNfRVhUX1JFRzsKLQkJdGFza2xldF9zY2hlZHVsZSgmaHctPmV4dF90YXNrbGV0KTsKLQl9Ci0KIAlza2dlX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMjk5Niw3ICszMDA2LDcgQEAKIHN0YXRpYyBpbnQgc2tnZV9yZXNldChzdHJ1Y3Qgc2tnZV9odyAqaHcpCiB7CiAJdTMyIHJlZzsKLQl1MTYgY3RzdDsKKwl1MTYgY3RzdCwgcGNpX3N0YXR1czsKIAl1OCB0OCwgbWFjX2NmZywgcG1kX3R5cGUsIHBoeV90eXBlOwogCWludCBpOwogCkBAIC0zMDA3LDggKzMwMTcsMTMgQEAKIAlza2dlX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfUlNUX0NMUik7CiAKIAkvKiBjbGVhciBQQ0kgZXJyb3JzLCBpZiBhbnkgKi8KLQlza2dlX3BjaV9jbGVhcihodyk7CisJc2tnZV93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7CisJc2tnZV93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMiwgMCk7CiAKKwlwY2lfcmVhZF9jb25maWdfd29yZChody0+cGRldiwgUENJX1NUQVRVUywgJnBjaV9zdGF0dXMpOworCXBjaV93cml0ZV9jb25maWdfd29yZChody0+cGRldiwgUENJX1NUQVRVUywKKwkJCSAgICAgIHBjaV9zdGF0dXMgfCBQQ0lfU1RBVFVTX0VSUk9SX0JJVFMpOworCXNrZ2Vfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT0ZGKTsKIAlza2dlX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfTVJTVF9DTFIpOwogCiAJLyogcmVzdG9yZSBDTEtfUlVOIGJpdHMgKGZvciBZdWtvbi1MaXRlKSAqLwpAQCAtMzA2Nyw3ICszMDgyLDEwIEBACiAJZWxzZQogCQlody0+cmFtX3NpemUgPSB0OCAqIDQwOTY7CiAKLQlody0+aW50cl9tYXNrID0gSVNfSFdfRVJSIHwgSVNfRVhUX1JFRzsKKwlody0+aW50cl9tYXNrID0gSVNfSFdfRVJSIHwgSVNfRVhUX1JFRyB8IElTX1BPUlRfMTsKKwlpZiAoaHctPnBvcnRzID4gMSkKKwkJaHctPmludHJfbWFzayB8PSBJU19QT1JUXzI7CisKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQogCQlnZW5lc2lzX2luaXQoaHcpOwogCWVsc2UgewpAQCAtMzIzNywxMyArMzI1NSwxNSBAQAogCXN0cnVjdCBza2dlX2h3ICpodzsKIAlpbnQgZXJyLCB1c2luZ19kYWMgPSAwOwogCi0JaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIGNhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSkpKSB7CisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CisJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CkBAIC0zMjUxLDIyICszMjcxLDE4IEBACiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAotCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSAmJgotCSAgICAhKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSkgeworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykpIHsKIAkJdXNpbmdfZGFjID0gMTsKIAkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIHVuYWJsZSB0byBvYnRhaW4gNjQgYml0IERNQSAiCi0JCQkgICAgICAgImZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iLCBwY2lfbmFtZShwZGV2KSk7Ci0JCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOwotCQl9Ci0JfSBlbHNlIHsKLQkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIG5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIiwKLQkJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7Ci0JCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOwotCQl9CisJfSBlbHNlIGlmICghKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spKSkgeworCQl1c2luZ19kYWMgPSAwOworCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCX0KKworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgbm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb25zOwogCX0KIAogI2lmZGVmIF9fQklHX0VORElBTgpAQCAtMzI5OSw3ICszMzE1LDggQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfaHc7CiAJfQogCi0JaWYgKChlcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNrZ2VfaW50ciwgU0FfU0hJUlEsIERSVl9OQU1FLCBodykpKSB7CisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBza2dlX2ludHIsIFNBX1NISVJRLCBEUlZfTkFNRSwgaHcpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNhbm5vdCBhc3NpZ24gaXJxICVkXG4iLAogCQkgICAgICAgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSk7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwpAQCAtMzMxNyw3ICszMzM0LDggQEAKIAlpZiAoKGRldiA9IHNrZ2VfZGV2aW5pdChodywgMCwgdXNpbmdfZGFjKSkgPT0gTlVMTCkKIAkJZ290byBlcnJfb3V0X2xlZF9vZmY7CiAKLQlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpKSkgeworCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlXG4iLAogCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CkBAIC0zMzcyLDcgKzMzOTAsNiBAQAogCiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKIAlza2dlX3dyaXRlMTYoaHcsIEIwX0xFRCwgTEVEX1NUQVRfT0ZGKTsKLQlza2dlX3BjaV9jbGVhcihodyk7CiAJc2tnZV93cml0ZTgoaHcsIEIwX0NUU1QsIENTX1JTVF9TRVQpOwogCiAJdGFza2xldF9raWxsKCZody0+ZXh0X3Rhc2tsZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5oIGIvZHJpdmVycy9uZXQvc2tnZS5oCmluZGV4IDJlZmRhY2MuLjFmMWNlODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuaAorKysgYi9kcml2ZXJzL25ldC9za2dlLmgKQEAgLTI0MTgsNyArMjQxOCw2IEBACiAJaW50CQkgICAgIHBvcnQ7CiAKIAlzcGlubG9ja190CSAgICAgdHhfbG9jazsKLQl1MzIJCSAgICAgdHhfYXZhaWw7CiAJc3RydWN0IHNrZ2VfcmluZyAgICAgdHhfcmluZzsKIAlzdHJ1Y3Qgc2tnZV9yaW5nICAgICByeF9yaW5nOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggYmZlYmE1Yi4uNjhmOWMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgInNreTIuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkJInNreTIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMC4xNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjEiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICIgIgogCiAvKgpAQCAtNjEsMTAgKzYxLDYgQEAKICAqIGEgcmVjZWl2ZSByZXF1aXJlcyBvbmUgKG9yIHR3byBpZiB1c2luZyA2NCBiaXQgZG1hKS4KICAqLwogCi0jZGVmaW5lIGlzX2VjX2ExKGh3KSBcCi0JdW5saWtlbHkoKGh3KS0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDICYmIFwKLQkJIChodyktPmNoaXBfcmV2ID09IENISVBfUkVWX1lVX0VDX0ExKQotCiAjZGVmaW5lIFJYX0xFX1NJWkUJICAgIAk1MTIKICNkZWZpbmUgUlhfTEVfQllURVMJCShSWF9MRV9TSVpFKnNpemVvZihzdHJ1Y3Qgc2t5Ml9yeF9sZSkpCiAjZGVmaW5lIFJYX01BWF9QRU5ESU5HCQkoUlhfTEVfU0laRS8yIC0gMikKQEAgLTc0LDcgKzcwLDcgQEAKICNkZWZpbmUgVFhfUklOR19TSVpFCQk1MTIKICNkZWZpbmUgVFhfREVGX1BFTkRJTkcJCShUWF9SSU5HX1NJWkUgLSAxKQogI2RlZmluZSBUWF9NSU5fUEVORElORwkJNjQKLSNkZWZpbmUgTUFYX1NLQl9UWF9MRQkJKDQgKyAyKk1BWF9TS0JfRlJBR1MpCisjZGVmaW5lIE1BWF9TS0JfVFhfTEUJCSg0ICsgKHNpemVvZihkbWFfYWRkcl90KS9zaXplb2YodTMyKSkqTUFYX1NLQl9GUkFHUykKIAogI2RlZmluZSBTVEFUVVNfUklOR19TSVpFCTIwNDgJLyogMiBwb3J0cyAqIChUWCArIDIqUlgpICovCiAjZGVmaW5lIFNUQVRVU19MRV9CWVRFUwkJKFNUQVRVU19SSU5HX1NJWkUqc2l6ZW9mKHN0cnVjdCBza3kyX3N0YXR1c19sZSkpCkBAIC0xOTUsMTEgKzE5MSwxMSBAQAogCXByX2RlYnVnKCJza3kyX3NldF9wb3dlcl9zdGF0ZSAlZFxuIiwgc3RhdGUpOwogCXNreTJfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT04pOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoaHctPnBkZXYsIGh3LT5wbV9jYXAgKyBQQ0lfUE1fUE1DLCAmcG93ZXJfY29udHJvbCk7CisJcG93ZXJfY29udHJvbCA9IHNreTJfcGNpX3JlYWQxNihodywgaHctPnBtX2NhcCArIFBDSV9QTV9QTUMpOwogCXZhdXggPSAoc2t5Ml9yZWFkMTYoaHcsIEIwX0NUU1QpICYgWTJfVkFVWF9BVkFJTCkgJiYKIAkJKHBvd2VyX2NvbnRyb2wgJiBQQ0lfUE1fQ0FQX1BNRV9EM2NvbGQpOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoaHctPnBkZXYsIGh3LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJnBvd2VyX2NvbnRyb2wpOworCXBvd2VyX2NvbnRyb2wgPSBza3kyX3BjaV9yZWFkMTYoaHcsIGh3LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCk7CiAKIAlwb3dlcl9jb250cm9sIHw9IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVM7CiAJcG93ZXJfY29udHJvbCAmPSB+KFBDSV9QTV9DVFJMX1NUQVRFX01BU0spOwpAQCAtMjIzLDcgKzIxOSw3IEBACiAJCQlza3kyX3dyaXRlOChodywgQjJfWTJfQ0xLX0dBVEUsIDApOwogCiAJCS8qIFR1cm4gb2ZmIHBoeSBwb3dlciBzYXZpbmcgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQQ0lfREVWX1JFRzEsICZyZWcxKTsKKwkJcmVnMSA9IHNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUcxKTsKIAkJcmVnMSAmPSB+KFBDSV9ZMl9QSFkxX1BPV0QgfCBQQ0lfWTJfUEhZMl9QT1dEKTsKIAogCQkvKiBsb29rcyBsaWtlIHRoaXMgWEwgaXMgYmFjayBhc3N3YXJkcyAuLiAqLwpAQCAtMjMyLDE4ICsyMjgsMjggQEAKIAkJCWlmIChody0+cG9ydHMgPiAxKQogCQkJCXJlZzEgfD0gUENJX1kyX1BIWTJfQ09NQTsKIAkJfQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQQ0lfREVWX1JFRzEsIHJlZzEpOworCisJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpIHsKKwkJCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9ERVZfUkVHMywgMCk7CisJCQlyZWcxID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzQpOworCQkJcmVnMSAmPSBQX0FTUE1fQ09OVFJPTF9NU0s7CisJCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzQsIHJlZzEpOworCQkJc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUc1LCAwKTsKKwkJfQorCisJCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9ERVZfUkVHMSwgcmVnMSk7CisKIAkJYnJlYWs7CiAKIAljYXNlIFBDSV9EM2hvdDoKIAljYXNlIFBDSV9EM2NvbGQ6CiAJCS8qIFR1cm4gb24gcGh5IHBvd2VyIHNhdmluZyAqLwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaHctPnBkZXYsIFBDSV9ERVZfUkVHMSwgJnJlZzEpOworCQlyZWcxID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzEpOwogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPiAxKQogCQkJcmVnMSAmPSB+KFBDSV9ZMl9QSFkxX1BPV0QgfCBQQ0lfWTJfUEhZMl9QT1dEKTsKIAkJZWxzZQogCQkJcmVnMSB8PSAoUENJX1kyX1BIWTFfUE9XRCB8IFBDSV9ZMl9QSFkyX1BPV0QpOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQQ0lfREVWX1JFRzEsIHJlZzEpOworCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzEsIHJlZzEpOwogCiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMICYmIGh3LT5jaGlwX3JldiA+IDEpCiAJCQlza3kyX3dyaXRlOChodywgQjJfWTJfQ0xLX0dBVEUsIDApOwpAQCAtMjY1LDcgKzI3MSw3IEBACiAJCXJldCA9IC0xOwogCX0KIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShody0+cGRldiwgaHctPnBtX2NhcCArIFBDSV9QTV9DVFJMLCBwb3dlcl9jb250cm9sKTsKKwlza3kyX3BjaV93cml0ZTE2KGh3LCBody0+cG1fY2FwICsgUENJX1BNX0NUUkwsIHBvd2VyX2NvbnRyb2wpOwogCXNreTJfd3JpdGU4KGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT0ZGKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDYzLDE2ICs0NjksMzEgQEAKIAkJbGVkb3ZlciB8PSBQSFlfTV9MRURfTU9fUlgoTU9fTEVEX09GRik7CiAJfQogCi0JZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfQ1RSTCwgbGVkY3RybCk7CisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSAmJiBody0+Y2hpcF9yZXYgPj0gMikgeworCQkvKiBhcHBseSBmaXhlcyBpbiBQSFkgQUZFICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjIsIDI1NSk7CisJCS8qIGluY3JlYXNlIGRpZmZlcmVudGlhbCBzaWduYWwgYW1wbGl0dWRlIGluIDEwQkFTRS1UICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjQsIDB4YWE5OSk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjMsIDB4MjAxMSk7CiAKLQlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgfHwgc2t5Mi0+c3BlZWQgPT0gU1BFRURfMTAwKSB7Ci0JCS8qIHR1cm4gb24gMTAwIE1icHMgTEVEIChMRURfTElOSzEwMCkgKi8KLQkJbGVkb3ZlciB8PSBQSFlfTV9MRURfTU9fMTAwKE1PX0xFRF9PTik7CisJCS8qIGZpeCBmb3IgSUVFRSBBL0IgU3ltbWV0cnkgZmFpbHVyZSBpbiAxMDAwQkFTRS1UICovCisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjQsIDB4YTIwNCk7CisJCWdtX3BoeV93cml0ZShodywgcG9ydCwgMjMsIDB4MjAwMik7CisKKwkJLyogc2V0IHBhZ2UgcmVnaXN0ZXIgdG8gMCAqLworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIDIyLCAwKTsKKwl9IGVsc2UgeworCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9DVFJMLCBsZWRjdHJsKTsKKworCQlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgfHwgc2t5Mi0+c3BlZWQgPT0gU1BFRURfMTAwKSB7CisJCQkvKiB0dXJuIG9uIDEwMCBNYnBzIExFRCAoTEVEX0xJTksxMDApICovCisJCQlsZWRvdmVyIHw9IFBIWV9NX0xFRF9NT18xMDAoTU9fTEVEX09OKTsKKwkJfQorCisJCWlmIChsZWRvdmVyKQorCQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfT1ZFUiwgbGVkb3Zlcik7CisKIAl9Ci0KLQlpZiAobGVkb3ZlcikKLQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfT1ZFUiwgbGVkb3Zlcik7Ci0KIAkvKiBFbmFibGUgcGh5IGludGVycnVwdCBvbiBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlIChvciBsaW5rIHVwKSAqLwogCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0lOVF9NQVNLLCBQSFlfTV9JU19BTl9DT01QTCk7CkBAIC00ODMsOSArNTA0LDkgQEAKIC8qIEZvcmNlIGEgcmVuZWdvdGlhdGlvbiAqLwogc3RhdGljIHZvaWQgc2t5Ml9waHlfcmVpbml0KHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCiB7Ci0JZG93bigmc2t5Mi0+cGh5X3NlbWEpOworCXNwaW5fbG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCXNreTJfcGh5X2luaXQoc2t5Mi0+aHcsIHNreTItPnBvcnQpOwotCXVwKCZza3kyLT5waHlfc2VtYSk7CisJc3Bpbl91bmxvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9tYWNfaW5pdChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCkBAIC01NTAsOSArNTcxLDkgQEAKIAogCXNreTJfcmVhZDE2KGh3LCBTS19SRUcocG9ydCwgR01BQ19JUlFfU1JDKSk7CiAKLQlkb3duKCZza3kyLT5waHlfc2VtYSk7CisJc3Bpbl9sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CiAJc2t5Ml9waHlfaW5pdChodywgcG9ydCk7Ci0JdXAoJnNreTItPnBoeV9zZW1hKTsKKwlzcGluX3VubG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCiAJLyogTUlCIGNsZWFyICovCiAJcmVnID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fUEhZX0FERFIpOwpAQCAtNjAxLDggKzYyMiw4IEBACiAKIAkvKiBDb25maWd1cmUgUnggTUFDIEZJRk8gKi8KIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX0NMUik7Ci0Jc2t5Ml93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgUlhfR01GX0NUUkxfVCksCi0JCSAgICAgR01GX1JYX0NUUkxfREVGKTsKKwlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwKKwkJICAgICBHTUZfT1BFUl9PTiB8IEdNRl9SWF9GX0ZMX09OKTsKIAogCS8qIEZsdXNoIFJ4IE1BQyBGSUZPIG9uIGFueSBmbG93IGNvbnRyb2wgb3IgZXJyb3IgKi8KIAlza3kyX3dyaXRlMTYoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfRkxfTVNLKSwgR01SX0ZTX0FOWV9FUlIpOwpAQCAtNzA0LDM3ICs3MjUsMTEgQEAKIAlyZXR1cm4gbGU7CiB9CiAKLS8qCi0gKiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBjb2RlIHRha2VuIGZyb20gU3lzS29ubmVjdCBzazk4bGluIGRyaXZlcgotICogdG8gZGVhbCB3aXRoIGNoaXAgYnVnIG9uIFl1a29uIEVDIHJldiAwIGluIHRoZSB3cmFwYXJvdW5kIGNhc2UuCi0gKi8KLXN0YXRpYyB2b2lkIHNreTJfcHV0X2lkeChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHEsCi0JCQkJdTE2IGlkeCwgdTE2ICpsYXN0LCB1MTYgc2l6ZSkKKy8qIFVwZGF0ZSBjaGlwJ3MgbmV4dCBwb2ludGVyICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2t5Ml9wdXRfaWR4KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcSwgdTE2IGlkeCkKIHsKIAl3bWIoKTsKLQlpZiAoaXNfZWNfYTEoaHcpICYmIGlkeCA8ICpsYXN0KSB7Ci0JCXUxNiBod2dldCA9IHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfR0VUX0lEWCkpOwotCi0JCWlmIChod2dldCA9PSAwKSB7Ci0JCQkvKiBTdGFydCBwcmVmZXRjaGluZyBhZ2FpbiAqLwotCQkJc2t5Ml93cml0ZTgoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9GSUZPX1dNKSwgMHhlMCk7Ci0JCQlnb3RvIHNldG5ldzsKLQkJfQotCi0JCWlmIChod2dldCA9PSBzaXplIC0gMSkgewotCQkJLyogc2V0IHdhdGVybWFyayB0byBvbmUgbGlzdCBlbGVtZW50ICovCi0JCQlza3kyX3dyaXRlOChodywgWTJfUUFERFIocSwgUFJFRl9VTklUX0ZJRk9fV00pLCA4KTsKLQotCQkJLyogc2V0IHB1dCBpbmRleCB0byBmaXJzdCBsaXN0IGVsZW1lbnQgKi8KLQkJCXNreTJfd3JpdGUxNihodywgWTJfUUFERFIocSwgUFJFRl9VTklUX1BVVF9JRFgpLCAwKTsKLQkJfSBlbHNlCQkvKiBoYXZlIGhhcmR3YXJlIGdvIHRvIGVuZCBvZiBsaXN0ICovCi0JCQlza3kyX3dyaXRlMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9QVVRfSURYKSwKLQkJCQkgICAgIHNpemUgLSAxKTsKLQl9IGVsc2Ugewotc2V0bmV3OgotCQlza3kyX3dyaXRlMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9QVVRfSURYKSwgaWR4KTsKLQl9Ci0JKmxhc3QgPSBpZHg7CisJc2t5Ml93cml0ZTE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfUFVUX0lEWCksIGlkeCk7CiAJbW1pb3diKCk7CiB9CiAKQEAgLTg1Nyw3ICs4NTIsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsJLyogUGh5IHN0aWxsIGluIHJlc2V0ICovCiAKLQlzd2l0Y2goY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgogCQlkYXRhLT5waHlfaWQgPSBQSFlfQUREUl9NQVJWOwogCkBAIC04NjUsOSArODYwLDkgQEAKIAljYXNlIFNJT0NHTUlJUkVHOiB7CiAJCXUxNiB2YWwgPSAwOwogCi0JCWRvd24oJnNreTItPnBoeV9zZW1hKTsKKwkJc3Bpbl9sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CiAJCWVyciA9IF9fZ21fcGh5X3JlYWQoaHcsIHNreTItPnBvcnQsIGRhdGEtPnJlZ19udW0gJiAweDFmLCAmdmFsKTsKLQkJdXAoJnNreTItPnBoeV9zZW1hKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKIAogCQlkYXRhLT52YWxfb3V0ID0gdmFsOwogCQlicmVhazsKQEAgLTg3NywxMCArODcyLDEwIEBACiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJZG93bigmc2t5Mi0+cGh5X3NlbWEpOworCQlzcGluX2xvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKIAkJZXJyID0gZ21fcGh5X3dyaXRlKGh3LCBza3kyLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKIAkJCQkgICBkYXRhLT52YWxfaW4pOwotCQl1cCgmc2t5Mi0+cGh5X3NlbWEpOworCQlzcGluX3VubG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTk1Myw2ICs5NDgsMTIgQEAKIAogCXNreTItPnJ4X3B1dCA9IHNreTItPnJ4X25leHQgPSAwOwogCXNreTJfcXNldChodywgcnhxKTsKKworCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UgJiYgaHctPmNoaXBfcmV2ID49IDIpIHsKKwkJLyogTUFDIFJ4IFJBTSBSZWFkIGlzIGNvbnRyb2xsZWQgYnkgaGFyZHdhcmUgKi8KKwkJc2t5Ml93cml0ZTMyKGh3LCBRX0FERFIocnhxLCBRX0YpLCBGX01fUlhfUkFNX0RJUyk7CisJfQorCiAJc2t5Ml9wcmVmZXRjaF9pbml0KGh3LCByeHEsIHNreTItPnJ4X2xlX21hcCwgUlhfTEVfU0laRSAtIDEpOwogCiAJcnhfc2V0X2NoZWNrc3VtKHNreTIpOwpAQCAtOTY4LDkgKzk2OSwxMiBAQAogCQlza3kyX3J4X2FkZChza3kyLCByZS0+bWFwYWRkcik7CiAJfQogCisgCS8qIFRydW5jYXRlIG92ZXJzaXplIGZyYW1lcyAqLworIAlza3kyX3dyaXRlMTYoaHcsIFNLX1JFRyhza3kyLT5wb3J0LCBSWF9HTUZfVFJfVEhSKSwgc2t5Mi0+cnhfYnVmc2l6ZSAtIDgpOworIAlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhza3kyLT5wb3J0LCBSWF9HTUZfQ1RSTF9UKSwgUlhfVFJVTkNfT04pOworCiAJLyogVGVsbCBjaGlwIGFib3V0IGF2YWlsYWJsZSBidWZmZXJzICovCiAJc2t5Ml93cml0ZTE2KGh3LCBZMl9RQUREUihyeHEsIFBSRUZfVU5JVF9QVVRfSURYKSwgc2t5Mi0+cnhfcHV0KTsKLQlza3kyLT5yeF9sYXN0X3B1dCA9IHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihyeHEsIFBSRUZfVU5JVF9QVVRfSURYKSk7CiAJcmV0dXJuIDA7CiBub21lbToKIAlza3kyX3J4X2NsZWFuKHNreTIpOwpAQCAtOTgzLDcgKzk4Nyw3IEBACiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7Ci0JdTMyIHJhbXNpemUsIHJ4c3BhY2U7CisJdTMyIHJhbXNpemUsIHJ4c3BhY2UsIGltYXNrOwogCWludCBlcnIgPSAtRU5PTUVNOwogCiAJaWYgKG5ldGlmX21zZ19pZnVwKHNreTIpKQpAQCAtMTAzNSw5ICsxMDM5LDEwIEBACiAJCSAgICBSQl9SU1RfU0VUKTsKIAogCXNreTJfcXNldChodywgdHhxYWRkcltwb3J0XSk7Ci0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkKLQkJc2t5Ml93cml0ZTE2KGh3LCBRX0FERFIodHhxYWRkcltwb3J0XSwgUV9BTCksIDB4MWEwKTsKIAorCS8qIFNldCBhbG1vc3QgZW1wdHkgdGhyZXNob2xkICovCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSAmJiBody0+Y2hpcF9yZXYgPT0gMSkKKwkJc2t5Ml93cml0ZTE2KGh3LCBRX0FERFIodHhxYWRkcltwb3J0XSwgUV9BTCksIDB4MWEwKTsKIAogCXNreTJfcHJlZmV0Y2hfaW5pdChodywgdHhxYWRkcltwb3J0XSwgc2t5Mi0+dHhfbGVfbWFwLAogCQkJICAgVFhfUklOR19TSVpFIC0gMSk7CkBAIC0xMDQ3LDggKzEwNTIsMTAgQEAKIAkJZ290byBlcnJfb3V0OwogCiAJLyogRW5hYmxlIGludGVycnVwdHMgZnJvbSBwaHkvbWFjIGZvciBwb3J0ICovCi0JaHctPmludHJfbWFzayB8PSAocG9ydCA9PSAwKSA/IFkyX0lTX1BPUlRfMSA6IFkyX0lTX1BPUlRfMjsKLQlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOworCWltYXNrID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOworCWltYXNrIHw9IChwb3J0ID09IDApID8gWTJfSVNfUE9SVF8xIDogWTJfSVNfUE9SVF8yOworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOworCiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6CkBAIC0xMTE1LDYgKzExMjIsNyBAQAogCXN0cnVjdCBza3kyX3R4X2xlICpsZSA9IE5VTEw7CiAJc3RydWN0IHR4X3JpbmdfaW5mbyAqcmU7CiAJdW5zaWduZWQgaSwgbGVuOworCWludCBhdmFpbDsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdTMyIGFkZHI2NDsKIAl1MTYgbXNzOwpAQCAtMTE2Nyw3ICsxMTc1LDcgQEAKIAkJLyoganVzdCBkcm9wIHRoZSBwYWNrZXQgaWYgbm9uLWxpbmVhciBleHBhbnNpb24gZmFpbHMgKi8KIAkJaWYgKHNrYl9oZWFkZXJfY2xvbmVkKHNrYikgJiYKIAkJICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkgewotCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCkBAIC0xMjU3LDExICsxMjY1LDE0IEBACiAJcmUtPmlkeCA9IHNreTItPnR4X3Byb2Q7CiAJbGUtPmN0cmwgfD0gRU9QOwogCi0Jc2t5Ml9wdXRfaWR4KGh3LCB0eHFhZGRyW3NreTItPnBvcnRdLCBza3kyLT50eF9wcm9kLAotCQkgICAgICZza3kyLT50eF9sYXN0X3B1dCwgVFhfUklOR19TSVpFKTsKKwlhdmFpbCA9IHR4X2F2YWlsKHNreTIpOworCWlmIChtc3MgIT0gMCB8fCBhdmFpbCA8IFRYX01JTl9QRU5ESU5HKSB7CisgCQlsZS0+Y3RybCB8PSBGUkNfU1RBVDsKKwkJaWYgKGF2YWlsIDw9IE1BWF9TS0JfVFhfTEUpCisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJfQogCi0JaWYgKHR4X2F2YWlsKHNreTIpIDw9IE1BWF9TS0JfVFhfTEUpCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlza3kyX3B1dF9pZHgoaHcsIHR4cWFkZHJbc2t5Mi0+cG9ydF0sIHNreTItPnR4X3Byb2QpOwogCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZza3kyLT50eF9sb2NrKTsKQEAgLTEyOTMsNyArMTMwNCw3IEBACiAJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJlID0gc2t5Mi0+dHhfcmluZyArIHB1dDsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJlLT5za2I7CiAKLSAgCQlueHQgPSByZS0+aWR4OworCQlueHQgPSByZS0+aWR4OwogCQlCVUdfT04obnh0ID49IFRYX1JJTkdfU0laRSk7CiAJCXByZWZldGNoKHNreTItPnR4X3JpbmcgKyBueHQpOwogCkBAIC0xMzA5LDE1ICsxMzIwLDE1IEBACiAJCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpmcmU7CiAJCQlmcmUgPSBza3kyLT50eF9yaW5nICsgKHB1dCArIGkgKyAxKSAlIFRYX1JJTkdfU0laRTsKIAkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGZyZSwgbWFwYWRkciksCi0gIAkJCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplLAorCQkJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUsCiAJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQl9CiAKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIAogCXNreTItPnR4X2NvbnMgPSBwdXQ7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJiB0eF9hdmFpbChza3kyKSA+IE1BWF9TS0JfVFhfTEUpCisJaWYgKHR4X2F2YWlsKHNreTIpID4gTUFYX1NLQl9UWF9MRSkKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCkBAIC0xMzM2LDYgKzEzNDcsNyBAQAogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwogCXUxNiBjdHJsOworCXUzMiBpbWFzazsKIAogCS8qIE5ldmVyIHJlYWxseSBnb3Qgc3RhcnRlZCEgKi8KIAlpZiAoIXNreTItPnR4X2xlKQpAQCAtMTM0NywxNCArMTM1OSw2IEBACiAJLyogU3RvcCBtb3JlIHBhY2tldHMgZnJvbSBiZWluZyBxdWV1ZWQgKi8KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQkvKiBEaXNhYmxlIHBvcnQgSVJRICovCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlody0+aW50cl9tYXNrICY9IH4oKHNreTItPnBvcnQgPT0gMCkgPyBZMl9JU19JUlFfUEhZMSA6IFkyX0lTX0lSUV9QSFkyKTsKLQlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGh3LT5pbnRyX21hc2spOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KIAlza3kyX3BoeV9yZXNldChodywgcG9ydCk7CiAKIAkvKiBTdG9wIHRyYW5zbWl0dGVyICovCkBAIC0xMzk4LDYgKzE0MDIsMTEgQEAKIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX1NFVCk7CiAJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgR01GX1JTVF9TRVQpOwogCisJLyogRGlzYWJsZSBwb3J0IElSUSAqLworCWltYXNrID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOworCWltYXNrICY9IH4oc2t5Mi0+cG9ydCA9PSAwKSA/IFkyX0lTX1BPUlRfMSA6IFkyX0lTX1BPUlRfMjsKKwlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGltYXNrKTsKKwogCS8qIHR1cm4gb2ZmIExFRCdzICovCiAJc2t5Ml93cml0ZTE2KGh3LCBCMF9ZMkxFRCwgTEVEX1NUQVRfT0ZGKTsKIApAQCAtMTU5MiwyMCArMTYwMSwxOSBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogSW50ZXJydXB0IGZyb20gUEhZIGFyZSBoYW5kbGVkIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQKLSAqIGJlY2F1c2UgYWNjZXNzaW5nIHBoeSByZWdpc3RlcnMgcmVxdWlyZXMgc3BpbiB3YWl0IHdoaWNoIG1pZ2h0Ci0gKiBjYXVzZSBleGNlc3MgaW50ZXJydXB0IGxhdGVuY3kuCi0gKi8KLXN0YXRpYyB2b2lkIHNreTJfcGh5X3Rhc2sodm9pZCAqYXJnKQorLyogSW50ZXJydXB0IGZyb20gUEhZICovCitzdGF0aWMgdm9pZCBza3kyX3BoeV9pbnRyKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCkKIHsKLQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gYXJnOwotCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOworCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUxNiBpc3RhdHVzLCBwaHlzdGF0OwogCi0JZG93bigmc2t5Mi0+cGh5X3NlbWEpOwotCWlzdGF0dXMgPSBnbV9waHlfcmVhZChodywgc2t5Mi0+cG9ydCwgUEhZX01BUlZfSU5UX1NUQVQpOwotCXBoeXN0YXQgPSBnbV9waHlfcmVhZChodywgc2t5Mi0+cG9ydCwgUEhZX01BUlZfUEhZX1NUQVQpOworCXNwaW5fbG9jaygmc2t5Mi0+cGh5X2xvY2spOworCWlzdGF0dXMgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfSU5UX1NUQVQpOworCXBoeXN0YXQgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfUEhZX1NUQVQpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gb3V0OwogCiAJaWYgKG5ldGlmX21zZ19pbnRyKHNreTIpKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXggMHgleFxuIiwKQEAgLTE2MzEsMTIgKzE2MzksNyBAQAogCQkJc2t5Ml9saW5rX2Rvd24oc2t5Mik7CiAJfQogb3V0OgotCXVwKCZza3kyLT5waHlfc2VtYSk7Ci0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWh3LT5pbnRyX21hc2sgfD0gKHNreTItPnBvcnQgPT0gMCkgPyBZMl9JU19JUlFfUEhZMSA6IFkyX0lTX0lSUV9QSFkyOwotCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCXNwaW5fdW5sb2NrKCZza3kyLT5waHlfbG9jayk7CiB9CiAKIApAQCAtMTY0OCwzOSArMTY1MSw1MCBAQAogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXVuc2lnbmVkIHR4cSA9IHR4cWFkZHJbc2t5Mi0+cG9ydF07Ci0JdTE2IHJpZHg7Ci0KLQkvKiBNYXliZSB3ZSBqdXN0IG1pc3NlZCBhbiBzdGF0dXMgaW50ZXJydXB0ICovCi0Jc3Bpbl9sb2NrKCZza3kyLT50eF9sb2NrKTsKLQlyaWR4ID0gc2t5Ml9yZWFkMTYoaHcsCi0JCQkgICBza3kyLT5wb3J0ID09IDAgPyBTVEFUX1RYQTFfUklEWCA6IFNUQVRfVFhBMl9SSURYKTsKLQlza3kyX3R4X2NvbXBsZXRlKHNreTIsIHJpZHgpOwotCXNwaW5fdW5sb2NrKCZza3kyLT50eF9sb2NrKTsKLQotCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcl9pbmZvKFBGWCAidHJhbnNtaXQgaW50ZXJydXB0IG1pc3NlZD8gcmVjb3ZlcmVkXG4iKTsKLQkJcmV0dXJuOwotCX0KKwl1MTYgcmVwb3J0LCBkb25lOwogCiAJaWYgKG5ldGlmX21zZ190aW1lcihza3kyKSkKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHR4IHRpbWVvdXRcbiIsIGRldi0+bmFtZSk7CiAKLQlza3kyX3dyaXRlMzIoaHcsIFFfQUREUih0eHEsIFFfQ1NSKSwgQk1VX1NUT1ApOwotCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIodHhxLCBQUkVGX1VOSVRfQ1RSTCksIFBSRUZfVU5JVF9SU1RfU0VUKTsKKwlyZXBvcnQgPSBza3kyX3JlYWQxNihodywgc2t5Mi0+cG9ydCA9PSAwID8gU1RBVF9UWEExX1JJRFggOiBTVEFUX1RYQTJfUklEWCk7CisJZG9uZSA9IHNreTJfcmVhZDE2KGh3LCBRX0FERFIodHhxLCBRX0RPTkUpKTsKIAotCXNreTJfdHhfY2xlYW4oc2t5Mik7CisJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogdHJhbnNtaXQgcmluZyAldSAuLiAldSByZXBvcnQ9JXUgZG9uZT0ldVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLAorCSAgICAgICBza3kyLT50eF9jb25zLCBza3kyLT50eF9wcm9kLCByZXBvcnQsIGRvbmUpOwogCi0Jc2t5Ml9xc2V0KGh3LCB0eHEpOwotCXNreTJfcHJlZmV0Y2hfaW5pdChodywgdHhxLCBza3kyLT50eF9sZV9tYXAsIFRYX1JJTkdfU0laRSAtIDEpOworCWlmIChyZXBvcnQgIT0gZG9uZSkgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAic3RhdHVzIGJ1cnN0IHBlbmRpbmcgKGlycSBtb2RlcmF0aW9uPylcbiIpOworCisJCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVE9QKTsKKwkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCwgVElNX1NUQVJUKTsKKwl9IGVsc2UgaWYgKHJlcG9ydCAhPSBza3kyLT50eF9jb25zKSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJzdGF0dXMgcmVwb3J0IGxvc3Q/XG4iKTsKKworCQlzcGluX2xvY2tfYmgoJnNreTItPnR4X2xvY2spOworCQlza3kyX3R4X2NvbXBsZXRlKHNreTIsIHJlcG9ydCk7CisJCXNwaW5fdW5sb2NrX2JoKCZza3kyLT50eF9sb2NrKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGFyZHdhcmUgaHVuZz8gZmx1c2hpbmdcbiIpOworCisJCXNreTJfd3JpdGUzMihodywgUV9BRERSKHR4cSwgUV9DU1IpLCBCTVVfU1RPUCk7CisJCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIodHhxLCBQUkVGX1VOSVRfQ1RSTCksIFBSRUZfVU5JVF9SU1RfU0VUKTsKKworCQlza3kyX3R4X2NsZWFuKHNreTIpOworCisJCXNreTJfcXNldChodywgdHhxKTsKKwkJc2t5Ml9wcmVmZXRjaF9pbml0KGh3LCB0eHEsIHNreTItPnR4X2xlX21hcCwgVFhfUklOR19TSVpFIC0gMSk7CisJfQogfQogCiAKICNkZWZpbmUgcm91bmR1cCh4LCB5KSAgICgoKCh4KSsoKHkpLTEpKS8oeSkpKih5KSkKLS8qIFdhbnQgcmVjZWl2ZSBidWZmZXIgc2l6ZSB0byBiZSBtdWx0aXBsZSBvZiA2NCBiaXRzLCBhbmQgaW5jbCByb29tIGZvciB2bGFuICovCisvKiBXYW50IHJlY2VpdmUgYnVmZmVyIHNpemUgdG8gYmUgbXVsdGlwbGUgb2YgNjQgYml0cworICogYW5kIGluY2wgcm9vbSBmb3IgdmxhbiBhbmQgdHJ1bmNhdGlvbgorICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNreTJfYnVmX3NpemUoaW50IG10dSkKIHsKLQlyZXR1cm4gcm91bmR1cChtdHUgKyBFVEhfSExFTiArIDQsIDgpOworCXJldHVybiByb3VuZHVwKG10dSArIEVUSF9ITEVOICsgVkxBTl9ITEVOLCA4KSArIDg7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQpAQCAtMTY4OSw2ICsxNzAzLDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKIAlpbnQgZXJyOwogCXUxNiBjdGwsIG1vZGU7CisJdTMyIGltYXNrOwogCiAJaWYgKG5ld19tdHUgPCBFVEhfWkxFTiB8fCBuZXdfbXR1ID4gRVRIX0pVTUJPX01UVSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzAxLDEyICsxNzE2LDE1IEBACiAJCXJldHVybiAwOwogCX0KIAorCWltYXNrID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCW5ldGlmX3BvbGxfZGlzYWJsZShody0+ZGV2WzBdKTsKIAorCXN5bmNocm9uaXplX2lycShody0+cGRldi0+aXJxKTsKKwogCWN0bCA9IGdtYV9yZWFkMTYoaHcsIHNreTItPnBvcnQsIEdNX0dQX0NUUkwpOwogCWdtYV93cml0ZTE2KGh3LCBza3kyLT5wb3J0LCBHTV9HUF9DVFJMLCBjdGwgJiB+R01fR1BDUl9SWF9FTkEpOwogCXNreTJfcnhfc3RvcChza3kyKTsKQEAgLTE3MjUsNyArMTc0Myw3IEBACiAJc2t5Ml93cml0ZTgoaHcsIFJCX0FERFIocnhxYWRkcltza3kyLT5wb3J0XSwgUkJfQ1RSTCksIFJCX0VOQV9PUF9NRCk7CiAKIAllcnIgPSBza3kyX3J4X3N0YXJ0KHNreTIpOwotCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7CisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBpbWFzayk7CiAKIAlpZiAoZXJyKQogCQlkZXZfY2xvc2UoZGV2KTsKQEAgLTE3NjMsNyArMTc4MSw3IEBACiAJaWYgKCEoc3RhdHVzICYgR01SX0ZTX1JYX09LKSkKIAkJZ290byByZXN1Ym1pdDsKIAotCWlmICgoc3RhdHVzID4+IDE2KSAhPSBsZW5ndGggfHwgbGVuZ3RoID4gc2t5Mi0+cnhfYnVmc2l6ZSkKKwlpZiAobGVuZ3RoID4gc2t5Mi0+bmV0ZGV2LT5tdHUgKyBFVEhfSExFTikKIAkJZ290byBvdmVyc2l6ZTsKIAogCWlmIChsZW5ndGggPCBjb3B5YnJlYWspIHsKQEAgLTE4MDIsOCArMTgyMCw3IEBACiAJc2t5Ml9yeF9hZGQoc2t5MiwgcmUtPm1hcGFkZHIpOwogCiAJLyogVGVsbCByZWNlaXZlciBhYm91dCBuZXcgYnVmZmVycy4gKi8KLQlza3kyX3B1dF9pZHgoc2t5Mi0+aHcsIHJ4cWFkZHJbc2t5Mi0+cG9ydF0sIHNreTItPnJ4X3B1dCwKLQkJICAgICAmc2t5Mi0+cnhfbGFzdF9wdXQsIFJYX0xFX1NJWkUpOworCXNreTJfcHV0X2lkeChza3kyLT5odywgcnhxYWRkcltza3kyLT5wb3J0XSwgc2t5Mi0+cnhfcHV0KTsKIAogCXJldHVybiBza2I7CiAKQEAgLTE4MzAsNjUgKzE4NDcsNTEgQEAKIAlnb3RvIHJlc3VibWl0OwogfQogCi0vKgotICogQ2hlY2sgZm9yIHRyYW5zbWl0IGNvbXBsZXRlCi0gKi8KLSNkZWZpbmUgVFhfTk9fU1RBVFVTCTB4ZmZmZgotCi1zdGF0aWMgdm9pZCBza3kyX3R4X2NoZWNrKHN0cnVjdCBza3kyX2h3ICpodywgaW50IHBvcnQsIHUxNiBsYXN0KQorLyogVHJhbnNtaXQgY29tcGxldGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBza3kyX3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGxhc3QpCiB7Ci0JaWYgKGxhc3QgIT0gVFhfTk9fU1RBVFVTKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOwotCQlpZiAoZGV2ICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQkJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJCXNwaW5fbG9jaygmc2t5Mi0+dHhfbG9jayk7Ci0JCQlza3kyX3R4X2NvbXBsZXRlKHNreTIsIGxhc3QpOwotCQkJc3Bpbl91bmxvY2soJnNreTItPnR4X2xvY2spOwotCQl9CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlzcGluX2xvY2soJnNreTItPnR4X2xvY2spOworCQlza3kyX3R4X2NvbXBsZXRlKHNreTIsIGxhc3QpOworCQlzcGluX3VubG9jaygmc2t5Mi0+dHhfbG9jayk7CiAJfQogfQogCi0vKgotICogQm90aCBwb3J0cyBzaGFyZSB0aGUgc2FtZSBzdGF0dXMgaW50ZXJydXB0LCB0aGVyZWZvcmUgdGhlcmUgaXMgb25seQotICogb25lIHBvbGwgcm91dGluZS4KLSAqLwotc3RhdGljIGludCBza3kyX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldjAsIGludCAqYnVkZ2V0KQorLyogUHJvY2VzcyBzdGF0dXMgcmVzcG9uc2UgcmluZyAqLworc3RhdGljIGludCBza3kyX3N0YXR1c19pbnRyKHN0cnVjdCBza3kyX2h3ICpodywgaW50IHRvX2RvKQogewotCXN0cnVjdCBza3kyX2h3ICpodyA9ICgoc3RydWN0IHNreTJfcG9ydCAqKSBuZXRkZXZfcHJpdihkZXYwKSktPmh3OwotCXVuc2lnbmVkIGludCB0b19kbyA9IG1pbihkZXYwLT5xdW90YSwgKmJ1ZGdldCk7Ci0JdW5zaWduZWQgaW50IHdvcmtfZG9uZSA9IDA7Ci0JdTE2IGh3aWR4OwotCXUxNiB0eF9kb25lWzJdID0geyBUWF9OT19TVEFUVVMsIFRYX05PX1NUQVRVUyB9OworCWludCB3b3JrX2RvbmUgPSAwOwogCi0Jc2t5Ml93cml0ZTMyKGh3LCBTVEFUX0NUUkwsIFNDX1NUQVRfQ0xSX0lSUSk7Ci0KLQlod2lkeCA9IHNreTJfcmVhZDE2KGh3LCBTVEFUX1BVVF9JRFgpOwotCUJVR19PTihod2lkeCA+PSBTVEFUVVNfUklOR19TSVpFKTsKIAlybWIoKTsKIAotCXdoaWxlIChod2lkeCAhPSBody0+c3RfaWR4KSB7CisJZm9yKDs7KSB7CiAJCXN0cnVjdCBza3kyX3N0YXR1c19sZSAqbGUgID0gaHctPnN0X2xlICsgaHctPnN0X2lkeDsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAkJc3RydWN0IHNreTJfcG9ydCAqc2t5MjsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJdTMyIHN0YXR1czsKIAkJdTE2IGxlbmd0aDsKKwkJdTggIGxpbmssIG9wY29kZTsKIAotCQlsZSA9IGh3LT5zdF9sZSArIGh3LT5zdF9pZHg7CisJCW9wY29kZSA9IGxlLT5vcGNvZGU7CisJCWlmICghb3Bjb2RlKQorCQkJYnJlYWs7CisJCW9wY29kZSAmPSB+SFdfT1dORVI7CisKIAkJaHctPnN0X2lkeCA9IChody0+c3RfaWR4ICsgMSkgJSBTVEFUVVNfUklOR19TSVpFOwotCQlwcmVmZXRjaChody0+c3RfbGUgKyBody0+c3RfaWR4KTsKKwkJbGUtPm9wY29kZSA9IDA7CiAKLQkJQlVHX09OKGxlLT5saW5rID49IDIpOwotCQlkZXYgPSBody0+ZGV2W2xlLT5saW5rXTsKLQkJaWYgKGRldiA9PSBOVUxMIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCi0JCQljb250aW51ZTsKKwkJbGluayA9IGxlLT5saW5rOworCQlCVUdfT04obGluayA+PSAyKTsKKwkJZGV2ID0gaHctPmRldltsaW5rXTsKIAogCQlza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJc3RhdHVzID0gbGUzMl90b19jcHUobGUtPnN0YXR1cyk7Ci0JCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGxlLT5sZW5ndGgpOworCQlsZW5ndGggPSBsZS0+bGVuZ3RoOworCQlzdGF0dXMgPSBsZS0+c3RhdHVzOwogCi0JCXN3aXRjaCAobGUtPm9wY29kZSAmIH5IV19PV05FUikgeworCQlzd2l0Y2ggKG9wY29kZSkgewogCQljYXNlIE9QX1JYU1RBVDoKIAkJCXNrYiA9IHNreTJfcmVjZWl2ZShza3kyLCBsZW5ndGgsIHN0YXR1cyk7CiAJCQlpZiAoIXNrYikKQEAgLTE5MjgsMzkgKzE5MzEsMjMgQEAKIAogCQljYXNlIE9QX1RYSU5ERVhMRToKIAkJCS8qIFRYIGluZGV4IHJlcG9ydHMgc3RhdHVzIGZvciBib3RoIHBvcnRzICovCi0JCQl0eF9kb25lWzBdID0gc3RhdHVzICYgMHhmZmZmOwotCQkJdHhfZG9uZVsxXSA9ICgoc3RhdHVzID4+IDI0KSAmIDB4ZmYpCi0JCQkJfCAodTE2KShsZW5ndGggJiAweGYpIDw8IDg7CisJCQlza3kyX3R4X2RvbmUoaHctPmRldlswXSwgc3RhdHVzICYgMHhmZmZmKTsKKwkJCWlmIChody0+ZGV2WzFdKQorCQkJCXNreTJfdHhfZG9uZShody0+ZGV2WzFdLAorCQkJCSAgICAgKChzdGF0dXMgPj4gMjQpICYgMHhmZikKKwkJCQkJICAgICB8ICh1MTYpKGxlbmd0aCAmIDB4ZikgPDwgOCk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJCSAgICAgICAidW5rbm93biBzdGF0dXMgb3Bjb2RlIDB4JXhcbiIsIGxlLT5vcGNvZGUpOworCQkJCSAgICAgICAidW5rbm93biBzdGF0dXMgb3Bjb2RlIDB4JXhcbiIsIG9wY29kZSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAogZXhpdF9sb29wOgotCXNreTJfdHhfY2hlY2soaHcsIDAsIHR4X2RvbmVbMF0pOwotCXNreTJfdHhfY2hlY2soaHcsIDEsIHR4X2RvbmVbMV0pOwotCi0JaWYgKGxpa2VseSh3b3JrX2RvbmUgPCB0b19kbykpIHsKLQkJLyogbmVlZCB0byByZXN0YXJ0IFRYIHRpbWVyICovCi0JCWlmIChpc19lY19hMShodykpIHsKLQkJCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVE9QKTsKLQkJCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7Ci0JCX0KLQotCQluZXRpZl9yeF9jb21wbGV0ZShkZXYwKTsKLQkJaHctPmludHJfbWFzayB8PSBZMl9JU19TVEFUX0JNVTsKLQkJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJKmJ1ZGdldCAtPSB3b3JrX2RvbmU7Ci0JCWRldjAtPnF1b3RhIC09IHdvcmtfZG9uZTsKLQkJcmV0dXJuIDE7Ci0JfQorCXJldHVybiB3b3JrX2RvbmU7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfaHdfZXJyb3Ioc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0LCB1MzIgc3RhdHVzKQpAQCAtMjAxNywxMyArMjAwNCwxMyBAQAogCWlmIChzdGF0dXMgJiAoWTJfSVNfTVNUX0VSUiB8IFkyX0lTX0lSUV9TVEFUKSkgewogCQl1MTYgcGNpX2VycjsKIAotCQlwY2lfcmVhZF9jb25maWdfd29yZChody0+cGRldiwgUENJX1NUQVRVUywgJnBjaV9lcnIpOworCQlwY2lfZXJyID0gc2t5Ml9wY2lfcmVhZDE2KGh3LCBQQ0lfU1RBVFVTKTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBwY2kgaHcgZXJyb3IgKDB4JXgpXG4iLAogCQkJICAgICAgIHBjaV9uYW1lKGh3LT5wZGV2KSwgcGNpX2Vycik7CiAKIAkJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChody0+cGRldiwgUENJX1NUQVRVUywKKwkJc2t5Ml9wY2lfd3JpdGUxNihodywgUENJX1NUQVRVUywKIAkJCQkgICAgICBwY2lfZXJyIHwgUENJX1NUQVRVU19FUlJPUl9CSVRTKTsKIAkJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOwogCX0KQEAgLTIwMzIsNyArMjAxOSw3IEBACiAJCS8qIFBDSS1FeHByZXNzIHVuY29ycmVjdGFibGUgRXJyb3Igb2NjdXJyZWQgKi8KIAkJdTMyIHBleF9lcnI7CiAKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCBQRVhfVU5DX0VSUl9TVEFULCAmcGV4X2Vycik7CisJCXBleF9lcnIgPSBza3kyX3BjaV9yZWFkMzIoaHcsIFBFWF9VTkNfRVJSX1NUQVQpOwogCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcGNpIGV4cHJlc3MgZXJyb3IgKDB4JXgpXG4iLApAQCAtMjA0MCw3ICsyMDI3LDcgQEAKIAogCQkvKiBjbGVhciB0aGUgaW50ZXJydXB0ICovCiAJCXNreTJfd3JpdGUzMihodywgQjJfVFNUX0NUUkwxLCBUU1RfQ0ZHX1dSSVRFX09OKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChody0+cGRldiwgUEVYX1VOQ19FUlJfU1RBVCwKKwkJc2t5Ml9wY2lfd3JpdGUzMihodywgUEVYX1VOQ19FUlJfU1RBVCwKIAkJCQkgICAgICAgMHhmZmZmZmZmZlVMKTsKIAkJc2t5Ml93cml0ZTMyKGh3LCBCMl9UU1RfQ1RSTDEsIFRTVF9DRkdfV1JJVEVfT0ZGKTsKIApAQCAtMjA3OSwxNCArMjA2Niw3OSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2t5Ml9waHlfaW50cihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCisvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaXQgaXMgYSBmYXRhbCBzaXR1YXRpb24gKi8KK3N0YXRpYyB2b2lkIHNreTJfZGVzY3JpcHRvcl9lcnJvcihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQsCisJCQkJICBjb25zdCBjaGFyICpyeHR4LCB1MzIgbWFzaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltwb3J0XTsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgaW1hc2s7CiAKLQlody0+aW50cl9tYXNrICY9IH4ocG9ydCA9PSAwID8gWTJfSVNfSVJRX1BIWTEgOiBZMl9JU19JUlFfUEhZMik7Ci0Jc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKLQlzY2hlZHVsZV93b3JrKCZza3kyLT5waHlfdGFzayk7CisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6ICVzIGRlc2NyaXB0b3IgZXJyb3IgKGhhcmR3YXJlIHByb2JsZW0pXG4iLAorCSAgICAgICBkZXYgPyBkZXYtPm5hbWUgOiAiPG5vdCByZWdpc3RlcmVkPiIsIHJ4dHgpOworCisJaW1hc2sgPSBza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CisJaW1hc2sgJj0gfm1hc2s7CisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBpbWFzayk7CisKKwlpZiAoZGV2KSB7CisJCXNwaW5fbG9jaygmc2t5Mi0+cGh5X2xvY2spOworCQlza3kyX2xpbmtfZG93bihza3kyKTsKKwkJc3Bpbl91bmxvY2soJnNreTItPnBoeV9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2t5Ml9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYwLCBpbnQgKmJ1ZGdldCkKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSAoKHN0cnVjdCBza3kyX3BvcnQgKikgbmV0ZGV2X3ByaXYoZGV2MCkpLT5odzsKKwlpbnQgd29ya19saW1pdCA9IG1pbihkZXYwLT5xdW90YSwgKmJ1ZGdldCk7CisJaW50IHdvcmtfZG9uZSA9IDA7CisJdTMyIHN0YXR1cyA9IHNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9FSVNSKTsKKworCWlmICh1bmxpa2VseShzdGF0dXMgJiB+WTJfSVNfU1RBVF9CTVUpKSB7CisJCWlmIChzdGF0dXMgJiBZMl9JU19IV19FUlIpCisJCQlza3kyX2h3X2ludHIoaHcpOworCisJCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfUEhZMSkKKwkJCXNreTJfcGh5X2ludHIoaHcsIDApOworCisJCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfUEhZMikKKwkJCXNreTJfcGh5X2ludHIoaHcsIDEpOworCisJCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfTUFDMSkKKwkJCXNreTJfbWFjX2ludHIoaHcsIDApOworCisJCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfTUFDMikKKwkJCXNreTJfbWFjX2ludHIoaHcsIDEpOworCisJCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfUlgxKQorCQkJc2t5Ml9kZXNjcmlwdG9yX2Vycm9yKGh3LCAwLCAicmVjZWl2ZSIsIFkyX0lTX0NIS19SWDEpOworCisJCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfUlgyKQorCQkJc2t5Ml9kZXNjcmlwdG9yX2Vycm9yKGh3LCAxLCAicmVjZWl2ZSIsIFkyX0lTX0NIS19SWDIpOworCisJCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfVFhBMSkKKwkJCXNreTJfZGVzY3JpcHRvcl9lcnJvcihodywgMCwgInRyYW5zbWl0IiwgWTJfSVNfQ0hLX1RYQTEpOworCisJCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfVFhBMikKKwkJCXNreTJfZGVzY3JpcHRvcl9lcnJvcihodywgMSwgInRyYW5zbWl0IiwgWTJfSVNfQ0hLX1RYQTIpOworCX0KKworCWlmIChzdGF0dXMgJiBZMl9JU19TVEFUX0JNVSkgeworCQl3b3JrX2RvbmUgPSBza3kyX3N0YXR1c19pbnRyKGh3LCB3b3JrX2xpbWl0KTsKKwkJKmJ1ZGdldCAtPSB3b3JrX2RvbmU7CisJCWRldjAtPnF1b3RhIC09IHdvcmtfZG9uZTsKKworCQlpZiAod29ya19kb25lID49IHdvcmtfbGltaXQpCisJCQlyZXR1cm4gMTsKKworCQlza3kyX3dyaXRlMzIoaHcsIFNUQVRfQ1RSTCwgU0NfU1RBVF9DTFJfSVJRKTsKKwl9CisKKwluZXRpZl9yeF9jb21wbGV0ZShkZXYwKTsKKworCXN0YXR1cyA9IHNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9MSVNSKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHNreTJfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMjA5NSwzOSArMjE0NywxNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYwID0gaHctPmRldlswXTsKIAl1MzIgc3RhdHVzOwogCisJLyogUmVhZGluZyB0aGlzIG1hc2sgaW50ZXJydXB0cyBhcyBzaWRlIGVmZmVjdCAqLwogCXN0YXR1cyA9IHNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9JU1JDMik7CiAJaWYgKHN0YXR1cyA9PSAwIHx8IHN0YXR1cyA9PSB+MCkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JaWYgKHN0YXR1cyAmIFkyX0lTX0hXX0VSUikKLQkJc2t5Ml9od19pbnRyKGh3KTsKLQotCS8qIERvIE5BUEkgZm9yIFJ4IGFuZCBUeCBzdGF0dXMgKi8KLQlpZiAoc3RhdHVzICYgWTJfSVNfU1RBVF9CTVUpIHsKLQkJaHctPmludHJfbWFzayAmPSB+WTJfSVNfU1RBVF9CTVU7Ci0JCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7Ci0KLQkJaWYgKGxpa2VseShfX25ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2MCkpKSB7Ci0JCQlwcmVmZXRjaCgmaHctPnN0X2xlW2h3LT5zdF9pZHhdKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2MCk7Ci0JCX0KLQl9Ci0KLQlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX1BIWTEpCi0JCXNreTJfcGh5X2ludHIoaHcsIDApOwotCi0JaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9QSFkyKQotCQlza3kyX3BoeV9pbnRyKGh3LCAxKTsKLQotCWlmIChzdGF0dXMgJiBZMl9JU19JUlFfTUFDMSkKLQkJc2t5Ml9tYWNfaW50cihodywgMCk7Ci0KLQlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX01BQzIpCi0JCXNreTJfbWFjX2ludHIoaHcsIDEpOwotCi0Jc2t5Ml93cml0ZTMyKGh3LCBCMF9ZMl9TUF9JQ1IsIDIpOwotCi0Jc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOworCXByZWZldGNoKCZody0+c3RfbGVbaHctPnN0X2lkeF0pOworCWlmIChsaWtlbHkoX19uZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldjApKSkKKwkJX19uZXRpZl9yeF9zY2hlZHVsZShkZXYwKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiaXJxIHJhY2UgZGV0ZWN0ZWRcbiIpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjE3MCw3ICsyMTk5LDcgQEAKIHsKIAl1MTYgc3RhdHVzOwogCXU4IHQ4LCBwbWRfdHlwZTsKLQlpbnQgaSwgZXJyOworCWludCBpOwogCiAJc2t5Ml93cml0ZTgoaHcsIEIwX0NUU1QsIENTX1JTVF9DTFIpOwogCkBAIC0yMTgxLDYgKzIyMTAsMjMgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAorCWh3LT5jaGlwX3JldiA9IChza3kyX3JlYWQ4KGh3LCBCMl9NQUNfQ0ZHKSAmIENGR19DSElQX1JfTVNLKSA+PiA0OworCisJLyogVGhpcyByZXYgaXMgcmVhbGx5IG9sZCwgYW5kIHJlcXVpcmVzIHVudGVzdGVkIHdvcmthcm91bmRzICovCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUMgJiYgaHctPmNoaXBfcmV2ID09IENISVBfUkVWX1lVX0VDX0ExKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bnN1cHBvcnRlZCByZXZpc2lvbiBZdWtvbi0lcyAoMHgleCkgcmV2ICVkXG4iLAorCQkgICAgICAgcGNpX25hbWUoaHctPnBkZXYpLCB5dWtvbjJfbmFtZVtody0+Y2hpcF9pZCAtIENISVBfSURfWVVLT05fWExdLAorCQkgICAgICAgaHctPmNoaXBfaWQsIGh3LT5jaGlwX3Jldik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBUaGlzIGNoaXAgaXMgbmV3IGFuZCBub3QgdGVzdGVkIHlldCAqLworCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpIHsKKwkJcHJfaW5mbyhQRlggIiVzOiBpcyBhIHZlcnNpb24gb2YgWXVrb24gMiBjaGlwc2V0IHRoYXQgaGFzIG5vdCBiZWVuIHRlc3RlZCB5ZXQuXG4iLAorCQkJcGNpX25hbWUoaHctPnBkZXYpKTsKKwkJcHJfaW5mbygiUGxlYXNlIHJlcG9ydCBzdWNjZXNzL2ZhaWx1cmUgdG8gbWFpbnRhaW5lciA8c2hlbW1pbmdlckBvc2RsLm9yZz5cbiIpOworCX0KKwogCS8qIGRpc2FibGUgQVNGICovCiAJaWYgKGh3LT5jaGlwX2lkIDw9IENISVBfSURfWVVLT05fRUMpIHsKIAkJc2t5Ml93cml0ZTgoaHcsIEIyOF9ZMl9BU0ZfU1RBVF9DTUQsIFkyX0FTRl9SRVNFVCk7CkBAIC0yMTkyLDI1ICsyMjM4LDE4IEBACiAJc2t5Ml93cml0ZTgoaHcsIEIwX0NUU1QsIENTX1JTVF9DTFIpOwogCiAJLyogY2xlYXIgUENJIGVycm9ycywgaWYgYW55ICovCi0JZXJyID0gcGNpX3JlYWRfY29uZmlnX3dvcmQoaHctPnBkZXYsIFBDSV9TVEFUVVMsICZzdGF0dXMpOwotCWlmIChlcnIpCi0JCWdvdG8gcGNpX2VycjsKKwlzdGF0dXMgPSBza3kyX3BjaV9yZWFkMTYoaHcsIFBDSV9TVEFUVVMpOwogCiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PTik7Ci0JZXJyID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKGh3LT5wZGV2LCBQQ0lfU1RBVFVTLAotCQkJCSAgICBzdGF0dXMgfCBQQ0lfU1RBVFVTX0VSUk9SX0JJVFMpOwotCWlmIChlcnIpCi0JCWdvdG8gcGNpX2VycjsKKwlza3kyX3BjaV93cml0ZTE2KGh3LCBQQ0lfU1RBVFVTLCBzdGF0dXMgfCBQQ0lfU1RBVFVTX0VSUk9SX0JJVFMpOworCiAKIAlza3kyX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfTVJTVF9DTFIpOwogCiAJLyogY2xlYXIgYW55IFBFWCBlcnJvcnMgKi8KLQlpZiAocGNpX2ZpbmRfY2FwYWJpbGl0eShody0+cGRldiwgUENJX0NBUF9JRF9FWFApKSB7Ci0JCWVyciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQoaHctPnBkZXYsIFBFWF9VTkNfRVJSX1NUQVQsCi0JCQkJCQkgMHhmZmZmZmZmZlVMKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gcGNpX2VycjsKLQl9CisJaWYgKHBjaV9maW5kX2NhcGFiaWxpdHkoaHctPnBkZXYsIFBDSV9DQVBfSURfRVhQKSkKKwkJc2t5Ml9wY2lfd3JpdGUzMihodywgUEVYX1VOQ19FUlJfU1RBVCwgMHhmZmZmZmZmZlVMKTsKKwogCiAJcG1kX3R5cGUgPSBza3kyX3JlYWQ4KGh3LCBCMl9QTURfVFlQKTsKIAlody0+Y29wcGVyID0gIShwbWRfdHlwZSA9PSAnTCcgfHwgcG1kX3R5cGUgPT0gJ1MnKTsKQEAgLTIyMjEsNyArMjI2MCw2IEBACiAJCWlmICghKHNreTJfcmVhZDgoaHcsIEIyX1kyX0NMS19HQVRFKSAmIFkyX1NUQVRVU19MTksyX0lOQUMpKQogCQkJKytody0+cG9ydHM7CiAJfQotCWh3LT5jaGlwX3JldiA9IChza3kyX3JlYWQ4KGh3LCBCMl9NQUNfQ0ZHKSAmIENGR19DSElQX1JfTVNLKSA+PiA0OwogCiAJc2t5Ml9zZXRfcG93ZXJfc3RhdGUoaHcsIFBDSV9EMCk7CiAKQEAgLTIyODcsMzEgKzIzMjUsMTggQEAKIAkvKiBTZXQgdGhlIGxpc3QgbGFzdCBpbmRleCAqLwogCXNreTJfd3JpdGUxNihodywgU1RBVF9MQVNUX0lEWCwgU1RBVFVTX1JJTkdfU0laRSAtIDEpOwogCi0JLyogVGhlc2Ugc3RhdHVzIHNldHVwIHZhbHVlcyBhcmUgY29waWVkIGZyb20gU3lzS29ubmVjdCdzIGRyaXZlciAqLwotCWlmIChpc19lY19hMShodykpIHsKLQkJLyogV0EgZm9yIGRldi4gIzQuMyAqLwotCQlza3kyX3dyaXRlMTYoaHcsIFNUQVRfVFhfSURYX1RILCAweGZmZik7CS8qIFR4IFRocmVzaG9sZCAqLworCXNreTJfd3JpdGUxNihodywgU1RBVF9UWF9JRFhfVEgsIDEwKTsKKwlza3kyX3dyaXRlOChodywgU1RBVF9GSUZPX1dNLCAxNik7CiAKLQkJLyogc2V0IFN0YXR1cy1GSUZPIHdhdGVybWFyayAqLwotCQlza3kyX3dyaXRlOChodywgU1RBVF9GSUZPX1dNLCAweDIxKTsJLyogV0EgZm9yIGRldi4gIzQuMTggKi8KKwkvKiBzZXQgU3RhdHVzLUZJRk8gSVNSIHdhdGVybWFyayAqLworCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMICYmIGh3LT5jaGlwX3JldiA9PSAwKQorCQlza3kyX3dyaXRlOChodywgU1RBVF9GSUZPX0lTUl9XTSwgNCk7CisJZWxzZQorCQlza3kyX3dyaXRlOChodywgU1RBVF9GSUZPX0lTUl9XTSwgMTYpOwogCi0JCS8qIHNldCBTdGF0dXMtRklGTyBJU1Igd2F0ZXJtYXJrICovCi0JCXNreTJfd3JpdGU4KGh3LCBTVEFUX0ZJRk9fSVNSX1dNLCAweDA3KTsJLyogV0EgZm9yIGRldi4gIzQuMTggKi8KLQkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX1RYX1RJTUVSX0lOSSwgc2t5Ml91czJjbGsoaHcsIDEwMDAwKSk7Ci0JfSBlbHNlIHsKLQkJc2t5Ml93cml0ZTE2KGh3LCBTVEFUX1RYX0lEWF9USCwgMTApOwotCQlza3kyX3dyaXRlOChodywgU1RBVF9GSUZPX1dNLCAxNik7Ci0KLQkJLyogc2V0IFN0YXR1cy1GSUZPIElTUiB3YXRlcm1hcmsgKi8KLQkJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgJiYgaHctPmNoaXBfcmV2ID09IDApCi0JCQlza3kyX3dyaXRlOChodywgU1RBVF9GSUZPX0lTUl9XTSwgNCk7Ci0JCWVsc2UKLQkJCXNreTJfd3JpdGU4KGh3LCBTVEFUX0ZJRk9fSVNSX1dNLCAxNik7Ci0KLQkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX1RYX1RJTUVSX0lOSSwgc2t5Ml91czJjbGsoaHcsIDEwMDApKTsKLQkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX0xFVl9USU1FUl9JTkksIHNreTJfdXMyY2xrKGh3LCAxMDApKTsKLQkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX0lTUl9USU1FUl9JTkksIHNreTJfdXMyY2xrKGh3LCAyMCkpOwotCX0KKwlza3kyX3dyaXRlMzIoaHcsIFNUQVRfVFhfVElNRVJfSU5JLCBza3kyX3VzMmNsayhodywgMTAwMCkpOworCXNreTJfd3JpdGUzMihodywgU1RBVF9JU1JfVElNRVJfSU5JLCBza3kyX3VzMmNsayhodywgMjApKTsKKwlza3kyX3dyaXRlMzIoaHcsIFNUQVRfTEVWX1RJTUVSX0lOSSwgc2t5Ml91czJjbGsoaHcsIDEwMCkpOwogCiAJLyogZW5hYmxlIHN0YXR1cyB1bml0ICovCiAJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX0NUUkwsIFNDX1NUQVRfT1BfT04pOwpAQCAtMjMyMSwxNCArMjM0Niw2IEBACiAJc2t5Ml93cml0ZTgoaHcsIFNUQVRfSVNSX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7CiAKIAlyZXR1cm4gMDsKLQotcGNpX2VycjoKLQkvKiBUaGlzIGlzIHRvIGNhdGNoIGEgQklPUyBidWcgd29ya2Fyb3VuZCB3aGVyZQotCSAqIG1tY29uZmlnIHRhYmxlIGRvZXNuJ3QgaGF2ZSBvdGhlciBidXNlcy4KLQkgKi8KLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2FuJ3QgYWNjZXNzIFBDSSBjb25maWcgc3BhY2VcbiIsCi0JICAgICAgIHBjaV9uYW1lKGh3LT5wZGV2KSk7Ci0JcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHUzMiBza3kyX3N1cHBvcnRlZF9tb2Rlcyhjb25zdCBzdHJ1Y3Qgc2t5Ml9odyAqaHcpCkBAIC0yNDYxLDE3ICsyNDc4LDM0IEBACiAJeyAicnhfdW5pY2FzdCIsICAgIEdNX1JYRl9VQ19PSyB9LAogCXsgInR4X21hY19wYXVzZSIsICBHTV9UWEZfTVBBVVNFIH0sCiAJeyAicnhfbWFjX3BhdXNlIiwgIEdNX1JYRl9NUEFVU0UgfSwKLQl7ICJjb2xsaXNpb25zIiwgICAgR01fVFhGX1NOR19DT0wgfSwKKwl7ICJjb2xsaXNpb25zIiwgICAgR01fVFhGX0NPTCB9LAogCXsgImxhdGVfY29sbGlzaW9uIixHTV9UWEZfTEFUX0NPTCB9LAogCXsgImFib3J0ZWQiLCAJICAgR01fVFhGX0FCT19DT0wgfSwKKwl7ICJzaW5nbGVfY29sbGlzaW9ucyIsIEdNX1RYRl9TTkdfQ09MIH0sCiAJeyAibXVsdGlfY29sbGlzaW9ucyIsIEdNX1RYRl9NVUxfQ09MIH0sCi0JeyAiZmlmb191bmRlcnJ1biIsIEdNX1RYRV9GSUZPX1VSIH0sCi0JeyAiZmlmb19vdmVyZmxvdyIsIEdNX1JYRV9GSUZPX09WIH0sCi0JeyAicnhfdG9vbG9uZyIsICAgIEdNX1JYRl9MTkdfRVJSIH0sCi0JeyAicnhfamFiYmVyIiwgICAgIEdNX1JYRl9KQUJfUEtUIH0sCisKKwl7ICJyeF9zaG9ydCIsICAgICAgR01fUlhGX1NIVCB9LAogCXsgInJ4X3J1bnQiLCAJICAgR01fUlhFX0ZSQUcgfSwKKwl7ICJyeF82NF9ieXRlX3BhY2tldHMiLCBHTV9SWEZfNjRCIH0sCisJeyAicnhfNjVfdG9fMTI3X2J5dGVfcGFja2V0cyIsIEdNX1JYRl8xMjdCIH0sCisJeyAicnhfMTI4X3RvXzI1NV9ieXRlX3BhY2tldHMiLCBHTV9SWEZfMjU1QiB9LAorCXsgInJ4XzI1Nl90b181MTFfYnl0ZV9wYWNrZXRzIiwgR01fUlhGXzUxMUIgfSwKKwl7ICJyeF81MTJfdG9fMTAyM19ieXRlX3BhY2tldHMiLCBHTV9SWEZfMTAyM0IgfSwKKwl7ICJyeF8xMDI0X3RvXzE1MThfYnl0ZV9wYWNrZXRzIiwgR01fUlhGXzE1MThCIH0sCisJeyAicnhfMTUxOF90b19tYXhfYnl0ZV9wYWNrZXRzIiwgR01fUlhGX01BWF9TWiB9LAogCXsgInJ4X3Rvb19sb25nIiwgICBHTV9SWEZfTE5HX0VSUiB9LAorCXsgInJ4X2ZpZm9fb3ZlcmZsb3ciLCBHTV9SWEVfRklGT19PViB9LAorCXsgInJ4X2phYmJlciIsICAgICBHTV9SWEZfSkFCX1BLVCB9LAogCXsgInJ4X2Zjc19lcnJvciIsICAgR01fUlhGX0ZDU19FUlIgfSwKKworCXsgInR4XzY0X2J5dGVfcGFja2V0cyIsIEdNX1RYRl82NEIgfSwKKwl7ICJ0eF82NV90b18xMjdfYnl0ZV9wYWNrZXRzIiwgR01fVFhGXzEyN0IgfSwKKwl7ICJ0eF8xMjhfdG9fMjU1X2J5dGVfcGFja2V0cyIsIEdNX1RYRl8yNTVCIH0sCisJeyAidHhfMjU2X3RvXzUxMV9ieXRlX3BhY2tldHMiLCBHTV9UWEZfNTExQiB9LAorCXsgInR4XzUxMl90b18xMDIzX2J5dGVfcGFja2V0cyIsIEdNX1RYRl8xMDIzQiB9LAorCXsgInR4XzEwMjRfdG9fMTUxOF9ieXRlX3BhY2tldHMiLCBHTV9UWEZfMTUxOEIgfSwKKwl7ICJ0eF8xNTE5X3RvX21heF9ieXRlX3BhY2tldHMiLCBHTV9UWEZfTUFYX1NaIH0sCisJeyAidHhfZmlmb191bmRlcnJ1biIsIEdNX1RYRV9GSUZPX1VSIH0sCiB9OwogCiBzdGF0aWMgdTMyIHNreTJfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI1NzMsNyArMjYwNyw3IEBACiAJc2t5Mi0+bmV0X3N0YXRzLnJ4X2J5dGVzID0gZGF0YVsxXTsKIAlza3kyLT5uZXRfc3RhdHMudHhfcGFja2V0cyA9IGRhdGFbMl0gKyBkYXRhWzRdICsgZGF0YVs2XTsKIAlza3kyLT5uZXRfc3RhdHMucnhfcGFja2V0cyA9IGRhdGFbM10gKyBkYXRhWzVdICsgZGF0YVs3XTsKLQlza3kyLT5uZXRfc3RhdHMubXVsdGljYXN0ID0gZGF0YVs1XSArIGRhdGFbN107CisJc2t5Mi0+bmV0X3N0YXRzLm11bHRpY2FzdCA9IGRhdGFbM10gKyBkYXRhWzVdOwogCXNreTItPm5ldF9zdGF0cy5jb2xsaXNpb25zID0gZGF0YVsxMF07CiAJc2t5Mi0+bmV0X3N0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0gZGF0YVsxMl07CiAKQEAgLTI3MDIsNyArMjczNiw3IEBACiAJCW1zID0gZGF0YSAqIDEwMDA7CiAKIAkvKiBzYXZlIGluaXRpYWwgdmFsdWVzICovCi0JZG93bigmc2t5Mi0+cGh5X3NlbWEpOworCXNwaW5fbG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMKSB7CiAJCXUxNiBwZyA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSKTsKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAzKTsKQEAgLTI3MTgsOSArMjc1Miw5IEBACiAJCXNreTJfbGVkKGh3LCBwb3J0LCBvbm9mZik7CiAJCW9ub2ZmID0gIW9ub2ZmOwogCi0JCXVwKCZza3kyLT5waHlfc2VtYSk7CisJCXNwaW5fdW5sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CiAJCWludGVycnVwdGVkID0gbXNsZWVwX2ludGVycnVwdGlibGUoMjUwKTsKLQkJZG93bigmc2t5Mi0+cGh5X3NlbWEpOworCQlzcGluX2xvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKIAogCQltcyAtPSAyNTA7CiAJfQpAQCAtMjczNSw3ICsyNzY5LDcgQEAKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9MRURfQ1RSTCwgbGVkY3RybCk7CiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfTEVEX09WRVIsIGxlZG92ZXIpOwogCX0KLQl1cCgmc2t5Mi0+cGh5X3NlbWEpOworCXNwaW5fdW5sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3NjUsMzggKzI3OTksNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB2b2lkIHNreTJfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCi17Ci0Jc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUM7Ci0Jd29sLT53b2xvcHRzID0gc2t5Mi0+d29sID8gV0FLRV9NQUdJQyA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2t5Ml9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKLXsKLQlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKLQotCWlmICh3b2wtPndvbG9wdHMgIT0gV0FLRV9NQUdJQyAmJiB3b2wtPndvbG9wdHMgIT0gMCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0Jc2t5Mi0+d29sID0gd29sLT53b2xvcHRzID09IFdBS0VfTUFHSUM7Ci0KLQlpZiAoc2t5Mi0+d29sKSB7Ci0JCW1lbWNweV90b2lvKGh3LT5yZWdzICsgV09MX01BQ19BRERSLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0KLQkJc2t5Ml93cml0ZTE2KGh3LCBXT0xfQ1RSTF9TVEFULAotCQkJICAgICBXT0xfQ1RMX0VOQV9QTUVfT05fTUFHSUNfUEtUIHwKLQkJCSAgICAgV09MX0NUTF9FTkFfTUFHSUNfUEtUX1VOSVQpOwotCX0gZWxzZQotCQlza3kyX3dyaXRlMTYoaHcsIFdPTF9DVFJMX1NUQVQsIFdPTF9DVExfREVGQVVMVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHNreTJfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplY21kKQogewpAQCAtMjgzNywyNiArMjgzOSwxOCBAQAogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwotCWNvbnN0IHUzMiB0bWluID0gc2t5Ml9jbGsydXMoaHcsIDEpOwotCWNvbnN0IHUzMiB0bWF4ID0gNTAwMDsKKwljb25zdCB1MzIgdG1heCA9IHNreTJfY2xrMnVzKGh3LCAweDBmZmZmZmYpOwogCi0JaWYgKGVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzICE9IDAgJiYKLQkgICAgKGVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzIDwgdG1pbiB8fCBlY21kLT50eF9jb2FsZXNjZV91c2VjcyA+IHRtYXgpKQorCWlmIChlY21kLT50eF9jb2FsZXNjZV91c2VjcyA+IHRtYXggfHwKKwkgICAgZWNtZC0+cnhfY29hbGVzY2VfdXNlY3MgPiB0bWF4IHx8CisJICAgIGVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA+IHRtYXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzICE9IDAgJiYKLQkgICAgKGVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzIDwgdG1pbiB8fCBlY21kLT5yeF9jb2FsZXNjZV91c2VjcyA+IHRtYXgpKQorCWlmIChlY21kLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA+PSBUWF9SSU5HX1NJWkUtMSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZWNtZC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxICE9IDAgJiYKLQkgICAgKGVjbWQtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA8IHRtaW4gfHwgZWNtZC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxID4gdG1heCkpCisJaWYgKGVjbWQtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gUlhfTUFYX1BFTkRJTkcpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGVjbWQtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gMHhmZmZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZWNtZC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZWNtZC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxID4gMHhmZikKKwlpZiAoZWNtZC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxID5SWF9NQVhfUEVORElORykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZWNtZC0+dHhfY29hbGVzY2VfdXNlY3MgPT0gMCkKQEAgLTI5ODQsMTAgKzI5NzgsNiBAQAogCS5zZXRfcmluZ3BhcmFtID0gc2t5Ml9zZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IHNreTJfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gc2t5Ml9zZXRfcGF1c2VwYXJhbSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuZ2V0X3dvbCA9IHNreTJfZ2V0X3dvbCwKLQkuc2V0X3dvbCA9IHNreTJfc2V0X3dvbCwKLSNlbmRpZgogCS5waHlzX2lkID0gc2t5Ml9waHlzX2lkLAogCS5nZXRfc3RhdHNfY291bnQgPSBza3kyX2dldF9zdGF0c19jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBza3kyX2dldF9ldGh0b29sX3N0YXRzLApAQCAtMzA0MSwxNiArMzAzMSwxNSBAQAogCXNreTItPnNwZWVkID0gLTE7CiAJc2t5Mi0+YWR2ZXJ0aXNpbmcgPSBza3kyX3N1cHBvcnRlZF9tb2Rlcyhodyk7CiAKLSAJLyogUmVjZWl2ZSBjaGVja3N1bSBkaXNhYmxlZCBmb3IgWXVrb24gWEwKKwkvKiBSZWNlaXZlIGNoZWNrc3VtIGRpc2FibGVkIGZvciBZdWtvbiBYTAogCSAqIGJlY2F1c2Ugb2Ygb2JzZXJ2ZWQgcHJvYmxlbXMgd2l0aCBpbmNvcnJlY3QKIAkgKiB2YWx1ZXMgd2hlbiBtdWx0aXBsZSBwYWNrZXRzIGFyZSByZWNlaXZlZCBpbiBvbmUgaW50ZXJydXB0CiAJICovCiAJc2t5Mi0+cnhfY3N1bSA9IChody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX1hMKTsKIAotCUlOSVRfV09SSygmc2t5Mi0+cGh5X3Rhc2ssIHNreTJfcGh5X3Rhc2ssIHNreTIpOwotCWluaXRfTVVURVgoJnNreTItPnBoeV9zZW1hKTsKKwlzcGluX2xvY2tfaW5pdCgmc2t5Mi0+cGh5X2xvY2spOwogCXNreTItPnR4X3BlbmRpbmcgPSBUWF9ERUZfUEVORElORzsKLQlza3kyLT5yeF9wZW5kaW5nID0gaXNfZWNfYTEoaHcpID8gOCA6IFJYX0RFRl9QRU5ESU5HOworCXNreTItPnJ4X3BlbmRpbmcgPSBSWF9ERUZfUEVORElORzsKIAlza3kyLT5yeF9idWZzaXplID0gc2t5Ml9idWZfc2l6ZShFVEhfREFUQV9MRU4pOwogCiAJaHctPmRldltwb3J0XSA9IGRldjsKQEAgLTMxMDMsMTIgKzMwOTIsMTIgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKHN0YXR1cyAmIFkyX0lTX0lSUV9TVykgeworCQlody0+bXNpX2RldGVjdGVkID0gMTsKKwkJd2FrZV91cCgmaHctPm1zaV93YWl0KTsKIAkJc2t5Ml93cml0ZTgoaHcsIEIwX0NUU1QsIENTX0NMX1NXX0lSUSk7Ci0JCWh3LT5tc2kgPSAxOwogCX0KIAlza3kyX3dyaXRlMzIoaHcsIEIwX1kyX1NQX0lDUiwgMik7CiAKLQlza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0zMTE2LDcgKzMxMDUsNyBAQAogc3RhdGljIGludCBfX2RldmluaXQgc2t5Ml90ZXN0X21zaShzdHJ1Y3Qgc2t5Ml9odyAqaHcpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBody0+cGRldjsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0lSUV9TVyk7CiAKQEAgLTMxMjcsMTkgKzMxMTYsMjQgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmaHctPm1zaV93YWl0KTsKKwogCXNreTJfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19TVF9TV19JUlEpOwogCXdtYigpOwogCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJYmFycmllcigpOwotCQlpZiAoaHctPm1zaSkKLQkJCWdvdG8gZm91bmQ7Ci0JCW1kZWxheSgxKTsKKwl3YWl0X2V2ZW50X3RpbWVvdXQoaHctPm1zaV93YWl0LCBody0+bXNpX2RldGVjdGVkLCBIWi8xMCk7CisKKwlpZiAoIWh3LT5tc2lfZGV0ZWN0ZWQpIHsKKwkJLyogTVNJIHRlc3QgZmFpbGVkLCBnbyBiYWNrIHRvIElOVHggbW9kZSAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IE5vIGludGVycnVwdCB3YXMgZ2VuZXJhdGVkIHVzaW5nIE1TSSwgIgorCQkgICAgICAgInN3aXRjaGluZyB0byBJTlR4IG1vZGUuIFBsZWFzZSByZXBvcnQgdGhpcyBmYWlsdXJlIHRvICIKKwkJICAgICAgICJ0aGUgUENJIG1haW50YWluZXIgYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb24uXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlza3kyX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfQ0xfU1dfSVJRKTsKIAl9CiAKLQllcnIgPSAtRU9QTk9UU1VQUDsKLQlza3kyX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfQ0xfU1dfSVJRKTsKLSBmb3VuZDoKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOwogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBodyk7CkBAIC0zMTk4LDE3ICszMTkyLDYgQEAKIAkJfQogCX0KIAotI2lmZGVmIF9fQklHX0VORElBTgotCS8qIGJ5dGUgc3dhcCBkZXNjcmlwdG9ycyBpbiBoYXJkd2FyZSAqLwotCXsKLQkJdTMyIHJlZzsKLQotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0RFVl9SRUcyLCAmcmVnKTsKLQkJcmVnIHw9IFBDSV9SRVZfREVTQzsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfREVWX1JFRzIsIHJlZyk7Ci0JfQotI2VuZGlmCi0KIAllcnIgPSAtRU5PTUVNOwogCWh3ID0ga3phbGxvYyhzaXplb2YoKmh3KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFodykgewpAQCAtMzIyNyw2ICszMjEwLDE3IEBACiAJfQogCWh3LT5wbV9jYXAgPSBwbV9jYXA7CiAKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkvKiBieXRlIHN3YXAgZGVzY3JpcHRvcnMgaW4gaGFyZHdhcmUgKi8KKwl7CisJCXUzMiByZWc7CisKKwkJcmVnID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzIpOworCQlyZWcgfD0gUENJX1JFVl9ERVNDOworCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzIsIHJlZyk7CisJfQorI2VuZGlmCisKIAkvKiByaW5nIGZvciBzdGF0dXMgcmVzcG9uc2VzICovCiAJaHctPnN0X2xlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaHctPnBkZXYsIFNUQVRVU19MRV9CWVRFUywKIAkJCQkJICZody0+c3RfZG1hKTsKQEAgLTMyNjksMzYgKzMyNjMsMjcgQEAKIAogCWlmICghZGlzYWJsZV9tc2kgJiYgcGNpX2VuYWJsZV9tc2kocGRldikgPT0gMCkgewogCQllcnIgPSBza3kyX3Rlc3RfbXNpKGh3KTsKLQkJaWYgKGVyciA9PSAtRU9QTk9UU1VQUCkgewotCQkJLyogTVNJIHRlc3QgZmFpbGVkLCBnbyBiYWNrIHRvIElOVHggbW9kZSAqLwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBObyBpbnRlcnJ1cHQgd2FzIGdlbmVyYXRlZCB1c2luZyBNU0ksICIKLQkJCSAgICAgICAic3dpdGNoaW5nIHRvIElOVHggbW9kZS4gUGxlYXNlIHJlcG9ydCB0aGlzIGZhaWx1cmUgdG8gIgotCQkJICAgICAgICJ0aGUgUENJIG1haW50YWluZXIgYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb24uXG4iLAotCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKLQkJfQorCQlpZiAoZXJyID09IC1FT1BOT1RTVVBQKQorIAkJCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKIAkJZWxzZSBpZiAoZXJyKQogCQkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7Ci0JfQorIAl9CiAKLQllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNreTJfaW50ciwgU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NLAotCQkJICBEUlZfTkFNRSwgaHcpOworCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgIHNreTJfaW50ciwgU0FfU0hJUlEsIERSVl9OQU1FLCBodyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2Fubm90IGFzc2lnbiBpcnEgJWRcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKIAkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7CiAJfQogCi0JaHctPmludHJfbWFzayA9IFkyX0lTX0JBU0U7Ci0Jc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKKwlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0JBU0UpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKIAogCXJldHVybiAwOwogCiBlcnJfb3V0X3VucmVnaXN0ZXI6Ci0JaWYgKGh3LT5tc2kpCi0JCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwlwY2lfZGlzYWJsZV9tc2kocGRldik7CiAJaWYgKGRldjEpIHsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2MSk7CiAJCWZyZWVfbmV0ZGV2KGRldjEpOwpAQCAtMzM0MSw4ICszMzI2LDcgQEAKIAlza3kyX3JlYWQ4KGh3LCBCMF9DVFNUKTsKIAogCWZyZWVfaXJxKHBkZXYtPmlycSwgaHcpOwotCWlmIChody0+bXNpKQotCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CisJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgU1RBVFVTX0xFX0JZVEVTLCBody0+c3RfbGUsIGh3LT5zdF9kbWEpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IGZkMTJjMjguLjYyNTMyYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuaAorKysgYi9kcml2ZXJzL25ldC9za3kyLmgKQEAgLTUsMTQgKzUsMjIgQEAKICNkZWZpbmUgX1NLWTJfSAogCiAvKiBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLwotI2RlZmluZSBQQ0lfREVWX1JFRzEJMHg0MAotI2RlZmluZSBQQ0lfREVWX1JFRzIJMHg0NAotI2RlZmluZSBQQ0lfREVWX1NUQVRVUyAgMHg3YwotI2RlZmluZSBQQ0lfT1NfUENJX1ggICAgKDE8PDI2KQorZW51bSB7CisJUENJX0RFVl9SRUcxCT0gMHg0MCwKKwlQQ0lfREVWX1JFRzIJPSAweDQ0LAorCVBDSV9ERVZfU1RBVFVTICA9IDB4N2MsCisJUENJX0RFVl9SRUczCT0gMHg4MCwKKwlQQ0lfREVWX1JFRzQJPSAweDg0LAorCVBDSV9ERVZfUkVHNSAgICA9IDB4ODgsCit9OwogCi0jZGVmaW5lIFBFWF9MTktfU1RBVAkweGYyCi0jZGVmaW5lIFBFWF9VTkNfRVJSX1NUQVQgMHgxMDQKLSNkZWZpbmUgUEVYX0RFVl9DVFJMCTB4ZTgKK2VudW0geworCVBFWF9ERVZfQ0FQCT0gMHhlNCwKKwlQRVhfREVWX0NUUkwJPSAweGU4LAorCVBFWF9ERVZfU1RBCT0gMHhlYSwKKwlQRVhfTE5LX1NUQVQJPSAweGYyLAorCVBFWF9VTkNfRVJSX1NUQVQ9IDB4MTA0LAorfTsKIAogLyogWXVrb24tMiAqLwogZW51bSBwY2lfZGV2X3JlZ18xIHsKQEAgLTM3LDYgKzQ1LDI1IEBACiAJUENJX1VTRURBVEE2NAk9IDE8PDAsCQkvKiBVc2UgNjRCaXQgRGF0YSBidXMgZXh0ICovCiB9OwogCisvKglQQ0lfT1VSX1JFR180CQkzMiBiaXQJT3VyIFJlZ2lzdGVyIDQgKFl1a29uLUVDVSBvbmx5KSAqLworZW51bSBwY2lfZGV2X3JlZ180IHsKKwkJCQkJLyogKExpbmsgVHJhaW5pbmcgJiBTdGF0dXMgU3RhdGUgTWFjaGluZSkgKi8KKwlQX1RJTUVSX1ZBTFVFX01TSwk9IDB4ZmZMPDwxNiwJLyogQml0IDIzLi4xNjoJVGltZXIgVmFsdWUgTWFzayAqLworCQkJCQkvKiAoQWN0aXZlIFN0YXRlIFBvd2VyIE1hbmFnZW1lbnQpICovCisJUF9GT1JDRV9BU1BNX1JFUVVFU1QJPSAxPDwxNSwgLyogRm9yY2UgQVNQTSBSZXF1ZXN0IChBMSBvbmx5KSAqLworCVBfQVNQTV9HUEhZX0xJTktfRE9XTgk9IDE8PDE0LCAvKiBHUEhZIExpbmsgRG93biAoQTEgb25seSkgKi8KKwlQX0FTUE1fSU5UX0ZJRk9fRU1QVFkJPSAxPDwxMywgLyogSW50ZXJuYWwgRklGTyBFbXB0eSAoQTEgb25seSkgKi8KKwlQX0FTUE1fQ0xLUlVOX1JFUVVFU1QJPSAxPDwxMiwgLyogQ0xLUlVOIFJlcXVlc3QgKEExIG9ubHkpICovCisKKwlQX0FTUE1fRk9SQ0VfQ0xLUkVRX0VOQQk9IDE8PDQsCS8qIEZvcmNlIENMS1JFUSBFbmFibGUgKEExYiBvbmx5KSAqLworCVBfQVNQTV9DTEtSRVFfUEFEX0NUTAk9IDE8PDMsCS8qIENMS1JFUSBQQUQgQ29udHJvbCAoQTEgb25seSkgKi8KKwlQX0FTUE1fQTFfTU9ERV9TRUxFQ1QJPSAxPDwyLAkvKiBBMSBNb2RlIFNlbGVjdCAoQTEgb25seSkgKi8KKwlQX0NMS19HQVRFX1BFWF9VTklUX0VOQQk9IDE8PDEsCS8qIEVuYWJsZSBHYXRlIFBFWCBVbml0IENsb2NrICovCisJUF9DTEtfR0FURV9ST09UX0NPUl9FTkEJPSAxPDwwLAkvKiBFbmFibGUgR2F0ZSBSb290IENvcmUgQ2xvY2sgKi8KKwlQX0FTUE1fQ09OVFJPTF9NU0sJPSBQX0ZPUkNFX0FTUE1fUkVRVUVTVCB8IFBfQVNQTV9HUEhZX0xJTktfRE9XTgorCQkJCSAgfCBQX0FTUE1fQ0xLUlVOX1JFUVVFU1QgfCBQX0FTUE1fSU5UX0ZJRk9fRU1QVFksCit9OworCiAKICNkZWZpbmUgUENJX1NUQVRVU19FUlJPUl9CSVRTIChQQ0lfU1RBVFVTX0RFVEVDVEVEX1BBUklUWSB8IFwKIAkJCSAgICAgICBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgfCBcCkBAIC0yNTEsMTMgKzI3OCwxMSBAQAogCVkyX0lTX0NIS19UWFMxCT0gMTw8MSwJCS8qIERlc2NyaXB0b3IgZXJyb3IgVFhTIDEgKi8KIAlZMl9JU19DSEtfVFhBMQk9IDE8PDAsCQkvKiBEZXNjcmlwdG9yIGVycm9yIFRYQSAxICovCiAKLQlZMl9JU19CQVNFCT0gWTJfSVNfSFdfRVJSIHwgWTJfSVNfU1RBVF9CTVUgfAotCQkJICBZMl9JU19QT0xMX0NISyB8IFkyX0lTX1RXU0lfUkRZIHwKLQkJCSAgWTJfSVNfSVJRX1NXIHwgWTJfSVNfVElNSU5ULAotCVkyX0lTX1BPUlRfMQk9IFkyX0lTX0lSUV9QSFkxIHwgWTJfSVNfSVJRX01BQzEgfAotCQkJICBZMl9JU19DSEtfUlgxIHwgWTJfSVNfQ0hLX1RYQTEgfCBZMl9JU19DSEtfVFhTMSwKLQlZMl9JU19QT1JUXzIJPSBZMl9JU19JUlFfUEhZMiB8IFkyX0lTX0lSUV9NQUMyIHwKLQkJCSAgWTJfSVNfQ0hLX1JYMiB8IFkyX0lTX0NIS19UWEEyIHwgWTJfSVNfQ0hLX1RYUzIsCisJWTJfSVNfQkFTRQk9IFkyX0lTX0hXX0VSUiB8IFkyX0lTX1NUQVRfQk1VLAorCVkyX0lTX1BPUlRfMQk9IFkyX0lTX0lSUV9QSFkxIHwgWTJfSVNfSVJRX01BQzEKKwkJICAgICAgICAgIHwgWTJfSVNfQ0hLX1RYQTEgfCBZMl9JU19DSEtfUlgxLAorCVkyX0lTX1BPUlRfMgk9IFkyX0lTX0lSUV9QSFkyIHwgWTJfSVNfSVJRX01BQzIKKwkJCSAgfCBZMl9JU19DSEtfVFhBMiB8IFkyX0lTX0NIS19SWDIsCiB9OwogCiAvKglCMl9JUlFNX0hXRV9NU0sJMzIgYml0CUlSUSBNb2RlcmF0aW9uIEhXIEVycm9yIE1hc2sgKi8KQEAgLTUwNyw2ICs1MzIsMTYgQEAKIH07CiAjZGVmaW5lIFFfQUREUihyZWcsIG9mZnMpIChCOF9RX1JFR1MgKyAocmVnKSArIChvZmZzKSkKIAorLyoJUV9GCQkJCTMyIGJpdAlGbGFnIFJlZ2lzdGVyICovCitlbnVtIHsKKwlGX0FMTV9GVUxMCT0gMTw8MjcsIC8qIFJ4IEZJRk86IGFsbW9zdCBmdWxsICovCisJRl9FTVBUWQkJPSAxPDwyNywgLyogVHggRklGTzogZW1wdHkgZmxhZyAqLworCUZfRklGT19FT0YJPSAxPDwyNiwgLyogVGFnIChFT0YgRmxhZykgYml0IGluIEZJRk8gKi8KKwlGX1dNX1JFQUNIRUQJPSAxPDwyNSwgLyogV2F0ZXJtYXJrIHJlYWNoZWQgKi8KKwlGX01fUlhfUkFNX0RJUwk9IDE8PDI0LCAvKiBNQUMgUnggUkFNIFJlYWQgUG9ydCBkaXNhYmxlICovCisJRl9GSUZPX0xFVkVMCT0gMHgxZkw8PDE2LCAvKiBCaXQgMjMuLjE2OgkjIG9mIFF3b3JkcyBpbiBGSUZPICovCisJRl9XQVRFUl9NQVJLCT0gMHgwMDA3ZmZMLCAvKiBCaXQgMTAuLiAwOglXYXRlcm1hcmsgKi8KK307CiAKIC8qIFF1ZXVlIFByZWZldGNoIFVuaXQgT2Zmc2V0cywgdXNlIFkyX1FBRERSKCkgdG8gYWRkcmVzcyAoWXVrb24tMiBvbmx5KSovCiBlbnVtIHsKQEAgLTkwOSwxMCArOTQ0LDEyIEBACiAJUEhZX0JDT01fSUQxX0MwCT0gMHg2MDQ0LAogCVBIWV9CQ09NX0lEMV9DNQk9IDB4NjA0NywKIAotCVBIWV9NQVJWX0lEMV9CMAk9IDB4MEMyMywgLyogWXVrb24gKFBIWSA4OEUxMDExKSAqLworCVBIWV9NQVJWX0lEMV9CMAk9IDB4MEMyMywgLyogWXVrb24gCShQSFkgODhFMTAxMSkgKi8KIAlQSFlfTUFSVl9JRDFfQjIJPSAweDBDMjUsIC8qIFl1a29uLVBsdXMgKFBIWSA4OEUxMDExKSAqLwotCVBIWV9NQVJWX0lEMV9DMgk9IDB4MENDMiwgLyogWXVrb24tRUMgKFBIWSA4OEUxMTExKSAqLwotCVBIWV9NQVJWX0lEMV9ZMgk9IDB4MEM5MSwgLyogWXVrb24tMiAoUEhZIDg4RTExMTIpICovCisJUEhZX01BUlZfSUQxX0MyCT0gMHgwQ0MyLCAvKiBZdWtvbi1FQwkoUEhZIDg4RTExMTEpICovCisJUEhZX01BUlZfSUQxX1kyCT0gMHgwQzkxLCAvKiBZdWtvbi0yCShQSFkgODhFMTExMikgKi8KKwlQSFlfTUFSVl9JRDFfRkUgPSAweDBDODMsIC8qIFl1a29uLUZFICAgKFBIWSA4OEUzMDgyIFJldi5BMSkgKi8KKwlQSFlfTUFSVl9JRDFfRUNVPSAweDBDQjAsIC8qIFl1a29uLUVDVSAgKFBIWSA4OEUxMTQ5IFJldi5CMj8pICovCiB9OwogCiAvKiBBZHZlcnRpc2VtZW50IHJlZ2lzdGVyIGJpdHMgKi8KQEAgLTEzMzYsMjMgKzEzNzMsMjMgQEAKIAlHTV9TTUlfQ1RSTAk9IDB4MDA4MCwJLyogMTYgYml0IHIvdwlTTUkgQ29udHJvbCBSZWdpc3RlciAqLwogCUdNX1NNSV9EQVRBCT0gMHgwMDg0LAkvKiAxNiBiaXQgci93CVNNSSBEYXRhIFJlZ2lzdGVyICovCiAJR01fUEhZX0FERFIJPSAweDAwODgsCS8qIDE2IGJpdCByL3cJR1BIWSBBZGRyZXNzIFJlZ2lzdGVyICovCisvKiBNSUIgQ291bnRlcnMgKi8KKwlHTV9NSUJfQ05UX0JBU0UJPSAweDAxMDAsCS8qIEJhc2UgQWRkcmVzcyBvZiBNSUIgQ291bnRlcnMgKi8KKwlHTV9NSUJfQ05UX1NJWkUJPSAyNTYsCiB9OwogCi0vKiBNSUIgQ291bnRlcnMgKi8KLSNkZWZpbmUgR01fTUlCX0NOVF9CQVNFCTB4MDEwMAkJLyogQmFzZSBBZGRyZXNzIG9mIE1JQiBDb3VudGVycyAqLwotI2RlZmluZSBHTV9NSUJfQ05UX1NJWkUJNDQJCS8qIE51bWJlciBvZiBNSUIgQ291bnRlcnMgKi8KIAogLyoKICAqIE1JQiBDb3VudGVycyBiYXNlIGFkZHJlc3MgZGVmaW5pdGlvbnMgKGxvdyB3b3JkKSAtCiAgKiB1c2Ugb2Zmc2V0IDQgZm9yIGFjY2VzcyB0byBoaWdoIHdvcmQJKDMyIGJpdCByL28pCiAgKi8KIGVudW0gewotCUdNX1JYRl9VQ19PSyAgPSBHTV9NSUJfQ05UX0JBU0UgKyAwLAkvKiBVbmljYXN0IEZyYW1lcyBSZWNlaXZlZCBPSyAqLworCUdNX1JYRl9VQ19PSyAgICA9IEdNX01JQl9DTlRfQkFTRSArIDAsCS8qIFVuaWNhc3QgRnJhbWVzIFJlY2VpdmVkIE9LICovCiAJR01fUlhGX0JDX09LCT0gR01fTUlCX0NOVF9CQVNFICsgOCwJLyogQnJvYWRjYXN0IEZyYW1lcyBSZWNlaXZlZCBPSyAqLwogCUdNX1JYRl9NUEFVU0UJPSBHTV9NSUJfQ05UX0JBU0UgKyAxNiwJLyogUGF1c2UgTUFDIEN0cmwgRnJhbWVzIFJlY2VpdmVkICovCiAJR01fUlhGX01DX09LCT0gR01fTUlCX0NOVF9CQVNFICsgMjQsCS8qIE11bHRpY2FzdCBGcmFtZXMgUmVjZWl2ZWQgT0sgKi8KIAlHTV9SWEZfRkNTX0VSUgk9IEdNX01JQl9DTlRfQkFTRSArIDMyLAkvKiBSeCBGcmFtZSBDaGVjayBTZXEuIEVycm9yICovCi0JLyogR01fTUlCX0NOVF9CQVNFICsgNDA6CXJlc2VydmVkICovCisKIAlHTV9SWE9fT0tfTE8JPSBHTV9NSUJfQ05UX0JBU0UgKyA0OCwJLyogT2N0ZXRzIFJlY2VpdmVkIE9LIExvdyAqLwogCUdNX1JYT19PS19ISQk9IEdNX01JQl9DTlRfQkFTRSArIDU2LAkvKiBPY3RldHMgUmVjZWl2ZWQgT0sgSGlnaCAqLwogCUdNX1JYT19FUlJfTE8JPSBHTV9NSUJfQ05UX0JBU0UgKyA2NCwJLyogT2N0ZXRzIFJlY2VpdmVkIEludmFsaWQgTG93ICovCkBAIC0xMzYwLDM3ICsxMzk3LDM2IEBACiAJR01fUlhGX1NIVAk9IEdNX01JQl9DTlRfQkFTRSArIDgwLAkvKiBGcmFtZXMgPDY0IEJ5dGUgUmVjZWl2ZWQgT0sgKi8KIAlHTV9SWEVfRlJBRwk9IEdNX01JQl9DTlRfQkFTRSArIDg4LAkvKiBGcmFtZXMgPDY0IEJ5dGUgUmVjZWl2ZWQgd2l0aCBGQ1MgRXJyICovCiAJR01fUlhGXzY0Qgk9IEdNX01JQl9DTlRfQkFTRSArIDk2LAkvKiA2NCBCeXRlIFJ4IEZyYW1lICovCi0JR01fUlhGXzEyN0IJPSBHTV9NSUJfQ05UX0JBU0UgKyAxMDQsCS8qIDY1LTEyNyBCeXRlIFJ4IEZyYW1lICovCi0JR01fUlhGXzI1NUIJPSBHTV9NSUJfQ05UX0JBU0UgKyAxMTIsCS8qIDEyOC0yNTUgQnl0ZSBSeCBGcmFtZSAqLwotCUdNX1JYRl81MTFCCT0gR01fTUlCX0NOVF9CQVNFICsgMTIwLAkvKiAyNTYtNTExIEJ5dGUgUnggRnJhbWUgKi8KLQlHTV9SWEZfMTAyM0IJPSBHTV9NSUJfQ05UX0JBU0UgKyAxMjgsCS8qIDUxMi0xMDIzIEJ5dGUgUnggRnJhbWUgKi8KLQlHTV9SWEZfMTUxOEIJPSBHTV9NSUJfQ05UX0JBU0UgKyAxMzYsCS8qIDEwMjQtMTUxOCBCeXRlIFJ4IEZyYW1lICovCi0JR01fUlhGX01BWF9TWgk9IEdNX01JQl9DTlRfQkFTRSArIDE0NCwJLyogMTUxOS1NYXhTaXplIEJ5dGUgUnggRnJhbWUgKi8KLQlHTV9SWEZfTE5HX0VSUgk9IEdNX01JQl9DTlRfQkFTRSArIDE1MiwJLyogUnggRnJhbWUgdG9vIExvbmcgRXJyb3IgKi8KLQlHTV9SWEZfSkFCX1BLVAk9IEdNX01JQl9DTlRfQkFTRSArIDE2MCwJLyogUnggSmFiYmVyIFBhY2tldCBGcmFtZSAqLwotCS8qIEdNX01JQl9DTlRfQkFTRSArIDE2ODoJcmVzZXJ2ZWQgKi8KLQlHTV9SWEVfRklGT19PVgk9IEdNX01JQl9DTlRfQkFTRSArIDE3NiwJLyogUnggRklGTyBvdmVyZmxvdyBFdmVudCAqLwotCS8qIEdNX01JQl9DTlRfQkFTRSArIDE4NDoJcmVzZXJ2ZWQgKi8KLQlHTV9UWEZfVUNfT0sJPSBHTV9NSUJfQ05UX0JBU0UgKyAxOTIsCS8qIFVuaWNhc3QgRnJhbWVzIFhtaXR0ZWQgT0sgKi8KLQlHTV9UWEZfQkNfT0sJPSBHTV9NSUJfQ05UX0JBU0UgKyAyMDAsCS8qIEJyb2FkY2FzdCBGcmFtZXMgWG1pdHRlZCBPSyAqLwotCUdNX1RYRl9NUEFVU0UJPSBHTV9NSUJfQ05UX0JBU0UgKyAyMDgsCS8qIFBhdXNlIE1BQyBDdHJsIEZyYW1lcyBYbWl0dGVkICovCi0JR01fVFhGX01DX09LCT0gR01fTUlCX0NOVF9CQVNFICsgMjE2LAkvKiBNdWx0aWNhc3QgRnJhbWVzIFhtaXR0ZWQgT0sgKi8KLQlHTV9UWE9fT0tfTE8JPSBHTV9NSUJfQ05UX0JBU0UgKyAyMjQsCS8qIE9jdGV0cyBUcmFuc21pdHRlZCBPSyBMb3cgKi8KLQlHTV9UWE9fT0tfSEkJPSBHTV9NSUJfQ05UX0JBU0UgKyAyMzIsCS8qIE9jdGV0cyBUcmFuc21pdHRlZCBPSyBIaWdoICovCi0JR01fVFhGXzY0Qgk9IEdNX01JQl9DTlRfQkFTRSArIDI0MCwJLyogNjQgQnl0ZSBUeCBGcmFtZSAqLwotCUdNX1RYRl8xMjdCCT0gR01fTUlCX0NOVF9CQVNFICsgMjQ4LAkvKiA2NS0xMjcgQnl0ZSBUeCBGcmFtZSAqLwotCUdNX1RYRl8yNTVCCT0gR01fTUlCX0NOVF9CQVNFICsgMjU2LAkvKiAxMjgtMjU1IEJ5dGUgVHggRnJhbWUgKi8KLQlHTV9UWEZfNTExQgk9IEdNX01JQl9DTlRfQkFTRSArIDI2NCwJLyogMjU2LTUxMSBCeXRlIFR4IEZyYW1lICovCi0JR01fVFhGXzEwMjNCCT0gR01fTUlCX0NOVF9CQVNFICsgMjcyLAkvKiA1MTItMTAyMyBCeXRlIFR4IEZyYW1lICovCi0JR01fVFhGXzE1MThCCT0gR01fTUlCX0NOVF9CQVNFICsgMjgwLAkvKiAxMDI0LTE1MTggQnl0ZSBUeCBGcmFtZSAqLwotCUdNX1RYRl9NQVhfU1oJPSBHTV9NSUJfQ05UX0JBU0UgKyAyODgsCS8qIDE1MTktTWF4U2l6ZSBCeXRlIFR4IEZyYW1lICovCisJR01fUlhGXzEyN0IJPSBHTV9NSUJfQ05UX0JBU0UgKyAxMDQsLyogNjUtMTI3IEJ5dGUgUnggRnJhbWUgKi8KKwlHTV9SWEZfMjU1Qgk9IEdNX01JQl9DTlRfQkFTRSArIDExMiwvKiAxMjgtMjU1IEJ5dGUgUnggRnJhbWUgKi8KKwlHTV9SWEZfNTExQgk9IEdNX01JQl9DTlRfQkFTRSArIDEyMCwvKiAyNTYtNTExIEJ5dGUgUnggRnJhbWUgKi8KKwlHTV9SWEZfMTAyM0IJPSBHTV9NSUJfQ05UX0JBU0UgKyAxMjgsLyogNTEyLTEwMjMgQnl0ZSBSeCBGcmFtZSAqLworCUdNX1JYRl8xNTE4Qgk9IEdNX01JQl9DTlRfQkFTRSArIDEzNiwvKiAxMDI0LTE1MTggQnl0ZSBSeCBGcmFtZSAqLworCUdNX1JYRl9NQVhfU1oJPSBHTV9NSUJfQ05UX0JBU0UgKyAxNDQsLyogMTUxOS1NYXhTaXplIEJ5dGUgUnggRnJhbWUgKi8KKwlHTV9SWEZfTE5HX0VSUgk9IEdNX01JQl9DTlRfQkFTRSArIDE1MiwvKiBSeCBGcmFtZSB0b28gTG9uZyBFcnJvciAqLworCUdNX1JYRl9KQUJfUEtUCT0gR01fTUlCX0NOVF9CQVNFICsgMTYwLC8qIFJ4IEphYmJlciBQYWNrZXQgRnJhbWUgKi8KIAotCUdNX1RYRl9DT0wJPSBHTV9NSUJfQ05UX0JBU0UgKyAzMDQsCS8qIFR4IENvbGxpc2lvbiAqLwotCUdNX1RYRl9MQVRfQ09MCT0gR01fTUlCX0NOVF9CQVNFICsgMzEyLAkvKiBUeCBMYXRlIENvbGxpc2lvbiAqLwotCUdNX1RYRl9BQk9fQ09MCT0gR01fTUlCX0NOVF9CQVNFICsgMzIwLAkvKiBUeCBhYm9ydGVkIGR1ZSB0byBFeGNlcy4gQ29sLiAqLwotCUdNX1RYRl9NVUxfQ09MCT0gR01fTUlCX0NOVF9CQVNFICsgMzI4LAkvKiBUeCBNdWx0aXBsZSBDb2xsaXNpb24gKi8KLQlHTV9UWEZfU05HX0NPTAk9IEdNX01JQl9DTlRfQkFTRSArIDMzNiwJLyogVHggU2luZ2xlIENvbGxpc2lvbiAqLwotCUdNX1RYRV9GSUZPX1VSCT0gR01fTUlCX0NOVF9CQVNFICsgMzQ0LAkvKiBUeCBGSUZPIFVuZGVycnVuIEV2ZW50ICovCisJR01fUlhFX0ZJRk9fT1YJPSBHTV9NSUJfQ05UX0JBU0UgKyAxNzYsLyogUnggRklGTyBvdmVyZmxvdyBFdmVudCAqLworCUdNX1RYRl9VQ19PSwk9IEdNX01JQl9DTlRfQkFTRSArIDE5MiwvKiBVbmljYXN0IEZyYW1lcyBYbWl0dGVkIE9LICovCisJR01fVFhGX0JDX09LCT0gR01fTUlCX0NOVF9CQVNFICsgMjAwLC8qIEJyb2FkY2FzdCBGcmFtZXMgWG1pdHRlZCBPSyAqLworCUdNX1RYRl9NUEFVU0UJPSBHTV9NSUJfQ05UX0JBU0UgKyAyMDgsLyogUGF1c2UgTUFDIEN0cmwgRnJhbWVzIFhtaXR0ZWQgKi8KKwlHTV9UWEZfTUNfT0sJPSBHTV9NSUJfQ05UX0JBU0UgKyAyMTYsLyogTXVsdGljYXN0IEZyYW1lcyBYbWl0dGVkIE9LICovCisJR01fVFhPX09LX0xPCT0gR01fTUlCX0NOVF9CQVNFICsgMjI0LC8qIE9jdGV0cyBUcmFuc21pdHRlZCBPSyBMb3cgKi8KKwlHTV9UWE9fT0tfSEkJPSBHTV9NSUJfQ05UX0JBU0UgKyAyMzIsLyogT2N0ZXRzIFRyYW5zbWl0dGVkIE9LIEhpZ2ggKi8KKwlHTV9UWEZfNjRCCT0gR01fTUlCX0NOVF9CQVNFICsgMjQwLC8qIDY0IEJ5dGUgVHggRnJhbWUgKi8KKwlHTV9UWEZfMTI3Qgk9IEdNX01JQl9DTlRfQkFTRSArIDI0OCwvKiA2NS0xMjcgQnl0ZSBUeCBGcmFtZSAqLworCUdNX1RYRl8yNTVCCT0gR01fTUlCX0NOVF9CQVNFICsgMjU2LC8qIDEyOC0yNTUgQnl0ZSBUeCBGcmFtZSAqLworCUdNX1RYRl81MTFCCT0gR01fTUlCX0NOVF9CQVNFICsgMjY0LC8qIDI1Ni01MTEgQnl0ZSBUeCBGcmFtZSAqLworCUdNX1RYRl8xMDIzQgk9IEdNX01JQl9DTlRfQkFTRSArIDI3MiwvKiA1MTItMTAyMyBCeXRlIFR4IEZyYW1lICovCisJR01fVFhGXzE1MThCCT0gR01fTUlCX0NOVF9CQVNFICsgMjgwLC8qIDEwMjQtMTUxOCBCeXRlIFR4IEZyYW1lICovCisJR01fVFhGX01BWF9TWgk9IEdNX01JQl9DTlRfQkFTRSArIDI4OCwvKiAxNTE5LU1heFNpemUgQnl0ZSBUeCBGcmFtZSAqLworCisJR01fVFhGX0NPTAk9IEdNX01JQl9DTlRfQkFTRSArIDMwNCwvKiBUeCBDb2xsaXNpb24gKi8KKwlHTV9UWEZfTEFUX0NPTAk9IEdNX01JQl9DTlRfQkFTRSArIDMxMiwvKiBUeCBMYXRlIENvbGxpc2lvbiAqLworCUdNX1RYRl9BQk9fQ09MCT0gR01fTUlCX0NOVF9CQVNFICsgMzIwLC8qIFR4IGFib3J0ZWQgZHVlIHRvIEV4Y2VzLiBDb2wuICovCisJR01fVFhGX01VTF9DT0wJPSBHTV9NSUJfQ05UX0JBU0UgKyAzMjgsLyogVHggTXVsdGlwbGUgQ29sbGlzaW9uICovCisJR01fVFhGX1NOR19DT0wJPSBHTV9NSUJfQ05UX0JBU0UgKyAzMzYsLyogVHggU2luZ2xlIENvbGxpc2lvbiAqLworCUdNX1RYRV9GSUZPX1VSCT0gR01fTUlCX0NOVF9CQVNFICsgMzQ0LC8qIFR4IEZJRk8gVW5kZXJydW4gRXZlbnQgKi8KIH07CiAKIC8qIEdNQUMgQml0IERlZmluaXRpb25zICovCkBAIC0xNzY4LDcgKzE4MDQsNyBAQAogCV9fbGUxNglsZW5ndGg7CiAJdTgJY3RybDsKIAl1OAlvcGNvZGU7Ci19IF9fYXR0cmlidXRlKChwYWNrZWQpKTs7Cit9IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKIAogc3RydWN0IHNreTJfc3RhdHVzX2xlIHsKIAlfX2xlMzIJc3RhdHVzOwkvKiBhbHNvIGNoZWNrc3VtICovCkBAIC0xNzkzLDYgKzE4MjksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICAgICpuZXRkZXY7CiAJdW5zaWduZWQJICAgICBwb3J0OwogCXUzMgkJICAgICBtc2dfZW5hYmxlOworCXNwaW5sb2NrX3QJICAgICBwaHlfbG9jazsKIAogCXNwaW5sb2NrX3QJICAgICB0eF9sb2NrICBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCXN0cnVjdCB0eF9yaW5nX2luZm8gICp0eF9yaW5nOwpAQCAtMTgwMSw3ICsxODM4LDYgQEAKIAl1MTYJCSAgICAgdHhfcHJvZDsJCS8qIG5leHQgbGUgdG8gdXNlICovCiAJdTMyCQkgICAgIHR4X2FkZHI2NDsKIAl1MTYJCSAgICAgdHhfcGVuZGluZzsKLQl1MTYJCSAgICAgdHhfbGFzdF9wdXQ7CiAJdTE2CQkgICAgIHR4X2xhc3RfbXNzOwogCiAJc3RydWN0IHJpbmdfaW5mbyAgICAgKnJ4X3JpbmcgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKQEAgLTE4MTAsNyArMTg0Niw2IEBACiAJdTE2CQkgICAgIHJ4X25leHQ7CQkvKiBuZXh0IHJlIHRvIGNoZWNrICovCiAJdTE2CQkgICAgIHJ4X3B1dDsJCS8qIG5leHQgbGUgaW5kZXggdG8gdXNlICovCiAJdTE2CQkgICAgIHJ4X3BlbmRpbmc7Ci0JdTE2CQkgICAgIHJ4X2xhc3RfcHV0OwogCXUxNgkJICAgICByeF9idWZzaXplOwogI2lmZGVmIFNLWTJfVkxBTl9UQUdfVVNFRAogCXUxNgkJICAgICByeF90YWc7CkBAIC0xODI2LDIyICsxODYxLDE3IEBACiAJdTgJCSAgICAgcnhfcGF1c2U7CiAJdTgJCSAgICAgdHhfcGF1c2U7CiAJdTgJCSAgICAgcnhfY3N1bTsKLQl1OAkJICAgICB3b2w7CiAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CiAKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICBwaHlfdGFzazsKLQlzdHJ1Y3Qgc2VtYXBob3JlICAgICBwaHlfc2VtYTsKIH07CiAKIHN0cnVjdCBza3kyX2h3IHsKIAl2b2lkIF9faW9tZW0gIAkgICAgICpyZWdzOwogCXN0cnVjdCBwY2lfZGV2CSAgICAgKnBkZXY7Ci0JdTMyCQkgICAgIGludHJfbWFzazsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgICAqZGV2WzJdOwogCiAJaW50CQkgICAgIHBtX2NhcDsKLQlpbnQJCSAgICAgbXNpOwogCXU4CSAgICAgCSAgICAgY2hpcF9pZDsKIAl1OAkJICAgICBjaGlwX3JldjsKIAl1OAkJICAgICBjb3BwZXI7CkBAIC0xODUwLDYgKzE4ODAsOCBAQAogCXN0cnVjdCBza3kyX3N0YXR1c19sZSAqc3RfbGU7CiAJdTMyCQkgICAgIHN0X2lkeDsKIAlkbWFfYWRkcl90ICAgCSAgICAgc3RfZG1hOworCWludAkJICAgICBtc2lfZGV0ZWN0ZWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgbXNpX3dhaXQ7CiB9OwogCiAvKiBSZWdpc3RlciBhY2Nlc3NvciBmb3IgbWVtb3J5IG1hcHBlZCBkZXZpY2UgKi8KQEAgLTE5MTIsNCArMTk0NCwyNSBAQAogCWdtYV93cml0ZTE2KGh3LCBwb3J0LCByZWcrNCwodTE2KSBhZGRyWzJdIHwgKCh1MTYpIGFkZHJbM10gPDwgOCkpOwogCWdtYV93cml0ZTE2KGh3LCBwb3J0LCByZWcrOCwodTE2KSBhZGRyWzRdIHwgKCh1MTYpIGFkZHJbNV0gPDwgOCkpOwogfQorCisvKiBQQ0kgY29uZmlnIHNwYWNlIGFjY2VzcyAqLworc3RhdGljIGlubGluZSB1MzIgc2t5Ml9wY2lfcmVhZDMyKGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcmVnKQoreworCXJldHVybiBza3kyX3JlYWQzMihodywgWTJfQ0ZHX1NQQyArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHNreTJfcGNpX3JlYWQxNihjb25zdCBzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHJlZykKK3sKKwlyZXR1cm4gc2t5Ml9yZWFkMTYoaHcsIFkyX0NGR19TUEMgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2t5Ml9wY2lfd3JpdGUzMihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHJlZywgdTMyIHZhbCkKK3sKKwlza3kyX3dyaXRlMzIoaHcsIFkyX0NGR19TUEMgKyByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBza3kyX3BjaV93cml0ZTE2KHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcmVnLCB1MTYgdmFsKQoreworCXNreTJfd3JpdGUxNihodywgWTJfQ0ZHX1NQQyArIHJlZywgdmFsKTsKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MXguYwppbmRleCA3ZWMwODEyLi4wZTk4MzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MXguYwpAQCAtMjE1LDE1ICsyMTUsMTIgQEAKIAogCXNwaW5sb2NrX3QgbG9jazsKIAotI2lmZGVmIFNNQ19DQU5fVVNFX0RBVEFDUwotCXUzMglfX2lvbWVtICpkYXRhY3M7Ci0jZW5kaWYKLQogI2lmZGVmIFNNQ19VU0VfUFhBX0RNQQogCS8qIERNQSBuZWVkcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgY2hpcCAqLwogCXVfbG9uZyBwaHlzYWRkcjsKICNlbmRpZgogCXZvaWQgX19pb21lbSAqYmFzZTsKKwl2b2lkIF9faW9tZW0gKmRhdGFjczsKIH07CiAKICNpZiBTTUNfREVCVUcgPiAwCkBAIC0yMTA0LDkgKzIxMDEsOCBAQAogCSAqIFNldCB0aGUgYXBwcm9wcmlhdGUgYnl0ZS93b3JkIG1vZGUuCiAJICovCiAJZWNzciA9IHJlYWRiKGFkZHIgKyAoRUNTUiA8PCBTTUNfSU9fU0hJRlQpKSAmIH5FQ1NSX0lPSVM4OwotI2lmbmRlZiBTTUNfQ0FOX1VTRV8xNkJJVAotCWVjc3IgfD0gRUNTUl9JT0lTODsKLSNlbmRpZgorCWlmICghU01DX0NBTl9VU0VfMTZCSVQpCisJCWVjc3IgfD0gRUNTUl9JT0lTODsKIAl3cml0ZWIoZWNzciwgYWRkciArIChFQ1NSIDw8IFNNQ19JT19TSElGVCkpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIApAQCAtMjE0Myw0MCArMjEzOSwzOSBAQAogCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgQVRUUklCX1NJWkUpOwogfQogCi0jaWZkZWYgU01DX0NBTl9VU0VfREFUQUNTCi1zdGF0aWMgdm9pZCBzbWNfcmVxdWVzdF9kYXRhY3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgc21jX3JlcXVlc3RfZGF0YWNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewotCXN0cnVjdCByZXNvdXJjZSAqIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJzbWM5MXgtZGF0YTMyIik7Ci0Jc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpZiAoU01DX0NBTl9VU0VfREFUQUNTKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJzbWM5MXgtZGF0YTMyIik7CisJCXN0cnVjdCBzbWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKLQlpZiAoIXJlcykKLQkJcmV0dXJuOworCQlpZiAoIXJlcykKKwkJCXJldHVybjsKIAotCWlmKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgU01DX0RBVEFfRVhURU5ULCBDQVJETkFNRSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZhaWxlZCB0byByZXF1ZXN0IGRhdGFjcyBtZW1vcnkgcmVnaW9uLlxuIiwgQ0FSRE5BTUUpOwotCQlyZXR1cm47CisJCWlmKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgU01DX0RBVEFfRVhURU5ULCBDQVJETkFNRSkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBkYXRhY3MgbWVtb3J5IHJlZ2lvbi5cbiIsIENBUkROQU1FKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWxwLT5kYXRhY3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIFNNQ19EQVRBX0VYVEVOVCk7CiAJfQotCi0JbHAtPmRhdGFjcyA9IGlvcmVtYXAocmVzLT5zdGFydCwgU01DX0RBVEFfRVhURU5UKTsKIH0KIAogc3RhdGljIHZvaWQgc21jX3JlbGVhc2VfZGF0YWNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewotCXN0cnVjdCBzbWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IHJlc291cmNlICogcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInNtYzkxeC1kYXRhMzIiKTsKKwlpZiAoU01DX0NBTl9VU0VfREFUQUNTKSB7CisJCXN0cnVjdCBzbWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJCXN0cnVjdCByZXNvdXJjZSAqIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJzbWM5MXgtZGF0YTMyIik7CiAKLQlpZiAobHAtPmRhdGFjcykKLQkJaW91bm1hcChscC0+ZGF0YWNzKTsKKwkJaWYgKGxwLT5kYXRhY3MpCisJCQlpb3VubWFwKGxwLT5kYXRhY3MpOwogCi0JbHAtPmRhdGFjcyA9IE5VTEw7CisJCWxwLT5kYXRhY3MgPSBOVUxMOwogCi0JaWYgKHJlcykKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIFNNQ19EQVRBX0VYVEVOVCk7CisJCWlmIChyZXMpCisJCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgU01DX0RBVEFfRVhURU5UKTsKKwl9CiB9Ci0jZWxzZQotc3RhdGljIHZvaWQgc21jX3JlcXVlc3RfZGF0YWNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KSB7fQotc3RhdGljIHZvaWQgc21jX3JlbGVhc2VfZGF0YWNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KSB7fQotI2VuZGlmCiAKIC8qCiAgKiBzbWNfaW5pdCh2b2lkKQpAQCAtMjIyMSw2ICsyMjE2LDEwIEBACiAKIAluZGV2LT5kbWEgPSAodW5zaWduZWQgY2hhciktMTsKIAluZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChuZGV2LT5pcnEgPCAwKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWVfbmV0ZGV2OworCX0KIAogCXJldCA9IHNtY19yZXF1ZXN0X2F0dHJpYihwZGV2KTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCBlMGVmZDE5Li5lMWJlMWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtMjc1LDcgKzI3NSwxMCBAQAogI2RlZmluZSBTTUNfaW5zdyhhLHIscCxsKQlyZWFkc3cgKCh2b2lkKikgKChhKSArIChyKSksIHAsIGwpCiAjZGVmaW5lIFNNQ19vdXR3KHYsYSxyKQkgICAgICh7IHdyaXRldyAoKHYpLCAoYSkgKyAocikpOyBMUEQ3QTQwWF9JT0JBUlJJRVI7IH0pCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBTTUNfb3V0c3cgKHVuc2lnbmVkIGxvbmcgYSwgaW50IHIsIHVuc2lnbmVkIGNoYXIqIHAsIGludCBsKQorI2RlZmluZSBTTUNfb3V0c3cJCUxQRDdBNDBYX1NNQ19vdXRzdworCitzdGF0aWMgaW5saW5lIHZvaWQgTFBEN0E0MFhfU01DX291dHN3KHVuc2lnbmVkIGxvbmcgYSwgaW50IHIsCisJCQkJICAgICB1bnNpZ25lZCBjaGFyKiBwLCBpbnQgbCkKIHsKIAl1bnNpZ25lZCBzaG9ydCogcHMgPSAodW5zaWduZWQgc2hvcnQqKSBwOwogCXdoaWxlIChsLS0gPiAwKSB7CkBAIC0zNDIsMTAgKzM0NSw2IEBACiAKICNlbmRpZgogCi0jaWZuZGVmCVNNQ19JUlFfRkxBR1MKLSNkZWZpbmUJU01DX0lSUV9GTEFHUwkJU0FfVFJJR0dFUl9SSVNJTkcKLSNlbmRpZgotCiAjaWZkZWYgU01DX1VTRV9QWEFfRE1BCiAvKgogICogTGV0J3MgdXNlIHRoZSBETUEgZW5naW5lIG9uIHRoZSBYU2NhbGUgUFhBMnh4IGZvciBSWCBwYWNrZXRzLiBUaGlzIGlzCkBAIC00NDEsMTAgKzQ0MCw4NSBAQAogI2VuZGlmICAvKiBTTUNfVVNFX1BYQV9ETUEgKi8KIAogCi0vKiBCZWNhdXNlIG9mIGJhbmsgc3dpdGNoaW5nLCB0aGUgTEFOOTF4IHVzZXMgb25seSAxNiBJL08gcG9ydHMgKi8KKy8qCisgKiBFdmVyeXRoaW5nIGEgcGFydGljdWxhciBoYXJkd2FyZSBzZXR1cCBuZWVkcyBzaG91bGQgaGF2ZSBiZWVuIGRlZmluZWQKKyAqIGF0IHRoaXMgcG9pbnQuICBBZGQgc3R1YnMgZm9yIHRoZSB1bmRlZmluZWQgY2FzZXMsIG1haW5seSB0byBhdm9pZAorICogY29tcGlsYXRpb24gd2FybmluZ3Mgc2luY2UgdGhleSdsbCBiZSBvcHRpbWl6ZWQgYXdheSwgb3IgdG8gcHJldmVudCBidWdneQorICogdXNlIG9mIHRoZW0uCisgKi8KKworI2lmICEgU01DX0NBTl9VU0VfMzJCSVQKKyNkZWZpbmUgU01DX2lubChpb2FkZHIsIHJlZykJCSh7IEJVRygpOyAwOyB9KQorI2RlZmluZSBTTUNfb3V0bCh4LCBpb2FkZHIsIHJlZykJQlVHKCkKKyNkZWZpbmUgU01DX2luc2woYSwgciwgcCwgbCkJCUJVRygpCisjZGVmaW5lIFNNQ19vdXRzbChhLCByLCBwLCBsKQkJQlVHKCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU01DX2luc2wpIHx8ICFkZWZpbmVkKFNNQ19vdXRzbCkKKyNkZWZpbmUgU01DX2luc2woYSwgciwgcCwgbCkJCUJVRygpCisjZGVmaW5lIFNNQ19vdXRzbChhLCByLCBwLCBsKQkJQlVHKCkKKyNlbmRpZgorCisjaWYgISBTTUNfQ0FOX1VTRV8xNkJJVAorCisvKgorICogQW55IDE2LWJpdCBhY2Nlc3MgaXMgcGVyZm9ybWVkIHdpdGggdHdvIDgtYml0IGFjY2Vzc2VzIGlmIHRoZSBoYXJkd2FyZQorICogY2FuJ3QgZG8gaXQgZGlyZWN0bHkuIE1vc3QgcmVnaXN0ZXJzIGFyZSAxNi1iaXQgc28gdGhvc2UgYXJlIG1hbmRhdG9yeS4KKyAqLworI2RlZmluZSBTTUNfb3V0dyh4LCBpb2FkZHIsIHJlZykJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfX3ZhbDE2ID0gKHgpOwkJCQlcCisJCVNNQ19vdXRiKCBfX3ZhbDE2LCBpb2FkZHIsIHJlZyApOwkJCVwKKwkJU01DX291dGIoIF9fdmFsMTYgPj4gOCwgaW9hZGRyLCByZWcgKyAoMSA8PCBTTUNfSU9fU0hJRlQpKTtcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgU01DX2ludyhpb2FkZHIsIHJlZykJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9fdmFsMTY7CQkJCQlcCisJCV9fdmFsMTYgPSAgU01DX2luYiggaW9hZGRyLCByZWcgKTsJCQlcCisJCV9fdmFsMTYgfD0gU01DX2luYiggaW9hZGRyLCByZWcgKyAoMSA8PCBTTUNfSU9fU0hJRlQpKSA8PCA4OyBcCisJCV9fdmFsMTY7CQkJCQkJXAorCX0pCisKKyNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkJCUJVRygpCisjZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKQkJQlVHKCkKKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTTUNfaW5zdykgfHwgIWRlZmluZWQoU01DX291dHN3KQorI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKQkJQlVHKCkKKyNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpCQlCVUcoKQorI2VuZGlmCisKKyNpZiAhIFNNQ19DQU5fVVNFXzhCSVQKKyNkZWZpbmUgU01DX2luYihpb2FkZHIsIHJlZykJCSh7IEJVRygpOyAwOyB9KQorI2RlZmluZSBTTUNfb3V0Yih4LCBpb2FkZHIsIHJlZykJQlVHKCkKKyNkZWZpbmUgU01DX2luc2IoYSwgciwgcCwgbCkJCUJVRygpCisjZGVmaW5lIFNNQ19vdXRzYihhLCByLCBwLCBsKQkJQlVHKCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU01DX2luc2IpIHx8ICFkZWZpbmVkKFNNQ19vdXRzYikKKyNkZWZpbmUgU01DX2luc2IoYSwgciwgcCwgbCkJCUJVRygpCisjZGVmaW5lIFNNQ19vdXRzYihhLCByLCBwLCBsKQkJQlVHKCkKKyNlbmRpZgorCisjaWZuZGVmIFNNQ19DQU5fVVNFX0RBVEFDUworI2RlZmluZSBTTUNfQ0FOX1VTRV9EQVRBQ1MJMAorI2VuZGlmCisKICNpZm5kZWYgU01DX0lPX1NISUZUCiAjZGVmaW5lIFNNQ19JT19TSElGVAkwCiAjZW5kaWYKKworI2lmbmRlZglTTUNfSVJRX0ZMQUdTCisjZGVmaW5lCVNNQ19JUlFfRkxBR1MJCVNBX1RSSUdHRVJfUklTSU5HCisjZW5kaWYKKworI2lmbmRlZiBTTUNfSU5URVJSVVBUX1BSRUFNQkxFCisjZGVmaW5lIFNNQ19JTlRFUlJVUFRfUFJFQU1CTEUKKyNlbmRpZgorCisKKy8qIEJlY2F1c2Ugb2YgYmFuayBzd2l0Y2hpbmcsIHRoZSBMQU45MXggdXNlcyBvbmx5IDE2IEkvTyBwb3J0cyAqLwogI2RlZmluZSBTTUNfSU9fRVhURU5UCSgxNiA8PCBTTUNfSU9fU0hJRlQpCiAjZGVmaW5lIFNNQ19EQVRBX0VYVEVOVCAoNCkKIApAQCAtODE3LDYgKzg5MSwxMSBAQAogICogTm90ZTogdGhlIGZvbGxvd2luZyBtYWNyb3MgZG8gKm5vdCogc2VsZWN0IHRoZSBiYW5rIC0tIHRoaXMgbXVzdAogICogYmUgZG9uZSBzZXBhcmF0ZWx5IGFzIG5lZWRlZCBpbiB0aGUgbWFpbiBjb2RlLiAgVGhlIFNNQ19SRUcoKSBtYWNybwogICogb25seSB1c2VzIHRoZSBiYW5rIGFyZ3VtZW50IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKHdoZW4gZW5hYmxlZCkuCisgKgorICogTm90ZTogZGVzcGl0ZSBpbmxpbmUgZnVuY3Rpb25zIGJlaW5nIHNhZmVyLCBldmVyeXRoaW5nIGxlYWRpbmcgdG8gdGhpcworICogc2hvdWxkIHByZWZlcmFibHkgYmUgbWFjcm9zIHRvIGxldCBCVUcoKSBkaXNwbGF5IHRoZSBsaW5lIG51bWJlciBpbgorICogdGhlIGNvcmUgc291cmNlIGNvZGUgc2luY2Ugd2UncmUgaW50ZXJlc3RlZCBpbiB0aGUgdG9wIGNhbGwgc2l0ZQorICogbm90IGluIGFueSBpbmxpbmUgZnVuY3Rpb24gbG9jYXRpb24uCiAgKi8KIAogI2lmIFNNQ19ERUJVRyA+IDAKQEAgLTgzNCw2MiArOTEzLDE0MiBAQAogI2RlZmluZSBTTUNfUkVHKHJlZywgYmFuaykJKHJlZzw8U01DX0lPX1NISUZUKQogI2VuZGlmCiAKLSNpZiBTTUNfQ0FOX1VTRV84QklUCi0jZGVmaW5lIFNNQ19HRVRfUE4oKQkJU01DX2luYiggaW9hZGRyLCBQTl9SRUcgKQotI2RlZmluZSBTTUNfU0VUX1BOKHgpCQlTTUNfb3V0YiggeCwgaW9hZGRyLCBQTl9SRUcgKQotI2RlZmluZSBTTUNfR0VUX0FSKCkJCVNNQ19pbmIoIGlvYWRkciwgQVJfUkVHICkKLSNkZWZpbmUgU01DX0dFVF9UWEZJRk8oKQlTTUNfaW5iKCBpb2FkZHIsIFRYRklGT19SRUcgKQotI2RlZmluZSBTTUNfR0VUX1JYRklGTygpCVNNQ19pbmIoIGlvYWRkciwgUlhGSUZPX1JFRyApCi0jZGVmaW5lIFNNQ19HRVRfSU5UKCkJCVNNQ19pbmIoIGlvYWRkciwgSU5UX1JFRyApCi0jZGVmaW5lIFNNQ19BQ0tfSU5UKHgpCQlTTUNfb3V0YiggeCwgaW9hZGRyLCBJTlRfUkVHICkKLSNkZWZpbmUgU01DX0dFVF9JTlRfTUFTSygpCVNNQ19pbmIoIGlvYWRkciwgSU1fUkVHICkKLSNkZWZpbmUgU01DX1NFVF9JTlRfTUFTSyh4KQlTTUNfb3V0YiggeCwgaW9hZGRyLCBJTV9SRUcgKQotI2Vsc2UKLSNkZWZpbmUgU01DX0dFVF9QTigpCQkoU01DX2ludyggaW9hZGRyLCBQTl9SRUcgKSAmIDB4RkYpCi0jZGVmaW5lIFNNQ19TRVRfUE4oeCkJCVNNQ19vdXR3KCB4LCBpb2FkZHIsIFBOX1JFRyApCi0jZGVmaW5lIFNNQ19HRVRfQVIoKQkJKFNNQ19pbncoIGlvYWRkciwgUE5fUkVHICkgPj4gOCkKLSNkZWZpbmUgU01DX0dFVF9UWEZJRk8oKQkoU01DX2ludyggaW9hZGRyLCBUWEZJRk9fUkVHICkgJiAweEZGKQotI2RlZmluZSBTTUNfR0VUX1JYRklGTygpCShTTUNfaW53KCBpb2FkZHIsIFRYRklGT19SRUcgKSA+PiA4KQotI2RlZmluZSBTTUNfR0VUX0lOVCgpCQkoU01DX2ludyggaW9hZGRyLCBJTlRfUkVHICkgJiAweEZGKQorLyoKKyAqIEhhY2sgQWxlcnQ6IFNvbWUgc2V0dXBzIGp1c3QgY2FuJ3Qgd3JpdGUgOCBvciAxNiBiaXRzIHJlbGlhYmx5IHdoZW4gbm90CisgKiBhbGlnbmVkIHRvIGEgMzIgYml0IGJvdW5kYXJ5LiAgSSB0ZWxsIHlvdSB0aGF0IGRvZXMgZXhpc3QhCisgKiBGb3J0dW5hdGVseSB0aGUgYWZmZWN0ZWQgcmVnaXN0ZXIgYWNjZXNzZXMgY2FuIGJlIGVhc2lseSB3b3JrZWQgYXJvdW5kCisgKiBzaW5jZSB3ZSBjYW4gd3JpdGUgemVyb2VzIHRvIHRoZSBwcmVjZWVkaW5nIDE2IGJpdHMgd2l0aG91dCBhZHZlcnNlCisgKiBlZmZlY3RzIGFuZCB1c2UgYSAzMi1iaXQgYWNjZXNzLgorICoKKyAqIEVuZm9yY2UgaXQgb24gYW55IDMyLWJpdCBjYXBhYmxlIHNldHVwIGZvciBub3cuCisgKi8KKyNkZWZpbmUgU01DX01VU1RfQUxJR05fV1JJVEUJU01DX0NBTl9VU0VfMzJCSVQKKworI2RlZmluZSBTTUNfR0VUX1BOKCkJCQkJCQkJXAorCSggU01DX0NBTl9VU0VfOEJJVAk/IChTTUNfaW5iKGlvYWRkciwgUE5fUkVHKSkJCVwKKwkJCQk6IChTTUNfaW53KGlvYWRkciwgUE5fUkVHKSAmIDB4RkYpICkKKworI2RlZmluZSBTTUNfU0VUX1BOKHgpCQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChTTUNfTVVTVF9BTElHTl9XUklURSkJCQkJXAorCQkJU01DX291dGwoKHgpPDwxNiwgaW9hZGRyLCBTTUNfUkVHKDAsIDIpKTsJXAorCQllbHNlIGlmIChTTUNfQ0FOX1VTRV84QklUKQkJCQlcCisJCQlTTUNfb3V0Yih4LCBpb2FkZHIsIFBOX1JFRyk7CQkJXAorCQllbHNlCQkJCQkJCVwKKwkJCVNNQ19vdXR3KHgsIGlvYWRkciwgUE5fUkVHKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTTUNfR0VUX0FSKCkJCQkJCQkJXAorCSggU01DX0NBTl9VU0VfOEJJVAk/IChTTUNfaW5iKGlvYWRkciwgQVJfUkVHKSkJCVwKKwkgIAkJCTogKFNNQ19pbncoaW9hZGRyLCBQTl9SRUcpID4+IDgpICkKKworI2RlZmluZSBTTUNfR0VUX1RYRklGTygpCQkJCQkJXAorCSggU01DX0NBTl9VU0VfOEJJVAk/IChTTUNfaW5iKGlvYWRkciwgVFhGSUZPX1JFRykpCQlcCisJCQkJOiAoU01DX2ludyhpb2FkZHIsIFRYRklGT19SRUcpICYgMHhGRikgKQorCisjZGVmaW5lIFNNQ19HRVRfUlhGSUZPKCkJCQkJCQlcCisJICAoIFNNQ19DQU5fVVNFXzhCSVQJPyAoU01DX2luYihpb2FkZHIsIFJYRklGT19SRUcpKQkJXAorCQkJCTogKFNNQ19pbncoaW9hZGRyLCBUWEZJRk9fUkVHKSA+PiA4KSApCisKKyNkZWZpbmUgU01DX0dFVF9JTlQoKQkJCQkJCQlcCisJKCBTTUNfQ0FOX1VTRV84QklUCT8gKFNNQ19pbmIoaW9hZGRyLCBJTlRfUkVHKSkJCVwKKwkJCQk6IChTTUNfaW53KGlvYWRkciwgSU5UX1JFRykgJiAweEZGKSApCisKICNkZWZpbmUgU01DX0FDS19JTlQoeCkJCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOwkJCQkJXAotCQlpbnQgX19tYXNrOwkJCQkJCVwKLQkJbG9jYWxfaXJxX3NhdmUoX19mbGFncyk7CQkJCVwKLQkJX19tYXNrID0gU01DX2ludyggaW9hZGRyLCBJTlRfUkVHICkgJiB+MHhmZjsJCVwKLQkJU01DX291dHcoIF9fbWFzayB8ICh4KSwgaW9hZGRyLCBJTlRfUkVHICk7CQlcCi0JCWxvY2FsX2lycV9yZXN0b3JlKF9fZmxhZ3MpOwkJCQlcCisJCWlmIChTTUNfQ0FOX1VTRV84QklUKQkJCQkJXAorCQkJU01DX291dGIoeCwgaW9hZGRyLCBJTlRfUkVHKTsJCQlcCisJCWVsc2UgewkJCQkJCQlcCisJCQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCVwKKwkJCWludCBfX21hc2s7CQkJCQlcCisJCQlsb2NhbF9pcnFfc2F2ZShfX2ZsYWdzKTsJCQlcCisJCQlfX21hc2sgPSBTTUNfaW53KCBpb2FkZHIsIElOVF9SRUcgKSAmIH4weGZmOwlcCisJCQlTTUNfb3V0dyggX19tYXNrIHwgKHgpLCBpb2FkZHIsIElOVF9SRUcgKTsJXAorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoX19mbGFncyk7CQkJXAorCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQotI2RlZmluZSBTTUNfR0VUX0lOVF9NQVNLKCkJKFNNQ19pbncoIGlvYWRkciwgSU5UX1JFRyApID4+IDgpCi0jZGVmaW5lIFNNQ19TRVRfSU5UX01BU0soeCkJU01DX291dHcoICh4KSA8PCA4LCBpb2FkZHIsIElOVF9SRUcgKQotI2VuZGlmCiAKLSNkZWZpbmUgU01DX0NVUlJFTlRfQkFOSygpCVNNQ19pbncoIGlvYWRkciwgQkFOS19TRUxFQ1QgKQotI2RlZmluZSBTTUNfU0VMRUNUX0JBTksoeCkJU01DX291dHcoIHgsIGlvYWRkciwgQkFOS19TRUxFQ1QgKQotI2RlZmluZSBTTUNfR0VUX0JBU0UoKQkJU01DX2ludyggaW9hZGRyLCBCQVNFX1JFRyApCi0jZGVmaW5lIFNNQ19TRVRfQkFTRSh4KQkJU01DX291dHcoIHgsIGlvYWRkciwgQkFTRV9SRUcgKQotI2RlZmluZSBTTUNfR0VUX0NPTkZJRygpCVNNQ19pbncoIGlvYWRkciwgQ09ORklHX1JFRyApCi0jZGVmaW5lIFNNQ19TRVRfQ09ORklHKHgpCVNNQ19vdXR3KCB4LCBpb2FkZHIsIENPTkZJR19SRUcgKQotI2RlZmluZSBTTUNfR0VUX0NPVU5URVIoKQlTTUNfaW53KCBpb2FkZHIsIENPVU5URVJfUkVHICkKLSNkZWZpbmUgU01DX0dFVF9DVEwoKQkJU01DX2ludyggaW9hZGRyLCBDVExfUkVHICkKLSNkZWZpbmUgU01DX1NFVF9DVEwoeCkJCVNNQ19vdXR3KCB4LCBpb2FkZHIsIENUTF9SRUcgKQotI2RlZmluZSBTTUNfR0VUX01JSSgpCQlTTUNfaW53KCBpb2FkZHIsIE1JSV9SRUcgKQotI2RlZmluZSBTTUNfU0VUX01JSSh4KQkJU01DX291dHcoIHgsIGlvYWRkciwgTUlJX1JFRyApCi0jZGVmaW5lIFNNQ19HRVRfTUlSKCkJCVNNQ19pbncoIGlvYWRkciwgTUlSX1JFRyApCi0jZGVmaW5lIFNNQ19TRVRfTUlSKHgpCQlTTUNfb3V0dyggeCwgaW9hZGRyLCBNSVJfUkVHICkKLSNkZWZpbmUgU01DX0dFVF9NTVVfQ01EKCkJU01DX2ludyggaW9hZGRyLCBNTVVfQ01EX1JFRyApCi0jZGVmaW5lIFNNQ19TRVRfTU1VX0NNRCh4KQlTTUNfb3V0dyggeCwgaW9hZGRyLCBNTVVfQ01EX1JFRyApCi0jZGVmaW5lIFNNQ19HRVRfRklGTygpCQlTTUNfaW53KCBpb2FkZHIsIEZJRk9fUkVHICkKLSNkZWZpbmUgU01DX0dFVF9QVFIoKQkJU01DX2ludyggaW9hZGRyLCBQVFJfUkVHICkKLSNkZWZpbmUgU01DX1NFVF9QVFIoeCkJCVNNQ19vdXR3KCB4LCBpb2FkZHIsIFBUUl9SRUcgKQotI2RlZmluZSBTTUNfR0VUX0VQSF9TVEFUVVMoKQlTTUNfaW53KCBpb2FkZHIsIEVQSF9TVEFUVVNfUkVHICkKLSNkZWZpbmUgU01DX0dFVF9SQ1IoKQkJU01DX2ludyggaW9hZGRyLCBSQ1JfUkVHICkKLSNkZWZpbmUgU01DX1NFVF9SQ1IoeCkJCVNNQ19vdXR3KCB4LCBpb2FkZHIsIFJDUl9SRUcgKQotI2RlZmluZSBTTUNfR0VUX1JFVigpCQlTTUNfaW53KCBpb2FkZHIsIFJFVl9SRUcgKQotI2RlZmluZSBTTUNfR0VUX1JQQygpCQlTTUNfaW53KCBpb2FkZHIsIFJQQ19SRUcgKQotI2RlZmluZSBTTUNfU0VUX1JQQyh4KQkJU01DX291dHcoIHgsIGlvYWRkciwgUlBDX1JFRyApCi0jZGVmaW5lIFNNQ19HRVRfVENSKCkJCVNNQ19pbncoIGlvYWRkciwgVENSX1JFRyApCi0jZGVmaW5lIFNNQ19TRVRfVENSKHgpCQlTTUNfb3V0dyggeCwgaW9hZGRyLCBUQ1JfUkVHICkKKyNkZWZpbmUgU01DX0dFVF9JTlRfTUFTSygpCQkJCQkJXAorCSggU01DX0NBTl9VU0VfOEJJVAk/IChTTUNfaW5iKGlvYWRkciwgSU1fUkVHKSkJCVwKKwkJCQk6IChTTUNfaW53KCBpb2FkZHIsIElOVF9SRUcgKSA+PiA4KSApCisKKyNkZWZpbmUgU01DX1NFVF9JTlRfTUFTSyh4KQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChTTUNfQ0FOX1VTRV84QklUKQkJCQkJXAorCQkJU01DX291dGIoeCwgaW9hZGRyLCBJTV9SRUcpOwkJCVwKKwkJZWxzZQkJCQkJCQlcCisJCQlTTUNfb3V0dygoeCkgPDwgOCwgaW9hZGRyLCBJTlRfUkVHKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNNQ19DVVJSRU5UX0JBTksoKQlTTUNfaW53KGlvYWRkciwgQkFOS19TRUxFQ1QpCisKKyNkZWZpbmUgU01DX1NFTEVDVF9CQU5LKHgpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKFNNQ19NVVNUX0FMSUdOX1dSSVRFKQkJCQlcCisJCQlTTUNfb3V0bCgoeCk8PDE2LCBpb2FkZHIsIDEyPDxTTUNfSU9fU0hJRlQpOwlcCisJCWVsc2UJCQkJCQkJXAorCQkJU01DX291dHcoeCwgaW9hZGRyLCBCQU5LX1NFTEVDVCk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTTUNfR0VUX0JBU0UoKQkJU01DX2ludyhpb2FkZHIsIEJBU0VfUkVHKQorCisjZGVmaW5lIFNNQ19TRVRfQkFTRSh4KQkJU01DX291dHcoeCwgaW9hZGRyLCBCQVNFX1JFRykKKworI2RlZmluZSBTTUNfR0VUX0NPTkZJRygpCVNNQ19pbncoaW9hZGRyLCBDT05GSUdfUkVHKQorCisjZGVmaW5lIFNNQ19TRVRfQ09ORklHKHgpCVNNQ19vdXR3KHgsIGlvYWRkciwgQ09ORklHX1JFRykKKworI2RlZmluZSBTTUNfR0VUX0NPVU5URVIoKQlTTUNfaW53KGlvYWRkciwgQ09VTlRFUl9SRUcpCisKKyNkZWZpbmUgU01DX0dFVF9DVEwoKQkJU01DX2ludyhpb2FkZHIsIENUTF9SRUcpCisKKyNkZWZpbmUgU01DX1NFVF9DVEwoeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgQ1RMX1JFRykKKworI2RlZmluZSBTTUNfR0VUX01JSSgpCQlTTUNfaW53KGlvYWRkciwgTUlJX1JFRykKKworI2RlZmluZSBTTUNfU0VUX01JSSh4KQkJU01DX291dHcoeCwgaW9hZGRyLCBNSUlfUkVHKQorCisjZGVmaW5lIFNNQ19HRVRfTUlSKCkJCVNNQ19pbncoaW9hZGRyLCBNSVJfUkVHKQorCisjZGVmaW5lIFNNQ19TRVRfTUlSKHgpCQlTTUNfb3V0dyh4LCBpb2FkZHIsIE1JUl9SRUcpCisKKyNkZWZpbmUgU01DX0dFVF9NTVVfQ01EKCkJU01DX2ludyhpb2FkZHIsIE1NVV9DTURfUkVHKQorCisjZGVmaW5lIFNNQ19TRVRfTU1VX0NNRCh4KQlTTUNfb3V0dyh4LCBpb2FkZHIsIE1NVV9DTURfUkVHKQorCisjZGVmaW5lIFNNQ19HRVRfRklGTygpCQlTTUNfaW53KGlvYWRkciwgRklGT19SRUcpCisKKyNkZWZpbmUgU01DX0dFVF9QVFIoKQkJU01DX2ludyhpb2FkZHIsIFBUUl9SRUcpCisKKyNkZWZpbmUgU01DX1NFVF9QVFIoeCkJCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKFNNQ19NVVNUX0FMSUdOX1dSSVRFKQkJCQlcCisJCQlTTUNfb3V0bCgoeCk8PDE2LCBpb2FkZHIsIFNNQ19SRUcoNCwgMikpOwlcCisJCWVsc2UJCQkJCQkJXAorCQkJU01DX291dHcoeCwgaW9hZGRyLCBQVFJfUkVHKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTTUNfR0VUX0VQSF9TVEFUVVMoKQlTTUNfaW53KGlvYWRkciwgRVBIX1NUQVRVU19SRUcpCisKKyNkZWZpbmUgU01DX0dFVF9SQ1IoKQkJU01DX2ludyhpb2FkZHIsIFJDUl9SRUcpCisKKyNkZWZpbmUgU01DX1NFVF9SQ1IoeCkJCVNNQ19vdXR3KHgsIGlvYWRkciwgUkNSX1JFRykKKworI2RlZmluZSBTTUNfR0VUX1JFVigpCQlTTUNfaW53KGlvYWRkciwgUkVWX1JFRykKKworI2RlZmluZSBTTUNfR0VUX1JQQygpCQlTTUNfaW53KGlvYWRkciwgUlBDX1JFRykKKworI2RlZmluZSBTTUNfU0VUX1JQQyh4KQkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoU01DX01VU1RfQUxJR05fV1JJVEUpCQkJCVwKKwkJCVNNQ19vdXRsKCh4KTw8MTYsIGlvYWRkciwgU01DX1JFRyg4LCAwKSk7CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlTTUNfb3V0dyh4LCBpb2FkZHIsIFJQQ19SRUcpOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNNQ19HRVRfVENSKCkJCVNNQ19pbncoaW9hZGRyLCBUQ1JfUkVHKQorCisjZGVmaW5lIFNNQ19TRVRfVENSKHgpCQlTTUNfb3V0dyh4LCBpb2FkZHIsIFRDUl9SRUcpCiAKICNpZm5kZWYgU01DX0dFVF9NQUNfQUREUgogI2RlZmluZSBTTUNfR0VUX01BQ19BRERSKGFkZHIpCQkJCQkJXApAQCAtOTIwLDE1MSArMTA3OSw4NCBAQAogCQlTTUNfb3V0dyggbXRbNl0gfCAobXRbN10gPDwgOCksIGlvYWRkciwgTUNBU1RfUkVHNCApOwlcCiAJfSB3aGlsZSAoMCkKIAotI2lmIFNNQ19DQU5fVVNFXzMyQklUCi0vKgotICogU29tZSBzZXR1cHMganVzdCBjYW4ndCB3cml0ZSA4IG9yIDE2IGJpdHMgcmVsaWFibHkgd2hlbiBub3QgYWxpZ25lZAotICogdG8gYSAzMiBiaXQgYm91bmRhcnkuICBJIHRlbGwgeW91IHRoYXQgZXhpc3RzIQotICogV2UgcmUtZG8gdGhlIG9uZXMgaGVyZSB0aGF0IGNhbiBiZSBlYXNpbHkgd29ya2VkIGFyb3VuZCBpZiB0aGV5IGNhbiBoYXZlCi0gKiB0aGVpciBsb3cgcGFydHMgd3JpdHRlbiB0byAwIHdpdGhvdXQgYWR2ZXJzZSBlZmZlY3RzLgotICovCi0jdW5kZWYgU01DX1NFTEVDVF9CQU5LCi0jZGVmaW5lIFNNQ19TRUxFQ1RfQkFOSyh4KQlTTUNfb3V0bCggKHgpPDwxNiwgaW9hZGRyLCAxMjw8U01DX0lPX1NISUZUICkKLSN1bmRlZiBTTUNfU0VUX1JQQwotI2RlZmluZSBTTUNfU0VUX1JQQyh4KQkJU01DX291dGwoICh4KTw8MTYsIGlvYWRkciwgU01DX1JFRyg4LCAwKSApCi0jdW5kZWYgU01DX1NFVF9QTgotI2RlZmluZSBTTUNfU0VUX1BOKHgpCQlTTUNfb3V0bCggKHgpPDwxNiwgaW9hZGRyLCBTTUNfUkVHKDAsIDIpICkKLSN1bmRlZiBTTUNfU0VUX1BUUgotI2RlZmluZSBTTUNfU0VUX1BUUih4KQkJU01DX291dGwoICh4KTw8MTYsIGlvYWRkciwgU01DX1JFRyg0LCAyKSApCi0jZW5kaWYKLQotI2lmIFNNQ19DQU5fVVNFXzMyQklUCi0jZGVmaW5lIFNNQ19QVVRfUEtUX0hEUihzdGF0dXMsIGxlbmd0aCkJCQkJCVwKLQlTTUNfb3V0bCggKHN0YXR1cykgfCAobGVuZ3RoKSA8PCAxNiwgaW9hZGRyLCBEQVRBX1JFRyApCi0jZGVmaW5lIFNNQ19HRVRfUEtUX0hEUihzdGF0dXMsIGxlbmd0aCkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCXVuc2lnbmVkIGludCBfX3ZhbCA9IFNNQ19pbmwoIGlvYWRkciwgREFUQV9SRUcgKTsJXAotCQkoc3RhdHVzKSA9IF9fdmFsICYgMHhmZmZmOwkJCQlcCi0JCShsZW5ndGgpID0gX192YWwgPj4gMTY7CQkJCQlcCi0JfSB3aGlsZSAoMCkKLSNlbHNlCiAjZGVmaW5lIFNNQ19QVVRfUEtUX0hEUihzdGF0dXMsIGxlbmd0aCkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCVNNQ19vdXR3KCBzdGF0dXMsIGlvYWRkciwgREFUQV9SRUcgKTsJCQlcCi0JCVNNQ19vdXR3KCBsZW5ndGgsIGlvYWRkciwgREFUQV9SRUcgKTsJCQlcCisJCWlmIChTTUNfQ0FOX1VTRV8zMkJJVCkJCQkJCVwKKwkJCVNNQ19vdXRsKChzdGF0dXMpIHwgKGxlbmd0aCk8PDE2LCBpb2FkZHIsIERBVEFfUkVHKTsgXAorCQllbHNlIHsJCQkJCQkJXAorCQkJU01DX291dHcoc3RhdHVzLCBpb2FkZHIsIERBVEFfUkVHKTsJCVwKKwkJCVNNQ19vdXR3KGxlbmd0aCwgaW9hZGRyLCBEQVRBX1JFRyk7CQlcCisJCX0JCQkJCQkJXAogCX0gd2hpbGUgKDApCisKICNkZWZpbmUgU01DX0dFVF9QS1RfSERSKHN0YXR1cywgbGVuZ3RoKQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKLQkJKHN0YXR1cykgPSBTTUNfaW53KCBpb2FkZHIsIERBVEFfUkVHICk7CQkJXAotCQkobGVuZ3RoKSA9IFNNQ19pbncoIGlvYWRkciwgREFUQV9SRUcgKTsJCQlcCi0JfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWYgU01DX0NBTl9VU0VfMzJCSVQKLSNkZWZpbmUgX1NNQ19QVVNIX0RBVEEocCwgbCkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQljaGFyICpfX3B0ciA9IChwKTsJCQkJCVwKLQkJaW50IF9fbGVuID0gKGwpOwkJCQkJXAotCQlpZiAoX19sZW4gPj0gMiAmJiAodW5zaWduZWQgbG9uZylfX3B0ciAmIDIpIHsJCVwKLQkJCV9fbGVuIC09IDI7CQkJCQlcCi0JCQlTTUNfb3V0dyggKih1MTYgKilfX3B0ciwgaW9hZGRyLCBEQVRBX1JFRyApOwlcCi0JCQlfX3B0ciArPSAyOwkJCQkJXAotCQl9CQkJCQkJCVwKLQkJU01DX291dHNsKCBpb2FkZHIsIERBVEFfUkVHLCBfX3B0ciwgX19sZW4gPj4gMik7CVwKLQkJaWYgKF9fbGVuICYgMikgewkJCQkJXAotCQkJX19wdHIgKz0gKF9fbGVuICYgfjMpOwkJCQlcCi0JCQlTTUNfb3V0dyggKigodTE2ICopX19wdHIpLCBpb2FkZHIsIERBVEFfUkVHICk7CVwKKwkJaWYgKFNNQ19DQU5fVVNFXzMyQklUKSB7CQkJCVwKKwkJCXVuc2lnbmVkIGludCBfX3ZhbCA9IFNNQ19pbmwoaW9hZGRyLCBEQVRBX1JFRyk7CVwKKwkJCShzdGF0dXMpID0gX192YWwgJiAweGZmZmY7CQkJXAorCQkJKGxlbmd0aCkgPSBfX3ZhbCA+PiAxNjsJCQkJXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCShzdGF0dXMpID0gU01DX2ludyhpb2FkZHIsIERBVEFfUkVHKTsJCVwKKwkJCShsZW5ndGgpID0gU01DX2ludyhpb2FkZHIsIERBVEFfUkVHKTsJCVwKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKLSNkZWZpbmUgX1NNQ19QVUxMX0RBVEEocCwgbCkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQljaGFyICpfX3B0ciA9IChwKTsJCQkJCVwKLQkJaW50IF9fbGVuID0gKGwpOwkJCQkJXAotCQlpZiAoKHVuc2lnbmVkIGxvbmcpX19wdHIgJiAyKSB7CQkJCVwKLQkJCS8qCQkJCQkJXAotCQkJICogV2Ugd2FudCAzMmJpdCBhbGlnbm1lbnQgaGVyZS4JCVwKLQkJCSAqIFNpbmNlIHNvbWUgYnVzZXMgcGVyZm9ybSBhIGZ1bGwgMzJiaXQJXAotCQkJICogZmV0Y2ggZXZlbiBmb3IgMTZiaXQgZGF0YSB3ZSBjYW4ndCB1c2UJXAotCQkJICogU01DX2ludygpIGhlcmUuICBCYWNrIGJvdGggc291cmNlIChvbiBjaGlwCVwKLQkJCSAqIGFuZCBkZXN0aW5hdGlvbikgcG9pbnRlcnMgb2YgMiBieXRlcy4JXAotCQkJICovCQkJCQkJXAotCQkJX19wdHIgLT0gMjsJCQkJCVwKLQkJCV9fbGVuICs9IDI7CQkJCQlcCi0JCQlTTUNfU0VUX1BUUiggMnxQVFJfUkVBRHxQVFJfUkNWfFBUUl9BVVRPSU5DICk7CVwKLQkJfQkJCQkJCQlcCi0JCV9fbGVuICs9IDI7CQkJCQkJXAotCQlTTUNfaW5zbCggaW9hZGRyLCBEQVRBX1JFRywgX19wdHIsIF9fbGVuID4+IDIpOwkJXAotCX0gd2hpbGUgKDApCi0jZWxpZiBTTUNfQ0FOX1VTRV8xNkJJVAotI2RlZmluZSBfU01DX1BVU0hfREFUQShwLCBsKQlTTUNfb3V0c3coIGlvYWRkciwgREFUQV9SRUcsIHAsIChsKSA+PiAxICkKLSNkZWZpbmUgX1NNQ19QVUxMX0RBVEEocCwgbCkJU01DX2luc3cgKCBpb2FkZHIsIERBVEFfUkVHLCBwLCAobCkgPj4gMSApCi0jZWxpZiBTTUNfQ0FOX1VTRV84QklUCi0jZGVmaW5lIF9TTUNfUFVTSF9EQVRBKHAsIGwpCVNNQ19vdXRzYiggaW9hZGRyLCBEQVRBX1JFRywgcCwgbCApCi0jZGVmaW5lIF9TTUNfUFVMTF9EQVRBKHAsIGwpCVNNQ19pbnNiICggaW9hZGRyLCBEQVRBX1JFRywgcCwgbCApCi0jZW5kaWYKIAotI2lmICEgU01DX0NBTl9VU0VfMTZCSVQKLSNkZWZpbmUgU01DX291dHcoeCwgaW9hZGRyLCByZWcpCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgX192YWwxNiA9ICh4KTsJCQkJXAotCQlTTUNfb3V0YiggX192YWwxNiwgaW9hZGRyLCByZWcgKTsJCQlcCi0JCVNNQ19vdXRiKCBfX3ZhbDE2ID4+IDgsIGlvYWRkciwgcmVnICsgKDEgPDwgU01DX0lPX1NISUZUKSk7XAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIFNNQ19pbncoaW9hZGRyLCByZWcpCQkJCQkJXAotCSh7CQkJCQkJCQlcCi0JCXVuc2lnbmVkIGludCBfX3ZhbDE2OwkJCQkJXAotCQlfX3ZhbDE2ID0gIFNNQ19pbmIoIGlvYWRkciwgcmVnICk7CQkJXAotCQlfX3ZhbDE2IHw9IFNNQ19pbmIoIGlvYWRkciwgcmVnICsgKDEgPDwgU01DX0lPX1NISUZUKSkgPDwgODsgXAotCQlfX3ZhbDE2OwkJCQkJCVwKLQl9KQotI2VuZGlmCi0KLSNpZmRlZiBTTUNfQ0FOX1VTRV9EQVRBQ1MKICNkZWZpbmUgU01DX1BVU0hfREFUQShwLCBsKQkJCQkJCVwKLQlpZiAoIGxwLT5kYXRhY3MgKSB7CQkJCQkJXAotCQl1bnNpZ25lZCBjaGFyICpfX3B0ciA9IChwKTsJCQkJXAotCQlpbnQgX19sZW4gPSAobCk7CQkJCQlcCi0gCQlpZiAoX19sZW4gPj0gMiAmJiAodW5zaWduZWQgbG9uZylfX3B0ciAmIDIpIHsJCVwKLSAJCQlfX2xlbiAtPSAyOwkJCQkJXAotIAkJCVNNQ19vdXR3KCAqKCh1MTYgKilfX3B0ciksIGlvYWRkciwgREFUQV9SRUcgKTsJXAotIAkJCV9fcHRyICs9IDI7CQkJCQlcCi0gCQl9CQkJCQkJCVwKLQkJb3V0c2wobHAtPmRhdGFjcywgX19wdHIsIF9fbGVuID4+IDIpOwkJCVwKLSAJCWlmIChfX2xlbiAmIDIpIHsJCQkJCVwKLSAJCQlfX3B0ciArPSAoX19sZW4gJiB+Myk7CQkJCVwKLSAJCQlTTUNfb3V0dyggKigodTE2ICopX19wdHIpLCBpb2FkZHIsIERBVEFfUkVHICk7CVwKLSAJCX0JCQkJCQkJXAotCX0gZWxzZSB7CQkJCQkJCVwKLQkJX1NNQ19QVVNIX0RBVEEocCwgbCk7CQkJCQlcCi0JfQorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKFNNQ19DQU5fVVNFXzMyQklUKSB7CQkJCVwKKwkJCXZvaWQgKl9fcHRyID0gKHApOwkJCQlcCisJCQlpbnQgX19sZW4gPSAobCk7CQkJCVwKKwkJCXZvaWQgKl9faW9hZGRyID0gaW9hZGRyOwkJCVwKKwkJCWlmIChfX2xlbiA+PSAyICYmICh1bnNpZ25lZCBsb25nKV9fcHRyICYgMikgewlcCisJCQkJX19sZW4gLT0gMjsJCQkJXAorCQkJCVNNQ19vdXR3KCoodTE2ICopX19wdHIsIGlvYWRkciwgREFUQV9SRUcpOyBcCisJCQkJX19wdHIgKz0gMjsJCQkJXAorCQkJfQkJCQkJCVwKKwkJCWlmIChTTUNfQ0FOX1VTRV9EQVRBQ1MgJiYgbHAtPmRhdGFjcykJCVwKKwkJCQlfX2lvYWRkciA9IGxwLT5kYXRhY3M7CQkJXAorCQkJU01DX291dHNsKF9faW9hZGRyLCBEQVRBX1JFRywgX19wdHIsIF9fbGVuPj4yKTsJXAorCQkJaWYgKF9fbGVuICYgMikgewkJCQlcCisJCQkJX19wdHIgKz0gKF9fbGVuICYgfjMpOwkJCVwKKwkJCQlTTUNfb3V0dygqKCh1MTYgKilfX3B0ciksIGlvYWRkciwgREFUQV9SRUcpOyBcCisJCQl9CQkJCQkJXAorCQl9IGVsc2UgaWYgKFNNQ19DQU5fVVNFXzE2QklUKQkJCQlcCisJCQlTTUNfb3V0c3coaW9hZGRyLCBEQVRBX1JFRywgcCwgKGwpID4+IDEpOwlcCisJCWVsc2UgaWYgKFNNQ19DQU5fVVNFXzhCSVQpCQkJCVwKKwkJCVNNQ19vdXRzYihpb2FkZHIsIERBVEFfUkVHLCBwLCBsKTsJCVwKKwl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNNQ19QVUxMX0RBVEEocCwgbCkJCQkJCQlcCi0JaWYgKCBscC0+ZGF0YWNzICkgeyAJCQkJCQlcCi0JCXVuc2lnbmVkIGNoYXIgKl9fcHRyID0gKHApOwkJCQlcCi0JCWludCBfX2xlbiA9IChsKTsJCQkJCVwKLQkJaWYgKCh1bnNpZ25lZCBsb25nKV9fcHRyICYgMikgewkJCSAJXAotCQkJLyoJCQkJCQlcCi0JCQkgKiBXZSB3YW50IDMyYml0IGFsaWdubWVudCBoZXJlLgkJXAotCQkJICogU2luY2Ugc29tZSBidXNlcyBwZXJmb3JtIGEgZnVsbCAzMmJpdAlcCi0JCQkgKiBmZXRjaCBldmVuIGZvciAxNmJpdCBkYXRhIHdlIGNhbid0IHVzZQlcCi0JCQkgKiBTTUNfaW53KCkgaGVyZS4gIEJhY2sgYm90aCBzb3VyY2UgKG9uIGNoaXAJXAotCQkJICogYW5kIGRlc3RpbmF0aW9uKSBwb2ludGVycyBvZiAyIGJ5dGVzLglcCi0JCQkgKi8JCQkJCQlcCi0JCQlfX3B0ciAtPSAyOwkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKFNNQ19DQU5fVVNFXzMyQklUKSB7CQkJCVwKKwkJCXZvaWQgKl9fcHRyID0gKHApOwkJCQlcCisJCQlpbnQgX19sZW4gPSAobCk7CQkJCVwKKwkJCXZvaWQgKl9faW9hZGRyID0gaW9hZGRyOwkJCVwKKwkJCWlmICgodW5zaWduZWQgbG9uZylfX3B0ciAmIDIpIHsJCQlcCisJCQkJLyoJCQkJCVwKKwkJCQkgKiBXZSB3YW50IDMyYml0IGFsaWdubWVudCBoZXJlLglcCisJCQkJICogU2luY2Ugc29tZSBidXNlcyBwZXJmb3JtIGEgZnVsbAlcCisJCQkJICogMzJiaXQgZmV0Y2ggZXZlbiBmb3IgMTZiaXQgZGF0YQlcCisJCQkJICogd2UgY2FuJ3QgdXNlIFNNQ19pbncoKSBoZXJlLgkJXAorCQkJCSAqIEJhY2sgYm90aCBzb3VyY2UgKG9uLWNoaXApIGFuZAlcCisJCQkJICogZGVzdGluYXRpb24gcG9pbnRlcnMgb2YgMiBieXRlcy4JXAorCQkJCSAqIFRoaXMgaXMgcG9zc2libGUgc2luY2UgdGhlIGNhbGwgdG8JXAorCQkJCSAqIFNNQ19HRVRfUEtUX0hEUigpIGFscmVhZHkgYWR2YW5jZWQJXAorCQkJCSAqIHRoZSBzb3VyY2UgcG9pbnRlciBvZiA0IGJ5dGVzLCBhbmQJXAorCQkJCSAqIHRoZSBza2JfcmVzZXJ2ZShza2IsIDIpIGFkdmFuY2VkCVwKKwkJCQkgKiB0aGUgZGVzdGluYXRpb24gcG9pbnRlciBvZiAyIGJ5dGVzLglcCisJCQkJICovCQkJCQlcCisJCQkJX19wdHIgLT0gMjsJCQkJXAorCQkJCV9fbGVuICs9IDI7CQkJCVwKKwkJCQlTTUNfU0VUX1BUUigyfFBUUl9SRUFEfFBUUl9SQ1Z8UFRSX0FVVE9JTkMpOyBcCisJCQl9CQkJCQkJXAorCQkJaWYgKFNNQ19DQU5fVVNFX0RBVEFDUyAmJiBscC0+ZGF0YWNzKQkJXAorCQkJCV9faW9hZGRyID0gbHAtPmRhdGFjczsJCQlcCiAJCQlfX2xlbiArPSAyOwkJCQkJXAotCQkJU01DX1NFVF9QVFIoIDJ8UFRSX1JFQUR8UFRSX1JDVnxQVFJfQVVUT0lOQyApOyAJXAotCQl9CQkJCQkJCVwKLQkJX19sZW4gKz0gMjsJCQkJCQlcCi0JCWluc2woIGxwLT5kYXRhY3MsIF9fcHRyLCBfX2xlbiA+PiAyKTsJCQlcCi0JfSBlbHNlIHsJCQkJCQkJXAotCQlfU01DX1BVTExfREFUQShwLCBsKTsJCQkJCVwKLQl9Ci0jZWxzZQotI2RlZmluZSBTTUNfUFVTSF9EQVRBKHAsIGwpIF9TTUNfUFVTSF9EQVRBKHAsIGwpCi0jZGVmaW5lIFNNQ19QVUxMX0RBVEEocCwgbCkgX1NNQ19QVUxMX0RBVEEocCwgbCkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKFNNQ19JTlRFUlJVUFRfUFJFQU1CTEUpCi0jIGRlZmluZSBTTUNfSU5URVJSVVBUX1BSRUFNQkxFCi0jZW5kaWYKKwkJCVNNQ19pbnNsKF9faW9hZGRyLCBEQVRBX1JFRywgX19wdHIsIF9fbGVuPj4yKTsJXAorCQl9IGVsc2UgaWYgKFNNQ19DQU5fVVNFXzE2QklUKQkJCQlcCisJCQlTTUNfaW5zdyhpb2FkZHIsIERBVEFfUkVHLCBwLCAobCkgPj4gMSk7CVwKKwkJZWxzZSBpZiAoU01DX0NBTl9VU0VfOEJJVCkJCQkJXAorCQkJU01DX2luc2IoaW9hZGRyLCBEQVRBX1JFRywgcCwgbCk7CQlcCisJfSB3aGlsZSAoMCkKIAogI2VuZGlmICAvKiBfU01DOTFYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCBkMTY3ZGVkLi4zNWIxODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogc3RhdGljIGludCBtdHU7CiAvKiBNYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGZpbHRlciAodnMuIHJ4LWFsbC1tdWx0aWNhc3QpLgogICAgVGhlIFN0YXJmaXJlIGhhcyBhIDUxMiBlbGVtZW50IGhhc2ggdGFibGUgYmFzZWQgb24gdGhlIEV0aGVybmV0IENSQy4gKi8KLXN0YXRpYyBpbnQgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDUxMjsKK3N0YXRpYyBjb25zdCBpbnQgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDUxMjsKIC8qIFdoZXRoZXIgdG8gZG8gVENQL1VEUCBjaGVja3N1bXMgaW4gaGFyZHdhcmUgKi8KIHN0YXRpYyBpbnQgZW5hYmxlX2h3X2Nrc3VtID0gMTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc3RhcmZpcmVfcGNpX3RibCk7CiAKIC8qIEEgY2hpcCBjYXBhYmlsaXRpZXMgdGFibGUsIG1hdGNoaW5nIHRoZSBDSF94eHggZW50cmllcyBpbiB4eHhfcGNpX3RibFtdIGFib3ZlLiAqLwotc3RhdGljIHN0cnVjdCBjaGlwX2luZm8geworc3RhdGljIGNvbnN0IHN0cnVjdCBjaGlwX2luZm8gewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGRydl9mbGFnczsKIH0gbmV0ZHJ2X3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CkBAIC0yMDg0LDYgKzIwODQsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzdGFyZmlyZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOworCQluZXRkZXZfY2xvc2UoZGV2KTsKKwl9CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldixzdGF0ZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RhcmZpcmVfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluZXRkZXZfb3BlbihkZXYpOworCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHN0YXJmaXJlX3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMjExNSw2ICsyMTQ3LDEwIEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLnByb2JlCQk9IHN0YXJmaXJlX2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3RhcmZpcmVfcmVtb3ZlX29uZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBzdGFyZmlyZV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc3RhcmZpcmVfcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCS5pZF90YWJsZQk9IHN0YXJmaXJlX3BjaV90YmwsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCmluZGV4IDAxYmRiMjMzLi5kNGMwMDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYwpAQCAtNzEsNyArNzEsNyBAQAogI2Vsc2UKIHN0YXRpYyBpbnQgbGFuY2VfZGVidWcgPSAxOwogI2VuZGlmCi1NT0RVTEVfUEFSTShsYW5jZV9kZWJ1ZywgImkiKTsKK21vZHVsZV9wYXJhbShsYW5jZV9kZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobGFuY2VfZGVidWcsICJTVU4zIExhbmNlIGRlYnVnIGxldmVsICgwLTMpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCmluZGV4IDBhYjljMzguLjYxZWVjNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiBzdGF0aWMgaW50IGRlYnVnID0gMTsJCQkvKiAxIG5vcm1hbCBtZXNzYWdlcywgMCBxdWlldCAuLiA3IHZlcmJvc2UuICovCiAvKiBNYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGZpbHRlciAodnMuIHJ4LWFsbC1tdWx0aWNhc3QpLgogICAgVHlwaWNhbCBpcyBhIDY0IGVsZW1lbnQgaGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgRXRoZXJuZXQgQ1JDLiAgKi8KLXN0YXRpYyBpbnQgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDMyOworc3RhdGljIGNvbnN0IGludCBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0ID0gMzI7CiAKIC8qIFNldCB0aGUgY29weSBicmVha3BvaW50IGZvciB0aGUgY29weS1vbmx5LXRpbnktZnJhbWVzIHNjaGVtZS4KICAgIFNldHRpbmcgdG8gPiAxNTE4IGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4KQEAgLTI5OCw3ICsyOTgsNyBAQAogc3RydWN0IHBjaV9pZF9pbmZvIHsKICAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKIH07Ci1zdGF0aWMgc3RydWN0IHBjaV9pZF9pbmZvIHBjaV9pZF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2lkX2luZm8gcGNpX2lkX3RibFtdID0gewogCXsiRC1MaW5rIERGRS01NTBUWCBGQVNUIEV0aGVybmV0IEFkYXB0ZXIifSwKIAl7IkQtTGluayBERkUtNTUwRlggMTAwTWJwcyBGaWJlci1vcHRpY3MgQWRhcHRlciJ9LAogCXsiRC1MaW5rIERGRS01ODBUWCA0IHBvcnQgU2VydmVyIEFkYXB0ZXIifSwKQEAgLTYzMyw5ICs2MzMsMTMgQEAKIAogCW5wLT5waHlzWzBdID0gMTsJCS8qIERlZmF1bHQgc2V0dGluZyAqLwogCW5wLT5taWlfcHJlYW1ibGVfcmVxdWlyZWQrKzsKKwkvKgorCSAqIEl0IHNlZW1zIHNvbWUgcGh5cyBkb2Vzbid0IGRlYWwgd2VsbCB3aXRoIGFkZHJlc3MgMCBiZWluZyBhY2Nlc3NlZAorCSAqIGZpcnN0LCBzbyBsZWF2ZSBhZGRyZXNzIHplcm8gdG8gdGhlIGVuZCBvZiB0aGUgbG9vcCAoMzIgJiAzMSkuCisJICovCiAJZm9yIChwaHkgPSAxOyBwaHkgPD0gMzIgJiYgcGh5X2lkeCA8IE1JSV9DTlQ7IHBoeSsrKSB7Ci0JCWludCBtaWlfc3RhdHVzID0gbWRpb19yZWFkKGRldiwgcGh5LCBNSUlfQk1TUik7CiAJCWludCBwaHl4ID0gcGh5ICYgMHgxZjsKKwkJaW50IG1paV9zdGF0dXMgPSBtZGlvX3JlYWQoZGV2LCBwaHl4LCBNSUlfQk1TUik7CiAJCWlmIChtaWlfc3RhdHVzICE9IDB4ZmZmZiAgJiYgIG1paV9zdGF0dXMgIT0gMHgwMDAwKSB7CiAJCQlucC0+cGh5c1twaHlfaWR4KytdID0gcGh5eDsKIAkJCW5wLT5taWlfaWYuYWR2ZXJ0aXNpbmcgPSBtZGlvX3JlYWQoZGV2LCBwaHl4LCBNSUlfQURWRVJUSVNFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggMjhjZTQ3YS4uMzhjZDMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTIyODQsNyArMjI4NSw3IEBACiB7CiAJc3RydWN0IGdlbSAqZ3AgPSAoc3RydWN0IGdlbSAqKSBkYXRhOwogCi0JZG93bigmZ3AtPnBtX3NlbSk7CisJbXV0ZXhfbG9jaygmZ3AtPnBtX211dGV4KTsKIAogCW5ldGlmX3BvbGxfZGlzYWJsZShncC0+ZGV2KTsKIApAQCAtMjMxMSw3ICsyMzEyLDcgQEAKIAogCW5ldGlmX3BvbGxfZW5hYmxlKGdwLT5kZXYpOwogCi0JdXAoJmdwLT5wbV9zZW0pOworCW11dGV4X3VubG9jaygmZ3AtPnBtX211dGV4KTsKIH0KIAogCkBAIC0yMzIwLDE0ICsyMzIxLDE0IEBACiAJc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7CiAJaW50IHJjID0gMDsKIAotCWRvd24oJmdwLT5wbV9zZW0pOworCW11dGV4X2xvY2soJmdwLT5wbV9tdXRleCk7CiAKIAkvKiBXZSBuZWVkIHRoZSBjZWxsIGVuYWJsZWQgKi8KIAlpZiAoIWdwLT5hc2xlZXApCiAJCXJjID0gZ2VtX2RvX3N0YXJ0KGRldik7CiAJZ3AtPm9wZW5lZCA9IChyYyA9PSAwKTsKIAotCXVwKCZncC0+cG1fc2VtKTsKKwltdXRleF91bmxvY2soJmdwLT5wbV9tdXRleCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMzQwLDEzICsyMzQxLDEzIEBACiAJICogb3VyIGNhbGxlciAoZGV2X2Nsb3NlKSBhbHJlYWR5IGRpZCBpdCBmb3IgdXMKIAkgKi8KIAotCWRvd24oJmdwLT5wbV9zZW0pOworCW11dGV4X2xvY2soJmdwLT5wbV9tdXRleCk7CiAKIAlncC0+b3BlbmVkID0gMDsJCiAJaWYgKCFncC0+YXNsZWVwKQogCQlnZW1fZG9fc3RvcChkZXYsIDApOwogCi0JdXAoJmdwLT5wbV9zZW0pOworCW11dGV4X3VubG9jaygmZ3AtPnBtX211dGV4KTsKIAkKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNTgsNyArMjM1OSw3IEBACiAJc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmdwLT5wbV9zZW0pOworCW11dGV4X2xvY2soJmdwLT5wbV9tdXRleCk7CiAKIAluZXRpZl9wb2xsX2Rpc2FibGUoZGV2KTsKIApAQCAtMjM5MSwxMSArMjM5MiwxMSBAQAogCS8qIFN0b3AgdGhlIGxpbmsgdGltZXIgKi8KIAlkZWxfdGltZXJfc3luYygmZ3AtPmxpbmtfdGltZXIpOwogCi0JLyogTm93IHdlIHJlbGVhc2UgdGhlIHNlbWFwaG9yZSB0byBub3QgYmxvY2sgdGhlIHJlc2V0IHRhc2sgd2hvCisJLyogTm93IHdlIHJlbGVhc2UgdGhlIG11dGV4IHRvIG5vdCBibG9jayB0aGUgcmVzZXQgdGFzayB3aG8KIAkgKiBjYW4gdGFrZSBpdCB0b28uIFdlIGFyZSBtYXJrZWQgYXNsZWVwLCBzbyB0aGVyZSB3aWxsIGJlIG5vCiAJICogY29uZmxpY3QgaGVyZQogCSAqLwotCXVwKCZncC0+cG1fc2VtKTsKKwltdXRleF91bmxvY2soJmdwLT5wbV9tdXRleCk7CiAKIAkvKiBXYWl0IGZvciBhIHBlbmRpbmcgcmVzZXQgdGFzayB0byBjb21wbGV0ZSAqLwogCXdoaWxlIChncC0+cmVzZXRfdGFza19wZW5kaW5nKQpAQCAtMjQyNCw3ICsyNDI1LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXN1bWluZ1xuIiwgZGV2LT5uYW1lKTsKIAotCWRvd24oJmdwLT5wbV9zZW0pOworCW11dGV4X2xvY2soJmdwLT5wbV9tdXRleCk7CiAKIAkvKiBLZWVwIHRoZSBjZWxsIGVuYWJsZWQgZHVyaW5nIHRoZSBlbnRpcmUgb3BlcmF0aW9uLCBubyBuZWVkIHRvCiAJICogdGFrZSBhIGxvY2sgaGVyZSB0aG8gc2luY2Ugbm90aGluZyBlbHNlIGNhbiBoYXBwZW4gd2hpbGUgd2UgYXJlCkBAIC0yNDQwLDcgKzI0NDEsNyBAQAogCQkgKiBzdGlsbCBhc2xlZXAsIGEgbmV3IHNsZWVwIGN5Y2xlIG1heSBicmluZyBpdCBiYWNrCiAJCSAqLwogCQlnZW1fcHV0X2NlbGwoZ3ApOwotCQl1cCgmZ3AtPnBtX3NlbSk7CisJCW11dGV4X3VubG9jaygmZ3AtPnBtX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQogCXBjaV9zZXRfbWFzdGVyKGdwLT5wZGV2KTsKQEAgLTI0ODYsNyArMjQ4Nyw3IEBACiAKIAluZXRpZl9wb2xsX2VuYWJsZShkZXYpOwogCQotCXVwKCZncC0+cG1fc2VtKTsKKwltdXRleF91bmxvY2soJmdwLT5wbV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1OTEsNyArMjU5Miw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWRvd24oJmdwLT5wbV9zZW0pOworCW11dGV4X2xvY2soJmdwLT5wbV9tdXRleCk7CiAJc3Bpbl9sb2NrX2lycSgmZ3AtPmxvY2spOwogCXNwaW5fbG9jaygmZ3AtPnR4X2xvY2spOwogCWRldi0+bXR1ID0gbmV3X210dTsKQEAgLTI2MDIsNyArMjYwMyw3IEBACiAJfQogCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7CiAJc3Bpbl91bmxvY2tfaXJxKCZncC0+bG9jayk7Ci0JdXAoJmdwLT5wbV9zZW0pOworCW11dGV4X3VubG9jaygmZ3AtPnBtX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjc3MSwxMCArMjc3MiwxMCBAQAogCWludCByYyA9IC1FT1BOT1RTVVBQOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBIb2xkIHRoZSBQTSBzZW1hcGhvcmUgd2hpbGUgZG9pbmcgaW9jdGwncyBvciB3ZSBtYXkgY29sbGlkZQorCS8qIEhvbGQgdGhlIFBNIG11dGV4IHdoaWxlIGRvaW5nIGlvY3RsJ3Mgb3Igd2UgbWF5IGNvbGxpZGUKIAkgKiB3aXRoIHBvd2VyIG1hbmFnZW1lbnQuCiAJICovCi0JZG93bigmZ3AtPnBtX3NlbSk7CisJbXV0ZXhfbG9jaygmZ3AtPnBtX211dGV4KTsKIAkJCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CiAJZ2VtX2dldF9jZWxsKGdwKTsKQEAgLTI4MTIsNyArMjgxMyw3IEBACiAJZ2VtX3B1dF9jZWxsKGdwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwogCi0JdXAoJmdwLT5wbV9zZW0pOworCW11dGV4X3VubG9jaygmZ3AtPnBtX211dGV4KTsKIAkKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMDMzLDcgKzMwMzQsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmdwLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZ3AtPnR4X2xvY2spOwotCWluaXRfTVVURVgoJmdwLT5wbV9zZW0pOworCW11dGV4X2luaXQoJmdwLT5wbV9tdXRleCk7CiAKIAlpbml0X3RpbWVyKCZncC0+bGlua190aW1lcik7CiAJZ3AtPmxpbmtfdGltZXIuZnVuY3Rpb24gPSBnZW1fbGlua190aW1lcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5oIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmgKaW5kZXggMTMwMDZkNy4uODk4NDcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmgKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmgKQEAgLTk4MCwxNSArOTgwLDE1IEBACiAJaW50CQkJdHhfbmV3LCB0eF9vbGQ7CiAKIAl1bnNpZ25lZCBpbnQgaGFzX3dvbCA6IDE7CS8qIGNoaXAgc3VwcG9ydHMgd2FrZS1vbi1sYW4gKi8KLQl1bnNpZ25lZCBpbnQgYXNsZWVwIDogMTsJLyogY2hpcCBhc2xlZXAsIHByb3RlY3RlZCBieSBwbV9zZW0gKi8KKwl1bnNpZ25lZCBpbnQgYXNsZWVwIDogMTsJLyogY2hpcCBhc2xlZXAsIHByb3RlY3RlZCBieSBwbV9tdXRleCAqLwogCXVuc2lnbmVkIGludCBhc2xlZXBfd29sIDogMTsJLyogd2FzIGFzbGVlcCB3aXRoIFdPTCBlbmFibGVkICovCi0JdW5zaWduZWQgaW50IG9wZW5lZCA6IDE7CS8qIGRyaXZlciBvcGVuZWQsIHByb3RlY3RlZCBieSBwbV9zZW0gKi8KKwl1bnNpZ25lZCBpbnQgb3BlbmVkIDogMTsJLyogZHJpdmVyIG9wZW5lZCwgcHJvdGVjdGVkIGJ5IHBtX211dGV4ICovCiAJdW5zaWduZWQgaW50IHJ1bm5pbmcgOiAxOwkvKiBjaGlwIHJ1bm5pbmcsIHByb3RlY3RlZCBieSBsb2NrICovCiAJCiAJLyogY2VsbCBlbmFibGUgY291bnQsIHByb3RlY3RlZCBieSBsb2NrICovCiAJaW50CQkJY2VsbF9lbmFibGVkOyAgCiAJCi0Jc3RydWN0IHNlbWFwaG9yZQlwbV9zZW07CisJc3RydWN0IG11dGV4CQlwbV9tdXRleDsKIAogCXUzMgkJCW1zZ19lbmFibGU7CiAJdTMyCQkJc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCmluZGV4IGQzZGRiNDEuLmNiMGFiYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJzdW5nZW1fcGh5LmgiCiAKIC8qIExpbmsgbW9kZXMgb2YgdGhlIEJDTTU0MDAgUEhZICovCi1zdGF0aWMgaW50IHBoeV9CQ001NDAwX2xpbmtfdGFibGVbOF1bM10gPSB7CitzdGF0aWMgY29uc3QgaW50IHBoeV9CQ001NDAwX2xpbmtfdGFibGVbOF1bM10gPSB7CiAJeyAwLCAwLCAwIH0sCS8qIE5vIGxpbmsgKi8KIAl7IDAsIDAsIDAgfSwJLyogMTBCVCBIYWxmIER1cGxleCAqLwogCXsgMSwgMCwgMCB9LAkvKiAxMEJUIEZ1bGwgRHVwbGV4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IGU3ZGM2NTMuLmI1NDczMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02OSw4ICs2OSw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjQ5IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYiAyLCAyMDA2IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNTQiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWFyIDIzLCAyMDA2IgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTIyMSwxMCArMjIxLDI2IEBACiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTNGLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU0LAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU0TSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAorCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAorCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NU0sCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKKwl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODcsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKKwl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODdNLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzE0LAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzE0UywKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTcxNSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAorCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTcxNVMsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODAsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODBTLApAQCAtNTM0LDYgKzU1MCw5IEBACiAJICAgICAodHAtPm1pc2NfaG9zdF9jdHJsICYgfk1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCkpOwogCXR3MzJfbWFpbGJveF9mKE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywKIAkJICAgICAgICh0cC0+bGFzdF90YWcgPDwgMjQpKTsKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl8xU0hPVF9NU0kpCisJCXR3MzJfbWFpbGJveF9mKE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywKKwkJCSAgICAgICAodHAtPmxhc3RfdGFnIDw8IDI0KSk7CiAJdGczX2NvbmRfaW50KHRwKTsKIH0KIApAQCAtMTAzOCw5ICsxMDU3LDExIEBACiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfcGVlcjsKIAogCQlkZXZfcGVlciA9IHBjaV9nZXRfZHJ2ZGF0YSh0cC0+cGRldl9wZWVyKTsKKwkJLyogcmVtb3ZlX29uZSgpIG1heSBoYXZlIGJlZW4gcnVuIG9uIHRoZSBwZWVyLiAqLwogCQlpZiAoIWRldl9wZWVyKQotCQkJQlVHKCk7Ci0JCXRwX3BlZXIgPSBuZXRkZXZfcHJpdihkZXZfcGVlcik7CisJCQl0cF9wZWVyID0gdHA7CisJCWVsc2UKKwkJCXRwX3BlZXIgPSBuZXRkZXZfcHJpdihkZXZfcGVlcik7CiAJfQogCiAJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0VOQUJMRSkgIT0gMCB8fApAQCAtMTEzMSw3ICsxMTUyLDIwIEBACiBzdGF0aWMgaW50IHRnM19udnJhbV9sb2NrKHN0cnVjdCB0ZzMgKik7CiBzdGF0aWMgdm9pZCB0ZzNfbnZyYW1fdW5sb2NrKHN0cnVjdCB0ZzMgKik7CiAKLXN0YXRpYyBpbnQgdGczX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdGczICp0cCwgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgdGczX3Bvd2VyX2Rvd25fcGh5KHN0cnVjdCB0ZzMgKnRwKQoreworCS8qIFRoZSBQSFkgc2hvdWxkIG5vdCBiZSBwb3dlcmVkIGRvd24gb24gc29tZSBjaGlwcyBiZWNhdXNlCisJICogb2YgYnVncy4KKwkgKi8KKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgfHwKKwkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzgwICYmCisJICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSkpCisJCXJldHVybjsKKwl0ZzNfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTsKK30KKworc3RhdGljIGludCB0ZzNfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCB0ZzMgKnRwLCBwY2lfcG93ZXJfdCBzdGF0ZSkKIHsKIAl1MzIgbWlzY19ob3N0X2N0cmw7CiAJdTE2IHBvd2VyX2NvbnRyb2wsIHBvd2VyX2NhcHM7CkBAIC0xMTUwLDcgKzExODQsNyBAQAogCXBvd2VyX2NvbnRyb2wgfD0gUENJX1BNX0NUUkxfUE1FX1NUQVRVUzsKIAlwb3dlcl9jb250cm9sICY9IH4oUENJX1BNX0NUUkxfU1RBVEVfTUFTSyk7CiAJc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgMDoKKwljYXNlIFBDSV9EMDoKIAkJcG93ZXJfY29udHJvbCB8PSAwOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsCiAJCQkJICAgICAgcG0gKyBQQ0lfUE1fQ1RSTCwKQEAgLTExNjMsMTUgKzExOTcsMTUgQEAKIAogCQlyZXR1cm4gMDsKIAotCWNhc2UgMToKKwljYXNlIFBDSV9EMToKIAkJcG93ZXJfY29udHJvbCB8PSAxOwogCQlicmVhazsKIAotCWNhc2UgMjoKKwljYXNlIFBDSV9EMjoKIAkJcG93ZXJfY29udHJvbCB8PSAyOwogCQlicmVhazsKIAotCWNhc2UgMzoKKwljYXNlIFBDSV9EM2hvdDoKIAkJcG93ZXJfY29udHJvbCB8PSAzOwogCQlicmVhazsKIApAQCAtMTMxMCw4ICsxMzQ0LDcgQEAKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FWFRfQ1RSTCwKIAkJCQkgICAgIE1JSV9URzNfRVhUX0NUUkxfRk9SQ0VfTEVEX09GRik7CiAJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MDFiMik7Ci0JCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApCi0JCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7CisJCQl0ZzNfcG93ZXJfZG93bl9waHkodHApOwogCQl9CiAJfQogCkBAIC0yNjgwLDYgKzI3MTMsMTIgQEAKIAogCWVyciB8PSB0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZibXNyKTsKIAllcnIgfD0gdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcik7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSB7CisJCWlmICh0cjMyKE1BQ19UWF9TVEFUVVMpICYgVFhfU1RBVFVTX0xJTktfVVApCisJCQlibXNyIHw9IEJNU1JfTFNUQVRVUzsKKwkJZWxzZQorCQkJYm1zciAmPSB+Qk1TUl9MU1RBVFVTOworCX0KIAogCWVyciB8PSB0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNQ1IsICZibWNyKTsKIApAQCAtMjc0OCw2ICsyNzg3LDEzIEBACiAJCQlibWNyID0gbmV3X2JtY3I7CiAJCQllcnIgfD0gdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcik7CiAJCQllcnIgfD0gdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcik7CisJCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09CisJCQkgICAgQVNJQ19SRVZfNTcxNCkgeworCQkJCWlmICh0cjMyKE1BQ19UWF9TVEFUVVMpICYgVFhfU1RBVFVTX0xJTktfVVApCisJCQkJCWJtc3IgfD0gQk1TUl9MU1RBVFVTOworCQkJCWVsc2UKKwkJCQkJYm1zciAmPSB+Qk1TUl9MU1RBVFVTOworCQkJfQogCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVDsKIAkJfQogCX0KQEAgLTMzMzgsNiArMzM4NCwyMyBAQAogCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CiB9CiAKKy8qIE9uZS1zaG90IE1TSSBoYW5kbGVyIC0gQ2hpcCBhdXRvbWF0aWNhbGx5IGRpc2FibGVzIGludGVycnVwdAorICogYWZ0ZXIgc2VuZGluZyBNU0kgc28gZHJpdmVyIGRvZXNuJ3QgaGF2ZSB0byBkbyBpdC4KKyAqLworc3RhdGljIGlycXJldHVybl90IHRnM19tc2lfMXNob3QoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXByZWZldGNoKHRwLT5od19zdGF0dXMpOworCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CisKKwlpZiAobGlrZWx5KCF0ZzNfaXJxX3N5bmModHApKSkKKwkJbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsJCS8qIHNjaGVkdWxlIE5BUEkgcG9sbCAqLworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiAvKiBNU0kgSVNSIC0gTm8gbmVlZCB0byBjaGVjayBmb3IgaW50ZXJydXB0IHNoYXJpbmcgYW5kIG5vIG5lZWQgdG8KICAqIGZsdXNoIHN0YXR1cyBibG9jayBhbmQgaW50ZXJydXB0IG1haWxib3guIFBDSSBvcmRlcmluZyBydWxlcwogICogZ3VhcmFudGVlIHRoYXQgTVNJIHdpbGwgYXJyaXZlIGFmdGVyIHRoZSBzdGF0dXMgYmxvY2suCkBAIC0zNTMyLDkgKzM1OTUsMjMgQEAKIAkJKGJhc2UgKyBsZW4gKyA4IDwgYmFzZSkpOwogfQogCisvKiBUZXN0IGZvciBETUEgYWRkcmVzc2VzID4gNDAtYml0ICovCitzdGF0aWMgaW5saW5lIGludCB0ZzNfNDBiaXRfb3ZlcmZsb3dfdGVzdChzdHJ1Y3QgdGczICp0cCwgZG1hX2FkZHJfdCBtYXBwaW5nLAorCQkJCQkgIGludCBsZW4pCit7CisjaWYgZGVmaW5lZChDT05GSUdfSElHSE1FTSkgJiYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykKKwkJcmV0dXJuICgoKHU2NCkgbWFwcGluZyArIGxlbikgPiBETUFfNDBCSVRfTUFTSyk7CisJcmV0dXJuIDA7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIHRnM19zZXRfdHhkKHN0cnVjdCB0ZzMgKiwgaW50LCBkbWFfYWRkcl90LCBpbnQsIHUzMiwgdTMyKTsKIAotc3RhdGljIGludCB0aWdvbjNfNGdiX2h3YnVnX3dvcmthcm91bmQoc3RydWN0IHRnMyAqdHAsIHN0cnVjdCBza19idWZmICpza2IsCisvKiBXb3JrYXJvdW5kIDRHQiBhbmQgNDAtYml0IGhhcmR3YXJlIERNQSBidWdzLiAqLworc3RhdGljIGludCB0aWdvbjNfZG1hX2h3YnVnX3dvcmthcm91bmQoc3RydWN0IHRnMyAqdHAsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgIHUzMiBsYXN0X3BsdXNfb25lLCB1MzIgKnN0YXJ0LAogCQkJCSAgICAgICB1MzIgYmFzZV9mbGFncywgdTMyIG1zcykKIHsKQEAgLTM2MTQsMTEgKzM2OTEsMTM5IEBACiAJdHhkLT52bGFuX3RhZyA9IHZsYW5fdGFnIDw8IFRYRF9WTEFOX1RBR19TSElGVDsKIH0KIAorLyogaGFyZF9zdGFydF94bWl0IGZvciBkZXZpY2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYnVncyBhbmQKKyAqIHN1cHBvcnQgVEczX0ZMRzJfSFdfVFNPXzIgb25seS4KKyAqLwogc3RhdGljIGludCB0ZzNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdTMyIGxlbiwgZW50cnksIGJhc2VfZmxhZ3MsIG1zczsKKworCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisKKwkvKiBObyBCSCBkaXNhYmxpbmcgZm9yIHR4X2xvY2sgaGVyZS4gIFdlIGFyZSBydW5uaW5nIGluIEJIIGRpc2FibGVkCisJICogY29udGV4dCBhbmQgVFggcmVjbGFpbSBydW5zIHZpYSB0cC0+cG9sbCBpbnNpZGUgb2YgYSBzb2Z0d2FyZQorCSAqIGludGVycnVwdC4gIEZ1cnRoZXJtb3JlLCBJUlEgcHJvY2Vzc2luZyBydW5zIGxvY2tsZXNzIHNvIHdlIGhhdmUKKwkgKiBubyBJUlEgY29udGV4dCBkZWFkbG9ja3MgdG8gd29ycnkgYWJvdXQgZWl0aGVyLiAgUmVqb2ljZSEKKwkgKi8KKwlpZiAoIXNwaW5fdHJ5bG9jaygmdHAtPnR4X2xvY2spKQorCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKKworCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTCh0cCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkpIHsKKwkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCQkJLyogVGhpcyBpcyBhIGhhcmQgZXJyb3IsIGxvZyBpdC4gKi8KKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuICIKKwkJCSAgICAgICAicXVldWUgYXdha2UhXG4iLCBkZXYtPm5hbWUpOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwllbnRyeSA9IHRwLT50eF9wcm9kOworCWJhc2VfZmxhZ3MgPSAwOworI2lmIFRHM19UU09fU1VQUE9SVCAhPSAwCisJbXNzID0gMDsKKwlpZiAoc2tiLT5sZW4gPiAodHAtPmRldi0+bXR1ICsgRVRIX0hMRU4pICYmCisJICAgIChtc3MgPSBza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplKSAhPSAwKSB7CisJCWludCB0Y3Bfb3B0X2xlbiwgaXBfdGNwX2xlbjsKKworCQlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSAmJgorCQkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQl0Y3Bfb3B0X2xlbiA9ICgoc2tiLT5oLnRoLT5kb2ZmIC0gNSkgKiA0KTsKKwkJaXBfdGNwX2xlbiA9IChza2ItPm5oLmlwaC0+aWhsICogNCkgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CisKKwkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfQ1BVX1BSRV9ETUEgfAorCQkJICAgICAgIFRYRF9GTEFHX0NQVV9QT1NUX0RNQSk7CisKKwkJc2tiLT5uaC5pcGgtPmNoZWNrID0gMDsKKwkJc2tiLT5uaC5pcGgtPnRvdF9sZW4gPSBodG9ucyhtc3MgKyBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW4pOworCisJCXNrYi0+aC50aC0+Y2hlY2sgPSAwOworCisJCW1zcyB8PSAoaXBfdGNwX2xlbiArIHRjcF9vcHRfbGVuKSA8PCA5OworCX0KKwllbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKKwkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19UQ1BVRFBfQ1NVTTsKKyNlbHNlCisJbXNzID0gMDsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpCisJCWJhc2VfZmxhZ3MgfD0gVFhEX0ZMQUdfVENQVURQX0NTVU07CisjZW5kaWYKKyNpZiBURzNfVkxBTl9UQUdfVVNFRAorCWlmICh0cC0+dmxncnAgIT0gTlVMTCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCisJCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX1ZMQU4gfAorCQkJICAgICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOworI2VuZGlmCisKKwkvKiBRdWV1ZSBza2IgZGF0YSwgYS5rLmEuIHRoZSBtYWluIHNrYiBmcmFnbWVudC4gKi8KKwltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCXRwLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBza2I7CisJcGNpX3VubWFwX2FkZHJfc2V0KCZ0cC0+dHhfYnVmZmVyc1tlbnRyeV0sIG1hcHBpbmcsIG1hcHBpbmcpOworCisJdGczX3NldF90eGQodHAsIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGJhc2VfZmxhZ3MsCisJCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSB8IChtc3MgPDwgMSkpOworCisJZW50cnkgPSBORVhUX1RYKGVudHJ5KTsKKworCS8qIE5vdyBsb29wIHRocm91Z2ggYWRkaXRpb25hbCBkYXRhIGZyYWdtZW50cywgYW5kIHF1ZXVlIHRoZW0uICovCisJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPiAwKSB7CisJCXVuc2lnbmVkIGludCBpLCBsYXN0OworCisJCWxhc3QgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMTsKKwkJZm9yIChpID0gMDsgaSA8PSBsYXN0OyBpKyspIHsKKwkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKworCQkJbGVuID0gZnJhZy0+c2l6ZTsKKwkJCW1hcHBpbmcgPSBwY2lfbWFwX3BhZ2UodHAtPnBkZXYsCisJCQkJCSAgICAgICBmcmFnLT5wYWdlLAorCQkJCQkgICAgICAgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJCSAgICAgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCQl0cC0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKKwkJCXBjaV91bm1hcF9hZGRyX3NldCgmdHAtPnR4X2J1ZmZlcnNbZW50cnldLCBtYXBwaW5nLCBtYXBwaW5nKTsKKworCQkJdGczX3NldF90eGQodHAsIGVudHJ5LCBtYXBwaW5nLCBsZW4sCisJCQkJICAgIGJhc2VfZmxhZ3MsIChpID09IGxhc3QpIHwgKG1zcyA8PCAxKSk7CisKKwkJCWVudHJ5ID0gTkVYVF9UWChlbnRyeSk7CisJCX0KKwl9CisKKwkvKiBQYWNrZXRzIGFyZSByZWFkeSwgdXBkYXRlIFR4IHByb2R1Y2VyIGlkeCBsb2NhbCBhbmQgb24gY2FyZC4gKi8KKwl0dzMyX3R4X21ib3goKE1BSUxCT1hfU05ESE9TVF9QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1cpLCBlbnRyeSk7CisKKwl0cC0+dHhfcHJvZCA9IGVudHJ5OworCWlmIChUWF9CVUZGU19BVkFJTCh0cCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWlmIChUWF9CVUZGU19BVkFJTCh0cCkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCkKKwkJCW5ldGlmX3dha2VfcXVldWUodHAtPmRldik7CisJfQorCitvdXRfdW5sb2NrOgorICAgIAltbWlvd2IoKTsKKwlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOworCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisvKiBoYXJkX3N0YXJ0X3htaXQgZm9yIGRldmljZXMgdGhhdCBoYXZlIHRoZSA0RyBidWcgYW5kL29yIDQwLWJpdCBidWcgYW5kCisgKiBzdXBwb3J0IFRHM19GTEcyX0hXX1RTT18xIG9yIGZpcm13YXJlIFRTTyBvbmx5LgorICovCitzdGF0aWMgaW50IHRnM19zdGFydF94bWl0X2RtYV9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJZG1hX2FkZHJfdCBtYXBwaW5nOworCXUzMiBsZW4sIGVudHJ5LCBiYXNlX2ZsYWdzLCBtc3M7CiAJaW50IHdvdWxkX2hpdF9od2J1ZzsKIAogCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CkBAIC0zNzQyLDYgKzM5NDcsOSBAQAogCQkJaWYgKHRnM180Z19vdmVyZmxvd190ZXN0KG1hcHBpbmcsIGxlbikpCiAJCQkJd291bGRfaGl0X2h3YnVnID0gMTsKIAorCQkJaWYgKHRnM180MGJpdF9vdmVyZmxvd190ZXN0KHRwLCBtYXBwaW5nLCBsZW4pKQorCQkJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CisKIAkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykKIAkJCQl0ZzNfc2V0X3R4ZCh0cCwgZW50cnksIG1hcHBpbmcsIGxlbiwKIAkJCQkJICAgIGJhc2VfZmxhZ3MsIChpID09IGxhc3QpfChtc3MgPDwgMSkpOwpAQCAtMzc2Myw3ICszOTcxLDcgQEAKIAkJLyogSWYgdGhlIHdvcmthcm91bmQgZmFpbHMgZHVlIHRvIG1lbW9yeS9tYXBwaW5nCiAJCSAqIGZhaWx1cmUsIHNpbGVudGx5IGRyb3AgdGhpcyBwYWNrZXQuCiAJCSAqLwotCQlpZiAodGlnb24zXzRnYl9od2J1Z193b3JrYXJvdW5kKHRwLCBza2IsIGxhc3RfcGx1c19vbmUsCisJCWlmICh0aWdvbjNfZG1hX2h3YnVnX3dvcmthcm91bmQodHAsIHNrYiwgbGFzdF9wbHVzX29uZSwKIAkJCQkJCSZzdGFydCwgYmFzZV9mbGFncywgbXNzKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIApAQCAtNDM1Miw2ICs0NTYwLDExIEBACiAJCXRwLT5udnJhbV9sb2NrX2NudCA9IDA7CiAJfQogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUyIHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3KQorCQl0dzMyKEdSQ19GQVNUQk9PVF9QQywgMCk7CisKIAkvKgogCSAqIFdlIG11c3QgYXZvaWQgdGhlIHJlYWRsKCkgdGhhdCBub3JtYWxseSB0YWtlcyBwbGFjZS4KIAkgKiBJdCBsb2NrcyBtYWNoaW5lcywgY2F1c2VzIG1hY2hpbmUgY2hlY2tzLCBhbmQgb3RoZXIKQEAgLTU1MDEsNiArNTcxNCw5IEBACiAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIDA7CisKIAlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKIAlfX3RnM19zZXRfbWFjX2FkZHIodHApOwogCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CkBAIC01NTY4LDYgKzU3ODQsOSBAQAogCQl0ZzNfYWJvcnRfaHcodHAsIDEpOwogCX0KIAorCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpCisJCXRnM19waHlfcmVzZXQodHApOworCiAJZXJyID0gdGczX2NoaXBfcmVzZXQodHApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC01OTM4LDYgKzYxNTcsOSBAQAogCQkJZ3Bpb19tYXNrIHw9IEdSQ19MQ0xDVFJMX0dQSU9fT0UzIHwKIAkJCQkgICAgIEdSQ19MQ0xDVFJMX0dQSU9fT1VUUFVUMzsKIAorCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUpCisJCQlncGlvX21hc2sgfD0gR1JDX0xDTENUUkxfR1BJT19VQVJUX1NFTDsKKwogCQl0cC0+Z3JjX2xvY2FsX2N0cmwgfD0gdHIzMihHUkNfTE9DQUxfQ1RSTCkgJiBncGlvX21hc2s7CiAKIAkJLyogR1BJTzEgbXVzdCBiZSBkcml2ZW4gaGlnaCBmb3IgZWVwcm9tIHdyaXRlIHByb3RlY3QgKi8KQEAgLTU5NzYsNiArNjE5OCwxMSBAQAogCQl9CiAJfQogCisJLyogRW5hYmxlIGhvc3QgY29hbGVzY2luZyBidWcgZml4ICovCisJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSkgfHwKKwkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3KSkKKwkJdmFsIHw9ICgxIDw8IDI5KTsKKwogCXR3MzJfZihXRE1BQ19NT0RFLCB2YWwpOwogCXVkZWxheSg0MCk7CiAKQEAgLTYwMzEsNiArNjI1OCw5IEBACiAJdWRlbGF5KDEwMCk7CiAKIAl0cC0+cnhfbW9kZSA9IFJYX01PREVfRU5BQkxFOworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSkKKwkJdHAtPnJ4X21vZGUgfD0gUlhfTU9ERV9JUFY2X0NTVU1fRU5BQkxFOworCiAJdHczMl9mKE1BQ19SWF9NT0RFLCB0cC0+cnhfbW9kZSk7CiAJdWRlbGF5KDEwKTsKIApAQCAtNjA4MCw2ICs2MzEwLDE3IEBACiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0hXX0FVVE9ORUc7CiAJfQogCisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpICYmCisJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCkpIHsKKwkJdTMyIHRtcDsKKworCQl0bXAgPSB0cjMyKFNFUkRFU19SWF9DVFJMKTsKKwkJdHczMihTRVJERVNfUlhfQ1RSTCwgdG1wIHwgU0VSREVTX1JYX1NJR19ERVRFQ1QpOworCQl0cC0+Z3JjX2xvY2FsX2N0cmwgJj0gfkdSQ19MQ0xDVFJMX1VTRV9FWFRfU0lHX0RFVEVDVDsKKwkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IEdSQ19MQ0xDVFJMX1VTRV9TSUdfREVURUNUOworCQl0dzMyKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwpOworCX0KKwogCWVyciA9IHRnM19zZXR1cF9waHkodHAsIDEpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC02MTU4LDcgKzYzOTksNyBAQAogCWludCBlcnI7CiAKIAkvKiBGb3JjZSB0aGUgY2hpcCBpbnRvIEQwLiAqLwotCWVyciA9IHRnM19zZXRfcG93ZXJfc3RhdGUodHAsIDApOworCWVyciA9IHRnM19zZXRfcG93ZXJfc3RhdGUodHAsIFBDSV9EMCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTYzMTQsNiArNjU1NSwyNiBAQAogCWFkZF90aW1lcigmdHAtPnRpbWVyKTsKIH0KIAorc3RhdGljIGludCB0ZzNfcmVxdWVzdF9pcnEoc3RydWN0IHRnMyAqdHApCit7CisJaXJxcmV0dXJuX3QgKCpmbikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLT5kZXY7CisKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKKwkJZm4gPSB0ZzNfbXNpOworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl8xU0hPVF9NU0kpCisJCQlmbiA9IHRnM19tc2lfMXNob3Q7CisJCWZsYWdzID0gU0FfU0FNUExFX1JBTkRPTTsKKwl9IGVsc2UgeworCQlmbiA9IHRnM19pbnRlcnJ1cHQ7CisJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykKKwkJCWZuID0gdGczX2ludGVycnVwdF90YWdnZWQ7CisJCWZsYWdzID0gU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NOworCX0KKwlyZXR1cm4gKHJlcXVlc3RfaXJxKHRwLT5wZGV2LT5pcnEsIGZuLCBmbGFncywgZGV2LT5uYW1lLCBkZXYpKTsKK30KKwogc3RhdGljIGludCB0ZzNfdGVzdF9pbnRlcnJ1cHQoc3RydWN0IHRnMyAqdHApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLT5kZXY7CkBAIC02MzUwLDE2ICs2NjExLDcgQEAKIAogCWZyZWVfaXJxKHRwLT5wZGV2LT5pcnEsIGRldik7CiAJCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKQotCQllcnIgPSByZXF1ZXN0X2lycSh0cC0+cGRldi0+aXJxLCB0ZzNfbXNpLAotCQkJCSAgU0FfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCBkZXYpOwotCWVsc2UgewotCQlpcnFyZXR1cm5fdCAoKmZuKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik9dGczX2ludGVycnVwdDsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKQotCQkJZm4gPSB0ZzNfaW50ZXJydXB0X3RhZ2dlZDsKLQkJZXJyID0gcmVxdWVzdF9pcnEodHAtPnBkZXYtPmlycSwgZm4sCi0JCQkJICBTQV9TSElSUSB8IFNBX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKLQl9CisJZXJyID0gdGczX3JlcXVlc3RfaXJxKHRwKTsKIAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC02NDExLDE0ICs2NjYzLDcgQEAKIAogCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9VU0lOR19NU0k7CiAKLQl7Ci0JCWlycXJldHVybl90ICgqZm4pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKT10ZzNfaW50ZXJydXB0OwotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpCi0JCQlmbiA9IHRnM19pbnRlcnJ1cHRfdGFnZ2VkOwotCi0JCWVyciA9IHJlcXVlc3RfaXJxKHRwLT5wZGV2LT5pcnEsIGZuLAotCQkJCSAgU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NLCBkZXYtPm5hbWUsIGRldik7Ci0JfQorCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNjQ0NSw2ICs2NjkwLDEwIEBACiAKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAorCWVyciA9IHRnM19zZXRfcG93ZXJfc3RhdGUodHAsIFBDSV9EMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCXRnM19kaXNhYmxlX2ludHModHApOwogCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX0lOSVRfQ09NUExFVEU7CiAKQEAgLTY0NTksNyArNjcwOCw5IEBACiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgogCSAgICAoR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTc1MF9BWCkgJiYKLQkgICAgKEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3NTBfQlgpKSB7CisJICAgIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81NzUwX0JYKSAmJgorCSAgICAhKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCkgJiYKKwkgICAgICAodHAtPnBkZXZfcGVlciA9PSB0cC0+cGRldikpKSB7CiAJCS8qIEFsbCBNU0kgc3VwcG9ydGluZyBjaGlwcyBzaG91bGQgc3VwcG9ydCB0YWdnZWQKIAkJICogc3RhdHVzLiAgQXNzZXJ0IHRoYXQgdGhpcyBpcyB0aGUgY2FzZS4KIAkJICovCkBAIC02NDc0LDE3ICs2NzI1LDcgQEAKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1VTSU5HX01TSTsKIAkJfQogCX0KLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpCi0JCWVyciA9IHJlcXVlc3RfaXJxKHRwLT5wZGV2LT5pcnEsIHRnM19tc2ksCi0JCQkJICBTQV9TQU1QTEVfUkFORE9NLCBkZXYtPm5hbWUsIGRldik7Ci0JZWxzZSB7Ci0JCWlycXJldHVybl90ICgqZm4pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKT10ZzNfaW50ZXJydXB0OwotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpCi0JCQlmbiA9IHRnM19pbnRlcnJ1cHRfdGFnZ2VkOwotCi0JCWVyciA9IHJlcXVlc3RfaXJxKHRwLT5wZGV2LT5pcnEsIGZuLAotCQkJCSAgU0FfU0hJUlEgfCBTQV9TQU1QTEVfUkFORE9NLCBkZXYtPm5hbWUsIGRldik7Ci0JfQorCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCk7CiAKIAlpZiAoZXJyKSB7CiAJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgewpAQCAtNjU0OSw2ICs2NzkwLDE0IEBACiAKIAkJCXJldHVybiBlcnI7CiAJCX0KKworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKKwkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzFTSE9UX01TSSkgeworCQkJCXUzMiB2YWwgPSB0cjMyKDB4N2MwNCk7CisKKwkJCQl0dzMyKDB4N2MwNCwgdmFsIHwgKDEgPDwgMjkpKTsKKwkJCX0KKwkJfQogCX0KIAogCXRnM19mdWxsX2xvY2sodHAsIDApOwpAQCAtNjgyMiw3ICs3MDcxLDYgQEAKIAl0cC0+dGczX2ZsYWdzICY9CiAJCX4oVEczX0ZMQUdfSU5JVF9DT01QTEVURSB8CiAJCSAgVEczX0ZMQUdfR09UX1NFUkRFU19GTE9XQ1RMKTsKLQluZXRpZl9jYXJyaWVyX29mZih0cC0+ZGV2KTsKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKQEAgLTY4MzksNiArNzA4NywxMCBAQAogCiAJdGczX2ZyZWVfY29uc2lzdGVudCh0cCk7CiAKKwl0ZzNfc2V0X3Bvd2VyX3N0YXRlKHRwLCBQQ0lfRDNob3QpOworCisJbmV0aWZfY2Fycmllcl9vZmYodHAtPmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzEzMyw2ICs3Mzg1LDkgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuOworCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAJX190ZzNfc2V0X3J4X21vZGUoZGV2KTsKIAl0ZzNfZnVsbF91bmxvY2sodHApOwpAQCAtNzE1Nyw2ICs3NDEyLDkgQEAKIAogCW1lbXNldChwLCAwLCBURzNfUkVHRFVNUF9MRU4pOwogCisJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQorCQlyZXR1cm47CisKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAogI2RlZmluZSBfX0dFVF9SRUczMihyZWcpCSgqKHApKysgPSB0cjMyKHJlZykpCkBAIC03MjIzLDYgKzc0ODEsNyBAQAogfQogCiBzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCk7CitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3N3YWIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKTsKIAogc3RhdGljIGludCB0ZzNfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCiB7CkBAIC03MjMxLDYgKzc0OTAsOSBAQAogCXU4ICAqcGQ7CiAJdTMyIGksIG9mZnNldCwgbGVuLCB2YWwsIGJfb2Zmc2V0LCBiX2NvdW50OwogCisJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCW9mZnNldCA9IGVlcHJvbS0+b2Zmc2V0OwogCWxlbiA9IGVlcHJvbS0+bGVuOwogCWVlcHJvbS0+bGVuID0gMDsKQEAgLTcyOTIsNiArNzU1NCw5IEBACiAJdTMyIG9mZnNldCwgbGVuLCBiX29mZnNldCwgb2RkX2xlbiwgc3RhcnQsIGVuZDsKIAl1OCAqYnVmOwogCisJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCWlmIChlZXByb20tPm1hZ2ljICE9IFRHM19FRVBST01fTUFHSUMpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC03NDI1LDYgKzc2OTAsNyBAQAogICAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTU9EVUxFX05BTUUpOwogCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04pOworCXN0cmNweShpbmZvLT5md192ZXJzaW9uLCB0cC0+ZndfdmVyKTsKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHRwLT5wZGV2KSk7CiB9CiAgIApAQCAtNzUxOSwxMSArNzc4NSwyMCBAQAogICAKIAllcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBURzNfUlhfUklOR19TSVpFIC0gMTsKIAllcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7Ci0JZXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gVEczX1JYX0pVTUJPX1JJTkdfU0laRSAtIDE7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkKKwkJZXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gVEczX1JYX0pVTUJPX1JJTkdfU0laRSAtIDE7CisJZWxzZQorCQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSAwOworCisJZXJpbmctPnR4X21heF9wZW5kaW5nID0gVEczX1RYX1JJTkdfU0laRSAtIDE7CiAKIAllcmluZy0+cnhfcGVuZGluZyA9IHRwLT5yeF9wZW5kaW5nOwogCWVyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOwotCWVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gdHAtPnJ4X2p1bWJvX3BlbmRpbmc7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkKKwkJZXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSB0cC0+cnhfanVtYm9fcGVuZGluZzsKKwllbHNlCisJCWVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKKwogCWVyaW5nLT50eF9wZW5kaW5nID0gdHAtPnR4X3BlbmRpbmc7CiB9CiAgIApAQCAtNzY0NCwxMCArNzkxOSwxMSBAQAogICAJCXJldHVybiAwOwogICAJfQogICAKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3KQorCQlldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7CiAJZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQX0NTVU07CisJCWV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzcxNywyOSArNzk5Myw1MiBAQAogfQogCiAjZGVmaW5lIE5WUkFNX1RFU1RfU0laRSAweDEwMAorI2RlZmluZSBOVlJBTV9TRUxGQk9PVF9GT1JNQVQxX1NJWkUgMHgxNAogCiBzdGF0aWMgaW50IHRnM190ZXN0X252cmFtKHN0cnVjdCB0ZzMgKnRwKQogewotCXUzMiAqYnVmLCBjc3VtOwotCWludCBpLCBqLCBlcnIgPSAwOworCXUzMiAqYnVmLCBjc3VtLCBtYWdpYzsKKwlpbnQgaSwgaiwgZXJyID0gMCwgc2l6ZTsKIAotCWJ1ZiA9IGttYWxsb2MoTlZSQU1fVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJm1hZ2ljKSAhPSAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKQorCQlzaXplID0gTlZSQU1fVEVTVF9TSVpFOworCWVsc2UgaWYgKChtYWdpYyAmIDB4ZmYwMDAwMDApID09IDB4YTUwMDAwMDApIHsKKwkJaWYgKChtYWdpYyAmIDB4ZTAwMDAwKSA9PSAweDIwMDAwMCkKKwkJCXNpemUgPSBOVlJBTV9TRUxGQk9PVF9GT1JNQVQxX1NJWkU7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTzsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgTlZSQU1fVEVTVF9TSVpFOyBpICs9IDQsIGorKykgeworCWVyciA9IC1FSU87CisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzaXplOyBpICs9IDQsIGorKykgewogCQl1MzIgdmFsOwogCiAJCWlmICgoZXJyID0gdGczX252cmFtX3JlYWQodHAsIGksICZ2YWwpKSAhPSAwKQogCQkJYnJlYWs7CiAJCWJ1ZltqXSA9IGNwdV90b19sZTMyKHZhbCk7CiAJfQotCWlmIChpIDwgTlZSQU1fVEVTVF9TSVpFKQorCWlmIChpIDwgc2l6ZSkKIAkJZ290byBvdXQ7CiAKLQllcnIgPSAtRUlPOwotCWlmIChjcHVfdG9fYmUzMihidWZbMF0pICE9IFRHM19FRVBST01fTUFHSUMpCi0JCWdvdG8gb3V0OworCS8qIFNlbGZib290IGZvcm1hdCAqLworCWlmIChjcHVfdG9fYmUzMihidWZbMF0pICE9IFRHM19FRVBST01fTUFHSUMpIHsKKwkJdTggKmJ1ZjggPSAodTggKikgYnVmLCBjc3VtOCA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJCWNzdW04ICs9IGJ1ZjhbaV07CisKKwkJaWYgKGNzdW04ID09IDApCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU87CisJfQogCiAJLyogQm9vdHN0cmFwIGNoZWNrc3VtIGF0IG9mZnNldCAweDEwICovCiAJY3N1bSA9IGNhbGNfY3JjKCh1bnNpZ25lZCBjaGFyICopIGJ1ZiwgMHgxMCk7CkBAIC03OTk5LDcgKzgyOTgsNyBAQAogCiBzdGF0aWMgaW50IHRnM19kb19tZW1fdGVzdChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyIGxlbikKIHsKLQlzdGF0aWMgdTMyIHRlc3RfcGF0dGVybltdID0geyAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweGFhNTVhNTVhIH07CisJc3RhdGljIGNvbnN0IHUzMiB0ZXN0X3BhdHRlcm5bXSA9IHsgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHhhYTU1YTU1YSB9OwogCWludCBpOwogCXUzMiBqOwogCkBAIC04MDMzLDE0ICs4MzMyLDI1IEBACiAJCXsgMHgwMDAwODAwMCwgMHgwMjAwMH0sCiAJCXsgMHgwMDAxMDAwMCwgMHgwZTAwMH0sCiAJCXsgMHhmZmZmZmZmZiwgMHgwMDAwMH0KKwl9LCBtZW1fdGJsXzU3NTVbXSA9IHsKKwkJeyAweDAwMDAwMjAwLCAweDAwMDA4fSwKKwkJeyAweDAwMDA0MDAwLCAweDAwODAwfSwKKwkJeyAweDAwMDA2MDAwLCAweDAwODAwfSwKKwkJeyAweDAwMDA4MDAwLCAweDAyMDAwfSwKKwkJeyAweDAwMDEwMDAwLCAweDBjMDAwfSwKKwkJeyAweGZmZmZmZmZmLCAweDAwMDAwfQogCX07CiAJc3RydWN0IG1lbV9lbnRyeSAqbWVtX3RibDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykKLQkJbWVtX3RibCA9IG1lbV90YmxfNTcwNTsKLQllbHNlCisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAorCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcpCisJCQltZW1fdGJsID0gbWVtX3RibF81NzU1OworCQllbHNlCisJCQltZW1fdGJsID0gbWVtX3RibF81NzA1OworCX0gZWxzZQogCQltZW1fdGJsID0gbWVtX3RibF81NzB4OwogCiAJZm9yIChpID0gMDsgbWVtX3RibFtpXS5vZmZzZXQgIT0gMHhmZmZmZmZmZjsgaSsrKSB7CkBAIC04MjEyLDYgKzg1MjIsOSBAQAogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikKKwkJdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgUENJX0QwKTsKKwogCW1lbXNldChkYXRhLCAwLCBzaXplb2YodTY0KSAqIFRHM19OVU1fVEVTVCk7CiAKIAlpZiAodGczX3Rlc3RfbnZyYW0odHApICE9IDApIHsKQEAgLTgyNDAsNiArODU1Myw5IEBACiAJCWlmICghZXJyKQogCQkJdGczX252cmFtX3VubG9jayh0cCk7CiAKKwkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUlJX1NFUkRFUykKKwkJCXRnM19waHlfcmVzZXQodHApOworCiAJCWlmICh0ZzNfdGVzdF9yZWdpc3RlcnModHApICE9IDApIHsKIAkJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAJCQlkYXRhWzJdID0gMTsKQEAgLTgyNjksNiArODU4NSw5IEBACiAKIAkJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAl9CisJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQorCQl0ZzNfc2V0X3Bvd2VyX3N0YXRlKHRwLCBQQ0lfRDNob3QpOworCiB9CiAKIHN0YXRpYyBpbnQgdGczX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQpAQCAtODI4OCw2ICs4NjA3LDkgQEAKIAkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykKIAkJCWJyZWFrOwkJCS8qIFdlIGhhdmUgbm8gUEhZICovCiAKKwkJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQorCQkJcmV0dXJuIC1FQUdBSU47CisKIAkJc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7CiAJCWVyciA9IHRnM19yZWFkcGh5KHRwLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgJm1paV9yZWd2YWwpOwogCQlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOwpAQCAtODMwNCw2ICs4NjI2LDkgQEAKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAorCQlpZiAodHAtPmxpbmtfY29uZmlnLnBoeV9pc19sb3dfcG93ZXIpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwogCQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKIAkJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKIAkJc3Bpbl91bmxvY2tfYmgoJnRwLT5sb2NrKTsKQEAgLTg0NDcsMTQgKzg3NzIsMTQgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19nZXRfZWVwcm9tX3NpemUoc3RydWN0IHRnMyAqdHApCiB7Ci0JdTMyIGN1cnNpemUsIHZhbDsKKwl1MzIgY3Vyc2l6ZSwgdmFsLCBtYWdpYzsKIAogCXRwLT5udnJhbV9zaXplID0gRUVQUk9NX0NISVBfU0laRTsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJnZhbCkgIT0gMCkKKwlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJm1hZ2ljKSAhPSAwKQogCQlyZXR1cm47CiAKLQlpZiAoc3dhYjMyKHZhbCkgIT0gVEczX0VFUFJPTV9NQUdJQykKKwlpZiAoKG1hZ2ljICE9IFRHM19FRVBST01fTUFHSUMpICYmICgobWFnaWMgJiAweGZmMDAwMDAwKSAhPSAweGE1MDAwMDAwKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTg0NjIsMTMgKzg3ODcsMTMgQEAKIAkgKiBXaGVuIHdlIGVuY291bnRlciBvdXIgdmFsaWRhdGlvbiBzaWduYXR1cmUsIHdlIGtub3cgdGhlIGFkZHJlc3NpbmcKIAkgKiBoYXMgd3JhcHBlZCBhcm91bmQsIGFuZCB0aHVzIGhhdmUgb3VyIGNoaXAgc2l6ZS4KIAkgKi8KLQljdXJzaXplID0gMHg4MDA7CisJY3Vyc2l6ZSA9IDB4MTA7CiAKIAl3aGlsZSAoY3Vyc2l6ZSA8IHRwLT5udnJhbV9zaXplKSB7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgY3Vyc2l6ZSwgJnZhbCkgIT0gMCkKKwkJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIGN1cnNpemUsICZ2YWwpICE9IDApCiAJCQlyZXR1cm47CiAKLQkJaWYgKHN3YWIzMih2YWwpID09IFRHM19FRVBST01fTUFHSUMpCisJCWlmICh2YWwgPT0gbWFnaWMpCiAJCQlicmVhazsKIAogCQljdXJzaXplIDw8PSAxOwpAQCAtODQ4MSw2ICs4ODA2LDE1IEBACiB7CiAJdTMyIHZhbDsKIAorCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmdmFsKSAhPSAwKQorCQlyZXR1cm47CisKKwkvKiBTZWxmYm9vdCBmb3JtYXQgKi8KKwlpZiAodmFsICE9IFRHM19FRVBST01fTUFHSUMpIHsKKwkJdGczX2dldF9lZXByb21fc2l6ZSh0cCk7CisJCXJldHVybjsKKwl9CisKIAlpZiAodGczX252cmFtX3JlYWQodHAsIDB4ZjAsICZ2YWwpID09IDApIHsKIAkJaWYgKHZhbCAhPSAwKSB7CiAJCQl0cC0+bnZyYW1fc2l6ZSA9ICh2YWwgPj4gMTYpICogMTAyNDsKQEAgLTg2MDQsNiArODkzOCw4NSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19nZXRfNTc1NV9udnJhbV9pbmZvKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiBudmNmZzE7CisKKwludmNmZzEgPSB0cjMyKE5WUkFNX0NGRzEpOworCisJLyogTlZSQU0gcHJvdGVjdGlvbiBmb3IgVFBNICovCisJaWYgKG52Y2ZnMSAmICgxIDw8IDI3KSkKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNOworCisJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgeworCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRUVQUk9NXzY0S0haOgorCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRUVQUk9NXzM3NktIWjoKKwkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKKworCQkJbnZjZmcxICY9IH5OVlJBTV9DRkcxX0NPTVBBVF9CWVBBU1M7CisJCQl0dzMyKE5WUkFNX0NGRzEsIG52Y2ZnMSk7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0ZMQVNIX0JVRkZFUkVEOgorCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMToKKwkJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzI6CisJCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8zOgorCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfNDoKKwkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwOgorCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKKwkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19nZXRfNTc4N19udnJhbV9pbmZvKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiBudmNmZzE7CisKKwludmNmZzEgPSB0cjMyKE5WUkFNX0NGRzEpOworCisJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgeworCQljYXNlIEZMQVNIXzU3ODdWRU5ET1JfQVRNRUxfRUVQUk9NXzY0S0haOgorCQljYXNlIEZMQVNIXzU3ODdWRU5ET1JfQVRNRUxfRUVQUk9NXzM3NktIWjoKKwkJY2FzZSBGTEFTSF81Nzg3VkVORE9SX01JQ1JPX0VFUFJPTV82NEtIWjoKKwkJY2FzZSBGTEFTSF81Nzg3VkVORE9SX01JQ1JPX0VFUFJPTV8zNzZLSFo6CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7CisKKwkJCW52Y2ZnMSAmPSB+TlZSQU1fQ0ZHMV9DT01QQVRfQllQQVNTOworCQkJdHczMihOVlJBTV9DRkcxLCBudmNmZzEpOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9GTEFTSF9CVUZGRVJFRDoKKwkJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzE6CisJCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8yOgorCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMzoKKwkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwOgorCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKKwkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKKwkJCWJyZWFrOworCX0KK30KKwogLyogQ2hpcHMgb3RoZXIgdGhhbiA1NzAwLzU3MDEgdXNlIHRoZSBOVlJBTSBmb3IgZmV0Y2hpbmcgaW5mby4gKi8KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfbnZyYW1faW5pdChzdHJ1Y3QgdGczICp0cCkKIHsKQEAgLTg2MzksNiArOTA1MiwxMCBAQAogCiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MikKIAkJCXRnM19nZXRfNTc1Ml9udnJhbV9pbmZvKHRwKTsKKwkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUpCisJCQl0ZzNfZ2V0XzU3NTVfbnZyYW1faW5mbyh0cCk7CisJCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3KQorCQkJdGczX2dldF81Nzg3X252cmFtX2luZm8odHApOwogCQllbHNlCiAJCQl0ZzNfZ2V0X252cmFtX2luZm8odHApOwogCkBAIC04NzA4LDYgKzkxMjUsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUzMiB0ZzNfbnZyYW1fcGh5c19hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCisJICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQorCisJCWFkZHIgPSAoKGFkZHIgLyB0cC0+bnZyYW1fcGFnZXNpemUpIDw8CisJCQlBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSArCisJCSAgICAgICAoYWRkciAlIHRwLT5udnJhbV9wYWdlc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIHUzMiB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCisJICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQorCisJCWFkZHIgPSAoKGFkZHIgPj4gQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKgorCQkJdHAtPm52cmFtX3BhZ2VzaXplKSArCisJCSAgICAgICAoYWRkciAmICgoMSA8PCBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAtIDEpKTsKKworCXJldHVybiBhZGRyOworfQorCiBzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKIHsKIAlpbnQgcmV0OwpAQCAtODcyMCwxNCArOTE2NSw3IEBACiAJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSkKIAkJcmV0dXJuIHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbSh0cCwgb2Zmc2V0LCB2YWwpOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpICYmCi0JCSh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgotCQkodHAtPm52cmFtX2plZGVjbnVtID09IEpFREVDX0FUTUVMKSkgewotCi0JCW9mZnNldCA9ICgob2Zmc2V0IC8gdHAtPm52cmFtX3BhZ2VzaXplKSA8PAotCQkJICBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSArCi0JCQkob2Zmc2V0ICUgdHAtPm52cmFtX3BhZ2VzaXplKTsKLQl9CisJb2Zmc2V0ID0gdGczX252cmFtX3BoeXNfYWRkcih0cCwgb2Zmc2V0KTsKIAogCWlmIChvZmZzZXQgPiBOVlJBTV9BRERSX01TSykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04NzUyLDYgKzkxOTAsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3N3YWIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKQoreworCWludCBlcnI7CisJdTMyIHRtcDsKKworCWVyciA9IHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ0bXApOworCSp2YWwgPSBzd2FiMzIodG1wKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IHRnM19udnJhbV93cml0ZV9ibG9ja191c2luZ19lZXByb20oc3RydWN0IHRnMyAqdHAsCiAJCQkJICAgIHUzMiBvZmZzZXQsIHUzMiBsZW4sIHU4ICpidWYpCiB7CkBAIC04OTA0LDE1ICs5MzUyLDcgQEAKIAogCSAgICAgICAgcGFnZV9vZmYgPSBvZmZzZXQgJSB0cC0+bnZyYW1fcGFnZXNpemU7CiAKLQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0ZMQVNIKSAmJgotCQkJKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpIHsKLQotCQkJcGh5X2FkZHIgPSAoKG9mZnNldCAvIHRwLT5udnJhbV9wYWdlc2l6ZSkgPDwKLQkJCQkgICAgQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKyBwYWdlX29mZjsKLQkJfQotCQllbHNlIHsKLQkJCXBoeV9hZGRyID0gb2Zmc2V0OwotCQl9CisJCXBoeV9hZGRyID0gdGczX252cmFtX3BoeXNfYWRkcih0cCwgb2Zmc2V0KTsKIAogCQl0dzMyKE5WUkFNX0FERFIsIHBoeV9hZGRyKTsKIApAQCAtODkyNyw2ICs5MzY3LDggQEAKIAkJCW52cmFtX2NtZCB8PSBOVlJBTV9DTURfTEFTVDsKIAogCQlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzUyKSAmJgorCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzU1KSAmJgorCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg3KSAmJgogCQkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19TVCkgJiYKIAkJICAgIChudnJhbV9jbWQgJiBOVlJBTV9DTURfRklSU1QpKSB7CiAKQEAgLTkwNjQsMTIgKzk1MDYsMTggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogU2luY2UgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGluIEQzLWhvdCBwb3dlciBzdGF0ZSBkdXJpbmcKLSAqIHRnM19pbml0X29uZSgpLCBvbmx5IGNvbmZpZyBjeWNsZXMgYXJlIGFsbG93ZWQuCi0gKi8KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfZ2V0X2VlcHJvbV9od19jZmcoc3RydWN0IHRnMyAqdHApCiB7CiAJdTMyIHZhbDsKKwl1MTYgcG1jc3I7CisKKwkvKiBPbiBzb21lIGVhcmx5IGNoaXBzIHRoZSBTUkFNIGNhbm5vdCBiZSBhY2Nlc3NlZCBpbiBEM2hvdCBzdGF0ZSwKKwkgKiBzbyBuZWVkIG1ha2Ugc3VyZSB3ZSdyZSBpbiBEMC4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGRldiwgdHAtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmcG1jc3IpOworCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOworCXBjaV93cml0ZV9jb25maWdfd29yZCh0cC0+cGRldiwgdHAtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCBwbWNzcik7CisJbXNsZWVwKDEpOwogCiAJLyogTWFrZSBzdXJlIHJlZ2lzdGVyIGFjY2Vzc2VzIChpbmRpcmVjdCBvciBvdGhlcndpc2UpCiAJICogd2lsbCBmdW5jdGlvbiBjb3JyZWN0bHkuCkBAIC05MDgwLDYgKzk1MjgsMTAgQEAKIAl0cC0+cGh5X2lkID0gUEhZX0lEX0lOVkFMSUQ7CiAJdHAtPmxlZF9jdHJsID0gTEVEX0NUUkxfTU9ERV9QSFlfMTsKIAorCS8qIERvIG5vdCBldmVuIHRyeSBwb2tpbmcgYXJvdW5kIGluIGhlcmUgb24gU3VuIHBhcnRzLiAgKi8KKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9TVU5fNTcwWCkKKwkJcmV0dXJuOworCiAJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX1NJRywgJnZhbCk7CiAJaWYgKHZhbCA9PSBOSUNfU1JBTV9EQVRBX1NJR19NQUdJQykgewogCQl1MzIgbmljX2NmZywgbGVkX2NmZzsKQEAgLTkzMjYsNiArOTc3OCw3IEBACiB7CiAJdW5zaWduZWQgY2hhciB2cGRfZGF0YVsyNTZdOwogCWludCBpOworCXUzMiBtYWdpYzsKIAogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1NVTl81NzBYKSB7CiAJCS8qIFN1biBkZWNpZGVkIG5vdCB0byBwdXQgdGhlIG5lY2Vzc2FyeSBiaXRzIGluIHRoZQpAQCAtOTMzNSwxNiArOTc4OCw0MyBAQAogCQlyZXR1cm47CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPSA0KSB7Ci0JCXUzMiB0bXA7CisJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4MCwgJm1hZ2ljKSkKKwkJcmV0dXJuOwogCi0JCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHgxMDAgKyBpLCAmdG1wKSkKLQkJCWdvdG8gb3V0X25vdF9mb3VuZDsKKwlpZiAobWFnaWMgPT0gVEczX0VFUFJPTV9NQUdJQykgeworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDQpIHsKKwkJCXUzMiB0bXA7CiAKLQkJdnBkX2RhdGFbaSArIDBdID0gKCh0bXAgPj4gIDApICYgMHhmZik7Ci0JCXZwZF9kYXRhW2kgKyAxXSA9ICgodG1wID4+ICA4KSAmIDB4ZmYpOwotCQl2cGRfZGF0YVtpICsgMl0gPSAoKHRtcCA+PiAxNikgJiAweGZmKTsKLQkJdnBkX2RhdGFbaSArIDNdID0gKCh0bXAgPj4gMjQpICYgMHhmZik7CisJCQlpZiAodGczX252cmFtX3JlYWQodHAsIDB4MTAwICsgaSwgJnRtcCkpCisJCQkJZ290byBvdXRfbm90X2ZvdW5kOworCisJCQl2cGRfZGF0YVtpICsgMF0gPSAoKHRtcCA+PiAgMCkgJiAweGZmKTsKKwkJCXZwZF9kYXRhW2kgKyAxXSA9ICgodG1wID4+ICA4KSAmIDB4ZmYpOworCQkJdnBkX2RhdGFbaSArIDJdID0gKCh0bXAgPj4gMTYpICYgMHhmZik7CisJCQl2cGRfZGF0YVtpICsgM10gPSAoKHRtcCA+PiAyNCkgJiAweGZmKTsKKwkJfQorCX0gZWxzZSB7CisJCWludCB2cGRfY2FwOworCisJCXZwZF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHRwLT5wZGV2LCBQQ0lfQ0FQX0lEX1ZQRCk7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkgKz0gNCkgeworCQkJdTMyIHRtcCwgaiA9IDA7CisJCQl1MTYgdG1wMTY7CisKKwkJCXBjaV93cml0ZV9jb25maWdfd29yZCh0cC0+cGRldiwgdnBkX2NhcCArIFBDSV9WUERfQUREUiwKKwkJCQkJICAgICAgaSk7CisJCQl3aGlsZSAoaisrIDwgMTAwKSB7CisJCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQodHAtPnBkZXYsIHZwZF9jYXAgKworCQkJCQkJICAgICBQQ0lfVlBEX0FERFIsICZ0bXAxNik7CisJCQkJaWYgKHRtcDE2ICYgMHg4MDAwKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMSk7CisJCQl9CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIHZwZF9jYXAgKyBQQ0lfVlBEX0RBVEEsCisJCQkJCSAgICAgICZ0bXApOworCQkJdG1wID0gY3B1X3RvX2xlMzIodG1wKTsKKwkJCW1lbWNweSgmdnBkX2RhdGFbaV0sICZ0bXAsIDQpOworCQl9CiAJfQogCiAJLyogTm93IHBhcnNlIGFuZCBmaW5kIHRoZSBwYXJ0IG51bWJlci4gKi8KQEAgLTkzOTEsNiArOTg3MSw0NiBAQAogCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJub25lIik7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9md192ZXIoc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbCwgb2Zmc2V0LCBzdGFydDsKKworCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmdmFsKSkKKwkJcmV0dXJuOworCisJaWYgKHZhbCAhPSBURzNfRUVQUk9NX01BR0lDKQorCQlyZXR1cm47CisKKwlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMHhjLCAmb2Zmc2V0KSB8fAorCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAweDQsICZzdGFydCkpCisJCXJldHVybjsKKworCW9mZnNldCA9IHRnM19udnJhbV9sb2dpY2FsX2FkZHIodHAsIG9mZnNldCk7CisJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCwgJnZhbCkpCisJCXJldHVybjsKKworCWlmICgodmFsICYgMHhmYzAwMDAwMCkgPT0gMHgwYzAwMDAwMCkgeworCQl1MzIgdmVyX29mZnNldCwgYWRkcjsKKwkJaW50IGk7CisKKwkJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDQsICZ2YWwpIHx8CisJCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA4LCAmdmVyX29mZnNldCkpCisJCQlyZXR1cm47CisKKwkJaWYgKHZhbCAhPSAwKQorCQkJcmV0dXJuOworCisJCWFkZHIgPSBvZmZzZXQgKyB2ZXJfb2Zmc2V0IC0gc3RhcnQ7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7CisJCQlpZiAodGczX252cmFtX3JlYWQodHAsIGFkZHIgKyBpLCAmdmFsKSkKKwkJCQlyZXR1cm47CisKKwkJCXZhbCA9IGNwdV90b19sZTMyKHZhbCk7CisJCQltZW1jcHkodHAtPmZ3X3ZlciArIGksICZ2YWwsIDQpOworCQl9CisJfQorfQorCiAjaWZkZWYgQ09ORklHX1NQQVJDNjQKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19pc19zdW5fNTcwWChzdHJ1Y3QgdGczICp0cCkKIHsKQEAgLTk0MDgsNiArOTkyOCwxNSBAQAogCQkJcmV0dXJuIDA7CiAJCWlmICh2ZW5pZCA9PSBQQ0lfVkVORE9SX0lEX1NVTikKIAkJCXJldHVybiAxOworCisJCS8qIFRHMyBjaGlwcyBvbmJvYXJkIHRoZSBTdW5CbGFkZS0yNTAwIGRvbid0IGhhdmUgdGhlCisJCSAqIHN1YnN5c3RlbS12ZW5kb3ItaWQgc2V0IHRvIFBDSV9WRU5ET1JfSURfU1VOIGJ1dCB0aGV5CisJCSAqIGFyZSBkaXN0aW5ndWlzaGFibGUgZnJvbSBub24tU3VuIHZhcmlhbnRzIGJ5IGJlaW5nCisJCSAqIG5hbWVkICJuZXR3b3JrIiBieSB0aGUgZmlybXdhcmUuICBOb24tU3VuIGNhcmRzIHdpbGwKKwkJICogc2hvdyB1cCBhcyBiZWluZyBuYW1lZCAiZXRoZXJuZXQiLgorCQkgKi8KKwkJaWYgKCFzdHJjbXAocGNwLT5wcm9tX25hbWUsICJuZXR3b3JrIikpCisJCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC05NTI2LDEyICsxMDA1NSwzNiBAQAogCQl9CiAJfQogCi0JLyogRmluZCBtc2kgY2FwYWJpbGl0eS4gKi8KKwkvKiBUaGUgRVBCIGJyaWRnZSBpbnNpZGUgNTcxNCwgNTcxNSwgYW5kIDU3ODAgY2Fubm90IHN1cHBvcnQKKwkgKiBETUEgYWRkcmVzc2VzID4gNDAtYml0LiBUaGlzIGJyaWRnZSBtYXkgaGF2ZSBvdGhlciBhZGRpdGlvbmFsCisJICogNTd4eCBkZXZpY2VzIGJlaGluZCBpdCBpbiBzb21lIDQtcG9ydCBOSUMgZGVzaWducyBmb3IgZXhhbXBsZS4KKwkgKiBBbnkgdGczIGRldmljZSBmb3VuZCBiZWhpbmQgdGhlIGJyaWRnZSB3aWxsIGFsc28gbmVlZCB0aGUgNDAtYml0CisJICogRE1BIHdvcmthcm91bmQuCisJICovCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzgwIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSB7CiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzU3ODBfQ0xBU1M7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfNDBCSVRfRE1BX0JVRzsKIAkJdHAtPm1zaV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHRwLT5wZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CiAJfQorCWVsc2UgeworCQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gTlVMTDsKKworCQlkbyB7CisJCQlicmlkZ2UgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAorCQkJCQkJUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19FUEIsCisJCQkJCQlicmlkZ2UpOworCQkJaWYgKGJyaWRnZSAmJiBicmlkZ2UtPnN1Ym9yZGluYXRlICYmCisJCQkgICAgKGJyaWRnZS0+c3Vib3JkaW5hdGUtPm51bWJlciA8PQorCQkJICAgICB0cC0+cGRldi0+YnVzLT5udW1iZXIpICYmCisJCQkgICAgKGJyaWRnZS0+c3Vib3JkaW5hdGUtPnN1Ym9yZGluYXRlID49CisJCQkgICAgIHRwLT5wZGV2LT5idXMtPm51bWJlcikpIHsKKwkJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHXzQwQklUX0RNQV9CVUc7CisJCQkJcGNpX2Rldl9wdXQoYnJpZGdlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAoYnJpZGdlKTsKKwl9CiAKIAkvKiBJbml0aWFsaXplIG1pc2MgaG9zdCBjb250cm9sIGluIFBDSSBibG9jay4gKi8KIAl0cC0+bWlzY19ob3N0X2N0cmwgfD0gKG1pc2NfY3RybF9yZWcgJgpAQCAtOTU0OSw2ICsxMDEwMiw4IEBACiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTAgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTIgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpCiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzU3NTBfUExVUzsKIApAQCAtOTU1NiwxMiArMTAxMTEsMjAgQEAKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfNTcwNV9QTFVTOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9IV19UU087CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSB7CisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAorCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcpIHsKKwkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0hXX1RTT18yOworCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfMVNIT1RfTVNJOworCQl9IGVsc2UKKwkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0hXX1RTT18xOworCX0KIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwNSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc1MCAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc1MikKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NTIgJiYKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NTUgJiYKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODcpCiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0pVTUJPX0NBUEFCTEU7CiAKIAlpZiAocGNpX2ZpbmRfY2FwYWJpbGl0eSh0cC0+cGRldiwgUENJX0NBUF9JRF9FWFApICE9IDApCkBAIC05NzE3LDggKzEwMjgwLDExIEBACiAJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTIpCiAJCXRwLT5ncmNfbG9jYWxfY3RybCB8PSBHUkNfTENMQ1RSTF9HUElPX09FMzsKIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSkKKwkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IEdSQ19MQ0xDVFJMX0dQSU9fVUFSVF9TRUw7CisKIAkvKiBGb3JjZSB0aGUgY2hpcCBpbnRvIEQwLiAqLwotCWVyciA9IHRnM19zZXRfcG93ZXJfc3RhdGUodHAsIDApOworCWVyciA9IHRnM19zZXRfcG93ZXJfc3RhdGUodHAsIFBDSV9EMCk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIoJXMpIHRyYW5zaXRpb24gdG8gRDAgZmFpbGVkXG4iLAogCQkgICAgICAgcGNpX25hbWUodHAtPnBkZXYpKTsKQEAgLTk3NzEsNyArMTAzMzcsOSBAQAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNF9BMCkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZXzU3MDRfQTBfQlVHOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKQorCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpICYmCisJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc1NSkgJiYKKwkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg3KSkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0JFUl9CVUc7CiAKIAl0cC0+Y29hbGVzY2VfbW9kZSA9IDA7CkBAIC05ODcxLDYgKzEwNDM5LDcgQEAKIAl9CiAKIAl0ZzNfcmVhZF9wYXJ0bm8odHApOworCXRnM19yZWFkX2Z3X3Zlcih0cCk7CiAKIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKSB7CiAJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1VTRV9NSV9JTlRFUlJVUFQ7CkBAIC05OTA2LDEwICsxMDQ3NSwxNCBAQAogCWVsc2UKIAkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfUE9MTF9TRVJERVM7CiAKLQkvKiBJdCBzZWVtcyBhbGwgY2hpcHMgY2FuIGdldCBjb25mdXNlZCBpZiBUWCBidWZmZXJzCisJLyogQWxsIGNoaXBzIGJlZm9yZSA1Nzg3IGNhbiBnZXQgY29uZnVzZWQgaWYgVFggYnVmZmVycwogCSAqIHN0cmFkZGxlIHRoZSA0R0IgYWRkcmVzcyBib3VuZGFyeSBpbiBzb21lIGNhc2VzLgogCSAqLwotCXRwLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHRnM19zdGFydF94bWl0OworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NykKKwkJdHAtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gdGczX3N0YXJ0X3htaXQ7CisJZWxzZQorCQl0cC0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB0ZzNfc3RhcnRfeG1pdF9kbWFfYnVnOwogCiAJdHAtPnJ4X29mZnNldCA9IDI7CiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxICYmCkBAIC0xMDI3Nyw3ICsxMDg1MCwxNCBAQAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpIHsKIAkJCXUzMiBjY3ZhbCA9ICh0cjMyKFRHM1BDSV9DTE9DS19DVFJMKSAmIDB4MWYpOwogCi0JCQlpZiAoY2N2YWwgPT0gMHg2IHx8IGNjdmFsID09IDB4NykKKwkJCS8qIElmIHRoZSA1NzA0IGlzIGJlaGluZCB0aGUgRVBCIGJyaWRnZSwgd2UgY2FuCisJCQkgKiBkbyB0aGUgbGVzcyByZXN0cmljdGl2ZSBPTkVfRE1BIHdvcmthcm91bmQgZm9yCisJCQkgKiBiZXR0ZXIgcGVyZm9ybWFuY2UuCisJCQkgKi8KKwkJCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzQwQklUX0RNQV9CVUcpICYmCisJCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpCisJCQkJdHAtPmRtYV9yd2N0cmwgfD0gMHg4MDAwOworCQkJZWxzZSBpZiAoY2N2YWwgPT0gMHg2IHx8IGNjdmFsID09IDB4NykKIAkJCQl0cC0+ZG1hX3J3Y3RybCB8PSBETUFfUldDVFJMX09ORV9ETUE7CiAKIAkJCS8qIFNldCBiaXQgMjMgdG8gZW5hYmxlIFBDSVggaHcgYnVnIGZpeCAqLwpAQCAtMTA0MzAsNyArMTEwMTAsNiBAQAogCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CiAJdHAtPmxpbmtfY29uZmlnLmR1cGxleCA9IERVUExFWF9JTlZBTElEOwogCXRwLT5saW5rX2NvbmZpZy5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JbmV0aWZfY2Fycmllcl9vZmYodHAtPmRldik7CiAJdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CiAJdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKIAl0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlciA9IDA7CkBAIC0xMDQ4OSw2ICsxMTA2OCw4IEBACiAJY2FzZSBQSFlfSURfQkNNNTc1MjoJcmV0dXJuICI1NzUyIjsKIAljYXNlIFBIWV9JRF9CQ001NzE0OglyZXR1cm4gIjU3MTQiOwogCWNhc2UgUEhZX0lEX0JDTTU3ODA6CXJldHVybiAiNTc4MCI7CisJY2FzZSBQSFlfSURfQkNNNTc1NToJcmV0dXJuICI1NzU1IjsKKwljYXNlIFBIWV9JRF9CQ001Nzg3OglyZXR1cm4gIjU3ODciOwogCWNhc2UgUEhZX0lEX0JDTTgwMDI6CXJldHVybiAiODAwMi9zZXJkZXMiOwogCWNhc2UgMDoJCQlyZXR1cm4gInNlcmRlcyI7CiAJZGVmYXVsdDoJCXJldHVybiAidW5rbm93biI7CkBAIC0xMDUxNyw4ICsxMTA5OCw2IEBACiAJCQlzdHJjYXQoc3RyLCAiNjZNSHoiKTsKIAkJZWxzZSBpZiAoY2xvY2tfY3RybCA9PSA2KQogCQkJc3RyY2F0KHN0ciwgIjEwME1IeiIpOwotCQllbHNlIGlmIChjbG9ja19jdHJsID09IDcpCi0JCQlzdHJjYXQoc3RyLCAiMTMzTUh6Iik7CiAJfSBlbHNlIHsKIAkJc3RyY3B5KHN0ciwgIlBDSToiKTsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lfSElHSF9TUEVFRCkKQEAgLTEwNTk5LDggKzExMTc4LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRnM3JlZ19iYXNlLCB0ZzNyZWdfbGVuOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHRnMyAqdHA7Ci0JaW50IGksIGVyciwgcGNpX3VzaW5nX2RhYywgcG1fY2FwOworCWludCBpLCBlcnIsIHBtX2NhcDsKIAljaGFyIHN0cls0MF07CisJdTY0IGRtYV9tYXNrLCBwZXJzaXN0X2RtYV9tYXNrOwogCiAJaWYgKHRnM192ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQogCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwpAQCAtMTA2MzcsMjYgKzExMjE3LDYgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KIAotCS8qIENvbmZpZ3VyZSBETUEgYXR0cmlidXRlcy4gKi8KLQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKLQlpZiAoIWVycikgewotCQlwY2lfdXNpbmdfZGFjID0gMTsKLQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBvYnRhaW4gNjQgYml0IERNQSAiCi0JCQkgICAgICAgImZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iKTsKLQkJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKLQkJfQotCX0gZWxzZSB7Ci0JCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sICIKLQkJCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKLQkJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKLQkJfQotCQlwY2lfdXNpbmdfZGFjID0gMDsKLQl9Ci0KIAl0ZzNyZWdfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAl0ZzNyZWdfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIApAQCAtMTA2NzAsOCArMTEyMzAsNiBAQAogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0JaWYgKHBjaV91c2luZ19kYWMpCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogI2lmIFRHM19WTEFOX1RBR19VU0VECiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CkBAIC0xMDc1Niw2ICsxMTMxNCw0NSBAQAogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKKwkvKiBUaGUgRVBCIGJyaWRnZSBpbnNpZGUgNTcxNCwgNTcxNSwgYW5kIDU3ODAgYW5kIGFueQorCSAqIGRldmljZSBiZWhpbmQgdGhlIEVQQiBjYW5ub3Qgc3VwcG9ydCBETUEgYWRkcmVzc2VzID4gNDAtYml0LgorCSAqIE9uIDY0LWJpdCBzeXN0ZW1zIHdpdGggSU9NTVUsIHVzZSA0MC1iaXQgZG1hX21hc2suCisJICogT24gNjQtYml0IHN5c3RlbXMgd2l0aG91dCBJT01NVSwgdXNlIDY0LWJpdCBkbWFfbWFzayBhbmQKKwkgKiBkbyBETUEgYWRkcmVzcyBjaGVjayBpbiB0ZzNfc3RhcnRfeG1pdCgpLgorCSAqLworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTXzU3ODgpCisJCXBlcnNpc3RfZG1hX21hc2sgPSBkbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOworCWVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR180MEJJVF9ETUFfQlVHKSB7CisJCXBlcnNpc3RfZG1hX21hc2sgPSBkbWFfbWFzayA9IERNQV80MEJJVF9NQVNLOworI2lmZGVmIENPTkZJR19ISUdITUVNCisJCWRtYV9tYXNrID0gRE1BXzY0QklUX01BU0s7CisjZW5kaWYKKwl9IGVsc2UKKwkJcGVyc2lzdF9kbWFfbWFzayA9IGRtYV9tYXNrID0gRE1BXzY0QklUX01BU0s7CisKKwkvKiBDb25maWd1cmUgRE1BIGF0dHJpYnV0ZXMuICovCisJaWYgKGRtYV9tYXNrID4gRE1BXzMyQklUX01BU0spIHsKKwkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBkbWFfbWFzayk7CisJCWlmICghZXJyKSB7CisJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwkJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LAorCQkJCQkJCSAgcGVyc2lzdF9kbWFfbWFzayk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byBvYnRhaW4gNjQgYml0ICIKKwkJCQkgICAgICAgIkRNQSBmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIik7CisJCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7CisJCQl9CisJCX0KKwl9CisJaWYgKGVyciB8fCBkbWFfbWFzayA9PSBETUFfMzJCSVRfTUFTSykgeworCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCAiCisJCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKKwkJfQorCX0KKwogCXRnM19pbml0X2J1Zm1ncl9jb25maWcodHApOwogCiAjaWYgVEczX1RTT19TVVBQT1JUICE9IDAKQEAgLTEwNzcxLDExICsxMTM2OCwxMiBAQAogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9UU09fQ0FQQUJMRTsKIAl9CiAKLQkvKiBUU08gaXMgb2ZmIGJ5IGRlZmF1bHQsIHVzZXIgY2FuIGVuYWJsZSB1c2luZyBldGh0b29sLiAgKi8KLSNpZiAwCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpCisJLyogVFNPIGlzIG9uIGJ5IGRlZmF1bHQgb24gY2hpcHMgdGhhdCBzdXBwb3J0IGhhcmR3YXJlIFRTTy4KKwkgKiBGaXJtd2FyZSBUU08gb24gb2xkZXIgY2hpcHMgZ2l2ZXMgbG93ZXIgcGVyZm9ybWFuY2UsIHNvIGl0CisJICogaXMgb2ZmIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgZW5hYmxlZCB1c2luZyBldGh0b29sLgorCSAqLworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLSNlbmRpZgogCiAjZW5kaWYKIApAQCAtMTA4MTksMTQgKzExNDE3LDE2IEBACiAJICogY2hlY2tzdW1taW5nLgogCSAqLwogCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVMpID09IDApIHsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOworCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3KQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJCWVsc2UKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfUlhfQ0hFQ0tTVU1TOwogCX0gZWxzZQogCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19SWF9DSEVDS1NVTVM7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU181Nzg4KQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0hJR0hETUE7Ci0KIAkvKiBmbG93IGNvbnRyb2wgYXV0b25lZ290aWF0aW9uIGlzIGRlZmF1bHQgYmVoYXZpb3IgKi8KIAl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BBVVNFX0FVVE9ORUc7CiAKQEAgLTEwODcwLDggKzExNDcwLDEyIEBACiAJICAgICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1BMSVRfTU9ERSkgIT0gMCwKIAkgICAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTk9fRVRIX1dJUkVfU1BFRUQpID09IDAsCiAJICAgICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSAhPSAwKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogZG1hX3J3Y3RybFslMDh4XVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCB0cC0+ZG1hX3J3Y3RybCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRtYV9yd2N0cmxbJTA4eF0gZG1hX21hc2tbJWQtYml0XVxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCB0cC0+ZG1hX3J3Y3RybCwKKwkgICAgICAgKHBkZXYtPmRtYV9tYXNrID09IERNQV8zMkJJVF9NQVNLKSA/IDMyIDoKKwkgICAgICAgICgoKHU2NCkgcGRldi0+ZG1hX21hc2sgPT0gRE1BXzQwQklUX01BU0spID8gNDAgOiA2NCkpOworCisJbmV0aWZfY2Fycmllcl9vZmYodHAtPmRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTA5NjgsNyArMTE1NzIsNyBAQAogCiAJcGNpX3Jlc3RvcmVfc3RhdGUodHAtPnBkZXYpOwogCi0JZXJyID0gdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgMCk7CisJZXJyID0gdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgUENJX0QwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IDdmNGI3ZjYuLmM0M2NjMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0xMzgsNiArMTM4LDggQEAKICNkZWZpbmUgICBBU0lDX1JFVl81NzUyCQkJIDB4MDYKICNkZWZpbmUgICBBU0lDX1JFVl81NzgwCQkJIDB4MDgKICNkZWZpbmUgICBBU0lDX1JFVl81NzE0CQkJIDB4MDkKKyNkZWZpbmUgICBBU0lDX1JFVl81NzU1CQkJIDB4MGEKKyNkZWZpbmUgICBBU0lDX1JFVl81Nzg3CQkJIDB4MGIKICNkZWZpbmUgIEdFVF9DSElQX1JFVihDSElQX1JFVl9JRCkJKChDSElQX1JFVl9JRCkgPj4gOCkKICNkZWZpbmUgICBDSElQUkVWXzU3MDBfQVgJCSAweDcwCiAjZGVmaW5lICAgQ0hJUFJFVl81NzAwX0JYCQkgMHg3MQpAQCAtNDU1LDYgKzQ1Nyw3IEBACiAjZGVmaW5lICBSWF9NT0RFX1BST01JU0MJCSAweDAwMDAwMTAwCiAjZGVmaW5lICBSWF9NT0RFX05PX0NSQ19DSEVDSwkJIDB4MDAwMDAyMDAKICNkZWZpbmUgIFJYX01PREVfS0VFUF9WTEFOX1RBRwkJIDB4MDAwMDA0MDAKKyNkZWZpbmUgIFJYX01PREVfSVBWNl9DU1VNX0VOQUJMRQkgMHgwMTAwMDAwMAogI2RlZmluZSBNQUNfUlhfU1RBVFVTCQkJMHgwMDAwMDQ2YwogI2RlZmluZSAgUlhfU1RBVFVTX1JFTU9URV9UWF9YT0ZGRUQJIDB4MDAwMDAwMDEKICNkZWZpbmUgIFJYX1NUQVRVU19YT0ZGX1JDVkQJCSAweDAwMDAwMDAyCkBAIC0xMzM5LDYgKzEzNDIsNyBAQAogI2RlZmluZSAgR1JDX0xDTENUUkxfQ0xFQVJJTlQJCTB4MDAwMDAwMDIKICNkZWZpbmUgIEdSQ19MQ0xDVFJMX1NFVElOVAkJMHgwMDAwMDAwNAogI2RlZmluZSAgR1JDX0xDTENUUkxfSU5UX09OX0FUVE4JMHgwMDAwMDAwOAorI2RlZmluZSAgR1JDX0xDTENUUkxfR1BJT19VQVJUX1NFTAkweDAwMDAwMDEwCS8qIDU3NTUgb25seSAqLwogI2RlZmluZSAgR1JDX0xDTENUUkxfVVNFX1NJR19ERVRFQ1QJMHgwMDAwMDAxMAkvKiA1NzE0LzU3ODAgb25seSAqLwogI2RlZmluZSAgR1JDX0xDTENUUkxfVVNFX0VYVF9TSUdfREVURUNUCTB4MDAwMDAwMjAJLyogNTcxNC81NzgwIG9ubHkgKi8KICNkZWZpbmUgIEdSQ19MQ0xDVFJMX0dQSU9fSU5QVVQzCTB4MDAwMDAwMjAKQEAgLTEzOTMsNiArMTM5Nyw3IEBACiAjZGVmaW5lIEdSQ19NRElfQ1RSTAkJCTB4MDAwMDY4NDQKICNkZWZpbmUgR1JDX1NFRVBST01fREVMQVkJCTB4MDAwMDY4NDgKIC8qIDB4Njg0YyAtLT4gMHg2YzAwIHVudXNlZCAqLworI2RlZmluZSBHUkNfRkFTVEJPT1RfUEMJCQkweDAwMDA2ODk0CS8qIDU3NTIsIDU3NTUsIDU3ODcgKi8KIAogLyogMHg2YzAwIC0tPiAweDcwMDAgdW51c2VkICovCiAKQEAgLTE0MzYsNiArMTQ0MSwxNiBAQAogI2RlZmluZSAgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwCSAweDAyNDAwMDAwCiAjZGVmaW5lICBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjAJIDB4MDI0MDAwMDIKICNkZWZpbmUgIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEU0MAkgMHgwMjQwMDAwMQorI2RlZmluZSAgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8xCSAweDAzNDAwMDAxCisjZGVmaW5lICBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzIJIDB4MDM0MDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMwkgMHgwMzQwMDAwMAorI2RlZmluZSAgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF80CSAweDAwMDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0VFUFJPTV82NEtIWgkgMHgwM2MwMDAwMworI2RlZmluZSAgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9FRVBST01fMzc2S0haCSAweDAzYzAwMDAyCisjZGVmaW5lICBGTEFTSF81Nzg3VkVORE9SX0FUTUVMX0VFUFJPTV82NEtIWgkgMHgwMzAwMDAwMworI2RlZmluZSAgRkxBU0hfNTc4N1ZFTkRPUl9BVE1FTF9FRVBST01fMzc2S0haCSAweDAzMDAwMDAyCisjZGVmaW5lICBGTEFTSF81Nzg3VkVORE9SX01JQ1JPX0VFUFJPTV82NEtIWgkgMHgwMzAwMDAwMAorI2RlZmluZSAgRkxBU0hfNTc4N1ZFTkRPUl9NSUNST19FRVBST01fMzc2S0haCSAweDAyMDAwMDAwCiAjZGVmaW5lICBOVlJBTV9DRkcxXzU3NTJQQUdFX1NJWkVfTUFTSwkgMHg3MDAwMDAwMAogI2RlZmluZSAgRkxBU0hfNTc1MlBBR0VfU0laRV8yNTYJIDB4MDAwMDAwMDAKICNkZWZpbmUgIEZMQVNIXzU3NTJQQUdFX1NJWkVfNTEyCSAweDEwMDAwMDAwCkBAIC0yMTYzLDYgKzIxNzgsNyBAQAogI2RlZmluZSBURzNfRkxBR18xMF8xMDBfT05MWQkJMHgwMTAwMDAwMAogI2RlZmluZSBURzNfRkxBR19QQVVTRV9BVVRPTkVHCQkweDAyMDAwMDAwCiAjZGVmaW5lIFRHM19GTEFHX0lOX1JFU0VUX1RBU0sJCTB4MDQwMDAwMDAKKyNkZWZpbmUgVEczX0ZMQUdfNDBCSVRfRE1BX0JVRwkJMHgwODAwMDAwMAogI2RlZmluZSBURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TCTB4MTAwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfR09UX1NFUkRFU19GTE9XQ1RMCTB4MjAwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfU1BMSVRfTU9ERQkJMHg0MDAwMDAwMApAQCAtMjE4NCw3ICsyMjAwLDcgQEAKICNkZWZpbmUgVEczX0ZMRzJfUEhZX1NFUkRFUwkJMHgwMDAwMjAwMAogI2RlZmluZSBURzNfRkxHMl9DQVBBQ0lUSVZFX0NPVVBMSU5HCTB4MDAwMDQwMDAKICNkZWZpbmUgVEczX0ZMRzJfRkxBU0gJCQkweDAwMDA4MDAwCi0jZGVmaW5lIFRHM19GTEcyX0hXX1RTTwkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgVEczX0ZMRzJfSFdfVFNPXzEJCTB4MDAwMTAwMDAKICNkZWZpbmUgVEczX0ZMRzJfU0VSREVTX1BSRUVNUEhBU0lTCTB4MDAwMjAwMDAKICNkZWZpbmUgVEczX0ZMRzJfNTcwNV9QTFVTCQkweDAwMDQwMDAwCiAjZGVmaW5lIFRHM19GTEcyXzU3NTBfUExVUwkJMHgwMDA4MDAwMApAQCAtMjE5Nyw2ICsyMjEzLDkgQEAKICNkZWZpbmUgVEczX0ZMRzJfUEFSQUxMRUxfREVURUNUCTB4MDEwMDAwMDAKICNkZWZpbmUgVEczX0ZMRzJfSUNIX1dPUktBUk9VTkQJCTB4MDIwMDAwMDAKICNkZWZpbmUgVEczX0ZMRzJfNTc4MF9DTEFTUwkJMHgwNDAwMDAwMAorI2RlZmluZSBURzNfRkxHMl9IV19UU09fMgkJMHgwODAwMDAwMAorI2RlZmluZSBURzNfRkxHMl9IV19UU08JCQkoVEczX0ZMRzJfSFdfVFNPXzEgfCBURzNfRkxHMl9IV19UU09fMikKKyNkZWZpbmUgVEczX0ZMRzJfMVNIT1RfTVNJCQkweDEwMDAwMDAwCiAKIAl1MzIJCQkJc3BsaXRfbW9kZV9tYXhfcmVxczsKICNkZWZpbmUgU1BMSVRfTU9ERV81NzA0X01BWF9SRVEJCTMKQEAgLTIyNDYsNiArMjI2NSw4IEBACiAjZGVmaW5lIFBIWV9JRF9CQ001NzUyCQkJMHg2MDAwODEwMAogI2RlZmluZSBQSFlfSURfQkNNNTcxNAkJCTB4NjAwMDgzNDAKICNkZWZpbmUgUEhZX0lEX0JDTTU3ODAJCQkweDYwMDA4MzUwCisjZGVmaW5lIFBIWV9JRF9CQ001NzU1CQkJMHhiYzA1MGNjMAorI2RlZmluZSBQSFlfSURfQkNNNTc4NwkJCTB4YmMwNTBjZTAKICNkZWZpbmUgUEhZX0lEX0JDTTgwMDIJCQkweDYwMDEwMTQwCiAjZGVmaW5lIFBIWV9JRF9JTlZBTElECQkJMHhmZmZmZmZmZgogI2RlZmluZSBQSFlfSURfUkVWX01BU0sJCQkweDAwMDAwMDBmCkBAIC0yMjU3LDYgKzIyNzgsNyBAQAogCXUzMgkJCQlsZWRfY3RybDsKIAogCWNoYXIJCQkJYm9hcmRfcGFydF9udW1iZXJbMjRdOworCWNoYXIJCQkJZndfdmVyWzE2XTsKIAl1MzIJCQkJbmljX3NyYW1fZGF0YV9jZmc7CiAJdTMyCQkJCXBjaV9jbG9ja19jdHJsOwogCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXZfcGVlcjsKQEAgLTIyNzAsNyArMjI5Miw4IEBACiAJIChYKSA9PSBQSFlfSURfQkNNNTcwMyB8fCAoWCkgPT0gUEhZX0lEX0JDTTU3MDQgfHwgXAogCSAoWCkgPT0gUEhZX0lEX0JDTTU3MDUgfHwgKFgpID09IFBIWV9JRF9CQ001NzUwIHx8IFwKIAkgKFgpID09IFBIWV9JRF9CQ001NzUyIHx8IChYKSA9PSBQSFlfSURfQkNNNTcxNCB8fCBcCi0JIChYKSA9PSBQSFlfSURfQkNNNTc4MCB8fCAoWCkgPT0gUEhZX0lEX0JDTTgwMDIpCisJIChYKSA9PSBQSFlfSURfQkNNNTc4MCB8fCAoWCkgPT0gUEhZX0lEX0JDTTU3ODcgfHwgXAorCSAoWCkgPT0gUEhZX0lEX0JDTTU3NTUgfHwgKFgpID09IFBIWV9JRF9CQ004MDAyKQogCiAJc3RydWN0IHRnM19od19zdGF0cwkJKmh3X3N0YXRzOwogCWRtYV9hZGRyX3QJCQlzdGF0c19tYXBwaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGxhbi5jIGIvZHJpdmVycy9uZXQvdGxhbi5jCmluZGV4IGMyNTA2YjUuLjEyMDc2ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RsYW4uYworKysgYi9kcml2ZXJzL25ldC90bGFuLmMKQEAgLTUzNiw2ICs1MzYsNyBAQAogCXUxNgkJICAgZGV2aWNlX2lkOwogCWludAkJICAgcmVnLCByYyA9IC1FTk9ERVY7CiAKKyNpZmRlZiBDT05GSUdfUENJCiAJaWYgKHBkZXYpIHsKIAkJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAkJaWYgKHJjKQpAQCAtNTQ3LDYgKzU0OCw3IEBACiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAl9CisjZW5kaWYgIC8qICBDT05GSUdfUENJICAqLwogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKFRMYW5Qcml2YXRlSW5mbykpOwogCWlmIChkZXYgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwppbmRleCA5NzcxMmMzLi5jNThhNGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwpAQCAtMTIyLDYgKzEyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAKQEAgLTUxMiw3ICs1MTMsNyBAQAogCiAJd2hpbGUgKCEoKHJlYWR3KHN0cmVhbWVyX21taW8gKyBTSVNSKSkgJiBTSVNSX1NSQl9SRVBMWSkpIHsKIAkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKLQkJaWYgKGppZmZpZXMgLSB0ID4gNDAgKiBIWikgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0ICsgNDAgKiBIWikpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJJQk0gUENJIHRva2VucmluZyBjYXJkIG5vdCByZXNwb25kaW5nXG4iKTsKIAkJCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBTVFJFQU1FUl9JT19TUEFDRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCAwNTQ3N2QyLi4yMzAzMmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTEwMCw2ICsxMDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAKQEAgLTMwNyw3ICszMDgsNyBAQAogCXQ9amlmZmllczsKIAl3aGlsZSgocmVhZGwob2x5bXBpY19tbWlvK0JDVEwpKSAmIEJDVExfU09GVFJFU0VUKSB7CiAJCXNjaGVkdWxlKCk7CQkKLQkJaWYoamlmZmllcy10ID4gNDAqSFopIHsKKwkJaWYodGltZV9hZnRlcihqaWZmaWVzLCB0ICsgNDAqSFopKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIklCTSBQQ0kgdG9rZW5yaW5nIGNhcmQgbm90IHJlc3BvbmRpbmcuXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC0zNTksNyArMzYwLDcgQEAKIAkJdD1qaWZmaWVzOwogCQl3aGlsZSAoIXJlYWRsKG9seW1waWNfbW1pbytDTEtDVEwpICYgQ0xLQ1RMX1BBVVNFKSB7IAogCQkJc2NoZWR1bGUoKSA7IAotCQkJaWYoamlmZmllcy10ID4gMipIWikgeyAKKwkJCWlmKHRpbWVfYWZ0ZXIoamlmZmllcywgdCArIDIqSFopKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJJQk0gQ2FyZGJ1cyB0b2tlbnJpbmcgYWRhcHRlciBub3QgcmVzcG9uc2luZy5cbiIpIDsgCiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQl9CkBAIC0zNzMsNyArMzc0LDcgQEAKIAl0PWppZmZpZXM7CiAJd2hpbGUoISgocmVhZGwob2x5bXBpY19tbWlvK1NJU1JfUlIpKSAmIFNJU1JfU1JCX1JFUExZKSkgewogCQlzY2hlZHVsZSgpOwkJCi0JCWlmKGppZmZpZXMtdCA+IDE1KkhaKSB7CisJCWlmKHRpbWVfYWZ0ZXIoamlmZmllcywgdCArIDE1KkhaKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJJQk0gUENJIHRva2VucmluZyBjYXJkIG5vdCByZXNwb25kaW5nLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQpAQCAtNTE5LDcgKzUyMCw3IEBACiAgICAgICAgICAgICAJCQlvbHltcGljX3ByaXYtPnNyYl9xdWV1ZWQ9MDsKICAgICAgICAgICAgIAkJCWJyZWFrOwogICAgICAgICAJCX0KLQkJCWlmICgoamlmZmllcy10KSA+IDEwKkhaKSB7IAorCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdCArIDEwKkhaKSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTUkIgdGltZWQgb3V0LiBcbiIsZGV2LT5uYW1lKSA7IAogCQkJCW9seW1waWNfcHJpdi0+c3JiX3F1ZXVlZD0wOwogCQkJCWJyZWFrIDsgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKaW5kZXggZDdmYjNmZi4uZTNkZDE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwpAQCAtNDAyLDggKzQwMiw3IEBACiAJCXVuc2lnbmVkIGNvcHlpbmdfc2tiLCBidWZsZW47CiAKIAkJc2tiID0gZGUtPnJ4X3NrYltyeF90YWlsXS5za2I7Ci0JCWlmICghc2tiKQotCQkJQlVHKCk7CisJCUJVR19PTighc2tiKTsKIAkJcm1iKCk7CiAJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGRlLT5yeF9yaW5nW3J4X3RhaWxdLm9wdHMxKTsKIAkJaWYgKHN0YXR1cyAmIERlc2NPd24pCkBAIC01NDUsOCArNTQ0LDcgQEAKIAkJCWJyZWFrOwogCiAJCXNrYiA9IGRlLT50eF9za2JbdHhfdGFpbF0uc2tiOwotCQlpZiAoIXNrYikKLQkJCUJVRygpOworCQlCVUdfT04oIXNrYik7CiAJCWlmICh1bmxpa2VseShza2IgPT0gREVfRFVNTVlfU0tCKSkKIAkJCWdvdG8gbmV4dDsKIApAQCAtNzg5LDggKzc4Nyw3IEBACiAKIAlkZS0+dHhfaGVhZCA9IE5FWFRfVFgoZW50cnkpOwogCi0JaWYgKFRYX0JVRkZTX0FWQUlMKGRlKSA8IDApCi0JCUJVRygpOworCUJVR19PTihUWF9CVUZGU19BVkFJTChkZSkgPCAwKTsKIAlpZiAoVFhfQlVGRlNfQVZBSUwoZGUpID09IDApCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtOTE2LDggKzkxMyw3IEBACiAJdW5zaWduZWQgbWVkaWEgPSBkZS0+bWVkaWFfdHlwZTsKIAl1MzIgbWFjbW9kZSA9IGRyMzIoTWFjTW9kZSk7CiAKLQlpZiAoZGVfaXNfcnVubmluZyhkZSkpCi0JCUJVRygpOworCUJVR19PTihkZV9pc19ydW5uaW5nKGRlKSk7CiAKIAlpZiAoZGUtPmRlMjEwNDApCiAJCWR3MzIoQ1NSMTEsIEZVTExfRFVQTEVYX01BR0lDKTsKQEAgLTExNTMsOCArMTE0OSw3IEBACiAJCXJldHVybjsKIAl9CiAJCi0JaWYgKCEoc3RhdHVzICYgTGlua0ZhaWwpKQotCQlCVUcoKTsKKwlCVUdfT04oIShzdGF0dXMgJiBMaW5rRmFpbCkpOwogCiAJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGUtPmRldikpIHsKIAkJZGVfbGlua19kb3duKGRlKTsKQEAgLTEzMzIsMTEgKzEzMjcsMTEgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRlLT50eF9za2JbaV0uc2tiOwogCQlpZiAoKHNrYikgJiYgKHNrYiAhPSBERV9EVU1NWV9TS0IpKSB7CiAJCQlpZiAoc2tiICE9IERFX1NFVFVQX1NLQikgewotCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCQlkZS0+bmV0X3N0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKGRlLT5wZGV2LAogCQkJCQlkZS0+dHhfc2tiW2ldLm1hcHBpbmcsCiAJCQkJCXNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQl9IGVsc2UgewogCQkJCXBjaV91bm1hcF9zaW5nbGUoZGUtPnBkZXYsCiAJCQkJCWRlLT50eF9za2JbaV0ubWFwcGluZywKQEAgLTEzNjIsNyArMTM1Nyw2IEBACiB7CiAJc3RydWN0IGRlX3ByaXZhdGUgKmRlID0gZGV2LT5wcml2OwogCWludCByYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKG5ldGlmX21zZ19pZnVwKGRlKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlbmFibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CkBAIC0xMzc2LDE4ICsxMzcwLDIwIEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlyYyA9IGRlX2luaXRfaHcoZGUpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBoL3cgaW5pdCBmYWlsdXJlLCBlcnI9JWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0JfQorCWR3MzIoSW50ck1hc2ssIDApOwogCiAJcmMgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZGVfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJUlEgJWQgcmVxdWVzdCBmYWlsdXJlLCBlcnI9JWRcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxLCByYyk7Ci0JCWdvdG8gZXJyX291dF9odzsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJcmMgPSBkZV9pbml0X2h3KGRlKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaC93IGluaXQgZmFpbHVyZSwgZXJyPSVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCByYyk7CisJCWdvdG8gZXJyX291dF9mcmVlX2lycTsKIAl9CiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwpAQCAtMTM5NSwxMSArMTM5MSw4IEBACiAKIAlyZXR1cm4gMDsKIAotZXJyX291dF9odzoKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGUtPmxvY2ssIGZsYWdzKTsKLQlkZV9zdG9wX2h3KGRlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZS0+bG9jaywgZmxhZ3MpOwotCitlcnJfb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogZXJyX291dF9mcmVlOgogCWRlX2ZyZWVfcmluZ3MoZGUpOwogCXJldHVybiByYzsKQEAgLTE0NTUsNiArMTQ0OCw4IEBACiAJc3luY2hyb25pemVfaXJxKGRldi0+aXJxKTsKIAlkZV9jbGVhbl9yaW5ncyhkZSk7CiAKKwlkZV9pbml0X3JpbmdzKGRlKTsKKwogCWRlX2luaXRfaHcoZGUpOwogCQogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKQEAgLTIwOTIsOCArMjA4Nyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUgPSBkZXYtPnByaXY7CiAKLQlpZiAoIWRldikKLQkJQlVHKCk7CisJQlVHX09OKCFkZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJa2ZyZWUoZGUtPmVlX2RhdGEpOwogCWlvdW5tYXAoZGUtPnJlZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jCmluZGV4IGQ5OTgwYmQuLmNhN2U1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9wbmljLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlICJ0dWxpcC5oIgogCiAKQEAgLTY4LDcgKzY5LDcgQEAKIAkJICovCiAJCWlmICh0dWxpcF9tZWRpYV9jYXBbZGV2LT5pZl9wb3J0XSAmIE1lZGlhSXNNSUkpCiAJCQlyZXR1cm47Ci0JCWlmICghIHRwLT5ud2F5c2V0ICB8fCAgamlmZmllcyAtIGRldi0+dHJhbnNfc3RhcnQgPiAxKkhaKSB7CisJCWlmICghIHRwLT5ud2F5c2V0ICB8fCAgdGltZV9hZnRlcihqaWZmaWVzLCBkZXYtPnRyYW5zX3N0YXJ0ICsgMSpIWikpIHsKIAkJCXRwLT5jc3I2ID0gMHgwMDQyMDAwMCB8ICh0cC0+Y3NyNiAmIDB4MDAwMGZkZmYpOwogCQkJaW93cml0ZTMyKHRwLT5jc3I2LCBpb2FkZHIgKyBDU1I2KTsKIAkJCWlvd3JpdGUzMigweDMwLCBpb2FkZHIgKyBDU1IxMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCA1YjFhZjM5Li5iYTA1ZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTE2NDUsNyArMTY0NSw3IEBACiAKIAkJLyogbm8gbW9yZSBoYXJkd2FyZSBhY2Nlc3NlcyBiZWhpbmQgdGhpcyBsaW5lLiAqLwogCi0JCWlmIChucC0+Y3NyNikgQlVHKCk7CisJCUJVR19PTihucC0+Y3NyNik7CiAJCWlmIChpb3JlYWQzMihpb2FkZHIgKyBJbnRyRW5hYmxlKSkgQlVHKCk7CiAKIAkJLyogcGNpX3Bvd2VyX29mZihwZGV2LCAtMSk7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCmluZGV4IDYwZDFlMDUuLjU2MzQ0MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCkBAIC0zMiw2ICszMiw5IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2VuZGlmCiAKICNpZmRlZiBERUJVRwogI2RlZmluZSBlbnRlcih4KSAgIHByaW50aygiRW50ZXI6ICVzLCAlcyBsaW5lICVpXG4iLHgsX19GSUxFX18sX19MSU5FX18pCkBAIC01OTgsMTAgKzYwMSw4IEBACiAJZW50ZXIoInNldHVwX2Rlc2NyaXB0b3JzIik7CiAKIAotCWlmIChjYXJkLT5yeF9idWZmZXIgPT0gTlVMTCkKLQkJQlVHKCk7Ci0JaWYgKGNhcmQtPnR4X2J1ZmZlciA9PSBOVUxMKQotCQlCVUcoKTsKKwlCVUdfT04oY2FyZC0+cnhfYnVmZmVyID09IE5VTEwpOworCUJVR19PTihjYXJkLT50eF9idWZmZXIgPT0gTlVMTCk7CiAKIAkvKiBSZWNlaXZlIGRlc2NyaXB0b3JzICovCiAJbWVtc2V0KGNhcmQtPnJ4X2J1ZmZlciwgMCwgMTI4KTsJLyogY2xlYXIgdGhlIGRlc2NyaXB0b3JzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDUwYjhjNjcuLmExZWQyZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0yNDksOCArMjQ5LDExIEBACiAKIAlpZiAoYWxpZ24pCiAJCXNrYl9yZXNlcnZlKHNrYiwgYWxpZ24pOwotCWlmIChtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLCBsZW4pLCBpdiwgbGVuKSkKKwlpZiAobWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgbGVuKSwgaXYsIGxlbikpIHsKKwkJdHVuLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAKIAlza2ItPmRldiA9IHR1bi0+ZGV2OwogCXN3aXRjaCAodHVuLT5mbGFncyAmIFRVTl9UWVBFX01BU0spIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCA0Yzc2Y2I3Li5jZGUzNWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIH07CiAKIC8qIGRpcmVjdGx5IGluZGV4ZWQgYnkgZW51bSB0eXBob29uX2NhcmRzLCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCB0eXBob29uX2NhcmRfaW5mbyB0eXBob29uX2NhcmRfaW5mb1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHR5cGhvb25fY2FyZF9pbmZvIHR5cGhvb25fY2FyZF9pbmZvW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7ICIzQ29tIFR5cGhvb24gKDNDOTkwLVRYKSIsCiAJCVRZUEhPT05fQ1JZUFRPX05PTkV9LAogCXsgIjNDb20gVHlwaG9vbiAoM0NSOTkwLVRYLTk1KSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuYyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCmluZGV4IGMyZDU5MDcuLmVkMWY4MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jCkBAIC0xMTA2LDYgKzExMDYsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IHZwdHItPm9wdGlvbnMubnVtcng7IGkrKykgewogCQlzdHJ1Y3QgdmVsb2NpdHlfcmRfaW5mbyAqcmRfaW5mbyA9ICYodnB0ci0+cmRfaW5mb1tpXSk7CisJCXN0cnVjdCByeF9kZXNjICpyZCA9IHZwdHItPnJkX3JpbmcgKyBpOworCisJCW1lbXNldChyZCwgMCwgc2l6ZW9mKCpyZCkpOwogCiAJCWlmICghcmRfaW5mby0+c2tiKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCmluZGV4IDE4YzI3ZTEuLjg4M2NmN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCkBAIC00NTksNyArNDU5LDcgQEAKIAlib29sICJXQU5QSVBFIEZyYW1lIFJlbGF5IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBWRU5ET1JfU0FOR09NQQogCWhlbHAKLQkgIENvbm5lY3QgYSBXQU5QSVBFIGNhcmQgdG8gYSBGcmFtZSBSZWxheSBuZXR3b3JrLCBvciB1c2UgRnJhbWUgRmVsYXkKKwkgIENvbm5lY3QgYSBXQU5QSVBFIGNhcmQgdG8gYSBGcmFtZSBSZWxheSBuZXR3b3JrLCBvciB1c2UgRnJhbWUgUmVsYXkKIAkgIEFQSSB0byBkZXZlbG9wIGN1c3RvbSBhcHBsaWNhdGlvbnMuCiAKIAkgIENvbnRhaW5zIHRoZSBFdGhlcm5ldCBCcmlkZ2luZyBvdmVyIEZyYW1lIFJlbGF5IGZlYXR1cmUsIHdoZXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKaW5kZXggN2RiMWQxZC4uY2Y1YzgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KIAorI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NibmkuYyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKaW5kZXggZGIyYzc5OC4uMTc1YmExMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NibmkuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCkBAIC0xNDk1LDggKzE0OTUsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAKLWludAotaW5pdF9tb2R1bGUoIHZvaWQgKQoraW50IF9faW5pdCBpbml0X21vZHVsZSggdm9pZCApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgICpkZXY7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jIGIvZHJpdmVycy9uZXQvd2FuL3NlYWxldmVsLmMKaW5kZXggNTM4MGRkZi4uMDUwZTg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NlYWxldmVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NlYWxldmVsLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogCisjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCBlZjg1ZDc2Li5mZDE3YWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKQEAgLTYsNyArNiw4IEBACiAJZGVwZW5kcyBvbiBORVRERVZJQ0VTCiAKIGNvbmZpZyBORVRfUkFESU8KLQlib29sICJXaXJlbGVzcyBMQU4gZHJpdmVycyAobm9uLWhhbXJhZGlvKSAmIFdpcmVsZXNzIEV4dGVuc2lvbnMiCisJYm9vbCAiV2lyZWxlc3MgTEFOIGRyaXZlcnMgKG5vbi1oYW1yYWRpbykiCisJc2VsZWN0IFdJUkVMRVNTX0VYVAogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHdpcmVsZXNzIExBTnMgYW5kIGV2ZXJ5dGhpbmcgaGF2aW5nIHRvIGRvIHdpdGggcmFkaW8sCiAJICBidXQgbm90IHdpdGggYW1hdGV1ciByYWRpbyBvciBGTSBicm9hZGNhc3RpbmcuCkBAIC0yNCw2ICsyNSwxNiBAQAogCSAgdGhlIHRvb2xzIGZyb20KIAkgIDxodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWw+LgogCitjb25maWcgTkVUX1dJUkVMRVNTX1JUTkVUTElOSworCWJvb2wgIldpcmVsZXNzIEV4dGVuc2lvbiBBUEkgb3ZlciBSdE5ldGxpbmsiCisJZGVwZW5kcyBvbiBORVRfUkFESU8KKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IHRoZSBXaXJlbGVzcyBFeHRlbnNpb24gQVBJIG92ZXIgdGhlIFJ0TmV0bGluayBzb2NrZXQKKwkgIGluIGFkZGl0aW9uIHRvIHRoZSB0cmFkaXRpb25hbCBpb2N0bCBpbnRlcmZhY2UgKHNlbGVjdGVkIGFib3ZlKS4KKworCSAgRm9yIG5vdywgZmV3IHRvb2xzIHVzZSB0aGlzIGZhY2lsaXR5LCBidXQgaXQgbWlnaHQgZ3JvdyBpbiB0aGUKKwkgIGZ1dHVyZS4gVGhlIG9ubHkgZG93bnNpZGUgaXMgdGhhdCBpdCBhZGRzIDQuNSBrQiB0byB5b3VyIGtlcm5lbC4KKwogIyBOb3RlIDogdGhlIGNhcmRzIGFyZSBvYnNvbGV0ZSAoY2FuJ3QgYnV5IHRoZW0gYW55bW9yZSksIGJ1dCB0aGUgZHJpdmVycwogIyBhcmUgbm90LCBhcyBwZW9wbGUgYXJlIHN0aWxsIHVzaW5nIHRoZW0uLi4KIGNvbW1lbnQgIk9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpIgpAQCAtMTM1LDggKzE0Niw5IEBACiAKIGNvbmZpZyBJUFcyMTAwCiAJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAyMTAwIE5ldHdvcmsgQ29ubmVjdGlvbiIKLQlkZXBlbmRzIG9uIE5FVF9SQURJTyAmJiBQQ0kgJiYgSUVFRTgwMjExCisJZGVwZW5kcyBvbiBORVRfUkFESU8gJiYgUENJCiAJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBJRUVFODAyMTEKIAktLS1oZWxwLS0tCiAgICAgICAgICAgQSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBQUk8vV2lyZWxlc3MgMjEwMCBOZXR3b3JrIAogCSAgQ29ubmVjdGlvbiA4MDIuMTFiIHdpcmVsZXNzIG5ldHdvcmsgYWRhcHRlci4KQEAgLTE4OCw4ICsyMDAsOSBAQAogCiBjb25maWcgSVBXMjIwMAogCXRyaXN0YXRlICJJbnRlbCBQUk8vV2lyZWxlc3MgMjIwMEJHIGFuZCAyOTE1QUJHIE5ldHdvcmsgQ29ubmVjdGlvbiIKLQlkZXBlbmRzIG9uIE5FVF9SQURJTyAmJiBJRUVFODAyMTEgJiYgUENJCisJZGVwZW5kcyBvbiBORVRfUkFESU8gJiYgUENJCiAJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBJRUVFODAyMTEKIAktLS1oZWxwLS0tCiAgICAgICAgICAgQSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBQUk8vV2lyZWxlc3MgMjIwMEJHIGFuZCAyOTE1QUJHIE5ldHdvcmsKIAkgIENvbm5lY3Rpb24gYWRhcHRlcnMuIApAQCAtMjAxLDcgKzIxNCw3IEBACiAJICBJbiBvcmRlciB0byB1c2UgdGhpcyBkcml2ZXIsIHlvdSB3aWxsIG5lZWQgYSBmaXJtd2FyZSBpbWFnZSBmb3IgaXQuCiAgICAgICAgICAgWW91IGNhbiBvYnRhaW4gdGhlIGZpcm13YXJlIGZyb20KIAkgIDxodHRwOi8vaXB3MjIwMC5zZi5uZXQvPi4gIFNlZSB0aGUgYWJvdmUgcmVmZXJlbmNlZCBSRUFETUUuaXB3MjIwMCAKLQkgIGZvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBpbnN0YWxsIHRoZSBmaXJtYXJlIGltYWdlcy4KKwkgIGZvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBpbnN0YWxsIHRoZSBmaXJtd2FyZSBpbWFnZXMuCiAKICAgICAgICAgICBZb3Ugd2lsbCBhbHNvIHZlcnkgbGlrZWx5IG5lZWQgdGhlIFdpcmVsZXNzIFRvb2xzIGluIG9yZGVyIHRvCiAgICAgICAgICAgY29uZmlndXJlIHlvdXIgY2FyZDoKQEAgLTIxMyw2ICsyMjYsMTkgQEAKICAgICAgICAgICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbW9kdWxlcy50eHQ+LiAgVGhlIG1vZHVsZQogICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGlwdzIyMDAua28uCiAKK2NvbmZpZyBJUFcyMjAwX01PTklUT1IKKyAgICAgICAgYm9vbCAiRW5hYmxlIHByb21pc2N1b3VzIG1vZGUiCisgICAgICAgIGRlcGVuZHMgb24gSVBXMjIwMAorICAgICAgICAtLS1oZWxwLS0tCisJICBFbmFibGVzIHByb21pc2N1b3VzL21vbml0b3IgbW9kZSBzdXBwb3J0IGZvciB0aGUgaXB3MjIwMCBkcml2ZXIuCisJICBXaXRoIHRoaXMgZmVhdHVyZSBjb21waWxlZCBpbnRvIHRoZSBkcml2ZXIsIHlvdSBjYW4gc3dpdGNoIHRvIAorCSAgcHJvbWlzY3VvdXMgbW9kZSB2aWEgdGhlIFdpcmVsZXNzIFRvb2wncyBNb25pdG9yIG1vZGUuICBXaGlsZSBpbiB0aGlzCisJICBtb2RlLCBubyBwYWNrZXRzIGNhbiBiZSBzZW50LgorCitjb25maWcgSVBXX1FPUworICAgICAgICBib29sICJFbmFibGUgUW9TIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gSVBXMjIwMCAmJiBFWFBFUklNRU5UQUwKKwogY29uZmlnIElQVzIyMDBfREVCVUcKIAlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIElQVzIyMDAgbW9kdWxlLiIKIAlkZXBlbmRzIG9uIElQVzIyMDAKQEAgLTIzOSwxMyArMjY1LDE0IEBACiAKIGNvbmZpZyBBSVJPCiAJdHJpc3RhdGUgIkNpc2NvL0Fpcm9uZXQgMzRYLzM1WC80NTAwLzQ4MDAgSVNBIGFuZCBQQ0kgY2FyZHMiCi0JZGVwZW5kcyBvbiBORVRfUkFESU8gJiYgSVNBX0RNQV9BUEkgJiYgQ1JZUFRPICYmIChQQ0kgfHwgQlJPS0VOKQorIAlkZXBlbmRzIG9uIE5FVF9SQURJTyAmJiBJU0FfRE1BX0FQSSAmJiAoUENJIHx8IEJST0tFTikKKwlzZWxlY3QgQ1JZUFRPCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgc3RhbmRhcmQgTGludXggZHJpdmVyIHRvIHN1cHBvcnQgQ2lzY28vQWlyb25ldCBJU0EgYW5kCiAJICBQQ0kgODAyLjExIHdpcmVsZXNzIGNhcmRzLgogCSAgSXQgc3VwcG9ydHMgdGhlIG5ldyA4MDIuMTFiIGNhcmRzIGZyb20gQ2lzY28gKENpc2NvIDM0WCwgQ2lzY28gMzVYCiAJICAtIHdpdGggb3Igd2l0aG91dCBlbmNyeXB0aW9uKSBhcyB3ZWxsIGFzIGNhcmQgYmVmb3JlIHRoZSBDaXNjbwotCSAgYXF1aXNpdGlvbiAoQWlyb25ldCA0NTAwLCBBaXJvbmV0IDQ4MDAsIEFpcm9uZXQgNDgwMEIpLgorCSAgYWNxdWlzaXRpb24gKEFpcm9uZXQgNDUwMCwgQWlyb25ldCA0ODAwLCBBaXJvbmV0IDQ4MDBCKS4KIAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydCBib3RoIHRoZSBzdGFuZGFyZCBMaW51eCBXaXJlbGVzcyBFeHRlbnNpb25zCiAJICBhbmQgQ2lzY28gcHJvcHJpZXRhcnkgQVBJLCBzbyBib3RoIHRoZSBMaW51eCBXaXJlbGVzcyBUb29scyBhbmQgdGhlCkBAIC0zODcsMTMgKzQxNCwxNCBAQAogY29uZmlnIEFJUk9fQ1MKIAl0cmlzdGF0ZSAiQ2lzY28vQWlyb25ldCAzNFgvMzVYLzQ1MDAvNDgwMCBQQ01DSUEgY2FyZHMiCiAJZGVwZW5kcyBvbiBORVRfUkFESU8gJiYgUENNQ0lBICYmIChCUk9LRU4gfHwgIU0zMlIpCisJc2VsZWN0IENSWVBUTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIHN0YW5kYXJkIExpbnV4IGRyaXZlciB0byBzdXBwb3J0IENpc2NvL0Fpcm9uZXQgUENNQ0lBCiAJICA4MDIuMTEgd2lyZWxlc3MgY2FyZHMuICBUaGlzIGRyaXZlciBpcyB0aGUgc2FtZSBhcyB0aGUgQWlyb25ldAogCSAgZHJpdmVyIHBhcnQgb2YgdGhlIExpbnV4IFBjbWNpYSBwYWNrYWdlLgogCSAgSXQgc3VwcG9ydHMgdGhlIG5ldyA4MDIuMTFiIGNhcmRzIGZyb20gQ2lzY28gKENpc2NvIDM0WCwgQ2lzY28gMzVYCiAJICAtIHdpdGggb3Igd2l0aG91dCBlbmNyeXB0aW9uKSBhcyB3ZWxsIGFzIGNhcmQgYmVmb3JlIHRoZSBDaXNjbwotCSAgYXF1aXNpdGlvbiAoQWlyb25ldCA0NTAwLCBBaXJvbmV0IDQ4MDAsIEFpcm9uZXQgNDgwMEIpLiBJdCBhbHNvCisJICBhY3F1aXNpdGlvbiAoQWlyb25ldCA0NTAwLCBBaXJvbmV0IDQ4MDAsIEFpcm9uZXQgNDgwMEIpLiBJdCBhbHNvCiAJICBzdXBwb3J0cyBPRU0gb2YgQ2lzY28gc3VjaCBhcyB0aGUgREVMTCBUcnVlTW9iaWxlIDQ4MDAgYW5kIFhpcmNvbQogCSAgODAyLjExYiBjYXJkcy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IGE0YzdhZTkuLjEwOGQ5ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCkBAIC04NywxNCArODgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjZW5kaWYKIAotLyogU3VwcG9ydCBDaXNjbyBNSUMgZmVhdHVyZSAqLwotI2RlZmluZSBNSUNTVVBQT1JUCi0KLSNpZiBkZWZpbmVkKE1JQ1NVUFBPUlQpICYmICFkZWZpbmVkKENPTkZJR19DUllQVE8pCi0jd2FybmluZyBNSUMgc3VwcG9ydCByZXF1aXJlcyBDcnlwdG8gQVBJCi0jdW5kZWYgTUlDU1VQUE9SVAotI2VuZGlmCi0KIC8qIEhhY2sgdG8gZG8gc29tZSBwb3dlciBzYXZpbmcgKi8KICNkZWZpbmUgUE9XRVJfT05fRE9XTgogCkBAIC03NzcsNiArNzcwLDExIEBACiB9IEJTU0xpc3RSaWQ7CiAKIHR5cGVkZWYgc3RydWN0IHsKKyAgQlNTTGlzdFJpZCBic3M7CisgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK30gQlNTTGlzdEVsZW1lbnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKICAgdTggcnNzaXBjdDsKICAgdTggcnNzaWRCbTsKIH0gdGRzUnNzaUVudHJ5OwpAQCAtOTA5LDYgKzkwNyw3IEBACiAjZGVmaW5lIE5VTV9NT0RVTEVTICAgICAgIDIKICNkZWZpbmUgTUlDX01TR0xFTl9NQVggICAgMjQwMAogI2RlZmluZSBFTU1IMzJfTVNHTEVOX01BWCBNSUNfTVNHTEVOX01BWAorI2RlZmluZSBBSVJPX0RFRl9NVFUgICAgICAyMzEyCiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1MzIgICBzaXplOyAgICAgICAgICAgIC8vIHNpemUKQEAgLTExMTgsNyArMTExNyw2IEBACiBzdGF0aWMgaW50IHdyaXRlcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBhaXJvbmV0X2lvY3RsICpjb21wKTsKIHN0YXRpYyBpbnQgZmxhc2hjYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGFpcm9uZXRfaW9jdGwgKmNvbXApOwogI2VuZGlmIC8qIENJU0NPX0VYVCAqLwotI2lmZGVmIE1JQ1NVUFBPUlQKIHN0YXRpYyB2b2lkIG1pY2luaXQoc3RydWN0IGFpcm9faW5mbyAqYWkpOwogc3RhdGljIGludCBtaWNzZXR1cChzdHJ1Y3QgYWlyb19pbmZvICphaSk7CiBzdGF0aWMgaW50IGVuY2Fwc3VsYXRlKHN0cnVjdCBhaXJvX2luZm8gKmFpLCBldGhlckhlYWQgKnBQYWNrZXQsIE1JQ0J1ZmZlciAqYnVmZmVyLCBpbnQgbGVuKTsKQEAgLTExMjcsOCArMTEyNSw3IEBACiBzdGF0aWMgdTggYWlyb19yc3NpX3RvX2RibSAodGRzUnNzaUVudHJ5ICpyc3NpX3JpZCwgdTggcnNzaSk7CiBzdGF0aWMgdTggYWlyb19kYm1fdG9fcGN0ICh0ZHNSc3NpRW50cnkgKnJzc2lfcmlkLCB1OCBkYm0pOwogCi0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jZW5kaWYKK3N0YXRpYyB2b2lkIGFpcm9fbmV0d29ya3NfZnJlZShzdHJ1Y3QgYWlyb19pbmZvICphaSk7CiAKIHN0cnVjdCBhaXJvX2luZm8gewogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOwpAQCAtMTE2MSw3ICsxMTU4LDcgQEAKICNkZWZpbmUgRkxBR19DT01NSVQJMTMKICNkZWZpbmUgRkxBR19SRVNFVAkxNAogI2RlZmluZSBGTEFHX0ZMQVNISU5HCTE1Ci0jZGVmaW5lIEpPQl9NQVNLCTB4MWZmMDAwMAorI2RlZmluZSBKT0JfTUFTSwkweDJmZjAwMDAKICNkZWZpbmUgSk9CX0RJRQkJMTYKICNkZWZpbmUgSk9CX1hNSVQJMTcKICNkZWZpbmUgSk9CX1hNSVQxMQkxOApAQCAtMTE3MSw2ICsxMTY4LDcgQEAKICNkZWZpbmUgSk9CX0VWRU5UCTIyCiAjZGVmaW5lIEpPQl9BVVRPV0VQCTIzCiAjZGVmaW5lIEpPQl9XU1RBVFMJMjQKKyNkZWZpbmUgSk9CX1NDQU5fUkVTVUxUUyAgMjUKIAlpbnQgKCpiYXBfcmVhZCkoc3RydWN0IGFpcm9faW5mbyosIHUxNiAqcHUxNkRzdCwgaW50IGJ5dGVsZW4sCiAJCQlpbnQgd2hpY2hiYXApOwogCXVuc2lnbmVkIHNob3J0ICpmbGFzaDsKQEAgLTExODcsMTUgKzExODUsMTMgQEAKIAl9IHhtaXQsIHhtaXQxMTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqd2lmaWRldjsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcwl3c3RhdHM7CQkvLyB3aXJlbGVzcyBzdGF0cwotCXVuc2lnbmVkIGxvbmcJCXNjYW5fdGltZXN0YW1wOwkvKiBUaW1lIHN0YXJ0ZWQgdG8gc2NhbiAqLworCXVuc2lnbmVkIGxvbmcJCXNjYW5fdGltZW91dDsJLyogVGltZSBzY2FuIHNob3VsZCBiZSByZWFkICovCiAJc3RydWN0IGl3X3NweV9kYXRhCXNweV9kYXRhOwogCXN0cnVjdCBpd19wdWJsaWNfZGF0YQl3aXJlbGVzc19kYXRhOwotI2lmZGVmIE1JQ1NVUFBPUlQKIAkvKiBNSUMgc3R1ZmYgKi8KIAlzdHJ1Y3QgY3J5cHRvX3RmbQkqdGZtOwogCW1pY19tb2R1bGUJCW1vZFsyXTsKIAltaWNfc3RhdGlzdGljcwkJbWljc3RhdHM7Ci0jZW5kaWYKIAlIb3N0UnhEZXNjIHJ4Zmlkc1tNUElfTUFYX0ZJRFNdOyAvLyByeC90eC9jb25maWcgTVBJMzUwIGRlc2NyaXB0b3JzCiAJSG9zdFR4RGVzYyB0eGZpZHNbTVBJX01BWF9GSURTXTsKIAlIb3N0UmlkRGVzYyBjb25maWdfZGVzYzsKQEAgLTEyMTEsNiArMTIwNywxMCBAQAogCUFQTGlzdFJpZAkJKkFQTGlzdDsKICNkZWZpbmUJUENJX1NIQVJFRF9MRU4JCTIqTVBJX01BWF9GSURTKlBLVFNJWkUrUklEU0laRQogCWNoYXIJCQlwcm9jX25hbWVbSUZOQU1TSVpdOworCisJc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2ZyZWVfbGlzdDsKKwlCU1NMaXN0RWxlbWVudCAqbmV0d29ya3M7CiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBiYXBfcmVhZChzdHJ1Y3QgYWlyb19pbmZvICphaSwgdTE2ICpwdTE2RHN0LCBpbnQgYnl0ZWxlbiwKQEAgLTEyMjksNyArMTIyOSwyMiBAQAogc3RhdGljIGludCBmbGFzaHB1dGJ1ZihzdHJ1Y3QgYWlyb19pbmZvICphaSk7CiBzdGF0aWMgaW50IGZsYXNocmVzdGFydChzdHJ1Y3QgYWlyb19pbmZvICphaSxzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotI2lmZGVmIE1JQ1NVUFBPUlQKKyNkZWZpbmUgYWlyb19wcmludCh0eXBlLCBuYW1lLCBmbXQsIGFyZ3MuLi4pIFwKKwl7IHByaW50ayh0eXBlICJhaXJvKCVzKTogIiBmbXQgIlxuIiwgbmFtZSwgIyNhcmdzKTsgfQorCisjZGVmaW5lIGFpcm9fcHJpbnRfaW5mbyhuYW1lLCBmbXQsIGFyZ3MuLi4pIFwKKwlhaXJvX3ByaW50KEtFUk5fSU5GTywgbmFtZSwgZm10LCAjI2FyZ3MpCisKKyNkZWZpbmUgYWlyb19wcmludF9kYmcobmFtZSwgZm10LCBhcmdzLi4uKSBcCisJYWlyb19wcmludChLRVJOX0RFQlVHLCBuYW1lLCBmbXQsICMjYXJncykKKworI2RlZmluZSBhaXJvX3ByaW50X3dhcm4obmFtZSwgZm10LCBhcmdzLi4uKSBcCisJYWlyb19wcmludChLRVJOX1dBUk5JTkcsIG5hbWUsIGZtdCwgIyNhcmdzKQorCisjZGVmaW5lIGFpcm9fcHJpbnRfZXJyKG5hbWUsIGZtdCwgYXJncy4uLikgXAorCWFpcm9fcHJpbnQoS0VSTl9FUlIsIG5hbWUsIGZtdCwgIyNhcmdzKQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSUMgUk9VVElORVMgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzMDgsNyArMTMyMyw3IEBACiAJICAgICAgICBhaS0+dGZtID0gY3J5cHRvX2FsbG9jX3RmbSgiYWVzIiwgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKTsKIAogICAgICAgICBpZiAoYWktPnRmbSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJhaXJvOiBmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yIEFFU1xuIik7CisgICAgICAgICAgICAgICAgYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgImZhaWxlZCB0byBsb2FkIHRyYW5zZm9ybSBmb3IgQUVTIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SOwogICAgICAgICB9CiAKQEAgLTE2ODYsNyArMTcwMSw2IEBACiAJZGlnZXN0WzJdID0gKHZhbD4+OCkgJiAweEZGOwogCWRpZ2VzdFszXSA9IHZhbCAmIDB4RkY7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCByZWFkQlNTTGlzdFJpZChzdHJ1Y3QgYWlyb19pbmZvICphaSwgaW50IGZpcnN0LAogCQkgICAgICBCU1NMaXN0UmlkICpsaXN0KSB7CkBAIC0xNzQxLDExICsxNzU1LDExIEBACiAJd2tyLmtpbmRleCA9IGNwdV90b19sZTE2KHdrci5raW5kZXgpOwogCXdrci5rbGVuID0gY3B1X3RvX2xlMTYod2tyLmtsZW4pOwogCXJjID0gUEM0NTAwX3dyaXRlcmlkKGFpLCBSSURfV0VQX1RFTVAsICZ3a3IsIHNpemVvZih3a3IpLCBsb2NrKTsKLQlpZiAocmMhPVNVQ0NFU1MpIHByaW50ayhLRVJOX0VSUiAiYWlybzogIFdFUF9URU1QIHNldCAleFxuIiwgcmMpOworCWlmIChyYyE9U1VDQ0VTUykgYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIldFUF9URU1QIHNldCAleCIsIHJjKTsKIAlpZiAocGVybSkgewogCQlyYyA9IFBDNDUwMF93cml0ZXJpZChhaSwgUklEX1dFUF9QRVJNLCAmd2tyLCBzaXplb2Yod2tyKSwgbG9jayk7CiAJCWlmIChyYyE9U1VDQ0VTUykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJhaXJvOiAgV0VQX1BFUk0gc2V0ICV4XG4iLCByYyk7CisJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiV0VQX1BFUk0gc2V0ICV4IiwgcmMpOwogCQl9CiAJfQogCXJldHVybiByYzsKQEAgLTE5MjQsNyArMTkzOCw3IEBACiAJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPnByaXY7CiAKIAlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgImFpcm86ICVzOiBza2I9PU5VTExcbiIsX19GVU5DVElPTl9fKTsKKwkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiJXM6IHNrYiA9PSBOVUxMISIsX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDA7CiAJfQogCW5wYWNrcyA9IHNrYl9xdWV1ZV9sZW4gKCZhaS0+dHhxKTsKQEAgLTE5NzAsOCArMTk4NCw4IEBACiAJLyogZ2V0IGEgcGFja2V0IHRvIHNlbmQgKi8KIAogCWlmICgoc2tiID0gc2tiX2RlcXVldWUoJmFpLT50eHEpKSA9PSAwKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIKLQkJCSJhaXJvOiAlczogRGVxdWV1ZSdkIHplcm8gaW4gc2VuZF9wYWNrZXQoKVxuIiwKKwkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLAorCQkJIiVzOiBEZXF1ZXVlJ2QgemVybyBpbiBzZW5kX3BhY2tldCgpIiwKIAkJCV9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTIwMDUsNyArMjAxOSw2IEBACiAJICogRmlybXdhcmUgYXV0b21hdGljbHkgcHV0cyA4MDIgaGVhZGVyIG9uIHNvCiAJICogd2UgZG9uJ3QgbmVlZCB0byBhY2NvdW50IGZvciBpdCBpbiB0aGUgbGVuZ3RoCiAJICovCi0jaWZkZWYgTUlDU1VQUE9SVAogCWlmICh0ZXN0X2JpdChGTEFHX01JQ19DQVBBQkxFLCAmYWktPmZsYWdzKSAmJiBhaS0+bWljc3RhdHMuZW5hYmxlZCAmJgogCQkobnRvaHMoKCh1MTYgKilidWZmZXIpWzZdKSAhPSAweDg4OEUpKSB7CiAJCU1JQ0J1ZmZlciBwTWljOwpAQCAtMjAyMiw5ICsyMDM1LDcgQEAKIAkJbWVtY3B5IChzZW5kYnVmLCAmcE1pYywgc2l6ZW9mKHBNaWMpKTsKIAkJc2VuZGJ1ZiArPSBzaXplb2YocE1pYyk7CiAJCW1lbWNweSAoc2VuZGJ1ZiwgYnVmZmVyLCBsZW4gLSBzaXplb2YoZXRoZXJIZWFkKSk7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7CisJfSBlbHNlIHsKIAkJKnBheWxvYWRMZW4gPSBjcHVfdG9fbGUxNihsZW4gLSBzaXplb2YoZXRoZXJIZWFkKSk7CiAKIAkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CkBAIC0yMTI2LDcgKzIxMzcsNyBAQAogCXUzMiAqZmlkcyA9IHByaXYtPmZpZHM7CiAKIAlpZiAoIHNrYiA9PSBOVUxMICkgewotCQlwcmludGsoIEtFUk5fRVJSICJhaXJvOiAgc2tiID09IE5VTEwhISFcbiIgKTsKKwkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiJXM6IHNrYiA9PSBOVUxMISIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjE5Nyw3ICsyMjA4LDcgQEAKIAl9CiAKIAlpZiAoIHNrYiA9PSBOVUxMICkgewotCQlwcmludGsoIEtFUk5fRVJSICJhaXJvOiAgc2tiID09IE5VTEwhISFcbiIgKTsKKwkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiJXM6IHNrYiA9PSBOVUxMISIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjM4Miw2ICsyMzkzLDggQEAKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CiAKKwlhaXJvX25ldHdvcmtzX2ZyZWUgKGFpKTsKKwogCWtmcmVlKGFpLT5mbGFzaCk7CiAJa2ZyZWUoYWktPnJzc2kpOwogCWtmcmVlKGFpLT5BUExpc3QpOwpAQCAtMjQwMCw5ICsyNDEzLDcgQEAKIAkJCQlhaS0+c2hhcmVkLCBhaS0+c2hhcmVkX2RtYSk7CiAJCX0KICAgICAgICAgfQotI2lmZGVmIE1JQ1NVUFBPUlQKIAljcnlwdG9fZnJlZV90Zm0oYWktPnRmbSk7Ci0jZW5kaWYKIAlkZWxfYWlyb19kZXYoIGRldiApOwogCWZyZWVfbmV0ZGV2KCBkZXYgKTsKIH0KQEAgLTI0NTQsNyArMjQ2NSw3IEBACiAJY21kLnBhcm0yID0gTVBJX01BWF9GSURTOwogCXJjPWlzc3VlY29tbWFuZChhaSwgJmNtZCwgJnJzcCk7CiAJaWYgKHJjICE9IFNVQ0NFU1MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhaXJvOiAgQ291bGRuJ3QgYWxsb2NhdGUgUlggRklEXG4iKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIkNvdWxkbid0IGFsbG9jYXRlIFJYIEZJRCIpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0yNDgyLDcgKzI0OTMsNyBAQAogCiAJcmM9aXNzdWVjb21tYW5kKGFpLCAmY21kLCAmcnNwKTsKIAlpZiAocmMgIT0gU1VDQ0VTUykgewotCQlwcmludGsoS0VSTl9FUlIgImFpcm86ICBDb3VsZG4ndCBhbGxvY2F0ZSBUWCBGSURcbiIpOworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQ291bGRuJ3QgYWxsb2NhdGUgVFggRklEIik7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTI0OTYsNyArMjUwNyw3IEBACiAJY21kLnBhcm0yID0gMTsgLyogTWFnaWMgbnVtYmVyLi4uICovCiAJcmM9aXNzdWVjb21tYW5kKGFpLCAmY21kLCAmcnNwKTsKIAlpZiAocmMgIT0gU1VDQ0VTUykgewotCQlwcmludGsoS0VSTl9FUlIgImFpcm86ICBDb3VsZG4ndCBhbGxvY2F0ZSBSSURcbiIpOworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQ291bGRuJ3QgYWxsb2NhdGUgUklEIik7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTI1MjgsMjUgKzI1MzksMjUgQEAKIAlhdXhfbGVuID0gQVVYTUVNU0laRTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbV9zdGFydCwgbWVtX2xlbiwgbmFtZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhaXJvOiBDb3VsZG4ndCBnZXQgcmVnaW9uICV4WyV4XSBmb3IgJXNcbiIsCisJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJDb3VsZG4ndCBnZXQgcmVnaW9uICV4WyV4XSBmb3IgJXMiLAogCQkgICAgICAgKGludCltZW1fc3RhcnQsIChpbnQpbWVtX2xlbiwgbmFtZSk7CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihhdXhfc3RhcnQsIGF1eF9sZW4sIG5hbWUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWlybzogQ291bGRuJ3QgZ2V0IHJlZ2lvbiAleFsleF0gZm9yICVzXG4iLAorCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQ291bGRuJ3QgZ2V0IHJlZ2lvbiAleFsleF0gZm9yICVzIiwKIAkJICAgICAgIChpbnQpYXV4X3N0YXJ0LCAoaW50KWF1eF9sZW4sIG5hbWUpOwogCQlnb3RvIGZyZWVfcmVnaW9uMTsKIAl9CiAKIAlhaS0+cGNpbWVtID0gaW9yZW1hcChtZW1fc3RhcnQsIG1lbV9sZW4pOwogCWlmICghYWktPnBjaW1lbSkgewotCQlwcmludGsoS0VSTl9FUlIgImFpcm86IENvdWxkbid0IG1hcCByZWdpb24gJXhbJXhdIGZvciAlc1xuIiwKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIkNvdWxkbid0IG1hcCByZWdpb24gJXhbJXhdIGZvciAlcyIsCiAJCSAgICAgICAoaW50KW1lbV9zdGFydCwgKGludCltZW1fbGVuLCBuYW1lKTsKIAkJZ290byBmcmVlX3JlZ2lvbjI7CiAJfQogCWFpLT5wY2lhdXggPSBpb3JlbWFwKGF1eF9zdGFydCwgYXV4X2xlbik7CiAJaWYgKCFhaS0+cGNpYXV4KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWlybzogQ291bGRuJ3QgbWFwIHJlZ2lvbiAleFsleF0gZm9yICVzXG4iLAorCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQ291bGRuJ3QgbWFwIHJlZ2lvbiAleFsleF0gZm9yICVzIiwKIAkJICAgICAgIChpbnQpYXV4X3N0YXJ0LCAoaW50KWF1eF9sZW4sIG5hbWUpOwogCQlnb3RvIGZyZWVfbWVtbWFwOwogCX0KQEAgLTI1NTQsNyArMjU2NSw3IEBACiAJLyogUmVzZXJ2ZSBQS1RTSVpFIGZvciBlYWNoIGZpZCBhbmQgMksgZm9yIHRoZSBSaWRzICovCiAJYWktPnNoYXJlZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaSwgUENJX1NIQVJFRF9MRU4sICZhaS0+c2hhcmVkX2RtYSk7CiAJaWYgKCFhaS0+c2hhcmVkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWlybzogQ291bGRuJ3QgYWxsb2NfY29uc2lzdGVudCAlZFxuIiwKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIkNvdWxkbid0IGFsbG9jX2NvbnNpc3RlbnQgJWQiLAogCQkgICAgICAgUENJX1NIQVJFRF9MRU4pOwogCQlnb3RvIGZyZWVfYXV4bWFwOwogCX0KQEAgLTI2NDYsNyArMjY1Nyw3IEBACiAKIAlkZXYtPnR5cGUgICAgICAgICAgICAgICA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gICAgPSBFVEhfSExFTjsKLQlkZXYtPm10dSAgICAgICAgICAgICAgICA9IDIzMTI7CisJZGV2LT5tdHUgICAgICAgICAgICAgICAgPSBBSVJPX0RFRl9NVFU7CiAJZGV2LT5hZGRyX2xlbiAgICAgICAgICAgPSBFVEhfQUxFTjsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgICAgICA9IDEwMDsgCiAKQEAgLTI2OTAsNiArMjcwMSw0MiBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIE1BWF9ORVRXT1JLX0NPVU5UCTY0CitzdGF0aWMgaW50IGFpcm9fbmV0d29ya3NfYWxsb2NhdGUoc3RydWN0IGFpcm9faW5mbyAqYWkpCit7CisJaWYgKGFpLT5uZXR3b3JrcykKKwkJcmV0dXJuIDA7CisKKwlhaS0+bmV0d29ya3MgPQorCSAgICBremFsbG9jKE1BWF9ORVRXT1JLX0NPVU5UICogc2l6ZW9mKEJTU0xpc3RFbGVtZW50KSwKKwkJICAgIEdGUF9LRVJORUwpOworCWlmICghYWktPm5ldHdvcmtzKSB7CisJCWFpcm9fcHJpbnRfd2FybihhaS0+ZGV2LT5uYW1lLCAiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGJlYWNvbnMiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFpcm9fbmV0d29ya3NfZnJlZShzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwlpZiAoIWFpLT5uZXR3b3JrcykKKwkJcmV0dXJuOworCWtmcmVlKGFpLT5uZXR3b3Jrcyk7CisJYWktPm5ldHdvcmtzID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYWlyb19uZXR3b3Jrc19pbml0aWFsaXplKHN0cnVjdCBhaXJvX2luZm8gKmFpKQoreworCWludCBpOworCisJSU5JVF9MSVNUX0hFQUQoJmFpLT5uZXR3b3JrX2ZyZWVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmFpLT5uZXR3b3JrX2xpc3QpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTkVUV09SS19DT1VOVDsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZhaS0+bmV0d29ya3NbaV0ubGlzdCwKKwkJCSAgICAgICZhaS0+bmV0d29ya19mcmVlX2xpc3QpOworfQorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKl9pbml0X2Fpcm9fY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCBpbnQgcG9ydCwKIAkJCQkJICAgaW50IGlzX3BjbWNpYSwgc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkJICAgc3RydWN0IGRldmljZSAqZG1kZXYgKQpAQCAtMjcwMSwyMiArMjc0OCwyMiBAQAogCS8qIENyZWF0ZSB0aGUgbmV0d29yayBkZXZpY2Ugb2JqZWN0LiAqLwogICAgICAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmFpKSk7CiAgICAgICAgIGlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWlybzogIENvdWxkbid0IGFsbG9jX2V0aGVyZGV2XG4iKTsKKwkJYWlyb19wcmludF9lcnIoIiIsICJDb3VsZG4ndCBhbGxvY19ldGhlcmRldiIpOwogCQlyZXR1cm4gTlVMTDsKICAgICAgICAgfQogCWlmIChkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWlybzogIENvdWxkbid0IGdldCBuYW1lIVxuIik7CisJCWFpcm9fcHJpbnRfZXJyKCIiLCAiQ291bGRuJ3QgZ2V0IG5hbWUhIik7CiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KIAogCWFpID0gZGV2LT5wcml2OwogCWFpLT53aWZpZGV2ID0gTlVMTDsKIAlhaS0+ZmxhZ3MgPSAwOworCWFpLT5kZXYgPSBkZXY7CiAJaWYgKHBjaSAmJiAocGNpLT5kZXZpY2UgPT0gMHg1MDAwIHx8IHBjaS0+ZGV2aWNlID09IDB4YTUwNCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImFpcm86IEZvdW5kIGFuIE1QSTM1MCBjYXJkXG4iKTsKKwkJYWlyb19wcmludF9kYmcoZGV2LT5uYW1lLCAiRm91bmQgYW4gTVBJMzUwIGNhcmQiKTsKIAkJc2V0X2JpdChGTEFHX01QSSwgJmFpLT5mbGFncyk7CiAJfQotICAgICAgICBhaS0+ZGV2ID0gZGV2OwogCXNwaW5fbG9ja19pbml0KCZhaS0+YXV4X2xvY2spOwogCXNlbWFfaW5pdCgmYWktPnNlbSwgMSk7CiAJYWktPmNvbmZpZy5sZW4gPSAwOwpAQCAtMjcyNiwxMyArMjc3MywxNSBAQAogCWFpLT50aHJfcGlkID0ga2VybmVsX3RocmVhZChhaXJvX3RocmVhZCwgZGV2LCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTKTsKIAlpZiAoYWktPnRocl9waWQgPCAwKQogCQlnb3RvIGVycl9vdXRfZnJlZTsKLSNpZmRlZiBNSUNTVVBQT1JUCiAJYWktPnRmbSA9IE5VTEw7Ci0jZW5kaWYKIAlyYyA9IGFkZF9haXJvX2RldiggZGV2ICk7CiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXRfdGhyOwogCisJaWYgKGFpcm9fbmV0d29ya3NfYWxsb2NhdGUgKGFpKSkKKwkJZ290byBlcnJfb3V0X3VubGluazsKKwlhaXJvX25ldHdvcmtzX2luaXRpYWxpemUgKGFpKTsKKwogCS8qIFRoZSBBaXJvLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCiAJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKSB7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKQEAgLTI3NTQsMzMgKzI4MDMsMzMgQEAKIAogCVNFVF9ORVRERVZfREVWKGRldiwgZG1kZXYpOwogCi0KIAlyZXNldF9jYXJkIChkZXYsIDEpOwogCW1zbGVlcCg0MDApOwogCiAJcmMgPSByZXF1ZXN0X2lycSggZGV2LT5pcnEsIGFpcm9faW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYgKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhaXJvOiByZWdpc3RlciBpbnRlcnJ1cHQgJWQgZmFpbGVkLCByYyAlZFxuIiwgaXJxLCByYyApOworCQlhaXJvX3ByaW50X2VycihkZXYtPm5hbWUsICJyZWdpc3RlciBpbnRlcnJ1cHQgJWQgZmFpbGVkLCByYyAlZCIsCisJCQkJaXJxLCByYyk7CiAJCWdvdG8gZXJyX291dF91bmxpbms7CiAJfQogCWlmICghaXNfcGNtY2lhKSB7CiAJCWlmICghcmVxdWVzdF9yZWdpb24oIGRldi0+YmFzZV9hZGRyLCA2NCwgZGV2LT5uYW1lICkpIHsKIAkJCXJjID0gLUVCVVNZOwotCQkJcHJpbnRrKEtFUk5fRVJSICJhaXJvOiBDb3VsZG4ndCByZXF1ZXN0IHJlZ2lvblxuIik7CisJCQlhaXJvX3ByaW50X2VycihkZXYtPm5hbWUsICJDb3VsZG4ndCByZXF1ZXN0IHJlZ2lvbiIpOwogCQkJZ290byBlcnJfb3V0X2lycTsKIAkJfQogCX0KIAogCWlmICh0ZXN0X2JpdChGTEFHX01QSSwmYWktPmZsYWdzKSkgewogCQlpZiAobXBpX21hcF9jYXJkKGFpLCBwY2ksIGRldi0+bmFtZSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYWlybzogQ291bGQgbm90IG1hcCBtZW1vcnlcbiIpOworCQkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiQ291bGQgbm90IG1hcCBtZW1vcnkiKTsKIAkJCWdvdG8gZXJyX291dF9yZXM7CiAJCX0KIAl9CiAKIAlpZiAocHJvYmUpIHsKIAkJaWYgKCBzZXR1cF9jYXJkKCBhaSwgZGV2LT5kZXZfYWRkciwgMSApICE9IFNVQ0NFU1MgKSB7Ci0JCQlwcmludGsoIEtFUk5fRVJSICJhaXJvOiBNQUMgY291bGQgbm90IGJlIGVuYWJsZWRcbiIgKTsKKwkJCWFpcm9fcHJpbnRfZXJyKGRldi0+bmFtZSwgIk1BQyBjb3VsZCBub3QgYmUgZW5hYmxlZCIgKTsKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gZXJyX291dF9tYXA7CiAJCX0KQEAgLTI3OTEsMjEgKzI4NDAsMjAgQEAKIAogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWlybzogQ291bGRuJ3QgcmVnaXN0ZXJfbmV0ZGV2XG4iKTsKKwkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiQ291bGRuJ3QgcmVnaXN0ZXJfbmV0ZGV2Iik7CiAJCWdvdG8gZXJyX291dF9tYXA7CiAJfQogCWFpLT53aWZpZGV2ID0gaW5pdF93aWZpZGV2KGFpLCBkZXYpOwogCiAJc2V0X2JpdChGTEFHX1JFR0lTVEVSRUQsJmFpLT5mbGFncyk7Ci0JcHJpbnRrKCBLRVJOX0lORk8gImFpcm86IE1BQyBlbmFibGVkICVzICV4OiV4OiV4OiV4OiV4OiV4XG4iLAotCQlkZXYtPm5hbWUsCisJYWlyb19wcmludF9pbmZvKGRldi0+bmFtZSwgIk1BQyBlbmFibGVkICV4OiV4OiV4OiV4OiV4OiV4IiwKIAkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKIAkJZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSApOwogCiAJLyogQWxsb2NhdGUgdGhlIHRyYW5zbWl0IGJ1ZmZlcnMgKi8KIAlpZiAocHJvYmUgJiYgIXRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKQogCQlmb3IoIGkgPSAwOyBpIDwgTUFYX0ZJRFM7IGkrKyApCi0JCQlhaS0+Zmlkc1tpXSA9IHRyYW5zbWl0X2FsbG9jYXRlKGFpLDIzMTIsaT49TUFYX0ZJRFMvMik7CisJCQlhaS0+Zmlkc1tpXSA9IHRyYW5zbWl0X2FsbG9jYXRlKGFpLEFJUk9fREVGX01UVSxpPj1NQVhfRklEUy8yKTsKIAogCXNldHVwX3Byb2NfZW50cnkoIGRldiwgZGV2LT5wcml2ICk7IC8qIFhYWCBjaGVjayBmb3IgZmFpbHVyZSAqLwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CkBAIC0yODYyLDE2ICsyOTEwLDE2IEBACiAJCXJldHVybiAtMTsKIAogCWlmICggc2V0dXBfY2FyZChhaSwgZGV2LT5kZXZfYWRkciwgMSApICE9IFNVQ0NFU1MgKSB7Ci0JCXByaW50ayggS0VSTl9FUlIgImFpcm86IE1BQyBjb3VsZCBub3QgYmUgZW5hYmxlZFxuIiApOworCQlhaXJvX3ByaW50X2VycihkZXYtPm5hbWUsICJNQUMgY291bGQgbm90IGJlIGVuYWJsZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlwcmludGsoIEtFUk5fSU5GTyAiYWlybzogTUFDIGVuYWJsZWQgJXMgJXg6JXg6JXg6JXg6JXg6JXhcbiIsIGRldi0+bmFtZSwKKwlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiTUFDIGVuYWJsZWQgJXg6JXg6JXg6JXg6JXg6JXgiLAogCQkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKIAkJCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOwogCS8qIEFsbG9jYXRlIHRoZSB0cmFuc21pdCBidWZmZXJzIGlmIG5lZWRlZCAqLwogCWlmICghdGVzdF9iaXQoRkxBR19NUEksJmFpLT5mbGFncykpCiAJCWZvciggaSA9IDA7IGkgPCBNQVhfRklEUzsgaSsrICkKLQkJCWFpLT5maWRzW2ldID0gdHJhbnNtaXRfYWxsb2NhdGUgKGFpLDIzMTIsaT49TUFYX0ZJRFMvMik7CisJCQlhaS0+Zmlkc1tpXSA9IHRyYW5zbWl0X2FsbG9jYXRlIChhaSxBSVJPX0RFRl9NVFUsaT49TUFYX0ZJRFMvMik7CiAKIAllbmFibGVfaW50ZXJydXB0cyggYWkgKTsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CkBAIC0yODk3LDYgKzI5NDUsNjUgQEAKIAl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFpcm9fcHJvY2Vzc19zY2FuX3Jlc3VsdHMgKHN0cnVjdCBhaXJvX2luZm8gKmFpKSB7CisJdW5pb24gaXdyZXFfZGF0YQl3cnF1OworCUJTU0xpc3RSaWQgQlNTTGlzdDsKKwlpbnQgcmM7CisJQlNTTGlzdEVsZW1lbnQgKiBsb29wX25ldDsKKwlCU1NMaXN0RWxlbWVudCAqIHRtcF9uZXQ7CisKKwkvKiBCbG93IGF3YXkgY3VycmVudCBsaXN0IG9mIHNjYW4gcmVzdWx0cyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAobG9vcF9uZXQsIHRtcF9uZXQsICZhaS0+bmV0d29ya19saXN0LCBsaXN0KSB7CisJCWxpc3RfbW92ZV90YWlsICgmbG9vcF9uZXQtPmxpc3QsICZhaS0+bmV0d29ya19mcmVlX2xpc3QpOworCQkvKiBEb24ndCBibG93IGF3YXkgLT5saXN0LCBqdXN0IEJTUyBkYXRhICovCisJCW1lbXNldCAobG9vcF9uZXQsIDAsIHNpemVvZiAobG9vcF9uZXQtPmJzcykpOworCX0KKworCS8qIFRyeSB0byByZWFkIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgc2NhbiByZXN1bHQgKi8KKwlyYyA9IFBDNDUwMF9yZWFkcmlkKGFpLCBSSURfQlNTTElTVEZJUlNULCAmQlNTTGlzdCwgc2l6ZW9mKEJTU0xpc3QpLCAwKTsKKwlpZigocmMpIHx8IChCU1NMaXN0LmluZGV4ID09IDB4ZmZmZikpIHsKKwkJLyogTm8gc2NhbiByZXN1bHRzICovCisJCWdvdG8gb3V0OworCX0KKworCS8qIFJlYWQgYW5kIHBhcnNlIGFsbCBlbnRyaWVzICovCisJdG1wX25ldCA9IE5VTEw7CisJd2hpbGUoKCFyYykgJiYgKEJTU0xpc3QuaW5kZXggIT0gMHhmZmZmKSkgeworCQkvKiBHcmFiIGEgbmV0d29yayBvZmYgdGhlIGZyZWUgbGlzdCAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmFpLT5uZXR3b3JrX2ZyZWVfbGlzdCkpIHsKKwkJCXRtcF9uZXQgPSBsaXN0X2VudHJ5KGFpLT5uZXR3b3JrX2ZyZWVfbGlzdC5uZXh0LAorCQkJCQkgICAgQlNTTGlzdEVsZW1lbnQsIGxpc3QpOworCQkJbGlzdF9kZWwoYWktPm5ldHdvcmtfZnJlZV9saXN0Lm5leHQpOworCQl9CisKKwkJaWYgKHRtcF9uZXQgIT0gTlVMTCkgeworCQkJbWVtY3B5KHRtcF9uZXQsICZCU1NMaXN0LCBzaXplb2YodG1wX25ldC0+YnNzKSk7CisJCQlsaXN0X2FkZF90YWlsKCZ0bXBfbmV0LT5saXN0LCAmYWktPm5ldHdvcmtfbGlzdCk7CisJCQl0bXBfbmV0ID0gTlVMTDsKKwkJfQorCisJCS8qIFJlYWQgbmV4dCBlbnRyeSAqLworCQlyYyA9IFBDNDUwMF9yZWFkcmlkKGFpLCBSSURfQlNTTElTVE5FWFQsCisJCQkJICAgICZCU1NMaXN0LCBzaXplb2YoQlNTTGlzdCksIDApOworCX0KKworb3V0OgorCWFpLT5zY2FuX3RpbWVvdXQgPSAwOworCWNsZWFyX2JpdChKT0JfU0NBTl9SRVNVTFRTLCAmYWktPmZsYWdzKTsKKwl1cCgmYWktPnNlbSk7CisKKwkvKiBTZW5kIGFuIGVtcHR5IGV2ZW50IHRvIHVzZXIgc3BhY2UuCisJICogV2UgZG9uJ3Qgc2VuZCB0aGUgcmVjZWl2ZWQgZGF0YSBvbgorCSAqIHRoZSBldmVudCBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUKKwkgKiB1cyB0byBkbyBjb21wbGV4IHRyYW5zY29kaW5nLCBhbmQKKwkgKiB3ZSB3YW50IHRvIG1pbmltaXNlIHRoZSB3b3JrIGRvbmUgaW4KKwkgKiB0aGUgaXJxIGhhbmRsZXIuIFVzZSBhIHJlcXVlc3QgdG8KKwkgKiBleHRyYWN0IHRoZSBkYXRhIC0gSmVhbiBJSSAqLworCXdycXUuZGF0YS5sZW5ndGggPSAwOworCXdycXUuZGF0YS5mbGFncyA9IDA7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChhaS0+ZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworfQorCiBzdGF0aWMgaW50IGFpcm9fdGhyZWFkKHZvaWQgKmRhdGEpIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaSA9IGRldi0+cHJpdjsKQEAgLTI5MjYsMTMgKzMwMzMsMjYgQEAKIAkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJCWlmIChhaS0+ZmxhZ3MgJiBKT0JfTUFTSykKIAkJCQkJYnJlYWs7Ci0JCQkJaWYgKGFpLT5leHBpcmVzKSB7Ci0JCQkJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsYWktPmV4cGlyZXMpKXsKKwkJCQlpZiAoYWktPmV4cGlyZXMgfHwgYWktPnNjYW5fdGltZW91dCkgeworCQkJCQlpZiAoYWktPnNjYW5fdGltZW91dCAmJgorCQkJCQkJCXRpbWVfYWZ0ZXJfZXEoamlmZmllcyxhaS0+c2Nhbl90aW1lb3V0KSl7CisJCQkJCQlzZXRfYml0KEpPQl9TQ0FOX1JFU1VMVFMsJmFpLT5mbGFncyk7CisJCQkJCQlicmVhazsKKwkJCQkJfSBlbHNlIGlmIChhaS0+ZXhwaXJlcyAmJgorCQkJCQkJCXRpbWVfYWZ0ZXJfZXEoamlmZmllcyxhaS0+ZXhwaXJlcykpewogCQkJCQkJc2V0X2JpdChKT0JfQVVUT1dFUCwmYWktPmZsYWdzKTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQkJCXNjaGVkdWxlX3RpbWVvdXQoYWktPmV4cGlyZXMgLSBqaWZmaWVzKTsKKwkJCQkJCXVuc2lnbmVkIGxvbmcgd2FrZV9hdDsKKwkJCQkJCWlmICghYWktPmV4cGlyZXMgfHwgIWFpLT5zY2FuX3RpbWVvdXQpIHsKKwkJCQkJCQl3YWtlX2F0ID0gbWF4KGFpLT5leHBpcmVzLAorCQkJCQkJCQlhaS0+c2Nhbl90aW1lb3V0KTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJd2FrZV9hdCA9IG1pbihhaS0+ZXhwaXJlcywKKwkJCQkJCQkJYWktPnNjYW5fdGltZW91dCk7CisJCQkJCQl9CisJCQkJCQlzY2hlZHVsZV90aW1lb3V0KHdha2VfYXQgLSBqaWZmaWVzKTsKIAkJCQkJCWNvbnRpbnVlOwogCQkJCQl9CiAJCQkJfSBlbHNlIGlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKQEAgLTI5NjksMTQgKzMwODksMTYgQEAKIAkJCWFpcm9fcmVhZF93aXJlbGVzc19zdGF0cyhhaSk7CiAJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9QUk9NSVNDLCAmYWktPmZsYWdzKSkKIAkJCWFpcm9fc2V0X3Byb21pc2MoYWkpOwotI2lmZGVmIE1JQ1NVUFBPUlQKIAkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX01JQywgJmFpLT5mbGFncykpCiAJCQltaWNpbml0KGFpKTsKLSNlbmRpZgogCQllbHNlIGlmICh0ZXN0X2JpdChKT0JfRVZFTlQsICZhaS0+ZmxhZ3MpKQogCQkJYWlyb19zZW5kX2V2ZW50KGRldik7CiAJCWVsc2UgaWYgKHRlc3RfYml0KEpPQl9BVVRPV0VQLCAmYWktPmZsYWdzKSkKIAkJCXRpbWVyX2Z1bmMoZGV2KTsKKwkJZWxzZSBpZiAodGVzdF9iaXQoSk9CX1NDQU5fUkVTVUxUUywgJmFpLT5mbGFncykpCisJCQlhaXJvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKGFpKTsKKwkJZWxzZSAgLyogU2hvdWxkbid0IGdldCBoZXJlLCBidXQgd2UgbWFrZSBzdXJlIHRvIHVubG9jayAqLworCQkJdXAoJmFpLT5zZW0pOwogCX0KIAljb21wbGV0ZV9hbmRfZXhpdCAoJmFpLT50aHJfZXhpdGVkLCAwKTsKIH0KQEAgLTMwMTAsMTIgKzMxMzIsMTAgQEAKIAogCQlpZiAoIHN0YXR1cyAmIEVWX01JQyApIHsKIAkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfTUlDICk7Ci0jaWZkZWYgTUlDU1VQUE9SVAogCQkJaWYgKHRlc3RfYml0KEZMQUdfTUlDX0NBUEFCTEUsICZhcHJpdi0+ZmxhZ3MpKSB7CiAJCQkJc2V0X2JpdChKT0JfTUlDLCAmYXByaXYtPmZsYWdzKTsKIAkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwcml2LT50aHJfd2FpdCk7CiAJCQl9Ci0jZW5kaWYKIAkJfQogCQlpZiAoIHN0YXR1cyAmIEVWX0xJTksgKSB7CiAJCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7CkBAIC0zMDczLDE5ICszMTkzLDE1IEBACiAJCQkgKiBhbmQgcmVhc3NvY2lhdGlvbnMgYXMgdmFsaWQgc3RhdHVzCiAJCQkgKiBKZWFuIElJICovCiAJCQlpZihuZXdTdGF0dXMgPT0gQVNTT0NJQVRFRCkgewotCQkJCWlmIChhcHJpdi0+c2Nhbl90aW1lc3RhbXApIHsKLQkJCQkJLyogU2VuZCBhbiBlbXB0eSBldmVudCB0byB1c2VyIHNwYWNlLgotCQkJCQkgKiBXZSBkb24ndCBzZW5kIHRoZSByZWNlaXZlZCBkYXRhIG9uCi0JCQkJCSAqIHRoZSBldmVudCBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUKLQkJCQkJICogdXMgdG8gZG8gY29tcGxleCB0cmFuc2NvZGluZywgYW5kCi0JCQkJCSAqIHdlIHdhbnQgdG8gbWluaW1pc2UgdGhlIHdvcmsgZG9uZSBpbgotCQkJCQkgKiB0aGUgaXJxIGhhbmRsZXIuIFVzZSBhIHJlcXVlc3QgdG8KLQkJCQkJICogZXh0cmFjdCB0aGUgZGF0YSAtIEplYW4gSUkgKi8KLQkJCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7Ci0JCQkJCXdycXUuZGF0YS5mbGFncyA9IDA7Ci0JCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOwotCQkJCQlhcHJpdi0+c2Nhbl90aW1lc3RhbXAgPSAwOworI2lmIDAKKwkJCQkvKiBGSVhNRTogR3JhYmJpbmcgc2NhbiByZXN1bHRzIGhlcmUKKwkJCQkgKiBzZWVtcyB0byBiZSB0b28gZWFybHk/Pz8gIEp1c3Qgd2FpdCBmb3IKKwkJCQkgKiB0aW1lb3V0IGluc3RlYWQuICovCisJCQkJaWYgKGFwcml2LT5zY2FuX3RpbWVvdXQgPiAwKSB7CisJCQkJCXNldF9iaXQoSk9CX1NDQU5fUkVTVUxUUywgJmFwcml2LT5mbGFncyk7CisJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKIAkJCQl9CisjZW5kaWYKIAkJCQlpZiAoZG93bl90cnlsb2NrKCZhcHJpdi0+c2VtKSAhPSAwKSB7CiAJCQkJCXNldF9iaXQoSk9CX0VWRU5ULCAmYXByaXYtPmZsYWdzKTsKIAkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhcHJpdi0+dGhyX3dhaXQpOwpAQCAtMzE0Myw4ICszMjU5LDggQEAKIAkJCX0KIAkJCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOwogCi0JCQlpZiAobGVuID4gMjMxMikgewotCQkJCXByaW50ayggS0VSTl9FUlIgImFpcm86IEJhZCBzaXplICVkXG4iLCBsZW4gKTsKKwkJCWlmIChsZW4gPiBBSVJPX0RFRl9NVFUpIHsKKwkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiQmFkIHNpemUgJWQiLCBsZW4pOwogCQkJCWdvdG8gYmFkcng7CiAJCQl9CiAJCQlpZiAobGVuID09IDApCkBAIC0zMTg3LDE4ICszMzAzLDE3IEBACiAJCQkJYmFwX3JlYWQgKGFwcml2LCAmZ2FwLCBzaXplb2YoZ2FwKSwgQkFQMCk7CiAJCQkJZ2FwID0gbGUxNl90b19jcHUoZ2FwKTsKIAkJCQlpZiAoZ2FwKSB7Ci0JCQkJCWlmIChnYXAgPD0gOCkKKwkJCQkJaWYgKGdhcCA8PSA4KSB7CiAJCQkJCQliYXBfcmVhZCAoYXByaXYsIHRtcGJ1ZiwgZ2FwLCBCQVAwKTsKLQkJCQkJZWxzZQotCQkJCQkJcHJpbnRrKEtFUk5fRVJSICJhaXJvOiBnYXBsZW4gdG9vIGJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi5cbiIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJYWlyb19wcmludF9lcnIoYXByaXYtPmRldi0+bmFtZSwgImdhcGxlbiB0b28gIgorCQkJCQkJCSJiaWcuIFByb2JsZW1zIHdpbGwgZm9sbG93Li4uIik7CisJCQkJCX0KIAkJCQl9CiAJCQkJYmFwX3JlYWQgKGFwcml2LCBidWZmZXIgKyBoZHJsZW4vMiwgbGVuLCBCQVAwKTsKIAkJCX0gZWxzZSB7Ci0jaWZkZWYgTUlDU1VQUE9SVAogCQkJCU1JQ0J1ZmZlciBtaWNidWY7Ci0jZW5kaWYKIAkJCQliYXBfcmVhZCAoYXByaXYsIGJ1ZmZlciwgRVRIX0FMRU4qMiwgQkFQMCk7Ci0jaWZkZWYgTUlDU1VQUE9SVAogCQkJCWlmIChhcHJpdi0+bWljc3RhdHMuZW5hYmxlZCkgewogCQkJCQliYXBfcmVhZCAoYXByaXYsKHUxNiopJm1pY2J1ZixzaXplb2YobWljYnVmKSxCQVAwKTsKIAkJCQkJaWYgKG50b2hzKG1pY2J1Zi50eXBlbGVuKSA+IDB4MDVEQykKQEAgLTMyMTEsMTUgKzMzMjYsMTAgQEAKIAkJCQkJCXNrYl90cmltIChza2IsIGxlbiArIGhkcmxlbik7CiAJCQkJCX0KIAkJCQl9Ci0jZW5kaWYKIAkJCQliYXBfcmVhZChhcHJpdixidWZmZXIrRVRIX0FMRU4sbGVuLEJBUDApOwotI2lmZGVmIE1JQ1NVUFBPUlQKIAkJCQlpZiAoZGVjYXBzdWxhdGUoYXByaXYsJm1pY2J1ZiwoZXRoZXJIZWFkKilidWZmZXIsbGVuKSkgewogYmFkbWljOgogCQkJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKLSNlbHNlCi0JCQkJaWYgKDApIHsKLSNlbmRpZgogYmFkcng6CiAJCQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfUlgpOwogCQkJCQlnb3RvIGV4aXRyeDsKQEAgLTMzMTUsMTIgKzM0MjUsMTMgQEAKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhDUFkgfCBFVl9UWEVYQykpOwotCQkJCXByaW50ayggS0VSTl9FUlIgImFpcm86IFVuYWxsb2NhdGVkIEZJRCB3YXMgdXNlZCB0byB4bWl0XG4iICk7CisJCQkJYWlyb19wcmludF9lcnIoYXByaXYtPmRldi0+bmFtZSwgIlVuYWxsb2NhdGVkIEZJRCB3YXMgIgorCQkJCQkidXNlZCB0byB4bWl0IiApOwogCQkJfQogCQl9CiBleGl0dHg6CiAJCWlmICggc3RhdHVzICYgflNUQVRVU19JTlRTICYgfklHTk9SRV9JTlRTICkKLQkJCXByaW50ayggS0VSTl9XQVJOSU5HICJhaXJvOiBHb3Qgd2VpcmQgc3RhdHVzICV4XG4iLAorCQkJYWlyb19wcmludF93YXJuKGFwcml2LT5kZXYtPm5hbWUsICJHb3Qgd2VpcmQgc3RhdHVzICV4IiwKIAkJCQlzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKTsKIAl9CiAKQEAgLTMzOTMsOCArMzUwNCw4IEBACiAJICAgIHVwKCZhaS0+c2VtKTsKIAogCWlmIChyYykKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGVuYWJsZSBNQUMsIGVycj0lZFxuIiwKLQkJCV9fRlVOQ1RJT05fXyxyYyk7CisJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICIlczogQ2Fubm90IGVuYWJsZSBNQUMsIGVycj0lZCIsCisJCQlfX0ZVTkNUSU9OX18sIHJjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTM0MzAsMTAgKzM1NDEsOCBAQAogCWludCBsZW4gPSAwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJY2hhciAqYnVmZmVyOwotI2lmZGVmIE1JQ1NVUFBPUlQKIAlpbnQgb2ZmID0gMDsKIAlNSUNCdWZmZXIgbWljYnVmOwotI2VuZGlmCiAKIAltZW1jcHlfZnJvbWlvKCZyeGQsIGFpLT5yeGZpZHNbMF0uY2FyZF9yYW1fb2ZmLCBzaXplb2YocnhkKSk7CiAJLyogTWFrZSBzdXJlIHdlIGdvdCBzb21ldGhpbmcgKi8KQEAgLTM0NDgsNyArMzU1Nyw2IEBACiAJCQlnb3RvIGJhZHJ4OwogCQl9CiAJCWJ1ZmZlciA9IHNrYl9wdXQoc2tiLGxlbik7Ci0jaWZkZWYgTUlDU1VQUE9SVAogCQltZW1jcHkoYnVmZmVyLCBhaS0+cnhmaWRzWzBdLnZpcnR1YWxfaG9zdF9hZGRyLCBFVEhfQUxFTiAqIDIpOwogCQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKIAkJCW1lbWNweSgmbWljYnVmLApAQCAtMzQ3MCw5ICszNTc4LDYgQEAKIAkJCWRldl9rZnJlZV9za2JfaXJxIChza2IpOwogCQkJZ290byBiYWRyeDsKIAkJfQotI2Vsc2UKLQkJbWVtY3B5KGJ1ZmZlciwgYWktPnJ4Zmlkc1swXS52aXJ0dWFsX2hvc3RfYWRkciwgbGVuKTsKLSNlbmRpZgogI2lmZGVmIFdJUkVMRVNTX1NQWQogCQlpZiAoYWktPnNweV9kYXRhLnNweV9udW1iZXIgPiAwKSB7CiAJCQljaGFyICpzYTsKQEAgLTM1MjksOCArMzYzNCw4IEBACiAJaWYgKGFpLT53aWZpZGV2ID09IE5VTEwpCiAJCWhkci5sZW4gPSAwOwogCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOwotCWlmIChsZW4gPiAyMzEyKSB7Ci0JCXByaW50ayggS0VSTl9FUlIgImFpcm86IEJhZCBzaXplICVkXG4iLCBsZW4gKTsKKwlpZiAobGVuID4gQUlST19ERUZfTVRVKSB7CisJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJCYWQgc2l6ZSAlZCIsIGxlbik7CiAJCWdvdG8gYmFkcng7CiAJfQogCWlmIChsZW4gPT0gMCkKQEAgLTM1NzEsOCArMzY3Niw4IEBACiAJCWlmIChnYXAgPD0gOCkKIAkJCXB0ciArPSBnYXA7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICJhaXJvOiBnYXBsZW4gdG9vIGJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi5cbiIpOworCQkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwKKwkJCSAgICAiZ2FwbGVuIHRvbyBiaWcuIFByb2JsZW1zIHdpbGwgZm9sbG93Li4uIik7CiAJfQogCW1lbWNweSAoKGNoYXIgKilidWZmZXIgKyBoZHJsZW4sIHB0ciwgbGVuKTsKIAlwdHIgKz0gbGVuOwpAQCAtMzY0NCwxNSArMzc0OSwxNSBAQAogCQlpZiAoaXNzdWVjb21tYW5kKGFpLCAmY21kLCAmcnNwKSAhPSBTVUNDRVNTKSB7CiAJCQlpZiAobG9jaykKIAkJCQl1cCgmYWktPnNlbSk7Ci0JCQlwcmludGsoS0VSTl9FUlIgImFpcm86IEVycm9yIGNoZWNraW5nIGZvciBBVVggcG9ydFxuIik7CisJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiRXJyb3IgY2hlY2tpbmcgZm9yIEFVWCBwb3J0Iik7CiAJCQlyZXR1cm4gRVJST1I7CiAJCX0KIAkJaWYgKCFhdXhfYmFwIHx8IHJzcC5zdGF0dXMgJiAweGZmMDApIHsKIAkJCWFpLT5iYXBfcmVhZCA9IGZhc3RfYmFwX3JlYWQ7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiYWlybzogRG9pbmcgZmFzdCBiYXBfcmVhZHNcbiIpOworCQkJYWlyb19wcmludF9kYmcoYWktPmRldi0+bmFtZSwgIkRvaW5nIGZhc3QgYmFwX3JlYWRzIik7CiAJCX0gZWxzZSB7CiAJCQlhaS0+YmFwX3JlYWQgPSBhdXhfYmFwX3JlYWQ7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiYWlybzogRG9pbmcgQVVYIGJhcF9yZWFkc1xuIik7CisJCQlhaXJvX3ByaW50X2RiZyhhaS0+ZGV2LT5uYW1lLCAiRG9pbmcgQVVYIGJhcF9yZWFkcyIpOwogCQl9CiAJfQogCWlmIChsb2NrKQpAQCAtMzY4MywxOSArMzc4OCwxOCBAQAogCQkJaWYgKGNhcF9yaWQuc29mdENhcCAmIDgpCiAJCQkJYWktPmNvbmZpZy5ybW9kZSB8PSBSWE1PREVfTk9STUFMSVpFRF9SU1NJOwogCQkJZWxzZQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFpcm86IHVua25vd24gcmVjZWl2ZWQgc2lnbmFsIGxldmVsIHNjYWxlXG4iKTsKKwkJCQlhaXJvX3ByaW50X3dhcm4oYWktPmRldi0+bmFtZSwgInVua25vd24gcmVjZWl2ZWQgc2lnbmFsICIKKwkJCQkJCSJsZXZlbCBzY2FsZSIpOwogCQl9CiAJCWFpLT5jb25maWcub3Btb2RlID0gYWRob2MgPyBNT0RFX1NUQV9JQlNTIDogTU9ERV9TVEFfRVNTOwogCQlhaS0+Y29uZmlnLmF1dGhUeXBlID0gQVVUSF9PUEVOOwogCQlhaS0+Y29uZmlnLm1vZHVsYXRpb24gPSBNT0RfQ0NLOwogCi0jaWZkZWYgTUlDU1VQUE9SVAogCQlpZiAoKGNhcF9yaWQubGVuPj1zaXplb2YoY2FwX3JpZCkpICYmIChjYXBfcmlkLmV4dFNvZnRDYXAmMSkgJiYKIAkJICAgIChtaWNzZXR1cChhaSkgPT0gU1VDQ0VTUykpIHsKIAkJCWFpLT5jb25maWcub3Btb2RlIHw9IE1PREVfTUlDOwogCQkJc2V0X2JpdChGTEFHX01JQ19DQVBBQkxFLCAmYWktPmZsYWdzKTsKIAkJfQotI2VuZGlmCiAKIAkJLyogU2F2ZSBvZmYgdGhlIE1BQyAqLwogCQlmb3IoIGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKyApIHsKQEAgLTM3NDgsNyArMzg1Miw4IEBACiAKIAlzdGF0dXMgPSBlbmFibGVfTUFDKGFpLCAmcnNwLCBsb2NrKTsKIAlpZiAoIHN0YXR1cyAhPSBTVUNDRVNTIHx8IChyc3Auc3RhdHVzICYgMHhGRjAwKSAhPSAwKSB7Ci0JCXByaW50ayggS0VSTl9FUlIgImFpcm86IEJhZCBNQUMgZW5hYmxlIHJlYXNvbiA9ICV4LCByaWQgPSAleCwgb2Zmc2V0ID0gJWRcbiIsIHJzcC5yc3AwLCByc3AucnNwMSwgcnNwLnJzcDIgKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIkJhZCBNQUMgZW5hYmxlIHJlYXNvbiA9ICV4LCByaWQgPSAleCwiCisJCQkiIG9mZnNldCA9ICVkIiwgcnNwLnJzcDAsIHJzcC5yc3AxLCByc3AucnNwMiApOwogCQlyZXR1cm4gRVJST1I7CiAJfQogCkBAIC0zNzkxLDggKzM4OTYsOCBAQAogCX0KIAogCWlmICggbWF4X3RyaWVzID09IC0xICkgewotCQlwcmludGsoIEtFUk5fRVJSCi0JCQkiYWlybzogTWF4IHRyaWVzIGV4Y2VlZGVkIHdoZW4gaXNzdWVpbmcgY29tbWFuZFxuIiApOworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLAorCQkJIk1heCB0cmllcyBleGNlZWRlZCB3aGVuIGlzc3VlaW5nIGNvbW1hbmQiKTsKIAkJaWYgKElONDUwMChhaSwgQ09NTUFORCkgJiBDT01NQU5EX0JVU1kpCiAJCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfQ0xFQVJDT01NQU5EQlVTWSk7CiAJCXJldHVybiBFUlJPUjsKQEAgLTM4MDQsMTEgKzM5MDksMTEgQEAKIAlwUnNwLT5yc3AxID0gSU40NTAwKGFpLCBSRVNQMSk7CiAJcFJzcC0+cnNwMiA9IElONDUwMChhaSwgUkVTUDIpOwogCWlmICgocFJzcC0+c3RhdHVzICYgMHhmZjAwKSE9MCAmJiBwQ21kLT5jbWQgIT0gQ01EX1NPRlRSRVNFVCkgewotCQlwcmludGsgKEtFUk5fRVJSICJhaXJvOiBjbWQ9ICV4XG4iLCBwQ21kLT5jbWQpOwotCQlwcmludGsgKEtFUk5fRVJSICJhaXJvOiBzdGF0dXM9ICV4XG4iLCBwUnNwLT5zdGF0dXMpOwotCQlwcmludGsgKEtFUk5fRVJSICJhaXJvOiBSc3AwPSAleFxuIiwgcFJzcC0+cnNwMCk7Ci0JCXByaW50ayAoS0VSTl9FUlIgImFpcm86IFJzcDE9ICV4XG4iLCBwUnNwLT5yc3AxKTsKLQkJcHJpbnRrIChLRVJOX0VSUiAiYWlybzogUnNwMj0gJXhcbiIsIHBSc3AtPnJzcDIpOworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiY21kPSAleFxuIiwgcENtZC0+Y21kKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgInN0YXR1cz0gJXhcbiIsIHBSc3AtPnN0YXR1cyk7CisJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJSc3AwPSAleFxuIiwgcFJzcC0+cnNwMCk7CisJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJSc3AxPSAleFxuIiwgcFJzcC0+cnNwMSk7CisJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJSc3AyPSAleFxuIiwgcFJzcC0+cnNwMik7CiAJfQogCiAJLy8gY2xlYXIgc3R1Y2sgY29tbWFuZCBidXN5IGlmIG5lY2Vzc2FyeQpAQCAtMzg0MSwxNSArMzk0NiwxNSBAQAogCQkJfQogCQl9IGVsc2UgaWYgKCBzdGF0dXMgJiBCQVBfRVJSICkgewogCQkJLyogaW52YWxpZCByaWQgb3Igb2Zmc2V0ICovCi0JCQlwcmludGsoIEtFUk5fRVJSICJhaXJvOiBCQVAgZXJyb3IgJXggJWRcbiIsCisJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQkFQIGVycm9yICV4ICVkIiwKIAkJCQlzdGF0dXMsIHdoaWNoYmFwICk7CiAJCQlyZXR1cm4gRVJST1I7CiAJCX0gZWxzZSBpZiAoc3RhdHVzICYgQkFQX0RPTkUpIHsgLy8gc3VjY2VzcwogCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCX0KIAkJaWYgKCAhKG1heF90cmllcy0tKSApIHsKLQkJCXByaW50ayggS0VSTl9FUlIKLQkJCQkiYWlybzogQkFQIHNldHVwIGVycm9yIHRvbyBtYW55IHJldHJpZXNcbiIgKTsKKwkJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsCisJCQkJImFpcm86IEJBUCBzZXR1cCBlcnJvciB0b28gbWFueSByZXRyaWVzXG4iKTsKIAkJCXJldHVybiBFUlJPUjsKIAkJfQogCQkvLyAtLSBQQzQ1MDAgbWlzc2VkIGl0LCB0cnkgYWdhaW4KQEAgLTQwMDQsOCArNDEwOSw4IEBACiAJCWxlbiA9IG1pbihsZW4sIChpbnQpbGUxNl90b19jcHUoKih1MTYqKXBCdWYpKSAtIDI7CiAKIAkJaWYgKCBsZW4gPD0gMiApIHsKLQkJCXByaW50ayggS0VSTl9FUlIKLQkJCSJhaXJvOiBSaWQgJXggaGFzIGEgbGVuZ3RoIG9mICVkIHdoaWNoIGlzIHRvbyBzaG9ydFxuIiwKKwkJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsCisJCQkJIlJpZCAleCBoYXMgYSBsZW5ndGggb2YgJWQgd2hpY2ggaXMgdG9vIHNob3J0IiwKIAkJCQkoaW50KXJpZCwgKGludClsZW4gKTsKIAkJCXJjID0gRVJST1I7CiAJICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTQwMzgsOCArNDE0Myw4IEBACiAJCVJlc3AgcnNwOwogCiAJCWlmICh0ZXN0X2JpdChGTEFHX0VOQUJMRUQsICZhaS0+ZmxhZ3MpICYmIChSSURfV0VQX1RFTVAgIT0gcmlkKSkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSIlczogTUFDIHNob3VsZCBiZSBkaXNhYmxlZCAocmlkPSUwNHgpXG4iLAorCQkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwKKwkJCQkiJXM6IE1BQyBzaG91bGQgYmUgZGlzYWJsZWQgKHJpZD0lMDR4KSIsCiAJCQkJX19GVU5DVElPTl9fLCByaWQpOwogCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCQltZW1zZXQoJnJzcCwgMCwgc2l6ZW9mKHJzcCkpOwpAQCAtNDA1NSw3ICs0MTYwLDcgQEAKIAkJCSZhaS0+Y29uZmlnX2Rlc2MucmlkX2Rlc2MsIHNpemVvZihSaWQpKTsKIAogCQlpZiAobGVuIDwgNCB8fCBsZW4gPiAyMDQ3KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBsZW49JWRcbiIsX19GVU5DVElPTl9fLGxlbik7CisJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiJXM6IGxlbj0lZCIsIF9fRlVOQ1RJT05fXywgbGVuKTsKIAkJCXJjID0gLTE7CiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoKGNoYXIgKilhaS0+Y29uZmlnX2Rlc2MudmlydHVhbF9ob3N0X2FkZHIsCkBAIC00MDYzLDEwICs0MTY4LDEwIEBACiAKIAkJCXJjID0gaXNzdWVjb21tYW5kKGFpLCAmY21kLCAmcnNwKTsKIAkJCWlmICgocmMgJiAweGZmMDApICE9IDApIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcml0ZSByaWQgRXJyb3IgJWRcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXyxyYyk7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ21kPSUwNHhcbiIsCi0JCQkJCQlfX0ZVTkNUSU9OX18sY21kLmNtZCk7CisJCQkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIiVzOiBXcml0ZSByaWQgRXJyb3IgJWQiLAorCQkJCQkJX19GVU5DVElPTl9fLCByYyk7CisJCQkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIiVzOiBDbWQ9JTA0eCIsCisJCQkJCQlfX0ZVTkNUSU9OX18sIGNtZC5jbWQpOwogCQkJfQogCiAJCQlpZiAoKHJzcC5zdGF0dXMgJiAweDdmMDApKQpAQCAtNDE2NSwyMCArNDI3MCwxNyBAQAogCWxlbiA+Pj0gMTY7CiAKIAlpZiAobGVuIDw9IEVUSF9BTEVOICogMikgewotCQlwcmludGsoIEtFUk5fV0FSTklORyAiU2hvcnQgcGFja2V0ICVkXG4iLCBsZW4gKTsKKwkJYWlyb19wcmludF93YXJuKGFpLT5kZXYtPm5hbWUsICJTaG9ydCBwYWNrZXQgJWQiLCBsZW4pOwogCQlyZXR1cm4gRVJST1I7CiAJfQogCWxlbiAtPSBFVEhfQUxFTiAqIDI7CiAKLSNpZmRlZiBNSUNTVVBQT1JUCiAJaWYgKHRlc3RfYml0KEZMQUdfTUlDX0NBUEFCTEUsICZhaS0+ZmxhZ3MpICYmIGFpLT5taWNzdGF0cy5lbmFibGVkICYmIAogCSAgICAobnRvaHMoKCh1MTYgKilwUGFja2V0KVs2XSkgIT0gMHg4ODhFKSkgewogCQlpZiAoZW5jYXBzdWxhdGUoYWksKGV0aGVySGVhZCAqKXBQYWNrZXQsJnBNaWMsbGVuKSAhPSBTVUNDRVNTKQogCQkJcmV0dXJuIEVSUk9SOwogCQltaWNsZW4gPSBzaXplb2YocE1pYyk7CiAJfQotI2VuZGlmCi0KIAkvLyBwYWNrZXQgaXMgZGVzdGluYXRpb25bNl0sIHNvdXJjZVs2XSwgcGF5bG9hZFtsZW4tMTJdCiAJLy8gd3JpdGUgdGhlIHBheWxvYWQgbGVuZ3RoIGFuZCBkc3Qvc3JjL3BheWxvYWQKIAlpZiAoYmFwX3NldHVwKGFpLCB0eEZpZCwgMHgwMDM2LCBCQVAxKSAhPSBTVUNDRVNTKSByZXR1cm4gRVJST1I7CkBAIC00MjMyLDcgKzQzMzQsNyBAQAogCX0KIAogCWlmIChsZW4gPCBoZHJsZW4pIHsKLQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgIlNob3J0IHBhY2tldCAlZFxuIiwgbGVuICk7CisJCWFpcm9fcHJpbnRfd2FybihhaS0+ZGV2LT5uYW1lLCAiU2hvcnQgcGFja2V0ICVkIiwgbGVuKTsKIAkJcmV0dXJuIEVSUk9SOwogCX0KIApAQCAtNDYyOSwxNSArNDczMSwxNCBAQAogCQkgICAgaSo0PHN0YXRzLmxlbjsgaSsrKXsKIAkJaWYgKCFzdGF0c0xhYmVsc1tpXSkgY29udGludWU7CiAJCWlmIChqK3N0cmxlbihzdGF0c0xhYmVsc1tpXSkrMTY+NDA5NikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJhaXJvOiBQb3RlbnRpYWxseSBkaXNhc3Rlcm91cyBidWZmZXIgb3ZlcmZsb3cgYXZlcnRlZCFcbiIpOworCQkJYWlyb19wcmludF93YXJuKGFwcml2LT5kZXYtPm5hbWUsCisJCQkgICAgICAgIlBvdGVudGlhbGx5IGRpc2FzdGVyb3VzIGJ1ZmZlciBvdmVyZmxvdyBhdmVydGVkISIpOwogCQkJYnJlYWs7CiAJCX0KIAkJais9c3ByaW50ZihkYXRhLT5yYnVmZmVyK2osICIlczogJXVcbiIsIHN0YXRzTGFiZWxzW2ldLCB2YWxzW2ldKTsKIAl9CiAJaWYgKGkqND49c3RhdHMubGVuKXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImFpcm86IEdvdCBhIHNob3J0IHJpZFxuIik7CisJCWFpcm9fcHJpbnRfd2FybihhcHJpdi0+ZGV2LT5uYW1lLCAiR290IGEgc2hvcnQgcmlkIik7CiAJfQogCWRhdGEtPnJlYWRsZW4gPSBqOwogCXJldHVybiAwOwpAQCAtNDc5OSw3ICs0OTAwLDcgQEAKIAogCQkJbGluZSArPSAxNDsKIAkJCXYgPSBnZXRfZGVjX3UxNihsaW5lLCAmaSwgNCk7Ci0JCQl2ID0gKHY8MCkgPyAwIDogKCh2PjIzMTIpID8gMjMxMiA6IHYpOworCQkJdiA9ICh2PDApID8gMCA6ICgodj5BSVJPX0RFRl9NVFUpID8gQUlST19ERUZfTVRVIDogdik7CiAJCQlhaS0+Y29uZmlnLnJ0c1RocmVzID0gKHUxNil2OwogCQkJc2V0X2JpdCAoRkxBR19DT01NSVQsICZhaS0+ZmxhZ3MpOwogCQl9IGVsc2UgaWYgKCAhc3RybmNtcCggbGluZSwgIlRYTVNEVUxpZmV0aW1lOiAiLCAxNiApICkgewpAQCAtNDgzMyw3ICs0OTM0LDcgQEAKIAogCQkJbGluZSArPSAxNTsKIAkJCXYgPSBnZXRfZGVjX3UxNihsaW5lLCAmaSwgNCk7Ci0JCQl2ID0gKHY8MjU2KSA/IDI1NiA6ICgodj4yMzEyKSA/IDIzMTIgOiB2KTsKKwkJCXYgPSAodjwyNTYpID8gMjU2IDogKCh2PkFJUk9fREVGX01UVSkgPyBBSVJPX0RFRl9NVFUgOiB2KTsKIAkJCXYgPSB2ICYgMHhmZmZlOyAvKiBNYWtlIHN1cmUgaXRzIGV2ZW4gKi8KIAkJCWFpLT5jb25maWcuZnJhZ1RocmVzaCA9ICh1MTYpdjsKIAkJCXNldF9iaXQgKEZMQUdfQ09NTUlULCAmYWktPmZsYWdzKTsKQEAgLTQ4NDMsOCArNDk0NCw3IEBACiAJCQljYXNlICdkJzogIGFpLT5jb25maWcubW9kdWxhdGlvbj1NT0RfREVGQVVMVDsgc2V0X2JpdChGTEFHX0NPTU1JVCwgJmFpLT5mbGFncyk7IGJyZWFrOwogCQkJY2FzZSAnYyc6ICBhaS0+Y29uZmlnLm1vZHVsYXRpb249TU9EX0NDSzsgc2V0X2JpdChGTEFHX0NPTU1JVCwgJmFpLT5mbGFncyk7IGJyZWFrOwogCQkJY2FzZSAnbSc6ICBhaS0+Y29uZmlnLm1vZHVsYXRpb249TU9EX01PSzsgc2V0X2JpdChGTEFHX0NPTU1JVCwgJmFpLT5mbGFncyk7IGJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoIEtFUk5fV0FSTklORyAiYWlybzogVW5rbm93biBtb2R1bGF0aW9uXG4iICk7CisJCQlkZWZhdWx0OiBhaXJvX3ByaW50X3dhcm4oYWktPmRldi0+bmFtZSwgIlVua25vd24gbW9kdWxhdGlvbiIpOwogCQkJfQogCQl9IGVsc2UgaWYgKCFzdHJuY21wKGxpbmUsICJQcmVhbWJsZTogIiwgMTApKSB7CiAJCQlsaW5lICs9IDEwOwpAQCAtNDg1MiwxMCArNDk1MiwxMCBAQAogCQkJY2FzZSAnYSc6IGFpLT5jb25maWcucHJlYW1ibGU9UFJFQU1CTEVfQVVUTzsgc2V0X2JpdChGTEFHX0NPTU1JVCwgJmFpLT5mbGFncyk7IGJyZWFrOwogCQkJY2FzZSAnbCc6IGFpLT5jb25maWcucHJlYW1ibGU9UFJFQU1CTEVfTE9ORzsgc2V0X2JpdChGTEFHX0NPTU1JVCwgJmFpLT5mbGFncyk7IGJyZWFrOwogCQkJY2FzZSAncyc6IGFpLT5jb25maWcucHJlYW1ibGU9UFJFQU1CTEVfU0hPUlQ7IHNldF9iaXQoRkxBR19DT01NSVQsICZhaS0+ZmxhZ3MpOyBicmVhazsKLQkJICAgICAgICBkZWZhdWx0OiBwcmludGsoS0VSTl9XQVJOSU5HICJhaXJvOiBVbmtub3duIHByZWFtYmxlXG4iKTsKKwkJCWRlZmF1bHQ6IGFpcm9fcHJpbnRfd2FybihhaS0+ZGV2LT5uYW1lLCAiVW5rbm93biBwcmVhbWJsZSIpOwogCQkJfQogCQl9IGVsc2UgewotCQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgIkNvdWxkbid0IGZpZ3VyZSBvdXQgJXNcbiIsIGxpbmUgKTsKKwkJCWFpcm9fcHJpbnRfd2FybihhaS0+ZGV2LT5uYW1lLCAiQ291bGRuJ3QgZmlndXJlIG91dCAlcyIsIGxpbmUpOwogCQl9CiAJCXdoaWxlKCBsaW5lWzBdICYmIGxpbmVbMF0gIT0gJ1xuJyApIGxpbmUrKzsKIAkJaWYgKCBsaW5lWzBdICkgbGluZSsrOwpAQCAtNTA4MSw3ICs1MTgxLDYgQEAKIAkJd2tyLmxlbiA9IHNpemVvZih3a3IpOwogCQl3a3Iua2luZGV4ID0gMHhmZmZmOwogCQl3a3IubWFjWzBdID0gKGNoYXIpaW5kZXg7Ci0JCWlmIChwZXJtKSBwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIHRyYW5zbWl0IGtleSB0byAlZFxuIiwgaW5kZXgpOwogCQlpZiAocGVybSkgYWktPmRlZmluZGV4ID0gKGNoYXIpaW5kZXg7CiAJfSBlbHNlIHsKIC8vIFdlIGFyZSBhY3R1YWxseSBzZXR0aW5nIHRoZSBrZXkKQEAgLTUwOTAsNyArNTE4OSw2IEBACiAJCXdrci5rbGVuID0ga2V5bGVuOwogCQltZW1jcHkoIHdrci5rZXksIGtleSwga2V5bGVuICk7CiAJCW1lbWNweSggd2tyLm1hYywgbWFjYWRkciwgRVRIX0FMRU4gKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBrZXkgJWRcbiIsIGluZGV4KTsKIAl9CiAKIAlpZiAocGVybSkgZGlzYWJsZV9NQUMoYWksIGxvY2spOwpAQCAtNTEyMyw3ICs1MjIxLDcgQEAKIAkJfQogCQlqID0gMjsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImFpcm86ICBXZXBLZXkgcGFzc2VkIGludmFsaWQga2V5IGluZGV4XG4iKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIldlcEtleSBwYXNzZWQgaW52YWxpZCBrZXkgaW5kZXgiKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTUzNiwxNyArNTYzNCwxNiBAQAogICAgICAgICBhaXJvX2VudHJ5LT5naWQgPSBwcm9jX2dpZDsKIAogCWZvciggaSA9IDA7IGkgPCA0ICYmIGlvW2ldICYmIGlycVtpXTsgaSsrICkgewotCQlwcmludGsoIEtFUk5fSU5GTwotCQkJImFpcm86ICBUcnlpbmcgdG8gY29uZmlndXJlIElTQSBhZGFwdGVyIGF0IGlycT0lZCBpbz0weCV4XG4iLAotCQkJaXJxW2ldLCBpb1tpXSApOworCQlhaXJvX3ByaW50X2luZm8oIiIsICJUcnlpbmcgdG8gY29uZmlndXJlIElTQSBhZGFwdGVyIGF0IGlycT0lZCAiCisJCQkiaW89MHgleCIsIGlycVtpXSwgaW9baV0gKTsKIAkJaWYgKGluaXRfYWlyb19jYXJkKCBpcnFbaV0sIGlvW2ldLCAwLCBOVUxMICkpCiAJCQloYXZlX2lzYV9kZXYgPSAxOwogCX0KIAogI2lmZGVmIENPTkZJR19QQ0kKLQlwcmludGsoIEtFUk5fSU5GTyAiYWlybzogIFByb2JpbmcgZm9yIFBDSSBhZGFwdGVyc1xuIiApOworCWFpcm9fcHJpbnRfaW5mbygiIiwgIlByb2JpbmcgZm9yIFBDSSBhZGFwdGVycyIpOwogCXBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFpcm9fZHJpdmVyKTsKLQlwcmludGsoIEtFUk5fSU5GTyAiYWlybzogIEZpbmlzaGVkIHByb2JpbmcgZm9yIFBDSSBhZGFwdGVyc1xuIiApOworCWFpcm9fcHJpbnRfaW5mbygiIiwgIkZpbmlzaGVkIHByb2JpbmcgZm9yIFBDSSBhZGFwdGVycyIpOwogI2VuZGlmCiAKIAkvKiBBbHdheXMgZXhpdCB3aXRoIHN1Y2Nlc3MsIGFzIHdlIGFyZSBhIGxpYnJhcnkgbW9kdWxlCkBAIC01NTU4LDcgKzU2NTUsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGFpcm9fY2xlYW51cF9tb2R1bGUoIHZvaWQgKQogewogCXdoaWxlKCBhaXJvX2RldmljZXMgKSB7Ci0JCXByaW50ayggS0VSTl9JTkZPICJhaXJvOiBVbnJlZ2lzdGVyaW5nICVzXG4iLCBhaXJvX2RldmljZXMtPmRldi0+bmFtZSApOworCQlhaXJvX3ByaW50X2luZm8oYWlyb19kZXZpY2VzLT5kZXYtPm5hbWUsICJVbnJlZ2lzdGVyaW5nLi4uXG4iKTsKIAkJc3RvcF9haXJvX2NhcmQoIGFpcm9fZGV2aWNlcy0+ZGV2LCAxICk7CiAJfQogI2lmZGVmIENPTkZJR19QQ0kKQEAgLTU2NjksNyArNTc2Niw4IEBACiAJCS8qIFdlIHNob3VsZCBkbyBhIGJldHRlciBjaGVjayB0aGFuIHRoYXQsCiAJCSAqIGJhc2VkIG9uIHRoZSBjYXJkIGNhcGFiaWxpdHkgISEhICovCiAJCWlmKChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiAxNCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTmV3IGNoYW5uZWwgdmFsdWUgb2YgJWQgaXMgaW52YWxpZCFcbiIsIGRldi0+bmFtZSwgZndycS0+bSk7CisJCQlhaXJvX3ByaW50X2RiZyhkZXYtPm5hbWUsICJOZXcgY2hhbm5lbCB2YWx1ZSBvZiAlZCBpcyBpbnZhbGlkISIsCisJCQkJZndycS0+bSk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCX0gZWxzZSB7CiAJCQlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKQEAgLTU4MDEsMTEgKzU4OTksMTMgQEAKIAlDbWQgY21kOwogCVJlc3AgcnNwOwogCUFQTGlzdFJpZCBBUExpc3RfcmlkOwotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGJjYXN0W0VUSF9BTEVOXSA9IHsgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSB9OworCXN0YXRpYyBjb25zdCB1OCBhbnlbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07CisJc3RhdGljIGNvbnN0IHU4IG9mZltFVEhfQUxFTl0gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKIAogCWlmIChhd3JxLT5zYV9mYW1pbHkgIT0gQVJQSFJEX0VUSEVSKQogCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmICghbWVtY21wKGJjYXN0LCBhd3JxLT5zYV9kYXRhLCBFVEhfQUxFTikpIHsKKwllbHNlIGlmICghbWVtY21wKGFueSwgYXdycS0+c2FfZGF0YSwgRVRIX0FMRU4pIHx8CisJICAgICAgICAgIW1lbWNtcChvZmYsIGF3cnEtPnNhX2RhdGEsIEVUSF9BTEVOKSkgewogCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCQljbWQuY21kPUNNRF9MT1NFX1NZTkM7CiAJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmxvY2FsLT5zZW0pKQpAQCAtNTk5MSw4ICs2MDkxLDggQEAKIAlpbnQgcnRociA9IHZ3cnEtPnZhbHVlOwogCiAJaWYodndycS0+ZGlzYWJsZWQpCi0JCXJ0aHIgPSAyMzEyOwotCWlmKChydGhyIDwgMCkgfHwgKHJ0aHIgPiAyMzEyKSkgeworCQlydGhyID0gQUlST19ERUZfTVRVOworCWlmKChydGhyIDwgMCkgfHwgKHJ0aHIgPiBBSVJPX0RFRl9NVFUpKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKQEAgLTYwMTUsNyArNjExNSw3IEBACiAKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAl2d3JxLT52YWx1ZSA9IGxvY2FsLT5jb25maWcucnRzVGhyZXM7Ci0JdndycS0+ZGlzYWJsZWQgPSAodndycS0+dmFsdWUgPj0gMjMxMik7CisJdndycS0+ZGlzYWJsZWQgPSAodndycS0+dmFsdWUgPj0gQUlST19ERUZfTVRVKTsKIAl2d3JxLT5maXhlZCA9IDE7CiAKIAlyZXR1cm4gMDsKQEAgLTYwMzQsOCArNjEzNCw4IEBACiAJaW50IGZ0aHIgPSB2d3JxLT52YWx1ZTsKIAogCWlmKHZ3cnEtPmRpc2FibGVkKQotCQlmdGhyID0gMjMxMjsKLQlpZigoZnRociA8IDI1NikgfHwgKGZ0aHIgPiAyMzEyKSkgeworCQlmdGhyID0gQUlST19ERUZfTVRVOworCWlmKChmdGhyIDwgMjU2KSB8fCAoZnRociA+IEFJUk9fREVGX01UVSkpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWZ0aHIgJj0gfjB4MTsJLyogR2V0IGFuIGV2ZW4gdmFsdWUgLSBpcyBpdCByZWFsbHkgbmVlZGVkID8/PyAqLwpAQCAtNjA1OSw3ICs2MTU5LDcgQEAKIAogCXJlYWRDb25maWdSaWQobG9jYWwsIDEpOwogCXZ3cnEtPnZhbHVlID0gbG9jYWwtPmNvbmZpZy5mcmFnVGhyZXNoOwotCXZ3cnEtPmRpc2FibGVkID0gKHZ3cnEtPnZhbHVlID49IDIzMTIpOworCXZ3cnEtPmRpc2FibGVkID0gKHZ3cnEtPnZhbHVlID49IEFJUk9fREVGX01UVSk7CiAJdndycS0+Zml4ZWQgPSAxOwogCiAJcmV0dXJuIDA7CkBAIC02Mjk2LDYgKzYzOTYsMjcyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCisgKiBXaXJlbGVzcyBIYW5kbGVyIDogc2V0IGV4dGVuZGVkIEVuY3J5cHRpb24gcGFyYW1ldGVycworICovCitzdGF0aWMgaW50IGFpcm9fc2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gZGV2LT5wcml2OworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsJCS8qIENhcmQgY2FwYWJpbGl0eSBpbmZvICovCisJaW50IHBlcm0gPSAoIGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9URU1QID8gMCA6IDEgKTsKKwl1MTYgY3VycmVudEF1dGhUeXBlID0gbG9jYWwtPmNvbmZpZy5hdXRoVHlwZTsKKwlpbnQgaWR4LCBrZXlfbGVuLCBhbGcgPSBleHQtPmFsZywgc2V0X2tleSA9IDE7CisJd2VwX2tleV90IGtleTsKKworCS8qIElzIFdFUCBzdXBwb3J0ZWQgPyAqLworCXJlYWRDYXBhYmlsaXR5UmlkKGxvY2FsLCAmY2FwX3JpZCwgMSk7CisJLyogT2xkZXIgZmlybXdhcmUgZG9lc24ndCBzdXBwb3J0IHRoaXMuLi4KKwlpZighKGNhcF9yaWQuc29mdENhcCAmIDIpKSB7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9ICovCisJcmVhZENvbmZpZ1JpZChsb2NhbCwgMSk7CisKKwkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KKwlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CisJaWYgKGlkeCkgeworCQlpZiAoaWR4IDwgMSB8fCBpZHggPiAoKGNhcF9yaWQuc29mdENhcCAmIDB4ODApID8gNDoxKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZHgtLTsKKwl9IGVsc2UKKwkJaWR4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisKKwlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQorCQlhbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisKKwlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpIHsKKwkJLyogT25seSBzZXQgdHJhbnNtaXQga2V5IGluZGV4IGhlcmUsIGFjdHVhbAorCQkgKiBrZXkgaXMgc2V0IGJlbG93IGlmIG5lZWRlZC4KKwkJICovCisJCXNldF93ZXBfa2V5KGxvY2FsLCBpZHgsIE5VTEwsIDAsIHBlcm0sIDEpOworCQlzZXRfa2V5ID0gZXh0LT5rZXlfbGVuID4gMCA/IDEgOiAwOworCX0KKworCWlmIChzZXRfa2V5KSB7CisJCS8qIFNldCB0aGUgcmVxdWVzdGVkIGtleSBmaXJzdCAqLworCQltZW1zZXQoa2V5LmtleSwgMCwgTUFYX0tFWV9TSVpFKTsKKwkJc3dpdGNoIChhbGcpIHsKKwkJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6CisJCQlrZXkubGVuID0gMDsKKwkJCWJyZWFrOworCQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgorCQkJaWYgKGV4dC0+a2V5X2xlbiA+IE1JTl9LRVlfU0laRSkgeworCQkJCWtleS5sZW4gPSBNQVhfS0VZX1NJWkU7CisJCQl9IGVsc2UgaWYgKGV4dC0+a2V5X2xlbiA+IDApIHsKKwkJCQlrZXkubGVuID0gTUlOX0tFWV9TSVpFOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWtleV9sZW4gPSBtaW4gKGV4dC0+a2V5X2xlbiwga2V5Lmxlbik7CisJCQltZW1jcHkoa2V5LmtleSwgZXh0LT5rZXksIGtleV9sZW4pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBTZW5kIHRoZSBrZXkgdG8gdGhlIGNhcmQgKi8KKwkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJfQorCisJLyogUmVhZCB0aGUgZmxhZ3MgKi8KKwlpZihlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCisJCWxvY2FsLT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX09QRU47CS8vIGRpc2FibGUgZW5jcnlwdGlvbgorCWlmKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQorCQlsb2NhbC0+Y29uZmlnLmF1dGhUeXBlID0gQVVUSF9TSEFSRURLRVk7CS8vIE9ubHkgQm90aAorCWlmKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorCQlsb2NhbC0+Y29uZmlnLmF1dGhUeXBlID0gQVVUSF9FTkNSWVBUOwkvLyBPbmx5IFdlcAorCS8qIENvbW1pdCB0aGUgY2hhbmdlcyB0byBmbGFncyBpZiBuZWVkZWQgKi8KKwlpZiAobG9jYWwtPmNvbmZpZy5hdXRoVHlwZSAhPSBjdXJyZW50QXV0aFR5cGUpCisJCXNldF9iaXQgKEZMQUdfQ09NTUlULCAmbG9jYWwtPmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgZXh0ZW5kZWQgRW5jcnlwdGlvbiBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBpbnQgYWlyb19nZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gZGV2LT5wcml2OworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsJCS8qIENhcmQgY2FwYWJpbGl0eSBpbmZvICovCisJaW50IGlkeCwgbWF4X2tleV9sZW47CisKKwkvKiBJcyBpdCBzdXBwb3J0ZWQgPyAqLworCXJlYWRDYXBhYmlsaXR5UmlkKGxvY2FsLCAmY2FwX3JpZCwgMSk7CisJaWYoIShjYXBfcmlkLnNvZnRDYXAgJiAyKSkgeworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJlYWRDb25maWdSaWQobG9jYWwsIDEpOworCisJbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOworCWlmIChtYXhfa2V5X2xlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOworCWlmIChpZHgpIHsKKwkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gKChjYXBfcmlkLnNvZnRDYXAgJiAweDgwKSA/IDQ6MSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWR4LS07CisJfSBlbHNlCisJCWlkeCA9IGdldF93ZXBfa2V5KGxvY2FsLCAweGZmZmYpOworCisJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKKwltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOworCisJLyogQ2hlY2sgZW5jcnlwdGlvbiBtb2RlICovCisJc3dpdGNoKGxvY2FsLT5jb25maWcuYXV0aFR5cGUpIHsKKwkJY2FzZSBBVVRIX0VOQ1JZUFQ6CisJCQllbmNvZGluZy0+ZmxhZ3MgPSBJV19FTkNPREVfQUxHX1dFUCB8IElXX0VOQ09ERV9FTkFCTEVEOworCQkJYnJlYWs7CisJCWNhc2UgQVVUSF9TSEFSRURLRVk6CisJCQllbmNvZGluZy0+ZmxhZ3MgPSBJV19FTkNPREVfQUxHX1dFUCB8IElXX0VOQ09ERV9FTkFCTEVEOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCWNhc2UgQVVUSF9PUEVOOgorCQkJZW5jb2RpbmctPmZsYWdzID0gSVdfRU5DT0RFX0FMR19OT05FIHwgSVdfRU5DT0RFX0RJU0FCTEVEOworCQkJYnJlYWs7CisJfQorCS8qIFdlIGNhbid0IHJldHVybiB0aGUga2V5LCBzbyBzZXQgdGhlIHByb3BlciBmbGFnIGFuZCByZXR1cm4gemVybyAqLworCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfTk9LRVk7CisJbWVtc2V0KGV4dHJhLCAwLCAxNik7CisJCisJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLworCWV4dC0+a2V5X2xlbiA9IGdldF93ZXBfa2V5KGxvY2FsLCBpZHgpOworCWlmIChleHQtPmtleV9sZW4gPiAxNikgeworCQlleHQtPmtleV9sZW49MDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogV2lyZWxlc3MgSGFuZGxlciA6IHNldCBleHRlbmRlZCBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBpbnQgYWlyb19zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPnByaXY7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwl1MTYgY3VycmVudEF1dGhUeXBlID0gbG9jYWwtPmNvbmZpZy5hdXRoVHlwZTsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQkvKgorCQkgKiBhaXJvIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzCisJCSAqLworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorCQlpZiAocGFyYW0tPnZhbHVlKSB7CisJCQkvKiBPbmx5IGNoYW5nZSBhdXRoIHR5cGUgaWYgdW5lbmNyeXB0ZWQgKi8KKwkJCWlmIChjdXJyZW50QXV0aFR5cGUgPT0gQVVUSF9PUEVOKQorCQkJCWxvY2FsLT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX0VOQ1JZUFQ7CisJCX0gZWxzZSB7CisJCQlsb2NhbC0+Y29uZmlnLmF1dGhUeXBlID0gQVVUSF9PUEVOOworCQl9CisKKwkJLyogQ29tbWl0IHRoZSBjaGFuZ2VzIHRvIGZsYWdzIGlmIG5lZWRlZCAqLworCQlpZiAobG9jYWwtPmNvbmZpZy5hdXRoVHlwZSAhPSBjdXJyZW50QXV0aFR5cGUpCisJCQlzZXRfYml0IChGTEFHX0NPTU1JVCwgJmxvY2FsLT5mbGFncyk7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOiB7CisJCQkvKiBGSVhNRTogV2hhdCBhYm91dCBBVVRIX09QRU4/ICBUaGlzIEFQSSBzZWVtcyB0bworCQkJICogZGlzYWxsb3cgc2V0dGluZyBvdXIgYXV0aCB0byBBVVRIX09QRU4uCisJCQkgKi8KKwkJCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7CisJCQkJbG9jYWwtPmNvbmZpZy5hdXRoVHlwZSA9IEFVVEhfU0hBUkVES0VZOworCQkJfSBlbHNlIGlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkgeworCQkJCWxvY2FsLT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX0VOQ1JZUFQ7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCisJCQkvKiBDb21taXQgdGhlIGNoYW5nZXMgdG8gZmxhZ3MgaWYgbmVlZGVkICovCisJCQlpZiAobG9jYWwtPmNvbmZpZy5hdXRoVHlwZSAhPSBjdXJyZW50QXV0aFR5cGUpCisJCQkJc2V0X2JpdCAoRkxBR19DT01NSVQsICZsb2NhbC0+ZmxhZ3MpOworCQl9CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCS8qIFNpbGVudGx5IGFjY2VwdCBkaXNhYmxlIG9mIFdQQSAqLworCQlpZiAocGFyYW0tPnZhbHVlID4gMCkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgZXh0ZW5kZWQgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycworICovCitzdGF0aWMgaW50IGFpcm9fZ2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gZGV2LT5wcml2OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJdTE2IGN1cnJlbnRBdXRoVHlwZSA9IGxvY2FsLT5jb25maWcuYXV0aFR5cGU7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKwkJc3dpdGNoIChjdXJyZW50QXV0aFR5cGUpIHsKKwkJY2FzZSBBVVRIX1NIQVJFREtFWToKKwkJY2FzZSBBVVRIX0VOQ1JZUFQ6CisJCQlwYXJhbS0+dmFsdWUgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwYXJhbS0+dmFsdWUgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCXN3aXRjaCAoY3VycmVudEF1dGhUeXBlKSB7CisJCWNhc2UgQVVUSF9TSEFSRURLRVk6CisJCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX0FMR19TSEFSRURfS0VZOworCQkJYnJlYWs7CisJCWNhc2UgQVVUSF9FTkNSWVBUOgorCQlkZWZhdWx0OgorCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKwkJcGFyYW0tPnZhbHVlID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogc2V0IFR4LVBvd2VyCiAgKi8KIHN0YXRpYyBpbnQgYWlyb19zZXRfdHhwb3coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTY0ODgsOSArNjg1NCw5IEBACiAJCXJhbmdlLT50aHJvdWdocHV0ID0gMTUwMCAqIDEwMDA7CiAKIAlyYW5nZS0+bWluX3J0cyA9IDA7Ci0JcmFuZ2UtPm1heF9ydHMgPSAyMzEyOworCXJhbmdlLT5tYXhfcnRzID0gQUlST19ERUZfTVRVOwogCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLQlyYW5nZS0+bWF4X2ZyYWcgPSAyMzEyOworCXJhbmdlLT5tYXhfZnJhZyA9IEFJUk9fREVGX01UVTsKIAogCWlmKGNhcF9yaWQuc29mdENhcCAmIDIpIHsKIAkJLy8gV0VQOiBSQzQgNDAgYml0cwpAQCAtNjc1MSw2ICs3MTE3LDcgQEAKIAlzdHJ1Y3QgYWlyb19pbmZvICphaSA9IGRldi0+cHJpdjsKIAlDbWQgY21kOwogCVJlc3AgcnNwOworCWludCB3YWtlID0gMDsKIAogCS8qIE5vdGUgOiB5b3UgbWF5IGhhdmUgcmVhbGlzZWQgdGhhdCwgYXMgdGhpcyBpcyBhIFNFVCBvcGVyYXRpb24sCiAJICogdGhpcyBpcyBwcml2aWxlZ2VkIGFuZCB0aGVyZWZvcmUgYSBub3JtYWwgdXNlciBjYW4ndApAQCAtNjc2MCwxNyArNzEyNywyNSBAQAogCSAqIEplYW4gSUkgKi8KIAlpZiAoYWktPmZsYWdzICYgRkxBR19SQURJT19NQVNLKSByZXR1cm4gLUVORVRET1dOOwogCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYWktPnNlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBJZiB0aGVyZSdzIGFscmVhZHkgYSBzY2FuIGluIHByb2dyZXNzLCBkb24ndAorCSAqIHRyaWdnZXIgYW5vdGhlciBvbmUuICovCisJaWYgKGFpLT5zY2FuX3RpbWVvdXQgPiAwKQorCQlnb3RvIG91dDsKKwogCS8qIEluaXRpYXRlIGEgc2NhbiBjb21tYW5kICovCiAJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAljbWQuY21kPUNNRF9MSVNUQlNTOwotCWlmIChkb3duX2ludGVycnVwdGlibGUoJmFpLT5zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCWlzc3VlY29tbWFuZChhaSwgJmNtZCwgJnJzcCk7Ci0JYWktPnNjYW5fdGltZXN0YW1wID0gamlmZmllczsKKwlhaS0+c2Nhbl90aW1lb3V0ID0gUlVOX0FUKDMqSFopOworCXdha2UgPSAxOworCitvdXQ6CiAJdXAoJmFpLT5zZW0pOwotCi0JLyogQXQgdGhpcyBwb2ludCwganVzdCByZXR1cm4gdG8gdGhlIHVzZXIuICovCi0KKwlpZiAod2FrZSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhaS0+dGhyX3dhaXQpOwogCXJldHVybiAwOwogfQogCkBAIC02ODkwLDU5ICs3MjY1LDM4IEBACiAJCQkgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPnByaXY7Ci0JQlNTTGlzdFJpZCBCU1NMaXN0OwotCWludCByYzsKKwlCU1NMaXN0RWxlbWVudCAqbmV0OworCWludCBlcnIgPSAwOwogCWNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKIAotCS8qIFdoZW4gd2UgYXJlIGFzc29jaWF0ZWQgYWdhaW4sIHRoZSBzY2FuIGhhcyBzdXJlbHkgZmluaXNoZWQuCi0JICogSnVzdCBpbiBjYXNlLCBsZXQncyBtYWtlIHN1cmUgZW5vdWdoIHRpbWUgaGFzIGVsYXBzZWQgc2luY2UKLQkgKiB3ZSBzdGFydGVkIHRoZSBzY2FuLiAtIEphdmllciAqLwotCWlmKGFpLT5zY2FuX3RpbWVzdGFtcCAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLGFpLT5zY2FuX3RpbWVzdGFtcCszKkhaKSkgewotCQkvKiBJbXBvcnRhbnQgbm90ZSA6IHdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGNhbGxlcgotCQkgKiB1bnRpbCByZXN1bHRzIGFyZSByZWFkeSBmb3IgdmFyaW91cyByZWFzb25zLgotCQkgKiBGaXJzdCwgbWFuYWdpbmcgd2FpdCBxdWV1ZXMgaXMgY29tcGxleCBhbmQgcmFjeQotCQkgKiAodGhlcmUgbWF5IGJlIG11bHRpcGxlIHNpbXVsdGFuZW91cyBjYWxsZXJzKS4KLQkJICogU2Vjb25kLCB3ZSBncmFiIHNvbWUgcnRuZXRsaW5rIGxvY2sgYmVmb3JlIGNvbW1pbmcKLQkJICogaGVyZSAoaW4gZGV2X2lvY3RsKCkpLgotCQkgKiBUaGlyZCwgdGhlIGNhbGxlciBjYW4gd2FpdCBvbiB0aGUgV2lyZWxlc3MgRXZlbnQKLQkJICogLSBKZWFuIElJICovCisJLyogSWYgYSBzY2FuIGlzIGluLXByb2dyZXNzLCByZXR1cm4gLUVBR0FJTiAqLworCWlmIChhaS0+c2Nhbl90aW1lb3V0ID4gMCkKIAkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCWFpLT5zY2FuX3RpbWVzdGFtcCA9IDA7CiAKLQkvKiBUaGVyZSdzIG9ubHkgYSByYWNlIHdpdGggcHJvY19CU1NMaXN0X29wZW4oKSwgYnV0IGl0cwotCSAqIGNvbnNlcXVlbmNlcyBhcmUgYmVnbmlnbi4gU28gSSBkb24ndCBib3RoZXIgZml4aW5nIGl0IC0gSmF2aWVyICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYWktPnNlbSkpCisJCXJldHVybiAtRUFHQUlOOwogCi0JLyogVHJ5IHRvIHJlYWQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBzY2FuIHJlc3VsdCAqLwotCXJjID0gUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9CU1NMSVNURklSU1QsICZCU1NMaXN0LCBzaXplb2YoQlNTTGlzdCksIDEpOwotCWlmKChyYykgfHwgKEJTU0xpc3QuaW5kZXggPT0gMHhmZmZmKSkgewotCQkvKiBDbGllbnQgZXJyb3IsIG5vIHNjYW4gcmVzdWx0cy4uLgotCQkgKiBUaGUgY2FsbGVyIG5lZWQgdG8gcmVzdGFydCB0aGUgc2Nhbi4gKi8KLQkJcmV0dXJuIC1FTk9EQVRBOwotCX0KLQotCS8qIFJlYWQgYW5kIHBhcnNlIGFsbCBlbnRyaWVzICovCi0Jd2hpbGUoKCFyYykgJiYgKEJTU0xpc3QuaW5kZXggIT0gMHhmZmZmKSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkgKG5ldCwgJmFpLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKIAkJLyogVHJhbnNsYXRlIHRvIFdFIGZvcm1hdCB0aGlzIGVudHJ5ICovCiAJCWN1cnJlbnRfZXYgPSBhaXJvX3RyYW5zbGF0ZV9zY2FuKGRldiwgY3VycmVudF9ldiwKIAkJCQkJCSBleHRyYSArIGR3cnEtPmxlbmd0aCwKLQkJCQkJCSAmQlNTTGlzdCk7CisJCQkJCQkgJm5ldC0+YnNzKTsKIAogCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KIAkJaWYoKGV4dHJhICsgZHdycS0+bGVuZ3RoIC0gY3VycmVudF9ldikgPD0gSVdfRVZfQUREUl9MRU4pIHsKIAkJCS8qIEFzayB1c2VyIHNwYWNlIHRvIHRyeSBhZ2FpbiB3aXRoIGEgYmlnZ2VyIGJ1ZmZlciAqLwotCQkJcmV0dXJuIC1FMkJJRzsKKwkJCWVyciA9IC1FMkJJRzsKKwkJCWdvdG8gb3V0OwogCQl9Ci0KLQkJLyogUmVhZCBuZXh0IGVudHJ5ICovCi0JCXJjID0gUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9CU1NMSVNUTkVYVCwKLQkJCQkgICAgJkJTU0xpc3QsIHNpemVvZihCU1NMaXN0KSwgMSk7CiAJfQorCiAJLyogTGVuZ3RoIG9mIGRhdGEgKi8KIAlkd3JxLT5sZW5ndGggPSAoY3VycmVudF9ldiAtIGV4dHJhKTsKIAlkd3JxLT5mbGFncyA9IDA7CS8qIHRvZG8gKi8KIAotCXJldHVybiAwOworb3V0OgorCXVwKCZhaS0+c2VtKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03MDUwLDYgKzc0MDQsMTUgQEAKIAkoaXdfaGFuZGxlcikgYWlyb19nZXRfZW5jb2RlLAkJLyogU0lPQ0dJV0VOQ09ERSAqLwogCShpd19oYW5kbGVyKSBhaXJvX3NldF9wb3dlciwJCS8qIFNJT0NTSVdQT1dFUiAqLwogCShpd19oYW5kbGVyKSBhaXJvX2dldF9wb3dlciwJCS8qIFNJT0NHSVdQT1dFUiAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ1NJV0dFTklFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ0dJV0dFTklFICovCisJKGl3X2hhbmRsZXIpIGFpcm9fc2V0X2F1dGgsCQkvKiBTSU9DU0lXQVVUSCAqLworCShpd19oYW5kbGVyKSBhaXJvX2dldF9hdXRoLAkJLyogU0lPQ0dJV0FVVEggKi8KKwkoaXdfaGFuZGxlcikgYWlyb19zZXRfZW5jb2RlZXh0LAkvKiBTSU9DU0lXRU5DT0RFRVhUICovCisJKGl3X2hhbmRsZXIpIGFpcm9fZ2V0X2VuY29kZWV4dCwJLyogU0lPQ0dJV0VOQ09ERUVYVCAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NTSVdQTUtTQSAqLwogfTsKIAogLyogTm90ZSA6IGRvbid0IGRlc2NyaWJlIEFJUk9JRElGQyBhbmQgQUlST09MRElESUZDIGluIGhlcmUuCkBAIC03MjcwLDEzICs3NjMzLDExIEBACiAJY2FzZSBBSVJPR1NUQVQ6ICAgICByaWRjb2RlID0gUklEX1NUQVRVUzsgICAgICAgYnJlYWs7CiAJY2FzZSBBSVJPR1NUQVRTRDMyOiByaWRjb2RlID0gUklEX1NUQVRTREVMVEE7ICAgYnJlYWs7CiAJY2FzZSBBSVJPR1NUQVRTQzMyOiByaWRjb2RlID0gUklEX1NUQVRTOyAgICAgICAgYnJlYWs7Ci0jaWZkZWYgTUlDU1VQUE9SVAogCWNhc2UgQUlST0dNSUNTVEFUUzoKIAkJaWYgKGNvcHlfdG9fdXNlcihjb21wLT5kYXRhLCAmYWktPm1pY3N0YXRzLAogCQkJCSBtaW4oKGludCljb21wLT5sZW4sKGludClzaXplb2YoYWktPm1pY3N0YXRzKSkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwotI2VuZGlmCiAJY2FzZSBBSVJPUlJJRDogICAgICByaWRjb2RlID0gY29tcC0+cmlkbnVtOyAgICAgYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MzA4LDkgKzc2NjksNyBAQAogc3RhdGljIGludCB3cml0ZXJpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYWlyb25ldF9pb2N0bCAqY29tcCkgewogCXN0cnVjdCBhaXJvX2luZm8gKmFpID0gZGV2LT5wcml2OwogCWludCAgcmlkY29kZTsKLSNpZmRlZiBNSUNTVVBQT1JUCiAgICAgICAgIGludCAgZW5hYmxlZDsKLSNlbmRpZgogCVJlc3AgICAgICByc3A7CiAJc3RhdGljIGludCAoKiB3cml0ZXIpKHN0cnVjdCBhaXJvX2luZm8gKiwgdTE2IHJpZCwgY29uc3Qgdm9pZCAqLCBpbnQsIGludCk7CiAJdW5zaWduZWQgY2hhciAqaW9idWY7CkBAIC03MzY3LDExICs3NzI2LDkgQEAKIAogCQlQQzQ1MDBfcmVhZHJpZChhaSxSSURfU1RBVFNERUxUQUNMRUFSLGlvYnVmLFJJRFNJWkUsIDEpOwogCi0jaWZkZWYgTUlDU1VQUE9SVAogCQllbmFibGVkID0gYWktPm1pY3N0YXRzLmVuYWJsZWQ7CiAJCW1lbXNldCgmYWktPm1pY3N0YXRzLDAsc2l6ZW9mKGFpLT5taWNzdGF0cykpOwogCQlhaS0+bWljc3RhdHMuZW5hYmxlZCA9IGVuYWJsZWQ7Ci0jZW5kaWYKIAogCQlpZiAoY29weV90b191c2VyKGNvbXAtPmRhdGEsIGlvYnVmLAogCQkJCSBtaW4oKGludCljb21wLT5sZW4sIChpbnQpUklEU0laRSkpKSB7CkBAIC03NDg3LDcgKzc4NDQsNyBAQAogCWRpc2FibGVfTUFDKGFpLCAxKTsKIAogCWlmKCF3YWl0YnVzeSAoYWkpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiV2FpdGJ1c3kgaGFuZyBiZWZvcmUgUkVTRVRcbiIpOworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldhaXRidXN5IGhhbmcgYmVmb3JlIFJFU0VUIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC03NDk2LDcgKzc4NTMsNyBAQAogCXNzbGVlcCgxKTsJCQkvKiBXQVMgNjAwIDEyLzcvMDAgKi8KIAogCWlmKCF3YWl0YnVzeSAoYWkpKXsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiV2FpdGJ1c3kgaGFuZyBBRlRFUiBSRVNFVFxuIik7CisJCWFpcm9fcHJpbnRfaW5mbyhhaS0+ZGV2LT5uYW1lLCAiV2FpdGJ1c3kgaGFuZyBBRlRFUiBSRVNFVCIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlyZXR1cm4gMDsKQEAgLTc1MjQsNyArNzg4MSw3IEBACiAKIAlpZighd2FpdGJ1c3koYWkpKSB7CiAJCWNsZWFyX2JpdCAoRkxBR19GTEFTSElORywgJmFpLT5mbGFncyk7Ci0JCXByaW50ayhLRVJOX0lORk8gIldhaXRidXN5IGhhbmcgYWZ0ZXIgc2V0Zmxhc2ggbW9kZVxuIik7CisJCWFpcm9fcHJpbnRfaW5mbyhhaS0+ZGV2LT5uYW1lLCAiV2FpdGJ1c3kgaGFuZyBhZnRlciBzZXRmbGFzaCBtb2RlIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKQEAgLTc1NTMsNyArNzkxMCw3IEBACiAKIAkvKiB0aW1lb3V0IGZvciBidXN5IGNsZWFyIHdhaXQgKi8KIAlpZih3YWl0dGltZSA8PSAwICl7Ci0JCXByaW50ayhLRVJOX0lORk8gImZsYXNoIHB1dGNoYXIgYnVzeXdhaXQgdGltZW91dCEgXG4iKTsKKwkJYWlyb19wcmludF9pbmZvKGFpLT5kZXYtPm5hbWUsICJmbGFzaCBwdXRjaGFyIGJ1c3l3YWl0IHRpbWVvdXQhIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC03NjQyLDcgKzc5OTksNyBAQAogCWlmICghdGVzdF9iaXQoRkxBR19NUEksJmFpLT5mbGFncykpCiAJCWZvciggaSA9IDA7IGkgPCBNQVhfRklEUzsgaSsrICkgewogCQkJYWktPmZpZHNbaV0gPSB0cmFuc21pdF9hbGxvY2F0ZQotCQkJCSggYWksIDIzMTIsIGkgPj0gTUFYX0ZJRFMgLyAyICk7CisJCQkJKCBhaSwgQUlST19ERUZfTVRVLCBpID49IE1BWF9GSURTIC8gMiApOwogCQl9CiAKIAlzc2xlZXAoMSk7CQkJLyogQWRkZWQgMTIvNy8wMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggZGZjMjQwMS4uODdhZmE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC0xMzcsNDQgKzEzNyw2IEBACiAjZGVmaW5lIE1BQ19CT09UX0NPTVBMRVRFICAgICAgIDB4MDAxMCAgICAgICAgLy8gTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkCiAjZGVmaW5lIE1BQ19JTklUX09LICAgICAgICAgICAgIDB4MDAwMiAgICAgICAgLy8gTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkCiAKLSNkZWZpbmUgQzgwMjExX1NVQlRZUEVfTUdNVF9BU1NfUkVRVUVTVCAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBDODAyMTFfU1VCVFlQRV9NR01UX0FTU19SRVNQT05TRSAgICAgICAgICAgICAgICAweDEwCi0jZGVmaW5lIEM4MDIxMV9TVUJUWVBFX01HTVRfUkVBU1NfUkVRVUVTVCAgICAgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQzgwMjExX1NVQlRZUEVfTUdNVF9SRUFTU19SRVNQT05TRSAgICAgICAgICAgICAgMHgzMAotI2RlZmluZSBDODAyMTFfU1VCVFlQRV9NR01UX1Byb2JlUmVxdWVzdCAgICAgICAgICAgICAgICAweDQwCi0jZGVmaW5lIEM4MDIxMV9TVUJUWVBFX01HTVRfUHJvYmVSZXNwb25zZSAgICAgICAgICAgICAgIDB4NTAKLSNkZWZpbmUgQzgwMjExX1NVQlRZUEVfTUdNVF9CRUFDT04gICAgICAgICAgICAgICAgICAgICAgMHg4MAotI2RlZmluZSBDODAyMTFfU1VCVFlQRV9NR01UX0FUSU0gICAgICAgICAgICAgICAgICAgICAgICAweDkwCi0jZGVmaW5lIEM4MDIxMV9TVUJUWVBFX01HTVRfRElTQVNTT1NJQVRJT04gICAgICAgICAgICAgIDB4QTAKLSNkZWZpbmUgQzgwMjExX1NVQlRZUEVfTUdNVF9BdXRoZW50aWNhdGlvbiAgICAgICAgICAgICAgMHhCMAotI2RlZmluZSBDODAyMTFfU1VCVFlQRV9NR01UX0RlYXV0aGVudGljYXRpb24gICAgMHhDMAotCi0jZGVmaW5lIEM4MDIxMV9NR01UX0FBTl9PUEVOU1lTVEVNICAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgQzgwMjExX01HTVRfQUFOX1NIQVJFREtFWSAgICAgICAgICAgICAgIDB4MDAwMQotCi0jZGVmaW5lIEM4MDIxMV9NR01UX0NBUEFCSUxJVFlfRVNTICAgICAgICAgICAgICAweDAwMDEgIC8vIHNlZSA4MDIuMTEgcC41OAotI2RlZmluZSBDODAyMTFfTUdNVF9DQVBBQklMSVRZX0lCU1MgICAgICAgICAgICAgMHgwMDAyICAvLyAgICAgIC0gIiAtCi0jZGVmaW5lIEM4MDIxMV9NR01UX0NBUEFCSUxJVFlfQ0ZQb2xsYWJsZSAgICAgICAweDAwMDQgIC8vICAgICAgLSAiIC0KLSNkZWZpbmUgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9DRlBvbGxSZXF1ZXN0ICAgIDB4MDAwOCAgLy8gICAgICAtICIgLQotI2RlZmluZSBDODAyMTFfTUdNVF9DQVBBQklMSVRZX1ByaXZhY3kgICAgICAgICAgMHgwMDEwICAvLyAgICAgIC0gIiAtCi0KLSNkZWZpbmUgQzgwMjExX01HTVRfU0NfU3VjY2VzcyAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQzgwMjExX01HTVRfU0NfVW5zcGVjaWZpZWQgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQzgwMjExX01HTVRfU0NfU3VwcG9ydENhcGFiaWxpdGllcyAgICAgIDEwCi0jZGVmaW5lIEM4MDIxMV9NR01UX1NDX1JlYXNzRGVuaWVkICAgICAgICAgICAgICAxMQotI2RlZmluZSBDODAyMTFfTUdNVF9TQ19Bc3NEZW5pZWQgICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgQzgwMjExX01HTVRfU0NfQXV0aEFsZ05vdFN1cHBvcnRlZCAgICAgIDEzCi0jZGVmaW5lIEM4MDIxMV9NR01UX1NDX0F1dGhUcmFuc1NlcU51bUVycm9yICAgICAxNAotI2RlZmluZSBDODAyMTFfTUdNVF9TQ19BdXRoUmVqZWN0Q2hhbGxlbmdlICAgICAgMTUKLSNkZWZpbmUgQzgwMjExX01HTVRfU0NfQXV0aFJlamVjdFRpbWVvdXQgICAgICAgIDE2Ci0jZGVmaW5lIEM4MDIxMV9NR01UX1NDX0Fzc0RlbmllZEhhbmRsZUFQICAgICAgICAxNwotI2RlZmluZSBDODAyMTFfTUdNVF9TQ19Bc3NEZW5pZWRCU1NSYXRlICAgICAgICAgMTgKLQotI2RlZmluZSBDODAyMTFfTUdNVF9FbGVtZW50SURfU1NJRCAgICAgICAgICAgICAgMAotI2RlZmluZSBDODAyMTFfTUdNVF9FbGVtZW50SURfU3VwcG9ydGVkUmF0ZXMgICAgMQotI2RlZmluZSBDODAyMTFfTUdNVF9FbGVtZW50SURfQ2hhbGxlbmdlVGV4dCAgICAgMTYKLSNkZWZpbmUgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9TaG9ydFByZWFtYmxlICAgIDB4MDAyMAotCiAjZGVmaW5lIE1JQl9NQVhfREFUQV9CWVRFUyAgICAyMTIKICNkZWZpbmUgTUlCX0hFQURFUl9TSVpFICAgICAgIDQgICAgLyogZmlyc3QgZm91ciBmaWVsZHMgKi8KIApAQCAtMjgzNSw3ICsyNzk3LDcgQEAKIAkJCQl1OCBjaGFubmVsKQogewogCWludCByZWpvaW4gPSAwOwotCWludCBuZXcgPSBjYXBhYmlsaXR5ICAmIEM4MDIxMV9NR01UX0NBUEFCSUxJVFlfU2hvcnRQcmVhbWJsZSA/CisJaW50IG5ldyA9IGNhcGFiaWxpdHkgJiBNRklFX1RZUEVfUE9XRVJfQ09OU1RSQUlOVCA/CiAJCVNIT1JUX1BSRUFNQkxFIDogTE9OR19QUkVBTUJMRTsKIAogCWlmIChwcml2LT5wcmVhbWJsZSAhPSBuZXcpIHsKQEAgLTI5MjEsMTEgKzI4ODMsMTEgQEAKIAltZW1jcHkoaGVhZGVyLmFkZHIyLCBwcml2LT5kZXYtPmRldl9hZGRyLCA2KTsKIAltZW1jcHkoaGVhZGVyLmFkZHIzLCBwcml2LT5DdXJyZW50QlNTSUQsIDYpOwogCi0JYm9keS5jYXBhYmlsaXR5ID0gY3B1X3RvX2xlMTYoQzgwMjExX01HTVRfQ0FQQUJJTElUWV9FU1MpOworCWJvZHkuY2FwYWJpbGl0eSA9IGNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9FU1MpOwogCWlmIChwcml2LT53ZXBfaXNfb24pCi0JCWJvZHkuY2FwYWJpbGl0eSB8PSBjcHVfdG9fbGUxNihDODAyMTFfTUdNVF9DQVBBQklMSVRZX1ByaXZhY3kpOworCQlib2R5LmNhcGFiaWxpdHkgfD0gY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpOwogCWlmIChwcml2LT5wcmVhbWJsZSA9PSBTSE9SVF9QUkVBTUJMRSkKLQkJYm9keS5jYXBhYmlsaXR5IHw9IGNwdV90b19sZTE2KEM4MDIxMV9NR01UX0NBUEFCSUxJVFlfU2hvcnRQcmVhbWJsZSk7CisJCWJvZHkuY2FwYWJpbGl0eSB8PSBjcHVfdG9fbGUxNihNRklFX1RZUEVfUE9XRVJfQ09OU1RSQUlOVCk7CiAKIAlib2R5Lmxpc3Rlbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2KHByaXYtPmxpc3Rlbl9pbnRlcnZhbCAqIHByaXYtPmJlYWNvbl9wZXJpb2QpOwogCkBAIC0yOTM5LDEwICsyOTAxLDEwIEBACiAJCWJvZHlzaXplID0gMTIgKyBwcml2LT5TU0lEX3NpemU7CiAJfQogCi0Jc3NpZF9lbF9wWzBdID0gQzgwMjExX01HTVRfRWxlbWVudElEX1NTSUQ7CisJc3NpZF9lbF9wWzBdID0gTUZJRV9UWVBFX1NTSUQ7CiAJc3NpZF9lbF9wWzFdID0gcHJpdi0+U1NJRF9zaXplOwogCW1lbWNweShzc2lkX2VsX3AgKyAyLCBwcml2LT5TU0lELCBwcml2LT5TU0lEX3NpemUpOwotCXNzaWRfZWxfcFsyICsgcHJpdi0+U1NJRF9zaXplXSA9IEM4MDIxMV9NR01UX0VsZW1lbnRJRF9TdXBwb3J0ZWRSYXRlczsKKwlzc2lkX2VsX3BbMiArIHByaXYtPlNTSURfc2l6ZV0gPSBNRklFX1RZUEVfUkFURVM7CiAJc3NpZF9lbF9wWzMgKyBwcml2LT5TU0lEX3NpemVdID0gNDsgLyogbGVuIG9mIHN1cG9ydGVkIHJhdGVzICovCiAJbWVtY3B5KHNzaWRfZWxfcCArIDQgKyBwcml2LT5TU0lEX3NpemUsIGF0bWVsX2Jhc2ljX3JhdGVzLCA0KTsKIApAQCAtMzAwNCw3ICsyOTY2LDcgQEAKIAkJCSAgIHUxNiBiZWFjb25fcGVyaW9kLCB1OCBjaGFubmVsLCB1OCByc3NpLCB1OCBzc2lkX2xlbiwKIAkJCSAgIHU4ICpzc2lkLCBpbnQgaXNfYmVhY29uKQogewotCXU4ICpic3MgPSBjYXBhYmlsaXR5ICYgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9FU1MgPyBoZWFkZXItPmFkZHIyIDogaGVhZGVyLT5hZGRyMzsKKwl1OCAqYnNzID0gY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MgPyBoZWFkZXItPmFkZHIyIDogaGVhZGVyLT5hZGRyMzsKIAlpbnQgaSwgaW5kZXg7CiAKIAlmb3IgKGluZGV4ID0gLTEsIGkgPSAwOyBpIDwgcHJpdi0+QlNTX2xpc3RfZW50cmllczsgaSsrKQpAQCAtMzAzMCwxNiArMjk5MiwxNiBAQAogCiAJcHJpdi0+QlNTaW5mb1tpbmRleF0uY2hhbm5lbCA9IGNoYW5uZWw7CiAJcHJpdi0+QlNTaW5mb1tpbmRleF0uYmVhY29uX3BlcmlvZCA9IGJlYWNvbl9wZXJpb2Q7Ci0JcHJpdi0+QlNTaW5mb1tpbmRleF0uVXNpbmdXRVAgPSBjYXBhYmlsaXR5ICYgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9Qcml2YWN5OworCXByaXYtPkJTU2luZm9baW5kZXhdLlVzaW5nV0VQID0gY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCW1lbWNweShwcml2LT5CU1NpbmZvW2luZGV4XS5TU0lELCBzc2lkLCBzc2lkX2xlbik7CiAJcHJpdi0+QlNTaW5mb1tpbmRleF0uU1NJRHNpemUgPSBzc2lkX2xlbjsKIAotCWlmIChjYXBhYmlsaXR5ICYgQzgwMjExX01HTVRfQ0FQQUJJTElUWV9JQlNTKQorCWlmIChjYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpCiAJCXByaXYtPkJTU2luZm9baW5kZXhdLkJTU3R5cGUgPSBJV19NT0RFX0FESE9DOwotCWVsc2UgaWYgKGNhcGFiaWxpdHkgJiBDODAyMTFfTUdNVF9DQVBBQklMSVRZX0VTUykKKwllbHNlIGlmIChjYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKIAkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9SVdfTU9ERV9JTkZSQTsKIAotCXByaXYtPkJTU2luZm9baW5kZXhdLnByZWFtYmxlID0gY2FwYWJpbGl0eSAmIEM4MDIxMV9NR01UX0NBUEFCSUxJVFlfU2hvcnRQcmVhbWJsZSA/CisJcHJpdi0+QlNTaW5mb1tpbmRleF0ucHJlYW1ibGUgPSBjYXBhYmlsaXR5ICYgTUZJRV9UWVBFX1BPV0VSX0NPTlNUUkFJTlQgPwogCQlTSE9SVF9QUkVBTUJMRSA6IExPTkdfUFJFQU1CTEU7CiB9CiAKQEAgLTMwNTAsNyArMzAxMiw3IEBACiAJdTE2IHRyYW5zX3NlcV9ubyA9IGxlMTZfdG9fY3B1KGF1dGgtPnRyYW5zX3NlcSk7CiAJdTE2IHN5c3RlbSA9IGxlMTZfdG9fY3B1KGF1dGgtPmFsZyk7CiAKLQlpZiAoc3RhdHVzID09IEM4MDIxMV9NR01UX1NDX1N1Y2Nlc3MgJiYgIXByaXYtPndlcF9pc19vbikgeworCWlmIChzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUyAmJiAhcHJpdi0+d2VwX2lzX29uKSB7CiAJCS8qIG5vIFdFUCAqLwogCQlpZiAocHJpdi0+c3RhdGlvbl93YXNfYXNzb2NpYXRlZCkgewogCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9SRUFTU09DSUFUSU5HKTsKQEAgLTMwNjMsMTkgKzMwMjUsMTkgQEAKIAkJfQogCX0KIAotCWlmIChzdGF0dXMgPT0gQzgwMjExX01HTVRfU0NfU3VjY2VzcyAmJiBwcml2LT53ZXBfaXNfb24pIHsKKwlpZiAoc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MgJiYgcHJpdi0+d2VwX2lzX29uKSB7CiAJCWludCBzaG91bGRfYXNzb2NpYXRlID0gMDsKIAkJLyogV0VQICovCiAJCWlmICh0cmFuc19zZXFfbm8gIT0gcHJpdi0+RXhwZWN0ZWRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0pCiAJCQlyZXR1cm47CiAKLQkJaWYgKHN5c3RlbSA9PSBDODAyMTFfTUdNVF9BQU5fT1BFTlNZU1RFTSkgeworCQlpZiAoc3lzdGVtID09IFdMQU5fQVVUSF9PUEVOKSB7CiAJCQlpZiAodHJhbnNfc2VxX25vID09IDB4MDAwMikgewogCQkJCXNob3VsZF9hc3NvY2lhdGUgPSAxOwogCQkJfQotCQl9IGVsc2UgaWYgKHN5c3RlbSA9PSBDODAyMTFfTUdNVF9BQU5fU0hBUkVES0VZKSB7CisJCX0gZWxzZSBpZiAoc3lzdGVtID09IFdMQU5fQVVUSF9TSEFSRURfS0VZKSB7CiAJCQlpZiAodHJhbnNfc2VxX25vID09IDB4MDAwMiAmJgotCQkJICAgIGF1dGgtPmVsX2lkID09IEM4MDIxMV9NR01UX0VsZW1lbnRJRF9DaGFsbGVuZ2VUZXh0KSB7CisJCQkgICAgYXV0aC0+ZWxfaWQgPT0gTUZJRV9UWVBFX0NIQUxMRU5HRSkgewogCQkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBzeXN0ZW0sIGF1dGgtPmNoYWxsX3RleHQsIGF1dGgtPmNoYWxsX3RleHRfbGVuKTsKIAkJCQlyZXR1cm47CiAJCQl9IGVsc2UgaWYgKHRyYW5zX3NlcV9ubyA9PSAweDAwMDQpIHsKQEAgLTMxNDAsOCArMzEwMiw4IEBACiAJaWYgKGZyYW1lX2xlbiA8IDggKyByYXRlc19sZW4pCiAJCXJldHVybjsKIAotCWlmIChzdGF0dXMgPT0gQzgwMjExX01HTVRfU0NfU3VjY2VzcykgewotCQlpZiAoc3VidHlwZSA9PSBDODAyMTFfU1VCVFlQRV9NR01UX0FTU19SRVNQT05TRSkKKwlpZiAoc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJaWYgKHN1YnR5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1ApCiAJCQlwcml2LT5Bc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudCA9IDA7CiAJCWVsc2UKIAkJCXByaXYtPlJlQXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQgPSAwOwpAQCAtMzE3OCw5ICszMTQwLDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzdWJ0eXBlID09IEM4MDIxMV9TVUJUWVBFX01HTVRfQVNTX1JFU1BPTlNFICYmCi0JICAgIHN0YXR1cyAhPSBDODAyMTFfTUdNVF9TQ19Bc3NEZW5pZWRCU1NSYXRlICYmCi0JICAgIHN0YXR1cyAhPSBDODAyMTFfTUdNVF9TQ19TdXBwb3J0Q2FwYWJpbGl0aWVzICYmCisJaWYgKHN1YnR5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1AgJiYKKwkgICAgc3RhdHVzICE9IFdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9SQVRFUyAmJgorCSAgICBzdGF0dXMgIT0gV0xBTl9TVEFUVVNfQ0FQU19VTlNVUFBPUlRFRCAmJgogCSAgICBwcml2LT5Bc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudCA8IE1BWF9BU1NPQ0lBVElPTl9SRVRSSUVTKSB7CiAJCW1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7CiAJCXByaXYtPkFzc29jaWF0aW9uUmVxdWVzdFJldHJ5Q250Kys7CkBAIC0zMTg4LDkgKzMxNTAsOSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHN1YnR5cGUgPT0gQzgwMjExX1NVQlRZUEVfTUdNVF9SRUFTU19SRVNQT05TRSAmJgotCSAgICBzdGF0dXMgIT0gQzgwMjExX01HTVRfU0NfQXNzRGVuaWVkQlNTUmF0ZSAmJgotCSAgICBzdGF0dXMgIT0gQzgwMjExX01HTVRfU0NfU3VwcG9ydENhcGFiaWxpdGllcyAmJgorCWlmIChzdWJ0eXBlID09IElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1AgJiYKKwkgICAgc3RhdHVzICE9IFdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9SQVRFUyAmJgorCSAgICBzdGF0dXMgIT0gV0xBTl9TVEFUVVNfQ0FQU19VTlNVUFBPUlRFRCAmJgogCSAgICBwcml2LT5Bc3NvY2lhdGlvblJlcXVlc3RSZXRyeUNudCA8IE1BWF9BU1NPQ0lBVElPTl9SRVRSSUVTKSB7CiAJCW1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7CiAJCXByaXYtPlJlQXNzb2NpYXRpb25SZXF1ZXN0UmV0cnlDbnQrKzsKQEAgLTMzMjUsOCArMzI4Nyw4IEBACiAKIAlzdWJ0eXBlID0gbGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jdGwpICYgSUVFRTgwMjExX0ZDVExfU1RZUEU7CiAJc3dpdGNoIChzdWJ0eXBlKSB7Ci0JY2FzZSBDODAyMTFfU1VCVFlQRV9NR01UX0JFQUNPTjoKLQljYXNlIEM4MDIxMV9TVUJUWVBFX01HTVRfUHJvYmVSZXNwb25zZToKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKIAogCQkvKiBiZWFjb24gZnJhbWUgaGFzIG11bHRpcGxlIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgLQogCQkgICBuZXZlciBsZXQgYW4gZW5naW5lZXIgbG9vc2Ugd2l0aCBhIGRhdGEgc3RydWN0dXJlIGRlc2lnbi4gKi8KQEAgLTMzODQsMTkgKzMzNDYsMTkgQEAKIAkJCQkJICAgICAgIGJlYWNvbl9pbnRlcnZhbCwgY2hhbm5lbCwgcnNzaSwKIAkJCQkJICAgICAgIHNzaWRfbGVuZ3RoLAogCQkJCQkgICAgICAgJmJlYWNvbi0+cmF0ZXNfZWxfaWQsCi0JCQkJCSAgICAgICBzdWJ0eXBlID09IEM4MDIxMV9TVUJUWVBFX01HTVRfQkVBQ09OKTsKKwkJCQkJICAgICAgIHN1YnR5cGUgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIEM4MDIxMV9TVUJUWVBFX01HTVRfQXV0aGVudGljYXRpb246CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKIAogCQlpZiAocHJpdi0+c3RhdGlvbl9zdGF0ZSA9PSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HKQogCQkJYXV0aGVudGljYXRlKHByaXYsIGZyYW1lX2xlbik7CiAKIAkJYnJlYWs7CiAKLQljYXNlIEM4MDIxMV9TVUJUWVBFX01HTVRfQVNTX1JFU1BPTlNFOgotCWNhc2UgQzgwMjExX1NVQlRZUEVfTUdNVF9SRUFTU19SRVNQT05TRToKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKIAogCQlpZiAocHJpdi0+c3RhdGlvbl9zdGF0ZSA9PSBTVEFUSU9OX1NUQVRFX0FTU09DSUFUSU5HIHx8CiAJCSAgICBwcml2LT5zdGF0aW9uX3N0YXRlID09IFNUQVRJT05fU1RBVEVfUkVBU1NPQ0lBVElORykKQEAgLTM0MDQsNyArMzM2Niw3IEBACiAKIAkJYnJlYWs7CiAKLQljYXNlIEM4MDIxMV9TVUJUWVBFX01HTVRfRElTQVNTT1NJQVRJT046CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CiAJCWlmIChwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQgJiYKIAkJICAgIHByaXYtPm9wZXJhdGluZ19tb2RlID09IElXX01PREVfSU5GUkEgJiYKIAkJICAgIGlzX2ZyYW1lX2Zyb21fY3VycmVudF9ic3MocHJpdiwgaGVhZGVyKSkgewpAQCAtMzQxNyw3ICszMzc5LDcgQEAKIAogCQlicmVhazsKIAotCWNhc2UgQzgwMjExX1NVQlRZUEVfTUdNVF9EZWF1dGhlbnRpY2F0aW9uOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKIAkJaWYgKHByaXYtPm9wZXJhdGluZ19tb2RlID09IElXX01PREVfSU5GUkEgJiYKIAkJICAgIGlzX2ZyYW1lX2Zyb21fY3VycmVudF9ic3MocHJpdiwgaGVhZGVyKSkgewogCQkJcHJpdi0+c3RhdGlvbl93YXNfYXNzb2NpYXRlZCA9IDA7CkBAIC0zNDUzLDEyICszNDE1LDEyIEBACiAJCQlwcml2LT5BdXRoZW50aWNhdGlvblJlcXVlc3RSZXRyeUNudCA9IDA7CiAJCQlyZXN0YXJ0X3NlYXJjaChwcml2KTsKIAkJfSBlbHNlIHsKLQkJCWludCBhdXRoID0gQzgwMjExX01HTVRfQUFOX09QRU5TWVNURU07CisJCQlpbnQgYXV0aCA9IFdMQU5fQVVUSF9PUEVOOwogCQkJcHJpdi0+QXV0aGVudGljYXRpb25SZXF1ZXN0UmV0cnlDbnQrKzsKIAkJCXByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gPSAweDAwMDE7CiAJCQltb2RfdGltZXIoJnByaXYtPm1hbmFnZW1lbnRfdGltZXIsIGppZmZpZXMgKyBNR01UX0pJRkZJRVMpOwogCQkJaWYgKHByaXYtPndlcF9pc19vbiAmJiBwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkKQotCQkJCWF1dGggPSBDODAyMTFfTUdNVF9BQU5fU0hBUkVES0VZOworCQkJCWF1dGggPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKIAkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBhdXRoLCBOVUxMLCAwKTsKIAkgIH0KIAkgIGJyZWFrOwpAQCAtMzU1OCwxNCArMzUyMCwxNCBAQAogCQkJCXByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQgPSBwcml2LT5zdGF0aW9uX2lzX2Fzc29jaWF0ZWQ7CiAJCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9SRUFEWSk7CiAJCQl9IGVsc2UgewotCQkJCWludCBhdXRoID0gQzgwMjExX01HTVRfQUFOX09QRU5TWVNURU07CisJCQkJaW50IGF1dGggPSBXTEFOX0FVVEhfT1BFTjsKIAkJCQlwcml2LT5BdXRoZW50aWNhdGlvblJlcXVlc3RSZXRyeUNudCA9IDA7CiAJCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9BVVRIRU5USUNBVElORyk7CiAKIAkJCQltb2RfdGltZXIoJnByaXYtPm1hbmFnZW1lbnRfdGltZXIsIGppZmZpZXMgKyBNR01UX0pJRkZJRVMpOwogCQkJCXByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gPSAweDAwMDE7CiAJCQkJaWYgKHByaXYtPndlcF9pc19vbiAmJiBwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkKQotCQkJCQlhdXRoID0gQzgwMjExX01HTVRfQUFOX1NIQVJFREtFWTsKKwkJCQkJYXV0aCA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOwogCQkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBhdXRoLCBOVUxMLCAwKTsKIAkJCX0KIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwppbmRleCA3NTNhMWRlLi4wNmMzZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCkBAIC0zMTQxLDcgKzMxNDEsNyBAQAogCWlmIChyZXQgPT0gMSkgewogCQlzdGEgPSBhcF9hZGRfc3RhKGFwLCBzdGFfYWRkcik7CiAJCWlmICghc3RhKQotCQkJcmV0ID0gLTE7CisJCQlyZXR1cm4gLTE7CiAJCXN0YS0+ZmxhZ3MgPSBXTEFOX1NUQV9BVVRIIHwgV0xBTl9TVEFfQVNTT0M7CiAJCXN0YS0+YXAgPSAxOwogCQltZW1zZXQoc3RhLT5zdXBwb3J0ZWRfcmF0ZXMsIDAsIHNpemVvZihzdGEtPnN1cHBvcnRlZF9yYXRlcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCmluZGV4IDhiYzBiNTI4Li5kMzM1YjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCkBAIC01ODUsOCArNTg1LDYgQEAKIAlwYXJzZSA9IGttYWxsb2Moc2l6ZW9mKGNpc3BhcnNlX3QpLCBHRlBfS0VSTkVMKTsKIAlod19wcml2ID0ga21hbGxvYyhzaXplb2YoKmh3X3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAocGFyc2UgPT0gTlVMTCB8fCBod19wcml2ID09IE5VTEwpIHsKLQkJa2ZyZWUocGFyc2UpOwotCQlrZnJlZShod19wcml2KTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtODc3LDcgKzg3NSw2IEBACiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTAxLCAweDA3NzcpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEyNiwgMHg4MDAwKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMzgsIDB4MDAwMiksCi0JUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTU2LCAweDAwMDIpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDI1MCwgMHgwMDAyKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyNmYsIDB4MDMwYiksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjc0LCAweDE2MTIpLApAQCAtODkxLDYgKzg4OCwxMCBAQAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4ZDYwMSwgMHgwMDAyKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGQ2MDEsIDB4MDAwNSksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHhkNjAxLCAweDAwMTApLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEX1BST0RfSUQxKDB4MDE1NiwgMHgwMDAyLCAiSU5URVJTSUwiLAorCQkJCQkgMHg3NGM1ZTQwZCksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfUFJPRF9JRDEoMHgwMTU2LCAweDAwMDIsICJJbnRlcnNpbCIsCisJCQkJCSAweDRiODAxYTE3KSwKIAlQQ01DSUFfTUZDX0RFVklDRV9QUk9EX0lEMTIoMCwgIlNhbkRpc2siLCAiQ29ubmVjdFBsdXMiLAogCQkJCSAgICAweDdhOTU0YmQ5LCAweDc0YmUwMGM2KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjM0KApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCmluZGV4IGIxZjE0MmQuLjMyOGU5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKQEAgLTkyOCwxNSArOTI4LDE1IEBACiAKIAlyZXMgPSBoZmEzODR4X2NtZChkZXYsIEhGQTM4NFhfQ01EQ09ERV9BQ0NFU1NfV1JJVEUsIHJpZCwgTlVMTCwgTlVMTCk7CiAJdXAoJmxvY2FsLT5yaWRfYmFwX3NlbSk7CisKIAlpZiAocmVzKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaGZhMzg0eF9zZXRfcmlkOiBDTURDT0RFX0FDQ0VTU19XUklURSAiCiAJCSAgICAgICAiZmFpbGVkIChyZXM9JWQsIHJpZD0lMDR4LCBsZW49JWQpXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCByZXMsIHJpZCwgbGVuKTsKLQkJcmV0dXJuIHJlczsKLQl9CiAKLQlpZiAocmVzID09IC1FVElNRURPVVQpCi0JCXByaXNtMl9od19yZXNldChkZXYpOworCQlpZiAocmVzID09IC1FVElNRURPVVQpCisJCQlwcmlzbTJfaHdfcmVzZXQoZGV2KTsKKwl9CiAKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCmluZGV4IGYzZTBjZTEuLjhiMzdlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKQEAgLTMzNTgsMTAgKzMzNTgsNiBAQAogCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgewogCQlpZiAoIXN0YV9wdHIpCiAJCQlsb2NhbC0+dHhfa2V5aWR4ID0gaTsKLQkJZWxzZSBpZiAoaSkgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZG9uZTsKLQkJfQogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYwppbmRleCAyZTg1YmRjLi4xOTRmMDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCW1lbXNldChod19wcml2LCAwLCBzaXplb2YoKmh3X3ByaXYpKTsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJcmV0dXJuIC1FSU87CisJCWdvdG8gZXJyX291dF9mcmVlOwogCiAJcGh5bWVtID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCkBAIC0zNjgsNiArMzY4LDggQEAKICBlcnJfb3V0X2Rpc2FibGU6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXByaXNtMl9mcmVlX2xvY2FsX2RhdGEoZGV2KTsKKworIGVycl9vdXRfZnJlZToKIAlrZnJlZShod19wcml2KTsKIAogCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMKaW5kZXggOTRmZTI0NC4uZWRhYWE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jCkBAIC0zNjgsNyArMzY4LDcgQEAKIAogCQlzd2l0Y2ggKGNpc1twb3NdKSB7CiAJCWNhc2UgQ0lTVFBMX0NPTkZJRzoKLQkJCWlmIChjaXNbcG9zICsgMV0gPCAxKQorCQkJaWYgKGNpc1twb3MgKyAxXSA8IDIpCiAJCQkJZ290byBjaXNfZXJyb3I7CiAJCQlybXN6ID0gKGNpc1twb3MgKyAyXSAmIDB4M2MpID4+IDI7CiAJCQlyYXN6ID0gY2lzW3BvcyArIDJdICYgMHgwMzsKQEAgLTM5MCw3ICszOTAsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBDSVNUUExfTUFORklEOgotCQkJaWYgKGNpc1twb3MgKyAxXSA8IDQpCisJCQlpZiAoY2lzW3BvcyArIDFdIDwgNSkKIAkJCQlnb3RvIGNpc19lcnJvcjsKIAkJCW1hbmZpZDEgPSBjaXNbcG9zICsgMl0gKyAoY2lzW3BvcyArIDNdIDw8IDgpOwogCQkJbWFuZmlkMiA9IGNpc1twb3MgKyA0XSArIChjaXNbcG9zICsgNV0gPDwgOCk7CkBAIC00NTIsNyArNDUyLDcgQEAKIAltZW1zZXQoaHdfcHJpdiwgMCwgc2l6ZW9mKCpod19wcml2KSk7CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCXJldHVybiAtRUlPOworCQlnb3RvIGVycl9vdXRfZnJlZTsKIAogCS8qIE5hdGlvbmFsIERhdGFjb21tIE5DUDEzMCBiYXNlZCBvbiBUTUQ3MTYwLCBub3QgUExYOTA1Mi4gKi8KIAl0bWQ3MTYwID0gKHBkZXYtPnZlbmRvciA9PSAweDE1ZTgpICYmIChwZGV2LT5kZXZpY2UgPT0gMHgwMTMxKTsKQEAgLTU2Nyw5ICs1NjcsNiBAQAogCXJldHVybiBob3N0YXBfaHdfcmVhZHkoZGV2KTsKIAogIGZhaWw6Ci0JcHJpc20yX2ZyZWVfbG9jYWxfZGF0YShkZXYpOwotCWtmcmVlKGh3X3ByaXYpOwotCiAJaWYgKGlycV9yZWdpc3RlcmVkICYmIGRldikKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAKQEAgLTU3Nyw2ICs1NzQsMTAgQEAKIAkJaW91bm1hcChhdHRyX21lbSk7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcHJpc20yX2ZyZWVfbG9jYWxfZGF0YShkZXYpOworCisgZXJyX291dF9mcmVlOgorCWtmcmVlKGh3X3ByaXYpOwogCiAJcmV0dXJuIC1FTk9ERVY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKaW5kZXggNjI5MGM5Zi4uNzIzMzVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTY3LDEyICsxNjcsMTIgQEAKIAogI2luY2x1ZGUgImlwdzIxMDAuaCIKIAotI2RlZmluZSBJUFcyMTAwX1ZFUlNJT04gIjEuMS4zIgorI2RlZmluZSBJUFcyMTAwX1ZFUlNJT04gImdpdC0xLjIuMiIKIAogI2RlZmluZSBEUlZfTkFNRQkiaXB3MjEwMCIKICNkZWZpbmUgRFJWX1ZFUlNJT04JSVBXMjEwMF9WRVJTSU9OCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiSW50ZWwoUikgUFJPL1dpcmVsZXNzIDIxMDAgTmV0d29yayBEcml2ZXIiCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDUgSW50ZWwgQ29ycG9yYXRpb24iCisjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDYgSW50ZWwgQ29ycG9yYXRpb24iCiAKIC8qIERlYnVnZ2luZyBzdHVmZiAqLwogI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCkBAIC0xNDE4LDcgKzE0MTgsNyBAQAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfRU5BQkxFRCkKIAkJcmV0dXJuIDA7CiAKLQlkb3duKCZwcml2LT5hZGFwdGVyX3NlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+YWRhcHRlcl9tdXRleCk7CiAKIAlpZiAocmZfa2lsbF9hY3RpdmUocHJpdikpIHsKIAkJSVBXX0RFQlVHX0hDKCJDb21tYW5kIGFib3J0ZWQgZHVlIHRvIFJGIGtpbGwgYWN0aXZlLlxuIik7CkBAIC0xNDQ0LDcgKzE0NDQsNyBAQAogCX0KIAogICAgICAgZmFpbF91cDoKLQl1cCgmcHJpdi0+YWRhcHRlcl9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+YWRhcHRlcl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU3Niw3ICsxNTc2LDcgQEAKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+aGFuZ19jaGVjayk7CiAJfQogCi0JZG93bigmcHJpdi0+YWRhcHRlcl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFkYXB0ZXJfbXV0ZXgpOwogCiAJZXJyID0gaXB3MjEwMF9od19zZW5kX2NvbW1hbmQocHJpdiwgJmNtZCk7CiAJaWYgKGVycikgewpAQCAtMTU5NSw3ICsxNTk1LDcgQEAKIAlJUFdfREVCVUdfSU5GTygiVE9ETzogaW1wbGVtZW50IHNjYW4gc3RhdGUgbWFjaGluZVxuIik7CiAKICAgICAgIGZhaWxfdXA6Ci0JdXAoJnByaXYtPmFkYXB0ZXJfc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFkYXB0ZXJfbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE2NzIsNiArMTY3MiwxOCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyBpcHdfZ2Vvc1tdID0geworCXsJCQkvKiBSZXN0cmljdGVkICovCisJICItLS0iLAorCSAuYmdfY2hhbm5lbHMgPSAxNCwKKwkgLmJnID0ge3syNDEyLCAxfSwgezI0MTcsIDJ9LCB7MjQyMiwgM30sCisJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCisJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCisJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sIHsyNDY3LCAxMn0sCisJCXsyNDcyLCAxM30sIHsyNDg0LCAxNH19LAorCSB9LAorfTsKKwogc3RhdGljIGludCBpcHcyMTAwX3VwKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBkZWZlcnJlZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTcyNyw2ICsxNzM5LDEzIEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKKwkvKiBJbml0aWFsaXplIHRoZSBnZW8gKi8KKwlpZiAoaWVlZTgwMjExX3NldF9nZW8ocHJpdi0+aWVlZSwgJmlwd19nZW9zWzBdKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICJDb3VsZCBub3Qgc2V0IGdlb1xuIik7CisJCXJldHVybiAwOworCX0KKwlwcml2LT5pZWVlLT5mcmVxX2JhbmQgPSBJRUVFODAyMTFfMjRHSFpfQkFORDsKKwogCWxvY2sgPSBMT0NLX05PTkU7CiAJaWYgKGlwdzIxMDBfc2V0X29yZGluYWwocHJpdiwgSVBXX09SRF9QRVJTX0RCX0xPQ0ssICZsb2NrLCAmb3JkX2xlbikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCkBAIC0xODY5LDcgKzE4ODgsNyBAQAogCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfUkVTRVRfUEVORElORzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwogCi0JZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAkvKiBzdG9wIHRpbWVkIGNoZWNrcyBzbyB0aGF0IHRoZXkgZG9uJ3QgaW50ZXJmZXJlIHdpdGggcmVzZXQgKi8KIAlwcml2LT5zdG9wX2hhbmdfY2hlY2sgPSAxOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmhhbmdfY2hlY2spOwpAQCAtMTg3OSw3ICsxODk4LDcgQEAKIAkJd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKIAogCWlwdzIxMDBfdXAocHJpdiwgMCk7Ci0JdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAogfQogCkBAIC0yMzcxLDE1ICsyMzkwLDYgQEAKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IHVwLlxuIik7CiAJCXJldHVybjsKIAl9Ci0jaWZkZWYgQ09ORklHX0lQVzIxMDBfTU9OSVRPUgotCWlmICh1bmxpa2VseShwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUiAmJgotCQkgICAgIHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0sgJiYKLQkJICAgICBzdGF0dXMtPmZsYWdzICYgSVBXX1NUQVRVU19GTEFHX0NSQ19FUlJPUikpIHsKLQkJSVBXX0RFQlVHX1JYKCJDUkMgZXJyb3IgaW4gcGFja2V0LiAgRHJvcHBpbmcuXG4iKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKIAogCWlmICh1bmxpa2VseShwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUiAmJgogCQkgICAgICEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSkgewpAQCAtMjQyNyw2ICsyNDM3LDg5IEBACiAJcHJpdi0+cnhfcXVldWUuZHJ2W2ldLmhvc3RfYWRkciA9IHBhY2tldC0+ZG1hX2FkZHI7CiB9CiAKKyNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCisKK3N0YXRpYyB2b2lkIGlzcl9yeF9tb25pdG9yKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpLAorCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOworCXN0cnVjdCBpcHcyMTAwX3J4X3BhY2tldCAqcGFja2V0ID0gJnByaXYtPnJ4X2J1ZmZlcnNbaV07CisKKwkvKiBNYWdpYyBzdHJ1Y3QgdGhhdCBzbG90cyBpbnRvIHRoZSByYWRpb3RhcCBoZWFkZXIgLS0gbm8gcmVhc29uCisJICogdG8gYnVpbGQgdGhpcyBtYW51YWxseSBlbGVtZW50IGJ5IGVsZW1lbnQsIHdlIGNhbiB3cml0ZSBpdCBtdWNoCisJICogbW9yZSBlZmZpY2llbnRseSB0aGFuIHdlIGNhbiBwYXJzZSBpdC4gT1JERVIgTUFUVEVSUyBIRVJFICovCisJc3RydWN0IGlwd19ydF9oZHIgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBydF9oZHI7CisJCXM4IHJ0X2RibXNpZ25hbDsgLyogc2lnbmFsIGluIGRiTSwga2x1Z2VkIHRvIHNpZ25lZCAqLworCX0gKmlwd19ydDsKKworCUlQV19ERUJVR19SWCgiSGFuZGxlci4uLlxuIik7CisKKwlpZiAodW5saWtlbHkoc3RhdHVzLT5mcmFtZV9zaXplID4gc2tiX3RhaWxyb29tKHBhY2tldC0+c2tiKSAtCisJCQkJc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSkpIHsKKwkJSVBXX0RFQlVHX0lORk8oIiVzOiBmcmFtZV9zaXplICgldSkgPiBza2JfdGFpbHJvb20gKCV1KSEiCisJCQkgICAgICAgIiAgRHJvcHBpbmcuXG4iLAorCQkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsCisJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLAorCQkJICAgICAgIHNrYl90YWlscm9vbShwYWNrZXQtPnNrYikpOworCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJcmV0dXJuOworCX0KKworCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkpIHsKKwkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKKwkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IHVwLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodW5saWtlbHkocHJpdi0+Y29uZmlnICYgQ0ZHX0NSQ19DSEVDSyAmJgorCQkgICAgIHN0YXR1cy0+ZmxhZ3MgJiBJUFdfU1RBVFVTX0ZMQUdfQ1JDX0VSUk9SKSkgeworCQlJUFdfREVCVUdfUlgoIkNSQyBlcnJvciBpbiBwYWNrZXQuICBEcm9wcGluZy5cbiIpOworCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJcmV0dXJuOworCX0KKworCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgcGFja2V0LT5kbWFfYWRkciwKKwkJCSBzaXplb2Yoc3RydWN0IGlwdzIxMDBfcngpLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCW1lbW1vdmUocGFja2V0LT5za2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpLAorCQlwYWNrZXQtPnNrYi0+ZGF0YSwgc3RhdHVzLT5mcmFtZV9zaXplKTsKKworCWlwd19ydCA9IChzdHJ1Y3QgaXB3X3J0X2hkciAqKSBwYWNrZXQtPnNrYi0+ZGF0YTsKKworCWlwd19ydC0+cnRfaGRyLml0X3ZlcnNpb24gPSBQS1RIRFJfUkFESU9UQVBfVkVSU0lPTjsKKwlpcHdfcnQtPnJ0X2hkci5pdF9wYWQgPSAwOyAvKiBhbHdheXMgZ29vZCB0byB6ZXJvICovCisJaXB3X3J0LT5ydF9oZHIuaXRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKTsgLyogdG90YWwgaGRyK2RhdGEgKi8KKworCWlwd19ydC0+cnRfaGRyLml0X3ByZXNlbnQgPSAxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMOworCisJaXB3X3J0LT5ydF9kYm1zaWduYWwgPSBzdGF0dXMtPnJzc2kgKyBJUFcyMTAwX1JTU0lfVE9fREJNOworCisJc2tiX3B1dChwYWNrZXQtPnNrYiwgc3RhdHVzLT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSk7CisKKwlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7CisJCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCisJCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KKwkJZGV2X2tmcmVlX3NrYl9hbnkocGFja2V0LT5za2IpOworCQlwYWNrZXQtPnNrYiA9IE5VTEw7CisJfQorCisJLyogV2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBTS0IgYW5kIGF0dGFjaCBpdCB0byB0aGUgUkRCLiAqLworCWlmICh1bmxpa2VseShpcHcyMTAwX2FsbG9jX3NrYihwcml2LCBwYWNrZXQpKSkgeworCQlJUFdfREVCVUdfV0FSTklORygKKwkJCSIlczogVW5hYmxlIHRvIGFsbG9jYXRlIFNLQiBvbnRvIFJCRCByaW5nIC0gZGlzYWJsaW5nICIKKwkJCSJhZGFwdGVyLlxuIiwgcHJpdi0+bmV0X2Rldi0+bmFtZSk7CisJCS8qIFRPRE86IHNjaGVkdWxlIGFkYXB0ZXIgc2h1dGRvd24gKi8KKwkJSVBXX0RFQlVHX0lORk8oIlRPRE86IFNodXRkb3duIGFkYXB0ZXIuLi5cbiIpOworCX0KKworCS8qIFVwZGF0ZSB0aGUgUkRCIGVudHJ5ICovCisJcHJpdi0+cnhfcXVldWUuZHJ2W2ldLmhvc3RfYWRkciA9IHBhY2tldC0+ZG1hX2FkZHI7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgaW50IGlwdzIxMDBfY29ycnVwdGlvbl9jaGVjayhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgaSkKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwpAQCAtMjU1OCw3ICsyNjUxLDcgQEAKIAkJY2FzZSBQODAyM19EQVRBX1ZBTDoKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCiAJCQlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJCQlpc3JfcngocHJpdiwgaSwgJnN0YXRzKTsKKwkJCQlpc3JfcnhfbW9uaXRvcihwcml2LCBpLCAmc3RhdHMpOwogCQkJCWJyZWFrOwogCQkJfQogI2VuZGlmCkBAIC0zNzUwLDcgKzM4NDMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCWNvbnN0IGNoYXIgKnAgPSBidWY7CiAKLQkodm9pZCkgZGV2OyAvKiBraWxsIHVudXNlZC12YXIgd2FybmluZyBmb3IgZGVidWctb25seSBjb2RlICovCisJKHZvaWQpZGV2OwkJLyoga2lsbCB1bnVzZWQtdmFyIHdhcm5pbmcgZm9yIGRlYnVnLW9ubHkgY29kZSAqLwogCiAJaWYgKGNvdW50IDwgMSkKIAkJcmV0dXJuIGNvdW50OwpAQCAtMzg2Myw3ICszOTU2LDcgQEAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCiAJY2FzZSBJV19NT0RFX01PTklUT1I6CiAJCXByaXYtPmxhc3RfbW9kZSA9IHByaXYtPmllZWUtPml3X21vZGU7Ci0JCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOworCQlwcml2LT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUDsKIAkJYnJlYWs7CiAjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIxMDBfTU9OSVRPUiAqLwogCX0KQEAgLTQwNzAsNyArNDE2Myw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJY2hhciAqcCA9IGJ1ZmZlcjsKIAotCSh2b2lkKSBkZXY7IC8qIGtpbGwgdW51c2VkLXZhciB3YXJuaW5nIGZvciBkZWJ1Zy1vbmx5IGNvZGUgKi8KKwkodm9pZClkZXY7CQkvKiBraWxsIHVudXNlZC12YXIgd2FybmluZyBmb3IgZGVidWctb25seSBjb2RlICovCiAKIAlJUFdfREVCVUdfSU5GTygiZW50ZXJcbiIpOwogCkBAIC00MTE5LDcgKzQyMTIsNyBAQAogCUlQV19ERUJVR19SRl9LSUxMKCJNYW51YWwgU1cgUkYgS2lsbCBzZXQgdG86IFJBRElPICAlc1xuIiwKIAkJCSAgZGlzYWJsZV9yYWRpbyA/ICJPRkYiIDogIk9OIik7CiAKLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCiAJaWYgKGRpc2FibGVfcmFkaW8pIHsKIAkJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19SRl9LSUxMX1NXOwpAQCAtNDEzNyw3ICs0MjMwLDcgQEAKIAkJCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogCX0KIAotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTUxMDcsMTIgKzUyMDAsMTMgQEAKIAkJLmhvc3RfY29tbWFuZF9sZW5ndGggPSA0CiAJfTsKIAlpbnQgZXJyID0gMDsKKwl1MzIgdG1wID0gdHhfcG93ZXI7CiAKIAlpZiAodHhfcG93ZXIgIT0gSVBXX1RYX1BPV0VSX0RFRkFVTFQpCi0JCXR4X3Bvd2VyID0gKHR4X3Bvd2VyIC0gSVBXX1RYX1BPV0VSX01JTl9EQk0pICogMTYgLwotCQkgICAgKElQV19UWF9QT1dFUl9NQVhfREJNIC0gSVBXX1RYX1BPV0VSX01JTl9EQk0pOworCQl0bXAgPSAodHhfcG93ZXIgLSBJUFdfVFhfUE9XRVJfTUlOX0RCTSkgKiAxNiAvCisJCSAgICAgIChJUFdfVFhfUE9XRVJfTUFYX0RCTSAtIElQV19UWF9QT1dFUl9NSU5fREJNKTsKIAotCWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSA9IHR4X3Bvd2VyOworCWNtZC5ob3N0X2NvbW1hbmRfcGFyYW1ldGVyc1swXSA9IHRtcDsKIAogCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCiAJCWVyciA9IGlwdzIxMDBfaHdfc2VuZF9jb21tYW5kKHByaXYsICZjbWQpOwpAQCAtNTM2NSw5ICs1NDU5LDEyIEBACiAJCQkJCQkgICAgIFNFQ19MRVZFTF8wLCAwLCAxKTsKIAl9IGVsc2UgewogCQlhdXRoX21vZGUgPSBJUFdfQVVUSF9PUEVOOwotCQlpZiAoKHByaXYtPmllZWUtPnNlYy5mbGFncyAmIFNFQ19BVVRIX01PREUpICYmCi0JCSAgICAocHJpdi0+aWVlZS0+c2VjLmF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkpCi0JCQlhdXRoX21vZGUgPSBJUFdfQVVUSF9TSEFSRUQ7CisJCWlmIChwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiBTRUNfQVVUSF9NT0RFKSB7CisJCQlpZiAocHJpdi0+aWVlZS0+c2VjLmF1dGhfbW9kZSA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkKKwkJCQlhdXRoX21vZGUgPSBJUFdfQVVUSF9TSEFSRUQ7CisJCQllbHNlIGlmIChwcml2LT5pZWVlLT5zZWMuYXV0aF9tb2RlID09IFdMQU5fQVVUSF9MRUFQKQorCQkJCWF1dGhfbW9kZSA9IElQV19BVVRIX0xFQVBfQ0lTQ09fSUQ7CisJCX0KIAogCQlzZWNfbGV2ZWwgPSBTRUNfTEVWRUxfMDsKIAkJaWYgKHByaXYtPmllZWUtPnNlYy5mbGFncyAmIFNFQ19MRVZFTCkKQEAgLTU0MzcsNyArNTUzNCw3IEBACiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IGksIGZvcmNlX3VwZGF0ZSA9IDA7CiAKLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkpCiAJCWdvdG8gZG9uZTsKIApAQCAtNTUxMCw3ICs1NjA3LDcgQEAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSkKIAkJaXB3MjEwMF9jb25maWd1cmVfc2VjdXJpdHkocHJpdiwgMCk7CiAgICAgICBkb25lOgotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF9hZGFwdGVyX3NldHVwKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCkBAIC01NjM0LDcgKzU3MzEsNyBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0JZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAogCXByaXYtPmNvbmZpZyB8PSBDRkdfQ1VTVE9NX01BQzsKIAltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKQEAgLTU2NDQsMTIgKzU3NDEsMTIgQEAKIAkJZ290byBkb25lOwogCiAJcHJpdi0+cmVzZXRfYmFja29mZiA9IDA7Ci0JdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAlpcHcyMTAwX3Jlc2V0X2FkYXB0ZXIocHJpdik7CiAJcmV0dXJuIDA7CiAKICAgICAgIGRvbmU6Ci0JdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01NzYwLDYgKzU4NTcsOSBAQAogCX0gZWxzZSBpZiAodmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkgewogCQlzZWMuYXV0aF9tb2RlID0gV0xBTl9BVVRIX09QRU47CiAJCWllZWUtPm9wZW5fd2VwID0gMTsKKwl9IGVsc2UgaWYgKHZhbHVlICYgSVdfQVVUSF9BTEdfTEVBUCkgeworCQlzZWMuYXV0aF9tb2RlID0gV0xBTl9BVVRIX0xFQVA7CisJCWllZWUtPm9wZW5fd2VwID0gMTsKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU3NzEsOCArNTg3MSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBpcHcyMTAwX3dwYV9hc3NvY19mcmFtZShzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LAotCQkJICAgICBjaGFyICp3cGFfaWUsIGludCB3cGFfaWVfbGVuKQorc3RhdGljIHZvaWQgaXB3MjEwMF93cGFfYXNzb2NfZnJhbWUoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwKKwkJCQkgICAgY2hhciAqd3BhX2llLCBpbnQgd3BhX2llX2xlbikKIHsKIAogCXN0cnVjdCBpcHcyMTAwX3dwYV9hc3NvY19mcmFtZSBmcmFtZTsKQEAgLTU5ODksOCArNjA4OSw4IEBACiAJc3RyY3B5KHByaXYtPm5pY2ssICJpcHcyMTAwIik7CiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG93X2xvY2spOwotCXNlbWFfaW5pdCgmcHJpdi0+YWN0aW9uX3NlbSwgMSk7Ci0Jc2VtYV9pbml0KCZwcml2LT5hZGFwdGVyX3NlbSwgMSk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+YWN0aW9uX211dGV4KTsKKwltdXRleF9pbml0KCZwcml2LT5hZGFwdGVyX211dGV4KTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTYxNTUsNyArNjI1NSw3IEBACiAJICogbWVtYmVyIHRvIGNhbGwgYSBmdW5jdGlvbiB0aGF0IHRoZW4ganVzdCB0dXJucyBhbmQgY2FsbHMgaXB3MjEwMF91cC4KIAkgKiBuZXRfZGV2LT5pbml0IGlzIGNhbGxlZCBhZnRlciBuYW1lIGFsbG9jYXRpb24gYnV0IGJlZm9yZSB0aGUKIAkgKiBub3RpZmllciBjaGFpbiBpcyBjYWxsZWQgKi8KLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQpAQCAtNjE5MSwxMiArNjI5MSwxMiBAQAogCiAJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19JTklUSUFMSVpFRDsKIAotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIAogICAgICAgZmFpbF91bmxvY2s6Ci0JdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAogICAgICAgZmFpbDoKIAlpZiAoZGV2KSB7CkBAIC02MjM2LDcgKzYzMzYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAlpZiAocHJpdikgewotCQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAogCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19JTklUSUFMSVpFRDsKIApAQCAtNjI1MSw5ICs2MzUxLDkgQEAKIAkJLyogVGFrZSBkb3duIHRoZSBoYXJkd2FyZSAqLwogCQlpcHcyMTAwX2Rvd24ocHJpdik7CiAKLQkJLyogUmVsZWFzZSB0aGUgc2VtYXBob3JlIHNvIHRoYXQgdGhlIG5ldHdvcmsgc3Vic3lzdGVtIGNhbgorCQkvKiBSZWxlYXNlIHRoZSBtdXRleCBzbyB0aGF0IHRoZSBuZXR3b3JrIHN1YnN5c3RlbSBjYW4KIAkJICogY29tcGxldGUgYW55IG5lZWRlZCBjYWxscyBpbnRvIHRoZSBkcml2ZXIuLi4gKi8KLQkJdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCQltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAkJLyogVW5yZWdpc3RlciB0aGUgZGV2aWNlIGZpcnN0IC0gdGhpcyByZXN1bHRzIGluIGNsb3NlKCkKIAkJICogYmVpbmcgY2FsbGVkIGlmIHRoZSBkZXZpY2UgaXMgb3Blbi4gIElmIHdlIGZyZWUgc3RvcmFnZQpAQCAtNjI5Miw3ICs2MzkyLDcgQEAKIAogCUlQV19ERUJVR19JTkZPKCIlczogR29pbmcgaW50byBzdXNwZW5kLi4uXG4iLCBkZXYtPm5hbWUpOwogCi0JZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSB7CiAJCS8qIFRha2UgZG93biB0aGUgZGV2aWNlOyBwb3dlcnMgaXQgb2ZmLCBldGMuICovCiAJCWlwdzIxMDBfZG93bihwcml2KTsKQEAgLTYzMDUsNyArNjQwNSw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QzaG90KTsKIAotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYzMTksNyArNjQxOSw3IEBACiAJaWYgKElQVzIxMDBfUE1fRElTQUJMRUQpCiAJCXJldHVybiAwOwogCi0JZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAogCUlQV19ERUJVR19JTkZPKCIlczogQ29taW5nIG91dCBvZiBzdXNwZW5kLi4uXG4iLCBkZXYtPm5hbWUpOwogCkBAIC02MzQ1LDcgKzY0NDUsNyBAQAogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSkKIAkJaXB3MjEwMF91cChwcml2LCAwKTsKIAotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1MDksNyArNjYwOSw3IEBACiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5JVElBTElaRUQpKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZG9uZTsKQEAgLTY1NDAsNyArNjY0MCw3IEBACiAJfQogCiAgICAgICBkb25lOgotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjU4MSw3ICs2NjgxLDcgQEAKIAlpZiAod3JxdS0+bW9kZSA9PSBwcml2LT5pZWVlLT5pd19tb2RlKQogCQlyZXR1cm4gMDsKIAotCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGRvbmU7CkBAIC02NjA0LDcgKzY3MDQsNyBAQAogCX0KIAogICAgICAgZG9uZToKLQl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY3ODYsNyArNjg4Niw3IEBACiAJaWYgKHdycXUtPmFwX2FkZHIuc2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBkb25lOwpAQCAtNjgxNSw3ICs2OTE1LDcgQEAKIAkJICAgICB3cnF1LT5hcF9hZGRyLnNhX2RhdGFbNV0gJiAweGZmKTsKIAogICAgICAgZG9uZToKLQl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY4NTEsNyArNjk1MSw3IEBACiAJaW50IGxlbmd0aCA9IDA7CiAJaW50IGVyciA9IDA7CiAKLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBkb25lOwpAQCAtNjg4OCw3ICs2OTg4LDcgQEAKIAllcnIgPSBpcHcyMTAwX3NldF9lc3NpZChwcml2LCBlc3NpZCwgbGVuZ3RoLCAwKTsKIAogICAgICAgZG9uZToKLQl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY5NjksNyArNzA2OSw3IEBACiAJdTMyIHJhdGU7CiAJaW50IGVyciA9IDA7CiAKLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBkb25lOwpAQCAtNjk5Niw3ICs3MDk2LDcgQEAKIAogCUlQV19ERUJVR19XWCgiU0VUIFJhdGUgLT4gJTA0WCBcbiIsIHJhdGUpOwogICAgICAgZG9uZToKLQl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTcwMTYsNyArNzExNiw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGRvbmU7CkBAIC03MDQ4LDcgKzcxNDgsNyBAQAogCUlQV19ERUJVR19XWCgiR0VUIFJhdGUgLT4gJWQgXG4iLCB3cnF1LT5iaXRyYXRlLnZhbHVlKTsKIAogICAgICAgZG9uZToKLQl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTcwNjMsNyArNzE2Myw3IEBACiAJaWYgKHdycXUtPnJ0cy5maXhlZCA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGRvbmU7CkBAIC03MDgzLDcgKzcxODMsNyBAQAogCiAJSVBXX0RFQlVHX1dYKCJTRVQgUlRTIFRocmVzaG9sZCAtPiAweCUwOFggXG4iLCB2YWx1ZSk7CiAgICAgICBkb25lOgotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzEzNCw3ICs3MjM0LDcgQEAKIAkJdmFsdWUgPSB3cnF1LT50eHBvd2VyLnZhbHVlOwogCX0KIAotCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGRvbmU7CkBAIC03MTQ1LDcgKzcyNDUsNyBAQAogCUlQV19ERUJVR19XWCgiU0VUIFRYIFBvd2VyIC0+ICVkIFxuIiwgdmFsdWUpOwogCiAgICAgICBkb25lOgotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzIzNyw3ICs3MzM3LDcgQEAKIAlpZiAoISh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX0xJTUlUKSkKIAkJcmV0dXJuIDA7CiAKLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBkb25lOwpAQCAtNzI2NCw3ICs3MzY0LDcgQEAKIAlJUFdfREVCVUdfV1goIlNFVCBCb3RoIFJldHJ5IExpbWl0cyAtPiAlZCBcbiIsIHdycXUtPnJldHJ5LnZhbHVlKTsKIAogICAgICAgZG9uZToKLQl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTczMDcsNyArNzQwNyw3IEBACiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBkb25lOwpAQCAtNzMyMiw3ICs3NDIyLDcgQEAKIAl9CiAKICAgICAgIGRvbmU6Ci0JdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MzcyLDcgKzc0NzIsNyBAQAogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCi0JZG93bigmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5JVElBTElaRUQpKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZG9uZTsKQEAgLTc0MDUsNyArNzUwNSw3IEBACiAJSVBXX0RFQlVHX1dYKCJTRVQgUG93ZXIgTWFuYWdlbWVudCBNb2RlIC0+IDB4JTAyWFxuIiwgcHJpdi0+cG93ZXJfbW9kZSk7CiAKICAgICAgIGRvbmU6Ci0JdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAlyZXR1cm4gZXJyOwogCiB9CkBAIC03NzA5LDcgKzc4MDksNyBAQAogCWludCBlbmFibGUgPSAocGFybXNbMF0gPiAwKTsKIAlpbnQgZXJyID0gMDsKIAotCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGRvbmU7CkBAIC03NzI3LDcgKzc4MjcsNyBAQAogCQkJZXJyID0gaXB3MjEwMF9zd2l0Y2hfbW9kZShwcml2LCBwcml2LT5sYXN0X21vZGUpOwogCX0KICAgICAgIGRvbmU6Ci0JdXAoJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03NzUwLDcgKzc4NTAsNyBAQAogCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCBlcnIgPSAwLCBtb2RlID0gKihpbnQgKilleHRyYTsKIAotCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGRvbmU7CkBAIC03NzYyLDcgKzc4NjIsNyBAQAogCWlmIChwcml2LT5wb3dlcl9tb2RlICE9IG1vZGUpCiAJCWVyciA9IGlwdzIxMDBfc2V0X3Bvd2VyX21vZGUocHJpdiwgbW9kZSk7CiAgICAgICBkb25lOgotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzgxNCw3ICs3OTE0LDcgQEAKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgZXJyLCBtb2RlID0gKihpbnQgKilleHRyYTsKIAotCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0lOSVRJQUxJWkVEKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIGRvbmU7CkBAIC03ODMyLDcgKzc5MzIsNyBAQAogCWVyciA9IGlwdzIxMDBfc3lzdGVtX2NvbmZpZyhwcml2LCAwKTsKIAogICAgICAgZG9uZToKLQl1cCgmcHJpdi0+YWN0aW9uX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTc4NjIsNyArNzk2Miw3IEBACiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IGVyciwgbW9kZSA9ICooaW50ICopZXh0cmE7CiAKLQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19JTklUSUFMSVpFRCkpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBkb25lOwpAQCAtNzg3OSw3ICs3OTc5LDcgQEAKIAllcnIgPSAwOwogCiAgICAgICBkb25lOgotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODE4NCwxMSArODI4NCwxMSBAQAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU1RPUFBJTkcpCiAJCXJldHVybjsKIAotCWRvd24oJnByaXYtPmFjdGlvbl9zZW0pOworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAlJUFdfREVCVUdfV1goImVudGVyXG4iKTsKIAotCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCkBAIC04MjExLDcgKzgzMTEsNyBAQAogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSB7CiAJCUlQV19ERUJVR19XWCgiQ29uZmlndXJpbmcgRVNTSURcbiIpOwotCQlkb3duKCZwcml2LT5hY3Rpb25fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKIAkJLyogVGhpcyBpcyBhIGRpc2Fzc29jaWF0aW9uIGV2ZW50LCBzbyBraWNrIHRoZSBmaXJtd2FyZSB0bwogCQkgKiBsb29rIGZvciBhbm90aGVyIEFQICovCiAJCWlmIChwcml2LT5jb25maWcgJiBDRkdfU1RBVElDX0VTU0lEKQpAQCAtODIxOSw3ICs4MzE5LDcgQEAKIAkJCQkJICAwKTsKIAkJZWxzZQogCQkJaXB3MjEwMF9zZXRfZXNzaWQocHJpdiwgTlVMTCwgMCwgMCk7Ci0JCXVwKCZwcml2LT5hY3Rpb25fc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwogCX0KIAogCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmgKaW5kZXggZjZjNTE0NC4uNTViNzIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDEsNyArNDEsMTIgQEAKIAogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KIAorI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIHN0cnVjdCBpcHcyMTAwX3ByaXY7CiBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQ7CkBAIC0zOTIsOCArMzk3LDEwIEBACiAjZGVmaW5lIElQV19XRVAxMDRfQ0lQSEVSICgxPDw1KQogI2RlZmluZSBJUFdfQ0tJUF9DSVBIRVIgICAoMTw8NikKIAotI2RlZmluZQlJUFdfQVVUSF9PUEVOICAgICAwCi0jZGVmaW5lCUlQV19BVVRIX1NIQVJFRCAgIDEKKyNkZWZpbmUJSVBXX0FVVEhfT1BFTiAgICAgCTAKKyNkZWZpbmUJSVBXX0FVVEhfU0hBUkVEICAgCTEKKyNkZWZpbmUgSVBXX0FVVEhfTEVBUAkgIAkyCisjZGVmaW5lIElQV19BVVRIX0xFQVBfQ0lTQ09fSUQJMHg4MAogCiBzdHJ1Y3Qgc3RhdGlzdGljIHsKIAlpbnQgdmFsdWU7CkBAIC01ODgsOCArNTk1LDggQEAKIAlpbnQgaW50YV9vdGhlcjsKIAogCXNwaW5sb2NrX3QgbG93X2xvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBhY3Rpb25fc2VtOwotCXN0cnVjdCBzZW1hcGhvcmUgYWRhcHRlcl9zZW07CisJc3RydWN0IG11dGV4IGFjdGlvbl9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggYWRhcHRlcl9tdXRleDsKIAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfY29tbWFuZF9xdWV1ZTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKaW5kZXggMTRiZWFiNC4uOWRjZTUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotICBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICA4MDIuMTEgc3RhdHVzIGNvZGUgcG9ydGlvbiBvZiB0aGlzIGZpbGUgZnJvbSBldGhlcmVhbC0wLjEwLjY6CiAgICAgQ29weXJpZ2h0IDIwMDAsIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKQEAgLTMzLDkgKzMzLDkgQEAKICNpbmNsdWRlICJpcHcyMjAwLmgiCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jZGVmaW5lIElQVzIyMDBfVkVSU0lPTiAiZ2l0LTEuMC44IgorI2RlZmluZSBJUFcyMjAwX1ZFUlNJT04gImdpdC0xLjEuMSIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJJbnRlbChSKSBQUk8vV2lyZWxlc3MgMjIwMC8yOTE1IE5ldHdvcmsgRHJpdmVyIgotI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA1IEludGVsIENvcnBvcmF0aW9uIgorI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA2IEludGVsIENvcnBvcmF0aW9uIgogI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgSVBXMjIwMF9WRVJTSU9OCiAKICNkZWZpbmUgRVRIX1BfODAyMTFfU1RBVFMgKEVUSF9QXzgwMjExX1JBVyArIDEpCkBAIC01NSw3ICs1NSw5IEBACiBzdGF0aWMgaW50IGF1dG9fY3JlYXRlID0gMTsKIHN0YXRpYyBpbnQgbGVkID0gMDsKIHN0YXRpYyBpbnQgZGlzYWJsZSA9IDA7Ci1zdGF0aWMgaW50IGh3Y3J5cHRvID0gMTsKK3N0YXRpYyBpbnQgYnRfY29leGlzdCA9IDA7CitzdGF0aWMgaW50IGh3Y3J5cHRvID0gMDsKK3N0YXRpYyBpbnQgcm9hbWluZyA9IDE7CiBzdGF0aWMgY29uc3QgY2hhciBpcHdfbW9kZXNbXSA9IHsKIAknYScsICdiJywgJ2cnLCAnPycKIH07CkBAIC0xNTEsMTIgKzE1Myw2IEBACiBzdGF0aWMgdm9pZCBpcHdfc2V0X2h3Y3J5cHRvX2tleXMoc3RydWN0IGlwd19wcml2ICopOwogc3RhdGljIHZvaWQgaXB3X3NlbmRfd2VwX2tleXMoc3RydWN0IGlwd19wcml2ICosIGludCk7CiAKLXN0YXRpYyBpbnQgaXB3X2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiwgdTgpOwotc3RhdGljIGludCBpcHdfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqLCB1OCk7Ci1zdGF0aWMgdTggaXB3X2ZyZXFfdG9fY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqLCB1MzIpOwotc3RhdGljIGludCBpcHdfc2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqaXB3X2dldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKik7Ci0KIHN0YXRpYyBpbnQgc25wcmludF9saW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJY29uc3QgdTggKiBkYXRhLCB1MzIgbGVuLCB1MzIgb2ZzKQogewpAQCAtMjI3LDEyICsyMjMsMTUgQEAKIAlyZXR1cm4gdG90YWw7CiB9CiAKKy8qIGFsaWFzIGZvciAzMi1iaXQgaW5kaXJlY3QgcmVhZCAoZm9yIFNSQU0vcmVnIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiBzdGF0aWMgdTMyIF9pcHdfcmVhZF9yZWczMihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcpOwogI2RlZmluZSBpcHdfcmVhZF9yZWczMihhLCBiKSBfaXB3X3JlYWRfcmVnMzIoYSwgYikKIAorLyogYWxpYXMgZm9yIDgtYml0IGluZGlyZWN0IHJlYWQgKGZvciBTUkFNL3JlZyBhYm92ZSA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogc3RhdGljIHU4IF9pcHdfcmVhZF9yZWc4KHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1MzIgcmVnKTsKICNkZWZpbmUgaXB3X3JlYWRfcmVnOChhLCBiKSBfaXB3X3JlYWRfcmVnOChhLCBiKQogCisvKiA4LWJpdCBpbmRpcmVjdCB3cml0ZSAoZm9yIFNSQU0vcmVnIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX3JlZzgoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnLCB1OCB2YWx1ZSk7CiBzdGF0aWMgaW5saW5lIHZvaWQgaXB3X3dyaXRlX3JlZzgoc3RydWN0IGlwd19wcml2ICphLCB1MzIgYiwgdTggYykKIHsKQEAgLTI0MSw2ICsyNDAsNyBAQAogCV9pcHdfd3JpdGVfcmVnOChhLCBiLCBjKTsKIH0KIAorLyogMTYtYml0IGluZGlyZWN0IHdyaXRlIChmb3IgU1JBTS9yZWcgYWJvdmUgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfcmVnMTYoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnLCB1MTYgdmFsdWUpOwogc3RhdGljIGlubGluZSB2b2lkIGlwd193cml0ZV9yZWcxNihzdHJ1Y3QgaXB3X3ByaXYgKmEsIHUzMiBiLCB1MTYgYykKIHsKQEAgLTI0OSw2ICsyNDksNyBAQAogCV9pcHdfd3JpdGVfcmVnMTYoYSwgYiwgYyk7CiB9CiAKKy8qIDMyLWJpdCBpbmRpcmVjdCB3cml0ZSAoZm9yIFNSQU0vcmVnIGFib3ZlIDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX3JlZzMyKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcHdfd3JpdGVfcmVnMzIoc3RydWN0IGlwd19wcml2ICphLCB1MzIgYiwgdTMyIGMpCiB7CkBAIC0yNTcsNDggKzI1OCw3MCBAQAogCV9pcHdfd3JpdGVfcmVnMzIoYSwgYiwgYyk7CiB9CiAKKy8qIDgtYml0IGRpcmVjdCB3cml0ZSAobG93IDRLKSAqLwogI2RlZmluZSBfaXB3X3dyaXRlOChpcHcsIG9mcywgdmFsKSB3cml0ZWIoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCisKKy8qIDgtYml0IGRpcmVjdCB3cml0ZSAoZm9yIGxvdyA0SyBvZiBTUkFNL3JlZ3MpLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KICNkZWZpbmUgaXB3X3dyaXRlOChpcHcsIG9mcywgdmFsKSBcCiAgSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0OCgweCUwOFgsIDB4JTA4WClcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHUzMikob2ZzKSwgKHUzMikodmFsKSk7IFwKICBfaXB3X3dyaXRlOChpcHcsIG9mcywgdmFsKQogCisvKiAxNi1iaXQgZGlyZWN0IHdyaXRlIChsb3cgNEspICovCiAjZGVmaW5lIF9pcHdfd3JpdGUxNihpcHcsIG9mcywgdmFsKSB3cml0ZXcoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCisKKy8qIDE2LWJpdCBkaXJlY3Qgd3JpdGUgKGZvciBsb3cgNEsgb2YgU1JBTS9yZWdzKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiAjZGVmaW5lIGlwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIFwKICBJUFdfREVCVUdfSU8oIiVzICVkOiB3cml0ZV9kaXJlY3QxNigweCUwOFgsIDB4JTA4WClcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHUzMikob2ZzKSwgKHUzMikodmFsKSk7IFwKICBfaXB3X3dyaXRlMTYoaXB3LCBvZnMsIHZhbCkKIAorLyogMzItYml0IGRpcmVjdCB3cml0ZSAobG93IDRLKSAqLwogI2RlZmluZSBfaXB3X3dyaXRlMzIoaXB3LCBvZnMsIHZhbCkgd3JpdGVsKCh2YWwpLCAoaXB3KS0+aHdfYmFzZSArIChvZnMpKQorCisvKiAzMi1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogI2RlZmluZSBpcHdfd3JpdGUzMihpcHcsIG9mcywgdmFsKSBcCiAgSVBXX0RFQlVHX0lPKCIlcyAlZDogd3JpdGVfZGlyZWN0MzIoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCiAgX2lwd193cml0ZTMyKGlwdywgb2ZzLCB2YWwpCiAKKy8qIDgtYml0IGRpcmVjdCByZWFkIChsb3cgNEspICovCiAjZGVmaW5lIF9pcHdfcmVhZDgoaXB3LCBvZnMpIHJlYWRiKChpcHcpLT5od19iYXNlICsgKG9mcykpCisKKy8qIDgtYml0IGRpcmVjdCByZWFkIChsb3cgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KIHN0YXRpYyBpbmxpbmUgdTggX19pcHdfcmVhZDgoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1MzIgb2ZzKQogewogCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0OCgweCUwOFgpXG4iLCBmLCBsLCAodTMyKSAob2ZzKSk7CiAJcmV0dXJuIF9pcHdfcmVhZDgoaXB3LCBvZnMpOwogfQogCisvKiBhbGlhcyB0byA4LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogI2RlZmluZSBpcHdfcmVhZDgoaXB3LCBvZnMpIF9faXB3X3JlYWQ4KF9fRklMRV9fLCBfX0xJTkVfXywgaXB3LCBvZnMpCiAKKy8qIDE2LWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSAqLwogI2RlZmluZSBfaXB3X3JlYWQxNihpcHcsIG9mcykgcmVhZHcoKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKKworLyogMTYtYml0IGRpcmVjdCByZWFkIChsb3cgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KIHN0YXRpYyBpbmxpbmUgdTE2IF9faXB3X3JlYWQxNihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGlwd19wcml2ICppcHcsIHUzMiBvZnMpCiB7CiAJSVBXX0RFQlVHX0lPKCIlcyAlZDogcmVhZF9kaXJlY3QxNigweCUwOFgpXG4iLCBmLCBsLCAodTMyKSAob2ZzKSk7CiAJcmV0dXJuIF9pcHdfcmVhZDE2KGlwdywgb2ZzKTsKIH0KIAorLyogYWxpYXMgdG8gMTYtYml0IGRpcmVjdCByZWFkIChsb3cgNEsgb2YgU1JBTS9yZWdzKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiAjZGVmaW5lIGlwd19yZWFkMTYoaXB3LCBvZnMpIF9faXB3X3JlYWQxNihfX0ZJTEVfXywgX19MSU5FX18sIGlwdywgb2ZzKQogCisvKiAzMi1iaXQgZGlyZWN0IHJlYWQgKGxvdyA0SykgKi8KICNkZWZpbmUgX2lwd19yZWFkMzIoaXB3LCBvZnMpIHJlYWRsKChpcHcpLT5od19iYXNlICsgKG9mcykpCisKKy8qIDMyLWJpdCBkaXJlY3QgcmVhZCAobG93IDRLKSwgd2l0aCBkZWJ1ZyB3cmFwcGVyICovCiBzdGF0aWMgaW5saW5lIHUzMiBfX2lwd19yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpcHdfcHJpdiAqaXB3LCB1MzIgb2ZzKQogewogCUlQV19ERUJVR19JTygiJXMgJWQ6IHJlYWRfZGlyZWN0MzIoMHglMDhYKVxuIiwgZiwgbCwgKHUzMikgKG9mcykpOwogCXJldHVybiBfaXB3X3JlYWQzMihpcHcsIG9mcyk7CiB9CiAKKy8qIGFsaWFzIHRvIDMyLWJpdCBkaXJlY3QgcmVhZCAobG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogI2RlZmluZSBpcHdfcmVhZDMyKGlwdywgb2ZzKSBfX2lwd19yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBpcHcsIG9mcykKIAorLyogbXVsdGktYnl0ZSByZWFkIChhYm92ZSA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogc3RhdGljIHZvaWQgX2lwd19yZWFkX2luZGlyZWN0KHN0cnVjdCBpcHdfcHJpdiAqLCB1MzIsIHU4ICosIGludCk7CiBzdGF0aWMgaW5saW5lIHZvaWQgX19pcHdfcmVhZF9pbmRpcmVjdChjb25zdCBjaGFyICpmLCBpbnQgbCwKIAkJCQkgICAgICAgc3RydWN0IGlwd19wcml2ICphLCB1MzIgYiwgdTggKiBjLCBpbnQgZCkKQEAgLTMwOCwxNSArMzMxLDE3IEBACiAJX2lwd19yZWFkX2luZGlyZWN0KGEsIGIsIGMsIGQpOwogfQogCisvKiBhbGlhcyB0byBtdWx0aS1ieXRlIHJlYWQgKFNSQU0vcmVncyBhYm92ZSA0SyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogI2RlZmluZSBpcHdfcmVhZF9pbmRpcmVjdChhLCBiLCBjLCBkKSBfX2lwd19yZWFkX2luZGlyZWN0KF9fRklMRV9fLCBfX0xJTkVfXywgYSwgYiwgYywgZCkKIAorLyogYWxpYXMgdG8gbXVsdGktYnl0ZSByZWFkIChTUkFNL3JlZ3MgYWJvdmUgNEspLCB3aXRoIGRlYnVnIHdyYXBwZXIgKi8KIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgYWRkciwgdTggKiBkYXRhLAogCQkJCWludCBudW0pOwogI2RlZmluZSBpcHdfd3JpdGVfaW5kaXJlY3QoYSwgYiwgYywgZCkgXAogCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2luZGlyZWN0KDB4JTA4WCkgJWQgYnl0ZXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHUzMikoYiksIGQpOyBcCiAJX2lwd193cml0ZV9pbmRpcmVjdChhLCBiLCBjLCBkKQogCi0vKiBpbmRpcmVjdCB3cml0ZSBzICovCisvKiAzMi1iaXQgaW5kaXJlY3Qgd3JpdGUgKGFib3ZlIDRLKSAqLwogc3RhdGljIHZvaWQgX2lwd193cml0ZV9yZWczMihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWx1ZSkKIHsKIAlJUFdfREVCVUdfSU8oIiAlcCA6IHJlZyA9IDB4JThYIDogdmFsdWUgPSAweCU4WFxuIiwgcHJpdiwgcmVnLCB2YWx1ZSk7CkBAIC0zMjQsMjIgKzM0OSwyOSBAQAogCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSwgdmFsdWUpOwogfQogCisvKiA4LWJpdCBpbmRpcmVjdCB3cml0ZSAoYWJvdmUgNEspICovCiBzdGF0aWMgdm9pZCBfaXB3X3dyaXRlX3JlZzgoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnLCB1OCB2YWx1ZSkKIHsKKwl1MzIgYWxpZ25lZF9hZGRyID0gcmVnICYgSVBXX0lORElSRUNUX0FERFJfTUFTSzsJLyogZHdvcmQgYWxpZ24gKi8KKwl1MzIgZGlmX2xlbiA9IHJlZyAtIGFsaWduZWRfYWRkcjsKKwogCUlQV19ERUJVR19JTygiIHJlZyA9IDB4JThYIDogdmFsdWUgPSAweCU4WFxuIiwgcmVnLCB2YWx1ZSk7Ci0JX2lwd193cml0ZTMyKHByaXYsIElQV19JTkRJUkVDVF9BRERSLCByZWcgJiBJUFdfSU5ESVJFQ1RfQUREUl9NQVNLKTsKLQlfaXB3X3dyaXRlOChwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSwgdmFsdWUpOworCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKKwlfaXB3X3dyaXRlOChwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSArIGRpZl9sZW4sIHZhbHVlKTsKIH0KIAorLyogMTYtYml0IGluZGlyZWN0IHdyaXRlIChhYm92ZSA0SykgKi8KIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfcmVnMTYoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnLCB1MTYgdmFsdWUpCiB7CisJdTMyIGFsaWduZWRfYWRkciA9IHJlZyAmIElQV19JTkRJUkVDVF9BRERSX01BU0s7CS8qIGR3b3JkIGFsaWduICovCisJdTMyIGRpZl9sZW4gPSAocmVnIC0gYWxpZ25lZF9hZGRyKSAmICh+MHgxdWwpOworCiAJSVBXX0RFQlVHX0lPKCIgcmVnID0gMHglOFggOiB2YWx1ZSA9IDB4JThYXG4iLCByZWcsIHZhbHVlKTsKLQlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIHJlZyAmIElQV19JTkRJUkVDVF9BRERSX01BU0spOwotCV9pcHdfd3JpdGUxNihwcml2LCBJUFdfSU5ESVJFQ1RfREFUQSwgdmFsdWUpOworCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKKwlfaXB3X3dyaXRlMTYocHJpdiwgSVBXX0lORElSRUNUX0RBVEEgKyBkaWZfbGVuLCB2YWx1ZSk7CiB9CiAKLS8qIGluZGlyZWN0IHJlYWQgcyAqLwotCisvKiA4LWJpdCBpbmRpcmVjdCByZWFkIChhYm92ZSA0SykgKi8KIHN0YXRpYyB1OCBfaXB3X3JlYWRfcmVnOChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiByZWcpCiB7CiAJdTMyIHdvcmQ7CkBAIC0zNDksNiArMzgxLDcgQEAKIAlyZXR1cm4gKHdvcmQgPj4gKChyZWcgJiAweDMpICogOCkpICYgMHhmZjsKIH0KIAorLyogMzItYml0IGluZGlyZWN0IHJlYWQgKGFib3ZlIDRLKSAqLwogc3RhdGljIHUzMiBfaXB3X3JlYWRfcmVnMzIoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnKQogewogCXUzMiB2YWx1ZTsKQEAgLTM2MSwxMSArMzk0LDEyIEBACiAJcmV0dXJuIHZhbHVlOwogfQogCi0vKiBpdGVyYXRpdmUvYXV0by1pbmNyZW1lbnQgMzIgYml0IHJlYWRzIGFuZCB3cml0ZXMgKi8KKy8qIEdlbmVyYWwgcHVycG9zZSwgbm8gYWxpZ25tZW50IHJlcXVpcmVtZW50LCBpdGVyYXRpdmUgKG11bHRpLWJ5dGUpIHJlYWQsICovCisvKiAgICBmb3IgYXJlYSBhYm92ZSAxc3QgNEsgb2YgU1JBTS9yZWcgc3BhY2UgKi8KIHN0YXRpYyB2b2lkIF9pcHdfcmVhZF9pbmRpcmVjdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1OCAqIGJ1ZiwKIAkJCSAgICAgICBpbnQgbnVtKQogewotCXUzMiBhbGlnbmVkX2FkZHIgPSBhZGRyICYgSVBXX0lORElSRUNUX0FERFJfTUFTSzsKKwl1MzIgYWxpZ25lZF9hZGRyID0gYWRkciAmIElQV19JTkRJUkVDVF9BRERSX01BU0s7CS8qIGR3b3JkIGFsaWduICovCiAJdTMyIGRpZl9sZW4gPSBhZGRyIC0gYWxpZ25lZF9hZGRyOwogCXUzMiBpOwogCkBAIC0zNzUsNyArNDA5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIFJlYWQgdGhlIGZpcnN0IG5pYmJsZSBieXRlIGJ5IGJ5dGUgKi8KKwkvKiBSZWFkIHRoZSBmaXJzdCBkd29yZCAob3IgcG9ydGlvbikgYnl0ZSBieSBieXRlICovCiAJaWYgKHVubGlrZWx5KGRpZl9sZW4pKSB7CiAJCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfSU5ESVJFQ1RfQUREUiwgYWxpZ25lZF9hZGRyKTsKIAkJLyogU3RhcnQgcmVhZGluZyBhdCBhbGlnbmVkX2FkZHIgKyBkaWZfbGVuICovCkBAIC0zODQsMTEgKzQxOCwxMiBAQAogCQlhbGlnbmVkX2FkZHIgKz0gNDsKIAl9CiAKKwkvKiBSZWFkIGFsbCBvZiB0aGUgbWlkZGxlIGR3b3JkcyBhcyBkd29yZHMsIHdpdGggYXV0by1pbmNyZW1lbnQgKi8KIAlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0FVVE9JTkNfQUREUiwgYWxpZ25lZF9hZGRyKTsKIAlmb3IgKDsgbnVtID49IDQ7IGJ1ZiArPSA0LCBhbGlnbmVkX2FkZHIgKz0gNCwgbnVtIC09IDQpCiAJCSoodTMyICopIGJ1ZiA9IF9pcHdfcmVhZDMyKHByaXYsIElQV19BVVRPSU5DX0RBVEEpOwogCi0JLyogQ29weSB0aGUgbGFzdCBuaWJibGUgKi8KKwkvKiBSZWFkIHRoZSBsYXN0IGR3b3JkIChvciBwb3J0aW9uKSBieXRlIGJ5IGJ5dGUgKi8KIAlpZiAodW5saWtlbHkobnVtKSkgewogCQlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIGFsaWduZWRfYWRkcik7CiAJCWZvciAoaSA9IDA7IG51bSA+IDA7IGkrKywgbnVtLS0pCkBAIC0zOTYsMTAgKzQzMSwxMiBAQAogCX0KIH0KIAorLyogR2VuZXJhbCBwdXJwb3NlLCBubyBhbGlnbm1lbnQgcmVxdWlyZW1lbnQsIGl0ZXJhdGl2ZSAobXVsdGktYnl0ZSkgd3JpdGUsICovCisvKiAgICBmb3IgYXJlYSBhYm92ZSAxc3QgNEsgb2YgU1JBTS9yZWcgc3BhY2UgKi8KIHN0YXRpYyB2b2lkIF9pcHdfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgYWRkciwgdTggKiBidWYsCiAJCQkJaW50IG51bSkKIHsKLQl1MzIgYWxpZ25lZF9hZGRyID0gYWRkciAmIElQV19JTkRJUkVDVF9BRERSX01BU0s7CisJdTMyIGFsaWduZWRfYWRkciA9IGFkZHIgJiBJUFdfSU5ESVJFQ1RfQUREUl9NQVNLOwkvKiBkd29yZCBhbGlnbiAqLwogCXUzMiBkaWZfbGVuID0gYWRkciAtIGFsaWduZWRfYWRkcjsKIAl1MzIgaTsKIApAQCAtNDA5LDIwICs0NDYsMjEgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIFdyaXRlIHRoZSBmaXJzdCBuaWJibGUgYnl0ZSBieSBieXRlICovCisJLyogV3JpdGUgdGhlIGZpcnN0IGR3b3JkIChvciBwb3J0aW9uKSBieXRlIGJ5IGJ5dGUgKi8KIAlpZiAodW5saWtlbHkoZGlmX2xlbikpIHsKIAkJX2lwd193cml0ZTMyKHByaXYsIElQV19JTkRJUkVDVF9BRERSLCBhbGlnbmVkX2FkZHIpOwotCQkvKiBTdGFydCByZWFkaW5nIGF0IGFsaWduZWRfYWRkciArIGRpZl9sZW4gKi8KKwkJLyogU3RhcnQgd3JpdGluZyBhdCBhbGlnbmVkX2FkZHIgKyBkaWZfbGVuICovCiAJCWZvciAoaSA9IGRpZl9sZW47ICgoaSA8IDQpICYmIChudW0gPiAwKSk7IGkrKywgbnVtLS0sIGJ1ZisrKQogCQkJX2lwd193cml0ZTgocHJpdiwgSVBXX0lORElSRUNUX0RBVEEgKyBpLCAqYnVmKTsKIAkJYWxpZ25lZF9hZGRyICs9IDQ7CiAJfQogCisJLyogV3JpdGUgYWxsIG9mIHRoZSBtaWRkbGUgZHdvcmRzIGFzIGR3b3Jkcywgd2l0aCBhdXRvLWluY3JlbWVudCAqLwogCV9pcHdfd3JpdGUzMihwcml2LCBJUFdfQVVUT0lOQ19BRERSLCBhbGlnbmVkX2FkZHIpOwogCWZvciAoOyBudW0gPj0gNDsgYnVmICs9IDQsIGFsaWduZWRfYWRkciArPSA0LCBudW0gLT0gNCkKIAkJX2lwd193cml0ZTMyKHByaXYsIElQV19BVVRPSU5DX0RBVEEsICoodTMyICopIGJ1Zik7CiAKLQkvKiBDb3B5IHRoZSBsYXN0IG5pYmJsZSAqLworCS8qIFdyaXRlIHRoZSBsYXN0IGR3b3JkIChvciBwb3J0aW9uKSBieXRlIGJ5IGJ5dGUgKi8KIAlpZiAodW5saWtlbHkobnVtKSkgewogCQlfaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lORElSRUNUX0FERFIsIGFsaWduZWRfYWRkcik7CiAJCWZvciAoaSA9IDA7IG51bSA+IDA7IGkrKywgbnVtLS0sIGJ1ZisrKQpAQCAtNDMwLDE3ICs0NjgsMjEgQEAKIAl9CiB9CiAKKy8qIEdlbmVyYWwgcHVycG9zZSwgbm8gYWxpZ25tZW50IHJlcXVpcmVtZW50LCBpdGVyYXRpdmUgKG11bHRpLWJ5dGUpIHdyaXRlLCAqLworLyogICAgZm9yIDFzdCA0SyBvZiBTUkFNL3JlZ3Mgc3BhY2UgKi8KIHN0YXRpYyB2b2lkIGlwd193cml0ZV9kaXJlY3Qoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgYWRkciwgdm9pZCAqYnVmLAogCQkJICAgICBpbnQgbnVtKQogewogCW1lbWNweV90b2lvKChwcml2LT5od19iYXNlICsgYWRkciksIGJ1ZiwgbnVtKTsKIH0KIAorLyogU2V0IGJpdChzKSBpbiBsb3cgNEsgb2YgU1JBTS9yZWdzICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB3X3NldF9iaXQoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKIHsKIAlpcHdfd3JpdGUzMihwcml2LCByZWcsIGlwd19yZWFkMzIocHJpdiwgcmVnKSB8IG1hc2spOwogfQogCisvKiBDbGVhciBiaXQocykgaW4gbG93IDRLIG9mIFNSQU0vcmVncyAqLwogc3RhdGljIGlubGluZSB2b2lkIGlwd19jbGVhcl9iaXQoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKIHsKIAlpcHdfd3JpdGUzMihwcml2LCByZWcsIGlwd19yZWFkMzIocHJpdiwgcmVnKSAmIH5tYXNrKTsKQEAgLTcwMSw3ICs3NDMsNyBAQAogCiB9CiAKLXUzMiBpcHdfcmVnaXN0ZXJfdG9nZ2xlKHUzMiByZWcpCitzdGF0aWMgdTMyIGlwd19yZWdpc3Rlcl90b2dnbGUodTMyIHJlZykKIHsKIAlyZWcgJj0gfklQV19TVEFSVF9TVEFOREJZOwogCWlmIChyZWcgJiBJUFdfR0FURV9PRE1BKQpAQCAtNzIyLDExICs3NjQsMTEgQEAKICAqIC0gT24gcmFkaW8gT0ZGLCB0dXJuIG9mZiBhbnkgTEVEcyBzdGFydGVkIGR1cmluZyByYWRpbyBvbgogICoKICAqLwotI2RlZmluZSBMRF9USU1FX0xJTktfT04gMzAwCi0jZGVmaW5lIExEX1RJTUVfTElOS19PRkYgMjcwMAotI2RlZmluZSBMRF9USU1FX0FDVF9PTiAyNTAKKyNkZWZpbmUgTERfVElNRV9MSU5LX09OIG1zZWNzX3RvX2ppZmZpZXMoMzAwKQorI2RlZmluZSBMRF9USU1FX0xJTktfT0ZGIG1zZWNzX3RvX2ppZmZpZXMoMjcwMCkKKyNkZWZpbmUgTERfVElNRV9BQ1RfT04gbXNlY3NfdG9famlmZmllcygyNTApCiAKLXZvaWQgaXB3X2xlZF9saW5rX29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGlwd19sZWRfbGlua19vbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgbGVkOwpAQCAtNzY0LDEyICs4MDYsMTIgQEAKIHN0YXRpYyB2b2lkIGlwd19iZ19sZWRfbGlua19vbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXB3X2xlZF9saW5rX29uKGRhdGEpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi12b2lkIGlwd19sZWRfbGlua19vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXB3X2xlZF9saW5rX29mZihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgbGVkOwpAQCAtODA4LDkgKzg1MCw5IEBACiBzdGF0aWMgdm9pZCBpcHdfYmdfbGVkX2xpbmtfb2ZmKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpcHdfbGVkX2xpbmtfb2ZmKGRhdGEpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2lwd19sZWRfYWN0aXZpdHlfb24oc3RydWN0IGlwd19wcml2ICpwcml2KQpAQCAtODQ3LDYgKzg4OSw3IEBACiAJfQogfQogCisjaWYgMAogdm9pZCBpcHdfbGVkX2FjdGl2aXR5X29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODU0LDggKzg5Nyw5IEBACiAJX19pcHdfbGVkX2FjdGl2aXR5X29uKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KKyNlbmRpZiAgLyogIDAgICovCiAKLXZvaWQgaXB3X2xlZF9hY3Rpdml0eV9vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXB3X2xlZF9hY3Rpdml0eV9vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGxlZDsKQEAgLTg4NSwxMiArOTI5LDEyIEBACiBzdGF0aWMgdm9pZCBpcHdfYmdfbGVkX2FjdGl2aXR5X29mZih2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXB3X2xlZF9hY3Rpdml0eV9vZmYoZGF0YSk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXZvaWQgaXB3X2xlZF9iYW5kX29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGlwd19sZWRfYmFuZF9vbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgbGVkOwpAQCAtOTI1LDcgKzk2OSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi12b2lkIGlwd19sZWRfYmFuZF9vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXB3X2xlZF9iYW5kX29mZihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgbGVkOwpAQCAtOTQ4LDI0ICs5OTIsMjQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQgaXB3X2xlZF9yYWRpb19vbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpcHdfbGVkX3JhZGlvX29uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKIAlpcHdfbGVkX2xpbmtfb24ocHJpdik7CiB9CiAKLXZvaWQgaXB3X2xlZF9yYWRpb19vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXB3X2xlZF9yYWRpb19vZmYoc3RydWN0IGlwd19wcml2ICpwcml2KQogewogCWlwd19sZWRfYWN0aXZpdHlfb2ZmKHByaXYpOwogCWlwd19sZWRfbGlua19vZmYocHJpdik7CiB9CiAKLXZvaWQgaXB3X2xlZF9saW5rX3VwKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGlwd19sZWRfbGlua191cChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJLyogU2V0IHRoZSBMaW5rIExlZCBvbiBmb3IgYWxsIG5pYyB0eXBlcyAqLwogCWlwd19sZWRfbGlua19vbihwcml2KTsKIH0KIAotdm9pZCBpcHdfbGVkX2xpbmtfZG93bihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpcHdfbGVkX2xpbmtfZG93bihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJaXB3X2xlZF9hY3Rpdml0eV9vZmYocHJpdik7CiAJaXB3X2xlZF9saW5rX29mZihwcml2KTsKQEAgLTk3NCw3ICsxMDE4LDcgQEAKIAkJaXB3X2xlZF9yYWRpb19vZmYocHJpdik7CiB9CiAKLXZvaWQgaXB3X2xlZF9pbml0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGlwd19sZWRfaW5pdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJcHJpdi0+bmljX3R5cGUgPSBwcml2LT5lZXByb21bRUVQUk9NX05JQ19UWVBFXTsKIApAQCAtMTAyNSw3ICsxMDY5LDcgQEAKIAl9CiB9CiAKLXZvaWQgaXB3X2xlZF9zaHV0ZG93bihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpcHdfbGVkX3NodXRkb3duKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKIAlpcHdfbGVkX2FjdGl2aXR5X29mZihwcml2KTsKIAlpcHdfbGVkX2xpbmtfb2ZmKHByaXYpOwpAQCAtMTA3NCw2ICsxMTE4LDcgQEAKIAogc3RhdGljIGlubGluZSB1MzIgaXB3X2dldF9ldmVudF9sb2dfbGVuKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKKwkvKiBsZW5ndGggPSAxc3QgZHdvcmQgaW4gbG9nICovCiAJcmV0dXJuIGlwd19yZWFkX3JlZzMyKHByaXYsIGlwd19yZWFkMzIocHJpdiwgSVBXX0VWRU5UX0xPRykpOwogfQogCkBAIC0xNjAzLDcgKzE2NDgsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoaXB3X2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgY2hhbm5lbCkpCisJCWlmIChpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBjaGFubmVsKSkKIAkJCXByaXYtPnNwZWVkX3NjYW5bcG9zKytdID0gY2hhbm5lbDsKIAkJZWxzZQogCQkJSVBXX1dBUk5JTkcoIlNraXBwaW5nIGludmFsaWQgY2hhbm5lbCByZXF1ZXN0OiAlZFxuIiwKQEAgLTE3NTEsOSArMTc5Niw5IEBACiAJfQogCiAJaWYgKGludGEgJiBJUFdfSU5UQV9CSVRfRkFUQUxfRVJST1IpIHsKLQkJSVBXX0VSUk9SKCJGaXJtd2FyZSBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJSVBXX1dBUk5JTkcoIkZpcm13YXJlIGVycm9yIGRldGVjdGVkLiAgUmVzdGFydGluZy5cbiIpOwogCQlpZiAocHJpdi0+ZXJyb3IpIHsKLQkJCUlQV19FUlJPUigiU3lzZnMgJ2Vycm9yJyBsb2cgYWxyZWFkeSBleGlzdHMuXG4iKTsKKwkJCUlQV19ERUJVR19GVygiU3lzZnMgJ2Vycm9yJyBsb2cgYWxyZWFkeSBleGlzdHMuXG4iKTsKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRwogCQkJaWYgKGlwd19kZWJ1Z19sZXZlbCAmIElQV19ETF9GV19FUlJPUlMpIHsKIAkJCQlzdHJ1Y3QgaXB3X2Z3X2Vycm9yICplcnJvciA9CkBAIC0xNzY2LDEwICsxODExLDEwIEBACiAJCX0gZWxzZSB7CiAJCQlwcml2LT5lcnJvciA9IGlwd19hbGxvY19lcnJvcl9sb2cocHJpdik7CiAJCQlpZiAocHJpdi0+ZXJyb3IpCi0JCQkJSVBXX0VSUk9SKCJTeXNmcyAnZXJyb3InIGxvZyBjYXB0dXJlZC5cbiIpOworCQkJCUlQV19ERUJVR19GVygiU3lzZnMgJ2Vycm9yJyBsb2cgY2FwdHVyZWQuXG4iKTsKIAkJCWVsc2UKLQkJCQlJUFdfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgc3lzZnMgJ2Vycm9yJyAiCi0JCQkJCSAgImxvZy5cbiIpOworCQkJCUlQV19ERUJVR19GVygiRXJyb3IgYWxsb2NhdGluZyBzeXNmcyAnZXJyb3InICIKKwkJCQkJICAgICAibG9nLlxuIik7CiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIAkJCWlmIChpcHdfZGVidWdfbGV2ZWwgJiBJUFdfRExfRldfRVJST1JTKQogCQkJCWlwd19kdW1wX2Vycm9yX2xvZyhwcml2LCBwcml2LT5lcnJvcik7CkBAIC0xODcwLDcgKzE5MTUsOCBAQAogfQogCiAjZGVmaW5lIEhPU1RfQ09NUExFVEVfVElNRU9VVCBIWgotc3RhdGljIGludCBpcHdfc2VuZF9jbWQoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaG9zdF9jbWQgKmNtZCkKKworc3RhdGljIGludCBfX2lwd19zZW5kX2NtZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBob3N0X2NtZCAqY21kKQogewogCWludCByYyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE4OTcsOSArMTk0MywxNSBAQAogCUlQV19ERUJVR19IQygiJXMgY29tbWFuZCAoIyVkKSAlZCBieXRlczogMHglMDhYXG4iLAogCQkgICAgIGdldF9jbWRfc3RyaW5nKGNtZC0+Y21kKSwgY21kLT5jbWQsIGNtZC0+bGVuLAogCQkgICAgIHByaXYtPnN0YXR1cyk7Ci0JcHJpbnRrX2J1ZihJUFdfRExfSE9TVF9DT01NQU5ELCAodTggKikgY21kLT5wYXJhbSwgY21kLT5sZW4pOwogCi0JcmMgPSBpcHdfcXVldWVfdHhfaGNtZChwcml2LCBjbWQtPmNtZCwgJmNtZC0+cGFyYW0sIGNtZC0+bGVuLCAwKTsKKyNpZm5kZWYgREVCVUdfQ01EX1dFUF9LRVkKKwlpZiAoY21kLT5jbWQgPT0gSVBXX0NNRF9XRVBfS0VZKQorCQlJUFdfREVCVUdfSEMoIldFUF9LRVkgY29tbWFuZCBtYXNrZWQgb3V0IGZvciBzZWN1cmUuXG4iKTsKKwllbHNlCisjZW5kaWYKKwkJcHJpbnRrX2J1ZihJUFdfRExfSE9TVF9DT01NQU5ELCAodTggKikgY21kLT5wYXJhbSwgY21kLT5sZW4pOworCisJcmMgPSBpcHdfcXVldWVfdHhfaGNtZChwcml2LCBjbWQtPmNtZCwgY21kLT5wYXJhbSwgY21kLT5sZW4sIDApOwogCWlmIChyYykgewogCQlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19IQ01EX0FDVElWRTsKIAkJSVBXX0VSUk9SKCJGYWlsZWQgdG8gc2VuZCAlczogUmVhc29uICVkXG4iLApAQCAtMTk0Miw2MSArMTk5NCw2MiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBpcHdfc2VuZF9ob3N0X2NvbXBsZXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXB3X3NlbmRfY21kX3NpbXBsZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHU4IGNvbW1hbmQpCiB7CiAJc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKLQkJLmNtZCA9IElQV19DTURfSE9TVF9DT01QTEVURSwKLQkJLmxlbiA9IDAKKwkJLmNtZCA9IGNvbW1hbmQsCiAJfTsKIAorCXJldHVybiBfX2lwd19zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworc3RhdGljIGludCBpcHdfc2VuZF9jbWRfcGR1KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggY29tbWFuZCwgdTggbGVuLAorCQkJICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKKwkJLmNtZCA9IGNvbW1hbmQsCisJCS5sZW4gPSBsZW4sCisJCS5wYXJhbSA9IGRhdGEsCisJfTsKKworCXJldHVybiBfX2lwd19zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworc3RhdGljIGludCBpcHdfc2VuZF9ob3N0X2NvbXBsZXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKK3sKIAlpZiAoIXByaXYpIHsKIAkJSVBXX0VSUk9SKCJJbnZhbGlkIGFyZ3NcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3NpbXBsZShwcml2LCBJUFdfQ01EX0hPU1RfQ09NUExFVEUpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX3N5c3RlbV9jb25maWcoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCSAgc3RydWN0IGlwd19zeXNfY29uZmlnICpjb25maWcpCiB7Ci0Jc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKLQkJLmNtZCA9IElQV19DTURfU1lTVEVNX0NPTkZJRywKLQkJLmxlbiA9IHNpemVvZigqY29uZmlnKQotCX07Ci0KIAlpZiAoIXByaXYgfHwgIWNvbmZpZykgewogCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQltZW1jcHkoY21kLnBhcmFtLCBjb25maWcsIHNpemVvZigqY29uZmlnKSk7Ci0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1NZU1RFTV9DT05GSUcsIHNpemVvZigqY29uZmlnKSwKKwkJCQljb25maWcpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX3NzaWQoc3RydWN0IGlwd19wcml2ICpwcml2LCB1OCAqIHNzaWQsIGludCBsZW4pCiB7Ci0Jc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKLQkJLmNtZCA9IElQV19DTURfU1NJRCwKLQkJLmxlbiA9IG1pbihsZW4sIElXX0VTU0lEX01BWF9TSVpFKQotCX07Ci0KIAlpZiAoIXByaXYgfHwgIXNzaWQpIHsKIAkJSVBXX0VSUk9SKCJJbnZhbGlkIGFyZ3NcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtY3B5KGNtZC5wYXJhbSwgc3NpZCwgY21kLmxlbik7Ci0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1NTSUQsIG1pbihsZW4sIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJCQlzc2lkKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9hZGFwdGVyX2FkZHJlc3Moc3RydWN0IGlwd19wcml2ICpwcml2LCB1OCAqIG1hYykKIHsKLQlzdHJ1Y3QgaG9zdF9jbWQgY21kID0gewotCQkuY21kID0gSVBXX0NNRF9BREFQVEVSX0FERFJFU1MsCi0JCS5sZW4gPSBFVEhfQUxFTgotCX07Ci0KIAlpZiAoIXByaXYgfHwgIW1hYykgewogCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7CiAJCXJldHVybiAtMTsKQEAgLTIwMDUsOCArMjA1OCw3IEBACiAJSVBXX0RFQlVHX0lORk8oIiVzOiBTZXR0aW5nIE1BQyB0byAiIE1BQ19GTVQgIlxuIiwKIAkJICAgICAgIHByaXYtPm5ldF9kZXYtPm5hbWUsIE1BQ19BUkcobWFjKSk7CiAKLQltZW1jcHkoY21kLnBhcmFtLCBtYWMsIEVUSF9BTEVOKTsKLQlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfQURBUFRFUl9BRERSRVNTLCBFVEhfQUxFTiwgbWFjKTsKIH0KIAogLyoKQEAgLTIwMzYsOSArMjA4OCw5IEBACiBzdGF0aWMgdm9pZCBpcHdfYmdfYWRhcHRlcl9yZXN0YXJ0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpcHdfYWRhcHRlcl9yZXN0YXJ0KGRhdGEpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiAjZGVmaW5lIElQV19TQ0FOX0NIRUNLX1dBVENIRE9HICg1ICogSFopCkBAIC0yMDQ4LDggKzIxMDAsOCBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CiAJaWYgKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfU0NBTk5JTkcgfCBTVEFUVVNfU0NBTl9BQk9SVElORykpIHsKIAkJSVBXX0RFQlVHX1NDQU4oIlNjYW4gY29tcGxldGlvbiB3YXRjaGRvZyByZXNldHRpbmcgIgotCQkJICAgICAgICJhZGFwdGVyICglZG1zKS5cbiIsCi0JCQkgICAgICAgSVBXX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgLyAxMDApOworCQkJICAgICAgICJhZGFwdGVyIGFmdGVyICglZG1zKS5cbiIsCisJCQkgICAgICAgamlmZmllc190b19tc2VjcyhJUFdfU0NBTl9DSEVDS19XQVRDSERPRykpOwogCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFkYXB0ZXJfcmVzdGFydCk7CiAJfQogfQpAQCAtMjA1Nyw1OSArMjEwOSw0OCBAQAogc3RhdGljIHZvaWQgaXB3X2JnX3NjYW5fY2hlY2sodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlwd19zY2FuX2NoZWNrKGRhdGEpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX3NjYW5fcmVxdWVzdF9leHQoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCSAgICAgc3RydWN0IGlwd19zY2FuX3JlcXVlc3RfZXh0ICpyZXF1ZXN0KQogewotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX1NDQU5fUkVRVUVTVF9FWFQsCi0JCS5sZW4gPSBzaXplb2YoKnJlcXVlc3QpCi0JfTsKLQotCW1lbWNweShjbWQucGFyYW0sIHJlcXVlc3QsIHNpemVvZigqcmVxdWVzdCkpOwotCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGlwd19zZW5kX2NtZF9wZHUocHJpdiwgSVBXX0NNRF9TQ0FOX1JFUVVFU1RfRVhULAorCQkJCXNpemVvZigqcmVxdWVzdCksIHJlcXVlc3QpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGlwd19wcml2ICpwcml2KQogewotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX1NDQU5fQUJPUlQsCi0JCS5sZW4gPSAwCi0JfTsKLQogCWlmICghcHJpdikgewogCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworCXJldHVybiBpcHdfc2VuZF9jbWRfc2ltcGxlKHByaXYsIElQV19DTURfU0NBTl9BQk9SVCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NldF9zZW5zaXRpdml0eShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUxNiBzZW5zKQogewotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX1NFTlNJVElWSVRZX0NBTElCLAotCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpcHdfc2Vuc2l0aXZpdHlfY2FsaWIpCisJc3RydWN0IGlwd19zZW5zaXRpdml0eV9jYWxpYiBjYWxpYiA9IHsKKwkJLmJlYWNvbl9yc3NpX3JhdyA9IHNlbnMsCiAJfTsKLQlzdHJ1Y3QgaXB3X3NlbnNpdGl2aXR5X2NhbGliICpjYWxpYiA9IChzdHJ1Y3QgaXB3X3NlbnNpdGl2aXR5X2NhbGliICopCi0JICAgICZjbWQucGFyYW07Ci0JY2FsaWItPmJlYWNvbl9yc3NpX3JhdyA9IHNlbnM7Ci0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKworCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfU0VOU0lUSVZJVFlfQ0FMSUIsIHNpemVvZihjYWxpYiksCisJCQkJJmNhbGliKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9hc3NvY2lhdGUoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGlwd19hc3NvY2lhdGUgKmFzc29jaWF0ZSkKIHsKLQlzdHJ1Y3QgaG9zdF9jbWQgY21kID0gewotCQkuY21kID0gSVBXX0NNRF9BU1NPQ0lBVEUsCi0JCS5sZW4gPSBzaXplb2YoKmFzc29jaWF0ZSkKLQl9OwotCiAJc3RydWN0IGlwd19hc3NvY2lhdGUgdG1wX2Fzc29jaWF0ZTsKKworCWlmICghcHJpdiB8fCAhYXNzb2NpYXRlKSB7CisJCUlQV19FUlJPUigiSW52YWxpZCBhcmdzXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCW1lbWNweSgmdG1wX2Fzc29jaWF0ZSwgYXNzb2NpYXRlLCBzaXplb2YoKmFzc29jaWF0ZSkpOwogCXRtcF9hc3NvY2lhdGUucG9saWN5X3N1cHBvcnQgPQogCSAgICBjcHVfdG9fbGUxNih0bXBfYXNzb2NpYXRlLnBvbGljeV9zdXBwb3J0KTsKQEAgLTIxMjIsODUgKzIxNjMsNjAgQEAKIAkgICAgY3B1X3RvX2xlMTYodG1wX2Fzc29jaWF0ZS5iZWFjb25faW50ZXJ2YWwpOwogCXRtcF9hc3NvY2lhdGUuYXRpbV93aW5kb3cgPSBjcHVfdG9fbGUxNih0bXBfYXNzb2NpYXRlLmF0aW1fd2luZG93KTsKIAotCWlmICghcHJpdiB8fCAhYXNzb2NpYXRlKSB7Ci0JCUlQV19FUlJPUigiSW52YWxpZCBhcmdzXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1lbWNweShjbWQucGFyYW0sICZ0bXBfYXNzb2NpYXRlLCBzaXplb2YoKmFzc29jaWF0ZSkpOwotCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGlwd19zZW5kX2NtZF9wZHUocHJpdiwgSVBXX0NNRF9BU1NPQ0lBVEUsIHNpemVvZih0bXBfYXNzb2NpYXRlKSwKKwkJCQkmdG1wX2Fzc29jaWF0ZSk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfc3VwcG9ydGVkX3JhdGVzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGlwd19zdXBwb3J0ZWRfcmF0ZXMgKnJhdGVzKQogewotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX1NVUFBPUlRFRF9SQVRFUywKLQkJLmxlbiA9IHNpemVvZigqcmF0ZXMpCi0JfTsKLQogCWlmICghcHJpdiB8fCAhcmF0ZXMpIHsKIAkJSVBXX0VSUk9SKCJJbnZhbGlkIGFyZ3NcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtY3B5KGNtZC5wYXJhbSwgcmF0ZXMsIHNpemVvZigqcmF0ZXMpKTsKLQlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfU1VQUE9SVEVEX1JBVEVTLCBzaXplb2YoKnJhdGVzKSwKKwkJCQlyYXRlcyk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NldF9yYW5kb21fc2VlZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKLQkJLmNtZCA9IElQV19DTURfU0VFRF9OVU1CRVIsCi0JCS5sZW4gPSBzaXplb2YodTMyKQotCX07CisJdTMyIHZhbDsKIAogCWlmICghcHJpdikgewogCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlnZXRfcmFuZG9tX2J5dGVzKCZjbWQucGFyYW0sIHNpemVvZih1MzIpKTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZ2YWwsIHNpemVvZih2YWwpKTsKIAotCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGlwd19zZW5kX2NtZF9wZHUocHJpdiwgSVBXX0NNRF9TRUVEX05VTUJFUiwgc2l6ZW9mKHZhbCksICZ2YWwpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZW5kX2NhcmRfZGlzYWJsZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBwaHlfb2ZmKQogewotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX0NBUkRfRElTQUJMRSwKLQkJLmxlbiA9IHNpemVvZih1MzIpCi0JfTsKLQogCWlmICghcHJpdikgewogCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQkqKCh1MzIgKikgJiBjbWQucGFyYW0pID0gcGh5X29mZjsKLQotCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGlwd19zZW5kX2NtZF9wZHUocHJpdiwgSVBXX0NNRF9DQVJEX0RJU0FCTEUsIHNpemVvZihwaHlfb2ZmKSwKKwkJCQkmcGh5X29mZik7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfdHhfcG93ZXIoc3RydWN0IGlwd19wcml2ICpwcml2LCBzdHJ1Y3QgaXB3X3R4X3Bvd2VyICpwb3dlcikKIHsKLQlzdHJ1Y3QgaG9zdF9jbWQgY21kID0gewotCQkuY21kID0gSVBXX0NNRF9UWF9QT1dFUiwKLQkJLmxlbiA9IHNpemVvZigqcG93ZXIpCi0JfTsKLQogCWlmICghcHJpdiB8fCAhcG93ZXIpIHsKIAkJSVBXX0VSUk9SKCJJbnZhbGlkIGFyZ3NcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWVtY3B5KGNtZC5wYXJhbSwgcG93ZXIsIHNpemVvZigqcG93ZXIpKTsKLQlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfVFhfUE9XRVIsIHNpemVvZigqcG93ZXIpLCBwb3dlcik7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NldF90eF9wb3dlcihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGlwd19nZXRfZ2VvKHByaXYtPmllZWUpOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpZWVlODAyMTFfZ2V0X2dlbyhwcml2LT5pZWVlKTsKIAlzdHJ1Y3QgaXB3X3R4X3Bvd2VyIHR4X3Bvd2VyOwogCXM4IG1heF9wb3dlcjsKIAlpbnQgaTsKQEAgLTIyNDcsMTggKzIyNjMsMTQgQEAKIAlzdHJ1Y3QgaXB3X3J0c190aHJlc2hvbGQgcnRzX3RocmVzaG9sZCA9IHsKIAkJLnJ0c190aHJlc2hvbGQgPSBydHMsCiAJfTsKLQlzdHJ1Y3QgaG9zdF9jbWQgY21kID0gewotCQkuY21kID0gSVBXX0NNRF9SVFNfVEhSRVNIT0xELAotCQkubGVuID0gc2l6ZW9mKHJ0c190aHJlc2hvbGQpCi0JfTsKIAogCWlmICghcHJpdikgewogCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQltZW1jcHkoY21kLnBhcmFtLCAmcnRzX3RocmVzaG9sZCwgc2l6ZW9mKHJ0c190aHJlc2hvbGQpKTsKLQlyZXR1cm4gaXB3X3NlbmRfY21kKHByaXYsICZjbWQpOworCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfUlRTX1RIUkVTSE9MRCwKKwkJCQlzaXplb2YocnRzX3RocmVzaG9sZCksICZydHNfdGhyZXNob2xkKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUxNiBmcmFnKQpAQCAtMjI2NiwyNyArMjI3OCwxOSBAQAogCXN0cnVjdCBpcHdfZnJhZ190aHJlc2hvbGQgZnJhZ190aHJlc2hvbGQgPSB7CiAJCS5mcmFnX3RocmVzaG9sZCA9IGZyYWcsCiAJfTsKLQlzdHJ1Y3QgaG9zdF9jbWQgY21kID0gewotCQkuY21kID0gSVBXX0NNRF9GUkFHX1RIUkVTSE9MRCwKLQkJLmxlbiA9IHNpemVvZihmcmFnX3RocmVzaG9sZCkKLQl9OwogCiAJaWYgKCFwcml2KSB7CiAJCUlQV19FUlJPUigiSW52YWxpZCBhcmdzXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweShjbWQucGFyYW0sICZmcmFnX3RocmVzaG9sZCwgc2l6ZW9mKGZyYWdfdGhyZXNob2xkKSk7Ci0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX0ZSQUdfVEhSRVNIT0xELAorCQkJCXNpemVvZihmcmFnX3RocmVzaG9sZCksICZmcmFnX3RocmVzaG9sZCk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfcG93ZXJfbW9kZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUzMiBtb2RlKQogewotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX1BPV0VSX01PREUsCi0JCS5sZW4gPSBzaXplb2YodTMyKQotCX07Ci0JdTMyICpwYXJhbSA9ICh1MzIgKikgKCZjbWQucGFyYW0pOworCXUzMiBwYXJhbTsKIAogCWlmICghcHJpdikgewogCQlJUFdfRVJST1IoIkludmFsaWQgYXJnc1xuIik7CkBAIC0yMjk3LDE3ICsyMzAxLDE4IEBACiAJICogbGV2ZWwgKi8KIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIElQV19QT1dFUl9CQVRURVJZOgotCQkqcGFyYW0gPSBJUFdfUE9XRVJfSU5ERVhfMzsKKwkJcGFyYW0gPSBJUFdfUE9XRVJfSU5ERVhfMzsKIAkJYnJlYWs7CiAJY2FzZSBJUFdfUE9XRVJfQUM6Ci0JCSpwYXJhbSA9IElQV19QT1dFUl9NT0RFX0NBTTsKKwkJcGFyYW0gPSBJUFdfUE9XRVJfTU9ERV9DQU07CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCSpwYXJhbSA9IG1vZGU7CisJCXBhcmFtID0gbW9kZTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1BPV0VSX01PREUsIHNpemVvZihwYXJhbSksCisJCQkJJnBhcmFtKTsKIH0KIAogc3RhdGljIGludCBpcHdfc2VuZF9yZXRyeV9saW1pdChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHU4IHNsaW1pdCwgdTggbGxpbWl0KQpAQCAtMjMxNiwxOCArMjMyMSwxNCBAQAogCQkuc2hvcnRfcmV0cnlfbGltaXQgPSBzbGltaXQsCiAJCS5sb25nX3JldHJ5X2xpbWl0ID0gbGxpbWl0CiAJfTsKLQlzdHJ1Y3QgaG9zdF9jbWQgY21kID0gewotCQkuY21kID0gSVBXX0NNRF9SRVRSWV9MSU1JVCwKLQkJLmxlbiA9IHNpemVvZihyZXRyeV9saW1pdCkKLQl9OwogCiAJaWYgKCFwcml2KSB7CiAJCUlQV19FUlJPUigiSW52YWxpZCBhcmdzXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCW1lbWNweShjbWQucGFyYW0sICZyZXRyeV9saW1pdCwgc2l6ZW9mKHJldHJ5X2xpbWl0KSk7Ci0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1JFVFJZX0xJTUlULCBzaXplb2YocmV0cnlfbGltaXQpLAorCQkJCSZyZXRyeV9saW1pdCk7CiB9CiAKIC8qCkBAIC0yNDU0LDcgKzI0NTUsNyBAQAogCS8qCiAJICAgSWYgdGhlIGRhdGEgbG9va3MgY29ycmVjdCwgdGhlbiBjb3B5IGl0IHRvIG91ciBwcml2YXRlCiAJICAgY29weS4gIE90aGVyd2lzZSBsZXQgdGhlIGZpcm13YXJlIGtub3cgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uCi0JICAgb24gaXQncyBvd24KKwkgICBvbiBpdHMgb3duLgogCSAqLwogCWlmIChwcml2LT5lZXByb21bRUVQUk9NX1ZFUlNJT05dICE9IDApIHsKIAkJSVBXX0RFQlVHX0lORk8oIldyaXRpbmcgRUVQUk9NIGRhdGEgaW50byBTUkFNXG4iKTsKQEAgLTI3MDcsMjIgKzI3MDgsMjUgQEAKIAogc3RhdGljIGludCBpcHdfZndfZG1hX3dhaXQoc3RydWN0IGlwd19wcml2ICpwcml2KQogewotCXUzMiBjdXJyZW50X2luZGV4ID0gMDsKKwl1MzIgY3VycmVudF9pbmRleCA9IDAsIHByZXZpb3VzX2luZGV4OwogCXUzMiB3YXRjaGRvZyA9IDA7CiAKIAlJUFdfREVCVUdfRlcoIj4+IDogXG4iKTsKIAogCWN1cnJlbnRfaW5kZXggPSBpcHdfZndfZG1hX2NvbW1hbmRfYmxvY2tfaW5kZXgocHJpdik7Ci0JSVBXX0RFQlVHX0ZXX0lORk8oInNyYW1fZGVzYy5sYXN0X2NiX2luZGV4OjB4JThYXG4iLAorCUlQV19ERUJVR19GV19JTkZPKCJzcmFtX2Rlc2MubGFzdF9jYl9pbmRleDoweCUwOFhcbiIsCiAJCQkgIChpbnQpcHJpdi0+c3JhbV9kZXNjLmxhc3RfY2JfaW5kZXgpOwogCiAJd2hpbGUgKGN1cnJlbnRfaW5kZXggPCBwcml2LT5zcmFtX2Rlc2MubGFzdF9jYl9pbmRleCkgewogCQl1ZGVsYXkoNTApOworCQlwcmV2aW91c19pbmRleCA9IGN1cnJlbnRfaW5kZXg7CiAJCWN1cnJlbnRfaW5kZXggPSBpcHdfZndfZG1hX2NvbW1hbmRfYmxvY2tfaW5kZXgocHJpdik7CiAKLQkJd2F0Y2hkb2crKzsKLQotCQlpZiAod2F0Y2hkb2cgPiA0MDApIHsKKwkJaWYgKHByZXZpb3VzX2luZGV4IDwgY3VycmVudF9pbmRleCkgeworCQkJd2F0Y2hkb2cgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCsrd2F0Y2hkb2cgPiA0MDApIHsKIAkJCUlQV19ERUJVR19GV19JTkZPKCJUaW1lb3V0XG4iKTsKIAkJCWlwd19md19kbWFfZHVtcF9jb21tYW5kX2Jsb2NrKHByaXYpOwogCQkJaXB3X2Z3X2RtYV9hYm9ydChwcml2KTsKQEAgLTI3NzIsNiArMjc3Niw3IEBACiAJcmV0dXJuIGlwd19yZWFkMzIocHJpdiwgMHg5MCkgPT0gMHhkNTU1NTVkNTsKIH0KIAorLyogdGltZW91dCBpbiBtc2VjLCBhdHRlbXB0ZWQgaW4gMTAtbXNlYyBxdWFudGEgKi8KIHN0YXRpYyBpbnQgaXB3X3BvbGxfYml0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiBtYXNrLAogCQkJICAgICAgIGludCB0aW1lb3V0KQogewpAQCAtMjgwMCwxMCArMjgwNSwxMSBAQAogCS8qIHN0b3AgbWFzdGVyLiB0eXBpY2FsIGRlbGF5IC0gMCAqLwogCWlwd19zZXRfYml0KHByaXYsIElQV19SRVNFVF9SRUcsIElQV19SRVNFVF9SRUdfU1RPUF9NQVNURVIpOwogCisJLyogdGltZW91dCBpcyBpbiBtc2VjLCBwb2xsZWQgaW4gMTAtbXNlYyBxdWFudGEgKi8KIAlyYyA9IGlwd19wb2xsX2JpdChwcml2LCBJUFdfUkVTRVRfUkVHLAogCQkJICBJUFdfUkVTRVRfUkVHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAlpZiAocmMgPCAwKSB7Ci0JCUlQV19FUlJPUigic3RvcCBtYXN0ZXIgZmFpbGVkIGluIDEwbXNcbiIpOworCQlJUFdfRVJST1IoIndhaXQgZm9yIHN0b3AgbWFzdGVyIGZhaWxlZCBhZnRlciAxMDBtc1xuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTI4MjMsMzMgKzI4MjksMTEgQEAKIAltZGVsYXkoNSk7CiB9CiAKLXN0cnVjdCBmd19oZWFkZXIgewotCXUzMiB2ZXJzaW9uOwotCXUzMiBtb2RlOwotfTsKLQogc3RydWN0IGZ3X2NodW5rIHsKIAl1MzIgYWRkcmVzczsKIAl1MzIgbGVuZ3RoOwogfTsKIAotI2RlZmluZSBJUFdfRldfTUFKT1JfVkVSU0lPTiAyCi0jZGVmaW5lIElQV19GV19NSU5PUl9WRVJTSU9OIDQKLQotI2RlZmluZSBJUFdfRldfTUlOT1IoeCkgKCh4ICYgMHhmZikgPj4gOCkKLSNkZWZpbmUgSVBXX0ZXX01BSk9SKHgpICh4ICYgMHhmZikKLQotI2RlZmluZSBJUFdfRldfVkVSU0lPTiAoKElQV19GV19NSU5PUl9WRVJTSU9OIDw8IDgpIHwgSVBXX0ZXX01BSk9SX1ZFUlNJT04pCi0KLSNkZWZpbmUgSVBXX0ZXX1BSRUZJWCAiaXB3LSIgX19zdHJpbmdpZnkoSVBXX0ZXX01BSk9SX1ZFUlNJT04pIFwKLSIuIiBfX3N0cmluZ2lmeShJUFdfRldfTUlOT1JfVkVSU0lPTikgIi0iCi0KLSNpZiBJUFdfRldfTUFKT1JfVkVSU0lPTiA+PSAyICYmIElQV19GV19NSU5PUl9WRVJTSU9OID4gMAotI2RlZmluZSBJUFdfRldfTkFNRSh4KSBJUFdfRldfUFJFRklYICIiIHggIi5mdyIKLSNlbHNlCi0jZGVmaW5lIElQV19GV19OQU1FKHgpICJpcHcyMjAwXyIgeCAiLmZ3IgotI2VuZGlmCi0KIHN0YXRpYyBpbnQgaXB3X2xvYWRfdWNvZGUoc3RydWN0IGlwd19wcml2ICpwcml2LCB1OCAqIGRhdGEsIHNpemVfdCBsZW4pCiB7CiAJaW50IHJjID0gMCwgaSwgYWRkcjsKQEAgLTI4OTAsOCArMjg3NCw4IEBACiAJbWRlbGF5KDEpOwogCiAJLyogZW5hYmxlIHVjb2RlIHN0b3JlICovCi0JaXB3X3dyaXRlX3JlZzgocHJpdiwgRElOT19DT05UUk9MX1JFRywgMHgwKTsKLQlpcHdfd3JpdGVfcmVnOChwcml2LCBESU5PX0NPTlRST0xfUkVHLCBESU5PX0VOQUJMRV9DUyk7CisJaXB3X3dyaXRlX3JlZzgocHJpdiwgSVBXX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTLCAweDApOworCWlwd193cml0ZV9yZWc4KHByaXYsIElQV19CQVNFQkFORF9DT05UUk9MX1NUQVRVUywgRElOT19FTkFCTEVfQ1MpOwogCW1kZWxheSgxKTsKIAogCS8qIHdyaXRlIHVjb2RlICovCkBAIC0zMDM2LDcgKzMwMjAsNyBAQAogCXJjID0gaXB3X3BvbGxfYml0KHByaXYsIElQV19SRVNFVF9SRUcsCiAJCQkgIElQV19SRVNFVF9SRUdfTUFTVEVSX0RJU0FCTEVELCA1MDApOwogCWlmIChyYyA8IDApIHsKLQkJSVBXX0VSUk9SKCJ3YWl0IGZvciByZWcgbWFzdGVyIGRpc2FibGVkIGZhaWxlZFxuIik7CisJCUlQV19FUlJPUigid2FpdCBmb3IgcmVnIG1hc3RlciBkaXNhYmxlZCBmYWlsZWQgYWZ0ZXIgNTAwbXNcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0zMTE4LDMzICszMTAyLDQ3IEBACiAJcmV0dXJuIHJjOwogfQogCisKK3N0cnVjdCBpcHdfZncgeworCXUzMiB2ZXI7CisJdTMyIGJvb3Rfc2l6ZTsKKwl1MzIgdWNvZGVfc2l6ZTsKKwl1MzIgZndfc2l6ZTsKKwl1OCBkYXRhWzBdOworfTsKKwogc3RhdGljIGludCBpcHdfZ2V0X2Z3KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNvbnN0IGNoYXIgKm5hbWUpCisJCSAgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKnJhdywgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZndfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IGlwd19mdyAqZnc7CiAJaW50IHJjOwogCiAJLyogYXNrIGZpcm13YXJlX2NsYXNzIG1vZHVsZSB0byBnZXQgdGhlIGJvb3QgZmlybXdhcmUgb2ZmIGRpc2sgKi8KLQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoZncsIG5hbWUsICZwcml2LT5wY2lfZGV2LT5kZXYpOworCXJjID0gcmVxdWVzdF9maXJtd2FyZShyYXcsIG5hbWUsICZwcml2LT5wY2lfZGV2LT5kZXYpOwogCWlmIChyYyA8IDApIHsKLQkJSVBXX0VSUk9SKCIlcyBsb2FkIGZhaWxlZDogUmVhc29uICVkXG4iLCBuYW1lLCByYyk7CisJCUlQV19FUlJPUigiJXMgcmVxdWVzdF9maXJtd2FyZSBmYWlsZWQ6IFJlYXNvbiAlZFxuIiwgbmFtZSwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaGVhZGVyID0gKHN0cnVjdCBmd19oZWFkZXIgKikoKmZ3KS0+ZGF0YTsKLQlpZiAoSVBXX0ZXX01BSk9SKGxlMzJfdG9fY3B1KGhlYWRlci0+dmVyc2lvbikpICE9IElQV19GV19NQUpPUl9WRVJTSU9OKSB7Ci0JCUlQV19FUlJPUigiJyVzJyBmaXJtd2FyZSB2ZXJzaW9uIG5vdCBjb21wYXRpYmxlICglZCAhPSAlZClcbiIsCi0JCQkgIG5hbWUsCi0JCQkgIElQV19GV19NQUpPUihsZTMyX3RvX2NwdShoZWFkZXItPnZlcnNpb24pKSwKLQkJCSAgSVBXX0ZXX01BSk9SX1ZFUlNJT04pOworCWlmICgoKnJhdyktPnNpemUgPCBzaXplb2YoKmZ3KSkgeworCQlJUFdfRVJST1IoIiVzIGlzIHRvbyBzbWFsbCAoJXpkKVxuIiwgbmFtZSwgKCpyYXcpLT5zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JSVBXX0RFQlVHX0lORk8oIkxvYWRpbmcgZmlybXdhcmUgJyVzJyBmaWxlIHYlZC4lZCAoJXpkIGJ5dGVzKVxuIiwKKwlmdyA9ICh2b2lkICopKCpyYXcpLT5kYXRhOworCisJaWYgKCgqcmF3KS0+c2l6ZSA8IHNpemVvZigqZncpICsKKwkgICAgZnctPmJvb3Rfc2l6ZSArIGZ3LT51Y29kZV9zaXplICsgZnctPmZ3X3NpemUpIHsKKwkJSVBXX0VSUk9SKCIlcyBpcyB0b28gc21hbGwgb3IgY29ycnVwdCAoJXpkKVxuIiwKKwkJCSAgbmFtZSwgKCpyYXcpLT5zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJSVBXX0RFQlVHX0lORk8oIlJlYWQgZmlybXdhcmUgJyVzJyBpbWFnZSB2JWQuJWQgKCV6ZCBieXRlcylcbiIsCiAJCSAgICAgICBuYW1lLAotCQkgICAgICAgSVBXX0ZXX01BSk9SKGxlMzJfdG9fY3B1KGhlYWRlci0+dmVyc2lvbikpLAotCQkgICAgICAgSVBXX0ZXX01JTk9SKGxlMzJfdG9fY3B1KGhlYWRlci0+dmVyc2lvbikpLAotCQkgICAgICAgKCpmdyktPnNpemUgLSBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOworCQkgICAgICAgbGUzMl90b19jcHUoZnctPnZlcikgPj4gMTYsCisJCSAgICAgICBsZTMyX3RvX2NwdShmdy0+dmVyKSAmIDB4ZmYsCisJCSAgICAgICAoKnJhdyktPnNpemUgLSBzaXplb2YoKmZ3KSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxODQsMTcgKzMxODIsMTMgQEAKIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBmd19sb2FkZWQgPSAwOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYm9vdGZ3ID0gTlVMTDsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlID0gTlVMTDsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlID0gTlVMTDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnJhdyA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIGZyZWVfZmlybXdhcmUodm9pZCkKIHsKIAlpZiAoZndfbG9hZGVkKSB7Ci0JCXJlbGVhc2VfZmlybXdhcmUoYm9vdGZ3KTsKLQkJcmVsZWFzZV9maXJtd2FyZSh1Y29kZSk7Ci0JCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwotCQlib290ZncgPSB1Y29kZSA9IGZpcm13YXJlID0gTlVMTDsKKwkJcmVsZWFzZV9maXJtd2FyZShyYXcpOworCQlyYXcgPSBOVUxMOwogCQlmd19sb2FkZWQgPSAwOwogCX0KIH0KQEAgLTMyMDUsNjAgKzMxOTksNTAgQEAKIHN0YXRpYyBpbnQgaXB3X2xvYWQoc3RydWN0IGlwd19wcml2ICpwcml2KQogewogI2lmbmRlZiBDT05GSUdfUE0KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmJvb3RmdyA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpyYXcgPSBOVUxMOwogI2VuZGlmCisJc3RydWN0IGlwd19mdyAqZnc7CisJdTggKmJvb3RfaW1nLCAqdWNvZGVfaW1nLCAqZndfaW1nOworCXU4ICpuYW1lID0gTlVMTDsKIAlpbnQgcmMgPSAwLCByZXRyaWVzID0gMzsKIAorCXN3aXRjaCAocHJpdi0+aWVlZS0+aXdfbW9kZSkgeworCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJbmFtZSA9ICJpcHcyMjAwLWlic3MuZnciOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCisJY2FzZSBJV19NT0RFX01PTklUT1I6CisJCW5hbWUgPSAiaXB3MjIwMC1zbmlmZmVyLmZ3IjsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIElXX01PREVfSU5GUkE6CisJCW5hbWUgPSAiaXB3MjIwMC1ic3MuZnciOworCQlicmVhazsKKwl9CisKKwlpZiAoIW5hbWUpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKwogI2lmZGVmIENPTkZJR19QTQogCWlmICghZndfbG9hZGVkKSB7CiAjZW5kaWYKLQkJcmMgPSBpcHdfZ2V0X2Z3KHByaXYsICZib290ZncsIElQV19GV19OQU1FKCJib290IikpOwotCQlpZiAocmMpCisJCXJjID0gaXB3X2dldF9mdyhwcml2LCAmcmF3LCBuYW1lKTsKKwkJaWYgKHJjIDwgMCkKIAkJCWdvdG8gZXJyb3I7Ci0KLQkJc3dpdGNoIChwcml2LT5pZWVlLT5pd19tb2RlKSB7Ci0JCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJCXJjID0gaXB3X2dldF9mdyhwcml2LCAmdWNvZGUsCi0JCQkJCUlQV19GV19OQU1FKCJpYnNzX3Vjb2RlIikpOwotCQkJaWYgKHJjKQotCQkJCWdvdG8gZXJyb3I7Ci0KLQkJCXJjID0gaXB3X2dldF9mdyhwcml2LCAmZmlybXdhcmUsIElQV19GV19OQU1FKCJpYnNzIikpOwotCQkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCi0JCWNhc2UgSVdfTU9ERV9NT05JVE9SOgotCQkJcmMgPSBpcHdfZ2V0X2Z3KHByaXYsICZ1Y29kZSwKLQkJCQkJSVBXX0ZXX05BTUUoInNuaWZmZXJfdWNvZGUiKSk7Ci0JCQlpZiAocmMpCi0JCQkJZ290byBlcnJvcjsKLQotCQkJcmMgPSBpcHdfZ2V0X2Z3KHByaXYsICZmaXJtd2FyZSwKLQkJCQkJSVBXX0ZXX05BTUUoInNuaWZmZXIiKSk7Ci0JCQlicmVhazsKLSNlbmRpZgotCQljYXNlIElXX01PREVfSU5GUkE6Ci0JCQlyYyA9IGlwd19nZXRfZncocHJpdiwgJnVjb2RlLCBJUFdfRldfTkFNRSgiYnNzX3Vjb2RlIikpOwotCQkJaWYgKHJjKQotCQkJCWdvdG8gZXJyb3I7Ci0KLQkJCXJjID0gaXB3X2dldF9mdyhwcml2LCAmZmlybXdhcmUsIElQV19GV19OQU1FKCJic3MiKSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKHJjKQotCQkJZ290byBlcnJvcjsKLQogI2lmZGVmIENPTkZJR19QTQotCQlmd19sb2FkZWQgPSAxOwogCX0KICNlbmRpZgogCisJZncgPSAodm9pZCAqKXJhdy0+ZGF0YTsKKwlib290X2ltZyA9ICZmdy0+ZGF0YVswXTsKKwl1Y29kZV9pbWcgPSAmZnctPmRhdGFbZnctPmJvb3Rfc2l6ZV07CisJZndfaW1nID0gJmZ3LT5kYXRhW2Z3LT5ib290X3NpemUgKyBmdy0+dWNvZGVfc2l6ZV07CisKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycm9yOworCiAJaWYgKCFwcml2LT5yeHEpCiAJCXByaXYtPnJ4cSA9IGlwd19yeF9xdWV1ZV9hbGxvYyhwcml2KTsKIAllbHNlCkBAIC0zMjc5LDcgKzMyNjMsNyBAQAogCWlwd19zdG9wX25pYyhwcml2KTsKIAogCXJjID0gaXB3X3Jlc2V0X25pYyhwcml2KTsKLQlpZiAocmMpIHsKKwlpZiAocmMgPCAwKSB7CiAJCUlQV19FUlJPUigiVW5hYmxlIHRvIHJlc2V0IE5JQ1xuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMzI4OCw4ICszMjcyLDcgQEAKIAkJCUlQV19OSUNfU1JBTV9VUFBFUl9CT1VORCAtIElQV19OSUNfU1JBTV9MT1dFUl9CT1VORCk7CiAKIAkvKiBETUEgdGhlIGluaXRpYWwgYm9vdCBmaXJtd2FyZSBpbnRvIHRoZSBkZXZpY2UgKi8KLQlyYyA9IGlwd19sb2FkX2Zpcm13YXJlKHByaXYsIGJvb3Rmdy0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSwKLQkJCSAgICAgICBib290ZnctPnNpemUgLSBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOworCXJjID0gaXB3X2xvYWRfZmlybXdhcmUocHJpdiwgYm9vdF9pbWcsIGZ3LT5ib290X3NpemUpOwogCWlmIChyYyA8IDApIHsKIAkJSVBXX0VSUk9SKCJVbmFibGUgdG8gbG9hZCBib290IGZpcm13YXJlOiAlZFxuIiwgcmMpOwogCQlnb3RvIGVycm9yOwpAQCAtMzI5OCw3ICszMjgxLDcgQEAKIAkvKiBraWNrIHN0YXJ0IHRoZSBkZXZpY2UgKi8KIAlpcHdfc3RhcnRfbmljKHByaXYpOwogCi0JLyogd2FpdCBmb3IgdGhlIGRldmljZSB0byBmaW5pc2ggaXQncyBpbml0aWFsIHN0YXJ0dXAgc2VxdWVuY2UgKi8KKwkvKiB3YWl0IGZvciB0aGUgZGV2aWNlIHRvIGZpbmlzaCBpdHMgaW5pdGlhbCBzdGFydHVwIHNlcXVlbmNlICovCiAJcmMgPSBpcHdfcG9sbF9iaXQocHJpdiwgSVBXX0lOVEFfUlcsCiAJCQkgIElQV19JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FLCA1MDApOwogCWlmIChyYyA8IDApIHsKQEAgLTMzMTEsOCArMzI5NCw3IEBACiAJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfUlcsIElQV19JTlRBX0JJVF9GV19JTklUSUFMSVpBVElPTl9ET05FKTsKIAogCS8qIERNQSB0aGUgdWNvZGUgaW50byB0aGUgZGV2aWNlICovCi0JcmMgPSBpcHdfbG9hZF91Y29kZShwcml2LCB1Y29kZS0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSwKLQkJCSAgICB1Y29kZS0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgZndfaGVhZGVyKSk7CisJcmMgPSBpcHdfbG9hZF91Y29kZShwcml2LCB1Y29kZV9pbWcsIGZ3LT51Y29kZV9zaXplKTsKIAlpZiAocmMgPCAwKSB7CiAJCUlQV19FUlJPUigiVW5hYmxlIHRvIGxvYWQgdWNvZGU6ICVkXG4iLCByYyk7CiAJCWdvdG8gZXJyb3I7CkBAIC0zMzIyLDE4ICszMzA0LDE5IEBACiAJaXB3X3N0b3BfbmljKHByaXYpOwogCiAJLyogRE1BIGJzcyBmaXJtd2FyZSBpbnRvIHRoZSBkZXZpY2UgKi8KLQlyYyA9IGlwd19sb2FkX2Zpcm13YXJlKHByaXYsIGZpcm13YXJlLT5kYXRhICsKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlciksCi0JCQkgICAgICAgZmlybXdhcmUtPnNpemUgLSBzaXplb2Yoc3RydWN0IGZ3X2hlYWRlcikpOworCXJjID0gaXB3X2xvYWRfZmlybXdhcmUocHJpdiwgZndfaW1nLCBmdy0+Zndfc2l6ZSk7CiAJaWYgKHJjIDwgMCkgewogCQlJUFdfRVJST1IoIlVuYWJsZSB0byBsb2FkIGZpcm13YXJlOiAlZFxuIiwgcmMpOwogCQlnb3RvIGVycm9yOwogCX0KKyNpZmRlZiBDT05GSUdfUE0KKwlmd19sb2FkZWQgPSAxOworI2VuZGlmCiAKIAlpcHdfd3JpdGUzMihwcml2LCBJUFdfRUVQUk9NX0xPQURfRElTQUJMRSwgMCk7CiAKIAlyYyA9IGlwd19xdWV1ZV9yZXNldChwcml2KTsKLQlpZiAocmMpIHsKKwlpZiAocmMgPCAwKSB7CiAJCUlQV19FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgcXVldWVzXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0zMzYyLDcgKzMzNDUsNyBAQAogCXJjID0gaXB3X3BvbGxfYml0KHByaXYsIElQV19JTlRBX1JXLAogCQkJICBJUFdfSU5UQV9CSVRfRldfSU5JVElBTElaQVRJT05fRE9ORSwgNTAwKTsKIAlpZiAocmMgPCAwKSB7Ci0JCUlQV19FUlJPUigiZGV2aWNlIGZhaWxlZCB0byBzdGFydCBhZnRlciA1MDBtc1xuIik7CisJCUlQV19FUlJPUigiZGV2aWNlIGZhaWxlZCB0byBzdGFydCB3aXRoaW4gNTAwbXNcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAlJUFdfREVCVUdfSU5GTygiZGV2aWNlIHJlc3BvbnNlIGFmdGVyICVkbXNcbiIsIHJjKTsKQEAgLTMzODYsOSArMzM2OSw3IEBACiAJaXB3X3dyaXRlMzIocHJpdiwgSVBXX0lOVEFfUlcsIElQV19JTlRBX01BU0tfQUxMKTsKIAogI2lmbmRlZiBDT05GSUdfUE0KLQlyZWxlYXNlX2Zpcm13YXJlKGJvb3Rmdyk7Ci0JcmVsZWFzZV9maXJtd2FyZSh1Y29kZSk7Ci0JcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisJcmVsZWFzZV9maXJtd2FyZShyYXcpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiAKQEAgLTMzOTgsMTUgKzMzNzksMTEgQEAKIAkJcHJpdi0+cnhxID0gTlVMTDsKIAl9CiAJaXB3X3R4X3F1ZXVlX2ZyZWUocHJpdik7Ci0JaWYgKGJvb3RmdykKLQkJcmVsZWFzZV9maXJtd2FyZShib290ZncpOwotCWlmICh1Y29kZSkKLQkJcmVsZWFzZV9maXJtd2FyZSh1Y29kZSk7Ci0JaWYgKGZpcm13YXJlKQotCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKwlpZiAocmF3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHJhdyk7CiAjaWZkZWYgQ09ORklHX1BNCiAJZndfbG9hZGVkID0gMDsKLQlib290ZncgPSB1Y29kZSA9IGZpcm13YXJlID0gTlVMTDsKKwlyYXcgPSBOVUxMOwogI2VuZGlmCiAKIAlyZXR1cm4gcmM7CkBAIC0zNzE1LDkgKzM2OTIsOSBAQAogc3RhdGljIHZvaWQgaXB3X2JnX2Rpc2Fzc29jaWF0ZSh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXB3X2Rpc2Fzc29jaWF0ZShkYXRhKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaXB3X3N5c3RlbV9jb25maWcodm9pZCAqZGF0YSkKQEAgLTQwNzcsOSArNDA1NCw5IEBACiBzdGF0aWMgdm9pZCBpcHdfYmdfZ2F0aGVyX3N0YXRzKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpcHdfZ2F0aGVyX3N0YXRzKGRhdGEpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiAvKiBNaXNzZWQgYmVhY29uIGJlaGF2aW9yOgpAQCAtNDEyMSw4ICs0MDk4LDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChtaXNzZWRfY291bnQgPiBwcml2LT5yb2FtaW5nX3RocmVzaG9sZCAmJgotCSAgICBtaXNzZWRfY291bnQgPD0gcHJpdi0+ZGlzYXNzb2NpYXRlX3RocmVzaG9sZCkgeworCWlmIChyb2FtaW5nICYmCisJICAgIChtaXNzZWRfY291bnQgPiBwcml2LT5yb2FtaW5nX3RocmVzaG9sZCAmJgorCSAgICAgbWlzc2VkX2NvdW50IDw9IHByaXYtPmRpc2Fzc29jaWF0ZV90aHJlc2hvbGQpKSB7CiAJCS8qIElmIHdlIGFyZSBub3QgYWxyZWFkeSByb2FtaW5nLCBzZXQgdGhlIFJPQU0KIAkJICogYml0IGluIHRoZSBzdGF0dXMgYW5kIGtpY2sgb2ZmIGEgc2Nhbi4KIAkJICogVGhpcyBjYW4gaGFwcGVuIHNldmVyYWwgdGltZXMgYmVmb3JlIHdlIHJlYWNoCkBAIC00MTUwLDcgKzQxMjgsNiBAQAogCX0KIAogCUlQV19ERUJVR19OT1RJRigiTWlzc2VkIGJlYWNvbjogJWRcbiIsIG1pc3NlZF9jb3VudCk7Ci0KIH0KIAogLyoqCkBAIC00NTI3LDEwICs0NTA0LDkgQEAKIAogCQkJaWYgKG5vdGlmLT5zaXplID09IHNpemVvZigqeCkpIHsKIAkJCQlJUFdfREVCVUcoSVBXX0RMX05PVElGIHwgSVBXX0RMX1NUQVRFLAotCQkJCQkgICJsaW5rIGRldGVyaW9yYXRpb246ICclcycgIiBNQUNfRk1UCi0JCQkJCSAgIiBcbiIsIGVzY2FwZV9lc3NpZChwcml2LT5lc3NpZCwKLQkJCQkJCQkgICAgICBwcml2LT5lc3NpZF9sZW4pLAotCQkJCQkgIE1BQ19BUkcocHJpdi0+YnNzaWQpKTsKKwkJCQkJImxpbmsgZGV0ZXJpb3JhdGlvbjogdHlwZSAlZCwgY250ICVkXG4iLAorCQkJCQl4LT5zaWxlbmNlX25vdGlmaWNhdGlvbl90eXBlLAorCQkJCQl4LT5zaWxlbmNlX2NvdW50KTsKIAkJCQltZW1jcHkoJnByaXYtPmxhc3RfbGlua19kZXRlcmlvcmF0aW9uLCB4LAogCQkJCSAgICAgICBzaXplb2YoKngpKTsKIAkJCX0gZWxzZSB7CkBAIC00NjE2LDkgKzQ1OTIsOSBAQAogCQl9CiAKIAlkZWZhdWx0OgotCQlJUFdfRVJST1IoIlVua25vd24gbm90aWZpY2F0aW9uOiAiCi0JCQkgICJzdWJ0eXBlPSVkLGZsYWdzPTB4JTJ4LHNpemU9JWRcbiIsCi0JCQkgIG5vdGlmLT5zdWJ0eXBlLCBub3RpZi0+ZmxhZ3MsIG5vdGlmLT5zaXplKTsKKwkJSVBXX0RFQlVHX05PVElGKCJVbmtub3duIG5vdGlmaWNhdGlvbjogIgorCQkJCSJzdWJ0eXBlPSVkLGZsYWdzPTB4JTJ4LHNpemU9JWRcbiIsCisJCQkJbm90aWYtPnN1YnR5cGUsIG5vdGlmLT5mbGFncywgbm90aWYtPnNpemUpOwogCX0KIH0KIApAQCAtNDkxMSwxMyArNDg4NywxMyBAQAogc3RhdGljIHZvaWQgaXB3X2JnX3J4X3F1ZXVlX3JlcGxlbmlzaCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXB3X3J4X3F1ZXVlX3JlcGxlbmlzaChkYXRhKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogLyogQXNzdW1lcyB0aGF0IHRoZSBza2IgZmllbGQgb2YgdGhlIGJ1ZmZlcnMgaW4gJ3Bvb2wnIGlzIGtlcHQgYWNjdXJhdGUuCi0gKiBJZiBhbiBTS0IgaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBQT09MIG5lZWRzIHRvIGhhdmUgaXQncyBTS0Igc2V0IHRvIE5VTEwKKyAqIElmIGFuIFNLQiBoYXMgYmVlbiBkZXRhY2hlZCwgdGhlIFBPT0wgbmVlZHMgdG8gaGF2ZSBpdHMgU0tCIHNldCB0byBOVUxMCiAgKiBUaGlzIGZyZWUgcm91dGluZSB3YWxrcyB0aGUgbGlzdCBvZiBQT09MIGVudHJpZXMgYW5kIGlmIFNLQiBpcyBzZXQgdG8KICAqIG5vbiBOVUxMIGl0IGlzIHVubWFwcGVkIGFuZCBmcmVlZAogICovCkBAIC01MjU3LDEwICs1MjMzLDExIEBACiAJaWYgKHByaXYtPmllZWUtPnNjYW5fYWdlICE9IDAgJiYKIAkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBuZXR3b3JrLT5sYXN0X3NjYW5uZWQgKyBwcml2LT5pZWVlLT5zY2FuX2FnZSkpIHsKIAkJSVBXX0RFQlVHX01FUkdFKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCi0JCQkJImJlY2F1c2Ugb2YgYWdlOiAlbHVtcy5cbiIsCisJCQkJImJlY2F1c2Ugb2YgYWdlOiAldW1zLlxuIiwKIAkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwgbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpLAotCQkJCTEwMDAgKiAoamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkgLyBIWik7CisJCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJCSBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01MzY5LDcgKzUzNDYsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJZG93bigmcHJpdi0+c2VtKTsKKwkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCQlpZiAoKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykpIHsKIAkJCUlQV19ERUJVR19NRVJHRSgicmVtb3ZlIG5ldHdvcmsgJXNcbiIsCiAJCQkJCWVzY2FwZV9lc3NpZChwcml2LT5lc3NpZCwKQEAgLTUzNzksNyArNTM1Niw3IEBACiAKIAkJaXB3X2Rpc2Fzc29jaWF0ZShwcml2KTsKIAkJcHJpdi0+YXNzb2NfbmV0d29yayA9IG1hdGNoLm5ldHdvcms7Ci0JCXVwKCZwcml2LT5zZW0pOworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuOwogCX0KIH0KQEAgLTU0NjcsMTEgKzU0NDQsMTIgQEAKIAlpZiAobmV0d29yay0+bGFzdF9hc3NvY2lhdGUgJiYKIAkgICAgdGltZV9hZnRlcihuZXR3b3JrLT5sYXN0X2Fzc29jaWF0ZSArIChIWiAqIDNVTCksIGppZmZpZXMpKSB7CiAJCUlQV19ERUJVR19BU1NPQygiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgotCQkJCSJiZWNhdXNlIG9mIHN0b3JtaW5nICglbHVzIHNpbmNlIGxhc3QgIgorCQkJCSJiZWNhdXNlIG9mIHN0b3JtaW5nICgldW1zIHNpbmNlIGxhc3QgIgogCQkJCSJhc3NvYyBhdHRlbXB0KS5cbiIsCiAJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKIAkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKLQkJCQkoamlmZmllcyAtIG5ldHdvcmstPmxhc3RfYXNzb2NpYXRlKSAvIEhaKTsKKwkJCQlqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCQkJIG5ldHdvcmstPmxhc3RfYXNzb2NpYXRlKSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTQ3OSwxMCArNTQ1NywxMSBAQAogCWlmIChwcml2LT5pZWVlLT5zY2FuX2FnZSAhPSAwICYmCiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgbmV0d29yay0+bGFzdF9zY2FubmVkICsgcHJpdi0+aWVlZS0+c2Nhbl9hZ2UpKSB7CiAJCUlQV19ERUJVR19BU1NPQygiTmV0d29yayAnJXMgKCIgTUFDX0ZNVCAiKScgZXhjbHVkZWQgIgotCQkJCSJiZWNhdXNlIG9mIGFnZTogJWx1bXMuXG4iLAorCQkJCSJiZWNhdXNlIG9mIGFnZTogJXVtcy5cbiIsCiAJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKIAkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKLQkJCQkxMDAwICogKGppZmZpZXMgLSBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpIC8gSFopOworCQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJCQkgbmV0d29yay0+bGFzdF9zY2FubmVkKSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTUxMCwxNSArNTQ4OSw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICghcHJpdi0+aWVlZS0+d3BhX2VuYWJsZWQgJiYgKG5ldHdvcmstPndwYV9pZV9sZW4gPiAwIHx8Ci0JCQkJCSBuZXR3b3JrLT5yc25faWVfbGVuID4gMCkpIHsKLQkJSVBXX0RFQlVHX0FTU09DKCJOZXR3b3JrICclcyAoIiBNQUNfRk1UICIpJyBleGNsdWRlZCAiCi0JCQkJImJlY2F1c2Ugb2YgV1BBIGNhcGFiaWxpdHkgbWlzbWF0Y2guXG4iLAotCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLCBuZXR3b3JrLT5zc2lkX2xlbiksCi0JCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfQlNTSUQpICYmCiAJICAgIG1lbWNtcChuZXR3b3JrLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkgewogCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKQEAgLTU1MzksNyArNTUwOSw3IEBACiAJfQogCiAJLyogRmlsdGVyIG91dCBpbnZhbGlkIGNoYW5uZWwgaW4gY3VycmVudCBHRU8gKi8KLQlpZiAoIWlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIG5ldHdvcmstPmNoYW5uZWwpKSB7CisJaWYgKCFpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBuZXR3b3JrLT5jaGFubmVsKSkgewogCQlJUFdfREVCVUdfQVNTT0MoIk5ldHdvcmsgJyVzICgiIE1BQ19GTVQgIiknIGV4Y2x1ZGVkICIKIAkJCQkiYmVjYXVzZSBvZiBpbnZhbGlkIGNoYW5uZWwgaW4gY3VycmVudCBHRU9cbiIsCiAJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsIG5ldHdvcmstPnNzaWRfbGVuKSwKQEAgLTU1ODQsNyArNTU1NCw3IEBACiBzdGF0aWMgdm9pZCBpcHdfYWRob2NfY3JlYXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQogewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqZ2VvID0gaWVlZTgwMjExX2dldF9nZW8ocHJpdi0+aWVlZSk7CiAJaW50IGk7CiAKIAkvKgpAQCAtNTU5OSwxMCArNTU2OSwxMCBAQAogCSAqIEZXIGZhdGFsIGVycm9yLgogCSAqCiAJICovCi0Jc3dpdGNoIChpcHdfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKSkgeworCXN3aXRjaCAoaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCkpIHsKIAljYXNlIElFRUU4MDIxMV81MkdIWl9CQU5EOgogCQluZXR3b3JrLT5tb2RlID0gSUVFRV9BOwotCQlpID0gaXB3X2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCk7CisJCWkgPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKTsKIAkJaWYgKGkgPT0gLTEpCiAJCQlCVUcoKTsKIAkJaWYgKGdlby0+YVtpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkpIHsKQEAgLTU2MTYsNyArNTU4Niw3IEBACiAJCQluZXR3b3JrLT5tb2RlID0gSUVFRV9HOwogCQllbHNlCiAJCQluZXR3b3JrLT5tb2RlID0gSUVFRV9COwotCQlpID0gaXB3X2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCk7CisJCWkgPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKTsKIAkJaWYgKGkgPT0gLTEpCiAJCQlCVUcoKTsKIAkJaWYgKGdlby0+YmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSB7CkBAIC01NjcxLDU0ICs1NjQxLDQ0IEBACiAKIHN0YXRpYyB2b2lkIGlwd19zZW5kX3RnaV90eF9rZXkoc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgdHlwZSwgaW50IGluZGV4KQogewotCXN0cnVjdCBpcHdfdGdpX3R4X2tleSAqa2V5OwotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX1RHSV9UWF9LRVksCi0JCS5sZW4gPSBzaXplb2YoKmtleSkKLQl9OworCXN0cnVjdCBpcHdfdGdpX3R4X2tleSBrZXk7CiAKIAlpZiAoIShwcml2LT5pZWVlLT5zZWMuZmxhZ3MgJiAoMSA8PCBpbmRleCkpKQogCQlyZXR1cm47CiAKLQlrZXkgPSAoc3RydWN0IGlwd190Z2lfdHhfa2V5ICopJmNtZC5wYXJhbTsKLQlrZXktPmtleV9pZCA9IGluZGV4OwotCW1lbWNweShrZXktPmtleSwgcHJpdi0+aWVlZS0+c2VjLmtleXNbaW5kZXhdLCBTQ01fVEVNUE9SQUxfS0VZX0xFTkdUSCk7Ci0Ja2V5LT5zZWN1cml0eV90eXBlID0gdHlwZTsKLQlrZXktPnN0YXRpb25faW5kZXggPSAwOwkvKiBhbHdheXMgMCBmb3IgQlNTICovCi0Ja2V5LT5mbGFncyA9IDA7CisJa2V5LmtleV9pZCA9IGluZGV4OworCW1lbWNweShrZXkua2V5LCBwcml2LT5pZWVlLT5zZWMua2V5c1tpbmRleF0sIFNDTV9URU1QT1JBTF9LRVlfTEVOR1RIKTsKKwlrZXkuc2VjdXJpdHlfdHlwZSA9IHR5cGU7CisJa2V5LnN0YXRpb25faW5kZXggPSAwOwkvKiBhbHdheXMgMCBmb3IgQlNTICovCisJa2V5LmZsYWdzID0gMDsKIAkvKiAwIGZvciBuZXcga2V5OyBwcmV2aW91cyB2YWx1ZSBvZiBjb3VudGVyIChhZnRlciBmYXRhbCBlcnJvcikgKi8KLQlrZXktPnR4X2NvdW50ZXJbMF0gPSAwOwotCWtleS0+dHhfY291bnRlclsxXSA9IDA7CisJa2V5LnR4X2NvdW50ZXJbMF0gPSAwOworCWtleS50eF9jb3VudGVyWzFdID0gMDsKIAotCWlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfVEdJX1RYX0tFWSwgc2l6ZW9mKGtleSksICZrZXkpOwogfQogCiBzdGF0aWMgdm9pZCBpcHdfc2VuZF93ZXBfa2V5cyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCB0eXBlKQogewotCXN0cnVjdCBpcHdfd2VwX2tleSAqa2V5OworCXN0cnVjdCBpcHdfd2VwX2tleSBrZXk7CiAJaW50IGk7Ci0Jc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKLQkJLmNtZCA9IElQV19DTURfV0VQX0tFWSwKLQkJLmxlbiA9IHNpemVvZigqa2V5KQotCX07CiAKLQlrZXkgPSAoc3RydWN0IGlwd193ZXBfa2V5ICopJmNtZC5wYXJhbTsKLQlrZXktPmNtZF9pZCA9IERJTk9fQ01EX1dFUF9LRVk7Ci0Ja2V5LT5zZXFfbnVtID0gMDsKKwlrZXkuY21kX2lkID0gRElOT19DTURfV0VQX0tFWTsKKwlrZXkuc2VxX251bSA9IDA7CiAKIAkvKiBOb3RlOiBBRVMga2V5cyBjYW5ub3QgYmUgc2V0IGZvciBtdWx0aXBsZSB0aW1lcy4KIAkgKiBPbmx5IHNldCBpdCBhdCB0aGUgZmlyc3QgdGltZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWtleS0+a2V5X2luZGV4ID0gaSB8IHR5cGU7CisJCWtleS5rZXlfaW5kZXggPSBpIHwgdHlwZTsKIAkJaWYgKCEocHJpdi0+aWVlZS0+c2VjLmZsYWdzICYgKDEgPDwgaSkpKSB7Ci0JCQlrZXktPmtleV9zaXplID0gMDsKKwkJCWtleS5rZXlfc2l6ZSA9IDA7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWtleS0+a2V5X3NpemUgPSBwcml2LT5pZWVlLT5zZWMua2V5X3NpemVzW2ldOwotCQltZW1jcHkoa2V5LT5rZXksIHByaXYtPmllZWUtPnNlYy5rZXlzW2ldLCBrZXktPmtleV9zaXplKTsKKwkJa2V5LmtleV9zaXplID0gcHJpdi0+aWVlZS0+c2VjLmtleV9zaXplc1tpXTsKKwkJbWVtY3B5KGtleS5rZXksIHByaXYtPmllZWUtPnNlYy5rZXlzW2ldLCBrZXkua2V5X3NpemUpOwogCi0JCWlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwkJaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1dFUF9LRVksIHNpemVvZihrZXkpLCAma2V5KTsKIAl9CiB9CiAKQEAgLTU4MjIsOSArNTc4Miw5IEBACiBzdGF0aWMgdm9pZCBpcHdfYmdfYWRob2NfY2hlY2sodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlwd19hZGhvY19jaGVjayhkYXRhKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCkBAIC01OTUwLDcgKzU5MTAsNyBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW87CiAJaW50IGk7CiAKLQlnZW8gPSBpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwlnZW8gPSBpZWVlODAyMTFfZ2V0X2dlbyhwcml2LT5pZWVlKTsKIAogCWlmIChwcml2LT5pZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkgewogCQlpbnQgc3RhcnQgPSBjaGFubmVsX2luZGV4OwpAQCAtNjAxMCw3ICs1OTcwLDcgQEAKIAkJCQljaGFubmVsX2luZGV4Kys7CiAJCQkJc2Nhbi0+Y2hhbm5lbHNfbGlzdFtjaGFubmVsX2luZGV4XSA9IGNoYW5uZWw7CiAJCQkJaW5kZXggPQotCQkJCSAgICBpcHdfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBjaGFubmVsKTsKKwkJCQkgICAgaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgY2hhbm5lbCk7CiAJCQkJaXB3X3NldF9zY2FuX3R5cGUoc2NhbiwgY2hhbm5lbF9pbmRleCwKIAkJCQkJCSAgZ2VvLT5iZ1tpbmRleF0uCiAJCQkJCQkgIGZsYWdzICYKQEAgLTYwNTEsNyArNjAxMSw3IEBACiAJICAgIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfRVhJVF9QRU5ESU5HKSkKIAkJcmV0dXJuIDA7CiAKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfU0NBTk5JTkcpIHsKIAkJSVBXX0RFQlVHX0hDKCJDb25jdXJyZW50IHNjYW4gcmVxdWVzdGVkLiAgSWdub3JpbmcuXG4iKTsKQEAgLTYwOTIsNyArNjA1Miw3IEBACiAJCXU4IGNoYW5uZWw7CiAJCXU4IGJhbmQgPSAwOwogCi0JCXN3aXRjaCAoaXB3X2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCkpIHsKKwkJc3dpdGNoIChpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKSkgewogCQljYXNlIElFRUU4MDIxMV81MkdIWl9CQU5EOgogCQkJYmFuZCA9ICh1OCkgKElQV19BX01PREUgPDwgNikgfCAxOwogCQkJY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CkBAIC02MTU5LDE2ICs2MTE5LDE2IEBACiAJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY2hlY2ssCiAJCQkgICBJUFdfU0NBTl9DSEVDS19XQVRDSERPRyk7CiAgICAgICBkb25lOgotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGlwd19iZ19hYm9ydF9zY2FuKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpcHdfYWJvcnRfc2NhbihkYXRhKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCBpcHdfd3BhX2VuYWJsZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCB2YWx1ZSkKQEAgLTYxOTMsNiArNjE1Myw5IEBACiAJfSBlbHNlIGlmICh2YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKSB7CiAJCXNlYy5hdXRoX21vZGUgPSBXTEFOX0FVVEhfT1BFTjsKIAkJaWVlZS0+b3Blbl93ZXAgPSAxOworCX0gZWxzZSBpZiAodmFsdWUgJiBJV19BVVRIX0FMR19MRUFQKSB7CisJCXNlYy5hdXRoX21vZGUgPSBXTEFOX0FVVEhfTEVBUDsKKwkJaWVlZS0+b3Blbl93ZXAgPSAxOwogCX0gZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNjIwNCw3ICs2MTY3LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGlwd193cGFfYXNzb2NfZnJhbWUoc3RydWN0IGlwd19wcml2ICpwcml2LCBjaGFyICp3cGFfaWUsIGludCB3cGFfaWVfbGVuKQorc3RhdGljIHZvaWQgaXB3X3dwYV9hc3NvY19mcmFtZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGNoYXIgKndwYV9pZSwKKwkJCQlpbnQgd3BhX2llX2xlbikKIHsKIAkvKiBtYWtlIHN1cmUgV1BBIGlzIGVuYWJsZWQgKi8KIAlpcHdfd3BhX2VuYWJsZShwcml2LCAxKTsKQEAgLTYyMTUsMTUgKzYxNzksMTAgQEAKIHN0YXRpYyBpbnQgaXB3X3NldF9yc25fY2FwYShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkgICAgY2hhciAqY2FwYWJpbGl0aWVzLCBpbnQgbGVuZ3RoKQogewotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX1JTTl9DQVBBQklMSVRJRVMsCi0JCS5sZW4gPSBsZW5ndGgsCi0JfTsKLQogCUlQV19ERUJVR19IQygiSE9TVF9DTURfUlNOX0NBUEFCSUxJVElFU1xuIik7CiAKLQltZW1jcHkoY21kLnBhcmFtLCBjYXBhYmlsaXRpZXMsIGxlbmd0aCk7Ci0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1JTTl9DQVBBQklMSVRJRVMsIGxlbmd0aCwKKwkJCQljYXBhYmlsaXRpZXMpOwogfQogCiAvKgpAQCAtNjI0NCw3ICs2MjAzLDcgQEAKIAkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIGV4dHJhID09IE5VTEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8vZG93bigmcHJpdi0+c2VtKTsKKwkvL211dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCS8vaWYgKCFpZWVlLT53cGFfZW5hYmxlZCkgewogCS8vICAgICAgZXJyID0gLUVPUE5PVFNVUFA7CkBAIC02MjcwLDcgKzYyMjksNyBAQAogCiAJaXB3X3dwYV9hc3NvY19mcmFtZShwcml2LCBpZWVlLT53cGFfaWUsIGllZWUtPndwYV9pZV9sZW4pOwogICAgICAgb3V0OgotCS8vdXAoJnByaXYtPnNlbSk7CisJLy9tdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02MjgzLDcgKzYyNDIsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKIAlpbnQgZXJyID0gMDsKIAotCS8vZG93bigmcHJpdi0+c2VtKTsKKwkvL211dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCS8vaWYgKCFpZWVlLT53cGFfZW5hYmxlZCkgewogCS8vICAgICAgZXJyID0gLUVPUE5PVFNVUFA7CkBAIC02MzA0LDcgKzYyNjMsNyBAQAogCW1lbWNweShleHRyYSwgaWVlZS0+d3BhX2llLCBpZWVlLT53cGFfaWVfbGVuKTsKIAogICAgICAgb3V0OgotCS8vdXAoJnByaXYtPnNlbSk7CisJLy9tdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02NTU2LDcgKzY1MTUsNyBAQAogKiBnZXQgdGhlIG1vZHVsYXRpb24gdHlwZSBvZiB0aGUgY3VycmVudCBuZXR3b3JrIG9yCiAqIHRoZSBjYXJkIGN1cnJlbnQgbW9kZQogKi8KLXU4IGlwd19xb3NfY3VycmVudF9tb2RlKHN0cnVjdCBpcHdfcHJpdiAqIHByaXYpCitzdGF0aWMgdTggaXB3X3Fvc19jdXJyZW50X21vZGUoc3RydWN0IGlwd19wcml2ICogcHJpdikKIHsKIAl1OCBtb2RlID0gMDsKIApAQCAtNjk2NCwxMiArNjkyMywxMiBAQAogCWlmIChwcml2ID09IE5VTEwpCiAJCXJldHVybjsKIAotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQogCQlpcHdfcW9zX2FjdGl2YXRlKHByaXYsICYocHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGEpKTsKIAotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGlwd19oYW5kbGVfcHJvYmVfcmVzcG9uc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTcwMTAsMjUgKzY5NjksMTUgQEAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycwogCQkJCSAgICAgICAqcW9zX3BhcmFtKQogewotCXN0cnVjdCBob3N0X2NtZCBjbWQgPSB7Ci0JCS5jbWQgPSBJUFdfQ01EX1FPU19QQVJBTUVURVJTLAotCQkubGVuID0gKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzKSAqIDMpCi0JfTsKLQotCW1lbWNweShjbWQucGFyYW0sIHFvc19wYXJhbSwgc2l6ZW9mKCpxb3NfcGFyYW0pICogMyk7Ci0JcmV0dXJuIGlwd19zZW5kX2NtZChwcml2LCAmY21kKTsKKwlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1FPU19QQVJBTUVURVJTLAorCQkJCXNpemVvZigqcW9zX3BhcmFtKSAqIDMsIHFvc19wYXJhbSk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX2luZm9fY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKIAkJCQkgICAgICpxb3NfcGFyYW0pCiB7Ci0Jc3RydWN0IGhvc3RfY21kIGNtZCA9IHsKLQkJLmNtZCA9IElQV19DTURfV01FX0lORk8sCi0JCS5sZW4gPSBzaXplb2YoKnFvc19wYXJhbSkKLQl9OwotCi0JbWVtY3B5KGNtZC5wYXJhbSwgcW9zX3BhcmFtLCBzaXplb2YoKnFvc19wYXJhbSkpOwotCXJldHVybiBpcHdfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGlwd19zZW5kX2NtZF9wZHUocHJpdiwgSVBXX0NNRF9XTUVfSU5GTywgc2l6ZW9mKCpxb3NfcGFyYW0pLAorCQkJCXFvc19wYXJhbSk7CiB9CiAKICNlbmRpZgkJCQkvKiBDT05GSUdfSVBXX1FPUyAqLwpAQCAtNzA1MiwxOSArNzAwMSwyMSBAQAogCiAJbWVtc2V0KCZwcml2LT5hc3NvY19yZXF1ZXN0LCAwLCBzaXplb2YocHJpdi0+YXNzb2NfcmVxdWVzdCkpOwogCXByaXYtPmFzc29jX3JlcXVlc3QuY2hhbm5lbCA9IG5ldHdvcmstPmNoYW5uZWw7CisJcHJpdi0+YXNzb2NfcmVxdWVzdC5hdXRoX2tleSA9IDA7CisKIAlpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTikgJiYKLQkgICAgKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfU0hBUkVEX0tFWSkpIHsKKwkgICAgKHByaXYtPmllZWUtPnNlYy5hdXRoX21vZGUgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpKSB7CiAJCXByaXYtPmFzc29jX3JlcXVlc3QuYXV0aF90eXBlID0gQVVUSF9TSEFSRURfS0VZOwogCQlwcml2LT5hc3NvY19yZXF1ZXN0LmF1dGhfa2V5ID0gcHJpdi0+aWVlZS0+c2VjLmFjdGl2ZV9rZXk7CiAKLQkJaWYgKChwcml2LT5jYXBhYmlsaXR5ICYgQ0FQX1BSSVZBQ1lfT04pICYmCi0JCSAgICAocHJpdi0+aWVlZS0+c2VjLmxldmVsID09IFNFQ19MRVZFTF8xKSAmJgotCQkgICAgIShwcml2LT5pZWVlLT5ob3N0X2VuY3J5cHQgfHwgcHJpdi0+aWVlZS0+aG9zdF9kZWNyeXB0KSkKKwkJaWYgKHByaXYtPmllZWUtPnNlYy5sZXZlbCA9PSBTRUNfTEVWRUxfMSkKIAkJCWlwd19zZW5kX3dlcF9rZXlzKHByaXYsIERDV19XRVBfS0VZX1NFQ19UWVBFX1dFUCk7Ci0JfSBlbHNlIHsKKworCX0gZWxzZSBpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBDQVBfUFJJVkFDWV9PTikgJiYKKwkJICAgKHByaXYtPmllZWUtPnNlYy5hdXRoX21vZGUgPT0gV0xBTl9BVVRIX0xFQVApKQorCQlwcml2LT5hc3NvY19yZXF1ZXN0LmF1dGhfdHlwZSA9IEFVVEhfTEVBUDsKKwllbHNlCiAJCXByaXYtPmFzc29jX3JlcXVlc3QuYXV0aF90eXBlID0gQVVUSF9PUEVOOwotCQlwcml2LT5hc3NvY19yZXF1ZXN0LmF1dGhfa2V5ID0gMDsKLQl9CiAKIAlpZiAocHJpdi0+aWVlZS0+d3BhX2llX2xlbikgewogCQlwcml2LT5hc3NvY19yZXF1ZXN0LnBvbGljeV9zdXBwb3J0ID0gMHgwMjsJLyogUlNOIGFjdGl2ZSAqLwpAQCAtNzI3OCw5ICs3MjI5LDkgQEAKIHN0YXRpYyB2b2lkIGlwd19iZ19yb2FtKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpcHdfcm9hbShkYXRhKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCBpcHdfYXNzb2NpYXRlKHZvaWQgKmRhdGEpCkBAIC03Mzc1LDkgKzczMjYsOSBAQAogc3RhdGljIHZvaWQgaXB3X2JnX2Fzc29jaWF0ZSh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXB3X2Fzc29jaWF0ZShkYXRhKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaXB3X3JlYnVpbGRfZGVjcnlwdGVkX3NrYihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCkBAIC03ODExLDEyICs3NzYyLDEwIEBACiAKIAl3aGlsZSAoaSAhPSByKSB7CiAJCXJ4YiA9IHByaXYtPnJ4cS0+cXVldWVbaV07Ci0jaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIAkJaWYgKHVubGlrZWx5KHJ4YiA9PSBOVUxMKSkgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiUXVldWUgbm90IGFsbG9jYXRlZCFcbiIpOwogCQkJYnJlYWs7CiAJCX0KLSNlbmRpZgogCQlwcml2LT5yeHEtPnF1ZXVlW2ldID0gTlVMTDsKIAogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocHJpdi0+cGNpX2RldiwgcnhiLT5kbWFfYWRkciwKQEAgLTc4MzUsNyArNzc4NCw4IEBACiAJCQkJCSAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUucnNzaV9kYm0pIC0KIAkJCQkJICAgIElQV19SU1NJX1RPX0RCTSwKIAkJCQkJLnNpZ25hbCA9Ci0JCQkJCSAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUuc2lnbmFsKSwKKwkJCQkJICAgIGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5yc3NpX2RibSkgLQorCQkJCQkgICAgSVBXX1JTU0lfVE9fREJNICsgMHgxMDAsCiAJCQkJCS5ub2lzZSA9CiAJCQkJCSAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubm9pc2UpLAogCQkJCQkucmF0ZSA9IHBrdC0+dS5mcmFtZS5yYXRlLApAQCAtNzg5OSw3ICs3ODQ5LDggQEAKIAkJCQkJICAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKSk7CiAKIAkJCQlpZiAobGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCkgPAotCQkJCSAgICBmcmFtZV9oZHJfbGVuKGhlYWRlcikpIHsKKwkJCQkgICAgaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoCisJCQkJCQkgICAgaGVhZGVyLT5mcmFtZV9jdGwpKSkgewogCQkJCQlJUFdfREVCVUdfRFJPUAogCQkJCQkgICAgKCJSZWNlaXZlZCBwYWNrZXQgaXMgdG9vIHNtYWxsLiAiCiAJCQkJCSAgICAgIkRyb3BwaW5nLlxuIik7CkBAIC03OTg5LDcgKzc5NDAsMTQgQEAKICNkZWZpbmUJREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCA3VQogI2RlZmluZQlERUZBVUxUX0xPTkdfUkVUUllfTElNSVQgIDRVCiAKLXN0YXRpYyBpbnQgaXB3X3N3X3Jlc2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgaW50IGluaXQpCisvKioKKyAqIGlwd19zd19yZXNldAorICogQG9wdGlvbjogb3B0aW9ucyB0byBjb250cm9sIGRpZmZlcmVudCByZXNldCBiZWhhdmlvdXIKKyAqIAkgICAgMCA9IHJlc2V0IGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSAnZGlzYWJsZScgbW9kdWxlX3BhcmFtCisgKiAJICAgIDEgPSByZXNldCBldmVyeXRoaW5nIGFuZCBwcmludCBvdXQgZHJpdmVyIGluZm8gKGZvciBwcm9iZSBvbmx5KQorICogCSAgICAyID0gcmVzZXQgZXZlcnl0aGluZworICovCitzdGF0aWMgaW50IGlwd19zd19yZXNldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCBvcHRpb24pCiB7CiAJaW50IGJhbmQsIG1vZHVsYXRpb247CiAJaW50IG9sZF9tb2RlID0gcHJpdi0+aWVlZS0+aXdfbW9kZTsKQEAgLTgwMTYsNyArNzk3NCw3IEBACiAJcHJpdi0+ZXNzaWRfbGVuID0gMDsKIAltZW1zZXQocHJpdi0+ZXNzaWQsIDAsIElXX0VTU0lEX01BWF9TSVpFKTsKIAotCWlmIChkaXNhYmxlKSB7CisJaWYgKGRpc2FibGUgJiYgb3B0aW9uKSB7CiAJCXByaXYtPnN0YXR1cyB8PSBTVEFUVVNfUkZfS0lMTF9TVzsKIAkJSVBXX0RFQlVHX0lORk8oIlJhZGlvIGRpc2FibGVkLlxuIik7CiAJfQpAQCAtODA2OCw3ICs4MDI2LDcgQEAKIAogCWlmICgocHJpdi0+cGNpX2Rldi0+ZGV2aWNlID09IDB4NDIyMykgfHwKIAkgICAgKHByaXYtPnBjaV9kZXYtPmRldmljZSA9PSAweDQyMjQpKSB7Ci0JCWlmIChpbml0KQorCQlpZiAob3B0aW9uID09IDEpCiAJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCiAJCQkgICAgICAgIjogRGV0ZWN0ZWQgSW50ZWwgUFJPL1dpcmVsZXNzIDI5MTVBQkcgTmV0d29yayAiCiAJCQkgICAgICAgIkNvbm5lY3Rpb25cbiIpOwpAQCAtODA3OSw3ICs4MDM3LDcgQEAKIAkJcHJpdi0+YWRhcHRlciA9IElQV18yOTE1QUJHOwogCQlwcml2LT5pZWVlLT5tb2RlID0gSUVFRV9BIHwgSUVFRV9HIHwgSUVFRV9COwogCX0gZWxzZSB7Ci0JCWlmIChpbml0KQorCQlpZiAob3B0aW9uID09IDEpCiAJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCiAJCQkgICAgICAgIjogRGV0ZWN0ZWQgSW50ZWwgUFJPL1dpcmVsZXNzIDIyMDBCRyBOZXR3b3JrICIKIAkJCSAgICAgICAiQ29ubmVjdGlvblxuIik7CkBAIC04MTI2LDcgKzgwODQsNyBAQAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKIAkJc3RyY3B5KHdycXUtPm5hbWUsICJyYWRpbyBvZmYiKTsKIAllbHNlIGlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKQEAgLTgxMzUsNyArODA5Myw3IEBACiAJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTElYyIsCiAJCQkgaXB3X21vZGVzW3ByaXYtPmFzc29jX3JlcXVlc3QuaWVlZV9tb2RlXSk7CiAJSVBXX0RFQlVHX1dYKCJOYW1lOiAlc1xuIiwgd3JxdS0+bmFtZSk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgxOTYsNyArODE1NCw3IEBACiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqZ2VvID0gaWVlZTgwMjExX2dldF9nZW8ocHJpdi0+aWVlZSk7CiAJc3RydWN0IGl3X2ZyZXEgKmZ3cnEgPSAmd3JxdS0+ZnJlcTsKIAlpbnQgcmV0ID0gMCwgaTsKIAl1OCBjaGFubmVsLCBmbGFnczsKQEAgLTgyMDQsMjQgKzgxNjIsMjQgQEAKIAogCWlmIChmd3JxLT5tID09IDApIHsKIAkJSVBXX0RFQlVHX1dYKCJTRVQgRnJlcS9DaGFubmVsIC0+IGFueVxuIik7Ci0JCWRvd24oJnByaXYtPnNlbSk7CisJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0ID0gaXB3X3NldF9jaGFubmVsKHByaXYsIDApOwotCQl1cCgmcHJpdi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJfQogCS8qIGlmIHNldHRpbmcgYnkgZnJlcSBjb252ZXJ0IHRvIGNoYW5uZWwgKi8KIAlpZiAoZndycS0+ZSA9PSAxKSB7Ci0JCWNoYW5uZWwgPSBpcHdfZnJlcV90b19jaGFubmVsKHByaXYtPmllZWUsIGZ3cnEtPm0pOworCQljaGFubmVsID0gaWVlZTgwMjExX2ZyZXFfdG9fY2hhbm5lbChwcml2LT5pZWVlLCBmd3JxLT5tKTsKIAkJaWYgKGNoYW5uZWwgPT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZQogCQljaGFubmVsID0gZndycS0+bTsKIAotCWlmICghKGJhbmQgPSBpcHdfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBjaGFubmVsKSkpCisJaWYgKCEoYmFuZCA9IGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIGNoYW5uZWwpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7Ci0JCWkgPSBpcHdfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBjaGFubmVsKTsKKwkJaSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIGNoYW5uZWwpOwogCQlpZiAoaSA9PSAtMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC04MjM0LDkgKzgxOTIsOSBAQAogCX0KIAogCUlQV19ERUJVR19XWCgiU0VUIEZyZXEvQ2hhbm5lbCAtPiAlZCBcbiIsIGZ3cnEtPm0pOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldCA9IGlwd19zZXRfY2hhbm5lbChwcml2LCBjaGFubmVsKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04MjUwLDE0ICs4MjA4LDE0IEBACiAKIAkvKiBJZiB3ZSBhcmUgYXNzb2NpYXRlZCwgdHJ5aW5nIHRvIGFzc29jaWF0ZSwgb3IgaGF2ZSBhIHN0YXRpY2FsbHkKIAkgKiBjb25maWd1cmVkIENIQU5ORUwgdGhlbiByZXR1cm4gdGhhdDsgb3RoZXJ3aXNlIHJldHVybiBBTlkgKi8KLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19DSEFOTkVMIHx8CiAJICAgIHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRJTkcgfCBTVEFUVVNfQVNTT0NJQVRFRCkpCiAJCXdycXUtPmZyZXEubSA9IHByaXYtPmNoYW5uZWw7CiAJZWxzZQogCQl3cnF1LT5mcmVxLm0gPSAwOwogCi0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJSVBXX0RFQlVHX1dYKCJHRVQgRnJlcS9DaGFubmVsIC0+ICVkIFxuIiwgcHJpdi0+Y2hhbm5lbCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04Mjg3LDcgKzgyNDUsNyBAQAogCWlmICh3cnF1LT5tb2RlID09IHByaXYtPmllZWUtPml3X21vZGUpCiAJCXJldHVybiAwOwogCi0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpcHdfc3dfcmVzZXQocHJpdiwgMCk7CiAKQEAgLTgzMTAsNyArODI2OCw3IEBACiAJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IHdycXUtPm1vZGU7CiAKIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmFkYXB0ZXJfcmVzdGFydCk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODMxOSwxMCArODI3NywxMCBAQAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAl3cnF1LT5tb2RlID0gcHJpdi0+aWVlZS0+aXdfbW9kZTsKIAlJUFdfREVCVUdfV1goIkdldCBNT0RFIC0+ICVkXG4iLCB3cnF1LT5tb2RlKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODM0OSw3ICs4MzA3LDcgQEAKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGlwd19nZXRfZ2VvKHByaXYtPmllZWUpOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpZWVlODAyMTFfZ2V0X2dlbyhwcml2LT5pZWVlKTsKIAlpbnQgaSA9IDAsIGo7CiAKIAl3cnF1LT5kYXRhLmxlbmd0aCA9IHNpemVvZigqcmFuZ2UpOwpAQCAtODM2MSw3ICs4MzE5LDcgQEAKIAlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKIAkvKiBUT0RPOiBGaW5kIHJlYWwgbWF4IFJTU0kgYW5kIHN0aWNrIGhlcmUgKi8KIAlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOwotCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IHByaXYtPmllZWUtPndvcnN0X3Jzc2kgKyAweDEwMDsKKwlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOwogCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gNzsJLyogVXBkYXRlZCBhbGwgdGhyZWUgKi8KIAogCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNzA7CkBAIC04MzY5LDcgKzgzMjcsNyBAQAogCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IDA7CS8qIEZJWE1FIHRvIHJlYWwgYXZlcmFnZSBsZXZlbCAqLwogCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDA7CiAJcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSA3OwkvKiBVcGRhdGVkIGFsbCB0aHJlZSAqLwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJhbmdlLT5udW1fYml0cmF0ZXMgPSBtaW4ocHJpdi0+cmF0ZXMubnVtX3JhdGVzLCAodTgpIElXX01BWF9CSVRSQVRFUyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmFuZ2UtPm51bV9iaXRyYXRlczsgaSsrKQpAQCAtODM4NywzMSArODM0NSwzOSBAQAogCiAJLyogU2V0IHRoZSBXaXJlbGVzcyBFeHRlbnNpb24gdmVyc2lvbnMgKi8KIAlyYW5nZS0+d2VfdmVyc2lvbl9jb21waWxlZCA9IFdJUkVMRVNTX0VYVDsKLQlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxNjsKKwlyYW5nZS0+d2VfdmVyc2lvbl9zb3VyY2UgPSAxODsKIAogCWkgPSAwOwogCWlmIChwcml2LT5pZWVlLT5tb2RlICYgKElFRUVfQiB8IElFRUVfRykpIHsKLQkJZm9yIChqID0gMDsgaiA8IGdlby0+YmdfY2hhbm5lbHMgJiYgaSA8IElXX01BWF9GUkVRVUVOQ0lFUzsKLQkJICAgICBpKyssIGorKykgeworCQlmb3IgKGogPSAwOyBqIDwgZ2VvLT5iZ19jaGFubmVscyAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBqKyspIHsKKwkJCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJgorCQkJICAgIChnZW8tPmJnW2pdLmZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSkpCisJCQkJY29udGludWU7CisKIAkJCXJhbmdlLT5mcmVxW2ldLmkgPSBnZW8tPmJnW2pdLmNoYW5uZWw7CiAJCQlyYW5nZS0+ZnJlcVtpXS5tID0gZ2VvLT5iZ1tqXS5mcmVxICogMTAwMDAwOwogCQkJcmFuZ2UtPmZyZXFbaV0uZSA9IDE7CisJCQlpKys7CiAJCX0KIAl9CiAKIAlpZiAocHJpdi0+aWVlZS0+bW9kZSAmIElFRUVfQSkgewotCQlmb3IgKGogPSAwOyBqIDwgZ2VvLT5hX2NoYW5uZWxzICYmIGkgPCBJV19NQVhfRlJFUVVFTkNJRVM7Ci0JCSAgICAgaSsrLCBqKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGdlby0+YV9jaGFubmVscyAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBqKyspIHsKKwkJCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJgorCQkJICAgIChnZW8tPmFbal0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSkKKwkJCQljb250aW51ZTsKKwogCQkJcmFuZ2UtPmZyZXFbaV0uaSA9IGdlby0+YVtqXS5jaGFubmVsOwogCQkJcmFuZ2UtPmZyZXFbaV0ubSA9IGdlby0+YVtqXS5mcmVxICogMTAwMDAwOwogCQkJcmFuZ2UtPmZyZXFbaV0uZSA9IDE7CisJCQlpKys7CiAJCX0KIAl9CiAKIAlyYW5nZS0+bnVtX2NoYW5uZWxzID0gaTsKIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGk7CiAKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGtlcm5lbCArIGRyaXZlcikgKi8KIAlyYW5nZS0+ZXZlbnRfY2FwYVswXSA9IChJV19FVkVOVF9DQVBBX0tfMCB8CkBAIC04NDE5LDYgKzgzODUsOSBAQAogCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXQVApKTsKIAlyYW5nZS0+ZXZlbnRfY2FwYVsxXSA9IElXX0VWRU5UX0NBUEFfS18xOwogCisJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8CisJCUlXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7CisKIAlJUFdfREVCVUdfV1goIkdFVCBSYW5nZVxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC04NDM4LDcgKzg0MDcsNyBAQAogCiAJaWYgKHdycXUtPmFwX2FkZHIuc2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKCFtZW1jbXAoYW55LCB3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIEVUSF9BTEVOKSB8fAogCSAgICAhbWVtY21wKG9mZiwgd3JxdS0+YXBfYWRkci5zYV9kYXRhLCBFVEhfQUxFTikpIHsKIAkJLyogd2UgZGlzYWJsZSBtYW5kYXRvcnkgQlNTSUQgYXNzb2NpYXRpb24gKi8KQEAgLTg0NDcsMTQgKzg0MTYsMTQgQEAKIAkJSVBXX0RFQlVHX0FTU09DKCJBdHRlbXB0aW5nIHRvIGFzc29jaWF0ZSB3aXRoIG5ldyAiCiAJCQkJInBhcmFtZXRlcnMuXG4iKTsKIAkJaXB3X2Fzc29jaWF0ZShwcml2KTsKLQkJdXAoJnByaXYtPnNlbSk7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlwcml2LT5jb25maWcgfD0gQ0ZHX1NUQVRJQ19CU1NJRDsKIAlpZiAoIW1lbWNtcChwcml2LT5ic3NpZCwgd3JxdS0+YXBfYWRkci5zYV9kYXRhLCBFVEhfQUxFTikpIHsKIAkJSVBXX0RFQlVHX1dYKCJCU1NJRCBzZXQgdG8gY3VycmVudCBCU1NJRC5cbiIpOwotCQl1cCgmcHJpdi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODQ2OCw3ICs4NDM3LDcgQEAKIAlpZiAoIWlwd19kaXNhc3NvY2lhdGUocHJpdikpCiAJCWlwd19hc3NvY2lhdGUocHJpdik7CiAKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODQ3OSw3ICs4NDQ4LDcgQEAKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQogCSAqIGNvbmZpZ3VyZWQgQlNTSUQgdGhlbiByZXR1cm4gdGhhdDsgb3RoZXJ3aXNlIHJldHVybiBBTlkgKi8KLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19CU1NJRCB8fAogCSAgICBwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSB7CiAJCXdycXUtPmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwpAQCAtODQ4OSw3ICs4NDU4LDcgQEAKIAogCUlQV19ERUJVR19XWCgiR2V0dGluZyBXQVAgQlNTSUQ6ICIgTUFDX0ZNVCAiXG4iLAogCQkgICAgIE1BQ19BUkcod3JxdS0+YXBfYWRkci5zYV9kYXRhKSk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1MDAsNyArODQ2OSw3IEBACiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAljaGFyICplc3NpZCA9ICIiOwkvKiBBTlkgKi8KIAlpbnQgbGVuZ3RoID0gMDsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAod3JxdS0+ZXNzaWQuZmxhZ3MgJiYgd3JxdS0+ZXNzaWQubGVuZ3RoKSB7CiAJCWxlbmd0aCA9IHdycXUtPmVzc2lkLmxlbmd0aCAtIDE7CiAJCWVzc2lkID0gZXh0cmE7CkBAIC04NTE1LDcgKzg0ODQsNyBAQAogCQkJcHJpdi0+Y29uZmlnICY9IH5DRkdfU1RBVElDX0VTU0lEOwogCQkJaXB3X2Fzc29jaWF0ZShwcml2KTsKIAkJfQotCQl1cCgmcHJpdi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODUyNSw3ICs4NDk0LDcgQEAKIAogCWlmIChwcml2LT5lc3NpZF9sZW4gPT0gbGVuZ3RoICYmICFtZW1jbXAocHJpdi0+ZXNzaWQsIGV4dHJhLCBsZW5ndGgpKSB7CiAJCUlQV19ERUJVR19XWCgiRVNTSUQgc2V0IHRvIGN1cnJlbnQgRVNTSUQuXG4iKTsKLQkJdXAoJnByaXYtPnNlbSk7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTg1NDAsNyArODUwOSw3IEBACiAJaWYgKCFpcHdfZGlzYXNzb2NpYXRlKHByaXYpKQogCQlpcHdfYXNzb2NpYXRlKHByaXYpOwogCi0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1NTIsNyArODUyMSw3IEBACiAKIAkvKiBJZiB3ZSBhcmUgYXNzb2NpYXRlZCwgdHJ5aW5nIHRvIGFzc29jaWF0ZSwgb3IgaGF2ZSBhIHN0YXRpY2FsbHkKIAkgKiBjb25maWd1cmVkIEVTU0lEIHRoZW4gcmV0dXJuIHRoYXQ7IG90aGVyd2lzZSByZXR1cm4gQU5ZICovCi0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQgfHwKIAkgICAgcHJpdi0+c3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwgU1RBVFVTX0FTU09DSUFUSU5HKSkgewogCQlJUFdfREVCVUdfV1goIkdldHRpbmcgZXNzaWQ6ICclcydcbiIsCkBAIC04NTY1LDcgKzg1MzQsNyBAQAogCQl3cnF1LT5lc3NpZC5sZW5ndGggPSAwOwogCQl3cnF1LT5lc3NpZC5mbGFncyA9IDA7CS8qIGFjdGl2ZSAqLwogCX0KLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODU3OCwxMiArODU0NywxMiBAQAogCUlQV19ERUJVR19XWCgiU2V0dGluZyBuaWNrIHRvICclcydcbiIsIGV4dHJhKTsKIAlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKIAkJcmV0dXJuIC1FMkJJRzsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAl3cnF1LT5kYXRhLmxlbmd0aCA9IG1pbigoc2l6ZV90KSB3cnF1LT5kYXRhLmxlbmd0aCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKIAltZW1zZXQocHJpdi0+bmljaywgMCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKIAltZW1jcHkocHJpdi0+bmljaywgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKIAlJUFdfREVCVUdfVFJBQ0UoIjw8XG4iKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIAogfQpAQCAtODU5NCwxMSArODU2Myw1NyBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJSVBXX0RFQlVHX1dYKCJHZXR0aW5nIG5pY2tcbiIpOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmRhdGEubGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spICsgMTsKIAltZW1jcHkoZXh0cmEsIHByaXYtPm5pY2ssIHdycXUtPmRhdGEubGVuZ3RoKTsKIAl3cnF1LT5kYXRhLmZsYWdzID0gMTsJLyogYWN0aXZlICovCi0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3d4X3NldF9zZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWludCBlcnIgPSAwOworCisJSVBXX0RFQlVHX1dYKCJTZXR0aW5nIHJvYW1pbmcgdGhyZXNob2xkIHRvICVkXG4iLCB3cnF1LT5zZW5zLnZhbHVlKTsKKwlJUFdfREVCVUdfV1goIlNldHRpbmcgZGlzYXNzb2NpYXRlIHRocmVzaG9sZCB0byAlZFxuIiwgMyp3cnF1LT5zZW5zLnZhbHVlKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAod3JxdS0+c2Vucy5maXhlZCA9PSAwKQorCXsKKwkJcHJpdi0+cm9hbWluZ190aHJlc2hvbGQgPSBJUFdfTUJfUk9BTUlOR19USFJFU0hPTERfREVGQVVMVDsKKwkJcHJpdi0+ZGlzYXNzb2NpYXRlX3RocmVzaG9sZCA9IElQV19NQl9ESVNBU1NPQ0lBVEVfVEhSRVNIT0xEX0RFRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKHdycXUtPnNlbnMudmFsdWUgPiBJUFdfTUJfUk9BTUlOR19USFJFU0hPTERfTUFYKSB8fAorCSAgICAod3JxdS0+c2Vucy52YWx1ZSA8IElQV19NQl9ST0FNSU5HX1RIUkVTSE9MRF9NSU4pKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXByaXYtPnJvYW1pbmdfdGhyZXNob2xkID0gd3JxdS0+c2Vucy52YWx1ZTsKKwlwcml2LT5kaXNhc3NvY2lhdGVfdGhyZXNob2xkID0gMyp3cnF1LT5zZW5zLnZhbHVlOworICAgICAgb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3d4X2dldF9zZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwl3cnF1LT5zZW5zLmZpeGVkID0gMTsKKwl3cnF1LT5zZW5zLnZhbHVlID0gcHJpdi0+cm9hbWluZ190aHJlc2hvbGQ7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwlJUFdfREVCVUdfV1goIkdFVCByb2FtaW5nIHRocmVzaG9sZCAtPiAlcyAlZCBcbiIsCisJCSAgICAgd3JxdS0+cG93ZXIuZGlzYWJsZWQgPyAiT0ZGIiA6ICJPTiIsIHdycXUtPnBvd2VyLnZhbHVlKTsKKwogCXJldHVybiAwOwogfQogCkBAIC04NjkxLDcgKzg3MDYsNyBAQAogICAgICAgYXBwbHk6CiAJSVBXX0RFQlVHX1dYKCJTZXR0aW5nIHJhdGUgbWFzayB0byAweCUwOFggWyVzXVxuIiwKIAkJICAgICBtYXNrLCBmaXhlZCA/ICJmaXhlZCIgOiAic3ViLXJhdGVzIik7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKG1hc2sgPT0gSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSykgewogCQlwcml2LT5jb25maWcgJj0gfkNGR19GSVhFRF9SQVRFOwogCQlpcHdfc2V0X2ZpeGVkX3JhdGUocHJpdiwgcHJpdi0+aWVlZS0+bW9kZSk7CkBAIC04NzAwLDcgKzg3MTUsNyBAQAogCiAJaWYgKHByaXYtPnJhdGVzX21hc2sgPT0gbWFzaykgewogCQlJUFdfREVCVUdfV1goIk1hc2sgc2V0IHRvIGN1cnJlbnQgbWFzay5cbiIpOwotCQl1cCgmcHJpdi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODcxMSw3ICs4NzI2LDcgQEAKIAlpZiAoIWlwd19kaXNhc3NvY2lhdGUocHJpdikpCiAJCWlwd19hc3NvY2lhdGUocHJpdik7CiAKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODcyMCw5ICs4NzM1LDkgQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJd3JxdS0+Yml0cmF0ZS52YWx1ZSA9IHByaXYtPmxhc3RfcmF0ZTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlJUFdfREVCVUdfV1goIkdFVCBSYXRlIC0+ICVkIFxuIiwgd3JxdS0+Yml0cmF0ZS52YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC04NzMyLDIwICs4NzQ3LDIwIEBACiAJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHdycXUtPnJ0cy5kaXNhYmxlZCkKIAkJcHJpdi0+cnRzX3RocmVzaG9sZCA9IERFRkFVTFRfUlRTX1RIUkVTSE9MRDsKIAllbHNlIHsKIAkJaWYgKHdycXUtPnJ0cy52YWx1ZSA8IE1JTl9SVFNfVEhSRVNIT0xEIHx8CiAJCSAgICB3cnF1LT5ydHMudmFsdWUgPiBNQVhfUlRTX1RIUkVTSE9MRCkgewotCQkJdXAoJnByaXYtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXByaXYtPnJ0c190aHJlc2hvbGQgPSB3cnF1LT5ydHMudmFsdWU7CiAJfQogCiAJaXB3X3NlbmRfcnRzX3RocmVzaG9sZChwcml2LCBwcml2LT5ydHNfdGhyZXNob2xkKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlJUFdfREVCVUdfV1goIlNFVCBSVFMgVGhyZXNob2xkIC0+ICVkIFxuIiwgcHJpdi0+cnRzX3RocmVzaG9sZCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04NzU1LDExICs4NzcwLDExIEBACiAJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJd3JxdS0+cnRzLnZhbHVlID0gcHJpdi0+cnRzX3RocmVzaG9sZDsKIAl3cnF1LT5ydHMuZml4ZWQgPSAwOwkvKiBubyBhdXRvIHNlbGVjdCAqLwogCXdycXUtPnJ0cy5kaXNhYmxlZCA9ICh3cnF1LT5ydHMudmFsdWUgPT0gREVGQVVMVF9SVFNfVEhSRVNIT0xEKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlJUFdfREVCVUdfV1goIkdFVCBSVFMgVGhyZXNob2xkIC0+ICVkIFxuIiwgd3JxdS0+cnRzLnZhbHVlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg3NzEsNyArODc4Niw3IEBACiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChpcHdfcmFkaW9fa2lsbF9zdyhwcml2LCB3cnF1LT5wb3dlci5kaXNhYmxlZCkpIHsKIAkJZXJyID0gLUVJTlBST0dSRVNTOwogCQlnb3RvIG91dDsKQEAgLTg3OTQsNyArODgwOSw3IEBACiAJcHJpdi0+dHhfcG93ZXIgPSB3cnF1LT5wb3dlci52YWx1ZTsKIAllcnIgPSBpcHdfc2V0X3R4X3Bvd2VyKHByaXYpOwogICAgICAgb3V0OgotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg4MDMsMTIgKzg4MTgsMTIgQEAKIAkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPnBvd2VyLnZhbHVlID0gcHJpdi0+dHhfcG93ZXI7CiAJd3JxdS0+cG93ZXIuZml4ZWQgPSAxOwogCXdycXUtPnBvd2VyLmZsYWdzID0gSVdfVFhQT1dfREJNOwogCXdycXUtPnBvd2VyLmRpc2FibGVkID0gKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spID8gMSA6IDA7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlJUFdfREVCVUdfV1goIkdFVCBUWCBQb3dlciAtPiAlcyAlZCBcbiIsCiAJCSAgICAgd3JxdS0+cG93ZXIuZGlzYWJsZWQgPyAiT0ZGIiA6ICJPTiIsIHdycXUtPnBvd2VyLnZhbHVlKTsKQEAgLTg4MjEsMTMgKzg4MzYsMTMgQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHdycXUtPmZyYWcuZGlzYWJsZWQpCiAJCXByaXYtPmllZWUtPmZ0cyA9IERFRkFVTFRfRlRTOwogCWVsc2UgewogCQlpZiAod3JxdS0+ZnJhZy52YWx1ZSA8IE1JTl9GUkFHX1RIUkVTSE9MRCB8fAogCQkgICAgd3JxdS0+ZnJhZy52YWx1ZSA+IE1BWF9GUkFHX1RIUkVTSE9MRCkgewotCQkJdXAoJnByaXYtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTg4MzUsNyArODg1MCw3IEBACiAJfQogCiAJaXB3X3NlbmRfZnJhZ190aHJlc2hvbGQocHJpdiwgd3JxdS0+ZnJhZy52YWx1ZSk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJSVBXX0RFQlVHX1dYKCJTRVQgRnJhZyBUaHJlc2hvbGQgLT4gJWQgXG4iLCB3cnF1LT5mcmFnLnZhbHVlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg4NDUsMTEgKzg4NjAsMTEgQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJd3JxdS0+ZnJhZy52YWx1ZSA9IHByaXYtPmllZWUtPmZ0czsKIAl3cnF1LT5mcmFnLmZpeGVkID0gMDsJLyogbm8gYXV0byBzZWxlY3QgKi8KIAl3cnF1LT5mcmFnLmRpc2FibGVkID0gKHdycXUtPmZyYWcudmFsdWUgPT0gREVGQVVMVF9GVFMpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCUlQV19ERUJVR19XWCgiR0VUIEZyYWcgVGhyZXNob2xkIC0+ICVkIFxuIiwgd3JxdS0+ZnJhZy52YWx1ZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTg4NzAsNyArODg4NSw3IEBACiAJaWYgKHdycXUtPnJldHJ5LnZhbHVlIDwgMCB8fCB3cnF1LT5yZXRyeS52YWx1ZSA+IDI1NSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NSU4pCiAJCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gKHU4KSB3cnF1LT5yZXRyeS52YWx1ZTsKIAllbHNlIGlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01BWCkKQEAgLTg4ODIsNyArODg5Nyw3IEBACiAKIAlpcHdfc2VuZF9yZXRyeV9saW1pdChwcml2LCBwcml2LT5zaG9ydF9yZXRyeV9saW1pdCwKIAkJCSAgICAgcHJpdi0+bG9uZ19yZXRyeV9saW1pdCk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJSVBXX0RFQlVHX1dYKCJTRVQgcmV0cnkgbGltaXQgLT4gc2hvcnQ6JWQgbG9uZzolZFxuIiwKIAkJICAgICBwcml2LT5zaG9ydF9yZXRyeV9saW1pdCwgcHJpdi0+bG9uZ19yZXRyeV9saW1pdCk7CiAJcmV0dXJuIDA7CkBAIC04ODk0LDExICs4OTA5LDExIEBACiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPnJldHJ5LmRpc2FibGVkID0gMDsKIAogCWlmICgod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkgewotCQl1cCgmcHJpdi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODkxMiw3ICs4OTI3LDcgQEAKIAkJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKIAkJd3JxdS0+cmV0cnkudmFsdWUgPSBwcml2LT5zaG9ydF9yZXRyeV9saW1pdDsKIAl9Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlJUFdfREVCVUdfV1goIkdFVCByZXRyeSAtPiAlZCBcbiIsIHdycXUtPnJldHJ5LnZhbHVlKTsKIApAQCAtODkyOSw3ICs4OTQ0LDcgQEAKIAkgICAgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkcpKQogCQlyZXR1cm4gMDsKIAotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX01BU0spIHsKIAkJSVBXX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBraWxsIGFjdGl2YXRpb25cbiIpOwpAQCAtODk4MSw3ICs4OTk2LDcgQEAKIAlwcml2LT5zdGF0dXMgfD0gU1RBVFVTX1NDQU5OSU5HOwogCiAgICAgICBkb25lOgotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTkwMjQsNyArOTAzOSw3IEBACiAJaW50IHJldDsKIAl1MzIgY2FwID0gcHJpdi0+Y2FwYWJpbGl0eTsKIAotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGtleSk7CiAKIAkvKiBJbiBJQlNTIG1vZGUsIHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBmaXJtd2FyZSB0byB1cGRhdGUKQEAgLTkwMzQsNyArOTA0OSw3IEBACiAJICAgIHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKQogCQlpcHdfZGlzYXNzb2NpYXRlKHByaXYpOwogCi0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTA1MiwxNyArOTA2NywxNyBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IGVycjsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAod3JxdS0+cG93ZXIuZGlzYWJsZWQpIHsKIAkJcHJpdi0+cG93ZXJfbW9kZSA9IElQV19QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKTsKIAkJZXJyID0gaXB3X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJUFdfUE9XRVJfTU9ERV9DQU0pOwogCQlpZiAoZXJyKSB7CiAJCQlJUFdfREVCVUdfV1goImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKLQkJCXVwKCZwcml2LT5zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCUlQV19ERUJVR19XWCgiU0VUIFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAtPiBvZmZcbiIpOwotCQl1cCgmcHJpdi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTA3NCw3ICs5MDg5LDcgQEAKIAlkZWZhdWx0OgkJLyogT3RoZXJ3aXNlIHdlIGRvbid0IHN1cHBvcnQgaXQgKi8KIAkJSVBXX0RFQlVHX1dYKCJTRVQgUE0gTW9kZTogJVggbm90IHN1cHBvcnRlZC5cbiIsCiAJCQkgICAgIHdycXUtPnBvd2VyLmZsYWdzKTsKLQkJdXAoJnByaXYtPnNlbSk7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC05MDg3LDEyICs5MTAyLDEyIEBACiAJZXJyID0gaXB3X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJUFdfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSkpOwogCWlmIChlcnIpIHsKIAkJSVBXX0RFQlVHX1dYKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7Ci0JCXVwKCZwcml2LT5zZW0pOworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlJUFdfREVCVUdfV1goIlNFVCBQb3dlciBNYW5hZ2VtZW50IE1vZGUgLT4gMHglMDJYXG4iLCBwcml2LT5wb3dlcl9tb2RlKTsKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTEwMSwxMyArOTExNiwxMyBAQAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKCEocHJpdi0+cG93ZXJfbW9kZSAmIElQV19QT1dFUl9FTkFCTEVEKSkKIAkJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAxOwogCWVsc2UKIAkJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAwOwogCi0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJSVBXX0RFQlVHX1dYKCJHRVQgUG93ZXIgTWFuYWdlbWVudCBNb2RlIC0+ICUwMlhcbiIsIHByaXYtPnBvd2VyX21vZGUpOwogCiAJcmV0dXJuIDA7CkBAIC05MTIwLDcgKzkxMzUsNyBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IG1vZGUgPSAqKGludCAqKWV4dHJhOwogCWludCBlcnI7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKChtb2RlIDwgMSkgfHwgKG1vZGUgPiBJUFdfUE9XRVJfTElNSVQpKSB7CiAJCW1vZGUgPSBJUFdfUE9XRVJfQUM7CiAJCXByaXYtPnBvd2VyX21vZGUgPSBtb2RlOwpAQCAtOTEzMywxMSArOTE0OCwxMSBAQAogCiAJCWlmIChlcnIpIHsKIAkJCUlQV19ERUJVR19XWCgiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOwotCQkJdXAoJnByaXYtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxODYsNyArOTIwMSw3IEBACiAJCUlQV19XQVJOSU5HKCJBdHRlbXB0IHRvIHNldCBpbnZhbGlkIHdpcmVsZXNzIG1vZGU6ICVkXG4iLCBtb2RlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5hZGFwdGVyID09IElQV18yOTE1QUJHKSB7CiAJCXByaXYtPmllZWUtPmFiZ190cnVlID0gMTsKIAkJaWYgKG1vZGUgJiBJRUVFX0EpIHsKQEAgLTkxOTgsNyArOTIxMyw3IEBACiAJCWlmIChtb2RlICYgSUVFRV9BKSB7CiAJCQlJUFdfV0FSTklORygiQXR0ZW1wdCB0byBzZXQgMjIwMEJHIGludG8gIgogCQkJCSAgICAiODAyLjExYSBtb2RlXG4iKTsKLQkJCXVwKCZwcml2LT5zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC05MjM1LDcgKzkyNTAsNyBAQAogCUlQV19ERUJVR19XWCgiUFJJViBTRVQgTU9ERTogJWMlYyVjXG4iLAogCQkgICAgIG1vZGUgJiBJRUVFX0EgPyAnYScgOiAnLicsCiAJCSAgICAgbW9kZSAmIElFRUVfQiA/ICdiJyA6ICcuJywgbW9kZSAmIElFRUVfRyA/ICdnJyA6ICcuJyk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyNDQsNyArOTI1OSw3IEBACiAJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJc3dpdGNoIChwcml2LT5pZWVlLT5tb2RlKSB7CiAJY2FzZSBJRUVFX0E6CiAJCXN0cm5jcHkoZXh0cmEsICI4MDIuMTFhICgxKSIsIE1BWF9XWF9TVFJJTkcpOwpAQCAtOTI3NSw3ICs5MjkwLDcgQEAKIAlJUFdfREVCVUdfV1goIlBSSVYgR0VUIE1PREU6ICVzXG4iLCBleHRyYSk7CiAKIAl3cnF1LT5kYXRhLmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05Mjg2LDcgKzkzMDEsNyBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IG1vZGUgPSAqKGludCAqKWV4dHJhOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCS8qIFN3aXRjaGluZyBmcm9tIFNIT1JUIC0+IExPTkcgcmVxdWlyZXMgYSBkaXNhc3NvY2lhdGlvbiAqLwogCWlmIChtb2RlID09IDEpIHsKIAkJaWYgKCEocHJpdi0+Y29uZmlnICYgQ0ZHX1BSRUFNQkxFX0xPTkcpKSB7CkBAIC05MzA1LDExICs5MzIwLDExIEBACiAJCXByaXYtPmNvbmZpZyAmPSB+Q0ZHX1BSRUFNQkxFX0xPTkc7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIC1FSU5WQUw7CiAKICAgICAgIGRvbmU6Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkzMTgsMTIgKzkzMzMsMTIgQEAKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5jb25maWcgJiBDRkdfUFJFQU1CTEVfTE9ORykKIAkJc25wcmludGYod3JxdS0+bmFtZSwgSUZOQU1TSVosICJsb25nICgxKSIpOwogCWVsc2UKIAkJc25wcmludGYod3JxdS0+bmFtZSwgSUZOQU1TSVosICJhdXRvICgwKSIpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC05MzM1LDcgKzkzNTAsNyBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50ICpwYXJtcyA9IChpbnQgKilleHRyYTsKIAlpbnQgZW5hYmxlID0gKHBhcm1zWzBdID4gMCk7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJSVBXX0RFQlVHX1dYKCJTRVQgTU9OSVRPUjogJWQgJWRcbiIsIGVuYWJsZSwgcGFybXNbMV0pOwogCWlmIChlbmFibGUpIHsKIAkJaWYgKHByaXYtPmllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9NT05JVE9SKSB7CkBAIC05MzUwLDEzICs5MzY1LDEzIEBACiAJCWlwd19zZXRfY2hhbm5lbChwcml2LCBwYXJtc1sxXSk7CiAJfSBlbHNlIHsKIAkJaWYgKHByaXYtPmllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCQl1cCgmcHJpdi0+c2VtKTsKKwkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcHJpdi0+bmV0X2Rldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKIAkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hZGFwdGVyX3Jlc3RhcnQpOwogCX0KLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTM4Niw5ICs5NDAxLDkgQEAKIAogCUlQV19ERUJVR19XWCgiU1dfUkVTRVRcbiIpOwogCi0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlyZXQgPSBpcHdfc3dfcmVzZXQocHJpdiwgMCk7CisJcmV0ID0gaXB3X3N3X3Jlc2V0KHByaXYsIDIpOwogCWlmICghcmV0KSB7CiAJCWZyZWVfZmlybXdhcmUoKTsKIAkJaXB3X2FkYXB0ZXJfcmVzdGFydChwcml2KTsKQEAgLTkzOTgsOSArOTQxMyw5IEBACiAJICogbW9kdWxlIHBhcmFtZXRlciwgc28gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gKi8KIAlpcHdfcmFkaW9fa2lsbF9zdyhwcml2LCBwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVyk7CiAKLQl1cCgmcHJpdi0+c2VtKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlpZWVlODAyMTFfd3hfc2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCAmd3JxdV9zZWMsIE5VTEwpOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykpIHsKIAkJLyogQ29uZmlndXJhdGlvbiBsaWtlbHkgY2hhbmdlZCAtLSBmb3JjZSBbcmVdYXNzb2NpYXRpb24gKi8KQEAgLTk0MTAsNyArOTQyNSw3IEBACiAJCQlpcHdfYXNzb2NpYXRlKHByaXYpOwogCX0KIAotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NDIzLDYgKzk0MzgsOCBAQAogCUlXX0lPQ1RMKFNJT0NHSVdGUkVRKSA9IGlwd193eF9nZXRfZnJlcSwKIAlJV19JT0NUTChTSU9DU0lXTU9ERSkgPSBpcHdfd3hfc2V0X21vZGUsCiAJSVdfSU9DVEwoU0lPQ0dJV01PREUpID0gaXB3X3d4X2dldF9tb2RlLAorCUlXX0lPQ1RMKFNJT0NTSVdTRU5TKSA9IGlwd193eF9zZXRfc2VucywKKwlJV19JT0NUTChTSU9DR0lXU0VOUykgPSBpcHdfd3hfZ2V0X3NlbnMsCiAJSVdfSU9DVEwoU0lPQ0dJV1JBTkdFKSA9IGlwd193eF9nZXRfcmFuZ2UsCiAJSVdfSU9DVEwoU0lPQ1NJV0FQKSA9IGlwd193eF9zZXRfd2FwLAogCUlXX0lPQ1RMKFNJT0NHSVdBUCkgPSBpcHdfd3hfZ2V0X3dhcCwKQEAgLTk1NjgsNyArOTU4NSw3IEBACiAJd3N0YXRzLT5xdWFsLmxldmVsID0gYXZlcmFnZV92YWx1ZSgmcHJpdi0+YXZlcmFnZV9yc3NpKTsKIAl3c3RhdHMtPnF1YWwubm9pc2UgPSBhdmVyYWdlX3ZhbHVlKCZwcml2LT5hdmVyYWdlX25vaXNlKTsKIAl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfUVVBTF9VUERBVEVEIHwgSVdfUVVBTF9MRVZFTF9VUERBVEVEIHwKLQkgICAgSVdfUVVBTF9OT0lTRV9VUERBVEVEOworCSAgICBJV19RVUFMX05PSVNFX1VQREFURUQgfCBJV19RVUFMX0RCTTsKIAogCXdzdGF0cy0+bWlzcy5iZWFjb24gPSBhdmVyYWdlX3ZhbHVlKCZwcml2LT5hdmVyYWdlX21pc3NlZF9iZWFjb25zKTsKIAl3c3RhdHMtPmRpc2NhcmQucmV0cmllcyA9IHByaXYtPmxhc3RfdHhfZmFpbHVyZXM7CkBAIC05NTg2LDcgKzk2MDMsNyBAQAogc3RhdGljICB2b2lkIGluaXRfc3lzX2NvbmZpZyhzdHJ1Y3QgaXB3X3N5c19jb25maWcgKnN5c19jb25maWcpCiB7CiAJbWVtc2V0KHN5c19jb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgaXB3X3N5c19jb25maWcpKTsKLQlzeXNfY29uZmlnLT5idF9jb2V4aXN0ZW5jZSA9IDE7CS8qIFdlIG1heSBuZWVkIHRvIGxvb2sgaW50byBwcnZTdGFCdENvbmZpZyAqLworCXN5c19jb25maWctPmJ0X2NvZXhpc3RlbmNlID0gMDsKIAlzeXNfY29uZmlnLT5hbnN3ZXJfYnJvYWRjYXN0X3NzaWRfcHJvYmUgPSAwOwogCXN5c19jb25maWctPmFjY2VwdF9hbGxfZGF0YV9mcmFtZXMgPSAwOwogCXN5c19jb25maWctPmFjY2VwdF9ub25fZGlyZWN0ZWRfZnJhbWVzID0gMTsKQEAgLTk1OTQsMTIgKzk2MTEsMTMgQEAKIAlzeXNfY29uZmlnLT5kaXNhYmxlX3VuaWNhc3RfZGVjcnlwdGlvbiA9IDE7CiAJc3lzX2NvbmZpZy0+ZXhjbHVkZV9tdWx0aWNhc3RfdW5lbmNyeXB0ZWQgPSAwOwogCXN5c19jb25maWctPmRpc2FibGVfbXVsdGljYXN0X2RlY3J5cHRpb24gPSAxOwotCXN5c19jb25maWctPmFudGVubmFfZGl2ZXJzaXR5ID0gQ0ZHX1NZU19BTlRFTk5BX0JPVEg7CisJc3lzX2NvbmZpZy0+YW50ZW5uYV9kaXZlcnNpdHkgPSBDRkdfU1lTX0FOVEVOTkFfU0xPV19ESVY7CiAJc3lzX2NvbmZpZy0+cGFzc19jcmNfdG9faG9zdCA9IDA7CS8qIFRPRE86IFNlZSBpZiAxIGdpdmVzIHVzIEZDUyAqLwogCXN5c19jb25maWctPmRvdDExZ19hdXRvX2RldGVjdGlvbiA9IDA7CiAJc3lzX2NvbmZpZy0+ZW5hYmxlX2N0c190b19zZWxmID0gMDsKIAlzeXNfY29uZmlnLT5idF9jb2V4aXN0X2NvbGxpc2lvbl90aHIgPSAwOwogCXN5c19jb25maWctPnBhc3Nfbm9pc2Vfc3RhdHNfdG9faG9zdCA9IDE7CS8vMSAtLSBmaXggZm9yIDI1NgorCXN5c19jb25maWctPnNpbGVuY2VfdGhyZXNob2xkID0gMHgxZTsKIH0KIAogc3RhdGljIGludCBpcHdfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTk2MDcsMTEgKzk2MjUsMTEgQEAKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCUlQV19ERUJVR19JTkZPKCJkZXYtPm9wZW5cbiIpOwogCS8qIHdlIHNob3VsZCBiZSB2ZXJpZnlpbmcgdGhlIGRldmljZSBpcyByZWFkeSB0byBiZSBvcGVuZWQgKi8KLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKSAmJgogCSAgICAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC05NjQ3LDExICs5NjY1LDYgQEAKIAl1MTYgcmVtYWluaW5nX2J5dGVzOwogCWludCBmYzsKIAotCS8qIElmIHRoZXJlIGlzbid0IHJvb20gaW4gdGhlIHF1ZXVlLCB3ZSByZXR1cm4gYnVzeSBhbmQgbGV0IHRoZQotCSAqIG5ldHdvcmsgc3RhY2sgcmVxdWV1ZSB0aGUgcGFja2V0IGZvciB1cyAqLwotCWlmIChpcHdfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCi0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQogCXN3aXRjaCAocHJpdi0+aWVlZS0+aXdfbW9kZSkgewogCWNhc2UgSVdfTU9ERV9BREhPQzoKIAkJaGRyX2xlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47CkBAIC05ODE3LDYgKzk4MzAsOSBAQAogCXEtPmZpcnN0X2VtcHR5ID0gaXB3X3F1ZXVlX2luY193cmFwKHEtPmZpcnN0X2VtcHR5LCBxLT5uX2JkKTsKIAlpcHdfd3JpdGUzMihwcml2LCBxLT5yZWdfdywgcS0+Zmlyc3RfZW1wdHkpOwogCisJaWYgKGlwd19xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykKKwkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRfZGV2KTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiAKICAgICAgIGRyb3A6CkBAIC05ODkwLDEzICs5OTA2LDEzIEBACiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlwcml2LT5jb25maWcgfD0gQ0ZHX0NVU1RPTV9NQUM7CiAJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNldHRpbmcgTUFDIHRvICIgTUFDX0ZNVCAiXG4iLAogCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lLCBNQUNfQVJHKHByaXYtPm1hY19hZGRyKSk7CiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hZGFwdGVyX3Jlc3RhcnQpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC05OTQwLDkgKzk5NTYsOSBAQAogCiAJaWYgKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gPiBJUFdfRUVQUk9NX0lNQUdFX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwotCWRvd24oJnAtPnNlbSk7CisJbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwogCW1lbWNweShieXRlcywgJnAtPmVlcHJvbVtlZXByb20tPm9mZnNldF0sIGVlcHJvbS0+bGVuKTsKLQl1cCgmcC0+c2VtKTsKKwltdXRleF91bmxvY2soJnAtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTk1NCwxMiArOTk3MCwxMSBAQAogCiAJaWYgKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4gPiBJUFdfRUVQUk9NX0lNQUdFX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwotCWRvd24oJnAtPnNlbSk7CisJbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwogCW1lbWNweSgmcC0+ZWVwcm9tW2VlcHJvbS0+b2Zmc2V0XSwgYnl0ZXMsIGVlcHJvbS0+bGVuKTsKLQlmb3IgKGkgPSBJUFdfRUVQUk9NX0RBVEE7Ci0JICAgICBpIDwgSVBXX0VFUFJPTV9EQVRBICsgSVBXX0VFUFJPTV9JTUFHRV9TSVpFOyBpKyspCi0JCWlwd193cml0ZTgocCwgaSwgcC0+ZWVwcm9tW2ldKTsKLQl1cCgmcC0+c2VtKTsKKwlmb3IgKGkgPSAwOyBpIDwgSVBXX0VFUFJPTV9JTUFHRV9TSVpFOyBpKyspCisJCWlwd193cml0ZTgocCwgaSArIElQV19FRVBST01fREFUQSwgcC0+ZWVwcm9tW2ldKTsKKwltdXRleF91bmxvY2soJnAtPm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAwNTQsMTIgKzEwMDY5LDEyIEBACiBzdGF0aWMgdm9pZCBpcHdfYmdfcmZfa2lsbCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXB3X3JmX2tpbGwoZGF0YSk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXZvaWQgaXB3X2xpbmtfdXAoc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXB3X2xpbmtfdXAoc3RydWN0IGlwd19wcml2ICpwcml2KQogewogCXByaXYtPmxhc3Rfc2VxX251bSA9IC0xOwogCXByaXYtPmxhc3RfZnJhZ19udW0gPSAtMTsKQEAgLTEwMDg5LDEyICsxMDEwNCwxMiBAQAogc3RhdGljIHZvaWQgaXB3X2JnX2xpbmtfdXAodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlwd19saW5rX3VwKGRhdGEpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi12b2lkIGlwd19saW5rX2Rvd24oc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXB3X2xpbmtfZG93bihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJaXB3X2xlZF9saW5rX2Rvd24ocHJpdik7CiAJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0X2Rldik7CkBAIC0xMDExNyw5ICsxMDEzMiw5IEBACiBzdGF0aWMgdm9pZCBpcHdfYmdfbGlua19kb3duKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpcHdfbGlua19kb3duKGRhdGEpOwotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGlwd19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKQEAgLTEwMjkyLDYgKzEwMzA3LDIwIEBACiAKIAkvKiBzZXQgYmFzaWMgc3lzdGVtIGNvbmZpZyBzZXR0aW5ncyAqLwogCWluaXRfc3lzX2NvbmZpZygmcHJpdi0+c3lzX2NvbmZpZyk7CisKKwkvKiBTdXBwb3J0IEJsdWV0b290aCBpZiB3ZSBoYXZlIEJUIGgvdyBvbiBib2FyZCwgYW5kIHVzZXIgd2FudHMgdG8uCisJICogRG9lcyBub3Qgc3VwcG9ydCBCVCBwcmlvcml0eSB5ZXQgKGRvbid0IGFib3J0IG9yIGRlZmVyIG91ciBUeCkgKi8KKwlpZiAoYnRfY29leGlzdCkgeworCQl1bnNpZ25lZCBjaGFyIGJ0X2NhcHMgPSBwcml2LT5lZXByb21bRUVQUk9NX1NLVV9DQVBBQklMSVRZXTsKKworCQlpZiAoYnRfY2FwcyAmIEVFUFJPTV9TS1VfQ0FQX0JUX0NIQU5ORUxfU0lHKQorCQkJcHJpdi0+c3lzX2NvbmZpZy5idF9jb2V4aXN0ZW5jZQorCQkJICAgIHw9IENGR19CVF9DT0VYSVNURU5DRV9TSUdOQUxfQ0hOTDsKKwkJaWYgKGJ0X2NhcHMgJiBFRVBST01fU0tVX0NBUF9CVF9PT0IpCisJCQlwcml2LT5zeXNfY29uZmlnLmJ0X2NvZXhpc3RlbmNlCisJCQkgICAgfD0gQ0ZHX0JUX0NPRVhJU1RFTkNFX09PQjsKKwl9CisKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQogCQlwcml2LT5zeXNfY29uZmlnLmFuc3dlcl9icm9hZGNhc3Rfc3NpZF9wcm9iZSA9IDE7CiAJZWxzZQpAQCAtMTAzNDksNiArMTAzNzgsOSBAQAogICogbm90IGludGVuZGVkIGZvciByZXNhbGUgb2YgdGhlIGFib3ZlIG1lbnRpb25lZCBJbnRlbCBhZGFwdGVycyBoYXMKICAqIG5vdCBiZWVuIHRlc3RlZC4KICAqCisgKiBSZW1lbWJlciB0byB1cGRhdGUgdGhlIHRhYmxlIGluIFJFQURNRS5pcHcyMjAwIHdoZW4gY2hhbmdpbmcgdGhpcworICogdGFibGUuCisgKgogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gaXB3X2dlb3NbXSA9IHsKIAl7CQkJLyogUmVzdHJpY3RlZCAqLwpAQCAtMTA1OTYsOTYgKzEwNjI4LDYgQEAKIAkgfQogfTsKIAotLyogR0VPIGNvZGUgYm9ycm93ZWQgZnJvbSBpZWVlODAyMTFfZ2VvLmMgKi8KLXN0YXRpYyBpbnQgaXB3X2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCi17Ci0JaW50IGk7Ci0KLQkvKiBEcml2ZXIgbmVlZHMgdG8gaW5pdGlhbGl6ZSB0aGUgZ2VvZ3JhcGh5IG1hcCBiZWZvcmUgdXNpbmcKLQkgKiB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zICovCi0JQlVHX09OKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApOwotCi0JaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKQotCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmJnX2NoYW5uZWxzOyBpKyspCi0JCQkvKiBOT1RFOiBJZiBHIG1vZGUgaXMgY3VycmVudGx5IHN1cHBvcnRlZCBidXQKLQkJCSAqIHRoaXMgaXMgYSBCIG9ubHkgY2hhbm5lbCwgd2UgZG9uJ3Qgc2VlIGl0Ci0JCQkgKiBhcyB2YWxpZC4gKi8KLQkJCWlmICgoaWVlZS0+Z2VvLmJnW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkgJiYKLQkJCSAgICAoIShpZWVlLT5tb2RlICYgSUVFRV9HKSB8fAotCQkJICAgICAhKGllZWUtPmdlby5iZ1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9CX09OTFkpKSkKLQkJCQlyZXR1cm4gSUVFRTgwMjExXzI0R0haX0JBTkQ7Ci0KLQlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzUyR0haX0JBTkQpCi0JCWZvciAoaSA9IDA7IGkgPCBpZWVlLT5nZW8uYV9jaGFubmVsczsgaSsrKQotCQkJaWYgKGllZWUtPmdlby5hW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKLQkJCQlyZXR1cm4gSUVFRTgwMjExXzUyR0haX0JBTkQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpcHdfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggY2hhbm5lbCkKLXsKLQlpbnQgaTsKLQotCS8qIERyaXZlciBuZWVkcyB0byBpbml0aWFsaXplIHRoZSBnZW9ncmFwaHkgbWFwIGJlZm9yZSB1c2luZwotCSAqIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgKi8KLQlCVUdfT04oaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID09IDAgJiYgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgPT0gMCk7Ci0KLQlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpCi0JCWZvciAoaSA9IDA7IGkgPCBpZWVlLT5nZW8uYmdfY2hhbm5lbHM7IGkrKykKLQkJCWlmIChpZWVlLT5nZW8uYmdbaV0uY2hhbm5lbCA9PSBjaGFubmVsKQotCQkJCXJldHVybiBpOwotCi0JaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKQotCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmFfY2hhbm5lbHM7IGkrKykKLQkJCWlmIChpZWVlLT5nZW8uYVtpXS5jaGFubmVsID09IGNoYW5uZWwpCi0JCQkJcmV0dXJuIGk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB1OCBpcHdfZnJlcV90b19jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1MzIgZnJlcSkKLXsKLQlpbnQgaTsKLQotCS8qIERyaXZlciBuZWVkcyB0byBpbml0aWFsaXplIHRoZSBnZW9ncmFwaHkgbWFwIGJlZm9yZSB1c2luZwotCSAqIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgKi8KLQlCVUdfT04oaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID09IDAgJiYgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgPT0gMCk7Ci0KLQlmcmVxIC89IDEwMDAwMDsKLQotCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkKLQkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5iZ19jaGFubmVsczsgaSsrKQotCQkJaWYgKGllZWUtPmdlby5iZ1tpXS5mcmVxID09IGZyZXEpCi0JCQkJcmV0dXJuIGllZWUtPmdlby5iZ1tpXS5jaGFubmVsOwotCi0JaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKQotCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmFfY2hhbm5lbHM7IGkrKykKLQkJCWlmIChpZWVlLT5nZW8uYVtpXS5mcmVxID09IGZyZXEpCi0JCQkJcmV0dXJuIGllZWUtPmdlby5hW2ldLmNoYW5uZWw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpcHdfc2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8pCi17Ci0JbWVtY3B5KGllZWUtPmdlby5uYW1lLCBnZW8tPm5hbWUsIDMpOwotCWllZWUtPmdlby5uYW1lWzNdID0gJ1wwJzsKLQlpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPSBnZW8tPmJnX2NoYW5uZWxzOwotCWllZWUtPmdlby5hX2NoYW5uZWxzID0gZ2VvLT5hX2NoYW5uZWxzOwotCW1lbWNweShpZWVlLT5nZW8uYmcsIGdlby0+YmcsIGdlby0+YmdfY2hhbm5lbHMgKgotCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSk7Ci0JbWVtY3B5KGllZWUtPmdlby5hLCBnZW8tPmEsIGllZWUtPmdlby5hX2NoYW5uZWxzICoKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmlwd19nZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotCXJldHVybiAmaWVlZS0+Z2VvOwotfQotCiAjZGVmaW5lIE1BWF9IV19SRVNUQVJUUyA1CiBzdGF0aWMgaW50IGlwd191cChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CkBAIC0xMDczMiwxNCArMTA2NzQsMTEgQEAKIAkJCQkgICAgcHJpdi0+ZWVwcm9tW0VFUFJPTV9DT1VOVFJZX0NPREUgKyAyXSk7CiAJCQlqID0gMDsKIAkJfQotCQlpZiAoaXB3X3NldF9nZW8ocHJpdi0+aWVlZSwgJmlwd19nZW9zW2pdKSkgeworCQlpZiAoaWVlZTgwMjExX3NldF9nZW8ocHJpdi0+aWVlZSwgJmlwd19nZW9zW2pdKSkgewogCQkJSVBXX1dBUk5JTkcoIkNvdWxkIG5vdCBzZXQgZ2VvZ3JhcGh5LiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlJUFdfREVCVUdfSU5GTygiR2VvZ3JhcGh5ICUwM2QgWyVzXSBkZXRlY3RlZC5cbiIsCi0JCQkgICAgICAgaiwgcHJpdi0+aWVlZS0+Z2VvLm5hbWUpOwotCiAJCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVykgewogCQkJSVBXX1dBUk5JTkcoIlJhZGlvIGRpc2FibGVkIGJ5IG1vZHVsZSBwYXJhbWV0ZXIuXG4iKTsKIAkJCXJldHVybiAwOwpAQCAtMTA3ODIsOSArMTA3MjEsOSBAQAogc3RhdGljIHZvaWQgaXB3X2JnX3VwKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpcHdfdXAoZGF0YSk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwd19kZWluaXQoc3RydWN0IGlwd19wcml2ICpwcml2KQpAQCAtMTA4NTMsMjMgKzEwNzkyLDIzIEBACiBzdGF0aWMgdm9pZCBpcHdfYmdfZG93bih2b2lkICpkYXRhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7Ci0JZG93bigmcHJpdi0+c2VtKTsKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaXB3X2Rvd24oZGF0YSk7Ci0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKIC8qIENhbGxlZCBieSByZWdpc3Rlcl9uZXRkZXYoKSAqLwogc3RhdGljIGludCBpcHdfbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGlwd191cChwcml2KSkgewotCQl1cCgmcHJpdi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAotCXVwKCZwcml2LT5zZW0pOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk1OSw3ICsxMDg5OCw3IEBACiAJZm9yIChpID0gMDsgaSA8IElQV19JQlNTX01BQ19IQVNIX1NJWkU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmlic3NfbWFjX2hhc2hbaV0pOwogCi0JaW5pdF9NVVRFWCgmcHJpdi0+c2VtKTsKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X2ZyZWVfaWVlZTgwMjExOwpAQCAtMTEwMTcsNyArMTA5NTYsNyBAQAogCVNFVF9NT0RVTEVfT1dORVIobmV0X2Rldik7CiAJU0VUX05FVERFVl9ERVYobmV0X2RldiwgJnBkZXYtPmRldik7CiAKLQlkb3duKCZwcml2LT5zZW0pOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCXByaXYtPmllZWUtPmhhcmRfc3RhcnRfeG1pdCA9IGlwd19uZXRfaGFyZF9zdGFydF94bWl0OwogCXByaXYtPmllZWUtPnNldF9zZWN1cml0eSA9IHNoaW1fX3NldF9zZWN1cml0eTsKQEAgLTExMDUwLDE2ICsxMDk4OSwyMiBAQAogCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpcHdfYXR0cmlidXRlX2dyb3VwKTsKIAlpZiAoZXJyKSB7CiAJCUlQV19FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIik7Ci0JCXVwKCZwcml2LT5zZW0pOworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJZ290byBvdXRfcmVsZWFzZV9pcnE7CiAJfQogCi0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldF9kZXYpOwogCWlmIChlcnIpIHsKIAkJSVBXX0VSUk9SKCJmYWlsZWQgdG8gcmVnaXN0ZXIgbmV0d29yayBkZXZpY2VcbiIpOwogCQlnb3RvIG91dF9yZW1vdmVfc3lzZnM7CiAJfQorCisJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBEZXRlY3RlZCBnZW9ncmFwaHkgJXMgKCVkIDgwMi4xMWJnICIKKwkgICAgICAgImNoYW5uZWxzLCAlZCA4MDIuMTFhIGNoYW5uZWxzKVxuIiwKKwkgICAgICAgcHJpdi0+aWVlZS0+Z2VvLm5hbWUsIHByaXYtPmllZWUtPmdlby5iZ19jaGFubmVscywKKwkgICAgICAgcHJpdi0+aWVlZS0+Z2VvLmFfY2hhbm5lbHMpOworCiAJcmV0dXJuIDA7CiAKICAgICAgIG91dF9yZW1vdmVfc3lzZnM6CkBAIC0xMTA5MSwxMyArMTEwMzYsMTMgQEAKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAotCWRvd24oJnByaXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19FWElUX1BFTkRJTkc7CiAJaXB3X2Rvd24ocHJpdik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmlwd19hdHRyaWJ1dGVfZ3JvdXApOwogCi0JdXAoJnByaXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihwcml2LT5uZXRfZGV2KTsKIApAQCAtMTEyNTAsOCArMTExOTUsMTAgQEAKIG1vZHVsZV9wYXJhbShsZWQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxlZCwgImVuYWJsZSBsZWQgY29udHJvbCBvbiBzb21lIHN5c3RlbXMgKGRlZmF1bHQgMCBvZmYpXG4iKTsKIAorI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKKyNlbmRpZgogCiBtb2R1bGVfcGFyYW0oY2hhbm5lbCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoY2hhbm5lbCwgImNoYW5uZWwgdG8gbGltaXQgYXNzb2NpYXRlIHRvIChkZWZhdWx0IDAgW0FOWV0pIik7CkBAIC0xMTI4MSwxMiArMTEyMjgsMTggQEAKIE1PRFVMRV9QQVJNX0RFU0MobW9kZSwgIm5ldHdvcmsgbW9kZSAoMD1CU1MsMT1JQlNTKSIpOwogI2VuZGlmCiAKK21vZHVsZV9wYXJhbShidF9jb2V4aXN0LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhidF9jb2V4aXN0LCAiZW5hYmxlIGJsdWV0b290aCBjb2V4aXN0ZW5jZSAoZGVmYXVsdCBvZmYpIik7CisKIG1vZHVsZV9wYXJhbShod2NyeXB0bywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoaHdjcnlwdG8sICJlbmFibGUgaGFyZHdhcmUgY3J5cHRvIChkZWZhdWx0IG9uKSIpOworTU9EVUxFX1BBUk1fREVTQyhod2NyeXB0bywgImVuYWJsZSBoYXJkd2FyZSBjcnlwdG8gKGRlZmF1bHQgb2ZmKSIpOwogCiBtb2R1bGVfcGFyYW0oY21kbG9nLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhjbWRsb2csCiAJCSAiYWxsb2NhdGUgYSByaW5nIGJ1ZmZlciBmb3IgbG9nZ2luZyBmaXJtd2FyZSBjb21tYW5kcyIpOwogCittb2R1bGVfcGFyYW0ocm9hbWluZywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mocm9hbWluZywgImVuYWJsZSByb2FtaW5nIHN1cHBvcnQgKGRlZmF1bHQgb24pIik7CisKIG1vZHVsZV9leGl0KGlwd19leGl0KTsKIG1vZHVsZV9pbml0KGlwd19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaAppbmRleCBlNjU2MjBhLi40Yjk4MDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi0gIENvcHlyaWdodChjKSAyMDAzIC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtNDYsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KQEAgLTI0NCw4ICsyNDYsMTAgQEAKICNkZWZpbmUgSE9TVF9OT1RJRklDQVRJT05fUzM2X01FQVNVUkVNRU5UX1JFRlVTRUQgICAgICAgMzEKIAogI2RlZmluZSBIT1NUX05PVElGSUNBVElPTl9TVEFUVVNfQkVBQ09OX01JU1NJTkcgICAgICAgICAxCi0jZGVmaW5lIElQV19NQl9ESVNBU1NPQ0lBVEVfVEhSRVNIT0xEX0RFRkFVTFQgICAgICAgICAgIDI0CisjZGVmaW5lIElQV19NQl9ST0FNSU5HX1RIUkVTSE9MRF9NSU4gICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgSVBXX01CX1JPQU1JTkdfVEhSRVNIT0xEX0RFRkFVTFQgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJUFdfTUJfUk9BTUlOR19USFJFU0hPTERfTUFYICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBJUFdfTUJfRElTQVNTT0NJQVRFX1RIUkVTSE9MRF9ERUZBVUxUICAgICAgICAgICAzKklQV19NQl9ST0FNSU5HX1RIUkVTSE9MRF9ERUZBVUxUCiAjZGVmaW5lIElQV19SRUFMX1JBVEVfUlhfUEFDS0VUX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDMwMAogCiAjZGVmaW5lIE1BQ0FEUlJfQllURV9MRU4gICAgICAgICAgICAgICAgICAgICA2CkBAIC02MTYsMTMgKzYyMCwxNiBAQAogCXU4IHJlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgU0lMRU5DRV9PVkVSX1RIUkVTSCAoMSkKKyNkZWZpbmUgU0lMRU5DRV9VTkRFUl9USFJFU0ggKDIpCisKIHN0cnVjdCBub3RpZl9saW5rX2RldGVyaW9yYXRpb24gewogCXN0cnVjdCBpcHdfY21kX3N0YXRzIHN0YXRzOwogCXU4IHJhdGU7CiAJdTggbW9kdWxhdGlvbjsKIAlzdHJ1Y3QgcmF0ZV9oaXN0b2dyYW0gaGlzdG9ncmFtOwotCXU4IHJlc2VydmVkMTsKLQl1MTYgcmVzZXJ2ZWQyOworCXU4IHNpbGVuY2Vfbm90aWZpY2F0aW9uX3R5cGU7CS8qIFNJTEVOQ0VfT1ZFUi9VTkRFUl9USFJFU0ggKi8KKwl1MTYgc2lsZW5jZV9jb3VudDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3Qgbm90aWZfYXNzb2NpYXRpb24gewpAQCAtNzgwLDcgKzc4Nyw3IEBACiAJdTggZW5hYmxlX2N0c190b19zZWxmOwogCXU4IGVuYWJsZV9tdWx0aWNhc3RfZmlsdGVyaW5nOwogCXU4IGJ0X2NvZXhpc3RfY29sbGlzaW9uX3RocjsKLQl1OCByZXNlcnZlZDI7CisJdTggc2lsZW5jZV90aHJlc2hvbGQ7CiAJdTggYWNjZXB0X2FsbF9tZ210X2JjcHI7CiAJdTggYWNjZXB0X2FsbF9tZ3RtX2ZyYW1lczsKIAl1OCBwYXNzX25vaXNlX3N0YXRzX3RvX2hvc3Q7CkBAIC04NTIsNyArODU5LDcgQEAKIAl1MTYgZHdlbGxfdGltZVtJUFdfU0NBTl9UWVBFU107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotZXh0ZXJuIGlubGluZSB1OCBpcHdfZ2V0X3NjYW5fdHlwZShzdHJ1Y3QgaXB3X3NjYW5fcmVxdWVzdF9leHQgKnNjYW4sIHU4IGluZGV4KQorc3RhdGljIGlubGluZSB1OCBpcHdfZ2V0X3NjYW5fdHlwZShzdHJ1Y3QgaXB3X3NjYW5fcmVxdWVzdF9leHQgKnNjYW4sIHU4IGluZGV4KQogewogCWlmIChpbmRleCAlIDIpCiAJCXJldHVybiBzY2FuLT5zY2FuX3R5cGVbaW5kZXggLyAyXSAmIDB4MEY7CkBAIC04NjAsNyArODY3LDcgQEAKIAkJcmV0dXJuIChzY2FuLT5zY2FuX3R5cGVbaW5kZXggLyAyXSAmIDB4RjApID4+IDQ7CiB9CiAKLWV4dGVybiBpbmxpbmUgdm9pZCBpcHdfc2V0X3NjYW5fdHlwZShzdHJ1Y3QgaXB3X3NjYW5fcmVxdWVzdF9leHQgKnNjYW4sCitzdGF0aWMgaW5saW5lIHZvaWQgaXB3X3NldF9zY2FuX3R5cGUoc3RydWN0IGlwd19zY2FuX3JlcXVlc3RfZXh0ICpzY2FuLAogCQkJCSAgICAgdTggaW5kZXgsIHU4IHNjYW5fdHlwZSkKIHsKIAlpZiAoaW5kZXggJSAyKQpAQCAtMTEyMCw3ICsxMTI3LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKIAogCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAKIAkvKiBiYXNpYyBwY2ktbmV0d29yayBkcml2ZXIgc3R1ZmYgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKQEAgLTE0MDYsMTMgKzE0MTMsNiBAQAogKiBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKICovCiAKLS8qIERpbm8gY29udHJvbCByZWdpc3RlcnMgYml0cyAqLwotCi0jZGVmaW5lIERJTk9fRU5BQkxFX1NZU1RFTSAweDgwCi0jZGVmaW5lIERJTk9fRU5BQkxFX0NTICAgICAweDQwCi0jZGVmaW5lIERJTk9fUlhGSUZPX0RBVEEgICAweDAxCi0jZGVmaW5lIERJTk9fQ09OVFJPTF9SRUcgICAweDAwMjAwMDAwCi0KICNkZWZpbmUgSVBXX0lOVEFfUlcgICAgICAgMHgwMDAwMDAwOAogI2RlZmluZSBJUFdfSU5UQV9NQVNLX1IgICAweDAwMDAwMDBDCiAjZGVmaW5lIElQV19JTkRJUkVDVF9BRERSIDB4MDAwMDAwMTAKQEAgLTE0NTksNiArMTQ1OSwxMSBAQAogI2RlZmluZSBJUFdfRE9NQUlOXzBfRU5EIDB4MTAwMAogI2RlZmluZSBDTFhfTUVNX0JBUl9TSVpFIDB4MTAwMAogCisvKiBEaW5vL2Jhc2ViYW5kIGNvbnRyb2wgcmVnaXN0ZXJzIGJpdHMgKi8KKworI2RlZmluZSBESU5PX0VOQUJMRV9TWVNURU0gMHg4MAkvKiAxID0gYmFzZWJhbmQgcHJvY2Vzc29yIG9uLCAwID0gcmVzZXQgKi8KKyNkZWZpbmUgRElOT19FTkFCTEVfQ1MgICAgIDB4NDAJLyogMSA9IGVuYWJsZSB1Y29kZSBsb2FkICovCisjZGVmaW5lIERJTk9fUlhGSUZPX0RBVEEgICAweDAxCS8qIDEgPSBkYXRhIGF2YWlsYWJsZSAqLwogI2RlZmluZSBJUFdfQkFTRUJBTkRfQ09OVFJPTF9TVEFUVVMJMFgwMDIwMDAwMAogI2RlZmluZSBJUFdfQkFTRUJBTkRfVFhfRklGT19XUklURQkwWDAwMjAwMDA0CiAjZGVmaW5lIElQV19CQVNFQkFORF9SWF9GSUZPX1JFQUQJMFgwMDIwMDAwNApAQCAtMTU2NywxMyArMTU3MiwxOCBAQAogI2RlZmluZSBFRVBST01fQlNTX0NIQU5ORUxTX0JHICAoR0VUX0VFUFJPTV9BRERSKDB4MmMsTFNCKSkJLyogMiBieXRlcyAgKi8KICNkZWZpbmUgRUVQUk9NX0hXX1ZFUlNJT04gICAgICAgKEdFVF9FRVBST01fQUREUigweDcyLExTQikpCS8qIDIgYnl0ZXMgICovCiAKLS8qIE5JQyB0eXBlIGFzIGZvdW5kIGluIHRoZSBvbmUgYnl0ZSBFRVBST01fTklDX1RZUEUgIG9mZnNldCovCisvKiBOSUMgdHlwZSBhcyBmb3VuZCBpbiB0aGUgb25lIGJ5dGUgRUVQUk9NX05JQ19UWVBFIG9mZnNldCAqLwogI2RlZmluZSBFRVBST01fTklDX1RZUEVfMCAwCiAjZGVmaW5lIEVFUFJPTV9OSUNfVFlQRV8xIDEKICNkZWZpbmUgRUVQUk9NX05JQ19UWVBFXzIgMgogI2RlZmluZSBFRVBST01fTklDX1RZUEVfMyAzCiAjZGVmaW5lIEVFUFJPTV9OSUNfVFlQRV80IDQKIAorLyogQmx1ZXRvb3RoIENvZXhpc3RlbmNlIGNhcGFiaWxpdGllcyBhcyBmb3VuZCBpbiBFRVBST01fU0tVX0NBUEFCSUxJVFkgKi8KKyNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfQlRfQ0hBTk5FTF9TSUcgIDB4MDEJLyogd2UgY2FuIHRlbGwgQlQgb3VyIGNoYW5uZWwgIyAqLworI2RlZmluZSBFRVBST01fU0tVX0NBUF9CVF9QUklPUklUWSAgICAgMHgwMgkvKiBCVCBjYW4gdGFrZSBwcmlvcml0eSBvdmVyIHVzICovCisjZGVmaW5lIEVFUFJPTV9TS1VfQ0FQX0JUX09PQiAgICAgICAgICAweDA0CS8qIHdlIGNhbiBzaWduYWwgQlQgb3V0LW9mLWJhbmQgKi8KKwogI2RlZmluZSBGV19NRU1fUkVHX0xPV0VSX0JPVU5EICAgICAgICAgIDB4MDAzMDAwMDAKICNkZWZpbmUgRldfTUVNX1JFR19FRVBST01fQUNDRVNTICAgICAgICAoRldfTUVNX1JFR19MT1dFUl9CT1VORCArIDB4NDApCiAjZGVmaW5lIElQV19FVkVOVF9SRUcgICAgICAgICAgICAgICAgICAgKEZXX01FTV9SRUdfTE9XRVJfQk9VTkQgKyAweDA0KQpAQCAtMTY1OCw5ICsxNjY4LDEwIEBACiAJSVBXX0ZXX0VSUk9SX0ZBVEFMX0VSUk9SCiB9OwogCi0jZGVmaW5lIEFVVEhfT1BFTiAgICAgICAwCi0jZGVmaW5lIEFVVEhfU0hBUkVEX0tFWSAxCi0jZGVmaW5lIEFVVEhfSUdOT1JFICAgICAzCisjZGVmaW5lIEFVVEhfT1BFTgkwCisjZGVmaW5lIEFVVEhfU0hBUkVEX0tFWQkxCisjZGVmaW5lIEFVVEhfTEVBUAkyCisjZGVmaW5lIEFVVEhfSUdOT1JFCTMKIAogI2RlZmluZSBIQ19BU1NPQ0lBVEUgICAgICAwCiAjZGVmaW5lIEhDX1JFQVNTT0NJQVRFICAgIDEKQEAgLTE4NjAsNyArMTg3MSw3IEBACiAJdTggY21kOwogCXU4IGxlbjsKIAl1MTYgcmVzZXJ2ZWQ7Ci0JdTMyIHBhcmFtW1RGRF9DTURfSU1NRURJQVRFX1BBWUxPQURfTEVOR1RIXTsKKwl1MzIgKnBhcmFtOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpcHdfY21kX2xvZyB7CkBAIC0xODY5LDIxICsxODgwLDI0IEBACiAJc3RydWN0IGhvc3RfY21kIGNtZDsKIH07CiAKLSNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX01JTiAgICAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX0RFRkVSICAgICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX0tJTEwgICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX1dNRV9PVkVSX0JUICAgICAgICAgIDB4MDgKLSNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX09PQiAgICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX01BWCAgICAgICAgICAgICAgICAgIDB4RkYKLSNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX0RFRiAgICAgICAgICAgICAgICAgIDB4ODAJLyogcmVhZCBCdCBmcm9tIEVFUFJPTSAqLworLyogU3lzQ29uZmlnIGNvbW1hbmQgcGFyYW1ldGVycyAuLi4gKi8KKy8qIGJ0X2NvZXhpc3RlbmNlIHBhcmFtICovCisjZGVmaW5lIENGR19CVF9DT0VYSVNURU5DRV9TSUdOQUxfQ0hOTCAgMHgwMQkvKiB0ZWxsIEJUIG91ciBjaG5sICMgKi8KKyNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX0RFRkVSICAgICAgICAweDAyCS8qIGRlZmVyIG91ciBUeCBpZiBCVCB0cmFmZmljICovCisjZGVmaW5lIENGR19CVF9DT0VYSVNURU5DRV9LSUxMICAgICAgICAgMHgwNAkvKiBraWxsIG91ciBUeCBpZiBCVCB0cmFmZmljICovCisjZGVmaW5lIENGR19CVF9DT0VYSVNURU5DRV9XTUVfT1ZFUl9CVCAgMHgwOAkvKiBtdWx0aW1lZGlhIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgQ0ZHX0JUX0NPRVhJU1RFTkNFX09PQiAgICAgICAgICAweDEwCS8qIHNpZ25hbCBCVCB2aWEgb3V0LW9mLWJhbmQgKi8KIAotI2RlZmluZSBDRkdfQ1RTX1RPX0lUU0VMRl9FTkFCTEVEX01JTgkweDAKLSNkZWZpbmUgQ0ZHX0NUU19UT19JVFNFTEZfRU5BQkxFRF9NQVgJMHgxCisvKiBjbGVhci10by1zZW5kIHRvIHNlbGYgcGFyYW0gKi8KKyNkZWZpbmUgQ0ZHX0NUU19UT19JVFNFTEZfRU5BQkxFRF9NSU4JMHgwMAorI2RlZmluZSBDRkdfQ1RTX1RPX0lUU0VMRl9FTkFCTEVEX01BWAkweDAxCiAjZGVmaW5lIENGR19DVFNfVE9fSVRTRUxGX0VOQUJMRURfREVGCUNGR19DVFNfVE9fSVRTRUxGX0VOQUJMRURfTUlOCiAKLSNkZWZpbmUgQ0ZHX1NZU19BTlRFTk5BX0JPVEggICAgICAgICAgICAgICAgICAgICAgMHgwMDAKLSNkZWZpbmUgQ0ZHX1NZU19BTlRFTk5BX0EgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEKLSNkZWZpbmUgQ0ZHX1NZU19BTlRFTk5BX0IgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMKKy8qIEFudGVubmEgZGl2ZXJzaXR5IHBhcmFtIChoL3cgY2FuIHNlbGVjdCBiZXN0IGFudGVubmEsIGJhc2VkIG9uIHNpZ25hbCkgKi8KKyNkZWZpbmUgQ0ZHX1NZU19BTlRFTk5BX0JPVEggICAgICAgICAgICAweDAwCS8qIE5JQyBzZWxlY3RzIGJlc3QgYW50ZW5uYSAqLworI2RlZmluZSBDRkdfU1lTX0FOVEVOTkFfQSAgICAgICAgICAgICAgIDB4MDEJLyogZm9yY2UgYW50ZW5uYSBBICovCisjZGVmaW5lIENGR19TWVNfQU5URU5OQV9CICAgICAgICAgICAgICAgMHgwMwkvKiBmb3JjZSBhbnRlbm5hIEIgKi8KKyNkZWZpbmUgQ0ZHX1NZU19BTlRFTk5BX1NMT1dfRElWICAgICAgICAweDAyCS8qIGNvbnNpZGVyIGJhY2tncm91bmQgbm9pc2UgKi8KIAogLyoKICAqIFRoZSBkZWZpbml0aW9ucyBiZWxvdyB3ZXJlIGxpZnRlZCBvZmYgdGhlIGlwdzIxMDAgZHJpdmVyLCB3aGljaCBvbmx5CkBAIC0xODk5LDI3ICsxOTEzLDQgQEAKIAogI2RlZmluZSBJUFdfTUFYX0NPTkZJR19SRVRSSUVTIDEwCiAKLXN0YXRpYyBpbmxpbmUgdTMyIGZyYW1lX2hkcl9sZW4oc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKLXsKLQl1MzIgcmV0dmFsOwotCXUxNiBmYzsKLQotCXJldHZhbCA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0KLQkvKgotCSAqIEZ1bmN0aW9uICAgICBUb0RTICAgIEZyb21EUwotCSAqIElCU1MgICAgICAgICAwICAgICAgIDAKLQkgKiBUbyBBUCAgICAgICAgMSAgICAgICAwCi0JICogRnJvbSBBUCAgICAgIDAgICAgICAgMQotCSAqIFdEUyAoYnJpZGdlKSAxICAgICAgIDEKLQkgKgotCSAqIE9ubHkgV0RTIGZyYW1lcyB1c2UgQWRkcmVzczQgYW1vbmcgdGhlbS4gLS1ZWgotCSAqLwotCWlmICghKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykgfHwgIShmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykpCi0JCXJldHZhbCAtPSBFVEhfQUxFTjsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KICNlbmRpZgkJCQkvKiBfX2lwdzIyMDBfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKaW5kZXggYmY2MjcxZS4uNzVjZTZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwpAQCAtNTUsMTAgKzU1LDggQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2lmZGVmIENPTkZJR19ORVRfUkFESU8KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L29pZF9tZ3QuYwppbmRleCBlZWEyZjA0Li5lYmIyMzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L29pZF9tZ3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L29pZF9tZ3QuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJY2FzZSBPSURfVFlQRV9BVFRBQ0g6ewogCQkJc3RydWN0IG9ial9hdHRhY2htZW50ICphdHRhY2ggPSBkYXRhOwogCQkJYXR0YWNoLT5pZCA9IGxlMTZfdG9fY3B1KGF0dGFjaC0+aWQpOwotCQkJYXR0YWNoLT5zaXplID0gbGUxNl90b19jcHUoYXR0YWNoLT5zaXplKTs7IAorCQkJYXR0YWNoLT5zaXplID0gbGUxNl90b19jcHUoYXR0YWNoLT5zaXplKTsKIAkJCWJyZWFrOwogCX0KIAljYXNlIE9JRF9UWVBFX1NTSUQ6CkBAIC00MDEsNyArNDAxLDcgQEAKIAljYXNlIE9JRF9UWVBFX0FUVEFDSDp7CiAJCQlzdHJ1Y3Qgb2JqX2F0dGFjaG1lbnQgKmF0dGFjaCA9IGRhdGE7CiAJCQlhdHRhY2gtPmlkID0gY3B1X3RvX2xlMTYoYXR0YWNoLT5pZCk7Ci0JCQlhdHRhY2gtPnNpemUgPSBjcHVfdG9fbGUxNihhdHRhY2gtPnNpemUpOzsgCisJCQlhdHRhY2gtPnNpemUgPSBjcHVfdG9fbGUxNihhdHRhY2gtPnNpemUpOwogCQkJYnJlYWs7CiAJfQogCWNhc2UgT0lEX1RZUEVfU1NJRDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IGZlZTRiZTEuLjVmYTZmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJX19sZTE2IF9sZW47CQkvKiBsZW5ndGggb2YgSUQgYW5kIGRhdGEsIGluIHdvcmRzICovCiAJX19sZTE2IF9pZDsJCS8qIHJlY29yZCBJRCAqLwogCWNoYXIgZGF0YVswXTsJCS8qIHBsdWcgZGF0YSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIAogLyogRnVuY3Rpb25zIGZvciBhY2Nlc3MgdG8gbGl0dGxlLWVuZGlhbiBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCAxOGJhYWNmLi4xOGE0NDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotCisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogVXNlZnVsIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCQkJCQkqLwpAQCAtMTU2OSw3ICsxNTY5LDcgQEAKIAlkZWxfdGltZXIoJnN0cmlwX2luZm8tPmlkbGVfdGltZXIpOwogCiAKLQlpZiAoamlmZmllcyAtIHN0cmlwX2luZm8tPnBwc190aW1lciA+IEhaKSB7CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RyaXBfaW5mby0+cHBzX3RpbWVyICsgSFopKSB7CiAJCXVuc2lnbmVkIGxvbmcgdCA9IGppZmZpZXMgLSBzdHJpcF9pbmZvLT5wcHNfdGltZXI7CiAJCXVuc2lnbmVkIGxvbmcgcnhfcHBzX2NvdW50ID0gKHN0cmlwX2luZm8tPnJ4X3Bwc19jb3VudCAqIEhaICogOCArIHQgLyAyKSAvIHQ7CiAJCXVuc2lnbmVkIGxvbmcgdHhfcHBzX2NvdW50ID0gKHN0cmlwX2luZm8tPnR4X3Bwc19jb3VudCAqIEhaICogOCArIHQgLyAyKSAvIHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCmluZGV4IDE2NmUyOGIuLjVjYjBiYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCkBAIC05OCwxMSArOTgsNyBAQAogICogY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBoYXJkd2FyZS4gIEFwcGxpY2F0aW9ucyBzdWNoIGFzIG1vYmlsZSBJUCBtYXkKICAqIHRha2UgYWR2YW50YWdlIG9mIGl0LgogICoKLSAqIFlvdSB3aWxsIG5lZWQgdG8gZW5hYmxlIHRoZSBDT05GSUdfTkVUX1JBRElPIGRlZmluZSBpbiB0aGUga2VybmVsCi0gKiBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSB0aGUgd2lyZWxlc3MgZXh0ZW5zaW9ucyAodGhpcyBpcyB0aGUgb25lCi0gKiBnaXZpbmcgYWNjZXNzIHRvIHRoZSByYWRpbyBuZXR3b3JrIGRldmljZSBjaG9pY2UpLgotICoKLSAqIEl0IG1pZ2h0IGFsc28gYmUgYSBnb29kIGlkZWEgYXMgd2VsbCB0byBmZXRjaCB0aGUgd2lyZWxlc3MgdG9vbHMgdG8KKyAqIEl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIGFzIHdlbGwgdG8gZmV0Y2ggdGhlIHdpcmVsZXNzIHRvb2xzIHRvCiAgKiBjb25maWd1cmUgdGhlIGRldmljZSBhbmQgcGxheSBhIGJpdC4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCmluZGV4IGYyZDU5NzUuLjQ1MWY2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCkBAIC05OSwxMSArOTksNyBAQAogICogY2FyYWN0ZXJpc3RpY3Mgb2YgdGhlIGhhcmR3YXJlIGluIGEgc3RhbmRhcmQgd2F5IGFuZCBzdXBwb3J0IGZvcgogICogYXBwbGljYXRpb25zIGZvciB0YWtpbmcgYWR2YW50YWdlIG9mIGl0IChsaWtlIE1vYmlsZSBJUCkuCiAgKgotICogWW91IHdpbGwgbmVlZCB0byBlbmFibGUgdGhlIENPTkZJR19ORVRfUkFESU8gZGVmaW5lIGluIHRoZSBrZXJuZWwKLSAqIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHRoZSB3aXJlbGVzcyBleHRlbnNpb25zICh0aGlzIGlzIHRoZSBvbmUKLSAqIGdpdmluZyBhY2Nlc3MgdG8gdGhlIHJhZGlvIG5ldHdvcmsgZGV2aWNlIGNob2ljZSkuCi0gKgotICogSXQgbWlnaHQgYWxzbyBiZSBhIGdvb2QgaWRlYSBhcyB3ZWxsIHRvIGZldGNoIHRoZSB3aXJlbGVzcyB0b29scyB0bworICogSXQgbWlnaHQgYmUgYSBnb29kIGlkZWEgYXMgd2VsbCB0byBmZXRjaCB0aGUgd2lyZWxlc3MgdG9vbHMgdG8KICAqIGNvbmZpZ3VyZSB0aGUgZGV2aWNlIGFuZCBwbGF5IGEgYml0LgogICovCiAKQEAgLTQ0MCwxMSArNDM2LDggQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLQotI2lmZGVmIENPTkZJR19ORVRfUkFESU8KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgkJLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAqLwogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CQkvKiBOZXcgZHJpdmVyIEFQSSAqLwotI2VuZGlmCiAKIC8qIFBjbWNpYSBoZWFkZXJzIHRoYXQgd2UgbmVlZCAqLwogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCAxYzI1MDY1Li43NWQ1NmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtNjksOCArNjksOCBAQAogc3RhdGljIGludCBkbWFfY3RybCA9IDB4MDBDQUMyNzc7CQkJLyogT3ZlcnJpZGUgd2hlbiBsb2FkaW5nIG1vZHVsZSEgKi8KIHN0YXRpYyBpbnQgZmlmb19jZmcgPSAweDAwMjg7CiAjZWxzZQotc3RhdGljIGludCBkbWFfY3RybCA9IDB4MDA0QTAyNjM7IAkJCS8qIENvbnN0cmFpbmVkIGJ5IGVycmF0YSAqLwotc3RhdGljIGludCBmaWZvX2NmZyA9IDB4MDAyMDsJCQkJLyogQnlwYXNzIGV4dGVybmFsIFR4IEZJRk8uICovCitzdGF0aWMgY29uc3QgaW50IGRtYV9jdHJsID0gMHgwMDRBMDI2MzsgCQkJLyogQ29uc3RyYWluZWQgYnkgZXJyYXRhICovCitzdGF0aWMgY29uc3QgaW50IGZpZm9fY2ZnID0gMHgwMDIwOwkJCQkvKiBCeXBhc3MgZXh0ZXJuYWwgVHggRklGTy4gKi8KICNlbmRpZgogCiAvKiBTZXQgdGhlIGNvcHkgYnJlYWtwb2ludCBmb3IgdGhlIGNvcHktb25seS10aW55LWZyYW1lcyBzY2hlbWUuCkBAIC0yNjYsNyArMjY2LDcgQEAKICAgICAgICAgaW50IGRydl9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERyaXZlciB1c2UsIGludGVuZGVkIGFzIGNhcGFiaWxpdHkgZmxhZ3MuICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9pZF9pbmZvIHBjaV9pZF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2lkX2luZm8gcGNpX2lkX3RibFtdID0gewogCXsiWWVsbG93ZmluIEctTklDIEdpZ2FiaXQgRXRoZXJuZXQiLCB7IDB4MDcwMjEwMDAsIDB4ZmZmZmZmZmZ9LAogCSBQQ0lfSU9UWVBFLCBZRUxMT1dGSU5fU0laRSwKIAkgRnVsbFR4U3RhdHVzIHwgSXNHaWdhYml0IHwgSGFzTXVsdGljYXN0QnVnIHwgSGFzTUFDQWRkckJ1ZyB8IERvbnRVc2VFZXByb219LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvem9ycm84MzkwLmMgYi9kcml2ZXJzL25ldC96b3JybzgzOTAuYwppbmRleCA4YWI2ZTEyLi44MDM3ZTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96b3JybzgzOTAuYworKysgYi9kcml2ZXJzL25ldC96b3JybzgzOTAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvem9ycm8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTUxLDcgKzE1Miw3IEBACiAJel93cml0ZWIoel9yZWFkYihpb2FkZHIgKyBORV9SRVNFVCksIGlvYWRkciArIE5FX1JFU0VUKTsKIAogCXdoaWxlICgoel9yZWFkYihpb2FkZHIgKyBORV9FTjBfSVNSKSAmIEVOSVNSX1JFU0VUKSA9PSAwKQotCSAgICBpZiAoamlmZmllcyAtIHJlc2V0X3N0YXJ0X3RpbWUgPiAyKkhaLzEwMCkgeworCSAgICBpZiAodGltZV9hZnRlcihqaWZmaWVzLCByZXNldF9zdGFydF90aW1lICsgMipIWi8xMDApKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiBub3QgZm91bmQgKG5vIHJlc2V0IGFjaykuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJICAgIH0KQEAgLTI3Myw3ICsyNzQsNyBAQAogCiAgICAgLyogVGhpcyBjaGVjayBfc2hvdWxkX25vdF8gYmUgbmVjZXNzYXJ5LCBvbWl0IGV2ZW50dWFsbHkuICovCiAgICAgd2hpbGUgKCh6X3JlYWRiKE5FX0JBU0UrTkVfRU4wX0lTUikgJiBFTklTUl9SRVNFVCkgPT0gMCkKLQlpZiAoamlmZmllcyAtIHJlc2V0X3N0YXJ0X3RpbWUgPiAyKkhaLzEwMCkgeworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHJlc2V0X3N0YXJ0X3RpbWUgKyAyKkhaLzEwMCkpIHsKIAkgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG5lX3Jlc2V0XzgzOTAoKSBkaWQgbm90IGNvbXBsZXRlLlxuIiwKIAkJICAgZGV2LT5uYW1lKTsKIAkgICAgYnJlYWs7CkBAIC00MDAsNyArNDAxLDcgQEAKICAgICBkbWFfc3RhcnQgPSBqaWZmaWVzOwogCiAgICAgd2hpbGUgKCh6X3JlYWRiKE5FX0JBU0UgKyBORV9FTjBfSVNSKSAmIEVOSVNSX1JEQykgPT0gMCkKLQlpZiAoamlmZmllcyAtIGRtYV9zdGFydCA+IDIqSFovMTAwKSB7CQkvKiAyMG1zICovCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZG1hX3N0YXJ0ICsgMipIWi8xMDApKSB7CS8qIDIwbXMgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dCB3YWl0aW5nIGZvciBUeCBSREMuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJem9ycm84MzkwX3Jlc2V0XzgzOTAoZGV2KTsKQEAgLTQyNSw3ICs0MjYsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB6b3JybzgzOTBfaW5pdF9tb2R1bGUodm9pZCkKIHsKLSAgICByZXR1cm4gem9ycm9fbW9kdWxlX2luaXQoJnpvcnJvODM5MF9kcml2ZXIpOworICAgIHJldHVybiB6b3Jyb19yZWdpc3Rlcl9kcml2ZXIoJnpvcnJvODM5MF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgem9ycm84MzkwX2NsZWFudXBfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCmluZGV4IDc4MTkzZTQuLjMzMGQzODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jCkBAIC0zOCw5ICszOCw4IEBACiB7CiAJaW50IGk7CiAgCi0JZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJZm9yX2VhY2hfb25saW5lX2NwdShpKQogCQl2ZnJlZShjcHVfYnVmZmVyW2ldLmJ1ZmZlcik7Ci0JfQogfQogCiBpbnQgYWxsb2NfY3B1X2J1ZmZlcnModm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3NiYV9pb21tdS5jIGIvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMKaW5kZXggNWQ0N2M1OS4uMDgyMTc0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMKKysrIGIvZHJpdmVycy9wYXJpc2Mvc2JhX2lvbW11LmMKQEAgLTE3MjQsOSArMTcyNCw3IEBACiAJCXNiYV9kZXYtPmNoaXBfcmVzdi5zdGFydCA9IFBDSV9GX0VYVEVORCB8IDB4ZmVmMDAwMDBVTDsKIAkJc2JhX2Rldi0+Y2hpcF9yZXN2LmVuZCAgID0gUENJX0ZfRVhURU5EIHwgKDB4ZmYwMDAwMDBVTCAtIDEpIDsKIAkJZXJyID0gcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICYoc2JhX2Rldi0+Y2hpcF9yZXN2KSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlCVUcoKTsKLQkJfQorCQlCVUdfT04oZXJyIDwgMCk7CiAKIAl9IGVsc2UgaWYgKElTX1BMVVRPKHNiYV9kZXYtPmlvZGMpKSB7CiAJCWludCBlcnI7CkBAIC0yMTg1LDggKzIxODMsNyBAQAogCWludCBpOwogCWludCByb3BlID0gKHBjaV9oYmEtPmh3X3BhdGggJiAoUk9QRVNfUEVSX0lPQy0xKSk7ICAvKiByb3BlICMgKi8KIAotCWlmICgodCE9SFBIV19JT0EpICYmICh0IT1IUEhXX0JDUE9SVCkpCi0JCUJVRygpOworCUJVR19PTigodCE9SFBIV19JT0EpICYmICh0IT1IUEhXX0JDUE9SVCkpOwogCiAJci0+c3RhcnQgPSByLT5lbmQgPSAwOwogCkBAIC0yMjI4LDggKzIyMjUsNyBAQAogCWludCBiYXNlLCBzaXplOwogCWludCByb3BlID0gKHBjaV9oYmEtPmh3X3BhdGggJiAoUk9QRVNfUEVSX0lPQy0xKSk7ICAvKiByb3BlICMgKi8KIAotCWlmICgodCE9SFBIV19JT0EpICYmICh0IT1IUEhXX0JDUE9SVCkpCi0JCUJVRygpOworCUJVR19PTigodCE9SFBIV19JT0EpICYmICh0IT1IUEhXX0JDUE9SVCkpOwogCiAJci0+c3RhcnQgPSByLT5lbmQgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKaW5kZXggYmE5NzFmZS4uYWQ2ZDNiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYwpAQCAtMTU3LDggKzE1Nyw4IEBACiAgICAgICAgIGlmIChzaW8tPnN1Y2t5aW9faXJxX2VuYWJsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAJCXJldHVybjsKIAotCWlmICghcGRldikgQlVHKCk7Ci0JaWYgKCFzaW8tPnVzYl9wZGV2KSBCVUcoKTsKKwlCVUdfT04oIXBkZXYpOworCUJVR19PTighc2lvLT51c2JfcGRldik7CiAKIAkvKiB1c2UgdGhlIElSUSBpb3NhcGljIGZvdW5kIGZvciBVU0IgSU5UIEQuLi4gKi8KIAlwZGV2LT5pcnEgPSBzaW8tPnVzYl9wZGV2LT5pcnE7CkBAIC00NzQsOCArNDc0LDcgQEAKIAkJZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBkZXYtPnN1YnN5c3RlbV9kZXZpY2UsCiAJCWRldi0+Y2xhc3MpOwogCi0JaWYgKCFzaW8tPnN1Y2t5aW9faXJxX2VuYWJsZWQpCi0JCUJVRygpOyAvKiBFbmFibGVkIGJ5IFBDSV9GSVhVUF9GSU5BTCAqLworCUJVR19PTighc2lvLT5zdWNreWlvX2lycV9lbmFibGVkKTsJLyogRW5hYmxlZCBieSBQQ0lfRklYVVBfRklOQUwgKi8KIAogCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX0xJTykgewkvKiBGdW5jdGlvbiAxICovCiAJCXN1cGVyaW9fcGFycG9ydF9pbml0KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCmluZGV4IDE2NmRlMzUuLmQxMjE2NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCkBAIC0zMSwxNCArMzEsOCBAQAogCW5ldG1vc185eHg1X2NvbWJvLAogCW5ldG1vc185ODU1LAogCWF2bGFiXzFzMXAsCi0JYXZsYWJfMXMxcF82NTAsCi0JYXZsYWJfMXMxcF84NTAsCiAJYXZsYWJfMXMycCwKLQlhdmxhYl8xczJwXzY1MCwKLQlhdmxhYl8xczJwXzg1MCwKIAlhdmxhYl8yczFwLAotCWF2bGFiXzJzMXBfNjUwLAotCWF2bGFiXzJzMXBfODUwLAogCXNpaWdfMXMxcF8xMHgsCiAJc2lpZ18yczFwXzEweCwKIAlzaWlnXzJwMXNfMjB4LApAQCAtODUsMTQgKzc5LDggQEAKIAkvKiBuZXRtb3NfOXh4NV9jb21ibyAqLwkJeyAxLCB7IHsgMiwgLTEgfSwgfSwgbmV0bW9zX3BhcmFsbGVsX2luaXQgfSwKIAkvKiBuZXRtb3NfOTg1NSAqLwkJeyAxLCB7IHsgMCwgLTEgfSwgfSwgbmV0bW9zX3BhcmFsbGVsX2luaXQgfSwKIAkvKiBhdmxhYl8xczFwICAgICAqLwkJeyAxLCB7IHsgMSwgMn0sIH0gfSwKLQkvKiBhdmxhYl8xczFwXzY1MCAqLwkJeyAxLCB7IHsgMSwgMn0sIH0gfSwKLQkvKiBhdmxhYl8xczFwXzg1MCAqLwkJeyAxLCB7IHsgMSwgMn0sIH0gfSwKIAkvKiBhdmxhYl8xczJwICAgICAqLwkJeyAyLCB7IHsgMSwgMn0sIHsgMywgNCB9LH0gfSwKLQkvKiBhdmxhYl8xczJwXzY1MCAqLwkJeyAyLCB7IHsgMSwgMn0sIHsgMywgNCB9LH0gfSwKLQkvKiBhdmxhYl8xczJwXzg1MCAqLwkJeyAyLCB7IHsgMSwgMn0sIHsgMywgNCB9LH0gfSwKIAkvKiBhdmxhYl8yczFwICAgICAqLwkJeyAxLCB7IHsgMiwgM30sIH0gfSwKLQkvKiBhdmxhYl8yczFwXzY1MCAqLwkJeyAxLCB7IHsgMiwgM30sIH0gfSwKLQkvKiBhdmxhYl8yczFwXzg1MCAqLwkJeyAxLCB7IHsgMiwgM30sIH0gfSwKIAkvKiBzaWlnXzFzMXBfMTB4ICovCQl7IDEsIHsgeyAzLCA0IH0sIH0gfSwKIAkvKiBzaWlnXzJzMXBfMTB4ICovCQl7IDEsIHsgeyA0LCA1IH0sIH0gfSwKIAkvKiBzaWlnXzJwMXNfMjB4ICovCQl7IDIsIHsgeyAxLCAyIH0sIHsgMywgNCB9LCB9IH0sCkBAIC0xMTksMTUgKzEwNywyNCBAQAogCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NTUsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBuZXRtb3NfOTg1NSB9LAogCS8qIFBDSV9WRU5ET1JfSURfQVZMQUIvSW50ZWsyMSBoYXMgYW5vdGhlciBidW5jaCBvZiBjYXJkcyAuLi4qLwotCXsgMHgxNGRiLCAweDIxMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGF2bGFiXzFzMXB9LAotCXsgMHgxNGRiLCAweDIxMTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGF2bGFiXzFzMXBfNjUwfSwKLQl7IDB4MTRkYiwgMHgyMTEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBhdmxhYl8xczFwXzg1MH0sCi0JeyAweDE0ZGIsIDB4MjE0MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgYXZsYWJfMXMycH0sCi0JeyAweDE0ZGIsIDB4MjE0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgYXZsYWJfMXMycF82NTB9LAotCXsgMHgxNGRiLCAweDIxNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGF2bGFiXzFzMnBfODUwfSwKLQl7IDB4MTRkYiwgMHgyMTYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBhdmxhYl8yczFwfSwKLQl7IDB4MTRkYiwgMHgyMTYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBhdmxhYl8yczFwXzY1MH0sCi0JeyAweDE0ZGIsIDB4MjE2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgYXZsYWJfMnMxcF84NTB9LAorCXsgUENJX1ZFTkRPUl9JRF9BRkFWTEFCLCAweDIxMTAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBhdmxhYl8xczFwIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FGQVZMQUIsIDB4MjExMSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGF2bGFiXzFzMXAgfSwKKwl7IFBDSV9WRU5ET1JfSURfQUZBVkxBQiwgMHgyMTEyLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgYXZsYWJfMXMxcCB9LAorCXsgUENJX1ZFTkRPUl9JRF9BRkFWTEFCLCAweDIxNDAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBhdmxhYl8xczJwIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FGQVZMQUIsIDB4MjE0MSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGF2bGFiXzFzMnAgfSwKKwl7IFBDSV9WRU5ET1JfSURfQUZBVkxBQiwgMHgyMTQyLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgYXZsYWJfMXMycCB9LAorCXsgUENJX1ZFTkRPUl9JRF9BRkFWTEFCLCAweDIxNjAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBhdmxhYl8yczFwIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FGQVZMQUIsIDB4MjE2MSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGF2bGFiXzJzMXAgfSwKKwl7IFBDSV9WRU5ET1JfSURfQUZBVkxBQiwgMHgyMTYyLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgYXZsYWJfMnMxcCB9LAogCXsgUENJX1ZFTkRPUl9JRF9TSUlHLCBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfNTUwLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lpZ18xczFwXzEweCB9LAogCXsgUENJX1ZFTkRPUl9JRF9TSUlHLCBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfNjUwLApAQCAtMjAxLDU0ICsxOTgsMTggQEAKIAkJLmJhc2VfYmF1ZAk9IDExNTIwMCwKIAkJLnVhcnRfb2Zmc2V0CT0gOCwKIAl9LAotCVthdmxhYl8xczFwXzY1MF0gPSB7IC8qIG50ICovCi0JCS5mbGFncwkJPSBGTF9CQVNFMCB8IEZMX0JBU0VfQkFSUywKLQkJLm51bV9wb3J0cwk9IDEsCi0JCS5iYXNlX2JhdWQJPSAxMTUyMDAsCi0JCS51YXJ0X29mZnNldAk9IDgsCi0JfSwKLQlbYXZsYWJfMXMxcF84NTBdID0geyAvKiBudCAqLwotCQkuZmxhZ3MJCT0gRkxfQkFTRTAgfCBGTF9CQVNFX0JBUlMsCi0JCS5udW1fcG9ydHMJPSAxLAotCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAotCQkudWFydF9vZmZzZXQJPSA4LAotCX0sCiAJW2F2bGFiXzFzMnBdID0geyAvKiBuL3QgKi8KIAkJLmZsYWdzCQk9IEZMX0JBU0UwIHwgRkxfQkFTRV9CQVJTLAogCQkubnVtX3BvcnRzCT0gMSwKIAkJLmJhc2VfYmF1ZAk9IDExNTIwMCwKIAkJLnVhcnRfb2Zmc2V0CT0gOCwKIAl9LAotCVthdmxhYl8xczJwXzY1MF0gPSB7IC8qIG50ICovCi0JCS5mbGFncwkJPSBGTF9CQVNFMCB8IEZMX0JBU0VfQkFSUywKLQkJLm51bV9wb3J0cwk9IDEsCi0JCS5iYXNlX2JhdWQJPSAxMTUyMDAsCi0JCS51YXJ0X29mZnNldAk9IDgsCi0JfSwKLQlbYXZsYWJfMXMycF84NTBdID0geyAvKiBudCAqLwotCQkuZmxhZ3MJCT0gRkxfQkFTRTAgfCBGTF9CQVNFX0JBUlMsCi0JCS5udW1fcG9ydHMJPSAxLAotCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAotCQkudWFydF9vZmZzZXQJPSA4LAotCX0sCiAJW2F2bGFiXzJzMXBdID0geyAvKiBuL3QgKi8KIAkJLmZsYWdzCQk9IEZMX0JBU0UwIHwgRkxfQkFTRV9CQVJTLAogCQkubnVtX3BvcnRzCT0gMiwKIAkJLmJhc2VfYmF1ZAk9IDExNTIwMCwKIAkJLnVhcnRfb2Zmc2V0CT0gOCwKIAl9LAotCVthdmxhYl8yczFwXzY1MF0gPSB7IC8qIG50ICovCi0JCS5mbGFncwkJPSBGTF9CQVNFMCB8IEZMX0JBU0VfQkFSUywKLQkJLm51bV9wb3J0cwk9IDIsCi0JCS5iYXNlX2JhdWQJPSAxMTUyMDAsCi0JCS51YXJ0X29mZnNldAk9IDgsCi0JfSwKLQlbYXZsYWJfMnMxcF84NTBdID0geyAvKiBudCAqLwotCQkuZmxhZ3MJCT0gRkxfQkFTRTAgfCBGTF9CQVNFX0JBUlMsCi0JCS5udW1fcG9ydHMJPSAyLAotCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAotCQkudWFydF9vZmZzZXQJPSA4LAotCX0sCiAJW3NpaWdfMXMxcF8xMHhdID0gewogCQkuZmxhZ3MJCT0gRkxfQkFTRTIsCiAJCS5udW1fcG9ydHMJPSAxLApAQCAtMzEyLDggKzI3Myw3IEBACiB7CiAJc3RydWN0IHBhcnBvcnRfcGNfcGNpICpjYXJkOwogCXN0cnVjdCBwYXJwb3J0X3NlcmlhbF9wcml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhIChkZXYpOwotCWludCBpID0gaWQtPmRyaXZlcl9kYXRhLCBuOwotCWludCBzdWNjZXNzID0gMDsKKwlpbnQgbiwgc3VjY2VzcyA9IDA7CiAKIAlwcml2LT5wYXIgPSBjYXJkc1tpZC0+ZHJpdmVyX2RhdGFdOwogCWNhcmQgPSAmcHJpdi0+cGFyOwpAQCAtMzQ0LDEwICszMDQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoaSIgYXMgYW4gb2Zmc2V0IChzZWUgU1lCQQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZi4pICovCiAJCS8qIFRPRE86IHRlc3QgaWYgc2hhcmluZyBpbnRlcnJ1cHRzIHdvcmtzICovCi0JCXByaW50ayAoS0VSTl9ERUJVRyAiUENJIHBhcmFsbGVsIHBvcnQgZGV0ZWN0ZWQ6ICUwNHg6JTA0eCwgIgotCQkJIkkvTyBhdCAlI2x4KCUjbHgpXG4iLAotCQkJcGFycG9ydF9zZXJpYWxfcGNpX3RibFtpXS52ZW5kb3IsCi0JCQlwYXJwb3J0X3NlcmlhbF9wY2lfdGJsW2ldLmRldmljZSwgaW9fbG8sIGlvX2hpKTsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICJQQ0kgcGFyYWxsZWwgcG9ydCBkZXRlY3RlZDogSS9PIGF0ICIKKwkJCSIlI2x4KCUjbHgpXG4iLCBpb19sbywgaW9faGkpOwogCQlwb3J0ID0gcGFycG9ydF9wY19wcm9iZV9wb3J0IChpb19sbywgaW9faGksIFBBUlBPUlRfSVJRX05PTkUsCiAJCQkJCSAgICAgIFBBUlBPUlRfRE1BX05PTkUsIGRldik7CiAJCWlmIChwb3J0KSB7CkBAIC0zNTksNyArMzE3LDcgQEAKIAlpZiAoY2FyZC0+cG9zdGluaXRfaG9vaykKIAkJY2FyZC0+cG9zdGluaXRfaG9vayAoZGV2LCBjYXJkLCAhc3VjY2Vzcyk7CiAKLQlyZXR1cm4gc3VjY2VzcyA/IDAgOiAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwYXJwb3J0X3NlcmlhbF9wY2lfcHJvYmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9LY29uZmlnIGIvZHJpdmVycy9wY2kvS2NvbmZpZwppbmRleCBmMTg3ZmQ4Li40ZDc2MmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL0tjb25maWcKQEAgLTExLDI1ICsxMSwxMiBAQAogCSAgIGdlbmVyYXRlIGFuIGludGVycnVwdCB1c2luZyBhbiBpbmJvdW5kIE1lbW9yeSBXcml0ZSBvbiBpdHMKIAkgICBQQ0kgYnVzIGluc3RlYWQgb2YgYXNzZXJ0aW5nIGEgZGV2aWNlIElSUSBwaW4uCiAKKwkgICBVc2Ugb2YgUENJIE1TSSBpbnRlcnJ1cHRzIGNhbiBiZSBkaXNhYmxlZCBhdCBrZXJuZWwgYm9vdCB0aW1lCisJICAgYnkgdXNpbmcgdGhlICdwY2k9bm9tc2knIG9wdGlvbi4gIFRoaXMgZGlzYWJsZXMgTVNJIGZvciB0aGUKKwkgICBlbnRpcmUgc3lzdGVtLgorCiAJICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi4KIAotY29uZmlnIFBDSV9MRUdBQ1lfUFJPQwotCWJvb2wgIkxlZ2FjeSAvcHJvYy9wY2kgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gUENJCi0JLS0taGVscC0tLQotCSAgVGhpcyBmZWF0dXJlIGVuYWJsZXMgYSBwcm9jZnMgZmlsZSAtLSAvcHJvYy9wY2kgLS0gdGhhdCBwcm92aWRlcyBhIAotCSAgc3VtbWFyeSBvZiBQQ0kgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLiAKLQotCSAgVGhpcyBmZWF0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjIuNS41MywgaW4gZmF2b3Igb2YgdXNpbmcgdGhlIAotCSAgdG9vbCBsc3BjaSg4KS4gVGhpcyBmZWF0dXJlIG1heSBiZSByZW1vdmVkIGF0IGEgZnV0dXJlIGRhdGUuIAotCi0JICBsc3BjaSBjYW4gcHJvdmlkZSB0aGUgc2FtZSBkYXRhLCBhcyB3ZWxsIGFzIG11Y2ggbW9yZS4gbHNwY2kgaXMgYSBwYXJ0IG9mCi0JICB0aGUgcGNpLXV0aWxzIHBhY2thZ2UsIHdoaWNoIHNob3VsZCBiZSBpbnN0YWxsZWQgYnkgeW91ciBkaXN0cmlidXRpb24uIAotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlcz4gZm9yIGluZm9ybWF0aW9uIG9uIHdoZXJlIHRvIGdldCB0aGUgbGF0ZXN0Ci0JICB2ZXJzaW9uLiAKLQotCSAgV2hlbiBpbiBkb3VidCwgc2F5IE4uCi0KIGNvbmZpZyBQQ0lfREVCVUcKIAlib29sICJQQ0kgRGVidWdnaW5nIgogCWRlcGVuZHMgb24gUENJICYmIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvTWFrZWZpbGUKaW5kZXggM2M3MWUzMC4uNDIxY2ZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL01ha2VmaWxlCkBAIC0yMiw2ICsyMiw5IEBACiBwY2lfaG90cGx1Zy1vYmpzCSs9CWNwY2lfaG90cGx1Z19jb3JlLm8JXAogCQkJCWNwY2lfaG90cGx1Z19wY2kubwogZW5kaWYKK2lmZGVmIENPTkZJR19BQ1BJCitwY2lfaG90cGx1Zy1vYmpzIAkrPSAJYWNwaV9wY2locC5vCitlbmRpZgogCiBjcHFwaHAtb2JqcwkJOj0JY3BxcGhwX2NvcmUubwlcCiAJCQkJY3BxcGhwX2N0cmwubwlcCkBAIC0zNyw3ICs0MCw4IEBACiAJCQkJaWJtcGhwX2hwYy5vCiAKIGFjcGlwaHAtb2JqcwkJOj0JYWNwaXBocF9jb3JlLm8JXAotCQkJCWFjcGlwaHBfZ2x1ZS5vCisJCQkJYWNwaXBocF9nbHVlLm8gIFwKKwkJCQlhY3BpcGhwX2RvY2subwogCiBycGFwaHAtb2JqcwkJOj0JcnBhcGhwX2NvcmUubwlcCiAJCQkJcnBhcGhwX3BjaS5vCVwKQEAgLTUwLDIzICs1NCw5IEBACiAJCQkJcGNpZWhwX2N0cmwubwlcCiAJCQkJcGNpZWhwX3BjaS5vCVwKIAkJCQlwY2llaHBfaHBjLm8KLWlmZGVmIENPTkZJR19BQ1BJCi0JcGNpZWhwLW9ianMgKz0gcGNpZWhwcm1fYWNwaS5vCi1lbHNlCi0JcGNpZWhwLW9ianMgKz0gcGNpZWhwcm1fbm9uYWNwaS5vCi1lbmRpZgogCiBzaHBjaHAtb2JqcwkJOj0Jc2hwY2hwX2NvcmUubwlcCiAJCQkJc2hwY2hwX2N0cmwubwlcCiAJCQkJc2hwY2hwX3BjaS5vCVwKIAkJCQlzaHBjaHBfc3lzZnMubwlcCiAJCQkJc2hwY2hwX2hwYy5vCi1pZmRlZiBDT05GSUdfQUNQSQotCXNocGNocC1vYmpzICs9IHNocGNocHJtX2FjcGkubwotZWxzZQotCWlmZGVmIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDX1BIUFJNX0xFR0FDWQotCQlzaHBjaHAtb2JqcyArPSBzaHBjaHBybV9sZWdhY3kubwotCWVsc2UKLQkJc2hwY2hwLW9ianMgKz0gc2hwY2hwcm1fbm9uYWNwaS5vCi0JZW5kaWYKLWVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlfcGNpaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YWY5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlfcGNpaHAuYwpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvbW1vbiBBQ1BJIGZ1bmN0aW9ucyBmb3IgaG90IHBsdWcgcGxhdGZvcm1zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEludGVsIENvcnBvcmF0aW9uCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKKyAqIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBTZW5kIGZlZWRiYWNrIHRvIDxrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjdHlwZXMuaD4KKyNpbmNsdWRlICJwY2lfaG90cGx1Zy5oIgorCisjZGVmaW5lCU1FVEhPRF9OQU1FX19TVU4JIl9TVU4iCisjZGVmaW5lCU1FVEhPRF9OQU1FX19IUFAJIl9IUFAiCisjZGVmaW5lCU1FVEhPRF9OQU1FX09TSFAJIk9TSFAiCisKKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX3J1bl9ocHAoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCkKK3sKKwlhY3BpX3N0YXR1cwkJc3RhdHVzOworCXU4CQkJbnVpWzRdOworCXN0cnVjdCBhY3BpX2J1ZmZlcglyZXRfYnVmID0geyAwLCBOVUxMfTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIJc3RyaW5nID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXVuaW9uIGFjcGlfb2JqZWN0CSpleHRfb2JqLCAqcGFja2FnZTsKKwlpbnQJCQlpLCBsZW4gPSAwOworCisJYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJnN0cmluZyk7CisKKwkvKiBnZXQgX2hwcCAqLworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfX0hQUCwgTlVMTCwgJnJldF9idWYpOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBBRV9CVUZGRVJfT1ZFUkZMT1c6CisJCXJldF9idWYucG9pbnRlciA9IGttYWxsb2MgKHJldF9idWYubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyZXRfYnVmLnBvaW50ZXIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6JXMgYWxsb2MgZm9yIF9IUFAgZmFpbFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIChjaGFyICopc3RyaW5nLnBvaW50ZXIpOworCQkJYWNwaV9vc19mcmVlKHN0cmluZy5wb2ludGVyKTsKKwkJCXJldHVybiBBRV9OT19NRU1PUlk7CisJCX0KKwkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBNRVRIT0RfTkFNRV9fSFBQLAorCQkJCU5VTEwsICZyZXRfYnVmKTsKKwkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlwcl9kZWJ1ZygiJXM6JXMgX0hQUCBmYWlsPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkoY2hhciAqKXN0cmluZy5wb2ludGVyLCBzdGF0dXMpOworCQkJYWNwaV9vc19mcmVlKHN0cmluZy5wb2ludGVyKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9CisKKwlleHRfb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopIHJldF9idWYucG9pbnRlcjsKKwlpZiAoZXh0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiVzIF9IUFAgb2JqIG5vdCBhIHBhY2thZ2VcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkoY2hhciAqKXN0cmluZy5wb2ludGVyKTsKKwkJc3RhdHVzID0gQUVfRVJST1I7CisJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOworCX0KKworCWxlbiA9IGV4dF9vYmotPnBhY2thZ2UuY291bnQ7CisJcGFja2FnZSA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSByZXRfYnVmLnBvaW50ZXI7CisJZm9yICggaSA9IDA7IChpIDwgbGVuKSB8fCAoaSA8IDQpOyBpKyspIHsKKwkJZXh0X29iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSAmcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1tpXTsKKwkJc3dpdGNoIChleHRfb2JqLT50eXBlKSB7CisJCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CisJCQludWlbaV0gPSAodTgpZXh0X29iai0+aW50ZWdlci52YWx1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICIlczolcyBfSFBQIG9iaiB0eXBlIGluY29ycmVjdFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIChjaGFyICopc3RyaW5nLnBvaW50ZXIpOworCQkJc3RhdHVzID0gQUVfRVJST1I7CisJCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKKwkJfQorCX0KKworCWhwcC0+Y2FjaGVfbGluZV9zaXplID0gbnVpWzBdOworCWhwcC0+bGF0ZW5jeV90aW1lciA9IG51aVsxXTsKKwlocHAtPmVuYWJsZV9zZXJyID0gbnVpWzJdOworCWhwcC0+ZW5hYmxlX3BlcnIgPSBudWlbM107CisKKwlwcl9kZWJ1ZygiICBfSFBQOiBjYWNoZV9saW5lX3NpemU9MHgleFxuIiwgaHBwLT5jYWNoZV9saW5lX3NpemUpOworCXByX2RlYnVnKCIgIF9IUFA6IGxhdGVuY3kgdGltZXIgID0weCV4XG4iLCBocHAtPmxhdGVuY3lfdGltZXIpOworCXByX2RlYnVnKCIgIF9IUFA6IGVuYWJsZSBTRVJSICAgID0weCV4XG4iLCBocHAtPmVuYWJsZV9zZXJyKTsKKwlwcl9kZWJ1ZygiICBfSFBQOiBlbmFibGUgUEVSUiAgICA9MHgleFxuIiwgaHBwLT5lbmFibGVfcGVycik7CisKK2ZyZWVfYW5kX3JldHVybjoKKwlhY3BpX29zX2ZyZWUoc3RyaW5nLnBvaW50ZXIpOworCWFjcGlfb3NfZnJlZShyZXRfYnVmLnBvaW50ZXIpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworCisvKiBhY3BpX3J1bl9vc2hwIC0gZ2V0IGNvbnRyb2wgb2YgaG90cGx1ZyBmcm9tIHRoZSBmaXJtd2FyZQorICoKKyAqIEBoYW5kbGUgLSB0aGUgaGFuZGxlIG9mIHRoZSBob3RwbHVnIGNvbnRyb2xsZXIuCisgKi8KK2FjcGlfc3RhdHVzIGFjcGlfcnVuX29zaHAoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCWFjcGlfc3RhdHVzCQlzdGF0dXM7CisJc3RydWN0IGFjcGlfYnVmZmVyCXN0cmluZyA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKKworCWFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZzdHJpbmcpOworCisJLyogcnVuIE9TSFAgKi8KKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX09TSFAsIE5VTEwsIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczolcyBPU0hQIGZhaWxzPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywKKwkJCShjaGFyICopc3RyaW5nLnBvaW50ZXIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9kZWJ1ZygiJXM6JXMgT1NIUCBwYXNzZXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJCShjaGFyICopc3RyaW5nLnBvaW50ZXIpOworCisJYWNwaV9vc19mcmVlKHN0cmluZy5wb2ludGVyKTsKKwlyZXR1cm4gc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9ydW5fb3NocCk7CisKKworCisvKiBhY3BpX2dldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZQorICoKKyAqIEBkZXYgLSB0aGUgcGNpX2RldiBvZiB0aGUgbmV3bHkgYWRkZWQgZGV2aWNlCisgKiBAaHBwIC0gYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIKKyAqLworYWNwaV9zdGF0dXMgYWNwaV9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJc3RydWN0IGhvdHBsdWdfcGFyYW1zICpocHApCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfTk9UX0ZPVU5EOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2OworCisJLyoKKwkgKiBfSFBQIHNldHRpbmdzIGFwcGx5IHRvIGFsbCBjaGlsZCBidXNlcywgdW50aWwgYW5vdGhlciBfSFBQIGlzCisJICogZW5jb3VudGVyZWQuIElmIHdlIGRvbid0IGZpbmQgYW4gX0hQUCBmb3IgdGhlIGlucHV0IHBjaSBkZXYsCisJICogbG9vayBmb3IgaXQgaW4gdGhlIHBhcmVudCBkZXZpY2Ugc2NvcGUgc2luY2UgdGhhdCB3b3VsZCBhcHBseSB0bworCSAqIHRoaXMgcGNpIGRldi4gSWYgd2UgZG9uJ3QgZmluZCBhbnkgX0hQUCwgdXNlIGhhcmRjb2RlZCBkZWZhdWx0cworCSAqLworCXdoaWxlIChwZGV2ICYmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkpIHsKKwkJYWNwaV9oYW5kbGUgaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYocGRldi0+ZGV2KSk7CisJCWlmICghaGFuZGxlKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IGFjcGlfcnVuX2hwcChoYW5kbGUsIGhwcCk7CisJCWlmICghKHBkZXYtPmJ1cy0+cGFyZW50KSkKKwkJCWJyZWFrOworCQkvKiBDaGVjayBpZiBhIHBhcmVudCBvYmplY3Qgc3VwcG9ydHMgX0hQUCAqLworCQlwZGV2ID0gcGRldi0+YnVzLT5wYXJlbnQtPnNlbGY7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhY3BpX2dldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZSk7CisKKworLyogYWNwaV9yb290X2JyaWRnZSAtIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGFjcGkgb2JqZWN0IGlzIGEgcm9vdCBicmlkZ2UKKyAqCisgKiBAaGFuZGxlIC0gdGhlIGFjcGkgb2JqZWN0IGluIHF1ZXN0aW9uLgorICovCitpbnQgYWNwaV9yb290X2JyaWRnZShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCWludCBpOworCisJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmYnVmZmVyKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJaW5mbyA9IGJ1ZmZlci5wb2ludGVyOworCQlpZiAoKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpICYmCisJCQkhc3RyY21wKFBDSV9ST09UX0hJRF9TVFJJTkcsCisJCQkJCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlKSkgeworCQkJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQ0lEKSB7CisJCQlmb3IgKGk9MDsgaSA8IGluZm8tPmNvbXBhdGliaWxpdHlfaWQuY291bnQ7IGkrKykgeworCQkJCWlmICghc3RyY21wKFBDSV9ST09UX0hJRF9TVFJJTkcsCisJCQkJCWluZm8tPmNvbXBhdGliaWxpdHlfaWQuaWRbaV0udmFsdWUpKSB7CisJCQkJCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CisJCQkJCXJldHVybiAxOworCQkJCX0KKwkJCX0KKwkJfQorCQlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfcm9vdF9icmlkZ2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHAuaAppbmRleCAyOTM2MDNlLi40NjdhYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHAuaApAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4JLyogZm9yIEtPQkpfTkFNRV9MRU4gKi8KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgInBjaV9ob3RwbHVnLmgiCiAKICNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKQkJCQkJXApAQCAtNTksMjYgKzYwLDEwIEBACiAgKiBzdHJ1Y3Qgc2xvdCAtIHNsb3QgaW5mb3JtYXRpb24gZm9yIGVhY2ggKnBoeXNpY2FsKiBzbG90CiAgKi8KIHN0cnVjdCBzbG90IHsKLQl1OCBudW1iZXI7CiAJc3RydWN0IGhvdHBsdWdfc2xvdAkqaG90cGx1Z19zbG90OwotCXN0cnVjdCBsaXN0X2hlYWQJc2xvdF9saXN0OwotCiAJc3RydWN0IGFjcGlwaHBfc2xvdAkqYWNwaV9zbG90OwogfTsKIAotLyoqCi0gKiBzdHJ1Y3QgaHBwX3BhcmFtIC0gQUNQSSAyLjAgX0hQUCBIb3QgUGx1ZyBQYXJhbWV0ZXJzCi0gKiBAY2FjaGVfbGluZV9zaXplIGluIERXT1JECi0gKiBAbGF0ZW5jeV90aW1lciBpbiBQQ0kgY2xvY2sKLSAqIEBlbmFibGVfU0VSUiAwIG9yIDEKLSAqIEBlbmFibGVfUEVSUiAwIG9yIDEKLSAqLwotc3RydWN0IGhwcF9wYXJhbSB7Ci0JdTggY2FjaGVfbGluZV9zaXplOwotCXU4IGxhdGVuY3lfdGltZXI7Ci0JdTggZW5hYmxlX1NFUlI7Ci0JdTggZW5hYmxlX1BFUlI7Ci19OwogCiAKIC8qKgpAQCAtMTAyLDcgKzg3LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAogCS8qIEFDUEkgMi4wIF9IUFAgcGFyYW1ldGVycyAqLwotCXN0cnVjdCBocHBfcGFyYW0gaHBwOworCXN0cnVjdCBob3RwbHVnX3BhcmFtcyBocHA7CiAKIAlzcGlubG9ja190IHJlc19sb2NrOwogfTsKQEAgLTExOCw5ICsxMDMsOSBAQAogCXN0cnVjdCBhY3BpcGhwX2JyaWRnZSAqYnJpZGdlOwkvKiBwYXJlbnQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZ1bmNzOwkJLyogb25lIHNsb3QgbWF5IGhhdmUgZGlmZmVyZW50CiAJCQkJCSAgIG9iamVjdHMgKGkuZS4gZm9yIGVhY2ggZnVuY3Rpb24pICovCi0Jc3RydWN0IHNlbWFwaG9yZSBjcml0X3NlY3Q7CisJc3RydWN0IHNsb3QgKnNsb3Q7CisJc3RydWN0IG11dGV4IGNyaXRfc2VjdDsKIAotCXUzMgkJaWQ7CQkvKiBzbG90IGlkIChzZXJpYWwgIykgZm9yIGhvdHBsdWcgY29yZSAqLwogCXU4CQlkZXZpY2U7CQkvKiBwY2kgZGV2aWNlIyAqLwogCiAJdTMyCQlzdW47CQkvKiBBQ1BJIF9TVU4gKHNsb3QgdW5pcXVlIG51bWJlcikgKi8KQEAgLTE2MCw2ICsxNDUsMjUgQEAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIH07CiAKKworc3RydWN0IGRlcGVuZGVudF9kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBwY2lfbGlzdDsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJc3RydWN0IGFjcGlwaHBfZnVuYyAqZnVuYzsKK307CisKKworc3RydWN0IGFjcGlwaHBfZG9ja19zdGF0aW9uIHsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CisJdTMyIGxhc3RfZG9ja190aW1lOworCXUzMiBmbGFnczsKKwlzdHJ1Y3QgYWNwaXBocF9mdW5jICpkb2NrX2JyaWRnZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRlcGVuZGVudF9kZXZpY2VzOworCXN0cnVjdCBsaXN0X2hlYWQgcGNpX2RlcGVuZGVudF9kZXZpY2VzOworfTsKKworCiAvKiBQQ0kgYnVzIGJyaWRnZSBISUQgKi8KICNkZWZpbmUgQUNQSV9QQ0lfSE9TVF9ISUQJCSJQTlAwQTAzIgogCkBAIC0xOTcsMTkgKzIwMSwyNyBAQAogI2RlZmluZSBGVU5DX0hBU19QUzEJCSgweDAwMDAwMDIwKQogI2RlZmluZSBGVU5DX0hBU19QUzIJCSgweDAwMDAwMDQwKQogI2RlZmluZSBGVU5DX0hBU19QUzMJCSgweDAwMDAwMDgwKQorI2RlZmluZSBGVU5DX0hBU19EQ0sgICAgICAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgRlVOQ19JU19ERCAgICAgICAgICAgICAgKDB4MDAwMDAyMDApCisKKy8qIGRvY2sgc3RhdGlvbiBmbGFncyAqLworI2RlZmluZSBET0NLX0RPQ0tJTkcgICAgICAgICAgICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgRE9DS19IQVNfQlJJREdFICAgICAgICAgKDB4MDAwMDAwMDIpCiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIAogLyogYWNwaXBocF9jb3JlLmMgKi8KIGV4dGVybiBpbnQgYWNwaXBocF9yZWdpc3Rlcl9hdHRlbnRpb24oc3RydWN0IGFjcGlwaHBfYXR0ZW50aW9uX2luZm8qaW5mbyk7CiBleHRlcm4gaW50IGFjcGlwaHBfdW5yZWdpc3Rlcl9hdHRlbnRpb24oc3RydWN0IGFjcGlwaHBfYXR0ZW50aW9uX2luZm8gKmluZm8pOworZXh0ZXJuIGludCBhY3BpcGhwX3JlZ2lzdGVyX2hvdHBsdWdfc2xvdChzdHJ1Y3QgYWNwaXBocF9zbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIGFjcGlwaHBfdW5yZWdpc3Rlcl9ob3RwbHVnX3Nsb3Qoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCk7CiAKIC8qIGFjcGlwaHBfZ2x1ZS5jICovCiBleHRlcm4gaW50IGFjcGlwaHBfZ2x1ZV9pbml0ICh2b2lkKTsKIGV4dGVybiB2b2lkIGFjcGlwaHBfZ2x1ZV9leGl0ICh2b2lkKTsKIGV4dGVybiBpbnQgYWNwaXBocF9nZXRfbnVtX3Nsb3RzICh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgYWNwaXBocF9zbG90ICpnZXRfc2xvdF9mcm9tX2lkIChpbnQgaWQpOwogdHlwZWRlZiBpbnQgKCphY3BpcGhwX2NhbGxiYWNrKShzdHJ1Y3QgYWNwaXBocF9zbG90ICpzbG90LCB2b2lkICpkYXRhKTsKK3ZvaWQgaGFuZGxlX2hvdHBsdWdfZXZlbnRfZnVuYyhhY3BpX2hhbmRsZSwgdTMyLCB2b2lkKik7CiAKIGV4dGVybiBpbnQgYWNwaXBocF9lbmFibGVfc2xvdCAoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCk7CiBleHRlcm4gaW50IGFjcGlwaHBfZGlzYWJsZV9zbG90IChzdHJ1Y3QgYWNwaXBocF9zbG90ICpzbG90KTsKQEAgLTIxOSw2ICsyMzEsMTYgQEAKIGV4dGVybiB1OCBhY3BpcGhwX2dldF9hZGFwdGVyX3N0YXR1cyAoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCk7CiBleHRlcm4gdTMyIGFjcGlwaHBfZ2V0X2FkZHJlc3MgKHN0cnVjdCBhY3BpcGhwX3Nsb3QgKnNsb3QpOwogCisvKiBhY3BpcGhwX2RvY2suYyAqLworZXh0ZXJuIGludCBmaW5kX2RvY2tfc3RhdGlvbih2b2lkKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9kb2NrX3N0YXRpb24odm9pZCk7CitleHRlcm4gdm9pZCBhZGRfZGVwZW5kZW50X2RldmljZShzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqbmV3X2RkKTsKK2V4dGVybiB2b2lkIGFkZF9wY2lfZGVwZW5kZW50X2RldmljZShzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqbmV3X2RkKTsKK2V4dGVybiBzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqZ2V0X2RlcGVuZGVudF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKTsKK2V4dGVybiBpbnQgaXNfZGVwZW5kZW50X2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpOworZXh0ZXJuIGludCBkZXRlY3RfZGVwZW5kZW50X2RldmljZXMoYWNwaV9oYW5kbGUgKmJyaWRnZV9oYW5kbGUpOworZXh0ZXJuIHN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICphbGxvY19kZXBlbmRlbnRfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSk7CisKIC8qIHZhcmlhYmxlcyAqLwogZXh0ZXJuIGludCBhY3BpcGhwX2RlYnVnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwppbmRleCA2MGM0YzM4Li40ZjFiMGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKQEAgLTQ0LDggKzQ0LDYgQEAKICNpbmNsdWRlICJwY2lfaG90cGx1Zy5oIgogI2luY2x1ZGUgImFjcGlwaHAuaCIKIAotc3RhdGljIExJU1RfSEVBRChzbG90X2xpc3QpOwotCiAjZGVmaW5lIE1ZX05BTUUJImFjcGlwaHAiCiAKIHN0YXRpYyBpbnQgZGVidWc7CkBAIC0zNDEsNjIgKzMzOSw1MyBAQAogCWtmcmVlKHNsb3QpOwogfQogCi0vKioKLSAqIGluaXRfc2xvdHMgLSBpbml0aWFsaXplICdzdHJ1Y3Qgc2xvdCcgc3RydWN0dXJlcyBmb3IgZWFjaCBzbG90Ci0gKgotICovCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nsb3RzKHZvaWQpCisvKiBjYWxsYmFjayByb3V0aW5lIHRvIGluaXRpYWxpemUgJ3N0cnVjdCBzbG90JyBmb3IgZWFjaCBzbG90ICovCitpbnQgYWNwaXBocF9yZWdpc3Rlcl9ob3RwbHVnX3Nsb3Qoc3RydWN0IGFjcGlwaHBfc2xvdCAqYWNwaXBocF9zbG90KQogewogCXN0cnVjdCBzbG90ICpzbG90OworCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdDsKKwlzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gKmhvdHBsdWdfc2xvdF9pbmZvOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwotCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG51bV9zbG90czsgKytpKSB7Ci0JCXNsb3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xvdCksIEdGUF9LRVJORUwpOwotCQlpZiAoIXNsb3QpCi0JCQlnb3RvIGVycm9yOwotCQltZW1zZXQoc2xvdCwgMCwgc2l6ZW9mKHN0cnVjdCBzbG90KSk7CisJc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKCpzbG90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbG90KQorCQlnb3RvIGVycm9yOwogCi0JCXNsb3QtPmhvdHBsdWdfc2xvdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBob3RwbHVnX3Nsb3QpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzbG90LT5ob3RwbHVnX3Nsb3QpCi0JCQlnb3RvIGVycm9yX3Nsb3Q7Ci0JCW1lbXNldChzbG90LT5ob3RwbHVnX3Nsb3QsIDAsIHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90KSk7CisJc2xvdC0+aG90cGx1Z19zbG90ID0ga3phbGxvYyhzaXplb2YoKmhvdHBsdWdfc2xvdCksIEdGUF9LRVJORUwpOworCWlmICghc2xvdC0+aG90cGx1Z19zbG90KQorCQlnb3RvIGVycm9yX3Nsb3Q7CiAKLQkJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKQotCQkJZ290byBlcnJvcl9ocHNsb3Q7Ci0JCW1lbXNldChzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8pKTsKKwlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8gPSBremFsbG9jKHNpemVvZigqaG90cGx1Z19zbG90X2luZm8pLAorCQkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mbykKKwkJZ290byBlcnJvcl9ocHNsb3Q7CiAKLQkJc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lID0ga21hbGxvYyhTTE9UX05BTUVfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKQotCQkJZ290byBlcnJvcl9pbmZvOworCXNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSA9IGt6YWxsb2MoU0xPVF9OQU1FX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKQorCQlnb3RvIGVycm9yX2luZm87CiAKLQkJc2xvdC0+bnVtYmVyID0gaTsKKwlzbG90LT5ob3RwbHVnX3Nsb3QtPnByaXZhdGUgPSBzbG90OworCXNsb3QtPmhvdHBsdWdfc2xvdC0+cmVsZWFzZSA9ICZyZWxlYXNlX3Nsb3Q7CisJc2xvdC0+aG90cGx1Z19zbG90LT5vcHMgPSAmYWNwaV9ob3RwbHVnX3Nsb3Rfb3BzOwogCi0JCXNsb3QtPmhvdHBsdWdfc2xvdC0+cHJpdmF0ZSA9IHNsb3Q7Ci0JCXNsb3QtPmhvdHBsdWdfc2xvdC0+cmVsZWFzZSA9ICZyZWxlYXNlX3Nsb3Q7Ci0JCXNsb3QtPmhvdHBsdWdfc2xvdC0+b3BzID0gJmFjcGlfaG90cGx1Z19zbG90X29wczsKKwlzbG90LT5hY3BpX3Nsb3QgPSBhY3BpcGhwX3Nsb3Q7CisJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5wb3dlcl9zdGF0dXMgPSBhY3BpcGhwX2dldF9wb3dlcl9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKKwlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmF0dGVudGlvbl9zdGF0dXMgPSAwOworCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+bGF0Y2hfc3RhdHVzID0gYWNwaXBocF9nZXRfbGF0Y2hfc3RhdHVzKHNsb3QtPmFjcGlfc2xvdCk7CisJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5hZGFwdGVyX3N0YXR1cyA9IGFjcGlwaHBfZ2V0X2FkYXB0ZXJfc3RhdHVzKHNsb3QtPmFjcGlfc2xvdCk7CisJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5tYXhfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CisJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5jdXJfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAKLQkJc2xvdC0+YWNwaV9zbG90ID0gZ2V0X3Nsb3RfZnJvbV9pZChpKTsKLQkJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5wb3dlcl9zdGF0dXMgPSBhY3BpcGhwX2dldF9wb3dlcl9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKLQkJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5hdHRlbnRpb25fc3RhdHVzID0gMDsKLQkJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5sYXRjaF9zdGF0dXMgPSBhY3BpcGhwX2dldF9sYXRjaF9zdGF0dXMoc2xvdC0+YWNwaV9zbG90KTsKLQkJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5hZGFwdGVyX3N0YXR1cyA9IGFjcGlwaHBfZ2V0X2FkYXB0ZXJfc3RhdHVzKHNsb3QtPmFjcGlfc2xvdCk7Ci0JCXNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwotCQlzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPmN1cl9idXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKKwlhY3BpcGhwX3Nsb3QtPnNsb3QgPSBzbG90OworCW1ha2Vfc2xvdF9uYW1lKHNsb3QpOwogCi0JCW1ha2Vfc2xvdF9uYW1lKHNsb3QpOworCXJldHZhbCA9IHBjaV9ocF9yZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJwY2lfaHBfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyb3JfbmFtZTsKKyAJfQogCi0JCXJldHZhbCA9IHBjaV9ocF9yZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQllcnIoInBjaV9ocF9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKLQkJCWdvdG8gZXJyb3JfbmFtZTsKLQkJfQotCi0JCS8qIGFkZCBzbG90IHRvIG91ciBpbnRlcm5hbCBsaXN0ICovCi0JCWxpc3RfYWRkKCZzbG90LT5zbG90X2xpc3QsICZzbG90X2xpc3QpOwotCQlpbmZvKCJTbG90IFslc10gcmVnaXN0ZXJlZFxuIiwgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKLQl9CisJaW5mbygiU2xvdCBbJXNdIHJlZ2lzdGVyZWRcbiIsIHNsb3QtPmhvdHBsdWdfc2xvdC0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIGVycm9yX25hbWU6CkBAIC00MTIsNDIgKzQwMSw1MSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3Nsb3RzICh2b2lkKQordm9pZCBhY3BpcGhwX3VucmVnaXN0ZXJfaG90cGx1Z19zbG90KHN0cnVjdCBhY3BpcGhwX3Nsb3QgKmFjcGlwaHBfc2xvdCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICpuOwotCXN0cnVjdCBzbG90ICpzbG90OworCXN0cnVjdCBzbG90ICpzbG90ID0gYWNwaXBocF9zbG90LT5zbG90OworCWludCByZXR2YWwgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9zYWZlICh0bXAsIG4sICZzbG90X2xpc3QpIHsKLQkJLyogbWVtb3J5IHdpbGwgYmUgZnJlZWQgaW4gcmVsZWFzZV9zbG90IGNhbGxiYWNrICovCi0JCXNsb3QgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHNsb3QsIHNsb3RfbGlzdCk7Ci0JCWxpc3RfZGVsKCZzbG90LT5zbG90X2xpc3QpOwotCQlwY2lfaHBfZGVyZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QpOwotCX0KKwlpbmZvICgiU2xvdCBbJXNdIHVucmVnaXN0ZXJlZFxuIiwgc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKKworCXJldHZhbCA9IHBjaV9ocF9kZXJlZ2lzdGVyKHNsb3QtPmhvdHBsdWdfc2xvdCk7CisJaWYgKHJldHZhbCkKKwkJZXJyKCJwY2lfaHBfZGVyZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKIH0KIAogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpcGhwX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOworCWludCBkb2NraW5nX3N0YXRpb247CiAKIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKIAogCWFjcGlwaHBfZGVidWcgPSBkZWJ1ZzsKIAorCWRvY2tpbmdfc3RhdGlvbiA9IGZpbmRfZG9ja19zdGF0aW9uKCk7CisKIAkvKiByZWFkIGFsbCB0aGUgQUNQSSBpbmZvIGZyb20gdGhlIHN5c3RlbSAqLwogCXJldHZhbCA9IGluaXRfYWNwaSgpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7CiAKLQlyZXR1cm4gaW5pdF9zbG90cygpOworCS8qIGlmIHdlIGhhdmUgZm91bmQgYSBkb2NraW5nIHN0YXRpb24sIHdlIHNob3VsZAorCSAqIGdvIGFoZWFkIGFuZCBsb2FkIGV2ZW4gaWYgaW5pdF9hY3BpIGhhcyBmb3VuZAorCSAqIG5vIHNsb3RzLiAgVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gdGhlIF9EQ0sKKwkgKiBtZXRob2Qgbm90IGRlZmluZWQgdW5kZXIgdGhlIGFjdHVhbCBkb2NrIGJyaWRnZQorCSAqLworCWlmIChkb2NraW5nX3N0YXRpb24pCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIHJldHZhbDsKIH0KIAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaXBocF9leGl0KHZvaWQpCiB7Ci0JY2xlYW51cF9zbG90cygpOwogCS8qIGRlYWxsb2NhdGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGV0Yy4gKi8KIAlhY3BpcGhwX2dsdWVfZXhpdCgpOworCisJcmVtb3ZlX2RvY2tfc3RhdGlvbigpOwogfQogCiBtb2R1bGVfaW5pdChhY3BpcGhwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2RvY2suYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9kb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxYWFmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9kb2NrLmMKQEAgLTAsMCArMSw0MzggQEAKKy8qCisgKiBBQ1BJIFBDSSBIb3RQbHVnIGRvY2sgZnVuY3Rpb25zIHRvIEFDUEkgQ0Egc3Vic3lzdGVtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEtyaXN0ZW4gQ2FybHNvbiBBY2NhcmRpIChrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFNlbmQgZmVlZGJhY2sgdG8gPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICJwY2lfaG90cGx1Zy5oIgorI2luY2x1ZGUgImFjcGlwaHAuaCIKKworc3RhdGljIHN0cnVjdCBhY3BpcGhwX2RvY2tfc3RhdGlvbiAqZHM7CisjZGVmaW5lIE1ZX05BTUUgImFjcGlwaHBfZG9jayIKKworCitpbnQgaXNfZGVwZW5kZW50X2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJcmV0dXJuIChnZXRfZGVwZW5kZW50X2RldmljZShoYW5kbGUpID8gMSA6IDApOworfQorCisKK3N0YXRpYyBhY3BpX3N0YXR1cworZmluZF9kZXBlbmRlbnRfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQoreworCWludCAqY291bnQgPSAoaW50ICopY29udGV4dDsKKworCWlmIChpc19kZXBlbmRlbnRfZGV2aWNlKGhhbmRsZSkpIHsKKwkJKCpjb3VudCkrKzsKKwkJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOworCX0gZWxzZSB7CisJCXJldHVybiBBRV9PSzsKKwl9Cit9CisKKworCisKK3ZvaWQgYWRkX2RlcGVuZGVudF9kZXZpY2Uoc3RydWN0IGRlcGVuZGVudF9kZXZpY2UgKm5ld19kZCkKK3sKKwlsaXN0X2FkZF90YWlsKCZuZXdfZGQtPmRldmljZV9saXN0LCAmZHMtPmRlcGVuZGVudF9kZXZpY2VzKTsKK30KKworCit2b2lkIGFkZF9wY2lfZGVwZW5kZW50X2RldmljZShzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqbmV3X2RkKQoreworCWxpc3RfYWRkX3RhaWwoJm5ld19kZC0+cGNpX2xpc3QsICZkcy0+cGNpX2RlcGVuZGVudF9kZXZpY2VzKTsKK30KKworCisKK3N0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICogZ2V0X2RlcGVuZGVudF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCXN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICpkZDsKKworCWlmICghZHMpCisJCXJldHVybiBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZCwgJmRzLT5kZXBlbmRlbnRfZGV2aWNlcywgZGV2aWNlX2xpc3QpIHsKKwkJaWYgKGhhbmRsZSA9PSBkZC0+aGFuZGxlKQorCQkJcmV0dXJuIGRkOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworCisKK3N0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICphbGxvY19kZXBlbmRlbnRfZGV2aWNlKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqZGQ7CisKKwlkZCA9IGt6YWxsb2Moc2l6ZW9mKCpkZCksIEdGUF9LRVJORUwpOworCWlmIChkZCkgeworCQlJTklUX0xJU1RfSEVBRCgmZGQtPnBjaV9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRkLT5kZXZpY2VfbGlzdCk7CisJCWRkLT5oYW5kbGUgPSBoYW5kbGU7CisJfQorCXJldHVybiBkZDsKK30KKworCisKK3N0YXRpYyBpbnQgaXNfZG9jayhhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIHRtcDsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfRENLIiwgJnRtcCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworCisKK3N0YXRpYyBpbnQgZG9ja19wcmVzZW50KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzdGE7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJaWYgKGRzKSB7CisJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkcy0+aGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgc3RhKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisKKworc3RhdGljIHZvaWQgZWplY3RfZG9jayh2b2lkKQoreworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0OworCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzsKKworCWFyZ19saXN0LmNvdW50ID0gMTsKKwlhcmdfbGlzdC5wb2ludGVyID0gJmFyZzsKKwlhcmcudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWFyZy5pbnRlZ2VyLnZhbHVlID0gMTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9vYmplY3QoZHMtPmhhbmRsZSwgIl9FSjAiLAorCQkJCQkmYXJnX2xpc3QsIE5VTEwpKSB8fCBkb2NrX3ByZXNlbnQoKSkKKwkJd2FybigiJXM6IGZhaWxlZCB0byBlamVjdCBkb2NrIVxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybjsKK30KKworCisKKworc3RhdGljIGFjcGlfc3RhdHVzIGhhbmRsZV9kb2NrKGludCBkb2NrKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdDsKKwl1bmlvbiBhY3BpX29iamVjdCBhcmc7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisKKwlkYmcoIiVzOiAlc1xuIiwgX19GVU5DVElPTl9fLCBkb2NrID8gImRvY2tpbmciIDogInVuZG9ja2luZyIpOworCisJLyogX0RDSyBtZXRob2QgaGFzIG9uZSBhcmd1bWVudCAqLworCWFyZ19saXN0LmNvdW50ID0gMTsKKwlhcmdfbGlzdC5wb2ludGVyID0gJmFyZzsKKwlhcmcudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWFyZy5pbnRlZ2VyLnZhbHVlID0gZG9jazsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkcy0+aGFuZGxlLCAiX0RDSyIsCisJCQkJCSZhcmdfbGlzdCwgJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQllcnIoIiVzOiBmYWlsZWQgdG8gZXhlY3V0ZSBfRENLXG4iLCBfX0ZVTkNUSU9OX18pOworCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKworc3RhdGljIGlubGluZSB2b2lkIGRvY2sodm9pZCkKK3sKKwloYW5kbGVfZG9jaygxKTsKK30KKworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmRvY2sodm9pZCkKK3sKKwloYW5kbGVfZG9jaygwKTsKK30KKworCisKKy8qCisgKiB0aGUgX0RDSyBtZXRob2QgY2FuIGRvIGZ1bm55IHRoaW5ncy4uLiBhbmQgc29tZXRpbWVzIG5vdAorICogaGFoLWhhaCBmdW5ueS4KKyAqCisgKiBUQkQgLSBmaWd1cmUgb3V0IGEgd2F5IHRvIG9ubHkgY2FsbCBmaXh1cHMgZm9yCisgKiBzeXN0ZW1zIHRoYXQgcmVxdWlyZSB0aGVtLgorICovCitzdGF0aWMgdm9pZCBwb3N0X2RvY2tfZml4dXBzKHZvaWQpCit7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwl1MzIgYnVzZXM7CisJc3RydWN0IGRlcGVuZGVudF9kZXZpY2UgKmRkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZCwgJmRzLT5wY2lfZGVwZW5kZW50X2RldmljZXMsIHBjaV9saXN0KSB7CisJCWJ1cyA9IGRkLT5mdW5jLT5zbG90LT5icmlkZ2UtPnBjaV9idXM7CisKKwkJLyogZml4dXAgYmFkIF9EQ0sgZnVuY3Rpb24gdGhhdCByZXdyaXRlcworCSAJICogc2Vjb25kYXJ5IGJyaWRnZSBvbiBzbG90CisJIAkgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJ1cy0+c2VsZiwKKwkJCQlQQ0lfUFJJTUFSWV9CVVMsCisJCQkJJmJ1c2VzKTsKKworCQlpZiAoKChidXNlcyA+PiA4KSAmIDB4ZmYpICE9IGJ1cy0+c2Vjb25kYXJ5KSB7CisJCQlidXNlcyA9IChidXNlcyAmIDB4ZmYwMDAwMDApCisJICAgICAJCQl8ICgodW5zaWduZWQgaW50KShidXMtPnByaW1hcnkpICAgICA8PCAgMCkKKwkgICAgIAkJCXwgKCh1bnNpZ25lZCBpbnQpKGJ1cy0+c2Vjb25kYXJ5KSAgIDw8ICA4KQorCSAgICAgCQkJfCAoKHVuc2lnbmVkIGludCkoYnVzLT5zdWJvcmRpbmF0ZSkgPDwgMTYpOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChidXMtPnNlbGYsCisJCQkJCVBDSV9QUklNQVJZX0JVUywKKwkJCQkJYnVzZXMpOworCQl9CisJfQorfQorCisKKworc3RhdGljIHZvaWQgaG90cGx1Z19wY2kodTMyIHR5cGUpCit7CisJc3RydWN0IGRlcGVuZGVudF9kZXZpY2UgKmRkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZCwgJmRzLT5wY2lfZGVwZW5kZW50X2RldmljZXMsIHBjaV9saXN0KQorCQloYW5kbGVfaG90cGx1Z19ldmVudF9mdW5jKGRkLT5oYW5kbGUsIHR5cGUsIGRkLT5mdW5jKTsKK30KKworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZWdpbl9kb2NrKHZvaWQpCit7CisJZHMtPmZsYWdzIHw9IERPQ0tfRE9DS0lORzsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgY29tcGxldGVfZG9jayh2b2lkKQoreworCWRzLT5mbGFncyAmPSB+KERPQ0tfRE9DS0lORyk7CisJZHMtPmxhc3RfZG9ja190aW1lID0gamlmZmllczsKK30KKworCitzdGF0aWMgaW50IGRvY2tfaW5fcHJvZ3Jlc3Modm9pZCkKK3sKKwlpZiAoZHMtPmZsYWdzICYgRE9DS19ET0NLSU5HIHx8CisJCWRzLT5sYXN0X2RvY2tfdGltZSA9PSBqaWZmaWVzKSB7CisJCWRiZygiZG9jayBpbiBwcm9ncmVzc1xuIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfaG90cGx1Z19ldmVudF9kb2NrKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIHR5cGUsIHZvaWQgKmNvbnRleHQpCit7CisJZGJnKCIlczogZW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0s6CisJCQlkYmcoIkJVUyBDaGVja1xuIik7CisJCQlpZiAoIWRvY2tfaW5fcHJvZ3Jlc3MoKSAmJiBkb2NrX3ByZXNlbnQoKSkgeworCQkJCWJlZ2luX2RvY2soKTsKKwkJCQlkb2NrKCk7CisJCQkJaWYgKCFkb2NrX3ByZXNlbnQoKSkgeworCQkJCQllcnIoIlVuYWJsZSB0byBkb2NrIVxuIik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwb3N0X2RvY2tfZml4dXBzKCk7CisJCQkJaG90cGx1Z19wY2kodHlwZSk7CisJCQkJY29tcGxldGVfZG9jaygpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVDoKKwkJCWRiZygiRUpFQ1QgcmVxdWVzdFxuIik7CisJCQlpZiAoIWRvY2tfaW5fcHJvZ3Jlc3MoKSAmJiBkb2NrX3ByZXNlbnQoKSkgeworCQkJCWhvdHBsdWdfcGNpKHR5cGUpOworCQkJCXVuZG9jaygpOworCQkJCWVqZWN0X2RvY2soKTsKKwkJCQlpZiAoZG9ja19wcmVzZW50KCkpCisJCQkJCWVycigiVW5hYmxlIHRvIHVuZG9jayFcbiIpOworCQkJfQorCQkJYnJlYWs7CisJfQorfQorCisKKworCitzdGF0aWMgYWNwaV9zdGF0dXMKK2ZpbmRfZG9ja19lamQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcnYpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIHRtcDsKKwlhY3BpX2hhbmRsZSBkY2tfaGFuZGxlID0gKGFjcGlfaGFuZGxlKSBjb250ZXh0OworCWNoYXIgb2JqbmFtZVs2NF07CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgLmxlbmd0aCA9IHNpemVvZihvYmpuYW1lKSwKKwkJCQkgICAgICAucG9pbnRlciA9IG9iam5hbWUgfTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgZWpkX2J1ZmZlciA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJdW5pb24gYWNwaV9vYmplY3QgKmVqZF9vYmo7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX0VKRCIsICZ0bXApOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIEFFX09LOworCisJLyogbWFrZSBzdXJlIHdlIGFyZSBkZXBlbmRlbnQgb24gdGhlIGRvY2sgZGV2aWNlLAorCSAqIGJ5IGV4ZWN1dGluZyB0aGUgX0VKRCBtZXRob2QsIHRoZW4gZ2V0dGluZyBhIGhhbmRsZQorCSAqIHRvIHRoZSBkZXZpY2UgcmVmZXJlbmNlZCBieSB0aGF0IG5hbWUuICBJZiB0aGF0CisJICogZGV2aWNlIGhhbmRsZSBpcyB0aGUgc2FtZSBoYW5kbGUgYXMgdGhlIGRvY2sgc3RhdGlvbgorCSAqIGhhbmRsZSwgdGhlbiB3ZSBhcmUgYSBkZXZpY2UgZGVwZW5kZW50IG9uIHRoZSBkb2NrIHN0YXRpb24KKwkgKi8KKwlhY3BpX2dldF9uYW1lKGRja19oYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1ZmZlcik7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX0VKRCIsIE5VTEwsICZlamRfYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJZXJyKCJVbmFibGUgdG8gZXhlY3V0ZSBfRUpEIVxuIik7CisJCWdvdG8gZmluZF9lamRfb3V0OworCX0KKwllamRfb2JqID0gZWpkX2J1ZmZlci5wb2ludGVyOworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShOVUxMLCBlamRfb2JqLT5zdHJpbmcucG9pbnRlciwgJnRtcCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlnb3RvIGZpbmRfZWpkX291dDsKKworCWlmICh0bXAgPT0gZGNrX2hhbmRsZSkgeworCQlzdHJ1Y3QgZGVwZW5kZW50X2RldmljZSAqZGQ7CisJCWRiZygiJXM6IGZvdW5kIGRldmljZSBkZXBlbmRlbnQgb24gZG9ja1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZGQgPSBhbGxvY19kZXBlbmRlbnRfZGV2aWNlKGhhbmRsZSk7CisJCWlmICghZGQpIHsKKwkJCWVycigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZXBlbmRlbnQgZGV2aWNlIVxuIik7CisJCQlnb3RvIGZpbmRfZWpkX291dDsKKwkJfQorCQlhZGRfZGVwZW5kZW50X2RldmljZShkZCk7CisJfQorCitmaW5kX2VqZF9vdXQ6CisJYWNwaV9vc19mcmVlKGVqZF9idWZmZXIucG9pbnRlcik7CisJcmV0dXJuIEFFX09LOworfQorCisKKworaW50IGRldGVjdF9kZXBlbmRlbnRfZGV2aWNlcyhhY3BpX2hhbmRsZSAqYnJpZGdlX2hhbmRsZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJaW50IGNvdW50OworCisJY291bnQgPSAwOworCisJc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBicmlkZ2VfaGFuZGxlLAorCQkJCQkodTMyKTEsIGZpbmRfZGVwZW5kZW50X2RldmljZSwKKwkJCQkJKHZvaWQgKikmY291bnQsIE5VTEwpOworCisJcmV0dXJuIGNvdW50OworfQorCisKKworCisKK3N0YXRpYyBhY3BpX3N0YXR1cworZmluZF9kb2NrKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJ2KQoreworCWludCAqY291bnQgPSAoaW50ICopY29udGV4dDsKKworCWlmIChpc19kb2NrKGhhbmRsZSkpIHsKKwkJZGJnKCIlczogZm91bmQgZG9ja1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZHMgPSBremFsbG9jKHNpemVvZigqZHMpLCBHRlBfS0VSTkVMKTsKKwkJZHMtPmhhbmRsZSA9IGhhbmRsZTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRzLT5kZXBlbmRlbnRfZGV2aWNlcyk7CisJCUlOSVRfTElTVF9IRUFEKCZkcy0+cGNpX2RlcGVuZGVudF9kZXZpY2VzKTsKKworCQkvKiBsb29rIGZvciBkZXZpY2VzIGRlcGVuZGVudCBvbiBkb2NrIHN0YXRpb24gKi8KKwkJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAorCQkJQUNQSV9VSU5UMzJfTUFYLCBmaW5kX2RvY2tfZWpkLCBoYW5kbGUsIE5VTEwpOworCisJCWFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihoYW5kbGUsIEFDUElfU1lTVEVNX05PVElGWSwKKwkJCWhhbmRsZV9ob3RwbHVnX2V2ZW50X2RvY2ssIGRzKTsKKwkJKCpjb3VudCkrKzsKKwl9CisKKwlyZXR1cm4gQUVfT0s7Cit9CisKKworCisKK2ludCBmaW5kX2RvY2tfc3RhdGlvbih2b2lkKQoreworCWludCBudW0gPSAwOworCisJZHMgPSBOVUxMOworCisJLyogc3RhcnQgZnJvbSB0aGUgcm9vdCBvYmplY3QsIGJlY2F1c2Ugc29tZSBsYXB0b3BzIGRlZmluZQorCSAqIF9EQ0sgbWV0aG9kcyBvdXRzaWRlIHRoZSBzY29wZSBvZiBQQ0kgKElCTSB4LXNlcmllcyBsYXB0b3ApCisJICovCisJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBBQ1BJX1JPT1RfT0JKRUNULAorCQkJQUNQSV9VSU5UMzJfTUFYLCBmaW5kX2RvY2ssICZudW0sIE5VTEwpOworCisJcmV0dXJuIG51bTsKK30KKworCisKK3ZvaWQgcmVtb3ZlX2RvY2tfc3RhdGlvbih2b2lkKQoreworCXN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICpkZCwgKnRtcDsKKwlpZiAoZHMpIHsKKwkJaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihkcy0+aGFuZGxlLAorCQkJQUNQSV9TWVNURU1fTk9USUZZLCBoYW5kbGVfaG90cGx1Z19ldmVudF9kb2NrKSkpCisJCQllcnIoImZhaWxlZCB0byByZW1vdmUgZG9jayBub3RpZnkgaGFuZGxlclxuIik7CisKKwkJLyogZnJlZSBhbGwgZGVwZW5kZW50IGRldmljZXMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkLCB0bXAsICZkcy0+ZGVwZW5kZW50X2RldmljZXMsCisJCQkJZGV2aWNlX2xpc3QpCisJCQlrZnJlZShkZCk7CisKKwkJLyogbm8gbmVlZCB0byB0b3VjaCB0aGUgcGNpX2RlcGVuZGVudF9kZXZpY2UgbGlzdCwKKwkJICogY2F1c2UgYWxsIG1lbW9yeSB3YXMgZnJlZWQgYWJvdmUKKwkJICovCisJCWtmcmVlKGRzKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKaW5kZXggNTA5YTViMy4uMDUzZWU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaV9ob3RwbHVnLmgiCkBAIC01Nyw3ICs1Nyw2IEBACiAjZGVmaW5lIE1ZX05BTUUgImFjcGlwaHBfZ2x1ZSIKIAogc3RhdGljIHZvaWQgaGFuZGxlX2hvdHBsdWdfZXZlbnRfYnJpZGdlIChhY3BpX2hhbmRsZSwgdTMyLCB2b2lkICopOwotc3RhdGljIHZvaWQgaGFuZGxlX2hvdHBsdWdfZXZlbnRfZnVuYyAoYWNwaV9oYW5kbGUsIHUzMiwgdm9pZCAqKTsKIHN0YXRpYyB2b2lkIGFjcGlwaHBfc2FuaXRpemVfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogc3RhdGljIHZvaWQgYWNwaXBocF9zZXRfaHBwX3ZhbHVlcyhhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBwY2lfYnVzICpidXMpOwogCkBAIC0xMjUsMTEgKzEyNCwxMSBAQAogCXN0cnVjdCBhY3BpcGhwX2JyaWRnZSAqYnJpZGdlID0gKHN0cnVjdCBhY3BpcGhwX2JyaWRnZSAqKWNvbnRleHQ7CiAJc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdDsKIAlzdHJ1Y3QgYWNwaXBocF9mdW5jICpuZXdmdW5jOworCXN0cnVjdCBkZXBlbmRlbnRfZGV2aWNlICpkZDsKIAlhY3BpX2hhbmRsZSB0bXA7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJdW5zaWduZWQgbG9uZyBhZHIsIHN1bjsKLQlpbnQgZGV2aWNlLCBmdW5jdGlvbjsKLQlzdGF0aWMgaW50IG51bV9zbG90cyA9IDA7CS8qIFhYWCBpZiB3ZSBzdXBwb3J0IEkvTyBub2RlIGhvdHBsdWcuLi4gKi8KKwlpbnQgZGV2aWNlLCBmdW5jdGlvbiwgcmV0dmFsOwogCiAJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIl9BRFIiLCBOVUxMLCAmYWRyKTsKIApAQCAtMTM4LDIxICsxMzcsMjEgQEAKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfRUowIiwgJnRtcCk7CiAKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpICYmICEoaXNfZGVwZW5kZW50X2RldmljZShoYW5kbGUpKSkKIAkJcmV0dXJuIEFFX09LOwogCiAJZGV2aWNlID0gKGFkciA+PiAxNikgJiAweGZmZmY7CiAJZnVuY3Rpb24gPSBhZHIgJiAweGZmZmY7CiAKLQluZXdmdW5jID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlwaHBfZnVuYyksIEdGUF9LRVJORUwpOworCW5ld2Z1bmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaXBocF9mdW5jKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdmdW5jKQogCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwotCW1lbXNldChuZXdmdW5jLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlwaHBfZnVuYykpOwogCiAJSU5JVF9MSVNUX0hFQUQoJm5ld2Z1bmMtPnNpYmxpbmcpOwogCW5ld2Z1bmMtPmhhbmRsZSA9IGhhbmRsZTsKIAluZXdmdW5jLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotCW5ld2Z1bmMtPmZsYWdzID0gRlVOQ19IQVNfRUowOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJbmV3ZnVuYy0+ZmxhZ3MgPSBGVU5DX0hBU19FSjA7CiAKIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfU1RBIiwgJnRtcCkpKQogCQluZXdmdW5jLT5mbGFncyB8PSBGVU5DX0hBU19TVEE7CkBAIC0xNjMsNiArMTYyLDE5IEBACiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX1BTMyIsICZ0bXApKSkKIAkJbmV3ZnVuYy0+ZmxhZ3MgfD0gRlVOQ19IQVNfUFMzOwogCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX0RDSyIsICZ0bXApKSkgeworCQluZXdmdW5jLT5mbGFncyB8PSBGVU5DX0hBU19EQ0s7CisJCS8qIGFkZCB0byBkZXZpY2VzIGRlcGVuZGVudCBvbiBkb2NrIHN0YXRpb24sCisJCSAqIGJlY2F1c2UgdGhpcyBtYXkgYWN0dWFsbHkgYmUgdGhlIGRvY2sgYnJpZGdlCisJCSAqLworCQlkZCA9IGFsbG9jX2RlcGVuZGVudF9kZXZpY2UoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRkKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJCQkibmV3IGRlcGVuZGVudCBkZXZpY2UhXG4iKTsKKwkJZWxzZQorCQkJYWRkX2RlcGVuZGVudF9kZXZpY2UoZGQpOworCX0KKwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfU1VOIiwgTlVMTCwgJnN1bik7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlzdW4gPSAtMTsKQEAgLTE3NiwxOSArMTg4LDE3IEBACiAJCX0KIAogCWlmICghc2xvdCkgewotCQlzbG90ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlwaHBfc2xvdCksIEdGUF9LRVJORUwpOworCQlzbG90ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlwaHBfc2xvdCksIEdGUF9LRVJORUwpOwogCQlpZiAoIXNsb3QpIHsKIAkJCWtmcmVlKG5ld2Z1bmMpOwogCQkJcmV0dXJuIEFFX05PX01FTU9SWTsKIAkJfQogCi0JCW1lbXNldChzbG90LCAwLCBzaXplb2Yoc3RydWN0IGFjcGlwaHBfc2xvdCkpOwogCQlzbG90LT5icmlkZ2UgPSBicmlkZ2U7Ci0JCXNsb3QtPmlkID0gbnVtX3Nsb3RzKys7CiAJCXNsb3QtPmRldmljZSA9IGRldmljZTsKIAkJc2xvdC0+c3VuID0gc3VuOwogCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+ZnVuY3MpOwotCQlpbml0X01VVEVYKCZzbG90LT5jcml0X3NlY3QpOworCQltdXRleF9pbml0KCZzbG90LT5jcml0X3NlY3QpOwogCiAJCXNsb3QtPm5leHQgPSBicmlkZ2UtPnNsb3RzOwogCQlicmlkZ2UtPnNsb3RzID0gc2xvdDsKQEAgLTE5OCw2ICsyMDgsMTEgQEAKIAkJZGJnKCJmb3VuZCBBQ1BJIFBDSSBIb3RwbHVnIHNsb3QgJWQgYXQgUENJICUwNHg6JTAyeDolMDJ4XG4iLAogCQkJCXNsb3QtPnN1biwgcGNpX2RvbWFpbl9ucihicmlkZ2UtPnBjaV9idXMpLAogCQkJCWJyaWRnZS0+cGNpX2J1cy0+bnVtYmVyLCBzbG90LT5kZXZpY2UpOworCQlyZXR2YWwgPSBhY3BpcGhwX3JlZ2lzdGVyX2hvdHBsdWdfc2xvdChzbG90KTsKKwkJaWYgKHJldHZhbCkgeworCQkJd2FybigiYWNwaXBocF9yZWdpc3Rlcl9ob3RwbHVnX3Nsb3QgZmFpbGVkKGVyciBjb2RlID0gMHgleClcbiIsIHJldHZhbCk7CisJCQlnb3RvIGVycl9leGl0OworCQl9CiAJfQogCiAJbmV3ZnVuYy0+c2xvdCA9IHNsb3Q7CkBAIC0yMTAsMTYgKzIyNSw0MSBAQAogCQlzbG90LT5mbGFncyB8PSAoU0xPVF9FTkFCTEVEIHwgU0xPVF9QT1dFUkVET04pOwogCX0KIAorCS8qIGlmIHRoaXMgaXMgYSBkZXZpY2UgZGVwZW5kZW50IG9uIGEgZG9jayBzdGF0aW9uLAorCSAqIGFzc29jaWF0ZSB0aGUgYWNwaXBocF9mdW5jIHRvIHRoZSBkZXBlbmRlbnRfZGV2aWNlCisgCSAqIHN0cnVjdC4KKwkgKi8KKwlpZiAoKGRkID0gZ2V0X2RlcGVuZGVudF9kZXZpY2UoaGFuZGxlKSkpIHsKKwkJbmV3ZnVuYy0+ZmxhZ3MgfD0gRlVOQ19JU19ERDsKKwkJLyoKKwkJICogd2UgZG9uJ3Qgd2FudCBhbnkgZGV2aWNlcyB3aGljaCBpcyBkZXBlbmRlbnQKKwkJICogb24gdGhlIGRvY2sgdG8gaGF2ZSBpdCdzIF9FSjAgbWV0aG9kIGV4ZWN1dGVkLgorCQkgKiBiZWNhdXNlIHdlIG5lZWQgdG8gcnVuIF9EQ0sgZmlyc3QuCisJCSAqLworCQluZXdmdW5jLT5mbGFncyAmPSB+RlVOQ19IQVNfRUowOworCQlkZC0+ZnVuYyA9IG5ld2Z1bmM7CisJCWFkZF9wY2lfZGVwZW5kZW50X2RldmljZShkZCk7CisJfQorCiAJLyogaW5zdGFsbCBub3RpZnkgaGFuZGxlciAqLwotCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihoYW5kbGUsCisJaWYgKCEobmV3ZnVuYy0+ZmxhZ3MgJiBGVU5DX0hBU19EQ0spKSB7CisJCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihoYW5kbGUsCiAJCQkJCSAgICAgQUNQSV9TWVNURU1fTk9USUZZLAogCQkJCQkgICAgIGhhbmRsZV9ob3RwbHVnX2V2ZW50X2Z1bmMsCiAJCQkJCSAgICAgbmV3ZnVuYyk7CiAKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0IG5vdGlmeSBoYW5kbGVyXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCWVycigiZmFpbGVkIHRvIHJlZ2lzdGVyIGludGVycnVwdCBub3RpZnkgaGFuZGxlclxuIik7CisJfSBlbHNlCisJCXN0YXR1cyA9IEFFX09LOworCisJcmV0dXJuIHN0YXR1czsKKworIGVycl9leGl0OgorCWJyaWRnZS0+bnJfc2xvdHMtLTsKKwlicmlkZ2UtPnNsb3RzID0gc2xvdC0+bmV4dDsKKwlrZnJlZShzbG90KTsKKwlrZnJlZShuZXdmdW5jKTsKIAogCXJldHVybiBBRV9PSzsKIH0KQEAgLTI0NSw1NyArMjg1LDE5IEBACiBzdGF0aWMgdm9pZCBkZWNvZGVfaHBwKHN0cnVjdCBhY3BpcGhwX2JyaWRnZSAqYnJpZGdlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyAubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVIsCi0JCQkJICAgICAgLnBvaW50ZXIgPSBOVUxMfTsKLQl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZTsKLQlpbnQgaTsKIAotCS8qIGRlZmF1bHQgbnVtYmVycyAqLwotCWJyaWRnZS0+aHBwLmNhY2hlX2xpbmVfc2l6ZSA9IDB4MTA7Ci0JYnJpZGdlLT5ocHAubGF0ZW5jeV90aW1lciA9IDB4NDA7Ci0JYnJpZGdlLT5ocHAuZW5hYmxlX1NFUlIgPSAwOwotCWJyaWRnZS0+aHBwLmVuYWJsZV9QRVJSID0gMDsKLQotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGJyaWRnZS0+aGFuZGxlLCAiX0hQUCIsIE5VTEwsICZidWZmZXIpOwotCisJc3RhdHVzID0gYWNwaV9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoYnJpZGdlLT5wY2lfZGV2LCAmYnJpZGdlLT5ocHApOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlkYmcoIl9IUFAgZXZhbHVhdGlvbiBmYWlsZWRcbiIpOwotCQlyZXR1cm47CisJCS8qIHVzZSBkZWZhdWx0IG51bWJlcnMgKi8KKwkJYnJpZGdlLT5ocHAuY2FjaGVfbGluZV9zaXplID0gMHgxMDsKKwkJYnJpZGdlLT5ocHAubGF0ZW5jeV90aW1lciA9IDB4NDA7CisJCWJyaWRnZS0+aHBwLmVuYWJsZV9zZXJyID0gMDsKKwkJYnJpZGdlLT5ocHAuZW5hYmxlX3BlcnIgPSAwOwogCX0KLQotCXBhY2thZ2UgPSAodW5pb24gYWNwaV9vYmplY3QgKikgYnVmZmVyLnBvaW50ZXI7Ci0KLQlpZiAoIXBhY2thZ2UgfHwgcGFja2FnZS0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSB8fAotCSAgICBwYWNrYWdlLT5wYWNrYWdlLmNvdW50ICE9IDQgfHwgIXBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHMpIHsKLQkJZXJyKCJpbnZhbGlkIF9IUFAgb2JqZWN0OyBpZ25vcmluZ1xuIik7Ci0JCWdvdG8gZXJyX2V4aXQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAocGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1tpXS50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7Ci0JCQllcnIoImludmFsaWQgX0hQUCBwYXJhbWV0ZXIgdHlwZTsgaWdub3JpbmdcbiIpOwotCQkJZ290byBlcnJfZXhpdDsKLQkJfQotCX0KLQotCWJyaWRnZS0+aHBwLmNhY2hlX2xpbmVfc2l6ZSA9IHBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHNbMF0uaW50ZWdlci52YWx1ZTsKLQlicmlkZ2UtPmhwcC5sYXRlbmN5X3RpbWVyID0gcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1sxXS5pbnRlZ2VyLnZhbHVlOwotCWJyaWRnZS0+aHBwLmVuYWJsZV9TRVJSID0gcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1syXS5pbnRlZ2VyLnZhbHVlOwotCWJyaWRnZS0+aHBwLmVuYWJsZV9QRVJSID0gcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1szXS5pbnRlZ2VyLnZhbHVlOwotCi0JZGJnKCJfSFBQIHBhcmFtZXRlciA9ICglMDJ4LCAlMDJ4LCAlMDJ4LCAlMDJ4KVxuIiwKLQkJYnJpZGdlLT5ocHAuY2FjaGVfbGluZV9zaXplLAotCQlicmlkZ2UtPmhwcC5sYXRlbmN5X3RpbWVyLAotCQlicmlkZ2UtPmhwcC5lbmFibGVfU0VSUiwKLQkJYnJpZGdlLT5ocHAuZW5hYmxlX1BFUlIpOwotCi0JYnJpZGdlLT5mbGFncyB8PSBCUklER0VfSEFTX0hQUDsKLQotIGVycl9leGl0OgotCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIH0KIAogCisKIC8qIGluaXRpYWxpemUgbWlzY2VsbGFuZW91cyBzdHVmZiBmb3IgYm90aCByb290IGFuZCBQQ0ktdG8tUENJIGJyaWRnZSAqLwogc3RhdGljIHZvaWQgaW5pdF9icmlkZ2VfbWlzYyhzdHJ1Y3QgYWNwaXBocF9icmlkZ2UgKmJyaWRnZSkKIHsKQEAgLTMwNCw5ICszMDYsMTYgQEAKIAkvKiBkZWNvZGUgQUNQSSAyLjAgX0hQUCAoaG90IHBsdWcgcGFyYW1ldGVycykgKi8KIAlkZWNvZGVfaHBwKGJyaWRnZSk7CiAKKwkvKiBtdXN0IGJlIGFkZGVkIHRvIHRoZSBsaXN0IHByaW9yIHRvIGNhbGxpbmcgcmVnaXN0ZXJfc2xvdCAqLworCWxpc3RfYWRkKCZicmlkZ2UtPmxpc3QsICZicmlkZ2VfbGlzdCk7CisKIAkvKiByZWdpc3RlciBhbGwgc2xvdCBvYmplY3RzIHVuZGVyIHRoaXMgYnJpZGdlICovCiAJc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBicmlkZ2UtPmhhbmRsZSwgKHUzMikxLAogCQkJCSAgICAgcmVnaXN0ZXJfc2xvdCwgYnJpZGdlLCBOVUxMKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJbGlzdF9kZWwoJmJyaWRnZS0+bGlzdCk7CisJCXJldHVybjsKKwl9CiAKIAkvKiBpbnN0YWxsIG5vdGlmeSBoYW5kbGVyICovCiAJaWYgKGJyaWRnZS0+dHlwZSAhPSBCUklER0VfVFlQRV9IT1NUKSB7CkBAIC0zMTksOCArMzI4LDYgQEAKIAkJCWVycigiZmFpbGVkIHRvIHJlZ2lzdGVyIGludGVycnVwdCBub3RpZnkgaGFuZGxlclxuIik7CiAJCX0KIAl9Ci0KLQlsaXN0X2FkZCgmYnJpZGdlLT5saXN0LCAmYnJpZGdlX2xpc3QpOwogfQogCiAKQEAgLTMyOSwxMiArMzM2LDEwIEBACiB7CiAJc3RydWN0IGFjcGlwaHBfYnJpZGdlICpicmlkZ2U7CiAKLQlicmlkZ2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaXBocF9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKKwlicmlkZ2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaXBocF9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnJpZGdlID09IE5VTEwpCiAJCXJldHVybjsKIAotCW1lbXNldChicmlkZ2UsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaXBocF9icmlkZ2UpKTsKLQogCWJyaWRnZS0+dHlwZSA9IEJSSURHRV9UWVBFX0hPU1Q7CiAJYnJpZGdlLT5oYW5kbGUgPSBoYW5kbGU7CiAKQEAgLTM1MSwxNCArMzU2LDEyIEBACiB7CiAJc3RydWN0IGFjcGlwaHBfYnJpZGdlICpicmlkZ2U7CiAKLQlicmlkZ2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaXBocF9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKKwlicmlkZ2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaXBocF9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnJpZGdlID09IE5VTEwpIHsKIAkJZXJyKCJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCW1lbXNldChicmlkZ2UsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaXBocF9icmlkZ2UpKTsKLQogCWJyaWRnZS0+dHlwZSA9IEJSSURHRV9UWVBFX1AyUDsKIAlicmlkZ2UtPmhhbmRsZSA9IGhhbmRsZTsKIApAQCAtNDEwLDExICs0MTMsMTggQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBjaGVjayBpZiB0aGlzIGJyaWRnZSBoYXMgZWplY3RhYmxlIHNsb3RzICovCi0JaWYgKGRldGVjdF9lamVjdGFibGVfc2xvdHMoaGFuZGxlKSA+IDApIHsKKwlpZiAoKGRldGVjdF9lamVjdGFibGVfc2xvdHMoaGFuZGxlKSA+IDApIHx8CisJCShkZXRlY3RfZGVwZW5kZW50X2RldmljZXMoaGFuZGxlKSA+IDApKSB7CiAJCWRiZygiZm91bmQgUENJLXRvLVBDSSBicmlkZ2UgYXQgUENJICVzXG4iLCBwY2lfbmFtZShkZXYpKTsKIAkJYWRkX3AycF9icmlkZ2UoaGFuZGxlLCBkZXYpOwogCX0KIAorCS8qIHNlYXJjaCBQMlAgYnJpZGdlcyB1bmRlciB0aGlzIHAycCBicmlkZ2UgKi8KKwlzdGF0dXMgPSBhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIGhhbmRsZSwgKHUzMikxLAorCQkJCSAgICAgZmluZF9wMnBfYnJpZGdlLCBkZXYtPnN1Ym9yZGluYXRlLCBOVUxMKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXdhcm4oImZpbmRfcDJwX2JyaWRnZSBmYWllZCAoZXJyb3IgY29kZSA9IDB4JXgpXG4iLCBzdGF0dXMpOworCiAgb3V0OgogCXBjaV9kZXZfcHV0KGRldik7CiAJcmV0dXJuIEFFX09LOwpAQCAtNTEyLDE1ICs1MjIsMTkgQEAKIAkJbGlzdF9mb3JfZWFjaF9zYWZlIChsaXN0LCB0bXAsICZzbG90LT5mdW5jcykgewogCQkJc3RydWN0IGFjcGlwaHBfZnVuYyAqZnVuYzsKIAkJCWZ1bmMgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBhY3BpcGhwX2Z1bmMsIHNpYmxpbmcpOwotCQkJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZnVuYy0+aGFuZGxlLAorCQkJaWYgKCEoZnVuYy0+ZmxhZ3MgJiBGVU5DX0hBU19EQ0spKSB7CisJCQkJc3RhdHVzID0gYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoZnVuYy0+aGFuZGxlLAogCQkJCQkJQUNQSV9TWVNURU1fTk9USUZZLAogCQkJCQkJaGFuZGxlX2hvdHBsdWdfZXZlbnRfZnVuYyk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQkJZXJyKCJmYWlsZWQgdG8gcmVtb3ZlIG5vdGlmeSBoYW5kbGVyXG4iKTsKKwkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQkJCWVycigiZmFpbGVkIHRvIHJlbW92ZSBub3RpZnkgaGFuZGxlclxuIik7CisJCQl9CiAJCQlwY2lfZGV2X3B1dChmdW5jLT5wY2lfZGV2KTsKIAkJCWxpc3RfZGVsKGxpc3QpOwogCQkJa2ZyZWUoZnVuYyk7CiAJCX0KKwkJYWNwaXBocF91bnJlZ2lzdGVyX2hvdHBsdWdfc2xvdChzbG90KTsKKwkJbGlzdF9kZWwoJnNsb3QtPmZ1bmNzKTsKIAkJa2ZyZWUoc2xvdCk7CiAJCXNsb3QgPSBuZXh0OwogCX0KQEAgLTU1MSw3ICs1NjUsOCBAQAogCX0gZWxzZSB7CiAJCS8qIGNsZWFuLXVwIHAycCBicmlkZ2VzIHVuZGVyIHRoaXMgaG9zdCBicmlkZ2UgKi8KIAkJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfREVWSUNFLCBoYW5kbGUsCi0JCQkJKHUzMikxLCBjbGVhbnVwX3AycF9icmlkZ2UsIE5VTEwsIE5VTEwpOworCQkJCSAgICBBQ1BJX1VJTlQzMl9NQVgsIGNsZWFudXBfcDJwX2JyaWRnZSwKKwkJCQkgICAgTlVMTCwgTlVMTCk7CiAJfQogfQogCkBAIC03NTEsNiArNzY2LDExMyBAQAogfQogCiAKKworLyoqCisgKiBhY3BpcGhwX21heF9idXNuciAtIHJldHVybiB0aGUgaGlnaGVzdCByZXNlcnZlZCBidXMgbnVtYmVyIHVuZGVyCisgKiB0aGUgZ2l2ZW4gYnVzLgorICogQGJ1czogYnVzIHRvIHN0YXJ0IHNlYXJjaCB3aXRoCisgKgorICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBhY3BpcGhwX21heF9idXNucihzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwl1bnNpZ25lZCBjaGFyIG1heCwgbjsKKworCS8qCisJICogcGNpX2J1c19tYXhfYnVzbnIgd2lsbCByZXR1cm4gdGhlIGhpZ2hlc3QKKwkgKiByZXNlcnZlZCBidXNuciBmb3IgYWxsIHRoZXNlIGNoaWxkcmVuLgorCSAqIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgYnVzLT5zdWJvcmRpbmF0ZQorCSAqIHZhbHVlLiAgV2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIHBhcmVudCdzCisJICogYnVzLT5zdWJvcmRpbmF0ZSB2YWx1ZSBiZWNhdXNlIGl0IGNvdWxkIGhhdmUKKwkgKiBwYWRkaW5nIGluIGl0LgorCSAqLworCW1heCA9IGJ1cy0+c2Vjb25kYXJ5OworCisJbGlzdF9mb3JfZWFjaCh0bXAsICZidXMtPmNoaWxkcmVuKSB7CisJCW4gPSBwY2lfYnVzX21heF9idXNucihwY2lfYnVzX2IodG1wKSk7CisJCWlmIChuID4gbWF4KQorCQkJbWF4ID0gbjsKKwl9CisJcmV0dXJuIG1heDsKK30KKworCisKKy8qKgorICogIGdldF9mdW5jIC0gZ2V0IGEgcG9pbnRlciB0byBhY3BpcGhwX2Z1bmMgZ2l2ZW4gYSBzbG90LCBkZXZpY2UKKyAqICBAc2xvdDogc2xvdCB0byBzZWFyY2gKKyAqICBAZGV2OiAgcGNpX2RldiBzdHJ1Y3QgdG8gbWF0Y2guCisgKgorICogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHBjaV9kZXYsCisgKiAgc28gY2FsbGVycyBzaG91bGQgY2FsbCBwY2lfZGV2X3B1dCB3aGVuIGNvbXBsZXRlLgorICoKKyAqLworc3RhdGljIHN0cnVjdCBhY3BpcGhwX2Z1bmMgKgorZ2V0X2Z1bmMoc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdCwgc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgYWNwaXBocF9mdW5jICpmdW5jID0gTlVMTDsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gc2xvdC0+YnJpZGdlLT5wY2lfYnVzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShmdW5jLCAmc2xvdC0+ZnVuY3MsIHNpYmxpbmcpIHsKKwkJcGRldiA9IHBjaV9nZXRfc2xvdChidXMsIFBDSV9ERVZGTihzbG90LT5kZXZpY2UsCisJCQkJCWZ1bmMtPmZ1bmN0aW9uKSk7CisJCWlmIChwZGV2KSB7CisJCQlpZiAocGRldiA9PSBkZXYpCisJCQkJYnJlYWs7CisJCQlwY2lfZGV2X3B1dChwZGV2KTsKKwkJfQorCX0KKwlyZXR1cm4gZnVuYzsKK30KKworCisvKioKKyAqIGFjcGlwaHBfYnVzX2FkZCAtIGFkZCBhIG5ldyBidXMgdG8gYWNwaSBzdWJzeXN0ZW0KKyAqIEBmdW5jOiBhY3BpcGhwX2Z1bmMgb2YgdGhlIGJyaWRnZQorICoKKyAqLworc3RhdGljIGludCBhY3BpcGhwX2J1c19hZGQoc3RydWN0IGFjcGlwaHBfZnVuYyAqZnVuYykKK3sKKwlhY3BpX2hhbmRsZSBwaGFuZGxlOworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCAqcGRldmljZTsKKwlpbnQgcmV0X3ZhbDsKKworCWFjcGlfZ2V0X3BhcmVudChmdW5jLT5oYW5kbGUsICZwaGFuZGxlKTsKKwlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShwaGFuZGxlLCAmcGRldmljZSkpIHsKKwkJZGJnKCJubyBwYXJlbnQgZGV2aWNlLCBhc3N1bWluZyBOVUxMXG4iKTsKKwkJcGRldmljZSA9IE5VTEw7CisJfQorCWlmICghYWNwaV9idXNfZ2V0X2RldmljZShmdW5jLT5oYW5kbGUsICZkZXZpY2UpKSB7CisJCWRiZygiYnVzIGV4aXN0cy4uLiB0cmltXG4iKTsKKwkJLyogdGhpcyBzaG91bGRuJ3QgYmUgaW4gaGVyZSwgc28gcmVtb3ZlCisJCSAqIHRoZSBidXMgdGhlbiByZS1hZGQgaXQuLi4KKwkJICovCisJCXJldF92YWwgPSBhY3BpX2J1c190cmltKGRldmljZSwgMSk7CisJCWRiZygiYWNwaV9idXNfdHJpbSByZXR1cm4gJXhcbiIsIHJldF92YWwpOworCX0KKworCXJldF92YWwgPSBhY3BpX2J1c19hZGQoJmRldmljZSwgcGRldmljZSwgZnVuYy0+aGFuZGxlLAorCQlBQ1BJX0JVU19UWVBFX0RFVklDRSk7CisJaWYgKHJldF92YWwpIHsKKwkJZGJnKCJlcnJvciBhZGRpbmcgYnVzLCAleFxuIiwKKwkJCS1yZXRfdmFsKTsKKwkJZ290byBhY3BpcGhwX2J1c19hZGRfb3V0OworCX0KKwkvKgorCSAqIHRyeSB0byBzdGFydCBhbnl3YXkuICBXZSBjb3VsZCBoYXZlIGZhaWxlZCB0byBhZGQKKwkgKiBzaW1wbHkgYmVjYXVzZSB0aGlzIGJ1cyBoYWQgcHJldmlvdXNseSBiZWVuIGFkZGVkCisJICogb24gYW5vdGhlciBhZGQuICBEb24ndCBib3RoZXIgd2l0aCB0aGUgcmV0dXJuIHZhbHVlCisJICogd2UganVzdCBrZWVwIGdvaW5nLgorCSAqLworCXJldF92YWwgPSBhY3BpX2J1c19zdGFydChkZXZpY2UpOworCithY3BpcGhwX2J1c19hZGRfb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisKKwogLyoqCiAgKiBlbmFibGVfZGV2aWNlIC0gZW5hYmxlLCBjb25maWd1cmUgYSBzbG90CiAgKiBAc2xvdDogc2xvdCB0byBiZSBlbmFibGVkCkBAIC03ODgsNyArOTEwLDcgQEAKIAkJZ290byBlcnJfZXhpdDsKIAl9CiAKLQltYXggPSBidXMtPnNlY29uZGFyeTsKKwltYXggPSBhY3BpcGhwX21heF9idXNucihidXMpOwogCWZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CiAJCQlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgIT0gc2xvdC0+ZGV2aWNlKQpAQCAtNzk2LDggKzkxOCwxNSBAQAogCQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAogCQkJICAgIGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpIHsKIAkJCQltYXggPSBwY2lfc2Nhbl9icmlkZ2UoYnVzLCBkZXYsIG1heCwgcGFzcyk7Ci0JCQkJaWYgKHBhc3MgJiYgZGV2LT5zdWJvcmRpbmF0ZSkKKwkJCQlpZiAocGFzcyAmJiBkZXYtPnN1Ym9yZGluYXRlKSB7CiAJCQkJCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGRldi0+c3Vib3JkaW5hdGUpOworCQkJCQlmdW5jID0gZ2V0X2Z1bmMoc2xvdCwgZGV2KTsKKwkJCQkJaWYgKGZ1bmMpIHsKKwkJCQkJCWFjcGlwaHBfYnVzX2FkZChmdW5jKTsKKwkJCQkJCS8qIHNpZGUgZWZmZWN0IG9mIGdldF9mdW5jICovCisJCQkJCQlwY2lfZGV2X3B1dChkZXYpOworCQkJCQl9CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtODA2LDggKzkzNSw4IEBACiAJYWNwaXBocF9zYW5pdGl6ZV9idXMoYnVzKTsKIAlwY2lfZW5hYmxlX2JyaWRnZXMoYnVzKTsKIAlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7Ci0JYWNwaXBocF9zZXRfaHBwX3ZhbHVlcyhERVZJQ0VfQUNQSV9IQU5ETEUoJmJ1cy0+c2VsZi0+ZGV2KSwgYnVzKTsKLQlhY3BpcGhwX2NvbmZpZ3VyZV9pb2FwaWNzKERFVklDRV9BQ1BJX0hBTkRMRSgmYnVzLT5zZWxmLT5kZXYpKTsKKwlhY3BpcGhwX3NldF9ocHBfdmFsdWVzKHNsb3QtPmJyaWRnZS0+aGFuZGxlLCBidXMpOworCWFjcGlwaHBfY29uZmlndXJlX2lvYXBpY3Moc2xvdC0+YnJpZGdlLT5oYW5kbGUpOwogCiAJLyogYXNzb2NpYXRlIHBjaV9kZXYgdG8gb3VyIHJlcHJlc2VudGF0aW9uICovCiAJbGlzdF9mb3JfZWFjaCAobCwgJnNsb3QtPmZ1bmNzKSB7CkBAIC05ODcsMTEgKzExMTYsMTEgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwKIAkJCWJyaWRnZS0+aHBwLmxhdGVuY3lfdGltZXIpOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZwY2lfY21kKTsKLQlpZiAoYnJpZGdlLT5ocHAuZW5hYmxlX1NFUlIpCisJaWYgKGJyaWRnZS0+aHBwLmVuYWJsZV9zZXJyKQogCQlwY2lfY21kIHw9IFBDSV9DT01NQU5EX1NFUlI7CiAJZWxzZQogCQlwY2lfY21kICY9IH5QQ0lfQ09NTUFORF9TRVJSOwotCWlmIChicmlkZ2UtPmhwcC5lbmFibGVfUEVSUikKKwlpZiAoYnJpZGdlLT5ocHAuZW5hYmxlX3BlcnIpCiAJCXBjaV9jbWQgfD0gUENJX0NPTU1BTkRfUEFSSVRZOwogCWVsc2UKIAkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfUEFSSVRZOwpAQCAtMTAwMiwxMSArMTEzMSwxMSBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfU0VDX0xBVEVOQ1lfVElNRVIsCiAJCQkJYnJpZGdlLT5ocHAubGF0ZW5jeV90aW1lcik7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0JSSURHRV9DT05UUk9MLCAmcGNpX2JjdGwpOwotCQlpZiAoYnJpZGdlLT5ocHAuZW5hYmxlX1NFUlIpCisJCWlmIChicmlkZ2UtPmhwcC5lbmFibGVfc2VycikKIAkJCXBjaV9iY3RsIHw9IFBDSV9CUklER0VfQ1RMX1NFUlI7CiAJCWVsc2UKIAkJCXBjaV9iY3RsICY9IH5QQ0lfQlJJREdFX0NUTF9TRVJSOwotCQlpZiAoYnJpZGdlLT5ocHAuZW5hYmxlX1BFUlIpCisJCWlmIChicmlkZ2UtPmhwcC5lbmFibGVfcGVycikKIAkJCXBjaV9iY3RsIHw9IFBDSV9CUklER0VfQ1RMX1BBUklUWTsKIAkJZWxzZQogCQkJcGNpX2JjdGwgJj0gflBDSV9CUklER0VfQ1RMX1BBUklUWTsKQEAgLTEwMjYsNiArMTE1NSw3IEBACiAKIAltZW1zZXQoJmJyaWRnZSwgMCwgc2l6ZW9mKGJyaWRnZSkpOwogCWJyaWRnZS5oYW5kbGUgPSBoYW5kbGU7CisJYnJpZGdlLnBjaV9kZXYgPSBidXMtPnNlbGY7CiAJZGVjb2RlX2hwcCgmYnJpZGdlKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCiAJCXByb2dyYW1faHBwKGRldiwgJmJyaWRnZSk7CkBAIC0xMjAwLDcgKzEzMzAsNyBAQAogICogaGFuZGxlcyBBQ1BJIGV2ZW50IG5vdGlmaWNhdGlvbiBvbiBzbG90cwogICoKICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2hvdHBsdWdfZXZlbnRfZnVuYyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiB0eXBlLCB2b2lkICpjb250ZXh0KQordm9pZCBoYW5kbGVfaG90cGx1Z19ldmVudF9mdW5jKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIHR5cGUsIHZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IGFjcGlwaHBfZnVuYyAqZnVuYzsKIAljaGFyIG9iam5hbWVbNjRdOwpAQCAtMTI0Miw0MSArMTM3MiwxMyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpc19yb290X2JyaWRnZShhY3BpX2hhbmRsZSBoYW5kbGUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwotCWludCBpOwotCi0Jc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmYnVmZmVyKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwotCQlpZiAoKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpICYmCi0JCQkhc3RyY21wKFBDSV9ST09UX0hJRF9TVFJJTkcsCi0JCQkJCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlKSkgewotCQkJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQ0lEKSB7Ci0JCQlmb3IgKGk9MDsgaSA8IGluZm8tPmNvbXBhdGliaWxpdHlfaWQuY291bnQ7IGkrKykgewotCQkJCWlmICghc3RyY21wKFBDSV9ST09UX0hJRF9TVFJJTkcsCi0JCQkJCWluZm8tPmNvbXBhdGliaWxpdHlfaWQuaWRbaV0udmFsdWUpKSB7Ci0JCQkJCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7Ci0JCQkJCXJldHVybiAxOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KIAogc3RhdGljIGFjcGlfc3RhdHVzCiBmaW5kX3Jvb3RfYnJpZGdlcyhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKIHsKIAlpbnQgKmNvdW50ID0gKGludCAqKWNvbnRleHQ7CiAKLQlpZiAoaXNfcm9vdF9icmlkZ2UoaGFuZGxlKSkgeworCWlmIChhY3BpX3Jvb3RfYnJpZGdlKGhhbmRsZSkpIHsKIAkJYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGhhbmRsZSwgQUNQSV9TWVNURU1fTk9USUZZLAogCQkJCWhhbmRsZV9ob3RwbHVnX2V2ZW50X2JyaWRnZSwgTlVMTCk7CiAJCQkoKmNvdW50KSsrOwpAQCAtMTM3MywyNiArMTQ3NSw2IEBACiB9CiAjZW5kaWYKIAotLyogc2VhcmNoIG1hdGNoaW5nIHNsb3QgZnJvbSBpZCAgKi8KLXN0cnVjdCBhY3BpcGhwX3Nsb3QgKmdldF9zbG90X2Zyb21faWQoaW50IGlkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7Ci0Jc3RydWN0IGFjcGlwaHBfYnJpZGdlICpicmlkZ2U7Ci0Jc3RydWN0IGFjcGlwaHBfc2xvdCAqc2xvdDsKLQotCWxpc3RfZm9yX2VhY2ggKG5vZGUsICZicmlkZ2VfbGlzdCkgewotCQlicmlkZ2UgPSAoc3RydWN0IGFjcGlwaHBfYnJpZGdlICopbm9kZTsKLQkJZm9yIChzbG90ID0gYnJpZGdlLT5zbG90czsgc2xvdDsgc2xvdCA9IHNsb3QtPm5leHQpCi0JCQlpZiAoc2xvdC0+aWQgPT0gaWQpCi0JCQkJcmV0dXJuIHNsb3Q7Ci0JfQotCi0JLyogc2hvdWxkIG5ldmVyIGhhcHBlbiEgKi8KLQllcnIoIiVzOiBubyBvYmplY3QgZm9yIGlkICVkXG4iLCBfX0ZVTkNUSU9OX18sIGlkKTsKLQlXQVJOX09OKDEpOwotCXJldHVybiBOVUxMOwotfQotCiAKIC8qKgogICogYWNwaXBocF9lbmFibGVfc2xvdCAtIHBvd2VyIG9uIHNsb3QKQEAgLTE0MDEsNyArMTQ4Myw3IEBACiB7CiAJaW50IHJldHZhbDsKIAotCWRvd24oJnNsb3QtPmNyaXRfc2VjdCk7CisJbXV0ZXhfbG9jaygmc2xvdC0+Y3JpdF9zZWN0KTsKIAogCS8qIHdha2UgdXAgYWxsIGZ1bmN0aW9ucyAqLwogCXJldHZhbCA9IHBvd2VyX29uX3Nsb3Qoc2xvdCk7CkBAIC0xNDEzLDcgKzE0OTUsNyBAQAogCQlyZXR2YWwgPSBlbmFibGVfZGV2aWNlKHNsb3QpOwogCiAgZXJyX2V4aXQ6Ci0JdXAoJnNsb3QtPmNyaXRfc2VjdCk7CisJbXV0ZXhfdW5sb2NrKCZzbG90LT5jcml0X3NlY3QpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE0MjQsNyArMTUwNiw3IEBACiB7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkb3duKCZzbG90LT5jcml0X3NlY3QpOworCW11dGV4X2xvY2soJnNsb3QtPmNyaXRfc2VjdCk7CiAKIAkvKiB1bmNvbmZpZ3VyZSBhbGwgZnVuY3Rpb25zICovCiAJcmV0dmFsID0gZGlzYWJsZV9kZXZpY2Uoc2xvdCk7CkBAIC0xNDM3LDcgKzE1MTksNyBAQAogCQlnb3RvIGVycl9leGl0OwogCiAgZXJyX2V4aXQ6Ci0JdXAoJnNsb3QtPmNyaXRfc2VjdCk7CisJbXV0ZXhfdW5sb2NrKCZzbG90LT5jcml0X3NlY3QpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX2NvcmUuYwppbmRleCAzMGFmMTA1Li4wMzdjZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfY29yZS5jCkBAIC0yNDgsMjIgKzI0OCwxOSBAQAogCSAqIHdpdGggdGhlIHBjaV9ob3RwbHVnIHN1YnN5c3RlbS4KIAkgKi8KIAlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyArK2kpIHsKLQkJc2xvdCA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc2xvdCksIEdGUF9LRVJORUwpOworCQlzbG90ID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBzbG90KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2xvdCkKIAkJCWdvdG8gZXJyb3I7Ci0JCW1lbXNldChzbG90LCAwLCBzaXplb2YgKHN0cnVjdCBzbG90KSk7CiAKIAkJaG90cGx1Z19zbG90ID0KLQkJICAgIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaG90cGx1Z19zbG90KSwgR0ZQX0tFUk5FTCk7CisJCQlremFsbG9jKHNpemVvZiAoc3RydWN0IGhvdHBsdWdfc2xvdCksIEdGUF9LRVJORUwpOwogCQlpZiAoIWhvdHBsdWdfc2xvdCkKIAkJCWdvdG8gZXJyb3Jfc2xvdDsKLQkJbWVtc2V0KGhvdHBsdWdfc2xvdCwgMCwgc2l6ZW9mIChzdHJ1Y3QgaG90cGx1Z19zbG90KSk7CiAJCXNsb3QtPmhvdHBsdWdfc2xvdCA9IGhvdHBsdWdfc2xvdDsKIAotCQlpbmZvID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyksIEdGUF9LRVJORUwpOworCQlpbmZvID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyksIEdGUF9LRVJORUwpOwogCQlpZiAoIWluZm8pCiAJCQlnb3RvIGVycm9yX2hwc2xvdDsKLQkJbWVtc2V0KGluZm8sIDAsIHNpemVvZiAoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSk7CiAJCWhvdHBsdWdfc2xvdC0+aW5mbyA9IGluZm87CiAKIAkJbmFtZSA9IGttYWxsb2MoU0xPVF9OQU1FX1NJWkUsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKaW5kZXggY2I4ODQwNC4uYzc0ZTllMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBmb3IgcmVhZD8gYW5kIHdyaXRlPyBmdW5jdGlvbnMgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiBmb3IgZGVsYXlzICovCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBNWV9OQU1FCSJjcHFwaHAiCiAKQEAgLTI4Niw3ICsyODcsNyBAQAogc3RydWN0IGNvbnRyb2xsZXIgewogCXN0cnVjdCBjb250cm9sbGVyICpuZXh0OwogCXUzMiBjdHJsX2ludF9jb21wOwotCXN0cnVjdCBzZW1hcGhvcmUgY3JpdF9zZWN0OwkvKiBjcml0aWNhbCBzZWN0aW9uIHNlbWFwaG9yZSAqLworCXN0cnVjdCBtdXRleCBjcml0X3NlY3Q7CQkvKiBjcml0aWNhbCBzZWN0aW9uIG11dGV4ICovCiAJdm9pZCBfX2lvbWVtICpocGNfcmVnOwkJLyogY29va2llIGZvciBvdXIgcGNpIGNvbnRyb2xsZXIgbG9jYXRpb24gKi8KIAlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1faGVhZDsKIAlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9oZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY29yZS5jCmluZGV4IGIzNjU5ZmYuLjliYzFkZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jb3JlLmMKQEAgLTM0NywyNiArMzQ3LDIyIEBACiAJc2xvdF9udW1iZXIgPSBjdHJsLT5maXJzdF9zbG90OwogCiAJd2hpbGUgKG51bWJlcl9vZl9zbG90cykgewotCQlzbG90ID0ga21hbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKTsKKwkJc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKCpzbG90KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2xvdCkKIAkJCWdvdG8gZXJyb3I7CiAKLQkJbWVtc2V0KHNsb3QsIDAsIHNpemVvZihzdHJ1Y3Qgc2xvdCkpOwotCQlzbG90LT5ob3RwbHVnX3Nsb3QgPSBrbWFsbG9jKHNpemVvZigqKHNsb3QtPmhvdHBsdWdfc2xvdCkpLAorCQlzbG90LT5ob3RwbHVnX3Nsb3QgPSBremFsbG9jKHNpemVvZigqKHNsb3QtPmhvdHBsdWdfc2xvdCkpLAogCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghc2xvdC0+aG90cGx1Z19zbG90KQogCQkJZ290byBlcnJvcl9zbG90OwogCQlob3RwbHVnX3Nsb3QgPSBzbG90LT5ob3RwbHVnX3Nsb3Q7Ci0JCW1lbXNldChob3RwbHVnX3Nsb3QsIDAsIHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90KSk7CiAKIAkJaG90cGx1Z19zbG90LT5pbmZvID0KLQkJCQlrbWFsbG9jKHNpemVvZigqKGhvdHBsdWdfc2xvdC0+aW5mbykpLAorCQkJCWt6YWxsb2Moc2l6ZW9mKCooaG90cGx1Z19zbG90LT5pbmZvKSksCiAJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghaG90cGx1Z19zbG90LT5pbmZvKQogCQkJZ290byBlcnJvcl9ocHNsb3Q7CiAJCWhvdHBsdWdfc2xvdF9pbmZvID0gaG90cGx1Z19zbG90LT5pbmZvOwotCQltZW1zZXQoaG90cGx1Z19zbG90X2luZm8sIDAsCi0JCQkJc2l6ZW9mKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbykpOwogCQlob3RwbHVnX3Nsb3QtPm5hbWUgPSBrbWFsbG9jKFNMT1RfTkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAoIWhvdHBsdWdfc2xvdC0+bmFtZSkKQEAgLTU5OSw3ICs1OTUsNyBAQAogCWhwX3Nsb3QgPSBmdW5jLT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAKIAkvLyBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlCi0JZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF9sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJaWYgKHN0YXR1cyA9PSAxKSB7CiAJCWFtYmVyX0xFRF9vbiAoY3RybCwgaHBfc2xvdCk7CkBAIC02MDcsNyArNjAzLDcgQEAKIAkJYW1iZXJfTEVEX29mZiAoY3RybCwgaHBfc2xvdCk7CiAJfSBlbHNlIHsKIAkJLy8gRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MKLQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAkJcmV0dXJuKDEpOwogCX0KIApAQCAtNjE3LDcgKzYxMyw3IEBACiAJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogCiAJLy8gRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MKLQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAlyZXR1cm4oMCk7CiB9CkBAIC04NTQsMTMgKzg1MCwxMiBAQAogCQkJZ290byBlcnJfZGlzYWJsZV9kZXZpY2U7CiAJCX0KIAotCQljdHJsID0gKHN0cnVjdCBjb250cm9sbGVyICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb250cm9sbGVyKSwgR0ZQX0tFUk5FTCk7CisJCWN0cmwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29udHJvbGxlciksIEdGUF9LRVJORUwpOwogCQlpZiAoIWN0cmwpIHsKIAkJCWVycigiJXMgOiBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJcmMgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfZGlzYWJsZV9kZXZpY2U7CiAJCX0KLQkJbWVtc2V0KGN0cmwsIDAsIHNpemVvZihzdHJ1Y3QgY29udHJvbGxlcikpOwogCiAJCXJjID0gcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9JRCwgJnN1YnN5c3RlbV9kZXZpY2VpZCk7CiAJCWlmIChyYykgewpAQCAtMTA4NCw3ICsxMDc5LDcgQEAKIAlkYmcoImJ1cyBkZXZpY2UgZnVuY3Rpb24gcmV2OiAlZCAlZCAlZCAlZFxuIiwgY3RybC0+YnVzLAogCQlQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwgY3RybC0+cmV2KTsKIAotCWluaXRfTVVURVgoJmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfaW5pdCgmY3RybC0+Y3JpdF9zZWN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdHJsLT5xdWV1ZSk7CiAKIAkvKiBpbml0aWFsaXplIG91ciB0aHJlYWRzIGlmIHRoZXkgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gc3RhcnRlZCB1cCAqLwpAQCAtMTIyMyw3ICsxMjE4LDcgQEAKIAogCS8vIHR1cm4gb2ZmIGVtcHR5IHNsb3RzIGhlcmUgdW5sZXNzIGNvbW1hbmQgbGluZSBvcHRpb24gIk9OIiBzZXQKIAkvLyBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlCi0JZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF9sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJbnVtX29mX3Nsb3RzID0gcmVhZGIoY3RybC0+aHBjX3JlZyArIFNMT1RfTUFTSykgJiAweDBGOwogCkBAIC0xMjcwLDEyICsxMjY1LDEyIEBACiAJcmMgPSBpbml0X1NFUlIoY3RybCk7CiAJaWYgKHJjKSB7CiAJCWVycigiaW5pdF9TRVJSIGZhaWxlZFxuIik7Ci0JCXVwKCZjdHJsLT5jcml0X3NlY3QpOworCQltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIAogCS8vIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzCi0JdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJY3BxaHBfY3JlYXRlX2RlYnVnZnNfZmlsZXMoY3RybCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX2N0cmwuYwppbmRleCA3NzFlZDM0Li41NWQyZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfY3RybC5jCkBAIC0xMjgyLDkgKzEyODIsNyBAQAogCXU4IGhwX3Nsb3Q7CiAJdTggdGVtcF9ieXRlOwogCXU4IGFkYXB0ZXJfc3BlZWQ7Ci0JdTMyIGluZGV4OwogCXUzMiByYyA9IDA7Ci0JdTMyIHNyYyA9IDg7CiAKIAlocF9zbG90ID0gZnVuYy0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwogCkBAIC0xMjk5LDcgKzEyOTcsNyBAQAogCQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkJcmMgPSBDQVJEX0ZVTkNUSU9OSU5HOwogCX0gZWxzZSB7Ci0JCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7CisJCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAkJLyogdHVybiBvbiBib2FyZCB3aXRob3V0IGF0dGFjaGluZyB0byB0aGUgYnVzICovCiAJCWVuYWJsZV9zbG90X3Bvd2VyIChjdHJsLCBocF9zbG90KTsKQEAgLTEzMzMsMTIgKzEzMzEsMTIgQEAKIAkJLyogV2FpdCBmb3IgU09CUyB0byBiZSB1bnNldCAqLwogCQl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CiAKLQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAKLQkJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwkJbXV0ZXhfbG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAogCQlzbG90X2VuYWJsZSAoY3RybCwgaHBfc2xvdCk7CiAJCWdyZWVuX0xFRF9ibGluayAoY3RybCwgaHBfc2xvdCk7CkBAIC0xMzUwLDcgKzEzNDgsNyBAQAogCQkvKiBXYWl0IGZvciBTT0JTIHRvIGJlIHVuc2V0ICovCiAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAotCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJCS8qIFdhaXQgZm9yIH4xIHNlY29uZCBiZWNhdXNlIG9mIGhvdCBwbHVnIHNwZWMgKi8KIAkJbG9uZ19kZWxheSgxKkhaKTsKQEAgLTEzNjgsODQgKzEzNjYsMTMgQEAKIAogCQkJcmMgPSBjcHFocF9jb25maWd1cmVfYm9hcmQoY3RybCwgZnVuYyk7CiAKLQkJCWlmIChyYyB8fCBzcmMpIHsKLQkJCQkvKiBJZiBjb25maWd1cmF0aW9uIGZhaWxzLCB0dXJuIGl0IG9mZgotCQkJCSAqIEdldCBzbG90IHdvbid0IHdvcmsgZm9yIGRldmljZXMgYmVoaW5kCi0JCQkJICogYnJpZGdlcywgYnV0IGluIHRoaXMgY2FzZSBpdCB3aWxsIGFsd2F5cyBiZQotCQkJCSAqIGNhbGxlZCBmb3IgdGhlICJiYXNlIiBidXMvZGV2L2Z1bmMgb2YgYW4KLQkJCQkgKiBhZGFwdGVyLiAqLworCQkJLyogSWYgY29uZmlndXJhdGlvbiBmYWlscywgdHVybiBpdCBvZmYKKwkJCSAqIEdldCBzbG90IHdvbid0IHdvcmsgZm9yIGRldmljZXMgYmVoaW5kCisJCQkgKiBicmlkZ2VzLCBidXQgaW4gdGhpcyBjYXNlIGl0IHdpbGwgYWx3YXlzIGJlCisJCQkgKiBjYWxsZWQgZm9yIHRoZSAiYmFzZSIgYnVzL2Rldi9mdW5jIG9mIGFuCisJCQkgKiBhZGFwdGVyLiAqLwogCi0JCQkJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKLQotCQkJCWFtYmVyX0xFRF9vbiAoY3RybCwgaHBfc2xvdCk7Ci0JCQkJZ3JlZW5fTEVEX29mZiAoY3RybCwgaHBfc2xvdCk7Ci0JCQkJc2xvdF9kaXNhYmxlIChjdHJsLCBocF9zbG90KTsKLQotCQkJCXNldF9TT0dPKGN0cmwpOwotCi0JCQkJLyogV2FpdCBmb3IgU09CUyB0byBiZSB1bnNldCAqLwotCQkJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKLQotCQkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOwotCi0JCQkJaWYgKHJjKQotCQkJCQlyZXR1cm4gcmM7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gMTsKLQkJCX0KLQotCQkJZnVuYy0+c3RhdHVzID0gMDsKLQkJCWZ1bmMtPnN3aXRjaF9zYXZlID0gMHgxMDsKLQotCQkJaW5kZXggPSAxOwotCQkJd2hpbGUgKCgoZnVuYyA9IGNwcWhwX3Nsb3RfZmluZChmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgaW5kZXgpKSAhPSBOVUxMKSAmJiAhcmMpIHsKLQkJCQlyYyB8PSBjcHFocF9jb25maWd1cmVfYm9hcmQoY3RybCwgZnVuYyk7Ci0JCQkJaW5kZXgrKzsKLQkJCX0KLQotCQkJaWYgKHJjKSB7Ci0JCQkJLyogSWYgY29uZmlndXJhdGlvbiBmYWlscywgdHVybiBpdCBvZmYKLQkJCQkgKiBHZXQgc2xvdCB3b24ndCB3b3JrIGZvciBkZXZpY2VzIGJlaGluZAotCQkJCSAqIGJyaWRnZXMsIGJ1dCBpbiB0aGlzIGNhc2UgaXQgd2lsbCBhbHdheXMgYmUKLQkJCQkgKiBjYWxsZWQgZm9yIHRoZSAiYmFzZSIgYnVzL2Rldi9mdW5jIG9mIGFuCi0JCQkJICogYWRhcHRlci4gKi8KLQotCQkJCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7Ci0KLQkJCQlhbWJlcl9MRURfb24gKGN0cmwsIGhwX3Nsb3QpOwotCQkJCWdyZWVuX0xFRF9vZmYgKGN0cmwsIGhwX3Nsb3QpOwotCQkJCXNsb3RfZGlzYWJsZSAoY3RybCwgaHBfc2xvdCk7Ci0KLQkJCQlzZXRfU09HTyhjdHJsKTsKLQotCQkJCS8qIFdhaXQgZm9yIFNPQlMgdG8gYmUgdW5zZXQgKi8KLQkJCQl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7Ci0KLQkJCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLQotCQkJCXJldHVybiByYzsKLQkJCX0KLQkJCS8qIERvbmUgY29uZmlndXJpbmcgc28gdHVybiBMRUQgb24gZnVsbCB0aW1lICovCi0KLQkJCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7Ci0KLQkJCWdyZWVuX0xFRF9vbiAoY3RybCwgaHBfc2xvdCk7Ci0KLQkJCXNldF9TT0dPKGN0cmwpOwotCi0JCQkvKiBXYWl0IGZvciBTT0JTIHRvIGJlIHVuc2V0ICovCi0JCQl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7Ci0KLQkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOwotCQkJcmMgPSAwOwotCQl9IGVsc2UgewotCQkJLyogU29tZXRoaW5nIGlzIHdyb25nCi0KLQkJCSAqIEdldCBzbG90IHdvbid0IHdvcmsgZm9yIGRldmljZXMgYmVoaW5kIGJyaWRnZXMsIGJ1dAotCQkJICogaW4gdGhpcyBjYXNlIGl0IHdpbGwgYWx3YXlzIGJlIGNhbGxlZCBmb3IgdGhlICJiYXNlIgotCQkJICogYnVzL2Rldi9mdW5jIG9mIGFuIGFkYXB0ZXIuICovCi0KLQkJCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF9sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJCQlhbWJlcl9MRURfb24gKGN0cmwsIGhwX3Nsb3QpOwogCQkJZ3JlZW5fTEVEX29mZiAoY3RybCwgaHBfc2xvdCk7CkBAIC0xNDU2LDcgKzEzODMsMzIgQEAKIAkJCS8qIFdhaXQgZm9yIFNPQlMgdG8gYmUgdW5zZXQgKi8KIAkJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAotCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CisKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisJCQllbHNlCisJCQkJcmV0dXJuIDE7CisKKwkJfSBlbHNlIHsKKwkJCS8qIFNvbWV0aGluZyBpcyB3cm9uZworCisJCQkgKiBHZXQgc2xvdCB3b24ndCB3b3JrIGZvciBkZXZpY2VzIGJlaGluZCBicmlkZ2VzLCBidXQKKwkJCSAqIGluIHRoaXMgY2FzZSBpdCB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgZm9yIHRoZSAiYmFzZSIKKwkJCSAqIGJ1cy9kZXYvZnVuYyBvZiBhbiBhZGFwdGVyLiAqLworCisJCQltdXRleF9sb2NrKCZjdHJsLT5jcml0X3NlY3QpOworCisJCQlhbWJlcl9MRURfb24gKGN0cmwsIGhwX3Nsb3QpOworCQkJZ3JlZW5fTEVEX29mZiAoY3RybCwgaHBfc2xvdCk7CisJCQlzbG90X2Rpc2FibGUgKGN0cmwsIGhwX3Nsb3QpOworCisJCQlzZXRfU09HTyhjdHJsKTsKKworCQkJLyogV2FpdCBmb3IgU09CUyB0byBiZSB1bnNldCAqLworCQkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOworCisJCQltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAJCX0KIAogCX0KQEAgLTE0ODgsNyArMTQ0MCw3IEBACiAJZGJnKCIlczogZnVuYy0+ZGV2aWNlLCBzbG90X29mZnNldCwgaHBfc2xvdCA9ICVkLCAlZCAsJWRcbiIsCiAJICAgIF9fRlVOQ1RJT05fXywgZnVuYy0+ZGV2aWNlLCBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQsIGhwX3Nsb3QpOwogCi0JZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF9sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJLyogdHVybiBvbiBib2FyZCB3aXRob3V0IGF0dGFjaGluZyB0byB0aGUgYnVzICovCiAJZW5hYmxlX3Nsb3RfcG93ZXIoY3RybCwgaHBfc2xvdCk7CkBAIC0xNTIyLDcgKzE0NzQsNyBAQAogCS8qIFdhaXQgZm9yIFNPQlMgdG8gYmUgdW5zZXQgKi8KIAl3YWl0X2Zvcl9jdHJsX2lycShjdHJsKTsKIAotCXVwKCZjdHJsLT5jcml0X3NlY3QpOworCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtMTUzMiw3ICsxNDg0LDcgQEAKIAkvKiB0dXJuIG9uIGJvYXJkIGFuZCBibGluayBncmVlbiBMRUQgKi8KIAogCWRiZygiJXM6IGJlZm9yZSBkb3duXG4iLCBfX0ZVTkNUSU9OX18pOwotCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfbG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAlkYmcoIiVzOiBhZnRlciBkb3duXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJZGJnKCIlczogYmVmb3JlIHNsb3RfZW5hYmxlXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMTU1Myw3ICsxNTA1LDcgQEAKIAlkYmcoIiVzOiBhZnRlciB3YWl0X2Zvcl9jdHJsX2lycVxuIiwgX19GVU5DVElPTl9fKTsKIAogCWRiZygiJXM6IGJlZm9yZSB1cFxuIiwgX19GVU5DVElPTl9fKTsKLQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAJZGJnKCIlczogYWZ0ZXIgdXBcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBXYWl0IGZvciB+MSBzZWNvbmQgYmVjYXVzZSBvZiBob3QgcGx1ZyBzcGVjICovCkBAIC0xNjA3LDcgKzE1NTksNyBAQAogCQljcHFocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+YnVzX2hlYWQpKTsKIAogCQlpZiAocmMpIHsKLQkJCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF9sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJCQlhbWJlcl9MRURfb24gKGN0cmwsIGhwX3Nsb3QpOwogCQkJZ3JlZW5fTEVEX29mZiAoY3RybCwgaHBfc2xvdCk7CkBAIC0xNjE4LDcgKzE1NzAsNyBAQAogCQkJLyogV2FpdCBmb3IgU09CUyB0byBiZSB1bnNldCAqLwogCQkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogCi0JCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwkJCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiByYzsKIAkJfSBlbHNlIHsKIAkJCWNwcWhwX3NhdmVfc2xvdF9jb25maWcoY3RybCwgZnVuYyk7CkBAIC0xNjQwLDcgKzE1OTIsNyBAQAogCQkJfQogCQl9IHdoaWxlIChuZXdfc2xvdCk7CiAKLQkJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwkJbXV0ZXhfbG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAogCQlncmVlbl9MRURfb24gKGN0cmwsIGhwX3Nsb3QpOwogCkBAIC0xNjQ5LDkgKzE2MDEsOSBAQAogCQkvKiBXYWl0IGZvciBTT0JTIHRvIGJlIHVuc2V0ICovCiAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAotCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCX0gZWxzZSB7Ci0JCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7CisJCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAkJYW1iZXJfTEVEX29uIChjdHJsLCBocF9zbG90KTsKIAkJZ3JlZW5fTEVEX29mZiAoY3RybCwgaHBfc2xvdCk7CkBAIC0xNjYyLDcgKzE2MTQsNyBAQAogCQkvKiBXYWl0IGZvciBTT0JTIHRvIGJlIHVuc2V0ICovCiAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAotCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJCXJldHVybiByYzsKIAl9CkBAIC0xNzIxLDcgKzE2NzMsNyBAQAogCQlmdW5jLT5zdGF0dXMgPSAweDAxOwogCWZ1bmMtPmNvbmZpZ3VyZWQgPSAwOwogCi0JZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF9sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJZ3JlZW5fTEVEX29mZiAoY3RybCwgaHBfc2xvdCk7CiAJc2xvdF9kaXNhYmxlIChjdHJsLCBocF9zbG90KTsKQEAgLTE3MzYsNyArMTY4OCw3IEBACiAJLyogV2FpdCBmb3IgU09CUyB0byBiZSB1bnNldCAqLwogCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAotCXVwKCZjdHJsLT5jcml0X3NlY3QpOworCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAogCWlmICghcmVwbGFjZV9mbGFnICYmIGN0cmwtPmFkZF9zdXBwb3J0KSB7CiAJCXdoaWxlIChmdW5jKSB7CkBAIC0xODk5LDcgKzE4NTEsNyBAQAogCQkJCQlkYmcoImJ1dHRvbiBjYW5jZWxcbiIpOwogCQkJCQlkZWxfdGltZXIoJnBfc2xvdC0+dGFza19ldmVudCk7CiAKLQkJCQkJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwkJCQkJbXV0ZXhfbG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAogCQkJCQlpZiAocF9zbG90LT5zdGF0ZSA9PSBCTElOS0lOR09GRl9TVEFURSkgewogCQkJCQkJLyogc2xvdCBpcyBvbiAqLwpAQCAtMTkyMiw3ICsxODc0LDcgQEAKIAkJCQkJLyogV2FpdCBmb3IgU09CUyB0byBiZSB1bnNldCAqLwogCQkJCQl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CiAKLQkJCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCQkJCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAkJCQl9CiAJCQkJLyoqKiBidXR0b24gUmVsZWFzZWQgKE5vIGFjdGlvbiBvbiBwcmVzcy4uLikgKi8KIAkJCQllbHNlIGlmIChjdHJsLT5ldmVudF9xdWV1ZVtsb29wXS5ldmVudF90eXBlID09IElOVF9CVVRUT05fUkVMRUFTRSkgewpAQCAtMTkzNyw3ICsxODg5LDcgQEAKIAkJCQkJCXBfc2xvdC0+c3RhdGUgPSBCTElOS0lOR09OX1NUQVRFOwogCQkJCQkJaW5mbyhtc2dfYnV0dG9uX29uLCBwX3Nsb3QtPm51bWJlcik7CiAJCQkJCX0KLQkJCQkJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwkJCQkJbXV0ZXhfbG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAkJCQkJCiAJCQkJCWRiZygiYmxpbmsgZ3JlZW4gTEVEIGFuZCB0dXJuIG9mZiBhbWJlclxuIik7CiAJCQkJCQpAQCAtMTk0OSw3ICsxOTAxLDcgQEAKIAkJCQkJLyogV2FpdCBmb3IgU09CUyB0byBiZSB1bnNldCAqLwogCQkJCQl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CiAKLQkJCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCQkJCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAkJCQkJaW5pdF90aW1lcigmcF9zbG90LT50YXNrX2V2ZW50KTsKIAkJCQkJcF9zbG90LT5ocF9zbG90ID0gaHBfc2xvdDsKIAkJCQkJcF9zbG90LT5jdHJsID0gY3RybDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKaW5kZXggMDYwZDc0Ny4uNzFiODBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKQEAgLTk1LDE1ICs5NSwxMyBAQAogCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3Q7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKLQlzbG90ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdCksIEdGUF9LRVJORUwpOworCXNsb3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzbG90KQogCQlnb3RvIGVycm9yOwotCW1lbXNldChzbG90LCAwLCBzaXplb2YoKnNsb3QpKTsKIAotCXNsb3QtPmluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlzbG90LT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzbG90LT5pbmZvKQogCQlnb3RvIGVycm9yX3Nsb3Q7Ci0JbWVtc2V0KHNsb3QtPmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8pKTsKIAogCXNsb3QtPmluZm8tPnBvd2VyX3N0YXR1cyA9IDE7CiAJc2xvdC0+aW5mby0+bWF4X2J1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwpAQCAtMjI3LDExICsyMjUsMTAgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZGV2Zm47CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKLQlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2RldiksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybjsKIAotCW1lbXNldChkZXYsIDAsIHNpemVvZihkZXYpKTsKIAlkZXYtPmJ1cyA9IChzdHJ1Y3QgcGNpX2J1cyopYnVzOwogCWRldi0+c3lzZGF0YSA9IGJ1cy0+c3lzZGF0YTsKIAlmb3IgKGRldmZuID0gMDsgZGV2Zm4gPCAweDEwMDsgZGV2Zm4gKz0gOCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwLmgKaW5kZXggYzIyZTAyOC4uZGJhNmQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocC5oCkBAIC00MDYsOCArNDA2LDYgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gSFBDIHJldHVybiBjb2RlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZGVmaW5lIEZBTFNFCQkJCTB4MDAKLSNkZWZpbmUgVFJVRQkJCQkweDAxCiAjZGVmaW5lIEhQQ19FUlJPUgkJCTB4RkYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfY29yZS5jCmluZGV4IGRjNTlkYTYuLmUxM2Q1YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9jb3JlLmMKQEAgLTExNDEsNyArMTE0MSw3IEBACiAJCWdvdG8gZXJyb3JfcG93ZXI7CiAJfQogCi0Jc2xvdF9jdXItPmZ1bmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpLCBHRlBfS0VSTkVMKTsKKwlzbG90X2N1ci0+ZnVuYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfZnVuYyksIEdGUF9LRVJORUwpOwogCWlmICghc2xvdF9jdXItPmZ1bmMpIHsKIAkJLyogV2UgY2Fubm90IGRvIHVwZGF0ZV9zbG90X2luZm8gaGVyZSwgc2luY2Ugbm8gbWVtb3J5IGZvcgogCQkgKiBrbWFsbG9jIG4uZS53YXlzLCBhbmQgdXBkYXRlX3Nsb3RfaW5mbyBhbGxvY2F0ZXMgc29tZSAqLwpAQCAtMTE0OSw3ICsxMTQ5LDYgQEAKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX3Bvd2VyOwogCX0KLQltZW1zZXQoc2xvdF9jdXItPmZ1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKIAlzbG90X2N1ci0+ZnVuYy0+YnVzbm8gPSBzbG90X2N1ci0+YnVzOwogCXNsb3RfY3VyLT5mdW5jLT5kZXZpY2UgPSBzbG90X2N1ci0+ZGV2aWNlOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCkBAIC0xMjQwLDkgKzEyMzksOSBAQAogCX0KIAkKIAlmbGFnID0gc2xvdF9jdXItPmZsYWc7Ci0Jc2xvdF9jdXItPmZsYWcgPSBUUlVFOworCXNsb3RfY3VyLT5mbGFnID0gMTsKIAotCWlmIChmbGFnID09IFRSVUUpIHsKKwlpZiAoZmxhZyA9PSAxKSB7CiAJCXJjID0gdmFsaWRhdGUoc2xvdF9jdXIsIERJU0FCTEUpOwogCQkJLyogY2hlY2tpbmcgaWYgcG93ZXJlZCBvZmYgYWxyZWFkeSAmIHZhbGlkIHNsb3QgIyAqLwogCQlpZiAocmMpCkBAIC0xMjUyLDEzICsxMjUxLDEyIEBACiAKIAlpZiAoc2xvdF9jdXItPmZ1bmMgPT0gTlVMTCkgewogCQkvKiBXZSBuZWVkIHRoaXMgZm9yIGZuY3MncyB0aGF0IHdlcmUgdGhlcmUgb24gYm9vdHVwICovCi0JCXNsb3RfY3VyLT5mdW5jID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9mdW5jKSwgR0ZQX0tFUk5FTCk7CisJCXNsb3RfY3VyLT5mdW5jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9mdW5jKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2xvdF9jdXItPmZ1bmMpIHsKIAkJCWVycigib3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQkJcmMgPSAtRU5PTUVNOwogCQkJZ290byBlcnJvcjsKIAkJfQotCQltZW1zZXQoc2xvdF9jdXItPmZ1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKIAkJc2xvdF9jdXItPmZ1bmMtPmJ1c25vID0gc2xvdF9jdXItPmJ1czsKIAkJc2xvdF9jdXItPmZ1bmMtPmRldmljZSA9IHNsb3RfY3VyLT5kZXZpY2U7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfZWJkYS5jCmluZGV4IGFlYTExODcuLjA1ZTRmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2ViZGEuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9lYmRhLmMKQEAgLTcyLDEzICs3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZWJkYV9ocGNfbGlzdCAqIF9faW5pdCBhbGxvY19lYmRhX2hwY19saXN0ICh2b2lkKQogewotCXN0cnVjdCBlYmRhX2hwY19saXN0ICpsaXN0OwotCi0JbGlzdCA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IGViZGFfaHBjX2xpc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxpc3QpCi0JCXJldHVybiBOVUxMOwotCW1lbXNldCAobGlzdCwgMCwgc2l6ZW9mICgqbGlzdCkpOwotCXJldHVybiBsaXN0OworCXJldHVybiBremFsbG9jKHNpemVvZihzdHJ1Y3QgZWJkYV9ocGNfbGlzdCksIEdGUF9LRVJORUwpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbnRyb2xsZXIgKmFsbG9jX2ViZGFfaHBjICh1MzIgc2xvdF9jb3VudCwgdTMyIGJ1c19jb3VudCkKQEAgLTg3LDIxICs4MSwxOCBAQAogCXN0cnVjdCBlYmRhX2hwY19zbG90ICpzbG90czsKIAlzdHJ1Y3QgZWJkYV9ocGNfYnVzICpidXNlczsKIAotCWNvbnRyb2xsZXIgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBjb250cm9sbGVyKSwgR0ZQX0tFUk5FTCk7CisJY29udHJvbGxlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb250cm9sbGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjb250cm9sbGVyKQogCQlnb3RvIGVycm9yOwotCW1lbXNldCAoY29udHJvbGxlciwgMCwgc2l6ZW9mICgqY29udHJvbGxlcikpOwogCi0Jc2xvdHMgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBlYmRhX2hwY19zbG90KSAqIHNsb3RfY291bnQsIEdGUF9LRVJORUwpOworCXNsb3RzID0ga2NhbGxvYyhzbG90X2NvdW50LCBzaXplb2Yoc3RydWN0IGViZGFfaHBjX3Nsb3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNsb3RzKQogCQlnb3RvIGVycm9yX2NvbnRyOwotCW1lbXNldCAoc2xvdHMsIDAsIHNpemVvZiAoKnNsb3RzKSAqIHNsb3RfY291bnQpOwogCWNvbnRyb2xsZXItPnNsb3RzID0gc2xvdHM7CiAKLQlidXNlcyA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IGViZGFfaHBjX2J1cykgKiBidXNfY291bnQsIEdGUF9LRVJORUwpOworCWJ1c2VzID0ga2NhbGxvYyhidXNfY291bnQsIHNpemVvZihzdHJ1Y3QgZWJkYV9ocGNfYnVzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidXNlcykKIAkJZ290byBlcnJvcl9zbG90czsKLQltZW1zZXQgKGJ1c2VzLCAwLCBzaXplb2YgKCpidXNlcykgKiBidXNfY291bnQpOwogCWNvbnRyb2xsZXItPmJ1c2VzID0gYnVzZXM7CiAKIAlyZXR1cm4gY29udHJvbGxlcjsKQEAgLTEyMiwyNCArMTEzLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZWJkYV9yc3JjX2xpc3QgKiBfX2luaXQgYWxsb2NfZWJkYV9yc3JjX2xpc3QgKHZvaWQpCiB7Ci0Jc3RydWN0IGViZGFfcnNyY19saXN0ICpsaXN0OwotCi0JbGlzdCA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IGViZGFfcnNyY19saXN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsaXN0KQotCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQgKGxpc3QsIDAsIHNpemVvZiAoKmxpc3QpKTsKLQlyZXR1cm4gbGlzdDsKKwlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGViZGFfcnNyY19saXN0KSwgR0ZQX0tFUk5FTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZWJkYV9wY2lfcnNyYyAqYWxsb2NfZWJkYV9wY2lfcnNyYyAodm9pZCkKIHsKLQlzdHJ1Y3QgZWJkYV9wY2lfcnNyYyAqcmVzb3VyY2U7Ci0KLQlyZXNvdXJjZSA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IGViZGFfcGNpX3JzcmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlc291cmNlKQotCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQgKHJlc291cmNlLCAwLCBzaXplb2YgKCpyZXNvdXJjZSkpOwotCXJldHVybiByZXNvdXJjZTsKKwlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGViZGFfcGNpX3JzcmMpLCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHByaW50X2J1c19pbmZvICh2b2lkKQpAQCAtMzkwLDEwICszNjksOSBAQAogCQkJZGVidWcgKCJub3cgZW50ZXIgaW8gdGFibGUgLS0tXG4iKTsKIAkJCWRlYnVnICgicmlvIGJsayBpZDogJXhcbiIsIGJsa19pZCk7CiAKLQkJCXJpb190YWJsZV9wdHIgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCByaW9fdGFibGVfaGRyKSwgR0ZQX0tFUk5FTCk7CisJCQlyaW9fdGFibGVfcHRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJpb190YWJsZV9oZHIpLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghcmlvX3RhYmxlX3B0cikKIAkJCQlyZXR1cm4gLUVOT01FTTsgCi0JCQltZW1zZXQgKHJpb190YWJsZV9wdHIsIDAsIHNpemVvZiAoc3RydWN0IHJpb190YWJsZV9oZHIpICk7CiAJCQlyaW9fdGFibGVfcHRyLT52ZXJfbnVtID0gcmVhZGIgKGlvX21lbSArIG9mZnNldCk7CiAJCQlyaW9fdGFibGVfcHRyLT5zY2FsX2NvdW50ID0gcmVhZGIgKGlvX21lbSArIG9mZnNldCArIDEpOwogCQkJcmlvX3RhYmxlX3B0ci0+cmlvZGV2X2NvdW50ID0gcmVhZGIgKGlvX21lbSArIG9mZnNldCArIDIpOwpAQCAtNDQ1LDEwICs0MjMsOSBAQAogCiAJLy8gd2UgZG8gY29uY2VybiBhYm91dCByaW8gZGV0YWlscwogCWZvciAoaSA9IDA7IGkgPCByaW9fdGFibGVfcHRyLT5yaW9kZXZfY291bnQ7IGkrKykgewotCQlyaW9fZGV0YWlsX3B0ciA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHJpb19kZXRhaWwpLCBHRlBfS0VSTkVMKTsKKwkJcmlvX2RldGFpbF9wdHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmlvX2RldGFpbCksIEdGUF9LRVJORUwpOwogCQlpZiAoIXJpb19kZXRhaWxfcHRyKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1lbXNldCAocmlvX2RldGFpbF9wdHIsIDAsIHNpemVvZiAoc3RydWN0IHJpb19kZXRhaWwpKTsKIAkJcmlvX2RldGFpbF9wdHItPnJpb19ub2RlX2lkID0gcmVhZGIgKGlvX21lbSArIG9mZnNldCk7CiAJCXJpb19kZXRhaWxfcHRyLT5iYmFyID0gcmVhZGwgKGlvX21lbSArIG9mZnNldCArIDEpOwogCQlyaW9fZGV0YWlsX3B0ci0+cmlvX3R5cGUgPSByZWFkYiAoaW9fbWVtICsgb2Zmc2V0ICsgNSk7CkBAIC01MDMsMTAgKzQ4MCw5IEBACiAJCXJpb19kZXRhaWxfcHRyID0gbGlzdF9lbnRyeSAobGlzdF9oZWFkX3B0ciwgc3RydWN0IHJpb19kZXRhaWwsIHJpb19kZXRhaWxfbGlzdCk7CiAJCW9wdF9yaW9fcHRyID0gc2VhcmNoX29wdF92ZyAocmlvX2RldGFpbF9wdHItPmNoYXNzaXNfbnVtKTsKIAkJaWYgKCFvcHRfcmlvX3B0cikgewotCQkJb3B0X3Jpb19wdHIgPSAoc3RydWN0IG9wdF9yaW8gKikga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3Qgb3B0X3JpbyksIEdGUF9LRVJORUwpOworCQkJb3B0X3Jpb19wdHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3B0X3JpbyksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFvcHRfcmlvX3B0cikKIAkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCW1lbXNldCAob3B0X3Jpb19wdHIsIDAsIHNpemVvZiAoc3RydWN0IG9wdF9yaW8pKTsKIAkJCW9wdF9yaW9fcHRyLT5yaW9fdHlwZSA9IHJpb19kZXRhaWxfcHRyLT5yaW9fdHlwZTsKIAkJCW9wdF9yaW9fcHRyLT5jaGFzc2lzX251bSA9IHJpb19kZXRhaWxfcHRyLT5jaGFzc2lzX251bTsKIAkJCW9wdF9yaW9fcHRyLT5maXJzdF9zbG90X251bSA9IHJpb19kZXRhaWxfcHRyLT5maXJzdF9zbG90X251bTsKQEAgLTU0NiwxMCArNTIyLDkgQEAKIAkJcmlvX2RldGFpbF9wdHIgPSBsaXN0X2VudHJ5IChsaXN0X2hlYWRfcHRyLCBzdHJ1Y3QgcmlvX2RldGFpbCwgcmlvX2RldGFpbF9saXN0KTsKIAkJb3B0X3Jpb19sb19wdHIgPSBzZWFyY2hfb3B0X2xvIChyaW9fZGV0YWlsX3B0ci0+Y2hhc3Npc19udW0pOwogCQlpZiAoIW9wdF9yaW9fbG9fcHRyKSB7Ci0JCQlvcHRfcmlvX2xvX3B0ciA9IChzdHJ1Y3Qgb3B0X3Jpb19sbyAqKSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBvcHRfcmlvX2xvKSwgR0ZQX0tFUk5FTCk7CisJCQlvcHRfcmlvX2xvX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvcHRfcmlvX2xvKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIW9wdF9yaW9fbG9fcHRyKQogCQkJCXJldHVybiAtRU5PTUVNOwotCQkJbWVtc2V0IChvcHRfcmlvX2xvX3B0ciwgMCwgc2l6ZW9mIChzdHJ1Y3Qgb3B0X3Jpb19sbykpOwogCQkJb3B0X3Jpb19sb19wdHItPnJpb190eXBlID0gcmlvX2RldGFpbF9wdHItPnJpb190eXBlOwogCQkJb3B0X3Jpb19sb19wdHItPmNoYXNzaXNfbnVtID0gcmlvX2RldGFpbF9wdHItPmNoYXNzaXNfbnVtOwogCQkJb3B0X3Jpb19sb19wdHItPmZpcnN0X3Nsb3RfbnVtID0gcmlvX2RldGFpbF9wdHItPmZpcnN0X3Nsb3RfbnVtOwpAQCAtODQyLDEyICs4MTcsMTEgQEAKIAogCQkJYnVzX2luZm9fcHRyMiA9IGlibXBocF9maW5kX3NhbWVfYnVzX251bSAoc2xvdF9wdHItPnNsb3RfYnVzX251bSk7CiAJCQlpZiAoIWJ1c19pbmZvX3B0cjIpIHsKLQkJCQlidXNfaW5mb19wdHIxID0gKHN0cnVjdCBidXNfaW5mbyAqKSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBidXNfaW5mbyksIEdGUF9LRVJORUwpOworCQkJCWJ1c19pbmZvX3B0cjEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnVzX2luZm8pLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIWJ1c19pbmZvX3B0cjEpIHsKIAkJCQkJcmMgPSAtRU5PTUVNOwogCQkJCQlnb3RvIGVycm9yX25vX2hwX3Nsb3Q7CiAJCQkJfQotCQkJCW1lbXNldCAoYnVzX2luZm9fcHRyMSwgMCwgc2l6ZW9mIChzdHJ1Y3QgYnVzX2luZm8pKTsKIAkJCQlidXNfaW5mb19wdHIxLT5zbG90X21pbiA9IHNsb3RfcHRyLT5zbG90X251bTsKIAkJCQlidXNfaW5mb19wdHIxLT5zbG90X21heCA9IHNsb3RfcHRyLT5zbG90X251bTsKIAkJCQlidXNfaW5mb19wdHIxLT5zbG90X2NvdW50ICs9IDE7CkBAIC05NDYsMTkgKzkyMCwxNyBAQAogCQkvLyByZWdpc3RlciBzbG90cyB3aXRoIGhwYyBjb3JlIGFzIHdlbGwgYXMgY3JlYXRlIGxpbmtlZCBsaXN0IG9mIGlibSBzbG90CiAJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGhwY19wdHItPnNsb3RfY291bnQ7IGluZGV4KyspIHsKIAotCQkJaHBfc2xvdF9wdHIgPSBrbWFsbG9jKHNpemVvZigqaHBfc2xvdF9wdHIpLCBHRlBfS0VSTkVMKTsKKwkJCWhwX3Nsb3RfcHRyID0ga3phbGxvYyhzaXplb2YoKmhwX3Nsb3RfcHRyKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWhwX3Nsb3RfcHRyKSB7CiAJCQkJcmMgPSAtRU5PTUVNOwogCQkJCWdvdG8gZXJyb3Jfbm9faHBfc2xvdDsKIAkJCX0KLQkJCW1lbXNldChocF9zbG90X3B0ciwgMCwgc2l6ZW9mKCpocF9zbG90X3B0cikpOwogCi0JCQlocF9zbG90X3B0ci0+aW5mbyA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8pLCBHRlBfS0VSTkVMKTsKKwkJCWhwX3Nsb3RfcHRyLT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWhwX3Nsb3RfcHRyLT5pbmZvKSB7CiAJCQkJcmMgPSAtRU5PTUVNOwogCQkJCWdvdG8gZXJyb3Jfbm9faHBfaW5mbzsKIAkJCX0KLQkJCW1lbXNldChocF9zbG90X3B0ci0+aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbykpOwogCiAJCQlocF9zbG90X3B0ci0+bmFtZSA9IGttYWxsb2MoMzAsIEdGUF9LRVJORUwpOwogCQkJaWYgKCFocF9zbG90X3B0ci0+bmFtZSkgewpAQCAtOTY2LDE0ICs5MzgsMTMgQEAKIAkJCQlnb3RvIGVycm9yX25vX2hwX25hbWU7CiAJCQl9CiAKLQkJCXRtcF9zbG90ID0ga21hbGxvYyhzaXplb2YoKnRtcF9zbG90KSwgR0ZQX0tFUk5FTCk7CisJCQl0bXBfc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBfc2xvdCksIEdGUF9LRVJORUwpOwogCQkJaWYgKCF0bXBfc2xvdCkgewogCQkJCXJjID0gLUVOT01FTTsKIAkJCQlnb3RvIGVycm9yX25vX3Nsb3Q7CiAJCQl9Ci0JCQltZW1zZXQodG1wX3Nsb3QsIDAsIHNpemVvZigqdG1wX3Nsb3QpKTsKIAotCQkJdG1wX3Nsb3QtPmZsYWcgPSBUUlVFOworCQkJdG1wX3Nsb3QtPmZsYWcgPSAxOwogCiAJCQl0bXBfc2xvdC0+Y2FwYWJpbGl0aWVzID0gaHBjX3B0ci0+c2xvdHNbaW5kZXhdLnNsb3RfY2FwOwogCQkJaWYgKChocGNfcHRyLT5zbG90c1tpbmRleF0uc2xvdF9jYXAgJiBFQkRBX1NMT1RfMTMzX01BWCkgPT0gRUJEQV9TTE9UXzEzM19NQVgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCmluZGV4IDFhM2ViOGQuLmMzYWM5OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX2hwYy5jCkBAIC0zNCw5ICszNCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlICJpYm1waHAuaCIKIAotc3RhdGljIGludCB0b19kZWJ1ZyA9IEZBTFNFOworc3RhdGljIGludCB0b19kZWJ1ZyA9IDA7CiAjZGVmaW5lIGRlYnVnX3BvbGxpbmcoZm10LCBhcmcuLi4pCWRvIHsgaWYgKHRvX2RlYnVnKSBkZWJ1ZyAoZm10LCBhcmcpOyB9IHdoaWxlICgwKQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkzLDE1ICs5NSwxNSBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBtYWNybyB1dGlsaXRpZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gaWYgYml0cyAyMCwyMiwyNSwyNiwyNywyOSwzMCBhcmUgT0ZGIHJldHVybiBUUlVFCi0jZGVmaW5lIEhQQ19JMkNTVEFUVVNfQ0hFQ0socykJKCh1OCkoKHMgJiAweDAwMDAwQTc2KSA/IEZBTFNFIDogVFJVRSkpCisvLyBpZiBiaXRzIDIwLDIyLDI1LDI2LDI3LDI5LDMwIGFyZSBPRkYgcmV0dXJuIDEKKyNkZWZpbmUgSFBDX0kyQ1NUQVRVU19DSEVDSyhzKQkoKHU4KSgocyAmIDB4MDAwMDBBNzYpID8gMCA6IDEpKQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGdsb2JhbCB2YXJpYWJsZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIGludCBpYm1waHBfc2h1dGRvd247CiBzdGF0aWMgaW50IHRpZF9wb2xsOwotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgc2VtX2hwY2FjY2VzczsJLy8gbG9jayBhY2Nlc3MgdG8gSFBDCitzdGF0aWMgc3RydWN0IG11dGV4IHNlbV9ocGNhY2Nlc3M7CS8vIGxvY2sgYWNjZXNzIHRvIEhQQwogc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgc2VtT3BlcmF0aW9uczsJLy8gbG9jayBhbGwgb3BlcmF0aW9ucyBhbmQKIAkJCQkJLy8gYWNjZXNzIHRvIGRhdGEgc3RydWN0dXJlcwogc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgc2VtX2V4aXQ7CS8vIG1ha2Ugc3VyZSBwb2xsaW5nIHRocmVhZCBnb2VzIGF3YXkKQEAgLTEzMSwxMSArMTMzLDExIEBACiB7CiAJZGVidWcgKCIlcyAtIEVudHJ5XG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JaW5pdF9NVVRFWCAoJnNlbV9ocGNhY2Nlc3MpOworCW11dGV4X2luaXQoJnNlbV9ocGNhY2Nlc3MpOwogCWluaXRfTVVURVggKCZzZW1PcGVyYXRpb25zKTsKIAlpbml0X01VVEVYX0xPQ0tFRCAoJnNlbV9leGl0KTsKLQl0b19kZWJ1ZyA9IEZBTFNFOwotCWlibXBocF9zaHV0ZG93biA9IEZBTFNFOworCXRvX2RlYnVnID0gMDsKKwlpYm1waHBfc2h1dGRvd24gPSAwOwogCXRpZF9wb2xsID0gMDsKIAogCWRlYnVnICgiJXMgLSBFeGl0XG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtNzM3LDIxICs3MzksMjEgQEAKIAkJLy8gY2hlY2sgY29udHJvbGxlciBpcyBzdGlsbCBub3Qgd29ya2luZyBvbiB0aGUgY29tbWFuZAogCQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCXRpbWVvdXQgPSBDTURfQ09NUExFVEVfVE9VVF9TRUM7Ci0JCWRvbmUgPSBGQUxTRTsKKwkJZG9uZSA9IDA7CiAJCXdoaWxlICghZG9uZSkgewogCQkJcmMgPSBocGNfd2FpdF9jdGxyX25vdHdvcmtpbmcgKEhQQ19DVExSX1dPUktJTkdfVE9VVCwgY3Rscl9wdHIsIHdwZ19iYmFyLAogCQkJCQkJCSZzdGF0dXMpOwogCQkJaWYgKCFyYykgewogCQkJCWlmIChORUVEVE9DSEVDS19DTURTVEFUVVMgKGNtZCkpIHsKIAkJCQkJaWYgKENUTFJfRklOSVNIRUQgKHN0YXR1cykgPT0gSFBDX0NUTFJfRklOSVNIRURfWUVTKQotCQkJCQkJZG9uZSA9IFRSVUU7CisJCQkJCQlkb25lID0gMTsKIAkJCQl9IGVsc2UKLQkJCQkJZG9uZSA9IFRSVUU7CisJCQkJCWRvbmUgPSAxOwogCQkJfQogCQkJaWYgKCFkb25lKSB7CiAJCQkJbXNsZWVwKDEwMDApOwogCQkJCWlmICh0aW1lb3V0IDwgMSkgewotCQkJCQlkb25lID0gVFJVRTsKKwkJCQkJZG9uZSA9IDE7CiAJCQkJCWVyciAoIiVzIC0gRXJyb3IgY29tbWFuZCBjb21wbGV0ZSB0aW1lb3V0XG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJCQlyYyA9IC1FRkFVTFQ7CiAJCQkJfSBlbHNlCkBAIC03NzgsNyArNzgwLDcgQEAKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQgZ2V0X2hwY19hY2Nlc3MgKHZvaWQpCiB7Ci0JZG93biAoJnNlbV9ocGNhY2Nlc3MpOworCW11dGV4X2xvY2soJnNlbV9ocGNhY2Nlc3MpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc4Niw3ICs3ODgsNyBAQAogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIGZyZWVfaHBjX2FjY2VzcyAodm9pZCkKIHsKLQl1cCAoJnNlbV9ocGNhY2Nlc3MpOworCW11dGV4X3VubG9jaygmc2VtX2hwY2FjY2Vzcyk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzk3LDcgKzc5OSw3IEBACiB2b2lkIGlibXBocF9sb2NrX29wZXJhdGlvbnMgKHZvaWQpCiB7CiAJZG93biAoJnNlbU9wZXJhdGlvbnMpOwotCXRvX2RlYnVnID0gVFJVRTsKKwl0b19kZWJ1ZyA9IDE7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODA3LDcgKzgwOSw3IEBACiB7CiAJZGVidWcgKCIlcyAtIEVudHJ5XG4iLCBfX0ZVTkNUSU9OX18pOwogCXVwICgmc2VtT3BlcmF0aW9ucyk7Ci0JdG9fZGVidWcgPSBGQUxTRTsKKwl0b19kZWJ1ZyA9IDA7CiAJZGVidWcgKCIlcyAtIEV4aXRcbiIsIF9fRlVOQ1RJT05fXyk7CiB9CiAKQEAgLTkzNSw0MCArOTM3LDQwIEBACiB7CiAJdTggc3RhdHVzOwogCWludCByYyA9IDA7Ci0JdTggZGlzYWJsZSA9IEZBTFNFOwotCXU4IHVwZGF0ZSA9IEZBTFNFOworCXU4IGRpc2FibGUgPSAwOworCXU4IHVwZGF0ZSA9IDA7CiAKIAlkZWJ1ZyAoInByb2Nlc3NfY2hhbmdlaW5zdGF0dXMgLSBFbnRyeSBwc2xvdFslcF0sIHBvbGRzbG90WyVwXVxuIiwgcHNsb3QsIHBvbGRzbG90KTsKIAogCS8vIGJpdCAwIC0gSFBDX1NMT1RfUE9XRVIKIAlpZiAoKHBzbG90LT5zdGF0dXMgJiAweDAxKSAhPSAocG9sZHNsb3QtPnN0YXR1cyAmIDB4MDEpKQotCQl1cGRhdGUgPSBUUlVFOworCQl1cGRhdGUgPSAxOwogCiAJLy8gYml0IDEgLSBIUENfU0xPVF9DT05ORUNUCiAJLy8gaWdub3JlCiAKIAkvLyBiaXQgMiAtIEhQQ19TTE9UX0FUVE4KIAlpZiAoKHBzbG90LT5zdGF0dXMgJiAweDA0KSAhPSAocG9sZHNsb3QtPnN0YXR1cyAmIDB4MDQpKQotCQl1cGRhdGUgPSBUUlVFOworCQl1cGRhdGUgPSAxOwogCiAJLy8gYml0IDMgLSBIUENfU0xPVF9QUlNOVDIKIAkvLyBiaXQgNCAtIEhQQ19TTE9UX1BSU05UMQogCWlmICgoKHBzbG90LT5zdGF0dXMgJiAweDA4KSAhPSAocG9sZHNsb3QtPnN0YXR1cyAmIDB4MDgpKQogCQl8fCAoKHBzbG90LT5zdGF0dXMgJiAweDEwKSAhPSAocG9sZHNsb3QtPnN0YXR1cyAmIDB4MTApKSkKLQkJdXBkYXRlID0gVFJVRTsKKwkJdXBkYXRlID0gMTsKIAogCS8vIGJpdCA1IC0gSFBDX1NMT1RfUFdSR0QKIAlpZiAoKHBzbG90LT5zdGF0dXMgJiAweDIwKSAhPSAocG9sZHNsb3QtPnN0YXR1cyAmIDB4MjApKQogCQkvLyBPRkYgLT4gT046IGlnbm9yZSwgT04gLT4gT0ZGOiBkaXNhYmxlIHNsb3QKIAkJaWYgKChwb2xkc2xvdC0+c3RhdHVzICYgMHgyMCkgJiYgKFNMT1RfQ09OTkVDVCAocG9sZHNsb3QtPnN0YXR1cykgPT0gSFBDX1NMT1RfQ09OTkVDVEVEKSAmJiAoU0xPVF9QUkVTRU5UIChwb2xkc2xvdC0+c3RhdHVzKSkpIAotCQkJZGlzYWJsZSA9IFRSVUU7CisJCQlkaXNhYmxlID0gMTsKIAogCS8vIGJpdCA2IC0gSFBDX1NMT1RfQlVTX1NQRUVECiAJLy8gaWdub3JlCiAKIAkvLyBiaXQgNyAtIEhQQ19TTE9UX0xBVENICiAJaWYgKChwc2xvdC0+c3RhdHVzICYgMHg4MCkgIT0gKHBvbGRzbG90LT5zdGF0dXMgJiAweDgwKSkgewotCQl1cGRhdGUgPSBUUlVFOworCQl1cGRhdGUgPSAxOwogCQkvLyBPUEVOIC0+IENMT1NFCiAJCWlmIChwc2xvdC0+c3RhdHVzICYgMHg4MCkgewogCQkJaWYgKFNMT1RfUFdSR0QgKHBzbG90LT5zdGF0dXMpKSB7CkBAIC05NzcsNyArOTc5LDcgQEAKIAkJCQltc2xlZXAoMTAwMCk7CiAJCQkJcmMgPSBpYm1waHBfaHBjX3JlYWRzbG90IChwc2xvdCwgUkVBRF9TTE9UU1RBVFVTLCAmc3RhdHVzKTsKIAkJCQlpZiAoU0xPVF9QV1JHRCAoc3RhdHVzKSkKLQkJCQkJdXBkYXRlID0gVFJVRTsKKwkJCQkJdXBkYXRlID0gMTsKIAkJCQllbHNlCS8vIG92ZXJ3cml0ZSBwb3dlciBpbiBwc2xvdCB0byBPRkYKIAkJCQkJcHNsb3QtPnN0YXR1cyAmPSB+SFBDX1NMT1RfUE9XRVI7CiAJCQl9CkBAIC05ODUsMTcgKzk4NywxNyBAQAogCQkvLyBDTE9TRSAtPiBPUEVOIAogCQllbHNlIGlmICgoU0xPVF9QV1JHRCAocG9sZHNsb3QtPnN0YXR1cykgPT0gSFBDX1NMT1RfUFdSR0RfR09PRCkKIAkJCSYmIChTTE9UX0NPTk5FQ1QgKHBvbGRzbG90LT5zdGF0dXMpID09IEhQQ19TTE9UX0NPTk5FQ1RFRCkgJiYgKFNMT1RfUFJFU0VOVCAocG9sZHNsb3QtPnN0YXR1cykpKSB7Ci0JCQlkaXNhYmxlID0gVFJVRTsKKwkJCWRpc2FibGUgPSAxOwogCQl9CiAJCS8vIGVsc2UgLSBpZ25vcmUKIAl9CiAJLy8gYml0IDQgLSBIUENfU0xPVF9CTElOS19BVFROCiAJaWYgKChwc2xvdC0+ZXh0X3N0YXR1cyAmIDB4MDgpICE9IChwb2xkc2xvdC0+ZXh0X3N0YXR1cyAmIDB4MDgpKQotCQl1cGRhdGUgPSBUUlVFOworCQl1cGRhdGUgPSAxOwogCiAJaWYgKGRpc2FibGUpIHsKIAkJZGVidWcgKCJwcm9jZXNzX2NoYW5nZWluc3RhdHVzIC0gZGlzYWJsZSBzbG90XG4iKTsKLQkJcHNsb3QtPmZsYWcgPSBGQUxTRTsKKwkJcHNsb3QtPmZsYWcgPSAwOwogCQlyYyA9IGlibXBocF9kb19kaXNhYmxlX3Nsb3QgKHBzbG90KTsKIAl9CiAKQEAgLTExMDAsNyArMTEwMiw3IEBACiB7CiAJZGVidWcgKCIlcyAtIEVudHJ5XG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JaWJtcGhwX3NodXRkb3duID0gVFJVRTsKKwlpYm1waHBfc2h1dGRvd24gPSAxOwogCWRlYnVnICgiYmVmb3JlIGxvY2tpbmcgb3BlcmF0aW9ucyBcbiIpOwogCWlibXBocF9sb2NrX29wZXJhdGlvbnMgKCk7CiAJZGVidWcgKCJhZnRlciBsb2NraW5nIG9wZXJhdGlvbnMgXG4iKTsKQEAgLTExMzQsNyArMTEzNiw3IEBACiAJCQkJICAgIHU4ICogcHN0YXR1cykKIHsKIAlpbnQgcmMgPSAwOwotCXU4IGRvbmUgPSBGQUxTRTsKKwl1OCBkb25lID0gMDsKIAogCWRlYnVnX3BvbGxpbmcgKCJocGNfd2FpdF9jdGxyX25vdHdvcmtpbmcgLSBFbnRyeSB0aW1lb3V0WyVkXVxuIiwgdGltZW91dCk7CiAKQEAgLTExNDIsMTQgKzExNDQsMTQgQEAKIAkJKnBzdGF0dXMgPSBjdHJsX3JlYWQgKGN0bHJfcHRyLCB3cGdfYmJhciwgV1BHX0NUTFJfSU5ERVgpOwogCQlpZiAoKnBzdGF0dXMgPT0gSFBDX0VSUk9SKSB7CiAJCQlyYyA9IEhQQ19FUlJPUjsKLQkJCWRvbmUgPSBUUlVFOworCQkJZG9uZSA9IDE7CiAJCX0KIAkJaWYgKENUTFJfV09SS0lORyAoKnBzdGF0dXMpID09IEhQQ19DVExSX1dPUktJTkdfTk8pCi0JCQlkb25lID0gVFJVRTsKKwkJCWRvbmUgPSAxOwogCQlpZiAoIWRvbmUpIHsKIAkJCW1zbGVlcCgxMDAwKTsKIAkJCWlmICh0aW1lb3V0IDwgMSkgewotCQkJCWRvbmUgPSBUUlVFOworCQkJCWRvbmUgPSAxOwogCQkJCWVyciAoIkhQQ3JlYWRzbG90IC0gRXJyb3IgY3RsciB0aW1lb3V0XG4iKTsKIAkJCQlyYyA9IEhQQ19FUlJPUjsKIAkJCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9wY2kuYwppbmRleCAxNTUxMzNmLi5kODdhOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9wY2kuYwpAQCAtMTY0LDEyICsxNjQsMTEgQEAKIAkJCQkJCWNsZWFudXBfY291bnQgPSA2OwogCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJfQotCQkJCQluZXdmdW5jID0ga21hbGxvYyhzaXplb2YoKm5ld2Z1bmMpLCBHRlBfS0VSTkVMKTsKKwkJCQkJbmV3ZnVuYyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdmdW5jKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCWlmICghbmV3ZnVuYykgewogCQkJCQkJZXJyICgib3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJCX0KLQkJCQkJbWVtc2V0IChuZXdmdW5jLCAwLCBzaXplb2YgKHN0cnVjdCBwY2lfZnVuYykpOwogCQkJCQluZXdmdW5jLT5idXNubyA9IGN1cl9mdW5jLT5idXNubzsKIAkJCQkJbmV3ZnVuYy0+ZGV2aWNlID0gZGV2aWNlOwogCQkJCQljdXJfZnVuYy0+bmV4dCA9IG5ld2Z1bmM7CkBAIC0yMDAsMTUgKzE5OSwxNCBAQAogCQkJCQl9CiAKIAkJCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChpYm1waHBfcGNpX2J1cywgZGV2Zm4sIFBDSV9TRUNPTkRBUllfQlVTLCAmc2VjX251bWJlcik7Ci0JCQkJCWZsYWcgPSBGQUxTRTsKKwkJCQkJZmxhZyA9IDA7CiAJCQkJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCQkJCQlpZiAoZnVuYy0+ZGV2aWNlc1tpXSkgewotCQkJCQkJCW5ld2Z1bmMgPSBrbWFsbG9jKHNpemVvZigqbmV3ZnVuYyksIEdGUF9LRVJORUwpOworCQkJCQkJCW5ld2Z1bmMgPSBremFsbG9jKHNpemVvZigqbmV3ZnVuYyksIEdGUF9LRVJORUwpOwogCQkJCQkJCWlmICghbmV3ZnVuYykgewogCQkJCQkJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCQkJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCQkJCX0KLQkJCQkJCQltZW1zZXQgKG5ld2Z1bmMsIDAsIHNpemVvZiAoc3RydWN0IHBjaV9mdW5jKSk7CiAJCQkJCQkJbmV3ZnVuYy0+YnVzbm8gPSBzZWNfbnVtYmVyOwogCQkJCQkJCW5ld2Z1bmMtPmRldmljZSA9ICh1OCkgaTsKIAkJCQkJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQpAQCAtMjI4LDE2ICsyMjYsMTUgQEAKIAkJCQkJCQkJY2xlYW51cF9jb3VudCA9IDI7CiAJCQkJCQkJCWdvdG8gZXJyb3I7CiAJCQkJCQkJfQotCQkJCQkJCWZsYWcgPSBUUlVFOworCQkJCQkJCWZsYWcgPSAxOwogCQkJCQkJfQogCQkJCQl9CiAKLQkJCQkJbmV3ZnVuYyA9IGttYWxsb2Moc2l6ZW9mKCpuZXdmdW5jKSwgR0ZQX0tFUk5FTCk7CisJCQkJCW5ld2Z1bmMgPSBremFsbG9jKHNpemVvZigqbmV3ZnVuYyksIEdGUF9LRVJORUwpOwogCQkJCQlpZiAoIW5ld2Z1bmMpIHsKIAkJCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCQl9Ci0JCQkJCW1lbXNldCAobmV3ZnVuYywgMCwgc2l6ZW9mIChzdHJ1Y3QgcGNpX2Z1bmMpKTsKIAkJCQkJbmV3ZnVuYy0+YnVzbm8gPSBjdXJfZnVuYy0+YnVzbm87CiAJCQkJCW5ld2Z1bmMtPmRldmljZSA9IGRldmljZTsKIAkJCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykKQEAgLTI3NSwxNiArMjcyLDE1IEBACiAJCQkJCQljdXJfZnVuYy0+YnVzbm8sIGRldmljZSwgZnVuY3Rpb24pOwogCQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUgKGlibXBocF9wY2lfYnVzLCBkZXZmbiwgUENJX1NFQ09OREFSWV9CVVMsICZzZWNfbnVtYmVyKTsKIAkJCQkJZGVidWcgKCJhZnRlciBjb25maWd1cmluZyBicmlkZ2UuLi4sIHNlY19udW1iZXIgPSAleFxuIiwgc2VjX251bWJlcik7Ci0JCQkJCWZsYWcgPSBGQUxTRTsKKwkJCQkJZmxhZyA9IDA7CiAJCQkJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCQkJCQlpZiAoZnVuYy0+ZGV2aWNlc1tpXSkgewogCQkJCQkJCWRlYnVnICgiaW5zaWRlIGZvciBsb29wLCBkZXZpY2UgaXMgJXhcbiIsIGkpOwotCQkJCQkJCW5ld2Z1bmMgPSBrbWFsbG9jKHNpemVvZigqbmV3ZnVuYyksIEdGUF9LRVJORUwpOworCQkJCQkJCW5ld2Z1bmMgPSBremFsbG9jKHNpemVvZigqbmV3ZnVuYyksIEdGUF9LRVJORUwpOwogCQkJCQkJCWlmICghbmV3ZnVuYykgewogCQkJCQkJCQllcnIgKCIgb3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQkJCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQkJCQl9Ci0JCQkJCQkJbWVtc2V0IChuZXdmdW5jLCAwLCBzaXplb2YgKHN0cnVjdCBwY2lfZnVuYykpOwogCQkJCQkJCW5ld2Z1bmMtPmJ1c25vID0gc2VjX251bWJlcjsKIAkJCQkJCQluZXdmdW5jLT5kZXZpY2UgPSAodTgpIGk7CiAJCQkJCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykKQEAgLTMwNSw3ICszMDEsNyBAQAogCQkJCQkJCQljbGVhbnVwX2NvdW50ID0gMjsKIAkJCQkJCQkJZ290byBlcnJvcjsKIAkJCQkJCQl9Ci0JCQkJCQkJZmxhZyA9IFRSVUU7CisJCQkJCQkJZmxhZyA9IDE7CiAJCQkJCQl9CiAJCQkJCX0KIApAQCAtNDA1LDEzICs0MDEsMTIgQEAKIAogCQkJZGVidWcgKCJsZW5bY291bnRdIGluIElPICV4LCBjb3VudCAlZFxuIiwgbGVuW2NvdW50XSwgY291bnQpOwogCi0JCQlpb1tjb3VudF0gPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJCQlpb1tjb3VudF0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSksIEdGUF9LRVJORUwpOwogCiAJCQlpZiAoIWlvW2NvdW50XSkgewogCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KLQkJCW1lbXNldCAoaW9bY291bnRdLCAwLCBzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSk7CiAJCQlpb1tjb3VudF0tPnR5cGUgPSBJTzsKIAkJCWlvW2NvdW50XS0+YnVzbm8gPSBmdW5jLT5idXNubzsKIAkJCWlvW2NvdW50XS0+ZGV2ZnVuYyA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKQEAgLTQ0NCwyOSArNDM5LDI3IEBACiAKIAkJCQlkZWJ1ZyAoImxlbltjb3VudF0gaW4gUEZNRU0gJXgsIGNvdW50ICVkXG4iLCBsZW5bY291bnRdLCBjb3VudCk7CiAKLQkJCQlwZm1lbVtjb3VudF0gPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJCQkJcGZtZW1bY291bnRdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlX25vZGUpLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIXBmbWVtW2NvdW50XSkgewogCQkJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KLQkJCQltZW1zZXQgKHBmbWVtW2NvdW50XSwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSkpOwogCQkJCXBmbWVtW2NvdW50XS0+dHlwZSA9IFBGTUVNOwogCQkJCXBmbWVtW2NvdW50XS0+YnVzbm8gPSBmdW5jLT5idXNubzsKIAkJCQlwZm1lbVtjb3VudF0tPmRldmZ1bmMgPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLAogCQkJCQkJCWZ1bmMtPmZ1bmN0aW9uKTsKIAkJCQlwZm1lbVtjb3VudF0tPmxlbiA9IGxlbltjb3VudF07Ci0JCQkJcGZtZW1bY291bnRdLT5mcm9tTWVtID0gRkFMU0U7CisJCQkJcGZtZW1bY291bnRdLT5mcm9tTWVtID0gMDsKIAkJCQlpZiAoaWJtcGhwX2NoZWNrX3Jlc291cmNlIChwZm1lbVtjb3VudF0sIDApID09IDApIHsKIAkJCQkJaWJtcGhwX2FkZF9yZXNvdXJjZSAocGZtZW1bY291bnRdKTsKIAkJCQkJZnVuYy0+cGZtZW1bY291bnRdID0gcGZtZW1bY291bnRdOwogCQkJCX0gZWxzZSB7Ci0JCQkJCW1lbV90bXAgPSBrbWFsbG9jKHNpemVvZigqbWVtX3RtcCksIEdGUF9LRVJORUwpOworCQkJCQltZW1fdG1wID0ga3phbGxvYyhzaXplb2YoKm1lbV90bXApLCBHRlBfS0VSTkVMKTsKIAkJCQkJaWYgKCFtZW1fdG1wKSB7CiAJCQkJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCQkJCQlrZnJlZSAocGZtZW1bY291bnRdKTsKIAkJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCQl9Ci0JCQkJCW1lbXNldCAobWVtX3RtcCwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSkpOwogCQkJCQltZW1fdG1wLT50eXBlID0gTUVNOwogCQkJCQltZW1fdG1wLT5idXNubyA9IHBmbWVtW2NvdW50XS0+YnVzbm87CiAJCQkJCW1lbV90bXAtPmRldmZ1bmMgPSBwZm1lbVtjb3VudF0tPmRldmZ1bmM7CkBAIC00NzQsNyArNDY3LDcgQEAKIAkJCQkJZGVidWcgKCJ0aGVyZSdzIG5vIHBmbWVtLi4uIGdvaW5nIGludG8gbWVtLlxuIik7CiAJCQkJCWlmIChpYm1waHBfY2hlY2tfcmVzb3VyY2UgKG1lbV90bXAsIDApID09IDApIHsKIAkJCQkJCWlibXBocF9hZGRfcmVzb3VyY2UgKG1lbV90bXApOwotCQkJCQkJcGZtZW1bY291bnRdLT5mcm9tTWVtID0gVFJVRTsKKwkJCQkJCXBmbWVtW2NvdW50XS0+ZnJvbU1lbSA9IDE7CiAJCQkJCQlwZm1lbVtjb3VudF0tPnJhbmdlbm8gPSBtZW1fdG1wLT5yYW5nZW5vOwogCQkJCQkJcGZtZW1bY291bnRdLT5zdGFydCA9IG1lbV90bXAtPnN0YXJ0OwogCQkJCQkJcGZtZW1bY291bnRdLT5lbmQgPSBtZW1fdG1wLT5lbmQ7CkBAIC01MTIsMTIgKzUwNSwxMSBAQAogCiAJCQkJZGVidWcgKCJsZW5bY291bnRdIGluIE1lbSAleCwgY291bnQgJWRcbiIsIGxlbltjb3VudF0sIGNvdW50KTsKIAotCQkJCW1lbVtjb3VudF0gPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJCQkJbWVtW2NvdW50XSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFtZW1bY291bnRdKSB7CiAJCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQotCQkJCW1lbXNldCAobWVtW2NvdW50XSwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSkpOwogCQkJCW1lbVtjb3VudF0tPnR5cGUgPSBNRU07CiAJCQkJbWVtW2NvdW50XS0+YnVzbm8gPSBmdW5jLT5idXNubzsKIAkJCQltZW1bY291bnRdLT5kZXZmdW5jID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwKQEAgLTU3OSwxMSArNTcxLDExIEBACiAJdTE2IHBmbWVtX2Jhc2U7CiAJdTMyIGJhclsyXTsKIAl1MzIgbGVuWzJdOwotCXU4IGZsYWdfaW8gPSBGQUxTRTsKLQl1OCBmbGFnX21lbSA9IEZBTFNFOwotCXU4IGZsYWdfcGZtZW0gPSBGQUxTRTsKLQl1OCBuZWVkX2lvX3VwcGVyID0gRkFMU0U7Ci0JdTggbmVlZF9wZm1lbV91cHBlciA9IEZBTFNFOworCXU4IGZsYWdfaW8gPSAwOworCXU4IGZsYWdfbWVtID0gMDsKKwl1OCBmbGFnX3BmbWVtID0gMDsKKwl1OCBuZWVkX2lvX3VwcGVyID0gMDsKKwl1OCBuZWVkX3BmbWVtX3VwcGVyID0gMDsKIAlzdHJ1Y3QgcmVzX25lZWRlZCAqYW1vdW50X25lZWRlZCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlX25vZGUgKmlvID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSAqYnVzX2lvWzJdID0ge05VTEwsIE5VTEx9OwpAQCAtNjc3LDE0ICs2NjksMTMgQEAKIAogCQkJZGVidWcgKCJsZW5bY291bnRdIGluIElPID0gJXhcbiIsIGxlbltjb3VudF0pOwogCi0JCQlidXNfaW9bY291bnRdID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSksIEdGUF9LRVJORUwpOworCQkJYnVzX2lvW2NvdW50XSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJCQogCQkJaWYgKCFidXNfaW9bY291bnRdKSB7CiAJCQkJZXJyICgib3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KLQkJCW1lbXNldCAoYnVzX2lvW2NvdW50XSwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSkpOwogCQkJYnVzX2lvW2NvdW50XS0+dHlwZSA9IElPOwogCQkJYnVzX2lvW2NvdW50XS0+YnVzbm8gPSBmdW5jLT5idXNubzsKIAkJCWJ1c19pb1tjb3VudF0tPmRldmZ1bmMgPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLApAQCAtNzExLDM3ICs3MDIsMzUgQEAKIAogCQkJCWRlYnVnICgibGVuW2NvdW50XSBpbiBQRk1FTSA9ICV4XG4iLCBsZW5bY291bnRdKTsKIAotCQkJCWJ1c19wZm1lbVtjb3VudF0gPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJCQkJYnVzX3BmbWVtW2NvdW50XSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFidXNfcGZtZW1bY291bnRdKSB7CiAJCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJCQkJZ290byBlcnJvcjsKIAkJCQl9Ci0JCQkJbWVtc2V0IChidXNfcGZtZW1bY291bnRdLCAwLCBzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSk7CiAJCQkJYnVzX3BmbWVtW2NvdW50XS0+dHlwZSA9IFBGTUVNOwogCQkJCWJ1c19wZm1lbVtjb3VudF0tPmJ1c25vID0gZnVuYy0+YnVzbm87CiAJCQkJYnVzX3BmbWVtW2NvdW50XS0+ZGV2ZnVuYyA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsCiAJCQkJCQkJZnVuYy0+ZnVuY3Rpb24pOwogCQkJCWJ1c19wZm1lbVtjb3VudF0tPmxlbiA9IGxlbltjb3VudF07Ci0JCQkJYnVzX3BmbWVtW2NvdW50XS0+ZnJvbU1lbSA9IEZBTFNFOworCQkJCWJ1c19wZm1lbVtjb3VudF0tPmZyb21NZW0gPSAwOwogCQkJCWlmIChpYm1waHBfY2hlY2tfcmVzb3VyY2UgKGJ1c19wZm1lbVtjb3VudF0sIDApID09IDApIHsKIAkJCQkJaWJtcGhwX2FkZF9yZXNvdXJjZSAoYnVzX3BmbWVtW2NvdW50XSk7CiAJCQkJCWZ1bmMtPnBmbWVtW2NvdW50XSA9IGJ1c19wZm1lbVtjb3VudF07CiAJCQkJfSBlbHNlIHsKLQkJCQkJbWVtX3RtcCA9IGttYWxsb2Moc2l6ZW9mKCptZW1fdG1wKSwgR0ZQX0tFUk5FTCk7CisJCQkJCW1lbV90bXAgPSBremFsbG9jKHNpemVvZigqbWVtX3RtcCksIEdGUF9LRVJORUwpOwogCQkJCQlpZiAoIW1lbV90bXApIHsKIAkJCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQkJCQlnb3RvIGVycm9yOwogCQkJCQl9Ci0JCQkJCW1lbXNldCAobWVtX3RtcCwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSkpOwogCQkJCQltZW1fdG1wLT50eXBlID0gTUVNOwogCQkJCQltZW1fdG1wLT5idXNubyA9IGJ1c19wZm1lbVtjb3VudF0tPmJ1c25vOwogCQkJCQltZW1fdG1wLT5kZXZmdW5jID0gYnVzX3BmbWVtW2NvdW50XS0+ZGV2ZnVuYzsKIAkJCQkJbWVtX3RtcC0+bGVuID0gYnVzX3BmbWVtW2NvdW50XS0+bGVuOwogCQkJCQlpZiAoaWJtcGhwX2NoZWNrX3Jlc291cmNlIChtZW1fdG1wLCAwKSA9PSAwKSB7CiAJCQkJCQlpYm1waHBfYWRkX3Jlc291cmNlIChtZW1fdG1wKTsKLQkJCQkJCWJ1c19wZm1lbVtjb3VudF0tPmZyb21NZW0gPSBUUlVFOworCQkJCQkJYnVzX3BmbWVtW2NvdW50XS0+ZnJvbU1lbSA9IDE7CiAJCQkJCQlidXNfcGZtZW1bY291bnRdLT5yYW5nZW5vID0gbWVtX3RtcC0+cmFuZ2VubzsKIAkJCQkJCWlibXBocF9hZGRfcGZtZW1fZnJvbV9tZW0gKGJ1c19wZm1lbVtjb3VudF0pOwogCQkJCQkJZnVuYy0+cGZtZW1bY291bnRdID0gYnVzX3BmbWVtW2NvdW50XTsKQEAgLTc3MCwxMyArNzU5LDEyIEBACiAKIAkJCQlkZWJ1ZyAoImxlbltjb3VudF0gaW4gTWVtb3J5IGlzICV4XG4iLCBsZW5bY291bnRdKTsKIAotCQkJCWJ1c19tZW1bY291bnRdID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSksIEdGUF9LRVJORUwpOworCQkJCWJ1c19tZW1bY291bnRdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlX25vZGUpLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIWJ1c19tZW1bY291bnRdKSB7CiAJCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJCQkJZ290byBlcnJvcjsKIAkJCQl9Ci0JCQkJbWVtc2V0IChidXNfbWVtW2NvdW50XSwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSkpOwogCQkJCWJ1c19tZW1bY291bnRdLT50eXBlID0gTUVNOwogCQkJCWJ1c19tZW1bY291bnRdLT5idXNubyA9IGZ1bmMtPmJ1c25vOwogCQkJCWJ1c19tZW1bY291bnRdLT5kZXZmdW5jID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwKQEAgLTgzOCwxNyArODI2LDE2IEBACiAKIAlpZiAoIWFtb3VudF9uZWVkZWQtPmlvKSB7CiAJCWRlYnVnICgiaXQgZG9lc24ndCB3YW50IElPP1xuIik7Ci0JCWZsYWdfaW8gPSBUUlVFOworCQlmbGFnX2lvID0gMTsKIAl9IGVsc2UgewogCQlkZWJ1ZyAoIml0IHdhbnRzICV4IElPIGJlaGluZCB0aGUgYnJpZGdlXG4iLCBhbW91bnRfbmVlZGVkLT5pbyk7Ci0JCWlvID0ga21hbGxvYyhzaXplb2YoKmlvKSwgR0ZQX0tFUk5FTCk7CisJCWlvID0ga3phbGxvYyhzaXplb2YoKmlvKSwgR0ZQX0tFUk5FTCk7CiAJCQogCQlpZiAoIWlvKSB7CiAJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZ290byBlcnJvcjsKIAkJfQotCQltZW1zZXQgKGlvLCAwLCBzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSk7CiAJCWlvLT50eXBlID0gSU87CiAJCWlvLT5idXNubyA9IGZ1bmMtPmJ1c25vOwogCQlpby0+ZGV2ZnVuYyA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKQEAgLTg1Niw3MSArODQzLDY4IEBACiAJCWlmIChpYm1waHBfY2hlY2tfcmVzb3VyY2UgKGlvLCAxKSA9PSAwKSB7CiAJCQlkZWJ1ZyAoIndlcmUgd2UgYWJsZSB0byBhZGQgaW9cbiIpOwogCQkJaWJtcGhwX2FkZF9yZXNvdXJjZSAoaW8pOwotCQkJZmxhZ19pbyA9IFRSVUU7CisJCQlmbGFnX2lvID0gMTsKIAkJfQogCX0KIAogCWlmICghYW1vdW50X25lZWRlZC0+bWVtKSB7CiAJCWRlYnVnICgiaXQgZG9lc24ndCB3YW50IG4uZS5tZW1vcnk/XG4iKTsKLQkJZmxhZ19tZW0gPSBUUlVFOworCQlmbGFnX21lbSA9IDE7CiAJfSBlbHNlIHsKIAkJZGVidWcgKCJpdCB3YW50cyAleCBtZW1vcnkgYmVoaW5kIHRoZSBicmlkZ2VcbiIsIGFtb3VudF9uZWVkZWQtPm1lbSk7Ci0JCW1lbSA9IGttYWxsb2Moc2l6ZW9mKCptZW0pLCBHRlBfS0VSTkVMKTsKKwkJbWVtID0ga3phbGxvYyhzaXplb2YoKm1lbSksIEdGUF9LRVJORUwpOwogCQlpZiAoIW1lbSkgewogCQkJZXJyICgib3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJbWVtc2V0IChtZW0sIDAsIHNpemVvZiAoc3RydWN0IHJlc291cmNlX25vZGUpKTsKIAkJbWVtLT50eXBlID0gTUVNOwogCQltZW0tPmJ1c25vID0gZnVuYy0+YnVzbm87CiAJCW1lbS0+ZGV2ZnVuYyA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKIAkJbWVtLT5sZW4gPSBhbW91bnRfbmVlZGVkLT5tZW07CiAJCWlmIChpYm1waHBfY2hlY2tfcmVzb3VyY2UgKG1lbSwgMSkgPT0gMCkgewogCQkJaWJtcGhwX2FkZF9yZXNvdXJjZSAobWVtKTsKLQkJCWZsYWdfbWVtID0gVFJVRTsKKwkJCWZsYWdfbWVtID0gMTsKIAkJCWRlYnVnICgid2VyZSB3ZSBhYmxlIHRvIGFkZCBtZW1cbiIpOwogCQl9CiAJfQogCiAJaWYgKCFhbW91bnRfbmVlZGVkLT5wZm1lbSkgewogCQlkZWJ1ZyAoIml0IGRvZXNuJ3Qgd2FudCBuLmUucGZtZW0gbWVtP1xuIik7Ci0JCWZsYWdfcGZtZW0gPSBUUlVFOworCQlmbGFnX3BmbWVtID0gMTsKIAl9IGVsc2UgewogCQlkZWJ1ZyAoIml0IHdhbnRzICV4IHBmbWVtb3J5IGJlaGluZCB0aGUgYnJpZGdlXG4iLCBhbW91bnRfbmVlZGVkLT5wZm1lbSk7Ci0JCXBmbWVtID0ga21hbGxvYyhzaXplb2YoKnBmbWVtKSwgR0ZQX0tFUk5FTCk7CisJCXBmbWVtID0ga3phbGxvYyhzaXplb2YoKnBmbWVtKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGZtZW0pIHsKIAkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQlnb3RvIGVycm9yOwogCQl9Ci0JCW1lbXNldCAocGZtZW0sIDAsIHNpemVvZiAoc3RydWN0IHJlc291cmNlX25vZGUpKTsKIAkJcGZtZW0tPnR5cGUgPSBQRk1FTTsKIAkJcGZtZW0tPmJ1c25vID0gZnVuYy0+YnVzbm87CiAJCXBmbWVtLT5kZXZmdW5jID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwogCQlwZm1lbS0+bGVuID0gYW1vdW50X25lZWRlZC0+cGZtZW07Ci0JCXBmbWVtLT5mcm9tTWVtID0gRkFMU0U7CisJCXBmbWVtLT5mcm9tTWVtID0gMDsKIAkJaWYgKGlibXBocF9jaGVja19yZXNvdXJjZSAocGZtZW0sIDEpID09IDApIHsKIAkJCWlibXBocF9hZGRfcmVzb3VyY2UgKHBmbWVtKTsKLQkJCWZsYWdfcGZtZW0gPSBUUlVFOworCQkJZmxhZ19wZm1lbSA9IDE7CiAJCX0gZWxzZSB7Ci0JCQltZW1fdG1wID0ga21hbGxvYyhzaXplb2YoKm1lbV90bXApLCBHRlBfS0VSTkVMKTsKKwkJCW1lbV90bXAgPSBremFsbG9jKHNpemVvZigqbWVtX3RtcCksIEdGUF9LRVJORUwpOwogCQkJaWYgKCFtZW1fdG1wKSB7CiAJCQkJZXJyICgib3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KLQkJCW1lbXNldCAobWVtX3RtcCwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSkpOwogCQkJbWVtX3RtcC0+dHlwZSA9IE1FTTsKIAkJCW1lbV90bXAtPmJ1c25vID0gcGZtZW0tPmJ1c25vOwogCQkJbWVtX3RtcC0+ZGV2ZnVuYyA9IHBmbWVtLT5kZXZmdW5jOwogCQkJbWVtX3RtcC0+bGVuID0gcGZtZW0tPmxlbjsKIAkJCWlmIChpYm1waHBfY2hlY2tfcmVzb3VyY2UgKG1lbV90bXAsIDEpID09IDApIHsKIAkJCQlpYm1waHBfYWRkX3Jlc291cmNlIChtZW1fdG1wKTsKLQkJCQlwZm1lbS0+ZnJvbU1lbSA9IFRSVUU7CisJCQkJcGZtZW0tPmZyb21NZW0gPSAxOwogCQkJCXBmbWVtLT5yYW5nZW5vID0gbWVtX3RtcC0+cmFuZ2VubzsKIAkJCQlpYm1waHBfYWRkX3BmbWVtX2Zyb21fbWVtIChwZm1lbSk7Ci0JCQkJZmxhZ19wZm1lbSA9IFRSVUU7CisJCQkJZmxhZ19wZm1lbSA9IDE7CiAJCQl9CiAJCX0KIAl9CkBAIC05MzYsMTMgKzkyMCwxMiBAQAogCQkgKi8KIAkJYnVzID0gaWJtcGhwX2ZpbmRfcmVzX2J1cyAoc2VjX251bWJlcik7CiAJCWlmICghYnVzKSB7Ci0JCQlidXMgPSBrbWFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CisJCQlidXMgPSBremFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWJ1cykgewogCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9Ci0JCQltZW1zZXQgKGJ1cywgMCwgc2l6ZW9mIChzdHJ1Y3QgYnVzX25vZGUpKTsKIAkJCWJ1cy0+YnVzbm8gPSBzZWNfbnVtYmVyOwogCQkJZGVidWcgKCJiNCBhZGRpbmcgbmV3IGJ1c1xuIik7CiAJCQlyYyA9IGFkZF9uZXdfYnVzIChidXMsIGlvLCBtZW0sIHBmbWVtLCBmdW5jLT5idXNubyk7CkBAIC05NjcsMTEgKzk1MCwxMSBAQAogCiAJCWlmICgoaW9fYmFzZSAmIFBDSV9JT19SQU5HRV9UWVBFX01BU0spID09IFBDSV9JT19SQU5HRV9UWVBFXzMyKSB7CiAJCQlkZWJ1ZyAoImlvIDMyXG4iKTsKLQkJCW5lZWRfaW9fdXBwZXIgPSBUUlVFOworCQkJbmVlZF9pb191cHBlciA9IDE7CiAJCX0KIAkJaWYgKChwZm1lbV9iYXNlICYgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLKSA9PSBQQ0lfUFJFRl9SQU5HRV9UWVBFXzY0KSB7CiAJCQlkZWJ1ZyAoInBmbWVtIDY0XG4iKTsKLQkJCW5lZWRfcGZtZW1fdXBwZXIgPSBUUlVFOworCQkJbmVlZF9wZm1lbV91cHBlciA9IDE7CiAJCX0KIAogCQlpZiAoYnVzLT5ub0lPUmFuZ2VzKSB7CkBAIC0xMTExLDEwICsxMDk0LDkgQEAKIAl9OwogCXN0cnVjdCByZXNfbmVlZGVkICphbW91bnQ7CiAKLQlhbW91bnQgPSBrbWFsbG9jKHNpemVvZigqYW1vdW50KSwgR0ZQX0tFUk5FTCk7CisJYW1vdW50ID0ga3phbGxvYyhzaXplb2YoKmFtb3VudCksIEdGUF9LRVJORUwpOwogCWlmIChhbW91bnQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0IChhbW91bnQsIDAsIHNpemVvZiAoc3RydWN0IHJlc19uZWVkZWQpKTsKIAogCWlibXBocF9wY2lfYnVzLT5udW1iZXIgPSBidXNubzsKIApAQCAtMTEzNyw3ICsxMTE5LDcgQEAKIAkJCQlkZWJ1ZyAoImhkcl90eXBlIGJlaGluZCB0aGUgYnJpZGdlIGlzICV4XG4iLCBoZHJfdHlwZSk7CiAJCQkJaWYgKGhkcl90eXBlICYgUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewogCQkJCQllcnIgKCJlbWJlZGRlZCBicmlkZ2VzIG5vdCBzdXBwb3J0ZWQgZm9yIGhvdC1wbHVnZ2luZy5cbiIpOwotCQkJCQlhbW91bnQtPm5vdF9jb3JyZWN0ID0gVFJVRTsKKwkJCQkJYW1vdW50LT5ub3RfY29ycmVjdCA9IDE7CiAJCQkJCXJldHVybiBhbW91bnQ7CiAJCQkJfQogCkBAIC0xMTQ1LDEyICsxMTI3LDEyIEBACiAJCQkJaWYgKGNsYXNzID09IFBDSV9DTEFTU19OT1RfREVGSU5FRF9WR0EpIHsKIAkJCQkJZXJyICgiVGhlIGRldmljZSAleCBpcyBWR0EgY29tcGF0aWJsZSBhbmQgYXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgaG90IHBsdWdnaW5nLiAiCiAJCQkJCSAgICAgIlBsZWFzZSBjaG9vc2UgYW5vdGhlciBkZXZpY2UuXG4iLCBkZXZpY2UpOwotCQkJCQlhbW91bnQtPm5vdF9jb3JyZWN0ID0gVFJVRTsKKwkJCQkJYW1vdW50LT5ub3RfY29ycmVjdCA9IDE7CiAJCQkJCXJldHVybiBhbW91bnQ7CiAJCQkJfSBlbHNlIGlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpIHsKIAkJCQkJZXJyICgiVGhlIGRldmljZSAleCBpcyBub3Qgc3VwcG9ydGVkIGZvciBob3QgcGx1Z2dpbmcuICIKIAkJCQkJICAgICAiUGxlYXNlIGNob29zZSBhbm90aGVyIGRldmljZS5cbiIsIGRldmljZSk7Ci0JCQkJCWFtb3VudC0+bm90X2NvcnJlY3QgPSBUUlVFOworCQkJCQlhbW91bnQtPm5vdF9jb3JyZWN0ID0gMTsKIAkJCQkJcmV0dXJuIGFtb3VudDsKIAkJCQl9CiAKQEAgLTEyMTAsOSArMTE5Miw5IEBACiAJfQkvKiBlbmQgZm9yICovCiAKIAlpZiAoIWhvd21hbnkpCi0JCWFtb3VudC0+bm90X2NvcnJlY3QgPSBUUlVFOworCQlhbW91bnQtPm5vdF9jb3JyZWN0ID0gMTsKIAllbHNlCi0JCWFtb3VudC0+bm90X2NvcnJlY3QgPSBGQUxTRTsKKwkJYW1vdW50LT5ub3RfY29ycmVjdCA9IDA7CiAJaWYgKChhbW91bnQtPmlvKSAmJiAoYW1vdW50LT5pbyA8IElPQlJJREdFKSkKIAkJYW1vdW50LT5pbyA9IElPQlJJREdFOwogCWlmICgoYW1vdW50LT5tZW0pICYmIChhbW91bnQtPm1lbSA8IE1FTUJSSURHRSkpCkBAIC0xNjcyLDEyICsxNjU0LDExIEBACiAJCWxpc3RfYWRkICgmYnVzLT5idXNfbGlzdCwgJmN1cl9idXMtPmJ1c19saXN0KTsKIAl9CiAJaWYgKGlvKSB7Ci0JCWlvX3JhbmdlID0ga21hbGxvYyhzaXplb2YoKmlvX3JhbmdlKSwgR0ZQX0tFUk5FTCk7CisJCWlvX3JhbmdlID0ga3phbGxvYyhzaXplb2YoKmlvX3JhbmdlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaW9fcmFuZ2UpIHsKIAkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCW1lbXNldCAoaW9fcmFuZ2UsIDAsIHNpemVvZiAoc3RydWN0IHJhbmdlX25vZGUpKTsKIAkJaW9fcmFuZ2UtPnN0YXJ0ID0gaW8tPnN0YXJ0OwogCQlpb19yYW5nZS0+ZW5kID0gaW8tPmVuZDsKIAkJaW9fcmFuZ2UtPnJhbmdlbm8gPSAxOwpAQCAtMTY4NSwxMiArMTY2NiwxMSBAQAogCQlidXMtPnJhbmdlSU8gPSBpb19yYW5nZTsKIAl9CiAJaWYgKG1lbSkgewotCQltZW1fcmFuZ2UgPSBrbWFsbG9jKHNpemVvZigqbWVtX3JhbmdlKSwgR0ZQX0tFUk5FTCk7CisJCW1lbV9yYW5nZSA9IGt6YWxsb2Moc2l6ZW9mKCptZW1fcmFuZ2UpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFtZW1fcmFuZ2UpIHsKIAkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCW1lbXNldCAobWVtX3JhbmdlLCAwLCBzaXplb2YgKHN0cnVjdCByYW5nZV9ub2RlKSk7CiAJCW1lbV9yYW5nZS0+c3RhcnQgPSBtZW0tPnN0YXJ0OwogCQltZW1fcmFuZ2UtPmVuZCA9IG1lbS0+ZW5kOwogCQltZW1fcmFuZ2UtPnJhbmdlbm8gPSAxOwpAQCAtMTY5OCwxMiArMTY3OCwxMSBAQAogCQlidXMtPnJhbmdlTWVtID0gbWVtX3JhbmdlOwogCX0KIAlpZiAocGZtZW0pIHsKLQkJcGZtZW1fcmFuZ2UgPSBrbWFsbG9jKHNpemVvZigqcGZtZW1fcmFuZ2UpLCBHRlBfS0VSTkVMKTsKKwkJcGZtZW1fcmFuZ2UgPSBremFsbG9jKHNpemVvZigqcGZtZW1fcmFuZ2UpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwZm1lbV9yYW5nZSkgewkKIAkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCW1lbXNldCAocGZtZW1fcmFuZ2UsIDAsIHNpemVvZiAoc3RydWN0IHJhbmdlX25vZGUpKTsKIAkJcGZtZW1fcmFuZ2UtPnN0YXJ0ID0gcGZtZW0tPnN0YXJ0OwogCQlwZm1lbV9yYW5nZS0+ZW5kID0gcGZtZW0tPmVuZDsKIAkJcGZtZW1fcmFuZ2UtPnJhbmdlbm8gPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcmVzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYwppbmRleCA5YzIyNGM5Li41NjM2YjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2libXBocF9yZXMuYwpAQCAtNTUsMTMgKzU1LDEyIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCW5ld2J1cyA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IGJ1c19ub2RlKSwgR0ZQX0tFUk5FTCk7CisJbmV3YnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ1c19ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdidXMpIHsKIAkJZXJyICgib3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltZW1zZXQgKG5ld2J1cywgMCwgc2l6ZW9mIChzdHJ1Y3QgYnVzX25vZGUpKTsKIAlpZiAoZmxhZykKIAkJbmV3YnVzLT5idXNubyA9IGJ1c25vOwogCWVsc2UKQEAgLTc5LDEyICs3OCwxMSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlycyA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHJlc291cmNlX25vZGUpLCBHRlBfS0VSTkVMKTsKKwlycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFycykgewogCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQgKHJzLCAwLCBzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSk7CiAJcnMtPmJ1c25vID0gY3Vyci0+YnVzX251bTsKIAlycy0+ZGV2ZnVuYyA9IGN1cnItPmRldl9mdW47CiAJcnMtPnN0YXJ0ID0gY3Vyci0+c3RhcnRfYWRkcjsKQEAgLTEwMCwxMiArOTgsMTEgQEAKIAl1OCBudW1fcmFuZ2VzID0gMDsKIAogCWlmIChmaXJzdF9idXMpIHsKLQkJbmV3YnVzID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgYnVzX25vZGUpLCBHRlBfS0VSTkVMKTsKKwkJbmV3YnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ1c19ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbmV3YnVzKSB7CiAJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeS5cbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJbWVtc2V0IChuZXdidXMsIDAsIHNpemVvZiAoc3RydWN0IGJ1c19ub2RlKSk7CiAJCW5ld2J1cy0+YnVzbm8gPSBjdXJyLT5idXNfbnVtOwogCX0gZWxzZSB7CiAJCW5ld2J1cyA9ICpuZXdfYnVzOwpAQCAtMTIyLDE0ICsxMTksMTMgQEAKIAkJfQogCX0KIAotCW5ld3JhbmdlID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmFuZ2Vfbm9kZSksIEdGUF9LRVJORUwpOworCW5ld3JhbmdlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld3JhbmdlKSB7CiAJCWlmIChmaXJzdF9idXMpCiAJCQlrZnJlZSAobmV3YnVzKTsKIAkJZXJyICgib3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0IChuZXdyYW5nZSwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmFuZ2Vfbm9kZSkpOwogCW5ld3JhbmdlLT5zdGFydCA9IGN1cnItPnN0YXJ0X2FkZHI7CiAJbmV3cmFuZ2UtPmVuZCA9IGN1cnItPmVuZF9hZGRyOwogCQkKQEAgLTMyOSw3ICszMjUsNyBAQAogCQkJCWlmICghbmV3X3BmbWVtKQogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQluZXdfcGZtZW0tPnR5cGUgPSBQRk1FTTsKLQkJCQluZXdfcGZtZW0tPmZyb21NZW0gPSBGQUxTRTsKKwkJCQluZXdfcGZtZW0tPmZyb21NZW0gPSAwOwogCQkJCWlmIChpYm1waHBfYWRkX3Jlc291cmNlIChuZXdfcGZtZW0pIDwgMCkgewogCQkJCQluZXdidXMgPSBhbGxvY19lcnJvcl9idXMgKGN1cnIsIDAsIDApOwogCQkJCQlpZiAoIW5ld2J1cykKQEAgLTQ2Niw3ICs0NjIsNyBAQAogc3RhdGljIHZvaWQgdXBkYXRlX3Jlc291cmNlcyAoc3RydWN0IGJ1c19ub2RlICpidXNfY3VyLCBpbnQgdHlwZSwgaW50IHJhbmdlbm8pCiB7CiAJc3RydWN0IHJlc291cmNlX25vZGUgKnJlcyA9IE5VTEw7Ci0JdTggZW9sID0gRkFMU0U7CS8qIGVuZCBvZiBsaXN0IGluZGljYXRvciAqLworCXU4IGVvbCA9IDA7CS8qIGVuZCBvZiBsaXN0IGluZGljYXRvciAqLwogCiAJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgTUVNOgpAQCAtNDkyLDcgKzQ4OCw3IEBACiAJCQllbHNlIGlmIChyZXMtPm5leHRSYW5nZSkKIAkJCQlyZXMgPSByZXMtPm5leHRSYW5nZTsKIAkJCWVsc2UgewotCQkJCWVvbCA9IFRSVUU7CisJCQkJZW9sID0gMTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtOTgzLDcgKzk3OSw3IEBACiAJaW50IG5vcmFuZ2VzID0gMDsKIAl1MzIgdG1wX3N0YXJ0OwkJLyogdGhpcyBpcyB0byBtYWtlIHN1cmUgc3RhcnQgYWRkcmVzcyBpcyBkaXZpc2libGUgYnkgdGhlIGxlbmd0aCBuZWVkZWQgKi8KIAl1MzIgdG1wX2RpdmlkZTsKLQl1OCBmbGFnID0gRkFMU0U7CisJdTggZmxhZyA9IDA7CiAKIAlpZiAoIXJlcykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDUwLDE3ICsxMDQ2LDE3IEBACiAKIAkJCQkJaWYgKChyYW5nZS0+c3RhcnQgJSB0bXBfZGl2aWRlKSA9PSAwKSB7CiAJCQkJCQkvKiBqdXN0IHBlcmZlY3QsIHN0YXJ0aW5nIGFkZHJlc3MgaXMgZGl2aXNpYmxlIGJ5IGxlbmd0aCAqLwotCQkJCQkJZmxhZyA9IFRSVUU7CisJCQkJCQlmbGFnID0gMTsKIAkJCQkJCWxlbl9jdXIgPSBsZW5fdG1wOwogCQkJCQkJc3RhcnRfY3VyID0gcmFuZ2UtPnN0YXJ0OwogCQkJCQl9IGVsc2UgewogCQkJCQkJLyogTmVlZHMgYWRqdXN0aW5nICovCiAJCQkJCQl0bXBfc3RhcnQgPSByYW5nZS0+c3RhcnQ7Ci0JCQkJCQlmbGFnID0gRkFMU0U7CisJCQkJCQlmbGFnID0gMDsKIAogCQkJCQkJd2hpbGUgKChsZW5fdG1wID0gcmVzX2N1ci0+c3RhcnQgLSAxIC0gdG1wX3N0YXJ0KSA+PSByZXMtPmxlbikgewogCQkJCQkJCWlmICgodG1wX3N0YXJ0ICUgdG1wX2RpdmlkZSkgPT0gMCkgewotCQkJCQkJCQlmbGFnID0gVFJVRTsKKwkJCQkJCQkJZmxhZyA9IDE7CiAJCQkJCQkJCWxlbl9jdXIgPSBsZW5fdG1wOwogCQkJCQkJCQlzdGFydF9jdXIgPSB0bXBfc3RhcnQ7CiAJCQkJCQkJCWJyZWFrOwpAQCAtMTA4OSwxNyArMTA4NSwxNyBAQAogCiAJCQkJCWlmICgoKHJlc19jdXItPmVuZCArIDEpICUgdG1wX2RpdmlkZSkgPT0gMCkgewogCQkJCQkJLyoganVzdCBwZXJmZWN0LCBzdGFydGluZyBhZGRyZXNzIGlzIGRpdmlzaWJsZSBieSBsZW5ndGggKi8KLQkJCQkJCWZsYWcgPSBUUlVFOworCQkJCQkJZmxhZyA9IDE7CiAJCQkJCQlsZW5fY3VyID0gbGVuX3RtcDsKIAkJCQkJCXN0YXJ0X2N1ciA9IHJlc19jdXItPmVuZCArIDE7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQkvKiBOZWVkcyBhZGp1c3RpbmcgKi8KIAkJCQkJCXRtcF9zdGFydCA9IHJlc19jdXItPmVuZCArIDE7Ci0JCQkJCQlmbGFnID0gRkFMU0U7CisJCQkJCQlmbGFnID0gMDsKIAogCQkJCQkJd2hpbGUgKChsZW5fdG1wID0gcmFuZ2UtPmVuZCAtIHRtcF9zdGFydCkgPj0gcmVzLT5sZW4pIHsKIAkJCQkJCQlpZiAoKHRtcF9zdGFydCAlIHRtcF9kaXZpZGUpID09IDApIHsKLQkJCQkJCQkJZmxhZyA9IFRSVUU7CisJCQkJCQkJCWZsYWcgPSAxOwogCQkJCQkJCQlsZW5fY3VyID0gbGVuX3RtcDsKIAkJCQkJCQkJc3RhcnRfY3VyID0gdG1wX3N0YXJ0OwogCQkJCQkJCQlicmVhazsKQEAgLTExMjcsMTcgKzExMjMsMTcgQEAKIAkJCQkJaWYgKChsZW5fdG1wIDwgbGVuX2N1cikgfHwgKGxlbl9jdXIgPT0gMCkpIHsKIAkJCQkJCWlmICgocmFuZ2UtPnN0YXJ0ICUgdG1wX2RpdmlkZSkgPT0gMCkgewkKIAkJCQkJCQkvKiBqdXN0IHBlcmZlY3QsIHN0YXJ0aW5nIGFkZHJlc3MgaXMgZGl2aXNpYmxlIGJ5IGxlbmd0aCAqLwotCQkJCQkJCWZsYWcgPSBUUlVFOworCQkJCQkJCWZsYWcgPSAxOwogCQkJCQkJCWxlbl9jdXIgPSBsZW5fdG1wOwogCQkJCQkJCXN0YXJ0X2N1ciA9IHJhbmdlLT5zdGFydDsKIAkJCQkJCX0gZWxzZSB7CiAJCQkJCQkJLyogTmVlZHMgYWRqdXN0aW5nICovCiAJCQkJCQkJdG1wX3N0YXJ0ID0gcmFuZ2UtPnN0YXJ0OwotCQkJCQkJCWZsYWcgPSBGQUxTRTsKKwkJCQkJCQlmbGFnID0gMDsKIAogCQkJCQkJCXdoaWxlICgobGVuX3RtcCA9IHJlc19jdXItPnN0YXJ0IC0gMSAtIHRtcF9zdGFydCkgPj0gcmVzLT5sZW4pIHsKIAkJCQkJCQkJaWYgKCh0bXBfc3RhcnQgJSB0bXBfZGl2aWRlKSA9PSAwKSB7Ci0JCQkJCQkJCQlmbGFnID0gVFJVRTsKKwkJCQkJCQkJCWZsYWcgPSAxOwogCQkJCQkJCQkJbGVuX2N1ciA9IGxlbl90bXA7CiAJCQkJCQkJCQlzdGFydF9jdXIgPSB0bXBfc3RhcnQ7CiAJCQkJCQkJCQlicmVhazsKQEAgLTExNjIsMTcgKzExNTgsMTcgQEAKIAkJCQkJaWYgKChsZW5fdG1wIDwgbGVuX2N1cikgfHwgKGxlbl9jdXIgPT0gMCkpIHsKIAkJCQkJCWlmICgoKHJlc19wcmV2LT5lbmQgKyAxKSAlIHRtcF9kaXZpZGUpID09IDApIHsKIAkJCQkJCQkvKiBqdXN0IHBlcmZlY3QsIHN0YXJ0aW5nIGFkZHJlc3MncyBkaXZpc2libGUgYnkgbGVuZ3RoICovCi0JCQkJCQkJZmxhZyA9IFRSVUU7CisJCQkJCQkJZmxhZyA9IDE7CiAJCQkJCQkJbGVuX2N1ciA9IGxlbl90bXA7CiAJCQkJCQkJc3RhcnRfY3VyID0gcmVzX3ByZXYtPmVuZCArIDE7CiAJCQkJCQl9IGVsc2UgewogCQkJCQkJCS8qIE5lZWRzIGFkanVzdGluZyAqLwogCQkJCQkJCXRtcF9zdGFydCA9IHJlc19wcmV2LT5lbmQgKyAxOwotCQkJCQkJCWZsYWcgPSBGQUxTRTsKKwkJCQkJCQlmbGFnID0gMDsKIAogCQkJCQkJCXdoaWxlICgobGVuX3RtcCA9IHJlc19jdXItPnN0YXJ0IC0gMSAtIHRtcF9zdGFydCkgPj0gcmVzLT5sZW4pIHsKIAkJCQkJCQkJaWYgKCh0bXBfc3RhcnQgJSB0bXBfZGl2aWRlKSA9PSAwKSB7Ci0JCQkJCQkJCQlmbGFnID0gVFJVRTsKKwkJCQkJCQkJCWZsYWcgPSAxOwogCQkJCQkJCQkJbGVuX2N1ciA9IGxlbl90bXA7CiAJCQkJCQkJCQlzdGFydF9jdXIgPSB0bXBfc3RhcnQ7CiAJCQkJCQkJCQlicmVhazsKQEAgLTEyMjEsMTcgKzEyMTcsMTcgQEAKIAkJCQlpZiAoKGxlbl90bXAgPCBsZW5fY3VyKSB8fCAobGVuX2N1ciA9PSAwKSkgewogCQkJCQlpZiAoKHJhbmdlLT5zdGFydCAlIHRtcF9kaXZpZGUpID09IDApIHsKIAkJCQkJCS8qIGp1c3QgcGVyZmVjdCwgc3RhcnRpbmcgYWRkcmVzcydzIGRpdmlzaWJsZSBieSBsZW5ndGggKi8KLQkJCQkJCWZsYWcgPSBUUlVFOworCQkJCQkJZmxhZyA9IDE7CiAJCQkJCQlsZW5fY3VyID0gbGVuX3RtcDsKIAkJCQkJCXN0YXJ0X2N1ciA9IHJhbmdlLT5zdGFydDsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCS8qIE5lZWRzIGFkanVzdGluZyAqLwogCQkJCQkJdG1wX3N0YXJ0ID0gcmFuZ2UtPnN0YXJ0OwotCQkJCQkJZmxhZyA9IEZBTFNFOworCQkJCQkJZmxhZyA9IDA7CiAKIAkJCQkJCXdoaWxlICgobGVuX3RtcCA9IHJhbmdlLT5lbmQgLSB0bXBfc3RhcnQpID49IHJlcy0+bGVuKSB7CiAJCQkJCQkJaWYgKCh0bXBfc3RhcnQgJSB0bXBfZGl2aWRlKSA9PSAwKSB7Ci0JCQkJCQkJCWZsYWcgPSBUUlVFOworCQkJCQkJCQlmbGFnID0gMTsKIAkJCQkJCQkJbGVuX2N1ciA9IGxlbl90bXA7CiAJCQkJCQkJCXN0YXJ0X2N1ciA9IHRtcF9zdGFydDsKIAkJCQkJCQkJYnJlYWs7CkBAIC0xMjg1LDE3ICsxMjgxLDE3IEBACiAJCQkJCWlmICgobGVuX3RtcCA8IGxlbl9jdXIpIHx8IChsZW5fY3VyID09IDApKSB7CiAJCQkJCQlpZiAoKHJhbmdlLT5zdGFydCAlIHRtcF9kaXZpZGUpID09IDApIHsKIAkJCQkJCQkvKiBqdXN0IHBlcmZlY3QsIHN0YXJ0aW5nIGFkZHJlc3MncyBkaXZpc2libGUgYnkgbGVuZ3RoICovCi0JCQkJCQkJZmxhZyA9IFRSVUU7CisJCQkJCQkJZmxhZyA9IDE7CiAJCQkJCQkJbGVuX2N1ciA9IGxlbl90bXA7CiAJCQkJCQkJc3RhcnRfY3VyID0gcmFuZ2UtPnN0YXJ0OwogCQkJCQkJfSBlbHNlIHsKIAkJCQkJCQkvKiBOZWVkcyBhZGp1c3RpbmcgKi8KIAkJCQkJCQl0bXBfc3RhcnQgPSByYW5nZS0+c3RhcnQ7Ci0JCQkJCQkJZmxhZyA9IEZBTFNFOworCQkJCQkJCWZsYWcgPSAwOwogCiAJCQkJCQkJd2hpbGUgKChsZW5fdG1wID0gcmFuZ2UtPmVuZCAtIHRtcF9zdGFydCkgPj0gcmVzLT5sZW4pIHsKIAkJCQkJCQkJaWYgKCh0bXBfc3RhcnQgJSB0bXBfZGl2aWRlKSA9PSAwKSB7Ci0JCQkJCQkJCQlmbGFnID0gVFJVRTsKKwkJCQkJCQkJCWZsYWcgPSAxOwogCQkJCQkJCQkJbGVuX2N1ciA9IGxlbl90bXA7CiAJCQkJCQkJCQlzdGFydF9jdXIgPSB0bXBfc3RhcnQ7CiAJCQkJCQkJCQlicmVhazsKQEAgLTE2ODgsNyArMTY4NCw3IEBACiAJCWJ1c19jdXIgPSBsaXN0X2VudHJ5ICh0bXAsIHN0cnVjdCBidXNfbm9kZSwgYnVzX2xpc3QpOwogCQlpZiAoKCFidXNfY3VyLT5yYW5nZVBGTWVtKSAmJiAoYnVzX2N1ci0+Zmlyc3RQRk1lbSkpIHsKIAkJCWZvciAocGZtZW1fY3VyID0gYnVzX2N1ci0+Zmlyc3RQRk1lbSwgcGZtZW1fcHJldiA9IE5VTEw7IHBmbWVtX2N1cjsgcGZtZW1fcHJldiA9IHBmbWVtX2N1ciwgcGZtZW1fY3VyID0gcGZtZW1fY3VyLT5uZXh0KSB7Ci0JCQkJcGZtZW1fY3VyLT5mcm9tTWVtID0gVFJVRTsKKwkJCQlwZm1lbV9jdXItPmZyb21NZW0gPSAxOwogCQkJCWlmIChwZm1lbV9wcmV2KQogCQkJCQlwZm1lbV9wcmV2LT5uZXh0ID0gcGZtZW1fY3VyLT5uZXh0OwogCQkJCWVsc2UKQEAgLTE3MDUsMTIgKzE3MDEsMTEgQEAKIAogCQkJCWJ1c19jdXItPmZpcnN0UEZNZW1Gcm9tTWVtID0gcGZtZW1fY3VyOwogCi0JCQkJbWVtID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSksIEdGUF9LRVJORUwpOwkJCisJCQkJbWVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlX25vZGUpLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIW1lbSkgewogCQkJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCX0KLQkJCQltZW1zZXQgKG1lbSwgMCwgc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSkpOwogCQkJCW1lbS0+dHlwZSA9IE1FTTsKIAkJCQltZW0tPmJ1c25vID0gcGZtZW1fY3VyLT5idXNubzsKIAkJCQltZW0tPmRldmZ1bmMgPSBwZm1lbV9jdXItPmRldmZ1bmM7CkBAIC0xOTk0LDEyICsxOTg5LDExIEBACiAJCQkJCQllbmRfYWRkcmVzcyB8PSAodXBwZXJfaW9fZW5kIDw8IDE2KTsKIAogCQkJCQkJaWYgKChzdGFydF9hZGRyZXNzKSAmJiAoc3RhcnRfYWRkcmVzcyA8PSBlbmRfYWRkcmVzcykpIHsKLQkJCQkJCQlyYW5nZSA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHJhbmdlX25vZGUpLCBHRlBfS0VSTkVMKTsKKwkJCQkJCQlyYW5nZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCQkJaWYgKCFyYW5nZSkgewogCQkJCQkJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCQkJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCQkJCX0KLQkJCQkJCQltZW1zZXQgKHJhbmdlLCAwLCBzaXplb2YgKHN0cnVjdCByYW5nZV9ub2RlKSk7CiAJCQkJCQkJcmFuZ2UtPnN0YXJ0ID0gc3RhcnRfYWRkcmVzczsKIAkJCQkJCQlyYW5nZS0+ZW5kID0gZW5kX2FkZHJlc3MgKyAweGZmZjsKIApAQCAtMjAyMCwxMyArMjAxNCwxMiBAQAogCQkJCQkJCWZpeF9yZXNvdXJjZXMgKGJ1c19zZWMpOwogCiAJCQkJCQkJaWYgKGlibXBocF9maW5kX3Jlc291cmNlIChidXNfY3VyLCBzdGFydF9hZGRyZXNzLCAmaW8sIElPKSkgewotCQkJCQkJCQlpbyA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHJlc291cmNlX25vZGUpLCBHRlBfS0VSTkVMKTsJCQkJCQkJCisJCQkJCQkJCWlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlX25vZGUpLCBHRlBfS0VSTkVMKTsKIAkJCQkJCQkJaWYgKCFpbykgewogCQkJCQkJCQkJa2ZyZWUgKHJhbmdlKTsKIAkJCQkJCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQkJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCQkJCQl9Ci0JCQkJCQkJCW1lbXNldCAoaW8sIDAsIHNpemVvZiAoc3RydWN0IHJlc291cmNlX25vZGUpKTsKIAkJCQkJCQkJaW8tPnR5cGUgPSBJTzsKIAkJCQkJCQkJaW8tPmJ1c25vID0gYnVzX2N1ci0+YnVzbm87CiAJCQkJCQkJCWlvLT5kZXZmdW5jID0gKChkZXZpY2UgPDwgMykgfCAoZnVuY3Rpb24gJiAweDcpKTsKQEAgLTIwNDUsMTIgKzIwMzgsMTEgQEAKIAogCQkJCQkJaWYgKChzdGFydF9hZGRyZXNzKSAmJiAoc3RhcnRfYWRkcmVzcyA8PSBlbmRfYWRkcmVzcykpIHsKIAotCQkJCQkJCXJhbmdlID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmFuZ2Vfbm9kZSksIEdGUF9LRVJORUwpOworCQkJCQkJCXJhbmdlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhbmdlX25vZGUpLCBHRlBfS0VSTkVMKTsKIAkJCQkJCQlpZiAoIXJhbmdlKSB7CiAJCQkJCQkJCWVyciAoIm91dCBvZiBzeXN0ZW0gbWVtb3J5XG4iKTsKIAkJCQkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJCQkJfQotCQkJCQkJCW1lbXNldCAocmFuZ2UsIDAsIHNpemVvZiAoc3RydWN0IHJhbmdlX25vZGUpKTsKIAkJCQkJCQlyYW5nZS0+c3RhcnQgPSBzdGFydF9hZGRyZXNzOwogCQkJCQkJCXJhbmdlLT5lbmQgPSBlbmRfYWRkcmVzcyArIDB4ZmZmZmY7CiAKQEAgLTIwNzIsMTMgKzIwNjQsMTIgQEAKIAkJCQkJCQlmaXhfcmVzb3VyY2VzIChidXNfc2VjKTsKIAogCQkJCQkJCWlmIChpYm1waHBfZmluZF9yZXNvdXJjZSAoYnVzX2N1ciwgc3RhcnRfYWRkcmVzcywgJm1lbSwgTUVNKSkgewotCQkJCQkJCQltZW0gPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJCQkJCQkJCW1lbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCQkJCWlmICghbWVtKSB7CiAJCQkJCQkJCQlrZnJlZSAocmFuZ2UpOwogCQkJCQkJCQkJZXJyICgib3V0IG9mIHN5c3RlbSBtZW1vcnlcbiIpOwogCQkJCQkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJCQkJCX0KLQkJCQkJCQkJbWVtc2V0IChtZW0sIDAsIHNpemVvZiAoc3RydWN0IHJlc291cmNlX25vZGUpKTsKIAkJCQkJCQkJbWVtLT50eXBlID0gTUVNOwogCQkJCQkJCQltZW0tPmJ1c25vID0gYnVzX2N1ci0+YnVzbm87CiAJCQkJCQkJCW1lbS0+ZGV2ZnVuYyA9ICgoZGV2aWNlIDw8IDMpIHwgKGZ1bmN0aW9uICYgMHg3KSk7CkBAIC0yMTAxLDEyICsyMDkyLDExIEBACiAKIAkJCQkJCWlmICgoc3RhcnRfYWRkcmVzcykgJiYgKHN0YXJ0X2FkZHJlc3MgPD0gZW5kX2FkZHJlc3MpKSB7CiAKLQkJCQkJCQlyYW5nZSA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHJhbmdlX25vZGUpLCBHRlBfS0VSTkVMKTsKKwkJCQkJCQlyYW5nZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYW5nZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCQkJaWYgKCFyYW5nZSkgewogCQkJCQkJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCQkJCQkJCXJldHVybiAtRU5PTUVNOwogCQkJCQkJCX0KLQkJCQkJCQltZW1zZXQgKHJhbmdlLCAwLCBzaXplb2YgKHN0cnVjdCByYW5nZV9ub2RlKSk7CiAJCQkJCQkJcmFuZ2UtPnN0YXJ0ID0gc3RhcnRfYWRkcmVzczsKIAkJCQkJCQlyYW5nZS0+ZW5kID0gZW5kX2FkZHJlc3MgKyAweGZmZmZmOwogCkBAIC0yMTI3LDIwICsyMTE3LDE5IEBACiAKIAkJCQkJCQlmaXhfcmVzb3VyY2VzIChidXNfc2VjKTsKIAkJCQkJCQlpZiAoaWJtcGhwX2ZpbmRfcmVzb3VyY2UgKGJ1c19jdXIsIHN0YXJ0X2FkZHJlc3MsICZwZm1lbSwgUEZNRU0pKSB7Ci0JCQkJCQkJCXBmbWVtID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcmVzb3VyY2Vfbm9kZSksIEdGUF9LRVJORUwpOworCQkJCQkJCQlwZm1lbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZV9ub2RlKSwgR0ZQX0tFUk5FTCk7CiAJCQkJCQkJCWlmICghcGZtZW0pIHsKIAkJCQkJCQkJCWtmcmVlIChyYW5nZSk7CiAJCQkJCQkJCQllcnIgKCJvdXQgb2Ygc3lzdGVtIG1lbW9yeVxuIik7CiAJCQkJCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQkJCQkJfQotCQkJCQkJCQltZW1zZXQgKHBmbWVtLCAwLCBzaXplb2YgKHN0cnVjdCByZXNvdXJjZV9ub2RlKSk7CiAJCQkJCQkJCXBmbWVtLT50eXBlID0gUEZNRU07CiAJCQkJCQkJCXBmbWVtLT5idXNubyA9IGJ1c19jdXItPmJ1c25vOwogCQkJCQkJCQlwZm1lbS0+ZGV2ZnVuYyA9ICgoZGV2aWNlIDw8IDMpIHwgKGZ1bmN0aW9uICYgMHg3KSk7CiAJCQkJCQkJCXBmbWVtLT5zdGFydCA9IHN0YXJ0X2FkZHJlc3M7CiAJCQkJCQkJCXBmbWVtLT5lbmQgPSBlbmRfYWRkcmVzcyArIDB4ZmZmZmY7CiAJCQkJCQkJCXBmbWVtLT5sZW4gPSBwZm1lbS0+ZW5kIC0gcGZtZW0tPnN0YXJ0ICsgMTsKLQkJCQkJCQkJcGZtZW0tPmZyb21NZW0gPSBGQUxTRTsKKwkJCQkJCQkJcGZtZW0tPmZyb21NZW0gPSAwOwogCiAJCQkJCQkJCWlibXBocF9hZGRfcmVzb3VyY2UgKHBmbWVtKTsKIAkJCQkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnLmgKaW5kZXggODhkNDRmNy4uZWIwZDAxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Zy5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWcuaApAQCAtMTc2LDUgKzE3NiwyMSBAQAogCQkJCQkgc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvICppbmZvKTsKIGV4dGVybiBzdHJ1Y3Qgc3Vic3lzdGVtIHBjaV9ob3RwbHVnX3Nsb3RzX3N1YnN5czsKIAorc3RydWN0IGhvdHBsdWdfcGFyYW1zIHsKKwl1OCBjYWNoZV9saW5lX3NpemU7CisJdTggbGF0ZW5jeV90aW1lcjsKKwl1OCBlbmFibGVfc2VycjsKKwl1OCBlbmFibGVfcGVycjsKK307CisKKyNpZmRlZiBDT05GSUdfQUNQSQorI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjdHlwZXMuaD4KK2V4dGVybiBhY3BpX3N0YXR1cyBhY3BpX3J1bl9vc2hwKGFjcGlfaGFuZGxlIGhhbmRsZSk7CitleHRlcm4gYWNwaV9zdGF0dXMgYWNwaV9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQlzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCk7CitpbnQgYWNwaV9yb290X2JyaWRnZShhY3BpX2hhbmRsZSBoYW5kbGUpOworI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKaW5kZXggMGFhYzZhNi4uOTJjMWYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkJLyogc2lnbmFsX3BlbmRpbmcoKSAqLwogI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJwY2lfaG90cGx1Zy5oIgogCiAjZGVmaW5lIE1ZX05BTUUJInBjaWVocCIKQEAgLTQ5LDEyICs1MCw2IEBACiAjZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKICNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogCi1zdHJ1Y3QgaG90cGx1Z19wYXJhbXMgewotCXU4IGNhY2hlX2xpbmVfc2l6ZTsKLQl1OCBsYXRlbmN5X3RpbWVyOwotCXU4IGVuYWJsZV9zZXJyOwotCXU4IGVuYWJsZV9wZXJyOwotfTsKIAogc3RydWN0IHNsb3QgewogCXN0cnVjdCBzbG90ICpuZXh0OwpAQCAtOTYsNyArOTEsNyBAQAogI2RlZmluZSBNQVhfRVZFTlRTCQkxMAogc3RydWN0IGNvbnRyb2xsZXIgewogCXN0cnVjdCBjb250cm9sbGVyICpuZXh0OwotCXN0cnVjdCBzZW1hcGhvcmUgY3JpdF9zZWN0OwkvKiBjcml0aWNhbCBzZWN0aW9uIHNlbWFwaG9yZSAqLworCXN0cnVjdCBtdXRleCBjcml0X3NlY3Q7CQkvKiBjcml0aWNhbCBzZWN0aW9uIG11dGV4ICovCiAJc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKmhwY19jdGxyX2hhbmRsZTsgLyogSFBDIGNvbnRyb2xsZXIgaGFuZGxlICovCiAJaW50IG51bV9zbG90czsJCQkvKiBOdW1iZXIgb2Ygc2xvdHMgb24gY3RsciAqLwogCWludCBzbG90X251bV9pbmM7CQkvKiAxIG9yIC0xICovCkBAIC0xOTEsOSArMTg2LDYgQEAKIC8qIHBjaSBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQJcGNpZWhwX2NvbmZpZ3VyZV9kZXZpY2UJCShzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKIGV4dGVybiBpbnQJcGNpZWhwX3VuY29uZmlndXJlX2RldmljZQkoc3RydWN0IHNsb3QgKnBfc2xvdCk7Ci1leHRlcm4gaW50CXBjaWVocF9nZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotZXh0ZXJuIHZvaWQJcGNpZWhwX2dldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAotCSAgICAgICAJc3RydWN0IGhvdHBsdWdfcGFyYW1zICpocHApOwogCiAKIApAQCAtMjg1LDQgKzI3NywxOSBAQAogCWludAkoKmNoZWNrX2xua19zdGF0dXMpCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CiB9OwogCisKKyNpZmRlZiBDT05GSUdfQUNQSQorI2RlZmluZSBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShkZXYpIFwKKwlwY2llaHBfYWNwaV9nZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKGRldikKK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVocF9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQoreworCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoZGV2LCBocHApKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShkZXYpIAkwCisjZGVmaW5lIHBjaWVocF9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoZGV2LCBocHApICAgICgtRU5PREVWKQorI2VuZGlmIAkJCQkvKiBDT05GSUdfQUNQSSAqLwogI2VuZGlmCQkJCS8qIF9QQ0lFSFBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCmluZGV4IDRmYjU2OTAuLjYwMWNmOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKQEAgLTExNywyNyArMTE3LDIzIEBACiAJc2xvdF9udW1iZXIgPSBjdHJsLT5maXJzdF9zbG90OwogCiAJd2hpbGUgKG51bWJlcl9vZl9zbG90cykgewotCQlzbG90ID0ga21hbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKTsKKwkJc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKCpzbG90KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2xvdCkKIAkJCWdvdG8gZXJyb3I7CiAKLQkJbWVtc2V0KHNsb3QsIDAsIHNpemVvZihzdHJ1Y3Qgc2xvdCkpOwogCQlzbG90LT5ob3RwbHVnX3Nsb3QgPQotCQkJCWttYWxsb2Moc2l6ZW9mKCooc2xvdC0+aG90cGx1Z19zbG90KSksCisJCQkJa3phbGxvYyhzaXplb2YoKihzbG90LT5ob3RwbHVnX3Nsb3QpKSwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIXNsb3QtPmhvdHBsdWdfc2xvdCkKIAkJCWdvdG8gZXJyb3Jfc2xvdDsKIAkJaG90cGx1Z19zbG90ID0gc2xvdC0+aG90cGx1Z19zbG90OwotCQltZW1zZXQoaG90cGx1Z19zbG90LCAwLCBzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdCkpOwogCiAJCWhvdHBsdWdfc2xvdC0+aW5mbyA9Ci0JCQlrbWFsbG9jKHNpemVvZigqKGhvdHBsdWdfc2xvdC0+aW5mbykpLAorCQkJa3phbGxvYyhzaXplb2YoKihob3RwbHVnX3Nsb3QtPmluZm8pKSwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIWhvdHBsdWdfc2xvdC0+aW5mbykKIAkJCWdvdG8gZXJyb3JfaHBzbG90OwogCQlob3RwbHVnX3Nsb3RfaW5mbyA9IGhvdHBsdWdfc2xvdC0+aW5mbzsKLQkJbWVtc2V0KGhvdHBsdWdfc2xvdF9pbmZvLCAwLAotCQkJCQlzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSk7CiAJCWhvdHBsdWdfc2xvdC0+bmFtZSA9IGttYWxsb2MoU0xPVF9OQU1FX1NJWkUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWhvdHBsdWdfc2xvdC0+bmFtZSkKIAkJCWdvdG8gZXJyb3JfaW5mbzsKQEAgLTM3MywxMiArMzY5LDExIEBACiAJdTggdmFsdWU7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJCi0JY3RybCA9IGttYWxsb2Moc2l6ZW9mKCpjdHJsKSwgR0ZQX0tFUk5FTCk7CisJY3RybCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHJsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjdHJsKSB7CiAJCWVycigiJXMgOiBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlnb3RvIGVycl9vdXRfbm9uZTsKIAl9Ci0JbWVtc2V0KGN0cmwsIDAsIHNpemVvZihzdHJ1Y3QgY29udHJvbGxlcikpOwogCiAJcGRldiA9IGRldi0+cG9ydDsKIAljdHJsLT5wY2lfZGV2ID0gcGRldjsKQEAgLTQzOSw3ICs0MzQsNyBAQAogCX0KIAogCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KLQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOworCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAl0X3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyh0X3Nsb3QsICZ2YWx1ZSk7IC8qIENoZWNrIGlmIHNsb3QgaXMgb2NjdXBpZWQgKi8KIAkKQEAgLTQ0Nyw3ICs0NDIsNyBAQAogCQlyYyA9IHRfc2xvdC0+aHBjX29wcy0+cG93ZXJfb2ZmX3Nsb3QodF9zbG90KTsgLyogUG93ZXIgb2ZmIHNsb3QgaWYgbm90IG9jY3VwaWVkKi8KIAkJaWYgKHJjKSB7CiAJCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAJCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsX3Nsb3Q7CiAJCX0gZWxzZQogCQkJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KQEAgLTQ1NSw3ICs0NTAsNyBAQAogCX0KIAogCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwppbmRleCA4M2M0Yjg2Li4zM2QxOTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCkBAIC0yMjksMTMgKzIyOSwxMyBAQAogc3RhdGljIHZvaWQgc2V0X3Nsb3Rfb2ZmKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3Qgc2xvdCAqIHBzbG90KQogewogCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KLQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOworCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAkvKiB0dXJuIG9mZiBzbG90LCB0dXJuIG9uIEFtYmVyIExFRCwgdHVybiBvZmYgR3JlZW4gTEVEIGlmIHN1cHBvcnRlZCovCiAJaWYgKFBPV0VSX0NUUkwoY3RybC0+Y3RybGNhcCkpIHsKIAkJaWYgKHBzbG90LT5ocGNfb3BzLT5wb3dlcl9vZmZfc2xvdChwc2xvdCkpIHsgICAKIAkJCWVycigiJXM6IElzc3VlIG9mIFNsb3QgUG93ZXIgT2ZmIGNvbW1hbmQgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAJCQlyZXR1cm47CiAJCX0KIAkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwpAQCAtMjQ5LDE0ICsyNDksMTQgQEAKIAlpZiAoQVRUTl9MRUQoY3RybC0+Y3RybGNhcCkpIHsgCiAJCWlmIChwc2xvdC0+aHBjX29wcy0+c2V0X2F0dGVudGlvbl9zdGF0dXMocHNsb3QsIDEpKSB7ICAgCiAJCQllcnIoIiVzOiBJc3N1ZSBvZiBTZXQgQXR0ZW50aW9uIExlZCBjb21tYW5kIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOworCQkJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuOwogCQl9CiAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKIAl9CiAKIAkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCXVwKCZjdHJsLT5jcml0X3NlY3QpOworCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIH0KIAogLyoqCkBAIC0yNzksMTMgKzI3OSwxMyBAQAogCQkJY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LCBocF9zbG90KTsKIAogCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KLQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOworCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAlpZiAoUE9XRVJfQ1RSTChjdHJsLT5jdHJsY2FwKSkgewogCQkvKiBQb3dlciBvbiBzbG90ICovCiAJCXJjID0gcF9zbG90LT5ocGNfb3BzLT5wb3dlcl9vbl9zbG90KHBfc2xvdCk7CiAJCWlmIChyYykgewotCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMzAxLDcgKzMwMSw3IEBACiAJfQogCiAJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAkvKiBXYWl0IGZvciB+MSBzZWNvbmQgKi8KIAl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CkBAIC0zMzUsNyArMzM1LDcgQEAKIAkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGN0cmwtPnBjaV9kZXYpOwogCWlmIChQV1JfTEVEKGN0cmwtPmN0cmxjYXApKSB7CiAJCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KLSAgCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOworICAJCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKICAgCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9vbihwX3Nsb3QpOwogICAKQEAgLTM0Myw3ICszNDMsNyBAQAogICAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKICAgCQogICAJCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0gIAkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisgIAkJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogICAJfQogCXJldHVybiAwOwogCkBAIC0zNzUsMTQgKzM3NSwxNCBAQAogCWRiZygiSW4gJXMsIGhwX3Nsb3QgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBocF9zbG90KTsKIAogCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KLQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOworCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAlpZiAoUE9XRVJfQ1RSTChjdHJsLT5jdHJsY2FwKSkgewogCQkvKiBwb3dlciBvZmYgc2xvdCAqLwogCQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+cG93ZXJfb2ZmX3Nsb3QocF9zbG90KTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IERpc2FibGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwkJCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiByYzsKIAkJfQogCQkvKiBXYWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSAqLwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJfQogCiAJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0NSw3ICs0NDUsNyBAQAogCiAJCWlmIChwY2llaHBfZW5hYmxlX3Nsb3QocF9zbG90KSAmJiBQV1JfTEVEKHBfc2xvdC0+Y3RybC0+Y3RybGNhcCkpIHsKIAkJCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KLQkJCWRvd24oJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwkJCW11dGV4X2xvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAogCQkJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfb2ZmKHBfc2xvdCk7CiAKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCQkJd2FpdF9mb3JfY3RybF9pcnEgKHBfc2xvdC0+Y3RybCk7CiAKIAkJCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JCQl1cCgmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOworCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJCX0KIAkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKIAl9CkBAIC00OTUsNyArNDk1LDcgQEAKIAogCQlpZiAocGNpZWhwX2VuYWJsZV9zbG90KHBfc2xvdCkgJiYgUFdSX0xFRChwX3Nsb3QtPmN0cmwtPmN0cmxjYXApKSB7CiAJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0JCQlkb3duKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF9sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAKIAkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOwogCkBAIC01MDMsNyArNTAzLDcgQEAKIAkJCXdhaXRfZm9yX2N0cmxfaXJxIChwX3Nsb3QtPmN0cmwpOwogCiAJCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCQkJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCQl9CiAJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CiAJfQpAQCAtNjE2LDcgKzYxNiw3IEBACiAJCQkJCXN3aXRjaCAocF9zbG90LT5zdGF0ZSkgewogCQkJCQljYXNlIEJMSU5LSU5HT0ZGX1NUQVRFOgogCQkJCQkJLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwotCQkJCQkJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKKwkJCQkJCW11dGV4X2xvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAJCQkJCQkKIAkJCQkJCWlmIChQV1JfTEVEKGN0cmwtPmN0cmxjYXApKSB7CiAJCQkJCQkJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfb24ocF9zbG90KTsKQEAgLTYzMCwxMSArNjMwLDExIEBACiAJCQkJCQkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogCQkJCQkJfQogCQkJCQkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQkJCQkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOworCQkJCQkJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCQkJCQkJYnJlYWs7CiAJCQkJCWNhc2UgQkxJTktJTkdPTl9TVEFURToKIAkJCQkJCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KLQkJCQkJCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7CisJCQkJCQltdXRleF9sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJCQkJCQlpZiAoUFdSX0xFRChjdHJsLT5jdHJsY2FwKSkgewogCQkJCQkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAJCQkJCQkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogCQkJCQkJfQogCQkJCQkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQkJCQkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOworCQkJCQkJbXV0ZXhfdW5sb2NrKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJCQkJCQlicmVhazsKIAkJCQkJZGVmYXVsdDoKQEAgLTY3Niw3ICs2NzYsNyBAQAogCQkJCQkJfQogCiAJCQkJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0JCQkJCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOworCQkJCQkJbXV0ZXhfbG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAogCQkJCQkJLyogYmxpbmsgZ3JlZW4gTEVEIGFuZCB0dXJuIG9mZiBhbWJlciAqLwogCQkJCQkJaWYgKFBXUl9MRUQoY3RybC0+Y3RybGNhcCkpIHsKQEAgLTY5Myw3ICs2OTMsNyBAQAogCQkJCQkJfQogCiAJCQkJCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCQkJCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJCQkJCQltdXRleF91bmxvY2soJmN0cmwtPmNyaXRfc2VjdCk7CiAKIAkJCQkJCWluaXRfdGltZXIoJnBfc2xvdC0+dGFza19ldmVudCk7CiAJCQkJCQlwX3Nsb3QtPnRhc2tfZXZlbnQuZXhwaXJlcyA9IGppZmZpZXMgKyA1ICogSFo7ICAgLyogNSBzZWNvbmQgZGVsYXkgKi8KQEAgLTcwOCw3ICs3MDgsNyBAQAogCQkJCQlpZiAoUE9XRVJfQ1RSTChjdHJsLT5jdHJsY2FwKSkgewogCQkJCQkJZGJnKCJwb3dlciBmYXVsdFxuIik7CiAJCQkJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0JCQkJCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOworCQkJCQkJbXV0ZXhfbG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAogCQkJCQkJaWYgKEFUVE5fTEVEKGN0cmwtPmN0cmxjYXApKSB7CiAJCQkJCQkJcF9zbG90LT5ocGNfb3BzLT5zZXRfYXR0ZW50aW9uX3N0YXR1cyhwX3Nsb3QsIDEpOwpAQCAtNzIxLDcgKzcyMSw3IEBACiAJCQkJCQl9CiAKIAkJCQkJCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JCQkJCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKwkJCQkJCW11dGV4X3VubG9jaygmY3RybC0+Y3JpdF9zZWN0KTsKIAkJCQkJfQogCQkJCX0KIAkJCQkvKioqKioqKioqKipTVVJQUklTRSBSRU1PVkFMKioqKioqKioqKioqKioqKioqKiovCkBAIC03NTYsMTkgKzc1NiwxOSBAQAogCWludCByYzsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiAobGF0Y2ggY2xvc2VkLCBjYXJkIHByZXNlbnQsIHBvd2VyIG9mZikgKi8KLQlkb3duKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfbG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChyYyB8fCAhZ2V0c3RhdHVzKSB7CiAJCWluZm8oIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXgpXG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+bnVtYmVyKTsKLQkJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJCXJldHVybiAxOwogCX0KIAlpZiAoTVJMX1NFTlMocF9zbG90LT5jdHJsLT5jdHJsY2FwKSkgewkKIAkJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9sYXRjaF9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKHJjIHx8IGdldHN0YXR1cykgewogCQkJaW5mbygiJXM6IGxhdGNoIG9wZW4gb24gc2xvdCgleClcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5udW1iZXIpOwotCQkJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9CkBAIC03NzcsMTEgKzc3NywxMSBAQAogCQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAocmMgfHwgZ2V0c3RhdHVzKSB7CiAJCQlpbmZvKCIlczogYWxyZWFkeSBlbmFibGVkIG9uIHNsb3QoJXgpXG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+bnVtYmVyKTsKLQkJCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQotCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAKIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9sYXRjaF9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIApAQCAtODA2LDEzICs4MDYsMTMgQEAKIAkJcmV0dXJuIDE7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgKGxhdGNoIGNsb3NlZCwgY2FyZCBwcmVzZW50LCBwb3dlciBvbikgKi8KLQlkb3duKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfbG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCiAJaWYgKCFIUF9TVVBSX1JNKHBfc2xvdC0+Y3RybC0+Y3RybGNhcCkpIHsJCiAJCXJldCA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJCWlmIChyZXQgfHwgIWdldHN0YXR1cykgewogCQkJaW5mbygiJXM6IG5vIGFkYXB0ZXIgb24gc2xvdCgleClcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5udW1iZXIpOwotCQkJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9CkBAIC04MjEsNyArODIxLDcgQEAKIAkJcmV0ID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJCWlmIChyZXQgfHwgZ2V0c3RhdHVzKSB7CiAJCQlpbmZvKCIlczogbGF0Y2ggb3BlbiBvbiBzbG90KCV4KVxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPm51bWJlcik7Ci0JCQl1cCgmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOworCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KQEAgLTgzMCwxMiArODMwLDEyIEBACiAJCXJldCA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQlpZiAocmV0IHx8ICFnZXRzdGF0dXMpIHsKIAkJCWluZm8oIiVzOiBhbHJlYWR5IGRpc2FibGVkIHNsb3QoJXgpXG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+bnVtYmVyKTsKLQkJCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CisJCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiAxOwogCQl9CiAJfQogCi0JdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAogCXJldCA9IHJlbW92ZV9ib2FyZChwX3Nsb3QpOwogCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKaW5kZXggNzdlNTMwMy4uNmMxNGQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTM4LDcgKzM4LDEwIEBACiAKICNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICJwY2llaHAuaCIKLQorI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgogI2lmZGVmIERFQlVHCiAjZGVmaW5lIERCR19LX1RSQUNFX0VOVFJZICAgICAgKCh1bnNpZ25lZCBpbnQpMHgwMDAwMDAwMSkJLyogT24gZnVuY3Rpb24gZW50cnkgKi8KICNkZWZpbmUgREJHX0tfVFJBQ0VfRVhJVCAgICAgICAoKHVuc2lnbmVkIGludCkweDAwMDAwMDAyKQkvKiBPbiBmdW5jdGlvbiBleGl0ICovCkBAIC0xMjM2LDYgKzEyMzksNzYgQEAKIAkuY2hlY2tfbG5rX3N0YXR1cwkJPSBocGNfY2hlY2tfbG5rX3N0YXR1cywKIH07CiAKKyNpZmRlZiBDT05GSUdfQUNQSQoraW50IHBjaWVocF9hY3BpX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgY2hhbmRsZSwgaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYoZGV2LT5kZXYpKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldjsKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50OworCXN0cnVjdCBhY3BpX2J1ZmZlciBzdHJpbmcgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisKKwkvKgorCSAqIFBlciBQQ0kgZmlybXdhcmUgc3BlY2lmaWNhdGlvbiwgd2Ugc2hvdWxkIHJ1biB0aGUgQUNQSSBfT1NDCisJICogbWV0aG9kIHRvIGdldCBjb250cm9sIG9mIGhvdHBsdWcgaGFyZHdhcmUgYmVmb3JlIHVzaW5nIGl0LgorCSAqIElmIGFuIF9PU0MgaXMgbWlzc2luZywgd2UgbG9vayBmb3IgYW4gT1NIUCB0byBkbyB0aGUgc2FtZSB0aGluZy4KKwkgKiBUbyBoYW5kbGUgZGlmZmVyZW50IEJJT1MgYmVoYXZpb3IsIHdlIGxvb2sgZm9yIF9PU0MgYW5kIE9TSFAKKwkgKiB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBob3RwbHVnIGNvbnRyb2xsZXIgYW5kIGl0cyBwYXJlbnRzLCB1cHRvCisJICogdGhlIGhvc3QgYnJpZGdlIHVuZGVyIHdoaWNoIHRoaXMgY29udHJvbGxlciBleGlzdHMuCisJICovCisJd2hpbGUgKCFoYW5kbGUpIHsKKwkJLyoKKwkJICogVGhpcyBob3RwbHVnIGNvbnRyb2xsZXIgd2FzIG5vdCBsaXN0ZWQgaW4gdGhlIEFDUEkgbmFtZQorCQkgKiBzcGFjZSBhdCBhbGwuIFRyeSB0byBnZXQgYWNwaSBoYW5kbGUgb2YgcGFyZW50IHBjaSBidXMuCisJCSAqLworCQlpZiAoIXBkZXYgfHwgIXBkZXYtPmJ1cy0+cGFyZW50KQorCQkJYnJlYWs7CisJCXBhcmVudCA9IHBkZXYtPmJ1cy0+cGFyZW50OworCQlkYmcoIkNvdWxkIG5vdCBmaW5kICVzIGluIGFjcGkgbmFtZXNwYWNlLCB0cnlpbmcgcGFyZW50XG4iLAorCQkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKCFwYXJlbnQtPnNlbGYpCisJCQkvKiBQYXJlbnQgbXVzdCBiZSBhIGhvc3QgYnJpZGdlICovCisJCQloYW5kbGUgPSBhY3BpX2dldF9wY2lfcm9vdGJyaWRnZV9oYW5kbGUoCisJCQkJCXBjaV9kb21haW5fbnIocGFyZW50KSwKKwkJCQkJcGFyZW50LT5udW1iZXIpOworCQllbHNlCisJCQloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoCisJCQkJCSYocGFyZW50LT5zZWxmLT5kZXYpKTsKKwkJcGRldiA9IHBhcmVudC0+c2VsZjsKKwl9CisKKwl3aGlsZSAoaGFuZGxlKSB7CisJCWFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZzdHJpbmcpOworCQlkYmcoIlRyeWluZyB0byBnZXQgaG90cGx1ZyBjb250cm9sIGZvciAlcyBcbiIsCisJCQkoY2hhciAqKXN0cmluZy5wb2ludGVyKTsKKwkJc3RhdHVzID0gcGNpX29zY19jb250cm9sX3NldChoYW5kbGUsCisJCQkJT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MKTsKKwkJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpCisJCQlzdGF0dXMgPSBhY3BpX3J1bl9vc2hwKGhhbmRsZSk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJZGJnKCJHYWluZWQgY29udHJvbCBmb3IgaG90cGx1ZyBIVyBmb3IgcGNpICVzICglcylcbiIsCisJCQkJcGNpX25hbWUoZGV2KSwgKGNoYXIgKilzdHJpbmcucG9pbnRlcik7CisJCQlhY3BpX29zX2ZyZWUoc3RyaW5nLnBvaW50ZXIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGFjcGlfcm9vdF9icmlkZ2UoaGFuZGxlKSkKKwkJCWJyZWFrOworCQljaGFuZGxlID0gaGFuZGxlOworCQlzdGF0dXMgPSBhY3BpX2dldF9wYXJlbnQoY2hhbmRsZSwgJmhhbmRsZSk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJCWJyZWFrOworCX0KKworCWVycigiQ2Fubm90IGdldCBjb250cm9sIG9mIGhvdHBsdWcgaGFyZHdhcmUgZm9yIHBjaSAlc1xuIiwKKwkJCXBjaV9uYW1lKGRldikpOworCisJYWNwaV9vc19mcmVlKHN0cmluZy5wb2ludGVyKTsKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKworCisKIGludCBwY2llX2luaXQoc3RydWN0IGNvbnRyb2xsZXIgKiBjdHJsLCBzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcGhwX2N0bHIsICpwOwpAQCAtMTMzNCw3ICsxNDA3LDcgQEAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCQotCWluaXRfTVVURVgoJmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfaW5pdCgmY3RybC0+Y3JpdF9zZWN0KTsKIAkvKiBzZXR1cCB3YWl0IHF1ZXVlICovCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3RybC0+cXVldWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fYWNwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmRiMzBmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fYWNwaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLS8qCi0gKiBQQ0lFSFBSTSBBQ1BJOiBQSFAgUmVzb3VyY2UgTWFuYWdlciBmb3IgQUNQSSBwbGF0Zm9ybQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgotI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KLSNpbmNsdWRlIDxhY3BpL2FjdHlwZXMuaD4KLSNpbmNsdWRlICJwY2llaHAuaCIKLQotI2RlZmluZQlNRVRIT0RfTkFNRV9fU1VOCSJfU1VOIgotI2RlZmluZQlNRVRIT0RfTkFNRV9fSFBQCSJfSFBQIgotI2RlZmluZQlNRVRIT0RfTkFNRV9PU0hQCSJPU0hQIgotCi1zdGF0aWMgdTggKiBhY3BpX3BhdGhfbmFtZSggYWNwaV9oYW5kbGUJaGFuZGxlKQotewotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RhdGljIHU4CQlwYXRoX25hbWVbQUNQSV9QQVRITkFNRV9NQVhdOwotCXN0cnVjdCBhY3BpX2J1ZmZlcglyZXRfYnVmID0geyBBQ1BJX1BBVEhOQU1FX01BWCwgcGF0aF9uYW1lIH07Ci0KLQltZW1zZXQocGF0aF9uYW1lLCAwLCBzaXplb2YgKHBhdGhfbmFtZSkpOwotCXN0YXR1cyA9IGFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZyZXRfYnVmKTsKLQotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuIE5VTEw7Ci0JZWxzZQotCQlyZXR1cm4gcGF0aF9uYW1lOwkKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3J1bl9ocHAoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCkKLXsKLQlhY3BpX3N0YXR1cwkJc3RhdHVzOwotCXU4CQkJbnVpWzRdOwotCXN0cnVjdCBhY3BpX2J1ZmZlcglyZXRfYnVmID0geyAwLCBOVUxMfTsKLQl1bmlvbiBhY3BpX29iamVjdAkqZXh0X29iaiwgKnBhY2thZ2U7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKLQlpbnQJCQlpLCBsZW4gPSAwOwotCi0JLyogZ2V0IF9ocHAgKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgQUVfQlVGRkVSX09WRVJGTE9XOgotCQlyZXRfYnVmLnBvaW50ZXIgPSBrbWFsbG9jIChyZXRfYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcmV0X2J1Zi5wb2ludGVyKSB7Ci0JCQllcnIgKCIlczolcyBhbGxvYyBmb3IgX0hQUCBmYWlsXG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJCXBhdGhfbmFtZSk7Ci0JCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwotCQl9Ci0JCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfX0hQUCwKLQkJCQlOVUxMLCAmcmV0X2J1Zik7Ci0JCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKLQkJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZGJnKCIlczolcyBfSFBQIGZhaWw9MHgleFxuIiwgX19GVU5DVElPTl9fLAotCQkJCQlwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JfQotCi0JZXh0X29iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSByZXRfYnVmLnBvaW50ZXI7Ci0JaWYgKGV4dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQkJZXJyICgiJXM6JXMgX0hQUCBvYmogbm90IGEgcGFja2FnZVxuIiwgX19GVU5DVElPTl9fLAotCQkJCXBhdGhfbmFtZSk7Ci0JCXN0YXR1cyA9IEFFX0VSUk9SOwotCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKLQl9Ci0KLQlsZW4gPSBleHRfb2JqLT5wYWNrYWdlLmNvdW50OwotCXBhY2thZ2UgPSAodW5pb24gYWNwaV9vYmplY3QgKikgcmV0X2J1Zi5wb2ludGVyOwotCWZvciAoIGkgPSAwOyAoaSA8IGxlbikgfHwgKGkgPCA0KTsgaSsrKSB7Ci0JCWV4dF9vYmogPSAodW5pb24gYWNwaV9vYmplY3QgKikgJnBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHNbaV07Ci0JCXN3aXRjaCAoZXh0X29iai0+dHlwZSkgewotCQljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgotCQkJbnVpW2ldID0gKHU4KWV4dF9vYmotPmludGVnZXIudmFsdWU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVyciAoIiVzOiVzIF9IUFAgb2JqIHR5cGUgaW5jb3JyZWN0XG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJCXBhdGhfbmFtZSk7Ci0JCQlzdGF0dXMgPSBBRV9FUlJPUjsKLQkJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwotCQl9Ci0JfQotCi0JaHBwLT5jYWNoZV9saW5lX3NpemUgPSBudWlbMF07Ci0JaHBwLT5sYXRlbmN5X3RpbWVyID0gbnVpWzFdOwotCWhwcC0+ZW5hYmxlX3NlcnIgPSBudWlbMl07Ci0JaHBwLT5lbmFibGVfcGVyciA9IG51aVszXTsKLQotCWRiZygiICBfSFBQOiBjYWNoZV9saW5lX3NpemU9MHgleFxuIiwgaHBwLT5jYWNoZV9saW5lX3NpemUpOwotCWRiZygiICBfSFBQOiBsYXRlbmN5IHRpbWVyICA9MHgleFxuIiwgaHBwLT5sYXRlbmN5X3RpbWVyKTsKLQlkYmcoIiAgX0hQUDogZW5hYmxlIFNFUlIgICAgPTB4JXhcbiIsIGhwcC0+ZW5hYmxlX3NlcnIpOwotCWRiZygiICBfSFBQOiBlbmFibGUgUEVSUiAgICA9MHgleFxuIiwgaHBwLT5lbmFibGVfcGVycik7Ci0KLWZyZWVfYW5kX3JldHVybjoKLQlrZnJlZShyZXRfYnVmLnBvaW50ZXIpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3J1bl9vc2hwKGFjcGlfaGFuZGxlIGhhbmRsZSkKLXsKLQlhY3BpX3N0YXR1cwkJc3RhdHVzOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7Ci0KLQkvKiBydW4gT1NIUCAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfT1NIUCwgTlVMTCwgTlVMTCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWRiZygiJXM6JXMgT1NIUCBmYWlscz0weCV4XG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfbmFtZSwKLQkJCQlzdGF0dXMpOwotCX0gZWxzZSB7Ci0JCWRiZygiJXM6JXMgT1NIUCBwYXNzZXNcbiIsIF9fRlVOQ1RJT05fXywgcGF0aF9uYW1lKTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCBpc19yb290X2JyaWRnZShhY3BpX2hhbmRsZSBoYW5kbGUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwotCWludCBpOwotCi0Jc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmYnVmZmVyKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJaW5mbyA9IGJ1ZmZlci5wb2ludGVyOwotCQlpZiAoKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpICYmCi0JCQkhc3RyY21wKFBDSV9ST09UX0hJRF9TVFJJTkcsCi0JCQkJCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlKSkgewotCQkJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQ0lEKSB7Ci0JCQlmb3IgKGk9MDsgaSA8IGluZm8tPmNvbXBhdGliaWxpdHlfaWQuY291bnQ7IGkrKykgewotCQkJCWlmICghc3RyY21wKFBDSV9ST09UX0hJRF9TVFJJTkcsCi0JCQkJCWluZm8tPmNvbXBhdGliaWxpdHlfaWQuaWRbaV0udmFsdWUpKSB7Ci0JCQkJCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7Ci0JCQkJCXJldHVybiAxOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBjaWVocF9nZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfaGFuZGxlIGNoYW5kbGUsIGhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmKGRldi0+ZGV2KSk7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXY7Ci0Jc3RydWN0IHBjaV9idXMgKnBhcmVudDsKLQl1OCAqcGF0aF9uYW1lOwotCi0JLyoKLQkgKiBQZXIgUENJIGZpcm13YXJlIHNwZWNpZmljYXRpb24sIHdlIHNob3VsZCBydW4gdGhlIEFDUEkgX09TQwotCSAqIG1ldGhvZCB0byBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGJlZm9yZSB1c2luZyBpdC4KLQkgKiBJZiBhbiBfT1NDIGlzIG1pc3NpbmcsIHdlIGxvb2sgZm9yIGFuIE9TSFAgdG8gZG8gdGhlIHNhbWUgdGhpbmcuCi0JICogVG8gaGFuZGxlIGRpZmZlcmVudCBCSU9TIGJlaGF2aW9yLCB3ZSBsb29rIGZvciBfT1NDIGFuZCBPU0hQCi0JICogd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgaG90cGx1ZyBjb250cm9sbGVyIGFuZCBpdHMgcGFyZW50cywgdXB0bwotCSAqIHRoZSBob3N0IGJyaWRnZSB1bmRlciB3aGljaCB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzLgotCSAqLwotCXdoaWxlICghaGFuZGxlKSB7Ci0JCS8qCi0JCSAqIFRoaXMgaG90cGx1ZyBjb250cm9sbGVyIHdhcyBub3QgbGlzdGVkIGluIHRoZSBBQ1BJIG5hbWUKLQkJICogc3BhY2UgYXQgYWxsLiBUcnkgdG8gZ2V0IGFjcGkgaGFuZGxlIG9mIHBhcmVudCBwY2kgYnVzLgotCQkgKi8KLQkJaWYgKCFwZGV2IHx8ICFwZGV2LT5idXMtPnBhcmVudCkKLQkJCWJyZWFrOwotCQlwYXJlbnQgPSBwZGV2LT5idXMtPnBhcmVudDsKLQkJZGJnKCJDb3VsZCBub3QgZmluZCAlcyBpbiBhY3BpIG5hbWVzcGFjZSwgdHJ5aW5nIHBhcmVudFxuIiwKLQkJCQlwY2lfbmFtZShwZGV2KSk7Ci0JCWlmICghcGFyZW50LT5zZWxmKQotCQkJLyogUGFyZW50IG11c3QgYmUgYSBob3N0IGJyaWRnZSAqLwotCQkJaGFuZGxlID0gYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKAotCQkJCQlwY2lfZG9tYWluX25yKHBhcmVudCksCi0JCQkJCXBhcmVudC0+bnVtYmVyKTsKLQkJZWxzZQotCQkJaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKAotCQkJCQkmKHBhcmVudC0+c2VsZi0+ZGV2KSk7Ci0JCXBkZXYgPSBwYXJlbnQtPnNlbGY7Ci0JfQotCi0Jd2hpbGUgKGhhbmRsZSkgewotCQlwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCQlkYmcoIlRyeWluZyB0byBnZXQgaG90cGx1ZyBjb250cm9sIGZvciAlcyBcbiIsIHBhdGhfbmFtZSk7Ci0JCXN0YXR1cyA9IHBjaV9vc2NfY29udHJvbF9zZXQoaGFuZGxlLAotCQkJCU9TQ19QQ0lfRVhQUkVTU19OQVRJVkVfSFBfQ09OVFJPTCk7Ci0JCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKQotCQkJc3RhdHVzID0gYWNwaV9ydW5fb3NocChoYW5kbGUpOwotCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCWRiZygiR2FpbmVkIGNvbnRyb2wgZm9yIGhvdHBsdWcgSFcgZm9yIHBjaSAlcyAoJXMpXG4iLAotCQkJCXBjaV9uYW1lKGRldiksIHBhdGhfbmFtZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZiAoaXNfcm9vdF9icmlkZ2UoaGFuZGxlKSkKLQkJCWJyZWFrOwotCQljaGFuZGxlID0gaGFuZGxlOwotCQlzdGF0dXMgPSBhY3BpX2dldF9wYXJlbnQoY2hhbmRsZSwgJmhhbmRsZSk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWJyZWFrOwotCX0KLQotCWVycigiQ2Fubm90IGdldCBjb250cm9sIG9mIGhvdHBsdWcgaGFyZHdhcmUgZm9yIHBjaSAlc1xuIiwKLQkJCXBjaV9uYW1lKGRldikpOwotCXJldHVybiAtMTsKLX0KLQotdm9pZCBwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQotewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9GT1VORDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldjsKLQotCS8qCi0JICogX0hQUCBzZXR0aW5ncyBhcHBseSB0byBhbGwgY2hpbGQgYnVzZXMsIHVudGlsIGFub3RoZXIgX0hQUCBpcwotCSAqIGVuY291bnRlcmVkLiBJZiB3ZSBkb24ndCBmaW5kIGFuIF9IUFAgZm9yIHRoZSBpbnB1dCBwY2kgZGV2LAotCSAqIGxvb2sgZm9yIGl0IGluIHRoZSBwYXJlbnQgZGV2aWNlIHNjb3BlIHNpbmNlIHRoYXQgd291bGQgYXBwbHkgdG8KLQkgKiB0aGlzIHBjaSBkZXYuIElmIHdlIGRvbid0IGZpbmQgYW55IF9IUFAsIHVzZSBoYXJkY29kZWQgZGVmYXVsdHMKLQkgKi8KLQl3aGlsZSAocGRldiAmJiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpKSB7Ci0JCWFjcGlfaGFuZGxlIGhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmKHBkZXYtPmRldikpOwotCQlpZiAoIWhhbmRsZSkKLQkJCWJyZWFrOwotCQlzdGF0dXMgPSBhY3BpX3J1bl9ocHAoaGFuZGxlLCBocHApOwotCQlpZiAoIShwZGV2LT5idXMtPnBhcmVudCkpCi0JCQlicmVhazsKLQkJLyogQ2hlY2sgaWYgYSBwYXJlbnQgb2JqZWN0IHN1cHBvcnRzIF9IUFAgKi8KLQkJcGRldiA9IHBkZXYtPmJ1cy0+cGFyZW50LT5zZWxmOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxODBkZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBQQ0lFSFBSTSBOT05BQ1BJOiBQSFAgUmVzb3VyY2UgTWFuYWdlciBmb3IgTm9uLUFDUEkvTGVnYWN5IHBsYXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LDIwMDEgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMSBJQk0gQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxncmVnQGtyb2FoLmNvbT4sIDxrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20+Ci0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgInBjaWVocC5oIgotCi12b2lkIHBjaWVocF9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJc3RydWN0IGhvdHBsdWdfcGFyYW1zICpocHApCi17Ci0JcmV0dXJuOwotfQotCi1pbnQgcGNpZWhwX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2tlbGV0b24uYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2tlbGV0b24uYwppbmRleCAzMTk0ZDUxYy4uMGE0NmY1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2tlbGV0b24uYwpAQCAtMzcsMTAgKzM3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgInBjaV9ob3RwbHVnLmgiCiAKKyNkZWZpbmUgU0xPVF9OQU1FX1NJWkUJMTAKIHN0cnVjdCBzbG90IHsKIAl1OCBudW1iZXI7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwogCXN0cnVjdCBsaXN0X2hlYWQgc2xvdF9saXN0OworCWNoYXIgbmFtZVtTTE9UX05BTUVfU0laRV07CiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKHNsb3RfbGlzdCk7CkBAIC0yMzMsMTIgKzIzNSwxMCBAQAogCiAJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mbyk7Ci0Ja2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QpOwogCWtmcmVlKHNsb3QpOwogfQogCi0jZGVmaW5lIFNMT1RfTkFNRV9TSVpFCTEwCiBzdGF0aWMgdm9pZCBtYWtlX3Nsb3RfbmFtZShzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKIAkvKgpAQCAtMjU3LDcgKzI1Nyw2IEBACiAJc3RydWN0IHNsb3QgKnNsb3Q7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwogCXN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaW5mbzsKLQljaGFyICpuYW1lOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCWludCBpOwogCkBAIC0yNjYsMzEgKzI2NSwyMyBAQAogCSAqIHdpdGggdGhlIHBjaV9ob3RwbHVnIHN1YnN5c3RlbS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Nsb3RzOyArK2kpIHsKLQkJc2xvdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbG90KSwgR0ZQX0tFUk5FTCk7CisJCXNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOwogCQlpZiAoIXNsb3QpCiAJCQlnb3RvIGVycm9yOwotCQltZW1zZXQoc2xvdCwgMCwgc2l6ZW9mKHN0cnVjdCBzbG90KSk7CiAKLQkJaG90cGx1Z19zbG90ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdCksCi0JCQkJCUdGUF9LRVJORUwpOworCQlob3RwbHVnX3Nsb3QgPSBremFsbG9jKHNpemVvZigqaG90cGx1Z19zbG90KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaG90cGx1Z19zbG90KQogCQkJZ290byBlcnJvcl9zbG90OwotCQltZW1zZXQoaG90cGx1Z19zbG90LCAwLCBzaXplb2YgKHN0cnVjdCBob3RwbHVnX3Nsb3QpKTsKIAkJc2xvdC0+aG90cGx1Z19zbG90ID0gaG90cGx1Z19zbG90OwogCi0JCWluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8pLCBHRlBfS0VSTkVMKTsKKwkJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaW5mbykKIAkJCWdvdG8gZXJyb3JfaHBzbG90OwotCQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mIChzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8pKTsKIAkJaG90cGx1Z19zbG90LT5pbmZvID0gaW5mbzsKIAotCQluYW1lID0ga21hbGxvYyhTTE9UX05BTUVfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmFtZSkKLQkJCWdvdG8gZXJyb3JfaW5mbzsKLQkJaG90cGx1Z19zbG90LT5uYW1lID0gbmFtZTsKLQogCQlzbG90LT5udW1iZXIgPSBpOwogCisJCWhvdHBsdWdfc2xvdC0+bmFtZSA9IHNsb3QtPm5hbWU7CiAJCWhvdHBsdWdfc2xvdC0+cHJpdmF0ZSA9IHNsb3Q7CiAJCWhvdHBsdWdfc2xvdC0+cmVsZWFzZSA9ICZyZWxlYXNlX3Nsb3Q7CiAJCW1ha2Vfc2xvdF9uYW1lKHNsb3QpOwpAQCAtMzAwLDE2ICsyOTEsMTYgQEAKIAkJICogSW5pdGlhbGl6ZSB0aGUgc2xvdCBpbmZvIHN0cnVjdHVyZSB3aXRoIHNvbWUga25vd24KIAkJICogZ29vZCB2YWx1ZXMuCiAJCSAqLwotCQlpbmZvLT5wb3dlcl9zdGF0dXMgPSBnZXRfcG93ZXJfc3RhdHVzKHNsb3QpOwotCQlpbmZvLT5hdHRlbnRpb25fc3RhdHVzID0gZ2V0X2F0dGVudGlvbl9zdGF0dXMoc2xvdCk7Ci0JCWluZm8tPmxhdGNoX3N0YXR1cyA9IGdldF9sYXRjaF9zdGF0dXMoc2xvdCk7Ci0JCWluZm8tPmFkYXB0ZXJfc3RhdHVzID0gZ2V0X2FkYXB0ZXJfc3RhdHVzKHNsb3QpOworCQlnZXRfcG93ZXJfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPnBvd2VyX3N0YXR1cyk7CisJCWdldF9hdHRlbnRpb25fc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmF0dGVudGlvbl9zdGF0dXMpOworCQlnZXRfbGF0Y2hfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmxhdGNoX3N0YXR1cyk7CisJCWdldF9hZGFwdGVyX3N0YXR1cyhob3RwbHVnX3Nsb3QsICZpbmZvLT5hZGFwdGVyX3N0YXR1cyk7CiAJCQogCQlkYmcoInJlZ2lzdGVyaW5nIHNsb3QgJWRcbiIsIGkpOwogCQlyZXR2YWwgPSBwY2lfaHBfcmVnaXN0ZXIoc2xvdC0+aG90cGx1Z19zbG90KTsKIAkJaWYgKHJldHZhbCkgewogCQkJZXJyKCJwY2lfaHBfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldHZhbCk7Ci0JCQlnb3RvIGVycm9yX25hbWU7CisJCQlnb3RvIGVycm9yX2luZm87CiAJCX0KIAogCQkvKiBhZGQgc2xvdCB0byBvdXIgaW50ZXJuYWwgbGlzdCAqLwpAQCAtMzE3LDggKzMwOCw2IEBACiAJfQogCiAJcmV0dXJuIDA7Ci1lcnJvcl9uYW1lOgotCWtmcmVlKG5hbWUpOwogZXJyb3JfaW5mbzoKIAlrZnJlZShpbmZvKTsKIGVycm9yX2hwc2xvdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3Nsb3QuYwppbmRleCA3ODk0M2UwLi5iNzcxMTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9zbG90LmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfc2xvdC5jCkBAIC04NCwxOSArODQsMTYgQEAKIHsKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKIAkKLQlzbG90ID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBzbG90KSwgR0ZQX0tFUk5FTCk7CisJc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbG90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzbG90KQogCQlnb3RvIGVycm9yX25vbWVtOwotCW1lbXNldChzbG90LCAwLCBzaXplb2YgKHN0cnVjdCBzbG90KSk7Ci0Jc2xvdC0+aG90cGx1Z19zbG90ID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBob3RwbHVnX3Nsb3QpLCBHRlBfS0VSTkVMKTsKKwlzbG90LT5ob3RwbHVnX3Nsb3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaG90cGx1Z19zbG90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzbG90LT5ob3RwbHVnX3Nsb3QpCiAJCWdvdG8gZXJyb3Jfc2xvdDsJCi0JbWVtc2V0KHNsb3QtPmhvdHBsdWdfc2xvdCwgMCwgc2l6ZW9mIChzdHJ1Y3QgaG90cGx1Z19zbG90KSk7Ci0Jc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyksCisJc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSwKIAkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8pCiAJCWdvdG8gZXJyb3JfaHBzbG90OwotCW1lbXNldChzbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8sIDAsIHNpemVvZiAoc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvKSk7CiAJc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lID0ga21hbGxvYyhCVVNfSURfU0laRSArIDEsIEdGUF9LRVJORUwpOwogCWlmICghc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKQogCQlnb3RvIGVycm9yX2luZm87CQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zZ2lfaG90cGx1Zy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zZ2lfaG90cGx1Zy5jCmluZGV4IGEzMmFlODIuLmM0MDJkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyB3b3JrIHdhcyBiYXNlZCBvbiB0aGUgMi40LzIuNiBrZXJuZWwgZGV2ZWxvcG1lbnQgYnkgRGljayBSZWlnbmVyLgogICogV29yayB0byBhZGQgQklPUyBQUk9NIHN1cHBvcnQgd2FzIGNvbXBsZXRlZCBieSBNaWtlIEhhYmVjay4KQEAgLTIzMCw2ICsyMzAsMTMgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnN1Ym9yZGluYXRlX2J1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCiAJCQlzbl9idXNfZnJlZV9kYXRhKGNoaWxkKTsKIAl9CisJLyoKKwkgKiBTb21lIGRyaXZlcnMgbWF5IHVzZSBkbWEgYWNjZXNzZXMgZHVyaW5nIHRoZQorCSAqIGRyaXZlciByZW1vdmUgZnVuY3Rpb24uIFdlIHJlbGVhc2UgdGhlIHN5c2RhdGEKKwkgKiBhcmVhcyBhZnRlciB0aGUgZHJpdmVyIHJlbW92ZSBmdW5jdGlvbnMgaGF2ZQorCSAqIGJlZW4gY2FsbGVkLgorCSAqLworCXNuX2J1c19zdG9yZV9zeXNkYXRhKGRldik7CiAJc25fcGNpX3VuZml4dXBfc2xvdChkZXYpOwogfQogCkBAIC00MjksMTMgKzQzNiw2IEBACiAJCQkJICAgUENJX0RFVkZOKHNsb3QtPmRldmljZV9udW0gKyAxLAogCQkJCSAgIAkgICAgIFBDSV9GVU5DKGZ1bmMpKSk7CiAJCWlmIChkZXYpIHsKLQkJCS8qCi0JCQkgKiBTb21lIGRyaXZlcnMgbWF5IHVzZSBkbWEgYWNjZXNzZXMgZHVyaW5nIHRoZQotCQkJICogZHJpdmVyIHJlbW92ZSBmdW5jdGlvbi4gV2UgcmVsZWFzZSB0aGUgc3lzZGF0YQotCQkJICogYXJlYXMgYWZ0ZXIgdGhlIGRyaXZlciByZW1vdmUgZnVuY3Rpb25zIGhhdmUKLQkJCSAqIGJlZW4gY2FsbGVkLgotCQkJICovCi0JCQlzbl9idXNfc3RvcmVfc3lzZGF0YShkZXYpOwogCQkJc25fYnVzX2ZyZWVfZGF0YShkZXYpOwogCQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7CiAJCQlwY2lfZGV2X3B1dChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKaW5kZXggN2Q2ZjUyMS4uNWM3MGY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBzaWduYWxfcGVuZGluZygpLCBzdHJ1Y3QgdGltZXJfbGlzdCAqLworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJwY2lfaG90cGx1Zy5oIgogCkBAIC00NSw2ICs0Niw3IEBACiBleHRlcm4gaW50IHNocGNocF9wb2xsX21vZGU7CiBleHRlcm4gaW50IHNocGNocF9wb2xsX3RpbWU7CiBleHRlcm4gaW50IHNocGNocF9kZWJ1ZzsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2hwY2hwX3dxOwogCiAvKiNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChzaHBjaHBfZGVidWcpIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOyB9IHdoaWxlICgwKSovCiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoc2hwY2hwX2RlYnVnKSBwcmludGsoIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZyk7IH0gd2hpbGUgKDApCkBAIC01MiwxMCArNTQsOCBAQAogI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCiAjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKIAotI2RlZmluZSBTTE9UX01BR0lDCTB4NjcyNjczMjEKKyNkZWZpbmUgU0xPVF9OQU1FX1NJWkUgMTAKIHN0cnVjdCBzbG90IHsKLQl1MzIgbWFnaWM7Ci0Jc3RydWN0IHNsb3QgKm5leHQ7CiAJdTggYnVzOwogCXU4IGRldmljZTsKIAl1MTYgc3RhdHVzOwpAQCAtNzAsMjYgKzcwLDI3IEBACiAJc3RydWN0IGhwY19vcHMgKmhwY19vcHM7CiAJc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90OwogCXN0cnVjdCBsaXN0X2hlYWQJc2xvdF9saXN0OworCWNoYXIgbmFtZVtTTE9UX05BTUVfU0laRV07CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CS8qIHdvcmsgZm9yIGJ1dHRvbiBldmVudCAqLworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogc3RydWN0IGV2ZW50X2luZm8gewogCXUzMiBldmVudF90eXBlOwotCXU4IGhwX3Nsb3Q7CisJc3RydWN0IHNsb3QgKnBfc2xvdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIH07CiAKIHN0cnVjdCBjb250cm9sbGVyIHsKLQlzdHJ1Y3QgY29udHJvbGxlciAqbmV4dDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGNyaXRfc2VjdDsJLyogY3JpdGljYWwgc2VjdGlvbiBzZW1hcGhvcmUgKi8KKwlzdHJ1Y3QgbXV0ZXggY3JpdF9zZWN0OwkJLyogY3JpdGljYWwgc2VjdGlvbiBtdXRleCAqLworCXN0cnVjdCBtdXRleCBjbWRfbG9jazsJCS8qIGNvbW1hbmQgbG9jayAqLwogCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpocGNfY3Rscl9oYW5kbGU7IC8qIEhQQyBjb250cm9sbGVyIGhhbmRsZSAqLwogCWludCBudW1fc2xvdHM7CQkJLyogTnVtYmVyIG9mIHNsb3RzIG9uIGN0bHIgKi8KIAlpbnQgc2xvdF9udW1faW5jOwkJLyogMSBvciAtMSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCXN0cnVjdCBwY2lfYnVzICpwY2lfYnVzOwotCXN0cnVjdCBldmVudF9pbmZvIGV2ZW50X3F1ZXVlWzEwXTsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNsb3RfbGlzdDsKIAlzdHJ1Y3QgaHBjX29wcyAqaHBjX29wczsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsJLyogc2xlZXAgJiB3YWtlIHByb2Nlc3MgKi8KLQl1OCBuZXh0X2V2ZW50OwogCXU4IGJ1czsKIAl1OCBkZXZpY2U7CiAJdTggZnVuY3Rpb247CkBAIC0xMDUsMTIgKzEwNiw2IEBACiAJdm9sYXRpbGUgaW50IGNtZF9idXN5OwogfTsKIAotc3RydWN0IGhvdHBsdWdfcGFyYW1zIHsKLQl1OAljYWNoZV9saW5lX3NpemU7Ci0JdTgJbGF0ZW5jeV90aW1lcjsKLQl1OAllbmFibGVfc2VycjsKLQl1OAllbmFibGVfcGVycjsKLX07CiAKIC8qIERlZmluZSBBTUQgU0hQQyBJRCAgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfR09MQU1fNzQ1MAkweDc0NTAgCkBAIC0xODAsMTEgKzE3NSw4IEBACiAvKiBzeXNmcyBmdW5jdGlvbnMgZm9yIHRoZSBob3RwbHVnIGNvbnRyb2xsZXIgaW5mbyAqLwogZXh0ZXJuIHZvaWQgc2hwY2hwX2NyZWF0ZV9jdHJsX2ZpbGVzCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CiAKLS8qIGNvbnRyb2xsZXIgZnVuY3Rpb25zICovCi1leHRlcm4gaW50CXNocGNocF9ldmVudF9zdGFydF90aHJlYWQodm9pZCk7Ci1leHRlcm4gdm9pZAlzaHBjaHBfZXZlbnRfc3RvcF90aHJlYWQodm9pZCk7Ci1leHRlcm4gaW50CXNocGNocF9lbmFibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7Ci1leHRlcm4gaW50CXNocGNocF9kaXNhYmxlX3Nsb3Qoc3RydWN0IHNsb3QgKnNsb3QpOworZXh0ZXJuIGludAlzaHBjaHBfc3lzZnNfZW5hYmxlX3Nsb3Qoc3RydWN0IHNsb3QgKnNsb3QpOworZXh0ZXJuIGludAlzaHBjaHBfc3lzZnNfZGlzYWJsZV9zbG90KHN0cnVjdCBzbG90ICpzbG90KTsKIAogZXh0ZXJuIHU4CXNocGNocF9oYW5kbGVfYXR0ZW50aW9uX2J1dHRvbih1OCBocF9zbG90LCB2b2lkICppbnN0X2lkKTsKIGV4dGVybiB1OAlzaHBjaHBfaGFuZGxlX3N3aXRjaF9jaGFuZ2UodTggaHBfc2xvdCwgdm9pZCAqaW5zdF9pZCk7CkBAIC0xOTUsMTYgKzE4NywyOCBAQAogZXh0ZXJuIGludAlzaHBjaHBfc2F2ZV9jb25maWcoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIGludCBidXNudW1iZXIsIGludCBudW1fY3Rscl9zbG90cywgaW50IGZpcnN0X2RldmljZV9udW0pOwogZXh0ZXJuIGludAlzaHBjaHBfY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKIGV4dGVybiBpbnQJc2hwY2hwX3VuY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKLWV4dGVybiB2b2lkCWdldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldik7Ci1leHRlcm4gdm9pZAlnZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJc3RydWN0IGhvdHBsdWdfcGFyYW1zICpocHApOwotZXh0ZXJuIGludAlzaHBjaHBybV9nZXRfcGh5c2ljYWxfc2xvdF9udW1iZXIoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0JCXUzMiAqc3VuLCB1OCBidXNudW0sIHU4IGRldm51bSk7CiBleHRlcm4gdm9pZAlzaHBjaHBfcmVtb3ZlX2N0cmxfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOworZXh0ZXJuIHZvaWQJY2xlYW51cF9zbG90cyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CitleHRlcm4gdm9pZAlxdWV1ZV9wdXNoYnV0dG9uX3dvcmsodm9pZCAqZGF0YSk7CiAKIAotLyogR2xvYmFsIHZhcmlhYmxlcyAqLwotZXh0ZXJuIHN0cnVjdCBjb250cm9sbGVyICpzaHBjaHBfY3RybF9saXN0OworI2lmZGVmIENPTkZJR19BQ1BJCitzdGF0aWMgaW5saW5lIGludCBnZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQoreworCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoZGV2LCBocHApKSkKKwkJCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOworfQorI2RlZmluZSBnZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHBkZXYpIFwKKwlkbyB7IFwKKwkJaWYgKERFVklDRV9BQ1BJX0hBTkRMRSgmKHBkZXYtPmRldikpKSBcCisJCQlhY3BpX3J1bl9vc2hwKERFVklDRV9BQ1BJX0hBTkRMRSgmKHBkZXYtPmRldikpKTsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBnZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoZGV2LCBocHApICgtRU5PREVWKQorI2RlZmluZSBnZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKGRldikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCiAKIHN0cnVjdCBjdHJsX3JlZyB7CiAJdm9sYXRpbGUgdTMyIGJhc2Vfb2Zmc2V0OwpAQCAtMjg2LDEwICsyOTAsNiBAQAogCQlkYmcoIiVzIC0gc2xvdCA9PSBOVUxMIiwgZnVuY3Rpb24pOwogCQlyZXR1cm4gLTE7CiAJfQotCWlmIChzbG90LT5tYWdpYyAhPSBTTE9UX01BR0lDKSB7Ci0JCWRiZygiJXMgLSBiYWQgbWFnaWMgbnVtYmVyIGZvciBzbG90IiwgZnVuY3Rpb24pOwotCQlyZXR1cm4gLTE7Ci0JfQogCWlmICghc2xvdC0+aG90cGx1Z19zbG90KSB7CiAJCWRiZygiJXMgLSBzbG90LT5ob3RwbHVnX3Nsb3QgPT0gTlVMTCEiLCBmdW5jdGlvbik7CiAJCXJldHVybiAtMTsKQEAgLTMxNCw0NCArMzE0LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsb3QgKnNocGNocF9maW5kX3Nsb3QgKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1OCBkZXZpY2UpCiB7Ci0Jc3RydWN0IHNsb3QgKnBfc2xvdCwgKnRtcF9zbG90ID0gTlVMTDsKKwlzdHJ1Y3Qgc2xvdCAqc2xvdDsKIAogCWlmICghY3RybCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlwX3Nsb3QgPSBjdHJsLT5zbG90OwotCi0Jd2hpbGUgKHBfc2xvdCAmJiAocF9zbG90LT5kZXZpY2UgIT0gZGV2aWNlKSkgewotCQl0bXBfc2xvdCA9IHBfc2xvdDsKLQkJcF9zbG90ID0gcF9zbG90LT5uZXh0OwotCX0KLQlpZiAocF9zbG90ID09IE5VTEwpIHsKLQkJZXJyKCJFUlJPUjogc2hwY2hwX2ZpbmRfc2xvdCBkZXZpY2U9MHgleFxuIiwgZGV2aWNlKTsKLQkJcF9zbG90ID0gdG1wX3Nsb3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmY3RybC0+c2xvdF9saXN0LCBzbG90X2xpc3QpIHsKKwkJaWYgKHNsb3QtPmRldmljZSA9PSBkZXZpY2UpCisJCQlyZXR1cm4gc2xvdDsKIAl9CiAKLQlyZXR1cm4gKHBfc2xvdCk7Ci19CisJZXJyKCIlczogc2xvdCAoZGV2aWNlPTB4JXgpIG5vdCBmb3VuZFxuIiwgX19GVU5DVElPTl9fLCBkZXZpY2UpOwogCi1zdGF0aWMgaW5saW5lIGludCB3YWl0X2Zvcl9jdHJsX2lycSAoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCi17Ci0gICAgREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlhZGRfd2FpdF9xdWV1ZSgmY3RybC0+cXVldWUsICZ3YWl0KTsKLQotCWlmICghc2hwY2hwX3BvbGxfbW9kZSkgewotCQkvKiBTbGVlcCBmb3IgdXAgdG8gMSBzZWNvbmQgKi8KLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwMCk7Ci0JfSBlbHNlIHsKLQkJLyogU2xlZXAgZm9yIHVwIHRvIDIgc2Vjb25kcyAqLwotCQltc2xlZXBfaW50ZXJydXB0aWJsZSgyMDAwKTsKLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmN0cmwtPnF1ZXVlLCAmd2FpdCk7Ci0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR2YWwgPSAgLUVJTlRSOwotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFtZF9wb2dvX2VycmF0YV9zYXZlX21pc2NfcmVnKHN0cnVjdCBzbG90ICpwX3Nsb3QpCkBAIC00MjcsMTMgKzQwMiw2IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwX3Nsb3QtPmN0cmwtPnBjaV9kZXYsIFBDSVhfTUlTQ0lJX09GRlNFVCwgcGNpeF9taXNjMl90ZW1wKTsKIH0KIAotI2RlZmluZSBTTE9UX05BTUVfU0laRSAxMAotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9zbG90X25hbWUoY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUsIHN0cnVjdCBzbG90ICpzbG90KQotewotCXNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyX3NpemUsICIlMDRkXyUwNGQiLCBzbG90LT5idXMsIHNsb3QtPm51bWJlcik7Ci19Ci0KIGVudW0gcGhwX2N0bHJfdHlwZSB7CiAJUENJLAogCUlTQSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYwppbmRleCBhMmIzZjAwLi4zYmU0ZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCkBAIC0zMiwxMyArMzIsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgInNocGNocC5oIgogCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCiBpbnQgc2hwY2hwX2RlYnVnOwogaW50IHNocGNocF9wb2xsX21vZGU7CiBpbnQgc2hwY2hwX3BvbGxfdGltZTsKLXN0cnVjdCBjb250cm9sbGVyICpzaHBjaHBfY3RybF9saXN0OwkvKiA9IE5VTEwgKi8KK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzaHBjaHBfd3E7CiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuNCIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUgkiRGFuIFppbmsgPGRhbi56aW5rQGNvbXBhcS5jb20+LCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiwgRGVseSBTeSA8ZGVseS5sLnN5QGludGVsLmNvbT4iCkBAIC01Nyw3ICs1OCw2IEBACiAKICNkZWZpbmUgU0hQQ19NT0RVTEVfTkFNRSAic2hwY2hwIgogCi1zdGF0aWMgaW50IHNocGNfc3RhcnRfdGhyZWFkICh2b2lkKTsKIHN0YXRpYyBpbnQgc2V0X2F0dGVudGlvbl9zdGF0dXMgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHU4IHZhbHVlKTsKIHN0YXRpYyBpbnQgZW5hYmxlX3Nsb3QJCShzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KTsKIHN0YXRpYyBpbnQgZGlzYWJsZV9zbG90CQkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCk7CkBAIC05NCwxMDcgKzk0LDEyMCBAQAogCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIAogCWtmcmVlKHNsb3QtPmhvdHBsdWdfc2xvdC0+aW5mbyk7Ci0Ja2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lKTsKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QpOwogCWtmcmVlKHNsb3QpOwogfQogCitzdGF0aWMgdm9pZCBtYWtlX3Nsb3RfbmFtZShzdHJ1Y3Qgc2xvdCAqc2xvdCkKK3sKKwlzbnByaW50ZihzbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUsIFNMT1RfTkFNRV9TSVpFLCAiJTA0ZF8lMDRkIiwKKwkJIHNsb3QtPmJ1cywgc2xvdC0+bnVtYmVyKTsKK30KKworCisKKworc3RhdGljIGludAorc2hwY2hwcm1fZ2V0X3BoeXNpY2FsX3Nsb3RfbnVtYmVyKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1MzIgKnN1biwKKwkJCQl1OCBidXNudW0sIHU4IGRldm51bSkKK3sKKwlpbnQgb2Zmc2V0ID0gZGV2bnVtIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OworCisJZGJnKCIlczogY3RybC0+c2xvdF9udW1faW5jICVkLCBvZmZzZXQgJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJCWN0cmwtPnNsb3RfbnVtX2luYywgb2Zmc2V0KTsKKwkqc3VuID0gKHU4KSAoY3RybC0+Zmlyc3Rfc2xvdCArIGN0cmwtPnNsb3RfbnVtX2luYyAqb2Zmc2V0KTsKKwlyZXR1cm4gMDsKK30KKworCisKIHN0YXRpYyBpbnQgaW5pdF9zbG90cyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKLQlzdHJ1Y3Qgc2xvdCAqbmV3X3Nsb3Q7Ci0JdTggbnVtYmVyX29mX3Nsb3RzOwotCXU4IHNsb3RfZGV2aWNlOwotCXUzMiBzbG90X251bWJlciwgc3VuOwotCWludCByZXN1bHQgPSAtRU5PTUVNOworCXN0cnVjdCBzbG90ICpzbG90OworCXN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdDsKKwlzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gKmluZm87CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJaW50IGk7CisJdTMyIHN1bjsKIAotCW51bWJlcl9vZl9zbG90cyA9IGN0cmwtPm51bV9zbG90czsKLQlzbG90X2RldmljZSA9IGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKLQlzbG90X251bWJlciA9IGN0cmwtPmZpcnN0X3Nsb3Q7Ci0KLQl3aGlsZSAobnVtYmVyX29mX3Nsb3RzKSB7Ci0JCW5ld19zbG90ID0gKHN0cnVjdCBzbG90ICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbG90KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmV3X3Nsb3QpCisJZm9yIChpID0gMDsgaSA8IGN0cmwtPm51bV9zbG90czsgaSsrKSB7CisJCXNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOworCQlpZiAoIXNsb3QpCiAJCQlnb3RvIGVycm9yOwogCi0JCW1lbXNldChuZXdfc2xvdCwgMCwgc2l6ZW9mKHN0cnVjdCBzbG90KSk7Ci0JCW5ld19zbG90LT5ob3RwbHVnX3Nsb3QgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBob3RwbHVnX3Nsb3QpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuZXdfc2xvdC0+aG90cGx1Z19zbG90KQorCQlob3RwbHVnX3Nsb3QgPSBremFsbG9jKHNpemVvZigqaG90cGx1Z19zbG90KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaG90cGx1Z19zbG90KQogCQkJZ290byBlcnJvcl9zbG90OwotCQltZW1zZXQobmV3X3Nsb3QtPmhvdHBsdWdfc2xvdCwgMCwgc2l6ZW9mIChzdHJ1Y3QgaG90cGx1Z19zbG90KSk7CisJCXNsb3QtPmhvdHBsdWdfc2xvdCA9IGhvdHBsdWdfc2xvdDsKIAotCQluZXdfc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8pLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFuZXdfc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKQorCQlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFpbmZvKQogCQkJZ290byBlcnJvcl9ocHNsb3Q7Ci0JCW1lbXNldChuZXdfc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLCAwLCBzaXplb2YgKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbykpOwotCQluZXdfc2xvdC0+aG90cGx1Z19zbG90LT5uYW1lID0ga21hbGxvYyAoU0xPVF9OQU1FX1NJWkUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW5ld19zbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpCi0JCQlnb3RvIGVycm9yX2luZm87CisJCWhvdHBsdWdfc2xvdC0+aW5mbyA9IGluZm87CiAKLQkJbmV3X3Nsb3QtPm1hZ2ljID0gU0xPVF9NQUdJQzsKLQkJbmV3X3Nsb3QtPmN0cmwgPSBjdHJsOwotCQluZXdfc2xvdC0+YnVzID0gY3RybC0+c2xvdF9idXM7Ci0JCW5ld19zbG90LT5kZXZpY2UgPSBzbG90X2RldmljZTsKLQkJbmV3X3Nsb3QtPmhwY19vcHMgPSBjdHJsLT5ocGNfb3BzOworCQlob3RwbHVnX3Nsb3QtPm5hbWUgPSBzbG90LT5uYW1lOworCisJCXNsb3QtPmhwX3Nsb3QgPSBpOworCQlzbG90LT5jdHJsID0gY3RybDsKKwkJc2xvdC0+YnVzID0gY3RybC0+c2xvdF9idXM7CisJCXNsb3QtPmRldmljZSA9IGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCArIGk7CisJCXNsb3QtPmhwY19vcHMgPSBjdHJsLT5ocGNfb3BzOworCQltdXRleF9pbml0KCZzbG90LT5sb2NrKTsKIAogCQlpZiAoc2hwY2hwcm1fZ2V0X3BoeXNpY2FsX3Nsb3RfbnVtYmVyKGN0cmwsICZzdW4sCi0JCQkJCW5ld19zbG90LT5idXMsIG5ld19zbG90LT5kZXZpY2UpKQotCQkJZ290byBlcnJvcl9uYW1lOworCQkJCQkJICAgICAgc2xvdC0+YnVzLCBzbG90LT5kZXZpY2UpKQorCQkJZ290byBlcnJvcl9pbmZvOwogCi0JCW5ld19zbG90LT5udW1iZXIgPSBzdW47Ci0JCW5ld19zbG90LT5ocF9zbG90ID0gc2xvdF9kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CisJCXNsb3QtPm51bWJlciA9IHN1bjsKKwkJSU5JVF9XT1JLKCZzbG90LT53b3JrLCBxdWV1ZV9wdXNoYnV0dG9uX3dvcmssIHNsb3QpOwogCiAJCS8qIHJlZ2lzdGVyIHRoaXMgc2xvdCB3aXRoIHRoZSBob3RwbHVnIHBjaSBjb3JlICovCi0JCW5ld19zbG90LT5ob3RwbHVnX3Nsb3QtPnByaXZhdGUgPSBuZXdfc2xvdDsKLQkJbmV3X3Nsb3QtPmhvdHBsdWdfc2xvdC0+cmVsZWFzZSA9ICZyZWxlYXNlX3Nsb3Q7Ci0JCW1ha2Vfc2xvdF9uYW1lKG5ld19zbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUsIFNMT1RfTkFNRV9TSVpFLCBuZXdfc2xvdCk7Ci0JCW5ld19zbG90LT5ob3RwbHVnX3Nsb3QtPm9wcyA9ICZzaHBjaHBfaG90cGx1Z19zbG90X29wczsKKwkJaG90cGx1Z19zbG90LT5wcml2YXRlID0gc2xvdDsKKwkJaG90cGx1Z19zbG90LT5yZWxlYXNlID0gJnJlbGVhc2Vfc2xvdDsKKwkJbWFrZV9zbG90X25hbWUoc2xvdCk7CisJCWhvdHBsdWdfc2xvdC0+b3BzID0gJnNocGNocF9ob3RwbHVnX3Nsb3Rfb3BzOwogCi0JCW5ld19zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKG5ld19zbG90LCAmKG5ld19zbG90LT5ob3RwbHVnX3Nsb3QtPmluZm8tPnBvd2VyX3N0YXR1cykpOwotCQluZXdfc2xvdC0+aHBjX29wcy0+Z2V0X2F0dGVudGlvbl9zdGF0dXMobmV3X3Nsb3QsICYobmV3X3Nsb3QtPmhvdHBsdWdfc2xvdC0+aW5mby0+YXR0ZW50aW9uX3N0YXR1cykpOwotCQluZXdfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhuZXdfc2xvdCwgJihuZXdfc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5sYXRjaF9zdGF0dXMpKTsKLQkJbmV3X3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhuZXdfc2xvdCwgJihuZXdfc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvLT5hZGFwdGVyX3N0YXR1cykpOworCQlnZXRfcG93ZXJfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPnBvd2VyX3N0YXR1cyk7CisJCWdldF9hdHRlbnRpb25fc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmF0dGVudGlvbl9zdGF0dXMpOworCQlnZXRfbGF0Y2hfc3RhdHVzKGhvdHBsdWdfc2xvdCwgJmluZm8tPmxhdGNoX3N0YXR1cyk7CisJCWdldF9hZGFwdGVyX3N0YXR1cyhob3RwbHVnX3Nsb3QsICZpbmZvLT5hZGFwdGVyX3N0YXR1cyk7CiAKLQkJZGJnKCJSZWdpc3RlcmluZyBidXM9JXggZGV2PSV4IGhwX3Nsb3Q9JXggc3VuPSV4IHNsb3RfZGV2aWNlX29mZnNldD0leFxuIiwgbmV3X3Nsb3QtPmJ1cywgCi0JCQluZXdfc2xvdC0+ZGV2aWNlLCBuZXdfc2xvdC0+aHBfc2xvdCwgbmV3X3Nsb3QtPm51bWJlciwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKLQkJcmVzdWx0ID0gcGNpX2hwX3JlZ2lzdGVyIChuZXdfc2xvdC0+aG90cGx1Z19zbG90KTsKLQkJaWYgKHJlc3VsdCkgewotCQkJZXJyICgicGNpX2hwX3JlZ2lzdGVyIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCByZXN1bHQpOwotCQkJZ290byBlcnJvcl9uYW1lOworCQlkYmcoIlJlZ2lzdGVyaW5nIGJ1cz0leCBkZXY9JXggaHBfc2xvdD0leCBzdW49JXggIgorCQkgICAgInNsb3RfZGV2aWNlX29mZnNldD0leFxuIiwgc2xvdC0+YnVzLCBzbG90LT5kZXZpY2UsCisJCSAgICBzbG90LT5ocF9zbG90LCBzbG90LT5udW1iZXIsIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CisJCXJldHZhbCA9IHBjaV9ocF9yZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QpOworCQlpZiAocmV0dmFsKSB7CisJCQllcnIoInBjaV9ocF9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgcmV0dmFsKTsKKwkJCWdvdG8gZXJyb3JfaW5mbzsKIAkJfQogCi0JCW5ld19zbG90LT5uZXh0ID0gY3RybC0+c2xvdDsKLQkJY3RybC0+c2xvdCA9IG5ld19zbG90OwotCi0JCW51bWJlcl9vZl9zbG90cy0tOwotCQlzbG90X2RldmljZSsrOwotCQlzbG90X251bWJlciArPSBjdHJsLT5zbG90X251bV9pbmM7CisJCWxpc3RfYWRkKCZzbG90LT5zbG90X2xpc3QsICZjdHJsLT5zbG90X2xpc3QpOwogCX0KIAogCXJldHVybiAwOwotCi1lcnJvcl9uYW1lOgotCWtmcmVlKG5ld19zbG90LT5ob3RwbHVnX3Nsb3QtPm5hbWUpOwogZXJyb3JfaW5mbzoKLQlrZnJlZShuZXdfc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKTsKKwlrZnJlZShpbmZvKTsKIGVycm9yX2hwc2xvdDoKLQlrZnJlZShuZXdfc2xvdC0+aG90cGx1Z19zbG90KTsKKwlrZnJlZShob3RwbHVnX3Nsb3QpOwogZXJyb3Jfc2xvdDoKLQlrZnJlZShuZXdfc2xvdCk7CisJa2ZyZWUoc2xvdCk7CiBlcnJvcjoKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBfc2xvdHMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCit2b2lkIGNsZWFudXBfc2xvdHMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7Ci0Jc3RydWN0IHNsb3QgKm9sZF9zbG90LCAqbmV4dF9zbG90OworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0OworCXN0cnVjdCBzbG90ICpzbG90OwogCi0Jb2xkX3Nsb3QgPSBjdHJsLT5zbG90OwotCWN0cmwtPnNsb3QgPSBOVUxMOwotCi0Jd2hpbGUgKG9sZF9zbG90KSB7Ci0JCW5leHRfc2xvdCA9IG9sZF9zbG90LT5uZXh0OwotCQlwY2lfaHBfZGVyZWdpc3RlcihvbGRfc2xvdC0+aG90cGx1Z19zbG90KTsKLQkJb2xkX3Nsb3QgPSBuZXh0X3Nsb3Q7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgbmV4dCwgJmN0cmwtPnNsb3RfbGlzdCkgeworCQlzbG90ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBzbG90LCBzbG90X2xpc3QpOworCQlsaXN0X2RlbCgmc2xvdC0+c2xvdF9saXN0KTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmc2xvdC0+d29yayk7CisJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJCWZsdXNoX3dvcmtxdWV1ZShzaHBjaHBfd3EpOworCQlwY2lfaHBfZGVyZWdpc3RlcihzbG90LT5ob3RwbHVnX3Nsb3QpOwogCX0KIH0KIApAQCAtMjA3LDkgKzIyMCwxMiBAQAogCWludCByYzsKIAlpbnQgZmxhZ3M7CiAKLQlyYyA9IHNocGNfZ2V0X2N0bHJfc2xvdF9jb25maWcoY3RybCwgJm51bV9jdGxyX3Nsb3RzLCAmZmlyc3RfZGV2aWNlX251bSwgJnBoeXNpY2FsX3Nsb3RfbnVtLCAmdXBkb3duLCAmZmxhZ3MpOworCXJjID0gc2hwY19nZXRfY3Rscl9zbG90X2NvbmZpZyhjdHJsLCAmbnVtX2N0bHJfc2xvdHMsCisJCQkJICAgICAgICZmaXJzdF9kZXZpY2VfbnVtLCAmcGh5c2ljYWxfc2xvdF9udW0sCisJCQkJICAgICAgICZ1cGRvd24sICZmbGFncyk7CiAJaWYgKHJjKSB7Ci0JCWVycigiJXM6IGdldF9jdGxyX3Nsb3RfY29uZmlnIGZhaWwgZm9yIGI6ZCAoJXg6JXgpXG4iLCBfX0ZVTkNUSU9OX18sIGN0cmwtPmJ1cywgY3RybC0+ZGV2aWNlKTsKKwkJZXJyKCIlczogZ2V0X2N0bHJfc2xvdF9jb25maWcgZmFpbCBmb3IgYjpkICgleDoleClcbiIsCisJCSAgICBfX0ZVTkNUSU9OX18sIGN0cmwtPmJ1cywgY3RybC0+ZGV2aWNlKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjE4LDE5ICsyMzQsMTkgQEAKIAljdHJsLT5maXJzdF9zbG90ID0gcGh5c2ljYWxfc2xvdF9udW07CiAJY3RybC0+c2xvdF9udW1faW5jID0gdXBkb3duOwkJLyogZWl0aGVyIC0xIG9yIDEgKi8KIAotCWRiZygiJXM6IG51bV9zbG90KDB4JXgpIDFzdF9kZXYoMHgleCkgcHNuKDB4JXgpIHVwZG93biglZCkgZm9yIGI6ZCAoJXg6JXgpXG4iLAotCQlfX0ZVTkNUSU9OX18sIG51bV9jdGxyX3Nsb3RzLCBmaXJzdF9kZXZpY2VfbnVtLCBwaHlzaWNhbF9zbG90X251bSwgdXBkb3duLCBjdHJsLT5idXMsIGN0cmwtPmRldmljZSk7CisJZGJnKCIlczogbnVtX3Nsb3QoMHgleCkgMXN0X2RldigweCV4KSBwc24oMHgleCkgdXBkb3duKCVkKSBmb3IgYjpkICIKKwkgICAgIigleDoleClcbiIsIF9fRlVOQ1RJT05fXywgbnVtX2N0bHJfc2xvdHMsIGZpcnN0X2RldmljZV9udW0sCisJICAgIHBoeXNpY2FsX3Nsb3RfbnVtLCB1cGRvd24sIGN0cmwtPmJ1cywgY3RybC0+ZGV2aWNlKTsKIAogCXJldHVybiAwOwogfQogCi0KIC8qCiAgKiBzZXRfYXR0ZW50aW9uX3N0YXR1cyAtIFR1cm5zIHRoZSBBbWJlciBMRUQgZm9yIGEgc2xvdCBvbiwgb2ZmIG9yIGJsaW5rCiAgKi8KIHN0YXRpYyBpbnQgc2V0X2F0dGVudGlvbl9zdGF0dXMgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCwgdTggc3RhdHVzKQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QgKGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKIAogCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKIApAQCAtMjQwLDI5ICsyNTYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGVuYWJsZV9zbG90IChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdCAoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOwogCiAJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCi0JcmV0dXJuIHNocGNocF9lbmFibGVfc2xvdChzbG90KTsKKwlyZXR1cm4gc2hwY2hwX3N5c2ZzX2VuYWJsZV9zbG90KHNsb3QpOwogfQogCi0KIHN0YXRpYyBpbnQgZGlzYWJsZV9zbG90IChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdCAoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOwogCiAJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwogCi0JcmV0dXJuIHNocGNocF9kaXNhYmxlX3Nsb3Qoc2xvdCk7CisJcmV0dXJuIHNocGNocF9zeXNmc19kaXNhYmxlX3Nsb3Qoc2xvdCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3Bvd2VyX3N0YXR1cyAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCB1OCAqdmFsdWUpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdCAoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOwogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0yNzYsNyArMjkwLDcgQEAKIAogc3RhdGljIGludCBnZXRfYXR0ZW50aW9uX3N0YXR1cyAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCB1OCAqdmFsdWUpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdCAoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOwogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0yOTAsNyArMzA0LDcgQEAKIAogc3RhdGljIGludCBnZXRfbGF0Y2hfc3RhdHVzIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIHU4ICp2YWx1ZSkKIHsKLQlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90IChob3RwbHVnX3Nsb3QsIF9fRlVOQ1RJT05fXyk7CisJc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdChob3RwbHVnX3Nsb3QsIF9fRlVOQ1RJT05fXyk7CiAJaW50IHJldHZhbDsKIAogCWRiZygiJXMgLSBwaHlzaWNhbF9zbG90ID0gJXNcbiIsIF9fRlVOQ1RJT05fXywgaG90cGx1Z19zbG90LT5uYW1lKTsKQEAgLTMwNCw3ICszMTgsNyBAQAogCiBzdGF0aWMgaW50IGdldF9hZGFwdGVyX3N0YXR1cyAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCB1OCAqdmFsdWUpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdCAoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOwogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0zMTgsNyArMzMyLDcgQEAKIAogc3RhdGljIGludCBnZXRfYWRkcmVzcyAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCB1MzIgKnZhbHVlKQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QgKGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gc2xvdC0+Y3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGU7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7CkBAIC0zMzAsMTEgKzM0NCwxMSBAQAogCiBzdGF0aWMgaW50IGdldF9tYXhfYnVzX3NwZWVkIChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QsIGVudW0gcGNpX2J1c19zcGVlZCAqdmFsdWUpCiB7Ci0Jc3RydWN0IHNsb3QgKnNsb3QgPSBnZXRfc2xvdCAoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QoaG90cGx1Z19zbG90LCBfX0ZVTkNUSU9OX18pOwogCWludCByZXR2YWw7CiAKIAlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGhvdHBsdWdfc2xvdC0+bmFtZSk7Ci0JCisKIAlyZXR2YWwgPSBzbG90LT5ocGNfb3BzLT5nZXRfbWF4X2J1c19zcGVlZChzbG90LCB2YWx1ZSk7CiAJaWYgKHJldHZhbCA8IDApCiAJCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwpAQCAtMzQ0LDExICszNTgsMTEgQEAKIAogc3RhdGljIGludCBnZXRfY3VyX2J1c19zcGVlZCAoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQogewotCXN0cnVjdCBzbG90ICpzbG90ID0gZ2V0X3Nsb3QgKGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKKwlzdHJ1Y3Qgc2xvdCAqc2xvdCA9IGdldF9zbG90KGhvdHBsdWdfc2xvdCwgX19GVU5DVElPTl9fKTsKIAlpbnQgcmV0dmFsOwogCiAJZGJnKCIlcyAtIHBoeXNpY2FsX3Nsb3QgPSAlc1xuIiwgX19GVU5DVElPTl9fLCBob3RwbHVnX3Nsb3QtPm5hbWUpOwotCQorCiAJcmV0dmFsID0gc2xvdC0+aHBjX29wcy0+Z2V0X2N1cl9idXNfc3BlZWQoc2xvdCwgdmFsdWUpOwogCWlmIChyZXR2YWwgPCAwKQogCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKQEAgLTM3Miw2MSArMzg2LDU0IEBACiAJaW50IHJjOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwogCXN0cnVjdCBzbG90ICp0X3Nsb3Q7Ci0JaW50IGZpcnN0X2RldmljZV9udW07CS8qIGZpcnN0IFBDSSBkZXZpY2UgbnVtYmVyIHN1cHBvcnRlZCBieSB0aGlzIFNIUEMgKi8KLQlpbnQgbnVtX2N0bHJfc2xvdHM7CS8qIG51bWJlciBvZiBzbG90cyBzdXBwb3J0ZWQgYnkgdGhpcyBTSFBDICovCisJaW50IGZpcnN0X2RldmljZV9udW07CS8qIGZpcnN0IFBDSSBkZXZpY2UgbnVtYmVyICovCisJaW50IG51bV9jdGxyX3Nsb3RzOwkvKiBudW1iZXIgb2Ygc2xvdHMgaW1wbGVtZW50ZWQgKi8KIAogCWlmICghaXNfc2hwY19jYXBhYmxlKHBkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWN0cmwgPSAoc3RydWN0IGNvbnRyb2xsZXIgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbnRyb2xsZXIpLCBHRlBfS0VSTkVMKTsKKwljdHJsID0ga3phbGxvYyhzaXplb2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0cmwpIHsKIAkJZXJyKCIlcyA6IG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gZXJyX291dF9ub25lOwogCX0KLQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mKHN0cnVjdCBjb250cm9sbGVyKSk7CisJSU5JVF9MSVNUX0hFQUQoJmN0cmwtPnNsb3RfbGlzdCk7CiAKIAlyYyA9IHNocGNfaW5pdChjdHJsLCBwZGV2KTsKIAlpZiAocmMpIHsKLQkJZGJnKCIlczogY29udHJvbGxlciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIFNIUENfTU9EVUxFX05BTUUpOworCQlkYmcoIiVzOiBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKwkJICAgIFNIUENfTU9EVUxFX05BTUUpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsOwogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjdHJsKTsKIAotCWN0cmwtPnBjaV9idXMgPSBrbWFsbG9jIChzaXplb2YgKCpjdHJsLT5wY2lfYnVzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHJsLT5wY2lfYnVzKSB7Ci0JCWVycigib3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X3VubWFwX21taW9fcmVnaW9uOwotCX0KLQkKLQltZW1jcHkgKGN0cmwtPnBjaV9idXMsIHBkZXYtPmJ1cywgc2l6ZW9mICgqY3RybC0+cGNpX2J1cykpOwogCWN0cmwtPmJ1cyA9IHBkZXYtPmJ1cy0+bnVtYmVyOwogCWN0cmwtPnNsb3RfYnVzID0gcGRldi0+c3Vib3JkaW5hdGUtPm51bWJlcjsKLQogCWN0cmwtPmRldmljZSA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKTsKIAljdHJsLT5mdW5jdGlvbiA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKLQlkYmcoImN0cmwgYnVzPTB4JXgsIGRldmljZT0leCwgZnVuY3Rpb249JXgsIGlycT0leFxuIiwgY3RybC0+YnVzLCBjdHJsLT5kZXZpY2UsIGN0cmwtPmZ1bmN0aW9uLCBwZGV2LT5pcnEpOworCisJZGJnKCJjdHJsIGJ1cz0weCV4LCBkZXZpY2U9JXgsIGZ1bmN0aW9uPSV4LCBpcnE9JXhcbiIsCisJICAgIGN0cmwtPmJ1cywgY3RybC0+ZGV2aWNlLCBjdHJsLT5mdW5jdGlvbiwgcGRldi0+aXJxKTsKIAogCS8qCi0JICoJU2F2ZSBjb25maWd1cmF0aW9uIGhlYWRlcnMgZm9yIHRoaXMgYW5kIHN1Ym9yZGluYXRlIFBDSSBidXNlcworCSAqIFNhdmUgY29uZmlndXJhdGlvbiBoZWFkZXJzIGZvciB0aGlzIGFuZCBzdWJvcmRpbmF0ZSBQQ0kgYnVzZXMKIAkgKi8KLQogCXJjID0gZ2V0X2N0bHJfc2xvdF9jb25maWcoY3RybCk7CiAJaWYgKHJjKSB7CiAJCWVycihtc2dfaW5pdGlhbGl6YXRpb25fZXJyLCByYyk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX2N0cmxfYnVzOworCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9jdGxyOwogCX0KIAlmaXJzdF9kZXZpY2VfbnVtID0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwogCW51bV9jdGxyX3Nsb3RzID0gY3RybC0+bnVtX3Nsb3RzOwogCiAJY3RybC0+YWRkX3N1cHBvcnQgPSAxOwotCQorCiAJLyogU2V0dXAgdGhlIHNsb3QgaW5mb3JtYXRpb24gc3RydWN0dXJlcyAqLwogCXJjID0gaW5pdF9zbG90cyhjdHJsKTsKIAlpZiAocmMpIHsKIAkJZXJyKG1zZ19pbml0aWFsaXphdGlvbl9lcnIsIDYpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsX3Nsb3Q7CisJCWdvdG8gZXJyX291dF9yZWxlYXNlX2N0bHI7CiAJfQogCiAJLyogTm93IGhwY19mdW5jdGlvbnMgKHNsb3QtPmhwY19vcHMtPmZ1bmN0aW9ucykgYXJlIHJlYWR5ICAqLwpAQCAtNDM3LDMwICs0NDQsMTYgQEAKIAlkYmcoIiVzOiB0X3Nsb3QtPmhwX3Nsb3QgJXhcbiIsIF9fRlVOQ1RJT05fXyx0X3Nsb3QtPmhwX3Nsb3QpOwogCiAJaWYgKHJjIHx8IGN0cmwtPnNwZWVkID09IFBDSV9TUEVFRF9VTktOT1dOKSB7Ci0JCWVycihTSFBDX01PRFVMRV9OQU1FICI6IENhbid0IGdldCBjdXJyZW50IGJ1cyBzcGVlZC4gU2V0IHRvIDMzTUh6IFBDSS5cbiIpOworCQllcnIoU0hQQ19NT0RVTEVfTkFNRSAiOiBDYW4ndCBnZXQgY3VycmVudCBidXMgc3BlZWQuICIKKwkJICAgICJTZXQgdG8gMzNNSHogUENJLlxuIik7CiAJCWN0cmwtPnNwZWVkID0gUENJX1NQRUVEXzMzTUh6OwogCX0KIAotCS8qIEZpbmlzaCBzZXR0aW5nIHVwIHRoZSBob3QgcGx1ZyBjdHJsIGRldmljZSAqLwotCWN0cmwtPm5leHRfZXZlbnQgPSAwOwotCi0JaWYgKCFzaHBjaHBfY3RybF9saXN0KSB7Ci0JCXNocGNocF9jdHJsX2xpc3QgPSBjdHJsOwotCQljdHJsLT5uZXh0ID0gTlVMTDsKLQl9IGVsc2UgewotCQljdHJsLT5uZXh0ID0gc2hwY2hwX2N0cmxfbGlzdDsKLQkJc2hwY2hwX2N0cmxfbGlzdCA9IGN0cmw7Ci0JfQotCiAJc2hwY2hwX2NyZWF0ZV9jdHJsX2ZpbGVzKGN0cmwpOwogCiAJcmV0dXJuIDA7CiAKLWVycl9vdXRfZnJlZV9jdHJsX3Nsb3Q6Ci0JY2xlYW51cF9zbG90cyhjdHJsKTsKLWVycl9vdXRfZnJlZV9jdHJsX2J1czoKLQlrZnJlZShjdHJsLT5wY2lfYnVzKTsKLWVycl9vdXRfdW5tYXBfbW1pb19yZWdpb246CitlcnJfb3V0X3JlbGVhc2VfY3RscjoKIAljdHJsLT5ocGNfb3BzLT5yZWxlYXNlX2N0bHIoY3RybCk7CiBlcnJfb3V0X2ZyZWVfY3RybDoKIAlrZnJlZShjdHJsKTsKQEAgLTQ2OCw3NCArNDYxLDI4IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLQotc3RhdGljIGludCBzaHBjX3N0YXJ0X3RocmVhZCh2b2lkKQorc3RhdGljIHZvaWQgc2hwY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlpbnQgcmV0dmFsID0gMDsKLQkKLQlkYmcoIkluaXRpYWxpemUgKyBTdGFydCB0aGUgbm90aWZpY2F0aW9uL3BvbGxpbmcgbWVjaGFuaXNtIFxuIik7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXJldHZhbCA9IHNocGNocF9ldmVudF9zdGFydF90aHJlYWQoKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRiZygic2hwY2hwX2V2ZW50X3N0YXJ0X3RocmVhZCgpIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKKwlzaHBjaHBfcmVtb3ZlX2N0cmxfZmlsZXMoY3RybCk7CisJY3RybC0+aHBjX29wcy0+cmVsZWFzZV9jdGxyKGN0cmwpOworCWtmcmVlKGN0cmwpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgdW5sb2FkX3NocGNocGQodm9pZCkKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybDsKLQlzdHJ1Y3QgY29udHJvbGxlciAqdGN0cmw7Ci0KLQljdHJsID0gc2hwY2hwX2N0cmxfbGlzdDsKLQotCXdoaWxlIChjdHJsKSB7Ci0JCXNocGNocF9yZW1vdmVfY3RybF9maWxlcyhjdHJsKTsKLQkJY2xlYW51cF9zbG90cyhjdHJsKTsKLQotCQlrZnJlZSAoY3RybC0+cGNpX2J1cyk7Ci0JCWN0cmwtPmhwY19vcHMtPnJlbGVhc2VfY3RscihjdHJsKTsKLQotCQl0Y3RybCA9IGN0cmw7Ci0JCWN0cmwgPSBjdHJsLT5uZXh0OwotCi0JCWtmcmVlKHRjdHJsKTsKLQl9Ci0KLQkvKiBTdG9wIHRoZSBub3RpZmljYXRpb24gbWVjaGFuaXNtICovCi0Jc2hwY2hwX2V2ZW50X3N0b3BfdGhyZWFkKCk7Ci0KLX0KLQotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2hwY2RfcGNpX3RibFtdID0gewotCXsKLQkuY2xhc3MgPSAgICAgICAgKChQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCA4KSB8IDB4MDApLAotCS5jbGFzc19tYXNrID0JfjAsCi0JLnZlbmRvciA9ICAgICAgIFBDSV9BTllfSUQsCi0JLmRldmljZSA9ICAgICAgIFBDSV9BTllfSUQsCi0JLnN1YnZlbmRvciA9ICAgIFBDSV9BTllfSUQsCi0JLnN1YmRldmljZSA9ICAgIFBDSV9BTllfSUQsCi0JfSwKLQkKKwl7UENJX0RFVklDRV9DTEFTUygoKFBDSV9DTEFTU19CUklER0VfUENJIDw8IDgpIHwgMHgwMCksIH4wKX0sCiAJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQogfTsKLQogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNocGNkX3BjaV90YmwpOwogCi0KLQogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNocGNfZHJpdmVyID0gewogCS5uYW1lID0JCVNIUENfTU9EVUxFX05BTUUsCiAJLmlkX3RhYmxlID0Jc2hwY2RfcGNpX3RibCwKIAkucHJvYmUgPQlzaHBjX3Byb2JlLAotCS8qIHJlbW92ZToJc2hwY19yZW1vdmVfb25lLCAqLworCS5yZW1vdmUgPQlzaHBjX3JlbW92ZSwKIH07CiAKLQotCiBzdGF0aWMgaW50IF9faW5pdCBzaHBjZF9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbCA9IDA7CkBAIC01NDQsMTcgKzQ5MSwxNSBAQAogCXNocGNocF9wb2xsX21vZGUgPSAxOwogI2VuZGlmCiAKLQlyZXR2YWwgPSBzaHBjX3N0YXJ0X3RocmVhZCgpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyb3JfaHBjX2luaXQ7CisJc2hwY2hwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInNocGNocGQiKTsKKwlpZiAoIXNocGNocF93cSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXR2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzaHBjX2RyaXZlcik7CiAJZGJnKCIlczogcGNpX3JlZ2lzdGVyX2RyaXZlciA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CiAJaW5mbyhEUklWRVJfREVTQyAiIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7Ci0KLWVycm9yX2hwY19pbml0OgogCWlmIChyZXR2YWwpIHsKLQkJc2hwY2hwX2V2ZW50X3N0b3BfdGhyZWFkKCk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHNocGNocF93cSk7CiAJfQogCXJldHVybiByZXR2YWw7CiB9CkBAIC01NjIsMTAgKzUwNyw4IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc2hwY2RfY2xlYW51cCh2b2lkKQogewogCWRiZygidW5sb2FkX3NocGNocGQoKVxuIik7Ci0JdW5sb2FkX3NocGNocGQoKTsKLQogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2hwY19kcml2ZXIpOwotCisJZGVzdHJveV93b3JrcXVldWUoc2hwY2hwX3dxKTsKIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiIHVubG9hZGVkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY3RybC5jCmluZGV4IDY0MzI1MmQuLjRlNjM4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jdHJsLmMKQEAgLTMyLDY1ICszMiw1MCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICJzaHBjaHAuaCIKIAotc3RhdGljIHZvaWQgaW50ZXJydXB0X2V2ZW50X2hhbmRsZXIoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOworc3RhdGljIHZvaWQgaW50ZXJydXB0X2V2ZW50X2hhbmRsZXIodm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IHNocGNocF9lbmFibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKK3N0YXRpYyBpbnQgc2hwY2hwX2Rpc2FibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKIAotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgZXZlbnRfc2VtYXBob3JlOwkvKiBtdXRleCBmb3IgcHJvY2VzcyBsb29wICh1cCBpZiBzb21ldGhpbmcgdG8gcHJvY2VzcykgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGV2ZW50X2V4aXQ7CQkvKiBndWFyZCBlbnN1cmUgdGhyZWFkIGhhcyBleGl0ZWQgYmVmb3JlIGNhbGxpbmcgaXQgcXVpdHMgKi8KLXN0YXRpYyBpbnQgZXZlbnRfZmluaXNoZWQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBwdXNoYnV0dG9uX3BlbmRpbmc7CS8qID0gMCAqLworc3RhdGljIGludCBxdWV1ZV9pbnRlcnJ1cHRfZXZlbnQoc3RydWN0IHNsb3QgKnBfc2xvdCwgdTMyIGV2ZW50X3R5cGUpCit7CisJc3RydWN0IGV2ZW50X2luZm8gKmluZm87CisKKwlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJaW5mby0+ZXZlbnRfdHlwZSA9IGV2ZW50X3R5cGU7CisJaW5mby0+cF9zbG90ID0gcF9zbG90OworCUlOSVRfV09SSygmaW5mby0+d29yaywgaW50ZXJydXB0X2V2ZW50X2hhbmRsZXIsIGluZm8pOworCisJc2NoZWR1bGVfd29yaygmaW5mby0+d29yayk7CisKKwlyZXR1cm4gMDsKK30KIAogdTggc2hwY2hwX2hhbmRsZV9hdHRlbnRpb25fYnV0dG9uKHU4IGhwX3Nsb3QsIHZvaWQgKmluc3RfaWQpCiB7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSAoc3RydWN0IGNvbnRyb2xsZXIgKikgaW5zdF9pZDsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwotCXU4IHJjID0gMDsKLQl1OCBnZXRzdGF0dXM7Ci0Jc3RydWN0IGV2ZW50X2luZm8gKnRhc2tJbmZvOworCXUzMiBldmVudF90eXBlOwogCiAJLyogQXR0ZW50aW9uIEJ1dHRvbiBDaGFuZ2UgKi8KIAlkYmcoInNocGNocDogIEF0dGVudGlvbiBidXR0b24gaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CiAJCi0JLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgdGVsbHMgdGhlIHdvcmtlciB0aHJlYWQgd2hhdCB0byBkbyAqLwotCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7CiAJcF9zbG90ID0gc2hwY2hwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKLQogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihwX3Nsb3QtPnByZXNlbmNlX3NhdmUpKTsKLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9sYXRjaF9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKLQkKLQljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIDEwOwotCXRhc2tJbmZvLT5ocF9zbG90ID0gaHBfc2xvdDsKLQotCXJjKys7CiAKIAkvKgogCSAqICBCdXR0b24gcHJlc3NlZCAtIFNlZSBpZiBuZWVkIHRvIFRBS0UgQUNUSU9OISEhCiAJICovCiAJaW5mbygiQnV0dG9uIHByZXNzZWQgb24gU2xvdCglZClcbiIsIGN0cmwtPmZpcnN0X3Nsb3QgKyBocF9zbG90KTsKLQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9CVVRUT05fUFJFU1M7CisJZXZlbnRfdHlwZSA9IElOVF9CVVRUT05fUFJFU1M7CiAKLQlpZiAoKHBfc2xvdC0+c3RhdGUgPT0gQkxJTktJTkdPTl9TVEFURSkKLQkgICAgfHwgKHBfc2xvdC0+c3RhdGUgPT0gQkxJTktJTkdPRkZfU1RBVEUpKSB7Ci0JCS8qIENhbmNlbCBpZiB3ZSBhcmUgc3RpbGwgYmxpbmtpbmc7IHRoaXMgbWVhbnMgdGhhdCB3ZSBwcmVzcyB0aGUKLQkJICogYXR0ZW50aW9uIGFnYWluIGJlZm9yZSB0aGUgNSBzZWMuIGxpbWl0IGV4cGlyZXMgdG8gY2FuY2VsIGhvdC1hZGQKLQkJICogb3IgaG90LXJlbW92ZQotCQkgKi8KLQkJdGFza0luZm8tPmV2ZW50X3R5cGUgPSBJTlRfQlVUVE9OX0NBTkNFTDsKLQkJaW5mbygiQnV0dG9uIGNhbmNlbCBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCX0gZWxzZSBpZiAoKHBfc2xvdC0+c3RhdGUgPT0gUE9XRVJPTl9TVEFURSkKLQkJICAgfHwgKHBfc2xvdC0+c3RhdGUgPT0gUE9XRVJPRkZfU1RBVEUpKSB7Ci0JCS8qIElnbm9yZSBpZiB0aGUgc2xvdCBpcyBvbiBwb3dlci1vbiBvciBwb3dlci1vZmYgc3RhdGU7IHRoaXMgCi0JCSAqIG1lYW5zIHRoYXQgdGhlIHByZXZpb3VzIGF0dGVudGlvbiBidXR0b24gYWN0aW9uIHRvIGhvdC1hZGQgb3IKLQkJICogaG90LXJlbW92ZSBpcyB1bmRlcmdvaW5nCi0JCSAqLwotCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9CVVRUT05fSUdOT1JFOwotCQlpbmZvKCJCdXR0b24gaWdub3JlIG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7Ci0JfQotCi0JaWYgKHJjKQotCQl1cCgmZXZlbnRfc2VtYXBob3JlKTsJLyogc2lnbmFsIGV2ZW50IHRocmVhZCB0aGF0IG5ldyBldmVudCBpcyBwb3N0ZWQgKi8KKwlxdWV1ZV9pbnRlcnJ1cHRfZXZlbnQocF9zbG90LCBldmVudF90eXBlKTsKIAogCXJldHVybiAwOwogCkBAIC0xMDAsMjEgKzg1LDEyIEBACiB7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSAoc3RydWN0IGNvbnRyb2xsZXIgKikgaW5zdF9pZDsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwotCXU4IHJjID0gMDsKIAl1OCBnZXRzdGF0dXM7Ci0Jc3RydWN0IGV2ZW50X2luZm8gKnRhc2tJbmZvOworCXUzMiBldmVudF90eXBlOwogCiAJLyogU3dpdGNoIENoYW5nZSAqLwogCWRiZygic2hwY2hwOiAgU3dpdGNoIGludGVycnVwdCByZWNlaXZlZC5cbiIpOwogCi0JLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgdGVsbHMgdGhlIHdvcmtlciB0aHJlYWQKLQkgKiB3aGF0IHRvIGRvCi0JICovCi0JdGFza0luZm8gPSAmKGN0cmwtPmV2ZW50X3F1ZXVlW2N0cmwtPm5leHRfZXZlbnRdKTsKLQljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIDEwOwotCXRhc2tJbmZvLT5ocF9zbG90ID0gaHBfc2xvdDsKLQotCXJjKys7CiAJcF9zbG90ID0gc2hwY2hwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYocF9zbG90LT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CkBAIC0xMjYsOSArMTAyLDkgQEAKIAkJICogU3dpdGNoIG9wZW5lZAogCQkgKi8KIAkJaW5mbygiTGF0Y2ggb3BlbiBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9TV0lUQ0hfT1BFTjsKKwkJZXZlbnRfdHlwZSA9IElOVF9TV0lUQ0hfT1BFTjsKIAkJaWYgKHBfc2xvdC0+cHdyX3NhdmUgJiYgcF9zbG90LT5wcmVzZW5jZV9zYXZlKSB7Ci0JCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVDsKKwkJCWV2ZW50X3R5cGUgPSBJTlRfUE9XRVJfRkFVTFQ7CiAJCQllcnIoIlN1cnByaXNlIFJlbW92YWwgb2YgY2FyZFxuIik7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTM2LDM0ICsxMTIsMjMgQEAKIAkJICogIFN3aXRjaCBjbG9zZWQKIAkJICovCiAJCWluZm8oIkxhdGNoIGNsb3NlIG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7Ci0JCXRhc2tJbmZvLT5ldmVudF90eXBlID0gSU5UX1NXSVRDSF9DTE9TRTsKKwkJZXZlbnRfdHlwZSA9IElOVF9TV0lUQ0hfQ0xPU0U7CiAJfQogCi0JaWYgKHJjKQotCQl1cCgmZXZlbnRfc2VtYXBob3JlKTsJLyogc2lnbmFsIGV2ZW50IHRocmVhZCB0aGF0IG5ldyBldmVudCBpcyBwb3N0ZWQgKi8KKwlxdWV1ZV9pbnRlcnJ1cHRfZXZlbnQocF9zbG90LCBldmVudF90eXBlKTsKIAotCXJldHVybiByYzsKKwlyZXR1cm4gMTsKIH0KIAogdTggc2hwY2hwX2hhbmRsZV9wcmVzZW5jZV9jaGFuZ2UodTggaHBfc2xvdCwgdm9pZCAqaW5zdF9pZCkKIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IChzdHJ1Y3QgY29udHJvbGxlciAqKSBpbnN0X2lkOwogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7Ci0JdTggcmMgPSAwOwotCS8qdTggdGVtcF9ieXRlOyovCi0Jc3RydWN0IGV2ZW50X2luZm8gKnRhc2tJbmZvOworCXUzMiBldmVudF90eXBlOwogCiAJLyogUHJlc2VuY2UgQ2hhbmdlICovCiAJZGJnKCJzaHBjaHA6ICBQcmVzZW5jZS9Ob3RpZnkgaW5wdXQgY2hhbmdlLlxuIik7CiAKLQkvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB0ZWxscyB0aGUgd29ya2VyIHRocmVhZAotCSAqIHdoYXQgdG8gZG8KLQkgKi8KLQl0YXNrSW5mbyA9ICYoY3RybC0+ZXZlbnRfcXVldWVbY3RybC0+bmV4dF9ldmVudF0pOwotCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgMTA7Ci0JdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwotCi0JcmMrKzsKIAlwX3Nsb3QgPSBzaHBjaHBfZmluZF9zbG90KGN0cmwsIGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpOwogCiAJLyogCkBAIC0xNzUsMzkgKzE0MCwyOSBAQAogCQkgKiBDYXJkIFByZXNlbnQKIAkJICovCiAJCWluZm8oIkNhcmQgcHJlc2VudCBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QUkVTRU5DRV9PTjsKKwkJZXZlbnRfdHlwZSA9IElOVF9QUkVTRU5DRV9PTjsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBOb3QgUHJlc2VudAogCQkgKi8KIAkJaW5mbygiQ2FyZCBub3QgcHJlc2VudCBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QUkVTRU5DRV9PRkY7CisJCWV2ZW50X3R5cGUgPSBJTlRfUFJFU0VOQ0VfT0ZGOwogCX0KIAotCWlmIChyYykKLQkJdXAoJmV2ZW50X3NlbWFwaG9yZSk7CS8qIHNpZ25hbCBldmVudCB0aHJlYWQgdGhhdCBuZXcgZXZlbnQgaXMgcG9zdGVkICovCisJcXVldWVfaW50ZXJydXB0X2V2ZW50KHBfc2xvdCwgZXZlbnRfdHlwZSk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDE7CiB9CiAKIHU4IHNocGNocF9oYW5kbGVfcG93ZXJfZmF1bHQodTggaHBfc2xvdCwgdm9pZCAqaW5zdF9pZCkKIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IChzdHJ1Y3QgY29udHJvbGxlciAqKSBpbnN0X2lkOwogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7Ci0JdTggcmMgPSAwOwotCXN0cnVjdCBldmVudF9pbmZvICp0YXNrSW5mbzsKKwl1MzIgZXZlbnRfdHlwZTsKIAogCS8qIFBvd2VyIGZhdWx0ICovCiAJZGJnKCJzaHBjaHA6ICBQb3dlciBmYXVsdCBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKIAotCS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkCi0JICogd2hhdCB0byBkbwotCSAqLwotCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7Ci0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKLQl0YXNrSW5mby0+aHBfc2xvdCA9IGhwX3Nsb3Q7Ci0KLQlyYysrOwogCXBfc2xvdCA9IHNocGNocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKIAlpZiAoICEocF9zbG90LT5ocGNfb3BzLT5xdWVyeV9wb3dlcl9mYXVsdChwX3Nsb3QpKSkgewpAQCAtMjE2LDIxICsxNzEsMjEgQEAKIAkJICovCiAJCWluZm8oIlBvd2VyIGZhdWx0IGNsZWFyZWQgb24gU2xvdCglZClcbiIsIGN0cmwtPmZpcnN0X3Nsb3QgKyBocF9zbG90KTsKIAkJcF9zbG90LT5zdGF0dXMgPSAweDAwOwotCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVF9DTEVBUjsKKwkJZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVF9DTEVBUjsKIAl9IGVsc2UgewogCQkvKgogCQkgKiAgIFBvd2VyIGZhdWx0CiAJCSAqLwogCQlpbmZvKCJQb3dlciBmYXVsdCBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVDsKKwkJZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVDsKIAkJLyogc2V0IHBvd2VyIGZhdWx0IHN0YXR1cyBmb3IgdGhpcyBib2FyZCAqLwogCQlwX3Nsb3QtPnN0YXR1cyA9IDB4RkY7CiAJCWluZm8oInBvd2VyIGZhdWx0IGJpdCAleCBzZXRcbiIsIGhwX3Nsb3QpOwogCX0KLQlpZiAocmMpCi0JCXVwKCZldmVudF9zZW1hcGhvcmUpOwkvKiBzaWduYWwgZXZlbnQgdGhyZWFkIHRoYXQgbmV3IGV2ZW50IGlzIHBvc3RlZCAqLwogCi0JcmV0dXJuIHJjOworCXF1ZXVlX2ludGVycnVwdF9ldmVudChwX3Nsb3QsIGV2ZW50X3R5cGUpOworCisJcmV0dXJuIDE7CiB9CiAKIC8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgY29uc3RpdHV0ZSB0aGUgYnVsayBvZiB0aGUgCkBAIC0yNDIsMjEgKzE5NywxMSBAQAogCWludCByYyA9IDA7CiAKIAlkYmcoIiVzOiBjaGFuZ2UgdG8gc3BlZWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3BlZWQpOwotCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7CiAJaWYgKChyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2V0X2J1c19zcGVlZF9tb2RlKHBfc2xvdCwgc3BlZWQpKSkgewotCQllcnIoIiVzOiBJc3N1ZSBvZiBzZXQgYnVzIHNwZWVkIG1vZGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXVwKCZjdHJsLT5jcml0X3NlY3QpOworCQllcnIoIiVzOiBJc3N1ZSBvZiBzZXQgYnVzIHNwZWVkIG1vZGUgY29tbWFuZCBmYWlsZWRcbiIsCisJCSAgICBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIAl9Ci0JCQotCWlmICgocmMgPSBwX3Nsb3QtPmhwY19vcHMtPmNoZWNrX2NtZF9zdGF0dXMoY3RybCkpKSB7Ci0JCWVycigiJXM6IENhbid0IHNldCBidXMgc3BlZWQvbW9kZSBpbiB0aGUgY2FzZSBvZiBhZGFwdGVyICYgYnVzIG1pc21hdGNoXG4iLAotCQkJICBfX0ZVTkNUSU9OX18pOwotCQllcnIoIiVzOiBFcnJvciBjb2RlICglZClcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLQkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7Ci0JfQotCXVwKCZjdHJsLT5jcml0X3NlY3QpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjY1LDMzICsyMTAsMjYgQEAKIAkJZW51bSBwY2lfYnVzX3NwZWVkIG1zcCkKIHsgCiAJaW50IHJjID0gMDsKLQkKLQlpZiAoZmxhZyAhPSAwKSB7IC8qIE90aGVyIHNsb3RzIG9uIHRoZSBzYW1lIGJ1cyBhcmUgb2NjdXBpZWQgKi8KLQkJaWYgKCBhc3AgPCBic3AgKSB7Ci0JCQllcnIoIiVzOiBzcGVlZCBvZiBidXMgJXggYW5kIGFkYXB0ZXIgJXggbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXywgYnNwLCBhc3ApOwotCQkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7CisKKwkvKgorCSAqIElmIG90aGVyIHNsb3RzIG9uIHRoZSBzYW1lIGJ1cyBhcmUgb2NjdXBpZWQsIHdlIGNhbm5vdAorCSAqIGNoYW5nZSB0aGUgYnVzIHNwZWVkLgorCSAqLworCWlmIChmbGFnKSB7CisJCWlmIChhc3AgPCBic3ApIHsKKwkJCWVycigiJXM6IHNwZWVkIG9mIGJ1cyAleCBhbmQgYWRhcHRlciAleCBtaXNtYXRjaFxuIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18sIGJzcCwgYXNwKTsKKwkJCXJjID0gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKIAkJfQorCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKGFzcCA8IG1zcCkgeworCQlpZiAoYnNwICE9IGFzcCkKKwkJCXJjID0gY2hhbmdlX2J1c19zcGVlZChjdHJsLCBwc2xvdCwgYXNwKTsKIAl9IGVsc2UgewotCQkvKiBPdGhlciBzbG90cyBvbiB0aGUgc2FtZSBidXMgYXJlIGVtcHR5ICovCi0JCWlmIChtc3AgPT0gYnNwKSB7Ci0JCS8qIGlmIGFkYXB0ZXJfc3BlZWQgPj0gYnVzX3NwZWVkLCBkbyBub3RoaW5nICovCi0JCQlpZiAoYXNwIDwgYnNwKSB7Ci0JCQkJLyogCi0JCQkJKiBUcnkgdG8gbG93ZXIgYnVzIHNwZWVkIHRvIGFjY29tbW9kYXRlIHRoZSBhZGFwdGVyIGlmIG90aGVyIHNsb3RzIAotCQkJCSogb24gdGhlIHNhbWUgY29udHJvbGxlciBhcmUgZW1wdHkKLQkJCQkqLwotCQkJCWlmICgocmMgPSBjaGFuZ2VfYnVzX3NwZWVkKGN0cmwsIHBzbG90LCBhc3ApKSkKLQkJCQkJcmV0dXJuIHJjOwotCQkJfSAKLQkJfSBlbHNlIHsKLQkJCWlmIChhc3AgPCBtc3ApIHsKLQkJCQlpZiAoKHJjID0gY2hhbmdlX2J1c19zcGVlZChjdHJsLCBwc2xvdCwgYXNwKSkpCi0JCQkJCXJldHVybiByYzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKChyYyA9IGNoYW5nZV9idXNfc3BlZWQoY3RybCwgcHNsb3QsIG1zcCkpKQotCQkJCQlyZXR1cm4gcmM7Ci0JCQl9Ci0JCX0KKwkJaWYgKGJzcCAhPSBtc3ApCisJCQlyYyA9IGNoYW5nZV9idXNfc3BlZWQoY3RybCwgcHNsb3QsIG1zcCk7CiAJfQogCXJldHVybiByYzsKIH0KQEAgLTMwOCw4ICsyNDYsNyBAQAogCXU4IGhwX3Nsb3Q7CiAJdTggc2xvdHNfbm90X2VtcHR5ID0gMDsKIAlpbnQgcmMgPSAwOwotCWVudW0gcGNpX2J1c19zcGVlZCBhZGFwdGVyX3NwZWVkLCBidXNfc3BlZWQsIG1heF9idXNfc3BlZWQ7Ci0JdTggcGksIG1vZGU7CisJZW51bSBwY2lfYnVzX3NwZWVkIGFzcCwgYnNwLCBtc3A7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKIAlocF9zbG90ID0gcF9zbG90LT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CkBAIC0zMTgsMTg3ICsyNTUsNjggQEAKIAkJCV9fRlVOQ1RJT05fXywgcF9zbG90LT5kZXZpY2UsCiAJCQljdHJsLT5zbG90X2RldmljZV9vZmZzZXQsIGhwX3Nsb3QpOwogCi0JLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwotCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7Ci0KIAkvKiBQb3dlciBvbiBzbG90IHdpdGhvdXQgY29ubmVjdGluZyB0byBidXMgKi8KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+cG93ZXJfb25fc2xvdChwX3Nsb3QpOwogCWlmIChyYykgewogCQllcnIoIiVzOiBGYWlsZWQgdG8gcG93ZXIgb24gc2xvdFxuIiwgX19GVU5DVElPTl9fKTsKLQkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CiAJCXJldHVybiAtMTsKIAl9CiAJCi0JcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmNoZWNrX2NtZF9zdGF0dXMoY3RybCk7Ci0JaWYgKHJjKSB7Ci0JCWVycigiJXM6IEZhaWxlZCB0byBwb3dlciBvbiBzbG90LCBlcnJvciBjb2RlKCVkKVxuIiwgX19GVU5DVElPTl9fLCByYyk7Ci0JCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JCXVwKCZjdHJsLT5jcml0X3NlY3QpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JCiAJaWYgKChjdHJsLT5wY2lfZGV2LT52ZW5kb3IgPT0gMHg4MDg2KSAmJiAoY3RybC0+cGNpX2Rldi0+ZGV2aWNlID09IDB4MDMzMikpIHsKIAkJaWYgKHNsb3RzX25vdF9lbXB0eSkKIAkJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwogCQkKIAkJaWYgKChyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2V0X2J1c19zcGVlZF9tb2RlKHBfc2xvdCwgUENJX1NQRUVEXzMzTUh6KSkpIHsKIAkJCWVycigiJXM6IElzc3VlIG9mIHNldCBidXMgc3BlZWQgbW9kZSBjb21tYW5kIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOwogCQkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7CiAJCX0KIAkJCi0JCWlmICgocmMgPSBwX3Nsb3QtPmhwY19vcHMtPmNoZWNrX2NtZF9zdGF0dXMoY3RybCkpKSB7Ci0JCQllcnIoIiVzOiBDYW4ndCBzZXQgYnVzIHNwZWVkL21vZGUgaW4gdGhlIGNhc2Ugb2YgYWRhcHRlciAmIGJ1cyBtaXNtYXRjaFxuIiwKLQkJCQkgIF9fRlVOQ1RJT05fXyk7Ci0JCQllcnIoIiVzOiBFcnJvciBjb2RlICglZClcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7Ci0JCQlyZXR1cm4gV1JPTkdfQlVTX0ZSRVFVRU5DWTsKLQkJfQogCQkvKiB0dXJuIG9uIGJvYXJkLCBibGluayBncmVlbiBMRUQsIHR1cm4gb2ZmIEFtYmVyIExFRCAqLwogCQlpZiAoKHJjID0gcF9zbG90LT5ocGNfb3BzLT5zbG90X2VuYWJsZShwX3Nsb3QpKSkgewogCQkJZXJyKCIlczogSXNzdWUgb2YgU2xvdCBFbmFibGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKIAkJCXJldHVybiByYzsKIAkJfQotCi0JCWlmICgocmMgPSBwX3Nsb3QtPmhwY19vcHMtPmNoZWNrX2NtZF9zdGF0dXMoY3RybCkpKSB7Ci0JCQllcnIoIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHNsb3QsIGVycm9yIGNvZGUoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOwotCQkJcmV0dXJuIHJjOyAgCi0JCX0KIAl9CiAgCi0JcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3NwZWVkKHBfc2xvdCwgJmFkYXB0ZXJfc3BlZWQpOwotCS8qIDAgPSBQQ0kgMzNNaHosIDEgPSBQQ0kgNjYgTWh6LCAyID0gUENJLVggNjYgUEEsIDQgPSBQQ0ktWCA2NiBFQ0MsICovCi0JLyogNSA9IFBDSS1YIDEzMyBQQSwgNyA9IFBDSS1YIDEzMyBFQ0MsICAweGEgPSBQQ0ktWCAxMzMgTWh6IDI2NiwgKi8KLQkvKiAweGQgPSBQQ0ktWCAxMzMgTWh6IDUzMyAqLwotCS8qIFRoaXMgZW5jb2RpbmcgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSB1c2VkIGluIGN1cl9idXNfc3BlZWQgJiAqLwotCS8qIG1heF9idXNfc3BlZWQgKi8KLQotCWlmIChyYyAgfHwgYWRhcHRlcl9zcGVlZCA9PSBQQ0lfU1BFRURfVU5LTk9XTikgewotCQllcnIoIiVzOiBDYW4ndCBnZXQgYWRhcHRlciBzcGVlZCBvciBidXMgbW9kZSBtaXNtYXRjaFxuIiwgX19GVU5DVElPTl9fKTsKLQkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CisJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3NwZWVkKHBfc2xvdCwgJmFzcCk7CisJaWYgKHJjKSB7CisJCWVycigiJXM6IENhbid0IGdldCBhZGFwdGVyIHNwZWVkIG9yIGJ1cyBtb2RlIG1pc21hdGNoXG4iLAorCQkgICAgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7CiAJfQogCi0JcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9jdXJfYnVzX3NwZWVkKHBfc2xvdCwgJmJ1c19zcGVlZCk7Ci0JaWYgKHJjIHx8IGJ1c19zcGVlZCA9PSBQQ0lfU1BFRURfVU5LTk9XTikgeworCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfY3VyX2J1c19zcGVlZChwX3Nsb3QsICZic3ApOworCWlmIChyYykgewogCQllcnIoIiVzOiBDYW4ndCBnZXQgYnVzIG9wZXJhdGlvbiBzcGVlZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CiAJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwogCX0KIAotCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfbWF4X2J1c19zcGVlZChwX3Nsb3QsICZtYXhfYnVzX3NwZWVkKTsKLQlpZiAocmMgfHwgbWF4X2J1c19zcGVlZCA9PSBQQ0lfU1BFRURfVU5LTk9XTikgeworCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfbWF4X2J1c19zcGVlZChwX3Nsb3QsICZtc3ApOworCWlmIChyYykgewogCQllcnIoIiVzOiBDYW4ndCBnZXQgbWF4IGJ1cyBvcGVyYXRpb24gc3BlZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCW1heF9idXNfc3BlZWQgPSBidXNfc3BlZWQ7Ci0JfQotCi0JLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLQotCWlmICgocmMgID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfcHJvZ19pbnQocF9zbG90LCAmcGkpKSkgewotCQllcnIoIiVzOiBDYW4ndCBnZXQgY29udHJvbGxlciBwcm9ncmFtbWluZyBpbnRlcmZhY2UsIHNldCBpdCB0byAxXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlwaSA9IDE7CisJCW1zcCA9IGJzcDsKIAl9CiAKIAkvKiBDaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgc2xvdHMgb3IgZGV2aWNlcyBvbiB0aGUgc2FtZSBidXMgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzKSkKIAkJc2xvdHNfbm90X2VtcHR5ID0gMTsKIAotCWRiZygiJXM6IHNsb3RzX25vdF9lbXB0eSAlZCwgcGkgJWRcbiIsIF9fRlVOQ1RJT05fXywgCi0JCXNsb3RzX25vdF9lbXB0eSwgcGkpOwotCWRiZygiYWRhcHRlcl9zcGVlZCAlZCwgYnVzX3NwZWVkICVkLCBtYXhfYnVzX3NwZWVkICVkXG4iLCAKLQkJYWRhcHRlcl9zcGVlZCwgYnVzX3NwZWVkLCBtYXhfYnVzX3NwZWVkKTsKKwlkYmcoIiVzOiBzbG90c19ub3RfZW1wdHkgJWQsIGFkYXB0ZXJfc3BlZWQgJWQsIGJ1c19zcGVlZCAlZCwgIgorCSAgICAibWF4X2J1c19zcGVlZCAlZFxuIiwgX19GVU5DVElPTl9fLCBzbG90c19ub3RfZW1wdHksIGFzcCwKKwkgICAgYnNwLCBtc3ApOwogCi0JaWYgKHBpID09IDIpIHsKLQkJZGJnKCIlczogSW4gUEkgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBwaSk7Ci0JCWlmICgocmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9tb2RlMV9FQ0NfY2FwKHBfc2xvdCwgJm1vZGUpKSkgewotCQkJZXJyKCIlczogQ2FuJ3QgZ2V0IE1vZGUxX0VDQywgc2V0IG1vZGUgdG8gMFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCW1vZGUgPSAwOwotCQl9CisJcmMgPSBmaXhfYnVzX3NwZWVkKGN0cmwsIHBfc2xvdCwgc2xvdHNfbm90X2VtcHR5LCBhc3AsIGJzcCwgbXNwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotCQlzd2l0Y2ggKGFkYXB0ZXJfc3BlZWQpIHsKLQkJY2FzZSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOgotCQljYXNlIFBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjY6Ci0JCQlpZiAoKGJ1c19zcGVlZCAhPSBhZGFwdGVyX3NwZWVkKSAmJgotCQkJICAgKChyYyA9IGZpeF9idXNfc3BlZWQoY3RybCwgcF9zbG90LCBzbG90c19ub3RfZW1wdHksIGFkYXB0ZXJfc3BlZWQsIGJ1c19zcGVlZCwgbWF4X2J1c19zcGVlZCkpKSkgCi0JCQkJcmV0dXJuIHJjOwotCQkJYnJlYWs7CQotCQljYXNlIFBDSV9TUEVFRF8xMzNNSHpfUENJWF9FQ0M6Ci0JCWNhc2UgUENJX1NQRUVEXzEzM01Iel9QQ0lYOgotCQkJaWYgKG1vZGUpIHsgLyogQnVzIC0gTW9kZSAxIEVDQyAqLwotCQkJCWlmICgoYnVzX3NwZWVkICE9IDB4NykgJiYKLQkJCQkgICAoKHJjID0gZml4X2J1c19zcGVlZChjdHJsLCBwX3Nsb3QsIHNsb3RzX25vdF9lbXB0eSwgYWRhcHRlcl9zcGVlZCwgYnVzX3NwZWVkLCBtYXhfYnVzX3NwZWVkKSkpKSAKLQkJCQkJcmV0dXJuIHJjOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoKGJ1c19zcGVlZCAhPSAweDQpICYmCi0JCQkJICAgKChyYyA9IGZpeF9idXNfc3BlZWQoY3RybCwgcF9zbG90LCBzbG90c19ub3RfZW1wdHksIGFkYXB0ZXJfc3BlZWQsIGJ1c19zcGVlZCwgbWF4X2J1c19zcGVlZCkpKSkgCi0JCQkJCXJldHVybiByYzsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFBDSV9TUEVFRF82Nk1Iel9QQ0lYX0VDQzoKLQkJY2FzZSBQQ0lfU1BFRURfNjZNSHpfUENJWDoKLQkJCWlmIChtb2RlKSB7IC8qIEJ1cyAtIE1vZGUgMSBFQ0MgKi8KLQkJCQlpZiAoKGJ1c19zcGVlZCAhPSAweDUpICYmCi0JCQkJICAgKChyYyA9IGZpeF9idXNfc3BlZWQoY3RybCwgcF9zbG90LCBzbG90c19ub3RfZW1wdHksIGFkYXB0ZXJfc3BlZWQsIGJ1c19zcGVlZCwgbWF4X2J1c19zcGVlZCkpKSkgCi0JCQkJCXJldHVybiByYzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKChidXNfc3BlZWQgIT0gMHgyKSAmJgotCQkJCSAgICgocmMgPSBmaXhfYnVzX3NwZWVkKGN0cmwsIHBfc2xvdCwgc2xvdHNfbm90X2VtcHR5LCBhZGFwdGVyX3NwZWVkLCBidXNfc3BlZWQsIG1heF9idXNfc3BlZWQpKSkpIAotCQkJCQlyZXR1cm4gcmM7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfU1BFRURfNjZNSHo6Ci0JCQlpZiAoKGJ1c19zcGVlZCAhPSAweDEpICYmCi0JCQkgICAoKHJjID0gZml4X2J1c19zcGVlZChjdHJsLCBwX3Nsb3QsIHNsb3RzX25vdF9lbXB0eSwgYWRhcHRlcl9zcGVlZCwgYnVzX3NwZWVkLCBtYXhfYnVzX3NwZWVkKSkpKSAKLQkJCQlyZXR1cm4gcmM7Ci0JCQlicmVhazsJCi0JCWNhc2UgUENJX1NQRUVEXzMzTUh6OgotCQkJaWYgKGJ1c19zcGVlZCA+IDB4MCkgewotCQkJCWlmIChzbG90c19ub3RfZW1wdHkgPT0gMCkgewotCQkJCQlpZiAoKHJjID0gY2hhbmdlX2J1c19zcGVlZChjdHJsLCBwX3Nsb3QsIGFkYXB0ZXJfc3BlZWQpKSkKLQkJCQkJCXJldHVybiByYzsKLQkJCQl9IGVsc2UgewotCQkJCQllcnIoIiVzOiBzcGVlZCBvZiBidXMgJXggYW5kIGFkYXB0ZXIgJXggbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXywgYnVzX3NwZWVkLCBhZGFwdGVyX3NwZWVkKTsKLQkJCQkJcmV0dXJuIFdST05HX0JVU19GUkVRVUVOQ1k7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIoIiVzOiBzcGVlZCBvZiBidXMgJXggYW5kIGFkYXB0ZXIgJXggbWlzbWF0Y2hcbiIsIF9fRlVOQ1RJT05fXywgYnVzX3NwZWVkLCBhZGFwdGVyX3NwZWVkKTsKLQkJCXJldHVybiBXUk9OR19CVVNfRlJFUVVFTkNZOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogSWYgYWRwYXRlcl9zcGVlZCA9PSBidXNfc3BlZWQsIG5vdGhpbmcgdG8gZG8gaGVyZSAqLwotCQlkYmcoIiVzOiBJbiBQSSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHBpKTsKLQkJaWYgKChhZGFwdGVyX3NwZWVkICE9IGJ1c19zcGVlZCkgJiYKLQkJICAgKChyYyA9IGZpeF9idXNfc3BlZWQoY3RybCwgcF9zbG90LCBzbG90c19ub3RfZW1wdHksIGFkYXB0ZXJfc3BlZWQsIGJ1c19zcGVlZCwgbWF4X2J1c19zcGVlZCkpKSkKLQkJCQlyZXR1cm4gcmM7Ci0JfQotCi0JZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKIAkvKiB0dXJuIG9uIGJvYXJkLCBibGluayBncmVlbiBMRUQsIHR1cm4gb2ZmIEFtYmVyIExFRCAqLwogCWlmICgocmMgPSBwX3Nsb3QtPmhwY19vcHMtPnNsb3RfZW5hYmxlKHBfc2xvdCkpKSB7CiAJCWVycigiJXM6IElzc3VlIG9mIFNsb3QgRW5hYmxlIGNvbW1hbmQgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKIAkJcmV0dXJuIHJjOwogCX0KIAotCWlmICgocmMgPSBwX3Nsb3QtPmhwY19vcHMtPmNoZWNrX2NtZF9zdGF0dXMoY3RybCkpKSB7Ci0JCWVycigiJXM6IEZhaWxlZCB0byBlbmFibGUgc2xvdCwgZXJyb3IgY29kZSglZClcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLQkJcmV0dXJuIHJjOyAgCi0JfQotCi0JdXAoJmN0cmwtPmNyaXRfc2VjdCk7Ci0KIAkvKiBXYWl0IGZvciB+MSBzZWNvbmQgKi8KLQl3YWl0X2Zvcl9jdHJsX2lycSAoY3RybCk7CisJbXNsZWVwKDEwMDApOwogCiAJZGJnKCIlczogc2xvdCBzdGF0dXMgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPnN0YXR1cyk7CiAJLyogQ2hlY2sgZm9yIGEgcG93ZXIgZmF1bHQgKi8KQEAgLTUyMCw0MCArMzM4LDE4IEBACiAJcF9zbG90LT5pc19hX2JvYXJkID0gMHgwMTsKIAlwX3Nsb3QtPnB3cl9zYXZlID0gMTsKIAotCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KLQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwotCiAJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfb24ocF9zbG90KTsKIAotCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JdXAoJmN0cmwtPmNyaXRfc2VjdCk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX2V4aXQ6Ci0JLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwotCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7Ci0KIAkvKiB0dXJuIG9mZiBzbG90LCB0dXJuIG9uIEFtYmVyIExFRCwgdHVybiBvZmYgR3JlZW4gTEVEICovCiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPnNsb3RfZGlzYWJsZShwX3Nsb3QpOwogCWlmIChyYykgewogCQllcnIoIiVzOiBJc3N1ZSBvZiBTbG90IERpc2FibGUgY29tbWFuZCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JCXVwKCZjdHJsLT5jcml0X3NlY3QpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmNoZWNrX2NtZF9zdGF0dXMoY3RybCk7Ci0JaWYgKHJjKSB7Ci0JCWVycigiJXM6IEZhaWxlZCB0byBkaXNhYmxlIHNsb3QsIGVycm9yIGNvZGUoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCXVwKCZjdHJsLT5jcml0X3NlY3QpOwotCiAJcmV0dXJuKHJjKTsKIH0KIApAQCAtNTgwLDM3ICszNzYsMTkgQEAKIAlpZiAocF9zbG90LT5pc19hX2JvYXJkKQogCQlwX3Nsb3QtPnN0YXR1cyA9IDB4MDE7CiAKLQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0JZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKLQogCS8qIHR1cm4gb2ZmIHNsb3QsIHR1cm4gb24gQW1iZXIgTEVELCB0dXJuIG9mZiBHcmVlbiBMRUQgKi8KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+c2xvdF9kaXNhYmxlKHBfc2xvdCk7CiAJaWYgKHJjKSB7CiAJCWVycigiJXM6IElzc3VlIG9mIFNsb3QgRGlzYWJsZSBjb21tYW5kIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KLQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7CiAJCXJldHVybiByYzsKIAl9Ci0KLQlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Y2hlY2tfY21kX3N0YXR1cyhjdHJsKTsKLQlpZiAocmMpIHsKLQkJZXJyKCIlczogRmFpbGVkIHRvIGRpc2FibGUgc2xvdCwgZXJyb3IgY29kZSglZClcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLQkJcmV0dXJuIHJjOyAgCi0JfQogCQogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5zZXRfYXR0ZW50aW9uX3N0YXR1cyhwX3Nsb3QsIDApOwogCWlmIChyYykgewogCQllcnIoIiVzOiBJc3N1ZSBvZiBTZXQgQXR0ZW50aW9uIGNvbW1hbmQgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKIAkJcmV0dXJuIHJjOwogCX0KIAotCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JdXAoJmN0cmwtPmNyaXRfc2VjdCk7Ci0KIAlwX3Nsb3QtPnB3cl9zYXZlID0gMDsKIAlwX3Nsb3QtPmlzX2FfYm9hcmQgPSAwOwogCkBAIC02MTgsMTMgKzM5NiwxMCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHB1c2hidXR0b25faGVscGVyX3RocmVhZCAodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXB1c2hidXR0b25fcGVuZGluZyA9IGRhdGE7Ci0KLQl1cCgmZXZlbnRfc2VtYXBob3JlKTsKLX0KLQorc3RydWN0IHB1c2hidXR0b25fd29ya19pbmZvIHsKKwlzdHJ1Y3Qgc2xvdCAqcF9zbG90OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKIAogLyoqCiAgKiBzaHBjaHBfcHVzaGJ1dHRvbl90aHJlYWQKQEAgLTYzMyw5NiArNDA4LDYzIEBACiAgKiBIYW5kbGVzIGFsbCBwZW5kaW5nIGV2ZW50cyBhbmQgZXhpdHMuCiAgKgogICovCi1zdGF0aWMgdm9pZCBzaHBjaHBfcHVzaGJ1dHRvbl90aHJlYWQgKHVuc2lnbmVkIGxvbmcgc2xvdCkKK3N0YXRpYyB2b2lkIHNocGNocF9wdXNoYnV0dG9uX3RocmVhZCh2b2lkICpkYXRhKQogewotCXN0cnVjdCBzbG90ICpwX3Nsb3QgPSAoc3RydWN0IHNsb3QgKikgc2xvdDsKLQl1OCBnZXRzdGF0dXM7Ci0JCi0JcHVzaGJ1dHRvbl9wZW5kaW5nID0gMDsKKwlzdHJ1Y3QgcHVzaGJ1dHRvbl93b3JrX2luZm8gKmluZm8gPSBkYXRhOworCXN0cnVjdCBzbG90ICpwX3Nsb3QgPSBpbmZvLT5wX3Nsb3Q7CiAKLQlpZiAoIXBfc2xvdCkgewotCQlkYmcoIiVzOiBFcnJvciEgc2xvdCBOVUxMXG4iLCBfX0ZVTkNUSU9OX18pOworCW11dGV4X2xvY2soJnBfc2xvdC0+bG9jayk7CisJc3dpdGNoIChwX3Nsb3QtPnN0YXRlKSB7CisJY2FzZSBQT1dFUk9GRl9TVEFURToKKwkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmxvY2spOworCQlzaHBjaHBfZGlzYWJsZV9zbG90KHBfc2xvdCk7CisJCW11dGV4X2xvY2soJnBfc2xvdC0+bG9jayk7CisJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CisJCWJyZWFrOworCWNhc2UgUE9XRVJPTl9TVEFURToKKwkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmxvY2spOworCQlpZiAoc2hwY2hwX2VuYWJsZV9zbG90KHBfc2xvdCkpCisJCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9vZmYocF9zbG90KTsKKwkJbXV0ZXhfbG9jaygmcF9zbG90LT5sb2NrKTsKKwkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmcF9zbG90LT5sb2NrKTsKKworCWtmcmVlKGluZm8pOworfQorCit2b2lkIHF1ZXVlX3B1c2hidXR0b25fd29yayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBzbG90ICpwX3Nsb3QgPSBkYXRhOworCXN0cnVjdCBwdXNoYnV0dG9uX3dvcmtfaW5mbyAqaW5mbzsKKworCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykgeworCQllcnIoIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm47CiAJfQorCWluZm8tPnBfc2xvdCA9IHBfc2xvdDsKKwlJTklUX1dPUksoJmluZm8tPndvcmssIHNocGNocF9wdXNoYnV0dG9uX3RocmVhZCwgaW5mbyk7CiAKLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKLQlpZiAoZ2V0c3RhdHVzKSB7CisJbXV0ZXhfbG9jaygmcF9zbG90LT5sb2NrKTsKKwlzd2l0Y2ggKHBfc2xvdC0+c3RhdGUpIHsKKwljYXNlIEJMSU5LSU5HT0ZGX1NUQVRFOgogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPRkZfU1RBVEU7Ci0KLQkJc2hwY2hwX2Rpc2FibGVfc2xvdChwX3Nsb3QpOwotCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOwotCX0gZWxzZSB7CisJCWJyZWFrOworCWNhc2UgQkxJTktJTkdPTl9TVEFURToKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST05fU1RBVEU7Ci0KLQkJaWYgKHNocGNocF9lbmFibGVfc2xvdChwX3Nsb3QpKSB7Ci0JCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0JCQlkb3duKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7Ci0KLQkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOwotCi0JCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCQkJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKLQkJfQotCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIG91dDsKIAl9Ci0KLQlyZXR1cm47CisJcXVldWVfd29yayhzaHBjaHBfd3EsICZpbmZvLT53b3JrKTsKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmxvY2spOwogfQogCi0KLS8qIHRoaXMgaXMgdGhlIG1haW4gd29ya2VyIHRocmVhZCAqLwotc3RhdGljIGludCBldmVudF90aHJlYWQodm9pZCogZGF0YSkKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybDsKLQlsb2NrX2tlcm5lbCgpOwotCWRhZW1vbml6ZSgic2hwY2hwZF9ldmVudCIpOwotCXVubG9ja19rZXJuZWwoKTsKLQotCXdoaWxlICgxKSB7Ci0JCWRiZygiISEhIWV2ZW50X3RocmVhZCBzbGVlcGluZ1xuIik7Ci0JCWRvd25faW50ZXJydXB0aWJsZSAoJmV2ZW50X3NlbWFwaG9yZSk7Ci0JCWRiZygiZXZlbnRfdGhyZWFkIHdva2VuIGZpbmlzaGVkID0gJWRcbiIsIGV2ZW50X2ZpbmlzaGVkKTsKLQkJaWYgKGV2ZW50X2ZpbmlzaGVkIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJYnJlYWs7Ci0JCS8qIERvIHN0dWZmIGhlcmUgKi8KLQkJaWYgKHB1c2hidXR0b25fcGVuZGluZykKLQkJCXNocGNocF9wdXNoYnV0dG9uX3RocmVhZChwdXNoYnV0dG9uX3BlbmRpbmcpOwotCQllbHNlCi0JCQlmb3IgKGN0cmwgPSBzaHBjaHBfY3RybF9saXN0OyBjdHJsOyBjdHJsPWN0cmwtPm5leHQpCi0JCQkJaW50ZXJydXB0X2V2ZW50X2hhbmRsZXIoY3RybCk7Ci0JfQotCWRiZygiZXZlbnRfdGhyZWFkIHNpZ25hbHMgZXhpdFxuIik7Ci0JdXAoJmV2ZW50X2V4aXQpOwotCXJldHVybiAwOwotfQotCi1pbnQgc2hwY2hwX2V2ZW50X3N0YXJ0X3RocmVhZCAodm9pZCkKLXsKLQlpbnQgcGlkOwotCi0JLyogaW5pdGlhbGl6ZSBvdXIgc2VtYXBob3JlcyAqLwotCWluaXRfTVVURVhfTE9DS0VEKCZldmVudF9leGl0KTsKLQlldmVudF9maW5pc2hlZD0wOwotCi0JaW5pdF9NVVRFWF9MT0NLRUQoJmV2ZW50X3NlbWFwaG9yZSk7Ci0JcGlkID0ga2VybmVsX3RocmVhZChldmVudF90aHJlYWQsIE5VTEwsIDApOwotCi0JaWYgKHBpZCA8IDApIHsKLQkJZXJyICgiQ2FuJ3Qgc3RhcnQgdXAgb3VyIGV2ZW50IHRocmVhZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotdm9pZCBzaHBjaHBfZXZlbnRfc3RvcF90aHJlYWQgKHZvaWQpCi17Ci0JZXZlbnRfZmluaXNoZWQgPSAxOwotCXVwKCZldmVudF9zZW1hcGhvcmUpOwotCWRvd24oJmV2ZW50X2V4aXQpOwotfQotCi0KIHN0YXRpYyBpbnQgdXBkYXRlX3Nsb3RfaW5mbyAoc3RydWN0IHNsb3QgKnNsb3QpCiB7CiAJc3RydWN0IGhvdHBsdWdfc2xvdF9pbmZvICppbmZvOwpAQCAtNzQyLDE0OSArNDg0LDExMCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVycnVwdF9ldmVudF9oYW5kbGVyKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQorLyoKKyAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBzbG90LT5sb2NrIGhlbGQKKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX2J1dHRvbl9wcmVzc19ldmVudChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewotCWludCBsb29wID0gMDsKLQlpbnQgY2hhbmdlID0gMTsKLQl1OCBocF9zbG90OwogCXU4IGdldHN0YXR1czsKLQlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwogCi0Jd2hpbGUgKGNoYW5nZSkgewotCQljaGFuZ2UgPSAwOworCXN3aXRjaCAocF9zbG90LT5zdGF0ZSkgeworCWNhc2UgU1RBVElDX1NUQVRFOgorCQlwX3Nsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKKwkJaWYgKGdldHN0YXR1cykgeworCQkJcF9zbG90LT5zdGF0ZSA9IEJMSU5LSU5HT0ZGX1NUQVRFOworCQkJaW5mbyhtc2dfYnV0dG9uX29mZiwgcF9zbG90LT5udW1iZXIpOworCQl9IGVsc2UgeworCQkJcF9zbG90LT5zdGF0ZSA9IEJMSU5LSU5HT05fU1RBVEU7CisJCQlpbmZvKG1zZ19idXR0b25fb24sIHBfc2xvdC0+bnVtYmVyKTsKKwkJfQorCQkvKiBibGluayBncmVlbiBMRUQgYW5kIHR1cm4gb2ZmIGFtYmVyICovCisJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX2JsaW5rKHBfc2xvdCk7CisJCXBfc2xvdC0+aHBjX29wcy0+c2V0X2F0dGVudGlvbl9zdGF0dXMocF9zbG90LCAwKTsKIAotCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTA7IGxvb3ArKykgewotCQkJaWYgKGN0cmwtPmV2ZW50X3F1ZXVlW2xvb3BdLmV2ZW50X3R5cGUgIT0gMCkgewotCQkJCWRiZygiJXM6bG9vcCAleCBldmVudF90eXBlICV4XG4iLCBfX0ZVTkNUSU9OX18sIGxvb3AsIAotCQkJCQljdHJsLT5ldmVudF9xdWV1ZVtsb29wXS5ldmVudF90eXBlKTsKLQkJCQlocF9zbG90ID0gY3RybC0+ZXZlbnRfcXVldWVbbG9vcF0uaHBfc2xvdDsKLQotCQkJCXBfc2xvdCA9IHNocGNocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7Ci0KLQkJCQlpZiAoY3RybC0+ZXZlbnRfcXVldWVbbG9vcF0uZXZlbnRfdHlwZSA9PSBJTlRfQlVUVE9OX0NBTkNFTCkgewotCQkJCQlkYmcoIiVzOiBidXR0b24gY2FuY2VsXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlkZWxfdGltZXIoJnBfc2xvdC0+dGFza19ldmVudCk7Ci0KLQkJCQkJc3dpdGNoIChwX3Nsb3QtPnN0YXRlKSB7Ci0JCQkJCWNhc2UgQkxJTktJTkdPRkZfU1RBVEU6Ci0JCQkJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0JCQkJCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwotCi0JCQkJCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9vbihwX3Nsb3QpOwotCi0JCQkJCQlwX3Nsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBfc2xvdCwgMCk7Ci0KLQkJCQkJCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JCQkJCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIEJMSU5LSU5HT05fU1RBVEU6Ci0JCQkJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0JCQkJCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwotCi0JCQkJCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9vZmYocF9zbG90KTsKLQotCQkJCQkJcF9zbG90LT5ocGNfb3BzLT5zZXRfYXR0ZW50aW9uX3N0YXR1cyhwX3Nsb3QsIDApOwotCi0JCQkJCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCQkJCQkJdXAoJmN0cmwtPmNyaXRfc2VjdCk7Ci0KLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJCQkJd2FybigiTm90IGEgdmFsaWQgc3RhdGVcbiIpOwotCQkJCQkJcmV0dXJuOwotCQkJCQl9Ci0JCQkJCWluZm8obXNnX2J1dHRvbl9jYW5jZWwsIHBfc2xvdC0+bnVtYmVyKTsKLQkJCQkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKLQkJCQl9IGVsc2UgaWYgKGN0cmwtPmV2ZW50X3F1ZXVlW2xvb3BdLmV2ZW50X3R5cGUgPT0gSU5UX0JVVFRPTl9QUkVTUykgewotCQkJCQkvKiBCdXR0b24gUHJlc3NlZCAoTm8gYWN0aW9uIG9uIDFzdCBwcmVzcy4uLikgKi8KLQkJCQkJZGJnKCIlczogQnV0dG9uIHByZXNzZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQkJCQkJcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JCQkJCWlmIChnZXRzdGF0dXMpIHsKLQkJCQkJCS8qIHNsb3QgaXMgb24gKi8KLQkJCQkJCWRiZygiJXM6IHNsb3QgaXMgb25cbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCQlwX3Nsb3QtPnN0YXRlID0gQkxJTktJTkdPRkZfU1RBVEU7Ci0JCQkJCQlpbmZvKG1zZ19idXR0b25fb2ZmLCBwX3Nsb3QtPm51bWJlcik7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKiBzbG90IGlzIG9mZiAqLwotCQkJCQkJZGJnKCIlczogc2xvdCBpcyBvZmZcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCQlwX3Nsb3QtPnN0YXRlID0gQkxJTktJTkdPTl9TVEFURTsKLQkJCQkJCWluZm8obXNnX2J1dHRvbl9vbiwgcF9zbG90LT5udW1iZXIpOwotCQkJCQl9Ci0KLQkJCQkJLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwotCQkJCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwotCi0JCQkJCS8qIGJsaW5rIGdyZWVuIExFRCBhbmQgdHVybiBvZmYgYW1iZXIgKi8KLQkJCQkJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfYmxpbmsocF9zbG90KTsKLQkJCQkJCi0JCQkJCXBfc2xvdC0+aHBjX29wcy0+c2V0X2F0dGVudGlvbl9zdGF0dXMocF9zbG90LCAwKTsKLQotCQkJCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotCQkJCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLQotCQkJCQlpbml0X3RpbWVyKCZwX3Nsb3QtPnRhc2tfZXZlbnQpOwotCQkJCQlwX3Nsb3QtPnRhc2tfZXZlbnQuZXhwaXJlcyA9IGppZmZpZXMgKyA1ICogSFo7ICAgLyogNSBzZWNvbmQgZGVsYXkgKi8KLQkJCQkJcF9zbG90LT50YXNrX2V2ZW50LmZ1bmN0aW9uID0gKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKSBwdXNoYnV0dG9uX2hlbHBlcl90aHJlYWQ7Ci0JCQkJCXBfc2xvdC0+dGFza19ldmVudC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBfc2xvdDsKLQotCQkJCQlkYmcoIiVzOiBhZGRfdGltZXIgcF9zbG90ID0gJXBcbiIsIF9fRlVOQ1RJT05fXywodm9pZCAqKSBwX3Nsb3QpOwotCQkJCQlhZGRfdGltZXIoJnBfc2xvdC0+dGFza19ldmVudCk7Ci0JCQkJfSBlbHNlIGlmIChjdHJsLT5ldmVudF9xdWV1ZVtsb29wXS5ldmVudF90eXBlID09IElOVF9QT1dFUl9GQVVMVCkgewotCQkJCQkvKioqKioqKioqKipQT1dFUiBGQVVMVCoqKioqKioqKioqKioqKioqKioqLwotCQkJCQlkYmcoIiVzOiBwb3dlciBmYXVsdFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQkJLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwotCQkJCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwotCi0JCQkJCXBfc2xvdC0+aHBjX29wcy0+c2V0X2F0dGVudGlvbl9zdGF0dXMocF9zbG90LCAxKTsKLQkJCQkJCi0JCQkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOwotCi0JCQkJCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0JCQkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIHJlZnJlc2ggbm90aWZpY2F0aW9uICovCi0JCQkJCWlmIChwX3Nsb3QpCi0JCQkJCQl1cGRhdGVfc2xvdF9pbmZvKHBfc2xvdCk7Ci0JCQkJfQotCi0JCQkJY3RybC0+ZXZlbnRfcXVldWVbbG9vcF0uZXZlbnRfdHlwZSA9IDA7Ci0KLQkJCQljaGFuZ2UgPSAxOwotCQkJfQotCQl9CQkvKiBFbmQgb2YgRk9SIGxvb3AgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwX3Nsb3QtPndvcmssIDUqSFopOworCQlicmVhazsKKwljYXNlIEJMSU5LSU5HT0ZGX1NUQVRFOgorCWNhc2UgQkxJTktJTkdPTl9TVEFURToKKwkJLyoKKwkJICogQ2FuY2VsIGlmIHdlIGFyZSBzdGlsbCBibGlua2luZzsgdGhpcyBtZWFucyB0aGF0IHdlCisJCSAqIHByZXNzIHRoZSBhdHRlbnRpb24gYWdhaW4gYmVmb3JlIHRoZSA1IHNlYy4gbGltaXQKKwkJICogZXhwaXJlcyB0byBjYW5jZWwgaG90LWFkZCBvciBob3QtcmVtb3ZlCisJCSAqLworCQlpbmZvKCJCdXR0b24gY2FuY2VsIG9uIFNsb3QoJXMpXG4iLCBwX3Nsb3QtPm5hbWUpOworCQlkYmcoIiVzOiBidXR0b24gY2FuY2VsXG4iLCBfX0ZVTkNUSU9OX18pOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZwX3Nsb3QtPndvcmspOworCQlpZiAocF9zbG90LT5zdGF0ZSA9PSBCTElOS0lOR09GRl9TVEFURSkKKwkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29uKHBfc2xvdCk7CisJCWVsc2UKKwkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOworCQlwX3Nsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBfc2xvdCwgMCk7CisJCWluZm8obXNnX2J1dHRvbl9jYW5jZWwsIHBfc2xvdC0+bnVtYmVyKTsKKwkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUk9GRl9TVEFURToKKwljYXNlIFBPV0VST05fU1RBVEU6CisJCS8qCisJCSAqIElnbm9yZSBpZiB0aGUgc2xvdCBpcyBvbiBwb3dlci1vbiBvciBwb3dlci1vZmYgc3RhdGU7CisJCSAqIHRoaXMgbWVhbnMgdGhhdCB0aGUgcHJldmlvdXMgYXR0ZW50aW9uIGJ1dHRvbiBhY3Rpb24KKwkJICogdG8gaG90LWFkZCBvciBob3QtcmVtb3ZlIGlzIHVuZGVyZ29pbmcKKwkJICovCisJCWluZm8oIkJ1dHRvbiBpZ25vcmUgb24gU2xvdCglcylcbiIsIHBfc2xvdC0+bmFtZSk7CisJCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2FybigiTm90IGEgdmFsaWQgc3RhdGVcbiIpOworCQlicmVhazsKIAl9Cit9CiAKLQlyZXR1cm47CitzdGF0aWMgdm9pZCBpbnRlcnJ1cHRfZXZlbnRfaGFuZGxlcih2b2lkICpkYXRhKQoreworCXN0cnVjdCBldmVudF9pbmZvICppbmZvID0gZGF0YTsKKwlzdHJ1Y3Qgc2xvdCAqcF9zbG90ID0gaW5mby0+cF9zbG90OworCisJbXV0ZXhfbG9jaygmcF9zbG90LT5sb2NrKTsKKwlzd2l0Y2ggKGluZm8tPmV2ZW50X3R5cGUpIHsKKwljYXNlIElOVF9CVVRUT05fUFJFU1M6CisJCWhhbmRsZV9idXR0b25fcHJlc3NfZXZlbnQocF9zbG90KTsKKwkJYnJlYWs7CisJY2FzZSBJTlRfUE9XRVJfRkFVTFQ6CisJCWRiZygiJXM6IHBvd2VyIGZhdWx0XG4iLCBfX0ZVTkNUSU9OX18pOworCQlwX3Nsb3QtPmhwY19vcHMtPnNldF9hdHRlbnRpb25fc3RhdHVzKHBfc2xvdCwgMSk7CisJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29mZihwX3Nsb3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1cGRhdGVfc2xvdF9pbmZvKHBfc2xvdCk7CisJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJnBfc2xvdC0+bG9jayk7CisKKwlrZnJlZShpbmZvKTsKIH0KIAogCi1pbnQgc2hwY2hwX2VuYWJsZV9zbG90IChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQorc3RhdGljIGludCBzaHBjaHBfZW5hYmxlX3Nsb3QgKHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7CiAJdTggZ2V0c3RhdHVzID0gMDsKLQlpbnQgcmM7CisJaW50IHJjLCByZXR2YWwgPSAtRU5PREVWOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIChsYXRjaCBjbG9zZWQsIGNhcmQgcHJlc2VudCwgcG93ZXIgb2ZmKSAqLwotCWRvd24oJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF9sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChyYyB8fCAhZ2V0c3RhdHVzKSB7CiAJCWluZm8oIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXgpXG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+bnVtYmVyKTsKLQkJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0OwogCX0KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChyYyB8fCBnZXRzdGF0dXMpIHsKIAkJaW5mbygiJXM6IGxhdGNoIG9wZW4gb24gc2xvdCgleClcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5udW1iZXIpOwotCQl1cCgmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKHJjIHx8IGdldHN0YXR1cykgewogCQlpbmZvKCIlczogYWxyZWFkeSBlbmFibGVkIG9uIHNsb3QoJXgpXG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+bnVtYmVyKTsKLQkJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0OwogCX0KLQl1cCgmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCiAJcF9zbG90LT5pc19hX2JvYXJkID0gMTsKIApAQCAtODk5LDU2ICs2MDIsMTE5IEBACiAJICAgICAmJiBwX3Nsb3QtPmN0cmwtPm51bV9zbG90cyA9PSAxKSB7CiAJCS8qIGhhbmRsZSBhbWQgcG9nbyBlcnJhdGE7IHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBlbmFibGUgICovCiAJCWFtZF9wb2dvX2VycmF0YV9zYXZlX21pc2NfcmVnKHBfc2xvdCk7Ci0JCXJjID0gYm9hcmRfYWRkZWQocF9zbG90KTsKKwkJcmV0dmFsID0gYm9hcmRfYWRkZWQocF9zbG90KTsKIAkJLyogaGFuZGxlIGFtZCBwb2dvIGVycmF0YTsgdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgZW5hYmxlICAqLwogCQlhbWRfcG9nb19lcnJhdGFfcmVzdG9yZV9taXNjX3JlZyhwX3Nsb3QpOwogCX0gZWxzZQotCQlyYyA9IGJvYXJkX2FkZGVkKHBfc2xvdCk7CisJCXJldHZhbCA9IGJvYXJkX2FkZGVkKHBfc2xvdCk7CiAKLQlpZiAocmMpIHsKKwlpZiAocmV0dmFsKSB7CiAJCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwKIAkJCQkmKHBfc2xvdC0+cHJlc2VuY2Vfc2F2ZSkpOwogCQlwX3Nsb3QtPmhwY19vcHMtPmdldF9sYXRjaF9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAl9CiAKIAl1cGRhdGVfc2xvdF9pbmZvKHBfc2xvdCk7Ci0JcmV0dXJuIHJjOworIG91dDoKKwltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKLWludCBzaHBjaHBfZGlzYWJsZV9zbG90IChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQorc3RhdGljIGludCBzaHBjaHBfZGlzYWJsZV9zbG90IChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCXU4IGdldHN0YXR1cyA9IDA7Ci0JaW50IHJldCA9IDA7CisJaW50IHJjLCByZXR2YWwgPSAtRU5PREVWOwogCiAJaWYgKCFwX3Nsb3QtPmN0cmwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIChsYXRjaCBjbG9zZWQsIGNhcmQgcHJlc2VudCwgcG93ZXIgb24pICovCi0JZG93bigmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOworCW11dGV4X2xvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAotCXJldCA9IHBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JaWYgKHJldCB8fCAhZ2V0c3RhdHVzKSB7CisJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOworCWlmIChyYyB8fCAhZ2V0c3RhdHVzKSB7CiAJCWluZm8oIiVzOiBubyBhZGFwdGVyIG9uIHNsb3QoJXgpXG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+bnVtYmVyKTsKLQkJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0OwogCX0KLQlyZXQgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9sYXRjaF9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKLQlpZiAocmV0IHx8IGdldHN0YXR1cykgeworCXJjID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CisJaWYgKHJjIHx8IGdldHN0YXR1cykgewogCQlpbmZvKCIlczogbGF0Y2ggb3BlbiBvbiBzbG90KCV4KVxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPm51bWJlcik7Ci0JCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIG91dDsKIAl9Ci0JcmV0ID0gcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JaWYgKHJldCB8fCAhZ2V0c3RhdHVzKSB7CisJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9wb3dlcl9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKKwlpZiAocmMgfHwgIWdldHN0YXR1cykgewogCQlpbmZvKCIlczogYWxyZWFkeSBkaXNhYmxlZCBzbG90KCV4KVxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPm51bWJlcik7Ci0JCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIG91dDsKIAl9Ci0JdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAotCXJldCA9IHJlbW92ZV9ib2FyZChwX3Nsb3QpOworCXJldHZhbCA9IHJlbW92ZV9ib2FyZChwX3Nsb3QpOwogCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKLQlyZXR1cm4gcmV0OworIG91dDoKKwltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCitpbnQgc2hwY2hwX3N5c2ZzX2VuYWJsZV9zbG90KHN0cnVjdCBzbG90ICpwX3Nsb3QpCit7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZwX3Nsb3QtPmxvY2spOworCXN3aXRjaCAocF9zbG90LT5zdGF0ZSkgeworCWNhc2UgQkxJTktJTkdPTl9TVEFURToKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcF9zbG90LT53b3JrKTsKKwljYXNlIFNUQVRJQ19TVEFURToKKwkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST05fU1RBVEU7CisJCW11dGV4X3VubG9jaygmcF9zbG90LT5sb2NrKTsKKwkJcmV0dmFsID0gc2hwY2hwX2VuYWJsZV9zbG90KHBfc2xvdCk7CisJCW11dGV4X2xvY2soJnBfc2xvdC0+bG9jayk7CisJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CisJCWJyZWFrOworCWNhc2UgUE9XRVJPTl9TVEFURToKKwkJaW5mbygiU2xvdCAlcyBpcyBhbHJlYWR5IGluIHBvd2VyaW5nIG9uIHN0YXRlXG4iLAorCQkgICAgIHBfc2xvdC0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgQkxJTktJTkdPRkZfU1RBVEU6CisJY2FzZSBQT1dFUk9GRl9TVEFURToKKwkJaW5mbygiQWxyZWFkeSBlbmFibGVkIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiTm90IGEgdmFsaWQgc3RhdGUgb24gc2xvdCAlc1xuIiwgcF9zbG90LT5uYW1lKTsKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmcF9zbG90LT5sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBzaHBjaHBfc3lzZnNfZGlzYWJsZV9zbG90KHN0cnVjdCBzbG90ICpwX3Nsb3QpCit7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZwX3Nsb3QtPmxvY2spOworCXN3aXRjaCAocF9zbG90LT5zdGF0ZSkgeworCWNhc2UgQkxJTktJTkdPRkZfU1RBVEU6CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnBfc2xvdC0+d29yayk7CisJY2FzZSBTVEFUSUNfU1RBVEU6CisJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9GRl9TVEFURTsKKwkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmxvY2spOworCQlyZXR2YWwgPSBzaHBjaHBfZGlzYWJsZV9zbG90KHBfc2xvdCk7CisJCW11dGV4X2xvY2soJnBfc2xvdC0+bG9jayk7CisJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CisJCWJyZWFrOworCWNhc2UgUE9XRVJPRkZfU1RBVEU6CisJCWluZm8oIlNsb3QgJXMgaXMgYWxyZWFkeSBpbiBwb3dlcmluZyBvZmYgc3RhdGVcbiIsCisJCSAgICAgcF9zbG90LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBCTElOS0lOR09OX1NUQVRFOgorCWNhc2UgUE9XRVJPTl9TVEFURToKKwkJaW5mbygiQWxyZWFkeSBkaXNhYmxlZCBvbiBzbG90ICVzXG4iLCBwX3Nsb3QtPm5hbWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIk5vdCBhIHZhbGlkIHN0YXRlIG9uIHNsb3QgJXNcbiIsIHBfc2xvdC0+bmFtZSk7CisJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJnBfc2xvdC0+bG9jayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwppbmRleCBiNDIyNmZmLi42NjEyM2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9ocGMuYwpAQCAtODIsMzEgKzgyLDYgQEAKICNkZWZpbmUgU0xPVF8xMDBNSFpfUENJWF81MzMJMHgwZjAwMDAwMAogI2RlZmluZSBTTE9UXzEzM01IWl9QQ0lYXzUzMwkweGYwMDAwMDAwCiAKLQotLyogU2Vjb25kYXJ5IEJ1cyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCi0vKiBGb3IgUEkgPSAxLCBCaXRzIDAgdG8gMiBoYXZlIGJlZW4gZW5jb2RlZCBhcyBmb2xsb3dzIHRvIHNob3cgY3VycmVudCBidXMgc3BlZWQvbW9kZSAqLwotI2RlZmluZSBQQ0lfMzNNSFoJCTB4MAotI2RlZmluZSBQQ0lfNjZNSFoJCTB4MQotI2RlZmluZSBQQ0lYXzY2TUhaCQkweDIKLSNkZWZpbmUgUENJWF8xMDBNSFoJCTB4MwotI2RlZmluZSBQQ0lYXzEzM01IWgkJMHg0Ci0KLS8qIEZvciBQSSA9IDIsIEJpdHMgMCB0byAzIGhhdmUgYmVlbiBlbmNvZGVkIGFzIGZvbGxvd3MgdG8gc2hvdyBjdXJyZW50IGJ1cyBzcGVlZC9tb2RlICovCi0jZGVmaW5lIFBDSV8zM01IWgkJMHgwCi0jZGVmaW5lIFBDSV82Nk1IWgkJMHgxCi0jZGVmaW5lIFBDSVhfNjZNSFoJCTB4MgotI2RlZmluZSBQQ0lYXzEwME1IWgkJMHgzCi0jZGVmaW5lIFBDSVhfMTMzTUhaCQkweDQKLSNkZWZpbmUgUENJWF82Nk1IWl9FQ0MJCTB4NQotI2RlZmluZSBQQ0lYXzEwME1IWl9FQ0MJCTB4NgotI2RlZmluZSBQQ0lYXzEzM01IWl9FQ0MJCTB4NwotI2RlZmluZSBQQ0lYXzY2TUhaXzI2NgkJMHg5Ci0jZGVmaW5lIFBDSVhfMTAwTUhaXzI2NgkJMHhhCi0jZGVmaW5lIFBDSVhfMTMzTUhaXzI2NgkJMHhiCi0jZGVmaW5lIFBDSVhfNjZNSFpfNTMzCQkweDExCi0jZGVmaW5lIFBDSVhfMTAwTUhaXzUzMwkJMHgxMgotI2RlZmluZSBQQ0lYXzEzM01IWl81MzMJCTB4MTMKLQogLyogU2xvdCBDb25maWd1cmF0aW9uICovCiAjZGVmaW5lIFNMT1RfTlVNCQkweDAwMDAwMDFGCiAjZGVmaW5lCUZJUlNUX0RFVl9OVU0JCTB4MDAwMDFGMDAKQEAgLTIzMSw2ICsyMDYsNyBAQAogc3RhdGljIGlycXJldHVybl90IHNocGNfaXNyKGludCBJUlEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBzdGF0aWMgdm9pZCBzdGFydF9pbnRfcG9sbF90aW1lcihzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcGhwX2N0bHIsIGludCBzZWNvbmRzKTsKK3N0YXRpYyBpbnQgaHBjX2NoZWNrX2NtZF9zdGF0dXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwogCiAvKiBUaGlzIGlzIHRoZSBpbnRlcnJ1cHQgcG9sbGluZyB0aW1lb3V0IGZ1bmN0aW9uLiAqLwogc3RhdGljIHZvaWQgaW50X3BvbGxfdGltZW91dCh1bnNpZ25lZCBsb25nIGxwaHBfY3RscikKQEAgLTMwMywxMCArMjc5LDEzIEBACiAJaW50IGk7CiAKIAlEQkdfRU5URVJfUk9VVElORSAKLQkKKworCW11dGV4X2xvY2soJnNsb3QtPmN0cmwtPmNtZF9sb2NrKTsKKwogCWlmICghcGhwX2N0bHIpIHsKIAkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLTE7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CkBAIC0zMjMsNyArMzAyLDggQEAKIAlpZiAoY21kX3N0YXR1cyAmIDB4MSkgeyAKIAkJLyogQWZ0ZXIgMSBzZWMgYW5kIGFuZCB0aGUgY29udHJvbGxlciBpcyBzdGlsbCBidXN5ICovCiAJCWVycigiJXMgOiBDb250cm9sbGVyIGlzIHN0aWxsIGJ1c3kgYWZ0ZXIgMSBzZWMuXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLTE7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CiAJfQogCiAJKyt0X3Nsb3Q7CkBAIC0zNDAsNiArMzIwLDE3IEBACiAJICogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9uLgogCSAqLwogCXJldHZhbCA9IHNocGNfd2FpdF9jbWQoc2xvdC0+Y3RybCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwljbWRfc3RhdHVzID0gaHBjX2NoZWNrX2NtZF9zdGF0dXMoc2xvdC0+Y3RybCk7CisJaWYgKGNtZF9zdGF0dXMpIHsKKwkJZXJyKCIlczogRmFpbGVkIHRvIGlzc3VlZCBjb21tYW5kIDB4JXggKGVycm9yIGNvZGUgPSAlZClcbiIsCisJCSAgICBfX0ZVTkNUSU9OX18sIGNtZCwgY21kX3N0YXR1cyk7CisJCXJldHZhbCA9IC1FSU87CisJfQorIG91dDoKKwltdXRleF91bmxvY2soJnNsb3QtPmN0cmwtPmNtZF9sb2NrKTsKIAogCURCR19MRUFWRV9ST1VUSU5FIAogCXJldHVybiByZXR2YWw7CkBAIC01MzIsODEgKzUyMyw0MSBAQAogCiBzdGF0aWMgaW50IGhwY19nZXRfYWRhcHRlcl9zcGVlZChzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKIHsKLQlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcGhwX2N0bHIgPSBzbG90LT5jdHJsLT5ocGNfY3Rscl9oYW5kbGU7Ci0JdTMyIHNsb3RfcmVnOwotCXUxNiBzbG90X3N0YXR1cywgc2VjX2J1c19zdGF0dXM7Ci0JdTggbTY2X2NhcCwgcGNpeF9jYXAsIHBpOwogCWludCByZXR2YWwgPSAwOworCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciA9IHNsb3QtPmN0cmwtPmhwY19jdGxyX2hhbmRsZTsKKwl1MzIgc2xvdF9yZWcgPSByZWFkbChwaHBfY3Rsci0+Y3JlZyArIFNMT1QxICsgNCAqIHNsb3QtPmhwX3Nsb3QpOworCXU4IHBjaXhfY2FwID0gKHNsb3RfcmVnID4+IDEyKSAmIDc7CisJdTggbTY2X2NhcCAgPSAoc2xvdF9yZWcgPj4gOSkgJiAxOwogCiAJREJHX0VOVEVSX1JPVVRJTkUgCiAKLQlpZiAoIXNsb3QtPmN0cmwtPmhwY19jdGxyX2hhbmRsZSkgewotCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtMTsKLQl9CisJZGJnKCIlczogc2xvdF9yZWcgPSAleCwgcGNpeF9jYXAgPSAleCwgbTY2X2NhcCA9ICV4XG4iLAorCSAgICBfX0ZVTkNUSU9OX18sIHNsb3RfcmVnLCBwY2l4X2NhcCwgbTY2X2NhcCk7CiAKLQlpZiAoc2xvdC0+aHBfc2xvdCA+PSBwaHBfY3Rsci0+bnVtX3Nsb3RzKSB7Ci0JCWVycigiJXM6IEludmFsaWQgSFBDIHNsb3QgbnVtYmVyIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIC0xOwotCX0KLQkKLQlwaSA9IHJlYWRiKHBocF9jdGxyLT5jcmVnICsgUFJPR19JTlRFUkZBQ0UpOwotCXNsb3RfcmVnID0gcmVhZGwocGhwX2N0bHItPmNyZWcgKyBTTE9UMSArIDQqKHNsb3QtPmhwX3Nsb3QpKTsKLQlkYmcoIiVzOiBwaSA9ICVkLCBzbG90X3JlZyA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHBpLCBzbG90X3JlZyk7Ci0Jc2xvdF9zdGF0dXMgPSAodTE2KSBzbG90X3JlZzsKLQlkYmcoIiVzOiBzbG90X3N0YXR1cyA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHNsb3Rfc3RhdHVzKTsKLQlzZWNfYnVzX3N0YXR1cyA9IHJlYWR3KHBocF9jdGxyLT5jcmVnICsgU0VDX0JVU19DT05GSUcpOwotCi0JcGNpeF9jYXAgPSAodTgpICgoc2xvdF9zdGF0dXMgJiAweDMwMDApID4+IDEyKTsKLQlkYmcoIiVzOiAgcGNpeF9jYXAgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwY2l4X2NhcCk7Ci0JbTY2X2NhcCA9ICh1OCkgKChzbG90X3N0YXR1cyAmIDB4MDIwMCkgPj4gOSk7Ci0JZGJnKCIlczogIG02Nl9jYXAgPSAleFxuIiwgX19GVU5DVElPTl9fLCBtNjZfY2FwKTsKLQotCi0JaWYgKHBpID09IDIpIHsKLQkJc3dpdGNoIChwY2l4X2NhcCkgewotCQljYXNlIDA6Ci0JCQkqdmFsdWUgPSBtNjZfY2FwID8gUENJX1NQRUVEXzY2TUh6IDogUENJX1NQRUVEXzMzTUh6OwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2OwkKLQkJCWJyZWFrOwotCQljYXNlIDU6Ci0JCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOwkKLQkJCWJyZWFrOwotCQljYXNlIDI6CS8qIFJlc2VydmVkICovCi0JCWRlZmF1bHQ6Ci0JCQkqdmFsdWUgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQkJCXJldHZhbCA9IC1FTk9ERVY7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAocGNpeF9jYXApIHsKLQkJY2FzZSAwOgotCQkJKnZhbHVlID0gbTY2X2NhcCA/IFBDSV9TUEVFRF82Nk1IeiA6IFBDSV9TUEVFRF8zM01IejsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CQotCQkJYnJlYWs7Ci0JCWNhc2UgMjoJLyogUmVzZXJ2ZWQgKi8KLQkJZGVmYXVsdDoKLQkJCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOwotCQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQl9CisJc3dpdGNoIChwY2l4X2NhcCkgeworCWNhc2UgMHgwOgorCQkqdmFsdWUgPSBtNjZfY2FwID8gUENJX1NQRUVEXzY2TUh6IDogUENJX1NQRUVEXzMzTUh6OworCQlicmVhazsKKwljYXNlIDB4MToKKwkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CisJCWJyZWFrOworCWNhc2UgMHg0OgorCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2OworCQlicmVhazsKKwljYXNlIDB4NToKKwkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMzsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJZGVmYXVsdDoKKwkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWJyZWFrOwogCX0KIAogCWRiZygiQWRhcHRlciBzcGVlZCA9ICVkXG4iLCAqdmFsdWUpOwotCQogCURCR19MRUFWRV9ST1VUSU5FIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC03OTcsNiArNzQ4LDcgQEAKIHsKIAlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcGhwX2N0bHIgPSBjdHJsLT5ocGNfY3Rscl9oYW5kbGU7CiAJc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnAsICpwX3ByZXY7CisJaW50IGk7CiAKIAlEQkdfRU5URVJfUk9VVElORSAKIApAQCAtODA1LDYgKzc1NywxNCBAQAogCQlyZXR1cm4gOwogCX0KIAorCS8qCisJICogTWFzayBhbGwgc2xvdCBldmVudCBpbnRlcnJ1cHRzCisJICovCisJZm9yIChpID0gMDsgaSA8IGN0cmwtPm51bV9zbG90czsgaSsrKQorCQl3cml0ZWwoMHhmZmZmM2ZmZiwgcGhwX2N0bHItPmNyZWcgKyBTTE9UMSArICg0ICogaSkpOworCisJY2xlYW51cF9zbG90cyhjdHJsKTsKKwogCWlmIChzaHBjaHBfcG9sbF9tb2RlKSB7CiAJICAgIGRlbF90aW1lcigmcGhwX2N0bHItPmludF9wb2xsX3RpbWVyKTsKIAl9IGVsc2UgewkKQEAgLTgxNCw2ICs3NzQsNyBAQAogCQkJcGNpX2Rpc2FibGVfbXNpKHBocF9jdGxyLT5wY2lfZGV2KTsKIAkJfQogCX0KKwogCWlmIChwaHBfY3Rsci0+cGNpX2RldikgewogCQlpb3VubWFwKHBocF9jdGxyLT5jcmVnKTsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGN0cmwtPm1taW9fYmFzZSwgY3RybC0+bW1pb19zaXplKTsKQEAgLTkzOSw5OCArOTAwLDY2IEBACiAKIHN0YXRpYyBpbnQgaHBjX3NldF9idXNfc3BlZWRfbW9kZShzdHJ1Y3Qgc2xvdCAqIHNsb3QsIGVudW0gcGNpX2J1c19zcGVlZCB2YWx1ZSkKIHsKLQl1OCBzbG90X2NtZDsKLQl1OCBwaTsKLQlpbnQgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsOwogCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciA9IHNsb3QtPmN0cmwtPmhwY19jdGxyX2hhbmRsZTsKKwl1OCBwaSwgY21kOwogCiAJREJHX0VOVEVSX1JPVVRJTkUgCi0JCi0JaWYgKCFzbG90LT5jdHJsLT5ocGNfY3Rscl9oYW5kbGUpIHsKLQkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLTE7Ci0JfQogCiAJcGkgPSByZWFkYihwaHBfY3Rsci0+Y3JlZyArIFBST0dfSU5URVJGQUNFKTsKLQkKLQlpZiAocGkgPT0gMSkgewotCQlzd2l0Y2ggKHZhbHVlKSB7Ci0JCWNhc2UgMDoKLQkJCXNsb3RfY21kID0gU0VUQV9QQ0lfMzNNSFo7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJc2xvdF9jbWQgPSBTRVRBX1BDSV82Nk1IWjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlzbG90X2NtZCA9IFNFVEFfUENJWF82Nk1IWjsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlzbG90X2NtZCA9IFNFVEFfUENJWF8xMDBNSFo7CQotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCXNsb3RfY21kID0gU0VUQV9QQ0lYXzEzM01IWjsJCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXNsb3RfY21kID0gUENJX1NQRUVEX1VOS05PV047Ci0JCQlyZXR2YWwgPSAtRU5PREVWOwotCQkJcmV0dXJuIHJldHZhbDsJCi0JCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKHZhbHVlKSB7Ci0JCWNhc2UgMDoKLQkJCXNsb3RfY21kID0gU0VUQl9QQ0lfMzNNSFo7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJc2xvdF9jbWQgPSBTRVRCX1BDSV82Nk1IWjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlzbG90X2NtZCA9IFNFVEJfUENJWF82Nk1IWl9QTTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlzbG90X2NtZCA9IFNFVEJfUENJWF8xMDBNSFpfUE07CQotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCXNsb3RfY21kID0gU0VUQl9QQ0lYXzEzM01IWl9QTTsJCi0JCQlicmVhazsKLQkJY2FzZSA1OgotCQkJc2xvdF9jbWQgPSBTRVRCX1BDSVhfNjZNSFpfRU07CQotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCXNsb3RfY21kID0gU0VUQl9QQ0lYXzEwME1IWl9FTTsJCi0JCQlicmVhazsKLQkJY2FzZSA3OgotCQkJc2xvdF9jbWQgPSBTRVRCX1BDSVhfMTMzTUhaX0VNOwkKLQkJCWJyZWFrOwotCQljYXNlIDg6Ci0JCQlzbG90X2NtZCA9IFNFVEJfUENJWF82Nk1IWl8yNjY7CQotCQkJYnJlYWs7Ci0JCWNhc2UgMHg5OgotCQkJc2xvdF9jbWQgPSBTRVRCX1BDSVhfMTAwTUhaXzI2NjsJCi0JCQlicmVhazsKLQkJY2FzZSAweGE6Ci0JCQlzbG90X2NtZCA9IFNFVEJfUENJWF8xMzNNSFpfMjY2OwkKLQkJCWJyZWFrOwotCQljYXNlIDB4YjoKLQkJCXNsb3RfY21kID0gU0VUQl9QQ0lYXzY2TUhaXzUzMzsJCi0JCQlicmVhazsKLQkJY2FzZSAweGM6Ci0JCQlzbG90X2NtZCA9IFNFVEJfUENJWF8xMDBNSFpfNTMzOwkKLQkJCWJyZWFrOwotCQljYXNlIDB4ZDoKLQkJCXNsb3RfY21kID0gU0VUQl9QQ0lYXzEzM01IWl81MzM7CQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzbG90X2NtZCA9IFBDSV9TUEVFRF9VTktOT1dOOwotCQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJCXJldHVybiByZXR2YWw7CQotCQl9CisJaWYgKChwaSA9PSAxKSAmJiAodmFsdWUgPiBQQ0lfU1BFRURfMTMzTUh6X1BDSVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAorCXN3aXRjaCAodmFsdWUpIHsKKwljYXNlIFBDSV9TUEVFRF8zM01IejoKKwkJY21kID0gU0VUQV9QQ0lfMzNNSFo7CisJCWJyZWFrOworCWNhc2UgUENJX1NQRUVEXzY2TUh6OgorCQljbWQgPSBTRVRBX1BDSV82Nk1IWjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1BFRURfNjZNSHpfUENJWDoKKwkJY21kID0gU0VUQV9QQ0lYXzY2TUhaOworCQlicmVhazsKKwljYXNlIFBDSV9TUEVFRF8xMDBNSHpfUENJWDoKKwkJY21kID0gU0VUQV9QQ0lYXzEwME1IWjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg6CisJCWNtZCA9IFNFVEFfUENJWF8xMzNNSFo7CisJCWJyZWFrOworCWNhc2UgUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDOgorCQljbWQgPSBTRVRCX1BDSVhfNjZNSFpfRU07CisJCWJyZWFrOworCWNhc2UgUENJX1NQRUVEXzEwME1Iel9QQ0lYX0VDQzoKKwkJY21kID0gU0VUQl9QQ0lYXzEwME1IWl9FTTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOgorCQljbWQgPSBTRVRCX1BDSVhfMTMzTUhaX0VNOworCQlicmVhazsKKwljYXNlIFBDSV9TUEVFRF82Nk1Iel9QQ0lYXzI2NjoKKwkJY21kID0gU0VUQl9QQ0lYXzY2TUhaXzI2NjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2OgorCQljbWQgPSBTRVRCX1BDSVhfMTAwTUhaXzI2NjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2OgorCQljbWQgPSBTRVRCX1BDSVhfMTMzTUhaXzI2NjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfU1BFRURfNjZNSHpfUENJWF81MzM6CisJCWNtZCA9IFNFVEJfUENJWF82Nk1IWl81MzM7CisJCWJyZWFrOworCWNhc2UgUENJX1NQRUVEXzEwME1Iel9QQ0lYXzUzMzoKKwkJY21kID0gU0VUQl9QQ0lYXzEwME1IWl81MzM7CisJCWJyZWFrOworCWNhc2UgUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMzoKKwkJY21kID0gU0VUQl9QQ0lYXzEzM01IWl81MzM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR2YWwgPSBzaHBjX3dyaXRlX2NtZChzbG90LCAwLCBzbG90X2NtZCk7Ci0JaWYgKHJldHZhbCkgeworCisJcmV0dmFsID0gc2hwY193cml0ZV9jbWQoc2xvdCwgMCwgY21kKTsKKwlpZiAocmV0dmFsKQogCQllcnIoIiVzOiBXcml0ZSBjb21tYW5kIGZhaWxlZCFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtMTsKLQl9CiAKIAlEQkdfTEVBVkVfUk9VVElORQogCXJldHVybiByZXR2YWw7CkBAIC0xMDkzLDE0ICsxMDIyLDggQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjdHJsLT5xdWV1ZSk7CiAJfQogCi0JaWYgKChpbnRyX2xvYyA9IChpbnRyX2xvYyA+PiAxKSkgPT0gMCkgewotCQkvKiBVbm1hc2sgR2xvYmFsIEludGVycnVwdCBNYXNrICovCi0JCXRlbXBfZHdvcmQgPSByZWFkbChwaHBfY3Rsci0+Y3JlZyArIFNFUlJfSU5UUl9FTkFCTEUpOwotCQl0ZW1wX2R3b3JkICY9IDB4ZmZmZmZmZmU7Ci0JCXdyaXRlbCh0ZW1wX2R3b3JkLCBwaHBfY3Rsci0+Y3JlZyArIFNFUlJfSU5UUl9FTkFCTEUpOwotCi0JCXJldHVybiBJUlFfTk9ORTsKLQl9CisJaWYgKChpbnRyX2xvYyA9IChpbnRyX2xvYyA+PiAxKSkgPT0gMCkKKwkJZ290byBvdXQ7CiAKIAlmb3IgKGhwX3Nsb3QgPSAwOyBocF9zbG90IDwgY3RybC0+bnVtX3Nsb3RzOyBocF9zbG90KyspIHsgCiAJLyogVG8gZmluZCBvdXQgd2hpY2ggc2xvdCBoYXMgaW50ZXJydXB0IHBlbmRpbmcgKi8KQEAgLTExMzAsNiArMTA1Myw3IEBACiAJCQlkYmcoIiVzOiBpbnRyX2xvYzIgPSAleFxuIixfX0ZVTkNUSU9OX18sIGludHJfbG9jMik7IAogCQl9CiAJfQorIG91dDoKIAlpZiAoIXNocGNocF9wb2xsX21vZGUpIHsKIAkJLyogVW5tYXNrIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayAqLwogCQl0ZW1wX2R3b3JkID0gcmVhZGwocGhwX2N0bHItPmNyZWcgKyBTRVJSX0lOVFJfRU5BQkxFKTsKQEAgLTExNDIsNjQgKzEwNjYsNDMgQEAKIAogc3RhdGljIGludCBocGNfZ2V0X21heF9idXNfc3BlZWQgKHN0cnVjdCBzbG90ICpzbG90LCBlbnVtIHBjaV9idXNfc3BlZWQgKnZhbHVlKQogeworCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciA9IHNsb3QtPmN0cmwtPmhwY19jdGxyX2hhbmRsZTsKIAllbnVtIHBjaV9idXNfc3BlZWQgYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0JaW50IHJldHZhbCA9IDA7Ci0JdTggcGk7Ci0JdTMyIHNsb3RfYXZhaWwxLCBzbG90X2F2YWlsMjsKKwl1OCBwaSA9IHJlYWRiKHBocF9jdGxyLT5jcmVnICsgUFJPR19JTlRFUkZBQ0UpOworCXUzMiBzbG90X2F2YWlsMSA9IHJlYWRsKHBocF9jdGxyLT5jcmVnICsgU0xPVF9BVkFJTDEpOworCXUzMiBzbG90X2F2YWlsMiA9IHJlYWRsKHBocF9jdGxyLT5jcmVnICsgU0xPVF9BVkFJTDIpOwogCiAJREJHX0VOVEVSX1JPVVRJTkUgCiAKLQlpZiAoIXNsb3QtPmN0cmwtPmhwY19jdGxyX2hhbmRsZSkgewotCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoc2xvdC0+aHBfc2xvdCA+PSBwaHBfY3Rsci0+bnVtX3Nsb3RzKSB7Ci0JCWVycigiJXM6IEludmFsaWQgSFBDIHNsb3QgbnVtYmVyIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXBpID0gcmVhZGIocGhwX2N0bHItPmNyZWcgKyBQUk9HX0lOVEVSRkFDRSk7Ci0Jc2xvdF9hdmFpbDEgPSByZWFkbChwaHBfY3Rsci0+Y3JlZyArIFNMT1RfQVZBSUwxKTsKLQlzbG90X2F2YWlsMiA9IHJlYWRsKHBocF9jdGxyLT5jcmVnICsgU0xPVF9BVkFJTDIpOwotCiAJaWYgKHBpID09IDIpIHsKIAkJaWYgKHNsb3RfYXZhaWwyICYgU0xPVF8xMzNNSFpfUENJWF81MzMpCi0JCQlidXNfc3BlZWQgPSBQQ0lYXzEzM01IWl81MzM7CisJCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfNTMzOwogCQllbHNlIGlmIChzbG90X2F2YWlsMiAmIFNMT1RfMTAwTUhaX1BDSVhfNTMzKQotCQkJYnVzX3NwZWVkID0gUENJWF8xMDBNSFpfNTMzOworCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzUzMzsKIAkJZWxzZSBpZiAoc2xvdF9hdmFpbDIgJiBTTE9UXzY2TUhaX1BDSVhfNTMzKQotCQkJYnVzX3NwZWVkID0gUENJWF82Nk1IWl81MzM7CisJCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF81MzM7CiAJCWVsc2UgaWYgKHNsb3RfYXZhaWwyICYgU0xPVF8xMzNNSFpfUENJWF8yNjYpCi0JCQlidXNfc3BlZWQgPSBQQ0lYXzEzM01IWl8yNjY7CisJCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfMjY2OwogCQllbHNlIGlmIChzbG90X2F2YWlsMiAmIFNMT1RfMTAwTUhaX1BDSVhfMjY2KQotCQkJYnVzX3NwZWVkID0gUENJWF8xMDBNSFpfMjY2OworCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2NjsKIAkJZWxzZSBpZiAoc2xvdF9hdmFpbDIgJiBTTE9UXzY2TUhaX1BDSVhfMjY2KQotCQkJYnVzX3NwZWVkID0gUENJWF82Nk1IWl8yNjY7Ci0JCWVsc2UgaWYgKHNsb3RfYXZhaWwxICYgU0xPVF8xMzNNSFpfUENJWCkKLQkJCWJ1c19zcGVlZCA9IFBDSVhfMTMzTUhaOwotCQllbHNlIGlmIChzbG90X2F2YWlsMSAmIFNMT1RfMTAwTUhaX1BDSVgpCi0JCQlidXNfc3BlZWQgPSBQQ0lYXzEwME1IWjsKLQkJZWxzZSBpZiAoc2xvdF9hdmFpbDEgJiBTTE9UXzY2TUhaX1BDSVgpCi0JCQlidXNfc3BlZWQgPSBQQ0lYXzY2TUhaOwotCQllbHNlIGlmIChzbG90X2F2YWlsMiAmIFNMT1RfNjZNSFopCi0JCQlidXNfc3BlZWQgPSBQQ0lfNjZNSFo7Ci0JCWVsc2UgaWYgKHNsb3RfYXZhaWwxICYgU0xPVF8zM01IWikKLQkJCWJ1c19zcGVlZCA9IFBDSV8zM01IWjsKLQkJZWxzZSBidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQl9IGVsc2UgeworCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2OworCX0KKworCWlmIChidXNfc3BlZWQgPT0gUENJX1NQRUVEX1VOS05PV04pIHsKIAkJaWYgKHNsb3RfYXZhaWwxICYgU0xPVF8xMzNNSFpfUENJWCkKLQkJCWJ1c19zcGVlZCA9IFBDSVhfMTMzTUhaOworCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYOwogCQllbHNlIGlmIChzbG90X2F2YWlsMSAmIFNMT1RfMTAwTUhaX1BDSVgpCi0JCQlidXNfc3BlZWQgPSBQQ0lYXzEwME1IWjsKKwkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKIAkJZWxzZSBpZiAoc2xvdF9hdmFpbDEgJiBTTE9UXzY2TUhaX1BDSVgpCi0JCQlidXNfc3BlZWQgPSBQQ0lYXzY2TUhaOworCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7CiAJCWVsc2UgaWYgKHNsb3RfYXZhaWwyICYgU0xPVF82Nk1IWikKLQkJCWJ1c19zcGVlZCA9IFBDSV82Nk1IWjsKKwkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKIAkJZWxzZSBpZiAoc2xvdF9hdmFpbDEgJiBTTE9UXzMzTUhaKQotCQkJYnVzX3NwZWVkID0gUENJXzMzTUhaOwotCQllbHNlIGJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOworCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OworCQllbHNlCisJCQlyZXR2YWwgPSAtRU5PREVWOwogCX0KIAogCSp2YWx1ZSA9IGJ1c19zcGVlZDsKQEAgLTEyMTAsMTExICsxMTEzLDY5IEBACiAKIHN0YXRpYyBpbnQgaHBjX2dldF9jdXJfYnVzX3NwZWVkIChzdHJ1Y3Qgc2xvdCAqc2xvdCwgZW51bSBwY2lfYnVzX3NwZWVkICp2YWx1ZSkKIHsKKwlpbnQgcmV0dmFsID0gMDsKIAlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcGhwX2N0bHIgPSBzbG90LT5jdHJsLT5ocGNfY3Rscl9oYW5kbGU7CiAJZW51bSBwY2lfYnVzX3NwZWVkIGJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwotCXUxNiBzZWNfYnVzX3N0YXR1czsKLQlpbnQgcmV0dmFsID0gMDsKLQl1OCBwaTsKKwl1MTYgc2VjX2J1c19yZWcgPSByZWFkdyhwaHBfY3Rsci0+Y3JlZyArIFNFQ19CVVNfQ09ORklHKTsKKwl1OCBwaSA9IHJlYWRiKHBocF9jdGxyLT5jcmVnICsgUFJPR19JTlRFUkZBQ0UpOworCXU4IHNwZWVkX21vZGUgPSAocGkgPT0gMikgPyAoc2VjX2J1c19yZWcgJiAweEYpIDogKHNlY19idXNfcmVnICYgMHg3KTsKIAogCURCR19FTlRFUl9ST1VUSU5FIAogCi0JaWYgKCFzbG90LT5jdHJsLT5ocGNfY3Rscl9oYW5kbGUpIHsKLQkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLTE7CisJaWYgKChwaSA9PSAxKSAmJiAoc3BlZWRfbW9kZSA+IDQpKSB7CisJCSp2YWx1ZSA9IFBDSV9TUEVFRF9VTktOT1dOOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoc2xvdC0+aHBfc2xvdCA+PSBwaHBfY3Rsci0+bnVtX3Nsb3RzKSB7Ci0JCWVycigiJXM6IEludmFsaWQgSFBDIHNsb3QgbnVtYmVyIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIC0xOworCXN3aXRjaCAoc3BlZWRfbW9kZSkgeworCWNhc2UgMHgwOgorCQkqdmFsdWUgPSBQQ0lfU1BFRURfMzNNSHo7CisJCWJyZWFrOworCWNhc2UgMHgxOgorCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHo7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCSp2YWx1ZSA9IFBDSV9TUEVFRF82Nk1Iel9QQ0lYX0VDQzsKKwkJYnJlYWs7CisJY2FzZSAweDY6CisJCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0M7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVhfRUNDOworCQlicmVhazsKKwljYXNlIDB4ODoKKwkJKnZhbHVlID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2OworCQlicmVhazsKKwljYXNlIDB4OToKKwkJKnZhbHVlID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYXzI2NjsKKwkJYnJlYWs7CisJY2FzZSAweGE6CisJCSp2YWx1ZSA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjY7CisJCWJyZWFrOworCWNhc2UgMHhiOgorCQkqdmFsdWUgPSBQQ0lfU1BFRURfNjZNSHpfUENJWF81MzM7CisJCWJyZWFrOworCWNhc2UgMHhjOgorCQkqdmFsdWUgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfNTMzOworCQlicmVhazsKKwljYXNlIDB4ZDoKKwkJKnZhbHVlID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKnZhbHVlID0gUENJX1NQRUVEX1VOS05PV047CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWJyZWFrOwogCX0KIAotCXBpID0gcmVhZGIocGhwX2N0bHItPmNyZWcgKyBQUk9HX0lOVEVSRkFDRSk7Ci0Jc2VjX2J1c19zdGF0dXMgPSByZWFkdyhwaHBfY3Rsci0+Y3JlZyArIFNFQ19CVVNfQ09ORklHKTsKLQotCWlmIChwaSA9PSAyKSB7Ci0JCXN3aXRjaCAoc2VjX2J1c19zdGF0dXMgJiAweDAwMGYpIHsKLQkJY2FzZSAwOgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzMzTUh6OwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF82Nk1IejsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHpfUENJWDsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVg7CQotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWDsJCi0JCQlicmVhazsKLQkJY2FzZSA1OgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfRUNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF9FQ0M7Ci0JCQlicmVhazsKLQkJY2FzZSA3OgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYX0VDQzsJCi0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfMjY2OwkKLQkJCWJyZWFrOwotCQljYXNlIDk6Ci0JCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTAwTUh6X1BDSVhfMjY2OwkKLQkJCWJyZWFrOwotCQljYXNlIDB4YToKLQkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMzNNSHpfUENJWF8yNjY7CQotCQkJYnJlYWs7Ci0JCWNhc2UgMHhiOgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVhfNTMzOwkKLQkJCWJyZWFrOwotCQljYXNlIDB4YzoKLQkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8xMDBNSHpfUENJWF81MzM7CQotCQkJYnJlYWs7Ci0JCWNhc2UgMHhkOgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEzM01Iel9QQ0lYXzUzMzsJCi0JCQlicmVhazsKLQkJY2FzZSAweGU6Ci0JCWNhc2UgMHhmOgotCQlkZWZhdWx0OgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEluIHRoZSBjYXNlIHdoZXJlIHBpIGlzIHVuZGVmaW5lZCwgZGVmYXVsdCBpdCB0byAxICovIAotCQlzd2l0Y2ggKHNlY19idXNfc3RhdHVzICYgMHgwMDA3KSB7Ci0JCWNhc2UgMDoKLQkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF8zM01IejsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfNjZNSHo7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzY2TUh6X1BDSVg7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEXzEwME1Iel9QQ0lYOwkKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfMTMzTUh6X1BDSVg7CQotCQkJYnJlYWs7Ci0JCWNhc2UgNToKLQkJCWJ1c19zcGVlZCA9IFBDSV9TUEVFRF9VTktOT1dOOwkJLyoJUmVzZXJ2ZWQgKi8KLQkJCWJyZWFrOwotCQljYXNlIDY6Ci0JCQlidXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsJCS8qCVJlc2VydmVkICovCi0JCQlicmVhazsKLQkJY2FzZSA3OgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047CQkvKglSZXNlcnZlZCAqLwkKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCSp2YWx1ZSA9IGJ1c19zcGVlZDsKIAlkYmcoIkN1cnJlbnQgYnVzIHNwZWVkID0gJWRcbiIsIGJ1c19zcGVlZCk7CiAJREJHX0xFQVZFX1JPVVRJTkUgCiAJcmV0dXJuIHJldHZhbDsKQEAgLTEzNDMsNyArMTIwNCw2IEBACiAJLmdyZWVuX2xlZF9ibGluawkJPSBocGNfc2V0X2dyZWVuX2xlZF9ibGluaywKIAkKIAkucmVsZWFzZV9jdGxyCQkJPSBocGNfcmVsZWFzZV9jdGxyLAotCS5jaGVja19jbWRfc3RhdHVzCQk9IGhwY19jaGVja19jbWRfc3RhdHVzLAogfTsKIAogaW5saW5lIHN0YXRpYyBpbnQgc2hwY19pbmRpcmVjdF9jcmVnX3JlYWQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIGludCBpbmRleCwKQEAgLTEzNzUsMTUgKzEyMzUsMTMgQEAKIAljdHJsLT5wY2lfZGV2ID0gcGRldjsgIC8qIHBjaV9kZXYgb2YgdGhlIFAyUCBicmlkZ2UgKi8KIAogCXNwaW5fbG9ja19pbml0KCZsaXN0X2xvY2spOwotCXBocF9jdGxyID0gKHN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zKSwgR0ZQX0tFUk5FTCk7CisJcGhwX2N0bHIgPSBremFsbG9jKHNpemVvZigqcGhwX2N0bHIpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghcGhwX2N0bHIpIHsJLyogYWxsb2NhdGUgY29udHJvbGxlciBzdGF0ZSBkYXRhICovCiAJCWVycigiJXM6IEhQQyBjb250cm9sbGVyIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydDsKIAl9CiAKLQltZW1zZXQocGhwX2N0bHIsIDAsIHNpemVvZihzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcykpOwotCiAJcGhwX2N0bHItPnBjaV9kZXYgPSBwZGV2OwkvKiBzYXZlIHBjaV9kZXYgaW4gY29udGV4dCAqLwogCiAJaWYgKChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTUQpIHx8IChwZGV2LT5kZXZpY2UgPT0KQEAgLTE0NTQsNyArMTMxMiw5IEBACiAJfQogCWRiZygiJXM6IHBocF9jdGxyLT5jcmVnICVwXG4iLCBfX0ZVTkNUSU9OX18sIHBocF9jdGxyLT5jcmVnKTsKIAotCWluaXRfTVVURVgoJmN0cmwtPmNyaXRfc2VjdCk7CisJbXV0ZXhfaW5pdCgmY3RybC0+Y3JpdF9zZWN0KTsKKwltdXRleF9pbml0KCZjdHJsLT5jbWRfbG9jayk7CisKIAkvKiBTZXR1cCB3YWl0IHF1ZXVlICovCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3RybC0+cXVldWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3BjaS5jCmluZGV4IDE5ZTFhNWUuLjI1N2FkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3BjaS5jCkBAIC0zOCw3ICszOCw3IEBACiB7CiAJdTE2IHBjaV9jbWQsIHBjaV9iY3RsOwogCXN0cnVjdCBwY2lfZGV2ICpjZGV2OwotCXN0cnVjdCBob3RwbHVnX3BhcmFtcyBocHAgPSB7MHg4LCAweDQwLCAwLCAwfTsgLyogZGVmYXVsdHMgKi8KKwlzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgaHBwOwogCiAJLyogUHJvZ3JhbSBocHAgdmFsdWVzIGZvciB0aGlzIGRldmljZSAqLwogCWlmICghKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCB8fApAQCAtNDYsNyArNDYsMTMgQEAKIAkJCShkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfUENJKSkpCiAJCXJldHVybjsKIAotCWdldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShkZXYsICZocHApOworCS8qIHVzZSBkZWZhdWx0IHZhbHVlcyBpZiB3ZSBjYW4ndCBnZXQgdGhlbSBmcm9tIGZpcm13YXJlICovCisJaWYgKGdldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShkZXYsICZocHApKSB7CisJCWhwcC5jYWNoZV9saW5lX3NpemUgPSA4OworCQlocHAubGF0ZW5jeV90aW1lciA9IDB4NDA7CisJCWhwcC5lbmFibGVfc2VyciA9IDA7CisJCWhwcC5lbmFibGVfcGVyciA9IDA7CisJfQogCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgaHBwLmNhY2hlX2xpbmVfc2l6ZSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIGhwcC5sYXRlbmN5X3RpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwcm1fYWNwaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBybV9hY3BpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MTQ1ZTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBybV9hY3BpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotLyoKLSAqIFNIUENIUFJNIEFDUEk6IFBIUCBSZXNvdXJjZSBNYW5hZ2VyIGZvciBBQ1BJIHBsYXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YWNwaS9hY3BpLmg+Ci0jaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgotI2luY2x1ZGUgPGFjcGkvYWN0eXBlcy5oPgotI2luY2x1ZGUgInNocGNocC5oIgotCi0jZGVmaW5lCU1FVEhPRF9OQU1FX19TVU4JIl9TVU4iCi0jZGVmaW5lCU1FVEhPRF9OQU1FX19IUFAJIl9IUFAiCi0jZGVmaW5lCU1FVEhPRF9OQU1FX09TSFAJIk9TSFAiCi0KLXN0YXRpYyB1OCAqIGFjcGlfcGF0aF9uYW1lKCBhY3BpX2hhbmRsZQloYW5kbGUpCi17Ci0JYWNwaV9zdGF0dXMJCXN0YXR1czsKLQlzdGF0aWMgdTgJcGF0aF9uYW1lW0FDUElfUEFUSE5BTUVfTUFYXTsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIJCXJldF9idWYgPSB7IEFDUElfUEFUSE5BTUVfTUFYLCBwYXRoX25hbWUgfTsKLQotCW1lbXNldChwYXRoX25hbWUsIDAsIHNpemVvZiAocGF0aF9uYW1lKSk7Ci0Jc3RhdHVzID0gYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJnJldF9idWYpOwotCi0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm4gTlVMTDsKLQllbHNlCi0JCXJldHVybiBwYXRoX25hbWU7CQotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfcnVuX2hwcChhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQotewotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0JdTgJCQludWlbNF07Ci0Jc3RydWN0IGFjcGlfYnVmZmVyCXJldF9idWYgPSB7IDAsIE5VTEx9OwotCXVuaW9uIGFjcGlfb2JqZWN0CSpleHRfb2JqLCAqcGFja2FnZTsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCWludAkJCWksIGxlbiA9IDA7Ci0KLQkvKiBnZXQgX2hwcCAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfX0hQUCwgTlVMTCwgJnJldF9idWYpOwotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSBBRV9CVUZGRVJfT1ZFUkZMT1c6Ci0JCXJldF9idWYucG9pbnRlciA9IGttYWxsb2MgKHJldF9idWYubGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyZXRfYnVmLnBvaW50ZXIpIHsKLQkJCWVyciAoIiVzOiVzIGFsbG9jIGZvciBfSFBQIGZhaWxcbiIsIF9fRlVOQ1RJT05fXywKLQkJCQkJcGF0aF9uYW1lKTsKLQkJCXJldHVybiBBRV9OT19NRU1PUlk7Ci0JCX0KLQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBNRVRIT0RfTkFNRV9fSFBQLAotCQkJCU5VTEwsICZyZXRfYnVmKTsKLQkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlkYmcoIiVzOiVzIF9IUFAgZmFpbD0weCV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJCXBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQl9Ci0KLQlleHRfb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopIHJldF9idWYucG9pbnRlcjsKLQlpZiAoZXh0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgewotCQllcnIgKCIlczolcyBfSFBQIG9iaiBub3QgYSBwYWNrYWdlXG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJcGF0aF9uYW1lKTsKLQkJc3RhdHVzID0gQUVfRVJST1I7Ci0JCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwotCX0KLQotCWxlbiA9IGV4dF9vYmotPnBhY2thZ2UuY291bnQ7Ci0JcGFja2FnZSA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSByZXRfYnVmLnBvaW50ZXI7Ci0JZm9yICggaSA9IDA7IChpIDwgbGVuKSB8fCAoaSA8IDQpOyBpKyspIHsKLQkJZXh0X29iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSAmcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1tpXTsKLQkJc3dpdGNoIChleHRfb2JqLT50eXBlKSB7Ci0JCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6Ci0JCQludWlbaV0gPSAodTgpZXh0X29iai0+aW50ZWdlci52YWx1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyICgiJXM6JXMgX0hQUCBvYmogdHlwZSBpbmNvcnJlY3RcbiIsIF9fRlVOQ1RJT05fXywKLQkJCQkJcGF0aF9uYW1lKTsKLQkJCXN0YXR1cyA9IEFFX0VSUk9SOwotCQkJZ290byBmcmVlX2FuZF9yZXR1cm47Ci0JCX0KLQl9Ci0KLQlocHAtPmNhY2hlX2xpbmVfc2l6ZSA9IG51aVswXTsKLQlocHAtPmxhdGVuY3lfdGltZXIgPSBudWlbMV07Ci0JaHBwLT5lbmFibGVfc2VyciA9IG51aVsyXTsKLQlocHAtPmVuYWJsZV9wZXJyID0gbnVpWzNdOwotCi0JZGJnKCIgIF9IUFA6IGNhY2hlX2xpbmVfc2l6ZT0weCV4XG4iLCBocHAtPmNhY2hlX2xpbmVfc2l6ZSk7Ci0JZGJnKCIgIF9IUFA6IGxhdGVuY3kgdGltZXIgID0weCV4XG4iLCBocHAtPmxhdGVuY3lfdGltZXIpOwotCWRiZygiICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgaHBwLT5lbmFibGVfc2Vycik7Ci0JZGJnKCIgIF9IUFA6IGVuYWJsZSBQRVJSICAgID0weCV4XG4iLCBocHAtPmVuYWJsZV9wZXJyKTsKLQotZnJlZV9hbmRfcmV0dXJuOgotCWtmcmVlKHJldF9idWYucG9pbnRlcik7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9ydW5fb3NocChhY3BpX2hhbmRsZSBoYW5kbGUpCi17Ci0JYWNwaV9zdGF0dXMJCXN0YXR1czsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JLyogcnVuIE9TSFAgKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX09TSFAsIE5VTEwsIE5VTEwpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQllcnIoIiVzOiVzIE9TSFAgZmFpbHM9MHgleFxuIiwgX19GVU5DVElPTl9fLCBwYXRoX25hbWUsCi0JCQkJc3RhdHVzKTsKLQl9IGVsc2UgewotCQlkYmcoIiVzOiVzIE9TSFAgcGFzc2VzXG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfbmFtZSk7Ci0JfQotfQotCi1pbnQgc2hwY2hwcm1fZ2V0X3BoeXNpY2FsX3Nsb3RfbnVtYmVyKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1MzIgKnN1biwgdTggYnVzbnVtLCB1OCBkZXZudW0pCi17Ci0JaW50IG9mZnNldCA9IGRldm51bSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKLQotCWRiZygiJXM6IGN0cmwtPnNsb3RfbnVtX2luYyAlZCwgb2Zmc2V0ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGN0cmwtPnNsb3RfbnVtX2luYywgb2Zmc2V0KTsKLQkqc3VuID0gKHU4KSAoY3RybC0+Zmlyc3Rfc2xvdCArIGN0cmwtPnNsb3RfbnVtX2luYyAqb2Zmc2V0KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBnZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JLyoKLQkgKiBPU0hQIGlzIGFuIG9wdGlvbmFsIEFDUEkgZmlybXdhcmUgY29udHJvbCBtZXRob2QuIElmIHByZXNlbnQsCi0JICogd2UgbmVlZCB0byBydW4gaXQgdG8gaW5mb3JtIEJJT1MgdGhhdCB3ZSB3aWxsIGNvbnRyb2wgU0hQQwotCSAqIGhhcmR3YXJlIGZyb20gbm93IG9uLgotCSAqLwotCWFjcGlfaGFuZGxlIGhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmKGRldi0+ZGV2KSk7Ci0JaWYgKCFoYW5kbGUpCi0JCXJldHVybjsKLQlhY3BpX3J1bl9vc2hwKGhhbmRsZSk7Ci19Ci0KLXZvaWQgZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQotewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9GT1VORDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldjsKLQotCS8qCi0JICogX0hQUCBzZXR0aW5ncyBhcHBseSB0byBhbGwgY2hpbGQgYnVzZXMsIHVudGlsIGFub3RoZXIgX0hQUCBpcwotCSAqIGVuY291bnRlcmVkLiBJZiB3ZSBkb24ndCBmaW5kIGFuIF9IUFAgZm9yIHRoZSBpbnB1dCBwY2kgZGV2LAotCSAqIGxvb2sgZm9yIGl0IGluIHRoZSBwYXJlbnQgZGV2aWNlIHNjb3BlIHNpbmNlIHRoYXQgd291bGQgYXBwbHkgdG8KLQkgKiB0aGlzIHBjaSBkZXYuIElmIHdlIGRvbid0IGZpbmQgYW55IF9IUFAsIHVzZSBoYXJkY29kZWQgZGVmYXVsdHMKLQkgKi8KLQl3aGlsZSAocGRldiAmJiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpKSB7Ci0JCWFjcGlfaGFuZGxlIGhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmKHBkZXYtPmRldikpOwotCQlpZiAoIWhhbmRsZSkKLQkJCWJyZWFrOwotCQlzdGF0dXMgPSBhY3BpX3J1bl9ocHAoaGFuZGxlLCBocHApOwotCQlpZiAoIShwZGV2LT5idXMtPnBhcmVudCkpCi0JCQlicmVhazsKLQkJLyogQ2hlY2sgaWYgYSBwYXJlbnQgb2JqZWN0IHN1cHBvcnRzIF9IUFAgKi8KLQkJcGRldiA9IHBkZXYtPmJ1cy0+cGFyZW50LT5zZWxmOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBybV9sZWdhY3kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwcm1fbGVnYWN5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNmMxMjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBybV9sZWdhY3kuYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBTSFBDSFBSTSBMZWdhY3k6IFBIUCBSZXNvdXJjZSBNYW5hZ2VyIGZvciBOb24tQUNQSS9MZWdhY3kgcGxhdGZvcm0KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsMjAwMSBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwMSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGdyZWdAa3JvYWguY29tPiw8a3Jpc3Rlbi5jLmFjY2FyZGlAaW50ZWwuY29tPgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlICJzaHBjaHAuaCIKLQotaW50IHNocGNocHJtX2dldF9waHlzaWNhbF9zbG90X251bWJlcihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgdTMyICpzdW4sIHU4IGJ1c251bSwgdTggZGV2bnVtKQotewotCWludAlvZmZzZXQgPSBkZXZudW0gLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7Ci0KLQkqc3VuID0gKHU4KSAoY3RybC0+Zmlyc3Rfc2xvdCArIGN0cmwtPnNsb3RfbnVtX2luYyAqIG9mZnNldCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQotewotCXJldHVybjsKLX0KLQotdm9pZCBnZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcmV0dXJuOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocHJtX25vbmFjcGkuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwcm1fbm9uYWNwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmI0MDk5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwcm1fbm9uYWNwaS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIFNIUENIUFJNIE5PTkFDUEk6IFBIUCBSZXNvdXJjZSBNYW5hZ2VyIGZvciBOb24tQUNQSS9MZWdhY3kgcGxhdGZvcm0KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsMjAwMSBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwMSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGdyZWdAa3JvYWguY29tPiwgPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAic2hwY2hwLmgiCi0KLWludCBzaHBjaHBybV9nZXRfcGh5c2ljYWxfc2xvdF9udW1iZXIoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHUzMiAqc3VuLCB1OCBidXNudW0sIHU4IGRldm51bSkKLXsKLQlpbnQJb2Zmc2V0ID0gZGV2bnVtIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwotCi0JZGJnKCIlczogY3RybC0+c2xvdF9udW1faW5jICVkLCBvZmZzZXQgJWRcbiIsIF9fRlVOQ1RJT05fXywgY3RybC0+c2xvdF9udW1faW5jLCBvZmZzZXQpOwotCSpzdW4gPSAodTgpIChjdHJsLT5maXJzdF9zbG90ICsgY3RybC0+c2xvdF9udW1faW5jICogb2Zmc2V0KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBnZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJc3RydWN0IGhvdHBsdWdfcGFyYW1zICpocHApCi17Ci0JcmV0dXJuOwotfQotCi12b2lkIGdldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm47Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IDQ4NzIzZDYuLmE3N2U3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0xMDMsOSArMTAzLDkgQEAKIAlzd2l0Y2ggKGVudHJ5LT5tc2lfYXR0cmliLnR5cGUpIHsKIAljYXNlIFBDSV9DQVBfSURfTVNJOgogCXsKLQkJaW50IHBvczsKKwkJaW50IHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZW50cnktPmRldiwgUENJX0NBUF9JRF9NU0kpOwogCi0gICAJCWlmICghKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZW50cnktPmRldiwgUENJX0NBUF9JRF9NU0kpKSkKKwkJaWYgKCFwb3MpCiAJCQlyZXR1cm47CiAKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGVudHJ5LT5kZXYsIG1zaV9sb3dlcl9hZGRyZXNzX3JlZyhwb3MpLApAQCAtMzQ3LDkgKzM0Nyw5IEBACiAKIHN0YXRpYyBpbnQgZ2V0X25ld192ZWN0b3Iodm9pZCkKIHsKLQlpbnQgdmVjdG9yOworCWludCB2ZWN0b3IgPSBhc3NpZ25fbXNpX3ZlY3RvcigpOwogCi0JaWYgKCh2ZWN0b3IgPSBhc3NpZ25fbXNpX3ZlY3RvcigpKSA+IDApCisJaWYgKHZlY3RvciA+IDApCiAJCXNldF9pbnRyX2dhdGUodmVjdG9yLCBpbnRlcnJ1cHRbdmVjdG9yXSk7CiAKIAlyZXR1cm4gdmVjdG9yOwpAQCAtMzY5LDcgKzM2OSw4IEBACiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0JaWYgKChzdGF0dXMgPSBtc2lfY2FjaGVfaW5pdCgpKSA8IDApIHsKKwlzdGF0dXMgPSBtc2lfY2FjaGVfaW5pdCgpOworCWlmIChzdGF0dXMgPCAwKSB7CiAJCXBjaV9tc2lfZW5hYmxlID0gMDsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBNU0kgY2FjaGUgaW5pdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gc3RhdHVzOwpAQCAtNTIzLDEwICs1MjQsMTIgQEAKICAgIAlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0kpOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksICZjb250cm9sKTsKIAkvKiBNU0kgRW50cnkgSW5pdGlhbGl6YXRpb24gKi8KLQlpZiAoIShlbnRyeSA9IGFsbG9jX21zaV9lbnRyeSgpKSkKKwllbnRyeSA9IGFsbG9jX21zaV9lbnRyeSgpOworCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCh2ZWN0b3IgPSBnZXRfbXNpX3ZlY3RvcihkZXYpKSA8IDApIHsKKwl2ZWN0b3IgPSBnZXRfbXNpX3ZlY3RvcihkZXYpOworCWlmICh2ZWN0b3IgPCAwKSB7CiAJCWttZW1fY2FjaGVfZnJlZShtc2lfY2FjaGVwLCBlbnRyeSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNTk3LDcgKzYwMCw4IEBACiAJc3RydWN0IG1zZ19hZGRyZXNzIGFkZHJlc3M7CiAJc3RydWN0IG1zZ19kYXRhIGRhdGE7CiAJaW50IHZlY3RvciwgcG9zLCBpLCBqLCBucl9lbnRyaWVzLCB0ZW1wID0gMDsKLQl1MzIgcGh5c19hZGRyLCB0YWJsZV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CisJdTMyIHRhYmxlX29mZnNldDsKICAJdTE2IGNvbnRyb2w7CiAJdTggYmlyOwogCXZvaWQgX19pb21lbSAqYmFzZTsKQEAgLTYwNiwxMSArNjEwLDExIEBACiAJLyogUmVxdWVzdCAmIE1hcCBNU0ktWCB0YWJsZSByZWdpb24gKi8KICAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOwogCW5yX2VudHJpZXMgPSBtdWx0aV9tc2l4X2NhcGFibGUoY29udHJvbCk7Ci0gCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIG1zaXhfdGFibGVfb2Zmc2V0X3JlZyhwb3MpLAotIAkJJnRhYmxlX29mZnNldCk7CisKKyAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgbXNpeF90YWJsZV9vZmZzZXRfcmVnKHBvcyksICZ0YWJsZV9vZmZzZXQpOwogCWJpciA9ICh1OCkodGFibGVfb2Zmc2V0ICYgUENJX01TSVhfRkxBR1NfQklSTUFTSyk7Ci0JcGh5c19hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0IChkZXYsIGJpcik7Ci0JcGh5c19hZGRyICs9ICh1MzIpKHRhYmxlX29mZnNldCAmIH5QQ0lfTVNJWF9GTEFHU19CSVJNQVNLKTsKKwl0YWJsZV9vZmZzZXQgJj0gflBDSV9NU0lYX0ZMQUdTX0JJUk1BU0s7CisJcGh5c19hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0IChkZXYsIGJpcikgKyB0YWJsZV9vZmZzZXQ7CiAJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwaHlzX2FkZHIsIG5yX2VudHJpZXMgKiBQQ0lfTVNJWF9FTlRSWV9TSVpFKTsKIAlpZiAoYmFzZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTYyMCw3ICs2MjQsOCBAQAogCQllbnRyeSA9IGFsbG9jX21zaV9lbnRyeSgpOwogCQlpZiAoIWVudHJ5KQogCQkJYnJlYWs7Ci0JCWlmICgodmVjdG9yID0gZ2V0X21zaV92ZWN0b3IoZGV2KSkgPCAwKQorCQl2ZWN0b3IgPSBnZXRfbXNpX3ZlY3RvcihkZXYpOworCQlpZiAodmVjdG9yIDwgMCkKIAkJCWJyZWFrOwogCiAgCQlqID0gZW50cmllc1tpXS5lbnRyeTsKQEAgLTY5OSwxMiArNzA0LDE3IEBACiAJaWYgKGRldi0+bm9fbXNpKQogCQlyZXR1cm4gc3RhdHVzOwogCisJaWYgKGRldi0+YnVzLT5idXNfZmxhZ3MgJiBQQ0lfQlVTX0ZMQUdTX05PX01TSSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAl0ZW1wID0gZGV2LT5pcnE7CiAKLQlpZiAoKHN0YXR1cyA9IG1zaV9pbml0KCkpIDwgMCkKKwlzdGF0dXMgPSBtc2lfaW5pdCgpOworCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCi0gICAJaWYgKCEocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKSkpCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAoIXBvcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CkBAIC03MjgsOCArNzM4LDggQEAKIAkJZGV2LT5pcnEgPSB0ZW1wOwogCX0KIAkvKiBDaGVjayB3aGV0aGVyIGRyaXZlciBhbHJlYWR5IHJlcXVlc3RlZCBmb3IgTVNJLVggdmVjdG9ycyAqLwotICAgCWlmICgocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJWCkpID4gMCAmJgotCQkhbXNpX2xvb2t1cF92ZWN0b3IoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpKSB7CisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJaWYgKHBvcyA+IDAgJiYgIW1zaV9sb29rdXBfdmVjdG9yKGRldiwgUENJX0NBUF9JRF9NU0lYKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiAlczogQ2FuJ3QgZW5hYmxlIE1TSS4gICIKIAkJCSAgICAgICAiRGV2aWNlIGFscmVhZHkgaGFzIE1TSS1YIHZlY3RvcnMgYXNzaWduZWRcbiIsCiAJCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CkBAIC03NTUsNyArNzY1LDEzIEBACiAJdTE2IGNvbnRyb2w7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgCWlmICghZGV2IHx8ICEocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKSkpCisJaWYgKCFwY2lfbXNpX2VuYWJsZSkKKwkJcmV0dXJuOworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0kpOworCWlmICghcG9zKQogCQlyZXR1cm47CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CkBAIC04MjYsOCArODQyLDEwIEBACiAJCQkgKiBEZXRlY3QgbGFzdCBNU0ktWCB2ZWN0b3IgdG8gYmUgcmVsZWFzZWQuCiAJCQkgKiBSZWxlYXNlIHRoZSBNU0ktWCBtZW1vcnktbWFwcGVkIHRhYmxlLgogCQkJICovCisjaWYgMAogCQkJaW50IHBvcywgbnJfZW50cmllczsKLQkJCXUzMiBwaHlzX2FkZHIsIHRhYmxlX29mZnNldDsKKwkJCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOworCQkJdTMyIHRhYmxlX29mZnNldDsKIAkJCXUxNiBjb250cm9sOwogCQkJdTggYmlyOwogCkBAIC04MzgsOSArODU2LDEyIEBACiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBtc2l4X3RhYmxlX29mZnNldF9yZWcocG9zKSwKIAkJCQkmdGFibGVfb2Zmc2V0KTsKIAkJCWJpciA9ICh1OCkodGFibGVfb2Zmc2V0ICYgUENJX01TSVhfRkxBR1NfQklSTUFTSyk7Ci0JCQlwaHlzX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKGRldiwgYmlyKTsKLQkJCXBoeXNfYWRkciArPSAodTMyKSh0YWJsZV9vZmZzZXQgJgotCQkJCX5QQ0lfTVNJWF9GTEFHU19CSVJNQVNLKTsKKwkJCXRhYmxlX29mZnNldCAmPSB+UENJX01TSVhfRkxBR1NfQklSTUFTSzsKKwkJCXBoeXNfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJpcikgKyB0YWJsZV9vZmZzZXQ7CisvKgorICogRklYTUUhICBhbmQgd2hhdCBkaWQgeW91IHdhbnQgdG8gZG8gd2l0aCBwaHlzX2FkZHI/CisgKi8KKyNlbmRpZgogCQkJaW91bm1hcChiYXNlKTsKIAkJfQogCX0KQEAgLTkyNCwxMCArOTQ1LDEyIEBACiAJaWYgKCFwY2lfbXNpX2VuYWJsZSB8fCAhZGV2IHx8ICFlbnRyaWVzKQogIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKHN0YXR1cyA9IG1zaV9pbml0KCkpIDwgMCkKKwlzdGF0dXMgPSBtc2lfaW5pdCgpOworCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCi0gICAJaWYgKCEocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJWCkpKQorCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmICghcG9zKQogIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CkBAIC0xMDA2LDcgKzEwMjksMTMgQEAKIAlpbnQgcG9zLCB0ZW1wOwogCXUxNiBjb250cm9sOwogCi0gICAJaWYgKCFkZXYgfHwgIShwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0lYKSkpCisJaWYgKCFwY2lfbXNpX2VuYWJsZSkKKwkJcmV0dXJuOworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0lYKTsKKwlpZiAoIXBvcykKIAkJcmV0dXJuOwogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOwpAQCAtMTA2Niw4ICsxMDk1LDggQEAKICAJCXJldHVybjsKIAogCXRlbXAgPSBkZXYtPmlycTsJCS8qIFNhdmUgSU9BUElDIElSUSAqLwotICAgCWlmICgocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKSkgPiAwICYmCi0JCSFtc2lfbG9va3VwX3ZlY3RvcihkZXYsIFBDSV9DQVBfSURfTVNJKSkgeworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CisJaWYgKHBvcyA+IDAgJiYgIW1zaV9sb29rdXBfdmVjdG9yKGRldiwgUENJX0NBUF9JRF9NU0kpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZtc2lfbG9jaywgZmxhZ3MpOwogCQlzdGF0ZSA9IG1zaV9kZXNjW2Rldi0+aXJxXS0+bXNpX2F0dHJpYi5zdGF0ZTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNpX2xvY2ssIGZsYWdzKTsKQEAgLTEwODAsOCArMTEwOSw4IEBACiAJCQltc2lfZnJlZV92ZWN0b3IoZGV2LCBkZXYtPmlycSwgMCk7CiAJCWRldi0+aXJxID0gdGVtcDsJCS8qIFJlc3RvcmUgSU9BUElDIElSUSAqLwogCX0KLSAgIAlpZiAoKHBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpKSA+IDAgJiYKLQkJIW1zaV9sb29rdXBfdmVjdG9yKGRldiwgUENJX0NBUF9JRF9NU0lYKSkgeworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmIChwb3MgPiAwICYmICFtc2lfbG9va3VwX3ZlY3RvcihkZXYsIFBDSV9DQVBfSURfTVNJWCkpIHsKIAkJaW50IHZlY3RvciwgaGVhZCwgdGFpbCA9IDAsIHdhcm5pbmcgPSAwOwogCQl2b2lkIF9faW9tZW0gKmJhc2UgPSBOVUxMOwogCkBAIC0xMTAxLDcgKzExMzAsOSBAQAogCQltc2lfZnJlZV92ZWN0b3IoZGV2LCB2ZWN0b3IsIDApOwogCQlpZiAod2FybmluZykgewogCQkJLyogRm9yY2UgdG8gcmVsZWFzZSB0aGUgTVNJLVggbWVtb3J5LW1hcHBlZCB0YWJsZSAqLwotCQkJdTMyIHBoeXNfYWRkciwgdGFibGVfb2Zmc2V0OworI2lmIDAKKwkJCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOworCQkJdTMyIHRhYmxlX29mZnNldDsKIAkJCXUxNiBjb250cm9sOwogCQkJdTggYmlyOwogCkBAIC0xMTEwLDkgKzExNDEsMTIgQEAKIAkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIG1zaXhfdGFibGVfb2Zmc2V0X3JlZyhwb3MpLAogCQkJCSZ0YWJsZV9vZmZzZXQpOwogCQkJYmlyID0gKHU4KSh0YWJsZV9vZmZzZXQgJiBQQ0lfTVNJWF9GTEFHU19CSVJNQVNLKTsKLQkJCXBoeXNfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydCAoZGV2LCBiaXIpOwotCQkJcGh5c19hZGRyICs9ICh1MzIpKHRhYmxlX29mZnNldCAmCi0JCQkJflBDSV9NU0lYX0ZMQUdTX0JJUk1BU0spOworCQkJdGFibGVfb2Zmc2V0ICY9IH5QQ0lfTVNJWF9GTEFHU19CSVJNQVNLOworCQkJcGh5c19hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgYmlyKSArIHRhYmxlX29mZnNldDsKKy8qCisgKiBGSVhNRSEgYW5kIHdoYXQgZGlkIHlvdSB3YW50IHRvIGRvIHdpdGggcGh5c19hZGRyPworICovCisjZW5kaWYKIAkJCWlvdW5tYXAoYmFzZSk7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0k6ICVzOiBtc2lfcmVtb3ZlX3BjaV9pcnFfdmVjdG9ycygpICIKIAkJCSAgICAgICAiY2FsbGVkIHdpdGhvdXQgZnJlZV9pcnEoKSBvbiBhbGwgTVNJLVggdmVjdG9yc1xuIiwKQEAgLTExMjMsNiArMTE1NywxMSBAQAogCX0KIH0KIAordm9pZCBwY2lfbm9fbXNpKHZvaWQpCit7CisJcGNpX21zaV9lbmFibGUgPSAwOworfQorCiBFWFBPUlRfU1lNQk9MKHBjaV9lbmFibGVfbXNpKTsKIEVYUE9SVF9TWU1CT0wocGNpX2Rpc2FibGVfbXNpKTsKIEVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9tc2l4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCAwYWExNGM5Li5mMjJmNjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC01MywxMSArNTMsMTAgQEAKIAlpZiAoZmllbGRzIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkeW5pZCA9IGttYWxsb2Moc2l6ZW9mKCpkeW5pZCksIEdGUF9LRVJORUwpOworCWR5bmlkID0ga3phbGxvYyhzaXplb2YoKmR5bmlkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkeW5pZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoZHluaWQsIDAsIHNpemVvZigqZHluaWQpKTsKIAlJTklUX0xJU1RfSEVBRCgmZHluaWQtPm5vZGUpOwogCWR5bmlkLT5pZC52ZW5kb3IgPSB2ZW5kb3I7CiAJZHluaWQtPmlkLmRldmljZSA9IGRldmljZTsKQEAgLTM4MCwxNCArMzc5LDYgQEAKIAkvKiBpbml0aWFsaXplIGNvbW1vbiBkcml2ZXIgZmllbGRzICovCiAJZHJ2LT5kcml2ZXIubmFtZSA9IGRydi0+bmFtZTsKIAlkcnYtPmRyaXZlci5idXMgPSAmcGNpX2J1c190eXBlOwotCS8qIEZJWE1FLCBvbmNlIGFsbCBvZiB0aGUgZXhpc3RpbmcgUENJIGRyaXZlcnMgaGF2ZSBiZWVuIGZpeGVkIHRvIHNldAotCSAqIHRoZSBwY2kgc2h1dGRvd24gZnVuY3Rpb24sIHRoaXMgdGVzdCBjYW4gZ28gYXdheS4gKi8KLQlpZiAoIWRydi0+ZHJpdmVyLnNodXRkb3duKQotCQlkcnYtPmRyaXZlci5zaHV0ZG93biA9IHBjaV9kZXZpY2Vfc2h1dGRvd247Ci0JZWxzZQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBQQ0kgZHJpdmVyICVzIGhhcyBhIHN0cnVjdCAiCi0JCQkiZGV2aWNlX2RyaXZlciBzaHV0ZG93biBtZXRob2QsIHBsZWFzZSB1cGRhdGUhXG4iLAotCQkJZHJ2LT5uYW1lKTsKIAlkcnYtPmRyaXZlci5vd25lciA9IG93bmVyOwogCWRydi0+ZHJpdmVyLmtvYmoua3R5cGUgPSAmcGNpX2RyaXZlcl9rb2JqX3R5cGU7CiAKQEAgLTUxNCw2ICs1MDUsNyBAQAogCS5wcm9iZQkJPSBwY2lfZGV2aWNlX3Byb2JlLAogCS5yZW1vdmUJCT0gcGNpX2RldmljZV9yZW1vdmUsCiAJLnN1c3BlbmQJPSBwY2lfZGV2aWNlX3N1c3BlbmQsCisJLnNodXRkb3duCT0gcGNpX2RldmljZV9zaHV0ZG93biwKIAkucmVzdW1lCQk9IHBjaV9kZXZpY2VfcmVzdW1lLAogCS5kZXZfYXR0cnMJPSBwY2lfZGV2X2F0dHJzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggOTY1YTU5My4uNTZhYzJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTUwMSw5ICs1MDEsOCBAQAogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpKSB7CiAJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyb21fYXR0cjsKIAkJCi0JCXJvbV9hdHRyID0ga21hbGxvYyhzaXplb2YoKnJvbV9hdHRyKSwgR0ZQX0FUT01JQyk7CisJCXJvbV9hdHRyID0ga3phbGxvYyhzaXplb2YoKnJvbV9hdHRyKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChyb21fYXR0cikgewotCQkJbWVtc2V0KHJvbV9hdHRyLCAweDAwLCBzaXplb2YoKnJvbV9hdHRyKSk7CiAJCQlwZGV2LT5yb21fYXR0ciA9IHJvbV9hdHRyOwogCQkJcm9tX2F0dHItPnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpOwogCQkJcm9tX2F0dHItPmF0dHIubmFtZSA9ICJyb20iOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBkMmQxODc5Li5iZWExYWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4JLyogaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKi8KICNpbmNsdWRlICJwY2kuaCIKIAotI2lmIDAKIAogLyoqCiAgKiBwY2lfYnVzX21heF9idXNuciAtIHJldHVybnMgbWF4aW11bSBQQ0kgYnVzIG51bWJlciBvZiBnaXZlbiBidXMnIGNoaWxkcmVuCkBAIC0zNCw3ICszMyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCXVuc2lnbmVkIGNoYXIgbWF4LCBuOwogCi0JbWF4ID0gYnVzLT5udW1iZXI7CisJbWF4ID0gYnVzLT5zdWJvcmRpbmF0ZTsKIAlsaXN0X2Zvcl9lYWNoKHRtcCwgJmJ1cy0+Y2hpbGRyZW4pIHsKIAkJbiA9IHBjaV9idXNfbWF4X2J1c25yKHBjaV9idXNfYih0bXApKTsKIAkJaWYobiA+IG1heCkKQEAgLTQyLDcgKzQxLDkgQEAKIAl9CiAJcmV0dXJuIG1heDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9idXNfbWF4X2J1c25yKTsKIAorI2lmIDAKIC8qKgogICogcGNpX21heF9idXNuciAtIHJldHVybnMgbWF4aW11bSBQQ0kgYnVzIG51bWJlcgogICoKQEAgLTQ5NSw5ICs0OTYsOCBAQAogaW50CiBwY2lfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWludCBlcnI7Ci0KLQlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlX2JhcnMoZGV2LCAoMSA8PCBQQ0lfTlVNX1JFU09VUkNFUykgLSAxKSkpCisJaW50IGVyciA9IHBjaV9lbmFibGVfZGV2aWNlX2JhcnMoZGV2LCAoMSA8PCBQQ0lfTlVNX1JFU09VUkNFUykgLSAxKTsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2VuYWJsZSwgZGV2KTsKIAlkZXYtPmlzX2VuYWJsZWQgPSAxOwpAQCAtNjM5LDcgKzYzOSw3IEBACiAgKglSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgJUVCVVNZIG9uIGVycm9yLiAgQSB3YXJuaW5nCiAgKgltZXNzYWdlIGlzIGFsc28gcHJpbnRlZCBvbiBmYWlsdXJlLgogICovCi1pbnQgcGNpX3JlcXVlc3RfcmVnaW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBjaGFyICpyZXNfbmFtZSkKK2ludCBwY2lfcmVxdWVzdF9yZWdpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIGNvbnN0IGNoYXIgKnJlc19uYW1lKQogewogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC02OTcsNyArNjk3LDcgQEAKICAqCVJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAlRUJVU1kgb24gZXJyb3IuICBBIHdhcm5pbmcKICAqCW1lc3NhZ2UgaXMgYWxzbyBwcmludGVkIG9uIGZhaWx1cmUuCiAgKi8KLWludCBwY2lfcmVxdWVzdF9yZWdpb25zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjaGFyICpyZXNfbmFtZSkKK2ludCBwY2lfcmVxdWVzdF9yZWdpb25zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBjaGFyICpyZXNfbmFtZSkKIHsKIAlpbnQgaTsKIAkKQEAgLTkwMCw4ICs5MDAsMTIgQEAKIAkJaWYgKGspCiAJCQkqaysrID0gMDsKIAkJaWYgKCpzdHIgJiYgKHN0ciA9IHBjaWJpb3Nfc2V0dXAoc3RyKSkgJiYgKnN0cikgewotCQkJLyogUENJIGxheWVyIG9wdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaGVyZSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IFVua25vd24gb3B0aW9uIGAlcydcbiIsIHN0cik7CisJCQlpZiAoIXN0cmNtcChzdHIsICJub21zaSIpKSB7CisJCQkJcGNpX25vX21zaSgpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogVW5rbm93biBvcHRpb24gYCVzJ1xuIiwKKwkJCQkJCXN0cik7CisJCQl9CiAJCX0KIAkJc3RyID0gazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IGE2ZGZlZTIuLjhmM2ZiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC01MCw4ICs1MCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIHZvaWQgZGlzYWJsZV9tc2lfbW9kZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCBpbnQgdHlwZSk7Cit2b2lkIHBjaV9ub19tc2kodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbXNpX21vZGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBvcywgaW50IHR5cGUpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9ub19tc2kodm9pZCkgeyB9CiAjZW5kaWYKIAogZXh0ZXJuIGludCBwY2llX21jaF9xdWlyazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKaW5kZXggYTYzYmQ4Zi4uMWQzMTdkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKQEAgLTI5LDcgKzI5LDYgQEAKIAogc3RydWN0IHBjaWVfcG9ydF9kZXZpY2VfZXh0IHsKIAlpbnQgaW50ZXJydXB0X21vZGU7CS8qIFswOklOVHggfCAxOk1TSSB8IDI6TVNJLVhdICovCi0JdW5zaWduZWQgaW50IHNhdmVkX21zaV9jb25maWdfc3BhY2VbNV07CiB9OwogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHBjaWVfcG9ydF9idXNfdHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IGU0ZTVmMWU4ZC4uNTVjNjYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCkBAIC0yNDgsMTEgKzI0OCwxMCBAQAogewogCXN0cnVjdCBwY2llX2RldmljZSAqZGV2aWNlOwogCi0JZGV2aWNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaWVfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJZGV2aWNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaWVfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCBwY2llX2RldmljZSkpOwogCXBjaWVfZGV2aWNlX2luaXQocGFyZW50LCBkZXZpY2UsIHBvcnRfdHlwZSwgc2VydmljZV90eXBlLCBpcnEsaXJxX21vZGUpOwogCXByaW50ayhLRVJOX0RFQlVHICJBbGxvY2F0ZSBQb3J0IFNlcnZpY2VbJXNdXG4iLCBkZXZpY2UtPmRldmljZS5idXNfaWQpOwogCXJldHVybiBkZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKaW5kZXggMDIyNjAxNC4uNTBiZmMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwpAQCAtMzAsNzUgKzMwLDE2IEBACiAvKiBnbG9iYWwgZGF0YSAqLwogc3RhdGljIGNvbnN0IGNoYXIgZGV2aWNlX25hbWVbXSA9ICJwY2llcG9ydC1kcml2ZXIiOwogCi1zdGF0aWMgdm9pZCBwY2lfc2F2ZV9tc2lfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgcGNpZV9wb3J0ZHJ2X3NhdmVfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IHBjaWVfcG9ydF9kZXZpY2VfZXh0ICpwX2V4dCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCBpID0gMCwgcG9zOwotCXUxNiBjb250cm9sOwotCi0gICAJaWYgKChwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0kpKSA8PSAwKQotCQlyZXR1cm47Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZwX2V4dC0+c2F2ZWRfbXNpX2NvbmZpZ19zcGFjZVtpKytdKTsKLQljb250cm9sID0gcF9leHQtPnNhdmVkX21zaV9jb25maWdfc3BhY2VbMF0gPj4gMTY7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9BRERSRVNTX0xPLAotCQkmcF9leHQtPnNhdmVkX21zaV9jb25maWdfc3BhY2VbaSsrXSk7Ci0JaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19ISSwKLQkJCSZwX2V4dC0+c2F2ZWRfbXNpX2NvbmZpZ19zcGFjZVtpKytdKTsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9EQVRBXzY0LAotCQkJJnBfZXh0LT5zYXZlZF9tc2lfY29uZmlnX3NwYWNlW2krK10pOwotCX0gZWxzZQotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0RBVEFfMzIsCi0JCQkmcF9leHQtPnNhdmVkX21zaV9jb25maWdfc3BhY2VbaSsrXSk7Ci0JaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQpCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfTUFTS19CSVQsCi0JCQkmcF9leHQtPnNhdmVkX21zaV9jb25maWdfc3BhY2VbaSsrXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjaV9yZXN0b3JlX21zaV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBwY2llX3BvcnRfZGV2aWNlX2V4dCAqcF9leHQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgaSA9IDAsIHBvczsKLQl1MTYgY29udHJvbDsKLQotICAgCWlmICgocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKSkgPD0gMCkKLQkJcmV0dXJuOwotCi0JY29udHJvbCA9IHBfZXh0LT5zYXZlZF9tc2lfY29uZmlnX3NwYWNlW2krK10gPj4gMTY7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX01TSV9GTEFHUywgY29udHJvbCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfQUREUkVTU19MTywKLQkJcF9leHQtPnNhdmVkX21zaV9jb25maWdfc3BhY2VbaSsrXSk7Ci0JaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTXzY0QklUKSB7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0FERFJFU1NfSEksCi0JCQlwX2V4dC0+c2F2ZWRfbXNpX2NvbmZpZ19zcGFjZVtpKytdKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9NU0lfREFUQV82NCwKLQkJCXBfZXh0LT5zYXZlZF9tc2lfY29uZmlnX3NwYWNlW2krK10pOwotCX0gZWxzZQotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSV9EQVRBXzMyLAotCQkJcF9leHQtPnNhdmVkX21zaV9jb25maWdfc3BhY2VbaSsrXSk7Ci0JaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQpCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX01BU0tfQklULAotCQkJcF9leHQtPnNhdmVkX21zaV9jb25maWdfc3BhY2VbaSsrXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjaWVfcG9ydGRydl9zYXZlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBwY2llX3BvcnRfZGV2aWNlX2V4dCAqcF9leHQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXBjaV9zYXZlX3N0YXRlKGRldik7Ci0JaWYgKHBfZXh0LT5pbnRlcnJ1cHRfbW9kZSA9PSBQQ0lFX1BPUlRfTVNJX01PREUpCi0JCXBjaV9zYXZlX21zaV9zdGF0ZShkZXYpOworCXJldHVybiBwY2lfc2F2ZV9zdGF0ZShkZXYpOwogfQogCiBzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXN0cnVjdCBwY2llX3BvcnRfZGV2aWNlX2V4dCAqcF9leHQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0dmFsOwogCiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKLQlpZiAocF9leHQtPmludGVycnVwdF9tb2RlID09IFBDSUVfUE9SVF9NU0lfTU9ERSkKLQkJcGNpX3Jlc3RvcmVfbXNpX3N0YXRlKGRldik7CiAJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtMTQ5LDcgKzkwLDggQEAKIHsKIAlpbnQgcmV0ID0gcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kKGRldiwgc3RhdGUpOwogCi0JcGNpZV9wb3J0ZHJ2X3NhdmVfY29uZmlnKGRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IHBjaWVfcG9ydGRydl9zYXZlX2NvbmZpZyhkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IGFkZmFkNGYuLmExMGVkOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMzMsMTAgKzMzLDkgQEAKICAqLwogc3RhdGljIHZvaWQgcGNpX2NyZWF0ZV9sZWdhY3lfZmlsZXMoc3RydWN0IHBjaV9idXMgKmIpCiB7Ci0JYi0+bGVnYWN5X2lvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJpbl9hdHRyaWJ1dGUpICogMiwKKwliLT5sZWdhY3lfaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmluX2F0dHJpYnV0ZSkgKiAyLAogCQkJICAgICAgIEdGUF9BVE9NSUMpOwogCWlmIChiLT5sZWdhY3lfaW8pIHsKLQkJbWVtc2V0KGItPmxlZ2FjeV9pbywgMCwgc2l6ZW9mKHN0cnVjdCBiaW5fYXR0cmlidXRlKSAqIDIpOwogCQliLT5sZWdhY3lfaW8tPmF0dHIubmFtZSA9ICJsZWdhY3lfaW8iOwogCQliLT5sZWdhY3lfaW8tPnNpemUgPSAweGZmZmY7CiAJCWItPmxlZ2FjeV9pby0+YXR0ci5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CkBAIC0zMjAsOSArMzE5LDggQEAKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYjsKIAotCWIgPSBrbWFsbG9jKHNpemVvZigqYiksIEdGUF9LRVJORUwpOworCWIgPSBremFsbG9jKHNpemVvZigqYiksIEdGUF9LRVJORUwpOwogCWlmIChiKSB7Ci0JCW1lbXNldChiLCAwLCBzaXplb2YoKmIpKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmItPm5vZGUpOwogCQlJTklUX0xJU1RfSEVBRCgmYi0+Y2hpbGRyZW4pOwogCQlJTklUX0xJU1RfSEVBRCgmYi0+ZGV2aWNlcyk7CkBAIC0zNDcsNiArMzQ1LDcgQEAKIAljaGlsZC0+cGFyZW50ID0gcGFyZW50OwogCWNoaWxkLT5vcHMgPSBwYXJlbnQtPm9wczsKIAljaGlsZC0+c3lzZGF0YSA9IHBhcmVudC0+c3lzZGF0YTsKKwljaGlsZC0+YnVzX2ZsYWdzID0gcGFyZW50LT5idXNfZmxhZ3M7CiAJY2hpbGQtPmJyaWRnZSA9IGdldF9kZXZpY2UoJmJyaWRnZS0+ZGV2KTsKIAogCWNoaWxkLT5jbGFzc19kZXYuY2xhc3MgPSAmcGNpYnVzX2NsYXNzOwpAQCAtNDU2LDcgKzQ1NSw3IEBACiAJCSAqIHBhc3MgYW5kIGp1c3Qgbm90ZSB0aGUgY29uZmlndXJhdGlvbi4KIAkJICovCiAJCWlmIChwYXNzKQotCQkJcmV0dXJuIG1heDsKKwkJCWdvdG8gb3V0OwogCQlidXNuciA9IChidXNlcyA+PiA4KSAmIDB4RkY7CiAKIAkJLyoKQEAgLTQ2NiwxMiArNDY1LDEyIEBACiAJCWlmIChwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihidXMpLCBidXNucikpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIlBDSTogQnVzICUwNHg6JTAyeCBhbHJlYWR5IGtub3duXG4iLAogCQkJCQlwY2lfZG9tYWluX25yKGJ1cyksIGJ1c25yKTsKLQkJCXJldHVybiBtYXg7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKGJ1cywgZGV2LCBidXNucik7CiAJCWlmICghY2hpbGQpCi0JCQlyZXR1cm4gbWF4OworCQkJZ290byBvdXQ7CiAJCWNoaWxkLT5wcmltYXJ5ID0gYnVzZXMgJiAweEZGOwogCQljaGlsZC0+c3Vib3JkaW5hdGUgPSAoYnVzZXMgPj4gMTYpICYgMHhGRjsKIAkJY2hpbGQtPmJyaWRnZV9jdGwgPSBiY3RsOwpAQCAtNDk2LDcgKzQ5NSw3IEBACiAJCQkJICAgYnVzIHJhbmdlcy4gKi8KIAkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1BSSU1BUllfQlVTLAogCQkJCQkJICAgICAgIGJ1c2VzICYgfjB4ZmZmZmZmKTsKLQkJCXJldHVybiBtYXg7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCS8qIENsZWFyIGVycm9ycyAqLwpAQCAtNTA1LDcgKzUwNCw3IEBACiAJCS8qIFByZXZlbnQgYXNzaWduaW5nIGEgYnVzIG51bWJlciB0aGF0IGFscmVhZHkgZXhpc3RzLgogCQkgKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGJyaWRnZSBpcyBob3QtcGx1Z2dlZCAqLwogCQlpZiAocGNpX2ZpbmRfYnVzKHBjaV9kb21haW5fbnIoYnVzKSwgbWF4KzEpKQotCQkJcmV0dXJuIG1heDsKKwkJCWdvdG8gb3V0OwogCQljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhidXMsIGRldiwgKyttYXgpOwogCQlidXNlcyA9IChidXNlcyAmIDB4ZmYwMDAwMDApCiAJCSAgICAgIHwgKCh1bnNpZ25lZCBpbnQpKGNoaWxkLT5wcmltYXJ5KSAgICAgPDwgIDApCkBAIC01MzcsNiArNTM2LDExIEBACiAJCQlwY2lfZml4dXBfcGFyZW50X3N1Ym9yZGluYXRlX2J1c25yKGNoaWxkLCBtYXgpOwogCQkJLyogTm93IHdlIGNhbiBzY2FuIGFsbCBzdWJvcmRpbmF0ZSBidXNlcy4uLiAqLwogCQkJbWF4ID0gcGNpX3NjYW5fY2hpbGRfYnVzKGNoaWxkKTsKKwkJCS8qCisJCQkgKiBub3cgZml4IGl0IHVwIGFnYWluIHNpbmNlIHdlIGhhdmUgZm91bmQKKwkJCSAqIHRoZSByZWFsIHZhbHVlIG9mIG1heC4KKwkJCSAqLworCQkJcGNpX2ZpeHVwX3BhcmVudF9zdWJvcmRpbmF0ZV9idXNucihjaGlsZCwgbWF4KTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBGb3IgQ2FyZEJ1cyBicmlkZ2VzLCB3ZSBsZWF2ZSA0IGJ1cyBudW1iZXJzCkBAIC01NzYsOCArNTgwLDYgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX1NVQk9SRElOQVRFX0JVUywgbWF4KTsKIAl9CiAKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQlJJREdFX0NPTlRST0wsIGJjdGwpOwotCiAJc3ByaW50ZihjaGlsZC0+bmFtZSwgKGlzX2NhcmRidXMgPyAiUENJIENhcmRCdXMgIyUwMngiIDogIlBDSSBCdXMgIyUwMngiKSwgY2hpbGQtPm51bWJlcik7CiAKIAl3aGlsZSAoYnVzLT5wYXJlbnQpIHsKQEAgLTU4NSwxNyArNTg3LDIyIEBACiAJCSAgICAoY2hpbGQtPm51bWJlciA+IGJ1cy0+c3Vib3JkaW5hdGUpIHx8CiAJCSAgICAoY2hpbGQtPm51bWJlciA8IGJ1cy0+bnVtYmVyKSB8fAogCQkgICAgKGNoaWxkLT5zdWJvcmRpbmF0ZSA8IGJ1cy0+bnVtYmVyKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBCdXMgIyUwMnggKC0jJTAyeCkgbWF5IGJlICIKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogQnVzICMlMDJ4ICgtIyUwMngpIGlzICIKIAkJCSAgICAgICAiaGlkZGVuIGJlaGluZCVzIGJyaWRnZSAjJTAyeCAoLSMlMDJ4KSVzXG4iLAogCQkJICAgICAgIGNoaWxkLT5udW1iZXIsIGNoaWxkLT5zdWJvcmRpbmF0ZSwKIAkJCSAgICAgICBidXMtPnNlbGYtPnRyYW5zcGFyZW50ID8gIiB0cmFuc3BhcmVudCIgOiAiICIsCiAJCQkgICAgICAgYnVzLT5udW1iZXIsIGJ1cy0+c3Vib3JkaW5hdGUsCiAJCQkgICAgICAgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpID8gIiAiIDoKIAkJCSAgICAgICAiICh0cnkgJ3BjaT1hc3NpZ24tYnVzc2VzJykiKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBsZWFzZSByZXBvcnQgdGhlIHJlc3VsdCB0byAiCisJCQkgICAgICAgImxpbnV4LWtlcm5lbCB0byBmaXggdGhpcyBwZXJtYW5lbnRseVxuIik7CiAJCX0KIAkJYnVzID0gYnVzLT5wYXJlbnQ7CiAJfQogCitvdXQ6CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0JSSURHRV9DT05UUk9MLCBiY3RsKTsKKwogCXJldHVybiBtYXg7CiB9CiAKQEAgLTc4OCwxMSArNzk1LDEwIEBACiAJaWYgKHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBQQ0lfSEVBREVSX1RZUEUsICZoZHJfdHlwZSkpCiAJCXJldHVybiBOVUxMOwogCi0JZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9kZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKIAotCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2RldikpOwogCWRldi0+YnVzID0gYnVzOwogCWRldi0+c3lzZGF0YSA9IGJ1cy0+c3lzZGF0YTsKIAlkZXYtPmRldi5wYXJlbnQgPSBidXMtPmJyaWRnZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2MuYyBiL2RyaXZlcnMvcGNpL3Byb2MuYwppbmRleCA5MmE4ODU3Li41NGIyZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9jLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYy5jCkBAIC00NTgsMTMxICs0NTgsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQwotCi0vKgotICogIEJhY2t3YXJkIGNvbXBhdGlibGUgL3Byb2MvcGNpIGludGVyZmFjZS4KLSAqLwotCi0vKgotICogQ29udmVydCBzb21lIG9mIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIHJlZ2lzdGVycyBvZiB0aGUgZGV2aWNlIGF0Ci0gKiBhZGRyZXNzIChidXMsZGV2Zm4pIGludG8gYSBzdHJpbmcgKHBvc3NpYmx5IHNldmVyYWwgbGluZXMgZWFjaCkuCi0gKiBUaGUgY29uZmlndXJhdGlvbiBzdHJpbmcgaXMgc3RvcmVkIHN0YXJ0aW5nIGF0IGJ1ZltsZW5dLiAgSWYgdGhlCi0gKiBzdHJpbmcgd291bGQgZXhjZWVkIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKFNJWkUpLCAwIGlzIHJldHVybmVkLgotICovCi1zdGF0aWMgaW50IHNob3dfZGV2X2NvbmZpZyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHY7Ci0Jc3RydWN0IHBjaV9kZXYgKmZpcnN0X2RldjsKLQlzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2OwotCXUzMiBjbGFzc19yZXY7Ci0JdW5zaWduZWQgY2hhciBsYXRlbmN5LCBtaW5fZ250LCBtYXhfbGF0OwotCWludCByZWc7Ci0KLQlmaXJzdF9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQlpZiAoZGV2ID09IGZpcnN0X2RldikKLQkJc2VxX3B1dHMobSwgIlBDSSBkZXZpY2VzIGZvdW5kOlxuIik7Ci0JcGNpX2Rldl9wdXQoZmlyc3RfZGV2KTsKLQotCWRydiA9IHBjaV9kZXZfZHJpdmVyKGRldik7Ci0KLQlwY2lfdXNlcl9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNsYXNzX3Jldik7Ci0JcGNpX3VzZXJfcmVhZF9jb25maWdfYnl0ZSAoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJmxhdGVuY3kpOwotCXBjaV91c2VyX3JlYWRfY29uZmlnX2J5dGUgKGRldiwgUENJX01JTl9HTlQsICZtaW5fZ250KTsKLQlwY2lfdXNlcl9yZWFkX2NvbmZpZ19ieXRlIChkZXYsIFBDSV9NQVhfTEFULCAmbWF4X2xhdCk7Ci0Jc2VxX3ByaW50ZihtLCAiICBCdXMgJTJkLCBkZXZpY2UgJTNkLCBmdW5jdGlvbiAlMmQ6XG4iLAotCSAgICAgICBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwgUENJX0ZVTkMoZGV2LT5kZXZmbikpOwotCXNlcV9wcmludGYobSwgIiAgICBDbGFzcyAlMDR4IiwgY2xhc3NfcmV2ID4+IDE2KTsKLQlzZXFfcHJpbnRmKG0sICI6IFBDSSBkZXZpY2UgJTA0eDolMDR4IiwgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlKTsKLQlzZXFfcHJpbnRmKG0sICIgKHJldiAlZCkuXG4iLCBjbGFzc19yZXYgJiAweGZmKTsKLQotCWlmIChkZXYtPmlycSkKLQkJc2VxX3ByaW50ZihtLCAiICAgICAgSVJRICVkLlxuIiwgZGV2LT5pcnEpOwotCi0JaWYgKGxhdGVuY3kgfHwgbWluX2dudCB8fCBtYXhfbGF0KSB7Ci0JCXNlcV9wcmludGYobSwgIiAgICAgIE1hc3RlciBDYXBhYmxlLiAgIik7Ci0JCWlmIChsYXRlbmN5KQotCQkJc2VxX3ByaW50ZihtLCAiTGF0ZW5jeT0lZC4gICIsIGxhdGVuY3kpOwotCQllbHNlCi0JCQlzZXFfcHV0cyhtLCAiTm8gYnVyc3RzLiAgIik7Ci0JCWlmIChtaW5fZ250KQotCQkJc2VxX3ByaW50ZihtLCAiTWluIEdudD0lZC4iLCBtaW5fZ250KTsKLQkJaWYgKG1heF9sYXQpCi0JCQlzZXFfcHJpbnRmKG0sICJNYXggTGF0PSVkLiIsIG1heF9sYXQpOwotCQlzZXFfcHV0YyhtLCAnXG4nKTsKLQl9Ci0KLQlmb3IgKHJlZyA9IDA7IHJlZyA8IDY7IHJlZysrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlZzsKLQkJdW5zaWduZWQgbG9uZyBiYXNlLCBlbmQsIGZsYWdzOwotCi0JCWJhc2UgPSByZXMtPnN0YXJ0OwotCQllbmQgPSByZXMtPmVuZDsKLQkJZmxhZ3MgPSByZXMtPmZsYWdzOwotCQlpZiAoIWVuZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChmbGFncyAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHsKLQkJCXNlcV9wcmludGYobSwgIiAgICAgIEkvTyBhdCAweCVseCBbMHglbHhdLlxuIiwKLQkJCQliYXNlLCBlbmQpOwotCQl9IGVsc2UgewotCQkJY29uc3QgY2hhciAqcHJlZiwgKnR5cGUgPSAidW5rbm93biI7Ci0KLQkJCWlmIChmbGFncyAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIKQotCQkJCXByZWYgPSAiUCI7Ci0JCQllbHNlCi0JCQkJcHJlZiA9ICJOb24tcCI7Ci0JCQlzd2l0Y2ggKGZsYWdzICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLKSB7Ci0JCQkgICAgICBjYXNlIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMzI6Ci0JCQkJdHlwZSA9ICIzMiBiaXQiOyBicmVhazsKLQkJCSAgICAgIGNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8xTToKLQkJCQl0eXBlID0gIjIwIGJpdCI7IGJyZWFrOwotCQkJICAgICAgY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0OgotCQkJCXR5cGUgPSAiNjQgYml0IjsgYnJlYWs7Ci0JCQl9Ci0JCQlzZXFfcHJpbnRmKG0sICIgICAgICAlc3JlZmV0Y2hhYmxlICVzIG1lbW9yeSBhdCAiCi0JCQkJICAgICAgICIweCVseCBbMHglbHhdLlxuIiwgcHJlZiwgdHlwZSwKLQkJCQkgICAgICAgYmFzZSwKLQkJCQkgICAgICAgZW5kKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX3BjaV9vcCA9IHsKLQkuc3RhcnQJPSBwY2lfc2VxX3N0YXJ0LAotCS5uZXh0CT0gcGNpX3NlcV9uZXh0LAotCS5zdG9wCT0gcGNpX3NlcV9zdG9wLAotCS5zaG93CT0gc2hvd19kZXZfY29uZmlnCi19OwotCi1zdGF0aWMgaW50IHByb2NfcGNpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcm9jX3BjaV9vcCk7Ci19Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BjaV9vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IHByb2NfcGNpX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyB2b2lkIGxlZ2FjeV9wcm9jX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiBlbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJwY2kiLCAwLCBOVUxMKTsKLQlpZiAoZW50cnkpCi0JCWVudHJ5LT5wcm9jX2ZvcHMgPSAmcHJvY19wY2lfb3BlcmF0aW9uczsKLX0KLQotI2Vsc2UKLQotc3RhdGljIHZvaWQgbGVnYWN5X3Byb2NfaW5pdCh2b2lkKQotewotCi19Ci0KLSNlbmRpZiAvKiBDT05GSUdfUENJX0xFR0FDWV9QUk9DICovCi0KIHN0YXRpYyBpbnQgcHJvY19idXNfcGNpX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmcHJvY19idXNfcGNpX2RldmljZXNfb3ApOwpAQCAtNjA2LDcgKzQ4MSw2IEBACiAJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CiAJCXBjaV9wcm9jX2F0dGFjaF9kZXZpY2UoZGV2KTsKIAl9Ci0JbGVnYWN5X3Byb2NfaW5pdCgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGRkYTYwOTkuLjQ5NzBmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC01NzUsOCArNTc1LDExIEBACiB7IAogICAgICAgICB1bnNpZ25lZCBjaGFyIHJldmlkLCB0bXA7CiAgICAgICAgIAotCXBjaV9tc2lfcXVpcmsgPSAxOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogTVNJIHF1aXJrIGRldGVjdGVkLiBwY2lfbXNpX3F1aXJrIHNldC5cbiIpOworCWlmIChkZXYtPnN1Ym9yZGluYXRlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogTVNJIHF1aXJrIGRldGVjdGVkLiAiCisJCSAgICAgICAiUENJX0JVU19GTEFHU19OT19NU0kgc2V0IGZvciBzdWJvcmRpbmF0ZSBidXMuXG4iKTsKKwkJZGV2LT5zdWJvcmRpbmF0ZS0+YnVzX2ZsYWdzIHw9IFBDSV9CVVNfRkxBR1NfTk9fTVNJOworCX0KIAogICAgICAgICBpZiAobnJfaW9hcGljcyA9PSAwKSAKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC05MzQsNiArOTM3LDEyIEBACiAJCQljYXNlIDB4MTJiZDogLyogSFAgRDUzMCAqLwogCQkJCWFzdXNfaGlkZXNfc21idXMgPSAxOwogCQkJfQorCQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0hCKSB7CisJCQlzd2l0Y2ggKGRldi0+c3Vic3lzdGVtX2RldmljZSkgeworCQkJY2FzZSAweDA5OWM6IC8qIEhQIENvbXBhcSBueDYxMTAgKi8KKwkJCQlhc3VzX2hpZGVzX3NtYnVzID0gMTsKKwkJCX0KKwkJfQogCX0gZWxzZSBpZiAodW5saWtlbHkoZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfVE9TSElCQSkpIHsKIAkJaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NTVHTV9IQikKIAkJCXN3aXRjaChkZXYtPnN1YnN5c3RlbV9kZXZpY2UpIHsKQEAgLTEwNjgsNiArMTA3NywzNyBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfU0ksCVBDSV9ERVZJQ0VfSURfU0lfNzM1LAkJcXVpcmtfc2lzXzk2eF9jb21wYXRpYmxlICk7CiAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1NJLAlQQ0lfREVWSUNFX0lEX1NJXzUwMywJCXF1aXJrX3Npc181MDMgKTsKKy8qCisgKiBPbiBBU1VTIEE4ViBhbmQgQThWIERlbHV4ZSBib2FyZHMsIHRoZSBvbmJvYXJkIEFDOTcgYXVkaW8gY29udHJvbGxlcgorICogYW5kIE1DOTcgbW9kZW0gY29udHJvbGxlciBhcmUgZGlzYWJsZWQgd2hlbiBhIHNlY29uZCBQQ0kgc291bmRjYXJkIGlzCisgKiBwcmVzZW50LiBUaGlzIHBhdGNoLCB0d2Vha2luZyB0aGUgVlQ4MjM3IElTQSBicmlkZ2UsIGVuYWJsZXMgdGhlbS4KKyAqIC0tIGJqZAorICovCitzdGF0aWMgdm9pZCBfX2luaXQgYXN1c19oaWRlc19hYzk3X2xwYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXU4IHZhbDsKKwlpbnQgYXN1c19oaWRlc19hYzk3ID0gMDsKKworCWlmIChsaWtlbHkoZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVNVU1RFSykpIHsKKwkJaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVklBXzgyMzcpCisJCQlhc3VzX2hpZGVzX2FjOTcgPSAxOworCX0KKworCWlmICghYXN1c19oaWRlc19hYzk3KQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZ2YWwpOworCWlmICh2YWwgJiAweGMwKSB7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIHZhbCAmICh+MHhjMCkpOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NTAsICZ2YWwpOworCQlpZiAodmFsICYgMHhjMCkKKwkJCXByaW50ayhLRVJOX0lORk8gIlBDSTogb25ib2FyZCBBQzk3L01DOTcgZGV2aWNlcyBjb250aW51ZSB0byBwbGF5ICdoaWRlIGFuZCBzZWVrJyEgMHgleFxuIiwgdmFsKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBlbmFibGVkIG9uYm9hcmQgQUM5Ny9NQzk3IGRldmljZXNcbiIpOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODIzNywgYXN1c19oaWRlc19hYzk3X2xwYyApOworCiAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1NJLAlQQ0lfREVWSUNFX0lEX1NJXzk2MSwJCXF1aXJrX3Npc185Nnhfc21idXMgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1NJLAlQQ0lfREVWSUNFX0lEX1NJXzk2MiwJCXF1aXJrX3Npc185Nnhfc21idXMgKTsKQEAgLTEyNDIsNiArMTI4MiwzMyBAQAogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9QWEhWLAlxdWlya19wY2llX3B4aCk7CiAKIAorLyoKKyAqIEZpeHVwIHRoZSBjYXJkYnVzIGJyaWRnZXMgb24gdGhlIElCTSBEb2NrIElJIGRvY2tpbmcgc3RhdGlvbgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfaWJtX2RvY2syX2NhcmRidXMoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MzIgdmFsOworCisJLyoKKwkgKiB0aWUgdGhlIDIgaW50ZXJydXB0IHBpbnMgdG8gSU5UQSwgYW5kIGNvbmZpZ3VyZSB0aGUKKwkgKiBtdWx0aWZ1bmN0aW9uIHJvdXRpbmcgcmVnaXN0ZXIgdG8gaGFuZGxlIHRoaXMuCisJICovCisJaWYgKChkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JQk0pICYmCisJCShkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMTQ4KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IEZvdW5kIElCTSBEb2NrIElJIENhcmRidXMgQnJpZGdlICIKKwkJCSJhcHBseWluZyBxdWlya1xuIik7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4OGMsICZ2YWwpOworCQl2YWwgPSAoKHZhbCAmIDB4ZmZmZmZmMDApIHwgMHgxMDAyKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4OGMsIHZhbCk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4ODAsICZ2YWwpOworCQl2YWwgPSAoKHZhbCAmIDB4MDBmZmZmMDApIHwgMHgyODY0YzA3Nyk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDgwLCB2YWwpOworCX0KK30KKworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfMTQyMCwKKwkJCQlxdWlya19pYm1fZG9jazJfY2FyZGJ1cyk7CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19uZXRtb3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgbnVtX3BhcmFsbGVsID0gKGRldi0+c3Vic3lzdGVtX2RldmljZSAmIDB4ZjApID4+IDQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZWFyY2guYyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jCmluZGV4IDA1ZmE5MWEuLmNlN2RkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jCisrKyBiL2RyaXZlcnMvcGNpL3NlYXJjaC5jCkBAIC0yNDYsOSArMjQ2LDkgQEAKIAl9CiAJZGV2ID0gTlVMTDsKIGV4aXQ6Ci0JcGNpX2Rldl9wdXQoZnJvbSk7CiAJZGV2ID0gcGNpX2Rldl9nZXQoZGV2KTsKIAlzcGluX3VubG9jaygmcGNpX2J1c19sb2NrKTsKKwlwY2lfZGV2X3B1dChmcm9tKTsKIAlyZXR1cm4gZGV2OwogfQogCkBAIC0zMzksOSArMzM5LDkgQEAKIAl9CiAJZGV2ID0gTlVMTDsKIGV4aXQ6Ci0JcGNpX2Rldl9wdXQoZnJvbSk7CiAJZGV2ID0gcGNpX2Rldl9nZXQoZGV2KTsKIAlzcGluX3VubG9jaygmcGNpX2J1c19sb2NrKTsKKwlwY2lfZGV2X3B1dChmcm9tKTsKIAlyZXR1cm4gZGV2OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCAwYTQyNGE0Li5iYjk2Y2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTM1MiwxMSArMzUyLDIwIEBACiAJa2ZyZWUocF9kZXYpOwogfQogCitzdGF0aWMgdm9pZCBwY21jaWFfYWRkX3BzZXVkb19kZXZpY2Uoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCit7CisJaWYgKCFzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nKSB7CisJCXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcgPSAxOworCQlzY2hlZHVsZV93b3JrKCZzLT5kZXZpY2VfYWRkKTsKKwl9CisJcmV0dXJuOworfQogCiBzdGF0aWMgaW50IHBjbWNpYV9kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqIGRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXY7CiAJc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OworCXN0cnVjdCBwY21jaWFfZGV2aWNlX2lkICpkaWQ7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJaW50IHJldCA9IDA7CiAKQEAgLTM5Miw2ICs0MDEsMTkgQEAKIAl9CiAKIAlyZXQgPSBwX2Rydi0+cHJvYmUocF9kZXYpOworCWlmIChyZXQpCisJCWdvdG8gcHV0X21vZHVsZTsKKworCS8qIGhhbmRsZSBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzOgorCSAqIHRoZXJlIGFyZSBhdCBtb3N0IHR3byBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzLgorCSAqIGlmIHdlJ3JlIG1hdGNoaW5nIGFnYWluc3QgdGhlIGZpcnN0LCBzY2hlZHVsZSBhCisJICogY2FsbCB3aGljaCB3aWxsIHRoZW4gY2hlY2sgd2hldGhlciB0aGVyZSBhcmUgdHdvCisJICogcHNldWRvIGRldmljZXMsIGFuZCBpZiBub3QsIGFkZCB0aGUgc2Vjb25kIG9uZS4KKwkgKi8KKwlkaWQgPSAoc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKikgcF9kZXYtPmRldi5kcml2ZXJfZGF0YTsKKwlpZiAoZGlkICYmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pICYmCisJICAgIChwX2Rldi0+c29ja2V0LT5kZXZpY2VfY291bnQgPT0gMSkgJiYgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gMCkpCisJCXBjbWNpYV9hZGRfcHNldWRvX2RldmljZShwX2Rldi0+c29ja2V0KTsKIAogIHB1dF9tb2R1bGU6CiAJaWYgKHJldCkKQEAgLTY2MCwxNSArNjgyLDYgQEAKIAlzLT5wY21jaWFfc3RhdGUuZGV2aWNlX2FkZF9wZW5kaW5nID0gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBjbWNpYV9hZGRfcHNldWRvX2RldmljZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAoIXMtPnBjbWNpYV9zdGF0ZS5kZXZpY2VfYWRkX3BlbmRpbmcpIHsKLQkJcy0+cGNtY2lhX3N0YXRlLmRldmljZV9hZGRfcGVuZGluZyA9IDE7Ci0JCXNjaGVkdWxlX3dvcmsoJnMtPmRldmljZV9hZGQpOwotCX0KLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbnQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICogX2RhdGEpCiB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOwpAQCAtNzU1LDE1ICs3NjgsNiBAQAogCX0KIAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pIHsKLQkJLyogaGFuZGxlIHBzZXVkbyBtdWx0aWZ1bmN0aW9uIGRldmljZXM6Ci0JCSAqIHRoZXJlIGFyZSBhdCBtb3N0IHR3byBwc2V1ZG8gbXVsdGlmdW5jdGlvbiBkZXZpY2VzLgotCQkgKiBpZiB3ZSdyZSBtYXRjaGluZyBhZ2FpbnN0IHRoZSBmaXJzdCwgc2NoZWR1bGUgYQotCQkgKiBjYWxsIHdoaWNoIHdpbGwgdGhlbiBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZSB0d28KLQkJICogcHNldWRvIGRldmljZXMsIGFuZCBpZiBub3QsIGFkZCB0aGUgc2Vjb25kIG9uZS4KLQkJICovCi0JCWlmIChkZXYtPmRldmljZV9ubyA9PSAwKQotCQkJcGNtY2lhX2FkZF9wc2V1ZG9fZGV2aWNlKGRldi0+c29ja2V0KTsKLQogCQlpZiAoZGV2LT5kZXZpY2Vfbm8gIT0gZGlkLT5kZXZpY2Vfbm8pCiAJCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKaW5kZXggNDdiNWFkZS4uMmMyM2Q3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAKIAkvKiBlaXRoZXIgQ0ZMQVNILklSRVEgKElOVF8xNjEwX0NGKSBvciBzb21lIEdQSU8gKi8KIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghaXJxKQorCWlmIChpcnEgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWNmID0ga2NhbGxvYygxLCBzaXplb2YgKmNmLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2NhcmQuYyBiL2RyaXZlcnMvcG5wL2NhcmQuYwppbmRleCBhYWE1NjhhLi5iNjhlZWYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvY2FyZC5jCisrKyBiL2RyaXZlcnMvcG5wL2NhcmQuYwpAQCAtMzAzLDEzICszMDMsMTEgQEAKIAlkb3duX3dyaXRlKCZkZXYtPmRldi5idXMtPnN1YnN5cy5yd3NlbSk7CiAJZGV2LT5jYXJkX2xpbmsgPSBjbGluazsKIAlkZXYtPmRldi5kcml2ZXIgPSAmZHJ2LT5saW5rLmRyaXZlcjsKLQlpZiAoZHJ2LT5saW5rLmRyaXZlci5wcm9iZSkgewotCQlpZiAoZHJ2LT5saW5rLmRyaXZlci5wcm9iZSgmZGV2LT5kZXYpKSB7Ci0JCQlkZXYtPmRldi5kcml2ZXIgPSBOVUxMOwotCQkJZGV2LT5jYXJkX2xpbmsgPSBOVUxMOwotCQkJdXBfd3JpdGUoJmRldi0+ZGV2LmJ1cy0+c3Vic3lzLnJ3c2VtKTsKLQkJCXJldHVybiBOVUxMOwotCQl9CisJaWYgKHBucF9idXNfdHlwZS5wcm9iZSgmZGV2LT5kZXYpKSB7CisJCWRldi0+ZGV2LmRyaXZlciA9IE5VTEw7CisJCWRldi0+Y2FyZF9saW5rID0gTlVMTDsKKwkJdXBfd3JpdGUoJmRldi0+ZGV2LmJ1cy0+c3Vic3lzLnJ3c2VtKTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCWRldmljZV9iaW5kX2RyaXZlcigmZGV2LT5kZXYpOwogCXVwX3dyaXRlKCZkZXYtPmRldi5idXMtPnN1YnN5cy5yd3NlbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jIGIvZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYwppbmRleCA1N2ZkNjAzLi5iMWI0YjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMKQEAgLTY0Niw4ICs2NDYsMTAgQEAKIAkJCQlzaXplID0gMDsKIAkJCQlza2lwID0gMDsKIAkJCQlvcHRpb24gPSBwbnBfcmVnaXN0ZXJfaW5kZXBlbmRlbnRfb3B0aW9uKGRldik7Ci0JCQkJaWYgKCFvcHRpb24pCisJCQkJaWYgKCFvcHRpb24pIHsKKwkJCQkJa2ZyZWUoZGV2KTsKIAkJCQkJcmV0dXJuIDE7CisJCQkJfQogCQkJCXBucF9hZGRfY2FyZF9kZXZpY2UoY2FyZCxkZXYpOwogCQkJfSBlbHNlIHsKIAkJCQlza2lwID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYwppbmRleCA1ZTM4Y2Q3Li5jODljOThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jCkBAIC00NDgsMTEgKzQ0OCw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIFNNQUxMX1RBR19FTkQ6Ci0JCQlpZiAob3B0aW9uX2luZGVwZW5kZW50ICE9IG9wdGlvbikKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJQblBCSU9TOiBNaXNzaW5nIFNNQUxMX1RBR19FTkRERVAgdGFnXG4iKTsKLQkJCXAgPSBwICsgMjsKLSAgICAgICAgCQlyZXR1cm4gKHVuc2lnbmVkIGNoYXIgKilwOwotCQkJYnJlYWs7CisgICAgICAgIAkJcmV0dXJuIHAgKyAyOwogCiAJCWRlZmF1bHQ6IC8qIGFuIHVua293biB0YWcgKi8KIAkJCWxlbl9lcnI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvS2NvbmZpZyBiL2RyaXZlcnMvczM5MC9LY29uZmlnCmluZGV4IDcyMTc4N2MuLjRkMzYyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvczM5MC9LY29uZmlnCkBAIC0xODMsNyArMTgzLDEzIEBACiAJICB0YXBlIHN1YnN5c3RlbXMgYW5kIDEwMCUgY29tcGF0aWJsZXMuCiAJICBJdCBpcyBzYWZlIHRvIHNheSAiWSIgaGVyZS4KIAotCitjb25maWcgUzM5MF9UQVBFXzM1OTAKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgMzU5MCB0YXBlIGhhcmR3YXJlIgorCWRlcGVuZHMgb24gUzM5MF9UQVBFCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBJQk0gMzU5MCBtYWduZXRpYworCSAgdGFwZSBzdWJzeXN0ZW1zIGFuZCAxMDAlIGNvbXBhdGlibGVzLgorCSAgSXQgaXMgc2FmZSB0byBzYXkgIlkiIGhlcmUuCiAKIGNvbmZpZyBWTUxPR1JEUgogCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aGUgei9WTSByZWNvcmRpbmcgc3lzdGVtIHNlcnZpY2VzIChWTSBvbmx5KSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWcKaW5kZXggNjkxMjM5OS4uOTI5ZDZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWcKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWcKQEAgLTQ5LDI4ICs0OSwxOCBAQAogCiBjb25maWcgREFTRF9ESUFHCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIERJQUcgYWNjZXNzIHRvIERpc2tzIgotCWRlcGVuZHMgb24gREFTRCAmJiAoIDY0QklUID0gJ24nIHx8IEVYUEVSSU1FTlRBTCkKKwlkZXBlbmRzIG9uIERBU0QKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIERpYWdub3NlMjUwIGNvbW1hbmQgdG8gYWNjZXNzCiAJICBEaXNrcyB1bmRlciBWTS4gIElmIHlvdSBhcmUgbm90IHJ1bm5pbmcgdW5kZXIgVk0gb3IgdW5zdXJlIHdoYXQgaXQgaXMsCiAJICBzYXkgIk4iLgogCiBjb25maWcgREFTRF9FRVIKLQl0cmlzdGF0ZSAiRXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIChFRVIpIgorCWJvb2wgIkV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyAoRUVSKSIKIAlkZXBlbmRzIG9uIERBU0QKIAloZWxwCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlIHRvIHRoZQotICAgICAgICAgIERBU0QgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nLiBUaGlzIGlzIG9ubHkgbmVlZGVkIGlmIHlvdSB3YW50IHRvCi0gICAgICAgICAgdXNlIGFwcGxpY2F0aW9ucyB3cml0dGVuIGZvciB0aGUgRUVSIGZhY2lsaXR5LgotCi1jb25maWcgREFTRF9DTUIKLQl0cmlzdGF0ZSAiQ29tcGF0aWJpbGl0eSBpbnRlcmZhY2UgZm9yIERBU0QgY2hhbm5lbCBtZWFzdXJlbWVudCBibG9ja3MiCi0JZGVwZW5kcyBvbiBEQVNECi0JaGVscAotCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBpbnRlcmZhY2UgdG8gdGhlIGNoYW5uZWwKLSAgICAgICAgICBtZWFzdXJlbWVudCBmYWNpbGl0eSwgd2hpY2ggaXMgbm9ybWFsbHkgYWNjZXNzZWQgdGhvdWdoIHN5c2ZzLCB3aXRoCi0gICAgICAgICAgYSBzZXQgb2YgaW9jdGwgZnVuY3Rpb25zIHNwZWNpZmljIHRvIHRoZSBkYXNkIGRyaXZlci4KLQkgIFRoaXMgaXMgb25seSBuZWVkZWQgaWYgeW91IHdhbnQgdG8gdXNlIGFwcGxpY2F0aW9ucyB3cml0dGVuIGZvcgotCSAgbGludXgtMi40IGRhc2QgY2hhbm5lbCBtZWFzdXJlbWVudCBmYWNpbGl0eSBpbnRlcmZhY2UuCisJICBEQVNEIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZy4gVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiB5b3Ugd2FudCB0bworCSAgdXNlIGFwcGxpY2F0aW9ucyB3cml0dGVuIGZvciB0aGUgRUVSIGZhY2lsaXR5LgogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL2Jsb2NrL01ha2VmaWxlCmluZGV4IDBjMGQ4NzEuLmJlOWYyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svTWFrZWZpbGUKQEAgLTUsMTUgKzUsMTUgQEAKIGRhc2RfZWNrZF9tb2Qtb2JqcyA6PSBkYXNkX2Vja2QubyBkYXNkXzM5OTBfZXJwLm8gZGFzZF85MzQzX2VycC5vCiBkYXNkX2ZiYV9tb2Qtb2JqcyAgOj0gZGFzZF9mYmEubyBkYXNkXzMzNzBfZXJwLm8gZGFzZF85MzM2X2VycC5vCiBkYXNkX2RpYWdfbW9kLW9ianMgOj0gZGFzZF9kaWFnLm8KLWRhc2RfZWVyX21vZC1vYmpzIDo9IGRhc2RfZWVyLm8KIGRhc2RfbW9kLW9ianMgICAgICA6PSBkYXNkLm8gZGFzZF9pb2N0bC5vIGRhc2RfcHJvYy5vIGRhc2RfZGV2bWFwLm8gXAogCQkJZGFzZF9nZW5oZC5vIGRhc2RfZXJwLm8KK2lmZGVmIENPTkZJR19EQVNEX0VFUgorZGFzZF9tb2Qtb2JqcyAgICAgICs9IGRhc2RfZWVyLm8KK2VuZGlmCiAKIG9iai0kKENPTkZJR19EQVNEKSArPSBkYXNkX21vZC5vCiBvYmotJChDT05GSUdfREFTRF9ESUFHKSArPSBkYXNkX2RpYWdfbW9kLm8KIG9iai0kKENPTkZJR19EQVNEX0VDS0QpICs9IGRhc2RfZWNrZF9tb2Qubwogb2JqLSQoQ09ORklHX0RBU0RfRkJBKSAgKz0gZGFzZF9mYmFfbW9kLm8KLW9iai0kKENPTkZJR19EQVNEX0NNQikgICs9IGRhc2RfY21iLm8KLW9iai0kKENPTkZJR19EQVNEX0VFUikgICs9IGRhc2RfZWVyLm8KIG9iai0kKENPTkZJR19CTEtfREVWX1hQUkFNKSArPSB4cHJhbS5vCiBvYmotJChDT05GSUdfRENTU0JMSykgKz0gZGNzc2Jsay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCAwOGM4OGZjLi4wYTlmMTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKICNpbmNsdWRlIDxhc20vY2N3ZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgpAQCAtNDQsNyArNDMsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJMaW51eCBvbiBTLzM5MCBEQVNEIGRldmljZSBkcml2ZXIsIgogCQkgICAiIENvcHlyaWdodCAyMDAwIElCTSBDb3Jwb3JhdGlvbiIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoImRhc2QiKTsKLU1PRFVMRV9QQVJNKGRhc2QsICIxLSIgX19NT0RVTEVfU1RSSU5HKDI1NikgInMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyoKQEAgLTU4LDcgKzU2LDYgQEAKIHN0YXRpYyB2b2lkIGRhc2RfZmx1c2hfY2N3X3F1ZXVlKHN0cnVjdCBkYXNkX2RldmljZSAqLCBpbnQpOwogc3RhdGljIHZvaWQgZGFzZF90YXNrbGV0KHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIGRvX2tpY2tfZGV2aWNlKHZvaWQgKmRhdGEpOwotc3RhdGljIHZvaWQgZGFzZF9kaXNhYmxlX2VlcihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSk7CiAKIC8qCiAgKiBTRUNUSU9OOiBPcGVyYXRpb25zIG9uIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgpAQCAtNzMsMTAgKzcwLDkgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAotCWRldmljZSA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgZGFzZF9kZXZpY2UpLCBHRlBfQVRPTUlDKTsKKwlkZXZpY2UgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGRhc2RfZGV2aWNlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGRldmljZSA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQltZW1zZXQoZGV2aWNlLCAwLCBzaXplb2YgKHN0cnVjdCBkYXNkX2RldmljZSkpOwogCS8qIG9wZW5fY291bnQgPSAwIG1lYW5zIGRldmljZSBvbmxpbmUgYnV0IG5vdCBpbiB1c2UgKi8KIAlhdG9taWNfc2V0KCZkZXZpY2UtPm9wZW5fY291bnQsIC0xKTsKIApAQCAtMTUzLDEwICsxNDksMTUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZGFzZF9zdGF0ZV9rbm93bl90b19uZXcoc3RydWN0IGRhc2RfZGV2aWNlICogZGV2aWNlKQogewotCS8qIGRpc2FibGUgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIGZvciB0aGlzIGRldmljZSAqLwotCWRhc2RfZGlzYWJsZV9lZXIoZGV2aWNlKTsKKwkvKiBEaXNhYmxlIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyBmb3IgdGhpcyBkZXZpY2UuICovCisJZGFzZF9lZXJfZGlzYWJsZShkZXZpY2UpOwogCS8qIEZvcmdldCB0aGUgZGlzY2lwbGluZSBpbmZvcm1hdGlvbi4gKi8KKwlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lKQorCQltb2R1bGVfcHV0KGRldmljZS0+ZGlzY2lwbGluZS0+b3duZXIpOwogCWRldmljZS0+ZGlzY2lwbGluZSA9IE5VTEw7CisJaWYgKGRldmljZS0+YmFzZV9kaXNjaXBsaW5lKQorCQltb2R1bGVfcHV0KGRldmljZS0+YmFzZV9kaXNjaXBsaW5lLT5vd25lcik7CisJZGV2aWNlLT5iYXNlX2Rpc2NpcGxpbmUgPSBOVUxMOwogCWRldmljZS0+c3RhdGUgPSBEQVNEX1NUQVRFX05FVzsKIAogCWRhc2RfZnJlZV9xdWV1ZShkZXZpY2UpOwpAQCAtMjE0LDkgKzIxNSwxMCBAQAogICogaW50ZXJydXB0IGZvciB0aGlzIGRldGVjdGlvbiBjY3cgdXNlcyB0aGUga2VybmVsIGV2ZW50IGRhZW1vbiB0bwogICogdHJpZ2dlciB0aGUgY2FsbCB0byBkYXNkX2NoYW5nZV9zdGF0ZS4gQWxsIHRoaXMgaXMgZG9uZSBpbiB0aGUKICAqIGRpc2NpcGxpbmUgY29kZSwgc2VlIGRhc2RfZWNrZC5jLgotICogQWZ0ZXIgdGhlIGFuYWx5c2lzIGNjdyBpcyBkb25lIChkb19hbmFseXNpcyByZXR1cm5lZCAwIG9yIGVycm9yKQotICogdGhlIGJsb2NrIGRldmljZSBpcyBzZXR1cC4gRWl0aGVyIGEgZmFrZSBkaXNrIGlzIGFkZGVkIHRvIGFsbG93Ci0gKiBmb3JtYXR0aW5nIG9yIGEgcHJvcGVyIGRldmljZSByZXF1ZXN0IHF1ZXVlIGlzIGNyZWF0ZWQuCisgKiBBZnRlciB0aGUgYW5hbHlzaXMgY2N3IGlzIGRvbmUgKGRvX2FuYWx5c2lzIHJldHVybmVkIDApIHRoZSBibG9jaworICogZGV2aWNlIGlzIHNldHVwLgorICogSW4gY2FzZSB0aGUgYW5hbHlzaXMgcmV0dXJucyBhbiBlcnJvciwgdGhlIGRldmljZSBzZXR1cCBpcyBzdG9wcGVkCisgKiAoYSBmYWtlIGRpc2sgd2FzIGFscmVhZHkgYWRkZWQgdG8gYWxsb3cgZm9ybWF0dGluZykuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBkYXNkX3N0YXRlX2Jhc2ljX3RvX3JlYWR5KHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSkKQEAgLTIyNiwxMyArMjI4LDE5IEBACiAJcmMgPSAwOwogCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPmRvX2FuYWx5c2lzICE9IE5VTEwpCiAJCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT5kb19hbmFseXNpcyhkZXZpY2UpOwotCWlmIChyYykKKwlpZiAocmMpIHsKKwkJaWYgKHJjICE9IC1FQUdBSU4pCisJCQlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9VTkZNVDsKIAkJcmV0dXJuIHJjOworCX0KKwkvKiBtYWtlIGRpc2sga25vd24gd2l0aCBjb3JyZWN0IGNhcGFjaXR5ICovCiAJZGFzZF9zZXR1cF9xdWV1ZShkZXZpY2UpOworCXNldF9jYXBhY2l0eShkZXZpY2UtPmdkcCwgZGV2aWNlLT5ibG9ja3MgPDwgZGV2aWNlLT5zMmJfc2hpZnQpOwogCWRldmljZS0+c3RhdGUgPSBEQVNEX1NUQVRFX1JFQURZOwotCWlmIChkYXNkX3NjYW5fcGFydGl0aW9ucyhkZXZpY2UpICE9IDApCisJcmMgPSBkYXNkX3NjYW5fcGFydGl0aW9ucyhkZXZpY2UpOworCWlmIChyYykKIAkJZGV2aWNlLT5zdGF0ZSA9IERBU0RfU1RBVEVfQkFTSUM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtMjUzLDYgKzI2MSwxNSBAQAogfQogCiAvKgorICogQmFjayB0byBiYXNpYy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitkYXNkX3N0YXRlX3VuZm10X3RvX2Jhc2ljKHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSkKK3sKKwlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9CQVNJQzsKK30KKworLyoKICAqIE1ha2UgdGhlIGRldmljZSBvbmxpbmUgYW5kIHNjaGVkdWxlIHRoZSBib3R0b20gaGFsZiB0byBzdGFydAogICogdGhlIHJlcXVldWVpbmcgb2YgcmVxdWVzdHMgZnJvbSB0aGUgbGludXggcmVxdWVzdCBxdWV1ZSB0byB0aGUKICAqIGNjdyBxdWV1ZS4KQEAgLTMxOCw4ICszMzUsMTIgQEAKIAlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX1JFQURZICYmCiAJICAgIGRldmljZS0+dGFyZ2V0IDw9IERBU0RfU1RBVEVfQkFTSUMpCiAJCWRhc2Rfc3RhdGVfcmVhZHlfdG9fYmFzaWMoZGV2aWNlKTsKLQkKLQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX0JBU0lDICYmIAorCisJaWYgKGRldmljZS0+c3RhdGUgPT0gREFTRF9TVEFURV9VTkZNVCAmJgorCSAgICBkZXZpY2UtPnRhcmdldCA8PSBEQVNEX1NUQVRFX0JBU0lDKQorCQlkYXNkX3N0YXRlX3VuZm10X3RvX2Jhc2ljKGRldmljZSk7CisKKwlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX0JBU0lDICYmCiAJICAgIGRldmljZS0+dGFyZ2V0IDw9IERBU0RfU1RBVEVfS05PV04pCiAJCWRhc2Rfc3RhdGVfYmFzaWNfdG9fa25vd24oZGV2aWNlKTsKIAkKQEAgLTUyMCwzMyArNTQxLDI5IEBACiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCiAJLyogU2FuaXR5IGNoZWNrcyAqLwotCWlmICggbWFnaWMgPT0gTlVMTCB8fCBkYXRhc2l6ZSA+IFBBR0VfU0laRSB8fAotCSAgICAgKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpID4gUEFHRV9TSVpFKQotCQlCVUcoKTsKKwlCVUdfT04oIG1hZ2ljID09IE5VTEwgfHwgZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwKKwkgICAgIChjcGxlbmd0aCpzaXplb2Yoc3RydWN0IGNjdzEpKSA+IFBBR0VfU0laRSk7CiAKLQljcXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9jY3dfcmVxKSwgR0ZQX0FUT01JQyk7CisJY3FyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfY2N3X3JlcSksIEdGUF9BVE9NSUMpOwogCWlmIChjcXIgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JbWVtc2V0KGNxciwgMCwgc2l6ZW9mKHN0cnVjdCBkYXNkX2Njd19yZXEpKTsKIAljcXItPmNwYWRkciA9IE5VTEw7CiAJaWYgKGNwbGVuZ3RoID4gMCkgewotCQljcXItPmNwYWRkciA9IGttYWxsb2MoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSwKKwkJY3FyLT5jcGFkZHIgPSBrY2FsbG9jKGNwbGVuZ3RoLCBzaXplb2Yoc3RydWN0IGNjdzEpLAogCQkJCSAgICAgIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKIAkJaWYgKGNxci0+Y3BhZGRyID09IE5VTEwpIHsKIAkJCWtmcmVlKGNxcik7CiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJfQotCQltZW1zZXQoY3FyLT5jcGFkZHIsIDAsIGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpOwogCX0KIAljcXItPmRhdGEgPSBOVUxMOwogCWlmIChkYXRhc2l6ZSA+IDApIHsKLQkJY3FyLT5kYXRhID0ga21hbGxvYyhkYXRhc2l6ZSwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOworCQljcXItPmRhdGEgPSBremFsbG9jKGRhdGFzaXplLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CiAJCWlmIChjcXItPmRhdGEgPT0gTlVMTCkgewogCQkJa2ZyZWUoY3FyLT5jcGFkZHIpOwogCQkJa2ZyZWUoY3FyKTsKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCQl9Ci0JCW1lbXNldChjcXItPmRhdGEsIDAsIGRhdGFzaXplKTsKIAl9CiAJc3RybmNweSgoY2hhciAqKSAmY3FyLT5tYWdpYywgbWFnaWMsIDQpOwogCUFTQ0VCQygoY2hhciAqKSAmY3FyLT5tYWdpYywgNCk7CkBAIC01NjUsOSArNTgyLDggQEAKIAlpbnQgc2l6ZTsKIAogCS8qIFNhbml0eSBjaGVja3MgKi8KLQlpZiAoIG1hZ2ljID09IE5VTEwgfHwgZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwKLQkgICAgIChjcGxlbmd0aCpzaXplb2Yoc3RydWN0IGNjdzEpKSA+IFBBR0VfU0laRSkKLQkJQlVHKCk7CisJQlVHX09OKCBtYWdpYyA9PSBOVUxMIHx8IGRhdGFzaXplID4gUEFHRV9TSVpFIHx8CisJICAgICAoY3BsZW5ndGgqc2l6ZW9mKHN0cnVjdCBjY3cxKSkgPiBQQUdFX1NJWkUpOwogCiAJc2l6ZSA9IChzaXplb2Yoc3RydWN0IGRhc2RfY2N3X3JlcSkgKyA3TCkgJiAtOEw7CiAJaWYgKGNwbGVuZ3RoID4gMCkKQEAgLTg3MSw4ICs4ODcsOCBAQAogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKIAotCS8qIGZpcnN0IG9mIGFsbCBjYWxsIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyAqLwotCWRhc2Rfd3JpdGVfZWVyX3RyaWdnZXIoREFTRF9FRVJfU1RBVEVDSEFOR0UsIGRldmljZSwgTlVMTCk7CisJLyogRmlyc3Qgb2YgYWxsIHN0YXJ0IHNlbnNlIHN1YnN5c3RlbSBzdGF0dXMgcmVxdWVzdC4gKi8KKwlkYXNkX2Vlcl9zbnNzKGRldmljZSk7CiAKIAlkZXZpY2UtPnN0b3BwZWQgJj0gfkRBU0RfU1RPUFBFRF9QRU5ESU5HOwogCkBAIC0xMDk0LDEwICsxMTEwLDEwIEBACiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAotCQkvKiBmaXJzdCBvZiBhbGwgY2FsbCBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcgKi8KLQkJaWYgKGRldmljZS0+ZWVyICYmIGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0ZBSUxFRCkgewotCQkJZGFzZF93cml0ZV9lZXJfdHJpZ2dlcihEQVNEX0VFUl9GQVRBTEVSUk9SLAotCQkJCQkgICAgICAgZGV2aWNlLCBjcXIpOworCQkvKiBGaXJzdCBvZiBhbGwgY2FsbCBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcuICovCisJCWlmIChkYXNkX2Vlcl9lbmFibGVkKGRldmljZSkgJiYKKwkJICAgIGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0ZBSUxFRCkgeworCQkJZGFzZF9lZXJfd3JpdGUoZGV2aWNlLCBjcXIsIERBU0RfRUVSX0ZBVEFMRVJST1IpOwogCiAJCQkvKiByZXN0YXJ0IHJlcXVlc3QgICovCiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKQEAgLTEyNDQsNyArMTI2MCw3IEBACiAgICAgICAgIC8qIGNoZWNrIEZBSUxGQVNUICovCiAJaWYgKGRldmljZS0+c3RvcHBlZCAmIH5EQVNEX1NUT1BQRURfUEVORElORyAmJgogCSAgICB0ZXN0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpICYmCi0JICAgICghZGV2aWNlLT5lZXIpKSB7CisJICAgICghZGFzZF9lZXJfZW5hYmxlZChkZXZpY2UpKSkgewogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAkJZGFzZF9zY2hlZHVsZV9iaChkZXZpY2UpOwogCX0KQEAgLTE3MzgsNyArMTc1NCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChkZXZpY2UtPnN0YXRlIDwgREFTRF9TVEFURV9CQVNJQykgeworCWlmIChkZXZpY2UtPnN0YXRlIDw9IERBU0RfU1RBVEVfQkFTSUMpIHsKIAkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIgJXMiLAogCQkJICAgICAgIiBDYW5ub3Qgb3BlbiB1bnJlY29nbml6ZWQgZGV2aWNlIik7CiAJCXJjID0gLUVOT0RFVjsKQEAgLTE4MDMsNyArMTgxOSw3IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlkYXNkX3Byb2NfZXhpdCgpOwogI2VuZGlmCi0JZGFzZF9pb2N0bF9leGl0KCk7CisJZGFzZF9lZXJfZXhpdCgpOwogICAgICAgICBpZiAoZGFzZF9wYWdlX2NhY2hlICE9IE5VTEwpIHsKIAkJa21lbV9jYWNoZV9kZXN0cm95KGRhc2RfcGFnZV9jYWNoZSk7CiAJCWRhc2RfcGFnZV9jYWNoZSA9IE5VTEw7CkBAIC0xODgwLDkgKzE4OTYsMTAgQEAKICAqLwogaW50CiBkYXNkX2dlbmVyaWNfc2V0X29ubGluZSAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCi0JCQkgc3RydWN0IGRhc2RfZGlzY2lwbGluZSAqZGlzY2lwbGluZSkKKwkJCSBzdHJ1Y3QgZGFzZF9kaXNjaXBsaW5lICpiYXNlX2Rpc2NpcGxpbmUpCiAKIHsKKwlzdHJ1Y3QgZGFzZF9kaXNjaXBsaW5lICpkaXNjaXBsaW5lOwogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCWludCByYzsKIApAQCAtMTg5MCw2ICsxOTA3LDcgQEAKIAlpZiAoSVNfRVJSKGRldmljZSkpCiAJCXJldHVybiBQVFJfRVJSKGRldmljZSk7CiAKKwlkaXNjaXBsaW5lID0gYmFzZV9kaXNjaXBsaW5lOwogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1VTRURJQUcpIHsKIAkgIAlpZiAoIWRhc2RfZGlhZ19kaXNjaXBsaW5lX3BvaW50ZXIpIHsKIAkJICAgICAgICBwcmludGsgKEtFUk5fV0FSTklORwpAQCAtMTkwMSw2ICsxOTE5LDE2IEBACiAJCX0KIAkJZGlzY2lwbGluZSA9IGRhc2RfZGlhZ19kaXNjaXBsaW5lX3BvaW50ZXI7CiAJfQorCWlmICghdHJ5X21vZHVsZV9nZXQoYmFzZV9kaXNjaXBsaW5lLT5vd25lcikpIHsKKwkJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRpc2NpcGxpbmUtPm93bmVyKSkgeworCQltb2R1bGVfcHV0KGJhc2VfZGlzY2lwbGluZS0+b3duZXIpOworCQlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldmljZS0+YmFzZV9kaXNjaXBsaW5lID0gYmFzZV9kaXNjaXBsaW5lOwogCWRldmljZS0+ZGlzY2lwbGluZSA9IGRpc2NpcGxpbmU7CiAKIAlyYyA9IGRpc2NpcGxpbmUtPmNoZWNrX2RldmljZShkZXZpY2UpOwpAQCAtMTkwOSw2ICsxOTM3LDggQEAKIAkJCSJkYXNkX2dlbmVyaWMgY291bGRuJ3Qgb25saW5lIGRldmljZSAlcyAiCiAJCQkid2l0aCBkaXNjaXBsaW5lICVzIHJjPSVpXG4iLAogCQkJY2Rldi0+ZGV2LmJ1c19pZCwgZGlzY2lwbGluZS0+bmFtZSwgcmMpOworCQltb2R1bGVfcHV0KGRpc2NpcGxpbmUtPm93bmVyKTsKKwkJbW9kdWxlX3B1dChiYXNlX2Rpc2NpcGxpbmUtPm93bmVyKTsKIAkJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybiByYzsKIAl9CkBAIC0xOTg2LDggKzIwMTYsOCBAQAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENJT19HT05FOgogCWNhc2UgQ0lPX05PX1BBVEg6Ci0JCS8qIGZpcnN0IG9mIGFsbCBjYWxsIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyAqLwotCQlkYXNkX3dyaXRlX2Vlcl90cmlnZ2VyKERBU0RfRUVSX05PUEFUSCwgZGV2aWNlLCBOVUxMKTsKKwkJLyogRmlyc3Qgb2YgYWxsIGNhbGwgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nLiAqLworCQlkYXNkX2Vlcl93cml0ZShkZXZpY2UsIE5VTEwsIERBU0RfRUVSX05PUEFUSCk7CiAKIAkJaWYgKGRldmljZS0+c3RhdGUgPCBEQVNEX1NUQVRFX0JBU0lDKQogCQkJYnJlYWs7CkBAIC0yMDQ2LDUwICsyMDc2LDYgQEAKIAlwdXRfZHJpdmVyKGRydik7CiB9CiAKLS8qCi0gKiBub3RpZmljYXRpb25zIGZvciBleHRlbmRlZCBlcnJvciByZXBvcnRzCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmRhc2RfZWVyX2NoYWluOwotCi1pbnQKLWRhc2RfcmVnaXN0ZXJfZWVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZkYXNkX2Vlcl9jaGFpbiwgbmIpOwotfQotCi1pbnQKLWRhc2RfdW5yZWdpc3Rlcl9lZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmZGFzZF9lZXJfY2hhaW4sIG5iKTsKLX0KLQotLyoKLSAqIE5vdGlmeSB0aGUgcmVnaXN0ZXJlZCBlcnJvciByZXBvcnRpbmcgbW9kdWxlIG9mIGEgcHJvYmxlbQotICovCi12b2lkCi1kYXNkX3dyaXRlX2Vlcl90cmlnZ2VyKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCi0JCSAgICAgICBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIpCi17Ci0JaWYgKGRldmljZS0+ZWVyKSB7Ci0JCXN0cnVjdCBkYXNkX2Vlcl90cmlnZ2VyIHRlbXA7Ci0JCXRlbXAuaWQgPSBpZDsKLQkJdGVtcC5kZXZpY2UgPSBkZXZpY2U7Ci0JCXRlbXAuY3FyID0gY3FyOwotCQlub3RpZmllcl9jYWxsX2NoYWluKCZkYXNkX2Vlcl9jaGFpbiwgREFTRF9FRVJfVFJJR0dFUiwKLQkJCQkgICAgKHZvaWQgKikmdGVtcCk7Ci0JfQotfQotCi0vKgotICogVGVsbCB0aGUgcmVnaXN0ZXJlZCBlcnJvciByZXBvcnRpbmcgbW9kdWxlIHRvIGRpc2FibGUgZXJyb3IgcmVwb3J0aW5nIGZvcgotICogYSBnaXZlbiBkZXZpY2UgYW5kIHRvIGNsZWFudXAgYW55IHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIG9uIHRoYXQgZGV2aWNlLgotICovCi1zdGF0aWMgdm9pZAotZGFzZF9kaXNhYmxlX2VlcihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKLXsKLQlub3RpZmllcl9jYWxsX2NoYWluKCZkYXNkX2Vlcl9jaGFpbiwgREFTRF9FRVJfRElTQUJMRSwgKHZvaWQgKilkZXZpY2UpOwotfQotCiAKIHN0YXRpYyBpbnQgX19pbml0CiBkYXNkX2luaXQodm9pZCkKQEAgLTIxMjMsNyArMjEwOSw3IEBACiAJcmMgPSBkYXNkX3BhcnNlKCk7CiAJaWYgKHJjKQogCQlnb3RvIGZhaWxlZDsKLQlyYyA9IGRhc2RfaW9jdGxfaW5pdCgpOworCXJjID0gZGFzZF9lZXJfaW5pdCgpOwogCWlmIChyYykKIAkJZ290byBmYWlsZWQ7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTIxNzIsMTEgKzIxNTgsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZW5lcmljX3NldF9vZmZsaW5lKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2VuZXJpY19hdXRvX29ubGluZSk7CiAKLUVYUE9SVF9TWU1CT0woZGFzZF9yZWdpc3Rlcl9lZXJfbm90aWZpZXIpOwotRVhQT1JUX1NZTUJPTChkYXNkX3VucmVnaXN0ZXJfZWVyX25vdGlmaWVyKTsKLUVYUE9SVF9TWU1CT0woZGFzZF93cml0ZV9lZXJfdHJpZ2dlcik7Ci0KLQogLyoKICAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgogICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCBjODExMzgwLi4yZWQ1MTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTExMDksOCArMTEwOSw4IEBACiAJCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKIAkJCQkgICAgIkZPUk1BVCBGIC0gVm9sdW1lIGlzIHN1c3BlbmRlZCBkdXBsZXgiKTsKIAkJCS8qIGNhbGwgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIChFRVIpICovCi0JCQlkYXNkX3dyaXRlX2Vlcl90cmlnZ2VyKERBU0RfRUVSX1BQUkNTVVNQRU5ELCBkZXZpY2UsCi0JCQkJCSAgICAgICBlcnAtPnJlZmVycyk7CisJCQlkYXNkX2Vlcl93cml0ZShkZXZpY2UsIGVycC0+cmVmZXJzLAorCQkJCSAgICAgICBEQVNEX0VFUl9QUFJDU1VTUEVORCk7CiAJCQlicmVhazsKIAkJY2FzZSAweDBDOgogCQkJREVWX01FU1NBR0UoS0VSTl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9jbWIuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2NtYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODhmNzNlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2NtYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBMaW51eCBvbiB6U2VyaWVzIENoYW5uZWwgTWVhc3VyZW1lbnQgRmFjaWxpdHkgc3VwcG9ydAotICogIChkYXNkIGRldmljZSBkcml2ZXIgaW50ZXJmYWNlKQotICoKLSAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCi0gKgotICogQXV0aG9yOiBBcm5kIEJlcmdtYW5uIDxhcm5kYkBkZS5pYm0uY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KLSNpbmNsdWRlIDxhc20vY21iLmg+Ci0KLSNpbmNsdWRlICJkYXNkX2ludC5oIgotCi1zdGF0aWMgaW50Ci1kYXNkX2lvY3RsX2NtZl9lbmFibGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCi17Ci0Jc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7Ci0KLQlkZXZpY2UgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGVuYWJsZV9jbWYoZGV2aWNlLT5jZGV2KTsKLX0KLQotc3RhdGljIGludAotZGFzZF9pb2N0bF9jbWZfZGlzYWJsZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKLXsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKLQotCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gZGlzYWJsZV9jbWYoZGV2aWNlLT5jZGV2KTsKLX0KLQotc3RhdGljIGludAotZGFzZF9pb2N0bF9yZWFkYWxsX2NtYihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKLXsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3QgY21iZGF0YSBfX3VzZXIgKnVkYXRhOwotCXN0cnVjdCBjbWJkYXRhIGRhdGE7Ci0Jc2l6ZV90IHNpemU7Ci0JaW50IHJldDsKLQotCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JdWRhdGEgPSAodm9pZCBfX3VzZXIgKikgYXJnczsKLQlzaXplID0gX0lPQ19TSVpFKG5vKTsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWRhdGEsIHNpemUpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXQgPSBjbWZfcmVhZGFsbChkZXZpY2UtPmNkZXYsICZkYXRhKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWlmIChjb3B5X3RvX3VzZXIodWRhdGEsICZkYXRhLCBtaW4oc2l6ZSwgc2l6ZW9mKCp1ZGF0YSkpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIG1vZHVsZSBpbml0aWFsaXphdGlvbiBiZWxvdyBoZXJlLiBkYXNkIGFscmVhZHkgcHJvdmlkZXMgYSBtZWNoYW5pc20KLSAqIHRvIGR5bmFtaWNhbGx5IHJlZ2lzdGVyIGlvY3RsIGZ1bmN0aW9ucywgc28gd2Ugc2ltcGx5IHVzZSB0aGlzLiAqLwotc3RhdGljIGlubGluZSBpbnQKLWlvY3RsX3JlZyh1bnNpZ25lZCBpbnQgbm8sIGRhc2RfaW9jdGxfZm5fdCBoYW5kbGVyKQotewotCXJldHVybiBkYXNkX2lvY3RsX25vX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBubywgaGFuZGxlcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaW9jdGxfdW5yZWcodW5zaWduZWQgaW50IG5vLCBkYXNkX2lvY3RsX2ZuX3QgaGFuZGxlcikKLXsKLQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIG5vLCBoYW5kbGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWRhc2RfY21mX2V4aXQodm9pZCkKLXsKLQlpb2N0bF91bnJlZyhCSU9EQVNEQ01GRU5BQkxFLCAgZGFzZF9pb2N0bF9jbWZfZW5hYmxlKTsKLQlpb2N0bF91bnJlZyhCSU9EQVNEQ01GRElTQUJMRSwgZGFzZF9pb2N0bF9jbWZfZGlzYWJsZSk7Ci0JaW9jdGxfdW5yZWcoQklPREFTRFJFQURBTExDTUIsIGRhc2RfaW9jdGxfcmVhZGFsbF9jbWIpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdAotZGFzZF9jbWZfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0JcmV0ID0gaW9jdGxfcmVnIChCSU9EQVNEQ01GRU5BQkxFLCBkYXNkX2lvY3RsX2NtZl9lbmFibGUpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCXJldCA9IGlvY3RsX3JlZyAoQklPREFTRENNRkRJU0FCTEUsIGRhc2RfaW9jdGxfY21mX2Rpc2FibGUpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCXJldCA9IGlvY3RsX3JlZyAoQklPREFTRFJFQURBTExDTUIsIGRhc2RfaW9jdGxfcmVhZGFsbF9jbWIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JcmV0dXJuIDA7Ci1lcnI6Ci0JZGFzZF9jbWZfZXhpdCgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotbW9kdWxlX2luaXQoZGFzZF9jbWZfaW5pdCk7Ci1tb2R1bGVfZXhpdChkYXNkX2NtZl9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiQXJuZCBCZXJnbWFubiA8YXJuZGJAZGUuaWJtLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiY2hhbm5lbCBtZWFzdXJlbWVudCBmYWNpbGl0eSBpbnRlcmZhY2UgZm9yIGRhc2RcbiIKLQkJICAgIkNvcHlyaWdodCAyMDAzIElCTSBDb3Jwb3JhdGlvblxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDE2MjliMjcuLjJmNzIwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNjksNiArNzAsOCBAQAogICogc3RyaW5ncyB3aGVuIHJ1bm5pbmcgYXMgYSBtb2R1bGUuCiAgKi8KIHN0YXRpYyBjaGFyICpkYXNkWzI1Nl07Cittb2R1bGVfcGFyYW1fYXJyYXkoZGFzZCwgY2hhcnAsIE5VTEwsIDApOworCiAvKgogICogU2luZ2xlIHNwaW5sb2NrIHRvIHByb3RlY3QgZGV2bWFwIHN0cnVjdHVyZXMgYW5kIGxpc3RzLgogICovCkBAIC03MTUsMTAgKzcxOCw1MSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoZGlzY2lwbGluZSwgMDQ0NCwgZGFzZF9kaXNjaXBsaW5lX3Nob3csIE5VTEwpOwogCisvKgorICogZXh0ZW5kZWQgZXJyb3ItcmVwb3J0aW5nCisgKi8KK3N0YXRpYyBzc2l6ZV90CitkYXNkX2Vlcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKwlpbnQgZWVyX2ZsYWc7CisKKwlkZXZtYXAgPSBkYXNkX2ZpbmRfYnVzaWQoZGV2LT5idXNfaWQpOworCWlmICghSVNfRVJSKGRldm1hcCkgJiYgZGV2bWFwLT5kZXZpY2UpCisJCWVlcl9mbGFnID0gZGFzZF9lZXJfZW5hYmxlZChkZXZtYXAtPmRldmljZSk7CisJZWxzZQorCQllZXJfZmxhZyA9IDA7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCBlZXJfZmxhZyA/ICIxXG4iIDogIjBcbiIpOworfQorCitzdGF0aWMgc3NpemVfdAorZGFzZF9lZXJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisJaW50IHJjOworCisJZGV2bWFwID0gZGFzZF9kZXZtYXBfZnJvbV9jZGV2KHRvX2Njd2RldihkZXYpKTsKKwlpZiAoSVNfRVJSKGRldm1hcCkpCisJCXJldHVybiBQVFJfRVJSKGRldm1hcCk7CisJaWYgKCFkZXZtYXAtPmRldmljZSkKKwkJcmV0dXJuIGNvdW50OworCWlmIChidWZbMF0gPT0gJzEnKSB7CisJCXJjID0gZGFzZF9lZXJfZW5hYmxlKGRldm1hcC0+ZGV2aWNlKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCX0gZWxzZQorCQlkYXNkX2Vlcl9kaXNhYmxlKGRldm1hcC0+ZGV2aWNlKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlZXJfZW5hYmxlZCwgMDY0NCwgZGFzZF9lZXJfc2hvdywgZGFzZF9lZXJfc3RvcmUpOworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRhc2RfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfcmVhZG9ubHkuYXR0ciwKIAkmZGV2X2F0dHJfZGlzY2lwbGluZS5hdHRyLAogCSZkZXZfYXR0cl91c2VfZGlhZy5hdHRyLAorCSZkZXZfYXR0cl9lZXJfZW5hYmxlZC5hdHRyLAogCU5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggODIyZTJhMi4uZWUwOWVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMTIyNywxOSArMTIyNywxNCBAQAogICogKHNlZSBkYXNkX2Vja2RfcmVzZXJ2ZSkgZGV2aWNlLgogICovCiBzdGF0aWMgaW50Ci1kYXNkX2Vja2RfcmVsZWFzZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKK2Rhc2RfZWNrZF9yZWxlYXNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JZGV2aWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCWlmIChkZXZpY2UgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAogCQkJCSAgIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewpAQCAtMTI3MiwxOSArMTI2NywxNCBAQAogICogdGhlIGludGVycnVwdCBpcyBvdXRzdGFuZGluZyBmb3IgYSBjZXJ0YWluIHRpbWUuIAogICovCiBzdGF0aWMgaW50Ci1kYXNkX2Vja2RfcmVzZXJ2ZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKK2Rhc2RfZWNrZF9yZXNlcnZlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JZGV2aWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCWlmIChkZXZpY2UgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChkYXNkX2Vja2RfZGlzY2lwbGluZS5uYW1lLAogCQkJCSAgIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewpAQCAtMTMxNiwxOSArMTMwNiwxNCBAQAogICogKHVuY29uZGl0aW9uYWwgcmVzZXJ2ZSkKICAqLwogc3RhdGljIGludAotZGFzZF9lY2tkX3N0ZWFsX2xvY2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCitkYXNkX2Vja2Rfc3RlYWxfbG9jayhzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoZGV2aWNlID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKIAkJCQkgICAxLCAzMiwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKQEAgLTEzNTgsMTkgKzEzNDMsMTQgQEAKICAqIFJlYWQgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcwogICovCiBzdGF0aWMgaW50Ci1kYXNkX2Vja2RfcGVyZm9ybWFuY2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCitkYXNkX2Vja2RfcGVyZm9ybWFuY2Uoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsIHZvaWQgX191c2VyICphcmdwKQogewotCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBkYXNkX3BzZl9wcnNzZF9kYXRhICpwcnNzZHA7CiAJc3RydWN0IGRhc2RfcnNzZF9wZXJmX3N0YXRzX3QgKnN0YXRzOwogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlzdHJ1Y3QgY2N3MSAqY2N3OwogCWludCByYzsKIAotCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoZGV2aWNlID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoZGFzZF9lY2tkX2Rpc2NpcGxpbmUubmFtZSwKIAkJCQkgICAxIC8qIFBTRiAqLyAgKyAxIC8qIFJTU0QgKi8gLAogCQkJCSAgIChzaXplb2YgKHN0cnVjdCBkYXNkX3BzZl9wcnNzZF9kYXRhKSArCkBAIC0xNDE0LDggKzEzOTQsOSBAQAogCQkvKiBQcmVwYXJlIGZvciBSZWFkIFN1YnN5c3RlbSBEYXRhICovCiAJCXByc3NkcCA9IChzdHJ1Y3QgZGFzZF9wc2ZfcHJzc2RfZGF0YSAqKSBjcXItPmRhdGE7CiAJCXN0YXRzID0gKHN0cnVjdCBkYXNkX3Jzc2RfcGVyZl9zdGF0c190ICopIChwcnNzZHAgKyAxKTsKLQkJcmMgPSBjb3B5X3RvX3VzZXIoKGxvbmcgX191c2VyICopIGFyZ3MsIChsb25nICopIHN0YXRzLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBkYXNkX3Jzc2RfcGVyZl9zdGF0c190KSk7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgc3RhdHMsCisJCQkJIHNpemVvZihzdHJ1Y3QgZGFzZF9yc3NkX3BlcmZfc3RhdHNfdCkpKQorCQkJcmMgPSAtRUZBVUxUOwogCX0KIAlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBjcXItPmRldmljZSk7CiAJcmV0dXJuIHJjOwpAQCAtMTQyNiwyNyArMTQwNywyMiBAQAogICogUmV0dXJuZXMgdGhlIGNhY2hlIGF0dHJpYnV0ZXMgdXNlZCBpbiBEZWZpbmUgRXh0ZW5kIChERSkuCiAgKi8KIHN0YXRpYyBpbnQKLWRhc2RfZWNrZF9nZXRfYXR0cmliIChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKK2Rhc2RfZWNrZF9nZXRfYXR0cmliKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKLSAgICAgICAgc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwotICAgICAgICBzdHJ1Y3QgYXR0cmliX2RhdGFfdCBhdHRyaWI7CisJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlID0KKwkJKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKWRldmljZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYXR0cmliX2RhdGFfdCBhdHRyaWIgPSBwcml2YXRlLT5hdHRyaWI7CiAJaW50IHJjOwogCiAgICAgICAgIGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVBQ0NFUzsKLSAgICAgICAgaWYgKCFhcmdzKQorCWlmICghYXJncCkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKIAotICAgICAgICBkZXZpY2UgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgIGlmIChkZXZpY2UgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLQotICAgICAgICBwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7Ci0gICAgICAgIGF0dHJpYiA9IHByaXZhdGUtPmF0dHJpYjsKLQotICAgICAgICByYyA9IGNvcHlfdG9fdXNlcigobG9uZyBfX3VzZXIgKikgYXJncywgKGxvbmcgKikgJmF0dHJpYiwKLQkJCSAgc2l6ZW9mIChzdHJ1Y3QgYXR0cmliX2RhdGFfdCkpOworCXJjID0gMDsKKwlpZiAoY29weV90b191c2VyKGFyZ3AsIChsb25nICopICZhdHRyaWIsCisJCQkgc2l6ZW9mIChzdHJ1Y3QgYXR0cmliX2RhdGFfdCkpKQorCQlyYyA9IC1FRkFVTFQ7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNDU2LDI2ICsxNDMyLDE5IEBACiAgKiBTdG9yZXMgdGhlIGF0dHJpYnV0ZXMgZm9yIGNhY2hlIG9wZXJhdGlvbiB0byBiZSB1c2VkIGluIERlZmluZSBFeHRlbmQgKERFKS4KICAqLwogc3RhdGljIGludAotZGFzZF9lY2tkX3NldF9hdHRyaWIoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCitkYXNkX2Vja2Rfc2V0X2F0dHJpYihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7Ci0Jc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7Ci0Jc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOworCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZSA9CisJCShzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKilkZXZpY2UtPnByaXZhdGU7CiAJc3RydWN0IGF0dHJpYl9kYXRhX3QgYXR0cmliOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKLQlpZiAoIWFyZ3MpCisJaWYgKCFhcmdwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoZGV2aWNlID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhdHRyaWIsICh2b2lkIF9fdXNlciAqKSBhcmdzLAotCQkJICAgc2l6ZW9mIChzdHJ1Y3QgYXR0cmliX2RhdGFfdCkpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZhdHRyaWIsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgYXR0cmliX2RhdGFfdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCXByaXZhdGUtPmF0dHJpYiA9IGF0dHJpYjsKIAogCURFVl9NRVNTQUdFKEtFUk5fSU5GTywgZGV2aWNlLApAQCAtMTQ4NCw2ICsxNDUzLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2Rhc2RfZWNrZF9pb2N0bChzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZ3ApCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEJJT0RBU0RHQVRUUjoKKwkJcmV0dXJuIGRhc2RfZWNrZF9nZXRfYXR0cmliKGRldmljZSwgYXJncCk7CisJY2FzZSBCSU9EQVNEU0FUVFI6CisJCXJldHVybiBkYXNkX2Vja2Rfc2V0X2F0dHJpYihkZXZpY2UsIGFyZ3ApOworCWNhc2UgQklPREFTRFBTUkQ6CisJCXJldHVybiBkYXNkX2Vja2RfcGVyZm9ybWFuY2UoZGV2aWNlLCBhcmdwKTsKKwljYXNlIEJJT0RBU0RSTFNFOgorCQlyZXR1cm4gZGFzZF9lY2tkX3JlbGVhc2UoZGV2aWNlKTsKKwljYXNlIEJJT0RBU0RSU1JWOgorCQlyZXR1cm4gZGFzZF9lY2tkX3Jlc2VydmUoZGV2aWNlKTsKKwljYXNlIEJJT0RBU0RTTENLOgorCQlyZXR1cm4gZGFzZF9lY2tkX3N0ZWFsX2xvY2soZGV2aWNlKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KK30KKwogLyoKICAqIFByaW50IHNlbnNlIGRhdGEgYW5kIHJlbGF0ZWQgY2hhbm5lbCBwcm9ncmFtLgogICogUGFydHMgYXJlIHByaW50ZWQgYmVjYXVzZSBwcmludGsgYnVmZmVyIGlzIG9ubHkgMTAyNCBieXRlcy4KQEAgLTE2NDIsNiArMTYzMiw3IEBACiAJLmZyZWVfY3AgPSBkYXNkX2Vja2RfZnJlZV9jcCwKIAkuZHVtcF9zZW5zZSA9IGRhc2RfZWNrZF9kdW1wX3NlbnNlLAogCS5maWxsX2luZm8gPSBkYXNkX2Vja2RfZmlsbF9pbmZvLAorCS5pb2N0bCA9IGRhc2RfZWNrZF9pb2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC0xNjQ5LDU5ICsxNjQwLDE4IEBACiB7CiAJaW50IHJldDsKIAotCWRhc2RfaW9jdGxfbm9fcmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RHQVRUUiwKLQkJCSAgICAgICBkYXNkX2Vja2RfZ2V0X2F0dHJpYik7Ci0JZGFzZF9pb2N0bF9ub19yZWdpc3RlcihUSElTX01PRFVMRSwgQklPREFTRFNBVFRSLAotCQkJICAgICAgIGRhc2RfZWNrZF9zZXRfYXR0cmliKTsKLQlkYXNkX2lvY3RsX25vX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBCSU9EQVNEUFNSRCwKLQkJCSAgICAgICBkYXNkX2Vja2RfcGVyZm9ybWFuY2UpOwotCWRhc2RfaW9jdGxfbm9fcmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RSTFNFLAotCQkJICAgICAgIGRhc2RfZWNrZF9yZWxlYXNlKTsKLQlkYXNkX2lvY3RsX25vX3JlZ2lzdGVyKFRISVNfTU9EVUxFLCBCSU9EQVNEUlNSViwKLQkJCSAgICAgICBkYXNkX2Vja2RfcmVzZXJ2ZSk7Ci0JZGFzZF9pb2N0bF9ub19yZWdpc3RlcihUSElTX01PRFVMRSwgQklPREFTRFNMQ0ssCi0JCQkgICAgICAgZGFzZF9lY2tkX3N0ZWFsX2xvY2spOwotCiAJQVNDRUJDKGRhc2RfZWNrZF9kaXNjaXBsaW5lLmViY25hbWUsIDQpOwogCiAJcmV0ID0gY2N3X2RyaXZlcl9yZWdpc3RlcigmZGFzZF9lY2tkX2RyaXZlcik7Ci0JaWYgKHJldCkgewotCQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RHQVRUUiwKLQkJCQkJIGRhc2RfZWNrZF9nZXRfYXR0cmliKTsKLQkJZGFzZF9pb2N0bF9ub191bnJlZ2lzdGVyKFRISVNfTU9EVUxFLCBCSU9EQVNEU0FUVFIsCi0JCQkJCSBkYXNkX2Vja2Rfc2V0X2F0dHJpYik7Ci0JCWRhc2RfaW9jdGxfbm9fdW5yZWdpc3RlcihUSElTX01PRFVMRSwgQklPREFTRFBTUkQsCi0JCQkJCSBkYXNkX2Vja2RfcGVyZm9ybWFuY2UpOwotCQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RSTFNFLAotCQkJCQkgZGFzZF9lY2tkX3JlbGVhc2UpOwotCQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RSU1JWLAotCQkJCQkgZGFzZF9lY2tkX3Jlc2VydmUpOwotCQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RTTENLLAotCQkJCQkgZGFzZF9lY2tkX3N0ZWFsX2xvY2spOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWRhc2RfZ2VuZXJpY19hdXRvX29ubGluZSgmZGFzZF9lY2tkX2RyaXZlcik7Ci0JcmV0dXJuIDA7CisJaWYgKCFyZXQpCisJCWRhc2RfZ2VuZXJpY19hdXRvX29ubGluZSgmZGFzZF9lY2tkX2RyaXZlcik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CiBkYXNkX2Vja2RfY2xlYW51cCh2b2lkKQogewogCWNjd19kcml2ZXJfdW5yZWdpc3RlcigmZGFzZF9lY2tkX2RyaXZlcik7Ci0KLQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RHQVRUUiwKLQkJCQkgZGFzZF9lY2tkX2dldF9hdHRyaWIpOwotCWRhc2RfaW9jdGxfbm9fdW5yZWdpc3RlcihUSElTX01PRFVMRSwgQklPREFTRFNBVFRSLAotCQkJCSBkYXNkX2Vja2Rfc2V0X2F0dHJpYik7Ci0JZGFzZF9pb2N0bF9ub191bnJlZ2lzdGVyKFRISVNfTU9EVUxFLCBCSU9EQVNEUFNSRCwKLQkJCQkgZGFzZF9lY2tkX3BlcmZvcm1hbmNlKTsKLQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RSTFNFLAotCQkJCSBkYXNkX2Vja2RfcmVsZWFzZSk7Ci0JZGFzZF9pb2N0bF9ub191bnJlZ2lzdGVyKFRISVNfTU9EVUxFLCBCSU9EQVNEUlNSViwKLQkJCQkgZGFzZF9lY2tkX3Jlc2VydmUpOwotCWRhc2RfaW9jdGxfbm9fdW5yZWdpc3RlcihUSElTX01PRFVMRSwgQklPREFTRFNMQ0ssCi0JCQkJIGRhc2RfZWNrZF9zdGVhbF9sb2NrKTsKIH0KIAogbW9kdWxlX2luaXQoZGFzZF9lY2tkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCmluZGV4IGUxNWRkNzkuLmFkODUyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19QU0YJCSAweDI3CiAjZGVmaW5lIERBU0RfRUNLRF9DQ1dfUlNTRAkJIDB4M2UKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19MT0NBVEVfUkVDT1JECSAweDQ3Ci0jZGVmaW5lIERBU0RfRUNLRF9DQ1dfU05TUyAgICAgICAgICAgICAgIDB4NTQKKyNkZWZpbmUgREFTRF9FQ0tEX0NDV19TTlNTCQkgMHg1NAogI2RlZmluZSBEQVNEX0VDS0RfQ0NXX0RFRklORV9FWFRFTlQJIDB4NjMKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19XUklURV9NVAkJIDB4ODUKICNkZWZpbmUgREFTRF9FQ0tEX0NDV19SRUFEX01UCQkgMHg4NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYwppbmRleCBmNzBjZDc3Li4yZDk0NmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYwpAQCAtMSwxMSArMSw5IEBACiAvKgotICoJY2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZworICogIENoYXJhY3RlciBkZXZpY2UgZHJpdmVyIGZvciBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcuCiAgKgotICoKLSAqCUNvcHlyaWdodCAoQykgMjAwNSBJQk0gQ29ycG9yYXRpb24KLSAqCWV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyBmb3IgREFTRCBFQ0tEIGRldmljZXMKLSAqCUF1dGhvcihzKTogU3RlZmFuIFdlaW5odWJlciA8d2VpbkBkZS5pYm0uY29tPgotICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgSUJNIENvcnBvcmF0aW9uCisgKiAgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIGZvciBEQVNEIEVDS0QgZGV2aWNlcworICogIEF1dGhvcihzKTogU3RlZmFuIFdlaW5odWJlciA8d2VpbkBkZS5pYm0uY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xNSw5ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgpAQCAtMjcsNDAgKzIzLDMwIEBACiAjaW5jbHVkZSAiZGFzZF9pbnQuaCIKICNpbmNsdWRlICJkYXNkX2Vja2QuaCIKIAotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLU1PRFVMRV9BVVRIT1IoIlN0ZWZhbiBXZWluaHViZXIgPHdlaW5AZGUuaWJtLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiREFTRCBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcgbW9kdWxlIik7Ci0KLQogI2lmZGVmIFBSSU5US19IRUFERVIKICN1bmRlZiBQUklOVEtfSEVBREVSCiAjZW5kaWYJCQkJLyogUFJJTlRLX0hFQURFUiAqLwogI2RlZmluZSBQUklOVEtfSEVBREVSICJkYXNkKGVlcik6IgogCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgdGhlIGludGVybmFsIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBTRUNUSU9OOiB0aGUgaW50ZXJuYWwgYnVmZmVyCisgKi8KIAogLyoKLSAqIFRoZSBpbnRlcm5hbCBidWZmZXIgaXMgbWVhbnQgdG8gc3RvcmUgb2JhcXVlIGJsb2JzIG9mIGRhdGEsIHNvIGl0IGRvZXNuJ3QKLSAqIGtub3cgb2YgaGlnaGVyIGxldmVsIGNvbmNlcHRzIGxpa2UgdHJpZ2dlcnMuCisgKiBUaGUgaW50ZXJuYWwgYnVmZmVyIGlzIG1lYW50IHRvIHN0b3JlIG9iYXF1ZSBibG9icyBvZiBkYXRhLCBzbyBpdCBkb2VzCisgKiBub3Qga25vdyBvZiBoaWdoZXIgbGV2ZWwgY29uY2VwdHMgbGlrZSB0cmlnZ2Vycy4KICAqIEl0IGNvbnNpc3RzIG9mIGEgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgYXJlIHVzZWQgYXMgYSByaW5nYnVmZmVyLiBFYWNoIGRhdGEKICAqIGJsb2IgaXMgc3RvcmVkIGluIGEgc2ltcGxlIHJlY29yZCB0aGF0IGNvbnNpc3RzIG9mIGFuIGludGVnZXIsIHdoaWNoCiAgKiBjb250YWlucyB0aGUgc2l6ZSBvZiB0aGUgZm9sbG93aW5nIGRhdGEsIGFuZCB0aGUgZGF0YSBieXRlcyB0aGVtc2VsZmVzLgogICoKICAqIFRvIGFsbG93IGZvciBtdWx0aXBsZSBpbmRlcGVuZGVudCByZWFkZXJzIHdlIGNyZWF0ZSBvbmUgaW50ZXJuYWwgYnVmZmVyCiAgKiBlYWNoIHRpbWUgdGhlIGRldmljZSBpcyBvcGVuZWQgYW5kIGRlc3Ryb3kgdGhlIGJ1ZmZlciB3aGVuIHRoZSBmaWxlIGlzCi0gKiBjbG9zZWQgYWdhaW4uCisgKiBjbG9zZWQgYWdhaW4uIFRoZSBudW1iZXIgb2YgcGFnZXMgdXNlZCBmb3IgdGhpcyBidWZmZXIgaXMgZGV0ZXJtaW5lZCBieQorICogdGhlIG1vZHVsZSBwYXJtZXRlciBlZXJfcGFnZXMuCiAgKgogICogT25lIHJlY29yZCBjYW4gYmUgd3JpdHRlbiB0byBhIGJ1ZmZlciBieSB1c2luZyB0aGUgZnVuY3Rpb25zCi0gKiAtIGRhc2RfZWVyX3N0YXJ0X3JlY29yZCAob25lIHRpbWUgcGVyIHJlY29yZCB0byB3cml0ZSB0aGUgc2l6ZSB0byB0aGUgYnVmZmVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlc2VydmUgdGhlIHNwYWNlIGZvciB0aGUgZGF0YSkKKyAqIC0gZGFzZF9lZXJfc3RhcnRfcmVjb3JkIChvbmUgdGltZSBwZXIgcmVjb3JkIHRvIHdyaXRlIHRoZSBzaXplIHRvIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBhbmQgcmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIHRoZSBkYXRhKQogICogLSBkYXNkX2Vlcl93cml0ZV9idWZmZXIgKG9uZSBvciBtb3JlIHRpbWVzIHBlciByZWNvcmQgdG8gd3JpdGUgdGhlIGRhdGEpCiAgKiBUaGUgZGF0YSBjYW4gYmUgd3JpdHRlbiBpbiBzZXZlcmFsIHN0ZXBzIGJ1dCB5b3Ugd2lsbCBoYXZlIHRvIGNvbXB1dGUKICAqIHRoZSB0b3RhbCBzaXplIHVwIGZyb250IGZvciB0aGUgaW52b2NhdGlvbiBvZiBkYXNkX2Vlcl9zdGFydF9yZWNvcmQuCkBAIC03MiwxNyArNTgsMTQgQEAKICAqIEJvdGggY2FuIGJlIGRvbmUgYnkKICAqIC0gZGFzZF9lZXJfcmVhZF9idWZmZXIKICAqCi0gKiBGb3IgYWxsIG1lbnRpb25lZCBmdW5jdGlvbnMgeW91IG5lZWQgdG8gZ2V0IHRoZSBidWZmZXJsb2NrIGZpcnN0IGFuZCBrZWVwIGl0Ci0gKiB1bnRpbCBhIGNvbXBsZXRlIHJlY29yZCBpcyB3cml0dGVuIG9yIHJlYWQuCi0gKi8KLQotCi0vKgotICogQWxsZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8ga2VlcCB0cmFjayBvZiBhbiBpbnRlcm5hbCBidWZmZXIgaXMga2VwdCBpbgorICogRm9yIGFsbCBtZW50aW9uZWQgZnVuY3Rpb25zIHlvdSBuZWVkIHRvIGdldCB0aGUgYnVmZmVybG9jayBmaXJzdCBhbmQga2VlcAorICogaXQgdW50aWwgYSBjb21wbGV0ZSByZWNvcmQgaXMgd3JpdHRlbiBvciByZWFkLgorICoKKyAqIEFsbCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8ga2VlcCB0cmFjayBvZiBhbiBpbnRlcm5hbCBidWZmZXIgaXMga2VwdCBpbgogICogYSBzdHJ1Y3QgZWVyYnVmZmVyLiBUaGUgYnVmZmVyIHNwZWNpZmljIHRvIGEgZmlsZSBwb2ludGVyIGlzIHN0cm9yZWQgaW4KICAqIHRoZSBwcml2YXRlX2RhdGEgZmllbGQgb2YgdGhhdCBmaWxlLiBUbyBiZSBhYmxlIHRvIHdyaXRlIGRhdGEgdG8gYWxsCiAgKiBleGlzdGluZyBidWZmZXJzLCBlYWNoIGJ1ZmZlciBpcyBhbHNvIGFkZGVkIHRvIHRoZSBidWZmZXJsaXN0LgotICogSWYgdGhlIHVzZXIgZG9lc24ndCB3YW50IHRvIHJlYWQgYSBjb21wbGV0ZSByZWNvcmQgaW4gb25lIGdvLCB3ZSBoYXZlIHRvCisgKiBJZiB0aGUgdXNlciBkb2VzIG5vdCB3YW50IHRvIHJlYWQgYSBjb21wbGV0ZSByZWNvcmQgaW4gb25lIGdvLCB3ZSBoYXZlIHRvCiAgKiBrZWVwIHRyYWNrIG9mIHRoZSByZXN0IG9mIHRoZSByZWNvcmQuIHJlc2lkdWFsIHN0b3JlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzCiAgKiB0aGF0IGFyZSBzdGlsbCB0byBkZWxpdmVyLiBJZiB0aGUgcmVzdCBvZiB0aGUgcmVjb3JkIGlzIGludmFsaWRhdGVkIGJldHdlZW4KICAqIHR3byByZWFkcyB0aGVuIHJlc2lkdWFsIHdpbGwgYmUgc2V0IHRvIC0xIHNvIHRoYXQgdGhlIG5leHQgcmVhZCB3aWxsIGZhaWwuCkBAIC05Miw2ICs3NSw5IEBACiAgKiB0byBwcm90ZWN0IHRoZSBidWZmZXJsaXN0LgogICovCiAKK3N0YXRpYyBpbnQgZWVyX3BhZ2VzID0gNTsKK21vZHVsZV9wYXJhbShlZXJfcGFnZXMsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKKwogc3RydWN0IGVlcmJ1ZmZlciB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWNoYXIgKipidWZmZXI7CkBAIC0xMDIsNDcgKzg4LDQxIEBACiAJaW50IHJlc2lkdWFsOwogfTsKIAotTElTVF9IRUFEKGJ1ZmZlcmxpc3QpOwotCitzdGF0aWMgTElTVF9IRUFEKGJ1ZmZlcmxpc3QpOwogc3RhdGljIHNwaW5sb2NrX3QgYnVmZmVybG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKLQotREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZGFzZF9lZXJfcmVhZF93YWl0X3F1ZXVlKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChkYXNkX2Vlcl9yZWFkX3dhaXRfcXVldWUpOwogCiAvKgogICogSG93IG1hbnkgZnJlZSBieXRlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBidWZmZXIuCi0gKiBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCBidWZmZXJsb2NrIGhlbGQKKyAqIE5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIGJ1ZmZlcmxvY2sgaGVsZC4KICAqLwotc3RhdGljIGludAotZGFzZF9lZXJfZ2V0X2ZyZWVfYnl0ZXMoc3RydWN0IGVlcmJ1ZmZlciAqZWVyYikKK3N0YXRpYyBpbnQgZGFzZF9lZXJfZ2V0X2ZyZWVfYnl0ZXMoc3RydWN0IGVlcmJ1ZmZlciAqZWVyYikKIHsKLQlpZiAoZWVyYi0+aGVhZCA8IGVlcmItPnRhaWwpIHsKKwlpZiAoZWVyYi0+aGVhZCA8IGVlcmItPnRhaWwpCiAJCXJldHVybiBlZXJiLT50YWlsIC0gZWVyYi0+aGVhZCAtIDE7Ci0JfSBlbHNlCi0JCXJldHVybiBlZXJiLT5idWZmZXJzaXplIC0gZWVyYi0+aGVhZCArIGVlcmItPnRhaWwgLTE7CisJcmV0dXJuIGVlcmItPmJ1ZmZlcnNpemUgLSBlZXJiLT5oZWFkICsgZWVyYi0+dGFpbCAtMTsKIH0KIAogLyoKICAqIEhvdyBtYW55IGJ5dGVzIG9mIGJ1ZmZlciBzcGFjZSBhcmUgdXNlZC4KLSAqIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIGJ1ZmZlcmxvY2sgaGVsZAorICogTmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggYnVmZmVybG9jayBoZWxkLgogICovCi1zdGF0aWMgaW50Ci1kYXNkX2Vlcl9nZXRfZmlsbGVkX2J5dGVzKHN0cnVjdCBlZXJidWZmZXIgKmVlcmIpCitzdGF0aWMgaW50IGRhc2RfZWVyX2dldF9maWxsZWRfYnl0ZXMoc3RydWN0IGVlcmJ1ZmZlciAqZWVyYikKIHsKIAotCWlmIChlZXJiLT5oZWFkID49IGVlcmItPnRhaWwpIHsKKwlpZiAoZWVyYi0+aGVhZCA+PSBlZXJiLT50YWlsKQogCQlyZXR1cm4gZWVyYi0+aGVhZCAtIGVlcmItPnRhaWw7Ci0JfSBlbHNlCi0JCXJldHVybiBlZXJiLT5idWZmZXJzaXplIC0gZWVyYi0+dGFpbCArIGVlcmItPmhlYWQ7CisJcmV0dXJuIGVlcmItPmJ1ZmZlcnNpemUgLSBlZXJiLT50YWlsICsgZWVyYi0+aGVhZDsKIH0KIAogLyoKICAqIFRoZSBkYXNkX2Vlcl93cml0ZV9idWZmZXIgZnVuY3Rpb24ganVzdCBjb3BpZXMgY291bnQgYnl0ZXMgb2YgZGF0YQogICogdG8gdGhlIGJ1ZmZlci4gTWFrZSBzdXJlIHRvIGNhbGwgZGFzZF9lZXJfc3RhcnRfcmVjb3JkIGZpcnN0LCB0bwogICogbWFrZSBzdXJlIHRoYXQgZW5vdWdoIGZyZWUgc3BhY2UgaXMgYXZhaWxhYmxlLgotICogbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggYnVmZmVybG9jayBoZWxkCisgKiBOZWVkcyB0byBiZSBjYWxsZWQgd2l0aCBidWZmZXJsb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyB2b2lkCi1kYXNkX2Vlcl93cml0ZV9idWZmZXIoc3RydWN0IGVlcmJ1ZmZlciAqZWVyYiwgaW50IGNvdW50LCBjaGFyICpkYXRhKQorc3RhdGljIHZvaWQgZGFzZF9lZXJfd3JpdGVfYnVmZmVyKHN0cnVjdCBlZXJidWZmZXIgKmVlcmIsCisJCQkJICBjaGFyICpkYXRhLCBpbnQgY291bnQpCiB7CiAKIAl1bnNpZ25lZCBsb25nIGhlYWRpbmRleCxsb2NhbGhlYWQ7CkBAIC0xNTQsMjUgKzEzNCwyMSBAQAogCXdoaWxlIChyZXN0ID4gMCkgewogIAkJaGVhZGluZGV4ID0gZWVyYi0+aGVhZCAvIFBBR0VfU0laRTsKICAJCWxvY2FsaGVhZCA9IGVlcmItPmhlYWQgJSBQQUdFX1NJWkU7Ci0JCWxlbiA9IG1pbihyZXN0LCAoUEFHRV9TSVpFIC0gbG9jYWxoZWFkKSk7CisJCWxlbiA9IG1pbihyZXN0LCBQQUdFX1NJWkUgLSBsb2NhbGhlYWQpOwogCQltZW1jcHkoZWVyYi0+YnVmZmVyW2hlYWRpbmRleF0rbG9jYWxoZWFkLCBuZXh0ZGF0YSwgbGVuKTsKIAkJbmV4dGRhdGEgKz0gbGVuOwogCQlyZXN0IC09IGxlbjsKIAkJZWVyYi0+aGVhZCArPSBsZW47Ci0JCWlmICggZWVyYi0+aGVhZCA9PSBlZXJiLT5idWZmZXJzaXplICkKKwkJaWYgKGVlcmItPmhlYWQgPT0gZWVyYi0+YnVmZmVyc2l6ZSkKIAkJCWVlcmItPmhlYWQgPSAwOyAvKiB3cmFwIGFyb3VuZCAqLwotCQlpZiAoZWVyYi0+aGVhZCA+IGVlcmItPmJ1ZmZlcnNpemUpIHsKLQkJCU1FU1NBR0UoS0VSTl9FUlIsICIlcyIsICJydW5hd2F5IGJ1ZmZlciBoZWFkLiIpOwotCQkJQlVHKCk7Ci0JCX0KKwkJQlVHX09OKGVlcmItPmhlYWQgPiBlZXJiLT5idWZmZXJzaXplKTsKIAl9CiB9CiAKIC8qCi0gKiBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCBidWZmZXJsb2NrIGhlbGQKKyAqIE5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIGJ1ZmZlcmxvY2sgaGVsZC4KICAqLwotc3RhdGljIGludAotZGFzZF9lZXJfcmVhZF9idWZmZXIoc3RydWN0IGVlcmJ1ZmZlciAqZWVyYiwgaW50IGNvdW50LCBjaGFyICpkYXRhKQorc3RhdGljIGludCBkYXNkX2Vlcl9yZWFkX2J1ZmZlcihzdHJ1Y3QgZWVyYnVmZmVyICplZXJiLCBjaGFyICpkYXRhLCBpbnQgY291bnQpCiB7CiAKIAl1bnNpZ25lZCBsb25nIHRhaWxpbmRleCxsb2NhbHRhaWw7CkBAIC0xODUsMTcgKzE2MSwxNCBAQAogCXdoaWxlIChyZXN0ID4gMCkgewogIAkJdGFpbGluZGV4ID0gZWVyYi0+dGFpbCAvIFBBR0VfU0laRTsKICAJCWxvY2FsdGFpbCA9IGVlcmItPnRhaWwgJSBQQUdFX1NJWkU7Ci0JCWxlbiA9IG1pbihyZXN0LCAoUEFHRV9TSVpFIC0gbG9jYWx0YWlsKSk7Ci0JCW1lbWNweShuZXh0ZGF0YSwgZWVyYi0+YnVmZmVyW3RhaWxpbmRleF0rbG9jYWx0YWlsLCBsZW4pOworCQlsZW4gPSBtaW4ocmVzdCwgUEFHRV9TSVpFIC0gbG9jYWx0YWlsKTsKKwkJbWVtY3B5KG5leHRkYXRhLCBlZXJiLT5idWZmZXJbdGFpbGluZGV4XSArIGxvY2FsdGFpbCwgbGVuKTsKIAkJbmV4dGRhdGEgKz0gbGVuOwogCQlyZXN0IC09IGxlbjsKIAkJZWVyYi0+dGFpbCArPSBsZW47Ci0JCWlmICggZWVyYi0+dGFpbCA9PSBlZXJiLT5idWZmZXJzaXplICkKKwkJaWYgKGVlcmItPnRhaWwgPT0gZWVyYi0+YnVmZmVyc2l6ZSkKIAkJCWVlcmItPnRhaWwgPSAwOyAvKiB3cmFwIGFyb3VuZCAqLwotCQlpZiAoZWVyYi0+dGFpbCA+IGVlcmItPmJ1ZmZlcnNpemUpIHsKLQkJCU1FU1NBR0UoS0VSTl9FUlIsICIlcyIsICJydW5hd2F5IGJ1ZmZlciB0YWlsLiIpOwotCQkJQlVHKCk7Ci0JCX0KKwkJQlVHX09OKGVlcmItPnRhaWwgPiBlZXJiLT5idWZmZXJzaXplKTsKIAl9CiAJcmV0dXJuIGZpbmFsY291bnQ7CiB9CkBAIC0yMDUsMTIgKzE3OCwxMiBAQAogICogaGF2ZSB0byBzdGFydCBieSB1c2luZyB0aGlzIGZ1bmN0aW9uIGZpcnN0LiBJdCB3aWxsIHdyaXRlIHRoZSBudW1iZXIKICAqIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBidWZmZXIuIElmIG5lY2Vzc2FyeSBpdCB3aWxsIHJlbW92ZQogICogb2xkIHJlY29yZHMgdG8gbWFrZSByb29tIGZvciB0aGUgbmV3IG9uZS4KLSAqIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIGJ1ZmZlcmxvY2sgaGVsZAorICogTmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggYnVmZmVybG9jayBoZWxkLgogICovCi1zdGF0aWMgaW50Ci1kYXNkX2Vlcl9zdGFydF9yZWNvcmQoc3RydWN0IGVlcmJ1ZmZlciAqZWVyYiwgaW50IGNvdW50KQorc3RhdGljIGludCBkYXNkX2Vlcl9zdGFydF9yZWNvcmQoc3RydWN0IGVlcmJ1ZmZlciAqZWVyYiwgaW50IGNvdW50KQogewogCWludCB0YWlsY291bnQ7CisKIAlpZiAoY291bnQgKyBzaXplb2YoY291bnQpID4gZWVyYi0+YnVmZmVyc2l6ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJd2hpbGUgKGRhc2RfZWVyX2dldF9mcmVlX2J5dGVzKGVlcmIpIDwgY291bnQgKyBzaXplb2YoY291bnQpKSB7CkBAIC0yMjAsMzkgKzE5MywzNiBAQAogCQkJCWVlcmItPnRhaWwgLT0gZWVyYi0+YnVmZmVyc2l6ZTsKIAkJCWVlcmItPnJlc2lkdWFsID0gLTE7CiAJCX0KLQkJZGFzZF9lZXJfcmVhZF9idWZmZXIoZWVyYiwgc2l6ZW9mKHRhaWxjb3VudCksCi0JCQkJICAgICAoY2hhciopKCZ0YWlsY291bnQpKTsKKwkJZGFzZF9lZXJfcmVhZF9idWZmZXIoZWVyYiwgKGNoYXIgKikgJnRhaWxjb3VudCwKKwkJCQkgICAgIHNpemVvZih0YWlsY291bnQpKTsKIAkJZWVyYi0+dGFpbCArPSB0YWlsY291bnQ7CiAJCWlmIChlZXJiLT50YWlsID49IGVlcmItPmJ1ZmZlcnNpemUpCiAJCQllZXJiLT50YWlsIC09IGVlcmItPmJ1ZmZlcnNpemU7CiAJfQotCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCBzaXplb2YoY291bnQpLCAoY2hhciopKCZjb3VudCkpOworCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCAoY2hhciopICZjb3VudCwgc2l6ZW9mKGNvdW50KSk7CiAKIAlyZXR1cm4gMDsKIH07CiAKIC8qCi0gKiByZWxlYXNlIHBhZ2VzIHRoYXQgYXJlIG5vdCB1c2VkIGFueW1vcmUKKyAqIFJlbGVhc2UgcGFnZXMgdGhhdCBhcmUgbm90IHVzZWQgYW55bW9yZS4KICAqLwotc3RhdGljIHZvaWQKLWRhc2RfZWVyX2ZyZWVfYnVmZmVyX3BhZ2VzKGNoYXIgKipidWYsIGludCBub19wYWdlcykKK3N0YXRpYyB2b2lkIGRhc2RfZWVyX2ZyZWVfYnVmZmVyX3BhZ2VzKGNoYXIgKipidWYsIGludCBub19wYWdlcykKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBub19wYWdlczsgKytpKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZbaV0pOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgbm9fcGFnZXM7IGkrKykKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWZbaV0pOwogfQogCiAvKgotICogYWxsb2NhdGUgYSBuZXcgc2V0IG9mIG1lbW9yeSBwYWdlcworICogQWxsb2NhdGUgYSBuZXcgc2V0IG9mIG1lbW9yeSBwYWdlcy4KICAqLwotc3RhdGljIGludAotZGFzZF9lZXJfYWxsb2NhdGVfYnVmZmVyX3BhZ2VzKGNoYXIgKipidWYsIGludCBub19wYWdlcykKK3N0YXRpYyBpbnQgZGFzZF9lZXJfYWxsb2NhdGVfYnVmZmVyX3BhZ2VzKGNoYXIgKipidWYsIGludCBub19wYWdlcykKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBub19wYWdlczsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG5vX3BhZ2VzOyBpKyspIHsKIAkJYnVmW2ldID0gKGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCQlpZiAoIWJ1ZltpXSkgewogCQkJZGFzZF9lZXJfZnJlZV9idWZmZXJfcGFnZXMoYnVmLCBpKTsKQEAgLTI2Myw5MiArMjMzLDEzIEBACiB9CiAKIC8qCi0gKiBlbXB0eSB0aGUgYnVmZmVyIGJ5IHJlc2V0dGluZyBoZWFkIGFuZCB0YWlsCi0gKiBJbiBjYXNlIHRoZXJlIGlzIGEgaGFsZiByZWFkIGRhdGEgYmxvYiBpbiB0aGUgYnVmZmVyLCB3ZSBzZXQgcmVzaWR1YWwKLSAqIHRvIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgYmxvYiBpcyBsb3N0LgorICogU0VDVElPTjogVGhlIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbmFsaXR5CiAgKi8KLXN0YXRpYyB2b2lkCi1kYXNkX2Vlcl9wdXJnZV9idWZmZXIoc3RydWN0IGVlcmJ1ZmZlciAqZWVyYikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJ1ZmZlcmxvY2ssIGZsYWdzKTsKLQlpZiAoZWVyYi0+cmVzaWR1YWwgPiAwKQotCQllZXJiLT5yZXNpZHVhbCA9IC0xOwotCWVlcmItPnRhaWw9MDsKLQllZXJiLT5oZWFkPTA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVmZmVybG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogc2V0IHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIG5ld3NpemUgaXMgdGhlIG5ldyBudW1iZXIgb2YgcGFnZXMgdG8gYmUgdXNlZAotICogd2UgZG9uJ3QgdHJ5IHRvIGNvcHkgYW55IGRhdGEgYmFjayBhbiBmb3J0aCwgc28gYW55IHJlc2l6ZSB3aWxsIGFsc28gcHVyZ2UKLSAqIHRoZSBidWZmZXIKLSAqLwotc3RhdGljIGludAotZGFzZF9lZXJfcmVzaXplX2J1ZmZlcihzdHJ1Y3QgZWVyYnVmZmVyICplZXJiLCBpbnQgbmV3c2l6ZSkKLXsKLQlpbnQgaSwgb2xkY291bnQsIHJldXNlOwotCWNoYXIgKipuZXc7Ci0JY2hhciAqKm9sZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG5ld3NpemUgPCAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgPT0gbmV3c2l6ZSkgewotCQkvKiBkb2N1bWVudGVkIGJlaGF2aW91ciBpcyB0aGF0IGFueSBzdWNjZXNzZnVsbCBpbnZvY2F0aW9uCi0gICAgICAgICAgICAgICAgICogd2lsbCBwdXJnZSBhbGwgcmVjb3JkcyAqLwotCQlkYXNkX2Vlcl9wdXJnZV9idWZmZXIoZWVyYik7Ci0JCXJldHVybiAwOwotCX0KLQluZXcgPSBrbWFsbG9jKG5ld3NpemUqc2l6ZW9mKGNoYXIqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXcpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV1c2U9bWluKGVlcmItPmJ1ZmZlcl9wYWdlX2NvdW50LCBuZXdzaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgcmV1c2U7ICsraSkgewotCQluZXdbaV0gPSBlZXJiLT5idWZmZXJbaV07Ci0JfQotCWlmIChlZXJiLT5idWZmZXJfcGFnZV9jb3VudCA8IG5ld3NpemUpIHsKLQkJaWYgKGRhc2RfZWVyX2FsbG9jYXRlX2J1ZmZlcl9wYWdlcygKLQkJCSAgICAmbmV3W2VlcmItPmJ1ZmZlcl9wYWdlX2NvdW50XSwKLQkJCSAgICBuZXdzaXplIC0gZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQpKSB7Ci0JCQlrZnJlZShuZXcpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVmZmVybG9jaywgZmxhZ3MpOwotCW9sZCA9IGVlcmItPmJ1ZmZlcjsKLQllZXJiLT5idWZmZXIgPSBuZXc7Ci0JaWYgKGVlcmItPnJlc2lkdWFsID4gMCkKLQkJZWVyYi0+cmVzaWR1YWwgPSAtMTsKLQllZXJiLT50YWlsID0gMDsKLQllZXJiLT5oZWFkID0gMDsKLQlvbGRjb3VudCA9IGVlcmItPmJ1ZmZlcl9wYWdlX2NvdW50OwotCWVlcmItPmJ1ZmZlcl9wYWdlX2NvdW50ID0gbmV3c2l6ZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWZmZXJsb2NrLCBmbGFncyk7Ci0KLQlpZiAob2xkY291bnQgPiBuZXdzaXplKSB7Ci0JCWZvciAoaSA9IG5ld3NpemU7IGkgPCBvbGRjb3VudDsgKytpKSB7Ci0JCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpb2xkW2ldKTsKLQkJfQotCX0KLQlrZnJlZShvbGQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICBUaGUgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgogICogV2hlbiBhIERBU0QgZGV2aWNlIGRyaXZlciB3YW50cyB0byByZXBvcnQgYW4gZXJyb3IsIGl0IGNhbGxzIHRoZQotICogZnVuY3Rpb24gZGFzZF9lZXJfd3JpdGVfdHJpZ2dlciAodmlhIGEgbm90aWZpZXIgbWVjaGFuaXNtKSBhbmQgZ2l2ZXMgdGhlCi0gKiByZXNwZWN0aXZlIHRyaWdnZXIgSUQgYXMgcGFyYW1ldGVyLgotICogQ3VycmVudGx5IHRoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIHRyaWdnZXJzOgorICogZnVuY3Rpb24gZGFzZF9lZXJfd3JpdGUgYW5kIGdpdmVzIHRoZSByZXNwZWN0aXZlIHRyaWdnZXIgSUQgYXMKKyAqIHBhcmFtZXRlci4gQ3VycmVudGx5IHRoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIHRyaWdnZXJzOgogICoKICAqIERBU0RfRUVSX0ZBVEFMRVJST1I6ICBhbGwga2luZHMgb2YgdW5yZWNvdmVyYWJsZSBJL08gcHJvYmxlbXMKICAqIERBU0RfRUVSX1BQUkNTVVNQRU5EOiBQUFJDIHdhcyBzdXNwZW5kZWQKQEAgLTM1OSw1MSArMjUwLDI0IEBACiAgKiB0aGUgY2FsbGVyLiBGb3IgdGhlc2UgdHJpZ2dlcnMgYSByZWNvcmQgaXMgd3JpdHRlbiBieSB0aGUgZnVuY3Rpb24KICAqIGRhc2RfZWVyX3dyaXRlX3N0YW5kYXJkX3RyaWdnZXIuCiAgKgotICogV2hlbiBkYXNkX2Vlcl93cml0ZV90cmlnZ2VyIGlzIGNhbGxlZCB0byB3cml0ZSBhIERBU0RfRUVSX1NUQVRFQ0hBTkdFCi0gKiB0cmlnZ2VyLCB3ZSBoYXZlIHRvIGdhdGhlciB0aGUgbmVjZXNzYXJ5IHNlbnNlIGRhdGEgZmlyc3QuIFdlIGNhbm5vdCBxdWV1ZQotICogdGhlIG5lY2Vzc2FyeSBTTlNTIChzZW5zZSBzdWJzeXN0ZW0gc3RhdHVzKSByZXF1ZXN0IGltbWVkaWF0bHksIHNpbmNlIHdlCi0gKiBhcmUgbGlrZWx5IHRvIHJ1biBpbiBhIGRlYWRsb2NrIHNpdHVhdGlvbi4gSW5zdGVhZCwgd2Ugc2NoZWR1bGUgYQotICogd29ya19zdHJ1Y3QgdGhhdCBjYWxscyB0aGUgZnVuY3Rpb24gZGFzZF9lZXJfc2Vuc2Vfc3Vic3lzdGVtX3N0YXR1cyB0bwotICogY3JlYXRlIGFuZCBzdGFydCBhbiBTTlNTICByZXF1ZXN0IGFzeW5jaHJvbm91c2x5LgorICogVGhlIERBU0RfRUVSX1NUQVRFQ0hBTkdFIHRyaWdnZXIgaXMgc3BlY2lhbCBzaW5jZSBhIHNlbnNlIHN1YnN5c3RlbQorICogc3RhdHVzIGNjdyBuZWVkIHRvIGJlIGV4ZWN1dGVkIHRvIGdhdGhlciB0aGUgbmVjZXNzYXJ5IHNlbnNlIGRhdGEgZmlyc3QuCisgKiBUaGUgZGFzZF9lZXJfc25zcyBmdW5jdGlvbiB3aWxsIHF1ZXVlIHRoZSBTTlNTIHJlcXVlc3QgYW5kIHRoZSByZXF1ZXN0CisgKiBjYWxsYmFjayB3aWxsIHRoZW4gY2FsbCBkYXNkX2Vlcl93cml0ZSB3aXRoIHRoZSBEQVNEX0VFUl9TVEFUQ0hBTkdFCisgKiB0cmlnZ2VyLgogICoKICAqIFRvIGF2b2lkIG1lbW9yeSBhbGxvY2F0aW9ucyBhdCBydW50aW1lLCB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBpcyBhbGxvY2F0ZWQKICAqIHdoZW4gdGhlIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyBpcyBlbmFibGVkIGZvciBhIGRldmljZSAoYnkKLSAqIGRhc2RfZWVyX3Byb2JlKS4gVGhlcmUgaXMgb25lIHByaXZhdGUgZWVyIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIGVlcgotICogZW5hYmxlZCBEQVNEIGRldmljZS4gSXQgY29udGFpbnMgbWVtb3J5IGZvciB0aGUgd29ya19zdHJ1Y3QsIG9uZSBTTlNTIGNxcgotICogYW5kIGEgZmxhZ3MgZmllbGQgdGhhdCBpcyB1c2VkIHRvIGNvb3JkaW5hdGUgdGhlIHVzZSBvZiB0aGUgY3FyLiBUaGUgY2FsbAotICogdG8gd3JpdGUgYSBzdGF0ZSBjaGFuZ2UgdHJpZ2dlciBjYW4gY29tZSBpbiBhdCBhbnkgdGltZSwgc28gd2UgaGF2ZSBvbmUgZmxhZwotICogQ1FSX0lOX1VTRSB0aGF0IHByb3RlY3RzIHRoZSBjcXIgaXRzZWxmLiBXaGVuIHRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUKLSAqIGNxciBpcyBjdXJyZW50bHkgaW4gdXNlLCBkYXNkX2Vlcl9zZW5zZV9zdWJzeXN0ZW1fc3RhdHVzIGNhbm5vdCBzdGFydCBhCi0gKiBzZWNvbmQgcmVxdWVzdCBidXQgc2V0cyB0aGUgU05TU19SRVFVRVNURUQgZmxhZyBpbnN0ZWFkLgotICoKLSAqIFdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBkYXNkX2Vlcl9TTlNTX2NiCi0gKiBpcyBjYWxsZWQuIFRoaXMgZnVuY3Rpb24gd2lsbCBpbnZva2UgdGhlIGZ1bmN0aW9uCi0gKiBkYXNkX2Vlcl93cml0ZV9TTlNTX3RyaWdnZXIgdG8gZmluYWxseSB3cml0ZSB0aGUgdHJpZ2dlci4gSXQgd2lsbCBhbHNvCi0gKiBjaGVjayB0aGUgU05TU19SRVFVRVNURUQgZmxhZyBhbmQgaWYgaXQgaXMgc2V0IGl0IHdpbGwgY2FsbAotICogZGFzZF9lZXJfc2Vuc2Vfc3Vic3lzdGVtX3N0YXR1cyBhZ2Fpbi4KLSAqCi0gKiBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBoYW5kbGluZyBvZiB0aGUgbG9jaywgdGhlIGZsYWdzIG11c3QKLSAqIGJlIHByb3RlY3RlZCBieSB0aGUgc25zc2xvY2suCisgKiBkYXNkX2Vlcl9wcm9iZSkuIFRoZXJlIGlzIG9uZSBzZW5zZSBzdWJzeXN0ZW0gc3RhdHVzIHJlcXVlc3QgZm9yIGVhY2gKKyAqIGVlciBlbmFibGVkIERBU0QgZGV2aWNlLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIGNxciBpbiBkZXZpY2UtPmVlcl9jcXIKKyAqIGluZGljYXRlcyB0aGF0IGVlciBpcyBlbmFibGUgZm9yIHRoZSBkZXZpY2UuIFRoZSB1c2Ugb2YgdGhlIHNuc3MgcmVxdWVzdAorICogaXMgcHJvdGVjdGVkIGJ5IHRoZSBEQVNEX0ZMQUdfRUVSX0lOX1VTRSBiaXQuIFdoZW4gdGhpcyBmbGFnIGluZGljYXRlcworICogdGhhdCB0aGUgY3FyIGlzIGN1cnJlbnRseSBpbiB1c2UsIGRhc2RfZWVyX3Nuc3MgY2Fubm90IHN0YXJ0IGEgc2Vjb25kCisgKiByZXF1ZXN0IGJ1dCBzZXRzIHRoZSBEQVNEX0ZMQUdfRUVSX1NOU1MgZmxhZyBpbnN0ZWFkLiBUaGUgY2FsbGJhY2sgb2YKKyAqIHRoZSBTTlNTIHJlcXVlc3Qgd2lsbCBjaGVjayB0aGUgYml0IGFuZCBjYWxsIGRhc2RfZWVyX3Nuc3MgYWdhaW4uCiAgKi8KIAotc3RydWN0IGRhc2RfZWVyX3ByaXZhdGUgewotCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrZXI7Ci19OwotCi1zdGF0aWMgdm9pZCBkYXNkX2Vlcl9kZXN0cm95KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAotCQkJICAgICBzdHJ1Y3QgZGFzZF9lZXJfcHJpdmF0ZSAqZWVyKTsKLXN0YXRpYyBpbnQKLWRhc2RfZWVyX3dyaXRlX3RyaWdnZXIoc3RydWN0IGRhc2RfZWVyX3RyaWdnZXIgKnRyaWdnZXIpOwotc3RhdGljIHZvaWQgZGFzZF9lZXJfc2Vuc2Vfc3Vic3lzdGVtX3N0YXR1cyh2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZGFzZF9lZXJfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKTsKLQotc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRhc2RfZWVyX3dvcmtxdWV1ZTsKLQogI2RlZmluZSBTTlNTX0RBVEFfU0laRSA0NAotc3RhdGljIHNwaW5sb2NrX3Qgc25zc2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CiAKICNkZWZpbmUgREFTRF9FRVJfQlVTSURfU0laRSAxMAogc3RydWN0IGRhc2RfZWVyX2hlYWRlciB7CkBAIC00MTIsMjA3ICsyNzYsMTggQEAKIAlfX3U2NCB0dl9zZWM7CiAJX191NjQgdHZfdXNlYzsKIAljaGFyIGJ1c2lkW0RBU0RfRUVSX0JVU0lEX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGFzZF9lZXJfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBkYXNkX2Vlcl9ub3RpZnksCiB9OwogCiAvKgotICogZmxhZ3MgZm9yIHVzZSB3aXRoIGRhc2RfZWVyX3ByaXZhdGUKLSAqLwotI2RlZmluZSBDUVJfSU5fVVNFICAgICAwCi0jZGVmaW5lIFNOU1NfUkVRVUVTVEVEIDEKLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyBpcyBhdmFpbGFibGUgZm9yIGEgZ2l2ZW4KLSAqIGRhc2RfZGV2aWNlLiBJZiB5ZXMsIHRoZW4gaXQgY3JlYXRlcyBhbmQgcmV0dXJucyBhIHN0cnVjdCBkYXNkX2VlciwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGFuIC1FUEVSTSBlcnJvciBwb2ludGVyLgotICovCi1zdHJ1Y3QgZGFzZF9lZXJfcHJpdmF0ZSAqCi1kYXNkX2Vlcl9wcm9iZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgZGFzZF9lZXJfcHJpdmF0ZSAqcHJpdmF0ZTsKLQotCWlmICghKGRldmljZSAmJiBkZXZpY2UtPmRpc2NpcGxpbmUKLQkgICAgICAmJiAhc3RyY21wKGRldmljZS0+ZGlzY2lwbGluZS0+bmFtZSwgIkVDS0QiKSkpIHsKLQkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKLQl9Ci0JLyogYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KLQlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vlcl9wcml2YXRlICopa21hbGxvYygKLQkJc2l6ZW9mKHN0cnVjdCBkYXNkX2Vlcl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2YXRlKSB7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlJTklUX1dPUksoJnByaXZhdGUtPndvcmtlciwgZGFzZF9lZXJfc2Vuc2Vfc3Vic3lzdGVtX3N0YXR1cywKLQkJICAodm9pZCAqKWRldmljZSk7Ci0JcHJpdmF0ZS0+Y3FyID0gZGFzZF9rbWFsbG9jX3JlcXVlc3QoIkVDS0QiLAotCQkJCQkgICAgMSAvKiBTTlNTICovICwKLQkJCQkJICAgIFNOU1NfREFUQV9TSVpFICwKLQkJCQkJICAgIGRldmljZSk7Ci0JaWYgKCFwcml2YXRlLT5jcXIpIHsKLQkJa2ZyZWUocHJpdmF0ZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KLQlwcml2YXRlLT5mbGFncyA9IDA7Ci0JcmV0dXJuIHByaXZhdGU7Ci19OwotCi0vKgotICogSWYgb3VyIHByaXZhdGUgU05TUyByZXF1ZXN0IGlzIHF1ZXVlZCwgcmVtb3ZlIGl0IGZyb20gdGhlCi0gKiBkYXNkIGNjdyBxdWV1ZSBzbyB3ZSBjYW4gZnJlZSB0aGUgcmVxdWVzdHMgbWVtb3J5LgotICovCi1zdGF0aWMgdm9pZAotZGFzZF9lZXJfZGVxdWV1ZV9TTlNTX3JlcXVlc3Qoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCi0JCQkgICAgICBzdHJ1Y3QgZGFzZF9lZXJfcHJpdmF0ZSAqZWVyKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmxzdCwgKm54dDsKLQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsICplcnBjcXI7Ci0JZGFzZF9lcnBfZm5fdCBlcnBfZm47Ci0KLQlzcGluX2xvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUobHN0LCBueHQsICZkZXZpY2UtPmNjd19xdWV1ZSkgewotCQljcXIgPSBsaXN0X2VudHJ5KGxzdCwgc3RydWN0IGRhc2RfY2N3X3JlcSwgbGlzdCk7Ci0JCS8qIHdlIGFyZSBsb29raW5nIGZvciB0d28ga2luZHMgb3IgcmVxdWVzdHMgKi8KLQkJLyogZmlyc3Qga2luZDogb3VyIFNOU1MgcmVxdWVzdDogKi8KLQkJaWYgKGNxciA9PSBlZXItPmNxcikgewotCQkJaWYgKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0lOX0lPKQotCQkJCWRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwotCQkJbGlzdF9kZWwoJmNxci0+bGlzdCk7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBzZWNvbmQga2luZDogRVJQIHJlcXVlc3RzIGZvciBvdXIgU05TUyByZXF1ZXN0ICovCi0JCWlmIChjcXItPnJlZmVycykgewotCQkJLyogSWYgdGhpcyBlcnAgcmVxdWVzdCBjaGFpbiBlbmRzIGluIG91ciBjcXIsIHRoZW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhbCB0aGUgZXJwX3Bvc3RhY3Rpb24gdG8gY2xlYW4gaXQgdXAgICovCi0JCQllcnBjcXIgPSBjcXI7Ci0JCQl3aGlsZSAoZXJwY3FyLT5yZWZlcnMpIHsKLQkJCQllcnBjcXIgPSBlcnBjcXItPnJlZmVyczsKLQkJCX0KLQkJCWlmIChlcnBjcXIgPT0gZWVyLT5jcXIpIHsKLQkJCQllcnBfZm4gPSBkZXZpY2UtPmRpc2NpcGxpbmUtPmVycF9wb3N0YWN0aW9uKAotCQkJCQkgY3FyKTsKLQkJCQllcnBfZm4oY3FyKTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGRpc21hbnRsZXMgYSBzdHJ1Y3QgZGFzZF9lZXIgdGhhdCB3YXMgY3JlYXRlZCBieQotICogZGFzZF9lZXJfcHJvYmUuIFNpbmNlIHdlIHdhbnQgdG8gZnJlZSBvdXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSwKLSAqIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBpcyBub3QgaW4gdXNlIGFueW1vcmUuCi0gKiBXZSBoYXZlIHRvIGZsdXNoIHRoZSB3b3JrIHF1ZXVlIGFuZCByZW1vdmUgYSBwb3NzaWJsZSBTTlNTIHJlcXVlc3QKLSAqIGZyb20gdGhlIGRhc2QgcXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkCi1kYXNkX2Vlcl9kZXN0cm95KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGFzZF9lZXJfcHJpdmF0ZSAqZWVyKQotewotCWZsdXNoX3dvcmtxdWV1ZShkYXNkX2Vlcl93b3JrcXVldWUpOwotCWRhc2RfZWVyX2RlcXVldWVfU05TU19yZXF1ZXN0KGRldmljZSwgZWVyKTsKLQlkYXNkX2tmcmVlX3JlcXVlc3QoZWVyLT5jcXIsIGRldmljZSk7Ci0Ja2ZyZWUoZWVyKTsKLX07Ci0KLS8qCi0gKiBlbmFibGUgdGhlIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZQotICovCi1zdGF0aWMgaW50Ci1kYXNkX2Vlcl9lbmFibGVfb25fZGV2aWNlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQotewotCXZvaWQgKmVlcjsKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKGRldmljZS0+ZWVyKQotCQlyZXR1cm4gMDsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZWVyID0gKHZvaWQgKilkYXNkX2Vlcl9wcm9iZShkZXZpY2UpOwotCWlmIChJU19FUlIoZWVyKSkgewotCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQkJcmV0dXJuIFBUUl9FUlIoZWVyKTsKLQl9Ci0JZGV2aWNlLT5lZXIgPSBlZXI7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBlbmFibGUgdGhlIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZyBmb3IgYSBwYXJ0aWN1bGFyIGRldmljZQotICovCi1zdGF0aWMgaW50Ci1kYXNkX2Vlcl9kaXNhYmxlX29uX2RldmljZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKLXsKLQlzdHJ1Y3QgZGFzZF9lZXJfcHJpdmF0ZSAqZWVyID0gZGV2aWNlLT5lZXI7Ci0KLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKCFkZXZpY2UtPmVlcikKLQkJcmV0dXJuIDA7Ci0JZGV2aWNlLT5lZXIgPSBOVUxMOwotCWRhc2RfZWVyX2Rlc3Ryb3koZGV2aWNlLGVlcik7Ci0JbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldCBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcgKGVlcikKLSAqIE5vdGU6IFRoaXMgd2lsbCBiZSByZWdpc3RlcmVkIGFzIGEgREFTRCBpb2N0bCwgdG8gYmUgY2FsbGVkIG9uIERBU0QgZGV2aWNlcy4KLSAqLwotc3RhdGljIGludAotZGFzZF9pb2N0bF9zZXRfZWVyKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBubywgbG9uZyBhcmdzKQotewotCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwotCWludCBpbnR2YWw7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiAtRUFDQ0VTOwotCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKQotCQkvKiBFcnJvci1yZXBvcnRpbmcgaXMgbm90IGFsbG93ZWQgZm9yIHBhcnRpdGlvbnMgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGdldF91c2VyKGludHZhbCwgKGludCBfX3VzZXIgKikgYXJncykpCi0JCXJldHVybiAtRUZBVUxUOwotCWRldmljZSA9ICBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGRldmljZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWludHZhbCA9IChpbnR2YWwgIT0gMCk7Ci0JREVWX01FU1NBR0UgKEtFUk5fREVCVUcsIGRldmljZSwKLQkJICAgICAic2V0IGVlciBvbiBkZXZpY2UgdG8gJWQiLCBpbnR2YWwpOwotCWlmIChpbnR2YWwpCi0JCXJldHVybiBkYXNkX2Vlcl9lbmFibGVfb25fZGV2aWNlKGRldmljZSk7Ci0JZWxzZQotCQlyZXR1cm4gZGFzZF9lZXJfZGlzYWJsZV9vbl9kZXZpY2UoZGV2aWNlKTsKLX0KLQotLyoKLSAqIEdldCB2YWx1ZSBvZiBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcuCi0gKiBOb3RlOiBUaGlzIHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyBhIERBU0QgaW9jdGwsIHRvIGJlIGNhbGxlZCBvbiBEQVNEIGRldmljZXMuCi0gKi8KLXN0YXRpYyBpbnQKLWRhc2RfaW9jdGxfZ2V0X2VlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKLXsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKLQotCWRldmljZSA9ICBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGRldmljZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gcHV0X3VzZXIoKGRldmljZS0+ZWVyICE9IE5VTEwpLCAoaW50IF9fdXNlciAqKSBhcmdzKTsKLX0KLQotLyoKICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FuIGJlIHVzZWQgZm9yIHRob3NlIHRyaWdnZXJzIHRoYXQgaGF2ZQogICogYWxsIG5lY2Vzc2FyeSBkYXRhIGF2YWlsYWJsZSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgKiBJZiB0aGUgcGFyYW1ldGVyIGNxciBpcyBub3QgTlVMTCwgdGhlIGNoYWluIG9mIHJlcXVlc3RzIHdpbGwgYmUgc2VhcmNoZWQKICAqIGZvciB2YWxpZCBzZW5zZSBkYXRhLCBhbmQgYWxsIHZhbGlkIHNlbnNlIGRhdGEgc2V0cyB3aWxsIGJlIGFkZGVkIHRvCiAgKiB0aGUgdHJpZ2dlcnMgZGF0YS4KICAqLwotc3RhdGljIGludAotZGFzZF9lZXJfd3JpdGVfc3RhbmRhcmRfdHJpZ2dlcihpbnQgdHJpZ2dlciwgc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCi0JCQkJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyKQorc3RhdGljIHZvaWQgZGFzZF9lZXJfd3JpdGVfc3RhbmRhcmRfdHJpZ2dlcihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwKKwkJCQkJICAgIHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwKKwkJCQkJICAgIGludCB0cmlnZ2VyKQogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKnRlbXBfY3FyOwogCWludCBkYXRhX3NpemU7CkBAIC02MjIsMTMgKzI5NywxMCBAQAogCXN0cnVjdCBlZXJidWZmZXIgKmVlcmI7CiAKIAkvKiBnbyB0aHJvdWdoIGNxciBjaGFpbiBhbmQgY291bnQgdGhlIHZhbGlkIHNlbnNlIGRhdGEgc2V0cyAqLwotCXRlbXBfY3FyID0gY3FyOwogCWRhdGFfc2l6ZSA9IDA7Ci0Jd2hpbGUgKHRlbXBfY3FyKSB7CisJZm9yICh0ZW1wX2NxciA9IGNxcjsgdGVtcF9jcXI7IHRlbXBfY3FyID0gdGVtcF9jcXItPnJlZmVycykKIAkJaWYgKHRlbXBfY3FyLT5pcmIuZXN3LmVzdzAuZXJ3LmNvbnMpCiAJCQlkYXRhX3NpemUgKz0gMzI7Ci0JCXRlbXBfY3FyID0gdGVtcF9jcXItPnJlZmVyczsKLQl9CiAKIAloZWFkZXIudG90YWxfc2l6ZSA9IHNpemVvZihoZWFkZXIpICsgZGF0YV9zaXplICsgNDsgLyogIkVPUiIgKi8KIAloZWFkZXIudHJpZ2dlciA9IHRyaWdnZXI7CkBAIC02NDAsMjggKzMxMiwyMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZidWZmZXJsb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlZXJiLCAmYnVmZmVybGlzdCwgbGlzdCkgewogCQlkYXNkX2Vlcl9zdGFydF9yZWNvcmQoZWVyYiwgaGVhZGVyLnRvdGFsX3NpemUpOwotCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgc2l6ZW9mKGhlYWRlciksIChjaGFyKikoJmhlYWRlcikpOwotCQl0ZW1wX2NxciA9IGNxcjsKLQkJd2hpbGUgKHRlbXBfY3FyKSB7CisJCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCAoY2hhciAqKSAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisJCWZvciAodGVtcF9jcXIgPSBjcXI7IHRlbXBfY3FyOyB0ZW1wX2NxciA9IHRlbXBfY3FyLT5yZWZlcnMpCiAJCQlpZiAodGVtcF9jcXItPmlyYi5lc3cuZXN3MC5lcncuY29ucykKLQkJCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgMzIsIGNxci0+aXJiLmVjdyk7Ci0JCQl0ZW1wX2NxciA9IHRlbXBfY3FyLT5yZWZlcnM7Ci0JCX0KLQkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIDQsIkVPUiIpOworCQkJCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCBjcXItPmlyYi5lY3csIDMyKTsKKwkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsICJFT1IiLCA0KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVmZmVybG9jaywgZmxhZ3MpOwotCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkYXNkX2Vlcl9yZWFkX3dhaXRfcXVldWUpOwotCi0JcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBhIERBU0RfRUVSX1NUQVRFQ0hBTkdFIHRyaWdnZXIuCiAgKi8KLXN0YXRpYyB2b2lkCi1kYXNkX2Vlcl93cml0ZV9TTlNTX3RyaWdnZXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UsCi0JCQkgICAgc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyKQorc3RhdGljIHZvaWQgZGFzZF9lZXJfd3JpdGVfc25zc190cmlnZ2VyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorCQkJCQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsCisJCQkJCWludCB0cmlnZ2VyKQogewogCWludCBkYXRhX3NpemU7CiAJaW50IHNuc3NfcmM7CkBAIC02ODYsMTY3ICszNTIsMTYwIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1ZmZlcmxvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVlcmIsICZidWZmZXJsaXN0LCBsaXN0KSB7CiAJCWRhc2RfZWVyX3N0YXJ0X3JlY29yZChlZXJiLCBoZWFkZXIudG90YWxfc2l6ZSk7Ci0JCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCBzaXplb2YoaGVhZGVyKSwoY2hhciopKCZoZWFkZXIpKTsKKwkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIChjaGFyICopICZoZWFkZXIgLCBzaXplb2YoaGVhZGVyKSk7CiAJCWlmICghc25zc19yYykKLQkJCWRhc2RfZWVyX3dyaXRlX2J1ZmZlcihlZXJiLCBTTlNTX0RBVEFfU0laRSwgY3FyLT5kYXRhKTsKLQkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIDQsIkVPUiIpOworCQkJZGFzZF9lZXJfd3JpdGVfYnVmZmVyKGVlcmIsIGNxci0+ZGF0YSwgU05TU19EQVRBX1NJWkUpOworCQlkYXNkX2Vlcl93cml0ZV9idWZmZXIoZWVyYiwgIkVPUiIsIDQpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWZmZXJsb2NrLCBmbGFncyk7Ci0KIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRhc2RfZWVyX3JlYWRfd2FpdF9xdWV1ZSk7CiB9CiAKIC8qCi0gKiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdXNlIHdpdGggU05TUyByZXF1ZXN0Ci0gKi8KLXN0YXRpYyB2b2lkCi1kYXNkX2Vlcl9TTlNTX2NiKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgdm9pZCAqZGF0YSkKLXsKLSAgICAgICAgc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7Ci0Jc3RydWN0IGRhc2RfZWVyX3ByaXZhdGUgKnByaXZhdGU7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKLQotICAgICAgICBkZXZpY2UgPSAoc3RydWN0IGRhc2RfZGV2aWNlICopZGF0YTsKLQlwcml2YXRlID0gKHN0cnVjdCBkYXNkX2Vlcl9wcml2YXRlICopZGV2aWNlLT5lZXI7Ci0JZGFzZF9lZXJfd3JpdGVfU05TU190cmlnZ2VyKGRldmljZSwgY3FyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25zc2xvY2ssIGlycWZsYWdzKTsKLQlpZighdGVzdF9hbmRfY2xlYXJfYml0KFNOU1NfUkVRVUVTVEVELCAmcHJpdmF0ZS0+ZmxhZ3MpKSB7Ci0JCWNsZWFyX2JpdChDUVJfSU5fVVNFLCAmcHJpdmF0ZS0+ZmxhZ3MpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbnNzbG9jaywgaXJxZmxhZ3MpOwotCQlyZXR1cm47Ci0JfTsKLQljbGVhcl9iaXQoQ1FSX0lOX1VTRSwgJnByaXZhdGUtPmZsYWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbnNzbG9jaywgaXJxZmxhZ3MpOwotCWRhc2RfZWVyX3NlbnNlX3N1YnN5c3RlbV9zdGF0dXMoZGV2aWNlKTsKLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBjbGVhbiBhIHVzZWQgY3FyIGJlZm9yZSB1c2luZyBpdCBhZ2FpbgotICovCi1zdGF0aWMgdm9pZAotZGFzZF9lZXJfY2xlYW5fU05TU19yZXF1ZXN0KHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcikKLXsKLQlzdHJ1Y3QgY2N3MSAqY3BhZGRyID0gY3FyLT5jcGFkZHI7Ci0Jdm9pZCAqZGF0YSA9IGNxci0+ZGF0YTsKLQotCW1lbXNldChjcXIsIDAsIHNpemVvZihzdHJ1Y3QgZGFzZF9jY3dfcmVxKSk7Ci0JbWVtc2V0KGNwYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBjY3cxKSk7Ci0JbWVtc2V0KGRhdGEsIDAsIFNOU1NfREFUQV9TSVpFKTsKLQljcXItPmNwYWRkciA9IGNwYWRkcjsKLQljcXItPmRhdGEgPSBkYXRhOwotCXN0cm5jcHkoKGNoYXIgKikgJmNxci0+bWFnaWMsICJFQ0tEIiwgNCk7Ci0JQVNDRUJDKChjaGFyICopICZjcXItPm1hZ2ljLCA0KTsKLQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKTsKLX0KLQotLyoKLSAqIGJ1aWxkIGFuZCBzdGFydCBhbiBTTlNTIHJlcXVlc3QKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYSB3b3JrIHF1ZXVlIHNvIHdlIGhhdmUgdG8KLSAqIHBhc3MgdGhlIGRhc2RfZGV2aWNlIHBvaW50ZXIgYXMgYSB2b2lkIHBvaW50ZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1kYXNkX2Vlcl9zZW5zZV9zdWJzeXN0ZW1fc3RhdHVzKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7Ci0Jc3RydWN0IGRhc2RfZWVyX3ByaXZhdGUgKnByaXZhdGU7Ci0Jc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwotCXN0cnVjdCBjY3cxICpjY3c7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKLQotCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKilkYXRhOwotCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWVyX3ByaXZhdGUgKilkZXZpY2UtPmVlcjsKLQlpZiAoIXByaXZhdGUpIC8qIGRldmljZSBub3QgZWVyIGVuYWJsZWQgYW55IG1vcmUgKi8KLQkJcmV0dXJuOwotCWNxciA9IHByaXZhdGUtPmNxcjsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc25zc2xvY2ssIGlycWZsYWdzKTsKLQlpZih0ZXN0X2FuZF9zZXRfYml0KENRUl9JTl9VU0UsICZwcml2YXRlLT5mbGFncykpIHsKLQkJc2V0X2JpdChTTlNTX1JFUVVFU1RFRCwgJnByaXZhdGUtPmZsYWdzKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25zc2xvY2ssIGlycWZsYWdzKTsKLQkJcmV0dXJuOwotCX07Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc25zc2xvY2ssIGlycWZsYWdzKTsKLQlkYXNkX2Vlcl9jbGVhbl9TTlNTX3JlcXVlc3QoY3FyKTsKLQljcXItPmRldmljZSA9IGRldmljZTsKLQljcXItPnJldHJpZXMgPSAyNTU7Ci0JY3FyLT5leHBpcmVzID0gMTAgKiBIWjsKLQotCWNjdyA9IGNxci0+Y3BhZGRyOwotCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NOU1M7Ci0JY2N3LT5jb3VudCA9IFNOU1NfREFUQV9TSVpFOwotCWNjdy0+ZmxhZ3MgPSAwOwotCWNjdy0+Y2RhID0gKF9fdTMyKShhZGRyX3QpY3FyLT5kYXRhOwotCi0JY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOwotCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOwotCWNxci0+Y2FsbGJhY2sgPSBkYXNkX2Vlcl9TTlNTX2NiOwotCWNxci0+Y2FsbGJhY2tfZGF0YSA9ICh2b2lkICopZGV2aWNlOwotICAgICAgICBkYXNkX2FkZF9yZXF1ZXN0X2hlYWQoY3FyKTsKLQotCXJldHVybjsKLX0KLQotLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbGwgdHJpZ2dlcnMuIEl0IGNhbGxzIHRoZSBhcHByb3ByaWF0ZQogICogZnVuY3Rpb24gdGhhdCB3cml0ZXMgdGhlIGFjdHVhbCB0cmlnZ2VyIHJlY29yZHMuCiAgKi8KLXN0YXRpYyBpbnQKLWRhc2RfZWVyX3dyaXRlX3RyaWdnZXIoc3RydWN0IGRhc2RfZWVyX3RyaWdnZXIgKnRyaWdnZXIpCit2b2lkIGRhc2RfZWVyX3dyaXRlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIsCisJCSAgICB1bnNpZ25lZCBpbnQgaWQpCiB7Ci0JaW50IHJjOwotCXN0cnVjdCBkYXNkX2Vlcl9wcml2YXRlICpwcml2YXRlID0gdHJpZ2dlci0+ZGV2aWNlLT5lZXI7Ci0KLQlzd2l0Y2ggKHRyaWdnZXItPmlkKSB7CisJaWYgKCFkZXZpY2UtPmVlcl9jcXIpCisJCXJldHVybjsKKwlzd2l0Y2ggKGlkKSB7CiAJY2FzZSBEQVNEX0VFUl9GQVRBTEVSUk9SOgogCWNhc2UgREFTRF9FRVJfUFBSQ1NVU1BFTkQ6Ci0JCXJjID0gZGFzZF9lZXJfd3JpdGVfc3RhbmRhcmRfdHJpZ2dlcigKLQkJCXRyaWdnZXItPmlkLCB0cmlnZ2VyLT5kZXZpY2UsIHRyaWdnZXItPmNxcik7CisJCWRhc2RfZWVyX3dyaXRlX3N0YW5kYXJkX3RyaWdnZXIoZGV2aWNlLCBjcXIsIGlkKTsKIAkJYnJlYWs7CiAJY2FzZSBEQVNEX0VFUl9OT1BBVEg6Ci0JCXJjID0gZGFzZF9lZXJfd3JpdGVfc3RhbmRhcmRfdHJpZ2dlcigKLQkJCXRyaWdnZXItPmlkLCB0cmlnZ2VyLT5kZXZpY2UsIE5VTEwpOworCQlkYXNkX2Vlcl93cml0ZV9zdGFuZGFyZF90cmlnZ2VyKGRldmljZSwgTlVMTCwgaWQpOwogCQlicmVhazsKIAljYXNlIERBU0RfRUVSX1NUQVRFQ0hBTkdFOgotICAgICAgICAgICAgICAgIGlmIChxdWV1ZV93b3JrKGRhc2RfZWVyX3dvcmtxdWV1ZSwgJnByaXZhdGUtPndvcmtlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjPTA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSB3b3JrX3N0cnVjdCB3YXMgYWxyZWFkeSBxdWV1ZWQsIGl0IGNhbid0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSBxdWV1ZWQgYWdhaW4uIEJ1dCB0aGlzIGlzIE9LIHNpbmNlIHdlIGRvbid0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBuZWVkIHRvIGhhdmUgaXQgcXVldWVkIHR3aWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgICB9CisJCWRhc2RfZWVyX3dyaXRlX3Nuc3NfdHJpZ2dlcihkZXZpY2UsIGNxciwgaWQpOwogCQlicmVhazsKIAlkZWZhdWx0OiAvKiB1bmtub3duIHRyaWdnZXIsIHNvIHdlIHdyaXRlIGl0IHdpdGhvdXQgYW55IHNlbnNlIGRhdGEgKi8KLQkJcmMgPSBkYXNkX2Vlcl93cml0ZV9zdGFuZGFyZF90cmlnZ2VyKAotCQkJdHJpZ2dlci0+aWQsIHRyaWdnZXItPmRldmljZSwgTlVMTCk7CisJCWRhc2RfZWVyX3dyaXRlX3N0YW5kYXJkX3RyaWdnZXIoZGV2aWNlLCBOVUxMLCBpZCk7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKGRhc2RfZWVyX3dyaXRlKTsKKworLyoKKyAqIFN0YXJ0IGEgc2Vuc2Ugc3Vic3lzdGVtIHN0YXR1cyByZXF1ZXN0LgorICogTmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggdGhlIGRldmljZSBoZWxkLgorICovCit2b2lkIGRhc2RfZWVyX3Nuc3Moc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOworCisJY3FyID0gZGV2aWNlLT5lZXJfY3FyOworCWlmICghY3FyKQkvKiBEZXZpY2Ugbm90IGVlciBlbmFibGVkLiAqLworCQlyZXR1cm47CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoREFTRF9GTEFHX0VFUl9JTl9VU0UsICZkZXZpY2UtPmZsYWdzKSkgeworCQkvKiBTZW5zZSBzdWJzeXN0ZW0gc3RhdHVzIHJlcXVlc3QgaW4gdXNlLiAqLworCQlzZXRfYml0KERBU0RfRkxBR19FRVJfU05TUywgJmRldmljZS0+ZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWNsZWFyX2JpdChEQVNEX0ZMQUdfRUVSX1NOU1MsICZkZXZpY2UtPmZsYWdzKTsKKwljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKKwlsaXN0X2FkZCgmY3FyLT5saXN0LCAmZGV2aWNlLT5jY3dfcXVldWUpOworCWRhc2Rfc2NoZWR1bGVfYmgoZGV2aWNlKTsKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkYXNkIGRldmljZSBkcml2ZXIgYW5kIGdldHMgY2FsbGVkCi0gKiBmb3IgYWxsIGRhc2QgZWVyIG5vdGlmaWNhdGlvbnMuCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdXNlIHdpdGggc2Vuc2Ugc3Vic3lzdGVtIHN0YXR1cyByZXF1ZXN0LgogICovCi1zdGF0aWMgaW50IGRhc2RfZWVyX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBkYXNkX2Vlcl9zbnNzX2NiKHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxciwgdm9pZCAqZGF0YSkKIHsKLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgREFTRF9FRVJfRElTQUJMRToKLQkJZGFzZF9lZXJfZGlzYWJsZV9vbl9kZXZpY2UoKHN0cnVjdCBkYXNkX2RldmljZSAqKWRhdGEpOwotCQlicmVhazsKLQljYXNlIERBU0RfRUVSX1RSSUdHRVI6Ci0JCWRhc2RfZWVyX3dyaXRlX3RyaWdnZXIoKHN0cnVjdCBkYXNkX2Vlcl90cmlnZ2VyICopZGF0YSk7Ci0JCWJyZWFrOworICAgICAgICBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGNxci0+ZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYXNkX2Vlcl93cml0ZShkZXZpY2UsIGNxciwgREFTRF9FRVJfU1RBVEVDSEFOR0UpOworCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CisJaWYgKGRldmljZS0+ZWVyX2NxciA9PSBjcXIpIHsKKwkJY2xlYXJfYml0KERBU0RfRkxBR19FRVJfSU5fVVNFLCAmZGV2aWNlLT5mbGFncyk7CisJCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfRUVSX1NOU1MsICZkZXZpY2UtPmZsYWdzKSkKKwkJCS8qIEFub3RoZXIgU05TUyBoYXMgYmVlbiByZXF1ZXN0ZWQgaW4gdGhlIG1lYW50aW1lLiAqLworCQkJZGFzZF9lZXJfc25zcyhkZXZpY2UpOworCQljcXIgPSBOVUxMOwogCX0KLQlyZXR1cm4gTk9USUZZX09LOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKKwlpZiAoY3FyKQorCQkvKgorCQkgKiBFeHRlbmRlZCBlcnJvciByZWNvdmVyeSBoYXMgYmVlbiBzd2l0Y2hlZCBvZmYgd2hpbGUKKwkJICogdGhlIFNOU1MgcmVxdWVzdCB3YXMgcnVubmluZy4gSXQgY291bGQgZXZlbiBoYXZlCisJCSAqIGJlZW4gc3dpdGNoZWQgb2ZmIGFuZCBvbiBhZ2FpbiBpbiB3aGljaCBjYXNlIHRoZXJlCisJCSAqIGlzIGEgbmV3IGNjdyBpbiBkZXZpY2UtPmVlcl9jcXIuIEZyZWUgdGhlICJvbGQiCisJCSAqIHNuc3MgcmVxdWVzdCBub3cuCisJCSAqLworCQlkYXNkX2tmcmVlX3JlcXVlc3QoY3FyLCBkZXZpY2UpOwogfQogCisvKgorICogRW5hYmxlIGVycm9yIHJlcG9ydGluZyBvbiBhIGdpdmVuIGRldmljZS4KKyAqLworaW50IGRhc2RfZWVyX2VuYWJsZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICB0aGUgZGV2aWNlIG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWlmIChkZXZpY2UtPmVlcl9jcXIpCisJCXJldHVybiAwOworCisJaWYgKCFkZXZpY2UtPmRpc2NpcGxpbmUgfHwgc3RyY21wKGRldmljZS0+ZGlzY2lwbGluZS0+bmFtZSwgIkVDS0QiKSkKKwkJcmV0dXJuIC1FUEVSTTsJLyogRklYTUU6IC1FTUVESVVNVFlQRSA/ICovCisKKwljcXIgPSBkYXNkX2ttYWxsb2NfcmVxdWVzdCgiRUNLRCIsIDEgLyogU05TUyAqLywKKwkJCQkgICBTTlNTX0RBVEFfU0laRSwgZGV2aWNlKTsKKwlpZiAoIWNxcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljcXItPmRldmljZSA9IGRldmljZTsKKwljcXItPnJldHJpZXMgPSAyNTU7CisJY3FyLT5leHBpcmVzID0gMTAgKiBIWjsKKworCWNxci0+Y3BhZGRyLT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfU05TUzsKKwljcXItPmNwYWRkci0+Y291bnQgPSBTTlNTX0RBVEFfU0laRTsKKwljcXItPmNwYWRkci0+ZmxhZ3MgPSAwOworCWNxci0+Y3BhZGRyLT5jZGEgPSAoX191MzIpKGFkZHJfdCkgY3FyLT5kYXRhOworCisJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOworCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRklMTEVEOworCWNxci0+Y2FsbGJhY2sgPSBkYXNkX2Vlcl9zbnNzX2NiOworCisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKKwlpZiAoIWRldmljZS0+ZWVyX2NxcikgeworCQlkZXZpY2UtPmVlcl9jcXIgPSBjcXI7CisJCWNxciA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKKwlpZiAoY3FyKQorCQlkYXNkX2tmcmVlX3JlcXVlc3QoY3FyLCBkZXZpY2UpOworCXJldHVybiAwOworfQorCisvKgorICogRGlzYWJsZSBlcnJvciByZXBvcnRpbmcgb24gYSBnaXZlbiBkZXZpY2UuCisgKi8KK3ZvaWQgZGFzZF9lZXJfZGlzYWJsZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaW5fdXNlOworCisJaWYgKCFkZXZpY2UtPmVlcl9jcXIpCisJCXJldHVybjsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOworCWNxciA9IGRldmljZS0+ZWVyX2NxcjsKKwlkZXZpY2UtPmVlcl9jcXIgPSBOVUxMOworCWNsZWFyX2JpdChEQVNEX0ZMQUdfRUVSX1NOU1MsICZkZXZpY2UtPmZsYWdzKTsKKwlpbl91c2UgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoREFTRF9GTEFHX0VFUl9JTl9VU0UsICZkZXZpY2UtPmZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CisJaWYgKGNxciAmJiAhaW5fdXNlKQorCQlkYXNkX2tmcmVlX3JlcXVlc3QoY3FyLCBkZXZpY2UpOworfQorCisvKgorICogU0VDVElPTjogdGhlIGRldmljZSBvcGVyYXRpb25zCisgKi8KIAogLyoKICAqIE9uIHRoZSBvbmUgc2lkZSB3ZSBuZWVkIGEgbG9jayB0byBhY2Nlc3Mgb3VyIGludGVybmFsIGJ1ZmZlciwgb24gdGhlCkBAIC04NTQsMjggKzUxMywzNCBAQAogICogdG8gdHJhbnNmZXIgaW4gYSByZWFkYnVmZmVyLCB3aGljaCBpcyBwcm90ZWN0ZWQgYnkgdGhlIHJlYWRidWZmZXJfbXV0ZXguCiAgKi8KIHN0YXRpYyBjaGFyIHJlYWRidWZmZXJbUEFHRV9TSVpFXTsKLURFQ0xBUkVfTVVURVgocmVhZGJ1ZmZlcl9tdXRleCk7CitzdGF0aWMgREVDTEFSRV9NVVRFWChyZWFkYnVmZmVyX211dGV4KTsKIAotCi1zdGF0aWMgaW50Ci1kYXNkX2Vlcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5wLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyBpbnQgZGFzZF9lZXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlucCwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGVlcmJ1ZmZlciAqZWVyYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZWVyYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlZXJidWZmZXIpLCBHRlBfS0VSTkVMKTsKLQllZXJiLT5oZWFkID0gMDsKLQllZXJiLT50YWlsID0gMDsKLQllZXJiLT5yZXNpZHVhbCA9IDA7Ci0JZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgPSAxOworCWVlcmIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZWVyYnVmZmVyKSwgR0ZQX0tFUk5FTCk7CisJZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgPSBlZXJfcGFnZXM7CisJaWYgKGVlcmItPmJ1ZmZlcl9wYWdlX2NvdW50IDwgMSB8fAorCSAgICBlZXJiLT5idWZmZXJfcGFnZV9jb3VudCA+IElOVF9NQVggLyBQQUdFX1NJWkUpIHsKKwkJa2ZyZWUoZWVyYik7CisJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiY2FuJ3Qgb3BlbiBkZXZpY2Ugc2luY2UgbW9kdWxlICIKKwkJCSJwYXJhbWV0ZXIgZWVyX3BhZ2VzIGlzIHNtYWxsZXIgdGhlbiAxIG9yIgorCQkJIiBiaWdnZXIgdGhlbiAlZCIsIChpbnQpKElOVF9NQVggLyBQQUdFX1NJWkUpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCWVlcmItPmJ1ZmZlcnNpemUgPSBlZXJiLT5idWZmZXJfcGFnZV9jb3VudCAqIFBBR0VfU0laRTsKLSAgICAgICAgZWVyYi0+YnVmZmVyID0ga21hbGxvYyhlZXJiLT5idWZmZXJfcGFnZV9jb3VudCpzaXplb2YoY2hhciopLAorCWVlcmItPmJ1ZmZlciA9IGttYWxsb2MoZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQgKiBzaXplb2YoY2hhciAqKSwKIAkJCSAgICAgICBHRlBfS0VSTkVMKTsKLSAgICAgICAgaWYgKCFlZXJiLT5idWZmZXIpCisgICAgICAgIGlmICghZWVyYi0+YnVmZmVyKSB7CisJCWtmcmVlKGVlcmIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCX0KIAlpZiAoZGFzZF9lZXJfYWxsb2NhdGVfYnVmZmVyX3BhZ2VzKGVlcmItPmJ1ZmZlciwKIAkJCQkJICAgZWVyYi0+YnVmZmVyX3BhZ2VfY291bnQpKSB7CiAJCWtmcmVlKGVlcmItPmJ1ZmZlcik7CisJCWtmcmVlKGVlcmIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gZWVyYjsKQEAgLTg4NiwxMyArNTUxLDEyIEBACiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5wLGZpbHApOwogfQogCi1zdGF0aWMgaW50Ci1kYXNkX2Vlcl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlucCwgc3RydWN0IGZpbGUgKmZpbHApCitzdGF0aWMgaW50IGRhc2RfZWVyX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5wLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgZWVyYnVmZmVyICplZXJiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQllZXJiID0gKHN0cnVjdCBlZXJidWZmZXIgKilmaWxwLT5wcml2YXRlX2RhdGE7CisJZWVyYiA9IChzdHJ1Y3QgZWVyYnVmZmVyICopIGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnVmZmVybG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZlZXJiLT5saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWZmZXJsb2NrLCBmbGFncyk7CkBAIC05MDMsMzYgKzU2NywxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZwotZGFzZF9lZXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCBpbnR2YWw7Ci0Jc3RydWN0IGVlcmJ1ZmZlciAqZWVyYjsKLQotCWVlcmIgPSAoc3RydWN0IGVlcmJ1ZmZlciAqKWZpbHAtPnByaXZhdGVfZGF0YTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgREFTRF9FRVJfUFVSR0U6Ci0JCWRhc2RfZWVyX3B1cmdlX2J1ZmZlcihlZXJiKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBEQVNEX0VFUl9TRVRCVUZTSVpFOgotCQlpZiAoZ2V0X3VzZXIoaW50dmFsLCAoaW50IF9fdXNlciAqKWFyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIGRhc2RfZWVyX3Jlc2l6ZV9idWZmZXIoZWVyYiwgaW50dmFsKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLX0KLQotc3RhdGljIHNzaXplX3QKLWRhc2RfZWVyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgZGFzZF9lZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJaW50IHRjLHJjOwogCWludCB0YWlsY291bnQsZWZmZWN0aXZlX2NvdW50OwogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlZXJidWZmZXIgKmVlcmI7CiAKLQllZXJiID0gKHN0cnVjdCBlZXJidWZmZXIgKilmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaWYoZG93bl9pbnRlcnJ1cHRpYmxlKCZyZWFkYnVmZmVyX211dGV4KSkKKwllZXJiID0gKHN0cnVjdCBlZXJidWZmZXIgKikgZmlscC0+cHJpdmF0ZV9kYXRhOworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnJlYWRidWZmZXJfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1ZmZlcmxvY2ssIGZsYWdzKTsKQEAgLTk0NSwxMyArNTg5LDEzIEBACiAJCXJldHVybiAtRUlPOwogCX0gZWxzZSBpZiAoZWVyYi0+cmVzaWR1YWwgPiAwKSB7CiAJCS8qIE9LIHdlIHN0aWxsIGhhdmUgYSBzZWNvbmQgaGFsZiBvZiBhIHJlY29yZCB0byBkZWxpdmVyICovCi0JCWVmZmVjdGl2ZV9jb3VudCA9IG1pbihlZXJiLT5yZXNpZHVhbCwgKGludCljb3VudCk7CisJCWVmZmVjdGl2ZV9jb3VudCA9IG1pbihlZXJiLT5yZXNpZHVhbCwgKGludCkgY291bnQpOwogCQllZXJiLT5yZXNpZHVhbCAtPSBlZmZlY3RpdmVfY291bnQ7CiAJfSBlbHNlIHsKIAkJdGMgPSAwOwogCQl3aGlsZSAoIXRjKSB7Ci0JCQl0YyA9IGRhc2RfZWVyX3JlYWRfYnVmZmVyKGVlcmIsCi0JCQkJc2l6ZW9mKHRhaWxjb3VudCksIChjaGFyKikoJnRhaWxjb3VudCkpOworCQkJdGMgPSBkYXNkX2Vlcl9yZWFkX2J1ZmZlcihlZXJiLCAoY2hhciAqKSAmdGFpbGNvdW50LAorCQkJCQkJICBzaXplb2YodGFpbGNvdW50KSk7CiAJCQlpZiAoIXRjKSB7CiAJCQkJLyogbm8gZGF0YSBhdmFpbGFibGUgKi8KIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWZmZXJsb2NrLCBmbGFncyk7CkBAIC05NjEsMTAgKzYwNSw5IEBACiAJCQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoCiAJCQkJCWRhc2RfZWVyX3JlYWRfd2FpdF9xdWV1ZSwKIAkJCQkJZWVyYi0+aGVhZCAhPSBlZXJiLT50YWlsKTsKLQkJCQlpZiAocmMpIHsKKwkJCQlpZiAocmMpCiAJCQkJCXJldHVybiByYzsKLQkJCQl9Ci0JCQkJaWYoZG93bl9pbnRlcnJ1cHRpYmxlKCZyZWFkYnVmZmVyX211dGV4KSkKKwkJCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZyZWFkYnVmZmVyX211dGV4KSkKIAkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVmZmVybG9jaywgZmxhZ3MpOwogCQkJfQpAQCAtOTc0LDcgKzYxNyw3IEBACiAJCWVlcmItPnJlc2lkdWFsID0gdGFpbGNvdW50IC0gZWZmZWN0aXZlX2NvdW50OwogCX0KIAotCXRjID0gZGFzZF9lZXJfcmVhZF9idWZmZXIoZWVyYiwgZWZmZWN0aXZlX2NvdW50LCByZWFkYnVmZmVyKTsKKwl0YyA9IGRhc2RfZWVyX3JlYWRfYnVmZmVyKGVlcmIsIHJlYWRidWZmZXIsIGVmZmVjdGl2ZV9jb3VudCk7CiAJV0FSTl9PTih0YyAhPSBlZmZlY3RpdmVfY291bnQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVmZmVybG9jaywgZmxhZ3MpOwpAQCAtOTg4LDE0ICs2MzEsMTMgQEAKIAlyZXR1cm4gZWZmZWN0aXZlX2NvdW50OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1kYXNkX2Vlcl9wb2xsIChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqcHRhYmxlKQorc3RhdGljIHVuc2lnbmVkIGludCBkYXNkX2Vlcl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICpwdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IG1hc2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWVyYnVmZmVyICplZXJiOwogCi0JZWVyYiA9IChzdHJ1Y3QgZWVyYnVmZmVyICopZmlscC0+cHJpdmF0ZV9kYXRhOworCWVlcmIgPSAoc3RydWN0IGVlcmJ1ZmZlciAqKSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJcG9sbF93YWl0KGZpbHAsICZkYXNkX2Vlcl9yZWFkX3dhaXRfcXVldWUsIHB0YWJsZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1ZmZlcmxvY2ssIGZsYWdzKTsKIAlpZiAoZWVyYi0+aGVhZCAhPSBlZXJiLT50YWlsKQpAQCAtMTAwOSw4ICs2NTEsNiBAQAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFzZF9lZXJfZm9wcyA9IHsKIAkub3BlbgkJPSAmZGFzZF9lZXJfb3BlbiwKIAkucmVsZWFzZQk9ICZkYXNkX2Vlcl9jbG9zZSwKLQkudW5sb2NrZWRfaW9jdGwgPSAmZGFzZF9lZXJfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bAk9ICZkYXNkX2Vlcl9pb2N0bCwKIAkucmVhZAkJPSAmZGFzZF9lZXJfcmVhZCwKIAkucG9sbAkJPSAmZGFzZF9lZXJfcG9sbCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCkBAIC0xMDIyLDY5ICs2NjIsMjEgQEAKIAkuZm9wcwkgICAgPSAmZGFzZF9lZXJfZm9wcywKIH07CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoJSW5pdCBhbmQgZXhpdAkJCQkJCQkgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQKLV9faW5pdCBkYXNkX2Vlcl9pbml0KHZvaWQpCitpbnQgX19pbml0IGRhc2RfZWVyX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CiAKLQlkYXNkX2Vlcl93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZGFzZF9lZXIiKTsKLQlpZiAoIWRhc2RfZWVyX3dvcmtxdWV1ZSkgewotCQlNRVNTQUdFKEtFUk5fRVJSICwgIiVzIiwgImRhc2RfZWVyX2luaXQgY291bGQgbm90ICIKLQkJICAgICAgICJjcmVhdGUgd29ya3F1ZXVlIFxuIik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSBkYXNkX3JlZ2lzdGVyX2Vlcl9ub3RpZmllcigmZGFzZF9lZXJfbmIpOwotCWlmIChyYykgewotCQlNRVNTQUdFKEtFUk5fRVJSLCAiJXMiLCAiZGFzZF9lZXJfaW5pdCBjb3VsZCBub3QgIgotCQkgICAgICAgInJlZ2lzdGVyIGVycm9yIHJlcG9ydGluZyIpOwotCQlnb3RvIHF1ZXVlOwotCX0KLQotCWRhc2RfaW9jdGxfbm9fcmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RFRVJTRVQsIGRhc2RfaW9jdGxfc2V0X2Vlcik7Ci0JZGFzZF9pb2N0bF9ub19yZWdpc3RlcihUSElTX01PRFVMRSwgQklPREFTREVFUkdFVCwgZGFzZF9pb2N0bF9nZXRfZWVyKTsKLQotCS8qIHdlIGRvbid0IG5lZWQgb3VyIG93biBjaGFyYWN0ZXIgZGV2aWNlLAotCSAqIHNvIHdlIGp1c3QgcmVnaXN0ZXIgYXMgbWlzYyBkZXZpY2UgKi8KIAlyYyA9IG1pc2NfcmVnaXN0ZXIoJmRhc2RfZWVyX2Rldik7CiAJaWYgKHJjKSB7CiAJCU1FU1NBR0UoS0VSTl9FUlIsICIlcyIsICJkYXNkX2Vlcl9pbml0IGNvdWxkIG5vdCAiCiAJCSAgICAgICAicmVnaXN0ZXIgbWlzYyBkZXZpY2UiKTsKLQkJZ290byB1bnJlZ2lzdGVyOworCQlyZXR1cm4gcmM7CiAJfQogCiAJcmV0dXJuIDA7Ci0KLXVucmVnaXN0ZXI6Ci0JZGFzZF91bnJlZ2lzdGVyX2Vlcl9ub3RpZmllcigmZGFzZF9lZXJfbmIpOwotCWRhc2RfaW9jdGxfbm9fdW5yZWdpc3RlcihUSElTX01PRFVMRSwgQklPREFTREVFUlNFVCwKLQkJCQkgZGFzZF9pb2N0bF9zZXRfZWVyKTsKLQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RFRVJHRVQsCi0JCQkJIGRhc2RfaW9jdGxfZ2V0X2Vlcik7Ci1xdWV1ZToKLQlkZXN0cm95X3dvcmtxdWV1ZShkYXNkX2Vlcl93b3JrcXVldWUpOwotb3V0OgotCXJldHVybiByYzsKLQogfQotbW9kdWxlX2luaXQoZGFzZF9lZXJfaW5pdCk7CiAKLXN0YXRpYyB2b2lkCi1fX2V4aXQgZGFzZF9lZXJfZXhpdCh2b2lkKQordm9pZCBfX2V4aXQgZGFzZF9lZXJfZXhpdCh2b2lkKQogewotCWRhc2RfdW5yZWdpc3Rlcl9lZXJfbm90aWZpZXIoJmRhc2RfZWVyX25iKTsKLQlkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIoVEhJU19NT0RVTEUsIEJJT0RBU0RFRVJTRVQsCi0JCQkJIGRhc2RfaW9jdGxfc2V0X2Vlcik7Ci0JZGFzZF9pb2N0bF9ub191bnJlZ2lzdGVyKFRISVNfTU9EVUxFLCBCSU9EQVNERUVSR0VULAotCQkJCSBkYXNkX2lvY3RsX2dldF9lZXIpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKGRhc2RfZWVyX3dvcmtxdWV1ZSk7Ci0KIAlXQVJOX09OKG1pc2NfZGVyZWdpc3RlcigmZGFzZF9lZXJfZGV2KSAhPSAwKTsKIH0KLW1vZHVsZV9leGl0KGRhc2RfZWVyX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKaW5kZXggNjVkYzg0NC4uZmNlMjgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCkBAIC0xMDAsOCArMTAwLDYgQEAKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwogCi0JLyogTWFrZSB0aGUgZGlzayBrbm93bi4gKi8KLQlzZXRfY2FwYWNpdHkoZGV2aWNlLT5nZHAsIGRldmljZS0+YmxvY2tzIDw8IGRldmljZS0+czJiX3NoaWZ0KTsKIAliZGV2ID0gYmRnZXRfZGlzayhkZXZpY2UtPmdkcCwgMCk7CiAJaWYgKCFiZGV2IHx8IGJsa2Rldl9nZXQoYmRldiwgRk1PREVfUkVBRCwgMSkgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggZDFiMDhmYS4uNDI5M2JhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTI2LDcgKzI2LDcgQEAKICAqICAgbmV3OiB0aGUgZGFzZF9kZXZpY2Ugc3RydWN0dXJlIGlzIGFsbG9jYXRlZC4KICAqICAga25vd246IHRoZSBkaXNjaXBsaW5lIGZvciB0aGUgZGV2aWNlIGlzIGlkZW50aWZpZWQuCiAgKiAgIGJhc2ljOiB0aGUgZGV2aWNlIGNhbiBkbyBiYXNpYyBpL28uCi0gKiAgIGFjY2VwdDogdGhlIGRldmljZSBpcyBhbmFseXNlZCAoZm9ybWF0IGlzIGtub3duKS4KKyAqICAgdW5mbXQ6IHRoZSBkZXZpY2UgY291bGQgbm90IGJlIGFuYWx5emVkIChmb3JtYXQgaXMgdW5rbm93bikuCiAgKiAgIHJlYWR5OiBwYXJ0aXRpb24gZGV0ZWN0aW9uIGlzIGRvbmUgYW5kIHRoZSBkZXZpY2UgaXMgY2FuIGRvIGJsb2NrIGlvLgogICogICBvbmxpbmU6IHRoZSBkZXZpY2UgYWNjZXB0cyByZXF1ZXN0cyBmcm9tIHRoZSBibG9jayBkZXZpY2UgcXVldWUuCiAgKgpAQCAtNDcsOCArNDcsOSBAQAogI2RlZmluZSBEQVNEX1NUQVRFX05FVwkgIDAKICNkZWZpbmUgREFTRF9TVEFURV9LTk9XTiAgMQogI2RlZmluZSBEQVNEX1NUQVRFX0JBU0lDICAyCi0jZGVmaW5lIERBU0RfU1RBVEVfUkVBRFkgIDMKLSNkZWZpbmUgREFTRF9TVEFURV9PTkxJTkUgNAorI2RlZmluZSBEQVNEX1NUQVRFX1VORk1UICAzCisjZGVmaW5lIERBU0RfU1RBVEVfUkVBRFkgIDQKKyNkZWZpbmUgREFTRF9TVEFURV9PTkxJTkUgNQogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpAQCAtNjgsMTUgKzY5LDYgQEAKICAqLwogc3RydWN0IGRhc2RfZGV2aWNlOwogCi10eXBlZGVmIGludCAoKmRhc2RfaW9jdGxfZm5fdCkgKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBubywgbG9uZyBhcmdzKTsKLQotc3RydWN0IGRhc2RfaW9jdGwgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQlpbnQgbm87Ci0JZGFzZF9pb2N0bF9mbl90IGhhbmRsZXI7Ci19OwotCiB0eXBlZGVmIGVudW0gewogCWRhc2RfZXJhX2ZhdGFsID0gLTEsCS8qIG5vIGNoYW5jZSB0byByZWNvdmVyCQkgICAgICovCiAJZGFzZF9lcmFfbm9uZSA9IDAsCS8qIGRvbid0IHJlY292ZXIsIGV2ZXJ5dGhpbmcgYWxyaWdodCAqLwpAQCAtMjcxLDYgKzI2Myw3IEBACiAgICAgICAgIC8qIGkvbyBjb250cm9sIGZ1bmN0aW9ucy4gKi8KIAlpbnQgKCpmaWxsX2dlb21ldHJ5KSAoc3RydWN0IGRhc2RfZGV2aWNlICosIHN0cnVjdCBoZF9nZW9tZXRyeSAqKTsKIAlpbnQgKCpmaWxsX2luZm8pIChzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgc3RydWN0IGRhc2RfaW5mb3JtYXRpb24yX3QgKik7CisJaW50ICgqaW9jdGwpIChzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgdW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgZGFzZF9kaXNjaXBsaW5lICpkYXNkX2RpYWdfZGlzY2lwbGluZV9wb2ludGVyOwpAQCAtMjkyLDE3ICsyODUsNiBAQAogI2RlZmluZSBEQVNEX0VFUl9TVEFURUNIQU5HRSAzCiAjZGVmaW5lIERBU0RfRUVSX1BQUkNTVVNQRU5EIDQKIAotLyoKLSAqIFRoZSBkYXNkX2Vlcl90cmlnZ2VyIHN0cnVjdHVyZSBjb250YWlucyBhbGwgZGF0YSB0aGF0IHdlIG5lZWQgdG8gc2VuZAotICogYWxvbmcgd2l0aCBhbiBEQVNEX0VFUl9UUklHR0VSIG5vdGlmaWNhdGlvbi4KLSAqLwotc3RydWN0IGRhc2RfZWVyX3RyaWdnZXIgewotCXVuc2lnbmVkIGludCBpZDsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7Ci19OwotCi0KIHN0cnVjdCBkYXNkX2RldmljZSB7CiAJLyogQmxvY2sgZGV2aWNlIHN0dWZmLiAqLwogCXN0cnVjdCBnZW5kaXNrICpnZHA7CkBAIC0zMTcsMTAgKzI5OSwxMSBAQAogCXVuc2lnbmVkIHNob3J0IGZlYXR1cmVzOyAgICAgICAgLyogY29weSBvZiBkZXZtYXAtZmVhdHVyZXMgKHJlYWQtb25seSEpICovCiAKIAkvKiBleHRlbmRlZCBlcnJvciByZXBvcnRpbmcgc3R1ZmYgKGVlcikgKi8KLQl2b2lkICplZXI7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqZWVyX2NxcjsKIAogCS8qIERldmljZSBkaXNjaXBsaW5lIHN0dWZmLiAqLwogCXN0cnVjdCBkYXNkX2Rpc2NpcGxpbmUgKmRpc2NpcGxpbmU7CisJc3RydWN0IGRhc2RfZGlzY2lwbGluZSAqYmFzZV9kaXNjaXBsaW5lOwogCWNoYXIgKnByaXZhdGU7CiAKIAkvKiBEZXZpY2Ugc3RhdGUgYW5kIHRhcmdldCBzdGF0ZS4gKi8KQEAgLTM2Myw2ICszNDYsOCBAQAogLyogcGVyIGRldmljZSBmbGFncyAqLwogI2RlZmluZSBEQVNEX0ZMQUdfRFNDX0VSUk9SCTIJLyogcmV0dXJuIC1FSU8gd2hlbiBkaXNjb25uZWN0ZWQgKi8KICNkZWZpbmUgREFTRF9GTEFHX09GRkxJTkUJMwkvKiBkZXZpY2UgaXMgaW4gb2ZmbGluZSBwcm9jZXNzaW5nICovCisjZGVmaW5lIERBU0RfRkxBR19FRVJfU05TUwk0CS8qIEEgU05TUyBpcyByZXF1aXJlZCAqLworI2RlZmluZSBEQVNEX0ZMQUdfRUVSX0lOX1VTRQk1CS8qIEEgU05TUyByZXF1ZXN0IGlzIHJ1bm5pbmcgKi8KIAogdm9pZCBkYXNkX3B1dF9kZXZpY2Vfd2FrZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiAKQEAgLTUxOSwxMiArNTA0LDYgQEAKIGludCBkYXNkX2dlbmVyaWNfc2V0X29mZmxpbmUgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKIGludCBkYXNkX2dlbmVyaWNfbm90aWZ5KHN0cnVjdCBjY3dfZGV2aWNlICosIGludCk7CiB2b2lkIGRhc2RfZ2VuZXJpY19hdXRvX29ubGluZSAoc3RydWN0IGNjd19kcml2ZXIgKik7Ci1pbnQgZGFzZF9yZWdpc3Rlcl9lZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwotaW50IGRhc2RfdW5yZWdpc3Rlcl9lZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwotdm9pZCBkYXNkX3dyaXRlX2Vlcl90cmlnZ2VyKHVuc2lnbmVkIGludCAsIHN0cnVjdCBkYXNkX2RldmljZSAqLAotCQkJc3RydWN0IGRhc2RfY2N3X3JlcSAqKTsKLQotCiAKIC8qIGV4dGVybmFscyBpbiBkYXNkX2Rldm1hcC5jICovCiBleHRlcm4gaW50IGRhc2RfbWF4X2RldmluZGV4OwpAQCAtNTU4LDEwICs1MzcsNiBAQAogdm9pZCBkYXNkX2Rlc3Ryb3lfcGFydGl0aW9ucyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiAKIC8qIGV4dGVybmFscyBpbiBkYXNkX2lvY3RsLmMgKi8KLWludCAgZGFzZF9pb2N0bF9pbml0KHZvaWQpOwotdm9pZCBkYXNkX2lvY3RsX2V4aXQodm9pZCk7Ci1pbnQgIGRhc2RfaW9jdGxfbm9fcmVnaXN0ZXIoc3RydWN0IG1vZHVsZSAqLCBpbnQsIGRhc2RfaW9jdGxfZm5fdCk7Ci1pbnQgIGRhc2RfaW9jdGxfbm9fdW5yZWdpc3RlcihzdHJ1Y3QgbW9kdWxlICosIGludCwgZGFzZF9pb2N0bF9mbl90KTsKIGludCAgZGFzZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIGxvbmcgZGFzZF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIApAQCAtNTkyLDYgKzU2NywzMCBAQAogZGFzZF9lcmFfdCBkYXNkXzkzNDNfZXJwX2V4YW1pbmUoc3RydWN0IGRhc2RfY2N3X3JlcSAqLCBzdHJ1Y3QgaXJiICopOwogc3RydWN0IGRhc2RfY2N3X3JlcSAqZGFzZF85MzQzX2VycF9hY3Rpb24oc3RydWN0IGRhc2RfY2N3X3JlcSAqKTsKIAorLyogZXh0ZXJuYWxzIGluIGRhc2RfZWVyLmMgKi8KKyNpZmRlZiBDT05GSUdfREFTRF9FRVIKK2ludCBkYXNkX2Vlcl9pbml0KHZvaWQpOwordm9pZCBkYXNkX2Vlcl9leGl0KHZvaWQpOworaW50IGRhc2RfZWVyX2VuYWJsZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7Cit2b2lkIGRhc2RfZWVyX2Rpc2FibGUoc3RydWN0IGRhc2RfZGV2aWNlICopOwordm9pZCBkYXNkX2Vlcl93cml0ZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyLAorCQkgICAgdW5zaWduZWQgaW50IGlkKTsKK3ZvaWQgZGFzZF9lZXJfc25zcyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGRhc2RfZWVyX2VuYWJsZWQoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCit7CisJcmV0dXJuIGRldmljZS0+ZWVyX2NxciAhPSBOVUxMOworfQorI2Vsc2UKKyNkZWZpbmUgZGFzZF9lZXJfaW5pdCgpCQkoMCkKKyNkZWZpbmUgZGFzZF9lZXJfZXhpdCgpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRhc2RfZWVyX2VuYWJsZShkKQkoMCkKKyNkZWZpbmUgZGFzZF9lZXJfZGlzYWJsZShkKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRhc2RfZWVyX3dyaXRlKGQsYyxpKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRhc2RfZWVyX3Nuc3MoZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBkYXNkX2Vlcl9lbmFibGVkKGQpCSgwKQorI2VuZGlmCS8qIENPTkZJR19EQVNEX0VSUiAqLworCiAjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJCQkJLyogREFTRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwppbmRleCBmYWZlZWFlLi5iOGM4MGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogCiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgorI2luY2x1ZGUgPGFzbS9jbWIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAvKiBUaGlzIGlzIHVnbHkuLi4gKi8KQEAgLTIzLDExNiArMjQsMTIgQEAKIAogI2luY2x1ZGUgImRhc2RfaW50LmgiCiAKLS8qCi0gKiBTRUNUSU9OOiBpb2N0bCBmdW5jdGlvbnMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGRhc2RfaW9jdGxfbGlzdCA9IExJU1RfSEVBRF9JTklUKGRhc2RfaW9jdGxfbGlzdCk7Ci0KLS8qCi0gKiBGaW5kIHRoZSBpb2N0bCB3aXRoIG51bWJlciBuby4KLSAqLwotc3RhdGljIHN0cnVjdCBkYXNkX2lvY3RsICoKLWRhc2RfZmluZF9pb2N0bChpbnQgbm8pCi17Ci0Jc3RydWN0IGRhc2RfaW9jdGwgKmlvY3RsOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSAoaW9jdGwsICZkYXNkX2lvY3RsX2xpc3QsIGxpc3QpCi0JCWlmIChpb2N0bC0+bm8gPT0gbm8pCi0JCQlyZXR1cm4gaW9jdGw7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBSZWdpc3RlciBpb2N0bCB3aXRoIG51bWJlciBuby4KLSAqLwotaW50Ci1kYXNkX2lvY3RsX25vX3JlZ2lzdGVyKHN0cnVjdCBtb2R1bGUgKm93bmVyLCBpbnQgbm8sIGRhc2RfaW9jdGxfZm5fdCBoYW5kbGVyKQotewotCXN0cnVjdCBkYXNkX2lvY3RsICpuZXc7Ci0JaWYgKGRhc2RfZmluZF9pb2N0bChubykpCi0JCXJldHVybiAtRUJVU1k7Ci0JbmV3ID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBkYXNkX2lvY3RsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5ldyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQluZXctPm93bmVyID0gb3duZXI7Ci0JbmV3LT5ubyA9IG5vOwotCW5ldy0+aGFuZGxlciA9IGhhbmRsZXI7Ci0JbGlzdF9hZGQoJm5ldy0+bGlzdCwgJmRhc2RfaW9jdGxfbGlzdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBEZXJlZ2lzdGVyIGlvY3RsIHdpdGggbnVtYmVyIG5vLgotICovCi1pbnQKLWRhc2RfaW9jdGxfbm9fdW5yZWdpc3RlcihzdHJ1Y3QgbW9kdWxlICpvd25lciwgaW50IG5vLCBkYXNkX2lvY3RsX2ZuX3QgaGFuZGxlcikKLXsKLQlzdHJ1Y3QgZGFzZF9pb2N0bCAqb2xkID0gZGFzZF9maW5kX2lvY3RsKG5vKTsKLQlpZiAob2xkID09IE5VTEwpCi0JCXJldHVybiAtRU5PRU5UOwotCWlmIChvbGQtPm5vICE9IG5vIHx8IG9sZC0+aGFuZGxlciAhPSBoYW5kbGVyIHx8IG93bmVyICE9IG9sZC0+b3duZXIpCi0JCXJldHVybiAtRUlOVkFMOwotCWxpc3RfZGVsKCZvbGQtPmxpc3QpOwotCWtmcmVlKG9sZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotZGFzZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlucCwgc3RydWN0IGZpbGUgKmZpbHAsCi0JICAgdW5zaWduZWQgaW50IG5vLCB1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGlucC0+aV9iZGV2OwotCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkYXNkX2lvY3RsICppb2N0bDsKLQljb25zdCBjaGFyICpkaXI7Ci0JaW50IHJjOwotCi0JaWYgKChfSU9DX0RJUihubykgIT0gX0lPQ19OT05FKSAmJiAoZGF0YSA9PSAwKSkgewotCQlQUklOVF9ERUJVRygiZW1wdHkgZGF0YSBwdHIiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWRpciA9IF9JT0NfRElSIChubykgPT0gX0lPQ19OT05FID8gIjAiIDoKLQkJX0lPQ19ESVIgKG5vKSA9PSBfSU9DX1JFQUQgPyAiciIgOgotCQlfSU9DX0RJUiAobm8pID09IF9JT0NfV1JJVEUgPyAidyIgOiAKLQkJX0lPQ19ESVIgKG5vKSA9PSAoX0lPQ19SRUFEIHwgX0lPQ19XUklURSkgPyAicnciIDogInUiOwotCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCi0JCSAgICAgICJpb2N0bCAweCUwOHggJXMnMHgleCclZCglZCkgd2l0aCBkYXRhICU4bHgiLCBubywKLQkJICAgICAgZGlyLCBfSU9DX1RZUEUobm8pLCBfSU9DX05SKG5vKSwgX0lPQ19TSVpFKG5vKSwgZGF0YSk7Ci0JLyogU2VhcmNoIGZvciBpb2N0bCBubyBpbiB0aGUgaW9jdGwgbGlzdC4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvY3RsLCAmZGFzZF9pb2N0bF9saXN0LCBsaXN0KSB7Ci0JCWlmIChpb2N0bC0+bm8gPT0gbm8pIHsKLQkJCS8qIEZvdW5kIGEgbWF0Y2hpbmcgaW9jdGwuIENhbGwgaXQuICovCi0JCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGlvY3RsLT5vd25lcikpCi0JCQkJY29udGludWU7Ci0JCQlyYyA9IGlvY3RsLT5oYW5kbGVyKGJkZXYsIG5vLCBkYXRhKTsKLQkJCW1vZHVsZV9wdXQoaW9jdGwtPm93bmVyKTsKLQkJCXJldHVybiByYzsKLQkJfQotCX0KLQkvKiBObyBpb2N0bCB3aXRoIG51bWJlciBuby4gKi8KLQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBkZXZpY2UsCi0JCSAgICAgICJ1bmtub3duIGlvY3RsIDB4JTA4eD0lcycweCV4JyVkKCVkKSBkYXRhICU4bHgiLCBubywKLQkJICAgICAgZGlyLCBfSU9DX1RZUEUobm8pLCBfSU9DX05SKG5vKSwgX0lPQ19TSVpFKG5vKSwgZGF0YSk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLWxvbmcKLWRhc2RfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcnZhbDsKLQotCWxvY2tfa2VybmVsKCk7Ci0JcnZhbCA9IGRhc2RfaW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0KLQlyZXR1cm4gKHJ2YWwgPT0gLUVJTlZBTCkgPyAtRU5PSU9DVExDTUQgOiBydmFsOwotfQogCiBzdGF0aWMgaW50Ci1kYXNkX2lvY3RsX2FwaV92ZXJzaW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBubywgbG9uZyBhcmdzKQorZGFzZF9pb2N0bF9hcGlfdmVyc2lvbih2b2lkIF9fdXNlciAqYXJncCkKIHsKIAlpbnQgdmVyID0gREFTRF9BUElfVkVSU0lPTjsKLQlyZXR1cm4gcHV0X3VzZXIodmVyLCAoaW50IF9fdXNlciAqKSBhcmdzKTsKKwlyZXR1cm4gcHV0X3VzZXIodmVyLCAoaW50IF9fdXNlciAqKWFyZ3ApOwogfQogCiAvKgpAQCAtMTQwLDIwICszNywxOCBAQAogICogdXNlZCBieSBkYXNkZm10IGFmdGVyIEJJT0RBU0RESVNBQkxFIHRvIHJldHJpZ2dlciBibG9ja3NpemUgZGV0ZWN0aW9uCiAgKi8KIHN0YXRpYyBpbnQKLWRhc2RfaW9jdGxfZW5hYmxlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBubywgbG9uZyBhcmdzKQorZGFzZF9pb2N0bF9lbmFibGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7Ci0JZGV2aWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCWlmIChkZXZpY2UgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CisKIAlkYXNkX2VuYWJsZV9kZXZpY2UoZGV2aWNlKTsKIAkvKiBGb3JtYXR0aW5nIHRoZSBkYXNkIGRldmljZSBjYW4gY2hhbmdlIHRoZSBjYXBhY2l0eS4gKi8KLQlkb3duKCZiZGV2LT5iZF9zZW0pOworCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKIAlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsIChsb2ZmX3QpZ2V0X2NhcGFjaXR5KGRldmljZS0+Z2RwKSA8PCA5KTsKLQl1cCgmYmRldi0+YmRfc2VtKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyLDE1ICs1NywxMyBAQAogICogVXNlZCBieSBkYXNkZm10LiBEaXNhYmxlIEkvTyBvcGVyYXRpb25zIGJ1dCBhbGxvdyBpb2N0bHMuCiAgKi8KIHN0YXRpYyBpbnQKLWRhc2RfaW9jdGxfZGlzYWJsZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKK2Rhc2RfaW9jdGxfZGlzYWJsZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewotCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKLQlkZXZpY2UgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGRldmljZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qCiAJICogTWFuIHRoaXMgaXMgc2ljay4gV2UgZG9uJ3QgZG8gYSByZWFsIGRpc2FibGUgYnV0IG9ubHkgZG93bmdyYWRlCiAJICogdGhlIGRldmljZSB0byBEQVNEX1NUQVRFX0JBU0lDLiBUaGUgcmVhc29uIGlzIHRoYXQgZGFzZGZtdCB1c2VzCkBAIC0xODQsOSArNzcsOSBAQAogCSAqIFNldCBpX3NpemUgdG8gemVybywgc2luY2UgcmVhZCwgd3JpdGUsIGV0Yy4gY2hlY2sgYWdhaW5zdCB0aGlzCiAJICogdmFsdWUuCiAJICovCi0JZG93bigmYmRldi0+YmRfc2VtKTsKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CiAJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCAwKTsKLQl1cCgmYmRldi0+YmRfc2VtKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk0LDE4ICs4NywxMyBAQAogICogUXVpZXNjZSBkZXZpY2UuCiAgKi8KIHN0YXRpYyBpbnQKLWRhc2RfaW9jdGxfcXVpZXNjZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKK2Rhc2RfaW9jdGxfcXVpZXNjZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQogCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCQotCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoZGV2aWNlID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCQogCURFVl9NRVNTQUdFIChLRVJOX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCSAgICAgIlF1aWVzY2UgSU8gb24gZGV2aWNlIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldiksIGZsYWdzKTsKQEAgLTIxOSwxOCArMTA3LDEzIEBACiAgKiBRdWllc2NlIGRldmljZS4KICAqLwogc3RhdGljIGludAotZGFzZF9pb2N0bF9yZXN1bWUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCitkYXNkX2lvY3RsX3Jlc3VtZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQogCWlmICghY2FwYWJsZSAoQ0FQX1NZU19BRE1JTikpIAogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoZGV2aWNlID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJREVWX01FU1NBR0UgKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKIAkJICAgICAicmVzdW1lIElPIG9uIGRldmljZSIpOwogCQpAQCAtMzAyLDI1ICsxODUsMTkgQEAKICAqIEZvcm1hdCBkZXZpY2UuCiAgKi8KIHN0YXRpYyBpbnQKLWRhc2RfaW9jdGxfZm9ybWF0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBubywgbG9uZyBhcmdzKQorZGFzZF9pb2N0bF9mb3JtYXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7Ci0Jc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGZvcm1hdF9kYXRhX3QgZmRhdGE7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwotCWlmICghYXJncykKKwlpZiAoIWFyZ3ApCiAJCXJldHVybiAtRUlOVkFMOwotCS8qIGZkYXRhID09IE5VTEwgaXMgbm8gbG9uZ2VyIGEgdmFsaWQgYXJnIHRvIGRhc2RfZm9ybWF0ICEgKi8KLQlkZXZpY2UgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAoZGV2aWNlID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpCiAJCXJldHVybiAtRVJPRlM7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKCZmZGF0YSwgKHZvaWQgX191c2VyICopIGFyZ3MsCi0JCQkgICBzaXplb2YgKHN0cnVjdCBmb3JtYXRfZGF0YV90KSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZmZGF0YSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBmb3JtYXRfZGF0YV90KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKSB7CiAJCURFVl9NRVNTQUdFKEtFUk5fV0FSTklORywgZGV2aWNlLCAiJXMiLApAQCAtMzM1LDE3ICsyMTIsOCBAQAogICogUmVzZXQgZGV2aWNlIHByb2ZpbGUgaW5mb3JtYXRpb24KICAqLwogc3RhdGljIGludAotZGFzZF9pb2N0bF9yZXNldF9wcm9maWxlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBubywgbG9uZyBhcmdzKQorZGFzZF9pb2N0bF9yZXNldF9wcm9maWxlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwotCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVBQ0NFUzsKLQotCWRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoZGV2aWNlID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJbWVtc2V0KCZkZXZpY2UtPnByb2ZpbGUsIDAsIHNpemVvZiAoc3RydWN0IGRhc2RfcHJvZmlsZV9pbmZvX3QpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM1NCwzMSArMjIyLDI0IEBACiAgKiBSZXR1cm4gZGV2aWNlIHByb2ZpbGUgaW5mb3JtYXRpb24KICAqLwogc3RhdGljIGludAotZGFzZF9pb2N0bF9yZWFkX3Byb2ZpbGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCitkYXNkX2lvY3RsX3JlYWRfcHJvZmlsZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7Ci0Jc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7Ci0KLQlkZXZpY2UgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGRldmljZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCWlmIChkYXNkX3Byb2ZpbGVfbGV2ZWwgPT0gREFTRF9QUk9GSUxFX09GRikKIAkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoY29weV90b191c2VyKChsb25nIF9fdXNlciAqKSBhcmdzLCAobG9uZyAqKSAmZGV2aWNlLT5wcm9maWxlLAorCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmRldmljZS0+cHJvZmlsZSwKIAkJCSBzaXplb2YgKHN0cnVjdCBkYXNkX3Byb2ZpbGVfaW5mb190KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQogI2Vsc2UKIHN0YXRpYyBpbnQKLWRhc2RfaW9jdGxfcmVzZXRfcHJvZmlsZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKK2Rhc2RfaW9jdGxfcmVzZXRfcHJvZmlsZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAogc3RhdGljIGludAotZGFzZF9pb2N0bF9yZWFkX3Byb2ZpbGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCitkYXNkX2lvY3RsX3JlYWRfcHJvZmlsZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgdm9pZCBfX3VzZXIgKmFyZ3ApCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CkBAIC0zODgsMjIgKzI0OSwxOCBAQAogICogUmV0dXJuIGRhc2QgaW5mb3JtYXRpb24uIFVzZWQgZm9yIEJJT0RBU0RJTkZPIGFuZCBCSU9EQVNESU5GTzIuCiAgKi8KIHN0YXRpYyBpbnQKLWRhc2RfaW9jdGxfaW5mb3JtYXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IG5vLCBsb25nIGFyZ3MpCitkYXNkX2lvY3RsX2luZm9ybWF0aW9uKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlzdHJ1Y3QgZGFzZF9pbmZvcm1hdGlvbjJfdCAqZGFzZF9pbmZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjOwogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCi0JZGV2aWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCWlmIChkZXZpY2UgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAoIWRldmljZS0+ZGlzY2lwbGluZS0+ZmlsbF9pbmZvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRhc2RfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXNkX2luZm9ybWF0aW9uMl90KSwgR0ZQX0tFUk5FTCk7CisJZGFzZF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhc2RfaW5mb3JtYXRpb24yX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGFzZF9pbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC00NDYsOCArMzAzLDcgQEAKIAkJbWVtY3B5KGRhc2RfaW5mby0+dHlwZSwgZGV2aWNlLT5kaXNjaXBsaW5lLT5uYW1lLCA0KTsKIAllbHNlCiAJCW1lbWNweShkYXNkX2luZm8tPnR5cGUsICJub25lIiwgNCk7Ci0JZGFzZF9pbmZvLT5yZXFfcXVldWVfbGVuID0gMDsKLQlkYXNkX2luZm8tPmNoYW5xX2xlbiA9IDA7CisKIAlpZiAoZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLT5yZXF1ZXN0X2ZuKSB7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKmw7CiAjaWZkZWYgREFTRF9FWFRFTkRFRF9QUk9GSUxJTkcKQEAgLTQ2Nyw4ICszMjMsOCBAQAogCX0KIAogCXJjID0gMDsKLQlpZiAoY29weV90b191c2VyKChsb25nIF9fdXNlciAqKSBhcmdzLCAobG9uZyAqKSBkYXNkX2luZm8sCi0JCQkgKChubyA9PSAodW5zaWduZWQgaW50KSBCSU9EQVNESU5GTzIpID8KKwlpZiAoY29weV90b191c2VyKGFyZ3AsIGRhc2RfaW5mbywKKwkJCSAoKGNtZCA9PSAodW5zaWduZWQgaW50KSBCSU9EQVNESU5GTzIpID8KIAkJCSAgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9pbmZvcm1hdGlvbjJfdCkgOgogCQkJICBzaXplb2YgKHN0cnVjdCBkYXNkX2luZm9ybWF0aW9uX3QpKSkpCiAJCXJjID0gLUVGQVVMVDsKQEAgLTQ4MCw2OSArMzM2LDEwMyBAQAogICogU2V0IHJlYWQgb25seQogICovCiBzdGF0aWMgaW50Ci1kYXNkX2lvY3RsX3NldF9ybyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgbm8sIGxvbmcgYXJncykKK2Rhc2RfaW9jdGxfc2V0X3JvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHZvaWQgX191c2VyICphcmdwKQogewotCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOwotCWludCBpbnR2YWwsIHJjOworCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gIGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlpbnQgaW50dmFsOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKIAkJLy8gcm8gc2V0dGluZyBpcyBub3QgYWxsb3dlZCBmb3IgcGFydGl0aW9ucwogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZ2V0X3VzZXIoaW50dmFsLCAoaW50IF9fdXNlciAqKSBhcmdzKSkKKwlpZiAoZ2V0X3VzZXIoaW50dmFsLCAoaW50ICopYXJncCkpCiAJCXJldHVybiAtRUZBVUxUOwotCWRldmljZSA9ICBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaWYgKGRldmljZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAogCXNldF9kaXNrX3JvKGJkZXYtPmJkX2Rpc2ssIGludHZhbCk7Ci0JcmMgPSBkYXNkX3NldF9mZWF0dXJlKGRldmljZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZLCBpbnR2YWwpOwotCi0JcmV0dXJuIHJjOworCXJldHVybiBkYXNkX3NldF9mZWF0dXJlKGRldmljZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZLCBpbnR2YWwpOwogfQogCi0vKgotICogTGlzdCBvZiBzdGF0aWMgaW9jdGxzLgotICovCi1zdGF0aWMgc3RydWN0IHsgaW50IG5vOyBkYXNkX2lvY3RsX2ZuX3QgZm47IH0gZGFzZF9pb2N0bHNbXSA9CitzdGF0aWMgaW50CitkYXNkX2lvY3RsX3JlYWRhbGxfY21iKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgY21kLAorCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQl7IEJJT0RBU0RESVNBQkxFLCBkYXNkX2lvY3RsX2Rpc2FibGUgfSwKLQl7IEJJT0RBU0RFTkFCTEUsIGRhc2RfaW9jdGxfZW5hYmxlIH0sCi0JeyBCSU9EQVNEUVVJRVNDRSwgZGFzZF9pb2N0bF9xdWllc2NlIH0sCi0JeyBCSU9EQVNEUkVTVU1FLCBkYXNkX2lvY3RsX3Jlc3VtZSB9LAotCXsgQklPREFTREZNVCwgZGFzZF9pb2N0bF9mb3JtYXQgfSwKLQl7IEJJT0RBU0RJTkZPLCBkYXNkX2lvY3RsX2luZm9ybWF0aW9uIH0sCi0JeyBCSU9EQVNESU5GTzIsIGRhc2RfaW9jdGxfaW5mb3JtYXRpb24gfSwKLQl7IEJJT0RBU0RQUlJELCBkYXNkX2lvY3RsX3JlYWRfcHJvZmlsZSB9LAotCXsgQklPREFTRFBSUlNULCBkYXNkX2lvY3RsX3Jlc2V0X3Byb2ZpbGUgfSwKLQl7IEJMS1JPU0VULCBkYXNkX2lvY3RsX3NldF9ybyB9LAotCXsgREFTREFQSVZFUiwgZGFzZF9pb2N0bF9hcGlfdmVyc2lvbiB9LAotCXsgLTEsIE5VTEwgfQotfTsKKwlzdHJ1Y3QgY21iZGF0YSBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKikgYXJnOworCXNpemVfdCBzaXplID0gX0lPQ19TSVpFKGNtZCk7CisJc3RydWN0IGNtYmRhdGEgZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gY21mX3JlYWRhbGwoZGV2aWNlLT5jZGV2LCAmZGF0YSk7CisJaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFyZ3AsICZkYXRhLCBtaW4oc2l6ZSwgc2l6ZW9mKCphcmdwKSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gcmV0OworfQogCiBpbnQKLWRhc2RfaW9jdGxfaW5pdCh2b2lkKQorZGFzZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAotCWZvciAoaSA9IDA7IGRhc2RfaW9jdGxzW2ldLm5vICE9IC0xOyBpKyspCi0JCWRhc2RfaW9jdGxfbm9fcmVnaXN0ZXIoTlVMTCwgZGFzZF9pb2N0bHNbaV0ubm8sCi0JCQkJICAgICAgIGRhc2RfaW9jdGxzW2ldLmZuKTsKLQlyZXR1cm4gMDsKKwlpZiAoIWRldmljZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKIAorCWlmICgoX0lPQ19ESVIoY21kKSAhPSBfSU9DX05PTkUpICYmICFhcmcpIHsKKwkJUFJJTlRfREVCVUcoImVtcHR5IGRhdGEgcHRyIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBCSU9EQVNERElTQUJMRToKKwkJcmV0dXJuIGRhc2RfaW9jdGxfZGlzYWJsZShiZGV2KTsKKwljYXNlIEJJT0RBU0RFTkFCTEU6CisJCXJldHVybiBkYXNkX2lvY3RsX2VuYWJsZShiZGV2KTsKKwljYXNlIEJJT0RBU0RRVUlFU0NFOgorCQlyZXR1cm4gZGFzZF9pb2N0bF9xdWllc2NlKGRldmljZSk7CisJY2FzZSBCSU9EQVNEUkVTVU1FOgorCQlyZXR1cm4gZGFzZF9pb2N0bF9yZXN1bWUoZGV2aWNlKTsKKwljYXNlIEJJT0RBU0RGTVQ6CisJCXJldHVybiBkYXNkX2lvY3RsX2Zvcm1hdChiZGV2LCBhcmdwKTsKKwljYXNlIEJJT0RBU0RJTkZPOgorCQlyZXR1cm4gZGFzZF9pb2N0bF9pbmZvcm1hdGlvbihkZXZpY2UsIGNtZCwgYXJncCk7CisJY2FzZSBCSU9EQVNESU5GTzI6CisJCXJldHVybiBkYXNkX2lvY3RsX2luZm9ybWF0aW9uKGRldmljZSwgY21kLCBhcmdwKTsKKwljYXNlIEJJT0RBU0RQUlJEOgorCQlyZXR1cm4gZGFzZF9pb2N0bF9yZWFkX3Byb2ZpbGUoZGV2aWNlLCBhcmdwKTsKKwljYXNlIEJJT0RBU0RQUlJTVDoKKwkJcmV0dXJuIGRhc2RfaW9jdGxfcmVzZXRfcHJvZmlsZShkZXZpY2UpOworCWNhc2UgQkxLUk9TRVQ6CisJCXJldHVybiBkYXNkX2lvY3RsX3NldF9ybyhiZGV2LCBhcmdwKTsKKwljYXNlIERBU0RBUElWRVI6CisJCXJldHVybiBkYXNkX2lvY3RsX2FwaV92ZXJzaW9uKGFyZ3ApOworCWNhc2UgQklPREFTRENNRkVOQUJMRToKKwkJcmV0dXJuIGVuYWJsZV9jbWYoZGV2aWNlLT5jZGV2KTsKKwljYXNlIEJJT0RBU0RDTUZESVNBQkxFOgorCQlyZXR1cm4gZGlzYWJsZV9jbWYoZGV2aWNlLT5jZGV2KTsKKwljYXNlIEJJT0RBU0RSRUFEQUxMQ01COgorCQlyZXR1cm4gZGFzZF9pb2N0bF9yZWFkYWxsX2NtYihkZXZpY2UsIGNtZCwgYXJnKTsKKwlkZWZhdWx0OgorCQkvKiBpZiB0aGUgZGlzY2lwbGluZSBoYXMgYW4gaW9jdGwgbWV0aG9kIHRyeSBpdC4gKi8KKwkJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+aW9jdGwpIHsKKwkJCWludCBydmFsID0gZGV2aWNlLT5kaXNjaXBsaW5lLT5pb2N0bChkZXZpY2UsIGNtZCwgYXJncCk7CisJCQlpZiAocnZhbCAhPSAtRU5PSU9DVExDTUQpCisJCQkJcmV0dXJuIHJ2YWw7CisJCX0KKworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiB9CiAKLXZvaWQKLWRhc2RfaW9jdGxfZXhpdCh2b2lkKQorbG9uZworZGFzZF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWludCBpOworCWludCBydmFsOwogCi0JZm9yIChpID0gMDsgZGFzZF9pb2N0bHNbaV0ubm8gIT0gLTE7IGkrKykKLQkJZGFzZF9pb2N0bF9ub191bnJlZ2lzdGVyKE5VTEwsIGRhc2RfaW9jdGxzW2ldLm5vLAotCQkJCQkgZGFzZF9pb2N0bHNbaV0uZm4pOworCWxvY2tfa2VybmVsKCk7CisJcnZhbCA9IGRhc2RfaW9jdGwoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKKwlyZXR1cm4gKHJ2YWwgPT0gLUVJTlZBTCkgPyAtRU5PSU9DVExDTUQgOiBydmFsOwogfQotCi1FWFBPUlRfU1lNQk9MKGRhc2RfaW9jdGxfbm9fcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChkYXNkX2lvY3RsX25vX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDJkNWRhM2MuLjFhYTNjMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTkzLDYgKzkzLDkgQEAKIAljYXNlIERBU0RfU1RBVEVfQkFTSUM6CiAJCXNlcV9wcmludGYobSwgImJhc2ljIik7CiAJCWJyZWFrOworCWNhc2UgREFTRF9TVEFURV9VTkZNVDoKKwkJc2VxX3ByaW50ZihtLCAidW5mb3JtYXR0ZWQiKTsKKwkJYnJlYWs7CiAJY2FzZSBEQVNEX1NUQVRFX1JFQURZOgogCWNhc2UgREFTRF9TVEFURV9PTkxJTkU6CiAJCXNlcV9wcmludGYobSwgImFjdGl2ZSAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jCmluZGV4IDJlNzI3ZjQuLmJlOWIwNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYwpAQCAtMjczLDcgKzI3Myw3IEBACiAJbGlzdF9kZWwoJmRldl9pbmZvLT5saCk7CiAKIAlkZWxfZ2VuZGlzayhkZXZfaW5mby0+Z2QpOwotCWJsa19wdXRfcXVldWUoZGV2X2luZm8tPmRjc3NibGtfcXVldWUpOworCWJsa19jbGVhbnVwX3F1ZXVlKGRldl9pbmZvLT5kY3NzYmxrX3F1ZXVlKTsKIAlkZXZfaW5mby0+Z2QtPnF1ZXVlID0gTlVMTDsKIAlwdXRfZGlzayhkZXZfaW5mby0+Z2QpOwogCWRldmljZV91bnJlZ2lzdGVyKGRldik7CkBAIC0zODgsMTIgKzM4OCwxMSBAQAogCS8qCiAJICogZ2V0IGEgc3RydWN0IGRjc3NibGtfZGV2X2luZm8KIAkgKi8KLQlkZXZfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkY3NzYmxrX2Rldl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJZGV2X2luZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGNzc2Jsa19kZXZfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChkZXZfaW5mbyA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCW1lbXNldChkZXZfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBkY3NzYmxrX2Rldl9pbmZvKSk7CiAKIAlzdHJjcHkoZGV2X2luZm8tPnNlZ21lbnRfbmFtZSwgbG9jYWxfYnVmKTsKIAlzdHJsY3B5KGRldl9pbmZvLT5kZXYuYnVzX2lkLCBsb2NhbF9idWYsIEJVU19JRF9TSVpFKTsKQEAgLTQ5MSw3ICs0OTAsNyBAQAogdW5yZWdpc3Rlcl9kZXY6CiAJUFJJTlRfRVJSKCJkZXZpY2VfY3JlYXRlX2ZpbGUoKSBmYWlsZWQhXG4iKTsKIAlsaXN0X2RlbCgmZGV2X2luZm8tPmxoKTsKLQlibGtfcHV0X3F1ZXVlKGRldl9pbmZvLT5kY3NzYmxrX3F1ZXVlKTsKKwlibGtfY2xlYW51cF9xdWV1ZShkZXZfaW5mby0+ZGNzc2Jsa19xdWV1ZSk7CiAJZGV2X2luZm8tPmdkLT5xdWV1ZSA9IE5VTEw7CiAJcHV0X2Rpc2soZGV2X2luZm8tPmdkKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmZGV2X2luZm8tPmRldik7CkBAIC01MDUsNyArNTA0LDcgQEAKIHVubG9hZF9zZWc6CiAJc2VnbWVudF91bmxvYWQobG9jYWxfYnVmKTsKIGRlYWxsb2NfZ2VuZGlzazoKLQlibGtfcHV0X3F1ZXVlKGRldl9pbmZvLT5kY3NzYmxrX3F1ZXVlKTsKKwlibGtfY2xlYW51cF9xdWV1ZShkZXZfaW5mby0+ZGNzc2Jsa19xdWV1ZSk7CiAJZGV2X2luZm8tPmdkLT5xdWV1ZSA9IE5VTEw7CiAJcHV0X2Rpc2soZGV2X2luZm8tPmdkKTsKIGZyZWVfZGV2X2luZm86CkBAIC01NjIsNyArNTYxLDcgQEAKIAlsaXN0X2RlbCgmZGV2X2luZm8tPmxoKTsKIAogCWRlbF9nZW5kaXNrKGRldl9pbmZvLT5nZCk7Ci0JYmxrX3B1dF9xdWV1ZShkZXZfaW5mby0+ZGNzc2Jsa19xdWV1ZSk7CisJYmxrX2NsZWFudXBfcXVldWUoZGV2X2luZm8tPmRjc3NibGtfcXVldWUpOwogCWRldl9pbmZvLT5nZC0+cXVldWUgPSBOVUxMOwogCXB1dF9kaXNrKGRldl9pbmZvLT5nZCk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmRldl9pbmZvLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvY2hhci9NYWtlZmlsZQppbmRleCA2Mzc3YTk2Li4wYzAxNjJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvTWFrZWZpbGUKQEAgLTI2LDQgKzI2LDUgQEAKIHRhcGUtb2JqcyA6PSB0YXBlX2NvcmUubyB0YXBlX3N0ZC5vIHRhcGVfY2hhci5vICQodGFwZS15KQogb2JqLSQoQ09ORklHX1MzOTBfVEFQRSkgKz0gdGFwZS5vIHRhcGVfY2xhc3Mubwogb2JqLSQoQ09ORklHX1MzOTBfVEFQRV8zNFhYKSArPSB0YXBlXzM0eHgubworb2JqLSQoQ09ORklHX1MzOTBfVEFQRV8zNTkwKSArPSB0YXBlXzM1OTAubwogb2JqLSQoQ09ORklHX01PTlJFQURFUikgKz0gbW9ucmVhZGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2ZzMzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKaW5kZXggNWY2ZmE0Yy4uYTY0MTUzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMKQEAgLTM2OCwxMCArMzY4LDkgQEAKIHsKIAlzdHJ1Y3QgZnMzMjcwICpmcDsKIAotCWZwID0gKHN0cnVjdCBmczMyNzAgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IGZzMzI3MCksR0ZQX0tFUk5FTCk7CisJZnAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnMzMjcwKSxHRlBfS0VSTkVMKTsKIAlpZiAoIWZwKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQltZW1zZXQoZnAsIDAsIHNpemVvZihzdHJ1Y3QgZnMzMjcwKSk7CiAJZnAtPmluaXQgPSByYXczMjcwX3JlcXVlc3RfYWxsb2MoMCk7CiAJaWYgKElTX0VSUihmcC0+aW5pdCkpIHsKIAkJa2ZyZWUoZnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKaW5kZXggYTMxN2ExMi4uNmJhZGQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCkBAIC01MCwxNCArNTAsMTIgQEAKIAlzdHJ1Y3Qga2JkX2RhdGEgKmtiZDsKIAlpbnQgaSwgbGVuOwogCi0Ja2JkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtiZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJa2JkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGtiZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrYmQpCiAJCWdvdG8gb3V0OwotCW1lbXNldChrYmQsIDAsIHNpemVvZihzdHJ1Y3Qga2JkX2RhdGEpKTsKLQlrYmQtPmtleV9tYXBzID0ga21hbGxvYyhzaXplb2Yoa2V5X21hcHMpLCBHRlBfS0VSTkVMKTsKKwlrYmQtPmtleV9tYXBzID0ga3phbGxvYyhzaXplb2Yoa2V5X21hcHMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtleV9tYXBzKQogCQlnb3RvIG91dF9rYmQ7Ci0JbWVtc2V0KGtiZC0+a2V5X21hcHMsIDAsIHNpemVvZihrZXlfbWFwcykpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleV9tYXBzKTsgaSsrKSB7CiAJCWlmIChrZXlfbWFwc1tpXSkgewogCQkJa2JkLT5rZXlfbWFwc1tpXSA9CkBAIC02OCwxMCArNjYsOSBAQAogCQkJICAgICAgIHNpemVvZih1X3Nob3J0KSpOUl9LRVlTKTsKIAkJfQogCX0KLQlrYmQtPmZ1bmNfdGFibGUgPSBrbWFsbG9jKHNpemVvZihmdW5jX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJa2JkLT5mdW5jX3RhYmxlID0ga3phbGxvYyhzaXplb2YoZnVuY190YWJsZSksIEdGUF9LRVJORUwpOwogCWlmICgha2JkLT5mdW5jX3RhYmxlKQogCQlnb3RvIG91dF9tYXBzOwotCW1lbXNldChrYmQtPmZ1bmNfdGFibGUsIDAsIHNpemVvZihmdW5jX3RhYmxlKSk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnVuY190YWJsZSk7IGkrKykgewogCQlpZiAoZnVuY190YWJsZVtpXSkgewogCQkJbGVuID0gc3RybGVuKGZ1bmNfdGFibGVbaV0pICsgMTsKQEAgLTgyLDEwICs3OSw5IEBACiAJCX0KIAl9CiAJa2JkLT5mbl9oYW5kbGVyID0KLQkJa21hbGxvYyhzaXplb2YoZm5faGFuZGxlcl9mbiAqKSAqIE5SX0ZOX0hBTkRMRVIsIEdGUF9LRVJORUwpOworCQlremFsbG9jKHNpemVvZihmbl9oYW5kbGVyX2ZuICopICogTlJfRk5fSEFORExFUiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrYmQtPmZuX2hhbmRsZXIpCiAJCWdvdG8gb3V0X2Z1bmM7Ci0JbWVtc2V0KGtiZC0+Zm5faGFuZGxlciwgMCwgc2l6ZW9mKGZuX2hhbmRsZXJfZm4gKikgKiBOUl9GTl9IQU5ETEVSKTsKIAlrYmQtPmFjY2VudF90YWJsZSA9CiAJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrYmRpYWNyKSpNQVhfRElBQ1IsIEdGUF9LRVJORUwpOwogCWlmICgha2JkLT5hY2NlbnRfdGFibGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCmluZGV4IDVmZDNhZDguLmZiN2JjOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCkBAIC0yNTcsMTQgKzI1NywxMyBAQAogCWludCBpLGo7CiAJc3RydWN0IG1vbl9wcml2YXRlICptb25wcml2OwogCi0JbW9ucHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb25fcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCW1vbnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW9uX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1vbnByaXYpIHsKIAkJUF9FUlJPUigibm8gbWVtb3J5IGZvciBtb25wcml2XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChtb25wcml2LCAwLCBzaXplb2Yoc3RydWN0IG1vbl9wcml2YXRlKSk7CiAJZm9yIChpID0gMDsgaSA8IE1PTl9NU0dMSU07IGkrKykgewotCQltb25wcml2LT5tc2dfYXJyYXlbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW9uX21zZyksCisJCW1vbnByaXYtPm1zZ19hcnJheVtpXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb25fbXNnKSwKIAkJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFtb25wcml2LT5tc2dfYXJyYXlbaV0pIHsKIAkJCVBfRVJST1IoIm9wZW4sIG5vIG1lbW9yeSBmb3IgbXNnX2FycmF5XG4iKTsKQEAgLTI3Miw3ICsyNzEsNiBAQAogCQkJCWtmcmVlKG1vbnByaXYtPm1zZ19hcnJheVtqXSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQltZW1zZXQobW9ucHJpdi0+bXNnX2FycmF5W2ldLCAwLCBzaXplb2Yoc3RydWN0IG1vbl9tc2cpKTsKIAl9CiAJcmV0dXJuIG1vbnByaXY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggMTAyNmYyYi4uYmQwNjYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtMTE1LDEwICsxMTUsOSBAQAogCXN0cnVjdCByYXczMjcwX3JlcXVlc3QgKnJxOwogCiAJLyogQWxsb2NhdGUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KLQlycSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByYXczMjcwX3JlcXVlc3QpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJcnEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmF3MzI3MF9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghcnEpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCW1lbXNldChycSwgMCwgc2l6ZW9mKHN0cnVjdCByYXczMjcwX3JlcXVlc3QpKTsKIAogCS8qIGFsbG9jIG91dHB1dCBidWZmZXIuICovCiAJaWYgKHNpemUgPiAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmggYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKaW5kZXggMDFkODY1ZC4uY2Q1MWFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaApAQCAtMjUwLDYgKzI1MCw3IEBACiBleHRlcm4gaW50IHRhcGVfZG9faW8oc3RydWN0IHRhcGVfZGV2aWNlICosIHN0cnVjdCB0YXBlX3JlcXVlc3QgKik7CiBleHRlcm4gaW50IHRhcGVfZG9faW9fYXN5bmMoc3RydWN0IHRhcGVfZGV2aWNlICosIHN0cnVjdCB0YXBlX3JlcXVlc3QgKik7CiBleHRlcm4gaW50IHRhcGVfZG9faW9faW50ZXJydXB0aWJsZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKiwgc3RydWN0IHRhcGVfcmVxdWVzdCAqKTsKK2V4dGVybiBpbnQgdGFwZV9jYW5jZWxfaW8oc3RydWN0IHRhcGVfZGV2aWNlICosIHN0cnVjdCB0YXBlX3JlcXVlc3QgKik7CiB2b2lkIHRhcGVfaG90cGx1Z19ldmVudChzdHJ1Y3QgdGFwZV9kZXZpY2UgKiwgaW50IG1ham9yLCBpbnQgYWN0aW9uKTsKIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKaW5kZXggNjgyMDM5Yy4uZDRmMmRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKQEAgLTIsOCArMiw3IEBACiAgKiAgZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKICAqICAgIHRhcGUgZGV2aWNlIGRpc2NpcGxpbmUgZm9yIDM0ODAvMzQ5MCB0YXBlcy4KICAqCi0gKiAgUzM5MCBhbmQgelNlcmllcyB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDAxLDIwMDYKICAqICAgIEF1dGhvcihzKTogQ2Fyc3RlbiBPdHRlIDxjb3R0ZUBkZS5pYm0uY29tPgogICoJCSBUdWFuIE5nby1BbmggPG5nb2FuaEBkZS5pYm0uY29tPgogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkBAIC0yOCwxMSArMjcsNiBAQAogZGVidWdfaW5mb190ICpUQVBFX0RCRl9BUkVBID0gTlVMTDsKIEVYUE9SVF9TWU1CT0woVEFQRV9EQkZfQVJFQSk7CiAKLWVudW0gdGFwZV8zNHh4X3R5cGUgewotCXRhcGVfMzQ4MCwKLQl0YXBlXzM0OTAsCi19OwotCiAjZGVmaW5lIFRBUEUzNFhYX0ZNVF8zNDgwCTAKICNkZWZpbmUgVEFQRTM0WFhfRk1UXzM0ODBfMl9YRgkxCiAjZGVmaW5lIFRBUEUzNFhYX0ZNVF8zNDgwX1hGCTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5MTVmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jCkBAIC0wLDAgKzEsMTMwMSBAQAorLyoKKyAqICBkcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYworICogICAgdGFwZSBkZXZpY2UgZGlzY2lwbGluZSBmb3IgMzU5MCB0YXBlcy4KKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDAxLDIwMDYKKyAqICAgIEF1dGhvcihzKTogU3RlZmFuIEJhZGVyIDxzaGJhZGVyQGRlLmlibS5jb20+CisgKgkJIE1pY2hhZWwgSG9semhldSA8aG9semhldUBkZS5pYm0uY29tPgorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKworI2RlZmluZSBUQVBFX0RCRl9BUkVBCXRhcGVfMzU5MF9kYmYKKworI2luY2x1ZGUgInRhcGUuaCIKKyNpbmNsdWRlICJ0YXBlX3N0ZC5oIgorI2luY2x1ZGUgInRhcGVfMzU5MC5oIgorCisvKgorICogUG9pbnRlciB0byBkZWJ1ZyBhcmVhLgorICovCitkZWJ1Z19pbmZvX3QgKlRBUEVfREJGX0FSRUEgPSBOVUxMOworRVhQT1JUX1NZTUJPTChUQVBFX0RCRl9BUkVBKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVycm9yIFJlY292ZXJ5IGZ1Y3Rpb25zOgorICogLSBSZWFkIE9wcG9zaXRlOgkJIGltcGxlbWVudGVkCisgKiAtIFJlYWQgRGV2aWNlIChidWZmZXJlZCkgbG9nOiBCUkEKKyAqIC0gUmVhZCBMaWJyYXJ5IGxvZzoJCSBCUkEKKyAqIC0gU3dhcCBEZXZpY2VzOgkJIEJSQQorICogLSBMb25nIEJ1c3k6CQkJIEJSQQorICogLSBTcGVjaWFsIEludGVyY2VwdDoJCSBCUkEKKyAqIC0gUmVhZCBBbHRlcm5hdGU6CQkgaW1wbGVtZW50ZWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfMzU5MDogIgorCitzdGF0aWMgY29uc3QgY2hhciAqdGFwZV8zNTkwX21zZ1tUQVBFXzM1OTBfTUFYX01TR10gPSB7CisJWzB4MDBdID0gIiIsCisJWzB4MTBdID0gIkxvc3QgU2Vuc2UiLAorCVsweDExXSA9ICJBc3NpZ25lZCBFbHNld2hlcmUiLAorCVsweDEyXSA9ICJBbGxlZ2lhbmNlIFJlc2V0IiwKKwlbMHgxM10gPSAiU2hhcmVkIEFjY2VzcyBWaW9sYXRpb24iLAorCVsweDIwXSA9ICJDb21tYW5kIFJlamVjdCIsCisJWzB4MjFdID0gIkNvbmZpZ3VyYXRpb24gRXJyb3IiLAorCVsweDIyXSA9ICJQcm90ZWN0aW9uIEV4Y2VwdGlvbiIsCisJWzB4MjNdID0gIldyaXRlIFByb3RlY3QiLAorCVsweDI0XSA9ICJXcml0ZSBMZW5ndGgiLAorCVsweDI1XSA9ICJSZWFkLU9ubHkgRm9ybWF0IiwKKwlbMHgzMV0gPSAiQmVnaW5uaW5nIG9mIFBhcnRpdGlvbiIsCisJWzB4MzNdID0gIkVuZCBvZiBQYXJ0aXRpb24iLAorCVsweDM0XSA9ICJFbmQgb2YgRGF0YSIsCisJWzB4MzVdID0gIkJsb2NrIG5vdCBmb3VuZCIsCisJWzB4NDBdID0gIkRldmljZSBJbnRlcnZlbnRpb24iLAorCVsweDQxXSA9ICJMb2FkZXIgSW50ZXJ2ZW50aW9uIiwKKwlbMHg0Ml0gPSAiTGlicmFyeSBJbnRlcnZlbnRpb24iLAorCVsweDUwXSA9ICJXcml0ZSBFcnJvciIsCisJWzB4NTFdID0gIkVyYXNlIEVycm9yIiwKKwlbMHg1Ml0gPSAiRm9ybWF0dGluZyBFcnJvciIsCisJWzB4NTNdID0gIlJlYWQgRXJyb3IiLAorCVsweDU0XSA9ICJVbnN1cHBvcnRlZCBGb3JtYXQiLAorCVsweDU1XSA9ICJObyBGb3JtYXR0aW5nIiwKKwlbMHg1Nl0gPSAiUG9zaXRpb25pbmcgbG9zdCIsCisJWzB4NTddID0gIlJlYWQgTGVuZ3RoIiwKKwlbMHg2MF0gPSAiVW5zdXBwb3J0ZWQgTWVkaXVtIiwKKwlbMHg2MV0gPSAiTWVkaXVtIExlbmd0aCBFcnJvciIsCisJWzB4NjJdID0gIk1lZGl1bSByZW1vdmVkIiwKKwlbMHg2NF0gPSAiTG9hZCBDaGVjayIsCisJWzB4NjVdID0gIlVubG9hZCBDaGVjayIsCisJWzB4NzBdID0gIkVxdWlwbWVudCBDaGVjayIsCisJWzB4NzFdID0gIkJ1cyBvdXQgQ2hlY2siLAorCVsweDcyXSA9ICJQcm90b2NvbCBFcnJvciIsCisJWzB4NzNdID0gIkludGVyZmFjZSBFcnJvciIsCisJWzB4NzRdID0gIk92ZXJydW4iLAorCVsweDc1XSA9ICJIYWx0IFNpZ25hbCIsCisJWzB4OTBdID0gIkRldmljZSBmZW5jZWQiLAorCVsweDkxXSA9ICJEZXZpY2UgUGF0aCBmZW5jZWQiLAorCVsweGEwXSA9ICJWb2x1bWUgbWlzcGxhY2VkIiwKKwlbMHhhMV0gPSAiVm9sdW1lIGluYWNjZXNzaWJsZSIsCisJWzB4YTJdID0gIlZvbHVtZSBpbiBpbnB1dCIsCisJWzB4YTNdID0gIlZvbHVtZSBlamVjdGVkIiwKKwlbMHhhNF0gPSAiQWxsIGNhdGVnb3JpZXMgcmVzZXJ2ZWQiLAorCVsweGE1XSA9ICJEdXBsaWNhdGUgVm9sdW1lIiwKKwlbMHhhNl0gPSAiTGlicmFyeSBNYW5hZ2VyIE9mZmxpbmUiLAorCVsweGE3XSA9ICJMaWJyYXJ5IE91dHB1dCBTdGF0aW9uIGZ1bGwiLAorCVsweGE4XSA9ICJWaXNpb24gU3lzdGVtIG5vbi1vcGVyYXRpb25hbCIsCisJWzB4YTldID0gIkxpYnJhcnkgTWFuYWdlciBFcXVpcG1lbnQgQ2hlY2siLAorCVsweGFhXSA9ICJMaWJyYXJ5IEVxdWlwbWVudCBDaGVjayIsCisJWzB4YWJdID0gIkFsbCBMaWJyYXJ5IENlbGxzIGZ1bGwiLAorCVsweGFjXSA9ICJObyBDbGVhbmVyIFZvbHVtZXMgaW4gTGlicmFyeSIsCisJWzB4YWRdID0gIkkvTyBTdGF0aW9uIGRvb3Igb3BlbiIsCisJWzB4YWVdID0gIlN1YnN5c3RlbSBlbnZpcm9ubWVudGFsIGFsZXJ0IiwKK307CisKKy8qCisgKiAzNTkwIElPQ1RMIE92ZXJsb2FkCisgKi8KK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9pb2N0bChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRBUEUzOTBfRElTUExBWTogeworCQlzdHJ1Y3QgZGlzcGxheV9zdHJ1Y3QgZGlzcDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmRpc3AsIChjaGFyIF9fdXNlciAqKSBhcmcsIHNpemVvZihkaXNwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gdGFwZV9zdGRfZGlzcGxheShkZXZpY2UsICZkaXNwKTsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CS8qIG5vIGFkZGl0aW9uYWwgaW9jdGxzICovCisJfQorfQorCisvKgorICogU0VOU0UgTWVkaXVtOiBHZXQgU2Vuc2UgZGF0YSBhYm91dCBtZWRpdW0gc3RhdGUKKyAqLworc3RhdGljIGludAordGFwZV8zNTkwX3NlbnNlX21lZGl1bShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IHRhcGVfYWxsb2NfcmVxdWVzdCgxLCAxMjgpOworCWlmIChJU19FUlIocmVxdWVzdCkpCisJCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOworCXJlcXVlc3QtPm9wID0gVE9fTVNFTjsKKwl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyLCBNRURJVU1fU0VOU0UsIDEyOCwgcmVxdWVzdC0+Y3BkYXRhKTsKKwlyZXR1cm4gdGFwZV9kb19pb19mcmVlKGRldmljZSwgcmVxdWVzdCk7Cit9CisKKy8qCisgKiBNVFRFTEw6IFRlbGwgYmxvY2suIFJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrIHJlbGF0aXZlIHRvIGN1cnJlbnQgZmlsZS4KKyAqLworc3RhdGljIGludAordGFwZV8zNTkwX210dGVsbChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgaW50IG10X2NvdW50KQoreworCV9fdTY0IGJsb2NrX2lkOworCWludCByYzsKKworCXJjID0gdGFwZV9zdGRfcmVhZF9ibG9ja19pZChkZXZpY2UsICZibG9ja19pZCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIGJsb2NrX2lkID4+IDMyOworfQorCisvKgorICogTVRTRUVLOiBzZWVrIHRvIHRoZSBzcGVjaWZpZWQgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9tdHNlZWsoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJREJGX0VWRU5UKDYsICJ4c2VlIGlkOiAleFxuIiwgY291bnQpOworCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMywgNCk7CisJaWYgKElTX0VSUihyZXF1ZXN0KSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxdWVzdCk7CisJcmVxdWVzdC0+b3AgPSBUT19MQkw7CisJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyLCBNT0RFX1NFVF9EQiwgMSwgZGV2aWNlLT5tb2Rlc2V0X2J5dGUpOworCSooX191MzIgKikgcmVxdWVzdC0+Y3BkYXRhID0gY291bnQ7CisJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyICsgMSwgTE9DQVRFLCA0LCByZXF1ZXN0LT5jcGRhdGEpOworCXRhcGVfY2N3X2VuZChyZXF1ZXN0LT5jcGFkZHIgKyAyLCBOT1AsIDAsIE5VTEwpOworCXJldHVybiB0YXBlX2RvX2lvX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKK30KKworLyoKKyAqIFJlYWQgT3Bwb3NpdGUgRXJyb3IgUmVjb3ZlcnkgRnVuY3Rpb246CisgKiBVc2VkLCB3aGVuIFJlYWQgRm9yd2FyZCBkb2VzIG5vdCB3b3JrCisgKi8KK3N0YXRpYyB2b2lkCit0YXBlXzM1OTBfcmVhZF9vcHBvc2l0ZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwKKwkJCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHRhcGVfMzU5MF9kaXNjX2RhdGEgKmRhdGE7CisKKwkvKgorCSAqIFdlIGhhdmUgYWxsb2NhdGVkIDQgY2N3cyBpbiB0YXBlX3N0ZF9yZWFkLCBzbyB3ZSBjYW4gbm93CisJICogdHJhbnNmb3JtIHRoZSByZXF1ZXN0IHRvIGEgcmVhZCBiYWNrd2FyZCwgZm9sbG93ZWQgYnkgYQorCSAqIGZvcndhcmQgc3BhY2UgYmxvY2suCisJICovCisJcmVxdWVzdC0+b3AgPSBUT19SQkE7CisJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyLCBNT0RFX1NFVF9EQiwgMSwgZGV2aWNlLT5tb2Rlc2V0X2J5dGUpOworCWRhdGEgPSBkZXZpY2UtPmRpc2NkYXRhOworCXRhcGVfY2N3X2NjX2lkYWwocmVxdWVzdC0+Y3BhZGRyICsgMSwgZGF0YS0+cmVhZF9iYWNrX29wLAorCQkJIGRldmljZS0+Y2hhcl9kYXRhLmlkYWxfYnVmKTsKKwl0YXBlX2Njd19jYyhyZXF1ZXN0LT5jcGFkZHIgKyAyLCBGT1JTUEFDRUJMT0NLLCAwLCBOVUxMKTsKKwl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyICsgMywgTk9QLCAwLCBOVUxMKTsKKwlEQkZfRVZFTlQoNiwgInhyb3AgY2N3Z1xuIik7Cit9CisKKy8qCisgKiBSZWFkIEF0dGVudGlvbiBNc2cKKyAqIFRoaXMgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgYW4gaW50ZXJydXB0IHdpdGggYXR0ZW50aW9uIGJpdCAoMHg4MCkKKyAqIGluIGRldmljZSBzdGF0ZS4KKyAqCisgKiBBZnRlciBhICJyZWFkIGF0dGVudGlvbiBtZXNzYWdlIiByZXF1ZXN0IHRoZXJlIGFyZSB0d28gcG9zc2libGUKKyAqIHJlc3VsdHM6CisgKgorICogMS4gQSB1bml0IGNoZWNrIGlzIHByZXNlbnRlZCwgd2hlbiBhdHRlbnRpb24gc2Vuc2UgaXMgcHJlc2VudCAoZS5nLiB3aGVuCisgKiBhIG1lZGl1bSBoYXMgYmVlbiB1bmxvYWRlZCkuIFRoZSBhdHRlbnRpb24gc2Vuc2UgY29tZXMgdGhlbgorICogdG9nZXRoZXIgd2l0aCB0aGUgdW5pdCBjaGVjay4gVGhlIHJlY292ZXJ5IGFjdGlvbiBpcyBlaXRoZXIgInJldHJ5IgorICogKGluIGNhc2UgdGhlcmUgaXMgYW4gYXR0ZW50aW9uIG1lc3NhZ2UgcGVuZGluZykgb3IgInBlcm1hbmVudCBlcnJvciIuCisgKgorICogMi4gVGhlIGF0dGVudGlvbiBtc2cgaXMgd3JpdHRlbiB0byB0aGUgInJlYWQgc3Vic3lzdGVtIGRhdGEiIGJ1ZmZlci4KKyAqIEluIHRoaXMgY2FzZSB3ZSBwcm9iYWJseSBzaG91bGQgcHJpbnQgaXQgdG8gdGhlIGNvbnNvbGUuCisgKi8KK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9yZWFkX2F0dG1zZyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCWNoYXIgKmJ1ZjsKKworCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMywgNDA5Nik7CisJaWYgKElTX0VSUihyZXF1ZXN0KSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxdWVzdCk7CisJcmVxdWVzdC0+b3AgPSBUT19SRUFEX0FUVE1TRzsKKwlidWYgPSByZXF1ZXN0LT5jcGRhdGE7CisJYnVmWzBdID0gUFJFUF9SRF9TU19EQVRBOworCWJ1Zls2XSA9IFJEX0FUVE1TRzsJLyogcmVhZCBhdHQgbXNnICovCisJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyLCBQRVJGT1JNX1NTX0ZVTkMsIDEyLCBidWYpOworCXRhcGVfY2N3X2NjKHJlcXVlc3QtPmNwYWRkciArIDEsIFJFQURfU1NfREFUQSwgNDA5NiAtIDEyLCBidWYgKyAxMik7CisJdGFwZV9jY3dfZW5kKHJlcXVlc3QtPmNwYWRkciArIDIsIE5PUCwgMCwgTlVMTCk7CisJcmV0dXJuIHRhcGVfZG9faW9fZnJlZShkZXZpY2UsIHJlcXVlc3QpOworfQorCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHNjaGVkdWxlIGZvbGxvdy11cCBhY3Rpb25zIGZyb20gd2l0aGluIGFuCisgKiBpbnRlcnJ1cHQgY29udGV4dCAobGlrZSB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzKS4KKyAqLworc3RhdGljIHZvaWQKK3RhcGVfMzU5MF93b3JrX2hhbmRsZXIodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZTsKKwkJZW51bSB0YXBlX29wIG9wOworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwl9ICpwID0gZGF0YTsKKworCXN3aXRjaCAocC0+b3ApIHsKKwljYXNlIFRPX01TRU46CisJCXRhcGVfMzU5MF9zZW5zZV9tZWRpdW0ocC0+ZGV2aWNlKTsKKwkJYnJlYWs7CisJY2FzZSBUT19SRUFEX0FUVE1TRzoKKwkJdGFwZV8zNTkwX3JlYWRfYXR0bXNnKHAtPmRldmljZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURCRl9FVkVOVCgzLCAiVDM1OTA6IHdvcmsgaGFuZGxlciB1bmRlZmluZWQgZm9yICIKKwkJCSAgIm9wZXJhdGlvbiAweCUwMnhcbiIsIHAtPm9wKTsKKwl9CisJdGFwZV9wdXRfZGV2aWNlKHAtPmRldmljZSk7CisJa2ZyZWUocCk7Cit9CisKK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9zY2hlZHVsZV93b3JrKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBlbnVtIHRhcGVfb3Agb3ApCit7CisJc3RydWN0IHsKKwkJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2U7CisJCWVudW0gdGFwZV9vcCBvcDsKKwkJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJfSAqcDsKKworCWlmICgocCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9XT1JLKCZwLT53b3JrLCB0YXBlXzM1OTBfd29ya19oYW5kbGVyLCBwKTsKKworCXAtPmRldmljZSA9IHRhcGVfZ2V0X2RldmljZV9yZWZlcmVuY2UoZGV2aWNlKTsKKwlwLT5vcCA9IG9wOworCisJc2NoZWR1bGVfd29yaygmcC0+d29yayk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUzM5MF9UQVBFX0JMT0NLCisvKgorICogVGFwZSBCbG9jayBSRUFECisgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICoKK3RhcGVfMzU5MF9icmVhZChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCXN0cnVjdCBjY3cxICpjY3c7CisJaW50IGNvdW50ID0gMCwgc3RhcnRfYmxvY2ssIGk7CisJdW5zaWduZWQgb2ZmOworCWNoYXIgKmRzdDsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJc3RydWN0IGJpbyAqYmlvOworCisJREJGX0VWRU5UKDYsICJ4QlJFRGlkOiIpOworCXN0YXJ0X2Jsb2NrID0gcmVxLT5zZWN0b3IgPj4gVEFQRUJMT0NLX0hTRUNfUzJCOworCURCRl9FVkVOVCg2LCAic3RhcnRfYmxvY2sgPSAlaVxuIiwgc3RhcnRfYmxvY2spOworCisJcnFfZm9yX2VhY2hfYmlvKGJpbywgcmVxKSB7CisJCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJCWNvdW50ICs9IGJ2LT5idl9sZW4gPj4gKFRBUEVCTE9DS19IU0VDX1MyQiArIDkpOworCQl9CisJfQorCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMiArIGNvdW50ICsgMSwgNCk7CisJaWYgKElTX0VSUihyZXF1ZXN0KSkKKwkJcmV0dXJuIHJlcXVlc3Q7CisJcmVxdWVzdC0+b3AgPSBUT19CTE9DSzsKKwkqKF9fdTMyICopIHJlcXVlc3QtPmNwZGF0YSA9IHN0YXJ0X2Jsb2NrOworCWNjdyA9IHJlcXVlc3QtPmNwYWRkcjsKKwljY3cgPSB0YXBlX2Njd19jYyhjY3csIE1PREVfU0VUX0RCLCAxLCBkZXZpY2UtPm1vZGVzZXRfYnl0ZSk7CisKKwkvKgorCSAqIFdlIGFsd2F5cyBzZXR1cCBhIG5vcCBhZnRlciB0aGUgbW9kZSBzZXQgY2N3LiBUaGlzIHNsb3QgaXMKKwkgKiB1c2VkIGluIHRhcGVfc3RkX2NoZWNrX2xvY2F0ZSB0byBpbnNlcnQgYSBsb2NhdGUgY2N3IGlmIHRoZQorCSAqIGN1cnJlbnQgdGFwZSBwb3NpdGlvbiBkb2Vzbid0IG1hdGNoIHRoZSBzdGFydCBibG9jayB0byBiZSByZWFkLgorCSAqLworCWNjdyA9IHRhcGVfY2N3X2NjKGNjdywgTk9QLCAwLCBOVUxMKTsKKworCXJxX2Zvcl9lYWNoX2JpbyhiaW8sIHJlcSkgeworCQliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7CisJCQlkc3QgPSBrbWFwKGJ2LT5idl9wYWdlKSArIGJ2LT5idl9vZmZzZXQ7CisJCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGJ2LT5idl9sZW47CisJCQkgICAgIG9mZiArPSBUQVBFQkxPQ0tfSFNFQ19TSVpFKSB7CisJCQkJY2N3LT5mbGFncyA9IENDV19GTEFHX0NDOworCQkJCWNjdy0+Y21kX2NvZGUgPSBSRUFEX0ZPUldBUkQ7CisJCQkJY2N3LT5jb3VudCA9IFRBUEVCTE9DS19IU0VDX1NJWkU7CisJCQkJc2V0X25vcm1hbGl6ZWRfY2RhKGNjdywgKHZvaWQgKikgX19wYShkc3QpKTsKKwkJCQljY3crKzsKKwkJCQlkc3QgKz0gVEFQRUJMT0NLX0hTRUNfU0laRTsKKwkJCX0KKwkJCWlmIChvZmYgPiBidi0+YnZfbGVuKQorCQkJCUJVRygpOworCQl9CisJfQorCWNjdyA9IHRhcGVfY2N3X2VuZChjY3csIE5PUCwgMCwgTlVMTCk7CisJREJGX0VWRU5UKDYsICJ4QlJFRGNjd2dcbiIpOworCXJldHVybiByZXF1ZXN0OworfQorCitzdGF0aWMgdm9pZAordGFwZV8zNTkwX2ZyZWVfYnJlYWQoc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgY2N3MSAqY2N3OworCisJLyogTGFzdCBjY3cgaXMgYSBub3AgYW5kIGRvZXNuJ3QgbmVlZCBjbGVhcl9ub3JtYWxpemVkX2NkYSAqLworCWZvciAoY2N3ID0gcmVxdWVzdC0+Y3BhZGRyOyBjY3ctPmZsYWdzICYgQ0NXX0ZMQUdfQ0M7IGNjdysrKQorCQlpZiAoY2N3LT5jbWRfY29kZSA9PSBSRUFEX0ZPUldBUkQpCisJCQljbGVhcl9ub3JtYWxpemVkX2NkYShjY3cpOworCXRhcGVfZnJlZV9yZXF1ZXN0KHJlcXVlc3QpOworfQorCisvKgorICogY2hlY2tfbG9jYXRlIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgdGFwZSByZXF1ZXN0IGlzIHBhc3NlZCB0bworICogdGhlIGNvbW1vbiBpbyBsYXllciBmb3IgZXhlY3V0aW9uLiBJdCBoYXMgdG8gY2hlY2sgdGhlIGN1cnJlbnQKKyAqIHRhcGUgcG9zaXRpb24gYW5kIGluc2VydCBhIGxvY2F0ZSBjY3cgaWYgaXQgZG9lc24ndCBtYXRjaCB0aGUKKyAqIHN0YXJ0IGJsb2NrIGZvciB0aGUgcmVxdWVzdC4KKyAqLworc3RhdGljIHZvaWQKK3RhcGVfMzU5MF9jaGVja19sb2NhdGUoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJX191MzIgKnN0YXJ0X2Jsb2NrOworCisJc3RhcnRfYmxvY2sgPSAoX191MzIgKikgcmVxdWVzdC0+Y3BkYXRhOworCWlmICgqc3RhcnRfYmxvY2sgIT0gZGV2aWNlLT5ibGtfZGF0YS5ibG9ja19wb3NpdGlvbikgeworCQkvKiBBZGQgdGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgZmlsZSB0byBnZXQgdGhlIHJlYWwgYmxvY2suICovCisJCSpzdGFydF9ibG9jayArPSBkZXZpY2UtPmJvZjsKKwkJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyICsgMSwgTE9DQVRFLCA0LCByZXF1ZXN0LT5jcGRhdGEpOworCX0KK30KKyNlbmRpZgorCisvKgorICogVGhlIGRvbmUgaGFuZGxlciBpcyBjYWxsZWQgYXQgZGV2aWNlL2NoYW5uZWwgZW5kIGFuZCB3YWtlcyB1cCB0aGUgc2xlZXBpbmcKKyAqIHByb2Nlc3MKKyAqLworc3RhdGljIGludAordGFwZV8zNTkwX2RvbmUoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHRhcGVfMzU5MF9tZWRfc2Vuc2UgKnNlbnNlOworCisJREJGX0VWRU5UKDYsICIlcyBkb25lXG4iLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKKworCXN3aXRjaCAocmVxdWVzdC0+b3ApIHsKKwljYXNlIFRPX0JTQjoKKwljYXNlIFRPX0JTRjoKKwljYXNlIFRPX0RTRToKKwljYXNlIFRPX0ZTQjoKKwljYXNlIFRPX0ZTRjoKKwljYXNlIFRPX0xCTDoKKwljYXNlIFRPX1JGTzoKKwljYXNlIFRPX1JCQToKKwljYXNlIFRPX1JFVzoKKwljYXNlIFRPX1dSSToKKwljYXNlIFRPX1dUTToKKwljYXNlIFRPX0JMT0NLOgorCWNhc2UgVE9fTE9BRDoKKwkJdGFwZV9tZWRfc3RhdGVfc2V0KGRldmljZSwgTVNfTE9BREVEKTsKKwkJYnJlYWs7CisJY2FzZSBUT19SVU46CisJCXRhcGVfbWVkX3N0YXRlX3NldChkZXZpY2UsIE1TX1VOTE9BREVEKTsKKwkJYnJlYWs7CisJY2FzZSBUT19NU0VOOgorCQlzZW5zZSA9IChzdHJ1Y3QgdGFwZV8zNTkwX21lZF9zZW5zZSAqKSByZXF1ZXN0LT5jcGRhdGE7CisJCWlmIChzZW5zZS0+bWFzc3QgPT0gTVNFTlNFX1VOQVNTT0NJQVRFRCkKKwkJCXRhcGVfbWVkX3N0YXRlX3NldChkZXZpY2UsIE1TX1VOTE9BREVEKTsKKwkJaWYgKHNlbnNlLT5tYXNzdCA9PSBNU0VOU0VfQVNTT0NJQVRFRF9NT1VOVCkKKwkJCXRhcGVfbWVkX3N0YXRlX3NldChkZXZpY2UsIE1TX0xPQURFRCk7CisJCWJyZWFrOworCWNhc2UgVE9fUkJJOgkvKiBSQkkgc2VlbXMgdG8gc3VjY2VlZCBldmVuIHdpdGhvdXQgbWVkaXVtIGxvYWRlZC4gKi8KKwljYXNlIFRPX05PUDoJLyogU2FtZSB0byBOT1AuICovCisJY2FzZSBUT19SRUFEX0NPTkZJRzoKKwljYXNlIFRPX1JFQURfQVRUTVNHOgorCWNhc2UgVE9fRElTOgorCWNhc2UgVE9fQVNTSUdOOgorCWNhc2UgVE9fVU5BU1NJR046CisJCWJyZWFrOworCWNhc2UgVE9fU0laRToKKwkJYnJlYWs7CisJfQorCXJldHVybiBUQVBFX0lPX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBUaGlzIGZ1Y3Rpb24gaXMgY2FsbGVkLCB3aGVuIGVycm9yIHJlY292ZXJ5IHdhcyBzdWNjZXNzZnVsbAorICovCitzdGF0aWMgaW5saW5lIGludAordGFwZV8zNTkwX2VycF9zdWNjZWRlZChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlEQkZfRVZFTlQoMywgIkVycm9yIFJlY292ZXJ5IHN1Y2Nlc3NmdWxsIGZvciAlc1xuIiwKKwkJICB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKKwlyZXR1cm4gdGFwZV8zNTkwX2RvbmUoZGV2aWNlLCByZXF1ZXN0KTsKK30KKworLyoKKyAqIFRoaXMgZnVjdGlvbiBpcyBjYWxsZWQsIHdoZW4gZXJyb3IgcmVjb3Zlcnkgd2FzIG5vdCBzdWNjZXNzZnVsbAorICovCitzdGF0aWMgaW5saW5lIGludAordGFwZV8zNTkwX2VycF9mYWlsZWQoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QsCisJCSAgICAgc3RydWN0IGlyYiAqaXJiLCBpbnQgcmMpCit7CisJREJGX0VWRU5UKDMsICJFcnJvciBSZWNvdmVyeSBmYWlsZWQgZm9yICVzXG4iLAorCQkgIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOworCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIEVycm9yIFJlY292ZXJ5IGRvIHJldHJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit0YXBlXzM1OTBfZXJwX3JldHJ5KHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0LAorCQkgICAgc3RydWN0IGlyYiAqaXJiKQoreworCURCRl9FVkVOVCgyLCAiUmV0cnk6ICVzXG4iLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKKwl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKKwlyZXR1cm4gVEFQRV9JT19SRVRSWTsKK30KKworLyoKKyAqIEhhbmRsZSB1bnNvbGljaXRlZCBpbnRlcnJ1cHRzCisgKi8KK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF91bnNvbGljaXRlZF9pcnEoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwlpZiAoaXJiLT5zY3N3LmRzdGF0ID09IERFVl9TVEFUX0NITl9FTkQpCisJCS8qIFByb2JhYmx5IHJlc3VsdCBvZiBoYWx0IHNzY2ggKi8KKwkJcmV0dXJuIFRBUEVfSU9fUEVORElORzsKKwllbHNlIGlmIChpcmItPnNjc3cuZHN0YXQgPT0gMHg4NSkKKwkJLyogRGV2aWNlIFJlYWR5IC0+IGNoZWNrIG1lZGl1bSBzdGF0ZSAqLworCQl0YXBlXzM1OTBfc2NoZWR1bGVfd29yayhkZXZpY2UsIFRPX01TRU4pOworCWVsc2UgaWYgKGlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX0FUVEVOVElPTikKKwkJdGFwZV8zNTkwX3NjaGVkdWxlX3dvcmsoZGV2aWNlLCBUT19SRUFEX0FUVE1TRyk7CisJZWxzZSB7CisJCURCRl9FVkVOVCgzLCAidW5zb2wuaXJxISBkZXYgZW5kOiAlMDh4XG4iLCBkZXZpY2UtPmNkZXZfaWQpOworCQlQUklOVF9XQVJOKCJVbnNvbGljaXRlZCBJUlEgKERldmljZSBFbmQpIGNhdWdodC5cbiIpOworCQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCBOVUxMLCBpcmIpOworCX0KKwlyZXR1cm4gVEFQRV9JT19TVUNDRVNTOworfQorCisvKgorICogQmFzaWMgUmVjb3Zlcnkgcm91dGluZQorICovCitzdGF0aWMgaW50Cit0YXBlXzM1OTBfZXJwX2Jhc2ljKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0LAorCQkgICAgc3RydWN0IGlyYiAqaXJiLCBpbnQgcmMpCit7CisJc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqc2Vuc2U7CisKKwlzZW5zZSA9IChzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICopIGlyYi0+ZWN3OworCisJc3dpdGNoIChzZW5zZS0+YnJhKSB7CisJY2FzZSBTRU5TRV9CUkFfUEVSOgorCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIHJjKTsKKwljYXNlIFNFTlNFX0JSQV9DT05UOgorCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9zdWNjZWRlZChkZXZpY2UsIHJlcXVlc3QpOworCWNhc2UgU0VOU0VfQlJBX1JFOgorCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9yZXRyeShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJY2FzZSBTRU5TRV9CUkFfRFJFOgorCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIHJjKTsKKwlkZWZhdWx0OgorCQlQUklOVF9FUlIoIlVua25vd24gQlJBICV4IC0gVGhpcyBzaG91bGQgbm90IGhhcHBlbiFcbiIsCisJCQkgIHNlbnNlLT5icmEpOworCQlCVUcoKTsKKwkJcmV0dXJuIFRBUEVfSU9fU1RPUDsKKwl9Cit9CisKKy8qCisgKiAgUkRMOiBSZWFkIERldmljZSAoYnVmZmVyZWQpIGxvZworICovCitzdGF0aWMgaW50Cit0YXBlXzM1OTBfZXJwX3JlYWRfYnVmX2xvZyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwKKwkJCSAgIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwkvKgorCSAqIFdlIGp1c3QgZG8gdGhlIGJhc2ljIGVycm9yIHJlY292ZXJ5IGF0IHRoZSBtb21lbnQgKHJldHJ5KS4KKwkgKiBQZXJoYXBzIGluIHRoZSBmdXR1cmUsIHdlIHJlYWQgdGhlIGxvZyBhbmQgZHVtcCBpdCBzb21ld2hlcmUuLi4KKwkgKi8KKwlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7Cit9CisKKy8qCisgKiAgU1dBUDogU3dhcCBEZXZpY2VzCisgKi8KK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9lcnBfc3dhcChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCwKKwkJICAgc3RydWN0IGlyYiAqaXJiKQoreworCS8qCisJICogVGhpcyBlcnJvciByZWNvdmVyeSBzaG91bGQgc3dhcCB0aGUgdGFwZXMKKwkgKiBpZiB0aGUgb3JpZ2luYWwgaGFzIGEgcHJvYmxlbS4gVGhlIG9wZXJhdGlvbgorCSAqIHNob3VsZCBwcm9jZWVkIHdpdGggdGhlIG5ldyB0YXBlLi4uIHRoaXMKKwkgKiBzaG91bGQgcHJvYmFibHkgYmUgZG9uZSBpbiB1c2VyIHNwYWNlIQorCSAqLworCVBSSU5UX1dBUk4oIiglcyk6IFN3YXAgVGFwZSBEZXZpY2UhXG4iLCBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQpOworCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUlPKTsKK30KKworLyoKKyAqICBMQlk6IExvbmcgQnVzeQorICovCitzdGF0aWMgaW50Cit0YXBlXzM1OTBfZXJwX2xvbmdfYnVzeShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwKKwkJCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QsIHN0cnVjdCBpcmIgKmlyYikKK3sKKwkvKiBGSVhNRTogaG93IGFib3V0IFdBSVRJTkcgZm9yIGEgbWludXRlID8gKi8KKwlQUklOVF9XQVJOKCIoJXMpOiBEZXZpY2UgaXMgYnVzeSEgUGxlYXNlIHdhaXQgYSBtaW51dGUhXG4iLAorCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQpOworCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUJVU1kpOworfQorCisvKgorICogIFNQSTogU3BlY2lhbCBJbnRlcmNlcHQKKyAqLworc3RhdGljIGludAordGFwZV8zNTkwX2VycF9zcGVjaWFsX2ludGVycnVwdChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwKKwkJCQlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0LCBzdHJ1Y3QgaXJiICppcmIpCit7CisJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOworfQorCisvKgorICogIFJEQTogUmVhZCBBbHRlcm5hdGUKKyAqLworc3RhdGljIGludAordGFwZV8zNTkwX2VycF9yZWFkX2FsdGVybmF0ZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwKKwkJCSAgICAgc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCwgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCB0YXBlXzM1OTBfZGlzY19kYXRhICpkYXRhOworCisJLyoKKwkgKiBUaGUgaXNzdWVkIFJlYWQgQmFja3dhcmQgb3IgUmVhZCBQcmV2aW91cyBjb21tYW5kIGlzIG5vdAorCSAqIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlCisJICogVGhlIHJlY292ZXJ5IGFjdGlvbiBzaG91bGQgYmUgdG8gaXNzdWUgYW5vdGhlciBjb21tYW5kOgorCSAqIFJlYWQgUmV2aW91czogaWYgUmVhZCBCYWNrd2FyZCBpcyBub3Qgc3VwcG9ydGVkCisJICogUmVhZCBCYWNrd2FyZDogaWYgUmVhZCBQcmV2aW91cyBpcyBub3Qgc3VwcG9ydGVkCisJICovCisJZGF0YSA9IGRldmljZS0+ZGlzY2RhdGE7CisJaWYgKGRhdGEtPnJlYWRfYmFja19vcCA9PSBSRUFEX1BSRVZJT1VTKSB7CisJCURCRl9FVkVOVCgyLCAiKCUwOHgpOiBObyBzdXBwb3J0IGZvciBSRUFEX1BSRVZJT1VTIGNvbW1hbmRcbiIsCisJCQkgIGRldmljZS0+Y2Rldl9pZCk7CisJCWRhdGEtPnJlYWRfYmFja19vcCA9IFJFQURfQkFDS1dBUkQ7CisJfSBlbHNlIHsKKwkJREJGX0VWRU5UKDIsICIoJTA4eCk6IE5vIHN1cHBvcnQgZm9yIFJFQURfQkFDS1dBUkQgY29tbWFuZFxuIiwKKwkJCSAgZGV2aWNlLT5jZGV2X2lkKTsKKwkJZGF0YS0+cmVhZF9iYWNrX29wID0gUkVBRF9QUkVWSU9VUzsKKwl9CisJdGFwZV8zNTkwX3JlYWRfb3Bwb3NpdGUoZGV2aWNlLCByZXF1ZXN0KTsKKwlyZXR1cm4gdGFwZV8zNTkwX2VycF9yZXRyeShkZXZpY2UsIHJlcXVlc3QsIGlyYik7Cit9CisKKy8qCisgKiBFcnJvciBSZWNvdmVyeSByZWFkIG9wcG9zaXRlCisgKi8KK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9lcnBfcmVhZF9vcHBvc2l0ZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwKKwkJCSAgICBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0LCBzdHJ1Y3QgaXJiICppcmIpCit7CisJc3dpdGNoIChyZXF1ZXN0LT5vcCkgeworCWNhc2UgVE9fUkZPOgorCQkvKgorCQkgKiBXZSBkaWQgcmVhZCBmb3J3YXJkLCBidXQgdGhlIGRhdGEgY291bGQgbm90IGJlIHJlYWQuCisJCSAqIFdlIHdpbGwgcmVhZCBiYWNrd2FyZCBhbmQgdGhlbiBza2lwIGZvcndhcmQgYWdhaW4uCisJCSAqLworCQl0YXBlXzM1OTBfcmVhZF9vcHBvc2l0ZShkZXZpY2UsIHJlcXVlc3QpOworCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9yZXRyeShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJY2FzZSBUT19SQkE6CisJCS8qIFdlIHRyaWVkIHRvIHJlYWQgZm9yd2FyZCBhbmQgYmFja3dhcmQsIGJ1dCBoYXQgbm8gc3VjY2VzcyAqLworCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQUklOVF9XQVJOKCJyZWFkX29wcG9zaXRlX3JlY292ZXJ5X2NhbGxlZF93aXRoX29wOiAlc1xuIiwKKwkJCSAgIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOworCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOworCX0KK30KKworLyoKKyAqIFByaW50IGFuIE1JTSAoTWVkaWEgSW5mb3JtYXRpb24gIE1lc3NhZ2UpIChtZXNzYWdlIGNvZGUgZjApCisgKi8KK3N0YXRpYyB2b2lkCit0YXBlXzM1OTBfcHJpbnRfbWltX21zZ19mMChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCisJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKKwkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLworCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzAuZW1jKSB7CisJY2FzZSAweDAyOgorCQlQUklOVF9XQVJOKCIoJXMpOiBEYXRhIGRlZ3JhZGVkXG4iLCBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQpOworCQlicmVhazsKKwljYXNlIDB4MDM6CisJCVBSSU5UX1dBUk4oIiglcyk6IERhdGEgZGVncmFkZWQgaW4gcGFydGlvbiAlaVxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgc2Vuc2UtPmZtdC5mNzAubXApOworCQlicmVhazsKKwljYXNlIDB4MDQ6CisJCVBSSU5UX1dBUk4oIiglcyk6IE1lZGl1bSBkZWdyYWRlZFxuIiwgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJYnJlYWs7CisJY2FzZSAweDA1OgorCQlQUklOVF9XQVJOKCIoJXMpOiBNZWRpdW0gZGVncmFkZWQgaW4gcGFydGl0aW9uICVpXG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLCBzZW5zZS0+Zm10LmY3MC5tcCk7CisJCWJyZWFrOworCWNhc2UgMHgwNjoKKwkJUFJJTlRfV0FSTigiKCVzKTogQmxvY2sgMCBFcnJvclxuIiwgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJYnJlYWs7CisJY2FzZSAweDA3OgorCQlQUklOVF9XQVJOKCIoJXMpOiBNZWRpdW0gRXhjZXB0aW9uIDB4JTAyeFxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgc2Vuc2UtPmZtdC5mNzAubWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQUklOVF9XQVJOKCIoJXMpOiBNSU0gRXhNc2c6IDB4JTAyeFxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgc2Vuc2UtPmZtdC5mNzAuZW1jKTsKKwkJYnJlYWs7CisJfQorCS8qIFNlcnZpY2UgTWVzc2FnZSAqLworCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzAuc21jKSB7CisJY2FzZSAweDAyOgorCQlQUklOVF9XQVJOKCIoJXMpOiBSZWZlcmVuY2UgTWVkaWEgbWFpbnRlbmFuY2UgcHJvY2VkdXJlICVpXG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLCBzZW5zZS0+Zm10LmY3MC5tZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsIHNlbnNlLT5mbXQuZjcwLnNtYyk7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFByaW50IGFuIEkvTyBTdWJzeXN0ZW0gU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlIChtZXNzYWdlIGNvZGUgZjEpCisgKi8KK3N0YXRpYyB2b2lkCit0YXBlXzM1OTBfcHJpbnRfaW9fc2ltX21zZ19mMShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCisJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKKwkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLworCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuZW1jKSB7CisJY2FzZSAweDAxOgorCQlQUklOVF9XQVJOKCIoJXMpOiBFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duXG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSBpbXBhY3RcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQpOworCQlicmVhazsKKwljYXNlIDB4MDM6CisJCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBjaGFubmVsIGludGVyZmFjZSAweCUwMnhcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJYnJlYWs7CisJY2FzZSAweDA0OgorCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gZGV2aWNlIHBhdGggMHglMDJ4XG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCWJyZWFrOworCWNhc2UgMHgwNToKKwkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIG9uIGxpYnJhcnkgcGF0aCAweCUwMnhcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJYnJlYWs7CisJY2FzZSAweDA2OgorCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gbm9kZSAweCUwMnhcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJYnJlYWs7CisJY2FzZSAweDA3OgorCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gcGFydGl0aW9uIDB4JTAyeFxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQUklOVF9XQVJOKCIoJXMpOiBTSU0gRXhNc2c6IDB4JTAyeFxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgc2Vuc2UtPmZtdC5mNzEuZW1jKTsKKwl9CisJLyogU2VydmljZSBNZXNzYWdlICovCisJc3dpdGNoIChzZW5zZS0+Zm10LmY3MS5zbWMpIHsKKwljYXNlIDB4MDE6CisJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciBpbXBhY3QgaXMgdW5rbm93blxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCWJyZWFrOworCWNhc2UgMHgwMjoKKwkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgbm90IGltcGFjdCBjdSBwZXJmb3JtYW5jZVxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCWJyZWFrOworCWNhc2UgMHgwMzoKKwkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQorCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBub2RlICIKKwkJCQkgICAiMHgleCBvbiBDVVxuIiwKKwkJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsCisJCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQllbHNlCisJCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG5vZGVzICIKKwkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCisJCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLAorCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCWJyZWFrOworCWNhc2UgMHgwNDoKKwkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQorCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwgcGF0aCAiCisJCQkJICAgIjB4JXggb24gQ1VcbiIsCisJCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLAorCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJZWxzZQorCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwgcGF0aHMgIgorCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKKwkJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsCisJCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJYnJlYWs7CisJY2FzZSAweDA1OgorCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCisJCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSBwYXRoICIKKwkJCQkgICAiMHgleCBvbiBDVVxuIiwKKwkJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsCisJCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQllbHNlCisJCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGRldmljZSBwYXRocyAiCisJCQkJICAgIigweCV4LTB4JXgpIG9uIENVXG4iLAorCQkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwKKwkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQlicmVhazsKKwljYXNlIDB4MDY6CisJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKKwkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbGlicmFyeSBwYXRoICIKKwkJCQkgICAiMHgleCBvbiBDVVxuIiwKKwkJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsCisJCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQllbHNlCisJCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxpYnJhcnkgcGF0aHMgIgorCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKKwkJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsCisJCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJYnJlYWs7CisJY2FzZSAweDA3OgorCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBDVVxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBSSU5UX1dBUk4oIiglcyk6IFNJTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsIHNlbnNlLT5mbXQuZjcxLnNtYyk7CisJfQorfQorCisvKgorICogUHJpbnQgYW4gRGV2aWNlIFN1YnN5c3RlbSBTZXJ2aWNlIEluZm9ybWF0aW9uIE1lc3NhZ2UgKG1lc3NhZ2UgY29kZSBmMikKKyAqLworc3RhdGljIHZvaWQKK3RhcGVfMzU5MF9wcmludF9kZXZfc2ltX21zZ19mMihzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCisJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKKwkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLworCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzEuZW1jKSB7CisJY2FzZSAweDAxOgorCQlQUklOVF9XQVJOKCIoJXMpOiBFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duXG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gLSBubyBwZXJmb3JtYW5jZSBpbXBhY3RcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQpOworCQlicmVhazsKKwljYXNlIDB4MDM6CisJCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBjaGFubmVsIGludGVyZmFjZSAweCUwMnhcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJYnJlYWs7CisJY2FzZSAweDA0OgorCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gb24gbG9hZGVyIDB4JTAyeFxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlicmVhazsKKwljYXNlIDB4MDU6CisJCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBtZXNzYWdlIGRpc3BsYXkgMHglMDJ4XG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CisJCWJyZWFrOworCWNhc2UgMHgwNjoKKwkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIGluIHRhcGUgcGF0aFxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCWJyZWFrOworCWNhc2UgMHgwNzoKKwkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIGluIGRyaXZlXG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUFJJTlRfV0FSTigiKCVzKTogRFNJTSBFeE1zZzogMHglMDJ4XG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLCBzZW5zZS0+Zm10LmY3MS5lbWMpOworCX0KKwkvKiBTZXJ2aWNlIE1lc3NhZ2UgKi8KKwlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLnNtYykgeworCWNhc2UgMHgwMToKKwkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIGltcGFjdCBpcyB1bmtub3duXG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGRldmljZSBwZXJmb3JtYW5jZVxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCWJyZWFrOworCWNhc2UgMHgwMzoKKwkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQorCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjaGFubmVsIHBhdGggIgorCQkJCSAgICIweCV4IG9uIERWXG4iLAorCQkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwKKwkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCWVsc2UKKwkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgY2hhbm5lbCBwYXRoICIKKwkJCQkgICAiKDB4JXgtMHgleCkgb24gRFZcbiIsCisJCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLAorCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCWJyZWFrOworCWNhc2UgMHgwNDoKKwkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQorCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBpbnRlcmZhY2UgMHgleCAiCisJCQkJICAgIm9uIERWXG4iLAorCQkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwKKwkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCWVsc2UKKwkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgaW50ZXJmYWNlcyAiCisJCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAorCQkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwKKwkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQlicmVhazsKKwljYXNlIDB4MDU6CisJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKKwkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbG9hZGVyIDB4JXggIgorCQkJCSAgICJvbiBEVlxuIiwKKwkJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsCisJCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQllbHNlCisJCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxvYWRlciAiCisJCQkJICAgIigweCV4LTB4JXgpIG9uIERWXG4iLAorCQkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwKKwkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQlicmVhazsKKwljYXNlIDB4MDc6CisJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgYWNjZXNzIHRvIERWXG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJYnJlYWs7CisJY2FzZSAweDA4OgorCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCisJCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG1lc3NhZ2UgIgorCQkJCSAgICJkaXNwbGF5IDB4JXggb24gRFZcbiIsCisJCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLAorCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJZWxzZQorCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBtZXNzYWdlICIKKwkJCQkgICAiZGlzcGxheXMgKDB4JXgtMHgleCkgb24gRFZcbiIsCisJCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLAorCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCWJyZWFrOworCWNhc2UgMHgwOToKKwkJUFJJTlRfV0FSTigiKCVzKTogQ2xlYW4gRFZcbiIsIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBSSU5UX1dBUk4oIiglcyk6IERTSU0gU2VydmljZU1zZzogMHglMDJ4XG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLCBzZW5zZS0+Zm10LmY3MS5zbWMpOworCX0KK30KKworLyoKKyAqIFByaW50IHN0YW5kYXJkIEVSQSBNZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lkCit0YXBlXzM1OTBfcHJpbnRfZXJhX21zZyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCisJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKKwlpZiAoc2Vuc2UtPm1jID09IDApCisJCXJldHVybjsKKwlpZiAoKHNlbnNlLT5tYyA+IDApICYmIChzZW5zZS0+bWMgPCBUQVBFXzM1OTBfTUFYX01TRykpIHsKKwkJaWYgKHRhcGVfMzU5MF9tc2dbc2Vuc2UtPm1jXSAhPSBOVUxMKQorCQkJUFJJTlRfV0FSTigiKCVzKTogJXNcbiIsIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwKKwkJCQkgICB0YXBlXzM1OTBfbXNnW3NlbnNlLT5tY10pOworCQllbHNlIHsKKwkJCVBSSU5UX1dBUk4oIiglcyk6IE1lc3NhZ2UgQ29kZSAweCV4XG4iLAorCQkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgc2Vuc2UtPm1jKTsKKwkJfQorCQlyZXR1cm47CisJfQorCWlmIChzZW5zZS0+bWMgPT0gMHhmMCkgeworCQkvKiBTdGFuZGFyZCBNZWRpYSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCisJCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBTRVY9JWksIE1DPSUwMngsIEVTPSV4LyV4LCAiCisJCQkgICAiUkM9JTAyeC0lMDR4LSUwMnhcbiIsIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwKKwkJCSAgIHNlbnNlLT5mbXQuZjcwLnNldiwgc2Vuc2UtPm1jLAorCQkJICAgc2Vuc2UtPmZtdC5mNzAuZW1jLCBzZW5zZS0+Zm10LmY3MC5zbWMsCisJCQkgICBzZW5zZS0+Zm10LmY3MC5yZWZjb2RlLCBzZW5zZS0+Zm10LmY3MC5taWQsCisJCQkgICBzZW5zZS0+Zm10LmY3MC5maWQpOworCQl0YXBlXzM1OTBfcHJpbnRfbWltX21zZ19mMChkZXZpY2UsIGlyYik7CisJCXJldHVybjsKKwl9CisJaWYgKHNlbnNlLT5tYyA9PSAweGYxKSB7CisJCS8qIFN0YW5kYXJkIEkvTyBTdWJzeXN0ZW0gU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCisJCVBSSU5UX1dBUk4oIiglcyk6IElPU0lNIFNFVj0laSwgREVWVFlQRT0zNTkwLyUwMngsICIKKwkJCSAgICJNQz0lMDJ4LCBFUz0leC8leCwgUkVGPTB4JTA0eC0weCUwNHgtMHglMDR4XG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkLCBzZW5zZS0+Zm10LmY3MS5zZXYsCisJCQkgICBkZXZpY2UtPmNkZXYtPmlkLmRldl9tb2RlbCwKKwkJCSAgIHNlbnNlLT5tYywgc2Vuc2UtPmZtdC5mNzEuZW1jLAorCQkJICAgc2Vuc2UtPmZtdC5mNzEuc21jLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMSwKKwkJCSAgIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUyLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMyk7CisJCXRhcGVfMzU5MF9wcmludF9pb19zaW1fbXNnX2YxKGRldmljZSwgaXJiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoc2Vuc2UtPm1jID09IDB4ZjIpIHsKKwkJLyogU3RhbmRhcmQgRGV2aWNlIFNlcnZpY2UgSW5mb3JtYXRpb24gTWVzc2FnZSAqLworCQlQUklOVF9XQVJOKCIoJXMpOiBERVZTSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCwgIgorCQkJICAgIk1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCisJCQkgICBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsIHNlbnNlLT5mbXQuZjcxLnNldiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAorCQkJICAgc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsCisJCQkgICBzZW5zZS0+Zm10LmY3MS5zbWMsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLAorCQkJICAgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKKwkJdGFwZV8zNTkwX3ByaW50X2Rldl9zaW1fbXNnX2YyKGRldmljZSwgaXJiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoc2Vuc2UtPm1jID09IDB4ZjMpIHsKKwkJLyogU3RhbmRhcmQgTGlicmFyeSBTZXJ2aWNlIEluZm9ybWF0aW9uIE1lc3NhZ2UgKi8KKwkJcmV0dXJuOworCX0KKwlQUklOVF9XQVJOKCIoJXMpOiBEZXZpY2UgTWVzc2FnZSgleClcbiIsCisJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgc2Vuc2UtPm1jKTsKK30KKworLyoKKyAqICAzNTkwIGVycm9yIFJlY292ZXJ5IHJvdXRpbmU6CisgKiAgSWYgcG9zc2libGUsIGl0IHRyaWVzIHRvIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IuIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLAorICogIGluZm9ybSB0aGUgdXNlciBhYm91dCB0aGUgcHJvYmxlbS4KKyAqLworc3RhdGljIGludAordGFwZV8zNTkwX3VuaXRfY2hlY2soc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QsCisJCSAgICAgc3RydWN0IGlyYiAqaXJiKQoreworCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWludCByYzsKKworI2lmZGVmIENPTkZJR19TMzkwX1RBUEVfQkxPQ0sKKwlpZiAocmVxdWVzdC0+b3AgPT0gVE9fQkxPQ0spIHsKKwkJLyoKKwkJICogUmVjb3ZlcnkgZm9yIGJsb2NrIGRldmljZSByZXF1ZXN0cy4gU2V0IHRoZSBibG9ja19wb3NpdGlvbgorCQkgKiB0byBzb21ldGhpbmcgaW52YWxpZCBhbmQgcmV0cnkuCisJCSAqLworCQlkZXZpY2UtPmJsa19kYXRhLmJsb2NrX3Bvc2l0aW9uID0gLTE7CisJCWlmIChyZXF1ZXN0LT5yZXRyaWVzLS0gPD0gMCkKKwkJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CisJCWVsc2UKKwkJCXJldHVybiB0YXBlXzM1OTBfZXJwX3JldHJ5KGRldmljZSwgcmVxdWVzdCwgaXJiKTsKKwl9CisjZW5kaWYKKworCXNlbnNlID0gKHN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKikgaXJiLT5lY3c7CisKKwkvKgorCSAqIEZpcnN0IGNoZWNrIGFsbCBSQy1RUkNzIHdoZXJlIHdlIHdhbnQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwKKwkgKiAgIC0gImJyZWFrIjogICAgIGJhc2ljIGVycm9yIHJlY292ZXJ5IGlzIGRvbmUKKwkgKiAgIC0gImdvdG8gb3V0OiI6IGp1c3QgcHJpbnQgZXJyb3IgbWVzc2FnZSBpZiBhdmFpbGFibGUKKwkgKi8KKwlyYyA9IC1FSU87CisJc3dpdGNoIChzZW5zZS0+cmNfcnFjKSB7CisKKwljYXNlIDB4MTExMDoKKwkJdGFwZV8zNTkwX3ByaW50X2VyYV9tc2coZGV2aWNlLCBpcmIpOworCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9yZWFkX2J1Zl9sb2coZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCisJY2FzZSAweDIwMTE6CisJCXRhcGVfMzU5MF9wcmludF9lcmFfbXNnKGRldmljZSwgaXJiKTsKKwkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfcmVhZF9hbHRlcm5hdGUoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCisJY2FzZSAweDIyMzA6CisJY2FzZSAweDIyMzE6CisJCXRhcGVfMzU5MF9wcmludF9lcmFfbXNnKGRldmljZSwgaXJiKTsKKwkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfc3BlY2lhbF9pbnRlcnJ1cHQoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCisJY2FzZSAweDMwMTA6CisJCURCRl9FVkVOVCgyLCAiKCUwOHgpOiBCYWNrd2FyZCBhdCBCZWdpbm5pbmcgb2YgUGFydGl0aW9uXG4iLAorCQkJICBkZXZpY2UtPmNkZXZfaWQpOworCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT1NQQyk7CisJY2FzZSAweDMwMTI6CisJCURCRl9FVkVOVCgyLCAiKCUwOHgpOiBGb3J3YXJkIGF0IEVuZCBvZiBQYXJ0aXRpb25cbiIsCisJCQkgIGRldmljZS0+Y2Rldl9pZCk7CisJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PU1BDKTsKKwljYXNlIDB4MzAyMDoKKwkJREJGX0VWRU5UKDIsICIoJTA4eCk6IEVuZCBvZiBEYXRhIE1hcmtcbiIsIGRldmljZS0+Y2Rldl9pZCk7CisJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PU1BDKTsKKworCWNhc2UgMHgzMTIyOgorCQlEQkZfRVZFTlQoMiwgIiglMDh4KTogUmV3aW5kIFVubG9hZCBpbml0aWF0ZWRcbiIsCisJCQkgIGRldmljZS0+Y2Rldl9pZCk7CisJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRUlPKTsKKwljYXNlIDB4MzEyMzoKKwkJREJGX0VWRU5UKDIsICIoJTA4eCk6IFJld2luZCBVbmxvYWQgY29tcGxldGVcbiIsCisJCQkgIGRldmljZS0+Y2Rldl9pZCk7CisJCXRhcGVfbWVkX3N0YXRlX3NldChkZXZpY2UsIE1TX1VOTE9BREVEKTsKKwkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIDApOworCisJY2FzZSAweDQwMTA6CisJCS8qCisJCSAqIHByaW50IGFkZGl0aW9uYWwgbXNnIHNpbmNlIGRlZmF1bHQgbXNnCisJCSAqICJkZXZpY2UgaW50ZXJ2ZW50aW9uIiBpcyBub3QgdmVyeSBtZWFuaW5nZnVsbAorCQkgKi8KKwkJUFJJTlRfV0FSTigiKCVzKTogVGFwZSBvcGVyYXRpb24gd2hlbiBtZWRpdW0gbm90IGxvYWRlZFxuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCXRhcGVfbWVkX3N0YXRlX3NldChkZXZpY2UsIE1TX1VOTE9BREVEKTsKKwkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9NRURJVU0pOworCWNhc2UgMHg0MDEyOgkJLyogRGV2aWNlIExvbmcgQnVzeSAqLworCQl0YXBlXzM1OTBfcHJpbnRfZXJhX21zZyhkZXZpY2UsIGlyYik7CisJCXJldHVybiB0YXBlXzM1OTBfZXJwX2xvbmdfYnVzeShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisKKwljYXNlIDB4NTAxMDoKKwkJaWYgKHNlbnNlLT5yYWMgPT0gMHhkMCkgeworCQkJLyogU3dhcCAqLworCQkJdGFwZV8zNTkwX3ByaW50X2VyYV9tc2coZGV2aWNlLCBpcmIpOworCQkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfc3dhcChkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJCX0KKwkJaWYgKHNlbnNlLT5yYWMgPT0gMHgyNikgeworCQkJLyogUmVhZCBPcHBvc2l0ZSAqLworCQkJdGFwZV8zNTkwX3ByaW50X2VyYV9tc2coZGV2aWNlLCBpcmIpOworCQkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfcmVhZF9vcHBvc2l0ZShkZXZpY2UsIHJlcXVlc3QsCisJCQkJCQkJICAgaXJiKTsKKwkJfQorCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CisJY2FzZSAweDUwMjA6CisJY2FzZSAweDUwMjE6CisJY2FzZSAweDUwMjI6CisJY2FzZSAweDUwNDA6CisJY2FzZSAweDUwNDE6CisJY2FzZSAweDUwNDI6CisJCXRhcGVfMzU5MF9wcmludF9lcmFfbXNnKGRldmljZSwgaXJiKTsKKwkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfc3dhcChkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisKKwljYXNlIDB4NTExMDoKKwljYXNlIDB4NTExMToKKwkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTUVESVVNVFlQRSk7CisKKwljYXNlIDB4NTEyMDoKKwljYXNlIDB4MTEyMDoKKwkJdGFwZV9tZWRfc3RhdGVfc2V0KGRldmljZSwgTVNfVU5MT0FERUQpOworCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT01FRElVTSk7CisKKwljYXNlIDB4NjAyMDoKKwkJUFJJTlRfV0FSTigiKCVzKTogQ2FydHJpZGdlIG9mIHdyb25nIHR5cGUgP1xuIiwKKwkJCSAgIGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU1FRElVTVRZUEUpOworCisJY2FzZSAweDgwMTE6CisJCVBSSU5UX1dBUk4oIiglcyk6IEFub3RoZXIgaG9zdCBoYXMgcmVzZXJ2ZWQgdGhlIHRhcGUgZGV2aWNlXG4iLAorCQkJICAgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FUEVSTSk7CisJY2FzZSAweDgwMTM6CisJCVBSSU5UX1dBUk4oIiglcyk6IEFub3RoZXIgaG9zdCBoYXMgcHJpdmlsaWdlZCBhY2Nlc3MgdG8gdGhlICIKKwkJCSAgICJ0YXBlIGRldmljZVxuIiwgZGV2aWNlLT5jZGV2LT5kZXYuYnVzX2lkKTsKKwkJUFJJTlRfV0FSTigiKCVzKTogVG8gc29sdmUgdGhlIHByb2JsZW0gdW5sb2FkIHRoZSBjdXJyZW50ICIKKwkJCSAgICJjYXJ0cmlkZ2UhXG4iLCBkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQpOworCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVQRVJNKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CisJfQorfQorCisvKgorICogMzU5MCBpbnRlcnJ1cHQgaGFuZGxlcjoKKyAqLworc3RhdGljIGludAordGFwZV8zNTkwX2lycShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCwKKwkgICAgICBzdHJ1Y3QgaXJiICppcmIpCit7CisJaWYgKHJlcXVlc3QgPT0gTlVMTCkKKwkJcmV0dXJuIHRhcGVfMzU5MF91bnNvbGljaXRlZF9pcnEoZGV2aWNlLCBpcmIpOworCisJaWYgKChpcmItPnNjc3cuZHN0YXQgJiBERVZfU1RBVF9VTklUX0VYQ0VQKSAmJgorCSAgICAoaXJiLT5zY3N3LmRzdGF0ICYgREVWX1NUQVRfREVWX0VORCkgJiYgKHJlcXVlc3QtPm9wID09IFRPX1dSSSkpIHsKKwkJLyogV3JpdGUgYXQgZW5kIG9mIHZvbHVtZSAqLworCQlEQkZfRVZFTlQoMiwgIkVuZCBvZiB2b2x1bWVcbiIpOworCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9TUEMpOworCX0KKworCWlmIChpcmItPnNjc3cuZHN0YXQgJiBERVZfU1RBVF9VTklUX0NIRUNLKQorCQlyZXR1cm4gdGFwZV8zNTkwX3VuaXRfY2hlY2soZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCisJaWYgKGlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX0RFVl9FTkQpIHsKKwkJaWYgKGlyYi0+c2Nzdy5kc3RhdCA9PSBERVZfU1RBVF9VTklUX0VYQ0VQKSB7CisJCQlpZiAocmVxdWVzdC0+b3AgPT0gVE9fRlNCIHx8IHJlcXVlc3QtPm9wID09IFRPX0JTQikKKwkJCQlyZXF1ZXN0LT5yZXNjbnQrKzsKKwkJCWVsc2UKKwkJCQlEQkZfRVZFTlQoNSwgIlVuaXQgRXhjZXB0aW9uIVxuIik7CisJCX0KKworCQlyZXR1cm4gdGFwZV8zNTkwX2RvbmUoZGV2aWNlLCByZXF1ZXN0KTsKKwl9CisKKwlpZiAoaXJiLT5zY3N3LmRzdGF0ICYgREVWX1NUQVRfQ0hOX0VORCkgeworCQlEQkZfRVZFTlQoMiwgImNhbm5lbCBlbmRcbiIpOworCQlyZXR1cm4gVEFQRV9JT19QRU5ESU5HOworCX0KKworCWlmIChpcmItPnNjc3cuZHN0YXQgJiBERVZfU1RBVF9BVFRFTlRJT04pIHsKKwkJREJGX0VWRU5UKDIsICJVbml0IEF0dGVudGlvbiB3aGVuIGJ1c3kuLlxuIik7CisJCXJldHVybiBUQVBFX0lPX1BFTkRJTkc7CisJfQorCisJREJGX0VWRU5UKDYsICJ4dW5rbm93bmlycVxuIik7CisJUFJJTlRfRVJSKCJVbmV4cGVjdGVkIGludGVycnVwdC5cbiIpOworCVBSSU5UX0VSUigiQ3VycmVudCBvcCBpczogJXMiLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKKwl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCXJldHVybiBUQVBFX0lPX1NUT1A7Cit9CisKKy8qCisgKiBTZXR1cCBkZXZpY2UgZnVuY3Rpb24KKyAqLworc3RhdGljIGludAordGFwZV8zNTkwX3NldHVwX2RldmljZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHRhcGVfMzU5MF9kaXNjX2RhdGEgKmRhdGE7CisKKwlEQkZfRVZFTlQoNiwgIjM1OTAgZGV2aWNlIHNldHVwXG4iKTsKKwlkYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRhcGVfMzU5MF9kaXNjX2RhdGEpLAorCQkgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWRhdGEtPnJlYWRfYmFja19vcCA9IFJFQURfUFJFVklPVVM7CisJZGV2aWNlLT5kaXNjZGF0YSA9IGRhdGE7CisKKwlpZiAoKHJjID0gdGFwZV9zdGRfYXNzaWduKGRldmljZSkpID09IDApIHsKKwkJLyogVHJ5IHRvIGZpbmQgb3V0IGlmIG1lZGl1bSBpcyBsb2FkZWQgKi8KKwkJaWYgKChyYyA9IHRhcGVfMzU5MF9zZW5zZV9tZWRpdW0oZGV2aWNlKSkgIT0gMCkKKwkJCURCRl9MSCgzLCAiMzU5MCBtZWRpdW0gc2Vuc2UgcmV0dXJuZWQgJWRcbiIsIHJjKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDbGVhbnVwIGRldmljZSBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZAordGFwZV8zNTkwX2NsZWFudXBfZGV2aWNlKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQoreworCXRhcGVfc3RkX3VuYXNzaWduKGRldmljZSk7CisKKwlrZnJlZShkZXZpY2UtPmRpc2NkYXRhKTsKKwlkZXZpY2UtPmRpc2NkYXRhID0gTlVMTDsKK30KKworLyoKKyAqIExpc3Qgb2YgMzU5MCBtYWduZXRpYyB0YXBlIGNvbW1hbmRzLgorICovCitzdGF0aWMgdGFwZV9tdG9wX2ZuIHRhcGVfMzU5MF9tdG9wW1RBUEVfTlJfTVRPUFNdID0geworCVtNVFJFU0VUXQkgPSB0YXBlX3N0ZF9tdHJlc2V0LAorCVtNVEZTRl0JCSA9IHRhcGVfc3RkX210ZnNmLAorCVtNVEJTRl0JCSA9IHRhcGVfc3RkX210YnNmLAorCVtNVEZTUl0JCSA9IHRhcGVfc3RkX210ZnNyLAorCVtNVEJTUl0JCSA9IHRhcGVfc3RkX210YnNyLAorCVtNVFdFT0ZdCSA9IHRhcGVfc3RkX210d2VvZiwKKwlbTVRSRVddCQkgPSB0YXBlX3N0ZF9tdHJldywKKwlbTVRPRkZMXQkgPSB0YXBlX3N0ZF9tdG9mZmwsCisJW01UTk9QXQkJID0gdGFwZV9zdGRfbXRub3AsCisJW01UUkVURU5dCSA9IHRhcGVfc3RkX210cmV0ZW4sCisJW01UQlNGTV0JID0gdGFwZV9zdGRfbXRic2ZtLAorCVtNVEZTRk1dCSA9IHRhcGVfc3RkX210ZnNmbSwKKwlbTVRFT01dCQkgPSB0YXBlX3N0ZF9tdGVvbSwKKwlbTVRFUkFTRV0JID0gdGFwZV9zdGRfbXRlcmFzZSwKKwlbTVRSQVMxXQkgPSBOVUxMLAorCVtNVFJBUzJdCSA9IE5VTEwsCisJW01UUkFTM10JID0gTlVMTCwKKwlbTVRTRVRCTEtdCSA9IHRhcGVfc3RkX210c2V0YmxrLAorCVtNVFNFVERFTlNJVFldCSA9IE5VTEwsCisJW01UU0VFS10JID0gdGFwZV8zNTkwX210c2VlaywKKwlbTVRURUxMXQkgPSB0YXBlXzM1OTBfbXR0ZWxsLAorCVtNVFNFVERSVkJVRkZFUl0gPSBOVUxMLAorCVtNVEZTU10JCSA9IE5VTEwsCisJW01UQlNTXQkJID0gTlVMTCwKKwlbTVRXU01dCQkgPSBOVUxMLAorCVtNVExPQ0tdCSA9IE5VTEwsCisJW01UVU5MT0NLXQkgPSBOVUxMLAorCVtNVExPQURdCSA9IHRhcGVfc3RkX210bG9hZCwKKwlbTVRVTkxPQURdCSA9IHRhcGVfc3RkX210dW5sb2FkLAorCVtNVENPTVBSRVNTSU9OXQkgPSB0YXBlX3N0ZF9tdGNvbXByZXNzaW9uLAorCVtNVFNFVFBBUlRdCSA9IE5VTEwsCisJW01UTUtQQVJUXQkgPSBOVUxMCit9OworCisvKgorICogVGFwZSBkaXNjaXBsaW5lIHN0cnVjdHVyZSBmb3IgMzU5MC4KKyAqLworc3RhdGljIHN0cnVjdCB0YXBlX2Rpc2NpcGxpbmUgdGFwZV9kaXNjaXBsaW5lXzM1OTAgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnNldHVwX2RldmljZSA9IHRhcGVfMzU5MF9zZXR1cF9kZXZpY2UsCisJLmNsZWFudXBfZGV2aWNlID0gdGFwZV8zNTkwX2NsZWFudXBfZGV2aWNlLAorCS5wcm9jZXNzX2VvdiA9IHRhcGVfc3RkX3Byb2Nlc3NfZW92LAorCS5pcnEgPSB0YXBlXzM1OTBfaXJxLAorCS5yZWFkX2Jsb2NrID0gdGFwZV9zdGRfcmVhZF9ibG9jaywKKwkud3JpdGVfYmxvY2sgPSB0YXBlX3N0ZF93cml0ZV9ibG9jaywKKyNpZmRlZiBDT05GSUdfUzM5MF9UQVBFX0JMT0NLCisJLmJyZWFkID0gdGFwZV8zNTkwX2JyZWFkLAorCS5mcmVlX2JyZWFkID0gdGFwZV8zNTkwX2ZyZWVfYnJlYWQsCisJLmNoZWNrX2xvY2F0ZSA9IHRhcGVfMzU5MF9jaGVja19sb2NhdGUsCisjZW5kaWYKKwkuaW9jdGxfZm4gPSB0YXBlXzM1OTBfaW9jdGwsCisJLm10b3BfYXJyYXkgPSB0YXBlXzM1OTBfbXRvcAorfTsKKworc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlX2lkIHRhcGVfMzU5MF9pZHNbXSA9IHsKKwl7Q0NXX0RFVklDRV9ERVZUWVBFKDB4MzU5MCwgMCwgMHgzNTkwLCAwKSwgLmRyaXZlcl9pbmZvID0gdGFwZV8zNTkwfSwKKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0KK307CisKK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9vbmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCit7CisJcmV0dXJuIHRhcGVfZ2VuZXJpY19vbmxpbmUoY2Rldi0+ZGV2LmRyaXZlcl9kYXRhLAorCQkJCSAgICZ0YXBlX2Rpc2NpcGxpbmVfMzU5MCk7Cit9CisKK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQoreworCXJldHVybiB0YXBlX2dlbmVyaWNfb2ZmbGluZShjZGV2LT5kZXYuZHJpdmVyX2RhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGNjd19kcml2ZXIgdGFwZV8zNTkwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJ0YXBlXzM1OTAiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pZHMgPSB0YXBlXzM1OTBfaWRzLAorCS5wcm9iZSA9IHRhcGVfZ2VuZXJpY19wcm9iZSwKKwkucmVtb3ZlID0gdGFwZV9nZW5lcmljX3JlbW92ZSwKKwkuc2V0X29mZmxpbmUgPSB0YXBlXzM1OTBfb2ZmbGluZSwKKwkuc2V0X29ubGluZSA9IHRhcGVfMzU5MF9vbmxpbmUsCit9OworCisvKgorICogU2V0dXAgZGlzY2lwbGluZSBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbnQKK3RhcGVfMzU5MF9pbml0KHZvaWQpCit7CisJaW50IHJjOworCisJVEFQRV9EQkZfQVJFQSA9IGRlYnVnX3JlZ2lzdGVyKCJ0YXBlXzM1OTAiLCAyLCAyLCA0ICogc2l6ZW9mKGxvbmcpKTsKKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KFRBUEVfREJGX0FSRUEsICZkZWJ1Z19zcHJpbnRmX3ZpZXcpOworI2lmZGVmIERCRl9MSUtFX0hFTEwKKwlkZWJ1Z19zZXRfbGV2ZWwoVEFQRV9EQkZfQVJFQSwgNik7CisjZW5kaWYKKworCURCRl9FVkVOVCgzLCAiMzU5MCBpbml0XG4iKTsKKwkvKiBSZWdpc3RlciBkcml2ZXIgZm9yIDM1OTAgdGFwZXMuICovCisJcmMgPSBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZ0YXBlXzM1OTBfZHJpdmVyKTsKKwlpZiAocmMpCisJCURCRl9FVkVOVCgzLCAiMzU5MCBpbml0IGZhaWxlZFxuIik7CisJZWxzZQorCQlEQkZfRVZFTlQoMywgIjM1OTAgcmVnaXN0ZXJlZFxuIik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAordGFwZV8zNTkwX2V4aXQodm9pZCkKK3sKKwljY3dfZHJpdmVyX3VucmVnaXN0ZXIoJnRhcGVfMzU5MF9kcml2ZXIpOworCisJZGVidWdfdW5yZWdpc3RlcihUQVBFX0RCRl9BUkVBKTsKK30KKworTU9EVUxFX0RFVklDRV9UQUJMRShjY3csIHRhcGVfMzU5MF9pZHMpOworTU9EVUxFX0FVVEhPUigiKEMpIDIwMDEsMjAwNiBJQk0gQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGludXggb24gelNlcmllcyBjaGFubmVsIGF0dGFjaGVkIDM1OTAgdGFwZSBkZXZpY2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHRhcGVfMzU5MF9pbml0KTsKK21vZHVsZV9leGl0KHRhcGVfMzU5MF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5oIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyNzRiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogIGRyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5oCisgKiAgICB0YXBlIGRldmljZSBkaXNjaXBsaW5lIGZvciAzNTkwIHRhcGVzLgorICoKKyAqICAgIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDIwMDEsMjAwNgorICogICAgQXV0aG9yKHMpOiBTdGVmYW4gQmFkZXIgPHNoYmFkZXJAZGUuaWJtLmNvbT4KKyAqCQkgTWljaGFlbCBIb2x6aGV1IDxob2x6aGV1QGRlLmlibS5jb20+CisgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqLworCisjaWZuZGVmIF9UQVBFXzM1OTBfSAorI2RlZmluZSBfVEFQRV8zNTkwX0gKKworI2RlZmluZSBNRURJVU1fU0VOU0UJMHhjMgorI2RlZmluZSBSRUFEX1BSRVZJT1VTCTB4MGEKKyNkZWZpbmUgTU9ERV9TRU5TRQkweGNmCisjZGVmaW5lIFBFUkZPUk1fU1NfRlVOQyAweDc3CisjZGVmaW5lIFJFQURfU1NfREFUQQkweDNlCisKKyNkZWZpbmUgUFJFUF9SRF9TU19EQVRBIDB4MTgKKyNkZWZpbmUgUkRfQVRUTVNHCTB4MworCisjZGVmaW5lIFNFTlNFX0JSQV9QRVIgIDAKKyNkZWZpbmUgU0VOU0VfQlJBX0NPTlQgMQorI2RlZmluZSBTRU5TRV9CUkFfUkUgICAyCisjZGVmaW5lIFNFTlNFX0JSQV9EUkUgIDMKKworI2RlZmluZSBTRU5TRV9GTVRfTElCUkFSWQkweDIzCisjZGVmaW5lIFNFTlNFX0ZNVF9VTlNPTElDSVRFRAkweDQwCisjZGVmaW5lIFNFTlNFX0ZNVF9DT01NQU5EX1JFSgkweDQxCisjZGVmaW5lIFNFTlNFX0ZNVF9DT01NQU5EX0VYRUMwIDB4NTAKKyNkZWZpbmUgU0VOU0VfRk1UX0NPTU1BTkRfRVhFQzEgMHg1MQorI2RlZmluZSBTRU5TRV9GTVRfRVZFTlQwCTB4NjAKKyNkZWZpbmUgU0VOU0VfRk1UX0VWRU5UMQkweDYxCisjZGVmaW5lIFNFTlNFX0ZNVF9NSU0JCTB4NzAKKyNkZWZpbmUgU0VOU0VfRk1UX1NJTQkJMHg3MQorCisjZGVmaW5lIE1TRU5TRV9VTkFTU09DSUFURUQJIDB4MDAKKyNkZWZpbmUgTVNFTlNFX0FTU09DSUFURURfTU9VTlQJIDB4MDEKKyNkZWZpbmUgTVNFTlNFX0FTU09DSUFURURfVU1PVU5UIDB4MDIKKworI2RlZmluZSBUQVBFXzM1OTBfTUFYX01TRwkgMHhiMAorCisvKiBEYXRhdHlwZXMgKi8KKworc3RydWN0IHRhcGVfMzU5MF9kaXNjX2RhdGEgeworCXVuc2lnbmVkIGNoYXIgbW9kZXNldF9ieXRlOworCWludCByZWFkX2JhY2tfb3A7Cit9OworCitzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlIHsKKworCXVuc2lnbmVkIGludCBjb21tYW5kX3JlajoxOworCXVuc2lnbmVkIGludCBpbnRlcnZfcmVxOjE7CisJdW5zaWduZWQgaW50IGJ1c19vdXRfY2hlY2s6MTsKKwl1bnNpZ25lZCBpbnQgZXFfY2hlY2s6MTsKKwl1bnNpZ25lZCBpbnQgZGF0YV9jaGVjazoxOworCXVuc2lnbmVkIGludCBvdmVycnVuOjE7CisJdW5zaWduZWQgaW50IGRlZl91bml0X2NoZWNrOjE7CisJdW5zaWduZWQgaW50IGFzc2duZF9lbHNldzoxOworCisJdW5zaWduZWQgaW50IGxvY2F0ZV9mYWlsOjE7CisJdW5zaWduZWQgaW50IGluc3Rfb25saW5lOjE7CisJdW5zaWduZWQgaW50IHJlc2VydmVkOjE7CisJdW5zaWduZWQgaW50IGJsa19zZXFfZXJyOjE7CisJdW5zaWduZWQgaW50IGJlZ2luX3BhcnQ6MTsKKwl1bnNpZ25lZCBpbnQgd3JfbW9kZToxOworCXVuc2lnbmVkIGludCB3cl9wcm90OjE7CisJdW5zaWduZWQgaW50IG5vdF9jYXA6MTsKKworCXVuc2lnbmVkIGludCBicmE6MjsKKwl1bnNpZ25lZCBpbnQgbGM6MzsKKwl1bnNpZ25lZCBpbnQgdmxmX2FjdGl2ZToxOworCXVuc2lnbmVkIGludCBzdG06MTsKKwl1bnNpZ25lZCBpbnQgbWVkX3BvczoxOworCisJdW5zaWduZWQgaW50IHJhYzo4OworCisJdW5zaWduZWQgaW50IHJjX3JxYzoxNjsKKworCXVuc2lnbmVkIGludCBtYzo4OworCisJdW5zaWduZWQgaW50IHNlbnNlX2ZtdDo4OworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IGVtYzo0OworCQkJdW5zaWduZWQgaW50IHNtYzo0OworCQkJdW5zaWduZWQgaW50IHNldjoyOworCQkJdW5zaWduZWQgaW50IHJlc2VydmVkOjY7CisJCQl1bnNpZ25lZCBpbnQgbWQ6ODsKKwkJCXVuc2lnbmVkIGludCByZWZjb2RlOjg7CisJCQl1bnNpZ25lZCBpbnQgbWlkOjE2OworCQkJdW5zaWduZWQgaW50IG1wOjE2OworCQkJdW5zaWduZWQgY2hhciB2b2xpZFs2XTsKKwkJCXVuc2lnbmVkIGludCBmaWQ6ODsKKwkJfSBmNzA7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBpbnQgZW1jOjQ7CisJCQl1bnNpZ25lZCBpbnQgc21jOjQ7CisJCQl1bnNpZ25lZCBpbnQgc2V2OjI7CisJCQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQxOjU7CisJCQl1bnNpZ25lZCBpbnQgbWRmOjE7CisJCQl1bnNpZ25lZCBjaGFyIG1kWzNdOworCQkJdW5zaWduZWQgaW50IHNpbWlkOjg7CisJCQl1bnNpZ25lZCBpbnQgdWlkOjE2OworCQkJdW5zaWduZWQgaW50IHJlZmNvZGUxOjE2OworCQkJdW5zaWduZWQgaW50IHJlZmNvZGUyOjE2OworCQkJdW5zaWduZWQgaW50IHJlZmNvZGUzOjE2OworCQkJdW5zaWduZWQgaW50IHJlc2VydmVkMjo4OworCQl9IGY3MTsKKwkJdW5zaWduZWQgY2hhciBkYXRhWzE0XTsKKwl9IGZtdDsKKwl1bnNpZ25lZCBjaGFyIHBhZFsxMF07CisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdGFwZV8zNTkwX21lZF9zZW5zZSB7CisJdW5zaWduZWQgaW50IG1hY3N0OjQ7CisJdW5zaWduZWQgaW50IG1hc3N0OjQ7CisJY2hhciBwYWRbMTI3XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYgLyogX1RBUEVfMzU5MF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKaW5kZXggYjM1NjljOC4uYTVjNjhlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuYwpAQCAtNDQsMTEgKzQ0LDEwIEBACiAJaW50CQlyYzsKIAljaGFyICoJCXM7CiAKLQl0Y2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGFwZV9jbGFzc19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwl0Y2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGFwZV9jbGFzc19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRjZCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQltZW1zZXQodGNkLCAwLCBzaXplb2Yoc3RydWN0IHRhcGVfY2xhc3NfZGV2aWNlKSk7CiAJc3RybmNweSh0Y2QtPmRldmljZV9uYW1lLCBkZXZpY2VfbmFtZSwgVEFQRUNMQVNTX05BTUVfTEVOKTsKIAlmb3IgKHMgPSBzdHJjaHIodGNkLT5kZXZpY2VfbmFtZSwgJy8nKTsgczsgcyA9IHN0cmNocihzLCAnLycpKQogCQkqcyA9ICchJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKaW5kZXggNGVhNDM4Yy4uMzg5ZWUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jb3JlLmMKQEAgLTQ1MywxNiArNDUzLDE0IEBACiB7CiAJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2U7CiAKLQlkZXZpY2UgPSAoc3RydWN0IHRhcGVfZGV2aWNlICopCi0JCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0YXBlX2RldmljZSksIEdGUF9LRVJORUwpOworCWRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0YXBlX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChkZXZpY2UgPT0gTlVMTCkgewogCQlEQkZfRVhDRVBUSU9OKDIsICJ0aTpubyBtZW1cbiIpOwogCQlQUklOVF9JTkZPICgiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciAiCiAJCQkgICAgInRhcGUgaW5mbyBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9Ci0JbWVtc2V0KGRldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCB0YXBlX2RldmljZSkpOwotCWRldmljZS0+bW9kZXNldF9ieXRlID0gKGNoYXIgKikga21hbGxvYygxLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoZGV2aWNlLT5tb2Rlc2V0X2J5dGUgPT0gTlVMTCkgewogCQlEQkZfRVhDRVBUSU9OKDIsICJ0aTpubyBtZW1cbiIpOwogCQlQUklOVF9JTkZPKCJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1vZGVzZXQgYnl0ZVxuIik7CkBAIC02NTksMzQgKzY1NywzMCBAQAogCiAJREJGX0xIKDYsICJ0YXBlX2FsbG9jX3JlcXVlc3QoJWQsICVkKVxuIiwgY3BsZW5ndGgsIGRhdGFzaXplKTsKIAotCXJlcXVlc3QgPSAoc3RydWN0IHRhcGVfcmVxdWVzdCAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGFwZV9yZXF1ZXN0KSwKLQkJCQkJCSAgR0ZQX0tFUk5FTCk7CisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0YXBlX3JlcXVlc3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVxdWVzdCA9PSBOVUxMKSB7CiAJCURCRl9FWENFUFRJT04oMSwgImNxcmEgbm9tZW1cbiIpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9Ci0JbWVtc2V0KHJlcXVlc3QsIDAsIHNpemVvZihzdHJ1Y3QgdGFwZV9yZXF1ZXN0KSk7CiAJLyogYWxsb2NhdGUgY2hhbm5lbCBwcm9ncmFtICovCiAJaWYgKGNwbGVuZ3RoID4gMCkgewotCQlyZXF1ZXN0LT5jcGFkZHIgPSBrbWFsbG9jKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSksCisJCXJlcXVlc3QtPmNwYWRkciA9IGtjYWxsb2MoY3BsZW5ndGgsIHNpemVvZihzdHJ1Y3QgY2N3MSksCiAJCQkJCSAgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCQlpZiAocmVxdWVzdC0+Y3BhZGRyID09IE5VTEwpIHsKIAkJCURCRl9FWENFUFRJT04oMSwgImNxcmEgbm9tZW1cbiIpOwogCQkJa2ZyZWUocmVxdWVzdCk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJfQotCQltZW1zZXQocmVxdWVzdC0+Y3BhZGRyLCAwLCBjcGxlbmd0aCpzaXplb2Yoc3RydWN0IGNjdzEpKTsKIAl9CiAJLyogYWxsb2Mgc21hbGwga2VybmVsIGJ1ZmZlciAqLwogCWlmIChkYXRhc2l6ZSA+IDApIHsKLQkJcmVxdWVzdC0+Y3BkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCQlyZXF1ZXN0LT5jcGRhdGEgPSBremFsbG9jKGRhdGFzaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChyZXF1ZXN0LT5jcGRhdGEgPT0gTlVMTCkgewogCQkJREJGX0VYQ0VQVElPTigxLCAiY3FyYSBub21lbVxuIik7CiAJCQlrZnJlZShyZXF1ZXN0LT5jcGFkZHIpOwogCQkJa2ZyZWUocmVxdWVzdCk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJfQotCQltZW1zZXQocmVxdWVzdC0+Y3BkYXRhLCAwLCBkYXRhc2l6ZSk7CiAJfQogCURCRl9MSCg2LCAiTmV3IHJlcXVlc3QgJXAoJXAvJXApXG4iLCByZXF1ZXN0LCByZXF1ZXN0LT5jcGFkZHIsCiAJCXJlcXVlc3QtPmNwZGF0YSk7CkBAIC03NjEsNiArNzU1LDEzIEBACiAJCSAqLwogCQlpZiAocmVxdWVzdC0+c3RhdHVzID09IFRBUEVfUkVRVUVTVF9JTl9JTykKIAkJCXJldHVybjsKKwkJLyoKKwkJICogUmVxdWVzdCBoYXMgYWxyZWFkeSBiZWVuIHN0b3BwZWQuIFdlIGhhdmUgdG8gd2FpdCB1bnRpbAorCQkgKiB0aGUgcmVxdWVzdCBpcyByZW1vdmVkIGZyb20gdGhlIHF1ZXVlIGluIHRoZSBpbnRlcnJ1cHQKKwkJICogaGFuZGxpbmcuCisJCSAqLworCQlpZiAocmVxdWVzdC0+c3RhdHVzID09IFRBUEVfUkVRVUVTVF9ET05FKQorCQkJcmV0dXJuOwogCiAJCS8qCiAJCSAqIFdlIHdhbnRlZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QgYnV0IHRoZSBjb21tb24gSS9PIGxheWVyCkBAIC0xMDE1LDcgKzEwMTYsNyBAQAogCQkJCXdxLAogCQkJCShyZXF1ZXN0LT5jYWxsYmFjayA9PSBOVUxMKQogCQkJKTsKLQkJfSB3aGlsZSAocmMgIT0gLUVSRVNUQVJUU1lTKTsKKwkJfSB3aGlsZSAocmMgPT0gLUVSRVNUQVJUU1lTKTsKIAogCQlEQkZfRVZFTlQoMywgIklPIHN0b3BwZWQgb24gJTA4eFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKIAkJcmMgPSAtRVJFU1RBUlRTWVM7CkBAIC0xMDI0LDYgKzEwMjUsMjAgQEAKIH0KIAogLyoKKyAqIFN0b3AgcnVubmluZyBjY3cuCisgKi8KK2ludAordGFwZV9jYW5jZWxfaW8oc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CisJcmMgPSBfX3RhcGVfY2FuY2VsX2lvKGRldmljZSwgcmVxdWVzdCk7CisJc3Bpbl91bmxvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCiAgKiBUYXBlIGludGVycnVwdCByb3V0aW5lLCBjYWxsZWQgZnJvbSB0aGUgY2N3X2RldmljZSBsYXllcgogICovCiBzdGF0aWMgdm9pZApAQCAtMTA2NCwxNSArMTA3OSwxNiBAQAogCS8qCiAJICogSWYgdGhlIGNvbmRpdGlvbiBjb2RlIGlzIG5vdCB6ZXJvIGFuZCB0aGUgc3RhcnQgZnVuY3Rpb24gYml0IGlzCiAJICogc3RpbGwgc2V0LCB0aGlzIGlzIGFuIGRlZmVycmVkIGVycm9yIGFuZCB0aGUgbGFzdCBzdGFydCBJL08gZGlkCi0JICogbm90IHN1Y2NlZWQuIFJlc3RhcnQgdGhlIHJlcXVlc3Qgbm93LgorCSAqIG5vdCBzdWNjZWVkLiBBdCB0aGlzIHBvaW50IHRoZSBjb25kaXRpb24gdGhhdCBjYXVzZWQgdGhlIGRlZmVycmVkCisJICogZXJyb3IgbWlnaHQgc3RpbGwgYXBwbHkuIFNvIHdlIGp1c3Qgc2NoZWR1bGUgdGhlIHJlcXVlc3QgdG8gYmUKKwkgKiBzdGFydGVkIGxhdGVyLgogCSAqLwotCWlmIChpcmItPnNjc3cuY2MgIT0gMCAmJiAoaXJiLT5zY3N3LmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykpIHsKLQkJUFJJTlRfV0FSTigiKCVzKTogZGVmZXJyZWQgY2M9JWkuIHJlc3RhcmluZ1xuIiwKLQkJCWNkZXYtPmRldi5idXNfaWQsCi0JCQlpcmItPnNjc3cuY2MpOwotCQlyYyA9IF9fdGFwZV9zdGFydF9pbyhkZXZpY2UsIHJlcXVlc3QpOwotCQlpZiAocmMpCi0JCQlfX3RhcGVfZW5kX3JlcXVlc3QoZGV2aWNlLCByZXF1ZXN0LCByYyk7CisJaWYgKGlyYi0+c2Nzdy5jYyAhPSAwICYmIChpcmItPnNjc3cuZmN0bCAmIFNDU1dfRkNUTF9TVEFSVF9GVU5DKSAmJgorCSAgICAocmVxdWVzdC0+c3RhdHVzID09IFRBUEVfUkVRVUVTVF9JTl9JTykpIHsKKwkJREJGX0VWRU5UKDMsIiglMDh4KTogZGVmZXJyZWQgY2M9JWksIGZjdGw9JWkuIHJlc3RhcnRpbmdcbiIsCisJCQlkZXZpY2UtPmNkZXZfaWQsIGlyYi0+c2Nzdy5jYywgaXJiLT5zY3N3LmZjdGwpOworCQlyZXF1ZXN0LT5zdGF0dXMgPSBUQVBFX1JFUVVFU1RfUVVFVUVEOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+dGFwZV9kbnIsIEhaKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI4Niw0ICsxMzAyLDUgQEAKIEVYUE9SVF9TWU1CT0wodGFwZV9kb19pbyk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZG9faW9fYXN5bmMpOwogRVhQT1JUX1NZTUJPTCh0YXBlX2RvX2lvX2ludGVycnVwdGlibGUpOworRVhQT1JUX1NZTUJPTCh0YXBlX2NhbmNlbF9pbyk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfbXRvcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwppbmRleCAyZjlmZTMwLi45OWNmODgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKQEAgLTM3LDIwICszNywxOSBAQAogewogCXN0cnVjdCB0YXBlX3JlcXVlc3QgKglyZXF1ZXN0OwogCXN0cnVjdCB0YXBlX2RldmljZSAqCWRldmljZTsKKwlpbnQgcmM7CiAKIAlyZXF1ZXN0ID0gKHN0cnVjdCB0YXBlX3JlcXVlc3QgKikgZGF0YTsKIAlpZiAoKGRldmljZSA9IHJlcXVlc3QtPmRldmljZSkgPT0gTlVMTCkKIAkJQlVHKCk7CiAKLQlzcGluX2xvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKLQlpZiAocmVxdWVzdC0+Y2FsbGJhY2sgIT0gTlVMTCkgewotCQlEQkZfRVZFTlQoMywgIiUwOHg6IEFzc2lnbm1lbnQgdGltZW91dC4gRGV2aWNlIGJ1c3kuXG4iLAorCURCRl9FVkVOVCgzLCAiJTA4eDogQXNzaWdubWVudCB0aW1lb3V0LiBEZXZpY2UgYnVzeS5cbiIsCiAJCQlkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9FUlIoIiVzOiBBc3NpZ25tZW50IHRpbWVvdXQuIERldmljZSBidXN5LlxuIiwKLQkJCWRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7Ci0JCWNjd19kZXZpY2VfY2xlYXIoZGV2aWNlLT5jZGV2LCAobG9uZykgcmVxdWVzdCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CisJcmMgPSB0YXBlX2NhbmNlbF9pbyhkZXZpY2UsIHJlcXVlc3QpOworCWlmKHJjKQorCQlQUklOVF9FUlIoIiglcyk6IEFzc2lnbiB0aW1lb3V0OiBDYW5jZWwgZmFpbGVkIHdpdGggcmMgPSAlaVxuIiwKKwkJCWRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCwgcmMpOworCiB9CiAKIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmgKaW5kZXggM2FiNmFhZi4uMmQzMTE3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuaAorKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5oCkBAIC0xLDkgKzEsOCBAQAogLyoKLSAqICBkcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguaAorICogIGRyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmgKICAqICAgIHN0YW5kYXJkIHRhcGUgZGV2aWNlIGZ1bmN0aW9ucyBmb3IgaWJtIHRhcGVzLgogICoKLSAqICBTMzkwIGFuZCB6U2VyaWVzIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDIwMDEsMjAwNgogICogICAgQXV0aG9yKHMpOiBDYXJzdGVuIE90dGUgPGNvdHRlQGRlLmlibS5jb20+CiAgKgkJIFR1YW4gTmdvLUFuaCA8bmdvYW5oQGRlLmlibS5jb20+CiAgKgkJIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KQEAgLTE0OSw0ICsxNDgsMTEgQEAKIHZvaWQgdGFwZV9zdGRfZXJyb3JfcmVjb3ZlcnlfcmVhZF9vcHBvc2l0ZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKik7CiB2b2lkIHRhcGVfc3RkX2Vycm9yX3JlY292ZXJ5X0hXQlVHKHN0cnVjdCB0YXBlX2RldmljZSAqLCBpbnQgY29uZG5vKTsKIAorLyogUzM5MCB0YXBlIHR5cGVzICovCitlbnVtIHMzOTBfdGFwZV90eXBlIHsKKyAgICAgICAgdGFwZV8zNDgwLAorICAgICAgICB0YXBlXzM0OTAsCisgICAgICAgIHRhcGVfMzU5MCwKK307CisKICNlbmRpZiAvLyBfVEFQRV9TVERfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jCmluZGV4IDRiOTA2OTMuLjlhMTQxNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3R0eTMyNzAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90dHkzMjcwLmMKQEAgLTY5MSwxMCArNjkxLDkgQEAKIAlzdHJ1Y3QgdHR5MzI3MCAqdHA7CiAJaW50IHBhZ2VzOwogCi0JdHAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHR5MzI3MCksR0ZQX0tFUk5FTCk7CisJdHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHR5MzI3MCksIEdGUF9LRVJORUwpOwogCWlmICghdHApCiAJCWdvdG8gb3V0X2VycjsKLQltZW1zZXQodHAsIDAsIHNpemVvZihzdHJ1Y3QgdHR5MzI3MCkpOwogCXRwLT5mcmVlbWVtX3BhZ2VzID0KIAkJa21hbGxvYyhzaXplb2Yodm9pZCAqKSAqIFRUWTMyNzBfU1RSSU5HX1BBR0VTLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRwLT5mcmVlbWVtX3BhZ2VzKQpAQCAtNzY3LDE2ICs3NjYsMTQgQEAKIAlpbnQgbGluZXM7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCB0dHkzMjcwX2xpbmUpICogKHRwLT52aWV3LnJvd3MgLSAyKTsKLQl0cC0+c2NyZWVuID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwl0cC0+c2NyZWVuID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRwLT5zY3JlZW4pCiAJCWdvdG8gb3V0X2VycjsKLQltZW1zZXQodHAtPnNjcmVlbiwgMCwgc2l6ZSk7CiAJZm9yIChsaW5lcyA9IDA7IGxpbmVzIDwgdHAtPnZpZXcucm93cyAtIDI7IGxpbmVzKyspIHsKIAkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHR5MzI3MF9jZWxsKSAqIHRwLT52aWV3LmNvbHM7Ci0JCXRwLT5zY3JlZW5bbGluZXNdLmNlbGxzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJdHAtPnNjcmVlbltsaW5lc10uY2VsbHMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXRwLT5zY3JlZW5bbGluZXNdLmNlbGxzKQogCQkJZ290byBvdXRfc2NyZWVuOwotCQltZW1zZXQodHAtPnNjcmVlbltsaW5lc10uY2VsbHMsIDAsIHNpemUpOwogCX0KIAlyZXR1cm4gMDsKIG91dF9zY3JlZW46CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1sb2dyZHIuYwppbmRleCBiMmQ3NWRlLi5jNjI1YjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci92bWxvZ3Jkci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtbG9ncmRyLmMKQEAgLTc1OSw5ICs3NTksOCBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgcmV0OwogCi0JZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldmljZSksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2KSB7Ci0JCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CiAJCXNucHJpbnRmKGRldi0+YnVzX2lkLCBCVVNfSURfU0laRSwgIiVzIiwKIAkJCSBwcml2LT5pbnRlcm5hbF9uYW1lKTsKIAkJZGV2LT5idXMgPSAmaXVjdl9idXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKaW5kZXggODAxM2M4ZS4uYmRmZWU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYwpAQCAtMTU3LDExICsxNTcsMTAgQEAKIAlpZiAoYXJnYyA+IDI1NikgLyogZGlzYWxsb3cgZHVtYiB1c2VycyAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWdkZXYgPSBrbWFsbG9jKHNpemVvZigqZ2RldikgKyBhcmdjKnNpemVvZihnZGV2LT5jZGV2WzBdKSwgR0ZQX0tFUk5FTCk7CisJZ2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpnZGV2KSArIGFyZ2Mqc2l6ZW9mKGdkZXYtPmNkZXZbMF0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGdkZXYsIDAsIHNpemVvZigqZ2RldikgKyBhcmdjKnNpemVvZihnZGV2LT5jZGV2WzBdKSk7CiAJYXRvbWljX3NldCgmZ2Rldi0+b25vZmYsIDApOwogCiAJZGVsX2RydmRhdGEgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCA4Y2Y5OTA1Li42NDEyYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwpAQCAtOTgsMTAgKzk4LDggQEAKIAogCXNzZF9hcmVhID0gcGFnZTsKIAotCXNzZF9hcmVhLT5yZXF1ZXN0ID0gKHN0cnVjdCBjaHNjX2hlYWRlcikgewotCQkubGVuZ3RoID0gMHgwMDEwLAotCQkuY29kZSAgID0gMHgwMDA0LAotCX07CisJc3NkX2FyZWEtPnJlcXVlc3QubGVuZ3RoID0gMHgwMDEwOworCXNzZF9hcmVhLT5yZXF1ZXN0LmNvZGUgPSAweDAwMDQ7CiAKIAlzc2RfYXJlYS0+c3NpZCA9IHNjaC0+c2NoaWQuc3NpZDsKIAlzc2RfYXJlYS0+Zl9zY2ggPSBzY2gtPnNjaGlkLnNjaF9ubzsKQEAgLTUxNywxMCArNTE1LDggQEAKIAkJc3RydWN0IGRldmljZSAqZGV2OwogCQltZW1zZXQoc2VpX2FyZWEsIDAsIHNpemVvZigqc2VpX2FyZWEpKTsKIAkJbWVtc2V0KCZyZXNfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNfYWNjX2RhdGEpKTsKLQkJc2VpX2FyZWEtPnJlcXVlc3QgPSAoc3RydWN0IGNoc2NfaGVhZGVyKSB7Ci0JCQkubGVuZ3RoID0gMHgwMDEwLAotCQkJLmNvZGUgICA9IDB4MDAwZSwKLQkJfTsKKwkJc2VpX2FyZWEtPnJlcXVlc3QubGVuZ3RoID0gMHgwMDEwOworCQlzZWlfYXJlYS0+cmVxdWVzdC5jb2RlID0gMHgwMDBlOwogCiAJCWNjb2RlID0gY2hzYyhzZWlfYXJlYSk7CiAJCWlmIChjY29kZSA+IDApCkBAIC04NzUsNiArODcxLDI2NCBAQAogfQogCiAvKgorICogQ2hhbm5lbCBtZWFzdXJlbWVudCByZWxhdGVkIGZ1bmN0aW9ucworICovCitzdGF0aWMgc3NpemVfdAorY2hwX21lYXN1cmVtZW50X2NoYXJzX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwKKwkJCSAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHA7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwljaHAgPSB0b19jaGFubmVscGF0aChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOworCWlmICghY2hwLT5jbWdfY2hhcnMpCisJCXJldHVybiAwOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21nX2NoYXJzKTsKKworCWlmIChvZmYgPiBzaXplKQorCQlyZXR1cm4gMDsKKwlpZiAob2ZmICsgY291bnQgPiBzaXplKQorCQljb3VudCA9IHNpemUgLSBvZmY7CisJbWVtY3B5KGJ1ZiwgY2hwLT5jbWdfY2hhcnMgKyBvZmYsIGNvdW50KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBjaHBfbWVhc3VyZW1lbnRfY2hhcnNfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAibWVhc3VyZW1lbnRfY2hhcnMiLAorCQkubW9kZSA9IFNfSVJVU1IsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnNpemUgPSBzaXplb2Yoc3RydWN0IGNtZ19jaGFycyksCisJLnJlYWQgPSBjaHBfbWVhc3VyZW1lbnRfY2hhcnNfcmVhZCwKK307CisKK3N0YXRpYyB2b2lkCitjaHBfbWVhc3VyZW1lbnRfY29weV9ibG9jayhzdHJ1Y3QgY21nX2VudHJ5ICpidWYsCisJCQkgICBzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKmNzcywgaW50IGNocGlkKQoreworCXZvaWQgKmFyZWE7CisJc3RydWN0IGNtZ19lbnRyeSAqZW50cnksIHJlZmVyZW5jZV9idWY7CisJaW50IGlkeDsKKworCWlmIChjaHBpZCA8IDEyOCkgeworCQlhcmVhID0gY3NzLT5jdWJfYWRkcjE7CisJCWlkeCA9IGNocGlkOworCX0gZWxzZSB7CisJCWFyZWEgPSBjc3MtPmN1Yl9hZGRyMjsKKwkJaWR4ID0gY2hwaWQgLSAxMjg7CisJfQorCWVudHJ5ID0gYXJlYSArIChpZHggKiBzaXplb2Yoc3RydWN0IGNtZ19lbnRyeSkpOworCWRvIHsKKwkJbWVtY3B5KGJ1ZiwgZW50cnksIHNpemVvZigqZW50cnkpKTsKKwkJbWVtY3B5KCZyZWZlcmVuY2VfYnVmLCBlbnRyeSwgc2l6ZW9mKCplbnRyeSkpOworCX0gd2hpbGUgKHJlZmVyZW5jZV9idWYudmFsdWVzWzBdICE9IGJ1Zi0+dmFsdWVzWzBdKTsKK30KKworc3RhdGljIHNzaXplX3QKK2NocF9tZWFzdXJlbWVudF9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHA7CisJc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3M7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwljaHAgPSB0b19jaGFubmVscGF0aChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOworCWNzcyA9IHRvX2NzcyhjaHAtPmRldi5wYXJlbnQpOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21nX2NoYXJzKTsKKworCS8qIE9ubHkgYWxsb3cgc2luZ2xlIHJlYWRzLiAqLworCWlmIChvZmYgfHwgY291bnQgPCBzaXplKQorCQlyZXR1cm4gMDsKKwljaHBfbWVhc3VyZW1lbnRfY29weV9ibG9jaygoc3RydWN0IGNtZ19lbnRyeSAqKWJ1ZiwgY3NzLCBjaHAtPmlkKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBjaHBfbWVhc3VyZW1lbnRfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAibWVhc3VyZW1lbnQiLAorCQkubW9kZSA9IFNfSVJVU1IsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnNpemUgPSBzaXplb2Yoc3RydWN0IGNtZ19lbnRyeSksCisJLnJlYWQgPSBjaHBfbWVhc3VyZW1lbnRfcmVhZCwKK307CisKK3N0YXRpYyB2b2lkCitjaHNjX3JlbW92ZV9jaHBfY21nX2F0dHIoc3RydWN0IGNoYW5uZWxfcGF0aCAqY2hwKQoreworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmY2hwLT5kZXYua29iaiwgJmNocF9tZWFzdXJlbWVudF9jaGFyc19hdHRyKTsKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmNocC0+ZGV2LmtvYmosICZjaHBfbWVhc3VyZW1lbnRfYXR0cik7Cit9CisKK3N0YXRpYyBpbnQKK2Noc2NfYWRkX2NocF9jbWdfYXR0cihzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHApCit7CisJaW50IHJldDsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmY2hwLT5kZXYua29iaiwKKwkJCQkgICAgJmNocF9tZWFzdXJlbWVudF9jaGFyc19hdHRyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmY2hwLT5kZXYua29iaiwgJmNocF9tZWFzdXJlbWVudF9hdHRyKTsKKwlpZiAocmV0KQorCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmNocC0+ZGV2LmtvYmosCisJCQkJICAgICAgJmNocF9tZWFzdXJlbWVudF9jaGFyc19hdHRyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorY2hzY19yZW1vdmVfY21nX2F0dHIoc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IF9fTUFYX0NIUElEOyBpKyspIHsKKwkJaWYgKCFjc3MtPmNocHNbaV0pCisJCQljb250aW51ZTsKKwkJY2hzY19yZW1vdmVfY2hwX2NtZ19hdHRyKGNzcy0+Y2hwc1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50CitjaHNjX2FkZF9jbWdfYXR0cihzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKmNzcykKK3sKKwlpbnQgaSwgcmV0OworCisJcmV0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDw9IF9fTUFYX0NIUElEOyBpKyspIHsKKwkJaWYgKCFjc3MtPmNocHNbaV0pCisJCQljb250aW51ZTsKKwkJcmV0ID0gY2hzY19hZGRfY2hwX2NtZ19hdHRyKGNzcy0+Y2hwc1tpXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGNsZWFudXA7CisJfQorCXJldHVybiByZXQ7CitjbGVhbnVwOgorCWZvciAoLS1pOyBpID49IDA7IGktLSkgeworCQlpZiAoIWNzcy0+Y2hwc1tpXSkKKwkJCWNvbnRpbnVlOworCQljaHNjX3JlbW92ZV9jaHBfY21nX2F0dHIoY3NzLT5jaHBzW2ldKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50CitfX2Noc2NfZG9fc2VjbShzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKmNzcywgaW50IGVuYWJsZSwgdm9pZCAqcGFnZSkKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVxdWVzdDsKKwkJdTMyIG9wZXJhdGlvbl9jb2RlIDogMjsKKwkJdTMyIDogMzA7CisJCXUzMiBrZXkgOiA0OworCQl1MzIgOiAyODsKKwkJdTMyIHplcm9lczE7CisJCXUzMiBjdWJfYWRkcjE7CisJCXUzMiB6ZXJvZXMyOworCQl1MzIgY3ViX2FkZHIyOworCQl1MzIgcmVzZXJ2ZWRbMTNdOworCQlzdHJ1Y3QgY2hzY19oZWFkZXIgcmVzcG9uc2U7CisJCXUzMiBzdGF0dXMgOiA4OworCQl1MzIgOiA0OworCQl1MzIgZm10IDogNDsKKwkJdTMyIDogMTY7CisJfSAqc2VjbV9hcmVhOworCWludCByZXQsIGNjb2RlOworCisJc2VjbV9hcmVhID0gcGFnZTsKKwlzZWNtX2FyZWEtPnJlcXVlc3QubGVuZ3RoID0gMHgwMDUwOworCXNlY21fYXJlYS0+cmVxdWVzdC5jb2RlID0gMHgwMDE2OworCisJc2VjbV9hcmVhLT5rZXkgPSBQQUdFX0RFRkFVTFRfS0VZOworCXNlY21fYXJlYS0+Y3ViX2FkZHIxID0gKHU2NCkodW5zaWduZWQgbG9uZyljc3MtPmN1Yl9hZGRyMTsKKwlzZWNtX2FyZWEtPmN1Yl9hZGRyMiA9ICh1NjQpKHVuc2lnbmVkIGxvbmcpY3NzLT5jdWJfYWRkcjI7CisKKwlzZWNtX2FyZWEtPm9wZXJhdGlvbl9jb2RlID0gZW5hYmxlID8gMCA6IDE7CisKKwljY29kZSA9IGNoc2Moc2VjbV9hcmVhKTsKKwlpZiAoY2NvZGUgPiAwKQorCQlyZXR1cm4gKGNjb2RlID09IDMpID8gLUVOT0RFViA6IC1FQlVTWTsKKworCXN3aXRjaCAoc2VjbV9hcmVhLT5yZXNwb25zZS5jb2RlKSB7CisJY2FzZSAweDAwMDE6IC8qIFN1Y2Nlc3MuICovCisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgMHgwMDAzOiAvKiBJbnZhbGlkIGJsb2NrLiAqLworCWNhc2UgMHgwMDA3OiAvKiBJbnZhbGlkIGZvcm1hdC4gKi8KKwljYXNlIDB4MDAwODogLyogT3RoZXIgaW52YWxpZCBibG9jay4gKi8KKwkJQ0lPX0NSV19FVkVOVCgyLCAiRXJyb3IgaW4gY2hzYyByZXF1ZXN0IGJsb2NrIVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgMHgwMDA0OiAvKiBDb21tYW5kIG5vdCBwcm92aWRlZCBpbiBtb2RlbC4gKi8KKwkJQ0lPX0NSV19FVkVOVCgyLCAiTW9kZWwgZG9lcyBub3QgcHJvdmlkZSBzZWNtXG4iKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCWNhc2UgMHgwMTAyOiAvKiBjdWIgYWRyZXNzZXMgaW5jb3JyZWN0ICovCisJCUNJT19DUldfRVZFTlQoMiwgIkludmFsaWQgYWRkcmVzc2VzIGluIGNoc2MgcmVxdWVzdCBibG9ja1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgMHgwMTAzOiAvKiBrZXkgZXJyb3IgKi8KKwkJQ0lPX0NSV19FVkVOVCgyLCAiQWNjZXNzIGtleSBlcnJvciBpbiBzZWNtXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSAweDAxMDU6IC8qIGVycm9yIHdoaWxlIHN0YXJ0aW5nICovCisJCUNJT19DUldfRVZFTlQoMiwgIkVycm9yIHdoaWxlIHN0YXJ0aW5nIGNoYW5uZWwgbWVhc3VyZW1lbnRcbiIpOworCQlyZXQgPSAtRUlPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlDSU9fQ1JXX0VWRU5UKDIsICJVbmtub3duIENIU0MgcmVzcG9uc2UgJWRcbiIsCisJCQkgICAgICBzZWNtX2FyZWEtPnJlc3BvbnNlLmNvZGUpOworCQlyZXQgPSAtRUlPOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQKK2Noc2Nfc2VjbShzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKmNzcywgaW50IGVuYWJsZSkKK3sKKwl2b2lkICAqc2VjbV9hcmVhOworCWludCByZXQ7CisKKwlzZWNtX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgIEdGUF9ETUEpOworCWlmICghc2VjbV9hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJmNzcy0+bXV0ZXgpOworCWlmIChlbmFibGUgJiYgIWNzcy0+Y21fZW5hYmxlZCkgeworCQljc3MtPmN1Yl9hZGRyMSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJY3NzLT5jdWJfYWRkcjIgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJCWlmICghY3NzLT5jdWJfYWRkcjEgfHwgIWNzcy0+Y3ViX2FkZHIyKSB7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3NzLT5jdWJfYWRkcjEpOworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNzcy0+Y3ViX2FkZHIyKTsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWNtX2FyZWEpOworCQkJbXV0ZXhfdW5sb2NrKCZjc3MtPm11dGV4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCXJldCA9IF9fY2hzY19kb19zZWNtKGNzcywgZW5hYmxlLCBzZWNtX2FyZWEpOworCWlmICghcmV0KSB7CisJCWNzcy0+Y21fZW5hYmxlZCA9IGVuYWJsZTsKKwkJaWYgKGNzcy0+Y21fZW5hYmxlZCkgeworCQkJcmV0ID0gY2hzY19hZGRfY21nX2F0dHIoY3NzKTsKKwkJCWlmIChyZXQpIHsKKwkJCQltZW1zZXQoc2VjbV9hcmVhLCAwLCBQQUdFX1NJWkUpOworCQkJCV9fY2hzY19kb19zZWNtKGNzcywgMCwgc2VjbV9hcmVhKTsKKwkJCQljc3MtPmNtX2VuYWJsZWQgPSAwOworCQkJfQorCQl9IGVsc2UKKwkJCWNoc2NfcmVtb3ZlX2NtZ19hdHRyKGNzcyk7CisJfQorCWlmIChlbmFibGUgJiYgIWNzcy0+Y21fZW5hYmxlZCkgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3NzLT5jdWJfYWRkcjEpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY3NzLT5jdWJfYWRkcjIpOworCX0KKwltdXRleF91bmxvY2soJmNzcy0+bXV0ZXgpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZWNtX2FyZWEpOworCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBGaWxlcyBmb3IgdGhlIGNoYW5uZWwgcGF0aCBlbnRyaWVzLgogICovCiBzdGF0aWMgc3NpemVfdApAQCAtOTI1LDkgKzExNzksMzkgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHR5cGUsIDA0NDQsIGNocF90eXBlX3Nob3csIE5VTEwpOwogCitzdGF0aWMgc3NpemVfdAorY2hwX2NtZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHAgPSB0b19jaGFubmVscGF0aChkZXYpOworCisJaWYgKCFjaHApCisJCXJldHVybiAwOworCWlmIChjaHAtPmNtZyA9PSAtMSkgLyogY2hhbm5lbCBtZWFzdXJlbWVudHMgbm90IGF2YWlsYWJsZSAqLworCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgY2hwLT5jbWcpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY21nLCAwNDQ0LCBjaHBfY21nX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorY2hwX3NoYXJlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHAgPSB0b19jaGFubmVscGF0aChkZXYpOworCisJaWYgKCFjaHApCisJCXJldHVybiAwOworCWlmIChjaHAtPnNoYXJlZCA9PSAtMSkgLyogY2hhbm5lbCBtZWFzdXJlbWVudHMgbm90IGF2YWlsYWJsZSAqLworCQlyZXR1cm4gc3ByaW50ZihidWYsICJ1bmtub3duXG4iKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgY2hwLT5zaGFyZWQpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc2hhcmVkLCAwNDQ0LCBjaHBfc2hhcmVkX3Nob3csIE5VTEwpOworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGNocF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9zdGF0dXMuYXR0ciwKIAkmZGV2X2F0dHJfdHlwZS5hdHRyLAorCSZkZXZfYXR0cl9jbWcuYXR0ciwKKwkmZGV2X2F0dHJfc2hhcmVkLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTk2NiwxMCArMTI1MCw4IEBACiAJaWYgKCFzY3BkX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc2NwZF9hcmVhLT5yZXF1ZXN0ID0gKHN0cnVjdCBjaHNjX2hlYWRlcikgewotCQkubGVuZ3RoID0gMHgwMDEwLAotCQkuY29kZSAgID0gMHgwMDAyLAotCX07CisJc2NwZF9hcmVhLT5yZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDsKKwlzY3BkX2FyZWEtPnJlcXVlc3QuY29kZSA9IDB4MDAwMjsKIAogCXNjcGRfYXJlYS0+Zmlyc3RfY2hwaWQgPSBjaHBpZDsKIAlzY3BkX2FyZWEtPmxhc3RfY2hwaWQgPSBjaHBpZDsKQEAgLTEwMDYsNiArMTI4OCwxMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZAorY2hzY19pbml0aWFsaXplX2NtZ19jaGFycyhzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHAsIHU4IGNtY3YsCisJCQkgIHN0cnVjdCBjbWdfY2hhcnMgKmNoYXJzKQoreworCXN3aXRjaCAoY2hwLT5jbWcpIHsKKwljYXNlIDI6CisJY2FzZSAzOgorCQljaHAtPmNtZ19jaGFycyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbWdfY2hhcnMpLAorCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmIChjaHAtPmNtZ19jaGFycykgeworCQkJaW50IGksIG1hc2s7CisJCQlzdHJ1Y3QgY21nX2NoYXJzICpjbWdfY2hhcnM7CisKKwkJCWNtZ19jaGFycyA9IGNocC0+Y21nX2NoYXJzOworCQkJZm9yIChpID0gMDsgaSA8IE5SX01FQVNVUkVNRU5UX0NIQVJTOyBpKyspIHsKKwkJCQltYXNrID0gMHg4MCA+PiAoaSArIDMpOworCQkJCWlmIChjbWN2ICYgbWFzaykKKwkJCQkJY21nX2NoYXJzLT52YWx1ZXNbaV0gPSBjaGFycy0+dmFsdWVzW2ldOworCQkJCWVsc2UKKwkJCQkJY21nX2NoYXJzLT52YWx1ZXNbaV0gPSAwOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIE5vIGNtZy1kZXBlbmRlbnQgZGF0YS4gKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50CitjaHNjX2dldF9jaGFubmVsX21lYXN1cmVtZW50X2NoYXJzKHN0cnVjdCBjaGFubmVsX3BhdGggKmNocCkKK3sKKwlpbnQgY2NvZGUsIHJldDsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBjaHNjX2hlYWRlciByZXF1ZXN0OworCQl1MzIgOiAyNDsKKwkJdTMyIGZpcnN0X2NocGlkIDogODsKKwkJdTMyIDogMjQ7CisJCXUzMiBsYXN0X2NocGlkIDogODsKKwkJdTMyIHplcm9lczE7CisJCXN0cnVjdCBjaHNjX2hlYWRlciByZXNwb25zZTsKKwkJdTMyIHplcm9lczI7CisJCXUzMiBub3RfdmFsaWQgOiAxOworCQl1MzIgc2hhcmVkIDogMTsKKwkJdTMyIDogMjI7CisJCXUzMiBjaHBpZCA6IDg7CisJCXUzMiBjbWN2IDogNTsKKwkJdTMyIDogMTE7CisJCXUzMiBjbWdxIDogODsKKwkJdTMyIGNtZyA6IDg7CisJCXUzMiB6ZXJvZXMzOworCQl1MzIgZGF0YVtOUl9NRUFTVVJFTUVOVF9DSEFSU107CisJfSAqc2NtY19hcmVhOworCisJc2NtY19hcmVhID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWlmICghc2NtY19hcmVhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNjbWNfYXJlYS0+cmVxdWVzdC5sZW5ndGggPSAweDAwMTA7CisJc2NtY19hcmVhLT5yZXF1ZXN0LmNvZGUgPSAweDAwMjI7CisKKwlzY21jX2FyZWEtPmZpcnN0X2NocGlkID0gY2hwLT5pZDsKKwlzY21jX2FyZWEtPmxhc3RfY2hwaWQgPSBjaHAtPmlkOworCisJY2NvZGUgPSBjaHNjKHNjbWNfYXJlYSk7CisJaWYgKGNjb2RlID4gMCkgeworCQlyZXQgPSAoY2NvZGUgPT0gMykgPyAtRU5PREVWIDogLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKHNjbWNfYXJlYS0+cmVzcG9uc2UuY29kZSkgeworCWNhc2UgMHgwMDAxOiAvKiBTdWNjZXNzLiAqLworCQlpZiAoIXNjbWNfYXJlYS0+bm90X3ZhbGlkKSB7CisJCQljaHAtPmNtZyA9IHNjbWNfYXJlYS0+Y21nOworCQkJY2hwLT5zaGFyZWQgPSBzY21jX2FyZWEtPnNoYXJlZDsKKwkJCWNoc2NfaW5pdGlhbGl6ZV9jbWdfY2hhcnMoY2hwLCBzY21jX2FyZWEtPmNtY3YsCisJCQkJCQkgIChzdHJ1Y3QgY21nX2NoYXJzICopCisJCQkJCQkgICZzY21jX2FyZWEtPmRhdGEpOworCQl9IGVsc2UgeworCQkJY2hwLT5jbWcgPSAtMTsKKwkJCWNocC0+c2hhcmVkID0gLTE7CisJCX0KKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAweDAwMDM6IC8qIEludmFsaWQgYmxvY2suICovCisJY2FzZSAweDAwMDc6IC8qIEludmFsaWQgZm9ybWF0LiAqLworCWNhc2UgMHgwMDA4OiAvKiBJbnZhbGlkIGJpdCBjb21iaW5hdGlvbi4gKi8KKwkJQ0lPX0NSV19FVkVOVCgyLCAiRXJyb3IgaW4gY2hzYyByZXF1ZXN0IGJsb2NrIVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgMHgwMDA0OiAvKiBDb21tYW5kIG5vdCBwcm92aWRlZC4gKi8KKwkJQ0lPX0NSV19FVkVOVCgyLCAiTW9kZWwgZG9lcyBub3QgcHJvdmlkZSBzY21jXG4iKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUNJT19DUldfRVZFTlQoMiwgIlVua25vd24gQ0hTQyByZXNwb25zZSAlZFxuIiwKKwkJCSAgICAgIHNjbWNfYXJlYS0+cmVzcG9uc2UuY29kZSk7CisJCXJldCA9IC1FSU87CisJfQorb3V0OgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzY21jX2FyZWEpOworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBFbnRyaWVzIGZvciBjaHBpZHMgb24gdGhlIHN5c3RlbSBidXMuCiAgKiBUaGlzIHJlcGxhY2VzIC9wcm9jL2NocGlkcy4KQEAgLTEwMTYsMTAgKzE0MDMsOSBAQAogCXN0cnVjdCBjaGFubmVsX3BhdGggKmNocDsKIAlpbnQgcmV0OwogCi0JY2hwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNoYW5uZWxfcGF0aCksIEdGUF9LRVJORUwpOworCWNocCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGFubmVsX3BhdGgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNocCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGNocCwgMCwgc2l6ZW9mKHN0cnVjdCBjaGFubmVsX3BhdGgpKTsKIAogCS8qIGZpbGwgaW4gc3RhdHVzLCBldGMuICovCiAJY2hwLT5pZCA9IGNocGlkOwpAQCAtMTAzNCw2ICsxNDIwLDIyIEBACiAJcmV0ID0gY2hzY19kZXRlcm1pbmVfY2hhbm5lbF9wYXRoX2Rlc2NyaXB0aW9uKGNocGlkLCAmY2hwLT5kZXNjKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlOworCS8qIEdldCBjaGFubmVsLW1lYXN1cmVtZW50IGNoYXJhY3RlcmlzdGljcy4gKi8KKwlpZiAoY3NzX2NoYXJhY3RlcmlzdGljc19hdmFpbCAmJiBjc3NfY2hzY19jaGFyYWN0ZXJpc3RpY3Muc2NtYworCSAgICAmJiBjc3NfY2hzY19jaGFyYWN0ZXJpc3RpY3Muc2VjbSkgeworCQlyZXQgPSBjaHNjX2dldF9jaGFubmVsX21lYXN1cmVtZW50X2NoYXJzKGNocCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9mcmVlOworCX0gZWxzZSB7CisJCXN0YXRpYyBpbnQgbXNnX2RvbmU7CisKKwkJaWYgKCFtc2dfZG9uZSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2lvOiBDaGFubmVsIG1lYXN1cmVtZW50cyBub3QgIgorCQkJICAgICAgICJhdmFpbGFibGUsIGNvbnRpbnVpbmcuXG4iKTsKKwkJCW1zZ19kb25lID0gMTsKKwkJfQorCQljaHAtPmNtZyA9IC0xOworCX0KIAogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmY2hwLT5kZXYpOwpAQCAtMTA0Niw4ICsxNDQ4LDE5IEBACiAJaWYgKHJldCkgewogCQlkZXZpY2VfdW5yZWdpc3RlcigmY2hwLT5kZXYpOwogCQlnb3RvIG91dF9mcmVlOwotCX0gZWxzZQotCQljc3NbMF0tPmNocHNbY2hwaWRdID0gY2hwOworCX0KKwltdXRleF9sb2NrKCZjc3NbMF0tPm11dGV4KTsKKwlpZiAoY3NzWzBdLT5jbV9lbmFibGVkKSB7CisJCXJldCA9IGNoc2NfYWRkX2NocF9jbWdfYXR0cihjaHApOworCQlpZiAocmV0KSB7CisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNocC0+ZGV2LmtvYmosICZjaHBfYXR0cl9ncm91cCk7CisJCQlkZXZpY2VfdW5yZWdpc3RlcigmY2hwLT5kZXYpOworCQkJbXV0ZXhfdW5sb2NrKCZjc3NbMF0tPm11dGV4KTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwl9CisJY3NzWzBdLT5jaHBzW2NocGlkXSA9IGNocDsKKwltdXRleF91bmxvY2soJmNzc1swXS0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiBvdXRfZnJlZToKIAlrZnJlZShjaHApOwpAQCAtMTEwMywxMCArMTUxNiw4IEBACiAJc2RhX2FyZWEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMfEdGUF9ETUEpOwogCWlmICghc2RhX2FyZWEpCiAJCXJldHVybiAtRU5PTUVNOwotCXNkYV9hcmVhLT5yZXF1ZXN0ID0gKHN0cnVjdCBjaHNjX2hlYWRlcikgewotCQkubGVuZ3RoID0gMHgwNDAwLAotCQkuY29kZSA9IDB4MDAzMSwKLQl9OworCXNkYV9hcmVhLT5yZXF1ZXN0Lmxlbmd0aCA9IDB4MDQwMDsKKwlzZGFfYXJlYS0+cmVxdWVzdC5jb2RlID0gMHgwMDMxOwogCXNkYV9hcmVhLT5vcGVyYXRpb25fY29kZSA9IG9wZXJhdGlvbl9jb2RlOwogCiAJcmV0ID0gY2hzYyhzZGFfYXJlYSk7CkBAIC0xMTE1LDYgKzE1MjYsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAJc3dpdGNoIChzZGFfYXJlYS0+cmVzcG9uc2UuY29kZSkgeworCWNhc2UgMHgwMDAxOiAvKiBldmVyeXRoaW5nIG9rICovCisJCXJldCA9IDA7CisJCWJyZWFrOwogCWNhc2UgMHgwMDAzOiAvKiBpbnZhbGlkIHJlcXVlc3QgYmxvY2sgKi8KIAljYXNlIDB4MDAwNzoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTExMjMsNiArMTUzNyw4IEBACiAJY2FzZSAweDAxMDE6IC8qIGZhY2lsaXR5IG5vdCBwcm92aWRlZCAqLwogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CisJZGVmYXVsdDogLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJcmV0ID0gLUVJTzsKIAl9CiAgb3V0OgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzZGFfYXJlYSk7CkBAIC0xMTU2LDEwICsxNTcyLDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2NzY19hcmVhLT5yZXF1ZXN0ID0gKHN0cnVjdCBjaHNjX2hlYWRlcikgewotCQkubGVuZ3RoID0gMHgwMDEwLAotCQkuY29kZSAgID0gMHgwMDEwLAotCX07CisJc2NzY19hcmVhLT5yZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDsKKwlzY3NjX2FyZWEtPnJlcXVlc3QuY29kZSA9IDB4MDAxMDsKIAogCXJlc3VsdCA9IGNoc2Moc2NzY19hcmVhKTsKIAlpZiAocmVzdWx0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuaCBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oCmluZGV4IDNlNzUwOTUuLmEyNTkyNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oCkBAIC0xMiw2ICsxMiwxNiBAQAogCXUxNiBjb2RlOwogfTsKIAorI2RlZmluZSBOUl9NRUFTVVJFTUVOVF9DSEFSUyA1CitzdHJ1Y3QgY21nX2NoYXJzIHsKKwl1MzIgdmFsdWVzW05SX01FQVNVUkVNRU5UX0NIQVJTXTsKK307CisKKyNkZWZpbmUgTlJfTUVBU1VSRU1FTlRfRU5UUklFUyA4CitzdHJ1Y3QgY21nX2VudHJ5IHsKKwl1MzIgdmFsdWVzW05SX01FQVNVUkVNRU5UX0VOVFJJRVNdOworfTsKKwogc3RydWN0IGNoYW5uZWxfcGF0aF9kZXNjIHsKIAl1OCBmbGFnczsKIAl1OCBsc247CkBAIC0yNyw2ICszNywxMCBAQAogCWludCBpZDsKIAlpbnQgc3RhdGU7CiAJc3RydWN0IGNoYW5uZWxfcGF0aF9kZXNjIGRlc2M7CisJLyogQ2hhbm5lbC1tZWFzdXJlbWVudCByZWxhdGVkIHN0dWZmOiAqLworCWludCBjbWc7CisJaW50IHNoYXJlZDsKKwl2b2lkICpjbWdfY2hhcnM7CiAJc3RydWN0IGRldmljZSBkZXY7CiB9OwogCkBAIC01Miw3ICs2NiwxMSBAQAogCiBzdHJ1Y3QgY3NzX2Noc2NfY2hhciB7CiAJdTY0IHJlczsKLQl1NjQgOiA0MzsKKwl1NjQgOiAyMDsKKwl1MzIgc2VjbSA6IDE7IC8qIGJpdCA4NCAqLworCXUzMiA6IDE7CisJdTMyIHNjbWMgOiAxOyAvKiBiaXQgODYgKi8KKwl1MzIgOiAyMDsKIAl1MzIgc2Nzc2MgOiAxOyAgLyogYml0IDEwNyAqLwogCXUzMiBzY3NzY2YgOiAxOyAvKiBiaXQgMTA4ICovCiAJdTMyIDogMTk7CkBAIC02Nyw2ICs4NSw4IEBACiBleHRlcm4gdm9pZCAqY2hzY19nZXRfY2hwX2Rlc2Moc3RydWN0IHN1YmNoYW5uZWwqLCBpbnQpOwogCiBleHRlcm4gaW50IGNoc2NfZW5hYmxlX2ZhY2lsaXR5KGludCk7CitzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW07CitleHRlcm4gaW50IGNoc2Nfc2VjbShzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0gKiwgaW50KTsKIAogI2RlZmluZSB0b19jaGFubmVscGF0aChkZXZpY2UpIGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBjaGFubmVsX3BhdGgsIGRldikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKaW5kZXggMWJiZjIzMS4uNzRlYThhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCkBAIC00MDksNiArNDA5LDkgQEAKIAkJLyogLUVOWElPOiBubyBtb3JlIHN1YmNoYW5uZWxzLiAqLwogCQljYXNlIC1FTlhJTzoKIAkJCXJldHVybiByZXQ7CisJCS8qIC1FSU86IHRoaXMgc3ViY2hhbm5lbCBzZXQgbm90IHN1cHBvcnRlZC4gKi8KKwkJY2FzZSAtRUlPOgorCQkJcmV0dXJuIHJldDsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAwOwogCQl9CkBAIC00NDksMTUgKzQ1Miw1MCBAQAogCXN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzOwogCiAJY3NzID0gdG9fY3NzKGRldik7CisJbXV0ZXhfZGVzdHJveSgmY3NzLT5tdXRleCk7CiAJa2ZyZWUoY3NzKTsKIH0KIAorc3RhdGljIHNzaXplX3QKK2Nzc19jbV9lbmFibGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGNoYW5uZWxfc3Vic3lzdGVtICpjc3MgPSB0b19jc3MoZGV2KTsKKworCWlmICghY3NzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgY3NzLT5jbV9lbmFibGVkKTsKK30KKworc3RhdGljIHNzaXplX3QKK2Nzc19jbV9lbmFibGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzID0gdG9fY3NzKGRldik7CisJaW50IHJldDsKKworCXN3aXRjaCAoYnVmWzBdKSB7CisJY2FzZSAnMCc6CisJCXJldCA9IGNzcy0+Y21fZW5hYmxlZCA/IGNoc2Nfc2VjbShjc3MsIDApIDogMDsKKwkJYnJlYWs7CisJY2FzZSAnMSc6CisJCXJldCA9IGNzcy0+Y21fZW5hYmxlZCA/IDAgOiBjaHNjX3NlY20oY3NzLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGNtX2VuYWJsZSwgMDY0NCwgY3NzX2NtX2VuYWJsZV9zaG93LCBjc3NfY21fZW5hYmxlX3N0b3JlKTsKKwogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdAogc2V0dXBfY3NzKGludCBucikKIHsKIAl1MzIgdG9kX2hpZ2g7CiAKIAltZW1zZXQoY3NzW25yXSwgMCwgc2l6ZW9mKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSkpOworCW11dGV4X2luaXQoJmNzc1tucl0tPm11dGV4KTsKIAljc3NbbnJdLT52YWxpZCA9IDE7CiAJY3NzW25yXS0+Y3NzaWQgPSBucjsKIAlzcHJpbnRmKGNzc1tucl0tPmRldmljZS5idXNfaWQsICJjc3MleCIsIG5yKTsKQEAgLTUwNCw2ICs1NDIsOSBAQAogCQlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmNzc1tpXS0+ZGV2aWNlKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2ZyZWU7CisJCWlmIChjc3NfY2hhcmFjdGVyaXN0aWNzX2F2YWlsICYmIGNzc19jaHNjX2NoYXJhY3RlcmlzdGljcy5zZWNtKQorCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjc3NbaV0tPmRldmljZSwKKwkJCQkJICAgJmRldl9hdHRyX2NtX2VuYWJsZSk7CiAJfQogCWNzc19pbml0X2RvbmUgPSAxOwogCkBAIC01MTYsNiArNTU3LDkgQEAKIG91dF91bnJlZ2lzdGVyOgogCXdoaWxlIChpID4gMCkgewogCQlpLS07CisJCWlmIChjc3NfY2hhcmFjdGVyaXN0aWNzX2F2YWlsICYmIGNzc19jaHNjX2NoYXJhY3RlcmlzdGljcy5zZWNtKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZjc3NbaV0tPmRldmljZSwKKwkJCQkJICAgJmRldl9hdHRyX2NtX2VuYWJsZSk7CiAJCWRldmljZV91bnJlZ2lzdGVyKCZjc3NbaV0tPmRldmljZSk7CiAJfQogb3V0X2J1czoKQEAgLTU4NiwxMCArNjMwLDkgQEAKIAlzdHJ1Y3Qgc2xvd19zdWJjaGFubmVsICpuZXdfc2xvd19zY2g7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW5ld19zbG93X3NjaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbG93X3N1YmNoYW5uZWwpLCBHRlBfQVRPTUlDKTsKKwluZXdfc2xvd19zY2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xvd19zdWJjaGFubmVsKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfc2xvd19zY2gpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChuZXdfc2xvd19zY2gsIDAsIHNpemVvZihzdHJ1Y3Qgc2xvd19zdWJjaGFubmVsKSk7CiAJbmV3X3Nsb3dfc2NoLT5zY2hpZCA9IHNjaGlkOwogCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3N1YmNoYW5uZWxfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJm5ld19zbG93X3NjaC0+c2xvd19saXN0LCAmc2xvd19zdWJjaGFubmVsc19oZWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmggYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCmluZGV4IGI2Mzc1ODYuLjc0YTI1N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0NTU19ICiAjZGVmaW5lIF9DU1NfSAogCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKQEAgLTE1MCw2ICsxNTEsMTEgQEAKIAlzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHBzW19fTUFYX0NIUElEICsgMV07CiAJc3RydWN0IGRldmljZSBkZXZpY2U7CiAJc3RydWN0IHBnaWQgZ2xvYmFsX3BnaWQ7CisJc3RydWN0IG11dGV4IG11dGV4OworCS8qIGNoYW5uZWwgbWVhc3VyZW1lbnQgcmVsYXRlZCAqLworCWludCBjbV9lbmFibGVkOworCXZvaWQgKmN1Yl9hZGRyMTsKKwl2b2lkICpjdWJfYWRkcjI7CiB9OwogI2RlZmluZSB0b19jc3MoZGV2KSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY2hhbm5lbF9zdWJzeXN0ZW0sIGRldmljZSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggYWZjNGU4OC4uOGUzMDUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC04MjYsMTcgKzgyNiwxNSBAQAogCQkJZ2V0X2RldmljZSgmY2Rldi0+ZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQotCWNkZXYgID0ga21hbGxvYyAoc2l6ZW9mKCpjZGV2KSwgR0ZQX0tFUk5FTCk7CisJY2RldiA9IGt6YWxsb2MgKHNpemVvZigqY2RldiksIEdGUF9LRVJORUwpOwogCWlmICghY2RldikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGNkZXYsIDAsIHNpemVvZihzdHJ1Y3QgY2N3X2RldmljZSkpOwotCWNkZXYtPnByaXZhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2N3X2RldmljZV9wcml2YXRlKSwgCisJY2Rldi0+cHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUpLAogCQkJCUdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIWNkZXYtPnByaXZhdGUpIHsKIAkJa2ZyZWUoY2Rldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoY2Rldi0+cHJpdmF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUpKTsKIAlhdG9taWNfc2V0KCZjZGV2LT5wcml2YXRlLT5vbm9mZiwgMCk7CiAJY2Rldi0+ZGV2ID0gKHN0cnVjdCBkZXZpY2UpIHsKIAkJLnBhcmVudCA9ICZzY2gtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggYjMwMjc3OS4uMTgwYjNiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTgyNyw2ICs4MjcsMTcgQEAKIAkJfQogCQlyZXR1cm47CiAJfQorCS8qCisJICogQ2hlY2sgaWYgYSBoYWx0IG9yIGNsZWFyIGhhcyBiZWVuIGlzc3VlZCBpbiB0aGUgbWVhbndoaWxlLiBJZiB5ZXMsCisJICogb25seSBkZWxpdmVyIHRoZSBoYWx0L2NsZWFyIGludGVycnVwdCB0byB0aGUgZGV2aWNlIGRyaXZlciBhcyBpZiBpdAorCSAqIGhhZCBraWxsZWQgdGhlIG9yaWdpbmFsIHJlcXVlc3QuCisJICovCisJaWYgKGlyYi0+c2Nzdy5mY3RsICYgKFNDU1dfRkNUTF9DTEVBUl9GVU5DIHwgU0NTV19GQ1RMX0hBTFRfRlVOQykpIHsKKwkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9zZW5zZSA9IDA7CisJCW1lbXNldCgmY2Rldi0+cHJpdmF0ZS0+aXJiLCAwLCBzaXplb2Yoc3RydWN0IGlyYikpOworCQljY3dfZGV2aWNlX2FjY3VtdWxhdGVfaXJiKGNkZXYsIGlyYik7CisJCWdvdG8gY2FsbF9oYW5kbGVyOworCX0KIAkvKiBBZGQgYmFzaWMgc2Vuc2UgaW5mbyB0byBpcmIuICovCiAJY2N3X2RldmljZV9hY2N1bXVsYXRlX2Jhc2ljX3NlbnNlKGNkZXYsIGlyYik7CiAJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvc2Vuc2UpIHsKQEAgLTgzNCw2ICs4NDUsNyBAQAogCQljY3dfZGV2aWNlX2RvX3NlbnNlKGNkZXYsIGlyYik7CiAJCXJldHVybjsKIAl9CitjYWxsX2hhbmRsZXI6CiAJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfT05MSU5FOwogCS8qIENhbGwgdGhlIGhhbmRsZXIuICovCiAJaWYgKGNjd19kZXZpY2VfY2FsbF9oYW5kbGVyKGNkZXYpICYmIGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvdmVyaWZ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwppbmRleCAzYTUwYjE5Li43OTVhYmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYwpAQCAtMzU5LDEwICszNTksOSBAQAogCUNJT19UUkFDRV9FVkVOVCAoNCwgInJkZGV2Y2giKTsKIAlDSU9fVFJBQ0VfRVZFTlQgKDQsIHNjaC0+ZGV2LmJ1c19pZCk7CiAKLQlyZGNfY2N3ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNjdzEpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJcmRjX2NjdyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjY3cxKSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghcmRjX2NjdykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KHJkY19jY3csIDAsIHNpemVvZihzdHJ1Y3QgY2N3MSkpOwogCXJkY19jY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9SREM7CiAJcmRjX2Njdy0+Y291bnQgPSBsZW5ndGg7CiAJcmRjX2Njdy0+ZmxhZ3MgPSBDQ1dfRkxBR19TTEk7CkBAIC00MjYsMTYgKzQyNSwxNCBAQAogCWlmICghY2l3IHx8IGNpdy0+Y21kID09IDApCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJjZF9jY3cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2N3MSksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlyY2RfY2N3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNjdzEpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFyY2RfY2N3KQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQocmNkX2NjdywgMCwgc2l6ZW9mKHN0cnVjdCBjY3cxKSk7Ci0JcmNkX2J1ZiA9IGttYWxsb2MoY2l3LT5jb3VudCwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCXJjZF9idWYgPSBremFsbG9jKGNpdy0+Y291bnQsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKICAJaWYgKCFyY2RfYnVmKSB7CiAJCWtmcmVlKHJjZF9jY3cpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0gCW1lbXNldCAocmNkX2J1ZiwgMCwgY2l3LT5jb3VudCk7CiAJcmNkX2Njdy0+Y21kX2NvZGUgPSBjaXctPmNtZDsKIAlyY2RfY2N3LT5jZGEgPSAoX191MzIpIF9fcGEgKHJjZF9idWYpOwogCXJjZF9jY3ctPmNvdW50ID0gY2l3LT5jb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKaW5kZXggNDVjZTAzMi4uODE0ZjkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMKQEAgLTE2NSw4ICsxNjUsMTMgQEAKIAlxX25vID0gcS0+cV9ubzsKIAlpZighcS0+aXNfaW5wdXRfcSkKIAkJcV9ubyArPSBpcnEtPm5vX2lucHV0X3FzOworYWdhaW46CiAJY2NxID0gZG9fZXFicyhpcnEtPnNjaF90b2tlbiwgc3RhdGUsIHFfbm8sIHN0YXJ0LCBjbnQpOwogCXJjID0gcWRpb19jaGVja19jY3EocSwgY2NxKTsKKwlpZiAocmMgPT0gMSkgeworCQlRRElPX0RCRl9URVhUNSgxLHRyYWNlLCJlcUFHQUlOIik7CisJCWdvdG8gYWdhaW47CisJfQogCWlmIChyYyA8IDApIHsKICAgICAgICAgICAgICAgICBRRElPX0RCRl9URVhUMigxLHRyYWNlLCJlcWJlcnIiKTsKICAgICAgICAgICAgICAgICBzcHJpbnRmKGRiZl90ZXh0LCIlMngsJTJ4LCVkLCVkIix0bXBfY250LCAqY250LCBjY3EsIHFfbm8pOwpAQCAtMTk1LDggKzIwMCwxMyBAQAogCXFfbm8gPSBxLT5xX25vOwogCWlmKCFxLT5pc19pbnB1dF9xKQogCQlxX25vICs9IGlycS0+bm9faW5wdXRfcXM7CithZ2FpbjoKIAljY3EgPSBkb19zcWJzKGlycS0+c2NoX3Rva2VuLCBzdGF0ZSwgcV9ubywgc3RhcnQsIGNudCk7CiAJcmMgPSBxZGlvX2NoZWNrX2NjcShxLCBjY3EpOworCWlmIChyYyA9PSAxKSB7CisJCVFESU9fREJGX1RFWFQ1KDEsdHJhY2UsInNxQUdBSU4iKTsKKwkJZ290byBhZ2FpbjsKKwl9CiAJaWYgKHJjIDwgMCkgewogICAgICAgICAgICAgICAgIFFESU9fREJGX1RFWFQzKDEsdHJhY2UsInNxYmVyciIpOwogICAgICAgICAgICAgICAgIHNwcmludGYoZGJmX3RleHQsIiUyeCwlMngsJWQsJWQiLHRtcF9jbnQsKmNudCxjY3EscV9ubyk7CkBAIC0xMTg3LDggKzExOTcsNyBAQAogCiAJaWYgKCFub191c2VkKQogCQlyZXR1cm4gMTsKLQotCWlmICghcS0+c2lnYV9zeW5jKQorCWlmICghcS0+c2lnYV9zeW5jICYmICFpcnEtPmlzX3FlYnNtKQogCQkvKiB3ZSdsbCBjaGVjayBmb3IgbW9yZSBwcmltZWQgYnVmZmVycyBpbiBxZXRoX3N0b3BfcG9sbGluZyAqLwogCQlyZXR1cm4gMDsKIAlpZiAoaXJxLT5pc19xZWJzbSkgewpAQCAtMTY3NywxNiArMTY4NiwxNCBAQAogCWludCByZXN1bHQ9LUVOT01FTTsKIAogCWZvciAoaT0wO2k8bm9faW5wdXRfcXM7aSsrKSB7Ci0JCXE9a21hbGxvYyhzaXplb2Yoc3RydWN0IHFkaW9fcSksR0ZQX0tFUk5FTCk7CisJCXEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWRpb19xKSwgR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKCFxKSB7CiAJCQlRRElPX1BSSU5UX0VSUigia21hbGxvYyBvZiBxIGZhaWxlZCFcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQltZW1zZXQocSwwLHNpemVvZihzdHJ1Y3QgcWRpb19xKSk7Ci0KLQkJcS0+c2xpYj1rbWFsbG9jKFBBR0VfU0laRSxHRlBfS0VSTkVMKTsKKwkJcS0+c2xpYiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFxLT5zbGliKSB7CiAJCQlRRElPX1BSSU5UX0VSUigia21hbGxvYyBvZiBzbGliIGZhaWxlZCFcbiIpOwogCQkJZ290byBvdXQ7CkBAIC0xNjk2LDE0ICsxNzAzLDEyIEBACiAJfQogCiAJZm9yIChpPTA7aTxub19vdXRwdXRfcXM7aSsrKSB7Ci0JCXE9a21hbGxvYyhzaXplb2Yoc3RydWN0IHFkaW9fcSksR0ZQX0tFUk5FTCk7CisJCXEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWRpb19xKSwgR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKCFxKSB7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCW1lbXNldChxLDAsc2l6ZW9mKHN0cnVjdCBxZGlvX3EpKTsKLQogCQlxLT5zbGliPWttYWxsb2MoUEFHRV9TSVpFLEdGUF9LRVJORUwpOwogCQlpZiAoIXEtPnNsaWIpIHsKIAkJCVFESU9fUFJJTlRfRVJSKCJrbWFsbG9jIG9mIHNsaWIgZmFpbGVkIVxuIik7CkBAIC0yOTc1LDcgKzI5ODAsNyBAQAogCXFkaW9fYWxsb2NhdGVfZG9fZGJmKGluaXRfZGF0YSk7CiAKIAkvKiBjcmVhdGUgaXJxICovCi0JaXJxX3B0cj1rbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWRpb19pcnEpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaXJxX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZGlvX2lycSksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAogCVFESU9fREJGX1RFWFQwKDAsc2V0dXAsImlycV9wdHI6Iik7CiAJUURJT19EQkZfSEVYMCgwLHNldHVwLCZpcnFfcHRyLHNpemVvZih2b2lkKikpOwpAQCAtMjk4NSw4ICsyOTkwLDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtc2V0KGlycV9wdHIsMCxzaXplb2Yoc3RydWN0IHFkaW9faXJxKSk7Ci0KIAlpbml0X01VVEVYKCZpcnFfcHRyLT5zZXR0aW5nX3VwX3NlbWEpOwogCiAJLyogUURSIG11c3QgYmUgaW4gRE1BIGFyZWEgc2luY2UgQ0NXIGRhdGEgYWRkcmVzcyBpcyBvbmx5IDMyIGJpdCAqLwpAQCAtMzY3NywxMCArMzY4MCwxMCBAQAogCiAJZm9yIChpPTE7aTxJTkRJQ0FUT1JTX1BFUl9DQUNIRUxJTkU7aSsrKQogCQlpbmRpY2F0b3JfdXNlZFtpXT0wOwotCWluZGljYXRvcnM9KF9fdTMyKilrbWFsbG9jKHNpemVvZihfX3UzMikqKElORElDQVRPUlNfUEVSX0NBQ0hFTElORSksCisJaW5kaWNhdG9ycyA9IGt6YWxsb2Moc2l6ZW9mKF9fdTMyKSooSU5ESUNBVE9SU19QRVJfQ0FDSEVMSU5FKSwKIAkJCQkgICBHRlBfS0VSTkVMKTsKLSAgICAgICAJaWYgKCFpbmRpY2F0b3JzKSByZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoaW5kaWNhdG9ycywwLHNpemVvZihfX3UzMikqKElORElDQVRPUlNfUEVSX0NBQ0hFTElORSkpOworICAgICAgIAlpZiAoIWluZGljYXRvcnMpCisJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MGhhcmR3YXJlLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MGhhcmR3YXJlLmMKaW5kZXggNDE0MTkxOS4uYmU2MDc5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBoYXJkd2FyZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwaGFyZHdhcmUuYwpAQCAtMjIxNCw3ICsyMjE0LDcgQEAKIAkJbG9uZ19sZW4gPSAxMjg7CiAJfQogCi0JdG1wX3NpemUgPSAoKG1vZF9sZW4gPD0gMTI4KSA/IFRZUEU1MF9DUkIxX0xFTiA6IFRZUEU1MF9DUkIyX0xFTikgKworCXRtcF9zaXplID0gKChsb25nX2xlbiA8PSA2NCkgPyBUWVBFNTBfQ1JCMV9MRU4gOiBUWVBFNTBfQ1JCMl9MRU4pICsKIAkJICAgIENBTExFUl9IRUFERVI7CiAKIAltZW1zZXQoejkwY01zZ19wLCAwLCB0bXBfc2l6ZSk7CkBAIC0yNDc5LDggKzI0NzksMTYgQEAKIAogCWlmIChyZXBseV9jb2RlKQogCQlzd2l0Y2ggKHJlcGx5X2NvZGUpIHsKKwkJY2FzZSBSRVA4Ml9FUlJPUl9NQUNISU5FX0ZBSUxVUkU6CisJCQlpZiAoZXJyaF9wLT50eXBlID09IFRZUEU4Ml9SU1BfQ09ERSkKKwkJCQlQUklOVEtXKCJNYWNoaW5lIGNoZWNrIGZhaWx1cmVcbiIpOworCQkJZWxzZQorCQkJCVBSSU5US1coIk1vZHVsZSBmYWlsdXJlXG4iKTsKKwkJCXJldHVybiBSRUNfSEFSRFdBUl9FUlI7CiAJCWNhc2UgUkVQODJfRVJST1JfT1BFUkFORF9JTlZBTElEOgorCQkJcmV0dXJuIFJFQ19PUEVSQU5EX0lOVjsKIAkJY2FzZSBSRVA4OF9FUlJPUl9NRVNTQUdFX01BTEZPUk1EOgorCQkJUFJJTlRLVygiTWVzc2FnZSBtYWxmb3JtZWRcbiIpOwogCQkJcmV0dXJuIFJFQ19PUEVSQU5EX0lOVjsKIAkJY2FzZSBSRVA4Ml9FUlJPUl9PUEVSQU5EX1NJWkU6CiAJCQlyZXR1cm4gUkVDX09QRVJBTkRfU0laRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKaW5kZXggN2Q2ZjE5MC4uOTgyYWNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogIGxpbnV4L2RyaXZlcnMvczM5MC9jcnlwdG8vejkwbWFpbi5jCiAgKgotICogIHo5MGNyeXB0IDEuMy4yCisgKiAgejkwY3J5cHQgMS4zLjMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpICAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbgogICogIEF1dGhvcihzKTogUm9iZXJ0IEJ1cnJvdWdocyAoYnVycm91Z2hAdXMuaWJtLmNvbSkKICAqICAgICAgICAgICAgIEVyaWMgUm9zc21hbiAoZWRyb3NzbWFAdXMuaWJtLmNvbSkKICAqCkBAIC03MDcsMTMgKzcwNywxMiBAQAogCWlmIChxdWllc2NlX3o5MGNyeXB0KQogCQlyZXR1cm4gLUVRVUlFU0NFOwogCi0JcHJpdmF0ZV9kYXRhX3AgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHJpdl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJcHJpdmF0ZV9kYXRhX3AgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJpdl9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2YXRlX2RhdGFfcCkgewogCQlQUklOVEsoIk1lbW9yeSBhbGxvY2F0ZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltZW1zZXQoKHZvaWQgKilwcml2YXRlX2RhdGFfcCwgMCwgc2l6ZW9mKHN0cnVjdCBwcml2X2RhdGEpKTsKIAlwcml2YXRlX2RhdGFfcC0+c3RhdHVzID0gU1RBVF9PUEVOOwogCXByaXZhdGVfZGF0YV9wLT5vcGVuZXJfcGlkID0gUElEKCk7CiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gcHJpdmF0ZV9kYXRhX3A7CkBAIC05OTEsNiArOTkwLDcgQEAKICAqIFBDSVhDQ19NQ0wyICAgNTEyLTIwNDggICAgIC0tLS0tIChhcHBseWluZyBhbnkgR0EgTElDIHdpbGwgbWFrZSBhbiBNQ0wzIGNhcmQpCiAgKiBQQ0lYQ0NfTUNMMyAgIC0tLS0tICAgICAgICAxMjgtMjA0OAogICogQ0VYMkMgICAgICAgICA1MTItMjA0OCAgICAgMTI4LTIwNDgKKyAqIENFWDJBICAgICAgICAgID8/LTIwNDggICAgIHNhbWUgKHRoZSBsb3dlciBsaW1pdCBpcyBsZXNzIHRoYW4gMTI4IGJpdC4uLikKICAqCiAgKiBleHRfYml0bGVucyAoZXh0ZW5kZWQgYml0bGVuZ3RocykgaXMgYSBnbG9iYWwsIHNpbmNlIHlvdSBzaG91bGQgbm90IGFwcGx5IGFuCiAgKiBNQ0wgdG8ganVzdCBvbmUgY2FyZCBpbiBhIG1hY2hpbmUuIFdlIGFzc3VtZSwgYXQgZmlyc3QsIHRoYXQgYWxsIGNhcmRzIGhhdmUKQEAgLTI3MzYsMTMgKzI3MzYsMTEgQEAKIAl6OTBjcnlwdC5tYXhfY291bnQgPSBaOTBDUllQVF9OVU1fREVWUzsKIAl6OTBjcnlwdC5jZHggPSAqY2R4X3A7CiAKLQloZHdhcmVfYmxrX3AgPSAoc3RydWN0IGhkd2FyZV9ibG9jayAqKQotCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGR3YXJlX2Jsb2NrKSwgR0ZQX0FUT01JQyk7CisJaGR3YXJlX2Jsa19wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhkd2FyZV9ibG9jayksIEdGUF9BVE9NSUMpOwogCWlmICghaGR3YXJlX2Jsa19wKSB7CiAJCVBERUJVRygia21hbGxvYyBmb3IgaGFyZHdhcmUgYmxvY2sgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIEVOT01FTTsKIAl9Ci0JbWVtc2V0KGhkd2FyZV9ibGtfcCwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBoZHdhcmVfYmxvY2spKTsKIAl6OTBjcnlwdC5oZHdhcmVfaW5mbyA9IGhkd2FyZV9ibGtfcDsKIAogCXJldHVybiAwOwpAQCAtMjk3NywxMiArMjk3NSwxMSBAQAogCQl0b3RhbF9zaXplID0gc2l6ZW9mKHN0cnVjdCBkZXZpY2UpICsKIAkJCSAgICAgejkwY3J5cHQucV9kZXB0aF9hcnJheVtpbmRleF0gKiBzaXplb2YoaW50KTsKIAotCQlkZXZfcHRyID0gKHN0cnVjdCBkZXZpY2UgKikga21hbGxvYyh0b3RhbF9zaXplLCBHRlBfQVRPTUlDKTsKKwkJZGV2X3B0ciA9IGt6YWxsb2ModG90YWxfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJCWlmICghZGV2X3B0cikgewogCQkJUFJJTlRLKCJrbWFsbG9jIGRldmljZSAlZCBmYWlsZWRcbiIsIGluZGV4KTsKIAkJCXJldHVybiBFTk9NRU07CiAJCX0KLQkJbWVtc2V0KGRldl9wdHIsIDAsIHRvdGFsX3NpemUpOwogCQlkZXZfcHRyLT5kZXZfcmVzcF9wID0ga21hbGxvYyhNQVhfUkVTUE9OU0VfU0laRSwgR0ZQX0FUT01JQyk7CiAJCWlmICghZGV2X3B0ci0+ZGV2X3Jlc3BfcCkgewogCQkJa2ZyZWUoZGV2X3B0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IGE4NjQzNmEuLjIzZDUzYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC0zMTAsNyArMzEwLDcgQEAKICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogdmFyaWFibGUgY2dkZXYgPVxuIik7CiAgICAgICAgIGR1bXBpdCgoY2hhciAqKWNnZGV2LCBzaXplb2Yoc3RydWN0IGNjd2dyb3VwX2RldmljZSkpOwogI2VuZGlmCi0JcHJpdnB0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGF3X3ByaXZiayksIEdGUF9LRVJORUwpOworCXByaXZwdHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2xhd19wcml2YmspLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdnB0ciA9PSBOVUxMKSB7CiAJCXByb2JlX2Vycm9yKGNnZGV2KTsKIAkJcHV0X2RldmljZSgmY2dkZXYtPmRldik7CkBAIC0zMTksNyArMzE5LDYgQEAKIAkJQ0xBV19EQkZfVEVYVF8oMixzZXR1cCwicHJvYmV4JWQiLC1FTk9NRU0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KHByaXZwdHIsMHgwMCxzaXplb2Yoc3RydWN0IGNsYXdfcHJpdmJrKSk7CiAJcHJpdnB0ci0+cF9tdGNfZW52ZWxvcGU9IGttYWxsb2MoIE1BWF9FTlZFTE9QRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlwcml2cHRyLT5wX2VudiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjbGF3X2VudiksIEdGUF9LRVJORUwpOwogICAgICAgICBpZiAoKHByaXZwdHItPnBfbXRjX2VudmVsb3BlPT1OVUxMKSB8fCAocHJpdnB0ci0+cF9lbnY9PU5VTEwpKSB7CkBAIC0xNDA0LDcgKzE0MDMsNyBAQAogCiAgICAgICAgIGlmICggcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfZmlyc3QgPT1OVUxMICkgewogI2lmZGVmIERFQlVHTVNHCi0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgcF9yZWFkX2FjdGl2ZV9mcmlzdCA9PSBOVUxMIFxuIiwKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczolcyBwX3JlYWRfYWN0aXZlX2ZpcnN0ID09IE5VTEwgXG4iLAogCQkJZGV2LT5uYW1lLF9fRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6JXMgUmVhZCBhY3RpdmUgZmlyc3QvbGFzdCBjaGFuZ2VkIFxuIiwKIAkJCWRldi0+bmFtZSxfX0ZVTkNUSU9OX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9mc20uYyBiL2RyaXZlcnMvczM5MC9uZXQvZnNtLmMKaW5kZXggNmNhZjVmYS4uNzE0NWUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2ZzbS5jCkBAIC0yMSwzOCArMjEsMzQgQEAKIAlmc21fZnVuY3Rpb25fdCAqbTsKIAlmc20gKmY7CiAKLQl0aGlzID0gKGZzbV9pbnN0YW5jZSAqKWttYWxsb2Moc2l6ZW9mKGZzbV9pbnN0YW5jZSksIG9yZGVyKTsKKwl0aGlzID0ga3phbGxvYyhzaXplb2YoZnNtX2luc3RhbmNlKSwgb3JkZXIpOwogCWlmICh0aGlzID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJImZzbSglcyk6IGluaXRfZnNtOiBDb3VsZG4ndCBhbGxvYyBpbnN0YW5jZVxuIiwgbmFtZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQodGhpcywgMCwgc2l6ZW9mKGZzbV9pbnN0YW5jZSkpOwogCXN0cmxjcHkodGhpcy0+bmFtZSwgbmFtZSwgc2l6ZW9mKHRoaXMtPm5hbWUpKTsKIAotCWYgPSAoZnNtICopa21hbGxvYyhzaXplb2YoZnNtKSwgb3JkZXIpOworCWYgPSBremFsbG9jKHNpemVvZihmc20pLCBvcmRlcik7CiAJaWYgKGYgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiZnNtKCVzKTogaW5pdF9mc206IENvdWxkbid0IGFsbG9jIGZzbVxuIiwgbmFtZSk7CiAJCWtmcmVlX2ZzbSh0aGlzKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChmLCAwLCBzaXplb2YoZnNtKSk7CiAJZi0+bnJfZXZlbnRzID0gbnJfZXZlbnRzOwogCWYtPm5yX3N0YXRlcyA9IG5yX3N0YXRlczsKIAlmLT5ldmVudF9uYW1lcyA9IGV2ZW50X25hbWVzOwogCWYtPnN0YXRlX25hbWVzID0gc3RhdGVfbmFtZXM7CiAJdGhpcy0+ZiA9IGY7CiAKLQltID0gKGZzbV9mdW5jdGlvbl90ICopa21hbGxvYygKLQkJCXNpemVvZihmc21fZnVuY3Rpb25fdCkgKiBucl9zdGF0ZXMgKiBucl9ldmVudHMsIG9yZGVyKTsKKwltID0ga2NhbGxvYyhucl9zdGF0ZXMqbnJfZXZlbnRzLCBzaXplb2YoZnNtX2Z1bmN0aW9uX3QpLCBvcmRlcik7CiAJaWYgKG0gPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiZnNtKCVzKTogaW5pdF9mc206IENvdWxkbid0IGFsbG9jIGp1bXB0YWJsZVxuIiwgbmFtZSk7CiAJCWtmcmVlX2ZzbSh0aGlzKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChtLCAwLCBzaXplb2YoZnNtX2Z1bmN0aW9uX3QpICogZi0+bnJfc3RhdGVzICogZi0+bnJfZXZlbnRzKTsKIAlmLT5qdW1wbWF0cml4ID0gbTsKIAogCWZvciAoaSA9IDA7IGkgPCB0bXBsX2xlbjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5jCmluZGV4IDc2MGU3N2UuLjYxOTBiZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvaXVjdi5jCkBAIC0zODYsNyArMzg2LDcgQEAKIAl9CiAKIAkvKiBOb3RlOiBHRlBfRE1BIHVzZWQgdXNlZCB0byBnZXQgbWVtb3J5IGJlbG93IDJHICovCi0JaXVjdl9leHRlcm5hbF9pbnRfYnVmZmVyID0ga21hbGxvYyhzaXplb2YoaXVjdl9HZW5lcmFsSW50ZXJydXB0KSwKKwlpdWN2X2V4dGVybmFsX2ludF9idWZmZXIgPSBremFsbG9jKHNpemVvZihpdWN2X0dlbmVyYWxJbnRlcnJ1cHQpLAogCQkJCQkgICBHRlBfS0VSTkVMfEdGUF9ETUEpOwogCWlmICghaXVjdl9leHRlcm5hbF9pbnRfYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTM5NiwxMCArMzk2LDkgQEAKIAkJYnVzX3VucmVnaXN0ZXIoJml1Y3ZfYnVzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldChpdWN2X2V4dGVybmFsX2ludF9idWZmZXIsIDAsIHNpemVvZihpdWN2X0dlbmVyYWxJbnRlcnJ1cHQpKTsKIAogCS8qIEluaXRpYWxpemUgcGFyYW1ldGVyIHBvb2wgKi8KLQlpdWN2X3BhcmFtX3Bvb2wgPSBrbWFsbG9jKHNpemVvZihpdWN2X3BhcmFtKSAqIFBBUkFNX1BPT0xfU0laRSwKKwlpdWN2X3BhcmFtX3Bvb2wgPSBremFsbG9jKHNpemVvZihpdWN2X3BhcmFtKSAqIFBBUkFNX1BPT0xfU0laRSwKIAkJCQkgIEdGUF9LRVJORUx8R0ZQX0RNQSk7CiAJaWYgKCFpdWN2X3BhcmFtX3Bvb2wpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBwYXJhbSBwb29sXG4iLApAQCAtNDEwLDcgKzQwOSw2IEBACiAJCWJ1c191bnJlZ2lzdGVyKCZpdWN2X2J1cyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoaXVjdl9wYXJhbV9wb29sLCAwLCBzaXplb2YoaXVjdl9wYXJhbSkgKiBQQVJBTV9QT09MX1NJWkUpOwogCiAJLyogSW5pdGlhbGl6ZSBpcnEgcXVldWUgKi8KIAlJTklUX0xJU1RfSEVBRCgmaXVjdl9pcnFfcXVldWUpOwpAQCAtNzkzLDE1ICs3OTEsMTQgQEAKIAkJfQogCiAJCW1heF9jb25uZWN0aW9ucyA9IGl1Y3ZfcXVlcnlfbWF4Y29ubigpOwotCQlpdWN2X3BhdGhpZF90YWJsZSA9IGttYWxsb2MobWF4X2Nvbm5lY3Rpb25zICogc2l6ZW9mKGhhbmRsZXIgKiksCi0JCQkJICAgICAgIEdGUF9BVE9NSUMpOworCQlpdWN2X3BhdGhpZF90YWJsZSA9IGtjYWxsb2MobWF4X2Nvbm5lY3Rpb25zLCBzaXplb2YoaGFuZGxlciAqKSwKKwkJCQkJR0ZQX0FUT01JQyk7CiAJCWlmIChpdWN2X3BhdGhpZF90YWJsZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaXVjdl9wYXRoaWRfdGFibGUgc3RvcmFnZSAiCiAJCQkgICAgICAgImFsbG9jYXRpb24gZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJa2ZyZWUobmV3X2hhbmRsZXIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KLQkJbWVtc2V0IChpdWN2X3BhdGhpZF90YWJsZSwgMCwgbWF4X2Nvbm5lY3Rpb25zICogc2l6ZW9mKGhhbmRsZXIgKikpOwogCX0KIAltZW1zZXQobmV3X2hhbmRsZXIsIDAsIHNpemVvZiAoaGFuZGxlcikpOwogCW1lbWNweShuZXdfaGFuZGxlci0+aWQudXNlcl9kYXRhLCBwZ21uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggOWNmODhkNy4uZWRjZjA1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC0xMTUsMTEgKzExNSwxMCBAQAogCUxDU19EQkZfVEVYVCgyLCBzZXR1cCwgImljaGFsbG9jIik7CiAJZm9yIChjbnQgPSAwOyBjbnQgPCBMQ1NfTlVNX0JVRkZTOyBjbnQrKykgewogCQkvKiBhbGxvYyBtZW1vcnkgZm8gaW9idWZmZXIgKi8KLQkJY2hhbm5lbC0+aW9iW2NudF0uZGF0YSA9ICh2b2lkICopCi0JCQlrbWFsbG9jKExDU19JT0JVRkZFUlNJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKKwkJY2hhbm5lbC0+aW9iW2NudF0uZGF0YSA9CisJCQlremFsbG9jKExDU19JT0JVRkZFUlNJWkUsIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKIAkJaWYgKGNoYW5uZWwtPmlvYltjbnRdLmRhdGEgPT0gTlVMTCkKIAkJCWJyZWFrOwotCQltZW1zZXQoY2hhbm5lbC0+aW9iW2NudF0uZGF0YSwgMCwgTENTX0lPQlVGRkVSU0laRSk7CiAJCWNoYW5uZWwtPmlvYltjbnRdLnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOwogCX0KIAlpZiAoY250IDwgTENTX05VTV9CVUZGUykgewpAQCAtMTgyLDEwICsxODEsOSBAQAogCiAJTENTX0RCRl9URVhUKDIsIHNldHVwLCAiYWxsb2NsY3MiKTsKIAotCWNhcmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGNzX2NhcmQpLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsY3NfY2FyZCksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoY2FyZCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoY2FyZCwgMCwgc2l6ZW9mKHN0cnVjdCBsY3NfY2FyZCkpOwogCWNhcmQtPmxhbl90eXBlID0gTENTX0ZSQU1FX1RZUEVfQVVUTzsKIAljYXJkLT5wa3Rfc2VxID0gMDsKIAljYXJkLT5sYW5jbWRfdGltZW91dCA9IExDU19MQU5DTURfVElNRU9VVF9ERUZBVUxUOwpAQCAtNzkzLDEwICs3OTEsOSBAQAogCiAJTENTX0RCRl9URVhUKDQsIHRyYWNlLCAiZ2V0cmVwbHkiKTsKIAotCXJlcGx5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxjc19yZXBseSksIEdGUF9BVE9NSUMpOworCXJlcGx5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxjc19yZXBseSksIEdGUF9BVE9NSUMpOwogCWlmICghcmVwbHkpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChyZXBseSwwLHNpemVvZihzdHJ1Y3QgbGNzX3JlcGx5KSk7CiAJYXRvbWljX3NldCgmcmVwbHktPnJlZmNudCwxKTsKIAlyZXBseS0+c2VxdWVuY2Vfbm8gPSBjbWQtPnNlcXVlbmNlX25vOwogCXJlcGx5LT5yZWNlaXZlZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCmluZGV4IDcxZDM4NTMuLjI2MGE5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCkBAIC0xNzI4LDE0ICsxNzI4LDEzIEBACiBuZXRpdWN2X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgbmV0aXVjdl9wcml2ICpwcml2ID0gbmRldi0+cHJpdjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGRldmljZSAqZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldmljZSksIEdGUF9LRVJORUwpOwogCWludCByZXQ7CiAKIAogCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CiAKIAlpZiAoZGV2KSB7Ci0JCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CiAJCXNucHJpbnRmKGRldi0+YnVzX2lkLCBCVVNfSURfU0laRSwgIm5ldCVzIiwgbmRldi0+bmFtZSk7CiAJCWRldi0+YnVzID0gJml1Y3ZfYnVzOwogCQlkZXYtPnBhcmVudCA9IGl1Y3Zfcm9vdDsKQEAgLTE3ODQsMTEgKzE3ODMsOSBAQAogewogCXN0cnVjdCBpdWN2X2Nvbm5lY3Rpb24gKipjbGlzdCA9ICZpdWN2X2Nvbm5lY3Rpb25zOwogCXN0cnVjdCBpdWN2X2Nvbm5lY3Rpb24gKmNvbm4gPQotCQkoc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqKQotCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXVjdl9jb25uZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpdWN2X2Nvbm5lY3Rpb24pLCBHRlBfS0VSTkVMKTsKIAogCWlmIChjb25uKSB7Ci0JCW1lbXNldChjb25uLCAwLCBzaXplb2Yoc3RydWN0IGl1Y3ZfY29ubmVjdGlvbikpOwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZjb25uLT5jb2xsZWN0X3F1ZXVlKTsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY29ubi0+Y29tbWl0X3F1ZXVlKTsKIAkJY29ubi0+bWF4X2J1ZmZzaXplID0gTkVUSVVDVl9CVUZTSVpFX0RFRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYwppbmRleCA4MmNiNGFmLi40NGUyMjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMKQEAgLTM4OSw5ICszODksOCBAQAogCXN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcDsKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwY3JkYSIpOwotCWVkZHAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEpLCBHRlBfQVRPTUlDKTsKKwllZGRwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9kYXRhKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGVkZHApewotCQltZW1zZXQoZWRkcCwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZGF0YSkpOwogCQllZGRwLT5uaGwgPSBuaGw7CiAJCWVkZHAtPnRobCA9IHRobDsKIAkJbWVtY3B5KCZlZGRwLT5xaCwgcWgsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKQEAgLTU0MiwxMiArNTQxLDExIEBACiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiY3JlZGRwY2ciKTsKIAkvKiBjcmVhdGUgdGhlIGNvbnRleHQgYW5kIGFsbG9jYXRlIHBhZ2VzICovCi0JY3R4ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0KSwgR0ZQX0FUT01JQyk7CisJY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGN0eCA9PSBOVUxMKXsKIAkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImNlZGRwY24xIik7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQoY3R4LCAwLCBzaXplb2Yoc3RydWN0IHFldGhfZWRkcF9jb250ZXh0KSk7CiAJY3R4LT50eXBlID0gUUVUSF9MQVJHRV9TRU5EX0VERFA7CiAJcWV0aF9lZGRwX2NhbGNfbnVtX3BhZ2VzKGN0eCwgc2tiLCBoZHJfbGVuKTsKIAlpZiAoY3R4LT5lbGVtZW50c19wZXJfc2tiID4gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpKXsKQEAgLTU1NSwxMyArNTUzLDEyIEBACiAJCWtmcmVlKGN0eCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQljdHgtPnBhZ2VzID0ga21hbGxvYyhjdHgtPm51bV9wYWdlcyAqIHNpemVvZih1OCAqKSwgR0ZQX0FUT01JQyk7CisJY3R4LT5wYWdlcyA9IGtjYWxsb2MoY3R4LT5udW1fcGFnZXMsIHNpemVvZih1OCAqKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGN0eC0+cGFnZXMgPT0gTlVMTCl7CiAJCVFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJjZWRkcGNuMiIpOwogCQlrZnJlZShjdHgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGN0eC0+cGFnZXMsIDAsIGN0eC0+bnVtX3BhZ2VzICogc2l6ZW9mKHU4ICopKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3R4LT5udW1fcGFnZXM7ICsraSl7CiAJCWFkZHIgPSAodTggKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7CiAJCWlmIChhZGRyID09IE5VTEwpewpAQCAtNTczLDE1ICs1NzAsMTMgQEAKIAkJbWVtc2V0KGFkZHIsIDAsIFBBR0VfU0laRSk7CiAJCWN0eC0+cGFnZXNbaV0gPSBhZGRyOwogCX0KLQljdHgtPmVsZW1lbnRzID0ga21hbGxvYyhjdHgtPm51bV9lbGVtZW50cyAqCisJY3R4LT5lbGVtZW50cyA9IGtjYWxsb2MoY3R4LT5udW1fZWxlbWVudHMsCiAJCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCksIEdGUF9BVE9NSUMpOwogCWlmIChjdHgtPmVsZW1lbnRzID09IE5VTEwpewogCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiY2VkZHBjbjQiKTsKIAkJcWV0aF9lZGRwX2ZyZWVfY29udGV4dChjdHgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGN0eC0+ZWxlbWVudHMsIDAsCi0JICAgICAgIGN0eC0+bnVtX2VsZW1lbnRzICogc2l6ZW9mKHN0cnVjdCBxZXRoX2VkZHBfZWxlbWVudCkpOwogCS8qIHJlc2V0IG51bV9lbGVtZW50czsgd2lsbCBiZSBpbmNyZW1lbnRlZCBhZ2FpbiBpbiBmaWxsX2J1ZmZlciB0bwogCSAqIHJlZmxlY3QgbnVtYmVyIG9mIGFjdHVhbGx5IHVzZWQgZWxlbWVudHMgKi8KIAljdHgtPm51bV9lbGVtZW50cyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwppbmRleCBkYmE3ZjdmLi5iM2M2ZTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKQEAgLTI5NywxMiArMjk3LDEwIEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKIAogCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJhbGxvY2NyZCIpOwotCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9jYXJkKSwKLQkJCQkJICAgIEdGUF9ETUF8R0ZQX0tFUk5FTCk7CisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2NhcmQpLCBHRlBfRE1BfEdGUF9LRVJORUwpOwogCWlmICghY2FyZCkKIAkJcmV0dXJuIE5VTEw7CiAJUUVUSF9EQkZfSEVYKHNldHVwLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOwotCW1lbXNldChjYXJkLCAwLCBzaXplb2Yoc3RydWN0IHFldGhfY2FyZCkpOwogCWlmIChxZXRoX3NldHVwX2NoYW5uZWwoJmNhcmQtPnJlYWQpKSB7CiAJCWtmcmVlKGNhcmQpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTEzNjQsNyArMTM2Miw3IEBACiBzdGF0aWMgdm9pZAogcWV0aF9jbGVhcl9jbWRfYnVmZmVycyhzdHJ1Y3QgcWV0aF9jaGFubmVsICpjaGFubmVsKQogewotCWludCBjbnQgPSAwOworCWludCBjbnQ7CiAKIAlmb3IgKGNudD0wOyBjbnQgPCBRRVRIX0NNRF9CVUZGRVJfTk87IGNudCsrKQogCQlxZXRoX3JlbGVhc2VfYnVmZmVyKGNoYW5uZWwsJmNoYW5uZWwtPmlvYltjbnRdKTsKQEAgLTE2MzIsOSArMTYzMCw4IEBACiB7CiAJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5OwogCi0JcmVwbHkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9yZXBseSksIEdGUF9BVE9NSUMpOworCXJlcGx5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfcmVwbHkpLCBHRlBfQVRPTUlDKTsKIAlpZiAocmVwbHkpewotCQltZW1zZXQocmVwbHksIDAsIHNpemVvZihzdHJ1Y3QgcWV0aF9yZXBseSkpOwogCQlhdG9taWNfc2V0KCZyZXBseS0+cmVmY250LCAxKTsKIAkJcmVwbHktPmNhcmQgPSBjYXJkOwogCX07CkBAIC0yODE0LDExICsyODExLDExIEBACiAJCVFFVEhfREJGX1RFWFRfKHRyYWNlLDEsIiVzIixDQVJEX0JVU19JRChjYXJkKSk7CiAJCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwogCWNhc2UgMzoKKwlkZWZhdWx0OgogCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAxLCAiU0lHQWNjMyIpOwogCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwxLCIlcyIsQ0FSRF9CVVNfSUQoY2FyZCkpOwogCQlyZXR1cm4gUUVUSF9TRU5EX0VSUk9SX0tJQ0tfSVQ7CiAJfQotCXJldHVybiBRRVRIX1NFTkRfRVJST1JfTElOS19GQUlMVVJFOwogfQogCiB2b2lkCkBAIC0zMzQ4LDEzICszMzQ1LDExIEBACiAKIAlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAicWRpb2VzdCIpOwogCi0JcWliX3BhcmFtX2ZpZWxkID0ga21hbGxvYyhRRElPX01BWF9CVUZGRVJTX1BFUl9RICogc2l6ZW9mKGNoYXIpLAorCXFpYl9wYXJhbV9maWVsZCA9IGt6YWxsb2MoUURJT19NQVhfQlVGRkVSU19QRVJfUSAqIHNpemVvZihjaGFyKSwKIAkJCSAgICAgIEdGUF9LRVJORUwpOwogIAlpZiAoIXFpYl9wYXJhbV9maWVsZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLSAJbWVtc2V0KHFpYl9wYXJhbV9maWVsZCwgMCwgUURJT19NQVhfQlVGRkVSU19QRVJfUSAqIHNpemVvZihjaGFyKSk7Ci0KIAlxZXRoX2NyZWF0ZV9xaWJfcGFyYW1fZmllbGQoY2FyZCwgcWliX3BhcmFtX2ZpZWxkKTsKIAlxZXRoX2NyZWF0ZV9xaWJfcGFyYW1fZmllbGRfYmxrdChjYXJkLCBxaWJfcGFyYW1fZmllbGQpOwogCkBAIC0zODY1LDYgKzM4NjAsNyBAQAogCSAgICAgICAgCWlmICgoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19OQykgfHwKIAkJCSAgICAoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19DKSkKIAkJCQlyZXR1cm4gUlROX01VTFRJQ0FTVDsKKwkJCWJyZWFrOwogCSAgICAgICAgLyogZXRoIG9yIHNvIG11bHRpY2FzdD8gKi8KICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgIAlpZiAoKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y0KSB8fApAQCAtNDQxOSw2ICs0NDE1LDcgQEAKIAlpbnQgZWxlbWVudHNfbmVlZGVkID0gMDsKIAllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwogCXN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqY3R4ID0gTlVMTDsKKwlpbnQgdHhfYnl0ZXMgPSBza2ItPmxlbjsKIAlpbnQgcmM7CiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAic2VuZHBrdCIpOwpAQCAtNDQ5OSw3ICs0NDk2LDcgQEAKIAkJCQkJICAgICAgZWxlbWVudHNfbmVlZGVkLCBjdHgpOwogCWlmICghcmMpewogCQljYXJkLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCWNhcmQtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQljYXJkLT5zdGF0cy50eF9ieXRlcyArPSB0eF9ieXRlczsKICNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCiAJCWlmIChza2Jfc2hpbmZvKHNrYiktPnRzb19zaXplICYmCiAJCSAgICEobGFyZ2Vfc2VuZCA9PSBRRVRIX0xBUkdFX1NFTkRfTk8pKSB7CkBAIC00NTg1LDM4ICs0NTgyLDExIEBACiAJY2FzZSBNSUlfTkNPTkZJRzogLyogbmV0d29yayBpbnRlcmZhY2UgY29uZmlnICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJjID0gMDsKIAkJYnJlYWs7CiAJfQogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQKLXFldGhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCBpbnQgdmFsdWUpCi17Ci0Jc3dpdGNoKHJlZ251bSl7Ci0JY2FzZSBNSUlfQk1DUjogLyogQmFzaWMgbW9kZSBjb250cm9sIHJlZ2lzdGVyICovCi0JY2FzZSBNSUlfQk1TUjogLyogQmFzaWMgbW9kZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLQljYXNlIE1JSV9QSFlTSUQxOiAvKiBQSFlTIElEIDEgKi8KLQljYXNlIE1JSV9QSFlTSUQyOiAvKiBQSFlTIElEIDIgKi8KLQljYXNlIE1JSV9BRFZFUlRJU0U6IC8qIEFkdmVydGlzZW1lbnQgY29udHJvbCByZWcgKi8KLQljYXNlIE1JSV9MUEE6IC8qIExpbmsgcGFydG5lciBhYmlsaXR5IHJlZyAqLwotCWNhc2UgTUlJX0VYUEFOU0lPTjogLyogRXhwYW5zaW9uIHJlZ2lzdGVyICovCi0JY2FzZSBNSUlfRENPVU5URVI6IC8qIGRpc2Nvbm5lY3QgY291bnRlciAqLwotCWNhc2UgTUlJX0ZDU0NPVU5URVI6IC8qIGZhbHNlIGNhcnJpZXIgY291bnRlciAqLwotCWNhc2UgTUlJX05XQVlURVNUOiAvKiBOLXdheSBhdXRvLW5lZyB0ZXN0IHJlZ2lzdGVyICovCi0JY2FzZSBNSUlfUkVSUkNPVU5URVI6IC8qIHJ4IGVycm9yIGNvdW50ZXIgKi8KLQljYXNlIE1JSV9TUkVWSVNJT046IC8qIHNpbGljb24gcmV2aXNpb24gKi8KLQljYXNlIE1JSV9SRVNWMTogLyogcmVzZXJ2ZWQgMSAqLwotCWNhc2UgTUlJX0xCUkVSUk9SOiAvKiBsb29wYmFjaywgcngsIGJ5cGFzcyBlcnJvciAqLwotCWNhc2UgTUlJX1BIWUFERFI6IC8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQljYXNlIE1JSV9SRVNWMjogLyogcmVzZXJ2ZWQgMiAqLwotCWNhc2UgTUlJX1RQSVNUQVRVUzogLyogVFBJIHN0YXR1cyBmb3IgMTBtYnBzICovCi0JY2FzZSBNSUlfTkNPTkZJRzogLyogbmV0d29yayBpbnRlcmZhY2UgY29uZmlnICovCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQogCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgogcWV0aF9hcnBfZ2V0X2Vycm9yX2NhdXNlKGludCAqcmMpCkBAIC00ODQ0LDkgKzQ4MTQsOCBAQAogCS8qIGdldCBzaXplIG9mIHVzZXJzcGFjZSBidWZmZXIgYW5kIG1hc2tfYml0cyAtPiA2IGJ5dGVzICovCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZxaW5mbywgdWRhdGEsIDYpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIShxaW5mby51ZGF0YSA9IGttYWxsb2MocWluZm8udWRhdGFfbGVuLCBHRlBfS0VSTkVMKSkpCisJaWYgKCEocWluZm8udWRhdGEgPSBremFsbG9jKHFpbmZvLnVkYXRhX2xlbiwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQocWluZm8udWRhdGEsIDAsIHFpbmZvLnVkYXRhX2xlbik7CiAJcWluZm8udWRhdGFfb2Zmc2V0ID0gUUVUSF9RQVJQX0VOVFJJRVNfT0ZGU0VUOwogCWlvYiA9IHFldGhfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBJUEFfQVJQX1BST0NFU1NJTkcsCiAJCQkJICAgICAgIElQQV9DTURfQVNTX0FSUF9RVUVSWV9JTkZPLApAQCAtNDk5NCwxMSArNDk2MywxMCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJcWluZm8udWRhdGFfbGVuID0gdXJlcS0+aGRyLmRhdGFfbGVuOwotCWlmICghKHFpbmZvLnVkYXRhID0ga21hbGxvYyhxaW5mby51ZGF0YV9sZW4sIEdGUF9LRVJORUwpKSl7CisJaWYgKCEocWluZm8udWRhdGEgPSBremFsbG9jKHFpbmZvLnVkYXRhX2xlbiwgR0ZQX0tFUk5FTCkpKXsKIAkJa2ZyZWUodXJlcSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQocWluZm8udWRhdGEsIDAsIHFpbmZvLnVkYXRhX2xlbik7CiAJcWluZm8udWRhdGFfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBxZXRoX3NubXBfdXJlcV9oZHIpOwogCiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfU05NUF9DT05UUk9MLApAQCAtNTIzNiwyMSArNTIwNCw2IEBACiAJCQltaWlfZGF0YS0+dmFsX291dCA9IHFldGhfbWRpb19yZWFkKGRldixtaWlfZGF0YS0+cGh5X2lkLAogCQkJCQkJCSAgIG1paV9kYXRhLT5yZWdfbnVtKTsKIAkJYnJlYWs7Ci0JY2FzZSBTSU9DU01JSVJFRzoKLQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JCS8qIFRPRE86IHJlbW92ZSByZXR1cm4gaWYgcWV0aF9tZGlvX3dyaXRlIGRvZXMgc29tZXRoaW5nICovCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSl7Ci0JCQlyYyA9IC1FUEVSTTsKLQkJCWJyZWFrOwotCQl9Ci0JCW1paV9kYXRhID0gaWZfbWlpKHJxKTsKLQkJaWYgKG1paV9kYXRhLT5waHlfaWQgIT0gMCkKLQkJCXJjID0gLUVJTlZBTDsKLQkJZWxzZQotCQkJcWV0aF9tZGlvX3dyaXRlKGRldiwgbWlpX2RhdGEtPnBoeV9pZCwgbWlpX2RhdGEtPnJlZ19udW0sCi0JCQkJCW1paV9kYXRhLT52YWxfaW4pOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KQEAgLTU2MDQsMTIgKzU1NTcsMTEgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHI7CiAKLQlhZGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfaXBhZGRyKSwgR0ZQX0FUT01JQyk7CisJYWRkciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWRkciksIEdGUF9BVE9NSUMpOwogCWlmIChhZGRyID09IE5VTEwpIHsKIAkJUFJJTlRfV0FSTigiTm90IGVub3VnaCBtZW1vcnkgdG8gYWRkIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KGFkZHIsMCxzaXplb2Yoc3RydWN0IHFldGhfaXBhZGRyKSk7CiAJYWRkci0+dHlwZSA9IFFFVEhfSVBfVFlQRV9OT1JNQUw7CiAJYWRkci0+cHJvdG8gPSBwcm90OwogCXJldHVybiBhZGRyOwpAQCAtNjkwMCw3ICs2ODUyLDcgQEAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJaWYgKGxlbiA8PSBzaXplb2YoX191MzIpKQogCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5mbGFnc18zMmJpdCA9IChfX3UzMikgZGF0YTsKLQllbHNlIGlmIChsZW4gPiBzaXplb2YoX191MzIpKQorCWVsc2UgICAvKiAobGVuID4gc2l6ZW9mKF9fdTMyKSkgKi8KIAkJbWVtY3B5KCZjbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YSwgKHZvaWQgKikgZGF0YSwgbGVuKTsKIAogCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCByZXBseV9jYiwgcmVwbHlfcGFyYW0pOwpAQCAtNzM3OSwxMSArNzMzMSw2IEBACiAJcWV0aF9jb3JyZWN0X3JvdXRpbmdfdHlwZShjYXJkLCAmY2FyZC0+b3B0aW9ucy5yb3V0ZTYudHlwZSwKIAkJCQkgIFFFVEhfUFJPVF9JUFY2KTsKIAotCWlmICgoY2FyZC0+b3B0aW9ucy5yb3V0ZTYudHlwZSA9PSBOT19ST1VURVIpIHx8Ci0JICAgICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TQUUpICYmCi0JICAgICAoY2FyZC0+b3B0aW9ucy5yb3V0ZTYudHlwZSA9PSBNVUxUSUNBU1RfUk9VVEVSKSAmJgotCSAgICAgIXFldGhfaXNfc3VwcG9ydGVkNihjYXJkLElQQV9PU0FfTUNfUk9VVEVSKSkpCi0JCXJldHVybiAwOwogCXJjID0gcWV0aF9zZW5kX3NldHJvdXRpbmcoY2FyZCwgY2FyZC0+b3B0aW9ucy5yb3V0ZTYudHlwZSwKIAkJCQkgIFFFVEhfUFJPVF9JUFY2KTsKIAlpZiAocmMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfcHJvYy5jCmluZGV4IDNjNjMzOWQuLjM2MGQ3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9wcm9jLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Byb2MuYwpAQCAtNzQsNyArNzQsNyBAQAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKIHFldGhfZ2V0X3JvdXRlcl9zdHIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgaW50IGlwdikKIHsKLQlpbnQgcm91dGluZ190eXBlID0gMDsKKwllbnVtIHFldGhfcm91dGluZ190eXBlcyByb3V0aW5nX3R5cGUgPSBOT19ST1VURVI7CiAKIAlpZiAoaXB2ID09IDQpIHsKIAkJcm91dGluZ190eXBlID0gY2FyZC0+b3B0aW9ucy5yb3V0ZTQudHlwZTsKQEAgLTg2LDI2ICs4NiwyNiBAQAogI2VuZGlmIC8qIENPTkZJR19RRVRIX0lQVjYgKi8KIAl9CiAKLQlpZiAocm91dGluZ190eXBlID09IFBSSU1BUllfUk9VVEVSKQorCXN3aXRjaCAocm91dGluZ190eXBlKXsKKwljYXNlIFBSSU1BUllfUk9VVEVSOgogCQlyZXR1cm4gInByaSI7Ci0JZWxzZSBpZiAocm91dGluZ190eXBlID09IFNFQ09OREFSWV9ST1VURVIpCisJY2FzZSBTRUNPTkRBUllfUk9VVEVSOgogCQlyZXR1cm4gInNlYyI7Ci0JZWxzZSBpZiAocm91dGluZ190eXBlID09IE1VTFRJQ0FTVF9ST1VURVIpIHsKKwljYXNlIE1VTFRJQ0FTVF9ST1VURVI6CiAJCWlmIChjYXJkLT5pbmZvLmJyb2FkY2FzdF9jYXBhYmxlID09IFFFVEhfQlJPQURDQVNUX1dJVEhPVVRfRUNITykKIAkJCXJldHVybiAibWMrIjsKIAkJcmV0dXJuICJtYyI7Ci0JfSBlbHNlIGlmIChyb3V0aW5nX3R5cGUgPT0gUFJJTUFSWV9DT05ORUNUT1IpIHsKKwljYXNlIFBSSU1BUllfQ09OTkVDVE9SOgogCQlpZiAoY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9PSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE8pCiAJCQlyZXR1cm4gInArYyI7CiAJCXJldHVybiAicC5jIjsKLQl9IGVsc2UgaWYgKHJvdXRpbmdfdHlwZSA9PSBTRUNPTkRBUllfQ09OTkVDVE9SKSB7CisJY2FzZSBTRUNPTkRBUllfQ09OTkVDVE9SOgogCQlpZiAoY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9PSBRRVRIX0JST0FEQ0FTVF9XSVRIT1VUX0VDSE8pCiAJCQlyZXR1cm4gInMrYyI7CiAJCXJldHVybiAicy5jIjsKLQl9IGVsc2UgaWYgKHJvdXRpbmdfdHlwZSA9PSBOT19ST1VURVIpCisJZGVmYXVsdDogICAvKiBOT19ST1VURVIgKi8KIAkJcmV0dXJuICJubyI7Ci0JZWxzZQotCQlyZXR1cm4gInVuayI7CisJfQogfQogCiBzdGF0aWMgaW50CkBAIC0xOTIsMjcgKzE5MiwyNyBAQAogCQkJQ0FSRF9EREVWX0lEKGNhcmQpLAogCQkJUUVUSF9DQVJEX0lGTkFNRShjYXJkKQogCQkgICk7Ci0Jc2VxX3ByaW50ZihzLCAiICBTa2Incy9idWZmZXJzIHJlY2VpdmVkICAgICAgICAgICAgICAgICA6ICVsaS8laVxuIgotCQkgICAgICAiICBTa2Incy9idWZmZXJzIHNlbnQgICAgICAgICAgICAgICAgICAgICA6ICVsaS8laVxuXG4iLAorCXNlcV9wcmludGYocywgIiAgU2tiJ3MvYnVmZmVycyByZWNlaXZlZCAgICAgICAgICAgICAgICAgOiAlbHUvJXVcbiIKKwkJICAgICAgIiAgU2tiJ3MvYnVmZmVycyBzZW50ICAgICAgICAgICAgICAgICAgICAgOiAlbHUvJXVcblxuIiwKIAkJICAgICAgICBjYXJkLT5zdGF0cy5yeF9wYWNrZXRzLCBjYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfcmVjLAogCQkgICAgICAgIGNhcmQtPnN0YXRzLnR4X3BhY2tldHMsIGNhcmQtPnBlcmZfc3RhdHMuYnVmc19zZW50CiAJCSAgKTsKLQlzZXFfcHJpbnRmKHMsICIgIFNrYidzL2J1ZmZlcnMgc2VudCB3aXRob3V0IHBhY2tpbmcgICAgIDogJWxpLyVpXG4iCi0JCSAgICAgICIgIFNrYidzL2J1ZmZlcnMgc2VudCB3aXRoIHBhY2tpbmcgICAgICAgIDogJWkvJWlcblxuIiwKKwlzZXFfcHJpbnRmKHMsICIgIFNrYidzL2J1ZmZlcnMgc2VudCB3aXRob3V0IHBhY2tpbmcgICAgIDogJWx1LyV1XG4iCisJCSAgICAgICIgIFNrYidzL2J1ZmZlcnMgc2VudCB3aXRoIHBhY2tpbmcgICAgICAgIDogJXUvJXVcblxuIiwKIAkJICAgY2FyZC0+c3RhdHMudHhfcGFja2V0cyAtIGNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2ssCiAJCSAgIGNhcmQtPnBlcmZfc3RhdHMuYnVmc19zZW50IC0gY2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnRfcGFjaywKIAkJICAgY2FyZC0+cGVyZl9zdGF0cy5za2JzX3NlbnRfcGFjaywKIAkJICAgY2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnRfcGFjawogCQkgICk7Ci0Jc2VxX3ByaW50ZihzLCAiICBTa2JzIHNlbnQgaW4gU0cgbW9kZSAgICAgICAgICAgICAgICAgICA6ICVpXG4iCi0JCSAgICAgICIgIFNrYiBmcmFnbWVudHMgc2VudCBpbiBTRyBtb2RlICAgICAgICAgIDogJWlcblxuIiwKKwlzZXFfcHJpbnRmKHMsICIgIFNrYnMgc2VudCBpbiBTRyBtb2RlICAgICAgICAgICAgICAgICAgIDogJXVcbiIKKwkJICAgICAgIiAgU2tiIGZyYWdtZW50cyBzZW50IGluIFNHIG1vZGUgICAgICAgICAgOiAldVxuXG4iLAogCQkgICAgICBjYXJkLT5wZXJmX3N0YXRzLnNnX3NrYnNfc2VudCwKIAkJICAgICAgY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50KTsKLQlzZXFfcHJpbnRmKHMsICIgIGxhcmdlX3NlbmQgdHggKGluIEtieXRlcykgICAgICAgICAgICAgIDogJWlcbiIKLQkJICAgICAgIiAgbGFyZ2Vfc2VuZCBjb3VudCAgICAgICAgICAgICAgICAgICAgICAgOiAlaVxuXG4iLAorCXNlcV9wcmludGYocywgIiAgbGFyZ2Vfc2VuZCB0eCAoaW4gS2J5dGVzKSAgICAgICAgICAgICAgOiAldVxuIgorCQkgICAgICAiICBsYXJnZV9zZW5kIGNvdW50ICAgICAgICAgICAgICAgICAgICAgICA6ICV1XG5cbiIsCiAJCSAgICAgIGNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9ieXRlcyA+PiAxMCwKIAkJICAgICAgY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCk7Ci0Jc2VxX3ByaW50ZihzLCAiICBQYWNraW5nIHN0YXRlIGNoYW5nZXMgbm8gcGtnLi0+cGFja2luZyA6ICVpLyVpXG4iCisJc2VxX3ByaW50ZihzLCAiICBQYWNraW5nIHN0YXRlIGNoYW5nZXMgbm8gcGtnLi0+cGFja2luZyA6ICV1LyV1XG4iCiAJCSAgICAgICIgIFdhdGVybWFya3MgTC9IICAgICAgICAgICAgICAgICAgICAgICAgIDogJWkvJWlcbiIKIAkJICAgICAgIiAgQ3VycmVudCBidWZmZXIgdXNhZ2UgKG91dGJvdW5kIHEncykgICAgOiAiCiAJCSAgICAgICIlaS8laS8laS8laVxuXG4iLApAQCAtMjI5LDE2ICsyMjksMTYgQEAKIAkJCQlhdG9taWNfcmVhZCgmY2FyZC0+cWRpby5vdXRfcXNbM10tPnVzZWRfYnVmZmVycykKIAkJCQk6IDAKIAkJICApOwotCXNlcV9wcmludGYocywgIiAgSW5ib3VuZCBoYW5kbGVyIHRpbWUgKGluIHVzKSAgICAgICAgICAgOiAlaVxuIgotCQkgICAgICAiICBJbmJvdW5kIGhhbmRsZXIgY291bnQgICAgICAgICAgICAgICAgICA6ICVpXG4iCi0JCSAgICAgICIgIEluYm91bmQgZG9fUURJTyB0aW1lIChpbiB1cykgICAgICAgICAgIDogJWlcbiIKLQkJICAgICAgIiAgSW5ib3VuZCBkb19RRElPIGNvdW50ICAgICAgICAgICAgICAgICAgOiAlaVxuXG4iCi0JCSAgICAgICIgIE91dGJvdW5kIGhhbmRsZXIgdGltZSAoaW4gdXMpICAgICAgICAgIDogJWlcbiIKLQkJICAgICAgIiAgT3V0Ym91bmQgaGFuZGxlciBjb3VudCAgICAgICAgICAgICAgICAgOiAlaVxuXG4iCi0JCSAgICAgICIgIE91dGJvdW5kIHRpbWUgKGluIHVzLCBpbmNsIFFESU8pICAgICAgIDogJWlcbiIKLQkJICAgICAgIiAgT3V0Ym91bmQgY291bnQgICAgICAgICAgICAgICAgICAgICAgICAgOiAlaVxuIgotCQkgICAgICAiICBPdXRib3VuZCBkb19RRElPIHRpbWUgKGluIHVzKSAgICAgICAgICA6ICVpXG4iCi0JCSAgICAgICIgIE91dGJvdW5kIGRvX1FESU8gY291bnQgICAgICAgICAgICAgICAgIDogJWlcblxuIiwKKwlzZXFfcHJpbnRmKHMsICIgIEluYm91bmQgaGFuZGxlciB0aW1lIChpbiB1cykgICAgICAgICAgIDogJXVcbiIKKwkJICAgICAgIiAgSW5ib3VuZCBoYW5kbGVyIGNvdW50ICAgICAgICAgICAgICAgICAgOiAldVxuIgorCQkgICAgICAiICBJbmJvdW5kIGRvX1FESU8gdGltZSAoaW4gdXMpICAgICAgICAgICA6ICV1XG4iCisJCSAgICAgICIgIEluYm91bmQgZG9fUURJTyBjb3VudCAgICAgICAgICAgICAgICAgIDogJXVcblxuIgorCQkgICAgICAiICBPdXRib3VuZCBoYW5kbGVyIHRpbWUgKGluIHVzKSAgICAgICAgICA6ICV1XG4iCisJCSAgICAgICIgIE91dGJvdW5kIGhhbmRsZXIgY291bnQgICAgICAgICAgICAgICAgIDogJXVcblxuIgorCQkgICAgICAiICBPdXRib3VuZCB0aW1lIChpbiB1cywgaW5jbCBRRElPKSAgICAgICA6ICV1XG4iCisJCSAgICAgICIgIE91dGJvdW5kIGNvdW50ICAgICAgICAgICAgICAgICAgICAgICAgIDogJXVcbiIKKwkJICAgICAgIiAgT3V0Ym91bmQgZG9fUURJTyB0aW1lIChpbiB1cykgICAgICAgICAgOiAldVxuIgorCQkgICAgICAiICBPdXRib3VuZCBkb19RRElPIGNvdW50ICAgICAgICAgICAgICAgICA6ICV1XG5cbiIsCiAJCSAgICAgICAgY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX3RpbWUsCiAJCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfY250LAogCQkgICAgICAgIGNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9kb19xZGlvX3RpbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKaW5kZXggYzE4MzFmNS4uODgyZDQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAlwb3J0bm8gPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKLQlpZiAoKHBvcnRubyA8IDApIHx8IChwb3J0bm8gPiBNQVhfUE9SVE5PKSl7CisJaWYgKHBvcnRubyA+IE1BWF9QT1JUTk8pewogCQlQUklOVF9XQVJOKCJwb3J0bm8gMHglWCBpcyBvdXQgb2YgcmFuZ2VcbiIsIHBvcnRubyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTExNDUsMTEgKzExNDUsMTAgQEAKIAlpZiAoKHJjID0gcWV0aF9wYXJzZV9pcGF0b2UoYnVmLCBwcm90bywgYWRkciwgJm1hc2tfYml0cykpKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAoIShpcGF0b2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9pcGF0b19lbnRyeSksIEdGUF9LRVJORUwpKSl7CisJaWYgKCEoaXBhdG9lID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfaXBhdG9fZW50cnkpLCBHRlBfS0VSTkVMKSkpewogCQlQUklOVF9XQVJOKCJObyBtZW1vcnkgdG8gYWxsb2NhdGUgaXBhdG8gZW50cnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGlwYXRvZSwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYXRvX2VudHJ5KSk7CiAJaXBhdG9lLT5wcm90byA9IHByb3RvOwogCW1lbWNweShpcGF0b2UtPmFkZHIsIGFkZHIsIChwcm90byA9PSBRRVRIX1BST1RfSVBWNCk/IDQ6MTYpOwogCWlwYXRvZS0+bWFza19iaXRzID0gbWFza19iaXRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IGQ2NDY5YmEuLjcyMTE4ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCQlkcml2ZXJfdW5yZWdpc3Rlcigmc21zZ19kcml2ZXIpOwogCQlyZXR1cm4gLUVJTzsJLyogYmV0dGVyIGVycm5vID8gKi8KIAl9Ci0JcmMgPSBpdWN2X2Nvbm5lY3QgKCZzbXNnX3BhdGhpZCwgMSwgMCwgIipNU0cgICAgIiwgMCwgMCwgMCwgMCwKKwlyYyA9IGl1Y3ZfY29ubmVjdCAoJnNtc2dfcGF0aGlkLCAyNTUsIDAsICIqTVNHICAgICIsIDAsIDAsIDAsIDAsCiAJCQkgICBzbXNnX2hhbmRsZSwgMCk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU01TR0lVQ1Y6IGZhaWxlZCB0byBjb25uZWN0IHRvICpNU0ciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zMzkwX3JkZXYuYyBiL2RyaXZlcnMvczM5MC9zMzkwX3JkZXYuYwppbmRleCBlM2Y2NDcxLi4zYzcxNDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvczM5MF9yZGV2LmMKKysrIGIvZHJpdmVycy9zMzkwL3MzOTBfcmRldi5jCkBAIC0yNywxMCArMjcsOSBAQAogCiAJaWYgKCFzdHJsZW4obmFtZSkpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCW1lbXNldChkZXYsIDAsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CiAJc3RybmNweShkZXYtPmJ1c19pZCwgbmFtZSwgbWluKHN0cmxlbihuYW1lKSwgKHNpemVfdClCVVNfSURfU0laRSkpOwogCWRldi0+cmVsZWFzZSA9IHMzOTBfcm9vdF9kZXZfcmVsZWFzZTsKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCmluZGV4IDdmNTUxZDYuLjZlYmE1NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaApAQCAtNjY0LDYgKzY2NCw3IEBACiAjZGVmaW5lIFpGQ1BfU1RBVFVTX1VOSVRfVEVNUE9SQVJZCQkweDAwMDAwMDAyCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX1VOSVRfU0hBUkVECQkJMHgwMDAwMDAwNAogI2RlZmluZSBaRkNQX1NUQVRVU19VTklUX1JFQURPTkxZCQkweDAwMDAwMDA4CisjZGVmaW5lIFpGQ1BfU1RBVFVTX1VOSVRfUkVHSVNURVJFRAkJMHgwMDAwMDAxMAogCiAvKiBGU0YgcmVxdWVzdCBzdGF0dXMgKHRoaXMgZG9lcyBub3QgaGF2ZSBhIGNvbW1vbiBwYXJ0KSAqLwogI2RlZmluZSBaRkNQX1NUQVRVU19GU0ZSRVFfTk9UX0lOSVQJCTB4MDAwMDAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCmluZGV4IGUzYzRiZGQuLjU3Y2I2MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwpAQCAtMzM5MSwxMCArMzM5MSwxMyBAQAogCQkgICAgJiYgKCFhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfVEVNUE9SQVJZLAogCQkJCQkgICZ1bml0LT5zdGF0dXMpKQogCQkgICAgJiYgIXVuaXQtPmRldmljZQotCQkgICAgJiYgcG9ydC0+cnBvcnQpCi0gCQkJc2NzaV9hZGRfZGV2aWNlKHBvcnQtPmFkYXB0ZXItPnNjc2lfaG9zdCwgMCwKLSAJCQkJCXBvcnQtPnJwb3J0LT5zY3NpX3RhcmdldF9pZCwKLQkJCQkJdW5pdC0+c2NzaV9sdW4pOworCQkgICAgJiYgcG9ydC0+cnBvcnQpIHsKKwkJCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19VTklUX1JFR0lTVEVSRUQsCisJCQkJCSZ1bml0LT5zdGF0dXMpOworIAkJCXNjc2lfc2Nhbl90YXJnZXQoJnBvcnQtPnJwb3J0LT5kZXYsIDAsCisJCQkJCSBwb3J0LT5ycG9ydC0+c2NzaV90YXJnZXRfaWQsCisJCQkJCSB1bml0LT5zY3NpX2x1biwgMCk7CisJCX0KIAkJemZjcF91bml0X3B1dCh1bml0KTsKIAkJYnJlYWs7CiAJY2FzZSBaRkNQX0VSUF9BQ1RJT05fUkVPUEVOX1BPUlRfRk9SQ0VEOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCA5ZjZiNGQ3Li45ZTZkMDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtNjgsNyArNjgsNyBAQAogCSAgICAgIGVoX2hvc3RfcmVzZXRfaGFuZGxlcjogICB6ZmNwX3Njc2lfZWhfaG9zdF9yZXNldF9oYW5kbGVyLAogCQkJICAgICAgICAgICAgICAgLyogRklYTUUob3BlbmZjcCk6IFR1bmUgKi8KIAkgICAgICBjYW5fcXVldWU6ICAgICAgICAgICAgICAgNDA5NiwKLQkgICAgICB0aGlzX2lkOgkgICAgICAgICAgICAgICAwLAorCSAgICAgIHRoaXNfaWQ6CSAgICAgICAgICAgICAgIC0xLAogCSAgICAgIC8qCiAJICAgICAgICogRklYTUU6CiAJICAgICAgICogb25lIGxlc3M/IGNhbiB6ZmNwX2NyZWF0ZV9zYmFsZSBjb3BlIHdpdGggaXQ/CkBAIC0xODMsNyArMTgzLDggQEAKIAogCXJlYWRfbG9ja19pcnFzYXZlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIAl1bml0ID0gemZjcF91bml0X2xvb2t1cChhZGFwdGVyLCBzZHAtPmNoYW5uZWwsIHNkcC0+aWQsIHNkcC0+bHVuKTsKLQlpZiAodW5pdCkgeworCWlmICh1bml0ICYmIGF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfVU5JVF9SRUdJU1RFUkVELAorCQkJCSAgICAgJnVuaXQtPnN0YXR1cykpIHsKIAkJc2RwLT5ob3N0ZGF0YSA9IHVuaXQ7CiAJCXVuaXQtPmRldmljZSA9IHNkcDsKIAkJemZjcF91bml0X2dldCh1bml0KTsKQEAgLTIwOCw2ICsyMDksNyBAQAogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCAqKSBzZHBudC0+aG9zdGRhdGE7CiAKIAlpZiAodW5pdCkgeworCQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19VTklUX1JFR0lTVEVSRUQsICZ1bml0LT5zdGF0dXMpOwogCQlzZHBudC0+aG9zdGRhdGEgPSBOVUxMOwogCQl1bml0LT5kZXZpY2UgPSBOVUxMOwogCQl6ZmNwX3VuaXRfcHV0KHVuaXQpOwpAQCAtMjkxLDcgKzI5Myw3IEBACiAJCQkgICAgICAgIm9uIHBvcnQgMHglMDE2THggaW4gcmVjb3ZlcnlcbiIsCiAJCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfdW5pdCh1bml0KSwKIAkJCSAgICAgICB1bml0LT5mY3BfbHVuLCB1bml0LT5wb3J0LT53d3BuKTsKLQkJcmV0dmFsID0gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOworCQl6ZmNwX3Njc2lfY29tbWFuZF9mYWlsKHNjcG50LCBESURfTk9fQ09OTkVDVCk7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2kyYy5jIGIvZHJpdmVycy9zYnVzL2NoYXIvYmJjX2kyYy5jCmluZGV4IDFjOGI2MTIuLjNlMTU2ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL2JiY19pMmMuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9iYmNfaTJjLmMKQEAgLTQ0MCw3ICs0NDAsOCBAQAogCXN0cnVjdCBsaW51eF9lYnVzX2RldmljZSAqZWRldiA9IE5VTEw7CiAJaW50IGVyciwgaW5kZXggPSAwOwogCi0JaWYgKHRsYl90eXBlICE9IGNoZWV0YWggfHwgIWJiY19wcmVzZW50KCkpCisJaWYgKCh0bGJfdHlwZSAhPSBjaGVldGFoICYmIHRsYl90eXBlICE9IGNoZWV0YWhfcGx1cykgfHwKKwkgICAgIWJiY19wcmVzZW50KCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJZm9yX2VhY2hfZWJ1cyhlYnVzKSB7CkBAIC00ODYsMyArNDg3LDQgQEAKIAogbW9kdWxlX2luaXQoYmJjX2kyY19pbml0KTsKIG1vZHVsZV9leGl0KGJiY19pMmNfY2xlYW51cCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9mbGFzaC5jIGIvZHJpdmVycy9zYnVzL2NoYXIvZmxhc2guYwppbmRleCA2YmRkNzY4Li4yYmViM2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9mbGFzaC5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2ZsYXNoLmMKQEAgLTcxLDkgKzcxLDggQEAKIAlpZiAodm1hLT52bV9lbmQgLSAodm1hLT52bV9zdGFydCArICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpKSA+IHNpemUpCiAJCXNpemUgPSB2bWEtPnZtX2VuZCAtICh2bWEtPnZtX3N0YXJ0ICsgKHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCkpOwogCi0JcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJj0gfihfUEFHRV9DQUNIRSk7Ci0JcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfRTsKIAl2bWEtPnZtX2ZsYWdzIHw9IChWTV9TSE0gfCBWTV9MT0NLRUQpOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CiAKIAlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgYWRkciwgc2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpKQogCQlyZXR1cm4gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMgYi9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCmluZGV4IGQ5MTUyZDAuLjBhYjI2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKKysrIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwpAQCAtMiw4ICsyLDkgQEAKICAgIDN3LTl4eHguYyAtLSAzd2FyZSA5MDAwIFN0b3JhZ2UgQ29udHJvbGxlciBkZXZpY2UgZHJpdmVyIGZvciBMaW51eC4KIAogICAgV3JpdHRlbiBCeTogQWRhbSBSYWRmb3JkIDxsaW51eHJhaWRAYW1jYy5jb20+CisgICBNb2RpZmljYXRpb25zIEJ5OiBUb20gQ291Y2ggPGxpbnV4cmFpZEBhbWNjLmNvbT4KIAotICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjIsNiArNjMsOCBAQAogICAgMi4yNi4wMi4wMDMgLSBDb3JyZWN0bHkgaGFuZGxlIHNpbmdsZSBzZ2wncyB3aXRoIHVzZV9zZz0xLgogICAgMi4yNi4wMi4wMDQgLSBBZGQgc3VwcG9ydCBmb3IgOTU1MFNYIGNvbnRyb2xsZXJzLgogICAgMi4yNi4wMi4wMDUgLSBGaXggdXNlX3NnID09IDAgbWFwcGluZyBvbiBzeXN0ZW1zIHdpdGggNEdCIG9yIGhpZ2hlci4KKyAgIDIuMjYuMDIuMDA2IC0gRml4IDk1NTBTWCBwY2hpcCByZXNldCB0aW1lb3V0LgorICAgICAgICAgICAgICAgICBBZGQgYmlnIGVuZGlhbiBzdXBwb3J0LgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtODUsNyArODgsNyBAQAogI2luY2x1ZGUgIjN3LTl4eHguaCIKIAogLyogR2xvYmFscyAqLwotI2RlZmluZSBUV19EUklWRVJfVkVSU0lPTiAiMi4yNi4wMi4wMDUiCisjZGVmaW5lIFRXX0RSSVZFUl9WRVJTSU9OICIyLjI2LjAyLjAwNiIKIHN0YXRpYyBUV19EZXZpY2VfRXh0ZW5zaW9uICp0d2FfZGV2aWNlX2V4dGVuc2lvbl9saXN0W1RXX01BWF9TTE9UXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHdhX2RldmljZV9leHRlbnNpb25fY291bnQ7CiBzdGF0aWMgaW50IHR3YV9tYWpvciA9IC0xOwpAQCAtMjA4LDcgKzIxMSw3IEBACiAKIAloZWFkZXIgPSAoVFdfQ29tbWFuZF9BcGFjaGVfSGVhZGVyICopdHdfZGV2LT5nZW5lcmljX2J1ZmZlcl92aXJ0W3JlcXVlc3RfaWRdOwogCXR3X2Rldi0+cG9zdGVkX3JlcXVlc3RfY291bnQtLTsKLQlhZW4gPSBoZWFkZXItPnN0YXR1c19ibG9jay5lcnJvcjsKKwlhZW4gPSBsZTE2X3RvX2NwdShoZWFkZXItPnN0YXR1c19ibG9jay5lcnJvcik7CiAJZnVsbF9jb21tYW5kX3BhY2tldCA9IHR3X2Rldi0+Y29tbWFuZF9wYWNrZXRfdmlydFtyZXF1ZXN0X2lkXTsKIAljb21tYW5kX3BhY2tldCA9ICZmdWxsX2NvbW1hbmRfcGFja2V0LT5jb21tYW5kLm9sZGNvbW1hbmQ7CiAKQEAgLTMwNSw3ICszMDgsNyBAQAogCiAJCXR3X2Rldi0+cG9zdGVkX3JlcXVlc3RfY291bnQtLTsKIAkJaGVhZGVyID0gKFRXX0NvbW1hbmRfQXBhY2hlX0hlYWRlciAqKXR3X2Rldi0+Z2VuZXJpY19idWZmZXJfdmlydFtyZXF1ZXN0X2lkXTsKLQkJYWVuID0gaGVhZGVyLT5zdGF0dXNfYmxvY2suZXJyb3I7CisJCWFlbiA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c3RhdHVzX2Jsb2NrLmVycm9yKTsKIAkJcXVldWUgPSAwOwogCQljb3VudCsrOwogCkBAIC0zNjUsNyArMzY4LDcgQEAKIAkJCXR3X2Rldi0+YWVuX2Nsb2JiZXIgPSAxOwogCX0KIAotCWFlbiA9IGhlYWRlci0+c3RhdHVzX2Jsb2NrLmVycm9yOworCWFlbiA9IGxlMTZfdG9fY3B1KGhlYWRlci0+c3RhdHVzX2Jsb2NrLmVycm9yKTsKIAltZW1zZXQoZXZlbnQsIDAsIHNpemVvZihUV19FdmVudCkpOwogCiAJZXZlbnQtPnNldmVyaXR5ID0gVFdfU0VWX09VVChoZWFkZXItPnN0YXR1c19ibG9jay5zZXZlcml0eV9fcmVzZXJ2ZWQpOwpAQCAtMzgyLDcgKzM4NSw3IEBACiAKIAloZWFkZXItPmVycl9zcGVjaWZpY19kZXNjW3NpemVvZihoZWFkZXItPmVycl9zcGVjaWZpY19kZXNjKSAtIDFdID0gJ1wwJzsKIAlldmVudC0+cGFyYW1ldGVyX2xlbiA9IHN0cmxlbihoZWFkZXItPmVycl9zcGVjaWZpY19kZXNjKTsKLQltZW1jcHkoZXZlbnQtPnBhcmFtZXRlcl9kYXRhLCBoZWFkZXItPmVycl9zcGVjaWZpY19kZXNjLCBldmVudC0+cGFyYW1ldGVyX2xlbik7CisJbWVtY3B5KGV2ZW50LT5wYXJhbWV0ZXJfZGF0YSwgaGVhZGVyLT5lcnJfc3BlY2lmaWNfZGVzYywgZXZlbnQtPnBhcmFtZXRlcl9sZW4gKyAoZXJyb3Jfc3RyWzBdID09ICdcMCcgPyAwIDogKDEgKyBzdHJsZW4oZXJyb3Jfc3RyKSkpKTsKIAlpZiAoZXZlbnQtPnNldmVyaXR5ICE9IFRXX0FFTl9TRVZFUklUWV9ERUJVRykKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiM3ctOXh4eDolcyBBRU46ICVzICgweCUwMlg6MHglMDRYKTogJXM6JXMuXG4iLAogCQkgICAgICAgaG9zdCwKQEAgLTQ2MiwyNCArNDY1LDI0IEBACiAJY29tbWFuZF9wYWNrZXQgPSAmZnVsbF9jb21tYW5kX3BhY2tldC0+Y29tbWFuZC5vbGRjb21tYW5kOwogCWNvbW1hbmRfcGFja2V0LT5vcGNvZGVfX3NnbG9mZnNldCA9IFRXX09QU0dMX0lOKDIsIFRXX09QX1NFVF9QQVJBTSk7CiAJY29tbWFuZF9wYWNrZXQtPnJlcXVlc3RfaWQgPSByZXF1ZXN0X2lkOwotCWNvbW1hbmRfcGFja2V0LT5ieXRlOF9vZmZzZXQucGFyYW0uc2dsWzBdLmFkZHJlc3MgPSB0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3BoeXNbcmVxdWVzdF9pZF07Ci0JY29tbWFuZF9wYWNrZXQtPmJ5dGU4X29mZnNldC5wYXJhbS5zZ2xbMF0ubGVuZ3RoID0gVFdfU0VDVE9SX1NJWkU7CisJY29tbWFuZF9wYWNrZXQtPmJ5dGU4X29mZnNldC5wYXJhbS5zZ2xbMF0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0wodHdfZGV2LT5nZW5lcmljX2J1ZmZlcl9waHlzW3JlcXVlc3RfaWRdKTsKKwljb21tYW5kX3BhY2tldC0+Ynl0ZThfb2Zmc2V0LnBhcmFtLnNnbFswXS5sZW5ndGggPSBjcHVfdG9fbGUzMihUV19TRUNUT1JfU0laRSk7CiAJY29tbWFuZF9wYWNrZXQtPnNpemUgPSBUV19DT01NQU5EX1NJWkU7Ci0JY29tbWFuZF9wYWNrZXQtPmJ5dGU2X29mZnNldC5wYXJhbWV0ZXJfY291bnQgPSAxOworCWNvbW1hbmRfcGFja2V0LT5ieXRlNl9vZmZzZXQucGFyYW1ldGVyX2NvdW50ID0gY3B1X3RvX2xlMTYoMSk7CiAKIAkvKiBTZXR1cCB0aGUgcGFyYW0gKi8KIAlwYXJhbSA9IChUV19QYXJhbV9BcGFjaGUgKil0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3ZpcnRbcmVxdWVzdF9pZF07CiAJbWVtc2V0KHBhcmFtLCAwLCBUV19TRUNUT1JfU0laRSk7Ci0JcGFyYW0tPnRhYmxlX2lkID0gVFdfVElNRUtFRVBfVEFCTEUgfCAweDgwMDA7IC8qIENvbnRyb2xsZXIgdGltZSBrZWVwIHRhYmxlICovCi0JcGFyYW0tPnBhcmFtZXRlcl9pZCA9IDB4MzsgLyogU2NoZWR1bGVyVGltZSAqLwotCXBhcmFtLT5wYXJhbWV0ZXJfc2l6ZV9ieXRlcyA9IDQ7CisJcGFyYW0tPnRhYmxlX2lkID0gY3B1X3RvX2xlMTYoVFdfVElNRUtFRVBfVEFCTEUgfCAweDgwMDApOyAvKiBDb250cm9sbGVyIHRpbWUga2VlcCB0YWJsZSAqLworCXBhcmFtLT5wYXJhbWV0ZXJfaWQgPSBjcHVfdG9fbGUxNigweDMpOyAvKiBTY2hlZHVsZXJUaW1lICovCisJcGFyYW0tPnBhcmFtZXRlcl9zaXplX2J5dGVzID0gY3B1X3RvX2xlMTYoNCk7CiAKIAkvKiBDb252ZXJ0IHN5c3RlbSB0aW1lIGluIFVUQyB0byBsb2NhbCB0aW1lIHNlY29uZHMgc2luY2UgbGFzdCAKICAgICAgICAgICAgU3VuZGF5IDEyOjAwQU0gKi8KIAlkb19nZXR0aW1lb2ZkYXkoJnV0Yyk7CiAJbG9jYWxfdGltZSA9ICh1MzIpKHV0Yy50dl9zZWMgLSAoc3lzX3R6LnR6X21pbnV0ZXN3ZXN0ICogNjApKTsKIAlzY2hlZHVsZXJ0aW1lID0gbG9jYWxfdGltZSAtICgzICogODY0MDApOwotCXNjaGVkdWxlcnRpbWUgPSBzY2hlZHVsZXJ0aW1lICUgNjA0ODAwOworCXNjaGVkdWxlcnRpbWUgPSBjcHVfdG9fbGUzMihzY2hlZHVsZXJ0aW1lICUgNjA0ODAwKTsKIAogCW1lbWNweShwYXJhbS0+ZGF0YSwgJnNjaGVkdWxlcnRpbWUsIHNpemVvZih1MzIpKTsKIApAQCAtOTMxLDI2ICs5MzQsMTkgQEAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciB0aGUgcGNoaXAvcmVzcG9uc2UgcXVldWUgb24gOTU1MFNYICovCiBzdGF0aWMgaW50IHR3YV9lbXB0eV9yZXNwb25zZV9xdWV1ZV9sYXJnZShUV19EZXZpY2VfRXh0ZW5zaW9uICp0d19kZXYpCiB7Ci0JdTMyIHN0YXR1c19yZWdfdmFsdWUsIHJlc3BvbnNlX3F1ZV92YWx1ZTsKLQlpbnQgY291bnQgPSAwLCByZXR2YWwgPSAxOworCXUzMiByZXNwb25zZV9xdWVfdmFsdWUgPSAwOworCXVuc2lnbmVkIGxvbmcgYmVmb3JlOworCWludCByZXR2YWwgPSAxOwogCiAJaWYgKHR3X2Rldi0+dHdfcGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfM1dBUkVfOTU1MFNYKSB7Ci0JCXN0YXR1c19yZWdfdmFsdWUgPSByZWFkbChUV19TVEFUVVNfUkVHX0FERFIodHdfZGV2KSk7Ci0KLQkJd2hpbGUgKCgoc3RhdHVzX3JlZ192YWx1ZSAmIFRXX1NUQVRVU19SRVNQT05TRV9RVUVVRV9FTVBUWSkgPT0gMCkgJiYgKGNvdW50IDwgVFdfTUFYX1JFU1BPTlNFX0RSQUlOKSkgeworCQliZWZvcmUgPSBqaWZmaWVzOworCQl3aGlsZSAoKHJlc3BvbnNlX3F1ZV92YWx1ZSAmIFRXXzk1NTBTWF9EUkFJTl9DT01QTEVURUQpICE9IFRXXzk1NTBTWF9EUkFJTl9DT01QTEVURUQpIHsKIAkJCXJlc3BvbnNlX3F1ZV92YWx1ZSA9IHJlYWRsKFRXX1JFU1BPTlNFX1FVRVVFX1JFR19BRERSX0xBUkdFKHR3X2RldikpOwotCQkJaWYgKChyZXNwb25zZV9xdWVfdmFsdWUgJiBUV185NTUwU1hfRFJBSU5fQ09NUExFVEVEKSA9PSBUV185NTUwU1hfRFJBSU5fQ09NUExFVEVEKSB7Ci0JCQkJLyogUC1jaGlwIHNldHRsZSB0aW1lICovCi0JCQkJbXNsZWVwKDUwMCk7Ci0JCQkJcmV0dmFsID0gMDsKKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGJlZm9yZSArIEhaICogMzApKQogCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJc3RhdHVzX3JlZ192YWx1ZSA9IHJlYWRsKFRXX1NUQVRVU19SRUdfQUREUih0d19kZXYpKTsKLQkJCWNvdW50Kys7CiAJCX0KLQkJaWYgKGNvdW50ID09IFRXX01BWF9SRVNQT05TRV9EUkFJTikKLQkJCWdvdG8gb3V0OwotCQkKKwkJLyogUC1jaGlwIHNldHRsZSB0aW1lICovCisJCW1zbGVlcCg1MDApOwogCQlyZXR2YWwgPSAwOwogCX0gZWxzZQogCQlyZXR2YWwgPSAwOwpAQCAtOTcyLDcgKzk2OCw3IEBACiAJZXJyb3Jfc3RyID0gJihmdWxsX2NvbW1hbmRfcGFja2V0LT5oZWFkZXIuZXJyX3NwZWNpZmljX2Rlc2Nbc3RybGVuKGZ1bGxfY29tbWFuZF9wYWNrZXQtPmhlYWRlci5lcnJfc3BlY2lmaWNfZGVzYykgKyAxXSk7CiAKIAkvKiBEb24ndCBwcmludCBlcnJvciBmb3IgTG9naWNhbCB1bml0IG5vdCBzdXBwb3J0ZWQgZHVyaW5nIHJvbGxjYWxsICovCi0JZXJyb3IgPSBmdWxsX2NvbW1hbmRfcGFja2V0LT5oZWFkZXIuc3RhdHVzX2Jsb2NrLmVycm9yOworCWVycm9yID0gbGUxNl90b19jcHUoZnVsbF9jb21tYW5kX3BhY2tldC0+aGVhZGVyLnN0YXR1c19ibG9jay5lcnJvcik7CiAJaWYgKChlcnJvciAhPSBUV19FUlJPUl9MT0dJQ0FMX1VOSVRfTk9UX1NVUFBPUlRFRCkgJiYgKGVycm9yICE9IFRXX0VSUk9SX1VOSVRfT0ZGTElORSkpIHsKIAkJaWYgKHByaW50X2hvc3QpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIzdy05eHh4OiBzY3NpJWQ6IEVSUk9SOiAoMHglMDJYOjB4JTA0WCk6ICVzOiVzLlxuIiwKQEAgLTEwNDcsMTggKzEwNDMsMTggQEAKIAljb21tYW5kX3BhY2tldC0+b3Bjb2RlX19zZ2xvZmZzZXQgPSBUV19PUFNHTF9JTigyLCBUV19PUF9HRVRfUEFSQU0pOwogCWNvbW1hbmRfcGFja2V0LT5zaXplICAgICAgICAgICAgICA9IFRXX0NPTU1BTkRfU0laRTsKIAljb21tYW5kX3BhY2tldC0+cmVxdWVzdF9pZCAgICAgICAgPSByZXF1ZXN0X2lkOwotCWNvbW1hbmRfcGFja2V0LT5ieXRlNl9vZmZzZXQuYmxvY2tfY291bnQgPSAxOworCWNvbW1hbmRfcGFja2V0LT5ieXRlNl9vZmZzZXQuYmxvY2tfY291bnQgPSBjcHVfdG9fbGUxNigxKTsKIAogCS8qIE5vdyBzZXR1cCB0aGUgcGFyYW0gKi8KIAlwYXJhbSA9IChUV19QYXJhbV9BcGFjaGUgKil0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3ZpcnRbcmVxdWVzdF9pZF07CiAJbWVtc2V0KHBhcmFtLCAwLCBUV19TRUNUT1JfU0laRSk7Ci0JcGFyYW0tPnRhYmxlX2lkID0gdGFibGVfaWQgfCAweDgwMDA7Ci0JcGFyYW0tPnBhcmFtZXRlcl9pZCA9IHBhcmFtZXRlcl9pZDsKLQlwYXJhbS0+cGFyYW1ldGVyX3NpemVfYnl0ZXMgPSBwYXJhbWV0ZXJfc2l6ZV9ieXRlczsKKwlwYXJhbS0+dGFibGVfaWQgPSBjcHVfdG9fbGUxNih0YWJsZV9pZCB8IDB4ODAwMCk7CisJcGFyYW0tPnBhcmFtZXRlcl9pZCA9IGNwdV90b19sZTE2KHBhcmFtZXRlcl9pZCk7CisJcGFyYW0tPnBhcmFtZXRlcl9zaXplX2J5dGVzID0gY3B1X3RvX2xlMTYocGFyYW1ldGVyX3NpemVfYnl0ZXMpOwogCXBhcmFtX3ZhbHVlID0gdHdfZGV2LT5nZW5lcmljX2J1ZmZlcl9waHlzW3JlcXVlc3RfaWRdOwogCi0JY29tbWFuZF9wYWNrZXQtPmJ5dGU4X29mZnNldC5wYXJhbS5zZ2xbMF0uYWRkcmVzcyA9IHBhcmFtX3ZhbHVlOwotCWNvbW1hbmRfcGFja2V0LT5ieXRlOF9vZmZzZXQucGFyYW0uc2dsWzBdLmxlbmd0aCA9IFRXX1NFQ1RPUl9TSVpFOworCWNvbW1hbmRfcGFja2V0LT5ieXRlOF9vZmZzZXQucGFyYW0uc2dsWzBdLmFkZHJlc3MgPSBUV19DUFVfVE9fU0dMKHBhcmFtX3ZhbHVlKTsKKwljb21tYW5kX3BhY2tldC0+Ynl0ZThfb2Zmc2V0LnBhcmFtLnNnbFswXS5sZW5ndGggPSBjcHVfdG9fbGUzMihUV19TRUNUT1JfU0laRSk7CiAKIAkvKiBQb3N0IHRoZSBjb21tYW5kIHBhY2tldCB0byB0aGUgYm9hcmQgKi8KIAl0d2FfcG9zdF9jb21tYW5kX3BhY2tldCh0d19kZXYsIHJlcXVlc3RfaWQsIDEpOwpAQCAtMTEwNywxOCArMTEwMywyMCBAQAogCXR3X2luaXRjb25uZWN0ID0gKFRXX0luaXRjb25uZWN0ICopJmZ1bGxfY29tbWFuZF9wYWNrZXQtPmNvbW1hbmQub2xkY29tbWFuZDsKIAl0d19pbml0Y29ubmVjdC0+b3Bjb2RlX19yZXNlcnZlZCA9IFRXX09QUkVTX0lOKDAsIFRXX09QX0lOSVRfQ09OTkVDVElPTik7CiAJdHdfaW5pdGNvbm5lY3QtPnJlcXVlc3RfaWQgPSByZXF1ZXN0X2lkOwotCXR3X2luaXRjb25uZWN0LT5tZXNzYWdlX2NyZWRpdHMgPSBtZXNzYWdlX2NyZWRpdHM7CisJdHdfaW5pdGNvbm5lY3QtPm1lc3NhZ2VfY3JlZGl0cyA9IGNwdV90b19sZTE2KG1lc3NhZ2VfY3JlZGl0cyk7CiAJdHdfaW5pdGNvbm5lY3QtPmZlYXR1cmVzID0gc2V0X2ZlYXR1cmVzOwogCiAJLyogVHVybiBvbiA2NC1iaXQgc2dsIHN1cHBvcnQgaWYgd2UgbmVlZCB0byAqLwogCXR3X2luaXRjb25uZWN0LT5mZWF0dXJlcyB8PSBzaXplb2YoZG1hX2FkZHJfdCkgPiA0ID8gMSA6IDA7CiAKKwl0d19pbml0Y29ubmVjdC0+ZmVhdHVyZXMgPSBjcHVfdG9fbGUzMih0d19pbml0Y29ubmVjdC0+ZmVhdHVyZXMpOworCiAJaWYgKHNldF9mZWF0dXJlcyAmIFRXX0VYVEVOREVEX0lOSVRfQ09OTkVDVCkgewogCQl0d19pbml0Y29ubmVjdC0+c2l6ZSA9IFRXX0lOSVRfQ09NTUFORF9QQUNLRVRfU0laRV9FWFRFTkRFRDsKLQkJdHdfaW5pdGNvbm5lY3QtPmZ3X3NybCA9IGN1cnJlbnRfZndfc3JsOwotCQl0d19pbml0Y29ubmVjdC0+ZndfYXJjaF9pZCA9IGN1cnJlbnRfZndfYXJjaF9pZDsKLQkJdHdfaW5pdGNvbm5lY3QtPmZ3X2JyYW5jaCA9IGN1cnJlbnRfZndfYnJhbmNoOwotCQl0d19pbml0Y29ubmVjdC0+ZndfYnVpbGQgPSBjdXJyZW50X2Z3X2J1aWxkOworCQl0d19pbml0Y29ubmVjdC0+Zndfc3JsID0gY3B1X3RvX2xlMTYoY3VycmVudF9md19zcmwpOworCQl0d19pbml0Y29ubmVjdC0+ZndfYXJjaF9pZCA9IGNwdV90b19sZTE2KGN1cnJlbnRfZndfYXJjaF9pZCk7CisJCXR3X2luaXRjb25uZWN0LT5md19icmFuY2ggPSBjcHVfdG9fbGUxNihjdXJyZW50X2Z3X2JyYW5jaCk7CisJCXR3X2luaXRjb25uZWN0LT5md19idWlsZCA9IGNwdV90b19sZTE2KGN1cnJlbnRfZndfYnVpbGQpOwogCX0gZWxzZSAKIAkJdHdfaW5pdGNvbm5lY3QtPnNpemUgPSBUV19JTklUX0NPTU1BTkRfUEFDS0VUX1NJWkU7CiAKQEAgLTExMzAsMTEgKzExMjgsMTEgQEAKIAkJVFdfUFJJTlRLKHR3X2Rldi0+aG9zdCwgVFdfRFJJVkVSLCAweDE1LCAiTm8gdmFsaWQgcmVzcG9uc2UgZHVyaW5nIGluaXQgY29ubmVjdGlvbiIpOwogCX0gZWxzZSB7CiAJCWlmIChzZXRfZmVhdHVyZXMgJiBUV19FWFRFTkRFRF9JTklUX0NPTk5FQ1QpIHsKLQkJCSpmd19vbl9jdGxyX3NybCA9IHR3X2luaXRjb25uZWN0LT5md19zcmw7Ci0JCQkqZndfb25fY3Rscl9hcmNoX2lkID0gdHdfaW5pdGNvbm5lY3QtPmZ3X2FyY2hfaWQ7Ci0JCQkqZndfb25fY3Rscl9icmFuY2ggPSB0d19pbml0Y29ubmVjdC0+ZndfYnJhbmNoOwotCQkJKmZ3X29uX2N0bHJfYnVpbGQgPSB0d19pbml0Y29ubmVjdC0+ZndfYnVpbGQ7Ci0JCQkqaW5pdF9jb25uZWN0X3Jlc3VsdCA9IHR3X2luaXRjb25uZWN0LT5yZXN1bHQ7CisJCQkqZndfb25fY3Rscl9zcmwgPSBsZTE2X3RvX2NwdSh0d19pbml0Y29ubmVjdC0+Zndfc3JsKTsKKwkJCSpmd19vbl9jdGxyX2FyY2hfaWQgPSBsZTE2X3RvX2NwdSh0d19pbml0Y29ubmVjdC0+ZndfYXJjaF9pZCk7CisJCQkqZndfb25fY3Rscl9icmFuY2ggPSBsZTE2X3RvX2NwdSh0d19pbml0Y29ubmVjdC0+ZndfYnJhbmNoKTsKKwkJCSpmd19vbl9jdGxyX2J1aWxkID0gbGUxNl90b19jcHUodHdfaW5pdGNvbm5lY3QtPmZ3X2J1aWxkKTsKKwkJCSppbml0X2Nvbm5lY3RfcmVzdWx0ID0gbGUzMl90b19jcHUodHdfaW5pdGNvbm5lY3QtPnJlc3VsdCk7CiAJCX0KIAkJcmV0dmFsID0gMDsKIAl9CkBAIC0xMzU4LDEwICsxMzU2LDEwIEBACiAJCW5ld2NvbW1hbmQgPSAmZnVsbF9jb21tYW5kX3BhY2tldC0+Y29tbWFuZC5uZXdjb21tYW5kOwogCQluZXdjb21tYW5kLT5yZXF1ZXN0X2lkX19sdW5sID0gCiAJCQlUV19SRVFfTFVOX0lOKFRXX0xVTl9PVVQobmV3Y29tbWFuZC0+cmVxdWVzdF9pZF9fbHVubCksIHJlcXVlc3RfaWQpOwotCQluZXdjb21tYW5kLT5zZ19saXN0WzBdLmFkZHJlc3MgPSBkbWFfaGFuZGxlICsgc2l6ZW9mKFRXX0lvY3RsX0J1Zl9BcGFjaGUpIC0gMTsKLQkJbmV3Y29tbWFuZC0+c2dfbGlzdFswXS5sZW5ndGggPSBsZW5ndGg7CisJCW5ld2NvbW1hbmQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0woZG1hX2hhbmRsZSArIHNpemVvZihUV19Jb2N0bF9CdWZfQXBhY2hlKSAtIDEpOworCQluZXdjb21tYW5kLT5zZ19saXN0WzBdLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCk7CiAJCW5ld2NvbW1hbmQtPnNnbF9lbnRyaWVzX19sdW5oID0KLQkJCVRXX1JFUV9MVU5fSU4oVFdfTFVOX09VVChuZXdjb21tYW5kLT5zZ2xfZW50cmllc19fbHVuaCksIDEpOworCQkJY3B1X3RvX2xlMTYoVFdfUkVRX0xVTl9JTihUV19MVU5fT1VUKG5ld2NvbW1hbmQtPnNnbF9lbnRyaWVzX19sdW5oKSwgMSkpOwogCX0gZWxzZSB7CiAJCW9sZGNvbW1hbmQgPSAmZnVsbF9jb21tYW5kX3BhY2tldC0+Y29tbWFuZC5vbGRjb21tYW5kOwogCQlvbGRjb21tYW5kLT5yZXF1ZXN0X2lkID0gcmVxdWVzdF9pZDsKQEAgLTEzNjksOCArMTM2Nyw4IEBACiAJCWlmIChUV19TR0xfT1VUKG9sZGNvbW1hbmQtPm9wY29kZV9fc2dsb2Zmc2V0KSkgewogCQkJLyogTG9hZCB0aGUgc2cgbGlzdCAqLwogCQkJc2dsID0gKFRXX1NHX0VudHJ5ICopKCh1MzIgKilvbGRjb21tYW5kK1RXX1NHTF9PVVQob2xkY29tbWFuZC0+b3Bjb2RlX19zZ2xvZmZzZXQpKTsKLQkJCXNnbC0+YWRkcmVzcyA9IGRtYV9oYW5kbGUgKyBzaXplb2YoVFdfSW9jdGxfQnVmX0FwYWNoZSkgLSAxOwotCQkJc2dsLT5sZW5ndGggPSBsZW5ndGg7CisJCQlzZ2wtPmFkZHJlc3MgPSBUV19DUFVfVE9fU0dMKGRtYV9oYW5kbGUgKyBzaXplb2YoVFdfSW9jdGxfQnVmX0FwYWNoZSkgLSAxKTsKKwkJCXNnbC0+bGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKTsKIAogCQkJaWYgKChzaXplb2YobG9uZykgPCA4KSAmJiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkpCiAJCQkJb2xkY29tbWFuZC0+c2l6ZSArPSAxOwpAQCAtMTgyOCwxMCArMTgyNiwxMCBAQAogCWlmIChzcmIpIHsKIAkJY29tbWFuZF9wYWNrZXQtPnVuaXQgPSBzcmItPmRldmljZS0+aWQ7CiAJCWNvbW1hbmRfcGFja2V0LT5yZXF1ZXN0X2lkX19sdW5sID0KLQkJCVRXX1JFUV9MVU5fSU4oc3JiLT5kZXZpY2UtPmx1biwgcmVxdWVzdF9pZCk7CisJCQljcHVfdG9fbGUxNihUV19SRVFfTFVOX0lOKHNyYi0+ZGV2aWNlLT5sdW4sIHJlcXVlc3RfaWQpKTsKIAl9IGVsc2UgewogCQljb21tYW5kX3BhY2tldC0+cmVxdWVzdF9pZF9fbHVubCA9Ci0JCQlUV19SRVFfTFVOX0lOKDAsIHJlcXVlc3RfaWQpOworCQkJY3B1X3RvX2xlMTYoVFdfUkVRX0xVTl9JTigwLCByZXF1ZXN0X2lkKSk7CiAJCWNvbW1hbmRfcGFja2V0LT51bml0ID0gMDsKIAl9CiAKQEAgLTE4NDEsOCArMTgzOSw4IEBACiAJCS8qIE1hcCBzZ2xpc3QgZnJvbSBzY3NpIGxheWVyIHRvIGNtZCBwYWNrZXQgKi8KIAkJaWYgKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT51c2Vfc2cgPT0gMCkgewogCQkJaWYgKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5yZXF1ZXN0X2J1ZmZsZW4gPCBUV19NSU5fU0dMX0xFTkdUSCkgewotCQkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0WzBdLmFkZHJlc3MgPSB0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3BoeXNbcmVxdWVzdF9pZF07Ci0JCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbMF0ubGVuZ3RoID0gVFdfTUlOX1NHTF9MRU5HVEg7CisJCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0wodHdfZGV2LT5nZW5lcmljX2J1ZmZlcl9waHlzW3JlcXVlc3RfaWRdKTsKKwkJCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFswXS5sZW5ndGggPSBjcHVfdG9fbGUzMihUV19NSU5fU0dMX0xFTkdUSCk7CiAJCQkJaWYgKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFIHx8IHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfQklESVJFQ1RJT05BTCkKIAkJCQkJbWVtY3B5KHR3X2Rldi0+Z2VuZXJpY19idWZmZXJfdmlydFtyZXF1ZXN0X2lkXSwgdHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0tPnJlcXVlc3RfYnVmZmVyLCB0d19kZXYtPnNyYltyZXF1ZXN0X2lkXS0+cmVxdWVzdF9idWZmbGVuKTsKIAkJCX0gZWxzZSB7CkBAIC0xODUwLDEyICsxODQ4LDEyIEBACiAJCQkJaWYgKGJ1ZmZhZGRyID09IDApCiAJCQkJCWdvdG8gb3V0OwogCi0JCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IGJ1ZmZhZGRyOwotCQkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0WzBdLmxlbmd0aCA9IHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5yZXF1ZXN0X2J1ZmZsZW47CisJCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0woYnVmZmFkZHIpOworCQkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0WzBdLmxlbmd0aCA9IGNwdV90b19sZTMyKHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT5yZXF1ZXN0X2J1ZmZsZW4pOwogCQkJfQotCQkJY29tbWFuZF9wYWNrZXQtPnNnbF9lbnRyaWVzX19sdW5oID0gVFdfUkVRX0xVTl9JTigoc3JiLT5kZXZpY2UtPmx1biA+PiA0KSwgMSk7CisJCQljb21tYW5kX3BhY2tldC0+c2dsX2VudHJpZXNfX2x1bmggPSBjcHVfdG9fbGUxNihUV19SRVFfTFVOX0lOKChzcmItPmRldmljZS0+bHVuID4+IDQpLCAxKSk7CiAKLQkJCWlmIChjb21tYW5kX3BhY2tldC0+c2dfbGlzdFswXS5hZGRyZXNzICYgVFdfQUxJR05NRU5UXzkwMDBfU0dMKSB7CisJCQlpZiAoY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbMF0uYWRkcmVzcyAmIFRXX0NQVV9UT19TR0woVFdfQUxJR05NRU5UXzkwMDBfU0dMKSkgewogCQkJCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwgMHgyZCwgIkZvdW5kIHVuYWxpZ25lZCBhZGRyZXNzIGR1cmluZyBleGVjdXRlIHNjc2kiKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTE4NjksMzUgKzE4NjcsMzUgQEAKIAkJCQkJbWVtY3B5KHR3X2Rldi0+Z2VuZXJpY19idWZmZXJfdmlydFtyZXF1ZXN0X2lkXSwgYnVmLCBzZy0+bGVuZ3RoKTsKIAkJCQkJa3VubWFwX2F0b21pYyhidWYgLSBzZy0+b2Zmc2V0LCBLTV9JUlEwKTsKIAkJCQl9Ci0JCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbMF0uYWRkcmVzcyA9IHR3X2Rldi0+Z2VuZXJpY19idWZmZXJfcGh5c1tyZXF1ZXN0X2lkXTsKLQkJCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFswXS5sZW5ndGggPSBUV19NSU5fU0dMX0xFTkdUSDsKKwkJCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFswXS5hZGRyZXNzID0gVFdfQ1BVX1RPX1NHTCh0d19kZXYtPmdlbmVyaWNfYnVmZmVyX3BoeXNbcmVxdWVzdF9pZF0pOworCQkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0WzBdLmxlbmd0aCA9IGNwdV90b19sZTMyKFRXX01JTl9TR0xfTEVOR1RIKTsKIAkJCX0gZWxzZSB7CiAJCQkJc2dfY291bnQgPSB0d2FfbWFwX3Njc2lfc2dfZGF0YSh0d19kZXYsIHJlcXVlc3RfaWQpOwogCQkJCWlmIChzZ19jb3VudCA9PSAwKQogCQkJCQlnb3RvIG91dDsKIAogCQkJCWZvciAoaSA9IDA7IGkgPCBzZ19jb3VudDsgaSsrKSB7Ci0JCQkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0W2ldLmFkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcygmc2dsaXN0W2ldKTsKLQkJCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbaV0ubGVuZ3RoID0gc2dfZG1hX2xlbigmc2dsaXN0W2ldKTsKLQkJCQkJaWYgKGNvbW1hbmRfcGFja2V0LT5zZ19saXN0W2ldLmFkZHJlc3MgJiBUV19BTElHTk1FTlRfOTAwMF9TR0wpIHsKKwkJCQkJY29tbWFuZF9wYWNrZXQtPnNnX2xpc3RbaV0uYWRkcmVzcyA9IFRXX0NQVV9UT19TR0woc2dfZG1hX2FkZHJlc3MoJnNnbGlzdFtpXSkpOworCQkJCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFtpXS5sZW5ndGggPSBjcHVfdG9fbGUzMihzZ19kbWFfbGVuKCZzZ2xpc3RbaV0pKTsKKwkJCQkJaWYgKGNvbW1hbmRfcGFja2V0LT5zZ19saXN0W2ldLmFkZHJlc3MgJiBUV19DUFVfVE9fU0dMKFRXX0FMSUdOTUVOVF85MDAwX1NHTCkpIHsKIAkJCQkJCVRXX1BSSU5USyh0d19kZXYtPmhvc3QsIFRXX0RSSVZFUiwgMHgyZSwgIkZvdW5kIHVuYWxpZ25lZCBzZ2wgYWRkcmVzcyBkdXJpbmcgZXhlY3V0ZSBzY3NpIik7CiAJCQkJCQlnb3RvIG91dDsKIAkJCQkJfQogCQkJCX0KIAkJCX0KLQkJCWNvbW1hbmRfcGFja2V0LT5zZ2xfZW50cmllc19fbHVuaCA9IFRXX1JFUV9MVU5fSU4oKHNyYi0+ZGV2aWNlLT5sdW4gPj4gNCksIHR3X2Rldi0+c3JiW3JlcXVlc3RfaWRdLT51c2Vfc2cpOworCQkJY29tbWFuZF9wYWNrZXQtPnNnbF9lbnRyaWVzX19sdW5oID0gY3B1X3RvX2xlMTYoVFdfUkVRX0xVTl9JTigoc3JiLT5kZXZpY2UtPmx1biA+PiA0KSwgdHdfZGV2LT5zcmJbcmVxdWVzdF9pZF0tPnVzZV9zZykpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogSW50ZXJuYWwgY2RiIHBvc3QgKi8KIAkJZm9yIChpID0gMDsgaSA8IHVzZV9zZzsgaSsrKSB7Ci0JCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFtpXS5hZGRyZXNzID0gc2dsaXN0YXJnW2ldLmFkZHJlc3M7Ci0JCQljb21tYW5kX3BhY2tldC0+c2dfbGlzdFtpXS5sZW5ndGggPSBzZ2xpc3RhcmdbaV0ubGVuZ3RoOwotCQkJaWYgKGNvbW1hbmRfcGFja2V0LT5zZ19saXN0W2ldLmFkZHJlc3MgJiBUV19BTElHTk1FTlRfOTAwMF9TR0wpIHsKKwkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0W2ldLmFkZHJlc3MgPSBUV19DUFVfVE9fU0dMKHNnbGlzdGFyZ1tpXS5hZGRyZXNzKTsKKwkJCWNvbW1hbmRfcGFja2V0LT5zZ19saXN0W2ldLmxlbmd0aCA9IGNwdV90b19sZTMyKHNnbGlzdGFyZ1tpXS5sZW5ndGgpOworCQkJaWYgKGNvbW1hbmRfcGFja2V0LT5zZ19saXN0W2ldLmFkZHJlc3MgJiBUV19DUFVfVE9fU0dMKFRXX0FMSUdOTUVOVF85MDAwX1NHTCkpIHsKIAkJCQlUV19QUklOVEsodHdfZGV2LT5ob3N0LCBUV19EUklWRVIsIDB4MmYsICJGb3VuZCB1bmFsaWduZWQgc2dsIGFkZHJlc3MgZHVyaW5nIGludGVybmFsIHBvc3QiKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQotCQljb21tYW5kX3BhY2tldC0+c2dsX2VudHJpZXNfX2x1bmggPSBUV19SRVFfTFVOX0lOKDAsIHVzZV9zZyk7CisJCWNvbW1hbmRfcGFja2V0LT5zZ2xfZW50cmllc19fbHVuaCA9IGNwdV90b19sZTE2KFRXX1JFUV9MVU5fSU4oMCwgdXNlX3NnKSk7CiAJfQogCiAJaWYgKHNyYikgewpAQCAtMjExNSw4ICsyMTEzLDggQEAKIAkJCQkgICAgIFRXX1BBUkFNX0ZXVkVSLCBUV19QQVJBTV9GV1ZFUl9MRU5HVEgpLAogCSAgICAgICAoY2hhciAqKXR3YV9nZXRfcGFyYW0odHdfZGV2LCAxLCBUV19WRVJTSU9OX1RBQkxFLAogCQkJCSAgICAgVFdfUEFSQU1fQklPU1ZFUiwgVFdfUEFSQU1fQklPU1ZFUl9MRU5HVEgpLAotCSAgICAgICAqKGludCAqKXR3YV9nZXRfcGFyYW0odHdfZGV2LCAyLCBUV19JTkZPUk1BVElPTl9UQUJMRSwKLQkJCQkgICAgIFRXX1BBUkFNX1BPUlRDT1VOVCwgVFdfUEFSQU1fUE9SVENPVU5UX0xFTkdUSCkpOworCSAgICAgICBsZTMyX3RvX2NwdSgqKGludCAqKXR3YV9nZXRfcGFyYW0odHdfZGV2LCAyLCBUV19JTkZPUk1BVElPTl9UQUJMRSwKKwkJCQkgICAgIFRXX1BBUkFNX1BPUlRDT1VOVCwgVFdfUEFSQU1fUE9SVENPVU5UX0xFTkdUSCkpKTsKIAogCS8qIE5vdyBzZXR1cCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlyZXR2YWwgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHR3YV9pbnRlcnJ1cHQsIFNBX1NISVJRLCAiM3ctOXh4eCIsIHR3X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguaAppbmRleCAxYjE2ZDU3Li5lNTY4NWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5oCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmgKQEAgLTIsOCArMiw5IEBACiAgICAzdy05eHh4LmggLS0gM3dhcmUgOTAwMCBTdG9yYWdlIENvbnRyb2xsZXIgZGV2aWNlIGRyaXZlciBmb3IgTGludXguCiAKICAgIFdyaXR0ZW4gQnk6IEFkYW0gUmFkZm9yZCA8bGludXhyYWlkQGFtY2MuY29tPgorICAgTW9kaWZpY2F0aW9ucyBCeTogVG9tIENvdWNoIDxsaW51eHJhaWRAYW1jYy5jb20+CiAKLSAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI4Nyw5ICsyODgsNiBAQAogI2RlZmluZSBUV19TVEFUVVNfVU5FWFBFQ1RFRF9CSVRTCSAgICAgICAweDAwRjAwMDAwCiAjZGVmaW5lIFRXX1NUQVRVU19WQUxJRF9JTlRFUlJVUFQgICAgICAgICAgICAgIDB4MDBERjAwMDAKIAotLyogUkVTUE9OU0UgUVVFVUUgQklUIERFRklOSVRJT05TICovCi0jZGVmaW5lIFRXX1JFU1BPTlNFX0lEX01BU0sJCSAgICAgICAweDAwMDAwRkYwCi0KIC8qIFBDSSByZWxhdGVkIGRlZmluZXMgKi8KICNkZWZpbmUgVFdfTlVNREVWSUNFUyAxCiAjZGVmaW5lIFRXX1BDSV9DTEVBUl9QQVJJVFlfRVJST1JTIDB4YzEwMApAQCAtNDcxLDYgKzQ2OSw3IEBACiAjZGVmaW5lIFRXX0FQQUNIRV9NQVhfU0dMX0xFTkdUSCAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCA/IDcyIDogMTA5KQogI2RlZmluZSBUV19FU0NBTEFERV9NQVhfU0dMX0xFTkdUSCAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCA/IDQxIDogNjIpCiAjZGVmaW5lIFRXX1BBRERJTkdfTEVOR1RIIChzaXplb2YoZG1hX2FkZHJfdCkgPiA0ID8gOCA6IDApCisjZGVmaW5lIFRXX0NQVV9UT19TR0woeCkgKHNpemVvZihkbWFfYWRkcl90KSA+IDQgPyBjcHVfdG9fbGU2NCh4KSA6IGNwdV90b19sZTMyKHgpKQogCiAjcHJhZ21hIHBhY2soMSkKIApAQCAtNjE0LDEzICs2MTMsNiBAQAogCXUzMiB2YWx1ZTsKIH0gVFdfUmVzcG9uc2VfUXVldWU7CiAKLXR5cGVkZWYgc3RydWN0IFRBR19UV19JbmZvIHsKLQljaGFyICpidWZmZXI7Ci0JaW50IGxlbmd0aDsKLQlpbnQgb2Zmc2V0OwotCWludCBwb3NpdGlvbjsKLX0gVFdfSW5mbzsKLQogLyogQ29tcGF0aWJpbGl0eSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IFRBR19UV19Db21wYXRpYmlsaXR5X0luZm8KIHsKQEAgLTYzNiw2ICs2MjgsOCBAQAogCXVuc2lnbmVkIHNob3J0IGRyaXZlcl9idWlsZF9sb3c7CiB9IFRXX0NvbXBhdGliaWxpdHlfSW5mbzsKIAorI3ByYWdtYSBwYWNrKCkKKwogdHlwZWRlZiBzdHJ1Y3QgVEFHX1RXX0RldmljZV9FeHRlbnNpb24gewogCXUzMiAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKmJhc2VfYWRkcjsKIAl1bnNpZ25lZCBsb25nCSAgICAgICAJKmdlbmVyaWNfYnVmZmVyX3ZpcnRbVFdfUV9MRU5HVEhdOwpAQCAtNjc5LDcgKzY3Myw1IEBACiAJdW5zaWduZWQgc2hvcnQJCXdvcmtpbmdfYnVpbGQ7CiB9IFRXX0RldmljZV9FeHRlbnNpb247CiAKLSNwcmFnbWEgcGFjaygpCi0KICNlbmRpZiAvKiBfM1dfOVhYWF9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS81M2M3MDAuYyBiL2RyaXZlcnMvc2NzaS81M2M3MDAuYwppbmRleCA0Y2U3NDM4Li42YTBmOTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvNTNjNzAwLmMKKysrIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5jCkBAIC0yMzgsMTQgKzIzOCw2IEBACiAJIk1TRyBJTiIsCiB9OwogCi1zdGF0aWMgX191OCBOQ1JfNzAwX1NEVFJfbXNnW10gPSB7Ci0JMHgwMSwJCQkvKiBFeHRlbmRlZCBtZXNzYWdlICovCi0JMHgwMywJCQkvKiBFeHRlbmRlZCBtZXNzYWdlIExlbmd0aCAqLwotCTB4MDEsCQkJLyogU0RUUiBFeHRlbmRlZCBtZXNzYWdlICovCi0JTkNSXzcwMF9NSU5fUEVSSU9ELAotCU5DUl83MDBfTUFYX09GRlNFVAotfTsKLQogLyogVGhpcyB0cmFuc2xhdGVzIHRoZSBTRFRSIG1lc3NhZ2Ugb2Zmc2V0IGFuZCBwZXJpb2QgdG8gYSB2YWx1ZQogICogd2hpY2ggY2FuIGJlIGxvYWRlZCBpbnRvIHRoZSBTWEZFUl9SRUcuCiAgKgpAQCAtMjY2LDcgKzI1OCw3IEBACiAJCXJldHVybiAwOwogCiAJaWYocGVyaW9kIDwgaG9zdGRhdGEtPm1pbl9wZXJpb2QpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiNTNjNzAwOiBQZXJpb2QgJWRucyBpcyBsZXNzIHRoYW4gdGhpcyBjaGlwJ3MgbWluaW11bSwgc2V0dGluZyB0byAlZFxuIiwgcGVyaW9kKjQsIE5DUl83MDBfU0RUUl9tc2dbM10qNCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIjUzYzcwMDogUGVyaW9kICVkbnMgaXMgbGVzcyB0aGFuIHRoaXMgY2hpcCdzIG1pbmltdW0sIHNldHRpbmcgdG8gJWRcbiIsIHBlcmlvZCo0LCBOQ1JfNzAwX01JTl9QRVJJT0QqNCk7CiAJCXBlcmlvZCA9IGhvc3RkYXRhLT5taW5fcGVyaW9kOwogCX0KIAlYRkVSUCA9IChwZXJpb2QqNCAqIGhvc3RkYXRhLT5zeW5jX2Nsb2NrKS8xMDAwIC0gNDsKQEAgLTE0MzQsMTEgKzE0MjYsOSBAQAogCiAJaWYoaG9zdGRhdGEtPmZhc3QgJiYKIAkgICBOQ1JfNzAwX2lzX2ZsYWdfY2xlYXIoU0NwLT5kZXZpY2UsIE5DUl83MDBfREVWX05FR09USUFURURfU1lOQykpIHsKLQkJbWVtY3B5KCZob3N0ZGF0YS0+bXNnb3V0W2NvdW50XSwgTkNSXzcwMF9TRFRSX21zZywKLQkJICAgICAgIHNpemVvZihOQ1JfNzAwX1NEVFJfbXNnKSk7Ci0JCWhvc3RkYXRhLT5tc2dvdXRbY291bnQrM10gPSBzcGlfcGVyaW9kKFNDcC0+ZGV2aWNlLT5zZGV2X3RhcmdldCk7Ci0JCWhvc3RkYXRhLT5tc2dvdXRbY291bnQrNF0gPSBzcGlfb2Zmc2V0KFNDcC0+ZGV2aWNlLT5zZGV2X3RhcmdldCk7Ci0JCWNvdW50ICs9IHNpemVvZihOQ1JfNzAwX1NEVFJfbXNnKTsKKwkJY291bnQgKz0gc3BpX3BvcHVsYXRlX3N5bmNfbXNnKCZob3N0ZGF0YS0+bXNnb3V0W2NvdW50XSwKKwkJCQlzcGlfcGVyaW9kKFNDcC0+ZGV2aWNlLT5zZGV2X3RhcmdldCksCisJCQkJc3BpX29mZnNldChTQ3AtPmRldmljZS0+c2Rldl90YXJnZXQpKTsKIAkJTkNSXzcwMF9zZXRfZmxhZyhTQ3AtPmRldmljZSwgTkNSXzcwMF9ERVZfQkVHSU5fU1lOQ19ORUdPVElBVElPTik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jIGIvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYwppbmRleCA4ZDY0ZjBiLi44ZTNkOTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCisrKyBiL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKQEAgLTE1LDExNiArMTUsNDYgQEAKIAogKi8KIAotCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKLQogI2lmbmRlZiBDT05GSUdfU0NTSV9PTUlUX0ZMQVNIUE9JTlQKIAotCiAjZGVmaW5lIE1BWF9DQVJEUwk4CiAjdW5kZWYgQlVTVFlQRV9QQ0kKIAotCi0jZGVmaW5lIE9TX0luUG9ydEJ5dGUocG9ydCkJCWluYihwb3J0KQotI2RlZmluZSBPU19JblBvcnRXb3JkKHBvcnQpCQlpbncocG9ydCkKLSNkZWZpbmUgT1NfSW5Qb3J0TG9uZyhwb3J0KQkJaW5sKHBvcnQpCi0jZGVmaW5lIE9TX091dFBvcnRCeXRlKHBvcnQsIHZhbHVlKQlvdXRiKHZhbHVlLCBwb3J0KQotI2RlZmluZSBPU19PdXRQb3J0V29yZChwb3J0LCB2YWx1ZSkJb3V0dyh2YWx1ZSwgcG9ydCkKLSNkZWZpbmUgT1NfT3V0UG9ydExvbmcocG9ydCwgdmFsdWUpCW91dGwodmFsdWUsIHBvcnQpCi0KLQotLyoKLSAgRGVmaW5lIG5hbWUgcmVwbGFjZW1lbnRzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIExpbnV4IEJ1c0xvZ2ljIERyaXZlci4KLSovCi0KLSNkZWZpbmUgU2NjYk1ncl9zZW5zZV9hZGFwdGVyCQlGbGFzaFBvaW50X1Byb2JlSG9zdEFkYXB0ZXIKLSNkZWZpbmUgU2NjYk1ncl9jb25maWdfYWRhcHRlcgkJRmxhc2hQb2ludF9IYXJkd2FyZVJlc2V0SG9zdEFkYXB0ZXIKLSNkZWZpbmUgU2NjYk1ncl91bmxvYWRfY2FyZAkJRmxhc2hQb2ludF9SZWxlYXNlSG9zdEFkYXB0ZXIKLSNkZWZpbmUgU2NjYk1ncl9zdGFydF9zY2NiCQlGbGFzaFBvaW50X1N0YXJ0Q0NCCi0jZGVmaW5lIFNjY2JNZ3JfYWJvcnRfc2NjYgkJRmxhc2hQb2ludF9BYm9ydENDQgotI2RlZmluZSBTY2NiTWdyX215X2ludAkJCUZsYXNoUG9pbnRfSW50ZXJydXB0UGVuZGluZwotI2RlZmluZSBTY2NiTWdyX2lzcgkJCUZsYXNoUG9pbnRfSGFuZGxlSW50ZXJydXB0Ci0KLQotI2RlZmluZSBNQVhfQ0RCTEVOICAxMgotCi0jZGVmaW5lIFNDQU1fTEVWXzIJMQotCiAjZGVmaW5lIENSQ01BU0sJMHhBMDAxCiAKLSNkZWZpbmUgICAgIEJMX1ZFTkRPUl9JRCAgICAgIDB4MTA0QgotI2RlZmluZSAgICAgRlBfREVWSUNFX0lEICAgICAgMHg4MTMwCi0jZGVmaW5lICAgICBNTV9ERVZJQ0VfSUQgICAgICAweDEwNDAKLQotCiAjZGVmaW5lIEZBSUxVUkUgICAgICAgICAweEZGRkZGRkZGTAogCisjZGVmaW5lIEJJVCh4KSAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIpKDE8PCh4KSkpCS8qIHNpbmdsZS1iaXQgbWFzayBpbiBiaXQgcG9zaXRpb24geCAqLworI2RlZmluZSBCSVRXKHgpICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE8PCh4KSkpCS8qIHNpbmdsZS1iaXQgbWFzayBpbiBiaXQgcG9zaXRpb24geCAqLwogCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBVQ0hBUjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFVTSE9SVDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgIFVJTlQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBVTE9ORzsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAqIFBVQ0hBUjsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQqIFBVU0hPUlQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgKiBQVUxPTkc7Ci10eXBlZGVmIHZvaWQgKiAgICAgICAgICBQVk9JRDsKK3N0cnVjdCBzY2NiOwordHlwZWRlZiB2b2lkICgqQ0FMTF9CS19GTikgKHN0cnVjdCBzY2NiICopOwogCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgKiB1Y2hhcl9wdHI7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgICogdXNob3J0X3B0cjsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICAgKiB1bG9uZ19wdHI7Ci0KLQotI2RlZmluZSBzMDhiaXRzCWNoYXIKLSNkZWZpbmUgczE2Yml0cyAJc2hvcnQKLSNkZWZpbmUgczMyYml0cwlsb25nCi0KLSNkZWZpbmUgdTA4Yml0cwl1bnNpZ25lZCBzMDhiaXRzCi0jZGVmaW5lIHUxNmJpdHMJdW5zaWduZWQgczE2Yml0cwotI2RlZmluZSB1MzJiaXRzCXVuc2lnbmVkIHMzMmJpdHMKLQotdHlwZWRlZiB1MDhiaXRzIAkqIHB1MDhiaXRzOwotdHlwZWRlZiB1MTZiaXRzIAkqIHB1MTZiaXRzOwotdHlwZWRlZiB1MzJiaXRzIAkqIHB1MzJiaXRzOwotCi0KLSNkZWZpbmUgQklUKHgpICAgICAgICAgICgoVUNIQVIpKDE8PCh4KSkpICAgIC8qIHNpbmdsZS1iaXQgbWFzayBpbiBiaXQgcG9zaXRpb24geCAqLwotI2RlZmluZSBCSVRXKHgpICAgICAgICAgICgoVVNIT1JUKSgxPDwoeCkpKSAgLyogc2luZ2xlLWJpdCBtYXNrIGluIGJpdCBwb3NpdGlvbiB4ICovCi0KLQotCi0KLXR5cGVkZWYgc3RydWN0IF9TQ0NCICpQU0NDQjsKLXR5cGVkZWYgdm9pZCAoKkNBTExfQktfRk4pKFBTQ0NCKTsKLQotCi10eXBlZGVmIHN0cnVjdCBTQ0NCTWdyX2luZm8gewotICAgVUxPTkcgICAgc2lfYmFzZWFkZHI7Ci0gICBVQ0hBUiAgICBzaV9wcmVzZW50OwotICAgVUNIQVIgICAgc2lfaW50dmVjdDsKLSAgIFVDSEFSICAgIHNpX2lkOwotICAgVUNIQVIgICAgc2lfbHVuOwotICAgVVNIT1JUICAgc2lfZndfcmV2aXNpb247Ci0gICBVU0hPUlQgICBzaV9wZXJfdGFyZ19pbml0X3N5bmM7Ci0gICBVU0hPUlQgICBzaV9wZXJfdGFyZ19mYXN0X25lZ287Ci0gICBVU0hPUlQgICBzaV9wZXJfdGFyZ191bHRyYV9uZWdvOwotICAgVVNIT1JUICAgc2lfcGVyX3Rhcmdfbm9fZGlzYzsKLSAgIFVTSE9SVCAgIHNpX3Blcl90YXJnX3dpZGVfbmVnbzsKLSAgIFVTSE9SVCAgIHNpX2ZsYWdzOwotICAgVUNIQVIgICAgc2lfY2FyZF9mYW1pbHk7Ci0gICBVQ0hBUiAgICBzaV9idXN0eXBlOwotICAgVUNIQVIgICAgc2lfY2FyZF9tb2RlbFszXTsKLSAgIFVDSEFSICAgIHNpX3JlbGF0aXZlX2NhcmRudW07Ci0gICBVQ0hBUiAgICBzaV9yZXNlcnZlZFs0XTsKLSAgIFVMT05HICAgIHNpX09TX3Jlc2VydmVkOwotICAgVUNIQVIgICAgc2lfWGxhdEluZm9bNF07Ci0gICBVTE9ORyAgICBzaV9yZXNlcnZlZDJbNV07Ci0gICBVTE9ORyAgICBzaV9zZWNvbmRhcnlfcmFuZ2U7Ci19IFNDQ0JNR1JfSU5GTzsKLQotdHlwZWRlZiBTQ0NCTUdSX0lORk8gKiAgICAgIFBTQ0NCTUdSX0lORk87Ci0KK3N0cnVjdCBzY2NiX21ncl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIHNpX2Jhc2VhZGRyOworCXVuc2lnbmVkIGNoYXIgc2lfcHJlc2VudDsKKwl1bnNpZ25lZCBjaGFyIHNpX2ludHZlY3Q7CisJdW5zaWduZWQgY2hhciBzaV9pZDsKKwl1bnNpZ25lZCBjaGFyIHNpX2x1bjsKKwl1bnNpZ25lZCBzaG9ydCBzaV9md19yZXZpc2lvbjsKKwl1bnNpZ25lZCBzaG9ydCBzaV9wZXJfdGFyZ19pbml0X3N5bmM7CisJdW5zaWduZWQgc2hvcnQgc2lfcGVyX3RhcmdfZmFzdF9uZWdvOworCXVuc2lnbmVkIHNob3J0IHNpX3Blcl90YXJnX3VsdHJhX25lZ287CisJdW5zaWduZWQgc2hvcnQgc2lfcGVyX3Rhcmdfbm9fZGlzYzsKKwl1bnNpZ25lZCBzaG9ydCBzaV9wZXJfdGFyZ193aWRlX25lZ287CisJdW5zaWduZWQgc2hvcnQgc2lfZmxhZ3M7CisJdW5zaWduZWQgY2hhciBzaV9jYXJkX2ZhbWlseTsKKwl1bnNpZ25lZCBjaGFyIHNpX2J1c3R5cGU7CisJdW5zaWduZWQgY2hhciBzaV9jYXJkX21vZGVsWzNdOworCXVuc2lnbmVkIGNoYXIgc2lfcmVsYXRpdmVfY2FyZG51bTsKKwl1bnNpZ25lZCBjaGFyIHNpX3Jlc2VydmVkWzRdOworCXVuc2lnbmVkIGxvbmcgc2lfT1NfcmVzZXJ2ZWQ7CisJdW5zaWduZWQgY2hhciBzaV9YbGF0SW5mb1s0XTsKKwl1bnNpZ25lZCBsb25nIHNpX3Jlc2VydmVkMls1XTsKKwl1bnNpZ25lZCBsb25nIHNpX3NlY29uZGFyeV9yYW5nZTsKK307CiAKICNkZWZpbmUgU0NTSV9QQVJJVFlfRU5BCQkgIDB4MDAwMQogI2RlZmluZSBMT1dfQllURV9URVJNCQkgIDB4MDAxMApAQCAtMTM4LDEwNyArNjgsODEgQEAKICNkZWZpbmUgRkxBR19TQ0FNX0VOQUJMRUQJICAweDAwODAKICNkZWZpbmUgRkxBR19TQ0FNX0xFVkVMMgkgIDB4MDEwMAogCi0KLQotCiAjZGVmaW5lIEhBUlBPT05fRkFNSUxZICAgICAgICAweDAyCiAKLQotI2RlZmluZSBJU0FfQlVTX0NBUkQgICAgICAgICAgMHgwMQotI2RlZmluZSBFSVNBX0JVU19DQVJEICAgICAgICAgMHgwMgotI2RlZmluZSBQQ0lfQlVTX0NBUkQgICAgICAgICAgMHgwMwotI2RlZmluZSBWRVNBX0JVU19DQVJEICAgICAgICAgMHgwNAotCiAvKiBTQ0NCIHN0cnVjdCB1c2VkIGZvciBib3RoIFNDQ0IgYW5kIFVDQiBtYW5hZ2VyIGNvbXBpbGVzISAKICAqIFRoZSBVQ0IgTWFuYWdlciB0cmVhdHMgdGhlIFNDQ0IgYXMgaXQncyAnbmF0aXZlIGhhcmR3YXJlIHN0cnVjdHVyZScgCiAgKi8KIAotCiAjcHJhZ21hIHBhY2soMSkKLXR5cGVkZWYgc3RydWN0IF9TQ0NCIHsKLSAgIFVDSEFSIE9wZXJhdGlvbkNvZGU7Ci0gICBVQ0hBUiBDb250cm9sQnl0ZTsKLSAgIFVDSEFSIENkYkxlbmd0aDsKLSAgIFVDSEFSIFJlcXVlc3RTZW5zZUxlbmd0aDsKLSAgIFVMT05HIERhdGFMZW5ndGg7Ci0gICBVTE9ORyBEYXRhUG9pbnRlcjsKLSAgIFVDSEFSIENjYlJlc1syXTsKLSAgIFVDSEFSIEhvc3RTdGF0dXM7Ci0gICBVQ0hBUiBUYXJnZXRTdGF0dXM7Ci0gICBVQ0hBUiBUYXJnSUQ7Ci0gICBVQ0hBUiBMdW47Ci0gICBVQ0hBUiBDZGJbMTJdOwotICAgVUNIQVIgQ2NiUmVzMTsKLSAgIFVDSEFSIFJlc2VydmVkMTsKLSAgIFVMT05HIFJlc2VydmVkMjsKLSAgIFVMT05HIFNlbnNlUG9pbnRlcjsKK3N0cnVjdCBzY2NiIHsKKwl1bnNpZ25lZCBjaGFyIE9wZXJhdGlvbkNvZGU7CisJdW5zaWduZWQgY2hhciBDb250cm9sQnl0ZTsKKwl1bnNpZ25lZCBjaGFyIENkYkxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyIFJlcXVlc3RTZW5zZUxlbmd0aDsKKwl1bnNpZ25lZCBsb25nIERhdGFMZW5ndGg7CisJdW5zaWduZWQgbG9uZyBEYXRhUG9pbnRlcjsKKwl1bnNpZ25lZCBjaGFyIENjYlJlc1syXTsKKwl1bnNpZ25lZCBjaGFyIEhvc3RTdGF0dXM7CisJdW5zaWduZWQgY2hhciBUYXJnZXRTdGF0dXM7CisJdW5zaWduZWQgY2hhciBUYXJnSUQ7CisJdW5zaWduZWQgY2hhciBMdW47CisJdW5zaWduZWQgY2hhciBDZGJbMTJdOworCXVuc2lnbmVkIGNoYXIgQ2NiUmVzMTsKKwl1bnNpZ25lZCBjaGFyIFJlc2VydmVkMTsKKwl1bnNpZ25lZCBsb25nIFJlc2VydmVkMjsKKwl1bnNpZ25lZCBsb25nIFNlbnNlUG9pbnRlcjsKIAorCUNBTExfQktfRk4gU2NjYkNhbGxiYWNrOwkvKiBWT0lEICgqU2NjYkNhbGxiYWNrKSgpOyAqLworCXVuc2lnbmVkIGxvbmcgU2NjYklPUG9ydDsJLyogSWRlbnRpZmllcyBib2FyZCBiYXNlIHBvcnQgKi8KKwl1bnNpZ25lZCBjaGFyIFNjY2JTdGF0dXM7CisJdW5zaWduZWQgY2hhciBTQ0NCUmVzMjsKKwl1bnNpZ25lZCBzaG9ydCBTY2NiT1NGbGFnczsKIAotICAgQ0FMTF9CS19GTiBTY2NiQ2FsbGJhY2s7ICAgICAgICAgICAgICAgICAgLyogVk9JRCAoKlNjY2JDYWxsYmFjaykoKTsgKi8KLSAgIFVMT05HICBTY2NiSU9Qb3J0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElkZW50aWZpZXMgYm9hcmQgYmFzZSBwb3J0ICovCi0gICBVQ0hBUiAgU2NjYlN0YXR1czsKLSAgIFVDSEFSICBTQ0NCUmVzMjsKLSAgIFVTSE9SVCBTY2NiT1NGbGFnczsKLQotCi0gICBVTE9ORyAgIFNjY2JfWGZlckNudDsgICAgICAgICAgICAvKiBhY3R1YWwgdHJhbnNmZXIgY291bnQgKi8KLSAgIFVMT05HICAgU2NjYl9BVEM7Ci0gICBVTE9ORyAgIFNjY2JWaXJ0RGF0YVB0cjsgICAgICAgICAvKiB2aXJ0dWFsIGFkZHIgZm9yIE9TLzIgKi8KLSAgIFVMT05HICAgU2NjYl9yZXMxOwotICAgVVNIT1JUICBTY2NiX01HUkZsYWdzOwotICAgVVNIT1JUICBTY2NiX3Nnc2VnOwotICAgVUNIQVIgICBTY2NiX3Njc2ltc2c7ICAgICAgICAgICAgLyogaWRlbnRpZnkgbXNnIGZvciBzZWxlY3Rpb24gKi8KLSAgIFVDSEFSICAgU2NjYl90YWc7Ci0gICBVQ0hBUiAgIFNjY2Jfc2NzaXN0YXQ7Ci0gICBVQ0hBUiAgIFNjY2JfaWRtc2c7ICAgICAgICAgICAgICAvKiBpbWFnZSBvZiBsYXN0IG1zZyBpbiAqLwotICAgUFNDQ0IgICBTY2NiX2ZvcndhcmRsaW5rOwotICAgUFNDQ0IgICBTY2NiX2JhY2tsaW5rOwotICAgVUxPTkcgICBTY2NiX3NhdmVkQVRDOwotICAgVUNIQVIgICBTYXZlX0NkYls2XTsKLSAgIFVDSEFSICAgU2F2ZV9DZGJMZW47Ci0gICBVQ0hBUiAgIFNjY2JfWGZlclN0YXRlOwotICAgVUxPTkcgICBTY2NiX1NHb2Zmc2V0OwotICAgfSBTQ0NCOwotCi0jZGVmaW5lIFNDQ0JfU0laRSBzaXplb2YoU0NDQikKKwl1bnNpZ25lZCBsb25nIFNjY2JfWGZlckNudDsJLyogYWN0dWFsIHRyYW5zZmVyIGNvdW50ICovCisJdW5zaWduZWQgbG9uZyBTY2NiX0FUQzsKKwl1bnNpZ25lZCBsb25nIFNjY2JWaXJ0RGF0YVB0cjsJLyogdmlydHVhbCBhZGRyIGZvciBPUy8yICovCisJdW5zaWduZWQgbG9uZyBTY2NiX3JlczE7CisJdW5zaWduZWQgc2hvcnQgU2NjYl9NR1JGbGFnczsKKwl1bnNpZ25lZCBzaG9ydCBTY2NiX3Nnc2VnOworCXVuc2lnbmVkIGNoYXIgU2NjYl9zY3NpbXNnOwkvKiBpZGVudGlmeSBtc2cgZm9yIHNlbGVjdGlvbiAqLworCXVuc2lnbmVkIGNoYXIgU2NjYl90YWc7CisJdW5zaWduZWQgY2hhciBTY2NiX3Njc2lzdGF0OworCXVuc2lnbmVkIGNoYXIgU2NjYl9pZG1zZzsJLyogaW1hZ2Ugb2YgbGFzdCBtc2cgaW4gKi8KKwlzdHJ1Y3Qgc2NjYiAqU2NjYl9mb3J3YXJkbGluazsKKwlzdHJ1Y3Qgc2NjYiAqU2NjYl9iYWNrbGluazsKKwl1bnNpZ25lZCBsb25nIFNjY2Jfc2F2ZWRBVEM7CisJdW5zaWduZWQgY2hhciBTYXZlX0NkYls2XTsKKwl1bnNpZ25lZCBjaGFyIFNhdmVfQ2RiTGVuOworCXVuc2lnbmVkIGNoYXIgU2NjYl9YZmVyU3RhdGU7CisJdW5zaWduZWQgbG9uZyBTY2NiX1NHb2Zmc2V0OworfTsKIAogI3ByYWdtYSBwYWNrKCkKIAotCi0KLSNkZWZpbmUgU0NTSV9JTklUSUFUT1JfQ09NTUFORCAgICAweDAwCi0jZGVmaW5lIFRBUkdFVF9NT0RFX0NPTU1BTkQgICAgICAgMHgwMQogI2RlZmluZSBTQ0FUVEVSX0dBVEhFUl9DT01NQU5EICAgIDB4MDIKICNkZWZpbmUgUkVTSURVQUxfQ09NTUFORCAgICAgICAgICAweDAzCiAjZGVmaW5lIFJFU0lEVUFMX1NHX0NPTU1BTkQgICAgICAgMHgwNAogI2RlZmluZSBSRVNFVF9DT01NQU5EICAgICAgICAgICAgIDB4ODEKIAorI2RlZmluZSBGX1VTRV9DTURfUSAgICAgICAgICAgICAgMHgyMAkvKkluaWRjYXRlcyBUQUdHRUQgY29tbWFuZC4gKi8KKyNkZWZpbmUgVEFHX1RZUEVfTUFTSyAgICAgICAgICAgIDB4QzAJLypUeXBlIG9mIHRhZyBtc2cgdG8gc2VuZC4gKi8KKyNkZWZpbmUgU0NDQl9EQVRBX1hGRVJfT1VUICAgICAgIDB4MTAJLyogV3JpdGUgKi8KKyNkZWZpbmUgU0NDQl9EQVRBX1hGRVJfSU4gICAgICAgIDB4MDgJLyogUmVhZCAqLwogCi0jZGVmaW5lIEZfVVNFX0NNRF9RICAgICAgICAgICAgICAweDIwICAgICAvKkluaWRjYXRlcyBUQUdHRUQgY29tbWFuZC4gKi8KLSNkZWZpbmUgVEFHX1RZUEVfTUFTSyAgICAgICAgICAgIDB4QzAgICAgIC8qVHlwZSBvZiB0YWcgbXNnIHRvIHNlbmQuICovCi0jZGVmaW5lIFRBR19RX01BU0sgICAgICAgICAgICAgICAweEUwCi0jZGVmaW5lIFNDQ0JfREFUQV9YRkVSX09VVCAgICAgICAweDEwICAgICAvKiBXcml0ZSAqLwotI2RlZmluZSBTQ0NCX0RBVEFfWEZFUl9JTiAgICAgICAgMHgwOCAgICAgLyogUmVhZCAqLworI2RlZmluZSBOT19BVVRPX1JFUVVFU1RfU0VOU0UgICAgMHgwMQkvKiBObyBSZXF1ZXN0IFNlbnNlIEJ1ZmZlciAqLwogCi0KLSNkZWZpbmUgRk9VUlRFRU5fQllURVMgICAgICAgICAgIDB4MDAgICAgIC8qIFJlcXVlc3QgU2Vuc2UgQnVmZmVyIHNpemUgKi8KLSNkZWZpbmUgTk9fQVVUT19SRVFVRVNUX1NFTlNFICAgIDB4MDEgICAgIC8qIE5vIFJlcXVlc3QgU2Vuc2UgQnVmZmVyICovCi0KLQotI2RlZmluZSBCVVNfRlJFRV9TVCAgICAgMCAgICAgICAKKyNkZWZpbmUgQlVTX0ZSRUVfU1QgICAgIDAKICNkZWZpbmUgU0VMRUNUX1NUICAgICAgIDEKLSNkZWZpbmUgU0VMRUNUX0JEUl9TVCAgIDIgICAgIC8qIFNlbGVjdCB3XCBCdXMgRGV2aWNlIFJlc2V0ICovCi0jZGVmaW5lIFNFTEVDVF9TTl9TVCAgICAzICAgICAvKiBTZWxlY3Qgd1wgU3luYyBOZWdvICovCi0jZGVmaW5lIFNFTEVDVF9XTl9TVCAgICA0ICAgICAvKiBTZWxlY3Qgd1wgV2lkZSBEYXRhIE5lZ28gKi8KLSNkZWZpbmUgU0VMRUNUX1FfU1QgICAgIDUgICAgIC8qIFNlbGVjdCB3XCBUYWdnZWQgUSdpbmcgKi8KKyNkZWZpbmUgU0VMRUNUX0JEUl9TVCAgIDIJLyogU2VsZWN0IHdcIEJ1cyBEZXZpY2UgUmVzZXQgKi8KKyNkZWZpbmUgU0VMRUNUX1NOX1NUICAgIDMJLyogU2VsZWN0IHdcIFN5bmMgTmVnbyAqLworI2RlZmluZSBTRUxFQ1RfV05fU1QgICAgNAkvKiBTZWxlY3Qgd1wgV2lkZSBEYXRhIE5lZ28gKi8KKyNkZWZpbmUgU0VMRUNUX1FfU1QgICAgIDUJLyogU2VsZWN0IHdcIFRhZ2dlZCBRJ2luZyAqLwogI2RlZmluZSBDT01NQU5EX1NUICAgICAgNgogI2RlZmluZSBEQVRBX09VVF9TVCAgICAgNwogI2RlZmluZSBEQVRBX0lOX1NUICAgICAgOAogI2RlZmluZSBESVNDT05ORUNUX1NUICAgOQotI2RlZmluZSBTVEFUVVNfU1QgICAgICAgMTAKICNkZWZpbmUgQUJPUlRfU1QgICAgICAgIDExCi0jZGVmaW5lIE1FU1NBR0VfU1QgICAgICAxMgotCiAKICNkZWZpbmUgRl9IT1NUX1hGRVJfRElSICAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgRl9BTExfWEZFUlJFRCAgICAgICAgICAgICAgICAgIDB4MDIKQEAgLTI0NywxNjMgKzE1MSwxMTUgQEAKICNkZWZpbmUgRl9PRERfQkFMTF9DTlQgICAgICAgICAgICAgICAgIDB4MTAKICNkZWZpbmUgRl9OT19EQVRBX1lFVCAgICAgICAgICAgICAgICAgIDB4ODAKIAotCiAjZGVmaW5lIEZfU1RBVFVTTE9BREVEICAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEZfTVNHTE9BREVEICAgICAgICAgICAgICAgICAgICAweDAyCiAjZGVmaW5lIEZfREVWX1NFTEVDVEVEICAgICAgICAgICAgICAgICAweDA0CiAKLQotI2RlZmluZSBTQ0NCX0NPTVBMRVRFICAgICAgICAgICAgICAgMHgwMCAgLyogU0NDQiBjb21wbGV0ZWQgd2l0aG91dCBlcnJvciAqLworI2RlZmluZSBTQ0NCX0NPTVBMRVRFICAgICAgICAgICAgICAgMHgwMAkvKiBTQ0NCIGNvbXBsZXRlZCB3aXRob3V0IGVycm9yICovCiAjZGVmaW5lIFNDQ0JfREFUQV9VTkRFUl9SVU4gICAgICAgICAweDBDCi0jZGVmaW5lIFNDQ0JfU0VMRUNUSU9OX1RJTUVPVVQgICAgICAweDExICAvKiBTZXQgU0NTSSBzZWxlY3Rpb24gdGltZWQgb3V0ICovCisjZGVmaW5lIFNDQ0JfU0VMRUNUSU9OX1RJTUVPVVQgICAgICAweDExCS8qIFNldCBTQ1NJIHNlbGVjdGlvbiB0aW1lZCBvdXQgKi8KICNkZWZpbmUgU0NDQl9EQVRBX09WRVJfUlVOICAgICAgICAgIDB4MTIKLSNkZWZpbmUgU0NDQl9VTkVYUEVDVEVEX0JVU19GUkVFICAgIDB4MTMgIC8qIFRhcmdldCBkcm9wcGVkIFNDU0kgQlNZICovCi0jZGVmaW5lIFNDQ0JfUEhBU0VfU0VRVUVOQ0VfRkFJTCAgICAweDE0ICAvKiBUYXJnZXQgYnVzIHBoYXNlIHNlcXVlbmNlIGZhaWx1cmUgKi8KKyNkZWZpbmUgU0NDQl9QSEFTRV9TRVFVRU5DRV9GQUlMICAgIDB4MTQJLyogVGFyZ2V0IGJ1cyBwaGFzZSBzZXF1ZW5jZSBmYWlsdXJlICovCiAKLSNkZWZpbmUgU0NDQl9JTlZBTElEX09QX0NPREUgICAgICAgIDB4MTYgIC8qIFNDQ0IgaW52YWxpZCBvcGVyYXRpb24gY29kZSAqLwotI2RlZmluZSBTQ0NCX0lOVkFMSURfU0NDQiAgICAgICAgICAgMHgxQSAgLyogSW52YWxpZCBTQ0NCIC0gYmFkIHBhcmFtZXRlciAqLwotI2RlZmluZSBTQ0NCX0dST1NTX0ZXX0VSUiAgICAgICAgICAgMHgyNyAgLyogTWFqb3IgcHJvYmxlbSEgKi8KLSNkZWZpbmUgU0NDQl9CTV9FUlIgICAgICAgICAgICAgICAgIDB4MzAgIC8qIEJ1c01hc3RlciBlcnJvci4gKi8KLSNkZWZpbmUgU0NDQl9QQVJJVFlfRVJSICAgICAgICAgICAgIDB4MzQgIC8qIFNDU0kgcGFyaXR5IGVycm9yICovCi0KLQotCi0jZGVmaW5lIFNDQ0JfSU5WQUxJRF9ESVJFQ1RJT04gICAgICAweDE4ICAvKiBJbnZhbGlkIHRhcmdldCBkaXJlY3Rpb24gKi8KLSNkZWZpbmUgU0NDQl9EVVBMSUNBVEVfU0NDQiAgICAgICAgIDB4MTkgIC8qIER1cGxpY2F0ZSBTQ0NCICovCi0jZGVmaW5lIFNDQ0JfU0NTSV9SU1QgICAgICAgICAgICAgICAweDM1ICAvKiBTQ1NJIFJFU0VUIGRldGVjdGVkLiAqLwotCisjZGVmaW5lIFNDQ0JfR1JPU1NfRldfRVJSICAgICAgICAgICAweDI3CS8qIE1ham9yIHByb2JsZW0hICovCisjZGVmaW5lIFNDQ0JfQk1fRVJSICAgICAgICAgICAgICAgICAweDMwCS8qIEJ1c01hc3RlciBlcnJvci4gKi8KKyNkZWZpbmUgU0NDQl9QQVJJVFlfRVJSICAgICAgICAgICAgIDB4MzQJLyogU0NTSSBwYXJpdHkgZXJyb3IgKi8KIAogI2RlZmluZSBTQ0NCX0lOX1BST0NFU1MgICAgICAgICAgICAweDAwCiAjZGVmaW5lIFNDQ0JfU1VDQ0VTUyAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgU0NDQl9BQk9SVCAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBTQ0NCX05PVF9GT1VORCAgICAgICAgICAgICAweDAzCiAjZGVmaW5lIFNDQ0JfRVJST1IgICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgU0NDQl9JTlZBTElEICAgICAgICAgICAgICAgMHgwNQotCi0jZGVmaW5lIFNDQ0JfU0laRSBzaXplb2YoU0NDQikKLQogCiAjZGVmaW5lICBPUklPTl9GV19SRVYgICAgICAzMTEwCiAKLSNkZWZpbmUgSEFSUF9SRVZEICAgIDEKKyNkZWZpbmUgUVVFVUVfREVQVEggICAgIDI1NCsxCS8qMSBmb3IgTm9ybWFsIGRpc2Nvbm5lY3QgMzIgZm9yIFEnaW5nLiAqLwogCi0KLSNkZWZpbmUgUVVFVUVfREVQVEggICAgIDI1NCsxICAgICAgICAgICAgLyoxIGZvciBOb3JtYWwgZGlzY29ubmVjdCAzMiBmb3IgUSdpbmcuICovCi0KLSNkZWZpbmUJTUFYX01CX0NBUkRTCTQJCQkJCS8qIE1heC4gbm8gb2YgY2FyZHMgc3VwcG9lcnRlZCBvbiBNb3RoZXIgQm9hcmQgKi8KLQotI2RlZmluZSBXSURFX1NDU0kgICAgICAgMQorI2RlZmluZQlNQVhfTUJfQ0FSRFMJNAkvKiBNYXguIG5vIG9mIGNhcmRzIHN1cHBvZXJ0ZWQgb24gTW90aGVyIEJvYXJkICovCiAKICNkZWZpbmUgTUFYX1NDU0lfVEFSICAgIDE2CiAjZGVmaW5lIE1BWF9MVU4gICAgICAgICAzMgogI2RlZmluZSBMVU5fTUFTSwkJCTB4MWYKIAotI2lmIGRlZmluZWQoSEFSUF9SRVZBKQotI2RlZmluZSBTR19CVUZfQ05UICAgICAgMTUgICAgICAgICAgICAgLypOdW1iZXIgb2YgcHJlZmV0Y2hlZCBlbGVtZW50cy4gKi8KLSNlbHNlCi0jZGVmaW5lIFNHX0JVRl9DTlQgICAgICAxNiAgICAgICAgICAgICAvKk51bWJlciBvZiBwcmVmZXRjaGVkIGVsZW1lbnRzLiAqLwotI2VuZGlmCisjZGVmaW5lIFNHX0JVRl9DTlQgICAgICAxNgkvKk51bWJlciBvZiBwcmVmZXRjaGVkIGVsZW1lbnRzLiAqLwogCi0jZGVmaW5lIFNHX0VMRU1FTlRfU0laRSA4ICAgICAgICAgICAgICAvKkVpZ2h0IGJ5dGUgcGVyIGVsZW1lbnQuICovCi0jZGVmaW5lIFNHX0xPQ0FMX01BU0sgICAweDAwMDAwMDAwTAotI2RlZmluZSBTR19FTEVNRU5UX01BU0sgMHhGRkZGRkZGRkwKKyNkZWZpbmUgU0dfRUxFTUVOVF9TSVpFIDgJLypFaWdodCBieXRlIHBlciBlbGVtZW50LiAqLwogCi0KLSNkZWZpbmUgUkRfSEFSUE9PTihpb3BvcnQpICAgICAgICAgIE9TX0luUG9ydEJ5dGUoKHUzMmJpdHMpaW9wb3J0KQotI2RlZmluZSBSRFdfSEFSUE9PTihpb3BvcnQpICAgICAgICAgT1NfSW5Qb3J0V29yZCgodTMyYml0cylpb3BvcnQpCi0jZGVmaW5lIFJEX0hBUlAzMihpb3BvcnQsb2Zmc2V0LGRhdGEpIChkYXRhID0gT1NfSW5Qb3J0TG9uZygodTMyYml0cykoaW9wb3J0ICsgb2Zmc2V0KSkpCi0jZGVmaW5lIFdSX0hBUlBPT04oaW9wb3J0LHZhbCkgICAgICBPU19PdXRQb3J0Qnl0ZSgodTMyYml0cylpb3BvcnQsKHUwOGJpdHMpIHZhbCkKLSNkZWZpbmUgV1JXX0hBUlBPT04oaW9wb3J0LHZhbCkgICAgICAgT1NfT3V0UG9ydFdvcmQoKHUzMmJpdHMpaW9wb3J0LCh1MTZiaXRzKXZhbCkKLSNkZWZpbmUgV1JfSEFSUDMyKGlvcG9ydCxvZmZzZXQsZGF0YSkgIE9TX091dFBvcnRMb25nKCh1MzJiaXRzKShpb3BvcnQgKyBvZmZzZXQpLCBkYXRhKQotCisjZGVmaW5lIFJEX0hBUlBPT04oaW9wb3J0KSAgICAgICAgICBpbmIoKHUzMilpb3BvcnQpCisjZGVmaW5lIFJEV19IQVJQT09OKGlvcG9ydCkgICAgICAgICBpbncoKHUzMilpb3BvcnQpCisjZGVmaW5lIFJEX0hBUlAzMihpb3BvcnQsb2Zmc2V0LGRhdGEpIChkYXRhID0gaW5sKCh1MzIpKGlvcG9ydCArIG9mZnNldCkpKQorI2RlZmluZSBXUl9IQVJQT09OKGlvcG9ydCx2YWwpICAgICAgb3V0YigodTgpIHZhbCwgKHUzMilpb3BvcnQpCisjZGVmaW5lIFdSV19IQVJQT09OKGlvcG9ydCx2YWwpICAgICAgIG91dHcoKHUxNil2YWwsICh1MzIpaW9wb3J0KQorI2RlZmluZSBXUl9IQVJQMzIoaW9wb3J0LG9mZnNldCxkYXRhKSAgb3V0bChkYXRhLCAodTMyKShpb3BvcnQgKyBvZmZzZXQpKQogCiAjZGVmaW5lICBUQVJfU1lOQ19NQVNLICAgICAoQklUKDcpK0JJVCg2KSkKLSNkZWZpbmUgIFNZTkNfVU5LTk9XTiAgICAgIDB4MDAKICNkZWZpbmUgIFNZTkNfVFJZSU5HICAgICAgICAgICAgICAgQklUKDYpCiAjZGVmaW5lICBTWU5DX1NVUFBPUlRFRCAgICAoQklUKDcpK0JJVCg2KSkKIAogI2RlZmluZSAgVEFSX1dJREVfTUFTSyAgICAgKEJJVCg1KStCSVQoNCkpCi0jZGVmaW5lICBXSURFX0RJU0FCTEVEICAgICAweDAwCiAjZGVmaW5lICBXSURFX0VOQUJMRUQgICAgICAgICAgICAgIEJJVCg0KQogI2RlZmluZSAgV0lERV9ORUdPQ0lBVEVEICAgQklUKDUpCiAKICNkZWZpbmUgIFRBUl9UQUdfUV9NQVNLICAgIChCSVQoMykrQklUKDIpKQotI2RlZmluZSAgVEFHX1FfVU5LTk9XTiAgICAgMHgwMAogI2RlZmluZSAgVEFHX1FfVFJZSU5HICAgICAgICAgICAgICBCSVQoMikKICNkZWZpbmUgIFRBR19RX1JFSkVDVCAgICAgIEJJVCgzKQotI2RlZmluZSAgVEFHX1FfU1VQUE9SVEVEICAgKEJJVCgzKStCSVQoMikpCiAKICNkZWZpbmUgIFRBUl9BTExPV19ESVNDICAgIEJJVCgwKQogCi0KICNkZWZpbmUgIEVFX1NZTkNfTUFTSyAgICAgIChCSVQoMCkrQklUKDEpKQotI2RlZmluZSAgRUVfU1lOQ19BU1lOQyAgICAgMHgwMAogI2RlZmluZSAgRUVfU1lOQ181TUIgICAgICAgQklUKDApCiAjZGVmaW5lICBFRV9TWU5DXzEwTUIgICAgICBCSVQoMSkKICNkZWZpbmUgIEVFX1NZTkNfMjBNQiAgICAgIChCSVQoMCkrQklUKDEpKQogCi0jZGVmaW5lICBFRV9BTExPV19ESVNDICAgICBCSVQoNikKICNkZWZpbmUgIEVFX1dJREVfU0NTSSAgICAgIEJJVCg3KQogCitzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gewogCi10eXBlZGVmIHN0cnVjdCBTQ0NCTWdyX3Rhcl9pbmZvICpQU0NDQk1ncl90YXJfaW5mbzsKKwlzdHJ1Y3Qgc2NjYiAqVGFyU2VsUV9IZWFkOworCXN0cnVjdCBzY2NiICpUYXJTZWxRX1RhaWw7CisJdW5zaWduZWQgY2hhciBUYXJMVU5fQ0E7CS8qQ29udGluZ2VudCBBbGxnaWFuY2UgKi8KKwl1bnNpZ25lZCBjaGFyIFRhclRhZ1FfQ250OworCXVuc2lnbmVkIGNoYXIgVGFyU2VsUV9DbnQ7CisJdW5zaWduZWQgY2hhciBUYXJTdGF0dXM7CisJdW5zaWduZWQgY2hhciBUYXJFRVZhbHVlOworCXVuc2lnbmVkIGNoYXIgVGFyU3luY0N0cmw7CisJdW5zaWduZWQgY2hhciBUYXJSZXNlcnZlZFsyXTsJLyogZm9yIGFsaWdubWVudCAqLworCXVuc2lnbmVkIGNoYXIgTHVuRGlzY1FfSWR4W01BWF9MVU5dOworCXVuc2lnbmVkIGNoYXIgVGFyTFVOQnVzeVtNQVhfTFVOXTsKK307CiAKLQotdHlwZWRlZiBzdHJ1Y3QgU0NDQk1ncl90YXJfaW5mbyB7Ci0KLSAgIFBTQ0NCICAgIFRhclNlbFFfSGVhZDsKLSAgIFBTQ0NCICAgIFRhclNlbFFfVGFpbDsKLSAgIFVDSEFSICAgIFRhckxVTl9DQTsgICAgICAgIC8qQ29udGluZ2VudCBBbGxnaWFuY2UgKi8KLSAgIFVDSEFSICAgIFRhclRhZ1FfQ250OwotICAgVUNIQVIgICAgVGFyU2VsUV9DbnQ7Ci0gICBVQ0hBUiAgICBUYXJTdGF0dXM7Ci0gICBVQ0hBUiAgICBUYXJFRVZhbHVlOwotICAgVUNIQVIgCVRhclN5bmNDdHJsOwotICAgVUNIQVIgCVRhclJlc2VydmVkWzJdOwkJCS8qIGZvciBhbGlnbm1lbnQgKi8gCi0gICBVQ0hBUiAJTHVuRGlzY1FfSWR4W01BWF9MVU5dOwotICAgVUNIQVIgICAgVGFyTFVOQnVzeVtNQVhfTFVOXTsKLX0gU0NDQk1HUl9UQVJfSU5GTzsKLQotdHlwZWRlZiBzdHJ1Y3QgTlZSQU1JbmZvIHsKLQlVQ0hBUgkJbmlNb2RlbDsJCQkJCQkJCS8qIE1vZGVsIE5vLiBvZiBjYXJkICovCi0JVUNIQVIJCW5pQ2FyZE5vOwkJCQkJCQkvKiBDYXJkIG5vLiAqLwotCVVMT05HCQluaUJhc2VBZGRyOwkJCQkJCQkvKiBQb3J0IEFkZHJlc3Mgb2YgY2FyZCAqLwotCVVDSEFSCQluaVN5c0NvbmY7CQkJCQkJCS8qIEFkYXB0ZXIgQ29uZmlndXJhdGlvbiBieXRlIC0gQnl0ZSAxNiBvZiBlZXByb20gbWFwICovCi0JVUNIQVIJCW5pU2NzaUNvbmY7CQkJCQkJCS8qIFNDU0kgQ29uZmlndXJhdGlvbiBieXRlIC0gQnl0ZSAxNyBvZiBlZXByb20gbWFwICovCi0JVUNIQVIJCW5pU2NhbUNvbmY7CQkJCQkJCS8qIFNDQU0gQ29uZmlndXJhdGlvbiBieXRlIC0gQnl0ZSAyMCBvZiBlZXByb20gbWFwICovCi0JVUNIQVIJCW5pQWRhcElkOwkJCQkJCQkvKiBIb3N0IEFkYXB0ZXIgSUQgLSBCeXRlIDI0IG9mIGVlcnBvbSBtYXAgKi8KLQlVQ0hBUgkJbmlTeW5jVGJsW01BWF9TQ1NJX1RBUiAvIDJdOwkvKiBTeW5jL1dpZGUgYnl0ZSBvZiB0YXJnZXRzICovCi0JVUNIQVIJCW5pU2NhbVRibFtNQVhfU0NTSV9UQVJdWzRdOwkvKiBDb21wcmVzc2VkIFNjYW0gbmFtZSBzdHJpbmcgb2YgVGFyZ2V0cyAqLwotfU5WUkFNSU5GTzsKLQotdHlwZWRlZiBOVlJBTUlORk8gKlBOVlJhbUluZm87CitzdHJ1Y3QgbnZyYW1faW5mbyB7CisJdW5zaWduZWQgY2hhciBuaU1vZGVsOwkvKiBNb2RlbCBOby4gb2YgY2FyZCAqLworCXVuc2lnbmVkIGNoYXIgbmlDYXJkTm87CS8qIENhcmQgbm8uICovCisJdW5zaWduZWQgbG9uZyBuaUJhc2VBZGRyOwkvKiBQb3J0IEFkZHJlc3Mgb2YgY2FyZCAqLworCXVuc2lnbmVkIGNoYXIgbmlTeXNDb25mOwkvKiBBZGFwdGVyIENvbmZpZ3VyYXRpb24gYnl0ZSAtIEJ5dGUgMTYgb2YgZWVwcm9tIG1hcCAqLworCXVuc2lnbmVkIGNoYXIgbmlTY3NpQ29uZjsJLyogU0NTSSBDb25maWd1cmF0aW9uIGJ5dGUgLSBCeXRlIDE3IG9mIGVlcHJvbSBtYXAgKi8KKwl1bnNpZ25lZCBjaGFyIG5pU2NhbUNvbmY7CS8qIFNDQU0gQ29uZmlndXJhdGlvbiBieXRlIC0gQnl0ZSAyMCBvZiBlZXByb20gbWFwICovCisJdW5zaWduZWQgY2hhciBuaUFkYXBJZDsJLyogSG9zdCBBZGFwdGVyIElEIC0gQnl0ZSAyNCBvZiBlZXJwb20gbWFwICovCisJdW5zaWduZWQgY2hhciBuaVN5bmNUYmxbTUFYX1NDU0lfVEFSIC8gMl07CS8qIFN5bmMvV2lkZSBieXRlIG9mIHRhcmdldHMgKi8KKwl1bnNpZ25lZCBjaGFyIG5pU2NhbVRibFtNQVhfU0NTSV9UQVJdWzRdOwkvKiBDb21wcmVzc2VkIFNjYW0gbmFtZSBzdHJpbmcgb2YgVGFyZ2V0cyAqLworfTsKIAogI2RlZmluZQlNT0RFTF9MVAkJMQogI2RlZmluZQlNT0RFTF9ETAkJMgogI2RlZmluZQlNT0RFTF9MVwkJMwogI2RlZmluZQlNT0RFTF9EVwkJNAogCitzdHJ1Y3Qgc2NjYl9jYXJkIHsKKwlzdHJ1Y3Qgc2NjYiAqY3VycmVudFNDQ0I7CisJc3RydWN0IHNjY2JfbWdyX2luZm8gKmNhcmRJbmZvOwogCi10eXBlZGVmIHN0cnVjdCBTQ0NCY2FyZCB7Ci0gICBQU0NDQiBjdXJyZW50U0NDQjsKLSAgIFBTQ0NCTUdSX0lORk8gY2FyZEluZm87CisJdW5zaWduZWQgbG9uZyBpb1BvcnQ7CiAKLSAgIFVMT05HIGlvUG9ydDsKKwl1bnNpZ25lZCBzaG9ydCBjbWRDb3VudGVyOworCXVuc2lnbmVkIGNoYXIgZGlzY1FDb3VudDsKKwl1bnNpZ25lZCBjaGFyIHRhZ1FfTHN0OworCXVuc2lnbmVkIGNoYXIgY2FyZEluZGV4OworCXVuc2lnbmVkIGNoYXIgc2NhbkluZGV4OworCXVuc2lnbmVkIGNoYXIgZ2xvYmFsRmxhZ3M7CisJdW5zaWduZWQgY2hhciBvdXJJZDsKKwlzdHJ1Y3QgbnZyYW1faW5mbyAqcE52UmFtSW5mbzsKKwlzdHJ1Y3Qgc2NjYiAqZGlzY1FfVGJsW1FVRVVFX0RFUFRIXTsKIAotICAgVVNIT1JUIGNtZENvdW50ZXI7Ci0gICBVQ0hBUiAgZGlzY1FDb3VudDsKLSAgIFVDSEFSICB0YWdRX0xzdDsgCi0gICBVQ0hBUiBjYXJkSW5kZXg7Ci0gICBVQ0hBUiBzY2FuSW5kZXg7Ci0gICBVQ0hBUiBnbG9iYWxGbGFnczsKLSAgIFVDSEFSIG91cklkOwotICAgUE5WUmFtSW5mbyBwTnZSYW1JbmZvOwotICAgUFNDQ0IgZGlzY1FfVGJsW1FVRVVFX0RFUFRIXTsgCi0gICAgICAKLX1TQ0NCQ0FSRDsKLQotdHlwZWRlZiBzdHJ1Y3QgU0NDQmNhcmQgKlBTQ0NCY2FyZDsKLQorfTsKIAogI2RlZmluZSBGX1RBR19TVEFSVEVECQkweDAxCiAjZGVmaW5lIEZfQ09OTFVOX0lPCQkJMHgwMgpAQCAtNDE0LDEzICsyNzAsMTAgQEAKICNkZWZpbmUgRl9ORVdfU0NDQl9DTUQJCTB4NDAKICNkZWZpbmUgRl9VUERBVEVfRUVQUk9NCQkweDgwCiAKLQogI2RlZmluZSAgSURfU1RSSU5HX0xFTkdUSCAgMzIKLSNkZWZpbmUgIFRZUEVfQ09ERTAgICAgICAgIDB4NjMgICAgICAgICAgIC8qTGV2ZWwyIE1zdHIgKGJpdHMgNy02KSwgICovCisjZGVmaW5lICBUWVBFX0NPREUwICAgICAgICAweDYzCS8qTGV2ZWwyIE1zdHIgKGJpdHMgNy02KSwgICovCiAKLSNkZWZpbmUgIFRZUEVfQ09ERTEgICAgICAgIDAwICAgICAgICAgICAgIC8qTm8gSUQgeWV0ICovCi0KLSNkZWZpbmUgIFNMVl9UWVBFX0NPREUwICAgIDB4QTMgICAgICAgICAgIC8qUHJpb3JpdHkgQml0IHNldCAoYml0cyA3LTYpLCAgKi8KKyNkZWZpbmUgIFNMVl9UWVBFX0NPREUwICAgIDB4QTMJLypQcmlvcml0eSBCaXQgc2V0IChiaXRzIDctNiksICAqLwogCiAjZGVmaW5lICBBU1NJR05fSUQgICAweDAwCiAjZGVmaW5lICBTRVRfUF9GTEFHICAweDAxCkBAIC00MzAsOTcgKzI4Myw0MiBAQAogCiAjZGVmaW5lICBJRF8wXzcgICAgICAweDE4CiAjZGVmaW5lICBJRF84X0YgICAgICAweDExCi0jZGVmaW5lICBJRF8xMF8xNyAgICAweDEyCi0jZGVmaW5lICBJRF8xOF8xRiAgICAweDBCCiAjZGVmaW5lICBNSVNDX0NPREUgICAweDE0CiAjZGVmaW5lICBDTFJfUF9GTEFHICAweDE4Ci0jZGVmaW5lICBMT0NBVEVfT04gICAweDEyCi0jZGVmaW5lICBMT0NBVEVfT0ZGICAweDBCCi0KLSNkZWZpbmUgIExWTF8xX01TVCAgIDB4MDAKLSNkZWZpbmUgIExWTF8yX01TVCAgIDB4NDAKLSNkZWZpbmUgIERPTV9MVkxfMiAgIDB4QzAKLQogCiAjZGVmaW5lICBJTklUX1NFTFREICAweDAxCiAjZGVmaW5lICBMRVZFTDJfVEFSICAweDAyCiAKLQotZW51bSBzY2FtX2lkX3N0IHsgSUQwLElEMSxJRDIsSUQzLElENCxJRDUsSUQ2LElENyxJRDgsSUQ5LElEMTAsSUQxMSxJRDEyLAotICAgICAgICAgICAgICAgICAgSUQxMyxJRDE0LElEMTUsSURfVU5VU0VELElEX1VOQVNTSUdORUQsSURfQVNTSUdORUQsTEVHQUNZLAotICAgICAgICAgICAgICAgICAgQ0xSX1BSSU9SSVRZLE5PX0lEX0FWQUlMIH07CitlbnVtIHNjYW1faWRfc3QgeyBJRDAsIElEMSwgSUQyLCBJRDMsIElENCwgSUQ1LCBJRDYsIElENywgSUQ4LCBJRDksIElEMTAsIElEMTEsCisJICAgIElEMTIsCisJSUQxMywgSUQxNCwgSUQxNSwgSURfVU5VU0VELCBJRF9VTkFTU0lHTkVELCBJRF9BU1NJR05FRCwgTEVHQUNZLAorCUNMUl9QUklPUklUWSwgTk9fSURfQVZBSUwKK307CiAKIHR5cGVkZWYgc3RydWN0IFNDQ0JzY2FtX2luZm8gewogCi0gICBVQ0hBUiAgICBpZF9zdHJpbmdbSURfU1RSSU5HX0xFTkdUSF07Ci0gICBlbnVtIHNjYW1faWRfc3Qgc3RhdGU7Ci0gICAgCi19IFNDQ0JTQ0FNX0lORk8sICpQU0NDQlNDQU1fSU5GTzsKKwl1bnNpZ25lZCBjaGFyIGlkX3N0cmluZ1tJRF9TVFJJTkdfTEVOR1RIXTsKKwllbnVtIHNjYW1faWRfc3Qgc3RhdGU7CiAKK30gU0NDQlNDQU1fSU5GTzsKIAotI2RlZmluZSAgU0NTSV9URVNUX1VOSVRfUkVBRFkgICAgMHgwMAotI2RlZmluZSAgU0NTSV9SRVpFUk9fVU5JVCAgICAgICAgMHgwMQogI2RlZmluZSAgU0NTSV9SRVFVRVNUX1NFTlNFICAgICAgMHgwMwotI2RlZmluZSAgU0NTSV9GT1JNQVRfVU5JVCAgICAgICAgMHgwNAotI2RlZmluZSAgU0NTSV9SRUFTU0lHTiAgICAgICAgICAgMHgwNwogI2RlZmluZSAgU0NTSV9SRUFEICAgICAgICAgICAgICAgMHgwOAogI2RlZmluZSAgU0NTSV9XUklURSAgICAgICAgICAgICAgMHgwQQotI2RlZmluZSAgU0NTSV9TRUVLICAgICAgICAgICAgICAgMHgwQgotI2RlZmluZSAgU0NTSV9JTlFVSVJZICAgICAgICAgICAgMHgxMgotI2RlZmluZSAgU0NTSV9NT0RFX1NFTEVDVCAgICAgICAgMHgxNQotI2RlZmluZSAgU0NTSV9SRVNFUlZFX1VOSVQgICAgICAgMHgxNgotI2RlZmluZSAgU0NTSV9SRUxFQVNFX1VOSVQgICAgICAgMHgxNwotI2RlZmluZSAgU0NTSV9NT0RFX1NFTlNFICAgICAgICAgMHgxQQogI2RlZmluZSAgU0NTSV9TVEFSVF9TVE9QX1VOSVQgICAgMHgxQgotI2RlZmluZSAgU0NTSV9TRU5EX0RJQUdOT1NUSUMgICAgMHgxRAotI2RlZmluZSAgU0NTSV9SRUFEX0NBUEFDSVRZICAgICAgMHgyNQogI2RlZmluZSAgU0NTSV9SRUFEX0VYVEVOREVEICAgICAgMHgyOAogI2RlZmluZSAgU0NTSV9XUklURV9FWFRFTkRFRCAgICAgMHgyQQotI2RlZmluZSAgU0NTSV9TRUVLX0VYVEVOREVEICAgICAgMHgyQgogI2RlZmluZSAgU0NTSV9XUklURV9BTkRfVkVSSUZZICAgMHgyRQotI2RlZmluZSAgU0NTSV9WRVJJRlkgICAgICAgICAgICAgMHgyRgotI2RlZmluZSAgU0NTSV9SRUFEX0RFRkVDVF9EQVRBICAgMHgzNwotI2RlZmluZSAgU0NTSV9XUklURV9CVUZGRVIgICAgICAgMHgzQgotI2RlZmluZSAgU0NTSV9SRUFEX0JVRkZFUiAgICAgICAgMHgzQwotI2RlZmluZSAgU0NTSV9SRUNWX0RJQUdOT1NUSUMgICAgMHgxQwotI2RlZmluZSAgU0NTSV9SRUFEX0xPTkcgICAgICAgICAgMHgzRQotI2RlZmluZSAgU0NTSV9XUklURV9MT05HICAgICAgICAgMHgzRgotI2RlZmluZSAgU0NTSV9MQVNUX1NDU0lfQ01ORCAgICAgU0NTSV9XUklURV9MT05HCi0jZGVmaW5lICBTQ1NJX0lOVkFMSURfQ01ORCAgICAgICAweEZGCi0KLQogCiAjZGVmaW5lICBTU0dPT0QgICAgICAgICAgICAgICAgICAweDAwCiAjZGVmaW5lICBTU0NIRUNLICAgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lICBTU0NPTkRfTUVUICAgICAgICAgICAgICAweDA0Ci0jZGVmaW5lICBTU0JVU1kgICAgICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lICBTU1JFU0VSVkFUSU9OX0NPTkZMSUNUICAweDE4Ci0jZGVmaW5lICBTU0NNRF9URVJNICAgICAgICAgICAgICAweDIyCiAjZGVmaW5lICBTU1FfRlVMTCAgICAgICAgICAgICAgICAweDI4CiAKLQotI2RlZmluZSAgU0tOT19TRU4gICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSAgU0tSRUNPVl9FUlIgICAgICAgICAgICAgMHgwMQotI2RlZmluZSAgU0tOT1RfUkRZICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSAgU0tNRURfRVJSICAgICAgICAgICAgICAgMHgwMwotI2RlZmluZSAgU0tIV19FUlIgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZSAgU0tJTExfUkVRICAgICAgICAgICAgICAgMHgwNQotI2RlZmluZSAgU0tVTklUX0FUVE4gICAgICAgICAgICAgMHgwNgotI2RlZmluZSAgU0tEQVRBX1BST1RFQ1QgICAgICAgICAgMHgwNwotI2RlZmluZSAgU0tCTE5LX0NISyAgICAgICAgICAgICAgMHgwOAotI2RlZmluZSAgU0tDUFlfQUJPUlQgICAgICAgICAgICAgMHgwQQotI2RlZmluZSAgU0tBQk9SVF9DTUQgICAgICAgICAgICAgMHgwQgotI2RlZmluZSAgU0tFUVVBTCAgICAgICAgICAgICAgICAgMHgwQwotI2RlZmluZSAgU0tWT0xfT1ZGICAgICAgICAgICAgICAgMHgwRAotI2RlZmluZSAgU0tNSVNfQ01QICAgICAgICAgICAgICAgMHgwRQotCi0KICNkZWZpbmUgIFNNQ01EX0NPTVAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgIFNNRVhUICAgICAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgIFNNU0FWRV9EQVRBX1BUUiAgICAgICAgIDB4MDIKICNkZWZpbmUgIFNNUkVTVF9EQVRBX1BUUiAgICAgICAgIDB4MDMKICNkZWZpbmUgIFNNRElTQyAgICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgIFNNSU5JVF9ERVRFQ19FUlIgICAgICAgIDB4MDUKICNkZWZpbmUgIFNNQUJPUlQgICAgICAgICAgICAgICAgIDB4MDYKICNkZWZpbmUgIFNNUkVKRUNUICAgICAgICAgICAgICAgIDB4MDcKICNkZWZpbmUgIFNNTk9fT1AgICAgICAgICAgICAgICAgIDB4MDgKQEAgLTUzMyw2MiArMzMxLDMxIEBACiAjZGVmaW5lICBTTUlERU5UICAgICAgICAgICAgICAgICAweDgwCiAjZGVmaW5lICBESVNDX1BSSVYgICAgICAgICAgICAgICAweDQwCiAKLQogI2RlZmluZSAgU01TWU5DICAgICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSAgU00xME1CUyAgICAgICAgICAgICAgICAgMHgxOSAgICAgLyogMTAwbnMgICAgICAgICAgICovCi0jZGVmaW5lICBTTTVNQlMgICAgICAgICAgICAgICAgICAweDMyICAgICAvKiAyMDBucyAgICAgICAgICAgKi8KLSNkZWZpbmUgIFNNT0ZGU0VUICAgICAgICAgICAgICAgIDB4MEYgICAgIC8qIE1heG9mZnNldCB2YWx1ZSAqLwogI2RlZmluZSAgU01XRFRSICAgICAgICAgICAgICAgICAgMHgwMwogI2RlZmluZSAgU004QklUICAgICAgICAgICAgICAgICAgMHgwMAogI2RlZmluZSAgU00xNkJJVCAgICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSAgU00zMkJJVCAgICAgICAgICAgICAgICAgMHgwMgotI2RlZmluZSAgU01JR05PUldSICAgICAgICAgICAgICAgMHgyMyAgICAgLyogSWdub3JlIFdpZGUgUmVzaWR1ZSAqLwotCi0KLSNkZWZpbmUgIEFSQklUUkFUSU9OX0RFTEFZICAgICAgIDB4MDEgICAgIC8qIDIuNHVzIHVzaW5nIGEgNDBNaHogY2xvY2sgKi8KLSNkZWZpbmUgIEJVU19TRVRUTEVfREVMQVkgICAgICAgIDB4MDEgICAgIC8qIDQwMG5zICovCi0jZGVmaW5lICBCVVNfQ0xFQVJfREVMQVkgICAgICAgICAweDAxICAgICAvKiA4MDBucyAqLwotCi0KLQotI2RlZmluZSAgU1BIQVNFX1RPICAgICAgICAgICAgICAgMHgwQSAgLyogMTAgc2Vjb25kIHRpbWVvdXQgd2FpdGluZyBmb3IgKi8KLSNkZWZpbmUgIFNDTURfVE8gICAgICAgICAgICAgICAgIDB4MEYgIC8qIE92ZXJhbGwgY29tbWFuZCB0aW1lb3V0ICovCi0KLQorI2RlZmluZSAgU01JR05PUldSICAgICAgICAgICAgICAgMHgyMwkvKiBJZ25vcmUgV2lkZSBSZXNpZHVlICovCiAKICNkZWZpbmUgIFNJWF9CWVRFX0NNRCAgICAgICAgICAgIDB4MDYKLSNkZWZpbmUgIFRFTl9CWVRFX0NNRCAgICAgICAgICAgIDB4MEEKICNkZWZpbmUgIFRXRUxWRV9CWVRFX0NNRCAgICAgICAgIDB4MEMKIAogI2RlZmluZSAgQVNZTkMgICAgICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSAgUEVSSTI1TlMgICAgICAgICAgICAgICAgMHgwNiAgLyogMjUvNG5zIHRvIG5leHQgY2xvY2sgZm9yIHhib3cuICovCi0jZGVmaW5lICBTWU5DMTBNQlMgICAgICAgICAgICAgICAweDE5Ci0jZGVmaW5lICBTWU5DNU1CUyAgICAgICAgICAgICAgICAweDMyCi0jZGVmaW5lICBNQVhfT0ZGU0VUICAgICAgICAgICAgICAweDBGICAvKiBNYXhieXRlb2Zmc2V0IGZvciBTeW5jIFhmZXJzICovCi0KKyNkZWZpbmUgIE1BWF9PRkZTRVQgICAgICAgICAgICAgIDB4MEYJLyogTWF4Ynl0ZW9mZnNldCBmb3IgU3luYyBYZmVycyAqLwogCiAjZGVmaW5lICBFRVBST01fV0RfQ05UICAgICAyNTYKIAogI2RlZmluZSAgRUVQUk9NX0NIRUNLX1NVTSAgMAogI2RlZmluZSAgRldfU0lHTkFUVVJFICAgICAgMgogI2RlZmluZSAgTU9ERUxfTlVNQl8wICAgICAgNAotI2RlZmluZSAgTU9ERUxfTlVNQl8xICAgICAgNQogI2RlZmluZSAgTU9ERUxfTlVNQl8yICAgICAgNgotI2RlZmluZSAgTU9ERUxfTlVNQl8zICAgICAgNwogI2RlZmluZSAgTU9ERUxfTlVNQl80ICAgICAgOAotI2RlZmluZSAgTU9ERUxfTlVNQl81ICAgICAgOQotI2RlZmluZSAgSU9fQkFTRV9BRERSICAgICAgMTAKLSNkZWZpbmUgIElSUV9OVU1CRVIgICAgICAgIDEyCi0jZGVmaW5lICBQQ0lfSU5UX1BJTiAgICAgICAxMwotI2RlZmluZSAgQlVTX0RFTEFZICAgICAgICAgMTQgICAgICAgLypPbiB0aW1lIGluIGJ5dGUgMTQgb2ZmIGRlbGF5IGluIDE1ICovCiAjZGVmaW5lICBTWVNURU1fQ09ORklHICAgICAxNgogI2RlZmluZSAgU0NTSV9DT05GSUcgICAgICAgMTcKICNkZWZpbmUgIEJJT1NfQ09ORklHICAgICAgIDE4Ci0jZGVmaW5lICBTUElOX1VQX0RFTEFZICAgICAxOQogI2RlZmluZSAgU0NBTV9DT05GSUcgICAgICAgMjAKICNkZWZpbmUgIEFEQVBURVJfU0NTSV9JRCAgIDI0CiAKLQogI2RlZmluZSAgSUdOT1JFX0JfU0NBTiAgICAgMzIKICNkZWZpbmUgIFNFTkRfU1RBUlRfRU5BICAgIDM0CiAjZGVmaW5lICBERVZJQ0VfRU5BQkxFICAgICAzNgpAQCAtNjAzLDcxNyArMzcwLDQwNSBAQAogI2RlZmluZSAgU1lOQ19SQVRFX1RCTGNkICAgNTAKICNkZWZpbmUgIFNZTkNfUkFURV9UQkxlZiAgIDUyCiAKKyNkZWZpbmUgIEVFX1NDQU1CQVNFICAgICAgMjU2CiAKKyNkZWZpbmUgIFNDQU1fRU5BQkxFRCAgIEJJVCgyKQorI2RlZmluZSAgU0NBTV9MRVZFTDIgICAgQklUKDMpCiAKLSNkZWZpbmUgIEVFX1NDQU1CQVNFICAgICAgMjU2IAorI2RlZmluZQlSRU5FR09fRU5BCQlCSVRXKDEwKQorI2RlZmluZQlDT05OSU9fRU5BCQlCSVRXKDExKQorI2RlZmluZSAgR1JFRU5fUENfRU5BICAgQklUVygxMikKIAorI2RlZmluZSAgQVVUT19SQVRFXzAwICAgMDAKKyNkZWZpbmUgIEFVVE9fUkFURV8wNSAgIDAxCisjZGVmaW5lICBBVVRPX1JBVEVfMTAgICAwMgorI2RlZmluZSAgQVVUT19SQVRFXzIwICAgMDMKIAorI2RlZmluZSAgV0lERV9ORUdPX0JJVCAgICAgQklUKDcpCisjZGVmaW5lICBESVNDX0VOQUJMRV9CSVQgICBCSVQoNikKIAotICAgI2RlZmluZSAgRE9NX01BU1RFUiAgICAgKEJJVCgwKSArIEJJVCgxKSkKLSAgICNkZWZpbmUgIFNDQU1fRU5BQkxFRCAgIEJJVCgyKQotICAgI2RlZmluZSAgU0NBTV9MRVZFTDIgICAgQklUKDMpCisjZGVmaW5lICBocF92ZW5kb3JfaWRfMCAgICAgICAweDAwCS8qIExTQiAqLworI2RlZmluZSAgT1JJT05fVkVORF8wICAgMHg0QgogCisjZGVmaW5lICBocF92ZW5kb3JfaWRfMSAgICAgICAweDAxCS8qIE1TQiAqLworI2RlZmluZSAgT1JJT05fVkVORF8xICAgMHgxMAogCi0JI2RlZmluZQlSRU5FR09fRU5BCQlCSVRXKDEwKQotCSNkZWZpbmUJQ09OTklPX0VOQQkJQklUVygxMSkKLSAgICNkZWZpbmUgIEdSRUVOX1BDX0VOQSAgIEJJVFcoMTIpCisjZGVmaW5lICBocF9kZXZpY2VfaWRfMCAgICAgICAweDAyCS8qIExTQiAqLworI2RlZmluZSAgT1JJT05fREVWXzAgICAgMHgzMAogCi0KLSAgICNkZWZpbmUgIEFVVE9fUkFURV8wMCAgIDAwCi0gICAjZGVmaW5lICBBVVRPX1JBVEVfMDUgICAwMQotICAgI2RlZmluZSAgQVVUT19SQVRFXzEwICAgMDIKLSAgICNkZWZpbmUgIEFVVE9fUkFURV8yMCAgIDAzCi0KLSAgICNkZWZpbmUgIFdJREVfTkVHT19CSVQgICAgIEJJVCg3KQotICAgI2RlZmluZSAgRElTQ19FTkFCTEVfQklUICAgQklUKDYpCi0KLQotCi0gICAjZGVmaW5lICBocF92ZW5kb3JfaWRfMCAgICAgICAweDAwCQkvKiBMU0IgKi8KLSAgICAgICNkZWZpbmUgIE9SSU9OX1ZFTkRfMCAgIDB4NEIKLSAKLSAgICNkZWZpbmUgIGhwX3ZlbmRvcl9pZF8xICAgICAgIDB4MDEJCS8qIE1TQiAqLwotICAgICAgI2RlZmluZSAgT1JJT05fVkVORF8xICAgMHgxMAotCi0gICAjZGVmaW5lICBocF9kZXZpY2VfaWRfMCAgICAgICAweDAyCQkvKiBMU0IgKi8KLSAgICAgICNkZWZpbmUgIE9SSU9OX0RFVl8wICAgIDB4MzAgCi0KLSAgICNkZWZpbmUgIGhwX2RldmljZV9pZF8xICAgICAgIDB4MDMJCS8qIE1TQiAqLwotICAgICAgI2RlZmluZSAgT1JJT05fREVWXzEgICAgMHg4MSAKKyNkZWZpbmUgIGhwX2RldmljZV9pZF8xICAgICAgIDB4MDMJLyogTVNCICovCisjZGVmaW5lICBPUklPTl9ERVZfMSAgICAweDgxCiAKIAkvKiBTdWIgVmVuZG9yIElEIGFuZCBTdWIgRGV2aWNlIElEIG9ubHkgYXZhaWxhYmxlIGluCi0JCUhhcnBvb24gVmVyc2lvbiAyIGFuZCBoaWdoZXIgKi8KKwkgICBIYXJwb29uIFZlcnNpb24gMiBhbmQgaGlnaGVyICovCiAKLSAgICNkZWZpbmUgIGhwX3N1Yl92ZW5kb3JfaWRfMCAgIDB4MDQJCS8qIExTQiAqLwotICAgI2RlZmluZSAgaHBfc3ViX3ZlbmRvcl9pZF8xICAgMHgwNQkJLyogTVNCICovCi0gICAjZGVmaW5lICBocF9zdWJfZGV2aWNlX2lkXzAgICAweDA2CQkvKiBMU0IgKi8KLSAgICNkZWZpbmUgIGhwX3N1Yl9kZXZpY2VfaWRfMSAgIDB4MDcJCS8qIE1TQiAqLworI2RlZmluZSAgaHBfc3ViX2RldmljZV9pZF8wICAgMHgwNgkvKiBMU0IgKi8KIAorI2RlZmluZSAgaHBfc2VtYXBob3JlICAgICAgICAgMHgwQworI2RlZmluZSBTQ0NCX01HUl9BQ1RJVkUgICAgQklUKDApCisjZGVmaW5lIFRJQ0tMRV9NRSAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgU0NDQl9NR1JfUFJFU0VOVCAgIEJJVCgzKQorI2RlZmluZSBCSU9TX0lOX1VTRSAgICAgICAgQklUKDQpCiAKLSAgICNkZWZpbmUgIGhwX2R1YWxfYWRkcl9sbyAgICAgIDB4MDgKLSAgICNkZWZpbmUgIGhwX2R1YWxfYWRkcl9sbWkgICAgIDB4MDkKLSAgICNkZWZpbmUgIGhwX2R1YWxfYWRkcl9obWkgICAgIDB4MEEKLSAgICNkZWZpbmUgIGhwX2R1YWxfYWRkcl9oaSAgICAgIDB4MEIKKyNkZWZpbmUgIGhwX3N5c19jdHJsICAgICAgICAgIDB4MEYKIAotICAgI2RlZmluZSAgaHBfc2VtYXBob3JlICAgICAgICAgMHgwQwotICAgICAgI2RlZmluZSBTQ0NCX01HUl9BQ1RJVkUgICAgQklUKDApCi0gICAgICAjZGVmaW5lIFRJQ0tMRV9NRSAgICAgICAgICBCSVQoMSkKLSAgICAgICNkZWZpbmUgU0NDQl9NR1JfUFJFU0VOVCAgIEJJVCgzKQotICAgICAgI2RlZmluZSBCSU9TX0lOX1VTRSAgICAgICAgQklUKDQpCisjZGVmaW5lICBTVE9QX0NMSyAgICAgICAgICBCSVQoMCkJLypUdXJuIG9mZiBCdXNNYXN0ZXIgQ2xvY2sgKi8KKyNkZWZpbmUgIERSVlJfUlNUICAgICAgICAgIEJJVCgxKQkvKkZpcm13YXJlIFJlc2V0IHRvIDgwQzE1IGNoaXAgKi8KKyNkZWZpbmUgIEhBTFRfTUFDSCAgICAgICAgIEJJVCgzKQkvKkhhbHQgU3RhdGUgTWFjaGluZSAgICAgICovCisjZGVmaW5lICBIQVJEX0FCT1JUICAgICAgICBCSVQoNCkJLypIYXJkIEFib3J0ICAgICAgICAgICAgICAqLwogCi0gICAjZGVmaW5lICBocF91c2VyX2RlZmluZWRfRCAgICAweDBECisjZGVmaW5lICBocF9ob3N0X2Jsa19jbnQgICAgICAweDEzCiAKLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkX0UgICAgICAgIDB4MEUKKyNkZWZpbmUgIFhGRVJfQkxLNjQgICAgICAgIDB4MDYJLyogICAgIDEgMSAwIDY0IGJ5dGUgcGVyIGJsb2NrICovCiAKLSAgICNkZWZpbmUgIGhwX3N5c19jdHJsICAgICAgICAgIDB4MEYKKyNkZWZpbmUgIEJNX1RIUkVTSE9MRCAgICAgIDB4NDAJLyogUENJIG1vZGUgY2FuIG9ubHkgeGZlciAxNiBieXRlcyAqLwogCi0gICAgICAjZGVmaW5lICBTVE9QX0NMSyAgICAgICAgICBCSVQoMCkgICAgICAvKlR1cm4gb2ZmIEJ1c01hc3RlciBDbG9jayAqLwotICAgICAgI2RlZmluZSAgRFJWUl9SU1QgICAgICAgICAgQklUKDEpICAgICAgLypGaXJtd2FyZSBSZXNldCB0byA4MEMxNSBjaGlwICovCi0gICAgICAjZGVmaW5lICBIQUxUX01BQ0ggICAgICAgICBCSVQoMykgICAgICAvKkhhbHQgU3RhdGUgTWFjaGluZSAgICAgICovCi0gICAgICAjZGVmaW5lICBIQVJEX0FCT1JUICAgICAgICBCSVQoNCkgICAgICAvKkhhcmQgQWJvcnQgICAgICAgICAgICAgICovCi0gICAgICAjZGVmaW5lICBESUFHX01PREUgICAgICAgICBCSVQoNSkgICAgICAvKkRpYWdub3N0aWMgTW9kZSAgICAgICAgICovCisjZGVmaW5lICBocF9pbnRfbWFzayAgICAgICAgICAweDE3CiAKLSAgICAgICNkZWZpbmUgIEJNX0FCT1JUX1RNT1VUICAgIDB4NTAgICAgICAgIC8qSGFsdCBTdGF0ZSBtYWNoaW5lIHRpbWUgb3V0ICovCisjZGVmaW5lICBJTlRfQ01EX0NPTVBMICAgICBCSVQoMCkJLyogRE1BIGNvbW1hbmQgY29tcGxldGUgICAqLworI2RlZmluZSAgSU5UX0VYVF9TVEFUVVMgICAgQklUKDEpCS8qIEV4dGVuZGVkIFN0YXR1cyBTZXQgICAgKi8KIAotICAgI2RlZmluZSAgaHBfc3lzX2NmZyAgICAgICAgICAgMHgxMAorI2RlZmluZSAgaHBfeGZlcl9jbnRfbG8gICAgICAgMHgxOAorI2RlZmluZSAgaHBfeGZlcl9jbnRfaGkgICAgICAgMHgxQQorI2RlZmluZSAgaHBfeGZlcl9jbWQgICAgICAgICAgMHgxQgogCi0gICAgICAjZGVmaW5lICBET05UX1JTVF9GSUZPICAgICBCSVQoNykgICAgICAvKkRvbid0IHJlc2V0IEZJRk8gICAgICAqLworI2RlZmluZSAgWEZFUl9IT1NUX0RNQSAgICAgMHgwMAkvKiAgICAgMCAwIDAgVHJhbnNmZXIgSG9zdCAtPiBETUEgKi8KKyNkZWZpbmUgIFhGRVJfRE1BX0hPU1QgICAgIDB4MDEJLyogICAgIDAgMCAxIFRyYW5zZmVyIERNQSAgLT4gSG9zdCAqLwogCisjZGVmaW5lICBYRkVSX0hPU1RfQVVUTyAgICAweDAwCS8qICAgICAwIDAgQXV0byBUcmFuc2ZlciBTaXplICAgKi8KIAotICAgI2RlZmluZSAgaHBfaG9zdF9jdHJsMCAgICAgICAgMHgxMQorI2RlZmluZSAgWEZFUl9ETUFfOEJJVCAgICAgMHgyMAkvKiAgICAgMCAxIDggQklUICBUcmFuc2ZlciBTaXplICovCiAKLSAgICAgICNkZWZpbmUgIERVQUxfQUREUl9NT0RFICAgIEJJVCgwKSAgIC8qRW5hYmxlIDY0LWJpdCBhZGRyZXNzZXMgKi8KLSAgICAgICNkZWZpbmUgIElPX01FTV9TUEFDRSAgICAgIEJJVCgxKSAgIC8qSS9PIE1lbW9yeSBTcGFjZSAgICAqLwotICAgICAgI2RlZmluZSAgUkVTT1VSQ0VfTE9DSyAgICAgQklUKDIpICAgLypFbmFibGUgUmVzb3VyY2UgTG9jayAqLwotICAgICAgI2RlZmluZSAgSUdOT1JfQUNDRVNTX0VSUiAgQklUKDMpICAgLypJZ25vcmUgQWNjZXNzIEVycm9yICovCi0gICAgICAjZGVmaW5lICBIT1NUX0lOVF9FREdFICAgICBCSVQoNCkgICAvKkhvc3QgaW50ZXJydXB0IGxldmVsL2VkZ2UgbW9kZSBzZWwgKi8KLSAgICAgICNkZWZpbmUgIFNJWF9DTE9DS1MgICAgICAgIEJJVCg1KSAgIC8qNiBDbG9ja3MgYmV0d2VlbiBTdHJvYmUgICAqLwotICAgICAgI2RlZmluZSAgRE1BX0VWRU5fUEFSSVRZICAgQklUKDYpICAgLypFbmFibGUgRE1BIEVuZW4gUGFyaXR5ICovCisjZGVmaW5lICBESVNBQkxFX0lOVCAgICAgICBCSVQoNykJLypEbyBub3QgaW50ZXJydXB0IGF0IGVuZCBvZiBjbWQuICovCiAKLS8qCi0gICAgICAjZGVmaW5lICBCVVJTVF9NT0RFICAgICAgICBCSVQoMCkKLSovCisjZGVmaW5lICBIT1NUX1dSVF9DTUQgICAgICAoKERJU0FCTEVfSU5UICsgWEZFUl9IT1NUX0RNQSArIFhGRVJfSE9TVF9BVVRPICsgWEZFUl9ETUFfOEJJVCkpCisjZGVmaW5lICBIT1NUX1JEX0NNRCAgICAgICAoKERJU0FCTEVfSU5UICsgWEZFUl9ETUFfSE9TVCArIFhGRVJfSE9TVF9BVVRPICsgWEZFUl9ETUFfOEJJVCkpCiAKLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzEyICAgICAgIDB4MTIKKyNkZWZpbmUgIGhwX2hvc3RfYWRkcl9sbyAgICAgIDB4MUMKKyNkZWZpbmUgIGhwX2hvc3RfYWRkcl9obWkgICAgIDB4MUUKIAotICAgI2RlZmluZSAgaHBfaG9zdF9ibGtfY250ICAgICAgMHgxMworI2RlZmluZSAgaHBfZWVfY3RybCAgICAgICAgICAgMHgyMgogCi0gICAgICAjZGVmaW5lICBYRkVSX0JMSzEgICAgICAgICAweDAwICAgICAvKiAgICAgMCAwIDAgIDEgYnl0ZSBwZXIgYmxvY2sqLwotICAgICAgI2RlZmluZSAgWEZFUl9CTEsyICAgICAgICAgMHgwMSAgICAgLyogICAgIDAgMCAxICAyIGJ5dGUgcGVyIGJsb2NrKi8KLSAgICAgICNkZWZpbmUgIFhGRVJfQkxLNCAgICAgICAgIDB4MDIgICAgIC8qICAgICAwIDEgMCAgNCBieXRlIHBlciBibG9jayovCi0gICAgICAjZGVmaW5lICBYRkVSX0JMSzggICAgICAgICAweDAzICAgICAvKiAgICAgMCAxIDEgIDggYnl0ZSBwZXIgYmxvY2sqLwotICAgICAgI2RlZmluZSAgWEZFUl9CTEsxNiAgICAgICAgMHgwNCAgICAgLyogICAgIDEgMCAwIDE2IGJ5dGUgcGVyIGJsb2NrKi8KLSAgICAgICNkZWZpbmUgIFhGRVJfQkxLMzIgICAgICAgIDB4MDUgICAgIC8qICAgICAxIDAgMSAzMiBieXRlIHBlciBibG9jayovCi0gICAgICAjZGVmaW5lICBYRkVSX0JMSzY0ICAgICAgICAweDA2ICAgICAvKiAgICAgMSAxIDAgNjQgYnl0ZSBwZXIgYmxvY2sqLwotICAgCi0gICAgICAjZGVmaW5lICBCTV9USFJFU0hPTEQgICAgICAweDQwICAgICAvKiBQQ0kgbW9kZSBjYW4gb25seSB4ZmVyIDE2IGJ5dGVzKi8KKyNkZWZpbmUgIEVYVF9BUkJfQUNLICAgICAgIEJJVCg3KQorI2RlZmluZSAgU0NTSV9URVJNX0VOQV9IICAgQklUKDYpCS8qIFNDU0kgaGlnaCBieXRlIHRlcm1pbmF0b3IgKi8KKyNkZWZpbmUgIFNFRV9NUyAgICAgICAgICAgIEJJVCg1KQorI2RlZmluZSAgU0VFX0NTICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lICBTRUVfQ0xLICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgIFNFRV9ETyAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSAgU0VFX0RJICAgICAgICAgICAgQklUKDApCiAKKyNkZWZpbmUgIEVFX1JFQUQgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgIEVFX1dSSVRFICAgICAgICAgIDB4MDUKKyNkZWZpbmUgIEVXRU4gICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgIEVXRU5fQUREUiAgICAgICAgIDB4MDNDMAorI2RlZmluZSAgRVdEUyAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSAgRVdEU19BRERSICAgICAgICAgMHgwMDAwCiAKLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzE0ICAgICAgIDB4MTQKLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzE1ICAgICAgIDB4MTUKLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzE2ICAgICAgIDB4MTYKKyNkZWZpbmUgIGhwX2JtX2N0cmwgICAgICAgICAgIDB4MjYKIAotICAgI2RlZmluZSAgaHBfaW50X21hc2sgICAgICAgICAgMHgxNworI2RlZmluZSAgU0NTSV9URVJNX0VOQV9MICAgQklUKDApCS8qRW5hYmxlL0Rpc2FibGUgZXh0ZXJuYWwgdGVybWluYXRvcnMgKi8KKyNkZWZpbmUgIEZMVVNIX1hGRVJfQ05UUiAgIEJJVCgxKQkvKkZsdXNoIHRyYW5zZmVyIGNvdW50ZXIgKi8KKyNkZWZpbmUgIEZPUkNFMV9YRkVSICAgICAgIEJJVCg1KQkvKkFsd2F5cyB4ZmVyIG9uZSBieXRlIGluIGJ5dGUgbW9kZSAqLworI2RlZmluZSAgRkFTVF9TSU5HTEUgICAgICAgQklUKDYpCS8qPz8gKi8KIAotICAgICAgI2RlZmluZSAgSU5UX0NNRF9DT01QTCAgICAgQklUKDApICAgLyogRE1BIGNvbW1hbmQgY29tcGxldGUgICAqLwotICAgICAgI2RlZmluZSAgSU5UX0VYVF9TVEFUVVMgICAgQklUKDEpICAgLyogRXh0ZW5kZWQgU3RhdHVzIFNldCAgICAqLwotICAgICAgI2RlZmluZSAgSU5UX1NDU0kgICAgICAgICAgQklUKDIpICAgLyogU2NzaSBibG9jayBpbnRlcnJ1cHQgICAqLwotICAgICAgI2RlZmluZSAgSU5UX0ZJRk9fUkRZICAgICAgQklUKDQpICAgLyogRklGTyBkYXRhIHJlYWR5ICAgICAgICAqLworI2RlZmluZSAgQk1DVFJMX0RFRkFVTFQgICAgKEZPUkNFMV9YRkVSfEZBU1RfU0lOR0xFfFNDU0lfVEVSTV9FTkFfTCkKIAorI2RlZmluZSAgaHBfc2dfYWRkciAgICAgICAgICAgMHgyOAorI2RlZmluZSAgaHBfcGFnZV9jdHJsICAgICAgICAgMHgyOQogCi0gICAjZGVmaW5lICBocF94ZmVyX2NudF9sbyAgICAgICAweDE4Ci0gICAjZGVmaW5lICBocF94ZmVyX2NudF9taSAgICAgICAweDE5Ci0gICAjZGVmaW5lICBocF94ZmVyX2NudF9oaSAgICAgICAweDFBCi0gICAjZGVmaW5lICBocF94ZmVyX2NtZCAgICAgICAgICAweDFCCisjZGVmaW5lICBTQ0FUVEVSX0VOICAgICAgICBCSVQoMCkKKyNkZWZpbmUgIFNHUkFNX0FSQU0gICAgICAgIEJJVCgxKQorI2RlZmluZSAgR19JTlRfRElTQUJMRSAgICAgQklUKDMpCS8qIEVuYWJsZS9EaXNhYmxlIGFsbCBJbnRlcnJ1cHRzICovCisjZGVmaW5lICBOQVJST1dfU0NTSV9DQVJEICBCSVQoNCkJLyogTkFSUk9XL1dJREUgU0NTSSBjb25maWcgcGluICovCiAKLSAgICAgICNkZWZpbmUgIFhGRVJfSE9TVF9ETUEgICAgIDB4MDAgICAgIC8qICAgICAwIDAgMCBUcmFuc2ZlciBIb3N0IC0+IERNQSAqLwotICAgICAgI2RlZmluZSAgWEZFUl9ETUFfSE9TVCAgICAgMHgwMSAgICAgLyogICAgIDAgMCAxIFRyYW5zZmVyIERNQSAgLT4gSG9zdCAqLwotICAgICAgI2RlZmluZSAgWEZFUl9IT1NUX01QVSAgICAgMHgwMiAgICAgLyogICAgIDAgMSAwIFRyYW5zZmVyIEhvc3QgLT4gTVBVICAqLwotICAgICAgI2RlZmluZSAgWEZFUl9NUFVfSE9TVCAgICAgMHgwMyAgICAgLyogICAgIDAgMSAxIFRyYW5zZmVyIE1QVSAgLT4gSG9zdCAqLwotICAgICAgI2RlZmluZSAgWEZFUl9ETUFfTVBVICAgICAgMHgwNCAgICAgLyogICAgIDEgMCAwIFRyYW5zZmVyIERNQSAgLT4gTVBVICAqLwotICAgICAgI2RlZmluZSAgWEZFUl9NUFVfRE1BICAgICAgMHgwNSAgICAgLyogICAgIDEgMCAxIFRyYW5zZmVyIE1QVSAgLT4gRE1BICAqLwotICAgICAgI2RlZmluZSAgU0VUX1NFTUFQSE9SRSAgICAgMHgwNiAgICAgLyogICAgIDEgMSAwIFNldCBTZW1hcGhvcmUgICAgICAgICAqLwotICAgICAgI2RlZmluZSAgWEZFUl9OT1AgICAgICAgICAgMHgwNyAgICAgLyogICAgIDEgMSAxIFRyYW5zZmVyIE5PUCAgICAgICAgICAqLwotICAgICAgI2RlZmluZSAgWEZFUl9NQl9NUFUgICAgICAgMHgwNiAgICAgLyogICAgIDEgMSAwIFRyYW5zZmVyIE1CIC0+IE1QVSAqLwotICAgICAgI2RlZmluZSAgWEZFUl9NQl9ETUEgICAgICAgMHgwNyAgICAgLyogICAgIDEgMSAxIFRyYW5zZmVyIE1CIC0+IERNQSAqLworI2RlZmluZSAgaHBfcGNpX3N0YXRfY2ZnICAgICAgMHgyRAogCisjZGVmaW5lICBSRUNfTUFTVEVSX0FCT1JUICBCSVQoNSkJLypyZWNlaXZlZCBNYXN0ZXIgYWJvcnQgKi8KIAotICAgICAgI2RlZmluZSAgWEZFUl9IT1NUX0FVVE8gICAgMHgwMCAgICAgLyogICAgIDAgMCBBdXRvIFRyYW5zZmVyIFNpemUgICAqLwotICAgICAgI2RlZmluZSAgWEZFUl9IT1NUXzhCSVQgICAgMHgwOCAgICAgLyogICAgIDAgMSA4IEJJVCBUcmFuc2ZlciBTaXplICAqLwotICAgICAgI2RlZmluZSAgWEZFUl9IT1NUXzE2QklUICAgMHgxMCAgICAgLyogICAgIDEgMCAxNiBCSVQgVHJhbnNmZXIgU2l6ZSAqLwotICAgICAgI2RlZmluZSAgWEZFUl9IT1NUXzMyQklUICAgMHgxOCAgICAgLyogICAgIDEgMSAzMiBCSVQgVHJhbnNmZXIgU2l6ZSAqLworI2RlZmluZSAgaHBfcmV2X251bSAgICAgICAgICAgMHgzMwogCi0gICAgICAjZGVmaW5lICBYRkVSX0RNQV84QklUICAgICAweDIwICAgICAvKiAgICAgMCAxIDggQklUICBUcmFuc2ZlciBTaXplICovCi0gICAgICAjZGVmaW5lICBYRkVSX0RNQV8xNkJJVCAgICAweDQwICAgICAvKiAgICAgMSAwIDE2IEJJVCBUcmFuc2ZlciBTaXplICovCisjZGVmaW5lICBocF9zdGFja19kYXRhICAgICAgICAweDM0CisjZGVmaW5lICBocF9zdGFja19hZGRyICAgICAgICAweDM1CiAKLSAgICAgICNkZWZpbmUgIERJU0FCTEVfSU5UICAgICAgIEJJVCg3KSAgIC8qRG8gbm90IGludGVycnVwdCBhdCBlbmQgb2YgY21kLiAqLworI2RlZmluZSAgaHBfZXh0X3N0YXR1cyAgICAgICAgMHgzNgogCi0gICAgICAjZGVmaW5lICBIT1NUX1dSVF9DTUQgICAgICAoKERJU0FCTEVfSU5UICsgWEZFUl9IT1NUX0RNQSArIFhGRVJfSE9TVF9BVVRPICsgWEZFUl9ETUFfOEJJVCkpCi0gICAgICAjZGVmaW5lICBIT1NUX1JEX0NNRCAgICAgICAoKERJU0FCTEVfSU5UICsgWEZFUl9ETUFfSE9TVCArIFhGRVJfSE9TVF9BVVRPICsgWEZFUl9ETUFfOEJJVCkpCi0gICAgICAjZGVmaW5lICBXSURFX0hPU1RfV1JUX0NNRCAoKERJU0FCTEVfSU5UICsgWEZFUl9IT1NUX0RNQSArIFhGRVJfSE9TVF9BVVRPICsgWEZFUl9ETUFfMTZCSVQpKQotICAgICAgI2RlZmluZSAgV0lERV9IT1NUX1JEX0NNRCAgKChESVNBQkxFX0lOVCArIFhGRVJfRE1BX0hPU1QgKyBYRkVSX0hPU1RfQVVUTyArIFhGRVJfRE1BXzE2QklUKSkKLQotICAgI2RlZmluZSAgaHBfaG9zdF9hZGRyX2xvICAgICAgMHgxQwotICAgI2RlZmluZSAgaHBfaG9zdF9hZGRyX2xtaSAgICAgMHgxRAotICAgI2RlZmluZSAgaHBfaG9zdF9hZGRyX2htaSAgICAgMHgxRQotICAgI2RlZmluZSAgaHBfaG9zdF9hZGRyX2hpICAgICAgMHgxRgotCi0gICAjZGVmaW5lICBocF9waW9fZGF0YSAgICAgICAgICAweDIwCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF8yMSAgICAgICAweDIxCi0gICAjZGVmaW5lICBocF9lZV9jdHJsICAgICAgICAgICAweDIyCi0KLSAgICAgICNkZWZpbmUgIEVYVF9BUkJfQUNLICAgICAgIEJJVCg3KQotICAgICAgI2RlZmluZSAgU0NTSV9URVJNX0VOQV9IICAgQklUKDYpICAgLyogU0NTSSBoaWdoIGJ5dGUgdGVybWluYXRvciAqLwotICAgICAgI2RlZmluZSAgU0VFX01TICAgICAgICAgICAgQklUKDUpCi0gICAgICAjZGVmaW5lICBTRUVfQ1MgICAgICAgICAgICBCSVQoMykKLSAgICAgICNkZWZpbmUgIFNFRV9DTEsgICAgICAgICAgIEJJVCgyKQotICAgICAgI2RlZmluZSAgU0VFX0RPICAgICAgICAgICAgQklUKDEpCi0gICAgICAjZGVmaW5lICBTRUVfREkgICAgICAgICAgICBCSVQoMCkKLQotICAgICAgI2RlZmluZSAgRUVfUkVBRCAgICAgICAgICAgMHgwNgotICAgICAgI2RlZmluZSAgRUVfV1JJVEUgICAgICAgICAgMHgwNQotICAgICAgI2RlZmluZSAgRVdFTiAgICAgICAgICAgICAgMHgwNAotICAgICAgI2RlZmluZSAgRVdFTl9BRERSICAgICAgICAgMHgwM0MwCi0gICAgICAjZGVmaW5lICBFV0RTICAgICAgICAgICAgICAweDA0Ci0gICAgICAjZGVmaW5lICBFV0RTX0FERFIgICAgICAgICAweDAwMDAKLQotICAgI2RlZmluZSAgaHBfYnJkY3RsICAgICAgICAgICAgMHgyMwotCi0gICAgICAjZGVmaW5lICBEQVRfNyAgICAgICAgICAgICBCSVQoNykKLSAgICAgICNkZWZpbmUgIERBVF82ICAgICAgICAgICAgIEJJVCg2KQotICAgICAgI2RlZmluZSAgREFUXzUgICAgICAgICAgICAgQklUKDUpCi0gICAgICAjZGVmaW5lICBCUkRfU1RCICAgICAgICAgICBCSVQoNCkKLSAgICAgICNkZWZpbmUgIEJSRF9DUyAgICAgICAgICAgIEJJVCgzKQotICAgICAgI2RlZmluZSAgQlJEX1dSICAgICAgICAgICAgQklUKDIpCi0KLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzI0ICAgICAgIDB4MjQKLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzI1ICAgICAgIDB4MjUKLQotCi0KLQotICAgI2RlZmluZSAgaHBfYm1fY3RybCAgICAgICAgICAgMHgyNgotCi0gICAgICAjZGVmaW5lICBTQ1NJX1RFUk1fRU5BX0wgICBCSVQoMCkgICAvKkVuYWJsZS9EaXNhYmxlIGV4dGVybmFsIHRlcm1pbmF0b3JzICovCi0gICAgICAjZGVmaW5lICBGTFVTSF9YRkVSX0NOVFIgICBCSVQoMSkgICAvKkZsdXNoIHRyYW5zZmVyIGNvdW50ZXIgKi8KLSAgICAgICNkZWZpbmUgIEJNX1hGRVJfTUlOXzggICAgIEJJVCgyKSAgIC8qRW5hYmxlIGJ1cyBtYXN0ZXIgdHJhbnNmZXIgb2YgOSAqLwotICAgICAgI2RlZmluZSAgQklPU19FTkEgICAgICAgICAgQklUKDMpICAgLypFbmFibGUgQklPUy9GTEFTSCBFbmFibGUgKi8KLSAgICAgICNkZWZpbmUgIEZPUkNFMV9YRkVSICAgICAgIEJJVCg1KSAgIC8qQWx3YXlzIHhmZXIgb25lIGJ5dGUgaW4gYnl0ZSBtb2RlICovCi0gICAgICAjZGVmaW5lICBGQVNUX1NJTkdMRSAgICAgICBCSVQoNikgICAvKj8/ICovCi0KLSAgICAgICNkZWZpbmUgIEJNQ1RSTF9ERUZBVUxUICAgIChGT1JDRTFfWEZFUnxGQVNUX1NJTkdMRXxTQ1NJX1RFUk1fRU5BX0wpCi0KLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzI3ICAgICAgIDB4MjcKLQotICAgI2RlZmluZSAgaHBfc2dfYWRkciAgICAgICAgICAgMHgyOAotICAgI2RlZmluZSAgaHBfcGFnZV9jdHJsICAgICAgICAgMHgyOQotCi0gICAgICAjZGVmaW5lICBTQ0FUVEVSX0VOICAgICAgICBCSVQoMCkgICAKLSAgICAgICNkZWZpbmUgIFNHUkFNX0FSQU0gICAgICAgIEJJVCgxKSAgIAotICAgICAgI2RlZmluZSAgQklPU19TSEFET1cgICAgICAgQklUKDIpICAgCi0gICAgICAjZGVmaW5lICBHX0lOVF9ESVNBQkxFICAgICBCSVQoMykgICAvKiBFbmFibGUvRGlzYWJsZSBhbGwgSW50ZXJydXB0cyAqLwotICAgICAgI2RlZmluZSAgTkFSUk9XX1NDU0lfQ0FSRCAgQklUKDQpICAgLyogTkFSUk9XL1dJREUgU0NTSSBjb25maWcgcGluICovCi0KLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzJBICAgICAgIDB4MkEKLSAgICNkZWZpbmUgIGhwX3BjaV9jbWRfY2ZnICAgICAgIDB4MkIKLQotICAgICAgI2RlZmluZSAgSU9fU1BBQ0VfRU5BICAgICAgQklUKDApICAgLyplbmFibGUgSS9PIHNwYWNlICovCi0gICAgICAjZGVmaW5lICBNRU1fU1BBQ0VfRU5BICAgICBCSVQoMSkgICAvKmVuYWJsZSBtZW1vcnkgc3BhY2UgKi8KLSAgICAgICNkZWZpbmUgIEJVU19NU1RSX0VOQSAgICAgIEJJVCgyKSAgIC8qZW5hYmxlIGJ1cyBtYXN0ZXIgb3BlcmF0aW9uICovCi0gICAgICAjZGVmaW5lICBNRU1fV0lfRU5BICAgICAgICBCSVQoNCkgICAvKmVuYWJsZSBXcml0ZSBhbmQgSW52YWxpZGF0ZSAqLwotICAgICAgI2RlZmluZSAgUEFSX0VSUl9SRVNQICAgICAgQklUKDYpICAgLyplbmFibGUgcGFyaXR5IGVycm9yIHJlc3BvbmNlLiAqLwotCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF8yQyAgICAgICAweDJDCi0KLSAgICNkZWZpbmUgIGhwX3BjaV9zdGF0X2NmZyAgICAgIDB4MkQKLQotICAgICAgI2RlZmluZSAgREFUQV9QQVJJVFlfRVJSICAgQklUKDApICAgCi0gICAgICAjZGVmaW5lICBSRUNfVEFSR0VUX0FCT1JUICBCSVQoNCkgICAvKnJlY2VpdmVkIFRhcmdldCBhYm9ydCAqLwotICAgICAgI2RlZmluZSAgUkVDX01BU1RFUl9BQk9SVCAgQklUKDUpICAgLypyZWNlaXZlZCBNYXN0ZXIgYWJvcnQgKi8KLSAgICAgICNkZWZpbmUgIFNJR19TWVNURU1fRVJSICAgIEJJVCg2KSAgIAotICAgICAgI2RlZmluZSAgREVURUNURURfUEFSX0VSUiAgQklUKDcpICAgCi0KLSAgICNkZWZpbmUgIGhwX3Jlc2VydmVkXzJFICAgICAgIDB4MkUKLQotICAgI2RlZmluZSAgaHBfc3lzX3N0YXR1cyAgICAgICAgMHgyRgotCi0gICAgICAjZGVmaW5lICBTTFZfREFUQV9SRFkgICAgICBCSVQoMCkgICAvKlNsYXZlIGRhdGEgcmVhZHkgKi8KLSAgICAgICNkZWZpbmUgIFhGRVJfQ05UX1pFUk8gICAgIEJJVCgxKSAgIC8qVHJhbnNmZXIgY291bnRlciA9IDAgKi8KLSAgICAgICNkZWZpbmUgIEJNX0ZJRk9fRU1QVFkgICAgIEJJVCgyKSAgIC8qRklGTyBlbXB0eSAqLwotICAgICAgI2RlZmluZSAgQk1fRklGT19GVUxMICAgICAgQklUKDMpICAgLypGSUZPIGZ1bGwgKi8KLSAgICAgICNkZWZpbmUgIEhPU1RfT1BfRE9ORSAgICAgIEJJVCg0KSAgIC8qaG9zdCBvcGVyYXRpb24gZG9uZSAqLwotICAgICAgI2RlZmluZSAgRE1BX09QX0RPTkUgICAgICAgQklUKDUpICAgLypETUEgb3BlcmF0aW9uIGRvbmUgKi8KLSAgICAgICNkZWZpbmUgIFNMVl9PUF9ET05FICAgICAgIEJJVCg2KSAgIC8qU2xhdmUgb3BlcmF0aW9uIGRvbmUgKi8KLSAgICAgICNkZWZpbmUgIFBXUl9PTl9GTEFHICAgICAgIEJJVCg3KSAgIC8qUG93ZXIgb24gZmxhZyAqLwotCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF8zMCAgICAgICAweDMwCi0KLSAgICNkZWZpbmUgIGhwX2hvc3Rfc3RhdHVzMCAgICAgIDB4MzEKLQotICAgICAgI2RlZmluZSAgSE9TVF9URVJNICAgICAgICAgQklUKDUpICAgLypIb3N0IFRlcm1pbmFsIENvdW50ICovCi0gICAgICAjZGVmaW5lICBIT1NUX1RSU0hMRCAgICAgICBCSVQoNikgICAvKkhvc3QgVGhyZXNob2xkICAgICAgKi8KLSAgICAgICNkZWZpbmUgIENPTk5FQ1RFRF8yX0hPU1QgIEJJVCg3KSAgIC8qQ29ubmVjdGVkIHRvIEhvc3QgICAqLwotCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF8zMiAgICAgICAweDMyCi0KLSAgICNkZWZpbmUgIGhwX3Jldl9udW0gICAgICAgICAgIDB4MzMKLQotICAgICAgI2RlZmluZSAgUkVWX0FfQ09OU1QgICAgICAgMHgwRQotICAgICAgI2RlZmluZSAgUkVWX0JfQ09OU1QgICAgICAgMHgwRQotCi0gICAjZGVmaW5lICBocF9zdGFja19kYXRhICAgICAgICAweDM0Ci0gICAjZGVmaW5lICBocF9zdGFja19hZGRyICAgICAgICAweDM1Ci0KLSAgICNkZWZpbmUgIGhwX2V4dF9zdGF0dXMgICAgICAgIDB4MzYKLQotICAgICAgI2RlZmluZSAgQk1fRk9SQ0VfT0ZGICAgICAgQklUKDApICAgLypCdXMgTWFzdGVyIGlzIGZvcmNlZCB0byBnZXQgb2ZmICovCi0gICAgICAjZGVmaW5lICBQQ0lfVEdUX0FCT1JUICAgICBCSVQoMCkgICAvKlBDSSBidXMgbWFzdGVyIHRyYW5zYWN0aW9uIGFib3J0ZWQgKi8KLSAgICAgICNkZWZpbmUgIFBDSV9ERVZfVE1PVVQgICAgIEJJVCgxKSAgIC8qUENJIERldmljZSBUaW1lIG91dCAqLwotICAgICAgI2RlZmluZSAgRklGT19UQ19OT1RfWkVSTyAgQklUKDIpICAgLypGSUZPIG9yIHRyYW5zZmVyIGNvdW50ZXIgbm90IHplcm8gKi8KLSAgICAgICNkZWZpbmUgIENISVBfUlNUX09DQ1VSICAgIEJJVCgzKSAgIC8qQ2hpcCByZXNldCBvY2N1cnMgKi8KLSAgICAgICNkZWZpbmUgIENNRF9BQk9SVEVEICAgICAgIEJJVCg0KSAgIC8qQ29tbWFuZCBhYm9ydGVkICovCi0gICAgICAjZGVmaW5lICBCTV9QQVJJVFlfRVJSICAgICBCSVQoNSkgICAvKnBhcml0eSBlcnJvciBvbiBkYXRhIHJlY2VpdmVkICAgKi8KLSAgICAgICNkZWZpbmUgIFBJT19PVkVSUlVOICAgICAgIEJJVCg2KSAgIC8qU2xhdmUgZGF0YSBvdmVycnVuICovCi0gICAgICAjZGVmaW5lICBCTV9DTURfQlVTWSAgICAgICBCSVQoNykgICAvKkJ1cyBtYXN0ZXIgdHJhbnNmZXIgY29tbWFuZCBidXN5ICovCi0gICAgICAjZGVmaW5lICBCQURfRVhUX1NUQVRVUyAgICAoQk1fRk9SQ0VfT0ZGIHwgUENJX0RFVl9UTU9VVCB8IENNRF9BQk9SVEVEIHwgXAorI2RlZmluZSAgQk1fRk9SQ0VfT0ZGICAgICAgQklUKDApCS8qQnVzIE1hc3RlciBpcyBmb3JjZWQgdG8gZ2V0IG9mZiAqLworI2RlZmluZSAgUENJX1RHVF9BQk9SVCAgICAgQklUKDApCS8qUENJIGJ1cyBtYXN0ZXIgdHJhbnNhY3Rpb24gYWJvcnRlZCAqLworI2RlZmluZSAgUENJX0RFVl9UTU9VVCAgICAgQklUKDEpCS8qUENJIERldmljZSBUaW1lIG91dCAqLworI2RlZmluZSAgQ01EX0FCT1JURUQgICAgICAgQklUKDQpCS8qQ29tbWFuZCBhYm9ydGVkICovCisjZGVmaW5lICBCTV9QQVJJVFlfRVJSICAgICBCSVQoNSkJLypwYXJpdHkgZXJyb3Igb24gZGF0YSByZWNlaXZlZCAgICovCisjZGVmaW5lICBQSU9fT1ZFUlJVTiAgICAgICBCSVQoNikJLypTbGF2ZSBkYXRhIG92ZXJydW4gKi8KKyNkZWZpbmUgIEJNX0NNRF9CVVNZICAgICAgIEJJVCg3KQkvKkJ1cyBtYXN0ZXIgdHJhbnNmZXIgY29tbWFuZCBidXN5ICovCisjZGVmaW5lICBCQURfRVhUX1NUQVRVUyAgICAoQk1fRk9SQ0VfT0ZGIHwgUENJX0RFVl9UTU9VVCB8IENNRF9BQk9SVEVEIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJNX1BBUklUWV9FUlIgfCBQSU9fT1ZFUlJVTikKIAotICAgI2RlZmluZSAgaHBfaW50X3N0YXR1cyAgICAgICAgMHgzNwotICAgICAgCi0gICAgICAjZGVmaW5lICBCTV9DTURfQ01QTCAgICAgICBCSVQoMCkgICAvKkJ1cyBNYXN0ZXIgY29tbWFuZCBjb21wbGV0ZSAqLwotICAgICAgI2RlZmluZSAgRVhUX1NUQVRVU19PTiAgICAgQklUKDEpICAgLypFeHRlbmRlZCBzdGF0dXMgaXMgdmFsaWQgKi8KLSAgICAgICNkZWZpbmUgIFNDU0lfSU5URVJSVVBUICAgIEJJVCgyKSAgIC8qR2xvYmFsIGluZGljYXRpb24gb2YgYSBTQ1NJIGludC4gKi8KLSAgICAgICNkZWZpbmUgIEJNX0ZJRk9fUkRZICAgICAgIEJJVCg0KSAgIAotICAgICAgI2RlZmluZSAgSU5UX0FTU0VSVEVEICAgICAgQklUKDUpICAgLyogKi8KLSAgICAgICNkZWZpbmUgIFNSQU1fQlVTWSAgICAgICAgIEJJVCg2KSAgIC8qU2NhdHRlci9HYXRoZXIgUkFNIGJ1c3kgKi8KLSAgICAgICNkZWZpbmUgIENNRF9SRUdfQlVTWSAgICAgIEJJVCg3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSAgaHBfaW50X3N0YXR1cyAgICAgICAgMHgzNwogCisjZGVmaW5lICBFWFRfU1RBVFVTX09OICAgICBCSVQoMSkJLypFeHRlbmRlZCBzdGF0dXMgaXMgdmFsaWQgKi8KKyNkZWZpbmUgIFNDU0lfSU5URVJSVVBUICAgIEJJVCgyKQkvKkdsb2JhbCBpbmRpY2F0aW9uIG9mIGEgU0NTSSBpbnQuICovCisjZGVmaW5lICBJTlRfQVNTRVJURUQgICAgICBCSVQoNSkJLyogKi8KIAotICAgI2RlZmluZSAgaHBfZmlmb19jbnQgICAgICAgICAgMHgzOAotICAgI2RlZmluZSAgaHBfY3Vycl9ob3N0X2NudCAgICAgMHgzOQotICAgI2RlZmluZSAgaHBfcmVzZXJ2ZWRfM0EgICAgICAgMHgzQQotICAgI2RlZmluZSAgaHBfZmlmb19pbl9hZGRyICAgICAgMHgzQgorI2RlZmluZSAgaHBfZmlmb19jbnQgICAgICAgICAgMHgzOAogCi0gICAjZGVmaW5lICBocF9maWZvX291dF9hZGRyICAgICAweDNDCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF8zRCAgICAgICAweDNECi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF8zRSAgICAgICAweDNFCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF8zRiAgICAgICAweDNGCisjZGVmaW5lICBocF9pbnRlbmEJCSAweDQwCiAKKyNkZWZpbmUgIFJFU0VUCQkgQklUVyg3KQorI2RlZmluZSAgUFJPR19ITFQJCSBCSVRXKDYpCisjZGVmaW5lICBQQVJJVFkJCSBCSVRXKDUpCisjZGVmaW5lICBGSUZPCQkgQklUVyg0KQorI2RlZmluZSAgU0VMCQkgQklUVygzKQorI2RlZmluZSAgU0NBTV9TRUwJCSBCSVRXKDIpCisjZGVmaW5lICBSU0VMCQkgQklUVygxKQorI2RlZmluZSAgVElNRU9VVAkJIEJJVFcoMCkKKyNkZWZpbmUgIEJVU19GUkVFCQkgQklUVygxNSkKKyNkZWZpbmUgIFhGRVJfQ05UXzAJIEJJVFcoMTQpCisjZGVmaW5lICBQSEFTRQkJIEJJVFcoMTMpCisjZGVmaW5lICBJVU5LV04JCSBCSVRXKDEyKQorI2RlZmluZSAgSUNNRF9DT01QCSBCSVRXKDExKQorI2RlZmluZSAgSVRJQ0tMRQkJIEJJVFcoMTApCisjZGVmaW5lICBJRE9fU1RSVAkJIEJJVFcoOSkKKyNkZWZpbmUgIElUQVJfRElTQwkgQklUVyg4KQorI2RlZmluZSAgQVVUT19JTlQJCSAoQklUVygxMikrQklUVygxMSkrQklUVygxMCkrQklUVyg5KStCSVRXKDgpKQorI2RlZmluZSAgQ0xSX0FMTF9JTlQJIDB4RkZGRgorI2RlZmluZSAgQ0xSX0FMTF9JTlRfMQkgMHhGRjAwCiAKKyNkZWZpbmUgIGhwX2ludHN0YXQJCSAweDQyCiAKLSAgICNkZWZpbmUgIGhwX2ludGVuYQkJIDB4NDAKKyNkZWZpbmUgIGhwX3Njc2lzaWcgICAgICAgICAgIDB4NDQKIAotICAgICAgI2RlZmluZSAgUkVTRVQJCSBCSVRXKDcpCi0gICAgICAjZGVmaW5lICBQUk9HX0hMVAkJIEJJVFcoNikgIAotICAgICAgI2RlZmluZSAgUEFSSVRZCQkgQklUVyg1KQotICAgICAgI2RlZmluZSAgRklGTwkJIEJJVFcoNCkKLSAgICAgICNkZWZpbmUgIFNFTAkJIEJJVFcoMykKLSAgICAgICNkZWZpbmUgIFNDQU1fU0VMCQkgQklUVygyKSAKLSAgICAgICNkZWZpbmUgIFJTRUwJCSBCSVRXKDEpCi0gICAgICAjZGVmaW5lICBUSU1FT1VUCQkgQklUVygwKQotICAgICAgI2RlZmluZSAgQlVTX0ZSRUUJCSBCSVRXKDE1KQotICAgICAgI2RlZmluZSAgWEZFUl9DTlRfMAkgQklUVygxNCkKLSAgICAgICNkZWZpbmUgIFBIQVNFCQkgQklUVygxMykKLSAgICAgICNkZWZpbmUgIElVTktXTgkJIEJJVFcoMTIpCi0gICAgICAjZGVmaW5lICBJQ01EX0NPTVAJIEJJVFcoMTEpCi0gICAgICAjZGVmaW5lICBJVElDS0xFCQkgQklUVygxMCkKLSAgICAgICNkZWZpbmUgIElET19TVFJUCQkgQklUVyg5KQotICAgICAgI2RlZmluZSAgSVRBUl9ESVNDCSBCSVRXKDgpCi0gICAgICAjZGVmaW5lICBBVVRPX0lOVAkJIChCSVRXKDEyKStCSVRXKDExKStCSVRXKDEwKStCSVRXKDkpK0JJVFcoOCkpCi0gICAgICAjZGVmaW5lICBDTFJfQUxMX0lOVAkgMHhGRkZGCi0gICAgICAjZGVmaW5lICBDTFJfQUxMX0lOVF8xCSAweEZGMDAKKyNkZWZpbmUgIFNDU0lfU0VMICAgICAgICAgIEJJVCg3KQorI2RlZmluZSAgU0NTSV9CU1kgICAgICAgICAgQklUKDYpCisjZGVmaW5lICBTQ1NJX1JFUSAgICAgICAgICBCSVQoNSkKKyNkZWZpbmUgIFNDU0lfQUNLICAgICAgICAgIEJJVCg0KQorI2RlZmluZSAgU0NTSV9BVE4gICAgICAgICAgQklUKDMpCisjZGVmaW5lICBTQ1NJX0NEICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgIFNDU0lfTVNHICAgICAgICAgIEJJVCgxKQorI2RlZmluZSAgU0NTSV9JT0JJVCAgICAgICAgQklUKDApCiAKLSAgICNkZWZpbmUgIGhwX2ludHN0YXQJCSAweDQyCisjZGVmaW5lICBTX1NDU0lfUEhaICAgICAgICAoQklUKDIpK0JJVCgxKStCSVQoMCkpCisjZGVmaW5lICBTX01TR09fUEggICAgICAgICAoQklUKDIpK0JJVCgxKSAgICAgICApCisjZGVmaW5lICBTX01TR0lfUEggICAgICAgICAoQklUKDIpK0JJVCgxKStCSVQoMCkpCisjZGVmaW5lICBTX0RBVEFJX1BIICAgICAgICAoICAgICAgICAgICAgICBCSVQoMCkpCisjZGVmaW5lICBTX0RBVEFPX1BIICAgICAgICAweDAwCisjZGVmaW5lICBTX0lMTF9QSCAgICAgICAgICAoICAgICAgIEJJVCgxKSAgICAgICApCiAKLSAgICNkZWZpbmUgIGhwX3Njc2lzaWcgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgIGhwX3Njc2ljdHJsXzAgICAgICAgIDB4NDUKIAotICAgICAgI2RlZmluZSAgU0NTSV9TRUwgICAgICAgICAgQklUKDcpCi0gICAgICAjZGVmaW5lICBTQ1NJX0JTWSAgICAgICAgICBCSVQoNikKLSAgICAgICNkZWZpbmUgIFNDU0lfUkVRICAgICAgICAgIEJJVCg1KQotICAgICAgI2RlZmluZSAgU0NTSV9BQ0sgICAgICAgICAgQklUKDQpCi0gICAgICAjZGVmaW5lICBTQ1NJX0FUTiAgICAgICAgICBCSVQoMykKLSAgICAgICNkZWZpbmUgIFNDU0lfQ0QgICAgICAgICAgIEJJVCgyKQotICAgICAgI2RlZmluZSAgU0NTSV9NU0cgICAgICAgICAgQklUKDEpCi0gICAgICAjZGVmaW5lICBTQ1NJX0lPQklUICAgICAgICBCSVQoMCkKKyNkZWZpbmUgIFNFTF9UQVIgICAgICAgICAgIEJJVCg2KQorI2RlZmluZSAgRU5BX0FUTiAgICAgICAgICAgQklUKDQpCisjZGVmaW5lICBFTkFfUkVTRUwgICAgICAgICBCSVQoMikKKyNkZWZpbmUgIFNDU0lfUlNUICAgICAgICAgIEJJVCgxKQorI2RlZmluZSAgRU5BX1NDQU1fU0VMICAgICAgQklUKDApCiAKLSAgICAgICNkZWZpbmUgIFNfU0NTSV9QSFogICAgICAgIChCSVQoMikrQklUKDEpK0JJVCgwKSkKLSAgICAgICNkZWZpbmUgIFNfQ01EX1BIICAgICAgICAgIChCSVQoMikgICAgICAgICAgICAgICkKLSAgICAgICNkZWZpbmUgIFNfTVNHT19QSCAgICAgICAgIChCSVQoMikrQklUKDEpICAgICAgICkKLSAgICAgICNkZWZpbmUgIFNfU1RBVF9QSCAgICAgICAgIChCSVQoMikgICAgICAgK0JJVCgwKSkKLSAgICAgICNkZWZpbmUgIFNfTVNHSV9QSCAgICAgICAgIChCSVQoMikrQklUKDEpK0JJVCgwKSkKLSAgICAgICNkZWZpbmUgIFNfREFUQUlfUEggICAgICAgICggICAgICAgICAgICAgIEJJVCgwKSkKLSAgICAgICNkZWZpbmUgIFNfREFUQU9fUEggICAgICAgIDB4MDAKLSAgICAgICNkZWZpbmUgIFNfSUxMX1BIICAgICAgICAgICggICAgICAgQklUKDEpICAgICAgICkKKyNkZWZpbmUgIGhwX3BvcnRjdHJsXzAgICAgICAgIDB4NDYKIAotICAgI2RlZmluZSAgaHBfc2NzaWN0cmxfMCAgICAgICAgMHg0NQorI2RlZmluZSAgU0NTSV9QT1JUICAgICAgICAgQklUKDcpCisjZGVmaW5lICBTQ1NJX0lOQklUICAgICAgICBCSVQoNikKKyNkZWZpbmUgIERNQV9QT1JUICAgICAgICAgIEJJVCg1KQorI2RlZmluZSAgRE1BX1JEICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lICBIT1NUX1BPUlQgICAgICAgICBCSVQoMykKKyNkZWZpbmUgIEhPU1RfV1JUICAgICAgICAgIEJJVCgyKQorI2RlZmluZSAgU0NTSV9CVVNfRU4gICAgICAgQklUKDEpCisjZGVmaW5lICBTVEFSVF9UTyAgICAgICAgICBCSVQoMCkKIAotICAgICAgI2RlZmluZSAgTk9fQVJCICAgICAgICAgICAgQklUKDcpCi0gICAgICAjZGVmaW5lICBTRUxfVEFSICAgICAgICAgICBCSVQoNikKLSAgICAgICNkZWZpbmUgIEVOQV9BVE4gICAgICAgICAgIEJJVCg0KQotICAgICAgI2RlZmluZSAgRU5BX1JFU0VMICAgICAgICAgQklUKDIpCi0gICAgICAjZGVmaW5lICBTQ1NJX1JTVCAgICAgICAgICBCSVQoMSkKLSAgICAgICNkZWZpbmUgIEVOQV9TQ0FNX1NFTCAgICAgIEJJVCgwKQorI2RlZmluZSAgaHBfc2NzaXJlc2V0ICAgICAgICAgMHg0NwogCisjZGVmaW5lICBTQ1NJX0lOSSAgICAgICAgICBCSVQoNikKKyNkZWZpbmUgIFNDQU1fRU4gICAgICAgICAgIEJJVCg1KQorI2RlZmluZSAgRE1BX1JFU0VUICAgICAgICAgQklUKDMpCisjZGVmaW5lICBIUFNDU0lfUkVTRVQgICAgICBCSVQoMikKKyNkZWZpbmUgIFBST0dfUkVTRVQgICAgICAgIEJJVCgxKQorI2RlZmluZSAgRklGT19DTFIgICAgICAgICAgQklUKDApCiAKKyNkZWZpbmUgIGhwX3hmZXJjbnRfMCAgICAgICAgIDB4NDgKKyNkZWZpbmUgIGhwX3hmZXJjbnRfMiAgICAgICAgIDB4NEEKIAotICAgI2RlZmluZSAgaHBfcG9ydGN0cmxfMCAgICAgICAgMHg0NgorI2RlZmluZSAgaHBfZmlmb2RhdGFfMCAgICAgICAgMHg0QworI2RlZmluZSAgaHBfYWRkc3RhdCAgICAgICAgICAgMHg0RQogCi0gICAgICAjZGVmaW5lICBTQ1NJX1BPUlQgICAgICAgICBCSVQoNykKLSAgICAgICNkZWZpbmUgIFNDU0lfSU5CSVQgICAgICAgIEJJVCg2KQotICAgICAgI2RlZmluZSAgRE1BX1BPUlQgICAgICAgICAgQklUKDUpCi0gICAgICAjZGVmaW5lICBETUFfUkQgICAgICAgICAgICBCSVQoNCkKLSAgICAgICNkZWZpbmUgIEhPU1RfUE9SVCAgICAgICAgIEJJVCgzKQotICAgICAgI2RlZmluZSAgSE9TVF9XUlQgICAgICAgICAgQklUKDIpCi0gICAgICAjZGVmaW5lICBTQ1NJX0JVU19FTiAgICAgICBCSVQoMSkKLSAgICAgICNkZWZpbmUgIFNUQVJUX1RPICAgICAgICAgIEJJVCgwKQorI2RlZmluZSAgU0NBTV9USU1FUiAgICAgICAgQklUKDcpCisjZGVmaW5lICBTQ1NJX01PREU4ICAgICAgICBCSVQoMykKKyNkZWZpbmUgIFNDU0lfUEFSX0VSUiAgICAgIEJJVCgwKQogCi0gICAjZGVmaW5lICBocF9zY3NpcmVzZXQgICAgICAgICAweDQ3CisjZGVmaW5lICBocF9wcmdtY250XzAgICAgICAgICAweDRGCiAKLSAgICAgICNkZWZpbmUgIFNDU0lfVEFSICAgICAgICAgIEJJVCg3KQotICAgICAgI2RlZmluZSAgU0NTSV9JTkkgICAgICAgICAgQklUKDYpCi0gICAgICAjZGVmaW5lICBTQ0FNX0VOICAgICAgICAgICBCSVQoNSkKLSAgICAgICNkZWZpbmUgIEFDS19IT0xEICAgICAgICAgIEJJVCg0KQotICAgICAgI2RlZmluZSAgRE1BX1JFU0VUICAgICAgICAgQklUKDMpCi0gICAgICAjZGVmaW5lICBIUFNDU0lfUkVTRVQgICAgICBCSVQoMikKLSAgICAgICNkZWZpbmUgIFBST0dfUkVTRVQgICAgICAgIEJJVCgxKQotICAgICAgI2RlZmluZSAgRklGT19DTFIgICAgICAgICAgQklUKDApCisjZGVmaW5lICBocF9zZWxmaWRfMCAgICAgICAgICAweDUwCisjZGVmaW5lICBocF9zZWxmaWRfMSAgICAgICAgICAweDUxCisjZGVmaW5lICBocF9hcmJfaWQgICAgICAgICAgICAweDUyCiAKLSAgICNkZWZpbmUgIGhwX3hmZXJjbnRfMCAgICAgICAgIDB4NDgKLSAgICNkZWZpbmUgIGhwX3hmZXJjbnRfMSAgICAgICAgIDB4NDkKLSAgICNkZWZpbmUgIGhwX3hmZXJjbnRfMiAgICAgICAgIDB4NEEKLSAgICNkZWZpbmUgIGhwX3hmZXJjbnRfMyAgICAgICAgIDB4NEIKKyNkZWZpbmUgIGhwX3NlbGVjdF9pZCAgICAgICAgIDB4NTMKIAotICAgI2RlZmluZSAgaHBfZmlmb2RhdGFfMCAgICAgICAgMHg0QwotICAgI2RlZmluZSAgaHBfZmlmb2RhdGFfMSAgICAgICAgMHg0RAotICAgI2RlZmluZSAgaHBfYWRkc3RhdCAgICAgICAgICAgMHg0RQorI2RlZmluZSAgaHBfc3luY3RhcmdfYmFzZSAgICAgMHg1NAorI2RlZmluZSAgaHBfc3luY3RhcmdfMTIgICAgICAgMHg1NAorI2RlZmluZSAgaHBfc3luY3RhcmdfMTMgICAgICAgMHg1NQorI2RlZmluZSAgaHBfc3luY3RhcmdfMTQgICAgICAgMHg1NgorI2RlZmluZSAgaHBfc3luY3RhcmdfMTUgICAgICAgMHg1NwogCi0gICAgICAjZGVmaW5lICBTQ0FNX1RJTUVSICAgICAgICBCSVQoNykKLSAgICAgICNkZWZpbmUgIEFVVE9fUlVOTklORyAgICAgIEJJVCg2KQotICAgICAgI2RlZmluZSAgRkFTVF9TWU5DICAgICAgICAgQklUKDUpCi0gICAgICAjZGVmaW5lICBTQ1NJX01PREU4ICAgICAgICBCSVQoMykKLSAgICAgICNkZWZpbmUgIFNDU0lfUEFSX0VSUiAgICAgIEJJVCgwKQorI2RlZmluZSAgaHBfc3luY3RhcmdfOCAgICAgICAgMHg1OAorI2RlZmluZSAgaHBfc3luY3RhcmdfOSAgICAgICAgMHg1OQorI2RlZmluZSAgaHBfc3luY3RhcmdfMTAgICAgICAgMHg1QQorI2RlZmluZSAgaHBfc3luY3RhcmdfMTEgICAgICAgMHg1QgogCi0gICAjZGVmaW5lICBocF9wcmdtY250XzAgICAgICAgICAweDRGCisjZGVmaW5lICBocF9zeW5jdGFyZ180ICAgICAgICAweDVDCisjZGVmaW5lICBocF9zeW5jdGFyZ181ICAgICAgICAweDVECisjZGVmaW5lICBocF9zeW5jdGFyZ182ICAgICAgICAweDVFCisjZGVmaW5lICBocF9zeW5jdGFyZ183ICAgICAgICAweDVGCiAKLSAgICAgICNkZWZpbmUgIEFVVE9fUENfTUFTSyAgICAgIDB4M0YKKyNkZWZpbmUgIGhwX3N5bmN0YXJnXzAgICAgICAgIDB4NjAKKyNkZWZpbmUgIGhwX3N5bmN0YXJnXzEgICAgICAgIDB4NjEKKyNkZWZpbmUgIGhwX3N5bmN0YXJnXzIgICAgICAgIDB4NjIKKyNkZWZpbmUgIGhwX3N5bmN0YXJnXzMgICAgICAgIDB4NjMKIAotICAgI2RlZmluZSAgaHBfc2VsZmlkXzAgICAgICAgICAgMHg1MAotICAgI2RlZmluZSAgaHBfc2VsZmlkXzEgICAgICAgICAgMHg1MQotICAgI2RlZmluZSAgaHBfYXJiX2lkICAgICAgICAgICAgMHg1MgorI2RlZmluZSAgTkFSUk9XX1NDU0kgICAgICAgQklUKDQpCisjZGVmaW5lICBERUZBVUxUX09GRlNFVCAgICAweDBGCiAKLSAgICAgICNkZWZpbmUgIEFSQl9JRCAgICAgICAgICAgIChCSVQoMykgKyBCSVQoMikgKyBCSVQoMSkgKyBCSVQoMCkpCisjZGVmaW5lICBocF9hdXRvc3RhcnRfMCAgICAgICAweDY0CisjZGVmaW5lICBocF9hdXRvc3RhcnRfMSAgICAgICAweDY1CisjZGVmaW5lICBocF9hdXRvc3RhcnRfMyAgICAgICAweDY3CiAKLSAgICNkZWZpbmUgIGhwX3NlbGVjdF9pZCAgICAgICAgIDB4NTMKKyNkZWZpbmUgIEFVVE9fSU1NRUQgICAgQklUKDUpCisjZGVmaW5lICBTRUxFQ1QgICBCSVQoNikKKyNkZWZpbmUgIEVORF9EQVRBIChCSVQoNykrQklUKDYpKQogCi0gICAgICAjZGVmaW5lICBSRVNFTF9JRCAgICAgICAgICAoQklUKDcpICsgQklUKDYpICsgQklUKDUpICsgQklUKDQpKQotICAgICAgI2RlZmluZSAgU0VMRUNUX0lEICAgICAgICAgKEJJVCgzKSArIEJJVCgyKSArIEJJVCgxKSArIEJJVCgwKSkKKyNkZWZpbmUgIGhwX2dwX3JlZ18wICAgICAgICAgIDB4NjgKKyNkZWZpbmUgIGhwX2dwX3JlZ18xICAgICAgICAgIDB4NjkKKyNkZWZpbmUgIGhwX2dwX3JlZ18zICAgICAgICAgIDB4NkIKIAotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfYmFzZSAgICAgMHg1NAotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfMTIgICAgICAgMHg1NAotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfMTMgICAgICAgMHg1NQotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfMTQgICAgICAgMHg1NgotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfMTUgICAgICAgMHg1NworI2RlZmluZSAgaHBfc2VsdGltZW91dCAgICAgICAgMHg2QwogCi0gICAjZGVmaW5lICBocF9zeW5jdGFyZ184ICAgICAgICAweDU4Ci0gICAjZGVmaW5lICBocF9zeW5jdGFyZ185ICAgICAgICAweDU5Ci0gICAjZGVmaW5lICBocF9zeW5jdGFyZ18xMCAgICAgICAweDVBCi0gICAjZGVmaW5lICBocF9zeW5jdGFyZ18xMSAgICAgICAweDVCCisjZGVmaW5lICBUT180bXMgICAgICAgICAgICAweDY3CS8qIDMuOTk1OW1zICovCiAKLSAgICNkZWZpbmUgIGhwX3N5bmN0YXJnXzQgICAgICAgIDB4NUMKLSAgICNkZWZpbmUgIGhwX3N5bmN0YXJnXzUgICAgICAgIDB4NUQKLSAgICNkZWZpbmUgIGhwX3N5bmN0YXJnXzYgICAgICAgIDB4NUUKLSAgICNkZWZpbmUgIGhwX3N5bmN0YXJnXzcgICAgICAgIDB4NUYKKyNkZWZpbmUgIFRPXzVtcyAgICAgICAgICAgIDB4MDMJLyogNC45MTUybXMgKi8KKyNkZWZpbmUgIFRPXzEwbXMgICAgICAgICAgIDB4MDcJLyogMTEueHh4bXMgKi8KKyNkZWZpbmUgIFRPXzI1MG1zICAgICAgICAgIDB4OTkJLyogMjUwLjY4bXMgKi8KKyNkZWZpbmUgIFRPXzI5MG1zICAgICAgICAgIDB4QjEJLyogMjg5Ljk5bXMgKi8KIAotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfMCAgICAgICAgMHg2MAotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfMSAgICAgICAgMHg2MQotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfMiAgICAgICAgMHg2MgotICAgI2RlZmluZSAgaHBfc3luY3RhcmdfMyAgICAgICAgMHg2MworI2RlZmluZSAgaHBfY2xrY3RybF8wICAgICAgICAgMHg2RAogCi0gICAgICAjZGVmaW5lICBSQVRFXzIwTUIgICAgICAgICAweDAwCi0gICAgICAjZGVmaW5lICBSQVRFXzEwTUIgICAgICAgICAoICAgICAgICAgICAgICBCSVQoNSkpCi0gICAgICAjZGVmaW5lICBSQVRFXzZfNk1CICAgICAgICAoICAgICAgIEJJVCg2KSAgICAgICApICAgCi0gICAgICAjZGVmaW5lICBSQVRFXzVNQiAgICAgICAgICAoICAgICAgIEJJVCg2KStCSVQoNSkpCi0gICAgICAjZGVmaW5lICBSQVRFXzRNQiAgICAgICAgICAoQklUKDcpICAgICAgICAgICAgICApCi0gICAgICAjZGVmaW5lICBSQVRFXzNfMzNNQiAgICAgICAoQklUKDcpICAgICAgICtCSVQoNSkpCi0gICAgICAjZGVmaW5lICBSQVRFXzJfODVNQiAgICAgICAoQklUKDcpK0JJVCg2KSAgICAgICApCi0gICAgICAjZGVmaW5lICBSQVRFXzJfNU1CICAgICAgICAoQklUKDcpK0JJVCg1KStCSVQoNikpCi0gICAgICAjZGVmaW5lICBORVhUX0NMSyAgICAgICAgICBCSVQoNSkKLSAgICAgICNkZWZpbmUgIFNMT1dFU1RfU1lOQyAgICAgIChCSVQoNykrQklUKDYpK0JJVCg1KSkKLSAgICAgICNkZWZpbmUgIE5BUlJPV19TQ1NJICAgICAgIEJJVCg0KQotICAgICAgI2RlZmluZSAgU1lOQ19PRkZTRVQgICAgICAgKEJJVCgzKSArIEJJVCgyKSArIEJJVCgxKSArIEJJVCgwKSkKLSAgICAgICNkZWZpbmUgIERFRkFVTFRfQVNZTkMgICAgIDB4MDAKLSAgICAgICNkZWZpbmUgIERFRkFVTFRfT0ZGU0VUICAgIDB4MEYKKyNkZWZpbmUgIFBXUl9EV04gICAgICAgICAgIEJJVCg2KQorI2RlZmluZSAgQUNUZGVhc3NlcnQgICAgICAgQklUKDQpCisjZGVmaW5lICBDTEtfNDBNSFogICAgICAgICAoQklUKDEpICsgQklUKDApKQogCi0gICAjZGVmaW5lICBocF9hdXRvc3RhcnRfMCAgICAgICAweDY0Ci0gICAjZGVmaW5lICBocF9hdXRvc3RhcnRfMSAgICAgICAweDY1Ci0gICAjZGVmaW5lICBocF9hdXRvc3RhcnRfMiAgICAgICAweDY2Ci0gICAjZGVmaW5lICBocF9hdXRvc3RhcnRfMyAgICAgICAweDY3CisjZGVmaW5lICBDTEtDVFJMX0RFRkFVTFQgICAoQUNUZGVhc3NlcnQgfCBDTEtfNDBNSFopCiAKKyNkZWZpbmUgIGhwX2ZpZm9yZWFkICAgICAgICAgIDB4NkUKKyNkZWZpbmUgIGhwX2ZpZm93cml0ZSAgICAgICAgIDB4NkYKIAorI2RlZmluZSAgaHBfb2Zmc2V0Y3RyICAgICAgICAgMHg3MAorI2RlZmluZSAgaHBfeGZlcnN0YXQgICAgICAgICAgMHg3MQogCi0gICAgICAjZGVmaW5lICBESVNBQkxFICAweDAwCi0gICAgICAjZGVmaW5lICBBVVRPX0lNTUVEICAgIEJJVCg1KQotICAgICAgI2RlZmluZSAgU0VMRUNUICAgQklUKDYpCi0gICAgICAjZGVmaW5lICBSRVNFTEVDVCAoQklUKDYpK0JJVCg1KSkKLSAgICAgICNkZWZpbmUgIEJVU0ZSRUUgIEJJVCg3KQotICAgICAgI2RlZmluZSAgWEZFUl8wICAgKEJJVCg3KStCSVQoNSkpCi0gICAgICAjZGVmaW5lICBFTkRfREFUQSAoQklUKDcpK0JJVCg2KSkKLSAgICAgICNkZWZpbmUgIE1TR19QSFogIChCSVQoNykrQklUKDYpK0JJVCg1KSkKLQotICAgI2RlZmluZSAgaHBfZ3BfcmVnXzAgICAgICAgICAgMHg2OAotICAgI2RlZmluZSAgaHBfZ3BfcmVnXzEgICAgICAgICAgMHg2OQotICAgI2RlZmluZSAgaHBfZ3BfcmVnXzIgICAgICAgICAgMHg2QQotICAgI2RlZmluZSAgaHBfZ3BfcmVnXzMgICAgICAgICAgMHg2QgotCi0gICAjZGVmaW5lICBocF9zZWx0aW1lb3V0ICAgICAgICAweDZDCi0KLQotICAgICAgI2RlZmluZSAgVE9fMm1zICAgICAgICAgICAgMHg1NCAgICAgIC8qIDIuMDUwM21zICovCi0gICAgICAjZGVmaW5lICBUT180bXMgICAgICAgICAgICAweDY3ICAgICAgLyogMy45OTU5bXMgKi8KLQotICAgICAgI2RlZmluZSAgVE9fNW1zICAgICAgICAgICAgMHgwMyAgICAgIC8qIDQuOTE1Mm1zICovCi0gICAgICAjZGVmaW5lICBUT18xMG1zICAgICAgICAgICAweDA3ICAgICAgLyogMTEueHh4bXMgKi8KLSAgICAgICNkZWZpbmUgIFRPXzI1MG1zICAgICAgICAgIDB4OTkgICAgICAvKiAyNTAuNjhtcyAqLwotICAgICAgI2RlZmluZSAgVE9fMjkwbXMgICAgICAgICAgMHhCMSAgICAgIC8qIDI4OS45OW1zICovCi0gICAgICAjZGVmaW5lICBUT18zNTBtcyAgICAgICAgICAweEQ2ICAgICAgLyogMzUwLjYybXMgKi8KLSAgICAgICNkZWZpbmUgIFRPXzQxN21zICAgICAgICAgIDB4RkYgICAgICAvKiA0MTcuNzltcyAqLwotCi0gICAjZGVmaW5lICBocF9jbGtjdHJsXzAgICAgICAgICAweDZECi0KLSAgICAgICNkZWZpbmUgIFBXUl9EV04gICAgICAgICAgIEJJVCg2KQotICAgICAgI2RlZmluZSAgQUNUZGVhc3NlcnQgICAgICAgQklUKDQpCi0gICAgICAjZGVmaW5lICBBVE5vbkVyciAgICAgICAgICBCSVQoMykKLSAgICAgICNkZWZpbmUgIENMS18zME1IWiAgICAgICAgIEJJVCgxKQotICAgICAgI2RlZmluZSAgQ0xLXzQwTUhaICAgICAgICAgKEJJVCgxKSArIEJJVCgwKSkKLSAgICAgICNkZWZpbmUgIENMS181ME1IWiAgICAgICAgIEJJVCgyKQotCi0gICAgICAjZGVmaW5lICBDTEtDVFJMX0RFRkFVTFQgICAoQUNUZGVhc3NlcnQgfCBDTEtfNDBNSFopCi0KLSAgICNkZWZpbmUgIGhwX2ZpZm9yZWFkICAgICAgICAgIDB4NkUKLSAgICNkZWZpbmUgIGhwX2ZpZm93cml0ZSAgICAgICAgIDB4NkYKLQotICAgI2RlZmluZSAgaHBfb2Zmc2V0Y3RyICAgICAgICAgMHg3MAotICAgI2RlZmluZSAgaHBfeGZlcnN0YXQgICAgICAgICAgMHg3MQotCi0gICAgICAjZGVmaW5lICBGSUZPX0ZVTEwgICAgICAgICBCSVQoNykKLSAgICAgICNkZWZpbmUgIEZJRk9fRU1QVFkgICAgICAgIEJJVCg2KQotICAgICAgI2RlZmluZSAgRklGT19NQVNLICAgICAgICAgMHgzRiAgIC8qIE1hc2sgZm9yIHRoZSBGSUZPIGNvdW50IHZhbHVlLiAqLwotICAgICAgI2RlZmluZSAgRklGT19MRU4gICAgICAgICAgMHgyMAotCi0gICAjZGVmaW5lICBocF9wb3J0Y3RybF8xICAgICAgICAweDcyCi0KLSAgICAgICNkZWZpbmUgIEVWRU5fSE9TVF9QICAgICAgIEJJVCg1KQotICAgICAgI2RlZmluZSAgSU5WVF9TQ1NJICAgICAgICAgQklUKDQpCi0gICAgICAjZGVmaW5lICBDSEtfU0NTSV9QICAgICAgICBCSVQoMykKLSAgICAgICNkZWZpbmUgIEhPU1RfTU9ERTggICAgICAgIEJJVCgwKQotICAgICAgI2RlZmluZSAgSE9TVF9NT0RFMTYgICAgICAgMHgwMAotCi0gICAjZGVmaW5lICBocF94ZmVyX3BhZCAgICAgICAgICAweDczCi0KLSAgICAgICNkZWZpbmUgIElEX1VOTE9DSyAgICAgICAgIEJJVCgzKQotICAgICAgI2RlZmluZSAgWEZFUl9QQUQgICAgICAgICAgQklUKDIpCi0KLSAgICNkZWZpbmUgIGhwX3Njc2lkYXRhXzAgICAgICAgIDB4NzQKLSAgICNkZWZpbmUgIGhwX3Njc2lkYXRhXzEgICAgICAgIDB4NzUKLSAgICNkZWZpbmUgIGhwX3RpbWVyXzAgICAgICAgICAgIDB4NzYKLSAgICNkZWZpbmUgIGhwX3RpbWVyXzEgICAgICAgICAgIDB4NzcKLQotICAgI2RlZmluZSAgaHBfcmVzZXJ2ZWRfNzggICAgICAgMHg3OAotICAgI2RlZmluZSAgaHBfcmVzZXJ2ZWRfNzkgICAgICAgMHg3OQotICAgI2RlZmluZSAgaHBfcmVzZXJ2ZWRfN0EgICAgICAgMHg3QQotICAgI2RlZmluZSAgaHBfcmVzZXJ2ZWRfN0IgICAgICAgMHg3QgotCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF83QyAgICAgICAweDdDCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF83RCAgICAgICAweDdECi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF83RSAgICAgICAweDdFCi0gICAjZGVmaW5lICBocF9yZXNlcnZlZF83RiAgICAgICAweDdGCi0KLSAgICNkZWZpbmUgIGhwX2FyYW1CYXNlICAgICAgICAgIDB4ODAKLSAgICNkZWZpbmUgIEJJT1NfREFUQV9PRkZTRVQgICAgIDB4NjAKLSAgICNkZWZpbmUgIEJJT1NfUkVMQVRJVkVfQ0FSRCAgIDB4NjQKLQotCi0KLQotICAgICAgI2RlZmluZSAgQVVUT19MRU4gMHg4MAotICAgICAgI2RlZmluZSAgQVIwICAgICAgMHgwMAotICAgICAgI2RlZmluZSAgQVIxICAgICAgQklUVyg4KQotICAgICAgI2RlZmluZSAgQVIyICAgICAgQklUVyg5KQotICAgICAgI2RlZmluZSAgQVIzICAgICAgKEJJVFcoOSkgKyBCSVRXKDgpKQotICAgICAgI2RlZmluZSAgU0RBVEEgICAgQklUVygxMCkKLQotICAgICAgI2RlZmluZSAgTk9QX09QICAgMHgwMCAgICAgICAgLyogTm9wIGNvbW1hbmQgKi8KLQotICAgICAgI2RlZmluZSAgQ1JEX09QICAgQklUVygxMSkgICAgIC8qIENtcCBSZWcuIHcvIERhdGEgKi8KLQotICAgICAgI2RlZmluZSAgQ1JSX09QICAgQklUVygxMikgICAgIC8qIENtcCBSZWcuIHcuIFJlZy4gKi8KLQotICAgICAgI2RlZmluZSAgQ0JFX09QICAgKEJJVFcoMTQpK0JJVFcoMTIpK0JJVFcoMTEpKSAvKiBDbXAgU0NTSSBjbWQgY2xhc3MgJiBCcmFuY2ggRVEgKi8KLSAgICAgIAotICAgICAgI2RlZmluZSAgQ0JOX09QICAgKEJJVFcoMTQpK0JJVFcoMTMpKSAgLyogQ21wIFNDU0kgY21kIGNsYXNzICYgQnJhbmNoIE5PVCBFUSAqLwotICAgICAgCi0gICAgICAjZGVmaW5lICBDUEVfT1AgICAoQklUVygxNCkrQklUVygxMSkpICAvKiBDbXAgU0NTSSBwaHMgJiBCcmFuY2ggRVEgKi8KLQotICAgICAgI2RlZmluZSAgQ1BOX09QICAgKEJJVFcoMTQpK0JJVFcoMTIpKSAgLyogQ21wIFNDU0kgcGhzICYgQnJhbmNoIE5PVCBFUSAqLwotCi0KLSAgICAgICNkZWZpbmUgIEFEQVRBX09VVCAgIDB4MDAgICAgIAotICAgICAgI2RlZmluZSAgQURBVEFfSU4gICAgQklUVyg4KQotICAgICAgI2RlZmluZSAgQUNPTU1BTkQgICAgQklUVygxMCkKLSAgICAgICNkZWZpbmUgIEFTVEFUVVMgICAgIChCSVRXKDEwKStCSVRXKDgpKQotICAgICAgI2RlZmluZSAgQU1TR19PVVQgICAgKEJJVFcoMTApK0JJVFcoOSkpCi0gICAgICAjZGVmaW5lICBBTVNHX0lOICAgICAoQklUVygxMCkrQklUVyg5KStCSVRXKDgpKQotICAgICAgI2RlZmluZSAgQUlMTEVHQUwgICAgKEJJVFcoOSkrQklUVyg4KSkKLQotCi0gICAgICAjZGVmaW5lICBCUkhfT1AgICBCSVRXKDEzKSAgIC8qIEJyYW5jaCAqLwotCi0gICAgICAKLSAgICAgICNkZWZpbmUgIEFMV0FZUyAgIDB4MDAKLSAgICAgICNkZWZpbmUgIEVRVUFMICAgIEJJVFcoOCkKLSAgICAgICNkZWZpbmUgIE5PVF9FUSAgIEJJVFcoOSkKLQotICAgICAgI2RlZmluZSAgVENCX09QICAgKEJJVFcoMTMpK0JJVFcoMTEpKSAgICAvKiBUZXN0IGNvbmRpdGlvbiAmIGJyYW5jaCAqLwotCi0gICAgICAKLSAgICAgICNkZWZpbmUgIEFUTl9TRVQgICAgIEJJVFcoOCkKLSAgICAgICNkZWZpbmUgIEFUTl9SRVNFVCAgIEJJVFcoOSkKLSAgICAgICNkZWZpbmUgIFhGRVJfQ05UICAgIChCSVRXKDkpK0JJVFcoOCkpCi0gICAgICAjZGVmaW5lICBGSUZPXzAgICAgICBCSVRXKDEwKQotICAgICAgI2RlZmluZSAgRklGT19OT1QwICAgKEJJVFcoMTApK0JJVFcoOCkpCi0gICAgICAjZGVmaW5lICBUX1VTRV9TWU5DMCAoQklUVygxMCkrQklUVyg5KSkKLQotCi0gICAgICAjZGVmaW5lICBNUE1fT1AgICBCSVRXKDE1KSAgICAgICAgLyogTWF0Y2ggcGhhc2UgYW5kIG1vdmUgZGF0YSAqLwotCi0gICAgICAjZGVmaW5lICBNRFJfT1AgICAoQklUVygxMikrQklUVygxMSkpIC8qIE1vdmUgZGF0YSB0byBSZWcuICovCi0KLSAgICAgICNkZWZpbmUgIE1SUl9PUCAgIEJJVFcoMTQpICAgICAgICAvKiBNb3ZlIERSZWcuIHRvIFJlZy4gKi8KLQotCi0gICAgICAjZGVmaW5lICBTX0lEUkVHICAoQklUKDIpK0JJVCgxKStCSVQoMCkpCi0KLQotICAgICAgI2RlZmluZSAgRF9BUjAgICAgMHgwMAotICAgICAgI2RlZmluZSAgRF9BUjEgICAgQklUKDApCi0gICAgICAjZGVmaW5lICBEX0FSMiAgICBCSVQoMSkKLSAgICAgICNkZWZpbmUgIERfQVIzICAgIChCSVQoMSkgKyBCSVQoMCkpCi0gICAgICAjZGVmaW5lICBEX1NEQVRBICBCSVQoMikKLSAgICAgICNkZWZpbmUgIERfQlVDS0VUIChCSVQoMikgKyBCSVQoMSkgKyBCSVQoMCkpCi0KLQotICAgICAgI2RlZmluZSAgQURSX09QICAgKEJJVFcoMTMpK0JJVFcoMTIpKSAvKiBMb2dpY2FsIEFORCBSZWcuIHcuIERhdGEgKi8KLQotICAgICAgI2RlZmluZSAgQURTX09QICAgKEJJVFcoMTQpK0JJVFcoMTMpK0JJVFcoMTIpKSAKKyNkZWZpbmUgIEZJRk9fRU1QVFkgICAgICAgIEJJVCg2KQogCi0gICAgICAjZGVmaW5lICBPRFJfT1AgICAoQklUVygxMykrQklUVygxMikrQklUVygxMSkpICAKKyNkZWZpbmUgIGhwX3BvcnRjdHJsXzEgICAgICAgIDB4NzIKIAotICAgICAgI2RlZmluZSAgT0RTX09QICAgKEJJVFcoMTQpK0JJVFcoMTMpK0JJVFcoMTIpK0JJVFcoMTEpKSAgCisjZGVmaW5lICBDSEtfU0NTSV9QICAgICAgICBCSVQoMykKKyNkZWZpbmUgIEhPU1RfTU9ERTggICAgICAgIEJJVCgwKQogCi0gICAgICAjZGVmaW5lICBTVFJfT1AgICAoQklUVygxNSkrQklUVygxNCkpIC8qIFN0b3JlIHRvIEFfUmVnLiAqLworI2RlZmluZSAgaHBfeGZlcl9wYWQgICAgICAgICAgMHg3MwogCi0gICAgICAjZGVmaW5lICBBSU5UX0VOQTEgICAweDAwCi0gICAgICAjZGVmaW5lICBBSU5UX1NUQVQxICBCSVRXKDgpCi0gICAgICAjZGVmaW5lICBBU0NTSV9TSUcgICBCSVRXKDkpCi0gICAgICAjZGVmaW5lICBBU0NTSV9DTlRMICAoQklUVyg5KStCSVRXKDgpKQotICAgICAgI2RlZmluZSAgQVBPUlRfQ05UTCAgQklUVygxMCkKLSAgICAgICNkZWZpbmUgIEFSU1RfQ05UTCAgIChCSVRXKDEwKStCSVRXKDgpKQotICAgICAgI2RlZmluZSAgQVhGRVJDTlQwICAgKEJJVFcoMTApK0JJVFcoOSkpCi0gICAgICAjZGVmaW5lICBBWEZFUkNOVDEgICAoQklUVygxMCkrQklUVyg5KStCSVRXKDgpKQotICAgICAgI2RlZmluZSAgQVhGRVJDTlQyICAgQklUVygxMSkKLSAgICAgICNkZWZpbmUgIEFGSUZPX0RBVEEgIChCSVRXKDExKStCSVRXKDgpKQotICAgICAgI2RlZmluZSAgQVNDU0lTRUxJRCAgKEJJVFcoMTEpK0JJVFcoOSkpCi0gICAgICAjZGVmaW5lICBBU0NTSVNZTkMwICAoQklUVygxMSkrQklUVyg5KStCSVRXKDgpKQorI2RlZmluZSAgSURfVU5MT0NLICAgICAgICAgQklUKDMpCiAKKyNkZWZpbmUgIGhwX3Njc2lkYXRhXzAgICAgICAgIDB4NzQKKyNkZWZpbmUgIGhwX3Njc2lkYXRhXzEgICAgICAgIDB4NzUKIAotICAgICAgI2RlZmluZSAgUkFUX09QICAgICAgKEJJVFcoMTQpK0JJVFcoMTMpK0JJVFcoMTEpKQorI2RlZmluZSAgaHBfYXJhbUJhc2UgICAgICAgICAgMHg4MAorI2RlZmluZSAgQklPU19EQVRBX09GRlNFVCAgICAgMHg2MAorI2RlZmluZSAgQklPU19SRUxBVElWRV9DQVJEICAgMHg2NAogCi0gICAgICAjZGVmaW5lICBTU0lfT1AgICAgICAoQklUVygxNSkrQklUVygxMSkpCisjZGVmaW5lICBBUjMgICAgICAoQklUVyg5KSArIEJJVFcoOCkpCisjZGVmaW5lICBTREFUQSAgICBCSVRXKDEwKQogCisjZGVmaW5lICBDUkRfT1AgICBCSVRXKDExKQkvKiBDbXAgUmVnLiB3LyBEYXRhICovCiAKLSAgICAgICNkZWZpbmUgIFNTSV9JVEFSX0RJU0MJKElUQVJfRElTQyA+PiA4KQotICAgICAgI2RlZmluZSAgU1NJX0lET19TVFJUCShJRE9fU1RSVCA+PiA4KQotICAgICAgI2RlZmluZSAgU1NJX0lESV9TVFJUCShJRE9fU1RSVCA+PiA4KQorI2RlZmluZSAgQ1JSX09QICAgQklUVygxMikJLyogQ21wIFJlZy4gdy4gUmVnLiAqLwogCi0gICAgICAjZGVmaW5lICBTU0lfSUNNRF9DT01QCShJQ01EX0NPTVAgPj4gOCkKLSAgICAgICNkZWZpbmUgIFNTSV9JVElDS0xFCShJVElDS0xFID4+IDgpCisjZGVmaW5lICBDUEVfT1AgICAoQklUVygxNCkrQklUVygxMSkpCS8qIENtcCBTQ1NJIHBocyAmIEJyYW5jaCBFUSAqLwogCi0gICAgICAjZGVmaW5lICBTU0lfSVVOS1dOCShJVU5LV04gPj4gOCkKLSAgICAgICNkZWZpbmUgIFNTSV9JTk9fQ0MJKElVTktXTiA+PiA4KQotICAgICAgI2RlZmluZSAgU1NJX0lSRkFJTAkoSVVOS1dOID4+IDgpCisjZGVmaW5lICBDUE5fT1AgICAoQklUVygxNCkrQklUVygxMikpCS8qIENtcCBTQ1NJIHBocyAmIEJyYW5jaCBOT1QgRVEgKi8KIAorI2RlZmluZSAgQURBVEFfT1VUICAgMHgwMAorI2RlZmluZSAgQURBVEFfSU4gICAgQklUVyg4KQorI2RlZmluZSAgQUNPTU1BTkQgICAgQklUVygxMCkKKyNkZWZpbmUgIEFTVEFUVVMgICAgIChCSVRXKDEwKStCSVRXKDgpKQorI2RlZmluZSAgQU1TR19PVVQgICAgKEJJVFcoMTApK0JJVFcoOSkpCisjZGVmaW5lICBBTVNHX0lOICAgICAoQklUVygxMCkrQklUVyg5KStCSVRXKDgpKQogCi0gICAgICAjZGVmaW5lICBOUCAgICAweDEwICAgICAvKk5leHQgUGhhc2UgKi8KLSAgICAgICNkZWZpbmUgIE5UQ01EIDB4MDIgICAgIC8qTm9uLSBUYWdnZWQgQ29tbWFuZCBzdGFydCAqLwotICAgICAgI2RlZmluZSAgQ01EUFogMHgwNCAgICAgLypDb21tYW5kIHBoYXNlICovCi0gICAgICAjZGVmaW5lICBESU5UICAweDEyICAgICAvKkRhdGEgT3V0L0luIGludGVycnVwdCAqLwotICAgICAgI2RlZmluZSAgREkgICAgMHgxMyAgICAgLypEYXRhIE91dCAqLwotICAgICAgI2RlZmluZSAgTUkgICAgMHgxNCAgICAgLypNZXNzYWdlIEluICovCi0gICAgICAjZGVmaW5lICBEQyAgICAweDE5ICAgICAvKkRpc2Nvbm5lY3QgTWVzc2FnZSAqLwotICAgICAgI2RlZmluZSAgU1QgICAgMHgxRCAgICAgLypTdGF0dXMgUGhhc2UgKi8KLSAgICAgICNkZWZpbmUgIFVOS05XTiAweDI0ICAgIC8qVW5rbm93biBidXMgYWN0aW9uICovCi0gICAgICAjZGVmaW5lICBDQyAgICAweDI1ICAgICAvKkNvbW1hbmQgQ29tcGxldGlvbiBmYWlsdXJlICovCi0gICAgICAjZGVmaW5lICBUSUNLICAweDI2ICAgICAvKk5ldyB0YXJnZXQgcmVzZWxlY3RlZCB1cy4gKi8KLSAgICAgICNkZWZpbmUgIFJGQUlMIDB4MjcgICAgIC8qUmVzZWxlY3Rpb24gZmFpbGVkICovCi0gICAgICAjZGVmaW5lICBTRUxDSEsgMHgyOCAgICAgLypTZWxlY3QgJiBDaGVjayBTQ1NJIElEIGxhdGNoIHJlZyAqLworI2RlZmluZSAgQlJIX09QICAgQklUVygxMykJLyogQnJhbmNoICovCiAKKyNkZWZpbmUgIEFMV0FZUyAgIDB4MDAKKyNkZWZpbmUgIEVRVUFMICAgIEJJVFcoOCkKKyNkZWZpbmUgIE5PVF9FUSAgIEJJVFcoOSkKIAotICAgICAgI2RlZmluZSAgSURfTVNHX1NUUlQgICAgaHBfYXJhbUJhc2UgKyAweDAwCi0gICAgICAjZGVmaW5lICBOT05fVEFHX0lEX01TRyBocF9hcmFtQmFzZSArIDB4MDYKLSAgICAgICNkZWZpbmUgIENNRF9TVFJUICAgICAgIGhwX2FyYW1CYXNlICsgMHgwOAotICAgICAgI2RlZmluZSAgU1lOQ19NU0dTICAgICAgaHBfYXJhbUJhc2UgKyAweDA4CisjZGVmaW5lICBUQ0JfT1AgICAoQklUVygxMykrQklUVygxMSkpCS8qIFRlc3QgY29uZGl0aW9uICYgYnJhbmNoICovCiAKKyNkZWZpbmUgIEZJRk9fMCAgICAgIEJJVFcoMTApCiAKKyNkZWZpbmUgIE1QTV9PUCAgIEJJVFcoMTUpCS8qIE1hdGNoIHBoYXNlIGFuZCBtb3ZlIGRhdGEgKi8KIAorI2RlZmluZSAgTVJSX09QICAgQklUVygxNCkJLyogTW92ZSBEUmVnLiB0byBSZWcuICovCiAKKyNkZWZpbmUgIFNfSURSRUcgIChCSVQoMikrQklUKDEpK0JJVCgwKSkKIAotICAgICAgI2RlZmluZSAgVEFHX1NUUlQgICAgICAgICAgMHgwMAotICAgICAgI2RlZmluZSAgU0VMRUNUSU9OX1NUQVJUICAgMHgwMAotICAgICAgI2RlZmluZSAgRElTQ09OTkVDVF9TVEFSVCAgMHgxMC8yCi0gICAgICAjZGVmaW5lICBFTkRfREFUQV9TVEFSVCAgICAweDE0LzIKLSAgICAgICNkZWZpbmUgIE5PTlRBR19TVFJUICAgICAgIDB4MDIvMgotICAgICAgI2RlZmluZSAgQ01EX09OTFlfU1RSVCAgICAgQ01EUFovMgotICAgICAgI2RlZmluZSAgVElDS0xFX1NUUlQgICAgIFRJQ0svMgotICAgICAgI2RlZmluZSAgU0VMQ0hLX1NUUlQgICAgIFNFTENISy8yCisjZGVmaW5lICBEX0FSMCAgICAweDAwCisjZGVmaW5lICBEX0FSMSAgICBCSVQoMCkKKyNkZWZpbmUgIERfQlVDS0VUIChCSVQoMikgKyBCSVQoMSkgKyBCSVQoMCkpCiAKKyNkZWZpbmUgIFJBVF9PUCAgICAgIChCSVRXKDE0KStCSVRXKDEzKStCSVRXKDExKSkKIAorI2RlZmluZSAgU1NJX09QICAgICAgKEJJVFcoMTUpK0JJVFcoMTEpKQogCisjZGVmaW5lICBTU0lfSVRBUl9ESVNDCShJVEFSX0RJU0MgPj4gOCkKKyNkZWZpbmUgIFNTSV9JRE9fU1RSVAkoSURPX1NUUlQgPj4gOCkKIAotI2RlZmluZSBtRUVQUk9NX0NMS19ERUxBWShwb3J0KSAoUkRfSEFSUE9PTihwb3J0K2hwX2ludHN0YXRfMSkpCisjZGVmaW5lICBTU0lfSUNNRF9DT01QCShJQ01EX0NPTVAgPj4gOCkKKyNkZWZpbmUgIFNTSV9JVElDS0xFCShJVElDS0xFID4+IDgpCiAKLSNkZWZpbmUgbVdBSVRfMTBNUyhwb3J0KSAoUkRfSEFSUE9PTihwb3J0K2hwX2ludHN0YXRfMSkpCisjZGVmaW5lICBTU0lfSVVOS1dOCShJVU5LV04gPj4gOCkKKyNkZWZpbmUgIFNTSV9JTk9fQ0MJKElVTktXTiA+PiA4KQorI2RlZmluZSAgU1NJX0lSRkFJTAkoSVVOS1dOID4+IDgpCiAKKyNkZWZpbmUgIE5QICAgIDB4MTAJCS8qTmV4dCBQaGFzZSAqLworI2RlZmluZSAgTlRDTUQgMHgwMgkJLypOb24tIFRhZ2dlZCBDb21tYW5kIHN0YXJ0ICovCisjZGVmaW5lICBDTURQWiAweDA0CQkvKkNvbW1hbmQgcGhhc2UgKi8KKyNkZWZpbmUgIERJTlQgIDB4MTIJCS8qRGF0YSBPdXQvSW4gaW50ZXJydXB0ICovCisjZGVmaW5lICBESSAgICAweDEzCQkvKkRhdGEgT3V0ICovCisjZGVmaW5lICBEQyAgICAweDE5CQkvKkRpc2Nvbm5lY3QgTWVzc2FnZSAqLworI2RlZmluZSAgU1QgICAgMHgxRAkJLypTdGF0dXMgUGhhc2UgKi8KKyNkZWZpbmUgIFVOS05XTiAweDI0CQkvKlVua25vd24gYnVzIGFjdGlvbiAqLworI2RlZmluZSAgQ0MgICAgMHgyNQkJLypDb21tYW5kIENvbXBsZXRpb24gZmFpbHVyZSAqLworI2RlZmluZSAgVElDSyAgMHgyNgkJLypOZXcgdGFyZ2V0IHJlc2VsZWN0ZWQgdXMuICovCisjZGVmaW5lICBTRUxDSEsgMHgyOAkJLypTZWxlY3QgJiBDaGVjayBTQ1NJIElEIGxhdGNoIHJlZyAqLwogCi0jZGVmaW5lIENMUl9YRkVSX0NOVChwb3J0KSAoV1JfSEFSUE9PTihwb3J0K2hwX3hmZXJjbnRfMCwgMHgwMCkpCisjZGVmaW5lICBJRF9NU0dfU1RSVCAgICBocF9hcmFtQmFzZSArIDB4MDAKKyNkZWZpbmUgIE5PTl9UQUdfSURfTVNHIGhwX2FyYW1CYXNlICsgMHgwNgorI2RlZmluZSAgQ01EX1NUUlQgICAgICAgaHBfYXJhbUJhc2UgKyAweDA4CisjZGVmaW5lICBTWU5DX01TR1MgICAgICBocF9hcmFtQmFzZSArIDB4MDgKIAotI2RlZmluZSBTRVRfWEZFUl9DTlQocG9ydCwgZGF0YSkgKFdSX0hBUlAzMihwb3J0LGhwX3hmZXJjbnRfMCxkYXRhKSkKKyNkZWZpbmUgIFRBR19TVFJUICAgICAgICAgIDB4MDAKKyNkZWZpbmUgIERJU0NPTk5FQ1RfU1RBUlQgIDB4MTAvMgorI2RlZmluZSAgRU5EX0RBVEFfU1RBUlQgICAgMHgxNC8yCisjZGVmaW5lICBDTURfT05MWV9TVFJUICAgICBDTURQWi8yCisjZGVmaW5lICBTRUxDSEtfU1RSVCAgICAgU0VMQ0hLLzIKIAogI2RlZmluZSBHRVRfWEZFUl9DTlQocG9ydCwgeGZlcmNudCkge1JEX0hBUlAzMihwb3J0LGhwX3hmZXJjbnRfMCx4ZmVyY250KTsgeGZlcmNudCAmPSAweEZGRkZGRjt9CiAvKiAjZGVmaW5lIEdFVF9YRkVSX0NOVChwb3J0LCB4ZmVyY250KSAoeGZlcmNudCA9IFJEX0hBUlBPT04ocG9ydCtocF94ZmVyY250XzIpLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZmVyY250IDw8PSAxNixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZmVyY250IHw9IFJEV19IQVJQT09OKChVU0hPUlQpKHBvcnQraHBfeGZlcmNudF8wKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZmVyY250IHw9IFJEV19IQVJQT09OKCh1bnNpZ25lZCBzaG9ydCkocG9ydCtocF94ZmVyY250XzApKSkKICAqLwotI2RlZmluZSBIUF9TRVRVUF9BRERSX0NOVChwb3J0LGFkZHIsY291bnQpIChXUldfSEFSUE9PTigocG9ydCtocF9ob3N0X2FkZHJfbG8pLCAoVVNIT1JUKShhZGRyICYgMHgwMDAwRkZGRkwpKSxcCisjZGVmaW5lIEhQX1NFVFVQX0FERFJfQ05UKHBvcnQsYWRkcixjb3VudCkgKFdSV19IQVJQT09OKChwb3J0K2hwX2hvc3RfYWRkcl9sbyksICh1bnNpZ25lZCBzaG9ydCkoYWRkciAmIDB4MDAwMEZGRkZMKSksXAogICAgICAgICAgYWRkciA+Pj0gMTYsXAotICAgICAgICAgV1JXX0hBUlBPT04oKHBvcnQraHBfaG9zdF9hZGRyX2htaSksIChVU0hPUlQpKGFkZHIgJiAweDAwMDBGRkZGTCkpLFwKKyAgICAgICAgIFdSV19IQVJQT09OKChwb3J0K2hwX2hvc3RfYWRkcl9obWkpLCAodW5zaWduZWQgc2hvcnQpKGFkZHIgJiAweDAwMDBGRkZGTCkpLFwKICAgICAgICAgIFdSX0hBUlAzMihwb3J0LGhwX3hmZXJjbnRfMCxjb3VudCksXAotICAgICAgICAgV1JXX0hBUlBPT04oKHBvcnQraHBfeGZlcl9jbnRfbG8pLCAoVVNIT1JUKShjb3VudCAmIDB4MDAwMEZGRkZMKSksXAorICAgICAgICAgV1JXX0hBUlBPT04oKHBvcnQraHBfeGZlcl9jbnRfbG8pLCAodW5zaWduZWQgc2hvcnQpKGNvdW50ICYgMHgwMDAwRkZGRkwpKSxcCiAgICAgICAgICBjb3VudCA+Pj0gMTYsXAogICAgICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX3hmZXJfY250X2hpLCAoY291bnQgJiAweEZGKSkpCiAKICNkZWZpbmUgQUNDRVBUX01TRyhwb3J0KSB7d2hpbGUoUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcpICYgU0NTSV9SRVEpe31cCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnLCBTX0lMTF9QSCk7fQogCi0KICNkZWZpbmUgQUNDRVBUX01TR19BVE4ocG9ydCkge3doaWxlKFJEX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnKSAmIFNDU0lfUkVRKXt9XAogICAgICAgICAgICAgICAgICAgICAgICAgICBXUl9IQVJQT09OKHBvcnQraHBfc2NzaXNpZywgKFNfSUxMX1BIfFNDU0lfQVROKSk7fQogCi0jZGVmaW5lIEFDQ0VQVF9TVEFUKHBvcnQpIHt3aGlsZShSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTQ1NJX1JFUSl7fVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcsIFNfSUxMX1BIKTt9Ci0KLSNkZWZpbmUgQUNDRVBUX1NUQVRfQVROKHBvcnQpIHt3aGlsZShSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTQ1NJX1JFUSl7fVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcsIChTX0lMTF9QSHxTQ1NJX0FUTikpO30KLQogI2RlZmluZSBESVNBQkxFX0FVVE8ocG9ydCkgKFdSX0hBUlBPT04ocG9ydCtocF9zY3NpcmVzZXQsIFBST0dfUkVTRVQpLFwKICAgICAgICAgICAgICAgICAgICAgICAgIFdSX0hBUlBPT04ocG9ydCtocF9zY3NpcmVzZXQsIDB4MDApKQogCkBAIC0xMzI5LDExOTQgKzc4NCwxMjIwIEBACiAjZGVmaW5lIE1FTkFCTEVfSU5UKHBfcG9ydCkgKFdSX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUkRfSEFSUE9PTihwX3BvcnQraHBfcGFnZV9jdHJsKSAmIH5HX0lOVF9ESVNBQkxFKSkpCiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZQVF9zaXN5bmNuKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQsCisJCQkJIHVuc2lnbmVkIGNoYXIgc3luY0ZsYWcpOworc3RhdGljIHZvaWQgRlBUX3NzZWwodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfc3Jlcyh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgcF9jYXJkLAorCQkgICAgIHN0cnVjdCBzY2NiX2NhcmQgKnBDdXJyQ2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfc2hhbmRlbSh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgcF9jYXJkLAorCQkJc3RydWN0IHNjY2IgKnBDdXJyU0NDQik7CitzdGF0aWMgdm9pZCBGUFRfc3RzeW5jbih1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgcF9jYXJkKTsKK3N0YXRpYyB2b2lkIEZQVF9zaXN5bmNyKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBzeW5jX3B1bHNlLAorCQkJdW5zaWduZWQgY2hhciBvZmZzZXQpOworc3RhdGljIHZvaWQgRlBUX3Nzc3luY3YodW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgcF9pZCwKKwkJCXVuc2lnbmVkIGNoYXIgcF9zeW5jX3ZhbHVlLAorCQkJc3RydWN0IHNjY2JfbWdyX3Rhcl9pbmZvICpjdXJyVGFyX0luZm8pOworc3RhdGljIHZvaWQgRlBUX3NyZXNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOworc3RhdGljIHZvaWQgRlBUX3N4ZnJwKHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfc2Noa2RkKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX1JkU3RhY2sodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIGluZGV4KTsKK3N0YXRpYyB2b2lkIEZQVF9XclN0YWNrKHVuc2lnbmVkIGxvbmcgcG9ydEJhc2UsIHVuc2lnbmVkIGNoYXIgaW5kZXgsCisJCQl1bnNpZ25lZCBjaGFyIGRhdGEpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX0Noa0lmQ2hpcEluaXRpYWxpemVkKHVuc2lnbmVkIGxvbmcgaW9Qb3J0KTsKIAorc3RhdGljIHZvaWQgRlBUX1NlbmRNc2codW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIG1lc3NhZ2UpOworc3RhdGljIHZvaWQgRlBUX3F1ZXVlRmx1c2hUYXJnU2NjYih1bnNpZ25lZCBjaGFyIHBfY2FyZCwgdW5zaWduZWQgY2hhciB0aGlzVGFyZywKKwkJCQkgICB1bnNpZ25lZCBjaGFyIGVycm9yX2NvZGUpOwogCitzdGF0aWMgdm9pZCBGUFRfc2luaXRzKHN0cnVjdCBzY2NiICpwX3NjY2IsIHVuc2lnbmVkIGNoYXIgcF9jYXJkKTsKK3N0YXRpYyB2b2lkIEZQVF9STlZSYW1EYXRhKHN0cnVjdCBudnJhbV9pbmZvICpwTnZSYW1JbmZvKTsKIAotdm9pZCAgc2NzaVN0YXJ0QXV0byhVTE9ORyBwb3J0KTsKLXN0YXRpYyBVQ0hBUiBGUFRfc2lzeW5jbihVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQsIFVDSEFSIHN5bmNGbGFnKTsKLXN0YXRpYyB2b2lkICBGUFRfc3NlbChVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9zcmVzKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCwgUFNDQ0JjYXJkIHBDdXJyQ2FyZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX3NoYW5kZW0oVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkLFBTQ0NCIHBDdXJyU0NDQik7Ci1zdGF0aWMgdm9pZCAgRlBUX3N0c3luY24oVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKTsKLXN0YXRpYyB2b2lkICBGUFRfc2lzeW5jcihVTE9ORyBwb3J0LFVDSEFSIHN5bmNfcHVsc2UsIFVDSEFSIG9mZnNldCk7Ci1zdGF0aWMgdm9pZCAgRlBUX3Nzc3luY3YoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2lkLCBVQ0hBUiBwX3N5bmNfdmFsdWUsCi0JCQkgUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvKTsKLXN0YXRpYyB2b2lkICBGUFRfc3Jlc2IoVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKTsKLXN0YXRpYyB2b2lkICBGUFRfc3hmcnAoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9zY2hrZGQoVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKTsKLXN0YXRpYyBVQ0hBUiBGUFRfUmRTdGFjayhVTE9ORyBwb3J0LCBVQ0hBUiBpbmRleCk7Ci1zdGF0aWMgdm9pZCAgRlBUX1dyU3RhY2soVUxPTkcgcG9ydEJhc2UsIFVDSEFSIGluZGV4LCBVQ0hBUiBkYXRhKTsKLXN0YXRpYyBVQ0hBUiBGUFRfQ2hrSWZDaGlwSW5pdGlhbGl6ZWQoVUxPTkcgaW9Qb3J0KTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZQVF9zaXdpZG4odW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfc3R3aWRuKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOworc3RhdGljIHZvaWQgRlBUX3Npd2lkcih1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgd2lkdGgpOwogCi1zdGF0aWMgdm9pZCBGUFRfU2VuZE1zZyhVTE9ORyBwb3J0LCBVQ0hBUiBtZXNzYWdlKTsKLXN0YXRpYyB2b2lkICBGUFRfcXVldWVGbHVzaFRhcmdTY2NiKFVDSEFSIHBfY2FyZCwgVUNIQVIgdGhpc1RhcmcsCi0JCQkJICAgIFVDSEFSIGVycm9yX2NvZGUpOworc3RhdGljIHZvaWQgRlBUX3F1ZXVlU2VsZWN0RmFpbChzdHJ1Y3Qgc2NjYl9jYXJkICpwQ3VyckNhcmQsCisJCQkJdW5zaWduZWQgY2hhciBwX2NhcmQpOworc3RhdGljIHZvaWQgRlBUX3F1ZXVlRGlzY29ubmVjdChzdHJ1Y3Qgc2NjYiAqcF9TQ0NCLCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfcXVldWVDbWRDb21wbGV0ZShzdHJ1Y3Qgc2NjYl9jYXJkICpwQ3VyckNhcmQsCisJCQkJIHN0cnVjdCBzY2NiICpwX1NDQ0IsIHVuc2lnbmVkIGNoYXIgcF9jYXJkKTsKK3N0YXRpYyB2b2lkIEZQVF9xdWV1ZVNlYXJjaFNlbGVjdChzdHJ1Y3Qgc2NjYl9jYXJkICpwQ3VyckNhcmQsCisJCQkJICB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfcXVldWVGbHVzaFNjY2IodW5zaWduZWQgY2hhciBwX2NhcmQsIHVuc2lnbmVkIGNoYXIgZXJyb3JfY29kZSk7CitzdGF0aWMgdm9pZCBGUFRfcXVldWVBZGRTY2NiKHN0cnVjdCBzY2NiICpwX1NDQ0IsIHVuc2lnbmVkIGNoYXIgY2FyZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfcXVldWVGaW5kU2NjYihzdHJ1Y3Qgc2NjYiAqcF9TQ0NCLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfdXRpbFVwZGF0ZVJlc2lkdWFsKHN0cnVjdCBzY2NiICpwX1NDQ0IpOworc3RhdGljIHVuc2lnbmVkIHNob3J0IEZQVF9DYWxjQ3JjMTYodW5zaWduZWQgY2hhciBidWZmZXJbXSk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfQ2FsY0xyYyh1bnNpZ25lZCBjaGFyIGJ1ZmZlcltdKTsKIAotc3RhdGljIHZvaWQgIEZQVF9zaW5pdHMoUFNDQ0IgcF9zY2NiLCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9STlZSYW1EYXRhKFBOVlJhbUluZm8gcE52UmFtSW5mbyk7CitzdGF0aWMgdm9pZCBGUFRfV2FpdDFTZWNvbmQodW5zaWduZWQgbG9uZyBwX3BvcnQpOworc3RhdGljIHZvaWQgRlBUX1dhaXQodW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgcF9kZWxheSk7CitzdGF0aWMgdm9pZCBGUFRfdXRpbEVFV3JpdGVPbk9mZih1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgY2hhciBwX21vZGUpOworc3RhdGljIHZvaWQgRlBUX3V0aWxFRVdyaXRlKHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBzaG9ydCBlZV9kYXRhLAorCQkJICAgIHVuc2lnbmVkIHNob3J0IGVlX2FkZHIpOworc3RhdGljIHVuc2lnbmVkIHNob3J0IEZQVF91dGlsRUVSZWFkKHVuc2lnbmVkIGxvbmcgcF9wb3J0LAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZWVfYWRkcik7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgRlBUX3V0aWxFRVJlYWRPcmcodW5zaWduZWQgbG9uZyBwX3BvcnQsCisJCQkJCXVuc2lnbmVkIHNob3J0IGVlX2FkZHIpOworc3RhdGljIHZvaWQgRlBUX3V0aWxFRVNlbmRDbWRBZGRyKHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBjaGFyIGVlX2NtZCwKKwkJCQkgIHVuc2lnbmVkIHNob3J0IGVlX2FkZHIpOwogCi1zdGF0aWMgVUNIQVIgRlBUX3Npd2lkbihVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9zdHdpZG4oVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKTsKLXN0YXRpYyB2b2lkICBGUFRfc2l3aWRyKFVMT05HIHBvcnQsIFVDSEFSIHdpZHRoKTsKK3N0YXRpYyB2b2lkIEZQVF9waGFzZURhdGFPdXQodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfcGhhc2VEYXRhSW4odW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfcGhhc2VDb21tYW5kKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOworc3RhdGljIHZvaWQgRlBUX3BoYXNlU3RhdHVzKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOworc3RhdGljIHZvaWQgRlBUX3BoYXNlTXNnT3V0KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOworc3RhdGljIHZvaWQgRlBUX3BoYXNlTXNnSW4odW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfcGhhc2VJbGxlZ2FsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOwogCitzdGF0aWMgdm9pZCBGUFRfcGhhc2VEZWNvZGUodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfcGhhc2VDaGtGaWZvKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOworc3RhdGljIHZvaWQgRlBUX3BoYXNlQnVzRnJlZSh1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpOwogCi1zdGF0aWMgdm9pZCAgRlBUX3F1ZXVlU2VsZWN0RmFpbChQU0NDQmNhcmQgcEN1cnJDYXJkLCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9xdWV1ZURpc2Nvbm5lY3QoUFNDQ0IgcF9TQ0NCLCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9xdWV1ZUNtZENvbXBsZXRlKFBTQ0NCY2FyZCBwQ3VyckNhcmQsIFBTQ0NCIHBfU0NDQiwKLQkJCQkgIFVDSEFSIHBfY2FyZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX3F1ZXVlU2VhcmNoU2VsZWN0KFBTQ0NCY2FyZCBwQ3VyckNhcmQsIFVDSEFSIHBfY2FyZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX3F1ZXVlRmx1c2hTY2NiKFVDSEFSIHBfY2FyZCwgVUNIQVIgZXJyb3JfY29kZSk7Ci1zdGF0aWMgdm9pZCAgRlBUX3F1ZXVlQWRkU2NjYihQU0NDQiBwX1NDQ0IsIFVDSEFSIGNhcmQpOwotc3RhdGljIFVDSEFSIEZQVF9xdWV1ZUZpbmRTY2NiKFBTQ0NCIHBfU0NDQiwgVUNIQVIgcF9jYXJkKTsKLXN0YXRpYyB2b2lkICBGUFRfdXRpbFVwZGF0ZVJlc2lkdWFsKFBTQ0NCIHBfU0NDQik7Ci1zdGF0aWMgVVNIT1JUIEZQVF9DYWxjQ3JjMTYoVUNIQVIgYnVmZmVyW10pOwotc3RhdGljIFVDSEFSICBGUFRfQ2FsY0xyYyhVQ0hBUiBidWZmZXJbXSk7CitzdGF0aWMgdm9pZCBGUFRfWGJvd0luaXQodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHNjYW1GbGcpOworc3RhdGljIHZvaWQgRlBUX0J1c01hc3RlckluaXQodW5zaWduZWQgbG9uZyBwX3BvcnQpOworc3RhdGljIHZvaWQgRlBUX0RpYWdFRVBST00odW5zaWduZWQgbG9uZyBwX3BvcnQpOwogCitzdGF0aWMgdm9pZCBGUFRfZGF0YVhmZXJQcm9jZXNzb3IodW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCSAgc3RydWN0IHNjY2JfY2FyZCAqcEN1cnJDYXJkKTsKK3N0YXRpYyB2b2lkIEZQVF9idXNNc3RyU0dEYXRhWGZlclN0YXJ0KHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJCQkgICAgICAgc3RydWN0IHNjY2IgKnBDdXJyU0NDQik7CitzdGF0aWMgdm9pZCBGUFRfYnVzTXN0ckRhdGFYZmVyU3RhcnQodW5zaWduZWQgbG9uZyBwb3J0LAorCQkJCSAgICAgc3RydWN0IHNjY2IgKnBDdXJyU0NDQik7CitzdGF0aWMgdm9pZCBGUFRfaG9zdERhdGFYZmVyQWJvcnQodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCwKKwkJCQkgIHN0cnVjdCBzY2NiICpwQ3VyclNDQ0IpOworc3RhdGljIHZvaWQgRlBUX2hvc3REYXRhWGZlclJlc3RhcnQoc3RydWN0IHNjY2IgKmN1cnJTQ0NCKTsKIAotc3RhdGljIHZvaWQgIEZQVF9XYWl0MVNlY29uZChVTE9ORyBwX3BvcnQpOwotc3RhdGljIHZvaWQgIEZQVF9XYWl0KFVMT05HIHBfcG9ydCwgVUNIQVIgcF9kZWxheSk7Ci1zdGF0aWMgdm9pZCAgRlBUX3V0aWxFRVdyaXRlT25PZmYoVUxPTkcgcF9wb3J0LFVDSEFSIHBfbW9kZSk7Ci1zdGF0aWMgdm9pZCAgRlBUX3V0aWxFRVdyaXRlKFVMT05HIHBfcG9ydCwgVVNIT1JUIGVlX2RhdGEsIFVTSE9SVCBlZV9hZGRyKTsKLXN0YXRpYyBVU0hPUlQgRlBUX3V0aWxFRVJlYWQoVUxPTkcgcF9wb3J0LCBVU0hPUlQgZWVfYWRkcik7Ci1zdGF0aWMgVVNIT1JUIEZQVF91dGlsRUVSZWFkT3JnKFVMT05HIHBfcG9ydCwgVVNIT1JUIGVlX2FkZHIpOwotc3RhdGljIHZvaWQgIEZQVF91dGlsRUVTZW5kQ21kQWRkcihVTE9ORyBwX3BvcnQsIFVDSEFSIGVlX2NtZCwgVVNIT1JUIGVlX2FkZHIpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX1NjY2JNZ3JfYmFkX2lzcih1bnNpZ25lZCBsb25nIHBfcG9ydCwKKwkJCQkJIHVuc2lnbmVkIGNoYXIgcF9jYXJkLAorCQkJCQkgc3RydWN0IHNjY2JfY2FyZCAqcEN1cnJDYXJkLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgcF9pbnQpOwogCitzdGF0aWMgdm9pZCBGUFRfU2NjYk1nclRhYmxlSW5pdEFsbCh2b2lkKTsKK3N0YXRpYyB2b2lkIEZQVF9TY2NiTWdyVGFibGVJbml0Q2FyZChzdHJ1Y3Qgc2NjYl9jYXJkICpwQ3VyckNhcmQsCisJCQkJICAgICB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfU2NjYk1nclRhYmxlSW5pdFRhcmdldCh1bnNpZ25lZCBjaGFyIHBfY2FyZCwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciB0YXJnZXQpOwogCitzdGF0aWMgdm9pZCBGUFRfc2NpbmkodW5zaWduZWQgY2hhciBwX2NhcmQsIHVuc2lnbmVkIGNoYXIgcF9vdXJfaWQsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgcF9wb3dlcl91cCk7CiAKLXN0YXRpYyB2b2lkICBGUFRfcGhhc2VEYXRhT3V0KFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX3BoYXNlRGF0YUluKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX3BoYXNlQ29tbWFuZChVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9waGFzZVN0YXR1cyhVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9waGFzZU1zZ091dChVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9waGFzZU1zZ0luKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX3BoYXNlSWxsZWdhbChVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpOworc3RhdGljIGludCBGUFRfc2NhcmIodW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgcF9zZWxfdHlwZSk7CitzdGF0aWMgdm9pZCBGUFRfc2NidXNmKHVuc2lnbmVkIGxvbmcgcF9wb3J0KTsKK3N0YXRpYyB2b2lkIEZQVF9zY3NlbCh1bnNpZ25lZCBsb25nIHBfcG9ydCk7CitzdGF0aWMgdm9pZCBGUFRfc2Nhc2lkKHVuc2lnbmVkIGNoYXIgcF9jYXJkLCB1bnNpZ25lZCBsb25nIHBfcG9ydCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfc2N4ZmVyYyh1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgY2hhciBwX2RhdGEpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX3Njc2VuZGkodW5zaWduZWQgbG9uZyBwX3BvcnQsCisJCQkJIHVuc2lnbmVkIGNoYXIgcF9pZF9zdHJpbmdbXSk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfc2Npc28odW5zaWduZWQgbG9uZyBwX3BvcnQsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBwX2lkX3N0cmluZ1tdKTsKK3N0YXRpYyB2b2lkIEZQVF9zY3dpcm9kKHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBjaGFyIHBfZGF0YV9iaXQpOworc3RhdGljIHZvaWQgRlBUX3Njd2lyb3ModW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgcF9kYXRhX2JpdCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfc2N2YWxxKHVuc2lnbmVkIGNoYXIgcF9xdWludGV0KTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZQVF9zY3NlbGwodW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgdGFyZ19pZCk7CitzdGF0aWMgdm9pZCBGUFRfc2N3dHNlbCh1bnNpZ25lZCBsb25nIHBfcG9ydCk7CitzdGF0aWMgdm9pZCBGUFRfaW5pc2NpKHVuc2lnbmVkIGNoYXIgcF9jYXJkLCB1bnNpZ25lZCBsb25nIHBfcG9ydCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgcF9vdXJfaWQpOworc3RhdGljIHZvaWQgRlBUX3Njc2F2ZGkodW5zaWduZWQgY2hhciBwX2NhcmQsIHVuc2lnbmVkIGxvbmcgcF9wb3J0KTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZQVF9zY21hY2hpZCh1bnNpZ25lZCBjaGFyIHBfY2FyZCwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgcF9pZF9zdHJpbmdbXSk7CiAKLXN0YXRpYyB2b2lkICBGUFRfcGhhc2VEZWNvZGUoVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKTsKLXN0YXRpYyB2b2lkICBGUFRfcGhhc2VDaGtGaWZvKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX3BoYXNlQnVzRnJlZShVTE9ORyBwX3BvcnQsIFVDSEFSIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfYXV0b0NtZENtcGx0KHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCk7CitzdGF0aWMgdm9pZCBGUFRfYXV0b0xvYWREZWZhdWx0TWFwKHVuc2lnbmVkIGxvbmcgcF9wb3J0KTsKIAorc3RhdGljIHN0cnVjdCBzY2NiX21ncl90YXJfaW5mbyBGUFRfc2NjYk1nclRibFtNQVhfQ0FSRFNdW01BWF9TQ1NJX1RBUl0gPQorICAgIHsge3swfX0gfTsKK3N0YXRpYyBzdHJ1Y3Qgc2NjYl9jYXJkIEZQVF9CTF9DYXJkW01BWF9DQVJEU10gPSB7IHswfSB9Oworc3RhdGljIFNDQ0JTQ0FNX0lORk8gRlBUX3NjYW1JbmZvW01BWF9TQ1NJX1RBUl0gPSB7IHt7MH19IH07CitzdGF0aWMgc3RydWN0IG52cmFtX2luZm8gRlBUX252UmFtSW5mb1tNQVhfTUJfQ0FSRFNdID0geyB7MH0gfTsKIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX21iQ2FyZHMgPSAwOworc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX3NjYW1IQVN0cmluZ1tdID0KKyAgICB7IDB4NjMsIDB4MDcsICdCJywgJ1UnLCAnUycsICdMJywgJ08nLCAnRycsICdJJywgJ0MnLAorCScgJywgJ0InLCAnVCcsICctJywgJzknLCAnMycsICcwJywKKwkweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLAorCTB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAKK307CiAKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBGUFRfZGVmYXVsdF9pbnRlbmEgPSAwOwogCi1zdGF0aWMgdm9pZCAgRlBUX1hib3dJbml0KFVMT05HIHBvcnQsIFVDSEFSIHNjYW1GbGcpOwotc3RhdGljIHZvaWQgIEZQVF9CdXNNYXN0ZXJJbml0KFVMT05HIHBfcG9ydCk7Ci1zdGF0aWMgdm9pZCAgRlBUX0RpYWdFRVBST00oVUxPTkcgcF9wb3J0KTsKLQotCi0KLQotdm9pZCAgYnVzTXN0ckFib3J0KFVMT05HIHBvcnQpOwotc3RhdGljIHZvaWQgIEZQVF9kYXRhWGZlclByb2Nlc3NvcihVTE9ORyBwb3J0LCBQU0NDQmNhcmQgcEN1cnJDYXJkKTsKLXN0YXRpYyB2b2lkICBGUFRfYnVzTXN0clNHRGF0YVhmZXJTdGFydChVTE9ORyBwb3J0LCBQU0NDQiBwQ3VyclNDQ0IpOwotc3RhdGljIHZvaWQgIEZQVF9idXNNc3RyRGF0YVhmZXJTdGFydChVTE9ORyBwb3J0LCBQU0NDQiBwQ3VyclNDQ0IpOwotc3RhdGljIHZvaWQgIEZQVF9ob3N0RGF0YVhmZXJBYm9ydChVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQsIFBTQ0NCIHBDdXJyU0NDQik7Ci1zdGF0aWMgdm9pZCAgRlBUX2hvc3REYXRhWGZlclJlc3RhcnQoUFNDQ0IgY3VyclNDQ0IpOwotCi0KLXN0YXRpYyBVQ0hBUiBGUFRfU2NjYk1ncl9iYWRfaXNyKFVMT05HIHBfcG9ydCwgVUNIQVIgcF9jYXJkLAotCQkJCSBQU0NDQmNhcmQgcEN1cnJDYXJkLCBVU0hPUlQgcF9pbnQpOwotCi1zdGF0aWMgdm9pZCAgRlBUX1NjY2JNZ3JUYWJsZUluaXRBbGwodm9pZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX1NjY2JNZ3JUYWJsZUluaXRDYXJkKFBTQ0NCY2FyZCBwQ3VyckNhcmQsIFVDSEFSIHBfY2FyZCk7Ci1zdGF0aWMgdm9pZCAgRlBUX1NjY2JNZ3JUYWJsZUluaXRUYXJnZXQoVUNIQVIgcF9jYXJkLCBVQ0hBUiB0YXJnZXQpOwotCi0KLQotc3RhdGljIHZvaWQgIEZQVF9zY2luaShVQ0hBUiBwX2NhcmQsIFVDSEFSIHBfb3VyX2lkLCBVQ0hBUiBwX3Bvd2VyX3VwKTsKLQotc3RhdGljIGludCAgIEZQVF9zY2FyYihVTE9ORyBwX3BvcnQsIFVDSEFSIHBfc2VsX3R5cGUpOwotc3RhdGljIHZvaWQgIEZQVF9zY2J1c2YoVUxPTkcgcF9wb3J0KTsKLXN0YXRpYyB2b2lkICBGUFRfc2NzZWwoVUxPTkcgcF9wb3J0KTsKLXN0YXRpYyB2b2lkICBGUFRfc2Nhc2lkKFVDSEFSIHBfY2FyZCwgVUxPTkcgcF9wb3J0KTsKLXN0YXRpYyBVQ0hBUiBGUFRfc2N4ZmVyYyhVTE9ORyBwX3BvcnQsIFVDSEFSIHBfZGF0YSk7Ci1zdGF0aWMgVUNIQVIgRlBUX3Njc2VuZGkoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2lkX3N0cmluZ1tdKTsKLXN0YXRpYyBVQ0hBUiBGUFRfc2Npc28oVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2lkX3N0cmluZ1tdKTsKLXN0YXRpYyB2b2lkICBGUFRfc2N3aXJvZChVTE9ORyBwX3BvcnQsIFVDSEFSIHBfZGF0YV9iaXQpOwotc3RhdGljIHZvaWQgIEZQVF9zY3dpcm9zKFVMT05HIHBfcG9ydCwgVUNIQVIgcF9kYXRhX2JpdCk7Ci1zdGF0aWMgVUNIQVIgRlBUX3NjdmFscShVQ0hBUiBwX3F1aW50ZXQpOwotc3RhdGljIFVDSEFSIEZQVF9zY3NlbGwoVUxPTkcgcF9wb3J0LCBVQ0hBUiB0YXJnX2lkKTsKLXN0YXRpYyB2b2lkICBGUFRfc2N3dHNlbChVTE9ORyBwX3BvcnQpOwotc3RhdGljIHZvaWQgIEZQVF9pbmlzY2koVUNIQVIgcF9jYXJkLCBVTE9ORyBwX3BvcnQsIFVDSEFSIHBfb3VyX2lkKTsKLXN0YXRpYyB2b2lkICBGUFRfc2NzYXZkaShVQ0hBUiBwX2NhcmQsIFVMT05HIHBfcG9ydCk7Ci1zdGF0aWMgVUNIQVIgRlBUX3NjbWFjaGlkKFVDSEFSIHBfY2FyZCwgVUNIQVIgcF9pZF9zdHJpbmdbXSk7Ci0KLQotc3RhdGljIHZvaWQgIEZQVF9hdXRvQ21kQ21wbHQoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2NhcmQpOwotc3RhdGljIHZvaWQgIEZQVF9hdXRvTG9hZERlZmF1bHRNYXAoVUxPTkcgcF9wb3J0KTsKLQotCi0KLXZvaWQgIE9TX3N0YXJ0X3RpbWVyKHVuc2lnbmVkIGxvbmcgaW9wb3J0LCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwotdm9pZCAgT1Nfc3RvcF90aW1lcih1bnNpZ25lZCBsb25nIGlvcG9ydCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKLXZvaWQgIE9TX2Rpc2FibGVfaW50KHVuc2lnbmVkIGNoYXIgaW50dmVjKTsKLXZvaWQgIE9TX2VuYWJsZV9pbnQodW5zaWduZWQgY2hhciBpbnR2ZWMpOwotdm9pZCAgT1NfZGVsYXkodW5zaWduZWQgbG9uZyBjb3VudCk7Ci1pbnQgICBPU19WaXJ0VG9QaHlzKHUzMmJpdHMgQ2FyZEhhbmRsZSwgdTMyYml0cyAqcGh5c2FkZHIsIHUzMmJpdHMgKnZpcnRhZGRyKTsKLQotc3RhdGljIFNDQ0JNR1JfVEFSX0lORk8gRlBUX3NjY2JNZ3JUYmxbTUFYX0NBUkRTXVtNQVhfU0NTSV9UQVJdID0geyB7IHsgMCB9IH0gfTsKLXN0YXRpYyBTQ0NCQ0FSRCBGUFRfQkxfQ2FyZFtNQVhfQ0FSRFNdID0geyB7IDAgfSB9Owotc3RhdGljIFNDQ0JTQ0FNX0lORk8gRlBUX3NjYW1JbmZvW01BWF9TQ1NJX1RBUl0gPSB7IHsgeyAwIH0gfSB9Owotc3RhdGljIE5WUkFNSU5GTyBGUFRfbnZSYW1JbmZvW01BWF9NQl9DQVJEU10gPSB7IHsgMCB9IH07Ci0KLQotc3RhdGljIFVDSEFSIEZQVF9tYkNhcmRzID0gMDsKLXN0YXRpYyBVQ0hBUiBGUFRfc2NhbUhBU3RyaW5nW10gPSB7MHg2MywgMHgwNywgJ0InLCAnVScsICdTJywgJ0wnLCAnTycsICdHJywgJ0knLCAnQycsIFwKLQkJCQkgICAnICcsICdCJywgJ1QnLCAnLScsICc5JywgJzMnLCAnMCcsIFwKLQkJCQkgICAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCAweDIwLCBcCi0JCQkJICAgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMCwgMHgyMH07Ci0KLXN0YXRpYyBVU0hPUlQgRlBUX2RlZmF1bHRfaW50ZW5hID0gMDsKLQotCi1zdGF0aWMgdm9pZCAoKkZQVF9zX1BoYXNlVGJsWzhdKSAoVUxPTkcsIFVDSEFSKT0geyAwIH07Ci0KK3N0YXRpYyB2b2lkICgqRlBUX3NfUGhhc2VUYmxbOF0pICh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBjaGFyKSA9IHsKKzB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKLSAqIEZ1bmN0aW9uOiBTY2NiTWdyX3NlbnNlX2FkYXB0ZXIKKyAqIEZ1bmN0aW9uOiBGbGFzaFBvaW50X1Byb2JlSG9zdEFkYXB0ZXIKICAqCiAgKiBEZXNjcmlwdGlvbjogU2V0dXAgYW5kL29yIFNlYXJjaCBmb3IgY2FyZHMgYW5kIHJldHVybiBpbmZvIHRvIGNhbGxlci4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgU2NjYk1ncl9zZW5zZV9hZGFwdGVyKFBTQ0NCTUdSX0lORk8gcENhcmRJbmZvKQorc3RhdGljIGludCBGbGFzaFBvaW50X1Byb2JlSG9zdEFkYXB0ZXIoc3RydWN0IHNjY2JfbWdyX2luZm8gKnBDYXJkSW5mbykKIHsKLSAgIHN0YXRpYyBVQ0hBUiBmaXJzdF90aW1lID0gMTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBmaXJzdF90aW1lID0gMTsKIAotICAgVUNIQVIgaSxqLGlkLFNjYW1GbGc7Ci0gICBVU0hPUlQgdGVtcCx0ZW1wMix0ZW1wMyx0ZW1wNCx0ZW1wNSx0ZW1wNjsKLSAgIFVMT05HIGlvcG9ydDsKLQlQTlZSYW1JbmZvIHBDdXJyTnZSYW07CisJdW5zaWduZWQgY2hhciBpLCBqLCBpZCwgU2NhbUZsZzsKKwl1bnNpZ25lZCBzaG9ydCB0ZW1wLCB0ZW1wMiwgdGVtcDMsIHRlbXA0LCB0ZW1wNSwgdGVtcDY7CisJdW5zaWduZWQgbG9uZyBpb3BvcnQ7CisJc3RydWN0IG52cmFtX2luZm8gKnBDdXJyTnZSYW07CiAKLSAgIGlvcG9ydCA9IHBDYXJkSW5mby0+c2lfYmFzZWFkZHI7CisJaW9wb3J0ID0gcENhcmRJbmZvLT5zaV9iYXNlYWRkcjsKIAorCWlmIChSRF9IQVJQT09OKGlvcG9ydCArIGhwX3ZlbmRvcl9pZF8wKSAhPSBPUklPTl9WRU5EXzApCisJCXJldHVybiAoaW50KUZBSUxVUkU7CiAKLSAgIGlmIChSRF9IQVJQT09OKGlvcG9ydCtocF92ZW5kb3JfaWRfMCkgIT0gT1JJT05fVkVORF8wKQotICAgICAgcmV0dXJuKChpbnQpRkFJTFVSRSk7CisJaWYgKChSRF9IQVJQT09OKGlvcG9ydCArIGhwX3ZlbmRvcl9pZF8xKSAhPSBPUklPTl9WRU5EXzEpKQorCQlyZXR1cm4gKGludClGQUlMVVJFOwogCi0gICBpZiAoKFJEX0hBUlBPT04oaW9wb3J0K2hwX3ZlbmRvcl9pZF8xKSAhPSBPUklPTl9WRU5EXzEpKQotICAgICAgcmV0dXJuKChpbnQpRkFJTFVSRSk7CisJaWYgKChSRF9IQVJQT09OKGlvcG9ydCArIGhwX2RldmljZV9pZF8wKSAhPSBPUklPTl9ERVZfMCkpCisJCXJldHVybiAoaW50KUZBSUxVUkU7CiAKLSAgIGlmICgoUkRfSEFSUE9PTihpb3BvcnQraHBfZGV2aWNlX2lkXzApICE9IE9SSU9OX0RFVl8wKSkKLSAgICAgIHJldHVybigoaW50KUZBSUxVUkUpOworCWlmICgoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9kZXZpY2VfaWRfMSkgIT0gT1JJT05fREVWXzEpKQorCQlyZXR1cm4gKGludClGQUlMVVJFOwogCi0gICBpZiAoKFJEX0hBUlBPT04oaW9wb3J0K2hwX2RldmljZV9pZF8xKSAhPSBPUklPTl9ERVZfMSkpCi0gICAgICByZXR1cm4oKGludClGQUlMVVJFKTsKLQotCi0gICBpZiAoUkRfSEFSUE9PTihpb3BvcnQraHBfcmV2X251bSkgIT0gMHgwZil7CisJaWYgKFJEX0hBUlBPT04oaW9wb3J0ICsgaHBfcmV2X251bSkgIT0gMHgwZikgewogCiAvKiBGb3IgbmV3IEhhcnBvb24gdGhlbiBjaGVjayBmb3Igc3ViX2RldmljZSBJRCBMU0IKICAgIHRoZSBiaXRzKDAtMykgbXVzdCBiZSBhbGwgWkVSTyBmb3IgY29tcGF0aWJsZSB3aXRoCiAgICBjdXJyZW50IHZlcnNpb24gb2YgU0NDQk1nciwgZWxzZSBza2lwIHRoaXMgSGFycG9vbgogCWRldmljZS4gKi8KIAotCSAgIGlmIChSRF9IQVJQT09OKGlvcG9ydCtocF9zdWJfZGV2aWNlX2lkXzApICYgMHgwZikKLQkgICAgICByZXR1cm4oKGludClGQUlMVVJFKTsKKwkJaWYgKFJEX0hBUlBPT04oaW9wb3J0ICsgaHBfc3ViX2RldmljZV9pZF8wKSAmIDB4MGYpCisJCQlyZXR1cm4gKGludClGQUlMVVJFOwogCX0KIAotICAgaWYgKGZpcnN0X3RpbWUpCi0gICAgICB7Ci0gICAgICBGUFRfU2NjYk1nclRhYmxlSW5pdEFsbCgpOwotICAgICAgZmlyc3RfdGltZSA9IDA7CisJaWYgKGZpcnN0X3RpbWUpIHsKKwkJRlBUX1NjY2JNZ3JUYWJsZUluaXRBbGwoKTsKKwkJZmlyc3RfdGltZSA9IDA7CiAJCUZQVF9tYkNhcmRzID0gMDsKLSAgICAgIH0KKwl9CiAKLQlpZihGUFRfUmRTdGFjayhpb3BvcnQsIDApICE9IDB4MDApIHsKLQkJaWYoRlBUX0Noa0lmQ2hpcEluaXRpYWxpemVkKGlvcG9ydCkgPT0gMCkKLQkJeworCWlmIChGUFRfUmRTdGFjayhpb3BvcnQsIDApICE9IDB4MDApIHsKKwkJaWYgKEZQVF9DaGtJZkNoaXBJbml0aWFsaXplZChpb3BvcnQpID09IDApIHsKIAkJCXBDdXJyTnZSYW0gPSBOVUxMOwotCQkgICBXUl9IQVJQT09OKGlvcG9ydCtocF9zZW1hcGhvcmUsIDB4MDApOwotCQkJRlBUX1hib3dJbml0KGlvcG9ydCwgMCk7ICAgICAgICAgICAgIC8qTXVzdCBJbml0IHRoZSBTQ1NJIGJlZm9yZSBhdHRlbXB0aW5nICovCisJCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX3NlbWFwaG9yZSwgMHgwMCk7CisJCQlGUFRfWGJvd0luaXQoaW9wb3J0LCAwKTsJLypNdXN0IEluaXQgdGhlIFNDU0kgYmVmb3JlIGF0dGVtcHRpbmcgKi8KIAkJCUZQVF9EaWFnRUVQUk9NKGlvcG9ydCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlpZihGUFRfbWJDYXJkcyA8IE1BWF9NQl9DQVJEUykgeworCQl9IGVsc2UgeworCQkJaWYgKEZQVF9tYkNhcmRzIDwgTUFYX01CX0NBUkRTKSB7CiAJCQkJcEN1cnJOdlJhbSA9ICZGUFRfbnZSYW1JbmZvW0ZQVF9tYkNhcmRzXTsKIAkJCQlGUFRfbWJDYXJkcysrOwogCQkJCXBDdXJyTnZSYW0tPm5pQmFzZUFkZHIgPSBpb3BvcnQ7CiAJCQkJRlBUX1JOVlJhbURhdGEocEN1cnJOdlJhbSk7Ci0JCQl9ZWxzZQotCQkJCXJldHVybigoaW50KSBGQUlMVVJFKTsKKwkJCX0gZWxzZQorCQkJCXJldHVybiAoaW50KUZBSUxVUkU7CiAJCX0KLQl9ZWxzZQorCX0gZWxzZQogCQlwQ3Vyck52UmFtID0gTlVMTDsKIAotICAgV1JfSEFSUE9PTihpb3BvcnQraHBfY2xrY3RybF8wLCBDTEtDVFJMX0RFRkFVTFQpOwotICAgV1JfSEFSUE9PTihpb3BvcnQraHBfc3lzX2N0cmwsIDB4MDApOworCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfY2xrY3RybF8wLCBDTEtDVFJMX0RFRkFVTFQpOworCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfc3lzX2N0cmwsIDB4MDApOwogCi0JaWYocEN1cnJOdlJhbSkKKwlpZiAocEN1cnJOdlJhbSkKIAkJcENhcmRJbmZvLT5zaV9pZCA9IHBDdXJyTnZSYW0tPm5pQWRhcElkOwogCWVsc2UKLQkgICBwQ2FyZEluZm8tPnNpX2lkID0gKFVDSEFSKShGUFRfdXRpbEVFUmVhZChpb3BvcnQsIChBREFQVEVSX1NDU0lfSUQvMikpICYKLSAgIAkgICAoVUNIQVIpMHgwRkYpOworCQlwQ2FyZEluZm8tPnNpX2lkID0KKwkJICAgICh1bnNpZ25lZAorCQkgICAgIGNoYXIpKEZQVF91dGlsRUVSZWFkKGlvcG9ydCwKKwkJCQkJICAoQURBUFRFUl9TQ1NJX0lEIC8KKwkJCQkJICAgMikpICYgKHVuc2lnbmVkIGNoYXIpMHgwRkYpOwogCi0gICBwQ2FyZEluZm8tPnNpX2x1biA9IDB4MDA7Ci0gICBwQ2FyZEluZm8tPnNpX2Z3X3JldmlzaW9uID0gT1JJT05fRldfUkVWOwotICAgdGVtcDIgPSAweDAwMDA7Ci0gICB0ZW1wMyA9IDB4MDAwMDsKLSAgIHRlbXA0ID0gMHgwMDAwOwotICAgdGVtcDUgPSAweDAwMDA7Ci0gICB0ZW1wNiA9IDB4MDAwMDsKKwlwQ2FyZEluZm8tPnNpX2x1biA9IDB4MDA7CisJcENhcmRJbmZvLT5zaV9md19yZXZpc2lvbiA9IE9SSU9OX0ZXX1JFVjsKKwl0ZW1wMiA9IDB4MDAwMDsKKwl0ZW1wMyA9IDB4MDAwMDsKKwl0ZW1wNCA9IDB4MDAwMDsKKwl0ZW1wNSA9IDB4MDAwMDsKKwl0ZW1wNiA9IDB4MDAwMDsKIAotICAgZm9yIChpZCA9IDA7IGlkIDwgKDE2LzIpOyBpZCsrKSB7CisJZm9yIChpZCA9IDA7IGlkIDwgKDE2IC8gMik7IGlkKyspIHsKIAotCQlpZihwQ3Vyck52UmFtKXsKLQkJCXRlbXAgPSAoVVNIT1JUKSBwQ3Vyck52UmFtLT5uaVN5bmNUYmxbaWRdOworCQlpZiAocEN1cnJOdlJhbSkgeworCQkJdGVtcCA9ICh1bnNpZ25lZCBzaG9ydClwQ3Vyck52UmFtLT5uaVN5bmNUYmxbaWRdOwogCQkJdGVtcCA9ICgodGVtcCAmIDB4MDMpICsgKCh0ZW1wIDw8IDQpICYgMHhjMCkpICsKLQkJCQkJICgoKHRlbXAgPDwgNCkgJiAweDAzMDApICsgKCh0ZW1wIDw8IDgpICYgMHhjMDAwKSk7Ci0JCX1lbHNlCi0JICAgICAgdGVtcCA9IEZQVF91dGlsRUVSZWFkKGlvcG9ydCwgKFVTSE9SVCkoKFNZTkNfUkFURV9UQkwvMikraWQpKTsKKwkJCSAgICAoKCh0ZW1wIDw8IDQpICYgMHgwMzAwKSArICgodGVtcCA8PCA4KSAmIDB4YzAwMCkpOworCQl9IGVsc2UKKwkJCXRlbXAgPQorCQkJICAgIEZQVF91dGlsRUVSZWFkKGlvcG9ydCwKKwkJCQkJICAgKHVuc2lnbmVkIHNob3J0KSgoU1lOQ19SQVRFX1RCTCAvIDIpCisJCQkJCQkJICAgICsgaWQpKTsKIAotICAgICAgZm9yIChpID0gMDsgaSA8IDI7IHRlbXAgPj49OCxpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDI7IHRlbXAgPj49IDgsIGkrKykgewogCi0gICAgICAgICB0ZW1wMiA+Pj0gMTsKLSAgICAgICAgIHRlbXAzID4+PSAxOwotICAgICAgICAgdGVtcDQgPj49IDE7Ci0gICAgICAgICB0ZW1wNSA+Pj0gMTsKLSAgICAgICAgIHRlbXA2ID4+PSAxOwotCSBzd2l0Y2ggKHRlbXAgJiAweDMpCi0JICAgewotCSAgIGNhc2UgQVVUT19SQVRFXzIwOgkvKiBTeW5jaHJvbm91cywgMjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kICovCi0JICAgICB0ZW1wNiB8PSAweDgwMDA7CS8qIEZhbGwgdGhyb3VnaCAqLwotCSAgIGNhc2UgQVVUT19SQVRFXzEwOgkvKiBTeW5jaHJvbm91cywgMTAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kICovCi0JICAgICB0ZW1wNSB8PSAweDgwMDA7CS8qIEZhbGwgdGhyb3VnaCAqLwotCSAgIGNhc2UgQVVUT19SQVRFXzA1OgkvKiBTeW5jaHJvbm91cywgNSBtZWdhLXRyYW5zZmVycy9zZWNvbmQgKi8KLQkgICAgIHRlbXAyIHw9IDB4ODAwMDsJLyogRmFsbCB0aHJvdWdoICovCi0JICAgY2FzZSBBVVRPX1JBVEVfMDA6CS8qIEFzeW5jaHJvbm91cyAqLwotCSAgICAgYnJlYWs7Ci0JICAgfQotCi0gICAgICAgICBpZiAodGVtcCAmIERJU0NfRU5BQkxFX0JJVCkKLQkgICB0ZW1wMyB8PSAweDgwMDA7Ci0KLSAgICAgICAgIGlmICh0ZW1wICYgV0lERV9ORUdPX0JJVCkKLQkgICB0ZW1wNCB8PSAweDgwMDA7Ci0KLSAgICAgICAgIH0KLSAgICAgIH0KLQotICAgcENhcmRJbmZvLT5zaV9wZXJfdGFyZ19pbml0X3N5bmMgPSB0ZW1wMjsKLSAgIHBDYXJkSW5mby0+c2lfcGVyX3Rhcmdfbm9fZGlzYyA9IHRlbXAzOwotICAgcENhcmRJbmZvLT5zaV9wZXJfdGFyZ193aWRlX25lZ28gPSB0ZW1wNDsKLSAgIHBDYXJkSW5mby0+c2lfcGVyX3RhcmdfZmFzdF9uZWdvID0gdGVtcDU7Ci0gICBwQ2FyZEluZm8tPnNpX3Blcl90YXJnX3VsdHJhX25lZ28gPSB0ZW1wNjsKLQotCWlmKHBDdXJyTnZSYW0pCi0JCWkgPSBwQ3Vyck52UmFtLT5uaVN5c0NvbmY7Ci0JZWxzZQotCSAgIGkgPSAoVUNIQVIpKEZQVF91dGlsRUVSZWFkKGlvcG9ydCwgKFNZU1RFTV9DT05GSUcvMikpKTsKLQotCWlmKHBDdXJyTnZSYW0pCi0JCVNjYW1GbGcgPSBwQ3Vyck52UmFtLT5uaVNjYW1Db25mOwotCWVsc2UKLQkgICBTY2FtRmxnID0gKFVDSEFSKSBGUFRfdXRpbEVFUmVhZChpb3BvcnQsIFNDQU1fQ09ORklHLzIpOwotCi0gICBwQ2FyZEluZm8tPnNpX2ZsYWdzID0gMHgwMDAwOwotCi0gICBpZiAoaSAmIDB4MDEpCi0gICAgICBwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IFNDU0lfUEFSSVRZX0VOQTsKLQotICAgaWYgKCEoaSAmIDB4MDIpKQotICAgICAgcENhcmRJbmZvLT5zaV9mbGFncyB8PSBTT0ZUX1JFU0VUOwotCi0gICBpZiAoaSAmIDB4MTApCi0gICAgICBwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IEVYVEVOREVEX1RSQU5TTEFUSU9OOwotCi0gICBpZiAoU2NhbUZsZyAmIFNDQU1fRU5BQkxFRCkKLSAgICAgcENhcmRJbmZvLT5zaV9mbGFncyB8PSBGTEFHX1NDQU1fRU5BQkxFRDsKLQotICAgaWYgKFNjYW1GbGcgJiBTQ0FNX0xFVkVMMikKLSAgICAgcENhcmRJbmZvLT5zaV9mbGFncyB8PSBGTEFHX1NDQU1fTEVWRUwyOwotCi0gICBqID0gKFJEX0hBUlBPT04oaW9wb3J0K2hwX2JtX2N0cmwpICYgflNDU0lfVEVSTV9FTkFfTCk7Ci0gICBpZiAoaSAmIDB4MDQpIHsKLSAgICAgIGogfD0gU0NTSV9URVJNX0VOQV9MOwotICAgICAgfQotICAgV1JfSEFSUE9PTihpb3BvcnQraHBfYm1fY3RybCwgaiApOwotCi0gICBqID0gKFJEX0hBUlBPT04oaW9wb3J0K2hwX2VlX2N0cmwpICYgflNDU0lfVEVSTV9FTkFfSCk7Ci0gICBpZiAoaSAmIDB4MDgpIHsKLSAgICAgIGogfD0gU0NTSV9URVJNX0VOQV9IOwotICAgICAgfQotICAgV1JfSEFSUE9PTihpb3BvcnQraHBfZWVfY3RybCwgaiApOwotCi0gICBpZiAoIShSRF9IQVJQT09OKGlvcG9ydCtocF9wYWdlX2N0cmwpICYgTkFSUk9XX1NDU0lfQ0FSRCkpCi0KLSAgICAgIHBDYXJkSW5mby0+c2lfZmxhZ3MgfD0gU1VQUE9SVF8xNlRBUl8zMkxVTjsKLQotICAgcENhcmRJbmZvLT5zaV9jYXJkX2ZhbWlseSA9IEhBUlBPT05fRkFNSUxZOwotICAgcENhcmRJbmZvLT5zaV9idXN0eXBlID0gQlVTVFlQRV9QQ0k7Ci0KLQlpZihwQ3Vyck52UmFtKXsKLSAgIAlwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMF0gPSAnOSc7Ci0JCXN3aXRjaChwQ3Vyck52UmFtLT5uaU1vZGVsICYgMHgwZil7Ci0JCQljYXNlIE1PREVMX0xUOgotCQkgICAJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzFdID0gJzMnOwotCQkgICAJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzJdID0gJzAnOworCQkJdGVtcDIgPj49IDE7CisJCQl0ZW1wMyA+Pj0gMTsKKwkJCXRlbXA0ID4+PSAxOworCQkJdGVtcDUgPj49IDE7CisJCQl0ZW1wNiA+Pj0gMTsKKwkJCXN3aXRjaCAodGVtcCAmIDB4MykgeworCQkJY2FzZSBBVVRPX1JBVEVfMjA6CS8qIFN5bmNocm9ub3VzLCAyMCBtZWdhLXRyYW5zZmVycy9zZWNvbmQgKi8KKwkJCQl0ZW1wNiB8PSAweDgwMDA7CS8qIEZhbGwgdGhyb3VnaCAqLworCQkJY2FzZSBBVVRPX1JBVEVfMTA6CS8qIFN5bmNocm9ub3VzLCAxMCBtZWdhLXRyYW5zZmVycy9zZWNvbmQgKi8KKwkJCQl0ZW1wNSB8PSAweDgwMDA7CS8qIEZhbGwgdGhyb3VnaCAqLworCQkJY2FzZSBBVVRPX1JBVEVfMDU6CS8qIFN5bmNocm9ub3VzLCA1IG1lZ2EtdHJhbnNmZXJzL3NlY29uZCAqLworCQkJCXRlbXAyIHw9IDB4ODAwMDsJLyogRmFsbCB0aHJvdWdoICovCisJCQljYXNlIEFVVE9fUkFURV8wMDoJLyogQXN5bmNocm9ub3VzICovCiAJCQkJYnJlYWs7Ci0JCQljYXNlIE1PREVMX0xXOgotCQkgICAJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzFdID0gJzUnOwotCQkgICAJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzJdID0gJzAnOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNT0RFTF9ETDoKLQkJICAgCXBDYXJkSW5mby0+c2lfY2FyZF9tb2RlbFsxXSA9ICczJzsKLQkJICAgCXBDYXJkSW5mby0+c2lfY2FyZF9tb2RlbFsyXSA9ICcyJzsKLQkJCQlicmVhazsKLQkJCWNhc2UgTU9ERUxfRFc6Ci0JCSAgIAlwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMV0gPSAnNSc7Ci0JCSAgIAlwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMl0gPSAnMic7Ci0JCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmICh0ZW1wICYgRElTQ19FTkFCTEVfQklUKQorCQkJCXRlbXAzIHw9IDB4ODAwMDsKKworCQkJaWYgKHRlbXAgJiBXSURFX05FR09fQklUKQorCQkJCXRlbXA0IHw9IDB4ODAwMDsKKwogCQl9Ci0JfWVsc2V7Ci0JICAgdGVtcCA9IEZQVF91dGlsRUVSZWFkKGlvcG9ydCwgKE1PREVMX05VTUJfMC8yKSk7Ci0gICAJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzBdID0gKFVDSEFSKSh0ZW1wID4+IDgpOwotCSAgIHRlbXAgPSBGUFRfdXRpbEVFUmVhZChpb3BvcnQsIChNT0RFTF9OVU1CXzIvMikpOwotCi0gICAJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzFdID0gKFVDSEFSKSh0ZW1wICYgMHgwMEZGKTsKLQkgICBwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMl0gPSAoVUNIQVIpKHRlbXAgPj4gOCk7CiAJfQogCi0gICBpZiAocENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzFdID09ICczJykKLSAgICAgewotICAgICAgIGlmIChSRF9IQVJQT09OKGlvcG9ydCtocF9lZV9jdHJsKSAmIEJJVCg3KSkKLQkgcENhcmRJbmZvLT5zaV9mbGFncyB8PSBMT1dfQllURV9URVJNOwotICAgICB9Ci0gICBlbHNlIGlmIChwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMl0gPT0gJzAnKQotICAgICB7Ci0gICAgICAgdGVtcCA9IFJEX0hBUlBPT04oaW9wb3J0K2hwX3hmZXJfcGFkKTsKLSAgICAgICBXUl9IQVJQT09OKGlvcG9ydCtocF94ZmVyX3BhZCwgKHRlbXAgJiB+QklUKDQpKSk7Ci0gICAgICAgaWYgKFJEX0hBUlBPT04oaW9wb3J0K2hwX2VlX2N0cmwpICYgQklUKDcpKQotCSBwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IExPV19CWVRFX1RFUk07Ci0gICAgICAgV1JfSEFSUE9PTihpb3BvcnQraHBfeGZlcl9wYWQsICh0ZW1wIHwgQklUKDQpKSk7Ci0gICAgICAgaWYgKFJEX0hBUlBPT04oaW9wb3J0K2hwX2VlX2N0cmwpICYgQklUKDcpKQotCSBwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IEhJR0hfQllURV9URVJNOwotICAgICAgIFdSX0hBUlBPT04oaW9wb3J0K2hwX3hmZXJfcGFkLCB0ZW1wKTsKLSAgICAgfQotICAgZWxzZQotICAgICB7Ci0gICAgICAgdGVtcCA9IFJEX0hBUlBPT04oaW9wb3J0K2hwX2VlX2N0cmwpOwotICAgICAgIHRlbXAyID0gUkRfSEFSUE9PTihpb3BvcnQraHBfeGZlcl9wYWQpOwotICAgICAgIFdSX0hBUlBPT04oaW9wb3J0K2hwX2VlX2N0cmwsICh0ZW1wIHwgU0VFX0NTKSk7Ci0gICAgICAgV1JfSEFSUE9PTihpb3BvcnQraHBfeGZlcl9wYWQsICh0ZW1wMiB8IEJJVCg0KSkpOwotICAgICAgIHRlbXAzID0gMDsKLSAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCSB7Ci0JICAgdGVtcDMgPDw9IDE7Ci0JICAgaWYgKCEoUkRfSEFSUE9PTihpb3BvcnQraHBfZWVfY3RybCkgJiBCSVQoNykpKQotCSAgICAgdGVtcDMgfD0gMTsKLQkgICBXUl9IQVJQT09OKGlvcG9ydCtocF94ZmVyX3BhZCwgKHRlbXAyICYgfkJJVCg0KSkpOwotCSAgIFdSX0hBUlBPT04oaW9wb3J0K2hwX3hmZXJfcGFkLCAodGVtcDIgfCBCSVQoNCkpKTsKLQkgfQotICAgICAgIFdSX0hBUlBPT04oaW9wb3J0K2hwX2VlX2N0cmwsIHRlbXApOwotICAgICAgIFdSX0hBUlBPT04oaW9wb3J0K2hwX3hmZXJfcGFkLCB0ZW1wMik7Ci0gICAgICAgaWYgKCEodGVtcDMgJiBCSVQoNykpKQotCSBwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IExPV19CWVRFX1RFUk07Ci0gICAgICAgaWYgKCEodGVtcDMgJiBCSVQoNikpKQotCSBwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IEhJR0hfQllURV9URVJNOwotICAgICB9CisJcENhcmRJbmZvLT5zaV9wZXJfdGFyZ19pbml0X3N5bmMgPSB0ZW1wMjsKKwlwQ2FyZEluZm8tPnNpX3Blcl90YXJnX25vX2Rpc2MgPSB0ZW1wMzsKKwlwQ2FyZEluZm8tPnNpX3Blcl90YXJnX3dpZGVfbmVnbyA9IHRlbXA0OworCXBDYXJkSW5mby0+c2lfcGVyX3RhcmdfZmFzdF9uZWdvID0gdGVtcDU7CisJcENhcmRJbmZvLT5zaV9wZXJfdGFyZ191bHRyYV9uZWdvID0gdGVtcDY7CiAKKwlpZiAocEN1cnJOdlJhbSkKKwkJaSA9IHBDdXJyTnZSYW0tPm5pU3lzQ29uZjsKKwllbHNlCisJCWkgPSAodW5zaWduZWQKKwkJICAgICBjaGFyKShGUFRfdXRpbEVFUmVhZChpb3BvcnQsIChTWVNURU1fQ09ORklHIC8gMikpKTsKIAotICAgQVJBTV9BQ0NFU1MoaW9wb3J0KTsKKwlpZiAocEN1cnJOdlJhbSkKKwkJU2NhbUZsZyA9IHBDdXJyTnZSYW0tPm5pU2NhbUNvbmY7CisJZWxzZQorCQlTY2FtRmxnID0KKwkJICAgICh1bnNpZ25lZCBjaGFyKUZQVF91dGlsRUVSZWFkKGlvcG9ydCwgU0NBTV9DT05GSUcgLyAyKTsKIAotICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKSB7CisJcENhcmRJbmZvLT5zaV9mbGFncyA9IDB4MDAwMDsKIAotICAgICAgcENhcmRJbmZvLT5zaV9YbGF0SW5mb1tpXSA9Ci0gICAgICAgICBSRF9IQVJQT09OKGlvcG9ydCtocF9hcmFtQmFzZStCSU9TX0RBVEFfT0ZGU0VUK2kpOwotICAgICAgfQorCWlmIChpICYgMHgwMSkKKwkJcENhcmRJbmZvLT5zaV9mbGFncyB8PSBTQ1NJX1BBUklUWV9FTkE7CisKKwlpZiAoIShpICYgMHgwMikpCisJCXBDYXJkSW5mby0+c2lfZmxhZ3MgfD0gU09GVF9SRVNFVDsKKworCWlmIChpICYgMHgxMCkKKwkJcENhcmRJbmZvLT5zaV9mbGFncyB8PSBFWFRFTkRFRF9UUkFOU0xBVElPTjsKKworCWlmIChTY2FtRmxnICYgU0NBTV9FTkFCTEVEKQorCQlwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IEZMQUdfU0NBTV9FTkFCTEVEOworCisJaWYgKFNjYW1GbGcgJiBTQ0FNX0xFVkVMMikKKwkJcENhcmRJbmZvLT5zaV9mbGFncyB8PSBGTEFHX1NDQU1fTEVWRUwyOworCisJaiA9IChSRF9IQVJQT09OKGlvcG9ydCArIGhwX2JtX2N0cmwpICYgflNDU0lfVEVSTV9FTkFfTCk7CisJaWYgKGkgJiAweDA0KSB7CisJCWogfD0gU0NTSV9URVJNX0VOQV9MOworCX0KKwlXUl9IQVJQT09OKGlvcG9ydCArIGhwX2JtX2N0cmwsIGopOworCisJaiA9IChSRF9IQVJQT09OKGlvcG9ydCArIGhwX2VlX2N0cmwpICYgflNDU0lfVEVSTV9FTkFfSCk7CisJaWYgKGkgJiAweDA4KSB7CisJCWogfD0gU0NTSV9URVJNX0VOQV9IOworCX0KKwlXUl9IQVJQT09OKGlvcG9ydCArIGhwX2VlX2N0cmwsIGopOworCisJaWYgKCEoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9wYWdlX2N0cmwpICYgTkFSUk9XX1NDU0lfQ0FSRCkpCisKKwkJcENhcmRJbmZvLT5zaV9mbGFncyB8PSBTVVBQT1JUXzE2VEFSXzMyTFVOOworCisJcENhcmRJbmZvLT5zaV9jYXJkX2ZhbWlseSA9IEhBUlBPT05fRkFNSUxZOworCXBDYXJkSW5mby0+c2lfYnVzdHlwZSA9IEJVU1RZUEVfUENJOworCisJaWYgKHBDdXJyTnZSYW0pIHsKKwkJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzBdID0gJzknOworCQlzd2l0Y2ggKHBDdXJyTnZSYW0tPm5pTW9kZWwgJiAweDBmKSB7CisJCWNhc2UgTU9ERUxfTFQ6CisJCQlwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMV0gPSAnMyc7CisJCQlwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMl0gPSAnMCc7CisJCQlicmVhazsKKwkJY2FzZSBNT0RFTF9MVzoKKwkJCXBDYXJkSW5mby0+c2lfY2FyZF9tb2RlbFsxXSA9ICc1JzsKKwkJCXBDYXJkSW5mby0+c2lfY2FyZF9tb2RlbFsyXSA9ICcwJzsKKwkJCWJyZWFrOworCQljYXNlIE1PREVMX0RMOgorCQkJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzFdID0gJzMnOworCQkJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzJdID0gJzInOworCQkJYnJlYWs7CisJCWNhc2UgTU9ERUxfRFc6CisJCQlwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMV0gPSAnNSc7CisJCQlwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMl0gPSAnMic7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXRlbXAgPSBGUFRfdXRpbEVFUmVhZChpb3BvcnQsIChNT0RFTF9OVU1CXzAgLyAyKSk7CisJCXBDYXJkSW5mby0+c2lfY2FyZF9tb2RlbFswXSA9ICh1bnNpZ25lZCBjaGFyKSh0ZW1wID4+IDgpOworCQl0ZW1wID0gRlBUX3V0aWxFRVJlYWQoaW9wb3J0LCAoTU9ERUxfTlVNQl8yIC8gMikpOworCisJCXBDYXJkSW5mby0+c2lfY2FyZF9tb2RlbFsxXSA9ICh1bnNpZ25lZCBjaGFyKSh0ZW1wICYgMHgwMEZGKTsKKwkJcENhcmRJbmZvLT5zaV9jYXJkX21vZGVsWzJdID0gKHVuc2lnbmVkIGNoYXIpKHRlbXAgPj4gOCk7CisJfQorCisJaWYgKHBDYXJkSW5mby0+c2lfY2FyZF9tb2RlbFsxXSA9PSAnMycpIHsKKwkJaWYgKFJEX0hBUlBPT04oaW9wb3J0ICsgaHBfZWVfY3RybCkgJiBCSVQoNykpCisJCQlwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IExPV19CWVRFX1RFUk07CisJfSBlbHNlIGlmIChwQ2FyZEluZm8tPnNpX2NhcmRfbW9kZWxbMl0gPT0gJzAnKSB7CisJCXRlbXAgPSBSRF9IQVJQT09OKGlvcG9ydCArIGhwX3hmZXJfcGFkKTsKKwkJV1JfSEFSUE9PTihpb3BvcnQgKyBocF94ZmVyX3BhZCwgKHRlbXAgJiB+QklUKDQpKSk7CisJCWlmIChSRF9IQVJQT09OKGlvcG9ydCArIGhwX2VlX2N0cmwpICYgQklUKDcpKQorCQkJcENhcmRJbmZvLT5zaV9mbGFncyB8PSBMT1dfQllURV9URVJNOworCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX3hmZXJfcGFkLCAodGVtcCB8IEJJVCg0KSkpOworCQlpZiAoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9lZV9jdHJsKSAmIEJJVCg3KSkKKwkJCXBDYXJkSW5mby0+c2lfZmxhZ3MgfD0gSElHSF9CWVRFX1RFUk07CisJCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfeGZlcl9wYWQsIHRlbXApOworCX0gZWxzZSB7CisJCXRlbXAgPSBSRF9IQVJQT09OKGlvcG9ydCArIGhwX2VlX2N0cmwpOworCQl0ZW1wMiA9IFJEX0hBUlBPT04oaW9wb3J0ICsgaHBfeGZlcl9wYWQpOworCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX2VlX2N0cmwsICh0ZW1wIHwgU0VFX0NTKSk7CisJCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfeGZlcl9wYWQsICh0ZW1wMiB8IEJJVCg0KSkpOworCQl0ZW1wMyA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJCXRlbXAzIDw8PSAxOworCQkJaWYgKCEoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9lZV9jdHJsKSAmIEJJVCg3KSkpCisJCQkJdGVtcDMgfD0gMTsKKwkJCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfeGZlcl9wYWQsICh0ZW1wMiAmIH5CSVQoNCkpKTsKKwkJCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfeGZlcl9wYWQsICh0ZW1wMiB8IEJJVCg0KSkpOworCQl9CisJCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfZWVfY3RybCwgdGVtcCk7CisJCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfeGZlcl9wYWQsIHRlbXAyKTsKKwkJaWYgKCEodGVtcDMgJiBCSVQoNykpKQorCQkJcENhcmRJbmZvLT5zaV9mbGFncyB8PSBMT1dfQllURV9URVJNOworCQlpZiAoISh0ZW1wMyAmIEJJVCg2KSkpCisJCQlwQ2FyZEluZm8tPnNpX2ZsYWdzIHw9IEhJR0hfQllURV9URVJNOworCX0KKworCUFSQU1fQUNDRVNTKGlvcG9ydCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisKKwkJcENhcmRJbmZvLT5zaV9YbGF0SW5mb1tpXSA9CisJCSAgICBSRF9IQVJQT09OKGlvcG9ydCArIGhwX2FyYW1CYXNlICsgQklPU19EQVRBX09GRlNFVCArIGkpOworCX0KIAogCS8qIHJldHVybiB3aXRoIC0xIGlmIG5vIHNvcnQsIGVsc2UgcmV0dXJuIHdpdGgKIAkgICBsb2dpY2FsIGNhcmQgbnVtYmVyIHNvcnRlZCBieSBCSU9TICh6ZXJvLWJhc2VkKSAqLwogCiAJcENhcmRJbmZvLT5zaV9yZWxhdGl2ZV9jYXJkbnVtID0KLQkoVUNIQVIpKFJEX0hBUlBPT04oaW9wb3J0K2hwX2FyYW1CYXNlK0JJT1NfUkVMQVRJVkVfQ0FSRCktMSk7CisJICAgICh1bnNpZ25lZAorCSAgICAgY2hhcikoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9hcmFtQmFzZSArIEJJT1NfUkVMQVRJVkVfQ0FSRCkgLSAxKTsKIAotICAgU0dSQU1fQUNDRVNTKGlvcG9ydCk7CisJU0dSQU1fQUNDRVNTKGlvcG9ydCk7CiAKLSAgIEZQVF9zX1BoYXNlVGJsWzBdID0gRlBUX3BoYXNlRGF0YU91dDsKLSAgIEZQVF9zX1BoYXNlVGJsWzFdID0gRlBUX3BoYXNlRGF0YUluOwotICAgRlBUX3NfUGhhc2VUYmxbMl0gPSBGUFRfcGhhc2VJbGxlZ2FsOwotICAgRlBUX3NfUGhhc2VUYmxbM10gPSBGUFRfcGhhc2VJbGxlZ2FsOwotICAgRlBUX3NfUGhhc2VUYmxbNF0gPSBGUFRfcGhhc2VDb21tYW5kOwotICAgRlBUX3NfUGhhc2VUYmxbNV0gPSBGUFRfcGhhc2VTdGF0dXM7Ci0gICBGUFRfc19QaGFzZVRibFs2XSA9IEZQVF9waGFzZU1zZ091dDsKLSAgIEZQVF9zX1BoYXNlVGJsWzddID0gRlBUX3BoYXNlTXNnSW47CisJRlBUX3NfUGhhc2VUYmxbMF0gPSBGUFRfcGhhc2VEYXRhT3V0OworCUZQVF9zX1BoYXNlVGJsWzFdID0gRlBUX3BoYXNlRGF0YUluOworCUZQVF9zX1BoYXNlVGJsWzJdID0gRlBUX3BoYXNlSWxsZWdhbDsKKwlGUFRfc19QaGFzZVRibFszXSA9IEZQVF9waGFzZUlsbGVnYWw7CisJRlBUX3NfUGhhc2VUYmxbNF0gPSBGUFRfcGhhc2VDb21tYW5kOworCUZQVF9zX1BoYXNlVGJsWzVdID0gRlBUX3BoYXNlU3RhdHVzOworCUZQVF9zX1BoYXNlVGJsWzZdID0gRlBUX3BoYXNlTXNnT3V0OworCUZQVF9zX1BoYXNlVGJsWzddID0gRlBUX3BoYXNlTXNnSW47CiAKLSAgIHBDYXJkSW5mby0+c2lfcHJlc2VudCA9IDB4MDE7CisJcENhcmRJbmZvLT5zaV9wcmVzZW50ID0gMHgwMTsKIAotICAgcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgotICogRnVuY3Rpb246IFNjY2JNZ3JfY29uZmlnX2FkYXB0ZXIKKyAqIEZ1bmN0aW9uOiBGbGFzaFBvaW50X0hhcmR3YXJlUmVzZXRIb3N0QWRhcHRlcgogICoKICAqIERlc2NyaXB0aW9uOiBTZXR1cCBhZGFwdGVyIGZvciBub3JtYWwgb3BlcmF0aW9uIChoYXJkIHJlc2V0KS4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBVTE9ORyBTY2NiTWdyX2NvbmZpZ19hZGFwdGVyKFBTQ0NCTUdSX0lORk8gcENhcmRJbmZvKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgRmxhc2hQb2ludF9IYXJkd2FyZVJlc2V0SG9zdEFkYXB0ZXIoc3RydWN0IHNjY2JfbWdyX2luZm8KKwkJCQkJCQkgKnBDYXJkSW5mbykKIHsKLSAgIFBTQ0NCY2FyZCBDdXJyQ2FyZCA9IE5VTEw7Ci0JUE5WUmFtSW5mbyBwQ3Vyck52UmFtOwotICAgVUNIQVIgaSxqLHRoaXNDYXJkLCBTY2FtRmxnOwotICAgVVNIT1JUIHRlbXAsc3luY19iaXRfbWFwLGlkOwotICAgVUxPTkcgaW9wb3J0OworCXN0cnVjdCBzY2NiX2NhcmQgKkN1cnJDYXJkID0gTlVMTDsKKwlzdHJ1Y3QgbnZyYW1faW5mbyAqcEN1cnJOdlJhbTsKKwl1bnNpZ25lZCBjaGFyIGksIGosIHRoaXNDYXJkLCBTY2FtRmxnOworCXVuc2lnbmVkIHNob3J0IHRlbXAsIHN5bmNfYml0X21hcCwgaWQ7CisJdW5zaWduZWQgbG9uZyBpb3BvcnQ7CiAKLSAgIGlvcG9ydCA9IHBDYXJkSW5mby0+c2lfYmFzZWFkZHI7CisJaW9wb3J0ID0gcENhcmRJbmZvLT5zaV9iYXNlYWRkcjsKIAotICAgZm9yKHRoaXNDYXJkID0wOyB0aGlzQ2FyZCA8PSBNQVhfQ0FSRFM7IHRoaXNDYXJkKyspIHsKKwlmb3IgKHRoaXNDYXJkID0gMDsgdGhpc0NhcmQgPD0gTUFYX0NBUkRTOyB0aGlzQ2FyZCsrKSB7CiAKLSAgICAgIGlmICh0aGlzQ2FyZCA9PSBNQVhfQ0FSRFMpIHsKKwkJaWYgKHRoaXNDYXJkID09IE1BWF9DQVJEUykgewogCi0JIHJldHVybihGQUlMVVJFKTsKLSAgICAgICAgIH0KKwkJCXJldHVybiBGQUlMVVJFOworCQl9CiAKLSAgICAgIGlmIChGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0uaW9Qb3J0ID09IGlvcG9ydCkgeworCQlpZiAoRlBUX0JMX0NhcmRbdGhpc0NhcmRdLmlvUG9ydCA9PSBpb3BvcnQpIHsKIAotICAgICAgICAgQ3VyckNhcmQgPSAmRlBUX0JMX0NhcmRbdGhpc0NhcmRdOwotICAgICAgICAgRlBUX1NjY2JNZ3JUYWJsZUluaXRDYXJkKEN1cnJDYXJkLHRoaXNDYXJkKTsKLSAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQorCQkJQ3VyckNhcmQgPSAmRlBUX0JMX0NhcmRbdGhpc0NhcmRdOworCQkJRlBUX1NjY2JNZ3JUYWJsZUluaXRDYXJkKEN1cnJDYXJkLCB0aGlzQ2FyZCk7CisJCQlicmVhazsKKwkJfQogCi0gICAgICBlbHNlIGlmIChGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0uaW9Qb3J0ID09IDB4MDApIHsKKwkJZWxzZSBpZiAoRlBUX0JMX0NhcmRbdGhpc0NhcmRdLmlvUG9ydCA9PSAweDAwKSB7CiAKLSAgICAgICAgIEZQVF9CTF9DYXJkW3RoaXNDYXJkXS5pb1BvcnQgPSBpb3BvcnQ7Ci0gICAgICAgICBDdXJyQ2FyZCA9ICZGUFRfQkxfQ2FyZFt0aGlzQ2FyZF07CisJCQlGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0uaW9Qb3J0ID0gaW9wb3J0OworCQkJQ3VyckNhcmQgPSAmRlBUX0JMX0NhcmRbdGhpc0NhcmRdOwogCi0JCQlpZihGUFRfbWJDYXJkcykKLQkJCQlmb3IoaSA9IDA7IGkgPCBGUFRfbWJDYXJkczsgaSsrKXsKLQkJCQkJaWYoQ3VyckNhcmQtPmlvUG9ydCA9PSBGUFRfbnZSYW1JbmZvW2ldLm5pQmFzZUFkZHIpCi0JCQkJCQlDdXJyQ2FyZC0+cE52UmFtSW5mbyA9ICZGUFRfbnZSYW1JbmZvW2ldOworCQkJaWYgKEZQVF9tYkNhcmRzKQorCQkJCWZvciAoaSA9IDA7IGkgPCBGUFRfbWJDYXJkczsgaSsrKSB7CisJCQkJCWlmIChDdXJyQ2FyZC0+aW9Qb3J0ID09CisJCQkJCSAgICBGUFRfbnZSYW1JbmZvW2ldLm5pQmFzZUFkZHIpCisJCQkJCQlDdXJyQ2FyZC0+cE52UmFtSW5mbyA9CisJCQkJCQkgICAgJkZQVF9udlJhbUluZm9baV07CiAJCQkJfQotICAgICAgICAgRlBUX1NjY2JNZ3JUYWJsZUluaXRDYXJkKEN1cnJDYXJkLHRoaXNDYXJkKTsKLSAgICAgICAgIEN1cnJDYXJkLT5jYXJkSW5kZXggPSB0aGlzQ2FyZDsKLSAgICAgICAgIEN1cnJDYXJkLT5jYXJkSW5mbyA9IHBDYXJkSW5mbzsKKwkJCUZQVF9TY2NiTWdyVGFibGVJbml0Q2FyZChDdXJyQ2FyZCwgdGhpc0NhcmQpOworCQkJQ3VyckNhcmQtPmNhcmRJbmRleCA9IHRoaXNDYXJkOworCQkJQ3VyckNhcmQtPmNhcmRJbmZvID0gcENhcmRJbmZvOwogCi0JIGJyZWFrOwotICAgICAgICAgfQotICAgICAgfQorCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlwQ3Vyck52UmFtID0gQ3VyckNhcmQtPnBOdlJhbUluZm87CiAKLQlpZihwQ3Vyck52UmFtKXsKKwlpZiAocEN1cnJOdlJhbSkgewogCQlTY2FtRmxnID0gcEN1cnJOdlJhbS0+bmlTY2FtQ29uZjsKLQl9Ci0JZWxzZXsKLQkgICBTY2FtRmxnID0gKFVDSEFSKSBGUFRfdXRpbEVFUmVhZChpb3BvcnQsIFNDQU1fQ09ORklHLzIpOworCX0gZWxzZSB7CisJCVNjYW1GbGcgPQorCQkgICAgKHVuc2lnbmVkIGNoYXIpRlBUX3V0aWxFRVJlYWQoaW9wb3J0LCBTQ0FNX0NPTkZJRyAvIDIpOwogCX0KIAorCUZQVF9CdXNNYXN0ZXJJbml0KGlvcG9ydCk7CisJRlBUX1hib3dJbml0KGlvcG9ydCwgU2NhbUZsZyk7CiAKLSAgIEZQVF9CdXNNYXN0ZXJJbml0KGlvcG9ydCk7Ci0gICBGUFRfWGJvd0luaXQoaW9wb3J0LCBTY2FtRmxnKTsKKwlGUFRfYXV0b0xvYWREZWZhdWx0TWFwKGlvcG9ydCk7CiAKLSAgIEZQVF9hdXRvTG9hZERlZmF1bHRNYXAoaW9wb3J0KTsKKwlmb3IgKGkgPSAwLCBpZCA9IDB4MDE7IGkgIT0gcENhcmRJbmZvLT5zaV9pZDsgaSsrLCBpZCA8PD0gMSkgeworCX0KIAorCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfc2VsZmlkXzAsIGlkKTsKKwlXUl9IQVJQT09OKGlvcG9ydCArIGhwX3NlbGZpZF8xLCAweDAwKTsKKwlXUl9IQVJQT09OKGlvcG9ydCArIGhwX2FyYl9pZCwgcENhcmRJbmZvLT5zaV9pZCk7CisJQ3VyckNhcmQtPm91cklkID0gcENhcmRJbmZvLT5zaV9pZDsKIAotICAgZm9yIChpID0gMCxpZCA9IDB4MDE7IGkgIT0gcENhcmRJbmZvLT5zaV9pZDsgaSsrLGlkIDw8PSAxKXt9CisJaSA9ICh1bnNpZ25lZCBjaGFyKXBDYXJkSW5mby0+c2lfZmxhZ3M7CisJaWYgKGkgJiBTQ1NJX1BBUklUWV9FTkEpCisJCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfcG9ydGN0cmxfMSwgKEhPU1RfTU9ERTggfCBDSEtfU0NTSV9QKSk7CiAKLSAgIFdSX0hBUlBPT04oaW9wb3J0K2hwX3NlbGZpZF8wLCBpZCk7Ci0gICBXUl9IQVJQT09OKGlvcG9ydCtocF9zZWxmaWRfMSwgMHgwMCk7Ci0gICBXUl9IQVJQT09OKGlvcG9ydCtocF9hcmJfaWQsIHBDYXJkSW5mby0+c2lfaWQpOwotICAgQ3VyckNhcmQtPm91cklkID0gcENhcmRJbmZvLT5zaV9pZDsKKwlqID0gKFJEX0hBUlBPT04oaW9wb3J0ICsgaHBfYm1fY3RybCkgJiB+U0NTSV9URVJNX0VOQV9MKTsKKwlpZiAoaSAmIExPV19CWVRFX1RFUk0pCisJCWogfD0gU0NTSV9URVJNX0VOQV9MOworCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfYm1fY3RybCwgaik7CiAKLSAgIGkgPSAoVUNIQVIpIHBDYXJkSW5mby0+c2lfZmxhZ3M7Ci0gICBpZiAoaSAmIFNDU0lfUEFSSVRZX0VOQSkKLSAgICAgICBXUl9IQVJQT09OKGlvcG9ydCtocF9wb3J0Y3RybF8xLChIT1NUX01PREU4IHwgQ0hLX1NDU0lfUCkpOworCWogPSAoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9lZV9jdHJsKSAmIH5TQ1NJX1RFUk1fRU5BX0gpOworCWlmIChpICYgSElHSF9CWVRFX1RFUk0pCisJCWogfD0gU0NTSV9URVJNX0VOQV9IOworCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfZWVfY3RybCwgaik7CiAKLSAgIGogPSAoUkRfSEFSUE9PTihpb3BvcnQraHBfYm1fY3RybCkgJiB+U0NTSV9URVJNX0VOQV9MKTsKLSAgIGlmIChpICYgTE9XX0JZVEVfVEVSTSkKLSAgICAgIGogfD0gU0NTSV9URVJNX0VOQV9MOwotICAgV1JfSEFSUE9PTihpb3BvcnQraHBfYm1fY3RybCwgaik7CisJaWYgKCEocENhcmRJbmZvLT5zaV9mbGFncyAmIFNPRlRfUkVTRVQpKSB7CiAKLSAgIGogPSAoUkRfSEFSUE9PTihpb3BvcnQraHBfZWVfY3RybCkgJiB+U0NTSV9URVJNX0VOQV9IKTsKLSAgIGlmIChpICYgSElHSF9CWVRFX1RFUk0pCi0gICAgICBqIHw9IFNDU0lfVEVSTV9FTkFfSDsKLSAgIFdSX0hBUlBPT04oaW9wb3J0K2hwX2VlX2N0cmwsIGogKTsKKwkJRlBUX3NyZXNiKGlvcG9ydCwgdGhpc0NhcmQpOwogCisJCUZQVF9zY2luaSh0aGlzQ2FyZCwgcENhcmRJbmZvLT5zaV9pZCwgMCk7CisJfQogCi0gICBpZiAoIShwQ2FyZEluZm8tPnNpX2ZsYWdzICYgU09GVF9SRVNFVCkpIHsKKwlpZiAocENhcmRJbmZvLT5zaV9mbGFncyAmIFBPU1RfQUxMX1VOREVSUlJVTlMpCisJCUN1cnJDYXJkLT5nbG9iYWxGbGFncyB8PSBGX05PX0ZJTFRFUjsKIAotICAgICAgRlBUX3NyZXNiKGlvcG9ydCx0aGlzQ2FyZCk7Ci0KLSAgICAgICAgIEZQVF9zY2luaSh0aGlzQ2FyZCwgcENhcmRJbmZvLT5zaV9pZCwgMCk7Ci0gICAgICB9Ci0KLQotCi0gICBpZiAocENhcmRJbmZvLT5zaV9mbGFncyAmIFBPU1RfQUxMX1VOREVSUlJVTlMpCi0gICAgICBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9OT19GSUxURVI7Ci0KLQlpZihwQ3Vyck52UmFtKXsKLQkJaWYocEN1cnJOdlJhbS0+bmlTeXNDb25mICYgMHgxMCkKKwlpZiAocEN1cnJOdlJhbSkgeworCQlpZiAocEN1cnJOdlJhbS0+bmlTeXNDb25mICYgMHgxMCkKIAkJCUN1cnJDYXJkLT5nbG9iYWxGbGFncyB8PSBGX0dSRUVOX1BDOwotCX0KLQllbHNlewotCSAgIGlmIChGUFRfdXRpbEVFUmVhZChpb3BvcnQsIChTWVNURU1fQ09ORklHLzIpKSAmIEdSRUVOX1BDX0VOQSkKLSAgIAkgICBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9HUkVFTl9QQzsKKwl9IGVsc2UgeworCQlpZiAoRlBUX3V0aWxFRVJlYWQoaW9wb3J0LCAoU1lTVEVNX0NPTkZJRyAvIDIpKSAmIEdSRUVOX1BDX0VOQSkKKwkJCUN1cnJDYXJkLT5nbG9iYWxGbGFncyB8PSBGX0dSRUVOX1BDOwogCX0KIAogCS8qIFNldCBnbG9iYWwgZmxhZyB0byBpbmRpY2F0ZSBSZS1OZWdvdGlhdGlvbiB0byBiZSBkb25lIG9uIGFsbAotCQlja2VjayBjb25kaXRpb24gKi8KLQlpZihwQ3Vyck52UmFtKXsKLQkJaWYocEN1cnJOdlJhbS0+bmlTY3NpQ29uZiAmIDB4MDQpCisJICAgY2tlY2sgY29uZGl0aW9uICovCisJaWYgKHBDdXJyTnZSYW0pIHsKKwkJaWYgKHBDdXJyTnZSYW0tPm5pU2NzaUNvbmYgJiAweDA0KQorCQkJQ3VyckNhcmQtPmdsb2JhbEZsYWdzIHw9IEZfRE9fUkVORUdPOworCX0gZWxzZSB7CisJCWlmIChGUFRfdXRpbEVFUmVhZChpb3BvcnQsIChTQ1NJX0NPTkZJRyAvIDIpKSAmIFJFTkVHT19FTkEpCiAJCQlDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9ET19SRU5FR087CiAJfQotCWVsc2V7Ci0JICAgaWYgKEZQVF91dGlsRUVSZWFkKGlvcG9ydCwgKFNDU0lfQ09ORklHLzIpKSAmIFJFTkVHT19FTkEpCi0gICAJICAgQ3VyckNhcmQtPmdsb2JhbEZsYWdzIHw9IEZfRE9fUkVORUdPOwotCX0KIAotCWlmKHBDdXJyTnZSYW0pewotCQlpZihwQ3Vyck52UmFtLT5uaVNjc2lDb25mICYgMHgwOCkKKwlpZiAocEN1cnJOdlJhbSkgeworCQlpZiAocEN1cnJOdlJhbS0+bmlTY3NpQ29uZiAmIDB4MDgpCisJCQlDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9DT05MVU5fSU87CisJfSBlbHNlIHsKKwkJaWYgKEZQVF91dGlsRUVSZWFkKGlvcG9ydCwgKFNDU0lfQ09ORklHIC8gMikpICYgQ09OTklPX0VOQSkKIAkJCUN1cnJDYXJkLT5nbG9iYWxGbGFncyB8PSBGX0NPTkxVTl9JTzsKIAl9Ci0JZWxzZXsKLQkgICBpZiAoRlBUX3V0aWxFRVJlYWQoaW9wb3J0LCAoU0NTSV9DT05GSUcvMikpICYgQ09OTklPX0VOQSkKLSAgIAkgICBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9DT05MVU5fSU87CisKKwl0ZW1wID0gcENhcmRJbmZvLT5zaV9wZXJfdGFyZ19ub19kaXNjOworCisJZm9yIChpID0gMCwgaWQgPSAxOyBpIDwgTUFYX1NDU0lfVEFSOyBpKyssIGlkIDw8PSAxKSB7CisKKwkJaWYgKHRlbXAgJiBpZCkKKwkJCUZQVF9zY2NiTWdyVGJsW3RoaXNDYXJkXVtpXS5UYXJTdGF0dXMgfD0gVEFSX0FMTE9XX0RJU0M7CiAJfQogCisJc3luY19iaXRfbWFwID0gMHgwMDAxOwogCi0gICB0ZW1wID0gcENhcmRJbmZvLT5zaV9wZXJfdGFyZ19ub19kaXNjOworCWZvciAoaWQgPSAwOyBpZCA8IChNQVhfU0NTSV9UQVIgLyAyKTsgaWQrKykgewogCi0gICBmb3IgKGkgPSAwLGlkID0gMTsgaSA8IE1BWF9TQ1NJX1RBUjsgaSsrLCBpZCA8PD0gMSkgewotCi0gICAgICBpZiAodGVtcCAmIGlkKQotCSBGUFRfc2NjYk1nclRibFt0aGlzQ2FyZF1baV0uVGFyU3RhdHVzIHw9IFRBUl9BTExPV19ESVNDOwotICAgICAgfQotCi0gICBzeW5jX2JpdF9tYXAgPSAweDAwMDE7Ci0KLSAgIGZvciAoaWQgPSAwOyBpZCA8IChNQVhfU0NTSV9UQVIvMik7IGlkKyspIHsKLQotCQlpZihwQ3Vyck52UmFtKXsKLQkJCXRlbXAgPSAoVVNIT1JUKSBwQ3Vyck52UmFtLT5uaVN5bmNUYmxbaWRdOworCQlpZiAocEN1cnJOdlJhbSkgeworCQkJdGVtcCA9ICh1bnNpZ25lZCBzaG9ydClwQ3Vyck52UmFtLT5uaVN5bmNUYmxbaWRdOwogCQkJdGVtcCA9ICgodGVtcCAmIDB4MDMpICsgKCh0ZW1wIDw8IDQpICYgMHhjMCkpICsKLQkJCQkJICgoKHRlbXAgPDwgNCkgJiAweDAzMDApICsgKCh0ZW1wIDw8IDgpICYgMHhjMDAwKSk7Ci0JCX1lbHNlCi0JICAgICAgdGVtcCA9IEZQVF91dGlsRUVSZWFkKGlvcG9ydCwgKFVTSE9SVCkoKFNZTkNfUkFURV9UQkwvMikraWQpKTsKKwkJCSAgICAoKCh0ZW1wIDw8IDQpICYgMHgwMzAwKSArICgodGVtcCA8PCA4KSAmIDB4YzAwMCkpOworCQl9IGVsc2UKKwkJCXRlbXAgPQorCQkJICAgIEZQVF91dGlsRUVSZWFkKGlvcG9ydCwKKwkJCQkJICAgKHVuc2lnbmVkIHNob3J0KSgoU1lOQ19SQVRFX1RCTCAvIDIpCisJCQkJCQkJICAgICsgaWQpKTsKIAotICAgICAgZm9yIChpID0gMDsgaSA8IDI7IHRlbXAgPj49OCxpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDI7IHRlbXAgPj49IDgsIGkrKykgewogCi0gICAgICAgICBpZiAocENhcmRJbmZvLT5zaV9wZXJfdGFyZ19pbml0X3N5bmMgJiBzeW5jX2JpdF9tYXApIHsKKwkJCWlmIChwQ2FyZEluZm8tPnNpX3Blcl90YXJnX2luaXRfc3luYyAmIHN5bmNfYml0X21hcCkgewogCi0gICAgICAgICAgICBGUFRfc2NjYk1nclRibFt0aGlzQ2FyZF1baWQqMitpXS5UYXJFRVZhbHVlID0gKFVDSEFSKXRlbXA7Ci0gICAgICAgICAgICB9CisJCQkJRlBUX3NjY2JNZ3JUYmxbdGhpc0NhcmRdW2lkICogMiArCisJCQkJCQkJIGldLlRhckVFVmFsdWUgPQorCQkJCSAgICAodW5zaWduZWQgY2hhcil0ZW1wOworCQkJfQogCi0gICAgICAgICBlbHNlIHsKLQkgICAgRlBUX3NjY2JNZ3JUYmxbdGhpc0NhcmRdW2lkKjIraV0uVGFyU3RhdHVzIHw9IFNZTkNfU1VQUE9SVEVEOwotICAgICAgICAgICAgRlBUX3NjY2JNZ3JUYmxbdGhpc0NhcmRdW2lkKjIraV0uVGFyRUVWYWx1ZSA9Ci0gICAgICAgICAgICAgICAoVUNIQVIpKHRlbXAgJiB+RUVfU1lOQ19NQVNLKTsKLSAgICAgICAgICAgIH0KKwkJCWVsc2UgeworCQkJCUZQVF9zY2NiTWdyVGJsW3RoaXNDYXJkXVtpZCAqIDIgKworCQkJCQkJCSBpXS5UYXJTdGF0dXMgfD0KKwkJCQkgICAgU1lOQ19TVVBQT1JURUQ7CisJCQkJRlBUX3NjY2JNZ3JUYmxbdGhpc0NhcmRdW2lkICogMiArCisJCQkJCQkJIGldLlRhckVFVmFsdWUgPQorCQkJCSAgICAodW5zaWduZWQgY2hhcikodGVtcCAmIH5FRV9TWU5DX01BU0spOworCQkJfQogCiAvKiAgICAgICAgIGlmICgocENhcmRJbmZvLT5zaV9wZXJfdGFyZ193aWRlX25lZ28gJiBzeW5jX2JpdF9tYXApIHx8CiAgICAgICAgICAgICAoaWQqMitpID49IDgpKXsKICovCi0gICAgICAgICBpZiAocENhcmRJbmZvLT5zaV9wZXJfdGFyZ193aWRlX25lZ28gJiBzeW5jX2JpdF9tYXApeworCQkJaWYgKHBDYXJkSW5mby0+c2lfcGVyX3Rhcmdfd2lkZV9uZWdvICYgc3luY19iaXRfbWFwKSB7CiAKLSAgICAgICAgICAgIEZQVF9zY2NiTWdyVGJsW3RoaXNDYXJkXVtpZCoyK2ldLlRhckVFVmFsdWUgfD0gRUVfV0lERV9TQ1NJOworCQkJCUZQVF9zY2NiTWdyVGJsW3RoaXNDYXJkXVtpZCAqIDIgKworCQkJCQkJCSBpXS5UYXJFRVZhbHVlIHw9CisJCQkJICAgIEVFX1dJREVfU0NTSTsKIAotICAgICAgICAgICAgfQorCQkJfQogCi0gICAgICAgICBlbHNlIHsgLyogTkFSUk9XIFNDU0kgKi8KLSAgICAgICAgICAgIEZQVF9zY2NiTWdyVGJsW3RoaXNDYXJkXVtpZCoyK2ldLlRhclN0YXR1cyB8PSBXSURFX05FR09DSUFURUQ7Ci0gICAgICAgICAgICB9CisJCQllbHNlIHsJLyogTkFSUk9XIFNDU0kgKi8KKwkJCQlGUFRfc2NjYk1nclRibFt0aGlzQ2FyZF1baWQgKiAyICsKKwkJCQkJCQkgaV0uVGFyU3RhdHVzIHw9CisJCQkJICAgIFdJREVfTkVHT0NJQVRFRDsKKwkJCX0KIAorCQkJc3luY19iaXRfbWFwIDw8PSAxOwogCi0JIHN5bmNfYml0X21hcCA8PD0gMTsKKwkJfQorCX0KIAorCVdSX0hBUlBPT04oKGlvcG9ydCArIGhwX3NlbWFwaG9yZSksCisJCSAgICh1bnNpZ25lZCBjaGFyKShSRF9IQVJQT09OKChpb3BvcnQgKyBocF9zZW1hcGhvcmUpKSB8CisJCQkJICAgU0NDQl9NR1JfUFJFU0VOVCkpOwogCi0KLSAgICAgICAgIH0KLSAgICAgIH0KLQotICAgV1JfSEFSUE9PTigoaW9wb3J0K2hwX3NlbWFwaG9yZSksCi0gICAgICAoVUNIQVIpKFJEX0hBUlBPT04oKGlvcG9ydCtocF9zZW1hcGhvcmUpKSB8IFNDQ0JfTUdSX1BSRVNFTlQpKTsKLQotICAgcmV0dXJuKChVTE9ORylDdXJyQ2FyZCk7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKUN1cnJDYXJkOwogfQogCi1zdGF0aWMgdm9pZCBTY2NiTWdyX3VubG9hZF9jYXJkKFVMT05HIHBDdXJyQ2FyZCkKK3N0YXRpYyB2b2lkIEZsYXNoUG9pbnRfUmVsZWFzZUhvc3RBZGFwdGVyKHVuc2lnbmVkIGxvbmcgcEN1cnJDYXJkKQogewotCVVDSEFSIGk7Ci0JVUxPTkcgcG9ydEJhc2U7Ci0JVUxPTkcgcmVnT2Zmc2V0OwotCVVMT05HIHNjYW1EYXRhOwotCVVMT05HICpwU2NhbVRibDsKLQlQTlZSYW1JbmZvIHBDdXJyTnZSYW07CisJdW5zaWduZWQgY2hhciBpOworCXVuc2lnbmVkIGxvbmcgcG9ydEJhc2U7CisJdW5zaWduZWQgbG9uZyByZWdPZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzY2FtRGF0YTsKKwl1bnNpZ25lZCBsb25nICpwU2NhbVRibDsKKwlzdHJ1Y3QgbnZyYW1faW5mbyAqcEN1cnJOdlJhbTsKIAotCXBDdXJyTnZSYW0gPSAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5wTnZSYW1JbmZvOworCXBDdXJyTnZSYW0gPSAoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5wTnZSYW1JbmZvOwogCi0JaWYocEN1cnJOdlJhbSl7CisJaWYgKHBDdXJyTnZSYW0pIHsKIAkJRlBUX1dyU3RhY2socEN1cnJOdlJhbS0+bmlCYXNlQWRkciwgMCwgcEN1cnJOdlJhbS0+bmlNb2RlbCk7CiAJCUZQVF9XclN0YWNrKHBDdXJyTnZSYW0tPm5pQmFzZUFkZHIsIDEsIHBDdXJyTnZSYW0tPm5pU3lzQ29uZik7CiAJCUZQVF9XclN0YWNrKHBDdXJyTnZSYW0tPm5pQmFzZUFkZHIsIDIsIHBDdXJyTnZSYW0tPm5pU2NzaUNvbmYpOwogCQlGUFRfV3JTdGFjayhwQ3Vyck52UmFtLT5uaUJhc2VBZGRyLCAzLCBwQ3Vyck52UmFtLT5uaVNjYW1Db25mKTsKIAkJRlBUX1dyU3RhY2socEN1cnJOdlJhbS0+bmlCYXNlQWRkciwgNCwgcEN1cnJOdlJhbS0+bmlBZGFwSWQpOwogCi0JCWZvcihpID0gMDsgaSA8IE1BWF9TQ1NJX1RBUiAvIDI7IGkrKykKLQkJCUZQVF9XclN0YWNrKHBDdXJyTnZSYW0tPm5pQmFzZUFkZHIsIChVQ0hBUikoaSs1KSwgcEN1cnJOdlJhbS0+bmlTeW5jVGJsW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9TQ1NJX1RBUiAvIDI7IGkrKykKKwkJCUZQVF9XclN0YWNrKHBDdXJyTnZSYW0tPm5pQmFzZUFkZHIsCisJCQkJICAgICh1bnNpZ25lZCBjaGFyKShpICsgNSksCisJCQkJICAgIHBDdXJyTnZSYW0tPm5pU3luY1RibFtpXSk7CiAKIAkJcG9ydEJhc2UgPSBwQ3Vyck52UmFtLT5uaUJhc2VBZGRyOwogCi0JCWZvcihpID0gMDsgaSA8IE1BWF9TQ1NJX1RBUjsgaSsrKXsKLQkJCXJlZ09mZnNldCA9IGhwX2FyYW1CYXNlICsgNjQgKyBpKjQ7Ci0JCQlwU2NhbVRibCA9IChVTE9ORyAqKSAmcEN1cnJOdlJhbS0+bmlTY2FtVGJsW2ldOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1NDU0lfVEFSOyBpKyspIHsKKwkJCXJlZ09mZnNldCA9IGhwX2FyYW1CYXNlICsgNjQgKyBpICogNDsKKwkJCXBTY2FtVGJsID0gKHVuc2lnbmVkIGxvbmcgKikmcEN1cnJOdlJhbS0+bmlTY2FtVGJsW2ldOwogCQkJc2NhbURhdGEgPSAqcFNjYW1UYmw7CiAJCQlXUl9IQVJQMzIocG9ydEJhc2UsIHJlZ09mZnNldCwgc2NhbURhdGEpOwogCQl9CiAKLQl9ZWxzZXsKLQkJRlBUX1dyU3RhY2soKChQU0NDQmNhcmQpcEN1cnJDYXJkKS0+aW9Qb3J0LCAwLCAwKTsKKwl9IGVsc2UgeworCQlGUFRfV3JTdGFjaygoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5pb1BvcnQsIDAsIDApOwogCX0KIH0KIAotCi1zdGF0aWMgdm9pZCBGUFRfUk5WUmFtRGF0YShQTlZSYW1JbmZvIHBOdlJhbUluZm8pCitzdGF0aWMgdm9pZCBGUFRfUk5WUmFtRGF0YShzdHJ1Y3QgbnZyYW1faW5mbyAqcE52UmFtSW5mbykKIHsKLQlVQ0hBUiBpOwotCVVMT05HIHBvcnRCYXNlOwotCVVMT05HIHJlZ09mZnNldDsKLQlVTE9ORyBzY2FtRGF0YTsKLQlVTE9ORyAqcFNjYW1UYmw7CisJdW5zaWduZWQgY2hhciBpOworCXVuc2lnbmVkIGxvbmcgcG9ydEJhc2U7CisJdW5zaWduZWQgbG9uZyByZWdPZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzY2FtRGF0YTsKKwl1bnNpZ25lZCBsb25nICpwU2NhbVRibDsKIAotCXBOdlJhbUluZm8tPm5pTW9kZWwgICAgPSBGUFRfUmRTdGFjayhwTnZSYW1JbmZvLT5uaUJhc2VBZGRyLCAwKTsKLQlwTnZSYW1JbmZvLT5uaVN5c0NvbmYgID0gRlBUX1JkU3RhY2socE52UmFtSW5mby0+bmlCYXNlQWRkciwgMSk7CisJcE52UmFtSW5mby0+bmlNb2RlbCA9IEZQVF9SZFN0YWNrKHBOdlJhbUluZm8tPm5pQmFzZUFkZHIsIDApOworCXBOdlJhbUluZm8tPm5pU3lzQ29uZiA9IEZQVF9SZFN0YWNrKHBOdlJhbUluZm8tPm5pQmFzZUFkZHIsIDEpOwogCXBOdlJhbUluZm8tPm5pU2NzaUNvbmYgPSBGUFRfUmRTdGFjayhwTnZSYW1JbmZvLT5uaUJhc2VBZGRyLCAyKTsKIAlwTnZSYW1JbmZvLT5uaVNjYW1Db25mID0gRlBUX1JkU3RhY2socE52UmFtSW5mby0+bmlCYXNlQWRkciwgMyk7Ci0JcE52UmFtSW5mby0+bmlBZGFwSWQgICA9IEZQVF9SZFN0YWNrKHBOdlJhbUluZm8tPm5pQmFzZUFkZHIsIDQpOworCXBOdlJhbUluZm8tPm5pQWRhcElkID0gRlBUX1JkU3RhY2socE52UmFtSW5mby0+bmlCYXNlQWRkciwgNCk7CiAKLQlmb3IoaSA9IDA7IGkgPCBNQVhfU0NTSV9UQVIgLyAyOyBpKyspCi0JCXBOdlJhbUluZm8tPm5pU3luY1RibFtpXSA9IEZQVF9SZFN0YWNrKHBOdlJhbUluZm8tPm5pQmFzZUFkZHIsIChVQ0hBUikoaSs1KSk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9TQ1NJX1RBUiAvIDI7IGkrKykKKwkJcE52UmFtSW5mby0+bmlTeW5jVGJsW2ldID0KKwkJICAgIEZQVF9SZFN0YWNrKHBOdlJhbUluZm8tPm5pQmFzZUFkZHIsICh1bnNpZ25lZCBjaGFyKShpICsgNSkpOwogCiAJcG9ydEJhc2UgPSBwTnZSYW1JbmZvLT5uaUJhc2VBZGRyOwogCi0JZm9yKGkgPSAwOyBpIDwgTUFYX1NDU0lfVEFSOyBpKyspewotCQlyZWdPZmZzZXQgPSBocF9hcmFtQmFzZSArIDY0ICsgaSo0OworCWZvciAoaSA9IDA7IGkgPCBNQVhfU0NTSV9UQVI7IGkrKykgeworCQlyZWdPZmZzZXQgPSBocF9hcmFtQmFzZSArIDY0ICsgaSAqIDQ7CiAJCVJEX0hBUlAzMihwb3J0QmFzZSwgcmVnT2Zmc2V0LCBzY2FtRGF0YSk7Ci0JCXBTY2FtVGJsID0gKFVMT05HICopICZwTnZSYW1JbmZvLT5uaVNjYW1UYmxbaV07CisJCXBTY2FtVGJsID0gKHVuc2lnbmVkIGxvbmcgKikmcE52UmFtSW5mby0+bmlTY2FtVGJsW2ldOwogCQkqcFNjYW1UYmwgPSBzY2FtRGF0YTsKIAl9CiAKIH0KIAotc3RhdGljIFVDSEFSIEZQVF9SZFN0YWNrKFVMT05HIHBvcnRCYXNlLCBVQ0hBUiBpbmRleCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZQVF9SZFN0YWNrKHVuc2lnbmVkIGxvbmcgcG9ydEJhc2UsIHVuc2lnbmVkIGNoYXIgaW5kZXgpCiB7CiAJV1JfSEFSUE9PTihwb3J0QmFzZSArIGhwX3N0YWNrX2FkZHIsIGluZGV4KTsKLQlyZXR1cm4oUkRfSEFSUE9PTihwb3J0QmFzZSArIGhwX3N0YWNrX2RhdGEpKTsKKwlyZXR1cm4gUkRfSEFSUE9PTihwb3J0QmFzZSArIGhwX3N0YWNrX2RhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBGUFRfV3JTdGFjayhVTE9ORyBwb3J0QmFzZSwgVUNIQVIgaW5kZXgsIFVDSEFSIGRhdGEpCitzdGF0aWMgdm9pZCBGUFRfV3JTdGFjayh1bnNpZ25lZCBsb25nIHBvcnRCYXNlLCB1bnNpZ25lZCBjaGFyIGluZGV4LAorCQkJdW5zaWduZWQgY2hhciBkYXRhKQogewogCVdSX0hBUlBPT04ocG9ydEJhc2UgKyBocF9zdGFja19hZGRyLCBpbmRleCk7CiAJV1JfSEFSUE9PTihwb3J0QmFzZSArIGhwX3N0YWNrX2RhdGEsIGRhdGEpOwogfQogCi0KLXN0YXRpYyBVQ0hBUiBGUFRfQ2hrSWZDaGlwSW5pdGlhbGl6ZWQoVUxPTkcgaW9Qb3J0KQorc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX0Noa0lmQ2hpcEluaXRpYWxpemVkKHVuc2lnbmVkIGxvbmcgaW9Qb3J0KQogewotCWlmKChSRF9IQVJQT09OKGlvUG9ydCArIGhwX2FyYl9pZCkgJiAweDBmKSAhPSBGUFRfUmRTdGFjayhpb1BvcnQsIDQpKQotCQlyZXR1cm4oMCk7Ci0JaWYoKFJEX0hBUlBPT04oaW9Qb3J0ICsgaHBfY2xrY3RybF8wKSAmIENMS0NUUkxfREVGQVVMVCkKLQkJCQkJCQkJIT0gQ0xLQ1RSTF9ERUZBVUxUKQotCQlyZXR1cm4oMCk7Ci0JaWYoKFJEX0hBUlBPT04oaW9Qb3J0ICsgaHBfc2VsdGltZW91dCkgPT0gVE9fMjUwbXMpIHx8Ci0JCShSRF9IQVJQT09OKGlvUG9ydCArIGhwX3NlbHRpbWVvdXQpID09IFRPXzI5MG1zKSkKLQkJcmV0dXJuKDEpOwotCXJldHVybigwKTsKKwlpZiAoKFJEX0hBUlBPT04oaW9Qb3J0ICsgaHBfYXJiX2lkKSAmIDB4MGYpICE9IEZQVF9SZFN0YWNrKGlvUG9ydCwgNCkpCisJCXJldHVybiAwOworCWlmICgoUkRfSEFSUE9PTihpb1BvcnQgKyBocF9jbGtjdHJsXzApICYgQ0xLQ1RSTF9ERUZBVUxUKQorCSAgICAhPSBDTEtDVFJMX0RFRkFVTFQpCisJCXJldHVybiAwOworCWlmICgoUkRfSEFSUE9PTihpb1BvcnQgKyBocF9zZWx0aW1lb3V0KSA9PSBUT18yNTBtcykgfHwKKwkgICAgKFJEX0hBUlBPT04oaW9Qb3J0ICsgaHBfc2VsdGltZW91dCkgPT0gVE9fMjkwbXMpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKIAogfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKLSAqIEZ1bmN0aW9uOiBTY2NiTWdyX3N0YXJ0X3NjY2IKKyAqIEZ1bmN0aW9uOiBGbGFzaFBvaW50X1N0YXJ0Q0NCCiAgKgogICogRGVzY3JpcHRpb246IFN0YXJ0IGEgY29tbWFuZCBwb2ludGVkIHRvIGJ5IHBfU2NjYi4gV2hlbiB0aGUKICAqICAgICAgICAgICAgICBjb21tYW5kIGlzIGNvbXBsZXRlZCBpdCB3aWxsIGJlIHJldHVybmVkIHZpYSB0aGUKICAqICAgICAgICAgICAgICBjYWxsYmFjayBmdW5jdGlvbi4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBTY2NiTWdyX3N0YXJ0X3NjY2IoVUxPTkcgcEN1cnJDYXJkLCBQU0NDQiBwX1NjY2IpCitzdGF0aWMgdm9pZCBGbGFzaFBvaW50X1N0YXJ0Q0NCKHVuc2lnbmVkIGxvbmcgcEN1cnJDYXJkLCBzdHJ1Y3Qgc2NjYiAqcF9TY2NiKQogewotICAgVUxPTkcgaW9wb3J0OwotICAgVUNIQVIgdGhpc0NhcmQsIGx1bjsKLQlQU0NDQiBwU2F2ZVNjY2I7Ci0gICBDQUxMX0JLX0ZOIGNhbGxiYWNrOworCXVuc2lnbmVkIGxvbmcgaW9wb3J0OworCXVuc2lnbmVkIGNoYXIgdGhpc0NhcmQsIGx1bjsKKwlzdHJ1Y3Qgc2NjYiAqcFNhdmVTY2NiOworCUNBTExfQktfRk4gY2FsbGJhY2s7CiAKLSAgIHRoaXNDYXJkID0gKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmNhcmRJbmRleDsKLSAgIGlvcG9ydCA9ICgoUFNDQ0JjYXJkKSBwQ3VyckNhcmQpLT5pb1BvcnQ7CisJdGhpc0NhcmQgPSAoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5jYXJkSW5kZXg7CisJaW9wb3J0ID0gKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+aW9Qb3J0OwogCi0JaWYoKHBfU2NjYi0+VGFyZ0lEID4gTUFYX1NDU0lfVEFSKSB8fCAocF9TY2NiLT5MdW4gPiBNQVhfTFVOKSkKLQl7CisJaWYgKChwX1NjY2ItPlRhcmdJRCA+IE1BWF9TQ1NJX1RBUikgfHwgKHBfU2NjYi0+THVuID4gTUFYX0xVTikpIHsKIAogCQlwX1NjY2ItPkhvc3RTdGF0dXMgPSBTQ0NCX0NPTVBMRVRFOwogCQlwX1NjY2ItPlNjY2JTdGF0dXMgPSBTQ0NCX0VSUk9SOwotCQljYWxsYmFjayA9IChDQUxMX0JLX0ZOKXBfU2NjYi0+U2NjYkNhbGxiYWNrOworCQljYWxsYmFjayA9IChDQUxMX0JLX0ZOKSBwX1NjY2ItPlNjY2JDYWxsYmFjazsKIAkJaWYgKGNhbGxiYWNrKQogCQkJY2FsbGJhY2socF9TY2NiKTsKIAogCQlyZXR1cm47CiAJfQogCi0gICBGUFRfc2luaXRzKHBfU2NjYix0aGlzQ2FyZCk7CisJRlBUX3Npbml0cyhwX1NjY2IsIHRoaXNDYXJkKTsKIAorCWlmICghKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y21kQ291bnRlcikgeworCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX3NlbWFwaG9yZSwKKwkJCSAgIChSRF9IQVJQT09OKGlvcG9ydCArIGhwX3NlbWFwaG9yZSkKKwkJCSAgICB8IFNDQ0JfTUdSX0FDVElWRSkpOwogCi0gICBpZiAoISgoUFNDQ0JjYXJkKSBwQ3VyckNhcmQpLT5jbWRDb3VudGVyKQotICAgICAgewotICAgICAgV1JfSEFSUE9PTihpb3BvcnQraHBfc2VtYXBob3JlLCAoUkRfSEFSUE9PTihpb3BvcnQraHBfc2VtYXBob3JlKQotICAgICAgICAgfCBTQ0NCX01HUl9BQ1RJVkUpKTsKKwkJaWYgKCgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmdsb2JhbEZsYWdzICYgRl9HUkVFTl9QQykgeworCQkJV1JfSEFSUE9PTihpb3BvcnQgKyBocF9jbGtjdHJsXzAsIENMS0NUUkxfREVGQVVMVCk7CisJCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX3N5c19jdHJsLCAweDAwKTsKKwkJfQorCX0KIAotICAgICAgaWYgKCgoUFNDQ0JjYXJkKSBwQ3VyckNhcmQpLT5nbG9iYWxGbGFncyAmIEZfR1JFRU5fUEMpCi0gICAgICAgICB7Ci0JCSBXUl9IQVJQT09OKGlvcG9ydCtocF9jbGtjdHJsXzAsIENMS0NUUkxfREVGQVVMVCk7Ci0JCSBXUl9IQVJQT09OKGlvcG9ydCtocF9zeXNfY3RybCwgMHgwMCk7Ci0gICAgICAgICB9Ci0gICAgICB9CisJKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y21kQ291bnRlcisrOwogCi0gICAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5jbWRDb3VudGVyKys7CisJaWYgKFJEX0hBUlBPT04oaW9wb3J0ICsgaHBfc2VtYXBob3JlKSAmIEJJT1NfSU5fVVNFKSB7CiAKLSAgIGlmIChSRF9IQVJQT09OKGlvcG9ydCtocF9zZW1hcGhvcmUpICYgQklPU19JTl9VU0UpIHsKKwkJV1JfSEFSUE9PTihpb3BvcnQgKyBocF9zZW1hcGhvcmUsCisJCQkgICAoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9zZW1hcGhvcmUpCisJCQkgICAgfCBUSUNLTEVfTUUpKTsKKwkJaWYgKHBfU2NjYi0+T3BlcmF0aW9uQ29kZSA9PSBSRVNFVF9DT01NQU5EKSB7CisJCQlwU2F2ZVNjY2IgPQorCQkJICAgICgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCOworCQkJKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPSBwX1NjY2I7CisJCQlGUFRfcXVldWVTZWxlY3RGYWlsKCZGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0sIHRoaXNDYXJkKTsKKwkJCSgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID0KKwkJCSAgICBwU2F2ZVNjY2I7CisJCX0gZWxzZSB7CisJCQlGUFRfcXVldWVBZGRTY2NiKHBfU2NjYiwgdGhpc0NhcmQpOworCQl9CisJfQogCi0gICAgICBXUl9IQVJQT09OKGlvcG9ydCtocF9zZW1hcGhvcmUsIChSRF9IQVJQT09OKGlvcG9ydCtocF9zZW1hcGhvcmUpCi0gICAgICAgICB8IFRJQ0tMRV9NRSkpOwotCQlpZihwX1NjY2ItPk9wZXJhdGlvbkNvZGUgPT0gUkVTRVRfQ09NTUFORCkKLQkJCXsKLQkJCQlwU2F2ZVNjY2IgPSAoKFBTQ0NCY2FyZCkgcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0I7Ci0JCQkJKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID0gcF9TY2NiOwotCQkJCUZQVF9xdWV1ZVNlbGVjdEZhaWwoJkZQVF9CTF9DYXJkW3RoaXNDYXJkXSwgdGhpc0NhcmQpOwotCQkJCSgoUFNDQ0JjYXJkKSBwQ3VyckNhcmQpLT5jdXJyZW50U0NDQiA9IHBTYXZlU2NjYjsKLQkJCX0KLQkJZWxzZQotCQkJewotCSAgICAgIEZQVF9xdWV1ZUFkZFNjY2IocF9TY2NiLHRoaXNDYXJkKTsKLQkJCX0KLSAgICAgIH0KKwllbHNlIGlmICgoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9wYWdlX2N0cmwpICYgR19JTlRfRElTQUJMRSkpIHsKIAotICAgZWxzZSBpZiAoKFJEX0hBUlBPT04oaW9wb3J0K2hwX3BhZ2VfY3RybCkgJiBHX0lOVF9ESVNBQkxFKSkgeworCQlpZiAocF9TY2NiLT5PcGVyYXRpb25Db2RlID09IFJFU0VUX0NPTU1BTkQpIHsKKwkJCXBTYXZlU2NjYiA9CisJCQkgICAgKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0I7CisJCQkoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5jdXJyZW50U0NDQiA9IHBfU2NjYjsKKwkJCUZQVF9xdWV1ZVNlbGVjdEZhaWwoJkZQVF9CTF9DYXJkW3RoaXNDYXJkXSwgdGhpc0NhcmQpOworCQkJKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPQorCQkJICAgIHBTYXZlU2NjYjsKKwkJfSBlbHNlIHsKKwkJCUZQVF9xdWV1ZUFkZFNjY2IocF9TY2NiLCB0aGlzQ2FyZCk7CisJCX0KKwl9CiAKLQkJCWlmKHBfU2NjYi0+T3BlcmF0aW9uQ29kZSA9PSBSRVNFVF9DT01NQU5EKQotCQkJCXsKLQkJCQkJcFNhdmVTY2NiID0gKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCOwotCQkJCQkoKFBTQ0NCY2FyZCkgcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPSBwX1NjY2I7Ci0JCQkJCUZQVF9xdWV1ZVNlbGVjdEZhaWwoJkZQVF9CTF9DYXJkW3RoaXNDYXJkXSwgdGhpc0NhcmQpOwotCQkJCQkoKFBTQ0NCY2FyZCkgcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPSBwU2F2ZVNjY2I7Ci0JCQkJfQotCQkJZWxzZQotCQkJCXsKLQkJICAgICAgRlBUX3F1ZXVlQWRkU2NjYihwX1NjY2IsdGhpc0NhcmQpOwotCQkJCX0KLSAgICAgIH0KKwllbHNlIHsKIAotICAgZWxzZSB7CisJCU1ESVNBQkxFX0lOVChpb3BvcnQpOwogCi0gICAgICBNRElTQUJMRV9JTlQoaW9wb3J0KTsKLQotCQlpZigoKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmIAotCQkJKChGUFRfc2NjYk1nclRibFt0aGlzQ2FyZF1bcF9TY2NiLT5UYXJnSURdLlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKQorCQlpZiAoKCgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pCisJCSAgICAmJgorCQkgICAgKChGUFRfc2NjYk1nclRibFt0aGlzQ2FyZF1bcF9TY2NiLT5UYXJnSURdLgorCQkgICAgICBUYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkKIAkJCWx1biA9IHBfU2NjYi0+THVuOwogCQllbHNlCiAJCQlsdW4gPSAwOwotICAgICAgaWYgKCgoKFBTQ0NCY2FyZCkgcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPT0gTlVMTCkgJiYKLSAgICAgICAgIChGUFRfc2NjYk1nclRibFt0aGlzQ2FyZF1bcF9TY2NiLT5UYXJnSURdLlRhclNlbFFfQ250ID09IDApICYmCi0gICAgICAgICAoRlBUX3NjY2JNZ3JUYmxbdGhpc0NhcmRdW3BfU2NjYi0+VGFyZ0lEXS5UYXJMVU5CdXN5W2x1bl0KLSAgICAgICAgID09IDApKSB7CisJCWlmICgoKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPT0gTlVMTCkgJiYKKwkJICAgIChGUFRfc2NjYk1nclRibFt0aGlzQ2FyZF1bcF9TY2NiLT5UYXJnSURdLlRhclNlbFFfQ250ID09IDApCisJCSAgICAmJiAoRlBUX3NjY2JNZ3JUYmxbdGhpc0NhcmRdW3BfU2NjYi0+VGFyZ0lEXS5UYXJMVU5CdXN5W2x1bl0KKwkJCT09IDApKSB7CiAKLSAgICAgICAgICAgICgoUFNDQ0JjYXJkKSBwQ3VyckNhcmQpLT5jdXJyZW50U0NDQiA9IHBfU2NjYjsKLQkgICAgRlBUX3NzZWwocF9TY2NiLT5TY2NiSU9Qb3J0LHRoaXNDYXJkKTsKLSAgICAgICAgIH0KKwkJCSgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID0gcF9TY2NiOworCQkJRlBUX3NzZWwocF9TY2NiLT5TY2NiSU9Qb3J0LCB0aGlzQ2FyZCk7CisJCX0KIAotICAgICAgZWxzZSB7CisJCWVsc2UgewogCi0JCQlpZihwX1NjY2ItPk9wZXJhdGlvbkNvZGUgPT0gUkVTRVRfQ09NTUFORCkKLQkJCQl7Ci0JCQkJCXBTYXZlU2NjYiA9ICgoUFNDQ0JjYXJkKSBwQ3VyckNhcmQpLT5jdXJyZW50U0NDQjsKLQkJCQkJKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID0gcF9TY2NiOwotCQkJCQlGUFRfcXVldWVTZWxlY3RGYWlsKCZGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0sIHRoaXNDYXJkKTsKLQkJCQkJKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID0gcFNhdmVTY2NiOwotCQkJCX0KLQkJCWVsc2UKLQkJCQl7Ci0JICAgICAgICAgCUZQVF9xdWV1ZUFkZFNjY2IocF9TY2NiLHRoaXNDYXJkKTsKLQkJCQl9Ci0gICAgICAgICB9CisJCQlpZiAocF9TY2NiLT5PcGVyYXRpb25Db2RlID09IFJFU0VUX0NPTU1BTkQpIHsKKwkJCQlwU2F2ZVNjY2IgPQorCQkJCSAgICAoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT4KKwkJCQkgICAgY3VycmVudFNDQ0I7CisJCQkJKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPQorCQkJCSAgICBwX1NjY2I7CisJCQkJRlBUX3F1ZXVlU2VsZWN0RmFpbCgmRlBUX0JMX0NhcmRbdGhpc0NhcmRdLAorCQkJCQkJICAgIHRoaXNDYXJkKTsKKwkJCQkoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5jdXJyZW50U0NDQiA9CisJCQkJICAgIHBTYXZlU2NjYjsKKwkJCX0gZWxzZSB7CisJCQkJRlBUX3F1ZXVlQWRkU2NjYihwX1NjY2IsIHRoaXNDYXJkKTsKKwkJCX0KKwkJfQogCi0KLSAgICAgIE1FTkFCTEVfSU5UKGlvcG9ydCk7Ci0gICAgICB9CisJCU1FTkFCTEVfSU5UKGlvcG9ydCk7CisJfQogCiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKiBGdW5jdGlvbjogU2NjYk1ncl9hYm9ydF9zY2NiCisgKiBGdW5jdGlvbjogRmxhc2hQb2ludF9BYm9ydENDQgogICoKICAqIERlc2NyaXB0aW9uOiBBYm9ydCB0aGUgY29tbWFuZCBwb2ludGVkIHRvIGJ5IHBfU2NjYi4gIFdoZW4gdGhlCiAgKiAgICAgICAgICAgICAgY29tbWFuZCBpcyBjb21wbGV0ZWQgaXQgd2lsbCBiZSByZXR1cm5lZCB2aWEgdGhlCiAgKiAgICAgICAgICAgICAgY2FsbGJhY2sgZnVuY3Rpb24uCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBTY2NiTWdyX2Fib3J0X3NjY2IoVUxPTkcgcEN1cnJDYXJkLCBQU0NDQiBwX1NjY2IpCitzdGF0aWMgaW50IEZsYXNoUG9pbnRfQWJvcnRDQ0IodW5zaWduZWQgbG9uZyBwQ3VyckNhcmQsIHN0cnVjdCBzY2NiICpwX1NjY2IpCiB7Ci0JVUxPTkcgaW9wb3J0OworCXVuc2lnbmVkIGxvbmcgaW9wb3J0OwogCi0JVUNIQVIgdGhpc0NhcmQ7CisJdW5zaWduZWQgY2hhciB0aGlzQ2FyZDsKIAlDQUxMX0JLX0ZOIGNhbGxiYWNrOwotCVVDSEFSIFRJRDsKLQlQU0NDQiBwU2F2ZVNDQ0I7Ci0JUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOworCXVuc2lnbmVkIGNoYXIgVElEOworCXN0cnVjdCBzY2NiICpwU2F2ZVNDQ0I7CisJc3RydWN0IHNjY2JfbWdyX3Rhcl9pbmZvICpjdXJyVGFyX0luZm87CiAKKwlpb3BvcnQgPSAoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5pb1BvcnQ7CiAKLQlpb3BvcnQgPSAoKFBTQ0NCY2FyZCkgcEN1cnJDYXJkKS0+aW9Qb3J0OworCXRoaXNDYXJkID0gKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y2FyZEluZGV4OwogCi0JdGhpc0NhcmQgPSAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5jYXJkSW5kZXg7CisJaWYgKCEoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9wYWdlX2N0cmwpICYgR19JTlRfRElTQUJMRSkpIHsKIAotCWlmICghKFJEX0hBUlBPT04oaW9wb3J0K2hwX3BhZ2VfY3RybCkgJiBHX0lOVF9ESVNBQkxFKSkKLQl7CisJCWlmIChGUFRfcXVldWVGaW5kU2NjYihwX1NjY2IsIHRoaXNDYXJkKSkgewogCi0JCWlmIChGUFRfcXVldWVGaW5kU2NjYihwX1NjY2IsdGhpc0NhcmQpKQotCQl7CisJCQkoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5jbWRDb3VudGVyLS07CiAKLQkJCSgoUFNDQ0JjYXJkKXBDdXJyQ2FyZCktPmNtZENvdW50ZXItLTsKLQotCQkJaWYgKCEoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5jbWRDb3VudGVyKQotCQkJCVdSX0hBUlBPT04oaW9wb3J0K2hwX3NlbWFwaG9yZSwoUkRfSEFSUE9PTihpb3BvcnQraHBfc2VtYXBob3JlKQotCQkJCQkmIChVQ0hBUikofihTQ0NCX01HUl9BQ1RJVkUgfCBUSUNLTEVfTUUpKSApKTsKKwkJCWlmICghKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y21kQ291bnRlcikKKwkJCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX3NlbWFwaG9yZSwKKwkJCQkJICAgKFJEX0hBUlBPT04oaW9wb3J0ICsgaHBfc2VtYXBob3JlKQorCQkJCQkgICAgJiAodW5zaWduZWQKKwkJCQkJICAgICAgIGNoYXIpKH4oU0NDQl9NR1JfQUNUSVZFIHwKKwkJCQkJCSAgICAgICBUSUNLTEVfTUUpKSkpOwogCiAJCQlwX1NjY2ItPlNjY2JTdGF0dXMgPSBTQ0NCX0FCT1JUOwogCQkJY2FsbGJhY2sgPSBwX1NjY2ItPlNjY2JDYWxsYmFjazsKIAkJCWNhbGxiYWNrKHBfU2NjYik7CiAKLQkJCXJldHVybigwKTsKKwkJCXJldHVybiAwOwogCQl9CiAKLQkJZWxzZQotCQl7Ci0JCQlpZiAoKChQU0NDQmNhcmQpcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPT0gcF9TY2NiKQotCQkJeworCQllbHNlIHsKKwkJCWlmICgoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5jdXJyZW50U0NDQiA9PQorCQkJICAgIHBfU2NjYikgewogCQkJCXBfU2NjYi0+U2NjYlN0YXR1cyA9IFNDQ0JfQUJPUlQ7Ci0JCQkJcmV0dXJuKDApOworCQkJCXJldHVybiAwOwogCiAJCQl9CiAKLQkJCWVsc2UKLQkJCXsKKwkJCWVsc2UgewogCiAJCQkJVElEID0gcF9TY2NiLT5UYXJnSUQ7CiAKLQotCQkJCWlmKHBfU2NjYi0+U2NjYl90YWcpCi0JCQkJeworCQkJCWlmIChwX1NjY2ItPlNjY2JfdGFnKSB7CiAJCQkJCU1ESVNBQkxFX0lOVChpb3BvcnQpOwotCQkJCQlpZiAoKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmRpc2NRX1RibFtwX1NjY2ItPlNjY2JfdGFnXT09cF9TY2NiKQotCQkJCQl7CisJCQkJCWlmICgoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT4KKwkJCQkJICAgIGRpc2NRX1RibFtwX1NjY2ItPlNjY2JfdGFnXSA9PQorCQkJCQkgICAgcF9TY2NiKSB7CiAJCQkJCQlwX1NjY2ItPlNjY2JTdGF0dXMgPSBTQ0NCX0FCT1JUOwotCQkJCQkJcF9TY2NiLT5TY2NiX3Njc2lzdGF0ID0gQUJPUlRfU1Q7Ci0JCQkJCQlwX1NjY2ItPlNjY2Jfc2NzaW1zZyA9IFNNQUJPUlRfVEFHOworCQkJCQkJcF9TY2NiLT5TY2NiX3Njc2lzdGF0ID0KKwkJCQkJCSAgICBBQk9SVF9TVDsKKwkJCQkJCXBfU2NjYi0+U2NjYl9zY3NpbXNnID0KKwkJCQkJCSAgICBTTUFCT1JUX1RBRzsKIAotCQkJCQkJaWYoKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID09IE5VTEwpCi0JCQkJCQl7Ci0JCQkJCQkJKChQU0NDQmNhcmQpIHBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID0gcF9TY2NiOwotCQkJCQkJCUZQVF9zc2VsKGlvcG9ydCwgdGhpc0NhcmQpOwotCQkJCQkJfQotCQkJCQkJZWxzZQotCQkJCQkJewotCQkJCQkJCXBTYXZlU0NDQiA9ICgoUFNDQ0JjYXJkKSBwQ3VyckNhcmQpLT5jdXJyZW50U0NDQjsKLQkJCQkJCQkoKFBTQ0NCY2FyZCkgcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPSBwX1NjY2I7Ci0JCQkJCQkJRlBUX3F1ZXVlU2VsZWN0RmFpbCgoUFNDQ0JjYXJkKSBwQ3VyckNhcmQsIHRoaXNDYXJkKTsKLQkJCQkJCQkoKFBTQ0NCY2FyZCkgcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPSBwU2F2ZVNDQ0I7CisJCQkJCQlpZiAoKChzdHJ1Y3Qgc2NjYl9jYXJkICopCisJCQkJCQkgICAgIHBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID09CisJCQkJCQkgICAgTlVMTCkgeworCQkJCQkJCSgoc3RydWN0IHNjY2JfY2FyZCAqKQorCQkJCQkJCSBwQ3VyckNhcmQpLT4KKwkJCQkJY3VycmVudFNDQ0IgPSBwX1NjY2I7CisJCQkJCQkJRlBUX3NzZWwoaW9wb3J0LAorCQkJCQkJCQkgdGhpc0NhcmQpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlwU2F2ZVNDQ0IgPQorCQkJCQkJCSAgICAoKHN0cnVjdCBzY2NiX2NhcmQKKwkJCQkJCQkgICAgICAqKXBDdXJyQ2FyZCktPgorCQkJCQkJCSAgICBjdXJyZW50U0NDQjsKKwkJCQkJCQkoKHN0cnVjdCBzY2NiX2NhcmQgKikKKwkJCQkJCQkgcEN1cnJDYXJkKS0+CisJCQkJCWN1cnJlbnRTQ0NCID0gcF9TY2NiOworCQkJCQkJCUZQVF9xdWV1ZVNlbGVjdEZhaWwoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQsIHRoaXNDYXJkKTsKKwkJCQkJCQkoKHN0cnVjdCBzY2NiX2NhcmQgKikKKwkJCQkJCQkgcEN1cnJDYXJkKS0+CisJCQkJCWN1cnJlbnRTQ0NCID0gcFNhdmVTQ0NCOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJCU1FTkFCTEVfSU5UKGlvcG9ydCk7Ci0JCQkJCXJldHVybigwKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3RoaXNDYXJkXVtwX1NjY2ItPlRhcmdJRF07CisJCQkJCXJldHVybiAwOworCQkJCX0gZWxzZSB7CisJCQkJCWN1cnJUYXJfSW5mbyA9CisJCQkJCSAgICAmRlBUX3NjY2JNZ3JUYmxbdGhpc0NhcmRdW3BfU2NjYi0+CisJCQkJCQkJCSAgICAgIFRhcmdJRF07CiAKLQkJCQkJaWYoRlBUX0JMX0NhcmRbdGhpc0NhcmRdLmRpc2NRX1RibFtjdXJyVGFyX0luZm8tPkx1bkRpc2NRX0lkeFtwX1NjY2ItPkx1bl1dIAotCQkJCQkJCT09IHBfU2NjYikKLQkJCQkJeworCQkJCQlpZiAoRlBUX0JMX0NhcmRbdGhpc0NhcmRdLgorCQkJCQkgICAgZGlzY1FfVGJsW2N1cnJUYXJfSW5mby0+CisJCQkJCQkgICAgICBMdW5EaXNjUV9JZHhbcF9TY2NiLT5MdW5dXQorCQkJCQkgICAgPT0gcF9TY2NiKSB7CiAJCQkJCQlwX1NjY2ItPlNjY2JTdGF0dXMgPSBTQ0NCX0FCT1JUOwotCQkJCQkJcmV0dXJuKDApOworCQkJCQkJcmV0dXJuIDA7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0KIAl9Ci0JcmV0dXJuKC0xKTsKKwlyZXR1cm4gLTE7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCi0gKiBGdW5jdGlvbjogU2NjYk1ncl9teV9pbnQKKyAqIEZ1bmN0aW9uOiBGbGFzaFBvaW50X0ludGVycnVwdFBlbmRpbmcKICAqCiAgKiBEZXNjcmlwdGlvbjogRG8gYSBxdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBwZW5kaW5nCiAgKiAgICAgICAgICAgICAgaW50ZXJydXB0IGZvciB0aGlzIGNhcmQgYW5kIGRpc2FibGUgdGhlIElSUSBQaW4gaWYgc28uCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIFVDSEFSIFNjY2JNZ3JfbXlfaW50KFVMT05HIHBDdXJyQ2FyZCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZsYXNoUG9pbnRfSW50ZXJydXB0UGVuZGluZyh1bnNpZ25lZCBsb25nIHBDdXJyQ2FyZCkKIHsKLSAgIFVMT05HIGlvcG9ydDsKKwl1bnNpZ25lZCBsb25nIGlvcG9ydDsKIAotICAgaW9wb3J0ID0gKChQU0NDQmNhcmQpcEN1cnJDYXJkKS0+aW9Qb3J0OworCWlvcG9ydCA9ICgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmlvUG9ydDsKIAotICAgaWYgKFJEX0hBUlBPT04oaW9wb3J0K2hwX2ludF9zdGF0dXMpICYgSU5UX0FTU0VSVEVEKQotICAgewotICAgICAgcmV0dXJuKDEpOwotICAgfQorCWlmIChSRF9IQVJQT09OKGlvcG9ydCArIGhwX2ludF9zdGF0dXMpICYgSU5UX0FTU0VSVEVEKSB7CisJCXJldHVybiAxOworCX0KIAotICAgZWxzZQorCWVsc2UKIAotICAgICAgcmV0dXJuKDApOworCQlyZXR1cm4gMDsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgotICogRnVuY3Rpb246IFNjY2JNZ3JfaXNyCisgKiBGdW5jdGlvbjogRmxhc2hQb2ludF9IYW5kbGVJbnRlcnJ1cHQKICAqCiAgKiBEZXNjcmlwdGlvbjogVGhpcyBpcyBvdXIgZW50cnkgcG9pbnQgd2hlbiBhbiBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkCiAgKiAgICAgICAgICAgICAgYnkgdGhlIGNhcmQgYW5kIHRoZSB1cHBlciBsZXZlbCBkcml2ZXIgcGFzc2VzIGl0IG9uIHRvCiAgKiAgICAgICAgICAgICAgdXMuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBTY2NiTWdyX2lzcihVTE9ORyBwQ3VyckNhcmQpCitzdGF0aWMgaW50IEZsYXNoUG9pbnRfSGFuZGxlSW50ZXJydXB0KHVuc2lnbmVkIGxvbmcgcEN1cnJDYXJkKQogewotICAgUFNDQ0IgY3VyclNDQ0I7Ci0gICBVQ0hBUiB0aGlzQ2FyZCxyZXN1bHQsYm1fc3RhdHVzLCBibV9pbnRfc3Q7Ci0gICBVU0hPUlQgaHBfaW50OwotICAgVUNIQVIgaSwgdGFyZ2V0OwotICAgVUxPTkcgaW9wb3J0OworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKKwl1bnNpZ25lZCBjaGFyIHRoaXNDYXJkLCByZXN1bHQsIGJtX3N0YXR1cywgYm1faW50X3N0OworCXVuc2lnbmVkIHNob3J0IGhwX2ludDsKKwl1bnNpZ25lZCBjaGFyIGksIHRhcmdldDsKKwl1bnNpZ25lZCBsb25nIGlvcG9ydDsKIAotICAgdGhpc0NhcmQgPSAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5jYXJkSW5kZXg7Ci0gICBpb3BvcnQgPSAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5pb1BvcnQ7CisJdGhpc0NhcmQgPSAoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5jYXJkSW5kZXg7CisJaW9wb3J0ID0gKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+aW9Qb3J0OwogCi0gICBNRElTQUJMRV9JTlQoaW9wb3J0KTsKKwlNRElTQUJMRV9JTlQoaW9wb3J0KTsKIAotICAgaWYgKChibV9pbnRfc3Q9UkRfSEFSUE9PTihpb3BvcnQraHBfaW50X3N0YXR1cykpICYgRVhUX1NUQVRVU19PTikKLQkJYm1fc3RhdHVzID0gUkRfSEFSUE9PTihpb3BvcnQraHBfZXh0X3N0YXR1cykgJiAoVUNIQVIpQkFEX0VYVF9TVEFUVVM7Ci0gICBlbHNlCi0gICAgICBibV9zdGF0dXMgPSAwOworCWlmICgoYm1faW50X3N0ID0gUkRfSEFSUE9PTihpb3BvcnQgKyBocF9pbnRfc3RhdHVzKSkgJiBFWFRfU1RBVFVTX09OKQorCQlibV9zdGF0dXMgPQorCQkgICAgUkRfSEFSUE9PTihpb3BvcnQgKworCQkJICAgICAgIGhwX2V4dF9zdGF0dXMpICYgKHVuc2lnbmVkIGNoYXIpQkFEX0VYVF9TVEFUVVM7CisJZWxzZQorCQlibV9zdGF0dXMgPSAwOwogCi0gICBXUl9IQVJQT09OKGlvcG9ydCtocF9pbnRfbWFzaywgKElOVF9DTURfQ09NUEwgfCBTQ1NJX0lOVEVSUlVQVCkpOworCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfaW50X21hc2ssIChJTlRfQ01EX0NPTVBMIHwgU0NTSV9JTlRFUlJVUFQpKTsKIAotICAgd2hpbGUgKChocF9pbnQgPSBSRFdfSEFSUE9PTigoaW9wb3J0K2hwX2ludHN0YXQpKSAmIEZQVF9kZWZhdWx0X2ludGVuYSkgfAotCSAgYm1fc3RhdHVzKQotICAgICB7CisJd2hpbGUgKChocF9pbnQgPQorCQlSRFdfSEFSUE9PTigoaW9wb3J0ICsKKwkJCSAgICAgaHBfaW50c3RhdCkpICYgRlBUX2RlZmF1bHRfaW50ZW5hKSB8IGJtX3N0YXR1cykgewogCi0gICAgICAgY3VyclNDQ0IgPSAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5jdXJyZW50U0NDQjsKKwkJY3VyclNDQ0IgPSAoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5jdXJyZW50U0NDQjsKIAotICAgICAgaWYgKGhwX2ludCAmIChGSUZPIHwgVElNRU9VVCB8IFJFU0VUIHwgU0NBTV9TRUwpIHx8IGJtX3N0YXR1cykgewotICAgICAgICAgcmVzdWx0ID0gRlBUX1NjY2JNZ3JfYmFkX2lzcihpb3BvcnQsdGhpc0NhcmQsKChQU0NDQmNhcmQpcEN1cnJDYXJkKSxocF9pbnQpOwotICAgICAgICAgV1JXX0hBUlBPT04oKGlvcG9ydCtocF9pbnRzdGF0KSwgKEZJRk8gfCBUSU1FT1VUIHwgUkVTRVQgfCBTQ0FNX1NFTCkpOwotICAgICAgICAgYm1fc3RhdHVzID0gMDsKKwkJaWYgKGhwX2ludCAmIChGSUZPIHwgVElNRU9VVCB8IFJFU0VUIHwgU0NBTV9TRUwpIHx8IGJtX3N0YXR1cykgeworCQkJcmVzdWx0ID0KKwkJCSAgICBGUFRfU2NjYk1ncl9iYWRfaXNyKGlvcG9ydCwgdGhpc0NhcmQsCisJCQkJCQkoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLAorCQkJCQkJaHBfaW50KTsKKwkJCVdSV19IQVJQT09OKChpb3BvcnQgKyBocF9pbnRzdGF0KSwKKwkJCQkgICAgKEZJRk8gfCBUSU1FT1VUIHwgUkVTRVQgfCBTQ0FNX1NFTCkpOworCQkJYm1fc3RhdHVzID0gMDsKIAotICAgICAgICAgaWYgKHJlc3VsdCkgeworCQkJaWYgKHJlc3VsdCkgewogCi0gICAgICAgICAgICBNRU5BQkxFX0lOVChpb3BvcnQpOwotICAgICAgICAgICAgcmV0dXJuKHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9CisJCQkJTUVOQUJMRV9JTlQoaW9wb3J0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQl9CiAKKwkJZWxzZSBpZiAoaHBfaW50ICYgSUNNRF9DT01QKSB7CiAKLSAgICAgIGVsc2UgaWYgKGhwX2ludCAmIElDTURfQ09NUCkgeworCQkJaWYgKCEoaHBfaW50ICYgQlVTX0ZSRUUpKSB7CisJCQkJLyogV2FpdCBmb3IgdGhlIEJ1c0ZyZWUgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IGNvbW1hbmQuICBXZQorCQkJCSAgIG11c3QgYWxzbyBjaGVjayBmb3IgYmVpbmcgcmVzZWxlY3RlZCBzaW5jZSB0aGUgQnVzRnJlZQorCQkJCSAgIG1heSBub3Qgc2hvdyB1cCBpZiBhbm90aGVyIGRldmljZSByZXNlbGVjdHMgdXMgaW4gMS41dXMgb3IKKwkJCQkgICBsZXNzLiAgU1JSIFdlZG5lc2RheSwgMy84LzE5OTUuCisJCQkJICovCisJCQkJd2hpbGUgKCEKKwkJCQkgICAgICAgKFJEV19IQVJQT09OKChpb3BvcnQgKyBocF9pbnRzdGF0KSkgJgorCQkJCQkoQlVTX0ZSRUUgfCBSU0VMKSkpIDsKKwkJCX0KIAotICAgICAgICAgaWYgKCAhKGhwX2ludCAmIEJVU19GUkVFKSApIHsKLSAgICAgICAgICAgIC8qIFdhaXQgZm9yIHRoZSBCdXNGcmVlIGJlZm9yZSBzdGFydGluZyBhIG5ldyBjb21tYW5kLiAgV2UKLSAgICAgICAgICAgICAgIG11c3QgYWxzbyBjaGVjayBmb3IgYmVpbmcgcmVzZWxlY3RlZCBzaW5jZSB0aGUgQnVzRnJlZQotICAgICAgICAgICAgICAgbWF5IG5vdCBzaG93IHVwIGlmIGFub3RoZXIgZGV2aWNlIHJlc2VsZWN0cyB1cyBpbiAxLjV1cyBvcgotICAgICAgICAgICAgICAgbGVzcy4gIFNSUiBXZWRuZXNkYXksIDMvOC8xOTk1LgotCSAgICAgICAgICovCi0JICAgd2hpbGUgKCEoUkRXX0hBUlBPT04oKGlvcG9ydCtocF9pbnRzdGF0KSkgJiAoQlVTX0ZSRUUgfCBSU0VMKSkpIDsKLQkgfQorCQkJaWYgKCgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPgorCQkJICAgIGdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKQogCi0gICAgICAgICBpZiAoKChQU0NDQmNhcmQpcEN1cnJDYXJkKS0+Z2xvYmFsRmxhZ3MgJiBGX0hPU1RfWEZFUl9BQ1QpCi0KLSAgICAgICAgICAgIEZQVF9waGFzZUNoa0ZpZm8oaW9wb3J0LCB0aGlzQ2FyZCk7CisJCQkJRlBUX3BoYXNlQ2hrRmlmbyhpb3BvcnQsIHRoaXNDYXJkKTsKIAogLyogICAgICAgICBXUldfSEFSUE9PTigoaW9wb3J0K2hwX2ludHN0YXQpLAogICAgICAgICAgICAgKEJVU19GUkVFIHwgSUNNRF9DT01QIHwgSVRBUl9ESVNDIHwgWEZFUl9DTlRfMCkpOwogICAgICAgICAgKi8KIAotCQkgV1JXX0hBUlBPT04oKGlvcG9ydCtocF9pbnRzdGF0KSwgQ0xSX0FMTF9JTlRfMSk7CisJCQlXUldfSEFSUE9PTigoaW9wb3J0ICsgaHBfaW50c3RhdCksIENMUl9BTExfSU5UXzEpOwogCi0gICAgICAgICBGUFRfYXV0b0NtZENtcGx0KGlvcG9ydCx0aGlzQ2FyZCk7CisJCQlGUFRfYXV0b0NtZENtcGx0KGlvcG9ydCwgdGhpc0NhcmQpOwogCi0gICAgICAgICB9CisJCX0KIAorCQllbHNlIGlmIChocF9pbnQgJiBJVEFSX0RJU0MpIHsKIAotICAgICAgZWxzZSBpZiAoaHBfaW50ICYgSVRBUl9ESVNDKQotICAgICAgICAgeworCQkJaWYgKCgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPgorCQkJICAgIGdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKSB7CiAKLSAgICAgICAgIGlmICgoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5nbG9iYWxGbGFncyAmIEZfSE9TVF9YRkVSX0FDVCkgeworCQkJCUZQVF9waGFzZUNoa0ZpZm8oaW9wb3J0LCB0aGlzQ2FyZCk7CiAKLSAgICAgICAgICAgIEZQVF9waGFzZUNoa0ZpZm8oaW9wb3J0LCB0aGlzQ2FyZCk7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgaWYgKFJEX0hBUlBPT04oaW9wb3J0K2hwX2dwX3JlZ18xKSA9PSBTTVNBVkVfREFUQV9QVFIpIHsKLQotICAgICAgICAgICAgV1JfSEFSUE9PTihpb3BvcnQraHBfZ3BfcmVnXzEsIDB4MDApOwotICAgICAgICAgICAgY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlIHw9IEZfTk9fREFUQV9ZRVQ7Ci0KLSAgICAgICAgICAgIGN1cnJTQ0NCLT5TY2NiX3NhdmVkQVRDID0gY3VyclNDQ0ItPlNjY2JfQVRDOwotICAgICAgICAgICAgfQotCi0gICAgICAgICBjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IERJU0NPTk5FQ1RfU1Q7Ci0gICAgICAgICBGUFRfcXVldWVEaXNjb25uZWN0KGN1cnJTQ0NCLHRoaXNDYXJkKTsKLQotICAgICAgICAgICAgLyogV2FpdCBmb3IgdGhlIEJ1c0ZyZWUgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IGNvbW1hbmQuICBXZQotICAgICAgICAgICAgICAgbXVzdCBhbHNvIGNoZWNrIGZvciBiZWluZyByZXNlbGVjdGVkIHNpbmNlIHRoZSBCdXNGcmVlCi0gICAgICAgICAgICAgICBtYXkgbm90IHNob3cgdXAgaWYgYW5vdGhlciBkZXZpY2UgcmVzZWxlY3RzIHVzIGluIDEuNXVzIG9yCi0gICAgICAgICAgICAgICBsZXNzLiAgU1JSIFdlZG5lc2RheSwgMy84LzE5OTUuCi0gICAgICAgICAgICAgKi8KLQkgICB3aGlsZSAoIShSRFdfSEFSUE9PTigoaW9wb3J0K2hwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFJTRUwpKSAmJgotCQkgICEoKFJEV19IQVJQT09OKChpb3BvcnQraHBfaW50c3RhdCkpICYgUEhBU0UpICYmCi0JCSAgICBSRF9IQVJQT09OKChpb3BvcnQraHBfc2NzaXNpZykpID09Ci0JCSAgICAoU0NTSV9CU1kgfCBTQ1NJX1JFUSB8IFNDU0lfQ0QgfCBTQ1NJX01TRyB8IFNDU0lfSU9CSVQpKSkgOwotCi0JICAgLyoKLQkgICAgIFRoZSBhZGRpdGlvbmFsIGxvb3AgZXhpdCBjb25kaXRpb24gYWJvdmUgZGV0ZWN0cyBhIHRpbWluZyBwcm9ibGVtCi0JICAgICB3aXRoIHRoZSByZXZpc2lvbiBEL0UgaGFycG9vbiBjaGlwcy4gIFRoZSBjYWxsZXIgc2hvdWxkIHJlc2V0IHRoZQotCSAgICAgaG9zdCBhZGFwdGVyIHRvIHJlY292ZXIgd2hlbiAweEZFIGlzIHJldHVybmVkLgotCSAgICovCi0JICAgaWYgKCEoUkRXX0hBUlBPT04oKGlvcG9ydCtocF9pbnRzdGF0KSkgJiAoQlVTX0ZSRUUgfCBSU0VMKSkpCi0JICAgICB7Ci0JICAgICAgIE1FTkFCTEVfSU5UKGlvcG9ydCk7Ci0JICAgICAgIHJldHVybiAweEZFOwotCSAgICAgfQotCi0gICAgICAgICBXUldfSEFSUE9PTigoaW9wb3J0K2hwX2ludHN0YXQpLCAoQlVTX0ZSRUUgfCBJVEFSX0RJU0MpKTsKLQotCi0gICAgICAgICAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5nbG9iYWxGbGFncyB8PSBGX05FV19TQ0NCX0NNRDsKLQotICAgICAgCX0KLQotCi0gICAgICBlbHNlIGlmIChocF9pbnQgJiBSU0VMKSB7Ci0KLSAgICAgICAgIFdSV19IQVJQT09OKChpb3BvcnQraHBfaW50c3RhdCksIChQUk9HX0hMVCB8IFJTRUwgfCBQSEFTRSB8IEJVU19GUkVFKSk7Ci0KLSAgICAgICAgIGlmIChSRFdfSEFSUE9PTigoaW9wb3J0K2hwX2ludHN0YXQpKSAmIElUQVJfRElTQykKLQkJICAgICAgewotICAgICAgICAgICAgaWYgKCgoUFNDQ0JjYXJkKXBDdXJyQ2FyZCktPmdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKQotCQkJICAgICAgewotICAgICAgICAgICAgICAgRlBUX3BoYXNlQ2hrRmlmbyhpb3BvcnQsIHRoaXNDYXJkKTsKLSAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKFJEX0hBUlBPT04oaW9wb3J0K2hwX2dwX3JlZ18xKSA9PSBTTVNBVkVfREFUQV9QVFIpCi0JCQkgICAgICB7Ci0gICAgICAgICAgICAgICBXUl9IQVJQT09OKGlvcG9ydCtocF9ncF9yZWdfMSwgMHgwMCk7Ci0gICAgICAgICAgICAgICBjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgfD0gRl9OT19EQVRBX1lFVDsKLSAgICAgICAgICAgICAgIGN1cnJTQ0NCLT5TY2NiX3NhdmVkQVRDID0gY3VyclNDQ0ItPlNjY2JfQVRDOwotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBXUldfSEFSUE9PTigoaW9wb3J0K2hwX2ludHN0YXQpLCAoQlVTX0ZSRUUgfCBJVEFSX0RJU0MpKTsKLSAgICAgICAgICAgIGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gRElTQ09OTkVDVF9TVDsKLSAgICAgICAgICAgIEZQVF9xdWV1ZURpc2Nvbm5lY3QoY3VyclNDQ0IsdGhpc0NhcmQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICBGUFRfc3Jlcyhpb3BvcnQsdGhpc0NhcmQsKChQU0NDQmNhcmQpcEN1cnJDYXJkKSk7Ci0gICAgICAgICBGUFRfcGhhc2VEZWNvZGUoaW9wb3J0LHRoaXNDYXJkKTsKLQotICAgICAgICAgfQotCi0KLSAgICAgIGVsc2UgaWYgKChocF9pbnQgJiBJRE9fU1RSVCkgJiYgKCEoaHBfaW50ICYgQlVTX0ZSRUUpKSkKLSAgICAgICAgIHsKLQotICAgICAgICAgICAgV1JXX0hBUlBPT04oKGlvcG9ydCtocF9pbnRzdGF0KSwgKElET19TVFJUIHwgWEZFUl9DTlRfMCkpOwotICAgICAgICAgICAgRlBUX3BoYXNlRGVjb2RlKGlvcG9ydCx0aGlzQ2FyZCk7Ci0KLSAgICAgICAgIH0KLQotCi0gICAgICBlbHNlIGlmICggKGhwX2ludCAmIElVTktXTikgfHwgKGhwX2ludCAmIFBST0dfSExUKSApCi0JCSAgIHsKLQkgCSAgIFdSV19IQVJQT09OKChpb3BvcnQraHBfaW50c3RhdCksIChQSEFTRSB8IElVTktXTiB8IFBST0dfSExUKSk7Ci0JIAkgICBpZiAoKFJEX0hBUlBPT04oaW9wb3J0K2hwX3ByZ21jbnRfMCkgJiAoVUNIQVIpMHgzZik8IChVQ0hBUilTRUxDSEspCi0JICAgIAkJewotCSAgICAJCUZQVF9waGFzZURlY29kZShpb3BvcnQsdGhpc0NhcmQpOwotCSAgICAJCX0KLQkgCSAgIGVsc2UKLQkgICAgCQl7Ci0gICAvKiBIYXJwb29uIHByb2JsZW0gc29tZSBTQ1NJIHRhcmdldCBkZXZpY2UgcmVzcG9uZCB0byBzZWxlY3Rpb24KLSAgIHdpdGggc2hvcnQgQlVTWSBwdWxzZSAoPDQwMG5zKSB0aGlzIHdpbGwgbWFrZSB0aGUgSGFycG9vbiBpcyBub3QgYWJsZQotICAgdG8gbGF0Y2ggdGhlIGNvcnJlY3QgVGFyZ2V0IElEIGludG8gcmVnLiB4NTMuCi0gICBUaGUgd29yayBhcm91bmQgcmVxdWlyZSB0byBjb3JyZWN0IHRoaXMgcmVnLiBCdXQgd2hlbiB3cml0ZSB0byB0aGlzCi0gICByZWcuICgweDUzKSBhbHNvIGluY3JlbWVudCB0aGUgRklGTyB3cml0ZSBhZGRyIHJlZyAoMHg2ZiksIHRodXMgd2UKLSAgIG5lZWQgdG8gcmVhZCB0aGlzIHJlZyBmaXJzdCB0aGVuIHJlc3RvcmUgaXQgbGF0ZXIuIEFmdGVyIHVwZGF0ZSB0byAweDUzICovCi0KLQkgICAgCQlpID0gKFVDSEFSKShSRF9IQVJQT09OKGlvcG9ydCtocF9maWZvd3JpdGUpKTsKLQkgICAgCQl0YXJnZXQgPSAoVUNIQVIpKFJEX0hBUlBPT04oaW9wb3J0K2hwX2dwX3JlZ18zKSk7Ci0JICAgIAkJV1JfSEFSUE9PTihpb3BvcnQraHBfeGZlcl9wYWQsIChVQ0hBUikgSURfVU5MT0NLKTsKLQkgICAgCQlXUl9IQVJQT09OKGlvcG9ydCtocF9zZWxlY3RfaWQsIChVQ0hBUikodGFyZ2V0IHwgdGFyZ2V0PDw0KSk7Ci0JICAgIAkJV1JfSEFSUE9PTihpb3BvcnQraHBfeGZlcl9wYWQsIChVQ0hBUikgMHgwMCk7Ci0JICAgIAkJV1JfSEFSUE9PTihpb3BvcnQraHBfZmlmb3dyaXRlLCBpKTsKLQkgICAgCQlXUl9IQVJQT09OKGlvcG9ydCtocF9hdXRvc3RhcnRfMywgKEFVVE9fSU1NRUQrVEFHX1NUUlQpKTsKLQkgICAgCQl9Ci0JIAkgICB9Ci0KLSAgICAgIGVsc2UgaWYgKGhwX2ludCAmIFhGRVJfQ05UXzApIHsKLQotICAgICAgICAgV1JXX0hBUlBPT04oKGlvcG9ydCtocF9pbnRzdGF0KSwgWEZFUl9DTlRfMCk7Ci0KLSAgICAgICAgIEZQVF9zY2hrZGQoaW9wb3J0LHRoaXNDYXJkKTsKLQotICAgICAgICAgfQotCi0KLSAgICAgIGVsc2UgaWYgKGhwX2ludCAmIEJVU19GUkVFKSB7Ci0KLSAgICAgICAgIFdSV19IQVJQT09OKChpb3BvcnQraHBfaW50c3RhdCksIEJVU19GUkVFKTsKLQotICAgICAgICAJaWYgKCgoUFNDQ0JjYXJkKXBDdXJyQ2FyZCktPmdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKSB7Ci0KLSAgICAgICAgICAgCUZQVF9ob3N0RGF0YVhmZXJBYm9ydChpb3BvcnQsdGhpc0NhcmQsY3VyclNDQ0IpOwotCQkJCX0KLQotICAgICAgICAgRlBUX3BoYXNlQnVzRnJlZShpb3BvcnQsdGhpc0NhcmQpOwogCQkJfQogCisJCQlpZiAoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9ncF9yZWdfMSkgPT0gU01TQVZFX0RBVEFfUFRSKSB7CiAKLSAgICAgIGVsc2UgaWYgKGhwX2ludCAmIElUSUNLTEUpIHsKKwkJCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX2dwX3JlZ18xLCAweDAwKTsKKwkJCQljdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgfD0gRl9OT19EQVRBX1lFVDsKIAotICAgICAgICAgV1JXX0hBUlBPT04oKGlvcG9ydCtocF9pbnRzdGF0KSwgSVRJQ0tMRSk7Ci0gICAgICAgICAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5nbG9iYWxGbGFncyB8PSBGX05FV19TQ0NCX0NNRDsKLSAgICAgICAgIH0KKwkJCQljdXJyU0NDQi0+U2NjYl9zYXZlZEFUQyA9IGN1cnJTQ0NCLT5TY2NiX0FUQzsKKwkJCX0KIAorCQkJY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPSBESVNDT05ORUNUX1NUOworCQkJRlBUX3F1ZXVlRGlzY29ubmVjdChjdXJyU0NDQiwgdGhpc0NhcmQpOwogCisJCQkvKiBXYWl0IGZvciB0aGUgQnVzRnJlZSBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgY29tbWFuZC4gIFdlCisJCQkgICBtdXN0IGFsc28gY2hlY2sgZm9yIGJlaW5nIHJlc2VsZWN0ZWQgc2luY2UgdGhlIEJ1c0ZyZWUKKwkJCSAgIG1heSBub3Qgc2hvdyB1cCBpZiBhbm90aGVyIGRldmljZSByZXNlbGVjdHMgdXMgaW4gMS41dXMgb3IKKwkJCSAgIGxlc3MuICBTUlIgV2VkbmVzZGF5LCAzLzgvMTk5NS4KKwkJCSAqLworCQkJd2hpbGUgKCEKKwkJCSAgICAgICAoUkRXX0hBUlBPT04oKGlvcG9ydCArIGhwX2ludHN0YXQpKSAmCisJCQkJKEJVU19GUkVFIHwgUlNFTCkpCisJCQkgICAgICAgJiYgISgoUkRXX0hBUlBPT04oKGlvcG9ydCArIGhwX2ludHN0YXQpKSAmIFBIQVNFKQorCQkJCSAgICAmJiBSRF9IQVJQT09OKChpb3BvcnQgKyBocF9zY3Npc2lnKSkgPT0KKwkJCQkgICAgKFNDU0lfQlNZIHwgU0NTSV9SRVEgfCBTQ1NJX0NEIHwgU0NTSV9NU0cgfAorCQkJCSAgICAgU0NTSV9JT0JJVCkpKSA7CiAKLSAgICAgIGlmICgoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5nbG9iYWxGbGFncyAmIEZfTkVXX1NDQ0JfQ01EKSB7CisJCQkvKgorCQkJICAgVGhlIGFkZGl0aW9uYWwgbG9vcCBleGl0IGNvbmRpdGlvbiBhYm92ZSBkZXRlY3RzIGEgdGltaW5nIHByb2JsZW0KKwkJCSAgIHdpdGggdGhlIHJldmlzaW9uIEQvRSBoYXJwb29uIGNoaXBzLiAgVGhlIGNhbGxlciBzaG91bGQgcmVzZXQgdGhlCisJCQkgICBob3N0IGFkYXB0ZXIgdG8gcmVjb3ZlciB3aGVuIDB4RkUgaXMgcmV0dXJuZWQuCisJCQkgKi8KKwkJCWlmICghCisJCQkgICAgKFJEV19IQVJQT09OKChpb3BvcnQgKyBocF9pbnRzdGF0KSkgJgorCQkJICAgICAoQlVTX0ZSRUUgfCBSU0VMKSkpIHsKKwkJCQlNRU5BQkxFX0lOVChpb3BvcnQpOworCQkJCXJldHVybiAweEZFOworCQkJfQogCisJCQlXUldfSEFSUE9PTigoaW9wb3J0ICsgaHBfaW50c3RhdCksCisJCQkJICAgIChCVVNfRlJFRSB8IElUQVJfRElTQykpOwogCi0gICAgICAgICAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5nbG9iYWxGbGFncyAmPSB+Rl9ORVdfU0NDQl9DTUQ7CisJCQkoKHN0cnVjdCBzY2NiX2NhcmQgKilwQ3VyckNhcmQpLT5nbG9iYWxGbGFncyB8PQorCQkJICAgIEZfTkVXX1NDQ0JfQ01EOwogCisJCX0KIAotICAgICAgICAgaWYgKCgoUFNDQ0JjYXJkKXBDdXJyQ2FyZCktPmN1cnJlbnRTQ0NCID09IE5VTEwpIHsKKwkJZWxzZSBpZiAoaHBfaW50ICYgUlNFTCkgewogCi0gICAgICAgICAgICBGUFRfcXVldWVTZWFyY2hTZWxlY3QoKChQU0NDQmNhcmQpcEN1cnJDYXJkKSx0aGlzQ2FyZCk7Ci0gICAgICAgICAgICB9CisJCQlXUldfSEFSUE9PTigoaW9wb3J0ICsgaHBfaW50c3RhdCksCisJCQkJICAgIChQUk9HX0hMVCB8IFJTRUwgfCBQSEFTRSB8IEJVU19GUkVFKSk7CiAKLSAgICAgICAgIGlmICgoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5jdXJyZW50U0NDQiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAoKFBTQ0NCY2FyZClwQ3VyckNhcmQpLT5nbG9iYWxGbGFncyAmPSB+Rl9ORVdfU0NDQl9DTUQ7Ci0gICAgICAgICAgICBGUFRfc3NlbChpb3BvcnQsdGhpc0NhcmQpOwotICAgICAgICAgICAgfQorCQkJaWYgKFJEV19IQVJQT09OKChpb3BvcnQgKyBocF9pbnRzdGF0KSkgJiBJVEFSX0RJU0MpIHsKKwkJCQlpZiAoKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+CisJCQkJICAgIGdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKSB7CisJCQkJCUZQVF9waGFzZUNoa0ZpZm8oaW9wb3J0LCB0aGlzQ2FyZCk7CisJCQkJfQogCi0gICAgICAgICBicmVhazsKKwkJCQlpZiAoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9ncF9yZWdfMSkgPT0KKwkJCQkgICAgU01TQVZFX0RBVEFfUFRSKSB7CisJCQkJCVdSX0hBUlBPT04oaW9wb3J0ICsgaHBfZ3BfcmVnXzEsIDB4MDApOworCQkJCQljdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgfD0KKwkJCQkJICAgIEZfTk9fREFUQV9ZRVQ7CisJCQkJCWN1cnJTQ0NCLT5TY2NiX3NhdmVkQVRDID0KKwkJCQkJICAgIGN1cnJTQ0NCLT5TY2NiX0FUQzsKKwkJCQl9CiAKLSAgICAgICAgIH0KKwkJCQlXUldfSEFSUE9PTigoaW9wb3J0ICsgaHBfaW50c3RhdCksCisJCQkJCSAgICAoQlVTX0ZSRUUgfCBJVEFSX0RJU0MpKTsKKwkJCQljdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IERJU0NPTk5FQ1RfU1Q7CisJCQkJRlBUX3F1ZXVlRGlzY29ubmVjdChjdXJyU0NDQiwgdGhpc0NhcmQpOworCQkJfQogCi0gICAgICB9ICAvKmVuZCB3aGlsZSAqLworCQkJRlBUX3NyZXMoaW9wb3J0LCB0aGlzQ2FyZCwKKwkJCQkgKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKSk7CisJCQlGUFRfcGhhc2VEZWNvZGUoaW9wb3J0LCB0aGlzQ2FyZCk7CiAKLSAgIE1FTkFCTEVfSU5UKGlvcG9ydCk7CisJCX0KIAotICAgcmV0dXJuKDApOworCQllbHNlIGlmICgoaHBfaW50ICYgSURPX1NUUlQpICYmICghKGhwX2ludCAmIEJVU19GUkVFKSkpIHsKKworCQkJV1JXX0hBUlBPT04oKGlvcG9ydCArIGhwX2ludHN0YXQpLAorCQkJCSAgICAoSURPX1NUUlQgfCBYRkVSX0NOVF8wKSk7CisJCQlGUFRfcGhhc2VEZWNvZGUoaW9wb3J0LCB0aGlzQ2FyZCk7CisKKwkJfQorCisJCWVsc2UgaWYgKChocF9pbnQgJiBJVU5LV04pIHx8IChocF9pbnQgJiBQUk9HX0hMVCkpIHsKKwkJCVdSV19IQVJQT09OKChpb3BvcnQgKyBocF9pbnRzdGF0KSwKKwkJCQkgICAgKFBIQVNFIHwgSVVOS1dOIHwgUFJPR19ITFQpKTsKKwkJCWlmICgoUkRfSEFSUE9PTihpb3BvcnQgKyBocF9wcmdtY250XzApICYgKHVuc2lnbmVkIGNoYXIpCisJCQkgICAgIDB4M2YpIDwgKHVuc2lnbmVkIGNoYXIpU0VMQ0hLKSB7CisJCQkJRlBUX3BoYXNlRGVjb2RlKGlvcG9ydCwgdGhpc0NhcmQpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBIYXJwb29uIHByb2JsZW0gc29tZSBTQ1NJIHRhcmdldCBkZXZpY2UgcmVzcG9uZCB0byBzZWxlY3Rpb24KKwkJCQkgICB3aXRoIHNob3J0IEJVU1kgcHVsc2UgKDw0MDBucykgdGhpcyB3aWxsIG1ha2UgdGhlIEhhcnBvb24gaXMgbm90IGFibGUKKwkJCQkgICB0byBsYXRjaCB0aGUgY29ycmVjdCBUYXJnZXQgSUQgaW50byByZWcuIHg1My4KKwkJCQkgICBUaGUgd29yayBhcm91bmQgcmVxdWlyZSB0byBjb3JyZWN0IHRoaXMgcmVnLiBCdXQgd2hlbiB3cml0ZSB0byB0aGlzCisJCQkJICAgcmVnLiAoMHg1MykgYWxzbyBpbmNyZW1lbnQgdGhlIEZJRk8gd3JpdGUgYWRkciByZWcgKDB4NmYpLCB0aHVzIHdlCisJCQkJICAgbmVlZCB0byByZWFkIHRoaXMgcmVnIGZpcnN0IHRoZW4gcmVzdG9yZSBpdCBsYXRlci4gQWZ0ZXIgdXBkYXRlIHRvIDB4NTMgKi8KKworCQkJCWkgPSAodW5zaWduZWQKKwkJCQkgICAgIGNoYXIpKFJEX0hBUlBPT04oaW9wb3J0ICsgaHBfZmlmb3dyaXRlKSk7CisJCQkJdGFyZ2V0ID0KKwkJCQkgICAgKHVuc2lnbmVkCisJCQkJICAgICBjaGFyKShSRF9IQVJQT09OKGlvcG9ydCArIGhwX2dwX3JlZ18zKSk7CisJCQkJV1JfSEFSUE9PTihpb3BvcnQgKyBocF94ZmVyX3BhZCwKKwkJCQkJICAgKHVuc2lnbmVkIGNoYXIpSURfVU5MT0NLKTsKKwkJCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX3NlbGVjdF9pZCwKKwkJCQkJICAgKHVuc2lnbmVkIGNoYXIpKHRhcmdldCB8IHRhcmdldCA8PAorCQkJCQkJCSAgIDQpKTsKKwkJCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX3hmZXJfcGFkLAorCQkJCQkgICAodW5zaWduZWQgY2hhcikweDAwKTsKKwkJCQlXUl9IQVJQT09OKGlvcG9ydCArIGhwX2ZpZm93cml0ZSwgaSk7CisJCQkJV1JfSEFSUE9PTihpb3BvcnQgKyBocF9hdXRvc3RhcnRfMywKKwkJCQkJICAgKEFVVE9fSU1NRUQgKyBUQUdfU1RSVCkpOworCQkJfQorCQl9CisKKwkJZWxzZSBpZiAoaHBfaW50ICYgWEZFUl9DTlRfMCkgeworCisJCQlXUldfSEFSUE9PTigoaW9wb3J0ICsgaHBfaW50c3RhdCksIFhGRVJfQ05UXzApOworCisJCQlGUFRfc2Noa2RkKGlvcG9ydCwgdGhpc0NhcmQpOworCisJCX0KKworCQllbHNlIGlmIChocF9pbnQgJiBCVVNfRlJFRSkgeworCisJCQlXUldfSEFSUE9PTigoaW9wb3J0ICsgaHBfaW50c3RhdCksIEJVU19GUkVFKTsKKworCQkJaWYgKCgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPgorCQkJICAgIGdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKSB7CisKKwkJCQlGUFRfaG9zdERhdGFYZmVyQWJvcnQoaW9wb3J0LCB0aGlzQ2FyZCwKKwkJCQkJCSAgICAgIGN1cnJTQ0NCKTsKKwkJCX0KKworCQkJRlBUX3BoYXNlQnVzRnJlZShpb3BvcnQsIHRoaXNDYXJkKTsKKwkJfQorCisJCWVsc2UgaWYgKGhwX2ludCAmIElUSUNLTEUpIHsKKworCQkJV1JXX0hBUlBPT04oKGlvcG9ydCArIGhwX2ludHN0YXQpLCBJVElDS0xFKTsKKwkJCSgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmdsb2JhbEZsYWdzIHw9CisJCQkgICAgRl9ORVdfU0NDQl9DTUQ7CisJCX0KKworCQlpZiAoKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+CisJCSAgICBnbG9iYWxGbGFncyAmIEZfTkVXX1NDQ0JfQ01EKSB7CisKKwkJCSgoc3RydWN0IHNjY2JfY2FyZCAqKXBDdXJyQ2FyZCktPmdsb2JhbEZsYWdzICY9CisJCQkgICAgfkZfTkVXX1NDQ0JfQ01EOworCisJCQlpZiAoKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgPT0KKwkJCSAgICBOVUxMKSB7CisKKwkJCQlGUFRfcXVldWVTZWFyY2hTZWxlY3QoKChzdHJ1Y3Qgc2NjYl9jYXJkICopCisJCQkJCQkgICAgICAgcEN1cnJDYXJkKSwgdGhpc0NhcmQpOworCQkJfQorCisJCQlpZiAoKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Y3VycmVudFNDQ0IgIT0KKwkJCSAgICBOVUxMKSB7CisJCQkJKChzdHJ1Y3Qgc2NjYl9jYXJkICopcEN1cnJDYXJkKS0+Z2xvYmFsRmxhZ3MgJj0KKwkJCQkgICAgfkZfTkVXX1NDQ0JfQ01EOworCQkJCUZQVF9zc2VsKGlvcG9ydCwgdGhpc0NhcmQpOworCQkJfQorCisJCQlicmVhazsKKworCQl9CisKKwl9CQkJLyplbmQgd2hpbGUgKi8KKworCU1FTkFCTEVfSU5UKGlvcG9ydCk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1MjksMTUwICsyMDEwLDE0OSBAQAogICogICAgICAgICAgICAgIHByb2Nlc3NpbmcgdGltZS4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgVUNIQVIgRlBUX1NjY2JNZ3JfYmFkX2lzcihVTE9ORyBwX3BvcnQsIFVDSEFSIHBfY2FyZCwKLQkJCQkgUFNDQ0JjYXJkIHBDdXJyQ2FyZCwgVVNIT1JUIHBfaW50KQorc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX1NjY2JNZ3JfYmFkX2lzcih1bnNpZ25lZCBsb25nIHBfcG9ydCwKKwkJCQkJIHVuc2lnbmVkIGNoYXIgcF9jYXJkLAorCQkJCQkgc3RydWN0IHNjY2JfY2FyZCAqcEN1cnJDYXJkLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgcF9pbnQpCiB7Ci0gICBVQ0hBUiB0ZW1wLCBTY2FtRmxnOwotICAgUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOwotICAgUE5WUmFtSW5mbyBwQ3Vyck52UmFtOworCXVuc2lnbmVkIGNoYXIgdGVtcCwgU2NhbUZsZzsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKKwlzdHJ1Y3QgbnZyYW1faW5mbyAqcEN1cnJOdlJhbTsKIAorCWlmIChSRF9IQVJQT09OKHBfcG9ydCArIGhwX2V4dF9zdGF0dXMpICYKKwkgICAgKEJNX0ZPUkNFX09GRiB8IFBDSV9ERVZfVE1PVVQgfCBCTV9QQVJJVFlfRVJSIHwgUElPX09WRVJSVU4pKSB7CiAKLSAgIGlmIChSRF9IQVJQT09OKHBfcG9ydCtocF9leHRfc3RhdHVzKSAmCi0gICAgICAgICAoQk1fRk9SQ0VfT0ZGIHwgUENJX0RFVl9UTU9VVCB8IEJNX1BBUklUWV9FUlIgfCBQSU9fT1ZFUlJVTikgKQotICAgICAgeworCQlpZiAocEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfSE9TVF9YRkVSX0FDVCkgewogCi0gICAgICBpZiAocEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfSE9TVF9YRkVSX0FDVCkKLSAgICAgICAgIHsKKwkJCUZQVF9ob3N0RGF0YVhmZXJBYm9ydChwX3BvcnQsIHBfY2FyZCwKKwkJCQkJICAgICAgcEN1cnJDYXJkLT5jdXJyZW50U0NDQik7CisJCX0KIAotICAgICAgICAgRlBUX2hvc3REYXRhWGZlckFib3J0KHBfcG9ydCxwX2NhcmQsIHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IpOwotICAgICAgICAgfQorCQlpZiAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9wY2lfc3RhdF9jZmcpICYgUkVDX01BU1RFUl9BQk9SVCkKKwkJeworCQkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wY2lfc3RhdF9jZmcsCisJCQkJICAgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfcGNpX3N0YXRfY2ZnKSAmCisJCQkJICAgIH5SRUNfTUFTVEVSX0FCT1JUKSk7CiAKLSAgICAgIGlmIChSRF9IQVJQT09OKHBfcG9ydCtocF9wY2lfc3RhdF9jZmcpICYgUkVDX01BU1RFUl9BQk9SVCkKKwkJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfaG9zdF9ibGtfY250LCAweDAwKTsKIAotICAgICAgICAgewotICAgICAgICAgV1JfSEFSUE9PTihwX3BvcnQraHBfcGNpX3N0YXRfY2ZnLAotICAgICAgICAgICAgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3BjaV9zdGF0X2NmZykgJiB+UkVDX01BU1RFUl9BQk9SVCkpOworCQl9CiAKLSAgICAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2hvc3RfYmxrX2NudCwgMHgwMCk7CisJCWlmIChwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCICE9IE5VTEwpIHsKIAotICAgICAgICAgfQorCQkJaWYgKCFwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLT5Ib3N0U3RhdHVzKQorCQkJCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0ItPkhvc3RTdGF0dXMgPQorCQkJCSAgICBTQ0NCX0JNX0VSUjsKIAotICAgICAgaWYgKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgIT0gTlVMTCkKLSAgICAgICAgIHsKKwkJCUZQVF9zeGZycChwX3BvcnQsIHBfY2FyZCk7CiAKLSAgICAgICAgIGlmICghcEN1cnJDYXJkLT5jdXJyZW50U0NDQi0+SG9zdFN0YXR1cykKLSAgICAgICAgICAgIHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX0JNX0VSUjsKKwkJCXRlbXAgPSAodW5zaWduZWQgY2hhcikoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsKSAmCisJCQkJCSAgICAgICAoRVhUX0FSQl9BQ0sgfCBTQ1NJX1RFUk1fRU5BX0gpKTsKKwkJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwKKwkJCQkgICAoKHVuc2lnbmVkIGNoYXIpdGVtcCB8IFNFRV9NUyB8IFNFRV9DUykpOworCQkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCB0ZW1wKTsKIAotICAgICAgICAgRlBUX3N4ZnJwKHBfcG9ydCxwX2NhcmQpOworCQkJaWYgKCEKKwkJCSAgICAoUkRXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpKSAmCisJCQkgICAgIChCVVNfRlJFRSB8IFJFU0VUKSkpIHsKKwkJCQlGUFRfcGhhc2VEZWNvZGUocF9wb3J0LCBwX2NhcmQpOworCQkJfQorCQl9CisJfQogCi0JICAgICB0ZW1wID0gKFVDSEFSKShSRF9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsKSAmCi0JCQkJCQkJKEVYVF9BUkJfQUNLIHwgU0NTSV9URVJNX0VOQV9IKSk7Ci0gICAgICAJV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgKChVQ0hBUil0ZW1wIHwgU0VFX01TIHwgU0VFX0NTKSk7Ci0gICAgICAgICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCB0ZW1wKTsKKwllbHNlIGlmIChwX2ludCAmIFJFU0VUKSB7CiAKLSAgICAgICAgIGlmICghKFJEV19IQVJQT09OKChwX3BvcnQraHBfaW50c3RhdCkpICYgKEJVU19GUkVFIHwgUkVTRVQpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIEZQVF9waGFzZURlY29kZShwX3BvcnQscF9jYXJkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KLSAgICAgIH0KKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9jbGtjdHJsXzAsIENMS0NUUkxfREVGQVVMVCk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc3lzX2N0cmwsIDB4MDApOworCQlpZiAocEN1cnJDYXJkLT5jdXJyZW50U0NDQiAhPSBOVUxMKSB7CiAKKwkJCWlmIChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKQogCi0gICBlbHNlIGlmIChwX2ludCAmIFJFU0VUKQotICAgICAgICAgeworCQkJCUZQVF9ob3N0RGF0YVhmZXJBYm9ydChwX3BvcnQsIHBfY2FyZCwKKwkJCQkJCSAgICAgIHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IpOworCQl9CiAKLQkJCQlXUl9IQVJQT09OKHBfcG9ydCtocF9jbGtjdHJsXzAsIENMS0NUUkxfREVGQVVMVCk7Ci0JCQkJV1JfSEFSUE9PTihwX3BvcnQraHBfc3lzX2N0cmwsIDB4MDApOwotICAgICAgICAgICBpZiAocEN1cnJDYXJkLT5jdXJyZW50U0NDQiAhPSBOVUxMKSB7CisJCURJU0FCTEVfQVVUTyhwX3BvcnQpOwogCi0gICAgICAgICAgICAgICBpZiAocEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfSE9TVF9YRkVSX0FDVCkKKwkJRlBUX3NyZXNiKHBfcG9ydCwgcF9jYXJkKTsKIAotICAgICAgICAgICAgICAgRlBUX2hvc3REYXRhWGZlckFib3J0KHBfcG9ydCxwX2NhcmQsIHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IpOwotICAgICAgICAgICAgICAgfQorCQl3aGlsZSAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpY3RybF8wKSAmIFNDU0lfUlNUKSB7CisJCX0KIAorCQlwQ3Vyck52UmFtID0gcEN1cnJDYXJkLT5wTnZSYW1JbmZvOworCQlpZiAocEN1cnJOdlJhbSkgeworCQkJU2NhbUZsZyA9IHBDdXJyTnZSYW0tPm5pU2NhbUNvbmY7CisJCX0gZWxzZSB7CisJCQlTY2FtRmxnID0KKwkJCSAgICAodW5zaWduZWQgY2hhcilGUFRfdXRpbEVFUmVhZChwX3BvcnQsCisJCQkJCQkJICBTQ0FNX0NPTkZJRyAvIDIpOworCQl9CiAKLSAgICAgICAgICAgRElTQUJMRV9BVVRPKHBfcG9ydCk7CisJCUZQVF9YYm93SW5pdChwX3BvcnQsIFNjYW1GbGcpOwogCi0gICAgICAgICAgIEZQVF9zcmVzYihwX3BvcnQscF9jYXJkKTsKKwkJRlBUX3NjaW5pKHBfY2FyZCwgcEN1cnJDYXJkLT5vdXJJZCwgMCk7CiAKLSAgICAgICAgICAgd2hpbGUoUkRfSEFSUE9PTihwX3BvcnQraHBfc2NzaWN0cmxfMCkgJiBTQ1NJX1JTVCkge30KKwkJcmV0dXJuIDB4RkY7CisJfQogCi0JCQkJcEN1cnJOdlJhbSA9IHBDdXJyQ2FyZC0+cE52UmFtSW5mbzsKLQkJCQlpZihwQ3Vyck52UmFtKXsKLQkJCQkJU2NhbUZsZyA9IHBDdXJyTnZSYW0tPm5pU2NhbUNvbmY7Ci0JCQkJfQotCQkJCWVsc2V7Ci0JCQkJICAgU2NhbUZsZyA9IChVQ0hBUikgRlBUX3V0aWxFRVJlYWQocF9wb3J0LCBTQ0FNX0NPTkZJRy8yKTsKLQkJCQl9CisJZWxzZSBpZiAocF9pbnQgJiBGSUZPKSB7CiAKLSAgICAgICAgICAgRlBUX1hib3dJbml0KHBfcG9ydCwgU2NhbUZsZyk7CisJCVdSV19IQVJQT09OKChwX3BvcnQgKyBocF9pbnRzdGF0KSwgRklGTyk7CiAKLSAgICAgICAgICAgICAgIEZQVF9zY2luaShwX2NhcmQsIHBDdXJyQ2FyZC0+b3VySWQsIDApOworCQlpZiAocEN1cnJDYXJkLT5jdXJyZW50U0NDQiAhPSBOVUxMKQorCQkJRlBUX3N4ZnJwKHBfcG9ydCwgcF9jYXJkKTsKKwl9CiAKLSAgICAgICAgICAgcmV0dXJuKDB4RkYpOwotICAgICAgICAgfQorCWVsc2UgaWYgKHBfaW50ICYgVElNRU9VVCkgewogCisJCURJU0FCTEVfQVVUTyhwX3BvcnQpOwogCi0gICBlbHNlIGlmIChwX2ludCAmIEZJRk8pIHsKKwkJV1JXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpLAorCQkJICAgIChQUk9HX0hMVCB8IFRJTUVPVVQgfCBTRUwgfCBCVVNfRlJFRSB8IFBIQVNFIHwKKwkJCSAgICAgSVVOS1dOKSk7CiAKLSAgICAgIFdSV19IQVJQT09OKChwX3BvcnQraHBfaW50c3RhdCksIEZJRk8pOworCQlwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9TRUxFQ1RJT05fVElNRU9VVDsKIAotICAgICAgaWYgKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgIT0gTlVMTCkKLSAgICAgICAgIEZQVF9zeGZycChwX3BvcnQscF9jYXJkKTsKLSAgICAgIH0KLQotICAgZWxzZSBpZiAocF9pbnQgJiBUSU1FT1VUKQotICAgICAgewotCi0gICAgICBESVNBQkxFX0FVVE8ocF9wb3J0KTsKLQotICAgICAgV1JXX0hBUlBPT04oKHBfcG9ydCtocF9pbnRzdGF0KSwKLQkJICAoUFJPR19ITFQgfCBUSU1FT1VUIHwgU0VMIHxCVVNfRlJFRSB8IFBIQVNFIHwgSVVOS1dOKSk7Ci0KLSAgICAgIHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX1NFTEVDVElPTl9USU1FT1VUOwotCi0KLQkJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bcEN1cnJDYXJkLT5jdXJyZW50U0NDQi0+VGFyZ0lEXTsKLQkJaWYoKHBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYKLQkJCSgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkKLQkgICAgICBjdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbcEN1cnJDYXJkLT5jdXJyZW50U0NDQi0+THVuXSA9IDA7CisJCWN1cnJUYXJfSW5mbyA9CisJCSAgICAmRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLT5UYXJnSURdOworCQlpZiAoKHBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykKKwkJICAgICYmICgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0KKwkJCVRBR19RX1RSWUlORykpCisJCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbcEN1cnJDYXJkLT5jdXJyZW50U0NDQi0+THVuXSA9CisJCQkgICAgMDsKIAkJZWxzZQotCSAgICAgIGN1cnJUYXJfSW5mby0+VGFyTFVOQnVzeVswXSA9IDA7CisJCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbMF0gPSAwOwogCisJCWlmIChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spIHsKKwkJCWN1cnJUYXJfSW5mby0+VGFyU3luY0N0cmwgPSAwOworCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJj0gflRBUl9TWU5DX01BU0s7CisJCX0KIAotICAgICAgaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1NZTkNfTUFTSykKLSAgICAgICAgIHsKLQkgICAgICAgY3VyclRhcl9JbmZvLT5UYXJTeW5jQ3RybCA9IDA7Ci0gICAgICAgICBjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmPSB+VEFSX1NZTkNfTUFTSzsKLSAgICAgICAgIH0KKwkJaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkgeworCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJj0gflRBUl9XSURFX01BU0s7CisJCX0KIAotICAgICAgaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkKLSAgICAgICAgIHsKLSAgICAgICAgIGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICY9IH5UQVJfV0lERV9NQVNLOwotICAgICAgICAgfQorCQlGUFRfc3NzeW5jdihwX3BvcnQsIHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0ItPlRhcmdJRCwgTkFSUk9XX1NDU0ksCisJCQkgICAgY3VyclRhcl9JbmZvKTsKIAotICAgICAgRlBUX3Nzc3luY3YocF9wb3J0LCBwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLT5UYXJnSUQsIE5BUlJPV19TQ1NJLGN1cnJUYXJfSW5mbyk7CisJCUZQVF9xdWV1ZUNtZENvbXBsZXRlKHBDdXJyQ2FyZCwgcEN1cnJDYXJkLT5jdXJyZW50U0NDQiwgcF9jYXJkKTsKIAotICAgICAgRlBUX3F1ZXVlQ21kQ29tcGxldGUocEN1cnJDYXJkLCBwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLCBwX2NhcmQpOworCX0KIAotICAgICAgfQorCWVsc2UgaWYgKHBfaW50ICYgU0NBTV9TRUwpIHsKIAotICAgZWxzZSBpZiAocF9pbnQgJiBTQ0FNX1NFTCkKLSAgICAgIHsKKwkJRlBUX3NjYXJiKHBfcG9ydCwgTEVWRUwyX1RBUik7CisJCUZQVF9zY3NlbChwX3BvcnQpOworCQlGUFRfc2Nhc2lkKHBfY2FyZCwgcF9wb3J0KTsKIAotICAgICAgRlBUX3NjYXJiKHBfcG9ydCxMRVZFTDJfVEFSKTsKLSAgICAgIEZQVF9zY3NlbChwX3BvcnQpOwotICAgICAgRlBUX3NjYXNpZChwX2NhcmQsIHBfcG9ydCk7CisJCUZQVF9zY2J1c2YocF9wb3J0KTsKIAotICAgICAgRlBUX3NjYnVzZihwX3BvcnQpOworCQlXUldfSEFSUE9PTigocF9wb3J0ICsgaHBfaW50c3RhdCksIFNDQU1fU0VMKTsKKwl9CiAKLSAgICAgIFdSV19IQVJQT09OKChwX3BvcnQraHBfaW50c3RhdCksIFNDQU1fU0VMKTsKLSAgICAgIH0KLQotICAgcmV0dXJuKDB4MDApOworCXJldHVybiAweDAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IFNjY2JNZ3JUYWJsZUluaXQKQEAgLTI2ODMsMjEgKzIxNjMsMTkgQEAKIAogc3RhdGljIHZvaWQgRlBUX1NjY2JNZ3JUYWJsZUluaXRBbGwoKQogewotICAgVUNIQVIgdGhpc0NhcmQ7CisJdW5zaWduZWQgY2hhciB0aGlzQ2FyZDsKIAotICAgZm9yICh0aGlzQ2FyZCA9IDA7IHRoaXNDYXJkIDwgTUFYX0NBUkRTOyB0aGlzQ2FyZCsrKQotICAgICAgewotICAgICAgRlBUX1NjY2JNZ3JUYWJsZUluaXRDYXJkKCZGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0sdGhpc0NhcmQpOworCWZvciAodGhpc0NhcmQgPSAwOyB0aGlzQ2FyZCA8IE1BWF9DQVJEUzsgdGhpc0NhcmQrKykgeworCQlGUFRfU2NjYk1nclRhYmxlSW5pdENhcmQoJkZQVF9CTF9DYXJkW3RoaXNDYXJkXSwgdGhpc0NhcmQpOwogCi0gICAgICBGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0uaW9Qb3J0ICAgICAgPSAweDAwOwotICAgICAgRlBUX0JMX0NhcmRbdGhpc0NhcmRdLmNhcmRJbmZvICAgID0gTlVMTDsKLSAgICAgIEZQVF9CTF9DYXJkW3RoaXNDYXJkXS5jYXJkSW5kZXggICA9IDB4RkY7Ci0gICAgICBGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0ub3VySWQgICAgICAgPSAweDAwOwotCQlGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0ucE52UmFtSW5mbwk9IE5VTEw7Ci0gICAgICB9CisJCUZQVF9CTF9DYXJkW3RoaXNDYXJkXS5pb1BvcnQgPSAweDAwOworCQlGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0uY2FyZEluZm8gPSBOVUxMOworCQlGUFRfQkxfQ2FyZFt0aGlzQ2FyZF0uY2FyZEluZGV4ID0gMHhGRjsKKwkJRlBUX0JMX0NhcmRbdGhpc0NhcmRdLm91cklkID0gMHgwMDsKKwkJRlBUX0JMX0NhcmRbdGhpc0NhcmRdLnBOdlJhbUluZm8gPSBOVUxMOworCX0KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBTY2NiTWdyVGFibGVJbml0CkBAIC0yNzA2LDMzICsyMTg0LDMwIEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfU2NjYk1nclRhYmxlSW5pdENhcmQoUFNDQ0JjYXJkIHBDdXJyQ2FyZCwgVUNIQVIgcF9jYXJkKQorc3RhdGljIHZvaWQgRlBUX1NjY2JNZ3JUYWJsZUluaXRDYXJkKHN0cnVjdCBzY2NiX2NhcmQgKnBDdXJyQ2FyZCwKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgcF9jYXJkKQogewotICAgVUNIQVIgc2NzaUlELCBxdGFnOworCXVuc2lnbmVkIGNoYXIgc2NzaUlELCBxdGFnOwogCi0JZm9yIChxdGFnID0gMDsgcXRhZyA8IFFVRVVFX0RFUFRIOyBxdGFnKyspCi0JeworCWZvciAocXRhZyA9IDA7IHF0YWcgPCBRVUVVRV9ERVBUSDsgcXRhZysrKSB7CiAJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddID0gTlVMTDsKIAl9CiAKLSAgIGZvciAoc2NzaUlEID0gMDsgc2NzaUlEIDwgTUFYX1NDU0lfVEFSOyBzY3NpSUQrKykKLSAgICAgIHsKLSAgICAgIEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bc2NzaUlEXS5UYXJTdGF0dXMgPSAwOwotICAgICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtzY3NpSURdLlRhckVFVmFsdWUgPSAwOwotICAgICAgRlBUX1NjY2JNZ3JUYWJsZUluaXRUYXJnZXQocF9jYXJkLCBzY3NpSUQpOwotICAgICAgfQorCWZvciAoc2NzaUlEID0gMDsgc2NzaUlEIDwgTUFYX1NDU0lfVEFSOyBzY3NpSUQrKykgeworCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Njc2lJRF0uVGFyU3RhdHVzID0gMDsKKwkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtzY3NpSURdLlRhckVFVmFsdWUgPSAwOworCQlGUFRfU2NjYk1nclRhYmxlSW5pdFRhcmdldChwX2NhcmQsIHNjc2lJRCk7CisJfQogCi0gICBwQ3VyckNhcmQtPnNjYW5JbmRleCA9IDB4MDA7Ci0gICBwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCID0gTlVMTDsKLSAgIHBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgPSAweDAwOwotICAgcEN1cnJDYXJkLT5jbWRDb3VudGVyICA9IDB4MDA7CisJcEN1cnJDYXJkLT5zY2FuSW5kZXggPSAweDAwOworCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgPSBOVUxMOworCXBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgPSAweDAwOworCXBDdXJyQ2FyZC0+Y21kQ291bnRlciA9IDB4MDA7CiAJcEN1cnJDYXJkLT50YWdRX0xzdCA9IDB4MDE7Ci0JcEN1cnJDYXJkLT5kaXNjUUNvdW50ID0gMDsgCi0KKwlwQ3VyckNhcmQtPmRpc2NRQ291bnQgPSAwOwogCiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogU2NjYk1nclRhYmxlSW5pdApAQCAtMjc0MSwxMSArMjIxNiwxMiBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX1NjY2JNZ3JUYWJsZUluaXRUYXJnZXQoVUNIQVIgcF9jYXJkLCBVQ0hBUiB0YXJnZXQpCitzdGF0aWMgdm9pZCBGUFRfU2NjYk1nclRhYmxlSW5pdFRhcmdldCh1bnNpZ25lZCBjaGFyIHBfY2FyZCwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciB0YXJnZXQpCiB7CiAKLQlVQ0hBUiBsdW4sIHF0YWc7Ci0JUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOworCXVuc2lnbmVkIGNoYXIgbHVuLCBxdGFnOworCXN0cnVjdCBzY2NiX21ncl90YXJfaW5mbyAqY3VyclRhcl9JbmZvOwogCiAJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bdGFyZ2V0XTsKIApAQCAtMjc1NywxOSArMjIzMywxNSBAQAogCWN1cnJUYXJfSW5mby0+VGFyVGFnUV9DbnQgPSAwOwogCWN1cnJUYXJfSW5mby0+VGFyTFVOX0NBID0gMDsKIAotCi0JZm9yIChsdW4gPSAwOyBsdW4gPCBNQVhfTFVOOyBsdW4rKykKLQl7CisJZm9yIChsdW4gPSAwOyBsdW4gPCBNQVhfTFVOOyBsdW4rKykgewogCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbbHVuXSA9IDA7CiAJCWN1cnJUYXJfSW5mby0+THVuRGlzY1FfSWR4W2x1bl0gPSAwOwogCX0KIAotCWZvciAocXRhZyA9IDA7IHF0YWcgPCBRVUVVRV9ERVBUSDsgcXRhZysrKQotCXsKLQkJaWYoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbcXRhZ10gIT0gTlVMTCkKLQkJewotCQkJaWYoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbcXRhZ10tPlRhcmdJRCA9PSB0YXJnZXQpCi0JCQl7CisJZm9yIChxdGFnID0gMDsgcXRhZyA8IFFVRVVFX0RFUFRIOyBxdGFnKyspIHsKKwkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddICE9IE5VTEwpIHsKKwkJCWlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtxdGFnXS0+VGFyZ0lEID09CisJCQkgICAgdGFyZ2V0KSB7CiAJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbcXRhZ10gPSBOVUxMOwogCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudC0tOwogCQkJfQpAQCAtMjc3Nyw3ICsyMjQ5LDYgQEAKIAl9CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogc2ZldG0KQEAgLTI3ODcsNzEgKzIyNTgsNjYgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBVQ0hBUiBGUFRfc2ZtKFVMT05HIHBvcnQsIFBTQ0NCIHBDdXJyU0NDQikKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZQVF9zZm0odW5zaWduZWQgbG9uZyBwb3J0LCBzdHJ1Y3Qgc2NjYiAqcEN1cnJTQ0NCKQogewotCVVDSEFSIG1lc3NhZ2U7Ci0JVVNIT1JUIFRpbWVPdXRMb29wOworCXVuc2lnbmVkIGNoYXIgbWVzc2FnZTsKKwl1bnNpZ25lZCBzaG9ydCBUaW1lT3V0TG9vcDsKIAogCVRpbWVPdXRMb29wID0gMDsKLQl3aGlsZSggKCEoUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcpICYgU0NTSV9SRVEpKSAmJgotCQkJKFRpbWVPdXRMb29wKysgPCAyMDAwMCkgKXt9CisJd2hpbGUgKCghKFJEX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcpICYgU0NTSV9SRVEpKSAmJgorCSAgICAgICAoVGltZU91dExvb3ArKyA8IDIwMDAwKSkgeworCX0KIAorCVdSX0hBUlBPT04ocG9ydCArIGhwX3BvcnRjdHJsXzAsIFNDU0lfUE9SVCk7CiAKLQlXUl9IQVJQT09OKHBvcnQraHBfcG9ydGN0cmxfMCwgU0NTSV9QT1JUKTsKKwltZXNzYWdlID0gUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaWRhdGFfMCk7CiAKLQltZXNzYWdlID0gUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lkYXRhXzApOwotCi0JV1JfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcsIFNDU0lfQUNLICsgU19NU0dJX1BIKTsKLQorCVdSX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcsIFNDU0lfQUNLICsgU19NU0dJX1BIKTsKIAogCWlmIChUaW1lT3V0TG9vcCA+IDIwMDAwKQotCQltZXNzYWdlID0gMHgwMDsgICAvKiBmb3JjZSBtZXNzYWdlIGJ5dGUgPSAwIGlmIFRpbWUgT3V0IG9uIFJlcSAqLworCQltZXNzYWdlID0gMHgwMDsJLyogZm9yY2UgbWVzc2FnZSBieXRlID0gMCBpZiBUaW1lIE91dCBvbiBSZXEgKi8KIAotCWlmICgoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgUEFSSVRZKSAmJgotCQkoUkRfSEFSUE9PTihwb3J0K2hwX2FkZHN0YXQpICYgU0NTSV9QQVJfRVJSKSkKLQl7Ci0JCVdSX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnLCAoU0NTSV9BQ0sgKyBTX0lMTF9QSCkpOwotCQlXUl9IQVJQT09OKHBvcnQraHBfeGZlcnN0YXQsIDApOwotCQlXUl9IQVJQT09OKHBvcnQraHBfZmlmb3JlYWQsIDApOwotCQlXUl9IQVJQT09OKHBvcnQraHBfZmlmb3dyaXRlLCAwKTsKLQkJaWYgKHBDdXJyU0NDQiAhPSBOVUxMKQotCQl7CisJaWYgKChSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmIFBBUklUWSkgJiYKKwkgICAgKFJEX0hBUlBPT04ocG9ydCArIGhwX2FkZHN0YXQpICYgU0NTSV9QQVJfRVJSKSkgeworCQlXUl9IQVJQT09OKHBvcnQgKyBocF9zY3Npc2lnLCAoU0NTSV9BQ0sgKyBTX0lMTF9QSCkpOworCQlXUl9IQVJQT09OKHBvcnQgKyBocF94ZmVyc3RhdCwgMCk7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX2ZpZm9yZWFkLCAwKTsKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfZmlmb3dyaXRlLCAwKTsKKwkJaWYgKHBDdXJyU0NDQiAhPSBOVUxMKSB7CiAJCQlwQ3VyclNDQ0ItPlNjY2Jfc2NzaW1zZyA9IFNNUEFSSVRZOwogCQl9CiAJCW1lc3NhZ2UgPSAweDAwOwotCQlkbwotCQl7CisJCWRvIHsKIAkJCUFDQ0VQVF9NU0dfQVROKHBvcnQpOwogCQkJVGltZU91dExvb3AgPSAwOwotCQkJd2hpbGUoICghKFJEX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnKSAmIFNDU0lfUkVRKSkgJiYKLQkJCQkoVGltZU91dExvb3ArKyA8IDIwMDAwKSApe30KLQkJCWlmIChUaW1lT3V0TG9vcCA+IDIwMDAwKQotCQkJewotCQkJCVdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBQQVJJVFkpOwotCQkJCXJldHVybihtZXNzYWdlKTsKKwkJCXdoaWxlICgoIShSRF9IQVJQT09OKHBvcnQgKyBocF9zY3Npc2lnKSAmIFNDU0lfUkVRKSkgJiYKKwkJCSAgICAgICAoVGltZU91dExvb3ArKyA8IDIwMDAwKSkgewogCQkJfQotCQkJaWYgKChSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTX1NDU0lfUEhaKSAhPSBTX01TR0lfUEgpCi0JCQl7Ci0JCQkJV1JXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCksIFBBUklUWSk7Ci0JCQkJcmV0dXJuKG1lc3NhZ2UpOworCQkJaWYgKFRpbWVPdXRMb29wID4gMjAwMDApIHsKKwkJCQlXUldfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpLCBQQVJJVFkpOworCQkJCXJldHVybiBtZXNzYWdlOwogCQkJfQotCQkJV1JfSEFSUE9PTihwb3J0K2hwX3BvcnRjdHJsXzAsIFNDU0lfUE9SVCk7CisJCQlpZiAoKFJEX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcpICYgU19TQ1NJX1BIWikgIT0KKwkJCSAgICBTX01TR0lfUEgpIHsKKwkJCQlXUldfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpLCBQQVJJVFkpOworCQkJCXJldHVybiBtZXNzYWdlOworCQkJfQorCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfcG9ydGN0cmxfMCwgU0NTSV9QT1JUKTsKIAotCQkJUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lkYXRhXzApOworCQkJUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaWRhdGFfMCk7CiAKLQkJCVdSX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnLCAoU0NTSV9BQ0sgKyBTX0lMTF9QSCkpOworCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZywgKFNDU0lfQUNLICsgU19JTExfUEgpKTsKIAotCQl9d2hpbGUoMSk7CisJCX0gd2hpbGUgKDEpOwogCiAJfQotCVdSX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnLCAoU0NTSV9BQ0sgKyBTX0lMTF9QSCkpOwotCVdSX0hBUlBPT04ocG9ydCtocF94ZmVyc3RhdCwgMCk7Ci0JV1JfSEFSUE9PTihwb3J0K2hwX2ZpZm9yZWFkLCAwKTsKLQlXUl9IQVJQT09OKHBvcnQraHBfZmlmb3dyaXRlLCAwKTsKLQlyZXR1cm4obWVzc2FnZSk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZywgKFNDU0lfQUNLICsgU19JTExfUEgpKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF94ZmVyc3RhdCwgMCk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfZmlmb3JlYWQsIDApOworCVdSX0hBUlBPT04ocG9ydCArIGhwX2ZpZm93cml0ZSwgMCk7CisJcmV0dXJuIG1lc3NhZ2U7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogRlBUX3NzZWwKQEAgLTI4NjAsMTAyICsyMzI2LDkwIEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfc3NlbChVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdm9pZCBGUFRfc3NlbCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgcF9jYXJkKQogewogCi0gICBVQ0hBUiBhdXRvX2xvYWRlZCwgaSwgdGFyZ2V0LCAqdGhlQ0NCOworCXVuc2lnbmVkIGNoYXIgYXV0b19sb2FkZWQsIGksIHRhcmdldCwgKnRoZUNDQjsKIAotICAgVUxPTkcgY2RiX3JlZzsKLSAgIFBTQ0NCY2FyZCBDdXJyQ2FyZDsKLSAgIFBTQ0NCIGN1cnJTQ0NCOwotICAgUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOwotICAgVUNIQVIgbGFzdFRhZywgbHVuOworCXVuc2lnbmVkIGxvbmcgY2RiX3JlZzsKKwlzdHJ1Y3Qgc2NjYl9jYXJkICpDdXJyQ2FyZDsKKwlzdHJ1Y3Qgc2NjYiAqY3VyclNDQ0I7CisJc3RydWN0IHNjY2JfbWdyX3Rhcl9pbmZvICpjdXJyVGFyX0luZm87CisJdW5zaWduZWQgY2hhciBsYXN0VGFnLCBsdW47CiAKLSAgIEN1cnJDYXJkID0gJkZQVF9CTF9DYXJkW3BfY2FyZF07Ci0gICBjdXJyU0NDQiA9IEN1cnJDYXJkLT5jdXJyZW50U0NDQjsKLSAgIHRhcmdldCA9IGN1cnJTQ0NCLT5UYXJnSUQ7Ci0gICBjdXJyVGFyX0luZm8gPSAmRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVt0YXJnZXRdOwotICAgbGFzdFRhZyA9IEN1cnJDYXJkLT50YWdRX0xzdDsKKwlDdXJyQ2FyZCA9ICZGUFRfQkxfQ2FyZFtwX2NhcmRdOworCWN1cnJTQ0NCID0gQ3VyckNhcmQtPmN1cnJlbnRTQ0NCOworCXRhcmdldCA9IGN1cnJTQ0NCLT5UYXJnSUQ7CisJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bdGFyZ2V0XTsKKwlsYXN0VGFnID0gQ3VyckNhcmQtPnRhZ1FfTHN0OwogCi0gICBBUkFNX0FDQ0VTUyhwb3J0KTsKLQorCUFSQU1fQUNDRVNTKHBvcnQpOwogCiAJaWYgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSA9PSBUQUdfUV9SRUpFQ1QpCiAJCWN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmPSB+Rl9VU0VfQ01EX1E7CiAKLQlpZigoKEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJiAKLQkJKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKSkKKwlpZiAoKChDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYKKwkgICAgICgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkpCiAKLQkgICBsdW4gPSBjdXJyU0NDQi0+THVuOworCQlsdW4gPSBjdXJyU0NDQi0+THVuOwogCWVsc2UKIAkJbHVuID0gMDsKIAorCWlmIChDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX1RBR19TVEFSVEVEKSB7CisJCWlmICghKGN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmIEZfVVNFX0NNRF9RKSkgeworCQkJaWYgKChjdXJyVGFyX0luZm8tPlRhckxVTl9DQSA9PSAwKQorCQkJICAgICYmICgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykKKwkJCQk9PSBUQUdfUV9UUllJTkcpKSB7CiAKLSAgIGlmIChDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX1RBR19TVEFSVEVEKQotICAgICAgewotICAgICAgaWYgKCEoY3VyclNDQ0ItPkNvbnRyb2xCeXRlICYgRl9VU0VfQ01EX1EpKQotICAgICAgICAgewotICAgICAgCWlmICgoY3VyclRhcl9JbmZvLT5UYXJMVU5fQ0EgPT0gMCkKLSAgICAgIAkgICAgJiYgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKQotICAgICAgCSAgICA9PSBUQUdfUV9UUllJTkcpKQotICAgICAgICAgICAgeworCQkJCWlmIChjdXJyVGFyX0luZm8tPlRhclRhZ1FfQ250ICE9IDApIHsKKwkJCQkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOworCQkJCQlGUFRfcXVldWVTZWxlY3RGYWlsKEN1cnJDYXJkLCBwX2NhcmQpOworCQkJCQlTR1JBTV9BQ0NFU1MocG9ydCk7CisJCQkJCXJldHVybjsKKwkJCQl9CiAKLQkgICAgICAgICBpZiAoY3VyclRhcl9JbmZvLT5UYXJUYWdRX0NudCAhPTApCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAJCSAgIGN1cnJUYXJfSW5mby0+VGFyTFVOQnVzeVtsdW5dID0gMTsKLSAgICAgICAgICAgIAkJRlBUX3F1ZXVlU2VsZWN0RmFpbChDdXJyQ2FyZCxwX2NhcmQpOwotCQkJCQkgICBTR1JBTV9BQ0NFU1MocG9ydCk7Ci0gICAgICAgICAJCSAgIHJldHVybjsKLSAgICAgICAgIAkJICAgfQorCQkJCWVsc2UgeworCQkJCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbbHVuXSA9IDE7CisJCQkJfQogCi0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgIAkJICBjdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbbHVuXSA9IDE7Ci0gICAgICAgICAJCSAgfQorCQkJfQorCQkJLypFbmQgbm9uLXRhZ2dlZCAqLworCQkJZWxzZSB7CisJCQkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOworCQkJfQogCi0gICAJICAgICAgfSAgLypFbmQgbm9uLXRhZ2dlZCAqLworCQl9CisJCS8qIVVzZSBjbWQgUSBUYWdnZWQgKi8KKwkJZWxzZSB7CisJCQlpZiAoY3VyclRhcl9JbmZvLT5UYXJMVU5fQ0EgPT0gMSkgeworCQkJCUZQVF9xdWV1ZVNlbGVjdEZhaWwoQ3VyckNhcmQsIHBfY2FyZCk7CisJCQkJU0dSQU1fQUNDRVNTKHBvcnQpOworCQkJCXJldHVybjsKKwkJCX0KIAotCSAgICAgIGVsc2UgewotCSAgICAgICAgIGN1cnJUYXJfSW5mby0+VGFyTFVOQnVzeVtsdW5dID0gMTsKLQkgICAgICAgICB9Ci0KLQkgICAgICB9ICAvKiFVc2UgY21kIFEgVGFnZ2VkICovCi0KLQkgICBlbHNlIHsKLSAgIAkgICAgIGlmIChjdXJyVGFyX0luZm8tPlRhckxVTl9DQSA9PSAxKQotICAgICAgICAgICAgICAgewotICAgICAgCSAgICAgIEZQVF9xdWV1ZVNlbGVjdEZhaWwoQ3VyckNhcmQscF9jYXJkKTsKLQkJCQkgICBTR1JBTV9BQ0NFU1MocG9ydCk7Ci0gICAgICAJICAgICAgcmV0dXJuOwotCSAgICAgICAgICAgIH0KLQotCSAgICAgICAgY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOwotCi0gICAJICAgICB9ICAvKmVsc2UgdXNlIGNtZCBRIHRhZ2dlZCAqLwotCi0gICAgICB9ICAvKmlmIGdsb2IgdGFnZ2VkIHN0YXJ0ZWQgKi8KLQotICAgZWxzZSB7Ci0gICAgICAgIGN1cnJUYXJfSW5mby0+VGFyTFVOQnVzeVtsdW5dID0gMTsKLSAgICAgICAgfQotCi0KLQotCWlmKCgoKEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJiAKLQkJKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKSAKLQkJfHwgKCEoY3VyclNDQ0ItPkNvbnRyb2xCeXRlICYgRl9VU0VfQ01EX1EpKSkpCi0JewotCQlpZihDdXJyQ2FyZC0+ZGlzY1FDb3VudCA+PSBRVUVVRV9ERVBUSCkKLQkJewogCQkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOwotCQkJRlBUX3F1ZXVlU2VsZWN0RmFpbChDdXJyQ2FyZCxwX2NhcmQpOworCisJCX0JCS8qZWxzZSB1c2UgY21kIFEgdGFnZ2VkICovCisKKwl9CisJLyppZiBnbG9iIHRhZ2dlZCBzdGFydGVkICovCisJZWxzZSB7CisJCWN1cnJUYXJfSW5mby0+VGFyTFVOQnVzeVtsdW5dID0gMTsKKwl9CisKKwlpZiAoKCgoQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCisJICAgICAgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKQorCSAgICAgfHwgKCEoY3VyclNDQ0ItPkNvbnRyb2xCeXRlICYgRl9VU0VfQ01EX1EpKSkpIHsKKwkJaWYgKEN1cnJDYXJkLT5kaXNjUUNvdW50ID49IFFVRVVFX0RFUFRIKSB7CisJCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbbHVuXSA9IDE7CisJCQlGUFRfcXVldWVTZWxlY3RGYWlsKEN1cnJDYXJkLCBwX2NhcmQpOwogCQkJU0dSQU1fQUNDRVNTKHBvcnQpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWZvciAoaSA9IDE7IGkgPCBRVUVVRV9ERVBUSDsgaSsrKQotCQl7Ci0JCQlpZiAoKytsYXN0VGFnID49IFFVRVVFX0RFUFRIKSBsYXN0VGFnID0gMTsKLQkJCWlmIChDdXJyQ2FyZC0+ZGlzY1FfVGJsW2xhc3RUYWddID09IE5VTEwpCi0JCQl7CisJCWZvciAoaSA9IDE7IGkgPCBRVUVVRV9ERVBUSDsgaSsrKSB7CisJCQlpZiAoKytsYXN0VGFnID49IFFVRVVFX0RFUFRIKQorCQkJCWxhc3RUYWcgPSAxOworCQkJaWYgKEN1cnJDYXJkLT5kaXNjUV9UYmxbbGFzdFRhZ10gPT0gTlVMTCkgewogCQkJCUN1cnJDYXJkLT50YWdRX0xzdCA9IGxhc3RUYWc7CiAJCQkJY3VyclRhcl9JbmZvLT5MdW5EaXNjUV9JZHhbbHVuXSA9IGxhc3RUYWc7CiAJCQkJQ3VyckNhcmQtPmRpc2NRX1RibFtsYXN0VGFnXSA9IGN1cnJTQ0NCOwpAQCAtMjk2MywyMDYgKzI0MTcsMjA2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJaWYoaSA9PSBRVUVVRV9ERVBUSCkKLQkJeworCQlpZiAoaSA9PSBRVUVVRV9ERVBUSCkgewogCQkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOwotCQkJRlBUX3F1ZXVlU2VsZWN0RmFpbChDdXJyQ2FyZCxwX2NhcmQpOworCQkJRlBUX3F1ZXVlU2VsZWN0RmFpbChDdXJyQ2FyZCwgcF9jYXJkKTsKIAkJCVNHUkFNX0FDQ0VTUyhwb3J0KTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAorCWF1dG9fbG9hZGVkID0gMDsKIAorCVdSX0hBUlBPT04ocG9ydCArIGhwX3NlbGVjdF9pZCwgdGFyZ2V0KTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9ncF9yZWdfMywgdGFyZ2V0KTsJLyogVXNlIGJ5IG5ldyBhdXRvbWF0aW9uIGxvZ2ljICovCiAKLSAgIGF1dG9fbG9hZGVkID0gMDsKKwlpZiAoY3VyclNDQ0ItPk9wZXJhdGlvbkNvZGUgPT0gUkVTRVRfQ09NTUFORCkgeworCQlXUldfSEFSUE9PTigocG9ydCArIElEX01TR19TVFJUKSwgKE1QTV9PUCArIEFNU0dfT1VUICsKKwkJCQkJCSAgIChjdXJyU0NDQi0+CisJCQkJCQkgICAgU2NjYl9pZG1zZyAmIH5ESVNDX1BSSVYpKSk7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9zZWxlY3RfaWQsIHRhcmdldCk7Ci0gICBXUl9IQVJQT09OKHBvcnQraHBfZ3BfcmVnXzMsIHRhcmdldCk7ICAvKiBVc2UgYnkgbmV3IGF1dG9tYXRpb24gbG9naWMgKi8KKwkJV1JXX0hBUlBPT04oKHBvcnQgKyBJRF9NU0dfU1RSVCArIDIpLCBCUkhfT1AgKyBBTFdBWVMgKyBOUCk7CiAKLSAgIGlmIChjdXJyU0NDQi0+T3BlcmF0aW9uQ29kZSA9PSBSRVNFVF9DT01NQU5EKSB7Ci0gICAgICBXUldfSEFSUE9PTigocG9ydCtJRF9NU0dfU1RSVCksIChNUE1fT1ArQU1TR19PVVQrCi0gICAgICAgICAgICAgICAJIChjdXJyU0NDQi0+U2NjYl9pZG1zZyAmIH5ESVNDX1BSSVYpKSk7CisJCWN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgPSBTTURFVl9SRVNFVDsKIAotICAgICAgV1JXX0hBUlBPT04oKHBvcnQrSURfTVNHX1NUUlQrMiksQlJIX09QK0FMV0FZUytOUCk7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8zLCAoU0VMRUNUICsgU0VMQ0hLX1NUUlQpKTsKKwkJYXV0b19sb2FkZWQgPSAxOworCQljdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IFNFTEVDVF9CRFJfU1Q7CiAKLSAgICAgIGN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgPSBTTURFVl9SRVNFVDsKLQotICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8zLCAoU0VMRUNUK1NFTENIS19TVFJUKSk7Ci0gICAgICBhdXRvX2xvYWRlZCA9IDE7Ci0gICAgICBjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IFNFTEVDVF9CRFJfU1Q7Ci0KLSAgICAgIGlmIChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spCi0gICAgICAgICB7Ci0JICAgICAgIGN1cnJUYXJfSW5mby0+VGFyU3luY0N0cmwgPSAwOwotCSAgICAgIGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICY9IH5UQVJfU1lOQ19NQVNLOwotCSAgICAgIH0KLQotICAgICAgaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkKLSAgICAgICAgIHsKLSAgICAgIAljdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmPSB+VEFSX1dJREVfTUFTSzsKLSAgICAgIAl9Ci0KLSAgICAgIEZQVF9zc3N5bmN2KHBvcnQsIHRhcmdldCwgTkFSUk9XX1NDU0ksY3VyclRhcl9JbmZvKTsKLSAgICAgIEZQVF9TY2NiTWdyVGFibGVJbml0VGFyZ2V0KHBfY2FyZCwgdGFyZ2V0KTsKLQotICAgICAgfQotCi0JCWVsc2UgaWYoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gQUJPUlRfU1QpCi0JCXsKLQkJCVdSV19IQVJQT09OKChwb3J0K0lEX01TR19TVFJUKSwgKE1QTV9PUCtBTVNHX09VVCsKLQkJCQkJCQkJKGN1cnJTQ0NCLT5TY2NiX2lkbXNnICYgfkRJU0NfUFJJVikpKTsKLQotICAgICAgV1JXX0hBUlBPT04oKHBvcnQrSURfTVNHX1NUUlQrMiksQlJIX09QK0FMV0FZUytDTURQWik7Ci0KLQkJCVdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUyswKSwgKE1QTV9PUCtBTVNHX09VVCsKLQkJCQkJCQkJKCgoVUNIQVIpKGN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmIFRBR19UWVBFX01BU0spCi0JCQkJCQkJCT4+IDYpIHwgKFVDSEFSKTB4MjApKSk7Ci0JCQlXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrMiksCi0JCQkJCQkJKE1QTV9PUCtBTVNHX09VVCtjdXJyU0NDQi0+U2NjYl90YWcpKTsKLQkJCVdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUys0KSwgKEJSSF9PUCtBTFdBWVMrTlAgKSk7Ci0KLQkJCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMywgKFNFTEVDVCtTRUxDSEtfU1RSVCkpOwotCQkJYXV0b19sb2FkZWQgPSAxOwotCQkKKwkJaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1NZTkNfTUFTSykgeworCQkJY3VyclRhcl9JbmZvLT5UYXJTeW5jQ3RybCA9IDA7CisJCQljdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmPSB+VEFSX1NZTkNfTUFTSzsKIAkJfQogCi0gICBlbHNlIGlmICghKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgV0lERV9ORUdPQ0lBVEVEKSkgIHsKLSAgICAgIGF1dG9fbG9hZGVkID0gRlBUX3Npd2lkbihwb3J0LHBfY2FyZCk7Ci0gICAgICBjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IFNFTEVDVF9XTl9TVDsKLSAgICAgIH0KKwkJaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkgeworCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJj0gflRBUl9XSURFX01BU0s7CisJCX0KIAotICAgZWxzZSBpZiAoISgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfU1lOQ19NQVNLKQotICAgICAgPT0gU1lOQ19TVVBQT1JURUQpKSAgewotICAgICAgYXV0b19sb2FkZWQgPSBGUFRfc2lzeW5jbihwb3J0LHBfY2FyZCwgMCk7Ci0gICAgICBjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IFNFTEVDVF9TTl9TVDsKLSAgICAgIH0KKwkJRlBUX3Nzc3luY3YocG9ydCwgdGFyZ2V0LCBOQVJST1dfU0NTSSwgY3VyclRhcl9JbmZvKTsKKwkJRlBUX1NjY2JNZ3JUYWJsZUluaXRUYXJnZXQocF9jYXJkLCB0YXJnZXQpOwogCisJfQogCi0gICBpZiAoIWF1dG9fbG9hZGVkKQotICAgICAgeworCWVsc2UgaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IEFCT1JUX1NUKSB7CisJCVdSV19IQVJQT09OKChwb3J0ICsgSURfTVNHX1NUUlQpLCAoTVBNX09QICsgQU1TR19PVVQgKworCQkJCQkJICAgKGN1cnJTQ0NCLT4KKwkJCQkJCSAgICBTY2NiX2lkbXNnICYgfkRJU0NfUFJJVikpKTsKIAotICAgICAgaWYgKGN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmIEZfVVNFX0NNRF9RKQotICAgICAgICAgeworCQlXUldfSEFSUE9PTigocG9ydCArIElEX01TR19TVFJUICsgMiksIEJSSF9PUCArIEFMV0FZUyArIENNRFBaKTsKIAotICAgICAgICAgQ3VyckNhcmQtPmdsb2JhbEZsYWdzIHw9IEZfVEFHX1NUQVJURUQ7CisJCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgMCksIChNUE1fT1AgKyBBTVNHX09VVCArCisJCQkJCQkgICAgICgoKHVuc2lnbmVkCisJCQkJCQkJY2hhcikoY3VyclNDQ0ItPgorCQkJCQkJCSAgICAgIENvbnRyb2xCeXRlICYKKwkJCQkJCQkgICAgICBUQUdfVFlQRV9NQVNLKQorCQkJCQkJICAgICAgID4+IDYpIHwgKHVuc2lnbmVkIGNoYXIpCisJCQkJCQkgICAgICAweDIwKSkpOworCQlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDIpLAorCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArIGN1cnJTQ0NCLT5TY2NiX3RhZykpOworCQlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDQpLCAoQlJIX09QICsgQUxXQVlTICsgTlApKTsKIAotICAgICAgICAgaWYgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKQotICAgICAgICAgICAgPT0gVEFHX1FfUkVKRUNUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY3VyclNDQ0ItPkNvbnRyb2xCeXRlICY9IH5GX1VTRV9DTURfUTsKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzMsIChTRUxFQ1QgKyBTRUxDSEtfU1RSVCkpOworCQlhdXRvX2xvYWRlZCA9IDE7CiAKLSAgICAgICAgICAgIC8qIEZpeCB1cCB0aGUgc3RhcnQgaW5zdHJ1Y3Rpb24gd2l0aCBhIGp1bXAgdG8KLSAgICAgICAgICAgICAgIE5vbi1UYWctQ01EIGhhbmRsaW5nICovCi0gICAgICAgICAgICBXUldfSEFSUE9PTigocG9ydCtJRF9NU0dfU1RSVCksQlJIX09QK0FMV0FZUytOVENNRCk7CisJfQogCi0gICAgICAgICAgICBXUldfSEFSUE9PTigocG9ydCtOT05fVEFHX0lEX01TRyksCi0JICAgICAgICAgICAgICAgICAgICAgKE1QTV9PUCtBTVNHX09VVCtjdXJyU0NDQi0+U2NjYl9pZG1zZykpOworCWVsc2UgaWYgKCEoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBXSURFX05FR09DSUFURUQpKSB7CisJCWF1dG9fbG9hZGVkID0gRlBUX3Npd2lkbihwb3J0LCBwX2NhcmQpOworCQljdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IFNFTEVDVF9XTl9TVDsKKwl9CiAKLQkgICAgICAgICBXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzMsIChTRUxFQ1QrU0VMQ0hLX1NUUlQpKTsKKwllbHNlIGlmICghKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9TWU5DX01BU0spCisJCSAgID09IFNZTkNfU1VQUE9SVEVEKSkgeworCQlhdXRvX2xvYWRlZCA9IEZQVF9zaXN5bmNuKHBvcnQsIHBfY2FyZCwgMCk7CisJCWN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gU0VMRUNUX1NOX1NUOworCX0KIAotCSAgICAgICAgIC8qIFNldHVwIG91ciBTVEFURSBzbyB3ZSBrbm93IHdoYXQgaGFwcGVuZCB3aGVuCi0gICAgICAgICAgICAgICB0aGUgd2hlZWxzIGZhbGwgb2ZmLiAqLwotICAgICAgICAgICAgY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPSBTRUxFQ1RfU1Q7CisJaWYgKCFhdXRvX2xvYWRlZCkgewogCi0JICAgICAgICAgY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOwotICAgICAgICAgICAgfQorCQlpZiAoY3VyclNDQ0ItPkNvbnRyb2xCeXRlICYgRl9VU0VfQ01EX1EpIHsKIAotICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgV1JXX0hBUlBPT04oKHBvcnQrSURfTVNHX1NUUlQpLCAoTVBNX09QK0FNU0dfT1VUK2N1cnJTQ0NCLT5TY2NiX2lkbXNnKSk7CisJCQlDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9UQUdfU1RBUlRFRDsKIAotICAgICAgICAgICAgV1JXX0hBUlBPT04oKHBvcnQrSURfTVNHX1NUUlQrMiksIChNUE1fT1ArQU1TR19PVVQrCi0gICAgICAgICAgICAgICAgICAgICAgICAoKChVQ0hBUikoY3VyclNDQ0ItPkNvbnRyb2xCeXRlICYgVEFHX1RZUEVfTUFTSykKLSAgICAgICAgICAgICAgICAgICAgICAgID4+IDYpIHwgKFVDSEFSKTB4MjApKSk7CisJCQlpZiAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spCisJCQkgICAgPT0gVEFHX1FfUkVKRUNUKSB7CisJCQkJY3VyclNDQ0ItPkNvbnRyb2xCeXRlICY9IH5GX1VTRV9DTURfUTsKIAotCQkJCWZvciAoaSA9IDE7IGkgPCBRVUVVRV9ERVBUSDsgaSsrKQotCQkJCXsKLQkJCQkJaWYgKCsrbGFzdFRhZyA+PSBRVUVVRV9ERVBUSCkgbGFzdFRhZyA9IDE7Ci0JCQkJCWlmIChDdXJyQ2FyZC0+ZGlzY1FfVGJsW2xhc3RUYWddID09IE5VTEwpCi0JCQkJCXsKLQkJCQkJCVdSV19IQVJQT09OKChwb3J0K0lEX01TR19TVFJUKzYpLAotCQkJCQkJCShNUE1fT1ArQU1TR19PVVQrbGFzdFRhZykpOworCQkJCS8qIEZpeCB1cCB0aGUgc3RhcnQgaW5zdHJ1Y3Rpb24gd2l0aCBhIGp1bXAgdG8KKwkJCQkgICBOb24tVGFnLUNNRCBoYW5kbGluZyAqLworCQkJCVdSV19IQVJQT09OKChwb3J0ICsgSURfTVNHX1NUUlQpLAorCQkJCQkgICAgQlJIX09QICsgQUxXQVlTICsgTlRDTUQpOworCisJCQkJV1JXX0hBUlBPT04oKHBvcnQgKyBOT05fVEFHX0lEX01TRyksCisJCQkJCSAgICAoTVBNX09QICsgQU1TR19PVVQgKworCQkJCQkgICAgIGN1cnJTQ0NCLT5TY2NiX2lkbXNnKSk7CisKKwkJCQlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMywKKwkJCQkJICAgKFNFTEVDVCArIFNFTENIS19TVFJUKSk7CisKKwkJCQkvKiBTZXR1cCBvdXIgU1RBVEUgc28gd2Uga25vdyB3aGF0IGhhcHBlbmQgd2hlbgorCQkJCSAgIHRoZSB3aGVlbHMgZmFsbCBvZmYuICovCisJCQkJY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPSBTRUxFQ1RfU1Q7CisKKwkJCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbbHVuXSA9IDE7CisJCQl9CisKKwkJCWVsc2UgeworCQkJCVdSV19IQVJQT09OKChwb3J0ICsgSURfTVNHX1NUUlQpLAorCQkJCQkgICAgKE1QTV9PUCArIEFNU0dfT1VUICsKKwkJCQkJICAgICBjdXJyU0NDQi0+U2NjYl9pZG1zZykpOworCisJCQkJV1JXX0hBUlBPT04oKHBvcnQgKyBJRF9NU0dfU1RSVCArIDIpLAorCQkJCQkgICAgKE1QTV9PUCArIEFNU0dfT1VUICsKKwkJCQkJICAgICAoKCh1bnNpZ25lZCBjaGFyKShjdXJyU0NDQi0+CisJCQkJCQkJICAgICAgIENvbnRyb2xCeXRlICYKKwkJCQkJCQkgICAgICAgVEFHX1RZUEVfTUFTSykKKwkJCQkJICAgICAgID4+IDYpIHwgKHVuc2lnbmVkIGNoYXIpMHgyMCkpKTsKKworCQkJCWZvciAoaSA9IDE7IGkgPCBRVUVVRV9ERVBUSDsgaSsrKSB7CisJCQkJCWlmICgrK2xhc3RUYWcgPj0gUVVFVUVfREVQVEgpCisJCQkJCQlsYXN0VGFnID0gMTsKKwkJCQkJaWYgKEN1cnJDYXJkLT5kaXNjUV9UYmxbbGFzdFRhZ10gPT0KKwkJCQkJICAgIE5VTEwpIHsKKwkJCQkJCVdSV19IQVJQT09OKChwb3J0ICsKKwkJCQkJCQkgICAgIElEX01TR19TVFJUICsgNiksCisJCQkJCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArCisJCQkJCQkJICAgICBsYXN0VGFnKSk7CiAJCQkJCQlDdXJyQ2FyZC0+dGFnUV9Mc3QgPSBsYXN0VGFnOwogCQkJCQkJY3VyclNDQ0ItPlNjY2JfdGFnID0gbGFzdFRhZzsKLQkJCQkJCUN1cnJDYXJkLT5kaXNjUV9UYmxbbGFzdFRhZ10gPSBjdXJyU0NDQjsKKwkJCQkJCUN1cnJDYXJkLT5kaXNjUV9UYmxbbGFzdFRhZ10gPQorCQkJCQkJICAgIGN1cnJTQ0NCOwogCQkJCQkJQ3VyckNhcmQtPmRpc2NRQ291bnQrKzsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfQogCisJCQkJaWYgKGkgPT0gUVVFVUVfREVQVEgpIHsKKwkJCQkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOworCQkJCQlGUFRfcXVldWVTZWxlY3RGYWlsKEN1cnJDYXJkLCBwX2NhcmQpOworCQkJCQlTR1JBTV9BQ0NFU1MocG9ydCk7CisJCQkJCXJldHVybjsKKwkJCQl9CiAKLSAgICAgICAgICAgIGlmICggaSA9PSBRVUVVRV9ERVBUSCApCi0gICAgICAgICAgICAgICB7Ci0gICAJICAgICAgICAgY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOwotICAgICAgICAgICAgICAgRlBUX3F1ZXVlU2VsZWN0RmFpbChDdXJyQ2FyZCxwX2NhcmQpOwotCQkJCSAgIFNHUkFNX0FDQ0VTUyhwb3J0KTsKLSAgIAkgICAgICAgICByZXR1cm47Ci0gICAJICAgICAgICAgfQorCQkJCWN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gU0VMRUNUX1FfU1Q7CiAKLSAgICAgICAgICAgIGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gU0VMRUNUX1FfU1Q7CisJCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzMsCisJCQkJCSAgIChTRUxFQ1QgKyBTRUxDSEtfU1RSVCkpOworCQkJfQorCQl9CiAKLSAgIAkgICAgICBXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzMsIChTRUxFQ1QrU0VMQ0hLX1NUUlQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KKwkJZWxzZSB7CiAKLSAgICAgIGVsc2UKLSAgICAgICAgIHsKKwkJCVdSV19IQVJQT09OKChwb3J0ICsgSURfTVNHX1NUUlQpLAorCQkJCSAgICBCUkhfT1AgKyBBTFdBWVMgKyBOVENNRCk7CiAKLSAgICAgICAgIFdSV19IQVJQT09OKChwb3J0K0lEX01TR19TVFJUKSxCUkhfT1ArQUxXQVlTK05UQ01EKTsKKwkJCVdSV19IQVJQT09OKChwb3J0ICsgTk9OX1RBR19JRF9NU0cpLAorCQkJCSAgICAoTVBNX09QICsgQU1TR19PVVQgKyBjdXJyU0NDQi0+U2NjYl9pZG1zZykpOwogCi0gICAgICAJV1JXX0hBUlBPT04oKHBvcnQrTk9OX1RBR19JRF9NU0cpLAotICAgICAgICAgICAgKE1QTV9PUCtBTVNHX09VVCtjdXJyU0NDQi0+U2NjYl9pZG1zZykpOworCQkJY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPSBTRUxFQ1RfU1Q7CiAKLSAgICAgICAgIGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gU0VMRUNUX1NUOworCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzMsCisJCQkJICAgKFNFTEVDVCArIFNFTENIS19TVFJUKSk7CisJCX0KIAotICAgICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8zLCAoU0VMRUNUK1NFTENIS19TVFJUKSk7Ci0gICAgICAgICB9CisJCXRoZUNDQiA9ICh1bnNpZ25lZCBjaGFyICopJmN1cnJTQ0NCLT5DZGJbMF07CiAKKwkJY2RiX3JlZyA9IHBvcnQgKyBDTURfU1RSVDsKIAotICAgICAgdGhlQ0NCID0gKFVDSEFSICopJmN1cnJTQ0NCLT5DZGJbMF07CisJCWZvciAoaSA9IDA7IGkgPCBjdXJyU0NDQi0+Q2RiTGVuZ3RoOyBpKyspIHsKKwkJCVdSV19IQVJQT09OKGNkYl9yZWcsIChNUE1fT1AgKyBBQ09NTUFORCArICp0aGVDQ0IpKTsKKwkJCWNkYl9yZWcgKz0gMjsKKwkJCXRoZUNDQisrOworCQl9CiAKLSAgICAgIGNkYl9yZWcgPSBwb3J0ICsgQ01EX1NUUlQ7CisJCWlmIChjdXJyU0NDQi0+Q2RiTGVuZ3RoICE9IFRXRUxWRV9CWVRFX0NNRCkKKwkJCVdSV19IQVJQT09OKGNkYl9yZWcsIChCUkhfT1AgKyBBTFdBWVMgKyBOUCkpOwogCi0gICAgICBmb3IgKGk9MDsgaSA8IGN1cnJTQ0NCLT5DZGJMZW5ndGg7IGkrKykKLSAgICAgICAgIHsKLSAgICAgICAgIFdSV19IQVJQT09OKGNkYl9yZWcsIChNUE1fT1AgKyBBQ09NTUFORCArICp0aGVDQ0IpKTsKLSAgICAgICAgIGNkYl9yZWcgKz0yOwotICAgICAgICAgdGhlQ0NCKys7Ci0gICAgICAgICB9CisJfQorCS8qIGF1dG9fbG9hZGVkICovCisJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9maWZvcmVhZCksICh1bnNpZ25lZCBzaG9ydCkweDAwKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF94ZmVyc3RhdCwgMHgwMCk7CiAKLSAgICAgIGlmIChjdXJyU0NDQi0+Q2RiTGVuZ3RoICE9IFRXRUxWRV9CWVRFX0NNRCkKLSAgICAgICAgIFdSV19IQVJQT09OKGNkYl9yZWcsIChCUkhfT1ArQUxXQVlTKyAgICBOUCkpOworCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIChQUk9HX0hMVCB8IFRJTUVPVVQgfCBTRUwgfCBCVVNfRlJFRSkpOwogCi0gICAgICB9ICAvKiBhdXRvX2xvYWRlZCAqLworCVdSX0hBUlBPT04ocG9ydCArIGhwX3BvcnRjdHJsXzAsIChTQ1NJX1BPUlQpKTsKIAotICAgV1JXX0hBUlBPT04oKHBvcnQraHBfZmlmb3JlYWQpLCAoVVNIT1JUKSAweDAwKTsKLSAgIFdSX0hBUlBPT04ocG9ydCtocF94ZmVyc3RhdCwgMHgwMCk7CisJaWYgKCEoY3VyclNDQ0ItPlNjY2JfTUdSRmxhZ3MgJiBGX0RFVl9TRUxFQ1RFRCkpIHsKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaWN0cmxfMCwKKwkJCSAgIChTRUxfVEFSIHwgRU5BX0FUTiB8IEVOQV9SRVNFTCB8IEVOQV9TQ0FNX1NFTCkpOworCX0gZWxzZSB7CiAKLSAgIFdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCAoUFJPR19ITFQgfCBUSU1FT1VUIHwgU0VMIHwgQlVTX0ZSRUUpKTsKLQotICAgV1JfSEFSUE9PTihwb3J0K2hwX3BvcnRjdHJsXzAsKFNDU0lfUE9SVCkpOwotCi0KLSAgIGlmICghKGN1cnJTQ0NCLT5TY2NiX01HUkZsYWdzICYgRl9ERVZfU0VMRUNURUQpKQotICAgICAgewotICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX3Njc2ljdHJsXzAsIChTRUxfVEFSIHwgRU5BX0FUTiB8IEVOQV9SRVNFTCB8IEVOQV9TQ0FNX1NFTCkpOwotICAgICAgfQotICAgZWxzZQotICAgICAgewotCi0vKiAgICAgIGF1dG9fbG9hZGVkID0gIChSRF9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzMpICYgKFVDSEFSKTB4MUYpOworLyogICAgICBhdXRvX2xvYWRlZCA9ICAoUkRfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8zKSAmICh1bnNpZ25lZCBjaGFyKTB4MUYpOwogICAgICAgYXV0b19sb2FkZWQgfD0gQVVUT19JTU1FRDsgKi8KLSAgICAgIGF1dG9fbG9hZGVkID0gQVVUT19JTU1FRDsKKwkJYXV0b19sb2FkZWQgPSBBVVRPX0lNTUVEOwogCi0gICAgICBESVNBQkxFX0FVVE8ocG9ydCk7CisJCURJU0FCTEVfQVVUTyhwb3J0KTsKIAotICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8zLCBhdXRvX2xvYWRlZCk7Ci0gICAgICB9CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8zLCBhdXRvX2xvYWRlZCk7CisJfQogCi0gICBTR1JBTV9BQ0NFU1MocG9ydCk7CisJU0dSQU1fQUNDRVNTKHBvcnQpOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zcmVzCkBAIC0zMTcxLDMwMyArMjYyNSwyNzYgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9zcmVzKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCwgUFNDQ0JjYXJkIHBDdXJyQ2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9zcmVzKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQsCisJCSAgICAgc3RydWN0IHNjY2JfY2FyZCAqcEN1cnJDYXJkKQogewogCi0gICBVQ0hBUiBvdXJfdGFyZ2V0LCBtZXNzYWdlLCBsdW4gPSAwLCB0YWcsIG1zZ1JldHJ5Q291bnQ7CisJdW5zaWduZWQgY2hhciBvdXJfdGFyZ2V0LCBtZXNzYWdlLCBsdW4gPSAwLCB0YWcsIG1zZ1JldHJ5Q291bnQ7CiAKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKKwlzdHJ1Y3Qgc2NjYiAqY3VyclNDQ0I7CiAKLSAgIFBTQ0NCTWdyX3Rhcl9pbmZvIGN1cnJUYXJfSW5mbzsKLQlQU0NDQiBjdXJyU0NDQjsKLQotCi0KLQotCWlmKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgIT0gTlVMTCkKLQl7Ci0JCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3BDdXJyQ2FyZC0+Y3VycmVudFNDQ0ItPlRhcmdJRF07CisJaWYgKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgIT0gTlVMTCkgeworCQljdXJyVGFyX0luZm8gPQorCQkgICAgJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bcEN1cnJDYXJkLT5jdXJyZW50U0NDQi0+VGFyZ0lEXTsKIAkJRElTQUJMRV9BVVRPKHBvcnQpOwogCi0KLQkJV1JfSEFSUE9PTigocG9ydCtocF9zY3NpY3RybF8wKSwoRU5BX1JFU0VMIHwgRU5BX1NDQU1fU0VMKSk7Ci0KKwkJV1JfSEFSUE9PTigocG9ydCArIGhwX3Njc2ljdHJsXzApLCAoRU5BX1JFU0VMIHwgRU5BX1NDQU1fU0VMKSk7CiAKIAkJY3VyclNDQ0IgPSBwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCOwotCQlpZihjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9PSBTRUxFQ1RfV05fU1QpCi0JCXsKKwkJaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9XTl9TVCkgewogCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJj0gflRBUl9XSURFX01BU0s7CiAJCQljdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IEJVU19GUkVFX1NUOwogCQl9Ci0JCWlmKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9TTl9TVCkKLQkJeworCQlpZiAoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1NOX1NUKSB7CiAJCQljdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmPSB+VEFSX1NZTkNfTUFTSzsKIAkJCWN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gQlVTX0ZSRUVfU1Q7CiAJCX0KLQkJaWYoKChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCi0JCQkoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9IFRBR19RX1RSWUlORykpKQotCQl7Ci0gICAgICAJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2N1cnJTQ0NCLT5MdW5dID0gMDsKLQkJCWlmKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ICE9IEFCT1JUX1NUKQotCQkJeworCQlpZiAoKChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCisJCSAgICAgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPQorCQkgICAgICBUQUdfUV9UUllJTkcpKSkgeworCQkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2N1cnJTQ0NCLT5MdW5dID0gMDsKKwkJCWlmIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCAhPSBBQk9SVF9TVCkgewogCQkJCXBDdXJyQ2FyZC0+ZGlzY1FDb3VudC0tOwotCQkJCXBDdXJyQ2FyZC0+ZGlzY1FfVGJsW2N1cnJUYXJfSW5mby0+THVuRGlzY1FfSWR4W2N1cnJTQ0NCLT5MdW5dXSAKLQkJCQkJCQkJCQkJCQk9IE5VTEw7CisJCQkJcEN1cnJDYXJkLT5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT4KKwkJCQkJCSAgICAgTHVuRGlzY1FfSWR4W2N1cnJTQ0NCLT4KKwkJCQkJCQkJICBMdW5dXQorCQkJCSAgICA9IE5VTEw7CiAJCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JICAgICAgY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5WzBdID0gMDsKLQkJCWlmKGN1cnJTQ0NCLT5TY2NiX3RhZykKLQkJCXsKLQkJCQlpZihjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCAhPSBBQk9SVF9TVCkKLQkJCQl7CisJCX0gZWxzZSB7CisJCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbMF0gPSAwOworCQkJaWYgKGN1cnJTQ0NCLT5TY2NiX3RhZykgeworCQkJCWlmIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCAhPSBBQk9SVF9TVCkgewogCQkJCQlwQ3VyckNhcmQtPmRpc2NRQ291bnQtLTsKLQkJCQkJcEN1cnJDYXJkLT5kaXNjUV9UYmxbY3VyclNDQ0ItPlNjY2JfdGFnXSA9IE5VTEw7CisJCQkJCXBDdXJyQ2FyZC0+ZGlzY1FfVGJsW2N1cnJTQ0NCLT4KKwkJCQkJCQkgICAgIFNjY2JfdGFnXSA9IE5VTEw7CiAJCQkJfQotCQkJfWVsc2UKLQkJCXsKLQkJCQlpZihjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCAhPSBBQk9SVF9TVCkKLQkJCQl7CisJCQl9IGVsc2UgeworCQkJCWlmIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCAhPSBBQk9SVF9TVCkgewogCQkJCQlwQ3VyckNhcmQtPmRpc2NRQ291bnQtLTsKLQkJCQkJcEN1cnJDYXJkLT5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT5MdW5EaXNjUV9JZHhbMF1dID0gTlVMTDsKKwkJCQkJcEN1cnJDYXJkLT5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT4KKwkJCQkJCQkgICAgIEx1bkRpc2NRX0lkeFswXV0gPQorCQkJCQkgICAgTlVMTDsKIAkJCQl9CiAJCQl9CiAJCX0KIAotICAgICAgRlBUX3F1ZXVlU2VsZWN0RmFpbCgmRlBUX0JMX0NhcmRbcF9jYXJkXSxwX2NhcmQpOworCQlGUFRfcXVldWVTZWxlY3RGYWlsKCZGUFRfQkxfQ2FyZFtwX2NhcmRdLCBwX2NhcmQpOwogCX0KIAotCVdSV19IQVJQT09OKChwb3J0K2hwX2ZpZm9yZWFkKSwgKFVTSE9SVCkgMHgwMCk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9maWZvcmVhZCksICh1bnNpZ25lZCBzaG9ydCkweDAwKTsKIAotCi0Jb3VyX3RhcmdldCA9IChVQ0hBUikoUkRfSEFSUE9PTihwb3J0K2hwX3NlbGVjdF9pZCkgPj4gNCk7CisJb3VyX3RhcmdldCA9ICh1bnNpZ25lZCBjaGFyKShSRF9IQVJQT09OKHBvcnQgKyBocF9zZWxlY3RfaWQpID4+IDQpOwogCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW291cl90YXJnZXRdOwogCi0KIAltc2dSZXRyeUNvdW50ID0gMDsKLQlkbwotCXsKKwlkbyB7CiAKIAkJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bb3VyX3RhcmdldF07CiAJCXRhZyA9IDA7CiAKKwkJd2hpbGUgKCEoUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkpIHsKKwkJCWlmICghKFJEX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcpICYgU0NTSV9CU1kpKSB7CiAKLQkJd2hpbGUoIShSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkpCi0JCXsKLQkJCWlmICghIChSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTQ1NJX0JTWSkpCi0JCQl7Ci0KLQkJCQlXUldfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSwgUEhBU0UpOworCQkJCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIFBIQVNFKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0KIAotCQlXUldfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSwgUEhBU0UpOwotCQlpZiAoKFJEX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnKSAmIFNfU0NTSV9QSFopID09IFNfTVNHSV9QSCkKLQkJeworCQlXUldfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpLCBQSEFTRSk7CisJCWlmICgoUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZykgJiBTX1NDU0lfUEhaKSA9PSBTX01TR0lfUEgpIHsKIAotCQkJbWVzc2FnZSA9IEZQVF9zZm0ocG9ydCxwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCKTsKLQkJCWlmIChtZXNzYWdlKQotCQkJeworCQkJbWVzc2FnZSA9IEZQVF9zZm0ocG9ydCwgcEN1cnJDYXJkLT5jdXJyZW50U0NDQik7CisJCQlpZiAobWVzc2FnZSkgewogCi0JCQkJaWYgKG1lc3NhZ2UgPD0gKDB4ODAgfCBMVU5fTUFTSykpCi0JCQkJewotCQkJCQlsdW4gPSBtZXNzYWdlICYgKFVDSEFSKUxVTl9NQVNLOworCQkJCWlmIChtZXNzYWdlIDw9ICgweDgwIHwgTFVOX01BU0spKSB7CisJCQkJCWx1biA9IG1lc3NhZ2UgJiAodW5zaWduZWQgY2hhcilMVU5fTUFTSzsKIAotCQkJCQlpZiAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spID09IFRBR19RX1RSWUlORykKLQkJCQkJewotCQkJCQkJaWYgKGN1cnJUYXJfSW5mby0+VGFyVGFnUV9DbnQgIT0gMCkKLQkJCQkJCXsKKwkJCQkJaWYgKChjdXJyVGFyX0luZm8tPgorCQkJCQkgICAgIFRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSA9PQorCQkJCQkgICAgVEFHX1FfVFJZSU5HKSB7CisJCQkJCQlpZiAoY3VyclRhcl9JbmZvLT5UYXJUYWdRX0NudCAhPQorCQkJCQkJICAgIDApIHsKIAotCQkJCQkJCWlmICghKGN1cnJUYXJfSW5mby0+VGFyTFVOX0NBKSkKLQkJCQkJCQl7Ci0JCQkJCQkJCUFDQ0VQVF9NU0cocG9ydCk7ICAgIC8qUmVsZWFzZSB0aGUgQUNLIGZvciBJRCBtc2cuICovCisJCQkJCQkJaWYgKCEKKwkJCQkJCQkgICAgKGN1cnJUYXJfSW5mby0+CisJCQkJCQkJICAgICBUYXJMVU5fQ0EpKSB7CisJCQkJCQkJCUFDQ0VQVF9NU0cocG9ydCk7CS8qUmVsZWFzZSB0aGUgQUNLIGZvciBJRCBtc2cuICovCiAKLQotCQkJCQkJCQltZXNzYWdlID0gRlBUX3NmbShwb3J0LHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IpOwotCQkJCQkJCQlpZiAobWVzc2FnZSkKLQkJCQkJCQkJewotCQkJCQkJCQkJQUNDRVBUX01TRyhwb3J0KTsKKwkJCQkJCQkJbWVzc2FnZSA9CisJCQkJCQkJCSAgICBGUFRfc2ZtCisJCQkJCQkJCSAgICAocG9ydCwKKwkJCQkJCQkJICAgICBwQ3VyckNhcmQtPgorCQkJCQkJCQkgICAgIGN1cnJlbnRTQ0NCKTsKKwkJCQkJCQkJaWYgKG1lc3NhZ2UpIHsKKwkJCQkJCQkJCUFDQ0VQVF9NU0cKKwkJCQkJCQkJCSAgICAocG9ydCk7CiAJCQkJCQkJCX0KIAogCQkJCQkJCQllbHNlCi0gICAJCQkJCQkJCW1lc3NhZ2UgPSAwOworCQkJCQkJCQkJbWVzc2FnZQorCQkJCQkJCQkJICAgID0gMDsKIAotCQkJCQkJCQlpZihtZXNzYWdlICE9IDApCi0JCQkJCQkJCXsKLQkJCQkJCQkJCXRhZyA9IEZQVF9zZm0ocG9ydCxwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCKTsKKwkJCQkJCQkJaWYgKG1lc3NhZ2UgIT0KKwkJCQkJCQkJICAgIDApIHsKKwkJCQkJCQkJCXRhZyA9CisJCQkJCQkJCQkgICAgRlBUX3NmbQorCQkJCQkJCQkJICAgIChwb3J0LAorCQkJCQkJCQkJICAgICBwQ3VyckNhcmQtPgorCQkJCQkJCQkJICAgICBjdXJyZW50U0NDQik7CiAKLQkJCQkJCQkJCWlmICghKHRhZykpIAotCQkJCQkJCQkJCW1lc3NhZ2UgPSAwOworCQkJCQkJCQkJaWYgKCEKKwkJCQkJCQkJCSAgICAodGFnKSkKKwkJCQkJCQkJCQltZXNzYWdlCisJCQkJCQkJCQkJICAgID0KKwkJCQkJCQkJCQkgICAgMDsKIAkJCQkJCQkJfQogCi0JCQkJCQkJfSAvKkMuQS4gZXhpc3RzISAqLwotCi0JCQkJCQl9IC8qRW5kIFEgY250ICE9IDAgKi8KLQotCQkJCQl9IC8qRW5kIFRhZyBjbWRzIHN1cHBvcnRlZCEgKi8KLQotCQkJCX0gLypFbmQgdmFsaWQgSUQgbWVzc2FnZS4gICovCi0KLQkJCQllbHNlCi0JCQkJeworCQkJCQkJCX0KKwkJCQkJCQkvKkMuQS4gZXhpc3RzISAqLworCQkJCQkJfQorCQkJCQkJLypFbmQgUSBjbnQgIT0gMCAqLworCQkJCQl9CisJCQkJCS8qRW5kIFRhZyBjbWRzIHN1cHBvcnRlZCEgKi8KKwkJCQl9CisJCQkJLypFbmQgdmFsaWQgSUQgbWVzc2FnZS4gICovCisJCQkJZWxzZSB7CiAKIAkJCQkJQUNDRVBUX01TR19BVE4ocG9ydCk7CiAJCQkJfQogCi0JCQl9IC8qIEVuZCBnb29kIGlkIG1lc3NhZ2UuICovCi0KLQkJCWVsc2UKLQkJCXsKKwkJCX0KKwkJCS8qIEVuZCBnb29kIGlkIG1lc3NhZ2UuICovCisJCQllbHNlIHsKIAogCQkJCW1lc3NhZ2UgPSAwOwogCQkJfQotCQl9Ci0JCWVsc2UKLQkJeworCQl9IGVsc2UgewogCQkJQUNDRVBUX01TR19BVE4ocG9ydCk7CiAKLQkJICAgd2hpbGUgKCEoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgKFBIQVNFIHwgUkVTRVQpKSAmJgotCQkJICAhKFJEX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnKSAmIFNDU0lfUkVRKSAmJgotCQkJICAoUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcpICYgU0NTSV9CU1kpKSA7CisJCQl3aGlsZSAoIQorCQkJICAgICAgIChSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmCisJCQkJKFBIQVNFIHwgUkVTRVQpKQorCQkJICAgICAgICYmICEoUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkKKwkJCSAgICAgICAmJiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX0JTWSkpIDsKIAogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYobWVzc2FnZSA9PSAwKQotCQl7CisJCWlmIChtZXNzYWdlID09IDApIHsKIAkJCW1zZ1JldHJ5Q291bnQrKzsKLQkJCWlmKG1zZ1JldHJ5Q291bnQgPT0gMSkKLQkJCXsKKwkJCWlmIChtc2dSZXRyeUNvdW50ID09IDEpIHsKIAkJCQlGUFRfU2VuZE1zZyhwb3J0LCBTTVBBUklUWSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7CisJCQl9IGVsc2UgewogCQkJCUZQVF9TZW5kTXNnKHBvcnQsIFNNREVWX1JFU0VUKTsKIAotCQkJCUZQVF9zc3N5bmN2KHBvcnQsIG91cl90YXJnZXQsIE5BUlJPV19TQ1NJLGN1cnJUYXJfSW5mbyk7CisJCQkJRlBUX3Nzc3luY3YocG9ydCwgb3VyX3RhcmdldCwgTkFSUk9XX1NDU0ksCisJCQkJCSAgICBjdXJyVGFyX0luZm8pOwogCi0JCQkJaWYgKEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bb3VyX3RhcmdldF0uVGFyRUVWYWx1ZSAmIEVFX1NZTkNfTUFTSykgCi0JCQkJewotCQkJCi0JCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bb3VyX3RhcmdldF0uVGFyU3RhdHVzICY9IH5UQVJfU1lOQ19NQVNLOworCQkJCWlmIChGUFRfc2NjYk1nclRibFtwX2NhcmRdW291cl90YXJnZXRdLgorCQkJCSAgICBUYXJFRVZhbHVlICYgRUVfU1lOQ19NQVNLKSB7CisKKwkJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtvdXJfdGFyZ2V0XS4KKwkJCQkJICAgIFRhclN0YXR1cyAmPSB+VEFSX1NZTkNfTUFTSzsKIAogCQkJCX0KIAotCQkJCWlmIChGUFRfc2NjYk1nclRibFtwX2NhcmRdW291cl90YXJnZXRdLlRhckVFVmFsdWUgJiBFRV9XSURFX1NDU0kpIAotCQkJCXsKKwkJCQlpZiAoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtvdXJfdGFyZ2V0XS4KKwkJCQkgICAgVGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkgewogCi0JCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bb3VyX3RhcmdldF0uVGFyU3RhdHVzICY9IH5UQVJfV0lERV9NQVNLOworCQkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW291cl90YXJnZXRdLgorCQkJCQkgICAgVGFyU3RhdHVzICY9IH5UQVJfV0lERV9NQVNLOwogCQkJCX0KIAotCi0JCQkJRlBUX3F1ZXVlRmx1c2hUYXJnU2NjYihwX2NhcmQsIG91cl90YXJnZXQsIFNDQ0JfQ09NUExFVEUpOwotCQkJCUZQVF9TY2NiTWdyVGFibGVJbml0VGFyZ2V0KHBfY2FyZCxvdXJfdGFyZ2V0KTsKKwkJCQlGUFRfcXVldWVGbHVzaFRhcmdTY2NiKHBfY2FyZCwgb3VyX3RhcmdldCwKKwkJCQkJCSAgICAgICBTQ0NCX0NPTVBMRVRFKTsKKwkJCQlGUFRfU2NjYk1nclRhYmxlSW5pdFRhcmdldChwX2NhcmQsIG91cl90YXJnZXQpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQotCX13aGlsZShtZXNzYWdlID09IDApOworCX0gd2hpbGUgKG1lc3NhZ2UgPT0gMCk7CiAKLQotCi0JaWYoKChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCi0JCSgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkpCi0JeworCWlmICgoKHBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYKKwkgICAgICgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkpIHsKIAkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2x1bl0gPSAxOwotCQlwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCID0gcEN1cnJDYXJkLT5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT5MdW5EaXNjUV9JZHhbbHVuXV07Ci0JCWlmKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgIT0gTlVMTCkKLQkJeworCQlwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCID0KKwkJICAgIHBDdXJyQ2FyZC0+ZGlzY1FfVGJsW2N1cnJUYXJfSW5mby0+THVuRGlzY1FfSWR4W2x1bl1dOworCQlpZiAocEN1cnJDYXJkLT5jdXJyZW50U0NDQiAhPSBOVUxMKSB7CiAJCQlBQ0NFUFRfTVNHKHBvcnQpOwotCQl9Ci0JCWVsc2UgCi0JCXsKKwkJfSBlbHNlIHsKIAkJCUFDQ0VQVF9NU0dfQVROKHBvcnQpOwogCQl9Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlIHsKIAkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5WzBdID0gMTsKIAotCi0JCWlmICh0YWcpCi0JCXsKLQkJCWlmIChwQ3VyckNhcmQtPmRpc2NRX1RibFt0YWddICE9IE5VTEwpCi0JCQl7Ci0JCQkJcEN1cnJDYXJkLT5jdXJyZW50U0NDQiA9IHBDdXJyQ2FyZC0+ZGlzY1FfVGJsW3RhZ107Ci0JCSAJCWN1cnJUYXJfSW5mby0+VGFyVGFnUV9DbnQtLTsKKwkJaWYgKHRhZykgeworCQkJaWYgKHBDdXJyQ2FyZC0+ZGlzY1FfVGJsW3RhZ10gIT0gTlVMTCkgeworCQkJCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgPQorCQkJCSAgICBwQ3VyckNhcmQtPmRpc2NRX1RibFt0YWddOworCQkJCWN1cnJUYXJfSW5mby0+VGFyVGFnUV9DbnQtLTsKIAkJCQlBQ0NFUFRfTVNHKHBvcnQpOworCQkJfSBlbHNlIHsKKwkJCQlBQ0NFUFRfTVNHX0FUTihwb3J0KTsKIAkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCUFDQ0VQVF9NU0dfQVROKHBvcnQpOwotCQkJfQotCQl9ZWxzZQotCQl7Ci0JCQlwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCID0gcEN1cnJDYXJkLT5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT5MdW5EaXNjUV9JZHhbMF1dOwotCQkJaWYocEN1cnJDYXJkLT5jdXJyZW50U0NDQiAhPSBOVUxMKQotCQkJeworCQl9IGVsc2UgeworCQkJcEN1cnJDYXJkLT5jdXJyZW50U0NDQiA9CisJCQkgICAgcEN1cnJDYXJkLT5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT5MdW5EaXNjUV9JZHhbMF1dOworCQkJaWYgKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgIT0gTlVMTCkgewogCQkJCUFDQ0VQVF9NU0cocG9ydCk7Ci0JCQl9Ci0JCQllbHNlIAotCQkJeworCQkJfSBlbHNlIHsKIAkJCQlBQ0NFUFRfTVNHX0FUTihwb3J0KTsKIAkJCX0KIAkJfQogCX0KIAotCWlmKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgIT0gTlVMTCkKLQl7Ci0JCWlmKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gQUJPUlRfU1QpCi0JCXsKLQkJLyogRHVyaW5nIEFib3J0IFRhZyBjb21tYW5kLCB0aGUgdGFyZ2V0IGNvdWxkIGhhdmUgZ290IHJlLXNlbGVjdGVkCi0JCQlhbmQgY29tcGxldGVkIHRoZSBjb21tYW5kLiBDaGVjayB0aGUgc2VsZWN0IFEgYW5kIHJlbW92ZSB0aGUgQ0NCCi0JCQlpZiBpdCBpcyBpbiB0aGUgU2VsZWN0IFEgKi8KKwlpZiAocEN1cnJDYXJkLT5jdXJyZW50U0NDQiAhPSBOVUxMKSB7CisJCWlmIChwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IEFCT1JUX1NUKSB7CisJCQkvKiBEdXJpbmcgQWJvcnQgVGFnIGNvbW1hbmQsIHRoZSB0YXJnZXQgY291bGQgaGF2ZSBnb3QgcmUtc2VsZWN0ZWQKKwkJCSAgIGFuZCBjb21wbGV0ZWQgdGhlIGNvbW1hbmQuIENoZWNrIHRoZSBzZWxlY3QgUSBhbmQgcmVtb3ZlIHRoZSBDQ0IKKwkJCSAgIGlmIGl0IGlzIGluIHRoZSBTZWxlY3QgUSAqLwogCQkJRlBUX3F1ZXVlRmluZFNjY2IocEN1cnJDYXJkLT5jdXJyZW50U0NDQiwgcF9jYXJkKTsKIAkJfQogCX0KIAotCi0gICB3aGlsZSAoIShSRFdfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSkgJiAoUEhBU0UgfCBSRVNFVCkpICYmCi0JICAhKFJEX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnKSAmIFNDU0lfUkVRKSAmJgotCSAgKFJEX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnKSAmIFNDU0lfQlNZKSkgOworCXdoaWxlICghKFJEV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCkpICYgKFBIQVNFIHwgUkVTRVQpKSAmJgorCSAgICAgICAhKFJEX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcpICYgU0NTSV9SRVEpICYmCisJICAgICAgIChSRF9IQVJQT09OKHBvcnQgKyBocF9zY3Npc2lnKSAmIFNDU0lfQlNZKSkgOwogfQogCi1zdGF0aWMgdm9pZCBGUFRfU2VuZE1zZyhVTE9ORyBwb3J0LCBVQ0hBUiBtZXNzYWdlKQorc3RhdGljIHZvaWQgRlBUX1NlbmRNc2codW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIG1lc3NhZ2UpCiB7Ci0Jd2hpbGUoIShSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkpCi0JewotCQlpZiAoISAoUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcpICYgU0NTSV9CU1kpKQotCQl7CisJd2hpbGUgKCEoUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkpIHsKKwkJaWYgKCEoUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX0JTWSkpIHsKIAotCQkJV1JXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCksIFBIQVNFKTsKKwkJCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIFBIQVNFKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAotCVdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBQSEFTRSk7Ci0JaWYgKChSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTX1NDU0lfUEhaKSA9PSBTX01TR09fUEgpCi0JewotCQlXUldfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSwgKEJVU19GUkVFIHwgUEhBU0UgfCBYRkVSX0NOVF8wKSk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSwgUEhBU0UpOworCWlmICgoUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZykgJiBTX1NDU0lfUEhaKSA9PSBTX01TR09fUEgpIHsKKwkJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSwKKwkJCSAgICAoQlVTX0ZSRUUgfCBQSEFTRSB8IFhGRVJfQ05UXzApKTsKIAorCQlXUl9IQVJQT09OKHBvcnQgKyBocF9wb3J0Y3RybF8wLCBTQ1NJX0JVU19FTik7CiAKLQkJV1JfSEFSUE9PTihwb3J0K2hwX3BvcnRjdHJsXzAsIFNDU0lfQlVTX0VOKTsKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaWRhdGFfMCwgbWVzc2FnZSk7CiAKLQkJV1JfSEFSUE9PTihwb3J0K2hwX3Njc2lkYXRhXzAsbWVzc2FnZSk7Ci0KLQkJV1JfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcsIChTQ1NJX0FDSyArIFNfSUxMX1BIKSk7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcsIChTQ1NJX0FDSyArIFNfSUxMX1BIKSk7CiAKIAkJQUNDRVBUX01TRyhwb3J0KTsKIAotCQlXUl9IQVJQT09OKHBvcnQraHBfcG9ydGN0cmxfMCwgMHgwMCk7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX3BvcnRjdHJsXzAsIDB4MDApOwogCiAJCWlmICgobWVzc2FnZSA9PSBTTUFCT1JUKSB8fCAobWVzc2FnZSA9PSBTTURFVl9SRVNFVCkgfHwKLQkJCQkobWVzc2FnZSA9PSBTTUFCT1JUX1RBRykgKQotCQl7Ci0JCQl3aGlsZSghKFJEV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFBIQVNFKSkpIHt9CisJCSAgICAobWVzc2FnZSA9PSBTTUFCT1JUX1RBRykpIHsKKwkJCXdoaWxlICghCisJCQkgICAgICAgKFJEV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCkpICYKKwkJCQkoQlVTX0ZSRUUgfCBQSEFTRSkpKSB7CisJCQl9CiAKLQkJCWlmIChSRFdfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSkgJiBCVVNfRlJFRSkKLQkJCXsKLQkJCVdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBCVVNfRlJFRSk7CisJCQlpZiAoUkRXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSkgJiBCVVNfRlJFRSkgeworCQkJCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIEJVU19GUkVFKTsKIAkJCX0KIAkJfQogCX0KQEAgLTM0ODEsMTc4ICsyOTA4LDE4MCBAQAogICogICAgICAgICAgICAgIHRhcmdldCBkZXZpY2UuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgRlBUX3NkZWNtKFVDSEFSIG1lc3NhZ2UsIFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9zZGVjbSh1bnNpZ25lZCBjaGFyIG1lc3NhZ2UsIHVuc2lnbmVkIGxvbmcgcG9ydCwKKwkJICAgICAgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0JUFNDQ0IgY3VyclNDQ0I7Ci0JUFNDQ0JjYXJkIEN1cnJDYXJkOwotCVBTQ0NCTWdyX3Rhcl9pbmZvIGN1cnJUYXJfSW5mbzsKKwlzdHJ1Y3Qgc2NjYiAqY3VyclNDQ0I7CisJc3RydWN0IHNjY2JfY2FyZCAqQ3VyckNhcmQ7CisJc3RydWN0IHNjY2JfbWdyX3Rhcl9pbmZvICpjdXJyVGFyX0luZm87CiAKIAlDdXJyQ2FyZCA9ICZGUFRfQkxfQ2FyZFtwX2NhcmRdOwogCWN1cnJTQ0NCID0gQ3VyckNhcmQtPmN1cnJlbnRTQ0NCOwogCiAJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF07CiAKLQlpZiAobWVzc2FnZSA9PSBTTVJFU1RfREFUQV9QVFIpCi0JewotCQlpZiAoIShjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX05PX0RBVEFfWUVUKSkKLQkJeworCWlmIChtZXNzYWdlID09IFNNUkVTVF9EQVRBX1BUUikgeworCQlpZiAoIShjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX05PX0RBVEFfWUVUKSkgewogCQkJY3VyclNDQ0ItPlNjY2JfQVRDID0gY3VyclNDQ0ItPlNjY2Jfc2F2ZWRBVEM7CiAKIAkJCUZQVF9ob3N0RGF0YVhmZXJSZXN0YXJ0KGN1cnJTQ0NCKTsKIAkJfQogCiAJCUFDQ0VQVF9NU0cocG9ydCk7Ci0JCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMSwgKEFVVE9fSU1NRUQrRElTQ09OTkVDVF9TVEFSVCkpOworCQlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMSwKKwkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOwogCX0KIAotCWVsc2UgaWYgKG1lc3NhZ2UgPT0gU01DTURfQ09NUCkKLQl7CisJZWxzZSBpZiAobWVzc2FnZSA9PSBTTUNNRF9DT01QKSB7CiAKLQotCQlpZiAoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1FfU1QpCi0JCXsKLQkJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICY9IH4oVUNIQVIpVEFSX1RBR19RX01BU0s7Ci0JCQljdXJyVGFyX0luZm8tPlRhclN0YXR1cyB8PSAoVUNIQVIpVEFHX1FfUkVKRUNUOworCQlpZiAoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1FfU1QpIHsKKwkJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICY9CisJCQkgICAgfih1bnNpZ25lZCBjaGFyKVRBUl9UQUdfUV9NQVNLOworCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgfD0gKHVuc2lnbmVkIGNoYXIpVEFHX1FfUkVKRUNUOwogCQl9CiAKIAkJQUNDRVBUX01TRyhwb3J0KTsKIAogCX0KIAotCWVsc2UgaWYgKChtZXNzYWdlID09IFNNTk9fT1ApIHx8IChtZXNzYWdlID49IFNNSURFTlQpIAotCQkJfHwgKG1lc3NhZ2UgPT0gU01JTklUX1JFQ09WRVJZKSB8fCAobWVzc2FnZSA9PSBTTVJFTF9SRUNPVkVSWSkpCi0JeworCWVsc2UgaWYgKChtZXNzYWdlID09IFNNTk9fT1ApIHx8IChtZXNzYWdlID49IFNNSURFTlQpCisJCSB8fCAobWVzc2FnZSA9PSBTTUlOSVRfUkVDT1ZFUlkpIHx8IChtZXNzYWdlID09IFNNUkVMX1JFQ09WRVJZKSkgewogCiAJCUFDQ0VQVF9NU0cocG9ydCk7Ci0JCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMSwgKEFVVE9fSU1NRUQrRElTQ09OTkVDVF9TVEFSVCkpOworCQlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMSwKKwkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOwogCX0KIAotCWVsc2UgaWYgKG1lc3NhZ2UgPT0gU01SRUpFQ1QpCi0JeworCWVsc2UgaWYgKG1lc3NhZ2UgPT0gU01SRUpFQ1QpIHsKIAogCQlpZiAoKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9TTl9TVCkgfHwKLQkJCQkoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1dOX1NUKSB8fAotCQkJCSgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfU1lOQ19NQVNLKSA9PSBTWU5DX1RSWUlORyApIHx8Ci0JCQkJKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSA9PSBUQUdfUV9UUllJTkcgKSApCi0KKwkJICAgIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9PSBTRUxFQ1RfV05fU1QpIHx8CisJCSAgICAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1NZTkNfTUFTSykgPT0gU1lOQ19UUllJTkcpCisJCSAgICB8fCAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spID09CisJCQlUQUdfUV9UUllJTkcpKQogCQl7Ci0JCQlXUldfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSwgQlVTX0ZSRUUpOworCQkJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSwgQlVTX0ZSRUUpOwogCiAJCQlBQ0NFUFRfTVNHKHBvcnQpOwogCi0KLQkJCXdoaWxlICgoIShSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkpICYmCi0JCQkJKCEoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgQlVTX0ZSRUUpKSkge30KLQotCQkJaWYoY3VyclNDQ0ItPkx1biA9PSAweDAwKQorCQkJd2hpbGUgKCghKFJEX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcpICYgU0NTSV9SRVEpKSAmJgorCQkJICAgICAgICghKFJEV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCkpICYgQlVTX0ZSRUUpKSkKIAkJCXsKLQkJCQlpZiAoKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9TTl9TVCkpCi0JCQkJeworCQkJfQogCi0JCQkJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzIHw9IChVQ0hBUilTWU5DX1NVUFBPUlRFRDsKKwkJCWlmIChjdXJyU0NDQi0+THVuID09IDB4MDApIHsKKwkJCQlpZiAoKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9TTl9TVCkpIHsKIAotCQkJCQljdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJj0gfkVFX1NZTkNfTUFTSzsKKwkJCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgfD0KKwkJCQkJICAgICh1bnNpZ25lZCBjaGFyKVNZTkNfU1VQUE9SVEVEOworCisJCQkJCWN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmPQorCQkJCQkgICAgfkVFX1NZTkNfTUFTSzsKIAkJCQl9CiAKLQkJCQllbHNlIGlmICgoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1dOX1NUKSkKLQkJCQl7CisJCQkJZWxzZSBpZiAoKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09CisJCQkJCSAgU0VMRUNUX1dOX1NUKSkgewogCisJCQkJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzID0KKwkJCQkJICAgIChjdXJyVGFyX0luZm8tPgorCQkJCQkgICAgIFRhclN0YXR1cyAmIH5XSURFX0VOQUJMRUQpIHwKKwkJCQkJICAgIFdJREVfTkVHT0NJQVRFRDsKIAotCQkJCQljdXJyVGFyX0luZm8tPlRhclN0YXR1cyA9IChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmCi0JCQkJCQkJCQkJCQkJfldJREVfRU5BQkxFRCkgfCBXSURFX05FR09DSUFURUQ7Ci0KLQkJCQkJY3VyclRhcl9JbmZvLT5UYXJFRVZhbHVlICY9IH5FRV9XSURFX1NDU0k7CisJCQkJCWN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmPQorCQkJCQkgICAgfkVFX1dJREVfU0NTSTsKIAogCQkJCX0KIAotCQkJCWVsc2UgaWYgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSA9PSBUQUdfUV9UUllJTkcgKQotCQkJCXsKLQkJCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgPSAoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJgotCQkJCQkJCQkJCQkJCX4oVUNIQVIpVEFSX1RBR19RX01BU0spIHwgVEFHX1FfUkVKRUNUOwotCisJCQkJZWxzZSBpZiAoKGN1cnJUYXJfSW5mby0+CisJCQkJCSAgVGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spID09CisJCQkJCSBUQUdfUV9UUllJTkcpIHsKKwkJCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgPQorCQkJCQkgICAgKGN1cnJUYXJfSW5mby0+CisJCQkJCSAgICAgVGFyU3RhdHVzICYgfih1bnNpZ25lZCBjaGFyKQorCQkJCQkgICAgIFRBUl9UQUdfUV9NQVNLKSB8IFRBR19RX1JFSkVDVDsKIAogCQkJCQljdXJyU0NDQi0+Q29udHJvbEJ5dGUgJj0gfkZfVVNFX0NNRF9ROwogCQkJCQlDdXJyQ2FyZC0+ZGlzY1FDb3VudC0tOwotCQkJCQlDdXJyQ2FyZC0+ZGlzY1FfVGJsW2N1cnJTQ0NCLT5TY2NiX3RhZ10gPSBOVUxMOworCQkJCQlDdXJyQ2FyZC0+ZGlzY1FfVGJsW2N1cnJTQ0NCLT4KKwkJCQkJCQkgICAgU2NjYl90YWddID0gTlVMTDsKIAkJCQkJY3VyclNDQ0ItPlNjY2JfdGFnID0gMHgwMDsKIAogCQkJCX0KIAkJCX0KIAotCQkJaWYgKFJEV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpKSAmIEJVU19GUkVFKQotCQkJeworCQkJaWYgKFJEV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCkpICYgQlVTX0ZSRUUpIHsKIAotCi0JCQkJaWYoY3VyclNDQ0ItPkx1biA9PSAweDAwKQotCQkJCXsKLQkJCQkJV1JXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCksIEJVU19GUkVFKTsKKwkJCQlpZiAoY3VyclNDQ0ItPkx1biA9PSAweDAwKSB7CisJCQkJCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksCisJCQkJCQkgICAgQlVTX0ZSRUUpOwogCQkJCQlDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9ORVdfU0NDQl9DTUQ7CiAJCQkJfQogCQkJfQogCi0JCQllbHNlIAotCQkJeworCQkJZWxzZSB7CiAKLQkJCQlpZigoQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCi0JCQkJCSgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkKLQkJCQkJY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5W2N1cnJTQ0NCLT5MdW5dID0gMTsKKwkJCQlpZiAoKEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgorCQkJCSAgICAoKGN1cnJUYXJfSW5mby0+CisJCQkJICAgICAgVGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9CisJCQkJICAgICBUQUdfUV9UUllJTkcpKQorCQkJCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbY3VyclNDQ0ItPgorCQkJCQkJCQkgTHVuXSA9IDE7CiAJCQkJZWxzZQogCQkJCQljdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbMF0gPSAxOwogCisJCQkJY3VyclNDQ0ItPkNvbnRyb2xCeXRlICY9CisJCQkJICAgIH4odW5zaWduZWQgY2hhcilGX1VTRV9DTURfUTsKIAotCQkJCWN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmPSB+KFVDSEFSKUZfVVNFX0NNRF9ROwotCi0JCQkJV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8xLCAoQVVUT19JTU1FRCtESVNDT05ORUNUX1NUQVJUKSk7CisJCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzEsCisJCQkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOwogCiAJCQl9CiAJCX0KIAotCQllbHNlCi0JCXsKKwkJZWxzZSB7CiAJCQlBQ0NFUFRfTVNHKHBvcnQpOwogCi0JCQl3aGlsZSAoKCEoUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcpICYgU0NTSV9SRVEpKSAmJgotCQkJCSghKFJEV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpKSAmIEJVU19GUkVFKSkpIHt9Ci0JCi0JCQlpZiAoIShSRFdfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSkgJiBCVVNfRlJFRSkpCisJCQl3aGlsZSAoKCEoUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkpICYmCisJCQkgICAgICAgKCEoUkRXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSkgJiBCVVNfRlJFRSkpKQogCQkJewotCQkJCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMSwgKEFVVE9fSU1NRUQrRElTQ09OTkVDVF9TVEFSVCkpOworCQkJfQorCisJCQlpZiAoIShSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmIEJVU19GUkVFKSkgeworCQkJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8xLAorCQkJCQkgICAoQVVUT19JTU1FRCArIERJU0NPTk5FQ1RfU1RBUlQpKTsKIAkJCX0KIAkJfQogCX0KIAotCWVsc2UgaWYgKG1lc3NhZ2UgPT0gU01FWFQpCi0JeworCWVsc2UgaWYgKG1lc3NhZ2UgPT0gU01FWFQpIHsKIAogCQlBQ0NFUFRfTVNHKHBvcnQpOwotCQlGUFRfc2hhbmRlbShwb3J0LHBfY2FyZCxjdXJyU0NDQik7CisJCUZQVF9zaGFuZGVtKHBvcnQsIHBfY2FyZCwgY3VyclNDQ0IpOwogCX0KIAotCWVsc2UgaWYgKG1lc3NhZ2UgPT0gU01JR05PUldSKQotCXsKKwllbHNlIGlmIChtZXNzYWdlID09IFNNSUdOT1JXUikgewogCi0JCUFDQ0VQVF9NU0cocG9ydCk7ICAgICAgICAgIC8qIEFDSyB0aGUgUkVTSURVRSBNU0cgKi8KKwkJQUNDRVBUX01TRyhwb3J0KTsJLyogQUNLIHRoZSBSRVNJRFVFIE1TRyAqLwogCi0JCW1lc3NhZ2UgPSBGUFRfc2ZtKHBvcnQsY3VyclNDQ0IpOworCQltZXNzYWdlID0gRlBUX3NmbShwb3J0LCBjdXJyU0NDQik7CiAKLQkJaWYoY3VyclNDQ0ItPlNjY2Jfc2NzaW1zZyAhPSBTTVBBUklUWSkKKwkJaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgIT0gU01QQVJJVFkpCiAJCQlBQ0NFUFRfTVNHKHBvcnQpOwotCQlXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzEsIChBVVRPX0lNTUVEK0RJU0NPTk5FQ1RfU1RBUlQpKTsKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzEsCisJCQkgICAoQVVUT19JTU1FRCArIERJU0NPTk5FQ1RfU1RBUlQpKTsKIAl9CiAKLQotCWVsc2UKLQl7CisJZWxzZSB7CiAKIAkJY3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX1BIQVNFX1NFUVVFTkNFX0ZBSUw7CiAJCWN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgPSBTTVJFSkVDVDsKIAogCQlBQ0NFUFRfTVNHX0FUTihwb3J0KTsKLQkJV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8xLCAoQVVUT19JTU1FRCtESVNDT05ORUNUX1NUQVJUKSk7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8xLAorCQkJICAgKEFVVE9fSU1NRUQgKyBESVNDT05ORUNUX1NUQVJUKSk7CiAJfQogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zaGFuZGVtCkBAIC0zNjYwLDc2ICszMDg5LDY1IEBACiAgKiBEZXNjcmlwdGlvbjogRGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgZXh0ZW5kZWQgbWVzc2FnZS4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBGUFRfc2hhbmRlbShVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQsIFBTQ0NCIHBDdXJyU0NDQikKK3N0YXRpYyB2b2lkIEZQVF9zaGFuZGVtKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQsCisJCQlzdHJ1Y3Qgc2NjYiAqcEN1cnJTQ0NCKQogewotCVVDSEFSIGxlbmd0aCxtZXNzYWdlOworCXVuc2lnbmVkIGNoYXIgbGVuZ3RoLCBtZXNzYWdlOwogCi0JbGVuZ3RoID0gRlBUX3NmbShwb3J0LHBDdXJyU0NDQik7Ci0JaWYgKGxlbmd0aCkgCi0JeworCWxlbmd0aCA9IEZQVF9zZm0ocG9ydCwgcEN1cnJTQ0NCKTsKKwlpZiAobGVuZ3RoKSB7CiAKIAkJQUNDRVBUX01TRyhwb3J0KTsKLQkJbWVzc2FnZSA9IEZQVF9zZm0ocG9ydCxwQ3VyclNDQ0IpOwotCQlpZiAobWVzc2FnZSkgCi0JCXsKKwkJbWVzc2FnZSA9IEZQVF9zZm0ocG9ydCwgcEN1cnJTQ0NCKTsKKwkJaWYgKG1lc3NhZ2UpIHsKIAotCQkJaWYgKG1lc3NhZ2UgPT0gU01TWU5DKSAKLQkJCXsKKwkJCWlmIChtZXNzYWdlID09IFNNU1lOQykgewogCi0JCQkJaWYgKGxlbmd0aCA9PSAweDAzKQotCQkJCXsKKwkJCQlpZiAobGVuZ3RoID09IDB4MDMpIHsKIAogCQkJCQlBQ0NFUFRfTVNHKHBvcnQpOwotCQkJCQlGUFRfc3RzeW5jbihwb3J0LHBfY2FyZCk7Ci0JCQkJfQotCQkJCWVsc2UgCi0JCQkJeworCQkJCQlGUFRfc3RzeW5jbihwb3J0LCBwX2NhcmQpOworCQkJCX0gZWxzZSB7CiAKIAkJCQkJcEN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgPSBTTVJFSkVDVDsKIAkJCQkJQUNDRVBUX01TR19BVE4ocG9ydCk7CiAJCQkJfQotCQkJfQotCQkJZWxzZSBpZiAobWVzc2FnZSA9PSBTTVdEVFIpIAotCQkJeworCQkJfSBlbHNlIGlmIChtZXNzYWdlID09IFNNV0RUUikgewogCi0JCQkJaWYgKGxlbmd0aCA9PSAweDAyKQotCQkJCXsKKwkJCQlpZiAobGVuZ3RoID09IDB4MDIpIHsKIAogCQkJCQlBQ0NFUFRfTVNHKHBvcnQpOwotCQkJCQlGUFRfc3R3aWRuKHBvcnQscF9jYXJkKTsKLQkJCQl9Ci0JCQkJZWxzZSAKLQkJCQl7CisJCQkJCUZQVF9zdHdpZG4ocG9ydCwgcF9jYXJkKTsKKwkJCQl9IGVsc2UgewogCiAJCQkJCXBDdXJyU0NDQi0+U2NjYl9zY3NpbXNnID0gU01SRUpFQ1Q7CiAJCQkJCUFDQ0VQVF9NU0dfQVROKHBvcnQpOwogCi0JCQkJCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMSwgKEFVVE9fSU1NRUQrRElTQ09OTkVDVF9TVEFSVCkpOworCQkJCQlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMSwKKwkJCQkJCSAgIChBVVRPX0lNTUVEICsKKwkJCQkJCSAgICBESVNDT05ORUNUX1NUQVJUKSk7CiAJCQkJfQotCQkJfQotCQkJZWxzZSAKLQkJCXsKKwkJCX0gZWxzZSB7CiAKIAkJCQlwQ3VyclNDQ0ItPlNjY2Jfc2NzaW1zZyA9IFNNUkVKRUNUOwogCQkJCUFDQ0VQVF9NU0dfQVROKHBvcnQpOwogCi0JCQkJV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8xLCAoQVVUT19JTU1FRCtESVNDT05ORUNUX1NUQVJUKSk7CisJCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzEsCisJCQkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOwogCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYocEN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgIT0gU01QQVJJVFkpCisJCX0gZWxzZSB7CisJCQlpZiAocEN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgIT0gU01QQVJJVFkpCiAJCQkJQUNDRVBUX01TRyhwb3J0KTsKLQkJCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMSwgKEFVVE9fSU1NRUQrRElTQ09OTkVDVF9TVEFSVCkpOworCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzEsCisJCQkJICAgKEFVVE9fSU1NRUQgKyBESVNDT05ORUNUX1NUQVJUKSk7CiAJCX0KLQl9ZWxzZQotCXsKLQkJCWlmKHBDdXJyU0NDQi0+U2NjYl9zY3NpbXNnID09IFNNUEFSSVRZKQotCQkJCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMSwgKEFVVE9fSU1NRUQrRElTQ09OTkVDVF9TVEFSVCkpOworCX0gZWxzZSB7CisJCWlmIChwQ3VyclNDQ0ItPlNjY2Jfc2NzaW1zZyA9PSBTTVBBUklUWSkKKwkJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8xLAorCQkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOwogCX0KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2lzeW5jbgpAQCAtMzczOSw3MyArMzE1Nyw3OSBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIFVDSEFSIEZQVF9zaXN5bmNuKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCwgVUNIQVIgc3luY0ZsYWcpCitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfc2lzeW5jbih1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgcF9jYXJkLAorCQkJCSB1bnNpZ25lZCBjaGFyIHN5bmNGbGFnKQogewotICAgUFNDQ0IgY3VyclNDQ0I7Ci0gICBQU0NDQk1ncl90YXJfaW5mbyBjdXJyVGFyX0luZm87CisJc3RydWN0IHNjY2IgKmN1cnJTQ0NCOworCXN0cnVjdCBzY2NiX21ncl90YXJfaW5mbyAqY3VyclRhcl9JbmZvOwogCi0gICBjdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7Ci0gICBjdXJyVGFyX0luZm8gPSAmRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXTsKKwljdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7CisJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF07CiAKLSAgIGlmICghKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9TWU5DX01BU0spID09IFNZTkNfVFJZSU5HKSkgeworCWlmICghKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9TWU5DX01BU0spID09IFNZTkNfVFJZSU5HKSkgewogCisJCVdSV19IQVJQT09OKChwb3J0ICsgSURfTVNHX1NUUlQpLAorCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArCisJCQkgICAgIChjdXJyU0NDQi0+CisJCQkgICAgICBTY2NiX2lkbXNnICYgfih1bnNpZ25lZCBjaGFyKURJU0NfUFJJVikpKTsKIAotICAgICAgV1JXX0hBUlBPT04oKHBvcnQrSURfTVNHX1NUUlQpLAotICAgICAgICAgICAgICAgICAoTVBNX09QK0FNU0dfT1VUKyhjdXJyU0NDQi0+U2NjYl9pZG1zZyAmIH4oVUNIQVIpRElTQ19QUklWKSkpOworCQlXUldfSEFSUE9PTigocG9ydCArIElEX01TR19TVFJUICsgMiksIEJSSF9PUCArIEFMV0FZUyArIENNRFBaKTsKIAotICAgICAgV1JXX0hBUlBPT04oKHBvcnQrSURfTVNHX1NUUlQrMiksQlJIX09QK0FMV0FZUytDTURQWik7CisJCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgMCksCisJCQkgICAgKE1QTV9PUCArIEFNU0dfT1VUICsgU01FWFQpKTsKKwkJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyAyKSwgKE1QTV9PUCArIEFNU0dfT1VUICsgMHgwMykpOworCQlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDQpLAorCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArIFNNU1lOQykpOwogCi0gICAgICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrMCksIChNUE1fT1ArQU1TR19PVVQrU01FWFQgKSk7Ci0gICAgICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrMiksIChNUE1fT1ArQU1TR19PVVQrMHgwMyAgKSk7Ci0gICAgICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrNCksIChNUE1fT1ArQU1TR19PVVQrU01TWU5DKSk7CisJCWlmICgoY3VyclRhcl9JbmZvLT5UYXJFRVZhbHVlICYgRUVfU1lOQ19NQVNLKSA9PSBFRV9TWU5DXzIwTUIpCiAKKwkJCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgNiksCisJCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArIDEyKSk7CiAKLSAgICAgIGlmICgoY3VyclRhcl9JbmZvLT5UYXJFRVZhbHVlICYgRUVfU1lOQ19NQVNLKSA9PSBFRV9TWU5DXzIwTUIpCisJCWVsc2UgaWYgKChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spID09CisJCQkgRUVfU1lOQ18xME1CKQogCi0JIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUys2KSwgKE1QTV9PUCtBTVNHX09VVCsgMTIpKTsKKwkJCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgNiksCisJCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArIDI1KSk7CiAKLSAgICAgIGVsc2UgaWYgKChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spID09IEVFX1NZTkNfMTBNQikKKwkJZWxzZSBpZiAoKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1NZTkNfTUFTSykgPT0KKwkJCSBFRV9TWU5DXzVNQikKIAotCSBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrNiksIChNUE1fT1ArQU1TR19PVVQrIDI1KSk7CisJCQlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDYpLAorCQkJCSAgICAoTVBNX09QICsgQU1TR19PVVQgKyA1MCkpOwogCi0gICAgICBlbHNlIGlmICgoY3VyclRhcl9JbmZvLT5UYXJFRVZhbHVlICYgRUVfU1lOQ19NQVNLKSA9PSBFRV9TWU5DXzVNQikKLQotCSBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrNiksIChNUE1fT1ArQU1TR19PVVQrIDUwKSk7Ci0KLSAgICAgIGVsc2UKLQkgV1JXX0hBUlBPT04oKHBvcnQrU1lOQ19NU0dTKzYpLCAoTVBNX09QK0FNU0dfT1VUKyAwMCkpOwotCi0KLSAgICAgIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUys4KSwgKFJBVF9PUCAgICAgICAgICAgICAgICApKTsKLSAgICAgIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUysxMCksKE1QTV9PUCtBTVNHX09VVCtERUZBVUxUX09GRlNFVCkpOwotICAgICAgV1JXX0hBUlBPT04oKHBvcnQrU1lOQ19NU0dTKzEyKSwoQlJIX09QK0FMV0FZUytOUCAgICAgICkpOwotCi0KLQkJaWYoc3luY0ZsYWcgPT0gMCkKLQkJewotCQkgICBXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzMsIChTRUxFQ1QrU0VMQ0hLX1NUUlQpKTsKLQkgICAgICBjdXJyVGFyX0luZm8tPlRhclN0YXR1cyA9ICgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJgotICAgCSAgICAgIH4oVUNIQVIpVEFSX1NZTkNfTUFTSykgfCAoVUNIQVIpU1lOQ19UUllJTkcpOwotCQl9CiAJCWVsc2UKLQkJewotCQkgICBXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzMsIChBVVRPX0lNTUVEICsgQ01EX09OTFlfU1RSVCkpOworCQkJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyA2KSwKKwkJCQkgICAgKE1QTV9PUCArIEFNU0dfT1VUICsgMDApKTsKKworCQlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDgpLCAoUkFUX09QKSk7CisJCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgMTApLAorCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArIERFRkFVTFRfT0ZGU0VUKSk7CisJCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgMTIpLCAoQlJIX09QICsgQUxXQVlTICsgTlApKTsKKworCQlpZiAoc3luY0ZsYWcgPT0gMCkgeworCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzMsCisJCQkJICAgKFNFTEVDVCArIFNFTENIS19TVFJUKSk7CisJCQljdXJyVGFyX0luZm8tPlRhclN0YXR1cyA9CisJCQkgICAgKChjdXJyVGFyX0luZm8tPgorCQkJICAgICAgVGFyU3RhdHVzICYgfih1bnNpZ25lZCBjaGFyKVRBUl9TWU5DX01BU0spIHwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIpU1lOQ19UUllJTkcpOworCQl9IGVsc2UgeworCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzMsCisJCQkJICAgKEFVVE9fSU1NRUQgKyBDTURfT05MWV9TVFJUKSk7CiAJCX0KIAorCQlyZXR1cm4gMTsKKwl9CiAKLSAgICAgIHJldHVybigxKTsKLSAgICAgIH0KKwllbHNlIHsKIAotICAgZWxzZSB7Ci0KLSAgICAgIGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzIHw9CSAoVUNIQVIpU1lOQ19TVVBQT1JURUQ7Ci0gICAgICBjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJj0gfkVFX1NZTkNfTUFTSzsKLSAgICAgIHJldHVybigwKTsKLSAgICAgIH0KKwkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgfD0gKHVuc2lnbmVkIGNoYXIpU1lOQ19TVVBQT1JURUQ7CisJCWN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmPSB+RUVfU1lOQ19NQVNLOworCQlyZXR1cm4gMDsKKwl9CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc3RzeW5jbgpAQCAtMzgxNCwxMzEgKzMyMzgsMTI4IEBACiAgKiAgICAgICAgICAgICAgbmVjZXNzYXJ5LgogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIEZQVF9zdHN5bmNuKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9zdHN5bmNuKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICBVQ0hBUiBzeW5jX21zZyxvZmZzZXQsc3luY19yZWcsb3VyX3N5bmNfbXNnOwotICAgUFNDQ0IgY3VyclNDQ0I7Ci0gICBQU0NDQk1ncl90YXJfaW5mbyBjdXJyVGFyX0luZm87CisJdW5zaWduZWQgY2hhciBzeW5jX21zZywgb2Zmc2V0LCBzeW5jX3JlZywgb3VyX3N5bmNfbXNnOworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotICAgY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOwotICAgY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF07CisJY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOworCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdOwogCi0gICBzeW5jX21zZyA9IEZQVF9zZm0ocG9ydCxjdXJyU0NDQik7CisJc3luY19tc2cgPSBGUFRfc2ZtKHBvcnQsIGN1cnJTQ0NCKTsKIAotCWlmKChzeW5jX21zZyA9PSAweDAwKSAmJiAoY3VyclNDQ0ItPlNjY2Jfc2NzaW1zZyA9PSBTTVBBUklUWSkpCi0JewotCQlXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzEsIChBVVRPX0lNTUVEK0RJU0NPTk5FQ1RfU1RBUlQpKTsKKwlpZiAoKHN5bmNfbXNnID09IDB4MDApICYmIChjdXJyU0NDQi0+U2NjYl9zY3NpbXNnID09IFNNUEFSSVRZKSkgeworCQlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMSwKKwkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOwogCQlyZXR1cm47CiAJfQogCi0gICBBQ0NFUFRfTVNHKHBvcnQpOworCUFDQ0VQVF9NU0cocG9ydCk7CiAKKwlvZmZzZXQgPSBGUFRfc2ZtKHBvcnQsIGN1cnJTQ0NCKTsKIAotICAgb2Zmc2V0ID0gRlBUX3NmbShwb3J0LGN1cnJTQ0NCKTsKLQotCWlmKChvZmZzZXQgPT0gMHgwMCkgJiYgKGN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgPT0gU01QQVJJVFkpKQotCXsKLQkJV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8xLCAoQVVUT19JTU1FRCtESVNDT05ORUNUX1NUQVJUKSk7CisJaWYgKChvZmZzZXQgPT0gMHgwMCkgJiYgKGN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgPT0gU01QQVJJVFkpKSB7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8xLAorCQkJICAgKEFVVE9fSU1NRUQgKyBESVNDT05ORUNUX1NUQVJUKSk7CiAJCXJldHVybjsKIAl9CiAKLSAgIGlmICgoY3VyclRhcl9JbmZvLT5UYXJFRVZhbHVlICYgRUVfU1lOQ19NQVNLKSA9PSBFRV9TWU5DXzIwTUIpCisJaWYgKChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spID09IEVFX1NZTkNfMjBNQikKIAotICAgICAgb3VyX3N5bmNfbXNnID0gMTI7ICAgICAgICAgICAgICAvKiBTZXR1cCBvdXIgTWVzc2FnZSB0byAyMG1iL3MgKi8KKwkJb3VyX3N5bmNfbXNnID0gMTI7CS8qIFNldHVwIG91ciBNZXNzYWdlIHRvIDIwbWIvcyAqLwogCi0gICBlbHNlIGlmICgoY3VyclRhcl9JbmZvLT5UYXJFRVZhbHVlICYgRUVfU1lOQ19NQVNLKSA9PSBFRV9TWU5DXzEwTUIpCisJZWxzZSBpZiAoKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1NZTkNfTUFTSykgPT0gRUVfU1lOQ18xME1CKQogCi0gICAgICBvdXJfc3luY19tc2cgPSAyNTsgICAgICAgICAgICAgIC8qIFNldHVwIG91ciBNZXNzYWdlIHRvIDEwbWIvcyAqLworCQlvdXJfc3luY19tc2cgPSAyNTsJLyogU2V0dXAgb3VyIE1lc3NhZ2UgdG8gMTBtYi9zICovCiAKLSAgIGVsc2UgaWYgKChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spID09IEVFX1NZTkNfNU1CKQorCWVsc2UgaWYgKChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spID09IEVFX1NZTkNfNU1CKQogCi0gICAgICBvdXJfc3luY19tc2cgPSA1MDsgICAgICAgICAgICAgIC8qIFNldHVwIG91ciBNZXNzYWdlIHRvIDVtYi9zICovCi0gICBlbHNlCisJCW91cl9zeW5jX21zZyA9IDUwOwkvKiBTZXR1cCBvdXIgTWVzc2FnZSB0byA1bWIvcyAqLworCWVsc2UKIAotICAgICAgb3VyX3N5bmNfbXNnID0gMDsgICAgICAgICAgICAgICAvKiBNZXNzYWdlID0gQXN5bmMgKi8KKwkJb3VyX3N5bmNfbXNnID0gMDsJLyogTWVzc2FnZSA9IEFzeW5jICovCiAKLSAgIGlmIChzeW5jX21zZyA8IG91cl9zeW5jX21zZykgewotICAgICAgc3luY19tc2cgPSBvdXJfc3luY19tc2c7ICAgIC8qaWYgZmFzdGVyLCB0aGVuIHNldCB0byBtYXguICovCi0gICAgICB9CisJaWYgKHN5bmNfbXNnIDwgb3VyX3N5bmNfbXNnKSB7CisJCXN5bmNfbXNnID0gb3VyX3N5bmNfbXNnOwkvKmlmIGZhc3RlciwgdGhlbiBzZXQgdG8gbWF4LiAqLworCX0KIAotICAgaWYgKG9mZnNldCA9PSBBU1lOQykKLSAgICAgIHN5bmNfbXNnID0gQVNZTkM7CisJaWYgKG9mZnNldCA9PSBBU1lOQykKKwkJc3luY19tc2cgPSBBU1lOQzsKIAotICAgaWYgKG9mZnNldCA+IE1BWF9PRkZTRVQpCi0gICAgICBvZmZzZXQgPSBNQVhfT0ZGU0VUOworCWlmIChvZmZzZXQgPiBNQVhfT0ZGU0VUKQorCQlvZmZzZXQgPSBNQVhfT0ZGU0VUOwogCi0gICBzeW5jX3JlZyA9IDB4MDA7CisJc3luY19yZWcgPSAweDAwOwogCi0gICBpZiAoc3luY19tc2cgPiAxMikKKwlpZiAoc3luY19tc2cgPiAxMikKIAotICAgICAgc3luY19yZWcgPSAweDIwOyAgICAgICAgLyogVXNlIDEwTUIvcyAqLworCQlzeW5jX3JlZyA9IDB4MjA7CS8qIFVzZSAxME1CL3MgKi8KIAotICAgaWYgKHN5bmNfbXNnID4gMjUpCisJaWYgKHN5bmNfbXNnID4gMjUpCiAKLSAgICAgIHN5bmNfcmVnID0gMHg0MDsgICAgICAgIC8qIFVzZSA2LjZNQi9zICovCisJCXN5bmNfcmVnID0gMHg0MDsJLyogVXNlIDYuNk1CL3MgKi8KIAotICAgaWYgKHN5bmNfbXNnID4gMzgpCisJaWYgKHN5bmNfbXNnID4gMzgpCiAKLSAgICAgIHN5bmNfcmVnID0gMHg2MDsgICAgICAgIC8qIFVzZSA1TUIvcyAqLworCQlzeW5jX3JlZyA9IDB4NjA7CS8qIFVzZSA1TUIvcyAqLwogCi0gICBpZiAoc3luY19tc2cgPiA1MCkKKwlpZiAoc3luY19tc2cgPiA1MCkKIAotICAgICAgc3luY19yZWcgPSAweDgwOyAgICAgICAgLyogVXNlIDRNQi9zICovCisJCXN5bmNfcmVnID0gMHg4MDsJLyogVXNlIDRNQi9zICovCiAKLSAgIGlmIChzeW5jX21zZyA+IDYyKQorCWlmIChzeW5jX21zZyA+IDYyKQogCi0gICAgICBzeW5jX3JlZyA9IDB4QTA7ICAgICAgICAvKiBVc2UgMy4zM01CL3MgKi8KKwkJc3luY19yZWcgPSAweEEwOwkvKiBVc2UgMy4zM01CL3MgKi8KIAotICAgaWYgKHN5bmNfbXNnID4gNzUpCisJaWYgKHN5bmNfbXNnID4gNzUpCiAKLSAgICAgIHN5bmNfcmVnID0gMHhDMDsgICAgICAgIC8qIFVzZSAyLjg1TUIvcyAqLworCQlzeW5jX3JlZyA9IDB4QzA7CS8qIFVzZSAyLjg1TUIvcyAqLwogCi0gICBpZiAoc3luY19tc2cgPiA4NykKKwlpZiAoc3luY19tc2cgPiA4NykKIAotICAgICAgc3luY19yZWcgPSAweEUwOyAgICAgICAgLyogVXNlIDIuNU1CL3MgKi8KKwkJc3luY19yZWcgPSAweEUwOwkvKiBVc2UgMi41TUIvcyAqLwogCi0gICBpZiAoc3luY19tc2cgPiAxMDApIHsKKwlpZiAoc3luY19tc2cgPiAxMDApIHsKIAotICAgICAgc3luY19yZWcgPSAweDAwOyAgICAgICAgLyogVXNlIEFTWU5DICovCi0gICAgICBvZmZzZXQgPSAweDAwOwotICAgICAgfQorCQlzeW5jX3JlZyA9IDB4MDA7CS8qIFVzZSBBU1lOQyAqLworCQlvZmZzZXQgPSAweDAwOworCX0KIAorCWlmIChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFdJREVfRU5BQkxFRCkKIAotICAgaWYgKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgV0lERV9FTkFCTEVEKQorCQlzeW5jX3JlZyB8PSBvZmZzZXQ7CiAKLSAgICAgIHN5bmNfcmVnIHw9IG9mZnNldDsKKwllbHNlCiAKLSAgIGVsc2UKKwkJc3luY19yZWcgfD0gKG9mZnNldCB8IE5BUlJPV19TQ1NJKTsKIAotICAgICAgc3luY19yZWcgfD0gKG9mZnNldCB8IE5BUlJPV19TQ1NJKTsKKwlGUFRfc3NzeW5jdihwb3J0LCBjdXJyU0NDQi0+VGFyZ0lELCBzeW5jX3JlZywgY3VyclRhcl9JbmZvKTsKIAotICAgRlBUX3Nzc3luY3YocG9ydCxjdXJyU0NDQi0+VGFyZ0lELHN5bmNfcmVnLGN1cnJUYXJfSW5mbyk7CisJaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9TTl9TVCkgewogCisJCUFDQ0VQVF9NU0cocG9ydCk7CiAKLSAgIGlmIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9PSBTRUxFQ1RfU05fU1QpIHsKKwkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgPSAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYKKwkJCQkJICAgIH4odW5zaWduZWQgY2hhcilUQVJfU1lOQ19NQVNLKSB8CisJCQkJCSAgICh1bnNpZ25lZCBjaGFyKVNZTkNfU1VQUE9SVEVEKTsKIAorCQlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMSwKKwkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOworCX0KIAotICAgICAgQUNDRVBUX01TRyhwb3J0KTsKKwllbHNlIHsKIAotICAgICAgY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgPSAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYKLSAgICAgICAgIH4oVUNIQVIpVEFSX1NZTkNfTUFTSykgfCAoVUNIQVIpU1lOQ19TVVBQT1JURUQpOworCQlBQ0NFUFRfTVNHX0FUTihwb3J0KTsKIAotICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8xLCAoQVVUT19JTU1FRCtESVNDT05ORUNUX1NUQVJUKSk7Ci0gICAgICB9CisJCUZQVF9zaXN5bmNyKHBvcnQsIHN5bmNfbXNnLCBvZmZzZXQpOwogCi0gICBlbHNlIHsKLQotCi0gICAgICBBQ0NFUFRfTVNHX0FUTihwb3J0KTsKLQotICAgICAgRlBUX3Npc3luY3IocG9ydCxzeW5jX21zZyxvZmZzZXQpOwotCi0gICAgICBjdXJyVGFyX0luZm8tPlRhclN0YXR1cyA9ICgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJgotICAgICAgICAgfihVQ0hBUilUQVJfU1lOQ19NQVNLKSB8IChVQ0hBUilTWU5DX1NVUFBPUlRFRCk7Ci0gICAgICB9CisJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzID0gKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmCisJCQkJCSAgICB+KHVuc2lnbmVkIGNoYXIpVEFSX1NZTkNfTUFTSykgfAorCQkJCQkgICAodW5zaWduZWQgY2hhcilTWU5DX1NVUFBPUlRFRCk7CisJfQogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zaXN5bmNyCkBAIC0zOTQ2LDI4ICszMzY3LDI4IEBACiAgKiBEZXNjcmlwdGlvbjogQW5zd2VyIHRoZSB0YXJnZXRzIHN5bmMgbWVzc2FnZS4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBGUFRfc2lzeW5jcihVTE9ORyBwb3J0LFVDSEFSIHN5bmNfcHVsc2UsIFVDSEFSIG9mZnNldCkKK3N0YXRpYyB2b2lkIEZQVF9zaXN5bmNyKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBzeW5jX3B1bHNlLAorCQkJdW5zaWduZWQgY2hhciBvZmZzZXQpCiB7Ci0gICBBUkFNX0FDQ0VTUyhwb3J0KTsKLSAgIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUyswKSwgKE1QTV9PUCtBTVNHX09VVCtTTUVYVCApKTsKLSAgIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUysyKSwgKE1QTV9PUCtBTVNHX09VVCsweDAzICApKTsKLSAgIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUys0KSwgKE1QTV9PUCtBTVNHX09VVCtTTVNZTkMpKTsKLSAgIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUys2KSwgKE1QTV9PUCtBTVNHX09VVCtzeW5jX3B1bHNlKSk7Ci0gICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrOCksIChSQVRfT1AgICAgICAgICAgICAgICAgKSk7Ci0gICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrMTApLChNUE1fT1ArQU1TR19PVVQrb2Zmc2V0KSk7Ci0gICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrMTIpLChCUkhfT1ArQUxXQVlTK05QICAgICAgKSk7Ci0gICBTR1JBTV9BQ0NFU1MocG9ydCk7CisJQVJBTV9BQ0NFU1MocG9ydCk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyAwKSwgKE1QTV9PUCArIEFNU0dfT1VUICsgU01FWFQpKTsKKwlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDIpLCAoTVBNX09QICsgQU1TR19PVVQgKyAweDAzKSk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyA0KSwgKE1QTV9PUCArIEFNU0dfT1VUICsgU01TWU5DKSk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyA2KSwgKE1QTV9PUCArIEFNU0dfT1VUICsgc3luY19wdWxzZSkpOworCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgOCksIChSQVRfT1ApKTsKKwlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDEwKSwgKE1QTV9PUCArIEFNU0dfT1VUICsgb2Zmc2V0KSk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyAxMiksIChCUkhfT1AgKyBBTFdBWVMgKyBOUCkpOworCVNHUkFNX0FDQ0VTUyhwb3J0KTsKIAotICAgV1JfSEFSUE9PTihwb3J0K2hwX3BvcnRjdHJsXzAsIFNDU0lfUE9SVCk7Ci0gICBXUldfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSwgQ0xSX0FMTF9JTlRfMSk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfcG9ydGN0cmxfMCwgU0NTSV9QT1JUKTsKKwlXUldfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpLCBDTFJfQUxMX0lOVF8xKTsKIAotICAgV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8zLCAoQVVUT19JTU1FRCtDTURfT05MWV9TVFJUKSk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzMsIChBVVRPX0lNTUVEICsgQ01EX09OTFlfU1RSVCkpOwogCi0gICB3aGlsZSAoIShSRFdfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSkgJiAoQlVTX0ZSRUUgfCBBVVRPX0lOVCkpKSB7fQorCXdoaWxlICghKFJEV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCkpICYgKEJVU19GUkVFIHwgQVVUT19JTlQpKSkgeworCX0KIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zaXdpZG4KQEAgLTM5NzcsNTAgKzMzOTgsNTMgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBVQ0hBUiBGUFRfc2l3aWRuKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIEZQVF9zaXdpZG4odW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCkKIHsKLSAgIFBTQ0NCIGN1cnJTQ0NCOwotICAgUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotICAgY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOwotICAgY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF07CisJY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOworCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdOwogCi0gICBpZiAoISgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfV0lERV9NQVNLKSA9PSBXSURFX05FR09DSUFURUQpKSB7CisJaWYgKCEoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1dJREVfTUFTSykgPT0gV0lERV9ORUdPQ0lBVEVEKSkgewogCisJCVdSV19IQVJQT09OKChwb3J0ICsgSURfTVNHX1NUUlQpLAorCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArCisJCQkgICAgIChjdXJyU0NDQi0+CisJCQkgICAgICBTY2NiX2lkbXNnICYgfih1bnNpZ25lZCBjaGFyKURJU0NfUFJJVikpKTsKIAotICAgICAgV1JXX0hBUlBPT04oKHBvcnQrSURfTVNHX1NUUlQpLAotCSAgICAgICAgICAgICAgKE1QTV9PUCtBTVNHX09VVCsoY3VyclNDQ0ItPlNjY2JfaWRtc2cgJiB+KFVDSEFSKURJU0NfUFJJVikpKTsKKwkJV1JXX0hBUlBPT04oKHBvcnQgKyBJRF9NU0dfU1RSVCArIDIpLCBCUkhfT1AgKyBBTFdBWVMgKyBDTURQWik7CiAKLSAgICAgIFdSV19IQVJQT09OKChwb3J0K0lEX01TR19TVFJUKzIpLEJSSF9PUCtBTFdBWVMrQ01EUFopOworCQlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDApLAorCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArIFNNRVhUKSk7CisJCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgMiksIChNUE1fT1AgKyBBTVNHX09VVCArIDB4MDIpKTsKKwkJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyA0KSwKKwkJCSAgICAoTVBNX09QICsgQU1TR19PVVQgKyBTTVdEVFIpKTsKKwkJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyA2KSwgKFJBVF9PUCkpOworCQlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDgpLAorCQkJICAgIChNUE1fT1AgKyBBTVNHX09VVCArIFNNMTZCSVQpKTsKKwkJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyAxMCksIChCUkhfT1AgKyBBTFdBWVMgKyBOUCkpOwogCi0gICAgICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrMCksIChNUE1fT1ArQU1TR19PVVQrU01FWFQgKSk7Ci0gICAgICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrMiksIChNUE1fT1ArQU1TR19PVVQrMHgwMiAgKSk7Ci0gICAgICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrNCksIChNUE1fT1ArQU1TR19PVVQrU01XRFRSKSk7Ci0gICAgICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrNiksIChSQVRfT1AgICAgICAgICAgICAgICAgKSk7Ci0gICAgICBXUldfSEFSUE9PTigocG9ydCtTWU5DX01TR1MrOCksIChNUE1fT1ArQU1TR19PVVQrIFNNMTZCSVQpKTsKLSAgICAgIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUysxMCksKEJSSF9PUCtBTFdBWVMrTlAgICAgICApKTsKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzMsIChTRUxFQ1QgKyBTRUxDSEtfU1RSVCkpOwogCi0gICAgICBXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzMsIChTRUxFQ1QrU0VMQ0hLX1NUUlQpKTsKKwkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgPSAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYKKwkJCQkJICAgIH4odW5zaWduZWQgY2hhcilUQVJfV0lERV9NQVNLKSB8CisJCQkJCSAgICh1bnNpZ25lZCBjaGFyKVdJREVfRU5BQkxFRCk7CiAKKwkJcmV0dXJuIDE7CisJfQogCi0gICAgICBjdXJyVGFyX0luZm8tPlRhclN0YXR1cyA9ICgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJgotICAgICAgICAgfihVQ0hBUilUQVJfV0lERV9NQVNLKSB8IChVQ0hBUilXSURFX0VOQUJMRUQpOworCWVsc2UgewogCi0gICAgICByZXR1cm4oMSk7Ci0gICAgICB9CisJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzID0gKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmCisJCQkJCSAgICB+KHVuc2lnbmVkIGNoYXIpVEFSX1dJREVfTUFTSykgfAorCQkJCQkgICBXSURFX05FR09DSUFURUQpOwogCi0gICBlbHNlIHsKLQotICAgICAgY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgPSAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYKLSAgICAgICAgICAgICAgIH4oVUNIQVIpVEFSX1dJREVfTUFTSykgfCBXSURFX05FR09DSUFURUQpOwotCi0gICAgICBjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJj0gfkVFX1dJREVfU0NTSTsKLSAgICAgIHJldHVybigwKTsKLSAgICAgIH0KKwkJY3VyclRhcl9JbmZvLT5UYXJFRVZhbHVlICY9IH5FRV9XSURFX1NDU0k7CisJCXJldHVybiAwOworCX0KIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zdHdpZG4KQEAgLTQwMjksNzkgKzM0NTMsNzAgQEAKICAqICAgICAgICAgICAgICBuZWNlc3NhcnkuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgRlBUX3N0d2lkbihVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdm9pZCBGUFRfc3R3aWRuKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICBVQ0hBUiB3aWR0aDsKLSAgIFBTQ0NCIGN1cnJTQ0NCOwotICAgUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOworCXVuc2lnbmVkIGNoYXIgd2lkdGg7CisJc3RydWN0IHNjY2IgKmN1cnJTQ0NCOworCXN0cnVjdCBzY2NiX21ncl90YXJfaW5mbyAqY3VyclRhcl9JbmZvOwogCi0gICBjdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7Ci0gICBjdXJyVGFyX0luZm8gPSAmRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXTsKKwljdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7CisJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF07CiAKLSAgIHdpZHRoID0gRlBUX3NmbShwb3J0LGN1cnJTQ0NCKTsKKwl3aWR0aCA9IEZQVF9zZm0ocG9ydCwgY3VyclNDQ0IpOwogCi0JaWYoKHdpZHRoID09IDB4MDApICYmIChjdXJyU0NDQi0+U2NjYl9zY3NpbXNnID09IFNNUEFSSVRZKSkKLQl7Ci0JCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMSwgKEFVVE9fSU1NRUQrRElTQ09OTkVDVF9TVEFSVCkpOworCWlmICgod2lkdGggPT0gMHgwMCkgJiYgKGN1cnJTQ0NCLT5TY2NiX3Njc2ltc2cgPT0gU01QQVJJVFkpKSB7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8xLAorCQkJICAgKEFVVE9fSU1NRUQgKyBESVNDT05ORUNUX1NUQVJUKSk7CiAJCXJldHVybjsKIAl9CiAKKwlpZiAoIShjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9XSURFX1NDU0kpKQorCQl3aWR0aCA9IDA7CiAKLSAgIGlmICghKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkpCi0gICAgICB3aWR0aCA9IDA7CisJaWYgKHdpZHRoKSB7CisJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzIHw9IFdJREVfRU5BQkxFRDsKKwkJd2lkdGggPSAwOworCX0gZWxzZSB7CisJCXdpZHRoID0gTkFSUk9XX1NDU0k7CisJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICY9IH5XSURFX0VOQUJMRUQ7CisJfQogCi0gICBpZiAod2lkdGgpIHsKLSAgICAgIGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzIHw9IFdJREVfRU5BQkxFRDsKLSAgICAgIHdpZHRoID0gMDsKLSAgICAgIH0KLSAgIGVsc2UgewotICAgICAgd2lkdGggPSBOQVJST1dfU0NTSTsKLSAgICAgIGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICY9IH5XSURFX0VOQUJMRUQ7Ci0gICAgICB9CisJRlBUX3Nzc3luY3YocG9ydCwgY3VyclNDQ0ItPlRhcmdJRCwgd2lkdGgsIGN1cnJUYXJfSW5mbyk7CiAKKwlpZiAoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1dOX1NUKSB7CiAKLSAgIEZQVF9zc3N5bmN2KHBvcnQsY3VyclNDQ0ItPlRhcmdJRCx3aWR0aCxjdXJyVGFyX0luZm8pOworCQljdXJyVGFyX0luZm8tPlRhclN0YXR1cyB8PSBXSURFX05FR09DSUFURUQ7CiAKLQotICAgaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9XTl9TVCkKLQl7Ci0KLQotCi0gICAgICBjdXJyVGFyX0luZm8tPlRhclN0YXR1cyB8PQkgV0lERV9ORUdPQ0lBVEVEOwotCi0JICAgaWYgKCEoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1NZTkNfTUFTSykgPT0gU1lOQ19TVVBQT1JURUQpKQotCQl7Ci0JICAgICAgQUNDRVBUX01TR19BVE4ocG9ydCk7Ci0JCSAgIEFSQU1fQUNDRVNTKHBvcnQpOwotCSAgICAgCUZQVF9zaXN5bmNuKHBvcnQscF9jYXJkLCAxKTsKLQkgICAgICBjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IFNFTEVDVF9TTl9TVDsKLQkJICAgU0dSQU1fQUNDRVNTKHBvcnQpOworCQlpZiAoIQorCQkgICAgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9TWU5DX01BU0spID09CisJCSAgICAgU1lOQ19TVVBQT1JURUQpKSB7CisJCQlBQ0NFUFRfTVNHX0FUTihwb3J0KTsKKwkJCUFSQU1fQUNDRVNTKHBvcnQpOworCQkJRlBUX3Npc3luY24ocG9ydCwgcF9jYXJkLCAxKTsKKwkJCWN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gU0VMRUNUX1NOX1NUOworCQkJU0dSQU1fQUNDRVNTKHBvcnQpOworCQl9IGVsc2UgeworCQkJQUNDRVBUX01TRyhwb3J0KTsKKwkJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8xLAorCQkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOwogCQl9CisJfQorCisJZWxzZSB7CisKKwkJQUNDRVBUX01TR19BVE4ocG9ydCk7CisKKwkJaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkKKwkJCXdpZHRoID0gU00xNkJJVDsKIAkJZWxzZQotCQl7Ci0JICAgICAgQUNDRVBUX01TRyhwb3J0KTsKLSAgCQkgICBXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzEsIChBVVRPX0lNTUVEK0RJU0NPTk5FQ1RfU1RBUlQpKTsKLQkJfQotICAgfQorCQkJd2lkdGggPSBTTThCSVQ7CiAKLSAgIGVsc2UgeworCQlGUFRfc2l3aWRyKHBvcnQsIHdpZHRoKTsKIAotCi0gICAgICBBQ0NFUFRfTVNHX0FUTihwb3J0KTsKLQotICAgICAgaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkKLSAgICAgIAkgd2lkdGggPSBTTTE2QklUOwotICAgICAgZWxzZQotICAgICAgCSB3aWR0aCA9IFNNOEJJVDsKLQotICAgICAgRlBUX3Npd2lkcihwb3J0LHdpZHRoKTsKLQotICAgICAgY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgfD0gKFdJREVfTkVHT0NJQVRFRCB8IFdJREVfRU5BQkxFRCk7Ci0gICAgICB9CisJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzIHw9IChXSURFX05FR09DSUFURUQgfCBXSURFX0VOQUJMRUQpOworCX0KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2l3aWRyCkBAIC00MTA5LDI3ICszNTI0LDI2IEBACiAgKiBEZXNjcmlwdGlvbjogQW5zd2VyIHRoZSB0YXJnZXRzIFdpZGUgbmVnbyBtZXNzYWdlLgogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIEZQVF9zaXdpZHIoVUxPTkcgcG9ydCwgVUNIQVIgd2lkdGgpCitzdGF0aWMgdm9pZCBGUFRfc2l3aWRyKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciB3aWR0aCkKIHsKLSAgIEFSQU1fQUNDRVNTKHBvcnQpOwotICAgV1JXX0hBUlBPT04oKHBvcnQrU1lOQ19NU0dTKzApLCAoTVBNX09QK0FNU0dfT1VUK1NNRVhUICkpOwotICAgV1JXX0hBUlBPT04oKHBvcnQrU1lOQ19NU0dTKzIpLCAoTVBNX09QK0FNU0dfT1VUKzB4MDIgICkpOwotICAgV1JXX0hBUlBPT04oKHBvcnQrU1lOQ19NU0dTKzQpLCAoTVBNX09QK0FNU0dfT1VUK1NNV0RUUikpOwotICAgV1JXX0hBUlBPT04oKHBvcnQrU1lOQ19NU0dTKzYpLCAoUkFUX09QICAgICAgICAgICAgICAgICkpOwotICAgV1JXX0hBUlBPT04oKHBvcnQrU1lOQ19NU0dTKzgpLChNUE1fT1ArQU1TR19PVVQrd2lkdGgpKTsKLSAgIFdSV19IQVJQT09OKChwb3J0K1NZTkNfTVNHUysxMCksKEJSSF9PUCtBTFdBWVMrTlAgICAgICApKTsKLSAgIFNHUkFNX0FDQ0VTUyhwb3J0KTsKKwlBUkFNX0FDQ0VTUyhwb3J0KTsKKwlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDApLCAoTVBNX09QICsgQU1TR19PVVQgKyBTTUVYVCkpOworCVdSV19IQVJQT09OKChwb3J0ICsgU1lOQ19NU0dTICsgMiksIChNUE1fT1AgKyBBTVNHX09VVCArIDB4MDIpKTsKKwlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDQpLCAoTVBNX09QICsgQU1TR19PVVQgKyBTTVdEVFIpKTsKKwlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDYpLCAoUkFUX09QKSk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBTWU5DX01TR1MgKyA4KSwgKE1QTV9PUCArIEFNU0dfT1VUICsgd2lkdGgpKTsKKwlXUldfSEFSUE9PTigocG9ydCArIFNZTkNfTVNHUyArIDEwKSwgKEJSSF9PUCArIEFMV0FZUyArIE5QKSk7CisJU0dSQU1fQUNDRVNTKHBvcnQpOwogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfcG9ydGN0cmxfMCwgU0NTSV9QT1JUKTsKLSAgIFdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBDTFJfQUxMX0lOVF8xKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9wb3J0Y3RybF8wLCBTQ1NJX1BPUlQpOworCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIENMUl9BTExfSU5UXzEpOwogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzMsIChBVVRPX0lNTUVEK0NNRF9PTkxZX1NUUlQpKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMywgKEFVVE9fSU1NRUQgKyBDTURfT05MWV9TVFJUKSk7CiAKLSAgIHdoaWxlICghKFJEV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IEFVVE9fSU5UKSkpIHt9CisJd2hpbGUgKCEoUkRXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSkgJiAoQlVTX0ZSRUUgfCBBVVRPX0lOVCkpKSB7CisJfQogfQogCi0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogRlBUX3Nzc3luY3YKQEAgLTQxMzgsNzEgKzM1NTIsNzEgQEAKICAqICAgICAgICAgICAgICBJRCBzcGVjaWZpZWQuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgRlBUX3Nzc3luY3YoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2lkLCBVQ0hBUiBwX3N5bmNfdmFsdWUsCi0JCQlQU0NDQk1ncl90YXJfaW5mbyBjdXJyVGFyX0luZm8pCitzdGF0aWMgdm9pZCBGUFRfc3NzeW5jdih1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgY2hhciBwX2lkLAorCQkJdW5zaWduZWQgY2hhciBwX3N5bmNfdmFsdWUsCisJCQlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbykKIHsKLSAgIFVDSEFSIGluZGV4OworCXVuc2lnbmVkIGNoYXIgaW5kZXg7CiAKLSAgIGluZGV4ID0gcF9pZDsKKwlpbmRleCA9IHBfaWQ7CiAKLSAgIHN3aXRjaCAoaW5kZXgpIHsKKwlzd2l0Y2ggKGluZGV4KSB7CiAKLSAgICAgIGNhc2UgMDoKLQkgaW5kZXggPSAxMjsgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfMCAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgMToKLQkgaW5kZXggPSAxMzsgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfMSAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgMjoKLQkgaW5kZXggPSAxNDsgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfMiAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgMzoKLQkgaW5kZXggPSAxNTsgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfMyAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgNDoKLQkgaW5kZXggPSA4OyAgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfNCAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgNToKLQkgaW5kZXggPSA5OyAgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfNSAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgNjoKLQkgaW5kZXggPSAxMDsgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfNiAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgNzoKLQkgaW5kZXggPSAxMTsgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfNyAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgODoKLQkgaW5kZXggPSA0OyAgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfOCAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgOToKLQkgaW5kZXggPSA1OyAgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfOSAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgMTA6Ci0JIGluZGV4ID0gNjsgICAgICAgICAgICAgIC8qIGhwX3N5bmN0YXJnXzEwICovCi0JIGJyZWFrOwotICAgICAgY2FzZSAxMToKLQkgaW5kZXggPSA3OyAgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfMTEgKi8KLQkgYnJlYWs7Ci0gICAgICBjYXNlIDEyOgotCSBpbmRleCA9IDA7ICAgICAgICAgICAgICAvKiBocF9zeW5jdGFyZ18xMiAqLwotCSBicmVhazsKLSAgICAgIGNhc2UgMTM6Ci0JIGluZGV4ID0gMTsgICAgICAgICAgICAgIC8qIGhwX3N5bmN0YXJnXzEzICovCi0JIGJyZWFrOwotICAgICAgY2FzZSAxNDoKLQkgaW5kZXggPSAyOyAgICAgICAgICAgICAgLyogaHBfc3luY3RhcmdfMTQgKi8KLQkgYnJlYWs7Ci0gICAgICBjYXNlIDE1OgotCSBpbmRleCA9IDM7ICAgICAgICAgICAgICAvKiBocF9zeW5jdGFyZ18xNSAqLworCWNhc2UgMDoKKwkJaW5kZXggPSAxMjsJLyogaHBfc3luY3RhcmdfMCAqLworCQlicmVhazsKKwljYXNlIDE6CisJCWluZGV4ID0gMTM7CS8qIGhwX3N5bmN0YXJnXzEgKi8KKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpbmRleCA9IDE0OwkvKiBocF9zeW5jdGFyZ18yICovCisJCWJyZWFrOworCWNhc2UgMzoKKwkJaW5kZXggPSAxNTsJLyogaHBfc3luY3RhcmdfMyAqLworCQlicmVhazsKKwljYXNlIDQ6CisJCWluZGV4ID0gODsJLyogaHBfc3luY3RhcmdfNCAqLworCQlicmVhazsKKwljYXNlIDU6CisJCWluZGV4ID0gOTsJLyogaHBfc3luY3RhcmdfNSAqLworCQlicmVhazsKKwljYXNlIDY6CisJCWluZGV4ID0gMTA7CS8qIGhwX3N5bmN0YXJnXzYgKi8KKwkJYnJlYWs7CisJY2FzZSA3OgorCQlpbmRleCA9IDExOwkvKiBocF9zeW5jdGFyZ183ICovCisJCWJyZWFrOworCWNhc2UgODoKKwkJaW5kZXggPSA0OwkvKiBocF9zeW5jdGFyZ184ICovCisJCWJyZWFrOworCWNhc2UgOToKKwkJaW5kZXggPSA1OwkvKiBocF9zeW5jdGFyZ185ICovCisJCWJyZWFrOworCWNhc2UgMTA6CisJCWluZGV4ID0gNjsJLyogaHBfc3luY3RhcmdfMTAgKi8KKwkJYnJlYWs7CisJY2FzZSAxMToKKwkJaW5kZXggPSA3OwkvKiBocF9zeW5jdGFyZ18xMSAqLworCQlicmVhazsKKwljYXNlIDEyOgorCQlpbmRleCA9IDA7CS8qIGhwX3N5bmN0YXJnXzEyICovCisJCWJyZWFrOworCWNhc2UgMTM6CisJCWluZGV4ID0gMTsJLyogaHBfc3luY3RhcmdfMTMgKi8KKwkJYnJlYWs7CisJY2FzZSAxNDoKKwkJaW5kZXggPSAyOwkvKiBocF9zeW5jdGFyZ18xNCAqLworCQlicmVhazsKKwljYXNlIDE1OgorCQlpbmRleCA9IDM7CS8qIGhwX3N5bmN0YXJnXzE1ICovCiAKLSAgICAgIH0KKwl9CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3N5bmN0YXJnX2Jhc2UraW5kZXgsIHBfc3luY192YWx1ZSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zeW5jdGFyZ19iYXNlICsgaW5kZXgsIHBfc3luY192YWx1ZSk7CiAKIAljdXJyVGFyX0luZm8tPlRhclN5bmNDdHJsID0gcF9zeW5jX3ZhbHVlOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zcmVzYgpAQCAtNDIxMCw2OSArMzYyNCw2NyBAQAogICogRGVzY3JpcHRpb246IFJlc2V0IHRoZSBkZXNpcmVkIGNhcmQncyBTQ1NJIGJ1cy4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBGUFRfc3Jlc2IoVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKQorc3RhdGljIHZvaWQgRlBUX3NyZXNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICBVQ0hBUiBzY3NpSUQsIGk7CisJdW5zaWduZWQgY2hhciBzY3NpSUQsIGk7CiAKLSAgIFBTQ0NCTWdyX3Rhcl9pbmZvIGN1cnJUYXJfSW5mbzsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotICAgV1JfSEFSUE9PTihwb3J0K2hwX3BhZ2VfY3RybCwKLSAgICAgIChSRF9IQVJQT09OKHBvcnQraHBfcGFnZV9jdHJsKSB8IEdfSU5UX0RJU0FCTEUpKTsKLSAgIFdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBDTFJfQUxMX0lOVCk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfcGFnZV9jdHJsLAorCQkgICAoUkRfSEFSUE9PTihwb3J0ICsgaHBfcGFnZV9jdHJsKSB8IEdfSU5UX0RJU0FCTEUpKTsKKwlXUldfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpLCBDTFJfQUxMX0lOVCk7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9zY3NpY3RybF8wLCBTQ1NJX1JTVCk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaWN0cmxfMCwgU0NTSV9SU1QpOwogCi0gICBzY3NpSUQgPSBSRF9IQVJQT09OKHBvcnQraHBfc2VsdGltZW91dCk7Ci0gICBXUl9IQVJQT09OKHBvcnQraHBfc2VsdGltZW91dCxUT181bXMpOwotICAgV1JXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCksIFRJTUVPVVQpOworCXNjc2lJRCA9IFJEX0hBUlBPT04ocG9ydCArIGhwX3NlbHRpbWVvdXQpOworCVdSX0hBUlBPT04ocG9ydCArIGhwX3NlbHRpbWVvdXQsIFRPXzVtcyk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSwgVElNRU9VVCk7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9wb3J0Y3RybF8wLChTQ1NJX1BPUlQgfCBTVEFSVF9UTykpOworCVdSX0hBUlBPT04ocG9ydCArIGhwX3BvcnRjdHJsXzAsIChTQ1NJX1BPUlQgfCBTVEFSVF9UTykpOwogCi0gICB3aGlsZSAoIShSRFdfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSkgJiBUSU1FT1VUKSkge30KKwl3aGlsZSAoIShSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmIFRJTUVPVVQpKSB7CisJfQogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfc2VsdGltZW91dCxzY3NpSUQpOworCVdSX0hBUlBPT04ocG9ydCArIGhwX3NlbHRpbWVvdXQsIHNjc2lJRCk7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9zY3NpY3RybF8wLCBFTkFfU0NBTV9TRUwpOworCVdSX0hBUlBPT04ocG9ydCArIGhwX3Njc2ljdHJsXzAsIEVOQV9TQ0FNX1NFTCk7CiAKLSAgIEZQVF9XYWl0KHBvcnQsIFRPXzVtcyk7CisJRlBUX1dhaXQocG9ydCwgVE9fNW1zKTsKIAotICAgV1JXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCksIENMUl9BTExfSU5UKTsKKwlXUldfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpLCBDTFJfQUxMX0lOVCk7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9pbnRfbWFzaywgKFJEX0hBUlBPT04ocG9ydCtocF9pbnRfbWFzaykgfCAweDAwKSk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfaW50X21hc2ssIChSRF9IQVJQT09OKHBvcnQgKyBocF9pbnRfbWFzaykgfCAweDAwKSk7CiAKLSAgIGZvciAoc2NzaUlEID0gMDsgc2NzaUlEIDwgTUFYX1NDU0lfVEFSOyBzY3NpSUQrKykKLSAgICAgIHsKLSAgICAgIGN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Njc2lJRF07CisJZm9yIChzY3NpSUQgPSAwOyBzY3NpSUQgPCBNQVhfU0NTSV9UQVI7IHNjc2lJRCsrKSB7CisJCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Njc2lJRF07CiAKLSAgICAgIGlmIChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spCi0gICAgICAgICB7Ci0JICAgICAgCWN1cnJUYXJfSW5mby0+VGFyU3luY0N0cmwgPSAwOwotCSAgICAgIAljdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmPSB+VEFSX1NZTkNfTUFTSzsKLQkgICAgICB9CisJCWlmIChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spIHsKKwkJCWN1cnJUYXJfSW5mby0+VGFyU3luY0N0cmwgPSAwOworCQkJY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJj0gflRBUl9TWU5DX01BU0s7CisJCX0KIAotICAgICAgaWYgKGN1cnJUYXJfSW5mby0+VGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkKLSAgICAgICAgIHsKLSAgICAgIAljdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmPSB+VEFSX1dJREVfTUFTSzsKLSAgICAgIAl9CisJCWlmIChjdXJyVGFyX0luZm8tPlRhckVFVmFsdWUgJiBFRV9XSURFX1NDU0kpIHsKKwkJCWN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICY9IH5UQVJfV0lERV9NQVNLOworCQl9CiAKLSAgICAgIEZQVF9zc3N5bmN2KHBvcnQsIHNjc2lJRCwgTkFSUk9XX1NDU0ksY3VyclRhcl9JbmZvKTsKKwkJRlBUX3Nzc3luY3YocG9ydCwgc2NzaUlELCBOQVJST1dfU0NTSSwgY3VyclRhcl9JbmZvKTsKIAotICAgICAgRlBUX1NjY2JNZ3JUYWJsZUluaXRUYXJnZXQocF9jYXJkLCBzY3NpSUQpOwotICAgICAgfQorCQlGUFRfU2NjYk1nclRhYmxlSW5pdFRhcmdldChwX2NhcmQsIHNjc2lJRCk7CisJfQogCi0gICBGUFRfQkxfQ2FyZFtwX2NhcmRdLnNjYW5JbmRleCA9IDB4MDA7Ci0gICBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCID0gTlVMTDsKLSAgIEZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJj0gfihGX1RBR19TVEFSVEVEIHwgRl9IT1NUX1hGRVJfQUNUIAotCQkJCQkJCQkJCQkJCXwgRl9ORVdfU0NDQl9DTUQpOwotICAgRlBUX0JMX0NhcmRbcF9jYXJkXS5jbWRDb3VudGVyICA9IDB4MDA7CisJRlBUX0JMX0NhcmRbcF9jYXJkXS5zY2FuSW5kZXggPSAweDAwOworCUZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0IgPSBOVUxMOworCUZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJj0gfihGX1RBR19TVEFSVEVEIHwgRl9IT1NUX1hGRVJfQUNUCisJCQkJCSAgICAgfCBGX05FV19TQ0NCX0NNRCk7CisJRlBUX0JMX0NhcmRbcF9jYXJkXS5jbWRDb3VudGVyID0gMHgwMDsKIAlGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQgPSAweDAwOwotICAgRlBUX0JMX0NhcmRbcF9jYXJkXS50YWdRX0xzdCA9IDB4MDE7IAorCUZQVF9CTF9DYXJkW3BfY2FyZF0udGFnUV9Mc3QgPSAweDAxOwogCi0JZm9yKGkgPSAwOyBpIDwgUVVFVUVfREVQVEg7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgUVVFVUVfREVQVEg7IGkrKykKIAkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbaV0gPSBOVUxMOwogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfcGFnZV9jdHJsLAotICAgICAgKFJEX0hBUlBPT04ocG9ydCtocF9wYWdlX2N0cmwpICYgfkdfSU5UX0RJU0FCTEUpKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9wYWdlX2N0cmwsCisJCSAgIChSRF9IQVJQT09OKHBvcnQgKyBocF9wYWdlX2N0cmwpICYgfkdfSU5UX0RJU0FCTEUpKTsKIAogfQogCkBAIC00MjgzLDQ2ICszNjk1LDQzIEBACiAgKiBEZXNjcmlwdGlvbjogU2V0dXAgZm9yIHRoZSBBdXRvIFNlbnNlIGNvbW1hbmQuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgRlBUX3NzZW5zcyhQU0NDQmNhcmQgcEN1cnJDYXJkKQorc3RhdGljIHZvaWQgRlBUX3NzZW5zcyhzdHJ1Y3Qgc2NjYl9jYXJkICpwQ3VyckNhcmQpCiB7Ci0gICBVQ0hBUiBpOwotICAgUFNDQ0IgY3VyclNDQ0I7CisJdW5zaWduZWQgY2hhciBpOworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKIAotICAgY3VyclNDQ0IgPSBwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCOworCWN1cnJTQ0NCID0gcEN1cnJDYXJkLT5jdXJyZW50U0NDQjsKIAorCWN1cnJTQ0NCLT5TYXZlX0NkYkxlbiA9IGN1cnJTQ0NCLT5DZGJMZW5ndGg7CiAKLSAgIGN1cnJTQ0NCLT5TYXZlX0NkYkxlbiA9IGN1cnJTQ0NCLT5DZGJMZW5ndGg7CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewogCi0gICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWN1cnJTQ0NCLT5TYXZlX0NkYltpXSA9IGN1cnJTQ0NCLT5DZGJbaV07CisJfQogCi0gICAgICBjdXJyU0NDQi0+U2F2ZV9DZGJbaV0gPSBjdXJyU0NDQi0+Q2RiW2ldOwotICAgICAgfQorCWN1cnJTQ0NCLT5DZGJMZW5ndGggPSBTSVhfQllURV9DTUQ7CisJY3VyclNDQ0ItPkNkYlswXSA9IFNDU0lfUkVRVUVTVF9TRU5TRTsKKwljdXJyU0NDQi0+Q2RiWzFdID0gY3VyclNDQ0ItPkNkYlsxXSAmICh1bnNpZ25lZCBjaGFyKTB4RTA7CS8qS2VlcCBMVU4uICovCisJY3VyclNDQ0ItPkNkYlsyXSA9IDB4MDA7CisJY3VyclNDQ0ItPkNkYlszXSA9IDB4MDA7CisJY3VyclNDQ0ItPkNkYls0XSA9IGN1cnJTQ0NCLT5SZXF1ZXN0U2Vuc2VMZW5ndGg7CisJY3VyclNDQ0ItPkNkYls1XSA9IDB4MDA7CiAKLSAgIGN1cnJTQ0NCLT5DZGJMZW5ndGggPSBTSVhfQllURV9DTUQ7Ci0gICBjdXJyU0NDQi0+Q2RiWzBdICAgID0gU0NTSV9SRVFVRVNUX1NFTlNFOwotICAgY3VyclNDQ0ItPkNkYlsxXSAgICA9IGN1cnJTQ0NCLT5DZGJbMV0gJiAoVUNIQVIpMHhFMDsgLypLZWVwIExVTi4gKi8KLSAgIGN1cnJTQ0NCLT5DZGJbMl0gICAgPSAweDAwOwotICAgY3VyclNDQ0ItPkNkYlszXSAgICA9IDB4MDA7Ci0gICBjdXJyU0NDQi0+Q2RiWzRdICAgID0gY3VyclNDQ0ItPlJlcXVlc3RTZW5zZUxlbmd0aDsKLSAgIGN1cnJTQ0NCLT5DZGJbNV0gICAgPSAweDAwOworCWN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPSAodW5zaWduZWQgbG9uZyljdXJyU0NDQi0+UmVxdWVzdFNlbnNlTGVuZ3RoOwogCi0gICBjdXJyU0NDQi0+U2NjYl9YZmVyQ250ID0gKHVuc2lnbmVkIGxvbmcpY3VyclNDQ0ItPlJlcXVlc3RTZW5zZUxlbmd0aDsKKwljdXJyU0NDQi0+U2NjYl9BVEMgPSAweDAwOwogCi0gICBjdXJyU0NDQi0+U2NjYl9BVEMgPSAweDAwOworCWN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSB8PSBGX0FVVE9fU0VOU0U7CiAKLSAgIGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSB8PSBGX0FVVE9fU0VOU0U7CisJY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICY9IH5GX1NHX1hGRVI7CiAKLSAgIGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmPSB+Rl9TR19YRkVSOworCWN1cnJTQ0NCLT5TY2NiX2lkbXNnID0gY3VyclNDQ0ItPlNjY2JfaWRtc2cgJiB+KHVuc2lnbmVkIGNoYXIpRElTQ19QUklWOwogCi0gICBjdXJyU0NDQi0+U2NjYl9pZG1zZyA9IGN1cnJTQ0NCLT5TY2NiX2lkbXNnICYgfihVQ0hBUilESVNDX1BSSVY7CisJY3VyclNDQ0ItPkNvbnRyb2xCeXRlID0gMHgwMDsKIAotICAgY3VyclNDQ0ItPkNvbnRyb2xCeXRlID0gMHgwMDsKLQotICAgY3VyclNDQ0ItPlNjY2JfTUdSRmxhZ3MgJj0gRl9TVEFUVVNMT0FERUQ7CisJY3VyclNDQ0ItPlNjY2JfTUdSRmxhZ3MgJj0gRl9TVEFUVVNMT0FERUQ7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc3hmcnAKQEAgLTQzMzIsNzkgKzM3NDEsNzkgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9zeGZycChVTE9ORyBwX3BvcnQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9zeGZycCh1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICBVQ0hBUiBjdXJyX3BoejsKKwl1bnNpZ25lZCBjaGFyIGN1cnJfcGh6OwogCisJRElTQUJMRV9BVVRPKHBfcG9ydCk7CiAKLSAgIERJU0FCTEVfQVVUTyhwX3BvcnQpOworCWlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKSB7CiAKLSAgIGlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKSB7CisJCUZQVF9ob3N0RGF0YVhmZXJBYm9ydChwX3BvcnQsIHBfY2FyZCwKKwkJCQkgICAgICBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCKTsKIAotICAgICAgRlBUX2hvc3REYXRhWGZlckFib3J0KHBfcG9ydCxwX2NhcmQsRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQik7CisJfQogCi0gICAgICB9CisJLyogSWYgdGhlIEF1dG9tYXRpb24gaGFuZGxlZCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciB0aGVuIGRvIG5vdAorCSAgIG1hdGNoIHRoZSBwaGFzZSBvciB3ZSB3aWxsIGdldCBvdXQgb2Ygc3luYyB3aXRoIHRoZSBJU1IuICAgICAgICovCiAKLSAgIC8qIElmIHRoZSBBdXRvbWF0aW9uIGhhbmRsZWQgdGhlIGVuZCBvZiB0aGUgdHJhbnNmZXIgdGhlbiBkbyBub3QKLSAgICAgIG1hdGNoIHRoZSBwaGFzZSBvciB3ZSB3aWxsIGdldCBvdXQgb2Ygc3luYyB3aXRoIHRoZSBJU1IuICAgICAgICovCisJaWYgKFJEV19IQVJQT09OKChwX3BvcnQgKyBocF9pbnRzdGF0KSkgJgorCSAgICAoQlVTX0ZSRUUgfCBYRkVSX0NOVF8wIHwgQVVUT19JTlQpKQorCQlyZXR1cm47CiAKLSAgIGlmIChSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFhGRVJfQ05UXzAgfCBBVVRPX0lOVCkpCi0gICAgICByZXR1cm47CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF94ZmVyY250XzAsIDB4MDApOwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF94ZmVyY250XzAsIDB4MDApOworCWN1cnJfcGh6ID0gUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSAmICh1bnNpZ25lZCBjaGFyKVNfU0NTSV9QSFo7CiAKLSAgIGN1cnJfcGh6ID0gUkRfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZykgJiAoVUNIQVIpU19TQ1NJX1BIWjsKKwlXUldfSEFSUE9PTigocF9wb3J0ICsgaHBfaW50c3RhdCksIFhGRVJfQ05UXzApOwogCi0gICBXUldfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpLCBYRkVSX0NOVF8wKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lzaWcsIGN1cnJfcGh6KTsKIAorCXdoaWxlICghKFJEV19IQVJQT09OKChwX3BvcnQgKyBocF9pbnRzdGF0KSkgJiAoQlVTX0ZSRUUgfCBSRVNFVCkpICYmCisJICAgICAgIChjdXJyX3BoeiA9PQorCQkoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSAmICh1bnNpZ25lZCBjaGFyKVNfU0NTSV9QSFopKSkKKwl7CisJCWlmIChjdXJyX3BoeiAmICh1bnNpZ25lZCBjaGFyKVNDU0lfSU9CSVQpIHsKKwkJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfcG9ydGN0cmxfMCwKKwkJCQkgICAoU0NTSV9QT1JUIHwgSE9TVF9QT1JUIHwgU0NTSV9JTkJJVCkpOwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zY3Npc2lnLCBjdXJyX3Boeik7CisJCQlpZiAoIShSRF9IQVJQT09OKHBfcG9ydCArIGhwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpKSB7CisJCQkJUkRfSEFSUE9PTihwX3BvcnQgKyBocF9maWZvZGF0YV8wKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfcG9ydGN0cmxfMCwKKwkJCQkgICAoU0NTSV9QT1JUIHwgSE9TVF9QT1JUIHwgSE9TVF9XUlQpKTsKKwkJCWlmIChSRF9IQVJQT09OKHBfcG9ydCArIGhwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpIHsKKwkJCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2ZpZm9kYXRhXzAsIDB4RkEpOworCQkJfQorCQl9CisJfQkJCS8qIEVuZCBvZiBXaGlsZSBsb29wIGZvciBwYWRkaW5nIGRhdGEgSS9PIHBoYXNlICovCiAKLSAgIHdoaWxlICggIShSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFJFU0VUKSkgJiYKLSAgICAgIChjdXJyX3BoeiA9PSAoUkRfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZykgJiAoVUNIQVIpU19TQ1NJX1BIWikpICkKLSAgICAgIHsKLSAgICAgIGlmIChjdXJyX3BoeiAmIChVQ0hBUilTQ1NJX0lPQklUKQotICAgICAgICAgewotICAgICAgCVdSX0hBUlBPT04ocF9wb3J0K2hwX3BvcnRjdHJsXzAsIChTQ1NJX1BPUlQgfCBIT1NUX1BPUlQgfCBTQ1NJX0lOQklUKSk7CisJd2hpbGUgKCEoUkRXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFJFU0VUKSkpIHsKKwkJaWYgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkKKwkJCWJyZWFrOworCX0KIAotCSAgICAgIGlmICghKFJEX0hBUlBPT04ocF9wb3J0K2hwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpKQotICAgICAgICAgICAgewotCSAgICAgICAgIFJEX0hBUlBPT04ocF9wb3J0K2hwX2ZpZm9kYXRhXzApOwotCSAgICAgICAgIH0KLQkgICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgICB7Ci0gICAgICAJV1JfSEFSUE9PTihwX3BvcnQraHBfcG9ydGN0cmxfMCwgKFNDU0lfUE9SVCB8IEhPU1RfUE9SVCB8IEhPU1RfV1JUKSk7Ci0gICAJICAgaWYgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpCi0gICAgICAgICAgICB7Ci0JICAgICAgICAgV1JfSEFSUE9PTihwX3BvcnQraHBfZmlmb2RhdGFfMCwweEZBKTsKLQkgICAgICAgICB9Ci0JICAgICAgfQotICAgICAgfSAvKiBFbmQgb2YgV2hpbGUgbG9vcCBmb3IgcGFkZGluZyBkYXRhIEkvTyBwaGFzZSAqLworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfcG9ydGN0cmxfMCwKKwkJICAgKFNDU0lfUE9SVCB8IEhPU1RfUE9SVCB8IFNDU0lfSU5CSVQpKTsKKwl3aGlsZSAoIShSRF9IQVJQT09OKHBfcG9ydCArIGhwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpKSB7CisJCVJEX0hBUlBPT04ocF9wb3J0ICsgaHBfZmlmb2RhdGFfMCk7CisJfQogCi0gICAgICB3aGlsZSAoICEoUkRXX0hBUlBPT04oKHBfcG9ydCtocF9pbnRzdGF0KSkgJiAoQlVTX0ZSRUUgfCBSRVNFVCkpKQotICAgICAgICAgewotICAgICAgICAgaWYgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcpICYgU0NTSV9SRVEpCi0gICAgICAJICAgYnJlYWs7Ci0gICAgICAgICB9CisJaWYgKCEoUkRXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFJFU0VUKSkpIHsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9hdXRvc3RhcnRfMCwKKwkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOworCQl3aGlsZSAoIShSRFdfSEFSUE9PTigocF9wb3J0ICsgaHBfaW50c3RhdCkpICYgQVVUT19JTlQpKSB7CisJCX0KIAotICAgICAgV1JfSEFSUE9PTihwX3BvcnQraHBfcG9ydGN0cmxfMCwgKFNDU0lfUE9SVCB8IEhPU1RfUE9SVCB8IFNDU0lfSU5CSVQpKTsKLSAgICAgIHdoaWxlICghKFJEX0hBUlBPT04ocF9wb3J0K2hwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpKQotICAgICAgICAgewotICAgICAgICAgUkRfSEFSUE9PTihwX3BvcnQraHBfZmlmb2RhdGFfMCk7Ci0gICAgICAgICB9Ci0KLSAgICAgIGlmICggIShSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFJFU0VUKSkpCi0gICAgICAgICB7Ci0gICAgICAgICBXUl9IQVJQT09OKHBfcG9ydCtocF9hdXRvc3RhcnRfMCwgKEFVVE9fSU1NRUQrRElTQ09OTkVDVF9TVEFSVCkpOwotICAgICAgICAgd2hpbGUgKCEoUkRXX0hBUlBPT04oKHBfcG9ydCtocF9pbnRzdGF0KSkgJiBBVVRPX0lOVCkpIHt9Ci0KLSAgICAgICAgIGlmIChSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIChJQ01EX0NPTVAgfCBJVEFSX0RJU0MpKQotICAgCSAgIHdoaWxlICghKFJEV19IQVJQT09OKChwX3BvcnQraHBfaW50c3RhdCkpICYgKEJVU19GUkVFIHwgUlNFTCkpKSA7Ci0gICAgICAgICB9CisJCWlmIChSRFdfSEFSUE9PTigocF9wb3J0ICsgaHBfaW50c3RhdCkpICYKKwkJICAgIChJQ01EX0NPTVAgfCBJVEFSX0RJU0MpKQorCQkJd2hpbGUgKCEKKwkJCSAgICAgICAoUkRXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpKSAmCisJCQkJKEJVU19GUkVFIHwgUlNFTCkpKSA7CisJfQogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zY2hrZGQKQEAgLTQ0MTQsMTExICszODIzLDk5IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfc2Noa2RkKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9zY2hrZGQodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCkKIHsKLSAgIFVTSE9SVCBUaW1lT3V0TG9vcDsKLQlVQ0hBUiBzUGhhc2U7CisJdW5zaWduZWQgc2hvcnQgVGltZU91dExvb3A7CisJdW5zaWduZWQgY2hhciBzUGhhc2U7CiAKLSAgIFBTQ0NCIGN1cnJTQ0NCOworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKIAotICAgY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOworCWN1cnJTQ0NCID0gRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQjsKIAorCWlmICgoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgIT0gREFUQV9PVVRfU1QpICYmCisJICAgIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCAhPSBEQVRBX0lOX1NUKSkgeworCQlyZXR1cm47CisJfQogCi0gICBpZiAoKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ICE9IERBVEFfT1VUX1NUKSAmJgotICAgICAgIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCAhPSBEQVRBX0lOX1NUKSkgewotICAgICAgcmV0dXJuOwotICAgICAgfQorCWlmIChjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX09ERF9CQUxMX0NOVCkgewogCisJCWN1cnJTQ0NCLT5TY2NiX0FUQyArPSAoY3VyclNDQ0ItPlNjY2JfWGZlckNudCAtIDEpOwogCisJCWN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPSAxOwogCi0gICBpZiAoY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9PRERfQkFMTF9DTlQpCi0gICAgICB7CisJCWN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmPSB+Rl9PRERfQkFMTF9DTlQ7CisJCVdSV19IQVJQT09OKChwb3J0ICsgaHBfZmlmb3JlYWQpLCAodW5zaWduZWQgc2hvcnQpMHgwMCk7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX3hmZXJzdGF0LCAweDAwKTsKKwl9CiAKLSAgICAgIGN1cnJTQ0NCLT5TY2NiX0FUQyArPSAoY3VyclNDQ0ItPlNjY2JfWGZlckNudC0xKTsKKwllbHNlIHsKIAotICAgICAgY3VyclNDQ0ItPlNjY2JfWGZlckNudCA9IDE7CisJCWN1cnJTQ0NCLT5TY2NiX0FUQyArPSBjdXJyU0NDQi0+U2NjYl9YZmVyQ250OwogCi0gICAgICBjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJj0gfkZfT0REX0JBTExfQ05UOwotICAgICAgV1JXX0hBUlBPT04oKHBvcnQraHBfZmlmb3JlYWQpLCAoVVNIT1JUKSAweDAwKTsKLSAgICAgIFdSX0hBUlBPT04ocG9ydCtocF94ZmVyc3RhdCwgMHgwMCk7Ci0gICAgICB9CisJCWN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPSAwOworCX0KIAotICAgZWxzZQotICAgICAgeworCWlmICgoUkRXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSkgJiBQQVJJVFkpICYmCisJICAgIChjdXJyU0NDQi0+SG9zdFN0YXR1cyA9PSBTQ0NCX0NPTVBMRVRFKSkgewogCi0gICAgICBjdXJyU0NDQi0+U2NjYl9BVEMgKz0gY3VyclNDQ0ItPlNjY2JfWGZlckNudDsKKwkJY3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX1BBUklUWV9FUlI7CisJCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIFBBUklUWSk7CisJfQogCi0gICAgICBjdXJyU0NDQi0+U2NjYl9YZmVyQ250ID0gMDsKLSAgICAgIH0KKwlGUFRfaG9zdERhdGFYZmVyQWJvcnQocG9ydCwgcF9jYXJkLCBjdXJyU0NDQik7CiAKLSAgIGlmICgoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgUEFSSVRZKSAmJgotICAgICAgKGN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IFNDQ0JfQ09NUExFVEUpKSB7CisJd2hpbGUgKFJEX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcpICYgU0NTSV9BQ0spIHsKKwl9CiAKLSAgICAgIGN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9QQVJJVFlfRVJSOwotICAgICAgV1JXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCksIFBBUklUWSk7Ci0gICAgICB9CisJVGltZU91dExvb3AgPSAwOwogCisJd2hpbGUgKFJEX0hBUlBPT04ocG9ydCArIGhwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpIHsKKwkJaWYgKFJEV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCkpICYgQlVTX0ZSRUUpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfb2Zmc2V0Y3RyKSAmICh1bnNpZ25lZCBjaGFyKTB4MUYpIHsKKwkJCWJyZWFrOworCQl9CisJCWlmIChSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmIFJFU0VUKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKChSRF9IQVJQT09OKHBvcnQgKyBocF9zY3Npc2lnKSAmIFNDU0lfUkVRKQorCQkgICAgfHwgKFRpbWVPdXRMb29wKysgPiAweDMwMDApKQorCQkJYnJlYWs7CisJfQogCi0gICBGUFRfaG9zdERhdGFYZmVyQWJvcnQocG9ydCxwX2NhcmQsY3VyclNDQ0IpOworCXNQaGFzZSA9IFJEX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcpICYgKFNDU0lfQlNZIHwgU19TQ1NJX1BIWik7CisJaWYgKCghKFJEX0hBUlBPT04ocG9ydCArIGhwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpKSB8fAorCSAgICAoUkRfSEFSUE9PTihwb3J0ICsgaHBfb2Zmc2V0Y3RyKSAmICh1bnNpZ25lZCBjaGFyKTB4MUYpIHx8CisJICAgIChzUGhhc2UgPT0gKFNDU0lfQlNZIHwgU19EQVRBT19QSCkpIHx8CisJICAgIChzUGhhc2UgPT0gKFNDU0lfQlNZIHwgU19EQVRBSV9QSCkpKSB7CiAKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfcG9ydGN0cmxfMCwgU0NTSV9QT1JUKTsKIAotICAgd2hpbGUgKFJEX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnKSAmIFNDU0lfQUNLKSB7fQorCQlpZiAoIShjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX0FMTF9YRkVSUkVEKSkgeworCQkJaWYgKGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfSE9TVF9YRkVSX0RJUikgeworCQkJCUZQVF9waGFzZURhdGFJbihwb3J0LCBwX2NhcmQpOworCQkJfQogCi0gICBUaW1lT3V0TG9vcCA9IDA7CisJCQllbHNlIHsKKwkJCQlGUFRfcGhhc2VEYXRhT3V0KHBvcnQsIHBfY2FyZCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlGUFRfc3hmcnAocG9ydCwgcF9jYXJkKTsKKwkJCWlmICghKFJEV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCkpICYKKwkJCSAgICAgIChCVVNfRlJFRSB8IElDTURfQ09NUCB8IElUQVJfRElTQyB8IFJFU0VUKSkpIHsKKwkJCQlXUldfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpLCBBVVRPX0lOVCk7CisJCQkJRlBUX3BoYXNlRGVjb2RlKHBvcnQsIHBfY2FyZCk7CisJCQl9CisJCX0KIAotICAgd2hpbGUoUkRfSEFSUE9PTihwb3J0K2hwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpCi0gICAgICB7Ci0gICAgICBpZiAoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgQlVTX0ZSRUUpIHsKLQkgICAgICByZXR1cm47Ci0gICAJICAgfQotICAgICAgaWYgKFJEX0hBUlBPT04ocG9ydCtocF9vZmZzZXRjdHIpICYgKFVDSEFSKTB4MUYpIHsKLQkgICAgICBicmVhazsKLSAgIAkgICB9Ci0gICAgICBpZiAoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgUkVTRVQpIHsKLQkgICAgICByZXR1cm47Ci0gICAJICAgfQotICAgICAgaWYgKChSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkgfHwgKFRpbWVPdXRMb29wKys+MHgzMDAwKSApCi0gICAJICAgYnJlYWs7Ci0gICAgICB9CisJfQogCi0Jc1BoYXNlID0gUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcpICYgKFNDU0lfQlNZIHwgU19TQ1NJX1BIWik7Ci0gICBpZiAoKCEoUkRfSEFSUE9PTihwb3J0K2hwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpKSAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAoUkRfSEFSUE9PTihwb3J0K2hwX29mZnNldGN0cikgJiAoVUNIQVIpMHgxRikgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAoc1BoYXNlID09IChTQ1NJX0JTWSB8IFNfREFUQU9fUEgpKSB8fAotICAgICAgKHNQaGFzZSA9PSAoU0NTSV9CU1kgfCBTX0RBVEFJX1BIKSkpCi0gICAgICB7Ci0KLQkgICBXUl9IQVJQT09OKHBvcnQraHBfcG9ydGN0cmxfMCwgU0NTSV9QT1JUKTsKLQotCSAgIGlmICghKGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQUxMX1hGRVJSRUQpKQotICAgICAgICAgewotCSAgICAgIGlmIChjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX0hPU1RfWEZFUl9ESVIpIHsKLQkgICAgICAgICBGUFRfcGhhc2VEYXRhSW4ocG9ydCxwX2NhcmQpOwotCSAgICAgIAl9Ci0KLQkgICAJZWxzZSB7Ci0JICAgICAgIEZQVF9waGFzZURhdGFPdXQocG9ydCxwX2NhcmQpOwotCSAgICAgICAJfQotCSAgIAl9Ci0JCWVsc2UKLSAgICAgIAl7Ci0JICAgCUZQVF9zeGZycChwb3J0LHBfY2FyZCk7Ci0JICAgCWlmICghKFJEV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpKSAmCi0JCSAgICAgIChCVVNfRlJFRSB8IElDTURfQ09NUCB8IElUQVJfRElTQyB8IFJFU0VUKSkpCi0gICAgICAgICB7Ci0gICAJCVdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBBVVRPX0lOVCk7Ci0JCSAgIEZQVF9waGFzZURlY29kZShwb3J0LHBfY2FyZCk7Ci0JCSAgIH0KLQkgICB9Ci0KLSAgIH0KLQotICAgZWxzZSB7Ci0gICAgICBXUl9IQVJQT09OKHBvcnQraHBfcG9ydGN0cmxfMCwgMHgwMCk7Ci0gICAgICB9CisJZWxzZSB7CisJCVdSX0hBUlBPT04ocG9ydCArIGhwX3BvcnRjdHJsXzAsIDB4MDApOworCX0KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2luaXRzCkBAIC00NTI3LDM5ICszOTI0LDM3IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfc2luaXRzKFBTQ0NCIHBfc2NjYiwgVUNIQVIgcF9jYXJkKQorc3RhdGljIHZvaWQgRlBUX3Npbml0cyhzdHJ1Y3Qgc2NjYiAqcF9zY2NiLCB1bnNpZ25lZCBjaGFyIHBfY2FyZCkKIHsKLSAgIFBTQ0NCTWdyX3Rhcl9pbmZvIGN1cnJUYXJfSW5mbzsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotCWlmKChwX3NjY2ItPlRhcmdJRCA+IE1BWF9TQ1NJX1RBUikgfHwgKHBfc2NjYi0+THVuID4gTUFYX0xVTikpCi0JeworCWlmICgocF9zY2NiLT5UYXJnSUQgPiBNQVhfU0NTSV9UQVIpIHx8IChwX3NjY2ItPkx1biA+IE1BWF9MVU4pKSB7CiAJCXJldHVybjsKIAl9Ci0gICBjdXJyVGFyX0luZm8gPSAmRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtwX3NjY2ItPlRhcmdJRF07CisJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bcF9zY2NiLT5UYXJnSURdOwogCi0gICBwX3NjY2ItPlNjY2JfWGZlclN0YXRlICAgICA9IDB4MDA7Ci0gICBwX3NjY2ItPlNjY2JfWGZlckNudCAgICAgICA9IHBfc2NjYi0+RGF0YUxlbmd0aDsKKwlwX3NjY2ItPlNjY2JfWGZlclN0YXRlID0gMHgwMDsKKwlwX3NjY2ItPlNjY2JfWGZlckNudCA9IHBfc2NjYi0+RGF0YUxlbmd0aDsKIAotICAgaWYgKChwX3NjY2ItPk9wZXJhdGlvbkNvZGUgPT0gU0NBVFRFUl9HQVRIRVJfQ09NTUFORCkgfHwKLSAgICAgIChwX3NjY2ItPk9wZXJhdGlvbkNvZGUgPT0gUkVTSURVQUxfU0dfQ09NTUFORCkpIHsKKwlpZiAoKHBfc2NjYi0+T3BlcmF0aW9uQ29kZSA9PSBTQ0FUVEVSX0dBVEhFUl9DT01NQU5EKSB8fAorCSAgICAocF9zY2NiLT5PcGVyYXRpb25Db2RlID09IFJFU0lEVUFMX1NHX0NPTU1BTkQpKSB7CiAKLSAgICAgIHBfc2NjYi0+U2NjYl9TR29mZnNldCAgID0gMDsKLSAgICAgIHBfc2NjYi0+U2NjYl9YZmVyU3RhdGUgID0gRl9TR19YRkVSOwotICAgICAgcF9zY2NiLT5TY2NiX1hmZXJDbnQgICAgPSAweDAwOwotICAgICAgfQorCQlwX3NjY2ItPlNjY2JfU0dvZmZzZXQgPSAwOworCQlwX3NjY2ItPlNjY2JfWGZlclN0YXRlID0gRl9TR19YRkVSOworCQlwX3NjY2ItPlNjY2JfWGZlckNudCA9IDB4MDA7CisJfQogCi0gICBpZiAocF9zY2NiLT5EYXRhTGVuZ3RoID09IDB4MDApCisJaWYgKHBfc2NjYi0+RGF0YUxlbmd0aCA9PSAweDAwKQogCi0gICAgICBwX3NjY2ItPlNjY2JfWGZlclN0YXRlIHw9IEZfQUxMX1hGRVJSRUQ7CisJCXBfc2NjYi0+U2NjYl9YZmVyU3RhdGUgfD0gRl9BTExfWEZFUlJFRDsKIAotICAgaWYgKHBfc2NjYi0+Q29udHJvbEJ5dGUgJiBGX1VTRV9DTURfUSkKLSAgICAgIHsKLSAgICAgIGlmICgoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgPT0gVEFHX1FfUkVKRUNUKQotICAgICAgICAgcF9zY2NiLT5Db250cm9sQnl0ZSAmPSB+Rl9VU0VfQ01EX1E7CisJaWYgKHBfc2NjYi0+Q29udHJvbEJ5dGUgJiBGX1VTRV9DTURfUSkgeworCQlpZiAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spID09IFRBR19RX1JFSkVDVCkKKwkJCXBfc2NjYi0+Q29udHJvbEJ5dGUgJj0gfkZfVVNFX0NNRF9ROwogCi0gICAgICBlbHNlCi0JICAgICAgY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgfD0gVEFHX1FfVFJZSU5HOwotICAgICAgfQorCQllbHNlCisJCQljdXJyVGFyX0luZm8tPlRhclN0YXR1cyB8PSBUQUdfUV9UUllJTkc7CisJfQogCiAvKiAgICAgIEZvciAhc2luZ2xlIFNDU0kgZGV2aWNlIGluIHN5c3RlbSAgJiBkZXZpY2UgYWxsb3cgRGlzY29ubmVjdAogCW9yIGNvbW1hbmQgaXMgdGFnX3EgdHlwZSB0aGVuIHNlbmQgQ21kIHdpdGggRGlzY29ubmVjdCBFbmFibGUKQEAgLTQ1NzAsMzUgKzM5NjUsMzUgQEAKICAgICAgIChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9BTExPV19ESVNDKSkgfHwKICAgICAgIChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBR19RX1RSWUlORykpIHsKICovCi0gICBpZiAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX0FMTE9XX0RJU0MpIHx8Ci0gICAgICAoY3VyclRhcl9JbmZvLT5UYXJTdGF0dXMgJiBUQUdfUV9UUllJTkcpKSB7Ci0gICAgICBwX3NjY2ItPlNjY2JfaWRtc2cgICAgICA9IChVQ0hBUikoU01JREVOVCB8IERJU0NfUFJJVikgfCBwX3NjY2ItPkx1bjsKLSAgICAgIH0KKwlpZiAoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX0FMTE9XX0RJU0MpIHx8CisJICAgIChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBR19RX1RSWUlORykpIHsKKwkJcF9zY2NiLT5TY2NiX2lkbXNnID0KKwkJICAgICh1bnNpZ25lZCBjaGFyKShTTUlERU5UIHwgRElTQ19QUklWKSB8IHBfc2NjYi0+THVuOworCX0KIAotICAgZWxzZSB7CisJZWxzZSB7CiAKLSAgICAgIHBfc2NjYi0+U2NjYl9pZG1zZyAgICAgID0gKFVDSEFSKVNNSURFTlQgfCBwX3NjY2ItPkx1bjsKLSAgICAgIH0KKwkJcF9zY2NiLT5TY2NiX2lkbXNnID0gKHVuc2lnbmVkIGNoYXIpU01JREVOVCB8IHBfc2NjYi0+THVuOworCX0KIAotICAgcF9zY2NiLT5Ib3N0U3RhdHVzICAgICAgICAgPSAweDAwOwotICAgcF9zY2NiLT5UYXJnZXRTdGF0dXMgICAgICAgPSAweDAwOwotICAgcF9zY2NiLT5TY2NiX3RhZyAgICAgICAgICAgPSAweDAwOwotICAgcF9zY2NiLT5TY2NiX01HUkZsYWdzICAgICAgPSAweDAwOwotICAgcF9zY2NiLT5TY2NiX3Nnc2VnICAgICAgICAgPSAweDAwOwotICAgcF9zY2NiLT5TY2NiX0FUQyAgICAgICAgICAgPSAweDAwOwotICAgcF9zY2NiLT5TY2NiX3NhdmVkQVRDICAgICAgPSAweDAwOworCXBfc2NjYi0+SG9zdFN0YXR1cyA9IDB4MDA7CisJcF9zY2NiLT5UYXJnZXRTdGF0dXMgPSAweDAwOworCXBfc2NjYi0+U2NjYl90YWcgPSAweDAwOworCXBfc2NjYi0+U2NjYl9NR1JGbGFncyA9IDB4MDA7CisJcF9zY2NiLT5TY2NiX3Nnc2VnID0gMHgwMDsKKwlwX3NjY2ItPlNjY2JfQVRDID0gMHgwMDsKKwlwX3NjY2ItPlNjY2Jfc2F2ZWRBVEMgPSAweDAwOwogLyoKICAgIHBfc2NjYi0+U2NjYlZpcnREYXRhUHRyICAgID0gMHgwMDsKICAgIHBfc2NjYi0+U2NjYl9mb3J3YXJkbGluayAgID0gTlVMTDsKICAgIHBfc2NjYi0+U2NjYl9iYWNrbGluayAgICAgID0gTlVMTDsKICAqLwotICAgcF9zY2NiLT5TY2NiX3Njc2lzdGF0ICAgICAgPSBCVVNfRlJFRV9TVDsKLSAgIHBfc2NjYi0+U2NjYlN0YXR1cyAgICAgICAgID0gU0NDQl9JTl9QUk9DRVNTOwotICAgcF9zY2NiLT5TY2NiX3Njc2ltc2cgICAgICAgPSBTTU5PX09QOworCXBfc2NjYi0+U2NjYl9zY3Npc3RhdCA9IEJVU19GUkVFX1NUOworCXBfc2NjYi0+U2NjYlN0YXR1cyA9IFNDQ0JfSU5fUFJPQ0VTUzsKKwlwX3NjY2ItPlNjY2Jfc2NzaW1zZyA9IFNNTk9fT1A7CiAKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBQaGFzZSBEZWNvZGUKQEAgLTQ2MDcsMjMgKzQwMDIsMjEgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9waGFzZURlY29kZShVTE9ORyBwX3BvcnQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9waGFzZURlY29kZSh1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICB1bnNpZ25lZCBjaGFyIHBoYXNlX3JlZjsKLSAgIHZvaWQgKCpwaGFzZSkgKFVMT05HLCBVQ0hBUik7CisJdW5zaWduZWQgY2hhciBwaGFzZV9yZWY7CisJdm9pZCAoKnBoYXNlKSAodW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhcik7CiAKKwlESVNBQkxFX0FVVE8ocF9wb3J0KTsKIAotICAgRElTQUJMRV9BVVRPKHBfcG9ydCk7CisJcGhhc2VfcmVmID0KKwkgICAgKHVuc2lnbmVkIGNoYXIpKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZykgJiBTX1NDU0lfUEhaKTsKIAotICAgcGhhc2VfcmVmID0gKFVDSEFSKSAoUkRfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZykgJiBTX1NDU0lfUEhaKTsKKwlwaGFzZSA9IEZQVF9zX1BoYXNlVGJsW3BoYXNlX3JlZl07CiAKLSAgIHBoYXNlID0gRlBUX3NfUGhhc2VUYmxbcGhhc2VfcmVmXTsKLQotICAgKCpwaGFzZSkocF9wb3J0LCBwX2NhcmQpOyAgICAgICAgICAgLyogQ2FsbCB0aGUgY29ycmVjdCBwaGFzZSBmdW5jICovCisJKCpwaGFzZSkgKHBfcG9ydCwgcF9jYXJkKTsJLyogQ2FsbCB0aGUgY29ycmVjdCBwaGFzZSBmdW5jICovCiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBEYXRhIE91dCBQaGFzZQpAQCAtNDYzMiw0MiArNDAyNSwzOSBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3BoYXNlRGF0YU91dChVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdm9pZCBGUFRfcGhhc2VEYXRhT3V0KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7CiAKLSAgIFBTQ0NCIGN1cnJTQ0NCOworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKIAotICAgY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOwotICAgaWYgKGN1cnJTQ0NCID09IE5VTEwpCi0gICAgICB7Ci0gICAgICByZXR1cm47ICAvKiBFeGl0IGlmIE5vIFNDQ0IgcmVjb3JkICovCi0gICAgICB9CisJY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOworCWlmIChjdXJyU0NDQiA9PSBOVUxMKSB7CisJCXJldHVybjsJCS8qIEV4aXQgaWYgTm8gU0NDQiByZWNvcmQgKi8KKwl9CiAKLSAgIGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gREFUQV9PVVRfU1Q7Ci0gICBjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJj0gfihGX0hPU1RfWEZFUl9ESVIgfCBGX05PX0RBVEFfWUVUKTsKKwljdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IERBVEFfT1VUX1NUOworCWN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmPSB+KEZfSE9TVF9YRkVSX0RJUiB8IEZfTk9fREFUQV9ZRVQpOwogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfcG9ydGN0cmxfMCwgU0NTSV9QT1JUKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9wb3J0Y3RybF8wLCBTQ1NJX1BPUlQpOwogCi0gICBXUldfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSwgWEZFUl9DTlRfMCk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSwgWEZFUl9DTlRfMCk7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMCwgKEVORF9EQVRBK0VORF9EQVRBX1NUQVJUKSk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzAsIChFTkRfREFUQSArIEVORF9EQVRBX1NUQVJUKSk7CiAKLSAgIEZQVF9kYXRhWGZlclByb2Nlc3Nvcihwb3J0LCAmRlBUX0JMX0NhcmRbcF9jYXJkXSk7CisJRlBUX2RhdGFYZmVyUHJvY2Vzc29yKHBvcnQsICZGUFRfQkxfQ2FyZFtwX2NhcmRdKTsKIAotICAgaWYgKGN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPT0gMCkgeworCWlmIChjdXJyU0NDQi0+U2NjYl9YZmVyQ250ID09IDApIHsKIAorCQlpZiAoKGN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmIFNDQ0JfREFUQV9YRkVSX09VVCkgJiYKKwkJICAgIChjdXJyU0NDQi0+SG9zdFN0YXR1cyA9PSBTQ0NCX0NPTVBMRVRFKSkKKwkJCWN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9EQVRBX09WRVJfUlVOOwogCi0gICAgICBpZiAoKGN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmIFNDQ0JfREFUQV9YRkVSX09VVCkgJiYKLQkgKGN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IFNDQ0JfQ09NUExFVEUpKQotCSBjdXJyU0NDQi0+SG9zdFN0YXR1cyA9IFNDQ0JfREFUQV9PVkVSX1JVTjsKLQotICAgICAgRlBUX3N4ZnJwKHBvcnQscF9jYXJkKTsKLSAgICAgIGlmICghKFJEV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFJFU0VUKSkpCi0JICAgIEZQVF9waGFzZURlY29kZShwb3J0LHBfY2FyZCk7Ci0gICAgICB9CisJCUZQVF9zeGZycChwb3J0LCBwX2NhcmQpOworCQlpZiAoIShSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmIChCVVNfRlJFRSB8IFJFU0VUKSkpCisJCQlGUFRfcGhhc2VEZWNvZGUocG9ydCwgcF9jYXJkKTsKKwl9CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogRGF0YSBJbiBQaGFzZQpAQCAtNDY3Niw0MyArNDA2Niw0MCBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3BoYXNlRGF0YUluKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9waGFzZURhdGFJbih1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgcF9jYXJkKQogewogCi0gICBQU0NDQiBjdXJyU0NDQjsKKwlzdHJ1Y3Qgc2NjYiAqY3VyclNDQ0I7CiAKLSAgIGN1cnJTQ0NCID0gRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQjsKKwljdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7CiAKLSAgIGlmIChjdXJyU0NDQiA9PSBOVUxMKQotICAgICAgewotICAgICAgcmV0dXJuOyAgLyogRXhpdCBpZiBObyBTQ0NCIHJlY29yZCAqLwotICAgICAgfQorCWlmIChjdXJyU0NDQiA9PSBOVUxMKSB7CisJCXJldHVybjsJCS8qIEV4aXQgaWYgTm8gU0NDQiByZWNvcmQgKi8KKwl9CiAKKwljdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IERBVEFfSU5fU1Q7CisJY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlIHw9IEZfSE9TVF9YRkVSX0RJUjsKKwljdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJj0gfkZfTk9fREFUQV9ZRVQ7CiAKLSAgIGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gREFUQV9JTl9TVDsKLSAgIGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSB8PSBGX0hPU1RfWEZFUl9ESVI7Ci0gICBjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJj0gfkZfTk9fREFUQV9ZRVQ7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfcG9ydGN0cmxfMCwgU0NTSV9QT1JUKTsKIAotICAgV1JfSEFSUE9PTihwb3J0K2hwX3BvcnRjdHJsXzAsIFNDU0lfUE9SVCk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSwgWEZFUl9DTlRfMCk7CiAKLSAgIFdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBYRkVSX0NOVF8wKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMCwgKEVORF9EQVRBICsgRU5EX0RBVEFfU1RBUlQpKTsKIAotICAgV1JfSEFSUE9PTihwb3J0K2hwX2F1dG9zdGFydF8wLCAoRU5EX0RBVEErRU5EX0RBVEFfU1RBUlQpKTsKKwlGUFRfZGF0YVhmZXJQcm9jZXNzb3IocG9ydCwgJkZQVF9CTF9DYXJkW3BfY2FyZF0pOwogCi0gICBGUFRfZGF0YVhmZXJQcm9jZXNzb3IocG9ydCwgJkZQVF9CTF9DYXJkW3BfY2FyZF0pOworCWlmIChjdXJyU0NDQi0+U2NjYl9YZmVyQ250ID09IDApIHsKIAotICAgaWYgKGN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPT0gMCkgeworCQlpZiAoKGN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmIFNDQ0JfREFUQV9YRkVSX0lOKSAmJgorCQkgICAgKGN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IFNDQ0JfQ09NUExFVEUpKQorCQkJY3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX0RBVEFfT1ZFUl9SVU47CiAKKwkJRlBUX3N4ZnJwKHBvcnQsIHBfY2FyZCk7CisJCWlmICghKFJEV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCkpICYgKEJVU19GUkVFIHwgUkVTRVQpKSkKKwkJCUZQVF9waGFzZURlY29kZShwb3J0LCBwX2NhcmQpOwogCi0gICAgICBpZiAoKGN1cnJTQ0NCLT5Db250cm9sQnl0ZSAmIFNDQ0JfREFUQV9YRkVSX0lOKSAmJgotCSAoY3VyclNDQ0ItPkhvc3RTdGF0dXMgPT0gU0NDQl9DT01QTEVURSkpCi0JIGN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9EQVRBX09WRVJfUlVOOwotCi0gICAgICBGUFRfc3hmcnAocG9ydCxwX2NhcmQpOwotICAgICAgaWYgKCEoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgKEJVU19GUkVFIHwgUkVTRVQpKSkKLQkgICAgRlBUX3BoYXNlRGVjb2RlKHBvcnQscF9jYXJkKTsKLQotICAgICAgfQorCX0KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ3MjMsNTAgKzQxMTAsNDkgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9waGFzZUNvbW1hbmQoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdm9pZCBGUFRfcGhhc2VDb21tYW5kKHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBjaGFyIHBfY2FyZCkKIHsKLSAgIFBTQ0NCIGN1cnJTQ0NCOwotICAgVUxPTkcgY2RiX3JlZzsKLSAgIFVDSEFSIGk7CisJc3RydWN0IHNjY2IgKmN1cnJTQ0NCOworCXVuc2lnbmVkIGxvbmcgY2RiX3JlZzsKKwl1bnNpZ25lZCBjaGFyIGk7CiAKLSAgIGN1cnJTQ0NCID0gRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQjsKKwljdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7CiAKLSAgIGlmIChjdXJyU0NDQi0+T3BlcmF0aW9uQ29kZSA9PSBSRVNFVF9DT01NQU5EKSB7CisJaWYgKGN1cnJTQ0NCLT5PcGVyYXRpb25Db2RlID09IFJFU0VUX0NPTU1BTkQpIHsKIAotICAgICAgY3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX1BIQVNFX1NFUVVFTkNFX0ZBSUw7Ci0gICAgICBjdXJyU0NDQi0+Q2RiTGVuZ3RoID0gU0lYX0JZVEVfQ01EOwotICAgICAgfQorCQljdXJyU0NDQi0+SG9zdFN0YXR1cyA9IFNDQ0JfUEhBU0VfU0VRVUVOQ0VfRkFJTDsKKwkJY3VyclNDQ0ItPkNkYkxlbmd0aCA9IFNJWF9CWVRFX0NNRDsKKwl9CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIDB4MDApOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZywgMHgwMCk7CiAKLSAgIEFSQU1fQUNDRVNTKHBfcG9ydCk7CisJQVJBTV9BQ0NFU1MocF9wb3J0KTsKIAorCWNkYl9yZWcgPSBwX3BvcnQgKyBDTURfU1RSVDsKIAotICAgY2RiX3JlZyA9IHBfcG9ydCArIENNRF9TVFJUOworCWZvciAoaSA9IDA7IGkgPCBjdXJyU0NDQi0+Q2RiTGVuZ3RoOyBpKyspIHsKIAotICAgZm9yIChpPTA7IGkgPCBjdXJyU0NDQi0+Q2RiTGVuZ3RoOyBpKyspIHsKKwkJaWYgKGN1cnJTQ0NCLT5PcGVyYXRpb25Db2RlID09IFJFU0VUX0NPTU1BTkQpCiAKLSAgICAgIGlmIChjdXJyU0NDQi0+T3BlcmF0aW9uQ29kZSA9PSBSRVNFVF9DT01NQU5EKQorCQkJV1JXX0hBUlBPT04oY2RiX3JlZywgKE1QTV9PUCArIEFDT01NQU5EICsgMHgwMCkpOwogCi0JIFdSV19IQVJQT09OKGNkYl9yZWcsIChNUE1fT1AgKyBBQ09NTUFORCArIDB4MDApKTsKKwkJZWxzZQorCQkJV1JXX0hBUlBPT04oY2RiX3JlZywKKwkJCQkgICAgKE1QTV9PUCArIEFDT01NQU5EICsgY3VyclNDQ0ItPkNkYltpXSkpOworCQljZGJfcmVnICs9IDI7CisJfQogCi0gICAgICBlbHNlCi0JIFdSV19IQVJQT09OKGNkYl9yZWcsIChNUE1fT1AgKyBBQ09NTUFORCArIGN1cnJTQ0NCLT5DZGJbaV0pKTsKLSAgICAgIGNkYl9yZWcgKz0yOwotICAgICAgfQorCWlmIChjdXJyU0NDQi0+Q2RiTGVuZ3RoICE9IFRXRUxWRV9CWVRFX0NNRCkKKwkJV1JXX0hBUlBPT04oY2RiX3JlZywgKEJSSF9PUCArIEFMV0FZUyArIE5QKSk7CiAKLSAgIGlmIChjdXJyU0NDQi0+Q2RiTGVuZ3RoICE9IFRXRUxWRV9CWVRFX0NNRCkKLSAgICAgIFdSV19IQVJQT09OKGNkYl9yZWcsIChCUkhfT1ArQUxXQVlTKyAgICBOUCkpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfcG9ydGN0cmxfMCwgKFNDU0lfUE9SVCkpOwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9wb3J0Y3RybF8wLChTQ1NJX1BPUlQpKTsKKwljdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IENPTU1BTkRfU1Q7CiAKLSAgIGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID0gQ09NTUFORF9TVDsKLQotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfYXV0b3N0YXJ0XzMsIChBVVRPX0lNTUVEIHwgQ01EX09OTFlfU1RSVCkpOwotICAgU0dSQU1fQUNDRVNTKHBfcG9ydCk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9hdXRvc3RhcnRfMywgKEFVVE9fSU1NRUQgfCBDTURfT05MWV9TVFJUKSk7CisJU0dSQU1fQUNDRVNTKHBfcG9ydCk7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogU3RhdHVzIHBoYXNlCkBAIC00Nzc1LDE5ICs0MTYxLDE4IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfcGhhc2VTdGF0dXMoVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKQorc3RhdGljIHZvaWQgRlBUX3BoYXNlU3RhdHVzKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICAvKiBTdGFydC11cCB0aGUgYXV0b21hdGlvbiB0byBmaW5pc2ggb2ZmIHRoaXMgY29tbWFuZCBhbmQgbGV0IHRoZQotICAgICAgaXNyIGhhbmRsZSB0aGUgaW50ZXJydXB0IGZvciBjb21tYW5kIGNvbXBsZXRlIHdoZW4gaXQgY29tZXMgaW4uCi0gICAgICBXZSBjb3VsZCB3YWl0IGhlcmUgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gYmUgZ2VuZXJhdGVkPwotICAgICovCisJLyogU3RhcnQtdXAgdGhlIGF1dG9tYXRpb24gdG8gZmluaXNoIG9mZiB0aGlzIGNvbW1hbmQgYW5kIGxldCB0aGUKKwkgICBpc3IgaGFuZGxlIHRoZSBpbnRlcnJ1cHQgZm9yIGNvbW1hbmQgY29tcGxldGUgd2hlbiBpdCBjb21lcyBpbi4KKwkgICBXZSBjb3VsZCB3YWl0IGhlcmUgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gYmUgZ2VuZXJhdGVkPworCSAqLwogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfc2NzaXNpZywgMHgwMCk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZywgMHgwMCk7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMCwgKEFVVE9fSU1NRUQrRU5EX0RBVEFfU1RBUlQpKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMCwgKEFVVE9fSU1NRUQgKyBFTkRfREFUQV9TVEFSVCkpOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IFBoYXNlIE1lc3NhZ2UgT3V0CkBAIC00Nzk3LDExICs0MTgyLDExIEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfcGhhc2VNc2dPdXQoVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKQorc3RhdGljIHZvaWQgRlBUX3BoYXNlTXNnT3V0KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0JVUNIQVIgbWVzc2FnZSxzY3NpSUQ7Ci0JUFNDQ0IgY3VyclNDQ0I7Ci0JUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOworCXVuc2lnbmVkIGNoYXIgbWVzc2FnZSwgc2NzaUlEOworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAogCWN1cnJTQ0NCID0gRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQjsKIApAQCAtNDgxMCwxMzMgKzQxOTUsMTI0IEBACiAJCW1lc3NhZ2UgPSBjdXJyU0NDQi0+U2NjYl9zY3NpbXNnOwogCQlzY3NpSUQgPSBjdXJyU0NDQi0+VGFyZ0lEOwogCi0JCWlmIChtZXNzYWdlID09IFNNREVWX1JFU0VUKSAKLQkJewotCisJCWlmIChtZXNzYWdlID09IFNNREVWX1JFU0VUKSB7CiAKIAkJCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Njc2lJRF07CiAJCQljdXJyVGFyX0luZm8tPlRhclN5bmNDdHJsID0gMDsKLQkJCUZQVF9zc3N5bmN2KHBvcnQsIHNjc2lJRCwgTkFSUk9XX1NDU0ksY3VyclRhcl9JbmZvKTsKKwkJCUZQVF9zc3N5bmN2KHBvcnQsIHNjc2lJRCwgTkFSUk9XX1NDU0ksIGN1cnJUYXJfSW5mbyk7CiAKLQkJCWlmIChGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Njc2lJRF0uVGFyRUVWYWx1ZSAmIEVFX1NZTkNfTUFTSykgCi0JCQl7CisJCQlpZiAoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtzY3NpSURdLgorCQkJICAgIFRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spIHsKIAotCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bc2NzaUlEXS5UYXJTdGF0dXMgJj0gflRBUl9TWU5DX01BU0s7CisJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtzY3NpSURdLlRhclN0YXR1cyAmPQorCQkJCSAgICB+VEFSX1NZTkNfTUFTSzsKIAogCQkJfQogCi0JCQlpZiAoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtzY3NpSURdLlRhckVFVmFsdWUgJiBFRV9XSURFX1NDU0kpIAotCQkJeworCQkJaWYgKEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bc2NzaUlEXS4KKwkJCSAgICBUYXJFRVZhbHVlICYgRUVfV0lERV9TQ1NJKSB7CiAKLQkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Njc2lJRF0uVGFyU3RhdHVzICY9IH5UQVJfV0lERV9NQVNLOworCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bc2NzaUlEXS5UYXJTdGF0dXMgJj0KKwkJCQkgICAgflRBUl9XSURFX01BU0s7CiAJCQl9CiAKLQotCQkJRlBUX3F1ZXVlRmx1c2hTY2NiKHBfY2FyZCxTQ0NCX0NPTVBMRVRFKTsKLQkJCUZQVF9TY2NiTWdyVGFibGVJbml0VGFyZ2V0KHBfY2FyZCxzY3NpSUQpOwotCQl9Ci0JCWVsc2UgaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IEFCT1JUX1NUKQotCQl7CisJCQlGUFRfcXVldWVGbHVzaFNjY2IocF9jYXJkLCBTQ0NCX0NPTVBMRVRFKTsKKwkJCUZQVF9TY2NiTWdyVGFibGVJbml0VGFyZ2V0KHBfY2FyZCwgc2NzaUlEKTsKKwkJfSBlbHNlIGlmIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9PSBBQk9SVF9TVCkgewogCQkJY3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX0NPTVBMRVRFOwotCQkJaWYoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbY3VyclNDQ0ItPlNjY2JfdGFnXSAhPSBOVUxMKQotCQkJewotCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW2N1cnJTQ0NCLT5TY2NiX3RhZ10gPSBOVUxMOworCQkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW2N1cnJTQ0NCLT5TY2NiX3RhZ10gIT0KKwkJCSAgICBOVUxMKSB7CisJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbY3VyclNDQ0ItPgorCQkJCQkJCSAgICAgIFNjY2JfdGFnXSA9IE5VTEw7CiAJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtzY3NpSURdLlRhclRhZ1FfQ250LS07CiAJCQl9Ci0JCQkJCQorCiAJCX0KIAotCQllbHNlIGlmIChjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA8IENPTU1BTkRfU1QpIAotCQl7CisJCWVsc2UgaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0IDwgQ09NTUFORF9TVCkgewogCi0KLQkJCWlmKG1lc3NhZ2UgPT0gU01OT19PUCkKLQkJCXsKKwkJCWlmIChtZXNzYWdlID09IFNNTk9fT1ApIHsKIAkJCQljdXJyU0NDQi0+U2NjYl9NR1JGbGFncyB8PSBGX0RFVl9TRUxFQ1RFRDsKLQkJCi0JCQkJRlBUX3NzZWwocG9ydCxwX2NhcmQpOworCisJCQkJRlBUX3NzZWwocG9ydCwgcF9jYXJkKTsKIAkJCQlyZXR1cm47CiAJCQl9Ci0JCX0KLQkJZWxzZSAKLQkJewotCisJCX0gZWxzZSB7CiAKIAkJCWlmIChtZXNzYWdlID09IFNNQUJPUlQpCiAKLQkJCQlGUFRfcXVldWVGbHVzaFNjY2IocF9jYXJkLFNDQ0JfQ09NUExFVEUpOworCQkJCUZQVF9xdWV1ZUZsdXNoU2NjYihwX2NhcmQsIFNDQ0JfQ09NUExFVEUpOwogCQl9CiAKLQl9Ci0JZWxzZSAKLQl7CisJfSBlbHNlIHsKIAkJbWVzc2FnZSA9IFNNQUJPUlQ7CiAJfQogCi0JV1JXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCksIChCVVNfRlJFRSB8IFBIQVNFIHwgWEZFUl9DTlRfMCkpOworCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIChCVVNfRlJFRSB8IFBIQVNFIHwgWEZFUl9DTlRfMCkpOwogCisJV1JfSEFSUE9PTihwb3J0ICsgaHBfcG9ydGN0cmxfMCwgU0NTSV9CVVNfRU4pOwogCi0JV1JfSEFSUE9PTihwb3J0K2hwX3BvcnRjdHJsXzAsIFNDU0lfQlVTX0VOKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9zY3NpZGF0YV8wLCBtZXNzYWdlKTsKIAotCVdSX0hBUlBPT04ocG9ydCtocF9zY3NpZGF0YV8wLG1lc3NhZ2UpOwotCi0JV1JfSEFSUE9PTihwb3J0K2hwX3Njc2lzaWcsIChTQ1NJX0FDSyArIFNfSUxMX1BIKSk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZywgKFNDU0lfQUNLICsgU19JTExfUEgpKTsKIAogCUFDQ0VQVF9NU0cocG9ydCk7CiAKLQlXUl9IQVJQT09OKHBvcnQraHBfcG9ydGN0cmxfMCwgMHgwMCk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfcG9ydGN0cmxfMCwgMHgwMCk7CiAKLQlpZiAoKG1lc3NhZ2UgPT0gU01BQk9SVCkgfHwgKG1lc3NhZ2UgPT0gU01ERVZfUkVTRVQpIHx8IAotCQkJCShtZXNzYWdlID09IFNNQUJPUlRfVEFHKSApIAotCXsKKwlpZiAoKG1lc3NhZ2UgPT0gU01BQk9SVCkgfHwgKG1lc3NhZ2UgPT0gU01ERVZfUkVTRVQpIHx8CisJICAgIChtZXNzYWdlID09IFNNQUJPUlRfVEFHKSkgewogCi0JCXdoaWxlKCEoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgKEJVU19GUkVFIHwgUEhBU0UpKSkge30KKwkJd2hpbGUgKCEoUkRXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSkgJiAoQlVTX0ZSRUUgfCBQSEFTRSkpKSB7CisJCX0KIAotCQlpZiAoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgQlVTX0ZSRUUpIAotCQl7Ci0JCQlXUldfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSwgQlVTX0ZSRUUpOworCQlpZiAoUkRXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSkgJiBCVVNfRlJFRSkgeworCQkJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSwgQlVTX0ZSRUUpOwogCi0JCQlpZiAoY3VyclNDQ0IgIT0gTlVMTCkgCi0JCQl7CisJCQlpZiAoY3VyclNDQ0IgIT0gTlVMTCkgewogCi0JCQkJaWYoKEZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYKLQkJCQkJKChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKQotCQkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckxVTkJ1c3lbY3VyclNDQ0ItPkx1bl0gPSAwOworCQkJCWlmICgoRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkgICAgIGdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pCisJCQkJICAgICYmCisJCQkJICAgICgoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkgICAgICBUYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0KKwkJCQkgICAgIFRBR19RX1RSWUlORykpCisJCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPgorCQkJCQkJCSAgICAgICBUYXJnSURdLgorCQkJCQkgICAgVGFyTFVOQnVzeVtjdXJyU0NDQi0+THVuXSA9IDA7CiAJCQkJZWxzZQotCQkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckxVTkJ1c3lbMF0gPSAwOworCQkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT4KKwkJCQkJCQkgICAgICAgVGFyZ0lEXS4KKwkJCQkJICAgIFRhckxVTkJ1c3lbMF0gPSAwOwogCi0JCQkJRlBUX3F1ZXVlQ21kQ29tcGxldGUoJkZQVF9CTF9DYXJkW3BfY2FyZF0sY3VyclNDQ0IsIHBfY2FyZCk7CisJCQkJRlBUX3F1ZXVlQ21kQ29tcGxldGUoJkZQVF9CTF9DYXJkW3BfY2FyZF0sCisJCQkJCQkgICAgIGN1cnJTQ0NCLCBwX2NhcmQpOwogCQkJfQogCi0JCQllbHNlIAotCQkJewotCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgfD0gRl9ORVdfU0NDQl9DTUQ7CisJCQllbHNlIHsKKwkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9CisJCQkJICAgIEZfTkVXX1NDQ0JfQ01EOwogCQkJfQogCQl9CiAKLQkJZWxzZSAKLQkJeworCQllbHNlIHsKIAotCQkJRlBUX3N4ZnJwKHBvcnQscF9jYXJkKTsKKwkJCUZQVF9zeGZycChwb3J0LCBwX2NhcmQpOwogCQl9CiAJfQogCi0JZWxzZSAKLQl7CisJZWxzZSB7CiAKLQkJaWYobWVzc2FnZSA9PSBTTVBBUklUWSkKLQkJeworCQlpZiAobWVzc2FnZSA9PSBTTVBBUklUWSkgewogCQkJY3VyclNDQ0ItPlNjY2Jfc2NzaW1zZyA9IFNNTk9fT1A7Ci0JCQlXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzEsIChBVVRPX0lNTUVEK0RJU0NPTk5FQ1RfU1RBUlQpKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCUZQVF9zeGZycChwb3J0LHBfY2FyZCk7CisJCQlXUl9IQVJQT09OKHBvcnQgKyBocF9hdXRvc3RhcnRfMSwKKwkJCQkgICAoQVVUT19JTU1FRCArIERJU0NPTk5FQ1RfU1RBUlQpKTsKKwkJfSBlbHNlIHsKKwkJCUZQVF9zeGZycChwb3J0LCBwX2NhcmQpOwogCQl9CiAJfQogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IE1lc3NhZ2UgSW4gcGhhc2UKQEAgLTQ5NDUsNDkgKzQzMjEsNDMgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9waGFzZU1zZ0luKFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9waGFzZU1zZ0luKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0JVUNIQVIgbWVzc2FnZTsKLQlQU0NDQiBjdXJyU0NDQjsKKwl1bnNpZ25lZCBjaGFyIG1lc3NhZ2U7CisJc3RydWN0IHNjY2IgKmN1cnJTQ0NCOwogCiAJY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOwogCi0JaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJiBGX0hPU1RfWEZFUl9BQ1QpIAotCXsKKwlpZiAoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfSE9TVF9YRkVSX0FDVCkgewogCiAJCUZQVF9waGFzZUNoa0ZpZm8ocG9ydCwgcF9jYXJkKTsKIAl9CiAKLQltZXNzYWdlID0gUkRfSEFSUE9PTihwb3J0K2hwX3Njc2lkYXRhXzApOwotCWlmICgobWVzc2FnZSA9PSBTTURJU0MpIHx8IChtZXNzYWdlID09IFNNU0FWRV9EQVRBX1BUUikpIAotCXsKKwltZXNzYWdlID0gUkRfSEFSUE9PTihwb3J0ICsgaHBfc2NzaWRhdGFfMCk7CisJaWYgKChtZXNzYWdlID09IFNNRElTQykgfHwgKG1lc3NhZ2UgPT0gU01TQVZFX0RBVEFfUFRSKSkgewogCi0JCVdSX0hBUlBPT04ocG9ydCtocF9hdXRvc3RhcnRfMSwgKEFVVE9fSU1NRUQrRU5EX0RBVEFfU1RBUlQpKTsKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYXV0b3N0YXJ0XzEsCisJCQkgICAoQVVUT19JTU1FRCArIEVORF9EQVRBX1NUQVJUKSk7CiAKIAl9CiAKLQllbHNlIAotCXsKKwllbHNlIHsKIAotCQltZXNzYWdlID0gRlBUX3NmbShwb3J0LGN1cnJTQ0NCKTsKLQkJaWYgKG1lc3NhZ2UpIAotCQl7CisJCW1lc3NhZ2UgPSBGUFRfc2ZtKHBvcnQsIGN1cnJTQ0NCKTsKKwkJaWYgKG1lc3NhZ2UpIHsKIAorCQkJRlBUX3NkZWNtKG1lc3NhZ2UsIHBvcnQsIHBfY2FyZCk7CiAKLQkJCUZQVF9zZGVjbShtZXNzYWdlLHBvcnQscF9jYXJkKTsKLQotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYoY3VyclNDQ0ItPlNjY2Jfc2NzaW1zZyAhPSBTTVBBUklUWSkKKwkJfSBlbHNlIHsKKwkJCWlmIChjdXJyU0NDQi0+U2NjYl9zY3NpbXNnICE9IFNNUEFSSVRZKQogCQkJCUFDQ0VQVF9NU0cocG9ydCk7Ci0JCQlXUl9IQVJQT09OKHBvcnQraHBfYXV0b3N0YXJ0XzEsIChBVVRPX0lNTUVEK0RJU0NPTk5FQ1RfU1RBUlQpKTsKKwkJCVdSX0hBUlBPT04ocG9ydCArIGhwX2F1dG9zdGFydF8xLAorCQkJCSAgIChBVVRPX0lNTUVEICsgRElTQ09OTkVDVF9TVEFSVCkpOwogCQl9CiAJfQogCiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogSWxsZWdhbCBwaGFzZQpAQCAtNDk5OCwyNSArNDM2OCwyMyBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3BoYXNlSWxsZWdhbChVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdm9pZCBGUFRfcGhhc2VJbGxlZ2FsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICBQU0NDQiBjdXJyU0NDQjsKKwlzdHJ1Y3Qgc2NjYiAqY3VyclNDQ0I7CiAKLSAgIGN1cnJTQ0NCID0gRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQjsKKwljdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnLCBSRF9IQVJQT09OKHBvcnQraHBfc2NzaXNpZykpOwotICAgaWYgKGN1cnJTQ0NCICE9IE5VTEwpIHsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9zY3Npc2lnLCBSRF9IQVJQT09OKHBvcnQgKyBocF9zY3Npc2lnKSk7CisJaWYgKGN1cnJTQ0NCICE9IE5VTEwpIHsKIAotICAgICAgY3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX1BIQVNFX1NFUVVFTkNFX0ZBSUw7Ci0gICAgICBjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IEFCT1JUX1NUOwotICAgICAgY3VyclNDQ0ItPlNjY2Jfc2NzaW1zZyA9IFNNQUJPUlQ7Ci0gICAgICB9CisJCWN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9QSEFTRV9TRVFVRU5DRV9GQUlMOworCQljdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IEFCT1JUX1NUOworCQljdXJyU0NDQi0+U2NjYl9zY3NpbXNnID0gU01BQk9SVDsKKwl9CiAKLSAgIEFDQ0VQVF9NU0dfQVROKHBvcnQpOworCUFDQ0VQVF9NU0dfQVROKHBvcnQpOwogfQogCi0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogUGhhc2UgQ2hlY2sgRklGTwpAQCAtNTAyNiw3NiArNDM5NCw2OSBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3BoYXNlQ2hrRmlmbyhVTE9ORyBwb3J0LCBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdm9pZCBGUFRfcGhhc2VDaGtGaWZvKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICBVTE9ORyB4ZmVyY250OwotICAgUFNDQ0IgY3VyclNDQ0I7CisJdW5zaWduZWQgbG9uZyB4ZmVyY250OworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKIAotICAgY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOworCWN1cnJTQ0NCID0gRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQjsKIAotICAgaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IERBVEFfSU5fU1QpCi0gICAgICB7CisJaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IERBVEFfSU5fU1QpIHsKIAotICAgICAgd2hpbGUoKCEoUkRfSEFSUE9PTihwb3J0K2hwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpKSAmJgotCSAgICAgIChSRF9IQVJQT09OKHBvcnQraHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkpIHt9CisJCXdoaWxlICgoIShSRF9IQVJQT09OKHBvcnQgKyBocF94ZmVyc3RhdCkgJiBGSUZPX0VNUFRZKSkgJiYKKwkJICAgICAgIChSRF9IQVJQT09OKHBvcnQgKyBocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSkgeworCQl9CiAKKwkJaWYgKCEoUkRfSEFSUE9PTihwb3J0ICsgaHBfeGZlcnN0YXQpICYgRklGT19FTVBUWSkpIHsKKwkJCWN1cnJTQ0NCLT5TY2NiX0FUQyArPSBjdXJyU0NDQi0+U2NjYl9YZmVyQ250OwogCi0gICAgICBpZiAoIShSRF9IQVJQT09OKHBvcnQraHBfeGZlcnN0YXQpICYgRklGT19FTVBUWSkpCi0gICAgICAgICB7Ci0JICAgICAgY3VyclNDQ0ItPlNjY2JfQVRDICs9IGN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQ7CisJCQljdXJyU0NDQi0+U2NjYl9YZmVyQ250ID0gMDsKIAotCSAgICAgIGN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPSAwOworCQkJaWYgKChSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmIFBBUklUWSkgJiYKKwkJCSAgICAoY3VyclNDQ0ItPkhvc3RTdGF0dXMgPT0gU0NDQl9DT01QTEVURSkpIHsKKwkJCQljdXJyU0NDQi0+SG9zdFN0YXR1cyA9IFNDQ0JfUEFSSVRZX0VSUjsKKwkJCQlXUldfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpLCBQQVJJVFkpOworCQkJfQogCi0JICAgICAgaWYgKChSRFdfSEFSUE9PTigocG9ydCtocF9pbnRzdGF0KSkgJiBQQVJJVFkpICYmCi0JICAgICAgICAgICAgKGN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IFNDQ0JfQ09NUExFVEUpKQotICAgICAgICAgICAgewotCSAgICAgICAgIGN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9QQVJJVFlfRVJSOwotCSAgICAgICAgIFdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBQQVJJVFkpOwotCSAgICAgICAgIH0KKwkJCUZQVF9ob3N0RGF0YVhmZXJBYm9ydChwb3J0LCBwX2NhcmQsIGN1cnJTQ0NCKTsKIAotCSAgICAgIEZQVF9ob3N0RGF0YVhmZXJBYm9ydChwb3J0LHBfY2FyZCxjdXJyU0NDQik7CisJCQlGUFRfZGF0YVhmZXJQcm9jZXNzb3IocG9ydCwgJkZQVF9CTF9DYXJkW3BfY2FyZF0pOwogCi0JICAgICAgRlBUX2RhdGFYZmVyUHJvY2Vzc29yKHBvcnQsICZGUFRfQkxfQ2FyZFtwX2NhcmRdKTsKKwkJCXdoaWxlICgoIShSRF9IQVJQT09OKHBvcnQgKyBocF94ZmVyc3RhdCkgJiBGSUZPX0VNUFRZKSkKKwkJCSAgICAgICAmJiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfZXh0X3N0YXR1cykgJgorCQkJCSAgIEJNX0NNRF9CVVNZKSkgeworCQkJfQogCi0JICAgICAgd2hpbGUoKCEoUkRfSEFSUE9PTihwb3J0K2hwX3hmZXJzdGF0KSAmIEZJRk9fRU1QVFkpKSAmJgotCSAgICAgICAgIChSRF9IQVJQT09OKHBvcnQraHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkpIHt9CisJCX0KKwl9CiAKLQkgICAgICB9Ci0gICAgICB9ICAvKkVuZCBEYXRhIEluIHNwZWNpZmljIGNvZGUuICovCisJLypFbmQgRGF0YSBJbiBzcGVjaWZpYyBjb2RlLiAqLworCUdFVF9YRkVSX0NOVChwb3J0LCB4ZmVyY250KTsKIAorCVdSX0hBUlBPT04ocG9ydCArIGhwX3hmZXJjbnRfMCwgMHgwMCk7CiAKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9wb3J0Y3RybF8wLCAweDAwKTsKIAotICAgR0VUX1hGRVJfQ05UKHBvcnQseGZlcmNudCk7CisJY3VyclNDQ0ItPlNjY2JfQVRDICs9IChjdXJyU0NDQi0+U2NjYl9YZmVyQ250IC0geGZlcmNudCk7CiAKKwljdXJyU0NDQi0+U2NjYl9YZmVyQ250ID0geGZlcmNudDsKIAotICAgV1JfSEFSUE9PTihwb3J0K2hwX3hmZXJjbnRfMCwgMHgwMCk7CisJaWYgKChSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmIFBBUklUWSkgJiYKKwkgICAgKGN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IFNDQ0JfQ09NUExFVEUpKSB7CiAKKwkJY3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX1BBUklUWV9FUlI7CisJCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIFBBUklUWSk7CisJfQogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfcG9ydGN0cmxfMCwgMHgwMCk7CisJRlBUX2hvc3REYXRhWGZlckFib3J0KHBvcnQsIHBfY2FyZCwgY3VyclNDQ0IpOwogCi0gICBjdXJyU0NDQi0+U2NjYl9BVEMgKz0gKGN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgLSB4ZmVyY250KTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9maWZvd3JpdGUsIDB4MDApOworCVdSX0hBUlBPT04ocG9ydCArIGhwX2ZpZm9yZWFkLCAweDAwKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF94ZmVyc3RhdCwgMHgwMCk7CiAKLSAgIGN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPSB4ZmVyY250OwotCi0gICBpZiAoKFJEV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpKSAmIFBBUklUWSkgJiYKLSAgICAgIChjdXJyU0NDQi0+SG9zdFN0YXR1cyA9PSBTQ0NCX0NPTVBMRVRFKSkgewotCi0gICAgICBjdXJyU0NDQi0+SG9zdFN0YXR1cyA9IFNDQ0JfUEFSSVRZX0VSUjsKLSAgICAgIFdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBQQVJJVFkpOwotICAgICAgfQotCi0KLSAgIEZQVF9ob3N0RGF0YVhmZXJBYm9ydChwb3J0LHBfY2FyZCxjdXJyU0NDQik7Ci0KLQotICAgV1JfSEFSUE9PTihwb3J0K2hwX2ZpZm93cml0ZSwgMHgwMCk7Ci0gICBXUl9IQVJQT09OKHBvcnQraHBfZmlmb3JlYWQsIDB4MDApOwotICAgV1JfSEFSUE9PTihwb3J0K2hwX3hmZXJzdGF0LCAweDAwKTsKLQotICAgV1JXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCksIFhGRVJfQ05UXzApOworCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50c3RhdCksIFhGRVJfQ05UXzApOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IFBoYXNlIEJ1cyBGcmVlCkBAIC01MTA0LDk3ICs0NDY1LDk1IEBACiAgKiAgICAgICAgICAgICAgYmVjYXVzZSBvZiBjb21tYW5kIGNvbXBsZXRlIG9yIGZyb20gYSBkaXNjb25uZWN0LgogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIEZQVF9waGFzZUJ1c0ZyZWUoVUxPTkcgcG9ydCwgVUNIQVIgcF9jYXJkKQorc3RhdGljIHZvaWQgRlBUX3BoYXNlQnVzRnJlZSh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGNoYXIgcF9jYXJkKQogewotICAgUFNDQ0IgY3VyclNDQ0I7CisJc3RydWN0IHNjY2IgKmN1cnJTQ0NCOwogCi0gICBjdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7CisJY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOwogCi0gICBpZiAoY3VyclNDQ0IgIT0gTlVMTCkKLSAgICAgIHsKKwlpZiAoY3VyclNDQ0IgIT0gTlVMTCkgewogCi0gICAgICBESVNBQkxFX0FVVE8ocG9ydCk7CisJCURJU0FCTEVfQVVUTyhwb3J0KTsKIAorCQlpZiAoY3VyclNDQ0ItPk9wZXJhdGlvbkNvZGUgPT0gUkVTRVRfQ09NTUFORCkgewogCi0gICAgICBpZiAoY3VyclNDQ0ItPk9wZXJhdGlvbkNvZGUgPT0gUkVTRVRfQ09NTUFORCkKLSAgICAgICAgIHsKLQotCQkJaWYoKEZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYKLQkJCQkoKEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9IFRBR19RX1RSWUlORykpCi0JICAgCQkgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJMVU5CdXN5W2N1cnJTQ0NCLT5MdW5dID0gMDsKKwkJCWlmICgoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgorCQkJICAgICgoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCSAgICAgIFRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKQorCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkJICAgIFRhckxVTkJ1c3lbY3VyclNDQ0ItPkx1bl0gPSAwOwogCQkJZWxzZQotCQkgICAJIEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyTFVOQnVzeVswXSA9IDA7CisJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkgICAgVGFyTFVOQnVzeVswXSA9IDA7CiAKLQkgICAgICBGUFRfcXVldWVDbWRDb21wbGV0ZSgmRlBUX0JMX0NhcmRbcF9jYXJkXSwgY3VyclNDQ0IsIHBfY2FyZCk7CisJCQlGUFRfcXVldWVDbWRDb21wbGV0ZSgmRlBUX0JMX0NhcmRbcF9jYXJkXSwgY3VyclNDQ0IsCisJCQkJCSAgICAgcF9jYXJkKTsKIAotCSAgICAgIEZQVF9xdWV1ZVNlYXJjaFNlbGVjdCgmRlBUX0JMX0NhcmRbcF9jYXJkXSxwX2NhcmQpOworCQkJRlBUX3F1ZXVlU2VhcmNoU2VsZWN0KCZGUFRfQkxfQ2FyZFtwX2NhcmRdLCBwX2NhcmQpOwogCi0JICAgICAgfQorCQl9CiAKLSAgICAgIGVsc2UgaWYoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1NOX1NUKQotCSAgICAgIHsKLQkgICAgICBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyB8PQotCQkJICAgICAgICAgKFVDSEFSKVNZTkNfU1VQUE9SVEVEOwotCSAgICAgIEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyRUVWYWx1ZSAmPSB+RUVfU1lOQ19NQVNLOwotCSAgICAgIH0KKwkJZWxzZSBpZiAoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1NOX1NUKSB7CisJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyB8PQorCQkJICAgICh1bnNpZ25lZCBjaGFyKVNZTkNfU1VQUE9SVEVEOworCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJFRVZhbHVlICY9CisJCQkgICAgfkVFX1NZTkNfTUFTSzsKKwkJfQogCi0gICAgICBlbHNlIGlmKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9XTl9TVCkKLQkgICAgICB7Ci0JICAgICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJTdGF0dXMgPQotCQkgICAgICAgICAgICAoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KLQkJICAgVGFyU3RhdHVzICYgfldJREVfRU5BQkxFRCkgfCBXSURFX05FR09DSUFURUQ7CisJCWVsc2UgaWYgKGN1cnJTQ0NCLT5TY2NiX3Njc2lzdGF0ID09IFNFTEVDVF9XTl9TVCkgeworCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJTdGF0dXMgPQorCQkJICAgIChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJICAgICBUYXJTdGF0dXMgJiB+V0lERV9FTkFCTEVEKSB8IFdJREVfTkVHT0NJQVRFRDsKIAotCSAgICAgIEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyRUVWYWx1ZSAmPSB+RUVfV0lERV9TQ1NJOwotCSAgICAgIH0KKwkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyRUVWYWx1ZSAmPQorCQkJICAgIH5FRV9XSURFX1NDU0k7CisJCX0KIAotICAgICAgZWxzZSBpZihjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9PSBTRUxFQ1RfUV9TVCkKLQkgICAgICB7Ci0JICAgICAgLyogTWFrZSBzdXJlIHRoaXMgaXMgbm90IGEgcGhvbnkgQlVTX0ZSRUUuICBJZiB3ZSB3ZXJlCi0JICAgICAgcmVzZWxlY3RlZCBvciBpZiBCVVNZIGlzIE5PVCBvbiB0aGVuIHRoaXMgaXMgYQotCSAgICAgIHZhbGlkIEJVUyBGUkVFLiAgU1JSIFdlZG5lc2RheSwgNS8xMC8xOTk1LiAgICAgKi8KKwkJZWxzZSBpZiAoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1FfU1QpIHsKKwkJCS8qIE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCBhIHBob255IEJVU19GUkVFLiAgSWYgd2Ugd2VyZQorCQkJICAgcmVzZWxlY3RlZCBvciBpZiBCVVNZIGlzIE5PVCBvbiB0aGVuIHRoaXMgaXMgYQorCQkJICAgdmFsaWQgQlVTIEZSRUUuICBTUlIgV2VkbmVzZGF5LCA1LzEwLzE5OTUuICAgICAqLwogCi0JICAgICAgaWYgKCghKFJEX0hBUlBPT04ocG9ydCtocF9zY3Npc2lnKSAmIFNDU0lfQlNZKSkgfHwKLQkgICAgICAgICAoUkRXX0hBUlBPT04oKHBvcnQraHBfaW50c3RhdCkpICYgUlNFTCkpCi0JICAgICAgICAgewotCSAgICAgICAgIEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyU3RhdHVzICY9IH5UQVJfVEFHX1FfTUFTSzsKLQkgICAgICAgICBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyB8PSBUQUdfUV9SRUpFQ1Q7Ci0JICAgICAgICAgfQorCQkJaWYgKCghKFJEX0hBUlBPT04ocG9ydCArIGhwX3Njc2lzaWcpICYgU0NTSV9CU1kpKSB8fAorCQkJICAgIChSRFdfSEFSUE9PTigocG9ydCArIGhwX2ludHN0YXQpKSAmIFJTRUwpKSB7CisJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkgICAgVGFyU3RhdHVzICY9IH5UQVJfVEFHX1FfTUFTSzsKKwkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJCSAgICBUYXJTdGF0dXMgfD0gVEFHX1FfUkVKRUNUOworCQkJfQogCi0JICAgICAgZWxzZQotICAgICAgICAgICAgewotCSAgICAgICAgIHJldHVybjsKLQkgICAgICAgICB9Ci0gICAgICAgICB9CisJCQllbHNlIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KIAotICAgICAgZWxzZQotCSAgICAgIHsKKwkJZWxzZSB7CiAKLQkgICAgICBjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9IEJVU19GUkVFX1NUOworCQkJY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPSBCVVNfRlJFRV9TVDsKIAotICAgICAgICAgaWYgKCFjdXJyU0NDQi0+SG9zdFN0YXR1cykKLQkgICAgICAgICB7Ci0JICAgICAgICAgY3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX1BIQVNFX1NFUVVFTkNFX0ZBSUw7Ci0JICAgICAgICAgfQorCQkJaWYgKCFjdXJyU0NDQi0+SG9zdFN0YXR1cykgeworCQkJCWN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9QSEFTRV9TRVFVRU5DRV9GQUlMOworCQkJfQogCi0JCQlpZigoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgotCQkJCSgoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkKLQkgICAJCSBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckxVTkJ1c3lbY3VyclNDQ0ItPkx1bl0gPSAwOworCQkJaWYgKChGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCisJCQkgICAgKChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJICAgICAgVGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9IFRBR19RX1RSWUlORykpCisJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkgICAgVGFyTFVOQnVzeVtjdXJyU0NDQi0+THVuXSA9IDA7CiAJCQllbHNlCi0JCSAgIAkgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJMVU5CdXN5WzBdID0gMDsKKwkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJCSAgICBUYXJMVU5CdXN5WzBdID0gMDsKIAotCSAgICAgIEZQVF9xdWV1ZUNtZENvbXBsZXRlKCZGUFRfQkxfQ2FyZFtwX2NhcmRdLCBjdXJyU0NDQiwgcF9jYXJkKTsKLQkgICAgICByZXR1cm47Ci0JICAgICAgfQorCQkJRlBUX3F1ZXVlQ21kQ29tcGxldGUoJkZQVF9CTF9DYXJkW3BfY2FyZF0sIGN1cnJTQ0NCLAorCQkJCQkgICAgIHBfY2FyZCk7CisJCQlyZXR1cm47CisJCX0KIAorCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9IEZfTkVXX1NDQ0JfQ01EOwogCi0gICAgICBGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9IEZfTkVXX1NDQ0JfQ01EOwotCi0gICAgICB9IC8qZW5kIGlmICE9bnVsbCAqLworCX0JCQkvKmVuZCBpZiAhPW51bGwgKi8KIH0KIAotCi0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogQXV0byBMb2FkIERlZmF1bHQgTWFwCkBAIC01MjAyLDEwMyArNDU2MSwxMDEgQEAKICAqIERlc2NyaXB0aW9uOiBMb2FkIHRoZSBBdXRvbWF0aW9uIFJBTSB3aXRoIHRoZSBkZWZ1YWx0IG1hcCB2YWx1ZXMuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgRlBUX2F1dG9Mb2FkRGVmYXVsdE1hcChVTE9ORyBwX3BvcnQpCitzdGF0aWMgdm9pZCBGUFRfYXV0b0xvYWREZWZhdWx0TWFwKHVuc2lnbmVkIGxvbmcgcF9wb3J0KQogewotICAgVUxPTkcgbWFwX2FkZHI7CisJdW5zaWduZWQgbG9uZyBtYXBfYWRkcjsKIAotICAgQVJBTV9BQ0NFU1MocF9wb3J0KTsKLSAgIG1hcF9hZGRyID0gcF9wb3J0ICsgaHBfYXJhbUJhc2U7CisJQVJBTV9BQ0NFU1MocF9wb3J0KTsKKwltYXBfYWRkciA9IHBfcG9ydCArIGhwX2FyYW1CYXNlOwogCi0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBTVNHX09VVCsgMHhDMCkpOyAgLypJRCBNRVNTQUdFICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBTVNHX09VVCsgMHgyMCkpOyAgLypTSU1QTEUgVEFHIFFVRVVFSU5HIE1TRyAqLwotICAgbWFwX2FkZHIgKz0yOwotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIFJBVF9PUCk7ICAgICAgICAgICAgICAgICAgIC8qUkVTRVQgQVRURU5USU9OICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBTVNHX09VVCsgMHgwMCkpOyAgLypUQUcgSUQgTVNHICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSAwICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSAxICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSAyICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSAzICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSA0ICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSA1ICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSA2ICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSA3ICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSA4ICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSA5ICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCtBQ09NTUFORCsgMHgwMCkpOyAgLypDREIgQllURSAxMCAqLwotICAgbWFwX2FkZHIgKz0yOwotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUE1fT1ArQUNPTU1BTkQrIDB4MDApKTsgIC8qQ0RCIEJZVEUgMTEgKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoQ1BFX09QK0FEQVRBX09VVCsgRElOVCkpOyAvKkpVTVAgSUYgREFUQSBPVVQgKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoVENCX09QK0ZJRk9fMCsgREkpKTsgICAgIC8qSlVNUCBJRiBOTyBEQVRBIElOIEZJRk8gKi8KLSAgIG1hcF9hZGRyICs9MjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qVGhpcyBtZWFucyBBWU5DIERBVEEgSU4gKi8KLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoU1NJX09QKyAgIFNTSV9JRE9fU1RSVCkpOyAvKlNUT1AgQU5EIElOVEVSUlVQVCAqLwotICAgbWFwX2FkZHIgKz0yOwotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIChDUEVfT1ArQURBVEFfSU4rRElOVCkpOyAgIC8qSlVNUCBJRiBOT1QgREFUQSBJTiBQSFogKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoQ1BOX09QK0FNU0dfSU4rICBTVCkpOyAgICAvKklGIE5PVCBNU0cgSU4gQ0hFQ0sgNCBEQVRBIElOICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKENSRF9PUCtTREFUQSsgICAgMHgwMikpOyAgLypTQVZFIERBVEEgUFRSIE1TRz8gKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoQlJIX09QK05PVF9FUSsgICBEQykpOyAgICAvKkdPIENIRUNLIEZPUiBESVNDT05ORUNUIE1TRyAqLwotICAgbWFwX2FkZHIgKz0yOwotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUlJfT1ArU0RBVEErICAgIERfQVIxKSk7IC8qU0FWRSBEQVRBIFBUUlMgTVNHICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKENQTl9PUCtBTVNHX0lOKyAgU1QpKTsgICAgLypJRiBOT1QgTVNHIElOIENIRUNLIERBVEEgSU4gKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoQ1JEX09QK1NEQVRBKyAgICAweDA0KSk7ICAvKkRJU0NPTk5FQ1QgTVNHPyAqLwotICAgbWFwX2FkZHIgKz0yOwotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIChCUkhfT1ArTk9UX0VRKyAgIFVOS05XTikpOy8qVUtOS05PV04gTVNHICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1SUl9PUCtTREFUQSsgICAgRF9CVUNLRVQpKTsvKlhGRVIgRElTQ09OTkVDVCBNU0cgKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoU1NJX09QKyAgICAgICAgICBTU0lfSVRBUl9ESVNDKSk7LypTVE9QIEFORCBJTlRFUlJVUFQgKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoQ1BOX09QK0FTVEFUVVMrICBVTktOV04pKTsvKkpVTVAgSUYgTk9UIFNUQVRVUyBQSFouICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKE1SUl9PUCtTREFUQSsgIERfQVIwKSk7ICAgLypHRVQgU1RBVFVTIEJZVEUgKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoQ1BOX09QK0FNU0dfSU4rICBDQykpOyAgICAvKkVSUk9SIElGIE5PVCBNU0cgSU4gUEhaICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKENSRF9PUCtTREFUQSsgICAgMHgwMCkpOyAgLypDSEVDSyBGT1IgQ01EIENPTVBMRVRFIE1TRy4gKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoQlJIX09QK05PVF9FUSsgICBDQykpOyAgICAvKkVSUk9SIElGIE5PVCBDTUQgQ09NUExFVEUgTVNHLiAqLwotICAgbWFwX2FkZHIgKz0yOwotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUlJfT1ArU0RBVEErICBEX0JVQ0tFVCkpOy8qR0VUIENNRCBDT01QTEVURSBNU0cgKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoU1NJX09QKyAgICAgICBTU0lfSUNNRF9DT01QKSk7LypFTkQgT0YgQ09NTUFORCAqLwotICAgbWFwX2FkZHIgKz0yOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoTVBNX09QICsgQU1TR19PVVQgKyAweEMwKSk7CS8qSUQgTUVTU0FHRSAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUE1fT1AgKyBBTVNHX09VVCArIDB4MjApKTsJLypTSU1QTEUgVEFHIFFVRVVFSU5HIE1TRyAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIFJBVF9PUCk7CS8qUkVTRVQgQVRURU5USU9OICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCArIEFNU0dfT1VUICsgMHgwMCkpOwkvKlRBRyBJRCBNU0cgKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoTVBNX09QICsgQUNPTU1BTkQgKyAweDAwKSk7CS8qQ0RCIEJZVEUgMCAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUE1fT1AgKyBBQ09NTUFORCArIDB4MDApKTsJLypDREIgQllURSAxICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCArIEFDT01NQU5EICsgMHgwMCkpOwkvKkNEQiBCWVRFIDIgKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoTVBNX09QICsgQUNPTU1BTkQgKyAweDAwKSk7CS8qQ0RCIEJZVEUgMyAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUE1fT1AgKyBBQ09NTUFORCArIDB4MDApKTsJLypDREIgQllURSA0ICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCArIEFDT01NQU5EICsgMHgwMCkpOwkvKkNEQiBCWVRFIDUgKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoTVBNX09QICsgQUNPTU1BTkQgKyAweDAwKSk7CS8qQ0RCIEJZVEUgNiAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUE1fT1AgKyBBQ09NTUFORCArIDB4MDApKTsJLypDREIgQllURSA3ICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKE1QTV9PUCArIEFDT01NQU5EICsgMHgwMCkpOwkvKkNEQiBCWVRFIDggKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoTVBNX09QICsgQUNPTU1BTkQgKyAweDAwKSk7CS8qQ0RCIEJZVEUgOSAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUE1fT1AgKyBBQ09NTUFORCArIDB4MDApKTsJLypDREIgQllURSAxMCAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUE1fT1AgKyBBQ09NTUFORCArIDB4MDApKTsJLypDREIgQllURSAxMSAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChDUEVfT1AgKyBBREFUQV9PVVQgKyBESU5UKSk7CS8qSlVNUCBJRiBEQVRBIE9VVCAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChUQ0JfT1AgKyBGSUZPXzAgKyBESSkpOwkvKkpVTVAgSUYgTk8gREFUQSBJTiBGSUZPICovCisJbWFwX2FkZHIgKz0gMjsJCS8qVGhpcyBtZWFucyBBWU5DIERBVEEgSU4gKi8KKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKFNTSV9PUCArIFNTSV9JRE9fU1RSVCkpOwkvKlNUT1AgQU5EIElOVEVSUlVQVCAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChDUEVfT1AgKyBBREFUQV9JTiArIERJTlQpKTsJLypKVU1QIElGIE5PVCBEQVRBIElOIFBIWiAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChDUE5fT1AgKyBBTVNHX0lOICsgU1QpKTsJLypJRiBOT1QgTVNHIElOIENIRUNLIDQgREFUQSBJTiAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChDUkRfT1AgKyBTREFUQSArIDB4MDIpKTsJLypTQVZFIERBVEEgUFRSIE1TRz8gKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoQlJIX09QICsgTk9UX0VRICsgREMpKTsJLypHTyBDSEVDSyBGT1IgRElTQ09OTkVDVCBNU0cgKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoTVJSX09QICsgU0RBVEEgKyBEX0FSMSkpOwkvKlNBVkUgREFUQSBQVFJTIE1TRyAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChDUE5fT1AgKyBBTVNHX0lOICsgU1QpKTsJLypJRiBOT1QgTVNHIElOIENIRUNLIERBVEEgSU4gKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoQ1JEX09QICsgU0RBVEEgKyAweDA0KSk7CS8qRElTQ09OTkVDVCBNU0c/ICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKEJSSF9PUCArIE5PVF9FUSArIFVOS05XTikpOwkvKlVLTktOT1dOIE1TRyAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUlJfT1AgKyBTREFUQSArIERfQlVDS0VUKSk7CS8qWEZFUiBESVNDT05ORUNUIE1TRyAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChTU0lfT1AgKyBTU0lfSVRBUl9ESVNDKSk7CS8qU1RPUCBBTkQgSU5URVJSVVBUICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKENQTl9PUCArIEFTVEFUVVMgKyBVTktOV04pKTsJLypKVU1QIElGIE5PVCBTVEFUVVMgUEhaLiAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUlJfT1AgKyBTREFUQSArIERfQVIwKSk7CS8qR0VUIFNUQVRVUyBCWVRFICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKENQTl9PUCArIEFNU0dfSU4gKyBDQykpOwkvKkVSUk9SIElGIE5PVCBNU0cgSU4gUEhaICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKENSRF9PUCArIFNEQVRBICsgMHgwMCkpOwkvKkNIRUNLIEZPUiBDTUQgQ09NUExFVEUgTVNHLiAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChCUkhfT1AgKyBOT1RfRVEgKyBDQykpOwkvKkVSUk9SIElGIE5PVCBDTUQgQ09NUExFVEUgTVNHLiAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChNUlJfT1AgKyBTREFUQSArIERfQlVDS0VUKSk7CS8qR0VUIENNRCBDT01QTEVURSBNU0cgKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoU1NJX09QICsgU1NJX0lDTURfQ09NUCkpOwkvKkVORCBPRiBDT01NQU5EICovCisJbWFwX2FkZHIgKz0gMjsKIAotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIChTU0lfT1ArIFNTSV9JVU5LV04pKTsgIC8qUkVDRUlWRUQgVU5LTk9XTiBNU0cgQllURSAqLwotICAgbWFwX2FkZHIgKz0yOwotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIChTU0lfT1ArIFNTSV9JTk9fQ0MpKTsgIC8qTk8gQ09NTUFORCBDT01QTEVURSBBRlRFUiBTVEFUVVMgKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoU1NJX09QKyBTU0lfSVRJQ0tMRSkpOyAvKkJJT1MgVGlja2xlZCB0aGUgTWdyICovCi0gICBtYXBfYWRkciArPTI7Ci0gICBXUldfSEFSUE9PTihtYXBfYWRkciwgKFNTSV9PUCsgU1NJX0lSRkFJTCkpOyAgLypFWFBFQ1RFRCBJRC9UQUcgTUVTU0FHRVMgQU5EICovCi0gICBtYXBfYWRkciArPTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUROJ1QgR0VUIE9ORSAqLwotICAgV1JXX0hBUlBPT04obWFwX2FkZHIsIChDUlJfT1ArQVIzKyAgU19JRFJFRykpOyAvKiBjb21wIFNDU0kgU0VMIElEICYgQVIzKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoQlJIX09QK0VRVUFMKyAgIDB4MDApKTsgICAgLypTRUwgSUQgT0sgdGhlbiBDb250aS4gKi8KLSAgIG1hcF9hZGRyICs9MjsKLSAgIFdSV19IQVJQT09OKG1hcF9hZGRyLCAoU1NJX09QKyBTU0lfSU5PX0NDKSk7ICAvKk5PIENPTU1BTkQgQ09NUExFVEUgQUZURVIgU1RBVFVTICovCisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChTU0lfT1AgKyBTU0lfSVVOS1dOKSk7CS8qUkVDRUlWRUQgVU5LTk9XTiBNU0cgQllURSAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChTU0lfT1AgKyBTU0lfSU5PX0NDKSk7CS8qTk8gQ09NTUFORCBDT01QTEVURSBBRlRFUiBTVEFUVVMgKi8KKwltYXBfYWRkciArPSAyOworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoU1NJX09QICsgU1NJX0lUSUNLTEUpKTsJLypCSU9TIFRpY2tsZWQgdGhlIE1nciAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChTU0lfT1AgKyBTU0lfSVJGQUlMKSk7CS8qRVhQRUNURUQgSUQvVEFHIE1FU1NBR0VTIEFORCAqLworCW1hcF9hZGRyICs9IDI7CQkvKiBESUROJ1QgR0VUIE9ORSAqLworCVdSV19IQVJQT09OKG1hcF9hZGRyLCAoQ1JSX09QICsgQVIzICsgU19JRFJFRykpOwkvKiBjb21wIFNDU0kgU0VMIElEICYgQVIzICovCisJbWFwX2FkZHIgKz0gMjsKKwlXUldfSEFSUE9PTihtYXBfYWRkciwgKEJSSF9PUCArIEVRVUFMICsgMHgwMCkpOwkvKlNFTCBJRCBPSyB0aGVuIENvbnRpLiAqLworCW1hcF9hZGRyICs9IDI7CisJV1JXX0hBUlBPT04obWFwX2FkZHIsIChTU0lfT1AgKyBTU0lfSU5PX0NDKSk7CS8qTk8gQ09NTUFORCBDT01QTEVURSBBRlRFUiBTVEFUVVMgKi8KIAotCi0KLSAgIFNHUkFNX0FDQ0VTUyhwX3BvcnQpOworCVNHUkFNX0FDQ0VTUyhwX3BvcnQpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTMxMCwyMDMgKzQ2NjcsMjYxIEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfYXV0b0NtZENtcGx0KFVMT05HIHBfcG9ydCwgVUNIQVIgcF9jYXJkKQorc3RhdGljIHZvaWQgRlBUX2F1dG9DbWRDbXBsdCh1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICBQU0NDQiBjdXJyU0NDQjsKLSAgIFVDSEFSIHN0YXR1c19ieXRlOworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1c19ieXRlOwogCi0gICBjdXJyU0NDQiA9IEZQVF9CTF9DYXJkW3BfY2FyZF0uY3VycmVudFNDQ0I7CisJY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOwogCi0gICBzdGF0dXNfYnl0ZSA9IFJEX0hBUlBPT04ocF9wb3J0K2hwX2dwX3JlZ18wKTsKKwlzdGF0dXNfYnl0ZSA9IFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfZ3BfcmVnXzApOwogCi0gICBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckxVTl9DQSA9IDA7CisJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJMVU5fQ0EgPSAwOwogCi0gICBpZiAoc3RhdHVzX2J5dGUgIT0gU1NHT09EKSB7CisJaWYgKHN0YXR1c19ieXRlICE9IFNTR09PRCkgewogCi0gICAgICBpZiAoc3RhdHVzX2J5dGUgPT0gU1NRX0ZVTEwpIHsKKwkJaWYgKHN0YXR1c19ieXRlID09IFNTUV9GVUxMKSB7CiAKLQotCQkJaWYoKChGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCi0JCQkJKChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKSkKLQkJCXsKLQkgICAgICAgICBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckxVTkJ1c3lbY3VyclNDQ0ItPkx1bl0gPSAxOwotCQkJCWlmKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQorCQkJaWYgKCgoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgorCQkJICAgICAoKEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkgICAgICAgVGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9IFRBR19RX1RSWUlORykpKSB7CisJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkgICAgVGFyTFVOQnVzeVtjdXJyU0NDQi0+THVuXSA9IDE7CisJCQkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQogCQkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQtLTsKLQkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLkx1bkRpc2NRX0lkeFtjdXJyU0NDQi0+THVuXV0gPSBOVUxMOwotCQkJfQotCQkJZWxzZQotCQkJewotCSAgICAgICAgIEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyTFVOQnVzeVswXSA9IDE7Ci0JCQkJaWYoY3VyclNDQ0ItPlNjY2JfdGFnKQotCQkJCXsKLQkJCQkJaWYoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50ICE9IDApCi0JCQkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQtLTsKLQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbY3VyclNDQ0ItPlNjY2JfdGFnXSA9IE5VTEw7Ci0JCQkJfWVsc2UKLQkJCQl7Ci0JCQkJCWlmKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQotCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50LS07Ci0JCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW0ZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uTHVuRGlzY1FfSWR4WzBdXSA9IE5VTEw7CisJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkgICAgZGlzY1FfVGJsW0ZQVF9zY2NiTWdyVGJsW3BfY2FyZF0KKwkJCQkJICAgICAgW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJCQkgICAgICBMdW5EaXNjUV9JZHhbY3VyclNDQ0ItPkx1bl1dID0KKwkJCQkgICAgTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkgICAgVGFyTFVOQnVzeVswXSA9IDE7CisJCQkJaWYgKGN1cnJTQ0NCLT5TY2NiX3RhZykgeworCQkJCQlpZiAoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50ICE9IDApCisJCQkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLgorCQkJCQkJICAgIGRpc2NRQ291bnQtLTsKKwkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbY3VyclNDQ0ItPgorCQkJCQkJCQkgICAgICBTY2NiX3RhZ10KKwkJCQkJICAgID0gTlVMTDsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50ICE9IDApCisJCQkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLgorCQkJCQkJICAgIGRpc2NRQ291bnQtLTsKKwkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJICAgIGRpc2NRX1RibFtGUFRfc2NjYk1nclRibFtwX2NhcmRdCisJCQkJCQkgICAgICBbY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkJCQkgICAgICBMdW5EaXNjUV9JZHhbMF1dID0gTlVMTDsKIAkJCQl9CiAJCQl9CiAKLSAgICAgICAgIGN1cnJTQ0NCLT5TY2NiX01HUkZsYWdzIHw9IEZfU1RBVFVTTE9BREVEOworCQkJY3VyclNDQ0ItPlNjY2JfTUdSRmxhZ3MgfD0gRl9TVEFUVVNMT0FERUQ7CiAKLSAgICAgICAgIEZQVF9xdWV1ZVNlbGVjdEZhaWwoJkZQVF9CTF9DYXJkW3BfY2FyZF0scF9jYXJkKTsKKwkJCUZQVF9xdWV1ZVNlbGVjdEZhaWwoJkZQVF9CTF9DYXJkW3BfY2FyZF0sIHBfY2FyZCk7CiAKLSAgICAgICAgIHJldHVybjsKLSAgICAgICAgIH0KKwkJCXJldHVybjsKKwkJfQogCi0gICAgICBpZihjdXJyU0NDQi0+U2NjYl9zY3Npc3RhdCA9PSBTRUxFQ1RfU05fU1QpCi0gICAgICAgICB7Ci0gICAgICAgICBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyB8PQotICAgICAgICAgICAgKFVDSEFSKVNZTkNfU1VQUE9SVEVEOworCQlpZiAoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1NOX1NUKSB7CisJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyB8PQorCQkJICAgICh1bnNpZ25lZCBjaGFyKVNZTkNfU1VQUE9SVEVEOwogCi0JICAgICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJFRVZhbHVlICY9IH5FRV9TWU5DX01BU0s7Ci0gICAgICAgICBGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9IEZfTkVXX1NDQ0JfQ01EOworCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJFRVZhbHVlICY9CisJCQkgICAgfkVFX1NZTkNfTUFTSzsKKwkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgfD0gRl9ORVdfU0NDQl9DTUQ7CiAKLQkJCWlmKCgoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgotCQkJCSgoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkpCi0JCQl7Ci0JICAgICAgICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJMVU5CdXN5W2N1cnJTQ0NCLT5MdW5dID0gMTsKLQkJCQlpZihGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQgIT0gMCkKKwkJCWlmICgoKEZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYKKwkJCSAgICAgKChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJICAgICAgIFRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKSkgeworCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkJICAgIFRhckxVTkJ1c3lbY3VyclNDQ0ItPkx1bl0gPSAxOworCQkJCWlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQgIT0gMCkKIAkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50LS07Ci0JCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5MdW5EaXNjUV9JZHhbY3VyclNDQ0ItPkx1bl1dID0gTlVMTDsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkgICAgICAgICBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckxVTkJ1c3lbMF0gPSAxOwotCQkJCWlmKGN1cnJTQ0NCLT5TY2NiX3RhZykKLQkJCQl7Ci0JCQkJCWlmKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQotCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50LS07Ci0JCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW2N1cnJTQ0NCLT5TY2NiX3RhZ10gPSBOVUxMOwotCQkJCX1lbHNlCi0JCQkJewotCQkJCQlpZihGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQgIT0gMCkKLQkJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudC0tOwotCQkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLkx1bkRpc2NRX0lkeFswXV0gPSBOVUxMOworCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uCisJCQkJICAgIGRpc2NRX1RibFtGUFRfc2NjYk1nclRibFtwX2NhcmRdCisJCQkJCSAgICAgIFtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkJICAgICAgTHVuRGlzY1FfSWR4W2N1cnJTQ0NCLT5MdW5dXSA9CisJCQkJICAgIE5VTEw7CisJCQl9IGVsc2UgeworCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkJICAgIFRhckxVTkJ1c3lbMF0gPSAxOworCQkJCWlmIChjdXJyU0NDQi0+U2NjYl90YWcpIHsKKwkJCQkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQorCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJCSAgICBkaXNjUUNvdW50LS07CisJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW2N1cnJTQ0NCLT4KKwkJCQkJCQkJICAgICAgU2NjYl90YWddCisJCQkJCSAgICA9IE5VTEw7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQorCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJCSAgICBkaXNjUUNvdW50LS07CisJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uCisJCQkJCSAgICBkaXNjUV9UYmxbRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXQorCQkJCQkJICAgICAgW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJCQkJICAgICAgTHVuRGlzY1FfSWR4WzBdXSA9IE5VTEw7CiAJCQkJfQogCQkJfQotICAgICAgICAgcmV0dXJuOworCQkJcmV0dXJuOwogCi0gICAgICAgICB9CisJCX0KIAotICAgICAgaWYoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1dOX1NUKQotICAgICAgICAgeworCQlpZiAoY3VyclNDQ0ItPlNjY2Jfc2NzaXN0YXQgPT0gU0VMRUNUX1dOX1NUKSB7CiAKLQkgICAgICBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyA9Ci0JICAgICAgICAgKEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uCi0JICAgICAgICAgVGFyU3RhdHVzICYgfldJREVfRU5BQkxFRCkgfCBXSURFX05FR09DSUFURUQ7CisJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyA9CisJCQkgICAgKEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkgICAgIFRhclN0YXR1cyAmIH5XSURFX0VOQUJMRUQpIHwgV0lERV9ORUdPQ0lBVEVEOwogCi0JICAgICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJFRVZhbHVlICY9IH5FRV9XSURFX1NDU0k7Ci0gICAgICAgICBGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9IEZfTkVXX1NDQ0JfQ01EOworCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJFRVZhbHVlICY9CisJCQkgICAgfkVFX1dJREVfU0NTSTsKKwkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgfD0gRl9ORVdfU0NDQl9DTUQ7CiAKLQkJCWlmKCgoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgotCQkJCSgoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJTdGF0dXMgJiBUQVJfVEFHX1FfTUFTSykgIT0gVEFHX1FfVFJZSU5HKSkpCi0JCQl7Ci0JICAgICAgICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJMVU5CdXN5W2N1cnJTQ0NCLT5MdW5dID0gMTsKLQkJCQlpZihGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQgIT0gMCkKKwkJCWlmICgoKEZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYKKwkJCSAgICAgKChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJICAgICAgIFRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKSkgeworCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkJICAgIFRhckxVTkJ1c3lbY3VyclNDQ0ItPkx1bl0gPSAxOworCQkJCWlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQgIT0gMCkKIAkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50LS07Ci0JCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5MdW5EaXNjUV9JZHhbY3VyclNDQ0ItPkx1bl1dID0gTlVMTDsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkgICAgICAgICBGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckxVTkJ1c3lbMF0gPSAxOwotCQkJCWlmKGN1cnJTQ0NCLT5TY2NiX3RhZykKLQkJCQl7Ci0JCQkJCWlmKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQotCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50LS07Ci0JCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW2N1cnJTQ0NCLT5TY2NiX3RhZ10gPSBOVUxMOwotCQkJCX1lbHNlCi0JCQkJewotCQkJCQlpZihGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQgIT0gMCkKLQkJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudC0tOwotCQkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLkx1bkRpc2NRX0lkeFswXV0gPSBOVUxMOworCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uCisJCQkJICAgIGRpc2NRX1RibFtGUFRfc2NjYk1nclRibFtwX2NhcmRdCisJCQkJCSAgICAgIFtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkJICAgICAgTHVuRGlzY1FfSWR4W2N1cnJTQ0NCLT5MdW5dXSA9CisJCQkJICAgIE5VTEw7CisJCQl9IGVsc2UgeworCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkJICAgIFRhckxVTkJ1c3lbMF0gPSAxOworCQkJCWlmIChjdXJyU0NDQi0+U2NjYl90YWcpIHsKKwkJCQkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQorCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJCSAgICBkaXNjUUNvdW50LS07CisJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW2N1cnJTQ0NCLT4KKwkJCQkJCQkJICAgICAgU2NjYl90YWddCisJCQkJCSAgICA9IE5VTEw7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQorCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJCSAgICBkaXNjUUNvdW50LS07CisJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uCisJCQkJCSAgICBkaXNjUV9UYmxbRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXQorCQkJCQkJICAgICAgW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJCQkJICAgICAgTHVuRGlzY1FfSWR4WzBdXSA9IE5VTEw7CiAJCQkJfQogCQkJfQotICAgICAgICAgcmV0dXJuOwotICAgICAgCi0gICAgICAgICB9Ci0gICAgIAotCSAgIGlmIChzdGF0dXNfYnl0ZSA9PSBTU0NIRUNLKSAKLQkJewotCQkJaWYoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfRE9fUkVORUdPKQotCQkJewotCQkJCWlmIChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckVFVmFsdWUgJiBFRV9TWU5DX01BU0spCi0JCQkJewotCQkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyAmPSB+VEFSX1NZTkNfTUFTSzsKKwkJCXJldHVybjsKKworCQl9CisKKwkJaWYgKHN0YXR1c19ieXRlID09IFNTQ0hFQ0spIHsKKwkJCWlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzICYgRl9ET19SRU5FR08pIHsKKwkJCQlpZiAoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkgICAgVGFyRUVWYWx1ZSAmIEVFX1NZTkNfTUFTSykgeworCQkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT4KKwkJCQkJCQkgICAgICAgVGFyZ0lEXS4KKwkJCQkJICAgIFRhclN0YXR1cyAmPSB+VEFSX1NZTkNfTUFTSzsKIAkJCQl9Ci0JCQkJaWYgKEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyRUVWYWx1ZSAmIEVFX1dJREVfU0NTSSkKLQkJCQl7Ci0JCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyU3RhdHVzICY9IH5UQVJfV0lERV9NQVNLOworCQkJCWlmIChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJCSAgICBUYXJFRVZhbHVlICYgRUVfV0lERV9TQ1NJKSB7CisJCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPgorCQkJCQkJCSAgICAgICBUYXJnSURdLgorCQkJCQkgICAgVGFyU3RhdHVzICY9IH5UQVJfV0lERV9NQVNLOwogCQkJCX0KIAkJCX0KIAkJfQogCi0gICAgICBpZiAoIShjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX0FVVE9fU0VOU0UpKSB7CisJCWlmICghKGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQVVUT19TRU5TRSkpIHsKIAotICAgICAgICAgY3VyclNDQ0ItPlNjY2JTdGF0dXMgPSBTQ0NCX0VSUk9SOwotICAgICAgICAgY3VyclNDQ0ItPlRhcmdldFN0YXR1cyA9IHN0YXR1c19ieXRlOworCQkJY3VyclNDQ0ItPlNjY2JTdGF0dXMgPSBTQ0NCX0VSUk9SOworCQkJY3VyclNDQ0ItPlRhcmdldFN0YXR1cyA9IHN0YXR1c19ieXRlOwogCi0gICAgICAgICBpZiAoc3RhdHVzX2J5dGUgPT0gU1NDSEVDSykgeworCQkJaWYgKHN0YXR1c19ieXRlID09IFNTQ0hFQ0spIHsKIAotICAgICAgICAgICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJMVU5fQ0EKLSAgICAgICAgICAgICAgID0gMTsKLSAgICAgCisJCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS4KKwkJCQkgICAgVGFyTFVOX0NBID0gMTsKIAotICAgICAgICAgICAgaWYgKGN1cnJTQ0NCLT5SZXF1ZXN0U2Vuc2VMZW5ndGggIT0gTk9fQVVUT19SRVFVRVNUX1NFTlNFKSB7CisJCQkJaWYgKGN1cnJTQ0NCLT5SZXF1ZXN0U2Vuc2VMZW5ndGggIT0KKwkJCQkgICAgTk9fQVVUT19SRVFVRVNUX1NFTlNFKSB7CiAKLSAgICAgICAgICAgICAgIGlmIChjdXJyU0NDQi0+UmVxdWVzdFNlbnNlTGVuZ3RoID09IDApCi0gICAgICAgICAgICAgICAgICBjdXJyU0NDQi0+UmVxdWVzdFNlbnNlTGVuZ3RoID0gMTQ7CisJCQkJCWlmIChjdXJyU0NDQi0+UmVxdWVzdFNlbnNlTGVuZ3RoID09IDApCisJCQkJCQljdXJyU0NDQi0+UmVxdWVzdFNlbnNlTGVuZ3RoID0KKwkJCQkJCSAgICAxNDsKIAotICAgICAgICAgICAgICAgRlBUX3NzZW5zcygmRlBUX0JMX0NhcmRbcF9jYXJkXSk7Ci0gICAgICAgICAgICAgICBGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9IEZfTkVXX1NDQ0JfQ01EOworCQkJCQlGUFRfc3NlbnNzKCZGUFRfQkxfQ2FyZFtwX2NhcmRdKTsKKwkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyB8PQorCQkJCQkgICAgRl9ORVdfU0NDQl9DTUQ7CiAKLSAJCQkJCWlmKCgoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgotCQkJCQkJKChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKSkKLQkJCQkJewotCQkJICAgICAgICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJMVU5CdXN5W2N1cnJTQ0NCLT5MdW5dID0gMTsKLQkJCQkJCWlmKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudCAhPSAwKQotCQkJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudC0tOwotCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5MdW5EaXNjUV9JZHhbY3VyclNDQ0ItPkx1bl1dID0gTlVMTDsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkgICAJCSAgICAgIEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyTFVOQnVzeVswXSA9IDE7Ci0JCQkJCQlpZihjdXJyU0NDQi0+U2NjYl90YWcpCi0JCQkJCQl7Ci0JCQkJCQkJaWYoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50ICE9IDApCi0JCQkJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FDb3VudC0tOwotCQkJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW2N1cnJTQ0NCLT5TY2NiX3RhZ10gPSBOVUxMOwotCQkJCQkJfWVsc2UKLQkJCQkJCXsKLQkJCQkJCQlpZihGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRQ291bnQgIT0gMCkKLQkJCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUUNvdW50LS07Ci0JCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5MdW5EaXNjUV9JZHhbMF1dID0gTlVMTDsKKwkJCQkJaWYgKCgoRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJICAgICAgZ2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykKKwkJCQkJICAgICAmJgorCQkJCQkgICAgICgoRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXQorCQkJCQkgICAgICAgW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJCQkgICAgICAgVGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9CisJCQkJCSAgICAgIFRBR19RX1RSWUlORykpKSB7CisJCQkJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdCisJCQkJCQkgICAgW2N1cnJTQ0NCLT5UYXJnSURdLgorCQkJCQkJICAgIFRhckxVTkJ1c3lbY3VyclNDQ0ItPkx1bl0gPQorCQkJCQkJICAgIDE7CisJCQkJCQlpZiAoRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJCSAgICBkaXNjUUNvdW50ICE9IDApCisJCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJCQkgICAgZGlzY1FDb3VudC0tOworCQkJCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJCSAgICBkaXNjUV9UYmxbRlBUX3NjY2JNZ3JUYmwKKwkJCQkJCQkgICAgICBbcF9jYXJkXQorCQkJCQkJCSAgICAgIFtjdXJyU0NDQi0+CisJCQkJCQkJICAgICAgIFRhcmdJRF0uCisJCQkJCQkJICAgICAgTHVuRGlzY1FfSWR4CisJCQkJCQkJICAgICAgW2N1cnJTQ0NCLT5MdW5dXSA9CisJCQkJCQkgICAgTlVMTDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF0KKwkJCQkJCSAgICBbY3VyclNDQ0ItPlRhcmdJRF0uCisJCQkJCQkgICAgVGFyTFVOQnVzeVswXSA9IDE7CisJCQkJCQlpZiAoY3VyclNDQ0ItPlNjY2JfdGFnKSB7CisJCQkJCQkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0uCisJCQkJCQkJICAgIGRpc2NRQ291bnQgIT0gMCkKKwkJCQkJCQkJRlBUX0JMX0NhcmQKKwkJCQkJCQkJICAgIFtwX2NhcmRdLgorCQkJCQkJCQkgICAgZGlzY1FDb3VudC0tOworCQkJCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uCisJCQkJCQkJICAgIGRpc2NRX1RibFtjdXJyU0NDQi0+CisJCQkJCQkJCSAgICAgIFNjY2JfdGFnXQorCQkJCQkJCSAgICA9IE5VTEw7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLgorCQkJCQkJCSAgICBkaXNjUUNvdW50ICE9IDApCisJCQkJCQkJCUZQVF9CTF9DYXJkCisJCQkJCQkJCSAgICBbcF9jYXJkXS4KKwkJCQkJCQkJICAgIGRpc2NRQ291bnQtLTsKKwkJCQkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLgorCQkJCQkJCSAgICBkaXNjUV9UYmwKKwkJCQkJCQkgICAgW0ZQVF9zY2NiTWdyVGJsCisJCQkJCQkJICAgICBbcF9jYXJkXVtjdXJyU0NDQi0+CisJCQkJCQkJCSAgICAgIFRhcmdJRF0uCisJCQkJCQkJICAgICBMdW5EaXNjUV9JZHhbMF1dID0KKwkJCQkJCQkgICAgTlVMTDsKIAkJCQkJCX0KIAkJCQkJfQotICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgfQotICAgICAgfQorCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQl9CisJfQogCi0KLQlpZigoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgotCQkoKEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9IFRBR19RX1RSWUlORykpCi0JICAgRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtjdXJyU0NDQi0+VGFyZ0lEXS5UYXJMVU5CdXN5W2N1cnJTQ0NCLT5MdW5dID0gMDsKKwlpZiAoKEZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYKKwkgICAgKChGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLgorCSAgICAgIFRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKQorCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW2N1cnJTQ0NCLT5UYXJnSURdLlRhckxVTkJ1c3lbY3VyclNDQ0ItPgorCQkJCQkJCQkgICAgTHVuXSA9IDA7CiAJZWxzZQotCSAgIEZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyTFVOQnVzeVswXSA9IDA7CisJCUZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bY3VyclNDQ0ItPlRhcmdJRF0uVGFyTFVOQnVzeVswXSA9IDA7CiAKLQotICAgRlBUX3F1ZXVlQ21kQ29tcGxldGUoJkZQVF9CTF9DYXJkW3BfY2FyZF0sIGN1cnJTQ0NCLCBwX2NhcmQpOworCUZQVF9xdWV1ZUNtZENvbXBsZXRlKCZGUFRfQkxfQ2FyZFtwX2NhcmRdLCBjdXJyU0NDQiwgcF9jYXJkKTsKIH0KIAogI2RlZmluZSBTSE9SVF9XQUlUICAgMHgwMDAwMDAwRgogI2RlZmluZSBMT05HX1dBSVQgICAgMHgwMDAwRkZGRkwKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBEYXRhIFRyYW5zZmVyIFByb2Nlc3NvcgpAQCAtNTUyNSwzNyArNDk0MCwzMyBAQAogICogICAgICAgICAgICAgIAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfZGF0YVhmZXJQcm9jZXNzb3IoVUxPTkcgcG9ydCwgUFNDQ0JjYXJkIHBDdXJyQ2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9kYXRhWGZlclByb2Nlc3Nvcih1bnNpZ25lZCBsb25nIHBvcnQsCisJCQkJICBzdHJ1Y3Qgc2NjYl9jYXJkICpwQ3VyckNhcmQpCiB7Ci0gICBQU0NDQiBjdXJyU0NDQjsKKwlzdHJ1Y3Qgc2NjYiAqY3VyclNDQ0I7CiAKLSAgIGN1cnJTQ0NCID0gcEN1cnJDYXJkLT5jdXJyZW50U0NDQjsKKwljdXJyU0NDQiA9IHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0I7CiAKLSAgICAgIGlmIChjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX1NHX1hGRVIpCi0JCQl7Ci0JCQlpZiAocEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfSE9TVF9YRkVSX0FDVCkKKwlpZiAoY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9TR19YRkVSKSB7CisJCWlmIChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKQorCQl7CisJCQljdXJyU0NDQi0+U2NjYl9zZ3NlZyArPSAodW5zaWduZWQgY2hhcilTR19CVUZfQ05UOworCQkJY3VyclNDQ0ItPlNjY2JfU0dvZmZzZXQgPSAweDAwOworCQl9CisJCXBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9IT1NUX1hGRVJfQUNUOwogCi0JCQkJewotCQkgICAJY3VyclNDQ0ItPlNjY2Jfc2dzZWcgKz0gKFVDSEFSKVNHX0JVRl9DTlQ7Ci0gICAgICAgICAJY3VyclNDQ0ItPlNjY2JfU0dvZmZzZXQgPSAweDAwOyAKLSAJCQkJfQorCQlGUFRfYnVzTXN0clNHRGF0YVhmZXJTdGFydChwb3J0LCBjdXJyU0NDQik7CisJfQorCisJZWxzZSB7CisJCWlmICghKHBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX0hPU1RfWEZFUl9BQ1QpKSB7CiAJCQlwQ3VyckNhcmQtPmdsb2JhbEZsYWdzIHw9IEZfSE9TVF9YRkVSX0FDVDsKLSAgICAgICAgIAotICAgICAgICAgRlBUX2J1c01zdHJTR0RhdGFYZmVyU3RhcnQocG9ydCwgY3VyclNDQ0IpOwotCQkJfQogCi0gICAgICBlbHNlCi0JCQl7Ci0JCQlpZiAoIShwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9IT1NUX1hGRVJfQUNUKSkKLQkJCQl7Ci0JCQkJcEN1cnJDYXJkLT5nbG9iYWxGbGFncyB8PSBGX0hPU1RfWEZFUl9BQ1Q7Ci0gICAgICAgICAKLSAgICAgICAgIAlGUFRfYnVzTXN0ckRhdGFYZmVyU3RhcnQocG9ydCwgY3VyclNDQ0IpOwotICAgICAgICAgCX0KLQkJCX0KKwkJCUZQVF9idXNNc3RyRGF0YVhmZXJTdGFydChwb3J0LCBjdXJyU0NDQik7CisJCX0KKwl9CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogQnVzTWFzdGVyIFNjYXR0ZXIgR2F0aGVyIERhdGEgVHJhbnNmZXIgU3RhcnQKQEAgLTU1NjMsMTA0ICs0OTc0LDEwMSBAQAogICogRGVzY3JpcHRpb246CiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgRlBUX2J1c01zdHJTR0RhdGFYZmVyU3RhcnQoVUxPTkcgcF9wb3J0LCBQU0NDQiBwY3VyclNDQ0IpCitzdGF0aWMgdm9pZCBGUFRfYnVzTXN0clNHRGF0YVhmZXJTdGFydCh1bnNpZ25lZCBsb25nIHBfcG9ydCwKKwkJCQkgICAgICAgc3RydWN0IHNjY2IgKnBjdXJyU0NDQikKIHsKLSAgIFVMT05HIGNvdW50LGFkZHIsdG1wU0dDbnQ7Ci0gICBVSU5UIHNnX2luZGV4OwotICAgVUNIQVIgc2dfY291bnQsIGk7Ci0gICBVTE9ORyByZWdfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgY291bnQsIGFkZHIsIHRtcFNHQ250OworCXVuc2lnbmVkIGludCBzZ19pbmRleDsKKwl1bnNpZ25lZCBjaGFyIHNnX2NvdW50LCBpOworCXVuc2lnbmVkIGxvbmcgcmVnX29mZnNldDsKIAorCWlmIChwY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9IT1NUX1hGRVJfRElSKSB7CiAKLSAgIGlmIChwY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9IT1NUX1hGRVJfRElSKSB7CisJCWNvdW50ID0gKCh1bnNpZ25lZCBsb25nKUhPU1RfUkRfQ01EKSA8PCAyNDsKKwl9CiAKLSAgICAgIGNvdW50ID0gICgoVUxPTkcpIEhPU1RfUkRfQ01EKTw8MjQ7Ci0gICAgICB9CisJZWxzZSB7CisJCWNvdW50ID0gKCh1bnNpZ25lZCBsb25nKUhPU1RfV1JUX0NNRCkgPDwgMjQ7CisJfQogCi0gICBlbHNlIHsKLSAgICAgIGNvdW50ID0gICgoVUxPTkcpIEhPU1RfV1JUX0NNRCk8PDI0OwotICAgICAgfQorCXNnX2NvdW50ID0gMDsKKwl0bXBTR0NudCA9IDA7CisJc2dfaW5kZXggPSBwY3VyclNDQ0ItPlNjY2Jfc2dzZWc7CisJcmVnX29mZnNldCA9IGhwX2FyYW1CYXNlOwogCi0gICBzZ19jb3VudCA9IDA7Ci0gICB0bXBTR0NudCA9IDA7Ci0gICBzZ19pbmRleCA9IHBjdXJyU0NDQi0+U2NjYl9zZ3NlZzsKLSAgIHJlZ19vZmZzZXQgPSBocF9hcmFtQmFzZTsKKwlpID0gKHVuc2lnbmVkIGNoYXIpKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfcGFnZV9jdHJsKSAmCisJCQkgICAgfihTR1JBTV9BUkFNIHwgU0NBVFRFUl9FTikpOwogCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwsIGkpOwogCi0JaSA9IChVQ0hBUikgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCkgJiB+KFNHUkFNX0FSQU18U0NBVFRFUl9FTikpOworCXdoaWxlICgoc2dfY291bnQgPCAodW5zaWduZWQgY2hhcilTR19CVUZfQ05UKSAmJgorCSAgICAgICAoKHVuc2lnbmVkIGxvbmcpKHNnX2luZGV4ICogKHVuc2lnbmVkIGludClTR19FTEVNRU5UX1NJWkUpIDwKKwkJcGN1cnJTQ0NCLT5EYXRhTGVuZ3RoKSkgewogCisJCXRtcFNHQ250ICs9ICooKCh1bnNpZ25lZCBsb25nICopcGN1cnJTQ0NCLT5EYXRhUG9pbnRlcikgKworCQkJICAgICAgKHNnX2luZGV4ICogMikpOwogCi0JV1JfSEFSUE9PTihwX3BvcnQraHBfcGFnZV9jdHJsLCBpKTsKKwkJY291bnQgfD0gKigoKHVuc2lnbmVkIGxvbmcgKilwY3VyclNDQ0ItPkRhdGFQb2ludGVyKSArCisJCQkgICAoc2dfaW5kZXggKiAyKSk7CiAKLSAgIHdoaWxlICgoc2dfY291bnQgPCAoVUNIQVIpU0dfQlVGX0NOVCkgJiYKLSAgICAgICgoVUxPTkcpKHNnX2luZGV4ICogKFVJTlQpU0dfRUxFTUVOVF9TSVpFKSA8IHBjdXJyU0NDQi0+RGF0YUxlbmd0aCkgKSB7CisJCWFkZHIgPSAqKCgodW5zaWduZWQgbG9uZyAqKXBjdXJyU0NDQi0+RGF0YVBvaW50ZXIpICsKKwkJCSAoKHNnX2luZGV4ICogMikgKyAxKSk7CiAKLSAgICAgIHRtcFNHQ250ICs9ICooKChVTE9ORyAqKXBjdXJyU0NDQi0+RGF0YVBvaW50ZXIpKwotICAgICAgICAgKHNnX2luZGV4ICogMikpOworCQlpZiAoKCFzZ19jb3VudCkgJiYgKHBjdXJyU0NDQi0+U2NjYl9TR29mZnNldCkpIHsKIAotICAgICAgY291bnQgfD0gKigoKFVMT05HICopcGN1cnJTQ0NCLT5EYXRhUG9pbnRlcikrCi0gICAgICAgICAoc2dfaW5kZXggKiAyKSk7CisJCQlhZGRyICs9CisJCQkgICAgKChjb3VudCAmIDB4MDBGRkZGRkZMKSAtIHBjdXJyU0NDQi0+U2NjYl9TR29mZnNldCk7CisJCQljb3VudCA9CisJCQkgICAgKGNvdW50ICYgMHhGRjAwMDAwMEwpIHwgcGN1cnJTQ0NCLT5TY2NiX1NHb2Zmc2V0OwogCi0gICAgICBhZGRyID0gKigoKFVMT05HICopcGN1cnJTQ0NCLT5EYXRhUG9pbnRlcikrCi0gICAgICAgICAoKHNnX2luZGV4ICogMikgKyAxKSk7CisJCQl0bXBTR0NudCA9IGNvdW50ICYgMHgwMEZGRkZGRkw7CisJCX0KIAorCQlXUl9IQVJQMzIocF9wb3J0LCByZWdfb2Zmc2V0LCBhZGRyKTsKKwkJcmVnX29mZnNldCArPSA0OwogCi0gICAgICBpZiAoKCFzZ19jb3VudCkgJiYgKHBjdXJyU0NDQi0+U2NjYl9TR29mZnNldCkpIHsKKwkJV1JfSEFSUDMyKHBfcG9ydCwgcmVnX29mZnNldCwgY291bnQpOworCQlyZWdfb2Zmc2V0ICs9IDQ7CiAKLSAgICAgICAgIGFkZHIgKz0gKChjb3VudCAmIDB4MDBGRkZGRkZMKSAtIHBjdXJyU0NDQi0+U2NjYl9TR29mZnNldCk7Ci0gICAgICAgICBjb3VudCA9IChjb3VudCAmIDB4RkYwMDAwMDBMKSB8IHBjdXJyU0NDQi0+U2NjYl9TR29mZnNldDsKKwkJY291bnQgJj0gMHhGRjAwMDAwMEw7CisJCXNnX2luZGV4Kys7CisJCXNnX2NvdW50Kys7CiAKLSAgICAgICAgIHRtcFNHQ250ID0gY291bnQgJiAweDAwRkZGRkZGTDsKLSAgICAgICAgIH0KKwl9CQkJLypFbmQgV2hpbGUgKi8KIAotICAgICAgV1JfSEFSUDMyKHBfcG9ydCxyZWdfb2Zmc2V0LGFkZHIpOwotICAgICAgcmVnX29mZnNldCArPTQ7CisJcGN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPSB0bXBTR0NudDsKIAotICAgICAgV1JfSEFSUDMyKHBfcG9ydCxyZWdfb2Zmc2V0LGNvdW50KTsKLSAgICAgIHJlZ19vZmZzZXQgKz00OworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2dfYWRkciwgKHNnX2NvdW50IDw8IDQpKTsKIAotICAgICAgY291bnQgJj0gMHhGRjAwMDAwMEw7Ci0gICAgICBzZ19pbmRleCsrOwotICAgICAgc2dfY291bnQrKzsKKwlpZiAocGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfSE9TVF9YRkVSX0RJUikgewogCi0gICAgICB9IC8qRW5kIFdoaWxlICovCisJCVdSX0hBUlAzMihwX3BvcnQsIGhwX3hmZXJjbnRfMCwgdG1wU0dDbnQpOwogCi0gICBwY3VyclNDQ0ItPlNjY2JfWGZlckNudCA9IHRtcFNHQ250OworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3BvcnRjdHJsXzAsCisJCQkgICAoRE1BX1BPUlQgfCBTQ1NJX1BPUlQgfCBTQ1NJX0lOQklUKSk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZywgU19EQVRBSV9QSCk7CisJfQogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zZ19hZGRyLChzZ19jb3VudDw8NCkpOworCWVsc2UgewogCi0gICBpZiAocGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfSE9TVF9YRkVSX0RJUikgeworCQlpZiAoKCEoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zeW5jdGFyZ18wKSAmIE5BUlJPV19TQ1NJKSkgJiYKKwkJICAgICh0bXBTR0NudCAmIDB4MDAwMDAwMDAxKSkgewogCi0gICAgICBXUl9IQVJQMzIocF9wb3J0LGhwX3hmZXJjbnRfMCx0bXBTR0NudCk7CisJCQlwY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlIHw9IEZfT0REX0JBTExfQ05UOworCQkJdG1wU0dDbnQtLTsKKwkJfQogCisJCVdSX0hBUlAzMihwX3BvcnQsIGhwX3hmZXJjbnRfMCwgdG1wU0dDbnQpOwogCi0gICAgICBXUl9IQVJQT09OKHBfcG9ydCtocF9wb3J0Y3RybF8wLChETUFfUE9SVCB8IFNDU0lfUE9SVCB8IFNDU0lfSU5CSVQpKTsKLSAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIFNfREFUQUlfUEgpOwotICAgICAgfQorCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3BvcnRjdHJsXzAsCisJCQkgICAoU0NTSV9QT1JUIHwgRE1BX1BPUlQgfCBETUFfUkQpKTsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnLCBTX0RBVEFPX1BIKTsKKwl9CiAKLSAgIGVsc2UgewotCi0KLSAgICAgIGlmICgoIShSRF9IQVJQT09OKHBfcG9ydCtocF9zeW5jdGFyZ18wKSAmIE5BUlJPV19TQ1NJKSkgJiYKLSAgICAgICAgICh0bXBTR0NudCAmIDB4MDAwMDAwMDAxKSkKLSAgICAgICAgIHsKLQotICAgICAgICAgcGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSB8PSBGX09ERF9CQUxMX0NOVDsKLSAgICAgICAgIHRtcFNHQ250LS07Ci0gICAgICAgICB9Ci0KLQotICAgICAgV1JfSEFSUDMyKHBfcG9ydCxocF94ZmVyY250XzAsdG1wU0dDbnQpOwotCi0gICAgICBXUl9IQVJQT09OKHBfcG9ydCtocF9wb3J0Y3RybF8wLChTQ1NJX1BPUlQgfCBETUFfUE9SVCB8IERNQV9SRCkpOwotICAgICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZywgU19EQVRBT19QSCk7Ci0gICAgICB9Ci0KLQotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfcGFnZV9jdHJsLCAoVUNIQVIpIChpIHwgU0NBVFRFUl9FTikpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfcGFnZV9jdHJsLCAodW5zaWduZWQgY2hhcikoaSB8IFNDQVRURVJfRU4pKTsKIAogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEJ1c01hc3RlciBEYXRhIFRyYW5zZmVyIFN0YXJ0CkBAIC01NjY4LDQ3ICs1MDc2LDQ5IEBACiAgKiBEZXNjcmlwdGlvbjogCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgRlBUX2J1c01zdHJEYXRhWGZlclN0YXJ0KFVMT05HIHBfcG9ydCwgUFNDQ0IgcGN1cnJTQ0NCKQorc3RhdGljIHZvaWQgRlBUX2J1c01zdHJEYXRhWGZlclN0YXJ0KHVuc2lnbmVkIGxvbmcgcF9wb3J0LAorCQkJCSAgICAgc3RydWN0IHNjY2IgKnBjdXJyU0NDQikKIHsKLSAgIFVMT05HIGFkZHIsY291bnQ7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBjb3VudDsKIAotICAgaWYgKCEocGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQVVUT19TRU5TRSkpIHsKKwlpZiAoIShwY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9BVVRPX1NFTlNFKSkgewogCi0gICAgICBjb3VudCA9IHBjdXJyU0NDQi0+U2NjYl9YZmVyQ250OworCQljb3VudCA9IHBjdXJyU0NDQi0+U2NjYl9YZmVyQ250OwogCi0gICAgICBhZGRyID0gKFVMT05HKSBwY3VyclNDQ0ItPkRhdGFQb2ludGVyICsgcGN1cnJTQ0NCLT5TY2NiX0FUQzsKLSAgICAgIH0KKwkJYWRkciA9CisJCSAgICAodW5zaWduZWQgbG9uZylwY3VyclNDQ0ItPkRhdGFQb2ludGVyICsgcGN1cnJTQ0NCLT5TY2NiX0FUQzsKKwl9CiAKLSAgIGVsc2UgewotICAgICAgYWRkciA9IHBjdXJyU0NDQi0+U2Vuc2VQb2ludGVyOwotICAgICAgY291bnQgPSBwY3VyclNDQ0ItPlJlcXVlc3RTZW5zZUxlbmd0aDsKKwllbHNlIHsKKwkJYWRkciA9IHBjdXJyU0NDQi0+U2Vuc2VQb2ludGVyOworCQljb3VudCA9IHBjdXJyU0NDQi0+UmVxdWVzdFNlbnNlTGVuZ3RoOwogCi0gICAgICB9CisJfQogCi0gICBIUF9TRVRVUF9BRERSX0NOVChwX3BvcnQsYWRkcixjb3VudCk7CisJSFBfU0VUVVBfQUREUl9DTlQocF9wb3J0LCBhZGRyLCBjb3VudCk7CiAKKwlpZiAocGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfSE9TVF9YRkVSX0RJUikgewogCi0gICBpZiAocGN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfSE9TVF9YRkVSX0RJUikgeworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3BvcnRjdHJsXzAsCisJCQkgICAoRE1BX1BPUlQgfCBTQ1NJX1BPUlQgfCBTQ1NJX0lOQklUKSk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZywgU19EQVRBSV9QSCk7CiAKLSAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3BvcnRjdHJsXzAsKERNQV9QT1JUIHwgU0NTSV9QT1JUIHwgU0NTSV9JTkJJVCkpOwotICAgICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZywgU19EQVRBSV9QSCk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfeGZlcl9jbWQsCisJCQkgICAoWEZFUl9ETUFfSE9TVCB8IFhGRVJfSE9TVF9BVVRPIHwgWEZFUl9ETUFfOEJJVCkpOworCX0KIAotICAgICAgV1JfSEFSUE9PTihwX3BvcnQraHBfeGZlcl9jbWQsCi0gICAgICAgICAoWEZFUl9ETUFfSE9TVCB8IFhGRVJfSE9TVF9BVVRPIHwgWEZFUl9ETUFfOEJJVCkpOwotICAgICAgfQorCWVsc2UgewogCi0gICBlbHNlIHsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wb3J0Y3RybF8wLAorCQkJICAgKFNDU0lfUE9SVCB8IERNQV9QT1JUIHwgRE1BX1JEKSk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZywgU19EQVRBT19QSCk7CiAKLSAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3BvcnRjdHJsXzAsKFNDU0lfUE9SVCB8IERNQV9QT1JUIHwgRE1BX1JEKSk7Ci0gICAgICBXUl9IQVJQT09OKHBfcG9ydCtocF9zY3Npc2lnLCBTX0RBVEFPX1BIKTsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF94ZmVyX2NtZCwKKwkJCSAgIChYRkVSX0hPU1RfRE1BIHwgWEZFUl9IT1NUX0FVVE8gfCBYRkVSX0RNQV84QklUKSk7CiAKLSAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3hmZXJfY21kLAotICAgICAgICAgKFhGRVJfSE9TVF9ETUEgfCBYRkVSX0hPU1RfQVVUTyB8IFhGRVJfRE1BXzhCSVQpKTsKLQotICAgICAgfQorCX0KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBCdXNNYXN0ZXIgVGltZW91dCBIYW5kbGVyCkBAIC01NzIxLDM3ICs1MTMxLDM4IEBACiAgKiAgICAgICAgICAgICAgIGNvbW1hbmQgYnVzeSBpcyBhbHNvIHRpbWUgb3V0LCBpdCdsbCBqdXN0IGdpdmUgdXAuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIFVDSEFSIEZQVF9idXNNc3RyVGltZU91dChVTE9ORyBwX3BvcnQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfYnVzTXN0clRpbWVPdXQodW5zaWduZWQgbG9uZyBwX3BvcnQpCiB7Ci0gICBVTE9ORyB0aW1lb3V0OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAotICAgdGltZW91dCA9IExPTkdfV0FJVDsKKwl0aW1lb3V0ID0gTE9OR19XQUlUOwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zeXNfY3RybCwgSEFMVF9NQUNIKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3N5c19jdHJsLCBIQUxUX01BQ0gpOwogCi0gICB3aGlsZSAoKCEoUkRfSEFSUE9PTihwX3BvcnQraHBfZXh0X3N0YXR1cykgJiBDTURfQUJPUlRFRCkpICYmIHRpbWVvdXQtLSkge30KKwl3aGlsZSAoKCEoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9leHRfc3RhdHVzKSAmIENNRF9BQk9SVEVEKSkKKwkgICAgICAgJiYgdGltZW91dC0tKSB7CisJfQogCi0gICAKLSAgIAotICAgaWYgKFJEX0hBUlBPT04ocF9wb3J0K2hwX2V4dF9zdGF0dXMpICYgQk1fQ01EX0JVU1kpIHsKLSAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3N5c19jdHJsLCBIQVJEX0FCT1JUKTsKKwlpZiAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSB7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc3lzX2N0cmwsIEhBUkRfQUJPUlQpOwogCi0gICAgICB0aW1lb3V0ID0gTE9OR19XQUlUOwotICAgICAgd2hpbGUgKChSRF9IQVJQT09OKHBfcG9ydCtocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSAmJiB0aW1lb3V0LS0pIHt9Ci0gICAgICB9CisJCXRpbWVvdXQgPSBMT05HX1dBSVQ7CisJCXdoaWxlICgoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKQorCQkgICAgICAgJiYgdGltZW91dC0tKSB7CisJCX0KKwl9CiAKLSAgIFJEX0hBUlBPT04ocF9wb3J0K2hwX2ludF9zdGF0dXMpOyAgICAgICAgICAgLypDbGVhciBjb21tYW5kIGNvbXBsZXRlICovCisJUkRfSEFSUE9PTihwX3BvcnQgKyBocF9pbnRfc3RhdHVzKTsJLypDbGVhciBjb21tYW5kIGNvbXBsZXRlICovCiAKLSAgIGlmIChSRF9IQVJQT09OKHBfcG9ydCtocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSB7Ci0gICAgICByZXR1cm4oMSk7Ci0gICAgICB9CisJaWYgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkgeworCQlyZXR1cm4gMTsKKwl9CiAKLSAgIGVsc2UgewotICAgICAgcmV0dXJuKDApOwotICAgICAgfQorCWVsc2UgeworCQlyZXR1cm4gMDsKKwl9CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogSG9zdCBEYXRhIFRyYW5zZmVyIEFib3J0CkBAIC01NzU5LDI1NiArNTE3MCwyODIgQEAKICAqIERlc2NyaXB0aW9uOiBBYm9ydCBhbnkgaW4gcHJvZ3Jlc3MgdHJhbnNmZXIuCiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgRlBUX2hvc3REYXRhWGZlckFib3J0KFVMT05HIHBvcnQsIFVDSEFSIHBfY2FyZCwgUFNDQ0IgcEN1cnJTQ0NCKQorc3RhdGljIHZvaWQgRlBUX2hvc3REYXRhWGZlckFib3J0KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBwX2NhcmQsCisJCQkJICBzdHJ1Y3Qgc2NjYiAqcEN1cnJTQ0NCKQogewogCi0gICBVTE9ORyB0aW1lb3V0OwotICAgVUxPTkcgcmVtYWluX2NudDsKLSAgIFVJTlQgc2dfcHRyOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIHJlbWFpbl9jbnQ7CisJdW5zaWduZWQgaW50IHNnX3B0cjsKIAotICAgRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmPSB+Rl9IT1NUX1hGRVJfQUNUOworCUZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgJj0gfkZfSE9TVF9YRkVSX0FDVDsKIAotICAgaWYgKHBDdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX0FVVE9fU0VOU0UpIHsKKwlpZiAocEN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQVVUT19TRU5TRSkgewogCisJCWlmICghKFJEX0hBUlBPT04ocG9ydCArIGhwX2ludF9zdGF0dXMpICYgSU5UX0NNRF9DT01QTCkpIHsKIAotICAgICAgaWYgKCEoUkRfSEFSUE9PTihwb3J0K2hwX2ludF9zdGF0dXMpICYgSU5UX0NNRF9DT01QTCkpIHsKKwkJCVdSX0hBUlBPT04ocG9ydCArIGhwX2JtX2N0cmwsCisJCQkJICAgKFJEX0hBUlBPT04ocG9ydCArIGhwX2JtX2N0cmwpIHwKKwkJCQkgICAgRkxVU0hfWEZFUl9DTlRSKSk7CisJCQl0aW1lb3V0ID0gTE9OR19XQUlUOwogCi0gICAgICAgICBXUl9IQVJQT09OKHBvcnQraHBfYm1fY3RybCwgKFJEX0hBUlBPT04ocG9ydCtocF9ibV9jdHJsKSB8IEZMVVNIX1hGRVJfQ05UUikpOwotICAgICAgICAgdGltZW91dCA9IExPTkdfV0FJVDsKKwkJCXdoaWxlICgoUkRfSEFSUE9PTihwb3J0ICsgaHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkKKwkJCSAgICAgICAmJiB0aW1lb3V0LS0pIHsKKwkJCX0KIAotICAgICAgICAgd2hpbGUgKChSRF9IQVJQT09OKHBvcnQraHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkgJiYgdGltZW91dC0tKSB7fQorCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYm1fY3RybCwKKwkJCQkgICAoUkRfSEFSUE9PTihwb3J0ICsgaHBfYm1fY3RybCkgJgorCQkJCSAgICB+RkxVU0hfWEZFUl9DTlRSKSk7CiAKLSAgICAgICAgIFdSX0hBUlBPT04ocG9ydCtocF9ibV9jdHJsLCAoUkRfSEFSUE9PTihwb3J0K2hwX2JtX2N0cmwpICYgfkZMVVNIX1hGRVJfQ05UUikpOworCQkJaWYgKFJEX0hBUlBPT04ocG9ydCArIGhwX2V4dF9zdGF0dXMpICYgQk1fQ01EX0JVU1kpIHsKIAotICAgICAgICAgaWYgKFJEX0hBUlBPT04ocG9ydCtocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSB7CisJCQkJaWYgKEZQVF9idXNNc3RyVGltZU91dChwb3J0KSkgewogCi0gICAgICAgICAgICBpZiAoRlBUX2J1c01zdHJUaW1lT3V0KHBvcnQpKSB7CisJCQkJCWlmIChwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPT0gMHgwMCkKIAotICAgICAgICAgICAgICAgaWYgKHBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9PSAweDAwKQorCQkJCQkJcEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0KKwkJCQkJCSAgICBTQ0NCX0JNX0VSUjsKIAotICAgICAgICAgICAgICAgICAgcEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9CTV9FUlI7CisJCQkJfQogCi0gICAgICAgICAgICAgICB9CisJCQkJaWYgKFJEX0hBUlBPT04ocG9ydCArIGhwX2ludF9zdGF0dXMpICYKKwkJCQkgICAgSU5UX0VYVF9TVEFUVVMpCiAKLSAgICAgICAgICAgIGlmIChSRF9IQVJQT09OKHBvcnQraHBfaW50X3N0YXR1cykgJiBJTlRfRVhUX1NUQVRVUykgCisJCQkJCWlmIChSRF9IQVJQT09OKHBvcnQgKyBocF9leHRfc3RhdHVzKSAmCisJCQkJCSAgICBCQURfRVhUX1NUQVRVUykKIAotICAgICAgICAgICAgICAgaWYgKFJEX0hBUlBPT04ocG9ydCtocF9leHRfc3RhdHVzKSAmIEJBRF9FWFRfU1RBVFVTKSAKKwkJCQkJCWlmIChwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPT0KKwkJCQkJCSAgICAweDAwKQorCQkJCQkJeworCQkJCQkJCXBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9CisJCQkJCQkJICAgIFNDQ0JfQk1fRVJSOworCQkJCQkJfQorCQkJfQorCQl9CisJfQogCi0gICAgICAgICAgICAgICAgICBpZiAocEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IDB4MDApCisJZWxzZSBpZiAocEN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQpIHsKIAotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9CTV9FUlI7Ci0gICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICB9CisJCWlmIChwQ3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9TR19YRkVSKSB7CiAKLSAgIGVsc2UgaWYgKHBDdXJyU0NDQi0+U2NjYl9YZmVyQ250KSB7CisJCQlXUl9IQVJQT09OKHBvcnQgKyBocF9wYWdlX2N0cmwsCisJCQkJICAgKFJEX0hBUlBPT04ocG9ydCArIGhwX3BhZ2VfY3RybCkgJgorCQkJCSAgICB+U0NBVFRFUl9FTikpOwogCi0gICAgICBpZiAocEN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfU0dfWEZFUikgeworCQkJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2dfYWRkciwgMHgwMCk7CiAKKwkJCXNnX3B0ciA9IHBDdXJyU0NDQi0+U2NjYl9zZ3NlZyArIFNHX0JVRl9DTlQ7CiAKLSAgICAgICAgICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX3BhZ2VfY3RybCwgKFJEX0hBUlBPT04ocG9ydCtocF9wYWdlX2N0cmwpICYKLSAgICAgICAgICAgIH5TQ0FUVEVSX0VOKSk7CisJCQlpZiAoc2dfcHRyID4KKwkJCSAgICAodW5zaWduZWQgaW50KShwQ3VyclNDQ0ItPkRhdGFMZW5ndGggLworCQkJCQkgICBTR19FTEVNRU5UX1NJWkUpKSB7CiAKLSAgICAgICAgIFdSX0hBUlBPT04ocG9ydCtocF9zZ19hZGRyLDB4MDApOworCQkJCXNnX3B0ciA9CisJCQkJICAgICh1bnNpZ25lZCBpbnQpKHBDdXJyU0NDQi0+RGF0YUxlbmd0aCAvCisJCQkJCQkgICBTR19FTEVNRU5UX1NJWkUpOworCQkJfQogCi0gICAgICAgICBzZ19wdHIgPSBwQ3VyclNDQ0ItPlNjY2Jfc2dzZWcgKyBTR19CVUZfQ05UOworCQkJcmVtYWluX2NudCA9IHBDdXJyU0NDQi0+U2NjYl9YZmVyQ250OwogCi0gICAgICAgICBpZiAoc2dfcHRyID4gKFVJTlQpKHBDdXJyU0NDQi0+RGF0YUxlbmd0aCAvIFNHX0VMRU1FTlRfU0laRSkpIHsKKwkJCXdoaWxlIChyZW1haW5fY250IDwgMHgwMTAwMDAwMEwpIHsKIAotICAgICAgICAgICAgc2dfcHRyID0gKFVJTlQpKHBDdXJyU0NDQi0+RGF0YUxlbmd0aCAvIFNHX0VMRU1FTlRfU0laRSk7Ci0gICAgICAgICAgICB9CisJCQkJc2dfcHRyLS07CiAKLSAgICAgICAgIHJlbWFpbl9jbnQgPSBwQ3VyclNDQ0ItPlNjY2JfWGZlckNudDsKKwkJCQlpZiAocmVtYWluX2NudCA+CisJCQkJICAgICh1bnNpZ25lZAorCQkJCSAgICAgbG9uZykoKigoKHVuc2lnbmVkIGxvbmcgKilwQ3VyclNDQ0ItPgorCQkJCQkgICAgICBEYXRhUG9pbnRlcikgKyAoc2dfcHRyICogMikpKSkgewogCi0gICAgICAgICB3aGlsZSAocmVtYWluX2NudCA8IDB4MDEwMDAwMDBMKSB7CisJCQkJCXJlbWFpbl9jbnQgLT0KKwkJCQkJICAgICh1bnNpZ25lZAorCQkJCQkgICAgIGxvbmcpKCooKCh1bnNpZ25lZCBsb25nICopCisJCQkJCQkgICAgICBwQ3VyclNDQ0ItPkRhdGFQb2ludGVyKSArCisJCQkJCQkgICAgIChzZ19wdHIgKiAyKSkpOworCQkJCX0KIAotICAgICAgICAgICAgc2dfcHRyLS07CisJCQkJZWxzZSB7CiAKLSAgICAgICAgICAgIGlmIChyZW1haW5fY250ID4gKFVMT05HKSgqKCgoVUxPTkcgKilwQ3VyclNDQ0ItPgotICAgICAgICAgICAgICAgRGF0YVBvaW50ZXIpICsgKHNnX3B0ciAqIDIpKSkpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCi0gICAgICAgICAgICAgICByZW1haW5fY250IC09IChVTE9ORykoKigoKFVMT05HICopcEN1cnJTQ0NCLT4KLSAgICAgICAgICAgICAgICAgIERhdGFQb2ludGVyKSArIChzZ19wdHIgKiAyKSkpOwotICAgICAgICAgICAgICAgfQorCQkJaWYgKHJlbWFpbl9jbnQgPCAweDAxMDAwMDAwTCkgewogCi0gICAgICAgICAgICBlbHNlIHsKKwkJCQlwQ3VyclNDQ0ItPlNjY2JfU0dvZmZzZXQgPSByZW1haW5fY250OwogCi0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJCQlwQ3VyclNDQ0ItPlNjY2Jfc2dzZWcgPSAodW5zaWduZWQgc2hvcnQpc2dfcHRyOwogCisJCQkJaWYgKCh1bnNpZ25lZCBsb25nKShzZ19wdHIgKiBTR19FTEVNRU5UX1NJWkUpID09CisJCQkJICAgIHBDdXJyU0NDQi0+RGF0YUxlbmd0aCAmJiAocmVtYWluX2NudCA9PSAwKSkKIAorCQkJCQlwQ3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlIHw9CisJCQkJCSAgICBGX0FMTF9YRkVSUkVEOworCQkJfQogCi0gICAgICAgICBpZiAocmVtYWluX2NudCA8IDB4MDEwMDAwMDBMKSB7CisJCQllbHNlIHsKIAorCQkJCWlmIChwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPT0gMHgwMCkgewogCi0gICAgICAgICAgICBwQ3VyclNDQ0ItPlNjY2JfU0dvZmZzZXQgPSByZW1haW5fY250OworCQkJCQlwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPQorCQkJCQkgICAgU0NDQl9HUk9TU19GV19FUlI7CisJCQkJfQorCQkJfQorCQl9CiAKLSAgICAgICAgICAgIHBDdXJyU0NDQi0+U2NjYl9zZ3NlZyA9IChVU0hPUlQpc2dfcHRyOworCQlpZiAoIShwQ3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9IT1NUX1hGRVJfRElSKSkgewogCisJCQlpZiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkgewogCi0gICAgICAgICAgICBpZiAoKFVMT05HKShzZ19wdHIgKiBTR19FTEVNRU5UX1NJWkUpID09IHBDdXJyU0NDQi0+RGF0YUxlbmd0aCAKLSAgICAgICAgICAgICAgICAmJiAocmVtYWluX2NudCA9PSAwKSkKKwkJCQlGUFRfYnVzTXN0clRpbWVPdXQocG9ydCk7CisJCQl9CiAKLSAgICAgICAgICAgICAgIHBDdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgfD0gRl9BTExfWEZFUlJFRDsKLSAgICAgICAgICAgIH0KKwkJCWVsc2UgewogCi0gICAgICAgICBlbHNlIHsKKwkJCQlpZiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfaW50X3N0YXR1cykgJgorCQkJCSAgICBJTlRfRVhUX1NUQVRVUykgewogCisJCQkJCWlmIChSRF9IQVJQT09OKHBvcnQgKyBocF9leHRfc3RhdHVzKSAmCisJCQkJCSAgICBCQURfRVhUX1NUQVRVUykgewogCi0gICAgICAgICAgICBpZiAocEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IDB4MDApIHsKKwkJCQkJCWlmIChwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPT0KKwkJCQkJCSAgICAweDAwKSB7CiAKLSAgICAgICAgICAgICAgIHBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9IFNDQ0JfR1JPU1NfRldfRVJSOwotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgfQorCQkJCQkJCXBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9CisJCQkJCQkJICAgIFNDQ0JfQk1fRVJSOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQogCisJCQl9CisJCX0KIAotICAgICAgaWYgKCEocEN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfSE9TVF9YRkVSX0RJUikpIHsKKwkJZWxzZSB7CiAKKwkJCWlmICgoUkRfSEFSUE9PTihwb3J0ICsgaHBfZmlmb19jbnQpKSA+PSBCTV9USFJFU0hPTEQpIHsKIAotICAgICAgICAgaWYgKFJEX0hBUlBPT04ocG9ydCtocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSB7CisJCQkJdGltZW91dCA9IFNIT1JUX1dBSVQ7CiAKLSAgICAgICAgICAgIEZQVF9idXNNc3RyVGltZU91dChwb3J0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgZWxzZSB7Ci0KLSAgICAgICAgICAgIGlmIChSRF9IQVJQT09OKHBvcnQraHBfaW50X3N0YXR1cykgJiBJTlRfRVhUX1NUQVRVUykgewotCi0gICAgICAgICAgICAgICBpZiAoUkRfSEFSUE9PTihwb3J0K2hwX2V4dF9zdGF0dXMpICYgQkFEX0VYVF9TVEFUVVMpIHsKLQotICAgICAgICAgICAgICAgICAgaWYgKHBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9PSAweDAwKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgIHBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9IFNDQ0JfQk1fRVJSOwotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0KLSAgICAgIGVsc2UgewotCi0KLSAgICAgICAgIGlmICgoUkRfSEFSUE9PTihwb3J0K2hwX2ZpZm9fY250KSkgPj0gQk1fVEhSRVNIT0xEKSB7Ci0KLSAgICAgICAgICAgIHRpbWVvdXQgPSBTSE9SVF9XQUlUOwotCi0gICAgICAgICAgICB3aGlsZSAoKFJEX0hBUlBPT04ocG9ydCtocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSAmJgotICAgICAgICAgICAgICAgKChSRF9IQVJQT09OKHBvcnQraHBfZmlmb19jbnQpKSA+PSBCTV9USFJFU0hPTEQpICYmCi0gICAgICAgICAgICAgICB0aW1lb3V0LS0pIHt9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgIGlmIChSRF9IQVJQT09OKHBvcnQraHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkgewotCi0gICAgICAgICAgICBXUl9IQVJQT09OKHBvcnQraHBfYm1fY3RybCwgKFJEX0hBUlBPT04ocG9ydCtocF9ibV9jdHJsKSB8Ci0gICAgICAgICAgICAgICBGTFVTSF9YRkVSX0NOVFIpKTsKLQotICAgICAgICAgICAgdGltZW91dCA9IExPTkdfV0FJVDsKLQotICAgICAgICAgICAgd2hpbGUgKChSRF9IQVJQT09OKHBvcnQraHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkgJiYKLSAgICAgICAgICAgICAgIHRpbWVvdXQtLSkge30KKwkJCQl3aGlsZSAoKFJEX0hBUlBPT04ocG9ydCArIGhwX2V4dF9zdGF0dXMpICYKKwkJCQkJQk1fQ01EX0JVU1kpCisJCQkJICAgICAgICYmICgoUkRfSEFSUE9PTihwb3J0ICsgaHBfZmlmb19jbnQpKSA+PQorCQkJCQkgICBCTV9USFJFU0hPTEQpICYmIHRpbWVvdXQtLSkgeworCQkJCX0KKwkJCX0KIAotICAgICAgICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX2JtX2N0cmwsIChSRF9IQVJQT09OKHBvcnQraHBfYm1fY3RybCkgJgotICAgICAgICAgICAgICAgfkZMVVNIX1hGRVJfQ05UUikpOworCQkJaWYgKFJEX0hBUlBPT04ocG9ydCArIGhwX2V4dF9zdGF0dXMpICYgQk1fQ01EX0JVU1kpIHsKIAorCQkJCVdSX0hBUlBPT04ocG9ydCArIGhwX2JtX2N0cmwsCisJCQkJCSAgIChSRF9IQVJQT09OKHBvcnQgKyBocF9ibV9jdHJsKSB8CisJCQkJCSAgICBGTFVTSF9YRkVSX0NOVFIpKTsKIAotICAgICAgICAgICAgaWYgKFJEX0hBUlBPT04ocG9ydCtocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSB7CisJCQkJdGltZW91dCA9IExPTkdfV0FJVDsKIAotICAgICAgICAgICAgICAgaWYgKHBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9PSAweDAwKSB7CisJCQkJd2hpbGUgKChSRF9IQVJQT09OKHBvcnQgKyBocF9leHRfc3RhdHVzKSAmCisJCQkJCUJNX0NNRF9CVVNZKSAmJiB0aW1lb3V0LS0pIHsKKwkJCQl9CiAKLSAgICAgICAgICAgICAgICAgIHBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9IFNDQ0JfQk1fRVJSOwotICAgICAgICAgICAgICAgICAgfQorCQkJCVdSX0hBUlBPT04ocG9ydCArIGhwX2JtX2N0cmwsCisJCQkJCSAgIChSRF9IQVJQT09OKHBvcnQgKyBocF9ibV9jdHJsKSAmCisJCQkJCSAgICB+RkxVU0hfWEZFUl9DTlRSKSk7CiAKLSAgICAgICAgICAgICAgIEZQVF9idXNNc3RyVGltZU91dChwb3J0KTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJCQlpZiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfZXh0X3N0YXR1cykgJgorCQkJCSAgICBCTV9DTURfQlVTWSkgewogCi0gICAgICAgICBpZiAoUkRfSEFSUE9PTihwb3J0K2hwX2ludF9zdGF0dXMpICYgSU5UX0VYVF9TVEFUVVMpIHsKKwkJCQkJaWYgKHBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9PSAweDAwKSB7CiAKLSAgICAgICAgICAgIGlmIChSRF9IQVJQT09OKHBvcnQraHBfZXh0X3N0YXR1cykgJiBCQURfRVhUX1NUQVRVUykgeworCQkJCQkJcEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0KKwkJCQkJCSAgICBTQ0NCX0JNX0VSUjsKKwkJCQkJfQogCi0gICAgICAgICAgICAgICBpZiAocEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IDB4MDApIHsKKwkJCQkJRlBUX2J1c01zdHJUaW1lT3V0KHBvcnQpOworCQkJCX0KKwkJCX0KIAotICAgICAgICAgICAgICAgICAgcEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID0gU0NDQl9CTV9FUlI7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9CisJCQlpZiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfaW50X3N0YXR1cykgJiBJTlRfRVhUX1NUQVRVUykgewogCi0gICAgICB9CisJCQkJaWYgKFJEX0hBUlBPT04ocG9ydCArIGhwX2V4dF9zdGF0dXMpICYKKwkJCQkgICAgQkFEX0VYVF9TVEFUVVMpIHsKIAotICAgZWxzZSB7CisJCQkJCWlmIChwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPT0gMHgwMCkgewogCisJCQkJCQlwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPQorCQkJCQkJICAgIFNDQ0JfQk1fRVJSOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CiAKLSAgICAgIGlmIChSRF9IQVJQT09OKHBvcnQraHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkgeworCX0KIAotICAgICAgICAgdGltZW91dCA9IExPTkdfV0FJVDsKKwllbHNlIHsKIAotICAgICAgICAgd2hpbGUgKChSRF9IQVJQT09OKHBvcnQraHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkgJiYgdGltZW91dC0tKSB7fQorCQlpZiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfZXh0X3N0YXR1cykgJiBCTV9DTURfQlVTWSkgewogCi0gICAgICAgICBpZiAoUkRfSEFSUE9PTihwb3J0K2hwX2V4dF9zdGF0dXMpICYgQk1fQ01EX0JVU1kpIHsKKwkJCXRpbWVvdXQgPSBMT05HX1dBSVQ7CiAKLSAgICAgICAgICAgIGlmIChwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPT0gMHgwMCkgeworCQkJd2hpbGUgKChSRF9IQVJQT09OKHBvcnQgKyBocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKQorCQkJICAgICAgICYmIHRpbWVvdXQtLSkgeworCQkJfQogCi0gICAgICAgICAgICAgICBwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX0JNX0VSUjsKLSAgICAgICAgICAgICAgIH0KKwkJCWlmIChSRF9IQVJQT09OKHBvcnQgKyBocF9leHRfc3RhdHVzKSAmIEJNX0NNRF9CVVNZKSB7CiAKLSAgICAgICAgICAgIEZQVF9idXNNc3RyVGltZU91dChwb3J0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KKwkJCQlpZiAocEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IDB4MDApIHsKIAorCQkJCQlwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX0JNX0VSUjsKKwkJCQl9CiAKLSAgICAgIGlmIChSRF9IQVJQT09OKHBvcnQraHBfaW50X3N0YXR1cykgJiBJTlRfRVhUX1NUQVRVUykgeworCQkJCUZQVF9idXNNc3RyVGltZU91dChwb3J0KTsKKwkJCX0KKwkJfQogCi0gICAgICAgICBpZiAoUkRfSEFSUE9PTihwb3J0K2hwX2V4dF9zdGF0dXMpICYgQkFEX0VYVF9TVEFUVVMpIHsKKwkJaWYgKFJEX0hBUlBPT04ocG9ydCArIGhwX2ludF9zdGF0dXMpICYgSU5UX0VYVF9TVEFUVVMpIHsKIAotICAgICAgICAgICAgaWYgKHBDdXJyU0NDQi0+SG9zdFN0YXR1cyA9PSAweDAwKSB7CisJCQlpZiAoUkRfSEFSUE9PTihwb3J0ICsgaHBfZXh0X3N0YXR1cykgJiBCQURfRVhUX1NUQVRVUykgewogCi0gICAgICAgICAgICAgICBwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX0JNX0VSUjsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJCQlpZiAocEN1cnJTQ0NCLT5Ib3N0U3RhdHVzID09IDB4MDApIHsKIAotICAgICAgICAgfQorCQkJCQlwQ3VyclNDQ0ItPkhvc3RTdGF0dXMgPSBTQ0NCX0JNX0VSUjsKKwkJCQl9CisJCQl9CiAKLSAgICAgIGlmIChwQ3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9TR19YRkVSKSB7CisJCX0KIAotICAgICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX3BhZ2VfY3RybCwgKFJEX0hBUlBPT04ocG9ydCtocF9wYWdlX2N0cmwpICYKLSAgICAgICAgICAgICAgICAgflNDQVRURVJfRU4pKTsKKwkJaWYgKHBDdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX1NHX1hGRVIpIHsKIAotICAgICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX3NnX2FkZHIsMHgwMCk7CisJCQlXUl9IQVJQT09OKHBvcnQgKyBocF9wYWdlX2N0cmwsCisJCQkJICAgKFJEX0hBUlBPT04ocG9ydCArIGhwX3BhZ2VfY3RybCkgJgorCQkJCSAgICB+U0NBVFRFUl9FTikpOwogCi0gICAgICAgICBwQ3VyclNDQ0ItPlNjY2Jfc2dzZWcgKz0gU0dfQlVGX0NOVDsKKwkJCVdSX0hBUlBPT04ocG9ydCArIGhwX3NnX2FkZHIsIDB4MDApOwogCi0gICAgICAgICBwQ3VyclNDQ0ItPlNjY2JfU0dvZmZzZXQgPSAweDAwOyAKKwkJCXBDdXJyU0NDQi0+U2NjYl9zZ3NlZyArPSBTR19CVUZfQ05UOwogCisJCQlwQ3VyclNDQ0ItPlNjY2JfU0dvZmZzZXQgPSAweDAwOwogCi0gICAgICAgICBpZiAoKFVMT05HKShwQ3VyclNDQ0ItPlNjY2Jfc2dzZWcgKiBTR19FTEVNRU5UX1NJWkUpID49Ci0gICAgICAgICAgICBwQ3VyclNDQ0ItPkRhdGFMZW5ndGgpIHsKKwkJCWlmICgodW5zaWduZWQgbG9uZykocEN1cnJTQ0NCLT5TY2NiX3Nnc2VnICoKKwkJCQkJICAgIFNHX0VMRU1FTlRfU0laRSkgPj0KKwkJCSAgICBwQ3VyclNDQ0ItPkRhdGFMZW5ndGgpIHsKIAotICAgICAgICAgICAgcEN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSB8PSBGX0FMTF9YRkVSUkVEOworCQkJCXBDdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgfD0gRl9BTExfWEZFUlJFRDsKIAotICAgICAgICAgICAgcEN1cnJTQ0NCLT5TY2NiX3Nnc2VnID0gKFVTSE9SVCkocEN1cnJTQ0NCLT5EYXRhTGVuZ3RoIC8gU0dfRUxFTUVOVF9TSVpFKTsKKwkJCQlwQ3VyclNDQ0ItPlNjY2Jfc2dzZWcgPQorCQkJCSAgICAodW5zaWduZWQgc2hvcnQpKHBDdXJyU0NDQi0+RGF0YUxlbmd0aCAvCisJCQkJCQkgICAgIFNHX0VMRU1FTlRfU0laRSk7CiAKLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KKwkJCX0KKwkJfQogCi0gICAgICBlbHNlIHsKKwkJZWxzZSB7CiAKLSAgICAgICAgIGlmICghKHBDdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX0FVVE9fU0VOU0UpKQorCQkJaWYgKCEocEN1cnJTQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQVVUT19TRU5TRSkpCiAKLSAgICAgICAgICAgIHBDdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgfD0gRl9BTExfWEZFUlJFRDsKLSAgICAgICAgIH0KLSAgICAgIH0KKwkJCQlwQ3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlIHw9IEZfQUxMX1hGRVJSRUQ7CisJCX0KKwl9CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9pbnRfbWFzaywoSU5UX0NNRF9DT01QTCB8IFNDU0lfSU5URVJSVVBUKSk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfaW50X21hc2ssIChJTlRfQ01EX0NPTVBMIHwgU0NTSV9JTlRFUlJVUFQpKTsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEhvc3QgRGF0YSBUcmFuc2ZlciBSZXN0YXJ0CkBAIC02MDE3LDQ3ICs1NDU0LDQ3IEBACiAgKiAgICAgICAgICAgICAgcG9pbnRlcnMgbWVzc2FnZS4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBGUFRfaG9zdERhdGFYZmVyUmVzdGFydChQU0NDQiBjdXJyU0NDQikKK3N0YXRpYyB2b2lkIEZQVF9ob3N0RGF0YVhmZXJSZXN0YXJ0KHN0cnVjdCBzY2NiICpjdXJyU0NDQikKIHsKLSAgIFVMT05HIGRhdGFfY291bnQ7Ci0gICBVSU5UICBzZ19pbmRleDsKLSAgIFVMT05HICpzZ19wdHI7CisJdW5zaWduZWQgbG9uZyBkYXRhX2NvdW50OworCXVuc2lnbmVkIGludCBzZ19pbmRleDsKKwl1bnNpZ25lZCBsb25nICpzZ19wdHI7CiAKLSAgIGlmIChjdXJyU0NDQi0+U2NjYl9YZmVyU3RhdGUgJiBGX1NHX1hGRVIpIHsKKwlpZiAoY3VyclNDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9TR19YRkVSKSB7CiAKLSAgICAgIGN1cnJTQ0NCLT5TY2NiX1hmZXJDbnQgPSAwOworCQljdXJyU0NDQi0+U2NjYl9YZmVyQ250ID0gMDsKIAotICAgICAgc2dfaW5kZXggPSAweGZmZmY7ICAgICAgICAgLypJbmRleCBieSBsb25nIHdvcmRzIGludG8gc2cgbGlzdC4gKi8KLSAgICAgIGRhdGFfY291bnQgPSAwOyAgICAgICAgICAgIC8qUnVubmluZyBjb3VudCBvZiBTRyB4ZmVyIGNvdW50cy4gKi8KKwkJc2dfaW5kZXggPSAweGZmZmY7CS8qSW5kZXggYnkgbG9uZyB3b3JkcyBpbnRvIHNnIGxpc3QuICovCisJCWRhdGFfY291bnQgPSAwOwkvKlJ1bm5pbmcgY291bnQgb2YgU0cgeGZlciBjb3VudHMuICovCiAKLSAgICAgIHNnX3B0ciA9IChVTE9ORyAqKWN1cnJTQ0NCLT5EYXRhUG9pbnRlcjsKKwkJc2dfcHRyID0gKHVuc2lnbmVkIGxvbmcgKiljdXJyU0NDQi0+RGF0YVBvaW50ZXI7CiAKLSAgICAgIHdoaWxlIChkYXRhX2NvdW50IDwgY3VyclNDQ0ItPlNjY2JfQVRDKSB7CisJCXdoaWxlIChkYXRhX2NvdW50IDwgY3VyclNDQ0ItPlNjY2JfQVRDKSB7CiAKLSAgICAgICAgIHNnX2luZGV4Kys7Ci0gICAgICAgICBkYXRhX2NvdW50ICs9ICooc2dfcHRyKyhzZ19pbmRleCAqIDIpKTsKLSAgICAgICAgIH0KKwkJCXNnX2luZGV4Kys7CisJCQlkYXRhX2NvdW50ICs9ICooc2dfcHRyICsgKHNnX2luZGV4ICogMikpOworCQl9CiAKLSAgICAgIGlmIChkYXRhX2NvdW50ID09IGN1cnJTQ0NCLT5TY2NiX0FUQykgeworCQlpZiAoZGF0YV9jb3VudCA9PSBjdXJyU0NDQi0+U2NjYl9BVEMpIHsKIAotICAgICAgICAgY3VyclNDQ0ItPlNjY2JfU0dvZmZzZXQgPSAwOwotICAgICAgICAgc2dfaW5kZXgrKzsKLSAgICAgICAgIH0KKwkJCWN1cnJTQ0NCLT5TY2NiX1NHb2Zmc2V0ID0gMDsKKwkJCXNnX2luZGV4Kys7CisJCX0KIAotICAgICAgZWxzZSB7Ci0gICAgICAgICBjdXJyU0NDQi0+U2NjYl9TR29mZnNldCA9IGRhdGFfY291bnQgLSBjdXJyU0NDQi0+U2NjYl9BVEM7Ci0gICAgICAgICB9CisJCWVsc2UgeworCQkJY3VyclNDQ0ItPlNjY2JfU0dvZmZzZXQgPQorCQkJICAgIGRhdGFfY291bnQgLSBjdXJyU0NDQi0+U2NjYl9BVEM7CisJCX0KIAotICAgICAgY3VyclNDQ0ItPlNjY2Jfc2dzZWcgPSAoVVNIT1JUKXNnX2luZGV4OwotICAgICAgfQorCQljdXJyU0NDQi0+U2NjYl9zZ3NlZyA9ICh1bnNpZ25lZCBzaG9ydClzZ19pbmRleDsKKwl9CiAKLSAgIGVsc2UgewotICAgICAgY3VyclNDQ0ItPlNjY2JfWGZlckNudCA9IGN1cnJTQ0NCLT5EYXRhTGVuZ3RoIC0gY3VyclNDQ0ItPlNjY2JfQVRDOwotICAgICAgfQorCWVsc2UgeworCQljdXJyU0NDQi0+U2NjYl9YZmVyQ250ID0KKwkJICAgIGN1cnJTQ0NCLT5EYXRhTGVuZ3RoIC0gY3VyclNDQ0ItPlNjY2JfQVRDOworCX0KIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zY2luaQpAQCAtNjA2NiwxNzcgKzU1MDMsMTkyIEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfc2NpbmkoVUNIQVIgcF9jYXJkLCBVQ0hBUiBwX291cl9pZCwgVUNIQVIgcF9wb3dlcl91cCkKK3N0YXRpYyB2b2lkIEZQVF9zY2luaSh1bnNpZ25lZCBjaGFyIHBfY2FyZCwgdW5zaWduZWQgY2hhciBwX291cl9pZCwKKwkJICAgICAgdW5zaWduZWQgY2hhciBwX3Bvd2VyX3VwKQogewogCi0gICBVQ0hBUiBsb3Nlcixhc3NpZ25lZF9pZDsKLSAgIFVMT05HIHBfcG9ydDsKKwl1bnNpZ25lZCBjaGFyIGxvc2VyLCBhc3NpZ25lZF9pZDsKKwl1bnNpZ25lZCBsb25nIHBfcG9ydDsKIAotICAgVUNIQVIgaSxrLFNjYW1GbGcgOwotICAgUFNDQ0JjYXJkIGN1cnJDYXJkOwotCVBOVlJhbUluZm8gcEN1cnJOdlJhbTsKKwl1bnNpZ25lZCBjaGFyIGksIGssIFNjYW1GbGc7CisJc3RydWN0IHNjY2JfY2FyZCAqY3VyckNhcmQ7CisJc3RydWN0IG52cmFtX2luZm8gKnBDdXJyTnZSYW07CiAKLSAgIGN1cnJDYXJkID0gJkZQVF9CTF9DYXJkW3BfY2FyZF07Ci0gICBwX3BvcnQgPSBjdXJyQ2FyZC0+aW9Qb3J0OworCWN1cnJDYXJkID0gJkZQVF9CTF9DYXJkW3BfY2FyZF07CisJcF9wb3J0ID0gY3VyckNhcmQtPmlvUG9ydDsKIAlwQ3Vyck52UmFtID0gY3VyckNhcmQtPnBOdlJhbUluZm87CiAKLQotCWlmKHBDdXJyTnZSYW0peworCWlmIChwQ3Vyck52UmFtKSB7CiAJCVNjYW1GbGcgPSBwQ3Vyck52UmFtLT5uaVNjYW1Db25mOwogCQlpID0gcEN1cnJOdlJhbS0+bmlTeXNDb25mOworCX0gZWxzZSB7CisJCVNjYW1GbGcgPQorCQkgICAgKHVuc2lnbmVkIGNoYXIpRlBUX3V0aWxFRVJlYWQocF9wb3J0LCBTQ0FNX0NPTkZJRyAvIDIpOworCQlpID0gKHVuc2lnbmVkCisJCSAgICAgY2hhcikoRlBUX3V0aWxFRVJlYWQocF9wb3J0LCAoU1lTVEVNX0NPTkZJRyAvIDIpKSk7CiAJfQotCWVsc2V7Ci0JICAgU2NhbUZsZyA9IChVQ0hBUikgRlBUX3V0aWxFRVJlYWQocF9wb3J0LCBTQ0FNX0NPTkZJRy8yKTsKLQkgICBpID0gKFVDSEFSKShGUFRfdXRpbEVFUmVhZChwX3BvcnQsIChTWVNURU1fQ09ORklHLzIpKSk7Ci0JfQotCWlmKCEoaSAmIDB4MDIpKQkvKiBjaGVjayBpZiByZXNldCBidXMgaW4gQXV0b1NDU0kgcGFyYW1ldGVyIHNldCAqLworCWlmICghKGkgJiAweDAyKSkJLyogY2hlY2sgaWYgcmVzZXQgYnVzIGluIEF1dG9TQ1NJIHBhcmFtZXRlciBzZXQgKi8KIAkJcmV0dXJuOwogCi0gICBGUFRfaW5pc2NpKHBfY2FyZCxwX3BvcnQsIHBfb3VyX2lkKTsKKwlGUFRfaW5pc2NpKHBfY2FyZCwgcF9wb3J0LCBwX291cl9pZCk7CiAKLSAgIC8qIEZvcmNlIHRvIHdhaXQgMSBzZWMgYWZ0ZXIgU0NTSSBidXMgcmVzZXQuIFNvbWUgU0NBTSBkZXZpY2UgRlcKLSAgICAgIHRvbyBzbG93IHRvIHJldHVybiB0byBTQ0FNIHNlbGVjdGlvbiAqLworCS8qIEZvcmNlIHRvIHdhaXQgMSBzZWMgYWZ0ZXIgU0NTSSBidXMgcmVzZXQuIFNvbWUgU0NBTSBkZXZpY2UgRlcKKwkgICB0b28gc2xvdyB0byByZXR1cm4gdG8gU0NBTSBzZWxlY3Rpb24gKi8KIAotICAgLyogaWYgKHBfcG93ZXJfdXApCi0gICAgICAgICBGUFRfV2FpdDFTZWNvbmQocF9wb3J0KTsKLSAgICAgIGVsc2UKLSAgICAgICAgIEZQVF9XYWl0KHBfcG9ydCwgVE9fMjUwbXMpOyAqLworCS8qIGlmIChwX3Bvd2VyX3VwKQorCSAgIEZQVF9XYWl0MVNlY29uZChwX3BvcnQpOworCSAgIGVsc2UKKwkgICBGUFRfV2FpdChwX3BvcnQsIFRPXzI1MG1zKTsgKi8KIAotICAgRlBUX1dhaXQxU2Vjb25kKHBfcG9ydCk7CisJRlBUX1dhaXQxU2Vjb25kKHBfcG9ydCk7CiAKLSAgIGlmICgoU2NhbUZsZyAmIFNDQU1fRU5BQkxFRCkgJiYgKFNjYW1GbGcgJiBTQ0FNX0xFVkVMMikpCi0gICAgICB7Ci0gICAgICB3aGlsZSAoIShGUFRfc2NhcmIocF9wb3J0LElOSVRfU0VMVEQpKSkge30KKwlpZiAoKFNjYW1GbGcgJiBTQ0FNX0VOQUJMRUQpICYmIChTY2FtRmxnICYgU0NBTV9MRVZFTDIpKSB7CisJCXdoaWxlICghKEZQVF9zY2FyYihwX3BvcnQsIElOSVRfU0VMVEQpKSkgeworCQl9CiAKLSAgICAgIEZQVF9zY3NlbChwX3BvcnQpOworCQlGUFRfc2NzZWwocF9wb3J0KTsKIAotICAgICAgZG8gewotICAgICAgICAgRlBUX3NjeGZlcmMocF9wb3J0LFNZTkNfUFRSTik7Ci0gICAgICAgICBGUFRfc2N4ZmVyYyhwX3BvcnQsRE9NX01TVFIpOwotICAgICAgICAgbG9zZXIgPSBGUFRfc2NzZW5kaShwX3BvcnQsJkZQVF9zY2FtSW5mb1twX291cl9pZF0uaWRfc3RyaW5nWzBdKTsKLSAgICAgICAgIH0gd2hpbGUgKCBsb3NlciA9PSAweEZGICk7CisJCWRvIHsKKwkJCUZQVF9zY3hmZXJjKHBfcG9ydCwgU1lOQ19QVFJOKTsKKwkJCUZQVF9zY3hmZXJjKHBfcG9ydCwgRE9NX01TVFIpOworCQkJbG9zZXIgPQorCQkJICAgIEZQVF9zY3NlbmRpKHBfcG9ydCwKKwkJCQkJJkZQVF9zY2FtSW5mb1twX291cl9pZF0uaWRfc3RyaW5nWzBdKTsKKwkJfSB3aGlsZSAobG9zZXIgPT0gMHhGRik7CiAKLSAgICAgIEZQVF9zY2J1c2YocF9wb3J0KTsKKwkJRlBUX3NjYnVzZihwX3BvcnQpOwogCi0gICAgICBpZiAoKHBfcG93ZXJfdXApICYmICghbG9zZXIpKQotICAgICAgICAgewotICAgICAgICAgRlBUX3NyZXNiKHBfcG9ydCxwX2NhcmQpOwotICAgICAgICAgRlBUX1dhaXQocF9wb3J0LCBUT18yNTBtcyk7CisJCWlmICgocF9wb3dlcl91cCkgJiYgKCFsb3NlcikpIHsKKwkJCUZQVF9zcmVzYihwX3BvcnQsIHBfY2FyZCk7CisJCQlGUFRfV2FpdChwX3BvcnQsIFRPXzI1MG1zKTsKIAotICAgICAgICAgd2hpbGUgKCEoRlBUX3NjYXJiKHBfcG9ydCxJTklUX1NFTFREKSkpIHt9CisJCQl3aGlsZSAoIShGUFRfc2NhcmIocF9wb3J0LCBJTklUX1NFTFREKSkpIHsKKwkJCX0KIAotICAgICAgICAgRlBUX3Njc2VsKHBfcG9ydCk7CisJCQlGUFRfc2NzZWwocF9wb3J0KTsKIAotICAgICAgICAgZG8gewotICAgICAgICAgICAgRlBUX3NjeGZlcmMocF9wb3J0LCBTWU5DX1BUUk4pOwotICAgICAgICAgICAgRlBUX3NjeGZlcmMocF9wb3J0LCBET01fTVNUUik7Ci0gICAgICAgICAgICBsb3NlciA9IEZQVF9zY3NlbmRpKHBfcG9ydCwmRlBUX3NjYW1JbmZvW3Bfb3VyX2lkXS4KLSAgICAgICAgICAgICAgIGlkX3N0cmluZ1swXSk7Ci0gICAgICAgICAgICB9IHdoaWxlICggbG9zZXIgPT0gMHhGRiApOworCQkJZG8geworCQkJCUZQVF9zY3hmZXJjKHBfcG9ydCwgU1lOQ19QVFJOKTsKKwkJCQlGUFRfc2N4ZmVyYyhwX3BvcnQsIERPTV9NU1RSKTsKKwkJCQlsb3NlciA9CisJCQkJICAgIEZQVF9zY3NlbmRpKHBfcG9ydCwKKwkJCQkJCSZGUFRfc2NhbUluZm9bcF9vdXJfaWRdLgorCQkJCQkJaWRfc3RyaW5nWzBdKTsKKwkJCX0gd2hpbGUgKGxvc2VyID09IDB4RkYpOwogCi0gICAgICAgICBGUFRfc2NidXNmKHBfcG9ydCk7Ci0gICAgICAgICB9Ci0gICAgICB9CisJCQlGUFRfc2NidXNmKHBfcG9ydCk7CisJCX0KKwl9CiAKLSAgIGVsc2UKLSAgICAgIHsKLSAgICAgIGxvc2VyID0gMDsKLSAgICAgIH0KKwllbHNlIHsKKwkJbG9zZXIgPSAwOworCX0KIAorCWlmICghbG9zZXIpIHsKIAotICAgaWYgKCFsb3NlcikKLSAgICAgIHsKKwkJRlBUX3NjYW1JbmZvW3Bfb3VyX2lkXS5zdGF0ZSA9IElEX0FTU0lHTkVEOwogCi0gICAgICBGUFRfc2NhbUluZm9bcF9vdXJfaWRdLnN0YXRlID0gSURfQVNTSUdORUQ7CisJCWlmIChTY2FtRmxnICYgU0NBTV9FTkFCTEVEKSB7CiAKKwkJCWZvciAoaSA9IDA7IGkgPCBNQVhfU0NTSV9UQVI7IGkrKykgeworCQkJCWlmICgoRlBUX3NjYW1JbmZvW2ldLnN0YXRlID09IElEX1VOQVNTSUdORUQpIHx8CisJCQkJICAgIChGUFRfc2NhbUluZm9baV0uc3RhdGUgPT0gSURfVU5VU0VEKSkgeworCQkJCQlpZiAoRlBUX3Njc2VsbChwX3BvcnQsIGkpKSB7CisJCQkJCQlGUFRfc2NhbUluZm9baV0uc3RhdGUgPSBMRUdBQ1k7CisJCQkJCQlpZiAoKEZQVF9zY2FtSW5mb1tpXS4KKwkJCQkJCSAgICAgaWRfc3RyaW5nWzBdICE9IDB4RkYpCisJCQkJCQkgICAgfHwgKEZQVF9zY2FtSW5mb1tpXS4KKwkJCQkJCQlpZF9zdHJpbmdbMV0gIT0gMHhGQSkpIHsKIAotCQlpZiAoU2NhbUZsZyAmIFNDQU1fRU5BQkxFRCkKLQkJeworCQkJCQkJCUZQVF9zY2FtSW5mb1tpXS4KKwkJCQkJCQkgICAgaWRfc3RyaW5nWzBdID0gMHhGRjsKKwkJCQkJCQlGUFRfc2NhbUluZm9baV0uCisJCQkJCQkJICAgIGlkX3N0cmluZ1sxXSA9IDB4RkE7CisJCQkJCQkJaWYgKHBDdXJyTnZSYW0gPT0gTlVMTCkKKwkJCQkJCQkJY3VyckNhcmQtPgorCQkJCQkJCQkgICAgZ2xvYmFsRmxhZ3MKKwkJCQkJCQkJICAgIHw9CisJCQkJCQkJCSAgICBGX1VQREFURV9FRVBST007CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CiAKLQkgICAgICBmb3IgKGk9MDsgaSA8IE1BWF9TQ1NJX1RBUjsgaSsrKQotICAJCSAgIHsKLSAgICAgIAkgICBpZiAoKEZQVF9zY2FtSW5mb1tpXS5zdGF0ZSA9PSBJRF9VTkFTU0lHTkVEKSB8fAotICAJICAgICAgCSAgIChGUFRfc2NhbUluZm9baV0uc3RhdGUgPT0gSURfVU5VU0VEKSkKLQkgIAkgICAgICB7Ci0gICAJICAgICAJICAgaWYgKEZQVF9zY3NlbGwocF9wb3J0LGkpKQotICAgICAgCSAgCSAgIHsKLSAgICAgICAgICAgIAkgICBGUFRfc2NhbUluZm9baV0uc3RhdGUgPSBMRUdBQ1k7Ci0gIAkgICAgICAgICAgICAJaWYgKChGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nWzBdICE9IDB4RkYpIHx8Ci0gICAgIAkgICAgICAgICAgICAJKEZQVF9zY2FtSW5mb1tpXS5pZF9zdHJpbmdbMV0gIT0gMHhGQSkpCi0JICAgICAJICAgICAgICAgeworCQkJRlBUX3NyZXNiKHBfcG9ydCwgcF9jYXJkKTsKKwkJCUZQVF9XYWl0MVNlY29uZChwX3BvcnQpOworCQkJd2hpbGUgKCEoRlBUX3NjYXJiKHBfcG9ydCwgSU5JVF9TRUxURCkpKSB7CisJCQl9CisJCQlGUFRfc2NzZWwocF9wb3J0KTsKKwkJCUZQVF9zY2FzaWQocF9jYXJkLCBwX3BvcnQpOworCQl9CiAKLSAgIAkgICAgICAgIAkgICAgICBGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nWzBdID0gMHhGRjsKLSAgICAgIAkgICAgICAgIAkgICBGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nWzFdID0gMHhGQTsKLQkJCQkJCQlpZihwQ3Vyck52UmFtID09IE5VTEwpCi0JICAgICAgICAgCSAgICAgICAgIGN1cnJDYXJkLT5nbG9iYWxGbGFncyB8PSBGX1VQREFURV9FRVBST007Ci0gICAgICAgICAgICAgICAJfQotCSAgCSAgICAgICAgIH0KLSAgIAkgIAkgICB9Ci0gICAgICAJfQorCX0KIAotCSAgICAgIEZQVF9zcmVzYihwX3BvcnQscF9jYXJkKTsKLSAgICAgIAlGUFRfV2FpdDFTZWNvbmQocF9wb3J0KTsKLSAgICAgICAgIHdoaWxlICghKEZQVF9zY2FyYihwX3BvcnQsSU5JVF9TRUxURCkpKSB7fQotICAgICAgICAgRlBUX3Njc2VsKHBfcG9ydCk7Ci0gICAgICAgICBGUFRfc2Nhc2lkKHBfY2FyZCwgcF9wb3J0KTsKLSAgICAgICAgIH0KKwllbHNlIGlmICgobG9zZXIpICYmIChTY2FtRmxnICYgU0NBTV9FTkFCTEVEKSkgeworCQlGUFRfc2NhbUluZm9bcF9vdXJfaWRdLmlkX3N0cmluZ1swXSA9IFNMVl9UWVBFX0NPREUwOworCQlhc3NpZ25lZF9pZCA9IDA7CisJCUZQVF9zY3d0c2VsKHBfcG9ydCk7CiAKLSAgICAgIH0KKwkJZG8geworCQkJd2hpbGUgKEZQVF9zY3hmZXJjKHBfcG9ydCwgMHgwMCkgIT0gU1lOQ19QVFJOKSB7CisJCQl9CiAKLSAgIGVsc2UgaWYgKChsb3NlcikgJiYgKFNjYW1GbGcgJiBTQ0FNX0VOQUJMRUQpKQotICAgICAgewotICAgICAgRlBUX3NjYW1JbmZvW3Bfb3VyX2lkXS5pZF9zdHJpbmdbMF0gPSBTTFZfVFlQRV9DT0RFMDsKLSAgICAgIGFzc2lnbmVkX2lkID0gMDsKLSAgICAgIEZQVF9zY3d0c2VsKHBfcG9ydCk7CisJCQlpID0gRlBUX3NjeGZlcmMocF9wb3J0LCAweDAwKTsKKwkJCWlmIChpID09IEFTU0lHTl9JRCkgeworCQkJCWlmICghCisJCQkJICAgIChGUFRfc2NzZW5kaQorCQkJCSAgICAgKHBfcG9ydCwKKwkJCQkgICAgICAmRlBUX3NjYW1JbmZvW3Bfb3VyX2lkXS5pZF9zdHJpbmdbMF0pKSkgeworCQkJCQlpID0gRlBUX3NjeGZlcmMocF9wb3J0LCAweDAwKTsKKwkJCQkJaWYgKEZQVF9zY3ZhbHEoaSkpIHsKKwkJCQkJCWsgPSBGUFRfc2N4ZmVyYyhwX3BvcnQsIDB4MDApOwogCi0gICAgICBkbyB7Ci0gICAgICAgICB3aGlsZSAoRlBUX3NjeGZlcmMocF9wb3J0LDB4MDApICE9IFNZTkNfUFRSTikge30KKwkJCQkJCWlmIChGUFRfc2N2YWxxKGspKSB7CisJCQkJCQkJY3VyckNhcmQtPm91cklkID0KKwkJCQkJCQkgICAgKCh1bnNpZ25lZCBjaGFyKShpCisJCQkJCQkJCQkgICAgIDw8CisJCQkJCQkJCQkgICAgIDMpCisJCQkJCQkJICAgICArCisJCQkJCQkJICAgICAoayAmCisJCQkJCQkJICAgICAgKHVuc2lnbmVkIGNoYXIpNykpCisJCQkJCQkJICAgICYgKHVuc2lnbmVkIGNoYXIpCisJCQkJCQkJICAgIDB4M0Y7CisJCQkJCQkJRlBUX2luaXNjaShwX2NhcmQsCisJCQkJCQkJCSAgIHBfcG9ydCwKKwkJCQkJCQkJICAgcF9vdXJfaWQpOworCQkJCQkJCUZQVF9zY2FtSW5mb1tjdXJyQ2FyZC0+CisJCQkJCQkJCSAgICAgb3VySWRdLgorCQkJCQkJCSAgICBzdGF0ZSA9IElEX0FTU0lHTkVEOworCQkJCQkJCUZQVF9zY2FtSW5mb1tjdXJyQ2FyZC0+CisJCQkJCQkJCSAgICAgb3VySWRdLgorCQkJCQkJCSAgICBpZF9zdHJpbmdbMF0KKwkJCQkJCQkgICAgPSBTTFZfVFlQRV9DT0RFMDsKKwkJCQkJCQlhc3NpZ25lZF9pZCA9IDE7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CiAKLSAgICAgICAgIGkgPSBGUFRfc2N4ZmVyYyhwX3BvcnQsMHgwMCk7Ci0gICAgICAgICBpZiAoaSA9PSBBU1NJR05fSUQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIShGUFRfc2NzZW5kaShwX3BvcnQsJkZQVF9zY2FtSW5mb1twX291cl9pZF0uaWRfc3RyaW5nWzBdKSkpCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpID0gRlBUX3NjeGZlcmMocF9wb3J0LDB4MDApOwotICAgICAgICAgICAgICAgICAgaWYgKEZQVF9zY3ZhbHEoaSkpCi0gICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICBrID0gRlBUX3NjeGZlcmMocF9wb3J0LDB4MDApOworCQkJZWxzZSBpZiAoaSA9PSBTRVRfUF9GTEFHKSB7CisJCQkJaWYgKCEoRlBUX3Njc2VuZGkocF9wb3J0LAorCQkJCQkJICAmRlBUX3NjYW1JbmZvW3Bfb3VyX2lkXS4KKwkJCQkJCSAgaWRfc3RyaW5nWzBdKSkpCisJCQkJCUZQVF9zY2FtSW5mb1twX291cl9pZF0uaWRfc3RyaW5nWzBdIHw9CisJCQkJCSAgICAweDgwOworCQkJfQorCQl9IHdoaWxlICghYXNzaWduZWRfaWQpOwogCi0gICAgICAgICAgICAgICAgICAgICBpZiAoRlBUX3NjdmFscShrKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJDYXJkLT5vdXJJZCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVDSEFSKShpPDwzKSsoayAmIChVQ0hBUik3KSkgJiAoVUNIQVIpIDB4M0Y7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGUFRfaW5pc2NpKHBfY2FyZCwgcF9wb3J0LCBwX291cl9pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBGUFRfc2NhbUluZm9bY3VyckNhcmQtPm91cklkXS5zdGF0ZSA9IElEX0FTU0lHTkVEOwotICAgICAgICAgICAgICAgICAgICAgICAgRlBUX3NjYW1JbmZvW2N1cnJDYXJkLT5vdXJJZF0uaWRfc3RyaW5nWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFNMVl9UWVBFX0NPREUwOwotICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduZWRfaWQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCQl3aGlsZSAoRlBUX3NjeGZlcmMocF9wb3J0LCAweDAwKSAhPSBDRkdfQ01QTFQpIHsKKwkJfQorCX0KIAotICAgICAgICAgZWxzZSBpZiAoaSA9PSBTRVRfUF9GTEFHKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgaWYgKCEoRlBUX3Njc2VuZGkocF9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgJkZQVF9zY2FtSW5mb1twX291cl9pZF0uaWRfc3RyaW5nWzBdKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBGUFRfc2NhbUluZm9bcF9vdXJfaWRdLmlkX3N0cmluZ1swXSB8PSAweDgwOwotICAgICAgICAgICAgfQotICAgICAgICAgfXdoaWxlICghYXNzaWduZWRfaWQpOwotCi0gICAgICB3aGlsZSAoRlBUX3NjeGZlcmMocF9wb3J0LDB4MDApICE9IENGR19DTVBMVCkge30KLSAgICAgIH0KLQotICAgaWYgKFNjYW1GbGcgJiBTQ0FNX0VOQUJMRUQpCi0gICAgICB7Ci0gICAgICBGUFRfc2NidXNmKHBfcG9ydCk7Ci0gICAgICBpZiAoY3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9VUERBVEVfRUVQUk9NKQotICAgICAgICAgewotICAgICAgICAgRlBUX3Njc2F2ZGkocF9jYXJkLCBwX3BvcnQpOwotICAgICAgICAgY3VyckNhcmQtPmdsb2JhbEZsYWdzICY9IH5GX1VQREFURV9FRVBST007Ci0gICAgICAgICB9Ci0gICAgICB9Ci0KKwlpZiAoU2NhbUZsZyAmIFNDQU1fRU5BQkxFRCkgeworCQlGUFRfc2NidXNmKHBfcG9ydCk7CisJCWlmIChjdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX1VQREFURV9FRVBST00pIHsKKwkJCUZQVF9zY3NhdmRpKHBfY2FyZCwgcF9wb3J0KTsKKwkJCWN1cnJDYXJkLT5nbG9iYWxGbGFncyAmPSB+Rl9VUERBVEVfRUVQUk9NOworCQl9CisJfQogCiAvKgogICAgZm9yIChpPTAsaz0wOyBpIDwgTUFYX1NDU0lfVEFSOyBpKyspCkBAIC02MjUzLDcgKzU3MDUsNiBAQAogKi8KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2NhcmIKQEAgLTYyNjIsNTkgKzU3MTMsNjAgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgRlBUX3NjYXJiKFVMT05HIHBfcG9ydCwgVUNIQVIgcF9zZWxfdHlwZSkKK3N0YXRpYyBpbnQgRlBUX3NjYXJiKHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBjaGFyIHBfc2VsX3R5cGUpCiB7Ci0gICBpZiAocF9zZWxfdHlwZSA9PSBJTklUX1NFTFREKQotICAgICAgeworCWlmIChwX3NlbF90eXBlID09IElOSVRfU0VMVEQpIHsKIAotICAgICAgd2hpbGUgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcpICYgKFNDU0lfU0VMIHwgU0NTSV9CU1kpKSB7fQorCQl3aGlsZSAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSAmIChTQ1NJX1NFTCB8IFNDU0lfQlNZKSkgeworCQl9CiAKKwkJaWYgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX1NFTCkKKwkJCXJldHVybiAwOwogCi0gICAgICBpZiAoUkRfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZykgJiBTQ1NJX1NFTCkKLSAgICAgICAgIHJldHVybigwKTsKKwkJaWYgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaWRhdGFfMCkgIT0gMDApCisJCQlyZXR1cm4gMDsKIAotICAgICAgaWYgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lkYXRhXzApICE9IDAwKQotICAgICAgICAgcmV0dXJuKDApOworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lzaWcsCisJCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSB8IFNDU0lfQlNZKSk7CiAKLSAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIChSRF9IQVJQT09OKHBfcG9ydCtocF9zY3Npc2lnKSB8IFNDU0lfQlNZKSk7CisJCWlmIChSRF9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lzaWcpICYgU0NTSV9TRUwpIHsKIAotICAgICAgaWYgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcpICYgU0NTSV9TRUwpIHsKKwkJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZywKKwkJCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSAmCisJCQkJICAgIH5TQ1NJX0JTWSkpOworCQkJcmV0dXJuIDA7CisJCX0KIAotICAgICAgICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZywgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcpICYKLSAgICAgICAgICAgIH5TQ1NJX0JTWSkpOwotICAgICAgICAgcmV0dXJuKDApOwotICAgICAgICAgfQorCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lzaWcsCisJCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSB8IFNDU0lfU0VMKSk7CiAKKwkJaWYgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaWRhdGFfMCkgIT0gMDApIHsKIAotICAgICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZywgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcpIHwgU0NTSV9TRUwpKTsKKwkJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZywKKwkJCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSAmCisJCQkJICAgIH4oU0NTSV9CU1kgfCBTQ1NJX1NFTCkpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQogCi0gICAgICBpZiAoUkRfSEFSUE9PTihwX3BvcnQraHBfc2NzaWRhdGFfMCkgIT0gMDApIHsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2Nsa2N0cmxfMCwgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfY2xrY3RybF8wKQorCQkJCQkgICAmIH5BQ1RkZWFzc2VydCkpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXJlc2V0LCBTQ0FNX0VOKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lkYXRhXzAsIDB4MDApOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaWRhdGFfMSwgMHgwMCk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wb3J0Y3RybF8wLCBTQ1NJX0JVU19FTik7CiAKLSAgICAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIChSRF9IQVJQT09OKHBfcG9ydCtocF9zY3Npc2lnKSAmCi0gICAgICAgICAgICB+KFNDU0lfQlNZIHwgU0NTSV9TRUwpKSk7Ci0gICAgICAgICByZXR1cm4oMCk7Ci0gICAgICAgICB9Ci0gICAgICB9CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnLAorCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSB8IFNDU0lfTVNHKSk7CiAKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lzaWcsIChSRF9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lzaWcpCisJCQkJCSAmIH5TQ1NJX0JTWSkpOwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9jbGtjdHJsXzAsIChSRF9IQVJQT09OKHBfcG9ydCtocF9jbGtjdHJsXzApCi0gICAgICAmIH5BQ1RkZWFzc2VydCkpOwotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXJlc2V0LCBTQ0FNX0VOKTsKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lkYXRhXzAsIDB4MDApOwotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaWRhdGFfMSwgMHgwMCk7Ci0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9wb3J0Y3RybF8wLCBTQ1NJX0JVU19FTik7CisJRlBUX1dhaXQocF9wb3J0LCBUT18yNTBtcyk7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIChSRF9IQVJQT09OKHBfcG9ydCtocF9zY3Npc2lnKSB8IFNDU0lfTVNHKSk7Ci0KLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIChSRF9IQVJQT09OKHBfcG9ydCtocF9zY3Npc2lnKQotICAgICAgJiB+U0NTSV9CU1kpKTsKLQotICAgRlBUX1dhaXQocF9wb3J0LFRPXzI1MG1zKTsKLQotICAgcmV0dXJuKDEpOworCXJldHVybiAxOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zY2J1c2YKQEAgLTYzMjMsMzQgKzU3NzUsMzAgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9zY2J1c2YoVUxPTkcgcF9wb3J0KQorc3RhdGljIHZvaWQgRlBUX3NjYnVzZih1bnNpZ25lZCBsb25nIHBfcG9ydCkKIHsKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCwKLSAgICAgIChSRF9IQVJQT09OKHBfcG9ydCtocF9wYWdlX2N0cmwpIHwgR19JTlRfRElTQUJMRSkpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfcGFnZV9jdHJsLAorCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwpIHwgR19JTlRfRElTQUJMRSkpOwogCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wLCAweDAwKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaWRhdGFfMCwgMHgwMCk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wb3J0Y3RybF8wLCAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9wb3J0Y3RybF8wKQorCQkJCQkgICAgJiB+U0NTSV9CVVNfRU4pKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfcG9ydGN0cmxfMCwgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3BvcnRjdHJsXzApCi0gICAgICAmIH5TQ1NJX0JVU19FTikpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZywgMHgwMCk7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIDB4MDApOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXJlc2V0LCAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpcmVzZXQpCisJCQkJCSAgICYgflNDQU1fRU4pKTsKIAorCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfY2xrY3RybF8wLCAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9jbGtjdHJsXzApCisJCQkJCSAgIHwgQUNUZGVhc3NlcnQpKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXJlc2V0LCAgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lyZXNldCkKLSAgICAgICYgflNDQU1fRU4pKTsKKwlXUldfSEFSUE9PTigocF9wb3J0ICsgaHBfaW50c3RhdCksIChCVVNfRlJFRSB8IEFVVE9fSU5UIHwgU0NBTV9TRUwpKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfY2xrY3RybF8wLCAoUkRfSEFSUE9PTihwX3BvcnQraHBfY2xrY3RybF8wKQotICAgICAgfCBBQ1RkZWFzc2VydCkpOwotCi0gICBXUldfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpLCAoQlVTX0ZSRUUgfCBBVVRPX0lOVCB8IFNDQU1fU0VMKSk7Ci0KLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCwKLSAgICAgIChSRF9IQVJQT09OKHBfcG9ydCtocF9wYWdlX2N0cmwpICYgfkdfSU5UX0RJU0FCTEUpKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3BhZ2VfY3RybCwKKwkJICAgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfcGFnZV9jdHJsKSAmIH5HX0lOVF9ESVNBQkxFKSk7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2Nhc2lkCkBAIC02MzU5LDg2ICs1ODA3LDc1IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfc2Nhc2lkKFVDSEFSIHBfY2FyZCwgVUxPTkcgcF9wb3J0KQorc3RhdGljIHZvaWQgRlBUX3NjYXNpZCh1bnNpZ25lZCBjaGFyIHBfY2FyZCwgdW5zaWduZWQgbG9uZyBwX3BvcnQpCiB7Ci0gICBVQ0hBUiB0ZW1wX2lkX3N0cmluZ1tJRF9TVFJJTkdfTEVOR1RIXTsKKwl1bnNpZ25lZCBjaGFyIHRlbXBfaWRfc3RyaW5nW0lEX1NUUklOR19MRU5HVEhdOwogCi0gICBVQ0hBUiBpLGssc2NhbV9pZDsKLQlVQ0hBUiBjcmNCeXRlc1szXTsKLQlQTlZSYW1JbmZvIHBDdXJyTnZSYW07Ci0JdXNob3J0X3B0ciBwQ3JjQnl0ZXM7CisJdW5zaWduZWQgY2hhciBpLCBrLCBzY2FtX2lkOworCXVuc2lnbmVkIGNoYXIgY3JjQnl0ZXNbM107CisJc3RydWN0IG52cmFtX2luZm8gKnBDdXJyTnZSYW07CisJdW5zaWduZWQgc2hvcnQgKnBDcmNCeXRlczsKIAogCXBDdXJyTnZSYW0gPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLnBOdlJhbUluZm87CiAKLSAgIGk9MDsKKwlpID0gMDsKIAotICAgd2hpbGUgKCFpKQotICAgICAgeworCXdoaWxlICghaSkgewogCi0gICAgICBmb3IgKGs9MDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsrKykKLSAgICAgICAgIHsKLSAgICAgICAgIHRlbXBfaWRfc3RyaW5nW2tdID0gKFVDSEFSKSAweDAwOwotICAgICAgICAgfQorCQlmb3IgKGsgPSAwOyBrIDwgSURfU1RSSU5HX0xFTkdUSDsgaysrKSB7CisJCQl0ZW1wX2lkX3N0cmluZ1trXSA9ICh1bnNpZ25lZCBjaGFyKTB4MDA7CisJCX0KIAotICAgICAgRlBUX3NjeGZlcmMocF9wb3J0LFNZTkNfUFRSTik7Ci0gICAgICBGUFRfc2N4ZmVyYyhwX3BvcnQsQVNTSUdOX0lEKTsKKwkJRlBUX3NjeGZlcmMocF9wb3J0LCBTWU5DX1BUUk4pOworCQlGUFRfc2N4ZmVyYyhwX3BvcnQsIEFTU0lHTl9JRCk7CiAKLSAgICAgIGlmICghKEZQVF9zY2lzbyhwX3BvcnQsJnRlbXBfaWRfc3RyaW5nWzBdKSkpCi0gICAgICAgICB7Ci0JCQlpZihwQ3Vyck52UmFtKXsKLQkJCQlwQ3JjQnl0ZXMgPSAodXNob3J0X3B0cikmY3JjQnl0ZXNbMF07CisJCWlmICghKEZQVF9zY2lzbyhwX3BvcnQsICZ0ZW1wX2lkX3N0cmluZ1swXSkpKSB7CisJCQlpZiAocEN1cnJOdlJhbSkgeworCQkJCXBDcmNCeXRlcyA9ICh1bnNpZ25lZCBzaG9ydCAqKSZjcmNCeXRlc1swXTsKIAkJCQkqcENyY0J5dGVzID0gRlBUX0NhbGNDcmMxNigmdGVtcF9pZF9zdHJpbmdbMF0pOwogCQkJCWNyY0J5dGVzWzJdID0gRlBUX0NhbGNMcmMoJnRlbXBfaWRfc3RyaW5nWzBdKTsKIAkJCQl0ZW1wX2lkX3N0cmluZ1sxXSA9IGNyY0J5dGVzWzJdOwogCQkJCXRlbXBfaWRfc3RyaW5nWzJdID0gY3JjQnl0ZXNbMF07CiAJCQkJdGVtcF9pZF9zdHJpbmdbM10gPSBjcmNCeXRlc1sxXTsKLQkJCQlmb3IoayA9IDQ7IGsgPCBJRF9TVFJJTkdfTEVOR1RIOyBrKyspCi0JCQkJCXRlbXBfaWRfc3RyaW5nW2tdID0gKFVDSEFSKSAweDAwOworCQkJCWZvciAoayA9IDQ7IGsgPCBJRF9TVFJJTkdfTEVOR1RIOyBrKyspCisJCQkJCXRlbXBfaWRfc3RyaW5nW2tdID0gKHVuc2lnbmVkIGNoYXIpMHgwMDsKIAkJCX0KLSAgICAgICAgIGkgPSBGUFRfc2NtYWNoaWQocF9jYXJkLHRlbXBfaWRfc3RyaW5nKTsKKwkJCWkgPSBGUFRfc2NtYWNoaWQocF9jYXJkLCB0ZW1wX2lkX3N0cmluZyk7CiAKLSAgICAgICAgIGlmIChpID09IENMUl9QUklPUklUWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIEZQVF9zY3hmZXJjKHBfcG9ydCxNSVNDX0NPREUpOwotICAgICAgICAgICAgRlBUX3NjeGZlcmMocF9wb3J0LENMUl9QX0ZMQUcpOwotICAgICAgICAgICAgaSA9IDA7ICAvKk5vdCB0aGUgbGFzdCBJRCB5ZXQuICovCi0gICAgICAgICAgICB9CisJCQlpZiAoaSA9PSBDTFJfUFJJT1JJVFkpIHsKKwkJCQlGUFRfc2N4ZmVyYyhwX3BvcnQsIE1JU0NfQ09ERSk7CisJCQkJRlBUX3NjeGZlcmMocF9wb3J0LCBDTFJfUF9GTEFHKTsKKwkJCQlpID0gMDsJLypOb3QgdGhlIGxhc3QgSUQgeWV0LiAqLworCQkJfQogCi0gICAgICAgICBlbHNlIGlmIChpICE9IE5PX0lEX0FWQUlMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgaWYgKGkgPCA4ICkKLSAgICAgICAgICAgICAgIEZQVF9zY3hmZXJjKHBfcG9ydCxJRF8wXzcpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgRlBUX3NjeGZlcmMocF9wb3J0LElEXzhfRik7CisJCQllbHNlIGlmIChpICE9IE5PX0lEX0FWQUlMKSB7CisJCQkJaWYgKGkgPCA4KQorCQkJCQlGUFRfc2N4ZmVyYyhwX3BvcnQsIElEXzBfNyk7CisJCQkJZWxzZQorCQkJCQlGUFRfc2N4ZmVyYyhwX3BvcnQsIElEXzhfRik7CiAKLSAgICAgICAgICAgIHNjYW1faWQgPSAoaSAmIChVQ0hBUikgMHgwNyk7CisJCQkJc2NhbV9pZCA9IChpICYgKHVuc2lnbmVkIGNoYXIpMHgwNyk7CiAKKwkJCQlmb3IgKGsgPSAxOyBrIDwgMHgwODsgayA8PD0gMSkKKwkJCQkJaWYgKCEoayAmIGkpKQorCQkJCQkJc2NhbV9pZCArPSAweDA4OwkvKkNvdW50IG51bWJlciBvZiB6ZXJvcyBpbiBEQjAtMy4gKi8KIAotICAgICAgICAgICAgZm9yIChrPTE7IGsgPCAweDA4OyBrIDw8PSAxKQotICAgICAgICAgICAgICAgaWYgKCEoIGsgJiBpICkpCi0gICAgICAgICAgICAgICAgICBzY2FtX2lkICs9IDB4MDg7ICAgICAgICAvKkNvdW50IG51bWJlciBvZiB6ZXJvcyBpbiBEQjAtMy4gKi8KKwkJCQlGUFRfc2N4ZmVyYyhwX3BvcnQsIHNjYW1faWQpOwogCi0gICAgICAgICAgICBGUFRfc2N4ZmVyYyhwX3BvcnQsc2NhbV9pZCk7CisJCQkJaSA9IDA7CS8qTm90IHRoZSBsYXN0IElEIHlldC4gKi8KKwkJCX0KKwkJfQogCi0gICAgICAgICAgICBpID0gMDsgIC8qTm90IHRoZSBsYXN0IElEIHlldC4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgIH0KKwkJZWxzZSB7CisJCQlpID0gMTsKKwkJfQogCi0gICAgICBlbHNlCi0gICAgICAgICB7Ci0gICAgICAgICBpID0gMTsKLSAgICAgICAgIH0KKwl9CQkJLypFbmQgd2hpbGUgKi8KIAotICAgICAgfSAgLypFbmQgd2hpbGUgKi8KLQotICAgRlBUX3NjeGZlcmMocF9wb3J0LFNZTkNfUFRSTik7Ci0gICBGUFRfc2N4ZmVyYyhwX3BvcnQsQ0ZHX0NNUExUKTsKKwlGUFRfc2N4ZmVyYyhwX3BvcnQsIFNZTkNfUFRSTik7CisJRlBUX3NjeGZlcmMocF9wb3J0LCBDRkdfQ01QTFQpOwogfQogCi0KLQotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zY3NlbApAQCAtNjQ0NywzMiArNTg4NCwzMiBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3Njc2VsKFVMT05HIHBfcG9ydCkKK3N0YXRpYyB2b2lkIEZQVF9zY3NlbCh1bnNpZ25lZCBsb25nIHBfcG9ydCkKIHsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZywgU0NTSV9TRUwpOwotICAgRlBUX3Njd2lyb3MocF9wb3J0LCBTQ1NJX01TRyk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnLCBTQ1NJX1NFTCk7CisJRlBUX3Njd2lyb3MocF9wb3J0LCBTQ1NJX01TRyk7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIChTQ1NJX1NFTCB8IFNDU0lfQlNZKSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnLCAoU0NTSV9TRUwgfCBTQ1NJX0JTWSkpOwogCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnLAorCQkgICAoU0NTSV9TRUwgfCBTQ1NJX0JTWSB8IFNDU0lfSU9CSVQgfCBTQ1NJX0NEKSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wLAorCQkgICAodW5zaWduZWQgY2hhcikoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wKSB8CisJCQkJICAgKHVuc2lnbmVkIGNoYXIpKEJJVCg3KSArIEJJVCg2KSkpKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZywgKFNDU0lfU0VMIHwgU0NTSV9CU1kgfCBTQ1NJX0lPQklUIHwgU0NTSV9DRCkpOwotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaWRhdGFfMCwgKFVDSEFSKShSRF9IQVJQT09OKHBfcG9ydCtocF9zY3NpZGF0YV8wKSB8Ci0gICAgICAoVUNIQVIpKEJJVCg3KStCSVQoNikpKSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnLCAoU0NTSV9CU1kgfCBTQ1NJX0lPQklUIHwgU0NTSV9DRCkpOworCUZQVF9zY3dpcm9zKHBfcG9ydCwgU0NTSV9TRUwpOwogCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wLAorCQkgICAodW5zaWduZWQgY2hhcikoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wKSAmCisJCQkJICAgfih1bnNpZ25lZCBjaGFyKUJJVCg2KSkpOworCUZQVF9zY3dpcm9kKHBfcG9ydCwgQklUKDYpKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZywgKFNDU0lfQlNZIHwgU0NTSV9JT0JJVCB8IFNDU0lfQ0QpKTsKLSAgIEZQVF9zY3dpcm9zKHBfcG9ydCwgU0NTSV9TRUwpOwotCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zY3NpZGF0YV8wLCAoVUNIQVIpKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lkYXRhXzApICYKLSAgICAgIH4oVUNIQVIpQklUKDYpKSk7Ci0gICBGUFRfc2N3aXJvZChwX3BvcnQsIEJJVCg2KSk7Ci0KLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIChTQ1NJX1NFTCB8IFNDU0lfQlNZIHwgU0NTSV9JT0JJVCB8IFNDU0lfQ0QpKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lzaWcsCisJCSAgIChTQ1NJX1NFTCB8IFNDU0lfQlNZIHwgU0NTSV9JT0JJVCB8IFNDU0lfQ0QpKTsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9zY3hmZXJjCkBAIC02NDgxLDQ4ICs1OTE4LDQ3IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgVUNIQVIgRlBUX3NjeGZlcmMoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2RhdGEpCitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfc2N4ZmVyYyh1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgY2hhciBwX2RhdGEpCiB7Ci0gICBVQ0hBUiBjdXJyX2RhdGEsIHJldF9kYXRhOworCXVuc2lnbmVkIGNoYXIgY3Vycl9kYXRhLCByZXRfZGF0YTsKIAotICAgY3Vycl9kYXRhID0gcF9kYXRhIHwgQklUKDcpIHwgQklUKDUpOyAgIC8qU3RhcnQgd2l0aCBEQjcgJiBEQjUgYXNzZXJ0ZWQuICovCisJY3Vycl9kYXRhID0gcF9kYXRhIHwgQklUKDcpIHwgQklUKDUpOwkvKlN0YXJ0IHdpdGggREI3ICYgREI1IGFzc2VydGVkLiAqLwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zY3NpZGF0YV8wLCBjdXJyX2RhdGEpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaWRhdGFfMCwgY3Vycl9kYXRhKTsKIAotICAgY3Vycl9kYXRhICY9IH5CSVQoNyk7CisJY3Vycl9kYXRhICY9IH5CSVQoNyk7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lkYXRhXzAsIGN1cnJfZGF0YSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wLCBjdXJyX2RhdGEpOwogCi0gICBGUFRfc2N3aXJvZChwX3BvcnQsQklUKDcpKTsgICAgICAgICAgICAgIC8qV2FpdCBmb3IgREI3IHRvIGJlIHJlbGVhc2VkLiAqLwotCXdoaWxlICghKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lkYXRhXzApICYgQklUKDUpKSk7CisJRlBUX3Njd2lyb2QocF9wb3J0LCBCSVQoNykpOwkvKldhaXQgZm9yIERCNyB0byBiZSByZWxlYXNlZC4gKi8KKwl3aGlsZSAoIShSRF9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lkYXRhXzApICYgQklUKDUpKSkgOwogCi0gICByZXRfZGF0YSA9IChSRF9IQVJQT09OKHBfcG9ydCtocF9zY3NpZGF0YV8wKSAmIChVQ0hBUikgMHgxRik7CisJcmV0X2RhdGEgPSAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wKSAmICh1bnNpZ25lZCBjaGFyKTB4MUYpOwogCi0gICBjdXJyX2RhdGEgfD0gQklUKDYpOworCWN1cnJfZGF0YSB8PSBCSVQoNik7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lkYXRhXzAsIGN1cnJfZGF0YSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wLCBjdXJyX2RhdGEpOwogCi0gICBjdXJyX2RhdGEgJj0gfkJJVCg1KTsKKwljdXJyX2RhdGEgJj0gfkJJVCg1KTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaWRhdGFfMCwgY3Vycl9kYXRhKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lkYXRhXzAsIGN1cnJfZGF0YSk7CiAKLSAgIEZQVF9zY3dpcm9kKHBfcG9ydCxCSVQoNSkpOyAgICAgICAgICAgICAgLypXYWl0IGZvciBEQjUgdG8gYmUgcmVsZWFzZWQuICovCisJRlBUX3Njd2lyb2QocF9wb3J0LCBCSVQoNSkpOwkvKldhaXQgZm9yIERCNSB0byBiZSByZWxlYXNlZC4gKi8KIAotICAgY3Vycl9kYXRhICY9IH4oQklUKDQpfEJJVCgzKXxCSVQoMil8QklUKDEpfEJJVCgwKSk7IC8qUmVsZWFzZSBkYXRhIGJpdHMgKi8KLSAgIGN1cnJfZGF0YSB8PSBCSVQoNyk7CisJY3Vycl9kYXRhICY9IH4oQklUKDQpIHwgQklUKDMpIHwgQklUKDIpIHwgQklUKDEpIHwgQklUKDApKTsJLypSZWxlYXNlIGRhdGEgYml0cyAqLworCWN1cnJfZGF0YSB8PSBCSVQoNyk7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lkYXRhXzAsIGN1cnJfZGF0YSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wLCBjdXJyX2RhdGEpOwogCi0gICBjdXJyX2RhdGEgJj0gfkJJVCg2KTsKKwljdXJyX2RhdGEgJj0gfkJJVCg2KTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2NzaWRhdGFfMCwgY3Vycl9kYXRhKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3Njc2lkYXRhXzAsIGN1cnJfZGF0YSk7CiAKLSAgIEZQVF9zY3dpcm9kKHBfcG9ydCxCSVQoNikpOyAgICAgICAgICAgICAgLypXYWl0IGZvciBEQjYgdG8gYmUgcmVsZWFzZWQuICovCisJRlBUX3Njd2lyb2QocF9wb3J0LCBCSVQoNikpOwkvKldhaXQgZm9yIERCNiB0byBiZSByZWxlYXNlZC4gKi8KIAotICAgcmV0dXJuKHJldF9kYXRhKTsKKwlyZXR1cm4gcmV0X2RhdGE7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogRlBUX3Njc2VuZGkKQEAgLTY1MzIsNTEgKzU5NjgsNTAgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBVQ0hBUiBGUFRfc2NzZW5kaShVTE9ORyBwX3BvcnQsIFVDSEFSIHBfaWRfc3RyaW5nW10pCitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfc2NzZW5kaSh1bnNpZ25lZCBsb25nIHBfcG9ydCwKKwkJCQkgdW5zaWduZWQgY2hhciBwX2lkX3N0cmluZ1tdKQogewotICAgVUNIQVIgcmV0X2RhdGEsYnl0ZV9jbnQsYml0X2NudCxkZWZlcjsKKwl1bnNpZ25lZCBjaGFyIHJldF9kYXRhLCBieXRlX2NudCwgYml0X2NudCwgZGVmZXI7CiAKLSAgIGRlZmVyID0gMDsKKwlkZWZlciA9IDA7CiAKLSAgIGZvciAoYnl0ZV9jbnQgPSAwOyBieXRlX2NudCA8IElEX1NUUklOR19MRU5HVEg7IGJ5dGVfY250KyspIHsKKwlmb3IgKGJ5dGVfY250ID0gMDsgYnl0ZV9jbnQgPCBJRF9TVFJJTkdfTEVOR1RIOyBieXRlX2NudCsrKSB7CiAKLSAgICAgIGZvciAoYml0X2NudCA9IDB4ODA7IGJpdF9jbnQgIT0gMCA7IGJpdF9jbnQgPj49IDEpIHsKKwkJZm9yIChiaXRfY250ID0gMHg4MDsgYml0X2NudCAhPSAwOyBiaXRfY250ID4+PSAxKSB7CiAKLSAgICAgICAgIGlmIChkZWZlcikKLSAgICAgICAgICAgIHJldF9kYXRhID0gRlBUX3NjeGZlcmMocF9wb3J0LDAwKTsKKwkJCWlmIChkZWZlcikKKwkJCQlyZXRfZGF0YSA9IEZQVF9zY3hmZXJjKHBfcG9ydCwgMDApOwogCi0gICAgICAgICBlbHNlIGlmIChwX2lkX3N0cmluZ1tieXRlX2NudF0gJiBiaXRfY250KQorCQkJZWxzZSBpZiAocF9pZF9zdHJpbmdbYnl0ZV9jbnRdICYgYml0X2NudCkKIAotICAgICAgICAgICAgICAgcmV0X2RhdGEgPSBGUFRfc2N4ZmVyYyhwX3BvcnQsMDIpOworCQkJCXJldF9kYXRhID0gRlBUX3NjeGZlcmMocF9wb3J0LCAwMik7CiAKLSAgICAgICAgICAgIGVsc2UgeworCQkJZWxzZSB7CiAKLSAgICAgICAgICAgICAgIHJldF9kYXRhID0gRlBUX3NjeGZlcmMocF9wb3J0LDAxKTsKLSAgICAgICAgICAgICAgIGlmIChyZXRfZGF0YSAmIDAyKQotICAgICAgICAgICAgICAgICAgZGVmZXIgPSAxOwotICAgICAgICAgICAgICAgfQorCQkJCXJldF9kYXRhID0gRlBUX3NjeGZlcmMocF9wb3J0LCAwMSk7CisJCQkJaWYgKHJldF9kYXRhICYgMDIpCisJCQkJCWRlZmVyID0gMTsKKwkJCX0KIAotICAgICAgICAgaWYgKChyZXRfZGF0YSAmIDB4MUMpID09IDB4MTApCi0gICAgICAgICAgICByZXR1cm4oMHgwMCk7ICAvKkVuZCBvZiBpc29sYXRpb24gc3RhZ2UsIHdlIHdvbiEgKi8KKwkJCWlmICgocmV0X2RhdGEgJiAweDFDKSA9PSAweDEwKQorCQkJCXJldHVybiAweDAwOwkvKkVuZCBvZiBpc29sYXRpb24gc3RhZ2UsIHdlIHdvbiEgKi8KIAotICAgICAgICAgaWYgKHJldF9kYXRhICYgMHgxQykKLSAgICAgICAgICAgIHJldHVybigweEZGKTsKKwkJCWlmIChyZXRfZGF0YSAmIDB4MUMpCisJCQkJcmV0dXJuIDB4RkY7CiAKLSAgICAgICAgIGlmICgoZGVmZXIpICYmICghKHJldF9kYXRhICYgMHgxRikpKQotICAgICAgICAgICAgcmV0dXJuKDB4MDEpOyAgLypFbmQgb2YgaXNvbGF0aW9uIHN0YWdlLCB3ZSBsb3N0LiAqLworCQkJaWYgKChkZWZlcikgJiYgKCEocmV0X2RhdGEgJiAweDFGKSkpCisJCQkJcmV0dXJuIDB4MDE7CS8qRW5kIG9mIGlzb2xhdGlvbiBzdGFnZSwgd2UgbG9zdC4gKi8KIAotICAgICAgICAgfSAvKmJpdCBsb29wICovCisJCX0JCS8qYml0IGxvb3AgKi8KIAotICAgICAgfSAvKmJ5dGUgbG9vcCAqLworCX0JCQkvKmJ5dGUgbG9vcCAqLwogCi0gICBpZiAoZGVmZXIpCi0gICAgICByZXR1cm4oMHgwMSk7ICAvKldlIGxvc3QgKi8KLSAgIGVsc2UKLSAgICAgIHJldHVybigwKTsgIC8qV2UgV09OISBZZWVlc3NzcyEgKi8KKwlpZiAoZGVmZXIpCisJCXJldHVybiAweDAxOwkvKldlIGxvc3QgKi8KKwllbHNlCisJCXJldHVybiAwOwkvKldlIFdPTiEgWWVlZXNzc3MhICovCiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2Npc28KQEAgLTY1ODUsMzEgKzYwMjAsMzEgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBVQ0hBUiBGUFRfc2Npc28oVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2lkX3N0cmluZ1tdKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX3NjaXNvKHVuc2lnbmVkIGxvbmcgcF9wb3J0LAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgcF9pZF9zdHJpbmdbXSkKIHsKLSAgIFVDSEFSIHJldF9kYXRhLHRoZV9kYXRhLGJ5dGVfY250LGJpdF9jbnQ7CisJdW5zaWduZWQgY2hhciByZXRfZGF0YSwgdGhlX2RhdGEsIGJ5dGVfY250LCBiaXRfY250OwogCi0gICB0aGVfZGF0YSA9IDA7CisJdGhlX2RhdGEgPSAwOwogCi0gICBmb3IgKGJ5dGVfY250ID0gMDsgYnl0ZV9jbnQgPCBJRF9TVFJJTkdfTEVOR1RIOyBieXRlX2NudCsrKSB7CisJZm9yIChieXRlX2NudCA9IDA7IGJ5dGVfY250IDwgSURfU1RSSU5HX0xFTkdUSDsgYnl0ZV9jbnQrKykgewogCi0gICAgICBmb3IgKGJpdF9jbnQgPSAwOyBiaXRfY250IDwgODsgYml0X2NudCsrKSB7CisJCWZvciAoYml0X2NudCA9IDA7IGJpdF9jbnQgPCA4OyBiaXRfY250KyspIHsKIAotICAgICAgICAgcmV0X2RhdGEgPSBGUFRfc2N4ZmVyYyhwX3BvcnQsMCk7CisJCQlyZXRfZGF0YSA9IEZQVF9zY3hmZXJjKHBfcG9ydCwgMCk7CiAKLSAgICAgICAgIGlmIChyZXRfZGF0YSAmIDB4RkMpCi0gICAgICAgICAgICByZXR1cm4oMHhGRik7CisJCQlpZiAocmV0X2RhdGEgJiAweEZDKQorCQkJCXJldHVybiAweEZGOwogCi0gICAgICAgICBlbHNlIHsKKwkJCWVsc2UgewogCi0gICAgICAgICAgICB0aGVfZGF0YSA8PD0gMTsKLSAgICAgICAgICAgIGlmIChyZXRfZGF0YSAmIEJJVCgxKSkgewotICAgICAgICAgICAgICAgdGhlX2RhdGEgfD0gMTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJCQl0aGVfZGF0YSA8PD0gMTsKKwkJCQlpZiAocmV0X2RhdGEgJiBCSVQoMSkpIHsKKwkJCQkJdGhlX2RhdGEgfD0gMTsKKwkJCQl9CisJCQl9CiAKLSAgICAgICAgIGlmICgocmV0X2RhdGEgJiAweDFGKSA9PSAwKQotCSAgIHsKKwkJCWlmICgocmV0X2RhdGEgJiAweDFGKSA9PSAwKSB7CiAvKgogCQkJCWlmKGJpdF9jbnQgIT0gMCB8fCBiaXRfY250ICE9IDgpCiAJCQkJewpAQCAtNjYyMCwyMyArNjA1NSwyMSBAQAogCQkJCQljb250aW51ZTsKIAkJCQl9CiAqLwotICAgICAgICAgICAgaWYgKGJ5dGVfY250KQotICAgICAgICAgICAgICAgcmV0dXJuKDB4MDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgcmV0dXJuKDB4RkYpOwotCSAgIH0KKwkJCQlpZiAoYnl0ZV9jbnQpCisJCQkJCXJldHVybiAweDAwOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIDB4RkY7CisJCQl9CiAKLSAgICAgICAgIH0gLypiaXQgbG9vcCAqLworCQl9CQkvKmJpdCBsb29wICovCiAKLSAgICAgIHBfaWRfc3RyaW5nW2J5dGVfY250XSA9IHRoZV9kYXRhOworCQlwX2lkX3N0cmluZ1tieXRlX2NudF0gPSB0aGVfZGF0YTsKIAotICAgICAgfSAvKmJ5dGUgbG9vcCAqLworCX0JCQkvKmJ5dGUgbG9vcCAqLwogCi0gICByZXR1cm4oMCk7CisJcmV0dXJuIDA7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2N3aXJvZApAQCAtNjY0NiwyNiArNjA3OSwyNCBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3Njd2lyb2QoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2RhdGFfYml0KQorc3RhdGljIHZvaWQgRlBUX3Njd2lyb2QodW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgcF9kYXRhX2JpdCkKIHsKLSAgIFVDSEFSIGk7CisJdW5zaWduZWQgY2hhciBpOwogCi0gICBpID0gMDsKLSAgIHdoaWxlICggaSA8IE1BWF9TQ1NJX1RBUiApIHsKKwlpID0gMDsKKwl3aGlsZSAoaSA8IE1BWF9TQ1NJX1RBUikgewogCi0gICAgICBpZiAoUkRfSEFSUE9PTihwX3BvcnQraHBfc2NzaWRhdGFfMCkgJiBwX2RhdGFfYml0KQorCQlpZiAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpZGF0YV8wKSAmIHBfZGF0YV9iaXQpCiAKLSAgICAgICAgIGkgPSAwOworCQkJaSA9IDA7CiAKLSAgICAgIGVsc2UKKwkJZWxzZQogCi0gICAgICAgICBpKys7CisJCQlpKys7CiAKLSAgICAgIH0KKwl9CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2N3aXJvcwpAQCAtNjY3NSwyNSArNjEwNiwyNCBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3Njd2lyb3MoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2RhdGFfYml0KQorc3RhdGljIHZvaWQgRlBUX3Njd2lyb3ModW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgcF9kYXRhX2JpdCkKIHsKLSAgIFVDSEFSIGk7CisJdW5zaWduZWQgY2hhciBpOwogCi0gICBpID0gMDsKLSAgIHdoaWxlICggaSA8IE1BWF9TQ1NJX1RBUiApIHsKKwlpID0gMDsKKwl3aGlsZSAoaSA8IE1BWF9TQ1NJX1RBUikgewogCi0gICAgICBpZiAoUkRfSEFSUE9PTihwX3BvcnQraHBfc2NzaXNpZykgJiBwX2RhdGFfYml0KQorCQlpZiAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3Npc2lnKSAmIHBfZGF0YV9iaXQpCiAKLSAgICAgICAgIGkgPSAwOworCQkJaSA9IDA7CiAKLSAgICAgIGVsc2UKKwkJZWxzZQogCi0gICAgICAgICBpKys7CisJCQlpKys7CiAKLSAgICAgIH0KKwl9CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogRlBUX3NjdmFscQpAQCAtNjcwMiwyMyArNjEzMiwyMiBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIFVDSEFSIEZQVF9zY3ZhbHEoVUNIQVIgcF9xdWludGV0KQorc3RhdGljIHVuc2lnbmVkIGNoYXIgRlBUX3NjdmFscSh1bnNpZ25lZCBjaGFyIHBfcXVpbnRldCkKIHsKLSAgIFVDSEFSIGNvdW50OworCXVuc2lnbmVkIGNoYXIgY291bnQ7CiAKLSAgIGZvciAoY291bnQ9MTsgY291bnQgPCAweDA4OyBjb3VudDw8PTEpIHsKLSAgICAgIGlmICghKHBfcXVpbnRldCAmIGNvdW50KSkKLSAgICAgICAgIHBfcXVpbnRldCAtPSAweDgwOwotICAgICAgfQorCWZvciAoY291bnQgPSAxOyBjb3VudCA8IDB4MDg7IGNvdW50IDw8PSAxKSB7CisJCWlmICghKHBfcXVpbnRldCAmIGNvdW50KSkKKwkJCXBfcXVpbnRldCAtPSAweDgwOworCX0KIAotICAgaWYgKHBfcXVpbnRldCAmIDB4MTgpCi0gICAgICByZXR1cm4oMCk7CisJaWYgKHBfcXVpbnRldCAmIDB4MTgpCisJCXJldHVybiAwOwogCi0gICBlbHNlCi0gICAgICByZXR1cm4oMSk7CisJZWxzZQorCQlyZXR1cm4gMTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfc2NzZWxsCkBAIC02NzI5LDc1ICs2MTU4LDc4IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgVUNIQVIgRlBUX3Njc2VsbChVTE9ORyBwX3BvcnQsIFVDSEFSIHRhcmdfaWQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfc2NzZWxsKHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBjaGFyIHRhcmdfaWQpCiB7Ci0gICBVTE9ORyBpOworCXVuc2lnbmVkIGxvbmcgaTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfcGFnZV9jdHJsLAotICAgICAgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCkgfCBHX0lOVF9ESVNBQkxFKSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwsCisJCSAgIChSRF9IQVJQT09OKHBfcG9ydCArIGhwX3BhZ2VfY3RybCkgfCBHX0lOVF9ESVNBQkxFKSk7CiAKLSAgIEFSQU1fQUNDRVNTKHBfcG9ydCk7CisJQVJBTV9BQ0NFU1MocF9wb3J0KTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfYWRkc3RhdCwoUkRfSEFSUE9PTihwX3BvcnQraHBfYWRkc3RhdCkgfCBTQ0FNX1RJTUVSKSk7Ci0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zZWx0aW1lb3V0LFRPXzRtcyk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9hZGRzdGF0LAorCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9hZGRzdGF0KSB8IFNDQU1fVElNRVIpKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3NlbHRpbWVvdXQsIFRPXzRtcyk7CiAKKwlmb3IgKGkgPSBwX3BvcnQgKyBDTURfU1RSVDsgaSA8IHBfcG9ydCArIENNRF9TVFJUICsgMTI7IGkgKz0gMikgeworCQlXUldfSEFSUE9PTihpLCAoTVBNX09QICsgQUNPTU1BTkQpKTsKKwl9CisJV1JXX0hBUlBPT04oaSwgKEJSSF9PUCArIEFMV0FZUyArIE5QKSk7CiAKLSAgIGZvciAoaSA9IHBfcG9ydCtDTURfU1RSVDsgaSA8IHBfcG9ydCtDTURfU1RSVCsxMjsgaSs9MikgewotICAgICAgV1JXX0hBUlBPT04oaSwgKE1QTV9PUCtBQ09NTUFORCkpOwotICAgICAgfQotICAgV1JXX0hBUlBPT04oaSwgKEJSSF9PUCtBTFdBWVMrICAgIE5QKSk7CisJV1JXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpLAorCQkgICAgKFJFU0VUIHwgVElNRU9VVCB8IFNFTCB8IEJVU19GUkVFIHwgQVVUT19JTlQpKTsKIAotICAgV1JXX0hBUlBPT04oKHBfcG9ydCtocF9pbnRzdGF0KSwKLQkgICAgICAgKFJFU0VUIHwgVElNRU9VVCB8IFNFTCB8IEJVU19GUkVFIHwgQVVUT19JTlQpKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3NlbGVjdF9pZCwgdGFyZ19pZCk7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3NlbGVjdF9pZCwgdGFyZ19pZCk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wb3J0Y3RybF8wLCBTQ1NJX1BPUlQpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfYXV0b3N0YXJ0XzMsIChTRUxFQ1QgfCBDTURfT05MWV9TVFJUKSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpY3RybF8wLCAoU0VMX1RBUiB8IEVOQV9SRVNFTCkpOwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9wb3J0Y3RybF8wLCBTQ1NJX1BPUlQpOwotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfYXV0b3N0YXJ0XzMsIChTRUxFQ1QgfCBDTURfT05MWV9TVFJUKSk7Ci0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zY3NpY3RybF8wLCAoU0VMX1RBUiB8IEVOQV9SRVNFTCkpOworCXdoaWxlICghKFJEV19IQVJQT09OKChwX3BvcnQgKyBocF9pbnRzdGF0KSkgJgorCQkgKFJFU0VUIHwgUFJPR19ITFQgfCBUSU1FT1VUIHwgQVVUT19JTlQpKSkgeworCX0KIAorCWlmIChSRFdfSEFSUE9PTigocF9wb3J0ICsgaHBfaW50c3RhdCkpICYgUkVTRVQpCisJCUZQVF9XYWl0KHBfcG9ydCwgVE9fMjUwbXMpOwogCi0gICB3aGlsZSAoIShSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmCi0JICAgIChSRVNFVCB8IFBST0dfSExUIHwgVElNRU9VVCB8IEFVVE9fSU5UKSkpIHt9CisJRElTQUJMRV9BVVRPKHBfcG9ydCk7CiAKLSAgIGlmIChSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIFJFU0VUKQotICAgICAgICAgRlBUX1dhaXQocF9wb3J0LCBUT18yNTBtcyk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9hZGRzdGF0LAorCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9hZGRzdGF0KSAmIH5TQ0FNX1RJTUVSKSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zZWx0aW1lb3V0LCBUT18yOTBtcyk7CiAKLSAgIERJU0FCTEVfQVVUTyhwX3BvcnQpOworCVNHUkFNX0FDQ0VTUyhwX3BvcnQpOwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9hZGRzdGF0LChSRF9IQVJQT09OKHBfcG9ydCtocF9hZGRzdGF0KSAmIH5TQ0FNX1RJTUVSKSk7Ci0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zZWx0aW1lb3V0LFRPXzI5MG1zKTsKKwlpZiAoUkRXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpKSAmIChSRVNFVCB8IFRJTUVPVVQpKSB7CiAKLSAgIFNHUkFNX0FDQ0VTUyhwX3BvcnQpOworCQlXUldfSEFSUE9PTigocF9wb3J0ICsgaHBfaW50c3RhdCksCisJCQkgICAgKFJFU0VUIHwgVElNRU9VVCB8IFNFTCB8IEJVU19GUkVFIHwgUEhBU0UpKTsKIAotICAgaWYgKFJEV19IQVJQT09OKChwX3BvcnQraHBfaW50c3RhdCkpICYgKFJFU0VUIHwgVElNRU9VVCkgKSB7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfcGFnZV9jdHJsLAorCQkJICAgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfcGFnZV9jdHJsKSAmCisJCQkgICAgfkdfSU5UX0RJU0FCTEUpKTsKIAotICAgICAgV1JXX0hBUlBPT04oKHBfcG9ydCtocF9pbnRzdGF0KSwKLQkJICAoUkVTRVQgfCBUSU1FT1VUIHwgU0VMIHwgQlVTX0ZSRUUgfCBQSEFTRSkpOworCQlyZXR1cm4gMDsJLypObyBsZWdhY3kgZGV2aWNlICovCisJfQogCi0gICAgICBXUl9IQVJQT09OKHBfcG9ydCtocF9wYWdlX2N0cmwsCi0gICAgICAgICAoUkRfSEFSUE9PTihwX3BvcnQraHBfcGFnZV9jdHJsKSAmIH5HX0lOVF9ESVNBQkxFKSk7CisJZWxzZSB7CiAKLSAgICAgIHJldHVybigwKTsgIC8qTm8gbGVnYWN5IGRldmljZSAqLwotICAgICAgfQotCi0gICBlbHNlIHsKLQotICAgICAgd2hpbGUoIShSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIEJVU19GUkVFKSkgewotCQkJCWlmIChSRF9IQVJQT09OKHBfcG9ydCtocF9zY3Npc2lnKSAmIFNDU0lfUkVRKQotCQkJCQl7Ci0JCQkJCVdSX0hBUlBPT04ocF9wb3J0K2hwX3Njc2lzaWcsIChTQ1NJX0FDSyArIFNfSUxMX1BIKSk7Ci0gICAgICAJCQlBQ0NFUFRfTVNHKHBfcG9ydCk7Ci0JCQkJCX0KKwkJd2hpbGUgKCEoUkRXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpKSAmIEJVU19GUkVFKSkgeworCQkJaWYgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZykgJiBTQ1NJX1JFUSkgeworCQkJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaXNpZywKKwkJCQkJICAgKFNDU0lfQUNLICsgU19JTExfUEgpKTsKKwkJCQlBQ0NFUFRfTVNHKHBfcG9ydCk7CisJCQl9CiAJCX0KIAotICAgICAgV1JXX0hBUlBPT04oKHBfcG9ydCtocF9pbnRzdGF0KSwgQ0xSX0FMTF9JTlRfMSk7CisJCVdSV19IQVJQT09OKChwX3BvcnQgKyBocF9pbnRzdGF0KSwgQ0xSX0FMTF9JTlRfMSk7CiAKLSAgICAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCwKLSAgICAgICAgIChSRF9IQVJQT09OKHBfcG9ydCtocF9wYWdlX2N0cmwpICYgfkdfSU5UX0RJU0FCTEUpKTsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwsCisJCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwpICYKKwkJCSAgICB+R19JTlRfRElTQUJMRSkpOwogCi0gICAgICByZXR1cm4oMSk7ICAvKkZvdW5kIG9uZSBvZiB0aGVtIG9sZGllcyEgKi8KLSAgICAgIH0KKwkJcmV0dXJuIDE7CS8qRm91bmQgb25lIG9mIHRoZW0gb2xkaWVzISAqLworCX0KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY4MDgsMTIgKzYyNDAsMTIgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9zY3d0c2VsKFVMT05HIHBfcG9ydCkKK3N0YXRpYyB2b2lkIEZQVF9zY3d0c2VsKHVuc2lnbmVkIGxvbmcgcF9wb3J0KQogewotICAgd2hpbGUoIShSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIFNDQU1fU0VMKSkge30KKwl3aGlsZSAoIShSRFdfSEFSUE9PTigocF9wb3J0ICsgaHBfaW50c3RhdCkpICYgU0NBTV9TRUwpKSB7CisJfQogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9pbmlzY2kKQEAgLTY4MjIsNTcgKzYyNTQsNjQgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9pbmlzY2koVUNIQVIgcF9jYXJkLCBVTE9ORyBwX3BvcnQsIFVDSEFSIHBfb3VyX2lkKQorc3RhdGljIHZvaWQgRlBUX2luaXNjaSh1bnNpZ25lZCBjaGFyIHBfY2FyZCwgdW5zaWduZWQgbG9uZyBwX3BvcnQsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyIHBfb3VyX2lkKQogewotICAgVUNIQVIgaSxrLG1heF9pZDsKLSAgIFVTSE9SVCBlZV9kYXRhOwotCVBOVlJhbUluZm8gcEN1cnJOdlJhbTsKKwl1bnNpZ25lZCBjaGFyIGksIGssIG1heF9pZDsKKwl1bnNpZ25lZCBzaG9ydCBlZV9kYXRhOworCXN0cnVjdCBudnJhbV9pbmZvICpwQ3Vyck52UmFtOwogCiAJcEN1cnJOdlJhbSA9IEZQVF9CTF9DYXJkW3BfY2FyZF0ucE52UmFtSW5mbzsKIAotICAgaWYgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCkgJiBOQVJST1dfU0NTSV9DQVJEKQotICAgICAgbWF4X2lkID0gMHgwODsKKwlpZiAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwpICYgTkFSUk9XX1NDU0lfQ0FSRCkKKwkJbWF4X2lkID0gMHgwODsKIAotICAgZWxzZQotICAgICAgbWF4X2lkID0gMHgxMDsKKwllbHNlCisJCW1heF9pZCA9IDB4MTA7CiAKLQlpZihwQ3Vyck52UmFtKXsKLQkJZm9yKGkgPSAwOyBpIDwgbWF4X2lkOyBpKyspeworCWlmIChwQ3Vyck52UmFtKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtYXhfaWQ7IGkrKykgewogCi0JCQlmb3IoayA9IDA7IGsgPCA0OyBrKyspCi0JCQkJRlBUX3NjYW1JbmZvW2ldLmlkX3N0cmluZ1trXSA9IHBDdXJyTnZSYW0tPm5pU2NhbVRibFtpXVtrXTsKLQkJCWZvcihrID0gNDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsrKykKLQkJCQlGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nW2tdID0gKFVDSEFSKSAweDAwOworCQkJZm9yIChrID0gMDsgayA8IDQ7IGsrKykKKwkJCQlGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nW2tdID0KKwkJCQkgICAgcEN1cnJOdlJhbS0+bmlTY2FtVGJsW2ldW2tdOworCQkJZm9yIChrID0gNDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsrKykKKwkJCQlGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nW2tdID0KKwkJCQkgICAgKHVuc2lnbmVkIGNoYXIpMHgwMDsKIAotCSAgICAgIGlmKEZQVF9zY2FtSW5mb1tpXS5pZF9zdHJpbmdbMF0gPT0gMHgwMCkKLSAgICAgIAkgICBGUFRfc2NhbUluZm9baV0uc3RhdGUgPSBJRF9VTlVTRUQ7ICAvKkRlZmF1bHQgdG8gdW51c2VkIElELiAqLwotCSAgICAgIGVsc2UKLSAgIAkgICAgICBGUFRfc2NhbUluZm9baV0uc3RhdGUgPSBJRF9VTkFTU0lHTkVEOyAgLypEZWZhdWx0IHRvIHVuYXNzaWduZWQgSUQuICovCisJCQlpZiAoRlBUX3NjYW1JbmZvW2ldLmlkX3N0cmluZ1swXSA9PSAweDAwKQorCQkJCUZQVF9zY2FtSW5mb1tpXS5zdGF0ZSA9IElEX1VOVVNFRDsJLypEZWZhdWx0IHRvIHVudXNlZCBJRC4gKi8KKwkJCWVsc2UKKwkJCQlGUFRfc2NhbUluZm9baV0uc3RhdGUgPSBJRF9VTkFTU0lHTkVEOwkvKkRlZmF1bHQgdG8gdW5hc3NpZ25lZCBJRC4gKi8KIAogCQl9Ci0JfWVsc2UgewotCSAgIGZvciAoaT0wOyBpIDwgbWF4X2lkOyBpKyspCi0gICAJICAgewotICAgICAgCWZvciAoaz0wOyBrIDwgSURfU1RSSU5HX0xFTkdUSDsgays9MikKLQkgICAgICAgICB7Ci0gICAJICAgICAgZWVfZGF0YSA9IEZQVF91dGlsRUVSZWFkKHBfcG9ydCwgKFVTSE9SVCkoKEVFX1NDQU1CQVNFLzIpICsKLSAgICAgIAkgICAgIChVU0hPUlQpIChpKigoVVNIT1JUKUlEX1NUUklOR19MRU5HVEgvMikpICsgKFVTSE9SVCkoay8yKSkpOwotICAgICAgICAgCUZQVF9zY2FtSW5mb1tpXS5pZF9zdHJpbmdba10gPSAoVUNIQVIpIGVlX2RhdGE7Ci0JICAgICAgICAgZWVfZGF0YSA+Pj0gODsKLSAgIAkgICAgICBGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nW2srMV0gPSAoVUNIQVIpIGVlX2RhdGE7Ci0gICAgICAJICAgfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBtYXhfaWQ7IGkrKykgeworCQkJZm9yIChrID0gMDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsgKz0gMikgeworCQkJCWVlX2RhdGEgPQorCQkJCSAgICBGUFRfdXRpbEVFUmVhZChwX3BvcnQsCisJCQkJCQkgICAodW5zaWduZWQKKwkJCQkJCSAgICBzaG9ydCkoKEVFX1NDQU1CQVNFIC8gMikgKworCQkJCQkJCSAgICh1bnNpZ25lZCBzaG9ydCkoaSAqCisJCQkJCQkJCQkgICAgKCh1bnNpZ25lZCBzaG9ydClJRF9TVFJJTkdfTEVOR1RIIC8gMikpICsgKHVuc2lnbmVkIHNob3J0KShrIC8gMikpKTsKKwkJCQlGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nW2tdID0KKwkJCQkgICAgKHVuc2lnbmVkIGNoYXIpZWVfZGF0YTsKKwkJCQllZV9kYXRhID4+PSA4OworCQkJCUZQVF9zY2FtSW5mb1tpXS5pZF9zdHJpbmdbayArIDFdID0KKwkJCQkgICAgKHVuc2lnbmVkIGNoYXIpZWVfZGF0YTsKKwkJCX0KIAotCSAgICAgIGlmICgoRlBUX3NjYW1JbmZvW2ldLmlkX3N0cmluZ1swXSA9PSAweDAwKSB8fAotICAgCSAgICAgICAoRlBUX3NjYW1JbmZvW2ldLmlkX3N0cmluZ1swXSA9PSAweEZGKSkKKwkJCWlmICgoRlBUX3NjYW1JbmZvW2ldLmlkX3N0cmluZ1swXSA9PSAweDAwKSB8fAorCQkJICAgIChGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nWzBdID09IDB4RkYpKQogCi0gICAgICAJICAgRlBUX3NjYW1JbmZvW2ldLnN0YXRlID0gSURfVU5VU0VEOyAgLypEZWZhdWx0IHRvIHVudXNlZCBJRC4gKi8KKwkJCQlGUFRfc2NhbUluZm9baV0uc3RhdGUgPSBJRF9VTlVTRUQ7CS8qRGVmYXVsdCB0byB1bnVzZWQgSUQuICovCiAKLQkgICAgICBlbHNlCi0gICAJICAgICAgRlBUX3NjYW1JbmZvW2ldLnN0YXRlID0gSURfVU5BU1NJR05FRDsgIC8qRGVmYXVsdCB0byB1bmFzc2lnbmVkIElELiAqLworCQkJZWxzZQorCQkJCUZQVF9zY2FtSW5mb1tpXS5zdGF0ZSA9IElEX1VOQVNTSUdORUQ7CS8qRGVmYXVsdCB0byB1bmFzc2lnbmVkIElELiAqLwogCi0gICAgICAJfQorCQl9CiAJfQotCWZvcihrID0gMDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsrKykKKwlmb3IgKGsgPSAwOyBrIDwgSURfU1RSSU5HX0xFTkdUSDsgaysrKQogCQlGUFRfc2NhbUluZm9bcF9vdXJfaWRdLmlkX3N0cmluZ1trXSA9IEZQVF9zY2FtSEFTdHJpbmdba107CiAKIH0KQEAgLTY4ODYsMTI3ICs2MzI1LDExNCBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIFVDSEFSIEZQVF9zY21hY2hpZChVQ0hBUiBwX2NhcmQsIFVDSEFSIHBfaWRfc3RyaW5nW10pCitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfc2NtYWNoaWQodW5zaWduZWQgY2hhciBwX2NhcmQsCisJCQkJICB1bnNpZ25lZCBjaGFyIHBfaWRfc3RyaW5nW10pCiB7CiAKLSAgIFVDSEFSIGksayxtYXRjaDsKKwl1bnNpZ25lZCBjaGFyIGksIGssIG1hdGNoOwogCisJZm9yIChpID0gMDsgaSA8IE1BWF9TQ1NJX1RBUjsgaSsrKSB7CiAKLSAgIGZvciAoaT0wOyBpIDwgTUFYX1NDU0lfVEFSOyBpKyspIHsKKwkJbWF0Y2ggPSAxOwogCi0gICAgICAgICBtYXRjaCA9IDE7CisJCWZvciAoayA9IDA7IGsgPCBJRF9TVFJJTkdfTEVOR1RIOyBrKyspIHsKKwkJCWlmIChwX2lkX3N0cmluZ1trXSAhPSBGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nW2tdKQorCQkJCW1hdGNoID0gMDsKKwkJfQogCi0gICAgICAgICBmb3IgKGs9MDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwX2lkX3N0cmluZ1trXSAhPSBGUFRfc2NhbUluZm9baV0uaWRfc3RyaW5nW2tdKQotICAgICAgICAgICAgICAgbWF0Y2ggPSAwOwotICAgICAgICAgICAgfQorCQlpZiAobWF0Y2gpIHsKKwkJCUZQVF9zY2FtSW5mb1tpXS5zdGF0ZSA9IElEX0FTU0lHTkVEOworCQkJcmV0dXJuIGk7CisJCX0KIAotICAgICAgICAgaWYgKG1hdGNoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgRlBUX3NjYW1JbmZvW2ldLnN0YXRlID0gSURfQVNTSUdORUQ7Ci0gICAgICAgICAgICByZXR1cm4oaSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgIH0KLQotCi0KLSAgIGlmIChwX2lkX3N0cmluZ1swXSAmIEJJVCg1KSkKLSAgICAgIGkgPSA4OwotICAgZWxzZQotICAgICAgaSA9IE1BWF9TQ1NJX1RBUjsKLQotICAgaWYgKCgocF9pZF9zdHJpbmdbMF0gJiAweDA2KSA9PSAweDAyKSB8fCAoKHBfaWRfc3RyaW5nWzBdICYgMHgwNikgPT0gMHgwNCkpCi0gICAgICBtYXRjaCA9IHBfaWRfc3RyaW5nWzFdICYgKFVDSEFSKSAweDFGOwotICAgZWxzZQotICAgICAgbWF0Y2ggPSA3OwotCi0gICB3aGlsZSAoaSA+IDApCi0gICAgICB7Ci0gICAgICBpLS07Ci0KLSAgICAgIGlmIChGUFRfc2NhbUluZm9bbWF0Y2hdLnN0YXRlID09IElEX1VOVVNFRCkKLSAgICAgICAgIHsKLSAgICAgICAgIGZvciAoaz0wOyBrIDwgSURfU1RSSU5HX0xFTkdUSDsgaysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgRlBUX3NjYW1JbmZvW21hdGNoXS5pZF9zdHJpbmdba10gPSBwX2lkX3N0cmluZ1trXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgRlBUX3NjYW1JbmZvW21hdGNoXS5zdGF0ZSA9IElEX0FTU0lHTkVEOwotCi0JCQlpZihGUFRfQkxfQ2FyZFtwX2NhcmRdLnBOdlJhbUluZm8gPT0gTlVMTCkKLQkgICAgICAgICBGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9IEZfVVBEQVRFX0VFUFJPTTsKLSAgICAgICAgIHJldHVybihtYXRjaCk7Ci0KLSAgICAgICAgIH0KLQotCi0gICAgICBtYXRjaC0tOwotCi0gICAgICBpZiAobWF0Y2ggPT0gMHhGRikKLQl7Ci0gICAgICAgICBpZiAocF9pZF9zdHJpbmdbMF0gJiBCSVQoNSkpCi0gICAgICAgICAgICBtYXRjaCA9IDc7Ci0gICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRjaCA9IE1BWF9TQ1NJX1RBUi0xOwogCX0KLSAgICAgIH0KIAorCWlmIChwX2lkX3N0cmluZ1swXSAmIEJJVCg1KSkKKwkJaSA9IDg7CisJZWxzZQorCQlpID0gTUFYX1NDU0lfVEFSOwogCisJaWYgKCgocF9pZF9zdHJpbmdbMF0gJiAweDA2KSA9PSAweDAyKQorCSAgICB8fCAoKHBfaWRfc3RyaW5nWzBdICYgMHgwNikgPT0gMHgwNCkpCisJCW1hdGNoID0gcF9pZF9zdHJpbmdbMV0gJiAodW5zaWduZWQgY2hhcikweDFGOworCWVsc2UKKwkJbWF0Y2ggPSA3OwogCi0gICBpZiAocF9pZF9zdHJpbmdbMF0gJiBCSVQoNykpCi0gICAgICB7Ci0gICAgICByZXR1cm4oQ0xSX1BSSU9SSVRZKTsKLSAgICAgIH0KKwl3aGlsZSAoaSA+IDApIHsKKwkJaS0tOwogCisJCWlmIChGUFRfc2NhbUluZm9bbWF0Y2hdLnN0YXRlID09IElEX1VOVVNFRCkgeworCQkJZm9yIChrID0gMDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsrKykgeworCQkJCUZQVF9zY2FtSW5mb1ttYXRjaF0uaWRfc3RyaW5nW2tdID0KKwkJCQkgICAgcF9pZF9zdHJpbmdba107CisJCQl9CiAKLSAgIGlmIChwX2lkX3N0cmluZ1swXSAmIEJJVCg1KSkKLSAgICAgIGkgPSA4OwotICAgZWxzZQotICAgICAgaSA9IE1BWF9TQ1NJX1RBUjsKKwkJCUZQVF9zY2FtSW5mb1ttYXRjaF0uc3RhdGUgPSBJRF9BU1NJR05FRDsKIAotICAgaWYgKCgocF9pZF9zdHJpbmdbMF0gJiAweDA2KSA9PSAweDAyKSB8fCAoKHBfaWRfc3RyaW5nWzBdICYgMHgwNikgPT0gMHgwNCkpCi0gICAgICBtYXRjaCA9IHBfaWRfc3RyaW5nWzFdICYgKFVDSEFSKSAweDFGOwotICAgZWxzZQotICAgICAgbWF0Y2ggPSA3OworCQkJaWYgKEZQVF9CTF9DYXJkW3BfY2FyZF0ucE52UmFtSW5mbyA9PSBOVUxMKQorCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZ2xvYmFsRmxhZ3MgfD0KKwkJCQkgICAgRl9VUERBVEVfRUVQUk9NOworCQkJcmV0dXJuIG1hdGNoOwogCi0gICB3aGlsZSAoaSA+IDApCi0gICAgICB7CisJCX0KIAotICAgICAgaS0tOworCQltYXRjaC0tOwogCi0gICAgICBpZiAoRlBUX3NjYW1JbmZvW21hdGNoXS5zdGF0ZSA9PSBJRF9VTkFTU0lHTkVEKQotICAgICAgICAgewotICAgICAgICAgZm9yIChrPTA7IGsgPCBJRF9TVFJJTkdfTEVOR1RIOyBrKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBGUFRfc2NhbUluZm9bbWF0Y2hdLmlkX3N0cmluZ1trXSA9IHBfaWRfc3RyaW5nW2tdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICBGUFRfc2NhbUluZm9bbWF0Y2hdLmlkX3N0cmluZ1swXSB8PSBCSVQoNyk7Ci0gICAgICAgICBGUFRfc2NhbUluZm9bbWF0Y2hdLnN0YXRlID0gSURfQVNTSUdORUQ7Ci0JCQlpZihGUFRfQkxfQ2FyZFtwX2NhcmRdLnBOdlJhbUluZm8gPT0gTlVMTCkKLQkgICAgICAgICBGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9IEZfVVBEQVRFX0VFUFJPTTsKLSAgICAgICAgIHJldHVybihtYXRjaCk7Ci0KLSAgICAgICAgIH0KLQotCi0gICAgICBtYXRjaC0tOwotCi0gICAgICBpZiAobWF0Y2ggPT0gMHhGRikKLQl7Ci0gICAgICAgICBpZiAocF9pZF9zdHJpbmdbMF0gJiBCSVQoNSkpCi0gICAgICAgICAgICBtYXRjaCA9IDc7Ci0gICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRjaCA9IE1BWF9TQ1NJX1RBUi0xOworCQlpZiAobWF0Y2ggPT0gMHhGRikgeworCQkJaWYgKHBfaWRfc3RyaW5nWzBdICYgQklUKDUpKQorCQkJCW1hdGNoID0gNzsKKwkJCWVsc2UKKwkJCQltYXRjaCA9IE1BWF9TQ1NJX1RBUiAtIDE7CisJCX0KIAl9Ci0gICAgICB9CiAKLSAgIHJldHVybihOT19JRF9BVkFJTCk7CisJaWYgKHBfaWRfc3RyaW5nWzBdICYgQklUKDcpKSB7CisJCXJldHVybiBDTFJfUFJJT1JJVFk7CisJfQorCisJaWYgKHBfaWRfc3RyaW5nWzBdICYgQklUKDUpKQorCQlpID0gODsKKwllbHNlCisJCWkgPSBNQVhfU0NTSV9UQVI7CisKKwlpZiAoKChwX2lkX3N0cmluZ1swXSAmIDB4MDYpID09IDB4MDIpCisJICAgIHx8ICgocF9pZF9zdHJpbmdbMF0gJiAweDA2KSA9PSAweDA0KSkKKwkJbWF0Y2ggPSBwX2lkX3N0cmluZ1sxXSAmICh1bnNpZ25lZCBjaGFyKTB4MUY7CisJZWxzZQorCQltYXRjaCA9IDc7CisKKwl3aGlsZSAoaSA+IDApIHsKKworCQlpLS07CisKKwkJaWYgKEZQVF9zY2FtSW5mb1ttYXRjaF0uc3RhdGUgPT0gSURfVU5BU1NJR05FRCkgeworCQkJZm9yIChrID0gMDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsrKykgeworCQkJCUZQVF9zY2FtSW5mb1ttYXRjaF0uaWRfc3RyaW5nW2tdID0KKwkJCQkgICAgcF9pZF9zdHJpbmdba107CisJCQl9CisKKwkJCUZQVF9zY2FtSW5mb1ttYXRjaF0uaWRfc3RyaW5nWzBdIHw9IEJJVCg3KTsKKwkJCUZQVF9zY2FtSW5mb1ttYXRjaF0uc3RhdGUgPSBJRF9BU1NJR05FRDsKKwkJCWlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLnBOdlJhbUluZm8gPT0gTlVMTCkKKwkJCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmdsb2JhbEZsYWdzIHw9CisJCQkJICAgIEZfVVBEQVRFX0VFUFJPTTsKKwkJCXJldHVybiBtYXRjaDsKKworCQl9CisKKwkJbWF0Y2gtLTsKKworCQlpZiAobWF0Y2ggPT0gMHhGRikgeworCQkJaWYgKHBfaWRfc3RyaW5nWzBdICYgQklUKDUpKQorCQkJCW1hdGNoID0gNzsKKwkJCWVsc2UKKwkJCQltYXRjaCA9IE1BWF9TQ1NJX1RBUiAtIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gTk9fSURfQVZBSUw7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogRlBUX3Njc2F2ZGkKQEAgLTcwMTUsNDUgKzY0NDEsNDEgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9zY3NhdmRpKFVDSEFSIHBfY2FyZCwgVUxPTkcgcF9wb3J0KQorc3RhdGljIHZvaWQgRlBUX3Njc2F2ZGkodW5zaWduZWQgY2hhciBwX2NhcmQsIHVuc2lnbmVkIGxvbmcgcF9wb3J0KQogewotICAgVUNIQVIgaSxrLG1heF9pZDsKLSAgIFVTSE9SVCBlZV9kYXRhLHN1bV9kYXRhOworCXVuc2lnbmVkIGNoYXIgaSwgaywgbWF4X2lkOworCXVuc2lnbmVkIHNob3J0IGVlX2RhdGEsIHN1bV9kYXRhOwogCisJc3VtX2RhdGEgPSAweDAwMDA7CiAKLSAgIHN1bV9kYXRhID0gMHgwMDAwOworCWZvciAoaSA9IDE7IGkgPCBFRV9TQ0FNQkFTRSAvIDI7IGkrKykgeworCQlzdW1fZGF0YSArPSBGUFRfdXRpbEVFUmVhZChwX3BvcnQsIGkpOworCX0KIAotICAgZm9yIChpID0gMTsgaSA8IEVFX1NDQU1CQVNFLzI7IGkrKykKLSAgICAgIHsKLSAgICAgIHN1bV9kYXRhICs9IEZQVF91dGlsRUVSZWFkKHBfcG9ydCwgaSk7Ci0gICAgICB9CisJRlBUX3V0aWxFRVdyaXRlT25PZmYocF9wb3J0LCAxKTsJLyogRW5hYmxlIHdyaXRlIGFjY2VzcyB0byB0aGUgRUVQUk9NICovCiAKKwlpZiAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwpICYgTkFSUk9XX1NDU0lfQ0FSRCkKKwkJbWF4X2lkID0gMHgwODsKIAotICAgRlBUX3V0aWxFRVdyaXRlT25PZmYocF9wb3J0LDEpOyAgIC8qIEVuYWJsZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIEVFUFJPTSAqLworCWVsc2UKKwkJbWF4X2lkID0gMHgxMDsKIAotICAgaWYgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCkgJiBOQVJST1dfU0NTSV9DQVJEKQotICAgICAgbWF4X2lkID0gMHgwODsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2lkOyBpKyspIHsKIAotICAgZWxzZQotICAgICAgbWF4X2lkID0gMHgxMDsKKwkJZm9yIChrID0gMDsgayA8IElEX1NUUklOR19MRU5HVEg7IGsgKz0gMikgeworCQkJZWVfZGF0YSA9IEZQVF9zY2FtSW5mb1tpXS5pZF9zdHJpbmdbayArIDFdOworCQkJZWVfZGF0YSA8PD0gODsKKwkJCWVlX2RhdGEgfD0gRlBUX3NjYW1JbmZvW2ldLmlkX3N0cmluZ1trXTsKKwkJCXN1bV9kYXRhICs9IGVlX2RhdGE7CisJCQlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCBlZV9kYXRhLAorCQkJCQkodW5zaWduZWQgc2hvcnQpKChFRV9TQ0FNQkFTRSAvIDIpICsKKwkJCQkJCQkgKHVuc2lnbmVkIHNob3J0KShpICoKKwkJCQkJCQkJCSAgKCh1bnNpZ25lZCBzaG9ydClJRF9TVFJJTkdfTEVOR1RIIC8gMikpICsgKHVuc2lnbmVkIHNob3J0KShrIC8gMikpKTsKKwkJfQorCX0KIAotICAgZm9yIChpPTA7IGkgPCBtYXhfaWQ7IGkrKykKLSAgICAgIHsKLQotICAgICAgZm9yIChrPTA7IGsgPCBJRF9TVFJJTkdfTEVOR1RIOyBrKz0yKQotICAgICAgICAgewotICAgICAgICAgZWVfZGF0YSA9IEZQVF9zY2FtSW5mb1tpXS5pZF9zdHJpbmdbaysxXTsKLSAgICAgICAgIGVlX2RhdGEgPDw9IDg7Ci0gICAgICAgICBlZV9kYXRhIHw9IEZQVF9zY2FtSW5mb1tpXS5pZF9zdHJpbmdba107Ci0gICAgICAgICBzdW1fZGF0YSArPSBlZV9kYXRhOwotICAgICAgICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgZWVfZGF0YSwgKFVTSE9SVCkoKEVFX1NDQU1CQVNFLzIpICsKLSAgICAgICAgICAgIChVU0hPUlQpKGkqKChVU0hPUlQpSURfU1RSSU5HX0xFTkdUSC8yKSkgKyAoVVNIT1JUKShrLzIpKSk7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0KLQotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgc3VtX2RhdGEsIEVFUFJPTV9DSEVDS19TVU0vMik7Ci0gICBGUFRfdXRpbEVFV3JpdGVPbk9mZihwX3BvcnQsMCk7ICAgLyogVHVybiBvZmYgd3JpdGUgYWNjZXNzICovCisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgc3VtX2RhdGEsIEVFUFJPTV9DSEVDS19TVU0gLyAyKTsKKwlGUFRfdXRpbEVFV3JpdGVPbk9mZihwX3BvcnQsIDApOwkvKiBUdXJuIG9mZiB3cml0ZSBhY2Nlc3MgKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcwNjQsNDggKzY0ODYsNDcgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9YYm93SW5pdChVTE9ORyBwb3J0LCBVQ0hBUiBTY2FtRmxnKQorc3RhdGljIHZvaWQgRlBUX1hib3dJbml0KHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgY2hhciBTY2FtRmxnKQogewotVUNIQVIgaTsKKwl1bnNpZ25lZCBjaGFyIGk7CiAKLQlpID0gUkRfSEFSUE9PTihwb3J0K2hwX3BhZ2VfY3RybCk7Ci0JV1JfSEFSUE9PTihwb3J0K2hwX3BhZ2VfY3RybCwgKFVDSEFSKSAoaSB8IEdfSU5UX0RJU0FCTEUpKTsKKwlpID0gUkRfSEFSUE9PTihwb3J0ICsgaHBfcGFnZV9jdHJsKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9wYWdlX2N0cmwsICh1bnNpZ25lZCBjaGFyKShpIHwgR19JTlRfRElTQUJMRSkpOwogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfc2NzaXJlc2V0LDB4MDApOwotICAgV1JfSEFSUE9PTihwb3J0K2hwX3BvcnRjdHJsXzEsSE9TVF9NT0RFOCk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXJlc2V0LCAweDAwKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9wb3J0Y3RybF8xLCBIT1NUX01PREU4KTsKIAotICAgV1JfSEFSUE9PTihwb3J0K2hwX3Njc2lyZXNldCwoRE1BX1JFU0VUIHwgSFBTQ1NJX1JFU0VUIHwgUFJPR19SRVNFVCB8IFwKLQkJCQkgRklGT19DTFIpKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9zY3NpcmVzZXQsIChETUFfUkVTRVQgfCBIUFNDU0lfUkVTRVQgfCBQUk9HX1JFU0VUIHwKKwkJCQkJIEZJRk9fQ0xSKSk7CiAKLSAgIFdSX0hBUlBPT04ocG9ydCtocF9zY3NpcmVzZXQsU0NTSV9JTkkpOworCVdSX0hBUlBPT04ocG9ydCArIGhwX3Njc2lyZXNldCwgU0NTSV9JTkkpOwogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfY2xrY3RybF8wLENMS0NUUkxfREVGQVVMVCk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfY2xrY3RybF8wLCBDTEtDVFJMX0RFRkFVTFQpOwogCi0gICBXUl9IQVJQT09OKHBvcnQraHBfc2NzaXNpZywweDAwKTsgICAgICAgICAvKiAgQ2xlYXIgYW55IHNpZ25hbHMgd2UgbWlnaHQgKi8KLSAgIFdSX0hBUlBPT04ocG9ydCtocF9zY3NpY3RybF8wLEVOQV9TQ0FNX1NFTCk7CisJV1JfSEFSUE9PTihwb3J0ICsgaHBfc2NzaXNpZywgMHgwMCk7CS8qICBDbGVhciBhbnkgc2lnbmFscyB3ZSBtaWdodCAqLworCVdSX0hBUlBPT04ocG9ydCArIGhwX3Njc2ljdHJsXzAsIEVOQV9TQ0FNX1NFTCk7CiAKLSAgIFdSV19IQVJQT09OKChwb3J0K2hwX2ludHN0YXQpLCBDTFJfQUxMX0lOVCk7CisJV1JXX0hBUlBPT04oKHBvcnQgKyBocF9pbnRzdGF0KSwgQ0xSX0FMTF9JTlQpOwogCi0gICBGUFRfZGVmYXVsdF9pbnRlbmEgPSBSRVNFVCB8IFJTRUwgfCBQUk9HX0hMVCB8IFRJTUVPVVQgfAotCQkgICAgQlVTX0ZSRUUgfCBYRkVSX0NOVF8wIHwgQVVUT19JTlQ7CisJRlBUX2RlZmF1bHRfaW50ZW5hID0gUkVTRVQgfCBSU0VMIHwgUFJPR19ITFQgfCBUSU1FT1VUIHwKKwkgICAgQlVTX0ZSRUUgfCBYRkVSX0NOVF8wIHwgQVVUT19JTlQ7CiAKLSAgIGlmICgoU2NhbUZsZyAmIFNDQU1fRU5BQkxFRCkgJiYgKFNjYW1GbGcgJiBTQ0FNX0xFVkVMMikpCisJaWYgKChTY2FtRmxnICYgU0NBTV9FTkFCTEVEKSAmJiAoU2NhbUZsZyAmIFNDQU1fTEVWRUwyKSkKIAkJRlBUX2RlZmF1bHRfaW50ZW5hIHw9IFNDQU1fU0VMOwogCi0gICBXUldfSEFSUE9PTigocG9ydCtocF9pbnRlbmEpLCBGUFRfZGVmYXVsdF9pbnRlbmEpOworCVdSV19IQVJQT09OKChwb3J0ICsgaHBfaW50ZW5hKSwgRlBUX2RlZmF1bHRfaW50ZW5hKTsKIAotICAgV1JfSEFSUE9PTihwb3J0K2hwX3NlbHRpbWVvdXQsVE9fMjkwbXMpOworCVdSX0hBUlBPT04ocG9ydCArIGhwX3NlbHRpbWVvdXQsIFRPXzI5MG1zKTsKIAotICAgLyogVHVybiBvbiBTQ1NJX01PREU4IGZvciBuYXJyb3cgY2FyZHMgdG8gZml4IHRoZQotICAgICAgc3RyYXBwaW5nIGlzc3VlIHdpdGggdGhlIERVQUwgQ0hBTk5FTCBjYXJkICovCi0gICBpZiAoUkRfSEFSUE9PTihwb3J0K2hwX3BhZ2VfY3RybCkgJiBOQVJST1dfU0NTSV9DQVJEKQotICAgICAgV1JfSEFSUE9PTihwb3J0K2hwX2FkZHN0YXQsU0NTSV9NT0RFOCk7CisJLyogVHVybiBvbiBTQ1NJX01PREU4IGZvciBuYXJyb3cgY2FyZHMgdG8gZml4IHRoZQorCSAgIHN0cmFwcGluZyBpc3N1ZSB3aXRoIHRoZSBEVUFMIENIQU5ORUwgY2FyZCAqLworCWlmIChSRF9IQVJQT09OKHBvcnQgKyBocF9wYWdlX2N0cmwpICYgTkFSUk9XX1NDU0lfQ0FSRCkKKwkJV1JfSEFSUE9PTihwb3J0ICsgaHBfYWRkc3RhdCwgU0NTSV9NT0RFOCk7CiAKLQlXUl9IQVJQT09OKHBvcnQraHBfcGFnZV9jdHJsLCBpKTsKKwlXUl9IQVJQT09OKHBvcnQgKyBocF9wYWdlX2N0cmwsIGkpOwogCiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogRlBUX0J1c01hc3RlckluaXQKQEAgLTcxMTQsMjggKzY1MzUsMjQgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9CdXNNYXN0ZXJJbml0KFVMT05HIHBfcG9ydCkKK3N0YXRpYyB2b2lkIEZQVF9CdXNNYXN0ZXJJbml0KHVuc2lnbmVkIGxvbmcgcF9wb3J0KQogewogCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zeXNfY3RybCwgRFJWUl9SU1QpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfc3lzX2N0cmwsIDB4MDApOwogCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zeXNfY3RybCwgRFJWUl9SU1QpOwotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc3lzX2N0cmwsIDB4MDApOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfaG9zdF9ibGtfY250LCBYRkVSX0JMSzY0KTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfaG9zdF9ibGtfY250LCBYRkVSX0JMSzY0KTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2JtX2N0cmwsIChCTUNUUkxfREVGQVVMVCkpOwogCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCAoU0NTSV9URVJNX0VOQV9IKSk7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2JtX2N0cmwsIChCTUNUUkxfREVGQVVMVCkpOwotCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCAoU0NTSV9URVJNX0VOQV9IKSk7Ci0KLQotICAgUkRfSEFSUE9PTihwX3BvcnQraHBfaW50X3N0YXR1cyk7ICAgICAgICAvKkNsZWFyIGludGVycnVwdHMuICovCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9pbnRfbWFzaywgKElOVF9DTURfQ09NUEwgfCBTQ1NJX0lOVEVSUlVQVCkpOwotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfcGFnZV9jdHJsLCAoUkRfSEFSUE9PTihwX3BvcnQraHBfcGFnZV9jdHJsKSAmCi0gICAgICB+U0NBVFRFUl9FTikpOworCVJEX0hBUlBPT04ocF9wb3J0ICsgaHBfaW50X3N0YXR1cyk7CS8qQ2xlYXIgaW50ZXJydXB0cy4gKi8KKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2ludF9tYXNrLCAoSU5UX0NNRF9DT01QTCB8IFNDU0lfSU5URVJSVVBUKSk7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwsIChSRF9IQVJQT09OKHBfcG9ydCArIGhwX3BhZ2VfY3RybCkgJgorCQkJCQkgICB+U0NBVFRFUl9FTikpOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEZQVF9EaWFnRUVQUk9NCkBAIC03MTQ1LDE1OCArNjU2MiwxNTMgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF9EaWFnRUVQUk9NKFVMT05HIHBfcG9ydCkKK3N0YXRpYyB2b2lkIEZQVF9EaWFnRUVQUk9NKHVuc2lnbmVkIGxvbmcgcF9wb3J0KQogewotICAgVVNIT1JUIGluZGV4LHRlbXAsbWF4X3dkX2NudDsKKwl1bnNpZ25lZCBzaG9ydCBpbmRleCwgdGVtcCwgbWF4X3dkX2NudDsKIAotICAgaWYgKFJEX0hBUlBPT04ocF9wb3J0K2hwX3BhZ2VfY3RybCkgJiBOQVJST1dfU0NTSV9DQVJEKQotICAgICAgbWF4X3dkX2NudCA9IEVFUFJPTV9XRF9DTlQ7Ci0gICBlbHNlCi0gICAgICBtYXhfd2RfY250ID0gRUVQUk9NX1dEX0NOVCAqIDI7CisJaWYgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfcGFnZV9jdHJsKSAmIE5BUlJPV19TQ1NJX0NBUkQpCisJCW1heF93ZF9jbnQgPSBFRVBST01fV0RfQ05UOworCWVsc2UKKwkJbWF4X3dkX2NudCA9IEVFUFJPTV9XRF9DTlQgKiAyOwogCi0gICB0ZW1wID0gRlBUX3V0aWxFRVJlYWQocF9wb3J0LCBGV19TSUdOQVRVUkUvMik7CisJdGVtcCA9IEZQVF91dGlsRUVSZWFkKHBfcG9ydCwgRldfU0lHTkFUVVJFIC8gMik7CiAKLSAgIGlmICh0ZW1wID09IDB4NDY0MSkgeworCWlmICh0ZW1wID09IDB4NDY0MSkgewogCi0gICAgICBmb3IgKGluZGV4ID0gMjsgaW5kZXggPCBtYXhfd2RfY250OyBpbmRleCsrKSB7CisJCWZvciAoaW5kZXggPSAyOyBpbmRleCA8IG1heF93ZF9jbnQ7IGluZGV4KyspIHsKIAotICAgICAgICAgdGVtcCArPSBGUFRfdXRpbEVFUmVhZChwX3BvcnQsIGluZGV4KTsKKwkJCXRlbXAgKz0gRlBUX3V0aWxFRVJlYWQocF9wb3J0LCBpbmRleCk7CiAKLSAgICAgICAgIH0KKwkJfQogCi0gICAgICBpZiAodGVtcCA9PSBGUFRfdXRpbEVFUmVhZChwX3BvcnQsIEVFUFJPTV9DSEVDS19TVU0vMikpIHsKKwkJaWYgKHRlbXAgPT0gRlBUX3V0aWxFRVJlYWQocF9wb3J0LCBFRVBST01fQ0hFQ0tfU1VNIC8gMikpIHsKIAotICAgICAgICAgcmV0dXJuOyAgICAgICAgICAvKkVFUFJPTSBpcyBPa2F5IHNvIHJldHVybiBub3chICovCi0gICAgICAgICB9Ci0gICAgICB9CisJCQlyZXR1cm47CS8qRUVQUk9NIGlzIE9rYXkgc28gcmV0dXJuIG5vdyEgKi8KKwkJfQorCX0KIAorCUZQVF91dGlsRUVXcml0ZU9uT2ZmKHBfcG9ydCwgKHVuc2lnbmVkIGNoYXIpMSk7CiAKLSAgIEZQVF91dGlsRUVXcml0ZU9uT2ZmKHBfcG9ydCwoVUNIQVIpMSk7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbWF4X3dkX2NudDsgaW5kZXgrKykgewogCi0gICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtYXhfd2RfY250OyBpbmRleCsrKSB7CisJCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MDAwMCwgaW5kZXgpOworCX0KIAotICAgICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgwMDAwLCBpbmRleCk7Ci0gICAgICB9CisJdGVtcCA9IDA7CiAKLSAgIHRlbXAgPSAwOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NDY0MSwgRldfU0lHTkFUVVJFIC8gMik7CisJdGVtcCArPSAweDQ2NDE7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgzOTIwLCBNT0RFTF9OVU1CXzAgLyAyKTsKKwl0ZW1wICs9IDB4MzkyMDsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDMwMzMsIE1PREVMX05VTUJfMiAvIDIpOworCXRlbXAgKz0gMHgzMDMzOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MjAyMCwgTU9ERUxfTlVNQl80IC8gMik7CisJdGVtcCArPSAweDIwMjA7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg3MEQzLCBTWVNURU1fQ09ORklHIC8gMik7CisJdGVtcCArPSAweDcwRDM7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgwMDEwLCBCSU9TX0NPTkZJRyAvIDIpOworCXRlbXAgKz0gMHgwMDEwOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MDAwMywgU0NBTV9DT05GSUcgLyAyKTsKKwl0ZW1wICs9IDB4MDAwMzsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDAwMDcsIEFEQVBURVJfU0NTSV9JRCAvIDIpOworCXRlbXAgKz0gMHgwMDA3OwogCi0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDQ2NDEsIEZXX1NJR05BVFVSRS8yKTsKLSAgIHRlbXAgKz0gMHg0NjQxOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgzOTIwLCBNT0RFTF9OVU1CXzAvMik7Ci0gICB0ZW1wICs9IDB4MzkyMDsKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MzAzMywgTU9ERUxfTlVNQl8yLzIpOwotICAgdGVtcCArPSAweDMwMzM7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDIwMjAsIE1PREVMX05VTUJfNC8yKTsKLSAgIHRlbXAgKz0gMHgyMDIwOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg3MEQzLCBTWVNURU1fQ09ORklHLzIpOwotICAgdGVtcCArPSAweDcwRDM7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDAwMTAsIEJJT1NfQ09ORklHLzIpOwotICAgdGVtcCArPSAweDAwMTA7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDAwMDMsIFNDQU1fQ09ORklHLzIpOwotICAgdGVtcCArPSAweDAwMDM7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDAwMDcsIEFEQVBURVJfU0NTSV9JRC8yKTsKLSAgIHRlbXAgKz0gMHgwMDA3OworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MDAwMCwgSUdOT1JFX0JfU0NBTiAvIDIpOworCXRlbXAgKz0gMHgwMDAwOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MDAwMCwgU0VORF9TVEFSVF9FTkEgLyAyKTsKKwl0ZW1wICs9IDB4MDAwMDsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDAwMDAsIERFVklDRV9FTkFCTEUgLyAyKTsKKwl0ZW1wICs9IDB4MDAwMDsKIAotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgwMDAwLCBJR05PUkVfQl9TQ0FOLzIpOwotICAgdGVtcCArPSAweDAwMDA7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDAwMDAsIFNFTkRfU1RBUlRfRU5BLzIpOwotICAgdGVtcCArPSAweDAwMDA7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDAwMDAsIERFVklDRV9FTkFCTEUvMik7Ci0gICB0ZW1wICs9IDB4MDAwMDsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDQyNDIsIFNZTkNfUkFURV9UQkwwMSAvIDIpOworCXRlbXAgKz0gMHg0MjQyOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NDI0MiwgU1lOQ19SQVRFX1RCTDIzIC8gMik7CisJdGVtcCArPSAweDQyNDI7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg0MjQyLCBTWU5DX1JBVEVfVEJMNDUgLyAyKTsKKwl0ZW1wICs9IDB4NDI0MjsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDQyNDIsIFNZTkNfUkFURV9UQkw2NyAvIDIpOworCXRlbXAgKz0gMHg0MjQyOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NDI0MiwgU1lOQ19SQVRFX1RCTDg5IC8gMik7CisJdGVtcCArPSAweDQyNDI7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg0MjQyLCBTWU5DX1JBVEVfVEJMYWIgLyAyKTsKKwl0ZW1wICs9IDB4NDI0MjsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDQyNDIsIFNZTkNfUkFURV9UQkxjZCAvIDIpOworCXRlbXAgKz0gMHg0MjQyOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NDI0MiwgU1lOQ19SQVRFX1RCTGVmIC8gMik7CisJdGVtcCArPSAweDQyNDI7CiAKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NDI0MiwgU1lOQ19SQVRFX1RCTDAxLzIpOwotICAgdGVtcCArPSAweDQyNDI7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDQyNDIsIFNZTkNfUkFURV9UQkwyMy8yKTsKLSAgIHRlbXAgKz0gMHg0MjQyOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg0MjQyLCBTWU5DX1JBVEVfVEJMNDUvMik7Ci0gICB0ZW1wICs9IDB4NDI0MjsKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NDI0MiwgU1lOQ19SQVRFX1RCTDY3LzIpOwotICAgdGVtcCArPSAweDQyNDI7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDQyNDIsIFNZTkNfUkFURV9UQkw4OS8yKTsKLSAgIHRlbXAgKz0gMHg0MjQyOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg0MjQyLCBTWU5DX1JBVEVfVEJMYWIvMik7Ci0gICB0ZW1wICs9IDB4NDI0MjsKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NDI0MiwgU1lOQ19SQVRFX1RCTGNkLzIpOwotICAgdGVtcCArPSAweDQyNDI7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDQyNDIsIFNZTkNfUkFURV9UQkxlZi8yKTsKLSAgIHRlbXAgKz0gMHg0MjQyOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NkM0NiwgNjQgLyAyKTsJLypQUk9EVUNUIElEICovCisJdGVtcCArPSAweDZDNDY7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg3MzYxLCA2NiAvIDIpOwkvKiBGbGFzaFBvaW50IExUICAgKi8KKwl0ZW1wICs9IDB4NzM2MTsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDUwNjgsIDY4IC8gMik7CisJdGVtcCArPSAweDUwNjg7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg2OTZGLCA3MCAvIDIpOworCXRlbXAgKz0gMHg2OTZGOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NzQ2RSwgNzIgLyAyKTsKKwl0ZW1wICs9IDB4NzQ2RTsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDRDMjAsIDc0IC8gMik7CisJdGVtcCArPSAweDRDMjA7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgyMDU0LCA3NiAvIDIpOworCXRlbXAgKz0gMHgyMDU0OworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MjAyMCwgNzggLyAyKTsKKwl0ZW1wICs9IDB4MjAyMDsKIAorCWluZGV4ID0gKChFRV9TQ0FNQkFTRSAvIDIpICsgKDcgKiAxNikpOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsICgweDA3MDAgKyBUWVBFX0NPREUwKSwgaW5kZXgpOworCXRlbXAgKz0gKDB4MDcwMCArIFRZUEVfQ09ERTApOworCWluZGV4Kys7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg1NTQyLCBpbmRleCk7CS8qVmVuZG9yIElEIGNvZGUgKi8KKwl0ZW1wICs9IDB4NTU0MjsJCS8qIEJVU0xPR0lDICAgICAgKi8KKwlpbmRleCsrOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NEM1MywgaW5kZXgpOworCXRlbXAgKz0gMHg0QzUzOworCWluZGV4Kys7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg0NzRGLCBpbmRleCk7CisJdGVtcCArPSAweDQ3NEY7CisJaW5kZXgrKzsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDQzNDksIGluZGV4KTsKKwl0ZW1wICs9IDB4NDM0OTsKKwlpbmRleCsrOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NTQ0MiwgaW5kZXgpOwkvKlZlbmRvciB1bmlxdWUgY29kZSAqLworCXRlbXAgKz0gMHg1NDQyOwkJLyogQlQtIDkzMCAgICAgICAgICAgKi8KKwlpbmRleCsrOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MjAyRCwgaW5kZXgpOworCXRlbXAgKz0gMHgyMDJEOworCWluZGV4Kys7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgzMzM5LCBpbmRleCk7CisJdGVtcCArPSAweDMzMzk7CisJaW5kZXgrKzsJCS8qU2VyaWFsICMgICAgICAgICAgKi8KKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDIwMzAsIGluZGV4KTsJLyogMDEyMzQ1NjcgICAgICAgICAqLworCXRlbXAgKz0gMHgyMDMwOworCWluZGV4Kys7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg1NDUzLCBpbmRleCk7CisJdGVtcCArPSAweDU0NTM7CisJaW5kZXgrKzsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDU2NDUsIGluZGV4KTsKKwl0ZW1wICs9IDB4NTY0NTsKKwlpbmRleCsrOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MjA0NSwgaW5kZXgpOworCXRlbXAgKz0gMHgyMDQ1OworCWluZGV4Kys7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgyMDJGLCBpbmRleCk7CisJdGVtcCArPSAweDIwMkY7CisJaW5kZXgrKzsKKwlGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDRGNEEsIGluZGV4KTsKKwl0ZW1wICs9IDB4NEY0QTsKKwlpbmRleCsrOworCUZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MjA0RSwgaW5kZXgpOworCXRlbXAgKz0gMHgyMDRFOworCWluZGV4Kys7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgzNTM5LCBpbmRleCk7CisJdGVtcCArPSAweDM1Mzk7CiAKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NkM0NiwgNjQvMik7ICAvKlBST0RVQ1QgSUQgKi8KLSAgIHRlbXAgKz0gMHg2QzQ2OwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg3MzYxLCA2Ni8yKTsgIC8qIEZsYXNoUG9pbnQgTFQgICAqLwotICAgdGVtcCArPSAweDczNjE7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDUwNjgsIDY4LzIpOwotICAgdGVtcCArPSAweDUwNjg7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDY5NkYsIDcwLzIpOwotICAgdGVtcCArPSAweDY5NkY7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDc0NkUsIDcyLzIpOwotICAgdGVtcCArPSAweDc0NkU7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDRDMjAsIDc0LzIpOwotICAgdGVtcCArPSAweDRDMjA7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDIwNTQsIDc2LzIpOwotICAgdGVtcCArPSAweDIwNTQ7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDIwMjAsIDc4LzIpOwotICAgdGVtcCArPSAweDIwMjA7CisJRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgdGVtcCwgRUVQUk9NX0NIRUNLX1NVTSAvIDIpOwogCi0gICBpbmRleCA9ICgoRUVfU0NBTUJBU0UvMikrKDcqMTYpKTsKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsICgweDA3MDArVFlQRV9DT0RFMCksIGluZGV4KTsKLSAgIHRlbXAgKz0gKDB4MDcwMCtUWVBFX0NPREUwKTsKLSAgIGluZGV4Kys7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDU1NDIsIGluZGV4KTsgICAgICAgICAgICAvKlZlbmRvciBJRCBjb2RlICovCi0gICB0ZW1wICs9IDB4NTU0MjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJVU0xPR0lDICAgICAgKi8KLSAgIGluZGV4Kys7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDRDNTMsIGluZGV4KTsKLSAgIHRlbXAgKz0gMHg0QzUzOwotICAgaW5kZXgrKzsKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4NDc0RiwgaW5kZXgpOwotICAgdGVtcCArPSAweDQ3NEY7Ci0gICBpbmRleCsrOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg0MzQ5LCBpbmRleCk7Ci0gICB0ZW1wICs9IDB4NDM0OTsKLSAgIGluZGV4Kys7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDU0NDIsIGluZGV4KTsgICAgICAgICAgICAvKlZlbmRvciB1bmlxdWUgY29kZSAqLwotICAgdGVtcCArPSAweDU0NDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJULSA5MzAgICAgICAgICAgICovCi0gICBpbmRleCsrOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgyMDJELCBpbmRleCk7Ci0gICB0ZW1wICs9IDB4MjAyRDsKLSAgIGluZGV4Kys7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDMzMzksIGluZGV4KTsKLSAgIHRlbXAgKz0gMHgzMzM5OwotICAgaW5kZXgrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNlcmlhbCAjICAgICAgICAgICovCi0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDIwMzAsIGluZGV4KTsgICAgICAgICAgICAgLyogMDEyMzQ1NjcgICAgICAgICAqLwotICAgdGVtcCArPSAweDIwMzA7Ci0gICBpbmRleCsrOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHg1NDUzLCBpbmRleCk7Ci0gICB0ZW1wICs9IDB4NTQ1MzsKLSAgIGluZGV4Kys7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDU2NDUsIGluZGV4KTsKLSAgIHRlbXAgKz0gMHg1NjQ1OwotICAgaW5kZXgrKzsKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MjA0NSwgaW5kZXgpOwotICAgdGVtcCArPSAweDIwNDU7Ci0gICBpbmRleCsrOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgyMDJGLCBpbmRleCk7Ci0gICB0ZW1wICs9IDB4MjAyRjsKLSAgIGluZGV4Kys7Ci0gICBGUFRfdXRpbEVFV3JpdGUocF9wb3J0LCAweDRGNEEsIGluZGV4KTsKLSAgIHRlbXAgKz0gMHg0RjRBOwotICAgaW5kZXgrKzsKLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIDB4MjA0RSwgaW5kZXgpOwotICAgdGVtcCArPSAweDIwNEU7Ci0gICBpbmRleCsrOwotICAgRlBUX3V0aWxFRVdyaXRlKHBfcG9ydCwgMHgzNTM5LCBpbmRleCk7Ci0gICB0ZW1wICs9IDB4MzUzOTsKLQotCi0KLSAgIEZQVF91dGlsRUVXcml0ZShwX3BvcnQsIHRlbXAsIEVFUFJPTV9DSEVDS19TVU0vMik7Ci0KLSAgIEZQVF91dGlsRUVXcml0ZU9uT2ZmKHBfcG9ydCwoVUNIQVIpMCk7CisJRlBUX3V0aWxFRVdyaXRlT25PZmYocF9wb3J0LCAodW5zaWduZWQgY2hhcikwKTsKIAogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IFF1ZXVlIFNlYXJjaCBTZWxlY3QKQEAgLTczMDUsMTAzICs2NzE3LDEyNyBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3F1ZXVlU2VhcmNoU2VsZWN0KFBTQ0NCY2FyZCBwQ3VyckNhcmQsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9xdWV1ZVNlYXJjaFNlbGVjdChzdHJ1Y3Qgc2NjYl9jYXJkICpwQ3VyckNhcmQsCisJCQkJICB1bnNpZ25lZCBjaGFyIHBfY2FyZCkKIHsKLSAgIFVDSEFSIHNjYW5fcHRyLCBsdW47Ci0gICBQU0NDQk1ncl90YXJfaW5mbyBjdXJyVGFyX0luZm87Ci0JUFNDQ0IgcE9sZFNjY2I7CisJdW5zaWduZWQgY2hhciBzY2FuX3B0ciwgbHVuOworCXN0cnVjdCBzY2NiX21ncl90YXJfaW5mbyAqY3VyclRhcl9JbmZvOworCXN0cnVjdCBzY2NiICpwT2xkU2NjYjsKIAotICAgc2Nhbl9wdHIgPSBwQ3VyckNhcmQtPnNjYW5JbmRleDsKLQlkbyAKLQl7CisJc2Nhbl9wdHIgPSBwQ3VyckNhcmQtPnNjYW5JbmRleDsKKwlkbyB7CiAJCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3NjYW5fcHRyXTsKLQkJaWYoKHBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX0NPTkxVTl9JTykgJiYgCi0JCQkoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9IFRBR19RX1RSWUlORykpCi0JCXsKLQkJCWlmIChjdXJyVGFyX0luZm8tPlRhclNlbFFfQ250ICE9IDApCi0JCQl7CisJCWlmICgocEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgorCQkgICAgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPQorCQkgICAgIFRBR19RX1RSWUlORykpIHsKKwkJCWlmIChjdXJyVGFyX0luZm8tPlRhclNlbFFfQ250ICE9IDApIHsKIAogCQkJCXNjYW5fcHRyKys7CiAJCQkJaWYgKHNjYW5fcHRyID09IE1BWF9TQ1NJX1RBUikKIAkJCQkJc2Nhbl9wdHIgPSAwOwotCQkJCQotCQkJCWZvcihsdW49MDsgbHVuIDwgTUFYX0xVTjsgbHVuKyspCi0JCQkJewotCQkJCQlpZihjdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbbHVuXSA9PSAwKQotCQkJCQl7CiAKLQkJCQkJCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgPSBjdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZDsKKwkJCQlmb3IgKGx1biA9IDA7IGx1biA8IE1BWF9MVU47IGx1bisrKSB7CisJCQkJCWlmIChjdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbbHVuXSA9PSAwKSB7CisKKwkJCQkJCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgPQorCQkJCQkJICAgIGN1cnJUYXJfSW5mby0+VGFyU2VsUV9IZWFkOwogCQkJCQkJcE9sZFNjY2IgPSBOVUxMOwogCi0JCQkJCQl3aGlsZSgocEN1cnJDYXJkLT5jdXJyZW50U0NDQiAhPSBOVUxMKSAmJgotCQkJCQkJCQkgKGx1biAhPSBwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLT5MdW4pKQotCQkJCQkJewotCQkJCQkJCXBPbGRTY2NiID0gcEN1cnJDYXJkLT5jdXJyZW50U0NDQjsKLQkJCQkJCQlwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCID0gKFBTQ0NCKShwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCKS0+Ci0JCQkJCQkJCQkJCQkJCQkJCVNjY2JfZm9yd2FyZGxpbms7CisJCQkJCQl3aGlsZSAoKHBDdXJyQ2FyZC0+CisJCQkJCQkJY3VycmVudFNDQ0IgIT0gTlVMTCkKKwkJCQkJCSAgICAgICAmJiAobHVuICE9CisJCQkJCQkJICAgcEN1cnJDYXJkLT4KKwkJCQkJCQkgICBjdXJyZW50U0NDQi0+THVuKSkgeworCQkJCQkJCXBPbGRTY2NiID0KKwkJCQkJCQkgICAgcEN1cnJDYXJkLT4KKwkJCQkJCQkgICAgY3VycmVudFNDQ0I7CisJCQkJCQkJcEN1cnJDYXJkLT5jdXJyZW50U0NDQiA9CisJCQkJCQkJICAgIChzdHJ1Y3Qgc2NjYgorCQkJCQkJCSAgICAgKikocEN1cnJDYXJkLT4KKwkJCQkJCQkJY3VycmVudFNDQ0IpLT4KKwkJCQkJCQkgICAgU2NjYl9mb3J3YXJkbGluazsKIAkJCQkJCX0KLQkJCQkJCWlmKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgPT0gTlVMTCkKKwkJCQkJCWlmIChwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCID09CisJCQkJCQkgICAgTlVMTCkKIAkJCQkJCQljb250aW51ZTsKLQkJCQkJCWlmKHBPbGRTY2NiICE9IE5VTEwpCi0JCQkJCQl7Ci0JCQkJCQkJcE9sZFNjY2ItPlNjY2JfZm9yd2FyZGxpbmsgPSAoUFNDQ0IpKHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IpLT4KLQkJCQkJCQkJCQkJCQkJCQkJU2NjYl9mb3J3YXJkbGluazsKLQkJCQkJCQlwT2xkU2NjYi0+U2NjYl9iYWNrbGluayA9IChQU0NDQikocEN1cnJDYXJkLT5jdXJyZW50U0NDQiktPgotCQkJCQkJCQkJCQkJCQkJCQlTY2NiX2JhY2tsaW5rOwotCQkJCQkJCWN1cnJUYXJfSW5mby0+VGFyU2VsUV9DbnQtLTsKLQkJCQkJCX0KLQkJCQkJCWVsc2UKLQkJCQkJCXsKLQkJCQkJCQljdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZCA9IChQU0NDQikocEN1cnJDYXJkLT5jdXJyZW50U0NDQiktPlNjY2JfZm9yd2FyZGxpbms7Ci0JCQkJCQotCQkJCQkJCWlmIChjdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZCA9PSBOVUxMKQotCQkJCQkJCXsKLQkJCQkJCQkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX1RhaWwgPSBOVUxMOwotCQkJCQkJCQljdXJyVGFyX0luZm8tPlRhclNlbFFfQ250ID0gMDsKLQkJCQkJCQl9Ci0JCQkJCQkJZWxzZQotCQkJCQkJCXsKLQkJCQkJCQkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX0NudC0tOwotCQkJCQkJCQljdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZC0+U2NjYl9iYWNrbGluayA9IChQU0NDQilOVUxMOworCQkJCQkJaWYgKHBPbGRTY2NiICE9IE5VTEwpIHsKKwkJCQkJCQlwT2xkU2NjYi0+CisJCQkJCQkJICAgIFNjY2JfZm9yd2FyZGxpbmsgPQorCQkJCQkJCSAgICAoc3RydWN0IHNjY2IKKwkJCQkJCQkgICAgICopKHBDdXJyQ2FyZC0+CisJCQkJCQkJCWN1cnJlbnRTQ0NCKS0+CisJCQkJCQkJICAgIFNjY2JfZm9yd2FyZGxpbms7CisJCQkJCQkJcE9sZFNjY2ItPgorCQkJCQkJCSAgICBTY2NiX2JhY2tsaW5rID0KKwkJCQkJCQkgICAgKHN0cnVjdCBzY2NiCisJCQkJCQkJICAgICAqKShwQ3VyckNhcmQtPgorCQkJCQkJCQljdXJyZW50U0NDQiktPgorCQkJCQkJCSAgICBTY2NiX2JhY2tsaW5rOworCQkJCQkJCWN1cnJUYXJfSW5mby0+CisJCQkJCQkJICAgIFRhclNlbFFfQ250LS07CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWN1cnJUYXJfSW5mby0+CisJCQkJCQkJICAgIFRhclNlbFFfSGVhZCA9CisJCQkJCQkJICAgIChzdHJ1Y3Qgc2NjYgorCQkJCQkJCSAgICAgKikocEN1cnJDYXJkLT4KKwkJCQkJCQkJY3VycmVudFNDQ0IpLT4KKwkJCQkJCQkgICAgU2NjYl9mb3J3YXJkbGluazsKKworCQkJCQkJCWlmIChjdXJyVGFyX0luZm8tPgorCQkJCQkJCSAgICBUYXJTZWxRX0hlYWQgPT0KKwkJCQkJCQkgICAgTlVMTCkgeworCQkJCQkJCQljdXJyVGFyX0luZm8tPgorCQkJCQkJCQkgICAgVGFyU2VsUV9UYWlsCisJCQkJCQkJCSAgICA9IE5VTEw7CisJCQkJCQkJCWN1cnJUYXJfSW5mby0+CisJCQkJCQkJCSAgICBUYXJTZWxRX0NudAorCQkJCQkJCQkgICAgPSAwOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWN1cnJUYXJfSW5mby0+CisJCQkJCQkJCSAgICBUYXJTZWxRX0NudC0tOworCQkJCQkJCQljdXJyVGFyX0luZm8tPgorCQkJCQkJCQkgICAgVGFyU2VsUV9IZWFkLT4KKwkJCQkJCQkJICAgIFNjY2JfYmFja2xpbmsKKwkJCQkJCQkJICAgID0KKwkJCQkJCQkJICAgIChzdHJ1Y3Qgc2NjYgorCQkJCQkJCQkgICAgICopTlVMTDsKIAkJCQkJCQl9CiAJCQkJCQl9Ci0JCQkJCXBDdXJyQ2FyZC0+c2NhbkluZGV4ID0gc2Nhbl9wdHI7CisJCQkJCQlwQ3VyckNhcmQtPnNjYW5JbmRleCA9IHNjYW5fcHRyOwogCi0JCQkJCXBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgfD0gRl9ORVdfU0NDQl9DTUQ7CisJCQkJCQlwQ3VyckNhcmQtPmdsb2JhbEZsYWdzIHw9CisJCQkJCQkgICAgRl9ORVdfU0NDQl9DTUQ7CiAKLQkJCQkJYnJlYWs7CisJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0KIAkJCX0KIAotCQkJZWxzZSAKLQkJCXsKKwkJCWVsc2UgewogCQkJCXNjYW5fcHRyKys7CiAJCQkJaWYgKHNjYW5fcHRyID09IE1BWF9TQ1NJX1RBUikgewogCQkJCQlzY2FuX3B0ciA9IDA7CiAJCQkJfQogCQkJfQogCi0JCX0KLQkJZWxzZQotCQl7CisJCX0gZWxzZSB7CiAJCQlpZiAoKGN1cnJUYXJfSW5mby0+VGFyU2VsUV9DbnQgIT0gMCkgJiYKLQkJCQkoY3VyclRhcl9JbmZvLT5UYXJMVU5CdXN5WzBdID09IDApKQotCQkJeworCQkJICAgIChjdXJyVGFyX0luZm8tPlRhckxVTkJ1c3lbMF0gPT0gMCkpIHsKIAotCQkJCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgPSBjdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZDsKKwkJCQlwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCID0KKwkJCQkgICAgY3VyclRhcl9JbmZvLT5UYXJTZWxRX0hlYWQ7CiAKLQkJCQljdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZCA9IChQU0NDQikocEN1cnJDYXJkLT5jdXJyZW50U0NDQiktPlNjY2JfZm9yd2FyZGxpbms7CisJCQkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX0hlYWQgPQorCQkJCSAgICAoc3RydWN0IHNjY2IgKikocEN1cnJDYXJkLT5jdXJyZW50U0NDQiktPgorCQkJCSAgICBTY2NiX2ZvcndhcmRsaW5rOwogCi0JCQkJaWYgKGN1cnJUYXJfSW5mby0+VGFyU2VsUV9IZWFkID09IE5VTEwpCi0JCQkJeworCQkJCWlmIChjdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZCA9PSBOVUxMKSB7CiAJCQkJCWN1cnJUYXJfSW5mby0+VGFyU2VsUV9UYWlsID0gTlVMTDsKIAkJCQkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX0NudCA9IDA7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7CisJCQkJfSBlbHNlIHsKIAkJCQkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX0NudC0tOwotCQkJCQljdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZC0+U2NjYl9iYWNrbGluayA9IChQU0NDQilOVUxMOworCQkJCQljdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZC0+CisJCQkJCSAgICBTY2NiX2JhY2tsaW5rID0gKHN0cnVjdCBzY2NiICopTlVMTDsKIAkJCQl9CiAKIAkJCQlzY2FuX3B0cisrOwpAQCAtNzQxNSwxMSArNjg1MSw5IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWVsc2UgCi0JCQl7CisJCQllbHNlIHsKIAkJCQlzY2FuX3B0cisrOwotCQkJCWlmIChzY2FuX3B0ciA9PSBNQVhfU0NTSV9UQVIpIAotCQkJCXsKKwkJCQlpZiAoc2Nhbl9wdHIgPT0gTUFYX1NDU0lfVEFSKSB7CiAJCQkJCXNjYW5fcHRyID0gMDsKIAkJCQl9CiAJCQl9CkBAIC03NDI3LDcgKzY4NjEsNiBAQAogCX0gd2hpbGUgKHNjYW5fcHRyICE9IHBDdXJyQ2FyZC0+c2NhbkluZGV4KTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBRdWV1ZSBTZWxlY3QgRmFpbApAQCAtNzQzNiwzNyArNjg2OSwzOSBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3F1ZXVlU2VsZWN0RmFpbChQU0NDQmNhcmQgcEN1cnJDYXJkLCBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdm9pZCBGUFRfcXVldWVTZWxlY3RGYWlsKHN0cnVjdCBzY2NiX2NhcmQgKnBDdXJyQ2FyZCwKKwkJCQl1bnNpZ25lZCBjaGFyIHBfY2FyZCkKIHsKLSAgIFVDSEFSIHRoaXNUYXJnOwotICAgUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOworCXVuc2lnbmVkIGNoYXIgdGhpc1Rhcmc7CisJc3RydWN0IHNjY2JfbWdyX3Rhcl9pbmZvICpjdXJyVGFyX0luZm87CiAKLSAgIGlmIChwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCICE9IE5VTEwpCi0JICB7Ci0JICB0aGlzVGFyZyA9IChVQ0hBUikoKChQU0NDQikocEN1cnJDYXJkLT5jdXJyZW50U0NDQikpLT5UYXJnSUQpOwotICAgICAgY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bdGhpc1RhcmddOworCWlmIChwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCICE9IE5VTEwpIHsKKwkJdGhpc1RhcmcgPQorCQkgICAgKHVuc2lnbmVkIGNoYXIpKCgoc3RydWN0IHNjY2IgKikocEN1cnJDYXJkLT5jdXJyZW50U0NDQikpLT4KKwkJCQkgICAgVGFyZ0lEKTsKKwkJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bdGhpc1RhcmddOwogCi0gICAgICBwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLT5TY2NiX2JhY2tsaW5rID0gKFBTQ0NCKU5VTEw7CisJCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0ItPlNjY2JfYmFja2xpbmsgPSAoc3RydWN0IHNjY2IgKilOVUxMOwogCi0gICAgICBwQ3VyckNhcmQtPmN1cnJlbnRTQ0NCLT5TY2NiX2ZvcndhcmRsaW5rID0gY3VyclRhcl9JbmZvLT5UYXJTZWxRX0hlYWQ7CisJCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0ItPlNjY2JfZm9yd2FyZGxpbmsgPQorCQkgICAgY3VyclRhcl9JbmZvLT5UYXJTZWxRX0hlYWQ7CiAKLQkgIGlmIChjdXJyVGFyX0luZm8tPlRhclNlbFFfQ250ID09IDApCi0JCSB7Ci0JCSBjdXJyVGFyX0luZm8tPlRhclNlbFFfVGFpbCA9IHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0I7Ci0JCSB9CisJCWlmIChjdXJyVGFyX0luZm8tPlRhclNlbFFfQ250ID09IDApIHsKKwkJCWN1cnJUYXJfSW5mby0+VGFyU2VsUV9UYWlsID0gcEN1cnJDYXJkLT5jdXJyZW50U0NDQjsKKwkJfQogCi0JICBlbHNlCi0JCSB7Ci0JCSBjdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZC0+U2NjYl9iYWNrbGluayA9IHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0I7Ci0JCSB9CisJCWVsc2UgeworCQkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX0hlYWQtPlNjY2JfYmFja2xpbmsgPQorCQkJICAgIHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0I7CisJCX0KIAorCQljdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZCA9IHBDdXJyQ2FyZC0+Y3VycmVudFNDQ0I7CiAKLQkgIGN1cnJUYXJfSW5mby0+VGFyU2VsUV9IZWFkID0gcEN1cnJDYXJkLT5jdXJyZW50U0NDQjsKLQotCSAgcEN1cnJDYXJkLT5jdXJyZW50U0NDQiA9IE5VTEw7Ci0JICBjdXJyVGFyX0luZm8tPlRhclNlbFFfQ250Kys7Ci0JICB9CisJCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgPSBOVUxMOworCQljdXJyVGFyX0luZm8tPlRhclNlbFFfQ250Kys7CisJfQogfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBRdWV1ZSBDb21tYW5kIENvbXBsZXRlCkBAIC03NDc1LDEwMSArNjkxMCw5NyBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3F1ZXVlQ21kQ29tcGxldGUoUFNDQ0JjYXJkIHBDdXJyQ2FyZCwgUFNDQ0IgcF9zY2NiLAotCQkJCSBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdm9pZCBGUFRfcXVldWVDbWRDb21wbGV0ZShzdHJ1Y3Qgc2NjYl9jYXJkICpwQ3VyckNhcmQsCisJCQkJIHN0cnVjdCBzY2NiICpwX3NjY2IsIHVuc2lnbmVkIGNoYXIgcF9jYXJkKQogewogCi0gICBVQ0hBUiBpLCBTQ1NJY21kOwotICAgQ0FMTF9CS19GTiBjYWxsYmFjazsKLSAgIFBTQ0NCTWdyX3Rhcl9pbmZvIGN1cnJUYXJfSW5mbzsKKwl1bnNpZ25lZCBjaGFyIGksIFNDU0ljbWQ7CisJQ0FMTF9CS19GTiBjYWxsYmFjazsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotICAgU0NTSWNtZCA9IHBfc2NjYi0+Q2RiWzBdOworCVNDU0ljbWQgPSBwX3NjY2ItPkNkYlswXTsKIAorCWlmICghKHBfc2NjYi0+U2NjYl9YZmVyU3RhdGUgJiBGX0FMTF9YRkVSUkVEKSkgewogCi0gICBpZiAoIShwX3NjY2ItPlNjY2JfWGZlclN0YXRlICYgRl9BTExfWEZFUlJFRCkpIHsKKwkJaWYgKChwX3NjY2ItPgorCQkgICAgIENvbnRyb2xCeXRlICYgKFNDQ0JfREFUQV9YRkVSX09VVCB8IFNDQ0JfREFUQV9YRkVSX0lOKSkKKwkJICAgICYmIChwX3NjY2ItPkhvc3RTdGF0dXMgPT0gU0NDQl9DT01QTEVURSkKKwkJICAgICYmIChwX3NjY2ItPlRhcmdldFN0YXR1cyAhPSBTU0NIRUNLKSkKIAotCSAgaWYgKChwX3NjY2ItPkNvbnRyb2xCeXRlICYgKFNDQ0JfREFUQV9YRkVSX09VVCB8IFNDQ0JfREFUQV9YRkVSX0lOKSkgJiYKLQkJIChwX3NjY2ItPkhvc3RTdGF0dXMgPT0gU0NDQl9DT01QTEVURSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0JCSAocF9zY2NiLT5UYXJnZXRTdGF0dXMgIT0gU1NDSEVDSykpCi0KLQkJIGlmICgoU0NTSWNtZCA9PSBTQ1NJX1JFQUQpICAgICAgICAgICAgIHx8Ci0JCQkgKFNDU0ljbWQgPT0gU0NTSV9XUklURSkgICAgICAgICAgICB8fAotCQkJIChTQ1NJY21kID09IFNDU0lfUkVBRF9FWFRFTkRFRCkgICAgfHwKLQkJCSAoU0NTSWNtZCA9PSBTQ1NJX1dSSVRFX0VYVEVOREVEKSAgIHx8Ci0JCQkgKFNDU0ljbWQgPT0gU0NTSV9XUklURV9BTkRfVkVSSUZZKSB8fAotCQkJIChTQ1NJY21kID09IFNDU0lfU1RBUlRfU1RPUF9VTklUKSAgfHwKLQkJCSAocEN1cnJDYXJkLT5nbG9iYWxGbGFncyAmIEZfTk9fRklMVEVSKQotCQkJKQotCQkJICAgcF9zY2NiLT5Ib3N0U3RhdHVzID0gU0NDQl9EQVRBX1VOREVSX1JVTjsKLQkgIH0KLQotCi0JaWYocF9zY2NiLT5TY2NiU3RhdHVzID09IFNDQ0JfSU5fUFJPQ0VTUykKLQl7Ci0JICAgaWYgKHBfc2NjYi0+SG9zdFN0YXR1cyB8fCBwX3NjY2ItPlRhcmdldFN0YXR1cykKLQkJICBwX3NjY2ItPlNjY2JTdGF0dXMgPSBTQ0NCX0VSUk9SOwotCSAgIGVsc2UKLQkJICBwX3NjY2ItPlNjY2JTdGF0dXMgPSBTQ0NCX1NVQ0NFU1M7CisJCQlpZiAoKFNDU0ljbWQgPT0gU0NTSV9SRUFEKSB8fAorCQkJICAgIChTQ1NJY21kID09IFNDU0lfV1JJVEUpIHx8CisJCQkgICAgKFNDU0ljbWQgPT0gU0NTSV9SRUFEX0VYVEVOREVEKSB8fAorCQkJICAgIChTQ1NJY21kID09IFNDU0lfV1JJVEVfRVhURU5ERUQpIHx8CisJCQkgICAgKFNDU0ljbWQgPT0gU0NTSV9XUklURV9BTkRfVkVSSUZZKSB8fAorCQkJICAgIChTQ1NJY21kID09IFNDU0lfU1RBUlRfU1RPUF9VTklUKSB8fAorCQkJICAgIChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9OT19GSUxURVIpCisJCQkgICAgKQorCQkJCXBfc2NjYi0+SG9zdFN0YXR1cyA9IFNDQ0JfREFUQV9VTkRFUl9SVU47CiAJfQogCi0gICBpZiAocF9zY2NiLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQVVUT19TRU5TRSkgewotCi0JICBwX3NjY2ItPkNkYkxlbmd0aCA9IHBfc2NjYi0+U2F2ZV9DZGJMZW47Ci0JICBmb3IgKGk9MDsgaSA8IDY7IGkrKykgewotCQkgcF9zY2NiLT5DZGJbaV0gPSBwX3NjY2ItPlNhdmVfQ2RiW2ldOwotCQkgfQotCSAgfQotCi0gICBpZiAoKHBfc2NjYi0+T3BlcmF0aW9uQ29kZSA9PSBSRVNJRFVBTF9TR19DT01NQU5EKSB8fAotCSAgKHBfc2NjYi0+T3BlcmF0aW9uQ29kZSA9PSBSRVNJRFVBTF9DT01NQU5EKSkgewotCi0JCSBGUFRfdXRpbFVwZGF0ZVJlc2lkdWFsKHBfc2NjYik7Ci0JCSB9Ci0KLSAgIHBDdXJyQ2FyZC0+Y21kQ291bnRlci0tOwotICAgaWYgKCFwQ3VyckNhcmQtPmNtZENvdW50ZXIpIHsKLQotCSAgaWYgKHBDdXJyQ2FyZC0+Z2xvYmFsRmxhZ3MgJiBGX0dSRUVOX1BDKSB7Ci0JCSBXUl9IQVJQT09OKHBDdXJyQ2FyZC0+aW9Qb3J0K2hwX2Nsa2N0cmxfMCwoUFdSX0RXTiB8IENMS0NUUkxfREVGQVVMVCkpOwotCQkgV1JfSEFSUE9PTihwQ3VyckNhcmQtPmlvUG9ydCtocF9zeXNfY3RybCwgU1RPUF9DTEspOwotCQkgfQotCi0JICBXUl9IQVJQT09OKHBDdXJyQ2FyZC0+aW9Qb3J0K2hwX3NlbWFwaG9yZSwKLQkgIChSRF9IQVJQT09OKHBDdXJyQ2FyZC0+aW9Qb3J0K2hwX3NlbWFwaG9yZSkgJiB+U0NDQl9NR1JfQUNUSVZFKSk7Ci0KLQkgIH0KLQotCWlmKHBDdXJyQ2FyZC0+ZGlzY1FDb3VudCAhPSAwKQotCXsKLSAgICAgIGN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Bfc2NjYi0+VGFyZ0lEXTsKLQkJaWYoKChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCi0JCQkoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9IFRBR19RX1RSWUlORykpKQotCQl7Ci0JCQlwQ3VyckNhcmQtPmRpc2NRQ291bnQtLTsKLQkJCXBDdXJyQ2FyZC0+ZGlzY1FfVGJsW2N1cnJUYXJfSW5mby0+THVuRGlzY1FfSWR4W3Bfc2NjYi0+THVuXV0gPSBOVUxMOwotCQl9CisJaWYgKHBfc2NjYi0+U2NjYlN0YXR1cyA9PSBTQ0NCX0lOX1BST0NFU1MpIHsKKwkJaWYgKHBfc2NjYi0+SG9zdFN0YXR1cyB8fCBwX3NjY2ItPlRhcmdldFN0YXR1cykKKwkJCXBfc2NjYi0+U2NjYlN0YXR1cyA9IFNDQ0JfRVJST1I7CiAJCWVsc2UKLQkJewotCQkJaWYocF9zY2NiLT5TY2NiX3RhZykKLQkJCXsKKwkJCXBfc2NjYi0+U2NjYlN0YXR1cyA9IFNDQ0JfU1VDQ0VTUzsKKwl9CisKKwlpZiAocF9zY2NiLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQVVUT19TRU5TRSkgeworCisJCXBfc2NjYi0+Q2RiTGVuZ3RoID0gcF9zY2NiLT5TYXZlX0NkYkxlbjsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkJcF9zY2NiLT5DZGJbaV0gPSBwX3NjY2ItPlNhdmVfQ2RiW2ldOworCQl9CisJfQorCisJaWYgKChwX3NjY2ItPk9wZXJhdGlvbkNvZGUgPT0gUkVTSURVQUxfU0dfQ09NTUFORCkgfHwKKwkgICAgKHBfc2NjYi0+T3BlcmF0aW9uQ29kZSA9PSBSRVNJRFVBTF9DT01NQU5EKSkgeworCisJCUZQVF91dGlsVXBkYXRlUmVzaWR1YWwocF9zY2NiKTsKKwl9CisKKwlwQ3VyckNhcmQtPmNtZENvdW50ZXItLTsKKwlpZiAoIXBDdXJyQ2FyZC0+Y21kQ291bnRlcikgeworCisJCWlmIChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9HUkVFTl9QQykgeworCQkJV1JfSEFSUE9PTihwQ3VyckNhcmQtPmlvUG9ydCArIGhwX2Nsa2N0cmxfMCwKKwkJCQkgICAoUFdSX0RXTiB8IENMS0NUUkxfREVGQVVMVCkpOworCQkJV1JfSEFSUE9PTihwQ3VyckNhcmQtPmlvUG9ydCArIGhwX3N5c19jdHJsLCBTVE9QX0NMSyk7CisJCX0KKworCQlXUl9IQVJQT09OKHBDdXJyQ2FyZC0+aW9Qb3J0ICsgaHBfc2VtYXBob3JlLAorCQkJICAgKFJEX0hBUlBPT04ocEN1cnJDYXJkLT5pb1BvcnQgKyBocF9zZW1hcGhvcmUpICYKKwkJCSAgICB+U0NDQl9NR1JfQUNUSVZFKSk7CisKKwl9CisKKwlpZiAocEN1cnJDYXJkLT5kaXNjUUNvdW50ICE9IDApIHsKKwkJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bcF9zY2NiLT5UYXJnSURdOworCQlpZiAoKChwQ3VyckNhcmQtPmdsb2JhbEZsYWdzICYgRl9DT05MVU5fSU8pICYmCisJCSAgICAgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPQorCQkgICAgICBUQUdfUV9UUllJTkcpKSkgeworCQkJcEN1cnJDYXJkLT5kaXNjUUNvdW50LS07CisJCQlwQ3VyckNhcmQtPmRpc2NRX1RibFtjdXJyVGFyX0luZm8tPgorCQkJCQkgICAgIEx1bkRpc2NRX0lkeFtwX3NjY2ItPkx1bl1dID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChwX3NjY2ItPlNjY2JfdGFnKSB7CiAJCQkJcEN1cnJDYXJkLT5kaXNjUUNvdW50LS07CiAJCQkJcEN1cnJDYXJkLT5kaXNjUV9UYmxbcF9zY2NiLT5TY2NiX3RhZ10gPSBOVUxMOwotCQkJfWVsc2UKLQkJCXsKKwkJCX0gZWxzZSB7CiAJCQkJcEN1cnJDYXJkLT5kaXNjUUNvdW50LS07Ci0JCQkJcEN1cnJDYXJkLT5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT5MdW5EaXNjUV9JZHhbMF1dID0gTlVMTDsKKwkJCQlwQ3VyckNhcmQtPmRpc2NRX1RibFtjdXJyVGFyX0luZm8tPgorCQkJCQkJICAgICBMdW5EaXNjUV9JZHhbMF1dID0gTlVMTDsKIAkJCX0KIAkJfQogCiAJfQogCi0JY2FsbGJhY2sgPSAoQ0FMTF9CS19GTilwX3NjY2ItPlNjY2JDYWxsYmFjazsKLSAgIGNhbGxiYWNrKHBfc2NjYik7Ci0gICBwQ3VyckNhcmQtPmdsb2JhbEZsYWdzIHw9IEZfTkVXX1NDQ0JfQ01EOwotICAgcEN1cnJDYXJkLT5jdXJyZW50U0NDQiA9IE5VTEw7CisJY2FsbGJhY2sgPSAoQ0FMTF9CS19GTikgcF9zY2NiLT5TY2NiQ2FsbGJhY2s7CisJY2FsbGJhY2socF9zY2NiKTsKKwlwQ3VyckNhcmQtPmdsb2JhbEZsYWdzIHw9IEZfTkVXX1NDQ0JfQ01EOworCXBDdXJyQ2FyZC0+Y3VycmVudFNDQ0IgPSBOVUxMOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IFF1ZXVlIERpc2Nvbm5lY3QKQEAgLTc1NzcsMzMgKzcwMDgsMzIgQEAKICAqIERlc2NyaXB0aW9uOiBBZGQgU0NDQiB0byBvdXIgZGlzY29ubmVjdCBhcnJheS4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBGUFRfcXVldWVEaXNjb25uZWN0KFBTQ0NCIHBfc2NjYiwgVUNIQVIgcF9jYXJkKQorc3RhdGljIHZvaWQgRlBUX3F1ZXVlRGlzY29ubmVjdChzdHJ1Y3Qgc2NjYiAqcF9zY2NiLCB1bnNpZ25lZCBjaGFyIHBfY2FyZCkKIHsKLSAgIFBTQ0NCTWdyX3Rhcl9pbmZvIGN1cnJUYXJfSW5mbzsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAogCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Bfc2NjYi0+VGFyZ0lEXTsKIAotCWlmKCgoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgotCQkoKGN1cnJUYXJfSW5mby0+VGFyU3RhdHVzICYgVEFSX1RBR19RX01BU0spICE9IFRBR19RX1RSWUlORykpKQotCXsKLQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT5MdW5EaXNjUV9JZHhbcF9zY2NiLT5MdW5dXSA9IHBfc2NjYjsKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKHBfc2NjYi0+U2NjYl90YWcpCi0JCXsKLQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3Bfc2NjYi0+U2NjYl90YWddID0gcF9zY2NiOwotCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtwX3NjY2ItPlRhcmdJRF0uVGFyTFVOQnVzeVswXSA9IDA7CisJaWYgKCgoRlBUX0JMX0NhcmRbcF9jYXJkXS5nbG9iYWxGbGFncyAmIEZfQ09OTFVOX0lPKSAmJgorCSAgICAgKChjdXJyVGFyX0luZm8tPlRhclN0YXR1cyAmIFRBUl9UQUdfUV9NQVNLKSAhPSBUQUdfUV9UUllJTkcpKSkgeworCQlGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtjdXJyVGFyX0luZm8tPgorCQkJCQkgICAgICBMdW5EaXNjUV9JZHhbcF9zY2NiLT5MdW5dXSA9CisJCSAgICBwX3NjY2I7CisJfSBlbHNlIHsKKwkJaWYgKHBfc2NjYi0+U2NjYl90YWcpIHsKKwkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3Bfc2NjYi0+U2NjYl90YWddID0KKwkJCSAgICBwX3NjY2I7CisJCQlGUFRfc2NjYk1nclRibFtwX2NhcmRdW3Bfc2NjYi0+VGFyZ0lEXS5UYXJMVU5CdXN5WzBdID0KKwkJCSAgICAwOwogCQkJRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtwX3NjY2ItPlRhcmdJRF0uVGFyVGFnUV9DbnQrKzsKLQkJfWVsc2UKLQkJewotCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT5MdW5EaXNjUV9JZHhbMF1dID0gcF9zY2NiOworCQl9IGVsc2UgeworCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbY3VyclRhcl9JbmZvLT4KKwkJCQkJCSAgICAgIEx1bkRpc2NRX0lkeFswXV0gPSBwX3NjY2I7CiAJCX0KIAl9CiAJRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQiA9IE5VTEw7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogUXVldWUgRmx1c2ggU0NDQgpAQCAtNzYxMiwzMyArNzA0MiwzNSBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgIEZQVF9xdWV1ZUZsdXNoU2NjYihVQ0hBUiBwX2NhcmQsIFVDSEFSIGVycm9yX2NvZGUpCitzdGF0aWMgdm9pZCBGUFRfcXVldWVGbHVzaFNjY2IodW5zaWduZWQgY2hhciBwX2NhcmQsIHVuc2lnbmVkIGNoYXIgZXJyb3JfY29kZSkKIHsKLSAgIFVDSEFSIHF0YWcsdGhpc1Rhcmc7Ci0gICBQU0NDQiBjdXJyU0NDQjsKLSAgIFBTQ0NCTWdyX3Rhcl9pbmZvIGN1cnJUYXJfSW5mbzsKKwl1bnNpZ25lZCBjaGFyIHF0YWcsIHRoaXNUYXJnOworCXN0cnVjdCBzY2NiICpjdXJyU0NDQjsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotICAgY3VyclNDQ0IgPSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmN1cnJlbnRTQ0NCOwotCWlmKGN1cnJTQ0NCICE9IE5VTEwpCi0JewotCSAgIHRoaXNUYXJnID0gKFVDSEFSKWN1cnJTQ0NCLT5UYXJnSUQ7Ci0gICAJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bdGhpc1RhcmddOworCWN1cnJTQ0NCID0gRlBUX0JMX0NhcmRbcF9jYXJkXS5jdXJyZW50U0NDQjsKKwlpZiAoY3VyclNDQ0IgIT0gTlVMTCkgeworCQl0aGlzVGFyZyA9ICh1bnNpZ25lZCBjaGFyKWN1cnJTQ0NCLT5UYXJnSUQ7CisJCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3RoaXNUYXJnXTsKIAotCSAgIGZvciAocXRhZz0wOyBxdGFnPFFVRVVFX0RFUFRIOyBxdGFnKyspIHsKKwkJZm9yIChxdGFnID0gMDsgcXRhZyA8IFFVRVVFX0RFUFRIOyBxdGFnKyspIHsKIAotCQkgIGlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtxdGFnXSAmJiAKLQkJCQkJKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddLT5UYXJnSUQgPT0gdGhpc1RhcmcpKQotCQkJIHsKKwkJCWlmIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtxdGFnXSAmJgorCQkJICAgIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtxdGFnXS0+VGFyZ0lEID09CisJCQkgICAgIHRoaXNUYXJnKSkgewogCi0JCQkgRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbcXRhZ10tPkhvc3RTdGF0dXMgPSAoVUNIQVIpZXJyb3JfY29kZTsKLQkJCQotCQkJIEZQVF9xdWV1ZUNtZENvbXBsZXRlKCZGUFRfQkxfQ2FyZFtwX2NhcmRdLEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddLCBwX2NhcmQpOworCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddLT4KKwkJCQkgICAgSG9zdFN0YXR1cyA9ICh1bnNpZ25lZCBjaGFyKWVycm9yX2NvZGU7CiAKLQkJCSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtxdGFnXSA9IE5VTEw7Ci0JCQkgY3VyclRhcl9JbmZvLT5UYXJUYWdRX0NudC0tOworCQkJCUZQVF9xdWV1ZUNtZENvbXBsZXRlKCZGUFRfQkxfQ2FyZFtwX2NhcmRdLAorCQkJCQkJICAgICBGUFRfQkxfQ2FyZFtwX2NhcmRdLgorCQkJCQkJICAgICBkaXNjUV9UYmxbcXRhZ10sIHBfY2FyZCk7CiAKLQkJCSB9Ci0JCSAgfQorCQkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddID0gTlVMTDsKKwkJCQljdXJyVGFyX0luZm8tPlRhclRhZ1FfQ250LS07CisKKwkJCX0KKwkJfQogCX0KIAogfQpAQCAtNzY1MSw2MSArNzA4Myw1NyBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgIEZQVF9xdWV1ZUZsdXNoVGFyZ1NjY2IoVUNIQVIgcF9jYXJkLCBVQ0hBUiB0aGlzVGFyZywKLQkJCQkgICAgVUNIQVIgZXJyb3JfY29kZSkKK3N0YXRpYyB2b2lkIEZQVF9xdWV1ZUZsdXNoVGFyZ1NjY2IodW5zaWduZWQgY2hhciBwX2NhcmQsIHVuc2lnbmVkIGNoYXIgdGhpc1RhcmcsCisJCQkJICAgdW5zaWduZWQgY2hhciBlcnJvcl9jb2RlKQogewotICAgVUNIQVIgcXRhZzsKLSAgIFBTQ0NCTWdyX3Rhcl9pbmZvIGN1cnJUYXJfSW5mbzsKKwl1bnNpZ25lZCBjaGFyIHF0YWc7CisJc3RydWN0IHNjY2JfbWdyX3Rhcl9pbmZvICpjdXJyVGFyX0luZm87CiAKLSAgIGN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3RoaXNUYXJnXTsKKwljdXJyVGFyX0luZm8gPSAmRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVt0aGlzVGFyZ107CiAKLSAgIGZvciAocXRhZz0wOyBxdGFnPFFVRVVFX0RFUFRIOyBxdGFnKyspIHsKKwlmb3IgKHF0YWcgPSAwOyBxdGFnIDwgUVVFVUVfREVQVEg7IHF0YWcrKykgewogCi0JICBpZiAoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbcXRhZ10gJiYgCi0JCQkJKEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddLT5UYXJnSUQgPT0gdGhpc1RhcmcpKQotCQkgeworCQlpZiAoRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbcXRhZ10gJiYKKwkJICAgIChGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtxdGFnXS0+VGFyZ0lEID09IHRoaXNUYXJnKSkgewogCi0JCSBGUFRfQkxfQ2FyZFtwX2NhcmRdLmRpc2NRX1RibFtxdGFnXS0+SG9zdFN0YXR1cyA9IChVQ0hBUillcnJvcl9jb2RlOworCQkJRlBUX0JMX0NhcmRbcF9jYXJkXS5kaXNjUV9UYmxbcXRhZ10tPkhvc3RTdGF0dXMgPQorCQkJICAgICh1bnNpZ25lZCBjaGFyKWVycm9yX2NvZGU7CiAKLQkJIEZQVF9xdWV1ZUNtZENvbXBsZXRlKCZGUFRfQkxfQ2FyZFtwX2NhcmRdLEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddLCBwX2NhcmQpOworCQkJRlBUX3F1ZXVlQ21kQ29tcGxldGUoJkZQVF9CTF9DYXJkW3BfY2FyZF0sCisJCQkJCSAgICAgRlBUX0JMX0NhcmRbcF9jYXJkXS4KKwkJCQkJICAgICBkaXNjUV9UYmxbcXRhZ10sIHBfY2FyZCk7CiAKLQkJIEZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddID0gTlVMTDsKLQkJIGN1cnJUYXJfSW5mby0+VGFyVGFnUV9DbnQtLTsKKwkJCUZQVF9CTF9DYXJkW3BfY2FyZF0uZGlzY1FfVGJsW3F0YWddID0gTlVMTDsKKwkJCWN1cnJUYXJfSW5mby0+VGFyVGFnUV9DbnQtLTsKIAotCQkgfQotCSAgfQorCQl9CisJfQogCiB9CiAKLQotCi0KLQotc3RhdGljIHZvaWQgRlBUX3F1ZXVlQWRkU2NjYihQU0NDQiBwX1NDQ0IsIFVDSEFSIHBfY2FyZCkKK3N0YXRpYyB2b2lkIEZQVF9xdWV1ZUFkZFNjY2Ioc3RydWN0IHNjY2IgKnBfU0NDQiwgdW5zaWduZWQgY2hhciBwX2NhcmQpCiB7Ci0gICBQU0NDQk1ncl90YXJfaW5mbyBjdXJyVGFyX0luZm87Ci0gICBjdXJyVGFyX0luZm8gPSAmRlBUX3NjY2JNZ3JUYmxbcF9jYXJkXVtwX1NDQ0ItPlRhcmdJRF07CisJc3RydWN0IHNjY2JfbWdyX3Rhcl9pbmZvICpjdXJyVGFyX0luZm87CisJY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bcF9TQ0NCLT5UYXJnSURdOwogCi0gICBwX1NDQ0ItPlNjY2JfZm9yd2FyZGxpbmsgPSBOVUxMOworCXBfU0NDQi0+U2NjYl9mb3J3YXJkbGluayA9IE5VTEw7CiAKLSAgIHBfU0NDQi0+U2NjYl9iYWNrbGluayA9IGN1cnJUYXJfSW5mby0+VGFyU2VsUV9UYWlsOworCXBfU0NDQi0+U2NjYl9iYWNrbGluayA9IGN1cnJUYXJfSW5mby0+VGFyU2VsUV9UYWlsOwogCi0gICBpZiAoY3VyclRhcl9JbmZvLT5UYXJTZWxRX0NudCA9PSAwKSB7CisJaWYgKGN1cnJUYXJfSW5mby0+VGFyU2VsUV9DbnQgPT0gMCkgewogCi0JICBjdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZCA9IHBfU0NDQjsKLQkgIH0KKwkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX0hlYWQgPSBwX1NDQ0I7CisJfQogCi0gICBlbHNlIHsKKwllbHNlIHsKIAotCSAgY3VyclRhcl9JbmZvLT5UYXJTZWxRX1RhaWwtPlNjY2JfZm9yd2FyZGxpbmsgPSBwX1NDQ0I7Ci0JICB9CisJCWN1cnJUYXJfSW5mby0+VGFyU2VsUV9UYWlsLT5TY2NiX2ZvcndhcmRsaW5rID0gcF9TQ0NCOworCX0KIAotCi0gICBjdXJyVGFyX0luZm8tPlRhclNlbFFfVGFpbCA9IHBfU0NDQjsKLSAgIGN1cnJUYXJfSW5mby0+VGFyU2VsUV9DbnQrKzsKKwljdXJyVGFyX0luZm8tPlRhclNlbFFfVGFpbCA9IHBfU0NDQjsKKwljdXJyVGFyX0luZm8tPlRhclNlbFFfQ250Kys7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBGdW5jdGlvbjogUXVldWUgRmluZCBTQ0NCCkBAIC03NzE1LDU0ICs3MTQzLDU2IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgVUNIQVIgRlBUX3F1ZXVlRmluZFNjY2IoUFNDQ0IgcF9TQ0NCLCBVQ0hBUiBwX2NhcmQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfcXVldWVGaW5kU2NjYihzdHJ1Y3Qgc2NjYiAqcF9TQ0NCLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHBfY2FyZCkKIHsKLSAgIFBTQ0NCIHFfcHRyOwotICAgUFNDQ0JNZ3JfdGFyX2luZm8gY3VyclRhcl9JbmZvOworCXN0cnVjdCBzY2NiICpxX3B0cjsKKwlzdHJ1Y3Qgc2NjYl9tZ3JfdGFyX2luZm8gKmN1cnJUYXJfSW5mbzsKIAotICAgY3VyclRhcl9JbmZvID0gJkZQVF9zY2NiTWdyVGJsW3BfY2FyZF1bcF9TQ0NCLT5UYXJnSURdOworCWN1cnJUYXJfSW5mbyA9ICZGUFRfc2NjYk1nclRibFtwX2NhcmRdW3BfU0NDQi0+VGFyZ0lEXTsKIAotICAgcV9wdHIgPSBjdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZDsKKwlxX3B0ciA9IGN1cnJUYXJfSW5mby0+VGFyU2VsUV9IZWFkOwogCi0gICB3aGlsZShxX3B0ciAhPSBOVUxMKSB7CisJd2hpbGUgKHFfcHRyICE9IE5VTEwpIHsKIAotCSAgaWYgKHFfcHRyID09IHBfU0NDQikgeworCQlpZiAocV9wdHIgPT0gcF9TQ0NCKSB7CiAKKwkJCWlmIChjdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZCA9PSBxX3B0cikgewogCi0JCSBpZiAoY3VyclRhcl9JbmZvLT5UYXJTZWxRX0hlYWQgPT0gcV9wdHIpIHsKLQotCQkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX0hlYWQgPSBxX3B0ci0+U2NjYl9mb3J3YXJkbGluazsKKwkJCQljdXJyVGFyX0luZm8tPlRhclNlbFFfSGVhZCA9CisJCQkJICAgIHFfcHRyLT5TY2NiX2ZvcndhcmRsaW5rOwogCQkJfQogCi0JCSBpZiAoY3VyclRhcl9JbmZvLT5UYXJTZWxRX1RhaWwgPT0gcV9wdHIpIHsKKwkJCWlmIChjdXJyVGFyX0luZm8tPlRhclNlbFFfVGFpbCA9PSBxX3B0cikgewogCi0JCQljdXJyVGFyX0luZm8tPlRhclNlbFFfVGFpbCA9IHFfcHRyLT5TY2NiX2JhY2tsaW5rOworCQkJCWN1cnJUYXJfSW5mby0+VGFyU2VsUV9UYWlsID0KKwkJCQkgICAgcV9wdHItPlNjY2JfYmFja2xpbms7CiAJCQl9CiAKLQkJIGlmIChxX3B0ci0+U2NjYl9mb3J3YXJkbGluayAhPSBOVUxMKSB7Ci0JCQlxX3B0ci0+U2NjYl9mb3J3YXJkbGluay0+U2NjYl9iYWNrbGluayA9IHFfcHRyLT5TY2NiX2JhY2tsaW5rOworCQkJaWYgKHFfcHRyLT5TY2NiX2ZvcndhcmRsaW5rICE9IE5VTEwpIHsKKwkJCQlxX3B0ci0+U2NjYl9mb3J3YXJkbGluay0+U2NjYl9iYWNrbGluayA9CisJCQkJICAgIHFfcHRyLT5TY2NiX2JhY2tsaW5rOwogCQkJfQogCi0JCSBpZiAocV9wdHItPlNjY2JfYmFja2xpbmsgIT0gTlVMTCkgewotCQkJcV9wdHItPlNjY2JfYmFja2xpbmstPlNjY2JfZm9yd2FyZGxpbmsgPSBxX3B0ci0+U2NjYl9mb3J3YXJkbGluazsKKwkJCWlmIChxX3B0ci0+U2NjYl9iYWNrbGluayAhPSBOVUxMKSB7CisJCQkJcV9wdHItPlNjY2JfYmFja2xpbmstPlNjY2JfZm9yd2FyZGxpbmsgPQorCQkJCSAgICBxX3B0ci0+U2NjYl9mb3J3YXJkbGluazsKIAkJCX0KIAotCQkgY3VyclRhcl9JbmZvLT5UYXJTZWxRX0NudC0tOworCQkJY3VyclRhcl9JbmZvLT5UYXJTZWxRX0NudC0tOwogCi0JCSByZXR1cm4oMSk7Ci0JCSB9CisJCQlyZXR1cm4gMTsKKwkJfQogCi0JICBlbHNlIHsKLQkJIHFfcHRyID0gcV9wdHItPlNjY2JfZm9yd2FyZGxpbms7Ci0JCSB9Ci0JICB9CisJCWVsc2UgeworCQkJcV9wdHIgPSBxX3B0ci0+U2NjYl9mb3J3YXJkbGluazsKKwkJfQorCX0KIAotCi0gICByZXR1cm4oMCk7CisJcmV0dXJuIDA7CiAKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBVdGlsaXR5IFVwZGF0ZSBSZXNpZHVhbCBDb3VudApAQCAtNzc3Niw0OCArNzIwNiw0NyBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgIEZQVF91dGlsVXBkYXRlUmVzaWR1YWwoUFNDQ0IgcF9TQ0NCKQorc3RhdGljIHZvaWQgRlBUX3V0aWxVcGRhdGVSZXNpZHVhbChzdHJ1Y3Qgc2NjYiAqcF9TQ0NCKQogewotICAgVUxPTkcgcGFydGlhbF9jbnQ7Ci0gICBVSU5UICBzZ19pbmRleDsKLSAgIFVMT05HICpzZ19wdHI7CisJdW5zaWduZWQgbG9uZyBwYXJ0aWFsX2NudDsKKwl1bnNpZ25lZCBpbnQgc2dfaW5kZXg7CisJdW5zaWduZWQgbG9uZyAqc2dfcHRyOwogCi0gICBpZiAocF9TQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQUxMX1hGRVJSRUQpIHsKKwlpZiAocF9TQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfQUxMX1hGRVJSRUQpIHsKIAotCSAgcF9TQ0NCLT5EYXRhTGVuZ3RoID0gMHgwMDAwOwotCSAgfQorCQlwX1NDQ0ItPkRhdGFMZW5ndGggPSAweDAwMDA7CisJfQogCi0gICBlbHNlIGlmIChwX1NDQ0ItPlNjY2JfWGZlclN0YXRlICYgRl9TR19YRkVSKSB7CisJZWxzZSBpZiAocF9TQ0NCLT5TY2NiX1hmZXJTdGF0ZSAmIEZfU0dfWEZFUikgewogCi0JCSBwYXJ0aWFsX2NudCA9IDB4MDAwMDsKKwkJcGFydGlhbF9jbnQgPSAweDAwMDA7CiAKLQkJIHNnX2luZGV4ID0gcF9TQ0NCLT5TY2NiX3Nnc2VnOworCQlzZ19pbmRleCA9IHBfU0NDQi0+U2NjYl9zZ3NlZzsKIAotCQkgc2dfcHRyID0gKFVMT05HICopcF9TQ0NCLT5EYXRhUG9pbnRlcjsKKwkJc2dfcHRyID0gKHVuc2lnbmVkIGxvbmcgKilwX1NDQ0ItPkRhdGFQb2ludGVyOwogCi0JCSBpZiAocF9TQ0NCLT5TY2NiX1NHb2Zmc2V0KSB7CisJCWlmIChwX1NDQ0ItPlNjY2JfU0dvZmZzZXQpIHsKIAogCQkJcGFydGlhbF9jbnQgPSBwX1NDQ0ItPlNjY2JfU0dvZmZzZXQ7CiAJCQlzZ19pbmRleCsrOwotCQkJfQorCQl9CiAKLQkJIHdoaWxlICggKChVTE9ORylzZ19pbmRleCAqIChVTE9ORylTR19FTEVNRU5UX1NJWkUpIDwKLQkJCXBfU0NDQi0+RGF0YUxlbmd0aCApIHsKKwkJd2hpbGUgKCgodW5zaWduZWQgbG9uZylzZ19pbmRleCAqCisJCQkodW5zaWduZWQgbG9uZylTR19FTEVNRU5UX1NJWkUpIDwgcF9TQ0NCLT5EYXRhTGVuZ3RoKSB7CiAKLQkJCXBhcnRpYWxfY250ICs9ICooc2dfcHRyKyhzZ19pbmRleCAqIDIpKTsKKwkJCXBhcnRpYWxfY250ICs9ICooc2dfcHRyICsgKHNnX2luZGV4ICogMikpOwogCQkJc2dfaW5kZXgrKzsKLQkJCX0KKwkJfQogCi0JCSBwX1NDQ0ItPkRhdGFMZW5ndGggPSBwYXJ0aWFsX2NudDsKLQkJIH0KKwkJcF9TQ0NCLT5EYXRhTGVuZ3RoID0gcGFydGlhbF9jbnQ7CisJfQogCi0JICBlbHNlIHsKKwllbHNlIHsKIAotCQkgcF9TQ0NCLT5EYXRhTGVuZ3RoIC09IHBfU0NDQi0+U2NjYl9BVEM7Ci0JCSB9CisJCXBfU0NDQi0+RGF0YUxlbmd0aCAtPSBwX1NDQ0ItPlNjY2JfQVRDOworCX0KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBXYWl0IDEgU2Vjb25kCkBAIC03ODI2LDIzICs3MjU1LDIyIEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBGUFRfV2FpdDFTZWNvbmQoVUxPTkcgcF9wb3J0KQorc3RhdGljIHZvaWQgRlBUX1dhaXQxU2Vjb25kKHVuc2lnbmVkIGxvbmcgcF9wb3J0KQogewotICAgVUNIQVIgaTsKKwl1bnNpZ25lZCBjaGFyIGk7CiAKLSAgIGZvcihpPTA7IGkgPCA0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAKLQkgIEZQVF9XYWl0KHBfcG9ydCwgVE9fMjUwbXMpOworCQlGUFRfV2FpdChwX3BvcnQsIFRPXzI1MG1zKTsKIAotCSAgaWYgKChSRF9IQVJQT09OKHBfcG9ydCtocF9zY3NpY3RybF8wKSAmIFNDU0lfUlNUKSkKLQkJIGJyZWFrOworCQlpZiAoKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfc2NzaWN0cmxfMCkgJiBTQ1NJX1JTVCkpCisJCQlicmVhazsKIAotCSAgaWYoKFJEV19IQVJQT09OKChwX3BvcnQraHBfaW50c3RhdCkpICYgU0NBTV9TRUwpKQotCQkgYnJlYWs7Ci0JICB9CisJCWlmICgoUkRXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpKSAmIFNDQU1fU0VMKSkKKwkJCWJyZWFrOworCX0KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBGUFRfV2FpdApAQCAtNzg1MSw0NSArNzI3OSw0MyBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX1dhaXQoVUxPTkcgcF9wb3J0LCBVQ0hBUiBwX2RlbGF5KQorc3RhdGljIHZvaWQgRlBUX1dhaXQodW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgcF9kZWxheSkKIHsKLSAgIFVDSEFSIG9sZF90aW1lcjsKLSAgIFVDSEFSIGdyZWVuX2ZsYWc7CisJdW5zaWduZWQgY2hhciBvbGRfdGltZXI7CisJdW5zaWduZWQgY2hhciBncmVlbl9mbGFnOwogCi0gICBvbGRfdGltZXIgPSBSRF9IQVJQT09OKHBfcG9ydCtocF9zZWx0aW1lb3V0KTsKKwlvbGRfdGltZXIgPSBSRF9IQVJQT09OKHBfcG9ydCArIGhwX3NlbHRpbWVvdXQpOwogCi0gICBncmVlbl9mbGFnPVJEX0hBUlBPT04ocF9wb3J0K2hwX2Nsa2N0cmxfMCk7Ci0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9jbGtjdHJsXzAsIENMS0NUUkxfREVGQVVMVCk7CisJZ3JlZW5fZmxhZyA9IFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfY2xrY3RybF8wKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2Nsa2N0cmxfMCwgQ0xLQ1RSTF9ERUZBVUxUKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfc2VsdGltZW91dCxwX2RlbGF5KTsKLSAgIFdSV19IQVJQT09OKChwX3BvcnQraHBfaW50c3RhdCksIFRJTUVPVVQpOwotICAgV1JXX0hBUlBPT04oKHBfcG9ydCtocF9pbnRlbmEpLCAoRlBUX2RlZmF1bHRfaW50ZW5hICYgflRJTUVPVVQpKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX3NlbHRpbWVvdXQsIHBfZGVsYXkpOworCVdSV19IQVJQT09OKChwX3BvcnQgKyBocF9pbnRzdGF0KSwgVElNRU9VVCk7CisJV1JXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludGVuYSksIChGUFRfZGVmYXVsdF9pbnRlbmEgJiB+VElNRU9VVCkpOwogCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9wb3J0Y3RybF8wLAorCQkgICAoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9wb3J0Y3RybF8wKSB8IFNUQVJUX1RPKSk7CiAKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX3BvcnRjdHJsXzAsCi0JICAoUkRfSEFSUE9PTihwX3BvcnQraHBfcG9ydGN0cmxfMCkgfCBTVEFSVF9UTykpOworCXdoaWxlICghKFJEV19IQVJQT09OKChwX3BvcnQgKyBocF9pbnRzdGF0KSkgJiBUSU1FT1VUKSkgewogCi0gICB3aGlsZSAoIShSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIFRJTUVPVVQpKSB7CisJCWlmICgoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9zY3NpY3RybF8wKSAmIFNDU0lfUlNUKSkKKwkJCWJyZWFrOwogCi0JICBpZiAoKFJEX0hBUlBPT04ocF9wb3J0K2hwX3Njc2ljdHJsXzApICYgU0NTSV9SU1QpKQotCQkgYnJlYWs7CisJCWlmICgoUkRXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludHN0YXQpKSAmIFNDQU1fU0VMKSkKKwkJCWJyZWFrOworCX0KIAotCSAgaWYgKChSRFdfSEFSUE9PTigocF9wb3J0K2hwX2ludHN0YXQpKSAmIFNDQU1fU0VMKSkKLQkJIGJyZWFrOwotCSAgfQorCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfcG9ydGN0cmxfMCwKKwkJICAgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfcG9ydGN0cmxfMCkgJiB+U1RBUlRfVE8pKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfcG9ydGN0cmxfMCwKLQkgIChSRF9IQVJQT09OKHBfcG9ydCtocF9wb3J0Y3RybF8wKSAmIH5TVEFSVF9UTykpOworCVdSV19IQVJQT09OKChwX3BvcnQgKyBocF9pbnRzdGF0KSwgVElNRU9VVCk7CisJV1JXX0hBUlBPT04oKHBfcG9ydCArIGhwX2ludGVuYSksIEZQVF9kZWZhdWx0X2ludGVuYSk7CiAKLSAgIFdSV19IQVJQT09OKChwX3BvcnQraHBfaW50c3RhdCksIFRJTUVPVVQpOwotICAgV1JXX0hBUlBPT04oKHBfcG9ydCtocF9pbnRlbmEpLCBGUFRfZGVmYXVsdF9pbnRlbmEpOworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfY2xrY3RybF8wLCBncmVlbl9mbGFnKTsKIAotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfY2xrY3RybF8wLGdyZWVuX2ZsYWcpOwotCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9zZWx0aW1lb3V0LG9sZF90aW1lcik7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9zZWx0aW1lb3V0LCBvbGRfdGltZXIpOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogRnVuY3Rpb246IEVuYWJsZS9EaXNhYmxlIFdyaXRlIHRvIEVFUFJPTQpAQCAtNzg5OSwyNiArNzMyNSwyNiBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgRlBUX3V0aWxFRVdyaXRlT25PZmYoVUxPTkcgcF9wb3J0LFVDSEFSIHBfbW9kZSkKK3N0YXRpYyB2b2lkIEZQVF91dGlsRUVXcml0ZU9uT2ZmKHVuc2lnbmVkIGxvbmcgcF9wb3J0LCB1bnNpZ25lZCBjaGFyIHBfbW9kZSkKIHsKLSAgIFVDSEFSIGVlX3ZhbHVlOworCXVuc2lnbmVkIGNoYXIgZWVfdmFsdWU7CiAKLSAgIGVlX3ZhbHVlID0gKFVDSEFSKShSRF9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsKSAmIChFWFRfQVJCX0FDSyB8IFNDU0lfVEVSTV9FTkFfSCkpOworCWVlX3ZhbHVlID0KKwkgICAgKHVuc2lnbmVkIGNoYXIpKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCkgJgorCQkJICAgIChFWFRfQVJCX0FDSyB8IFNDU0lfVEVSTV9FTkFfSCkpOwogCi0gICBpZiAocF9tb2RlKQorCWlmIChwX21vZGUpCiAKLQkgIEZQVF91dGlsRUVTZW5kQ21kQWRkcihwX3BvcnQsIEVXRU4sIEVXRU5fQUREUik7CisJCUZQVF91dGlsRUVTZW5kQ21kQWRkcihwX3BvcnQsIEVXRU4sIEVXRU5fQUREUik7CiAKLSAgIGVsc2UKKwllbHNlCiAKKwkJRlBUX3V0aWxFRVNlbmRDbWRBZGRyKHBfcG9ydCwgRVdEUywgRVdEU19BRERSKTsKIAotCSAgRlBUX3V0aWxFRVNlbmRDbWRBZGRyKHBfcG9ydCwgRVdEUywgRVdEU19BRERSKTsKLQotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgKGVlX3ZhbHVlIHwgU0VFX01TKSk7IC8qVHVybiBvZmYgQ1MgKi8KLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsgICAgICAgLypUdXJuIG9mZiBNYXN0ZXIgU2VsZWN0ICovCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCAoZWVfdmFsdWUgfCBTRUVfTVMpKTsJLypUdXJuIG9mZiBDUyAqLworCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOwkvKlR1cm4gb2ZmIE1hc3RlciBTZWxlY3QgKi8KIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBXcml0ZSBFRVBST00KQEAgLTc5MjgsNDYgKzczNTQsNDYgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF91dGlsRUVXcml0ZShVTE9ORyBwX3BvcnQsIFVTSE9SVCBlZV9kYXRhLCBVU0hPUlQgZWVfYWRkcikKK3N0YXRpYyB2b2lkIEZQVF91dGlsRUVXcml0ZSh1bnNpZ25lZCBsb25nIHBfcG9ydCwgdW5zaWduZWQgc2hvcnQgZWVfZGF0YSwKKwkJCSAgICB1bnNpZ25lZCBzaG9ydCBlZV9hZGRyKQogewogCi0gICBVQ0hBUiBlZV92YWx1ZTsKLSAgIFVTSE9SVCBpOworCXVuc2lnbmVkIGNoYXIgZWVfdmFsdWU7CisJdW5zaWduZWQgc2hvcnQgaTsKIAotICAgZWVfdmFsdWUgPSAoVUNIQVIpKChSRF9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsKSAmIChFWFRfQVJCX0FDSyB8IFNDU0lfVEVSTV9FTkFfSCkpfAotCQkgICAoU0VFX01TIHwgU0VFX0NTKSk7CisJZWVfdmFsdWUgPQorCSAgICAodW5zaWduZWQKKwkgICAgIGNoYXIpKChSRF9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwpICYKKwkJICAgIChFWFRfQVJCX0FDSyB8IFNDU0lfVEVSTV9FTkFfSCkpIHwgKFNFRV9NUyB8IFNFRV9DUykpOwogCisJRlBUX3V0aWxFRVNlbmRDbWRBZGRyKHBfcG9ydCwgRUVfV1JJVEUsIGVlX2FkZHIpOwogCisJZWVfdmFsdWUgfD0gKFNFRV9NUyArIFNFRV9DUyk7CiAKLSAgIEZQVF91dGlsRUVTZW5kQ21kQWRkcihwX3BvcnQsIEVFX1dSSVRFLCBlZV9hZGRyKTsKKwlmb3IgKGkgPSAweDgwMDA7IGkgIT0gMDsgaSA+Pj0gMSkgewogCisJCWlmIChpICYgZWVfZGF0YSkKKwkJCWVlX3ZhbHVlIHw9IFNFRV9ETzsKKwkJZWxzZQorCQkJZWVfdmFsdWUgJj0gflNFRV9ETzsKIAotICAgZWVfdmFsdWUgfD0gKFNFRV9NUyArIFNFRV9DUyk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwkJZWVfdmFsdWUgfD0gU0VFX0NMSzsJLyogQ2xvY2sgIGRhdGEhICovCisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwkJZWVfdmFsdWUgJj0gflNFRV9DTEs7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwl9CisJZWVfdmFsdWUgJj0gKEVYVF9BUkJfQUNLIHwgU0NTSV9URVJNX0VOQV9IKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIChlZV92YWx1ZSB8IFNFRV9NUykpOwogCi0gICBmb3IoaSA9IDB4ODAwMDsgaSAhPSAwOyBpPj49MSkgeworCUZQVF9XYWl0KHBfcG9ydCwgVE9fMTBtcyk7CiAKLQkgIGlmIChpICYgZWVfZGF0YSkKLQkgZWVfdmFsdWUgfD0gU0VFX0RPOwotCSAgZWxzZQotCSBlZV92YWx1ZSAmPSB+U0VFX0RPOwotCi0JICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7Ci0JICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7Ci0JICBlZV92YWx1ZSB8PSBTRUVfQ0xLOyAgICAgICAgICAvKiBDbG9jayAgZGF0YSEgKi8KLQkgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKLQkgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKLQkgIGVlX3ZhbHVlICY9IH5TRUVfQ0xLOwotCSAgV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgZWVfdmFsdWUpOwotCSAgV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgZWVfdmFsdWUpOwotCSAgfQotICAgZWVfdmFsdWUgJj0gKEVYVF9BUkJfQUNLIHwgU0NTSV9URVJNX0VOQV9IKTsKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIChlZV92YWx1ZSB8IFNFRV9NUykpOwotCi0gICBGUFRfV2FpdChwX3BvcnQsIFRPXzEwbXMpOwotCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCAoZWVfdmFsdWUgfCBTRUVfTVMgfCBTRUVfQ1MpKTsgLyogU2V0IENTIHRvIEVFUFJPTSAqLwotICAgV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgKGVlX3ZhbHVlIHwgU0VFX01TKSk7ICAgICAgIC8qIFR1cm4gb2ZmIENTICovCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7ICAgICAgIC8qIFR1cm4gb2ZmIE1hc3RlciBTZWxlY3QgKi8KKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIChlZV92YWx1ZSB8IFNFRV9NUyB8IFNFRV9DUykpOwkvKiBTZXQgQ1MgdG8gRUVQUk9NICovCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCAoZWVfdmFsdWUgfCBTRUVfTVMpKTsJLyogVHVybiBvZmYgQ1MgKi8KKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsJLyogVHVybiBvZmYgTWFzdGVyIFNlbGVjdCAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzk3OSwyNSArNzQwNSwyNSBAQAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIFVTSE9SVCBGUFRfdXRpbEVFUmVhZChVTE9ORyBwX3BvcnQsIFVTSE9SVCBlZV9hZGRyKQorc3RhdGljIHVuc2lnbmVkIHNob3J0IEZQVF91dGlsRUVSZWFkKHVuc2lnbmVkIGxvbmcgcF9wb3J0LAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZWVfYWRkcikKIHsKLSAgIFVTSE9SVCBpLCBlZV9kYXRhMSwgZWVfZGF0YTI7CisJdW5zaWduZWQgc2hvcnQgaSwgZWVfZGF0YTEsIGVlX2RhdGEyOwogCiAJaSA9IDA7CiAJZWVfZGF0YTEgPSBGUFRfdXRpbEVFUmVhZE9yZyhwX3BvcnQsIGVlX2FkZHIpOwotCWRvCi0JeworCWRvIHsKIAkJZWVfZGF0YTIgPSBGUFRfdXRpbEVFUmVhZE9yZyhwX3BvcnQsIGVlX2FkZHIpOwogCi0JCWlmKGVlX2RhdGExID09IGVlX2RhdGEyKQotCQkJcmV0dXJuKGVlX2RhdGExKTsKKwkJaWYgKGVlX2RhdGExID09IGVlX2RhdGEyKQorCQkJcmV0dXJuIGVlX2RhdGExOwogCiAJCWVlX2RhdGExID0gZWVfZGF0YTI7CiAJCWkrKzsKIAotCX13aGlsZShpIDwgNCk7CisJfSB3aGlsZSAoaSA8IDQpOwogCi0JcmV0dXJuKGVlX2RhdGExKTsKKwlyZXR1cm4gZWVfZGF0YTE7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04MDA5LDQ1ICs3NDM1LDQ1IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgVVNIT1JUIEZQVF91dGlsRUVSZWFkT3JnKFVMT05HIHBfcG9ydCwgVVNIT1JUIGVlX2FkZHIpCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgRlBUX3V0aWxFRVJlYWRPcmcodW5zaWduZWQgbG9uZyBwX3BvcnQsCisJCQkJCXVuc2lnbmVkIHNob3J0IGVlX2FkZHIpCiB7CiAKLSAgIFVDSEFSIGVlX3ZhbHVlOwotICAgVVNIT1JUIGksIGVlX2RhdGE7CisJdW5zaWduZWQgY2hhciBlZV92YWx1ZTsKKwl1bnNpZ25lZCBzaG9ydCBpLCBlZV9kYXRhOwogCi0gICBlZV92YWx1ZSA9IChVQ0hBUikoKFJEX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwpICYgKEVYVF9BUkJfQUNLIHwgU0NTSV9URVJNX0VOQV9IKSl8Ci0JCSAgIChTRUVfTVMgfCBTRUVfQ1MpKTsKKwllZV92YWx1ZSA9CisJICAgICh1bnNpZ25lZAorCSAgICAgY2hhcikoKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCkgJgorCQkgICAgKEVYVF9BUkJfQUNLIHwgU0NTSV9URVJNX0VOQV9IKSkgfCAoU0VFX01TIHwgU0VFX0NTKSk7CiAKKwlGUFRfdXRpbEVFU2VuZENtZEFkZHIocF9wb3J0LCBFRV9SRUFELCBlZV9hZGRyKTsKIAotICAgRlBUX3V0aWxFRVNlbmRDbWRBZGRyKHBfcG9ydCwgRUVfUkVBRCwgZWVfYWRkcik7CisJZWVfdmFsdWUgfD0gKFNFRV9NUyArIFNFRV9DUyk7CisJZWVfZGF0YSA9IDA7CiAKKwlmb3IgKGkgPSAxOyBpIDw9IDE2OyBpKyspIHsKIAotICAgZWVfdmFsdWUgfD0gKFNFRV9NUyArIFNFRV9DUyk7Ci0gICBlZV9kYXRhID0gMDsKKwkJZWVfdmFsdWUgfD0gU0VFX0NMSzsJLyogQ2xvY2sgIGRhdGEhICovCisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwkJZWVfdmFsdWUgJj0gflNFRV9DTEs7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKIAotICAgZm9yKGkgPSAxOyBpIDw9IDE2OyBpKyspIHsKKwkJZWVfZGF0YSA8PD0gMTsKIAotCSAgZWVfdmFsdWUgfD0gU0VFX0NMSzsgICAgICAgICAgLyogQ2xvY2sgIGRhdGEhICovCi0JICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7Ci0JICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7Ci0JICBlZV92YWx1ZSAmPSB+U0VFX0NMSzsKLQkgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKLQkgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwkJaWYgKFJEX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCkgJiBTRUVfREkpCisJCQllZV9kYXRhIHw9IDE7CisJfQogCi0JICBlZV9kYXRhIDw8PSAxOworCWVlX3ZhbHVlICY9IH4oU0VFX01TICsgU0VFX0NTKTsKKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIChlZV92YWx1ZSB8IFNFRV9NUykpOwkvKlR1cm4gb2ZmIENTICovCisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCBlZV92YWx1ZSk7CS8qVHVybiBvZmYgTWFzdGVyIFNlbGVjdCAqLwogCi0JICBpZiAoUkRfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCkgJiBTRUVfREkpCi0JCSBlZV9kYXRhIHw9IDE7Ci0JICB9Ci0KLSAgIGVlX3ZhbHVlICY9IH4oU0VFX01TICsgU0VFX0NTKTsKLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIChlZV92YWx1ZSB8IFNFRV9NUykpOyAvKlR1cm4gb2ZmIENTICovCi0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7ICAgLypUdXJuIG9mZiBNYXN0ZXIgU2VsZWN0ICovCi0KLSAgIHJldHVybihlZV9kYXRhKTsKKwlyZXR1cm4gZWVfZGF0YTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIEZ1bmN0aW9uOiBTZW5kIEVFIGNvbW1hbmQgYW5kIEFkZHJlc3MgdG8gdGhlIEVFUFJPTQpAQCAtODA1NywxMDEgKzc0ODMsOTUgQEAKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIEZQVF91dGlsRUVTZW5kQ21kQWRkcihVTE9ORyBwX3BvcnQsIFVDSEFSIGVlX2NtZCwgVVNIT1JUIGVlX2FkZHIpCitzdGF0aWMgdm9pZCBGUFRfdXRpbEVFU2VuZENtZEFkZHIodW5zaWduZWQgbG9uZyBwX3BvcnQsIHVuc2lnbmVkIGNoYXIgZWVfY21kLAorCQkJCSAgdW5zaWduZWQgc2hvcnQgZWVfYWRkcikKIHsKLSAgIFVDSEFSIGVlX3ZhbHVlOwotICAgVUNIQVIgbmFycm93X2ZsZzsKKwl1bnNpZ25lZCBjaGFyIGVlX3ZhbHVlOworCXVuc2lnbmVkIGNoYXIgbmFycm93X2ZsZzsKIAotICAgVVNIT1JUIGk7CisJdW5zaWduZWQgc2hvcnQgaTsKIAorCW5hcnJvd19mbGcgPQorCSAgICAodW5zaWduZWQgY2hhcikoUkRfSEFSUE9PTihwX3BvcnQgKyBocF9wYWdlX2N0cmwpICYKKwkJCSAgICBOQVJST1dfU0NTSV9DQVJEKTsKIAotICAgbmFycm93X2ZsZz0gKFVDSEFSKShSRF9IQVJQT09OKHBfcG9ydCtocF9wYWdlX2N0cmwpICYgTkFSUk9XX1NDU0lfQ0FSRCk7CisJZWVfdmFsdWUgPSBTRUVfTVM7CisJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCBlZV92YWx1ZSk7CiAKKwllZV92YWx1ZSB8PSBTRUVfQ1M7CS8qIFNldCBDUyB0byBFRVBST00gKi8KKwlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKIAotICAgZWVfdmFsdWUgPSBTRUVfTVM7Ci0gICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7CisJZm9yIChpID0gMHgwNDsgaSAhPSAwOyBpID4+PSAxKSB7CiAKLSAgIGVlX3ZhbHVlIHw9IFNFRV9DUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBDUyB0byBFRVBST00gKi8KLSAgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwkJaWYgKGkgJiBlZV9jbWQpCisJCQllZV92YWx1ZSB8PSBTRUVfRE87CisJCWVsc2UKKwkJCWVlX3ZhbHVlICY9IH5TRUVfRE87CiAKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCBlZV92YWx1ZSk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOworCQllZV92YWx1ZSB8PSBTRUVfQ0xLOwkvKiBDbG9jayAgZGF0YSEgKi8KKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCBlZV92YWx1ZSk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOworCQllZV92YWx1ZSAmPSB+U0VFX0NMSzsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCBlZV92YWx1ZSk7CisJCVdSX0hBUlBPT04ocF9wb3J0ICsgaHBfZWVfY3RybCwgZWVfdmFsdWUpOworCX0KIAotICAgZm9yKGkgPSAweDA0OyBpICE9IDA7IGk+Pj0xKSB7CisJaWYgKG5hcnJvd19mbGcpCisJCWkgPSAweDAwODA7CiAKLQkgIGlmIChpICYgZWVfY21kKQotCQkgZWVfdmFsdWUgfD0gU0VFX0RPOwotCSAgZWxzZQotCQkgZWVfdmFsdWUgJj0gflNFRV9ETzsKKwllbHNlCisJCWkgPSAweDAyMDA7CiAKLQkgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKLQkgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKLQkgIGVlX3ZhbHVlIHw9IFNFRV9DTEs7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsb2NrICBkYXRhISAqLwotCSAgV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgZWVfdmFsdWUpOwotCSAgV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgZWVfdmFsdWUpOwotCSAgZWVfdmFsdWUgJj0gflNFRV9DTEs7Ci0JICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7Ci0JICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7Ci0JICB9CisJd2hpbGUgKGkgIT0gMCkgewogCisJCWlmIChpICYgZWVfYWRkcikKKwkJCWVlX3ZhbHVlIHw9IFNFRV9ETzsKKwkJZWxzZQorCQkJZWVfdmFsdWUgJj0gflNFRV9ETzsKIAotICAgaWYgKG5hcnJvd19mbGcpCi0JICBpID0gMHgwMDgwOworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCBlZV92YWx1ZSk7CisJCWVlX3ZhbHVlIHw9IFNFRV9DTEs7CS8qIENsb2NrICBkYXRhISAqLworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCBlZV92YWx1ZSk7CisJCWVlX3ZhbHVlICY9IH5TRUVfQ0xLOworCQlXUl9IQVJQT09OKHBfcG9ydCArIGhwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKKwkJV1JfSEFSUE9PTihwX3BvcnQgKyBocF9lZV9jdHJsLCBlZV92YWx1ZSk7CiAKLSAgIGVsc2UKLQkgIGkgPSAweDAyMDA7Ci0KLQotICAgd2hpbGUgKGkgIT0gMCkgewotCi0JICBpZiAoaSAmIGVlX2FkZHIpCi0JCSBlZV92YWx1ZSB8PSBTRUVfRE87Ci0JICBlbHNlCi0JCSBlZV92YWx1ZSAmPSB+U0VFX0RPOwotCi0JICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7Ci0JICBXUl9IQVJQT09OKHBfcG9ydCtocF9lZV9jdHJsLCBlZV92YWx1ZSk7Ci0JICBlZV92YWx1ZSB8PSBTRUVfQ0xLOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9jayAgZGF0YSEgKi8KLQkgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKLQkgIFdSX0hBUlBPT04ocF9wb3J0K2hwX2VlX2N0cmwsIGVlX3ZhbHVlKTsKLQkgIGVlX3ZhbHVlICY9IH5TRUVfQ0xLOwotCSAgV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgZWVfdmFsdWUpOwotCSAgV1JfSEFSUE9PTihwX3BvcnQraHBfZWVfY3RybCwgZWVfdmFsdWUpOwotCi0JICBpID4+PSAxOwotCSAgfQorCQlpID4+PSAxOworCX0KIH0KIAotc3RhdGljIFVTSE9SVCBGUFRfQ2FsY0NyYzE2KFVDSEFSIGJ1ZmZlcltdKQorc3RhdGljIHVuc2lnbmVkIHNob3J0IEZQVF9DYWxjQ3JjMTYodW5zaWduZWQgY2hhciBidWZmZXJbXSkKIHsKLSAgIFVTSE9SVCBjcmM9MDsKLQlpbnQgaSxqOwotICAgVVNIT1JUIGNoOwotICAgZm9yIChpPTA7IGkgPCBJRF9TVFJJTkdfTEVOR1RIOyBpKyspCi0gICB7Ci0gICAgICBjaCA9IChVU0hPUlQpIGJ1ZmZlcltpXTsKLQkgICBmb3Ioaj0wOyBqIDwgODsgaisrKQotCSAgIHsKLQkJICAgaWYgKChjcmMgXiBjaCkgJiAxKQotICAgICAgICAgICAgY3JjID0gKGNyYyA+PiAxKSBeIENSQ01BU0s7Ci0JCSAgIGVsc2UKLSAgICAgICAgICAgIGNyYyA+Pj0gMTsKLQkJICAgY2ggPj49IDE7Ci0JICAgfQotICAgfQotCXJldHVybihjcmMpOworCXVuc2lnbmVkIHNob3J0IGNyYyA9IDA7CisJaW50IGksIGo7CisJdW5zaWduZWQgc2hvcnQgY2g7CisJZm9yIChpID0gMDsgaSA8IElEX1NUUklOR19MRU5HVEg7IGkrKykgeworCQljaCA9ICh1bnNpZ25lZCBzaG9ydClidWZmZXJbaV07CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWlmICgoY3JjIF4gY2gpICYgMSkKKwkJCQljcmMgPSAoY3JjID4+IDEpIF4gQ1JDTUFTSzsKKwkJCWVsc2UKKwkJCQljcmMgPj49IDE7CisJCQljaCA+Pj0gMTsKKwkJfQorCX0KKwlyZXR1cm4gY3JjOwogfQogCi1zdGF0aWMgVUNIQVIgRlBUX0NhbGNMcmMoVUNIQVIgYnVmZmVyW10pCitzdGF0aWMgdW5zaWduZWQgY2hhciBGUFRfQ2FsY0xyYyh1bnNpZ25lZCBjaGFyIGJ1ZmZlcltdKQogewogCWludCBpOwotCVVDSEFSIGxyYzsKKwl1bnNpZ25lZCBjaGFyIGxyYzsKIAlscmMgPSAwOwotCWZvcihpID0gMDsgaSA8IElEX1NUUklOR19MRU5HVEg7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgSURfU1RSSU5HX0xFTkdUSDsgaSsrKQogCQlscmMgXj0gYnVmZmVyW2ldOwotCXJldHVybihscmMpOworCXJldHVybiBscmM7CiB9CiAKLQotCiAvKgogICBUaGUgZm9sbG93aW5nIGlubGluZSBkZWZpbml0aW9ucyBhdm9pZCB0eXBlIGNvbmZsaWN0cy4KICovCkBAIC04MTU5LDUxICs3NTc5LDQ5IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIKIEZsYXNoUG9pbnRfX1Byb2JlSG9zdEFkYXB0ZXIoc3RydWN0IEZsYXNoUG9pbnRfSW5mbyAqRmxhc2hQb2ludEluZm8pCiB7Ci0gIHJldHVybiBGbGFzaFBvaW50X1Byb2JlSG9zdEFkYXB0ZXIoKFBTQ0NCTUdSX0lORk8pIEZsYXNoUG9pbnRJbmZvKTsKKwlyZXR1cm4gRmxhc2hQb2ludF9Qcm9iZUhvc3RBZGFwdGVyKChzdHJ1Y3Qgc2NjYl9tZ3JfaW5mbyAqKQorCQkJCQkgICBGbGFzaFBvaW50SW5mbyk7CiB9CiAKLQogc3RhdGljIGlubGluZSBGbGFzaFBvaW50X0NhcmRIYW5kbGVfVAogRmxhc2hQb2ludF9fSGFyZHdhcmVSZXNldEhvc3RBZGFwdGVyKHN0cnVjdCBGbGFzaFBvaW50X0luZm8gKkZsYXNoUG9pbnRJbmZvKQogewotICByZXR1cm4gRmxhc2hQb2ludF9IYXJkd2FyZVJlc2V0SG9zdEFkYXB0ZXIoKFBTQ0NCTUdSX0lORk8pIEZsYXNoUG9pbnRJbmZvKTsKKwlyZXR1cm4gRmxhc2hQb2ludF9IYXJkd2FyZVJlc2V0SG9zdEFkYXB0ZXIoKHN0cnVjdCBzY2NiX21ncl9pbmZvICopCisJCQkJCQkgICBGbGFzaFBvaW50SW5mbyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogRmxhc2hQb2ludF9fUmVsZWFzZUhvc3RBZGFwdGVyKEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9UIENhcmRIYW5kbGUpCiB7Ci0gIEZsYXNoUG9pbnRfUmVsZWFzZUhvc3RBZGFwdGVyKENhcmRIYW5kbGUpOworCUZsYXNoUG9pbnRfUmVsZWFzZUhvc3RBZGFwdGVyKENhcmRIYW5kbGUpOwogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZAotRmxhc2hQb2ludF9fU3RhcnRDQ0IoRmxhc2hQb2ludF9DYXJkSGFuZGxlX1QgQ2FyZEhhbmRsZSwgc3RydWN0IEJ1c0xvZ2ljX0NDQiAqQ0NCKQorRmxhc2hQb2ludF9fU3RhcnRDQ0IoRmxhc2hQb2ludF9DYXJkSGFuZGxlX1QgQ2FyZEhhbmRsZSwKKwkJICAgICBzdHJ1Y3QgQnVzTG9naWNfQ0NCICpDQ0IpCiB7Ci0gIEZsYXNoUG9pbnRfU3RhcnRDQ0IoQ2FyZEhhbmRsZSwgKFBTQ0NCKSBDQ0IpOworCUZsYXNoUG9pbnRfU3RhcnRDQ0IoQ2FyZEhhbmRsZSwgKHN0cnVjdCBzY2NiICopQ0NCKTsKIH0KIAotCiBzdGF0aWMgaW5saW5lIHZvaWQKLUZsYXNoUG9pbnRfX0Fib3J0Q0NCKEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9UIENhcmRIYW5kbGUsIHN0cnVjdCBCdXNMb2dpY19DQ0IgKkNDQikKK0ZsYXNoUG9pbnRfX0Fib3J0Q0NCKEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9UIENhcmRIYW5kbGUsCisJCSAgICAgc3RydWN0IEJ1c0xvZ2ljX0NDQiAqQ0NCKQogewotICBGbGFzaFBvaW50X0Fib3J0Q0NCKENhcmRIYW5kbGUsIChQU0NDQikgQ0NCKTsKKwlGbGFzaFBvaW50X0Fib3J0Q0NCKENhcmRIYW5kbGUsIChzdHJ1Y3Qgc2NjYiAqKUNDQik7CiB9CiAKLQogc3RhdGljIGlubGluZSBib29sZWFuCiBGbGFzaFBvaW50X19JbnRlcnJ1cHRQZW5kaW5nKEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9UIENhcmRIYW5kbGUpCiB7Ci0gIHJldHVybiBGbGFzaFBvaW50X0ludGVycnVwdFBlbmRpbmcoQ2FyZEhhbmRsZSk7CisJcmV0dXJuIEZsYXNoUG9pbnRfSW50ZXJydXB0UGVuZGluZyhDYXJkSGFuZGxlKTsKIH0KIAotCiBzdGF0aWMgaW5saW5lIGludAogRmxhc2hQb2ludF9fSGFuZGxlSW50ZXJydXB0KEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9UIENhcmRIYW5kbGUpCiB7Ci0gIHJldHVybiBGbGFzaFBvaW50X0hhbmRsZUludGVycnVwdChDYXJkSGFuZGxlKTsKKwlyZXR1cm4gRmxhc2hQb2ludF9IYW5kbGVJbnRlcnJ1cHQoQ2FyZEhhbmRsZSk7CiB9CiAKLQogI2RlZmluZSBGbGFzaFBvaW50X1Byb2JlSG9zdEFkYXB0ZXIJICAgIEZsYXNoUG9pbnRfX1Byb2JlSG9zdEFkYXB0ZXIKICNkZWZpbmUgRmxhc2hQb2ludF9IYXJkd2FyZVJlc2V0SG9zdEFkYXB0ZXIgRmxhc2hQb2ludF9fSGFyZHdhcmVSZXNldEhvc3RBZGFwdGVyCiAjZGVmaW5lIEZsYXNoUG9pbnRfUmVsZWFzZUhvc3RBZGFwdGVyCSAgICBGbGFzaFBvaW50X19SZWxlYXNlSG9zdEFkYXB0ZXIKQEAgLTgyMTIsOSArNzYzMCw3IEBACiAjZGVmaW5lIEZsYXNoUG9pbnRfSW50ZXJydXB0UGVuZGluZwkgICAgRmxhc2hQb2ludF9fSW50ZXJydXB0UGVuZGluZwogI2RlZmluZSBGbGFzaFBvaW50X0hhbmRsZUludGVycnVwdAkgICAgRmxhc2hQb2ludF9fSGFuZGxlSW50ZXJydXB0CiAKLQotI2Vsc2UgIC8qIENPTkZJR19TQ1NJX09NSVRfRkxBU0hQT0lOVCAqLwotCisjZWxzZQkJCQkvKiBDT05GSUdfU0NTSV9PTUlUX0ZMQVNIUE9JTlQgKi8KIAogLyoKICAgRGVmaW5lIHByb3RvdHlwZXMgZm9yIHRoZSBGbGFzaFBvaW50IFNDQ0IgTWFuYWdlciBGdW5jdGlvbnMuCkBAIC04MjIyLDEyICs3NjM4LDExIEBACiAKIGV4dGVybiB1bnNpZ25lZCBjaGFyIEZsYXNoUG9pbnRfUHJvYmVIb3N0QWRhcHRlcihzdHJ1Y3QgRmxhc2hQb2ludF9JbmZvICopOwogZXh0ZXJuIEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9UCi0gICAgICAgRmxhc2hQb2ludF9IYXJkd2FyZVJlc2V0SG9zdEFkYXB0ZXIoc3RydWN0IEZsYXNoUG9pbnRfSW5mbyAqKTsKK0ZsYXNoUG9pbnRfSGFyZHdhcmVSZXNldEhvc3RBZGFwdGVyKHN0cnVjdCBGbGFzaFBvaW50X0luZm8gKik7CiBleHRlcm4gdm9pZCBGbGFzaFBvaW50X1N0YXJ0Q0NCKEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9ULCBzdHJ1Y3QgQnVzTG9naWNfQ0NCICopOwogZXh0ZXJuIGludCBGbGFzaFBvaW50X0Fib3J0Q0NCKEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9ULCBzdHJ1Y3QgQnVzTG9naWNfQ0NCICopOwogZXh0ZXJuIGJvb2xlYW4gRmxhc2hQb2ludF9JbnRlcnJ1cHRQZW5kaW5nKEZsYXNoUG9pbnRfQ2FyZEhhbmRsZV9UKTsKIGV4dGVybiBpbnQgRmxhc2hQb2ludF9IYW5kbGVJbnRlcnJ1cHQoRmxhc2hQb2ludF9DYXJkSGFuZGxlX1QpOwogZXh0ZXJuIHZvaWQgRmxhc2hQb2ludF9SZWxlYXNlSG9zdEFkYXB0ZXIoRmxhc2hQb2ludF9DYXJkSGFuZGxlX1QpOwogCi0KLSNlbmRpZiAvKiBDT05GSUdfU0NTSV9PTUlUX0ZMQVNIUE9JTlQgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfU0NTSV9PTUlUX0ZMQVNIUE9JTlQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggM2M2MDZjZi4uNDAzNTkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTM3OSw2ICszNzksMTQgQEAKIGNvbmZpZyBTQ1NJX0FBQ1JBSUQKIAl0cmlzdGF0ZSAiQWRhcHRlYyBBQUNSQUlEIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTQ1NJICYmIFBDSQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgdmFyaWV0eSBvZiBEZWxsLCBIUCwgQWRhcHRlYywgSUJNIGFuZAorCSAgSUNQIHN0b3JhZ2UgcHJvZHVjdHMuIEZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb2R1Y3RzLCByZWZlcgorCSAgdG8gPGZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL2FhY3JhaWQudHh0Pi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYWFjcmFpZC4KKwogCiBzb3VyY2UgImRyaXZlcnMvc2NzaS9haWM3eHh4L0tjb25maWcuYWljN3h4eCIKIApAQCAtNTg3LDEwICs1OTUsMTAgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBTQ1NJX1NBVEFfVklURVNTRQotCXRyaXN0YXRlICJWSVRFU1NFIFZTQy03MTc0IFNBVEEgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiVklURVNTRSBWU0MtNzE3NCAvIElOVEVMIDMxMjQ0IFNBVEEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNDU0lfU0FUQSAmJiBQQ0kKIAloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIFZpdGVzc2UgVlNDNzE3NCBTZXJpYWwgQVRBLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBWaXRlc3NlIFZTQzcxNzQgYW5kIEludGVsIDMxMjQ0IFNlcmlhbCBBVEEuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCAzMjBlNzY1Li5lNTEzYzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC0xMTcsNyArMTE3LDYgQEAKIG9iai0kKENPTkZJR19TQ1NJX0lNTSkJCSs9IGltbS5vCiBvYmotJChDT05GSUdfSkFaWl9FU1ApCQkrPSBOQ1I1M0M5eC5vCWphenpfZXNwLm8KIG9iai0kKENPTkZJR19TVU4zWF9FU1ApCQkrPSBOQ1I1M0M5eC5vCXN1bjN4X2VzcC5vCi1vYmotJChDT05GSUdfU0NTSV9ERUJVRykJKz0gc2NzaV9kZWJ1Zy5vCiBvYmotJChDT05GSUdfU0NTSV9GQ0FMKQkJKz0gZmNhbC5vCiBvYmotJChDT05GSUdfU0NTSV9MQVNJNzAwKQkrPSA1M2M3MDAubyBsYXNpNzAwLm8KIG9iai0kKENPTkZJR19TQ1NJX05TUDMyKQkrPSBuc3AzMi5vCkBAIC0xNDgsNiArMTQ3LDkgQEAKIG9iai0kKENPTkZJR19DSFJfREVWX1NHKQkrPSBzZy5vCiBvYmotJChDT05GSUdfQ0hSX0RFVl9TQ0gpCSs9IGNoLm8KIAorIyBUaGlzIGdvZXMgbGFzdCwgc28gdGhhdCAicmVhbCIgc2NzaSBkZXZpY2VzIHByb2JlIGVhcmxpZXIKK29iai0kKENPTkZJR19TQ1NJX0RFQlVHKQkrPSBzY3NpX2RlYnVnLm8KKwogc2NzaV9tb2QteQkJCSs9IHNjc2kubyBob3N0cy5vIHNjc2lfaW9jdGwubyBjb25zdGFudHMubyBcCiAJCQkJICAgc2NzaWNhbS5vIHNjc2lfZXJyb3IubyBzY3NpX2xpYi5vIFwKIAkJCQkgICBzY3NpX3NjYW4ubyBzY3NpX3N5c2ZzLm8gXApAQCAtMTYzLDcgKzE2NSw3IEBACiBDRkxBR1NfbmNyNTNjOHh4Lm8JOj0gJChuY3I1M2M4eHgtZmxhZ3MteSkgJChuY3I1M2M4eHgtZmxhZ3MtbSkKIHphbG9uN3h4LW9ianMJOj0gemFsb24ubyBuY3I1M2M4eHgubwogTkNSX1E3MjBfbW9kLW9ianMJOj0gTkNSX1E3MjAubyBuY3I1M2M4eHgubwotbGliYXRhLW9ianMJOj0gbGliYXRhLWNvcmUubyBsaWJhdGEtc2NzaS5vCitsaWJhdGEtb2Jqcwk6PSBsaWJhdGEtY29yZS5vIGxpYmF0YS1zY3NpLm8gbGliYXRhLWJtZG1hLm8KIG9rdGFnb25fZXNwX21vZC1vYmpzCTo9IG9rdGFnb25fZXNwLm8gb2t0YWdvbl9pby5vCiAKICMgRmlsZXMgZ2VuZXJhdGVkIHRoYXQgc2hhbGwgYmUgcmVtb3ZlZCB1cG9uIG1ha2UgY2xlYW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1JfRDcwMC5jIGIvZHJpdmVycy9zY3NpL05DUl9ENzAwLmMKaW5kZXggZTk5M2E3Yi4uNTc3ZTYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL05DUl9ENzAwLmMKKysrIGIvZHJpdmVycy9zY3NpL05DUl9ENzAwLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXJldHVybiAwOwogCiAgZGV0ZWN0X2ZhaWxlZDoKLQlyZWxlYXNlX3JlZ2lvbihob3N0LT5iYXNlLCA2NCk7CisJcmVsZWFzZV9yZWdpb24ocmVnaW9uLCA2NCk7CiAgcmVnaW9uX2ZhaWxlZDoKIAlrZnJlZShob3N0ZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaAppbmRleCAyZDQzMGI3Li45Y2U3MDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCkBAIC05OTcsNyArOTk3LDcgQEAKIAlpbnQJCQltYXhpbXVtX251bV9waHlzaWNhbHM7CiAJaW50CQkJbWF4aW11bV9udW1fY2hhbm5lbHM7CiAJc3RydWN0IGZzYV9kZXZfaW5mbwkqZnNhX2RldjsKLQlwaWRfdAkJCXRocmVhZF9waWQ7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CiAJaW50CQkJY2FyZHR5cGU7CiAJCiAJLyoKQEAgLTEwMTcsNyArMTAxNyw2IEBACiAJICoJQUlGIHRocmVhZCBzdGF0ZXMKIAkgKi8KIAl1MzIJCQlhaWZfdGhyZWFkOwotCXN0cnVjdCBjb21wbGV0aW9uCWFpZl9jb21wbGV0aW9uOwogCXN0cnVjdCBhYWNfYWRhcHRlcl9pbmZvIGFkYXB0ZXJfaW5mbzsKIAlzdHJ1Y3QgYWFjX3N1cHBsZW1lbnRfYWRhcHRlcl9pbmZvIHN1cHBsZW1lbnRfYWRhcHRlcl9pbmZvOwogCS8qIFRoZXNlIGFyZSBpbiBhZGFwdGVyIGluZm8gYnV0IHRoZXkgYXJlIGluIHRoZSBpbyBmbG93IHNvCkBAIC0xNzk3LDcgKzE3OTYsNyBAQAogdW5zaWduZWQgaW50IGFhY19yZXNwb25zZV9ub3JtYWwoc3RydWN0IGFhY19xdWV1ZSAqIHEpOwogdW5zaWduZWQgaW50IGFhY19jb21tYW5kX25vcm1hbChzdHJ1Y3QgYWFjX3F1ZXVlICogcSk7CiB1bnNpZ25lZCBpbnQgYWFjX2ludHJfbm9ybWFsKHN0cnVjdCBhYWNfZGV2ICogZGV2LCB1MzIgSW5kZXgpOwotaW50IGFhY19jb21tYW5kX3RocmVhZChzdHJ1Y3QgYWFjX2RldiAqIGRldik7CitpbnQgYWFjX2NvbW1hbmRfdGhyZWFkKHZvaWQgKmRhdGEpOwogaW50IGFhY19jbG9zZV9maWJfY29udGV4dChzdHJ1Y3QgYWFjX2RldiAqIGRldiwgc3RydWN0IGFhY19maWJfY29udGV4dCAqZmliY3R4KTsKIGludCBhYWNfZmliX2FkYXB0ZXJfY29tcGxldGUoc3RydWN0IGZpYiAqIGZpYnB0ciwgdW5zaWduZWQgc2hvcnQgc2l6ZSk7CiBzdHJ1Y3QgYWFjX2RyaXZlcl9pZGVudCogYWFjX2dldF9kcml2ZXJfaWRlbnQoaW50IGRldnR5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1pbml0LmMKaW5kZXggMTYyOGQwOS4uMTkzOTc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbWluaXQuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21taW5pdC5jCkBAIC00MzMsNyArNDMzLDYgQEAKIAl9CiAJCQogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZpYl9saXN0KTsKLQlpbml0X2NvbXBsZXRpb24oJmRldi0+YWlmX2NvbXBsZXRpb24pOwogCiAJcmV0dXJuIGRldjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2NvbW1zdXAuYwppbmRleCA2MDlmZDE5Li5jN2Y4MGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9jb21tc3VwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FhY3JhaWQvY29tbXN1cC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KQEAgLTEwNDUsOCArMTA0Niw5IEBACiAgKgltb3JlIEZJQnMuCiAgKi8KICAKLWludCBhYWNfY29tbWFuZF90aHJlYWQoc3RydWN0IGFhY19kZXYgKiBkZXYpCitpbnQgYWFjX2NvbW1hbmRfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IGFhY19kZXYgKmRldiA9IGRhdGE7CiAJc3RydWN0IGh3X2ZpYiAqaHdfZmliLCAqaHdfbmV3ZmliOwogCXN0cnVjdCBmaWIgKmZpYiwgKm5ld2ZpYjsKIAlzdHJ1Y3QgYWFjX2ZpYl9jb250ZXh0ICpmaWJjdHg7CkBAIC0xMDU4LDEyICsxMDYwLDcgQEAKIAkgKi8KIAlpZiAoZGV2LT5haWZfdGhyZWFkKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKgotCSAqCVNldCB1cCB0aGUgbmFtZSB0aGF0IHdpbGwgYXBwZWFyIGluICdwcycKLQkgKglzdG9yZWQgaW4gIHRhc2tfc3RydWN0LmNvbW1bMTZdLgotCSAqLwotCWRhZW1vbml6ZSgiYWFjcmFpZCIpOwotCWFsbG93X3NpZ25hbChTSUdLSUxMKTsKKwogCS8qCiAJICoJTGV0IHRoZSBEUEMga25vdyBpdCBoYXMgYSBwbGFjZSB0byBzZW5kIHRoZSBBSUYncyB0by4KIAkgKi8KQEAgLTEyNjYsMTMgKzEyNjMsMTIgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShkZXYtPnF1ZXVlcy0+cXVldWVbSG9zdE5vcm1DbWRRdWV1ZV0ubG9jaywgZmxhZ3MpOwogCQlzY2hlZHVsZSgpOwogCi0JCWlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCWlmIChkZXYtPnF1ZXVlcykKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+cXVldWVzLT5xdWV1ZVtIb3N0Tm9ybUNtZFF1ZXVlXS5jbWRyZWFkeSwgJndhaXQpOwogCWRldi0+YWlmX3RocmVhZCA9IDA7Ci0JY29tcGxldGVfYW5kX2V4aXQoJmRldi0+YWlmX2NvbXBsZXRpb24sIDApOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2xpbml0LmMKaW5kZXggMjcxNjE3OC4uYzI1OTYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvbGluaXQuYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9saW5pdC5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtODUwLDEwICs4NTEsMTAgQEAKIAkvKgogCSAqCVN0YXJ0IGFueSBrZXJuZWwgdGhyZWFkcyBuZWVkZWQKIAkgKi8KLQlhYWMtPnRocmVhZF9waWQgPSBrZXJuZWxfdGhyZWFkKChpbnQgKCopKHZvaWQgKikpYWFjX2NvbW1hbmRfdGhyZWFkLAotCSAgYWFjLCAwKTsKLQlpZiAoYWFjLT50aHJlYWRfcGlkIDwgMCkgeworCWFhYy0+dGhyZWFkID0ga3RocmVhZF9ydW4oYWFjX2NvbW1hbmRfdGhyZWFkLCBhYWMsIEFBQ19EUklWRVJOQU1FKTsKKwlpZiAoSVNfRVJSKGFhYy0+dGhyZWFkKSkgewogCQlwcmludGsoS0VSTl9FUlIgImFhY3JhaWQ6IFVuYWJsZSB0byBjcmVhdGUgY29tbWFuZCB0aHJlYWQuXG4iKTsKKwkJZXJyb3IgPSBQVFJfRVJSKGFhYy0+dGhyZWFkKTsKIAkJZ290byBvdXRfZGVpbml0OwogCX0KIApAQCAtOTM0LDkgKzkzNSw3IEBACiAJcmV0dXJuIDA7CiAKICBvdXRfZGVpbml0OgotCWtpbGxfcHJvYyhhYWMtPnRocmVhZF9waWQsIFNJR0tJTEwsIDApOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFhYy0+YWlmX2NvbXBsZXRpb24pOwotCisJa3RocmVhZF9zdG9wKGFhYy0+dGhyZWFkKTsKIAlhYWNfc2VuZF9zaHV0ZG93bihhYWMpOwogCWFhY19hZGFwdGVyX2Rpc2FibGVfaW50KGFhYyk7CiAJZnJlZV9pcnEocGRldi0+aXJxLCBhYWMpOwpAQCAtOTcwLDggKzk2OSw3IEBACiAKIAlzY3NpX3JlbW92ZV9ob3N0KHNob3N0KTsKIAotCWtpbGxfcHJvYyhhYWMtPnRocmVhZF9waWQsIFNJR0tJTEwsIDApOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFhYy0+YWlmX2NvbXBsZXRpb24pOworCWt0aHJlYWRfc3RvcChhYWMtPnRocmVhZCk7CiAKIAlhYWNfc2VuZF9zaHV0ZG93bihhYWMpOwogCWFhY19hZGFwdGVyX2Rpc2FibGVfaW50KGFhYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwppbmRleCBjYjJlZTI1Li5kZTgwY2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKQEAgLTEyNjAsMTYgKzEyNjAsMTUgQEAKICAqIFJlc2V0IHRoZSBidXMKICAqCiAgKi8KLXN0YXRpYyBpbnQgYWhhMTUyeF9idXNfcmVzZXQoU2NzaV9DbW5kICpTQ3BudCkKK3N0YXRpYyBpbnQgYWhhMTUyeF9idXNfcmVzZXRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCkKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCA9IFNDcG50LT5kZXZpY2UtPmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCURPX0xPQ0soZmxhZ3MpOwogCiAjaWYgZGVmaW5lZChBSEExNTJYX0RFQlVHKQogCWlmKEhPU1REQVRBKHNocG50KS0+ZGVidWcgJiBkZWJ1Z19laCkgewotCQlwcmludGsoREVCVUdfTEVBRCAiYWhhMTUyeF9idXNfcmVzZXQoJXApIiwgQ01ESU5GTyhTQ3BudCksIFNDcG50KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNjc2klZDogYnVzIHJlc2V0Iiwgc2hwbnQtPmhvc3Rfbm8pOwogCQlzaG93X3F1ZXVlcyhzaHBudCk7CiAJfQogI2VuZGlmCkBAIC0xMjc3LDE0ICsxMjc2LDE0IEBACiAJZnJlZV9oYXJkX3Jlc2V0X1NDcyhzaHBudCwgJklTU1VFX1NDKTsKIAlmcmVlX2hhcmRfcmVzZXRfU0NzKHNocG50LCAmRElTQ09OTkVDVEVEX1NDKTsKIAotCURQUklOVEsoZGVidWdfZWgsIERFQlVHX0xFQUQgInJlc2V0dGluZyBidXNcbiIsIENNRElORk8oU0NwbnQpKTsKKwlEUFJJTlRLKGRlYnVnX2VoLCBLRVJOX0RFQlVHICJzY3NpJWQ6IHJlc2V0dGluZyBidXNcbiIsIHNocG50LT5ob3N0X25vKTsKIAogCVNFVFBPUlQoU0NTSVNFUSwgU0NTSVJTVE8pOwogCW1kZWxheSgyNTYpOwogCVNFVFBPUlQoU0NTSVNFUSwgMCk7CiAJbWRlbGF5KERFTEFZKTsKIAotCURQUklOVEsoZGVidWdfZWgsIERFQlVHX0xFQUQgImJ1cyByZXNldHRlZFxuIiwgQ01ESU5GTyhTQ3BudCkpOworCURQUklOVEsoZGVidWdfZWgsIEtFUk5fREVCVUcgInNjc2klZDogYnVzIHJlc2V0dGVkXG4iLCBzaHBudC0+aG9zdF9ubyk7CiAKIAlzZXR1cF9leHBlY3RlZF9pbnRlcnJ1cHRzKHNocG50KTsKIAlpZihIT1NUREFUQShzaHBudCktPmNvbW1hbmRzPT0wKQpAQCAtMTI5NSw2ICsxMjk0LDE0IEBACiAJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKKy8qCisgKiBSZXNldCB0aGUgYnVzCisgKgorICovCitzdGF0aWMgaW50IGFoYTE1MnhfYnVzX3Jlc2V0KFNjc2lfQ21uZCAqU0NwbnQpCit7CisJcmV0dXJuIGFoYTE1MnhfYnVzX3Jlc2V0X2hvc3QoU0NwbnQtPmRldmljZS0+aG9zdCk7Cit9CiAKIC8qCiAgKiAgUmVzdG9yZSBkZWZhdWx0IHZhbHVlcyB0byB0aGUgQUlDLTYyNjAgcmVnaXN0ZXJzIGFuZCByZXNldCB0aGUgZmlmb3MKQEAgLTEzMzcsMjMgKzEzNDQsMjggQEAKICAqIFJlc2V0IHRoZSBob3N0IChidXMgYW5kIGNvbnRyb2xsZXIpCiAgKgogICovCi1pbnQgYWhhMTUyeF9ob3N0X3Jlc2V0KFNjc2lfQ21uZCAqIFNDcG50KQoraW50IGFoYTE1MnhfaG9zdF9yZXNldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNocG50KQogewotI2lmIGRlZmluZWQoQUhBMTUyWF9ERUJVRykKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCA9IFNDcG50LT5kZXZpY2UtPmhvc3Q7Ci0jZW5kaWYKKwlEUFJJTlRLKGRlYnVnX2VoLCBLRVJOX0RFQlVHICJzY3NpJWQ6IGhvc3QgcmVzZXRcbiIsIHNocG50LT5ob3N0X25vKTsKIAotCURQUklOVEsoZGVidWdfZWgsIERFQlVHX0xFQUQgImFoYTE1MnhfaG9zdF9yZXNldCglcClcbiIsIENNRElORk8oU0NwbnQpLCBTQ3BudCk7CisJYWhhMTUyeF9idXNfcmVzZXRfaG9zdChzaHBudCk7CiAKLQlhaGExNTJ4X2J1c19yZXNldChTQ3BudCk7Ci0KLQlEUFJJTlRLKGRlYnVnX2VoLCBERUJVR19MRUFEICJyZXNldHRpbmcgcG9ydHNcbiIsIENNRElORk8oU0NwbnQpKTsKLQlyZXNldF9wb3J0cyhTQ3BudC0+ZGV2aWNlLT5ob3N0KTsKKwlEUFJJTlRLKGRlYnVnX2VoLCBLRVJOX0RFQlVHICJzY3NpJWQ6IHJlc2V0dGluZyBwb3J0c1xuIiwgc2hwbnQtPmhvc3Rfbm8pOworCXJlc2V0X3BvcnRzKHNocG50KTsKIAogCXJldHVybiBTVUNDRVNTOwogfQogCiAvKgorICogUmVzZXQgdGhlIGhvc3QgKGJ1cyBhbmQgY29udHJvbGxlcikKKyAqIAorICovCitzdGF0aWMgaW50IGFoYTE1MnhfaG9zdF9yZXNldChTY3NpX0NtbmQgKlNDcG50KQoreworCXJldHVybiBhaGExNTJ4X2hvc3RfcmVzZXRfaG9zdChTQ3BudC0+ZGV2aWNlLT5ob3N0KTsKK30KKworLyoKICAqIFJldHVybiB0aGUgImxvZ2ljYWwgZ2VvbWV0cnkiCiAgKgogICovCkBAIC0xNDMxLDIyICsxNDQzLDE4IEBACiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaTxBUlJBWV9TSVpFKGFoYTE1MnhfaG9zdCk7IGkrKykgewotCQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCA9IGFoYTE1MnhfaG9zdFtpXTsKLQkJaWYgKHNocG50ICYmIEhPU1REQVRBKHNocG50KS0+c2VydmljZSkgewotCQkJSE9TVERBVEEoc2hwbnQpLT5zZXJ2aWNlPTA7Ci0JCQlpc19jb21wbGV0ZShzaHBudCk7Ci0JCX0KKwkJaXNfY29tcGxldGUoYWhhMTUyeF9ob3N0W2ldKTsKIAl9CiB9CiAKIC8qCi0gKiAgICBJbnRlcnJ1cHRzIGhhbmRsZXIKKyAqIEludGVycnVwdCBoYW5kbGVyCiAgKgogICovCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBpbnRyKGludCBpcnFubywgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaHBudCA9IGxvb2t1cF9pcnEoaXJxbm8pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciByZXYsIGRtYWNudHJsMDsKIAogCWlmICghc2hwbnQpIHsKQEAgLTE0NzIsMjMgKzE0ODAsMjMgQEAKIAlpZiAoKHJldiA9PSAweEZGKSAmJiAoZG1hY250cmwwID09IDB4RkYpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKKwlpZiggVEVTVExPKERNQVNUQVQsIElOVFNUQVQpICkKKwkJcmV0dXJuIElSUV9OT05FOwkKKwogCS8qIG5vIG1vcmUgaW50ZXJydXB0cyBmcm9tIHRoZSBjb250cm9sbGVyLCB3aGlsZSB3ZSdyZSBidXN5LgogCSAgIElOVEVOIGlzIHJlc3RvcmVkIGJ5IHRoZSBCSCBoYW5kbGVyICovCiAJQ0xSQklUUyhETUFDTlRSTDAsIElOVEVOKTsKIAotI2lmIDAKLQkvKiBjaGVjayBpZiB0aGVyZSBpcyBhbHJlYWR5IHNvbWV0aGluZyB0byBiZQotICAgICAgICAgICBzZXJ2aWNlZDsgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQlpZihIT1NUREFUQShzaHBudCktPnNlcnZpY2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhaGExNTJ4JWQ6IGxvc3QgaW50ZXJydXB0ICglZClcbiIsIEhPU1ROTywgSE9TVERBVEEoc2hwbnQpLT5zZXJ2aWNlKTsKLQkgICAgICAgIHNob3dfcXVldWVzKHNocG50KTsKKwlET19MT0NLKGZsYWdzKTsKKwlpZiggSE9TVERBVEEoc2hwbnQpLT5zZXJ2aWNlPT0wICkgeworCQlIT1NUREFUQShzaHBudCktPnNlcnZpY2U9MTsKKworCQkvKiBQb2tlIHRoZSBCSCBoYW5kbGVyICovCisJCUlOSVRfV09SSygmYWhhMTUyeF90cSwgKHZvaWQgKikgcnVuLCBOVUxMKTsKKwkJc2NoZWR1bGVfd29yaygmYWhhMTUyeF90cSk7CiAJfQotI2VuZGlmCi0JCi0JLyogUG9rZSB0aGUgQkggaGFuZGxlciAqLwotCUhPU1REQVRBKHNocG50KS0+c2VydmljZSsrOwotCUlOSVRfV09SSygmYWhhMTUyeF90cSwgKHZvaWQgKikgcnVuLCBOVUxMKTsKLQlzY2hlZHVsZV93b3JrKCZhaGExNTJ4X3RxKTsKKwlET19VTkxPQ0soZmxhZ3MpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xNzA4LDEyICsxNzE2LDcgQEAKIAkJQURETVNHTyhCVVNfREVWSUNFX1JFU0VUKTsKIAl9IGVsc2UgaWYgKFNZTkNORUc9PTAgJiYgU1lOQ0hST05PVVMpIHsKICAgICAJCUNVUlJFTlRfU0MtPlNDcC5waGFzZSB8PSBzeW5jbmVnOwotCQlBRERNU0dPKEVYVEVOREVEX01FU1NBR0UpOwotCQlBRERNU0dPKDMpOwotCQlBRERNU0dPKEVYVEVOREVEX1NEVFIpOwotCQlBRERNU0dPKDUwKTsJCS8qIDIwMG5zICovCi0JCUFERE1TR08oOCk7CQkvKiA4IGJ5dGUgcmVxL2FjayBvZmZzZXQgKi8KLQorCQlNU0dPTEVOICs9IHNwaV9wb3B1bGF0ZV9zeW5jX21zZygmTVNHTyhNU0dPTEVOKSwgNTAsIDgpOwogCQlTWU5DTkVHPTE7CQkvKiBuZWdvdGlhdGlvbiBpbiBwcm9ncmVzcyAqLwogCX0KIApAQCAtMjUyNyw3ICsyNTMwLDE4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcGVuZGluZzsKIAorCWlmKCFzaHBudCkKKwkJcmV0dXJuOworCiAJRE9fTE9DSyhmbGFncyk7CisKKwlpZiggSE9TVERBVEEoc2hwbnQpLT5zZXJ2aWNlPT0wICkgIHsKKwkJRE9fVU5MT0NLKGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCUhPU1REQVRBKHNocG50KS0+c2VydmljZSA9IDA7CisKIAlpZihIT1NUREFUQShzaHBudCktPmluX2ludHIpIHsKIAkJRE9fVU5MT0NLKGZsYWdzKTsKIAkJLyogYWhhMTUyeF9lcnJvciBuZXZlciByZXR1cm5zLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmggYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5oCmluZGV4IGQyNzc2MTMuLmQyYWRkMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmgKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguaApAQCAtMzMyLDYgKzMzMiw2IEBACiAKIHN0cnVjdCBTY3NpX0hvc3QgKmFoYTE1MnhfcHJvYmVfb25lKHN0cnVjdCBhaGExNTJ4X3NldHVwICopOwogdm9pZCBhaGExNTJ4X3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqKTsKLWludCBhaGExNTJ4X2hvc3RfcmVzZXQoU2NzaV9DbW5kICopOworaW50IGFoYTE1MnhfaG9zdF9yZXNldF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKik7CiAKICNlbmRpZiAvKiBfQUhBMTUyWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhjaS5jIGIvZHJpdmVycy9zY3NpL2FoY2kuYwppbmRleCBhODAwZmI1Li5mZmJhNjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKQEAgLTY2LDYgKzY2LDkgQEAKIAlBSENJX0lSUV9PTl9TRwkJPSAoMSA8PCAzMSksCiAJQUhDSV9DTURfQVRBUEkJCT0gKDEgPDwgNSksCiAJQUhDSV9DTURfV1JJVEUJCT0gKDEgPDwgNiksCisJQUhDSV9DTURfUFJFRkVUQ0gJPSAoMSA8PCA3KSwKKwlBSENJX0NNRF9SRVNFVAkJPSAoMSA8PCA4KSwKKwlBSENJX0NNRF9DTFJfQlVTWQk9ICgxIDw8IDEwKSwKIAogCVJYX0ZJU19EMkhfUkVHCQk9IDB4NDAsCS8qIG9mZnNldCBvZiBEMkggUmVnaXN0ZXIgRklTIGRhdGEgKi8KIApAQCAtODUsNiArODgsNyBAQAogCiAJLyogSE9TVF9DQVAgYml0cyAqLwogCUhPU1RfQ0FQXzY0CQk9ICgxIDw8IDMxKSwgLyogUENJIERBQyAoNjQtYml0IERNQSkgc3VwcG9ydCAqLworCUhPU1RfQ0FQX0NMTwkJPSAoMSA8PCAyNCksIC8qIENvbW1hbmQgTGlzdCBPdmVycmlkZSBzdXBwb3J0ICovCiAKIAkvKiByZWdpc3RlcnMgZm9yIGVhY2ggU0FUQSBwb3J0ICovCiAJUE9SVF9MU1RfQUREUgkJPSAweDAwLCAvKiBjb21tYW5kIGxpc3QgRE1BIGFkZHIgKi8KQEAgLTEzOCw2ICsxNDIsNyBAQAogCVBPUlRfQ01EX0xJU1RfT04JPSAoMSA8PCAxNSksIC8qIGNtZCBsaXN0IERNQSBlbmdpbmUgcnVubmluZyAqLwogCVBPUlRfQ01EX0ZJU19PTgkJPSAoMSA8PCAxNCksIC8qIEZJUyBETUEgZW5naW5lIHJ1bm5pbmcgKi8KIAlQT1JUX0NNRF9GSVNfUlgJCT0gKDEgPDwgNCksIC8qIEVuYWJsZSBGSVMgcmVjZWl2ZSBETUEgZW5naW5lICovCisJUE9SVF9DTURfQ0xPCQk9ICgxIDw8IDMpLCAvKiBDb21tYW5kIGxpc3Qgb3ZlcnJpZGUgKi8KIAlQT1JUX0NNRF9QT1dFUl9PTgk9ICgxIDw8IDIpLCAvKiBQb3dlciB1cCBkZXZpY2UgKi8KIAlQT1JUX0NNRF9TUElOX1VQCT0gKDEgPDwgMSksIC8qIFNwaW4gdXAgZGV2aWNlICovCiAJUE9SVF9DTURfU1RBUlQJCT0gKDEgPDwgMCksIC8qIEVuYWJsZSBwb3J0IERNQSBlbmdpbmUgKi8KQEAgLTE4NCw5ICsxODksOSBAQAogc3RhdGljIHUzMiBhaGNpX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIGFoY2lfc2NyX3dyaXRlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgdmFsKTsKIHN0YXRpYyBpbnQgYWhjaV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwotc3RhdGljIGludCBhaGNpX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHVuc2lnbmVkIGludCBhaGNpX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIGlycXJldHVybl90IGFoY2lfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXN0YXRpYyB2b2lkIGFoY2lfcGh5X3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOworc3RhdGljIGludCBhaGNpX3Byb2JlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CiBzdGF0aWMgdm9pZCBhaGNpX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIGFoY2lfZW5nX3RpbWVvdXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgaW50IGFoY2lfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKQEAgLTIwNiw3ICsyMTEsNiBAQAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBBSENJX01BWF9TRywKLQkubWF4X3NlY3RvcnMJCT0gQVRBX01BWF9TRUNUT1JTLAogCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAogCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAogCS51c2VfY2x1c3RlcmluZwkJPSBBSENJX1VTRV9DTFVTVEVSSU5HLApAQCAtMjI1LDcgKzIyOSw3IEBACiAKIAkudGZfcmVhZAkJPSBhaGNpX3RmX3JlYWQsCiAKLQkucGh5X3Jlc2V0CQk9IGFoY2lfcGh5X3Jlc2V0LAorCS5wcm9iZV9yZXNldAkJPSBhaGNpX3Byb2JlX3Jlc2V0LAogCiAJLnFjX3ByZXAJCT0gYWhjaV9xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBhaGNpX3FjX2lzc3VlLApAQCAtMjQ3LDggKzI1MSw3IEBACiAJewogCQkuc2h0CQk9ICZhaGNpX3NodCwKIAkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKLQkJCQkgIEFUQV9GTEFHX1NBVEFfUkVTRVQgfCBBVEFfRkxBR19NTUlPIHwKLQkJCQkgIEFUQV9GTEFHX1BJT19ETUEsCisJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSwKIAkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCiAJCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02IDsgRklYTUUgKi8KIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLApAQCAtNDUwLDE3ICs0NTMsNDggQEAKIAl3cml0ZWwodmFsLCAodm9pZCBfX2lvbWVtICopIGFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoc2NfcmVnICogNCkpOwogfQogCi1zdGF0aWMgdm9pZCBhaGNpX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBhaGNpX3N0b3BfZW5naW5lKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdm9pZCBfX2lvbWVtICptbWlvID0gYXAtPmhvc3Rfc2V0LT5tbWlvX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShtbWlvLCBhcC0+cG9ydF9ubyk7CisJaW50IHdvcms7CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKKwl0bXAgJj0gflBPUlRfQ01EX1NUQVJUOworCXdyaXRlbCh0bXAsIHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKKworCS8qIHdhaXQgZm9yIGVuZ2luZSB0byBzdG9wLiAgVE9ETzogdGhpcyBjb3VsZCBiZQorCSAqIGFzIGxvbmcgYXMgNTAwIG1zZWMKKwkgKi8KKwl3b3JrID0gMTAwMDsKKwl3aGlsZSAod29yay0tID4gMCkgeworCQl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCk7CisJCWlmICgodG1wICYgUE9SVF9DTURfTElTVF9PTikgPT0gMCkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMTApOworCX0KKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdm9pZCBhaGNpX3N0YXJ0X2VuZ2luZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXZvaWQgX19pb21lbSAqbW1pbyA9IGFwLT5ob3N0X3NldC0+bW1pb19iYXNlOworCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gYWhjaV9wb3J0X2Jhc2UobW1pbywgYXAtPnBvcnRfbm8pOworCXUzMiB0bXA7CisKKwl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCk7CisJdG1wIHw9IFBPUlRfQ01EX1NUQVJUOworCXdyaXRlbCh0bXAsIHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKKwlyZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCk7IC8qIGZsdXNoICovCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWhjaV9kZXZfY2xhc3NpZnkoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9ICh2b2lkIF9faW9tZW0gKikgYXAtPmlvYWRkci5jbWRfYWRkcjsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOwotCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmRldmljZVswXTsKLQl1MzIgbmV3X3RtcCwgdG1wOwotCi0JX19zYXRhX3BoeV9yZXNldChhcCk7Ci0KLQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUE9SVF9ESVNBQkxFRCkKLQkJcmV0dXJuOworCXUzMiB0bXA7CiAKIAl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX1NJRyk7CiAJdGYubGJhaAkJPSAodG1wID4+IDI0KQkmIDB4ZmY7CkBAIC00NjgsMTUgKzUwMiwxNzggQEAKIAl0Zi5sYmFsCQk9ICh0bXAgPj4gOCkJJiAweGZmOwogCXRmLm5zZWN0CT0gKHRtcCkJCSYgMHhmZjsKIAotCWRldi0+Y2xhc3MgPSBhdGFfZGV2X2NsYXNzaWZ5KCZ0Zik7Ci0JaWYgKCFhdGFfZGV2X3ByZXNlbnQoZGV2KSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJcmV0dXJuOworCXJldHVybiBhdGFfZGV2X2NsYXNzaWZ5KCZ0Zik7Cit9CisKK3N0YXRpYyB2b2lkIGFoY2lfZmlsbF9jbWRfc2xvdChzdHJ1Y3QgYWhjaV9wb3J0X3ByaXYgKnBwLCB1MzIgb3B0cykKK3sKKwlwcC0+Y21kX3Nsb3RbMF0ub3B0cyA9IGNwdV90b19sZTMyKG9wdHMpOworCXBwLT5jbWRfc2xvdFswXS5zdGF0dXMgPSAwOworCXBwLT5jbWRfc2xvdFswXS50YmxfYWRkciA9IGNwdV90b19sZTMyKHBwLT5jbWRfdGJsX2RtYSAmIDB4ZmZmZmZmZmYpOworCXBwLT5jbWRfc2xvdFswXS50YmxfYWRkcl9oaSA9IGNwdV90b19sZTMyKChwcC0+Y21kX3RibF9kbWEgPj4gMTYpID4+IDE2KTsKK30KKworc3RhdGljIGludCBhaGNpX3BvbGxfcmVnaXN0ZXIodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1MzIgdmFsLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnRlcnZhbF9tc2VjLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zZWMpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiB0bXA7CisKKwl0aW1lb3V0ID0gamlmZmllcyArICh0aW1lb3V0X21zZWMgKiBIWikgLyAxMDAwOworCWRvIHsKKwkJdG1wID0gcmVhZGwocmVnKTsKKwkJaWYgKCh0bXAgJiBtYXNrKSA9PSB2YWwpCisJCQlyZXR1cm4gMDsKKwkJbXNsZWVwKGludGVydmFsX21zZWMpOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhaGNpX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgdmVyYm9zZSwgdW5zaWduZWQgaW50ICpjbGFzcykKK3sKKwlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3Rfc2V0LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICptbWlvID0gYXAtPmhvc3Rfc2V0LT5tbWlvX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShtbWlvLCBhcC0+cG9ydF9ubyk7CisJY29uc3QgdTMyIGNtZF9maXNfbGVuID0gNTsgLyogZml2ZSBkd29yZHMgKi8KKwljb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOworCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CisJdTggKmZpczsKKwlpbnQgcmM7CisKKwlEUFJJTlRLKCJFTlRFUlxuIik7CisKKwkvKiBwcmVwYXJlIGZvciBTUlNUIChBSENJLTEuMSAxMC40LjEpICovCisJcmMgPSBhaGNpX3N0b3BfZW5naW5lKGFwKTsKKwlpZiAocmMpIHsKKwkJcmVhc29uID0gImZhaWxlZCB0byBzdG9wIGVuZ2luZSI7CisJCWdvdG8gZmFpbF9yZXN0YXJ0OwogCX0KIAorCS8qIGNoZWNrIEJVU1kvRFJRLCBwZXJmb3JtIENvbW1hbmQgTGlzdCBPdmVycmlkZSBpZiBuZWNlc3NhcnkgKi8KKwlhaGNpX3RmX3JlYWQoYXAsICZ0Zik7CisJaWYgKHRmLmNvbW1hbmQgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkgeworCQl1MzIgdG1wOworCisJCWlmICghKGhwcml2LT5jYXAgJiBIT1NUX0NBUF9DTE8pKSB7CisJCQlyYyA9IC1FSU87CisJCQlyZWFzb24gPSAicG9ydCBidXN5IGJ1dCBubyBDTE8iOworCQkJZ290byBmYWlsX3Jlc3RhcnQ7CisJCX0KKworCQl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCk7CisJCXRtcCB8PSBQT1JUX0NNRF9DTE87CisJCXdyaXRlbCh0bXAsIHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKKwkJcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTUQpOyAvKiBmbHVzaCAqLworCisJCWlmIChhaGNpX3BvbGxfcmVnaXN0ZXIocG9ydF9tbWlvICsgUE9SVF9DTUQsIFBPUlRfQ01EX0NMTywgMHgwLAorCQkJCSAgICAgICAxLCA1MDApKSB7CisJCQlyYyA9IC1FSU87CisJCQlyZWFzb24gPSAiQ0xPIGZhaWxlZCI7CisJCQlnb3RvIGZhaWxfcmVzdGFydDsKKwkJfQorCX0KKworCS8qIHJlc3RhcnQgZW5naW5lICovCisJYWhjaV9zdGFydF9lbmdpbmUoYXApOworCisJYXRhX3RmX2luaXQoYXAsICZ0ZiwgMCk7CisJZmlzID0gcHAtPmNtZF90Ymw7CisKKwkvKiBpc3N1ZSB0aGUgZmlyc3QgRDJIIFJlZ2lzdGVyIEZJUyAqLworCWFoY2lfZmlsbF9jbWRfc2xvdChwcCwgY21kX2Zpc19sZW4gfCBBSENJX0NNRF9SRVNFVCB8IEFIQ0lfQ01EX0NMUl9CVVNZKTsKKworCXRmLmN0bCB8PSBBVEFfU1JTVDsKKwlhdGFfdGZfdG9fZmlzKCZ0ZiwgZmlzLCAwKTsKKwlmaXNbMV0gJj0gfigxIDw8IDcpOwkvKiB0dXJuIG9mZiBDb21tYW5kIEZJUyBiaXQgKi8KKworCXdyaXRlbCgxLCBwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSk7CisJcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTURfSVNTVUUpOwkvKiBmbHVzaCAqLworCisJaWYgKGFoY2lfcG9sbF9yZWdpc3Rlcihwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSwgMHgxLCAweDAsIDEsIDUwMCkpIHsKKwkJcmMgPSAtRUlPOworCQlyZWFzb24gPSAiMXN0IEZJUyBmYWlsZWQiOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogc3BlYyBzYXlzIGF0IGxlYXN0IDV1cywgYnV0IGJlIGdlbmVyb3VzIGFuZCBzbGVlcCBmb3IgMW1zICovCisJbXNsZWVwKDEpOworCisJLyogaXNzdWUgdGhlIHNlY29uZCBEMkggUmVnaXN0ZXIgRklTICovCisJYWhjaV9maWxsX2NtZF9zbG90KHBwLCBjbWRfZmlzX2xlbik7CisKKwl0Zi5jdGwgJj0gfkFUQV9TUlNUOworCWF0YV90Zl90b19maXMoJnRmLCBmaXMsIDApOworCWZpc1sxXSAmPSB+KDEgPDwgNyk7CS8qIHR1cm4gb2ZmIENvbW1hbmQgRklTIGJpdCAqLworCisJd3JpdGVsKDEsIHBvcnRfbW1pbyArIFBPUlRfQ01EX0lTU1VFKTsKKwlyZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRF9JU1NVRSk7CS8qIGZsdXNoICovCisKKwkvKiBzcGVjIG1hbmRhdGVzICI+PSAybXMiIGJlZm9yZSBjaGVja2luZyBzdGF0dXMuCisJICogV2Ugd2FpdCAxNTBtcywgYmVjYXVzZSB0aGF0IHdhcyB0aGUgbWFnaWMgZGVsYXkgdXNlZCBmb3IKKwkgKiBBVEFQSSBkZXZpY2VzIGluIEhhbGUgTGFuZGlzJ3MgQVRBRFJWUiwgZm9yIHRoZSBwZXJpb2Qgb2YgdGltZQorCSAqIGJldHdlZW4gd2hlbiB0aGUgQVRBIGNvbW1hbmQgcmVnaXN0ZXIgaXMgd3JpdHRlbiwgYW5kIHRoZW4KKwkgKiBzdGF0dXMgaXMgY2hlY2tlZC4gIEJlY2F1c2Ugd2FpdGluZyBmb3IgImEgd2hpbGUiIGJlZm9yZQorCSAqIGNoZWNraW5nIHN0YXR1cyBpcyBmaW5lLCBwb3N0IFNSU1QsIHdlIHBlcmZvcm0gdGhpcyBtYWdpYworCSAqIGRlbGF5IGhlcmUgYXMgd2VsbC4KKwkgKi8KKwltc2xlZXAoMTUwKTsKKworCSpjbGFzcyA9IEFUQV9ERVZfTk9ORTsKKwlpZiAoc2F0YV9kZXZfcHJlc2VudChhcCkpIHsKKwkJaWYgKGF0YV9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQk9PVF9RVUlDSywgQVRBX1RNT1VUX0JPT1QpKSB7CisJCQlyYyA9IC1FSU87CisJCQlyZWFzb24gPSAiZGV2aWNlIG5vdCByZWFkeSI7CisJCQlnb3RvIGZhaWw7CisJCX0KKwkJKmNsYXNzID0gYWhjaV9kZXZfY2xhc3NpZnkoYXApOworCX0KKworCURQUklOVEsoIkVYSVQsIGNsYXNzPSV1XG4iLCAqY2xhc3MpOworCXJldHVybiAwOworCisgZmFpbF9yZXN0YXJ0OgorCWFoY2lfc3RhcnRfZW5naW5lKGFwKTsKKyBmYWlsOgorCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBzb2Z0cmVzZXQgZmFpbGVkICglcylcbiIsCisJCSAgICAgICBhcC0+aWQsIHJlYXNvbik7CisJZWxzZQorCQlEUFJJTlRLKCJFWElULCByYz0lZCByZWFzb249XCIlc1wiXG4iLCByYywgcmVhc29uKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYWhjaV9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHZlcmJvc2UsIHVuc2lnbmVkIGludCAqY2xhc3MpCit7CisJaW50IHJjOworCisJRFBSSU5USygiRU5URVJcbiIpOworCisJYWhjaV9zdG9wX2VuZ2luZShhcCk7CisJcmMgPSBzYXRhX3N0ZF9oYXJkcmVzZXQoYXAsIHZlcmJvc2UsIGNsYXNzKTsKKwlhaGNpX3N0YXJ0X2VuZ2luZShhcCk7CisKKwlpZiAocmMgPT0gMCkKKwkJKmNsYXNzID0gYWhjaV9kZXZfY2xhc3NpZnkoYXApOworCWlmICgqY2xhc3MgPT0gQVRBX0RFVl9VTktOT1dOKQorCQkqY2xhc3MgPSBBVEFfREVWX05PTkU7CisKKwlEUFJJTlRLKCJFWElULCByYz0lZCwgY2xhc3M9JXVcbiIsIHJjLCAqY2xhc3MpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYWhjaV9wb3N0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcykKK3sKKwl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9ICh2b2lkIF9faW9tZW0gKikgYXAtPmlvYWRkci5jbWRfYWRkcjsKKwl1MzIgbmV3X3RtcCwgdG1wOworCisJYXRhX3N0ZF9wb3N0cmVzZXQoYXAsIGNsYXNzKTsKKwogCS8qIE1ha2Ugc3VyZSBwb3J0J3MgQVRBUEkgYml0IGlzIHNldCBhcHByb3ByaWF0ZWx5ICovCiAJbmV3X3RtcCA9IHRtcCA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKLQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKQorCWlmICgqY2xhc3MgPT0gQVRBX0RFVl9BVEFQSSkKIAkJbmV3X3RtcCB8PSBQT1JUX0NNRF9BVEFQSTsKIAllbHNlCiAJCW5ld190bXAgJj0gflBPUlRfQ01EX0FUQVBJOwpAQCAtNDg2LDYgKzY4MywxMyBAQAogCX0KIH0KIAorc3RhdGljIGludCBhaGNpX3Byb2JlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3NlcykKK3sKKwlyZXR1cm4gYXRhX2RyaXZlX3Byb2JlX3Jlc2V0KGFwLCBhdGFfc3RkX3Byb2JlaW5pdCwKKwkJCQkgICAgIGFoY2lfc29mdHJlc2V0LCBhaGNpX2hhcmRyZXNldCwKKwkJCQkgICAgIGFoY2lfcG9zdHJlc2V0LCBjbGFzc2VzKTsKK30KKwogc3RhdGljIHU4IGFoY2lfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJdm9pZCBfX2lvbWVtICptbWlvID0gKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmNtZF9hZGRyOwpAQCAtNTMzLDQyICs3MzcsMzYgQEAKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXN0cnVjdCBhaGNpX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCWludCBpc19hdGFwaSA9IGlzX2F0YXBpX3Rhc2tmaWxlKCZxYy0+dGYpOwogCXUzMiBvcHRzOwogCWNvbnN0IHUzMiBjbWRfZmlzX2xlbiA9IDU7IC8qIGZpdmUgZHdvcmRzICovCiAJdW5zaWduZWQgaW50IG5fZWxlbTsKIAogCS8qCi0JICogRmlsbCBpbiBjb21tYW5kIHNsb3QgaW5mb3JtYXRpb24gKGN1cnJlbnRseSBvbmx5IG9uZSBzbG90LAotCSAqIHNsb3QgMCwgaXMgY3VycmVudGx5IHNpbmNlIHdlIGRvbid0IGRvIHF1ZXVlaW5nKQotCSAqLwotCi0Jb3B0cyA9IGNtZF9maXNfbGVuOwotCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpCi0JCW9wdHMgfD0gQUhDSV9DTURfV1JJVEU7Ci0JaWYgKGlzX2F0YXBpX3Rhc2tmaWxlKCZxYy0+dGYpKQotCQlvcHRzIHw9IEFIQ0lfQ01EX0FUQVBJOwotCi0JcHAtPmNtZF9zbG90WzBdLm9wdHMgPSBjcHVfdG9fbGUzMihvcHRzKTsKLQlwcC0+Y21kX3Nsb3RbMF0uc3RhdHVzID0gMDsKLQlwcC0+Y21kX3Nsb3RbMF0udGJsX2FkZHIgPSBjcHVfdG9fbGUzMihwcC0+Y21kX3RibF9kbWEgJiAweGZmZmZmZmZmKTsKLQlwcC0+Y21kX3Nsb3RbMF0udGJsX2FkZHJfaGkgPSBjcHVfdG9fbGUzMigocHAtPmNtZF90YmxfZG1hID4+IDE2KSA+PiAxNik7Ci0KLQkvKgogCSAqIEZpbGwgaW4gY29tbWFuZCB0YWJsZSBpbmZvcm1hdGlvbi4gIEZpcnN0LCB0aGUgaGVhZGVyLAogCSAqIGEgU0FUQSBSZWdpc3RlciAtIEhvc3QgdG8gRGV2aWNlIGNvbW1hbmQgRklTLgogCSAqLwogCWF0YV90Zl90b19maXMoJnFjLT50ZiwgcHAtPmNtZF90YmwsIDApOwotCWlmIChvcHRzICYgQUhDSV9DTURfQVRBUEkpIHsKKwlpZiAoaXNfYXRhcGkpIHsKIAkJbWVtc2V0KHBwLT5jbWRfdGJsICsgQUhDSV9DTURfVEJMX0NEQiwgMCwgMzIpOwotCQltZW1jcHkocHAtPmNtZF90YmwgKyBBSENJX0NNRF9UQkxfQ0RCLCBxYy0+Y2RiLCBhcC0+Y2RiX2xlbik7CisJCW1lbWNweShwcC0+Y21kX3RibCArIEFIQ0lfQ01EX1RCTF9DREIsIHFjLT5jZGIsCisJCSAgICAgICBxYy0+ZGV2LT5jZGJfbGVuKTsKIAl9CiAKLQlpZiAoIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkpCi0JCXJldHVybjsKKwluX2VsZW0gPSAwOworCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkKKwkJbl9lbGVtID0gYWhjaV9maWxsX3NnKHFjKTsKIAotCW5fZWxlbSA9IGFoY2lfZmlsbF9zZyhxYyk7CisJLyoKKwkgKiBGaWxsIGluIGNvbW1hbmQgc2xvdCBpbmZvcm1hdGlvbi4KKwkgKi8KKwlvcHRzID0gY21kX2Zpc19sZW4gfCBuX2VsZW0gPDwgMTY7CisJaWYgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkKKwkJb3B0cyB8PSBBSENJX0NNRF9XUklURTsKKwlpZiAoaXNfYXRhcGkpCisJCW9wdHMgfD0gQUhDSV9DTURfQVRBUEkgfCBBSENJX0NNRF9QUkVGRVRDSDsKIAotCXBwLT5jbWRfc2xvdFswXS5vcHRzIHw9IGNwdV90b19sZTMyKG5fZWxlbSA8PCAxNik7CisJYWhjaV9maWxsX2NtZF9zbG90KHBwLCBvcHRzKTsKIH0KIAogc3RhdGljIHZvaWQgYWhjaV9yZXN0YXJ0X3BvcnQoc3RydWN0IGF0YV9wb3J0ICphcCwgdTMyIGlycV9zdGF0KQpAQCAtNTc2LDcgKzc3NCw2IEBACiAJdm9pZCBfX2lvbWVtICptbWlvID0gYXAtPmhvc3Rfc2V0LT5tbWlvX2Jhc2U7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShtbWlvLCBhcC0+cG9ydF9ubyk7CiAJdTMyIHRtcDsKLQlpbnQgd29yazsKIAogCWlmICgoYXAtPmRldmljZVswXS5jbGFzcyAhPSBBVEFfREVWX0FUQVBJKSB8fAogCSAgICAoKGlycV9zdGF0ICYgUE9SVF9JUlFfVEZfRVJSKSA9PSAwKSkKQEAgLTU5MiwyMCArNzg5LDcgQEAKIAkJCXJlYWRsKHBvcnRfbW1pbyArIFBPUlRfU0NSX0VSUikpOwogCiAJLyogc3RvcCBETUEgKi8KLQl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCk7Ci0JdG1wICY9IH5QT1JUX0NNRF9TVEFSVDsKLQl3cml0ZWwodG1wLCBwb3J0X21taW8gKyBQT1JUX0NNRCk7Ci0KLQkvKiB3YWl0IGZvciBlbmdpbmUgdG8gc3RvcC4gIFRPRE86IHRoaXMgY291bGQgYmUKLQkgKiBhcyBsb25nIGFzIDUwMCBtc2VjCi0JICovCi0Jd29yayA9IDEwMDA7Ci0Jd2hpbGUgKHdvcmstLSA+IDApIHsKLQkJdG1wID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTUQpOwotCQlpZiAoKHRtcCAmIFBPUlRfQ01EX0xJU1RfT04pID09IDApCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwKTsKLQl9CisJYWhjaV9zdG9wX2VuZ2luZShhcCk7CiAKIAkvKiBjbGVhciBTQVRBIHBoeSBlcnJvciwgaWYgYW55ICovCiAJdG1wID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9TQ1JfRVJSKTsKQEAgLTYyNCwxMCArODA4LDcgQEAKIAl9CiAKIAkvKiByZS1zdGFydCBETUEgKi8KLQl0bXAgPSByZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCk7Ci0JdG1wIHw9IFBPUlRfQ01EX1NUQVJUOwotCXdyaXRlbCh0bXAsIHBvcnRfbW1pbyArIFBPUlRfQ01EKTsKLQlyZWFkbChwb3J0X21taW8gKyBQT1JUX0NNRCk7IC8qIGZsdXNoICovCisJYWhjaV9zdGFydF9lbmdpbmUoYXApOwogfQogCiBzdGF0aWMgdm9pZCBhaGNpX2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC02NDIsMjUgKzgyMywxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAKKwlhaGNpX3Jlc3RhcnRfcG9ydChhcCwgcmVhZGwocG9ydF9tbWlvICsgUE9SVF9JUlFfU1RBVCkpOwogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7Ci0JaWYgKCFxYykgewotCQlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBCVUc6IHRpbWVvdXQgd2l0aG91dCBjb21tYW5kXG4iLAotCQkgICAgICAgYXAtPmlkKTsKLQl9IGVsc2UgewotCQlhaGNpX3Jlc3RhcnRfcG9ydChhcCwgcmVhZGwocG9ydF9tbWlvICsgUE9SVF9JUlFfU1RBVCkpOwotCi0JCS8qIGhhY2sgYWxlcnQhICBXZSBjYW5ub3QgdXNlIHRoZSBzdXBwbGllZCBjb21wbGV0aW9uCi0JIAkgKiBmdW5jdGlvbiBmcm9tIGluc2lkZSB0aGUgLT5laF9zdHJhdGVneV9oYW5kbGVyKCkgdGhyZWFkLgotCSAJICogbGliYXRhIGlzIHRoZSBvbmx5IHVzZXIgb2YgLT5laF9zdHJhdGVneV9oYW5kbGVyKCkgaW4KLQkgCSAqIGFueSBrZXJuZWwsIHNvIHRoZSBkZWZhdWx0IHNjc2lfZG9uZSgpIGFzc3VtZXMgaXQgaXMKLQkgCSAqIG5vdCBiZWluZyBjYWxsZWQgZnJvbSB0aGUgU0NTSSBFSC4KLQkgCSAqLwotCQlxYy0+c2NzaWRvbmUgPSBzY3NpX2ZpbmlzaF9jb21tYW5kOwotCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOwotCQlhdGFfcWNfY29tcGxldGUocWMpOwotCX0KKwlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX1RJTUVPVVQ7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCisJYXRhX2VoX3FjX2NvbXBsZXRlKHFjKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYWhjaV9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKQEAgLTY3OCw3ICs4NDcsNyBAQAogCWNpID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9DTURfSVNTVUUpOwogCWlmIChsaWtlbHkoKGNpICYgMHgxKSA9PSAwKSkgewogCQlpZiAocWMpIHsKLQkJCWFzc2VydChxYy0+ZXJyX21hc2sgPT0gMCk7CisJCQlXQVJOX09OKHFjLT5lcnJfbWFzayk7CiAJCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQkJcWMgPSBOVUxMOwogCQl9CkBAIC02OTcsNyArODY2LDcgQEAKIAkJYWhjaV9yZXN0YXJ0X3BvcnQoYXAsIHN0YXR1cyk7CiAKIAkJaWYgKHFjKSB7Ci0JCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOworCQkJcWMtPmVycl9tYXNrIHw9IGVycl9tYXNrOwogCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAkJfQogCX0KQEAgLTc0MiwyMyArOTExLDE3IEBACiAJCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCQkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKIAkJCWlmICghYWhjaV9ob3N0X2ludHIoYXAsIHFjKSkKLQkJCQlpZiAoYXRhX3JhdGVsaW1pdCgpKSB7Ci0JCQkJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0KLQkJCQkJCXRvX3BjaV9kZXYoYXAtPmhvc3Rfc2V0LT5kZXYpOwotCQkJCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwKKwkJCQlpZiAoYXRhX3JhdGVsaW1pdCgpKQorCQkJCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgaG9zdF9zZXQtPmRldiwKIAkJCQkJICAidW5oYW5kbGVkIGludGVycnVwdCBvbiBwb3J0ICV1XG4iLAogCQkJCQkgIGkpOwotCQkJCX0KIAogCQkJVlBSSU5USygicG9ydCAldVxuIiwgaSk7CiAJCX0gZWxzZSB7CiAJCQlWUFJJTlRLKCJwb3J0ICV1IChubyBpcnEpXG4iLCBpKTsKLQkJCWlmIChhdGFfcmF0ZWxpbWl0KCkpIHsKLQkJCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9Ci0JCQkJCXRvX3BjaV9kZXYoYXAtPmhvc3Rfc2V0LT5kZXYpOwotCQkJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcGRldi0+ZGV2LAorCQkJaWYgKGF0YV9yYXRlbGltaXQoKSkKKwkJCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgaG9zdF9zZXQtPmRldiwKIAkJCQkJImludGVycnVwdCBvbiBkaXNhYmxlZCBwb3J0ICV1XG4iLCBpKTsKLQkJCX0KIAkJfQogCiAJCWlycV9hY2sgfD0gKDEgPDwgaSk7CkBAIC03NzYsNyArOTM5LDcgQEAKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAotc3RhdGljIGludCBhaGNpX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IGFoY2lfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmNtZF9hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwppbmRleCAzNDJmNzc5Li4zMjZhNjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYwpAQCAtOTc4LDkgKzk3OCwxMyBAQAogCQlicmVhazsKIAl9CiAJY2FzZSBJTlZBTElEX1NFUUlOVDoKLQkJcHJpbnRmKCIlczogSW52YWxpZCBTZXF1ZW5jZXIgaW50ZXJydXB0IG9jY3VycmVkLlxuIiwKKwkJcHJpbnRmKCIlczogSW52YWxpZCBTZXF1ZW5jZXIgaW50ZXJydXB0IG9jY3VycmVkLCAiCisJCSAgICAgICAicmVzZXR0aW5nIGNoYW5uZWwuXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSk7Ci0JCWFoZF9kdW1wX2NhcmRfc3RhdGUoYWhkKTsKKyNpZmRlZiBBSERfREVCVUcKKwkJaWYgKChhaGRfZGVidWcgJiBBSERfU0hPV19SRUNPVkVSWSkgIT0gMCkKKwkJCWFoZF9kdW1wX2NhcmRfc3RhdGUoYWhkKTsKKyNlbmRpZgogCQlhaGRfcmVzZXRfY2hhbm5lbChhaGQsICdBJywgLypJbml0aWF0ZSBSZXNldCovVFJVRSk7CiAJCWJyZWFrOwogCWNhc2UgU1RBVFVTX09WRVJSVU46CkBAIC0zNzYyLDExICszNzY2LDggQEAKIHsKIAlpZiAob2Zmc2V0ID09IDApCiAJCXBlcmlvZCA9IEFIRF9BU1lOQ19YRkVSX1BFUklPRDsKLQlhaGQtPm1zZ291dF9idWZbYWhkLT5tc2dvdXRfaW5kZXgrK10gPSBNU0dfRVhURU5ERUQ7Ci0JYWhkLT5tc2dvdXRfYnVmW2FoZC0+bXNnb3V0X2luZGV4KytdID0gTVNHX0VYVF9TRFRSX0xFTjsKLQlhaGQtPm1zZ291dF9idWZbYWhkLT5tc2dvdXRfaW5kZXgrK10gPSBNU0dfRVhUX1NEVFI7Ci0JYWhkLT5tc2dvdXRfYnVmW2FoZC0+bXNnb3V0X2luZGV4KytdID0gcGVyaW9kOwotCWFoZC0+bXNnb3V0X2J1ZlthaGQtPm1zZ291dF9pbmRleCsrXSA9IG9mZnNldDsKKwlhaGQtPm1zZ291dF9pbmRleCArPSBzcGlfcG9wdWxhdGVfc3luY19tc2coCisJCQlhaGQtPm1zZ291dF9idWYgKyBhaGQtPm1zZ291dF9pbmRleCwgcGVyaW9kLCBvZmZzZXQpOwogCWFoZC0+bXNnb3V0X2xlbiArPSA1OwogCWlmIChib290dmVyYm9zZSkgewogCQlwcmludGYoIiglczolYzolZDolZCk6IFNlbmRpbmcgU0RUUiBwZXJpb2QgJXgsIG9mZnNldCAleFxuIiwKQEAgLTM3ODMsMTAgKzM3ODQsOCBAQAogYWhkX2NvbnN0cnVjdF93ZHRyKHN0cnVjdCBhaGRfc29mdGMgKmFoZCwgc3RydWN0IGFoZF9kZXZpbmZvICpkZXZpbmZvLAogCQkgICB1X2ludCBidXNfd2lkdGgpCiB7Ci0JYWhkLT5tc2dvdXRfYnVmW2FoZC0+bXNnb3V0X2luZGV4KytdID0gTVNHX0VYVEVOREVEOwotCWFoZC0+bXNnb3V0X2J1ZlthaGQtPm1zZ291dF9pbmRleCsrXSA9IE1TR19FWFRfV0RUUl9MRU47Ci0JYWhkLT5tc2dvdXRfYnVmW2FoZC0+bXNnb3V0X2luZGV4KytdID0gTVNHX0VYVF9XRFRSOwotCWFoZC0+bXNnb3V0X2J1ZlthaGQtPm1zZ291dF9pbmRleCsrXSA9IGJ1c193aWR0aDsKKwlhaGQtPm1zZ291dF9pbmRleCArPSBzcGlfcG9wdWxhdGVfd2lkdGhfbXNnKAorCQkJYWhkLT5tc2dvdXRfYnVmICsgYWhkLT5tc2dvdXRfaW5kZXgsIGJ1c193aWR0aCk7CiAJYWhkLT5tc2dvdXRfbGVuICs9IDQ7CiAJaWYgKGJvb3R2ZXJib3NlKSB7CiAJCXByaW50ZigiKCVzOiVjOiVkOiVkKTogU2VuZGluZyBXRFRSICV4XG4iLApAQCAtMzgxMywxNCArMzgxMiw5IEBACiAJCXBwcl9vcHRpb25zIHw9IE1TR19FWFRfUFBSX1BDT01QX0VOOwogCWlmIChvZmZzZXQgPT0gMCkKIAkJcGVyaW9kID0gQUhEX0FTWU5DX1hGRVJfUEVSSU9EOwotCWFoZC0+bXNnb3V0X2J1ZlthaGQtPm1zZ291dF9pbmRleCsrXSA9IE1TR19FWFRFTkRFRDsKLQlhaGQtPm1zZ291dF9idWZbYWhkLT5tc2dvdXRfaW5kZXgrK10gPSBNU0dfRVhUX1BQUl9MRU47Ci0JYWhkLT5tc2dvdXRfYnVmW2FoZC0+bXNnb3V0X2luZGV4KytdID0gTVNHX0VYVF9QUFI7Ci0JYWhkLT5tc2dvdXRfYnVmW2FoZC0+bXNnb3V0X2luZGV4KytdID0gcGVyaW9kOwotCWFoZC0+bXNnb3V0X2J1ZlthaGQtPm1zZ291dF9pbmRleCsrXSA9IDA7Ci0JYWhkLT5tc2dvdXRfYnVmW2FoZC0+bXNnb3V0X2luZGV4KytdID0gb2Zmc2V0OwotCWFoZC0+bXNnb3V0X2J1ZlthaGQtPm1zZ291dF9pbmRleCsrXSA9IGJ1c193aWR0aDsKLQlhaGQtPm1zZ291dF9idWZbYWhkLT5tc2dvdXRfaW5kZXgrK10gPSBwcHJfb3B0aW9uczsKKwlhaGQtPm1zZ291dF9pbmRleCArPSBzcGlfcG9wdWxhdGVfcHByX21zZygKKwkJCWFoZC0+bXNnb3V0X2J1ZiArIGFoZC0+bXNnb3V0X2luZGV4LCBwZXJpb2QsIG9mZnNldCwKKwkJCWJ1c193aWR0aCwgcHByX29wdGlvbnMpOwogCWFoZC0+bXNnb3V0X2xlbiArPSA4OwogCWlmIChib290dmVyYm9zZSkgewogCQlwcmludGYoIiglczolYzolZDolZCk6IFNlbmRpbmcgUFBSIGJ1c193aWR0aCAleCwgcGVyaW9kICV4LCAiCkBAIC03MDk0LDcgKzcwODgsNiBAQAogCiAJYWhkX2ZsdXNoX3FvdXRmaWZvKGFoZCk7CiAKLQlhaGRfcGxhdGZvcm1fZmx1c2h3b3JrKGFoZCk7CiAJYWhkLT5mbGFncyAmPSB+QUhEX0FMTF9JTlRFUlJVUFRTOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYwppbmRleCA3MjU0ZWE1Li5iY2NlZDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKQEAgLTM3Myw4ICszNzMsNyBAQAogCQkJCQkgc3RydWN0IHNjYiAqKTsKIHN0YXRpYyB2b2lkIGFoZF9saW51eF9xdWV1ZV9jbWRfY29tcGxldGUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLAogCQkJCQkgc3RydWN0IHNjc2lfY21uZCAqY21kKTsKLXN0YXRpYyB2b2lkIGFoZF9saW51eF9zZW1fdGltZW91dCh1X2xvbmcgYXJnKTsKLXN0YXRpYyBpbnQgIGFoZF9saW51eF9xdWV1ZV9yZWNvdmVyeV9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBzY2JfZmxhZyBmbGFnKTsKK3N0YXRpYyBpbnQgYWhkX2xpbnV4X3F1ZXVlX2Fib3J0X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogc3RhdGljIHZvaWQgYWhkX2xpbnV4X2luaXRpYWxpemVfc2NzaV9idXMoc3RydWN0IGFoZF9zb2Z0YyAqYWhkKTsKIHN0YXRpYyB1X2ludCBhaGRfbGludXhfdXNlcl90YWdkZXB0aChzdHJ1Y3QgYWhkX3NvZnRjICphaGQsCiAJCQkJICAgICBzdHJ1Y3QgYWhkX2RldmluZm8gKmRldmluZm8pOwpAQCAtNDUzLDE4ICs0NTIsMTMgQEAKIAlzdHJ1Y3QJIGFoZF9zb2Z0YyAqYWhkOwogCXN0cnVjdAkgYWhkX2xpbnV4X2RldmljZSAqZGV2ID0gc2NzaV90cmFuc3BvcnRfZGV2aWNlX2RhdGEoY21kLT5kZXZpY2UpOwogCWludCBydG4gPSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlhaGQgPSAqKHN0cnVjdCBhaGRfc29mdGMgKiopY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCi0JYWhkX2xvY2soYWhkLCAmZmxhZ3MpOwotCWlmIChhaGQtPnBsYXRmb3JtX2RhdGEtPnFmcm96ZW4gPT0gMCkgewotCQljbWQtPnNjc2lfZG9uZSA9IHNjc2lfZG9uZTsKLQkJY21kLT5yZXN1bHQgPSBDQU1fUkVRX0lOUFJPRyA8PCAxNjsKLQkJcnRuID0gYWhkX2xpbnV4X3J1bl9jb21tYW5kKGFoZCwgZGV2LCBjbWQpOworCWNtZC0+c2NzaV9kb25lID0gc2NzaV9kb25lOworCWNtZC0+cmVzdWx0ID0gQ0FNX1JFUV9JTlBST0cgPDwgMTY7CisJcnRuID0gYWhkX2xpbnV4X3J1bl9jb21tYW5kKGFoZCwgZGV2LCBjbWQpOwogCi0JfQotCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwogCXJldHVybiBydG47CiB9CiAKQEAgLTQ4Nyw2ICs0ODEsNyBAQAogewogCXN0cnVjdAlhaGRfc29mdGMgKmFoZCA9CiAJCSooKHN0cnVjdCBhaGRfc29mdGMgKiopZGV2X3RvX3Nob3N0KCZzdGFyZ2V0LT5kZXYpLT5ob3N0ZGF0YSk7CisJc3RydWN0IHNlZXByb21fY29uZmlnICpzYyA9IGFoZC0+c2VlcF9jb25maWc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKiphaGRfdGFyZ3AgPSBhaGRfbGludXhfdGFyZ2V0X2luX3NvZnRjKHN0YXJnZXQpOwogCXN0cnVjdCBhaGRfbGludXhfdGFyZ2V0ICp0YXJnID0gc2NzaV90cmFuc3BvcnRfdGFyZ2V0X2RhdGEoc3RhcmdldCk7CkBAIC01MDIsMTggKzQ5NywzOCBAQAogCSphaGRfdGFyZ3AgPSBzdGFyZ2V0OwogCW1lbXNldCh0YXJnLCAwLCBzaXplb2YoKnRhcmcpKTsKIAorCWlmIChzYykgeworCQlpbnQgZmxhZ3MgPSBzYy0+ZGV2aWNlX2ZsYWdzW3N0YXJnZXQtPmlkXTsKKworCQl0aW5mbyA9IGFoZF9mZXRjaF90cmFuc2luZm8oYWhkLCAnQScsIGFoZC0+b3VyX2lkLAorCQkJCQkgICAgc3RhcmdldC0+aWQsICZ0c3RhdGUpOworCisJCWlmICgoZmxhZ3MgICYgQ0ZQQUNLRVRJWkVEKSA9PSAwKSB7CisJCQkvKiBEbyBub3QgbmVnb3RpYXRlIHBhY2tldGl6ZWQgdHJhbnNmZXJzICovCisJCQlzcGlfcmRfc3RybShzdGFyZ2V0KSA9IDA7CisJCQlzcGlfcGNvbXBfZW4oc3RhcmdldCkgPSAwOworCQkJc3BpX3J0aShzdGFyZ2V0KSA9IDA7CisJCQlzcGlfd3JfZmxvdyhzdGFyZ2V0KSA9IDA7CisJCQlzcGlfaG9sZF9tY3Moc3RhcmdldCkgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKChhaGQtPmZlYXR1cmVzICYgQUhEX1JUSSkgPT0gMCkKKwkJCQlzcGlfcnRpKHN0YXJnZXQpID0gMDsKKwkJfQorCisJCWlmICgoZmxhZ3MgJiBDRlFBUykgPT0gMCkKKwkJCXNwaV9xYXMoc3RhcmdldCkgPSAwOworCisJCS8qIFRyYW5zaW5mbyB2YWx1ZXMgaGF2ZSBiZWVuIHNldCB0byBCSU9TIHNldHRpbmdzICovCisJCXNwaV9tYXhfd2lkdGgoc3RhcmdldCkgPSAoZmxhZ3MgJiBDRldJREVCKSA/IDEgOiAwOworCQlzcGlfbWluX3BlcmlvZChzdGFyZ2V0KSA9IHRpbmZvLT51c2VyLnBlcmlvZDsKKwkJc3BpX21heF9vZmZzZXQoc3RhcmdldCkgPSB0aW5mby0+dXNlci5vZmZzZXQ7CisJfQorCiAJdGluZm8gPSBhaGRfZmV0Y2hfdHJhbnNpbmZvKGFoZCwgY2hhbm5lbCwgYWhkLT5vdXJfaWQsCiAJCQkJICAgIHN0YXJnZXQtPmlkLCAmdHN0YXRlKTsKIAlhaGRfY29tcGlsZV9kZXZpbmZvKCZkZXZpbmZvLCBhaGQtPm91cl9pZCwgc3RhcmdldC0+aWQsCiAJCQkgICAgQ0FNX0xVTl9XSUxEQ0FSRCwgY2hhbm5lbCwKIAkJCSAgICBST0xFX0lOSVRJQVRPUik7Ci0Jc3BpX21pbl9wZXJpb2Qoc3RhcmdldCkgPSBBSERfU1lOQ1JBVEVfTUFYOyAvKiBXZSBjYW4gZG8gVTMyMCAqLwotCWlmICgoYWhkLT5idWdzICYgQUhEX1BBQ0VEX05FR1RBQkxFX0JVRykgIT0gMCkKLQkJc3BpX21heF9vZmZzZXQoc3RhcmdldCkgPSBNQVhfT0ZGU0VUX1BBQ0VEX0JVRzsKLQllbHNlCi0JCXNwaV9tYXhfb2Zmc2V0KHN0YXJnZXQpID0gTUFYX09GRlNFVF9QQUNFRDsKLQlzcGlfbWF4X3dpZHRoKHN0YXJnZXQpID0gYWhkLT5mZWF0dXJlcyAmIEFIRF9XSURFOwotCiAJYWhkX3NldF9zeW5jcmF0ZShhaGQsICZkZXZpbmZvLCAwLCAwLCAwLAogCQkJIEFIRF9UUkFOU19HT0FMLCAvKnBhdXNlZCovRkFMU0UpOwogCWFoZF9zZXRfd2lkdGgoYWhkLCAmZGV2aW5mbywgTVNHX0VYVF9XRFRSX0JVU184X0JJVCwKQEAgLTY1NCwxMCArNjY5LDkgQEAKIGFoZF9saW51eF9hYm9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJaW50IGVycm9yOworCQorCWVycm9yID0gYWhkX2xpbnV4X3F1ZXVlX2Fib3J0X2NtZChjbWQpOwogCi0JZXJyb3IgPSBhaGRfbGludXhfcXVldWVfcmVjb3ZlcnlfY21kKGNtZCwgU0NCX0FCT1JUKTsKLQlpZiAoZXJyb3IgIT0gMCkKLQkJcHJpbnRmKCJhaWM3OXh4X2Fib3J0IHJldHVybnMgMHgleFxuIiwgZXJyb3IpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNjY3LDEyICs2ODEsOTcgQEAKIHN0YXRpYyBpbnQKIGFoZF9saW51eF9kZXZfcmVzZXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCWludCBlcnJvcjsKKwlzdHJ1Y3QgYWhkX3NvZnRjICphaGQ7CisJc3RydWN0IGFoZF9saW51eF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc2NiICpyZXNldF9zY2I7CisJdV9pbnQgIGNkYl9ieXRlOworCWludCAgICByZXR2YWwgPSBTVUNDRVNTOworCWludCAgICBwYXVzZWQ7CisJaW50ICAgIHdhaXQ7CisJc3RydWN0CWFoZF9pbml0aWF0b3JfdGluZm8gKnRpbmZvOworCXN0cnVjdAlhaGRfdG1vZGVfdHN0YXRlICp0c3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlERUNMQVJFX0NPTVBMRVRJT04oZG9uZSk7CiAKLQllcnJvciA9IGFoZF9saW51eF9xdWV1ZV9yZWNvdmVyeV9jbWQoY21kLCBTQ0JfREVWSUNFX1JFU0VUKTsKLQlpZiAoZXJyb3IgIT0gMCkKLQkJcHJpbnRmKCJhaWM3OXh4X2Rldl9yZXNldCByZXR1cm5zIDB4JXhcbiIsIGVycm9yKTsKLQlyZXR1cm4gZXJyb3I7CisJcmVzZXRfc2NiID0gTlVMTDsKKwlwYXVzZWQgPSBGQUxTRTsKKwl3YWl0ID0gRkFMU0U7CisJYWhkID0gKihzdHJ1Y3QgYWhkX3NvZnRjICoqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKKworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAorCQkgICAgIkF0dGVtcHRpbmcgdG8gcXVldWUgYSBUQVJHRVQgUkVTRVQgbWVzc2FnZToiKTsKKworCXByaW50ZigiQ0RCOiIpOworCWZvciAoY2RiX2J5dGUgPSAwOyBjZGJfYnl0ZSA8IGNtZC0+Y21kX2xlbjsgY2RiX2J5dGUrKykKKwkJcHJpbnRmKCIgMHgleCIsIGNtZC0+Y21uZFtjZGJfYnl0ZV0pOworCXByaW50ZigiXG4iKTsKKworCS8qCisJICogRGV0ZXJtaW5lIGlmIHdlIGN1cnJlbnRseSBvd24gdGhpcyBjb21tYW5kLgorCSAqLworCWRldiA9IHNjc2lfdHJhbnNwb3J0X2RldmljZV9kYXRhKGNtZC0+ZGV2aWNlKTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQkvKgorCQkgKiBObyB0YXJnZXQgZGV2aWNlIGZvciB0aGlzIGNvbW1hbmQgZXhpc3RzLAorCQkgKiBzbyB3ZSBtdXN0IG5vdCBzdGlsbCBvd24gdGhlIGNvbW1hbmQuCisJCSAqLworCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIklzIG5vdCBhbiBhY3RpdmUgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIFNVQ0NFU1M7CisJfQorCisJLyoKKwkgKiBHZW5lcmF0ZSB1cyBhIG5ldyBTQ0IKKwkgKi8KKwlyZXNldF9zY2IgPSBhaGRfZ2V0X3NjYihhaGQsIEFIRF9ORVZFUl9DT0xfSURYKTsKKwlpZiAoIXJlc2V0X3NjYikgeworCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIk5vIFNDQiBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gRkFJTEVEOworCX0KKworCXRpbmZvID0gYWhkX2ZldGNoX3RyYW5zaW5mbyhhaGQsICdBJywgYWhkLT5vdXJfaWQsCisJCQkJICAgIGNtZC0+ZGV2aWNlLT5pZCwgJnRzdGF0ZSk7CisJcmVzZXRfc2NiLT5pb19jdHggPSBjbWQ7CisJcmVzZXRfc2NiLT5wbGF0Zm9ybV9kYXRhLT5kZXYgPSBkZXY7CisJcmVzZXRfc2NiLT5zZ19jb3VudCA9IDA7CisJYWhkX3NldF9yZXNpZHVhbChyZXNldF9zY2IsIDApOworCWFoZF9zZXRfc2Vuc2VfcmVzaWR1YWwocmVzZXRfc2NiLCAwKTsKKwlyZXNldF9zY2ItPnBsYXRmb3JtX2RhdGEtPnhmZXJfbGVuID0gMDsKKwlyZXNldF9zY2ItPmhzY2ItPmNvbnRyb2wgPSAwOworCXJlc2V0X3NjYi0+aHNjYi0+c2NzaWlkID0gQlVJTERfU0NTSUlEKGFoZCxjbWQpOworCXJlc2V0X3NjYi0+aHNjYi0+bHVuID0gY21kLT5kZXZpY2UtPmx1bjsKKwlyZXNldF9zY2ItPmhzY2ItPmNkYl9sZW4gPSAwOworCXJlc2V0X3NjYi0+aHNjYi0+dGFza19tYW5hZ2VtZW50ID0gU0lVX1RBU0tNR01UX0xVTl9SRVNFVDsKKwlyZXNldF9zY2ItPmZsYWdzIHw9IFNDQl9ERVZJQ0VfUkVTRVR8U0NCX1JFQ09WRVJZX1NDQnxTQ0JfQUNUSVZFOworCWlmICgodGluZm8tPmN1cnIucHByX29wdGlvbnMgJiBNU0dfRVhUX1BQUl9JVV9SRVEpICE9IDApIHsKKwkJcmVzZXRfc2NiLT5mbGFncyB8PSBTQ0JfUEFDS0VUSVpFRDsKKwl9IGVsc2UgeworCQlyZXNldF9zY2ItPmhzY2ItPmNvbnRyb2wgfD0gTUtfTUVTU0FHRTsKKwl9CisJZGV2LT5vcGVuaW5ncy0tOworCWRldi0+YWN0aXZlKys7CisJZGV2LT5jb21tYW5kc19pc3N1ZWQrKzsKKworCWFoZF9sb2NrKGFoZCwgJmZsYWdzKTsKKworCUxJU1RfSU5TRVJUX0hFQUQoJmFoZC0+cGVuZGluZ19zY2JzLCByZXNldF9zY2IsIHBlbmRpbmdfbGlua3MpOworCWFoZF9xdWV1ZV9zY2IoYWhkLCByZXNldF9zY2IpOworCisJYWhkLT5wbGF0Zm9ybV9kYXRhLT5laF9kb25lID0gJmRvbmU7CisJYWhkX3VubG9jayhhaGQsICZmbGFncyk7CisKKwlwcmludGYoIiVzOiBEZXZpY2UgcmVzZXQgY29kZSBzbGVlcGluZ1xuIiwgYWhkX25hbWUoYWhkKSk7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRvbmUsIDUgKiBIWikpIHsKKwkJYWhkX2xvY2soYWhkLCAmZmxhZ3MpOworCQlhaGQtPnBsYXRmb3JtX2RhdGEtPmVoX2RvbmUgPSBOVUxMOworCQlhaGRfdW5sb2NrKGFoZCwgJmZsYWdzKTsKKwkJcHJpbnRmKCIlczogRGV2aWNlIHJlc2V0IHRpbWVyIGV4cGlyZWQgKGFjdGl2ZSAlZClcbiIsCisJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXYtPmFjdGl2ZSk7CisJCXJldHZhbCA9IEZBSUxFRDsKKwl9CisJcHJpbnRmKCIlczogRGV2aWNlIHJlc2V0IHJldHVybmluZyAweCV4XG4iLCBhaGRfbmFtZShhaGQpLCByZXR2YWwpOworCisJcmV0dXJuIChyZXR2YWwpOwogfQogCiAvKgpAQCAtNjgyLDcgKzc4MSw2IEBACiBhaGRfbGludXhfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3QgYWhkX3NvZnRjICphaGQ7Ci0JdV9sb25nIHM7CiAJaW50ICAgIGZvdW5kOwogCiAJYWhkID0gKihzdHJ1Y3QgYWhkX3NvZnRjICoqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKQEAgLTY5MSwxMCArNzg5LDggQEAKIAkJcHJpbnRmKCIlczogQnVzIHJlc2V0IGNhbGxlZCBmb3IgY21kICVwXG4iLAogCQkgICAgICAgYWhkX25hbWUoYWhkKSwgY21kKTsKICNlbmRpZgotCWFoZF9sb2NrKGFoZCwgJnMpOwogCWZvdW5kID0gYWhkX3Jlc2V0X2NoYW5uZWwoYWhkLCBzY21kX2NoYW5uZWwoY21kKSArICdBJywKIAkJCQkgIC8qaW5pdGlhdGUgcmVzZXQqL1RSVUUpOwotCWFoZF91bmxvY2soYWhkLCAmcyk7CiAKIAlpZiAoYm9vdHZlcmJvc2UpCiAJCXByaW50ZigiJXM6IFNDU0kgYnVzIHJlc2V0IGRlbGl2ZXJlZC4gIgpAQCAtODExLDU5ICs5MDcsNiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqIFBsYXRmb3JtIERlcGVuZGVudCBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENvbXBhcmUgImxlZnQgaGFuZCIgc29mdGMgd2l0aCAicmlnaHQgaGFuZCIgc29mdGMsIHJldHVybmluZzoKLSAqIDwgMCAtIGxhaGQgaGFzIGEgbG93ZXIgcHJpb3JpdHkgdGhhbiByYWhkCi0gKiAgIDAgLSBTb2Z0Y3MgYXJlIGVxdWFsCi0gKiA+IDAgLSBsYWhkIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHJhaGQKLSAqLwotaW50Ci1haGRfc29mdGNfY29tcChzdHJ1Y3QgYWhkX3NvZnRjICpsYWhkLCBzdHJ1Y3QgYWhkX3NvZnRjICpyYWhkKQotewotCWludAl2YWx1ZTsKLQotCS8qCi0JICogVW5kZXIgTGludXgsIGNhcmRzIGFyZSBvcmRlcmVkIGFzIGZvbGxvd3M6Ci0JICoJMSkgUENJIGRldmljZXMgdGhhdCBhcmUgbWFya2VkIGFzIHRoZSBib290IGNvbnRyb2xsZXIuCi0JICoJMikgUENJIGRldmljZXMgd2l0aCBCSU9TIGVuYWJsZWQgc29ydGVkIGJ5IGJ1cy9zbG90L2Z1bmMuCi0JICoJMykgQWxsIHJlbWFpbmluZyBQQ0kgZGV2aWNlcyBzb3J0ZWQgYnkgYnVzL3Nsb3QvZnVuYy4KLQkgKi8KLSNpZiAwCi0JdmFsdWUgPSAobGFoZC0+ZmxhZ3MgJiBBSERfQk9PVF9DSEFOTkVMKQotCSAgICAgIC0gKHJhaGQtPmZsYWdzICYgQUhEX0JPT1RfQ0hBTk5FTCk7Ci0JaWYgKHZhbHVlICE9IDApCi0JCS8qIENvbnRyb2xsZXJzIHNldCBmb3IgYm9vdCBoYXZlIGEgKmhpZ2hlciogcHJpb3JpdHkgKi8KLQkJcmV0dXJuICh2YWx1ZSk7Ci0jZW5kaWYKLQotCXZhbHVlID0gKGxhaGQtPmZsYWdzICYgQUhEX0JJT1NfRU5BQkxFRCkKLQkgICAgICAtIChyYWhkLT5mbGFncyAmIEFIRF9CSU9TX0VOQUJMRUQpOwotCWlmICh2YWx1ZSAhPSAwKQotCQkvKiBDb250cm9sbGVycyB3aXRoIEJJT1MgZW5hYmxlZCBoYXZlIGEgKmhpZ2hlciogcHJpb3JpdHkgKi8KLQkJcmV0dXJuICh2YWx1ZSk7Ci0KLQkvKiBTdGlsbCBlcXVhbC4gIFNvcnQgYnkgYnVzL3Nsb3QvZnVuYy4gKi8KLQlpZiAoYWljNzl4eF9yZXZlcnNlX3NjYW4gIT0gMCkKLQkJdmFsdWUgPSBhaGRfZ2V0X3BjaV9idXMobGFoZC0+ZGV2X3NvZnRjKQotCQkgICAgICAtIGFoZF9nZXRfcGNpX2J1cyhyYWhkLT5kZXZfc29mdGMpOwotCWVsc2UKLQkJdmFsdWUgPSBhaGRfZ2V0X3BjaV9idXMocmFoZC0+ZGV2X3NvZnRjKQotCQkgICAgICAtIGFoZF9nZXRfcGNpX2J1cyhsYWhkLT5kZXZfc29mdGMpOwotCWlmICh2YWx1ZSAhPSAwKQotCQlyZXR1cm4gKHZhbHVlKTsKLQlpZiAoYWljNzl4eF9yZXZlcnNlX3NjYW4gIT0gMCkKLQkJdmFsdWUgPSBhaGRfZ2V0X3BjaV9zbG90KGxhaGQtPmRldl9zb2Z0YykKLQkJICAgICAgLSBhaGRfZ2V0X3BjaV9zbG90KHJhaGQtPmRldl9zb2Z0Yyk7Ci0JZWxzZQotCQl2YWx1ZSA9IGFoZF9nZXRfcGNpX3Nsb3QocmFoZC0+ZGV2X3NvZnRjKQotCQkgICAgICAtIGFoZF9nZXRfcGNpX3Nsb3QobGFoZC0+ZGV2X3NvZnRjKTsKLQlpZiAodmFsdWUgIT0gMCkKLQkJcmV0dXJuICh2YWx1ZSk7Ci0KLQl2YWx1ZSA9IHJhaGQtPmNoYW5uZWwgLSBsYWhkLT5jaGFubmVsOwotCXJldHVybiAodmFsdWUpOwotfQotCiBzdGF0aWMgdm9pZAogYWhkX2xpbnV4X3NldHVwX2lvY2VsbF9pbmZvKHVfbG9uZyBpbmRleCwgaW50IGluc3RhbmNlLCBpbnQgdGFyZywgaW50MzJfdCB2YWx1ZSkKIHsKQEAgLTExOTQsNyArMTIzNyw2IEBACiAJbWVtc2V0KGFoZC0+cGxhdGZvcm1fZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBhaGRfcGxhdGZvcm1fZGF0YSkpOwogCWFoZC0+cGxhdGZvcm1fZGF0YS0+aXJxID0gQUhEX0xJTlVYX05PSVJROwogCWFoZF9sb2NraW5pdChhaGQpOwotCWluaXRfTVVURVhfTE9DS0VEKCZhaGQtPnBsYXRmb3JtX2RhdGEtPmVoX3NlbSk7CiAJYWhkLT5zZWx0aW1lID0gKGFpYzc5eHhfc2VsdGltZSAmIDB4MykgPDwgNDsKIAlyZXR1cm4gKDApOwogfQpAQCAtMTM0NiwxNCArMTM4OCwxMiBAQAogCiAJc3dpdGNoICgoZGV2LT5mbGFncyAmIChBSERfREVWX1FfQkFTSUN8QUhEX0RFVl9RX1RBR0dFRCkpKSB7CiAJY2FzZSBBSERfREVWX1FfQkFTSUM6Ci0JCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNkZXYsCi0JCQkJCU1TR19TSU1QTEVfVEFTSywKLQkJCQkJZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKKwkJc2NzaV9zZXRfdGFnX3R5cGUoc2RldiwgTVNHX1NJTVBMRV9UQVNLKTsKKwkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKIAkJYnJlYWs7CiAJY2FzZSBBSERfREVWX1FfVEFHR0VEOgotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAotCQkJCQlNU0dfT1JERVJFRF9UQVNLLAotCQkJCQlkZXYtPm9wZW5pbmdzICsgZGV2LT5hY3RpdmUpOworCQlzY3NpX3NldF90YWdfdHlwZShzZGV2LCBNU0dfT1JERVJFRF9UQVNLKTsKKwkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2RldiwgZGV2LT5vcGVuaW5ncyArIGRldi0+YWN0aXZlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyoKQEAgLTEzNjIsOSArMTQwMiw3IEBACiAJCSAqIHNlcmlhbGx5IG9uIHRoZSBjb250cm9sbGVyL2RldmljZS4gIFRoaXMgc2hvdWxkCiAJCSAqIHJlbW92ZSBzb21lIGxhdGVuY3kuCiAJCSAqLwotCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzZGV2LAotCQkJCQkvKk5PTi1UQUdHRUQqLzAsCi0JCQkJCS8qcXVldWUgZGVwdGgqLzIpOworCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIDEpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xNDQzLDYgKzE0ODEsOSBAQAogCXN0cnVjdAkgYWhkX3Rtb2RlX3RzdGF0ZSAqdHN0YXRlOwogCXVfaW50CSBjb2xfaWR4OwogCXVpbnQxNl90IG1hc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWFoZF9sb2NrKGFoZCwgJmZsYWdzKTsKIAogCS8qCiAJICogR2V0IGFuIHNjYiB0byB1c2UuCkBAIC0xNDU4LDYgKzE0OTksNyBAQAogCX0KIAlpZiAoKHNjYiA9IGFoZF9nZXRfc2NiKGFoZCwgY29sX2lkeCkpID09IE5VTEwpIHsKIAkJYWhkLT5mbGFncyB8PSBBSERfUkVTT1VSQ0VfU0hPUlRBR0U7CisJCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKIAl9CiAKQEAgLTE0ODQsMzAgKzE1MjYsNiBAQAogCWlmICgodHN0YXRlLT5hdXRvX25lZ290aWF0ZSAmIG1hc2spICE9IDApIHsKIAkJc2NiLT5mbGFncyB8PSBTQ0JfQVVUT19ORUdPVElBVEU7CiAJCXNjYi0+aHNjYi0+Y29udHJvbCB8PSBNS19NRVNTQUdFOwotCQl9IGVsc2UgaWYgKGNtZC0+Y21uZFswXSA9PSBJTlFVSVJZCi0JCQkmJiAodGluZm8tPmN1cnIub2Zmc2V0ICE9IDAKLQkJCSB8fCB0aW5mby0+Y3Vyci53aWR0aCAhPSBNU0dfRVhUX1dEVFJfQlVTXzhfQklUCi0JCQkgfHwgdGluZm8tPmN1cnIucHByX29wdGlvbnMgIT0gMCkKLQkJCSYmICh0aW5mby0+Y3Vyci5wcHJfb3B0aW9ucyAmIE1TR19FWFRfUFBSX0lVX1JFUSk9PTApIHsKLQkJCS8qCi0JCQkgKiBUaGUgU0NTSSBzcGVjIHJlcXVpcmVzIGlucXVpcnkKLQkJCSAqIGNvbW1hbmRzIHRvIGNvbXBsZXRlIHdpdGhvdXQKLQkJCSAqIHJlcG9ydGluZyB1bml0IGF0dGVudGlvbiBjb25kaXRpb25zLgotCQkJICogQmVjYXVzZSBvZiB0aGlzLCBhbiBpbnF1aXJ5IGNvbW1hbmQKLQkJCSAqIHRoYXQgb2NjdXJzIGp1c3QgYWZ0ZXIgYSBkZXZpY2UgaXMKLQkJCSAqIHJlc2V0IHdpbGwgcmVzdWx0IGluIGEgZGF0YSBwaGFzZQotCQkJICogd2l0aCBtaXNtYXRjaGVkIG5lZ290aWF0ZWQgcmF0ZXMuCi0JCQkgKiBUaGUgY29yZSBhbHJlYWR5IGZvcmNlcyBhIHJlbmVnb3RpYXRpb24KLQkJCSAqIGZvciByZXNldCBldmVudHMgdGhhdCBhcmUgdmlzaWJsZSB0bwotCQkJICogb3VyIGNvbnRyb2xsZXIgb3IgdGhhdCB3ZSBpbml0aWF0ZSwKLQkJCSAqIGJ1dCBhIHRoaXJkIHBhcnR5IGRldmljZSByZXNldCBvciBhCi0JCQkgKiBob3QtcGx1ZyBpbnNlcnRpb24gY2FuIHN0aWxsIGNhdXNlIHRoaXMKLQkJCSAqIGlzc3VlLiAgVGhlcmVmb3JlLCB3ZSBmb3JjZSBhIHJlLW5lZ290aWF0aW9uCi0JCQkgKiBmb3IgZXZlcnkgaW5xdWlyeSBjb21tYW5kIHVubGVzcyB3ZQotCQkJICogYXJlIGFzeW5jLgotCQkJICovCi0JCQlzY2ItPmZsYWdzIHw9IFNDQl9ORUdPVElBVEU7Ci0JCQlzY2ItPmhzY2ItPmNvbnRyb2wgfD0gTUtfTUVTU0FHRTsKIAl9CiAKIAlpZiAoKGRldi0+ZmxhZ3MgJiAoQUhEX0RFVl9RX1RBR0dFRHxBSERfREVWX1FfQkFTSUMpKSAhPSAwKSB7CkBAIC0xNTgzLDYgKzE2MDEsOCBAQAogCXNjYi0+ZmxhZ3MgfD0gU0NCX0FDVElWRTsKIAlhaGRfcXVldWVfc2NiKGFoZCwgc2NiKTsKIAorCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MDQsMTIgKzE2MjQsNiBAQAogfQogCiB2b2lkCi1haGRfcGxhdGZvcm1fZmx1c2h3b3JrKHN0cnVjdCBhaGRfc29mdGMgKmFoZCkKLXsKLQotfQotCi12b2lkCiBhaGRfc2VuZF9hc3luYyhzdHJ1Y3QgYWhkX3NvZnRjICphaGQsIGNoYXIgY2hhbm5lbCwKIAkgICAgICAgdV9pbnQgdGFyZ2V0LCB1X2ludCBsdW4sIGFjX2NvZGUgY29kZSwgdm9pZCAqYXJnKQogewpAQCAtMTYxOCw3ICsxNjMyLDYgQEAKIAl7CiAJCWNoYXIJYnVmWzgwXTsKIAkJc3RydWN0ICBzY3NpX3RhcmdldCAqc3RhcmdldDsKLQkJc3RydWN0CWFoZF9saW51eF90YXJnZXQgKnRhcmc7CiAJCXN0cnVjdAlpbmZvX3N0ciBpbmZvOwogCQlzdHJ1Y3QJYWhkX2luaXRpYXRvcl90aW5mbyAqdGluZm87CiAJCXN0cnVjdAlhaGRfdG1vZGVfdHN0YXRlICp0c3RhdGU7CkBAIC0xNjUxLDcgKzE2NjQsNiBAQAogCQlzdGFyZ2V0ID0gYWhkLT5wbGF0Zm9ybV9kYXRhLT5zdGFyZ2V0W3RhcmdldF07CiAJCWlmIChzdGFyZ2V0ID09IE5VTEwpCiAJCQlicmVhazsKLQkJdGFyZyA9IHNjc2lfdHJhbnNwb3J0X3RhcmdldF9kYXRhKHN0YXJnZXQpOwogCiAJCXRhcmdldF9wcHJfb3B0aW9ucyA9CiAJCQkoc3BpX2R0KHN0YXJnZXQpID8gTVNHX0VYVF9QUFJfRFRfUkVRIDogMCkKQEAgLTE4MDMsMTAgKzE4MTUsOSBAQAogCQlpZiAoYWhkX2dldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiKSA9PSBDQU1fQkRSX1NFTlQKIAkJIHx8IGFoZF9nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYikgPT0gQ0FNX1JFUV9BQk9SVEVEKQogCQkJYWhkX3NldF90cmFuc2FjdGlvbl9zdGF0dXMoc2NiLCBDQU1fQ01EX1RJTUVPVVQpOwotCQlpZiAoKGFoZC0+cGxhdGZvcm1fZGF0YS0+ZmxhZ3MgJiBBSERfU0NCX1VQX0VIX1NFTSkgIT0gMCkgewotCQkJYWhkLT5wbGF0Zm9ybV9kYXRhLT5mbGFncyAmPSB+QUhEX1NDQl9VUF9FSF9TRU07Ci0JCQl1cCgmYWhkLT5wbGF0Zm9ybV9kYXRhLT5laF9zZW0pOwotCQl9CisKKwkJaWYgKGFoZC0+cGxhdGZvcm1fZGF0YS0+ZWhfZG9uZSkKKwkJCWNvbXBsZXRlKGFoZC0+cGxhdGZvcm1fZGF0YS0+ZWhfZG9uZSk7CiAJfQogCiAJYWhkX2ZyZWVfc2NiKGFoZCwgc2NiKTsKQEAgLTE5NjEsMTMzICsxOTcyLDEyNSBAQAogc3RhdGljIHZvaWQKIGFoZF9saW51eF9xdWV1ZV9jbWRfY29tcGxldGUoc3RydWN0IGFoZF9zb2Z0YyAqYWhkLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CisJaW50IHN0YXR1czsKKwlpbnQgbmV3X3N0YXR1cyA9IERJRF9PSzsKKwlpbnQgZG9fZmFsbGJhY2sgPSAwOworCWludCBzY3NpX3N0YXR1czsKKwogCS8qCiAJICogTWFwIENBTSBlcnJvciBjb2RlcyBpbnRvIExpbnV4IEVycm9yIGNvZGVzLiAgV2UKIAkgKiBhdm9pZCB0aGUgY29udmVyc2lvbiBzbyB0aGF0IHRoZSBEViBjb2RlIGhhcyB0aGUKIAkgKiBmdWxsIGVycm9yIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB3aGVuIG1ha2luZwogCSAqIHN0YXRlIGNoYW5nZSBkZWNpc2lvbnMuCiAJICovCi0JewotCQl1aW50MzJfdCBzdGF0dXM7Ci0JCXVfaW50IG5ld19zdGF0dXM7CiAKLQkJc3RhdHVzID0gYWhkX2NtZF9nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKGNtZCk7Ci0JCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgQ0FNX1JFUV9JTlBST0c6Ci0JCWNhc2UgQ0FNX1JFUV9DTVA6Ci0JCWNhc2UgQ0FNX1NDU0lfU1RBVFVTX0VSUk9SOgotCQkJbmV3X3N0YXR1cyA9IERJRF9PSzsKLQkJCWJyZWFrOwotCQljYXNlIENBTV9SRVFfQUJPUlRFRDoKLQkJCW5ld19zdGF0dXMgPSBESURfQUJPUlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBDQU1fQlVTWToKLQkJCW5ld19zdGF0dXMgPSBESURfQlVTX0JVU1k7Ci0JCQlicmVhazsKLQkJY2FzZSBDQU1fUkVRX0lOVkFMSUQ6Ci0JCWNhc2UgQ0FNX1BBVEhfSU5WQUxJRDoKLQkJCW5ld19zdGF0dXMgPSBESURfQkFEX1RBUkdFVDsKLQkJCWJyZWFrOwotCQljYXNlIENBTV9TRUxfVElNRU9VVDoKLQkJCW5ld19zdGF0dXMgPSBESURfTk9fQ09OTkVDVDsKLQkJCWJyZWFrOwotCQljYXNlIENBTV9TQ1NJX0JVU19SRVNFVDoKLQkJY2FzZSBDQU1fQkRSX1NFTlQ6Ci0JCQluZXdfc3RhdHVzID0gRElEX1JFU0VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0FNX1VOQ09SX1BBUklUWToKLQkJCW5ld19zdGF0dXMgPSBESURfUEFSSVRZOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0FNX0NNRF9USU1FT1VUOgotCQkJbmV3X3N0YXR1cyA9IERJRF9USU1FX09VVDsKLQkJCWJyZWFrOwotCQljYXNlIENBTV9VQV9BQk9SVDoKLQkJY2FzZSBDQU1fUkVRX0NNUF9FUlI6Ci0JCWNhc2UgQ0FNX0FVVE9TRU5TRV9GQUlMOgotCQljYXNlIENBTV9OT19IQkE6Ci0JCWNhc2UgQ0FNX0RBVEFfUlVOX0VSUjoKLQkJY2FzZSBDQU1fVU5FWFBfQlVTRlJFRToKLQkJY2FzZSBDQU1fU0VRVUVOQ0VfRkFJTDoKLQkJY2FzZSBDQU1fQ0NCX0xFTl9FUlI6Ci0JCWNhc2UgQ0FNX1BST1ZJREVfRkFJTDoKLQkJY2FzZSBDQU1fUkVRX1RFUk1JTzoKLQkJY2FzZSBDQU1fVU5SRUNfSEJBX0VSUk9SOgotCQljYXNlIENBTV9SRVFfVE9PX0JJRzoKLQkJCW5ld19zdGF0dXMgPSBESURfRVJST1I7Ci0JCQlicmVhazsKLQkJY2FzZSBDQU1fUkVRVUVVRV9SRVE6Ci0JCQluZXdfc3RhdHVzID0gRElEX1JFUVVFVUU7CisJc3RhdHVzID0gYWhkX2NtZF9nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKGNtZCk7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIENBTV9SRVFfSU5QUk9HOgorCWNhc2UgQ0FNX1JFUV9DTVA6CisJCW5ld19zdGF0dXMgPSBESURfT0s7CisJCWJyZWFrOworCWNhc2UgQ0FNX0FVVE9TRU5TRV9GQUlMOgorCQluZXdfc3RhdHVzID0gRElEX0VSUk9SOworCQkvKiBGYWxsdGhyb3VnaCAqLworCWNhc2UgQ0FNX1NDU0lfU1RBVFVTX0VSUk9SOgorCQlzY3NpX3N0YXR1cyA9IGFoZF9jbWRfZ2V0X3Njc2lfc3RhdHVzKGNtZCk7CisKKwkJc3dpdGNoKHNjc2lfc3RhdHVzKSB7CisJCWNhc2UgU0NTSV9TVEFUVVNfQ01EX1RFUk1JTkFURUQ6CisJCWNhc2UgU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORDoKKwkJCWlmICgoY21kLT5yZXN1bHQgPj4gMjQpICE9IERSSVZFUl9TRU5TRSkgeworCQkJCWRvX2ZhbGxiYWNrID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJc3RydWN0IHNjc2lfc2Vuc2VfZGF0YSAqc2Vuc2U7CisJCQkJCisJCQkJc2Vuc2UgPSAoc3RydWN0IHNjc2lfc2Vuc2VfZGF0YSAqKQorCQkJCQkmY21kLT5zZW5zZV9idWZmZXI7CisJCQkJaWYgKHNlbnNlLT5leHRyYV9sZW4gPj0gNSAmJgorCQkJCSAgICAoc2Vuc2UtPmFkZF9zZW5zZV9jb2RlID09IDB4NDcKKwkJCQkgICAgIHx8IHNlbnNlLT5hZGRfc2Vuc2VfY29kZSA9PSAweDQ4KSkKKwkJCQkJZG9fZmFsbGJhY2sgPSAxOworCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KLQkJCW5ld19zdGF0dXMgPSBESURfRVJST1I7CiAJCQlicmVhazsKIAkJfQotCi0JCWFoZF9jbWRfc2V0X3RyYW5zYWN0aW9uX3N0YXR1cyhjbWQsIG5ld19zdGF0dXMpOworCQlicmVhazsKKwljYXNlIENBTV9SRVFfQUJPUlRFRDoKKwkJbmV3X3N0YXR1cyA9IERJRF9BQk9SVDsKKwkJYnJlYWs7CisJY2FzZSBDQU1fQlVTWToKKwkJbmV3X3N0YXR1cyA9IERJRF9CVVNfQlVTWTsKKwkJYnJlYWs7CisJY2FzZSBDQU1fUkVRX0lOVkFMSUQ6CisJY2FzZSBDQU1fUEFUSF9JTlZBTElEOgorCQluZXdfc3RhdHVzID0gRElEX0JBRF9UQVJHRVQ7CisJCWJyZWFrOworCWNhc2UgQ0FNX1NFTF9USU1FT1VUOgorCQluZXdfc3RhdHVzID0gRElEX05PX0NPTk5FQ1Q7CisJCWJyZWFrOworCWNhc2UgQ0FNX1NDU0lfQlVTX1JFU0VUOgorCWNhc2UgQ0FNX0JEUl9TRU5UOgorCQluZXdfc3RhdHVzID0gRElEX1JFU0VUOworCQlicmVhazsKKwljYXNlIENBTV9VTkNPUl9QQVJJVFk6CisJCW5ld19zdGF0dXMgPSBESURfUEFSSVRZOworCQlkb19mYWxsYmFjayA9IDE7CisJCWJyZWFrOworCWNhc2UgQ0FNX0NNRF9USU1FT1VUOgorCQluZXdfc3RhdHVzID0gRElEX1RJTUVfT1VUOworCQlkb19mYWxsYmFjayA9IDE7CisJCWJyZWFrOworCWNhc2UgQ0FNX1JFUV9DTVBfRVJSOgorCWNhc2UgQ0FNX1VORVhQX0JVU0ZSRUU6CisJY2FzZSBDQU1fREFUQV9SVU5fRVJSOgorCQluZXdfc3RhdHVzID0gRElEX0VSUk9SOworCQlkb19mYWxsYmFjayA9IDE7CisJCWJyZWFrOworCWNhc2UgQ0FNX1VBX0FCT1JUOgorCWNhc2UgQ0FNX05PX0hCQToKKwljYXNlIENBTV9TRVFVRU5DRV9GQUlMOgorCWNhc2UgQ0FNX0NDQl9MRU5fRVJSOgorCWNhc2UgQ0FNX1BST1ZJREVfRkFJTDoKKwljYXNlIENBTV9SRVFfVEVSTUlPOgorCWNhc2UgQ0FNX1VOUkVDX0hCQV9FUlJPUjoKKwljYXNlIENBTV9SRVFfVE9PX0JJRzoKKwkJbmV3X3N0YXR1cyA9IERJRF9FUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBDQU1fUkVRVUVVRV9SRVE6CisJCW5ld19zdGF0dXMgPSBESURfUkVRVUVVRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisJCW5ld19zdGF0dXMgPSBESURfRVJST1I7CisJCWJyZWFrOwogCX0KIAorCWlmIChkb19mYWxsYmFjaykgeworCQlwcmludGYoIiVzOiBkZXZpY2Ugb3ZlcnJ1biAoc3RhdHVzICV4KSBvbiAlZDolZDolZFxuIiwKKwkJICAgICAgIGFoZF9uYW1lKGFoZCksIHN0YXR1cywgY21kLT5kZXZpY2UtPmNoYW5uZWwsCisJCSAgICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCX0KKworCWFoZF9jbWRfc2V0X3RyYW5zYWN0aW9uX3N0YXR1cyhjbWQsIG5ld19zdGF0dXMpOworCiAJY21kLT5zY3NpX2RvbmUoY21kKTsKIH0KIAotc3RhdGljIHZvaWQKLWFoZF9saW51eF9zZW1fdGltZW91dCh1X2xvbmcgYXJnKQotewotCXN0cnVjdAlhaGRfc29mdGMgKmFoZDsKLQl1X2xvbmcJczsKLQotCWFoZCA9IChzdHJ1Y3QgYWhkX3NvZnRjICopYXJnOwotCi0JYWhkX2xvY2soYWhkLCAmcyk7Ci0JaWYgKChhaGQtPnBsYXRmb3JtX2RhdGEtPmZsYWdzICYgQUhEX1NDQl9VUF9FSF9TRU0pICE9IDApIHsKLQkJYWhkLT5wbGF0Zm9ybV9kYXRhLT5mbGFncyAmPSB+QUhEX1NDQl9VUF9FSF9TRU07Ci0JCXVwKCZhaGQtPnBsYXRmb3JtX2RhdGEtPmVoX3NlbSk7Ci0JfQotCWFoZF91bmxvY2soYWhkLCAmcyk7Ci19Ci0KIHZvaWQKIGFoZF9mcmVlemVfc2ltcShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCiB7Ci0JdW5zaWduZWQgbG9uZyBzOwotCi0JYWhkX2xvY2soYWhkLCAmcyk7Ci0JYWhkLT5wbGF0Zm9ybV9kYXRhLT5xZnJvemVuKys7Ci0JaWYgKGFoZC0+cGxhdGZvcm1fZGF0YS0+cWZyb3plbiA9PSAxKSB7Ci0JCXNjc2lfYmxvY2tfcmVxdWVzdHMoYWhkLT5wbGF0Zm9ybV9kYXRhLT5ob3N0KTsKLQkJYWhkX3BsYXRmb3JtX2Fib3J0X3NjYnMoYWhkLCBDQU1fVEFSR0VUX1dJTERDQVJELCBBTExfQ0hBTk5FTFMsCi0JCQkJCUNBTV9MVU5fV0lMRENBUkQsIFNDQl9MSVNUX05VTEwsCi0JCQkJCVJPTEVfSU5JVElBVE9SLCBDQU1fUkVRVUVVRV9SRVEpOwotCX0KLQlhaGRfdW5sb2NrKGFoZCwgJnMpOworCXNjc2lfYmxvY2tfcmVxdWVzdHMoYWhkLT5wbGF0Zm9ybV9kYXRhLT5ob3N0KTsKIH0KIAogdm9pZAogYWhkX3JlbGVhc2Vfc2ltcShzdHJ1Y3QgYWhkX3NvZnRjICphaGQpCiB7Ci0JdV9sb25nIHM7Ci0JaW50ICAgIHVuYmxvY2tfcmVxczsKLQotCXVuYmxvY2tfcmVxcyA9IDA7Ci0JYWhkX2xvY2soYWhkLCAmcyk7Ci0JaWYgKGFoZC0+cGxhdGZvcm1fZGF0YS0+cWZyb3plbiA+IDApCi0JCWFoZC0+cGxhdGZvcm1fZGF0YS0+cWZyb3plbi0tOwotCWlmIChhaGQtPnBsYXRmb3JtX2RhdGEtPnFmcm96ZW4gPT0gMCkgewotCQl1bmJsb2NrX3JlcXMgPSAxOwotCX0KLQlhaGRfdW5sb2NrKGFoZCwgJnMpOwotCS8qCi0JICogVGhlcmUgaXMgc3RpbGwgYSByYWNlIGhlcmUuICBUaGUgbWlkLWxheWVyCi0JICogc2hvdWxkIGtlZXAgaXRzIG93biBmcmVlemUgY291bnQgYW5kIHVzZQotCSAqIGEgYm90dG9tIGhhbGYgaGFuZGxlciB0byBydW4gdGhlIHF1ZXVlcwotCSAqIHNvIHdlIGNhbiB1bmJsb2NrIHdpdGggb3VyIG93biBsb2NrIGhlbGQuCi0JICovCi0JaWYgKHVuYmxvY2tfcmVxcykKLQkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKGFoZC0+cGxhdGZvcm1fZGF0YS0+aG9zdCk7CisJc2NzaV91bmJsb2NrX3JlcXVlc3RzKGFoZC0+cGxhdGZvcm1fZGF0YS0+aG9zdCk7CiB9CiAKIHN0YXRpYyBpbnQKLWFoZF9saW51eF9xdWV1ZV9yZWNvdmVyeV9jbWQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBzY2JfZmxhZyBmbGFnKQorYWhkX2xpbnV4X3F1ZXVlX2Fib3J0X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IGFoZF9zb2Z0YyAqYWhkOwogCXN0cnVjdCBhaGRfbGludXhfZGV2aWNlICpkZXY7CkBAIC0yMTAyLDcgKzIxMDUsNiBAQAogCWludCAgICBwYXVzZWQ7CiAJaW50ICAgIHdhaXQ7CiAJaW50ICAgIGRpc2Nvbm5lY3RlZDsKLQlpbnQgICAgZm91bmQ7CiAJYWhkX21vZGVfc3RhdGUgc2F2ZWRfbW9kZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjExMiw4ICsyMTE0LDcgQEAKIAlhaGQgPSAqKHN0cnVjdCBhaGRfc29mdGMgKiopY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCiAJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCi0JICAgICAgICJBdHRlbXB0aW5nIHRvIHF1ZXVlIGElcyBtZXNzYWdlOiIsCi0JICAgICAgIGZsYWcgPT0gU0NCX0FCT1JUID8gIm4gQUJPUlQiIDogIiBUQVJHRVQgUkVTRVQiKTsKKwkJICAgICJBdHRlbXB0aW5nIHRvIHF1ZXVlIGFuIEFCT1JUIG1lc3NhZ2U6Iik7CiAKIAlwcmludGYoIkNEQjoiKTsKIAlmb3IgKGNkYl9ieXRlID0gMDsgY2RiX2J5dGUgPCBjbWQtPmNtZF9sZW47IGNkYl9ieXRlKyspCkBAIC0yMTQ5LDE5ICsyMTUwLDYgQEAKIAkJCWJyZWFrOwogCX0KIAotCWlmIChwZW5kaW5nX3NjYiA9PSBOVUxMICYmIGZsYWcgPT0gU0NCX0RFVklDRV9SRVNFVCkgewotCi0JCS8qIEFueSBTQ0IgZm9yIHRoaXMgZGV2aWNlIHdpbGwgZG8gZm9yIGEgdGFyZ2V0IHJlc2V0ICovCi0JCUxJU1RfRk9SRUFDSChwZW5kaW5nX3NjYiwgJmFoZC0+cGVuZGluZ19zY2JzLCBwZW5kaW5nX2xpbmtzKSB7Ci0JCSAgCWlmIChhaGRfbWF0Y2hfc2NiKGFoZCwgcGVuZGluZ19zY2IsCi0JCQkJCSAgc2NtZF9pZChjbWQpLAotCQkJCQkgIHNjbWRfY2hhbm5lbChjbWQpICsgJ0EnLAotCQkJCQkgIENBTV9MVU5fV0lMRENBUkQsCi0JCQkJCSAgU0NCX0xJU1RfTlVMTCwgUk9MRV9JTklUSUFUT1IpKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCiAJaWYgKHBlbmRpbmdfc2NiID09IE5VTEwpIHsKIAkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICJDb21tYW5kIG5vdCBmb3VuZFxuIik7CiAJCWdvdG8gbm9fY21kOwpAQCAtMjE5NSwyNSArMjE4MywxNyBAQAogCWFoZF9kdW1wX2NhcmRfc3RhdGUoYWhkKTsKIAogCWRpc2Nvbm5lY3RlZCA9IFRSVUU7Ci0JaWYgKGZsYWcgPT0gU0NCX0FCT1JUKSB7Ci0JCWlmIChhaGRfc2VhcmNoX3FpbmZpZm8oYWhkLCBjbWQtPmRldmljZS0+aWQsIAotCQkJCSAgICAgICBjbWQtPmRldmljZS0+Y2hhbm5lbCArICdBJywKLQkJCQkgICAgICAgY21kLT5kZXZpY2UtPmx1biwgCi0JCQkJICAgICAgIHBlbmRpbmdfc2NiLT5oc2NiLT50YWcsCi0JCQkJICAgICAgIFJPTEVfSU5JVElBVE9SLCBDQU1fUkVRX0FCT1JURUQsCi0JCQkJICAgICAgIFNFQVJDSF9DT01QTEVURSkgPiAwKSB7Ci0JCQlwcmludGYoIiVzOiVkOiVkOiVkOiBDbWQgYWJvcnRlZCBmcm9tIFFJTkZJRk9cbiIsCi0JCQkgICAgICAgYWhkX25hbWUoYWhkKSwgY21kLT5kZXZpY2UtPmNoYW5uZWwsIAotCQkJICAgICAgIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7Ci0JCQlyZXR2YWwgPSBTVUNDRVNTOwotCQkJZ290byBkb25lOwotCQl9Ci0JfSBlbHNlIGlmIChhaGRfc2VhcmNoX3FpbmZpZm8oYWhkLCBjbWQtPmRldmljZS0+aWQsCi0JCQkJICAgICAgY21kLT5kZXZpY2UtPmNoYW5uZWwgKyAnQScsCi0JCQkJICAgICAgY21kLT5kZXZpY2UtPmx1biwgcGVuZGluZ19zY2ItPmhzY2ItPnRhZywKLQkJCQkgICAgICBST0xFX0lOSVRJQVRPUiwgLypzdGF0dXMqLzAsCi0JCQkJICAgICAgU0VBUkNIX0NPVU5UKSA+IDApIHsKLQkJZGlzY29ubmVjdGVkID0gRkFMU0U7CisJaWYgKGFoZF9zZWFyY2hfcWluZmlmbyhhaGQsIGNtZC0+ZGV2aWNlLT5pZCwgCisJCQkgICAgICAgY21kLT5kZXZpY2UtPmNoYW5uZWwgKyAnQScsCisJCQkgICAgICAgY21kLT5kZXZpY2UtPmx1biwgCisJCQkgICAgICAgcGVuZGluZ19zY2ItPmhzY2ItPnRhZywKKwkJCSAgICAgICBST0xFX0lOSVRJQVRPUiwgQ0FNX1JFUV9BQk9SVEVELAorCQkJICAgICAgIFNFQVJDSF9DT01QTEVURSkgPiAwKSB7CisJCXByaW50ZigiJXM6JWQ6JWQ6JWQ6IENtZCBhYm9ydGVkIGZyb20gUUlORklGT1xuIiwKKwkJICAgICAgIGFoZF9uYW1lKGFoZCksIGNtZC0+ZGV2aWNlLT5jaGFubmVsLCAKKwkJICAgICAgIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CisJCXJldHZhbCA9IFNVQ0NFU1M7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAlzYXZlZF9tb2RlcyA9IGFoZF9zYXZlX21vZGVzKGFoZCk7CkBAIC0yMjIxLDE3ICsyMjAxLDEyIEBACiAJbGFzdF9waGFzZSA9IGFoZF9pbmIoYWhkLCBMQVNUUEhBU0UpOwogCXNhdmVkX3NjYnB0ciA9IGFoZF9nZXRfc2NicHRyKGFoZCk7CiAJYWN0aXZlX3NjYnB0ciA9IHNhdmVkX3NjYnB0cjsKLQlpZiAoZGlzY29ubmVjdGVkICYmICgobGFzdF9waGFzZSAhPSBQX0JVU0ZSRUUpIHx8IAotCQkJICAgICAoYWhkX2luYihhaGQsIFNFUV9GTEFHUykgJiBOT1RfSURFTlRJRklFRCkgPT0gMCkpIHsKKwlpZiAoZGlzY29ubmVjdGVkICYmIChhaGRfaW5iKGFoZCwgU0VRX0ZMQUdTKSAmIE5PVF9JREVOVElGSUVEKSA9PSAwKSB7CiAJCXN0cnVjdCBzY2IgKmJ1c19zY2I7CiAKIAkJYnVzX3NjYiA9IGFoZF9sb29rdXBfc2NiKGFoZCwgYWN0aXZlX3NjYnB0cik7CiAJCWlmIChidXNfc2NiID09IHBlbmRpbmdfc2NiKQogCQkJZGlzY29ubmVjdGVkID0gRkFMU0U7Ci0JCWVsc2UgaWYgKGZsYWcgIT0gU0NCX0FCT1JUCi0JCQkgJiYgYWhkX2luYihhaGQsIFNBVkVEX1NDU0lJRCkgPT0gcGVuZGluZ19zY2ItPmhzY2ItPnNjc2lpZAotCQkJICYmIGFoZF9pbmIoYWhkLCBTQVZFRF9MVU4pID09IFNDQl9HRVRfTFVOKHBlbmRpbmdfc2NiKSkKLQkJCWRpc2Nvbm5lY3RlZCA9IEZBTFNFOwogCX0KIAogCS8qCkBAIC0yMjQwLDQxICsyMjE1LDI2IEBACiAJICogYnVzIG9yIGlzIGluIHRoZSBkaXNjb25uZWN0ZWQgc3RhdGUuCiAJICovCiAJc2F2ZWRfc2NzaWlkID0gYWhkX2luYihhaGQsIFNBVkVEX1NDU0lJRCk7Ci0JaWYgKFNDQl9HRVRfVEFHKHBlbmRpbmdfc2NiKSA9PSBhY3RpdmVfc2NicHRyCi0JICAgICB8fCAoZmxhZyA9PSBTQ0JfREVWSUNFX1JFU0VUCi0JCSAmJiBTQ1NJSURfVEFSR0VUKGFoZCwgc2F2ZWRfc2NzaWlkKSA9PSBzY21kX2lkKGNtZCkpKSB7CisJaWYgKGxhc3RfcGhhc2UgIT0gUF9CVVNGUkVFCisJICAgICYmIFNDQl9HRVRfVEFHKHBlbmRpbmdfc2NiKSA9PSBhY3RpdmVfc2NicHRyKSB7CiAKIAkJLyoKIAkJICogV2UncmUgYWN0aXZlIG9uIHRoZSBidXMsIHNvIGFzc2VydCBBVE4KIAkJICogYW5kIGhvcGUgdGhhdCB0aGUgdGFyZ2V0IHJlc3BvbmRzLgogCQkgKi8KIAkJcGVuZGluZ19zY2IgPSBhaGRfbG9va3VwX3NjYihhaGQsIGFjdGl2ZV9zY2JwdHIpOwotCQlwZW5kaW5nX3NjYi0+ZmxhZ3MgfD0gU0NCX1JFQ09WRVJZX1NDQnxTQ0JfREVWSUNFX1JFU0VUOworCQlwZW5kaW5nX3NjYi0+ZmxhZ3MgfD0gU0NCX1JFQ09WRVJZX1NDQnxTQ0JfQUJPUlQ7CiAJCWFoZF9vdXRiKGFoZCwgTVNHX09VVCwgSE9TVF9NU0cpOwogCQlhaGRfb3V0YihhaGQsIFNDU0lTSUdPLCBsYXN0X3BoYXNlfEFUTk8pOwotCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIGNtZCwgIkJEUiBtZXNzYWdlIGluIG1lc3NhZ2UgYnVmZmVyXG4iKTsKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICJEZXZpY2UgaXMgYWN0aXZlLCBhc3NlcnRpbmcgQVROXG4iKTsKIAkJd2FpdCA9IFRSVUU7Ci0JfSBlbHNlIGlmIChsYXN0X3BoYXNlICE9IFBfQlVTRlJFRQotCQkgICAmJiBhaGRfaW5iKGFoZCwgU0NTSVBIQVNFKSA9PSAwKSB7Ci0JCS8qCi0JCSAqIFNDQiBpcyBub3QgaWRlbnRpZmllZCwgdGhlcmUKLQkJICogaXMgbm8gcGVuZGluZyBSRVEsIGFuZCB0aGUgc2VxdWVuY2VyCi0JCSAqIGhhcyBub3Qgc2VlbiBhIGJ1c2ZyZWUuICBMb29rcyBsaWtlCi0JCSAqIGEgc3R1Y2sgY29ubmVjdGlvbiB3YWl0aW5nIHRvCi0JCSAqIGdvIGJ1c2ZyZWUuICBSZXNldCB0aGUgYnVzLgotCQkgKi8KLQkJZm91bmQgPSBhaGRfcmVzZXRfY2hhbm5lbChhaGQsIGNtZC0+ZGV2aWNlLT5jaGFubmVsICsgJ0EnLAotCQkJCQkgIC8qSW5pdGlhdGUgUmVzZXQqL1RSVUUpOwotCQlwcmludGYoIiVzOiBJc3N1ZWQgQ2hhbm5lbCAlYyBCdXMgUmVzZXQuICIKLQkJICAgICAgICIlZCBTQ0JzIGFib3J0ZWRcbiIsIGFoZF9uYW1lKGFoZCksCi0JCSAgICAgICBjbWQtPmRldmljZS0+Y2hhbm5lbCArICdBJywgZm91bmQpOwogCX0gZWxzZSBpZiAoZGlzY29ubmVjdGVkKSB7CiAKIAkJLyoKIAkJICogQWN0dWFsbHkgcmUtcXVldWUgdGhpcyBTQ0IgaW4gYW4gYXR0ZW1wdAogCQkgKiB0byBzZWxlY3QgdGhlIGRldmljZSBiZWZvcmUgaXQgcmVjb25uZWN0cy4KIAkJICovCi0JCXBlbmRpbmdfc2NiLT5mbGFncyB8PSBTQ0JfUkVDT1ZFUllfU0NCfGZsYWc7CisJCXBlbmRpbmdfc2NiLT5mbGFncyB8PSBTQ0JfUkVDT1ZFUllfU0NCfFNDQl9BQk9SVDsKIAkJYWhkX3NldF9zY2JwdHIoYWhkLCBTQ0JfR0VUX1RBRyhwZW5kaW5nX3NjYikpOwogCQlwZW5kaW5nX3NjYi0+aHNjYi0+Y2RiX2xlbiA9IDA7CiAJCXBlbmRpbmdfc2NiLT5oc2NiLT50YXNrX2F0dHJpYnV0ZSA9IDA7CkBAIC0yMzQ0LDMwICsyMzA0LDI5IEBACiAJaWYgKHBhdXNlZCkKIAkJYWhkX3VucGF1c2UoYWhkKTsKIAlpZiAod2FpdCkgewotCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQkJaW50IHJldDsKKwkJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOwogCi0JCWFoZC0+cGxhdGZvcm1fZGF0YS0+ZmxhZ3MgfD0gQUhEX1NDQl9VUF9FSF9TRU07CisJCWFoZC0+cGxhdGZvcm1fZGF0YS0+ZWhfZG9uZSA9ICZkb25lOwogCQlhaGRfdW5sb2NrKGFoZCwgJmZsYWdzKTsKIAotCQlpbml0X3RpbWVyKCZ0aW1lcik7Ci0JCXRpbWVyLmRhdGEgPSAodV9sb25nKWFoZDsKLQkJdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoNSAqIEhaKTsKLQkJdGltZXIuZnVuY3Rpb24gPSBhaGRfbGludXhfc2VtX3RpbWVvdXQ7Ci0JCWFkZF90aW1lcigmdGltZXIpOwogCQlwcmludGYoIiVzOiBSZWNvdmVyeSBjb2RlIHNsZWVwaW5nXG4iLCBhaGRfbmFtZShhaGQpKTsKLQkJZG93bigmYWhkLT5wbGF0Zm9ybV9kYXRhLT5laF9zZW0pOwotCQlwcmludGYoIiVzOiBSZWNvdmVyeSBjb2RlIGF3YWtlXG4iLCBhaGRfbmFtZShhaGQpKTsKLSAgICAgICAgCXJldCA9IGRlbF90aW1lcl9zeW5jKCZ0aW1lcik7Ci0JCWlmIChyZXQgPT0gMCkgeworCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZG9uZSwgNSAqIEhaKSkgeworCQkJYWhkX2xvY2soYWhkLCAmZmxhZ3MpOworCQkJYWhkLT5wbGF0Zm9ybV9kYXRhLT5laF9kb25lID0gTlVMTDsKKwkJCWFoZF91bmxvY2soYWhkLCAmZmxhZ3MpOwogCQkJcHJpbnRmKCIlczogVGltZXIgRXhwaXJlZCAoYWN0aXZlICVkKVxuIiwKIAkJCSAgICAgICBhaGRfbmFtZShhaGQpLCBkZXYtPmFjdGl2ZSk7CiAJCQlyZXR2YWwgPSBGQUlMRUQ7CiAJCX0KKwkJcHJpbnRmKCJSZWNvdmVyeSBjb2RlIGF3YWtlXG4iKTsKIAl9IGVsc2UKIAkJYWhkX3VubG9jayhhaGQsICZmbGFncyk7CiAKLQlyZXR1cm4gKHJldHZhbCk7CisJaWYgKHJldHZhbCAhPSBTVUNDRVNTKQorCQlwcmludGYoIiVzOiBDb21tYW5kIGFib3J0IHJldHVybmluZyAweCV4XG4iLAorCQkgICAgICAgYWhkX25hbWUoYWhkKSwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIGFoZF9saW51eF9zZXRfd2lkdGgoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0LCBpbnQgd2lkdGgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uaAppbmRleCA5Y2IxMDEzLi4yYjgzMzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmgKQEAgLTM4MSwxNSArMzgxLDEyIEBACiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0W0FIRF9OVU1fVEFSR0VUU107IAogCiAJc3BpbmxvY2tfdAkJIHNwaW5fbG9jazsKLQl1X2ludAkJCSBxZnJvemVuOwotCXN0cnVjdCBzZW1hcGhvcmUJIGVoX3NlbTsKKwlzdHJ1Y3QgY29tcGxldGlvbgkqZWhfZG9uZTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAgICAgICAqaG9zdDsJCS8qIHBvaW50ZXIgdG8gc2NzaSBob3N0ICovCiAjZGVmaW5lIEFIRF9MSU5VWF9OT0lSUQkoKHVpbnQzMl90KX4wKQogCXVpbnQzMl90CQkgaXJxOwkJLyogSVJRIGZvciB0aGlzIGFkYXB0ZXIgKi8KIAl1aW50MzJfdAkJIGJpb3NfYWRkcmVzczsKIAl1aW50MzJfdAkJIG1lbV9idXNhZGRyOwkvKiBNZW0gQmFzZSBBZGRyICovCi0jZGVmaW5lCUFIRF9TQ0JfVVBfRUhfU0VNIDB4MQotCXVpbnQzMl90CQkgZmxhZ3M7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogT1MgVXRpbGl0eSBXcmFwcGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODc1LDggKzg3Miw2IEBACiAJCQkJcm9sZV90IHJvbGUsIHVpbnQzMl90IHN0YXR1cyk7CiBpcnFyZXR1cm5fdAogCWFoZF9saW51eF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwotdm9pZAlhaGRfcGxhdGZvcm1fZmx1c2h3b3JrKHN0cnVjdCBhaGRfc29mdGMgKmFoZCk7Ci1pbnQJYWhkX3NvZnRjX2NvbXAoc3RydWN0IGFoZF9zb2Z0YyAqLCBzdHJ1Y3QgYWhkX3NvZnRjICopOwogdm9pZAlhaGRfZG9uZShzdHJ1Y3QgYWhkX3NvZnRjKiwgc3RydWN0IHNjYiopOwogdm9pZAlhaGRfc2VuZF9hc3luYyhzdHJ1Y3QgYWhkX3NvZnRjICosIGNoYXIgY2hhbm5lbCwKIAkJICAgICAgIHVfaW50IHRhcmdldCwgdV9pbnQgbHVuLCBhY19jb2RlLCB2b2lkICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9jb3JlLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwppbmRleCA1OGFjNDYxLi5kMzc1NjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X2NvcmUuYwpAQCAtMjQ2MSwxMSArMjQ2MSw4IEBACiB7CiAJaWYgKG9mZnNldCA9PSAwKQogCQlwZXJpb2QgPSBBSENfQVNZTkNfWEZFUl9QRVJJT0Q7Ci0JYWhjLT5tc2dvdXRfYnVmW2FoYy0+bXNnb3V0X2luZGV4KytdID0gTVNHX0VYVEVOREVEOwotCWFoYy0+bXNnb3V0X2J1ZlthaGMtPm1zZ291dF9pbmRleCsrXSA9IE1TR19FWFRfU0RUUl9MRU47Ci0JYWhjLT5tc2dvdXRfYnVmW2FoYy0+bXNnb3V0X2luZGV4KytdID0gTVNHX0VYVF9TRFRSOwotCWFoYy0+bXNnb3V0X2J1ZlthaGMtPm1zZ291dF9pbmRleCsrXSA9IHBlcmlvZDsKLQlhaGMtPm1zZ291dF9idWZbYWhjLT5tc2dvdXRfaW5kZXgrK10gPSBvZmZzZXQ7CisJYWhjLT5tc2dvdXRfaW5kZXggKz0gc3BpX3BvcHVsYXRlX3N5bmNfbXNnKAorCQkJYWhjLT5tc2dvdXRfYnVmICsgYWhjLT5tc2dvdXRfaW5kZXgsIHBlcmlvZCwgb2Zmc2V0KTsKIAlhaGMtPm1zZ291dF9sZW4gKz0gNTsKIAlpZiAoYm9vdHZlcmJvc2UpIHsKIAkJcHJpbnRmKCIoJXM6JWM6JWQ6JWQpOiBTZW5kaW5nIFNEVFIgcGVyaW9kICV4LCBvZmZzZXQgJXhcbiIsCkBAIC0yNDgyLDEwICsyNDc5LDggQEAKIGFoY19jb25zdHJ1Y3Rfd2R0cihzdHJ1Y3QgYWhjX3NvZnRjICphaGMsIHN0cnVjdCBhaGNfZGV2aW5mbyAqZGV2aW5mbywKIAkJICAgdV9pbnQgYnVzX3dpZHRoKQogewotCWFoYy0+bXNnb3V0X2J1ZlthaGMtPm1zZ291dF9pbmRleCsrXSA9IE1TR19FWFRFTkRFRDsKLQlhaGMtPm1zZ291dF9idWZbYWhjLT5tc2dvdXRfaW5kZXgrK10gPSBNU0dfRVhUX1dEVFJfTEVOOwotCWFoYy0+bXNnb3V0X2J1ZlthaGMtPm1zZ291dF9pbmRleCsrXSA9IE1TR19FWFRfV0RUUjsKLQlhaGMtPm1zZ291dF9idWZbYWhjLT5tc2dvdXRfaW5kZXgrK10gPSBidXNfd2lkdGg7CisJYWhjLT5tc2dvdXRfaW5kZXggKz0gc3BpX3BvcHVsYXRlX3dpZHRoX21zZygKKwkJCWFoYy0+bXNnb3V0X2J1ZiArIGFoYy0+bXNnb3V0X2luZGV4LCBidXNfd2lkdGgpOwogCWFoYy0+bXNnb3V0X2xlbiArPSA0OwogCWlmIChib290dmVyYm9zZSkgewogCQlwcmludGYoIiglczolYzolZDolZCk6IFNlbmRpbmcgV0RUUiAleFxuIiwKQEAgLTI1MDUsMTQgKzI1MDAsOSBAQAogewogCWlmIChvZmZzZXQgPT0gMCkKIAkJcGVyaW9kID0gQUhDX0FTWU5DX1hGRVJfUEVSSU9EOwotCWFoYy0+bXNnb3V0X2J1ZlthaGMtPm1zZ291dF9pbmRleCsrXSA9IE1TR19FWFRFTkRFRDsKLQlhaGMtPm1zZ291dF9idWZbYWhjLT5tc2dvdXRfaW5kZXgrK10gPSBNU0dfRVhUX1BQUl9MRU47Ci0JYWhjLT5tc2dvdXRfYnVmW2FoYy0+bXNnb3V0X2luZGV4KytdID0gTVNHX0VYVF9QUFI7Ci0JYWhjLT5tc2dvdXRfYnVmW2FoYy0+bXNnb3V0X2luZGV4KytdID0gcGVyaW9kOwotCWFoYy0+bXNnb3V0X2J1ZlthaGMtPm1zZ291dF9pbmRleCsrXSA9IDA7Ci0JYWhjLT5tc2dvdXRfYnVmW2FoYy0+bXNnb3V0X2luZGV4KytdID0gb2Zmc2V0OwotCWFoYy0+bXNnb3V0X2J1ZlthaGMtPm1zZ291dF9pbmRleCsrXSA9IGJ1c193aWR0aDsKLQlhaGMtPm1zZ291dF9idWZbYWhjLT5tc2dvdXRfaW5kZXgrK10gPSBwcHJfb3B0aW9uczsKKwlhaGMtPm1zZ291dF9pbmRleCArPSBzcGlfcG9wdWxhdGVfcHByX21zZygKKwkJCWFoYy0+bXNnb3V0X2J1ZiArIGFoYy0+bXNnb3V0X2luZGV4LCBwZXJpb2QsIG9mZnNldCwKKwkJCWJ1c193aWR0aCwgcHByX29wdGlvbnMpOwogCWFoYy0+bXNnb3V0X2xlbiArPSA4OwogCWlmIChib290dmVyYm9zZSkgewogCQlwcmludGYoIiglczolYzolZDolZCk6IFNlbmRpbmcgUFBSIGJ1c193aWR0aCAleCwgcGVyaW9kICV4LCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwppbmRleCAwNTE5NzBlLi4yYzgwMTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTM3Myw3ICszNzMsNiBAQAogCQkJCQkgc3RydWN0IHNjYiAqKTsKIHN0YXRpYyB2b2lkIGFoY19saW51eF9xdWV1ZV9jbWRfY29tcGxldGUoc3RydWN0IGFoY19zb2Z0YyAqYWhjLAogCQkJCQkgc3RydWN0IHNjc2lfY21uZCAqY21kKTsKLXN0YXRpYyB2b2lkIGFoY19saW51eF9zZW1fdGltZW91dCh1X2xvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIGFoY19saW51eF9mcmVlemVfc2ltcShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwogc3RhdGljIHZvaWQgYWhjX2xpbnV4X3JlbGVhc2Vfc2ltcShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpOwogc3RhdGljIGludCAgYWhjX2xpbnV4X3F1ZXVlX3JlY292ZXJ5X2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHNjYl9mbGFnIGZsYWcpOwpAQCAtMTE5Myw3ICsxMTkyLDYgQEAKIAltZW1zZXQoYWhjLT5wbGF0Zm9ybV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IGFoY19wbGF0Zm9ybV9kYXRhKSk7CiAJYWhjLT5wbGF0Zm9ybV9kYXRhLT5pcnEgPSBBSENfTElOVVhfTk9JUlE7CiAJYWhjX2xvY2tpbml0KGFoYyk7Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJmFoYy0+cGxhdGZvcm1fZGF0YS0+ZWhfc2VtKTsKIAlhaGMtPnNlbHRpbWUgPSAoYWljN3h4eF9zZWx0aW1lICYgMHgzKSA8PCA0OwogCWFoYy0+c2VsdGltZV9iID0gKGFpYzd4eHhfc2VsdGltZSAmIDB4MykgPDwgNDsKIAlpZiAoYWljN3h4eF9wY2lfcGFyaXR5ID09IDApCkBAIC0xODMwLDEwICsxODI4LDkgQEAKIAkJaWYgKGFoY19nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYikgPT0gQ0FNX0JEUl9TRU5UCiAJCSB8fCBhaGNfZ2V0X3RyYW5zYWN0aW9uX3N0YXR1cyhzY2IpID09IENBTV9SRVFfQUJPUlRFRCkKIAkJCWFoY19zZXRfdHJhbnNhY3Rpb25fc3RhdHVzKHNjYiwgQ0FNX0NNRF9USU1FT1VUKTsKLQkJaWYgKChhaGMtPnBsYXRmb3JtX2RhdGEtPmZsYWdzICYgQUhDX1VQX0VIX1NFTUFQSE9SRSkgIT0gMCkgewotCQkJYWhjLT5wbGF0Zm9ybV9kYXRhLT5mbGFncyAmPSB+QUhDX1VQX0VIX1NFTUFQSE9SRTsKLQkJCXVwKCZhaGMtPnBsYXRmb3JtX2RhdGEtPmVoX3NlbSk7Ci0JCX0KKworCQlpZiAoYWhjLT5wbGF0Zm9ybV9kYXRhLT5laF9kb25lKQorCQkJY29tcGxldGUoYWhjLT5wbGF0Zm9ybV9kYXRhLT5laF9kb25lKTsKIAl9CiAKIAlhaGNfZnJlZV9zY2IoYWhjLCBzY2IpOwpAQCAtMjA0MCwyMiArMjAzNyw2IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1haGNfbGludXhfc2VtX3RpbWVvdXQodV9sb25nIGFyZykKLXsKLQlzdHJ1Y3QJYWhjX3NvZnRjICphaGM7Ci0JdV9sb25nCXM7Ci0KLQlhaGMgPSAoc3RydWN0IGFoY19zb2Z0YyAqKWFyZzsKLQotCWFoY19sb2NrKGFoYywgJnMpOwotCWlmICgoYWhjLT5wbGF0Zm9ybV9kYXRhLT5mbGFncyAmIEFIQ19VUF9FSF9TRU1BUEhPUkUpICE9IDApIHsKLQkJYWhjLT5wbGF0Zm9ybV9kYXRhLT5mbGFncyAmPSB+QUhDX1VQX0VIX1NFTUFQSE9SRTsKLQkJdXAoJmFoYy0+cGxhdGZvcm1fZGF0YS0+ZWhfc2VtKTsKLQl9Ci0JYWhjX3VubG9jayhhaGMsICZzKTsKLX0KLQotc3RhdGljIHZvaWQKIGFoY19saW51eF9mcmVlemVfc2ltcShzdHJ1Y3QgYWhjX3NvZnRjICphaGMpCiB7CiAJdW5zaWduZWQgbG9uZyBzOwpAQCAtMjM1NSwyNSArMjMzNiwyMSBAQAogCWlmIChwYXVzZWQpCiAJCWFoY191bnBhdXNlKGFoYyk7CiAJaWYgKHdhaXQpIHsKLQkJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0JCWludCByZXQ7CisJCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKIAotCQlhaGMtPnBsYXRmb3JtX2RhdGEtPmZsYWdzIHw9IEFIQ19VUF9FSF9TRU1BUEhPUkU7CisJCWFoYy0+cGxhdGZvcm1fZGF0YS0+ZWhfZG9uZSA9ICZkb25lOwogCQlhaGNfdW5sb2NrKGFoYywgJmZsYWdzKTsKIAotCQlpbml0X3RpbWVyKCZ0aW1lcik7Ci0JCXRpbWVyLmRhdGEgPSAodV9sb25nKWFoYzsKLQkJdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoNSAqIEhaKTsKLQkJdGltZXIuZnVuY3Rpb24gPSBhaGNfbGludXhfc2VtX3RpbWVvdXQ7Ci0JCWFkZF90aW1lcigmdGltZXIpOwogCQlwcmludGYoIlJlY292ZXJ5IGNvZGUgc2xlZXBpbmdcbiIpOwotCQlkb3duKCZhaGMtPnBsYXRmb3JtX2RhdGEtPmVoX3NlbSk7Ci0JCXByaW50ZigiUmVjb3ZlcnkgY29kZSBhd2FrZVxuIik7Ci0gICAgICAgIAlyZXQgPSBkZWxfdGltZXJfc3luYygmdGltZXIpOwotCQlpZiAocmV0ID09IDApIHsKKwkJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRvbmUsIDUgKiBIWikpIHsKKwkJCWFoY19sb2NrKGFoYywgJmZsYWdzKTsKKwkJCWFoYy0+cGxhdGZvcm1fZGF0YS0+ZWhfZG9uZSA9IE5VTEw7CisJCQlhaGNfdW5sb2NrKGFoYywgJmZsYWdzKTsKKwogCQkJcHJpbnRmKCJUaW1lciBFeHBpcmVkXG4iKTsKIAkJCXJldHZhbCA9IEZBSUxFRDsKIAkJfQorCQlwcmludGYoIlJlY292ZXJ5IGNvZGUgYXdha2VcbiIpOwogCX0gZWxzZQogCQlhaGNfdW5sb2NrKGFoYywgJmZsYWdzKTsKIAlyZXR1cm4gKHJldHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uaAppbmRleCBlMGVkYWNhLi5hMjBiMDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5oCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmgKQEAgLTM2OSwxNSArMzY5LDEyIEBACiAKIAlzcGlubG9ja190CQkgc3Bpbl9sb2NrOwogCXVfaW50CQkJIHFmcm96ZW47Ci0Jc3RydWN0IHNlbWFwaG9yZQkgZWhfc2VtOworCXN0cnVjdCBjb21wbGV0aW9uCSplaF9kb25lOwogCXN0cnVjdCBTY3NpX0hvc3QgICAgICAgICpob3N0OwkJLyogcG9pbnRlciB0byBzY3NpIGhvc3QgKi8KICNkZWZpbmUgQUhDX0xJTlVYX05PSVJRCSgodWludDMyX3QpfjApCiAJdWludDMyX3QJCSBpcnE7CQkvKiBJUlEgZm9yIHRoaXMgYWRhcHRlciAqLwogCXVpbnQzMl90CQkgYmlvc19hZGRyZXNzOwogCXVpbnQzMl90CQkgbWVtX2J1c2FkZHI7CS8qIE1lbSBCYXNlIEFkZHIgKi8KLQotI2RlZmluZQlBSENfVVBfRUhfU0VNQVBIT1JFCSAweDEKLQl1aW50MzJfdAkJIGZsYWdzOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIE9TIFV0aWxpdHkgV3JhcHBlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYwppbmRleCA1ODNkMmQ4Li5mYWQyMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9jdW1hbmFfMi5jCkBAIC01NTAsNiArNTUwLDYgQEAKIAogTU9EVUxFX0FVVEhPUigiUnVzc2VsbCBLaW5nIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkN1bWFuYSBTQ1NJLTIgZHJpdmVyIGZvciBBY29ybiBtYWNoaW5lcyIpOwotTU9EVUxFX1BBUk0odGVybSwgIjEtOGkiKTsKK21vZHVsZV9wYXJhbV9hcnJheSh0ZXJtLCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0ZXJtLCAiU0NTSSBidXMgdGVybWluYXRpb24iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYyBiL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYwppbmRleCAzZmZlYzdlLi5kY2JiNGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCkBAIC02NzQsNiArNjc0LDYgQEAKIAogTU9EVUxFX0FVVEhPUigiUnVzc2VsbCBLaW5nIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkVFU09YICdGYXN0JyBTQ1NJIGRyaXZlciBmb3IgQWNvcm4gbWFjaGluZXMiKTsKLU1PRFVMRV9QQVJNKHRlcm0sICIxLThpIik7Cittb2R1bGVfcGFyYW1fYXJyYXkodGVybSwgaW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModGVybSwgIlNDU0kgYnVzIHRlcm1pbmF0aW9uIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMgYi9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKaW5kZXggMzExM2JkYy4uM2Q2OWY2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYwpAQCAtNDY2LDYgKzQ2Niw2IEBACiAKIE1PRFVMRV9BVVRIT1IoIlJ1c3NlbGwgS2luZyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlcnRlYyBTQ1NJIGRyaXZlciIpOwotTU9EVUxFX1BBUk0odGVybSwgIjEtOGkiKTsKK21vZHVsZV9wYXJhbV9hcnJheSh0ZXJtLCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0ZXJtLCAiU0NTSSBidXMgdGVybWluYXRpb24iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKaW5kZXggZmMzY2EwNS4uMmQ1YmU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKQEAgLTEwMSwzNiArMTAxLDU0IEBACiAJSUNINV9QQ1MJCT0gMHg5MiwJLyogcG9ydCBjb250cm9sIGFuZCBzdGF0dXMgKi8KIAlQSUlYX1NDQwkJPSAweDBBLCAvKiBzdWItY2xhc3MgY29kZSByZWdpc3RlciAqLwogCi0JUElJWF9GTEFHX0FIQ0kJCT0gKDEgPDwgMjgpLCAvKiBBSENJIHBvc3NpYmxlICovCi0JUElJWF9GTEFHX0NIRUNLSU5UUgk9ICgxIDw8IDI5KSwgLyogbWFrZSBzdXJlIFBDSSBJTlR4IGVuYWJsZWQgKi8KLQlQSUlYX0ZMQUdfQ09NQklORUQJPSAoMSA8PCAzMCksIC8qIGNvbWJpbmVkIG1vZGUgcG9zc2libGUgKi8KKwlQSUlYX0ZMQUdfSUdOT1JFX1BDUwk9ICgxIDw8IDI1KSwgLyogaWdub3JlIFBDUyBwcmVzZW50IGJpdHMgKi8KKwlQSUlYX0ZMQUdfU0NSCQk9ICgxIDw8IDI2KSwgLyogU0NSIGF2YWlsYWJsZSAqLworCVBJSVhfRkxBR19BSENJCQk9ICgxIDw8IDI3KSwgLyogQUhDSSBwb3NzaWJsZSAqLworCVBJSVhfRkxBR19DSEVDS0lOVFIJPSAoMSA8PCAyOCksIC8qIG1ha2Ugc3VyZSBQQ0kgSU5UeCBlbmFibGVkICovCisJUElJWF9GTEFHX0NPTUJJTkVECT0gKDEgPDwgMjkpLCAvKiBjb21iaW5lZCBtb2RlIHBvc3NpYmxlICovCisJLyogSUNINi83IHVzZSBkaWZmZXJlbnQgc2NoZW1lIGZvciBtYXAgdmFsdWUgKi8KKwlQSUlYX0ZMQUdfQ09NQklORURfSUNINgk9IFBJSVhfRkxBR19DT01CSU5FRCB8ICgxIDw8IDMwKSwKIAogCS8qIGNvbWJpbmVkIG1vZGUuICBpZiBzZXQsIFBBVEEgaXMgY2hhbm5lbCAwLgogCSAqIGlmIGNsZWFyLCBQQVRBIGlzIGNoYW5uZWwgMS4KIAkgKi8KLQlQSUlYX0NPTUJfUEFUQV9QMAk9ICgxIDw8IDEpLAotCVBJSVhfQ09NQgkJPSAoMSA8PCAyKSwgLyogY29tYmluZWQgbW9kZSBlbmFibGVkPyAqLwotCiAJUElJWF9QT1JUX0VOQUJMRUQJPSAoMSA8PCAwKSwKIAlQSUlYX1BPUlRfUFJFU0VOVAk9ICgxIDw8IDQpLAogCiAJUElJWF84MENfUFJJCQk9ICgxIDw8IDUpIHwgKDEgPDwgNCksCiAJUElJWF84MENfU0VDCQk9ICgxIDw8IDcpIHwgKDEgPDwgNiksCiAKLQlpY2g1X3BhdGEJCT0gMCwKLQlpY2g1X3NhdGEJCT0gMSwKLQlwaWl4NF9wYXRhCQk9IDIsCi0JaWNoNl9zYXRhCQk9IDMsCi0JaWNoNl9zYXRhX2FoY2kJCT0gNCwKKwkvKiBjb250cm9sbGVyIElEcyAqLworCXBpaXg0X3BhdGEJCT0gMCwKKwlpY2g1X3BhdGEJCT0gMSwKKwlpY2g1X3NhdGEJCT0gMiwKKwllc2Jfc2F0YQkJPSAzLAorCWljaDZfc2F0YQkJPSA0LAorCWljaDZfc2F0YV9haGNpCQk9IDUsCisJaWNoNm1fc2F0YV9haGNpCQk9IDYsCisKKwkvKiBjb25zdGFudHMgZm9yIG1hcHBpbmcgdGFibGUgKi8KKwlQMAkJCT0gMCwgIC8qIHBvcnQgMCAqLworCVAxCQkJPSAxLCAgLyogcG9ydCAxICovCisJUDIJCQk9IDIsICAvKiBwb3J0IDIgKi8KKwlQMwkJCT0gMywgIC8qIHBvcnQgMyAqLworCUlERQkJCT0gLTEsIC8qIElERSAqLworCU5BCQkJPSAtMiwgLyogbm90IGF2YWxpYWJsZSAqLworCVJWCQkJPSAtMywgLyogcmVzZXJ2ZWQgKi8KIAogCVBJSVhfQUhDSV9ERVZJQ0UJPSA2LAogfTsKIAorc3RydWN0IHBpaXhfbWFwX2RiIHsKKwljb25zdCB1MzIgbWFzazsKKwljb25zdCBpbnQgbWFwW11bNF07Cit9OworCiBzdGF0aWMgaW50IHBpaXhfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIAotc3RhdGljIHZvaWQgcGlpeF9wYXRhX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB2b2lkIHBpaXhfc2F0YV9waHlfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CitzdGF0aWMgaW50IHBpaXhfcGF0YV9wcm9iZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOworc3RhdGljIGludCBwaWl4X3NhdGFfcHJvYmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKIHN0YXRpYyB2b2lkIHBpaXhfc2V0X3Bpb21vZGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKIHN0YXRpYyB2b2lkIHBpaXhfc2V0X2RtYW1vZGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsKIApAQCAtMTQ3LDE5ICsxNjUsMzIgQEAKIAkgKiBsaXN0IGluIGRyaXZlcnMvcGNpL3F1aXJrcy5jLgogCSAqLwogCisJLyogODI4MDFFQiAoSUNINSkgKi8KIAl7IDB4ODA4NiwgMHgyNGQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g1X3NhdGEgfSwKKwkvKiA4MjgwMUVCIChJQ0g1KSAqLwogCXsgMHg4MDg2LCAweDI0ZGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDVfc2F0YSB9LAotCXsgMHg4MDg2LCAweDI1YTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDVfc2F0YSB9LAotCXsgMHg4MDg2LCAweDI1YjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDVfc2F0YSB9LAorCS8qIDYzMDBFU0IgKElDSDUgdmFyaWFudCB3aXRoIGJyb2tlbiBQQ1MgcHJlc2VudCBiaXRzKSAqLworCXsgMHg4MDg2LCAweDI1YTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGVzYl9zYXRhIH0sCisJLyogNjMwMEVTQiBwcmV0ZW5kaW5nIFJBSUQgKi8KKwl7IDB4ODA4NiwgMHgyNWIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBlc2Jfc2F0YSB9LAorCS8qIDgyODAxRkIvRlcgKElDSDYvSUNINlcpICovCiAJeyAweDgwODYsIDB4MjY1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNl9zYXRhIH0sCisJLyogODI4MDFGUi9GUlcgKElDSDZSL0lDSDZSVykgKi8KIAl7IDB4ODA4NiwgMHgyNjUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAotCXsgMHg4MDg2LCAweDI2NTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDZfc2F0YV9haGNpIH0sCisJLyogODI4MDFGQk0gSUNINk0gKElDSDZSIHdpdGggb25seSBwb3J0IDAgYW5kIDIgaW1wbGVtZW50ZWQpICovCisJeyAweDgwODYsIDB4MjY1MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNm1fc2F0YV9haGNpIH0sCisJLyogODI4MDFHQi9HUi9HSCAoSUNINywgaWRlbnRpY2FsIHRvIElDSDYpICovCiAJeyAweDgwODYsIDB4MjdjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNl9zYXRhX2FoY2kgfSwKLQl7IDB4ODA4NiwgMHgyN2M0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAorCS8qIDI4MDFHQk0vR0hNIChJQ0g3TSwgaWRlbnRpY2FsIHRvIElDSDZNKSAqLworCXsgMHg4MDg2LCAweDI3YzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDZtX3NhdGFfYWhjaSB9LAorCS8qIEVudGVycHJpc2UgU291dGhicmlkZ2UgMiAod2hlcmUncyB0aGUgZGF0YXNoZWV0PykgKi8KIAl7IDB4ODA4NiwgMHgyNjgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciAxIElERSAoSUNIOCwgbm8gZGF0YXNoZWV0IHlldCkgKi8KIAl7IDB4ODA4NiwgMHgyODIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciAyIElERSAoSUNIOCwgZGl0dG8pICovCiAJeyAweDgwODYsIDB4MjgyNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNl9zYXRhX2FoY2kgfSwKLQl7IDB4ODA4NiwgMHgyODI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAorCS8qIE1vYmlsZSBTQVRBIENvbnRyb2xsZXIgSURFIChJQ0g4TSwgZGl0dG8pICovCisJeyAweDgwODYsIDB4MjgyOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNm1fc2F0YV9haGNpIH0sCiAKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CkBAIC0xODIsNyArMjEzLDYgQEAKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLm1heF9zZWN0b3JzCQk9IEFUQV9NQVhfU0VDVE9SUywKIAkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKIAkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKQEAgLTIwNSw3ICsyMzUsNyBAQAogCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKIAkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCiAKLQkucGh5X3Jlc2V0CQk9IHBpaXhfcGF0YV9waHlfcmVzZXQsCisJLnByb2JlX3Jlc2V0CQk9IHBpaXhfcGF0YV9wcm9iZV9yZXNldCwKIAogCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCiAJLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKQEAgLTIzMyw3ICsyNjMsNyBAQAogCS5leGVjX2NvbW1hbmQJCT0gYXRhX2V4ZWNfY29tbWFuZCwKIAkuZGV2X3NlbGVjdAkJPSBhdGFfc3RkX2Rldl9zZWxlY3QsCiAKLQkucGh5X3Jlc2V0CQk9IHBpaXhfc2F0YV9waHlfcmVzZXQsCisJLnByb2JlX3Jlc2V0CQk9IHBpaXhfc2F0YV9wcm9iZV9yZXNldCwKIAogCS5ibWRtYV9zZXR1cAkJPSBhdGFfYm1kbWFfc2V0dXAsCiAJLmJtZG1hX3N0YXJ0CQk9IGF0YV9ibWRtYV9zdGFydCwKQEAgLTI1MiwxMiArMjgyLDYyIEBACiAJLmhvc3Rfc3RvcAkJPSBhdGFfaG9zdF9zdG9wLAogfTsKIAorc3RhdGljIHN0cnVjdCBwaWl4X21hcF9kYiBpY2g1X21hcF9kYiA9IHsKKwkubWFzayA9IDB4NywKKwkubWFwID0geworCQkvKiBQTSAgIFBTICAgU00gICBTUyAgICAgICBNQVAgICovCisJCXsgIFAwLCAgTkEsICBQMSwgIE5BIH0sIC8qIDAwMGIgKi8KKwkJeyAgUDEsICBOQSwgIFAwLCAgTkEgfSwgLyogMDAxYiAqLworCQl7ICBSViwgIFJWLCAgUlYsICBSViB9LAorCQl7ICBSViwgIFJWLCAgUlYsICBSViB9LAorCQl7ICBQMCwgIFAxLCBJREUsIElERSB9LCAvKiAxMDBiICovCisJCXsgIFAxLCAgUDAsIElERSwgSURFIH0sIC8qIDEwMWIgKi8KKwkJeyBJREUsIElERSwgIFAwLCAgUDEgfSwgLyogMTEwYiAqLworCQl7IElERSwgSURFLCAgUDEsICBQMCB9LCAvKiAxMTFiICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlpeF9tYXBfZGIgaWNoNl9tYXBfZGIgPSB7CisJLm1hc2sgPSAweDMsCisJLm1hcCA9IHsKKwkJLyogUE0gICBQUyAgIFNNICAgU1MgICAgICAgTUFQICovCisJCXsgIFAwLCAgUDEsICBQMiwgIFAzIH0sIC8qIDAwYiAqLworCQl7IElERSwgSURFLCAgUDEsICBQMyB9LCAvKiAwMWIgKi8KKwkJeyAgUDAsICBQMiwgSURFLCBJREUgfSwgLyogMTBiICovCisJCXsgIFJWLCAgUlYsICBSViwgIFJWIH0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlpeF9tYXBfZGIgaWNoNm1fbWFwX2RiID0geworCS5tYXNrID0gMHgzLAorCS5tYXAgPSB7CisJCS8qIFBNICAgUFMgICBTTSAgIFNTICAgICAgIE1BUCAqLworCQl7ICBQMCwgIFAxLCAgUDIsICBQMyB9LCAvKiAwMGIgKi8KKwkJeyAgUlYsICBSViwgIFJWLCAgUlYgfSwKKwkJeyAgUDAsICBQMiwgSURFLCBJREUgfSwgLyogMTBiICovCisJCXsgIFJWLCAgUlYsICBSViwgIFJWIH0sCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaWl4X3BvcnRfaW5mb1tdID0geworCS8qIHBpaXg0X3BhdGEgKi8KKwl7CisJCS5zaHQJCT0gJnBpaXhfc2h0LAorCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCisJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworI2lmIDAKKwkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiAqLworI2Vsc2UKKwkJLm13ZG1hX21hc2sJPSAweDAwLCAvKiBtd2RtYSBicm9rZW4gKi8KKyNlbmRpZgorCQkudWRtYV9tYXNrCT0gQVRBX1VETUFfTUFTS180MEMsCisJCS5wb3J0X29wcwk9ICZwaWl4X3BhdGFfb3BzLAorCX0sCisKIAkvKiBpY2g1X3BhdGEgKi8KIAl7CiAJCS5zaHQJCT0gJnBpaXhfc2h0LAotCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNUIHwKLQkJCQkgIFBJSVhfRkxBR19DSEVDS0lOVFIsCisJCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IFBJSVhfRkxBR19DSEVDS0lOVFIsCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogI2lmIDAKIAkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiAqLwpAQCAtMjcxLDUwICszNTEsNjMgQEAKIAkvKiBpY2g1X3NhdGEgKi8KIAl7CiAJCS5zaHQJCT0gJnBpaXhfc2h0LAotCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19TUlNUIHwKLQkJCQkgIFBJSVhfRkxBR19DT01CSU5FRCB8IFBJSVhfRkxBR19DSEVDS0lOVFIsCisJCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8IFBJSVhfRkxBR19DT01CSU5FRCB8CisJCQkJICBQSUlYX0ZMQUdfQ0hFQ0tJTlRSLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gMHg3ZiwJLyogdWRtYTAtNiAqLwogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKKwkJLnByaXZhdGVfZGF0YQk9ICZpY2g1X21hcF9kYiwKIAl9LAogCi0JLyogcGlpeDRfcGF0YSAqLworCS8qIGk2MzAwZXNiX3NhdGEgKi8KIAl7CiAJCS5zaHQJCT0gJnBpaXhfc2h0LAotCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19TUlNULAorCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NBVEEgfCBQSUlYX0ZMQUdfQ09NQklORUQgfAorCQkJCSAgUElJWF9GTEFHX0NIRUNLSU5UUiB8IFBJSVhfRkxBR19JR05PUkVfUENTLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLSNpZiAwCi0JCS5td2RtYV9tYXNrCT0gMHgwNiwgLyogbXdkbWExLTIgKi8KLSNlbHNlCi0JCS5td2RtYV9tYXNrCT0gMHgwMCwgLyogbXdkbWEgYnJva2VuICovCi0jZW5kaWYKLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BX01BU0tfNDBDLAotCQkucG9ydF9vcHMJPSAmcGlpeF9wYXRhX29wcywKKwkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkudWRtYV9tYXNrCT0gMHg3ZiwJLyogdWRtYTAtNiAqLworCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKKwkJLnByaXZhdGVfZGF0YQk9ICZpY2g1X21hcF9kYiwKIAl9LAogCiAJLyogaWNoNl9zYXRhICovCiAJewogCQkuc2h0CQk9ICZwaWl4X3NodCwKLQkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfU1JTVCB8Ci0JCQkJICBQSUlYX0ZMQUdfQ09NQklORUQgfCBQSUlYX0ZMQUdfQ0hFQ0tJTlRSIHwKLQkJCQkgIEFUQV9GTEFHX1NMQVZFX1BPU1MsCisJCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8IFBJSVhfRkxBR19DT01CSU5FRF9JQ0g2IHwKKwkJCQkgIFBJSVhfRkxBR19DSEVDS0lOVFIgfCBQSUlYX0ZMQUdfU0NSLAogCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gMHg3ZiwJLyogdWRtYTAtNiAqLwogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKKwkJLnByaXZhdGVfZGF0YQk9ICZpY2g2X21hcF9kYiwKIAl9LAogCiAJLyogaWNoNl9zYXRhX2FoY2kgKi8KIAl7CiAJCS5zaHQJCT0gJnBpaXhfc2h0LAotCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19TUlNUIHwKLQkJCQkgIFBJSVhfRkxBR19DT01CSU5FRCB8IFBJSVhfRkxBR19DSEVDS0lOVFIgfAotCQkJCSAgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IFBJSVhfRkxBR19BSENJLAorCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NBVEEgfCBQSUlYX0ZMQUdfQ09NQklORURfSUNINiB8CisJCQkJICBQSUlYX0ZMQUdfQ0hFQ0tJTlRSIHwgUElJWF9GTEFHX1NDUiB8CisJCQkJICBQSUlYX0ZMQUdfQUhDSSwKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IDB4N2YsCS8qIHVkbWEwLTYgKi8KIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCisJCS5wcml2YXRlX2RhdGEJPSAmaWNoNl9tYXBfZGIsCisJfSwKKworCS8qIGljaDZtX3NhdGFfYWhjaSAqLworCXsKKwkJLnNodAkJPSAmcGlpeF9zaHQsCisJCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8IFBJSVhfRkxBR19DT01CSU5FRF9JQ0g2IHwKKwkJCQkgIFBJSVhfRkxBR19DSEVDS0lOVFIgfCBQSUlYX0ZMQUdfU0NSIHwKKwkJCQkgIFBJSVhfRkxBR19BSENJLAorCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkudWRtYV9tYXNrCT0gMHg3ZiwJLyogdWRtYTAtNiAqLworCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKKwkJLnByaXZhdGVfZGF0YQk9ICZpY2g2bV9tYXBfZGIsCiAJfSwKIH07CiAKQEAgLTM2MywxMDIgKzQ1NiwxMjMgQEAKIH0KIAogLyoqCi0gKglwaWl4X3BhdGFfcGh5X3Jlc2V0IC0gUHJvYmUgc3BlY2lmaWVkIHBvcnQgb24gUEFUQSBob3N0IGNvbnRyb2xsZXIKLSAqCUBhcDogUG9ydCB0byBwcm9iZQorICoJcGlpeF9wYXRhX3Byb2JlaW5pdCAtIHByb2JlaW5pdCBmb3IgUEFUQSBob3N0IGNvbnRyb2xsZXIKKyAqCUBhcDogVGFyZ2V0IHBvcnQKICAqCi0gKglQcm9iZSBQQVRBIHBoeS4KKyAqCVByb2JlaW5pdCBpbmNsdWRpbmcgY2FibGUgZGV0ZWN0aW9uLgogICoKICAqCUxPQ0tJTkc6CiAgKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgogICovCitzdGF0aWMgdm9pZCBwaWl4X3BhdGFfcHJvYmVpbml0KHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcGlpeF9wYXRhX2NibF9kZXRlY3QoYXApOworCWF0YV9zdGRfcHJvYmVpbml0KGFwKTsKK30KIAotc3RhdGljIHZvaWQgcGlpeF9wYXRhX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorLyoqCisgKglwaWl4X3BhdGFfcHJvYmVfcmVzZXQgLSBQZXJmb3JtIHJlc2V0IG9uIFBBVEEgcG9ydCBhbmQgY2xhc3NpZnkKKyAqCUBhcDogUG9ydCB0byByZXNldAorICoJQGNsYXNzZXM6IFJlc3VsdGluZyBjbGFzc2VzIG9mIGF0dGFjaGVkIGRldmljZXMKKyAqCisgKglSZXNldCBQQVRBIHBoeSBhbmQgY2xhc3NpZnkgYXR0YWNoZWQgZGV2aWNlcy4KKyAqCisgKglMT0NLSU5HOgorICoJTm9uZSAoaW5oZXJpdGVkIGZyb20gY2FsbGVyKS4KKyAqLworc3RhdGljIGludCBwaWl4X3BhdGFfcHJvYmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdF9zZXQtPmRldik7CiAKIAlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZwaWl4X2VuYWJsZV9iaXRzW2FwLT5oYXJkX3BvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IHBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIiwgYXAtPmlkKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAKLQlwaWl4X3BhdGFfY2JsX2RldGVjdChhcCk7Ci0KLQlhdGFfcG9ydF9wcm9iZShhcCk7Ci0KLQlhdGFfYnVzX3Jlc2V0KGFwKTsKKwlyZXR1cm4gYXRhX2RyaXZlX3Byb2JlX3Jlc2V0KGFwLCBwaWl4X3BhdGFfcHJvYmVpbml0LAorCQkJCSAgICAgYXRhX3N0ZF9zb2Z0cmVzZXQsIE5VTEwsCisJCQkJICAgICBhdGFfc3RkX3Bvc3RyZXNldCwgY2xhc3Nlcyk7CiB9CiAKIC8qKgogICoJcGlpeF9zYXRhX3Byb2JlIC0gUHJvYmUgUENJIGRldmljZSBmb3IgcHJlc2VudCBTQVRBIGRldmljZXMKICAqCUBhcDogUG9ydCBhc3NvY2lhdGVkIHdpdGggdGhlIFBDSSBkZXZpY2Ugd2Ugd2lzaCB0byBwcm9iZQogICoKLSAqCVJlYWRzIFNBVEEgUENJIGRldmljZSdzIFBDSSBjb25maWcgcmVnaXN0ZXIgUG9ydCBDb25maWd1cmF0aW9uCi0gKglhbmQgU3RhdHVzIChQQ1MpIHRvIGRldGVybWluZSBwb3J0IGFuZCBkZXZpY2UgYXZhaWxhYmlsaXR5LgorICoJUmVhZHMgYW5kIGNvbmZpZ3VyZXMgU0FUQSBQQ0kgZGV2aWNlJ3MgUENJIGNvbmZpZyByZWdpc3RlcgorICoJUG9ydCBDb25maWd1cmF0aW9uIGFuZCBTdGF0dXMgKFBDUykgdG8gZGV0ZXJtaW5lIHBvcnQgYW5kCisgKglkZXZpY2UgYXZhaWxhYmlsaXR5LgogICoKICAqCUxPQ0tJTkc6CiAgKglOb25lIChpbmhlcml0ZWQgZnJvbSBjYWxsZXIpLgogICoKICAqCVJFVFVSTlM6Ci0gKglOb24temVybyBpZiBwb3J0IGlzIGVuYWJsZWQsIGl0IG1heSBvciBtYXkgbm90IGhhdmUgYSBkZXZpY2UKLSAqCWF0dGFjaGVkIGluIHRoYXQgY2FzZSAoUFJFU0VOVCBiaXQgd291bGQgb25seSBiZSBzZXQgaWYgQklPUyBwcm9iZQotICoJd2FzIGRvbmUpLiBaZXJvIGlzIHJldHVybmVkIGlmIHBvcnQgaXMgZGlzYWJsZWQuCisgKglNYXNrIG9mIGF2YWxpYWJsZSBkZXZpY2VzIG9uIHRoZSBwb3J0LgogICovCi1zdGF0aWMgaW50IHBpaXhfc2F0YV9wcm9iZSAoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGlpeF9zYXRhX3Byb2JlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdF9zZXQtPmRldik7Ci0JaW50IGNvbWJpbmVkID0gKGFwLT5mbGFncyAmIEFUQV9GTEFHX1NMQVZFX1BPU1MpOwotCWludCBvcmlnX21hc2ssIG1hc2ssIGk7CisJY29uc3QgdW5zaWduZWQgaW50ICptYXAgPSBhcC0+aG9zdF9zZXQtPnByaXZhdGVfZGF0YTsKKwlpbnQgYmFzZSA9IDIgKiBhcC0+aGFyZF9wb3J0X25vOworCXVuc2lnbmVkIGludCBwcmVzZW50X21hc2sgPSAwOworCWludCBwb3J0LCBpOwogCXU4IHBjczsKIAotCW1hc2sgPSAoUElJWF9QT1JUX1BSRVNFTlQgPDwgYXAtPmhhcmRfcG9ydF9ubykgfAotCSAgICAgICAoUElJWF9QT1JUX0VOQUJMRUQgPDwgYXAtPmhhcmRfcG9ydF9ubyk7Ci0KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBJQ0g1X1BDUywgJnBjcyk7Ci0Jb3JpZ19tYXNrID0gKGludCkgcGNzICYgMHhmZjsKKwlEUFJJTlRLKCJhdGEldTogRU5URVIsIHBjcz0weCV4IGJhc2U9JWRcbiIsIGFwLT5pZCwgcGNzLCBiYXNlKTsKIAotCS8qIFRPRE86IHRoaXMgaXMgdmFndWVseSB3cm9uZyBmb3IgSUNINiBjb21iaW5lZCBtb2RlLAotCSAqIHdoZXJlIG9ubHkgdHdvIG9mIHRoZSBmb3VyIFNBVEEgcG9ydHMgYXJlIG1hcHBlZAotCSAqIG9udG8gYSBzaW5nbGUgQVRBIGNoYW5uZWwuICBJdCBpcyBhbHNvIHZhZ3VlbHkgaW5hY2N1cmF0ZQotCSAqIGZvciBJQ0g1LCB3aGljaCBoYXMgb25seSB0d28gcG9ydHMuICBIb3dldmVyLCB0aGlzIGlzIG9rLAotCSAqIGFzIGZ1cnRoZXIgZGV2aWNlIHByZXNlbmNlIGRldGVjdGlvbiBjb2RlIHdpbGwgaGFuZGxlCi0JICogYW55IGZhbHNlIHBvc2l0aXZlcyBwcm9kdWNlZCBoZXJlLgotCSAqLwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQltYXNrID0gKFBJSVhfUE9SVF9FTkFCTEVEIDw8IGkpOwotCi0JCWlmICgob3JpZ19tYXNrICYgbWFzaykgPT0gbWFzaykKLQkJCWlmIChjb21iaW5lZCB8fCAoaSA9PSBhcC0+aGFyZF9wb3J0X25vKSkKLQkJCQlyZXR1cm4gMTsKKwkvKiBlbmFibGUgYWxsIHBvcnRzIG9uIHRoaXMgYXAgYW5kIHdhaXQgZm9yIHRoZW0gdG8gc2V0dGxlICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlwb3J0ID0gbWFwW2Jhc2UgKyBpXTsKKwkJaWYgKHBvcnQgPj0gMCkKKwkJCXBjcyB8PSAxIDw8IHBvcnQ7CiAJfQogCi0JcmV0dXJuIDA7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIElDSDVfUENTLCBwY3MpOworCW1zbGVlcCgxMDApOworCisJLyogbGV0J3Mgc2VlIHdoaWNoIGRldmljZXMgYXJlIHByZXNlbnQgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBJQ0g1X1BDUywgJnBjcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXBvcnQgPSBtYXBbYmFzZSArIGldOworCQlpZiAocG9ydCA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKGFwLT5mbGFncyAmIFBJSVhfRkxBR19JR05PUkVfUENTIHx8IHBjcyAmIDEgPDwgKDQgKyBwb3J0KSkKKwkJCXByZXNlbnRfbWFzayB8PSAxIDw8IGk7CisJCWVsc2UKKwkJCXBjcyAmPSB+KDEgPDwgcG9ydCk7CisJfQorCisJLyogZGlzYWJsZSBvZmZsaW5lIHBvcnRzIG9uIG5vbi1BSENJIGNvbnRyb2xsZXJzICovCisJaWYgKCEoYXAtPmZsYWdzICYgUElJWF9GTEFHX0FIQ0kpKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgSUNINV9QQ1MsIHBjcyk7CisKKwlEUFJJTlRLKCJhdGEldTogTEVBVkUsIHBjcz0weCV4IHByZXNlbnRfbWFzaz0weCV4XG4iLAorCQlhcC0+aWQsIHBjcywgcHJlc2VudF9tYXNrKTsKKworCXJldHVybiBwcmVzZW50X21hc2s7CiB9CiAKIC8qKgotICoJcGlpeF9zYXRhX3BoeV9yZXNldCAtIFByb2JlIHNwZWNpZmllZCBwb3J0IG9uIFNBVEEgaG9zdCBjb250cm9sbGVyCi0gKglAYXA6IFBvcnQgdG8gcHJvYmUKKyAqCXBpaXhfc2F0YV9wcm9iZV9yZXNldCAtIFBlcmZvcm0gcmVzZXQgb24gU0FUQSBwb3J0IGFuZCBjbGFzc2lmeQorICoJQGFwOiBQb3J0IHRvIHJlc2V0CisgKglAY2xhc3NlczogUmVzdWx0aW5nIGNsYXNzZXMgb2YgYXR0YWNoZWQgZGV2aWNlcwogICoKLSAqCVByb2JlIFNBVEEgcGh5LgorICoJUmVzZXQgU0FUQSBwaHkgYW5kIGNsYXNzaWZ5IGF0dGFjaGVkIGRldmljZXMuCiAgKgogICoJTE9DS0lORzoKICAqCU5vbmUgKGluaGVyaXRlZCBmcm9tIGNhbGxlcikuCiAgKi8KLQotc3RhdGljIHZvaWQgcGlpeF9zYXRhX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBwaWl4X3NhdGFfcHJvYmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKQogewogCWlmICghcGlpeF9zYXRhX3Byb2JlKGFwKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IFNBVEEgcG9ydCBoYXMgbm8gZGV2aWNlLlxuIiwgYXAtPmlkKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAKLQlhcC0+Y2JsID0gQVRBX0NCTF9TQVRBOwotCi0JYXRhX3BvcnRfcHJvYmUoYXApOwotCi0JYXRhX2J1c19yZXNldChhcCk7CisJcmV0dXJuIGF0YV9kcml2ZV9wcm9iZV9yZXNldChhcCwgYXRhX3N0ZF9wcm9iZWluaXQsCisJCQkJICAgICBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwKKwkJCQkgICAgIGF0YV9zdGRfcG9zdHJlc2V0LCBjbGFzc2VzKTsKIH0KIAogLyoqCkBAIC02MjcsNyArNzQxLDggQEAKIAogLyoqCiAgKglwaWl4X2NoZWNrXzQ1MG54X2VycmF0YQktCUNoZWNrIGZvciBwcm9ibGVtIDQ1ME5YIHNldHVwCi0gKgkKKyAqCUBhdGFfZGV2OiB0aGUgUENJIGRldmljZSB0byBjaGVjaworICoKICAqCUNoZWNrIGZvciB0aGUgcHJlc2VudCBvZiA0NTBOWCBlcnJhdGEgIzE5IGFuZCBlcnJhdGEgIzI1LiBJZgogICoJdGhleSBhcmUgZm91bmQgcmV0dXJuIGFuIGVycm9yIGNvZGUgc28gd2UgY2FuIHR1cm4gb2ZmIERNQQogICovCkBAIC02MzgsNyArNzUzLDcgQEAKIAl1MTYgY2ZnOwogCXU4IHJldjsKIAlpbnQgbm9fcGlpeF9kbWEgPSAwOwotCQorCiAJd2hpbGUoKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDU0TlgsIHBkZXYpKSAhPSBOVUxMKQogCXsKIAkJLyogTG9vayBmb3IgNDUwTlggUFhCLiBDaGVjayBmb3IgcHJvYmxlbSBjb25maWd1cmF0aW9ucwpAQCAtNjU3LDcgKzc3Miw1NSBAQAogCWlmKG5vX3BpaXhfZG1hID09IDIpCiAJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmYXRhX2Rldi0+ZGV2LCAiQSBCSU9TIHVwZGF0ZSBtYXkgcmVzb2x2ZSB0aGlzLlxuIik7CiAJcmV0dXJuIG5vX3BpaXhfZG1hOwotfQkJCit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwaWl4X2luaXRfc2F0YV9tYXAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcGluZm8pCit7CisJc3RydWN0IHBpaXhfbWFwX2RiICptYXBfZGIgPSBwaW5mb1swXS5wcml2YXRlX2RhdGE7CisJY29uc3QgdW5zaWduZWQgaW50ICptYXA7CisJaW50IGksIGludmFsaWRfbWFwID0gMDsKKwl1OCBtYXBfdmFsdWU7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBJQ0g1X1BNUiwgJm1hcF92YWx1ZSk7CisKKwltYXAgPSBtYXBfZGItPm1hcFttYXBfdmFsdWUgJiBtYXBfZGItPm1hc2tdOworCisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJNQVAgWyIpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc3dpdGNoIChtYXBbaV0pIHsKKwkJY2FzZSBSVjoKKwkJCWludmFsaWRfbWFwID0gMTsKKwkJCXByaW50aygiIFhYIik7CisJCQlicmVhazsKKworCQljYXNlIE5BOgorCQkJcHJpbnRrKCIgLS0iKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSURFOgorCQkJV0FSTl9PTigoaSAmIDEpIHx8IG1hcFtpICsgMV0gIT0gSURFKTsKKwkJCXBpbmZvW2kgLyAyXSA9IHBpaXhfcG9ydF9pbmZvW2ljaDVfcGF0YV07CisJCQlpKys7CisJCQlwcmludGsoIiBJREUgSURFIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCIgUCVkIiwgbWFwW2ldKTsKKwkJCWlmIChpICYgMSkKKwkJCQlwaW5mb1tpIC8gMl0uaG9zdF9mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOworCQkJYnJlYWs7CisJCX0KKwl9CisJcHJpbnRrKCIgXVxuIik7CisKKwlpZiAoaW52YWxpZF9tYXApCisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkgICAiaW52YWxpZCBNQVAgdmFsdWUgJXVcbiIsIG1hcF92YWx1ZSk7CisKKwlwaW5mb1swXS5wcml2YXRlX2RhdGEgPSAodm9pZCAqKW1hcDsKKwlwaW5mb1sxXS5wcml2YXRlX2RhdGEgPSAodm9pZCAqKW1hcDsKK30KIAogLyoqCiAgKglwaWl4X2luaXRfb25lIC0gUmVnaXN0ZXIgUElJWCBBVEEgUENJIGRldmljZSB3aXRoIGtlcm5lbCBzZXJ2aWNlcwpAQCAtNjc3LDkgKzg0MCw5IEBACiBzdGF0aWMgaW50IHBpaXhfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0X2luZm9bMl07Ci0JdW5zaWduZWQgaW50IGNvbWJpbmVkID0gMDsKLQl1bnNpZ25lZCBpbnQgcGF0YV9jaGFuID0gMCwgc2F0YV9jaGFuID0gMDsKKwlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwb3J0X2luZm9bMl07CisJc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaW5mb1syXSA9IHsgJnBvcnRfaW5mb1swXSwgJnBvcnRfaW5mb1sxXSB9OworCXVuc2lnbmVkIGxvbmcgaG9zdF9mbGFnczsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKQEAgLTY4OSwxMCArODUyLDEyIEBACiAJaWYgKCFpbl9tb2R1bGVfaW5pdCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwb3J0X2luZm9bMF0gPSAmcGlpeF9wb3J0X2luZm9bZW50LT5kcml2ZXJfZGF0YV07Ci0JcG9ydF9pbmZvWzFdID0gJnBpaXhfcG9ydF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdOworCXBvcnRfaW5mb1swXSA9IHBpaXhfcG9ydF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdOworCXBvcnRfaW5mb1sxXSA9IHBpaXhfcG9ydF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdOwogCi0JaWYgKHBvcnRfaW5mb1swXS0+aG9zdF9mbGFncyAmIFBJSVhfRkxBR19BSENJKSB7CisJaG9zdF9mbGFncyA9IHBvcnRfaW5mb1swXS5ob3N0X2ZsYWdzOworCisJaWYgKGhvc3RfZmxhZ3MgJiBQSUlYX0ZMQUdfQUhDSSkgewogCQl1OCB0bXA7CiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBJSVhfU0NDLCAmdG1wKTsKIAkJaWYgKHRtcCA9PSBQSUlYX0FIQ0lfREVWSUNFKSB7CkBAIC03MDIsMTggKzg2Nyw5IEBACiAJCX0KIAl9CiAKLQlpZiAocG9ydF9pbmZvWzBdLT5ob3N0X2ZsYWdzICYgUElJWF9GTEFHX0NPTUJJTkVEKSB7Ci0JCXU4IHRtcDsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgSUNINV9QTVIsICZ0bXApOwotCi0JCWlmICh0bXAgJiBQSUlYX0NPTUIpIHsKLQkJCWNvbWJpbmVkID0gMTsKLQkJCWlmICh0bXAgJiBQSUlYX0NPTUJfUEFUQV9QMCkKLQkJCQlzYXRhX2NoYW4gPSAxOwotCQkJZWxzZQotCQkJCXBhdGFfY2hhbiA9IDE7Ci0JCX0KLQl9CisJLyogSW5pdGlhbGl6ZSBTQVRBIG1hcCAqLworCWlmIChob3N0X2ZsYWdzICYgQVRBX0ZMQUdfU0FUQSkKKwkJcGlpeF9pbml0X3NhdGFfbWFwKHBkZXYsIHBvcnRfaW5mbyk7CiAKIAkvKiBPbiBJQ0g1LCBzb21lIEJJT1NlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgdXNpbmcgdGhlCiAJICogUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFIGJpdCBhZGRlZCBpbiBQQ0kgMi4zLgpAQCAtNzIxLDI4ICs4NzcsMTkgQEAKIAkgKiBNU0kgaXMgZGlzYWJsZWQgKGFuZCBpdCBpcyBkaXNhYmxlZCwgYXMgd2UgZG9uJ3QgdXNlCiAJICogbWVzc2FnZS1zaWduYWxsZWQgaW50ZXJydXB0cyBjdXJyZW50bHkpLgogCSAqLwotCWlmIChwb3J0X2luZm9bMF0tPmhvc3RfZmxhZ3MgJiBQSUlYX0ZMQUdfQ0hFQ0tJTlRSKQorCWlmIChob3N0X2ZsYWdzICYgUElJWF9GTEFHX0NIRUNLSU5UUikKIAkJcGNpX2ludHgocGRldiwgMSk7CiAKLQlpZiAoY29tYmluZWQpIHsKLQkJcG9ydF9pbmZvW3NhdGFfY2hhbl0gPSAmcGlpeF9wb3J0X2luZm9bZW50LT5kcml2ZXJfZGF0YV07Ci0JCXBvcnRfaW5mb1tzYXRhX2NoYW5dLT5ob3N0X2ZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7Ci0JCXBvcnRfaW5mb1twYXRhX2NoYW5dID0gJnBpaXhfcG9ydF9pbmZvW2ljaDVfcGF0YV07Ci0KLQkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsCi0JCQkgICAiY29tYmluZWQgbW9kZSBkZXRlY3RlZCAocD0ldSwgcz0ldSlcbiIsCi0JCQkgICBwYXRhX2NoYW4sIHNhdGFfY2hhbik7Ci0JfQogCWlmIChwaWl4X2NoZWNrXzQ1MG54X2VycmF0YShwZGV2KSkgewogCQkvKiBUaGlzIHdyaXRlcyBpbnRvIHRoZSBtYXN0ZXIgdGFibGUgYnV0IGl0IGRvZXMgbm90CiAJCSAgIHJlYWxseSBtYXR0ZXIgZm9yIHRoaXMgZXJyYXRhIGFzIHdlIHdpbGwgYXBwbHkgaXQgdG8KIAkJICAgYWxsIHRoZSBQSUlYIGRldmljZXMgb24gdGhlIGJvYXJkICovCi0JCXBvcnRfaW5mb1swXS0+bXdkbWFfbWFzayA9IDA7Ci0JCXBvcnRfaW5mb1swXS0+dWRtYV9tYXNrID0gMDsKLQkJcG9ydF9pbmZvWzFdLT5td2RtYV9tYXNrID0gMDsKLQkJcG9ydF9pbmZvWzFdLT51ZG1hX21hc2sgPSAwOworCQlwb3J0X2luZm9bMF0ubXdkbWFfbWFzayA9IDA7CisJCXBvcnRfaW5mb1swXS51ZG1hX21hc2sgPSAwOworCQlwb3J0X2luZm9bMV0ubXdkbWFfbWFzayA9IDA7CisJCXBvcnRfaW5mb1sxXS51ZG1hX21hc2sgPSAwOwogCX0KLQlyZXR1cm4gYXRhX3BjaV9pbml0X29uZShwZGV2LCBwb3J0X2luZm8sIDIpOworCXJldHVybiBhdGFfcGNpX2luaXRfb25lKHBkZXYsIHBwaW5mbywgMik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBpaXhfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKaW5kZXggZjRjMWNhNy4uZjY3N2M1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCkBAIC0yMzksMTcgKzIzOSwxNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2V0dXBfY2FuX3F1ZXVlID0gLTE7Ci1NT0RVTEVfUEFSTShzZXR1cF9jYW5fcXVldWUsICJpIik7Cittb2R1bGVfcGFyYW0oc2V0dXBfY2FuX3F1ZXVlLCBpbnQsIDApOwogc3RhdGljIGludCBzZXR1cF9jbWRfcGVyX2x1biA9IC0xOwotTU9EVUxFX1BBUk0oc2V0dXBfY21kX3Blcl9sdW4sICJpIik7Cittb2R1bGVfcGFyYW0oc2V0dXBfY21kX3Blcl9sdW4sIGludCwgMCk7CiBzdGF0aWMgaW50IHNldHVwX3NnX3RhYmxlc2l6ZSA9IC0xOwotTU9EVUxFX1BBUk0oc2V0dXBfc2dfdGFibGVzaXplLCAiaSIpOworbW9kdWxlX3BhcmFtKHNldHVwX3NnX3RhYmxlc2l6ZSwgaW50LCAwKTsKICNpZmRlZiBTVVBQT1JUX1RBR1MKIHN0YXRpYyBpbnQgc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nID0gLTE7Ci1NT0RVTEVfUEFSTShzZXR1cF91c2VfdGFnZ2VkX3F1ZXVpbmcsICJpIik7Cittb2R1bGVfcGFyYW0oc2V0dXBfdXNlX3RhZ2dlZF9xdWV1aW5nLCBpbnQsIDApOwogI2VuZGlmCiBzdGF0aWMgaW50IHNldHVwX2hvc3RpZCA9IC0xOwotTU9EVUxFX1BBUk0oc2V0dXBfaG9zdGlkLCAiaSIpOworbW9kdWxlX3BhcmFtKHNldHVwX2hvc3RpZCwgaW50LCAwKTsKIAogCiAjaWYgZGVmaW5lZChDT05GSUdfVFRfRE1BX0VNVUwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY2guYyBiL2RyaXZlcnMvc2NzaS9jaC5jCmluZGV4IGMzZjI3MjguLmQ5YWJkMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jaC5jCkBAIC0zOSw2ICszOSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oImRldmljZSBkcml2ZXIgZm9yIHNjc2kgbWVkaWEgY2hhbmdlciBkZXZpY2VzIik7CiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTQ1NJX0NIQU5HRVJfTUFKT1IpOwogCiBzdGF0aWMgaW50IGluaXQgPSAxOwogbW9kdWxlX3BhcmFtKGluaXQsIGludCwgMDQ0NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZG14MzE5MWQuYyBiL2RyaXZlcnMvc2NzaS9kbXgzMTkxZC5jCmluZGV4IDc5MDViOTAuLjM4ZTQwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kbXgzMTkxZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kbXgzMTkxZC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKICBvdXRfZnJlZV9pcnE6CiAJZnJlZV9pcnEoc2hvc3QtPmlycSwgc2hvc3QpOwogIG91dF9yZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX3JlZ2lvbihzaG9zdC0+aW9fcG9ydCwgRE1YMzE5MURfUkVHSU9OX0xFTik7CisJcmVsZWFzZV9yZWdpb24oaW8sIERNWDMxOTFEX1JFR0lPTl9MRU4pOwogIG91dF9kaXNhYmxlX2RldmljZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzcC5jIGIvZHJpdmVycy9zY3NpL2VzcC5jCmluZGV4IGY2OTAwNTMuLjg3YThjM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3AuYworKysgYi9kcml2ZXJzL3Njc2kvZXNwLmMKQEAgLTIwNjgsMTQgKzIwNjgsMTIgQEAKIHsKIAlzdHJ1Y3QgZXNwICplc3AgPSAoc3RydWN0IGVzcCAqKSBTQ3B0ci0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAorCXNwaW5fbG9ja19pcnEoZXNwLT5laG9zdC0+aG9zdF9sb2NrKTsKIAkodm9pZCkgZXNwX2RvX3Jlc2V0YnVzKGVzcCk7Ci0KIAlzcGluX3VubG9ja19pcnEoZXNwLT5laG9zdC0+aG9zdF9sb2NrKTsKIAogCXdhaXRfZXZlbnQoZXNwLT5yZXNldF9xdWV1ZSwgKGVzcC0+cmVzZXR0aW5nX2J1cyA9PSAwKSk7CiAKLQlzcGluX2xvY2tfaXJxKGVzcC0+ZWhvc3QtPmhvc3RfbG9jayk7Ci0KIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCmluZGV4IDQ1NzU2ZmEuLmU2YmNmZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogc3RhdGljIGludCBkdGNfMzE4MWUgPSBOQ1JfTk9UX1NFVDsKIAogc3RhdGljIHN0cnVjdCBvdmVycmlkZSB7Ci0JTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHM7CisJTkNSNTM4MF9tYXBfdHlwZSBOQ1I1MzgwX21hcF9uYW1lOwogCWludCBpcnE7CiAJaW50IGRtYTsKIAlpbnQgYm9hcmQ7CQkvKiBVc2UgTkNSNTNjNDAwLCBSaWNvaCwgZXRjLiBleHRlbnNpb25zID8gKi8KQEAgLTI5OSw2ICsyOTksMTAgQEAKIAl9OwogCWludCBmbGFncyA9IDA7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7CisjaWZkZWYgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTQorCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwl2b2lkIF9faW9tZW0gKmlvbWVtOworI2VuZGlmCiAKIAlpZiAobmNyX2lycSAhPSBOQ1JfTk9UX1NFVCkKIAkJb3ZlcnJpZGVzWzBdLmlycSA9IG5jcl9pcnE7CkBAIC00MjQsMTUgKzQyOCwyMiBAQAogCQkJcmVnaW9uX3NpemUgPSBOQ1I1MzgwX3JlZ2lvbl9zaXplOwogCQl9CiAjZWxzZQotCQlpZighcmVxdWVzdF9tZW1fcmVnaW9uKG92ZXJyaWRlc1tjdXJyZW50X292ZXJyaWRlXS5OQ1I1MzgwX21hcF9uYW1lLCBOQ1I1MzgwX3JlZ2lvbl9zaXplLCAibmNyNTM4MCIpKQorCQliYXNlID0gb3ZlcnJpZGVzW2N1cnJlbnRfb3ZlcnJpZGVdLk5DUjUzODBfbWFwX25hbWU7CisJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGJhc2UsIE5DUjUzODBfcmVnaW9uX3NpemUsICJuY3I1MzgwIikpCiAJCQljb250aW51ZTsKKwkJaW9tZW0gPSBpb3JlbWFwKGJhc2UsIE5DUjUzODBfcmVnaW9uX3NpemUpOworCQlpZiAoIWlvbWVtKSB7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oYmFzZSwgTkNSNTM4MF9yZWdpb25fc2l6ZSk7CisJCQljb250aW51ZTsKKwkJfQogI2VuZGlmCiAJCWluc3RhbmNlID0gc2NzaV9yZWdpc3Rlcih0cG50LCBzaXplb2Yoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEpKTsKIAkJaWYgKGluc3RhbmNlID09IE5VTEwpIHsKICNpZm5kZWYgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTQogCQkJcmVsZWFzZV9yZWdpb24ob3ZlcnJpZGVzW2N1cnJlbnRfb3ZlcnJpZGVdLk5DUjUzODBfbWFwX25hbWUsIHJlZ2lvbl9zaXplKTsKICNlbHNlCi0JCQlyZWxlYXNlX21lbV9yZWdpb24ob3ZlcnJpZGVzW2N1cnJlbnRfb3ZlcnJpZGVdLk5DUjUzODBfbWFwX25hbWUsIE5DUjUzODBfcmVnaW9uX3NpemUpOworCQkJaW91bm1hcChpb21lbSk7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oYmFzZSwgTkNSNTM4MF9yZWdpb25fc2l6ZSk7CiAjZW5kaWYKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC00NDAsNiArNDUxLDggQEAKIAkJaW5zdGFuY2UtPk5DUjUzODBfaW5zdGFuY2VfbmFtZSA9IG92ZXJyaWRlc1tjdXJyZW50X292ZXJyaWRlXS5OQ1I1MzgwX21hcF9uYW1lOwogI2lmbmRlZiBDT05GSUdfU0NTSV9HX05DUjUzODBfTUVNCiAJCWluc3RhbmNlLT5uX2lvX3BvcnQgPSByZWdpb25fc2l6ZTsKKyNlbHNlCisJCSgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGEpLmlvbWVtID0gaW9tZW07CiAjZW5kaWYKIAogCQlOQ1I1MzgwX2luaXQoaW5zdGFuY2UsIGZsYWdzKTsKQEAgLTUwOSw2ICs1MjIsNyBAQAogI2lmbmRlZiBDT05GSUdfU0NTSV9HX05DUjUzODBfTUVNCiAJcmVsZWFzZV9yZWdpb24oaW5zdGFuY2UtPk5DUjUzODBfaW5zdGFuY2VfbmFtZSwgaW5zdGFuY2UtPm5faW9fcG9ydCk7CiAjZWxzZQorCWlvdW5tYXAoKChzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSAqKWluc3RhbmNlLT5ob3N0ZGF0YSkuaW9tZW0pOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihpbnN0YW5jZS0+TkNSNTM4MF9pbnN0YW5jZV9uYW1lLCBOQ1I1MzgwX3JlZ2lvbl9zaXplKTsKICNlbmRpZgogCkBAIC01ODYsNyArNjAwLDcgQEAKIAkJfQogI2Vsc2UKIAkJLyogaW1wbGllcyBDT05GSUdfU0NTSV9HX05DUjUzODBfTUVNICovCi0JCWlzYV9tZW1jcHlfZnJvbWlvKGRzdCArIHN0YXJ0LCBOQ1I1M0M0MDBfaG9zdF9idWZmZXIgKyBOQ1I1MzgwX21hcF9uYW1lLCAxMjgpOworCQltZW1jcHlfZnJvbWlvKGRzdCArIHN0YXJ0LCBpb21lbSArIE5DUjUzQzQwMF9ob3N0X2J1ZmZlciwgMTI4KTsKICNlbmRpZgogCQlzdGFydCArPSAxMjg7CiAJCWJsb2Nrcy0tOwpAQCAtNjA2LDcgKzYyMCw3IEBACiAJCX0KICNlbHNlCiAJCS8qIGltcGxpZXMgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTSAqLwotCQlpc2FfbWVtY3B5X2Zyb21pbyhkc3QgKyBzdGFydCwgTkNSNTNDNDAwX2hvc3RfYnVmZmVyICsgTkNSNTM4MF9tYXBfbmFtZSwgMTI4KTsKKwkJbWVtY3B5X2Zyb21pbyhkc3QgKyBzdGFydCwgaW9tZW0gKyBOQ1I1M0M0MDBfaG9zdF9idWZmZXIsIDEyOCk7CiAjZW5kaWYKIAkJc3RhcnQgKz0gMTI4OwogCQlibG9ja3MtLTsKQEAgLTY3MSw3ICs2ODUsNyBAQAogCQl9CiAjZWxzZQogCQkvKiBpbXBsaWVzIENPTkZJR19TQ1NJX0dfTkNSNTM4MF9NRU0gKi8KLQkJaXNhX21lbWNweV90b2lvKE5DUjUzQzQwMF9ob3N0X2J1ZmZlciArIE5DUjUzODBfbWFwX25hbWUsIHNyYyArIHN0YXJ0LCAxMjgpOworCQltZW1jcHlfdG9pbyhpb21lbSArIE5DUjUzQzQwMF9ob3N0X2J1ZmZlciwgc3JjICsgc3RhcnQsIDEyOCk7CiAjZW5kaWYKIAkJc3RhcnQgKz0gMTI4OwogCQlibG9ja3MtLTsKQEAgLTY4Nyw3ICs3MDEsNyBAQAogCQl9CiAjZWxzZQogCQkvKiBpbXBsaWVzIENPTkZJR19TQ1NJX0dfTkNSNTM4MF9NRU0gKi8KLQkJaXNhX21lbWNweV90b2lvKE5DUjUzQzQwMF9ob3N0X2J1ZmZlciArIE5DUjUzODBfbWFwX25hbWUsIHNyYyArIHN0YXJ0LCAxMjgpOworCQltZW1jcHlfdG9pbyhpb21lbSArIE5DUjUzQzQwMF9ob3N0X2J1ZmZlciwgc3JjICsgc3RhcnQsIDEyOCk7CiAjZW5kaWYKIAkJc3RhcnQgKz0gMTI4OwogCQlibG9ja3MtLTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaCBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaAppbmRleCA2NTZmYmUyLi5kNjBhODljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmgKKysrIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5oCkBAIC04Miw2ICs4MiwxNSBAQAogI2RlZmluZSBOQ1I1MzgwX3JlYWQocmVnKSAoaW5iKE5DUjUzODBfbWFwX25hbWUgKyAocmVnKSkpCiAjZGVmaW5lIE5DUjUzODBfd3JpdGUocmVnLCB2YWx1ZSkgKG91dGIoKHZhbHVlKSwgKE5DUjUzODBfbWFwX25hbWUgKyAocmVnKSkpKQogCisjZGVmaW5lIE5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzIFwKKyAgICBOQ1I1MzgwX21hcF90eXBlIE5DUjUzODBfbWFwX25hbWUKKworI2RlZmluZSBOQ1I1MzgwX2xvY2FsX2RlY2xhcmUoKSBcCisgICAgcmVnaXN0ZXIgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMKKworI2RlZmluZSBOQ1I1MzgwX3NldHVwKGluc3RhbmNlKSBcCisgICAgTkNSNTM4MF9tYXBfbmFtZSA9IChOQ1I1MzgwX21hcF90eXBlKSgoaW5zdGFuY2UpLT5OQ1I1MzgwX2luc3RhbmNlX25hbWUpCisKICNlbHNlIAogLyogdGhlcmVmb3JlIENPTkZJR19TQ1NJX0dfTkNSNTM4MF9NRU0gKi8KIApAQCAtOTUsMTggKzEwNCwyMCBAQAogI2RlZmluZSBOQ1I1M0M0MDBfaG9zdF9idWZmZXIgMHgzOTAwCiAjZGVmaW5lIE5DUjUzODBfcmVnaW9uX3NpemUgMHgzYTAwCiAKLSNkZWZpbmUgTkNSNTM4MF9yZWFkKHJlZykgaXNhX3JlYWRiKE5DUjUzODBfbWFwX25hbWUgKyBOQ1I1M0M0MDBfbWVtX2Jhc2UgKyAocmVnKSkKLSNkZWZpbmUgTkNSNTM4MF93cml0ZShyZWcsIHZhbHVlKSBpc2Ffd3JpdGViKHZhbHVlLCBOQ1I1MzgwX21hcF9uYW1lICsgTkNSNTNDNDAwX21lbV9iYXNlICsgKHJlZykpCi0jZW5kaWYKKyNkZWZpbmUgTkNSNTM4MF9yZWFkKHJlZykgcmVhZGIoaW9tZW0gKyBOQ1I1M0M0MDBfbWVtX2Jhc2UgKyAocmVnKSkKKyNkZWZpbmUgTkNSNTM4MF93cml0ZShyZWcsIHZhbHVlKSB3cml0ZWIodmFsdWUsIGlvbWVtICsgTkNSNTNDNDAwX21lbV9iYXNlICsgKHJlZykpCiAKICNkZWZpbmUgTkNSNTM4MF9pbXBsZW1lbnRhdGlvbl9maWVsZHMgXAotICAgIE5DUjUzODBfbWFwX3R5cGUgTkNSNTM4MF9tYXBfbmFtZQorICAgIE5DUjUzODBfbWFwX3R5cGUgTkNSNTM4MF9tYXBfbmFtZTsgXAorICAgIHZvaWQgX19pb21lbSAqaW9tZW07CiAKICNkZWZpbmUgTkNSNTM4MF9sb2NhbF9kZWNsYXJlKCkgXAotICAgIHJlZ2lzdGVyIE5DUjUzODBfaW1wbGVtZW50YXRpb25fZmllbGRzCisgICAgcmVnaXN0ZXIgdm9pZCBfX2lvbWVtICppb21lbQogCiAjZGVmaW5lIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpIFwKLSAgICBOQ1I1MzgwX21hcF9uYW1lID0gKE5DUjUzODBfbWFwX3R5cGUpKChpbnN0YW5jZSktPk5DUjUzODBfaW5zdGFuY2VfbmFtZSkKKyAgICBpb21lbSA9ICgoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopKGluc3RhbmNlKS0+aG9zdGRhdGEpLmlvbWVtKQorCisjZW5kaWYKIAogI2RlZmluZSBOQ1I1MzgwX2ludHIgZ2VuZXJpY19OQ1I1MzgwX2ludHIKICNkZWZpbmUgTkNSNTM4MF9xdWV1ZV9jb21tYW5kIGdlbmVyaWNfTkNSNTM4MF9xdWV1ZV9jb21tYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaG9zdHMuYyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCmluZGV4IDU4ODEwNzkuLmVmNTdmMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ob3N0cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9ob3N0cy5jCkBAIC0zMDYsMTAgKzMwNiw5IEBACiAJCWR1bXBfc3RhY2soKTsKICAgICAgICAgfQogCi0Jc2hvc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgU2NzaV9Ib3N0KSArIHByaXZzaXplLCBnZnBfbWFzayk7CisJc2hvc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgU2NzaV9Ib3N0KSArIHByaXZzaXplLCBnZnBfbWFzayk7CiAJaWYgKCFzaG9zdCkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KHNob3N0LCAwLCBzaXplb2Yoc3RydWN0IFNjc2lfSG9zdCkgKyBwcml2c2l6ZSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmc2hvc3QtPmRlZmF1bHRfbG9jayk7CiAJc2NzaV9hc3NpZ25fbG9jayhzaG9zdCwgJnNob3N0LT5kZWZhdWx0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libW1jYS5jIGIvZHJpdmVycy9zY3NpL2libW1jYS5jCmluZGV4IGI2MGMxYjkuLjNhODQ2MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm1tY2EuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKQEAgLTI0MTIsOCArMjQxMiw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdHNbaV0tPmhvc3RfbG9jaywgZmxhZ3MpOwkvKiBDaGVjayBpdCAqLwogCWhvc3RfaW5kZXggPSBpOwogCWlmICghc2hwbnQpIHsKLQkJbGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiXG5JQk0gTUNBIFNDU0k6IENhbid0IGZpbmQgYWRhcHRlciBmb3IgaG9zdCBudW1iZXIgJWRcbiIsCi0JCQkJc2hwbnQtPmhvc3Rfbm8pOworCQlsZW4gKz0gc3ByaW50ZihidWZmZXIgKyBsZW4sICJcbklCTSBNQ0EgU0NTSTogQ2FuJ3QgZmluZCBhZGFwdGVyIik7CiAJCXJldHVybiBsZW47CiAJfQogCW1heF9wdW4gPSBzdWJzeXN0ZW1fbWF4aWQoaG9zdF9pbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCmluZGV4IDBjZjBlNGMuLjM5Yjc2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYml0b3BzLmg+CkBAIC0xMDksNyArMTEwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvZzsJCQkvKiBsb2cgZmxhZ3MgKi8KIH0gaWRlc2NzaV9zY3NpX3Q7CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKGlkZXNjc2lfcmVmX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGlkZXNjc2lfcmVmX211dGV4KTsKIAogI2RlZmluZSBpZGVfc2NzaV9nKGRpc2spIFwKIAljb250YWluZXJfb2YoKGRpc2spLT5wcml2YXRlX2RhdGEsIHN0cnVjdCBpZGVfc2NzaV9vYmosIGRyaXZlcikKQEAgLTExOCwxOSArMTE5LDE5IEBACiB7CiAJc3RydWN0IGlkZV9zY3NpX29iaiAqc2NzaSA9IE5VTEw7CiAKLQlkb3duKCZpZGVzY3NpX3JlZl9zZW0pOworCW11dGV4X2xvY2soJmlkZXNjc2lfcmVmX211dGV4KTsKIAlzY3NpID0gaWRlX3Njc2lfZyhkaXNrKTsKIAlpZiAoc2NzaSkKIAkJc2NzaV9ob3N0X2dldChzY3NpLT5ob3N0KTsKLQl1cCgmaWRlc2NzaV9yZWZfc2VtKTsKKwltdXRleF91bmxvY2soJmlkZXNjc2lfcmVmX211dGV4KTsKIAlyZXR1cm4gc2NzaTsKIH0KIAogc3RhdGljIHZvaWQgaWRlX3Njc2lfcHV0KHN0cnVjdCBpZGVfc2NzaV9vYmogKnNjc2kpCiB7Ci0JZG93bigmaWRlc2NzaV9yZWZfc2VtKTsKKwltdXRleF9sb2NrKCZpZGVzY3NpX3JlZl9tdXRleCk7CiAJc2NzaV9ob3N0X3B1dChzY3NpLT5ob3N0KTsKLQl1cCgmaWRlc2NzaV9yZWZfc2VtKTsKKwltdXRleF91bmxvY2soJmlkZXNjc2lfcmVmX211dGV4KTsKIH0KIAogc3RhdGljIGlubGluZSBpZGVzY3NpX3Njc2lfdCAqc2NzaWhvc3RfdG9faWRlc2NzaShzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2luMjAwMC5jIGIvZHJpdmVycy9zY3NpL2luMjAwMC5jCmluZGV4IDM0ZGFhM2UuLjljNTE5ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pbjIwMDAuYworKysgYi9kcml2ZXJzL3Njc2kvaW4yMDAwLmMKQEAgLTE4OTgsNiArMTg5OCwyMSBAQAogCTEwCiB9OwogCitzdGF0aWMgaW50IHByb2JlX2Jpb3ModTMyIGFkZHIsIHUzMiAqczEsIHVjaGFyICpzd2l0Y2hlcykKK3sKKwl2b2lkIF9faW9tZW0gKnAgPSBpb3JlbWFwKGFkZHIsIDB4MzQpOworCWlmICghcCkKKwkJcmV0dXJuIDA7CisJKnMxID0gcmVhZGwocCArIDB4MTApOworCWlmICgqczEgPT0gMHg0MTU2NGY0ZSB8fCByZWFkbChwICsgMHgzMCkgPT0gMHg2MTc3NmM0MSkgeworCQkvKiBSZWFkIHRoZSBzd2l0Y2ggaW1hZ2UgdGhhdCdzIG1hcHBlZCBpbnRvIEVQUk9NIHNwYWNlICovCisJCSpzd2l0Y2hlcyA9IH5yZWFkYihwICsgMHgyMCk7CisJCWlvdW5tYXAocCk7CisJCXJldHVybiAxOworCX0KKwlpb3VubWFwKHApOworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IF9faW5pdCBpbjIwMDBfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiB0cG50KQogewpAQCAtMTkzMCw2ICsxOTQ1LDcgQEAKIAogCWRldGVjdF9jb3VudCA9IDA7CiAJZm9yIChiaW9zID0gMDsgYmlvc190YWJbYmlvc107IGJpb3MrKykgeworCQl1MzIgczEgPSAwOwogCQlpZiAoY2hlY2tfc2V0dXBfYXJncygiaW9wb3J0IiwgJnZhbCwgYnVmKSkgewogCQkJYmFzZSA9IHZhbDsKIAkJCXN3aXRjaGVzID0gfmluYihiYXNlICsgSU9fU1dJVENIRVMpICYgMHhmZjsKQEAgLTE5NDEsMTMgKzE5NTcsOSBAQAogICogZm9yIHRoZSBvYnZpb3VzIElEIHN0cmluZ3MuIFdlIGxvb2sgZm9yIHRoZSAyIG1vc3QgY29tbW9uIG9uZXMgYW5kCiAgKiBob3BlIHRoYXQgdGhleSBjb3ZlciBhbGwgdGhlIGNhc2VzLi4uCiAgKi8KLQkJZWxzZSBpZiAoaXNhX3JlYWRsKGJpb3NfdGFiW2Jpb3NdICsgMHgxMCkgPT0gMHg0MTU2NGY0ZSB8fCBpc2FfcmVhZGwoYmlvc190YWJbYmlvc10gKyAweDMwKSA9PSAweDYxNzc2YzQxKSB7CisJCWVsc2UgaWYgKHByb2JlX2Jpb3MoYmlvc190YWJbYmlvc10sICZzMSwgJnN3aXRjaGVzKSkgewogCQkJcHJpbnRrKCJGb3VuZCBJTjIwMDAgQklPUyBhdCAweCV4ICIsICh1bnNpZ25lZCBpbnQpIGJpb3NfdGFiW2Jpb3NdKTsKIAotLyogUmVhZCB0aGUgc3dpdGNoIGltYWdlIHRoYXQncyBtYXBwZWQgaW50byBFUFJPTSBzcGFjZSAqLwotCi0JCQlzd2l0Y2hlcyA9IH4oKGlzYV9yZWFkYihiaW9zX3RhYltiaW9zXSArIDB4MjApICYgMHhmZikpOwotCiAvKiBGaW5kIG91dCB3aGVyZSB0aGUgSU8gc3BhY2UgaXMgKi8KIAogCQkJeCA9IHN3aXRjaGVzICYgKFNXX0FERFIwIHwgU1dfQUREUjEpOwpAQCAtMjAzNyw3ICsyMDQ5LDcgQEAKIAogLyogT2xkZXIgQklPUydzIGhhZCBhICdzeW5jIG9uL29mZicgc3dpdGNoIC0gdXNlIGl0cyBzZXR0aW5nICovCiAKLQkJaWYgKGlzYV9yZWFkbChiaW9zX3RhYltiaW9zXSArIDB4MTApID09IDB4NDE1NjRmNGUgJiYgKHN3aXRjaGVzICYgU1dfU1lOQ19ET1M1KSkKKwkJaWYgKHMxID09IDB4NDE1NjRmNGUgJiYgKHN3aXRjaGVzICYgU1dfU1lOQ19ET1M1KSkKIAkJCWhvc3RkYXRhLT5zeW5jX29mZiA9IDB4MDA7CS8qIHN5bmMgZGVmYXVsdHMgdG8gb24gKi8KIAkJZWxzZQogCQkJaG9zdGRhdGEtPnN5bmNfb2ZmID0gMHhmZjsJLyogc3luYyBkZWZhdWx0cyB0byBvZmYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuYyBiL2RyaXZlcnMvc2NzaS9pcHIuYwppbmRleCAyYmJhNWU1Li41ODkwZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwci5jCkBAIC01ODMxLDYgKzU4MzEsMTA5IEBACiB9CiAKIC8qKgorICogaXByX3Jlc2V0X2ZyZWV6ZSAtIEhvbGQgb2ZmIGFsbCBJL08gYWN0aXZpdHkKKyAqIEBpcHJfY21kOglpcHIgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBEZXNjcmlwdGlvbjogSWYgdGhlIFBDSSBzbG90IGlzIGZyb3plbiwgaG9sZCBvZmYgYWxsIEkvTworICogYWN0aXZpdHk7IHRoZW4sIGFzIHNvb24gYXMgdGhlIHNsb3QgaXMgYXZhaWxhYmxlIGFnYWluLAorICogaW5pdGlhdGUgYW4gYWRhcHRlciByZXNldC4KKyAqLworc3RhdGljIGludCBpcHJfcmVzZXRfZnJlZXplKHN0cnVjdCBpcHJfY21uZCAqaXByX2NtZCkKK3sKKwkvKiBEaXNhbGxvdyBuZXcgaW50ZXJydXB0cywgYXZvaWQgbG9vcCAqLworCWlwcl9jbWQtPmlvYV9jZmctPmFsbG93X2ludGVycnVwdHMgPSAwOworCWxpc3RfYWRkX3RhaWwoJmlwcl9jbWQtPnF1ZXVlLCAmaXByX2NtZC0+aW9hX2NmZy0+cGVuZGluZ19xKTsKKwlpcHJfY21kLT5kb25lID0gaXByX3Jlc2V0X2lvYV9qb2I7CisJcmV0dXJuIElQUl9SQ19KT0JfUkVUVVJOOworfQorCisvKioKKyAqIGlwcl9wY2lfZnJvemVuIC0gQ2FsbGVkIHdoZW4gc2xvdCBoYXMgZXhwZXJpZW5jZWQgYSBQQ0kgYnVzIGVycm9yLgorICogQHBkZXY6CVBDSSBkZXZpY2Ugc3RydWN0CisgKgorICogRGVzY3JpcHRpb246IFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gdGVsbCB1cyB0aGF0IHRoZSBQQ0kgYnVzCisgKiBpcyBkb3duLiBDYW4ndCBkbyBhbnl0aGluZyBoZXJlLCBleGNlcHQgcHV0IHRoZSBkZXZpY2UgZHJpdmVyCisgKiBpbnRvIGEgaG9sZGluZyBwYXR0ZXJuLCB3YWl0aW5nIGZvciB0aGUgUENJIGJ1cyB0byBjb21lIGJhY2suCisgKi8KK3N0YXRpYyB2b2lkIGlwcl9wY2lfZnJvemVuKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCV9pcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIGlwcl9yZXNldF9mcmVlemUsIElQUl9TSFVURE9XTl9OT05FKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIGlwcl9wY2lfc2xvdF9yZXNldCAtIENhbGxlZCB3aGVuIFBDSSBzbG90IGhhcyBiZWVuIHJlc2V0LgorICogQHBkZXY6CVBDSSBkZXZpY2Ugc3RydWN0CisgKgorICogRGVzY3JpcHRpb246IFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIHBjaSBlcnJvciByZWNvdmVyeQorICogY29kZSBhZnRlciB0aGUgUENJIHNsb3QgaGFzIGJlZW4gcmVzZXQsIGp1c3QgYmVmb3JlIHdlCisgKiBzaG91bGQgcmVzdW1lIG5vcm1hbCBvcGVyYXRpb25zLgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpcHJfcGNpX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJX2lwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgaXByX3Jlc2V0X3Jlc3RvcmVfY2ZnX3NwYWNlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQUl9TSFVURE9XTl9OT05FKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7Cit9CisKKy8qKgorICogaXByX3BjaV9wZXJtX2ZhaWx1cmUgLSBDYWxsZWQgd2hlbiBQQ0kgc2xvdCBpcyBkZWFkIGZvciBnb29kLgorICogQHBkZXY6CVBDSSBkZXZpY2Ugc3RydWN0CisgKgorICogRGVzY3JpcHRpb246IFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgUENJIGJ1cyBoYXMKKyAqIHBlcm1hbmVudGx5IGZhaWxlZC4KKyAqLworc3RhdGljIHZvaWQgaXByX3BjaV9wZXJtX2ZhaWx1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJaWYgKGlvYV9jZmctPnNkdF9zdGF0ZSA9PSBXQUlUX0ZPUl9EVU1QKQorCQlpb2FfY2ZnLT5zZHRfc3RhdGUgPSBBQk9SVF9EVU1QOworCWlvYV9jZmctPnJlc2V0X3JldHJpZXMgPSBJUFJfTlVNX1JFU0VUX1JFTE9BRF9SRVRSSUVTOworCWlvYV9jZmctPmluX2lvYV9icmluZ2Rvd24gPSAxOworCWlwcl9pbml0aWF0ZV9pb2FfcmVzZXQoaW9hX2NmZywgSVBSX1NIVVRET1dOX05PTkUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogaXByX3BjaV9lcnJvcl9kZXRlY3RlZCAtIENhbGxlZCB3aGVuIGEgUENJIGVycm9yIGlzIGRldGVjdGVkLgorICogQHBkZXY6CVBDSSBkZXZpY2Ugc3RydWN0CisgKiBAc3RhdGU6CVBDSSBjaGFubmVsIHN0YXRlCisgKgorICogRGVzY3JpcHRpb246IENhbGxlZCB3aGVuIGEgUENJIGVycm9yIGlzIGRldGVjdGVkLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUIG9yIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1QKKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXByX3BjaV9lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJICAgICAgIHBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgcGNpX2NoYW5uZWxfaW9fZnJvemVuOgorCQlpcHJfcGNpX2Zyb3plbihwZGV2KTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CisJY2FzZSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmU6CisJCWlwcl9wY2lfcGVybV9mYWlsdXJlKHBkZXYpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCisvKioKICAqIGlwcl9wcm9iZV9pb2FfcGFydDIgLSBJbml0aWFsaXplcyBJT0FzIGZvdW5kIGluIGlwcl9wcm9iZV9pb2EoLi4pCiAgKiBAaW9hX2NmZzoJaW9hIGNmZyBzdHJ1Y3QKICAqCkBAIC02NjAxLDEyICs2NzA0LDE4IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlwcl9wY2lfdGFibGUpOwogCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBpcHJfZXJyX2hhbmRsZXIgPSB7CisJLmVycm9yX2RldGVjdGVkID0gaXByX3BjaV9lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldCA9IGlwcl9wY2lfc2xvdF9yZXNldCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpcHJfZHJpdmVyID0gewogCS5uYW1lID0gSVBSX05BTUUsCiAJLmlkX3RhYmxlID0gaXByX3BjaV90YWJsZSwKIAkucHJvYmUgPSBpcHJfcHJvYmUsCiAJLnJlbW92ZSA9IGlwcl9yZW1vdmUsCiAJLnNodXRkb3duID0gaXByX3NodXRkb3duLAorCS5lcnJfaGFuZGxlciA9ICZpcHJfZXJyX2hhbmRsZXIsCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHMuYyBiL2RyaXZlcnMvc2NzaS9pcHMuYwppbmRleCA4NmM1NDYxLi40ODE3MDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXBzLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwcy5jCkBAIC0xMTQ2LDcgKzExNDYsNyBAQAogCQkJCXJldHVybiAoMCk7CiAJCQl9CiAJCQloYS0+aW9jdGxfcmVzZXQgPSAxOwkvKiBUaGlzIHJlc2V0IHJlcXVlc3QgaXMgZnJvbSBhbiBJT0NUTCAqLwotCQkJaXBzX2VoX3Jlc2V0KFNDKTsKKwkJCV9faXBzX2VoX3Jlc2V0KFNDKTsKIAkJCVNDLT5yZXN1bHQgPSBESURfT0sgPDwgMTY7CiAJCQlTQy0+c2NzaV9kb25lKFNDKTsKIAkJCXJldHVybiAoMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggZmY3OWU2OC4uN2I4MmZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtMzYzOSw3ICszNjM5LDcgQEAKIAogCXRhc2tjYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJpc2NzaV90YXNrY2FjaGUiLAogCQkJc2l6ZW9mKHN0cnVjdCBpc2NzaV9kYXRhX3Rhc2spLCAwLAotCQkJU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9OT19SRUFQLCBOVUxMLCBOVUxMKTsKKwkJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCwgTlVMTCk7CiAJaWYgKCF0YXNrY2FjaGUpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvamF6el9lc3AuYyBiL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCmluZGV4IDIzNzI4ZDEuLmZjMDMxYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCkBAIC01Miw3ICs1Miw2IEBACiAJCQkJICogdmlhIFBJTy4KIAkJCQkgKi8KIAotaW50IGphenpfZXNwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50KTsKIHN0YXRpYyBpbnQgamF6el9lc3BfcmVsZWFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKIAlpZiAoc2hvc3QtPmlycSkKQEAgLTY1LDI3ICs2NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsKLQkucHJvY19uYW1lCQk9ICJqYXp6X2VzcCIsCi0JLnByb2NfaW5mbwkJPSAmZXNwX3Byb2NfaW5mbywKLQkubmFtZQkJCT0gIkVTUCAxMDAvMTAwYS8yMDAiLAotCS5kZXRlY3QJCQk9IGphenpfZXNwX2RldGVjdCwKLQkuc2xhdmVfYWxsb2MJCT0gZXNwX3NsYXZlX2FsbG9jLAotCS5zbGF2ZV9kZXN0cm95CQk9IGVzcF9zbGF2ZV9kZXN0cm95LAotCS5yZWxlYXNlCQk9IGphenpfZXNwX3JlbGVhc2UsCi0JLmluZm8JCQk9IGVzcF9pbmZvLAotCS5xdWV1ZWNvbW1hbmQJCT0gZXNwX3F1ZXVlLAotCS5laF9hYm9ydF9oYW5kbGVyCT0gZXNwX2Fib3J0LAotCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IGVzcF9yZXNldCwKLQkuY2FuX3F1ZXVlCQk9IDcsCi0JLnRoaXNfaWQJCT0gNywKLQkuc2dfdGFibGVzaXplCQk9IFNHX0FMTCwKLQkuY21kX3Blcl9sdW4JCT0gMSwKLQkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAotfTsKLQotI2luY2x1ZGUgInNjc2lfbW9kdWxlLmMiCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBEZXRlY3Rpb24gKi8KIHN0YXRpYyBpbnQgamF6el9lc3BfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCiB7CkBAIC05Niw3ICs3NCw3IEBACiAgICAgICogZmlyc3QgYXNzdW1wdGlvbiBpdCBpcyB0aGVyZTotKQogICAgICAqLwogICAgIGlmICgxKSB7Ci0JZXNwX2RldiA9IDA7CisJZXNwX2RldiA9IE5VTEw7CiAJZXNwID0gZXNwX2FsbG9jYXRlKHRwbnQsICh2b2lkICopIGVzcF9kZXYpOwogCQogCS8qIERvIGNvbW1hbmQgdHJhbnNmZXIgd2l0aCBwcm9ncmFtbWVkIEkvTyAqLwpAQCAtMTE1LDEzICs5MywxMyBAQAogCWVzcC0+ZG1hX3NldHVwID0gJmRtYV9zZXR1cDsKIAogCS8qIE9wdGlvbmFsIGZ1bmN0aW9ucyAqLwotCWVzcC0+ZG1hX2JhcnJpZXIgPSAwOwotCWVzcC0+ZG1hX2RyYWluID0gMDsKLQllc3AtPmRtYV9pbnZhbGlkYXRlID0gMDsKLQllc3AtPmRtYV9pcnFfZW50cnkgPSAwOwotCWVzcC0+ZG1hX2lycV9leGl0ID0gMDsKLQllc3AtPmRtYV9wb2xsID0gMDsKLQllc3AtPmRtYV9yZXNldCA9IDA7CisJZXNwLT5kbWFfYmFycmllciA9IE5VTEw7CisJZXNwLT5kbWFfZHJhaW4gPSBOVUxMOworCWVzcC0+ZG1hX2ludmFsaWRhdGUgPSBOVUxMOworCWVzcC0+ZG1hX2lycV9lbnRyeSA9IE5VTEw7CisJZXNwLT5kbWFfaXJxX2V4aXQgPSBOVUxMOworCWVzcC0+ZG1hX3BvbGwgPSBOVUxMOworCWVzcC0+ZG1hX3Jlc2V0ID0gTlVMTDsKIAllc3AtPmRtYV9sZWRfb2ZmID0gJmRtYV9sZWRfb2ZmOwogCWVzcC0+ZG1hX2xlZF9vbiA9ICZkbWFfbGVkX29uOwogCQpAQCAtMTQxLDcgKzExOSw3IEBACiAJICogb2YgRE1BIGNoYW5uZWwsIHNvIHdlIGNhbiB1c2UgdGhlIGphenogRE1BIGZ1bmN0aW9ucwogCSAqIAogCSAqLwotCWVzcC0+ZHJlZ3MgPSBKQVpaX1NDU0lfRE1BOworCWVzcC0+ZHJlZ3MgPSAodm9pZCAqKSBKQVpaX1NDU0lfRE1BOwogCQogCS8qIEVTUCByZWdpc3RlciBiYXNlICovCiAJZXNwLT5lcmVncyA9IChzdHJ1Y3QgRVNQX3JlZ3MgKikoSkFaWl9TQ1NJX0JBU0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1ibWRtYS5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1ibWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDgxZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWJtZG1hLmMKQEAgLTAsMCArMSw5NzYgQEAKKy8qCisgKiAgbGliYXRhLWJtZG1hLmMgLSBoZWxwZXIgbGlicmFyeSBmb3IgUENJIElERSBCTURNQQorICoKKyAqICBNYWludGFpbmVkIGJ5OiAgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgorICogICAgCQkgICAgUGxlYXNlIEFMV0FZUyBjb3B5IGxpbnV4LWlkZUB2Z2VyLmtlcm5lbC5vcmcKKyAqCQkgICAgb24gZW1haWxzLgorICoKKyAqICBDb3B5cmlnaHQgMjAwMy0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IDIwMDMtMjAwNiBKZWZmIEdhcnppaworICoKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoKKyAqICBsaWJhdGEgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdmlhICdtYWtlIHtwc3xwZGZ9ZG9jcycsCisgKiAgYXMgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2xpYmF0YS4qCisgKgorICogIEhhcmR3YXJlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy50MTMub3JnLyBhbmQKKyAqICBodHRwOi8vd3d3LnNhdGEtaW8ub3JnLworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CisKKyNpbmNsdWRlICJsaWJhdGEuaCIKKworLyoqCisgKglhdGFfdGZfbG9hZF9waW8gLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBob3N0IGNvbnRyb2xsZXIKKyAqCUBhcDogUG9ydCB0byB3aGljaCBvdXRwdXQgaXMgc2VudAorICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0CisgKgorICoJT3V0cHV0cyBBVEEgdGFza2ZpbGUgdG8gc3RhbmRhcmQgQVRBIGhvc3QgY29udHJvbGxlci4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCisKK3N0YXRpYyB2b2lkIGF0YV90Zl9sb2FkX3BpbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCXVuc2lnbmVkIGludCBpc19hZGRyID0gdGYtPmZsYWdzICYgQVRBX1RGTEFHX0lTQUREUjsKKworCWlmICh0Zi0+Y3RsICE9IGFwLT5sYXN0X2N0bCkgeworCQlvdXRiKHRmLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCQlhcC0+bGFzdF9jdGwgPSB0Zi0+Y3RsOworCQlhdGFfd2FpdF9pZGxlKGFwKTsKKwl9CisKKwlpZiAoaXNfYWRkciAmJiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0xCQTQ4KSkgeworCQlvdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9hZGRyLT5mZWF0dXJlX2FkZHIpOworCQlvdXRiKHRmLT5ob2JfbnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJCW91dGIodGYtPmhvYl9sYmFsLCBpb2FkZHItPmxiYWxfYWRkcik7CisJCW91dGIodGYtPmhvYl9sYmFtLCBpb2FkZHItPmxiYW1fYWRkcik7CisJCW91dGIodGYtPmhvYl9sYmFoLCBpb2FkZHItPmxiYWhfYWRkcik7CisJCVZQUklOVEsoImhvYjogZmVhdCAweCVYIG5zZWN0IDB4JVgsIGxiYSAweCVYIDB4JVggMHglWFxuIiwKKwkJCXRmLT5ob2JfZmVhdHVyZSwKKwkJCXRmLT5ob2JfbnNlY3QsCisJCQl0Zi0+aG9iX2xiYWwsCisJCQl0Zi0+aG9iX2xiYW0sCisJCQl0Zi0+aG9iX2xiYWgpOworCX0KKworCWlmIChpc19hZGRyKSB7CisJCW91dGIodGYtPmZlYXR1cmUsIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKKwkJb3V0Yih0Zi0+bnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJCW91dGIodGYtPmxiYWwsIGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJb3V0Yih0Zi0+bGJhbSwgaW9hZGRyLT5sYmFtX2FkZHIpOworCQlvdXRiKHRmLT5sYmFoLCBpb2FkZHItPmxiYWhfYWRkcik7CisJCVZQUklOVEsoImZlYXQgMHglWCBuc2VjdCAweCVYIGxiYSAweCVYIDB4JVggMHglWFxuIiwKKwkJCXRmLT5mZWF0dXJlLAorCQkJdGYtPm5zZWN0LAorCQkJdGYtPmxiYWwsCisJCQl0Zi0+bGJhbSwKKwkJCXRmLT5sYmFoKTsKKwl9CisKKwlpZiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0RFVklDRSkgeworCQlvdXRiKHRmLT5kZXZpY2UsIGlvYWRkci0+ZGV2aWNlX2FkZHIpOworCQlWUFJJTlRLKCJkZXZpY2UgMHglWFxuIiwgdGYtPmRldmljZSk7CisJfQorCisJYXRhX3dhaXRfaWRsZShhcCk7Cit9CisKKy8qKgorICoJYXRhX3RmX2xvYWRfbW1pbyAtIHNlbmQgdGFza2ZpbGUgcmVnaXN0ZXJzIHRvIGhvc3QgY29udHJvbGxlcgorICoJQGFwOiBQb3J0IHRvIHdoaWNoIG91dHB1dCBpcyBzZW50CisgKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKKyAqCisgKglPdXRwdXRzIEFUQSB0YXNrZmlsZSB0byBzdGFuZGFyZCBBVEEgaG9zdCBjb250cm9sbGVyIHVzaW5nIE1NSU8uCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworCitzdGF0aWMgdm9pZCBhdGFfdGZfbG9hZF9tbWlvKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQoreworCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7CisJdW5zaWduZWQgaW50IGlzX2FkZHIgPSB0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfSVNBRERSOworCisJaWYgKHRmLT5jdGwgIT0gYXAtPmxhc3RfY3RsKSB7CisJCXdyaXRlYih0Zi0+Y3RsLCAodm9pZCBfX2lvbWVtICopIGFwLT5pb2FkZHIuY3RsX2FkZHIpOworCQlhcC0+bGFzdF9jdGwgPSB0Zi0+Y3RsOworCQlhdGFfd2FpdF9pZGxlKGFwKTsKKwl9CisKKwlpZiAoaXNfYWRkciAmJiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0xCQTQ4KSkgeworCQl3cml0ZWIodGYtPmhvYl9mZWF0dXJlLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKKwkJd3JpdGViKHRmLT5ob2JfbnNlY3QsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJd3JpdGViKHRmLT5ob2JfbGJhbCwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmxiYWxfYWRkcik7CisJCXdyaXRlYih0Zi0+aG9iX2xiYW0sICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5sYmFtX2FkZHIpOworCQl3cml0ZWIodGYtPmhvYl9sYmFoLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhaF9hZGRyKTsKKwkJVlBSSU5USygiaG9iOiBmZWF0IDB4JVggbnNlY3QgMHglWCwgbGJhIDB4JVggMHglWCAweCVYXG4iLAorCQkJdGYtPmhvYl9mZWF0dXJlLAorCQkJdGYtPmhvYl9uc2VjdCwKKwkJCXRmLT5ob2JfbGJhbCwKKwkJCXRmLT5ob2JfbGJhbSwKKwkJCXRmLT5ob2JfbGJhaCk7CisJfQorCisJaWYgKGlzX2FkZHIpIHsKKwkJd3JpdGViKHRmLT5mZWF0dXJlLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKKwkJd3JpdGViKHRmLT5uc2VjdCwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPm5zZWN0X2FkZHIpOworCQl3cml0ZWIodGYtPmxiYWwsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5sYmFsX2FkZHIpOworCQl3cml0ZWIodGYtPmxiYW0sICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5sYmFtX2FkZHIpOworCQl3cml0ZWIodGYtPmxiYWgsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5sYmFoX2FkZHIpOworCQlWUFJJTlRLKCJmZWF0IDB4JVggbnNlY3QgMHglWCBsYmEgMHglWCAweCVYIDB4JVhcbiIsCisJCQl0Zi0+ZmVhdHVyZSwKKwkJCXRmLT5uc2VjdCwKKwkJCXRmLT5sYmFsLAorCQkJdGYtPmxiYW0sCisJCQl0Zi0+bGJhaCk7CisJfQorCisJaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19ERVZJQ0UpIHsKKwkJd3JpdGViKHRmLT5kZXZpY2UsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5kZXZpY2VfYWRkcik7CisJCVZQUklOVEsoImRldmljZSAweCVYXG4iLCB0Zi0+ZGV2aWNlKTsKKwl9CisKKwlhdGFfd2FpdF9pZGxlKGFwKTsKK30KKworCisvKioKKyAqCWF0YV90Zl9sb2FkIC0gc2VuZCB0YXNrZmlsZSByZWdpc3RlcnMgdG8gaG9zdCBjb250cm9sbGVyCisgKglAYXA6IFBvcnQgdG8gd2hpY2ggb3V0cHV0IGlzIHNlbnQKKyAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldAorICoKKyAqCU91dHB1dHMgQVRBIHRhc2tmaWxlIHRvIHN0YW5kYXJkIEFUQSBob3N0IGNvbnRyb2xsZXIgdXNpbmcgTU1JTworICoJb3IgUElPIGFzIGluZGljYXRlZCBieSB0aGUgQVRBX0ZMQUdfTU1JTyBmbGFnLgorICoJV3JpdGVzIHRoZSBjb250cm9sLCBmZWF0dXJlLCBuc2VjdCwgbGJhbCwgbGJhbSwgYW5kIGxiYWggcmVnaXN0ZXJzLgorICoJT3B0aW9uYWxseSAoQVRBX1RGTEFHX0xCQTQ4KSB3cml0ZXMgaG9iX2ZlYXR1cmUsIGhvYl9uc2VjdCwKKyAqCWhvYl9sYmFsLCBob2JfbGJhbSwgYW5kIGhvYl9sYmFoLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gd2FpdHMgZm9yIGlkbGUgKCFCVVNZIGFuZCAhRFJRKSBhZnRlciB3cml0aW5nCisgKglyZWdpc3RlcnMuICBJZiB0aGUgY29udHJvbCByZWdpc3RlciBoYXMgYSBuZXcgdmFsdWUsIHRoaXMKKyAqCWZ1bmN0aW9uIGFsc28gd2FpdHMgZm9yIGlkbGUgYWZ0ZXIgd3JpdGluZyBjb250cm9sIGFuZCBiZWZvcmUKKyAqCXdyaXRpbmcgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMuCisgKgorICoJTWF5IGJlIHVzZWQgYXMgdGhlIHRmX2xvYWQoKSBlbnRyeSBpbiBhdGFfcG9ydF9vcGVyYXRpb25zLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3ZvaWQgYXRhX3RmX2xvYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX01NSU8pCisJCWF0YV90Zl9sb2FkX21taW8oYXAsIHRmKTsKKwllbHNlCisJCWF0YV90Zl9sb2FkX3BpbyhhcCwgdGYpOworfQorCisvKioKKyAqCWF0YV9leGVjX2NvbW1hbmRfcGlvIC0gaXNzdWUgQVRBIGNvbW1hbmQgdG8gaG9zdCBjb250cm9sbGVyCisgKglAYXA6IHBvcnQgdG8gd2hpY2ggY29tbWFuZCBpcyBiZWluZyBpc3N1ZWQKKyAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldAorICoKKyAqCUlzc3VlcyBQSU8gd3JpdGUgdG8gQVRBIGNvbW1hbmQgcmVnaXN0ZXIsIHdpdGggcHJvcGVyCisgKglzeW5jaHJvbml6YXRpb24gd2l0aCBpbnRlcnJ1cHQgaGFuZGxlciAvIG90aGVyIHRocmVhZHMuCisgKgorICoJTE9DS0lORzoKKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCisgKi8KKworc3RhdGljIHZvaWQgYXRhX2V4ZWNfY29tbWFuZF9waW8oc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJRFBSSU5USygiYXRhJXU6IGNtZCAweCVYXG4iLCBhcC0+aWQsIHRmLT5jb21tYW5kKTsKKworICAgICAgIAlvdXRiKHRmLT5jb21tYW5kLCBhcC0+aW9hZGRyLmNvbW1hbmRfYWRkcik7CisJYXRhX3BhdXNlKGFwKTsKK30KKworCisvKioKKyAqCWF0YV9leGVjX2NvbW1hbmRfbW1pbyAtIGlzc3VlIEFUQSBjb21tYW5kIHRvIGhvc3QgY29udHJvbGxlcgorICoJQGFwOiBwb3J0IHRvIHdoaWNoIGNvbW1hbmQgaXMgYmVpbmcgaXNzdWVkCisgKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKKyAqCisgKglJc3N1ZXMgTU1JTyB3cml0ZSB0byBBVEEgY29tbWFuZCByZWdpc3Rlciwgd2l0aCBwcm9wZXIKKyAqCXN5bmNocm9uaXphdGlvbiB3aXRoIGludGVycnVwdCBoYW5kbGVyIC8gb3RoZXIgdGhyZWFkcy4KKyAqCisgKglGSVhNRTogbWlzc2luZyB3cml0ZSBwb3N0aW5nIGZvciA0MDBuUyBkZWxheSBlbmZvcmNlbWVudAorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQorICovCisKK3N0YXRpYyB2b2lkIGF0YV9leGVjX2NvbW1hbmRfbW1pbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlEUFJJTlRLKCJhdGEldTogY21kIDB4JVhcbiIsIGFwLT5pZCwgdGYtPmNvbW1hbmQpOworCisgICAgICAgCXdyaXRlYih0Zi0+Y29tbWFuZCwgKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmNvbW1hbmRfYWRkcik7CisJYXRhX3BhdXNlKGFwKTsKK30KKworCisvKioKKyAqCWF0YV9leGVjX2NvbW1hbmQgLSBpc3N1ZSBBVEEgY29tbWFuZCB0byBob3N0IGNvbnRyb2xsZXIKKyAqCUBhcDogcG9ydCB0byB3aGljaCBjb21tYW5kIGlzIGJlaW5nIGlzc3VlZAorICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0CisgKgorICoJSXNzdWVzIFBJTy9NTUlPIHdyaXRlIHRvIEFUQSBjb21tYW5kIHJlZ2lzdGVyLCB3aXRoIHByb3BlcgorICoJc3luY2hyb25pemF0aW9uIHdpdGggaW50ZXJydXB0IGhhbmRsZXIgLyBvdGhlciB0aHJlYWRzLgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQorICovCit2b2lkIGF0YV9leGVjX2NvbW1hbmQoc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX01NSU8pCisJCWF0YV9leGVjX2NvbW1hbmRfbW1pbyhhcCwgdGYpOworCWVsc2UKKwkJYXRhX2V4ZWNfY29tbWFuZF9waW8oYXAsIHRmKTsKK30KKworLyoqCisgKglhdGFfdGZfcmVhZF9waW8gLSBpbnB1dCBkZXZpY2UncyBBVEEgdGFza2ZpbGUgc2hhZG93IHJlZ2lzdGVycworICoJQGFwOiBQb3J0IGZyb20gd2hpY2ggaW5wdXQgaXMgcmVhZAorICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0IGZvciBzdG9yaW5nIGlucHV0CisgKgorICoJUmVhZHMgQVRBIHRhc2tmaWxlIHJlZ2lzdGVycyBmb3IgY3VycmVudGx5LXNlbGVjdGVkIGRldmljZQorICoJaW50byBAdGYuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworCitzdGF0aWMgdm9pZCBhdGFfdGZfcmVhZF9waW8oc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKKworCXRmLT5jb21tYW5kID0gYXRhX2NoZWNrX3N0YXR1cyhhcCk7CisJdGYtPmZlYXR1cmUgPSBpbmIoaW9hZGRyLT5lcnJvcl9hZGRyKTsKKwl0Zi0+bnNlY3QgPSBpbmIoaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwl0Zi0+bGJhbCA9IGluYihpb2FkZHItPmxiYWxfYWRkcik7CisJdGYtPmxiYW0gPSBpbmIoaW9hZGRyLT5sYmFtX2FkZHIpOworCXRmLT5sYmFoID0gaW5iKGlvYWRkci0+bGJhaF9hZGRyKTsKKwl0Zi0+ZGV2aWNlID0gaW5iKGlvYWRkci0+ZGV2aWNlX2FkZHIpOworCisJaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkgeworCQlvdXRiKHRmLT5jdGwgfCBBVEFfSE9CLCBpb2FkZHItPmN0bF9hZGRyKTsKKwkJdGYtPmhvYl9mZWF0dXJlID0gaW5iKGlvYWRkci0+ZXJyb3JfYWRkcik7CisJCXRmLT5ob2JfbnNlY3QgPSBpbmIoaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwkJdGYtPmhvYl9sYmFsID0gaW5iKGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJdGYtPmhvYl9sYmFtID0gaW5iKGlvYWRkci0+bGJhbV9hZGRyKTsKKwkJdGYtPmhvYl9sYmFoID0gaW5iKGlvYWRkci0+bGJhaF9hZGRyKTsKKwl9Cit9CisKKy8qKgorICoJYXRhX3RmX3JlYWRfbW1pbyAtIGlucHV0IGRldmljZSdzIEFUQSB0YXNrZmlsZSBzaGFkb3cgcmVnaXN0ZXJzCisgKglAYXA6IFBvcnQgZnJvbSB3aGljaCBpbnB1dCBpcyByZWFkCisgKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgZm9yIHN0b3JpbmcgaW5wdXQKKyAqCisgKglSZWFkcyBBVEEgdGFza2ZpbGUgcmVnaXN0ZXJzIGZvciBjdXJyZW50bHktc2VsZWN0ZWQgZGV2aWNlCisgKglpbnRvIEB0ZiB2aWEgTU1JTy4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCisKK3N0YXRpYyB2b2lkIGF0YV90Zl9yZWFkX21taW8oc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKKworCXRmLT5jb21tYW5kID0gYXRhX2NoZWNrX3N0YXR1cyhhcCk7CisJdGYtPmZlYXR1cmUgPSByZWFkYigodm9pZCBfX2lvbWVtICopaW9hZGRyLT5lcnJvcl9hZGRyKTsKKwl0Zi0+bnNlY3QgPSByZWFkYigodm9pZCBfX2lvbWVtICopaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwl0Zi0+bGJhbCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmxiYWxfYWRkcik7CisJdGYtPmxiYW0gPSByZWFkYigodm9pZCBfX2lvbWVtICopaW9hZGRyLT5sYmFtX2FkZHIpOworCXRmLT5sYmFoID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+bGJhaF9hZGRyKTsKKwl0Zi0+ZGV2aWNlID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+ZGV2aWNlX2FkZHIpOworCisJaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkgeworCQl3cml0ZWIodGYtPmN0bCB8IEFUQV9IT0IsICh2b2lkIF9faW9tZW0gKikgYXAtPmlvYWRkci5jdGxfYWRkcik7CisJCXRmLT5ob2JfZmVhdHVyZSA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmVycm9yX2FkZHIpOworCQl0Zi0+aG9iX25zZWN0ID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+bnNlY3RfYWRkcik7CisJCXRmLT5ob2JfbGJhbCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmxiYWxfYWRkcik7CisJCXRmLT5ob2JfbGJhbSA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmxiYW1fYWRkcik7CisJCXRmLT5ob2JfbGJhaCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmxiYWhfYWRkcik7CisJfQorfQorCisKKy8qKgorICoJYXRhX3RmX3JlYWQgLSBpbnB1dCBkZXZpY2UncyBBVEEgdGFza2ZpbGUgc2hhZG93IHJlZ2lzdGVycworICoJQGFwOiBQb3J0IGZyb20gd2hpY2ggaW5wdXQgaXMgcmVhZAorICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0IGZvciBzdG9yaW5nIGlucHV0CisgKgorICoJUmVhZHMgQVRBIHRhc2tmaWxlIHJlZ2lzdGVycyBmb3IgY3VycmVudGx5LXNlbGVjdGVkIGRldmljZQorICoJaW50byBAdGYuCisgKgorICoJUmVhZHMgbnNlY3QsIGxiYWwsIGxiYW0sIGxiYWgsIGFuZCBkZXZpY2UuICBJZiBBVEFfVEZMQUdfTEJBNDgKKyAqCWlzIHNldCwgYWxzbyByZWFkcyB0aGUgaG9iIHJlZ2lzdGVycy4KKyAqCisgKglNYXkgYmUgdXNlZCBhcyB0aGUgdGZfcmVhZCgpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLwordm9pZCBhdGFfdGZfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykKKwkJYXRhX3RmX3JlYWRfbW1pbyhhcCwgdGYpOworCWVsc2UKKwkJYXRhX3RmX3JlYWRfcGlvKGFwLCB0Zik7Cit9CisKKy8qKgorICoJYXRhX2NoZWNrX3N0YXR1c19waW8gLSBSZWFkIGRldmljZSBzdGF0dXMgcmVnICYgY2xlYXIgaW50ZXJydXB0CisgKglAYXA6IHBvcnQgd2hlcmUgdGhlIGRldmljZSBpcworICoKKyAqCVJlYWRzIEFUQSB0YXNrZmlsZSBzdGF0dXMgcmVnaXN0ZXIgZm9yIGN1cnJlbnRseS1zZWxlY3RlZCBkZXZpY2UKKyAqCWFuZCByZXR1cm4gaXRzIHZhbHVlLiBUaGlzIGFsc28gY2xlYXJzIHBlbmRpbmcgaW50ZXJydXB0cworICogICAgICBmcm9tIHRoaXMgZGV2aWNlCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHU4IGF0YV9jaGVja19zdGF0dXNfcGlvKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJcmV0dXJuIGluYihhcC0+aW9hZGRyLnN0YXR1c19hZGRyKTsKK30KKworLyoqCisgKglhdGFfY2hlY2tfc3RhdHVzX21taW8gLSBSZWFkIGRldmljZSBzdGF0dXMgcmVnICYgY2xlYXIgaW50ZXJydXB0CisgKglAYXA6IHBvcnQgd2hlcmUgdGhlIGRldmljZSBpcworICoKKyAqCVJlYWRzIEFUQSB0YXNrZmlsZSBzdGF0dXMgcmVnaXN0ZXIgZm9yIGN1cnJlbnRseS1zZWxlY3RlZCBkZXZpY2UKKyAqCXZpYSBNTUlPIGFuZCByZXR1cm4gaXRzIHZhbHVlLiBUaGlzIGFsc28gY2xlYXJzIHBlbmRpbmcgaW50ZXJydXB0cworICogICAgICBmcm9tIHRoaXMgZGV2aWNlCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLworc3RhdGljIHU4IGF0YV9jaGVja19zdGF0dXNfbW1pbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworICAgICAgIAlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLnN0YXR1c19hZGRyKTsKK30KKworCisvKioKKyAqCWF0YV9jaGVja19zdGF0dXMgLSBSZWFkIGRldmljZSBzdGF0dXMgcmVnICYgY2xlYXIgaW50ZXJydXB0CisgKglAYXA6IHBvcnQgd2hlcmUgdGhlIGRldmljZSBpcworICoKKyAqCVJlYWRzIEFUQSB0YXNrZmlsZSBzdGF0dXMgcmVnaXN0ZXIgZm9yIGN1cnJlbnRseS1zZWxlY3RlZCBkZXZpY2UKKyAqCWFuZCByZXR1cm4gaXRzIHZhbHVlLiBUaGlzIGFsc28gY2xlYXJzIHBlbmRpbmcgaW50ZXJydXB0cworICogICAgICBmcm9tIHRoaXMgZGV2aWNlCisgKgorICoJTWF5IGJlIHVzZWQgYXMgdGhlIGNoZWNrX3N0YXR1cygpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCisgKgorICoJTE9DS0lORzoKKyAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KKyAqLwordTggYXRhX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKQorCQlyZXR1cm4gYXRhX2NoZWNrX3N0YXR1c19tbWlvKGFwKTsKKwlyZXR1cm4gYXRhX2NoZWNrX3N0YXR1c19waW8oYXApOworfQorCisKKy8qKgorICoJYXRhX2FsdHN0YXR1cyAtIFJlYWQgZGV2aWNlIGFsdGVybmF0ZSBzdGF0dXMgcmVnCisgKglAYXA6IHBvcnQgd2hlcmUgdGhlIGRldmljZSBpcworICoKKyAqCVJlYWRzIEFUQSB0YXNrZmlsZSBhbHRlcm5hdGUgc3RhdHVzIHJlZ2lzdGVyIGZvcgorICoJY3VycmVudGx5LXNlbGVjdGVkIGRldmljZSBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KKyAqCisgKglOb3RlOiBtYXkgTk9UIGJlIHVzZWQgYXMgdGhlIGNoZWNrX2FsdHN0YXR1cygpIGVudHJ5IGluCisgKglhdGFfcG9ydF9vcGVyYXRpb25zLgorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCisgKi8KK3U4IGF0YV9hbHRzdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlpZiAoYXAtPm9wcy0+Y2hlY2tfYWx0c3RhdHVzKQorCQlyZXR1cm4gYXAtPm9wcy0+Y2hlY2tfYWx0c3RhdHVzKGFwKTsKKworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKQorCQlyZXR1cm4gcmVhZGIoKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIpOworCXJldHVybiBpbmIoYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkcik7Cit9CisKKy8qKgorICoJYXRhX2JtZG1hX3NldHVwX21taW8gLSBTZXQgdXAgUENJIElERSBCTURNQSB0cmFuc2FjdGlvbgorICoJQHFjOiBJbmZvIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KKyAqCisgKglMT0NLSU5HOgorICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKKyAqLworCitzdGF0aWMgdm9pZCBhdGFfYm1kbWFfc2V0dXBfbW1pbyAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXVuc2lnbmVkIGludCBydyA9IChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpOworCXU4IGRtYWN0bDsKKwl2b2lkIF9faW9tZW0gKm1taW8gPSAodm9pZCBfX2lvbWVtICopIGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKKworCS8qIGxvYWQgUFJEIHRhYmxlIGFkZHIuICovCisJbWIoKTsJLyogbWFrZSBzdXJlIFBSRCB0YWJsZSB3cml0ZXMgYXJlIHZpc2libGUgdG8gY29udHJvbGxlciAqLworCXdyaXRlbChhcC0+cHJkX2RtYSwgbW1pbyArIEFUQV9ETUFfVEFCTEVfT0ZTKTsKKworCS8qIHNwZWNpZnkgZGF0YSBkaXJlY3Rpb24sIHRyaXBsZS1jaGVjayBzdGFydCBiaXQgaXMgY2xlYXIgKi8KKwlkbWFjdGwgPSByZWFkYihtbWlvICsgQVRBX0RNQV9DTUQpOworCWRtYWN0bCAmPSB+KEFUQV9ETUFfV1IgfCBBVEFfRE1BX1NUQVJUKTsKKwlpZiAoIXJ3KQorCQlkbWFjdGwgfD0gQVRBX0RNQV9XUjsKKwl3cml0ZWIoZG1hY3RsLCBtbWlvICsgQVRBX0RNQV9DTUQpOworCisJLyogaXNzdWUgci93IGNvbW1hbmQgKi8KKwlhcC0+b3BzLT5leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworfQorCisvKioKKyAqCWF0YV9ibWRtYV9zdGFydF9tbWlvIC0gU3RhcnQgYSBQQ0kgSURFIEJNRE1BIHRyYW5zYWN0aW9uCisgKglAcWM6IEluZm8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQorICovCisKK3N0YXRpYyB2b2lkIGF0YV9ibWRtYV9zdGFydF9tbWlvIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdm9pZCBfX2lvbWVtICptbWlvID0gKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7CisJdTggZG1hY3RsOworCisJLyogc3RhcnQgaG9zdCBETUEgdHJhbnNhY3Rpb24gKi8KKwlkbWFjdGwgPSByZWFkYihtbWlvICsgQVRBX0RNQV9DTUQpOworCXdyaXRlYihkbWFjdGwgfCBBVEFfRE1BX1NUQVJULCBtbWlvICsgQVRBX0RNQV9DTUQpOworCisJLyogU3RyaWN0bHksIG9uZSBtYXkgd2lzaCB0byBpc3N1ZSBhIHJlYWRiKCkgaGVyZSwgdG8KKwkgKiBmbHVzaCB0aGUgbW1pbyB3cml0ZS4gIEhvd2V2ZXIsIGNvbnRyb2wgYWxzbyBwYXNzZXMKKwkgKiB0byB0aGUgaGFyZHdhcmUgYXQgdGhpcyBwb2ludCwgYW5kIGl0IHdpbGwgaW50ZXJydXB0CisJICogdXMgd2hlbiB3ZSBhcmUgdG8gcmVzdW1lIGNvbnRyb2wuICBTbywgaW4gZWZmZWN0LAorCSAqIHdlIGRvbid0IGNhcmUgd2hlbiB0aGUgbW1pbyB3cml0ZSBmbHVzaGVzLgorCSAqIEZ1cnRoZXIsIGEgcmVhZCBvZiB0aGUgRE1BIHN0YXR1cyByZWdpc3RlciBfaW1tZWRpYXRlbHlfCisJICogZm9sbG93aW5nIHRoZSB3cml0ZSBtYXkgbm90IGJlIHdoYXQgY2VydGFpbiBmbGFreSBoYXJkd2FyZQorCSAqIGlzIGV4cGVjdGVkLCBzbyBJIHRoaW5rIGl0IGlzIGJlc3QgdG8gbm90IGFkZCBhIHJlYWRiKCkKKwkgKiB3aXRob3V0IGZpcnN0IGFsbCB0aGUgTU1JTyBBVEEgY2FyZHMvbW9ib3MuCisJICogT3IgbWF5YmUgSSdtIGp1c3QgYmVpbmcgcGFyYW5vaWQuCisJICovCit9CisKKy8qKgorICoJYXRhX2JtZG1hX3NldHVwX3BpbyAtIFNldCB1cCBQQ0kgSURFIEJNRE1BIHRyYW5zYWN0aW9uIChQSU8pCisgKglAcWM6IEluZm8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQorICovCisKK3N0YXRpYyB2b2lkIGF0YV9ibWRtYV9zZXR1cF9waW8gKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl1bnNpZ25lZCBpbnQgcncgPSAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKKwl1OCBkbWFjdGw7CisKKwkvKiBsb2FkIFBSRCB0YWJsZSBhZGRyLiAqLworCW91dGwoYXAtPnByZF9kbWEsIGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfVEFCTEVfT0ZTKTsKKworCS8qIHNwZWNpZnkgZGF0YSBkaXJlY3Rpb24sIHRyaXBsZS1jaGVjayBzdGFydCBiaXQgaXMgY2xlYXIgKi8KKwlkbWFjdGwgPSBpbmIoYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9DTUQpOworCWRtYWN0bCAmPSB+KEFUQV9ETUFfV1IgfCBBVEFfRE1BX1NUQVJUKTsKKwlpZiAoIXJ3KQorCQlkbWFjdGwgfD0gQVRBX0RNQV9XUjsKKwlvdXRiKGRtYWN0bCwgYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9DTUQpOworCisJLyogaXNzdWUgci93IGNvbW1hbmQgKi8KKwlhcC0+b3BzLT5leGVjX2NvbW1hbmQoYXAsICZxYy0+dGYpOworfQorCisvKioKKyAqCWF0YV9ibWRtYV9zdGFydF9waW8gLSBTdGFydCBhIFBDSSBJREUgQk1ETUEgdHJhbnNhY3Rpb24gKFBJTykKKyAqCUBxYzogSW5mbyBhc3NvY2lhdGVkIHdpdGggdGhpcyBBVEEgdHJhbnNhY3Rpb24uCisgKgorICoJTE9DS0lORzoKKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCisgKi8KKworc3RhdGljIHZvaWQgYXRhX2JtZG1hX3N0YXJ0X3BpbyAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXU4IGRtYWN0bDsKKworCS8qIHN0YXJ0IGhvc3QgRE1BIHRyYW5zYWN0aW9uICovCisJZG1hY3RsID0gaW5iKGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfQ01EKTsKKwlvdXRiKGRtYWN0bCB8IEFUQV9ETUFfU1RBUlQsCisJICAgICBhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX0NNRCk7Cit9CisKKworLyoqCisgKglhdGFfYm1kbWFfc3RhcnQgLSBTdGFydCBhIFBDSSBJREUgQk1ETUEgdHJhbnNhY3Rpb24KKyAqCUBxYzogSW5mbyBhc3NvY2lhdGVkIHdpdGggdGhpcyBBVEEgdHJhbnNhY3Rpb24uCisgKgorICoJV3JpdGVzIHRoZSBBVEFfRE1BX1NUQVJUIGZsYWcgdG8gdGhlIERNQSBjb21tYW5kIHJlZ2lzdGVyLgorICoKKyAqCU1heSBiZSB1c2VkIGFzIHRoZSBibWRtYV9zdGFydCgpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCisgKgorICoJTE9DS0lORzoKKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCisgKi8KK3ZvaWQgYXRhX2JtZG1hX3N0YXJ0KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKHFjLT5hcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKQorCQlhdGFfYm1kbWFfc3RhcnRfbW1pbyhxYyk7CisJZWxzZQorCQlhdGFfYm1kbWFfc3RhcnRfcGlvKHFjKTsKK30KKworCisvKioKKyAqCWF0YV9ibWRtYV9zZXR1cCAtIFNldCB1cCBQQ0kgSURFIEJNRE1BIHRyYW5zYWN0aW9uCisgKglAcWM6IEluZm8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgorICoKKyAqCVdyaXRlcyBhZGRyZXNzIG9mIFBSRCB0YWJsZSB0byBkZXZpY2UncyBQUkQgVGFibGUgQWRkcmVzcworICoJcmVnaXN0ZXIsIHNldHMgdGhlIERNQSBjb250cm9sIHJlZ2lzdGVyLCBhbmQgY2FsbHMKKyAqCW9wcy0+ZXhlY19jb21tYW5kKCkgdG8gc3RhcnQgdGhlIHRyYW5zZmVyLgorICoKKyAqCU1heSBiZSB1c2VkIGFzIHRoZSBibWRtYV9zZXR1cCgpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCisgKgorICoJTE9DS0lORzoKKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCisgKi8KK3ZvaWQgYXRhX2JtZG1hX3NldHVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKHFjLT5hcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKQorCQlhdGFfYm1kbWFfc2V0dXBfbW1pbyhxYyk7CisJZWxzZQorCQlhdGFfYm1kbWFfc2V0dXBfcGlvKHFjKTsKK30KKworCisvKioKKyAqCWF0YV9ibWRtYV9pcnFfY2xlYXIgLSBDbGVhciBQQ0kgSURFIEJNRE1BIGludGVycnVwdC4KKyAqCUBhcDogUG9ydCBhc3NvY2lhdGVkIHdpdGggdGhpcyBBVEEgdHJhbnNhY3Rpb24uCisgKgorICoJQ2xlYXIgaW50ZXJydXB0IGFuZCBlcnJvciBmbGFncyBpbiBETUEgc3RhdHVzIHJlZ2lzdGVyLgorICoKKyAqCU1heSBiZSB1c2VkIGFzIHRoZSBpcnFfY2xlYXIoKSBlbnRyeSBpbiBhdGFfcG9ydF9vcGVyYXRpb25zLgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQorICovCisKK3ZvaWQgYXRhX2JtZG1hX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWlmICghYXAtPmlvYWRkci5ibWRtYV9hZGRyKQorCQlyZXR1cm47CisKKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykgeworCQl2b2lkIF9faW9tZW0gKm1taW8gPQorCQkgICAgICAoKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmJtZG1hX2FkZHIpICsgQVRBX0RNQV9TVEFUVVM7CisJCXdyaXRlYihyZWFkYihtbWlvKSwgbW1pbyk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9TVEFUVVM7CisJCW91dGIoaW5iKGFkZHIpLCBhZGRyKTsKKwl9Cit9CisKKworLyoqCisgKglhdGFfYm1kbWFfc3RhdHVzIC0gUmVhZCBQQ0kgSURFIEJNRE1BIHN0YXR1cworICoJQGFwOiBQb3J0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KKyAqCisgKglSZWFkIGFuZCByZXR1cm4gQk1ETUEgc3RhdHVzIHJlZ2lzdGVyLgorICoKKyAqCU1heSBiZSB1c2VkIGFzIHRoZSBibWRtYV9zdGF0dXMoKSBlbnRyeSBpbiBhdGFfcG9ydF9vcGVyYXRpb25zLgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQorICovCisKK3U4IGF0YV9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwl1OCBob3N0X3N0YXQ7CisJaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX01NSU8pIHsKKwkJdm9pZCBfX2lvbWVtICptbWlvID0gKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7CisJCWhvc3Rfc3RhdCA9IHJlYWRiKG1taW8gKyBBVEFfRE1BX1NUQVRVUyk7CisJfSBlbHNlCisJCWhvc3Rfc3RhdCA9IGluYihhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX1NUQVRVUyk7CisJcmV0dXJuIGhvc3Rfc3RhdDsKK30KKworCisvKioKKyAqCWF0YV9ibWRtYV9zdG9wIC0gU3RvcCBQQ0kgSURFIEJNRE1BIHRyYW5zZmVyCisgKglAcWM6IENvbW1hbmQgd2UgYXJlIGVuZGluZyBETUEgZm9yCisgKgorICoJQ2xlYXJzIHRoZSBBVEFfRE1BX1NUQVJUIGZsYWcgaW4gdGhlIGRtYSBjb250cm9sIHJlZ2lzdGVyCisgKgorICoJTWF5IGJlIHVzZWQgYXMgdGhlIGJtZG1hX3N0b3AoKSBlbnRyeSBpbiBhdGFfcG9ydF9vcGVyYXRpb25zLgorICoKKyAqCUxPQ0tJTkc6CisgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQorICovCisKK3ZvaWQgYXRhX2JtZG1hX3N0b3Aoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKSB7CisJCXZvaWQgX19pb21lbSAqbW1pbyA9ICh2b2lkIF9faW9tZW0gKikgYXAtPmlvYWRkci5ibWRtYV9hZGRyOworCisJCS8qIGNsZWFyIHN0YXJ0L3N0b3AgYml0ICovCisJCXdyaXRlYihyZWFkYihtbWlvICsgQVRBX0RNQV9DTUQpICYgfkFUQV9ETUFfU1RBUlQsCisJCQltbWlvICsgQVRBX0RNQV9DTUQpOworCX0gZWxzZSB7CisJCS8qIGNsZWFyIHN0YXJ0L3N0b3AgYml0ICovCisJCW91dGIoaW5iKGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfQ01EKSAmIH5BVEFfRE1BX1NUQVJULAorCQkJYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9DTUQpOworCX0KKworCS8qIG9uZS1QSU8tY3ljbGUgZ3VhcmFudGVlZCB3YWl0LCBwZXIgc3BlYywgZm9yIEhETUExOjAgdHJhbnNpdGlvbiAqLworCWF0YV9hbHRzdGF0dXMoYXApOyAgICAgICAgLyogZHVtbXkgcmVhZCAqLworfQorCisjaWZkZWYgQ09ORklHX1BDSQorc3RhdGljIHN0cnVjdCBhdGFfcHJvYmVfZW50ICoKK2F0YV9wcm9iZV9lbnRfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqcHJvYmVfZW50OworCisJcHJvYmVfZW50ID0ga3phbGxvYyhzaXplb2YoKnByb2JlX2VudCksIEdGUF9LRVJORUwpOworCWlmICghcHJvYmVfZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiKCVzKTogb3V0IG9mIG1lbW9yeVxuIiwKKwkJICAgICAgIGtvYmplY3RfbmFtZSgmKGRldi0+a29iaikpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnByb2JlX2VudC0+bm9kZSk7CisJcHJvYmVfZW50LT5kZXYgPSBkZXY7CisKKwlwcm9iZV9lbnQtPnNodCA9IHBvcnQtPnNodDsKKwlwcm9iZV9lbnQtPmhvc3RfZmxhZ3MgPSBwb3J0LT5ob3N0X2ZsYWdzOworCXByb2JlX2VudC0+cGlvX21hc2sgPSBwb3J0LT5waW9fbWFzazsKKwlwcm9iZV9lbnQtPm13ZG1hX21hc2sgPSBwb3J0LT5td2RtYV9tYXNrOworCXByb2JlX2VudC0+dWRtYV9tYXNrID0gcG9ydC0+dWRtYV9tYXNrOworCXByb2JlX2VudC0+cG9ydF9vcHMgPSBwb3J0LT5wb3J0X29wczsKKworCXJldHVybiBwcm9iZV9lbnQ7Cit9CisKKworLyoqCisgKglhdGFfcGNpX2luaXRfbmF0aXZlX21vZGUgLSBJbml0aWFsaXplIG5hdGl2ZS1tb2RlIGRyaXZlcgorICoJQHBkZXY6ICBwY2kgZGV2aWNlIHRvIGJlIGluaXRpYWxpemVkCisgKglAcG9ydDogIGFycmF5WzJdIG9mIHBvaW50ZXJzIHRvIHBvcnQgaW5mbyBzdHJ1Y3R1cmVzLgorICoJQHBvcnRzOiBiaXRtYXAgb2YgcG9ydHMgcHJlc2VudAorICoKKyAqCVV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhbgorICoJYXRhX3Byb2JlX2VudCBzdHJ1Y3R1cmUgZm9yIGEgc3RhbmRhcmQgZHVhbC1wb3J0CisgKglQSU8tYmFzZWQgSURFIGNvbnRyb2xsZXIuICBUaGUgcmV0dXJuZWQgYXRhX3Byb2JlX2VudAorICoJc3RydWN0dXJlIGNhbiBiZSBwYXNzZWQgdG8gYXRhX2RldmljZV9hZGQoKS4gIFRoZSByZXR1cm5lZAorICoJYXRhX3Byb2JlX2VudCBzdHJ1Y3R1cmUgc2hvdWxkIHRoZW4gYmUgZnJlZWQgd2l0aCBrZnJlZSgpLgorICoKKyAqCVRoZSBjYWxsZXIgbmVlZCBvbmx5IHBhc3MgdGhlIGFkZHJlc3Mgb2YgdGhlIHByaW1hcnkgcG9ydCwgdGhlCisgKglzZWNvbmRhcnkgd2lsbCBiZSBkZWR1Y2VkIGF1dG9tYXRpY2FsbHkuIElmIHRoZSBkZXZpY2UgaGFzIG5vbgorICoJc3RhbmRhcmQgc2Vjb25kYXJ5IHBvcnQgbWFwcGluZ3MgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHR3aWNlLAorICoJb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UuCisgKi8KKworc3RydWN0IGF0YV9wcm9iZV9lbnQgKgorYXRhX3BjaV9pbml0X25hdGl2ZV9tb2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqKnBvcnQsIGludCBwb3J0cykKK3sKKwlzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqcHJvYmVfZW50ID0KKwkJYXRhX3Byb2JlX2VudF9hbGxvYyhwY2lfZGV2X3RvX2RldihwZGV2KSwgcG9ydFswXSk7CisJaW50IHAgPSAwOworCisJaWYgKCFwcm9iZV9lbnQpCisJCXJldHVybiBOVUxMOworCisJcHJvYmVfZW50LT5pcnEgPSBwZGV2LT5pcnE7CisJcHJvYmVfZW50LT5pcnFfZmxhZ3MgPSBTQV9TSElSUTsKKwlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IHBvcnRbMF0tPnByaXZhdGVfZGF0YTsKKworCWlmIChwb3J0cyAmIEFUQV9QT1JUX1BSSU1BUlkpIHsKKwkJcHJvYmVfZW50LT5wb3J0W3BdLmNtZF9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCQlwcm9iZV9lbnQtPnBvcnRbcF0uYWx0c3RhdHVzX2FkZHIgPQorCQlwcm9iZV9lbnQtPnBvcnRbcF0uY3RsX2FkZHIgPQorCQkJcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpIHwgQVRBX1BDSV9DVExfT0ZTOworCQlwcm9iZV9lbnQtPnBvcnRbcF0uYm1kbWFfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKKwkJYXRhX3N0ZF9wb3J0cygmcHJvYmVfZW50LT5wb3J0W3BdKTsKKwkJcCsrOworCX0KKworCWlmIChwb3J0cyAmIEFUQV9QT1JUX1NFQ09OREFSWSkgeworCQlwcm9iZV9lbnQtPnBvcnRbcF0uY21kX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7CisJCXByb2JlX2VudC0+cG9ydFtwXS5hbHRzdGF0dXNfYWRkciA9CisJCXByb2JlX2VudC0+cG9ydFtwXS5jdGxfYWRkciA9CisJCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMykgfCBBVEFfUENJX0NUTF9PRlM7CisJCXByb2JlX2VudC0+cG9ydFtwXS5ibWRtYV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpICsgODsKKwkJYXRhX3N0ZF9wb3J0cygmcHJvYmVfZW50LT5wb3J0W3BdKTsKKwkJcCsrOworCX0KKworCXByb2JlX2VudC0+bl9wb3J0cyA9IHA7CisJcmV0dXJuIHByb2JlX2VudDsKK30KKworCitzdGF0aWMgc3RydWN0IGF0YV9wcm9iZV9lbnQgKmF0YV9wY2lfaW5pdF9sZWdhY3lfcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydCwgaW50IHBvcnRfbnVtKQoreworCXN0cnVjdCBhdGFfcHJvYmVfZW50ICpwcm9iZV9lbnQ7CisKKwlwcm9iZV9lbnQgPSBhdGFfcHJvYmVfZW50X2FsbG9jKHBjaV9kZXZfdG9fZGV2KHBkZXYpLCBwb3J0KTsKKwlpZiAoIXByb2JlX2VudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcm9iZV9lbnQtPmxlZ2FjeV9tb2RlID0gMTsKKwlwcm9iZV9lbnQtPm5fcG9ydHMgPSAxOworCXByb2JlX2VudC0+aGFyZF9wb3J0X25vID0gcG9ydF9udW07CisJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBwb3J0LT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2gocG9ydF9udW0pCisJeworCQljYXNlIDA6CisJCQlwcm9iZV9lbnQtPmlycSA9IDE0OworCQkJcHJvYmVfZW50LT5wb3J0WzBdLmNtZF9hZGRyID0gMHgxZjA7CisJCQlwcm9iZV9lbnQtPnBvcnRbMF0uYWx0c3RhdHVzX2FkZHIgPQorCQkJcHJvYmVfZW50LT5wb3J0WzBdLmN0bF9hZGRyID0gMHgzZjY7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcHJvYmVfZW50LT5pcnEgPSAxNTsKKwkJCXByb2JlX2VudC0+cG9ydFswXS5jbWRfYWRkciA9IDB4MTcwOworCQkJcHJvYmVfZW50LT5wb3J0WzBdLmFsdHN0YXR1c19hZGRyID0KKwkJCXByb2JlX2VudC0+cG9ydFswXS5jdGxfYWRkciA9IDB4Mzc2OworCQkJYnJlYWs7CisJfQorCisJcHJvYmVfZW50LT5wb3J0WzBdLmJtZG1hX2FkZHIgPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCkgKyA4ICogcG9ydF9udW07CisJYXRhX3N0ZF9wb3J0cygmcHJvYmVfZW50LT5wb3J0WzBdKTsKKworCXJldHVybiBwcm9iZV9lbnQ7Cit9CisKKworLyoqCisgKglhdGFfcGNpX2luaXRfb25lIC0gSW5pdGlhbGl6ZS9yZWdpc3RlciBQQ0kgSURFIGhvc3QgY29udHJvbGxlcgorICoJQHBkZXY6IENvbnRyb2xsZXIgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqCUBwb3J0X2luZm86IEluZm9ybWF0aW9uIGZyb20gbG93LWxldmVsIGhvc3QgZHJpdmVyCisgKglAbl9wb3J0czogTnVtYmVyIG9mIHBvcnRzIGF0dGFjaGVkIHRvIGhvc3QgY29udHJvbGxlcgorICoKKyAqCVRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBmcm9tIGEgZHJpdmVyJ3MKKyAqCXh4eF9pbml0X29uZSgpIHByb2JlIGZ1bmN0aW9uIGlmIHRoZSBoYXJkd2FyZSB1c2VzIHRyYWRpdGlvbmFsCisgKglJREUgdGFza2ZpbGUgcmVnaXN0ZXJzLgorICoKKyAqCVRoaXMgZnVuY3Rpb24gY2FsbHMgcGNpX2VuYWJsZV9kZXZpY2UoKSwgcmVzZXJ2ZXMgaXRzIHJlZ2lzdGVyCisgKglyZWdpb25zLCBzZXRzIHRoZSBkbWEgbWFzaywgZW5hYmxlcyBidXMgbWFzdGVyIG1vZGUsIGFuZCBjYWxscworICoJYXRhX2RldmljZV9hZGQoKQorICoKKyAqCUxPQ0tJTkc6CisgKglJbmhlcml0ZWQgZnJvbSBQQ0kgbGF5ZXIgKG1heSBzbGVlcCkuCisgKgorICoJUkVUVVJOUzoKKyAqCVplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJybm8tYmFzZWQgdmFsdWUgb24gZXJyb3IuCisgKi8KKworaW50IGF0YV9wY2lfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqKnBvcnRfaW5mbywKKwkJICAgICAgdW5zaWduZWQgaW50IG5fcG9ydHMpCit7CisJc3RydWN0IGF0YV9wcm9iZV9lbnQgKnByb2JlX2VudCA9IE5VTEwsICpwcm9iZV9lbnQyID0gTlVMTDsKKwlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcG9ydFsyXTsKKwl1OCB0bXA4LCBtYXNrOworCXVuc2lnbmVkIGludCBsZWdhY3lfbW9kZSA9IDA7CisJaW50IGRpc2FibGVfZGV2X29uX2VyciA9IDE7CisJaW50IHJjOworCisJRFBSSU5USygiRU5URVJcbiIpOworCisJcG9ydFswXSA9IHBvcnRfaW5mb1swXTsKKwlpZiAobl9wb3J0cyA+IDEpCisJCXBvcnRbMV0gPSBwb3J0X2luZm9bMV07CisJZWxzZQorCQlwb3J0WzFdID0gcG9ydFswXTsKKworCWlmICgocG9ydFswXS0+aG9zdF9mbGFncyAmIEFUQV9GTEFHX05PX0xFR0FDWSkgPT0gMAorCSAgICAmJiAocGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKSB7CisJCS8qIFRPRE86IFdoYXQgaWYgb25lIGNoYW5uZWwgaXMgaW4gbmF0aXZlIG1vZGUgLi4uICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19QUk9HLCAmdG1wOCk7CisJCW1hc2sgPSAoMSA8PCAyKSB8ICgxIDw8IDApOworCQlpZiAoKHRtcDggJiBtYXNrKSAhPSBtYXNrKQorCQkJbGVnYWN5X21vZGUgPSAoMSA8PCAzKTsKKwl9CisKKwkvKiBGSVhNRS4uLiAqLworCWlmICgoIWxlZ2FjeV9tb2RlKSAmJiAobl9wb3J0cyA+IDIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYXRhOiBCVUc6IG5hdGl2ZSBtb2RlLCBuX3BvcnRzID4gMlxuIik7CisJCW5fcG9ydHMgPSAyOworCQkvKiBGb3Igbm93ICovCisJfQorCisJLyogRklYTUU6IFJlYWxseSBmb3IgQVRBIGl0IGlzbid0IHNhZmUgYmVjYXVzZSB0aGUgZGV2aWNlIG1heSBiZQorCSAgIG11bHRpLXB1cnBvc2UgYW5kIHdlIHdhbnQgdG8gbGVhdmUgaXQgYWxvbmUgaWYgaXQgd2FzIGFscmVhZHkKKwkgICBlbmFibGVkLiBTZWNvbmRseSBmb3Igc2hhcmVkIHVzZSBhcyBBcmphbiBzYXlzIHdlIHdhbnQgcmVmY291bnRpbmcKKworCSAgIENoZWNraW5nIGRldi0+aXNfZW5hYmxlZCBpcyBpbnN1ZmZpY2llbnQgYXMgdGhpcyBpcyBub3Qgc2V0IGF0CisJICAgYm9vdCBmb3IgdGhlIHByaW1hcnkgdmlkZW8gd2hpY2ggaXMgQklPUyBlbmFibGVkCisgICAgICAgICAqLworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CisJaWYgKHJjKSB7CisJCWRpc2FibGVfZGV2X29uX2VyciA9IDA7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKiBGSVhNRTogU2hvdWxkIHVzZSBwbGF0Zm9ybSBzcGVjaWZpYyBtYXBwZXJzIGZvciBsZWdhY3kgcG9ydCByYW5nZXMgKi8KKwlpZiAobGVnYWN5X21vZGUpIHsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbigweDFmMCwgOCwgImxpYmF0YSIpKSB7CisJCQlzdHJ1Y3QgcmVzb3VyY2UgKmNvbmZsaWN0LCByZXM7CisJCQlyZXMuc3RhcnQgPSAweDFmMDsKKwkJCXJlcy5lbmQgPSAweDFmMCArIDggLSAxOworCQkJY29uZmxpY3QgPSBfX19fcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzKTsKKwkJCWlmICghc3RyY21wKGNvbmZsaWN0LT5uYW1lLCAibGliYXRhIikpCisJCQkJbGVnYWN5X21vZGUgfD0gKDEgPDwgMCk7CisJCQllbHNlIHsKKwkJCQlkaXNhYmxlX2Rldl9vbl9lcnIgPSAwOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YTogMHgxZjAgSURFIHBvcnQgYnVzeVxuIik7CisJCQl9CisJCX0gZWxzZQorCQkJbGVnYWN5X21vZGUgfD0gKDEgPDwgMCk7CisKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbigweDE3MCwgOCwgImxpYmF0YSIpKSB7CisJCQlzdHJ1Y3QgcmVzb3VyY2UgKmNvbmZsaWN0LCByZXM7CisJCQlyZXMuc3RhcnQgPSAweDE3MDsKKwkJCXJlcy5lbmQgPSAweDE3MCArIDggLSAxOworCQkJY29uZmxpY3QgPSBfX19fcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzKTsKKwkJCWlmICghc3RyY21wKGNvbmZsaWN0LT5uYW1lLCAibGliYXRhIikpCisJCQkJbGVnYWN5X21vZGUgfD0gKDEgPDwgMSk7CisJCQllbHNlIHsKKwkJCQlkaXNhYmxlX2Rldl9vbl9lcnIgPSAwOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YTogMHgxNzAgSURFIHBvcnQgYnVzeVxuIik7CisJCQl9CisJCX0gZWxzZQorCQkJbGVnYWN5X21vZGUgfD0gKDEgPDwgMSk7CisJfQorCisJLyogd2UgaGF2ZSBsZWdhY3kgbW9kZSwgYnV0IGFsbCBwb3J0cyBhcmUgdW5hdmFpbGFibGUgKi8KKwlpZiAobGVnYWN5X21vZGUgPT0gKDEgPDwgMykpIHsKKwkJcmMgPSAtRUJVU1k7CisJCWdvdG8gZXJyX291dF9yZWdpb25zOworCX0KKworCS8qIEZJWE1FOiBJZiB3ZSBnZXQgbm8gRE1BIG1hc2sgd2Ugc2hvdWxkIGZhbGwgYmFjayB0byBQSU8gKi8KKwlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgQVRBX0RNQV9NQVNLKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX291dF9yZWdpb25zOworCXJjID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIEFUQV9ETUFfTUFTSyk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9vdXRfcmVnaW9uczsKKworCWlmIChsZWdhY3lfbW9kZSkgeworCQlpZiAobGVnYWN5X21vZGUgJiAoMSA8PCAwKSkKKwkJCXByb2JlX2VudCA9IGF0YV9wY2lfaW5pdF9sZWdhY3lfcG9ydChwZGV2LCBwb3J0WzBdLCAwKTsKKwkJaWYgKGxlZ2FjeV9tb2RlICYgKDEgPDwgMSkpCisJCQlwcm9iZV9lbnQyID0gYXRhX3BjaV9pbml0X2xlZ2FjeV9wb3J0KHBkZXYsIHBvcnRbMV0sIDEpOworCX0gZWxzZSB7CisJCWlmIChuX3BvcnRzID09IDIpCisJCQlwcm9iZV9lbnQgPSBhdGFfcGNpX2luaXRfbmF0aXZlX21vZGUocGRldiwgcG9ydCwgQVRBX1BPUlRfUFJJTUFSWSB8IEFUQV9QT1JUX1NFQ09OREFSWSk7CisJCWVsc2UKKwkJCXByb2JlX2VudCA9IGF0YV9wY2lfaW5pdF9uYXRpdmVfbW9kZShwZGV2LCBwb3J0LCBBVEFfUE9SVF9QUklNQVJZKTsKKwl9CisJaWYgKCFwcm9iZV9lbnQgJiYgIXByb2JlX2VudDIpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfcmVnaW9uczsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCS8qIEZJWE1FOiBjaGVjayBhdGFfZGV2aWNlX2FkZCByZXR1cm4gKi8KKwlpZiAobGVnYWN5X21vZGUpIHsKKwkJaWYgKGxlZ2FjeV9tb2RlICYgKDEgPDwgMCkpCisJCQlhdGFfZGV2aWNlX2FkZChwcm9iZV9lbnQpOworCQlpZiAobGVnYWN5X21vZGUgJiAoMSA8PCAxKSkKKwkJCWF0YV9kZXZpY2VfYWRkKHByb2JlX2VudDIpOworCX0gZWxzZQorCQlhdGFfZGV2aWNlX2FkZChwcm9iZV9lbnQpOworCisJa2ZyZWUocHJvYmVfZW50KTsKKwlrZnJlZShwcm9iZV9lbnQyKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3JlZ2lvbnM6CisJaWYgKGxlZ2FjeV9tb2RlICYgKDEgPDwgMCkpCisJCXJlbGVhc2VfcmVnaW9uKDB4MWYwLCA4KTsKKwlpZiAobGVnYWN5X21vZGUgJiAoMSA8PCAxKSkKKwkJcmVsZWFzZV9yZWdpb24oMHgxNzAsIDgpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfb3V0OgorCWlmIChkaXNhYmxlX2Rldl9vbl9lcnIpCisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICoJYXRhX3BjaV9jbGVhcl9zaW1wbGV4CS0JYXR0ZW1wdCB0byBraWNrIGRldmljZSBvdXQgb2Ygc2ltcGxleAorICoJQHBkZXY6IFBDSSBkZXZpY2UKKyAqCisgKglTb21lIFBDSSBBVEEgZGV2aWNlcyByZXBvcnQgc2ltcGxleCBtb2RlIGJ1dCBpbiBmYWN0IGNhbiBiZSB0b2xkIHRvCisgKgllbnRlciBub24gc2ltcGxleCBtb2RlLiBUaGlzIGltcGxlbWVudHMgdGhlIG5lY2Nlc3NhcnkgbG9naWMgdG8KKyAqCXBlcmZvcm0gdGhlIHRhc2sgb24gc3VjaCBkZXZpY2VzLiBDYWxsaW5nIGl0IG9uIG90aGVyIGRldmljZXMgd2lsbAorICoJaGF2ZSAtdW5kZWZpbmVkLSBiZWhhdmlvdXIuCisgKi8KKworaW50IGF0YV9wY2lfY2xlYXJfc2ltcGxleChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGJtZG1hID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpOworCXU4IHNpbXBsZXg7CisKKwlpZiAoYm1kbWEgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzaW1wbGV4ID0gaW5iKGJtZG1hICsgMHgwMik7CisJb3V0YihzaW1wbGV4ICYgMHg2MCwgYm1kbWEgKyAweDAyKTsKKwlzaW1wbGV4ID0gaW5iKGJtZG1hICsgMHgwMik7CisJaWYgKHNpbXBsZXggJiAweDgwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcgYXRhX3BjaV9kZWZhdWx0X2ZpbHRlcihjb25zdCBzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgbG9uZyB4ZmVyX21hc2spCit7CisJLyogRmlsdGVyIG91dCBETUEgbW9kZXMgaWYgdGhlIGRldmljZSBoYXMgYmVlbiBjb25maWd1cmVkIGJ5CisJICAgdGhlIEJJT1MgYXMgUElPIG9ubHkgKi8KKworCWlmIChhcC0+aW9hZGRyLmJtZG1hX2FkZHIgPT0gMCkKKwkJeGZlcl9tYXNrICY9IH4oQVRBX01BU0tfTVdETUEgfCBBVEFfTUFTS19VRE1BKTsKKwlyZXR1cm4geGZlcl9tYXNrOworfQorCisjZW5kaWYgLyogQ09ORklHX1BDSSAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IDdkZGQ1YTYuLmQyNzk2NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC02MSw0MjkgKzYxLDI5IEBACiAKICNpbmNsdWRlICJsaWJhdGEuaCIKIAotc3RhdGljIHVuc2lnbmVkIGludCBhdGFfYnVzeV9zbGVlcCAoc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB0bW91dF9wYXQsCi0JCQkgICAgCSAgICB1bnNpZ25lZCBsb25nIHRtb3V0KTsKLXN0YXRpYyB2b2lkIGF0YV9kZXZfcmVyZWFkX2lkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgYXRhX2Rldl9pbml0X3BhcmFtcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX2Rldl9pbml0X3BhcmFtcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGF0YV9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyB2b2lkIGF0YV9kZXZfc2V0X3hmZXJtb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOwotc3RhdGljIHVuc2lnbmVkIGludCBhdGFfZ2V0X21vZGVfbWFzayhjb25zdCBzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgc2hpZnQpOwotc3RhdGljIGludCBmZ2IodTMyIGJpdG1hcCk7Ci1zdGF0aWMgaW50IGF0YV9jaG9vc2VfeGZlcl9tb2RlKGNvbnN0IHN0cnVjdCBhdGFfcG9ydCAqYXAsCi0JCQkJdTggKnhmZXJfbW9kZV9vdXQsCi0JCQkJdW5zaWduZWQgaW50ICp4ZmVyX3NoaWZ0X291dCk7Ci1zdGF0aWMgdm9pZCBfX2F0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX2Rldl9zZXRfeGZlcm1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkJIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgYXRhX2Rldl94ZmVybWFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBhdGFfdW5pcXVlX2lkID0gMTsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYXRhX3dxOwogCi1pbnQgYXRhcGlfZW5hYmxlZCA9IDA7CitpbnQgYXRhcGlfZW5hYmxlZCA9IDE7CiBtb2R1bGVfcGFyYW0oYXRhcGlfZW5hYmxlZCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYXRhcGlfZW5hYmxlZCwgIkVuYWJsZSBkaXNjb3Zlcnkgb2YgQVRBUEkgZGV2aWNlcyAoMD1vZmYsIDE9b24pIik7CiAKK2ludCBsaWJhdGFfZnVhID0gMDsKK21vZHVsZV9wYXJhbV9uYW1lZChmdWEsIGxpYmF0YV9mdWEsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZ1YSwgIkZVQSBzdXBwb3J0ICgwPW9mZiwgMT1vbikiKTsKKwogTU9EVUxFX0FVVEhPUigiSmVmZiBHYXJ6aWsiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTGlicmFyeSBtb2R1bGUgZm9yIEFUQSBkZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKLS8qKgotICoJYXRhX3RmX2xvYWRfcGlvIC0gc2VuZCB0YXNrZmlsZSByZWdpc3RlcnMgdG8gaG9zdCBjb250cm9sbGVyCi0gKglAYXA6IFBvcnQgdG8gd2hpY2ggb3V0cHV0IGlzIHNlbnQKLSAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldAotICoKLSAqCU91dHB1dHMgQVRBIHRhc2tmaWxlIHRvIHN0YW5kYXJkIEFUQSBob3N0IGNvbnRyb2xsZXIuCi0gKgotICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KLSAqLwotCi1zdGF0aWMgdm9pZCBhdGFfdGZfbG9hZF9waW8oc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCi17Ci0Jc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKLQl1bnNpZ25lZCBpbnQgaXNfYWRkciA9IHRmLT5mbGFncyAmIEFUQV9URkxBR19JU0FERFI7Ci0KLQlpZiAodGYtPmN0bCAhPSBhcC0+bGFzdF9jdGwpIHsKLQkJb3V0Yih0Zi0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKLQkJYXAtPmxhc3RfY3RsID0gdGYtPmN0bDsKLQkJYXRhX3dhaXRfaWRsZShhcCk7Ci0JfQotCi0JaWYgKGlzX2FkZHIgJiYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkpIHsKLQkJb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKLQkJb3V0Yih0Zi0+aG9iX25zZWN0LCBpb2FkZHItPm5zZWN0X2FkZHIpOwotCQlvdXRiKHRmLT5ob2JfbGJhbCwgaW9hZGRyLT5sYmFsX2FkZHIpOwotCQlvdXRiKHRmLT5ob2JfbGJhbSwgaW9hZGRyLT5sYmFtX2FkZHIpOwotCQlvdXRiKHRmLT5ob2JfbGJhaCwgaW9hZGRyLT5sYmFoX2FkZHIpOwotCQlWUFJJTlRLKCJob2I6IGZlYXQgMHglWCBuc2VjdCAweCVYLCBsYmEgMHglWCAweCVYIDB4JVhcbiIsCi0JCQl0Zi0+aG9iX2ZlYXR1cmUsCi0JCQl0Zi0+aG9iX25zZWN0LAotCQkJdGYtPmhvYl9sYmFsLAotCQkJdGYtPmhvYl9sYmFtLAotCQkJdGYtPmhvYl9sYmFoKTsKLQl9Ci0KLQlpZiAoaXNfYWRkcikgewotCQlvdXRiKHRmLT5mZWF0dXJlLCBpb2FkZHItPmZlYXR1cmVfYWRkcik7Ci0JCW91dGIodGYtPm5zZWN0LCBpb2FkZHItPm5zZWN0X2FkZHIpOwotCQlvdXRiKHRmLT5sYmFsLCBpb2FkZHItPmxiYWxfYWRkcik7Ci0JCW91dGIodGYtPmxiYW0sIGlvYWRkci0+bGJhbV9hZGRyKTsKLQkJb3V0Yih0Zi0+bGJhaCwgaW9hZGRyLT5sYmFoX2FkZHIpOwotCQlWUFJJTlRLKCJmZWF0IDB4JVggbnNlY3QgMHglWCBsYmEgMHglWCAweCVYIDB4JVhcbiIsCi0JCQl0Zi0+ZmVhdHVyZSwKLQkJCXRmLT5uc2VjdCwKLQkJCXRmLT5sYmFsLAotCQkJdGYtPmxiYW0sCi0JCQl0Zi0+bGJhaCk7Ci0JfQotCi0JaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19ERVZJQ0UpIHsKLQkJb3V0Yih0Zi0+ZGV2aWNlLCBpb2FkZHItPmRldmljZV9hZGRyKTsKLQkJVlBSSU5USygiZGV2aWNlIDB4JVhcbiIsIHRmLT5kZXZpY2UpOwotCX0KLQotCWF0YV93YWl0X2lkbGUoYXApOwotfQotCi0vKioKLSAqCWF0YV90Zl9sb2FkX21taW8gLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVycyB0byBob3N0IGNvbnRyb2xsZXIKLSAqCUBhcDogUG9ydCB0byB3aGljaCBvdXRwdXQgaXMgc2VudAotICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0Ci0gKgotICoJT3V0cHV0cyBBVEEgdGFza2ZpbGUgdG8gc3RhbmRhcmQgQVRBIGhvc3QgY29udHJvbGxlciB1c2luZyBNTUlPLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCi0gKi8KLQotc3RhdGljIHZvaWQgYXRhX3RmX2xvYWRfbW1pbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKLXsKLQlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwotCXVuc2lnbmVkIGludCBpc19hZGRyID0gdGYtPmZsYWdzICYgQVRBX1RGTEFHX0lTQUREUjsKLQotCWlmICh0Zi0+Y3RsICE9IGFwLT5sYXN0X2N0bCkgewotCQl3cml0ZWIodGYtPmN0bCwgKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmN0bF9hZGRyKTsKLQkJYXAtPmxhc3RfY3RsID0gdGYtPmN0bDsKLQkJYXRhX3dhaXRfaWRsZShhcCk7Ci0JfQotCi0JaWYgKGlzX2FkZHIgJiYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkpIHsKLQkJd3JpdGViKHRmLT5ob2JfZmVhdHVyZSwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmZlYXR1cmVfYWRkcik7Ci0JCXdyaXRlYih0Zi0+aG9iX25zZWN0LCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bnNlY3RfYWRkcik7Ci0JCXdyaXRlYih0Zi0+aG9iX2xiYWwsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5sYmFsX2FkZHIpOwotCQl3cml0ZWIodGYtPmhvYl9sYmFtLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbV9hZGRyKTsKLQkJd3JpdGViKHRmLT5ob2JfbGJhaCwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmxiYWhfYWRkcik7Ci0JCVZQUklOVEsoImhvYjogZmVhdCAweCVYIG5zZWN0IDB4JVgsIGxiYSAweCVYIDB4JVggMHglWFxuIiwKLQkJCXRmLT5ob2JfZmVhdHVyZSwKLQkJCXRmLT5ob2JfbnNlY3QsCi0JCQl0Zi0+aG9iX2xiYWwsCi0JCQl0Zi0+aG9iX2xiYW0sCi0JCQl0Zi0+aG9iX2xiYWgpOwotCX0KLQotCWlmIChpc19hZGRyKSB7Ci0JCXdyaXRlYih0Zi0+ZmVhdHVyZSwgKHZvaWQgX19pb21lbSAqKSBpb2FkZHItPmZlYXR1cmVfYWRkcik7Ci0JCXdyaXRlYih0Zi0+bnNlY3QsICh2b2lkIF9faW9tZW0gKikgaW9hZGRyLT5uc2VjdF9hZGRyKTsKLQkJd3JpdGViKHRmLT5sYmFsLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbF9hZGRyKTsKLQkJd3JpdGViKHRmLT5sYmFtLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhbV9hZGRyKTsKLQkJd3JpdGViKHRmLT5sYmFoLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+bGJhaF9hZGRyKTsKLQkJVlBSSU5USygiZmVhdCAweCVYIG5zZWN0IDB4JVggbGJhIDB4JVggMHglWCAweCVYXG4iLAotCQkJdGYtPmZlYXR1cmUsCi0JCQl0Zi0+bnNlY3QsCi0JCQl0Zi0+bGJhbCwKLQkJCXRmLT5sYmFtLAotCQkJdGYtPmxiYWgpOwotCX0KLQotCWlmICh0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfREVWSUNFKSB7Ci0JCXdyaXRlYih0Zi0+ZGV2aWNlLCAodm9pZCBfX2lvbWVtICopIGlvYWRkci0+ZGV2aWNlX2FkZHIpOwotCQlWUFJJTlRLKCJkZXZpY2UgMHglWFxuIiwgdGYtPmRldmljZSk7Ci0JfQotCi0JYXRhX3dhaXRfaWRsZShhcCk7Ci19Ci0KLQotLyoqCi0gKglhdGFfdGZfbG9hZCAtIHNlbmQgdGFza2ZpbGUgcmVnaXN0ZXJzIHRvIGhvc3QgY29udHJvbGxlcgotICoJQGFwOiBQb3J0IHRvIHdoaWNoIG91dHB1dCBpcyBzZW50Ci0gKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKLSAqCi0gKglPdXRwdXRzIEFUQSB0YXNrZmlsZSB0byBzdGFuZGFyZCBBVEEgaG9zdCBjb250cm9sbGVyIHVzaW5nIE1NSU8KLSAqCW9yIFBJTyBhcyBpbmRpY2F0ZWQgYnkgdGhlIEFUQV9GTEFHX01NSU8gZmxhZy4KLSAqCVdyaXRlcyB0aGUgY29udHJvbCwgZmVhdHVyZSwgbnNlY3QsIGxiYWwsIGxiYW0sIGFuZCBsYmFoIHJlZ2lzdGVycy4KLSAqCU9wdGlvbmFsbHkgKEFUQV9URkxBR19MQkE0OCkgd3JpdGVzIGhvYl9mZWF0dXJlLCBob2JfbnNlY3QsCi0gKglob2JfbGJhbCwgaG9iX2xiYW0sIGFuZCBob2JfbGJhaC4KLSAqCi0gKglUaGlzIGZ1bmN0aW9uIHdhaXRzIGZvciBpZGxlICghQlVTWSBhbmQgIURSUSkgYWZ0ZXIgd3JpdGluZwotICoJcmVnaXN0ZXJzLiAgSWYgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgaGFzIGEgbmV3IHZhbHVlLCB0aGlzCi0gKglmdW5jdGlvbiBhbHNvIHdhaXRzIGZvciBpZGxlIGFmdGVyIHdyaXRpbmcgY29udHJvbCBhbmQgYmVmb3JlCi0gKgl3cml0aW5nIHRoZSByZW1haW5pbmcgcmVnaXN0ZXJzLgotICoKLSAqCU1heSBiZSB1c2VkIGFzIHRoZSB0Zl9sb2FkKCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCi12b2lkIGF0YV90Zl9sb2FkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKQotCQlhdGFfdGZfbG9hZF9tbWlvKGFwLCB0Zik7Ci0JZWxzZQotCQlhdGFfdGZfbG9hZF9waW8oYXAsIHRmKTsKLX0KLQotLyoqCi0gKglhdGFfZXhlY19jb21tYW5kX3BpbyAtIGlzc3VlIEFUQSBjb21tYW5kIHRvIGhvc3QgY29udHJvbGxlcgotICoJQGFwOiBwb3J0IHRvIHdoaWNoIGNvbW1hbmQgaXMgYmVpbmcgaXNzdWVkCi0gKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKLSAqCi0gKglJc3N1ZXMgUElPIHdyaXRlIHRvIEFUQSBjb21tYW5kIHJlZ2lzdGVyLCB3aXRoIHByb3BlcgotICoJc3luY2hyb25pemF0aW9uIHdpdGggaW50ZXJydXB0IGhhbmRsZXIgLyBvdGhlciB0aHJlYWRzLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQotICovCi0KLXN0YXRpYyB2b2lkIGF0YV9leGVjX2NvbW1hbmRfcGlvKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCURQUklOVEsoImF0YSV1OiBjbWQgMHglWFxuIiwgYXAtPmlkLCB0Zi0+Y29tbWFuZCk7Ci0KLSAgICAgICAJb3V0Yih0Zi0+Y29tbWFuZCwgYXAtPmlvYWRkci5jb21tYW5kX2FkZHIpOwotCWF0YV9wYXVzZShhcCk7Ci19Ci0KLQotLyoqCi0gKglhdGFfZXhlY19jb21tYW5kX21taW8gLSBpc3N1ZSBBVEEgY29tbWFuZCB0byBob3N0IGNvbnRyb2xsZXIKLSAqCUBhcDogcG9ydCB0byB3aGljaCBjb21tYW5kIGlzIGJlaW5nIGlzc3VlZAotICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0Ci0gKgotICoJSXNzdWVzIE1NSU8gd3JpdGUgdG8gQVRBIGNvbW1hbmQgcmVnaXN0ZXIsIHdpdGggcHJvcGVyCi0gKglzeW5jaHJvbml6YXRpb24gd2l0aCBpbnRlcnJ1cHQgaGFuZGxlciAvIG90aGVyIHRocmVhZHMuCi0gKgotICoJTE9DS0lORzoKLSAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCi0gKi8KLQotc3RhdGljIHZvaWQgYXRhX2V4ZWNfY29tbWFuZF9tbWlvKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCURQUklOVEsoImF0YSV1OiBjbWQgMHglWFxuIiwgYXAtPmlkLCB0Zi0+Y29tbWFuZCk7Ci0KLSAgICAgICAJd3JpdGViKHRmLT5jb21tYW5kLCAodm9pZCBfX2lvbWVtICopIGFwLT5pb2FkZHIuY29tbWFuZF9hZGRyKTsKLQlhdGFfcGF1c2UoYXApOwotfQotCi0KLS8qKgotICoJYXRhX2V4ZWNfY29tbWFuZCAtIGlzc3VlIEFUQSBjb21tYW5kIHRvIGhvc3QgY29udHJvbGxlcgotICoJQGFwOiBwb3J0IHRvIHdoaWNoIGNvbW1hbmQgaXMgYmVpbmcgaXNzdWVkCi0gKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKLSAqCi0gKglJc3N1ZXMgUElPL01NSU8gd3JpdGUgdG8gQVRBIGNvbW1hbmQgcmVnaXN0ZXIsIHdpdGggcHJvcGVyCi0gKglzeW5jaHJvbml6YXRpb24gd2l0aCBpbnRlcnJ1cHQgaGFuZGxlciAvIG90aGVyIHRocmVhZHMuCi0gKgotICoJTE9DS0lORzoKLSAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCi0gKi8KLXZvaWQgYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKLXsKLQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykKLQkJYXRhX2V4ZWNfY29tbWFuZF9tbWlvKGFwLCB0Zik7Ci0JZWxzZQotCQlhdGFfZXhlY19jb21tYW5kX3BpbyhhcCwgdGYpOwotfQotCi0vKioKLSAqCWF0YV90Zl90b19ob3N0IC0gaXNzdWUgQVRBIHRhc2tmaWxlIHRvIGhvc3QgY29udHJvbGxlcgotICoJQGFwOiBwb3J0IHRvIHdoaWNoIGNvbW1hbmQgaXMgYmVpbmcgaXNzdWVkCi0gKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQKLSAqCi0gKglJc3N1ZXMgQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldCB0byBBVEEgaG9zdCBjb250cm9sbGVyLAotICoJd2l0aCBwcm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGggaW50ZXJydXB0IGhhbmRsZXIgYW5kCi0gKglvdGhlciB0aHJlYWRzLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGFfdGZfdG9faG9zdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCSAgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCi17Ci0JYXAtPm9wcy0+dGZfbG9hZChhcCwgdGYpOwotCWFwLT5vcHMtPmV4ZWNfY29tbWFuZChhcCwgdGYpOwotfQotCi0vKioKLSAqCWF0YV90Zl9yZWFkX3BpbyAtIGlucHV0IGRldmljZSdzIEFUQSB0YXNrZmlsZSBzaGFkb3cgcmVnaXN0ZXJzCi0gKglAYXA6IFBvcnQgZnJvbSB3aGljaCBpbnB1dCBpcyByZWFkCi0gKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgZm9yIHN0b3JpbmcgaW5wdXQKLSAqCi0gKglSZWFkcyBBVEEgdGFza2ZpbGUgcmVnaXN0ZXJzIGZvciBjdXJyZW50bHktc2VsZWN0ZWQgZGV2aWNlCi0gKglpbnRvIEB0Zi4KLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCi0KLXN0YXRpYyB2b2lkIGF0YV90Zl9yZWFkX3BpbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKLXsKLQlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwotCi0JdGYtPmNvbW1hbmQgPSBhdGFfY2hlY2tfc3RhdHVzKGFwKTsKLQl0Zi0+ZmVhdHVyZSA9IGluYihpb2FkZHItPmVycm9yX2FkZHIpOwotCXRmLT5uc2VjdCA9IGluYihpb2FkZHItPm5zZWN0X2FkZHIpOwotCXRmLT5sYmFsID0gaW5iKGlvYWRkci0+bGJhbF9hZGRyKTsKLQl0Zi0+bGJhbSA9IGluYihpb2FkZHItPmxiYW1fYWRkcik7Ci0JdGYtPmxiYWggPSBpbmIoaW9hZGRyLT5sYmFoX2FkZHIpOwotCXRmLT5kZXZpY2UgPSBpbmIoaW9hZGRyLT5kZXZpY2VfYWRkcik7Ci0KLQlpZiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0xCQTQ4KSB7Ci0JCW91dGIodGYtPmN0bCB8IEFUQV9IT0IsIGlvYWRkci0+Y3RsX2FkZHIpOwotCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpbmIoaW9hZGRyLT5lcnJvcl9hZGRyKTsKLQkJdGYtPmhvYl9uc2VjdCA9IGluYihpb2FkZHItPm5zZWN0X2FkZHIpOwotCQl0Zi0+aG9iX2xiYWwgPSBpbmIoaW9hZGRyLT5sYmFsX2FkZHIpOwotCQl0Zi0+aG9iX2xiYW0gPSBpbmIoaW9hZGRyLT5sYmFtX2FkZHIpOwotCQl0Zi0+aG9iX2xiYWggPSBpbmIoaW9hZGRyLT5sYmFoX2FkZHIpOwotCX0KLX0KLQotLyoqCi0gKglhdGFfdGZfcmVhZF9tbWlvIC0gaW5wdXQgZGV2aWNlJ3MgQVRBIHRhc2tmaWxlIHNoYWRvdyByZWdpc3RlcnMKLSAqCUBhcDogUG9ydCBmcm9tIHdoaWNoIGlucHV0IGlzIHJlYWQKLSAqCUB0ZjogQVRBIHRhc2tmaWxlIHJlZ2lzdGVyIHNldCBmb3Igc3RvcmluZyBpbnB1dAotICoKLSAqCVJlYWRzIEFUQSB0YXNrZmlsZSByZWdpc3RlcnMgZm9yIGN1cnJlbnRseS1zZWxlY3RlZCBkZXZpY2UKLSAqCWludG8gQHRmIHZpYSBNTUlPLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglJbmhlcml0ZWQgZnJvbSBjYWxsZXIuCi0gKi8KLQotc3RhdGljIHZvaWQgYXRhX3RmX3JlYWRfbW1pbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKLXsKLQlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOwotCi0JdGYtPmNvbW1hbmQgPSBhdGFfY2hlY2tfc3RhdHVzKGFwKTsKLQl0Zi0+ZmVhdHVyZSA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmVycm9yX2FkZHIpOwotCXRmLT5uc2VjdCA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilpb2FkZHItPm5zZWN0X2FkZHIpOwotCXRmLT5sYmFsID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+bGJhbF9hZGRyKTsKLQl0Zi0+bGJhbSA9IHJlYWRiKCh2b2lkIF9faW9tZW0gKilpb2FkZHItPmxiYW1fYWRkcik7Ci0JdGYtPmxiYWggPSByZWFkYigodm9pZCBfX2lvbWVtICopaW9hZGRyLT5sYmFoX2FkZHIpOwotCXRmLT5kZXZpY2UgPSByZWFkYigodm9pZCBfX2lvbWVtICopaW9hZGRyLT5kZXZpY2VfYWRkcik7Ci0KLQlpZiAodGYtPmZsYWdzICYgQVRBX1RGTEFHX0xCQTQ4KSB7Ci0JCXdyaXRlYih0Zi0+Y3RsIHwgQVRBX0hPQiwgKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmN0bF9hZGRyKTsKLQkJdGYtPmhvYl9mZWF0dXJlID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+ZXJyb3JfYWRkcik7Ci0JCXRmLT5ob2JfbnNlY3QgPSByZWFkYigodm9pZCBfX2lvbWVtICopaW9hZGRyLT5uc2VjdF9hZGRyKTsKLQkJdGYtPmhvYl9sYmFsID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+bGJhbF9hZGRyKTsKLQkJdGYtPmhvYl9sYmFtID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+bGJhbV9hZGRyKTsKLQkJdGYtPmhvYl9sYmFoID0gcmVhZGIoKHZvaWQgX19pb21lbSAqKWlvYWRkci0+bGJhaF9hZGRyKTsKLQl9Ci19Ci0KLQotLyoqCi0gKglhdGFfdGZfcmVhZCAtIGlucHV0IGRldmljZSdzIEFUQSB0YXNrZmlsZSBzaGFkb3cgcmVnaXN0ZXJzCi0gKglAYXA6IFBvcnQgZnJvbSB3aGljaCBpbnB1dCBpcyByZWFkCi0gKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgZm9yIHN0b3JpbmcgaW5wdXQKLSAqCi0gKglSZWFkcyBBVEEgdGFza2ZpbGUgcmVnaXN0ZXJzIGZvciBjdXJyZW50bHktc2VsZWN0ZWQgZGV2aWNlCi0gKglpbnRvIEB0Zi4KLSAqCi0gKglSZWFkcyBuc2VjdCwgbGJhbCwgbGJhbSwgbGJhaCwgYW5kIGRldmljZS4gIElmIEFUQV9URkxBR19MQkE0OAotICoJaXMgc2V0LCBhbHNvIHJlYWRzIHRoZSBob2IgcmVnaXN0ZXJzLgotICoKLSAqCU1heSBiZSB1c2VkIGFzIHRoZSB0Zl9yZWFkKCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCi12b2lkIGF0YV90Zl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKQotCQlhdGFfdGZfcmVhZF9tbWlvKGFwLCB0Zik7Ci0JZWxzZQotCQlhdGFfdGZfcmVhZF9waW8oYXAsIHRmKTsKLX0KLQotLyoqCi0gKglhdGFfY2hlY2tfc3RhdHVzX3BpbyAtIFJlYWQgZGV2aWNlIHN0YXR1cyByZWcgJiBjbGVhciBpbnRlcnJ1cHQKLSAqCUBhcDogcG9ydCB3aGVyZSB0aGUgZGV2aWNlIGlzCi0gKgotICoJUmVhZHMgQVRBIHRhc2tmaWxlIHN0YXR1cyByZWdpc3RlciBmb3IgY3VycmVudGx5LXNlbGVjdGVkIGRldmljZQotICoJYW5kIHJldHVybiBpdHMgdmFsdWUuIFRoaXMgYWxzbyBjbGVhcnMgcGVuZGluZyBpbnRlcnJ1cHRzCi0gKiAgICAgIGZyb20gdGhpcyBkZXZpY2UKLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCi1zdGF0aWMgdTggYXRhX2NoZWNrX3N0YXR1c19waW8oc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlyZXR1cm4gaW5iKGFwLT5pb2FkZHIuc3RhdHVzX2FkZHIpOwotfQotCi0vKioKLSAqCWF0YV9jaGVja19zdGF0dXNfbW1pbyAtIFJlYWQgZGV2aWNlIHN0YXR1cyByZWcgJiBjbGVhciBpbnRlcnJ1cHQKLSAqCUBhcDogcG9ydCB3aGVyZSB0aGUgZGV2aWNlIGlzCi0gKgotICoJUmVhZHMgQVRBIHRhc2tmaWxlIHN0YXR1cyByZWdpc3RlciBmb3IgY3VycmVudGx5LXNlbGVjdGVkIGRldmljZQotICoJdmlhIE1NSU8gYW5kIHJldHVybiBpdHMgdmFsdWUuIFRoaXMgYWxzbyBjbGVhcnMgcGVuZGluZyBpbnRlcnJ1cHRzCi0gKiAgICAgIGZyb20gdGhpcyBkZXZpY2UKLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCi1zdGF0aWMgdTggYXRhX2NoZWNrX3N0YXR1c19tbWlvKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0gICAgICAgCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopIGFwLT5pb2FkZHIuc3RhdHVzX2FkZHIpOwotfQotCi0KLS8qKgotICoJYXRhX2NoZWNrX3N0YXR1cyAtIFJlYWQgZGV2aWNlIHN0YXR1cyByZWcgJiBjbGVhciBpbnRlcnJ1cHQKLSAqCUBhcDogcG9ydCB3aGVyZSB0aGUgZGV2aWNlIGlzCi0gKgotICoJUmVhZHMgQVRBIHRhc2tmaWxlIHN0YXR1cyByZWdpc3RlciBmb3IgY3VycmVudGx5LXNlbGVjdGVkIGRldmljZQotICoJYW5kIHJldHVybiBpdHMgdmFsdWUuIFRoaXMgYWxzbyBjbGVhcnMgcGVuZGluZyBpbnRlcnJ1cHRzCi0gKiAgICAgIGZyb20gdGhpcyBkZXZpY2UKLSAqCi0gKglNYXkgYmUgdXNlZCBhcyB0aGUgY2hlY2tfc3RhdHVzKCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCi11OCBhdGFfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX01NSU8pCi0JCXJldHVybiBhdGFfY2hlY2tfc3RhdHVzX21taW8oYXApOwotCXJldHVybiBhdGFfY2hlY2tfc3RhdHVzX3BpbyhhcCk7Ci19Ci0KLQotLyoqCi0gKglhdGFfYWx0c3RhdHVzIC0gUmVhZCBkZXZpY2UgYWx0ZXJuYXRlIHN0YXR1cyByZWcKLSAqCUBhcDogcG9ydCB3aGVyZSB0aGUgZGV2aWNlIGlzCi0gKgotICoJUmVhZHMgQVRBIHRhc2tmaWxlIGFsdGVybmF0ZSBzdGF0dXMgcmVnaXN0ZXIgZm9yCi0gKgljdXJyZW50bHktc2VsZWN0ZWQgZGV2aWNlIGFuZCByZXR1cm4gaXRzIHZhbHVlLgotICoKLSAqCU5vdGU6IG1heSBOT1QgYmUgdXNlZCBhcyB0aGUgY2hlY2tfYWx0c3RhdHVzKCkgZW50cnkgaW4KLSAqCWF0YV9wb3J0X29wZXJhdGlvbnMuCi0gKgotICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KLSAqLwotdTggYXRhX2FsdHN0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCWlmIChhcC0+b3BzLT5jaGVja19hbHRzdGF0dXMpCi0JCXJldHVybiBhcC0+b3BzLT5jaGVja19hbHRzdGF0dXMoYXApOwotCi0JaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX01NSU8pCi0JCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkcik7Ci0JcmV0dXJuIGluYihhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyKTsKLX0KLQogCiAvKioKICAqCWF0YV90Zl90b19maXMgLSBDb252ZXJ0IEFUQSB0YXNrZmlsZSB0byBTQVRBIEZJUyBzdHJ1Y3R1cmUKQEAgLTU5MCw3ICsxOTAsNyBAQAogICoJYXRhX3J3Y21kX3Byb3RvY29sIC0gc2V0IHRhc2tmaWxlIHIvdyBjb21tYW5kcyBhbmQgcHJvdG9jb2wKICAqCUBxYzogY29tbWFuZCB0byBleGFtaW5lIGFuZCBjb25maWd1cmUKICAqCi0gKglFeGFtaW5lIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgdGYtPmZsYWdzIHRvIGNhbGN1bGF0ZSAKKyAqCUV4YW1pbmUgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIGFuZCB0Zi0+ZmxhZ3MgdG8gY2FsY3VsYXRlCiAgKgl0aGUgcHJvcGVyIHJlYWQvd3JpdGUgY29tbWFuZHMgYW5kIHByb3RvY29sIHRvIHVzZS4KICAqCiAgKglMT0NLSU5HOgpAQCAtNjAzLDcgKzIwMyw3IEBACiAJdTggY21kOwogCiAJaW50IGluZGV4LCBmdWEsIGxiYTQ4LCB3cml0ZTsKLSAKKwogCWZ1YSA9ICh0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfRlVBKSA/IDQgOiAwOwogCWxiYTQ4ID0gKHRmLT5mbGFncyAmIEFUQV9URkxBR19MQkE0OCkgPyAyIDogMDsKIAl3cml0ZSA9ICh0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpID8gMSA6IDA7CkBAIC02MjgsNTggKzIyOCwxODAgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgeGZlcl9tb2RlX3N0cltdID0gewotCSJVRE1BLzE2IiwKLQkiVURNQS8yNSIsCi0JIlVETUEvMzMiLAotCSJVRE1BLzQ0IiwKLQkiVURNQS82NiIsCi0JIlVETUEvMTAwIiwKLQkiVURNQS8xMzMiLAotCSJVRE1BNyIsCi0JIk1XRE1BMCIsCi0JIk1XRE1BMSIsCi0JIk1XRE1BMiIsCi0JIlBJTzAiLAotCSJQSU8xIiwKLQkiUElPMiIsCi0JIlBJTzMiLAotCSJQSU80IiwKKy8qKgorICoJYXRhX3BhY2tfeGZlcm1hc2sgLSBQYWNrIHBpbywgbXdkbWEgYW5kIHVkbWEgbWFza3MgaW50byB4ZmVyX21hc2sKKyAqCUBwaW9fbWFzazogcGlvX21hc2sKKyAqCUBtd2RtYV9tYXNrOiBtd2RtYV9tYXNrCisgKglAdWRtYV9tYXNrOiB1ZG1hX21hc2sKKyAqCisgKglQYWNrIEBwaW9fbWFzaywgQG13ZG1hX21hc2sgYW5kIEB1ZG1hX21hc2sgaW50byBhIHNpbmdsZQorICoJdW5zaWduZWQgaW50IHhmZXJfbWFzay4KKyAqCisgKglMT0NLSU5HOgorICoJTm9uZS4KKyAqCisgKglSRVRVUk5TOgorICoJUGFja2VkIHhmZXJfbWFzay4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBhdGFfcGFja194ZmVybWFzayh1bnNpZ25lZCBpbnQgcGlvX21hc2ssCisJCQkJICAgICAgdW5zaWduZWQgaW50IG13ZG1hX21hc2ssCisJCQkJICAgICAgdW5zaWduZWQgaW50IHVkbWFfbWFzaykKK3sKKwlyZXR1cm4gKChwaW9fbWFzayA8PCBBVEFfU0hJRlRfUElPKSAmIEFUQV9NQVNLX1BJTykgfAorCQkoKG13ZG1hX21hc2sgPDwgQVRBX1NISUZUX01XRE1BKSAmIEFUQV9NQVNLX01XRE1BKSB8CisJCSgodWRtYV9tYXNrIDw8IEFUQV9TSElGVF9VRE1BKSAmIEFUQV9NQVNLX1VETUEpOworfQorCisvKioKKyAqCWF0YV91bnBhY2tfeGZlcm1hc2sgLSBVbnBhY2sgeGZlcl9tYXNrIGludG8gcGlvLCBtd2RtYSBhbmQgdWRtYSBtYXNrcworICoJQHhmZXJfbWFzazogeGZlcl9tYXNrIHRvIHVucGFjaworICoJQHBpb19tYXNrOiByZXN1bHRpbmcgcGlvX21hc2sKKyAqCUBtd2RtYV9tYXNrOiByZXN1bHRpbmcgbXdkbWFfbWFzaworICoJQHVkbWFfbWFzazogcmVzdWx0aW5nIHVkbWFfbWFzaworICoKKyAqCVVucGFjayBAeGZlcl9tYXNrIGludG8gQHBpb19tYXNrLCBAbXdkbWFfbWFzayBhbmQgQHVkbWFfbWFzay4KKyAqCUFueSBOVUxMIGRpc3RpbmF0aW9uIG1hc2tzIHdpbGwgYmUgaWdub3JlZC4KKyAqLworc3RhdGljIHZvaWQgYXRhX3VucGFja194ZmVybWFzayh1bnNpZ25lZCBpbnQgeGZlcl9tYXNrLAorCQkJCXVuc2lnbmVkIGludCAqcGlvX21hc2ssCisJCQkJdW5zaWduZWQgaW50ICptd2RtYV9tYXNrLAorCQkJCXVuc2lnbmVkIGludCAqdWRtYV9tYXNrKQoreworCWlmIChwaW9fbWFzaykKKwkJKnBpb19tYXNrID0gKHhmZXJfbWFzayAmIEFUQV9NQVNLX1BJTykgPj4gQVRBX1NISUZUX1BJTzsKKwlpZiAobXdkbWFfbWFzaykKKwkJKm13ZG1hX21hc2sgPSAoeGZlcl9tYXNrICYgQVRBX01BU0tfTVdETUEpID4+IEFUQV9TSElGVF9NV0RNQTsKKwlpZiAodWRtYV9tYXNrKQorCQkqdWRtYV9tYXNrID0gKHhmZXJfbWFzayAmIEFUQV9NQVNLX1VETUEpID4+IEFUQV9TSElGVF9VRE1BOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV94ZmVyX2VudCB7CisJdW5zaWduZWQgaW50IHNoaWZ0LCBiaXRzOworCXU4IGJhc2U7Cit9IGF0YV94ZmVyX3RibFtdID0geworCXsgQVRBX1NISUZUX1BJTywgQVRBX0JJVFNfUElPLCBYRkVSX1BJT18wIH0sCisJeyBBVEFfU0hJRlRfTVdETUEsIEFUQV9CSVRTX01XRE1BLCBYRkVSX01XX0RNQV8wIH0sCisJeyBBVEFfU0hJRlRfVURNQSwgQVRBX0JJVFNfVURNQSwgWEZFUl9VRE1BXzAgfSwKKwl7IC0xLCB9LAogfTsKIAogLyoqCi0gKglhdGFfdWRtYV9zdHJpbmcgLSBjb252ZXJ0IFVETUEgYml0IG9mZnNldCB0byBzdHJpbmcKLSAqCUBtYXNrOiBtYXNrIG9mIGJpdHMgc3VwcG9ydGVkOyBvbmx5IGhpZ2hlc3QgYml0IGNvdW50cy4KKyAqCWF0YV94ZmVyX21hc2sybW9kZSAtIEZpbmQgbWF0Y2hpbmcgWEZFUl8qIGZvciB0aGUgZ2l2ZW4geGZlcl9tYXNrCisgKglAeGZlcl9tYXNrOiB4ZmVyX21hc2sgb2YgaW50ZXJlc3QKKyAqCisgKglSZXR1cm4gbWF0Y2hpbmcgWEZFUl8qIHZhbHVlIGZvciBAeGZlcl9tYXNrLiAgT25seSB0aGUgaGlnaGVzdAorICoJYml0IG9mIEB4ZmVyX21hc2sgaXMgY29uc2lkZXJlZC4KKyAqCisgKglMT0NLSU5HOgorICoJTm9uZS4KKyAqCisgKglSRVRVUk5TOgorICoJTWF0Y2hpbmcgWEZFUl8qIHZhbHVlLCAwIGlmIG5vIG1hdGNoIGZvdW5kLgorICovCitzdGF0aWMgdTggYXRhX3hmZXJfbWFzazJtb2RlKHVuc2lnbmVkIGludCB4ZmVyX21hc2spCit7CisJaW50IGhpZ2hiaXQgPSBmbHMoeGZlcl9tYXNrKSAtIDE7CisJY29uc3Qgc3RydWN0IGF0YV94ZmVyX2VudCAqZW50OworCisJZm9yIChlbnQgPSBhdGFfeGZlcl90Ymw7IGVudC0+c2hpZnQgPj0gMDsgZW50KyspCisJCWlmIChoaWdoYml0ID49IGVudC0+c2hpZnQgJiYgaGlnaGJpdCA8IGVudC0+c2hpZnQgKyBlbnQtPmJpdHMpCisJCQlyZXR1cm4gZW50LT5iYXNlICsgaGlnaGJpdCAtIGVudC0+c2hpZnQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJYXRhX3hmZXJfbW9kZTJtYXNrIC0gRmluZCBtYXRjaGluZyB4ZmVyX21hc2sgZm9yIFhGRVJfKgorICoJQHhmZXJfbW9kZTogWEZFUl8qIG9mIGludGVyZXN0CisgKgorICoJUmV0dXJuIG1hdGNoaW5nIHhmZXJfbWFzayBmb3IgQHhmZXJfbW9kZS4KKyAqCisgKglMT0NLSU5HOgorICoJTm9uZS4KKyAqCisgKglSRVRVUk5TOgorICoJTWF0Y2hpbmcgeGZlcl9tYXNrLCAwIGlmIG5vIG1hdGNoIGZvdW5kLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0YV94ZmVyX21vZGUybWFzayh1OCB4ZmVyX21vZGUpCit7CisJY29uc3Qgc3RydWN0IGF0YV94ZmVyX2VudCAqZW50OworCisJZm9yIChlbnQgPSBhdGFfeGZlcl90Ymw7IGVudC0+c2hpZnQgPj0gMDsgZW50KyspCisJCWlmICh4ZmVyX21vZGUgPj0gZW50LT5iYXNlICYmIHhmZXJfbW9kZSA8IGVudC0+YmFzZSArIGVudC0+Yml0cykKKwkJCXJldHVybiAxIDw8IChlbnQtPnNoaWZ0ICsgeGZlcl9tb2RlIC0gZW50LT5iYXNlKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglhdGFfeGZlcl9tb2RlMnNoaWZ0IC0gRmluZCBtYXRjaGluZyB4ZmVyX3NoaWZ0IGZvciBYRkVSXyoKKyAqCUB4ZmVyX21vZGU6IFhGRVJfKiBvZiBpbnRlcmVzdAorICoKKyAqCVJldHVybiBtYXRjaGluZyB4ZmVyX3NoaWZ0IGZvciBAeGZlcl9tb2RlLgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lLgorICoKKyAqCVJFVFVSTlM6CisgKglNYXRjaGluZyB4ZmVyX3NoaWZ0LCAtMSBpZiBubyBtYXRjaCBmb3VuZC4KKyAqLworc3RhdGljIGludCBhdGFfeGZlcl9tb2RlMnNoaWZ0KHVuc2lnbmVkIGludCB4ZmVyX21vZGUpCit7CisJY29uc3Qgc3RydWN0IGF0YV94ZmVyX2VudCAqZW50OworCisJZm9yIChlbnQgPSBhdGFfeGZlcl90Ymw7IGVudC0+c2hpZnQgPj0gMDsgZW50KyspCisJCWlmICh4ZmVyX21vZGUgPj0gZW50LT5iYXNlICYmIHhmZXJfbW9kZSA8IGVudC0+YmFzZSArIGVudC0+Yml0cykKKwkJCXJldHVybiBlbnQtPnNoaWZ0OworCXJldHVybiAtMTsKK30KKworLyoqCisgKglhdGFfbW9kZV9zdHJpbmcgLSBjb252ZXJ0IHhmZXJfbWFzayB0byBzdHJpbmcKKyAqCUB4ZmVyX21hc2s6IG1hc2sgb2YgYml0cyBzdXBwb3J0ZWQ7IG9ubHkgaGlnaGVzdCBiaXQgY291bnRzLgogICoKICAqCURldGVybWluZSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyB0aGUgaGlnaGVzdCBzcGVlZAotICoJKGhpZ2hlc3QgYml0IGluIEB1ZG1hX21hc2spLgorICoJKGhpZ2hlc3QgYml0IGluIEBtb2RlbWFzaykuCiAgKgogICoJTE9DS0lORzoKICAqCU5vbmUuCiAgKgogICoJUkVUVVJOUzoKICAqCUNvbnN0YW50IEMgc3RyaW5nIHJlcHJlc2VudGluZyBoaWdoZXN0IHNwZWVkIGxpc3RlZCBpbgotICoJQHVkbWFfbWFzaywgb3IgdGhlIGNvbnN0YW50IEMgc3RyaW5nICI8bi9hPiIuCisgKglAbW9kZV9tYXNrLCBvciB0aGUgY29uc3RhbnQgQyBzdHJpbmcgIjxuL2E+Ii4KICAqLwotCi1zdGF0aWMgY29uc3QgY2hhciAqYXRhX21vZGVfc3RyaW5nKHVuc2lnbmVkIGludCBtYXNrKQorc3RhdGljIGNvbnN0IGNoYXIgKmF0YV9tb2RlX3N0cmluZyh1bnNpZ25lZCBpbnQgeGZlcl9tYXNrKQogewotCWludCBpOworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgeGZlcl9tb2RlX3N0cltdID0geworCQkiUElPMCIsCisJCSJQSU8xIiwKKwkJIlBJTzIiLAorCQkiUElPMyIsCisJCSJQSU80IiwKKwkJIk1XRE1BMCIsCisJCSJNV0RNQTEiLAorCQkiTVdETUEyIiwKKwkJIlVETUEvMTYiLAorCQkiVURNQS8yNSIsCisJCSJVRE1BLzMzIiwKKwkJIlVETUEvNDQiLAorCQkiVURNQS82NiIsCisJCSJVRE1BLzEwMCIsCisJCSJVRE1BLzEzMyIsCisJCSJVRE1BNyIsCisJfTsKKwlpbnQgaGlnaGJpdDsKIAotCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKQotCQlpZiAobWFzayAmICgxIDw8IGkpKQotCQkJZ290byBvdXQ7Ci0JZm9yIChpID0gQVRBX1NISUZUX01XRE1BICsgMjsgaSA+PSBBVEFfU0hJRlRfTVdETUE7IGktLSkKLQkJaWYgKG1hc2sgJiAoMSA8PCBpKSkKLQkJCWdvdG8gb3V0OwotCWZvciAoaSA9IEFUQV9TSElGVF9QSU8gKyA0OyBpID49IEFUQV9TSElGVF9QSU87IGktLSkKLQkJaWYgKG1hc2sgJiAoMSA8PCBpKSkKLQkJCWdvdG8gb3V0OwotCisJaGlnaGJpdCA9IGZscyh4ZmVyX21hc2spIC0gMTsKKwlpZiAoaGlnaGJpdCA+PSAwICYmIGhpZ2hiaXQgPCBBUlJBWV9TSVpFKHhmZXJfbW9kZV9zdHIpKQorCQlyZXR1cm4geGZlcl9tb2RlX3N0cltoaWdoYml0XTsKIAlyZXR1cm4gIjxuL2E+IjsKK30KIAotb3V0OgotCXJldHVybiB4ZmVyX21vZGVfc3RyW2ldOworc3RhdGljIHZvaWQgYXRhX2Rldl9kaXNhYmxlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCit7CisJaWYgKGF0YV9kZXZfcHJlc2VudChkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YSV1OiBkZXYgJXUgZGlzYWJsZWRcbiIsCisJCSAgICAgICBhcC0+aWQsIGRldi0+ZGV2bm8pOworCQlkZXYtPmNsYXNzKys7CisJfQogfQogCiAvKioKQEAgLTgzNCw2ICs1NTYsNyBAQAogICoJYXRhX2Rldl90cnlfY2xhc3NpZnkgLSBQYXJzZSByZXR1cm5lZCBBVEEgZGV2aWNlIHNpZ25hdHVyZQogICoJQGFwOiBBVEEgY2hhbm5lbCB0byBleGFtaW5lCiAgKglAZGV2aWNlOiBEZXZpY2UgdG8gZXhhbWluZSAoc3RhcnRpbmcgYXQgemVybykKKyAqCUByX2VycjogVmFsdWUgb2YgZXJyb3IgcmVnaXN0ZXIgb24gY29tcGxldGlvbgogICoKICAqCUFmdGVyIGFuIGV2ZW50IC0tIFNSU1QsIEUuRC5ELiwgb3IgU0FUQSBDT01SRVNFVCAtLSBvY2N1cnMsCiAgKglhbiBBVEEvQVRBUEktZGVmaW5lZCBzZXQgb2YgdmFsdWVzIGlzIHBsYWNlZCBpbiB0aGUgQVRBCkBAIC04NDYsMTEgKzU2OSwxNCBAQAogICoKICAqCUxPQ0tJTkc6CiAgKgljYWxsZXIuCisgKgorICoJUkVUVVJOUzoKKyAqCURldmljZSB0eXBlIC0gJUFUQV9ERVZfQVRBLCAlQVRBX0RFVl9BVEFQSSBvciAlQVRBX0RFVl9OT05FLgogICovCiAKLXN0YXRpYyB1OCBhdGFfZGV2X3RyeV9jbGFzc2lmeShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlKQorc3RhdGljIHVuc2lnbmVkIGludAorYXRhX2Rldl90cnlfY2xhc3NpZnkoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRldmljZSwgdTggKnJfZXJyKQogewotCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmRldmljZVtkZXZpY2VdOwogCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7CiAJdW5zaWduZWQgaW50IGNsYXNzOwogCXU4IGVycjsKQEAgLTg2MSw4ICs1ODcsOCBAQAogCiAJYXAtPm9wcy0+dGZfcmVhZChhcCwgJnRmKTsKIAllcnIgPSB0Zi5mZWF0dXJlOwotCi0JZGV2LT5jbGFzcyA9IEFUQV9ERVZfTk9ORTsKKwlpZiAocl9lcnIpCisJCSpyX2VyciA9IGVycjsKIAogCS8qIHNlZSBpZiBkZXZpY2UgcGFzc2VkIGRpYWdzICovCiAJaWYgKGVyciA9PSAxKQpAQCAtODcwLDIyICs1OTYsMjAgQEAKIAllbHNlIGlmICgoZGV2aWNlID09IDApICYmIChlcnIgPT0gMHg4MSkpCiAJCS8qIGRvIG5vdGhpbmcgKi8gOwogCWVsc2UKLQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIEFUQV9ERVZfTk9ORTsKIAotCS8qIGRldGVybWluZSBpZiBkZXZpY2UgaWYgQVRBIG9yIEFUQVBJICovCisJLyogZGV0ZXJtaW5lIGlmIGRldmljZSBpcyBBVEEgb3IgQVRBUEkgKi8KIAljbGFzcyA9IGF0YV9kZXZfY2xhc3NpZnkoJnRmKTsKKwogCWlmIChjbGFzcyA9PSBBVEFfREVWX1VOS05PV04pCi0JCXJldHVybiBlcnI7CisJCXJldHVybiBBVEFfREVWX05PTkU7CiAJaWYgKChjbGFzcyA9PSBBVEFfREVWX0FUQSkgJiYgKGF0YV9jaGtfc3RhdHVzKGFwKSA9PSAwKSkKLQkJcmV0dXJuIGVycjsKLQotCWRldi0+Y2xhc3MgPSBjbGFzczsKLQotCXJldHVybiBlcnI7CisJCXJldHVybiBBVEFfREVWX05PTkU7CisJcmV0dXJuIGNsYXNzOwogfQogCiAvKioKLSAqCWF0YV9kZXZfaWRfc3RyaW5nIC0gQ29udmVydCBJREVOVElGWSBERVZJQ0UgcGFnZSBpbnRvIHN0cmluZworICoJYXRhX2lkX3N0cmluZyAtIENvbnZlcnQgSURFTlRJRlkgREVWSUNFIHBhZ2UgaW50byBzdHJpbmcKICAqCUBpZDogSURFTlRJRlkgREVWSUNFIHJlc3VsdHMgd2Ugd2lsbCBleGFtaW5lCiAgKglAczogc3RyaW5nIGludG8gd2hpY2ggZGF0YSBpcyBvdXRwdXQKICAqCUBvZnM6IG9mZnNldCBpbnRvIGlkZW50aWZ5IGRldmljZSBwYWdlCkBAIC04OTksOCArNjIzLDggQEAKICAqCWNhbGxlci4KICAqLwogCi12b2lkIGF0YV9kZXZfaWRfc3RyaW5nKGNvbnN0IHUxNiAqaWQsIHVuc2lnbmVkIGNoYXIgKnMsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgb2ZzLCB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCBhdGFfaWRfc3RyaW5nKGNvbnN0IHUxNiAqaWQsIHVuc2lnbmVkIGNoYXIgKnMsCisJCSAgIHVuc2lnbmVkIGludCBvZnMsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGM7CiAKQEAgLTkxOCw2ICs2NDIsNDkgQEAKIAl9CiB9CiAKKy8qKgorICoJYXRhX2lkX2Nfc3RyaW5nIC0gQ29udmVydCBJREVOVElGWSBERVZJQ0UgcGFnZSBpbnRvIEMgc3RyaW5nCisgKglAaWQ6IElERU5USUZZIERFVklDRSByZXN1bHRzIHdlIHdpbGwgZXhhbWluZQorICoJQHM6IHN0cmluZyBpbnRvIHdoaWNoIGRhdGEgaXMgb3V0cHV0CisgKglAb2ZzOiBvZmZzZXQgaW50byBpZGVudGlmeSBkZXZpY2UgcGFnZQorICoJQGxlbjogbGVuZ3RoIG9mIHN0cmluZyB0byByZXR1cm4uIG11c3QgYmUgYW4gb2RkIG51bWJlci4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBhdGFfaWRfc3RyaW5nIGV4Y2VwdCB0aGF0IGl0CisgKgl0cmltcyB0cmFpbGluZyBzcGFjZXMgYW5kIHRlcm1pbmF0ZXMgdGhlIHJlc3VsdGluZyBzdHJpbmcgd2l0aAorICoJbnVsbC4gIEBsZW4gbXVzdCBiZSBhY3R1YWwgbWF4aW11bSBsZW5ndGggKGV2ZW4gbnVtYmVyKSArIDEuCisgKgorICoJTE9DS0lORzoKKyAqCWNhbGxlci4KKyAqLwordm9pZCBhdGFfaWRfY19zdHJpbmcoY29uc3QgdTE2ICppZCwgdW5zaWduZWQgY2hhciAqcywKKwkJICAgICB1bnNpZ25lZCBpbnQgb2ZzLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisKKwlXQVJOX09OKCEobGVuICYgMSkpOworCisJYXRhX2lkX3N0cmluZyhpZCwgcywgb2ZzLCBsZW4gLSAxKTsKKworCXAgPSBzICsgc3RybmxlbihzLCBsZW4gLSAxKTsKKwl3aGlsZSAocCA+IHMgJiYgcFstMV0gPT0gJyAnKQorCQlwLS07CisJKnAgPSAnXDAnOworfQorCitzdGF0aWMgdTY0IGF0YV9pZF9uX3NlY3RvcnMoY29uc3QgdTE2ICppZCkKK3sKKwlpZiAoYXRhX2lkX2hhc19sYmEoaWQpKSB7CisJCWlmIChhdGFfaWRfaGFzX2xiYTQ4KGlkKSkKKwkJCXJldHVybiBhdGFfaWRfdTY0KGlkLCAxMDApOworCQllbHNlCisJCQlyZXR1cm4gYXRhX2lkX3UzMihpZCwgNjApOworCX0gZWxzZSB7CisJCWlmIChhdGFfaWRfY3VycmVudF9jaHNfdmFsaWQoaWQpKQorCQkJcmV0dXJuIGF0YV9pZF91MzIoaWQsIDU3KTsKKwkJZWxzZQorCQkJcmV0dXJuIGlkWzFdICogaWRbM10gKiBpZFs2XTsKKwl9Cit9CiAKIC8qKgogICoJYXRhX25vb3BfZGV2X3NlbGVjdCAtIFNlbGVjdCBkZXZpY2UgMC8xIG9uIEFUQSBidXMKQEAgLTEwMDcsOTAgKzc3NCwxNzIgQEAKIAogLyoqCiAgKglhdGFfZHVtcF9pZCAtIElERU5USUZZIERFVklDRSBpbmZvIGRlYnVnZ2luZyBvdXRwdXQKLSAqCUBkZXY6IERldmljZSB3aG9zZSBJREVOVElGWSBERVZJQ0UgcGFnZSB3ZSB3aWxsIGR1bXAKKyAqCUBpZDogSURFTlRJRlkgREVWSUNFIHBhZ2UgdG8gZHVtcAogICoKLSAqCUR1bXAgc2VsZWN0ZWQgMTYtYml0IHdvcmRzIGZyb20gYSBkZXRlY3RlZCBkZXZpY2UncwotICoJSURFTlRJRlkgUEFHRSBwYWdlLgorICoJRHVtcCBzZWxlY3RlZCAxNi1iaXQgd29yZHMgZnJvbSB0aGUgZ2l2ZW4gSURFTlRJRlkgREVWSUNFCisgKglwYWdlLgogICoKICAqCUxPQ0tJTkc6CiAgKgljYWxsZXIuCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGF0YV9kdW1wX2lkKGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRhX2R1bXBfaWQoY29uc3QgdTE2ICppZCkKIHsKIAlEUFJJTlRLKCI0OT09MHglMDR4ICAiCiAJCSI1Mz09MHglMDR4ICAiCiAJCSI2Mz09MHglMDR4ICAiCiAJCSI2ND09MHglMDR4ICAiCiAJCSI3NT09MHglMDR4ICBcbiIsCi0JCWRldi0+aWRbNDldLAotCQlkZXYtPmlkWzUzXSwKLQkJZGV2LT5pZFs2M10sCi0JCWRldi0+aWRbNjRdLAotCQlkZXYtPmlkWzc1XSk7CisJCWlkWzQ5XSwKKwkJaWRbNTNdLAorCQlpZFs2M10sCisJCWlkWzY0XSwKKwkJaWRbNzVdKTsKIAlEUFJJTlRLKCI4MD09MHglMDR4ICAiCiAJCSI4MT09MHglMDR4ICAiCiAJCSI4Mj09MHglMDR4ICAiCiAJCSI4Mz09MHglMDR4ICAiCiAJCSI4ND09MHglMDR4ICBcbiIsCi0JCWRldi0+aWRbODBdLAotCQlkZXYtPmlkWzgxXSwKLQkJZGV2LT5pZFs4Ml0sCi0JCWRldi0+aWRbODNdLAotCQlkZXYtPmlkWzg0XSk7CisJCWlkWzgwXSwKKwkJaWRbODFdLAorCQlpZFs4Ml0sCisJCWlkWzgzXSwKKwkJaWRbODRdKTsKIAlEUFJJTlRLKCI4OD09MHglMDR4ICAiCiAJCSI5Mz09MHglMDR4XG4iLAotCQlkZXYtPmlkWzg4XSwKLQkJZGV2LT5pZFs5M10pOworCQlpZFs4OF0sCisJCWlkWzkzXSk7CiB9CiAKLS8qCi0gKglDb21wdXRlIHRoZSBQSU8gbW9kZXMgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZS4gVGhpcyBpcyBub3QgYXMKLSAqCXRyaXZpYWwgYXMgaXQgc2VlbXMgaWYgd2UgbXVzdCBjb25zaWRlciBlYXJseSBkZXZpY2VzIGNvcnJlY3RseS4KKy8qKgorICoJYXRhX2lkX3hmZXJtYXNrIC0gQ29tcHV0ZSB4ZmVybWFzayBmcm9tIHRoZSBnaXZlbiBJREVOVElGWSBkYXRhCisgKglAaWQ6IElERU5USUZZIGRhdGEgdG8gY29tcHV0ZSB4ZmVyIG1hc2sgZnJvbQogICoKLSAqCUZJWE1FOiBwcmUgSURFIGRyaXZlIHRpbWluZyAoZG8gd2UgY2FyZSA/KS4gCisgKglDb21wdXRlIHRoZSB4ZmVybWFzayBmb3IgdGhpcyBkZXZpY2UuIFRoaXMgaXMgbm90IGFzIHRyaXZpYWwKKyAqCWFzIGl0IHNlZW1zIGlmIHdlIG11c3QgY29uc2lkZXIgZWFybHkgZGV2aWNlcyBjb3JyZWN0bHkuCisgKgorICoJRklYTUU6IHByZSBJREUgZHJpdmUgdGltaW5nIChkbyB3ZSBjYXJlID8pLgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lLgorICoKKyAqCVJFVFVSTlM6CisgKglDb21wdXRlZCB4ZmVybWFzawogICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX3Bpb19tb2Rlcyhjb25zdCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRhX2lkX3hmZXJtYXNrKGNvbnN0IHUxNiAqaWQpCiB7Ci0JdTE2IG1vZGVzOworCXVuc2lnbmVkIGludCBwaW9fbWFzaywgbXdkbWFfbWFzaywgdWRtYV9tYXNrOwogCiAJLyogVXN1YWwgY2FzZS4gV29yZCA1MyBpbmRpY2F0ZXMgd29yZCA2NCBpcyB2YWxpZCAqLwotCWlmIChhZGV2LT5pZFtBVEFfSURfRklFTERfVkFMSURdICYgKDEgPDwgMSkpIHsKLQkJbW9kZXMgPSBhZGV2LT5pZFtBVEFfSURfUElPX01PREVTXSAmIDB4MDM7Ci0JCW1vZGVzIDw8PSAzOwotCQltb2RlcyB8PSAweDc7Ci0JCXJldHVybiBtb2RlczsKKwlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmICgxIDw8IDEpKSB7CisJCXBpb19tYXNrID0gaWRbQVRBX0lEX1BJT19NT0RFU10gJiAweDAzOworCQlwaW9fbWFzayA8PD0gMzsKKwkJcGlvX21hc2sgfD0gMHg3OworCX0gZWxzZSB7CisJCS8qIElmIHdvcmQgNjQgaXNuJ3QgdmFsaWQgdGhlbiBXb3JkIDUxIGhpZ2ggYnl0ZSBob2xkcworCQkgKiB0aGUgUElPIHRpbWluZyBudW1iZXIgZm9yIHRoZSBtYXhpbXVtLiBUdXJuIGl0IGludG8KKwkJICogYSBtYXNrLgorCQkgKi8KKwkJcGlvX21hc2sgPSAoMiA8PCAoaWRbQVRBX0lEX09MRF9QSU9fTU9ERVNdICYgMHhGRikpIC0gMSA7CisKKwkJLyogQnV0IHdhaXQuLiB0aGVyZSdzIG1vcmUuIERlc2lnbiB5b3VyIHN0YW5kYXJkcyBieQorCQkgKiBjb21taXR0ZWUgYW5kIHlvdSB0b28gY2FuIGdldCBhIGZyZWUgaW9yZHkgZmllbGQgdG8KKwkJICogcHJvY2Vzcy4gSG93ZXZlciBpdHMgdGhlIHNwZWVkcyBub3QgdGhlIG1vZGVzIHRoYXQKKwkJICogYXJlIHN1cHBvcnRlZC4uLiBOb3RlIGRyaXZlcnMgdXNpbmcgdGhlIHRpbWluZyBBUEkKKwkJICogd2lsbCBnZXQgdGhpcyByaWdodCBhbnl3YXkKKwkJICovCiAJfQogCi0JLyogSWYgd29yZCA2NCBpc24ndCB2YWxpZCB0aGVuIFdvcmQgNTEgaGlnaCBieXRlIGhvbGRzIHRoZSBQSU8gdGltaW5nCi0JICAgbnVtYmVyIGZvciB0aGUgbWF4aW11bS4gVHVybiBpdCBpbnRvIGEgbWFzayBhbmQgcmV0dXJuIGl0ICovCi0JbW9kZXMgPSAoMiA8PCAoKGFkZXYtPmlkW0FUQV9JRF9PTERfUElPX01PREVTXSA+PiA4KSAmIDB4RkYpKSAtIDEgOwotCXJldHVybiBtb2RlczsKLQkvKiBCdXQgd2FpdC4uIHRoZXJlJ3MgbW9yZS4gRGVzaWduIHlvdXIgc3RhbmRhcmRzIGJ5IGNvbW1pdHRlZSBhbmQKLQkgICB5b3UgdG9vIGNhbiBnZXQgYSBmcmVlIGlvcmR5IGZpZWxkIHRvIHByb2Nlc3MuIEhvd2V2ZXIgaXRzIHRoZSAKLQkgICBzcGVlZHMgbm90IHRoZSBtb2RlcyB0aGF0IGFyZSBzdXBwb3J0ZWQuLi4gTm90ZSBkcml2ZXJzIHVzaW5nIHRoZQotCSAgIHRpbWluZyBBUEkgd2lsbCBnZXQgdGhpcyByaWdodCBhbnl3YXkgKi8KKwltd2RtYV9tYXNrID0gaWRbQVRBX0lEX01XRE1BX01PREVTXSAmIDB4MDc7CisKKwl1ZG1hX21hc2sgPSAwOworCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgKDEgPDwgMikpCisJCXVkbWFfbWFzayA9IGlkW0FUQV9JRF9VRE1BX01PREVTXSAmIDB4ZmY7CisKKwlyZXR1cm4gYXRhX3BhY2tfeGZlcm1hc2socGlvX21hc2ssIG13ZG1hX21hc2ssIHVkbWFfbWFzayk7CiB9CiAKLXN0cnVjdCBhdGFfZXhlY19pbnRlcm5hbF9hcmcgewotCXVuc2lnbmVkIGludCBlcnJfbWFzazsKLQlzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZjsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKLX07Ci0KLWludCBhdGFfcWNfY29tcGxldGVfaW50ZXJuYWwoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKKy8qKgorICoJYXRhX3BvcnRfcXVldWVfdGFzayAtIFF1ZXVlIHBvcnRfdGFzaworICoJQGFwOiBUaGUgYXRhX3BvcnQgdG8gcXVldWUgcG9ydF90YXNrIGZvcgorICoKKyAqCVNjaGVkdWxlIEBmbihAZGF0YSkgZm9yIGV4ZWN1dGlvbiBhZnRlciBAZGVsYXkgamlmZmllcyB1c2luZworICoJcG9ydF90YXNrLiAgVGhlcmUgaXMgb25lIHBvcnRfdGFzayBwZXIgcG9ydCBhbmQgaXQncyB0aGUKKyAqCXVzZXIobG93IGxldmVsIGRyaXZlcikncyByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhhdCBvbmx5CisgKglvbmUgdGFzayBpcyBhY3RpdmUgYXQgYW55IGdpdmVuIHRpbWUuCisgKgorICoJbGliYXRhIGNvcmUgbGF5ZXIgdGFrZXMgY2FyZSBvZiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbgorICoJcG9ydF90YXNrIGFuZCBFSC4gIGF0YV9wb3J0X3F1ZXVlX3Rhc2soKSBtYXkgYmUgaWdub3JlZCBmb3IgRUgKKyAqCXN5bmNocm9uaXphdGlvbi4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCit2b2lkIGF0YV9wb3J0X3F1ZXVlX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCAoKmZuKSh2b2lkICopLCB2b2lkICpkYXRhLAorCQkJIHVuc2lnbmVkIGxvbmcgZGVsYXkpCiB7Ci0Jc3RydWN0IGF0YV9leGVjX2ludGVybmFsX2FyZyAqYXJnID0gcWMtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZyA9IGFyZy0+d2FpdGluZzsKKwlpbnQgcmM7CiAKLQlpZiAoIShxYy0+ZXJyX21hc2sgJiB+QUNfRVJSX0RFVikpCi0JCXFjLT5hcC0+b3BzLT50Zl9yZWFkKHFjLT5hcCwgYXJnLT50Zik7Ci0JYXJnLT5lcnJfbWFzayA9IHFjLT5lcnJfbWFzazsKLQlhcmctPndhaXRpbmcgPSBOVUxMOworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19GTFVTSF9QT1JUX1RBU0spCisJCXJldHVybjsKKworCVBSRVBBUkVfV09SSygmYXAtPnBvcnRfdGFzaywgZm4sIGRhdGEpOworCisJaWYgKCFkZWxheSkKKwkJcmMgPSBxdWV1ZV93b3JrKGF0YV93cSwgJmFwLT5wb3J0X3Rhc2spOworCWVsc2UKKwkJcmMgPSBxdWV1ZV9kZWxheWVkX3dvcmsoYXRhX3dxLCAmYXAtPnBvcnRfdGFzaywgZGVsYXkpOworCisJLyogcmMgPT0gMCBtZWFucyB0aGF0IGFub3RoZXIgdXNlciBpcyB1c2luZyBwb3J0IHRhc2sgKi8KKwlXQVJOX09OKHJjID09IDApOworfQorCisvKioKKyAqCWF0YV9wb3J0X2ZsdXNoX3Rhc2sgLSBGbHVzaCBwb3J0X3Rhc2sKKyAqCUBhcDogVGhlIGF0YV9wb3J0IHRvIGZsdXNoIHBvcnRfdGFzayBmb3IKKyAqCisgKglBZnRlciB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRlcywgcG9ydF90YXNrIGlzIGd1cmFudGVlZCBub3QgdG8KKyAqCWJlIHJ1bm5pbmcgb3Igc2NoZWR1bGVkLgorICoKKyAqCUxPQ0tJTkc6CisgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKKyAqLwordm9pZCBhdGFfcG9ydF9mbHVzaF90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURQUklOVEsoIkVOVEVSXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKKwlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfRkxVU0hfUE9SVF9UQVNLOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCisJRFBSSU5USygiZmx1c2ggIzFcbiIpOworCWZsdXNoX3dvcmtxdWV1ZShhdGFfd3EpOworCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCBpZiBhIHRhc2sgaXMgcnVubmluZywgaXQncyBndWFyYW50ZWVkIHRvIHNlZQorCSAqIHRoZSBGTFVTSCBmbGFnOyB0aHVzLCBpdCB3aWxsIG5ldmVyIHF1ZXVlIHBpbyB0YXNrcyBhZ2Fpbi4KKwkgKiBDYW5jZWwgYW5kIGZsdXNoLgorCSAqLworCWlmICghY2FuY2VsX2RlbGF5ZWRfd29yaygmYXAtPnBvcnRfdGFzaykpIHsKKwkJRFBSSU5USygiZmx1c2ggIzJcbiIpOworCQlmbHVzaF93b3JrcXVldWUoYXRhX3dxKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CisJYXAtPmZsYWdzICY9IH5BVEFfRkxBR19GTFVTSF9QT1JUX1RBU0s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CisKKwlEUFJJTlRLKCJFWElUXG4iKTsKK30KKwordm9pZCBhdGFfcWNfY29tcGxldGVfaW50ZXJuYWwoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZyA9IHFjLT5wcml2YXRlX2RhdGE7CisKKwlxYy0+YXAtPm9wcy0+dGZfcmVhZChxYy0+YXAsICZxYy0+dGYpOwogCWNvbXBsZXRlKHdhaXRpbmcpOwotCi0JcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTEyMSw3ICs5NzAsNyBAQAogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CiAJREVDTEFSRV9DT01QTEVUSU9OKHdhaXQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGF0YV9leGVjX2ludGVybmFsX2FyZyBhcmc7CisJdW5zaWduZWQgaW50IGVycl9tYXNrOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMTM1LDE3ICs5ODQsMTggQEAKIAkJcWMtPm5zZWN0ID0gYnVmbGVuIC8gQVRBX1NFQ1RfU0laRTsKIAl9CiAKLQlhcmcud2FpdGluZyA9ICZ3YWl0OwotCWFyZy50ZiA9IHRmOwotCXFjLT5wcml2YXRlX2RhdGEgPSAmYXJnOworCXFjLT5wcml2YXRlX2RhdGEgPSAmd2FpdDsKIAlxYy0+Y29tcGxldGVfZm4gPSBhdGFfcWNfY29tcGxldGVfaW50ZXJuYWw7CiAKLQlpZiAoYXRhX3FjX2lzc3VlKHFjKSkKLQkJZ290byBpc3N1ZV9mYWlsOworCXFjLT5lcnJfbWFzayA9IGF0YV9xY19pc3N1ZShxYyk7CisJaWYgKHFjLT5lcnJfbWFzaykKKwkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndhaXQsIEFUQV9UTU9VVF9JTlRFUk5BTCkpIHsKKwkJYXRhX3BvcnRfZmx1c2hfdGFzayhhcCk7CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCiAJCS8qIFdlJ3JlIHJhY2luZyB3aXRoIGlycSBoZXJlLiAgSWYgd2UgbG9zZSwgdGhlCkBAIC0xMTU0LDggKzEwMDQsOCBAQAogCQkgKiBiZWZvcmUgdGhlIGNhbGxlciBjbGVhbnMgdXAsIGl0IHdpbGwgcmVzdWx0IGluIGEKIAkJICogc3B1cmlvdXMgaW50ZXJydXB0LiAgV2UgY2FuIGxpdmUgd2l0aCB0aGF0LgogCQkgKi8KLQkJaWYgKGFyZy53YWl0aW5nKSB7Ci0JCQlxYy0+ZXJyX21hc2sgPSBBQ19FUlJfT1RIRVI7CisJCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkgeworCQkJcWMtPmVycl9tYXNrID0gQUNfRVJSX1RJTUVPVVQ7CiAJCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRhJXU6IHFjIHRpbWVvdXQgKGNtZCAweCV4KVxuIiwKIAkJCSAgICAgICBhcC0+aWQsIGNvbW1hbmQpOwpAQCAtMTE2NCwxMiArMTAxNCwyOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQlyZXR1cm4gYXJnLmVycl9tYXNrOworCSp0ZiA9IHFjLT50ZjsKKwllcnJfbWFzayA9IHFjLT5lcnJfbWFzazsKIAotIGlzc3VlX2ZhaWw6CiAJYXRhX3FjX2ZyZWUocWMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBBQ19FUlJfT1RIRVI7CisKKwkvKiBYWFggLSBTb21lIExMRERzIChzYXRhX212KSBkaXNhYmxlIHBvcnQgb24gY29tbWFuZCBmYWlsdXJlLgorCSAqIFVudGlsIHRob3NlIGRyaXZlcnMgYXJlIGZpeGVkLCB3ZSBkZXRlY3QgdGhlIGNvbmRpdGlvbgorCSAqIGhlcmUsIGZhaWwgdGhlIGNvbW1hbmQgd2l0aCBBQ19FUlJfU1lTVEVNIGFuZCByZWVuYWJsZSB0aGUKKwkgKiBwb3J0LgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBjaGFuZ2UgYW55IGJlaGF2aW9yIGFzIGludGVybmFsCisJICogY29tbWFuZCBmYWlsdXJlIHJlc3VsdHMgaW4gZGlzYWJsaW5nIHRoZSBkZXZpY2UgaW4gdGhlCisJICogaGlnaGVyIGxheWVyIGZvciBMTEREcyB3aXRob3V0IG5ldyByZXNldC9FSCBjYWxsYmFja3MuCisJICoKKwkgKiBLaWxsIHRoZSBmb2xsb3dpbmcgY29kZSBhcyBzb29uIGFzIHRob3NlIGRyaXZlcnMgYXJlIGZpeGVkLgorCSAqLworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QT1JUX0RJU0FCTEVEKSB7CisJCWVycl9tYXNrIHw9IEFDX0VSUl9TWVNURU07CisJCWF0YV9wb3J0X3Byb2JlKGFwKTsKKwl9CisKKwlyZXR1cm4gZXJyX21hc2s7CiB9CiAKIC8qKgpAQCAtMTE4OSw3ICsxMDU1LDcgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKHNwZWVkID4gMikKIAkJcmV0dXJuIDE7Ci0JCQorCiAJLyogSWYgd2UgaGF2ZSBubyBkcml2ZSBzcGVjaWZpYyBydWxlLCB0aGVuIFBJTyAyIGlzIG5vbiBJT1JEWSAqLwogCiAJaWYgKGFkZXYtPmlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSB7CS8qIEVJREUgKi8KQEAgLTEyMDYsNzMgKzEwNzIsNzggQEAKIH0KIAogLyoqCi0gKglhdGFfZGV2X2lkZW50aWZ5IC0gb2J0YWluIElERU5USUZZIHggREVWSUNFIHBhZ2UKLSAqCUBhcDogcG9ydCBvbiB3aGljaCBkZXZpY2Ugd2Ugd2lzaCB0byBwcm9iZSByZXNpZGVzCi0gKglAZGV2aWNlOiBkZXZpY2UgYnVzIGFkZHJlc3MsIHN0YXJ0aW5nIGF0IHplcm8KKyAqCWF0YV9kZXZfcmVhZF9pZCAtIFJlYWQgSUQgZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQgZGV2aWNlCisgKglAYXA6IHBvcnQgb24gd2hpY2ggdGFyZ2V0IGRldmljZSByZXNpZGVzCisgKglAZGV2OiB0YXJnZXQgZGV2aWNlCisgKglAcF9jbGFzczogcG9pbnRlciB0byBjbGFzcyBvZiB0aGUgdGFyZ2V0IGRldmljZSAobWF5IGJlIGNoYW5nZWQpCisgKglAcG9zdF9yZXNldDogaXMgdGhpcyByZWFkIElEIHBvc3QtcmVzZXQ/CisgKglAcF9pZDogcmVhZCBJREVOVElGWSBwYWdlIChuZXdseSBhbGxvY2F0ZWQpCiAgKgotICoJRm9sbG93aW5nIGJ1cyByZXNldCwgd2UgaXNzdWUgdGhlIElERU5USUZZIFtQQUNLRVRdIERFVklDRQotICoJY29tbWFuZCwgYW5kIHJlYWQgYmFjayB0aGUgNTEyLWJ5dGUgZGV2aWNlIGluZm9ybWF0aW9uIHBhZ2UuCi0gKglUaGUgZGV2aWNlIGluZm9ybWF0aW9uIHBhZ2UgaXMgZmVkIHRvIHVzIHZpYSB0aGUgc3RhbmRhcmQKLSAqCVBJTy1JTiBwcm90b2NvbCwgYnV0IHdlIGhhbmQtY29kZSBpdCBoZXJlLiAoVE9ETzogaW52ZXN0aWdhdGUKLSAqCXVzaW5nIHN0YW5kYXJkIFBJTy1JTiBwYXRocykKLSAqCi0gKglBZnRlciByZWFkaW5nIHRoZSBkZXZpY2UgaW5mb3JtYXRpb24gcGFnZSwgd2UgdXNlIHNldmVyYWwKLSAqCWJpdHMgb2YgaW5mb3JtYXRpb24gZnJvbSBpdCB0byBpbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcwotICoJdGhhdCB3aWxsIGJlIHVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgYXRhX2RldmljZS4KLSAqCU90aGVyIGRhdGEgZnJvbSB0aGUgaW5mbyBwYWdlIGlzIHVzZWQgdG8gZGlzcXVhbGlmeSBjZXJ0YWluCi0gKglvbGRlciBBVEEgZGV2aWNlcyB3ZSBkbyBub3Qgd2lzaCB0byBzdXBwb3J0LgorICoJUmVhZCBJRCBkYXRhIGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuICBBVEFfQ01EX0lEX0FUQSBpcworICoJcGVyZm9ybWVkIG9uIEFUQSBkZXZpY2VzIGFuZCBBVEFfQ01EX0lEX0FUQVBJIG9uIEFUQVBJCisgKglkZXZpY2VzLiAgVGhpcyBmdW5jdGlvbiBhbHNvIHRha2VzIGNhcmUgb2YgRUREIHNpZ25hdHVyZQorICoJbWlzcmVwb3J0aW5nICh0byBiZSByZW1vdmVkIG9uY2UgRUREIHN1cHBvcnQgaXMgZ29uZSkgYW5kCisgKglpc3N1ZXMgQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMgZm9yIHByZS1BVEE0IGRyaXZlcy4KICAqCiAgKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLiAgU29tZSBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRoaXMgZnVuY3Rpb24KLSAqCW9idGFpbiB0aGUgaG9zdF9zZXQgbG9jay4KKyAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQorICoKKyAqCVJFVFVSTlM6CisgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCiAgKi8KLQotc3RhdGljIHZvaWQgYXRhX2Rldl9pZGVudGlmeShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlKQorc3RhdGljIGludCBhdGFfZGV2X3JlYWRfaWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKKwkJCSAgIHVuc2lnbmVkIGludCAqcF9jbGFzcywgaW50IHBvc3RfcmVzZXQsIHUxNiAqKnBfaWQpCiB7Ci0Jc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9ICZhcC0+ZGV2aWNlW2RldmljZV07Ci0JdW5zaWduZWQgaW50IG1ham9yX3ZlcnNpb247Ci0JdTE2IHRtcDsKLQl1bnNpZ25lZCBsb25nIHhmZXJfbW9kZXM7CisJdW5zaWduZWQgaW50IGNsYXNzID0gKnBfY2xhc3M7CiAJdW5zaWduZWQgaW50IHVzaW5nX2VkZDsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOwotCXVuc2lnbmVkIGludCBlcnJfbWFzazsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSAwOworCXUxNiAqaWQ7CisJY29uc3QgY2hhciAqcmVhc29uOwogCWludCByYzsKIAotCWlmICghYXRhX2Rldl9wcmVzZW50KGRldikpIHsKLQkJRFBSSU5USygiRU5URVIvRVhJVCAoaG9zdCAldSwgZGV2ICV1KSAtLSBub2RldlxuIiwKLQkJCWFwLT5pZCwgZGV2aWNlKTsKLQkJcmV0dXJuOwotCX0KKwlEUFJJTlRLKCJFTlRFUiwgaG9zdCAldSwgZGV2ICV1XG4iLCBhcC0+aWQsIGRldi0+ZGV2bm8pOwogCi0JaWYgKGFwLT5mbGFncyAmIChBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfU0FUQV9SRVNFVCkpCisJaWYgKGFwLT5vcHMtPnByb2JlX3Jlc2V0IHx8CisJICAgIGFwLT5mbGFncyAmIChBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfU0FUQV9SRVNFVCkpCiAJCXVzaW5nX2VkZCA9IDA7CiAJZWxzZQogCQl1c2luZ19lZGQgPSAxOwogCi0JRFBSSU5USygiRU5URVIsIGhvc3QgJXUsIGRldiAldVxuIiwgYXAtPmlkLCBkZXZpY2UpOworCWF0YV9kZXZfc2VsZWN0KGFwLCBkZXYtPmRldm5vLCAxLCAxKTsgLyogc2VsZWN0IGRldmljZSAwLzEgKi8KIAotCWFzc2VydCAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSB8fCBkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBUEkgfHwKLQkJZGV2LT5jbGFzcyA9PSBBVEFfREVWX05PTkUpOworCWlkID0ga21hbGxvYyhzaXplb2YoaWRbMF0pICogQVRBX0lEX1dPUkRTLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWQgPT0gTlVMTCkgeworCQlyYyA9IC1FTk9NRU07CisJCXJlYXNvbiA9ICJvdXQgb2YgbWVtb3J5IjsKKwkJZ290byBlcnJfb3V0OworCX0KIAotCWF0YV9kZXZfc2VsZWN0KGFwLCBkZXZpY2UsIDEsIDEpOyAvKiBzZWxlY3QgZGV2aWNlIDAvMSAqLworIHJldHJ5OgorCWF0YV90Zl9pbml0KGFwLCAmdGYsIGRldi0+ZGV2bm8pOwogCi1yZXRyeToKLQlhdGFfdGZfaW5pdChhcCwgJnRmLCBkZXZpY2UpOwotCi0JaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpIHsKKwlzd2l0Y2ggKGNsYXNzKSB7CisJY2FzZSBBVEFfREVWX0FUQToKIAkJdGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBOwotCQlEUFJJTlRLKCJkbyBBVEEgaWRlbnRpZnlcbiIpOwotCX0gZWxzZSB7CisJCWJyZWFrOworCWNhc2UgQVRBX0RFVl9BVEFQSToKIAkJdGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7Ci0JCURQUklOVEsoImRvIEFUQVBJIGlkZW50aWZ5XG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmMgPSAtRU5PREVWOworCQlyZWFzb24gPSAidW5zdXBwb3J0ZWQgY2xhc3MiOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCiAJdGYucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CiAKIAllcnJfbWFzayA9IGF0YV9leGVjX2ludGVybmFsKGFwLCBkZXYsICZ0ZiwgRE1BX0ZST01fREVWSUNFLAotCQkJCSAgICAgZGV2LT5pZCwgc2l6ZW9mKGRldi0+aWQpKTsKKwkJCQkgICAgIGlkLCBzaXplb2YoaWRbMF0pICogQVRBX0lEX1dPUkRTKTsKIAogCWlmIChlcnJfbWFzaykgeworCQlyYyA9IC1FSU87CisJCXJlYXNvbiA9ICJJL08gZXJyb3IiOworCiAJCWlmIChlcnJfbWFzayAmIH5BQ19FUlJfREVWKQogCQkJZ290byBlcnJfb3V0OwogCkBAIC0xMjg3LDU2ICsxMTU4LDI2IEBACiAJCSAqIEFUQSBzb2Z0d2FyZSByZXNldCAoU1JTVCwgdGhlIGRlZmF1bHQpIGRvZXMgbm90IGFwcGVhcgogCQkgKiB0byBoYXZlIHRoaXMgcHJvYmxlbS4KIAkJICovCi0JCWlmICgodXNpbmdfZWRkKSAmJiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkpIHsKKwkJaWYgKCh1c2luZ19lZGQpICYmIChjbGFzcyA9PSBBVEFfREVWX0FUQSkpIHsKIAkJCXU4IGVyciA9IHRmLmZlYXR1cmU7CiAJCQlpZiAoZXJyICYgQVRBX0FCT1JURUQpIHsKLQkJCQlkZXYtPmNsYXNzID0gQVRBX0RFVl9BVEFQSTsKKwkJCQljbGFzcyA9IEFUQV9ERVZfQVRBUEk7CiAJCQkJZ290byByZXRyeTsKIAkJCX0KIAkJfQogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0Jc3dhcF9idWZfbGUxNihkZXYtPmlkLCBBVEFfSURfV09SRFMpOworCXN3YXBfYnVmX2xlMTYoaWQsIEFUQV9JRF9XT1JEUyk7CiAKLQkvKiBwcmludCBkZXZpY2UgY2FwYWJpbGl0aWVzICovCi0JcHJpbnRrKEtFUk5fREVCVUcgImF0YSV1OiBkZXYgJXUgY2ZnICIKLQkgICAgICAgIjQ5OiUwNHggODI6JTA0eCA4MzolMDR4IDg0OiUwNHggODU6JTA0eCA4NjolMDR4IDg3OiUwNHggODg6JTA0eFxuIiwKLQkgICAgICAgYXAtPmlkLCBkZXZpY2UsIGRldi0+aWRbNDldLAotCSAgICAgICBkZXYtPmlkWzgyXSwgZGV2LT5pZFs4M10sIGRldi0+aWRbODRdLAotCSAgICAgICBkZXYtPmlkWzg1XSwgZGV2LT5pZFs4Nl0sIGRldi0+aWRbODddLAotCSAgICAgICBkZXYtPmlkWzg4XSk7Ci0KLQkvKgotCSAqIGNvbW1vbiBBVEEsIEFUQVBJIGZlYXR1cmUgdGVzdHMKLQkgKi8KLQotCS8qIHdlIHJlcXVpcmUgRE1BIHN1cHBvcnQgKGJpdHMgOCBvZiB3b3JkIDQ5KSAqLwotCWlmICghYXRhX2lkX2hhc19kbWEoZGV2LT5pZCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImF0YSV1OiBubyBkbWFcbiIsIGFwLT5pZCk7Ci0JCWdvdG8gZXJyX291dF9ub3N1cDsKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoKGNsYXNzID09IEFUQV9ERVZfQVRBKSAhPSBhdGFfaWRfaXNfYXRhKGlkKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCXJlYXNvbiA9ICJkZXZpY2UgcmVwb3J0cyBpbGxlZ2FsIHR5cGUiOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JLyogcXVpY2stbi1kaXJ0eSBmaW5kIG1heCB0cmFuc2ZlciBtb2RlOyBmb3IgcHJpbnRrIG9ubHkgKi8KLQl4ZmVyX21vZGVzID0gZGV2LT5pZFtBVEFfSURfVURNQV9NT0RFU107Ci0JaWYgKCF4ZmVyX21vZGVzKQotCQl4ZmVyX21vZGVzID0gKGRldi0+aWRbQVRBX0lEX01XRE1BX01PREVTXSkgPDwgQVRBX1NISUZUX01XRE1BOwotCWlmICgheGZlcl9tb2RlcykKLQkJeGZlcl9tb2RlcyA9IGF0YV9waW9fbW9kZXMoZGV2KTsKLQotCWF0YV9kdW1wX2lkKGRldik7Ci0KLQkvKiBBVEEtc3BlY2lmaWMgZmVhdHVyZSB0ZXN0cyAqLwotCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBKSB7Ci0JCWlmICghYXRhX2lkX2lzX2F0YShkZXYtPmlkKSkJLyogc2FuaXR5IGNoZWNrICovCi0JCQlnb3RvIGVycl9vdXRfbm9zdXA7Ci0KLQkJLyogZ2V0IG1ham9yIHZlcnNpb24gKi8KLQkJdG1wID0gZGV2LT5pZFtBVEFfSURfTUFKT1JfVkVSXTsKLQkJZm9yIChtYWpvcl92ZXJzaW9uID0gMTQ7IG1ham9yX3ZlcnNpb24gPj0gMTsgbWFqb3JfdmVyc2lvbi0tKQotCQkJaWYgKHRtcCAmICgxIDw8IG1ham9yX3ZlcnNpb24pKQotCQkJCWJyZWFrOwotCisJaWYgKHBvc3RfcmVzZXQgJiYgY2xhc3MgPT0gQVRBX0RFVl9BVEEpIHsKIAkJLyoKIAkJICogVGhlIGV4YWN0IHNlcXVlbmNlIGV4cGVjdGVkIGJ5IGNlcnRhaW4gcHJlLUFUQTQgZHJpdmVzIGlzOgogCQkgKiBTUlNUIFJFU0VUCkBAIC0xMzQ1LDEyMiArMTE4NiwxODYgQEAKIAkJICogYW55dGhpbmcgZWxzZS4uCiAJCSAqIFNvbWUgZHJpdmVzIHdlcmUgdmVyeSBzcGVjaWZpYyBhYm91dCB0aGF0IGV4YWN0IHNlcXVlbmNlLgogCQkgKi8KLQkJaWYgKG1ham9yX3ZlcnNpb24gPCA0IHx8ICghYXRhX2lkX2hhc19sYmEoZGV2LT5pZCkpKSB7Ci0JCQlhdGFfZGV2X2luaXRfcGFyYW1zKGFwLCBkZXYpOworCQlpZiAoYXRhX2lkX21ham9yX3ZlcnNpb24oaWQpIDwgNCB8fCAhYXRhX2lkX2hhc19sYmEoaWQpKSB7CisJCQllcnJfbWFzayA9IGF0YV9kZXZfaW5pdF9wYXJhbXMoYXAsIGRldik7CisJCQlpZiAoZXJyX21hc2spIHsKKwkJCQlyYyA9IC1FSU87CisJCQkJcmVhc29uID0gIklOSVRfREVWX1BBUkFNUyBmYWlsZWQiOworCQkJCWdvdG8gZXJyX291dDsKKwkJCX0KIAogCQkJLyogY3VycmVudCBDSFMgdHJhbnNsYXRpb24gaW5mbyAoaWRbNTMtNThdKSBtaWdodCBiZQogCQkJICogY2hhbmdlZC4gcmVyZWFkIHRoZSBpZGVudGlmeSBkZXZpY2UgaW5mby4KIAkJCSAqLwotCQkJYXRhX2Rldl9yZXJlYWRfaWQoYXAsIGRldik7CisJCQlwb3N0X3Jlc2V0ID0gMDsKKwkJCWdvdG8gcmV0cnk7CiAJCX0KKwl9CiAKLQkJaWYgKGF0YV9pZF9oYXNfbGJhKGRldi0+aWQpKSB7CisJKnBfY2xhc3MgPSBjbGFzczsKKwkqcF9pZCA9IGlkOworCXJldHVybiAwOworCisgZXJyX291dDoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogZGV2ICV1IGZhaWxlZCB0byBJREVOVElGWSAoJXMpXG4iLAorCSAgICAgICBhcC0+aWQsIGRldi0+ZGV2bm8sIHJlYXNvbik7CisJa2ZyZWUoaWQpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSB1OCBhdGFfZGV2X2tub2JibGUoY29uc3Qgc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKChhcC0+Y2JsID09IEFUQV9DQkxfU0FUQSkgJiYgKCFhdGFfaWRfaXNfc2F0YShkZXYtPmlkKSkpOworfQorCisvKioKKyAqCWF0YV9kZXZfY29uZmlndXJlIC0gQ29uZmlndXJlIHRoZSBzcGVjaWZpZWQgQVRBL0FUQVBJIGRldmljZQorICoJQGFwOiBQb3J0IG9uIHdoaWNoIHRhcmdldCBkZXZpY2UgcmVzaWRlcworICoJQGRldjogVGFyZ2V0IGRldmljZSB0byBjb25maWd1cmUKKyAqCUBwcmludF9pbmZvOiBFbmFibGUgZGV2aWNlIGluZm8gcHJpbnRvdXQKKyAqCisgKglDb25maWd1cmUgQGRldiBhY2NvcmRpbmcgdG8gQGRldi0+aWQuICBHZW5lcmljIGFuZCBsb3ctbGV2ZWwKKyAqCWRyaXZlciBzcGVjaWZpYyBmaXh1cHMgYXJlIGFsc28gYXBwbGllZC4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGF0YV9kZXZfY29uZmlndXJlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCisJCQkgICAgIGludCBwcmludF9pbmZvKQoreworCWNvbnN0IHUxNiAqaWQgPSBkZXYtPmlkOworCXVuc2lnbmVkIGludCB4ZmVyX21hc2s7CisJaW50IGksIHJjOworCisJaWYgKCFhdGFfZGV2X3ByZXNlbnQoZGV2KSkgeworCQlEUFJJTlRLKCJFTlRFUi9FWElUIChob3N0ICV1LCBkZXYgJXUpIC0tIG5vZGV2XG4iLAorCQkJYXAtPmlkLCBkZXYtPmRldm5vKTsKKwkJcmV0dXJuIDA7CisJfQorCisJRFBSSU5USygiRU5URVIsIGhvc3QgJXUsIGRldiAldVxuIiwgYXAtPmlkLCBkZXYtPmRldm5vKTsKKworCS8qIHByaW50IGRldmljZSBjYXBhYmlsaXRpZXMgKi8KKwlpZiAocHJpbnRfaW5mbykKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0YSV1OiBkZXYgJXUgY2ZnIDQ5OiUwNHggODI6JTA0eCA4MzolMDR4ICIKKwkJICAgICAgICI4NDolMDR4IDg1OiUwNHggODY6JTA0eCA4NzolMDR4IDg4OiUwNHhcbiIsCisJCSAgICAgICBhcC0+aWQsIGRldi0+ZGV2bm8sIGlkWzQ5XSwgaWRbODJdLCBpZFs4M10sCisJCSAgICAgICBpZFs4NF0sIGlkWzg1XSwgaWRbODZdLCBpZFs4N10sIGlkWzg4XSk7CisKKwkvKiBpbml0aWFsaXplIHRvLWJlLWNvbmZpZ3VyZWQgcGFyYW1ldGVycyAqLworCWRldi0+ZmxhZ3MgPSAwOworCWRldi0+bWF4X3NlY3RvcnMgPSAwOworCWRldi0+Y2RiX2xlbiA9IDA7CisJZGV2LT5uX3NlY3RvcnMgPSAwOworCWRldi0+Y3lsaW5kZXJzID0gMDsKKwlkZXYtPmhlYWRzID0gMDsKKwlkZXYtPnNlY3RvcnMgPSAwOworCisJLyoKKwkgKiBjb21tb24gQVRBLCBBVEFQSSBmZWF0dXJlIHRlc3RzCisJICovCisKKwkvKiBmaW5kIG1heCB0cmFuc2ZlciBtb2RlOyBmb3IgcHJpbnRrIG9ubHkgKi8KKwl4ZmVyX21hc2sgPSBhdGFfaWRfeGZlcm1hc2soaWQpOworCisJYXRhX2R1bXBfaWQoaWQpOworCisJLyogQVRBLXNwZWNpZmljIGZlYXR1cmUgdGVzdHMgKi8KKwlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkgeworCQlkZXYtPm5fc2VjdG9ycyA9IGF0YV9pZF9uX3NlY3RvcnMoaWQpOworCisJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpIHsKKwkJCWNvbnN0IGNoYXIgKmxiYV9kZXNjOworCisJCQlsYmFfZGVzYyA9ICJMQkEiOwogCQkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfTEJBOwotCi0JCQlpZiAoYXRhX2lkX2hhc19sYmE0OChkZXYtPmlkKSkgeworCQkJaWYgKGF0YV9pZF9oYXNfbGJhNDgoaWQpKSB7CiAJCQkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfTEJBNDg7Ci0JCQkJZGV2LT5uX3NlY3RvcnMgPSBhdGFfaWRfdTY0KGRldi0+aWQsIDEwMCk7Ci0JCQl9IGVsc2UgewotCQkJCWRldi0+bl9zZWN0b3JzID0gYXRhX2lkX3UzMihkZXYtPmlkLCA2MCk7CisJCQkJbGJhX2Rlc2MgPSAiTEJBNDgiOwogCQkJfQogCiAJCQkvKiBwcmludCBkZXZpY2UgaW5mbyB0byBkbWVzZyAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IGRldiAldSBBVEEtJWQsIG1heCAlcywgJUx1IHNlY3RvcnM6JXNcbiIsCi0JCQkgICAgICAgYXAtPmlkLCBkZXZpY2UsCi0JCQkgICAgICAgbWFqb3JfdmVyc2lvbiwKLQkJCSAgICAgICBhdGFfbW9kZV9zdHJpbmcoeGZlcl9tb2RlcyksCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPm5fc2VjdG9ycywKLQkJCSAgICAgICBkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0xCQTQ4ID8gIiBMQkE0OCIgOiAiIExCQSIpOwotCQl9IGVsc2UgeyAKKwkJCWlmIChwcmludF9pbmZvKQorCQkJCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBkZXYgJXUgQVRBLSVkLCAiCisJCQkJICAgICAgICJtYXggJXMsICVMdSBzZWN0b3JzOiAlc1xuIiwKKwkJCQkgICAgICAgYXAtPmlkLCBkZXYtPmRldm5vLAorCQkJCSAgICAgICBhdGFfaWRfbWFqb3JfdmVyc2lvbihpZCksCisJCQkJICAgICAgIGF0YV9tb2RlX3N0cmluZyh4ZmVyX21hc2spLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+bl9zZWN0b3JzLAorCQkJCSAgICAgICBsYmFfZGVzYyk7CisJCX0gZWxzZSB7CiAJCQkvKiBDSFMgKi8KIAogCQkJLyogRGVmYXVsdCB0cmFuc2xhdGlvbiAqLwotCQkJZGV2LT5jeWxpbmRlcnMJPSBkZXYtPmlkWzFdOwotCQkJZGV2LT5oZWFkcwk9IGRldi0+aWRbM107Ci0JCQlkZXYtPnNlY3RvcnMJPSBkZXYtPmlkWzZdOwotCQkJZGV2LT5uX3NlY3RvcnMJPSBkZXYtPmN5bGluZGVycyAqIGRldi0+aGVhZHMgKiBkZXYtPnNlY3RvcnM7CisJCQlkZXYtPmN5bGluZGVycwk9IGlkWzFdOworCQkJZGV2LT5oZWFkcwk9IGlkWzNdOworCQkJZGV2LT5zZWN0b3JzCT0gaWRbNl07CiAKLQkJCWlmIChhdGFfaWRfY3VycmVudF9jaHNfdmFsaWQoZGV2LT5pZCkpIHsKKwkJCWlmIChhdGFfaWRfY3VycmVudF9jaHNfdmFsaWQoaWQpKSB7CiAJCQkJLyogQ3VycmVudCBDSFMgdHJhbnNsYXRpb24gaXMgdmFsaWQuICovCi0JCQkJZGV2LT5jeWxpbmRlcnMgPSBkZXYtPmlkWzU0XTsKLQkJCQlkZXYtPmhlYWRzICAgICA9IGRldi0+aWRbNTVdOwotCQkJCWRldi0+c2VjdG9ycyAgID0gZGV2LT5pZFs1Nl07Ci0JCQkJCi0JCQkJZGV2LT5uX3NlY3RvcnMgPSBhdGFfaWRfdTMyKGRldi0+aWQsIDU3KTsKKwkJCQlkZXYtPmN5bGluZGVycyA9IGlkWzU0XTsKKwkJCQlkZXYtPmhlYWRzICAgICA9IGlkWzU1XTsKKwkJCQlkZXYtPnNlY3RvcnMgICA9IGlkWzU2XTsKIAkJCX0KIAogCQkJLyogcHJpbnQgZGV2aWNlIGluZm8gdG8gZG1lc2cgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBkZXYgJXUgQVRBLSVkLCBtYXggJXMsICVMdSBzZWN0b3JzOiBDSFMgJWQvJWQvJWRcbiIsCi0JCQkgICAgICAgYXAtPmlkLCBkZXZpY2UsCi0JCQkgICAgICAgbWFqb3JfdmVyc2lvbiwKLQkJCSAgICAgICBhdGFfbW9kZV9zdHJpbmcoeGZlcl9tb2RlcyksCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPm5fc2VjdG9ycywKLQkJCSAgICAgICAoaW50KWRldi0+Y3lsaW5kZXJzLCAoaW50KWRldi0+aGVhZHMsIChpbnQpZGV2LT5zZWN0b3JzKTsKLQorCQkJaWYgKHByaW50X2luZm8pCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IGRldiAldSBBVEEtJWQsICIKKwkJCQkgICAgICAgIm1heCAlcywgJUx1IHNlY3RvcnM6IENIUyAldS8ldS8ldVxuIiwKKwkJCQkgICAgICAgYXAtPmlkLCBkZXYtPmRldm5vLAorCQkJCSAgICAgICBhdGFfaWRfbWFqb3JfdmVyc2lvbihpZCksCisJCQkJICAgICAgIGF0YV9tb2RlX3N0cmluZyh4ZmVyX21hc2spLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+bl9zZWN0b3JzLAorCQkJCSAgICAgICBkZXYtPmN5bGluZGVycywgZGV2LT5oZWFkcywgZGV2LT5zZWN0b3JzKTsKIAkJfQogCi0JCWFwLT5ob3N0LT5tYXhfY21kX2xlbiA9IDE2OworCQlkZXYtPmNkYl9sZW4gPSAxNjsKIAl9CiAKIAkvKiBBVEFQSS1zcGVjaWZpYyBmZWF0dXJlIHRlc3RzICovCiAJZWxzZSBpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKSB7Ci0JCWlmIChhdGFfaWRfaXNfYXRhKGRldi0+aWQpKQkJLyogc2FuaXR5IGNoZWNrICovCi0JCQlnb3RvIGVycl9vdXRfbm9zdXA7Ci0KLQkJcmMgPSBhdGFwaV9jZGJfbGVuKGRldi0+aWQpOworCQlyYyA9IGF0YXBpX2NkYl9sZW4oaWQpOwogCQlpZiAoKHJjIDwgMTIpIHx8IChyYyA+IEFUQVBJX0NEQl9MRU4pKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogdW5zdXBwb3J0ZWQgQ0RCIGxlblxuIiwgYXAtPmlkKTsKKwkJCXJjID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyX291dF9ub3N1cDsKIAkJfQotCQlhcC0+Y2RiX2xlbiA9ICh1bnNpZ25lZCBpbnQpIHJjOwotCQlhcC0+aG9zdC0+bWF4X2NtZF9sZW4gPSAodW5zaWduZWQgY2hhcikgYXAtPmNkYl9sZW47CisJCWRldi0+Y2RiX2xlbiA9ICh1bnNpZ25lZCBpbnQpIHJjOwogCiAJCS8qIHByaW50IGRldmljZSBpbmZvIHRvIGRtZXNnICovCi0JCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBkZXYgJXUgQVRBUEksIG1heCAlc1xuIiwKLQkJICAgICAgIGFwLT5pZCwgZGV2aWNlLAotCQkgICAgICAgYXRhX21vZGVfc3RyaW5nKHhmZXJfbW9kZXMpKTsKKwkJaWYgKHByaW50X2luZm8pCisJCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogZGV2ICV1IEFUQVBJLCBtYXggJXNcbiIsCisJCQkgICAgICAgYXAtPmlkLCBkZXYtPmRldm5vLCBhdGFfbW9kZV9zdHJpbmcoeGZlcl9tYXNrKSk7CiAJfQogCi0JRFBSSU5USygiRVhJVCwgZHJ2X3N0YXQgPSAweCV4XG4iLCBhdGFfY2hrX3N0YXR1cyhhcCkpOwotCXJldHVybjsKKwlhcC0+aG9zdC0+bWF4X2NtZF9sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykKKwkJYXAtPmhvc3QtPm1heF9jbWRfbGVuID0gbWF4X3QodW5zaWduZWQgaW50LAorCQkJCQkgICAgICBhcC0+aG9zdC0+bWF4X2NtZF9sZW4sCisJCQkJCSAgICAgIGFwLT5kZXZpY2VbaV0uY2RiX2xlbik7CiAKLWVycl9vdXRfbm9zdXA6Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiYXRhJXU6IGRldiAldSBub3Qgc3VwcG9ydGVkLCBpZ25vcmluZ1xuIiwKLQkgICAgICAgYXAtPmlkLCBkZXZpY2UpOwotZXJyX291dDoKLQlkZXYtPmNsYXNzKys7CS8qIGNvbnZlcnRzIEFUQV9ERVZfeHh4IGludG8gQVRBX0RFVl94eHhfVU5TVVAgKi8KLQlEUFJJTlRLKCJFWElULCBlcnJcbiIpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdTggYXRhX2Rldl9rbm9iYmxlKGNvbnN0IHN0cnVjdCBhdGFfcG9ydCAqYXApCi17Ci0JcmV0dXJuICgoYXAtPmNibCA9PSBBVEFfQ0JMX1NBVEEpICYmICghYXRhX2lkX2lzX3NhdGEoYXAtPmRldmljZS0+aWQpKSk7Ci19Ci0KLS8qKgotICogCWF0YV9kZXZfY29uZmlnIC0gUnVuIGRldmljZSBzcGVjaWZpYyBoYW5kbGVycyBhbmQgY2hlY2sgZm9yCi0gKiAJCQkgU0FUQS0+UEFUQSBicmlkZ2VzCi0gKiAJQGFwOiBCdXMKLSAqIAlAaTogIERldmljZQotICoKLSAqIAlMT0NLSU5HOgotICovCi0KLXZvaWQgYXRhX2Rldl9jb25maWcoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGkpCi17CiAJLyogbGltaXQgYnJpZGdlIHRyYW5zZmVycyB0byB1ZG1hNSwgMjAwIHNlY3RvcnMgKi8KLQlpZiAoYXRhX2Rldl9rbm9iYmxlKGFwKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJhdGEldSgldSk6IGFwcGx5aW5nIGJyaWRnZSBsaW1pdHNcbiIsCi0JCQlhcC0+aWQsIGFwLT5kZXZpY2UtPmRldm5vKTsKLQkJYXAtPnVkbWFfbWFzayAmPSBBVEFfVURNQTU7Ci0JCWFwLT5ob3N0LT5tYXhfc2VjdG9ycyA9IEFUQV9NQVhfU0VDVE9SUzsKLQkJYXAtPmhvc3QtPmhvc3R0LT5tYXhfc2VjdG9ycyA9IEFUQV9NQVhfU0VDVE9SUzsKLQkJYXAtPmRldmljZVtpXS5mbGFncyB8PSBBVEFfREZMQUdfTE9DS19TRUNUT1JTOworCWlmIChhdGFfZGV2X2tub2JibGUoYXAsIGRldikpIHsKKwkJaWYgKHByaW50X2luZm8pCisJCQlwcmludGsoS0VSTl9JTkZPICJhdGEldSgldSk6IGFwcGx5aW5nIGJyaWRnZSBsaW1pdHNcbiIsCisJCQkgICAgICAgYXAtPmlkLCBkZXYtPmRldm5vKTsKKwkJZGV2LT51ZG1hX21hc2sgJj0gQVRBX1VETUE1OworCQlkZXYtPm1heF9zZWN0b3JzID0gQVRBX01BWF9TRUNUT1JTOwogCX0KIAogCWlmIChhcC0+b3BzLT5kZXZfY29uZmlnKQotCQlhcC0+b3BzLT5kZXZfY29uZmlnKGFwLCAmYXAtPmRldmljZVtpXSk7CisJCWFwLT5vcHMtPmRldl9jb25maWcoYXAsIGRldik7CisKKwlEUFJJTlRLKCJFWElULCBkcnZfc3RhdCA9IDB4JXhcbiIsIGF0YV9jaGtfc3RhdHVzKGFwKSk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfbm9zdXA6CisJRFBSSU5USygiRVhJVCwgZXJyXG4iKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMTQ4MCwyMSArMTM4NSw1OSBAQAogCiBzdGF0aWMgaW50IGF0YV9idXNfcHJvYmUoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQl1bnNpZ25lZCBpbnQgaSwgZm91bmQgPSAwOworCXVuc2lnbmVkIGludCBjbGFzc2VzW0FUQV9NQVhfREVWSUNFU107CisJdW5zaWduZWQgaW50IGksIHJjLCBmb3VuZCA9IDA7CiAKLQlhcC0+b3BzLT5waHlfcmVzZXQoYXApOwotCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QT1JUX0RJU0FCTEVEKQotCQlnb3RvIGVycl9vdXQ7CisJYXRhX3BvcnRfcHJvYmUoYXApOwogCi0JZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKSB7Ci0JCWF0YV9kZXZfaWRlbnRpZnkoYXAsIGkpOwotCQlpZiAoYXRhX2Rldl9wcmVzZW50KCZhcC0+ZGV2aWNlW2ldKSkgewotCQkJZm91bmQgPSAxOwotCQkJYXRhX2Rldl9jb25maWcoYXAsaSk7CisJLyogcmVzZXQgYW5kIGRldGVybWluZSBkZXZpY2UgY2xhc3NlcyAqLworCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykKKwkJY2xhc3Nlc1tpXSA9IEFUQV9ERVZfVU5LTk9XTjsKKworCWlmIChhcC0+b3BzLT5wcm9iZV9yZXNldCkgeworCQlyYyA9IGFwLT5vcHMtPnByb2JlX3Jlc2V0KGFwLCBjbGFzc2VzKTsKKwkJaWYgKHJjKSB7CisJCQlwcmludGsoImF0YSV1OiByZXNldCBmYWlsZWQgKGVycm5vPSVkKVxuIiwgYXAtPmlkLCByYyk7CisJCQlyZXR1cm4gcmM7CiAJCX0KKwl9IGVsc2UgeworCQlhcC0+b3BzLT5waHlfcmVzZXQoYXApOworCisJCWlmICghKGFwLT5mbGFncyAmIEFUQV9GTEFHX1BPUlRfRElTQUJMRUQpKQorCQkJZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKQorCQkJCWNsYXNzZXNbaV0gPSBhcC0+ZGV2aWNlW2ldLmNsYXNzOworCisJCWF0YV9wb3J0X3Byb2JlKGFwKTsKIAl9CiAKLQlpZiAoKCFmb3VuZCkgfHwgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1BPUlRfRElTQUJMRUQpKQorCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykKKwkJaWYgKGNsYXNzZXNbaV0gPT0gQVRBX0RFVl9VTktOT1dOKQorCQkJY2xhc3Nlc1tpXSA9IEFUQV9ERVZfTk9ORTsKKworCS8qIHJlYWQgSURFTlRJRlkgcGFnZSBhbmQgY29uZmlndXJlIGRldmljZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9ICZhcC0+ZGV2aWNlW2ldOworCisJCWRldi0+Y2xhc3MgPSBjbGFzc2VzW2ldOworCisJCWlmICghYXRhX2Rldl9wcmVzZW50KGRldikpCisJCQljb250aW51ZTsKKworCQlXQVJOX09OKGRldi0+aWQgIT0gTlVMTCk7CisJCWlmIChhdGFfZGV2X3JlYWRfaWQoYXAsIGRldiwgJmRldi0+Y2xhc3MsIDEsICZkZXYtPmlkKSkgeworCQkJZGV2LT5jbGFzcyA9IEFUQV9ERVZfTk9ORTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGF0YV9kZXZfY29uZmlndXJlKGFwLCBkZXYsIDEpKSB7CisJCQlhdGFfZGV2X2Rpc2FibGUoYXAsIGRldik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvdW5kID0gMTsKKwl9CisKKwlpZiAoIWZvdW5kKQogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAogCWF0YV9zZXRfbW9kZShhcCk7CkBAIC0xNTA1LDcgKzE0NDgsNiBAQAogCiBlcnJfb3V0X2Rpc2FibGU6CiAJYXAtPm9wcy0+cG9ydF9kaXNhYmxlKGFwKTsKLWVycl9vdXQ6CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xNTI2LDYgKzE0NjgsNDEgQEAKIH0KIAogLyoqCisgKglzYXRhX3ByaW50X2xpbmtfc3RhdHVzIC0gUHJpbnQgU0FUQSBsaW5rIHN0YXR1cworICoJQGFwOiBTQVRBIHBvcnQgdG8gcHJpbnRrIGxpbmsgc3RhdHVzIGFib3V0CisgKgorICoJVGhpcyBmdW5jdGlvbiBwcmludHMgbGluayBzcGVlZCBhbmQgc3RhdHVzIG9mIGEgU0FUQSBsaW5rLgorICoKKyAqCUxPQ0tJTkc6CisgKglOb25lLgorICovCitzdGF0aWMgdm9pZCBzYXRhX3ByaW50X2xpbmtfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApCit7CisJdTMyIHNzdGF0dXMsIHRtcDsKKwljb25zdCBjaGFyICpzcGVlZDsKKworCWlmICghYXAtPm9wcy0+c2NyX3JlYWQpCisJCXJldHVybjsKKworCXNzdGF0dXMgPSBzY3JfcmVhZChhcCwgU0NSX1NUQVRVUyk7CisKKwlpZiAoc2F0YV9kZXZfcHJlc2VudChhcCkpIHsKKwkJdG1wID0gKHNzdGF0dXMgPj4gNCkgJiAweGY7CisJCWlmICh0bXAgJiAoMSA8PCAwKSkKKwkJCXNwZWVkID0gIjEuNSI7CisJCWVsc2UgaWYgKHRtcCAmICgxIDw8IDEpKQorCQkJc3BlZWQgPSAiMy4wIjsKKwkJZWxzZQorCQkJc3BlZWQgPSAiPHVua25vd24+IjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IFNBVEEgbGluayB1cCAlcyBHYnBzIChTU3RhdHVzICVYKVxuIiwKKwkJICAgICAgIGFwLT5pZCwgc3BlZWQsIHNzdGF0dXMpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBTQVRBIGxpbmsgZG93biAoU1N0YXR1cyAlWClcbiIsCisJCSAgICAgICBhcC0+aWQsIHNzdGF0dXMpOworCX0KK30KKworLyoqCiAgKglfX3NhdGFfcGh5X3Jlc2V0IC0gV2FrZS9yZXNldCBhIGxvdy1sZXZlbCBTQVRBIFBIWQogICoJQGFwOiBTQVRBIHBvcnQgYXNzb2NpYXRlZCB3aXRoIHRhcmdldCBTQVRBIFBIWS4KICAqCkBAIC0xNTU5LDI3ICsxNTM2LDE0IEBACiAJCQlicmVhazsKIAl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CiAKLQkvKiBUT0RPOiBwaHkgbGF5ZXIgd2l0aCBwb2xsaW5nLCB0aW1lb3V0cywgZXRjLiAqLwotCXNzdGF0dXMgPSBzY3JfcmVhZChhcCwgU0NSX1NUQVRVUyk7Ci0JaWYgKHNhdGFfZGV2X3ByZXNlbnQoYXApKSB7Ci0JCWNvbnN0IGNoYXIgKnNwZWVkOwotCQl1MzIgdG1wOworCS8qIHByaW50IGxpbmsgc3RhdHVzICovCisJc2F0YV9wcmludF9saW5rX3N0YXR1cyhhcCk7CiAKLQkJdG1wID0gKHNzdGF0dXMgPj4gNCkgJiAweGY7Ci0JCWlmICh0bXAgJiAoMSA8PCAwKSkKLQkJCXNwZWVkID0gIjEuNSI7Ci0JCWVsc2UgaWYgKHRtcCAmICgxIDw8IDEpKQotCQkJc3BlZWQgPSAiMy4wIjsKLQkJZWxzZQotCQkJc3BlZWQgPSAiPHVua25vd24+IjsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IFNBVEEgbGluayB1cCAlcyBHYnBzIChTU3RhdHVzICVYKVxuIiwKLQkJICAgICAgIGFwLT5pZCwgc3BlZWQsIHNzdGF0dXMpOworCS8qIFRPRE86IHBoeSBsYXllciB3aXRoIHBvbGxpbmcsIHRpbWVvdXRzLCBldGMuICovCisJaWYgKHNhdGFfZGV2X3ByZXNlbnQoYXApKQogCQlhdGFfcG9ydF9wcm9iZShhcCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IFNBVEEgbGluayBkb3duIChTU3RhdHVzICVYKVxuIiwKLQkJICAgICAgIGFwLT5pZCwgc3N0YXR1cyk7CisJZWxzZQogCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQl9CiAKIAlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUE9SVF9ESVNBQkxFRCkKIAkJcmV0dXJuOwpAQCAtMTYxMiw2ICsxNTc2LDIzIEBACiB9CiAKIC8qKgorICoJYXRhX2Rldl9wYWlyCQktCXJldHVybiBvdGhlciBkZXZpY2Ugb24gY2FibGUKKyAqCUBhcDogcG9ydAorICoJQGFkZXY6IGRldmljZQorICoKKyAqCU9idGFpbiB0aGUgb3RoZXIgZGV2aWNlIG9uIHRoZSBzYW1lIGNhYmxlLCBvciBpZiBub25lIGlzCisgKglwcmVzZW50IE5VTEwgaXMgcmV0dXJuZWQKKyAqLworCitzdHJ1Y3QgYXRhX2RldmljZSAqYXRhX2Rldl9wYWlyKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBhdGFfZGV2aWNlICpwYWlyID0gJmFwLT5kZXZpY2VbMSAtIGFkZXYtPmRldm5vXTsKKwlpZiAoIWF0YV9kZXZfcHJlc2VudChwYWlyKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHBhaXI7Cit9CisKKy8qKgogICoJYXRhX3BvcnRfZGlzYWJsZSAtIERpc2FibGUgcG9ydC4KICAqCUBhcDogUG9ydCB0byBiZSBkaXNhYmxlZC4KICAqCkBAIC0xNjM5LDcgKzE2MjAsNyBAQAogICogUElPIDAtNSwgTVdETUEgMC0yIGFuZCBVRE1BIDAtNiB0aW1pbmdzIChpbiBuYW5vc2Vjb25kcykuCiAgKiBUaGVzZSB3ZXJlIHRha2VuIGZyb20gQVRBL0FUQVBJLTYgc3RhbmRhcmQsIHJldiAwYSwgZXhjZXB0CiAgKiBmb3IgUElPIDUsIHdoaWNoIGlzIGEgbm9uc3RhbmRhcmQgZXh0ZW5zaW9uIGFuZCBVRE1BNiwgd2hpY2gKLSAqIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBieSBNYXh0b3IgZHJpdmVzLiAKKyAqIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBieSBNYXh0b3IgZHJpdmVzLgogICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyBhdGFfdGltaW5nW10gPSB7CkBAIC0xNjU0LDExICsxNjM1LDExIEBACiAJeyBYRkVSX1VETUFfMCwgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIDEyMCB9LAogCiAvKgl7IFhGRVJfVURNQV9TTE9XLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgMTUwIH0sICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogCXsgWEZFUl9NV19ETUFfMiwgIDI1LCAgIDAsICAgMCwgICAwLCAgNzAsICAyNSwgMTIwLCAgIDAgfSwKIAl7IFhGRVJfTVdfRE1BXzEsICA0NSwgICAwLCAgIDAsICAgMCwgIDgwLCAgNTAsIDE1MCwgICAwIH0sCiAJeyBYRkVSX01XX0RNQV8wLCAgNjAsICAgMCwgICAwLCAgIDAsIDIxNSwgMjE1LCA0ODAsICAgMCB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIAl7IFhGRVJfU1dfRE1BXzIsICA2MCwgICAwLCAgIDAsICAgMCwgMTIwLCAxMjAsIDI0MCwgICAwIH0sCiAJeyBYRkVSX1NXX0RNQV8xLCAgOTAsICAgMCwgICAwLCAgIDAsIDI0MCwgMjQwLCA0ODAsICAgMCB9LAogCXsgWEZFUl9TV19ETUFfMCwgMTIwLCAgIDAsICAgMCwgICAwLCA0ODAsIDQ4MCwgOTYwLCAgIDAgfSwKQEAgLTE3MTEsNyArMTY5Miw3IEBACiAJZm9yICh0ID0gYXRhX3RpbWluZzsgdC0+bW9kZSAhPSBzcGVlZDsgdCsrKQogCQlpZiAodC0+bW9kZSA9PSAweEZGKQogCQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHQ7IAorCXJldHVybiB0OwogfQogCiBpbnQgYXRhX3RpbWluZ19jb21wdXRlKHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LCB1bnNpZ25lZCBzaG9ydCBzcGVlZCwKQEAgLTE3MjEsNyArMTcwMiw3IEBACiAJc3RydWN0IGF0YV90aW1pbmcgcDsKIAogCS8qCi0JICogRmluZCB0aGUgbW9kZS4gCisJICogRmluZCB0aGUgbW9kZS4KIAkgKi8KIAogCWlmICghKHMgPSBhdGFfdGltaW5nX2ZpbmRfbW9kZShzcGVlZCkpKQpAQCAtMTc1Miw5ICsxNzMzLDkgQEAKIAlhdGFfdGltaW5nX3F1YW50aXplKHQsIHQsIFQsIFVUKTsKIAogCS8qCi0JICogRXZlbiBpbiBETUEvVURNQSBtb2RlcyB3ZSBzdGlsbCB1c2UgUElPIGFjY2VzcyBmb3IgSURFTlRJRlksIFMuTS5BLlIuVAotCSAqIGFuZCBzb21lIG90aGVyIGNvbW1hbmRzLiBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBETUEgY3ljbGUgdGltaW5nIGlzCi0JICogc2xvd2VyL2VxdWFsIHRoYW4gdGhlIGZhc3Rlc3QgUElPIHRpbWluZy4KKwkgKiBFdmVuIGluIERNQS9VRE1BIG1vZGVzIHdlIHN0aWxsIHVzZSBQSU8gYWNjZXNzIGZvciBJREVOVElGWSwKKwkgKiBTLk0uQS5SLlQgKiBhbmQgc29tZSBvdGhlciBjb21tYW5kcy4gV2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUKKwkgKiBETUEgY3ljbGUgdGltaW5nIGlzIHNsb3dlci9lcXVhbCB0aGFuIHRoZSBmYXN0ZXN0IFBJTyB0aW1pbmcuCiAJICovCiAKIAlpZiAoc3BlZWQgPiBYRkVSX1BJT180KSB7CkBAIC0xNzYzLDcgKzE3NDQsNyBAQAogCX0KIAogCS8qCi0JICogTGVuZ2h0ZW4gYWN0aXZlICYgcmVjb3ZlcnkgdGltZSBzbyB0aGF0IGN5Y2xlIHRpbWUgaXMgY29ycmVjdC4KKwkgKiBMZW5ndGhlbiBhY3RpdmUgJiByZWNvdmVyeSB0aW1lIHNvIHRoYXQgY3ljbGUgdGltZSBpcyBjb3JyZWN0LgogCSAqLwogCiAJaWYgKHQtPmFjdDhiICsgdC0+cmVjOGIgPCB0LT5jeWM4YikgewpAQCAtMTc3OSw5OCArMTc2MCw3NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgc2hpZnQ7Ci0JdTggYmFzZTsKLX0geGZlcl9tb2RlX2NsYXNzZXNbXSA9IHsKLQl7IEFUQV9TSElGVF9VRE1BLAlYRkVSX1VETUFfMCB9LAotCXsgQVRBX1NISUZUX01XRE1BLAlYRkVSX01XX0RNQV8wIH0sCi0JeyBBVEFfU0hJRlRfUElPLAlYRkVSX1BJT18wIH0sCi19OwotCi1zdGF0aWMgdTggYmFzZV9mcm9tX3NoaWZ0KHVuc2lnbmVkIGludCBzaGlmdCkKK3N0YXRpYyBpbnQgYXRhX2Rldl9zZXRfbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGZlcl9tb2RlX2NsYXNzZXMpOyBpKyspCi0JCWlmICh4ZmVyX21vZGVfY2xhc3Nlc1tpXS5zaGlmdCA9PSBzaGlmdCkKLQkJCXJldHVybiB4ZmVyX21vZGVfY2xhc3Nlc1tpXS5iYXNlOwotCi0JcmV0dXJuIDB4ZmY7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0YV9kZXZfc2V0X21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKLXsKLQlpbnQgb2ZzLCBpZHg7Ci0JdTggYmFzZTsKLQotCWlmICghYXRhX2Rldl9wcmVzZW50KGRldikgfHwgKGFwLT5mbGFncyAmIEFUQV9GTEFHX1BPUlRfRElTQUJMRUQpKQotCQlyZXR1cm47CisJdW5zaWduZWQgaW50IGVycl9tYXNrOworCWludCByYzsKIAogCWlmIChkZXYtPnhmZXJfc2hpZnQgPT0gQVRBX1NISUZUX1BJTykKIAkJZGV2LT5mbGFncyB8PSBBVEFfREZMQUdfUElPOwogCi0JYXRhX2Rldl9zZXRfeGZlcm1vZGUoYXAsIGRldik7CisJZXJyX21hc2sgPSBhdGFfZGV2X3NldF94ZmVybW9kZShhcCwgZGV2KTsKKwlpZiAoZXJyX21hc2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiYXRhJXU6IGZhaWxlZCB0byBzZXQgeGZlcm1vZGUgKGVycl9tYXNrPTB4JXgpXG4iLAorCQkgICAgICAgYXAtPmlkLCBlcnJfbWFzayk7CisJCXJldHVybiAtRUlPOworCX0KIAotCWJhc2UgPSBiYXNlX2Zyb21fc2hpZnQoZGV2LT54ZmVyX3NoaWZ0KTsKLQlvZnMgPSBkZXYtPnhmZXJfbW9kZSAtIGJhc2U7Ci0JaWR4ID0gb2ZzICsgZGV2LT54ZmVyX3NoaWZ0OwotCVdBUk5fT04oaWR4ID49IEFSUkFZX1NJWkUoeGZlcl9tb2RlX3N0cikpOworCXJjID0gYXRhX2Rldl9yZXZhbGlkYXRlKGFwLCBkZXYsIDApOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJhdGEldTogZmFpbGVkIHRvIHJldmFsaWRhdGUgYWZ0ZXIgc2V0IHhmZXJtb2RlXG4iLAorCQkgICAgICAgYXAtPmlkKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCURQUklOVEsoImlkeD0lZCB4ZmVyX3NoaWZ0PSV1LCB4ZmVyX21vZGU9MHgleCwgYmFzZT0weCV4LCBvZmZzZXQ9JWRcbiIsCi0JCWlkeCwgZGV2LT54ZmVyX3NoaWZ0LCAoaW50KWRldi0+eGZlcl9tb2RlLCAoaW50KWJhc2UsIG9mcyk7CisJRFBSSU5USygieGZlcl9zaGlmdD0ldSwgeGZlcl9tb2RlPTB4JXhcbiIsCisJCWRldi0+eGZlcl9zaGlmdCwgKGludClkZXYtPnhmZXJfbW9kZSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJhdGEldTogZGV2ICV1IGNvbmZpZ3VyZWQgZm9yICVzXG4iLAotCQlhcC0+aWQsIGRldi0+ZGV2bm8sIHhmZXJfbW9kZV9zdHJbaWR4XSk7CisJICAgICAgIGFwLT5pZCwgZGV2LT5kZXZubywKKwkgICAgICAgYXRhX21vZGVfc3RyaW5nKGF0YV94ZmVyX21vZGUybWFzayhkZXYtPnhmZXJfbW9kZSkpKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdGFfaG9zdF9zZXRfcGlvKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0JdW5zaWduZWQgaW50IG1hc2s7Ci0JaW50IHgsIGk7Ci0JdTggYmFzZSwgeGZlcl9tb2RlOwotCi0JbWFzayA9IGF0YV9nZXRfbW9kZV9tYXNrKGFwLCBBVEFfU0hJRlRfUElPKTsKLQl4ID0gZmdiKG1hc2spOwotCWlmICh4IDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogbm8gUElPIHN1cHBvcnRcbiIsIGFwLT5pZCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQliYXNlID0gYmFzZV9mcm9tX3NoaWZ0KEFUQV9TSElGVF9QSU8pOwotCXhmZXJfbW9kZSA9IGJhc2UgKyB4OwotCi0JRFBSSU5USygiYmFzZSAweCV4IHhmZXJfbW9kZSAweCV4IG1hc2sgMHgleCB4ICVkXG4iLAotCQkoaW50KWJhc2UsIChpbnQpeGZlcl9tb2RlLCBtYXNrLCB4KTsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewogCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5kZXZpY2VbaV07Ci0JCWlmIChhdGFfZGV2X3ByZXNlbnQoZGV2KSkgewotCQkJZGV2LT5waW9fbW9kZSA9IHhmZXJfbW9kZTsKLQkJCWRldi0+eGZlcl9tb2RlID0geGZlcl9tb2RlOwotCQkJZGV2LT54ZmVyX3NoaWZ0ID0gQVRBX1NISUZUX1BJTzsKLQkJCWlmIChhcC0+b3BzLT5zZXRfcGlvbW9kZSkKLQkJCQlhcC0+b3BzLT5zZXRfcGlvbW9kZShhcCwgZGV2KTsKKworCQlpZiAoIWF0YV9kZXZfcHJlc2VudChkZXYpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFkZXYtPnBpb19tb2RlKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogbm8gUElPIHN1cHBvcnQgZm9yIGRldmljZSAlZC5cbiIsIGFwLT5pZCwgaSk7CisJCQlyZXR1cm4gLTE7CiAJCX0KKworCQlkZXYtPnhmZXJfbW9kZSA9IGRldi0+cGlvX21vZGU7CisJCWRldi0+eGZlcl9zaGlmdCA9IEFUQV9TSElGVF9QSU87CisJCWlmIChhcC0+b3BzLT5zZXRfcGlvbW9kZSkKKwkJCWFwLT5vcHMtPnNldF9waW9tb2RlKGFwLCBkZXYpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGFfaG9zdF9zZXRfZG1hKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHU4IHhmZXJfbW9kZSwKLQkJCSAgICB1bnNpZ25lZCBpbnQgeGZlcl9zaGlmdCkKK3N0YXRpYyB2b2lkIGF0YV9ob3N0X3NldF9kbWEoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgewogCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5kZXZpY2VbaV07Ci0JCWlmIChhdGFfZGV2X3ByZXNlbnQoZGV2KSkgewotCQkJZGV2LT5kbWFfbW9kZSA9IHhmZXJfbW9kZTsKLQkJCWRldi0+eGZlcl9tb2RlID0geGZlcl9tb2RlOwotCQkJZGV2LT54ZmVyX3NoaWZ0ID0geGZlcl9zaGlmdDsKLQkJCWlmIChhcC0+b3BzLT5zZXRfZG1hbW9kZSkKLQkJCQlhcC0+b3BzLT5zZXRfZG1hbW9kZShhcCwgZGV2KTsKLQkJfQorCisJCWlmICghYXRhX2Rldl9wcmVzZW50KGRldikgfHwgIWRldi0+ZG1hX21vZGUpCisJCQljb250aW51ZTsKKworCQlkZXYtPnhmZXJfbW9kZSA9IGRldi0+ZG1hX21vZGU7CisJCWRldi0+eGZlcl9zaGlmdCA9IGF0YV94ZmVyX21vZGUyc2hpZnQoZGV2LT5kbWFfbW9kZSk7CisJCWlmIChhcC0+b3BzLT5zZXRfZG1hbW9kZSkKKwkJCWFwLT5vcHMtPnNldF9kbWFtb2RlKGFwLCBkZXYpOwogCX0KIH0KIApAQCAtMTg4MiwzNSArMTg0Miw0NyBAQAogICoKICAqCUxPQ0tJTkc6CiAgKglQQ0kvZXRjLiBidXMgcHJvYmUgc2VtLgotICoKICAqLwogc3RhdGljIHZvaWQgYXRhX3NldF9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0JdW5zaWduZWQgaW50IHhmZXJfc2hpZnQ7Ci0JdTggeGZlcl9tb2RlOwotCWludCByYzsKKwlpbnQgaSwgcmM7CiAKLQkvKiBzdGVwIDE6IGFsd2F5cyBzZXQgaG9zdCBQSU8gdGltaW5ncyAqLworCS8qIHN0ZXAgMTogY2FsY3VsYXRlIHhmZXJfbWFzayAqLworCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykgeworCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5kZXZpY2VbaV07CisJCXVuc2lnbmVkIGludCBwaW9fbWFzaywgZG1hX21hc2s7CisKKwkJaWYgKCFhdGFfZGV2X3ByZXNlbnQoZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCWF0YV9kZXZfeGZlcm1hc2soYXAsIGRldik7CisKKwkJLyogVE9ETzogbGV0IExMREQgZmlsdGVyIGRldi0+Kl9tYXNrIGhlcmUgKi8KKworCQlwaW9fbWFzayA9IGF0YV9wYWNrX3hmZXJtYXNrKGRldi0+cGlvX21hc2ssIDAsIDApOworCQlkbWFfbWFzayA9IGF0YV9wYWNrX3hmZXJtYXNrKDAsIGRldi0+bXdkbWFfbWFzaywgZGV2LT51ZG1hX21hc2spOworCQlkZXYtPnBpb19tb2RlID0gYXRhX3hmZXJfbWFzazJtb2RlKHBpb19tYXNrKTsKKwkJZGV2LT5kbWFfbW9kZSA9IGF0YV94ZmVyX21hc2sybW9kZShkbWFfbWFzayk7CisJfQorCisJLyogc3RlcCAyOiBhbHdheXMgc2V0IGhvc3QgUElPIHRpbWluZ3MgKi8KIAlyYyA9IGF0YV9ob3N0X3NldF9waW8oYXApOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwogCi0JLyogc3RlcCAyOiBjaG9vc2UgdGhlIGJlc3QgZGF0YSB4ZmVyIG1vZGUgKi8KLQl4ZmVyX21vZGUgPSB4ZmVyX3NoaWZ0ID0gMDsKLQlyYyA9IGF0YV9jaG9vc2VfeGZlcl9tb2RlKGFwLCAmeGZlcl9tb2RlLCAmeGZlcl9zaGlmdCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQkvKiBzdGVwIDM6IGlmIHRoYXQgeGZlciBtb2RlIGlzbid0IFBJTywgc2V0IGhvc3QgRE1BIHRpbWluZ3MgKi8KLQlpZiAoeGZlcl9zaGlmdCAhPSBBVEFfU0hJRlRfUElPKQotCQlhdGFfaG9zdF9zZXRfZG1hKGFwLCB4ZmVyX21vZGUsIHhmZXJfc2hpZnQpOworCS8qIHN0ZXAgMzogc2V0IGhvc3QgRE1BIHRpbWluZ3MgKi8KKwlhdGFfaG9zdF9zZXRfZG1hKGFwKTsKIAogCS8qIHN0ZXAgNDogdXBkYXRlIGRldmljZXMnIHhmZXIgbW9kZSAqLwotCWF0YV9kZXZfc2V0X21vZGUoYXAsICZhcC0+ZGV2aWNlWzBdKTsKLQlhdGFfZGV2X3NldF9tb2RlKGFwLCAmYXAtPmRldmljZVsxXSk7CisJZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKSB7CisJCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmRldmljZVtpXTsKIAotCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19QT1JUX0RJU0FCTEVEKQotCQlyZXR1cm47CisJCWlmICghYXRhX2Rldl9wcmVzZW50KGRldikpCisJCQljb250aW51ZTsKKworCQlpZiAoYXRhX2Rldl9zZXRfbW9kZShhcCwgZGV2KSkKKwkJCWdvdG8gZXJyX291dDsKKwl9CiAKIAlpZiAoYXAtPm9wcy0+cG9zdF9zZXRfbW9kZSkKIAkJYXAtPm9wcy0+cG9zdF9zZXRfbW9kZShhcCk7CkBAIC0xOTIyLDYgKzE4OTQsMjYgQEAKIH0KIAogLyoqCisgKglhdGFfdGZfdG9faG9zdCAtIGlzc3VlIEFUQSB0YXNrZmlsZSB0byBob3N0IGNvbnRyb2xsZXIKKyAqCUBhcDogcG9ydCB0byB3aGljaCBjb21tYW5kIGlzIGJlaW5nIGlzc3VlZAorICoJQHRmOiBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0CisgKgorICoJSXNzdWVzIEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQgdG8gQVRBIGhvc3QgY29udHJvbGxlciwKKyAqCXdpdGggcHJvcGVyIHN5bmNocm9uaXphdGlvbiB3aXRoIGludGVycnVwdCBoYW5kbGVyIGFuZAorICoJb3RoZXIgdGhyZWFkcy4KKyAqCisgKglMT0NLSU5HOgorICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgYXRhX3RmX3RvX2hvc3Qoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQoreworCWFwLT5vcHMtPnRmX2xvYWQoYXAsIHRmKTsKKwlhcC0+b3BzLT5leGVjX2NvbW1hbmQoYXAsIHRmKTsKK30KKworLyoqCiAgKglhdGFfYnVzeV9zbGVlcCAtIHNsZWVwIHVudGlsIEJTWSBjbGVhcnMsIG9yIHRpbWVvdXQKICAqCUBhcDogcG9ydCBjb250YWluaW5nIHN0YXR1cyByZWdpc3RlciB0byBiZSBwb2xsZWQKICAqCUB0bW91dF9wYXQ6IGltcGF0aWVuY2UgdGltZW91dApAQCAtMTkzMSwxMiArMTkyMywxMCBAQAogICoJb3IgYSB0aW1lb3V0IG9jY3Vycy4KICAqCiAgKglMT0NLSU5HOiBOb25lLgotICoKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0YV9idXN5X3NsZWVwIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHRtb3V0X3BhdCwKLQkJCSAgICAJICAgIHVuc2lnbmVkIGxvbmcgdG1vdXQpCit1bnNpZ25lZCBpbnQgYXRhX2J1c3lfc2xlZXAgKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgdG1vdXRfcGF0LCB1bnNpZ25lZCBsb25nIHRtb3V0KQogewogCXVuc2lnbmVkIGxvbmcgdGltZXJfc3RhcnQsIHRpbWVvdXQ7CiAJdTggc3RhdHVzOwpAQCAtMjA4Myw5ICsyMDczLDE5IEBACiAJICogc3RhdHVzIGlzIGNoZWNrZWQuICBCZWNhdXNlIHdhaXRpbmcgZm9yICJhIHdoaWxlIiBiZWZvcmUKIAkgKiBjaGVja2luZyBzdGF0dXMgaXMgZmluZSwgcG9zdCBTUlNULCB3ZSBwZXJmb3JtIHRoaXMgbWFnaWMKIAkgKiBkZWxheSBoZXJlIGFzIHdlbGwuCisJICoKKwkgKiBPbGQgZHJpdmVycy9pZGUgdXNlcyB0aGUgMm1TIHJ1bGUgYW5kIHRoZW4gd2FpdHMgZm9yIHJlYWR5CiAJICovCiAJbXNsZWVwKDE1MCk7CiAKKworCS8qIEJlZm9yZSB3ZSBwZXJmb3JtIHBvc3QgcmVzZXQgcHJvY2Vzc2luZyB3ZSB3YW50IHRvIHNlZSBpZgorCSAgIHRoZSBidXMgc2hvd3MgMHhGRiBiZWNhdXNlIHRoZSBvZGQgY2xvd24gZm9yZ2V0cyB0aGUgRDcgcHVsbGRvd24KKwkgICByZXNpc3RvciAqLworCisJaWYgKGF0YV9jaGVja19zdGF0dXMoYXApID09IDB4RkYpCisJCXJldHVybiAxOwkvKiBQb3NpdGl2ZSBpcyBmYWlsdXJlIGZvciBzb21lIHJlYXNvbiAqLworCiAJYXRhX2J1c19wb3N0X3Jlc2V0KGFwLCBkZXZtYXNrKTsKIAogCXJldHVybiAwOwpAQCAtMjE1NSw5ICsyMTU1LDkgQEAKIAkvKgogCSAqIGRldGVybWluZSBieSBzaWduYXR1cmUgd2hldGhlciB3ZSBoYXZlIEFUQSBvciBBVEFQSSBkZXZpY2VzCiAJICovCi0JZXJyID0gYXRhX2Rldl90cnlfY2xhc3NpZnkoYXAsIDApOworCWFwLT5kZXZpY2VbMF0uY2xhc3MgPSBhdGFfZGV2X3RyeV9jbGFzc2lmeShhcCwgMCwgJmVycik7CiAJaWYgKChzbGF2ZV9wb3NzaWJsZSkgJiYgKGVyciAhPSAweDgxKSkKLQkJYXRhX2Rldl90cnlfY2xhc3NpZnkoYXAsIDEpOworCQlhcC0+ZGV2aWNlWzFdLmNsYXNzID0gYXRhX2Rldl90cnlfY2xhc3NpZnkoYXAsIDEsICZlcnIpOwogCiAJLyogcmUtZW5hYmxlIGludGVycnVwdHMgKi8KIAlpZiAoYXAtPmlvYWRkci5jdGxfYWRkcikJLyogRklYTUU6IGhhY2suIGNyZWF0ZSBhIGhvb2sgaW5zdGVhZCAqLwpAQCAtMjE5MiwxOTIgKzIxOTIsNTU3IEBACiAJRFBSSU5USygiRVhJVFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0YV9wcl9ibGFja2xpc3RlZChjb25zdCBzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhdGFfcGh5X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YSV1OiBkZXYgJXUgaXMgb24gRE1BIGJsYWNrbGlzdCwgZGlzYWJsaW5nIERNQVxuIiwKLQkJYXAtPmlkLCBkZXYtPmRldm5vKTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgKEhaICogNSk7CisJdTMyIHNzdGF0dXM7CisKKwlzY3Jfd3JpdGVfZmx1c2goYXAsIFNDUl9DT05UUk9MLCAweDMwMCk7CisKKwkvKiBXYWl0IGZvciBwaHkgdG8gYmVjb21lIHJlYWR5LCBpZiBuZWNlc3NhcnkuICovCisJZG8geworCQltc2xlZXAoMjAwKTsKKwkJc3N0YXR1cyA9IHNjcl9yZWFkKGFwLCBTQ1JfU1RBVFVTKTsKKwkJaWYgKChzc3RhdHVzICYgMHhmKSAhPSAxKQorCQkJcmV0dXJuIDA7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOworCisJcmV0dXJuIC0xOworfQorCisvKioKKyAqCWF0YV9zdGRfcHJvYmVpbml0IC0gaW5pdGlhbGl6ZSBwcm9iaW5nCisgKglAYXA6IHBvcnQgdG8gYmUgcHJvYmVkCisgKgorICoJQGFwIGlzIGFib3V0IHRvIGJlIHByb2JlZC4gIEluaXRpYWxpemUgaXQuICBUaGlzIGZ1bmN0aW9uIGlzCisgKgl0byBiZSB1c2VkIGFzIHN0YW5kYXJkIGNhbGxiYWNrIGZvciBhdGFfZHJpdmVfcHJvYmVfcmVzZXQoKS4KKyAqCisgKglOT1RFISEhIERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBhcyBwcm9iZWluaXQgaWYgYSBsb3cgbGV2ZWwKKyAqCWRyaXZlciBpbXBsZW1lbnRzIG9ubHkgaGFyZHJlc2V0LiAgSnVzdCBwYXNzIE5VTEwgYXMgcHJvYmVpbml0CisgKglpbiB0aGF0IGNhc2UuICBVc2luZyB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IG9rYXkgYnV0IGRvaW5nCisgKglzbyBtYWtlcyByZXNldCBzZXF1ZW5jZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwKKyAqCS0+cGh5X3Jlc2V0IGltcGxlbWVudGF0aW9uIGFuZCBKZWZmIG5lcnZvdXMuICA6LVAKKyAqLworZXh0ZXJuIHZvaWQgYXRhX3N0ZF9wcm9iZWluaXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0FUQSAmJiBhcC0+b3BzLT5zY3JfcmVhZCkgeworCQlzYXRhX3BoeV9yZXN1bWUoYXApOworCQlpZiAoc2F0YV9kZXZfcHJlc2VudChhcCkpCisJCQlhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKTsKKwl9Cit9CisKKy8qKgorICoJYXRhX3N0ZF9zb2Z0cmVzZXQgLSByZXNldCBob3N0IHBvcnQgdmlhIEFUQSBTUlNUCisgKglAYXA6IHBvcnQgdG8gcmVzZXQKKyAqCUB2ZXJib3NlOiBmYWlsIHZlcmJvc2VseQorICoJQGNsYXNzZXM6IHJlc3VsdGluZyBjbGFzc2VzIG9mIGF0dGFjaGVkIGRldmljZXMKKyAqCisgKglSZXNldCBob3N0IHBvcnQgdXNpbmcgQVRBIFNSU1QuICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIHVzZWQKKyAqCWFzIHN0YW5kYXJkIGNhbGxiYWNrIGZvciBhdGFfZHJpdmVfKl9yZXNldCgpIGZ1bmN0aW9ucy4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IGF0YV9zdGRfc29mdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB2ZXJib3NlLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCit7CisJdW5zaWduZWQgaW50IHNsYXZlX3Bvc3NpYmxlID0gYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9TUzsKKwl1bnNpZ25lZCBpbnQgZGV2bWFzayA9IDAsIGVycl9tYXNrOworCXU4IGVycjsKKworCURQUklOVEsoIkVOVEVSXG4iKTsKKworCWlmIChhcC0+b3BzLT5zY3JfcmVhZCAmJiAhc2F0YV9kZXZfcHJlc2VudChhcCkpIHsKKwkJY2xhc3Nlc1swXSA9IEFUQV9ERVZfTk9ORTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogZGV0ZXJtaW5lIGlmIGRldmljZSAwLzEgYXJlIHByZXNlbnQgKi8KKwlpZiAoYXRhX2RldmNoayhhcCwgMCkpCisJCWRldm1hc2sgfD0gKDEgPDwgMCk7CisJaWYgKHNsYXZlX3Bvc3NpYmxlICYmIGF0YV9kZXZjaGsoYXAsIDEpKQorCQlkZXZtYXNrIHw9ICgxIDw8IDEpOworCisJLyogc2VsZWN0IGRldmljZSAwIGFnYWluICovCisJYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMCk7CisKKwkvKiBpc3N1ZSBidXMgcmVzZXQgKi8KKwlEUFJJTlRLKCJhYm91dCB0byBzb2Z0cmVzZXQsIGRldm1hc2s9JXhcbiIsIGRldm1hc2spOworCWVycl9tYXNrID0gYXRhX2J1c19zb2Z0cmVzZXQoYXAsIGRldm1hc2spOworCWlmIChlcnJfbWFzaykgeworCQlpZiAodmVyYm9zZSkKKwkJCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IFNSU1QgZmFpbGVkIChlcnJfbWFzaz0weCV4KVxuIiwKKwkJCSAgICAgICBhcC0+aWQsIGVycl9tYXNrKTsKKwkJZWxzZQorCQkJRFBSSU5USygiRVhJVCwgc29mdHJlc2V0IGZhaWxlZCAoZXJyX21hc2s9MHgleClcbiIsCisJCQkJZXJyX21hc2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBkZXRlcm1pbmUgYnkgc2lnbmF0dXJlIHdoZXRoZXIgd2UgaGF2ZSBBVEEgb3IgQVRBUEkgZGV2aWNlcyAqLworCWNsYXNzZXNbMF0gPSBhdGFfZGV2X3RyeV9jbGFzc2lmeShhcCwgMCwgJmVycik7CisJaWYgKHNsYXZlX3Bvc3NpYmxlICYmIGVyciAhPSAweDgxKQorCQljbGFzc2VzWzFdID0gYXRhX2Rldl90cnlfY2xhc3NpZnkoYXAsIDEsICZlcnIpOworCisgb3V0OgorCURQUklOVEsoIkVYSVQsIGNsYXNzZXNbMF09JXUgWzFdPSV1XG4iLCBjbGFzc2VzWzBdLCBjbGFzc2VzWzFdKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglzYXRhX3N0ZF9oYXJkcmVzZXQgLSByZXNldCBob3N0IHBvcnQgdmlhIFNBVEEgcGh5IHJlc2V0CisgKglAYXA6IHBvcnQgdG8gcmVzZXQKKyAqCUB2ZXJib3NlOiBmYWlsIHZlcmJvc2VseQorICoJQGNsYXNzOiByZXN1bHRpbmcgY2xhc3Mgb2YgYXR0YWNoZWQgZGV2aWNlCisgKgorICoJU0FUQSBwaHktcmVzZXQgaG9zdCBwb3J0IHVzaW5nIERFVCBiaXRzIG9mIFNDb250cm9sIHJlZ2lzdGVyLgorICoJVGhpcyBmdW5jdGlvbiBpcyB0byBiZSB1c2VkIGFzIHN0YW5kYXJkIGNhbGxiYWNrIGZvcgorICoJYXRhX2RyaXZlXypfcmVzZXQoKS4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KKyAqLworaW50IHNhdGFfc3RkX2hhcmRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgdmVyYm9zZSwgdW5zaWduZWQgaW50ICpjbGFzcykKK3sKKwlEUFJJTlRLKCJFTlRFUlxuIik7CisKKwkvKiBJc3N1ZSBwaHkgd2FrZS9yZXNldCAqLworCXNjcl93cml0ZV9mbHVzaChhcCwgU0NSX0NPTlRST0wsIDB4MzAxKTsKKworCS8qCisJICogQ291bGRuJ3QgZmluZCBhbnl0aGluZyBpbiBTQVRBIEkvSUkgc3BlY3MsIGJ1dCBBSENJLTEuMQorCSAqIDEwLjQuMiBzYXlzIGF0IGxlYXN0IDEgbXMuCisJICovCisJbXNsZWVwKDEpOworCisJLyogQnJpbmcgcGh5IGJhY2sgKi8KKwlzYXRhX3BoeV9yZXN1bWUoYXApOworCisJLyogVE9ETzogcGh5IGxheWVyIHdpdGggcG9sbGluZywgdGltZW91dHMsIGV0Yy4gKi8KKwlpZiAoIXNhdGFfZGV2X3ByZXNlbnQoYXApKSB7CisJCSpjbGFzcyA9IEFUQV9ERVZfTk9ORTsKKwkJRFBSSU5USygiRVhJVCwgbGluayBvZmZsaW5lXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGF0YV9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQk9PVF9RVUlDSywgQVRBX1RNT1VUX0JPT1QpKSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogQ09NUkVTRVQgZmFpbGVkICIKKwkJCSAgICAgICAiKGRldmljZSBub3QgcmVhZHkpXG4iLCBhcC0+aWQpOworCQllbHNlCisJCQlEUFJJTlRLKCJFWElULCBkZXZpY2Ugbm90IHJlYWR5XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJYXAtPm9wcy0+ZGV2X3NlbGVjdChhcCwgMCk7CS8qIHByb2JhYmx5IHVubmVjZXNzYXJ5ICovCisKKwkqY2xhc3MgPSBhdGFfZGV2X3RyeV9jbGFzc2lmeShhcCwgMCwgTlVMTCk7CisKKwlEUFJJTlRLKCJFWElULCBjbGFzcz0ldVxuIiwgKmNsYXNzKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglhdGFfc3RkX3Bvc3RyZXNldCAtIHN0YW5kYXJkIHBvc3RyZXNldCBjYWxsYmFjaworICoJQGFwOiB0aGUgdGFyZ2V0IGF0YV9wb3J0CisgKglAY2xhc3NlczogY2xhc3NlcyBvZiBhdHRhY2hlZCBkZXZpY2VzCisgKgorICoJVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZXNldC4gIE5vdGUgdGhhdAorICoJdGhlIGRldmljZSBtaWdodCBoYXZlIGJlZW4gcmVzZXQgbW9yZSB0aGFuIG9uY2UgdXNpbmcKKyAqCWRpZmZlcmVudCByZXNldCBtZXRob2RzIGJlZm9yZSBwb3N0cmVzZXQgaXMgaW52b2tlZC4KKyAqCisgKglUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIHVzZWQgYXMgc3RhbmRhcmQgY2FsbGJhY2sgZm9yCisgKglhdGFfZHJpdmVfKl9yZXNldCgpLgorICoKKyAqCUxPQ0tJTkc6CisgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKKyAqLwordm9pZCBhdGFfc3RkX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCit7CisJRFBSSU5USygiRU5URVJcbiIpOworCisJLyogc2V0IGNhYmxlIHR5cGUgaWYgaXQgaXNuJ3QgYWxyZWFkeSBzZXQgKi8KKwlpZiAoYXAtPmNibCA9PSBBVEFfQ0JMX05PTkUgJiYgYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0FUQSkKKwkJYXAtPmNibCA9IEFUQV9DQkxfU0FUQTsKKworCS8qIHByaW50IGxpbmsgc3RhdHVzICovCisJaWYgKGFwLT5jYmwgPT0gQVRBX0NCTF9TQVRBKQorCQlzYXRhX3ByaW50X2xpbmtfc3RhdHVzKGFwKTsKKworCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisJaWYgKGFwLT5pb2FkZHIuY3RsX2FkZHIpCS8qIEZJWE1FOiBoYWNrLiBjcmVhdGUgYSBob29rIGluc3RlYWQgKi8KKwkJYXRhX2lycV9vbihhcCk7CisKKwkvKiBpcyBkb3VibGUtc2VsZWN0IHJlYWxseSBuZWNlc3Nhcnk/ICovCisJaWYgKGNsYXNzZXNbMF0gIT0gQVRBX0RFVl9OT05FKQorCQlhcC0+b3BzLT5kZXZfc2VsZWN0KGFwLCAxKTsKKwlpZiAoY2xhc3Nlc1sxXSAhPSBBVEFfREVWX05PTkUpCisJCWFwLT5vcHMtPmRldl9zZWxlY3QoYXAsIDApOworCisJLyogYmFpbCBvdXQgaWYgbm8gZGV2aWNlIGlzIHByZXNlbnQgKi8KKwlpZiAoY2xhc3Nlc1swXSA9PSBBVEFfREVWX05PTkUgJiYgY2xhc3Nlc1sxXSA9PSBBVEFfREVWX05PTkUpIHsKKwkJRFBSSU5USygiRVhJVCwgbm8gZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHNldCB1cCBkZXZpY2UgY29udHJvbCAqLworCWlmIChhcC0+aW9hZGRyLmN0bF9hZGRyKSB7CisJCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19NTUlPKQorCQkJd3JpdGViKGFwLT5jdGwsICh2b2lkIF9faW9tZW0gKikgYXAtPmlvYWRkci5jdGxfYWRkcik7CisJCWVsc2UKKwkJCW91dGIoYXAtPmN0bCwgYXAtPmlvYWRkci5jdGxfYWRkcik7CisJfQorCisJRFBSSU5USygiRVhJVFxuIik7Cit9CisKKy8qKgorICoJYXRhX3N0ZF9wcm9iZV9yZXNldCAtIHN0YW5kYXJkIHByb2JlIHJlc2V0IG1ldGhvZAorICoJQGFwOiBwcm90IHRvIHBlcmZvcm0gcHJvYmUtcmVzZXQKKyAqCUBjbGFzc2VzOiByZXN1bHRpbmcgY2xhc3NlcyBvZiBhdHRhY2hlZCBkZXZpY2VzCisgKgorICoJVGhlIHN0b2NrIG9mZi10aGUtc2hlbGYgLT5wcm9iZV9yZXNldCBtZXRob2QuCisgKgorICoJTE9DS0lORzoKKyAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQorICoKKyAqCVJFVFVSTlM6CisgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCisgKi8KK2ludCBhdGFfc3RkX3Byb2JlX3Jlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3NlcykKK3sKKwlhdGFfcmVzZXRfZm5fdCBoYXJkcmVzZXQ7CisKKwloYXJkcmVzZXQgPSBOVUxMOworCWlmIChhcC0+ZmxhZ3MgJiBBVEFfRkxBR19TQVRBICYmIGFwLT5vcHMtPnNjcl9yZWFkKQorCQloYXJkcmVzZXQgPSBzYXRhX3N0ZF9oYXJkcmVzZXQ7CisKKwlyZXR1cm4gYXRhX2RyaXZlX3Byb2JlX3Jlc2V0KGFwLCBhdGFfc3RkX3Byb2JlaW5pdCwKKwkJCQkgICAgIGF0YV9zdGRfc29mdHJlc2V0LCBoYXJkcmVzZXQsCisJCQkJICAgICBhdGFfc3RkX3Bvc3RyZXNldCwgY2xhc3Nlcyk7Cit9CisKK3N0YXRpYyBpbnQgZG9fcHJvYmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgYXRhX3Jlc2V0X2ZuX3QgcmVzZXQsCisJCQkgIGF0YV9wb3N0cmVzZXRfZm5fdCBwb3N0cmVzZXQsCisJCQkgIHVuc2lnbmVkIGludCAqY2xhc3NlcykKK3sKKwlpbnQgaSwgcmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspCisJCWNsYXNzZXNbaV0gPSBBVEFfREVWX1VOS05PV047CisKKwlyYyA9IHJlc2V0KGFwLCAwLCBjbGFzc2VzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIElmIGFueSBjbGFzcyBpc24ndCBBVEFfREVWX1VOS05PV04sIGNvbnNpZGVyIGNsYXNzaWZpY2F0aW9uCisJICogaXMgY29tcGxldGUgYW5kIGNvbnZlcnQgYWxsIEFUQV9ERVZfVU5LTk9XTiB0bworCSAqIEFUQV9ERVZfTk9ORS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspCisJCWlmIChjbGFzc2VzW2ldICE9IEFUQV9ERVZfVU5LTk9XTikKKwkJCWJyZWFrOworCisJaWYgKGkgPCBBVEFfTUFYX0RFVklDRVMpCisJCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykKKwkJCWlmIChjbGFzc2VzW2ldID09IEFUQV9ERVZfVU5LTk9XTikKKwkJCQljbGFzc2VzW2ldID0gQVRBX0RFVl9OT05FOworCisJaWYgKHBvc3RyZXNldCkKKwkJcG9zdHJlc2V0KGFwLCBjbGFzc2VzKTsKKworCXJldHVybiBjbGFzc2VzWzBdICE9IEFUQV9ERVZfVU5LTk9XTiA/IDAgOiAtRU5PREVWOworfQorCisvKioKKyAqCWF0YV9kcml2ZV9wcm9iZV9yZXNldCAtIFBlcmZvcm0gcHJvYmUgcmVzZXQgd2l0aCBnaXZlbiBtZXRob2RzCisgKglAYXA6IHBvcnQgdG8gcmVzZXQKKyAqCUBwcm9iZWluaXQ6IHByb2JlaW5pdCBtZXRob2QgKGNhbiBiZSBOVUxMKQorICoJQHNvZnRyZXNldDogc29mdHJlc2V0IG1ldGhvZCAoY2FuIGJlIE5VTEwpCisgKglAaGFyZHJlc2V0OiBoYXJkcmVzZXQgbWV0aG9kIChjYW4gYmUgTlVMTCkKKyAqCUBwb3N0cmVzZXQ6IHBvc3RyZXNldCBtZXRob2QgKGNhbiBiZSBOVUxMKQorICoJQGNsYXNzZXM6IHJlc3VsdGluZyBjbGFzc2VzIG9mIGF0dGFjaGVkIGRldmljZXMKKyAqCisgKglSZXNldCB0aGUgc3BlY2lmaWVkIHBvcnQgYW5kIGNsYXNzaWZ5IGF0dGFjaGVkIGRldmljZXMgdXNpbmcKKyAqCWdpdmVuIG1ldGhvZHMuICBUaGlzIGZ1bmN0aW9uIHByZWZlcnMgc29mdHJlc2V0IGJ1dCB0cmllcyBhbGwKKyAqCXBvc3NpYmxlIHJlc2V0IHNlcXVlbmNlcyB0byByZXNldCBhbmQgY2xhc3NpZnkgZGV2aWNlcy4gIFRoaXMKKyAqCWZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGNvbnN0cnVjdGluZyAtPnByb2JlX3Jlc2V0CisgKgljYWxsYmFjayBieSBsb3cgbGV2ZWwgZHJpdmVycy4KKyAqCisgKglSZXNldCBtZXRob2RzIHNob3VsZCBmb2xsb3cgdGhlIGZvbGxvd2luZyBydWxlcy4KKyAqCisgKgktIFJldHVybiAwIG9uIHN1Y2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCisgKgktIElmIGNsYXNzaWZpY2F0aW9uIGlzIHN1cHBvcnRlZCwgZmlsbCBjbGFzc2VzW10gd2l0aAorICoJICByZWNvZ25pemVkIGNsYXNzIGNvZGVzLgorICoJLSBJZiBjbGFzc2lmaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCBsZWF2ZSBjbGFzc2VzW10gYWxvbmUuCisgKgktIElmIHZlcmJvc2UgaXMgbm9uLXplcm8sIHByaW50IGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZTsKKyAqCSAgb3RoZXJ3aXNlLCBzaHV0IHVwLgorICoKKyAqCUxPQ0tJTkc6CisgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkKKyAqCisgKglSRVRVUk5TOgorICoJMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIG5vIHJlc2V0IG1ldGhvZCBpcyBhdmFsaWFibGUsIC1FTk9ERVYKKyAqCWlmIGNsYXNzaWZpY2F0aW9uIGZhaWxzLCBhbmQgYW55IGVycm9yIGNvZGUgZnJvbSByZXNldAorICoJbWV0aG9kcy4KKyAqLworaW50IGF0YV9kcml2ZV9wcm9iZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBhdGFfcHJvYmVpbml0X2ZuX3QgcHJvYmVpbml0LAorCQkJICBhdGFfcmVzZXRfZm5fdCBzb2Z0cmVzZXQsIGF0YV9yZXNldF9mbl90IGhhcmRyZXNldCwKKwkJCSAgYXRhX3Bvc3RyZXNldF9mbl90IHBvc3RyZXNldCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKQoreworCWludCByYyA9IC1FSU5WQUw7CisKKwlpZiAocHJvYmVpbml0KQorCQlwcm9iZWluaXQoYXApOworCisJaWYgKHNvZnRyZXNldCkgeworCQlyYyA9IGRvX3Byb2JlX3Jlc2V0KGFwLCBzb2Z0cmVzZXQsIHBvc3RyZXNldCwgY2xhc3Nlcyk7CisJCWlmIChyYyA9PSAwKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFoYXJkcmVzZXQpCisJCXJldHVybiByYzsKKworCXJjID0gZG9fcHJvYmVfcmVzZXQoYXAsIGhhcmRyZXNldCwgcG9zdHJlc2V0LCBjbGFzc2VzKTsKKwlpZiAocmMgPT0gMCB8fCByYyAhPSAtRU5PREVWKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoc29mdHJlc2V0KQorCQlyYyA9IGRvX3Byb2JlX3Jlc2V0KGFwLCBzb2Z0cmVzZXQsIHBvc3RyZXNldCwgY2xhc3Nlcyk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICoJYXRhX2Rldl9zYW1lX2RldmljZSAtIERldGVybWluZSB3aGV0aGVyIG5ldyBJRCBtYXRjaGVzIGNvbmZpZ3VyZWQgZGV2aWNlCisgKglAYXA6IHBvcnQgb24gd2hpY2ggdGhlIGRldmljZSB0byBjb21wYXJlIGFnYWluc3QgcmVzaWRlcworICoJQGRldjogZGV2aWNlIHRvIGNvbXBhcmUgYWdhaW5zdAorICoJQG5ld19jbGFzczogY2xhc3Mgb2YgdGhlIG5ldyBkZXZpY2UKKyAqCUBuZXdfaWQ6IElERU5USUZZIHBhZ2Ugb2YgdGhlIG5ldyBkZXZpY2UKKyAqCisgKglDb21wYXJlIEBuZXdfY2xhc3MgYW5kIEBuZXdfaWQgYWdhaW5zdCBAZGV2IGFuZCBkZXRlcm1pbmUKKyAqCXdoZXRoZXIgQGRldiBpcyB0aGUgZGV2aWNlIGluZGljYXRlZCBieSBAbmV3X2NsYXNzIGFuZAorICoJQG5ld19pZC4KKyAqCisgKglMT0NLSU5HOgorICoJTm9uZS4KKyAqCisgKglSRVRVUk5TOgorICoJMSBpZiBAZGV2IG1hdGNoZXMgQG5ld19jbGFzcyBhbmQgQG5ld19pZCwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgYXRhX2Rldl9zYW1lX2RldmljZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBuZXdfY2xhc3MsIGNvbnN0IHUxNiAqbmV3X2lkKQoreworCWNvbnN0IHUxNiAqb2xkX2lkID0gZGV2LT5pZDsKKwl1bnNpZ25lZCBjaGFyIG1vZGVsWzJdWzQxXSwgc2VyaWFsWzJdWzIxXTsKKwl1NjQgbmV3X25fc2VjdG9yczsKKworCWlmIChkZXYtPmNsYXNzICE9IG5ld19jbGFzcykgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiYXRhJXU6IGRldiAldSBjbGFzcyBtaXNtYXRjaCAlZCAhPSAlZFxuIiwKKwkJICAgICAgIGFwLT5pZCwgZGV2LT5kZXZubywgZGV2LT5jbGFzcywgbmV3X2NsYXNzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYXRhX2lkX2Nfc3RyaW5nKG9sZF9pZCwgbW9kZWxbMF0sIEFUQV9JRF9QUk9EX09GUywgc2l6ZW9mKG1vZGVsWzBdKSk7CisJYXRhX2lkX2Nfc3RyaW5nKG5ld19pZCwgbW9kZWxbMV0sIEFUQV9JRF9QUk9EX09GUywgc2l6ZW9mKG1vZGVsWzFdKSk7CisJYXRhX2lkX2Nfc3RyaW5nKG9sZF9pZCwgc2VyaWFsWzBdLCBBVEFfSURfU0VSTk9fT0ZTLCBzaXplb2Yoc2VyaWFsWzBdKSk7CisJYXRhX2lkX2Nfc3RyaW5nKG5ld19pZCwgc2VyaWFsWzFdLCBBVEFfSURfU0VSTk9fT0ZTLCBzaXplb2Yoc2VyaWFsWzFdKSk7CisJbmV3X25fc2VjdG9ycyA9IGF0YV9pZF9uX3NlY3RvcnMobmV3X2lkKTsKKworCWlmIChzdHJjbXAobW9kZWxbMF0sIG1vZGVsWzFdKSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiYXRhJXU6IGRldiAldSBtb2RlbCBudW1iZXIgbWlzbWF0Y2ggJyVzJyAhPSAnJXMnXG4iLAorCQkgICAgICAgYXAtPmlkLCBkZXYtPmRldm5vLCBtb2RlbFswXSwgbW9kZWxbMV0pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHNlcmlhbFswXSwgc2VyaWFsWzFdKSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiYXRhJXU6IGRldiAldSBzZXJpYWwgbnVtYmVyIG1pc21hdGNoICclcycgIT0gJyVzJ1xuIiwKKwkJICAgICAgIGFwLT5pZCwgZGV2LT5kZXZubywgc2VyaWFsWzBdLCBzZXJpYWxbMV0pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSAmJiBkZXYtPm5fc2VjdG9ycyAhPSBuZXdfbl9zZWN0b3JzKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJhdGEldTogZGV2ICV1IG5fc2VjdG9ycyBtaXNtYXRjaCAlbGx1ICE9ICVsbHVcbiIsCisJCSAgICAgICBhcC0+aWQsIGRldi0+ZGV2bm8sICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5uX3NlY3RvcnMsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld19uX3NlY3RvcnMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKglhdGFfZGV2X3JldmFsaWRhdGUgLSBSZXZhbGlkYXRlIEFUQSBkZXZpY2UKKyAqCUBhcDogcG9ydCBvbiB3aGljaCB0aGUgZGV2aWNlIHRvIHJldmFsaWRhdGUgcmVzaWRlcworICoJQGRldjogZGV2aWNlIHRvIHJldmFsaWRhdGUKKyAqCUBwb3N0X3Jlc2V0OiBpcyB0aGlzIHJldmFsaWRhdGlvbiBhZnRlciByZXNldD8KKyAqCisgKglSZS1yZWFkIElERU5USUZZIHBhZ2UgYW5kIG1ha2Ugc3VyZSBAZGV2IGlzIHN0aWxsIGF0dGFjaGVkIHRvCisgKgl0aGUgcG9ydC4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb3RoZXJ3aXNlCisgKi8KK2ludCBhdGFfZGV2X3JldmFsaWRhdGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKKwkJICAgICAgIGludCBwb3N0X3Jlc2V0KQoreworCXVuc2lnbmVkIGludCBjbGFzczsKKwl1MTYgKmlkOworCWludCByYzsKKworCWlmICghYXRhX2Rldl9wcmVzZW50KGRldikpCisJCXJldHVybiAtRU5PREVWOworCisJY2xhc3MgPSBkZXYtPmNsYXNzOworCWlkID0gTlVMTDsKKworCS8qIGFsbG9jYXRlICYgcmVhZCBJRCBkYXRhICovCisJcmMgPSBhdGFfZGV2X3JlYWRfaWQoYXAsIGRldiwgJmNsYXNzLCBwb3N0X3Jlc2V0LCAmaWQpOworCWlmIChyYykKKwkJZ290byBmYWlsOworCisJLyogaXMgdGhlIGRldmljZSBzdGlsbCB0aGVyZT8gKi8KKwlpZiAoIWF0YV9kZXZfc2FtZV9kZXZpY2UoYXAsIGRldiwgY2xhc3MsIGlkKSkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlrZnJlZShkZXYtPmlkKTsKKwlkZXYtPmlkID0gaWQ7CisKKwkvKiBjb25maWd1cmUgZGV2aWNlIGFjY29yZGluZyB0byB0aGUgbmV3IElEICovCisJcmV0dXJuIGF0YV9kZXZfY29uZmlndXJlKGFwLCBkZXYsIDApOworCisgZmFpbDoKKwlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBkZXYgJXUgcmV2YWxpZGF0aW9uIGZhaWxlZCAoZXJybm89JWQpXG4iLAorCSAgICAgICBhcC0+aWQsIGRldi0+ZGV2bm8sIHJjKTsKKwlrZnJlZShpZCk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF0YV9kbWFfYmxhY2tsaXN0IFtdID0gewotCSJXREMgQUMxMTAwMEgiLAotCSJXREMgQUMyMjEwMEgiLAotCSJXREMgQUMzMjUwMEgiLAotCSJXREMgQUMzMzEwMEgiLAotCSJXREMgQUMzMTYwMEgiLAotCSJXREMgQUMzMjEwMEgiLAotCSJXREMgQUMyMzIwMEwiLAotCSJDb21wYXEgQ1JELTgyNDFCIiwKLQkiQ1JELTg0MDBCIiwKLQkiQ1JELTg0ODBCIiwKLQkiQ1JELTg0ODJCIiwKLSAJIkNSRC04NCIsCi0JIlNhbkRpc2sgU0RQM0IiLAotCSJTYW5EaXNrIFNEUDNCLTY0IiwKLQkiU0FOWU8gQ0QtUk9NIENSRCIsCi0JIkhJVEFDSEkgQ0RSLTgiLAotCSJISVRBQ0hJIENEUi04MzM1IiwKLQkiSElUQUNISSBDRFItODQzNSIsCi0JIlRvc2hpYmEgQ0QtUk9NIFhNLTYyMDJCIiwKLQkiVE9TSElCQSBDRC1ST00gWE0tMTcwMkJDIiwKLQkiQ0QtNTMyRS1BIiwKLQkiRS1JREUgQ0QtUk9NIENSLTg0MCIsCi0JIkNELVJPTSBEcml2ZS9GNUEiLAotCSJXUEkgQ0RELTgyMCIsCi0JIlNBTVNVTkcgQ0QtUk9NIFNDLTE0OEMiLAotCSJTQU1TVU5HIENELVJPTSBTQyIsCi0JIlNhbkRpc2sgU0RQM0ItNjQiLAotCSJBVEFQSSBDRC1ST00gRFJJVkUgNDBYIE1BWElNVU0iLAotCSJfTkVDIERWNTgwMEEiLAorCSJXREMgQUMxMTAwMEgiLCBOVUxMLAorCSJXREMgQUMyMjEwMEgiLCBOVUxMLAorCSJXREMgQUMzMjUwMEgiLCBOVUxMLAorCSJXREMgQUMzMzEwMEgiLCBOVUxMLAorCSJXREMgQUMzMTYwMEgiLCBOVUxMLAorCSJXREMgQUMzMjEwMEgiLCAiMjQuMDlQMDciLAorCSJXREMgQUMyMzIwMEwiLCAiMjEuMTBOMjEiLAorCSJDb21wYXEgQ1JELTgyNDFCIiwgIE5VTEwsCisJIkNSRC04NDAwQiIsIE5VTEwsCisJIkNSRC04NDgwQiIsIE5VTEwsCisJIkNSRC04NDgyQiIsIE5VTEwsCisgCSJDUkQtODQiLCBOVUxMLAorCSJTYW5EaXNrIFNEUDNCIiwgTlVMTCwKKwkiU2FuRGlzayBTRFAzQi02NCIsIE5VTEwsCisJIlNBTllPIENELVJPTSBDUkQiLCBOVUxMLAorCSJISVRBQ0hJIENEUi04IiwgTlVMTCwKKwkiSElUQUNISSBDRFItODMzNSIsIE5VTEwsCisJIkhJVEFDSEkgQ0RSLTg0MzUiLCBOVUxMLAorCSJUb3NoaWJhIENELVJPTSBYTS02MjAyQiIsIE5VTEwsCisJIlRPU0hJQkEgQ0QtUk9NIFhNLTE3MDJCQyIsIE5VTEwsCisJIkNELTUzMkUtQSIsIE5VTEwsCisJIkUtSURFIENELVJPTSBDUi04NDAiLCBOVUxMLAorCSJDRC1ST00gRHJpdmUvRjVBIiwgTlVMTCwKKwkiV1BJIENERC04MjAiLCBOVUxMLAorCSJTQU1TVU5HIENELVJPTSBTQy0xNDhDIiwgTlVMTCwKKwkiU0FNU1VORyBDRC1ST00gU0MiLCBOVUxMLAorCSJTYW5EaXNrIFNEUDNCLTY0IiwgTlVMTCwKKwkiQVRBUEkgQ0QtUk9NIERSSVZFIDQwWCBNQVhJTVVNIixOVUxMLAorCSJfTkVDIERWNTgwMEEiLCBOVUxMLAorCSJTQU1TVU5HIENELVJPTSBTTi0xMjQiLCAiTjAwMSIKIH07CiAKLXN0YXRpYyBpbnQgYXRhX2RtYV9ibGFja2xpc3RlZChjb25zdCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQorc3RhdGljIGludCBhdGFfc3RyaW0oY2hhciAqcywgc2l6ZV90IGxlbikKIHsKLQl1bnNpZ25lZCBjaGFyIG1vZGVsX251bVs0MF07Ci0JY2hhciAqczsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCWludCBpOwotCi0JYXRhX2Rldl9pZF9zdHJpbmcoZGV2LT5pZCwgbW9kZWxfbnVtLCBBVEFfSURfUFJPRF9PRlMsCi0JCQkgIHNpemVvZihtb2RlbF9udW0pKTsKLQlzID0gJm1vZGVsX251bVswXTsKLQlsZW4gPSBzdHJubGVuKHMsIHNpemVvZihtb2RlbF9udW0pKTsKKwlsZW4gPSBzdHJubGVuKHMsIGxlbik7CiAKIAkvKiBBVEFQSSBzcGVjaWZpZXMgdGhhdCBlbXB0eSBzcGFjZSBpcyBibGFuay1maWxsZWQ7IHJlbW92ZSBibGFua3MgKi8KIAl3aGlsZSAoKGxlbiA+IDApICYmIChzW2xlbiAtIDFdID09ICcgJykpIHsKIAkJbGVuLS07CiAJCXNbbGVuXSA9IDA7CiAJfQorCXJldHVybiBsZW47Cit9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdGFfZG1hX2JsYWNrbGlzdCk7IGkrKykKLQkJaWYgKCFzdHJuY21wKGF0YV9kbWFfYmxhY2tsaXN0W2ldLCBzLCBsZW4pKQotCQkJcmV0dXJuIDE7CitzdGF0aWMgaW50IGF0YV9kbWFfYmxhY2tsaXN0ZWQoY29uc3Qgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBjaGFyIG1vZGVsX251bVs0MF07CisJdW5zaWduZWQgY2hhciBtb2RlbF9yZXZbMTZdOworCXVuc2lnbmVkIGludCBubGVuLCBybGVuOworCWludCBpOwogCisJYXRhX2lkX3N0cmluZyhkZXYtPmlkLCBtb2RlbF9udW0sIEFUQV9JRF9QUk9EX09GUywKKwkJCSAgc2l6ZW9mKG1vZGVsX251bSkpOworCWF0YV9pZF9zdHJpbmcoZGV2LT5pZCwgbW9kZWxfcmV2LCBBVEFfSURfRldfUkVWX09GUywKKwkJCSAgc2l6ZW9mKG1vZGVsX3JldikpOworCW5sZW4gPSBhdGFfc3RyaW0obW9kZWxfbnVtLCBzaXplb2YobW9kZWxfbnVtKSk7CisJcmxlbiA9IGF0YV9zdHJpbShtb2RlbF9yZXYsIHNpemVvZihtb2RlbF9yZXYpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0YV9kbWFfYmxhY2tsaXN0KTsgaSArPSAyKSB7CisJCWlmICghc3RybmNtcChhdGFfZG1hX2JsYWNrbGlzdFtpXSwgbW9kZWxfbnVtLCBubGVuKSkgeworCQkJaWYgKGF0YV9kbWFfYmxhY2tsaXN0W2krMV0gPT0gTlVMTCkKKwkJCQlyZXR1cm4gMTsKKwkJCWlmICghc3RybmNtcChhdGFfZG1hX2JsYWNrbGlzdFtpXSwgbW9kZWxfcmV2LCBybGVuKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBhdGFfZ2V0X21vZGVfbWFzayhjb25zdCBzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgc2hpZnQpCi17Ci0JY29uc3Qgc3RydWN0IGF0YV9kZXZpY2UgKm1hc3RlciwgKnNsYXZlOwotCXVuc2lnbmVkIGludCBtYXNrOwotCi0JbWFzdGVyID0gJmFwLT5kZXZpY2VbMF07Ci0Jc2xhdmUgPSAmYXAtPmRldmljZVsxXTsKLQotCWFzc2VydCAoYXRhX2Rldl9wcmVzZW50KG1hc3RlcikgfHwgYXRhX2Rldl9wcmVzZW50KHNsYXZlKSk7Ci0KLQlpZiAoc2hpZnQgPT0gQVRBX1NISUZUX1VETUEpIHsKLQkJbWFzayA9IGFwLT51ZG1hX21hc2s7Ci0JCWlmIChhdGFfZGV2X3ByZXNlbnQobWFzdGVyKSkgewotCQkJbWFzayAmPSAobWFzdGVyLT5pZFtBVEFfSURfVURNQV9NT0RFU10gJiAweGZmKTsKLQkJCWlmIChhdGFfZG1hX2JsYWNrbGlzdGVkKG1hc3RlcikpIHsKLQkJCQltYXNrID0gMDsKLQkJCQlhdGFfcHJfYmxhY2tsaXN0ZWQoYXAsIG1hc3Rlcik7Ci0JCQl9Ci0JCX0KLQkJaWYgKGF0YV9kZXZfcHJlc2VudChzbGF2ZSkpIHsKLQkJCW1hc2sgJj0gKHNsYXZlLT5pZFtBVEFfSURfVURNQV9NT0RFU10gJiAweGZmKTsKLQkJCWlmIChhdGFfZG1hX2JsYWNrbGlzdGVkKHNsYXZlKSkgewotCQkJCW1hc2sgPSAwOwotCQkJCWF0YV9wcl9ibGFja2xpc3RlZChhcCwgc2xhdmUpOwotCQkJfQotCQl9Ci0JfQotCWVsc2UgaWYgKHNoaWZ0ID09IEFUQV9TSElGVF9NV0RNQSkgewotCQltYXNrID0gYXAtPm13ZG1hX21hc2s7Ci0JCWlmIChhdGFfZGV2X3ByZXNlbnQobWFzdGVyKSkgewotCQkJbWFzayAmPSAobWFzdGVyLT5pZFtBVEFfSURfTVdETUFfTU9ERVNdICYgMHgwNyk7Ci0JCQlpZiAoYXRhX2RtYV9ibGFja2xpc3RlZChtYXN0ZXIpKSB7Ci0JCQkJbWFzayA9IDA7Ci0JCQkJYXRhX3ByX2JsYWNrbGlzdGVkKGFwLCBtYXN0ZXIpOwotCQkJfQotCQl9Ci0JCWlmIChhdGFfZGV2X3ByZXNlbnQoc2xhdmUpKSB7Ci0JCQltYXNrICY9IChzbGF2ZS0+aWRbQVRBX0lEX01XRE1BX01PREVTXSAmIDB4MDcpOwotCQkJaWYgKGF0YV9kbWFfYmxhY2tsaXN0ZWQoc2xhdmUpKSB7Ci0JCQkJbWFzayA9IDA7Ci0JCQkJYXRhX3ByX2JsYWNrbGlzdGVkKGFwLCBzbGF2ZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JZWxzZSBpZiAoc2hpZnQgPT0gQVRBX1NISUZUX1BJTykgewotCQltYXNrID0gYXAtPnBpb19tYXNrOwotCQlpZiAoYXRhX2Rldl9wcmVzZW50KG1hc3RlcikpIHsKLQkJCS8qIHNwZWMgZG9lc24ndCByZXR1cm4gZXhwbGljaXQgc3VwcG9ydCBmb3IKLQkJCSAqIFBJTzAtMiwgc28gd2UgZmFrZSBpdAotCQkJICovCi0JCQl1MTYgdG1wX21vZGUgPSBtYXN0ZXItPmlkW0FUQV9JRF9QSU9fTU9ERVNdICYgMHgwMzsKLQkJCXRtcF9tb2RlIDw8PSAzOwotCQkJdG1wX21vZGUgfD0gMHg3OwotCQkJbWFzayAmPSB0bXBfbW9kZTsKLQkJfQotCQlpZiAoYXRhX2Rldl9wcmVzZW50KHNsYXZlKSkgewotCQkJLyogc3BlYyBkb2Vzbid0IHJldHVybiBleHBsaWNpdCBzdXBwb3J0IGZvcgotCQkJICogUElPMC0yLCBzbyB3ZSBmYWtlIGl0Ci0JCQkgKi8KLQkJCXUxNiB0bXBfbW9kZSA9IHNsYXZlLT5pZFtBVEFfSURfUElPX01PREVTXSAmIDB4MDM7Ci0JCQl0bXBfbW9kZSA8PD0gMzsKLQkJCXRtcF9tb2RlIHw9IDB4NzsKLQkJCW1hc2sgJj0gdG1wX21vZGU7Ci0JCX0KLQl9Ci0JZWxzZSB7Ci0JCW1hc2sgPSAweGZmZmZmZmZmOyAvKiBzaHV0IHVwIGNvbXBpbGVyIHdhcm5pbmcgKi8KLQkJQlVHKCk7Ci0JfQotCi0JcmV0dXJuIG1hc2s7Ci19Ci0KLS8qIGZpbmQgZ3JlYXRlc3QgYml0ICovCi1zdGF0aWMgaW50IGZnYih1MzIgYml0bWFwKQotewotCXVuc2lnbmVkIGludCBpOwotCWludCB4ID0gLTE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKLQkJaWYgKGJpdG1hcCAmICgxIDw8IGkpKQotCQkJeCA9IGk7Ci0KLQlyZXR1cm4geDsKLX0KLQogLyoqCi0gKglhdGFfY2hvb3NlX3hmZXJfbW9kZSAtIGF0dGVtcHQgdG8gZmluZCBiZXN0IHRyYW5zZmVyIG1vZGUKLSAqCUBhcDogUG9ydCBmb3Igd2hpY2ggYW4geGZlciBtb2RlIHdpbGwgYmUgc2VsZWN0ZWQKLSAqCUB4ZmVyX21vZGVfb3V0OiAob3V0cHV0KSBTRVQgRkVBVFVSRVMgLSBYRkVSIE1PREUgY29kZQotICoJQHhmZXJfc2hpZnRfb3V0OiAob3V0cHV0KSBiaXQgc2hpZnQgdGhhdCBzZWxlY3RzIHRoaXMgbW9kZQorICoJYXRhX2Rldl94ZmVybWFzayAtIENvbXB1dGUgc3VwcG9ydGVkIHhmZXJtYXNrIG9mIHRoZSBnaXZlbiBkZXZpY2UKKyAqCUBhcDogUG9ydCBvbiB3aGljaCB0aGUgZGV2aWNlIHRvIGNvbXB1dGUgeGZlcm1hc2sgZm9yIHJlc2lkZXMKKyAqCUBkZXY6IERldmljZSB0byBjb21wdXRlIHhmZXJtYXNrIGZvcgogICoKLSAqCUJhc2VkIG9uIGhvc3QgYW5kIGRldmljZSBjYXBhYmlsaXRpZXMsIGRldGVybWluZSB0aGUKLSAqCW1heGltdW0gdHJhbnNmZXIgbW9kZSB0aGF0IGlzIGFtZW5hYmxlIHRvIGFsbC4KKyAqCUNvbXB1dGUgc3VwcG9ydGVkIHhmZXJtYXNrIG9mIEBkZXYgYW5kIHN0b3JlIGl0IGluCisgKglkZXYtPipfbWFzay4gIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFwcGx5aW5nIGFsbAorICoJa25vd24gbGltaXRzIGluY2x1ZGluZyBob3N0IGNvbnRyb2xsZXIgbGltaXRzLCBkZXZpY2UKKyAqCWJsYWNrbGlzdCwgZXRjLi4uCiAgKgogICoJTE9DS0lORzoKLSAqCVBDSS9ldGMuIGJ1cyBwcm9iZSBzZW0uCi0gKgotICoJUkVUVVJOUzoKLSAqCVplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3IuCisgKglOb25lLgogICovCi0KLXN0YXRpYyBpbnQgYXRhX2Nob29zZV94ZmVyX21vZGUoY29uc3Qgc3RydWN0IGF0YV9wb3J0ICphcCwKLQkJCQl1OCAqeGZlcl9tb2RlX291dCwKLQkJCQl1bnNpZ25lZCBpbnQgKnhmZXJfc2hpZnRfb3V0KQorc3RhdGljIHZvaWQgYXRhX2Rldl94ZmVybWFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGludCBtYXNrLCBzaGlmdDsKLQlpbnQgeCwgaTsKKwl1bnNpZ25lZCBsb25nIHhmZXJfbWFzazsKKwlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhmZXJfbW9kZV9jbGFzc2VzKTsgaSsrKSB7Ci0JCXNoaWZ0ID0geGZlcl9tb2RlX2NsYXNzZXNbaV0uc2hpZnQ7Ci0JCW1hc2sgPSBhdGFfZ2V0X21vZGVfbWFzayhhcCwgc2hpZnQpOworCXhmZXJfbWFzayA9IGF0YV9wYWNrX3hmZXJtYXNrKGFwLT5waW9fbWFzaywgYXAtPm13ZG1hX21hc2ssCisJCQkJICAgICAgYXAtPnVkbWFfbWFzayk7CiAKLQkJeCA9IGZnYihtYXNrKTsKLQkJaWYgKHggPj0gMCkgewotCQkJKnhmZXJfbW9kZV9vdXQgPSB4ZmVyX21vZGVfY2xhc3Nlc1tpXS5iYXNlICsgeDsKLQkJCSp4ZmVyX3NoaWZ0X291dCA9IHNoaWZ0OwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkvKiB1c2UgcG9ydC13aWRlIHhmZXJtYXNrIGZvciBub3cgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVRBX01BWF9ERVZJQ0VTOyBpKyspIHsKKwkJc3RydWN0IGF0YV9kZXZpY2UgKmQgPSAmYXAtPmRldmljZVtpXTsKKwkJaWYgKCFhdGFfZGV2X3ByZXNlbnQoZCkpCisJCQljb250aW51ZTsKKwkJeGZlcl9tYXNrICY9IGF0YV9wYWNrX3hmZXJtYXNrKGQtPnBpb19tYXNrLCBkLT5td2RtYV9tYXNrLAorCQkJCQkgICAgICAgZC0+dWRtYV9tYXNrKTsKKwkJeGZlcl9tYXNrICY9IGF0YV9pZF94ZmVybWFzayhkLT5pZCk7CisJCWlmIChhdGFfZG1hX2JsYWNrbGlzdGVkKGQpKQorCQkJeGZlcl9tYXNrICY9IH4oQVRBX01BU0tfTVdETUEgfCBBVEFfTUFTS19VRE1BKTsKIAl9CiAKLQlyZXR1cm4gLTE7CisJaWYgKGF0YV9kbWFfYmxhY2tsaXN0ZWQoZGV2KSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRhJXU6IGRldiAldSBpcyBvbiBETUEgYmxhY2tsaXN0LCAiCisJCSAgICAgICAiZGlzYWJsaW5nIERNQVxuIiwgYXAtPmlkLCBkZXYtPmRldm5vKTsKKworCWF0YV91bnBhY2tfeGZlcm1hc2soeGZlcl9tYXNrLCAmZGV2LT5waW9fbWFzaywgJmRldi0+bXdkbWFfbWFzaywKKwkJCSAgICAmZGV2LT51ZG1hX21hc2spOwogfQogCiAvKioKQEAgLTIzOTAsMTEgKzI3NTUsMTYgQEAKICAqCiAgKglMT0NLSU5HOgogICoJUENJL2V0Yy4gYnVzIHByb2JlIHNlbS4KKyAqCisgKglSRVRVUk5TOgorICoJMCBvbiBzdWNjZXNzLCBBQ19FUlJfKiBtYXNrIG90aGVyd2lzZS4KICAqLwogCi1zdGF0aWMgdm9pZCBhdGFfZGV2X3NldF94ZmVybW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQorc3RhdGljIHVuc2lnbmVkIGludCBhdGFfZGV2X3NldF94ZmVybW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCQkgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOworCXVuc2lnbmVkIGludCBlcnJfbWFzazsKIAogCS8qIHNldCB1cCBzZXQtZmVhdHVyZXMgdGFza2ZpbGUgKi8KIAlEUFJJTlRLKCJzZXQgZmVhdHVyZXMgLSB4ZmVyIG1vZGVcbiIpOwpAQCAtMjQwNiw1NCArMjc3NiwxMCBAQAogCXRmLnByb3RvY29sID0gQVRBX1BST1RfTk9EQVRBOwogCXRmLm5zZWN0ID0gZGV2LT54ZmVyX21vZGU7CiAKLQlpZiAoYXRhX2V4ZWNfaW50ZXJuYWwoYXAsIGRldiwgJnRmLCBETUFfTk9ORSwgTlVMTCwgMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogZmFpbGVkIHRvIHNldCB4ZmVybW9kZSwgZGlzYWJsZWRcbiIsCi0JCSAgICAgICBhcC0+aWQpOwotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQl9CisJZXJyX21hc2sgPSBhdGFfZXhlY19pbnRlcm5hbChhcCwgZGV2LCAmdGYsIERNQV9OT05FLCBOVUxMLCAwKTsKIAotCURQUklOVEsoIkVYSVRcbiIpOwotfQotCi0vKioKLSAqCWF0YV9kZXZfcmVyZWFkX2lkIC0gUmVyZWFkIHRoZSBkZXZpY2UgaWRlbnRpZnkgZGV2aWNlIGluZm8KLSAqCUBhcDogcG9ydCB3aGVyZSB0aGUgZGV2aWNlIGlzCi0gKglAZGV2OiBkZXZpY2UgdG8gcmVyZWFkIHRoZSBpZGVudGlmeSBkZXZpY2UgaW5mbwotICoKLSAqCUxPQ0tJTkc6Ci0gKi8KLQotc3RhdGljIHZvaWQgYXRhX2Rldl9yZXJlYWRfaWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOwotCi0JYXRhX3RmX2luaXQoYXAsICZ0ZiwgZGV2LT5kZXZubyk7Ci0KLQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkgewotCQl0Zi5jb21tYW5kID0gQVRBX0NNRF9JRF9BVEE7Ci0JCURQUklOVEsoImRvIEFUQSBpZGVudGlmeVxuIik7Ci0JfSBlbHNlIHsKLQkJdGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7Ci0JCURQUklOVEsoImRvIEFUQVBJIGlkZW50aWZ5XG4iKTsKLQl9Ci0KLQl0Zi5mbGFncyB8PSBBVEFfVEZMQUdfREVWSUNFOwotCXRmLnByb3RvY29sID0gQVRBX1BST1RfUElPOwotCi0JaWYgKGF0YV9leGVjX2ludGVybmFsKGFwLCBkZXYsICZ0ZiwgRE1BX0ZST01fREVWSUNFLAotCQkJICAgICAgZGV2LT5pZCwgc2l6ZW9mKGRldi0+aWQpKSkKLQkJZ290byBlcnJfb3V0OwotCi0Jc3dhcF9idWZfbGUxNihkZXYtPmlkLCBBVEFfSURfV09SRFMpOwotCi0JYXRhX2R1bXBfaWQoZGV2KTsKLQotCURQUklOVEsoIkVYSVRcbiIpOwotCi0JcmV0dXJuOwotZXJyX291dDoKLQlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBmYWlsZWQgdG8gcmVyZWFkIElELCBkaXNhYmxlZFxuIiwgYXAtPmlkKTsKLQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKKwlEUFJJTlRLKCJFWElULCBlcnJfbWFzaz0leFxuIiwgZXJyX21hc2spOworCXJldHVybiBlcnJfbWFzazsKIH0KIAogLyoqCkBAIC0yNDYyLDE3ICsyNzg4LDIzIEBACiAgKglAZGV2OiBEZXZpY2UgdG8gd2hpY2ggY29tbWFuZCB3aWxsIGJlIHNlbnQKICAqCiAgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgQUNfRVJSXyogbWFzayBvdGhlcndpc2UuCiAgKi8KIAotc3RhdGljIHZvaWQgYXRhX2Rldl9pbml0X3BhcmFtcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQorc3RhdGljIHVuc2lnbmVkIGludCBhdGFfZGV2X2luaXRfcGFyYW1zKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2s7CiAJdTE2IHNlY3RvcnMgPSBkZXYtPmlkWzZdOwogCXUxNiBoZWFkcyAgID0gZGV2LT5pZFszXTsKIAogCS8qIE51bWJlciBvZiBzZWN0b3JzIHBlciB0cmFjayAxLTI1NS4gTnVtYmVyIG9mIGhlYWRzIDEtMTYgKi8KIAlpZiAoc2VjdG9ycyA8IDEgfHwgc2VjdG9ycyA+IDI1NSB8fCBoZWFkcyA8IDEgfHwgaGVhZHMgPiAxNikKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCS8qIHNldCB1cCBpbml0IGRldiBwYXJhbXMgdGFza2ZpbGUgKi8KIAlEUFJJTlRLKCJpbml0IGRldiBwYXJhbXMgXG4iKTsKQEAgLTI0ODQsMTMgKzI4MTYsMTAgQEAKIAl0Zi5uc2VjdCA9IHNlY3RvcnM7CiAJdGYuZGV2aWNlIHw9IChoZWFkcyAtIDEpICYgMHgwZjsgLyogbWF4IGhlYWQgPSBudW0uIG9mIGhlYWRzIC0gMSAqLwogCi0JaWYgKGF0YV9leGVjX2ludGVybmFsKGFwLCBkZXYsICZ0ZiwgRE1BX05PTkUsIE5VTEwsIDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IGZhaWxlZCB0byBpbml0IHBhcmFtZXRlcnMsIGRpc2FibGVkXG4iLAotCQkgICAgICAgYXAtPmlkKTsKLQkJYXRhX3BvcnRfZGlzYWJsZShhcCk7Ci0JfQorCWVycl9tYXNrID0gYXRhX2V4ZWNfaW50ZXJuYWwoYXAsIGRldiwgJnRmLCBETUFfTk9ORSwgTlVMTCwgMCk7CiAKLQlEUFJJTlRLKCJFWElUXG4iKTsKKwlEUFJJTlRLKCJFWElULCBlcnJfbWFzaz0leFxuIiwgZXJyX21hc2spOworCXJldHVybiBlcnJfbWFzazsKIH0KIAogLyoqCkBAIC0yNTEwLDExICsyODM5LDExIEBACiAJaW50IGRpciA9IHFjLT5kbWFfZGlyOwogCXZvaWQgKnBhZF9idWYgPSBOVUxMOwogCi0JYXNzZXJ0KHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKTsKLQlhc3NlcnQoc2cgIT0gTlVMTCk7CisJV0FSTl9PTighKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSk7CisJV0FSTl9PTihzZyA9PSBOVUxMKTsKIAogCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX1NJTkdMRSkKLQkJYXNzZXJ0KHFjLT5uX2VsZW0gPT0gMSk7CisJCVdBUk5fT04ocWMtPm5fZWxlbSA+IDEpOwogCiAJVlBSSU5USygidW5tYXBwaW5nICV1IHNnIGVsZW1lbnRzXG4iLCBxYy0+bl9lbGVtKTsKIApAQCAtMjUyNyw3ICsyODU2LDcgQEAKIAogCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX1NHKSB7CiAJCWlmIChxYy0+bl9lbGVtKQotCQkJZG1hX3VubWFwX3NnKGFwLT5ob3N0X3NldC0+ZGV2LCBzZywgcWMtPm5fZWxlbSwgZGlyKTsKKwkJCWRtYV91bm1hcF9zZyhhcC0+ZGV2LCBzZywgcWMtPm5fZWxlbSwgZGlyKTsKIAkJLyogcmVzdG9yZSBsYXN0IHNnICovCiAJCXNnW3FjLT5vcmlnX25fZWxlbSAtIDFdLmxlbmd0aCArPSBxYy0+cGFkX2xlbjsKIAkJaWYgKHBhZF9idWYpIHsKQEAgLTI1MzcsOCArMjg2Niw4IEBACiAJCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX0lSUTApOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHNnX2RtYV9sZW4oJnNnWzBdKSA+IDApCi0JCQlkbWFfdW5tYXBfc2luZ2xlKGFwLT5ob3N0X3NldC0+ZGV2LAorCQlpZiAocWMtPm5fZWxlbSkKKwkJCWRtYV91bm1hcF9zaW5nbGUoYXAtPmRldiwKIAkJCQlzZ19kbWFfYWRkcmVzcygmc2dbMF0pLCBzZ19kbWFfbGVuKCZzZ1swXSksCiAJCQkJZGlyKTsKIAkJLyogcmVzdG9yZSBzZyAqLwpAQCAtMjU2OSw4ICsyODk4LDggQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCBpZHg7CiAKLQlhc3NlcnQocWMtPl9fc2cgIT0gTlVMTCk7Ci0JYXNzZXJ0KHFjLT5uX2VsZW0gPiAwKTsKKwlXQVJOX09OKHFjLT5fX3NnID09IE5VTEwpOworCVdBUk5fT04ocWMtPm5fZWxlbSA9PSAwICYmIHFjLT5wYWRfbGVuID09IDApOwogCiAJaWR4ID0gMDsKIAlhdGFfZm9yX2VhY2hfc2coc2csIHFjKSB7CkBAIC0yNjQ0LDYgKzI5NzMsOCBAQAogCWF0YV9maWxsX3NnKHFjKTsKIH0KIAordm9pZCBhdGFfbm9vcF9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpIHsgfQorCiAvKioKICAqCWF0YV9zZ19pbml0X29uZSAtIEFzc29jaWF0ZSBjb21tYW5kIHdpdGggbWVtb3J5IGJ1ZmZlcgogICoJQHFjOiBDb21tYW5kIHRvIGJlIGFzc29jaWF0ZWQKQEAgLTI3MTUsNiArMzA0Niw3IEBACiAJaW50IGRpciA9IHFjLT5kbWFfZGlyOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBxYy0+X19zZzsKIAlkbWFfYWRkcl90IGRtYV9hZGRyZXNzOworCWludCB0cmltX3NnID0gMDsKIAogCS8qIHdlIG11c3QgbGVuZ3RoZW4gdHJhbnNmZXJzIHRvIGVuZCBvbiBhIDMyLWJpdCBib3VuZGFyeSAqLwogCXFjLT5wYWRfbGVuID0gc2ctPmxlbmd0aCAmIDM7CkBAIC0yNzIyLDcgKzMwNTQsNyBAQAogCQl2b2lkICpwYWRfYnVmID0gYXAtPnBhZCArIChxYy0+dGFnICogQVRBX0RNQV9QQURfU1opOwogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBzZyA9ICZxYy0+cGFkX3NnZW50OwogCi0JCWFzc2VydChxYy0+ZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQVBJKTsKKwkJV0FSTl9PTihxYy0+ZGV2LT5jbGFzcyAhPSBBVEFfREVWX0FUQVBJKTsKIAogCQltZW1zZXQocGFkX2J1ZiwgMCwgQVRBX0RNQV9QQURfU1opOwogCkBAIC0yNzM0LDE3ICszMDY2LDE5IEBACiAJCXNnX2RtYV9sZW4ocHNnKSA9IEFUQV9ETUFfUEFEX1NaOwogCQkvKiB0cmltIHNnICovCiAJCXNnLT5sZW5ndGggLT0gcWMtPnBhZF9sZW47CisJCWlmIChzZy0+bGVuZ3RoID09IDApCisJCQl0cmltX3NnID0gMTsKIAogCQlEUFJJTlRLKCJwYWRkaW5nIGRvbmUsIHNnLT5sZW5ndGg9JXUgcGFkX2xlbj0ldVxuIiwKIAkJCXNnLT5sZW5ndGgsIHFjLT5wYWRfbGVuKTsKIAl9CiAKLQlpZiAoIXNnLT5sZW5ndGgpIHsKLQkJc2dfZG1hX2FkZHJlc3Moc2cpID0gMDsKKwlpZiAodHJpbV9zZykgeworCQlxYy0+bl9lbGVtLS07CiAJCWdvdG8gc2tpcF9tYXA7CiAJfQogCi0JZG1hX2FkZHJlc3MgPSBkbWFfbWFwX3NpbmdsZShhcC0+aG9zdF9zZXQtPmRldiwgcWMtPmJ1Zl92aXJ0LAorCWRtYV9hZGRyZXNzID0gZG1hX21hcF9zaW5nbGUoYXAtPmRldiwgcWMtPmJ1Zl92aXJ0LAogCQkJCSAgICAgc2ctPmxlbmd0aCwgZGlyKTsKIAlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZG1hX2FkZHJlc3MpKSB7CiAJCS8qIHJlc3RvcmUgc2cgKi8KQEAgLTI3NTMsOSArMzA4Nyw5IEBACiAJfQogCiAJc2dfZG1hX2FkZHJlc3Moc2cpID0gZG1hX2FkZHJlc3M7Ci1za2lwX21hcDoKIAlzZ19kbWFfbGVuKHNnKSA9IHNnLT5sZW5ndGg7CiAKK3NraXBfbWFwOgogCURQUklOVEsoIm1hcHBlZCBidWZmZXIgb2YgJWQgYnl0ZXMgZm9yICVzXG4iLCBzZ19kbWFfbGVuKHNnKSwKIAkJcWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFID8gIndyaXRlIiA6ICJyZWFkIik7CiAKQEAgLTI3ODQsNyArMzExOCw3IEBACiAJaW50IG5fZWxlbSwgcHJlX25fZWxlbSwgZGlyLCB0cmltX3NnID0gMDsKIAogCVZQUklOVEsoIkVOVEVSLCBhdGEldVxuIiwgYXAtPmlkKTsKLQlhc3NlcnQocWMtPmZsYWdzICYgQVRBX1FDRkxBR19TRyk7CisJV0FSTl9PTighKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfU0cpKTsKIAogCS8qIHdlIG11c3QgbGVuZ3RoZW4gdHJhbnNmZXJzIHRvIGVuZCBvbiBhIDMyLWJpdCBib3VuZGFyeSAqLwogCXFjLT5wYWRfbGVuID0gbHNnLT5sZW5ndGggJiAzOwpAQCAtMjc5Myw3ICszMTI3LDcgQEAKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpwc2cgPSAmcWMtPnBhZF9zZ2VudDsKIAkJdW5zaWduZWQgaW50IG9mZnNldDsKIAotCQlhc3NlcnQocWMtPmRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSk7CisJCVdBUk5fT04ocWMtPmRldi0+Y2xhc3MgIT0gQVRBX0RFVl9BVEFQSSk7CiAKIAkJbWVtc2V0KHBhZF9idWYsIDAsIEFUQV9ETUFfUEFEX1NaKTsKIApAQCAtMjgzMiw3ICszMTY2LDcgQEAKIAl9CiAKIAlkaXIgPSBxYy0+ZG1hX2RpcjsKLQluX2VsZW0gPSBkbWFfbWFwX3NnKGFwLT5ob3N0X3NldC0+ZGV2LCBzZywgcHJlX25fZWxlbSwgZGlyKTsKKwluX2VsZW0gPSBkbWFfbWFwX3NnKGFwLT5kZXYsIHNnLCBwcmVfbl9lbGVtLCBkaXIpOwogCWlmIChuX2VsZW0gPCAxKSB7CiAJCS8qIHJlc3RvcmUgbGFzdCBzZyAqLwogCQlsc2ctPmxlbmd0aCArPSBxYy0+cGFkX2xlbjsKQEAgLTI4NjksNyArMzIwMyw3IEBACiB9CiAKIC8qKgotICoJYXRhX3Bpb19wb2xsIC0KKyAqCWF0YV9waW9fcG9sbCAtIHBvbGwgdXNpbmcgUElPLCBkZXBlbmRpbmcgb24gY3VycmVudCBzdGF0ZQogICoJQGFwOiB0aGUgdGFyZ2V0IGF0YV9wb3J0CiAgKgogICoJTE9DS0lORzoKQEAgLTI4ODcsNyArMzIyMSw3IEBACiAJdW5zaWduZWQgaW50IHJlZ19zdGF0ZSA9IEhTTV9TVF9VTktOT1dOOwogCiAJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKLQlhc3NlcnQocWMgIT0gTlVMTCk7CisJV0FSTl9PTihxYyA9PSBOVUxMKTsKIAogCXN3aXRjaCAoYXAtPmhzbV90YXNrX3N0YXRlKSB7CiAJY2FzZSBIU01fU1Q6CkBAIC0yOTA4LDcgKzMyNDIsNyBAQAogCXN0YXR1cyA9IGF0YV9jaGtfc3RhdHVzKGFwKTsKIAlpZiAoc3RhdHVzICYgQVRBX0JVU1kpIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgYXAtPnBpb190YXNrX3RpbWVvdXQpKSB7Ci0JCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0FUQV9CVVM7CisJCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX1RJTUVPVVQ7CiAJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfVE1PVVQ7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMjk1NSw3ICszMjg5LDcgQEAKIAl9CiAKIAlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmFjdGl2ZV90YWcpOwotCWFzc2VydChxYyAhPSBOVUxMKTsKKwlXQVJOX09OKHFjID09IE5VTEwpOwogCiAJZHJ2X3N0YXQgPSBhdGFfd2FpdF9pZGxlKGFwKTsKIAlpZiAoIWF0YV9vayhkcnZfc3RhdCkpIHsKQEAgLTI5NjYsNyArMzMwMCw3IEBACiAKIAlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfSURMRTsKIAotCWFzc2VydChxYy0+ZXJyX21hc2sgPT0gMCk7CisJV0FSTl9PTihxYy0+ZXJyX21hc2spOwogCWF0YV9wb2xsX3FjX2NvbXBsZXRlKHFjKTsKIAogCS8qIGFub3RoZXIgY29tbWFuZCBtYXkgc3RhcnQgYXQgdGhpcyBwb2ludCAqLwpAQCAtMjk3Niw3ICszMzEwLDcgQEAKIAogCiAvKioKLSAqCXN3YXBfYnVmX2xlMTYgLSBzd2FwIGhhbHZlcyBvZiAxNi13b3JkcyBpbiBwbGFjZQorICoJc3dhcF9idWZfbGUxNiAtIHN3YXAgaGFsdmVzIG9mIDE2LWJpdCB3b3JkcyBpbiBwbGFjZQogICoJQGJ1ZjogIEJ1ZmZlciB0byBzd2FwCiAgKglAYnVmX3dvcmRzOiAgTnVtYmVyIG9mIDE2LWJpdCB3b3JkcyBpbiBidWZmZXIuCiAgKgpAQCAtMzI4Niw3ICszNjIwLDcgQEAKIGVycl9vdXQ6CiAJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IGRldiAldTogQVRBUEkgY2hlY2sgZmFpbGVkXG4iLAogCSAgICAgIGFwLT5pZCwgZGV2LT5kZXZubyk7Ci0JcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOworCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfSFNNOwogCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9FUlI7CiB9CiAKQEAgLTMzMjMsNyArMzY1Nyw3IEBACiAJfQogCiAJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKLQlhc3NlcnQocWMgIT0gTlVMTCk7CisJV0FSTl9PTihxYyA9PSBOVUxMKTsKIAogCS8qIGNoZWNrIGVycm9yICovCiAJaWYgKHN0YXR1cyAmIChBVEFfRVJSIHwgQVRBX0RGKSkgewpAQCAtMzM0NCw3ICszNjc4LDcgQEAKIAl9IGVsc2UgewogCQkvKiBoYW5kbGUgQlNZPTAsIERSUT0wIGFzIGVycm9yICovCiAJCWlmICgoc3RhdHVzICYgQVRBX0RSUSkgPT0gMCkgewotCQkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOworCQkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9IU007CiAJCQlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfRVJSOwogCQkJcmV0dXJuOwogCQl9CkBAIC0zMzU4LDE1ICszNjkyLDE1IEBACiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKIAogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7Ci0JYXNzZXJ0KHFjICE9IE5VTEwpOworCVdBUk5fT04ocWMgPT0gTlVMTCk7CiAKIAlpZiAocWMtPnRmLmNvbW1hbmQgIT0gQVRBX0NNRF9QQUNLRVQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YSV1OiBQSU8gZXJyb3JcbiIsIGFwLT5pZCk7CiAKLQkvKiBtYWtlIHN1cmUgcWMtPmVycl9tYXNrIGlzIGF2YWlsYWJsZSB0byAKKwkvKiBtYWtlIHN1cmUgcWMtPmVycl9tYXNrIGlzIGF2YWlsYWJsZSB0bwogCSAqIGtub3cgd2hhdCdzIHdyb25nIGFuZCByZWNvdmVyCiAJICovCi0JYXNzZXJ0KHFjLT5lcnJfbWFzayk7CisJV0FSTl9PTihxYy0+ZXJyX21hc2sgPT0gMCk7CiAKIAlhcC0+aHNtX3Rhc2tfc3RhdGUgPSBIU01fU1RfSURMRTsKIApAQCAtMzQwNywxMiArMzc0MSw4NCBAQAogCX0KIAogCWlmICh0aW1lb3V0KQotCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXRhX3dxLCAmYXAtPnBpb190YXNrLCB0aW1lb3V0KTsKKwkJYXRhX3BvcnRfcXVldWVfdGFzayhhcCwgYXRhX3Bpb190YXNrLCBhcCwgdGltZW91dCk7CiAJZWxzZSBpZiAoIXFjX2NvbXBsZXRlZCkKIAkJZ290byBmc21fc3RhcnQ7CiB9CiAKIC8qKgorICoJYXRhcGlfcGFja2V0X3Rhc2sgLSBXcml0ZSBDREIgYnl0ZXMgdG8gaGFyZHdhcmUKKyAqCUBfZGF0YTogUG9ydCB0byB3aGljaCBBVEFQSSBkZXZpY2UgaXMgYXR0YWNoZWQuCisgKgorICoJV2hlbiBkZXZpY2UgaGFzIGluZGljYXRlZCBpdHMgcmVhZGluZXNzIHRvIGFjY2VwdAorICoJYSBDREIsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAgU2VuZCB0aGUgQ0RCLgorICoJSWYgRE1BIGlzIHRvIGJlIHBlcmZvcm1lZCwgZXhpdCBpbW1lZGlhdGVseS4KKyAqCU90aGVyd2lzZSwgd2UgYXJlIGluIHBvbGxpbmcgbW9kZSwgc28gcG9sbAorICoJc3RhdHVzIHVuZGVyIG9wZXJhdGlvbiBzdWNjZWVkcyBvciBmYWlscy4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKi8KKworc3RhdGljIHZvaWQgYXRhcGlfcGFja2V0X3Rhc2sodm9pZCAqX2RhdGEpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IF9kYXRhOworCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CisJdTggc3RhdHVzOworCisJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKKwlXQVJOX09OKHFjID09IE5VTEwpOworCVdBUk5fT04oIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpOworCisJLyogc2xlZXAtd2FpdCBmb3IgQlNZIHRvIGNsZWFyICovCisJRFBSSU5USygiYnVzeSB3YWl0XG4iKTsKKwlpZiAoYXRhX2J1c3lfc2xlZXAoYXAsIEFUQV9UTU9VVF9DREJfUVVJQ0ssIEFUQV9UTU9VVF9DREIpKSB7CisJCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfVElNRU9VVDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCS8qIG1ha2Ugc3VyZSBEUlEgaXMgc2V0ICovCisJc3RhdHVzID0gYXRhX2Noa19zdGF0dXMoYXApOworCWlmICgoc3RhdHVzICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpICE9IEFUQV9EUlEpIHsKKwkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9IU007CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKiBzZW5kIFNDU0kgY2RiICovCisJRFBSSU5USygic2VuZCBjZGJcbiIpOworCVdBUk5fT04ocWMtPmRldi0+Y2RiX2xlbiA8IDEyKTsKKworCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfQVRBUElfRE1BIHx8CisJICAgIHFjLT50Zi5wcm90b2NvbCA9PSBBVEFfUFJPVF9BVEFQSV9OT0RBVEEpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkvKiBPbmNlIHdlJ3JlIGRvbmUgaXNzdWluZyBjb21tYW5kIGFuZCBraWNraW5nIGJtZG1hLAorCQkgKiBpcnEgaGFuZGxlciB0YWtlcyBvdmVyLiAgVG8gbm90IGxvc2UgaXJxLCB3ZSBuZWVkCisJCSAqIHRvIGNsZWFyIE5PSU5UUiBmbGFnIGJlZm9yZSBzZW5kaW5nIGNkYiwgYnV0CisJCSAqIGludGVycnVwdCBoYW5kbGVyIHNob3VsZG4ndCBiZSBpbnZva2VkIGJlZm9yZSB3ZSdyZQorCQkgKiBmaW5pc2hlZC4gIEhlbmNlLCB0aGUgZm9sbG93aW5nIGxvY2tpbmcuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CisJCWFwLT5mbGFncyAmPSB+QVRBX0ZMQUdfTk9JTlRSOworCQlhdGFfZGF0YV94ZmVyKGFwLCBxYy0+Y2RiLCBxYy0+ZGV2LT5jZGJfbGVuLCAxKTsKKwkJaWYgKHFjLT50Zi5wcm90b2NvbCA9PSBBVEFfUFJPVF9BVEFQSV9ETUEpCisJCQlhcC0+b3BzLT5ibWRtYV9zdGFydChxYyk7CS8qIGluaXRpYXRlIGJtZG1hICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCWF0YV9kYXRhX3hmZXIoYXAsIHFjLT5jZGIsIHFjLT5kZXYtPmNkYl9sZW4sIDEpOworCisJCS8qIFBJTyBjb21tYW5kcyBhcmUgaGFuZGxlZCBieSBwb2xsaW5nICovCisJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKKwkJYXRhX3BvcnRfcXVldWVfdGFzayhhcCwgYXRhX3Bpb190YXNrLCBhcCwgMCk7CisJfQorCisJcmV0dXJuOworCitlcnJfb3V0OgorCWF0YV9wb2xsX3FjX2NvbXBsZXRlKHFjKTsKK30KKworLyoqCiAgKglhdGFfcWNfdGltZW91dCAtIEhhbmRsZSB0aW1lb3V0IG9mIHF1ZXVlZCBjb21tYW5kCiAgKglAcWM6IENvbW1hbmQgdGhhdCB0aW1lZCBvdXQKICAqCkBAIC0zNDQwLDE1ICszODQ2LDkgQEAKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVF9JRExFOwogCi0JLyogaGFjayBhbGVydCEgIFdlIGNhbm5vdCB1c2UgdGhlIHN1cHBsaWVkIGNvbXBsZXRpb24KLQkgKiBmdW5jdGlvbiBmcm9tIGluc2lkZSB0aGUgLT5laF9zdHJhdGVneV9oYW5kbGVyKCkgdGhyZWFkLgotCSAqIGxpYmF0YSBpcyB0aGUgb25seSB1c2VyIG9mIC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIGluCi0JICogYW55IGtlcm5lbCwgc28gdGhlIGRlZmF1bHQgc2NzaV9kb25lKCkgYXNzdW1lcyBpdCBpcwotCSAqIG5vdCBiZWluZyBjYWxsZWQgZnJvbSB0aGUgU0NTSSBFSC4KLQkgKi8KLQlxYy0+c2NzaWRvbmUgPSBzY3NpX2ZpbmlzaF9jb21tYW5kOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCiAJc3dpdGNoIChxYy0+dGYucHJvdG9jb2wpIHsKIApAQCAtMzQ3MywxMiArMzg3MywxMyBAQAogCiAJCS8qIGNvbXBsZXRlIHRhc2tmaWxlIHRyYW5zYWN0aW9uICovCiAJCXFjLT5lcnJfbWFzayB8PSBhY19lcnJfbWFzayhkcnZfc3RhdCk7Ci0JCWF0YV9xY19jb21wbGV0ZShxYyk7CiAJCWJyZWFrOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAKKwlhdGFfZWhfcWNfY29tcGxldGUocWMpOworCiAJRFBSSU5USygiRVhJVFxuIik7CiB9CiAKQEAgLTM1MDMsMjAgKzM5MDQsMTAgQEAKIAogdm9pZCBhdGFfZW5nX3RpbWVvdXQoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwotCiAJRFBSSU5USygiRU5URVJcbiIpOwogCi0JcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKLQlpZiAocWMpCi0JCWF0YV9xY190aW1lb3V0KHFjKTsKLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogQlVHOiB0aW1lb3V0IHdpdGhvdXQgY29tbWFuZFxuIiwKLQkJICAgICAgIGFwLT5pZCk7Ci0JCWdvdG8gb3V0OwotCX0KKwlhdGFfcWNfdGltZW91dChhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKSk7CiAKLW91dDoKIAlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIApAQCAtMzU3MiwyMSArMzk2Myw2IEBACiAJcmV0dXJuIHFjOwogfQogCi1zdGF0aWMgdm9pZCBfX2F0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0JdW5zaWduZWQgaW50IHRhZzsKLQotCXFjLT5mbGFncyA9IDA7Ci0JdGFnID0gcWMtPnRhZzsKLQlpZiAobGlrZWx5KGF0YV90YWdfdmFsaWQodGFnKSkpIHsKLQkJaWYgKHRhZyA9PSBhcC0+YWN0aXZlX3RhZykKLQkJCWFwLT5hY3RpdmVfdGFnID0gQVRBX1RBR19QT0lTT047Ci0JCXFjLT50YWcgPSBBVEFfVEFHX1BPSVNPTjsKLQkJY2xlYXJfYml0KHRhZywgJmFwLT5xYWN0aXZlKTsKLQl9Ci19Ci0KIC8qKgogICoJYXRhX3FjX2ZyZWUgLSBmcmVlIHVudXNlZCBhdGFfcXVldWVkX2NtZAogICoJQHFjOiBDb21tYW5kIHRvIGNvbXBsZXRlCkBAIC0zNTk5LDI5ICszOTc1LDI1IEBACiAgKi8KIHZvaWQgYXRhX3FjX2ZyZWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlhc3NlcnQocWMgIT0gTlVMTCk7CS8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwl1bnNpZ25lZCBpbnQgdGFnOwogCi0JX19hdGFfcWNfY29tcGxldGUocWMpOworCVdBUk5fT04ocWMgPT0gTlVMTCk7CS8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCisKKwlxYy0+ZmxhZ3MgPSAwOworCXRhZyA9IHFjLT50YWc7CisJaWYgKGxpa2VseShhdGFfdGFnX3ZhbGlkKHRhZykpKSB7CisJCWlmICh0YWcgPT0gYXAtPmFjdGl2ZV90YWcpCisJCQlhcC0+YWN0aXZlX3RhZyA9IEFUQV9UQUdfUE9JU09OOworCQlxYy0+dGFnID0gQVRBX1RBR19QT0lTT047CisJCWNsZWFyX2JpdCh0YWcsICZhcC0+cWFjdGl2ZSk7CisJfQogfQogCi0vKioKLSAqCWF0YV9xY19jb21wbGV0ZSAtIENvbXBsZXRlIGFuIGFjdGl2ZSBBVEEgY29tbWFuZAotICoJQHFjOiBDb21tYW5kIHRvIGNvbXBsZXRlCi0gKglAZXJyX21hc2s6IEFUQSBTdGF0dXMgcmVnaXN0ZXIgY29udGVudHMKLSAqCi0gKglJbmRpY2F0ZSB0byB0aGUgbWlkIGFuZCB1cHBlciBsYXllcnMgdGhhdCBhbiBBVEEKLSAqCWNvbW1hbmQgaGFzIGNvbXBsZXRlZCwgd2l0aCBlaXRoZXIgYW4gb2sgb3Igbm90LW9rIHN0YXR1cy4KLSAqCi0gKglMT0NLSU5HOgotICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKLSAqLwotCi12b2lkIGF0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQordm9pZCBfX2F0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCWludCByYzsKLQotCWFzc2VydChxYyAhPSBOVUxMKTsJLyogYXRhX3FjX2Zyb21fdGFnIF9taWdodF8gcmV0dXJuIE5VTEwgKi8KLQlhc3NlcnQocWMtPmZsYWdzICYgQVRBX1FDRkxBR19BQ1RJVkUpOworCVdBUk5fT04ocWMgPT0gTlVMTCk7CS8qIGF0YV9xY19mcm9tX3RhZyBfbWlnaHRfIHJldHVybiBOVUxMICovCisJV0FSTl9PTighKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKSk7CiAKIAlpZiAobGlrZWx5KHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSkKIAkJYXRhX3NnX2NsZWFuKHFjKTsKQEAgLTM2MzMsMTcgKzQwMDUsNyBAQAogCXFjLT5mbGFncyAmPSB+QVRBX1FDRkxBR19BQ1RJVkU7CiAKIAkvKiBjYWxsIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KLQlyYyA9IHFjLT5jb21wbGV0ZV9mbihxYyk7Ci0KLQkvKiBpZiBjYWxsYmFjayBpbmRpY2F0ZXMgbm90IHRvIGNvbXBsZXRlIGNvbW1hbmQgKG5vbi16ZXJvKSwKLQkgKiByZXR1cm4gaW1tZWRpYXRlbHkKLQkgKi8KLQlpZiAocmMgIT0gMCkKLQkJcmV0dXJuOwotCi0JX19hdGFfcWNfY29tcGxldGUocWMpOwotCi0JVlBSSU5USygiRVhJVFxuIik7CisJcWMtPmNvbXBsZXRlX2ZuKHFjKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYXRhX3Nob3VsZF9kbWFfbWFwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCkBAIC0zNjU3LDcgKzQwMTksNiBAQAogCiAJY2FzZSBBVEFfUFJPVF9BVEFQSToKIAljYXNlIEFUQV9QUk9UX1BJTzoKLQljYXNlIEFUQV9QUk9UX1BJT19NVUxUOgogCQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUElPX0RNQSkKIAkJCXJldHVybiAxOwogCkBAIC0zNjgzLDIwICs0MDQ0LDIwIEBACiAgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQogICoKICAqCVJFVFVSTlM6Ci0gKglaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGVycm9yLgorICoJWmVybyBvbiBzdWNjZXNzLCBBQ19FUlJfKiBtYXNrIG9uIGZhaWx1cmUKICAqLwogCi1pbnQgYXRhX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit1bnNpZ25lZCBpbnQgYXRhX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAogCWlmIChhdGFfc2hvdWxkX2RtYV9tYXAocWMpKSB7CiAJCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX1NHKSB7CiAJCQlpZiAoYXRhX3NnX3NldHVwKHFjKSkKLQkJCQlnb3RvIGVycl9vdXQ7CisJCQkJZ290byBzZ19lcnI7CiAJCX0gZWxzZSBpZiAocWMtPmZsYWdzICYgQVRBX1FDRkxBR19TSU5HTEUpIHsKIAkJCWlmIChhdGFfc2dfc2V0dXBfb25lKHFjKSkKLQkJCQlnb3RvIGVycl9vdXQ7CisJCQkJZ290byBzZ19lcnI7CiAJCX0KIAl9IGVsc2UgewogCQlxYy0+ZmxhZ3MgJj0gfkFUQV9RQ0ZMQUdfRE1BTUFQOwpAQCAtMzcwOSw4ICs0MDcwLDkgQEAKIAogCXJldHVybiBhcC0+b3BzLT5xY19pc3N1ZShxYyk7CiAKLWVycl9vdXQ6Ci0JcmV0dXJuIC0xOworc2dfZXJyOgorCXFjLT5mbGFncyAmPSB+QVRBX1FDRkxBR19ETUFNQVA7CisJcmV0dXJuIEFDX0VSUl9TWVNURU07CiB9CiAKIApAQCAtMzcyOSwxMCArNDA5MSwxMCBAQAogICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKICAqCiAgKglSRVRVUk5TOgotICoJWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJvci4KKyAqCVplcm8gb24gc3VjY2VzcywgQUNfRVJSXyogbWFzayBvbiBmYWlsdXJlCiAgKi8KIAotaW50IGF0YV9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit1bnNpZ25lZCBpbnQgYXRhX3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCkBAIC0zNzUzLDI2OCArNDExNSwzNyBAQAogCQlhdGFfcWNfc2V0X3BvbGxpbmcocWMpOwogCQlhdGFfdGZfdG9faG9zdChhcCwgJnFjLT50Zik7CiAJCWFwLT5oc21fdGFza19zdGF0ZSA9IEhTTV9TVDsKLQkJcXVldWVfd29yayhhdGFfd3EsICZhcC0+cGlvX3Rhc2spOworCQlhdGFfcG9ydF9xdWV1ZV90YXNrKGFwLCBhdGFfcGlvX3Rhc2ssIGFwLCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFUQV9QUk9UX0FUQVBJOgogCQlhdGFfcWNfc2V0X3BvbGxpbmcocWMpOwogCQlhdGFfdGZfdG9faG9zdChhcCwgJnFjLT50Zik7Ci0JCXF1ZXVlX3dvcmsoYXRhX3dxLCAmYXAtPnBhY2tldF90YXNrKTsKKwkJYXRhX3BvcnRfcXVldWVfdGFzayhhcCwgYXRhcGlfcGFja2V0X3Rhc2ssIGFwLCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFUQV9QUk9UX0FUQVBJX05PREFUQToKIAkJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX05PSU5UUjsKIAkJYXRhX3RmX3RvX2hvc3QoYXAsICZxYy0+dGYpOwotCQlxdWV1ZV93b3JrKGF0YV93cSwgJmFwLT5wYWNrZXRfdGFzayk7CisJCWF0YV9wb3J0X3F1ZXVlX3Rhc2soYXAsIGF0YXBpX3BhY2tldF90YXNrLCBhcCwgMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBBVEFfUFJPVF9BVEFQSV9ETUE6CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19OT0lOVFI7CiAJCWFwLT5vcHMtPnRmX2xvYWQoYXAsICZxYy0+dGYpOwkgLyogbG9hZCB0ZiByZWdpc3RlcnMgKi8KIAkJYXAtPm9wcy0+Ym1kbWFfc2V0dXAocWMpOwkgICAgLyogc2V0IHVwIGJtZG1hICovCi0JCXF1ZXVlX3dvcmsoYXRhX3dxLCAmYXAtPnBhY2tldF90YXNrKTsKKwkJYXRhX3BvcnRfcXVldWVfdGFzayhhcCwgYXRhcGlfcGFja2V0X3Rhc2ssIGFwLCAwKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiBBQ19FUlJfU1lTVEVNOwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKioKLSAqCWF0YV9ibWRtYV9zZXR1cF9tbWlvIC0gU2V0IHVwIFBDSSBJREUgQk1ETUEgdHJhbnNhY3Rpb24KLSAqCUBxYzogSW5mbyBhc3NvY2lhdGVkIHdpdGggdGhpcyBBVEEgdHJhbnNhY3Rpb24uCi0gKgotICoJTE9DS0lORzoKLSAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCi0gKi8KLQotc3RhdGljIHZvaWQgYXRhX2JtZG1hX3NldHVwX21taW8gKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCi17Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKLQl1bnNpZ25lZCBpbnQgcncgPSAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKTsKLQl1OCBkbWFjdGw7Ci0Jdm9pZCBfX2lvbWVtICptbWlvID0gKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7Ci0KLQkvKiBsb2FkIFBSRCB0YWJsZSBhZGRyLiAqLwotCW1iKCk7CS8qIG1ha2Ugc3VyZSBQUkQgdGFibGUgd3JpdGVzIGFyZSB2aXNpYmxlIHRvIGNvbnRyb2xsZXIgKi8KLQl3cml0ZWwoYXAtPnByZF9kbWEsIG1taW8gKyBBVEFfRE1BX1RBQkxFX09GUyk7Ci0KLQkvKiBzcGVjaWZ5IGRhdGEgZGlyZWN0aW9uLCB0cmlwbGUtY2hlY2sgc3RhcnQgYml0IGlzIGNsZWFyICovCi0JZG1hY3RsID0gcmVhZGIobW1pbyArIEFUQV9ETUFfQ01EKTsKLQlkbWFjdGwgJj0gfihBVEFfRE1BX1dSIHwgQVRBX0RNQV9TVEFSVCk7Ci0JaWYgKCFydykKLQkJZG1hY3RsIHw9IEFUQV9ETUFfV1I7Ci0Jd3JpdGViKGRtYWN0bCwgbW1pbyArIEFUQV9ETUFfQ01EKTsKLQotCS8qIGlzc3VlIHIvdyBjb21tYW5kICovCi0JYXAtPm9wcy0+ZXhlY19jb21tYW5kKGFwLCAmcWMtPnRmKTsKLX0KLQotLyoqCi0gKglhdGFfYm1kbWFfc3RhcnRfbW1pbyAtIFN0YXJ0IGEgUENJIElERSBCTURNQSB0cmFuc2FjdGlvbgotICoJQHFjOiBJbmZvIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KLSAqCi0gKglMT0NLSU5HOgotICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKLSAqLwotCi1zdGF0aWMgdm9pZCBhdGFfYm1kbWFfc3RhcnRfbW1pbyAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKLXsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwotCXZvaWQgX19pb21lbSAqbW1pbyA9ICh2b2lkIF9faW9tZW0gKikgYXAtPmlvYWRkci5ibWRtYV9hZGRyOwotCXU4IGRtYWN0bDsKLQotCS8qIHN0YXJ0IGhvc3QgRE1BIHRyYW5zYWN0aW9uICovCi0JZG1hY3RsID0gcmVhZGIobW1pbyArIEFUQV9ETUFfQ01EKTsKLQl3cml0ZWIoZG1hY3RsIHwgQVRBX0RNQV9TVEFSVCwgbW1pbyArIEFUQV9ETUFfQ01EKTsKLQotCS8qIFN0cmljdGx5LCBvbmUgbWF5IHdpc2ggdG8gaXNzdWUgYSByZWFkYigpIGhlcmUsIHRvCi0JICogZmx1c2ggdGhlIG1taW8gd3JpdGUuICBIb3dldmVyLCBjb250cm9sIGFsc28gcGFzc2VzCi0JICogdG8gdGhlIGhhcmR3YXJlIGF0IHRoaXMgcG9pbnQsIGFuZCBpdCB3aWxsIGludGVycnVwdAotCSAqIHVzIHdoZW4gd2UgYXJlIHRvIHJlc3VtZSBjb250cm9sLiAgU28sIGluIGVmZmVjdCwKLQkgKiB3ZSBkb24ndCBjYXJlIHdoZW4gdGhlIG1taW8gd3JpdGUgZmx1c2hlcy4KLQkgKiBGdXJ0aGVyLCBhIHJlYWQgb2YgdGhlIERNQSBzdGF0dXMgcmVnaXN0ZXIgX2ltbWVkaWF0ZWx5XwotCSAqIGZvbGxvd2luZyB0aGUgd3JpdGUgbWF5IG5vdCBiZSB3aGF0IGNlcnRhaW4gZmxha3kgaGFyZHdhcmUKLQkgKiBpcyBleHBlY3RlZCwgc28gSSB0aGluayBpdCBpcyBiZXN0IHRvIG5vdCBhZGQgYSByZWFkYigpCi0JICogd2l0aG91dCBmaXJzdCBhbGwgdGhlIE1NSU8gQVRBIGNhcmRzL21vYm9zLgotCSAqIE9yIG1heWJlIEknbSBqdXN0IGJlaW5nIHBhcmFub2lkLgotCSAqLwotfQotCi0vKioKLSAqCWF0YV9ibWRtYV9zZXR1cF9waW8gLSBTZXQgdXAgUENJIElERSBCTURNQSB0cmFuc2FjdGlvbiAoUElPKQotICoJQHFjOiBJbmZvIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KLSAqCi0gKglMT0NLSU5HOgotICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKLSAqLwotCi1zdGF0aWMgdm9pZCBhdGFfYm1kbWFfc2V0dXBfcGlvIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0JdW5zaWduZWQgaW50IHJ3ID0gKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSk7Ci0JdTggZG1hY3RsOwotCi0JLyogbG9hZCBQUkQgdGFibGUgYWRkci4gKi8KLQlvdXRsKGFwLT5wcmRfZG1hLCBhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX1RBQkxFX09GUyk7Ci0KLQkvKiBzcGVjaWZ5IGRhdGEgZGlyZWN0aW9uLCB0cmlwbGUtY2hlY2sgc3RhcnQgYml0IGlzIGNsZWFyICovCi0JZG1hY3RsID0gaW5iKGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfQ01EKTsKLQlkbWFjdGwgJj0gfihBVEFfRE1BX1dSIHwgQVRBX0RNQV9TVEFSVCk7Ci0JaWYgKCFydykKLQkJZG1hY3RsIHw9IEFUQV9ETUFfV1I7Ci0Jb3V0YihkbWFjdGwsIGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfQ01EKTsKLQotCS8qIGlzc3VlIHIvdyBjb21tYW5kICovCi0JYXAtPm9wcy0+ZXhlY19jb21tYW5kKGFwLCAmcWMtPnRmKTsKLX0KLQotLyoqCi0gKglhdGFfYm1kbWFfc3RhcnRfcGlvIC0gU3RhcnQgYSBQQ0kgSURFIEJNRE1BIHRyYW5zYWN0aW9uIChQSU8pCi0gKglAcWM6IEluZm8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQotICovCi0KLXN0YXRpYyB2b2lkIGF0YV9ibWRtYV9zdGFydF9waW8gKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCi17Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKLQl1OCBkbWFjdGw7Ci0KLQkvKiBzdGFydCBob3N0IERNQSB0cmFuc2FjdGlvbiAqLwotCWRtYWN0bCA9IGluYihhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX0NNRCk7Ci0Jb3V0YihkbWFjdGwgfCBBVEFfRE1BX1NUQVJULAotCSAgICAgYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9DTUQpOwotfQotCi0KLS8qKgotICoJYXRhX2JtZG1hX3N0YXJ0IC0gU3RhcnQgYSBQQ0kgSURFIEJNRE1BIHRyYW5zYWN0aW9uCi0gKglAcWM6IEluZm8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgotICoKLSAqCVdyaXRlcyB0aGUgQVRBX0RNQV9TVEFSVCBmbGFnIHRvIHRoZSBETUEgY29tbWFuZCByZWdpc3Rlci4KLSAqCi0gKglNYXkgYmUgdXNlZCBhcyB0aGUgYm1kbWFfc3RhcnQoKSBlbnRyeSBpbiBhdGFfcG9ydF9vcGVyYXRpb25zLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQotICovCi12b2lkIGF0YV9ibWRtYV9zdGFydChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCWlmIChxYy0+YXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykKLQkJYXRhX2JtZG1hX3N0YXJ0X21taW8ocWMpOwotCWVsc2UKLQkJYXRhX2JtZG1hX3N0YXJ0X3BpbyhxYyk7Ci19Ci0KLQotLyoqCi0gKglhdGFfYm1kbWFfc2V0dXAgLSBTZXQgdXAgUENJIElERSBCTURNQSB0cmFuc2FjdGlvbgotICoJQHFjOiBJbmZvIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEFUQSB0cmFuc2FjdGlvbi4KLSAqCi0gKglXcml0ZXMgYWRkcmVzcyBvZiBQUkQgdGFibGUgdG8gZGV2aWNlJ3MgUFJEIFRhYmxlIEFkZHJlc3MKLSAqCXJlZ2lzdGVyLCBzZXRzIHRoZSBETUEgY29udHJvbCByZWdpc3RlciwgYW5kIGNhbGxzCi0gKglvcHMtPmV4ZWNfY29tbWFuZCgpIHRvIHN0YXJ0IHRoZSB0cmFuc2Zlci4KLSAqCi0gKglNYXkgYmUgdXNlZCBhcyB0aGUgYm1kbWFfc2V0dXAoKSBlbnRyeSBpbiBhdGFfcG9ydF9vcGVyYXRpb25zLgotICoKLSAqCUxPQ0tJTkc6Ci0gKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQotICovCi12b2lkIGF0YV9ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCWlmIChxYy0+YXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykKLQkJYXRhX2JtZG1hX3NldHVwX21taW8ocWMpOwotCWVsc2UKLQkJYXRhX2JtZG1hX3NldHVwX3BpbyhxYyk7Ci19Ci0KLQotLyoqCi0gKglhdGFfYm1kbWFfaXJxX2NsZWFyIC0gQ2xlYXIgUENJIElERSBCTURNQSBpbnRlcnJ1cHQuCi0gKglAYXA6IFBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgotICoKLSAqCUNsZWFyIGludGVycnVwdCBhbmQgZXJyb3IgZmxhZ3MgaW4gRE1BIHN0YXR1cyByZWdpc3Rlci4KLSAqCi0gKglNYXkgYmUgdXNlZCBhcyB0aGUgaXJxX2NsZWFyKCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKLSAqLwotCi12b2lkIGF0YV9ibWRtYV9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLSAgICBpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykgewotICAgICAgICB2b2lkIF9faW9tZW0gKm1taW8gPSAoKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmJtZG1hX2FkZHIpICsgQVRBX0RNQV9TVEFUVVM7Ci0gICAgICAgIHdyaXRlYihyZWFkYihtbWlvKSwgbW1pbyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyID0gYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9TVEFUVVM7Ci0gICAgICAgIG91dGIoaW5iKGFkZHIpLCBhZGRyKTsKLSAgICB9Ci0KLX0KLQotCi0vKioKLSAqCWF0YV9ibWRtYV9zdGF0dXMgLSBSZWFkIFBDSSBJREUgQk1ETUEgc3RhdHVzCi0gKglAYXA6IFBvcnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVRBIHRyYW5zYWN0aW9uLgotICoKLSAqCVJlYWQgYW5kIHJldHVybiBCTURNQSBzdGF0dXMgcmVnaXN0ZXIuCi0gKgotICoJTWF5IGJlIHVzZWQgYXMgdGhlIGJtZG1hX3N0YXR1cygpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCi0gKgotICoJTE9DS0lORzoKLSAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCi0gKi8KLQotdTggYXRhX2JtZG1hX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXU4IGhvc3Rfc3RhdDsKLQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykgewotCQl2b2lkIF9faW9tZW0gKm1taW8gPSAodm9pZCBfX2lvbWVtICopIGFwLT5pb2FkZHIuYm1kbWFfYWRkcjsKLQkJaG9zdF9zdGF0ID0gcmVhZGIobW1pbyArIEFUQV9ETUFfU1RBVFVTKTsKLQl9IGVsc2UKLQkJaG9zdF9zdGF0ID0gaW5iKGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfU1RBVFVTKTsKLQlyZXR1cm4gaG9zdF9zdGF0OwotfQotCi0KLS8qKgotICoJYXRhX2JtZG1hX3N0b3AgLSBTdG9wIFBDSSBJREUgQk1ETUEgdHJhbnNmZXIKLSAqCUBxYzogQ29tbWFuZCB3ZSBhcmUgZW5kaW5nIERNQSBmb3IKLSAqCi0gKglDbGVhcnMgdGhlIEFUQV9ETUFfU1RBUlQgZmxhZyBpbiB0aGUgZG1hIGNvbnRyb2wgcmVnaXN0ZXIKLSAqCi0gKglNYXkgYmUgdXNlZCBhcyB0aGUgYm1kbWFfc3RvcCgpIGVudHJ5IGluIGF0YV9wb3J0X29wZXJhdGlvbnMuCi0gKgotICoJTE9DS0lORzoKLSAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCi0gKi8KLQotdm9pZCBhdGFfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0JaWYgKGFwLT5mbGFncyAmIEFUQV9GTEFHX01NSU8pIHsKLQkJdm9pZCBfX2lvbWVtICptbWlvID0gKHZvaWQgX19pb21lbSAqKSBhcC0+aW9hZGRyLmJtZG1hX2FkZHI7Ci0KLQkJLyogY2xlYXIgc3RhcnQvc3RvcCBiaXQgKi8KLQkJd3JpdGViKHJlYWRiKG1taW8gKyBBVEFfRE1BX0NNRCkgJiB+QVRBX0RNQV9TVEFSVCwKLQkJCW1taW8gKyBBVEFfRE1BX0NNRCk7Ci0JfSBlbHNlIHsKLQkJLyogY2xlYXIgc3RhcnQvc3RvcCBiaXQgKi8KLQkJb3V0YihpbmIoYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9DTUQpICYgfkFUQV9ETUFfU1RBUlQsCi0JCQlhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX0NNRCk7Ci0JfQotCi0JLyogb25lLVBJTy1jeWNsZSBndWFyYW50ZWVkIHdhaXQsIHBlciBzcGVjLCBmb3IgSERNQTE6MCB0cmFuc2l0aW9uICovCi0JYXRhX2FsdHN0YXR1cyhhcCk7ICAgICAgICAvKiBkdW1teSByZWFkICovCi19Ci0KLS8qKgogICoJYXRhX2hvc3RfaW50ciAtIEhhbmRsZSBob3N0IGludGVycnVwdCBmb3IgZ2l2ZW4gKHBvcnQsIHRhc2spCiAgKglAYXA6IFBvcnQgb24gd2hpY2ggaW50ZXJydXB0IGFycml2ZWQgKHBvc3NpYmx5Li4uKQogICoJQHFjOiBUYXNrZmlsZSBjdXJyZW50bHkgYWN0aXZlIGluIGVuZ2luZQpAQCAtNDA4Niw5ICs0MjE3LDkgQEAKIAogI2lmZGVmIEFUQV9JUlFfVFJBUAogCWlmICgoYXAtPnN0YXRzLmlkbGVfaXJxICUgMTAwMCkgPT0gMCkgewotCQloYW5kbGVkID0gMTsKIAkJYXRhX2lycV9hY2soYXAsIDApOyAvKiBkZWJ1ZyB0cmFwICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YSVkOiBpcnEgdHJhcFxuIiwgYXAtPmlkKTsKKwkJcmV0dXJuIDE7CiAJfQogI2VuZGlmCiAJcmV0dXJuIDA7CS8qIGlycSBub3QgaGFuZGxlZCAqLwpAQCAtNDE0MCw5MSArNDI3MSw2IEBACiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKLS8qKgotICoJYXRhcGlfcGFja2V0X3Rhc2sgLSBXcml0ZSBDREIgYnl0ZXMgdG8gaGFyZHdhcmUKLSAqCUBfZGF0YTogUG9ydCB0byB3aGljaCBBVEFQSSBkZXZpY2UgaXMgYXR0YWNoZWQuCi0gKgotICoJV2hlbiBkZXZpY2UgaGFzIGluZGljYXRlZCBpdHMgcmVhZGluZXNzIHRvIGFjY2VwdAotICoJYSBDREIsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiAgU2VuZCB0aGUgQ0RCLgotICoJSWYgRE1BIGlzIHRvIGJlIHBlcmZvcm1lZCwgZXhpdCBpbW1lZGlhdGVseS4KLSAqCU90aGVyd2lzZSwgd2UgYXJlIGluIHBvbGxpbmcgbW9kZSwgc28gcG9sbAotICoJc3RhdHVzIHVuZGVyIG9wZXJhdGlvbiBzdWNjZWVkcyBvciBmYWlscy4KLSAqCi0gKglMT0NLSU5HOgotICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCi0gKi8KLQotc3RhdGljIHZvaWQgYXRhcGlfcGFja2V0X3Rhc2sodm9pZCAqX2RhdGEpCi17Ci0Jc3RydWN0IGF0YV9wb3J0ICphcCA9IF9kYXRhOwotCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7Ci0JdTggc3RhdHVzOwotCi0JcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKLQlhc3NlcnQocWMgIT0gTlVMTCk7Ci0JYXNzZXJ0KHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfQUNUSVZFKTsKLQotCS8qIHNsZWVwLXdhaXQgZm9yIEJTWSB0byBjbGVhciAqLwotCURQUklOVEsoImJ1c3kgd2FpdFxuIik7Ci0JaWYgKGF0YV9idXN5X3NsZWVwKGFwLCBBVEFfVE1PVVRfQ0RCX1FVSUNLLCBBVEFfVE1PVVRfQ0RCKSkgewotCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX0FUQV9CVVM7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0KLQkvKiBtYWtlIHN1cmUgRFJRIGlzIHNldCAqLwotCXN0YXR1cyA9IGF0YV9jaGtfc3RhdHVzKGFwKTsKLQlpZiAoKHN0YXR1cyAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKSAhPSBBVEFfRFJRKSB7Ci0JCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfQVRBX0JVUzsKLQkJZ290byBlcnJfb3V0OwotCX0KLQotCS8qIHNlbmQgU0NTSSBjZGIgKi8KLQlEUFJJTlRLKCJzZW5kIGNkYlxuIik7Ci0JYXNzZXJ0KGFwLT5jZGJfbGVuID49IDEyKTsKLQotCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfQVRBUElfRE1BIHx8Ci0JICAgIHFjLT50Zi5wcm90b2NvbCA9PSBBVEFfUFJPVF9BVEFQSV9OT0RBVEEpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkvKiBPbmNlIHdlJ3JlIGRvbmUgaXNzdWluZyBjb21tYW5kIGFuZCBraWNraW5nIGJtZG1hLAotCQkgKiBpcnEgaGFuZGxlciB0YWtlcyBvdmVyLiAgVG8gbm90IGxvc2UgaXJxLCB3ZSBuZWVkCi0JCSAqIHRvIGNsZWFyIE5PSU5UUiBmbGFnIGJlZm9yZSBzZW5kaW5nIGNkYiwgYnV0Ci0JCSAqIGludGVycnVwdCBoYW5kbGVyIHNob3VsZG4ndCBiZSBpbnZva2VkIGJlZm9yZSB3ZSdyZQotCQkgKiBmaW5pc2hlZC4gIEhlbmNlLCB0aGUgZm9sbG93aW5nIGxvY2tpbmcuCi0JCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7Ci0JCWFwLT5mbGFncyAmPSB+QVRBX0ZMQUdfTk9JTlRSOwotCQlhdGFfZGF0YV94ZmVyKGFwLCBxYy0+Y2RiLCBhcC0+Y2RiX2xlbiwgMSk7Ci0JCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfQVRBUElfRE1BKQotCQkJYXAtPm9wcy0+Ym1kbWFfc3RhcnQocWMpOwkvKiBpbml0aWF0ZSBibWRtYSAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgewotCQlhdGFfZGF0YV94ZmVyKGFwLCBxYy0+Y2RiLCBhcC0+Y2RiX2xlbiwgMSk7Ci0KLQkJLyogUElPIGNvbW1hbmRzIGFyZSBoYW5kbGVkIGJ5IHBvbGxpbmcgKi8KLQkJYXAtPmhzbV90YXNrX3N0YXRlID0gSFNNX1NUOwotCQlxdWV1ZV93b3JrKGF0YV93cSwgJmFwLT5waW9fdGFzayk7Ci0JfQotCi0JcmV0dXJuOwotCi1lcnJfb3V0OgotCWF0YV9wb2xsX3FjX2NvbXBsZXRlKHFjKTsKLX0KLQotCi0vKioKLSAqCWF0YV9wb3J0X3N0YXJ0IC0gU2V0IHBvcnQgdXAgZm9yIGRtYS4KLSAqCUBhcDogUG9ydCB0byBpbml0aWFsaXplCi0gKgotICoJQ2FsbGVkIGp1c3QgYWZ0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGZvciBlYWNoIHBvcnQgYXJlCi0gKglpbml0aWFsaXplZC4gIEFsbG9jYXRlcyBzcGFjZSBmb3IgUFJEIHRhYmxlLgotICoKLSAqCU1heSBiZSB1c2VkIGFzIHRoZSBwb3J0X3N0YXJ0KCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KLSAqCi0gKglMT0NLSU5HOgotICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgotICovCiAKIC8qCiAgKiBFeGVjdXRlIGEgJ3NpbXBsZScgY29tbWFuZCwgdGhhdCBvbmx5IGNvbnNpc3RzIG9mIHRoZSBvcGNvZGUgJ2NtZCcgaXRzZWxmLApAQCAtNDI3Nyw2ICs0MzIzLDggQEAKIAogLyoqCiAgKglhdGFfZGV2aWNlX3Jlc3VtZSAtIHdha2V1cCBhIHByZXZpb3VzbHkgc3VzcGVuZGVkIGRldmljZXMKKyAqCUBhcDogcG9ydCB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0bworICoJQGRldjogdGhlIGRldmljZSB0byByZXN1bWUKICAqCiAgKglLaWNrIHRoZSBkcml2ZSBiYWNrIGludG8gYWN0aW9uLCBieSBzZW5kaW5nIGl0IGFuIGlkbGUgaW1tZWRpYXRlCiAgKgljb21tYW5kIGFuZCBtYWtpbmcgc3VyZSBpdHMgdHJhbnNmZXIgbW9kZSBtYXRjaGVzIGJldHdlZW4gZHJpdmUKQEAgLTQyOTksMjYgKzQzNDcsNDEgQEAKIAogLyoqCiAgKglhdGFfZGV2aWNlX3N1c3BlbmQgLSBwcmVwYXJlIGEgZGV2aWNlIGZvciBzdXNwZW5kCisgKglAYXA6IHBvcnQgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQgdG8KKyAqCUBkZXY6IHRoZSBkZXZpY2UgdG8gc3VzcGVuZAogICoKICAqCUZsdXNoIHRoZSBjYWNoZSBvbiB0aGUgZHJpdmUsIGlmIGFwcHJvcHJpYXRlLCB0aGVuIGlzc3VlIGEKICAqCXN0YW5kYnlub3cgY29tbWFuZC4KLSAqCiAgKi8KLWludCBhdGFfZGV2aWNlX3N1c3BlbmQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKK2ludCBhdGFfZGV2aWNlX3N1c3BlbmQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWlmICghYXRhX2Rldl9wcmVzZW50KGRldikpCiAJCXJldHVybiAwOwogCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBKQogCQlhdGFfZmx1c2hfY2FjaGUoYXAsIGRldik7CiAKLQlhdGFfc3RhbmRieV9kcml2ZShhcCwgZGV2KTsKKwlpZiAoc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfRlJFRVpFKQorCQlhdGFfc3RhbmRieV9kcml2ZShhcCwgZGV2KTsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU1VTUEVOREVEOwogCXJldHVybiAwOwogfQogCisvKioKKyAqCWF0YV9wb3J0X3N0YXJ0IC0gU2V0IHBvcnQgdXAgZm9yIGRtYS4KKyAqCUBhcDogUG9ydCB0byBpbml0aWFsaXplCisgKgorICoJQ2FsbGVkIGp1c3QgYWZ0ZXIgZGF0YSBzdHJ1Y3R1cmVzIGZvciBlYWNoIHBvcnQgYXJlCisgKglpbml0aWFsaXplZC4gIEFsbG9jYXRlcyBzcGFjZSBmb3IgUFJEIHRhYmxlLgorICoKKyAqCU1heSBiZSB1c2VkIGFzIHRoZSBwb3J0X3N0YXJ0KCkgZW50cnkgaW4gYXRhX3BvcnRfb3BlcmF0aW9ucy4KKyAqCisgKglMT0NLSU5HOgorICoJSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCisKIGludCBhdGFfcG9ydF9zdGFydCAoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcC0+aG9zdF9zZXQtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcC0+ZGV2OwogCWludCByYzsKIAogCWFwLT5wcmQgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBBVEFfUFJEX1RCTF9TWiwgJmFwLT5wcmRfZG1hLCBHRlBfS0VSTkVMKTsKQEAgLTQzNTEsNyArNDQxNCw3IEBACiAKIHZvaWQgYXRhX3BvcnRfc3RvcCAoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcC0+aG9zdF9zZXQtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBhcC0+ZGV2OwogCiAJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBBVEFfUFJEX1RCTF9TWiwgYXAtPnByZCwgYXAtPnByZF9kbWEpOwogCWF0YV9wYWRfZnJlZShhcCwgZGV2KTsKQEAgLTQ0MTcsNiArNDQ4MCw3IEBACiAJYXAtPmhvc3QgPSBob3N0OwogCWFwLT5jdGwgPSBBVEFfREVWQ1RMX09CUzsKIAlhcC0+aG9zdF9zZXQgPSBob3N0X3NldDsKKwlhcC0+ZGV2ID0gZW50LT5kZXY7CiAJYXAtPnBvcnRfbm8gPSBwb3J0X25vOwogCWFwLT5oYXJkX3BvcnRfbm8gPQogCQllbnQtPmxlZ2FjeV9tb2RlID8gZW50LT5oYXJkX3BvcnRfbm8gOiBwb3J0X25vOwpAQCAtNDQyOSwxMSArNDQ5MywxNiBAQAogCWFwLT5hY3RpdmVfdGFnID0gQVRBX1RBR19QT0lTT047CiAJYXAtPmxhc3RfY3RsID0gMHhGRjsKIAotCUlOSVRfV09SSygmYXAtPnBhY2tldF90YXNrLCBhdGFwaV9wYWNrZXRfdGFzaywgYXApOwotCUlOSVRfV09SSygmYXAtPnBpb190YXNrLCBhdGFfcGlvX3Rhc2ssIGFwKTsKKwlJTklUX1dPUksoJmFwLT5wb3J0X3Rhc2ssIE5VTEwsIE5VTEwpOworCUlOSVRfTElTVF9IRUFEKCZhcC0+ZWhfZG9uZV9xKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykKLQkJYXAtPmRldmljZVtpXS5kZXZubyA9IGk7CisJZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKSB7CisJCXN0cnVjdCBhdGFfZGV2aWNlICpkZXYgPSAmYXAtPmRldmljZVtpXTsKKwkJZGV2LT5kZXZubyA9IGk7CisJCWRldi0+cGlvX21hc2sgPSBVSU5UX01BWDsKKwkJZGV2LT5td2RtYV9tYXNrID0gVUlOVF9NQVg7CisJCWRldi0+dWRtYV9tYXNrID0gVUlOVF9NQVg7CisJfQogCiAjaWZkZWYgQVRBX0lSUV9UUkFQCiAJYXAtPnN0YXRzLnVuaGFuZGxlZF9pcnEgPSAxOwpAQCAtNDQ3MSw2ICs0NTQwLDggQEAKIAlpZiAoIWhvc3QpCiAJCXJldHVybiBOVUxMOwogCisJaG9zdC0+dHJhbnNwb3J0dCA9ICZhdGFfc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CisKIAlhcCA9IChzdHJ1Y3QgYXRhX3BvcnQgKikgJmhvc3QtPmhvc3RkYXRhWzBdOwogCiAJYXRhX2hvc3RfaW5pdChhcCwgaG9zdCwgaG9zdF9zZXQsIGVudCwgcG9ydF9ubyk7CkBAIC00NTcyLDkgKzQ2NDMsOSBAQAogCiAJCWFwID0gaG9zdF9zZXQtPnBvcnRzW2ldOwogCi0JCURQUklOVEsoImF0YSV1OiBwcm9iZSBiZWdpblxuIiwgYXAtPmlkKTsKKwkJRFBSSU5USygiYXRhJXU6IGJ1cyBwcm9iZSBiZWdpblxuIiwgYXAtPmlkKTsKIAkJcmMgPSBhdGFfYnVzX3Byb2JlKGFwKTsKLQkJRFBSSU5USygiYXRhJXU6IHByb2JlIGVuZFxuIiwgYXAtPmlkKTsKKwkJRFBSSU5USygiYXRhJXU6IGJ1cyBwcm9iZSBlbmRcbiIsIGFwLT5pZCk7CiAKIAkJaWYgKHJjKSB7CiAJCQkvKiBGSVhNRTogZG8gc29tZXRoaW5nIHVzZWZ1bCBoZXJlPwpAQCAtNDU5OCw3ICs0NjY5LDcgQEAKIAl9CiAKIAkvKiBwcm9iZXMgYXJlIGRvbmUsIG5vdyBzY2FuIGVhY2ggcG9ydCdzIGRpc2socykgKi8KLQlEUFJJTlRLKCJwcm9iZSBiZWdpblxuIik7CisJRFBSSU5USygiaG9zdCBwcm9iZSBiZWdpblxuIik7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJc3RydWN0IGF0YV9wb3J0ICphcCA9IGhvc3Rfc2V0LT5wb3J0c1tpXTsKIApAQCAtNDYyNSw3ICs0Njk2LDcgQEAKICAqCWF0YV9ob3N0X3NldF9yZW1vdmUgLSBQQ0kgbGF5ZXIgY2FsbGJhY2sgZm9yIGRldmljZSByZW1vdmFsCiAgKglAaG9zdF9zZXQ6IEFUQSBob3N0IHNldCB0aGF0IHdhcyByZW1vdmVkCiAgKgotICoJVW5yZWdpc3RlciBhbGwgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBob3N0IHNldC4gRnJlZSB0aG9zZSAKKyAqCVVucmVnaXN0ZXIgYWxsIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaG9zdCBzZXQuIEZyZWUgdGhvc2UKICAqCW9iamVjdHMuCiAgKgogICoJTE9DS0lORzoKQEAgLTQ2ODQsMTEgKzQ3NTUsMTQgQEAKIGludCBhdGFfc2NzaV9yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IChzdHJ1Y3QgYXRhX3BvcnQgKikgJmhvc3QtPmhvc3RkYXRhWzBdOworCWludCBpOwogCiAJRFBSSU5USygiRU5URVJcbiIpOwogCiAJYXAtPm9wcy0+cG9ydF9kaXNhYmxlKGFwKTsKIAlhdGFfaG9zdF9yZW1vdmUoYXAsIDApOworCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX0RFVklDRVM7IGkrKykKKwkJa2ZyZWUoYXAtPmRldmljZVtpXS5pZCk7CiAKIAlEUFJJTlRLKCJFWElUXG4iKTsKIAlyZXR1cm4gMTsKQEAgLTQ3MjAsMzIgKzQ3OTQsNiBAQAogCWlvYWRkci0+Y29tbWFuZF9hZGRyID0gaW9hZGRyLT5jbWRfYWRkciArIEFUQV9SRUdfQ01EOwogfQogCi1zdGF0aWMgc3RydWN0IGF0YV9wcm9iZV9lbnQgKgotYXRhX3Byb2JlX2VudF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0KQotewotCXN0cnVjdCBhdGFfcHJvYmVfZW50ICpwcm9iZV9lbnQ7Ci0KLQlwcm9iZV9lbnQgPSBremFsbG9jKHNpemVvZigqcHJvYmVfZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcm9iZV9lbnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICIoJXMpOiBvdXQgb2YgbWVtb3J5XG4iLAotCQkgICAgICAga29iamVjdF9uYW1lKCYoZGV2LT5rb2JqKSkpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlJTklUX0xJU1RfSEVBRCgmcHJvYmVfZW50LT5ub2RlKTsKLQlwcm9iZV9lbnQtPmRldiA9IGRldjsKLQotCXByb2JlX2VudC0+c2h0ID0gcG9ydC0+c2h0OwotCXByb2JlX2VudC0+aG9zdF9mbGFncyA9IHBvcnQtPmhvc3RfZmxhZ3M7Ci0JcHJvYmVfZW50LT5waW9fbWFzayA9IHBvcnQtPnBpb19tYXNrOwotCXByb2JlX2VudC0+bXdkbWFfbWFzayA9IHBvcnQtPm13ZG1hX21hc2s7Ci0JcHJvYmVfZW50LT51ZG1hX21hc2sgPSBwb3J0LT51ZG1hX21hc2s7Ci0JcHJvYmVfZW50LT5wb3J0X29wcyA9IHBvcnQtPnBvcnRfb3BzOwotCi0JcmV0dXJuIHByb2JlX2VudDsKLX0KLQotCiAKICNpZmRlZiBDT05GSUdfUENJCiAKQEAgLTQ3NTcsMjU2ICs0ODA1LDYgQEAKIH0KIAogLyoqCi0gKglhdGFfcGNpX2luaXRfbmF0aXZlX21vZGUgLSBJbml0aWFsaXplIG5hdGl2ZS1tb2RlIGRyaXZlcgotICoJQHBkZXY6ICBwY2kgZGV2aWNlIHRvIGJlIGluaXRpYWxpemVkCi0gKglAcG9ydDogIGFycmF5WzJdIG9mIHBvaW50ZXJzIHRvIHBvcnQgaW5mbyBzdHJ1Y3R1cmVzLgotICoJQHBvcnRzOiBiaXRtYXAgb2YgcG9ydHMgcHJlc2VudAotICoKLSAqCVV0aWxpdHkgZnVuY3Rpb24gd2hpY2ggYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhbgotICoJYXRhX3Byb2JlX2VudCBzdHJ1Y3R1cmUgZm9yIGEgc3RhbmRhcmQgZHVhbC1wb3J0Ci0gKglQSU8tYmFzZWQgSURFIGNvbnRyb2xsZXIuICBUaGUgcmV0dXJuZWQgYXRhX3Byb2JlX2VudAotICoJc3RydWN0dXJlIGNhbiBiZSBwYXNzZWQgdG8gYXRhX2RldmljZV9hZGQoKS4gIFRoZSByZXR1cm5lZAotICoJYXRhX3Byb2JlX2VudCBzdHJ1Y3R1cmUgc2hvdWxkIHRoZW4gYmUgZnJlZWQgd2l0aCBrZnJlZSgpLgotICoKLSAqCVRoZSBjYWxsZXIgbmVlZCBvbmx5IHBhc3MgdGhlIGFkZHJlc3Mgb2YgdGhlIHByaW1hcnkgcG9ydCwgdGhlCi0gKglzZWNvbmRhcnkgd2lsbCBiZSBkZWR1Y2VkIGF1dG9tYXRpY2FsbHkuIElmIHRoZSBkZXZpY2UgaGFzIG5vbgotICoJc3RhbmRhcmQgc2Vjb25kYXJ5IHBvcnQgbWFwcGluZ3MgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHR3aWNlLAotICoJb25jZSBmb3IgZWFjaCBpbnRlcmZhY2UuCi0gKi8KLQotc3RydWN0IGF0YV9wcm9iZV9lbnQgKgotYXRhX3BjaV9pbml0X25hdGl2ZV9tb2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqKnBvcnQsIGludCBwb3J0cykKLXsKLQlzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqcHJvYmVfZW50ID0KLQkJYXRhX3Byb2JlX2VudF9hbGxvYyhwY2lfZGV2X3RvX2RldihwZGV2KSwgcG9ydFswXSk7Ci0JaW50IHAgPSAwOwotCi0JaWYgKCFwcm9iZV9lbnQpCi0JCXJldHVybiBOVUxMOwotCi0JcHJvYmVfZW50LT5pcnEgPSBwZGV2LT5pcnE7Ci0JcHJvYmVfZW50LT5pcnFfZmxhZ3MgPSBTQV9TSElSUTsKLQlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IHBvcnRbMF0tPnByaXZhdGVfZGF0YTsKLQotCWlmIChwb3J0cyAmIEFUQV9QT1JUX1BSSU1BUlkpIHsKLQkJcHJvYmVfZW50LT5wb3J0W3BdLmNtZF9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwotCQlwcm9iZV9lbnQtPnBvcnRbcF0uYWx0c3RhdHVzX2FkZHIgPQotCQlwcm9iZV9lbnQtPnBvcnRbcF0uY3RsX2FkZHIgPQotCQkJcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpIHwgQVRBX1BDSV9DVExfT0ZTOwotCQlwcm9iZV9lbnQtPnBvcnRbcF0uYm1kbWFfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsKLQkJYXRhX3N0ZF9wb3J0cygmcHJvYmVfZW50LT5wb3J0W3BdKTsKLQkJcCsrOwotCX0KLQotCWlmIChwb3J0cyAmIEFUQV9QT1JUX1NFQ09OREFSWSkgewotCQlwcm9iZV9lbnQtPnBvcnRbcF0uY21kX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7Ci0JCXByb2JlX2VudC0+cG9ydFtwXS5hbHRzdGF0dXNfYWRkciA9Ci0JCXByb2JlX2VudC0+cG9ydFtwXS5jdGxfYWRkciA9Ci0JCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMykgfCBBVEFfUENJX0NUTF9PRlM7Ci0JCXByb2JlX2VudC0+cG9ydFtwXS5ibWRtYV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpICsgODsKLQkJYXRhX3N0ZF9wb3J0cygmcHJvYmVfZW50LT5wb3J0W3BdKTsKLQkJcCsrOwotCX0KLQotCXByb2JlX2VudC0+bl9wb3J0cyA9IHA7Ci0JcmV0dXJuIHByb2JlX2VudDsKLX0KLQotc3RhdGljIHN0cnVjdCBhdGFfcHJvYmVfZW50ICphdGFfcGNpX2luaXRfbGVnYWN5X3BvcnQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0LCBpbnQgcG9ydF9udW0pCi17Ci0Jc3RydWN0IGF0YV9wcm9iZV9lbnQgKnByb2JlX2VudDsKLQotCXByb2JlX2VudCA9IGF0YV9wcm9iZV9lbnRfYWxsb2MocGNpX2Rldl90b19kZXYocGRldiksIHBvcnQpOwotCWlmICghcHJvYmVfZW50KQotCQlyZXR1cm4gTlVMTDsKLQotCXByb2JlX2VudC0+bGVnYWN5X21vZGUgPSAxOwotCXByb2JlX2VudC0+bl9wb3J0cyA9IDE7Ci0JcHJvYmVfZW50LT5oYXJkX3BvcnRfbm8gPSBwb3J0X251bTsKLQlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IHBvcnQtPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaChwb3J0X251bSkKLQl7Ci0JCWNhc2UgMDoKLQkJCXByb2JlX2VudC0+aXJxID0gMTQ7Ci0JCQlwcm9iZV9lbnQtPnBvcnRbMF0uY21kX2FkZHIgPSAweDFmMDsKLQkJCXByb2JlX2VudC0+cG9ydFswXS5hbHRzdGF0dXNfYWRkciA9Ci0JCQlwcm9iZV9lbnQtPnBvcnRbMF0uY3RsX2FkZHIgPSAweDNmNjsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlwcm9iZV9lbnQtPmlycSA9IDE1OwotCQkJcHJvYmVfZW50LT5wb3J0WzBdLmNtZF9hZGRyID0gMHgxNzA7Ci0JCQlwcm9iZV9lbnQtPnBvcnRbMF0uYWx0c3RhdHVzX2FkZHIgPQotCQkJcHJvYmVfZW50LT5wb3J0WzBdLmN0bF9hZGRyID0gMHgzNzY7Ci0JCQlicmVhazsKLQl9Ci0JcHJvYmVfZW50LT5wb3J0WzBdLmJtZG1hX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCkgKyA4ICogcG9ydF9udW07Ci0JYXRhX3N0ZF9wb3J0cygmcHJvYmVfZW50LT5wb3J0WzBdKTsKLQlyZXR1cm4gcHJvYmVfZW50OwotfQotCi0vKioKLSAqCWF0YV9wY2lfaW5pdF9vbmUgLSBJbml0aWFsaXplL3JlZ2lzdGVyIFBDSSBJREUgaG9zdCBjb250cm9sbGVyCi0gKglAcGRldjogQ29udHJvbGxlciB0byBiZSBpbml0aWFsaXplZAotICoJQHBvcnRfaW5mbzogSW5mb3JtYXRpb24gZnJvbSBsb3ctbGV2ZWwgaG9zdCBkcml2ZXIKLSAqCUBuX3BvcnRzOiBOdW1iZXIgb2YgcG9ydHMgYXR0YWNoZWQgdG8gaG9zdCBjb250cm9sbGVyCi0gKgotICoJVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGZyb20gYSBkcml2ZXIncwotICoJeHh4X2luaXRfb25lKCkgcHJvYmUgZnVuY3Rpb24gaWYgdGhlIGhhcmR3YXJlIHVzZXMgdHJhZGl0aW9uYWwKLSAqCUlERSB0YXNrZmlsZSByZWdpc3RlcnMuCi0gKgotICoJVGhpcyBmdW5jdGlvbiBjYWxscyBwY2lfZW5hYmxlX2RldmljZSgpLCByZXNlcnZlcyBpdHMgcmVnaXN0ZXIKLSAqCXJlZ2lvbnMsIHNldHMgdGhlIGRtYSBtYXNrLCBlbmFibGVzIGJ1cyBtYXN0ZXIgbW9kZSwgYW5kIGNhbGxzCi0gKglhdGFfZGV2aWNlX2FkZCgpCi0gKgotICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIFBDSSBsYXllciAobWF5IHNsZWVwKS4KLSAqCi0gKglSRVRVUk5TOgotICoJWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBlcnJuby1iYXNlZCB2YWx1ZSBvbiBlcnJvci4KLSAqLwotCi1pbnQgYXRhX3BjaV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBhdGFfcG9ydF9pbmZvICoqcG9ydF9pbmZvLAotCQkgICAgICB1bnNpZ25lZCBpbnQgbl9wb3J0cykKLXsKLQlzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqcHJvYmVfZW50ID0gTlVMTCwgKnByb2JlX2VudDIgPSBOVUxMOwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwb3J0WzJdOwotCXU4IHRtcDgsIG1hc2s7Ci0JdW5zaWduZWQgaW50IGxlZ2FjeV9tb2RlID0gMDsKLQlpbnQgZGlzYWJsZV9kZXZfb25fZXJyID0gMTsKLQlpbnQgcmM7Ci0KLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KLQlwb3J0WzBdID0gcG9ydF9pbmZvWzBdOwotCWlmIChuX3BvcnRzID4gMSkKLQkJcG9ydFsxXSA9IHBvcnRfaW5mb1sxXTsKLQllbHNlCi0JCXBvcnRbMV0gPSBwb3J0WzBdOwotCi0JaWYgKChwb3J0WzBdLT5ob3N0X2ZsYWdzICYgQVRBX0ZMQUdfTk9fTEVHQUNZKSA9PSAwCi0JICAgICYmIChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUpIHsKLQkJLyogVE9ETzogV2hhdCBpZiBvbmUgY2hhbm5lbCBpcyBpbiBuYXRpdmUgbW9kZSAuLi4gKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1BST0csICZ0bXA4KTsKLQkJbWFzayA9ICgxIDw8IDIpIHwgKDEgPDwgMCk7Ci0JCWlmICgodG1wOCAmIG1hc2spICE9IG1hc2spCi0JCQlsZWdhY3lfbW9kZSA9ICgxIDw8IDMpOwotCX0KLQotCS8qIEZJWE1FLi4uICovCi0JaWYgKCghbGVnYWN5X21vZGUpICYmIChuX3BvcnRzID4gMikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGE6IEJVRzogbmF0aXZlIG1vZGUsIG5fcG9ydHMgPiAyXG4iKTsKLQkJbl9wb3J0cyA9IDI7Ci0JCS8qIEZvciBub3cgKi8KLQl9Ci0KLQkvKiBGSVhNRTogUmVhbGx5IGZvciBBVEEgaXQgaXNuJ3Qgc2FmZSBiZWNhdXNlIHRoZSBkZXZpY2UgbWF5IGJlCi0JICAgbXVsdGktcHVycG9zZSBhbmQgd2Ugd2FudCB0byBsZWF2ZSBpdCBhbG9uZSBpZiBpdCB3YXMgYWxyZWFkeQotCSAgIGVuYWJsZWQuIFNlY29uZGx5IGZvciBzaGFyZWQgdXNlIGFzIEFyamFuIHNheXMgd2Ugd2FudCByZWZjb3VudGluZwotCSAgIAotCSAgIENoZWNraW5nIGRldi0+aXNfZW5hYmxlZCBpcyBpbnN1ZmZpY2llbnQgYXMgdGhpcyBpcyBub3Qgc2V0IGF0Ci0JICAgYm9vdCBmb3IgdGhlIHByaW1hcnkgdmlkZW8gd2hpY2ggaXMgQklPUyBlbmFibGVkCi0gICAgICAgICAqLwotICAgICAgICAgCi0JcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7Ci0JaWYgKHJjKSB7Ci0JCWRpc2FibGVfZGV2X29uX2VyciA9IDA7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0KLQkvKiBGSVhNRTogU2hvdWxkIHVzZSBwbGF0Zm9ybSBzcGVjaWZpYyBtYXBwZXJzIGZvciBsZWdhY3kgcG9ydCByYW5nZXMgKi8KLQlpZiAobGVnYWN5X21vZGUpIHsKLQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbigweDFmMCwgOCwgImxpYmF0YSIpKSB7Ci0JCQlzdHJ1Y3QgcmVzb3VyY2UgKmNvbmZsaWN0LCByZXM7Ci0JCQlyZXMuc3RhcnQgPSAweDFmMDsKLQkJCXJlcy5lbmQgPSAweDFmMCArIDggLSAxOwotCQkJY29uZmxpY3QgPSBfX19fcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzKTsKLQkJCWlmICghc3RyY21wKGNvbmZsaWN0LT5uYW1lLCAibGliYXRhIikpCi0JCQkJbGVnYWN5X21vZGUgfD0gKDEgPDwgMCk7Ci0JCQllbHNlIHsKLQkJCQlkaXNhYmxlX2Rldl9vbl9lcnIgPSAwOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YTogMHgxZjAgSURFIHBvcnQgYnVzeVxuIik7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJbGVnYWN5X21vZGUgfD0gKDEgPDwgMCk7Ci0KLQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbigweDE3MCwgOCwgImxpYmF0YSIpKSB7Ci0JCQlzdHJ1Y3QgcmVzb3VyY2UgKmNvbmZsaWN0LCByZXM7Ci0JCQlyZXMuc3RhcnQgPSAweDE3MDsKLQkJCXJlcy5lbmQgPSAweDE3MCArIDggLSAxOwotCQkJY29uZmxpY3QgPSBfX19fcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzKTsKLQkJCWlmICghc3RyY21wKGNvbmZsaWN0LT5uYW1lLCAibGliYXRhIikpCi0JCQkJbGVnYWN5X21vZGUgfD0gKDEgPDwgMSk7Ci0JCQllbHNlIHsKLQkJCQlkaXNhYmxlX2Rldl9vbl9lcnIgPSAwOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0YTogMHgxNzAgSURFIHBvcnQgYnVzeVxuIik7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJbGVnYWN5X21vZGUgfD0gKDEgPDwgMSk7Ci0JfQotCi0JLyogd2UgaGF2ZSBsZWdhY3kgbW9kZSwgYnV0IGFsbCBwb3J0cyBhcmUgdW5hdmFpbGFibGUgKi8KLQlpZiAobGVnYWN5X21vZGUgPT0gKDEgPDwgMykpIHsKLQkJcmMgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX291dF9yZWdpb25zOwotCX0KLQotCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBBVEFfRE1BX01BU0spOwotCWlmIChyYykKLQkJZ290byBlcnJfb3V0X3JlZ2lvbnM7Ci0JcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgQVRBX0RNQV9NQVNLKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX291dF9yZWdpb25zOwotCi0JaWYgKGxlZ2FjeV9tb2RlKSB7Ci0JCWlmIChsZWdhY3lfbW9kZSAmICgxIDw8IDApKQotCQkJcHJvYmVfZW50ID0gYXRhX3BjaV9pbml0X2xlZ2FjeV9wb3J0KHBkZXYsIHBvcnRbMF0sIDApOwotCQlpZiAobGVnYWN5X21vZGUgJiAoMSA8PCAxKSkKLQkJCXByb2JlX2VudDIgPSBhdGFfcGNpX2luaXRfbGVnYWN5X3BvcnQocGRldiwgcG9ydFsxXSwgMSk7Ci0JfSBlbHNlIHsKLQkJaWYgKG5fcG9ydHMgPT0gMikKLQkJCXByb2JlX2VudCA9IGF0YV9wY2lfaW5pdF9uYXRpdmVfbW9kZShwZGV2LCBwb3J0LCBBVEFfUE9SVF9QUklNQVJZIHwgQVRBX1BPUlRfU0VDT05EQVJZKTsKLQkJZWxzZQotCQkJcHJvYmVfZW50ID0gYXRhX3BjaV9pbml0X25hdGl2ZV9tb2RlKHBkZXYsIHBvcnQsIEFUQV9QT1JUX1BSSU1BUlkpOwotCX0KLQlpZiAoIXByb2JlX2VudCAmJiAhcHJvYmVfZW50MikgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9yZWdpb25zOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwotCi0JLyogRklYTUU6IGNoZWNrIGF0YV9kZXZpY2VfYWRkIHJldHVybiAqLwotCWlmIChsZWdhY3lfbW9kZSkgewotCQlpZiAobGVnYWN5X21vZGUgJiAoMSA8PCAwKSkKLQkJCWF0YV9kZXZpY2VfYWRkKHByb2JlX2VudCk7Ci0JCWlmIChsZWdhY3lfbW9kZSAmICgxIDw8IDEpKQotCQkJYXRhX2RldmljZV9hZGQocHJvYmVfZW50Mik7Ci0JfSBlbHNlCi0JCWF0YV9kZXZpY2VfYWRkKHByb2JlX2VudCk7Ci0KLQlrZnJlZShwcm9iZV9lbnQpOwotCWtmcmVlKHByb2JlX2VudDIpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9vdXRfcmVnaW9uczoKLQlpZiAobGVnYWN5X21vZGUgJiAoMSA8PCAwKSkKLQkJcmVsZWFzZV9yZWdpb24oMHgxZjAsIDgpOwotCWlmIChsZWdhY3lfbW9kZSAmICgxIDw8IDEpKQotCQlyZWxlYXNlX3JlZ2lvbigweDE3MCwgOCk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLWVycl9vdXQ6Ci0JaWYgKGRpc2FibGVfZGV2X29uX2VycikKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXJldHVybiByYzsKLX0KLQotLyoqCiAgKglhdGFfcGNpX3JlbW92ZV9vbmUgLSBQQ0kgbGF5ZXIgY2FsbGJhY2sgZm9yIGRldmljZSByZW1vdmFsCiAgKglAcGRldjogUENJIGRldmljZSB0aGF0IHdhcyByZW1vdmVkCiAgKgpAQCAtNTEzNiw3ICs0OTM0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X3NldF9yZW1vdmUpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NnX2luaXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NnX2luaXRfb25lKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9xY19jb21wbGV0ZSk7CitFWFBPUlRfU1lNQk9MX0dQTChfX2F0YV9xY19jb21wbGV0ZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcWNfaXNzdWVfcHJvdCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZW5nX3RpbWVvdXQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3RmX2xvYWQpOwpAQCAtNTE1Myw2ICs0OTUxLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ob3N0X3N0b3ApOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2ludGVycnVwdCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcWNfcHJlcCk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfbm9vcF9xY19wcmVwKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9ibWRtYV9zZXR1cCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfYm1kbWFfc3RhcnQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2JtZG1hX2lycV9jbGVhcik7CkBAIC01MTYyLDE4ICs0OTYxLDMwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChzYXRhX3BoeV9yZXNldCk7CiBFWFBPUlRfU1lNQk9MX0dQTChfX3NhdGFfcGh5X3Jlc2V0KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9idXNfcmVzZXQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3N0ZF9wcm9iZWluaXQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3N0ZF9zb2Z0cmVzZXQpOworRVhQT1JUX1NZTUJPTF9HUEwoc2F0YV9zdGRfaGFyZHJlc2V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zdGRfcG9zdHJlc2V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zdGRfcHJvYmVfcmVzZXQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2RyaXZlX3Byb2JlX3Jlc2V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9kZXZfcmV2YWxpZGF0ZSk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfZGV2X2NsYXNzaWZ5KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9kZXZfcGFpcik7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcG9ydF9kaXNhYmxlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9yYXRlbGltaXQpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2J1c3lfc2xlZXApOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BvcnRfcXVldWVfdGFzayk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9pb2N0bCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9xdWV1ZWNtZCk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9lcnJvcik7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfc2NzaV9zbGF2ZV9jb25maWcpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfcmVsZWFzZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfaG9zdF9pbnRyKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGF0YV9kZXZfY2xhc3NpZnkpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2Rldl9pZF9zdHJpbmcpOwotRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2Rldl9jb25maWcpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2lkX3N0cmluZyk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfaWRfY19zdHJpbmcpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfc2ltdWxhdGUpOworRVhQT1JUX1NZTUJPTF9HUEwoYXRhX2VoX3FjX2NvbXBsZXRlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9laF9xY19yZXRyeSk7CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9waW9fbmVlZF9pb3JkeSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfdGltaW5nX2NvbXB1dGUpOwpAQCAtNTE4Nyw2ICs0OTk4LDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfcmVtb3ZlX29uZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX2RldmljZV9zdXNwZW5kKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfZGV2aWNlX3Jlc3VtZSk7CitFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGNpX2RlZmF1bHRfZmlsdGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9wY2lfY2xlYXJfc2ltcGxleCk7CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZGV2aWNlX3N1c3BlbmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwppbmRleCAwN2IxZTdjLi42MjgxOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9laC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfcmVxdWVzdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC01Miw2ICs1Myw3IEBACiB0eXBlZGVmIHVuc2lnbmVkIGludCAoKmF0YV94bGF0X2Z1bmNfdCkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgY29uc3QgdTggKnNjc2ljbWQpOwogc3RhdGljIHN0cnVjdCBhdGFfZGV2aWNlICoKIGF0YV9zY3NpX2ZpbmRfZGV2KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRldik7CitlbnVtIHNjc2lfZWhfdGltZXJfcmV0dXJuIGF0YV9zY3NpX3RpbWVkX291dChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogCiAjZGVmaW5lIFJXX1JFQ09WRVJZX01QQUdFIDB4MQogI2RlZmluZSBSV19SRUNPVkVSWV9NUEFHRV9MRU4gMTIKQEAgLTkyLDYgKzk0LDE0IEBACiAJMCwgMzAJLyogZXh0ZW5kZWQgc2VsZiB0ZXN0IHRpbWUsIHNlZSAwNS0zNTlyMSAqLwogfTsKIAorLyoKKyAqIGxpYmF0YSB0cmFuc3BvcnQgdGVtcGxhdGUuICBsaWJhdGEgZG9lc24ndCBkbyByZWFsIHRyYW5zcG9ydCBzdHVmZi4KKyAqIEl0IGp1c3QgbmVlZHMgdGhlIGVoX3RpbWVkX291dCBob29rLgorICovCitzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgYXRhX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlID0geworCS5laF90aW1lZF9vdXQJCT0gYXRhX3Njc2lfdGltZWRfb3V0LAorfTsKKwogCiBzdGF0aWMgdm9pZCBhdGFfc2NzaV9pbnZhbGlkX2ZpZWxkKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwKIAkJCQkgICB2b2lkICgqZG9uZSkoc3RydWN0IHNjc2lfY21uZCAqKSkKQEAgLTE1MSw3ICsxNjEsNyBAQAogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkYXRhX2RpcjsKIAotCWlmIChOVUxMID09ICh2b2lkICopYXJnKQorCWlmIChhcmcgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoYXJncywgYXJnLCBzaXplb2YoYXJncykpKQpAQCAtMjAxLDcgKzIxMSw3IEBACiAJLyogTmVlZCBjb2RlIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBjaGVjayBjb25kaXRpb24/ICovCiAKIAlpZiAoKGFyZ2J1ZikKLQkgJiYgY29weV90b191c2VyKCh2b2lkICopKGFyZyArIHNpemVvZihhcmdzKSksIGFyZ2J1ZiwgYXJnc2l6ZSkpCisJICYmIGNvcHlfdG9fdXNlcihhcmcgKyBzaXplb2YoYXJncyksIGFyZ2J1ZiwgYXJnc2l6ZSkpCiAJCXJjID0gLUVGQVVMVDsKIGVycm9yOgogCWlmIChhcmdidWYpCkBAIC0yMjgsNyArMjM4LDcgQEAKIAl1OCBhcmdzWzddOwogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzc2hkcjsKIAotCWlmIChOVUxMID09ICh2b2lkICopYXJnKQorCWlmIChhcmcgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoYXJncywgYXJnLCBzaXplb2YoYXJncykpKQpAQCAtMjQ2LDcgKzI1Niw3IEBACiAJc2NzaV9jbWRbMTRdID0gYXJnc1swXTsKIAogCS8qIEdvb2QgdmFsdWVzIGZvciB0aW1lb3V0IGFuZCByZXRyaWVzPyAgVmFsdWVzIGJlbG93Ci0JICAgZnJvbSBzY3NpX2lvY3RsX3NlbmRfY29tbWFuZCgpIGZvciBkZWZhdWx0IGNhc2UuLi4gKi8JCisJICAgZnJvbSBzY3NpX2lvY3RsX3NlbmRfY29tbWFuZCgpIGZvciBkZWZhdWx0IGNhc2UuLi4gKi8KIAlpZiAoc2NzaV9leGVjdXRlX3JlcShzY3NpZGV2LCBzY3NpX2NtZCwgRE1BX05PTkUsIE5VTEwsIDAsICZzc2hkciwKIAkJCSAgICAgKDEwKkhaKSwgNSkpCiAJCXJjID0gLUVJTzsKQEAgLTI1NywyMCArMjY3LDggQEAKIAogaW50IGF0YV9zY3NpX2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaWRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKIHsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwOwotCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAJaW50IHZhbCA9IC1FSU5WQUwsIHJjID0gLUVJTlZBTDsKIAotCWFwID0gKHN0cnVjdCBhdGFfcG9ydCAqKSAmc2NzaWRldi0+aG9zdC0+aG9zdGRhdGFbMF07Ci0JaWYgKCFhcCkKLQkJZ290byBvdXQ7Ci0KLQlkZXYgPSBhdGFfc2NzaV9maW5kX2RldihhcCwgc2NzaWRldik7Ci0JaWYgKCFkZXYpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQVRBX0lPQ19HRVRfSU8zMjoKIAkJdmFsID0gMDsKQEAgLTI5OSw3ICsyOTcsNiBAQAogCQlicmVhazsKIAl9CiAKLW91dDoKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQwNCwxMiArNDAxLDEyIEBACiAJcmV0dXJuIGF0YV9kZXZpY2VfcmVzdW1lKGFwLCBkZXYpOwogfQogCi1pbnQgYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoraW50IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSAoc3RydWN0IGF0YV9wb3J0ICopICZzZGV2LT5ob3N0LT5ob3N0ZGF0YVswXTsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2ID0gJmFwLT5kZXZpY2Vbc2Rldi0+aWRdOwogCi0JcmV0dXJuIGF0YV9kZXZpY2Vfc3VzcGVuZChhcCwgZGV2KTsKKwlyZXR1cm4gYXRhX2RldmljZV9zdXNwZW5kKGFwLCBkZXYsIHN0YXRlKTsKIH0KIAogLyoqCkBAIC00MjgsNyArNDI1LDcgQEAKICAqCUxPQ0tJTkc6CiAgKglzcGluX2xvY2tfaXJxc2F2ZShob3N0X3NldCBsb2NrKQogICovCi12b2lkIGF0YV90b19zZW5zZV9lcnJvcih1bnNpZ25lZCBpZCwgdTggZHJ2X3N0YXQsIHU4IGRydl9lcnIsIHU4ICpzaywgdTggKmFzYywgCit2b2lkIGF0YV90b19zZW5zZV9lcnJvcih1bnNpZ25lZCBpZCwgdTggZHJ2X3N0YXQsIHU4IGRydl9lcnIsIHU4ICpzaywgdTggKmFzYywKIAkJCXU4ICphc2NxKQogewogCWludCBpOwpAQCAtNDg1LDcgKzQ4Miw3IEBACiAJCS8qIExvb2sgZm9yIGRydl9lcnIgKi8KIAkJZm9yIChpID0gMDsgc2Vuc2VfdGFibGVbaV1bMF0gIT0gMHhGRjsgaSsrKSB7CiAJCQkvKiBMb29rIGZvciBiZXN0IG1hdGNoZXMgZmlyc3QgKi8KLQkJCWlmICgoc2Vuc2VfdGFibGVbaV1bMF0gJiBkcnZfZXJyKSA9PSAKKwkJCWlmICgoc2Vuc2VfdGFibGVbaV1bMF0gJiBkcnZfZXJyKSA9PQogCQkJICAgIHNlbnNlX3RhYmxlW2ldWzBdKSB7CiAJCQkJKnNrID0gc2Vuc2VfdGFibGVbaV1bMV07CiAJCQkJKmFzYyA9IHNlbnNlX3RhYmxlW2ldWzJdOwpAQCAtNTA4LDE2ICs1MDUsMTQgQEAKIAkJfQogCX0KIAkvKiBObyBlcnJvcj8gIFVuZGVjb2RlZD8gKi8KLQlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogbm8gc2Vuc2UgdHJhbnNsYXRpb24gZm9yIHN0YXR1czogMHglMDJ4XG4iLCAKKwlwcmludGsoS0VSTl9XQVJOSU5HICJhdGEldTogbm8gc2Vuc2UgdHJhbnNsYXRpb24gZm9yIHN0YXR1czogMHglMDJ4XG4iLAogCSAgICAgICBpZCwgZHJ2X3N0YXQpOwogCi0JLyogRm9yIG91ciBsYXN0IGNoYW5jZSBwaWNrLCB1c2UgbWVkaXVtIHJlYWQgZXJyb3IgYmVjYXVzZQotCSAqIGl0J3MgbXVjaCBtb3JlIGNvbW1vbiB0aGFuIGFuIEFUQSBkcml2ZSB0ZWxsaW5nIHlvdSBhIHdyaXRlCi0JICogaGFzIGZhaWxlZC4KLQkgKi8KLQkqc2sgPSBNRURJVU1fRVJST1I7Ci0JKmFzYyA9IDB4MTE7IC8qICJ1bnJlY292ZXJlZCByZWFkIGVycm9yIiAqLwotCSphc2NxID0gMHgwNDsgLyogICJhdXRvLXJlYWxsb2NhdGlvbiBmYWlsZWQiICovCisJLyogV2UgbmVlZCBhIHNlbnNpYmxlIGVycm9yIHJldHVybiBoZXJlLCB3aGljaCBpcyB0cmlja3ksIGFuZCBvbmUKKwkgICB0aGF0IHdvbid0IGNhdXNlIHBlb3BsZSB0byBkbyB0aGluZ3MgbGlrZSByZXR1cm4gYSBkaXNrIHdyb25nbHkgKi8KKwkqc2sgPSBBQk9SVEVEX0NPTU1BTkQ7CisJKmFzYyA9IDB4MDA7CisJKmFzY3EgPSAweDAwOwogCiAgdHJhbnNsYXRlX2RvbmU6CiAJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogdHJhbnNsYXRlZCBBVEEgc3RhdC9lcnIgMHglMDJ4LyUwMnggdG8gIgpAQCAtNTUzLDcgKzU0OCw3IEBACiAJLyoKIAkgKiBSZWFkIHRoZSBjb250cm9sbGVyIHJlZ2lzdGVycy4KIAkgKi8KLQlhc3NlcnQoTlVMTCAhPSBxYy0+YXAtPm9wcy0+dGZfcmVhZCk7CisJV0FSTl9PTihxYy0+YXAtPm9wcy0+dGZfcmVhZCA9PSBOVUxMKTsKIAlxYy0+YXAtPm9wcy0+dGZfcmVhZChxYy0+YXAsIHRmKTsKIAogCS8qCkBAIC02MjgsNyArNjIzLDcgQEAKIAkvKgogCSAqIFJlYWQgdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLgogCSAqLwotCWFzc2VydChOVUxMICE9IHFjLT5hcC0+b3BzLT50Zl9yZWFkKTsKKwlXQVJOX09OKHFjLT5hcC0+b3BzLT50Zl9yZWFkID09IE5VTEwpOwogCXFjLT5hcC0+b3BzLT50Zl9yZWFkKHFjLT5hcCwgdGYpOwogCiAJLyoKQEAgLTY2Miw2ICs2NTcsNDEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0YV9zY3NpX3NkZXZfY29uZmlnKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzZGV2LT51c2VfMTBfZm9yX3J3ID0gMTsKKwlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKK30KKworc3RhdGljIHZvaWQgYXRhX3Njc2lfZGV2X2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCisJCQkJc3RydWN0IGF0YV9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgbWF4X3NlY3RvcnM7CisKKwkvKiBUT0RPOiAyMDQ4IGlzIGFuIGFyYml0cmFyeSBudW1iZXIsIG5vdCB0aGUKKwkgKiBoYXJkd2FyZSBtYXhpbXVtLiAgVGhpcyBzaG91bGQgYmUgaW5jcmVhc2VkIHRvCisJICogNjU1MzQgd2hlbiBKZW5zIEF4Ym9lJ3MgcGF0Y2ggZm9yIGR5bmFtaWNhbGx5CisJICogZGV0ZXJtaW5pbmcgbWF4X3NlY3RvcnMgaXMgbWVyZ2VkLgorCSAqLworCW1heF9zZWN0b3JzID0gQVRBX01BWF9TRUNUT1JTOworCWlmIChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0xCQTQ4KQorCQltYXhfc2VjdG9ycyA9IDIwNDg7CisJaWYgKGRldi0+bWF4X3NlY3RvcnMpCisJCW1heF9zZWN0b3JzID0gZGV2LT5tYXhfc2VjdG9yczsKKworCWJsa19xdWV1ZV9tYXhfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBtYXhfc2VjdG9ycyk7CisKKwkvKgorCSAqIFNBVEEgRE1BIHRyYW5zZmVycyBtdXN0IGJlIG11bHRpcGxlcyBvZiA0IGJ5dGUsIHNvCisJICogd2UgbmVlZCB0byBwYWQgQVRBUEkgdHJhbnNmZXJzIHVzaW5nIGFuIGV4dHJhIHNnLgorCSAqIERlY3JlbWVudCBtYXggaHcgc2VnbWVudHMgYWNjb3JkaW5nbHkuCisJICovCisJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSkgeworCQlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOworCQlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHEsIHEtPm1heF9od19zZWdtZW50cyAtIDEpOworCX0KK30KKwogLyoqCiAgKglhdGFfc2NzaV9zbGF2ZV9jb25maWcgLSBTZXQgU0NTSSBkZXZpY2UgYXR0cmlidXRlcwogICoJQHNkZXY6IFNDU0kgZGV2aWNlIHRvIGV4YW1pbmUKQEAgLTY3Niw4ICs3MDYsNyBAQAogCiBpbnQgYXRhX3Njc2lfc2xhdmVfY29uZmlnKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzZGV2LT51c2VfMTBfZm9yX3J3ID0gMTsKLQlzZGV2LT51c2VfMTBfZm9yX21zID0gMTsKKwlhdGFfc2NzaV9zZGV2X2NvbmZpZyhzZGV2KTsKIAogCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBMSUJBVEFfTUFYX1BSRCk7CiAKQEAgLTY4OCwzNSArNzE3LDU0IEBACiAJCWFwID0gKHN0cnVjdCBhdGFfcG9ydCAqKSAmc2Rldi0+aG9zdC0+aG9zdGRhdGFbMF07CiAJCWRldiA9ICZhcC0+ZGV2aWNlW3NkZXYtPmlkXTsKIAotCQkvKiBUT0RPOiAxMDI0IGlzIGFuIGFyYml0cmFyeSBudW1iZXIsIG5vdCB0aGUKLQkJICogaGFyZHdhcmUgbWF4aW11bS4gIFRoaXMgc2hvdWxkIGJlIGluY3JlYXNlZCB0bwotCQkgKiA2NTUzNCB3aGVuIEplbnMgQXhib2UncyBwYXRjaCBmb3IgZHluYW1pY2FsbHkKLQkJICogZGV0ZXJtaW5pbmcgbWF4X3NlY3RvcnMgaXMgbWVyZ2VkLgotCQkgKi8KLQkJaWYgKChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0xCQTQ4KSAmJgotCQkgICAgKChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0xPQ0tfU0VDVE9SUykgPT0gMCkpIHsKLQkJCS8qCi0JCQkgKiBkbyBub3Qgb3ZlcndyaXRlIHNkZXYtPmhvc3QtPm1heF9zZWN0b3JzLCBzaW5jZQotCQkJICogb3RoZXIgZHJpdmVzIG9uIHRoaXMgaG9zdCBtYXkgbm90IHN1cHBvcnQgTEJBNDgKLQkJCSAqLwotCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDIwNDgpOwotCQl9Ci0KLQkJLyoKLQkJICogU0FUQSBETUEgdHJhbnNmZXJzIG11c3QgYmUgbXVsdGlwbGVzIG9mIDQgYnl0ZSwgc28KLQkJICogd2UgbmVlZCB0byBwYWQgQVRBUEkgdHJhbnNmZXJzIHVzaW5nIGFuIGV4dHJhIHNnLgotCQkgKiBEZWNyZW1lbnQgbWF4IGh3IHNlZ21lbnRzIGFjY29yZGluZ2x5LgotCQkgKi8KLQkJaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSkgewotCQkJcmVxdWVzdF9xdWV1ZV90ICpxID0gc2Rldi0+cmVxdWVzdF9xdWV1ZTsKLQkJCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMocSwgcS0+bWF4X2h3X3NlZ21lbnRzIC0gMSk7Ci0JCX0KKwkJYXRhX3Njc2lfZGV2X2NvbmZpZyhzZGV2LCBkZXYpOwogCX0KIAogCXJldHVybiAwOwkvKiBzY3NpIGxheWVyIGRvZXNuJ3QgY2hlY2sgcmV0dXJuIHZhbHVlLCBzaWdoICovCiB9CiAKIC8qKgorICoJYXRhX3Njc2lfdGltZWRfb3V0IC0gU0NTSSBsYXllciB0aW1lIG91dCBjYWxsYmFjaworICoJQGNtZDogdGltZWQgb3V0IFNDU0kgY29tbWFuZAorICoKKyAqCUhhbmRsZXMgU0NTSSBsYXllciB0aW1lb3V0LiAgV2UgcmFjZSB3aXRoIG5vcm1hbCBjb21wbGV0aW9uIG9mCisgKgl0aGUgcWMgZm9yIEBjbWQuICBJZiB0aGUgcWMgaXMgYWxyZWFkeSBnb25lLCB3ZSBsb3NlIGFuZCBsZXQKKyAqCXRoZSBzY3NpIGNvbW1hbmQgZmluaXNoIChFSF9IQU5ETEVEKS4gIE90aGVyd2lzZSwgdGhlIHFjIGhhcworICoJdGltZWQgb3V0IGFuZCBFSCBzaG91bGQgYmUgaW52b2tlZC4gIFByZXZlbnQgYXRhX3FjX2NvbXBsZXRlKCkKKyAqCWZyb20gZmluaXNoaW5nIGl0IGJ5IHNldHRpbmcgRUhfU0NIRURVTEVEIGFuZCByZXR1cm4KKyAqCUVIX05PVF9IQU5ETEVELgorICoKKyAqCUxPQ0tJTkc6CisgKglDYWxsZWQgZnJvbSB0aW1lciBjb250ZXh0CisgKgorICoJUkVUVVJOUzoKKyAqCUVIX0hBTkRMRUQgb3IgRUhfTk9UX0hBTkRMRUQKKyAqLworZW51bSBzY3NpX2VoX3RpbWVyX3JldHVybiBhdGFfc2NzaV90aW1lZF9vdXQoc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gKHN0cnVjdCBhdGFfcG9ydCAqKSAmaG9zdC0+aG9zdGRhdGFbMF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCWVudW0gc2NzaV9laF90aW1lcl9yZXR1cm4gcmV0ID0gRUhfSEFORExFRDsKKworCURQUklOVEsoIkVOVEVSXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhcC0+aG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKKwlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmFjdGl2ZV90YWcpOworCWlmIChxYykgeworCQlXQVJOX09OKHFjLT5zY3NpY21kICE9IGNtZCk7CisJCXFjLT5mbGFncyB8PSBBVEFfUUNGTEFHX0VIX1NDSEVEVUxFRDsKKwkJcWMtPmVycl9tYXNrIHw9IEFDX0VSUl9USU1FT1VUOworCQlyZXQgPSBFSF9OT1RfSEFORExFRDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CisKKwlEUFJJTlRLKCJFWElULCByZXQ9JWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCiAgKglhdGFfc2NzaV9lcnJvciAtIFNDU0kgbGF5ZXIgZXJyb3IgaGFuZGxlciBjYWxsYmFjawogICoJQGhvc3Q6IFNDU0kgaG9zdCBvbiB3aGljaCBlcnJvciBvY2N1cnJlZAogICoKQEAgLTczMiwyMyArNzgwLDg0IEBACiBpbnQgYXRhX3Njc2lfZXJyb3Ioc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEUFJJTlRLKCJFTlRFUlxuIik7CiAKIAlhcCA9IChzdHJ1Y3QgYXRhX3BvcnQgKikgJmhvc3QtPmhvc3RkYXRhWzBdOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCVdBUk5fT04oYXAtPmZsYWdzICYgQVRBX0ZMQUdfSU5fRUgpOworCWFwLT5mbGFncyB8PSBBVEFfRkxBR19JTl9FSDsKKwlXQVJOX09OKGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmFjdGl2ZV90YWcpID09IE5VTEwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCisJYXRhX3BvcnRfZmx1c2hfdGFzayhhcCk7CisKIAlhcC0+b3BzLT5lbmdfdGltZW91dChhcCk7CiAKLQkvKiBUT0RPOiB0aGlzIGlzIHBlci1jb21tYW5kOyB3aGVuIHF1ZXVlaW5nIGlzIHN1cHBvcnRlZAotCSAqIHRoaXMgY29kZSB3aWxsIGVpdGhlciBjaGFuZ2Ugb3IgbW92ZSB0byBhIG1vcmUKLQkgKiBhcHByb3ByaWF0ZSBwbGFjZQotCSAqLwotCWhvc3QtPmhvc3RfZmFpbGVkLS07Ci0JSU5JVF9MSVNUX0hFQUQoJmhvc3QtPmVoX2NtZF9xKTsKKwlXQVJOX09OKGhvc3QtPmhvc3RfZmFpbGVkIHx8ICFsaXN0X2VtcHR5KCZob3N0LT5laF9jbWRfcSkpOworCisJc2NzaV9laF9mbHVzaF9kb25lX3EoJmFwLT5laF9kb25lX3EpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCWFwLT5mbGFncyAmPSB+QVRBX0ZMQUdfSU5fRUg7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CiAKIAlEUFJJTlRLKCJFWElUXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYXRhX2VoX3Njc2lkb25lKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJLyogbmFkYSAqLworfQorCitzdGF0aWMgdm9pZCBfX2F0YV9laF9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZCA9IHFjLT5zY3NpY21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CisJcWMtPnNjc2lkb25lID0gYXRhX2VoX3Njc2lkb25lOworCV9fYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwlXQVJOX09OKGF0YV90YWdfdmFsaWQocWMtPnRhZykpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOworCisJc2NzaV9laF9maW5pc2hfY21kKHNjbWQsICZhcC0+ZWhfZG9uZV9xKTsKK30KKworLyoqCisgKglhdGFfZWhfcWNfY29tcGxldGUgLSBDb21wbGV0ZSBhbiBhY3RpdmUgQVRBIGNvbW1hbmQgZnJvbSBFSAorICoJQHFjOiBDb21tYW5kIHRvIGNvbXBsZXRlCisgKgorICoJSW5kaWNhdGUgdG8gdGhlIG1pZCBhbmQgdXBwZXIgbGF5ZXJzIHRoYXQgYW4gQVRBIGNvbW1hbmQgaGFzCisgKgljb21wbGV0ZWQuICBUbyBiZSB1c2VkIGZyb20gRUguCisgKi8KK3ZvaWQgYXRhX2VoX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IHNjc2lfY21uZCAqc2NtZCA9IHFjLT5zY3NpY21kOworCXNjbWQtPnJldHJpZXMgPSBzY21kLT5hbGxvd2VkOworCV9fYXRhX2VoX3FjX2NvbXBsZXRlKHFjKTsKK30KKworLyoqCisgKglhdGFfZWhfcWNfcmV0cnkgLSBUZWxsIG1pZGxheWVyIHRvIHJldHJ5IGFuIEFUQSBjb21tYW5kIGFmdGVyIEVICisgKglAcWM6IENvbW1hbmQgdG8gcmV0cnkKKyAqCisgKglJbmRpY2F0ZSB0byB0aGUgbWlkIGFuZCB1cHBlciBsYXllcnMgdGhhdCBhbiBBVEEgY29tbWFuZAorICoJc2hvdWxkIGJlIHJldHJpZWQuICBUbyBiZSB1c2VkIGZyb20gRUguCisgKgorICoJU0NTSSBtaWRsYXllciBsaW1pdHMgdGhlIG51bWJlciBvZiByZXRyaWVzIHRvIHNjbWQtPmFsbG93ZWQuCisgKglUaGlzIGZ1bmN0aW9uIG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHNjbWQtPnJldHJpZXMgZm9yIGNvbW1hbmRzCisgKgl3aGljaCBnZXQgcmV0cmllZCBkdWUgdG8gdW5yZWxhdGVkIE5DUSBmYWlsdXJlcy4KKyAqLwordm9pZCBhdGFfZWhfcWNfcmV0cnkoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlfX2F0YV9laF9xY19jb21wbGV0ZShxYyk7Cit9CisKIC8qKgogICoJYXRhX3Njc2lfc3RhcnRfc3RvcF94bGF0IC0gVHJhbnNsYXRlIFNDU0kgU1RBUlQgU1RPUCBVTklUIGNvbW1hbmQKICAqCUBxYzogU3RvcmFnZSBmb3IgdHJhbnNsYXRlZCBBVEEgdGFza2ZpbGUKQEAgLTk4NSw5ICsxMDk0LDEzIEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBBVEFfREZMQUdfTEJBKSB7CiAJCXRmLT5mbGFncyB8PSBBVEFfVEZMQUdfTEJBOwogCi0JCWlmIChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0xCQTQ4KSB7Ci0JCQlpZiAobl9ibG9jayA+ICg2NCAqIDEwMjQpKQotCQkJCWdvdG8gaW52YWxpZF9mbGQ7CisJCWlmIChsYmFfMjhfb2soYmxvY2ssIG5fYmxvY2spKSB7CisJCQkvKiB1c2UgTEJBMjggKi8KKwkJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9WRVJJRlk7CisJCQl0Zi0+ZGV2aWNlIHw9IChibG9jayA+PiAyNCkgJiAweGY7CisJCX0gZWxzZSBpZiAobGJhXzQ4X29rKGJsb2NrLCBuX2Jsb2NrKSkgeworCQkJaWYgKCEoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19MQkE0OCkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CiAKIAkJCS8qIHVzZSBMQkE0OCAqLwogCQkJdGYtPmZsYWdzIHw9IEFUQV9URkxBR19MQkE0ODsKQEAgLTk5OCwxNSArMTExMSw5IEBACiAJCQl0Zi0+aG9iX2xiYWggPSAoYmxvY2sgPj4gNDApICYgMHhmZjsKIAkJCXRmLT5ob2JfbGJhbSA9IChibG9jayA+PiAzMikgJiAweGZmOwogCQkJdGYtPmhvYl9sYmFsID0gKGJsb2NrID4+IDI0KSAmIDB4ZmY7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobl9ibG9jayA+IDI1NikKLQkJCQlnb3RvIGludmFsaWRfZmxkOwotCi0JCQkvKiB1c2UgTEJBMjggKi8KLQkJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9WRVJJRlk7Ci0KLQkJCXRmLT5kZXZpY2UgfD0gKGJsb2NrID4+IDI0KSAmIDB4ZjsKLQkJfQorCQl9IGVsc2UKKwkJCS8qIHJlcXVlc3QgdG9vIGxhcmdlIGV2ZW4gZm9yIExCQTQ4ICovCisJCQlnb3RvIG91dF9vZl9yYW5nZTsKIAogCQl0Zi0+bnNlY3QgPSBuX2Jsb2NrICYgMHhmZjsKIApAQCAtMTAxOSw4ICsxMTI2LDggQEAKIAkJLyogQ0hTICovCiAJCXUzMiBzZWN0LCBoZWFkLCBjeWwsIHRyYWNrOwogCi0JCWlmIChuX2Jsb2NrID4gMjU2KQotCQkJZ290byBpbnZhbGlkX2ZsZDsKKwkJaWYgKCFsYmFfMjhfb2soYmxvY2ssIG5fYmxvY2spKQorCQkJZ290byBvdXRfb2ZfcmFuZ2U7CiAKIAkJLyogQ29udmVydCBMQkEgdG8gQ0hTICovCiAJCXRyYWNrID0gKHUzMilibG9jayAvIGRldi0+c2VjdG9yczsKQEAgLTEwMzAsMTQgKzExMzcsMTQgQEAKIAogCQlEUFJJTlRLKCJibG9jayAldSB0cmFjayAldSBjeWwgJXUgaGVhZCAldSBzZWN0ICV1XG4iLAogCQkJKHUzMilibG9jaywgdHJhY2ssIGN5bCwgaGVhZCwgc2VjdCk7Ci0JCQotCQkvKiBDaGVjayB3aGV0aGVyIHRoZSBjb252ZXJ0ZWQgQ0hTIGNhbiBmaXQuIAotCQkgICBDeWxpbmRlcjogMC02NTUzNSAKKworCQkvKiBDaGVjayB3aGV0aGVyIHRoZSBjb252ZXJ0ZWQgQ0hTIGNhbiBmaXQuCisJCSAgIEN5bGluZGVyOiAwLTY1NTM1CiAJCSAgIEhlYWQ6IDAtMTUKIAkJICAgU2VjdG9yOiAxLTI1NSovCi0JCWlmICgoY3lsID4+IDE2KSB8fCAoaGVhZCA+PiA0KSB8fCAoc2VjdCA+PiA4KSB8fCAoIXNlY3QpKSAKKwkJaWYgKChjeWwgPj4gMTYpIHx8IChoZWFkID4+IDQpIHx8IChzZWN0ID4+IDgpIHx8ICghc2VjdCkpCiAJCQlnb3RvIG91dF9vZl9yYW5nZTsKLQkJCisKIAkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1ZFUklGWTsKIAkJdGYtPm5zZWN0ID0gbl9ibG9jayAmIDB4ZmY7IC8qIFNlY3RvciBjb3VudCAwIG1lYW5zIDI1NiBzZWN0b3JzICovCiAJCXRmLT5sYmFsID0gc2VjdDsKQEAgLTExMzksOSArMTI0NiwxMSBAQAogCWlmIChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0xCQSkgewogCQl0Zi0+ZmxhZ3MgfD0gQVRBX1RGTEFHX0xCQTsKIAotCQlpZiAoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19MQkE0OCkgewotCQkJLyogVGhlIHJlcXVlc3QgLW1heS0gYmUgdG9vIGxhcmdlIGZvciBMQkE0OC4gKi8KLQkJCWlmICgoYmxvY2sgPj4gNDgpIHx8IChuX2Jsb2NrID4gNjU1MzYpKQorCQlpZiAobGJhXzI4X29rKGJsb2NrLCBuX2Jsb2NrKSkgeworCQkJLyogdXNlIExCQTI4ICovCisJCQl0Zi0+ZGV2aWNlIHw9IChibG9jayA+PiAyNCkgJiAweGY7CisJCX0gZWxzZSBpZiAobGJhXzQ4X29rKGJsb2NrLCBuX2Jsb2NrKSkgeworCQkJaWYgKCEoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19MQkE0OCkpCiAJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CiAKIAkJCS8qIHVzZSBMQkE0OCAqLwpAQCAtMTE1MiwxNSArMTI2MSw5IEBACiAJCQl0Zi0+aG9iX2xiYWggPSAoYmxvY2sgPj4gNDApICYgMHhmZjsKIAkJCXRmLT5ob2JfbGJhbSA9IChibG9jayA+PiAzMikgJiAweGZmOwogCQkJdGYtPmhvYl9sYmFsID0gKGJsb2NrID4+IDI0KSAmIDB4ZmY7Ci0JCX0gZWxzZSB7IAotCQkJLyogdXNlIExCQTI4ICovCi0KLQkJCS8qIFRoZSByZXF1ZXN0IC1tYXktIGJlIHRvbyBsYXJnZSBmb3IgTEJBMjguICovCi0JCQlpZiAoKGJsb2NrID4+IDI4KSB8fCAobl9ibG9jayA+IDI1NikpCi0JCQkJZ290byBvdXRfb2ZfcmFuZ2U7Ci0KLQkJCXRmLT5kZXZpY2UgfD0gKGJsb2NrID4+IDI0KSAmIDB4ZjsKLQkJfQorCQl9IGVsc2UKKwkJCS8qIHJlcXVlc3QgdG9vIGxhcmdlIGV2ZW4gZm9yIExCQTQ4ICovCisJCQlnb3RvIG91dF9vZl9yYW5nZTsKIAogCQlpZiAodW5saWtlbHkoYXRhX3J3Y21kX3Byb3RvY29sKHFjKSA8IDApKQogCQkJZ290byBpbnZhbGlkX2ZsZDsKQEAgLTExNzMsMTIgKzEyNzYsMTIgQEAKIAkJdGYtPmxiYWwgPSBibG9jayAmIDB4ZmY7CiAKIAkJdGYtPmRldmljZSB8PSBBVEFfTEJBOwotCX0gZWxzZSB7IAorCX0gZWxzZSB7CiAJCS8qIENIUyAqLwogCQl1MzIgc2VjdCwgaGVhZCwgY3lsLCB0cmFjazsKIAogCQkvKiBUaGUgcmVxdWVzdCAtbWF5LSBiZSB0b28gbGFyZ2UgZm9yIENIUyBhZGRyZXNzaW5nLiAqLwotCQlpZiAoKGJsb2NrID4+IDI4KSB8fCAobl9ibG9jayA+IDI1NikpCisJCWlmICghbGJhXzI4X29rKGJsb2NrLCBuX2Jsb2NrKSkKIAkJCWdvdG8gb3V0X29mX3JhbmdlOwogCiAJCWlmICh1bmxpa2VseShhdGFfcndjbWRfcHJvdG9jb2wocWMpIDwgMCkpCkBAIC0xMTkzLDggKzEyOTYsOCBAQAogCQlEUFJJTlRLKCJibG9jayAldSB0cmFjayAldSBjeWwgJXUgaGVhZCAldSBzZWN0ICV1XG4iLAogCQkJKHUzMilibG9jaywgdHJhY2ssIGN5bCwgaGVhZCwgc2VjdCk7CiAKLQkJLyogQ2hlY2sgd2hldGhlciB0aGUgY29udmVydGVkIENIUyBjYW4gZml0LiAKLQkJICAgQ3lsaW5kZXI6IDAtNjU1MzUgCisJCS8qIENoZWNrIHdoZXRoZXIgdGhlIGNvbnZlcnRlZCBDSFMgY2FuIGZpdC4KKwkJICAgQ3lsaW5kZXI6IDAtNjU1MzUKIAkJICAgSGVhZDogMC0xNQogCQkgICBTZWN0b3I6IDEtMjU1Ki8KIAkJaWYgKChjeWwgPj4gMTYpIHx8IChoZWFkID4+IDQpIHx8IChzZWN0ID4+IDgpIHx8ICghc2VjdCkpCkBAIC0xMjI1LDcgKzEzMjgsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGF0YV9zY3NpX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdm9pZCBhdGFfc2NzaV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHFjLT5zY3NpY21kOwogCXU4ICpjZGIgPSBjbWQtPmNtbmQ7CkBAIC0xMjYyLDcgKzEzNjUsNyBAQAogCiAJcWMtPnNjc2lkb25lKGNtZCk7CiAKLQlyZXR1cm4gMDsKKwlhdGFfcWNfZnJlZShxYyk7CiB9CiAKIC8qKgpAQCAtMTMyOCw4ICsxNDMxLDkgQEAKIAkJZ290byBlYXJseV9maW5pc2g7CiAKIAkvKiBzZWxlY3QgZGV2aWNlLCBzZW5kIGNvbW1hbmQgdG8gaGFyZHdhcmUgKi8KLQlpZiAoYXRhX3FjX2lzc3VlKHFjKSkKLQkJZ290byBlcnJfZGlkOworCXFjLT5lcnJfbWFzayA9IGF0YV9xY19pc3N1ZShxYyk7CisJaWYgKHFjLT5lcnJfbWFzaykKKwkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAogCVZQUklOVEsoIkVYSVRcbiIpOwogCXJldHVybjsKQEAgLTE0NDUsNyArMTU0OSw3IEBACiAgKglAYnVmbGVuOiBSZXNwb25zZSBidWZmZXIgbGVuZ3RoLgogICoKICAqCVJldHVybnMgc3RhbmRhcmQgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGRhdGEgYXNzb2NpYXRlZAotICoJd2l0aCBub24tRVZQRCBJTlFVSVJZIGNvbW1hbmQgb3V0cHV0LgorICoJd2l0aCBub24tVlBEIElOUVVJUlkgY29tbWFuZCBvdXRwdXQuCiAgKgogICoJTE9DS0lORzoKICAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCkBAIC0xNDcyLDggKzE1NzYsOCBAQAogCiAJaWYgKGJ1ZmxlbiA+IDM1KSB7CiAJCW1lbWNweSgmcmJ1Zls4XSwgIkFUQSAgICAgIiwgOCk7Ci0JCWF0YV9kZXZfaWRfc3RyaW5nKGFyZ3MtPmlkLCAmcmJ1ZlsxNl0sIEFUQV9JRF9QUk9EX09GUywgMTYpOwotCQlhdGFfZGV2X2lkX3N0cmluZyhhcmdzLT5pZCwgJnJidWZbMzJdLCBBVEFfSURfRldfUkVWX09GUywgNCk7CisJCWF0YV9pZF9zdHJpbmcoYXJncy0+aWQsICZyYnVmWzE2XSwgQVRBX0lEX1BST0RfT0ZTLCAxNik7CisJCWF0YV9pZF9zdHJpbmcoYXJncy0+aWQsICZyYnVmWzMyXSwgQVRBX0lEX0ZXX1JFVl9PRlMsIDQpOwogCQlpZiAocmJ1ZlszMl0gPT0gMCB8fCByYnVmWzMyXSA9PSAnICcpCiAJCQltZW1jcHkoJnJidWZbMzJdLCAibi9hICIsIDQpOwogCX0KQEAgLTE0OTYsMTIgKzE2MDAsMTIgQEAKIH0KIAogLyoqCi0gKglhdGFfc2NzaW9wX2lucV8wMCAtIFNpbXVsYXRlIElOUVVJUlkgRVZQRCBwYWdlIDAsIGxpc3Qgb2YgcGFnZXMKKyAqCWF0YV9zY3Npb3BfaW5xXzAwIC0gU2ltdWxhdGUgSU5RVUlSWSBWUEQgcGFnZSAwLCBsaXN0IG9mIHBhZ2VzCiAgKglAYXJnczogZGV2aWNlIElERU5USUZZIGRhdGEgLyBTQ1NJIGNvbW1hbmQgb2YgaW50ZXJlc3QuCiAgKglAcmJ1ZjogUmVzcG9uc2UgYnVmZmVyLCB0byB3aGljaCBzaW11bGF0ZWQgU0NTSSBjbWQgb3V0cHV0IGlzIHNlbnQuCiAgKglAYnVmbGVuOiBSZXNwb25zZSBidWZmZXIgbGVuZ3RoLgogICoKLSAqCVJldHVybnMgbGlzdCBvZiBpbnF1aXJ5IEVWUEQgcGFnZXMgYXZhaWxhYmxlLgorICoJUmV0dXJucyBsaXN0IG9mIGlucXVpcnkgVlBEIHBhZ2VzIGF2YWlsYWJsZS4KICAqCiAgKglMT0NLSU5HOgogICoJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdF9zZXQgbG9jaykKQEAgLTE1MTUsNyArMTYxOSw3IEBACiAJCTB4ODAsCS8qIHBhZ2UgMHg4MCwgdW5pdCBzZXJpYWwgbm8gcGFnZSAqLwogCQkweDgzCS8qIHBhZ2UgMHg4MywgZGV2aWNlIGlkZW50IHBhZ2UgKi8KIAl9OwotCXJidWZbM10gPSBzaXplb2YocGFnZXMpOwkvKiBudW1iZXIgb2Ygc3VwcG9ydGVkIEVWUEQgcGFnZXMgKi8KKwlyYnVmWzNdID0gc2l6ZW9mKHBhZ2VzKTsJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBWUEQgcGFnZXMgKi8KIAogCWlmIChidWZsZW4gPiA2KQogCQltZW1jcHkocmJ1ZiArIDQsIHBhZ2VzLCBzaXplb2YocGFnZXMpKTsKQEAgLTE1MjQsNyArMTYyOCw3IEBACiB9CiAKIC8qKgotICoJYXRhX3Njc2lvcF9pbnFfODAgLSBTaW11bGF0ZSBJTlFVSVJZIEVWUEQgcGFnZSA4MCwgZGV2aWNlIHNlcmlhbCBudW1iZXIKKyAqCWF0YV9zY3Npb3BfaW5xXzgwIC0gU2ltdWxhdGUgSU5RVUlSWSBWUEQgcGFnZSA4MCwgZGV2aWNlIHNlcmlhbCBudW1iZXIKICAqCUBhcmdzOiBkZXZpY2UgSURFTlRJRlkgZGF0YSAvIFNDU0kgY29tbWFuZCBvZiBpbnRlcmVzdC4KICAqCUByYnVmOiBSZXNwb25zZSBidWZmZXIsIHRvIHdoaWNoIHNpbXVsYXRlZCBTQ1NJIGNtZCBvdXRwdXQgaXMgc2VudC4KICAqCUBidWZsZW46IFJlc3BvbnNlIGJ1ZmZlciBsZW5ndGguCkBAIC0xNTQ3LDIyICsxNjUxLDIyIEBACiAJbWVtY3B5KHJidWYsIGhkciwgc2l6ZW9mKGhkcikpOwogCiAJaWYgKGJ1ZmxlbiA+IChBVEFfU0VSTk9fTEVOICsgNCAtIDEpKQotCQlhdGFfZGV2X2lkX3N0cmluZyhhcmdzLT5pZCwgKHVuc2lnbmVkIGNoYXIgKikgJnJidWZbNF0sCi0JCQkJICBBVEFfSURfU0VSTk9fT0ZTLCBBVEFfU0VSTk9fTEVOKTsKKwkJYXRhX2lkX3N0cmluZyhhcmdzLT5pZCwgKHVuc2lnbmVkIGNoYXIgKikgJnJidWZbNF0sCisJCQkgICAgICBBVEFfSURfU0VSTk9fT0ZTLCBBVEFfU0VSTk9fTEVOKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlucV84M19zdHIgPSAiTGludXggQVRBLVNDU0kgc2ltdWxhdG9yIjsKLQogLyoqCi0gKglhdGFfc2NzaW9wX2lucV84MyAtIFNpbXVsYXRlIElOUVVJUlkgRVZQRCBwYWdlIDgzLCBkZXZpY2UgaWRlbnRpdHkKKyAqCWF0YV9zY3Npb3BfaW5xXzgzIC0gU2ltdWxhdGUgSU5RVUlSWSBWUEQgcGFnZSA4MywgZGV2aWNlIGlkZW50aXR5CiAgKglAYXJnczogZGV2aWNlIElERU5USUZZIGRhdGEgLyBTQ1NJIGNvbW1hbmQgb2YgaW50ZXJlc3QuCiAgKglAcmJ1ZjogUmVzcG9uc2UgYnVmZmVyLCB0byB3aGljaCBzaW11bGF0ZWQgU0NTSSBjbWQgb3V0cHV0IGlzIHNlbnQuCiAgKglAYnVmbGVuOiBSZXNwb25zZSBidWZmZXIgbGVuZ3RoLgogICoKLSAqCVJldHVybnMgZGV2aWNlIGlkZW50aWZpY2F0aW9uLiAgQ3VycmVudGx5IGhhcmRjb2RlZCB0bwotICoJcmV0dXJuICJMaW51eCBBVEEtU0NTSSBzaW11bGF0b3IiLgorICoJWWllbGRzIHR3byBsb2dpY2FsIHVuaXQgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGRlc2lnbmF0b3JzOgorICoJIC0gdmVuZG9yIHNwZWNpZmljIEFTQ0lJIGNvbnRhaW5pbmcgdGhlIEFUQSBzZXJpYWwgbnVtYmVyCisgKgkgLSBTQVQgZGVmaW5lZCAidDEwIHZlbmRvciBpZCBiYXNlZCIgY29udGFpbmluZyBBU0NJSSB2ZW5kb3IKKyAqCSAgIG5hbWUgKCJBVEEgICAgICIpLCBtb2RlbCBhbmQgc2VyaWFsIG51bWJlcnMuCiAgKgogICoJTE9DS0lORzoKICAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCkBAIC0xNTcxLDE2ICsxNjc1LDM5IEBACiB1bnNpZ25lZCBpbnQgYXRhX3Njc2lvcF9pbnFfODMoc3RydWN0IGF0YV9zY3NpX2FyZ3MgKmFyZ3MsIHU4ICpyYnVmLAogCQkJICAgICAgdW5zaWduZWQgaW50IGJ1ZmxlbikKIHsKKwlpbnQgbnVtOworCWNvbnN0IGludCBzYXRfbW9kZWxfc2VyaWFsX2Rlc2NfbGVuID0gNjg7CisJY29uc3QgaW50IGF0YV9tb2RlbF9ieXRlX2xlbiA9IDQwOworCiAJcmJ1ZlsxXSA9IDB4ODM7CQkJLyogdGhpcyBwYWdlIGNvZGUgKi8KLQlyYnVmWzNdID0gNCArIHN0cmxlbihpbnFfODNfc3RyKTsJLyogcGFnZSBsZW4gKi8KKwludW0gPSA0OwogCi0JLyogb3VyIG9uZSBhbmQgb25seSBpZGVudGlmaWNhdGlvbiBkZXNjcmlwdG9yICh2ZW5kb3Itc3BlY2lmaWMpICovCi0JaWYgKGJ1ZmxlbiA+IChzdHJsZW4oaW5xXzgzX3N0cikgKyA0ICsgNCAtIDEpKSB7Ci0JCXJidWZbNCArIDBdID0gMjsJLyogY29kZSBzZXQ6IEFTQ0lJICovCi0JCXJidWZbNCArIDNdID0gc3RybGVuKGlucV84M19zdHIpOwotCQltZW1jcHkocmJ1ZiArIDQgKyA0LCBpbnFfODNfc3RyLCBzdHJsZW4oaW5xXzgzX3N0cikpOworCWlmIChidWZsZW4gPiAoQVRBX1NFUk5PX0xFTiArIG51bSArIDMpKSB7CisJCS8qIHBpdj0wLCBhc3NvYz1sdSwgY29kZV9zZXQ9QUNTSUksIGRlc2lnbmF0b3I9dmVuZG9yICovCisJCXJidWZbbnVtICsgMF0gPSAyOworCQlyYnVmW251bSArIDNdID0gQVRBX1NFUk5PX0xFTjsKKwkJbnVtICs9IDQ7CisJCWF0YV9pZF9zdHJpbmcoYXJncy0+aWQsICh1bnNpZ25lZCBjaGFyICopIHJidWYgKyBudW0sCisJCQkgICAgICBBVEFfSURfU0VSTk9fT0ZTLCBBVEFfU0VSTk9fTEVOKTsKKwkJbnVtICs9IEFUQV9TRVJOT19MRU47CiAJfQotCisJaWYgKGJ1ZmxlbiA+IChzYXRfbW9kZWxfc2VyaWFsX2Rlc2NfbGVuICsgbnVtICsgMykpIHsKKwkJLyogU0FUIGRlZmluZWQgbHUgbW9kZWwgYW5kIHNlcmlhbCBudW1iZXJzIGRlc2NyaXB0b3IgKi8KKwkJLyogcGl2PTAsIGFzc29jPWx1LCBjb2RlX3NldD1BQ1NJSSwgZGVzaWduYXRvcj10MTAgdmVuZG9yIGlkICovCisJCXJidWZbbnVtICsgMF0gPSAyOworCQlyYnVmW251bSArIDFdID0gMTsKKwkJcmJ1ZltudW0gKyAzXSA9IHNhdF9tb2RlbF9zZXJpYWxfZGVzY19sZW47CisJCW51bSArPSA0OworCQltZW1jcHkocmJ1ZiArIG51bSwgIkFUQSAgICAgIiwgOCk7CisJCW51bSArPSA4OworCQlhdGFfaWRfc3RyaW5nKGFyZ3MtPmlkLCAodW5zaWduZWQgY2hhciAqKSByYnVmICsgbnVtLAorCQkJICAgICAgQVRBX0lEX1BST0RfT0ZTLCBhdGFfbW9kZWxfYnl0ZV9sZW4pOworCQludW0gKz0gYXRhX21vZGVsX2J5dGVfbGVuOworCQlhdGFfaWRfc3RyaW5nKGFyZ3MtPmlkLCAodW5zaWduZWQgY2hhciAqKSByYnVmICsgbnVtLAorCQkJICAgICAgQVRBX0lEX1NFUk5PX09GUywgQVRBX1NFUk5PX0xFTik7CisJCW51bSArPSBBVEFfU0VSTk9fTEVOOworCX0KKwlyYnVmWzNdID0gbnVtIC0gNDsgICAgLyogcGFnZSBsZW4gKGFzc3VtZSBsZXNzIHRoYW4gMjU2IGJ5dGVzKSAqLwogCXJldHVybiAwOwogfQogCkBAIC0xNzA4LDE4ICsxODM1LDE3IEBACiB7CiAJdW5zaWduZWQgY2hhciBtb2RlbFs0MV0sIGZ3WzldOwogCisJaWYgKCFsaWJhdGFfZnVhKQorCQlyZXR1cm4gMDsKIAlpZiAoIWF0YV9pZF9oYXNfZnVhKGlkKSkKIAkJcmV0dXJuIDA7CiAKLQltb2RlbFs0MF0gPSAnXDAnOwotCWZ3WzhdID0gJ1wwJzsKKwlhdGFfaWRfY19zdHJpbmcoaWQsIG1vZGVsLCBBVEFfSURfUFJPRF9PRlMsIHNpemVvZihtb2RlbCkpOworCWF0YV9pZF9jX3N0cmluZyhpZCwgZncsIEFUQV9JRF9GV19SRVZfT0ZTLCBzaXplb2YoZncpKTsKIAotCWF0YV9kZXZfaWRfc3RyaW5nKGlkLCBtb2RlbCwgQVRBX0lEX1BST0RfT0ZTLCBzaXplb2YobW9kZWwpIC0gMSk7Ci0JYXRhX2Rldl9pZF9zdHJpbmcoaWQsIGZ3LCBBVEFfSURfRldfUkVWX09GUywgc2l6ZW9mKGZ3KSAtIDEpOwotCi0JaWYgKHN0cm5jbXAobW9kZWwsICJNYXh0b3IiLCA2KSkKKwlpZiAoc3RyY21wKG1vZGVsLCAiTWF4dG9yIikpCiAJCXJldHVybiAxOwotCWlmIChzdHJuY21wKGZ3LCAiQkFOQzFHMTAiLCA4KSkKKwlpZiAoc3RyY21wKGZ3LCAiQkFOQzFHMTAiKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsgLyogYmxhY2tsaXN0ZWQgKi8KQEAgLTIwMTMsNyArMjEzOSw3IEBACiAJZG9uZShjbWQpOwogfQogCi1zdGF0aWMgaW50IGF0YXBpX3NlbnNlX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdm9pZCBhdGFwaV9zZW5zZV9jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCWlmIChxYy0+ZXJyX21hc2sgJiYgKChxYy0+ZXJyX21hc2sgJiBBQ19FUlJfREVWKSA9PSAwKSkKIAkJLyogRklYTUU6IG5vdCBxdWl0ZSByaWdodDsgd2UgZG9uJ3Qgd2FudCB0aGUKQEAgLTIwMjQsNyArMjE1MCw3IEBACiAJCWF0YV9nZW5fYXRhX2Rlc2Nfc2Vuc2UocWMpOwogCiAJcWMtPnNjc2lkb25lKHFjLT5zY3NpY21kKTsKLQlyZXR1cm4gMDsKKwlhdGFfcWNfZnJlZShxYyk7CiB9CiAKIC8qIGlzIGl0IHBvaW50bGVzcyB0byBwcmVmZXIgUElPIGZvciAic2FmZXR5IHJlYXNvbnMiPyAqLwpAQCAtMjA1NCw3ICsyMTgwLDcgQEAKIAlhdGFfc2dfaW5pdF9vbmUocWMsIGNtZC0+c2Vuc2VfYnVmZmVyLCBzaXplb2YoY21kLT5zZW5zZV9idWZmZXIpKTsKIAlxYy0+ZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRTsKIAotCW1lbXNldCgmcWMtPmNkYiwgMCwgYXAtPmNkYl9sZW4pOworCW1lbXNldCgmcWMtPmNkYiwgMCwgcWMtPmRldi0+Y2RiX2xlbik7CiAJcWMtPmNkYlswXSA9IFJFUVVFU1RfU0VOU0U7CiAJcWMtPmNkYls0XSA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKIApAQCAtMjA3MywxNSArMjE5OSwxNCBAQAogCiAJcWMtPmNvbXBsZXRlX2ZuID0gYXRhcGlfc2Vuc2VfY29tcGxldGU7CiAKLQlpZiAoYXRhX3FjX2lzc3VlKHFjKSkgewotCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOworCXFjLT5lcnJfbWFzayA9IGF0YV9xY19pc3N1ZShxYyk7CisJaWYgKHFjLT5lcnJfbWFzaykKIAkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKLQl9CiAKIAlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAotc3RhdGljIGludCBhdGFwaV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHZvaWQgYXRhcGlfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBxYy0+c2NzaWNtZDsKIAl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBxYy0+ZXJyX21hc2s7CkBAIC0yMDkxLDcgKzIyMTYsNyBAQAogCWlmICh1bmxpa2VseShlcnJfbWFzayAmIEFDX0VSUl9ERVYpKSB7CiAJCWNtZC0+cmVzdWx0ID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCQlhdGFwaV9yZXF1ZXN0X3NlbnNlKHFjKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAl9CiAKIAllbHNlIGlmICh1bmxpa2VseShlcnJfbWFzaykpCkBAIC0yMTMxLDcgKzIyNTYsNyBAQAogCX0KIAogCXFjLT5zY3NpZG9uZShjbWQpOwotCXJldHVybiAwOworCWF0YV9xY19mcmVlKHFjKTsKIH0KIC8qKgogICoJYXRhcGlfeGxhdCAtIEluaXRpYWxpemUgUEFDS0VUIHRhc2tmaWxlCkBAIC0yMTU3LDcgKzIyODIsNyBAQAogCQlpZiAoYXRhX2NoZWNrX2F0YXBpX2RtYShxYykpCiAJCQl1c2luZ19waW8gPSAxOwogCi0JbWVtY3B5KCZxYy0+Y2RiLCBzY3NpY21kLCBxYy0+YXAtPmNkYl9sZW4pOworCW1lbWNweSgmcWMtPmNkYiwgc2NzaWNtZCwgZGV2LT5jZGJfbGVuKTsKIAogCXFjLT5jb21wbGV0ZV9mbiA9IGF0YXBpX3FjX2NvbXBsZXRlOwogCkBAIC0yMjYxLDkgKzIzODYsNiBAQAogCiAJCWNhc2UgNDoJCS8qIFBJTyBEYXRhLWluICovCiAJCWNhc2UgNToJCS8qIFBJTyBEYXRhLW91dCAqLwotCQkJaWYgKGJ5dGUxICYgMHhlMCkgewotCQkJCXJldHVybiBBVEFfUFJPVF9QSU9fTVVMVDsKLQkJCX0KIAkJCXJldHVybiBBVEFfUFJPVF9QSU87CiAKIAkJY2FzZSAxMDoJLyogRGV2aWNlIFJlc2V0ICovCkBAIC0yMzAyLDYgKzI0MjQsMTAgQEAKIAlpZiAoKHRmLT5wcm90b2NvbCA9IGF0YV9zY3NpX21hcF9wcm90byhzY3NpY21kWzFdKSkgPT0gQVRBX1BST1RfVU5LTk9XTikKIAkJZ290byBpbnZhbGlkX2ZsZDsKIAorCWlmIChzY3NpY21kWzFdICYgMHhlMCkKKwkJLyogUElPIG11bHRpIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJCWdvdG8gaW52YWxpZF9mbGQ7CisKIAkvKgogCSAqIDEyIGFuZCAxNiBieXRlIENEQnMgdXNlIGRpZmZlcmVudCBvZmZzZXRzIHRvCiAJICogcHJvdmlkZSB0aGUgdmFyaW91cyByZWdpc3RlciB2YWx1ZXMuCkBAIC0yNDU4LDYgKzI1ODQsMjEgQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19hdGFfc2NzaV9xdWV1ZWNtZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopLAorCQkJCSAgICAgICBzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBKSB7CisJCWF0YV94bGF0X2Z1bmNfdCB4bGF0X2Z1bmMgPSBhdGFfZ2V0X3hsYXRfZnVuYyhkZXYsCisJCQkJCQkJICAgICAgY21kLT5jbW5kWzBdKTsKKworCQlpZiAoeGxhdF9mdW5jKQorCQkJYXRhX3Njc2lfdHJhbnNsYXRlKGFwLCBkZXYsIGNtZCwgZG9uZSwgeGxhdF9mdW5jKTsKKwkJZWxzZQorCQkJYXRhX3Njc2lfc2ltdWxhdGUoYXAsIGRldiwgY21kLCBkb25lKTsKKwl9IGVsc2UKKwkJYXRhX3Njc2lfdHJhbnNsYXRlKGFwLCBkZXYsIGNtZCwgZG9uZSwgYXRhcGlfeGxhdCk7Cit9CisKIC8qKgogICoJYXRhX3Njc2lfcXVldWVjbWQgLSBJc3N1ZSBTQ1NJIGNkYiB0byBsaWJhdGEtbWFuYWdlZCBkZXZpY2UKICAqCUBjbWQ6IFNDU0kgY29tbWFuZCB0byBiZSBzZW50CkBAIC0yNDkyLDI0ICsyNjMzLDEzIEBACiAJYXRhX3Njc2lfZHVtcF9jZGIoYXAsIGNtZCk7CiAKIAlkZXYgPSBhdGFfc2NzaV9maW5kX2RldihhcCwgc2NzaWRldik7Ci0JaWYgKHVubGlrZWx5KCFkZXYpKSB7CisJaWYgKGxpa2VseShkZXYpKQorCQlfX2F0YV9zY3NpX3F1ZXVlY21kKGNtZCwgZG9uZSwgYXAsIGRldik7CisJZWxzZSB7CiAJCWNtZC0+cmVzdWx0ID0gKERJRF9CQURfVEFSR0VUIDw8IDE2KTsKIAkJZG9uZShjbWQpOwotCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEEpIHsKLQkJYXRhX3hsYXRfZnVuY190IHhsYXRfZnVuYyA9IGF0YV9nZXRfeGxhdF9mdW5jKGRldiwKLQkJCQkJCQkgICAgICBjbWQtPmNtbmRbMF0pOwotCi0JCWlmICh4bGF0X2Z1bmMpCi0JCQlhdGFfc2NzaV90cmFuc2xhdGUoYXAsIGRldiwgY21kLCBkb25lLCB4bGF0X2Z1bmMpOwotCQllbHNlCi0JCQlhdGFfc2NzaV9zaW11bGF0ZShhcCwgZGV2LCBjbWQsIGRvbmUpOwotCX0gZWxzZQotCQlhdGFfc2NzaV90cmFuc2xhdGUoYXAsIGRldiwgY21kLCBkb25lLCBhdGFwaV94bGF0KTsKLQotb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmYXAtPmhvc3Rfc2V0LT5sb2NrKTsKIAlzcGluX2xvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC0yNTE3LDcgKzI2NDcsOCBAQAogCiAvKioKICAqCWF0YV9zY3NpX3NpbXVsYXRlIC0gc2ltdWxhdGUgU0NTSSBjb21tYW5kIG9uIEFUQSBkZXZpY2UKLSAqCUBpZDogY3VycmVudCBJREVOVElGWSBkYXRhIGZvciB0YXJnZXQgZGV2aWNlLgorICoJQGFwOiBwb3J0IHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIHRvCisgKglAZGV2OiB0aGUgdGFyZ2V0IGRldmljZQogICoJQGNtZDogU0NTSSBjb21tYW5kIGJlaW5nIHNlbnQgdG8gZGV2aWNlLgogICoJQGRvbmU6IFNDU0kgY29tbWFuZCBjb21wbGV0aW9uIGZ1bmN0aW9uLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJhdGEuaCBiL2RyaXZlcnMvc2NzaS9saWJhdGEuaAppbmRleCBlMDNjZTQ4Li42NWY1MmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLmgKKysrIGIvZHJpdmVycy9zY3NpL2xpYmF0YS5oCkBAIC00MSwxMSArNDEsMTMgQEAKIAogLyogbGliYXRhLWNvcmUuYyAqLwogZXh0ZXJuIGludCBhdGFwaV9lbmFibGVkOworZXh0ZXJuIGludCBsaWJhdGFfZnVhOwogZXh0ZXJuIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqYXRhX3FjX25ld19pbml0KHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCQkJICAgICAgc3RydWN0IGF0YV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGF0YV9yd2NtZF9wcm90b2NvbChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK2V4dGVybiB2b2lkIGF0YV9wb3J0X2ZsdXNoX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfcWNfZnJlZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLWV4dGVybiBpbnQgYXRhX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaW50IGF0YV9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gdm9pZCBhdGFfZGV2X3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdhaXQsIHVuc2lnbmVkIGludCBjYW5fc2xlZXApOwpAQCAtNTUsNiArNTcsOCBAQAogCiAKIC8qIGxpYmF0YS1zY3NpLmMgKi8KK2V4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgYXRhX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworCiBleHRlcm4gdm9pZCBhdGFfc2NzaV9zY2FuX2hvc3Qoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gaW50IGF0YV9zY3NpX2Vycm9yKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfc2NzaW9wX2lucV9zdGQoc3RydWN0IGF0YV9zY3NpX2FyZ3MgKmFyZ3MsIHU4ICpyYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCmluZGV4IDM4ZmZhOGQuLjA4N2M0NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTEyMSw3ICsxMjEsOSBAQAogCXVpbnQzMl90IGVsc1JjdkxPR087CiAJdWludDMyX3QgZWxzUmN2UFJMTzsKIAl1aW50MzJfdCBlbHNSY3ZQUkxJOwotCXVpbnQzMl90IGVsc1JjdlJSUTsKKwl1aW50MzJfdCBlbHNSY3ZMSVJSOworCXVpbnQzMl90IGVsc1JjdlJQUzsKKwl1aW50MzJfdCBlbHNSY3ZSUEw7CiAJdWludDMyX3QgZWxzWG1pdEZMT0dJOwogCXVpbnQzMl90IGVsc1htaXRQTE9HSTsKIAl1aW50MzJfdCBlbHNYbWl0UFJMSTsKQEAgLTE2NywzMyArMTY5LDM1IEBACiB9OwogCiBzdHJ1Y3QgbHBmY19oYmEgewotCXN0cnVjdCBsaXN0X2hlYWQgaGJhX2xpc3Q7CS8qIExpc3Qgb2YgaGJhcy9wb3J0cyAqLwogCXN0cnVjdCBscGZjX3NsaSBzbGk7CiAJc3RydWN0IGxwZmNfc2xpMl9zbGltICpzbGltMnA7CiAJZG1hX2FkZHJfdCBzbGltMnBfbWFwcGluZzsKIAl1aW50MTZfdCBwY2lfY2ZnX3ZhbHVlOwogCiAJc3RydWN0IHNlbWFwaG9yZSBoYmFfY2FuX2Jsb2NrOwotCXVpbnQzMl90IGhiYV9zdGF0ZTsKKwlpbnQzMl90IGhiYV9zdGF0ZTsKIAotI2RlZmluZSBMUEZDX0lOSVRfU1RBUlQgICAgICAgICAgIDEJLyogSW5pdGlhbCBzdGF0ZSBhZnRlciBib2FyZCByZXNldCAqLwotI2RlZmluZSBMUEZDX0lOSVRfTUJYX0NNRFMgICAgICAgIDIJLyogSW5pdGlhbGl6ZSBIQkEgd2l0aCBtYm94IGNvbW1hbmRzICovCi0jZGVmaW5lIExQRkNfTElOS19ET1dOICAgICAgICAgICAgMwkvKiBIQkEgaW5pdGlhbGl6ZWQsIGxpbmsgaXMgZG93biAqLwotI2RlZmluZSBMUEZDX0xJTktfVVAgICAgICAgICAgICAgIDQJLyogTGluayBpcyB1cCAgLSBpc3N1ZSBSRUFEX0xBICovCi0jZGVmaW5lIExQRkNfTE9DQUxfQ0ZHX0xJTksgICAgICAgNQkvKiBsb2NhbCBOUE9SVCBJZCBjb25maWd1cmVkICovCi0jZGVmaW5lIExQRkNfRkxPR0kgICAgICAgICAgICAgICAgNgkvKiBGTE9HSSBzZW50IHRvIEZhYnJpYyAqLwotI2RlZmluZSBMUEZDX0ZBQlJJQ19DRkdfTElOSyAgICAgIDcJLyogRmFicmljIGFzc2lnbmVkIE5QT1JUIElkCisjZGVmaW5lIExQRkNfU1RBVEVfVU5LTk9XTiAgICAgICAgMCAgICAvKiBIQkEgc3RhdGUgaXMgdW5rbm93biAqLworI2RlZmluZSBMUEZDX1dBUk1fU1RBUlQgICAgICAgICAgIDEgICAgLyogSEJBIHN0YXRlIGFmdGVyIHNlbGVjdGl2ZSByZXNldCAqLworI2RlZmluZSBMUEZDX0lOSVRfU1RBUlQgICAgICAgICAgIDIgICAgLyogSW5pdGlhbCBzdGF0ZSBhZnRlciBib2FyZCByZXNldCAqLworI2RlZmluZSBMUEZDX0lOSVRfTUJYX0NNRFMgICAgICAgIDMgICAgLyogSW5pdGlhbGl6ZSBIQkEgd2l0aCBtYm94IGNvbW1hbmRzICovCisjZGVmaW5lIExQRkNfTElOS19ET1dOICAgICAgICAgICAgNCAgICAvKiBIQkEgaW5pdGlhbGl6ZWQsIGxpbmsgaXMgZG93biAqLworI2RlZmluZSBMUEZDX0xJTktfVVAgICAgICAgICAgICAgIDUgICAgLyogTGluayBpcyB1cCAgLSBpc3N1ZSBSRUFEX0xBICovCisjZGVmaW5lIExQRkNfTE9DQUxfQ0ZHX0xJTksgICAgICAgNiAgICAvKiBsb2NhbCBOUE9SVCBJZCBjb25maWd1cmVkICovCisjZGVmaW5lIExQRkNfRkxPR0kgICAgICAgICAgICAgICAgNyAgICAvKiBGTE9HSSBzZW50IHRvIEZhYnJpYyAqLworI2RlZmluZSBMUEZDX0ZBQlJJQ19DRkdfTElOSyAgICAgIDggICAgLyogRmFicmljIGFzc2lnbmVkIE5QT1JUIElkCiAJCQkJCSAgIGNvbmZpZ3VyZWQgKi8KLSNkZWZpbmUgTFBGQ19OU19SRUcgICAgICAgICAgICAgICA4CS8qIFJlZ2lzdGVyIHdpdGggTmFtZVNlcnZlciAqLwotI2RlZmluZSBMUEZDX05TX1FSWSAgICAgICAgICAgICAgIDkJLyogUXVlcnkgTmFtZVNlcnZlciBmb3IgTlBvcnQgSUQgbGlzdCAqLwotI2RlZmluZSBMUEZDX0JVSUxEX0RJU0NfTElTVCAgICAgIDEwCS8qIEJ1aWxkIEFESVNDIGFuZCBQTE9HSSBsaXN0cyBmb3IKKyNkZWZpbmUgTFBGQ19OU19SRUcgICAgICAgICAgICAgICA5CS8qIFJlZ2lzdGVyIHdpdGggTmFtZVNlcnZlciAqLworI2RlZmluZSBMUEZDX05TX1FSWSAgICAgICAgICAgICAgIDEwCS8qIFF1ZXJ5IE5hbWVTZXJ2ZXIgZm9yIE5Qb3J0IElEIGxpc3QgKi8KKyNkZWZpbmUgTFBGQ19CVUlMRF9ESVNDX0xJU1QgICAgICAxMQkvKiBCdWlsZCBBRElTQyBhbmQgUExPR0kgbGlzdHMgZm9yCiAJCQkJCSAqIGRldmljZSBhdXRoZW50aWNhdGlvbiAvIGRpc2NvdmVyeSAqLwotI2RlZmluZSBMUEZDX0RJU0NfQVVUSCAgICAgICAgICAgIDExCS8qIFByb2Nlc3NpbmcgQURJU0MgbGlzdCAqLwotI2RlZmluZSBMUEZDX0NMRUFSX0xBICAgICAgICAgICAgIDEyCS8qIGF1dGhlbnRpY2F0aW9uIGNtcGx0IC0gaXNzdWUKKyNkZWZpbmUgTFBGQ19ESVNDX0FVVEggICAgICAgICAgICAxMgkvKiBQcm9jZXNzaW5nIEFESVNDIGxpc3QgKi8KKyNkZWZpbmUgTFBGQ19DTEVBUl9MQSAgICAgICAgICAgICAxMwkvKiBhdXRoZW50aWNhdGlvbiBjbXBsdCAtIGlzc3VlCiAJCQkJCSAgIENMRUFSX0xBICovCiAjZGVmaW5lIExQRkNfSEJBX1JFQURZICAgICAgICAgICAgMzIKLSNkZWZpbmUgTFBGQ19IQkFfRVJST1IgICAgICAgICAgICAweGZmCisjZGVmaW5lIExQRkNfSEJBX0VSUk9SICAgICAgICAgICAgLTEKIAorCWludDMyX3Qgc3RvcHBlZDsgICAvKiBIQkEgaGFzIG5vdCBiZWVuIHJlc3RhcnRlZCBzaW5jZSBsYXN0IEVSQVRUICovCiAJdWludDhfdCBmY19saW5rc3BlZWQ7CS8qIExpbmsgc3BlZWQgYWZ0ZXIgbGFzdCBSRUFEX0xBICovCiAKIAl1aW50MzJfdCBmY19ldmVudFRhZzsJLyogZXZlbnQgdGFnIGZvciBsaW5rIGF0dGVudGlvbiAqLwpAQCAtMjQ1LDYgKzI0OSw3IEBACiAjZGVmaW5lIEZDX1NDU0lfU0NBTl9UTU8gICAgICAgIDB4NDAwMAkvKiBzY3NpIHNjYW4gdGltZXIgcnVubmluZyAqLwogI2RlZmluZSBGQ19BQk9SVF9ESVNDT1ZFUlkgICAgICAweDgwMDAJLyogd2Ugd2FudCB0byBhYm9ydCBkaXNjb3ZlcnkgKi8KICNkZWZpbmUgRkNfTkRJU0NfQUNUSVZFICAgICAgICAgMHgxMDAwMAkvKiBOUG9ydCBkaXNjb3ZlcnkgYWN0aXZlICovCisjZGVmaW5lIEZDX0JZUEFTU0VEX01PREUgICAgICAgIDB4MjAwMDAJLyogTlBvcnQgaXMgaW4gYnlwYXNzZWQgbW9kZSAqLwogCiAJdWludDMyX3QgZmNfdG9wb2xvZ3k7CS8qIGxpbmsgdG9wb2xvZ3ksIGZyb20gTElOSyBJTklUICovCiAKQEAgLTI4OSw4ICsyOTQsOCBAQAogCXVpbnQzMl90IGNmZ19saW5rX3NwZWVkOwogCXVpbnQzMl90IGNmZ19jcl9kZWxheTsKIAl1aW50MzJfdCBjZmdfY3JfY291bnQ7CisJdWludDMyX3QgY2ZnX211bHRpX3Jpbmdfc3VwcG9ydDsKIAl1aW50MzJfdCBjZmdfZmRtaV9vbjsKLQl1aW50MzJfdCBjZmdfZmNwX2JpbmRfbWV0aG9kOwogCXVpbnQzMl90IGNmZ19kaXNjb3ZlcnlfdGhyZWFkczsKIAl1aW50MzJfdCBjZmdfbWF4X2x1bnM7CiAJdWludDMyX3QgY2ZnX3BvbGw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDU2MjVhOGMuLmI2MmE3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IENocmlzdG9waCBIZWxsd2lnICAgICAgICAgICAgICAqCkBAIC03OSw3ICs3OSw3IEBACiBscGZjX3NlcmlhbG51bV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGE7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIscGhiYS0+U2VyaWFsTnVtYmVyKTsKIH0KIApAQCAtODcsNyArODcsNyBAQAogbHBmY19tb2RlbGRlc2Nfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLHBoYmEtPk1vZGVsRGVzYyk7CiB9CiAKQEAgLTk1LDcgKzk1LDcgQEAKIGxwZmNfbW9kZWxuYW1lX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIixwaGJhLT5Nb2RlbE5hbWUpOwogfQogCkBAIC0xMDMsNyArMTAzLDcgQEAKIGxwZmNfcHJvZ3JhbXR5cGVfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLHBoYmEtPlByb2dyYW1UeXBlKTsKIH0KIApAQCAtMTExLDcgKzExMSw3IEBACiBscGZjX3BvcnRudW1fc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLHBoYmEtPlBvcnQpOwogfQogCkBAIC0xMTksNyArMTE5LDcgQEAKIGxwZmNfZndyZXZfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCWNoYXIgZndyZXZbMzJdOwogCWxwZmNfZGVjb2RlX2Zpcm13YXJlX3JldihwaGJhLCBmd3JldiwgMSk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsZndyZXYpOwpAQCAtMTMwLDcgKzEzMCw3IEBACiB7CiAJY2hhciBoZHdbOV07CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCWxwZmNfdnBkX3QgKnZwID0gJnBoYmEtPnZwZDsKIAlscGZjX2plZGVjX3RvX2FzY2lpKHZwLT5yZXYuYml1UmV2LCBoZHcpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBoZHcpOwpAQCAtMTM5LDE2ICsxMzksMTggQEAKIGxwZmNfb3B0aW9uX3JvbV92ZXJzaW9uX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcGhiYS0+T3B0aW9uUk9NVmVyc2lvbik7CiB9CiBzdGF0aWMgc3NpemVfdAogbHBmY19zdGF0ZV9zaG93KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGE7CiAJaW50IGxlbiA9IDA7CiAJc3dpdGNoIChwaGJhLT5oYmFfc3RhdGUpIHsKKwljYXNlIExQRkNfU1RBVEVfVU5LTk9XTjoKKwljYXNlIExQRkNfV0FSTV9TVEFSVDoKIAljYXNlIExQRkNfSU5JVF9TVEFSVDoKIAljYXNlIExQRkNfSU5JVF9NQlhfQ01EUzoKIAljYXNlIExQRkNfTElOS19ET1dOOgpAQCAtMTk0LDcgKzE5Niw3IEBACiBscGZjX251bV9kaXNjb3ZlcmVkX3BvcnRzX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgcGhiYS0+ZmNfbWFwX2NudCArCiAJCQkJCQkJcGhiYS0+ZmNfdW5tYXBfY250KTsKIH0KQEAgLTIwMyw3ICsyMDUsNyBAQAogc3RhdGljIGludAogbHBmY19pc3N1ZV9saXAoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKIHsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopIGhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgaG9zdC0+aG9zdGRhdGE7CiAJTFBGQ19NQk9YUV90ICpwbWJveHE7CiAJaW50IG1ieHN0YXR1cyA9IE1CWEVSUl9FUlJPUjsKIApAQCAtMjM1LDcgKzIzNyw3IEBACiBscGZjX25wb3J0X2V2dF9jbnRfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBwaGJhLT5ucG9ydF9ldmVudF9jbnQpOwogfQogCkBAIC0yNDMsNyArMjQ1LDcgQEAKIGxwZmNfYm9hcmRfb25saW5lX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YTsKIAogCWlmIChwaGJhLT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKQogCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIwXG4iKTsKQEAgLTI1Niw3ICsyNTgsNyBAQAogCQkJCQkJCQlzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBjb21wbGV0aW9uIG9ubGluZV9jb21wbDsKIAlpbnQgdmFsPTAsIHN0YXR1cz0wOwogCkBAIC0yNzksMTAgKzI4MSw2MiBAQAogfQogCiBzdGF0aWMgc3NpemVfdAorbHBmY19ib2FyZF9tb2RlX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YTsKKwljaGFyICAqIHN0YXRlOworCisJaWYgKHBoYmEtPmhiYV9zdGF0ZSA9PSBMUEZDX0hCQV9FUlJPUikKKwkJc3RhdGUgPSAiZXJyb3IiOworCWVsc2UgaWYgKHBoYmEtPmhiYV9zdGF0ZSA9PSBMUEZDX1dBUk1fU1RBUlQpCisJCXN0YXRlID0gIndhcm0gc3RhcnQiOworCWVsc2UgaWYgKHBoYmEtPmhiYV9zdGF0ZSA9PSBMUEZDX0lOSVRfU1RBUlQpCisJCXN0YXRlID0gIm9mZmxpbmUiOworCWVsc2UKKwkJc3RhdGUgPSAib25saW5lIjsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitscGZjX2JvYXJkX21vZGVfc3RvcmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNkZXYpOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBjb21wbGV0aW9uIG9ubGluZV9jb21wbDsKKwlpbnQgc3RhdHVzPTA7CisKKwlpbml0X2NvbXBsZXRpb24oJm9ubGluZV9jb21wbCk7CisKKwlpZihzdHJuY21wKGJ1ZiwgIm9ubGluZSIsIHNpemVvZigib25saW5lIikgLSAxKSA9PSAwKQorCQlscGZjX3dvcmtxX3Bvc3RfZXZlbnQocGhiYSwgJnN0YXR1cywgJm9ubGluZV9jb21wbCwKKwkJCQkgICAgICBMUEZDX0VWVF9PTkxJTkUpOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAib2ZmbGluZSIsIHNpemVvZigib2ZmbGluZSIpIC0gMSkgPT0gMCkKKwkJbHBmY193b3JrcV9wb3N0X2V2ZW50KHBoYmEsICZzdGF0dXMsICZvbmxpbmVfY29tcGwsCisJCQkJICAgICAgTFBGQ19FVlRfT0ZGTElORSk7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICJ3YXJtIiwgc2l6ZW9mKCJ3YXJtIikgLSAxKSA9PSAwKQorCQlscGZjX3dvcmtxX3Bvc3RfZXZlbnQocGhiYSwgJnN0YXR1cywgJm9ubGluZV9jb21wbCwKKwkJCQkgICAgICBMUEZDX0VWVF9XQVJNX1NUQVJUKTsKKyAJZWxzZSBpZiAoc3RybmNtcChidWYsICJlcnJvciIsIHNpemVvZigiZXJyb3IiKSAtIDEpID09IDApCisJCWxwZmNfd29ya3FfcG9zdF9ldmVudChwaGJhLCAmc3RhdHVzLCAmb25saW5lX2NvbXBsLAorCQkJCSAgICAgIExQRkNfRVZUX0tJTEwpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZvbmxpbmVfY29tcGwpOworCisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBzdHJsZW4oYnVmKTsKKwllbHNlCisJCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgc3NpemVfdAogbHBmY19wb2xsX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIiwgcGhiYS0+Y2ZnX3BvbGwpOwogfQpAQCAtMjkyLDcgKzM0Niw3IEBACiAJCXNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGE7CiAJdWludDMyX3QgY3JlZ192YWw7CiAJdWludDMyX3Qgb2xkX3ZhbDsKIAlpbnQgdmFsPTA7CkBAIC0zNDksNyArNDAzLDcgQEAKIGxwZmNfIyNhdHRyIyNfc2hvdyhzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpIFwKIHsgXAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTtcCi0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGFbMF07XAorCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhO1wKIAlpbnQgdmFsID0gMDtcCiAJdmFsID0gcGhiYS0+Y2ZnXyMjYXR0cjtcCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsXApAQCAtMzYxLDcgKzQxNSw3IEBACiBscGZjXyMjYXR0ciMjX3Nob3coc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKSBcCiB7IFwKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY2Rldik7XAotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdO1wKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YTtcCiAJaW50IHZhbCA9IDA7XAogCXZhbCA9IHBoYmEtPmNmZ18jI2F0dHI7XAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUjeFxuIixcCkBAIC00MDQsNyArNDU4LDcgQEAKIGxwZmNfIyNhdHRyIyNfc3RvcmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKIHsgXAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbGFzc190b19zaG9zdChjZGV2KTtcCi0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGFbMF07XAorCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhO1wKIAlpbnQgdmFsPTA7XAogCWlmICghaXNkaWdpdChidWZbMF0pKVwKIAkJcmV0dXJuIC1FSU5WQUw7XApAQCAtNDgwLDYgKzUzNCw4IEBACiAJCQkgTlVMTCk7CiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYm9hcmRfb25saW5lLCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCSBscGZjX2JvYXJkX29ubGluZV9zaG93LCBscGZjX2JvYXJkX29ubGluZV9zdG9yZSk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYm9hcmRfbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgbHBmY19ib2FyZF9tb2RlX3Nob3csIGxwZmNfYm9hcmRfbW9kZV9zdG9yZSk7CiAKIHN0YXRpYyBpbnQgbHBmY19wb2xsID0gMDsKIG1vZHVsZV9wYXJhbShscGZjX3BvbGwsIGludCwgMCk7CkBAIC01MjAsNiArNTc2LDE2IEBACiAJICAgICJNYXggbnVtYmVyIG9mIEZDUCBjb21tYW5kcyB3ZSBjYW4gcXVldWUgdG8gYSBzcGVjaWZpYyBMVU4iKTsKIAogLyoKKyMgaGJhX3F1ZXVlX2RlcHRoOiAgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG91dHN0YW5kaW5nCisjIGNvbW1hbmRzIHBlciBscGZjIEhCQS4gVmFsdWUgcmFuZ2UgaXMgWzMyLDgxOTJdLiBJZiB0aGlzIHBhcmFtZXRlcgorIyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGV4Y2hhbmdlcyBzdXBwb3J0ZWQgYnkgdGhlIEhCQSwKKyMgdGhlbiBtYXhpbXVtIG51bWJlciBvZiBleGNoYW5nZXMgc3VwcG9ydGVkIGJ5IHRoZSBIQkEgaXMgdXNlZCB0byBkZXRlcm1pbmUKKyMgdGhlIGhiYV9xdWV1ZV9kZXB0aC4KKyovCitMUEZDX0FUVFJfUihoYmFfcXVldWVfZGVwdGgsIDgxOTIsIDMyLCA4MTkyLAorCSAgICAiTWF4IG51bWJlciBvZiBGQ1AgY29tbWFuZHMgd2UgY2FuIHF1ZXVlIHRvIGEgbHBmYyBIQkEiKTsKKworLyoKICMgU29tZSBkaXNrIGRldmljZXMgaGF2ZSBhICJzZWxlY3QgSUQiIG9yICJzZWxlY3QgVGFyZ2V0IiBjYXBhYmlsaXR5LgogIyBGcm9tIGEgcHJvdG9jb2wgc3RhbmRwb2ludCAic2VsZWN0IElEIiB1c3VhbGx5IG1lYW5zIHNlbGVjdCB0aGUKICMgRmlicmUgY2hhbm5lbCAiQUxQQSIuICBJbiB0aGUgRkMtQUwgUHJvZmlsZSB0aGVyZSBpcyBhbiAiaW5mb3JtYXRpdmUKQEAgLTU1MCw2ICs2MTYsNyBAQAogLyoKICMgbHBmY190b3BvbG9neTogIGxpbmsgdG9wb2xvZ3kgZm9yIGluaXQgbGluawogIyAgICAgICAgICAgIDB4MCAgPSBhdHRlbXB0IGxvb3AgbW9kZSB0aGVuIHBvaW50LXRvLXBvaW50CisjICAgICAgICAgICAgMHgwMSA9IGludGVybmFsIGxvb3BiYWNrIG1vZGUKICMgICAgICAgICAgICAweDAyID0gYXR0ZW1wdCBwb2ludC10by1wb2ludCBtb2RlIG9ubHkKICMgICAgICAgICAgICAweDA0ID0gYXR0ZW1wdCBsb29wIG1vZGUgb25seQogIyAgICAgICAgICAgIDB4MDYgPSBhdHRlbXB0IHBvaW50LXRvLXBvaW50IG1vZGUgdGhlbiBsb29wCkBAIC01NTcsNyArNjI0LDcgQEAKICMgU2V0IGxvb3AgbW9kZSBpZiB5b3Ugd2FudCB0byBydW4gYXMgYW4gTkxfUG9ydC4gVmFsdWUgcmFuZ2UgaXMgWzAsMHg2XS4KICMgRGVmYXVsdCB2YWx1ZSBpcyAwLgogKi8KLUxQRkNfQVRUUl9SKHRvcG9sb2d5LCAwLCAwLCA2LCAiU2VsZWN0IEZpYnJlIENoYW5uZWwgdG9wb2xvZ3kiKTsKK0xQRkNfQVRUUl9SVyh0b3BvbG9neSwgMCwgMCwgNiwgIlNlbGVjdCBGaWJyZSBDaGFubmVsIHRvcG9sb2d5Iik7CiAKIC8qCiAjIGxwZmNfbGlua19zcGVlZDogTGluayBzcGVlZCBzZWxlY3Rpb24gZm9yIGluaXRpYWxpemluZyB0aGUgRmlicmUgQ2hhbm5lbApAQCAtNTk3LDEzICs2NjQsMjEgQEAKICMgaXMgMC4gRGVmYXVsdCB2YWx1ZSBvZiBjcl9jb3VudCBpcyAxLiBUaGUgY3JfY291bnQgZmVhdHVyZSBpcyBkaXNhYmxlZCBpZgogIyBjcl9kZWxheSBpcyBzZXQgdG8gMC4KICovCi1MUEZDX0FUVFJfUlcoY3JfZGVsYXksIDAsIDAsIDYzLCAiQSBjb3VudCBvZiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggYW4iCitMUEZDX0FUVFJfUlcoY3JfZGVsYXksIDAsIDAsIDYzLCAiQSBjb3VudCBvZiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggYW4gIgogCQkiaW50ZXJydXB0IHJlc3BvbnNlIGlzIGdlbmVyYXRlZCIpOwogCi1MUEZDX0FUVFJfUlcoY3JfY291bnQsIDEsIDEsIDI1NSwgIkEgY291bnQgb2YgSS9PIGNvbXBsZXRpb25zIGFmdGVyIHdoaWNoIGFuIgorTFBGQ19BVFRSX1JXKGNyX2NvdW50LCAxLCAxLCAyNTUsICJBIGNvdW50IG9mIEkvTyBjb21wbGV0aW9ucyBhZnRlciB3aGljaCBhbiAiCiAJCSJpbnRlcnJ1cHQgcmVzcG9uc2UgaXMgZ2VuZXJhdGVkIik7CiAKIC8qCisjIGxwZmNfbXVsdGlfcmluZ19zdXBwb3J0OiAgRGV0ZXJtaW5lcyBob3cgbWFueSByaW5ncyB0byBzcHJlYWQgYXZhaWxhYmxlCisjIGNtZC9yc3AgSU9DQiBlbnRyaWVzIGFjcm9zcy4KKyMgVmFsdWUgcmFuZ2UgaXMgWzEsMl0uIERlZmF1bHQgdmFsdWUgaXMgMS4KKyovCitMUEZDX0FUVFJfUihtdWx0aV9yaW5nX3N1cHBvcnQsIDEsIDEsIDIsICJEZXRlcm1pbmVzIG51bWJlciBvZiBwcmltYXJ5ICIKKwkJIlNMSSByaW5ncyB0byBzcHJlYWQgSU9DQiBlbnRyaWVzIGFjcm9zcyIpOworCisvKgogIyBscGZjX2ZkbWlfb246IGNvbnRyb2xzIEZETUkgc3VwcG9ydC4KICMgICAgICAgMCA9IG5vIEZETUkgc3VwcG9ydAogIyAgICAgICAxID0gc3VwcG9ydCBGRE1JIHdpdGhvdXQgYXR0cmlidXRlIG9mIGhvc3RuYW1lCkBAIC02MTYsNyArNjkxLDcgQEAKICMgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBFTFMgY21kcyB3ZSBjYW4gaGF2ZSBvdXRzdGFuZGluZyAoZm9yCiAjIGRpc2NvdmVyeSkuIFZhbHVlIHJhbmdlIGlzIFsxLDY0XS4gRGVmYXVsdCB2YWx1ZSA9IDMyLgogKi8KLUxQRkNfQVRUUihkaXNjb3ZlcnlfdGhyZWFkcywgMzIsIDEsIDY0LCAiTWF4aW11bSBudW1iZXIgb2YgRUxTIGNvbW1hbmRzIgorTFBGQ19BVFRSKGRpc2NvdmVyeV90aHJlYWRzLCAzMiwgMSwgNjQsICJNYXhpbXVtIG51bWJlciBvZiBFTFMgY29tbWFuZHMgIgogCQkgImR1cmluZyBkaXNjb3ZlcnkiKTsKIAogLyoKQEAgLTY0OSw2ICs3MjQsNyBAQAogCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2RydnJfdmVyc2lvbiwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19sb2dfdmVyYm9zZSwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19sdW5fcXVldWVfZGVwdGgsCisJJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfaGJhX3F1ZXVlX2RlcHRoLAogCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX25vZGV2X3RtbywKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19mY3BfY2xhc3MsCiAJJmNsYXNzX2RldmljZV9hdHRyX2xwZmNfdXNlX2FkaXNjLApAQCAtNjU4LDExICs3MzQsMTMgQEAKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19saW5rX3NwZWVkLAogCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2NyX2RlbGF5LAogCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX2NyX2NvdW50LAorCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX211bHRpX3Jpbmdfc3VwcG9ydCwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19mZG1pX29uLAogCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX21heF9sdW5zLAogCSZjbGFzc19kZXZpY2VfYXR0cl9ucG9ydF9ldnRfY250LAogCSZjbGFzc19kZXZpY2VfYXR0cl9tYW5hZ2VtZW50X3ZlcnNpb24sCiAJJmNsYXNzX2RldmljZV9hdHRyX2JvYXJkX29ubGluZSwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYm9hcmRfbW9kZSwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbHBmY19wb2xsLAogCSZjbGFzc19kZXZpY2VfYXR0cl9scGZjX3BvbGxfdG1vLAogCU5VTEwsCkBAIC02NzQsNyArNzUyLDcgQEAKIAlzaXplX3QgYnVmX29mZjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY29udGFpbmVyX29mKGtvYmosCiAJCQkJCSAgICAgc3RydWN0IGNsYXNzX2RldmljZSwga29iaikpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCiAJaWYgKChvZmYgKyBjb3VudCkgPiBGRl9SRUdfQVJFQV9TSVpFKQogCQlyZXR1cm4gLUVSQU5HRTsKQEAgLTcwNyw3ICs3ODUsNyBAQAogCXVpbnQzMl90ICogdG1wX3B0cjsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gY2xhc3NfdG9fc2hvc3QoY29udGFpbmVyX29mKGtvYmosCiAJCQkJCSAgICAgc3RydWN0IGNsYXNzX2RldmljZSwga29iaikpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKWhvc3QtPmhvc3RkYXRhOwogCiAJaWYgKG9mZiA+IEZGX1JFR19BUkVBX1NJWkUpCiAJCXJldHVybiAtRVJBTkdFOwpAQCAtNzYyLDcgKzg0MCw3IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqIGhvc3QgPQogCQljbGFzc190b19zaG9zdChjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGNsYXNzX2RldmljZSwga29iaikpOwotCXN0cnVjdCBscGZjX2hiYSAqIHBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNNYm94cSAqIG1ib3ggPSBOVUxMOwogCiAJaWYgKChjb3VudCArIG9mZikgPiBNQUlMQk9YX0NNRF9TSVpFKQpAQCAtNzc4LDcgKzg1Niw3IEBACiAJCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwogCQlpZiAoIW1ib3gpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQorCQltZW1zZXQobWJveCwgMCwgc2l6ZW9mIChMUEZDX01CT1hRX3QpKTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CkBAIC04MTUsNyArODkzLDcgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0KIAkJY2xhc3NfdG9fc2hvc3QoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBjbGFzc19kZXZpY2UsCiAJCQkJCSAgICBrb2JqKSk7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopaG9zdC0+aG9zdGRhdGE7CiAJaW50IHJjOwogCiAJaWYgKG9mZiA+IHNpemVvZihNQUlMQk9YX3QpKQpAQCAtODcyLDggKzk1MCwxMSBAQAogCQljYXNlIE1CWF9EVU1QX01FTU9SWToKIAkJY2FzZSBNQlhfRE9XTl9MT0FEOgogCQljYXNlIE1CWF9VUERBVEVfQ0ZHOgorCQljYXNlIE1CWF9LSUxMX0JPQVJEOgogCQljYXNlIE1CWF9MT0FEX0FSRUE6CiAJCWNhc2UgTUJYX0xPQURfRVhQX1JPTToKKwkJY2FzZSBNQlhfQkVBQ09OOgorCQljYXNlIE1CWF9ERUxfTERfRU5UUlk6CiAJCQlicmVhazsKIAkJY2FzZSBNQlhfUkVBRF9TUEFSTTY0OgogCQljYXNlIE1CWF9SRUFEX0xBOgpAQCAtOTkwLDcgKzEwNzEsNyBAQAogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKIHsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopc2hvc3QtPmhvc3RkYXRhOwogCS8qIG5vdGU6IGZjX215RElEIGFscmVhZHkgaW4gY3B1IGVuZGlhbm5lc3MgKi8KIAlmY19ob3N0X3BvcnRfaWQoc2hvc3QpID0gcGhiYS0+ZmNfbXlESUQ7CiB9CkBAIC05OTgsNyArMTA3OSw3IEBACiBzdGF0aWMgdm9pZAogbHBmY19nZXRfaG9zdF9wb3J0X3R5cGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSopc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKXNob3N0LT5ob3N0ZGF0YTsKIAogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAKQEAgLTEwMjMsNyArMTEwNCw3IEBACiBzdGF0aWMgdm9pZAogbHBmY19nZXRfaG9zdF9wb3J0X3N0YXRlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKXNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilzaG9zdC0+aG9zdGRhdGE7CiAKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCkBAIC0xMDMxLDYgKzExMTIsOCBAQAogCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gRkNfUE9SVFNUQVRFX09GRkxJTkU7CiAJZWxzZSB7CiAJCXN3aXRjaCAocGhiYS0+aGJhX3N0YXRlKSB7CisJCWNhc2UgTFBGQ19TVEFURV9VTktOT1dOOgorCQljYXNlIExQRkNfV0FSTV9TVEFSVDoKIAkJY2FzZSBMUEZDX0lOSVRfU1RBUlQ6CiAJCWNhc2UgTFBGQ19JTklUX01CWF9DTURTOgogCQljYXNlIExQRkNfTElOS19ET1dOOgpAQCAtMTA2NCw3ICsxMTQ3LDcgQEAKIHN0YXRpYyB2b2lkCiBscGZjX2dldF9ob3N0X3NwZWVkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKXNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilzaG9zdC0+aG9zdGRhdGE7CiAKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCkBAIC0xMDkxLDcgKzExNzQsNyBAQAogc3RhdGljIHZvaWQKIGxwZmNfZ2V0X2hvc3RfZmFicmljX25hbWUgKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEqKXNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhKilzaG9zdC0+aG9zdGRhdGE7CiAJdTY0IG5vZGVfbmFtZTsKIAogCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CkBAIC0xMTEzLDcgKzExOTYsNyBAQAogc3RhdGljIHN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKgogbHBmY19nZXRfc3RhdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCiB7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKXNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CiAJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqaHMgPSAmcGhiYS0+bGlua19zdGF0czsKIAlMUEZDX01CT1hRX3QgKnBtYm94cTsKQEAgLTEyMDMsNyArMTI4Niw3IEBACiBscGZjX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgc2hvc3QtPmhvc3RkYXRhOwogCXVpbnQzMl90IGRpZCA9IC0xOwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKIApAQCAtMTIyNCw3ICsxMzA3LDcgQEAKIGxwZmNfZ2V0X3N0YXJnZXRfbm9kZV9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopIHNob3N0LT5ob3N0ZGF0YTsKIAl1NjQgbm9kZV9uYW1lID0gMDsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IE5VTEw7CiAKQEAgLTEyNDUsNyArMTMyOCw3IEBACiBscGZjX2dldF9zdGFyZ2V0X3BvcnRfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3Qoc3RhcmdldC0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKSBzaG9zdC0+aG9zdGRhdGE7CiAJdTY0IHBvcnRfbmFtZSA9IDA7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOwogCkBAIC0xMzY2LDYgKzE0NDksNyBAQAogCWxwZmNfbG9nX3ZlcmJvc2VfaW5pdChwaGJhLCBscGZjX2xvZ192ZXJib3NlKTsKIAlscGZjX2NyX2RlbGF5X2luaXQocGhiYSwgbHBmY19jcl9kZWxheSk7CiAJbHBmY19jcl9jb3VudF9pbml0KHBoYmEsIGxwZmNfY3JfY291bnQpOworCWxwZmNfbXVsdGlfcmluZ19zdXBwb3J0X2luaXQocGhiYSwgbHBmY19tdWx0aV9yaW5nX3N1cHBvcnQpOwogCWxwZmNfbHVuX3F1ZXVlX2RlcHRoX2luaXQocGhiYSwgbHBmY19sdW5fcXVldWVfZGVwdGgpOwogCWxwZmNfZmNwX2NsYXNzX2luaXQocGhiYSwgbHBmY19mY3BfY2xhc3MpOwogCWxwZmNfdXNlX2FkaXNjX2luaXQocGhiYSwgbHBmY191c2VfYWRpc2MpOwpAQCAtMTQxMSw1ICsxNDk1LDkgQEAKIAlkZWZhdWx0OgogCQlwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoID0gTFBGQ19ERlRfSEJBX1FfREVQVEg7CiAJfQorCisJaWYgKHBoYmEtPmNmZ19oYmFfcXVldWVfZGVwdGggPiBscGZjX2hiYV9xdWV1ZV9kZXB0aCkKKwkJbHBmY19oYmFfcXVldWVfZGVwdGhfaW5pdChwaGJhLCBscGZjX2hiYV9xdWV1ZV9kZXB0aCk7CisKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCmluZGV4IGYxZTcwODkuLmZhZDYwN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0yNiw2ICsyNiw3IEBACiB2b2lkIGxwZmNfY29uZmlnX2xpbmsoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIGludCBscGZjX3JlYWRfc3BhcmFtKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfcmVhZF9jb25maWcoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKK3ZvaWQgbHBmY19yZWFkX2xua19zdGF0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfc2V0X3NsaW0oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogaW50IGxwZmNfcmVnX2xvZ2luKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwgdWludDhfdCAqLCBMUEZDX01CT1hRX3QgKiwKIAkJICAgdWludDMyX3QpOwpAQCAtNDIsOSArNDMsNiBAQAogdm9pZCBscGZjX21ieF9jbXBsX2ZhYnJpY19yZWdfbG9naW4oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19tYnhfY21wbF9uc19yZWdfbG9naW4oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqKTsKIHZvaWQgbHBmY19tYnhfY21wbF9mZG1pX3JlZ19sb2dpbihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwotaW50IGxwZmNfbmxwX3Bsb2dpKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKLWludCBscGZjX25scF9hZGlzYyhzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7Ci1pbnQgbHBmY19ubHBfdW5tYXBwZWQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICopOwogaW50IGxwZmNfbmxwX2xpc3Qoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosIGludCk7CiB2b2lkIGxwZmNfc2V0X2Rpc2N0bW8oc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfY2FuX2Rpc2N0bW8oc3RydWN0IGxwZmNfaGJhICopOwpAQCAtNTQsMTIgKzUyLDEwIEBACiBpbnQgbHBmY19ubHBfcmVtb3ZlKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19ubHBfaW5pdChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwgdWludDMyX3QpOwogc3RydWN0IGxwZmNfbm9kZWxpc3QgKmxwZmNfc2V0dXBfZGlzY19ub2RlKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCk7Ci1zdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbHBmY19zZXR1cF9yc2NuX25vZGUoc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19kaXNjX2xpc3RfbG9vcG1hcChzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfZGlzY19zdGFydChzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfZGlzY19mbHVzaF9saXN0KHN0cnVjdCBscGZjX2hiYSAqKTsKIHZvaWQgbHBmY19kaXNjX3RpbWVvdXQodW5zaWduZWQgbG9uZyk7Ci12b2lkIGxwZmNfc2Nhbl90aW1lb3V0KHVuc2lnbmVkIGxvbmcpOwogCiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbHBmY19maW5kbm9kZV9ycGkoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdWludDE2X3QgcnBpKTsKIApAQCAtNjgsMTkgKzY0LDEzIEBACiBpbnQgbHBmY19kaXNjX3N0YXRlX21hY2hpbmUoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosIHZvaWQgKiwKIAkJCSAgICB1aW50MzJfdCk7CiAKLXVpbnQzMl90IGxwZmNfY21wbF9wcmxpX3JlZ2xvZ2luX2lzc3VlKHN0cnVjdCBscGZjX2hiYSAqLAotCQkJCSAgICAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLCB2b2lkICosCi0JCQkJICAgICAgIHVpbnQzMl90KTsKLXVpbnQzMl90IGxwZmNfY21wbF9wbG9naV9wcmxpX2lzc3VlKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLAotCQkJCSAgICB2b2lkICosIHVpbnQzMl90KTsKLQogaW50IGxwZmNfY2hlY2tfc3Bhcm0oc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosCiAJCSAgICAgc3RydWN0IHNlcnZfcGFybSAqLCB1aW50MzJfdCk7CiBpbnQgbHBmY19lbHNfYWJvcnQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwKIAkJCWludCk7CiBpbnQgbHBmY19lbHNfYWJvcnRfZmxvZ2koc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfaW5pdGlhbF9mbG9naShzdHJ1Y3QgbHBmY19oYmEgKik7Ci1pbnQgbHBmY19pc3N1ZV9lbHNfcGxvZ2koc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosIHVpbnQ4X3QpOworaW50IGxwZmNfaXNzdWVfZWxzX3Bsb2dpKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwgdWludDhfdCk7CiBpbnQgbHBmY19pc3N1ZV9lbHNfcHJsaShzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwgdWludDhfdCk7CiBpbnQgbHBmY19pc3N1ZV9lbHNfYWRpc2Moc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosIHVpbnQ4X3QpOwogaW50IGxwZmNfaXNzdWVfZWxzX2xvZ28oc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX25vZGVsaXN0ICosIHVpbnQ4X3QpOwpAQCAtOTQsNiArODQsNyBAQAogCQkJICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiBpbnQgbHBmY19lbHNfcnNwX3BybGlfYWNjKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19pb2NicSAqLAogCQkJICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKK3ZvaWQgbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKIHZvaWQgbHBmY19lbHNfcmV0cnlfZGVsYXkodW5zaWduZWQgbG9uZyk7CiB2b2lkIGxwZmNfZWxzX3JldHJ5X2RlbGF5X2hhbmRsZXIoc3RydWN0IGxwZmNfbm9kZWxpc3QgKik7CiB2b2lkIGxwZmNfZWxzX3Vuc29sX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLApAQCAtMTE3LDE4ICsxMDgsMTUgQEAKIGludCBscGZjX2NvbmZpZ19wb3J0X3ByZXAoc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfY29uZmlnX3BvcnRfcG9zdChzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19oYmFfZG93bl9wcmVwKHN0cnVjdCBscGZjX2hiYSAqKTsKK2ludCBscGZjX2hiYV9kb3duX3Bvc3Qoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX2hiYV9pbml0KHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCAqKTsKIGludCBscGZjX3Bvc3RfYnVmZmVyKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqLCBpbnQsIGludCk7CiB2b2lkIGxwZmNfZGVjb2RlX2Zpcm13YXJlX3JldihzdHJ1Y3QgbHBmY19oYmEgKiwgY2hhciAqLCBpbnQpOwotdWludDhfdCAqbHBmY19nZXRfbHBmY2hiYV9pbmZvKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50OF90ICopOwotaW50IGxwZmNfZmNwX2Fib3J0KHN0cnVjdCBscGZjX2hiYSAqLCBpbnQsIGludCwgaW50KTsKIGludCBscGZjX29ubGluZShzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19vZmZsaW5lKHN0cnVjdCBscGZjX2hiYSAqKTsKIAotCiBpbnQgbHBmY19zbGlfc2V0dXAoc3RydWN0IGxwZmNfaGJhICopOwogaW50IGxwZmNfc2xpX3F1ZXVlX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqKTsKLXZvaWQgbHBmY19zbGltX2FjY2VzcyhzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIHZvaWQgbHBmY19oYW5kbGVfZXJhdHQoc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX2hhbmRsZV9sYXR0KHN0cnVjdCBscGZjX2hiYSAqKTsKQEAgLTEzNyw2ICsxMjUsNyBAQAogdm9pZCBscGZjX3JlYWRfcmV2KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiB2b2lkIGxwZmNfY29uZmlnX3Jpbmcoc3RydWN0IGxwZmNfaGJhICosIGludCwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX2NvbmZpZ19wb3J0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Cit2b2lkIGxwZmNfa2lsbF9ib2FyZChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX21ib3hfcHV0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiBMUEZDX01CT1hRX3QgKmxwZmNfbWJveF9nZXQoc3RydWN0IGxwZmNfaGJhICopOwogCkBAIC0xNDksNiArMTM4LDEyIEBACiBzdHJ1Y3QgbHBmY19pb2NicSAqIGxwZmNfc2xpX2dldF9pb2NicShzdHJ1Y3QgbHBmY19oYmEgKik7CiB2b2lkIGxwZmNfc2xpX3JlbGVhc2VfaW9jYnEoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBpb2NiKTsKIHVpbnQxNl90IGxwZmNfc2xpX25leHRfaW90YWcoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBpb2NiKTsKKwordm9pZCBscGZjX3Jlc2V0X2JhcnJpZXIoc3RydWN0IGxwZmNfaGJhICogcGhiYSk7CitpbnQgbHBmY19zbGlfYnJkcmVhZHkoc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90KTsKK2ludCBscGZjX3NsaV9icmRraWxsKHN0cnVjdCBscGZjX2hiYSAqKTsKK2ludCBscGZjX3NsaV9icmRyZXNldChzdHJ1Y3QgbHBmY19oYmEgKik7CitpbnQgbHBmY19zbGlfYnJkcmVzdGFydChzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfaGJhX3NldHVwKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9oYmFfZG93bihzdHJ1Y3QgbHBmY19oYmEgKik7CiBpbnQgbHBmY19zbGlfaXNzdWVfbWJveChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQzMl90KTsKQEAgLTE3NCwxMiArMTY5LDEwIEBACiAKIHZvaWQgbHBmY19tYm94X3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CiB2b2lkIGxwZmNfbWJveF90aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfaGJhICopOwotdm9pZCBscGZjX21hcF9mY3BfY21uZF90b19icGwoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3Njc2lfYnVmICopOwotdm9pZCBscGZjX2ZyZWVfc2NzaV9jbWQoc3RydWN0IGxwZmNfc2NzaV9idWYgKik7Ci11aW50MzJfdCBscGZjX29zX3RpbWVvdXRfdHJhbnNmb3JtKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCk7CiAKLXN0cnVjdCBscGZjX25vZGVsaXN0ICpscGZjX2ZpbmRub2RlX2RpZChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB1aW50MzJfdCBvcmRlciwKLQkJCQkJdWludDMyX3QgZGlkKTsKK3N0cnVjdCBscGZjX25vZGVsaXN0ICpscGZjX2ZpbmRub2RlX2RpZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKK3N0cnVjdCBscGZjX25vZGVsaXN0ICpscGZjX2ZpbmRub2RlX3d3cG4oc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90LAorCQkJCQlzdHJ1Y3QgbHBmY19uYW1lICopOwogCiBpbnQgbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIExQRkNfTUJPWFFfdCAqIHBtYm94cSwKIAkJCSB1aW50MzJfdCB0aW1lb3V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwppbmRleCA3ZjQyN2Y5Li5iNjVlZTU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMjYwLDggKzI2MCwxMCBAQAogCWljbWQtPnVuLmdlbnJlcTY0Lnc1Lmhjc3cuUmN0bCA9IEZDX1VOU09MX0NUTDsKIAlpY21kLT51bi5nZW5yZXE2NC53NS5oY3N3LlR5cGUgPSBGQ19DT01NT05fVFJBTlNQT1JUX1VMUDsKIAotCWlmICghdG1vKQotCQl0bW8gPSAoMiAqIHBoYmEtPmZjX3JhdG92KSArIDE7CisJaWYgKCF0bW8pIHsKKwkJIC8qIEZDIHNwZWMgc3RhdGVzIHdlIG5lZWQgMyAqIHJhdG92IGZvciBDVCByZXF1ZXN0cyAqLworCQl0bW8gPSAoMyAqIHBoYmEtPmZjX3JhdG92KTsKKwl9CiAJaWNtZC0+dWxwVGltZW91dCA9IHRtbzsKIAlpY21kLT51bHBCZGVDb3VudCA9IDE7CiAJaWNtZC0+dWxwTGUgPSAxOwpAQCAtMzIxLDYgKzMyMyw3IEBACiAJc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKlJlc3BvbnNlID0KIAkJKHN0cnVjdCBscGZjX3NsaV9jdF9yZXF1ZXN0ICopIG1wLT52aXJ0OwogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmV4dF9uZGxwOwogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbWxhc3QsICpuZXh0X21wOwogCXVpbnQzMl90ICpjdHB0ciA9ICh1aW50MzJfdCAqKSAmIFJlc3BvbnNlLT51bi5naWQuUG9ydFR5cGU7CiAJdWludDMyX3QgRGlkOwpAQCAtMzg5LDggKzM5MiwzNiBAQAogbnNvdXQxOgogCWxpc3RfZGVsKCZoZWFkKTsKIAotCS8qIEhlcmUgd2UgYXJlIGZpbmlzaGVkIGluIHRoZSBjYXNlIFJTQ04gKi8KKwkvKgorIAkgKiBUaGUgZHJpdmVyIGhhcyBjeWNsZWQgdGhyb3VnaCBhbGwgTnBvcnRzIGluIHRoZSBSU0NOIHBheWxvYWQuCisgCSAqIENvbXBsZXRlIHRoZSBoYW5kbGluZyBieSBjbGVhbmluZyB1cCBhbmQgbWFya2luZyB0aGUKKyAJICogY3VycmVudCBkcml2ZXIgc3RhdGUuCisgCSAqLwogCWlmIChwaGJhLT5oYmFfc3RhdGUgPT0gTFBGQ19IQkFfUkVBRFkpIHsKKworCQkvKgorCQkgKiBTd2l0Y2ggcG9ydHMgdGhhdCBjb25uZWN0IGEgbG9vcCBvZiBtdWx0aXBsZSB0YXJnZXRzIG5lZWQKKwkJICogc3BlY2lhbCBjb25zaWRlcmF0aW9uLiAgVGhlIGRyaXZlciB3YW50cyB0byB1bnJlZ2lzdGVyIHRoZQorCQkgKiBycGkgb25seSBvbiB0aGUgdGFyZ2V0IHRoYXQgd2FzIHB1bGxlZCBmcm9tIHRoZSBsb29wLiAgT24KKwkJICogUlNDTiwgdGhlIGRyaXZlciB3YW50cyB0byByZWRpc2NvdmVyIGFuIE5Qb3J0IG9ubHkgaWYgdGhlCisJCSAqIGRyaXZlciBmbGFnZ2VkIGl0IGFzIE5MUF9OUFJfMkJfRElTQy4gIFByb3ZpZGVkIGFkaXNjIGlzCisJCSAqIG5vdCBlbmFibGVkIGFuZCB0aGUgTlBvcnQgaXMgbm90IGNhcGFibGUgb2YgcmV0cmFuc21pc3Npb25zCisJCSAqIChGQyBUYXBlKSBwcmV2ZW50IHRpbWluZyByYWNlcyB3aXRoIHRoZSBzY3NpIGVycm9yIGhhbmRsZXIgYnkKKwkJICogdW5yZWdpc3RlcmluZyB0aGUgTnBvcnQncyBSUEkuICBUaGlzIGFjdGlvbiBjYXVzZXMgYWxsCisJCSAqIG91dHN0YW5kaW5nIElPIHRvIGZsdXNoIGJhY2sgdG8gdGhlIG1pZGxheWVyLgorCQkgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgJnBoYmEtPmZjX25wcl9saXN0LAorCQkJCQkgbmxwX2xpc3RwKSB7CisJCQlpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgJiYKKwkJCSAgICAobHBmY19yc2NuX3BheWxvYWRfY2hlY2socGhiYSwgbmRscC0+bmxwX0RJRCkpKSB7CisJCQkJaWYgKChwaGJhLT5jZmdfdXNlX2FkaXNjID09IDApICYmCisJCQkJICAgICEobmRscC0+bmxwX2ZjcF9pbmZvICYKKwkJCQkgICAgICBOTFBfRkNQXzJfREVWSUNFKSkgeworCQkJCQlscGZjX3VucmVnX3JwaShwaGJhLCBuZGxwKTsKKwkJCQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfQURJU0M7CisJCQkJfQorCQkJfQorCQl9CiAJCWxwZmNfZWxzX2ZsdXNoX3JzY24ocGhiYSk7CiAJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJcGhiYS0+ZmNfZmxhZyB8PSBGQ19SU0NOX01PREU7IC8qIHdlIGFyZSBzdGlsbCBpbiBSU0NOIG1vZGUgKi8KQEAgLTQ0OSw2ICs0ODAsMTEgQEAKIAkJQ1Ryc3AgPSAoc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKikgb3V0cC0+dmlydDsKIAkJaWYgKENUcnNwLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3AgPT0KIAkJICAgIGJlMTZfdG9fY3B1KFNMSV9DVF9SRVNQT05TRV9GU19BQ0MpKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRElTQ09WRVJZLAorCQkJCQkiJWQ6MDIzOSBOYW1lU2VydmVyIFJzcCAiCisJCQkJCSJEYXRhOiB4JXhcbiIsCisJCQkJCXBoYmEtPmJyZF9ubywKKwkJCQkJcGhiYS0+ZmNfZmxhZyk7CiAJCQlscGZjX25zX3JzcChwaGJhLCBvdXRwLAogCQkJCSAgICAodWludDMyX3QpIChpcnNwLT51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZSkpOwogCQl9IGVsc2UgaWYgKENUcnNwLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3AgPT0KQEAgLTk3OCwxOSArMTAxNCwxOSBAQAogCQkJYWUgPSAoQVRUUklCVVRFX0VOVFJZICopICgodWludDhfdCAqKSBwYWIgKyBzaXplKTsKIAkJCWFlLT5hZC5iaXRzLkF0dHJUeXBlID0gYmUxNl90b19jcHUoU1VQUE9SVEVEX1NQRUVEKTsKIAkJCWFlLT5hZC5iaXRzLkF0dHJMZW4gPSBiZTE2X3RvX2NwdShGT1VSQllURVMgKyA0KTsKLQkJCWlmIChGQ19KRURFQ19JRCh2cC0+cmV2LmJpdVJldikgPT0gVklQRVJfSkVERUNfSUQpCisKKwkJCWFlLT51bi5TdXBwb3J0U3BlZWQgPSAwOworCQkJaWYgKHBoYmEtPmxtdCAmIExNVF8xMEdiKQogCQkJCWFlLT51bi5TdXBwb3J0U3BlZWQgPSBIQkFfUE9SVFNQRUVEXzEwR0JJVDsKLQkJCWVsc2UgaWYgKEZDX0pFREVDX0lEKHZwLT5yZXYuYml1UmV2KSA9PSBIRUxJT1NfSkVERUNfSUQpCi0JCQkJYWUtPnVuLlN1cHBvcnRTcGVlZCA9IEhCQV9QT1JUU1BFRURfNEdCSVQ7Ci0JCQllbHNlIGlmICgoRkNfSkVERUNfSUQodnAtPnJldi5iaXVSZXYpID09Ci0JCQkJICBDRU5UQVVSXzJHX0pFREVDX0lEKQotCQkJCSB8fCAoRkNfSkVERUNfSUQodnAtPnJldi5iaXVSZXYpID09Ci0JCQkJICAgICBQRUdBU1VTX0pFREVDX0lEKQotCQkJCSB8fCAoRkNfSkVERUNfSUQodnAtPnJldi5iaXVSZXYpID09Ci0JCQkJICAgICBUSE9SX0pFREVDX0lEKSkKLQkJCQlhZS0+dW4uU3VwcG9ydFNwZWVkID0gSEJBX1BPUlRTUEVFRF8yR0JJVDsKLQkJCWVsc2UKLQkJCQlhZS0+dW4uU3VwcG9ydFNwZWVkID0gSEJBX1BPUlRTUEVFRF8xR0JJVDsKKwkJCWlmIChwaGJhLT5sbXQgJiBMTVRfOEdiKQorCQkJCWFlLT51bi5TdXBwb3J0U3BlZWQgfD0gSEJBX1BPUlRTUEVFRF84R0JJVDsKKwkJCWlmIChwaGJhLT5sbXQgJiBMTVRfNEdiKQorCQkJCWFlLT51bi5TdXBwb3J0U3BlZWQgfD0gSEJBX1BPUlRTUEVFRF80R0JJVDsKKwkJCWlmIChwaGJhLT5sbXQgJiBMTVRfMkdiKQorCQkJCWFlLT51bi5TdXBwb3J0U3BlZWQgfD0gSEJBX1BPUlRTUEVFRF8yR0JJVDsKKwkJCWlmIChwaGJhLT5sbXQgJiBMTVRfMUdiKQorCQkJCWFlLT51bi5TdXBwb3J0U3BlZWQgfD0gSEJBX1BPUlRTUEVFRF8xR0JJVDsKKwogCQkJcGFiLT5hYi5FbnRyeUNudCsrOwogCQkJc2l6ZSArPSBGT1VSQllURVMgKyA0OwogCkBAIC0xMTMwLDExICsxMTY2LDYgQEAKIHsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKIAotCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlpZiAoIShwaGJhLT53b3JrX2hiYV9ldmVudHMgJiBXT1JLRVJfRkRNSV9UTU8pKSB7Ci0JCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQlyZXR1cm47Ci0JfQogCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgRkRNSV9ESUQpOwogCWlmIChuZGxwKSB7CiAJCWlmIChzeXN0ZW1fdXRzbmFtZS5ub2RlbmFtZVswXSAhPSAnXDAnKSB7CkBAIC0xMTQzLDcgKzExNzQsNiBAQAogCQkJbW9kX3RpbWVyKCZwaGJhLT5mY19mZG1pdG1vLCBqaWZmaWVzICsgSFogKiA2MCk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Rpc2MuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCmluZGV4IGVkNmM4MTYuLjg5MzJiMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGlzYy5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0yOCwxOCArMjgsMjQgQEAKICAqIFRoaXMgaXMgdXNlZCBieSBGaWJyZSBDaGFubmVsIHByb3RvY29sIHRvIHN1cHBvcnQgRkNQLgogICovCiAKKy8qIHdvcmtlciB0aHJlYWQgZXZlbnRzICovCitlbnVtIGxwZmNfd29ya190eXBlIHsKKwlMUEZDX0VWVF9OT0RFVl9UTU8sCisJTFBGQ19FVlRfT05MSU5FLAorCUxQRkNfRVZUX09GRkxJTkUsCisJTFBGQ19FVlRfV0FSTV9TVEFSVCwKKwlMUEZDX0VWVF9LSUxMLAorCUxQRkNfRVZUX0VMU19SRVRSWSwKK307CisKIC8qIHN0cnVjdHVyZSB1c2VkIHRvIHF1ZXVlIGV2ZW50IHRvIHRoZSBkaXNjb3ZlcnkgdGFza2xldCAqLwogc3RydWN0IGxwZmNfd29ya19ldnQgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICBldnRfbGlzdHA7CiAJdm9pZCAgICAgICAgICAgICAgICAqIGV2dF9hcmcxOwogCXZvaWQgICAgICAgICAgICAgICAgKiBldnRfYXJnMjsKLQl1aW50MzJfdCAgICAgICAgICAgICAgZXZ0OworCWVudW0gbHBmY193b3JrX3R5cGUgICBldnQ7CiB9OwogCi0jZGVmaW5lIExQRkNfRVZUX05PREVWX1RNTwkweDEKLSNkZWZpbmUgTFBGQ19FVlRfT05MSU5FCQkweDIKLSNkZWZpbmUgTFBGQ19FVlRfT0ZGTElORQkweDMKLSNkZWZpbmUgTFBGQ19FVlRfRUxTX1JFVFJZCTB4NAogCiBzdHJ1Y3QgbHBmY19ub2RlbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBubHBfbGlzdHA7CkBAIC01Niw2ICs2Miw3IEBACiAKIAl1aW50MTZfdCAgICAgICAgbmxwX3JwaTsKIAl1aW50MTZfdCAgICAgICAgbmxwX3N0YXRlOwkJLyogc3RhdGUgdHJhbnNpdGlvbiBpbmRpY2F0b3IgKi8KKwl1aW50MTZfdCAgICAgICAgbmxwX3ByZXZfc3RhdGU7CQkvKiBzdGF0ZSB0cmFuc2l0aW9uIGluZGljYXRvciAqLwogCXVpbnQxNl90ICAgICAgICBubHBfeHJpOwkJLyogb3V0cHV0IGV4Y2hhbmdlIGlkIGZvciBSUEkgKi8KIAl1aW50MTZfdCAgICAgICAgbmxwX3NpZDsJCS8qIHNjc2kgaWQgKi8KICNkZWZpbmUgTkxQX05PX1NJRAkJMHhmZmZmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCAyMGYxYTA3Li40ODEzYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTkyLDE1ICs5MiwxNCBAQAogCQl9CiAJfQogCi0JcmV0dXJuICgxKTsKKwlyZXR1cm4gMTsKIAogfQogCiBzdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgotbHBmY19wcmVwX2Vsc19pb2NiKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCi0JCSAgIHVpbnQ4X3QgZXhwZWN0UnNwLAotCQkgICB1aW50MTZfdCBjbWRTaXplLAotCQkgICB1aW50OF90IHJldHJ5LCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHVpbnQzMl90IGVsc2NtZCkKK2xwZmNfcHJlcF9lbHNfaW9jYihzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB1aW50OF90IGV4cGVjdFJzcCwKKwkJICAgdWludDE2X3QgY21kU2l6ZSwgdWludDhfdCByZXRyeSwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLAorCQkgICB1aW50MzJfdCBkaWQsIHVpbnQzMl90IGVsc2NtZCkKIHsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmc7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmVsc2lvY2I7CkBAIC0xODEsNyArMTgwLDcgQEAKIAlpY21kLT51bi5lbHNyZXE2NC5iZGwuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRMOwogCWlmIChleHBlY3RSc3ApIHsKIAkJaWNtZC0+dW4uZWxzcmVxNjQuYmRsLmJkZVNpemUgPSAoMiAqIHNpemVvZiAoc3RydWN0IHVscF9iZGU2NCkpOwotCQlpY21kLT51bi5lbHNyZXE2NC5yZW1vdGVJRCA9IG5kbHAtPm5scF9ESUQ7CS8qIERJRCAqLworCQlpY21kLT51bi5lbHNyZXE2NC5yZW1vdGVJRCA9IGRpZDsJLyogRElEICovCiAJCWljbWQtPnVscENvbW1hbmQgPSBDTURfRUxTX1JFUVVFU1Q2NF9DUjsKIAl9IGVsc2UgewogCQlpY21kLT51bi5lbHNyZXE2NC5iZGwuYmRlU2l6ZSA9IHNpemVvZiAoc3RydWN0IHVscF9iZGU2NCk7CkBAIC0yMjUsNyArMjI0LDcgQEAKIAkJCQkiJWQ6MDExNiBYbWl0IEVMUyBjb21tYW5kIHgleCB0byByZW1vdGUgIgogCQkJCSJOUE9SVCB4JXggRGF0YTogeCV4IHgleFxuIiwKIAkJCQlwaGJhLT5icmRfbm8sIGVsc2NtZCwKLQkJCQluZGxwLT5ubHBfRElELCBpY21kLT51bHBJb1RhZywgcGhiYS0+aGJhX3N0YXRlKTsKKwkJCQlkaWQsIGljbWQtPnVscElvVGFnLCBwaGJhLT5oYmFfc3RhdGUpOwogCX0gZWxzZSB7CiAJCS8qIFhtaXQgRUxTIHJlc3BvbnNlIDxlbHNDbWQ+IHRvIHJlbW90ZSBOUE9SVCA8ZGlkPiAqLwogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLApAQCAtMjM1LDcgKzIzNCw3IEBACiAJCQkJbmRscC0+bmxwX0RJRCwgaWNtZC0+dWxwSW9UYWcsIGNtZFNpemUpOwogCX0KIAotCXJldHVybiAoZWxzaW9jYik7CisJcmV0dXJuIGVsc2lvY2I7CiB9CiAKIApAQCAtNDQ2LDkgKzQ0NSwxMCBAQAogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKIAkJCQlLRVJOX0lORk8sCiAJCQkJTE9HX0VMUywKLQkJCQkiJWQ6MDEwMCBGTE9HSSBmYWlsdXJlIERhdGE6IHgleCB4JXhcbiIsCisJCQkJIiVkOjAxMDAgRkxPR0kgZmFpbHVyZSBEYXRhOiB4JXggeCV4IHgleFxuIiwKIAkJCQlwaGJhLT5icmRfbm8sCi0JCQkJaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdKTsKKwkJCQlpcnNwLT51bHBTdGF0dXMsIGlyc3AtPnVuLnVscFdvcmRbNF0sCisJCQkJaXJzcC0+dWxwVGltZW91dCk7CiAJCWdvdG8gZmxvZ2lmYWlsOwogCX0KIApAQCAtNTE1LDEwICs1MTUsMTAgQEAKIAlwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKIAogCWNtZHNpemUgPSAoc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKHN0cnVjdCBzZXJ2X3Bhcm0pKTsKLQlpZiAoKGVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMSwgY21kc2l6ZSwgcmV0cnksCi0JCQkJCSAgbmRscCwgRUxTX0NNRF9GTE9HSSkpID09IDApIHsKLQkJcmV0dXJuICgxKTsKLQl9CisJZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAxLCBjbWRzaXplLCByZXRyeSwgbmRscCwKKwkJCQkJCSBuZGxwLT5ubHBfRElELCBFTFNfQ01EX0ZMT0dJKTsKKwlpZiAoIWVsc2lvY2IpCisJCXJldHVybiAxOwogCiAJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOwogCXBjbWQgPSAodWludDhfdCAqKSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKQEAgLTU1Miw5ICs1NTIsOSBAQAogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChyYyA9PSBJT0NCX0VSUk9SKSB7CiAJCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBlbHNpb2NiKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtNjExLDI5ICs2MTEsMjEgQEAKIHsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKIAotCS8qIEZpcnN0IGxvb2sgZm9yIEZhYnJpYyBuZGxwIG9uIHRoZSB1bm1hcHBlZCBsaXN0ICovCi0KLQlpZiAoKG5kbHAgPQotCSAgICAgbHBmY19maW5kbm9kZV9kaWQocGhiYSwgTkxQX1NFQVJDSF9VTk1BUFBFRCwKLQkJCSAgICAgICBGYWJyaWNfRElEKSkgPT0gMCkgeworCS8qIEZpcnN0IGxvb2sgZm9yIHRoZSBGYWJyaWMgbmRscCAqLworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgRmFicmljX0RJRCk7CisJaWYgKCFuZGxwKSB7CiAJCS8qIENhbm5vdCBmaW5kIGV4aXN0aW5nIEZhYnJpYyBuZGxwLCBzbyBhbGxvY2F0ZSBhIG5ldyBvbmUgKi8KLQkJaWYgKChuZGxwID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5ubHBfbWVtX3Bvb2wsIEdGUF9LRVJORUwpKQotCQkgICAgPT0gMCkgewotCQkJcmV0dXJuICgwKTsKLQkJfQorCQluZGxwID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5ubHBfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCQlpZiAoIW5kbHApCisJCQlyZXR1cm4gMDsKIAkJbHBmY19ubHBfaW5pdChwaGJhLCBuZGxwLCBGYWJyaWNfRElEKTsKLQl9Ci0JZWxzZSB7Ci0JCXBoYmEtPmZjX3VubWFwX2NudC0tOwotCQlsaXN0X2RlbCgmbmRscC0+bmxwX2xpc3RwKTsKLQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0xJU1RfTUFTSzsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJfSBlbHNlIHsKKwkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfSlVTVF9EUSk7CiAJfQogCWlmIChscGZjX2lzc3VlX2Vsc19mbG9naShwaGJhLCBuZGxwLCAwKSkgewogCQltZW1wb29sX2ZyZWUoIG5kbHAsIHBoYmEtPm5scF9tZW1fcG9vbCk7CiAJfQotCXJldHVybiAoMSk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC02NTksMzggKzY1MSw5MCBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIHN0cnVjdCBscGZjX25vZGVsaXN0ICoKK2xwZmNfcGxvZ2lfY29uZmlybV9ucG9ydChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqIGNtZGlvY2IsCisJCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHApCit7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5ld19uZGxwOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcGNtZCwgKnByc3A7CisJdWludDMyX3QgKmxwOworCXN0cnVjdCBzZXJ2X3Bhcm0gKnNwOworCXVpbnQ4X3QgbmFtZVtzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpXTsKKwl1aW50MzJfdCByYzsKKworCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2ItPmNvbnRleHQyOworCXByc3AgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIHBjbWQtPmxpc3QubmV4dDsKKwlscCA9ICh1aW50MzJfdCAqKSBwcnNwLT52aXJ0OworCXNwID0gKHN0cnVjdCBzZXJ2X3Bhcm0gKikgKCh1aW50OF90ICopIGxwICsgc2l6ZW9mICh1aW50MzJfdCkpOworCisJLyogTm93IHdlIHRvIGZpbmQgb3V0IGlmIHRoZSBOUG9ydCB3ZSBhcmUgbG9nZ2luZyBpbnRvLCBtYXRjaGVzIHRoZSBXV1BOCisJICogd2UgaGF2ZSBmb3IgdGhhdCBuZGxwLiBJZiBub3QsIHdlIGhhdmUgc29tZSB3b3JrIHRvIGRvLgorCSAqLworCW5ld19uZGxwID0gbHBmY19maW5kbm9kZV93d3BuKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCAmc3AtPnBvcnROYW1lKTsKKworCW1lbXNldChuYW1lLCAwLCBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpKTsKKwlyYyA9ICBtZW1jbXAoJm5kbHAtPm5scF9wb3J0bmFtZSwgbmFtZSwgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKwlpZiAoIXJjIHx8IChuZXdfbmRscCA9PSBuZGxwKSkgeworCQlyZXR1cm4gbmRscDsKKwl9CisKKwlpZiAoIW5ld19uZGxwKSB7CisJCW5ld19uZGxwID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5ubHBfbWVtX3Bvb2wsIEdGUF9BVE9NSUMpOworCQlpZiAoIW5ld19uZGxwKQorCQkJcmV0dXJuIG5kbHA7CisKKwkJbHBmY19ubHBfaW5pdChwaGJhLCBuZXdfbmRscCwgbmRscC0+bmxwX0RJRCk7CisJfQorCisJbHBmY191bnJlZ19ycGkocGhiYSwgbmV3X25kbHApOworCW5ld19uZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKKwluZXdfbmRscC0+bmxwX0RJRCA9IG5kbHAtPm5scF9ESUQ7CisJbmV3X25kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7CisJbHBmY19ubHBfbGlzdChwaGJhLCBuZXdfbmRscCwgTkxQX1BMT0dJX0xJU1QpOworCisJLyogTW92ZSB0aGlzIGJhY2sgdG8gTlBSIGxpc3QgKi8KKwlscGZjX3VucmVnX3JwaShwaGJhLCBuZGxwKTsKKwluZGxwLT5ubHBfRElEID0gMDsgLyogVHdvIG5kbHBzIGNhbm5vdCBoYXZlIHRoZSBzYW1lIGRpZCAqLworCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CisJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOworCisJcmV0dXJuIG5ld19uZGxwOworfQorCiBzdGF0aWMgdm9pZAogbHBmY19jbXBsX2Vsc19wbG9naShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqIGNtZGlvY2IsCiAJCSAgICBzdHJ1Y3QgbHBmY19pb2NicSAqIHJzcGlvY2IpCiB7CiAJSU9DQl90ICppcnNwOwotCXN0cnVjdCBscGZjX3NsaSAqcHNsaTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKIAlpbnQgZGlzYywgcmMsIGRpZCwgdHlwZTsKIAotCXBzbGkgPSAmcGhiYS0+c2xpOwogCiAJLyogd2UgcGFzcyBjbWRpb2NiIHRvIHN0YXRlIG1hY2hpbmUgd2hpY2ggbmVlZHMgcnNwaW9jYiBhcyB3ZWxsICovCiAJY21kaW9jYi0+Y29udGV4dF91bi5yc3BfaW9jYiA9IHJzcGlvY2I7CiAKIAlpcnNwID0gJnJzcGlvY2ItPmlvY2I7Ci0JbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKSBjbWRpb2NiLT5jb250ZXh0MTsKLQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9QTE9HSV9TTkQ7Ci0Jc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLAorCQkJCQkJaXJzcC0+dW4uZWxzcmVxNjQucmVtb3RlSUQpOworCWlmICghbmRscCkKKwkJZ290byBvdXQ7CiAKIAkvKiBTaW5jZSBuZGxwIGNhbiBiZSBmcmVlZCBpbiB0aGUgZGlzYyBzdGF0ZSBtYWNoaW5lLCBub3RlIGlmIHRoaXMgbm9kZQogCSAqIGlzIGJlaW5nIHVzZWQgZHVyaW5nIGRpc2NvdmVyeS4KIAkgKi8KIAlkaXNjID0gKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl8yQl9ESVNDKTsKKwlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlyYyAgID0gMDsKIAogCS8qIFBMT0dJIGNvbXBsZXRlcyB0byBOUG9ydCA8bmxwX0RJRD4gKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAogCQkJIiVkOjAxMDIgUExPR0kgY29tcGxldGVzIHRvIE5Qb3J0IHgleCAiCi0JCQkiRGF0YTogeCV4IHgleCB4JXggeCV4XG4iLAorCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXhcbiIsCiAJCQlwaGJhLT5icmRfbm8sIG5kbHAtPm5scF9ESUQsIGlyc3AtPnVscFN0YXR1cywKLQkJCWlyc3AtPnVuLnVscFdvcmRbNF0sIGRpc2MsIHBoYmEtPm51bV9kaXNjX25vZGVzKTsKKwkJCWlyc3AtPnVuLnVscFdvcmRbNF0sIGlyc3AtPnVscFRpbWVvdXQsIGRpc2MsCisJCQlwaGJhLT5udW1fZGlzY19ub2Rlcyk7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgbGluayB3ZW50IGRvd24gZHVyaW5nIGRpc2NvdmVyeSAqLwogCWlmIChscGZjX2Vsc19jaGtfbGF0dChwaGJhKSkgewpAQCAtNzIyLDQzICs3NjYsMjggQEAKIAkJICAgKChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9BQk9SVEVEKSB8fAogCQkgICAoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9MSU5LX0RPV04pIHx8CiAJCSAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9ET1dOKSkpIHsKLQkJCWRpc2MgPSAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpOwotCQl9Ci0JCWVsc2UgeworCQkJcmMgPSBOTFBfU1RFX0ZSRUVEX05PREU7CisJCX0gZWxzZSB7CiAJCQlyYyA9IGxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHBoYmEsIG5kbHAsIGNtZGlvY2IsCiAJCQkJCU5MUF9FVlRfQ01QTF9QTE9HSSk7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBHb29kIHN0YXR1cywgY2FsbCBzdGF0ZSBtYWNoaW5lICovCisJCW5kbHAgPSBscGZjX3Bsb2dpX2NvbmZpcm1fbnBvcnQocGhiYSwgY21kaW9jYiwgbmRscCk7CiAJCXJjID0gbHBmY19kaXNjX3N0YXRlX21hY2hpbmUocGhiYSwgbmRscCwgY21kaW9jYiwKIAkJCQkJTkxQX0VWVF9DTVBMX1BMT0dJKTsKIAl9CiAKLQlpZiAodHlwZSAmIE5MUF9GQUJSSUMpIHsKLQkJLyogSWYgd2UgY2Fubm90IGxvZ2luIHRvIE5hbWVzZXJ2ZXIsIGtpY2sgb2ZmIGRpc2NvdmVyeSBub3cgKi8KLQkJaWYgKChkaWQgPT0gTmFtZVNlcnZlcl9ESUQpICYmIChyYyA9PSBOTFBfU1RFX0ZSRUVEX05PREUpKSB7Ci0JCQlscGZjX2Rpc2Nfc3RhcnQocGhiYSk7Ci0JCX0KLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKGRpc2MgJiYgcGhiYS0+bnVtX2Rpc2Nfbm9kZXMpIHsKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBtb3JlIFBMT0dJcyB0byBiZSBzZW50ICovCiAJCWxwZmNfbW9yZV9wbG9naShwaGJhKTsKIAl9CiAKLQlpZiAocmMgIT0gTkxQX1NURV9GUkVFRF9OT0RFKSB7Ci0JCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JfQotCiAJaWYgKHBoYmEtPm51bV9kaXNjX25vZGVzID09IDApIHsKLQkJaWYoZGlzYykgewotCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfTkRJU0NfQUNUSVZFOwotCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCX0KKwkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQlwaGJhLT5mY19mbGFnICY9IH5GQ19ORElTQ19BQ1RJVkU7CisJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCiAJCWxwZmNfY2FuX2Rpc2N0bW8ocGhiYSk7CiAJCWlmIChwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSB7CiAJCQkvKiBDaGVjayB0byBzZWUgaWYgbW9yZSBSU0NOcyBjYW1lIGluIHdoaWxlIHdlIHdlcmUKQEAgLTc4MSw4ICs4MTAsNyBAQAogfQogCiBpbnQKLWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwKLQkJICAgICB1aW50OF90IHJldHJ5KQorbHBmY19pc3N1ZV9lbHNfcGxvZ2koc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdWludDMyX3QgZGlkLCB1aW50OF90IHJldHJ5KQogewogCXN0cnVjdCBzZXJ2X3Bhcm0gKnNwOwogCUlPQ0JfdCAqaWNtZDsKQEAgLTc5NiwxMCArODI0LDEwIEBACiAJcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0VMU19SSU5HXTsJLyogRUxTIHJpbmcgKi8KIAogCWNtZHNpemUgPSAoc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKHN0cnVjdCBzZXJ2X3Bhcm0pKTsKLQlpZiAoKGVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMSwgY21kc2l6ZSwgcmV0cnksCi0JCQkJCSAgbmRscCwgRUxTX0NNRF9QTE9HSSkpID09IDApIHsKLQkJcmV0dXJuICgxKTsKLQl9CisJZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAxLCBjbWRzaXplLCByZXRyeSwgMCwgZGlkLAorCQkJCQkJCQlFTFNfQ01EX1BMT0dJKTsKKwlpZiAoIWVsc2lvY2IpCisJCXJldHVybiAxOwogCiAJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOwogCXBjbWQgPSAodWludDhfdCAqKSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKQEAgLTgxOSwxNSArODQ3LDEzIEBACiAJcGhiYS0+ZmNfc3RhdC5lbHNYbWl0UExPR0krKzsKIAllbHNpb2NiLT5pb2NiX2NtcGwgPSBscGZjX2NtcGxfZWxzX3Bsb2dpOwogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfUExPR0lfU05EOwogCWlmIChscGZjX3NsaV9pc3N1ZV9pb2NiKHBoYmEsIHByaW5nLCBlbHNpb2NiLCAwKSA9PSBJT0NCX0VSUk9SKSB7Ci0JCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfUExPR0lfU05EOwogCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTg1MSw5ICs4NzcsMTAgQEAKIAkvKiBQUkxJIGNvbXBsZXRlcyB0byBOUG9ydCA8bmxwX0RJRD4gKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAogCQkJIiVkOjAxMDMgUFJMSSBjb21wbGV0ZXMgdG8gTlBvcnQgeCV4ICIKLQkJCSJEYXRhOiB4JXggeCV4IHgleFxuIiwKKwkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXhcbiIsCiAJCQlwaGJhLT5icmRfbm8sIG5kbHAtPm5scF9ESUQsIGlyc3AtPnVscFN0YXR1cywKLQkJCWlyc3AtPnVuLnVscFdvcmRbNF0sIHBoYmEtPm51bV9kaXNjX25vZGVzKTsKKwkJCWlyc3AtPnVuLnVscFdvcmRbNF0sIGlyc3AtPnVscFRpbWVvdXQsCisJCQlwaGJhLT5udW1fZGlzY19ub2Rlcyk7CiAKIAlwaGJhLT5mY19wcmxpX3NlbnQtLTsKIAkvKiBDaGVjayB0byBzZWUgaWYgbGluayB3ZW50IGRvd24gZHVyaW5nIGRpc2NvdmVyeSAqLwpAQCAtODczLDggKzkwMCw3IEBACiAJCSAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX0xJTktfRE9XTikgfHwKIAkJICAgKGlyc3AtPnVuLnVscFdvcmRbNF0gPT0gSU9FUlJfU0xJX0RPV04pKSkgewogCQkJZ290byBvdXQ7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlscGZjX2Rpc2Nfc3RhdGVfbWFjaGluZShwaGJhLCBuZGxwLCBjbWRpb2NiLAogCQkJCQlOTFBfRVZUX0NNUExfUFJMSSk7CiAJCX0KQEAgLTkwNCwxMCArOTMwLDEwIEBACiAJcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0VMU19SSU5HXTsJLyogRUxTIHJpbmcgKi8KIAogCWNtZHNpemUgPSAoc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKFBSTEkpKTsKLQlpZiAoKGVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMSwgY21kc2l6ZSwgcmV0cnksCi0JCQkJCSAgbmRscCwgRUxTX0NNRF9QUkxJKSkgPT0gMCkgewotCQlyZXR1cm4gKDEpOwotCX0KKwllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDEsIGNtZHNpemUsIHJldHJ5LCBuZGxwLAorCQkJCQluZGxwLT5ubHBfRElELCBFTFNfQ01EX1BSTEkpOworCWlmICghZWxzaW9jYikKKwkJcmV0dXJuIDE7CiAKIAlpY21kID0gJmVsc2lvY2ItPmlvY2I7CiAJcGNtZCA9ICh1aW50OF90ICopICgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBlbHNpb2NiLT5jb250ZXh0MiktPnZpcnQpOwpAQCAtOTQzLDExICs5NjksMTEgQEAKIAkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9QUkxJX1NORDsKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBlbHNpb2NiKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCXBoYmEtPmZjX3BybGlfc2VudCsrOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMDE2LDIxICsxMDQyLDIyIEBACiAKIAlpcnNwID0gJihyc3Bpb2NiLT5pb2NiKTsKIAluZGxwID0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopIGNtZGlvY2ItPmNvbnRleHQxOwotCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0FESVNDX1NORDsKLQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAogCS8qIFNpbmNlIG5kbHAgY2FuIGJlIGZyZWVkIGluIHRoZSBkaXNjIHN0YXRlIG1hY2hpbmUsIG5vdGUgaWYgdGhpcyBub2RlCiAJICogaXMgYmVpbmcgdXNlZCBkdXJpbmcgZGlzY292ZXJ5LgogCSAqLwogCWRpc2MgPSAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpOworCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfZmxhZyAmPSB+KE5MUF9BRElTQ19TTkQgfCBOTFBfTlBSXzJCX0RJU0MpOworCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCiAJLyogQURJU0MgY29tcGxldGVzIHRvIE5Qb3J0IDxubHBfRElEPiAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCiAJCQkiJWQ6MDEwNCBBRElTQyBjb21wbGV0ZXMgdG8gTlBvcnQgeCV4ICIKLQkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXhcbiIsCisJCQkiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleFxuIiwKIAkJCXBoYmEtPmJyZF9ubywgbmRscC0+bmxwX0RJRCwgaXJzcC0+dWxwU3RhdHVzLAotCQkJaXJzcC0+dW4udWxwV29yZFs0XSwgZGlzYywgcGhiYS0+bnVtX2Rpc2Nfbm9kZXMpOworCQkJaXJzcC0+dW4udWxwV29yZFs0XSwgaXJzcC0+dWxwVGltZW91dCwgZGlzYywKKwkJCXBoYmEtPm51bV9kaXNjX25vZGVzKTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiBsaW5rIHdlbnQgZG93biBkdXJpbmcgZGlzY292ZXJ5ICovCiAJaWYgKGxwZmNfZWxzX2Noa19sYXR0KHBoYmEpKSB7CkBAIC0xMDU0LDEzICsxMDgxLDEwIEBACiAJCX0KIAkJLyogQURJU0MgZmFpbGVkICovCiAJCS8qIERvIG5vdCBjYWxsIERTTSBmb3IgbHBmY19lbHNfYWJvcnQnZWQgRUxTIGNtZHMgKi8KLQkJaWYgKChpcnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX0xPQ0FMX1JFSkVDVCkgJiYKLQkJICAgKChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9BQk9SVEVEKSB8fAotCQkgICAoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9MSU5LX0RPV04pIHx8Ci0JCSAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9ET1dOKSkpIHsKLQkJCWRpc2MgPSAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSXzJCX0RJU0MpOwotCQl9Ci0JCWVsc2UgeworCQlpZiAoKGlyc3AtPnVscFN0YXR1cyAhPSBJT1NUQVRfTE9DQUxfUkVKRUNUKSB8fAorCQkgICAoKGlyc3AtPnVuLnVscFdvcmRbNF0gIT0gSU9FUlJfU0xJX0FCT1JURUQpICYmCisJCSAgIChpcnNwLT51bi51bHBXb3JkWzRdICE9IElPRVJSX0xJTktfRE9XTikgJiYKKwkJICAgKGlyc3AtPnVuLnVscFdvcmRbNF0gIT0gSU9FUlJfU0xJX0RPV04pKSkgewogCQkJbHBmY19kaXNjX3N0YXRlX21hY2hpbmUocGhiYSwgbmRscCwgY21kaW9jYiwKIAkJCQkJTkxQX0VWVF9DTVBMX0FESVNDKTsKIAkJfQpAQCAtMTExMiw5ICsxMTM2LDYgQEAKIAkJCX0KIAkJfQogCX0KLQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKLQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIG91dDoKIAlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgY21kaW9jYik7CiAJcmV0dXJuOwpAQCAtMTEzNiwxMCArMTE1NywxMCBAQAogCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CS8qIEVMUyByaW5nICovCiAKIAljbWRzaXplID0gKHNpemVvZiAodWludDMyX3QpICsgc2l6ZW9mIChBRElTQykpOwotCWlmICgoZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAxLCBjbWRzaXplLCByZXRyeSwKLQkJCQkJICBuZGxwLCBFTFNfQ01EX0FESVNDKSkgPT0gMCkgewotCQlyZXR1cm4gKDEpOwotCX0KKwllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDEsIGNtZHNpemUsIHJldHJ5LCBuZGxwLAorCQkJCQkJbmRscC0+bmxwX0RJRCwgRUxTX0NNRF9BRElTQyk7CisJaWYgKCFlbHNpb2NiKQorCQlyZXR1cm4gMTsKIAogCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKIAlwY21kID0gKHVpbnQ4X3QgKikgKCgoc3RydWN0IGxwZmNfZG1hYnVmICopIGVsc2lvY2ItPmNvbnRleHQyKS0+dmlydCk7CkBAIC0xMTYzLDEwICsxMTg0LDEwIEBACiAJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfQURJU0NfU05EOwogCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTExOTAsOSArMTIxMSwxMCBAQAogCS8qIExPR08gY29tcGxldGVzIHRvIE5Qb3J0IDxubHBfRElEPiAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCiAJCQkiJWQ6MDEwNSBMT0dPIGNvbXBsZXRlcyB0byBOUG9ydCB4JXggIgotCQkJIkRhdGE6IHgleCB4JXggeCV4XG4iLAorCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleFxuIiwKIAkJCXBoYmEtPmJyZF9ubywgbmRscC0+bmxwX0RJRCwgaXJzcC0+dWxwU3RhdHVzLAotCQkJaXJzcC0+dW4udWxwV29yZFs0XSwgcGhiYS0+bnVtX2Rpc2Nfbm9kZXMpOworCQkJaXJzcC0+dW4udWxwV29yZFs0XSwgaXJzcC0+dWxwVGltZW91dCwKKwkJCXBoYmEtPm51bV9kaXNjX25vZGVzKTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiBsaW5rIHdlbnQgZG93biBkdXJpbmcgZGlzY292ZXJ5ICovCiAJaWYgKGxwZmNfZWxzX2Noa19sYXR0KHBoYmEpKQpAQCAtMTIxMSwxOCArMTIzMywxNSBAQAogCQkgICAoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9MSU5LX0RPV04pIHx8CiAJCSAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9ET1dOKSkpIHsKIAkJCWdvdG8gb3V0OwotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJbHBmY19kaXNjX3N0YXRlX21hY2hpbmUocGhiYSwgbmRscCwgY21kaW9jYiwKIAkJCQkJTkxQX0VWVF9DTVBMX0xPR08pOwogCQl9CiAJfSBlbHNlIHsKLQkJLyogR29vZCBzdGF0dXMsIGNhbGwgc3RhdGUgbWFjaGluZSAqLworCQkvKiBHb29kIHN0YXR1cywgY2FsbCBzdGF0ZSBtYWNoaW5lLgorCQkgKiBUaGlzIHdpbGwgdW5yZWdpc3RlciB0aGUgcnBpIGlmIG5lZWRlZC4KKwkJICovCiAJCWxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHBoYmEsIG5kbHAsIGNtZGlvY2IsIE5MUF9FVlRfQ01QTF9MT0dPKTsKLQotCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKSB7Ci0JCQlscGZjX3VucmVnX3JwaShwaGJhLCBuZGxwKTsKLQkJfQogCX0KIAogb3V0OgpAQCAtMTI0NSwxMCArMTI2NCwxMCBAQAogCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CiAKIAljbWRzaXplID0gMiAqIChzaXplb2YgKHVpbnQzMl90KSArIHNpemVvZiAoc3RydWN0IGxwZmNfbmFtZSkpOwotCWlmICgoZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAxLCBjbWRzaXplLCByZXRyeSwKLQkJCQkJICBuZGxwLCBFTFNfQ01EX0xPR08pKSA9PSAwKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQorCWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMSwgY21kc2l6ZSwgcmV0cnksIG5kbHAsCisJCQkJCQluZGxwLT5ubHBfRElELCBFTFNfQ01EX0xPR08pOworCWlmICghZWxzaW9jYikKKwkJcmV0dXJuIDE7CiAKIAlpY21kID0gJmVsc2lvY2ItPmlvY2I7CiAJcGNtZCA9ICh1aW50OF90ICopICgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBlbHNpb2NiLT5jb250ZXh0MiktPnZpcnQpOwpAQCAtMTI2OCwxMCArMTI4NywxMCBAQAogCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0xPR09fU05EOwogCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEyODYsOSArMTMwNSwxMCBAQAogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAogCQkJS0VSTl9JTkZPLAogCQkJTE9HX0VMUywKLQkJCSIlZDowMTA2IEVMUyBjbWQgdGFnIHgleCBjb21wbGV0ZXMgRGF0YTogeCV4IHgleFxuIiwKKwkJCSIlZDowMTA2IEVMUyBjbWQgdGFnIHgleCBjb21wbGV0ZXMgRGF0YTogeCV4IHgleCB4JXhcbiIsCiAJCQlwaGJhLT5icmRfbm8sCi0JCQlpcnNwLT51bHBJb1RhZywgaXJzcC0+dWxwU3RhdHVzLCBpcnNwLT51bi51bHBXb3JkWzRdKTsKKwkJCWlyc3AtPnVscElvVGFnLCBpcnNwLT51bHBTdGF0dXMsCisJCQlpcnNwLT51bi51bHBXb3JkWzRdLCBpcnNwLT51bHBUaW1lb3V0KTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiBsaW5rIHdlbnQgZG93biBkdXJpbmcgZGlzY292ZXJ5ICovCiAJbHBmY19lbHNfY2hrX2xhdHQocGhiYSk7CkBAIC0xMzEwLDE2ICsxMzMwLDE3IEBACiAJcHNsaSA9ICZwaGJhLT5zbGk7CiAJcHJpbmcgPSAmcHNsaS0+cmluZ1tMUEZDX0VMU19SSU5HXTsJLyogRUxTIHJpbmcgKi8KIAljbWRzaXplID0gKHNpemVvZiAodWludDMyX3QpICsgc2l6ZW9mIChTQ1IpKTsKLQlpZiAoKG5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCkpID09IDApIHsKLQkJcmV0dXJuICgxKTsKLQl9CisJbmRscCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bmxwX21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5kbHApCisJCXJldHVybiAxOwogCiAJbHBmY19ubHBfaW5pdChwaGJhLCBuZGxwLCBucG9ydGlkKTsKIAotCWlmICgoZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAxLCBjbWRzaXplLCByZXRyeSwKLQkJCQkJICBuZGxwLCBFTFNfQ01EX1NDUikpID09IDApIHsKKwllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDEsIGNtZHNpemUsIHJldHJ5LCBuZGxwLAorCQkJCQkJbmRscC0+bmxwX0RJRCwgRUxTX0NNRF9TQ1IpOworCWlmICghZWxzaW9jYikgewogCQltZW1wb29sX2ZyZWUoIG5kbHAsIHBoYmEtPm5scF9tZW1fcG9vbCk7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKQEAgLTEzMzksMTEgKzEzNjAsMTEgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW1lbXBvb2xfZnJlZSggbmRscCwgcGhiYS0+bmxwX21lbV9wb29sKTsKIAkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbWVtcG9vbF9mcmVlKCBuZGxwLCBwaGJhLT5ubHBfbWVtX3Bvb2wpOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEzNjMsMTUgKzEzODQsMTYgQEAKIAlwc2xpID0gJnBoYmEtPnNsaTsKIAlwcmluZyA9ICZwc2xpLT5yaW5nW0xQRkNfRUxTX1JJTkddOwkvKiBFTFMgcmluZyAqLwogCWNtZHNpemUgPSAoc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKEZBUlApKTsKLQlpZiAoKG5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCkpID09IDApIHsKLQkJcmV0dXJuICgxKTsKLQl9CisJbmRscCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bmxwX21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5kbHApCisJCXJldHVybiAxOwogCWxwZmNfbmxwX2luaXQocGhiYSwgbmRscCwgbnBvcnRpZCk7CiAKLQlpZiAoKGVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMSwgY21kc2l6ZSwgcmV0cnksCi0JCQkJCSAgbmRscCwgRUxTX0NNRF9STklEKSkgPT0gMCkgeworCWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMSwgY21kc2l6ZSwgcmV0cnksIG5kbHAsCisJCQkJCQluZGxwLT5ubHBfRElELCBFTFNfQ01EX1JOSUQpOworCWlmICghZWxzaW9jYikgewogCQltZW1wb29sX2ZyZWUoIG5kbHAsIHBoYmEtPm5scF9tZW1fcG9vbCk7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKQEAgLTE0MDUsMTEgKzE0MjcsNTEgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW1lbXBvb2xfZnJlZSggbmRscCwgcGhiYS0+bmxwX21lbV9wb29sKTsKIAkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbWVtcG9vbF9mcmVlKCBuZGxwLCBwaGJhLT5ubHBfbWVtX3Bvb2wpOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2xwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3RtbyhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmxwKQoreworCW5scC0+bmxwX2ZsYWcgJj0gfk5MUF9ERUxBWV9UTU87CisJZGVsX3RpbWVyX3N5bmMoJm5scC0+bmxwX2RlbGF5ZnVuYyk7CisJbmxwLT5ubHBfbGFzdF9lbHNjbWQgPSAwOworCisJaWYgKCFsaXN0X2VtcHR5KCZubHAtPmVsc19yZXRyeV9ldnQuZXZ0X2xpc3RwKSkKKwkJbGlzdF9kZWxfaW5pdCgmbmxwLT5lbHNfcmV0cnlfZXZ0LmV2dF9saXN0cCk7CisKKwlpZiAobmxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgeworCQlubHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJCWlmIChwaGJhLT5udW1fZGlzY19ub2RlcykgeworCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBtb3JlCisJCQkgKiBQTE9HSXMgdG8gYmUgc2VudAorCQkJICovCisJCQlscGZjX21vcmVfcGxvZ2kocGhiYSk7CisJCX0KKworCQlpZiAocGhiYS0+bnVtX2Rpc2Nfbm9kZXMgPT0gMCkgeworCQkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfTkRJU0NfQUNUSVZFOworCQkJbHBmY19jYW5fZGlzY3RtbyhwaGJhKTsKKwkJCWlmIChwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSB7CisJCQkJLyogQ2hlY2sgdG8gc2VlIGlmIG1vcmUgUlNDTnMKKwkJCQkgKiBjYW1lIGluIHdoaWxlIHdlIHdlcmUKKwkJCQkgKiBwcm9jZXNzaW5nIHRoaXMgb25lLgorCQkJCSAqLworCQkJCWlmKChwaGJhLT5mY19yc2NuX2lkX2NudD09MCkgJiYKKwkJCQkgICAoIShwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9ESVNDT1ZFUlkpKSkgeworCQkJCQlwaGJhLT5mY19mbGFnICY9IH5GQ19SU0NOX01PREU7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlscGZjX2Vsc19oYW5kbGVfcnNjbihwaGJhKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuOwogfQogCiB2b2lkCkBAIC0xNDUwLDggKzE1MTIsOSBAQAogCiAJcGhiYSA9IG5kbHAtPm5scF9waGJhOwogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlkaWQgPSAodWludDMyX3QpIChuZGxwLT5ubHBfRElEKTsKLQljbWQgPSAodWludDMyX3QpIChuZGxwLT5ubHBfbGFzdF9lbHNjbWQpOworCWRpZCA9IG5kbHAtPm5scF9ESUQ7CisJY21kID0gbmRscC0+bmxwX2xhc3RfZWxzY21kOworCW5kbHAtPm5scF9sYXN0X2Vsc2NtZCA9IDA7CiAKIAlpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pKSB7CiAJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtMTQ2MCw2ICsxNTIzLDEyIEBACiAKIAluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0RFTEFZX1RNTzsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkvKgorCSAqIElmIGEgZGlzY292ZXJ5IGV2ZW50IHJlYWRkZWQgbmxwX2RlbGF5ZnVuYyBhZnRlciB0aW1lcgorCSAqIGZpcmluZyBhbmQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHRpbWVyLCBjYW5jZWwgdGhlCisJICogbmxwX2RlbGF5ZnVuYy4KKwkgKi8KKwlkZWxfdGltZXJfc3luYygmbmRscC0+bmxwX2RlbGF5ZnVuYyk7CiAJcmV0cnkgPSBuZGxwLT5ubHBfcmV0cnk7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMTQ2NywyNCArMTUzNiwzMiBAQAogCQlscGZjX2lzc3VlX2Vsc19mbG9naShwaGJhLCBuZGxwLCByZXRyeSk7CiAJCWJyZWFrOwogCWNhc2UgRUxTX0NNRF9QTE9HSToKLQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QTE9HSV9JU1NVRTsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7Ci0JCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAsIHJldHJ5KTsKKwkJaWYoIWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAtPm5scF9ESUQsIHJldHJ5KSkgeworCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CisJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOworCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBFTFNfQ01EX0FESVNDOgotCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwotCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9BRElTQ19MSVNUKTsKLQkJbHBmY19pc3N1ZV9lbHNfYWRpc2MocGhiYSwgbmRscCwgcmV0cnkpOworCQlpZiAoIWxwZmNfaXNzdWVfZWxzX2FkaXNjKHBoYmEsIG5kbHAsIHJldHJ5KSkgeworCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CisJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOworCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfQURJU0NfTElTVCk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBFTFNfQ01EX1BSTEk6Ci0JCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfUFJMSV9JU1NVRTsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUFJMSV9MSVNUKTsKLQkJbHBmY19pc3N1ZV9lbHNfcHJsaShwaGJhLCBuZGxwLCByZXRyeSk7CisJCWlmICghbHBmY19pc3N1ZV9lbHNfcHJsaShwaGJhLCBuZGxwLCByZXRyeSkpIHsKKwkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOworCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QUkxJX0lTU1VFOworCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUFJMSV9MSVNUKTsKKwkJfQogCQlicmVhazsKIAljYXNlIEVMU19DTURfTE9HTzoKLQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKLQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwotCQlscGZjX2lzc3VlX2Vsc19sb2dvKHBoYmEsIG5kbHAsIHJldHJ5KTsKKwkJaWYgKCFscGZjX2lzc3VlX2Vsc19sb2dvKHBoYmEsIG5kbHAsIHJldHJ5KSkgeworCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CisJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOworCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOworCQl9CiAJCWJyZWFrOwogCX0KIAlyZXR1cm47CkBAIC0xNTAyLDYgKzE1NzksNyBAQAogCWludCByZXRyeSwgbWF4cmV0cnk7CiAJaW50IGRlbGF5OwogCXVpbnQzMl90IGNtZDsKKwl1aW50MzJfdCBkaWQ7CiAKIAlyZXRyeSA9IDA7CiAJZGVsYXkgPSAwOwpAQCAtMTUxMCw2ICsxNTg4LDcgQEAKIAluZGxwID0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopIGNtZGlvY2ItPmNvbnRleHQxOwogCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2ItPmNvbnRleHQyOwogCWNtZCA9IDA7CisKIAkvKiBOb3RlOiBjb250ZXh0MiBtYXkgYmUgMCBmb3IgaW50ZXJuYWwgZHJpdmVyIGFib3J0CiAJICogb2YgZGVsYXlzIEVMUyBjb21tYW5kLgogCSAqLwpAQCAtMTUxOSw2ICsxNTk4LDE2IEBACiAJCWNtZCA9ICplbHNjbWQrKzsKIAl9CiAKKwlpZihuZGxwKQorCQlkaWQgPSBuZGxwLT5ubHBfRElEOworCWVsc2UgeworCQkvKiBXZSBzaG91bGQgb25seSBoaXQgdGhpcyBjYXNlIGZvciByZXRyeWluZyBQTE9HSSAqLworCQlkaWQgPSBpcnNwLT51bi5lbHNyZXE2NC5yZW1vdGVJRDsKKwkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBkaWQpOworCQlpZiAoIW5kbHAgJiYgKGNtZCAhPSBFTFNfQ01EX1BMT0dJKSkKKwkJCXJldHVybiAxOworCX0KKwogCXN3aXRjaCAoaXJzcC0+dWxwU3RhdHVzKSB7CiAJY2FzZSBJT1NUQVRfRkNQX1JTUF9FUlJPUjoKIAljYXNlIElPU1RBVF9SRU1PVEVfU1RPUDoKQEAgLTE1MzcsMTEgKzE2MjYsNiBAQAogCiAJCWNhc2UgSU9FUlJfU0VRVUVOQ0VfVElNRU9VVDoKIAkJCXJldHJ5ID0gMTsKLQkJCWlmICgoY21kID09IEVMU19DTURfRkxPR0kpCi0JCQkgICAgJiYgKHBoYmEtPmZjX3RvcG9sb2d5ICE9IFRPUE9MT0dZX0xPT1ApKSB7Ci0JCQkJZGVsYXkgPSAxOwotCQkJCW1heHJldHJ5ID0gNDg7Ci0JCQl9CiAJCQlicmVhazsKIAogCQljYXNlIElPRVJSX05PX1JFU09VUkNFUzoKQEAgLTE2MTIsOSArMTY5Niw4IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChuZGxwLT5ubHBfRElEID09IEZETUlfRElEKSB7CisJaWYgKGRpZCA9PSBGRE1JX0RJRCkKIAkJcmV0cnkgPSAxOwotCX0KIAogCWlmICgoKytjbWRpb2NiLT5yZXRyeSkgPj0gbWF4cmV0cnkpIHsKIAkJcGhiYS0+ZmNfc3RhdC5lbHNSZXRyeUV4Y2VlZGVkKys7CkBAIC0xNjI4LDcgKzE3MTEsNyBAQAogCQkJCSIlZDowMTA3IFJldHJ5IEVMUyBjb21tYW5kIHgleCB0byByZW1vdGUgIgogCQkJCSJOUE9SVCB4JXggRGF0YTogeCV4IHgleFxuIiwKIAkJCQlwaGJhLT5icmRfbm8sCi0JCQkJY21kLCBuZGxwLT5ubHBfRElELCBjbWRpb2NiLT5yZXRyeSwgZGVsYXkpOworCQkJCWNtZCwgZGlkLCBjbWRpb2NiLT5yZXRyeSwgZGVsYXkpOwogCiAJCWlmICgoY21kID09IEVMU19DTURfUExPR0kpIHx8IChjbWQgPT0gRUxTX0NNRF9BRElTQykpIHsKIAkJCS8qIElmIGRpc2NvdmVyeSAvIFJTQ04gdGltZXIgaXMgcnVubmluZywgcmVzZXQgaXQgKi8KQEAgLTE2MzksNTQgKzE3MjIsNjEgQEAKIAkJfQogCiAJCXBoYmEtPmZjX3N0YXQuZWxzWG1pdFJldHJ5Kys7Ci0JCWlmIChkZWxheSkgeworCQlpZiAobmRscCAmJiBkZWxheSkgewogCQkJcGhiYS0+ZmNfc3RhdC5lbHNEZWxheVJldHJ5Kys7CiAJCQluZGxwLT5ubHBfcmV0cnkgPSBjbWRpb2NiLT5yZXRyeTsKIAogCQkJbW9kX3RpbWVyKCZuZGxwLT5ubHBfZGVsYXlmdW5jLCBqaWZmaWVzICsgSFopOwogCQkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKIAorCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CiAJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwogCQkJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gY21kOwogCi0JCQlyZXR1cm4gKDEpOworCQkJcmV0dXJuIDE7CiAJCX0KIAkJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBFTFNfQ01EX0ZMT0dJOgogCQkJbHBmY19pc3N1ZV9lbHNfZmxvZ2kocGhiYSwgbmRscCwgY21kaW9jYi0+cmV0cnkpOwotCQkJcmV0dXJuICgxKTsKKwkJCXJldHVybiAxOwogCQljYXNlIEVMU19DTURfUExPR0k6Ci0JCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOwotCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7Ci0JCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBuZGxwLCBjbWRpb2NiLT5yZXRyeSk7Ci0JCQlyZXR1cm4gKDEpOworCQkJaWYgKG5kbHApIHsKKwkJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKKwkJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOworCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1BMT0dJX0xJU1QpOworCQkJfQorCQkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgZGlkLCBjbWRpb2NiLT5yZXRyeSk7CisJCQlyZXR1cm4gMTsKIAkJY2FzZSBFTFNfQ01EX0FESVNDOgorCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CiAJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwogCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfQURJU0NfTElTVCk7CiAJCQlscGZjX2lzc3VlX2Vsc19hZGlzYyhwaGJhLCBuZGxwLCBjbWRpb2NiLT5yZXRyeSk7Ci0JCQlyZXR1cm4gKDEpOworCQkJcmV0dXJuIDE7CiAJCWNhc2UgRUxTX0NNRF9QUkxJOgorCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CiAJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BSTElfSVNTVUU7CiAJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QUkxJX0xJU1QpOwogCQkJbHBmY19pc3N1ZV9lbHNfcHJsaShwaGJhLCBuZGxwLCBjbWRpb2NiLT5yZXRyeSk7Ci0JCQlyZXR1cm4gKDEpOworCQkJcmV0dXJuIDE7CiAJCWNhc2UgRUxTX0NNRF9MT0dPOgorCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CiAJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwogCQkJbHBmY19pc3N1ZV9lbHNfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiLT5yZXRyeSk7Ci0JCQlyZXR1cm4gKDEpOworCQkJcmV0dXJuIDE7CiAJCX0KIAl9CiAKIAkvKiBObyByZXRyeSBFTFMgY29tbWFuZCA8ZWxzQ21kPiB0byByZW1vdGUgTlBPUlQgPGRpZD4gKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAogCQkJIiVkOjAxMDggTm8gcmV0cnkgRUxTIGNvbW1hbmQgeCV4IHRvIHJlbW90ZSBOUE9SVCB4JXggIgotCQkJIkRhdGE6IHgleCB4JXhcbiIsCisJCQkiRGF0YTogeCV4XG4iLAogCQkJcGhiYS0+YnJkX25vLAotCQkJY21kLCBuZGxwLT5ubHBfRElELCBjbWRpb2NiLT5yZXRyeSwgbmRscC0+bmxwX2ZsYWcpOworCQkJY21kLCBkaWQsIGNtZGlvY2ItPnJldHJ5KTsKIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtMTczNSwxMCArMTgyNSw2IEBACiAJCQlwaGJhLT5icmRfbm8sIG5kbHAtPm5scF9ESUQsIG5kbHAtPm5scF9mbGFnLAogCQkJbmRscC0+bmxwX3N0YXRlLCBuZGxwLT5ubHBfcnBpKTsKIAotCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0xPR09fQUNDOwotCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCiAJc3dpdGNoIChuZGxwLT5ubHBfc3RhdGUpIHsKIAljYXNlIE5MUF9TVEVfVU5VU0VEX05PREU6CS8qIG5vZGUgaXMganVzdCBhbGxvY2F0ZWQgKi8KIAkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CkBAIC0xNzc2LDExICsxODYyLDEyIEBACiAJLyogRUxTIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+IGNvbXBsZXRlcyAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCiAJCQkiJWQ6MDExMCBFTFMgcmVzcG9uc2UgdGFnIHgleCBjb21wbGV0ZXMgIgotCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXggeCV4XG4iLAorCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXggeCV4IHgleFxuIiwKIAkJCXBoYmEtPmJyZF9ubywKIAkJCWNtZGlvY2ItPmlvY2IudWxwSW9UYWcsIHJzcGlvY2ItPmlvY2IudWxwU3RhdHVzLAotCQkJcnNwaW9jYi0+aW9jYi51bi51bHBXb3JkWzRdLCBuZGxwLT5ubHBfRElELAotCQkJbmRscC0+bmxwX2ZsYWcsIG5kbHAtPm5scF9zdGF0ZSwgbmRscC0+bmxwX3JwaSk7CisJCQlyc3Bpb2NiLT5pb2NiLnVuLnVscFdvcmRbNF0sIHJzcGlvY2ItPmlvY2IudWxwVGltZW91dCwKKyAJCQluZGxwLT5ubHBfRElELCBuZGxwLT5ubHBfZmxhZywgbmRscC0+bmxwX3N0YXRlLAorCQkJbmRscC0+bmxwX3JwaSk7CiAKIAlpZiAobWJveCkgewogCQlpZiAoKHJzcGlvY2ItPmlvY2IudWxwU3RhdHVzID09IDApCkBAIC0xNzkxLDYgKzE4NzgsNyBAQAogCQkJbHBmY191bnJlZ19ycGkocGhiYSwgbmRscCk7CiAJCQltYm94LT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX3JlZ19sb2dpbjsKIAkJCW1ib3gtPmNvbnRleHQyID0gbmRscDsKKwkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwogCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9SRUdfTE9HSU5fSVNTVUU7CiAJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9SRUdMT0dJTl9MSVNUKTsKIAkJCWlmIChscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIG1ib3gsCkBAIC0xODA1LDYgKzE4OTMsNyBAQAogCQkJbWVtcG9vbF9mcmVlKCBtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9BQ0NfUkVHTE9HSU4pIHsKIAkJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwkJCQluZGxwID0gTlVMTDsKIAkJCX0KIAkJfQogCX0KQEAgLTE4MzksMTAgKzE5MjgsMTEgQEAKIAlzd2l0Y2ggKGZsYWcpIHsKIAljYXNlIEVMU19DTURfQUNDOgogCQljbWRzaXplID0gc2l6ZW9mICh1aW50MzJfdCk7Ci0JCWlmICgoZWxzaW9jYiA9Ci0JCSAgICAgbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDAsIGNtZHNpemUsIG9sZGlvY2ItPnJldHJ5LAotCQkJCQluZGxwLCBFTFNfQ01EX0FDQykpID09IDApIHsKLQkJCXJldHVybiAoMSk7CisJCWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMCwgY21kc2l6ZSwgb2xkaW9jYi0+cmV0cnksCisJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsIEVMU19DTURfQUNDKTsKKwkJaWYgKCFlbHNpb2NiKSB7CisJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0xPR09fQUNDOworCQkJcmV0dXJuIDE7CiAJCX0KIAkJaWNtZCA9ICZlbHNpb2NiLT5pb2NiOwogCQlpY21kLT51bHBDb250ZXh0ID0gb2xkY21kLT51bHBDb250ZXh0OwkvKiBYcmkgKi8KQEAgLTE4NTIsMTEgKzE5NDIsMTEgQEAKIAkJYnJlYWs7CiAJY2FzZSBFTFNfQ01EX1BMT0dJOgogCQljbWRzaXplID0gKHNpemVvZiAoc3RydWN0IHNlcnZfcGFybSkgKyBzaXplb2YgKHVpbnQzMl90KSk7Ci0JCWlmICgoZWxzaW9jYiA9Ci0JCSAgICAgbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDAsIGNtZHNpemUsIG9sZGlvY2ItPnJldHJ5LAotCQkJCQluZGxwLCBFTFNfQ01EX0FDQykpID09IDApIHsKLQkJCXJldHVybiAoMSk7Ci0JCX0KKwkJZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAwLCBjbWRzaXplLCBvbGRpb2NiLT5yZXRyeSwKKwkJCQkJbmRscCwgbmRscC0+bmxwX0RJRCwgRUxTX0NNRF9BQ0MpOworCQlpZiAoIWVsc2lvY2IpCisJCQlyZXR1cm4gMTsKKwogCQlpY21kID0gJmVsc2lvY2ItPmlvY2I7CiAJCWljbWQtPnVscENvbnRleHQgPSBvbGRjbWQtPnVscENvbnRleHQ7CS8qIFhyaSAqLwogCQlwY21kID0gKCgoc3RydWN0IGxwZmNfZG1hYnVmICopIGVsc2lvY2ItPmNvbnRleHQyKS0+dmlydCk7CkBAIC0xODY5LDcgKzE5NTksNyBAQAogCQltZW1jcHkocGNtZCwgJnBoYmEtPmZjX3NwYXJhbSwgc2l6ZW9mIChzdHJ1Y3Qgc2Vydl9wYXJtKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCWlmIChuZXdub2RlKQpAQCAtMTg4NSw2ICsxOTc1LDkgQEAKIAkJCW5kbHAtPm5scF9mbGFnLCBuZGxwLT5ubHBfc3RhdGUsIG5kbHAtPm5scF9ycGkpOwogCiAJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0xPR09fQUNDKSB7CisJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9MT0dPX0FDQzsKKwkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCWVsc2lvY2ItPmlvY2JfY21wbCA9IGxwZmNfY21wbF9lbHNfbG9nb19hY2M7CiAJfSBlbHNlIHsKIAkJZWxzaW9jYi0+aW9jYl9jbXBsID0gbHBmY19jbXBsX2Vsc19hY2M7CkBAIC0xODk2LDkgKzE5ODksOSBAQAogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChyYyA9PSBJT0NCX0VSUk9SKSB7CiAJCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBlbHNpb2NiKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtMTkxOCwxMCArMjAxMSwxMCBAQAogCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CS8qIEVMUyByaW5nICovCiAKIAljbWRzaXplID0gMiAqIHNpemVvZiAodWludDMyX3QpOwotCWlmICgoZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAwLCBjbWRzaXplLCBvbGRpb2NiLT5yZXRyeSwKLQkJCQkJICBuZGxwLCBFTFNfQ01EX0xTX1JKVCkpID09IDApIHsKLQkJcmV0dXJuICgxKTsKLQl9CisJZWxzaW9jYiA9IGxwZmNfcHJlcF9lbHNfaW9jYihwaGJhLCAwLCBjbWRzaXplLCBvbGRpb2NiLT5yZXRyeSwKKwkJCQkJbmRscCwgbmRscC0+bmxwX0RJRCwgRUxTX0NNRF9MU19SSlQpOworCWlmICghZWxzaW9jYikKKwkJcmV0dXJuIDE7CiAKIAlpY21kID0gJmVsc2lvY2ItPmlvY2I7CiAJb2xkY21kID0gJm9sZGlvY2ItPmlvY2I7CkBAIC0xOTQ4LDkgKzIwNDEsOSBAQAogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChyYyA9PSBJT0NCX0VSUk9SKSB7CiAJCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBlbHNpb2NiKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtMTk3MSwxMCArMjA2NCwxMCBAQAogCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CS8qIEVMUyByaW5nICovCiAKIAljbWRzaXplID0gc2l6ZW9mICh1aW50MzJfdCkgKyBzaXplb2YgKEFESVNDKTsKLQlpZiAoKGVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMCwgY21kc2l6ZSwgb2xkaW9jYi0+cmV0cnksCi0JCQkJCSAgbmRscCwgRUxTX0NNRF9BQ0MpKSA9PSAwKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQorCWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMCwgY21kc2l6ZSwgb2xkaW9jYi0+cmV0cnksCisJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsIEVMU19DTURfQUNDKTsKKwlpZiAoIWVsc2lvY2IpCisJCXJldHVybiAxOwogCiAJLyogWG1pdCBBRElTQyBBQ0MgcmVzcG9uc2UgdGFnIDx1bHBJb1RhZz4gKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLApAQCAtMjAwNiw5ICsyMDk5LDkgQEAKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAocmMgPT0gSU9DQl9FUlJPUikgewogCQlscGZjX2Vsc19mcmVlX2lvY2IocGhiYSwgZWxzaW9jYik7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBpbnQKQEAgLTIwMzAsMTMgKzIxMjMsMTAgQEAKIAlwcmluZyA9ICZwc2xpLT5yaW5nW0xQRkNfRUxTX1JJTkddOwkvKiBFTFMgcmluZyAqLwogCiAJY21kc2l6ZSA9IHNpemVvZiAodWludDMyX3QpICsgc2l6ZW9mIChQUkxJKTsKLQlpZiAoKGVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMCwgY21kc2l6ZSwgb2xkaW9jYi0+cmV0cnksCi0JCQkJCSAgbmRscCwKLQkJCQkJICAoRUxTX0NNRF9BQ0MgfAotCQkJCQkgICAoRUxTX0NNRF9QUkxJICYgfkVMU19SU1BfTUFTSykpKSkgPT0KLQkgICAgMCkgewotCQlyZXR1cm4gKDEpOwotCX0KKwllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDAsIGNtZHNpemUsIG9sZGlvY2ItPnJldHJ5LCBuZGxwLAorCQluZGxwLT5ubHBfRElELCAoRUxTX0NNRF9BQ0MgfCAoRUxTX0NNRF9QUkxJICYgfkVMU19SU1BfTUFTSykpKTsKKwlpZiAoIWVsc2lvY2IpCisJCXJldHVybiAxOwogCiAJLyogWG1pdCBQUkxJIEFDQyByZXNwb25zZSB0YWcgPHVscElvVGFnPiAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCkBAIC0yMDg2LDkgKzIxNzYsOSBAQAogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChyYyA9PSBJT0NCX0VSUk9SKSB7CiAJCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBlbHNpb2NiKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIxMTQsMTAgKzIyMDQsMTAgQEAKIAlpZiAoZm9ybWF0KQogCQljbWRzaXplICs9IHNpemVvZiAoUk5JRF9UT1BfRElTQyk7CiAKLQlpZiAoKGVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMCwgY21kc2l6ZSwgb2xkaW9jYi0+cmV0cnksCi0JCQkJCSAgbmRscCwgRUxTX0NNRF9BQ0MpKSA9PSAwKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQorCWVsc2lvY2IgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYSwgMCwgY21kc2l6ZSwgb2xkaW9jYi0+cmV0cnksCisJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsIEVMU19DTURfQUNDKTsKKwlpZiAoIWVsc2lvY2IpCisJCXJldHVybiAxOwogCiAJLyogWG1pdCBSTklEIEFDQyByZXNwb25zZSB0YWcgPHVscElvVGFnPiAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19FTFMsCkBAIC0yMTY5LDkgKzIyNTksOSBAQAogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChyYyA9PSBJT0NCX0VSUk9SKSB7CiAJCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBlbHNpb2NiKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtMjE4Nyw2ICsyMjc3LDcgQEAKIAkJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl8yQl9ESVNDKSB7CiAJCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSB7CiAJCQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfQURJU0M7CisJCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CiAJCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9BRElTQ19JU1NVRTsKIAkJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsCiAJCQkJCU5MUF9BRElTQ19MSVNUKTsKQEAgLTIyMDgsNyArMjI5OSw3IEBACiAJCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX05MUF9NT1JFOwogCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAl9Ci0JcmV0dXJuKHNlbnRhZGlzYyk7CisJcmV0dXJuIHNlbnRhZGlzYzsKIH0KIAogaW50CkBAIC0yMjI0LDkgKzIzMTUsMTAgQEAKIAkJaWYgKChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfMkJfRElTQykgJiYKIAkJICAgKCEobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKSkpIHsKIAkJCWlmICghKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl9BRElTQykpIHsKKwkJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKIAkJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOwogCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1BMT0dJX0xJU1QpOwotCQkJCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAsIDApOworCQkJCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAtPm5scF9ESUQsIDApOwogCQkJCXNlbnRwbG9naSsrOwogCQkJCXBoYmEtPm51bV9kaXNjX25vZGVzKys7CiAJCQkJaWYgKHBoYmEtPm51bV9kaXNjX25vZGVzID49CkBAIC0yMjQ0LDcgKzIzMzYsNyBAQAogCQlwaGJhLT5mY19mbGFnICY9IH5GQ19OTFBfTU9SRTsKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJfQotCXJldHVybihzZW50cGxvZ2kpOworCXJldHVybiBzZW50cGxvZ2k7CiB9CiAKIGludApAQCAtMjI2NCw3ICsyMzU2LDcgQEAKIAlwaGJhLT5mY19mbGFnICY9IH4oRkNfUlNDTl9NT0RFIHwgRkNfUlNDTl9ESVNDT1ZFUlkpOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWxwZmNfY2FuX2Rpc2N0bW8ocGhiYSk7Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50CkBAIC0yMjg1LDcgKzIzNzcsNyBAQAogCiAJLyogSWYgd2UgYXJlIGRvaW5nIGEgRlVMTCBSU0NOIHJlZGlzY292ZXJ5LCBtYXRjaCBldmVyeXRoaW5nICovCiAJaWYgKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX0RJU0NPVkVSWSkgewotCQlyZXR1cm4gKGRpZCk7CisJCXJldHVybiBkaWQ7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHBoYmEtPmZjX3JzY25faWRfY250OyBpKyspIHsKQEAgLTIzMzMsNyArMjQyNSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JcmV0dXJuIChtYXRjaCk7CisJcmV0dXJuIG1hdGNoOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMzY1LDE3ICsyNDU3LDE1IEBACiAKIAkJCWxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHBoYmEsIG5kbHAsIE5VTEwsCiAJCQkJCU5MUF9FVlRfREVWSUNFX1JFQ09WRVJZKTsKLQkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pIHsKLQkJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0RFTEFZX1RNTzsKLQkJCQlkZWxfdGltZXJfc3luYygmbmRscC0+bmxwX2RlbGF5ZnVuYyk7Ci0JCQkJaWYgKCFsaXN0X2VtcHR5KCZuZGxwLT4KLQkJCQkJCWVsc19yZXRyeV9ldnQuZXZ0X2xpc3RwKSkKLQkJCQkJbGlzdF9kZWxfaW5pdCgmbmRscC0+Ci0JCQkJCQllbHNfcmV0cnlfZXZ0LmV2dF9saXN0cCk7Ci0JCQl9CisKKwkJCS8qIE1ha2Ugc3VyZSBOTFBfREVMQVlfVE1PIGlzIE5PVCBydW5uaW5nCisJCQkgKiBhZnRlciBhIGRldmljZSByZWNvdmVyeSBldmVudC4KKwkJCSAqLworCQkJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykKKwkJCQlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8ocGhiYSwgbmRscCk7CiAJCX0KIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtMjQxMSw3ICsyNTAxLDcgQEAKIAlpZiAocGhiYS0+aGJhX3N0YXRlIDwgTFBGQ19OU19RUlkpIHsKIAkJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwKIAkJCQkJCQkJbmV3bm9kZSk7Ci0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCX0KIAogCS8qIElmIHdlIGFyZSBhbHJlYWR5IHByb2Nlc3NpbmcgYW4gUlNDTiwgc2F2ZSB0aGUgcmVjZWl2ZWQKQEAgLTI0NTMsNyArMjU0Myw3IEBACiAKIAkJLyogc2VuZCBSRUNPVkVSWSBldmVudCBmb3IgQUxMIG5vZGVzIHRoYXQgbWF0Y2ggUlNDTiBwYXlsb2FkICovCiAJCWxwZmNfcnNjbl9yZWNvdmVyeV9jaGVjayhwaGJhKTsKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJcGhiYS0+ZmNfZmxhZyB8PSBGQ19SU0NOX01PREU7CkBAIC0yNDcyLDcgKzI1NjIsNyBAQAogCS8qIHNlbmQgUkVDT1ZFUlkgZXZlbnQgZm9yIEFMTCBub2RlcyB0aGF0IG1hdGNoIFJTQ04gcGF5bG9hZCAqLwogCWxwZmNfcnNjbl9yZWNvdmVyeV9jaGVjayhwaGJhKTsKIAotCXJldHVybiAobHBmY19lbHNfaGFuZGxlX3JzY24ocGhiYSkpOworCXJldHVybiBscGZjX2Vsc19oYW5kbGVfcnNjbihwaGJhKTsKIH0KIAogaW50CkBAIC0yNDk0LDQwICsyNTg0LDQxIEBACiAKIAkvKiBUbyBwcm9jZXNzIFJTQ04sIGZpcnN0IGNvbXBhcmUgUlNDTiBkYXRhIHdpdGggTmFtZVNlcnZlciAqLwogCXBoYmEtPmZjX25zX3JldHJ5ID0gMDsKLQlpZiAoKG5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX1VOTUFQUEVELAotCQkJCSAgICAgIE5hbWVTZXJ2ZXJfRElEKSkpIHsKKwluZGxwID0gbHBmY19maW5kbm9kZV9kaWQocGhiYSwgTkxQX1NFQVJDSF9VTk1BUFBFRCwgTmFtZVNlcnZlcl9ESUQpOworCWlmIChuZGxwKSB7CiAJCS8qIEdvb2QgbmRscCwgaXNzdWUgQ1QgUmVxdWVzdCB0byBOYW1lU2VydmVyICovCiAJCWlmIChscGZjX25zX2NtZChwaGJhLCBuZGxwLCBTTElfQ1ROU19HSURfRlQpID09IDApIHsKIAkJCS8qIFdhaXQgZm9yIE5hbWVTZXJ2ZXIgcXVlcnkgY21wbCBiZWZvcmUgd2UgY2FuCiAJCQkgICBjb250aW51ZSAqLwotCQkJcmV0dXJuICgxKTsKKwkJCXJldHVybiAxOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogSWYgbG9naW4gdG8gTmFtZVNlcnZlciBkb2VzIG5vdCBleGlzdCwgaXNzdWUgb25lICovCiAJCS8qIEdvb2Qgc3RhdHVzLCBpc3N1ZSBQTE9HSSB0byBOYW1lU2VydmVyICovCi0JCWlmICgobmRscCA9Ci0JCSAgICAgbHBmY19maW5kbm9kZV9kaWQocGhiYSwgTkxQX1NFQVJDSF9BTEwsIE5hbWVTZXJ2ZXJfRElEKSkpIHsKKwkJbmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBOYW1lU2VydmVyX0RJRCk7CisJCWlmIChuZGxwKSB7CiAJCQkvKiBXYWl0IGZvciBOYW1lU2VydmVyIGxvZ2luIGNtcGwgYmVmb3JlIHdlIGNhbgogCQkJICAgY29udGludWUgKi8KLQkJCXJldHVybiAoMSk7CisJCQlyZXR1cm4gMTsKIAkJfQotCQlpZiAoKG5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCkpCi0JCSAgICA9PSAwKSB7CisJCW5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJCWlmICghbmRscCkgewogCQkJbHBmY19lbHNfZmx1c2hfcnNjbihwaGJhKTsKLQkJCXJldHVybiAoMCk7CisJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWxwZmNfbmxwX2luaXQocGhiYSwgbmRscCwgTmFtZVNlcnZlcl9ESUQpOwogCQkJbmRscC0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKKwkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwogCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QTE9HSV9JU1NVRTsKLQkJCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAsIDApOworCQkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgTmFtZVNlcnZlcl9ESUQsIDApOwogCQkJLyogV2FpdCBmb3IgTmFtZVNlcnZlciBsb2dpbiBjbXBsIGJlZm9yZSB3ZSBjYW4KIAkJCSAgIGNvbnRpbnVlICovCi0JCQlyZXR1cm4gKDEpOworCQkJcmV0dXJuIDE7CiAJCX0KIAl9CiAKIAlscGZjX2Vsc19mbHVzaF9yc2NuKHBoYmEpOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI1NjEsNyArMjY1Miw3IEBACiAJCQkJIiVkOjAxMTMgQW4gRkxPR0kgRUxTIGNvbW1hbmQgeCV4IHdhcyByZWNlaXZlZCAiCiAJCQkJImZyb20gRElEIHgleCBpbiBMb29wIE1vZGVcbiIsCiAJCQkJcGhiYS0+YnJkX25vLCBjbWQsIGRpZCk7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCWRpZCA9IEZhYnJpY19ESUQ7CkBAIC0yNTc3LDcgKzI2NjgsNyBAQAogCQlpZiAoIXJjKSB7CiAJCQlpZiAoKG1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsCiAJCQkJCQkgIEdGUF9LRVJORUwpKSA9PSAwKSB7Ci0JCQkJcmV0dXJuICgxKTsKKwkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJCWxwZmNfbGlua2Rvd24ocGhiYSk7CiAJCQlscGZjX2luaXRfbGluayhwaGJhLCBtYm94LApAQCAtMjU5MCw5ICsyNjgxLDggQEAKIAkJCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CiAJCQkJbWVtcG9vbF9mcmVlKCBtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJCX0KLQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJZWxzZSBpZiAocmMgPiAwKSB7CS8qIGdyZWF0ZXIgdGhhbiAqLworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAocmMgPiAwKSB7CS8qIGdyZWF0ZXIgdGhhbiAqLwogCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJcGhiYS0+ZmNfZmxhZyB8PSBGQ19QVDJQVF9QTE9HSTsKIAkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtMjYwNiwxMyArMjY5NiwxMyBAQAogCQlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfU1BBUk1fT1BUSU9OUzsKIAkJc3RhdC51bi5iLnZlbmRvclVuaXF1ZSA9IDA7CiAJCWxwZmNfZWxzX3JzcF9yZWplY3QocGhiYSwgc3RhdC51bi5sc1JqdEVycm9yLCBjbWRpb2NiLCBuZGxwKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyogU2VuZCBiYWNrIEFDQyAqLwogCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9QTE9HSSwgY21kaW9jYiwgbmRscCwgTlVMTCwgbmV3bm9kZSk7CiAKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNjUwLDQ1ICsyNzQwLDI0NiBAQAogCQlzdGF0LnVuLmIudmVuZG9yVW5pcXVlID0gMDsKIAkJbHBmY19lbHNfcnNwX3JlamVjdChwaGJhLCBzdGF0LnVuLmxzUmp0RXJyb3IsIGNtZGlvY2IsIG5kbHApOwogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1scGZjX2Vsc19yY3ZfcnJxKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICogY21kaW9jYiwKK2xwZmNfZWxzX3Jjdl9saXJyKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHN0cnVjdCBscGZjX2lvY2JxICogY21kaW9jYiwKKwkJIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCkKK3sKKwlzdHJ1Y3QgbHNfcmp0IHN0YXQ7CisKKwkvKiBGb3Igbm93LCB1bmNvbmRpdGlvbmFsbHkgcmVqZWN0IHRoaXMgY29tbWFuZCAqLworCXN0YXQudW4uYi5sc1JqdFJzdmQwID0gMDsKKwlzdGF0LnVuLmIubHNSanRSc25Db2RlID0gTFNSSlRfVU5BQkxFX1RQQzsKKwlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfQ0FOVF9HSVZFX0RBVEE7CisJc3RhdC51bi5iLnZlbmRvclVuaXF1ZSA9IDA7CisJbHBmY19lbHNfcnNwX3JlamVjdChwaGJhLCBzdGF0LnVuLmxzUmp0RXJyb3IsIGNtZGlvY2IsIG5kbHApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbHBmY19lbHNfcnNwX3Jwc19hY2Moc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQoreworCXN0cnVjdCBscGZjX3NsaSAqcHNsaTsKKwlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmc7CisJTUFJTEJPWF90ICptYjsKKwlJT0NCX3QgKmljbWQ7CisJUlBTX1JTUCAqcnBzX3JzcDsKKwl1aW50OF90ICpwY21kOworCXN0cnVjdCBscGZjX2lvY2JxICplbHNpb2NiOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOworCXVpbnQxNl90IHhyaSwgc3RhdHVzOworCXVpbnQzMl90IGNtZHNpemU7CisKKwlwc2xpID0gJnBoYmEtPnNsaTsKKwlwcmluZyA9ICZwc2xpLT5yaW5nW0xQRkNfRUxTX1JJTkddOworCW1iID0gJnBtYi0+bWI7CisKKwluZGxwID0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopIHBtYi0+Y29udGV4dDI7CisJeHJpID0gKHVpbnQxNl90KSAoKHVuc2lnbmVkIGxvbmcpKHBtYi0+Y29udGV4dDEpKTsKKwlwbWItPmNvbnRleHQxID0gMDsKKwlwbWItPmNvbnRleHQyID0gMDsKKworCWlmIChtYi0+bWJ4U3RhdHVzKSB7CisJCW1lbXBvb2xfZnJlZSggcG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuOworCX0KKworCWNtZHNpemUgPSBzaXplb2YoUlBTX1JTUCkgKyBzaXplb2YodWludDMyX3QpOworCW1lbXBvb2xfZnJlZSggcG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDAsIGNtZHNpemUsIGxwZmNfbWF4X2Vsc190cmllcywgbmRscCwKKwkJCQkJCW5kbHAtPm5scF9ESUQsIEVMU19DTURfQUNDKTsKKwlpZiAoIWVsc2lvY2IpCisJCXJldHVybjsKKworCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKKwlpY21kLT51bHBDb250ZXh0ID0geHJpOworCisJcGNtZCA9ICh1aW50OF90ICopICgoKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBlbHNpb2NiLT5jb250ZXh0MiktPnZpcnQpOworCSooKHVpbnQzMl90ICopIChwY21kKSkgPSBFTFNfQ01EX0FDQzsKKwlwY21kICs9IHNpemVvZiAodWludDMyX3QpOyAvKiBTa2lwIHBhc3QgY29tbWFuZCAqLworCXJwc19yc3AgPSAoUlBTX1JTUCAqKXBjbWQ7CisKKwlpZiAocGhiYS0+ZmNfdG9wb2xvZ3kgIT0gVE9QT0xPR1lfTE9PUCkKKwkJc3RhdHVzID0gMHgxMDsKKwllbHNlCisJCXN0YXR1cyA9IDB4ODsKKwlpZiAocGhiYS0+ZmNfZmxhZyAmIEZDX0ZBQlJJQykKKwkJc3RhdHVzIHw9IDB4NDsKKworCXJwc19yc3AtPnJzdmQxID0gMDsKKwlycHNfcnNwLT5wb3J0U3RhdHVzID0gYmUxNl90b19jcHUoc3RhdHVzKTsKKwlycHNfcnNwLT5saW5rRmFpbHVyZUNudCA9IGJlMzJfdG9fY3B1KG1iLT51bi52YXJSZExuay5saW5rRmFpbHVyZUNudCk7CisJcnBzX3JzcC0+bG9zc1N5bmNDbnQgPSBiZTMyX3RvX2NwdShtYi0+dW4udmFyUmRMbmsubG9zc1N5bmNDbnQpOworCXJwc19yc3AtPmxvc3NTaWduYWxDbnQgPSBiZTMyX3RvX2NwdShtYi0+dW4udmFyUmRMbmsubG9zc1NpZ25hbENudCk7CisJcnBzX3JzcC0+cHJpbVNlcUVyckNudCA9IGJlMzJfdG9fY3B1KG1iLT51bi52YXJSZExuay5wcmltU2VxRXJyQ250KTsKKwlycHNfcnNwLT5pbnZhbGlkWG1pdFdvcmQgPSBiZTMyX3RvX2NwdShtYi0+dW4udmFyUmRMbmsuaW52YWxpZFhtaXRXb3JkKTsKKwlycHNfcnNwLT5jcmNDbnQgPSBiZTMyX3RvX2NwdShtYi0+dW4udmFyUmRMbmsuY3JjQ250KTsKKworCS8qIFhtaXQgRUxTIFJQUyBBQ0MgcmVzcG9uc2UgdGFnIDx1bHBJb1RhZz4gKi8KKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAorCQkJIiVkOjAxMjggWG1pdCBFTFMgUlBTIEFDQyByZXNwb25zZSB0YWcgeCV4ICIKKwkJCSJEYXRhOiB4JXggeCV4IHgleCB4JXggeCV4XG4iLAorCQkJcGhiYS0+YnJkX25vLAorCQkJZWxzaW9jYi0+aW9jYi51bHBJb1RhZywKKwkJCWVsc2lvY2ItPmlvY2IudWxwQ29udGV4dCwgbmRscC0+bmxwX0RJRCwKKwkJCW5kbHAtPm5scF9mbGFnLCBuZGxwLT5ubHBfc3RhdGUsIG5kbHAtPm5scF9ycGkpOworCisJZWxzaW9jYi0+aW9jYl9jbXBsID0gbHBmY19jbXBsX2Vsc19hY2M7CisJcGhiYS0+ZmNfc3RhdC5lbHNYbWl0QUNDKys7CisJaWYgKGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgcHJpbmcsIGVsc2lvY2IsIDApID09IElPQ0JfRVJST1IpIHsKKwkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK2xwZmNfZWxzX3Jjdl9ycHMoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiLAorCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQoreworCXVpbnQzMl90ICpscDsKKwl1aW50OF90IGZsYWc7CisJTFBGQ19NQk9YUV90ICptYm94OworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcGNtZDsKKwlSUFMgKnJwczsKKwlzdHJ1Y3QgbHNfcmp0IHN0YXQ7CisKKwlpZiAoKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX1VOTUFQUEVEX05PREUpICYmCisJICAgIChuZGxwLT5ubHBfc3RhdGUgIT0gTkxQX1NURV9NQVBQRURfTk9ERSkpIHsKKwkJc3RhdC51bi5iLmxzUmp0UnN2ZDAgPSAwOworCQlzdGF0LnVuLmIubHNSanRSc25Db2RlID0gTFNSSlRfVU5BQkxFX1RQQzsKKwkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZUV4cCA9IExTRVhQX0NBTlRfR0lWRV9EQVRBOworCQlzdGF0LnVuLmIudmVuZG9yVW5pcXVlID0gMDsKKwkJbHBmY19lbHNfcnNwX3JlamVjdChwaGJhLCBzdGF0LnVuLmxzUmp0RXJyb3IsIGNtZGlvY2IsIG5kbHApOworCX0KKworCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2ItPmNvbnRleHQyOworCWxwID0gKHVpbnQzMl90ICopIHBjbWQtPnZpcnQ7CisJZmxhZyA9IChiZTMyX3RvX2NwdSgqbHArKykgJiAweGYpOworCXJwcyA9IChSUFMgKikgbHA7CisKKwlpZiAoKGZsYWcgPT0gMCkgfHwKKwkgICAgKChmbGFnID09IDEpICYmIChiZTMyX3RvX2NwdShycHMtPnVuLnBvcnROdW0pID09IDApKSB8fAorCSAgICAoKGZsYWcgPT0gMikgJiYgKG1lbWNtcCgmcnBzLT51bi5wb3J0TmFtZSwgJnBoYmEtPmZjX3BvcnRuYW1lLAorCQkJICAgc2l6ZW9mIChzdHJ1Y3QgbHBmY19uYW1lKSkgPT0gMCkpKSB7CisJCWlmICgobWJveCA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0FUT01JQykpKSB7CisJCQlscGZjX3JlYWRfbG5rX3N0YXQocGhiYSwgbWJveCk7CisJCQltYm94LT5jb250ZXh0MSA9CisJCQkgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpY21kaW9jYi0+aW9jYi51bHBDb250ZXh0KTsKKwkJCW1ib3gtPmNvbnRleHQyID0gbmRscDsKKwkJCW1ib3gtPm1ib3hfY21wbCA9IGxwZmNfZWxzX3JzcF9ycHNfYWNjOworCQkJaWYgKGxwZmNfc2xpX2lzc3VlX21ib3ggKHBoYmEsIG1ib3gsCisJCQkgICAgKE1CWF9OT1dBSVQgfCBNQlhfU1RPUF9JT0NCKSkgIT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQkJCS8qIE1ib3ggY29tcGxldGlvbiB3aWxsIHNlbmQgRUxTIFJlc3BvbnNlICovCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCX0KKwl9CisJc3RhdC51bi5iLmxzUmp0UnN2ZDAgPSAwOworCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOworCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9DQU5UX0dJVkVfREFUQTsKKwlzdGF0LnVuLmIudmVuZG9yVW5pcXVlID0gMDsKKwlscGZjX2Vsc19yc3BfcmVqZWN0KHBoYmEsIHN0YXQudW4ubHNSanRFcnJvciwgY21kaW9jYiwgbmRscCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xwZmNfZWxzX3JzcF9ycGxfYWNjKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHVpbnQxNl90IGNtZHNpemUsCisJCSBzdHJ1Y3QgbHBmY19pb2NicSAqIG9sZGlvY2IsIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCkKK3sKKwlJT0NCX3QgKmljbWQ7CisJSU9DQl90ICpvbGRjbWQ7CisJUlBMX1JTUCBycGxfcnNwOworCXN0cnVjdCBscGZjX2lvY2JxICplbHNpb2NiOworCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZzsKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7CisJdWludDhfdCAqcGNtZDsKKworCXBzbGkgPSAmcGhiYS0+c2xpOworCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19FTFNfUklOR107CS8qIEVMUyByaW5nICovCisKKwllbHNpb2NiID0gbHBmY19wcmVwX2Vsc19pb2NiKHBoYmEsIDAsIGNtZHNpemUsIG9sZGlvY2ItPnJldHJ5LAorCQkJCQluZGxwLCBuZGxwLT5ubHBfRElELCBFTFNfQ01EX0FDQyk7CisJaWYgKCFlbHNpb2NiKQorCQlyZXR1cm4gMTsKKworCWljbWQgPSAmZWxzaW9jYi0+aW9jYjsKKwlvbGRjbWQgPSAmb2xkaW9jYi0+aW9jYjsKKwlpY21kLT51bHBDb250ZXh0ID0gb2xkY21kLT51bHBDb250ZXh0OwkvKiBYcmkgKi8KKworCXBjbWQgPSAoKChzdHJ1Y3QgbHBmY19kbWFidWYgKikgZWxzaW9jYi0+Y29udGV4dDIpLT52aXJ0KTsKKwkqKCh1aW50MzJfdCAqKSAocGNtZCkpID0gRUxTX0NNRF9BQ0M7CisJcGNtZCArPSBzaXplb2YgKHVpbnQxNl90KTsKKwkqKCh1aW50MTZfdCAqKShwY21kKSkgPSBiZTE2X3RvX2NwdShjbWRzaXplKTsKKwlwY21kICs9IHNpemVvZih1aW50MTZfdCk7CisKKwkvKiBTZXR1cCB0aGUgUlBMIEFDQyBwYXlsb2FkICovCisJcnBsX3JzcC5saXN0TGVuID0gYmUzMl90b19jcHUoMSk7CisJcnBsX3JzcC5pbmRleCA9IDA7CisJcnBsX3JzcC5wb3J0X251bV9ibGsucG9ydE51bSA9IDA7CisJcnBsX3JzcC5wb3J0X251bV9ibGsucG9ydElEID0gYmUzMl90b19jcHUocGhiYS0+ZmNfbXlESUQpOworCW1lbWNweSgmcnBsX3JzcC5wb3J0X251bV9ibGsucG9ydE5hbWUsICZwaGJhLT5mY19wb3J0bmFtZSwKKwkgICAgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKTsKKworCW1lbWNweShwY21kLCAmcnBsX3JzcCwgY21kc2l6ZSAtIHNpemVvZih1aW50MzJfdCkpOworCisKKwkvKiBYbWl0IEVMUyBSUEwgQUNDIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKKwkJCSIlZDowMTI4IFhtaXQgRUxTIFJQTCBBQ0MgcmVzcG9uc2UgdGFnIHgleCAiCisJCQkiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleFxuIiwKKwkJCXBoYmEtPmJyZF9ubywKKwkJCWVsc2lvY2ItPmlvY2IudWxwSW9UYWcsCisJCQllbHNpb2NiLT5pb2NiLnVscENvbnRleHQsIG5kbHAtPm5scF9ESUQsCisJCQluZGxwLT5ubHBfZmxhZywgbmRscC0+bmxwX3N0YXRlLCBuZGxwLT5ubHBfcnBpKTsKKworCWVsc2lvY2ItPmlvY2JfY21wbCA9IGxwZmNfY21wbF9lbHNfYWNjOworCisJcGhiYS0+ZmNfc3RhdC5lbHNYbWl0QUNDKys7CisJaWYgKGxwZmNfc2xpX2lzc3VlX2lvY2IocGhiYSwgcHJpbmcsIGVsc2lvY2IsIDApID09IElPQ0JfRVJST1IpIHsKKwkJbHBmY19lbHNfZnJlZV9pb2NiKHBoYmEsIGVsc2lvY2IpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xwZmNfZWxzX3Jjdl9ycGwoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiLAogCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQogewogCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcGNtZDsKIAl1aW50MzJfdCAqbHA7Ci0JSU9DQl90ICppY21kOwotCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZzsKLQlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7Ci0JUlJRICpycnE7Ci0JdWludDMyX3QgY21kLCBkaWQ7CisJdWludDMyX3QgbWF4c2l6ZTsKKwl1aW50MTZfdCBjbWRzaXplOworCVJQTCAqcnBsOworCXN0cnVjdCBsc19yanQgc3RhdDsKIAotCXBzbGkgPSAmcGhiYS0+c2xpOwotCXByaW5nID0gJnBzbGktPnJpbmdbTFBGQ19GQ1BfUklOR107Ci0JaWNtZCA9ICZjbWRpb2NiLT5pb2NiOwotCWRpZCA9IGljbWQtPnVuLmVsc3JlcTY0LnJlbW90ZUlEOwotCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2ItPmNvbnRleHQyOwotCWxwID0gKHVpbnQzMl90ICopIHBjbWQtPnZpcnQ7Ci0KLQljbWQgPSAqbHArKzsKLQlycnEgPSAoUlJRICopIGxwOwotCi0JLyogUlJRIHJlY2VpdmVkICovCi0JLyogR2V0IG94aWQgLyByeGlkIGZyb20gcGF5bG9hZCBhbmQgYWJvcnQgaXQgKi8KLQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JaWYgKChycnEtPlNJRCA9PSBiZTMyX3RvX2NwdShwaGJhLT5mY19teURJRCkpKSB7Ci0JCWxwZmNfc2xpX2Fib3J0X2lvY2IocGhiYSwgcHJpbmcsIDAsIDAsIHJycS0+T3hpZCwKLQkJCQkJCQlMUEZDX0NUWF9DVFgpOwotCX0gZWxzZSB7Ci0JCWxwZmNfc2xpX2Fib3J0X2lvY2IocGhiYSwgcHJpbmcsIDAsIDAsIHJycS0+UnhpZCwKLQkJCQkJCQlMUEZDX0NUWF9DVFgpOworCWlmICgobmRscC0+bmxwX3N0YXRlICE9IE5MUF9TVEVfVU5NQVBQRURfTk9ERSkgJiYKKwkgICAgKG5kbHAtPm5scF9zdGF0ZSAhPSBOTFBfU1RFX01BUFBFRF9OT0RFKSkgeworCQlzdGF0LnVuLmIubHNSanRSc3ZkMCA9IDA7CisJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOworCQlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfQ0FOVF9HSVZFX0RBVEE7CisJCXN0YXQudW4uYi52ZW5kb3JVbmlxdWUgPSAwOworCQlscGZjX2Vsc19yc3BfcmVqZWN0KHBoYmEsIHN0YXQudW4ubHNSanRFcnJvciwgY21kaW9jYiwgbmRscCk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JLyogQUNDRVBUIHRoZSBycnEgcmVxdWVzdCAqLwotCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOworCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2ItPmNvbnRleHQyOworCWxwID0gKHVpbnQzMl90ICopIHBjbWQtPnZpcnQ7CisJcnBsID0gKFJQTCAqKSAobHAgKyAxKTsKKworCW1heHNpemUgPSBiZTMyX3RvX2NwdShycGwtPm1heHNpemUpOworCisJLyogV2Ugc3VwcG9ydCBvbmx5IG9uZSBwb3J0ICovCisJaWYgKChycGwtPmluZGV4ID09IDApICYmCisJICAgICgobWF4c2l6ZSA9PSAwKSB8fAorCSAgICAgKChtYXhzaXplICogc2l6ZW9mKHVpbnQzMl90KSkgPj0gc2l6ZW9mKFJQTF9SU1ApKSkpIHsKKwkJY21kc2l6ZSA9IHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YoUlBMX1JTUCk7CisJfSBlbHNlIHsKKwkJY21kc2l6ZSA9IHNpemVvZih1aW50MzJfdCkgKyBtYXhzaXplICogc2l6ZW9mKHVpbnQzMl90KTsKKwl9CisJbHBmY19lbHNfcnNwX3JwbF9hY2MocGhiYSwgY21kc2l6ZSwgY21kaW9jYiwgbmRscCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3MjAsNyArMzAxMSw3IEBACiAKIAkvKiBXZSB3aWxsIG9ubHkgc3VwcG9ydCBtYXRjaCBvbiBXV1BOIG9yIFdXTk4gKi8KIAlpZiAoZnAtPk1mbGFncyAmIH4oRkFSUF9NQVRDSF9OT0RFIHwgRkFSUF9NQVRDSF9QT1JUKSkgewotCQlyZXR1cm4gKDApOworCQlyZXR1cm4gMDsKIAl9CiAKIAljbnQgPSAwOwpAQCAtMjc0Myw5ICszMDM0LDEwIEBACiAJCSAgIChuZGxwLT5ubHBfc3RhdGUgPT0gTkxQX1NURV9NQVBQRURfTk9ERSkpIHsKIAkJCS8qIExvZyBiYWNrIGludG8gdGhlIG5vZGUgYmVmb3JlIHNlbmRpbmcgdGhlIEZBUlAuICovCiAJCQlpZiAoZnAtPlJmbGFncyAmIEZBUlBfUkVRVUVTVF9QTE9HSSkgeworCQkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwogCQkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7CiAJCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7Ci0JCQkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscCwgMCk7CisJCQkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscC0+bmxwX0RJRCwgMCk7CiAJCQl9CiAKIAkJCS8qIFNlbmQgYSBGQVJQIHJlc3BvbnNlIHRvIHRoYXQgbm9kZSAqLwpAQCAtMjc1NCw3ICszMDQ2LDcgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNzg3LDQ3ICszMDc5LDg5IEBACiAKIHN0YXRpYyBpbnQKIGxwZmNfZWxzX3Jjdl9mYW4oc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiLAotCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwKQorCQkgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBmYW5fbmRscCkKIHsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKnBjbWQ7CiAJdWludDMyX3QgKmxwOwogCUlPQ0JfdCAqaWNtZDsKLQlGQU4gKmZwOwogCXVpbnQzMl90IGNtZCwgZGlkOworCUZBTiAqZnA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsICpuZXh0X25kbHA7CisKKwkvKiBGQU4gcmVjZWl2ZWQgKi8KKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLCAiJWQ6MjY1IEZBTiByZWNlaXZlZFxuIiwKKwkJCQkJCQkJcGhiYS0+YnJkX25vKTsKIAogCWljbWQgPSAmY21kaW9jYi0+aW9jYjsKIAlkaWQgPSBpY21kLT51bi5lbHNyZXE2NC5yZW1vdGVJRDsKLQlwY21kID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBjbWRpb2NiLT5jb250ZXh0MjsKLQlscCA9ICh1aW50MzJfdCAqKSBwY21kLT52aXJ0OworCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopY21kaW9jYi0+Y29udGV4dDI7CisJbHAgPSAodWludDMyX3QgKilwY21kLT52aXJ0OwogCiAJY21kID0gKmxwKys7Ci0JZnAgPSAoRkFOICopIGxwOworCWZwID0gKEZBTiAqKWxwOwogCi0JLyogRkFOIHJlY2VpdmVkICovCi0KLQkvKiBBQ0NFUFQgdGhlIEZBTiByZXF1ZXN0ICovCi0JbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CisJLyogRkFOIHJlY2VpdmVkOyBGYW4gZG9lcyBub3QgaGF2ZSBhIHJlcGx5IHNlcXVlbmNlICovCiAKIAlpZiAocGhiYS0+aGJhX3N0YXRlID09IExQRkNfTE9DQUxfQ0ZHX0xJTkspIHsKLQkJLyogVGhlIGRpc2NvdmVyeSBzdGF0ZSBtYWNoaW5lIG5lZWRzIHRvIHRha2UgYSBkaWZmZXJlbnQKLQkJICogYWN0aW9uIGlmIHRoaXMgbm9kZSBoYXMgc3dpdGNoZWQgZmFicmljcwotCQkgKi8KLQkJaWYgKChtZW1jbXAoJmZwLT5GcG9ydE5hbWUsICZwaGJhLT5mY19mYWJwYXJhbS5wb3J0TmFtZSwKLQkJCSAgICBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpKSAhPSAwKQotCQkgICAgfHwKLQkJICAgIChtZW1jbXAoJmZwLT5Gbm9kZU5hbWUsICZwaGJhLT5mY19mYWJwYXJhbS5ub2RlTmFtZSwKLQkJCSAgICBzaXplb2YgKHN0cnVjdCBscGZjX25hbWUpKSAhPSAwKSkgewotCQkJLyogVGhpcyBub2RlIGhhcyBzd2l0Y2hlZCBmYWJyaWNzLiAgQW4gRkxPR0kgaXMgcmVxdWlyZWQKLQkJCSAqIGFmdGVyIHRoZSB0aW1lb3V0CisJCWlmICgobWVtY21wKCZwaGJhLT5mY19mYWJwYXJhbS5ub2RlTmFtZSwgJmZwLT5Gbm9kZU5hbWUsCisJCQlzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpICE9IDApIHx8CisJCSAgICAobWVtY21wKCZwaGJhLT5mY19mYWJwYXJhbS5wb3J0TmFtZSwgJmZwLT5GcG9ydE5hbWUsCisJCQlzaXplb2Yoc3RydWN0IGxwZmNfbmFtZSkpICE9IDApKSB7CisJCQkvKgorCQkJICogVGhpcyBub2RlIGhhcyBzd2l0Y2hlZCBmYWJyaWNzLiAgRkxPR0kgaXMgcmVxdWlyZWQKKwkJCSAqIENsZWFuIHVwIHRoZSBvbGQgcnBpJ3MKIAkJCSAqLwotCQkJcmV0dXJuICgwKTsKKworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwKKwkJCQkmcGhiYS0+ZmNfbnByX2xpc3QsIG5scF9saXN0cCkgeworCisJCQkJaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykgeworCQkJCQkvKgorCQkJCQkgKiBDbGVhbiB1cCBvbGQgRmFicmljLCBOYW1lc2VydmVyIGFuZAorCQkJCQkgKiBvdGhlciBOTFBfRkFCUklDIGxvZ2lucworCQkJCQkgKi8KKwkJCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCQkJfSBlbHNlIGlmICghKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl9BRElTQykpIHsKKwkJCQkJLyogRmFpbCBvdXRzdGFuZGluZyBJL08gbm93IHNpbmNlIHRoaXMKKwkJCQkJICogZGV2aWNlIGlzIG1hcmtlZCBmb3IgUExPR0kKKwkJCQkJICovCisJCQkJCWxwZmNfdW5yZWdfcnBpKHBoYmEsIG5kbHApOworCQkJCX0KKwkJCX0KKworCQkJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19GTE9HSTsKKwkJCWxwZmNfc2V0X2Rpc2N0bW8ocGhiYSk7CisJCQlscGZjX2luaXRpYWxfZmxvZ2kocGhiYSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKiBEaXNjb3Zlcnkgbm90IG5lZWRlZCwKKwkJICogbW92ZSB0aGUgbm9kZXMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuCisJCSAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbnByX2xpc3QsCisJCQlubHBfbGlzdHApIHsKKworCQkJc3dpdGNoIChuZGxwLT5ubHBfcHJldl9zdGF0ZSkgeworCQkJY2FzZSBOTFBfU1RFX1VOTUFQUEVEX05PREU6CisJCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOworCQkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfVU5NQVBQRURfTk9ERTsKKwkJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTk1BUFBFRF9MSVNUKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBOTFBfU1RFX01BUFBFRF9OT0RFOgorCQkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKKwkJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX01BUFBFRF9OT0RFOworCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX01BUFBFRF9MSVNUKTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCi0JCS8qIFN0YXJ0IGRpc2NvdmVyeSAqLworCQkvKiBTdGFydCBkaXNjb3ZlcnkgLSB0aGlzIHNob3VsZCBqdXN0IGRvIENMRUFSX0xBICovCiAJCWxwZmNfZGlzY19zdGFydChwaGJhKTsKIAl9Ci0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiB2b2lkCkBAIC0yOTA0LDggKzMyMzgsOSBAQAogCiAJCWlmIChjbWQtPnVscENvbW1hbmQgPT0gQ01EX0dFTl9SRVFVRVNUNjRfQ1IpIHsKIAkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwotCisJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJCW5kbHAgPSBscGZjX2ZpbmRub2RlX3JwaShwaGJhLCBjbWQtPnVscENvbnRleHQpOworCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJcmVtb3RlX0lEID0gbmRscC0+bmxwX0RJRDsKIAkJCWlmIChjbWQtPnVuLmVsc3JlcTY0LmJkbC51bHBJb1RhZzMyKSB7CiAJCQkJbHBmY19zbGlfaXNzdWVfYWJvcnRfaW90YWczMihwaGJhLApAQCAtMjk1MCw3ICszMjg1LDYgQEAKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKnBjbWQ7CiAJdWludDMyX3QgKmVsc2NtZDsKIAl1aW50MzJfdCBlbHNfY29tbWFuZDsKLQl1aW50MzJfdCByZW1vdGVfSUQ7CiAKIAlwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC0yOTczLDE4ICszMzA3LDYgQEAKIAkJZWxzY21kID0gKHVpbnQzMl90ICopIChwY21kLT52aXJ0KTsKIAkJZWxzX2NvbW1hbmQgPSAqZWxzY21kOwogCi0JCWlmIChjbWQtPnVscENvbW1hbmQgPT0gQ01EX0dFTl9SRVFVRVNUNjRfQ1IpIHsKLQkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwotCi0JCQluZGxwID0gbHBmY19maW5kbm9kZV9ycGkocGhiYSwgY21kLT51bHBDb250ZXh0KTsKLQkJCXJlbW90ZV9JRCA9IG5kbHAtPm5scF9ESUQ7Ci0JCQlpZiAocGhiYS0+aGJhX3N0YXRlID09IExQRkNfSEJBX1JFQURZKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZW1vdGVfSUQgPSBjbWQtPnVuLmVsc3JlcTY0LnJlbW90ZUlEOwotCQl9Ci0KIAkJbGlzdF9kZWwoJnBpb2NiLT5saXN0KTsKIAkJcHJpbmctPnR4Y21wbHFfY250LS07CiAKQEAgLTI5OTUsOCArMzMxNyw3IEBACiAJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJCShwaW9jYi0+aW9jYl9jbXBsKSAocGhiYSwgcGlvY2IsIHBpb2NiKTsKIAkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJfQotCQllbHNlCisJCX0gZWxzZQogCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBwaW9jYik7CiAJfQogCkBAIC0zMDEwLDE4ICszMzMxLDYgQEAKIAkJZWxzY21kID0gKHVpbnQzMl90ICopIChwY21kLT52aXJ0KTsKIAkJZWxzX2NvbW1hbmQgPSAqZWxzY21kOwogCi0JCWlmIChjbWQtPnVscENvbW1hbmQgPT0gQ01EX0dFTl9SRVFVRVNUNjRfQ1IpIHsKLQkJCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwotCi0JCQluZGxwID0gbHBmY19maW5kbm9kZV9ycGkocGhiYSwgY21kLT51bHBDb250ZXh0KTsKLQkJCXJlbW90ZV9JRCA9IG5kbHAtPm5scF9ESUQ7Ci0JCQlpZiAocGhiYS0+aGJhX3N0YXRlID09IExQRkNfSEJBX1JFQURZKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZW1vdGVfSUQgPSBjbWQtPnVuLmVsc3JlcTY0LnJlbW90ZUlEOwotCQl9Ci0KIAkJbGlzdF9kZWwoJnBpb2NiLT5saXN0KTsKIAkJcHJpbmctPnR4Y21wbHFfY250LS07CiAKQEAgLTMwMzIsOCArMzM0MSw3IEBACiAJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJCShwaW9jYi0+aW9jYl9jbXBsKSAocGhiYSwgcGlvY2IsIHBpb2NiKTsKIAkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJfQotCQllbHNlCisJCX0gZWxzZQogCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBwaW9jYik7CiAJfQogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtMzEwNSwxMCArMzQxMywxMSBAQAogCX0KIAogCWRpZCA9IGljbWQtPnVuLnJjdmVscy5yZW1vdGVJRDsKLQlpZiAoKG5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgZGlkKSkgPT0gMCkgeworCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgZGlkKTsKKwlpZiAoIW5kbHApIHsKIAkJLyogQ2Fubm90IGZpbmQgZXhpc3RpbmcgRmFicmljIG5kbHAsIHNvIGFsbG9jYXRlIGEgbmV3IG9uZSAqLwotCQlpZiAoKG5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCkpCi0JCSAgICA9PSAwKSB7CisJCW5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CisJCWlmICghbmRscCkgewogCQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKIAkJCWtmcmVlKG1wKTsKIAkJCWRyb3BfY21kID0gMTsKQEAgLTMyMDEsMTAgKzM1MTAsNiBAQAogCQlwaGJhLT5mY19zdGF0LmVsc1JjdkZBTisrOwogCQlscGZjX2Vsc19yY3ZfZmFuKHBoYmEsIGVsc2lvY2IsIG5kbHApOwogCQlicmVhazsKLQljYXNlIEVMU19DTURfUlJROgotCQlwaGJhLT5mY19zdGF0LmVsc1JjdlJSUSsrOwotCQlscGZjX2Vsc19yY3ZfcnJxKHBoYmEsIGVsc2lvY2IsIG5kbHApOwotCQlicmVhazsKIAljYXNlIEVMU19DTURfUFJMSToKIAkJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZQUkxJKys7CiAJCWlmIChwaGJhLT5oYmFfc3RhdGUgPCBMUEZDX0RJU0NfQVVUSCkgewpAQCAtMzIxMyw5ICszNTE4LDMzIEBACiAJCX0KIAkJbHBmY19kaXNjX3N0YXRlX21hY2hpbmUocGhiYSwgbmRscCwgZWxzaW9jYiwgTkxQX0VWVF9SQ1ZfUFJMSSk7CiAJCWJyZWFrOworCWNhc2UgRUxTX0NNRF9MSVJSOgorCQlwaGJhLT5mY19zdGF0LmVsc1JjdkxJUlIrKzsKKwkJbHBmY19lbHNfcmN2X2xpcnIocGhiYSwgZWxzaW9jYiwgbmRscCk7CisJCWlmIChuZXdub2RlKSB7CisJCQltZW1wb29sX2ZyZWUoIG5kbHAsIHBoYmEtPm5scF9tZW1fcG9vbCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFTFNfQ01EX1JQUzoKKwkJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZSUFMrKzsKKwkJbHBmY19lbHNfcmN2X3JwcyhwaGJhLCBlbHNpb2NiLCBuZGxwKTsKKwkJaWYgKG5ld25vZGUpIHsKKwkJCW1lbXBvb2xfZnJlZSggbmRscCwgcGhiYS0+bmxwX21lbV9wb29sKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVMU19DTURfUlBMOgorCQlwaGJhLT5mY19zdGF0LmVsc1JjdlJQTCsrOworCQlscGZjX2Vsc19yY3ZfcnBsKHBoYmEsIGVsc2lvY2IsIG5kbHApOworCQlpZiAobmV3bm9kZSkgeworCQkJbWVtcG9vbF9mcmVlKCBuZGxwLCBwaGJhLT5ubHBfbWVtX3Bvb2wpOworCQl9CisJCWJyZWFrOwogCWNhc2UgRUxTX0NNRF9STklEOgogCQlwaGJhLT5mY19zdGF0LmVsc1JjdlJOSUQrKzsKIAkJbHBmY19lbHNfcmN2X3JuaWQocGhiYSwgZWxzaW9jYiwgbmRscCk7CisJCWlmIChuZXdub2RlKSB7CisJCQltZW1wb29sX2ZyZWUoIG5kbHAsIHBoYmEtPm5scF9tZW1fcG9vbCk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogVW5zdXBwb3J0ZWQgRUxTIGNvbW1hbmQsIHJlamVjdCAqLwpAQCAtMzI0OSw4ICszNTc4LDkgQEAKIAlpZiAoZHJvcF9jbWQgPT0gMSkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19FTFMsCiAJCQkJIiVkOjAxMTEgRHJvcHBpbmcgcmVjZWl2ZWQgRUxTIGNtZCAiCi0JCQkJIkRhdGE6IHgleCB4JXhcbiIsIHBoYmEtPmJyZF9ubywKLQkJCQlpY21kLT51bHBTdGF0dXMsIGljbWQtPnVuLnVscFdvcmRbNF0pOworCQkJCSJEYXRhOiB4JXggeCV4IHgleFxuIiwgcGhiYS0+YnJkX25vLAorCQkJCWljbWQtPnVscFN0YXR1cywgaWNtZC0+dW4udWxwV29yZFs0XSwKKwkJCQlpY21kLT51bHBUaW1lb3V0KTsKIAkJcGhiYS0+ZmNfc3RhdC5lbHNSY3ZEcm9wKys7CiAJfQogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKaW5kZXggYTFmNzUxZS4uNjcyMWU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTU5LDYgKzU5LDcgQEAKIHN0YXRpYyB2b2lkCiBscGZjX3Byb2Nlc3Nfbm9kZXZfdGltZW91dChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwKQogeworCXVpbnQ4X3QgKm5hbWUgPSAodWludDhfdCAqKSZuZGxwLT5ubHBfcG9ydG5hbWU7CiAJaW50IHdhcm5fb24gPSAwOwogCiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtNjcsNiArNjgsMTUgQEAKIAkJcmV0dXJuOwogCX0KIAorCS8qCisJICogSWYgYSBkaXNjb3ZlcnkgZXZlbnQgcmVhZGRlZCBub2Rldl90aW1lciBhZnRlciB0aW1lcgorCSAqIGZpcmluZyBhbmQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHRpbWVyLCBjYW5jZWwgdGhlCisJICogbmxwX3Rtb2Z1bmMuCisJICovCisJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJZGVsX3RpbWVyX3N5bmMoJm5kbHAtPm5scF90bW9mdW5jKTsKKwlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisKIAluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05PREVWX1RNTzsKIAogCWlmIChuZGxwLT5ubHBfc2lkICE9IE5MUF9OT19TSUQpIHsKQEAgLTc5LDE1ICs4OSwyMyBAQAogCiAJaWYgKHdhcm5fb24pIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAotCQkJCSIlZDowMjAzIE5vZGV2IHRpbWVvdXQgb24gTlBvcnQgeCV4ICIKLQkJCQkiRGF0YTogeCV4IHgleCB4JXhcbiIsCi0JCQkJcGhiYS0+YnJkX25vLCBuZGxwLT5ubHBfRElELCBuZGxwLT5ubHBfZmxhZywKKwkJCQkiJWQ6MDIwMyBOb2RldiB0aW1lb3V0IG9uICIKKwkJCQkiV1dQTiAleDoleDoleDoleDoleDoleDoleDoleCAiCisJCQkJIk5Qb3J0IHgleCBEYXRhOiB4JXggeCV4IHgleFxuIiwKKwkJCQlwaGJhLT5icmRfbm8sCisJCQkJKm5hbWUsICoobmFtZSsxKSwgKihuYW1lKzIpLCAqKG5hbWUrMyksCisJCQkJKihuYW1lKzQpLCAqKG5hbWUrNSksICoobmFtZSs2KSwgKihuYW1lKzcpLAorCQkJCW5kbHAtPm5scF9ESUQsIG5kbHAtPm5scF9mbGFnLAogCQkJCW5kbHAtPm5scF9zdGF0ZSwgbmRscC0+bmxwX3JwaSk7CiAJfSBlbHNlIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0RJU0NPVkVSWSwKLQkJCQkiJWQ6MDIwNCBOb2RldiB0aW1lb3V0IG9uIE5Qb3J0IHgleCAiCi0JCQkJIkRhdGE6IHgleCB4JXggeCV4XG4iLAotCQkJCXBoYmEtPmJyZF9ubywgbmRscC0+bmxwX0RJRCwgbmRscC0+bmxwX2ZsYWcsCisJCQkJIiVkOjAyMDQgTm9kZXYgdGltZW91dCBvbiAiCisJCQkJIldXUE4gJXg6JXg6JXg6JXg6JXg6JXg6JXg6JXggIgorCQkJCSJOUG9ydCB4JXggRGF0YTogeCV4IHgleCB4JXhcbiIsCisJCQkJcGhiYS0+YnJkX25vLAorCQkJCSpuYW1lLCAqKG5hbWUrMSksICoobmFtZSsyKSwgKihuYW1lKzMpLAorCQkJCSoobmFtZSs0KSwgKihuYW1lKzUpLCAqKG5hbWUrNiksICoobmFtZSs3KSwKKwkJCQluZGxwLT5ubHBfRElELCBuZGxwLT5ubHBfZmxhZywKIAkJCQluZGxwLT5ubHBfc3RhdGUsIG5kbHAtPm5scF9ycGkpOwogCX0KIApAQCAtMTA4LDcgKzEyNiw3IEBACiAJCQkJIGV2dF9saXN0cCk7CiAJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQlmcmVlX2V2dCA9IDE7Ci0JCXN3aXRjaChldnRwLT5ldnQpIHsKKwkJc3dpdGNoIChldnRwLT5ldnQpIHsKIAkJY2FzZSBMUEZDX0VWVF9OT0RFVl9UTU86CiAJCQluZGxwID0gKHN0cnVjdCBscGZjX25vZGVsaXN0ICopKGV2dHAtPmV2dF9hcmcxKTsKIAkJCWxwZmNfcHJvY2Vzc19ub2Rldl90aW1lb3V0KHBoYmEsIG5kbHApOwpAQCAtMTIwLDExICsxMzgsMzUgQEAKIAkJCWZyZWVfZXZ0ID0gMDsKIAkJCWJyZWFrOwogCQljYXNlIExQRkNfRVZUX09OTElORToKLQkJCSooaW50ICopKGV2dHAtPmV2dF9hcmcxKSAgPSBscGZjX29ubGluZShwaGJhKTsKKwkJCWlmIChwaGJhLT5oYmFfc3RhdGUgPCBMUEZDX0xJTktfRE9XTikKKwkJCQkqKGludCAqKShldnRwLT5ldnRfYXJnMSkgID0gbHBmY19vbmxpbmUocGhiYSk7CisJCQllbHNlCisJCQkJKihpbnQgKikoZXZ0cC0+ZXZ0X2FyZzEpICA9IDA7CiAJCQljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24gKikoZXZ0cC0+ZXZ0X2FyZzIpKTsKIAkJCWJyZWFrOwogCQljYXNlIExQRkNfRVZUX09GRkxJTkU6Ci0JCQkqKGludCAqKShldnRwLT5ldnRfYXJnMSkgID0gbHBmY19vZmZsaW5lKHBoYmEpOworCQkJaWYgKHBoYmEtPmhiYV9zdGF0ZSA+PSBMUEZDX0xJTktfRE9XTikKKwkJCQlscGZjX29mZmxpbmUocGhiYSk7CisJCQlscGZjX3NsaV9icmRyZXN0YXJ0KHBoYmEpOworCQkJKihpbnQgKikoZXZ0cC0+ZXZ0X2FyZzEpID0KKwkJCQlscGZjX3NsaV9icmRyZWFkeShwaGJhLEhTX0ZGUkRZIHwgSFNfTUJSRFkpOworCQkJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopKGV2dHAtPmV2dF9hcmcyKSk7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX0VWVF9XQVJNX1NUQVJUOgorCQkJaWYgKHBoYmEtPmhiYV9zdGF0ZSA+PSBMUEZDX0xJTktfRE9XTikKKwkJCQlscGZjX29mZmxpbmUocGhiYSk7CisJCQlscGZjX3Jlc2V0X2JhcnJpZXIocGhiYSk7CisJCQlscGZjX3NsaV9icmRyZXNldChwaGJhKTsKKwkJCWxwZmNfaGJhX2Rvd25fcG9zdChwaGJhKTsKKwkJCSooaW50ICopKGV2dHAtPmV2dF9hcmcxKSA9CisJCQkJbHBmY19zbGlfYnJkcmVhZHkocGhiYSwgSFNfTUJSRFkpOworCQkJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopKGV2dHAtPmV2dF9hcmcyKSk7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX0VWVF9LSUxMOgorCQkJaWYgKHBoYmEtPmhiYV9zdGF0ZSA+PSBMUEZDX0xJTktfRE9XTikKKwkJCQlscGZjX29mZmxpbmUocGhiYSk7CisJCQkqKGludCAqKShldnRwLT5ldnRfYXJnMSkKKwkJCQk9IChwaGJhLT5zdG9wcGVkKSA/IDAgOiBscGZjX3NsaV9icmRraWxsKHBoYmEpOwogCQkJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopKGV2dHAtPmV2dF9hcmcyKSk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTUxLDEzICsxOTMsMTMgQEAKIAl3b3JrX2hiYV9ldmVudHM9cGhiYS0+d29ya19oYmFfZXZlbnRzOwogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCi0JaWYoaGFfY29weSAmIEhBX0VSQVRUKQorCWlmIChoYV9jb3B5ICYgSEFfRVJBVFQpCiAJCWxwZmNfaGFuZGxlX2VyYXR0KHBoYmEpOwogCi0JaWYoaGFfY29weSAmIEhBX01CQVRUKQorCWlmIChoYV9jb3B5ICYgSEFfTUJBVFQpCiAJCWxwZmNfc2xpX2hhbmRsZV9tYl9ldmVudChwaGJhKTsKIAotCWlmKGhhX2NvcHkgJiBIQV9MQVRUKQorCWlmIChoYV9jb3B5ICYgSEFfTEFUVCkKIAkJbHBmY19oYW5kbGVfbGF0dChwaGJhKTsKIAogCWlmICh3b3JrX2hiYV9ldmVudHMgJiBXT1JLRVJfRElTQ19UTU8pCkBAIC0yODMsMTYgKzMyNSwyMCBAQAogewogCXN0cnVjdCBscGZjX3NsaSAgICAgICAqcHNsaTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAgKm5kbHAsICpuZXh0X25kbHA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdHA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9saXN0WzddOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RwLCAqbm9kZV9saXN0WzddOwogCUxQRkNfTUJPWFFfdCAgICAgKm1iOwogCWludCAgICAgICAgICAgICAgIHJjLCBpOwogCiAJcHNsaSA9ICZwaGJhLT5zbGk7CisJLyogc3lzZnMgb3Igc2VsZWN0aXZlIHJlc2V0IG1heSBjYWxsIHRoaXMgcm91dGluZSB0byBjbGVhbiB1cCAqLworCWlmIChwaGJhLT5oYmFfc3RhdGUgPj0gTFBGQ19MSU5LX0RPV04pIHsKKwkJaWYgKHBoYmEtPmhiYV9zdGF0ZSA9PSBMUEZDX0xJTktfRE9XTikKKwkJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfTElOS19ET1dOOwotCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfTElOS19ET1dOOworCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwl9CiAKIAkvKiBDbGVhbiB1cCBhbnkgZmlybXdhcmUgZGVmYXVsdCBycGkncyAqLwogCWlmICgobWIgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpKSkgewpAQCAtMzI0LDMyICszNzAsMTkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsIGxpc3RwLCBubHBfbGlzdHApIHsKLQkJCS8qIEZhYnJpYyBub2RlcyBhcmUgbm90IGhhbmRsZWQgdGhydSBzdGF0ZSBtYWNoaW5lIGZvcgotCQkJICAgbGluayBkb3duICovCi0JCQlpZiAobmRscC0+bmxwX3R5cGUgJiBOTFBfRkFCUklDKSB7Ci0JCQkJLyogUmVtb3ZlIEFMTCBGYWJyaWMgbm9kZXMgZXhjZXB0IEZhYnJpY19ESUQgKi8KLQkJCQlpZiAobmRscC0+bmxwX0RJRCAhPSBGYWJyaWNfRElEKSB7Ci0JCQkJCS8qIFRha2UgaXQgb2ZmIGN1cnJlbnQgbGlzdCBhbmQgZnJlZSAqLwotCQkJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsCi0JCQkJCQlOTFBfTk9fTElTVCk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7CiAKLQkJCQlyYyA9IGxwZmNfZGlzY19zdGF0ZV9tYWNoaW5lKHBoYmEsIG5kbHAsIE5VTEwsCi0JCQkJCQkgICAgIE5MUF9FVlRfREVWSUNFX1JFQ09WRVJZKTsKKwkJCXJjID0gbHBmY19kaXNjX3N0YXRlX21hY2hpbmUocGhiYSwgbmRscCwgTlVMTCwKKwkJCQkJICAgICBOTFBfRVZUX0RFVklDRV9SRUNPVkVSWSk7CiAKLQkJCQkvKiBDaGVjayBjb25maWcgcGFyYW1ldGVyIHVzZS1hZGlzYyBvciBGQ1AtMiAqLwotCQkJCWlmICgocmMgIT0gTkxQX1NURV9GUkVFRF9OT0RFKSAmJgotCQkJCQkocGhiYS0+Y2ZnX3VzZV9hZGlzYyA9PSAwKSAmJgotCQkJCQkhKG5kbHAtPm5scF9mY3BfaW5mbyAmCi0JCQkJCQlOTFBfRkNQXzJfREVWSUNFKSkgewotCQkJCQkvKiBXZSBrbm93IHdlIHdpbGwgaGF2ZSB0byByZWxvZ2luLCBzbwotCQkJCQkgKiB1bnJlZ2xvZ2luIHRoZSBycGkgcmlnaHQgbm93IHRvIGZhaWwKLQkJCQkJICogYW55IG91dHN0YW5kaW5nIEkvT3MgcXVpY2tseS4KLQkJCQkJICovCi0JCQkJCWxwZmNfdW5yZWdfcnBpKHBoYmEsIG5kbHApOwotCQkJCX0KKwkJCS8qIENoZWNrIGNvbmZpZyBwYXJhbWV0ZXIgdXNlLWFkaXNjIG9yIEZDUC0yICovCisJCQlpZiAoKHJjICE9IE5MUF9TVEVfRlJFRURfTk9ERSkgJiYKKwkJCQkocGhiYS0+Y2ZnX3VzZV9hZGlzYyA9PSAwKSAmJgorCQkJCSEobmRscC0+bmxwX2ZjcF9pbmZvICYgTkxQX0ZDUF8yX0RFVklDRSkpIHsKKwkJCQkvKiBXZSBrbm93IHdlIHdpbGwgaGF2ZSB0byByZWxvZ2luLCBzbworCQkJCSAqIHVucmVnbG9naW4gdGhlIHJwaSByaWdodCBub3cgdG8gZmFpbAorCQkJCSAqIGFueSBvdXRzdGFuZGluZyBJL09zIHF1aWNrbHkuCisJCQkJICovCisJCQkJbHBmY191bnJlZ19ycGkocGhiYSwgbmRscCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zODQsMTMgKzQxNywxNSBAQAogCWxwZmNfY2FuX2Rpc2N0bW8ocGhiYSk7CiAKIAkvKiBNdXN0IHByb2Nlc3MgSU9DQnMgb24gYWxsIHJpbmdzIHRvIGhhbmRsZSBBQk9SVGVkIEkvT3MgKi8KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CiBscGZjX2xpbmt1cChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQogewogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCAqbmV4dF9uZGxwOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RwLCAqbm9kZV9saXN0WzddOworCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfTElOS19VUDsKQEAgLTQwMSwxNCArNDM2LDMzIEBACiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAotCS8qCi0JICogQ2xlYW4gdXAgb2xkIEZhYnJpYyBOTFBfRkFCUklDIGxvZ2lucy4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbmxwdW5tYXBfbGlzdCwKLQkJCQlubHBfbGlzdHApIHsKLQkJaWYgKG5kbHAtPm5scF9ESUQgPT0gRmFicmljX0RJRCkgewotCQkJLyogVGFrZSBpdCBvZmYgY3VycmVudCBsaXN0IGFuZCBmcmVlICovCi0JCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKKwlub2RlX2xpc3RbMF0gPSAmcGhiYS0+ZmNfcGxvZ2lfbGlzdDsKKwlub2RlX2xpc3RbMV0gPSAmcGhiYS0+ZmNfYWRpc2NfbGlzdDsKKwlub2RlX2xpc3RbMl0gPSAmcGhiYS0+ZmNfcmVnbG9naW5fbGlzdDsKKwlub2RlX2xpc3RbM10gPSAmcGhiYS0+ZmNfcHJsaV9saXN0OworCW5vZGVfbGlzdFs0XSA9ICZwaGJhLT5mY19ubHB1bm1hcF9saXN0OworCW5vZGVfbGlzdFs1XSA9ICZwaGJhLT5mY19ubHBtYXBfbGlzdDsKKwlub2RlX2xpc3RbNl0gPSAmcGhiYS0+ZmNfbnByX2xpc3Q7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlsaXN0cCA9IG5vZGVfbGlzdFtpXTsKKwkJaWYgKGxpc3RfZW1wdHkobGlzdHApKQorCQkJY29udGludWU7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5kbHAsIG5leHRfbmRscCwgbGlzdHAsIG5scF9saXN0cCkgeworCQkJaWYgKHBoYmEtPmZjX2ZsYWcgJiBGQ19MQklUKSB7CisJCQkJaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykgeworCQkJCQkvKiBPbiBMaW5rdXAgaXRzIHNhZmUgdG8gY2xlYW4gdXAgdGhlCisJCQkJCSAqIG5kbHAgZnJvbSBGYWJyaWMgY29ubmVjdGlvbnMuCisJCQkJCSAqLworCQkJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsCisJCQkJCQkJTkxQX1VOVVNFRF9MSVNUKTsKKwkJCQl9IGVsc2UgaWYgKCEobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSkgeworCQkJCQkvKiBGYWlsIG91dHN0YW5kaW5nIElPIG5vdyBzaW5jZSBkZXZpY2UKKwkJCQkJICogaXMgbWFya2VkIGZvciBQTE9HSS4KKwkJCQkJICovCisJCQkJCWxwZmNfdW5yZWdfcnBpKHBoYmEsIG5kbHApOworCQkJCX0KKwkJCX0KIAkJfQogCX0KIApAQCAtNDYyLDcgKzUxNiw3IEBACiAJCWxwZmNfZWxzX2Rpc2NfcGxvZ2kocGhiYSk7CiAJfQogCi0JaWYoIXBoYmEtPm51bV9kaXNjX25vZGVzKSB7CisJaWYgKCFwaGJhLT5udW1fZGlzY19ub2RlcykgewogCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCXBoYmEtPmZjX2ZsYWcgJj0gfkZDX05ESVNDX0FDVElWRTsKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CkBAIC01MDQsODAgKzU1OCw1OSBAQAogfQogCiBzdGF0aWMgdm9pZAotbHBmY19tYnhfY21wbF9jb25maWdfbGluayhzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBwbWIpCitscGZjX21ieF9jbXBsX2xvY2FsX2NvbmZpZ19saW5rKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIpCiB7Ci0Jc3RydWN0IGxwZmNfc2xpICpwc2xpOwotCU1BSUxCT1hfdCAqbWI7CisJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKKwlpbnQgcmM7CiAKLQlwc2xpID0gJnBoYmEtPnNsaTsKLQltYiA9ICZwbWItPm1iOwotCS8qIENoZWNrIGZvciBlcnJvciAqLwotCWlmIChtYi0+bWJ4U3RhdHVzKSB7Ci0JCS8qIENPTkZJR19MSU5LIG1ib3ggZXJyb3IgPG1ieFN0YXR1cz4gc3RhdGUgPGhiYV9zdGF0ZT4gKi8KLQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCwKLQkJCQkiJWQ6MDMwNiBDT05GSUdfTElOSyBtYnhTdGF0dXMgZXJyb3IgeCV4ICIKLQkJCQkiSEJBIHN0YXRlIHgleFxuIiwKLQkJCQlwaGJhLT5icmRfbm8sIG1iLT5tYnhTdGF0dXMsIHBoYmEtPmhiYV9zdGF0ZSk7Ci0KLQkJbHBmY19saW5rZG93bihwaGJhKTsKLQkJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJaWYgKHBtYi0+bWIubWJ4U3RhdHVzKQogCQlnb3RvIG91dDsKLQl9CiAKLQlpZiAocGhiYS0+aGJhX3N0YXRlID09IExQRkNfTE9DQUxfQ0ZHX0xJTkspIHsKLQkJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1ApIHsKLQkJCS8qIElmIHdlIGFyZSBwdWJsaWMgbG9vcCBhbmQgTCBiaXQgd2FzIHNldCAqLwotCQkJaWYgKChwaGJhLT5mY19mbGFnICYgRkNfUFVCTElDX0xPT1ApICYmCi0JCQkgICAgIShwaGJhLT5mY19mbGFnICYgRkNfTEJJVCkpIHsKLQkJCQkvKiBOZWVkIHRvIHdhaXQgZm9yIEZBTiAtIHVzZSBkaXNjb3ZlcnkgdGltZXIKLQkJCQkgKiBmb3IgdGltZW91dC4gIGhiYV9zdGF0ZSBpcyBpZGVudGljYWxseQotCQkJCSAqIExQRkNfTE9DQUxfQ0ZHX0xJTksgd2hpbGUgd2FpdGluZyBmb3IgRkFOCi0JCQkJICovCi0JCQkJbHBmY19zZXRfZGlzY3RtbyhwaGJhKTsKLQkJCQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCQkJcmV0dXJuOwotCQkJfQorCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCisJaWYgKHBoYmEtPmZjX3RvcG9sb2d5ID09IFRPUE9MT0dZX0xPT1AgJiYKKwkJcGhiYS0+ZmNfZmxhZyAmIEZDX1BVQkxJQ19MT09QICYmCisJCSAhKHBoYmEtPmZjX2ZsYWcgJiBGQ19MQklUKSkgeworCQkJLyogTmVlZCB0byB3YWl0IGZvciBGQU4gLSB1c2UgZGlzY292ZXJ5IHRpbWVyCisJCQkgKiBmb3IgdGltZW91dC4gIGhiYV9zdGF0ZSBpcyBpZGVudGljYWxseQorCQkJICogTFBGQ19MT0NBTF9DRkdfTElOSyB3aGlsZSB3YWl0aW5nIGZvciBGQU4KKwkJCSAqLworCQkJbHBmY19zZXRfZGlzY3RtbyhwaGJhKTsKKwkJCXJldHVybjsKIAkJfQogCi0JCS8qIFN0YXJ0IGRpc2NvdmVyeSBieSBzZW5kaW5nIGEgRkxPR0kgaGJhX3N0YXRlIGlzIGlkZW50aWNhbGx5Ci0JCSAqIExQRkNfRkxPR0kgd2hpbGUgd2FpdGluZyBmb3IgRkxPR0kgY21wbAotCQkgKi8KLQkJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19GTE9HSTsKLQkJbHBmY19zZXRfZGlzY3RtbyhwaGJhKTsKLQkJbHBmY19pbml0aWFsX2Zsb2dpKHBoYmEpOwotCQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHBoYmEtPmhiYV9zdGF0ZSA9PSBMUEZDX0ZBQlJJQ19DRkdfTElOSykgewotCQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCXJldHVybjsKLQl9CisJLyogU3RhcnQgZGlzY292ZXJ5IGJ5IHNlbmRpbmcgYSBGTE9HSS4gaGJhX3N0YXRlIGlzIGlkZW50aWNhbGx5CisJICogTFBGQ19GTE9HSSB3aGlsZSB3YWl0aW5nIGZvciBGTE9HSSBjbXBsCisJICovCisJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19GTE9HSTsKKwlscGZjX3NldF9kaXNjdG1vKHBoYmEpOworCWxwZmNfaW5pdGlhbF9mbG9naShwaGJhKTsKKwlyZXR1cm47CiAKIG91dDoKLQkvKiBDT05GSUdfTElOSyBiYWQgaGJhIHN0YXRlIDxoYmFfc3RhdGU+ICovCi0JbHBmY19wcmludGZfbG9nKHBoYmEsCi0JCQlLRVJOX0VSUiwKLQkJCUxPR19ESVNDT1ZFUlksCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCwKKwkJCSIlZDowMzA2IENPTkZJR19MSU5LIG1ieFN0YXR1cyBlcnJvciB4JXggIgorCQkJIkhCQSBzdGF0ZSB4JXhcbiIsCisJCQlwaGJhLT5icmRfbm8sIHBtYi0+bWIubWJ4U3RhdHVzLCBwaGJhLT5oYmFfc3RhdGUpOworCisJbHBmY19saW5rZG93bihwaGJhKTsKKworCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOworCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAogCQkJIiVkOjAyMDAgQ09ORklHX0xJTksgYmFkIGhiYSBzdGF0ZSB4JXhcbiIsCiAJCQlwaGJhLT5icmRfbm8sIHBoYmEtPmhiYV9zdGF0ZSk7CiAKLQlpZiAocGhiYS0+aGJhX3N0YXRlICE9IExQRkNfQ0xFQVJfTEEpIHsKLQkJbHBmY19jbGVhcl9sYShwaGJhLCBwbWIpOwotCQlwbWItPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfY2xlYXJfbGE7Ci0JCWlmIChscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgKE1CWF9OT1dBSVQgfCBNQlhfU1RPUF9JT0NCKSkKLQkJICAgID09IE1CWF9OT1RfRklOSVNIRUQpIHsKLQkJCW1lbXBvb2xfZnJlZSggcG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKLQkJCWxwZmNfZGlzY19mbHVzaF9saXN0KHBoYmEpOwotCQkJcHNsaS0+cmluZ1socHNsaS0+aXBfcmluZyldLmZsYWcgJj0KLQkJCQl+TFBGQ19TVE9QX0lPQ0JfRVZFTlQ7Ci0JCQlwc2xpLT5yaW5nWyhwc2xpLT5mY3BfcmluZyldLmZsYWcgJj0KLQkJCQl+TFBGQ19TVE9QX0lPQ0JfRVZFTlQ7Ci0JCQlwc2xpLT5yaW5nWyhwc2xpLT5uZXh0X3JpbmcpXS5mbGFnICY9Ci0JCQkJfkxQRkNfU1RPUF9JT0NCX0VWRU5UOwotCQkJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19IQkFfUkVBRFk7Ci0JCX0KLQl9IGVsc2UgewotCQltZW1wb29sX2ZyZWUoIHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbHBmY19jbGVhcl9sYShwaGJhLCBwbWIpOworCXBtYi0+bWJveF9jbXBsID0gbHBmY19tYnhfY21wbF9jbGVhcl9sYTsKKwlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCAoTUJYX05PV0FJVCB8IE1CWF9TVE9QX0lPQ0IpKTsKKwlpZiAocmMgPT0gTUJYX05PVF9GSU5JU0hFRCkgeworCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJbHBmY19kaXNjX2ZsdXNoX2xpc3QocGhiYSk7CisJCXBzbGktPnJpbmdbKHBzbGktPmlwX3JpbmcpXS5mbGFnICY9IH5MUEZDX1NUT1BfSU9DQl9FVkVOVDsKKwkJcHNsaS0+cmluZ1socHNsaS0+ZmNwX3JpbmcpXS5mbGFnICY9IH5MUEZDX1NUT1BfSU9DQl9FVkVOVDsKKwkJcHNsaS0+cmluZ1socHNsaS0+bmV4dF9yaW5nKV0uZmxhZyAmPSB+TFBGQ19TVE9QX0lPQ0JfRVZFTlQ7CisJCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfSEJBX1JFQURZOwogCX0KIAlyZXR1cm47CiB9CkBAIC02NTAsNyArNjgzLDcgQEAKIAljZmdsaW5rX21ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwogCiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCXN3aXRjaChsYS0+VWxua1NwZWVkKSB7CisJc3dpdGNoIChsYS0+VWxua1NwZWVkKSB7CiAJCWNhc2UgTEFfMUdIWl9MSU5LOgogCQkJcGhiYS0+ZmNfbGlua3NwZWVkID0gTEFfMUdIWl9MSU5LOwogCQkJYnJlYWs7CkBAIC03MzEsNyArNzY0LDcgQEAKIAlpZiAoY2ZnbGlua19tYm94KSB7CiAJCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfTE9DQUxfQ0ZHX0xJTks7CiAJCWxwZmNfY29uZmlnX2xpbmsocGhiYSwgY2ZnbGlua19tYm94KTsKLQkJY2ZnbGlua19tYm94LT5tYm94X2NtcGwgPSBscGZjX21ieF9jbXBsX2NvbmZpZ19saW5rOworCQljZmdsaW5rX21ib3gtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfbG9jYWxfY29uZmlnX2xpbms7CiAJCWxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgY2ZnbGlua19tYm94LAogCQkJCQkJKE1CWF9OT1dBSVQgfCBNQlhfU1RPUF9JT0NCKSk7CiAJfQpAQCAtNzg0LDYgKzgxNywxMyBAQAogCiAJbWVtY3B5KCZwaGJhLT5hbHBhX21hcFswXSwgbXAtPnZpcnQsIDEyOCk7CiAKKwlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJaWYgKGxhLT5wYikKKwkJcGhiYS0+ZmNfZmxhZyB8PSBGQ19CWVBBU1NFRF9NT0RFOworCWVsc2UKKwkJcGhiYS0+ZmNfZmxhZyAmPSB+RkNfQllQQVNTRURfTU9ERTsKKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwogCWlmICgoKHBoYmEtPmZjX2V2ZW50VGFnICsgMSkgPCBsYS0+ZXZlbnRUYWcpIHx8CiAJICAgICAocGhiYS0+ZmNfZXZlbnRUYWcgPT0gbGEtPmV2ZW50VGFnKSkgewogCQlwaGJhLT5mY19zdGF0LkxpbmtNdWx0aUV2ZW50Kys7CkBAIC05MDQsMzIgKzk0NCwzNiBAQAogCQkgKi8KIAkJbHBmY19pc3N1ZV9lbHNfc2NyKHBoYmEsIFNDUl9ESUQsIDApOwogCi0JCS8qIEFsbG9jYXRlIGEgbmV3IG5vZGUgaW5zdGFuY2UuICBJZiB0aGUgcG9vbCBpcyBlbXB0eSwganVzdAotCQkgKiBzdGFydCB0aGUgZGlzY292ZXJ5IHByb2Nlc3MgYW5kIHNraXAgdGhlIE5hbWVzZXJ2ZXIgbG9naW4KLQkJICogcHJvY2Vzcy4gIFRoaXMgaXMgYXR0ZW1wdGVkIGFnYWluIGxhdGVyIG9uLiAgT3RoZXJ3aXNlLCBpc3N1ZQotCQkgKiBhIFBvcnQgTG9naW4gKFBMT0dJKSB0byB0aGUgTmFtZVNlcnZlcgotCQkgKi8KLQkJaWYgKChuZGxwID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5ubHBfbWVtX3Bvb2wsIEdGUF9LRVJORUwpKQotCQkgICAgPT0gMCkgewotCQkJbHBmY19kaXNjX3N0YXJ0KHBoYmEpOwotCQl9IGVsc2UgewotCQkJbHBmY19ubHBfaW5pdChwaGJhLCBuZGxwLCBOYW1lU2VydmVyX0RJRCk7Ci0JCQluZGxwLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwotCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9QTE9HSV9JU1NVRTsKLQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1BMT0dJX0xJU1QpOwotCQkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscCwgMCk7Ci0JCQlpZiAocGhiYS0+Y2ZnX2ZkbWlfb24pIHsKLQkJCQlpZiAoKG5kbHBfZmRtaSA9IG1lbXBvb2xfYWxsb2MoCi0JCQkJCQkgICAgICAgcGhiYS0+bmxwX21lbV9wb29sLAotCQkJCQkJICAgICAgIEdGUF9LRVJORUwpKSkgewotCQkJCQlscGZjX25scF9pbml0KHBoYmEsIG5kbHBfZmRtaSwKLQkJCQkJCUZETUlfRElEKTsKLQkJCQkJbmRscF9mZG1pLT5ubHBfdHlwZSB8PSBOTFBfRkFCUklDOwotCQkJCQluZGxwX2ZkbWktPm5scF9zdGF0ZSA9Ci0JCQkJCSAgICBOTFBfU1RFX1BMT0dJX0lTU1VFOwotCQkJCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBuZGxwX2ZkbWksCi0JCQkJCQkJICAgICAwKTsKLQkJCQl9CisJCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgTmFtZVNlcnZlcl9ESUQpOworCQlpZiAoIW5kbHApIHsKKwkJCS8qIEFsbG9jYXRlIGEgbmV3IG5vZGUgaW5zdGFuY2UuIElmIHRoZSBwb29sIGlzIGVtcHR5LAorCQkJICogc3RhcnQgdGhlIGRpc2NvdmVyeSBwcm9jZXNzIGFuZCBza2lwIHRoZSBOYW1lc2VydmVyCisJCQkgKiBsb2dpbiBwcm9jZXNzLiAgVGhpcyBpcyBhdHRlbXB0ZWQgYWdhaW4gbGF0ZXIgb24uCisJCQkgKiBPdGhlcndpc2UsIGlzc3VlIGEgUG9ydCBMb2dpbiAoUExPR0kpIHRvIE5hbWVTZXJ2ZXIuCisJCQkgKi8KKwkJCW5kbHAgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm5scF9tZW1fcG9vbCwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIW5kbHApIHsKKwkJCQlscGZjX2Rpc2Nfc3RhcnQocGhiYSk7CisJCQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKKwkJCQlrZnJlZShtcCk7CisJCQkJbWVtcG9vbF9mcmVlKCBwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJCXJldHVybjsKKwkJCX0gZWxzZSB7CisJCQkJbHBmY19ubHBfaW5pdChwaGJhLCBuZGxwLCBOYW1lU2VydmVyX0RJRCk7CisJCQkJbmRscC0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKKwkJCX0KKwkJfQorCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOworCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QTE9HSV9MSVNUKTsKKwkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgTmFtZVNlcnZlcl9ESUQsIDApOworCQlpZiAocGhiYS0+Y2ZnX2ZkbWlfb24pIHsKKwkJCW5kbHBfZmRtaSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bmxwX21lbV9wb29sLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmIChuZGxwX2ZkbWkpIHsKKwkJCQlscGZjX25scF9pbml0KHBoYmEsIG5kbHBfZmRtaSwgRkRNSV9ESUQpOworCQkJCW5kbHBfZmRtaS0+bmxwX3R5cGUgfD0gTkxQX0ZBQlJJQzsKKwkJCQluZGxwX2ZkbWktPm5scF9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7CisJCQkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgRkRNSV9ESUQsIDApOwogCQkJfQogCQl9CiAJfQpAQCAtOTM3LDcgKzk4MSw2IEBACiAJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKIAlrZnJlZShtcCk7CiAJbWVtcG9vbF9mcmVlKCBwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwotCiAJcmV0dXJuOwogfQogCkBAIC0xMDcwLDEyICsxMTEzLDEyIEBACiAKIAlwc2xpID0gJnBoYmEtPnNsaTsKIAkvKiBTYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHdlIGFyZSBub3QgbW92aW5nIHRvIC8gZnJvbSB0aGUgc2FtZSBsaXN0ICovCi0JaWYgKChubHAtPm5scF9mbGFnICYgTkxQX0xJU1RfTUFTSykgPT0gbGlzdCkgeworCWlmICgobmxwLT5ubHBfZmxhZyAmIE5MUF9MSVNUX01BU0spID09IGxpc3QpCiAJCWlmIChsaXN0ICE9IE5MUF9OT19MSVNUKQotCQkJcmV0dXJuKDApOwotCX0KKwkJCXJldHVybiAwOwogCi0Jc3dpdGNoKG5scC0+bmxwX2ZsYWcgJiBOTFBfTElTVF9NQVNLKSB7CisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCXN3aXRjaCAobmxwLT5ubHBfZmxhZyAmIE5MUF9MSVNUX01BU0spIHsKIAljYXNlIE5MUF9OT19MSVNUOiAvKiBOb3Qgb24gYW55IGxpc3QgKi8KIAkJYnJlYWs7CiAJY2FzZSBOTFBfVU5VU0VEX0xJU1Q6CkBAIC0xMTAxLDEwICsxMTQ0LDggQEAKIAljYXNlIE5MUF9VTk1BUFBFRF9MSVNUOgogCQlwaGJhLT5mY191bm1hcF9jbnQtLTsKIAkJbGlzdF9kZWwoJm5scC0+bmxwX2xpc3RwKTsKLQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQlubHAtPm5scF9mbGFnICY9IH5OTFBfVEdUX05PX1NDU0lJRDsKIAkJbmxwLT5ubHBfdHlwZSAmPSB+TkxQX0ZDX05PREU7Ci0JCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQlwaGJhLT5ucG9ydF9ldmVudF9jbnQrKzsKIAkJaWYgKG5scC0+cnBvcnQpCiAJCQlycG9ydF9kZWwgPSB1bm1hcHBlZDsKQEAgLTExMjIsMTkgKzExNjMsMTQgQEAKIAkJLyogU3RvcCBkZWxheSB0bW8gaWYgdGFraW5nIG5vZGUgb2ZmIE5QUiBsaXN0ICovCiAJCWlmICgobmxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pICYmCiAJCSAgIChsaXN0ICE9IE5MUF9OUFJfTElTVCkpIHsKLQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCW5scC0+bmxwX2ZsYWcgJj0gfk5MUF9ERUxBWV9UTU87CiAJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCWRlbF90aW1lcl9zeW5jKCZubHAtPm5scF9kZWxheWZ1bmMpOwotCQkJaWYgKCFsaXN0X2VtcHR5KCZubHAtPmVsc19yZXRyeV9ldnQuZXZ0X2xpc3RwKSkKLQkJCQlsaXN0X2RlbF9pbml0KCZubHAtPmVsc19yZXRyeV9ldnQuZXZ0X2xpc3RwKTsKKwkJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3RtbyhwaGJhLCBubHApOworCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQl9CiAJCWJyZWFrOwogCX0KIAotCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlubHAtPm5scF9mbGFnICY9IH5OTFBfTElTVF9NQVNLOwotCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCiAJLyogQWRkIE5Qb3J0IDxkaWQ+IHRvIDxudW0+IGxpc3QgKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwKQEAgLTExNDQsNDggKzExODAsNDAgQEAKIAkJCXBoYmEtPmJyZF9ubywKIAkJCW5scC0+bmxwX0RJRCwgbGlzdCwgbmxwLT5ubHBfZmxhZyk7CiAKLQlzd2l0Y2gobGlzdCkgeworCXN3aXRjaCAobGlzdCkgewogCWNhc2UgTkxQX05PX0xJU1Q6IC8qIE5vIGxpc3QsIGp1c3QgcmVtb3ZlIGl0ICovCisJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQlscGZjX25scF9yZW1vdmUocGhiYSwgbmxwKTsKKwkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkvKiBhcyBub2RlIHJlbW92ZWQgLSBzdG9wIGZ1cnRoZXIgdHJhbnNwb3J0IGNhbGxzICovCiAJCXJwb3J0X2RlbCA9IG5vbmU7CiAJCWJyZWFrOwogCWNhc2UgTkxQX1VOVVNFRF9MSVNUOgotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCS8qIFB1dCBpdCBhdCB0aGUgZW5kIG9mIHRoZSB1bnVzZWQgbGlzdCAqLwogCQlsaXN0X2FkZF90YWlsKCZubHAtPm5scF9saXN0cCwgJnBoYmEtPmZjX3VudXNlZF9saXN0KTsKIAkJcGhiYS0+ZmNfdW51c2VkX2NudCsrOwogCQlicmVhazsKIAljYXNlIE5MUF9QTE9HSV9MSVNUOgotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCS8qIFB1dCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBwbG9naSBsaXN0ICovCiAJCWxpc3RfYWRkX3RhaWwoJm5scC0+bmxwX2xpc3RwLCAmcGhiYS0+ZmNfcGxvZ2lfbGlzdCk7CiAJCXBoYmEtPmZjX3Bsb2dpX2NudCsrOwogCQlicmVhazsKIAljYXNlIE5MUF9BRElTQ19MSVNUOgotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCS8qIFB1dCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBhZGlzYyBsaXN0ICovCiAJCWxpc3RfYWRkX3RhaWwoJm5scC0+bmxwX2xpc3RwLCAmcGhiYS0+ZmNfYWRpc2NfbGlzdCk7CiAJCXBoYmEtPmZjX2FkaXNjX2NudCsrOwogCQlicmVhazsKIAljYXNlIE5MUF9SRUdMT0dJTl9MSVNUOgotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCS8qIFB1dCBpdCBhdCB0aGUgZW5kIG9mIHRoZSByZWdsb2dpbiBsaXN0ICovCiAJCWxpc3RfYWRkX3RhaWwoJm5scC0+bmxwX2xpc3RwLCAmcGhiYS0+ZmNfcmVnbG9naW5fbGlzdCk7CiAJCXBoYmEtPmZjX3JlZ2xvZ2luX2NudCsrOwogCQlicmVhazsKIAljYXNlIE5MUF9QUkxJX0xJU1Q6Ci0JCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJbmxwLT5ubHBfZmxhZyB8PSBsaXN0OwotCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJLyogUHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIHBybGkgbGlzdCAqLwogCQlsaXN0X2FkZF90YWlsKCZubHAtPm5scF9saXN0cCwgJnBoYmEtPmZjX3BybGlfbGlzdCk7CiAJCXBoYmEtPmZjX3BybGlfY250Kys7CkBAIC0xMTk0LDE5ICsxMjIyLDE3IEBACiAJCXJwb3J0X2FkZCA9IHVubWFwcGVkOwogCQkvKiBlbnN1cmUgYWxsIHZlc3RpZ2VzIG9mICJtYXBwZWQiIHNpZ25pZmljYW5jZSBhcmUgZ29uZSAqLwogCQlubHAtPm5scF90eXBlICY9IH4oTkxQX0ZDUF9UQVJHRVQgfCBOTFBfRkNQX0lOSVRJQVRPUik7Ci0JCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJbmxwLT5ubHBfZmxhZyB8PSBsaXN0OwotCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJLyogUHV0IGl0IGF0IHRoZSBlbmQgb2YgdGhlIHVubWFwIGxpc3QgKi8KIAkJbGlzdF9hZGRfdGFpbCgmbmxwLT5ubHBfbGlzdHAsICZwaGJhLT5mY19ubHB1bm1hcF9saXN0KTsKIAkJcGhiYS0+ZmNfdW5tYXBfY250Kys7CiAJCXBoYmEtPm5wb3J0X2V2ZW50X2NudCsrOwogCQkvKiBzdG9wIG5vZGV2IHRtbyBpZiBydW5uaW5nICovCiAJCWlmIChubHAtPm5scF9mbGFnICYgTkxQX05PREVWX1RNTykgewotCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJbmxwLT5ubHBfZmxhZyAmPSB+TkxQX05PREVWX1RNTzsKIAkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJZGVsX3RpbWVyX3N5bmMoJm5scC0+bmxwX3Rtb2Z1bmMpOworCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJaWYgKCFsaXN0X2VtcHR5KCZubHAtPm5vZGV2X3RpbWVvdXRfZXZ0LmV2dF9saXN0cCkpCiAJCQkJbGlzdF9kZWxfaW5pdCgmbmxwLT5ub2Rldl90aW1lb3V0X2V2dC4KIAkJCQkJCWV2dF9saXN0cCk7CkBAIC0xMjE2LDkgKzEyNDIsNyBAQAogCQlicmVhazsKIAljYXNlIE5MUF9NQVBQRURfTElTVDoKIAkJcnBvcnRfYWRkID0gbWFwcGVkOwotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCS8qIFB1dCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBtYXAgbGlzdCAqLwogCQlsaXN0X2FkZF90YWlsKCZubHAtPm5scF9saXN0cCwgJnBoYmEtPmZjX25scG1hcF9saXN0KTsKIAkJcGhiYS0+ZmNfbWFwX2NudCsrOwpAQCAtMTIyNiw3ICsxMjUwLDkgQEAKIAkJLyogc3RvcCBub2RldiB0bW8gaWYgcnVubmluZyAqLwogCQlpZiAobmxwLT5ubHBfZmxhZyAmIE5MUF9OT0RFVl9UTU8pIHsKIAkJCW5scC0+bmxwX2ZsYWcgJj0gfk5MUF9OT0RFVl9UTU87CisJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJCWRlbF90aW1lcl9zeW5jKCZubHAtPm5scF90bW9mdW5jKTsKKwkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJCWlmICghbGlzdF9lbXB0eSgmbmxwLT5ub2Rldl90aW1lb3V0X2V2dC5ldnRfbGlzdHApKQogCQkJCWxpc3RfZGVsX2luaXQoJm5scC0+bm9kZXZfdGltZW91dF9ldnQuCiAJCQkJCQlldnRfbGlzdHApOwpAQCAtMTIzNCwzMyArMTI2MCwyNCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgTkxQX05QUl9MSVNUOgotCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW5scC0+bmxwX2ZsYWcgfD0gbGlzdDsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCS8qIFB1dCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBucHIgbGlzdCAqLwogCQlsaXN0X2FkZF90YWlsKCZubHAtPm5scF9saXN0cCwgJnBoYmEtPmZjX25wcl9saXN0KTsKIAkJcGhiYS0+ZmNfbnByX2NudCsrOwogCi0JCS8qCi0JCSAqIFNhbml0eSBjaGVjayBmb3IgRmFicmljIGVudGl0eS4KLQkJICogU2V0IG5vZGV2X3RtbyBmb3IgTlBSIHN0YXRlLCBmb3IgRmFicmljIHVzZSAxIHNlYy4KLQkJICovCi0JCWlmIChubHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykgewotCQkJbW9kX3RpbWVyKCZubHAtPm5scF90bW9mdW5jLCBqaWZmaWVzICsgSFopOwotCQl9Ci0JCWVsc2UgeworCQlpZiAoIShubHAtPm5scF9mbGFnICYgTkxQX05PREVWX1RNTykpCiAJCQltb2RfdGltZXIoJm5scC0+bmxwX3Rtb2Z1bmMsCi0JCQkgICAgamlmZmllcyArIEhaICogcGhiYS0+Y2ZnX25vZGV2X3Rtbyk7Ci0JCX0KLQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkgCQkJamlmZmllcyArIEhaICogcGhiYS0+Y2ZnX25vZGV2X3Rtbyk7CisKIAkJbmxwLT5ubHBfZmxhZyB8PSBOTFBfTk9ERVZfVE1POwogCQlubHAtPm5scF9mbGFnICY9IH5OTFBfUkNWX1BMT0dJOwotCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBOTFBfSlVTVF9EUToKIAkJYnJlYWs7CiAJfQogCisJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisKIAkvKgogCSAqIFdlIG1ha2UgYWxsIHRoZSBjYWxscyBpbnRvIHRoZSB0cmFuc3BvcnQgYWZ0ZXIgd2UgaGF2ZQogCSAqIG1vdmVkIHRoZSBub2RlIGJldHdlZW4gbGlzdHMuIFRoaXMgc28gdGhhdCB3ZSBkb24ndApAQCAtMTMwMyw3ICsxMzIwLDcgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTMxNCw3ICsxMzMxLDE1IEBACiB7CiAJdWludDMyX3QgdG1vOwogCi0JdG1vID0gKChwaGJhLT5mY19yYXRvdiAqIDIpICsgMSk7CisJaWYgKHBoYmEtPmhiYV9zdGF0ZSA9PSBMUEZDX0xPQ0FMX0NGR19MSU5LKSB7CisJCS8qIEZvciBGQU4sIHRpbWVvdXQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhlbiBlZHRvdiAqLworCQl0bW8gPSAoKChwaGJhLT5mY19lZHRvdiArIDk5OSkgLyAxMDAwKSArIDEpOworCX0gZWxzZSB7CisJCS8qIE5vcm1hbCBkaXNjb3ZlcnkgdGltZW91dCBzaG91bGQgYmUgPiB0aGVuIEVMUy9DVCB0aW1lb3V0CisJCSAqIEZDIHNwZWMgc3RhdGVzIHdlIG5lZWQgMyAqIHJhdG92IGZvciBDVCByZXF1ZXN0cworCQkgKi8KKwkJdG1vID0gKChwaGJhLT5mY19yYXRvdiAqIDMpICsgMyk7CisJfQogCiAJbW9kX3RpbWVyKCZwaGJhLT5mY19kaXNjdG1vLCBqaWZmaWVzICsgSFogKiB0bW8pOwogCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKQEAgLTEzNTQsNyArMTM3OSw3IEBACiAJCQlwaGJhLT5icmRfbm8sIHBoYmEtPmhiYV9zdGF0ZSwgcGhiYS0+ZmNfZmxhZywKIAkJCXBoYmEtPmZjX3Bsb2dpX2NudCwgcGhiYS0+ZmNfYWRpc2NfY250KTsKIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMzc1LDExICsxNDAwLDExIEBACiAJCXN3aXRjaCAoaWNtZC0+dWxwQ29tbWFuZCkgewogCQljYXNlIENNRF9HRU5fUkVRVUVTVDY0X0NSOgogCQkJaWYgKGljbWQtPnVscENvbnRleHQgPT0gKHZvbGF0aWxlIHVzaG9ydCluZGxwLT5ubHBfcnBpKQotCQkJCXJldHVybiAoMSk7CisJCQkJcmV0dXJuIDE7CiAJCWNhc2UgQ01EX0VMU19SRVFVRVNUNjRfQ1I6CiAJCWNhc2UgQ01EX1hNSVRfRUxTX1JTUDY0X0NYOgogCQkJaWYgKGlvY2ItPmNvbnRleHQxID09ICh1aW50OF90ICopIG5kbHApCi0JCQkJcmV0dXJuICgxKTsKKwkJCQlyZXR1cm4gMTsKIAkJfQogCX0gZWxzZSBpZiAocHJpbmctPnJpbmdubyA9PSBwc2xpLT5pcF9yaW5nKSB7CiAKQEAgLTEzODcsMTUgKzE0MTIsMTUgQEAKIAkJLyogU2tpcCBtYXRjaCBjaGVjayBpZiB3YWl0aW5nIHRvIHJlbG9naW4gdG8gRkNQIHRhcmdldCAqLwogCQlpZiAoKG5kbHAtPm5scF90eXBlICYgTkxQX0ZDUF9UQVJHRVQpICYmCiAJCSAgKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykpIHsKLQkJCXJldHVybiAoMCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAoaWNtZC0+dWxwQ29udGV4dCA9PSAodm9sYXRpbGUgdXNob3J0KW5kbHAtPm5scF9ycGkpIHsKLQkJCXJldHVybiAoMSk7CisJCQlyZXR1cm4gMTsKIAkJfQogCX0gZWxzZSBpZiAocHJpbmctPnJpbmdubyA9PSBwc2xpLT5uZXh0X3JpbmcpIHsKIAogCX0KLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTQ1Niw3ICsxNDgxLDcgQEAKIAogCQl9CiAJfQotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xNTQ3LDYgKzE1NzIsNyBAQAogCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWRlbF90aW1lcl9zeW5jKCZuZGxwLT5ubHBfdG1vZnVuYyk7CiAKKwluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSAwOwogCWRlbF90aW1lcl9zeW5jKCZuZGxwLT5ubHBfZGVsYXlmdW5jKTsKIAogCWlmICghbGlzdF9lbXB0eSgmbmRscC0+bm9kZXZfdGltZW91dF9ldnQuZXZ0X2xpc3RwKSkKQEAgLTE1NTYsNyArMTU4Miw3IEBACiAKIAlscGZjX3VucmVnX3JwaShwaGJhLCBuZGxwKTsKIAotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xNTc5LDI0ICsxNjA1LDE4IEBACiAKIAogCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pIHsKLQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX0RFTEFZX1RNTzsKLQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCWRlbF90aW1lcl9zeW5jKCZuZGxwLT5ubHBfZGVsYXlmdW5jKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZuZGxwLT5lbHNfcmV0cnlfZXZ0LmV2dF9saXN0cCkpCi0JCQlsaXN0X2RlbF9pbml0KCZuZGxwLT5lbHNfcmV0cnlfZXZ0LmV2dF9saXN0cCk7CisJCWxwZmNfY2FuY2VsX3JldHJ5X2RlbGF5X3RtbyhwaGJhLCBuZGxwKTsKIAl9CiAKIAlpZiAobmRscC0+bmxwX2Rpc2NfcmVmY250KSB7CiAJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1JFTU9WRTsKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWxwZmNfZnJlZW5vZGUocGhiYSwgbmRscCk7CiAJCW1lbXBvb2xfZnJlZSggbmRscCwgcGhiYS0+bmxwX21lbV9wb29sKTsKIAl9Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNjA3LDIwICsxNjI3LDIwIEBACiAJRF9JRCBtYXRjaGRpZDsKIAogCWlmIChkaWQgPT0gQmNhc3RfRElEKQotCQlyZXR1cm4gKDApOworCQlyZXR1cm4gMDsKIAogCWlmIChuZGxwLT5ubHBfRElEID09IDApIHsKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyogRmlyc3QgY2hlY2sgZm9yIERpcmVjdCBtYXRjaCAqLwogCWlmIChuZGxwLT5ubHBfRElEID09IGRpZCkKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAKIAkvKiBOZXh0IGNoZWNrIGZvciBhcmVhL2RvbWFpbiBpZGVudGljYWxseSBlcXVhbHMgMCBtYXRjaCAqLwogCW15ZGlkLnVuLndvcmQgPSBwaGJhLT5mY19teURJRDsKIAlpZiAoKG15ZGlkLnVuLmIuZG9tYWluID09IDApICYmIChteWRpZC51bi5iLmFyZWEgPT0gMCkpIHsKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJbWF0Y2hkaWQudW4ud29yZCA9IGRpZDsKQEAgLTE2MzEsOSArMTY1MSw5IEBACiAJCQlpZiAoKG5kbHBkaWQudW4uYi5kb21haW4gPT0gMCkgJiYKIAkJCSAgICAobmRscGRpZC51bi5iLmFyZWEgPT0gMCkpIHsKIAkJCQlpZiAobmRscGRpZC51bi5iLmlkKQotCQkJCQlyZXR1cm4gKDEpOworCQkJCQlyZXR1cm4gMTsKIAkJCX0KLQkJCXJldHVybiAoMCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCiAJCW1hdGNoZGlkLnVuLndvcmQgPSBuZGxwLT5ubHBfRElEOwpAQCAtMTY0MiwxMSArMTY2MiwxMSBAQAogCQkJaWYgKChtYXRjaGRpZC51bi5iLmRvbWFpbiA9PSAwKSAmJgogCQkJICAgIChtYXRjaGRpZC51bi5iLmFyZWEgPT0gMCkpIHsKIAkJCQlpZiAobWF0Y2hkaWQudW4uYi5pZCkKLQkJCQkJcmV0dXJuICgxKTsKKwkJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCX0KIAl9Ci0JcmV0dXJuICgwKTsKKwlyZXR1cm4gMDsKIH0KIAogLyogU2VhcmNoIGZvciBhIG5vZGVsaXN0IGVudHJ5IG9uIGEgc3BlY2lmaWMgbGlzdCAqLwpAQCAtMTY1Niw2ICsxNjc2LDcgQEAKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCwgKm5leHRfbmRscDsKIAl1aW50MzJfdCBkYXRhMTsKIAorCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlpZiAob3JkZXIgJiBOTFBfU0VBUkNIX1VOTUFQUEVEKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZGxwLCBuZXh0X25kbHAsCiAJCQkJCSAmcGhiYS0+ZmNfbmxwdW5tYXBfbGlzdCwgbmxwX2xpc3RwKSB7CkBAIC0xNjcxLDcgKzE2OTIsOCBAQAogCQkJCQkJcGhiYS0+YnJkX25vLAogCQkJCQkJbmRscCwgbmRscC0+bmxwX0RJRCwKIAkJCQkJCW5kbHAtPm5scF9mbGFnLCBkYXRhMSk7Ci0JCQkJcmV0dXJuIChuZGxwKTsKKwkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCQlyZXR1cm4gbmRscDsKIAkJCX0KIAkJfQogCX0KQEAgLTE2OTIsNyArMTcxNCw4IEBACiAJCQkJCQlwaGJhLT5icmRfbm8sCiAJCQkJCQluZGxwLCBuZGxwLT5ubHBfRElELAogCQkJCQkJbmRscC0+bmxwX2ZsYWcsIGRhdGExKTsKLQkJCQlyZXR1cm4gKG5kbHApOworCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkJCXJldHVybiBuZGxwOwogCQkJfQogCQl9CiAJfQpAQCAtMTcxNCw3ICsxNzM3LDggQEAKIAkJCQkJCXBoYmEtPmJyZF9ubywKIAkJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsCiAJCQkJCQluZGxwLT5ubHBfZmxhZywgZGF0YTEpOwotCQkJCXJldHVybiAobmRscCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJcmV0dXJuIG5kbHA7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNzM2LDcgKzE3NjAsOCBAQAogCQkJCQkJcGhiYS0+YnJkX25vLAogCQkJCQkJbmRscCwgbmRscC0+bmxwX0RJRCwKIAkJCQkJCW5kbHAtPm5scF9mbGFnLCBkYXRhMSk7Ci0JCQkJcmV0dXJuIChuZGxwKTsKKwkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCQlyZXR1cm4gbmRscDsKIAkJCX0KIAkJfQogCX0KQEAgLTE3NTgsNyArMTc4Myw4IEBACiAJCQkJCQlwaGJhLT5icmRfbm8sCiAJCQkJCQluZGxwLCBuZGxwLT5ubHBfRElELAogCQkJCQkJbmRscC0+bmxwX2ZsYWcsIGRhdGExKTsKLQkJCQlyZXR1cm4gKG5kbHApOworCQkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkJCXJldHVybiBuZGxwOwogCQkJfQogCQl9CiAJfQpAQCAtMTc4MCw3ICsxODA2LDggQEAKIAkJCQkJCXBoYmEtPmJyZF9ubywKIAkJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsCiAJCQkJCQluZGxwLT5ubHBfZmxhZywgZGF0YTEpOwotCQkJCXJldHVybiAobmRscCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJcmV0dXJuIG5kbHA7CiAJCQl9CiAJCX0KIAl9CkBAIC0xODAyLDcgKzE4MjksOCBAQAogCQkJCQkJcGhiYS0+YnJkX25vLAogCQkJCQkJbmRscCwgbmRscC0+bmxwX0RJRCwKIAkJCQkJCW5kbHAtPm5scF9mbGFnLCBkYXRhMSk7Ci0JCQkJcmV0dXJuIChuZGxwKTsKKwkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCQlyZXR1cm4gbmRscDsKIAkJCX0KIAkJfQogCX0KQEAgLTE4MjQsMTEgKzE4NTIsMTQgQEAKIAkJCQkJCXBoYmEtPmJyZF9ubywKIAkJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsCiAJCQkJCQluZGxwLT5ubHBfZmxhZywgZGF0YTEpOwotCQkJCXJldHVybiAobmRscCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJcmV0dXJuIG5kbHA7CiAJCQl9CiAJCX0KIAl9CiAKKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwogCS8qIEZJTkQgbm9kZSBkaWQgPGRpZD4gTk9UIEZPVU5EICovCiAJbHBmY19wcmludGZfbG9nKHBoYmEsCiAJCQlLRVJOX0lORk8sCkBAIC0xODQ2LDggKzE4NzcsOSBAQAogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwOwogCXVpbnQzMl90IGZsZzsKIAotCWlmICgobmRscCA9IGxwZmNfZmluZG5vZGVfZGlkKHBoYmEsIE5MUF9TRUFSQ0hfQUxMLCBkaWQpKSA9PSAwKSB7Ci0JCWlmICgocGhiYS0+aGJhX3N0YXRlID09IExQRkNfSEJBX1JFQURZKSAmJgorCW5kbHAgPSBscGZjX2ZpbmRub2RlX2RpZChwaGJhLCBOTFBfU0VBUkNIX0FMTCwgZGlkKTsKKwlpZiAoIW5kbHApIHsKKwkJaWYgKChwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSAmJgogCQkgICAoKGxwZmNfcnNjbl9wYXlsb2FkX2NoZWNrKHBoYmEsIGRpZCkgPT0gMCkpKQogCQkJcmV0dXJuIE5VTEw7CiAJCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikKQEAgLTE4NjAsMjIgKzE4OTIsMjMgQEAKIAkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05QUl8yQl9ESVNDOwogCQlyZXR1cm4gbmRscDsKIAl9Ci0JaWYgKChwaGJhLT5oYmFfc3RhdGUgPT0gTFBGQ19IQkFfUkVBRFkpICYmCi0JICAgIChwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSkgeworCWlmIChwaGJhLT5mY19mbGFnICYgRkNfUlNDTl9NT0RFKSB7CiAJCWlmIChscGZjX3JzY25fcGF5bG9hZF9jaGVjayhwaGJhLCBkaWQpKSB7CiAJCQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTlBSXzJCX0RJU0M7Ci0JCX0KLQkJZWxzZSB7CisKKwkJCS8qIFNpbmNlIHRoaXMgbm9kZSBpcyBtYXJrZWQgZm9yIGRpc2NvdmVyeSwKKwkJCSAqIGRlbGF5IHRpbWVvdXQgaXMgbm90IG5lZWRlZC4KKwkJCSAqLworCQkJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykKKwkJCQlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8ocGhiYSwgbmRscCk7CisJCX0gZWxzZSB7CiAJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl8yQl9ESVNDOwogCQkJbmRscCA9IE5VTEw7CiAJCX0KLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJZmxnID0gbmRscC0+bmxwX2ZsYWcgJiBOTFBfTElTVF9NQVNLOwotCQlpZiAoKGZsZyA9PSBOTFBfQURJU0NfTElTVCkgfHwKLQkJKGZsZyA9PSBOTFBfUExPR0lfTElTVCkpIHsKKwkJaWYgKChmbGcgPT0gTkxQX0FESVNDX0xJU1QpIHx8IChmbGcgPT0gTkxQX1BMT0dJX0xJU1QpKQogCQkJcmV0dXJuIE5VTEw7Ci0JCX0KIAkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwogCQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfTlBSXzJCX0RJU0M7CkBAIC0yMDIzLDggKzIwNTYsNyBAQAogCQkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJCQlwaGJhLT5mY19mbGFnICY9IH5GQ19SU0NOX01PREU7CiAJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCQl9Ci0JCQllbHNlCisJCQl9IGVsc2UKIAkJCQlscGZjX2Vsc19oYW5kbGVfcnNjbihwaGJhKTsKIAkJfQogCX0KQEAgLTIxNzQsNyArMjIwNiw3IEBACiBscGZjX2Rpc2NfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKIHsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7Ci0Jc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAsICpuZXh0X25kbHA7CiAJTFBGQ19NQk9YUV90ICpjbGVhcmxhbWJveCwgKmluaXRsaW5rbWJveDsKIAlpbnQgcmMsIGNscmxhZXJyID0gMDsKIApAQCAtMjIwMSwxMCArMjIzMywxOSBAQAogCQkJCSAiJWQ6MDIyMSBGQU4gdGltZW91dFxuIiwKIAkJCQkgcGhiYS0+YnJkX25vKTsKIAotCQkvKiBGb3JnZXQgYWJvdXQgRkFOLCBTdGFydCBkaXNjb3ZlcnkgYnkgc2VuZGluZyBhIEZMT0dJCi0JCSAqIGhiYV9zdGF0ZSBpcyBpZGVudGljYWxseSBMUEZDX0ZMT0dJIHdoaWxlIHdhaXRpbmcgZm9yIEZMT0dJCi0JCSAqIGNtcGwKLQkJICovCisJCS8qIFN0YXJ0IGRpc2NvdmVyeSBieSBzZW5kaW5nIEZMT0dJLCBjbGVhbiB1cCBvbGQgcnBpcyAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmRscCwgbmV4dF9uZGxwLCAmcGhiYS0+ZmNfbnByX2xpc3QsCisJCQkJCW5scF9saXN0cCkgeworCQkJaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykgeworCQkJCS8qIENsZWFuIHVwIHRoZSBuZGxwIG9uIEZhYnJpYyBjb25uZWN0aW9ucyAqLworCQkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOworCQkJfSBlbHNlIGlmICghKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl9BRElTQykpIHsKKwkJCQkvKiBGYWlsIG91dHN0YW5kaW5nIElPIG5vdyBzaW5jZSBkZXZpY2UKKwkJCQkgKiBpcyBtYXJrZWQgZm9yIFBMT0dJLgorCQkJCSAqLworCQkJCWxwZmNfdW5yZWdfcnBpKHBoYmEsIG5kbHApOworCQkJfQorCQl9CiAJCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfRkxPR0k7CiAJCWxwZmNfc2V0X2Rpc2N0bW8ocGhiYSk7CiAJCWxwZmNfaW5pdGlhbF9mbG9naShwaGJhKTsKQEAgLTI0NzAsMTEgKzI1MTEsNTcgQEAKIAkJCQkgICAgJnBoYmEtPmZjX3JlZ2xvZ2luX2xpc3R9OwogCWludCBpOwogCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxpc3RzKTsgaSsrICkKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCBsaXN0c1tpXSwgbmxwX2xpc3RwKQotCQkJaWYgKG5kbHAtPm5scF9ycGkgPT0gcnBpKQotCQkJCXJldHVybiAobmRscCk7CisJCQlpZiAobmRscC0+bmxwX3JwaSA9PSBycGkpIHsKKwkJCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJCQlyZXR1cm4gbmRscDsKKwkJCX0KKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwlyZXR1cm4gTlVMTDsKK30KIAorLyoKKyAqIFRoaXMgcm91dGluZSBsb29rcyB1cCB0aGUgbmRscCAgbGlzdHMKKyAqIGZvciB0aGUgZ2l2ZW4gV1dQTi4gSWYgV1dQTiBmb3VuZAorICogaXQgcmV0dXJuIHRoZSBub2RlIGxpc3QgcG9pbnRlcgorICogZWxzZSByZXR1cm4gTlVMTC4KKyAqLworc3RydWN0IGxwZmNfbm9kZWxpc3QgKgorbHBmY19maW5kbm9kZV93d3BuKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHVpbnQzMl90IG9yZGVyLAorCQkgICBzdHJ1Y3QgbHBmY19uYW1lICogd3dwbikKK3sKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICogbGlzdHNbXT17JnBoYmEtPmZjX25scHVubWFwX2xpc3QsCisJCQkJICAgICZwaGJhLT5mY19ubHBtYXBfbGlzdCwKKwkJCQkgICAgJnBoYmEtPmZjX25wcl9saXN0LAorCQkJCSAgICAmcGhiYS0+ZmNfcGxvZ2lfbGlzdCwKKwkJCQkgICAgJnBoYmEtPmZjX2FkaXNjX2xpc3QsCisJCQkJICAgICZwaGJhLT5mY19yZWdsb2dpbl9saXN0LAorCQkJCSAgICAmcGhiYS0+ZmNfcHJsaV9saXN0fTsKKwl1aW50MzJfdCBzZWFyY2hbXT17TkxQX1NFQVJDSF9VTk1BUFBFRCwKKwkJCSAgIE5MUF9TRUFSQ0hfTUFQUEVELAorCQkJICAgTkxQX1NFQVJDSF9OUFIsCisJCQkgICBOTFBfU0VBUkNIX1BMT0dJLAorCQkJICAgTkxQX1NFQVJDSF9BRElTQywKKwkJCSAgIE5MUF9TRUFSQ0hfUkVHTE9HSU4sCisJCQkgICBOTFBfU0VBUkNIX1BSTEl9OworCWludCBpOworCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxpc3RzKTsgaSsrICkgeworCQlpZiAoIShvcmRlciAmIHNlYXJjaFtpXSkpCisJCQljb250aW51ZTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShuZGxwLCBsaXN0c1tpXSwgbmxwX2xpc3RwKSB7CisJCQlpZiAobWVtY21wKCZuZGxwLT5ubHBfcG9ydG5hbWUsIHd3cG4sCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBscGZjX25hbWUpKSA9PSAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQkJcmV0dXJuIG5kbHA7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAppbmRleCAxZWE1NjVlLi41NGQwNDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC00NTQsMTAgKzQ1NCwxMyBAQAogI2RlZmluZSBFTFNfQ01EX0FESVNDICAgICAweDUyMDAwMDAwCiAjZGVmaW5lIEVMU19DTURfRkFSUCAgICAgIDB4NTQwMDAwMDAKICNkZWZpbmUgRUxTX0NNRF9GQVJQUiAgICAgMHg1NTAwMDAwMAorI2RlZmluZSBFTFNfQ01EX1JQUyAgICAgICAweDU2MDAwMDAwCisjZGVmaW5lIEVMU19DTURfUlBMICAgICAgIDB4NTcwMDAwMDAKICNkZWZpbmUgRUxTX0NNRF9GQU4gICAgICAgMHg2MDAwMDAwMAogI2RlZmluZSBFTFNfQ01EX1JTQ04gICAgICAweDYxMDQwMDAwCiAjZGVmaW5lIEVMU19DTURfU0NSICAgICAgIDB4NjIwMDAwMDAKICNkZWZpbmUgRUxTX0NNRF9STklEICAgICAgMHg3ODAwMDAwMAorI2RlZmluZSBFTFNfQ01EX0xJUlIgICAgICAweDdBMDAwMDAwCiAjZWxzZQkvKiAgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEICovCiAjZGVmaW5lIEVMU19DTURfTUFTSyAgICAgIDB4ZmZmZgogI2RlZmluZSBFTFNfUlNQX01BU0sgICAgICAweGZmCkBAIC00ODYsMTAgKzQ4OSwxMyBAQAogI2RlZmluZSBFTFNfQ01EX0FESVNDICAgICAweDUyCiAjZGVmaW5lIEVMU19DTURfRkFSUCAgICAgIDB4NTQKICNkZWZpbmUgRUxTX0NNRF9GQVJQUiAgICAgMHg1NQorI2RlZmluZSBFTFNfQ01EX1JQUyAgICAgICAweDU2CisjZGVmaW5lIEVMU19DTURfUlBMICAgICAgIDB4NTcKICNkZWZpbmUgRUxTX0NNRF9GQU4gICAgICAgMHg2MAogI2RlZmluZSBFTFNfQ01EX1JTQ04gICAgICAweDA0NjEKICNkZWZpbmUgRUxTX0NNRF9TQ1IgICAgICAgMHg2MgogI2RlZmluZSBFTFNfQ01EX1JOSUQgICAgICAweDc4CisjZGVmaW5lIEVMU19DTURfTElSUiAgICAgIDB4N0EKICNlbmRpZgogCiAvKgpAQCAtNzU4LDEyICs3NjQsNDAgQEAKIAl9IHVuOwogfSBSTklEOwogCi10eXBlZGVmIHN0cnVjdCBfUlJRIHsJCS8qIFN0cnVjdHVyZSBpcyBpbiBCaWcgRW5kaWFuIGZvcm1hdCAqLwotCXVpbnQzMl90IFNJRDsKLQl1aW50MTZfdCBPeGlkOwotCXVpbnQxNl90IFJ4aWQ7Ci0JdWludDhfdCByZXN2WzMyXTsJLyogb3B0aW9uYWwgYXNzb2NpYXRpb24gaGRyICovCi19IFJSUTsKK3R5cGVkZWYgc3RydWN0ICBfUlBTIHsgIAkvKiBTdHJ1Y3R1cmUgaXMgaW4gQmlnIEVuZGlhbiBmb3JtYXQgKi8KKwl1bmlvbiB7CisJCXVpbnQzMl90IHBvcnROdW07CisJCXN0cnVjdCBscGZjX25hbWUgcG9ydE5hbWU7CisJfSB1bjsKK30gUlBTOworCit0eXBlZGVmIHN0cnVjdCAgX1JQU19SU1AgewkvKiBTdHJ1Y3R1cmUgaXMgaW4gQmlnIEVuZGlhbiBmb3JtYXQgKi8KKwl1aW50MTZfdCByc3ZkMTsKKwl1aW50MTZfdCBwb3J0U3RhdHVzOworCXVpbnQzMl90IGxpbmtGYWlsdXJlQ250OworCXVpbnQzMl90IGxvc3NTeW5jQ250OworCXVpbnQzMl90IGxvc3NTaWduYWxDbnQ7CisJdWludDMyX3QgcHJpbVNlcUVyckNudDsKKwl1aW50MzJfdCBpbnZhbGlkWG1pdFdvcmQ7CisJdWludDMyX3QgY3JjQ250OworfSBSUFNfUlNQOworCit0eXBlZGVmIHN0cnVjdCAgX1JQTCB7ICAJLyogU3RydWN0dXJlIGlzIGluIEJpZyBFbmRpYW4gZm9ybWF0ICovCisJdWludDMyX3QgbWF4c2l6ZTsKKwl1aW50MzJfdCBpbmRleDsKK30gUlBMOworCit0eXBlZGVmIHN0cnVjdCAgX1BPUlRfTlVNX0JMSyB7CisJdWludDMyX3QgcG9ydE51bTsKKwl1aW50MzJfdCBwb3J0SUQ7CisJc3RydWN0IGxwZmNfbmFtZSBwb3J0TmFtZTsKK30gUE9SVF9OVU1fQkxLOworCit0eXBlZGVmIHN0cnVjdCAgX1JQTF9SU1AgeyAJLyogU3RydWN0dXJlIGlzIGluIEJpZyBFbmRpYW4gZm9ybWF0ICovCisJdWludDMyX3QgbGlzdExlbjsKKwl1aW50MzJfdCBpbmRleDsKKwlQT1JUX05VTV9CTEsgcG9ydF9udW1fYmxrOworfSBSUExfUlNQOwogCiAvKiBUaGlzIGlzIHVzZWQgZm9yIFJTQ04gY29tbWFuZCAqLwogdHlwZWRlZiBzdHJ1Y3QgX0RfSUQgewkJLyogU3RydWN0dXJlIGlzIGluIEJpZyBFbmRpYW4gZm9ybWF0ICovCkBAIC04MDQsNyArODM4LDYgQEAKIAkJRkFSUCBmYXJwOwkvKiBQYXlsb2FkIGZvciBGQVJQL0FDQyAqLwogCQlGQU4gZmFuOwkvKiBQYXlsb2FkIGZvciBGQU4gKi8KIAkJU0NSIHNjcjsJLyogUGF5bG9hZCBmb3IgU0NSL0FDQyAqLwotCQlSUlEgcnJxOwkvKiBQYXlsb2FkIGZvciBSUlEgKi8KIAkJUk5JRCBybmlkOwkvKiBQYXlsb2FkIGZvciBSTklEICovCiAJCXVpbnQ4X3QgcGFkWzEyOCAtIDRdOwkvKiBQYWQgb3V0IHRvIHBheWxvYWQgb2YgMTI4IGJ5dGVzICovCiAJfSB1bjsKQEAgLTEyMDAsNyArMTIzMyw5IEBACiAjZGVmaW5lIE1CWF9TRVRfTUFTSyAgICAgICAgMHgyMAogI2RlZmluZSBNQlhfU0VUX1NMSU0gICAgICAgIDB4MjEKICNkZWZpbmUgTUJYX1VOUkVHX0RfSUQgICAgICAweDIzCisjZGVmaW5lIE1CWF9LSUxMX0JPQVJEICAgICAgMHgyNAogI2RlZmluZSBNQlhfQ09ORklHX0ZBUlAgICAgIDB4MjUKKyNkZWZpbmUgTUJYX0JFQUNPTiAgICAgICAgICAweDJBCiAKICNkZWZpbmUgTUJYX0xPQURfQVJFQSAgICAgICAweDgxCiAjZGVmaW5lIE1CWF9SVU5fQklVX0RJQUc2NCAgMHg4NApAQCAtMTY3NiwxMyArMTcxMSwxMyBAQAogCXVpbnQzMl90IHJ0dG92OwogCXVpbnQzMl90IGFsdG92OwogCXVpbnQzMl90IGxtdDsKLSNkZWZpbmUgTE1UX1JFU0VSVkVEICAgIDB4MCAgICAvKiBOb3QgdXNlZCAqLwotI2RlZmluZSBMTVRfMjY2XzEwYml0ICAgMHgxICAgIC8qIDI2NS42MjUgTWJhdWQgMTAgYml0IGlmYWNlICAqLwotI2RlZmluZSBMTVRfNTMyXzEwYml0ICAgMHgyICAgIC8qIDUzMS4yNSAgTWJhdWQgMTAgYml0IGlmYWNlICAqLwotI2RlZmluZSBMTVRfMTA2M18yMGJpdCAgMHgzICAgIC8qIDEwNjIuNSAgIE1iYXVkIDIwIGJpdCBpZmFjZSAqLwotI2RlZmluZSBMTVRfMTA2M18xMGJpdCAgMHg0ICAgIC8qIDEwNjIuNSAgIE1iYXVkIDEwIGJpdCBpZmFjZSAqLwotI2RlZmluZSBMTVRfMjEyNV8xMGJpdCAgMHg4ICAgIC8qIDIxMjUgICAgIE1iYXVkIDEwIGJpdCBpZmFjZSAqLwotI2RlZmluZSBMTVRfNDI1MF8xMGJpdCAgMHg0MCAgIC8qIDQyNTAgICAgIE1iYXVkIDEwIGJpdCBpZmFjZSAqLworI2RlZmluZSBMTVRfUkVTRVJWRUQgIDB4MDAwICAgIC8qIE5vdCB1c2VkICovCisjZGVmaW5lIExNVF8xR2IgICAgICAgMHgwMDQKKyNkZWZpbmUgTE1UXzJHYiAgICAgICAweDAwOAorI2RlZmluZSBMTVRfNEdiICAgICAgIDB4MDQwCisjZGVmaW5lIExNVF84R2IgICAgICAgMHgwODAKKyNkZWZpbmUgTE1UXzEwR2IgICAgICAweDEwMAorCiAKIAl1aW50MzJfdCByc3ZkMjsKIAl1aW50MzJfdCByc3ZkMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggYjdhNjAzYS4uNjZkNWQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJscGZjX2NydG4uaCIKICNpbmNsdWRlICJscGZjX3ZlcnNpb24uaCIKIAotc3RhdGljIGludCBscGZjX3BhcnNlX3ZwZChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDhfdCAqKTsKK3N0YXRpYyBpbnQgbHBmY19wYXJzZV92cGQoc3RydWN0IGxwZmNfaGJhICosIHVpbnQ4X3QgKiwgaW50KTsKIHN0YXRpYyB2b2lkIGxwZmNfZ2V0X2hiYV9tb2RlbF9kZXNjKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50OF90ICosIHVpbnQ4X3QgKik7CiBzdGF0aWMgaW50IGxwZmNfcG9zdF9yY3ZfYnVmKHN0cnVjdCBscGZjX2hiYSAqKTsKIApAQCAtMTYxLDkgKzE2MSw2IEBACiAJCW1lbWNweShwaGJhLT5SYW5kb21EYXRhLCAoY2hhciAqKSZtYi0+dW4udmFyV29yZHNbMjRdLAogCQkJCQkJc2l6ZW9mIChwaGJhLT5SYW5kb21EYXRhKSk7CiAKLQkvKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBNb2RlbCBOYW1lIGFuZCBEZXNjcmlwdGlvbiAqLwotCWxwZmNfZ2V0X2hiYV9tb2RlbF9kZXNjKHBoYmEsIHBoYmEtPk1vZGVsTmFtZSwgcGhiYS0+TW9kZWxEZXNjKTsKLQogCS8qIEdldCBhZGFwdGVyIFZQRCBpbmZvcm1hdGlvbiAqLwogCXBtYi0+Y29udGV4dDIgPSBrbWFsbG9jKERNUF9SU1BfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwbWItPmNvbnRleHQyKQpAQCAtMTgyLDE2ICsxNzksMTUgQEAKIAkJCQkJIm1ieENtZCB4JXggRFVNUCBWUEQsIG1ieFN0YXR1cyB4JXhcbiIsCiAJCQkJCXBoYmEtPmJyZF9ubywKIAkJCQkJbWItPm1ieENvbW1hbmQsIG1iLT5tYnhTdGF0dXMpOwotCQkJa2ZyZWUobHBmY192cGRfZGF0YSk7Ci0JCQlscGZjX3ZwZF9kYXRhID0gTlVMTDsKLQkJCWJyZWFrOworCQkJbWItPnVuLnZhckRtcC53b3JkX2NudCA9IDA7CiAJCX0KLQorCQlpZiAobWItPnVuLnZhckRtcC53b3JkX2NudCA+IERNUF9WUERfU0laRSAtIG9mZnNldCkKKwkJCW1iLT51bi52YXJEbXAud29yZF9jbnQgPSBETVBfVlBEX1NJWkUgLSBvZmZzZXQ7CiAJCWxwZmNfc2xpX3BjaW1lbV9iY29weShwbWItPmNvbnRleHQyLCBscGZjX3ZwZF9kYXRhICsgb2Zmc2V0LAogCQkJCQkJCW1iLT51bi52YXJEbXAud29yZF9jbnQpOwogCQlvZmZzZXQgKz0gbWItPnVuLnZhckRtcC53b3JkX2NudDsKLQl9IHdoaWxlIChtYi0+dW4udmFyRG1wLndvcmRfY250KTsKLQlscGZjX3BhcnNlX3ZwZChwaGJhLCBscGZjX3ZwZF9kYXRhKTsKKwl9IHdoaWxlIChtYi0+dW4udmFyRG1wLndvcmRfY250ICYmIG9mZnNldCA8IERNUF9WUERfU0laRSk7CisJbHBmY19wYXJzZV92cGQocGhiYSwgbHBmY192cGRfZGF0YSwgb2Zmc2V0KTsKIAogCWtmcmVlKGxwZmNfdnBkX2RhdGEpOwogb3V0X2ZyZWVfY29udGV4dDI6CkBAIC0zMjcsMTMgKzMyMywyMiBAQAogCQkJbWItPnVuLnZhclJkQ29uZmlnLm1heF94cmkgKyAxOwogCiAJcGhiYS0+bG10ID0gbWItPnVuLnZhclJkQ29uZmlnLmxtdDsKLQkvKiBIQkEgaXMgbm90IDRHQiBjYXBhYmxlLCBvciBIQkEgaXMgbm90IDJHQiBjYXBhYmxlLAotCWRvbid0IGxldCBsaW5rIHNwZWVkIGFzayBmb3IgaXQgKi8KLQlpZiAoKCgocGhiYS0+bG10ICYgTE1UXzQyNTBfMTBiaXQpICE9IExNVF80MjUwXzEwYml0KSAmJgotCQkocGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPiBMSU5LX1NQRUVEXzJHKSkgfHwKLQkJKCgocGhiYS0+bG10ICYgTE1UXzIxMjVfMTBiaXQpICE9IExNVF8yMTI1XzEwYml0KSAmJgotCQkocGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPiBMSU5LX1NQRUVEXzFHKSkpIHsKLQkJLyogUmVzZXQgbGluayBzcGVlZCB0byBhdXRvLiAxRy8yR0IgSEJBIGNmZydkIGZvciA0RyAqLworCisJLyogR2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgTW9kZWwgTmFtZSBhbmQgRGVzY3JpcHRpb24gKi8KKwlscGZjX2dldF9oYmFfbW9kZWxfZGVzYyhwaGJhLCBwaGJhLT5Nb2RlbE5hbWUsIHBoYmEtPk1vZGVsRGVzYyk7CisKKwlpZiAoKHBoYmEtPmNmZ19saW5rX3NwZWVkID4gTElOS19TUEVFRF8xMEcpCisJICAgIHx8ICgocGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPT0gTElOS19TUEVFRF8xRykKKwkJJiYgIShwaGJhLT5sbXQgJiBMTVRfMUdiKSkKKwkgICAgfHwgKChwaGJhLT5jZmdfbGlua19zcGVlZCA9PSBMSU5LX1NQRUVEXzJHKQorCQkmJiAhKHBoYmEtPmxtdCAmIExNVF8yR2IpKQorCSAgICB8fCAoKHBoYmEtPmNmZ19saW5rX3NwZWVkID09IExJTktfU1BFRURfNEcpCisJCSYmICEocGhiYS0+bG10ICYgTE1UXzRHYikpCisJICAgIHx8ICgocGhiYS0+Y2ZnX2xpbmtfc3BlZWQgPT0gTElOS19TUEVFRF84RykKKwkJJiYgIShwaGJhLT5sbXQgJiBMTVRfOEdiKSkKKwkgICAgfHwgKChwaGJhLT5jZmdfbGlua19zcGVlZCA9PSBMSU5LX1NQRUVEXzEwRykKKwkJJiYgIShwaGJhLT5sbXQgJiBMTVRfMTBHYikpKSB7CisJCS8qIFJlc2V0IGxpbmsgc3BlZWQgdG8gYXV0byAqLwogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwKIAkJCUtFUk5fV0FSTklORywKIAkJCUxPR19MSU5LX0VWRU5ULApAQCAtNDY0LDYgKzQ2OSw0MCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGxwZmNfaGJhX2Rvd25fcG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBUaGlzIHJvdXRpbmUgd2lsbCBkbyB1bmluaXRpYWxpemF0aW9uIGFmdGVyIHRoZSBIQkEgaXMgcmVzZXQgICAgICAqLworLyogICAgd2hlbiBicmluZ2luZyBkb3duIHRoZSBTTEkgTGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFRoaXMgcm91dGluZSByZXR1cm5zIDAgb24gc3VjY2Vzcy4gQW55IG90aGVyIHJldHVybiB2YWx1ZSAgICAgICAgICovCisvKiAgICBpbmRpY2F0ZXMgYW4gZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK2xwZmNfaGJhX2Rvd25fcG9zdChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQoreworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXAsICpuZXh0X21wOworCWludCBpOworCisJLyogQ2xlYW51cCBwcmVwb3N0ZWQgYnVmZmVycyBvbiB0aGUgRUxTIHJpbmcgKi8KKwlwcmluZyA9ICZwc2xpLT5yaW5nW0xQRkNfRUxTX1JJTkddOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcCwgbmV4dF9tcCwgJnByaW5nLT5wb3N0YnVmcSwgbGlzdCkgeworCQlsaXN0X2RlbCgmbXAtPmxpc3QpOworCQlwcmluZy0+cG9zdGJ1ZnFfY250LS07CisJCWxwZmNfbWJ1Zl9mcmVlKHBoYmEsIG1wLT52aXJ0LCBtcC0+cGh5cyk7CisJCWtmcmVlKG1wKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcHNsaS0+bnVtX3JpbmdzOyBpKyspIHsKKwkJcHJpbmcgPSAmcHNsaS0+cmluZ1tpXTsKKwkJbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nKHBoYmEsIHByaW5nKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBscGZjX2hhbmRsZV9lcmF0dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhpcyByb3V0aW5lIHdpbGwgaGFuZGxlIHByb2Nlc3NpbmcgYSBIb3N0IEF0dGVudGlvbiAgICAgICAgICAgICAgKi8KIC8qICAgIEVycm9yIFN0YXR1cyBldmVudC4gVGhpcyB3aWxsIGJlIGluaXRpYWxpemVkICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00NzYsMjAgKzUxNSw2IEBACiAJc3RydWN0IGxwZmNfc2xpICpwc2xpID0gJnBoYmEtPnNsaTsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAgKnByaW5nOwogCi0JLyoKLQkgKiBJZiBhIHJlc2V0IGlzIHNlbnQgdG8gdGhlIEhCQSByZXN0b3JlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KLQkgKi8KLQlpZiAoIHBoYmEtPmhiYV9zdGF0ZSA9PSBMUEZDX0lOSVRfU1RBUlQgKSB7Ci0JCW1kZWxheSgxKTsKLQkJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KLQkJd3JpdGVsKDAsIHBoYmEtPkhDcmVnYWRkcik7Ci0JCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCi0KLQkJLyogUmVzdG9yZSBQQ0kgY21kIHJlZ2lzdGVyICovCi0JCXBjaV93cml0ZV9jb25maWdfd29yZChwaGJhLT5wY2lkZXYsCi0JCQkJICAgICAgUENJX0NPTU1BTkQsIHBoYmEtPnBjaV9jZmdfdmFsdWUpOwotCX0KLQogCWlmIChwaGJhLT53b3JrX2hzICYgSFNfRkZFUjYpIHsKIAkJLyogUmUtZXN0YWJsaXNoaW5nIExpbmsgKi8KIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0xJTktfRVZFTlQsCkBAIC00OTksNiArNTI0LDcgQEAKIAkJCQlwaGJhLT53b3JrX3N0YXR1c1swXSwgcGhiYS0+d29ya19zdGF0dXNbMV0pOwogCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCXBoYmEtPmZjX2ZsYWcgfD0gRkNfRVNUQUJMSVNIX0xJTks7CisJCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSTJfQUNUSVZFOwogCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAogCQkvKgpAQCAtNTE2LDYgKzU0Miw3IEBACiAJCSAqIGF0dGVtcHQgdG8gcmVzdGFydCBpdC4KIAkJICovCiAJCWxwZmNfb2ZmbGluZShwaGJhKTsKKwkJbHBmY19zbGlfYnJkcmVzdGFydChwaGJhKTsKIAkJaWYgKGxwZmNfb25saW5lKHBoYmEpID09IDApIHsJLyogSW5pdGlhbGl6ZSB0aGUgSEJBICovCiAJCQltb2RfdGltZXIoJnBoYmEtPmZjX2VzdGFidG1vLCBqaWZmaWVzICsgSFogKiA2MCk7CiAJCQlyZXR1cm47CkBAIC01MzEsOCArNTU4LDEwIEBACiAJCQkJcGhiYS0+YnJkX25vLCBwaGJhLT53b3JrX2hzLAogCQkJCXBoYmEtPndvcmtfc3RhdHVzWzBdLCBwaGJhLT53b3JrX3N0YXR1c1sxXSk7CiAKKwkJcHNsaS0+c2xpX2ZsYWcgJj0gfkxQRkNfU0xJMl9BQ1RJVkU7CiAJCWxwZmNfb2ZmbGluZShwaGJhKTsKLQorCQlwaGJhLT5oYmFfc3RhdGUgPSBMUEZDX0hCQV9FUlJPUjsKKwkJbHBmY19oYmFfZG93bl9wb3N0KHBoYmEpOwogCX0KIH0KIApAQCAtNjIzLDcgKzY1Miw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQKLWxwZmNfcGFyc2VfdnBkKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHVpbnQ4X3QgKiB2cGQpCitscGZjX3BhcnNlX3ZwZChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB1aW50OF90ICogdnBkLCBpbnQgbGVuKQogewogCXVpbnQ4X3QgbGVubG8sIGxlbmhpOwogCXVpbnQzMl90IExlbmd0aDsKQEAgLTY0Miw5ICs2NzEsMTAgQEAKIAkJCXBoYmEtPmJyZF9ubywKIAkJCSh1aW50MzJfdCkgdnBkWzBdLCAodWludDMyX3QpIHZwZFsxXSwgKHVpbnQzMl90KSB2cGRbMl0sCiAJCQkodWludDMyX3QpIHZwZFszXSk7Ci0JZG8geworCXdoaWxlICghZmluaXNoZWQgJiYgKGluZGV4IDwgKGxlbiAtIDQpKSkgewogCQlzd2l0Y2ggKHZwZFtpbmRleF0pIHsKIAkJY2FzZSAweDgyOgorCQljYXNlIDB4OTE6CiAJCQlpbmRleCArPSAxOwogCQkJbGVubG8gPSB2cGRbaW5kZXhdOwogCQkJaW5kZXggKz0gMTsKQEAgLTY2MCw3ICs2OTAsOCBAQAogCQkJbGVuaGkgPSB2cGRbaW5kZXhdOwogCQkJaW5kZXggKz0gMTsKIAkJCUxlbmd0aCA9ICgoKCh1bnNpZ25lZCBzaG9ydClsZW5oaSkgPDwgOCkgKyBsZW5sbyk7Ci0KKwkJCWlmIChMZW5ndGggPiBsZW4gLSBpbmRleCkKKwkJCQlMZW5ndGggPSBsZW4gLSBpbmRleDsKIAkJCXdoaWxlIChMZW5ndGggPiAwKSB7CiAJCQkvKiBMb29rIGZvciBTZXJpYWwgTnVtYmVyICovCiAJCQlpZiAoKHZwZFtpbmRleF0gPT0gJ1MnKSAmJiAodnBkW2luZGV4KzFdID09ICdOJykpIHsKQEAgLTc1NCw3ICs3ODUsNyBAQAogCQkJaW5kZXggKys7CiAJCQlicmVhazsKIAkJfQotCX0gd2hpbGUgKCFmaW5pc2hlZCAmJiAoaW5kZXggPCAxMDgpKTsKKwl9CiAKIAlyZXR1cm4oMSk7CiB9CkBAIC03NjUsMTM3ICs3OTYsMTczIEBACiAJbHBmY192cGRfdCAqdnA7CiAJdWludDE2X3QgZGV2X2lkID0gcGhiYS0+cGNpZGV2LT5kZXZpY2U7CiAJdWludDE2X3QgZGV2X3N1YmlkID0gcGhiYS0+cGNpZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwotCXVpbnQ4X3QgaGRydHlwZSA9IHBoYmEtPnBjaWRldi0+aGRyX3R5cGU7Ci0JY2hhciAqbW9kZWxfc3RyID0gIiI7CisJdWludDhfdCBoZHJ0eXBlOworCWludCBtYXhfc3BlZWQ7CisJY2hhciAqIHBvcnRzOworCXN0cnVjdCB7CisJCWNoYXIgKiBuYW1lOworCQlpbnQgICAgbWF4X3NwZWVkOworCQljaGFyICogcG9ydHM7CisJCWNoYXIgKiBidXM7CisJfSBtOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGhiYS0+cGNpZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJ0eXBlKTsKKwlwb3J0cyA9IChoZHJ0eXBlID09IDB4ODApID8gIjItcG9ydCAiIDogIiI7CisJaWYgKG1kcCAmJiBtZHBbMF0gIT0gJ1wwJworCQkmJiBkZXNjcCAmJiBkZXNjcFswXSAhPSAnXDAnKQorCQlyZXR1cm47CisKKwlpZiAocGhiYS0+bG10ICYgTE1UXzEwR2IpCisJCW1heF9zcGVlZCA9IDEwOworCWVsc2UgaWYgKHBoYmEtPmxtdCAmIExNVF84R2IpCisJCW1heF9zcGVlZCA9IDg7CisJZWxzZSBpZiAocGhiYS0+bG10ICYgTE1UXzRHYikKKwkJbWF4X3NwZWVkID0gNDsKKwllbHNlIGlmIChwaGJhLT5sbXQgJiBMTVRfMkdiKQorCQltYXhfc3BlZWQgPSAyOworCWVsc2UKKwkJbWF4X3NwZWVkID0gMTsKIAogCXZwID0gJnBoYmEtPnZwZDsKIAogCXN3aXRjaCAoZGV2X2lkKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0ZJUkVGTFk6Ci0JCW1vZGVsX3N0ciA9ICJMUDYwMDAgMUdiIFBDSSI7CisJCW0gPSAodHlwZW9mKG0pKXsiTFA2MDAwIiwgbWF4X3NwZWVkLCAiIiwgIlBDSSJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfU1VQRVJGTFk6CiAJCWlmICh2cC0+cmV2LmJpdVJldiA+PSAxICYmIHZwLT5yZXYuYml1UmV2IDw9IDMpCi0JCQltb2RlbF9zdHIgPSAiTFA3MDAwIDFHYiBQQ0kiOworCQkJbSA9ICh0eXBlb2YobSkpeyJMUDcwMDAiLCBtYXhfc3BlZWQsICIiLCAiUENJIn07CiAJCWVsc2UKLQkJCW1vZGVsX3N0ciA9ICJMUDcwMDBFIDFHYiBQQ0kiOworCQkJbSA9ICh0eXBlb2YobSkpeyJMUDcwMDBFIiwgbWF4X3NwZWVkLCAiIiwgIlBDSSJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfRFJBR09ORkxZOgotCQltb2RlbF9zdHIgPSAiTFA4MDAwIDFHYiBQQ0kiOworCQltID0gKHR5cGVvZihtKSl7IkxQODAwMCIsIG1heF9zcGVlZCwgIiIsICJQQ0kifTsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0NFTlRBVVI6CiAJCWlmIChGQ19KRURFQ19JRCh2cC0+cmV2LmJpdVJldikgPT0gQ0VOVEFVUl8yR19KRURFQ19JRCkKLQkJCW1vZGVsX3N0ciA9ICJMUDkwMDIgMkdiIFBDSSI7CisJCQltID0gKHR5cGVvZihtKSl7IkxQOTAwMiIsIG1heF9zcGVlZCwgIiIsICJQQ0kifTsKIAkJZWxzZQotCQkJbW9kZWxfc3RyID0gIkxQOTAwMCAxR2IgUENJIjsKKwkJCW0gPSAodHlwZW9mKG0pKXsiTFA5MDAwIiwgbWF4X3NwZWVkLCAiIiwgIlBDSSJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUkZMWToKLQkJbW9kZWxfc3RyID0gIkxQOTUyIDJHYiBQQ0kiOworCQltID0gKHR5cGVvZihtKSl7IkxQOTUyIiwgbWF4X3NwZWVkLCAiIiwgIlBDSSJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEVHQVNVUzoKLQkJbW9kZWxfc3RyID0gIkxQOTgwMiAyR2IgUENJLVgiOworCQltID0gKHR5cGVvZihtKSl7IkxQOTgwMiIsIG1heF9zcGVlZCwgIiIsICJQQ0ktWCJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfVEhPUjoKIAkJaWYgKGhkcnR5cGUgPT0gMHg4MCkKLQkJCW1vZGVsX3N0ciA9ICJMUDEwMDAwREMgMkdiIDItcG9ydCBQQ0ktWCI7CisJCQltID0gKHR5cGVvZihtKSl7IkxQMTAwMDBEQyIsCisJCQkJCW1heF9zcGVlZCwgcG9ydHMsICJQQ0ktWCJ9OwogCQllbHNlCi0JCQltb2RlbF9zdHIgPSAiTFAxMDAwMCAyR2IgUENJLVgiOworCQkJbSA9ICh0eXBlb2YobSkpeyJMUDEwMDAwIiwKKwkJCQkJbWF4X3NwZWVkLCBwb3J0cywgIlBDSS1YIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9WSVBFUjoKLQkJbW9kZWxfc3RyID0gIkxQWDEwMDAgMTBHYiBQQ0ktWCI7CisJCW0gPSAodHlwZW9mKG0pKXsiTFBYMTAwMCIsIG1heF9zcGVlZCwgIiIsICJQQ0ktWCJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfUEZMWToKLQkJbW9kZWxfc3RyID0gIkxQOTgyIDJHYiBQQ0ktWCI7CisJCW0gPSAodHlwZW9mKG0pKXsiTFA5ODIiLCBtYXhfc3BlZWQsICIiLCAiUENJLVgifTsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1RGTFk6CiAJCWlmIChoZHJ0eXBlID09IDB4ODApCi0JCQltb2RlbF9zdHIgPSAiTFAxMDUwREMgMkdiIDItcG9ydCBQQ0ktWCI7CisJCQltID0gKHR5cGVvZihtKSl7IkxQMTA1MERDIiwgbWF4X3NwZWVkLCBwb3J0cywgIlBDSS1YIn07CiAJCWVsc2UKLQkJCW1vZGVsX3N0ciA9ICJMUDEwNTAgMkdiIFBDSS1YIjsKKwkJCW0gPSAodHlwZW9mKG0pKXsiTFAxMDUwIiwgbWF4X3NwZWVkLCBwb3J0cywgIlBDSS1YIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9IRUxJT1M6CiAJCWlmIChoZHJ0eXBlID09IDB4ODApCi0JCQltb2RlbF9zdHIgPSAiTFAxMTAwMiA0R2IgMi1wb3J0IFBDSS1YMiI7CisJCQltID0gKHR5cGVvZihtKSl7IkxQMTEwMDIiLCBtYXhfc3BlZWQsIHBvcnRzLCAiUENJLVgyIn07CiAJCWVsc2UKLQkJCW1vZGVsX3N0ciA9ICJMUDExMDAwIDRHYiBQQ0ktWDIiOworCQkJbSA9ICh0eXBlb2YobSkpeyJMUDExMDAwIiwgbWF4X3NwZWVkLCBwb3J0cywgIlBDSS1YMiJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfSEVMSU9TX1NDU1A6Ci0JCW1vZGVsX3N0ciA9ICJMUDExMDAwLVNQIDRHYiBQQ0ktWDIiOworCQltID0gKHR5cGVvZihtKSl7IkxQMTEwMDAtU1AiLCBtYXhfc3BlZWQsIHBvcnRzLCAiUENJLVgyIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9IRUxJT1NfRENTUDoKLQkJbW9kZWxfc3RyID0gIkxQMTEwMDItU1AgNEdiIDItcG9ydCBQQ0ktWDIiOworCQltID0gKHR5cGVvZihtKSl7IkxQMTEwMDItU1AiLCBtYXhfc3BlZWQsIHBvcnRzLCAiUENJLVgyIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9ORVBUVU5FOgogCQlpZiAoaGRydHlwZSA9PSAweDgwKQotCQkJbW9kZWxfc3RyID0gIkxQZTEwMDIgNEdiIDItcG9ydCI7CisJCQltID0gKHR5cGVvZihtKSl7IkxQZTEwMDIiLCBtYXhfc3BlZWQsIHBvcnRzLCAiUENJZSJ9OwogCQllbHNlCi0JCQltb2RlbF9zdHIgPSAiTFBlMTAwMCA0R2IgUENJZSI7CisJCQltID0gKHR5cGVvZihtKSl7IkxQZTEwMDAiLCBtYXhfc3BlZWQsIHBvcnRzLCAiUENJZSJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfTkVQVFVORV9TQ1NQOgotCQltb2RlbF9zdHIgPSAiTFBlMTAwMC1TUCA0R2IgUENJZSI7CisJCW0gPSAodHlwZW9mKG0pKXsiTFBlMTAwMC1TUCIsIG1heF9zcGVlZCwgcG9ydHMsICJQQ0llIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9ORVBUVU5FX0RDU1A6Ci0JCW1vZGVsX3N0ciA9ICJMUGUxMDAyLVNQIDRHYiAyLXBvcnQgUENJZSI7CisJCW0gPSAodHlwZW9mKG0pKXsiTFBlMTAwMi1TUCIsIG1heF9zcGVlZCwgcG9ydHMsICJQQ0llIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9CTUlEOgotCQltb2RlbF9zdHIgPSAiTFAxMTUwIDRHYiBQQ0ktWDIiOworCQltID0gKHR5cGVvZihtKSl7IkxQMTE1MCIsIG1heF9zcGVlZCwgcG9ydHMsICJQQ0ktWDIifTsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0JTTUI6Ci0JCW1vZGVsX3N0ciA9ICJMUDExMSA0R2IgUENJLVgyIjsKKwkJbSA9ICh0eXBlb2YobSkpeyJMUDExMSIsIG1heF9zcGVlZCwgcG9ydHMsICJQQ0ktWDIifTsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1pFUEhZUjoKIAkJaWYgKGhkcnR5cGUgPT0gMHg4MCkKLQkJCW1vZGVsX3N0ciA9ICJMUGUxMTAwMiA0R2IgMi1wb3J0IFBDSWUiOworCQkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMTAwMiIsIG1heF9zcGVlZCwgcG9ydHMsICJQQ0llIn07CiAJCWVsc2UKLQkJCW1vZGVsX3N0ciA9ICJMUGUxMTAwMCA0R2IgUENJZSI7CisJCQltID0gKHR5cGVvZihtKSl7IkxQZTExMDAwIiwgbWF4X3NwZWVkLCBwb3J0cywgIlBDSWUifTsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1pFUEhZUl9TQ1NQOgotCQltb2RlbF9zdHIgPSAiTFBlMTEwMDAtU1AgNEdiIFBDSWUiOworCQltID0gKHR5cGVvZihtKSl7IkxQZTExMDAwIiwgbWF4X3NwZWVkLCBwb3J0cywgIlBDSWUifTsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1pFUEhZUl9EQ1NQOgotCQltb2RlbF9zdHIgPSAiTFBlMTEwMDItU1AgNEdiIDItcG9ydCBQQ0llIjsKKwkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMTAwMi1TUCIsIG1heF9zcGVlZCwgcG9ydHMsICJQQ0llIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9aTUlEOgotCQltb2RlbF9zdHIgPSAiTFBlMTE1MCA0R2IgUENJZSI7CisJCW0gPSAodHlwZW9mKG0pKXsiTFBlMTE1MCIsIG1heF9zcGVlZCwgcG9ydHMsICJQQ0llIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9aU01COgotCQltb2RlbF9zdHIgPSAiTFBlMTExIDRHYiBQQ0llIjsKKwkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMTEiLCBtYXhfc3BlZWQsIHBvcnRzLCAiUENJZSJ9OwogCQlicmVhazsKIAljYXNlIFBDSV9ERVZJQ0VfSURfTFAxMDE6Ci0JCW1vZGVsX3N0ciA9ICJMUDEwMSAyR2IgUENJLVgiOworCQltID0gKHR5cGVvZihtKSl7IkxQMTAxIiwgbWF4X3NwZWVkLCBwb3J0cywgIlBDSS1YIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9MUDEwMDAwUzoKLQkJbW9kZWxfc3RyID0gIkxQMTAwMDAtUyAyR2IgUENJIjsKKwkJbSA9ICh0eXBlb2YobSkpeyJMUDEwMDAwLVMiLCBtYXhfc3BlZWQsIHBvcnRzLCAiUENJIn07CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9MUDExMDAwUzoKIAljYXNlIFBDSV9ERVZJQ0VfSURfTFBFMTEwMDBTOgogCQlzd2l0Y2ggKGRldl9zdWJpZCkgewogCQljYXNlIFBDSV9TVUJTWVNURU1fSURfTFAxMTAwMFM6Ci0JCQltb2RlbF9zdHIgPSAiTFAxMTAwMi1TIDRHYiBQQ0ktWDIiOworCQkJbSA9ICh0eXBlb2YobSkpeyJMUDExMDAwLVMiLCBtYXhfc3BlZWQsCisJCQkJCXBvcnRzLCAiUENJLVgyIn07CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfU1VCU1lTVEVNX0lEX0xQMTEwMDJTOgotCQkJbW9kZWxfc3RyID0gIkxQMTEwMDAtUyA0R2IgMi1wb3J0IFBDSS1YMiI7CisJCQltID0gKHR5cGVvZihtKSl7IkxQMTEwMDItUyIsIG1heF9zcGVlZCwKKwkJCQkJcG9ydHMsICJQQ0ktWDIifTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSV9TVUJTWVNURU1fSURfTFBFMTEwMDBTOgotCQkJbW9kZWxfc3RyID0gIkxQZTExMDAyLVMgNEdiIFBDSWUiOworCQkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMTAwMC1TIiwgbWF4X3NwZWVkLAorCQkJCQlwb3J0cywgIlBDSWUifTsKIAkJCWJyZWFrOwogCQljYXNlIFBDSV9TVUJTWVNURU1fSURfTFBFMTEwMDJTOgotCQkJbW9kZWxfc3RyID0gIkxQZTExMDAyLVMgNEdiIDItcG9ydCBQQ0llIjsKKwkJCW0gPSAodHlwZW9mKG0pKXsiTFBlMTEwMDItUyIsIG1heF9zcGVlZCwKKwkJCQkJcG9ydHMsICJQQ0llIn07CiAJCQlicmVhazsKIAkJY2FzZSBQQ0lfU1VCU1lTVEVNX0lEX0xQRTExMDEwUzoKLQkJCW1vZGVsX3N0ciA9ICJMUGUxMTAxMC1TIDRHYiAxMC1wb3J0IFBDSWUiOworCQkJbSA9ICh0eXBlb2YobSkpeyJMUGUxMTAxMC1TIiwgbWF4X3NwZWVkLAorCQkJCQkiMTAtcG9ydCAiLCAiUENJZSJ9OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CisJCQltID0gKHR5cGVvZihtKSl7IDAgfTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCW0gPSAodHlwZW9mKG0pKXsgMCB9OwogCQlicmVhazsKIAl9Ci0JaWYgKG1kcCkKLQkJc3NjYW5mKG1vZGVsX3N0ciwgIiVzIiwgbWRwKTsKLQlpZiAoZGVzY3ApCi0JCXNwcmludGYoZGVzY3AsICJFbXVsZXggJXMgRmlicmUgQ2hhbm5lbCBBZGFwdGVyIiwgbW9kZWxfc3RyKTsKKworCWlmIChtZHAgJiYgbWRwWzBdID09ICdcMCcpCisJCXNucHJpbnRmKG1kcCwgNzksIiVzIiwgbS5uYW1lKTsKKwlpZiAoZGVzY3AgJiYgZGVzY3BbMF0gPT0gJ1wwJykKKwkJc25wcmludGYoZGVzY3AsIDI1NSwKKwkJCSAiRW11bGV4ICVzICVkR2IgJXMlcyBGaWJyZSBDaGFubmVsIEFkYXB0ZXIiLAorCQkJIG0ubmFtZSwgbS5tYXhfc3BlZWQsIG0ucG9ydHMsIG0uYnVzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTQ2Miw5ICsxNTI5LDIzIEBACiAJcGhiYS0+cGNpX2JhcjJfbWFwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBoYmEtPnBjaWRldiwgMik7CiAJYmFyMm1hcF9sZW4gICAgICAgID0gcGNpX3Jlc291cmNlX2xlbihwaGJhLT5wY2lkZXYsIDIpOwogCi0JLyogTWFwIEhCQSBTTElNIGFuZCBDb250cm9sIFJlZ2lzdGVycyB0byBhIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICovCisJLyogTWFwIEhCQSBTTElNIHRvIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcy4gKi8KIAlwaGJhLT5zbGltX21lbW1hcF9wICAgICAgPSBpb3JlbWFwKHBoYmEtPnBjaV9iYXIwX21hcCwgYmFyMG1hcF9sZW4pOworCWlmICghcGhiYS0+c2xpbV9tZW1tYXBfcCkgeworCQllcnJvciA9IC1FTk9ERVY7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkgICAiaW9yZW1hcCBmYWlsZWQgZm9yIFNMSU0gbWVtb3J5LlxuIik7CisJCWdvdG8gb3V0X2lkcl9yZW1vdmU7CisJfQorCisJLyogTWFwIEhCQSBDb250cm9sIFJlZ2lzdGVycyB0byBhIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MuICovCiAJcGhiYS0+Y3RybF9yZWdzX21lbW1hcF9wID0gaW9yZW1hcChwaGJhLT5wY2lfYmFyMl9tYXAsIGJhcjJtYXBfbGVuKTsKKwlpZiAoIXBoYmEtPmN0cmxfcmVnc19tZW1tYXBfcCkgeworCQllcnJvciA9IC1FTk9ERVY7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsCisJCQkgICAiaW9yZW1hcCBmYWlsZWQgZm9yIEhCQSBjb250cm9sIHJlZ2lzdGVycy5cbiIpOworCQlnb3RvIG91dF9pb3VubWFwX3NsaW07CisJfQogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBTTEktMiBzdHJ1Y3R1cmVzICovCiAJcGhiYS0+c2xpbTJwID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwaGJhLT5wY2lkZXYtPmRldiwgU0xJMl9TTElNX1NJWkUsCkBAIC0xNTM5LDcgKzE2MjAsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZwaGJhLT5scGZjX3Njc2lfYnVmX2xpc3QpOwogCiAJaG9zdC0+dHJhbnNwb3J0dCA9IGxwZmNfdHJhbnNwb3J0X3RlbXBsYXRlOwotCWhvc3QtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpcGhiYTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CiAJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KGhvc3QsICZwZGV2LT5kZXYpOwogCWlmIChlcnJvcikKQEAgLTE1OTAsMjEgKzE2NzAsMTQgQEAKIAlscGZjX2dldF9oYmFfc3ltX25vZGVfbmFtZShwaGJhLCBmY19ob3N0X3N5bWJvbGljX25hbWUoaG9zdCkpOwogCiAJZmNfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzKGhvc3QpID0gMDsKLQlzd2l0Y2ggKEZDX0pFREVDX0lEKHBoYmEtPnZwZC5yZXYuYml1UmV2KSkgewotCWNhc2UgVklQRVJfSkVERUNfSUQ6CisJaWYgKHBoYmEtPmxtdCAmIExNVF8xMEdiKQogCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgfD0gRkNfUE9SVFNQRUVEXzEwR0JJVDsKLQkJYnJlYWs7Ci0JY2FzZSBIRUxJT1NfSkVERUNfSUQ6CisJaWYgKHBoYmEtPmxtdCAmIExNVF80R2IpCiAJCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhob3N0KSB8PSBGQ19QT1JUU1BFRURfNEdCSVQ7Ci0JCS8qIEZhbGwgdGhyb3VnaCAqLwotCWNhc2UgQ0VOVEFVUl8yR19KRURFQ19JRDoKLQljYXNlIFBFR0FTVVNfSkVERUNfSUQ6Ci0JY2FzZSBUSE9SX0pFREVDX0lEOgorCWlmIChwaGJhLT5sbXQgJiBMTVRfMkdiKQogCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgfD0gRkNfUE9SVFNQRUVEXzJHQklUOwotCQkvKiBGYWxsIHRocm91Z2ggKi8KLQlkZWZhdWx0OgotCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgPSBGQ19QT1JUU1BFRURfMUdCSVQ7Ci0JfQorCWlmIChwaGJhLT5sbXQgJiBMTVRfMUdiKQorCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgfD0gRkNfUE9SVFNQRUVEXzFHQklUOwogCiAJZmNfaG9zdF9tYXhmcmFtZV9zaXplKGhvc3QpID0KIAkJKCgoKHVpbnQzMl90KSBwaGJhLT5mY19zcGFyYW0uY21uLmJiUmN2U2l6ZU1zYiAmIDB4MEYpIDw8IDgpIHwKQEAgLTE2NDMsNiArMTcxNiw3IEBACiAJCQkJCQkJcGhiYS0+c2xpbTJwX21hcHBpbmcpOwogb3V0X2lvdW5tYXA6CiAJaW91bm1hcChwaGJhLT5jdHJsX3JlZ3NfbWVtbWFwX3ApOworb3V0X2lvdW5tYXBfc2xpbToKIAlpb3VubWFwKHBoYmEtPnNsaW1fbWVtbWFwX3ApOwogb3V0X2lkcl9yZW1vdmU6CiAJaWRyX3JlbW92ZSgmbHBmY19oYmFfaW5kZXgsIHBoYmEtPmJyZF9ubyk7CkBAIC0xNjYwLDcgKzE3MzQsNyBAQAogbHBmY19wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICAgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGxwZmNfaGJhICAgICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKWhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAgICAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilob3N0LT5ob3N0ZGF0YTsKIAl1bnNpZ25lZCBsb25nIGlmbGFnOwogCiAJbHBmY19mcmVlX3N5c2ZzX2F0dHIocGhiYSk7CkBAIC0xNjgxLDYgKzE3NTUsNyBAQAogCSAqIHRoZSBIQkEuCiAJICovCiAJbHBmY19zbGlfaGJhX2Rvd24ocGhiYSk7CisJbHBmY19zbGlfYnJkcmVzdGFydChwaGJhKTsKIAogCS8qIFJlbGVhc2UgdGhlIGlycSByZXNlcnZhdGlvbiAqLwogCWZyZWVfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBwaGJhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKaW5kZXggZTNiYzhkMy4uYzU4NWUyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTE5NSw2ICsxOTUsOSBAQAogCQltYi0+dW4udmFySW5pdExuay5saW5rX2ZsYWdzID0gRkxBR1NfVE9QT0xPR1lfTU9ERV9QVF9QVDsKIAkJbWItPnVuLnZhckluaXRMbmsubGlua19mbGFncyB8PSBGTEFHU19UT1BPTE9HWV9GQUlMT1ZFUjsKIAkJYnJlYWs7CisJY2FzZSBGTEFHU19MT0NBTF9MQjoKKwkJbWItPnVuLnZhckluaXRMbmsubGlua19mbGFncyA9IEZMQUdTX0xPQ0FMX0xCOworCQlicmVhazsKIAl9CiAKIAkvKiBORVdfRkVBVFVSRQpAQCAtMzM2LDYgKzMzOSwyMyBAQAogCXJldHVybjsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgbHBmY19yZWFkX2xua19zdGF0ICBJc3N1ZSBhIFJFQUQgTElOSyBTVEFUVVMgKi8KKy8qICAgICAgICAgICAgICAgIG1haWxib3ggY29tbWFuZCAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkCitscGZjX3JlYWRfbG5rX3N0YXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQoreworCU1BSUxCT1hfdCAqbWI7CisKKwltYiA9ICZwbWItPm1iOworCW1lbXNldChwbWIsIDAsIHNpemVvZiAoTFBGQ19NQk9YUV90KSk7CisKKwltYi0+bWJ4Q29tbWFuZCA9IE1CWF9SRUFEX0xOS19TVEFUOworCW1iLT5tYnhPd25lciA9IE9XTl9IT1NUOworCXJldHVybjsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIGxwZmNfcmVnX2xvZ2luICBJc3N1ZSBhIFJFR19MT0dJTiAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICBtYWlsYm94IGNvbW1hbmQgICAgICAgICAqLwpAQCAtNjIwLDYgKzY0MCwxNyBAQAogfQogCiB2b2lkCitscGZjX2tpbGxfYm9hcmQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iKQoreworCU1BSUxCT1hfdCAqbWIgPSAmcG1iLT5tYjsKKworCW1lbXNldChwbWIsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKwltYi0+bWJ4Q29tbWFuZCA9IE1CWF9LSUxMX0JPQVJEOworCW1iLT5tYnhPd25lciA9IE9XTl9IT1NUOworCXJldHVybjsKK30KKwordm9pZAogbHBmY19tYm94X3B1dChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCBMUEZDX01CT1hRX3QgKiBtYnEpCiB7CiAJc3RydWN0IGxwZmNfc2xpICpwc2xpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKaW5kZXggZmJlYWQ3OC4uM2Q3N2JkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IENocmlzdG9waCBIZWxsd2lnICAgICAgICAgICAgICAqCkBAIC00NiwxMyArNDYsMTMgQEAKIAkgKiB0YWJsZSBlbnRyeSBmb3IgdGhhdCBub2RlLgogCSAqLwogCWlmIChtZW1jbXAobm4sICZuZGxwLT5ubHBfbm9kZW5hbWUsIHNpemVvZiAoc3RydWN0IGxwZmNfbmFtZSkpICE9IDApCi0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCiAJaWYgKG1lbWNtcChwbiwgJm5kbHAtPm5scF9wb3J0bmFtZSwgc2l6ZW9mIChzdHJ1Y3QgbHBmY19uYW1lKSkgIT0gMCkKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAKIAkvKiB3ZSBtYXRjaCwgcmV0dXJuIHN1Y2Nlc3MgKi8KLQlyZXR1cm4gKDEpOworCXJldHVybiAxOwogfQogCiBpbnQKQEAgLTE1MCw4ICsxNTAsNyBAQAogCQkJbHAgPSAodWludDMyX3QgKikgcHJzcC0+dmlydDsKIAkJCXB0ciA9ICh2b2lkICopKCh1aW50OF90ICopbHAgKyBzaXplb2YodWludDMyX3QpKTsKIAkJfQotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQkvKiBGb3JjZSB1bHBTdGF0dXMgZXJyb3Igc2luY2Ugd2UgYXJlIHJldHVybmluZyBOVUxMIHB0ciAqLwogCQlpZiAoIShpcnNwLT51bHBTdGF0dXMpKSB7CiAJCQlpcnNwLT51bHBTdGF0dXMgPSBJT1NUQVRfTE9DQUxfUkVKRUNUOwpAQCAtMTU5LDcgKzE1OCw3IEBACiAJCX0KIAkJcHRyID0gTlVMTDsKIAl9Ci0JcmV0dXJuIChwdHIpOworCXJldHVybiBwdHI7CiB9CiAKIApAQCAtMjYwLDEzICsyNTksOSBAQAogCX0gd2hpbGUoZm91bmQpOwogCiAJLyogSWYgd2UgYXJlIGRlbGF5aW5nIGlzc3VpbmcgYW4gRUxTIGNvbW1hbmQsIGNhbmNlbCBpdCAqLwotCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pIHsKLQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9ERUxBWV9UTU87Ci0JCWRlbF90aW1lcl9zeW5jKCZuZGxwLT5ubHBfZGVsYXlmdW5jKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZuZGxwLT5lbHNfcmV0cnlfZXZ0LmV2dF9saXN0cCkpCi0JCQlsaXN0X2RlbF9pbml0KCZuZGxwLT5lbHNfcmV0cnlfZXZ0LmV2dF9saXN0cCk7Ci0JfQotCXJldHVybiAoMCk7CisJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykKKwkJbHBmY19jYW5jZWxfcmV0cnlfZGVsYXlfdG1vKHBoYmEsIG5kbHApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0zMDAsMTIgKzI5NSwxMCBAQAogCQkJCS8qIFN0YXJ0IGRpc2NvdmVyeSAtIHRoaXMgc2hvdWxkIGp1c3QgZG8KIAkJCQkgICBDTEVBUl9MQSAqLwogCQkJCWxwZmNfZGlzY19zdGFydChwaGJhKTsKLQkJCX0KLQkJCWVsc2UgeworCQkJfSBlbHNlIHsKIAkJCQlscGZjX2luaXRpYWxfZmxvZ2kocGhiYSk7CiAJCQl9Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlzdGF0LnVuLmIubHNSanRSc25Db2RlID0gTFNSSlRfTE9HSUNBTF9CU1k7CiAJCQlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfTk9USElOR19NT1JFOwogCQkJbHBmY19lbHNfcnNwX3JlamVjdChwaGJhLCBzdGF0LnVuLmxzUmp0RXJyb3IsIGNtZGlvY2IsCkBAIC0zMjEsNyArMzE0LDcgQEAKIAkJc3RhdC51bi5iLmxzUmp0UnNuQ29kZSA9IExTUkpUX1VOQUJMRV9UUEM7CiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9TUEFSTV9PUFRJT05TOwogCQlscGZjX2Vsc19yc3BfcmVqZWN0KHBoYmEsIHN0YXQudW4ubHNSanRFcnJvciwgY21kaW9jYiwgbmRscCk7Ci0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCX0KIAlpY21kID0gJmNtZGlvY2ItPmlvY2I7CiAKQEAgLTM1Myw3ICszNDYsNyBAQAogCQkoKHNwLT5jbW4uYmJSY3ZTaXplTXNiICYgMHgwRikgPDwgOCkgfCBzcC0+Y21uLmJiUmN2U2l6ZUxzYjsKIAogCS8qIG5vIG5lZWQgdG8gcmVnX2xvZ2luIGlmIHdlIGFyZSBhbHJlYWR5IGluIG9uZSBvZiB0aGVzZSBzdGF0ZXMgKi8KLQlzd2l0Y2gobmRscC0+bmxwX3N0YXRlKSB7CisJc3dpdGNoIChuZGxwLT5ubHBfc3RhdGUpIHsKIAljYXNlICBOTFBfU1RFX05QUl9OT0RFOgogCQlpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfQURJU0MpKQogCQkJYnJlYWs7CkBAIC0zNjIsNyArMzU1LDcgQEAKIAljYXNlICBOTFBfU1RFX1VOTUFQUEVEX05PREU6CiAJY2FzZSAgTkxQX1NURV9NQVBQRURfTk9ERToKIAkJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX1BMT0dJLCBjbWRpb2NiLCBuZGxwLCBOVUxMLCAwKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKChwaGJhLT5mY19mbGFnICYgRkNfUFQyUFQpCkBAIC0zOTgsMjQgKzM5MSwxNiBAQAogCSAqLwogCW1ib3gtPm1ib3hfY21wbCA9IGxwZmNfbWJ4X2NtcGxfcmVnX2xvZ2luOwogCW1ib3gtPmNvbnRleHQyICA9IG5kbHA7Ci0JbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0FDQ19SRUdMT0dJTjsKKwluZGxwLT5ubHBfZmxhZyB8PSAoTkxQX0FDQ19SRUdMT0dJTiB8IE5MUF9SQ1ZfUExPR0kpOwogCi0JLyogSWYgdGhlcmUgaXMgYW4gb3V0c3RhbmRpbmcgUExPR0kgaXNzdWVkLCBhYm9ydCBpdCBiZWZvcmUKLQkgKiBzZW5kaW5nIEFDQyByc3AgdG8gUExPR0kgcmVjaWV2ZWQuCi0JICovCi0JaWYgKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX1BMT0dJX0lTU1VFKSB7Ci0JCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBMT0dJICovCi0JCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOwotCX0KLQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfUkNWX1BMT0dJOwogCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9QTE9HSSwgY21kaW9jYiwgbmRscCwgbWJveCwgMCk7Ci0JcmV0dXJuICgxKTsKKwlyZXR1cm4gMTsKIAogb3V0OgogCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOwogCXN0YXQudW4uYi5sc1JqdFJzbkNvZGVFeHAgPSBMU0VYUF9PVVRfT0ZfUkVTT1VSQ0U7CiAJbHBmY19lbHNfcnNwX3JlamVjdChwaGJhLCBzdGF0LnVuLmxzUmp0RXJyb3IsIGNtZGlvY2IsIG5kbHApOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQ1MSwxMiArNDM2LDExIEBACiAJICAgIChscGZjX2NoZWNrX2FkaXNjKHBoYmEsIG5kbHAsIHBubiwgcHBuKSkpIHsKIAkJaWYgKGNtZCA9PSBFTFNfQ01EX0FESVNDKSB7CiAJCQlscGZjX2Vsc19yc3BfYWRpc2NfYWNjKHBoYmEsIGNtZGlvY2IsIG5kbHApOwotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX1BMT0dJLCBjbWRpb2NiLCBuZGxwLAogCQkJCU5VTEwsIDApOwogCQl9Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAkvKiBSZWplY3QgdGhpcyByZXF1ZXN0IGJlY2F1c2UgaW52YWxpZCBwYXJhbWV0ZXJzICovCiAJc3RhdC51bi5iLmxzUmp0UnN2ZDAgPSAwOwpAQCAtNDY1LDE2ICs0NDksMTcgQEAKIAlzdGF0LnVuLmIudmVuZG9yVW5pcXVlID0gMDsKIAlscGZjX2Vsc19yc3BfcmVqZWN0KHBoYmEsIHN0YXQudW4ubHNSanRFcnJvciwgY21kaW9jYiwgbmRscCk7CiAKLQluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSAodW5zaWduZWQgbG9uZylFTFNfQ01EX1BMT0dJOwogCS8qIDEgc2VjIHRpbWVvdXQgKi8KIAltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWik7CiAKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX1BMT0dJOworCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gbmRscC0+bmxwX3N0YXRlOwogCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQ4OSwyNSArNDc0LDMzIEBACiAJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0xPR09fQUNDOwogCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOwogCi0JaWYgKCEobmRscC0+bmxwX3R5cGUgJiBOTFBfRkFCUklDKSkgeworCWlmICghKG5kbHAtPm5scF90eXBlICYgTkxQX0ZBQlJJQykgfHwKKwkJKG5kbHAtPm5scF9zdGF0ZSA9PSBOTFBfU1RFX0FESVNDX0lTU1VFKSkgewogCQkvKiBPbmx5IHRyeSB0byByZS1sb2dpbiBpZiB0aGlzIGlzIE5PVCBhIEZhYnJpYyBOb2RlICovCi0JCW5kbHAtPm5scF9sYXN0X2Vsc2NtZCA9ICh1bnNpZ25lZCBsb25nKUVMU19DTURfUExPR0k7CiAJCW1vZF90aW1lcigmbmRscC0+bmxwX2RlbGF5ZnVuYywgamlmZmllcyArIEhaICogMSk7CiAJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisKKwkJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gRUxTX0NNRF9QTE9HSTsKKwkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBuZGxwLT5ubHBfc3RhdGU7CisJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CisJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKKwl9IGVsc2UgeworCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IG5kbHAtPm5scF9zdGF0ZTsKKwkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTlVTRURfTk9ERTsKKwkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfVU5VU0VEX0xJU1QpOwogCX0KIAotCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7Ci0JbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwotCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSX0FESVNDOworCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCS8qIFRoZSBkcml2ZXIgaGFzIHRvIHdhaXQgdW50aWwgdGhlIEFDQyBjb21wbGV0ZXMgYmVmb3JlIGl0IGNvbnRpbnVlcwogCSAqIHByb2Nlc3NpbmcgdGhlIExPR08uICBUaGUgYWN0aW9uIHdpbGwgcmVzdW1lIGluCiAJICogbHBmY19jbXBsX2Vsc19sb2dvX2FjYyByb3V0aW5lLiBTaW5jZSBwYXJ0IG9mIHByb2Nlc3NpbmcgaW5jbHVkZXMgYW4KIAkgKiB1bnJlZ19sb2dpbiwgdGhlIGRyaXZlciB3YWl0cyBzbyB0aGUgQUNDIGRvZXMgbm90IGdldCBhYm9ydGVkLgogCSAqLwotCXJldHVybiAoMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01NTUsMjAgKzU0OCwxMiBAQAogCWlmICgocGhiYS0+Y2ZnX3VzZV9hZGlzYyA9PSAwKSAmJgogCQkhKHBoYmEtPmZjX2ZsYWcgJiBGQ19SU0NOX01PREUpKSB7CiAJCWlmICghKG5kbHAtPm5scF9mY3BfaW5mbyAmIE5MUF9GQ1BfMl9ERVZJQ0UpKQotCQkJcmV0dXJuICgwKTsKKwkJCXJldHVybiAwOwogCX0KIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05QUl9BRElTQzsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWxwZmNfZGlzY19ub29wKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCi0JCXN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwgdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCi17Ci0JLyogVGhpcyByb3V0aW5lIGRvZXMgbm90aGluZywganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgKi8KLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtNTgzLDcgKzU2OCw3IEBACiAJCQlwaGJhLT5icmRfbm8sCiAJCQluZGxwLT5ubHBfRElELCBldnQsIG5kbHAtPm5scF9zdGF0ZSwgbmRscC0+bmxwX3JwaSwKIAkJCW5kbHAtPm5scF9mbGFnKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogLyogU3RhcnQgb2YgRGlzY292ZXJ5IFN0YXRlIE1hY2hpbmUgcm91dGluZXMgKi8KQEAgLTU5NywxMiArNTgyLDEzIEBACiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKIAlpZiAobHBmY19yY3ZfcGxvZ2kocGhiYSwgbmRscCwgY21kaW9jYikpIHsKKwkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX1VOVVNFRF9OT0RFOwogCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1VOVVNFRF9OT0RFOwogCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTlVTRURfTElTVCk7Ci0JCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIAl9CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JcmV0dXJuIChOTFBfU1RFX0ZSRUVEX05PREUpOworCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtNjExLDcgKzU5Nyw3IEBACiB7CiAJbHBmY19pc3N1ZV9lbHNfbG9nbyhwaGJhLCBuZGxwLCAwKTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTlVTRURfTElTVCk7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtNjI4LDcgKzYxNCw3IEBACiAJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfVU5VU0VEX0xJU1QpOwogCi0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtNjM2LDcgKzYyMiw3IEBACiAJCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwgdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCiB7CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JcmV0dXJuIChOTFBfU1RFX0ZSRUVEX05PREUpOworCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtNjQ0LDcgKzYzMCw3IEBACiAJCQkgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQogewogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOwotCXJldHVybiAoTkxQX1NURV9GUkVFRF9OT0RFKTsKKwlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTY3NywxMiArNjYzLDI2IEBACiAJCXN0YXQudW4uYi5sc1JqdFJzbkNvZGUgPSBMU1JKVF9VTkFCTEVfVFBDOwogCQlzdGF0LnVuLmIubHNSanRSc25Db2RlRXhwID0gTFNFWFBfQ01EX0lOX1BST0dSRVNTOwogCQlscGZjX2Vsc19yc3BfcmVqZWN0KHBoYmEsIHN0YXQudW4ubHNSanRFcnJvciwgY21kaW9jYiwgbmRscCk7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWxwZmNfcmN2X3Bsb2dpKHBoYmEsIG5kbHAsIGNtZGlvY2IpOwogCX0gLyogaWYgb3VyIHBvcnRuYW1lIHdhcyBsZXNzICovCiAKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKK30KKworc3RhdGljIHVpbnQzMl90CitscGZjX3Jjdl9sb2dvX3Bsb2dpX2lzc3VlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCisJCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwgdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCit7CisJc3RydWN0IGxwZmNfaW9jYnEgICAgICpjbWRpb2NiOworCisJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CisKKwkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBQTE9HSSAqLworCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOworCisJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKKwlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTY5NSwyNCArNjk1LDI0IEBACiAKIAkvKiBzb2Z0d2FyZSBhYm9ydCBvdXRzdGFuZGluZyBQTE9HSSAqLwogCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOwotCW1vZF90aW1lcigmbmRscC0+bmxwX2RlbGF5ZnVuYywgamlmZmllcyArIEhaICogMSk7Ci0Jc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9ERUxBWV9UTU87Ci0Jc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAlpZiAoZXZ0ID09IE5MUF9FVlRfUkNWX0xPR08pIHsKIAkJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWxwZmNfaXNzdWVfZWxzX2xvZ28ocGhiYSwgbmRscCwgMCk7CiAJfQogCiAJLyogUHV0IG5kbHAgaW4gbnByIGxpc3Qgc2V0IHBsb2dpIHRpbWVyIGZvciAxIHNlYyAqLwotCW5kbHAtPm5scF9sYXN0X2Vsc2NtZCA9ICh1bnNpZ25lZCBsb25nKUVMU19DTURfUExPR0k7CisJbW9kX3RpbWVyKCZuZGxwLT5ubHBfZGVsYXlmdW5jLCBqaWZmaWVzICsgSFogKiAxKTsKKwlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX1BMT0dJOworCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9QTE9HSV9JU1NVRTsKIAluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKIAotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTczMSw3ICs3MzEsOCBAQAogCXJzcGlvY2IgPSBjbWRpb2NiLT5jb250ZXh0X3VuLnJzcF9pb2NiOwogCiAJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0FDQ19SRUdMT0dJTikgewotCQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJCS8qIFJlY292ZXJ5IGZyb20gUExPR0kgY29sbGlzaW9uIGxvZ2ljICovCisJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJfQogCiAJaXJzcCA9ICZyc3Bpb2NiLT5pb2NiOwpAQCAtNzkxLDcgKzc5Miw3IEBACiAJCSAqIGV4ZWN1dGUgZmlyc3QsIHF1ZXVlIHRoaXMgY29tbWFuZCB0bwogCQkgKiBiZSBwcm9jZXNzZWQgbGF0ZXIuCiAJCSAqLwotCQlzd2l0Y2gobmRscC0+bmxwX0RJRCkgeworCQlzd2l0Y2ggKG5kbHAtPm5scF9ESUQpIHsKIAkJY2FzZSBOYW1lU2VydmVyX0RJRDoKIAkJCW1ib3gtPm1ib3hfY21wbCA9CiAJCQkJbHBmY19tYnhfY21wbF9uc19yZWdfbG9naW47CkBAIC04MTIsNyArODEzLDcgQEAKIAkJCQlOTFBfU1RFX1JFR19MT0dJTl9JU1NVRTsKIAkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwKIAkJCQkgICAgICBOTFBfUkVHTE9HSU5fTElTVCk7Ci0JCQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogCQl9CiAJCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAl9IGVsc2UgewpAQCAtODI0LDcgKzgyNSw3IEBACiAJLyogRnJlZSB0aGlzIG5vZGUgc2luY2UgdGhlIGRyaXZlciBjYW5ub3QgbG9naW4gb3IgaGFzIHRoZSB3cm9uZwogCSAgIHNwYXJtICovCiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JcmV0dXJuIChOTFBfU1RFX0ZSRUVEX05PREUpOworCXJldHVybiBOTFBfU1RFX0ZSRUVEX05PREU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtODM1LDcgKzgzNiw3IEBACiAJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CiAKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQlyZXR1cm4gKE5MUF9TVEVfRlJFRURfTk9ERSk7CisJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC04NDYsMTMgKzg0NywxNCBAQAogCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIFBMT0dJICovCiAJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CiAKKwluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7CiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC04NjgsMTMgKzg3MCwxNCBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJaWYgKGxwZmNfcmN2X3Bsb2dpKHBoYmEsIG5kbHAsIGNtZGlvY2IpKSB7Ci0JCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwkJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIAl9CisJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwogCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7CiAJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7Ci0JbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscCwgMCk7CisJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscC0+bmxwX0RJRCwgMCk7CiAKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC04ODcsNyArODkwLDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfZWxzX3JzcF9wcmxpX2FjYyhwaGJhLCBjbWRpb2NiLCBuZGxwKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC05MDMsNyArOTA2LDcgQEAKIAlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAwKTsKIAogCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtOTE2LDcgKzkxOSw3IEBACiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKIAlscGZjX3Jjdl9wYWRpc2MocGhiYSwgbmRscCwgY21kaW9jYik7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtOTMwLDcgKzkzMyw3IEBACiAKIAkvKiBUcmVhdCBsaWtlIHJjdiBsb2dvICovCiAJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC05NTAsMjkgKzk1MywzMyBAQAogCiAJaWYgKChpcnNwLT51bHBTdGF0dXMpIHx8CiAJCSghbHBmY19jaGVja19hZGlzYyhwaGJhLCBuZGxwLCAmYXAtPm5vZGVOYW1lLCAmYXAtPnBvcnROYW1lKSkpIHsKLQkJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gKHVuc2lnbmVkIGxvbmcpRUxTX0NNRF9QTE9HSTsKIAkJLyogMSBzZWMgdGltZW91dCAqLwogCQltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWik7CiAJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0RFTEFZX1RNTzsKIAkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCW5kbHAtPm5scF9sYXN0X2Vsc2NtZCA9IEVMU19DTURfUExPR0k7CiAKIAkJbWVtc2V0KCZuZGxwLT5ubHBfbm9kZW5hbWUsIDAsIHNpemVvZiAoc3RydWN0IGxwZmNfbmFtZSkpOwogCQltZW1zZXQoJm5kbHAtPm5scF9wb3J0bmFtZSwgMCwgc2l6ZW9mIChzdHJ1Y3QgbHBmY19uYW1lKSk7CiAKKwkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwogCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJCWxwZmNfdW5yZWdfcnBpKHBoYmEsIG5kbHApOwotCQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJfQorCiAJaWYgKG5kbHAtPm5scF90eXBlICYgTkxQX0ZDUF9UQVJHRVQpIHsKKwkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwogCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX01BUFBFRF9OT0RFOwogCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9NQVBQRURfTElTVCk7CiAJfSBlbHNlIHsKKwkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwogCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1VOTUFQUEVEX05PREU7CiAJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1VOTUFQUEVEX0xJU1QpOwogCX0KLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC05ODQsNyArOTkxLDcgQEAKIAlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKIAogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05PX0xJU1QpOwotCXJldHVybiAoTkxQX1NURV9GUkVFRF9OT0RFKTsKKwlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTk5NSwxNCArMTAwMiwxNSBAQAogCS8qIHNvZnR3YXJlIGFib3J0IG91dHN0YW5kaW5nIEFESVNDICovCiAJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CiAKKwluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfQURJU0NfSVNTVUU7CiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CisJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX05QUl9BRElTQzsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAotCWxwZmNfZGlzY19zZXRfYWRpc2MocGhiYSwgbmRscCk7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTAxNSw3ICsxMDIzLDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfcmN2X3Bsb2dpKHBoYmEsIG5kbHAsIGNtZGlvY2IpOwotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTEwMjgsNyArMTAzNiw3IEBACiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKIAlscGZjX2Vsc19yc3BfcHJsaV9hY2MocGhiYSwgY21kaW9jYiwgbmRscCk7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTA0MSw3ICsxMDQ5LDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTA1NCw3ICsxMDYyLDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfcmN2X3BhZGlzYyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xMDY2LDcgKzEwNzQsNyBAQAogCiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTA5MCwzMSArMTA5OCwzNCBAQAogCQkJCXBoYmEtPmJyZF9ubywKIAkJCQlkaWQsIG1iLT5tYnhTdGF0dXMsIHBoYmEtPmhiYV9zdGF0ZSk7CiAKKwkJLyogUHV0IG5kbHAgaW4gbnByIGxpc3Qgc2V0IHBsb2dpIHRpbWVyIGZvciAxIHNlYyAqLwogCQltb2RfdGltZXIoJm5kbHAtPm5scF9kZWxheWZ1bmMsIGppZmZpZXMgKyBIWiAqIDEpOwogCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCW5kbHAtPm5scF9mbGFnIHw9IE5MUF9ERUxBWV9UTU87CiAJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQluZGxwLT5ubHBfbGFzdF9lbHNjbWQgPSBFTFNfQ01EX1BMT0dJOwogCiAJCWxwZmNfaXNzdWVfZWxzX2xvZ28ocGhiYSwgbmRscCwgMCk7Ci0JCS8qIFB1dCBuZGxwIGluIG5wciBsaXN0IHNldCBwbG9naSB0aW1lciBmb3IgMSBzZWMgKi8KLQkJbmRscC0+bmxwX2xhc3RfZWxzY21kID0gKHVuc2lnbmVkIGxvbmcpRUxTX0NNRF9QTE9HSTsKKwkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX1JFR19MT0dJTl9JU1NVRTsKIAkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTlBSX0xJU1QpOwotCQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiAJfQogCiAJbmRscC0+bmxwX3JwaSA9IG1iLT51bi52YXJXb3Jkc1swXTsKIAogCS8qIE9ubHkgaWYgd2UgYXJlIG5vdCBhIGZhYnJpYyBucG9ydCBkbyB3ZSBpc3N1ZSBQUkxJICovCiAJaWYgKCEobmRscC0+bmxwX3R5cGUgJiBOTFBfRkFCUklDKSkgeworCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUkVHX0xPR0lOX0lTU1VFOwogCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BSTElfSVNTVUU7CiAJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1BSTElfTElTVCk7CiAJCWxwZmNfaXNzdWVfZWxzX3BybGkocGhiYSwgbmRscCwgMCk7CiAJfSBlbHNlIHsKKwkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX1JFR19MT0dJTl9JU1NVRTsKIAkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTk1BUFBFRF9OT0RFOwogCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTk1BUFBFRF9MSVNUKTsKIAl9Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTEyMyw3ICsxMTM0LDcgQEAKIAkJCSAgICAgIHVpbnQzMl90IGV2dCkKIHsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQlyZXR1cm4gKE5MUF9TVEVfRlJFRURfTk9ERSk7CisJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xMTMxLDEyICsxMTQyLDEzIEBACiAJCQkgICAgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsCiAJCQkgICAgICAgdWludDMyX3QgZXZ0KQogeworCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9SRUdfTE9HSU5fSVNTVUU7CiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTE0OCw3ICsxMTYwLDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfcmN2X3Bsb2dpKHBoYmEsIG5kbHAsIGNtZGlvY2IpOwotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTExNjAsNyArMTE3Miw3IEBACiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKIAlscGZjX2Vsc19yc3BfcHJsaV9hY2MocGhiYSwgY21kaW9jYiwgbmRscCk7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTE3NSw3ICsxMTg3LDcgQEAKIAlscGZjX2Vsc19hYm9ydChwaGJhLCBuZGxwLCAxKTsKIAogCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTE4Nyw3ICsxMTk5LDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfcmN2X3BhZGlzYyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogLyogVGhpcyByb3V0aW5lIGlzIGVudm9rZWQgd2hlbiB3ZSByY3YgYSBQUkxPIHJlcXVlc3QgZnJvbSBhIG5wb3J0CkBAIC0xMjAzLDcgKzEyMTUsNyBAQAogCiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTIyMCw5ICsxMjMyLDEwIEBACiAKIAlpcnNwID0gJnJzcGlvY2ItPmlvY2I7CiAJaWYgKGlyc3AtPnVscFN0YXR1cykgeworCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUFJMSV9JU1NVRTsKIAkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9VTk1BUFBFRF9OT0RFOwogCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9VTk1BUFBFRF9MSVNUKTsKLQkJcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogCX0KIAogCS8qIENoZWNrIG91dCBQUkxJIHJzcCAqLwpAQCAtMTIzOCw5ICsxMjUxLDEwIEBACiAJCQluZGxwLT5ubHBfZmNwX2luZm8gfD0gTkxQX0ZDUF8yX0RFVklDRTsKIAl9CiAKKwluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfUFJMSV9JU1NVRTsKIAluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX01BUFBFRF9OT0RFOwogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX01BUFBFRF9MSVNUKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogLyohIGxwZmNfZGV2aWNlX3JtX3BybGlfaXNzdWUKQEAgLTEyNjgsNyArMTI4Miw3IEBACiAJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CiAKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQlyZXR1cm4gKE5MUF9TVEVfRlJFRURfTk9ERSk7CisJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIH0KIAogCkBAIC0xMjk1LDEyICsxMzA5LDEzIEBACiAJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUFJMSSAqLwogCWxwZmNfZWxzX2Fib3J0KHBoYmEsIG5kbHAsIDEpOwogCisJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX1BSTElfSVNTVUU7CiAJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OUFJfTElTVCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSXzJCX0RJU0M7CiAJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTMxMiw3ICsxMzI3LDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfcmN2X3Bsb2dpKHBoYmEsIG5kbHAsIGNtZGlvY2IpOwotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTEzMjUsNyArMTM0MCw3IEBACiAKIAlscGZjX3Jjdl9wcmxpKHBoYmEsIG5kbHAsIGNtZGlvY2IpOwogCWxwZmNfZWxzX3JzcF9wcmxpX2FjYyhwaGJhLCBjbWRpb2NiLCBuZGxwKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xMzM3LDcgKzEzNTIsNyBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xMzQ5LDcgKzEzNjQsNyBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJbHBmY19yY3ZfcGFkaXNjKHBoYmEsIG5kbHAsIGNtZGlvY2IpOwotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTEzNjAsMjEgKzEzNzUsMjEgQEAKIAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCi0JLyogVHJlYXQgbGlrZSByY3YgbG9nbyAqLwotCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCWxwZmNfZWxzX3JzcF9hY2MocGhiYSwgRUxTX0NNRF9BQ0MsIGNtZGlvY2IsIG5kbHAsIE5VTEwsIDApOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAogbHBmY19kZXZpY2VfcmVjb3ZfdW5tYXBfbm9kZShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAogCQkJICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsIHVpbnQzMl90IGV2dCkKIHsKKwluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfVU5NQVBQRURfTk9ERTsKIAluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKIAluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl8yQl9ESVNDOwogCWxwZmNfZGlzY19zZXRfYWRpc2MocGhiYSwgbmRscCk7CiAKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xMzg2LDcgKzE0MDEsNyBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJbHBmY19yY3ZfcGxvZ2kocGhiYSwgbmRscCwgY21kaW9jYik7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTM5OCw3ICsxNDEzLDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfZWxzX3JzcF9wcmxpX2FjYyhwaGJhLCBjbWRpb2NiLCBuZGxwKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xNDEwLDcgKzE0MjUsNyBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xNDIzLDcgKzE0MzgsNyBAQAogCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOwogCiAJbHBmY19yY3ZfcGFkaXNjKHBoYmEsIG5kbHAsIGNtZGlvY2IpOwotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTE0NDIsNyArMTQ1Nyw3IEBACiAKIAkvKiBUcmVhdCBsaWtlIHJjdiBsb2dvICovCiAJbHBmY19yY3ZfbG9nbyhwaGJhLCBuZGxwLCBjbWRpb2NiKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xNDUwLDEzICsxNDY1LDE0IEBACiAJCQkgICAgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiBuZGxwLCB2b2lkICphcmcsCiAJCQkgICAgdWludDMyX3QgZXZ0KQogeworCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9NQVBQRURfTk9ERTsKIAluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX05QUl9MSVNUKTsKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAlscGZjX2Rpc2Nfc2V0X2FkaXNjKHBoYmEsIG5kbHApOwotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKwlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAgLTE0NzAsMjMgKzE0ODYsMjUgQEAKIAogCS8qIElnbm9yZSBQTE9HSSBpZiB3ZSBoYXZlIGFuIG91dHN0YW5kaW5nIExPR08gKi8KIAlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTE9HT19TTkQpIHsKLQkJcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogCX0KIAogCWlmIChscGZjX3Jjdl9wbG9naShwaGJhLCBuZGxwLCBjbWRpb2NiKSkgewogCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7Ci0JCW5kbHAtPm5scF9mbGFnICY9IH4oTkxQX05QUl9BRElTQyB8IE5MUF9OUFJfMkJfRElTQyk7CisJCW5kbHAtPm5scF9mbGFnICY9IH5OTFBfTlBSX0FESVNDOwogCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCQlyZXR1cm4gbmRscC0+bmxwX3N0YXRlOwogCX0KIAogCS8qIHNlbmQgUExPR0kgaW1tZWRpYXRlbHksIG1vdmUgdG8gUExPR0kgaXNzdWUgc3RhdGUgKi8KIAlpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pKSB7Ci0JCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOwotCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7Ci0JCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBuZGxwLCAwKTsKKwkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOworCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOworCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QTE9HSV9MSVNUKTsKKwkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscC0+bmxwX0RJRCwgMCk7CiAJfQotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKKworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTUwNiwxNiArMTUyNCwyMiBAQAogCiAJaWYgKCEobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKSkgewogCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSB7CisJCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKKwkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQkJbmRscC0+bmxwX3ByZXZfc3RhdGUgPSBOTFBfU1RFX05QUl9OT0RFOwogCQkJbmRscC0+bmxwX3N0YXRlID0gTkxQX1NURV9BRElTQ19JU1NVRTsKIAkJCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX0FESVNDX0xJU1QpOwogCQkJbHBmY19pc3N1ZV9lbHNfYWRpc2MocGhiYSwgbmRscCwgMCk7CiAJCX0gZWxzZSB7CisJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CiAJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOwogCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfUExPR0lfTElTVCk7Ci0JCQlscGZjX2lzc3VlX2Vsc19wbG9naShwaGJhLCBuZGxwLCAwKTsKKwkJCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAtPm5scF9ESUQsIDApOwogCQl9CisKIAl9Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTUyOCw3ICsxNTUyLDcgQEAKIAljbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopIGFyZzsKIAogCWxwZmNfcmN2X2xvZ28ocGhiYSwgbmRscCwgY21kaW9jYik7Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTU0NCwxNiArMTU2OCwxOCBAQAogCiAJaWYgKCEobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKSkgewogCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfTlBSX0FESVNDKSB7CisJCQluZGxwLT5ubHBfcHJldl9zdGF0ZSA9IE5MUF9TVEVfTlBSX05PREU7CiAJCQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX0FESVNDX0lTU1VFOwogCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfQURJU0NfTElTVCk7CiAJCQlscGZjX2lzc3VlX2Vsc19hZGlzYyhwaGJhLCBuZGxwLCAwKTsKIAkJfSBlbHNlIHsKKwkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfUExPR0lfSVNTVUU7CiAJCQlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9QTE9HSV9MSVNUKTsKLQkJCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAsIDApOworCQkJbHBmY19pc3N1ZV9lbHNfcGxvZ2kocGhiYSwgbmRscC0+bmxwX0RJRCwgMCk7CiAJCX0KIAl9Ci0JcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTU2NSwyNSArMTU5MSw0NyBAQAogCiAJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CiAKKwlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJbmRscC0+bmxwX2ZsYWcgfD0gTkxQX0xPR09fQUNDOworCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCiAJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX0FDQywgY21kaW9jYiwgbmRscCwgTlVMTCwgMCk7CiAKLQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKSB7Ci0JCWlmIChuZGxwLT5ubHBfbGFzdF9lbHNjbWQgPT0gKHVuc2lnbmVkIGxvbmcpRUxTX0NNRF9QTE9HSSkgewotCQkJcmV0dXJuIChuZGxwLT5ubHBfc3RhdGUpOwotCQl9IGVsc2UgewotCQkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9ERUxBWV9UTU87Ci0JCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJCWRlbF90aW1lcl9zeW5jKCZuZGxwLT5ubHBfZGVsYXlmdW5jKTsKLQkJCWlmICghbGlzdF9lbXB0eSgmbmRscC0+ZWxzX3JldHJ5X2V2dC5ldnRfbGlzdHApKQotCQkJCWxpc3RfZGVsX2luaXQoJm5kbHAtPmVsc19yZXRyeV9ldnQuZXZ0X2xpc3RwKTsKLQkJfQorCWlmICghKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykpIHsKKwkJbW9kX3RpbWVyKCZuZGxwLT5ubHBfZGVsYXlmdW5jLCBqaWZmaWVzICsgSFogKiAxKTsKKwkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQluZGxwLT5ubHBfZmxhZyB8PSBOTFBfREVMQVlfVE1POworCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKKwkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCW5kbHAtPm5scF9sYXN0X2Vsc2NtZCA9IEVMU19DTURfUExPR0k7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQluZGxwLT5ubHBfZmxhZyAmPSB+TkxQX05QUl9BRElTQzsKKwkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJfQorCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7Cit9CiAKLQluZGxwLT5ubHBfc3RhdGUgPSBOTFBfU1RFX1BMT0dJX0lTU1VFOwotCWxwZmNfbmxwX2xpc3QocGhiYSwgbmRscCwgTkxQX1BMT0dJX0xJU1QpOwotCWxwZmNfaXNzdWVfZWxzX3Bsb2dpKHBoYmEsIG5kbHAsIDApOwotCXJldHVybiAobmRscC0+bmxwX3N0YXRlKTsKK3N0YXRpYyB1aW50MzJfdAorbHBmY19jbXBsX3Bsb2dpX25wcl9ub2RlKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsCisJCQkgIHN0cnVjdCBscGZjX25vZGVsaXN0ICogbmRscCwgdm9pZCAqYXJnLCB1aW50MzJfdCBldnQpCit7CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsICpyc3Bpb2NiOworCisJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CisJcnNwaW9jYiA9IGNtZGlvY2ItPmNvbnRleHRfdW4ucnNwX2lvY2I7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKK30KKworc3RhdGljIHVpbnQzMl90CitscGZjX2NtcGxfcHJsaV9ucHJfbm9kZShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLAorCQkJICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywgdWludDMyX3QgZXZ0KQoreworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiLCAqcnNwaW9jYjsKKworCWNtZGlvY2IgPSAoc3RydWN0IGxwZmNfaW9jYnEgKikgYXJnOworCXJzcGlvY2IgPSBjbWRpb2NiLT5jb250ZXh0X3VuLnJzcF9pb2NiOworCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtMTU5Miw3ICsxNjQwLDE5IEBACiB7CiAJbHBmY191bnJlZ19ycGkocGhiYSwgbmRscCk7CiAJLyogVGhpcyByb3V0aW5lIGRvZXMgbm90aGluZywganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgKi8KLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKK30KKworc3RhdGljIHVpbnQzMl90CitscGZjX2NtcGxfYWRpc2NfbnByX25vZGUoc3RydWN0IGxwZmNfaGJhICogcGhiYSwKKwkJCSAgICBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqIG5kbHAsIHZvaWQgKmFyZywKKwkJCSAgICB1aW50MzJfdCBldnQpCit7CisJc3RydWN0IGxwZmNfaW9jYnEgKmNtZGlvY2IsICpyc3Bpb2NiOworCisJY21kaW9jYiA9IChzdHJ1Y3QgbHBmY19pb2NicSAqKSBhcmc7CisJcnNwaW9jYiA9IGNtZGlvY2ItPmNvbnRleHRfdW4ucnNwX2lvY2I7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xNjA2LDkgKzE2NjYsMTAgQEAKIAlwbWIgPSAoTFBGQ19NQk9YUV90ICopIGFyZzsKIAltYiA9ICZwbWItPm1iOwogCi0JbmRscC0+bmxwX3JwaSA9IG1iLT51bi52YXJXb3Jkc1swXTsKKwlpZiAoIW1iLT5tYnhTdGF0dXMpCisJCW5kbHAtPm5scF9ycGkgPSBtYi0+dW4udmFyV29yZHNbMF07CiAKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJcmV0dXJuIG5kbHAtPm5scF9zdGF0ZTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xNjE3LDcgKzE2NzgsNyBAQAogCQkJICAgIHVpbnQzMl90IGV2dCkKIHsKIAlscGZjX25scF9saXN0KHBoYmEsIG5kbHAsIE5MUF9OT19MSVNUKTsKLQlyZXR1cm4gKE5MUF9TVEVfRlJFRURfTk9ERSk7CisJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIH0KIAogc3RhdGljIHVpbnQzMl90CkBAIC0xNjI4LDcgKzE2ODksMTAgQEAKIAlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9OUFJfMkJfRElTQzsKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlyZXR1cm4gKG5kbHAtPm5scF9zdGF0ZSk7CisJaWYgKG5kbHAtPm5scF9mbGFnICYgTkxQX0RFTEFZX1RNTykgeworCQlscGZjX2NhbmNlbF9yZXRyeV9kZWxheV90bW8ocGhiYSwgbmRscCk7CisJfQorCXJldHVybiBuZGxwLT5ubHBfc3RhdGU7CiB9CiAKIApAQCAtMTcwNyw3ICsxNzcxLDcgQEAKIAogCWxwZmNfcmN2X3Bsb2dpX3Bsb2dpX2lzc3VlLAkvKiBSQ1ZfUExPR0kgICBQTE9HSV9JU1NVRSAgICAqLwogCWxwZmNfcmN2X2Vsc19wbG9naV9pc3N1ZSwJLyogUkNWX1BSTEkgICAgICAgICovCi0JbHBmY19yY3ZfZWxzX3Bsb2dpX2lzc3VlLAkvKiBSQ1ZfTE9HTyAgICAgICAgKi8KKwlscGZjX3Jjdl9sb2dvX3Bsb2dpX2lzc3VlLAkvKiBSQ1ZfTE9HTyAgICAgICAgKi8KIAlscGZjX3Jjdl9lbHNfcGxvZ2lfaXNzdWUsCS8qIFJDVl9BRElTQyAgICAgICAqLwogCWxwZmNfcmN2X2Vsc19wbG9naV9pc3N1ZSwJLyogUkNWX1BESVNDICAgICAgICovCiAJbHBmY19yY3ZfZWxzX3Bsb2dpX2lzc3VlLAkvKiBSQ1ZfUFJMTyAgICAgICAgKi8KQEAgLTE3OTUsMTAgKzE4NTksMTAgQEAKIAlscGZjX3Jjdl9wYWRpc2NfbnByX25vZGUsICAgICAgIC8qIFJDVl9BRElTQyAgICAgICAqLwogCWxwZmNfcmN2X3BhZGlzY19ucHJfbm9kZSwgICAgICAgLyogUkNWX1BESVNDICAgICAgICovCiAJbHBmY19yY3ZfcHJsb19ucHJfbm9kZSwgICAgICAgICAvKiBSQ1ZfUFJMTyAgICAgICAgKi8KLQlscGZjX2Rpc2Nfbm9vcCwJCQkvKiBDTVBMX1BMT0dJICAgICAgKi8KLQlscGZjX2Rpc2Nfbm9vcCwJCQkvKiBDTVBMX1BSTEkgICAgICAgKi8KKwlscGZjX2NtcGxfcGxvZ2lfbnByX25vZGUsCS8qIENNUExfUExPR0kgICAgICAqLworCWxwZmNfY21wbF9wcmxpX25wcl9ub2RlLAkvKiBDTVBMX1BSTEkgICAgICAgKi8KIAlscGZjX2NtcGxfbG9nb19ucHJfbm9kZSwgICAgICAgIC8qIENNUExfTE9HTyAgICAgICAqLwotCWxwZmNfZGlzY19ub29wLAkJCS8qIENNUExfQURJU0MgICAgICAqLworCWxwZmNfY21wbF9hZGlzY19ucHJfbm9kZSwgICAgICAgLyogQ01QTF9BRElTQyAgICAgICovCiAJbHBmY19jbXBsX3JlZ2xvZ2luX25wcl9ub2RlLCAgICAvKiBDTVBMX1JFR19MT0dJTiAgKi8KIAlscGZjX2RldmljZV9ybV9ucHJfbm9kZSwgICAgICAgIC8qIERFVklDRV9STSAgICAgICAqLwogCWxwZmNfZGV2aWNlX3JlY292X25wcl9ub2RlLCAgICAgLyogREVWSUNFX1JFQ09WRVJZICovCkBAIC0xODQ0LDEwICsxOTA4LDkgQEAKIAkJbmRscC0+bmxwX2ZsYWcgJj0gfk5MUF9ERUxBWV9SRU1PVkU7CiAJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQlscGZjX25scF9yZW1vdmUocGhiYSwgbmRscCk7Ci0JCXJldHVybiAoTkxQX1NURV9GUkVFRF9OT0RFKTsKKwkJcmV0dXJuIE5MUF9TVEVfRlJFRURfTk9ERTsKIAl9CiAJaWYgKHJjID09IE5MUF9TVEVfRlJFRURfTk9ERSkKLQkJcmV0dXJuIChOTFBfU1RFX0ZSRUVEX05PREUpOwotCW5kbHAtPm5scF9zdGF0ZSA9IHJjOwotCXJldHVybiAocmMpOworCQlyZXR1cm4gTkxQX1NURV9GUkVFRF9OT0RFOworCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggZGFmYWJlZS4uZjkzNzk5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKICAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKICAqIEVNVUxFWCBhbmQgU0xJIGFyZSB0cmFkZW1hcmtzIG9mIEVtdWxleC4gICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiB3d3cuZW11bGV4LmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQ2hyaXN0b3BoIEhlbGx3aWcgICAgICAgICAgICAgICoKQEAgLTQ2Nyw3ICs0NjcsMTIgQEAKIAlzZGV2ID0gY21kLT5kZXZpY2U7CiAJY21kLT5zY3NpX2RvbmUoY21kKTsKIAotCWlmICghcmVzdWx0ICYmCisJaWYgKHBoYmEtPmNmZ19wb2xsICYgRU5BQkxFX0ZDUF9SSU5HX1BPTExJTkcpIHsKKwkJbHBmY19yZWxlYXNlX3Njc2lfYnVmKHBoYmEsIGxwZmNfY21kKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghcmVzdWx0ICYmIHBub2RlICE9IE5VTEwgJiYKIAkgICAoKGppZmZpZXMgLSBwbm9kZS0+bGFzdF9yYW1wX3VwX3RpbWUpID4KIAkJTFBGQ19RX1JBTVBfVVBfSU5URVJWQUwgKiBIWikgJiYKIAkgICAoKGppZmZpZXMgLSBwbm9kZS0+bGFzdF9xX2Z1bGxfdGltZSkgPgpAQCAtNDk1LDcgKzUwMCw3IEBACiAJICogQ2hlY2sgZm9yIHF1ZXVlIGZ1bGwuICBJZiB0aGUgbHVuIGlzIHJlcG9ydGluZyBxdWV1ZSBmdWxsLCB0aGVuCiAJICogYmFjayBvZmYgdGhlIGx1biBxdWV1ZSBkZXB0aCB0byBwcmV2ZW50IHRhcmdldCBvdmVybG9hZHMuCiAJICovCi0JaWYgKHJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMKSB7CisJaWYgKHJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMICYmIHBub2RlICE9IE5VTEwpIHsKIAkJcG5vZGUtPmxhc3RfcV9mdWxsX3RpbWUgPSBqaWZmaWVzOwogCiAJCXNob3N0X2Zvcl9lYWNoX2RldmljZSh0bXBfc2Rldiwgc2Rldi0+aG9zdCkgewpAQCAtNzQzLDcgKzc0OCw3IEBACiBjb25zdCBjaGFyICoKIGxwZmNfaW5mbyhzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQogewotCXN0cnVjdCBscGZjX2hiYSAgICAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGxwZmNfaGJhICAgICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKSBob3N0LT5ob3N0ZGF0YTsKIAlpbnQgbGVuOwogCXN0YXRpYyBjaGFyICBscGZjaW5mb2J1ZlszODRdOwogCkBAIC04MDMsNyArODA4LDcgQEAKIGxwZmNfcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQsIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSkKIHsKIAlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPQotCQkoc3RydWN0IGxwZmNfaGJhICopIGNtbmQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CisJCShzdHJ1Y3QgbHBmY19oYmEgKikgY21uZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOwogCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gY21uZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IHJkYXRhLT5wbm9kZTsKQEAgLTg3Nyw3ICs4ODIsNyBAQAogbHBmY19hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbW5kLT5kZXZpY2UtPmhvc3Q7Ci0Jc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKXNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopc2hvc3QtPmhvc3RkYXRhOwogCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwaGJhLT5zbGkucmluZ1twaGJhLT5zbGkuZmNwX3JpbmddOwogCXN0cnVjdCBscGZjX2lvY2JxICppb2NiOwogCXN0cnVjdCBscGZjX2lvY2JxICphYnRzaW9jYjsKQEAgLTk4MSw3ICs5ODYsNyBAQAogbHBmY19yZXNldF9sdW5faGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY21uZC0+ZGV2aWNlLT5ob3N0OwotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKXNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19zY3NpX2J1ZiAqbHBmY19jbWQ7CiAJc3RydWN0IGxwZmNfaW9jYnEgKmlvY2JxLCAqaW9jYnFyc3A7CiAJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBjbW5kLT5kZXZpY2UtPmhvc3RkYXRhOwpAQCAtMTA5NCw3ICsxMDk5LDcgQEAKIGxwZmNfcmVzZXRfYnVzX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNtbmQtPmRldmljZS0+aG9zdDsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilzaG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHAgPSBOVUxMOwogCWludCBtYXRjaDsKIAlpbnQgcmV0ID0gRkFJTEVELCBpLCBlcnJfY291bnQgPSAwOwpAQCAtMTE5NSw3ICsxMjAwLDcgQEAKIHN0YXRpYyBpbnQKIGxwZmNfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopc2Rldi0+aG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGxwZmNfc2NzaV9idWYgKnNjc2lfYnVmID0gTlVMTDsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzZGV2KSk7CiAJdWludDMyX3QgdG90YWwgPSAwLCBpOwpAQCAtMTI1MSw3ICsxMjU2LDcgQEAKIHN0YXRpYyBpbnQKIGxwZmNfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKLQlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopIHNkZXYtPmhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IChzdHJ1Y3QgbHBmY19oYmEgKikgc2Rldi0+aG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2Rldi0+c2Rldl90YXJnZXQpOwogCiAJaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oCmluZGV4IGFjZDY0YzQuLmNkY2QyNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5oCkBAIC0yMywxMCArMjMsMTMgQEAKIHN0cnVjdCBscGZjX2hiYTsKIAogI2RlZmluZSBsaXN0X3JlbW92ZV9oZWFkKGxpc3QsIGVudHJ5LCB0eXBlLCBtZW1iZXIpCQlcCisJZG8gewkJCQkJCQlcCisJZW50cnkgPSBOVUxMOwkJCQkJCVwKIAlpZiAoIWxpc3RfZW1wdHkobGlzdCkpIHsJCQkJXAogCQllbnRyeSA9IGxpc3RfZW50cnkoKGxpc3QpLT5uZXh0LCB0eXBlLCBtZW1iZXIpOwlcCiAJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5tZW1iZXIpOwkJCVwKLQl9CisJfQkJCQkJCQlcCisJfSB3aGlsZSgwKQogCiAjZGVmaW5lIGxpc3RfZ2V0X2ZpcnN0KGxpc3QsIHR5cGUsIG1lbWJlcikJCQlcCiAJKGxpc3RfZW1wdHkobGlzdCkpID8gTlVMTCA6CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IDdiNzg1YWQuLmJiNjlhN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBDaHJpc3RvcGggSGVsbHdpZyAgICAgICAgICAgICAgKgpAQCAtNTEzLDcgKzUxMyw5IEBACiAJY2FzZSBNQlhfU0VUX01BU0s6CiAJY2FzZSBNQlhfU0VUX1NMSU06CiAJY2FzZSBNQlhfVU5SRUdfRF9JRDoKKwljYXNlIE1CWF9LSUxMX0JPQVJEOgogCWNhc2UgTUJYX0NPTkZJR19GQVJQOgorCWNhc2UgTUJYX0JFQUNPTjoKIAljYXNlIE1CWF9MT0FEX0FSRUE6CiAJY2FzZSBNQlhfUlVOX0JJVV9ESUFHNjQ6CiAJY2FzZSBNQlhfQ09ORklHX1BPUlQ6CkBAIC03NjQsNyArNzY2LDkgQEAKIAl9CiAJLyogdW5Tb2xpY2l0ZWQgUmVzcG9uc2VzICovCiAJaWYgKHByaW5nLT5wcnRbMF0ucHJvZmlsZSkgewotCQkocHJpbmctPnBydFswXS5scGZjX3NsaV9yY3ZfdW5zb2xfZXZlbnQpIChwaGJhLCBwcmluZywgc2F2ZXEpOworCQlpZiAocHJpbmctPnBydFswXS5scGZjX3NsaV9yY3ZfdW5zb2xfZXZlbnQpCisJCQkocHJpbmctPnBydFswXS5scGZjX3NsaV9yY3ZfdW5zb2xfZXZlbnQpIChwaGJhLCBwcmluZywKKwkJCQkJCQkJCXNhdmVxKTsKIAkJbWF0Y2ggPSAxOwogCX0gZWxzZSB7CiAJCS8qIFdlIG11c3Qgc2VhcmNoLCBiYXNlZCBvbiByY3RsIC8gdHlwZQpAQCAtNzc1LDggKzc3OSw5IEBACiAJCQkgICAgIFJjdGwpCiAJCQkgICAgJiYgKHByaW5nLT5wcnRbaV0uCiAJCQkJdHlwZSA9PSBUeXBlKSkgewotCQkJCShwcmluZy0+cHJ0W2ldLmxwZmNfc2xpX3Jjdl91bnNvbF9ldmVudCkKLQkJCQkJKHBoYmEsIHByaW5nLCBzYXZlcSk7CisJCQkJaWYgKHByaW5nLT5wcnRbaV0ubHBmY19zbGlfcmN2X3Vuc29sX2V2ZW50KQorCQkJCQkocHJpbmctPnBydFtpXS5scGZjX3NsaV9yY3ZfdW5zb2xfZXZlbnQpCisJCQkJCQkJKHBoYmEsIHByaW5nLCBzYXZlcSk7CiAJCQkJbWF0Y2ggPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTE0OSwxMiArMTE1NCwxNyBAQAogCQkJY21kaW9jYnEgPSBscGZjX3NsaV9pb2NicV9sb29rdXAocGhiYSwgcHJpbmcsCiAJCQkJCQkJICZyc3Bpb2NicSk7CiAJCQlpZiAoKGNtZGlvY2JxKSAmJiAoY21kaW9jYnEtPmlvY2JfY21wbCkpIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAotCQkJCSAgICAgICBwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFnKTsKLQkJCQkoY21kaW9jYnEtPmlvY2JfY21wbCkocGhiYSwgY21kaW9jYnEsCi0JCQkJCQkgICAgICAmcnNwaW9jYnEpOwotCQkJCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywKLQkJCQkJCSAgaWZsYWcpOworCQkJCWlmIChwaGJhLT5jZmdfcG9sbCAmIEVOQUJMRV9GQ1BfUklOR19QT0xMSU5HKSB7CisJCQkJCShjbWRpb2NicS0+aW9jYl9jbXBsKShwaGJhLCBjbWRpb2NicSwKKwkJCQkJCQkgICAgICAmcnNwaW9jYnEpOworCQkJCX0gZWxzZSB7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCQlwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGlmbGFnKTsKKwkJCQkJKGNtZGlvY2JxLT5pb2NiX2NtcGwpKHBoYmEsIGNtZGlvY2JxLAorCQkJCQkJCSAgICAgICZyc3Bpb2NicSk7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJCQkgIGlmbGFnKTsKKwkJCQl9CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTE1MTIsOTggKzE1MjIsMjQwIEBACiAJcmV0dXJuIGVycmNudDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiBscGZjX3NsaV9zZW5kX3Jlc2V0Ci0qCi0qIE5vdGU6IEFmdGVyIHJldHVybmluZyBmcm9tIHRoaXMgZnVuY3Rpb24sIHRoZSBIQkEgY2Fubm90IGJlIGFjY2Vzc2VkIGZvcgotKiAxIG1zLiBTaW5jZSB3ZSBkbyBub3Qgd2lzaCB0byBkZWxheSBpbiBpbnRlcnJ1cHQgY29udGV4dCwgaXQgaXMgdGhlCi0qIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gcGVyZm9ybSB0aGUgbWRlbGF5KDEpIGFuZCBmbHVzaCB2aWEgcmVhZGwoKS4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQKLWxwZmNfc2xpX3NlbmRfcmVzZXQoc3RydWN0IGxwZmNfaGJhICogcGhiYSwgdWludDE2X3Qgc2tpcF9wb3N0KQoraW50CitscGZjX3NsaV9icmRyZWFkeShzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhLCB1aW50MzJfdCBtYXNrKQogewotCU1BSUxCT1hfdCAqc3dwbWI7Ci0Jdm9sYXRpbGUgdWludDMyX3Qgd29yZDA7Ci0Jdm9pZCBfX2lvbWVtICp0b19zbGltOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVpbnQzMl90IHN0YXR1czsKKwlpbnQgaSA9IDA7CisJaW50IHJldHZhbCA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkvKiBSZWFkIHRoZSBIQkEgSG9zdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwlzdGF0dXMgPSByZWFkbChwaGJhLT5IU3JlZ2FkZHIpOwogCi0JLyogQSBib2FyZCByZXNldCBtdXN0IHVzZSBSRUFMIFNMSU0uICovCi0JcGhiYS0+c2xpLnNsaV9mbGFnICY9IH5MUEZDX1NMSTJfQUNUSVZFOworCS8qCisJICogQ2hlY2sgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IDEwMG1zIGZvciA1IHJldHJpZXMsIHRoZW4gZXZlcnkKKwkgKiA1MDBtcyBmb3IgNSwgdGhlbiBldmVyeSAyLjUgc2VjIGZvciA1LCB0aGVuIHJlc2V0IGJvYXJkIGFuZAorCSAqIGV2ZXJ5IDIuNSBzZWMgZm9yIDQuCisJICogQnJlYWsgb3VyIG9mIHRoZSBsb29wIGlmIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgaW5pdC4KKwkgKi8KKwl3aGlsZSAoKChzdGF0dXMgJiBtYXNrKSAhPSBtYXNrKSAmJgorCSAgICAgICAhKHN0YXR1cyAmIEhTX0ZGRVJNKSAmJgorCSAgICAgICBpKysgPCAyMCkgewogCi0Jd29yZDAgPSAwOwotCXN3cG1iID0gKE1BSUxCT1hfdCAqKSAmIHdvcmQwOwotCXN3cG1iLT5tYnhDb21tYW5kID0gTUJYX1JFU1RBUlQ7Ci0Jc3dwbWItPm1ieEhjID0gMTsKKwkJaWYgKGkgPD0gNSkKKwkJCW1zbGVlcCgxMCk7CisJCWVsc2UgaWYgKGkgPD0gMTApCisJCQltc2xlZXAoNTAwKTsKKwkJZWxzZQorCQkJbXNsZWVwKDI1MDApOwogCi0JdG9fc2xpbSA9IHBoYmEtPk1Cc2xpbWFkZHI7Ci0Jd3JpdGVsKCoodWludDMyX3QgKikgc3dwbWIsIHRvX3NsaW0pOwotCXJlYWRsKHRvX3NsaW0pOyAvKiBmbHVzaCAqLwotCi0JLyogT25seSBza2lwIHBvc3QgYWZ0ZXIgZmNfZmZpbml0IGlzIGNvbXBsZXRlZCAqLwotCWlmIChza2lwX3Bvc3QpIHsKLQkJd29yZDAgPSAxOwkvKiBUaGlzIGlzIHJlYWxseSBzZXR0aW5nIHVwIHdvcmQxICovCi0JfSBlbHNlIHsKLQkJd29yZDAgPSAwOwkvKiBUaGlzIGlzIHJlYWxseSBzZXR0aW5nIHVwIHdvcmQxICovCisJCWlmIChpID09IDE1KSB7CisJCQlwaGJhLT5oYmFfc3RhdGUgPSBMUEZDX1NUQVRFX1VOS05PV047IC8qIERvIHBvc3QgKi8KKwkJCWxwZmNfc2xpX2JyZHJlc3RhcnQocGhiYSk7CisJCX0KKwkJLyogUmVhZCB0aGUgSEJBIEhvc3QgU3RhdHVzIFJlZ2lzdGVyICovCisJCXN0YXR1cyA9IHJlYWRsKHBoYmEtPkhTcmVnYWRkcik7CiAJfQotCXRvX3NsaW0gPSBwaGJhLT5NQnNsaW1hZGRyICsgc2l6ZW9mICh1aW50MzJfdCk7Ci0Jd3JpdGVsKCoodWludDMyX3QgKikgc3dwbWIsIHRvX3NsaW0pOwotCXJlYWRsKHRvX3NsaW0pOyAvKiBmbHVzaCAqLwogCi0JLyogVHVybiBvZmYgcGFyaXR5IGNoZWNraW5nIGFuZCBzZXJyIGR1cmluZyB0aGUgcGh5c2ljYWwgcmVzZXQgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwaGJhLT5wY2lkZXYsIFBDSV9DT01NQU5ELCAmcGhiYS0+cGNpX2NmZ192YWx1ZSk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBoYmEtPnBjaWRldiwgUENJX0NPTU1BTkQsCi0JCQkgICAgICAocGhiYS0+cGNpX2NmZ192YWx1ZSAmCi0JCQkgICAgICAgfihQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSKSkpOworCS8qIENoZWNrIHRvIHNlZSBpZiBhbnkgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBpbml0ICovCisJaWYgKChzdGF0dXMgJiBIU19GRkVSTSkgfHwgKGkgPj0gMjApKSB7CisJCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOworCQlyZXR2YWwgPSAxOworCX0KIAotCXdyaXRlbChIQ19JTklURkYsIHBoYmEtPkhDcmVnYWRkcik7Ci0KLQlwaGJhLT5oYmFfc3RhdGUgPSBMUEZDX0lOSVRfU1RBUlQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQKLWxwZmNfc2xpX2JyZHJlc2V0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEsIHVpbnQxNl90IHNraXBfcG9zdCkKKyNkZWZpbmUgQkFSUklFUl9URVNUX1BBVFRFUk4gKDB4ZGVhZGJlZWYpCisKK3ZvaWQgbHBmY19yZXNldF9iYXJyaWVyKHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCiB7CisJdWludDMyX3QgKiByZXNwX2J1ZjsKKwl1aW50MzJfdCAqIG1ib3hfYnVmOworCXZvbGF0aWxlIHVpbnQzMl90IG1ib3g7CisJdWludDMyX3QgaGNfY29weTsKKwlpbnQgIGk7CisJdWludDhfdCBoZHJ0eXBlOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGhiYS0+cGNpZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJ0eXBlKTsKKwlpZiAoaGRydHlwZSAhPSAweDgwIHx8CisJICAgIChGQ19KRURFQ19JRChwaGJhLT52cGQucmV2LmJpdVJldikgIT0gSEVMSU9TX0pFREVDX0lEICYmCisJICAgICBGQ19KRURFQ19JRChwaGJhLT52cGQucmV2LmJpdVJldikgIT0gVEhPUl9KRURFQ19JRCkpCisJCXJldHVybjsKKworCS8qCisJICogVGVsbCB0aGUgb3RoZXIgcGFydCBvZiB0aGUgY2hpcCB0byBzdXNwZW5kIHRlbXBvcmFyaWx5IGFsbAorCSAqIGl0cyBETUEgYWN0aXZpdHkuCisJICovCisJcmVzcF9idWYgPSAgKHVpbnQzMl90ICopcGhiYS0+TUJzbGltYWRkcjsKKworCS8qIERpc2FibGUgdGhlIGVycm9yIGF0dGVudGlvbiAqLworCWhjX2NvcHkgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOworCXdyaXRlbCgoaGNfY29weSAmIH5IQ19FUklOVF9FTkEpLCBwaGJhLT5IQ3JlZ2FkZHIpOworCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCisKKwlpZiAocmVhZGwocGhiYS0+SEFyZWdhZGRyKSAmIEhBX0VSQVRUKSB7CisJCS8qIENsZWFyIENoaXAgZXJyb3IgYml0ICovCisJCXdyaXRlbChIQV9FUkFUVCwgcGhiYS0+SEFyZWdhZGRyKTsKKwkJcGhiYS0+c3RvcHBlZCA9IDE7CisJfQorCisJbWJveCA9IDA7CisJKChNQUlMQk9YX3QgKikmbWJveCktPm1ieENvbW1hbmQgPSBNQlhfS0lMTF9CT0FSRDsKKwkoKE1BSUxCT1hfdCAqKSZtYm94KS0+bWJ4T3duZXIgPSBPV05fQ0hJUDsKKworCXdyaXRlbChCQVJSSUVSX1RFU1RfUEFUVEVSTiwgKHJlc3BfYnVmICsgMSkpOworCW1ib3hfYnVmID0gKHVpbnQzMl90ICopcGhiYS0+TUJzbGltYWRkcjsKKwl3cml0ZWwobWJveCwgbWJveF9idWYpOworCisJZm9yIChpID0gMDsKKwkgICAgIHJlYWRsKHJlc3BfYnVmICsgMSkgIT0gfihCQVJSSUVSX1RFU1RfUEFUVEVSTikgJiYgaSA8IDUwOyBpKyspCisJCW1kZWxheSgxKTsKKworCWlmIChyZWFkbChyZXNwX2J1ZiArIDEpICE9IH4oQkFSUklFUl9URVNUX1BBVFRFUk4pKSB7CisJCWlmIChwaGJhLT5zbGkuc2xpX2ZsYWcgJiBMUEZDX1NMSTJfQUNUSVZFIHx8CisJCSAgICBwaGJhLT5zdG9wcGVkKQorCQkJZ290byByZXN0b3JlX2hjOworCQllbHNlCisJCQlnb3RvIGNsZWFyX2VycmF0OworCX0KKworCSgoTUFJTEJPWF90ICopJm1ib3gpLT5tYnhPd25lciA9IE9XTl9IT1NUOworCWZvciAoaSA9IDA7IHJlYWRsKHJlc3BfYnVmKSAhPSBtYm94ICYmICBpIDwgNTAwOyBpKyspCisJCW1kZWxheSgxKTsKKworY2xlYXJfZXJyYXQ6CisKKwl3aGlsZSAoIShyZWFkbChwaGJhLT5IQXJlZ2FkZHIpICYgSEFfRVJBVFQpICYmICsraSA8IDUwMCkKKwkJbWRlbGF5KDEpOworCisJaWYgKHJlYWRsKHBoYmEtPkhBcmVnYWRkcikgJiBIQV9FUkFUVCkgeworCQl3cml0ZWwoSEFfRVJBVFQsIHBoYmEtPkhBcmVnYWRkcik7CisJCXBoYmEtPnN0b3BwZWQgPSAxOworCX0KKworcmVzdG9yZV9oYzoKKwl3cml0ZWwoaGNfY29weSwgcGhiYS0+SENyZWdhZGRyKTsKKwlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLworfQorCitpbnQKK2xwZmNfc2xpX2JyZGtpbGwoc3RydWN0IGxwZmNfaGJhICogcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7CisJTFBGQ19NQk9YUV90ICpwbWI7CisJdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IGhhX2NvcHk7CisJaW50IHJldHZhbDsKKwlpbnQgaSA9IDA7CisKKwlwc2xpID0gJnBoYmEtPnNsaTsKKworCS8qIEtpbGwgSEJBICovCisJbHBmY19wcmludGZfbG9nKHBoYmEsCisJCUtFUk5fSU5GTywKKwkJTE9HX1NMSSwKKwkJIiVkOjAzMjkgS2lsbCBIQkEgRGF0YTogeCV4IHgleFxuIiwKKwkJcGhiYS0+YnJkX25vLAorCQlwaGJhLT5oYmFfc3RhdGUsCisJCXBzbGktPnNsaV9mbGFnKTsKKworCWlmICgocG1iID0gKExQRkNfTUJPWFFfdCAqKSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsCisJCQkJCQkgIEdGUF9LRVJORUwpKSA9PSAwKQorCQlyZXR1cm4gMTsKKworCS8qIERpc2FibGUgdGhlIGVycm9yIGF0dGVudGlvbiAqLworCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwlzdGF0dXMgPSByZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOworCXN0YXR1cyAmPSB+SENfRVJJTlRfRU5BOworCXdyaXRlbChzdGF0dXMsIHBoYmEtPkhDcmVnYWRkcik7CisJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKworCWxwZmNfa2lsbF9ib2FyZChwaGJhLCBwbWIpOworCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwlyZXR2YWwgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYiwgTUJYX05PV0FJVCk7CisKKwlpZiAocmV0dmFsICE9IE1CWF9TVUNDRVNTKSB7CisJCWlmIChyZXR2YWwgIT0gTUJYX0JVU1kpCisJCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHNsaS0+c2xpX2ZsYWcgJj0gfkxQRkNfU0xJMl9BQ1RJVkU7CisKKwltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKKworCS8qIFRoZXJlIGlzIG5vIGNvbXBsZXRpb24gZm9yIGEgS0lMTF9CT0FSRCBtYm94IGNtZC4gQ2hlY2sgZm9yIGFuIGVycm9yCisJICogYXR0ZW50aW9uIGV2ZXJ5IDEwMG1zIGZvciAzIHNlY29uZHMuIElmIHdlIGRvbid0IGdldCBFUkFUVCBhZnRlcgorCSAqIDMgc2Vjb25kcyB3ZSBzdGlsbCBzZXQgSEJBX0VSUk9SIHN0YXRlIGJlY2F1c2UgdGhlIHN0YXR1cyBvZiB0aGUKKwkgKiBib2FyZCBpcyBub3cgdW5kZWZpbmVkLgorCSAqLworCWhhX2NvcHkgPSByZWFkbChwaGJhLT5IQXJlZ2FkZHIpOworCisJd2hpbGUgKChpKysgPCAzMCkgJiYgIShoYV9jb3B5ICYgSEFfRVJBVFQpKSB7CisJCW1kZWxheSgxMDApOworCQloYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmcHNsaS0+bWJveF90bW8pOworCWlmIChoYV9jb3B5ICYgSEFfRVJBVFQpIHsKKwkJd3JpdGVsKEhBX0VSQVRULCBwaGJhLT5IQXJlZ2FkZHIpOworCQlwaGJhLT5zdG9wcGVkID0gMTsKKwl9CisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSV9NQk9YX0FDVElWRTsKKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKworCXBzbGktPm1ib3hfYWN0aXZlID0gTlVMTDsKKwlscGZjX2hiYV9kb3duX3Bvc3QocGhiYSk7CisJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisKKwlyZXR1cm4gKGhhX2NvcHkgJiBIQV9FUkFUVCA/IDAgOiAxKTsKK30KKworaW50CitscGZjX3NsaV9icmRyZXNldChzdHJ1Y3QgbHBmY19oYmEgKiBwaGJhKQoreworCXN0cnVjdCBscGZjX3NsaSAqcHNsaTsKIAlzdHJ1Y3QgbHBmY19zbGlfcmluZyAqcHJpbmc7CisJdWludDE2X3QgY2ZnX3ZhbHVlOwogCWludCBpOwotCXN0cnVjdCBscGZjX2RtYWJ1ZiAqbXAsICpuZXh0X21wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0JbHBmY19zbGlfc2VuZF9yZXNldChwaGJhLCBza2lwX3Bvc3QpOwotCW1kZWxheSgxKTsKKwlwc2xpID0gJnBoYmEtPnNsaTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCS8qIFJpc2sgdGhlIHdyaXRlIG9uIGZsdXNoIGNhc2UgaWUgbm8gZGVsYXkgYWZ0ZXIgdGhlIHJlYWRsICovCi0JcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KLQkvKiBOb3cgdG9nZ2xlIElOSVRGRiBiaXQgc2V0IGJ5IGxwZmNfc2xpX3NlbmRfcmVzZXQgKi8KLQl3cml0ZWwoMCwgcGhiYS0+SENyZWdhZGRyKTsKLQlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLwotCi0JLyogUmVzdG9yZSBQQ0kgY21kIHJlZ2lzdGVyICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBoYmEtPnBjaWRldiwgUENJX0NPTU1BTkQsIHBoYmEtPnBjaV9jZmdfdmFsdWUpOworCS8qIFJlc2V0IEhCQSAqLworCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19TTEksCisJCQkiJWQ6MDMyNSBSZXNldCBIQkEgRGF0YTogeCV4IHgleFxuIiwgcGhiYS0+YnJkX25vLAorCQkJcGhiYS0+aGJhX3N0YXRlLCBwc2xpLT5zbGlfZmxhZyk7CiAKIAkvKiBwZXJmb3JtIGJvYXJkIHJlc2V0ICovCiAJcGhiYS0+ZmNfZXZlbnRUYWcgPSAwOwogCXBoYmEtPmZjX215RElEID0gMDsKLQlwaGJhLT5mY19wcmV2RElEID0gTWFza19ESUQ7CisJcGhiYS0+ZmNfcHJldkRJRCA9IDA7CiAKLQkvKiBSZXNldCBIQkEgKi8KLQlscGZjX3ByaW50Zl9sb2cocGhiYSwKLQkJS0VSTl9JTkZPLAotCQlMT0dfU0xJLAotCQkiJWQ6MDMyNSBSZXNldCBIQkEgRGF0YTogeCV4IHgleCB4JXhcbiIsCi0JCXBoYmEtPmJyZF9ubywKLQkJcGhiYS0+aGJhX3N0YXRlLAotCQlwaGJhLT5zbGkuc2xpX2ZsYWcsCi0JCXNraXBfcG9zdCk7CisJcHNsaS0+c2xpX2ZsYWcgPSAwOworCisJLyogVHVybiBvZmYgcGFyaXR5IGNoZWNraW5nIGFuZCBzZXJyIGR1cmluZyB0aGUgcGh5c2ljYWwgcmVzZXQgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwaGJhLT5wY2lkZXYsIFBDSV9DT01NQU5ELCAmY2ZnX3ZhbHVlKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGhiYS0+cGNpZGV2LCBQQ0lfQ09NTUFORCwKKwkJCSAgICAgIChjZmdfdmFsdWUgJgorCQkJICAgICAgIH4oUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUikpKTsKKworCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSTJfQUNUSVZFOworCS8qIE5vdyB0b2dnbGUgSU5JVEZGIGJpdCBpbiB0aGUgSG9zdCBDb250cm9sIFJlZ2lzdGVyICovCisJd3JpdGVsKEhDX0lOSVRGRiwgcGhiYS0+SENyZWdhZGRyKTsKKwltZGVsYXkoMSk7CisJcmVhZGwocGhiYS0+SENyZWdhZGRyKTsgLyogZmx1c2ggKi8KKwl3cml0ZWwoMCwgcGhiYS0+SENyZWdhZGRyKTsKKwlyZWFkbChwaGJhLT5IQ3JlZ2FkZHIpOyAvKiBmbHVzaCAqLworCisJLyogUmVzdG9yZSBQQ0kgY21kIHJlZ2lzdGVyICovCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBoYmEtPnBjaWRldiwgUENJX0NPTU1BTkQsIGNmZ192YWx1ZSk7CiAKIAkvKiBJbml0aWFsaXplIHJlbGV2YW50IFNMSSBpbmZvICovCi0JZm9yIChpID0gMDsgaSA8IHBoYmEtPnNsaS5udW1fcmluZ3M7IGkrKykgewotCQlwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tpXTsKKwlmb3IgKGkgPSAwOyBpIDwgcHNsaS0+bnVtX3JpbmdzOyBpKyspIHsKKwkJcHJpbmcgPSAmcHNsaS0+cmluZ1tpXTsKIAkJcHJpbmctPmZsYWcgPSAwOwogCQlwcmluZy0+cnNwaWR4ID0gMDsKIAkJcHJpbmctPm5leHRfY21kaWR4ICA9IDA7CkBAIC0xNjExLDI3ICsxNzYzLDY0IEBACiAJCXByaW5nLT5jbWRpZHggPSAwOwogCQlwcmluZy0+bWlzc2J1ZmNudCA9IDA7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKLQlpZiAoc2tpcF9wb3N0KSB7Ci0JCW1kZWxheSgxMDApOworCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfV0FSTV9TVEFSVDsKKwlyZXR1cm4gMDsKK30KKworaW50CitscGZjX3NsaV9icmRyZXN0YXJ0KHN0cnVjdCBscGZjX2hiYSAqIHBoYmEpCit7CisJTUFJTEJPWF90ICptYjsKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7CisJdWludDE2X3Qgc2tpcF9wb3N0OworCXZvbGF0aWxlIHVpbnQzMl90IHdvcmQwOworCXZvaWQgX19pb21lbSAqdG9fc2xpbTsKKworCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKworCXBzbGkgPSAmcGhiYS0+c2xpOworCisJLyogUmVzdGFydCBIQkEgKi8KKwlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfU0xJLAorCQkJIiVkOjAzMjggUmVzdGFydCBIQkEgRGF0YTogeCV4IHgleFxuIiwgcGhiYS0+YnJkX25vLAorCQkJcGhiYS0+aGJhX3N0YXRlLCBwc2xpLT5zbGlfZmxhZyk7CisKKwl3b3JkMCA9IDA7CisJbWIgPSAoTUFJTEJPWF90ICopICZ3b3JkMDsKKwltYi0+bWJ4Q29tbWFuZCA9IE1CWF9SRVNUQVJUOworCW1iLT5tYnhIYyA9IDE7CisKKwlscGZjX3Jlc2V0X2JhcnJpZXIocGhiYSk7CisKKwl0b19zbGltID0gcGhiYS0+TUJzbGltYWRkcjsKKwl3cml0ZWwoKih1aW50MzJfdCAqKSBtYiwgdG9fc2xpbSk7CisJcmVhZGwodG9fc2xpbSk7IC8qIGZsdXNoICovCisKKwkvKiBPbmx5IHNraXAgcG9zdCBhZnRlciBmY19mZmluaXQgaXMgY29tcGxldGVkICovCisJaWYgKHBoYmEtPmhiYV9zdGF0ZSkgeworCQlza2lwX3Bvc3QgPSAxOworCQl3b3JkMCA9IDE7CS8qIFRoaXMgaXMgcmVhbGx5IHNldHRpbmcgdXAgd29yZDEgKi8KIAl9IGVsc2UgeworCQlza2lwX3Bvc3QgPSAwOworCQl3b3JkMCA9IDA7CS8qIFRoaXMgaXMgcmVhbGx5IHNldHRpbmcgdXAgd29yZDEgKi8KKwl9CisJdG9fc2xpbSA9ICh1aW50OF90ICopIHBoYmEtPk1Cc2xpbWFkZHIgKyBzaXplb2YgKHVpbnQzMl90KTsKKwl3cml0ZWwoKih1aW50MzJfdCAqKSBtYiwgdG9fc2xpbSk7CisJcmVhZGwodG9fc2xpbSk7IC8qIGZsdXNoICovCisKKwlscGZjX3NsaV9icmRyZXNldChwaGJhKTsKKwlwaGJhLT5zdG9wcGVkID0gMDsKKwlwaGJhLT5oYmFfc3RhdGUgPSBMUEZDX0lOSVRfU1RBUlQ7CisKKwlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKKworCWlmIChza2lwX3Bvc3QpCisJCW1kZWxheSgxMDApOworCWVsc2UKIAkJbWRlbGF5KDIwMDApOwotCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCS8qIENsZWFudXAgcHJlcG9zdGVkIGJ1ZmZlcnMgb24gdGhlIEVMUyByaW5nICovCi0JcHJpbmcgPSAmcGhiYS0+c2xpLnJpbmdbTFBGQ19FTFNfUklOR107Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wLCBuZXh0X21wLCAmcHJpbmctPnBvc3RidWZxLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZtcC0+bGlzdCk7Ci0JCXByaW5nLT5wb3N0YnVmcV9jbnQtLTsKLQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKLQkJa2ZyZWUobXApOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IHBoYmEtPnNsaS5udW1fcmluZ3M7IGkrKykKLQkJbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nKHBoYmEsICZwaGJhLT5zbGkucmluZ1tpXSk7CisJbHBmY19oYmFfZG93bl9wb3N0KHBoYmEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjkxLDcgKzE4ODAsOCBAQAogCQl9CiAKIAkJaWYgKGkgPT0gMTUpIHsKLQkJCWxwZmNfc2xpX2JyZHJlc2V0KHBoYmEsIDApOworCQkJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19TVEFURV9VTktOT1dOOyAvKiBEbyBwb3N0ICovCisJCQlscGZjX3NsaV9icmRyZXN0YXJ0KHBoYmEpOwogCQl9CiAJCS8qIFJlYWQgdGhlIEhCQSBIb3N0IFN0YXR1cyBSZWdpc3RlciAqLwogCQlzdGF0dXMgPSByZWFkbChwaGJhLT5IU3JlZ2FkZHIpOwpAQCAtMTczNSw4ICsxOTI1LDggQEAKIAl9CiAKIAl3aGlsZSAocmVzZXRjb3VudCA8IDIgJiYgIWRvbmUpIHsKLQkJcGhiYS0+aGJhX3N0YXRlID0gMDsKLQkJbHBmY19zbGlfYnJkcmVzZXQocGhiYSwgMCk7CisJCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfU1RBVEVfVU5LTk9XTjsKKwkJbHBmY19zbGlfYnJkcmVzdGFydChwaGJhKTsKIAkJbXNsZWVwKDI1MDApOwogCQlyYyA9IGxwZmNfc2xpX2NoaXBzZXRfaW5pdChwaGJhKTsKIAkJaWYgKHJjKQpAQCAtMTkyMCw2ICsyMTEwLDIxIEBACiAJbWIgPSAmcG1ib3gtPm1iOwogCXN0YXR1cyA9IE1CWF9TVUNDRVNTOwogCisJaWYgKHBoYmEtPmhiYV9zdGF0ZSA9PSBMUEZDX0hCQV9FUlJPUikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgZHJ2cl9mbGFnKTsKKworCQkvKiBNYm94IGNvbW1hbmQgPG1ieENvbW1hbmQ+IGNhbm5vdCBpc3N1ZSAqLworCQlMT0dfTUJPWF9DQU5OT1RfSVNTVUVfREFUQSggcGhiYSwgbWIsIHBzbGksIGZsYWcpCisJCXJldHVybiAoTUJYX05PVF9GSU5JU0hFRCk7CisJfQorCisJaWYgKG1iLT5tYnhDb21tYW5kICE9IE1CWF9LSUxMX0JPQVJEICYmIGZsYWcgJiBNQlhfTk9XQUlUICYmCisJICAgICEocmVhZGwocGhiYS0+SENyZWdhZGRyKSAmIEhDX01CSU5UX0VOQSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaGJhLT5ob3N0LT5ob3N0X2xvY2ssIGRydnJfZmxhZyk7CisJCUxPR19NQk9YX0NBTk5PVF9JU1NVRV9EQVRBKCBwaGJhLCBtYiwgcHNsaSwgZmxhZykKKwkJcmV0dXJuIChNQlhfTk9UX0ZJTklTSEVEKTsKKwl9CisKIAlpZiAocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSV9NQk9YX0FDVElWRSkgewogCQkvKiBQb2xsaW5nIGZvciBhIG1ib3ggY29tbWFuZCB3aGVuIGFub3RoZXIgb25lIGlzIGFscmVhZHkgYWN0aXZlCiAJCSAqIGlzIG5vdCBhbGxvd2VkIGluIFNMSS4gQWxzbywgdGhlIGRyaXZlciBtdXN0IGhhdmUgZXN0YWJsaXNoZWQKQEAgLTIwMDIsNyArMjIwNyw4IEBACiAKIAkvKiBJZiB3ZSBhcmUgbm90IHBvbGxpbmcsIHdlIE1VU1QgYmUgaW4gU0xJMiBtb2RlICovCiAJaWYgKGZsYWcgIT0gTUJYX1BPTEwpIHsKLQkJaWYgKCEocHNsaS0+c2xpX2ZsYWcgJiBMUEZDX1NMSTJfQUNUSVZFKSkgeworCQlpZiAoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpICYmCisJCSAgICAobWItPm1ieENvbW1hbmQgIT0gTUJYX0tJTExfQk9BUkQpKSB7CiAJCQlwc2xpLT5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywKIAkJCQkJICAgICAgIGRydnJfZmxhZyk7CkBAIC0yMDg2LDggKzIyOTIsOSBAQAogCQloYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKIAogCQkvKiBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0JCXdoaWxlICgoKHdvcmQwICYgT1dOX0NISVApID09IE9XTl9DSElQKQotCQkgICAgICAgfHwgIShoYV9jb3B5ICYgSEFfTUJBVFQpKSB7CisJCXdoaWxlICgoKHdvcmQwICYgT1dOX0NISVApID09IE9XTl9DSElQKSB8fAorCQkgICAgICAgKCEoaGFfY29weSAmIEhBX01CQVRUKSAmJgorCQkJKHBoYmEtPmhiYV9zdGF0ZSA+IExQRkNfV0FSTV9TVEFSVCkpKSB7CiAJCQlpZiAoaSsrID49IDEwMCkgewogCQkJCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSV9NQk9YX0FDVElWRTsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywKQEAgLTIyMzcsMTYgKzI0NDQsNiBAQAogCQkgICAhKHBoYmEtPnNsaS5zbGlfZmxhZyAmIExQRkNfUFJPQ0VTU19MQSkpKQogCQlnb3RvIGlvY2JfYnVzeTsKIAotCS8qCi0JICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSBoaWdoIHByaW9yaXR5IGNvbW1hbmQuCi0JICogSWYgc28gYnlwYXNzIHR4IHF1ZXVlIHByb2Nlc3NpbmcuCi0JICovCi0JaWYgKHVubGlrZWx5KChmbGFnICYgU0xJX0lPQ0JfSElHSF9QUklPUklUWSkgJiYKLQkJICAgICAoaW9jYiA9IGxwZmNfc2xpX25leHRfaW9jYl9zbG90KHBoYmEsIHByaW5nKSkpKSB7Ci0JCWxwZmNfc2xpX3N1Ym1pdF9pb2NiKHBoYmEsIHByaW5nLCBpb2NiLCBwaW9jYik7Ci0JCXBpb2NiID0gTlVMTDsKLQl9Ci0KIAl3aGlsZSAoKGlvY2IgPSBscGZjX3NsaV9uZXh0X2lvY2Jfc2xvdChwaGJhLCBwcmluZykpICYmCiAJICAgICAgIChuZXh0aW9jYiA9IGxwZmNfc2xpX25leHRfaW9jYihwaGJhLCBwcmluZywgJnBpb2NiKSkpCiAJCWxwZmNfc2xpX3N1Ym1pdF9pb2NiKHBoYmEsIHByaW5nLCBpb2NiLCBuZXh0aW9jYik7CkBAIC0yMjc0LDYgKzI0NzEsMzcgQEAKIAlyZXR1cm4gSU9DQl9CVVNZOwogfQogCitzdGF0aWMgaW50CitscGZjX2V4dHJhX3Jpbmdfc2V0dXAoIHN0cnVjdCBscGZjX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgbHBmY19zbGkgKnBzbGk7CisJc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nOworCisJcHNsaSA9ICZwaGJhLT5zbGk7CisKKwkvKiBBZGp1c3QgY21kL3JzcCByaW5nIGlvY2IgZW50cmllcyBtb3JlIGV2ZW5seSAqLworCXByaW5nID0gJnBzbGktPnJpbmdbcHNsaS0+ZmNwX3JpbmddOworCXByaW5nLT5udW1DaW9jYiAtPSBTTEkyX0lPQ0JfQ01EX1IxWFRSQV9FTlRSSUVTOworCXByaW5nLT5udW1SaW9jYiAtPSBTTEkyX0lPQ0JfUlNQX1IxWFRSQV9FTlRSSUVTOworCXByaW5nLT5udW1DaW9jYiAtPSBTTEkyX0lPQ0JfQ01EX1IzWFRSQV9FTlRSSUVTOworCXByaW5nLT5udW1SaW9jYiAtPSBTTEkyX0lPQ0JfUlNQX1IzWFRSQV9FTlRSSUVTOworCisJcHJpbmcgPSAmcHNsaS0+cmluZ1sxXTsKKwlwcmluZy0+bnVtQ2lvY2IgKz0gU0xJMl9JT0NCX0NNRF9SMVhUUkFfRU5UUklFUzsKKwlwcmluZy0+bnVtUmlvY2IgKz0gU0xJMl9JT0NCX1JTUF9SMVhUUkFfRU5UUklFUzsKKwlwcmluZy0+bnVtQ2lvY2IgKz0gU0xJMl9JT0NCX0NNRF9SM1hUUkFfRU5UUklFUzsKKwlwcmluZy0+bnVtUmlvY2IgKz0gU0xJMl9JT0NCX1JTUF9SM1hUUkFfRU5UUklFUzsKKworCS8qIFNldHVwIGRlZmF1bHQgcHJvZmlsZSBmb3IgdGhpcyByaW5nICovCisJcHJpbmctPmlvdGFnX21heCA9IDQwOTY7CisJcHJpbmctPm51bV9tYXNrID0gMTsKKwlwcmluZy0+cHJ0WzBdLnByb2ZpbGUgPSAwOyAgICAgIC8qIE1hc2sgMCAqLworCXByaW5nLT5wcnRbMF0ucmN0bCA9IEZDX1VOU09MX0RBVEE7CisJcHJpbmctPnBydFswXS50eXBlID0gNTsKKwlwcmluZy0+cHJ0WzBdLmxwZmNfc2xpX3Jjdl91bnNvbF9ldmVudCA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKIGludAogbHBmY19zbGlfc2V0dXAoc3RydWN0IGxwZmNfaGJhICpwaGJhKQogewpAQCAtMjM1Nyw2ICsyNTg1LDggQEAKIAkJCQkiU0xJMiBTTElNIERhdGE6IHgleCB4JXhcbiIsCiAJCQkJcGhiYS0+YnJkX25vLCB0b3Rpb2NiLCBNQVhfU0xJMl9JT0NCKTsKIAl9CisJaWYgKHBoYmEtPmNmZ19tdWx0aV9yaW5nX3N1cHBvcnQgPT0gMikKKwkJbHBmY19leHRyYV9yaW5nX3NldHVwKHBoYmEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDY1LDE1ICsyNjk1LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAKLQkvKgotCSAqIFByb3ZpZGVkIHRoZSBoYmEgaXMgbm90IGluIGFuIGVycm9yIHN0YXRlLCByZXNldCBpdC4gIEl0IGlzIG5vdAotCSAqIGNhcGFibGUgb2YgSU8gYW55bW9yZS4KLQkgKi8KLQlpZiAocGhiYS0+aGJhX3N0YXRlICE9IExQRkNfSEJBX0VSUk9SKSB7Ci0JCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfSU5JVF9TVEFSVDsKLQkJbHBmY19zbGlfYnJkcmVzZXQocGhiYSwgMSk7Ci0JfQotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI4NzcsMTEgKzMwOTgsMTAgQEAKIAkJcG1ib3hxLT5jb250ZXh0MSA9IE5VTEw7CiAJCS8qIGlmIHNjaGVkdWxlX3RpbWVvdXQgcmV0dXJucyAwLCB3ZSB0aW1lZCBvdXQgYW5kIHdlcmUgbm90CiAJCSAgIHdva2VuIHVwICovCi0JCWlmICh0aW1lbGVmdCA9PSAwKSB7CisJCWlmICgodGltZWxlZnQgPT0gMCkgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR2YWwgPSBNQlhfVElNRU9VVDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcmV0dmFsID0gTUJYX1NVQ0NFU1M7Ci0JCX0KIAl9CiAKIApAQCAtMjk4NywxMyArMzIwNyw3IEBACiAJCQkvKiBDbGVhciBDaGlwIGVycm9yIGJpdCAqLwogCQkJd3JpdGVsKEhBX0VSQVRULCBwaGJhLT5IQXJlZ2FkZHIpOwogCQkJcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsgLyogZmx1c2ggKi8KLQotCQkJLyoKLQkJCSAqIFJlc2V0aW5nIHRoZSBIQkEgaXMgdGhlIG9ubHkgcmVsaWFibGUgd2F5Ci0JCQkgKiB0byBzaHV0ZG93biBpbnRlcnJ1cHQgd2hlbiB0aGVyZSBpcyBhCi0JCQkgKiBFUlJPUi4KLQkJCSAqLwotCQkJbHBmY19zbGlfc2VuZF9yZXNldChwaGJhLCBwaGJhLT5oYmFfc3RhdGUpOworCQkJcGhiYS0+c3RvcHBlZCA9IDE7CiAJCX0KIAogCQlzcGluX2xvY2socGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCmluZGV4IGI3YTlmOTcuLmE1MmQ2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtNjEsNyArNjEsNiBAQAogfTsKIAogI2RlZmluZSBTTElfSU9DQl9SRVRfSU9DQiAgICAgIDEJLyogUmV0dXJuIElPQ0IgaWYgY21kIHJpbmcgZnVsbCAqLwotI2RlZmluZSBTTElfSU9DQl9ISUdIX1BSSU9SSVRZIDIJLyogSGlnaCBwcmlvcml0eSBjb21tYW5kICovCiAKICNkZWZpbmUgSU9DQl9TVUNDRVNTICAgICAgICAwCiAjZGVmaW5lIElPQ0JfQlVTWSAgICAgICAgICAgMQpAQCAtMjAwLDggKzE5OSw2IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgbWJveF90bW87CS8qIEhvbGQgY2xrIHRvIHRpbWVvdXQgYWN0aXZlIG1ib3gKIAkJCQkJICAgY21kICovCiAKLQl1aW50MzJfdCAqTUJob3N0YWRkcjsJLyogdmlydHVhbCBhZGRyZXNzIGZvciBtYm94IGNtZHMgKi8KLQogI2RlZmluZSBMUEZDX0lPQ0JRX0xPT0tVUF9JTkNSRU1FTlQgIDEwMjQKIAlzdHJ1Y3QgbHBmY19pb2NicSAqKiBpb2NicV9sb29rdXA7IC8qIGFycmF5IHRvIGxvb2t1cCBJT0NCIGJ5IElPVEFHICovCiAJc2l6ZV90IGlvY2JxX2xvb2t1cF9sZW47ICAgICAgICAgICAvKiBjdXJyZW50IGxlbmdzIG9mIHRoZSBhcnJheSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAppbmRleCBmYTY4MWE5Li40Y2YxMzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRW11bGV4IExpbnV4IERldmljZSBEcml2ZXIgZm9yICAgICAgICAgKgogICogRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgKgogICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMTgsMTIgKzE4LDEyIEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4xLjEiCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMS40IgogCiAjZGVmaW5lIExQRkNfRFJJVkVSX05BTUUgImxwZmMiCiAKICNkZWZpbmUgTFBGQ19NT0RVTEVfREVTQyAiRW11bGV4IExpZ2h0UHVsc2UgRmlicmUgQ2hhbm5lbCBTQ1NJIGRyaXZlciAiIFwKIAkJTFBGQ19EUklWRVJfVkVSU0lPTgotI2RlZmluZSBMUEZDX0NPUFlSSUdIVCAiQ29weXJpZ2h0KGMpIDIwMDQtMjAwNSBFbXVsZXguICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKKyNkZWZpbmUgTFBGQ19DT1BZUklHSFQgIkNvcHlyaWdodChjKSAyMDA0LTIwMDYgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iCiAKICNkZWZpbmUgREZDX0FQSV9WRVJTSU9OICIwLjAuMCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IGJmOWY3ZjcuLmMxMWU1Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMjc5Nyw3ICsyNzk3LDcgQEAKIAkvLyBhdmFpbGFibGUgd2l0aGluIDEgc2Vjb25kLCBhc3N1bWUgRlcgaXMgaW5pdGlhbGl6aW5nIGFuZCB3YWl0CiAJLy8gZm9yIGFuIGV4dGVuZGVkIGFtb3VudCBvZiB0aW1lCiAJaWYgKG1ib3gtPm51bXN0YXR1cyA9PSAweEZGKSB7CS8vIHN0YXR1cyBub3QgeWV0IGF2YWlsYWJsZQotCQl1ZGVsYXkoMjUpOzsKKwkJdWRlbGF5KDI1KTsKIAogCQlmb3IgKGkgPSAwOyBtYm94LT5udW1zdGF0dXMgPT0gMHhGRiAmJiBpIDwgMTAwMDsgaSsrKSB7CiAJCQlybWIoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuYwppbmRleCA3ZGUyNjdlLi4zOTcyOTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5jCkBAIC03NzIsOCArNzcyLDYgQEAKIAkJZ290byBvdXRfcmV0dXJuX2NtZDsKIAogCWNtZC0+c2NtZCA9IHNjbWQ7Ci0Jc2NtZC0+U0NwLnB0ciA9IChjaGFyICopY21kOwotCXNjbWQtPlNDcC5zZW50X2NvbW1hbmQgPSBqaWZmaWVzOwogCiAJLyoKIAkgKiBJc3N1ZSB0aGUgY29tbWFuZCB0byB0aGUgRlcKQEAgLTc5Myw2ICs3OTEsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtZWdhc2FzX3NsYXZlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJLyoKKwkgKiBEb24ndCBleHBvcnQgcGh5c2ljYWwgZGlzayBkZXZpY2VzIHRvIHRoZSBkaXNrIGRyaXZlci4KKwkgKgorCSAqIEZJWE1FOiBDdXJyZW50bHkgd2UgZG9uJ3QgZXhwb3J0IHRoZW0gdG8gdGhlIG1pZGxheWVyIGF0IGFsbC4KKwkgKiAJICBUaGF0IHdpbGwgYmUgZml4ZWQgb25jZSBMU0kgZW5naW5lZXJzIGhhdmUgYXVkaXRlZCB0aGUKKwkgKiAJICBmaXJtd2FyZSBmb3IgcG9zc2libGUgaXNzdWVzLgorCSAqLworCWlmIChzZGV2LT5jaGFubmVsIDwgTUVHQVNBU19NQVhfUERfQ0hBTk5FTFMgJiYgc2Rldi0+dHlwZSA9PSBUWVBFX0RJU0spCisJCXJldHVybiAtRU5YSU87CisKKwkvKgorCSAqIFRoZSBSQUlEIGZpcm13YXJlIG1heSByZXF1aXJlIGV4dGVuZGVkIHRpbWVvdXRzLgorCSAqLworCWlmIChzZGV2LT5jaGFubmVsID49IE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTKQorCQlzZGV2LT50aW1lb3V0ID0gOTAgKiBIWjsKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBtZWdhc2FzX3dhaXRfZm9yX291dHN0YW5kaW5nIC0JV2FpdCBmb3IgYWxsIG91dHN0YW5kaW5nIGNtZHMKICAqIEBpbnN0YW5jZToJCQkJQWRhcHRlciBzb2Z0IHN0YXRlCkBAIC04NjEsMjMgKzg3OSw2IEBACiAJcmV0dXJuIHJldF92YWw7CiB9CiAKLXN0YXRpYyBlbnVtIHNjc2lfZWhfdGltZXJfcmV0dXJuIG1lZ2FzYXNfcmVzZXRfdGltZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKLXsKLQl1bnNpZ25lZCBsb25nIHNlY29uZHM7Ci0KLQlpZiAoc2NtZC0+U0NwLnB0cikgewotCQlzZWNvbmRzID0gKGppZmZpZXMgLSBzY21kLT5TQ3Auc2VudF9jb21tYW5kKSAvIEhaOwotCi0JCWlmIChzZWNvbmRzIDwgOTApIHsKLQkJCXJldHVybiBFSF9SRVNFVF9USU1FUjsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBFSF9OT1RfSEFORExFRDsKLQkJfQotCX0KLQotCXJldHVybiBFSF9IQU5ETEVEOwotfQotCiAvKioKICAqIG1lZ2FzYXNfcmVzZXRfZGV2aWNlIC0JRGV2aWNlIHJlc2V0IGhhbmRsZXIgZW50cnkgcG9pbnQKICAqLwpAQCAtOTAxLDcgKzkwMiw3IEBACiAJaW50IHJldDsKIAogCS8qCi0JICogRnJpc3Qgd2FpdCBmb3IgYWxsIGNvbW1hbmRzIHRvIGNvbXBsZXRlCisJICogRmlyc3Qgd2FpdCBmb3IgYWxsIGNvbW1hbmRzIHRvIGNvbXBsZXRlCiAJICovCiAJcmV0ID0gbWVnYXNhc19nZW5lcmljX3Jlc2V0KHNjbWQpOwogCkBAIC05NDMsMTEgKzk0NCwxMSBAQAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIAkubmFtZSA9ICJMU0kgTG9naWMgU0FTIGJhc2VkIE1lZ2FSQUlEIGRyaXZlciIsCiAJLnByb2NfbmFtZSA9ICJtZWdhcmFpZF9zYXMiLAorCS5zbGF2ZV9jb25maWd1cmUgPSBtZWdhc2FzX3NsYXZlX2NvbmZpZ3VyZSwKIAkucXVldWVjb21tYW5kID0gbWVnYXNhc19xdWV1ZV9jb21tYW5kLAogCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IG1lZ2FzYXNfcmVzZXRfZGV2aWNlLAogCS5laF9idXNfcmVzZXRfaGFuZGxlciA9IG1lZ2FzYXNfcmVzZXRfYnVzX2hvc3QsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlciA9IG1lZ2FzYXNfcmVzZXRfYnVzX2hvc3QsCi0JLmVoX3RpbWVkX291dCA9IG1lZ2FzYXNfcmVzZXRfdGltZXIsCiAJLnVzZV9jbHVzdGVyaW5nID0gRU5BQkxFX0NMVVNURVJJTkcsCiB9OwogCkBAIC0xMDcxLDIwICsxMDcyLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyoKLQkJICogRG9uJ3QgZXhwb3J0IHBoeXNpY2FsIGRpc2sgZGV2aWNlcyB0byBtaWQtbGF5ZXIuCi0JCSAqLwotCQlpZiAoIU1FR0FTQVNfSVNfTE9HSUNBTChjbWQtPnNjbWQpICYmCi0JCSAgICAoaGRyLT5jbWRfc3RhdHVzID09IE1GSV9TVEFUX09LKSAmJgotCQkgICAgKGNtZC0+c2NtZC0+Y21uZFswXSA9PSBJTlFVSVJZKSkgewotCi0JCQlpZiAoKCgqKHU4ICopIGNtZC0+c2NtZC0+cmVxdWVzdF9idWZmZXIpICYgMHgxRikgPT0KLQkJCSAgICBUWVBFX0RJU0spIHsKLQkJCQljbWQtPnNjbWQtPnJlc3VsdCA9IERJRF9CQURfVEFSR0VUIDw8IDE2OwotCQkJCWV4Y2VwdGlvbiA9IDE7Ci0JCQl9Ci0JCX0KLQogCWNhc2UgTUZJX0NNRF9MRF9SRUFEOgogCWNhc2UgTUZJX0NNRF9MRF9XUklURToKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCmluZGV4IDMyMzUwNzAuLjIyZjkxMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYworKysgYi9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKQEAgLTY5LDYgKzY5LDEwIEBACiAqKiAgICAgTG93IFBDSSB0cmFmZmljIGZvciBjb21tYW5kIGhhbmRsaW5nIHdoZW4gb24tY2hpcCBSQU0gaXMgcHJlc2VudC4KICoqICAgICBBZ2dyZXNzaXZlIFNDU0kgU0NSSVBUUyBvcHRpbWl6YXRpb25zLgogKioKKyoqICAyMDA1IGJ5IE1hdHRoZXcgV2lsY294IGFuZCBKYW1lcyBCb3R0b21sZXkKKyoqICAgICBQQ0ktZWN0b215LiAgVGhpcyBkcml2ZXIgbm93IHN1cHBvcnRzIG9ubHkgdGhlIDcyMCBjaGlwIChzZWUgdGhlCisqKiAgICAgTkNSX1E3MjAgYW5kIHphbG9uIGRyaXZlcnMgZm9yIHRoZSBidXMgcHJvYmUgbG9naWMpLgorKioKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCiAKQEAgLTkwLDEzICs5NCw2IEBACiAKICNkZWZpbmUgU0NTSV9OQ1JfREVCVUdfRkxBR1MJKDApCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKioKLSoqICAgICAgSW5jbHVkZSBmaWxlcwotKioKLSoqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLQogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KQEAgLTEyMSw2ICsxMTgsNyBAQAogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CkBAIC0xMjgsMTAgKzEyNiw4IEBACiAKICNpbmNsdWRlICJuY3I1M2M4eHguaCIKIAotI2RlZmluZSBOQU1FNTNDCQkJIm5jcjUzYyIKICNkZWZpbmUgTkFNRTUzQzhYWAkJIm5jcjUzYzh4eCIKIAotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICoqCiAqKglEZWJ1Z2dpbmcgdGFncwpAQCAtMjExMSw3ICsyMTA3LDcgQEAKIAkqLwogCiAJLyoKLQkqKglUaGUgTV9SRUpFQ1QgcHJvYmxlbSBzZWVtcyB0byBiZSBkdWUgdG8gYSBzZWxlY3Rpb24gCisJKioJVGhlIE1FU1NBR0VfUkVKRUNUIHByb2JsZW0gc2VlbXMgdG8gYmUgZHVlIHRvIGEgc2VsZWN0aW9uIAogCSoqCXRpbWluZyBwcm9ibGVtLgogCSoqCVdhaXQgaW1tZWRpYXRlbHkgZm9yIHRoZSBzZWxlY3Rpb24gdG8gY29tcGxldGUuIAogCSoqCSgyLjV4IGJlaGF2ZXMgc28pCkBAIC0yMTYyLDcgKzIxNTgsNyBAQAogCS8qCiAJKioJU2VsZWN0aW9uIGNvbXBsZXRlLgogCSoqCVNlbmQgdGhlIElERU5USUZZIGFuZCBTSU1QTEVfVEFHIG1lc3NhZ2VzCi0JKioJKGFuZCB0aGUgTV9YX1NZTkNfUkVRIG1lc3NhZ2UpCisJKioJKGFuZCB0aGUgRVhURU5ERURfU0RUUiBtZXNzYWdlKQogCSovCiAJU0NSX01PVkVfVEJMIF4gU0NSX01TR19PVVQsCiAJCW9mZnNldG9mIChzdHJ1Y3QgZHNiLCBzbXNnKSwKQEAgLTIxOTEsNyArMjE4Nyw3IEBACiAJLyoKIAkqKglJbml0aWFsaXplIHRoZSBtc2dvdXQgYnVmZmVyIHdpdGggYSBOT09QIG1lc3NhZ2UuCiAJKi8KLQlTQ1JfTE9BRF9SRUcgKHNjcmF0Y2hhLCBNX05PT1ApLAorCVNDUl9MT0FEX1JFRyAoc2NyYXRjaGEsIE5PUCksCiAJCTAsCiAJU0NSX0NPUFkgKDEpLAogCQlSQUREUiAoc2NyYXRjaGEpLApAQCAtMjM0MywyMSArMjMzOSwyMSBAQAogCS8qCiAJKioJSGFuZGxlIHRoaXMgbWVzc2FnZS4KIAkqLwotCVNDUl9KVU1QIF4gSUZUUlVFIChEQVRBIChNX0NPTVBMRVRFKSksCisJU0NSX0pVTVAgXiBJRlRSVUUgKERBVEEgKENPTU1BTkRfQ09NUExFVEUpKSwKIAkJUEFERFIgKGNvbXBsZXRlKSwKLQlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoTV9ESVNDT05ORUNUKSksCisJU0NSX0pVTVAgXiBJRlRSVUUgKERBVEEgKERJU0NPTk5FQ1QpKSwKIAkJUEFERFIgKGRpc2Nvbm5lY3QpLAotCVNDUl9KVU1QIF4gSUZUUlVFIChEQVRBIChNX1NBVkVfRFApKSwKKwlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoU0FWRV9QT0lOVEVSUykpLAogCQlQQUREUiAoc2F2ZV9kcCksCi0JU0NSX0pVTVAgXiBJRlRSVUUgKERBVEEgKE1fUkVTVE9SRV9EUCkpLAorCVNDUl9KVU1QIF4gSUZUUlVFIChEQVRBIChSRVNUT1JFX1BPSU5URVJTKSksCiAJCVBBRERSIChyZXN0b3JlX2RwKSwKLQlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoTV9FWFRFTkRFRCkpLAorCVNDUl9KVU1QIF4gSUZUUlVFIChEQVRBIChFWFRFTkRFRF9NRVNTQUdFKSksCiAJCVBBRERSSCAobXNnX2V4dGVuZGVkKSwKLQlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoTV9OT09QKSksCisJU0NSX0pVTVAgXiBJRlRSVUUgKERBVEEgKE5PUCkpLAogCQlQQUREUiAoY2xyYWNrKSwKLQlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoTV9SRUpFQ1QpKSwKKwlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoTUVTU0FHRV9SRUpFQ1QpKSwKIAkJUEFERFJIIChtc2dfcmVqZWN0KSwKLQlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoTV9JR05fUkVTSURVRSkpLAorCVNDUl9KVU1QIF4gSUZUUlVFIChEQVRBIChJR05PUkVfV0lERV9SRVNJRFVFKSksCiAJCVBBRERSSCAobXNnX2lnbl9yZXNpZHVlKSwKIAkvKgogCSoqCVJlc3Qgb2YgdGhlIG1lc3NhZ2VzIGxlZnQgYXMKQEAgLTIzNzIsNyArMjM2OCw3IEBACiAJKi8KIAlTQ1JfSU5ULAogCQlTSVJfUkVKRUNUX1NFTlQsCi0JU0NSX0xPQURfUkVHIChzY3JhdGNoYSwgTV9SRUpFQ1QpLAorCVNDUl9MT0FEX1JFRyAoc2NyYXRjaGEsIE1FU1NBR0VfUkVKRUNUKSwKIAkJMCwKIH0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08IFNFVE1TRyA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLHsKIAlTQ1JfQ09QWSAoMSksCkBAIC0yNTY0LDcgKzI1NjAsNyBAQAogCS8qCiAJKioJSWYgaXQgd2FzIG5vIEFCT1JUIG1lc3NhZ2UgLi4uCiAJKi8KLQlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoTV9BQk9SVCkpLAorCVNDUl9KVU1QIF4gSUZUUlVFIChEQVRBIChBQk9SVF9UQVNLX1NFVCkpLAogCQlQQUREUkggKG1zZ19vdXRfYWJvcnQpLAogCS8qCiAJKioJLi4uIHdhaXQgZm9yIHRoZSBuZXh0IHBoYXNlCkBAIC0yNTc2LDcgKzI1NzIsNyBAQAogCS8qCiAJKioJLi4uIGVsc2UgY2xlYXIgdGhlIG1lc3NhZ2UgLi4uCiAJKi8KLQlTQ1JfTE9BRF9SRUcgKHNjcmF0Y2hhLCBNX05PT1ApLAorCVNDUl9MT0FEX1JFRyAoc2NyYXRjaGEsIE5PUCksCiAJCTAsCiAJU0NSX0NPUFkgKDQpLAogCQlSQUREUiAoc2NyYXRjaGEpLApAQCAtMzAzNSw3ICszMDMxLDcgQEAKIAkqLwogCVNDUl9NT1ZFX0FCUyAoMSkgXiBTQ1JfTVNHX0lOLAogCQlOQUREUiAobXNnaW5bMl0pLAotCVNDUl9KVU1QIF4gSUZUUlVFIChEQVRBIChNX1hfV0lERV9SRVEpKSwKKwlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoRVhURU5ERURfV0RUUikpLAogCQlQQUREUkggKG1zZ193ZHRyKSwKIAkvKgogCSoqCXVua25vd24gZXh0ZW5kZWQgbWVzc2FnZQpAQCAtMzA2OSw3ICszMDY1LDcgQEAKIAogfS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTwgU0VORF9XRFRSID4tLS0tLS0tLS0tLS0tLS0tKi8sewogCS8qCi0JKioJU2VuZCB0aGUgTV9YX1dJREVfUkVRCisJKioJU2VuZCB0aGUgRVhURU5ERURfV0RUUgogCSovCiAJU0NSX01PVkVfQUJTICg0KSBeIFNDUl9NU0dfT1VULAogCQlOQUREUiAobXNnb3V0KSwKQEAgLTMwODksNyArMzA4NSw3IEBACiAJKi8KIAlTQ1JfTU9WRV9BQlMgKDEpIF4gU0NSX01TR19JTiwKIAkJTkFERFIgKG1zZ2luWzJdKSwKLQlTQ1JfSlVNUCBeIElGVFJVRSAoREFUQSAoTV9YX1NZTkNfUkVRKSksCisJU0NSX0pVTVAgXiBJRlRSVUUgKERBVEEgKEVYVEVOREVEX1NEVFIpKSwKIAkJUEFERFJIIChtc2dfc2R0ciksCiAJLyoKIAkqKgl1bmtub3duIGV4dGVuZGVkIG1lc3NhZ2UKQEAgLTMxMjQsNyArMzEyMCw3IEBACiAKIH0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08IFNFTkRfU0RUUiA+LS0tLS0tLS0tLS0tLSovLHsKIAkvKgotCSoqCVNlbmQgdGhlIE1fWF9TWU5DX1JFUQorCSoqCVNlbmQgdGhlIEVYVEVOREVEX1NEVFIKIAkqLwogCVNDUl9NT1ZFX0FCUyAoNSkgXiBTQ1JfTVNHX09VVCwKIAkJTkFERFIgKG1zZ291dCksCkBAIC0zMjAyLDEwICszMTk4LDEwIEBACiAKIH0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08IFJFU0VUID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8sewogCS8qCi0JKiogICAgICBTZW5kIGEgTV9SRVNFVCBtZXNzYWdlIGlmIGJhZCBJREVOVElGWSAKKwkqKiAgICAgIFNlbmQgYSBUQVJHRVRfUkVTRVQgbWVzc2FnZSBpZiBiYWQgSURFTlRJRlkgCiAJKioJcmVjZWl2ZWQgb24gcmVzZWxlY3Rpb24uCiAJKi8KLQlTQ1JfTE9BRF9SRUcgKHNjcmF0Y2hhLCBNX0FCT1JUX1RBRyksCisJU0NSX0xPQURfUkVHIChzY3JhdGNoYSwgQUJPUlRfVEFTSyksCiAJCTAsCiAJU0NSX0pVTVAsCiAJCVBBRERSSCAoYWJvcnRfcmVzZWwpLApAQCAtMzIxMyw3ICszMjA5LDcgQEAKIAkvKgogCSoqICAgICAgQWJvcnQgYSB3cm9uZyB0YWcgcmVjZWl2ZWQgb24gcmVzZWxlY3Rpb24uCiAJKi8KLQlTQ1JfTE9BRF9SRUcgKHNjcmF0Y2hhLCBNX0FCT1JUX1RBRyksCisJU0NSX0xPQURfUkVHIChzY3JhdGNoYSwgQUJPUlRfVEFTSyksCiAJCTAsCiAJU0NSX0pVTVAsCiAJCVBBRERSSCAoYWJvcnRfcmVzZWwpLApAQCAtMzIyMSw3ICszMjE3LDcgQEAKIAkvKgogCSoqICAgICAgQWJvcnQgYSByZXNlbGVjdGlvbiB3aGVuIG5vIGFjdGl2ZSBDQ0IuCiAJKi8KLQlTQ1JfTE9BRF9SRUcgKHNjcmF0Y2hhLCBNX0FCT1JUKSwKKwlTQ1JfTE9BRF9SRUcgKHNjcmF0Y2hhLCBBQk9SVF9UQVNLX1NFVCksCiAJCTAsCiB9LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPCBBQk9SVF9SRVNFTCA+LS0tLS0tLS0tLS0tLS0tLSovLHsKIAlTQ1JfQ09QWSAoMSksCkBAIC0zMzMzLDcgKzMzMjksNyBAQAogCSoqCVJlYWQgdGhlIG1lc3NhZ2UsIHNpbmNlIHdlIGdvdCBpdCBkaXJlY3RseSAKIAkqKglmcm9tIHRoZSBTQ1NJIEJVUyBkYXRhIGxpbmVzLgogCSoqCVNpZ25hbCBwcm9ibGVtIHRvIEMgY29kZSBmb3IgbG9nZ2luZyB0aGUgZXZlbnQuCi0JKioJU2VuZCBhIE1fQUJPUlQgdG8gY2xlYXIgYWxsIHBlbmRpbmcgdGFza3MuCisJKioJU2VuZCBhbiBBQk9SVF9UQVNLX1NFVCB0byBjbGVhciBhbGwgcGVuZGluZyB0YXNrcy4KIAkqLwogCVNDUl9JTlQsCiAJCVNJUl9SRVNFTF9CQURfTFVOLApAQCAtMzM0NSw3ICszMzQxLDcgQEAKIAkvKgogCSoqCVdlIGRvbm5vdCBoYXZlIGEgdGFzayBmb3IgdGhhdCBJX1RfTC4KIAkqKglTaWduYWwgcHJvYmxlbSB0byBDIGNvZGUgZm9yIGxvZ2dpbmcgdGhlIGV2ZW50LgotCSoqCVNlbmQgYSBNX0FCT1JUIG1lc3NhZ2UuCisJKioJU2VuZCBhbiBBQk9SVF9UQVNLX1NFVCBtZXNzYWdlLgogCSovCiAJU0NSX0lOVCwKIAkJU0lSX1JFU0VMX0JBRF9JX1RfTCwKQEAgLTMzNTUsNyArMzM1MSw3IEBACiAJLyoKIAkqKglXZSBkb25ub3QgaGF2ZSBhIHRhc2sgdGhhdCBtYXRjaGVzIHRoZSB0YWcuCiAJKioJU2lnbmFsIHByb2JsZW0gdG8gQyBjb2RlIGZvciBsb2dnaW5nIHRoZSBldmVudC4KLQkqKglTZW5kIGEgTV9BQk9SVFRBRyBtZXNzYWdlLgorCSoqCVNlbmQgYW4gQUJPUlRfVEFTSyBtZXNzYWdlLgogCSovCiAJU0NSX0lOVCwKIAkJU0lSX1JFU0VMX0JBRF9JX1RfTF9RLApAQCAtMzM2Niw3ICszMzYyLDcgQEAKIAkqKglXZSBkb25ub3Qga25vdyB0aGUgdGFyZ2V0IHRoYXQgcmVzZWxlY3RlZCB1cy4KIAkqKglHcmFiIHRoZSBmaXJzdCBtZXNzYWdlIGlmIGFueSAoSURFTlRJRlkpLgogCSoqCVNpZ25hbCBwcm9ibGVtIHRvIEMgY29kZSBmb3IgbG9nZ2luZyB0aGUgZXZlbnQuCi0JKioJTV9SRVNFVCBtZXNzYWdlLgorCSoqCVRBUkdFVF9SRVNFVCBtZXNzYWdlLgogCSovCiAJU0NSX0lOVCwKIAkJU0lSX1JFU0VMX0JBRF9UQVJHRVQsCkBAIC00MTA5LDE3ICs0MTA1LDExIEBACiAKIAlzd2l0Y2ggKG5lZ28pIHsKIAljYXNlIE5TX1NZTkM6Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBNX0VYVEVOREVEOwotCQltc2dwdHJbbXNnbGVuKytdID0gMzsKLQkJbXNncHRyW21zZ2xlbisrXSA9IE1fWF9TWU5DX1JFUTsKLQkJbXNncHRyW21zZ2xlbisrXSA9IHRwLT5tYXhvZmZzID8gdHAtPm1pbnN5bmMgOiAwOwotCQltc2dwdHJbbXNnbGVuKytdID0gdHAtPm1heG9mZnM7CisJCW1zZ2xlbiArPSBzcGlfcG9wdWxhdGVfc3luY19tc2cobXNncHRyICsgbXNnbGVuLAorCQkJCXRwLT5tYXhvZmZzID8gdHAtPm1pbnN5bmMgOiAwLCB0cC0+bWF4b2Zmcyk7CiAJCWJyZWFrOwogCWNhc2UgTlNfV0lERToKLQkJbXNncHRyW21zZ2xlbisrXSA9IE1fRVhURU5ERUQ7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSAyOwotCQltc2dwdHJbbXNnbGVuKytdID0gTV9YX1dJREVfUkVROwotCQltc2dwdHJbbXNnbGVuKytdID0gdHAtPnVzcndpZGU7CisJCW1zZ2xlbiArPSBzcGlfcG9wdWxhdGVfd2lkdGhfbXNnKG1zZ3B0ciArIG1zZ2xlbiwgdHAtPnVzcndpZGUpOwogCQlicmVhazsKIAl9CiAKQEAgLTQyMjAsNyArNDIxMCw3IEBACiAJKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJKi8KIAotCWlkbXNnID0gTV9JREVOVElGWSB8IHNkZXYtPmx1bjsKKwlpZG1zZyA9IElERU5USUZZKDAsIHNkZXYtPmx1bik7CiAKIAlpZiAoY3AgLT50YWcgIT0gTk9fVEFHIHx8CiAJCShjcCAhPSBucC0+Y2NiICYmIG5wLT5kaXNjICYmICEodHAtPnVzcmZsYWcgJiBVRl9OT0RJU0MpKSkKQEAgLTQyMzksNyArNDIyOSw3IEBACiAJCSovCiAJCWlmIChscCAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGxwLT50YWdzX3N0aW1lKSkgewogCQkJaWYgKGxwLT50YWdzX3NtYXApIHsKLQkJCQlvcmRlciA9IE1fT1JERVJFRF9UQUc7CisJCQkJb3JkZXIgPSBPUkRFUkVEX1FVRVVFX1RBRzsKIAkJCQlpZiAoKERFQlVHX0ZMQUdTICYgREVCVUdfVEFHUyl8fGJvb3R2ZXJib3NlPjIpeyAKIAkJCQkJUFJJTlRfQUREUihjbWQsCiAJCQkJCQkib3JkZXJlZCB0YWcgZm9yY2VkLlxuIik7CkBAIC00MjU3LDEwICs0MjQ3LDEwIEBACiAJCQljYXNlIDB4MDg6ICAvKiBSRUFEX1NNQUxMICg2KSAqLwogCQkJY2FzZSAweDI4OiAgLyogUkVBRF9CSUcgICgxMCkgKi8KIAkJCWNhc2UgMHhhODogIC8qIFJFQURfSFVHRSAoMTIpICovCi0JCQkJb3JkZXIgPSBNX1NJTVBMRV9UQUc7CisJCQkJb3JkZXIgPSBTSU1QTEVfUVVFVUVfVEFHOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKLQkJCQlvcmRlciA9IE1fT1JERVJFRF9UQUc7CisJCQkJb3JkZXIgPSBPUkRFUkVEX1FVRVVFX1RBRzsKIAkJCX0KIAkJfQogCQltc2dwdHJbbXNnbGVuKytdID0gb3JkZXI7CkBAIC02MjI5LDkgKzYyMTksOSBAQAogCWlmICghKGRiYyAmIDB4YzAwMDAwMDApKQogCQlwaGFzZSA9IChkYmMgPj4gMjQpICYgNzsKIAlpZiAocGhhc2UgPT0gNykKLQkJbXNnID0gTV9QQVJJVFk7CisJCW1zZyA9IE1TR19QQVJJVFlfRVJST1I7CiAJZWxzZQotCQltc2cgPSBNX0lEX0VSUk9SOworCQltc2cgPSBJTklUSUFUT1JfRVJST1I7CiAKIAogCS8qCkBAIC02Nzk1LDYgKzY3ODUsOCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKioKICoqCVdhcyBTaWUgc2Nob24gaW1tZXIgdWViZXIgdHJhbnNmZXJtb2RlIG5lZ290aWF0aW9uIHdpc3NlbiB3b2xsdGVuIC4uLgorKioJKCJFdmVyeXRoaW5nIHlvdSd2ZSBhbHdheXMgd2FudGVkIHRvIGtub3cgYWJvdXQgdHJhbnNmZXIgbW9kZQorKioJICBuZWdvdGlhdGlvbiIpCiAqKgogKioJV2UgdHJ5IHRvIG5lZ290aWF0ZSBzeW5jIGFuZCB3aWRlIHRyYW5zZmVyIG9ubHkgYWZ0ZXIKICoqCWEgc3VjY2Vzc2Z1bCBpbnF1aXJlIGNvbW1hbmQuIFdlIGxvb2sgYXQgYnl0ZSA3IG9mIHRoZQpAQCAtNjg5Niw4ICs2ODg4LDggQEAKIAkJCWJyZWFrOwogCiAJCX0KLQkJbnAtPm1zZ2luIFswXSA9IE1fTk9PUDsKLQkJbnAtPm1zZ291dFswXSA9IE1fTk9PUDsKKwkJbnAtPm1zZ2luIFswXSA9IE5PUDsKKwkJbnAtPm1zZ291dFswXSA9IE5PUDsKIAkJY3AtPm5lZ29fc3RhdHVzID0gMDsKIAkJYnJlYWs7CiAKQEAgLTY5OTEsMTIgKzY5ODMsNyBAQAogCQlzcGlfb2Zmc2V0KHN0YXJnZXQpID0gb2ZzOwogCQluY3Jfc2V0c3luYyhucCwgY3AsIHNjbnRsMywgKGZhazw8NSl8b2ZzKTsKIAotCQlucC0+bXNnb3V0WzBdID0gTV9FWFRFTkRFRDsKLQkJbnAtPm1zZ291dFsxXSA9IDM7Ci0JCW5wLT5tc2dvdXRbMl0gPSBNX1hfU1lOQ19SRVE7Ci0JCW5wLT5tc2dvdXRbM10gPSBwZXI7Ci0JCW5wLT5tc2dvdXRbNF0gPSBvZnM7Ci0KKwkJc3BpX3BvcHVsYXRlX3N5bmNfbXNnKG5wLT5tc2dvdXQsIHBlciwgb2ZzKTsKIAkJY3AtPm5lZ29fc3RhdHVzID0gTlNfU1lOQzsKIAogCQlpZiAoREVCVUdfRkxBR1MgJiBERUJVR19ORUdPKSB7CkBAIC03MDA3LDcgKzY5OTQsNyBAQAogCQkJT1VUTF9EU1AgKE5DQl9TQ1JJUFRfUEhZUyAobnAsIG1zZ19iYWQpKTsKIAkJCXJldHVybjsKIAkJfQotCQlucC0+bXNnaW4gWzBdID0gTV9OT09QOworCQlucC0+bXNnaW4gWzBdID0gTk9QOwogCiAJCWJyZWFrOwogCkBAIC03MDgyLDEzICs3MDY5LDkgQEAKIAogCQlzcGlfd2lkdGgoc3RhcmdldCkgPSB3aWRlOwogCQluY3Jfc2V0d2lkZShucCwgY3AsIHdpZGUsIDEpOworCQlzcGlfcG9wdWxhdGVfd2lkdGhfbXNnKG5wLT5tc2dvdXQsIHdpZGUpOwogCi0JCW5wLT5tc2dvdXRbMF0gPSBNX0VYVEVOREVEOwotCQlucC0+bXNnb3V0WzFdID0gMjsKLQkJbnAtPm1zZ291dFsyXSA9IE1fWF9XSURFX1JFUTsKLQkJbnAtPm1zZ291dFszXSA9IHdpZGU7Ci0KLQkJbnAtPm1zZ2luIFswXSA9IE1fTk9PUDsKKwkJbnAtPm1zZ2luIFswXSA9IE5PUDsKIAogCQljcC0+bmVnb19zdGF0dXMgPSBOU19XSURFOwogCkBAIC03MTA3LDEyICs3MDkwLDEyIEBACiAJY2FzZSBTSVJfUkVKRUNUX1JFQ0VJVkVEOgogCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCSoqCi0JCSoqCVdlIHJlY2VpdmVkIGEgTV9SRUpFQ1QgbWVzc2FnZS4KKwkJKioJV2UgcmVjZWl2ZWQgYSBNRVNTQUdFX1JFSkVDVC4KIAkJKioKIAkJKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkqLwogCi0JCVBSSU5UX0FERFIoY3AtPmNtZCwgIk1fUkVKRUNUIHJlY2VpdmVkICgleDoleCkuXG4iLAorCQlQUklOVF9BRERSKGNwLT5jbWQsICJNRVNTQUdFX1JFSkVDVCByZWNlaXZlZCAoJXg6JXgpLlxuIiwKIAkJCSh1bnNpZ25lZClzY3JfdG9fY3B1KG5wLT5sYXN0bXNnKSwgbnAtPm1zZ291dFswXSk7CiAJCWJyZWFrOwogCkBAIC03MTI0LDcgKzcxMDcsNyBAQAogCQkqKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCSovCiAKLQkJbmNyX3ByaW50X21zZyhjcCwgIk1fUkVKRUNUIHNlbnQgZm9yIiwgbnAtPm1zZ2luKTsKKwkJbmNyX3ByaW50X21zZyhjcCwgIk1FU1NBR0VfUkVKRUNUIHNlbnQgZm9yIiwgbnAtPm1zZ2luKTsKIAkJYnJlYWs7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcxNDMsNyArNzEyNiw3IEBACiAJCSoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJKi8KIAotCQlQUklOVF9BRERSKGNwLT5jbWQsICJNX0lHTl9SRVNJRFVFIHJlY2VpdmVkLCBidXQgbm90IHlldCAiCisJCVBSSU5UX0FERFIoY3AtPmNtZCwgIklHTk9SRV9XSURFX1JFU0lEVUUgcmVjZWl2ZWQsIGJ1dCBub3QgeWV0ICIKIAkJCQkiaW1wbGVtZW50ZWQuXG4iKTsKIAkJYnJlYWs7CiAjaWYgMApAQCAtNzE1Niw3ICs3MTM5LDcgQEAKIAkJKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkqLwogCi0JCVBSSU5UX0FERFIoY3AtPmNtZCwgIk1fRElTQ09OTkVDVCByZWNlaXZlZCwgYnV0IGRhdGFwb2ludGVyICIKKwkJUFJJTlRfQUREUihjcC0+Y21kLCAiRElTQ09OTkVDVCByZWNlaXZlZCwgYnV0IGRhdGFwb2ludGVyICIKIAkJCQkibm90IHNhdmVkOiBkYXRhPSV4IHNhdmU9JXggZ29hbD0leC5cbiIsCiAJCQkodW5zaWduZWQpIElOTCAobmNfdGVtcCksCiAJCQkodW5zaWduZWQpIHNjcl90b19jcHUobnAtPmhlYWRlci5zYXZlcCksCkBAIC03ODYyLDcgKzc4NDUsNyBAQAogKio9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqKgogKioJTm90ZTogd2UgaGF2ZSB0byByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUuCi0qKglUSEVSRSBJUyBOTyBTQVZFIERFRkFVTFQgVkFMVUUuCisqKglUSEVSRSBJUyBOTyBTQUZFIERFRkFVTFQgVkFMVUUuCiAqKgogKioJTW9zdCBOQ1IvU1lNQklPUyBib2FyZHMgYXJlIGRlbGl2ZXJlZCB3aXRoIGEgNDAgTWh6IGNsb2NrLgogKioJNTNDODYwIGFuZCA1M0M4NzUgcmV2LiAxIHN1cHBvcnQgZmFzdDIwIHRyYW5zZmVycyBidXQgCkBAIC04NTYyLDcgKzg1NDUsNyBAQAogCiAJLyogdXNlIFNJTVBMRSBUQUcgbWVzc2FnZXMgYnkgZGVmYXVsdCAqLwogI2lmZGVmIFNDU0lfTkNSX0FMV0FZU19TSU1QTEVfVEFHCi0JbnAtPm9yZGVyID0gTV9TSU1QTEVfVEFHOworCW5wLT5vcmRlciA9IFNJTVBMRV9RVUVVRV9UQUc7CiAjZW5kaWYKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5zbXBfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5oIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5oCmluZGV4IDZhN2JlZjIuLjBlNGU0NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguaAorKysgYi9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmgKQEAgLTU2LDggKzU2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCiAvKgotKioJSWYgeW91IHdhbnQgYSBkcml2ZXIgYXMgc21hbGwgYXMgcG9zc2libGUsIGRvIG5vdCBkZWZpbmUgdGhlIAorKioJSWYgeW91IHdhbnQgYSBkcml2ZXIgYXMgc21hbGwgYXMgcG9zc2libGUsIGRvbm5vdCBkZWZpbmUgdGhlIAogKioJZm9sbG93aW5nIG9wdGlvbnMuCiAqLwogI2RlZmluZSBTQ1NJX05DUl9CT09UX0NPTU1BTkRfTElORV9TVVBQT1JUCkBAIC0xMjU1LDM5ICsxMjU3LDYgQEAKICovCiAKIC8qCi0qKglNZXNzYWdlcwotKi8KLQotI2RlZmluZQlNX0NPTVBMRVRFCUNPTU1BTkRfQ09NUExFVEUKLSNkZWZpbmUJTV9FWFRFTkRFRAlFWFRFTkRFRF9NRVNTQUdFCi0jZGVmaW5lCU1fU0FWRV9EUAlTQVZFX1BPSU5URVJTCi0jZGVmaW5lCU1fUkVTVE9SRV9EUAlSRVNUT1JFX1BPSU5URVJTCi0jZGVmaW5lCU1fRElTQ09OTkVDVAlESVNDT05ORUNUCi0jZGVmaW5lCU1fSURfRVJST1IJSU5JVElBVE9SX0VSUk9SCi0jZGVmaW5lCU1fQUJPUlQJCUFCT1JUX1RBU0tfU0VUCi0jZGVmaW5lCU1fUkVKRUNUCU1FU1NBR0VfUkVKRUNUCi0jZGVmaW5lCU1fTk9PUAkJTk9QCi0jZGVmaW5lCU1fUEFSSVRZCU1TR19QQVJJVFlfRVJST1IKLSNkZWZpbmUJTV9MQ09NUExFVEUJTElOS0VEX0NNRF9DT01QTEVURQotI2RlZmluZQlNX0ZDT01QTEVURQlMSU5LRURfRkxHX0NNRF9DT01QTEVURQotI2RlZmluZQlNX1JFU0VUCQlUQVJHRVRfUkVTRVQKLSNkZWZpbmUJTV9BQk9SVF9UQUcJQUJPUlRfVEFTSwotI2RlZmluZQlNX0NMRUFSX1FVRVVFCUNMRUFSX1RBU0tfU0VUCi0jZGVmaW5lCU1fSU5JVF9SRUMJSU5JVElBVEVfUkVDT1ZFUlkKLSNkZWZpbmUJTV9SRUxfUkVDCVJFTEVBU0VfUkVDT1ZFUlkKLSNkZWZpbmUJTV9URVJNSU5BVEUJKDB4MTEpCi0jZGVmaW5lCU1fU0lNUExFX1RBRwlTSU1QTEVfUVVFVUVfVEFHCi0jZGVmaW5lCU1fSEVBRF9UQUcJSEVBRF9PRl9RVUVVRV9UQUcKLSNkZWZpbmUJTV9PUkRFUkVEX1RBRwlPUkRFUkVEX1FVRVVFX1RBRwotI2RlZmluZQlNX0lHTl9SRVNJRFVFCUlHTk9SRV9XSURFX1JFU0lEVUUKLSNkZWZpbmUJTV9JREVOVElGWSAgIAkoMHg4MCkKLQotI2RlZmluZQlNX1hfTU9ESUZZX0RQCUVYVEVOREVEX01PRElGWV9EQVRBX1BPSU5URVIKLSNkZWZpbmUJTV9YX1NZTkNfUkVRCUVYVEVOREVEX1NEVFIKLSNkZWZpbmUJTV9YX1dJREVfUkVRCUVYVEVOREVEX1dEVFIKLSNkZWZpbmUJTV9YX1BQUl9SRVEJRVhURU5ERURfUFBSCi0KLS8qCiAqKglTdGF0dXMKICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc3N0LmMgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCmluZGV4IGQ5OTQ2YmQuLjY2ZWE0N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtMTMsNyArMTMsNyBAQAogICBvcmRlcikgS2xhdXMgRWhyZW5mcmllZCwgV29sZmdhbmcgRGVuaywgU3RldmUgSGlyc2NoLCBBbmRyZWFzIEtvcHBlbmgib2ZlciwKICAgTWljaGFlbCBMZW9kb2x0ZXIsIEV5YWwgTGViZWRpbnNreSwgSiJvcmcgV2V1bGUsIGFuZCBFcmljIFlvdW5nZGFsZS4KIAotICBDb3B5cmlnaHQgMTk5MiAtIDIwMDIgS2FpIE1ha2lzYXJhIC8gMjAwMCAtIDIwMDQgV2lsbGVtIFJpZWRlCisgIENvcHlyaWdodCAxOTkyIC0gMjAwMiBLYWkgTWFraXNhcmEgLyAyMDAwIC0gMjAwNiBXaWxsZW0gUmllZGUKIAkgZW1haWwgb3NzdEByaWVkZS5vcmcKIAogICAkSGVhZGVyOiAvY3Zzcm9vdC9vc3N0L0RyaXZlci9vc3N0LmMsdiAxLjczIDIwMDUvMDEvMDEgMjE6MTM6MzQgd3JpZWRlIEV4cCAkCkBAIC0yNCw3ICsyNCw3IEBACiAqLwogCiBzdGF0aWMgY29uc3QgY2hhciAqIGN2c2lkID0gIiRJZDogb3NzdC5jLHYgMS43MyAyMDA1LzAxLzAxIDIxOjEzOjM0IHdyaWVkZSBFeHAgJCI7Ci1zdGF0aWMgY29uc3QgY2hhciAqIG9zc3RfdmVyc2lvbiA9ICIwLjk5LjMiOworc3RhdGljIGNvbnN0IGNoYXIgKiBvc3N0X3ZlcnNpb24gPSAiMC45OS40IjsKIAogLyogVGhlICJmYWlsdXJlIHRvIHJlY29ubmVjdCIgZmlybXdhcmUgYnVnICovCiAjZGVmaW5lIE9TU1RfRldfTkVFRF9QT0xMX01JTiAxMDYwMSAvKigxMDdBKSovCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KQEAgLTcwLDcgKzY5LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9pb2N0bC5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9yZXF1ZXN0Lmg+CiAKICNkZWZpbmUgU1RfS0lMT0JZVEUgMTAyNAogCkBAIC04Nyw2ICs4NSw3IEBACiBNT0RVTEVfQVVUSE9SKCJXaWxsZW0gUmllZGUiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiT25TdHJlYW0ge0RJLXxGVy18U0MtfFVTQn17MzB8NTB9IFRhcGUgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihPU1NUX01BSk9SKTsKIAogbW9kdWxlX3BhcmFtKG1heF9kZXYsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9kZXYsICJNYXhpbXVtIG51bWJlciBvZiBPblN0cmVhbSBUYXBlIERyaXZlcyB0byBhdHRhY2ggKDQpIik7CkBAIC0xMDcsOCArMTA2LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIGNoYXIgKm9zc3RfZm9ybWF0c1tTVF9OQlJfTU9ERVNdID17IiIsICJsIiwgIm0iLCAiYSJ9OwotCiAvKiBTb21lIGRlZmF1bHQgZGVmaW5pdGlvbnMgaGF2ZSBiZWVuIG1vdmVkIHRvIG9zc3Rfb3B0aW9ucy5oICovCiAjZGVmaW5lIE9TU1RfQlVGRkVSX1NJWkUgKE9TU1RfQlVGRkVSX0JMT0NLUyAqIFNUX0tJTE9CWVRFKQogI2RlZmluZSBPU1NUX1dSSVRFX1RIUkVTSE9MRCAoT1NTVF9XUklURV9USFJFU0hPTERfQkxPQ0tTICogU1RfS0lMT0JZVEUpCkBAIC0xNzksMTYgKzE3NiwxNiBAQAogCX0KIH07CiAKLXN0YXRpYyBpbnQgb3NzdF9pbnRfaW9jdGwoc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwKK3N0YXRpYyBpbnQgb3NzdF9pbnRfaW9jdGwoc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgY21kX2luLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLXN0YXRpYyBpbnQgb3NzdF9zZXRfZnJhbWVfcG9zaXRpb24oc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IGZyYW1lLCBpbnQgc2tpcCk7CitzdGF0aWMgaW50IG9zc3Rfc2V0X2ZyYW1lX3Bvc2l0aW9uKHN0cnVjdCBvc3N0X3RhcGUgKlNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBmcmFtZSwgaW50IHNraXApOwogCi1zdGF0aWMgaW50IG9zc3RfZ2V0X2ZyYW1lX3Bvc2l0aW9uKHN0cnVjdCBvc3N0X3RhcGUgKlNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQpOworc3RhdGljIGludCBvc3N0X2dldF9mcmFtZV9wb3NpdGlvbihzdHJ1Y3Qgb3NzdF90YXBlICpTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50KTsKIAotc3RhdGljIGludCBvc3N0X2ZsdXNoX3dyaXRlX2J1ZmZlcihzdHJ1Y3Qgb3NzdF90YXBlICpTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50KTsKK3N0YXRpYyBpbnQgb3NzdF9mbHVzaF93cml0ZV9idWZmZXIoc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCk7CiAKLXN0YXRpYyBpbnQgb3NzdF93cml0ZV9lcnJvcl9yZWNvdmVyeShzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IHBlbmRpbmcpOworc3RhdGljIGludCBvc3N0X3dyaXRlX2Vycm9yX3JlY292ZXJ5KHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LCBpbnQgcGVuZGluZyk7CiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqdGFwZV9uYW1lKHN0cnVjdCBvc3N0X3RhcGUgKnRhcGUpCiB7CkBAIC0xOTcsNTIgKzE5NCw4NCBAQAogDAogLyogUm91dGluZXMgdGhhdCBoYW5kbGUgdGhlIGludGVyYWN0aW9uIHdpdGggbWlkLWxheWVyIFNDU0kgcm91dGluZXMgKi8KIAorCisvKiBOb3JtYWxpemUgU2Vuc2UgKi8KK3N0YXRpYyB2b2lkIG9zc3RfYW5hbHl6ZV9zZW5zZShzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICpTUnBudCwgc3RydWN0IHN0X2NtZHN0YXR1cyAqcykKK3sKKwljb25zdCB1OCAqdWNwOworCWNvbnN0IHU4ICpzZW5zZSA9IFNScG50LT5zZW5zZTsKKworCXMtPmhhdmVfc2Vuc2UgPSBzY3NpX25vcm1hbGl6ZV9zZW5zZShTUnBudC0+c2Vuc2UsCisJCQkJU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCAmcy0+c2Vuc2VfaGRyKTsKKwlzLT5mbGFncyA9IDA7CisKKwlpZiAocy0+aGF2ZV9zZW5zZSkgeworCQlzLT5kZWZlcnJlZCA9IDA7CisJCXMtPnJlbWFpbmRlcl92YWxpZCA9CisJCQlzY3NpX2dldF9zZW5zZV9pbmZvX2ZsZChzZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCAmcy0+dXJlbWFpbmRlcjY0KTsKKwkJc3dpdGNoIChzZW5zZVswXSAmIDB4N2YpIHsKKwkJY2FzZSAweDcxOgorCQkJcy0+ZGVmZXJyZWQgPSAxOworCQljYXNlIDB4NzA6CisJCQlzLT5maXhlZF9mb3JtYXQgPSAxOworCQkJcy0+ZmxhZ3MgPSBzZW5zZVsyXSAmIDB4ZTA7CisJCQlicmVhazsKKwkJY2FzZSAweDczOgorCQkJcy0+ZGVmZXJyZWQgPSAxOworCQljYXNlIDB4NzI6CisJCQlzLT5maXhlZF9mb3JtYXQgPSAwOworCQkJdWNwID0gc2NzaV9zZW5zZV9kZXNjX2ZpbmQoc2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgNCk7CisJCQlzLT5mbGFncyA9IHVjcCA/ICh1Y3BbM10gJiAweGUwKSA6IDA7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwogLyogQ29udmVydCB0aGUgcmVzdWx0IHRvIHN1Y2Nlc3MgY29kZSAqLwotc3RhdGljIGludCBvc3N0X2Noa19yZXN1bHQoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqIFNScG50KQorc3RhdGljIGludCBvc3N0X2Noa19yZXN1bHQoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqIFNScG50KQogewogCWNoYXIgKm5hbWUgPSB0YXBlX25hbWUoU1RwKTsKLQlpbnQgcmVzdWx0ID0gU1JwbnQtPnNyX3Jlc3VsdDsKLQl1bnNpZ25lZCBjaGFyICogc2Vuc2UgPSBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyLCBzY29kZTsKKwlpbnQgcmVzdWx0ID0gU1JwbnQtPnJlc3VsdDsKKwl1OCAqIHNlbnNlID0gU1JwbnQtPnNlbnNlLCBzY29kZTsKICNpZiBERUJVRwogCWNvbnN0IGNoYXIgKnN0cDsKICNlbmRpZgorCXN0cnVjdCBzdF9jbWRzdGF0dXMgKmNtZHN0YXRwOwogCi0JaWYgKCFyZXN1bHQpIHsKLQkJc2Vuc2VbMF0gPSAwOyAgICAvKiBXZSBkb24ndCBoYXZlIHNlbnNlIGRhdGEgaWYgdGhpcyBieXRlIGlzIHplcm8gKi8KKwlpZiAoIXJlc3VsdCkKIAkJcmV0dXJuIDA7Ci0JfQotCWlmICgoZHJpdmVyX2J5dGUocmVzdWx0KSAmIERSSVZFUl9NQVNLKSA9PSBEUklWRVJfU0VOU0UpCi0JCXNjb2RlID0gc2Vuc2VbMl0gJiAweDBmOwotCWVsc2UgewotCQlzZW5zZVswXSA9IDA7ICAgIC8qIFdlIGRvbid0IGhhdmUgc2Vuc2UgZGF0YSBpZiB0aGlzIGJ5dGUgaXMgemVybyAqLworCisJY21kc3RhdHAgPSAmU1RwLT5idWZmZXItPmNtZHN0YXQ7CisJb3NzdF9hbmFseXplX3NlbnNlKFNScG50LCBjbWRzdGF0cCk7CisKKwlpZiAoY21kc3RhdHAtPmhhdmVfc2Vuc2UpCisJCXNjb2RlID0gU1RwLT5idWZmZXItPmNtZHN0YXQuc2Vuc2VfaGRyLnNlbnNlX2tleTsKKwllbHNlCiAJCXNjb2RlID0gMDsKLQl9CiAjaWYgREVCVUcKIAlpZiAoZGVidWdnaW5nKSB7Ci0JCXByaW50ayhPU1NUX0RFQl9NU0cgIiVzOkQ6IEVycm9yOiAleCwgY21kOiAleCAleCAleCAleCAleCAleCBMZW46ICVkXG4iLAorCQlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBFcnJvcjogJXgsIGNtZDogJXggJXggJXggJXggJXggJXhcbiIsCiAJCSAgIG5hbWUsIHJlc3VsdCwKLQkJICAgU1JwbnQtPnNyX2NtbmRbMF0sIFNScG50LT5zcl9jbW5kWzFdLCBTUnBudC0+c3JfY21uZFsyXSwKLQkJICAgU1JwbnQtPnNyX2NtbmRbM10sIFNScG50LT5zcl9jbW5kWzRdLCBTUnBudC0+c3JfY21uZFs1XSwKLQkJICAgU1JwbnQtPnNyX2J1ZmZsZW4pOworCQkgICBTUnBudC0+Y21kWzBdLCBTUnBudC0+Y21kWzFdLCBTUnBudC0+Y21kWzJdLAorCQkgICBTUnBudC0+Y21kWzNdLCBTUnBudC0+Y21kWzRdLCBTUnBudC0+Y21kWzVdKTsKIAkJaWYgKHNjb2RlKSBwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBTZW5zZTogJTAyeCwgQVNDOiAlMDJ4LCBBU0NROiAlMDJ4XG4iLAogCQkJICAgICAgIAluYW1lLCBzY29kZSwgc2Vuc2VbMTJdLCBzZW5zZVsxM10pOwotCQlpZiAoZHJpdmVyX2J5dGUocmVzdWx0KSAmIERSSVZFUl9TRU5TRSkKLQkJCXNjc2lfcHJpbnRfcmVxX3NlbnNlKCJvc3N0ICIsIFNScG50KTsKKwkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKQorCQkJX19zY3NpX3ByaW50X3NlbnNlKCJvc3N0ICIsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKIAl9CiAJZWxzZQogI2VuZGlmCi0JaWYgKCEoZHJpdmVyX2J5dGUocmVzdWx0KSAmIERSSVZFUl9TRU5TRSkgfHwKLQkJKChzZW5zZVswXSAmIDB4NzApID09IDB4NzAgJiYKKwlpZiAoY21kc3RhdHAtPmhhdmVfc2Vuc2UgJiYgKAogCQkgc2NvZGUgIT0gTk9fU0VOU0UgJiYKIAkJIHNjb2RlICE9IFJFQ09WRVJFRF9FUlJPUiAmJgogLyogICAgICAJIHNjb2RlICE9IFVOSVRfQVRURU5USU9OICYmICovCiAJCSBzY29kZSAhPSBCTEFOS19DSEVDSyAmJgogCQkgc2NvZGUgIT0gVk9MVU1FX09WRVJGTE9XICYmCi0JCSBTUnBudC0+c3JfY21uZFswXSAhPSBNT0RFX1NFTlNFICYmCi0JCSBTUnBudC0+c3JfY21uZFswXSAhPSBURVNUX1VOSVRfUkVBRFkpKSB7IC8qIEFibm9ybWFsIGNvbmRpdGlvbnMgZm9yIHRhcGUgKi8KLQkJaWYgKGRyaXZlcl9ieXRlKHJlc3VsdCkgJiBEUklWRVJfU0VOU0UpIHsKKwkJIFNScG50LT5jbWRbMF0gIT0gTU9ERV9TRU5TRSAmJgorCQkgU1JwbnQtPmNtZFswXSAhPSBURVNUX1VOSVRfUkVBRFkpKSB7IC8qIEFibm9ybWFsIGNvbmRpdGlvbnMgZm9yIHRhcGUgKi8KKwkJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczpXOiBDb21tYW5kIHdpdGggc2Vuc2UgZGF0YTpcbiIsIG5hbWUpOwotCQkJc2NzaV9wcmludF9yZXFfc2Vuc2UoIm9zc3Q6IiwgU1JwbnQpOworCQkJX19zY3NpX3ByaW50X3NlbnNlKCJvc3N0ICIsIFNScG50LT5zZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKIAkJfQogCQllbHNlIHsKIAkJCXN0YXRpYwlpbnQJbm90eWV0cHJpbnRlZCA9IDE7CkBAIC0yNjIsMTUgKzI5MSwxNCBAQAogCX0KIAlTVHAtPnBvc191bmtub3duIHw9IFNUcC0+ZGV2aWNlLT53YXNfcmVzZXQ7CiAKLQlpZiAoKHNlbnNlWzBdICYgMHg3MCkgPT0gMHg3MCAmJgotCSAgICAgc2NvZGUgPT0gUkVDT1ZFUkVEX0VSUk9SKSB7CisJaWYgKGNtZHN0YXRwLT5oYXZlX3NlbnNlICYmIHNjb2RlID09IFJFQ09WRVJFRF9FUlJPUikgewogCQlTVHAtPnJlY292ZXJfY291bnQrKzsKIAkJU1RwLT5yZWNvdmVyX2VycmVnKys7CiAjaWYgREVCVUcKIAkJaWYgKGRlYnVnZ2luZykgewotCQkJaWYgKFNScG50LT5zcl9jbW5kWzBdID09IFJFQURfNikKKwkJCWlmIChTUnBudC0+Y21kWzBdID09IFJFQURfNikKIAkJCQlzdHAgPSAicmVhZCI7Ci0JCQllbHNlIGlmIChTUnBudC0+c3JfY21uZFswXSA9PSBXUklURV82KQorCQkJZWxzZSBpZiAoU1JwbnQtPmNtZFswXSA9PSBXUklURV82KQogCQkJCXN0cCA9ICJ3cml0ZSI7CiAJCQllbHNlCiAJCQkJc3RwID0gImlvY3RsIjsKQEAgLTI4Niw3NCArMzE0LDk5IEBACiAKIAogLyogV2FrZXVwIGZyb20gaW50ZXJydXB0ICovCi1zdGF0aWMgdm9pZCBvc3N0X3NsZWVwX2RvbmUgKHN0cnVjdCBzY3NpX2NtbmQgKiBTQ3BudCkKK3N0YXRpYyB2b2lkIG9zc3Rfc2xlZXBfZG9uZSh2b2lkICpkYXRhLCBjaGFyICpzZW5zZSwgaW50IHJlc3VsdCwgaW50IHJlc2lkKQogewotCXN0cnVjdCBvc3N0X3RhcGUgKiBTVHAgPSBjb250YWluZXJfb2YoU0NwbnQtPnJlcXVlc3QtPnJxX2Rpc2stPnByaXZhdGVfZGF0YSwgc3RydWN0IG9zc3RfdGFwZSwgZHJpdmVyKTsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICpTUnBudCA9IGRhdGE7CisJc3RydWN0IG9zc3RfdGFwZSAqU1RwID0gU1JwbnQtPnN0cDsKIAotCWlmICgoU1RwLT5idWZmZXIpLT53cml0aW5nICYmCi0JICAgIChTQ3BudC0+c2Vuc2VfYnVmZmVyWzBdICYgMHg3MCkgPT0gMHg3MCAmJgotCSAgICAoU0NwbnQtPnNlbnNlX2J1ZmZlclsyXSAmIDB4NDApKSB7Ci0JCS8qIEVPTSBhdCB3cml0ZS1iZWhpbmQsIGhhcyBhbGwgYmVlbiB3cml0dGVuPyAqLwotCQlpZiAoKFNDcG50LT5zZW5zZV9idWZmZXJbMl0gJiAweDBmKSA9PSBWT0xVTUVfT1ZFUkZMT1cpCi0JCQlTVHAtPmJ1ZmZlci0+bWlkbGV2ZWxfcmVzdWx0ID0gU0NwbnQtPnJlc3VsdDsgLyogRXJyb3IgKi8KLQkJZWxzZQotCQkJU1RwLT5idWZmZXItPm1pZGxldmVsX3Jlc3VsdCA9IElOVF9NQVg7ICAgICAgIC8qIE9LICovCi0JfQotCWVsc2UKLQkJU1RwLT5idWZmZXItPm1pZGxldmVsX3Jlc3VsdCA9IFNDcG50LT5yZXN1bHQ7Ci0JU0NwbnQtPnJlcXVlc3QtPnJxX3N0YXR1cyA9IFJRX1NDU0lfRE9ORTsKLQlTVHAtPmJ1ZmZlci0+bGFzdF9TUnBudCA9IFNDcG50LT5zY19yZXF1ZXN0OwotCisJbWVtY3B5KFNScG50LT5zZW5zZSwgc2Vuc2UsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisJU1RwLT5idWZmZXItPmNtZHN0YXQubWlkbGV2ZWxfcmVzdWx0ID0gU1JwbnQtPnJlc3VsdCA9IHJlc3VsdDsKICNpZiBERUJVRwogCVNUcC0+d3JpdGVfcGVuZGluZyA9IDA7CiAjZW5kaWYKLQljb21wbGV0ZShTQ3BudC0+cmVxdWVzdC0+d2FpdGluZyk7CisJaWYgKFNScG50LT53YWl0aW5nKQorCQljb21wbGV0ZShTUnBudC0+d2FpdGluZyk7CiB9CiAKKy8qIG9zc3RfcmVxdWVzdCBtZW1vcnkgbWFuYWdlbWVudCAqLworc3RhdGljIHN0cnVjdCBvc3N0X3JlcXVlc3QgKm9zc3RfYWxsb2NhdGVfcmVxdWVzdCh2b2lkKQoreworCXJldHVybiBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3NzdF9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0YXRpYyB2b2lkIG9zc3RfcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCBvc3N0X3JlcXVlc3QgKnN0cmVxKQoreworCWtmcmVlKHN0cmVxKTsKK30KIAogLyogRG8gdGhlIHNjc2kgY29tbWFuZC4gV2FpdHMgdW50aWwgY29tbWFuZCBwZXJmb3JtZWQgaWYgZG9fd2FpdCBpcyB0cnVlLgogICAgT3RoZXJ3aXNlIG9zc3Rfd3JpdGVfYmVoaW5kX2NoZWNrKCkgaXMgdXNlZCB0byBjaGVjayB0aGF0IHRoZSBjb21tYW5kCiAgICBoYXMgZmluaXNoZWQuICovCi1zdGF0aWMJc3RydWN0IHNjc2lfcmVxdWVzdCAqIG9zc3RfZG9fc2NzaShzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpTUnBudCwgc3RydWN0IG9zc3RfdGFwZSAqU1RwLCAKK3N0YXRpYwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICogb3NzdF9kb19zY3NpKHN0cnVjdCBvc3N0X3JlcXVlc3QgKlNScG50LCBzdHJ1Y3Qgb3NzdF90YXBlICpTVHAsIAogCXVuc2lnbmVkIGNoYXIgKmNtZCwgaW50IGJ5dGVzLCBpbnQgZGlyZWN0aW9uLCBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsIGludCBkb193YWl0KQogewogCXVuc2lnbmVkIGNoYXIgKmJwOworCXVuc2lnbmVkIHNob3J0IHVzZV9zZzsKICNpZmRlZiBPU1NUX0lOSkVDVF9FUlJPUlMKIAlzdGF0aWMgICBpbnQgICBpbmplY3QgPSAwOwogCXN0YXRpYyAgIGludCAgIHJlcGVhdCA9IDA7CiAjZW5kaWYKKwlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKKworCS8qIGlmIGFzeW5jLCBtYWtlIHN1cmUgdGhlcmUncyBubyBjb21tYW5kIG91dHN0YW5kaW5nICovCisJaWYgKCFkb193YWl0ICYmICgoU1RwLT5idWZmZXIpLT5sYXN0X1NScG50KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBc3luYyBjb21tYW5kIGFscmVhZHkgYWN0aXZlLlxuIiwKKwkJICAgICAgIHRhcGVfbmFtZShTVHApKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQgPSAoLUVJTlRSKTsKKwkJZWxzZQorCQkJKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQgPSAoLUVCVVNZKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJaWYgKFNScG50ID09IE5VTEwpIHsKLQkJaWYgKChTUnBudCA9IHNjc2lfYWxsb2NhdGVfcmVxdWVzdChTVHAtPmRldmljZSwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6RTogQ2FuJ3QgZ2V0IFNDU0kgcmVxdWVzdC5cbiIsIHRhcGVfbmFtZShTVHApKTsKKwkJU1JwbnQgPSBvc3N0X2FsbG9jYXRlX3JlcXVlc3QoKTsKKwkJaWYgKFNScG50ID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbid0IGFsbG9jYXRlIFNDU0kgcmVxdWVzdC5cbiIsCisJCQkJICAgICB0YXBlX25hbWUoU1RwKSk7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQkJKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQgPSAoLUVJTlRSKTsKIAkJCWVsc2UKIAkJCQkoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdCA9ICgtRUJVU1kpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KKwkJU1JwbnQtPnN0cCA9IFNUcDsKIAl9CiAKLSAgICAgICAgaW5pdF9jb21wbGV0aW9uKCZTVHAtPndhaXQpOwotCVNScG50LT5zcl91c2Vfc2cgPSAoYnl0ZXMgPiAoU1RwLT5idWZmZXIpLT5zZ1swXS5sZW5ndGgpID8KLQkJCQkgICAgKFNUcC0+YnVmZmVyKS0+dXNlX3NnIDogMDsKLQlpZiAoU1JwbnQtPnNyX3VzZV9zZykgeworCS8qIElmIGFzeW5jIElPLCBzZXQgbGFzdF9TUnBudC4gVGhpcyBwdHIgdGVsbHMgd3JpdGVfYmVoaW5kX2NoZWNrCisJICAgd2hpY2ggSU8gaXMgb3V0c3RhbmRpbmcuIEl0J3MgbnVsbGVkIG91dCB3aGVuIHRoZSBJTyBjb21wbGV0ZXMuICovCisJaWYgKCFkb193YWl0KQorCQkoU1RwLT5idWZmZXIpLT5sYXN0X1NScG50ID0gU1JwbnQ7CisKKwl3YWl0aW5nID0gJlNUcC0+d2FpdDsKKwlpbml0X2NvbXBsZXRpb24od2FpdGluZyk7CisJU1JwbnQtPndhaXRpbmcgPSB3YWl0aW5nOworCisJdXNlX3NnID0gKGJ5dGVzID4gU1RwLT5idWZmZXItPnNnWzBdLmxlbmd0aCkgPyBTVHAtPmJ1ZmZlci0+dXNlX3NnIDogMDsKKwlpZiAodXNlX3NnKSB7CiAJCWJwID0gKGNoYXIgKikmKFNUcC0+YnVmZmVyLT5zZ1swXSk7Ci0JCWlmIChTVHAtPmJ1ZmZlci0+c2dfc2VncyA8IFNScG50LT5zcl91c2Vfc2cpCi0JCQlTUnBudC0+c3JfdXNlX3NnID0gU1RwLT5idWZmZXItPnNnX3NlZ3M7CisJCWlmIChTVHAtPmJ1ZmZlci0+c2dfc2VncyA8IHVzZV9zZykKKwkJCXVzZV9zZyA9IFNUcC0+YnVmZmVyLT5zZ19zZWdzOwogCX0KIAllbHNlCiAJCWJwID0gKFNUcC0+YnVmZmVyKS0+Yl9kYXRhOwotCVNScG50LT5zcl9kYXRhX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKLQlTUnBudC0+c3JfY21kX2xlbiA9IDA7Ci0JU1JwbnQtPnNyX3JlcXVlc3QtPndhaXRpbmcgPSAmKFNUcC0+d2FpdCk7Ci0JU1JwbnQtPnNyX3JlcXVlc3QtPnJxX3N0YXR1cyA9IFJRX1NDU0lfQlVTWTsKLQlTUnBudC0+c3JfcmVxdWVzdC0+cnFfZGlzayA9IFNUcC0+ZHJpdmU7CiAKLQlzY3NpX2RvX3JlcShTUnBudCwgKHZvaWQgKiljbWQsIGJwLCBieXRlcywgb3NzdF9zbGVlcF9kb25lLCB0aW1lb3V0LCByZXRyaWVzKTsKKwltZW1jcHkoU1JwbnQtPmNtZCwgY21kLCBzaXplb2YoU1JwbnQtPmNtZCkpOworCVNUcC0+YnVmZmVyLT5jbWRzdGF0LmhhdmVfc2Vuc2UgPSAwOworCVNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCA9IDA7CiAKLQlpZiAoZG9fd2FpdCkgewotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKFNScG50LT5zcl9yZXF1ZXN0LT53YWl0aW5nKTsKLQkJU1JwbnQtPnNyX3JlcXVlc3QtPndhaXRpbmcgPSBOVUxMOworCWlmIChzY3NpX2V4ZWN1dGVfYXN5bmMoU1RwLT5kZXZpY2UsIGNtZCwgQ09NTUFORF9TSVpFKGNtZFswXSksIGRpcmVjdGlvbiwgYnAsIGJ5dGVzLAorCQkJdXNlX3NnLCB0aW1lb3V0LCByZXRyaWVzLCBTUnBudCwgb3NzdF9zbGVlcF9kb25lLCBHRlBfS0VSTkVMKSkKKwkJLyogY291bGQgbm90IGFsbG9jYXRlIHRoZSBidWZmZXIgb3IgcmVxdWVzdCB3YXMgdG9vIGxhcmdlICovCisJCShTVHAtPmJ1ZmZlciktPnN5c2NhbGxfcmVzdWx0ID0gKC1FQlVTWSk7CisJZWxzZSBpZiAoZG9fd2FpdCkgeworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKHdhaXRpbmcpOworCQlTUnBudC0+d2FpdGluZyA9IE5VTEw7CiAJCVNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCA9IG9zc3RfY2hrX3Jlc3VsdChTVHAsIFNScG50KTsKICNpZmRlZiBPU1NUX0lOSkVDVF9FUlJPUlMKIAkJaWYgKFNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCA9PSAwICYmCkBAIC0zODYsMjEgKzQzOSwyMiBAQAogCQlTVHAtPm5icl9maW5pc2hlZCsrOwogI2VuZGlmCiAJd2FpdF9mb3JfY29tcGxldGlvbigmKFNUcC0+d2FpdCkpOwotCShTVHAtPmJ1ZmZlciktPmxhc3RfU1JwbnQtPnNyX3JlcXVlc3QtPndhaXRpbmcgPSBOVUxMOworCVNUcC0+YnVmZmVyLT5sYXN0X1NScG50LT53YWl0aW5nID0gTlVMTDsKIAogCVNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCA9IG9zc3RfY2hrX3Jlc3VsdChTVHAsIFNUcC0+YnVmZmVyLT5sYXN0X1NScG50KTsKIAotCWlmICgoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdCkKLQkJKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQgPQotCQkJb3NzdF93cml0ZV9lcnJvcl9yZWNvdmVyeShTVHAsICYoKFNUcC0+YnVmZmVyKS0+bGFzdF9TUnBudCksIDEpOworCWlmIChTVHAtPmJ1ZmZlci0+c3lzY2FsbF9yZXN1bHQpCisJCVNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCA9CisJCQlvc3N0X3dyaXRlX2Vycm9yX3JlY292ZXJ5KFNUcCwgJihTVHAtPmJ1ZmZlci0+bGFzdF9TUnBudCksIDEpOwogCWVsc2UKIAkJU1RwLT5maXJzdF9mcmFtZV9wb3NpdGlvbisrOwogCi0Jc2NzaV9yZWxlYXNlX3JlcXVlc3QoKFNUcC0+YnVmZmVyKS0+bGFzdF9TUnBudCk7CisJb3NzdF9yZWxlYXNlX3JlcXVlc3QoU1RwLT5idWZmZXItPmxhc3RfU1JwbnQpOwogCiAJaWYgKFNUYnVmZmVyLT53cml0aW5nIDwgU1RidWZmZXItPmJ1ZmZlcl9ieXRlcykKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAib3NzdCA6QTogd3JpdGVfYmVoaW5kX2NoZWNrOiBzb21ldGhpbmcgbGVmdCBpbiBidWZmZXIhXG4iKTsKIAorCVNUYnVmZmVyLT5sYXN0X1NScG50ID0gTlVMTDsKIAlTVGJ1ZmZlci0+YnVmZmVyX2J5dGVzIC09IFNUYnVmZmVyLT53cml0aW5nOwogCVNUYnVmZmVyLT53cml0aW5nID0gMDsKIApAQCAtNjA5LDExICs2NjMsMTEgQEAKIC8qCiAgKiBXYWl0IGZvciB0aGUgdW5pdCB0byBiZWNvbWUgUmVhZHkKICAqLwotc3RhdGljIGludCBvc3N0X3dhaXRfcmVhZHkoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsCitzdGF0aWMgaW50IG9zc3Rfd2FpdF9yZWFkeShzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwKIAkJCQkgdW5zaWduZWQgdGltZW91dCwgaW50IGluaXRpYWxfZGVsYXkpCiB7CiAJdW5zaWduZWQgY2hhcgkJY21kW01BWF9DT01NQU5EX1NJWkVdOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgICAqIFNScG50OworCXN0cnVjdCBvc3N0X3JlcXVlc3QgICAqIFNScG50OwogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0d2FpdCA9IGppZmZpZXM7CiAjaWYgREVCVUcKIAlpbnQJCQlkYmcgID0gZGVidWdnaW5nOwpAQCAtNjMzLDEwICs2ODcsMTAgQEAKIAlpZiAoIVNScG50KSByZXR1cm4gKC1FQlVTWSk7CiAKIAl3aGlsZSAoIFNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBzdGFydHdhaXQgKyB0aW1lb3V0KkhaKSAmJgotCSAgICAgICAoKCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICA9PSAyICYmIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTJdID09IDQgICAgJiYKLQkJIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEzXSA9PSAxIHx8IFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTNdID09IDgpICAgICkgfHwKLQkJKCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICA9PSA2ICYmIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTJdID09IDB4MjggJiYKLQkJICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEzXSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICkpIHsKKwkgICAgICAgKCggU1JwbnQtPnNlbnNlWzJdICA9PSAyICYmIFNScG50LT5zZW5zZVsxMl0gPT0gNCAgICAmJgorCQkgKFNScG50LT5zZW5zZVsxM10gPT0gMSB8fCBTUnBudC0+c2Vuc2VbMTNdID09IDgpICAgICkgfHwKKwkJKCBTUnBudC0+c2Vuc2VbMl0gID09IDYgJiYgU1JwbnQtPnNlbnNlWzEyXSA9PSAweDI4ICYmCisJCSAgU1JwbnQtPnNlbnNlWzEzXSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICkpIHsKICNpZiBERUJVRwogCSAgICBpZiAoZGVidWdnaW5nKSB7CiAJCXByaW50ayhPU1NUX0RFQl9NU0cgIiVzOkQ6IFNsZWVwaW5nIGluIG9uc3RyZWFtIHdhaXQgcmVhZHlcbiIsIG5hbWUpOwpAQCAtNjYwLDggKzcxNCw4IEBACiAjaWYgREVCVUcKIAkgICAgcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogQWJub3JtYWwgZXhpdCBmcm9tIG9uc3RyZWFtIHdhaXQgcmVhZHlcbiIsIG5hbWUpOwogCSAgICBwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBSZXN1bHQgPSAlZCwgU2Vuc2U6IDA9JTAyeCwgMj0lMDJ4LCAxMj0lMDJ4LCAxMz0lMDJ4XG4iLCBuYW1lLAotCQkJU1RwLT5idWZmZXItPnN5c2NhbGxfcmVzdWx0LCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzBdLCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdLAotCQkJU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxMl0sIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTNdKTsKKwkJCVNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCwgU1JwbnQtPnNlbnNlWzBdLCBTUnBudC0+c2Vuc2VbMl0sCisJCQlTUnBudC0+c2Vuc2VbMTJdLCBTUnBudC0+c2Vuc2VbMTNdKTsKICNlbmRpZgogCSAgICByZXR1cm4gKC1FSU8pOwogCX0KQEAgLTY3NCwxMCArNzI4LDEwIEBACiAvKgogICogV2FpdCBmb3IgYSB0YXBlIHRvIGJlIGluc2VydGVkIGluIHRoZSB1bml0CiAgKi8KLXN0YXRpYyBpbnQgb3NzdF93YWl0X2Zvcl9tZWRpdW0oc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIHVuc2lnbmVkIHRpbWVvdXQpCitzdGF0aWMgaW50IG9zc3Rfd2FpdF9mb3JfbWVkaXVtKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LCB1bnNpZ25lZCB0aW1lb3V0KQogewogCXVuc2lnbmVkIGNoYXIJCWNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICAgKiBTUnBudDsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICAgKiBTUnBudDsKIAl1bnNpZ25lZCBsb25nCQlzdGFydHdhaXQgPSBqaWZmaWVzOwogI2lmIERFQlVHCiAJaW50CQkJZGJnID0gZGVidWdnaW5nOwpAQCAtNjk0LDggKzc0OCw3IEBACiAJaWYgKCFTUnBudCkgcmV0dXJuICgtRUJVU1kpOwogCiAJd2hpbGUgKCBTVHAtPmJ1ZmZlci0+c3lzY2FsbF9yZXN1bHQgJiYgdGltZV9iZWZvcmUoamlmZmllcywgc3RhcnR3YWl0ICsgdGltZW91dCpIWikgJiYKLQkJU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsyXSAgPT0gMiAmJiBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEyXSA9PSAweDNhICAgICAgICYmCi0JICAgICAgICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEzXSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7CisJCVNScG50LT5zZW5zZVsyXSA9PSAyICYmIFNScG50LT5zZW5zZVsxMl0gPT0gMHgzYSAmJiBTUnBudC0+c2Vuc2VbMTNdID09IDAgICkgewogI2lmIERFQlVHCiAJICAgIGlmIChkZWJ1Z2dpbmcpIHsKIAkJcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogU2xlZXBpbmcgaW4gb25zdHJlYW0gd2FpdCBtZWRpdW1cbiIsIG5hbWUpOwpAQCAtNzE0LDEzICs3NjcsMTMgQEAKICNpZiBERUJVRwogCWRlYnVnZ2luZyA9IGRiZzsKICNlbmRpZgotCWlmICggU1RwLT5idWZmZXItPnN5c2NhbGxfcmVzdWx0ICAgICAmJiBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICAhPSAyICYmCi0JICAgICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEyXSAhPSA0ICYmIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTNdID09IDEpIHsKKwlpZiAoIFNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCAgICAgJiYgU1JwbnQtPnNlbnNlWzJdICAhPSAyICYmCisJICAgICBTUnBudC0+c2Vuc2VbMTJdICE9IDQgJiYgU1JwbnQtPnNlbnNlWzEzXSA9PSAxKSB7CiAjaWYgREVCVUcKIAkgICAgcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogQWJub3JtYWwgZXhpdCBmcm9tIG9uc3RyZWFtIHdhaXQgbWVkaXVtXG4iLCBuYW1lKTsKIAkgICAgcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogUmVzdWx0ID0gJWQsIFNlbnNlOiAwPSUwMngsIDI9JTAyeCwgMTI9JTAyeCwgMTM9JTAyeFxuIiwgbmFtZSwKLQkJCVNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCwgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclswXSwgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsyXSwKLQkJCVNScG50LT5zcl9zZW5zZV9idWZmZXJbMTJdLCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEzXSk7CisJCQlTVHAtPmJ1ZmZlci0+c3lzY2FsbF9yZXN1bHQsIFNScG50LT5zZW5zZVswXSwgU1JwbnQtPnNlbnNlWzJdLAorCQkJU1JwbnQtPnNlbnNlWzEyXSwgU1JwbnQtPnNlbnNlWzEzXSk7CiAjZW5kaWYKIAkgICAgcmV0dXJuIDA7CiAJfQpAQCAtNzMwLDcgKzc4Myw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgb3NzdF9wb3NpdGlvbl90YXBlX2FuZF9jb25maXJtKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50LCBpbnQgZnJhbWUpCitzdGF0aWMgaW50IG9zc3RfcG9zaXRpb25fdGFwZV9hbmRfY29uZmlybShzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IGZyYW1lKQogewogCWludAlyZXR2YWw7CiAKQEAgLTc0NCwxMCArNzk3LDEwIEBACiAvKgogICogV2FpdCBmb3Igd3JpdGUocykgdG8gY29tcGxldGUKICAqLwotc3RhdGljIGludCBvc3N0X2ZsdXNoX2RyaXZlX2J1ZmZlcihzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCkKK3N0YXRpYyBpbnQgb3NzdF9mbHVzaF9kcml2ZV9idWZmZXIoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQpCiB7CiAJdW5zaWduZWQgY2hhcgkJY21kW01BWF9DT01NQU5EX1NJWkVdOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgICAqIFNScG50OworCXN0cnVjdCBvc3N0X3JlcXVlc3QgICAqIFNScG50OwogCWludAkJCXJlc3VsdCA9IDA7CiAJaW50CQkJZGVsYXkgID0gT1NTVF9XQUlUX1dSSVRFX0NPTVBMRVRFOwogI2lmIERFQlVHCkBAIC03NjQsOCArODE3LDggQEAKIAkqYVNScG50ID0gU1JwbnQ7CiAJaWYgKCFTUnBudCkgcmV0dXJuICgtRUJVU1kpOwogCWlmIChTVHAtPmJ1ZmZlci0+c3lzY2FsbF9yZXN1bHQpIHsKLQkJaWYgKChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICYgMHgwZikgPT0gMiAmJiBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEyXSA9PSA0KSB7Ci0JCQlpZiAoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxM10gPT0gOCkgeworCQlpZiAoKFNScG50LT5zZW5zZVsyXSAmIDB4MGYpID09IDIgJiYgU1JwbnQtPnNlbnNlWzEyXSA9PSA0KSB7CisJCQlpZiAoU1JwbnQtPnNlbnNlWzEzXSA9PSA4KSB7CiAJCQkJZGVsYXkgPSBPU1NUX1dBSVRfTE9OR19XUklURV9DT01QTEVURTsKIAkJCX0KIAkJfSBlbHNlCkBAIC03NzgsNyArODMxLDcgQEAKIH0KIAogI2RlZmluZSBPU1NUX1BPTExfUEVSX1NFQyAxMAotc3RhdGljIGludCBvc3N0X3dhaXRfZnJhbWUoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBjdXJyLCBpbnQgbWlubGFzdCwgaW50IHRvKQorc3RhdGljIGludCBvc3N0X3dhaXRfZnJhbWUoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBjdXJyLCBpbnQgbWlubGFzdCwgaW50IHRvKQogewogCXVuc2lnbmVkIGxvbmcJc3RhcnR3YWl0ID0gamlmZmllczsKIAljaGFyCSAgICAgICogbmFtZSAgICAgID0gdGFwZV9uYW1lKFNUcCk7CkBAIC04MzMsOSArODg2LDkgQEAKIAlyZXR1cm4gLUVCVVNZOwogfQogCi1zdGF0aWMgaW50IG9zc3RfcmVjb3Zlcl93YWl0X2ZyYW1lKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50LCBpbnQgd3JpdGluZykKK3N0YXRpYyBpbnQgb3NzdF9yZWNvdmVyX3dhaXRfZnJhbWUoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQsIGludCB3cml0aW5nKQogewotCXN0cnVjdCBzY3NpX3JlcXVlc3QgICAqIFNScG50OworCXN0cnVjdCBvc3N0X3JlcXVlc3QgICAqIFNScG50OwogCXVuc2lnbmVkIGNoYXIJCWNtZFtNQVhfQ09NTUFORF9TSVpFXTsKIAl1bnNpZ25lZCBsb25nICAgCXN0YXJ0d2FpdCA9IGppZmZpZXM7CiAJaW50CQkJcmV0dmFsICAgID0gMTsKQEAgLTg1Niw3ICs5MDksNyBAQAogCiAJCXdoaWxlIChyZXR2YWwgJiYgdGltZV9iZWZvcmUgKGppZmZpZXMsIHN0YXJ0d2FpdCArIDUqNjAqSFopKSB7CiAKLQkJCWlmIChTVHAtPmJ1ZmZlci0+c3lzY2FsbF9yZXN1bHQgJiYgKFNScG50LT5zcl9zZW5zZV9idWZmZXJbMl0gJiAweDBmKSAhPSAyKSB7CisJCQlpZiAoU1RwLT5idWZmZXItPnN5c2NhbGxfcmVzdWx0ICYmIChTUnBudC0+c2Vuc2VbMl0gJiAweDBmKSAhPSAyKSB7CiAKIAkJCQkvKiBzb21lIGZhaWx1cmUgLSBub3QganVzdCBub3QtcmVhZHkgKi8KIAkJCQlyZXR2YWwgPSBvc3N0X3dyaXRlX2Vycm9yX3JlY292ZXJ5KFNUcCwgYVNScG50LCAwKTsKQEAgLTg4MSw5ICs5MzQsOSBAQAogCQlpZiAoU1RwLT5idWZmZXItPnN5c2NhbGxfcmVzdWx0KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCSIlczpXOiBSZWNvdmVyX3dhaXRfZnJhbWUocmVhZCkgY2Fubm90IGhhbmRsZSAlMDJ4OiUwMng6JTAyeFxuIiwgbmFtZSwKLQkJCQkJKCphU1JwbnQpLT5zcl9zZW5zZV9idWZmZXJbIDJdICYgMHgwZiwKLQkJCQkJKCphU1JwbnQpLT5zcl9zZW5zZV9idWZmZXJbMTJdLAotCQkJCQkoKmFTUnBudCktPnNyX3NlbnNlX2J1ZmZlclsxM10pOworCQkJCQkoKmFTUnBudCktPnNlbnNlWyAyXSAmIDB4MGYsCisJCQkJCSgqYVNScG50KS0+c2Vuc2VbMTJdLAorCQkJCQkoKmFTUnBudCktPnNlbnNlWzEzXSk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtODkxLDEwICs5NDQsMTAgQEAKIC8qCiAgKiBSZWFkIHRoZSBuZXh0IE9uU3RyZWFtIHRhcGUgZnJhbWUgYXQgdGhlIGN1cnJlbnQgbG9jYXRpb24KICAqLwotc3RhdGljIGludCBvc3N0X3JlYWRfZnJhbWUoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIGludCB0aW1lb3V0KQorc3RhdGljIGludCBvc3N0X3JlYWRfZnJhbWUoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQsIGludCB0aW1lb3V0KQogewogCXVuc2lnbmVkIGNoYXIJCWNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICAgKiBTUnBudDsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICAgKiBTUnBudDsKIAlpbnQJCQlyZXR2YWwgPSAwOwogI2lmIERFQlVHCiAJb3NfYXV4X3QJICAgICAgKiBhdXggICAgPSBTVHAtPmJ1ZmZlci0+YXV4OwpAQCAtOTMyLDEwICs5ODUsMTAgQEAKIAkgICAgaWYgKGRlYnVnZ2luZykKIAkJcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogU2Vuc2U6ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnhcbiIsCiAJCSAgIG5hbWUsCi0JCSAgIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMF0sIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMV0sCi0JCSAgIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMl0sIFNScG50LT5zcl9zZW5zZV9idWZmZXJbM10sCi0JCSAgIFNScG50LT5zcl9zZW5zZV9idWZmZXJbNF0sIFNScG50LT5zcl9zZW5zZV9idWZmZXJbNV0sCi0JCSAgIFNScG50LT5zcl9zZW5zZV9idWZmZXJbNl0sIFNScG50LT5zcl9zZW5zZV9idWZmZXJbN10pOworCQkgICBTUnBudC0+c2Vuc2VbMF0sIFNScG50LT5zZW5zZVsxXSwKKwkJICAgU1JwbnQtPnNlbnNlWzJdLCBTUnBudC0+c2Vuc2VbM10sCisJCSAgIFNScG50LT5zZW5zZVs0XSwgU1JwbnQtPnNlbnNlWzVdLAorCQkgICBTUnBudC0+c2Vuc2VbNl0sIFNScG50LT5zZW5zZVs3XSk7CiAjZW5kaWYKIAl9CiAJZWxzZQpAQCAtOTYyLDEwICsxMDE1LDEwIEBACiAJcmV0dXJuIChyZXR2YWwpOwogfQogCi1zdGF0aWMgaW50IG9zc3RfaW5pdGlhdGVfcmVhZChzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCkKK3N0YXRpYyBpbnQgb3NzdF9pbml0aWF0ZV9yZWFkKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50KQogewogCXN0cnVjdCBzdF9wYXJ0c3RhdCAgICAqIFNUcHMgICA9ICYoU1RwLT5wc1tTVHAtPnBhcnRpdGlvbl0pOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgICAqIFNScG50ICA7CisJc3RydWN0IG9zc3RfcmVxdWVzdCAgICogU1JwbnQgIDsKIAl1bnNpZ25lZCBjaGFyCQljbWRbTUFYX0NPTU1BTkRfU0laRV07CiAJaW50CQkJcmV0dmFsID0gMDsKIAljaGFyCQkgICAgICAqIG5hbWUgICA9IHRhcGVfbmFtZShTVHApOwpAQCAtOTk5LDcgKzEwNTIsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgb3NzdF9nZXRfbG9naWNhbF9mcmFtZShzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwKK3N0YXRpYyBpbnQgb3NzdF9nZXRfbG9naWNhbF9mcmFtZShzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwKIAkJCQkJCWludCBmcmFtZV9zZXFfbnVtYmVyLCBpbnQgcXVpZXQpCiB7CiAJc3RydWN0IHN0X3BhcnRzdGF0ICogU1RwcyAgPSAmKFNUcC0+cHNbU1RwLT5wYXJ0aXRpb25dKTsKQEAgLTExMjgsNyArMTE4MSw3IEBACiAJcmV0dXJuIChTVHBzLT5lb2YpOwogfQogCi1zdGF0aWMgaW50IG9zc3Rfc2Vla19sb2dpY2FsX2JsayhzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IGxvZ2ljYWxfYmxrX251bSkKK3N0YXRpYyBpbnQgb3NzdF9zZWVrX2xvZ2ljYWxfYmxrKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LCBpbnQgbG9naWNhbF9ibGtfbnVtKQogewogICAgICAgICBzdHJ1Y3Qgc3RfcGFydHN0YXQgKiBTVHBzID0gJihTVHAtPnBzW1NUcC0+cGFydGl0aW9uXSk7CiAJY2hhcgkJICAgKiBuYW1lID0gdGFwZV9uYW1lKFNUcCk7CkBAIC0xMjM3LDcgKzEyOTAsNyBAQAogI2RlZmluZSBPU1NUX1NFQ1RPUl9TSElGVCA5CiAjZGVmaW5lIE9TU1RfU0VDVE9SX01BU0sgIDB4MDNGCiAKLXN0YXRpYyBpbnQgb3NzdF9nZXRfc2VjdG9yKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50KQorc3RhdGljIGludCBvc3N0X2dldF9zZWN0b3Ioc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQpCiB7CiAJaW50CXNlY3RvcjsKICNpZiBERUJVRwpAQCAtMTI2Nyw3ICsxMzIwLDcgQEAKIAlyZXR1cm4gc2VjdG9yOwogfQogCi1zdGF0aWMgaW50IG9zc3Rfc2Vla19zZWN0b3Ioc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBzZWN0b3IpCitzdGF0aWMgaW50IG9zc3Rfc2Vla19zZWN0b3Ioc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBzZWN0b3IpCiB7CiAgICAgICAgIHN0cnVjdCBzdF9wYXJ0c3RhdCAqIFNUcHMgICA9ICYoU1RwLT5wc1tTVHAtPnBhcnRpdGlvbl0pOwogCWludAkJICAgICBmcmFtZSAgPSBzZWN0b3IgPj4gT1NTVF9GUkFNRV9TSElGVCwKQEAgLTEzMzAsMTAgKzEzODMsMTAgQEAKICAqIFByZWNvbmRpdGlvbiBmb3IgdGhpcyBmdW5jdGlvbiB0byB3b3JrOiBhbGwgZnJhbWVzIGluIHRoZQogICogZHJpdmUncyBidWZmZXIgbXVzdCBiZSBvZiBvbmUgdHlwZSAoREFUQSwgTUFSSyBvciBFT0QpIQogICovCi1zdGF0aWMgaW50IG9zc3RfcmVhZF9iYWNrX2J1ZmZlcl9hbmRfcmV3cml0ZShzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwKK3N0YXRpYyBpbnQgb3NzdF9yZWFkX2JhY2tfYnVmZmVyX2FuZF9yZXdyaXRlKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LAogCQkJCQkJdW5zaWduZWQgaW50IGZyYW1lLCB1bnNpZ25lZCBpbnQgc2tpcCwgaW50IHBlbmRpbmcpCiB7Ci0Jc3RydWN0IHNjc2lfcmVxdWVzdCAgICogU1JwbnQgPSAqIGFTUnBudDsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICAgKiBTUnBudCA9ICogYVNScG50OwogCXVuc2lnbmVkIGNoYXIJICAgICAgKiBidWZmZXIsICogcDsKIAl1bnNpZ25lZCBjaGFyCQljbWRbTUFYX0NPTU1BTkRfU0laRV07CiAJaW50CQkJZmxhZywgbmV3X2ZyYW1lLCBpOwpAQCAtMTQ3Nyw4ICsxNTMwLDggQEAKIAkJCQkJU1JwbnQgPSBvc3N0X2RvX3Njc2koU1JwbnQsIFNUcCwgY21kLCAwLCBETUFfTk9ORSwgU1RwLT50aW1lb3V0LAogCQkJCQkJCQkJCQkJTUFYX1JFVFJJRVMsIDEpOwogCi0JCQkJCWlmIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdID09IDIgJiYgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxMl0gPT0gNCAmJgotCQkJCQkgICAgKFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTNdID09IDEgfHwgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxM10gPT0gOCkpIHsKKwkJCQkJaWYgKFNScG50LT5zZW5zZVsyXSA9PSAyICYmIFNScG50LT5zZW5zZVsxMl0gPT0gNCAmJgorCQkJCQkgICAgKFNScG50LT5zZW5zZVsxM10gPT0gMSB8fCBTUnBudC0+c2Vuc2VbMTNdID09IDgpKSB7CiAJCQkJCQkvKiBpbiB0aGUgcHJvY2VzcyBvZiBiZWNvbWluZyByZWFkeSAqLwogCQkJCQkJbXNsZWVwKDEwMCk7CiAJCQkJCQljb250aW51ZTsKQEAgLTE0OTUsMTcgKzE1NDgsMTcgQEAKIAkJfQogCQkqYVNScG50ID0gU1JwbnQ7CiAJCWlmIChmbGFnKSB7Ci0JCQlpZiAoKFNScG50LT5zcl9zZW5zZV9idWZmZXJbIDJdICYgMHgwZikgPT0gMTMgJiYKLQkJCSAgICAgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxMl0gICAgICAgICA9PSAgMCAmJgotCQkJICAgICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEzXSAgICAgICAgID09ICAyKSB7CisJCQlpZiAoKFNScG50LT5zZW5zZVsgMl0gJiAweDBmKSA9PSAxMyAmJgorCQkJICAgICBTUnBudC0+c2Vuc2VbMTJdICAgICAgICAgPT0gIDAgJiYKKwkJCSAgICAgU1JwbnQtPnNlbnNlWzEzXSAgICAgICAgID09ICAyKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczpFOiBWb2x1bWUgb3ZlcmZsb3cgaW4gd3JpdGUgZXJyb3IgcmVjb3ZlcnlcbiIsIG5hbWUpOwogCQkJCXZmcmVlKGJ1ZmZlcik7CiAJCQkJcmV0dXJuICgtRUlPKTsJCQkvKiBoaXQgZW5kIG9mIHRhcGUgPSBmYWlsICovCiAJCQl9Ci0JCQlpID0gKChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzNdIDw8IDI0KSB8Ci0JCQkgICAgIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzRdIDw8IDE2KSB8Ci0JCQkgICAgIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzVdIDw8ICA4KSB8Ci0JCQkgICAgICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzZdICAgICAgICApIC0gbmV3X2ZyYW1lOworCQkJaSA9ICgoU1JwbnQtPnNlbnNlWzNdIDw8IDI0KSB8CisJCQkgICAgIChTUnBudC0+c2Vuc2VbNF0gPDwgMTYpIHwKKwkJCSAgICAgKFNScG50LT5zZW5zZVs1XSA8PCAgOCkgfAorCQkJICAgICAgU1JwbnQtPnNlbnNlWzZdICAgICAgICApIC0gbmV3X2ZyYW1lOwogCQkJcCA9ICZidWZmZXJbaSAqIE9TX0RBVEFfU0laRV07CiAjaWYgREVCVUcKIAkJCXByaW50ayhPU1NUX0RFQl9NU0cgIiVzOkQ6IEFkZGl0aW9uYWwgd3JpdGUgZXJyb3IgYXQgJWRcbiIsIG5hbWUsIG5ld19mcmFtZStpKTsKQEAgLTE1MjgsMTEgKzE1ODEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvc3N0X3JlcG9zaXRpb25fYW5kX3JldHJ5KHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50LAorc3RhdGljIGludCBvc3N0X3JlcG9zaXRpb25fYW5kX3JldHJ5KHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LAogCQkJCQl1bnNpZ25lZCBpbnQgZnJhbWUsIHVuc2lnbmVkIGludCBza2lwLCBpbnQgcGVuZGluZykKIHsKIAl1bnNpZ25lZCBjaGFyCQljbWRbTUFYX0NPTU1BTkRfU0laRV07Ci0Jc3RydWN0IHNjc2lfcmVxdWVzdCAgICogU1JwbnQ7CisJc3RydWN0IG9zc3RfcmVxdWVzdCAgICogU1JwbnQ7CiAJY2hhcgkJICAgICAgKiBuYW1lICAgICAgPSB0YXBlX25hbWUoU1RwKTsKIAlpbnQJCQlleHBlY3RlZCAgPSAwOwogCWludAkJCWF0dGVtcHRzICA9IDEwMDAgLyBza2lwOwpAQCAtMTU4NCw5ICsxNjM3LDkgQEAKIAkJCSphU1JwbnQgPSBTUnBudDsKIAogCQkJaWYgKFNUcC0+YnVmZmVyLT5zeXNjYWxsX3Jlc3VsdCkgewkJLyogYWRkaXRpb25hbCB3cml0ZSBlcnJvciAqLwotCQkJCWlmICgoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsgMl0gJiAweDBmKSA9PSAxMyAmJgotCQkJCSAgICAgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxMl0gICAgICAgICA9PSAgMCAmJgotCQkJCSAgICAgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxM10gICAgICAgICA9PSAgMikgeworCQkJCWlmICgoU1JwbnQtPnNlbnNlWyAyXSAmIDB4MGYpID09IDEzICYmCisJCQkJICAgICBTUnBudC0+c2Vuc2VbMTJdICAgICAgICAgPT0gIDAgJiYKKwkJCQkgICAgIFNScG50LT5zZW5zZVsxM10gICAgICAgICA9PSAgMikgewogCQkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJICAgICAgICIlczpFOiBWb2x1bWUgb3ZlcmZsb3cgaW4gd3JpdGUgZXJyb3IgcmVjb3ZlcnlcbiIsCiAJCQkJCSAgICAgICBuYW1lKTsKQEAgLTE2MzEsOSArMTY4NCw5IEBACiAgKiBFcnJvciByZWNvdmVyeSBhbGdvcml0aG0gZm9yIHRoZSBPblN0cmVhbSB0YXBlLgogICovCiAKLXN0YXRpYyBpbnQgb3NzdF93cml0ZV9lcnJvcl9yZWNvdmVyeShzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IHBlbmRpbmcpCitzdGF0aWMgaW50IG9zc3Rfd3JpdGVfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBwZW5kaW5nKQogewotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKiBTUnBudCAgPSAqIGFTUnBudDsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICogU1JwbnQgID0gKiBhU1JwbnQ7CiAJc3RydWN0IHN0X3BhcnRzdGF0ICAqIFNUcHMgICA9ICYgU1RwLT5wc1tTVHAtPnBhcnRpdGlvbl07CiAJY2hhcgkJICAgICogbmFtZSAgID0gdGFwZV9uYW1lKFNUcCk7CiAJaW50CQkgICAgICByZXR2YWwgPSAwOwpAQCAtMTY0MiwyMCArMTY5NSwyMCBAQAogCiAJcndfc3RhdGUgPSBTVHBzLT5ydzsKIAotCWlmICgoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsgMl0gJiAweDBmKSAhPSAzCi0JICB8fCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEyXSAgICAgICAgICE9IDEyCi0JICB8fCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEzXSAgICAgICAgICE9IDApIHsKKwlpZiAoKFNScG50LT5zZW5zZVsgMl0gJiAweDBmKSAhPSAzCisJICB8fCBTUnBudC0+c2Vuc2VbMTJdICAgICAgICAgIT0gMTIKKwkgIHx8IFNScG50LT5zZW5zZVsxM10gICAgICAgICAhPSAwKSB7CiAjaWYgREVCVUcKIAkJcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogV3JpdGUgZXJyb3IgcmVjb3ZlcnkgY2Fubm90IGhhbmRsZSAlMDJ4OiUwMng6JTAyeFxuIiwgbmFtZSwKLQkJCVNScG50LT5zcl9zZW5zZV9idWZmZXJbMl0sIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTJdLCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEzXSk7CisJCQlTUnBudC0+c2Vuc2VbMl0sIFNScG50LT5zZW5zZVsxMl0sIFNScG50LT5zZW5zZVsxM10pOwogI2VuZGlmCiAJCXJldHVybiAoLUVJTyk7CiAJfQotCWZyYW1lID0JKFNScG50LT5zcl9zZW5zZV9idWZmZXJbM10gPDwgMjQpIHwKLQkJKFNScG50LT5zcl9zZW5zZV9idWZmZXJbNF0gPDwgMTYpIHwKLQkJKFNScG50LT5zcl9zZW5zZV9idWZmZXJbNV0gPDwgIDgpIHwKLQkJIFNScG50LT5zcl9zZW5zZV9idWZmZXJbNl07Ci0Jc2tpcCAgPSAgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlcls5XTsKKwlmcmFtZSA9CShTUnBudC0+c2Vuc2VbM10gPDwgMjQpIHwKKwkJKFNScG50LT5zZW5zZVs0XSA8PCAxNikgfAorCQkoU1JwbnQtPnNlbnNlWzVdIDw8ICA4KSB8CisJCSBTUnBudC0+c2Vuc2VbNl07CisJc2tpcCAgPSAgU1JwbnQtPnNlbnNlWzldOwogIAogI2lmIERFQlVHCiAJcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogRGV0ZWN0ZWQgcGh5c2ljYWwgYmFkIGZyYW1lIGF0ICV1LCBhZHZpc2VkIHRvIHNraXAgJWRcbiIsIG5hbWUsIGZyYW1lLCBza2lwKTsKQEAgLTE3MTAsNyArMTc2Myw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBvc3N0X3NwYWNlX292ZXJfZmlsZW1hcmtzX2JhY2t3YXJkKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50LAorc3RhdGljIGludCBvc3N0X3NwYWNlX292ZXJfZmlsZW1hcmtzX2JhY2t3YXJkKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LAogCQkJCQkJCQkgaW50IG10X29wLCBpbnQgbXRfY291bnQpCiB7CiAJY2hhciAgKiBuYW1lID0gdGFwZV9uYW1lKFNUcCk7CkBAIC0xODA5LDcgKzE4NjIsNyBAQAogICoKICAqIEp1c3Qgc2NhbnMgZm9yIHRoZSBmaWxlbWFyayBzZXF1ZW50aWFsbHkuCiAgKi8KLXN0YXRpYyBpbnQgb3NzdF9zcGFjZV9vdmVyX2ZpbGVtYXJrc19mb3J3YXJkX3Nsb3coc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsCitzdGF0aWMgaW50IG9zc3Rfc3BhY2Vfb3Zlcl9maWxlbWFya3NfZm9yd2FyZF9zbG93KHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LAogCQkJCQkJCQkgICAgIGludCBtdF9vcCwgaW50IG10X2NvdW50KQogewogCWludAljbnQgPSAwOwpAQCAtMTg2Myw3ICsxOTE2LDcgQEAKIC8qCiAgKiBGYXN0IGxpbnV4IHNwZWNpZmljIHZlcnNpb24gb2YgT25TdHJlYW0gRlNGCiAgKi8KLXN0YXRpYyBpbnQgb3NzdF9zcGFjZV9vdmVyX2ZpbGVtYXJrc19mb3J3YXJkX2Zhc3Qoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsCitzdGF0aWMgaW50IG9zc3Rfc3BhY2Vfb3Zlcl9maWxlbWFya3NfZm9yd2FyZF9mYXN0KHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LAogCQkJCQkJCQkgICAgIGludCBtdF9vcCwgaW50IG10X2NvdW50KQogewogCWNoYXIgICogbmFtZSA9IHRhcGVfbmFtZShTVHApOwpAQCAtMjAxNCwxMCArMjA2NywxMCBAQAogICogdG8gdGVzdCB0aGUgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtLgogICovCiAjaWYgREVCVUcKLXN0YXRpYyB2b2lkIG9zc3Rfc2V0X3JldHJpZXMoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIGludCByZXRyaWVzKQorc3RhdGljIHZvaWQgb3NzdF9zZXRfcmV0cmllcyhzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IHJldHJpZXMpCiB7CiAJdW5zaWduZWQgY2hhcgkJY21kW01BWF9DT01NQU5EX1NJWkVdOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgICAqIFNScG50ICA9ICogYVNScG50OworCXN0cnVjdCBvc3N0X3JlcXVlc3QgICAqIFNScG50ICA9ICogYVNScG50OwogCWNoYXIJCSAgICAgICogbmFtZSAgID0gdGFwZV9uYW1lKFNUcCk7CiAKIAltZW1zZXQoY21kLCAwLCBNQVhfQ09NTUFORF9TSVpFKTsKQEAgLTIwNDYsNyArMjA5OSw3IEBACiAjZW5kaWYKIAogCi1zdGF0aWMgaW50IG9zc3Rfd3JpdGVfZmlsZW1hcmsoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQpCitzdGF0aWMgaW50IG9zc3Rfd3JpdGVfZmlsZW1hcmsoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQpCiB7CiAJaW50CXJlc3VsdDsKIAlpbnQJdGhpc19tYXJrX3Bwb3MgPSBTVHAtPmZpcnN0X2ZyYW1lX3Bvc2l0aW9uOwpAQCAtMjA3NCw3ICsyMTI3LDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IG9zc3Rfd3JpdGVfZW9kKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50KQorc3RhdGljIGludCBvc3N0X3dyaXRlX2VvZChzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCkKIHsKIAlpbnQJcmVzdWx0OwogI2lmIERFQlVHCkBAIC0yMDk3LDcgKzIxNTAsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgb3NzdF93cml0ZV9maWxsZXIoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIGludCB3aGVyZSwgaW50IGNvdW50KQorc3RhdGljIGludCBvc3N0X3dyaXRlX2ZpbGxlcihzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IHdoZXJlLCBpbnQgY291bnQpCiB7CiAJY2hhciAqIG5hbWUgPSB0YXBlX25hbWUoU1RwKTsKIApAQCAtMjEyMiw3ICsyMTc1LDcgQEAKIAlyZXR1cm4gb3NzdF9mbHVzaF9kcml2ZV9idWZmZXIoU1RwLCBhU1JwbnQpOwogfQogCi1zdGF0aWMgaW50IF9fb3NzdF93cml0ZV9oZWFkZXIoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIGludCB3aGVyZSwgaW50IGNvdW50KQorc3RhdGljIGludCBfX29zc3Rfd3JpdGVfaGVhZGVyKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LCBpbnQgd2hlcmUsIGludCBjb3VudCkKIHsKIAljaGFyICogbmFtZSA9IHRhcGVfbmFtZShTVHApOwogCWludCAgICAgcmVzdWx0OwpAQCAtMjE0OSw3ICsyMjAyLDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IG9zc3Rfd3JpdGVfaGVhZGVyKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50LCBpbnQgbG9jYXRlX2VvZCkKK3N0YXRpYyBpbnQgb3NzdF93cml0ZV9oZWFkZXIoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBsb2NhdGVfZW9kKQogewogCW9zX2hlYWRlcl90ICogaGVhZGVyOwogCWludAkgICAgICByZXN1bHQ7CkBAIC0yMjIzLDcgKzIyNzYsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgb3NzdF9yZXNldF9oZWFkZXIoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQpCitzdGF0aWMgaW50IG9zc3RfcmVzZXRfaGVhZGVyKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50KQogewogCWlmIChTVHAtPmhlYWRlcl9jYWNoZSAhPSBOVUxMKQogCQltZW1zZXQoU1RwLT5oZWFkZXJfY2FjaGUsIDAsIHNpemVvZihvc19oZWFkZXJfdCkpOwpAQCAtMjIzNiw3ICsyMjg5LDcgQEAKIAlyZXR1cm4gb3NzdF93cml0ZV9oZWFkZXIoU1RwLCBhU1JwbnQsIDEpOwogfQogCi1zdGF0aWMgaW50IF9fb3NzdF9hbmFseXplX2hlYWRlcnMoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBwcG9zKQorc3RhdGljIGludCBfX29zc3RfYW5hbHl6ZV9oZWFkZXJzKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LCBpbnQgcHBvcykKIHsKIAljaGFyICAgICAgICAqIG5hbWUgPSB0YXBlX25hbWUoU1RwKTsKIAlvc19oZWFkZXJfdCAqIGhlYWRlcjsKQEAgLTI0MTMsNyArMjQ2Niw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgb3NzdF9hbmFseXplX2hlYWRlcnMoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQpCitzdGF0aWMgaW50IG9zc3RfYW5hbHl6ZV9oZWFkZXJzKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50KQogewogCWludAlwb3NpdGlvbiwgcHBvczsKIAlpbnQJZmlyc3QsIGxhc3Q7CkBAIC0yNDY4LDcgKzI1MjEsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG9zc3RfdmVyaWZ5X3Bvc2l0aW9uKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50KQorc3RhdGljIGludCBvc3N0X3ZlcmlmeV9wb3NpdGlvbihzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCkKIHsKIAlpbnQJZnJhbWVfcG9zaXRpb24gID0gU1RwLT5maXJzdF9mcmFtZV9wb3NpdGlvbjsKIAlpbnQJZnJhbWVfc2VxX251bWJyID0gU1RwLT5mcmFtZV9zZXFfbnVtYmVyOwpAQCAtMjU0NCwxMSArMjU5NywxMSBAQAogLyoKICAqIENvbmZpZ3VyZSB0aGUgT25TdHJlYW0gU0NJSSB0YXBlIGRyaXZlIGZvciBkZWZhdWx0IG9wZXJhdGlvbgogICovCi1zdGF0aWMgaW50IG9zc3RfY29uZmlndXJlX29uc3RyZWFtKHN0cnVjdCBvc3N0X3RhcGUgKlNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQpCitzdGF0aWMgaW50IG9zc3RfY29uZmlndXJlX29uc3RyZWFtKHN0cnVjdCBvc3N0X3RhcGUgKlNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQpCiB7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgIGNtZFtNQVhfQ09NTUFORF9TSVpFXTsKIAljaGFyICAgICAgICAgICAgICAgICAgICAgICAgICogbmFtZSA9IHRhcGVfbmFtZShTVHApOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgICAgICAgICAgICAgICAgICogU1JwbnQgPSAqIGFTUnBudDsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICAgICAgICAgICogU1JwbnQgPSAqIGFTUnBudDsKIAlvc3N0X21vZGVfcGFyYW1ldGVyX2hlYWRlcl90ICogaGVhZGVyOwogCW9zc3RfYmxvY2tfc2l6ZV9wYWdlX3QgICAgICAgKiBiczsKIAlvc3N0X2NhcGFiaWxpdGllc19wYWdlX3QgICAgICogY3A7CkBAIC0yNzE1LDcgKzI3NjgsNyBAQAogCiAvKiBTdGVwIG92ZXIgRU9GIGlmIGl0IGhhcyBiZWVuIGluYWR2ZXJ0ZW50bHkgY3Jvc3NlZCAoaW9jdGwgbm90IHVzZWQgYmVjYXVzZQogICAgaXQgbWVzc2VzIHVwIHRoZSBibG9jayBudW1iZXIpLiAqLwotc3RhdGljIGludCBjcm9zc19lb2Yoc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IGZvcndhcmQpCitzdGF0aWMgaW50IGNyb3NzX2VvZihzdHJ1Y3Qgb3NzdF90YXBlICpTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LCBpbnQgZm9yd2FyZCkKIHsKIAlpbnQJcmVzdWx0OwogCWNoYXIgICogbmFtZSA9IHRhcGVfbmFtZShTVHApOwpAQCAtMjc0NCwxMCArMjc5NywxMCBAQAogCiAvKiBHZXQgdGhlIHRhcGUgcG9zaXRpb24uICovCiAKLXN0YXRpYyBpbnQgb3NzdF9nZXRfZnJhbWVfcG9zaXRpb24oc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCkKK3N0YXRpYyBpbnQgb3NzdF9nZXRfZnJhbWVfcG9zaXRpb24oc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCkKIHsKIAl1bnNpZ25lZCBjaGFyCQlzY21kW01BWF9DT01NQU5EX1NJWkVdOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgICAqIFNScG50OworCXN0cnVjdCBvc3N0X3JlcXVlc3QgICAqIFNScG50OwogCWludAkJCXJlc3VsdCA9IDA7CiAJY2hhciAgICAJICAgICAgKiBuYW1lICAgPSB0YXBlX25hbWUoU1RwKTsKIApAQCAtMjc3MiwxNCArMjgyNSwxNCBAQAogCSphU1JwbnQgPSBTUnBudDsKIAogCWlmIChTVHAtPmJ1ZmZlci0+c3lzY2FsbF9yZXN1bHQpCi0JCXJlc3VsdCA9ICgoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsyXSAmIDB4MGYpID09IDMpID8gLUVJTyA6IC1FSU5WQUw7CS8qIDM6IFdyaXRlIEVycm9yICovCisJCXJlc3VsdCA9ICgoU1JwbnQtPnNlbnNlWzJdICYgMHgwZikgPT0gMykgPyAtRUlPIDogLUVJTlZBTDsJLyogMzogV3JpdGUgRXJyb3IgKi8KIAogCWlmIChyZXN1bHQgPT0gLUVJTlZBTCkKIAkJcHJpbnRrKEtFUk5fRVJSICIlczpFOiBDYW4ndCByZWFkIHRhcGUgcG9zaXRpb24uXG4iLCBuYW1lKTsKIAllbHNlIHsKIAkJaWYgKHJlc3VsdCA9PSAtRUlPKSB7CS8qIHJlLXJlYWQgcG9zaXRpb24gLSB0aGlzIG5lZWRzIHRvIHByZXNlcnZlIG1lZGlhIGVycm9ycyAqLwogCQkJdW5zaWduZWQgY2hhciBteXNlbnNlWzE2XTsKLQkJCW1lbWNweSAobXlzZW5zZSwgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlciwgMTYpOworCQkJbWVtY3B5IChteXNlbnNlLCBTUnBudC0+c2Vuc2UsIDE2KTsKIAkJCW1lbXNldCAoc2NtZCwgMCwgTUFYX0NPTU1BTkRfU0laRSk7CiAJCQlzY21kWzBdID0gUkVBRF9QT1NJVElPTjsKIAkJCVNUcC0+YnVmZmVyLT5iX2RhdGEgPSBteWJ1ZjsgU1RwLT5idWZmZXItPmJ1ZmZlcl9zaXplID0gMjQ7CkBAIC0yNzg4LDEwICsyODQxLDEwIEBACiAjaWYgREVCVUcKIAkJCXByaW50ayhPU1NUX0RFQl9NU0cgIiVzOkQ6IFJlcmVhZCBwb3NpdGlvbiwgcmVhc29uPVslMDJ4OiUwMng6JTAyeF0sIHJlc3VsdD1bJXMlMDJ4OiUwMng6JTAyeF1cbiIsCiAJCQkJCW5hbWUsIG15c2Vuc2VbMl0sIG15c2Vuc2VbMTJdLCBteXNlbnNlWzEzXSwgU1RwLT5idWZmZXItPnN5c2NhbGxfcmVzdWx0PyIiOiJvazoiLAotCQkJCQlTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdLFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTJdLFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTNdKTsKKwkJCQkJU1JwbnQtPnNlbnNlWzJdLFNScG50LT5zZW5zZVsxMl0sU1JwbnQtPnNlbnNlWzEzXSk7CiAjZW5kaWYKIAkJCWlmICghU1RwLT5idWZmZXItPnN5c2NhbGxfcmVzdWx0KQotCQkJCW1lbWNweSAoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlciwgbXlzZW5zZSwgMTYpOworCQkJCW1lbWNweSAoU1JwbnQtPnNlbnNlLCBteXNlbnNlLCAxNik7CiAJCQllbHNlCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6VzogRG91YmxlIGVycm9yIGluIGdldCBwb3NpdGlvblxuIiwgbmFtZSk7CiAJCX0KQEAgLTI4MjgsMTAgKzI4ODEsMTAgQEAKIAogCiAvKiBTZXQgdGhlIHRhcGUgYmxvY2sgKi8KLXN0YXRpYyBpbnQgb3NzdF9zZXRfZnJhbWVfcG9zaXRpb24oc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IHBwb3MsIGludCBza2lwKQorc3RhdGljIGludCBvc3N0X3NldF9mcmFtZV9wb3NpdGlvbihzdHJ1Y3Qgb3NzdF90YXBlICpTVHAsIHN0cnVjdCBvc3N0X3JlcXVlc3QgKiogYVNScG50LCBpbnQgcHBvcywgaW50IHNraXApCiB7CiAJdW5zaWduZWQgY2hhcgkJc2NtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICAgKiBTUnBudDsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICAgKiBTUnBudDsKIAlzdHJ1Y3Qgc3RfcGFydHN0YXQgICAgKiBTVHBzOwogCWludAkJCXJlc3VsdCA9IDA7CiAJaW50CQkJcHAgICAgID0gKHBwb3MgPT0gMzAwMCAmJiAhc2tpcCk/IDAgOiBwcG9zOwpAQCAtMjg4Niw3ICsyOTM5LDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IG9zc3Rfd3JpdGVfdHJhaWxlcihzdHJ1Y3Qgb3NzdF90YXBlICpTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50LCBpbnQgbGVhdmVfYXRfRU9UKQorc3RhdGljIGludCBvc3N0X3dyaXRlX3RyYWlsZXIoc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IGxlYXZlX2F0X0VPVCkKIHsKIAlzdHJ1Y3Qgc3RfcGFydHN0YXQgKiBTVHBzID0gJihTVHAtPnBzW1NUcC0+cGFydGl0aW9uXSk7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC0yOTEzLDEyICsyOTY2LDEyIEBACiAvKiBvc3N0IHZlcnNpb25zIG9mIHN0IGZ1bmN0aW9ucyAtIGF1Z21lbnRlZCBhbmQgc3RyaXBwZWQgdG8gc3VpdCBPblN0cmVhbSBvbmx5ICovCiAKIC8qIEZsdXNoIHRoZSB3cml0ZSBidWZmZXIgKG5ldmVyIG5lZWQgdG8gd3JpdGUgaWYgdmFyaWFibGUgYmxvY2tzaXplKS4gKi8KLXN0YXRpYyBpbnQgb3NzdF9mbHVzaF93cml0ZV9idWZmZXIoc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCkKK3N0YXRpYyBpbnQgb3NzdF9mbHVzaF93cml0ZV9idWZmZXIoc3RydWN0IG9zc3RfdGFwZSAqU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCkKIHsKIAlpbnQJCQlvZmZzZXQsIHRyYW5zZmVyLCBibGtzID0gMDsKIAlpbnQJCQlyZXN1bHQgPSAwOwogCXVuc2lnbmVkIGNoYXIJCWNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICAgKiBTUnBudCA9ICphU1JwbnQ7CisJc3RydWN0IG9zc3RfcmVxdWVzdCAgICogU1JwbnQgPSAqYVNScG50OwogCXN0cnVjdCBzdF9wYXJ0c3RhdCAgICAqIFNUcHM7CiAJY2hhcgkJICAgICAgKiBuYW1lID0gdGFwZV9uYW1lKFNUcCk7CiAKQEAgLTI5MjYsMTMgKzI5NzksMTMgQEAKIAkJaWYgKFNScG50ID09IChTVHAtPmJ1ZmZlciktPmxhc3RfU1JwbnQpCiAjaWYgREVCVUcKIAkJCXsgcHJpbnRrKE9TU1RfREVCX01TRwotCSAiJXM6RDogYVNScG50IHBvaW50cyB0byBzY3NpX3JlcXVlc3QgdGhhdCB3cml0ZV9iZWhpbmRfY2hlY2sgd2lsbCByZWxlYXNlIC0tIGNsZWFyZWRcbiIsIG5hbWUpOworCSAiJXM6RDogYVNScG50IHBvaW50cyB0byBvc3N0X3JlcXVlc3QgdGhhdCB3cml0ZV9iZWhpbmRfY2hlY2sgd2lsbCByZWxlYXNlIC0tIGNsZWFyZWRcbiIsIG5hbWUpOwogI2VuZGlmCiAJCQkqYVNScG50ID0gU1JwbnQgPSBOVUxMOwogI2lmIERFQlVHCiAJCQl9IGVsc2UgaWYgKFNScG50KQogCQkJCXByaW50ayhPU1NUX0RFQl9NU0cKLQkgIiVzOkQ6IGFTUnBudCBkb2VzIG5vdCBwb2ludCB0byBzY3NpX3JlcXVlc3QgdGhhdCB3cml0ZV9iZWhpbmRfY2hlY2sgd2lsbCByZWxlYXNlIC0tIHN0cmFuZ2VcbiIsIG5hbWUpOworCSAiJXM6RDogYVNScG50IGRvZXMgbm90IHBvaW50IHRvIG9zc3RfcmVxdWVzdCB0aGF0IHdyaXRlX2JlaGluZF9jaGVjayB3aWxsIHJlbGVhc2UgLS0gc3RyYW5nZVxuIiwgbmFtZSk7CiAjZW5kaWYJCiAJCW9zc3Rfd3JpdGVfYmVoaW5kX2NoZWNrKFNUcCk7CiAJCWlmICgoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdCkgewpAQCAtMzAxMCwxMiArMzA2MywxMiBAQAogI2lmIERFQlVHCiAJCQlwcmludGsoT1NTVF9ERUJfTVNHCiAJCQkJIiVzOkQ6IHdyaXRlIHNlbnNlIFswXT0weCUwMnggWzJdPSUwMnggWzEyXT0lMDJ4IFsxM109JTAyeFxuIiwKLQkJCQluYW1lLCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzBdLCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdLAotCQkJCVNScG50LT5zcl9zZW5zZV9idWZmZXJbMTJdLCBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEzXSk7CisJCQkJbmFtZSwgU1JwbnQtPnNlbnNlWzBdLCBTUnBudC0+c2Vuc2VbMl0sCisJCQkJU1JwbnQtPnNlbnNlWzEyXSwgU1JwbnQtPnNlbnNlWzEzXSk7CiAjZW5kaWYKLQkJCWlmICgoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclswXSAmIDB4NzApID09IDB4NzAgJiYKLQkJCSAgICAoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsyXSAmIDB4NDApICYmIC8qIEZJWE1FIC0gU0MtMzAgZHJpdmUgZG9lc24ndCBhc3NlcnQgRU9NIGJpdCAqLwotCQkJICAgIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICYgMHgwZikgPT0gTk9fU0VOU0UpIHsKKwkJCWlmICgoU1JwbnQtPnNlbnNlWzBdICYgMHg3MCkgPT0gMHg3MCAmJgorCQkJICAgIChTUnBudC0+c2Vuc2VbMl0gJiAweDQwKSAmJiAvKiBGSVhNRSAtIFNDLTMwIGRyaXZlIGRvZXNuJ3QgYXNzZXJ0IEVPTSBiaXQgKi8KKwkJCSAgICAoU1JwbnQtPnNlbnNlWzJdICYgMHgwZikgPT0gTk9fU0VOU0UpIHsKIAkJCQlTVHAtPmRpcnR5ID0gMDsKIAkJCQkoU1RwLT5idWZmZXIpLT5idWZmZXJfYnl0ZXMgPSAwOwogCQkJCXJlc3VsdCA9ICgtRU5PU1BDKTsKQEAgLTMwNDMsNyArMzA5Niw3IEBACiAKIC8qIEZsdXNoIHRoZSB0YXBlIGJ1ZmZlci4gVGhlIHRhcGUgd2lsbCBiZSBwb3NpdGlvbmVkIGNvcnJlY3RseSB1bmxlc3MKICAgIHNlZWtfbmV4dCBpcyB0cnVlLiAqLwotc3RhdGljIGludCBvc3N0X2ZsdXNoX2J1ZmZlcihzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IHNlZWtfbmV4dCkKK3N0YXRpYyBpbnQgb3NzdF9mbHVzaF9idWZmZXIoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IG9zc3RfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBzZWVrX25leHQpCiB7CiAJc3RydWN0IHN0X3BhcnRzdGF0ICogU1RwczsKIAlpbnQgICAgYmFja3NwYWNlID0gMCwgcmVzdWx0ID0gMDsKQEAgLTMxMDUsMTAgKzMxNTgsMTAgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IG9zc3Rfd3JpdGVfZnJhbWUoc3RydWN0IG9zc3RfdGFwZSAqIFNUcCwgc3RydWN0IHNjc2lfcmVxdWVzdCAqKiBhU1JwbnQsIGludCBzeW5jaHJvbm91cykKK3N0YXRpYyBpbnQgb3NzdF93cml0ZV9mcmFtZShzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwgaW50IHN5bmNocm9ub3VzKQogewogCXVuc2lnbmVkIGNoYXIJCWNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICAgKiBTUnBudDsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICAgKiBTUnBudDsKIAlpbnQJCQlibGtzOwogI2lmIERFQlVHCiAJY2hhcgkJICAgICAgKiBuYW1lID0gdGFwZV9uYW1lKFNUcCk7CkBAIC0zMTY5LDkgKzMyMjIsOSBAQAogCQkJaWYgKGRlYnVnZ2luZykKIAkJCQlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBFcnJvciBvbiB3cml0ZTpcbiIsIG5hbWUpOwogI2VuZGlmCi0JCQlpZiAoKFNScG50LT5zcl9zZW5zZV9idWZmZXJbMF0gJiAweDcwKSA9PSAweDcwICYmCi0JCQkgICAgKFNScG50LT5zcl9zZW5zZV9idWZmZXJbMl0gJiAweDQwKSkgewotCQkJCWlmICgoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsyXSAmIDB4MGYpID09IFZPTFVNRV9PVkVSRkxPVykKKwkJCWlmICgoU1JwbnQtPnNlbnNlWzBdICYgMHg3MCkgPT0gMHg3MCAmJgorCQkJICAgIChTUnBudC0+c2Vuc2VbMl0gJiAweDQwKSkgeworCQkJCWlmICgoU1JwbnQtPnNlbnNlWzJdICYgMHgwZikgPT0gVk9MVU1FX09WRVJGTE9XKQogCQkJCQlyZXR1cm4gKC1FTk9TUEMpOwogCQkJfQogCQkJZWxzZSB7CkBAIC0zMTg4LDcgKzMyNDEsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBMb2NrIG9yIHVubG9jayB0aGUgZHJpdmUgZG9vci4gRG9uJ3QgdXNlIHdoZW4gc3RydWN0IHNjc2lfcmVxdWVzdCBhbGxvY2F0ZWQuICovCisvKiBMb2NrIG9yIHVubG9jayB0aGUgZHJpdmUgZG9vci4gRG9uJ3QgdXNlIHdoZW4gc3RydWN0IG9zc3RfcmVxdWVzdCBhbGxvY2F0ZWQuICovCiBzdGF0aWMgaW50IGRvX2Rvb3JfbG9jayhzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBpbnQgZG9fbG9jaykKIHsKIAlpbnQgcmV0dmFsLCBjbWQ7CkBAIC0zMjM2LDcgKzMyODksNyBAQAogCWludAkJICAgICAgd3JpdGVfdGhyZXNob2xkOwogCWludAkJICAgICAgZG9pbmdfd3JpdGUgPSAwOwogCWNvbnN0IGNoYXIgICBfX3VzZXIgKiBiX3BvaW50OwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKiBTUnBudCA9IE5VTEw7CisJc3RydWN0IG9zc3RfcmVxdWVzdCAqIFNScG50ID0gTlVMTDsKIAlzdHJ1Y3Qgc3RfbW9kZWRlZiAgICogU1RtOwogCXN0cnVjdCBzdF9wYXJ0c3RhdCAgKiBTVHBzOwogCXN0cnVjdCBvc3N0X3RhcGUgICAgKiBTVHAgID0gZmlscC0+cHJpdmF0ZV9kYXRhOwpAQCAtMzQyNyw3ICszNDgwLDcgQEAKICNpZiBERUJVRwogCWlmIChkZWJ1Z2dpbmcpCiAJCXByaW50ayhPU1NUX0RFQl9NU0cgIiVzOkQ6IFdyaXRpbmcgJWQgYnl0ZXMgdG8gZmlsZSAlZCBibG9jayAlZCBsYmxrICVkIGZzZXEgJWQgZnBwb3MgJWRcbiIsCi0JCQkJbmFtZSwgY291bnQsIFNUcHMtPmRydl9maWxlLCBTVHBzLT5kcnZfYmxvY2ssCisJCQkJbmFtZSwgKGludCkgY291bnQsIFNUcHMtPmRydl9maWxlLCBTVHBzLT5kcnZfYmxvY2ssCiAJCQkJU1RwLT5sb2dpY2FsX2Jsa19udW0sIFNUcC0+ZnJhbWVfc2VxX251bWJlciwgU1RwLT5maXJzdF9mcmFtZV9wb3NpdGlvbik7CiAjZW5kaWYKIAliX3BvaW50ID0gYnVmOwpAQCAtMzQ2Myw3ICszNTE2LDcgQEAKICNpZiBERUJVRwogCQkJCWlmIChkZWJ1Z2dpbmcpCiAJCQkJICAgICAgcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogRU9NIHdpdGggJWQgYnl0ZXMgdW53cml0dGVuLlxuIiwKLQkJCQkJCQkgICAgIG5hbWUsIHRyYW5zZmVyKTsKKwkJCQkJCQkgICAgIG5hbWUsIChpbnQpIHRyYW5zZmVyKTsKICNlbmRpZgogCQkJfQogCQkJZWxzZSB7CkBAIC0zNDgxLDcgKzM1MzQsNyBAQAogCQkJCiAJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQlpZiAoU1JwbnQgIT0gTlVMTCkgewotCQkJCXNjc2lfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKKwkJCQlvc3N0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAJCQkJU1JwbnQgPSBOVUxMOwogCQkJfQogCQkJU1RwLT5idWZmZXItPmJ1ZmZlcl9ieXRlcyA9IDA7CkBAIC0zNTQzLDcgKzM1OTYsNyBAQAogCXJldHZhbCA9IHRvdGFsOwogCiBvdXQ6Ci0JaWYgKFNScG50ICE9IE5VTEwpIHNjc2lfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKKwlpZiAoU1JwbnQgIT0gTlVMTCkgb3NzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCiAJdXAoJlNUcC0+bG9jayk7CiAKQEAgLTM1NTksNyArMzYxMiw3IEBACiAJaW50CQkgICAgICBzcGVjaWFsOwogCXN0cnVjdCBzdF9tb2RlZGVmICAgKiBTVG07CiAJc3RydWN0IHN0X3BhcnRzdGF0ICAqIFNUcHM7Ci0Jc3RydWN0IHNjc2lfcmVxdWVzdCAqIFNScG50ID0gTlVMTDsKKwlzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICogU1JwbnQgPSBOVUxMOwogCXN0cnVjdCBvc3N0X3RhcGUgICAgKiBTVHAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAljaGFyCQkgICAgKiBuYW1lICA9IHRhcGVfbmFtZShTVHApOwogCkBAIC0zNjY3LDcgKzM3MjAsNyBAQAogI2lmIERFQlVHCiAJCQlpZiAoZGVidWdnaW5nICYmIFNUcHMtPmVvZiAhPSBTVF9OT0VPRikKIAkJCSAgICBwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBFT0YgdXAgKCVkKS4gTGVmdCAlZCwgbmVlZGVkICVkLlxuIiwgbmFtZSwKLQkJCQkJCSBTVHBzLT5lb2YsIChTVHAtPmJ1ZmZlciktPmJ1ZmZlcl9ieXRlcywgY291bnQgLSB0b3RhbCk7CisJCQkJCQkgU1Rwcy0+ZW9mLCAoU1RwLT5idWZmZXIpLT5idWZmZXJfYnl0ZXMsIChpbnQpIChjb3VudCAtIHRvdGFsKSk7CiAjZW5kaWYKIAkJICAgICAgIAkvKiBmb3JjZSBtdWx0aXBsZSBvZiBibG9jayBzaXplLCBub3RlIGJsb2NrX3NpemUgbWF5IGhhdmUgYmVlbiBhZGp1c3RlZCAqLwogCQkJdHJhbnNmZXIgPSAoKChTVHAtPmJ1ZmZlciktPmJ1ZmZlcl9ieXRlcyA8IGNvdW50IC0gdG90YWwgPwpAQCAtMzcyOCw3ICszNzgxLDcgQEAKIAlyZXR2YWwgPSB0b3RhbDsKIAogb3V0OgotCWlmIChTUnBudCAhPSBOVUxMKSBzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJaWYgKFNScG50ICE9IE5VTEwpIG9zc3RfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKIAogCXVwKCZTVHAtPmxvY2spOwogCkBAIC0zOTE2LDcgKzM5NjksNyBAQAogCiAKIC8qIEludGVybmFsIGlvY3RsIGZ1bmN0aW9uICovCi1zdGF0aWMgaW50IG9zc3RfaW50X2lvY3RsKHN0cnVjdCBvc3N0X3RhcGUgKiBTVHAsIHN0cnVjdCBzY3NpX3JlcXVlc3QgKiogYVNScG50LAorc3RhdGljIGludCBvc3N0X2ludF9pb2N0bChzdHJ1Y3Qgb3NzdF90YXBlICogU1RwLCBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICoqIGFTUnBudCwKIAkJCSAgICAgdW5zaWduZWQgaW50IGNtZF9pbiwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50CQkJdGltZW91dDsKQEAgLTM5MjQsNyArMzk3Nyw3IEBACiAJaW50CQkJaSwgaW9jdGxfcmVzdWx0OwogCWludAkJCWNoZ19lb2YgPSAxOwogCXVuc2lnbmVkIGNoYXIJCWNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICAgKiBTUnBudCA9ICogYVNScG50OworCXN0cnVjdCBvc3N0X3JlcXVlc3QgICAqIFNScG50ID0gKiBhU1JwbnQ7CiAJc3RydWN0IHN0X3BhcnRzdGF0ICAgICogU1RwczsKIAlpbnQJCQlmaWxlbm8sIGJsa25vLCBhdF9zbSwgZnJhbWVfc2VxX251bWJyLCBsb2dpY2FsX2Jsa19udW07CiAJaW50CQkJZGF0YWxlbiA9IDAsIGRpcmVjdGlvbiA9IERNQV9OT05FOwpAQCAtNDI4MiwxNCArNDMzNSwxNCBAQAogCX0gZWxzZSBpZiAoY21kX2luID09IE1URVJBU0UpIHsKIAkJU1RwLT5oZWFkZXJfb2sgPSAwOwogCX0gZWxzZSBpZiAoU1JwbnQpIHsgIC8qIFNDU0kgY29tbWFuZCB3YXMgbm90IGNvbXBsZXRlbHkgc3VjY2Vzc2Z1bC4gKi8KLQkJaWYgKFNScG50LT5zcl9zZW5zZV9idWZmZXJbMl0gJiAweDQwKSB7CisJCWlmIChTUnBudC0+c2Vuc2VbMl0gJiAweDQwKSB7CiAJCQlTVHBzLT5lb2YgPSBTVF9FT01fT0s7CiAJCQlTVHBzLT5kcnZfYmxvY2sgPSAwOwogCQl9CiAJCWlmIChjaGdfZW9mKQogCQkJU1Rwcy0+ZW9mID0gU1RfTk9FT0Y7CiAKLQkJaWYgKChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICYgMHgwZikgPT0gQkxBTktfQ0hFQ0spCisJCWlmICgoU1JwbnQtPnNlbnNlWzJdICYgMHgwZikgPT0gQkxBTktfQ0hFQ0spCiAJCQlTVHBzLT5lb2YgPSBTVF9FT0Q7CiAKIAkJaWYgKGNtZF9pbiA9PSBNVExPQUQgJiYgb3NzdF93YWl0X2Zvcl9tZWRpdW0oU1RwLCAmU1JwbnQsIDYwKSkKQEAgLTQzMDcsNyArNDM2MCw3IEBACiAJdW5zaWduZWQgc2hvcnQJICAgICAgZmxhZ3M7CiAJaW50CQkgICAgICBpLCBiX3NpemUsIG5ld19zZXNzaW9uID0gMCwgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBjaGFyCSAgICAgIGNtZFtNQVhfQ09NTUFORF9TSVpFXTsKLQlzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICogU1JwbnQgPSBOVUxMOworCXN0cnVjdCBvc3N0X3JlcXVlc3QgKiBTUnBudCA9IE5VTEw7CiAJc3RydWN0IG9zc3RfdGFwZSAgICAqIFNUcDsKIAlzdHJ1Y3Qgc3RfbW9kZWRlZiAgICogU1RtOwogCXN0cnVjdCBzdF9wYXJ0c3RhdCAgKiBTVHBzOwpAQCAtNDQxNSwxNyArNDQ2OCwxNyBAQAogCQlyZXR2YWwgPSAoU1RwLT5idWZmZXIpLT5zeXNjYWxsX3Jlc3VsdDsJCS8qIEZJWE1FIC0gdmFsaWQ/ICovCiAJCWdvdG8gZXJyX291dDsKIAl9Ci0JaWYgKChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzBdICYgMHg3MCkgPT0gMHg3MCAgICAgICYmCi0JICAgIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICYgMHgwZikgPT0gTk9UX1JFQURZICYmCi0JICAgICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEyXSAgICAgICAgPT0gNCAgICAgICAgICkgeworCWlmICgoU1JwbnQtPnNlbnNlWzBdICYgMHg3MCkgPT0gMHg3MCAgICAgICYmCisJICAgIChTUnBudC0+c2Vuc2VbMl0gJiAweDBmKSA9PSBOT1RfUkVBRFkgJiYKKwkgICAgIFNScG50LT5zZW5zZVsxMl0gICAgICAgID09IDQgICAgICAgICApIHsKICNpZiBERUJVRwotCQlwcmludGsoT1NTVF9ERUJfTVNHICIlczpEOiBVbml0IG5vdCByZWFkeSwgY2F1c2UgJXhcbiIsIG5hbWUsIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTNdKTsKKwkJcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogVW5pdCBub3QgcmVhZHksIGNhdXNlICV4XG4iLCBuYW1lLCBTUnBudC0+c2Vuc2VbMTNdKTsKICNlbmRpZgogCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJaWYgKFNScG50LT5zcl9zZW5zZV9idWZmZXJbMTNdID09IDIpIHsJLyogaW5pdGlhbGl6ZSBjb21tYW5kIHJlcXVpcmVkIChMT0FEKSAqLworCQlpZiAoU1JwbnQtPnNlbnNlWzEzXSA9PSAyKSB7CS8qIGluaXRpYWxpemUgY29tbWFuZCByZXF1aXJlZCAoTE9BRCkgKi8KIAkJCW1lbXNldCAoY21kLCAwLCBNQVhfQ09NTUFORF9TSVpFKTsKICAgICAgICAgCQljbWRbMF0gPSBTVEFSVF9TVE9QOwogCQkJY21kWzFdID0gMTsKQEAgLTQ0MzMsMTAgKzQ0ODYsMTAgQEAKIAkJCVNScG50ID0gb3NzdF9kb19zY3NpKFNScG50LCBTVHAsIGNtZCwgMCwgRE1BX05PTkUsCiAJCQkJCSAgICAgU1RwLT50aW1lb3V0LCBNQVhfUkVUUklFUywgMSk7CiAJCX0KLQkJb3NzdF93YWl0X3JlYWR5KFNUcCwgJlNScG50LCAoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxM109PTE/MTU6MykgKiA2MCwgMCk7CisJCW9zc3Rfd2FpdF9yZWFkeShTVHAsICZTUnBudCwgKFNScG50LT5zZW5zZVsxM109PTE/MTU6MykgKiA2MCwgMCk7CiAJfQotCWlmICgoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclswXSAmIDB4NzApID09IDB4NzAgJiYKLQkgICAgKFNScG50LT5zcl9zZW5zZV9idWZmZXJbMl0gJiAweDBmKSA9PSBVTklUX0FUVEVOVElPTikgeyAvKiBOZXcgbWVkaWE/ICovCisJaWYgKChTUnBudC0+c2Vuc2VbMF0gJiAweDcwKSA9PSAweDcwICYmCisJICAgIChTUnBudC0+c2Vuc2VbMl0gJiAweDBmKSA9PSBVTklUX0FUVEVOVElPTikgeyAvKiBOZXcgbWVkaWE/ICovCiAjaWYgREVCVUcKIAkJcHJpbnRrKE9TU1RfREVCX01TRyAiJXM6RDogVW5pdCB3YW50cyBhdHRlbnRpb25cbiIsIG5hbWUpOwogI2VuZGlmCkBAIC00NDQ5LDggKzQ1MDIsOCBAQAogCiAJCQlTUnBudCA9IG9zc3RfZG9fc2NzaShTUnBudCwgU1RwLCBjbWQsIDAsIERNQV9OT05FLAogCQkJCQkgICAgIFNUcC0+dGltZW91dCwgTUFYX1JFVFJJRVMsIDEpOwotCQkJaWYgKChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzBdICYgMHg3MCkgIT0gMHg3MCB8fAotCQkJICAgIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICYgMHgwZikgIT0gVU5JVF9BVFRFTlRJT04pCisJCQlpZiAoKFNScG50LT5zZW5zZVswXSAmIDB4NzApICE9IDB4NzAgfHwKKwkJCSAgICAoU1JwbnQtPnNlbnNlWzJdICYgMHgwZikgIT0gVU5JVF9BVFRFTlRJT04pCiAJCQkJYnJlYWs7CiAJCX0KIApAQCAtNDQ3Niw3ICs0NTI5LDcgQEAKIAkgKiBvcGVuIHdpdGhvdXQgcmVjb25maWd1cmluZyBhbmQgcmUtcmVhZGluZyB0aGUgaGVhZGVycwogCSAqLwogCWlmICghU1RwLT5idWZmZXItPnN5c2NhbGxfcmVzdWx0ICYmIFNUcC0+aGVhZGVyX29rICYmCi0JICAgICFTUnBudC0+c3JfcmVzdWx0ICYmIFNScG50LT5zcl9zZW5zZV9idWZmZXJbMF0gPT0gMCkgeworCSAgICAhU1JwbnQtPnJlc3VsdCAmJiBTUnBudC0+c2Vuc2VbMF0gPT0gMCkgewogCiAJCW1lbXNldChjbWQsIDAsIE1BWF9DT01NQU5EX1NJWkUpOwogCQljbWRbMF0gPSBNT0RFX1NFTlNFOwpAQCAtNDUxNSw3ICs0NTY4LDcgQEAKIAkJCX0KIAkJCVNUcC0+YnVmZmVyLT5idWZmZXJfYmxvY2tzID0gT1NfREFUQV9TSVpFIC8gU1RwLT5ibG9ja19zaXplOwogCQkJU1RwLT5mYXN0X29wZW4gPSAxOwotCQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQkJb3NzdF9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOwogCQkJcmV0dXJuIDA7CiAJCX0KICNpZiBERUJVRwpAQCAtNDUyOCw3ICs0NTgxLDcgQEAKIAlTVHAtPmZhc3Rfb3BlbiA9IDA7CiAKIAlpZiAoKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQgIT0gMCAmJiAgIC8qIGluIGFsbCBlcnJvciBjb25kaXRpb25zIGV4Y2VwdCBubyBtZWRpdW0gKi8gCi0JICAgIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICE9IDIgfHwgU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsxMl0gIT0gMHgzQSkgKSB7CisJICAgIChTUnBudC0+c2Vuc2VbMl0gIT0gMiB8fCBTUnBudC0+c2Vuc2VbMTJdICE9IDB4M0EpICkgewogCiAJCW1lbXNldChjbWQsIDAsIE1BWF9DT01NQU5EX1NJWkUpOwogCQljbWRbMF0gPSBNT0RFX1NFTEVDVDsKQEAgLTQ1NTgsMTEgKzQ2MTEsMTEgQEAKIAogCQkJU1JwbnQgPSBvc3N0X2RvX3Njc2koU1JwbnQsIFNUcCwgY21kLCAwLCBETUFfTk9ORSwKIAkJCQkJCSAgICBTVHAtPnRpbWVvdXQsIE1BWF9SRVRSSUVTLCAxKTsKLQkJCWlmICgoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclswXSAmIDB4NzApICE9IDB4NzAgfHwKLQkJCSAgICAoU1JwbnQtPnNyX3NlbnNlX2J1ZmZlclsyXSAmIDB4MGYpID09IE5PVF9SRUFEWSkKKwkJCWlmICgoU1JwbnQtPnNlbnNlWzBdICYgMHg3MCkgIT0gMHg3MCB8fAorCQkJICAgIChTUnBudC0+c2Vuc2VbMl0gJiAweDBmKSA9PSBOT1RfUkVBRFkpCiAJCQlicmVhazsKIAotCQkJaWYgKChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzJdICYgMHgwZikgPT0gVU5JVF9BVFRFTlRJT04pIHsKKwkJCWlmICgoU1JwbnQtPnNlbnNlWzJdICYgMHgwZikgPT0gVU5JVF9BVFRFTlRJT04pIHsKIAkJCQlTVHAtPnBvc191bmtub3duID0gMDsKIAkJCQlTVHAtPnBhcnRpdGlvbiA9IFNUcC0+bmV3X3BhcnRpdGlvbiA9IDA7CiAJCQkJaWYgKFNUcC0+Y2FuX3BhcnRpdGlvbnMpCkBAIC00NTg2LDEzICs0NjM5LDEzIEBACiAKIAlpZiAoKFNUcC0+YnVmZmVyKS0+c3lzY2FsbF9yZXN1bHQgIT0gMCkgewogCQlpZiAoKFNUcC0+ZGV2aWNlKS0+c2NzaV9sZXZlbCA+PSBTQ1NJXzIgJiYKLQkJICAgIChTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzBdICYgMHg3MCkgPT0gMHg3MCAmJgotCQkgICAgKFNScG50LT5zcl9zZW5zZV9idWZmZXJbMl0gJiAweDBmKSA9PSBOT1RfUkVBRFkgJiYKLQkJICAgICBTUnBudC0+c3Jfc2Vuc2VfYnVmZmVyWzEyXSA9PSAweDNhKSB7IC8qIENoZWNrIEFTQyAqLworCQkgICAgKFNScG50LT5zZW5zZVswXSAmIDB4NzApID09IDB4NzAgJiYKKwkJICAgIChTUnBudC0+c2Vuc2VbMl0gJiAweDBmKSA9PSBOT1RfUkVBRFkgJiYKKwkJICAgICBTUnBudC0+c2Vuc2VbMTJdID09IDB4M2EpIHsgLyogQ2hlY2sgQVNDICovCiAJCQlTVHAtPnJlYWR5ID0gU1RfTk9fVEFQRTsKIAkJfSBlbHNlCiAJCQlTVHAtPnJlYWR5ID0gU1RfTk9UX1JFQURZOwotCQlzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJCW9zc3RfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKIAkJU1JwbnQgPSBOVUxMOwogCQlTVHAtPmRlbnNpdHkgPSAwOyAgIAkvKiBDbGVhciB0aGUgZXJyb25lb3VzICJyZXNpZHVlIiAqLwogCQlTVHAtPndyaXRlX3Byb3QgPSAwOwpAQCAtNDY1MiwxNCArNDcwNSwxNCBAQAogCiAJb3NzdF9hbmFseXplX2hlYWRlcnMoU1RwLCAmU1JwbnQpOwogCi0Jc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCW9zc3RfcmVsZWFzZV9yZXF1ZXN0KFNScG50KTsKIAlTUnBudCA9IE5VTEw7CiAKIAlyZXR1cm4gMDsKIAogZXJyX291dDoKIAlpZiAoU1JwbnQgIT0gTlVMTCkKLQkJc2NzaV9yZWxlYXNlX3JlcXVlc3QoU1JwbnQpOworCQlvc3N0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAJbm9ybWFsaXplX2J1ZmZlcihTVHAtPmJ1ZmZlcik7CiAJU1RwLT5oZWFkZXJfb2sgPSAwOwogCVNUcC0+aW5fdXNlID0gMDsKQEAgLTQ2NzYsNyArNDcyOSw3IEBACiAJc3RydWN0IG9zc3RfdGFwZSAgICAqIFNUcCAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc3RfbW9kZWRlZiAgICogU1RtICAgID0gJihTVHAtPm1vZGVzW1NUcC0+Y3VycmVudF9tb2RlXSk7CiAJc3RydWN0IHN0X3BhcnRzdGF0ICAqIFNUcHMgICA9ICYoU1RwLT5wc1tTVHAtPnBhcnRpdGlvbl0pOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKiBTUnBudCAgPSBOVUxMOworCXN0cnVjdCBvc3N0X3JlcXVlc3QgKiBTUnBudCAgPSBOVUxMOwogCWNoYXIJCSAgICAqIG5hbWUgICA9IHRhcGVfbmFtZShTVHApOwogCiAJaWYgKGZpbGVfY291bnQoZmlscCkgPiAxKQpAQCAtNDczOSw3ICs0NzkyLDcgQEAKIAkJaWYgKHJlc3VsdCA9PSAwICYmIHJlc3VsdDIgPCAwKQogCQkJcmVzdWx0ID0gcmVzdWx0MjsKIAl9Ci0JaWYgKFNScG50KSBzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJaWYgKFNScG50KSBvc3N0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAKIAlpZiAoU1RwLT5hYm9ydF9jb3VudCB8fCBTVHAtPnJlY292ZXJfY291bnQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6SToiLCBuYW1lKTsKQEAgLTQ3OTMsNyArNDg0Niw3IEBACiAJdW5zaWduZWQgaW50CSAgICAgIGJsazsKIAlzdHJ1Y3Qgc3RfbW9kZWRlZiAgICogU1RtOwogCXN0cnVjdCBzdF9wYXJ0c3RhdCAgKiBTVHBzOwotCXN0cnVjdCBzY3NpX3JlcXVlc3QgKiBTUnBudCA9IE5VTEw7CisJc3RydWN0IG9zc3RfcmVxdWVzdCAqIFNScG50ID0gTlVMTDsKIAlzdHJ1Y3Qgb3NzdF90YXBlICAgICogU1RwICAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhcgkJICAgICogbmFtZSAgPSB0YXBlX25hbWUoU1RwKTsKIAl2b2lkCSAgICBfX3VzZXIgICogcCAgICAgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC01MTA3LDE0ICs1MTYwLDE0IEBACiAJCQlyZXR2YWwgPSAtRUZBVUxUOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKFNScG50KSBzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJaWYgKFNScG50KSBvc3N0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAKIAl1cCgmU1RwLT5sb2NrKTsKIAogCXJldHVybiBzY3NpX2lvY3RsKFNUcC0+ZGV2aWNlLCBjbWRfaW4sIHApOwogCiBvdXQ6Ci0JaWYgKFNScG50KSBzY3NpX3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CisJaWYgKFNScG50KSBvc3N0X3JlbGVhc2VfcmVxdWVzdChTUnBudCk7CiAKIAl1cCgmU1RwLT5sb2NrKTsKIApAQCAtNTY2Nyw3ICs1NzIwLDcgQEAKIAlzdHJ1Y3Qgc3RfcGFydHN0YXQgKiBTVHBzOwogCXN0cnVjdCBvc3N0X2J1ZmZlciAqIGJ1ZmZlcjsKIAlzdHJ1Y3QgZ2VuZGlzawkgICAqIGRyaXZlOwotCWludAkJICAgICBpLCBtb2RlLCBkZXZfbnVtOworCWludAkJICAgICBpLCBkZXZfbnVtOwogCiAJaWYgKFNEcC0+dHlwZSAhPSBUWVBFX1RBUEUgfHwgIW9zc3Rfc3VwcG9ydHMoU0RwKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01ODAzLDE4ICs1ODU2LDYgQEAKIAkJc25wcmludGYobmFtZSwgOCwgIiVzJXMiLCAibiIsIHRhcGVfbmFtZSh0cG50KSk7CiAJCW9zc3Rfc3lzZnNfYWRkKE1LREVWKE9TU1RfTUFKT1IsIGRldl9udW0gKyAxMjgpLCBkZXYsIHRwbnQsIG5hbWUpOwogCX0KLQlmb3IgKG1vZGUgPSAwOyBtb2RlIDwgU1RfTkJSX01PREVTOyArK21vZGUpIHsKLQkJLyogIFJld2luZCBlbnRyeSAgKi8KLQkJZGV2ZnNfbWtfY2RldihNS0RFVihPU1NUX01BSk9SLCBkZXZfbnVtICsgKG1vZGUgPDwgNSkpLAotCQkJCVNfSUZDSFIgfCBTX0lSVUdPIHwgU19JV1VHTywKLQkJCQkiJXMvb3QlcyIsIFNEcC0+ZGV2ZnNfbmFtZSwgb3NzdF9mb3JtYXRzW21vZGVdKTsKLQotCQkvKiAgTm8tcmV3aW5kIGVudHJ5ICAqLwotCQlkZXZmc19ta19jZGV2KE1LREVWKE9TU1RfTUFKT1IsIGRldl9udW0gKyAobW9kZSA8PCA1KSArIDEyOCksCi0JCQkJU19JRkNIUiB8IFNfSVJVR08gfCBTX0lXVUdPLAotCQkJCSIlcy9vdCVzbiIsIFNEcC0+ZGV2ZnNfbmFtZSwgb3NzdF9mb3JtYXRzW21vZGVdKTsKLQl9Ci0JZHJpdmUtPm51bWJlciA9IGRldmZzX3JlZ2lzdGVyX3RhcGUoU0RwLT5kZXZmc19uYW1lKTsKIAogCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgU0RwLAogCQkib3NzdCA6STogQXR0YWNoZWQgT25TdHJlYW0gJS41cyB0YXBlIGFzICVzXG4iLApAQCAtNTgzMSw3ICs1ODcyLDcgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBTRHAgPSB0b19zY3NpX2RldmljZShkZXYpOwogCXN0cnVjdCBvc3N0X3RhcGUgKiB0cG50OwotCWludCBpLCBtb2RlOworCWludCBpOwogCiAJaWYgKChTRHAtPnR5cGUgIT0gVFlQRV9UQVBFKSB8fCAob3NzdF9ucl9kZXYgPD0gMCkpCiAJCXJldHVybiAwOwpAQCAtNTg0MiwxMSArNTg4Myw2IEBACiAJCQlvc3N0X3N5c2ZzX2Rlc3Ryb3koTUtERVYoT1NTVF9NQUpPUiwgaSkpOwogCQkJb3NzdF9zeXNmc19kZXN0cm95KE1LREVWKE9TU1RfTUFKT1IsIGkrMTI4KSk7CiAJCQl0cG50LT5kZXZpY2UgPSBOVUxMOwotCQkJZm9yIChtb2RlID0gMDsgbW9kZSA8IFNUX05CUl9NT0RFUzsgKyttb2RlKSB7Ci0JCQkJZGV2ZnNfcmVtb3ZlKCIlcy9vdCVzIiwgU0RwLT5kZXZmc19uYW1lLCBvc3N0X2Zvcm1hdHNbbW9kZV0pOwotCQkJCWRldmZzX3JlbW92ZSgiJXMvb3Qlc24iLCBTRHAtPmRldmZzX25hbWUsIG9zc3RfZm9ybWF0c1ttb2RlXSk7Ci0JCQl9Ci0JCQlkZXZmc191bnJlZ2lzdGVyX3RhcGUodHBudC0+ZHJpdmUtPm51bWJlcik7CiAJCQlwdXRfZGlzayh0cG50LT5kcml2ZSk7CiAJCQlvc19zY3NpX3RhcGVzW2ldID0gTlVMTDsKIAkJCW9zc3RfbnJfZGV2LS07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvb3NzdC5oIGIvZHJpdmVycy9zY3NpL29zc3QuaAppbmRleCBiNzJlMWM3Li4wMTFkNGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvb3NzdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9vc3N0LmgKQEAgLTUxOCw3ICs1MTgsOCBAQAogICBpbnQgd3JpdGluZzsKICAgaW50IG1pZGxldmVsX3Jlc3VsdDsKICAgaW50IHN5c2NhbGxfcmVzdWx0OwotICBzdHJ1Y3Qgc2NzaV9yZXF1ZXN0ICpsYXN0X1NScG50OworICBzdHJ1Y3Qgb3NzdF9yZXF1ZXN0ICpsYXN0X1NScG50OworICBzdHJ1Y3Qgc3RfY21kc3RhdHVzIGNtZHN0YXQ7CiAgIHVuc2lnbmVkIGNoYXIgKmJfZGF0YTsKICAgb3NfYXV4X3QgKmF1eDsgICAgICAgICAgICAgICAvKiBvbnN0cmVhbSBBVVggc3RydWN0dXJlIGF0IGVuZCBvZiBlYWNoIGJsb2NrICAgICAqLwogICB1bnNpZ25lZCBzaG9ydCB1c2Vfc2c7ICAgICAgIC8qIHplcm8gb3IgbnVtYmVyIG9mIHMvZyBzZWdtZW50cyBmb3IgdGhpcyBhZGFwdGVyICovCkBAIC02MjYsNiArNjI3LDE1IEBACiAgIHN0cnVjdCBnZW5kaXNrICpkcml2ZTsKIH0gOwogCisvKiBzY3NpIHRhcGUgY29tbWFuZCAqLworc3RydWN0IG9zc3RfcmVxdWVzdCB7CisJdW5zaWduZWQgY2hhciBjbWRbTUFYX0NPTU1BTkRfU0laRV07CisJdW5zaWduZWQgY2hhciBzZW5zZVtTQ1NJX1NFTlNFX0JVRkZFUlNJWkVdOworCWludCByZXN1bHQ7CisJc3RydWN0IG9zc3RfdGFwZSAqc3RwOworCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOworfTsKKwogLyogVmFsdWVzIG9mIHdyaXRlX3R5cGUgKi8KICNkZWZpbmUgT1NfV1JJVEVfREFUQSAgICAgIDAKICNkZWZpbmUgT1NfV1JJVEVfRU9EICAgICAgIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvS2NvbmZpZwppbmRleCBkZjUyMTkwLi5lYWM4ZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9LY29uZmlnCkBAIC04LDYgKzgsNyBAQAogY29uZmlnIFBDTUNJQV9BSEExNTJYCiAJdHJpc3RhdGUgIkFkYXB0ZWMgQUhBMTUyWCBQQ01DSUEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIG0gJiYgITY0QklUCisJc2VsZWN0IFNDU0lfU1BJX0FUVFJTCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCB0aGlzIHR5cGUgb2YgUENNQ0lBIFNDU0kgaG9zdAogCSAgYWRhcHRlciB0byB5b3VyIGNvbXB1dGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKaW5kZXggMGM5ZWRiNy4uNTYwOTg0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCkBAIC0yNzUsMTAgKzI3NSw4IEBACiAKIAlsaW5rLT5zdGF0ZSAmPSB+REVWX1NVU1BFTkQ7CiAJaWYgKGxpbmstPnN0YXRlICYgREVWX0NPTkZJRykgewotCQlTY3NpX0NtbmQgdG1wOwogCQlwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSwgJmxpbmstPmNvbmYpOwotCQl0bXAuZGV2aWNlLT5ob3N0ID0gaW5mby0+aG9zdDsKLQkJYWhhMTUyeF9ob3N0X3Jlc2V0KCZ0bXApOworCQlhaGExNTJ4X2hvc3RfcmVzZXRfaG9zdChpbmZvLT5ob3N0KTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKaW5kZXggZThkZjBjOS4uM2M4NWM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogc3RhdGljIHZvaWQgYWRtYV9wb3J0X3N0b3Aoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBhZG1hX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIGFkbWFfcWNfcHJlcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKLXN0YXRpYyBpbnQgYWRtYV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWRtYV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyBpbnQgYWRtYV9jaGVja19hdGFwaV9kbWEoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMgdm9pZCBhZG1hX2JtZG1hX3N0b3Aoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMgdTggYWRtYV9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CkBAIC0xNDcsNyArMTQ3LDYgQEAKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLm1heF9zZWN0b3JzCQk9IEFUQV9NQVhfU0VDVE9SUywKIAkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKIAkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCkBAIC0zMjIsNyArMzIxLDcgQEAKIAkJCT0gKHBGTEFHUyAmIHBFTkQpID8gMCA6IGNwdV90b19sZTMyKHBwLT5wa3RfZG1hICsgaSArIDQpOwogCQlpICs9IDQ7CiAKLQkJVlBSSU5USygiUFJEWyV1XSA9ICgweCVsWCwgMHglWClcbiIsIG5lbGVtLAorCQlWUFJJTlRLKCJQUkRbJXVdID0gKDB4JWxYLCAweCVYKVxuIiwgaS80LAogCQkJCQkodW5zaWduZWQgbG9uZylhZGRyLCBsZW4pOwogCX0KIAlyZXR1cm4gaTsKQEAgLTQxOSw3ICs0MTgsNyBAQAogCXdyaXRldyhhUElPTUQ0IHwgYUdPLCBjaGFuICsgQURNQV9DT05UUk9MKTsKIH0KIAotc3RhdGljIGludCBhZG1hX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IGFkbWFfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYWRtYV9wb3J0X3ByaXYgKnBwID0gcWMtPmFwLT5wcml2YXRlX2RhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L0tjb25maWcgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9LY29uZmlnCmluZGV4IDU3NThiMjUuLmZmNDA5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvS2NvbmZpZwpAQCAtMTAsMTQgKzEwLDEzIEBACiAJQnkgZGVmYXVsdCwgZmlybXdhcmUgZm9yIHRoZSBJU1AgcGFydHMgd2lsbCBiZSBsb2FkZWQKIAl2aWEgdGhlIEZpcm13YXJlIExvYWRlciBpbnRlcmZhY2UuCiAKLQlJU1AgICAgICAgICAgICAgRmlybXdhcmUgRmlsZW5hbWUKLQktLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0KLQkyMXh4ICAgICAgICAgICAgcWwyMTAwX2Z3LmJpbgotCTIyeHggICAgICAgICAgICBxbDIyMDBfZncuYmluCi0JMjMwMCwgMjMxMiAgICAgIHFsMjMwMF9mdy5iaW4KLQkyMzIyICAgICAgICAgICAgcWwyMzIyX2Z3LmJpbgotCTYzMTIsIDYzMjIgICAgICBxbDYzMTJfZncuYmluCi0JMjR4eCAgICAgICAgICAgIHFsMjQwMF9mdy5iaW4KKwlJU1AgICAgICAgICAgICAgICBGaXJtd2FyZSBGaWxlbmFtZQorCS0tLS0tLS0tLS0gICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tCisJMjF4eCAgICAgICAgICAgICAgcWwyMTAwX2Z3LmJpbgorCTIyeHggICAgICAgICAgICAgIHFsMjIwMF9mdy5iaW4KKwkyMzAwLCAyMzEyLCA2MzEyICBxbDIzMDBfZncuYmluCisJMjMyMiwgNjMyMiAgICAgICAgcWwyMzIyX2Z3LmJpbgorCTI0eHggICAgICAgICAgICAgIHFsMjQwMF9mdy5iaW4KIAogCVVwb24gcmVxdWVzdCwgdGhlIGRyaXZlciBjYWNoZXMgdGhlIGZpcm13YXJlIGltYWdlIHVudGlsCiAJdGhlIGRyaXZlciBpcyB1bmxvYWRlZC4KQEAgLTUxLDIzICs1MCwxNyBAQAogCVRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBRTG9naWMgMjJ4eCAoSVNQMjIwMCkgaG9zdCBhZGFwdGVyIGZhbWlseS4KIAogY29uZmlnIFNDU0lfUUxBMjMwMAotCXRyaXN0YXRlICIgIEJ1aWxkIFFMb2dpYyBJU1AyMzAwIGZpcm13YXJlLW1vZHVsZSIKKwl0cmlzdGF0ZSAiICBCdWlsZCBRTG9naWMgSVNQMjMwMC9JU1A2MzEyIGZpcm13YXJlLW1vZHVsZSIKIAlkZXBlbmRzIG9uIFNDU0lfUUxBX0ZDICYmIFNDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRQogCS0tLWhlbHAtLS0KLQlUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUUxvZ2ljIDIzMDAgKElTUDIzMDAgYW5kIElTUDIzMTIpIGhvc3QKLQlhZGFwdGVyIGZhbWlseS4KKwlUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUUxvZ2ljIDIzMDAgKElTUDIzMDAsIElTUDIzMTIgYW5kCisJSVNQNjMxMikgaG9zdCBhZGFwdGVyIGZhbWlseS4KIAogY29uZmlnIFNDU0lfUUxBMjMyMgotCXRyaXN0YXRlICIgIEJ1aWxkIFFMb2dpYyBJU1AyMzIyIGZpcm13YXJlLW1vZHVsZSIKKwl0cmlzdGF0ZSAiICBCdWlsZCBRTG9naWMgSVNQMjMyMi9JU1A2MzIyIGZpcm13YXJlLW1vZHVsZSIKIAlkZXBlbmRzIG9uIFNDU0lfUUxBX0ZDICYmIFNDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRQogCS0tLWhlbHAtLS0KLQlUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgUUxvZ2ljIDIzMjIgKElTUDIzMjIpIGhvc3QgYWRhcHRlciBmYW1pbHkuCi0KLWNvbmZpZyBTQ1NJX1FMQTYzMTIKLQl0cmlzdGF0ZSAiICBCdWlsZCBRTG9naWMgSVNQNjN4eCBmaXJtd2FyZS1tb2R1bGUiCi0JZGVwZW5kcyBvbiBTQ1NJX1FMQV9GQyAmJiBTQ1NJX1FMQTJYWFhfRU1CRURERURfRklSTVdBUkUKLQktLS1oZWxwLS0tCi0JVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFFMb2dpYyA2M3h4IChJU1A2MzEyIGFuZCBJU1A2MzIyKSBob3N0CisJVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFFMb2dpYyAyMzIyIChJU1AyMzIyIGFuZCBJU1A2MzIyKSBob3N0CiAJYWRhcHRlciBmYW1pbHkuCiAKIGNvbmZpZyBTQ1NJX1FMQTI0WFgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvTWFrZWZpbGUKaW5kZXggZDAyOGJjNTAuLmM4ZjY3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L01ha2VmaWxlCkBAIC05LDEyICs5LDEwIEBACiBxbGEyMjAwLXkgOj0gcWwyMjAwLm8gcWwyMjAwX2Z3Lm8KIHFsYTIzMDAteSA6PSBxbDIzMDAubyBxbDIzMDBfZncubwogcWxhMjMyMi15IDo9IHFsMjMyMi5vIHFsMjMyMl9mdy5vCi1xbGE2MzEyLXkgOj0gcWw2MzEyLm8gcWw2MzEyX2Z3Lm8KIHFsYTI0MDAteSA6PSBxbDI0MDAubyBxbDI0MDBfZncubwogCiBvYmotJChDT05GSUdfU0NTSV9RTEEyMVhYKSArPSBxbGEyeHh4Lm8gcWxhMjEwMC5vCiBvYmotJChDT05GSUdfU0NTSV9RTEEyMlhYKSArPSBxbGEyeHh4Lm8gcWxhMjIwMC5vCiBvYmotJChDT05GSUdfU0NTSV9RTEEyMzAwKSArPSBxbGEyeHh4Lm8gcWxhMjMwMC5vCiBvYmotJChDT05GSUdfU0NTSV9RTEEyMzIyKSArPSBxbGEyeHh4Lm8gcWxhMjMyMi5vCi1vYmotJChDT05GSUdfU0NTSV9RTEE2MzEyKSArPSBxbGEyeHh4Lm8gcWxhNjMxMi5vCiBvYmotJChDT05GSUdfU0NTSV9RTEEyNFhYKSArPSBxbGEyeHh4Lm8gcWxhMjQwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDIzMDAuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjMwMC5jCmluZGV4IGZkMmY0YjcuLmU3YTkzZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjMwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjMwMC5jCkBAIC00MCw2ICs0MCwxMSBAQAogCQkuaXNwX25hbWUJPSAiSVNQMjMxMiIsCiAJCS5md19pbmZvCT0gcWxhX2Z3X3RibCwKIAl9LAorCXsKKwkJLmRydl9uYW1lCT0gcWxhX2RyaXZlcl9uYW1lLAorCQkuaXNwX25hbWUJPSAiSVNQNjMxMiIsCisJCS5md19pbmZvCT0gcWxhX2Z3X3RibCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsYTIzMDBfcGNpX3RibFtdID0gewpAQCAtNTcsNiArNjIsMTMgQEAKIAkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCiAJCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZxbGFfYm9hcmRfdGJsWzFdLAogCX0sCisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUUxPR0lDLAorCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDYzMTIsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJnFsYV9ib2FyZF90YmxbMl0sCisJfSwKIAl7MCwgMH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsYTIzMDBfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDIzMDBfZncuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjMwMF9mdy5jCmluZGV4IGRmYzljZDUuLmI4Y2U3ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjMwMF9mdy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjMwMF9mdy5jCkBAIC02LDcgKzYsNyBAQAogICovCiAKIC8qCi0gKglGaXJtd2FyZSBWZXJzaW9uIDMuMDMuMTggKDEyOjA5IFNlcCAyMCwgMjAwNSkKKyAqCUZpcm13YXJlIFZlcnNpb24gMy4wMy4yMCAoMTU6MzkgRmViIDAxLCAyMDA2KQogICovCiAKICNpZmRlZiBVTklRVUVfRldfTkFNRQpAQCAtMTYsMTUgKzE2LDE1IEBACiAjZW5kaWYKIAogI2lmZGVmIFVOSVFVRV9GV19OQU1FCi11bnNpZ25lZCBjaGFyIGZ3MjMwMGlweF92ZXJzaW9uX3N0cltdID0gezMsIDMsMTh9OwordW5zaWduZWQgY2hhciBmdzIzMDBpcHhfdmVyc2lvbl9zdHJbXSA9IHszLCAzLDIwfTsKICNlbHNlCi11bnNpZ25lZCBjaGFyIGZpcm13YXJlX3ZlcnNpb25bXSA9IHszLCAzLDE4fTsKK3Vuc2lnbmVkIGNoYXIgZmlybXdhcmVfdmVyc2lvbltdID0gezMsIDMsMjB9OwogI2VuZGlmCiAKICNpZmRlZiBVTklRVUVfRldfTkFNRQotI2RlZmluZSBmdzIzMDBpcHhfVkVSU0lPTl9TVFJJTkcgIjMuMDMuMTgiCisjZGVmaW5lIGZ3MjMwMGlweF9WRVJTSU9OX1NUUklORyAiMy4wMy4yMCIKICNlbHNlCi0jZGVmaW5lIEZXX1ZFUlNJT05fU1RSSU5HICIzLjAzLjE4IgorI2RlZmluZSBGV19WRVJTSU9OX1NUUklORyAiMy4wMy4yMCIKICNlbmRpZgogCiAjaWZkZWYgVU5JUVVFX0ZXX05BTUUKQEAgLTM4LDEyICszOCwxMiBAQAogI2Vsc2UKIHVuc2lnbmVkIHNob3J0IHJpc2NfY29kZTAxW10gPSB7IAogI2VuZGlmCi0JMHgwNDcwLCAweDAwMDAsIDB4MDAwMCwgMHhlZTA4LCAweDAwMDAsIDB4MDAwMywgMHgwMDAzLCAweDAwMTIsCisJMHgwNDcwLCAweDAwMDAsIDB4MDAwMCwgMHhmMDkxLCAweDAwMDAsIDB4MDAwMywgMHgwMDAzLCAweDAwMTQsCiAJMHgwMTM3LCAweDIwNDMsIDB4NGY1MCwgMHg1OTUyLCAweDQ5NDcsIDB4NDg1NCwgMHgyMDMyLCAweDMwMzAsCiAJMHgzMTIwLCAweDUxNGMsIDB4NGY0NywgMHg0OTQzLCAweDIwNDMsIDB4NGY1MiwgMHg1MDRmLCAweDUyNDEsCiAJMHg1NDQ5LCAweDRmNGUsIDB4MjA0OSwgMHg1MzUwLCAweDMyMzMsIDB4MzAzMCwgMHgyMDQ2LCAweDY5NzIsCiAJMHg2ZDc3LCAweDYxNzIsIDB4NjUyMCwgMHgyMDU2LCAweDY1NzIsIDB4NzM2OSwgMHg2ZjZlLCAweDIwMzAsCi0JMHgzMzJlLCAweDMwMzMsIDB4MmUzMSwgMHgzODIwLCAweDIwMjAsIDB4MjAyMCwgMHgyNDAwLCAweDIwYTksCisJMHgzMzJlLCAweDMwMzMsIDB4MmUzMiwgMHgzMDIwLCAweDIwMjAsIDB4MjAyMCwgMHgyNDAwLCAweDIwYTksCiAJMHgwMDBmLCAweDIwMDEsIDB4MDAwMCwgMHg0MDBmLCAweDIwOTEsIDB4MjIwMCwgMHgyMGE5LCAweDAwMGYsCiAJMHgyMDAxLCAweDAwMDAsIDB4NDAwZiwgMHgyMDkxLCAweDI0MDAsIDB4MjBhOSwgMHgwMDBmLCAweDIwMDEsCiAJMHgwMDAwLCAweDQwMGYsIDB4MjA5MSwgMHgyNjAwLCAweDIwYTksIDB4MDAwZiwgMHgyMDAxLCAweDAwMDAsCkBAIC01MiwxNzMgKzUyLDE3MyBAQAogCTB4MmMwMCwgMHgyMGE5LCAweDAwMGYsIDB4MjAwMSwgMHgwMDAwLCAweDQwMGYsIDB4MjA5MSwgMHgyZTAwLAogCTB4MjBhOSwgMHgwMDBmLCAweDIwMDEsIDB4MDAwMCwgMHg0MDBmLCAweDIwOTEsIDB4MjAwMCwgMHgyMDAxLAogCTB4MDAwMCwgMHgyMGMxLCAweDAwMDQsIDB4MjBjOSwgMHgxYmZmLCAweDIwNTksIDB4MDAwMCwgMHgyYjc4LAotCTB4Nzg4MywgMHgwMDA0LCAweDIwODksIDB4MmRhYywgMHgyMDUxLCAweDE4MDAsIDB4MmE3MCwgMHgyMGUxLAorCTB4Nzg4MywgMHgwMDA0LCAweDIwODksIDB4MmQ5MywgMHgyMDUxLCAweDE4MDAsIDB4MmE3MCwgMHgyMGUxLAogCTB4MDAwMSwgMHgyMGU5LCAweDAwMDEsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MGU1MiwgMHgyMDI5LAogCTB4NGQwMCwgMHgyMDMxLCAweGZmZmYsIDB4MjAzOSwgMHg0Y2QwLCAweDIwMjEsIDB4MDIwMCwgMHgyMGU5LAogCTB4MDAwMSwgMHgyMGExLCAweDAwMDAsIDB4MjBhOSwgMHgwODAwLCAweDkwMGUsIDB4NDEwNCwgMHgyMGU5LAogCTB4MDAwMSwgMHgyMGExLCAweDEwMDAsIDB4OTAwZSwgMHgyMDAxLCAweDBjYzAsIDB4OTA4NCwgMHgwZmZmLAogCTB4MjBhOCwgMHg0MTA0LCAweDIwMDEsIDB4MDAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDEyMCwgMHgyMWE4LAogCTB4NDEwNCwgMHg4MDAxLCAweDFkZTAsIDB4NzU2ZSwgMHg3NjcyLCAweDc3NmEsIDB4NzQ3NiwgMHg3NDdhLAotCTB4MDBlNiwgMHgyMDcxLCAweDFhZDIsIDB4MjQ3MiwgMHgwMGVlLCAweDIwYTEsIDB4MWNkMCwgMHg3MTcwLAorCTB4MDBlNiwgMHgyMDcxLCAweDFhZDEsIDB4MjQ3MiwgMHgwMGVlLCAweDIwYTEsIDB4MWNkMCwgMHg3MTcwLAogCTB4ODEwZCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwgMHg5MThjLCAweDAwMGYsIDB4MjAwMSwgMHgwMDAxLAogCTB4OTExMiwgMHg5MDBlLCAweDIxYTgsIDB4NDEwNCwgMHg4MjExLCAweDFkZTAsIDB4NzE3MCwgMHgzNDAwLAogCTB4ODAwMSwgMHg5MTAyLCAweDAxMjAsIDB4MDIxOCwgMHgyMGE4LCAweDkwMGUsIDB4NDEwNCwgMHgyMDA5LAogCTB4MTgwMCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwgMHg4MTBkLCAweDgxMGQsIDB4OTE4YywgMHgwMDFmLAogCTB4MjAwMSwgMHgwMDAxLCAweDkxMTIsIDB4MjBlOSwgMHgwMDAxLCAweDIwYTEsIDB4MDgwMCwgMHg5MDBlLAogCTB4MjBhOSwgMHgwODAwLCAweDQxMDQsIDB4ODIxMSwgMHgxZGQ4LCAweDA4MGMsIDB4MGYyNiwgMHgwODBjLAotCTB4NjEzNSwgMHgwODBjLCAweGIwOTcsIDB4MDgwYywgMHgxMGRkLCAweDA4MGMsIDB4MTJmYywgMHgwODBjLAotCTB4MWMwMCwgMHgwODBjLCAweDBkNTcsIDB4MDgwYywgMHgxMDYyLCAweDA4MGMsIDB4MzRhYywgMHgwODBjLAotCTB4Nzg2MiwgMHgwODBjLCAweDZhYjYsIDB4MDgwYywgMHg4OTM1LCAweDA4MGMsIDB4ODYxNiwgMHgwODBjLAotCTB4MjRkOCwgMHgwODBjLCAweDkxZTEsIDB4MDgwYywgMHg3ZjMyLCAweDA4MGMsIDB4MjMxMSwgMHgwODBjLAotCTB4MjQ0NSwgMHgwODBjLCAweDI0Y2QsIDB4MjA5MSwgMHgzMDA5LCAweDc4ODMsIDB4MDAwMCwgMHgxMDA0LAorCTB4NjEzYywgMHgwODBjLCAweGIyNjksIDB4MDgwYywgMHgxMGRkLCAweDA4MGMsIDB4MTJmYywgMHgwODBjLAorCTB4MWJkNywgMHgwODBjLCAweDBkNTcsIDB4MDgwYywgMHgxMDYyLCAweDA4MGMsIDB4MzRiNiwgMHgwODBjLAorCTB4Nzk0NiwgMHgwODBjLCAweDZiN2MsIDB4MDgwYywgMHg4YTY5LCAweDA4MGMsIDB4ODc0YSwgMHgwODBjLAorCTB4MjRiNywgMHgwODBjLCAweDkzYTUsIDB4MDgwYywgMHg4MDY2LCAweDA4MGMsIDB4MjJlOCwgMHgwODBjLAorCTB4MjQxYywgMHgwODBjLCAweDI0YWMsIDB4MjA5MSwgMHgzMDA5LCAweDc4ODMsIDB4MDAwMCwgMHgxMDA0LAogCTB4MDkxZiwgMHg3ODgwLCAweDkwODYsIDB4MDAwMiwgMHgxMTkwLCAweDc4ODMsIDB4NDAwMCwgMHg3ODM3LAogCTB4NDAwMCwgMHg3ODMzLCAweDAwMTAsIDB4MGUwNCwgMHgwOTEzLCAweDIwOTEsIDB4NTAwMCwgMHgyMDkxLAogCTB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHgyMDcxLAogCTB4MTgwMCwgMHg3MDAzLCAweDAwMDAsIDB4MjA3MSwgMHgxODAwLCAweDcwMDAsIDB4OTA4ZSwgMHgwMDAzLAotCTB4MTE3OCwgMHgwODBjLCAweDRjYWUsIDB4MDgwYywgMHgzNGQzLCAweDA4MGMsIDB4NzhkMywgMHgwODBjLAotCTB4NzA1NCwgMHgwODBjLCAweDhhMWMsIDB4MDgwYywgMHg4NjQyLCAweDA4MGMsIDB4MmNmNiwgMHgwYzU4LAorCTB4MTE3OCwgMHgwODBjLCAweDRkMDksIDB4MDgwYywgMHgzNGRkLCAweDA4MGMsIDB4NzliNywgMHgwODBjLAorCTB4NzEyMiwgMHgwODBjLCAweDhiNTAsIDB4MDgwYywgMHg4Nzc2LCAweDA4MGMsIDB4MmNkZCwgMHgwYzU4LAogCTB4MDAwYiwgMHgwYzc4LCAweDA5NDQsIDB4MDk0NSwgMHgwYWUwLCAweDA5NDIsIDB4MGJhMCwgMHgwZDU2LAogCTB4MGQ1NiwgMHgwZDU2LCAweDA4MGMsIDB4MGRjNSwgMHgwMDA1LCAweDAxMjYsIDB4MDBmNiwgMHgyMDkxLAogCTB4ODAwMCwgMHg3MDAwLCAweDkwODYsIDB4MDAwMSwgMHgxOTA0LCAweDBhYjMsIDB4MDgwYywgMHgwZTk0LAotCTB4MDgwYywgMHg3NTY5LCAweDAxNTAsIDB4MDgwYywgMHg3NThjLCAweDE1YTAsIDB4MjA3OSwgMHgwMTAwLAotCTB4NzgyOCwgMHg5MDg1LCAweDE4MDAsIDB4NzgyYSwgMHgwNDY4LCAweDA4MGMsIDB4NzQ5NSwgMHg3MDAwLAorCTB4MDgwYywgMHg3NjM3LCAweDAxNTAsIDB4MDgwYywgMHg3NjVhLCAweDE1YTAsIDB4MjA3OSwgMHgwMTAwLAorCTB4NzgyOCwgMHg5MDg1LCAweDE4MDAsIDB4NzgyYSwgMHgwNDY4LCAweDA4MGMsIDB4NzU2MywgMHg3MDAwLAogCTB4OTA4NiwgMHgwMDAxLCAweDE5MDQsIDB4MGFiMywgMHg3MDk4LCAweDkwODYsIDB4MDAyOSwgMHgxOTA0LAotCTB4MGFiMywgMHgwODBjLCAweDg1ZmYsIDB4MDgwYywgMHg4NWYxLCAweDIwMDEsIDB4MDE2MSwgMHgyMDAzLAorCTB4MGFiMywgMHgwODBjLCAweDg3MzMsIDB4MDgwYywgMHg4NzI1LCAweDIwMDEsIDB4MDE2MSwgMHgyMDAzLAogCTB4MDAwMSwgMHgyMDc5LCAweDAxMDAsIDB4NzgyNywgMHhmZmZmLCAweDdhMjgsIDB4OTI5NSwgMHg1ZTJmLAotCTB4N2EyYSwgMHgyMDExLCAweDczZTQsIDB4MDgwYywgMHg4NzA5LCAweDIwMTEsIDB4NzNkNywgMHgwODBjLAotCTB4ODdlMywgMHgyMDExLCAweDVmOTAsIDB4MDgwYywgMHg4NzA5LCAweDIwMTEsIDB4ODAzMCwgMHg5MDFlLAotCTB4NzM5NiwgMHgwNGQwLCAweDA4MGMsIDB4NTgzZCwgMHgyMDc5LCAweDAxMDAsIDB4Nzg0NCwgMHg5MDA1LAotCTB4MTkwNCwgMHgwYWIzLCAweDIwMTEsIDB4NWY5MCwgMHgwODBjLCAweDg3MDksIDB4MjAxMSwgMHg3M2U0LAotCTB4MDgwYywgMHg4NzA5LCAweDIwMTEsIDB4NzNkNywgMHgwODBjLCAweDg3ZTMsIDB4MjAwMSwgMHgwMjY1LAorCTB4N2EyYSwgMHgyMDExLCAweDc0YjIsIDB4MDgwYywgMHg4ODNkLCAweDIwMTEsIDB4NzRhNSwgMHgwODBjLAorCTB4ODkxNywgMHgyMDExLCAweDVmOTcsIDB4MDgwYywgMHg4ODNkLCAweDIwMTEsIDB4ODAzMCwgMHg5MDFlLAorCTB4NzM5NiwgMHgwNGQwLCAweDA4MGMsIDB4NTgzZiwgMHgyMDc5LCAweDAxMDAsIDB4Nzg0NCwgMHg5MDA1LAorCTB4MTkwNCwgMHgwYWIzLCAweDIwMTEsIDB4NWY5NywgMHgwODBjLCAweDg4M2QsIDB4MjAxMSwgMHg3NGIyLAorCTB4MDgwYywgMHg4ODNkLCAweDIwMTEsIDB4NzRhNSwgMHgwODBjLCAweDg5MTcsIDB4MjAwMSwgMHgwMjY1LAogCTB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHg3ODQwLCAweDkwODQsIDB4ZmZmYiwgMHg3ODQyLAotCTB4MjAwMSwgMHgxOWE4LCAweDIwMDQsIDB4OTAwNSwgMHgxMTQwLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLAotCTB4MDgwYywgMHg2MGRkLCAweDAwY2UsIDB4MDgwNCwgMHgwYWIzLCAweDc4MGYsIDB4MDA2YiwgMHg3YTI4LAotCTB4MDgwYywgMHg3NTcxLCAweDAxMTgsIDB4OTI5NSwgMHg1ZTJmLCAweDAwMTAsIDB4OTI5NSwgMHg0MDJmLAotCTB4N2EyYSwgMHgyMDExLCAweDgwMTAsIDB4NzNkOCwgMHgyMDAxLCAweDE5YTksIDB4MjAwMywgMHgwMDAxLAotCTB4MDgwYywgMHgyYjliLCAweDA4MGMsIDB4NGJlOSwgMHg3MjQ4LCAweGMyODQsIDB4NzI0YSwgMHgyMDAxLAotCTB4MTgwYywgMHgyMDBjLCAweGMxYWMsIDB4YzFjYywgMHgyMTAyLCAweDA4MGMsIDB4YTdkZSwgMHgyMDExLAotCTB4MDAwNCwgMHgwODBjLCAweGNlNjYsIDB4MDgwYywgMHg2OTQwLCAweDA4MGMsIDB4NzU2OSwgMHgxMTIwLAotCTB4MDgwYywgMHgyYmRmLCAweDAyZTAsIDB4MDQwMCwgMHgwODBjLCAweDYwZTQsIDB4MDE0MCwgMHg3MDk3LAotCTB4MDAwMSwgMHg3MGQzLCAweDAwMDAsIDB4MDgwYywgMHg1YTBhLCAweDA4MDQsIDB4MGFiMywgMHgwODBjLAotCTB4NTdkMywgMHhkMDk0LCAweDAxODgsIDB4MjAxMSwgMHgxODBjLCAweDIyMDQsIDB4YzBjZCwgMHgyMDEyLAotCTB4MDgwYywgMHg1N2Q3LCAweGQwZDQsIDB4MTExOCwgMHgwODBjLCAweDJiZGYsIDB4MTI3MCwgMHgyMDExLAotCTB4MTgwYywgMHgyMjA0LCAweGMwYmMsIDB4MDBhOCwgMHgwODBjLCAweDU3ZDcsIDB4ZDBkNCwgMHgxZGI4LAorCTB4MjAwMSwgMHgxOWE3LCAweDIwMDQsIDB4OTAwNSwgMHgxMTQwLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLAorCTB4MDgwYywgMHg2MGU0LCAweDAwY2UsIDB4MDgwNCwgMHgwYWIzLCAweDc4MGYsIDB4MDA2YiwgMHg3YTI4LAorCTB4MDgwYywgMHg3NjNmLCAweDAxMTgsIDB4OTI5NSwgMHg1ZTJmLCAweDAwMTAsIDB4OTI5NSwgMHg0MDJmLAorCTB4N2EyYSwgMHgyMDExLCAweDgwMTAsIDB4NzNkOCwgMHgyMDAxLCAweDE5YTgsIDB4MjAwMywgMHgwMDAxLAorCTB4MDgwYywgMHgyYjgyLCAweDA4MGMsIDB4NGM0NCwgMHg3MjQ4LCAweGMyODQsIDB4NzI0YSwgMHgyMDAxLAorCTB4MTgwYywgMHgyMDBjLCAweGMxYWMsIDB4YzFjYywgMHgyMTAyLCAweDA4MGMsIDB4YTliMCwgMHgyMDExLAorCTB4MDAwNCwgMHgwODBjLCAweGQwZTgsIDB4MDgwYywgMHg2OTQ3LCAweDA4MGMsIDB4NzYzNywgMHgxMTIwLAorCTB4MDgwYywgMHgyYmM2LCAweDAyZTAsIDB4MDQwMCwgMHgwODBjLCAweDYwZWIsIDB4MDE0MCwgMHg3MDk3LAorCTB4MDAwMSwgMHg3MGQzLCAweDAwMDAsIDB4MDgwYywgMHg1YTExLCAweDA4MDQsIDB4MGFiMywgMHgwODBjLAorCTB4NTdkNSwgMHhkMDk0LCAweDAxODgsIDB4MjAxMSwgMHgxODBjLCAweDIyMDQsIDB4YzBjZCwgMHgyMDEyLAorCTB4MDgwYywgMHg1N2Q5LCAweGQwZDQsIDB4MTExOCwgMHgwODBjLCAweDJiYzYsIDB4MTI3MCwgMHgyMDExLAorCTB4MTgwYywgMHgyMjA0LCAweGMwYmMsIDB4MDBhOCwgMHgwODBjLCAweDU3ZDksIDB4ZDBkNCwgMHgxZGI4LAogCTB4MjAxMSwgMHgxODBjLCAweDIyMDQsIDB4YzBiZCwgMHgwMDYwLCAweDIwMTEsIDB4MTgwYywgMHgyMjA0LAotCTB4YzBiZCwgMHgyMDEyLCAweDA4MGMsIDB4NmE4YSwgMHgxMTI4LCAweGQwYTQsIDB4MDExOCwgMHgyMjA0LAotCTB4YzBmZCwgMHgyMDEyLCAweDA4MGMsIDB4NmE1MCwgMHgwMTIwLCAweDdhMGMsIDB4YzJiNCwgMHg3YTBlLAotCTB4MDBhOCwgMHg3MDdmLCAweDAwMDAsIDB4MDgwYywgMHg3NTY5LCAweDExMzAsIDB4NzBiMCwgMHg5MDA1LAotCTB4MTE2OCwgMHgwODBjLCAweGQyYTksIDB4MDA1MCwgMHgwODBjLCAweGQyYTksIDB4NzBkYywgMHhkMDljLAotCTB4MTEyOCwgMHg3MGIwLCAweDkwMDUsIDB4MDExMCwgMHgwODBjLCAweDYwYmEsIDB4NzBlNywgMHgwMDAwLAotCTB4NzBlMywgMHgwMDAwLCAweDcwYTcsIDB4MDAwMCwgMHgwODBjLCAweDJiZTcsIDB4MDIyOCwgMHgyMDExLAotCTB4MDEwMSwgMHgyMjA0LCAweGMwYzQsIDB4MjAxMiwgMHg3MmRjLCAweDA4MGMsIDB4NzU2OSwgMHgxMTc4LAotCTB4OTAxNiwgMHgwMDE2LCAweDA4MGMsIDB4MjlhYywgMHgyMDE5LCAweDE5NmUsIDB4MjExYSwgMHgwMDFlLAorCTB4YzBiZCwgMHgyMDEyLCAweDA4MGMsIDB4NmE5YiwgMHgxMTI4LCAweGQwYTQsIDB4MDExOCwgMHgyMjA0LAorCTB4YzBmZCwgMHgyMDEyLCAweDA4MGMsIDB4NmE2MSwgMHgwMTIwLCAweDdhMGMsIDB4YzJiNCwgMHg3YTBlLAorCTB4MDBhOCwgMHg3MDdmLCAweDAwMDAsIDB4MDgwYywgMHg3NjM3LCAweDExMzAsIDB4NzBiMCwgMHg5MDA1LAorCTB4MTE2OCwgMHgwODBjLCAweGQ1MmIsIDB4MDA1MCwgMHgwODBjLCAweGQ1MmIsIDB4NzBkYywgMHhkMDljLAorCTB4MTEyOCwgMHg3MGIwLCAweDkwMDUsIDB4MDExMCwgMHgwODBjLCAweDYwYzEsIDB4NzBlNywgMHgwMDAwLAorCTB4NzBlMywgMHgwMDAwLCAweDcwYTcsIDB4MDAwMCwgMHgwODBjLCAweDJiY2UsIDB4MDIyOCwgMHgyMDExLAorCTB4MDEwMSwgMHgyMjA0LCAweGMwYzQsIDB4MjAxMiwgMHg3MmRjLCAweDA4MGMsIDB4NzYzNywgMHgxMTc4LAorCTB4OTAxNiwgMHgwMDE2LCAweDA4MGMsIDB4Mjk4YiwgMHgyMDE5LCAweDE5NmQsIDB4MjExYSwgMHgwMDFlLAogCTB4NzA1ZiwgMHhmZmZmLCAweDcwNjMsIDB4MDBlZiwgMHg3MDgzLCAweDAwMDAsIDB4MDAyMCwgMHgyMDE5LAotCTB4MTk2ZSwgMHgyMDFiLCAweDAwMDAsIDB4MjA3OSwgMHgxODQ3LCAweDc4MDQsIDB4ZDBhYywgMHgwMTA4LAotCTB4YzI5NSwgMHg3MmRlLCAweDA4MGMsIDB4NzU2OSwgMHgwMTE4LCAweDkyOTYsIDB4MDAwNCwgMHgwNTQ4LAotCTB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4Y2U2NiwgMHg3MGFiLCAweDAwMDAsIDB4NzBhZiwgMHhmZmZmLAorCTB4MTk2ZCwgMHgyMDFiLCAweDAwMDAsIDB4MjA3OSwgMHgxODQ3LCAweDc4MDQsIDB4ZDBhYywgMHgwMTA4LAorCTB4YzI5NSwgMHg3MmRlLCAweDA4MGMsIDB4NzYzNywgMHgwMTE4LCAweDkyOTYsIDB4MDAwNCwgMHgwNTQ4LAorCTB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4ZDBlOCwgMHg3MGFiLCAweDAwMDAsIDB4NzBhZiwgMHhmZmZmLAogCTB4NzAwMywgMHgwMDAyLCAweDIwNzksIDB4MDEwMCwgMHg3ODI3LCAweDAwMDMsIDB4NzgyOCwgMHg5MDg1LAotCTB4MDAwMywgMHg3ODJhLCAweDAwZmUsIDB4MDgwYywgMHgzMDE5LCAweDIwMTEsIDB4MDAwNSwgMHgwODBjLAotCTB4YThlZCwgMHgwODBjLCAweDk4ZWQsIDB4MDgwYywgMHg3NTY5LCAweDAxNDgsIDB4MDBjNiwgMHgyMDYxLAotCTB4MDEwMCwgMHgwMDE2LCAweDA4MGMsIDB4MjlhYywgMHg2MWUyLCAweDAwMWUsIDB4MDBjZSwgMHgwMTJlLAorCTB4MDAwMywgMHg3ODJhLCAweDAwZmUsIDB4MDgwYywgMHgzMDAwLCAweDIwMTEsIDB4MDAwNSwgMHgwODBjLAorCTB4YWFiZiwgMHgwODBjLCAweDlhYjEsIDB4MDgwYywgMHg3NjM3LCAweDAxNDgsIDB4MDBjNiwgMHgyMDYxLAorCTB4MDEwMCwgMHgwMDE2LCAweDA4MGMsIDB4Mjk4YiwgMHg2MWUyLCAweDAwMWUsIDB4MDBjZSwgMHgwMTJlLAogCTB4MDQyMCwgMHg3MGFiLCAweDAwMDAsIDB4NzBhZiwgMHhmZmZmLCAweDcwMDMsIDB4MDAwMiwgMHgwMGY2LAogCTB4MjA3OSwgMHgwMTAwLCAweDc4MjcsIDB4MDAwMywgMHg3ODI4LCAweDkwODUsIDB4MDAwMywgMHg3ODJhLAotCTB4MDBmZSwgMHgyMDExLCAweDAwMDUsIDB4MDgwYywgMHhhOGVkLCAweDA4MGMsIDB4OThlZCwgMHgwODBjLAotCTB4NzU2OSwgMHgwMTQ4LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDAwMTYsIDB4MDgwYywgMHgyOWFjLAorCTB4MDBmZSwgMHgyMDExLCAweDAwMDUsIDB4MDgwYywgMHhhYWJmLCAweDA4MGMsIDB4OWFiMSwgMHgwODBjLAorCTB4NzYzNywgMHgwMTQ4LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDAwMTYsIDB4MDgwYywgMHgyOThiLAogCTB4NjFlMiwgMHgwMDFlLCAweDAwY2UsIDB4MDBmZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGI2LAotCTB4MDgwYywgMHg3NTY5LCAweDExMTgsIDB4MjBhOSwgMHgwODAwLCAweDAwMTAsIDB4MjBhOSwgMHgwNzgyLAotCTB4MDgwYywgMHg3NTY5LCAweDExMTAsIDB4OTAwZSwgMHgwMDEwLCAweDIwMDksIDB4MDA3ZSwgMHg4NmZmLAorCTB4MDgwYywgMHg3NjM3LCAweDExMTgsIDB4MjBhOSwgMHgwODAwLCAweDAwMTAsIDB4MjBhOSwgMHgwNzgyLAorCTB4MDgwYywgMHg3NjM3LCAweDExMTAsIDB4OTAwZSwgMHgwMDEwLCAweDIwMDksIDB4MDA3ZSwgMHg4NmZmLAogCTB4MDEzOCwgMHg5MTgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDVkLCAweDAxMTAsIDB4YjgwMCwgMHhkMGJjLAotCTB4MDkwYywgMHgzMzQyLCAweDgxMDgsIDB4MWYwNCwgMHgwYWM3LCAweDcwN2YsIDB4MDAwMCwgMHg3MDgwLAorCTB4MDkwYywgMHgzMzRjLCAweDgxMDgsIDB4MWYwNCwgMHgwYWM3LCAweDcwN2YsIDB4MDAwMCwgMHg3MDgwLAogCTB4OTA4NCwgMHgwMGZmLCAweDcwODIsIDB4NzBiMywgMHgwMDAwLCAweDAwYmUsIDB4MDBjZSwgMHgwMDA1LAogCTB4MDBiNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDAwLCAweDkwODYsIDB4MDAwMiwgMHgxOTA0LAotCTB4MGI5ZCwgMHg3MGFjLCAweDkwODYsIDB4ZmZmZiwgMHgwMTMwLCAweDA4MGMsIDB4MzAxOSwgMHgwODBjLAotCTB4OThlZCwgMHgwODA0LCAweDBiOWQsIDB4NzBkYywgMHhkMGFjLCAweDExMTAsIDB4ZDA5YywgMHgwNTU4LAorCTB4MGI5ZCwgMHg3MGFjLCAweDkwODYsIDB4ZmZmZiwgMHgwMTMwLCAweDA4MGMsIDB4MzAwMCwgMHgwODBjLAorCTB4OWFiMSwgMHgwODA0LCAweDBiOWQsIDB4NzBkYywgMHhkMGFjLCAweDExMTAsIDB4ZDA5YywgMHgwNTU4LAogCTB4ZDA4NCwgMHgwNTQ4LCAweDAwMDYsIDB4MjAwMSwgMHgwMTAzLCAweDIwMDMsIDB4MDAyYiwgMHgwMDBlLAotCTB4ZDA4YywgMHgwNTA4LCAweDA4MGMsIDB4MzNhNSwgMHgxMWQwLCAweDcwZTAsIDB4OTA4NiwgMHhmZmZmLAotCTB4MDFiMCwgMHgwODBjLCAweDMxYjIsIDB4MDgwYywgMHg5OGVkLCAweDcwZGMsIDB4ZDA5NCwgMHgxOTA0LAotCTB4MGI5ZCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHhkNTYxLCAweDAxMTAsIDB4MjAxMSwgMHgwMDAzLAotCTB4OTAxZSwgMHgwODBjLCAweDMxZWMsIDB4MDgwYywgMHg5OGVkLCAweDA4MDQsIDB4MGI5ZCwgMHg3MGU0LAorCTB4ZDA4YywgMHgwNTA4LCAweDA4MGMsIDB4MzNhZiwgMHgxMWQwLCAweDcwZTAsIDB4OTA4NiwgMHhmZmZmLAorCTB4MDFiMCwgMHgwODBjLCAweDMxYmMsIDB4MDgwYywgMHg5YWIxLCAweDcwZGMsIDB4ZDA5NCwgMHgxOTA0LAorCTB4MGI5ZCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHhkN2UzLCAweDAxMTAsIDB4MjAxMSwgMHgwMDAzLAorCTB4OTAxZSwgMHgwODBjLCAweDMxZjYsIDB4MDgwYywgMHg5YWIxLCAweDA4MDQsIDB4MGI5ZCwgMHg3MGU0LAogCTB4OTAwNSwgMHgxOTA0LCAweDBiOWQsIDB4NzBhOCwgMHg5MDA1LCAweDE5MDQsIDB4MGI5ZCwgMHg3MGRjLAotCTB4ZDBhNCwgMHgwMTE4LCAweGQwYjQsIDB4MDkwNCwgMHgwYjlkLCAweDA4MGMsIDB4NmE1MCwgMHgxOTA0LAotCTB4MGI5ZCwgMHgwODBjLCAweDZhYTMsIDB4MTkwNCwgMHgwYjlkLCAweDA4MGMsIDB4NmE4YSwgMHgwMWMwLAotCTB4MDE1NiwgMHgwMGM2LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDAwMTYsIDB4MDgwYywgMHg2NzFkLAorCTB4ZDBhNCwgMHgwMTE4LCAweGQwYjQsIDB4MDkwNCwgMHgwYjlkLCAweDA4MGMsIDB4NmE2MSwgMHgxOTA0LAorCTB4MGI5ZCwgMHgwODBjLCAweDZhYjQsIDB4MTkwNCwgMHgwYjlkLCAweDA4MGMsIDB4NmE5YiwgMHgwMWMwLAorCTB4MDE1NiwgMHgwMGM2LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDAwMTYsIDB4MDgwYywgMHg2NzI0LAogCTB4MTExOCwgMHhiODAwLCAweGQwZWMsIDB4MTEzOCwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHgwYjNkLAogCTB4MDBjZSwgMHgwMTVlLCAweDAwMjgsIDB4MDAxZSwgMHgwMGNlLCAweDAxNWUsIDB4MDgwNCwgMHgwYjlkLAotCTB4MDAwNiwgMHgyMDAxLCAweDAxMDMsIDB4MjAwMywgMHgwMDJiLCAweDAwMGUsIDB4MjAxMSwgMHgxOWI1LAotCTB4MDgwYywgMHgwZjk2LCAweDIwMTEsIDB4MTljZiwgMHgwODBjLCAweDBmOTYsIDB4NzAzMCwgMHhjMDhjLAorCTB4MDAwNiwgMHgyMDAxLCAweDAxMDMsIDB4MjAwMywgMHgwMDJiLCAweDAwMGUsIDB4MjAxMSwgMHgxOWI0LAorCTB4MDgwYywgMHgwZjk2LCAweDIwMTEsIDB4MTljZSwgMHgwODBjLCAweDBmOTYsIDB4NzAzMCwgMHhjMDhjLAogCTB4NzAzMiwgMHg3MDAzLCAweDAwMDMsIDB4NzBhZiwgMHhmZmZmLCAweDA4MGMsIDB4MGU3NiwgMHg5MDA2LAotCTB4MDgwYywgMHgyODNkLCAweDA4MGMsIDB4MzNhNSwgMHgwMTE4LCAweDA4MGMsIDB4NGQ4NiwgMHgwMDUwLAotCTB4MDAzNiwgMHgwMDQ2LCAweDIwMTksIDB4ZmZmZiwgMHgyMDIxLCAweDAwMDYsIDB4MDgwYywgMHg0ZGEwLAotCTB4MDA0ZSwgMHgwMDNlLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDA4MGMsIDB4NzU4YywgMHgwMTUwLAotCTB4MDgwYywgMHg3NTY5LCAweDc4MjgsIDB4MDExOCwgMHg5MDg0LCAweGUxZmYsIDB4MDAxMCwgMHg5MDg0LAotCTB4ZmZkZiwgMHg3ODJhLCAweDAwZmUsIDB4MjAwMSwgMHgxOWVhLCAweDIwMDQsIDB4OTA4NiwgMHgwMDA1LAotCTB4MTEyMCwgMHgyMDExLCAweDAwMDAsIDB4MDgwYywgMHhhOGVkLCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLAotCTB4YThmNywgMHgwODBjLCAweDk4ZWQsIDB4MDgwYywgMHg5YTBmLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LAorCTB4MDgwYywgMHgyODFjLCAweDA4MGMsIDB4MzNhZiwgMHgwMTE4LCAweDA4MGMsIDB4NGRlMSwgMHgwMDUwLAorCTB4MDAzNiwgMHgwMDQ2LCAweDIwMTksIDB4ZmZmZiwgMHgyMDIxLCAweDAwMDYsIDB4MDgwYywgMHg0ZGZiLAorCTB4MDA0ZSwgMHgwMDNlLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDA4MGMsIDB4NzY1YSwgMHgwMTUwLAorCTB4MDgwYywgMHg3NjM3LCAweDc4MjgsIDB4MDExOCwgMHg5MDg0LCAweGUxZmYsIDB4MDAxMCwgMHg5MDg0LAorCTB4ZmZkZiwgMHg3ODJhLCAweDAwZmUsIDB4MjAwMSwgMHgxOWU5LCAweDIwMDQsIDB4OTA4NiwgMHgwMDA1LAorCTB4MTEyMCwgMHgyMDExLCAweDAwMDAsIDB4MDgwYywgMHhhYWJmLCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLAorCTB4YWFjOSwgMHgwODBjLCAweDlhYjEsIDB4MDgwYywgMHg5YmQzLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LAogCTB4MDAxNiwgMHgwMDQ2LCAweDAwZjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgwMTAwLAotCTB4NzkwNCwgMHg5MThjLCAweGZmZmQsIDB4NzkwNiwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg2MGEzLAorCTB4NzkwNCwgMHg5MThjLCAweGZmZmQsIDB4NzkwNiwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg2MGFhLAogCTB4Nzk0MCwgMHg5MThjLCAweDAwMTAsIDB4Nzk0MiwgMHg3OTI0LCAweGQxYjQsIDB4MDExMCwgMHg3ODI3LAogCTB4MDA0MCwgMHhkMTljLCAweDAxMTAsIDB4NzgyNywgMHgwMDA4LCAweDAwMDYsIDB4MDAzNiwgMHgwMTU2LAotCTB4Nzk1NCwgMHhkMWFjLCAweDE5MDQsIDB4MGMyZCwgMHgyMDAxLCAweDE5YTksIDB4MjAwNCwgMHg5MDA1LAotCTB4MTUxOCwgMHgwODBjLCAweDJjNjIsIDB4MTE0OCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyYmNhLAotCTB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MmJhZCwgMHgwMGI4LCAweDA4MGMsIDB4MmM2YSwgMHgxMTM4LAotCTB4OTAwNiwgMHgwODBjLCAweDJiY2EsIDB4OTAwNiwgMHgwODBjLCAweDJiYWQsIDB4MDA2OCwgMHgwODBjLAotCTB4MmM3MiwgMHgxZDUwLCAweDIwMDEsIDB4MTk5OSwgMHgyMDA0LCAweGQwZmMsIDB4MDEwOCwgMHgwMDIwLAotCTB4MDgwYywgMHgyOWQ4LCAweDA4MDQsIDB4MGQwZCwgMHgwODBjLCAweDc1N2EsIDB4MDE0OCwgMHgwODBjLAotCTB4NzU4YywgMHgxMTE4LCAweDA4MGMsIDB4Nzg1ZCwgMHgwMDUwLCAweDA4MGMsIDB4NzU3MSwgMHgwZGQwLAotCTB4MDgwYywgMHg3ODU4LCAweDA4MGMsIDB4Nzg0ZSwgMHgwODBjLCAweDc0OTUsIDB4MDA1OCwgMHgwODBjLAotCTB4NzU2OSwgMHgwMTQwLCAweDIwMDksIDB4MDBmOCwgMHgwODBjLCAweDYwYTMsIDB4Nzg0MywgMHgwMDkwLAorCTB4Nzk1NCwgMHhkMWFjLCAweDE5MDQsIDB4MGMyZCwgMHgyMDAxLCAweDE5YTgsIDB4MjAwNCwgMHg5MDA1LAorCTB4MTUxOCwgMHgwODBjLCAweDJjNDksIDB4MTE0OCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyYmIxLAorCTB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MmI5NCwgMHgwMGI4LCAweDA4MGMsIDB4MmM1MSwgMHgxMTM4LAorCTB4OTAwNiwgMHgwODBjLCAweDJiYjEsIDB4OTAwNiwgMHgwODBjLCAweDJiOTQsIDB4MDA2OCwgMHgwODBjLAorCTB4MmM1OSwgMHgxZDUwLCAweDIwMDEsIDB4MTk5OCwgMHgyMDA0LCAweGQwZmMsIDB4MDEwOCwgMHgwMDIwLAorCTB4MDgwYywgMHgyOWJmLCAweDA4MDQsIDB4MGQwZCwgMHgwODBjLCAweDc2NDgsIDB4MDE0OCwgMHgwODBjLAorCTB4NzY1YSwgMHgxMTE4LCAweDA4MGMsIDB4Nzk0MSwgMHgwMDUwLCAweDA4MGMsIDB4NzYzZiwgMHgwZGQwLAorCTB4MDgwYywgMHg3OTNjLCAweDA4MGMsIDB4NzkzMiwgMHgwODBjLCAweDc1NjMsIDB4MDA1OCwgMHgwODBjLAorCTB4NzYzNywgMHgwMTQwLCAweDIwMDksIDB4MDBmOCwgMHgwODBjLCAweDYwYWEsIDB4Nzg0MywgMHgwMDkwLAogCTB4Nzg0MywgMHgwMDEwLCAweDIwYTksIDB4MDljNCwgMHg3ODIwLCAweGQwOWMsIDB4MTEzOCwgMHgwODBjLAotCTB4NzU2OSwgMHgwMTM4LCAweDc4MjQsIDB4ZDBhYywgMHgxOTA0LCAweDBkMTIsIDB4MWYwNCwgMHgwYzBjLAotCTB4MDA3MCwgMHg3ODI0LCAweDA4MGMsIDB4NzU4MywgMHgwMTE4LCAweGQwYWMsIDB4MTkwNCwgMHgwZDEyLAorCTB4NzYzNywgMHgwMTM4LCAweDc4MjQsIDB4ZDBhYywgMHgxOTA0LCAweDBkMTIsIDB4MWYwNCwgMHgwYzBjLAorCTB4MDA3MCwgMHg3ODI0LCAweDA4MGMsIDB4NzY1MSwgMHgwMTE4LCAweGQwYWMsIDB4MTkwNCwgMHgwZDEyLAogCTB4OTA4NCwgMHgxODAwLCAweDBkOTgsIDB4NzAwMywgMHgwMDAxLCAweDA4MDQsIDB4MGQxMiwgMHgyMDAxLAotCTB4MDAwMSwgMHgwODBjLCAweDI4M2QsIDB4MDgwNCwgMHgwZDI1LCAweDIwMDEsIDB4MTlhOSwgMHgyMDA0LAotCTB4OTAwNSwgMHgxNTE4LCAweDA4MGMsIDB4MmM2MiwgMHgxMTQ4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MmJjYSwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyYmFkLCAweDAwYjgsIDB4MDgwYywgMHgyYzZhLAotCTB4MTEzOCwgMHg5MDA2LCAweDA4MGMsIDB4MmJjYSwgMHg5MDA2LCAweDA4MGMsIDB4MmJhZCwgMHgwMDY4LAotCTB4MDgwYywgMHgyYzcyLCAweDFkNTAsIDB4MjAwMSwgMHgxOTk5LCAweDIwMDQsIDB4ZDBmYywgMHgwMTA4LAotCTB4MDAyMCwgMHgwODBjLCAweDI5ZDgsIDB4MDgwNCwgMHgwZDBkLCAweDc4NTAsIDB4OTA4NSwgMHgwMDQwLAotCTB4Nzg1MiwgMHg3OTM4LCAweDc4NTAsIDB4OTA4NCwgMHhmYmNmLCAweDc4NTIsIDB4MDgwYywgMHgyYzdhLAorCTB4MDAwMSwgMHgwODBjLCAweDI4MWMsIDB4MDgwNCwgMHgwZDI1LCAweDIwMDEsIDB4MTlhOCwgMHgyMDA0LAorCTB4OTAwNSwgMHgxNTE4LCAweDA4MGMsIDB4MmM0OSwgMHgxMTQ4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAorCTB4MmJiMSwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyYjk0LCAweDAwYjgsIDB4MDgwYywgMHgyYzUxLAorCTB4MTEzOCwgMHg5MDA2LCAweDA4MGMsIDB4MmJiMSwgMHg5MDA2LCAweDA4MGMsIDB4MmI5NCwgMHgwMDY4LAorCTB4MDgwYywgMHgyYzU5LCAweDFkNTAsIDB4MjAwMSwgMHgxOTk4LCAweDIwMDQsIDB4ZDBmYywgMHgwMTA4LAorCTB4MDAyMCwgMHgwODBjLCAweDI5YmYsIDB4MDgwNCwgMHgwZDBkLCAweDc4NTAsIDB4OTA4NSwgMHgwMDQwLAorCTB4Nzg1MiwgMHg3OTM4LCAweDc4NTAsIDB4OTA4NCwgMHhmYmNmLCAweDc4NTIsIDB4MDgwYywgMHgyYzYxLAogCTB4OTA4NSwgMHgyMDAwLCAweDc4NTIsIDB4NzkzYSwgMHgyMGE5LCAweDAwNDYsIDB4MWQwNCwgMHgwYzY2LAotCTB4MDgwYywgMHg4N2MzLCAweDFmMDQsIDB4MGM2NiwgMHg3ODUwLCAweDkwODUsIDB4MDQwMCwgMHg5MDg0LAotCTB4ZGZiZiwgMHg3ODUyLCAweDc5M2EsIDB4MDgwYywgMHg3NTdhLCAweDAxNDgsIDB4MDgwYywgMHg3NThjLAotCTB4MTExOCwgMHgwODBjLCAweDc4NWQsIDB4MDA1MCwgMHgwODBjLCAweDc1NzEsIDB4MGRkMCwgMHgwODBjLAotCTB4Nzg1OCwgMHgwODBjLCAweDc4NGUsIDB4MDgwYywgMHg3NDk1LCAweDAwMjAsIDB4MjAwOSwgMHgwMGY4LAotCTB4MDgwYywgMHg2MGEzLCAweDIwYTksIDB4MDAyOCwgMHhhMDAxLCAweDFmMDQsIDB4MGM4YywgMHg3ODUwLAotCTB4OTA4NSwgMHgxNDAwLCAweDc4NTIsIDB4MDgwYywgMHg3NTY5LCAweDAxMjAsIDB4Nzg0MywgMHgwMDkwLAotCTB4Nzg0MywgMHgwMDEwLCAweDIwMjEsIDB4ZTY3OCwgMHgyMDE5LCAweGVhNjAsIDB4MGQwYywgMHg4N2MzLAotCTB4NzgyMCwgMHhkMDljLCAweDE1ODgsIDB4MDgwYywgMHg3NTY5LCAweDA5MDQsIDB4MGNmMiwgMHg3ODI0LAotCTB4ZDBhYywgMHgxOTA0LCAweDBkMTIsIDB4MDgwYywgMHg3NThjLCAweDE1MzAsIDB4MDA0NiwgMHgyMDIxLAotCTB4MDMyMCwgMHg4NDIxLCAweDFkZjAsIDB4MDA0ZSwgMHg3ODI3LCAweDE4MDAsIDB4MDgwYywgMHgyYzdhLAorCTB4MDgwYywgMHg4OGY3LCAweDFmMDQsIDB4MGM2NiwgMHg3ODUwLCAweDkwODUsIDB4MDQwMCwgMHg5MDg0LAorCTB4ZGZiZiwgMHg3ODUyLCAweDc5M2EsIDB4MDgwYywgMHg3NjQ4LCAweDAxNDgsIDB4MDgwYywgMHg3NjVhLAorCTB4MTExOCwgMHgwODBjLCAweDc5NDEsIDB4MDA1MCwgMHgwODBjLCAweDc2M2YsIDB4MGRkMCwgMHgwODBjLAorCTB4NzkzYywgMHgwODBjLCAweDc5MzIsIDB4MDgwYywgMHg3NTYzLCAweDAwMjAsIDB4MjAwOSwgMHgwMGY4LAorCTB4MDgwYywgMHg2MGFhLCAweDIwYTksIDB4MDAyOCwgMHhhMDAxLCAweDFmMDQsIDB4MGM4YywgMHg3ODUwLAorCTB4OTA4NSwgMHgxNDAwLCAweDc4NTIsIDB4MDgwYywgMHg3NjM3LCAweDAxMjAsIDB4Nzg0MywgMHgwMDkwLAorCTB4Nzg0MywgMHgwMDEwLCAweDIwMjEsIDB4ZTY3OCwgMHgyMDE5LCAweGVhNjAsIDB4MGQwYywgMHg4OGY3LAorCTB4NzgyMCwgMHhkMDljLCAweDE1ODgsIDB4MDgwYywgMHg3NjM3LCAweDA5MDQsIDB4MGNmMiwgMHg3ODI0LAorCTB4ZDBhYywgMHgxOTA0LCAweDBkMTIsIDB4MDgwYywgMHg3NjVhLCAweDE1MzAsIDB4MDA0NiwgMHgyMDIxLAorCTB4MDMyMCwgMHg4NDIxLCAweDFkZjAsIDB4MDA0ZSwgMHg3ODI3LCAweDE4MDAsIDB4MDgwYywgMHgyYzYxLAogCTB4NzgyNCwgMHg5MDg0LCAweDE4MDAsIDB4MTE2OCwgMHg5NDg0LCAweDBmZmYsIDB4MTE0MCwgMHgyMDAxLAogCTB4MTgxMCwgMHgyMDA0LCAweDkwODQsIDB4OTAwMCwgMHgwMTEwLCAweDA4MGMsIDB4MGQzMywgMHg4NDIxLAotCTB4MTE1OCwgMHgxZDA0LCAweDBjY2QsIDB4MDgwYywgMHg4N2MzLCAweDA4MGMsIDB4Nzg1OCwgMHgwODBjLAotCTB4Nzg0ZSwgMHg3MDAzLCAweDAwMDEsIDB4MDRmMCwgMHg4MzE5LCAweDE5NDAsIDB4MWQwNCwgMHgwY2RhLAotCTB4MDgwYywgMHg4N2MzLCAweDIwMDksIDB4MTk5YywgMHgyMTA0LCAweDkwMDUsIDB4MDExOCwgMHg4MDAxLAorCTB4MTE1OCwgMHgxZDA0LCAweDBjY2QsIDB4MDgwYywgMHg4OGY3LCAweDA4MGMsIDB4NzkzYywgMHgwODBjLAorCTB4NzkzMiwgMHg3MDAzLCAweDAwMDEsIDB4MDRmMCwgMHg4MzE5LCAweDE5NDAsIDB4MWQwNCwgMHgwY2RhLAorCTB4MDgwYywgMHg4OGY3LCAweDIwMDksIDB4MTk5YiwgMHgyMTA0LCAweDkwMDUsIDB4MDExOCwgMHg4MDAxLAogCTB4MjAwYSwgMHgxMTc4LCAweDIwMGIsIDB4MDAwYSwgMHg3ODI3LCAweDAwNDgsIDB4MjBhOSwgMHgwMDAyLAotCTB4MDgwYywgMHgyYzViLCAweDc5MjQsIDB4MDgwYywgMHgyYzdhLCAweGQxOWMsIDB4MDExMCwgMHgwODBjLAotCTB4MmI5YiwgMHgwMGQ4LCAweDA4MGMsIDB4NzU3YSwgMHgxMTQwLCAweDk0YTIsIDB4MDNlOCwgMHgxMTI4LAotCTB4MDgwYywgMHg3NTQxLCAweDcwMDMsIDB4MDAwMSwgMHgwMGE4LCAweDc4MjcsIDB4MTgwMCwgMHgwODBjLAotCTB4MmM3YSwgMHg3ODI0LCAweDA4MGMsIDB4NzU4MywgMHgwMTEwLCAweGQwYWMsIDB4MTE1OCwgMHg5MDg0LAorCTB4MDgwYywgMHgyYzQyLCAweDc5MjQsIDB4MDgwYywgMHgyYzYxLCAweGQxOWMsIDB4MDExMCwgMHgwODBjLAorCTB4MmI4MiwgMHgwMGQ4LCAweDA4MGMsIDB4NzY0OCwgMHgxMTQwLCAweDk0YTIsIDB4MDNlOCwgMHgxMTI4LAorCTB4MDgwYywgMHg3NjBmLCAweDcwMDMsIDB4MDAwMSwgMHgwMGE4LCAweDc4MjcsIDB4MTgwMCwgMHgwODBjLAorCTB4MmM2MSwgMHg3ODI0LCAweDA4MGMsIDB4NzY1MSwgMHgwMTEwLCAweGQwYWMsIDB4MTE1OCwgMHg5MDg0LAogCTB4MTgwMCwgMHgwOTUwLCAweDcwMDMsIDB4MDAwMSwgMHgwMDI4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MjgzZCwgMHgwMDc4LCAweDIwMDksIDB4MTgwYywgMHgyMTBjLCAweGQxOWMsIDB4MTEyMCwgMHg3OTA0LAorCTB4MjgxYywgMHgwMDc4LCAweDIwMDksIDB4MTgwYywgMHgyMTBjLCAweGQxOWMsIDB4MTEyMCwgMHg3OTA0LAogCTB4OTE4ZCwgMHgwMDAyLCAweDc5MDYsIDB4NzgyNywgMHgwMDQ4LCAweDc4MjgsIDB4OTA4NSwgMHgwMDI4LAotCTB4NzgyYSwgMHg3ODUwLCAweDkwODUsIDB4MDQwMCwgMHg3ODUyLCAweDIwMDEsIDB4MTlhOSwgMHgyMDAzLAorCTB4NzgyYSwgMHg3ODUwLCAweDkwODUsIDB4MDQwMCwgMHg3ODUyLCAweDIwMDEsIDB4MTlhOCwgMHgyMDAzLAogCTB4MDAwMCwgMHg5MDA2LCAweDc4ZjIsIDB4MDE1ZSwgMHgwMDNlLCAweDAwMGUsIDB4MDEyZSwgMHgwMGZlLAogCTB4MDA0ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMzYsIDB4MDA0NiwgMHgwMGI2LAotCTB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwMTU2LCAweDAwNjksIDB4MGQwYywgMHg4N2MzLAorCTB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwMTU2LCAweDAwNjksIDB4MGQwYywgMHg4OGY3LAogCTB4MDE1ZSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsIDB4MDA0ZSwgMHgwMDNlLAogCTB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4OWUsIDB4NzAwNCwgMHg5MDg2LAotCTB4MDAwMSwgMHgxMTEwLCAweDA4MGMsIDB4MzRkMywgMHgwMGVlLCAweDAwMDUsIDB4MDAwNSwgMHgyYTcwLAotCTB4MjA2MSwgMHgxOWFkLCAweDIwNjMsIDB4MDAwMywgMHg2MDA3LCAweDAwMDMsIDB4NjAwYiwgMHgwMDEyLAotCTB4NjAwZiwgMHgwMTM3LCAweDIwMDEsIDB4MTk3ZCwgMHg5MDBlLCAweDIxMDIsIDB4NzE5NiwgMHgyMDAxLAorCTB4MDAwMSwgMHgxMTEwLCAweDA4MGMsIDB4MzRkZCwgMHgwMGVlLCAweDAwMDUsIDB4MDAwNSwgMHgyYTcwLAorCTB4MjA2MSwgMHgxOWFjLCAweDIwNjMsIDB4MDAwMywgMHg2MDA3LCAweDAwMDMsIDB4NjAwYiwgMHgwMDE0LAorCTB4NjAwZiwgMHgwMTM3LCAweDIwMDEsIDB4MTk3YywgMHg5MDBlLCAweDIxMDIsIDB4NzE5NiwgMHgyMDAxLAogCTB4MDEwMCwgMHgyMDA0LCAweDkwODIsIDB4MDAwMiwgMHgwMjE4LCAweDcwNWYsIDB4ZmZmZiwgMHgwMDA4LAotCTB4NzE1ZSwgMHg3MDY3LCAweGZmZmYsIDB4NzE3ZSwgMHg3MTgyLCAweDA4MGMsIDB4ZDJhOSwgMHg3MGViLAotCTB4MDBjMCwgMHgyMDYxLCAweDE5NmQsIDB4NjAwMywgMHgwOTA5LCAweDYxMDYsIDB4NjAwYiwgMHg4ODAwLAorCTB4NzE1ZSwgMHg3MDY3LCAweGZmZmYsIDB4NzE3ZSwgMHg3MTgyLCAweDA4MGMsIDB4ZDUyYiwgMHg3MGViLAorCTB4MDBjMCwgMHgyMDYxLCAweDE5NmMsIDB4NjAwMywgMHgwOTA5LCAweDYxMDYsIDB4NjAwYiwgMHg4ODAwLAogCTB4NjAwZiwgMHgwMjAwLCAweDYwMTMsIDB4MDBmZiwgMHg2MDE3LCAweDAwMWYsIDB4NjExYSwgMHg2MDFmLAotCTB4MDdkMCwgMHgyMDYxLCAweDE5NzUsIDB4NjAwMywgMHg4MDAwLCAweDYxMDYsIDB4NjEwYSwgMHg2MDBmLAorCTB4MDdkMCwgMHgyMDYxLCAweDE5NzQsIDB4NjAwMywgMHg4MDAwLCAweDYxMDYsIDB4NjEwYSwgMHg2MDBmLAogCTB4MDIwMCwgMHg2MDEzLCAweDAwZmYsIDB4NjExNiwgMHg2MDFiLCAweDAwMDEsIDB4NjExZSwgMHgyMDYxLAotCTB4MTk4YSwgMHg2MDAzLCAweDUxNGMsIDB4NjAwNywgMHg0ZjQ3LCAweDYwMGIsIDB4NDk0MywgMHg2MDBmLAotCTB4MjAyMCwgMHgyMDAxLCAweDE4MmMsIDB4MjEwMiwgMHgwMDA1LCAweDkwMTYsIDB4MDgwYywgMHg2NzFkLAorCTB4MTk4OSwgMHg2MDAzLCAweDUxNGMsIDB4NjAwNywgMHg0ZjQ3LCAweDYwMGIsIDB4NDk0MywgMHg2MDBmLAorCTB4MjAyMCwgMHgyMDAxLCAweDE4MmMsIDB4MjEwMiwgMHgwMDA1LCAweDkwMTYsIDB4MDgwYywgMHg2NzI0LAogCTB4MTE3OCwgMHhiODA0LCAweDkwYzQsIDB4MDBmZiwgMHg5OGM2LCAweDAwMDYsIDB4MDEyOCwgMHg5MGM0LAogCTB4ZmYwMCwgMHg5OGM2LCAweDA2MDAsIDB4MTEyMCwgMHg5MTg2LCAweDAwODAsIDB4MDEwOCwgMHg4MjEwLAogCTB4ODEwOCwgMHg5MTg2LCAweDA4MDAsIDB4MWQ1MCwgMHgyMjA4LCAweDAwMDUsIDB4MjA5MSwgMHg4MDAwLApAQCAtMjI2LDIwICsyMjYsMjAgQEAKIAkweDBkYzcsIDB4MDAwNiwgMHgwMDE2LCAweDIwMDEsIDB4ODAwMiwgMHgwMDA2LCAweDIwNzksIDB4MDAwMCwKIAkweDAwMGUsIDB4Nzg4MiwgMHg3ODM2LCAweDAwMWUsIDB4Nzk4ZSwgMHgwMDBlLCAweDc4OGEsIDB4MDAwZSwKIAkweDc4ODYsIDB4MzkwMCwgMHg3ODlhLCAweDAwZDYsIDB4MjA2OSwgMHgwMzAwLCAweDY4MTgsIDB4NzhhZSwKLQkweDY4MWMsIDB4NzhiMiwgMHgyMDAxLCAweDFhMGEsIDB4MjAwNCwgMHg3OGI2LCAweDIwMDEsIDB4MWE4NywKKwkweDY4MWMsIDB4NzhiMiwgMHgyMDAxLCAweDFhMDksIDB4MjAwNCwgMHg3OGI2LCAweDIwMDEsIDB4MWE4NiwKIAkweDIwMDQsIDB4NzhiYSwgMHg2ODA4LCAweDc4YmUsIDB4MDBkZSwgMHg3ODMzLCAweDAwMTIsIDB4MjA5MSwKIAkweDUwMDAsIDB4MDE1NiwgMHgwMGQ2LCAweDAwMzYsIDB4MDAyNiwgMHgyMDc5LCAweDAzMDAsIDB4MjA2OSwKLQkweDFhYWEsIDB4N2EwOCwgMHgyMjZhLCAweDIwNjksIDB4MWFhYiwgMHg3YTE4LCAweDIyNmEsIDB4OGQ2OCwKLQkweDdhMWMsIDB4MjI2YSwgMHg3ODJjLCAweDIwMTksIDB4MWFiOCwgMHgyMDFhLCAweDIwMTksIDB4MWFiYiwKKwkweDFhYTksIDB4N2EwOCwgMHgyMjZhLCAweDIwNjksIDB4MWFhYSwgMHg3YTE4LCAweDIyNmEsIDB4OGQ2OCwKKwkweDdhMWMsIDB4MjI2YSwgMHg3ODJjLCAweDIwMTksIDB4MWFiNywgMHgyMDFhLCAweDIwMTksIDB4MWFiYSwKIAkweDkwMTYsIDB4NzgwOCwgMHhkMDljLCAweDAxNjgsIDB4NzgyMCwgMHgyMDFhLCAweDgyMTAsIDB4ODMxOCwKLQkweDkzODYsIDB4MWFkMCwgMHgwMTA4LCAweDBjYTgsIDB4NzgwOCwgMHhkMDljLCAweDAxMTAsIDB4MjAxMSwKLQkweGRlYWQsIDB4MjAxOSwgMHgxYWI5LCAweDc4MmMsIDB4MjAxYSwgMHg4MzE4LCAweDIyMWEsIDB4NzgwMywKLQkweDAwMDAsIDB4MjA2OSwgMHgxYThhLCAweDkwMWUsIDB4MjBhOSwgMHgwMDIwLCAweDdiMjYsIDB4N2EyOCwKKwkweDkzODYsIDB4MWFjZiwgMHgwMTA4LCAweDBjYTgsIDB4NzgwOCwgMHhkMDljLCAweDAxMTAsIDB4MjAxMSwKKwkweGRlYWQsIDB4MjAxOSwgMHgxYWI4LCAweDc4MmMsIDB4MjAxYSwgMHg4MzE4LCAweDIyMWEsIDB4NzgwMywKKwkweDAwMDAsIDB4MjA2OSwgMHgxYTg5LCAweDkwMWUsIDB4MjBhOSwgMHgwMDIwLCAweDdiMjYsIDB4N2EyOCwKIAkweDIyNmEsIDB4OGQ2OCwgMHg4MzE4LCAweDFmMDQsIDB4MGUyNiwgMHgwMDJlLCAweDAwM2UsIDB4MDBkZSwKIAkweDAxNWUsIDB4MjA3OSwgMHgxODAwLCAweDc4MDMsIDB4MDAwNSwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwKLQkweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDAxODAsIDB4MjAwMSwgMHgxYTFkLCAweDIwMDQsIDB4OTAwNSwKKwkweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDAxODAsIDB4MjAwMSwgMHgxYTFjLCAweDIwMDQsIDB4OTAwNSwKIAkweDAxMjgsIDB4MjAwMSwgMHgwMDhiLCAweDIwMDQsIDB4ZDBmYywgMHgwZGQ4LCAweDIwMDEsIDB4MDA4YSwKLQkweDIwMDMsIDB4MDAwMiwgMHgyMDAzLCAweDEwMDEsIDB4MDgwYywgMHg1N2UyLCAweDExMDgsIDB4MDA5OSwKKwkweDIwMDMsIDB4MDAwMiwgMHgyMDAzLCAweDEwMDEsIDB4MDgwYywgMHg1N2U0LCAweDExMDgsIDB4MDA5OSwKIAkweDBjZDgsIDB4MDAwNSwgMHg5MThjLCAweDAzZmYsIDB4MjAwMSwgMHgwMDAzLCAweDIwMDQsIDB4OTA4NCwKIAkweDA2MDAsIDB4MTExOCwgMHg5MThkLCAweDI4MDAsIDB4MDAxMCwgMHg5MThkLCAweDIwMDAsIDB4MjAwMSwKIAkweDAxN2YsIDB4MjEwMiwgMHgwMDA1LCAweDAwMjYsIDB4MDEyNiwgMHgyMDExLCAweDAwODAsIDB4MDgwYywKQEAgLTI1MSw4ICsyNTEsOCBAQAogCTB4MDgwYywgMHgwZjAwLCAweDAwMmUsIDB4MDAwNSwgMHgwMDI2LCAweDA4MGMsIDB4MGVmYiwgMHgwMTI4LAogCTB4ZDBhNCwgMHgxMTM4LCAweDIwMTEsIDB4Y2RkNSwgMHgwMDEwLCAweDIwMTEsIDB4MDA4MCwgMHgwODBjLAogCTB4MGYwMCwgMHgwMDJlLCAweDAwMDUsIDB4MDAyNiwgMHg3MGVmLCAweDAwMDAsIDB4MDgwYywgMHgwZWZiLAotCTB4MTE0OCwgMHgwODBjLCAweDJjNzIsIDB4MTExOCwgMHgyMDExLCAweDg0ODQsIDB4MDA1OCwgMHgyMDExLAotCTB4ODI4MiwgMHgwMDQwLCAweDA4MGMsIDB4MmM3MiwgMHgxMTE4LCAweDIwMTEsIDB4Y2RjNSwgMHgwMDEwLAorCTB4MTE0OCwgMHgwODBjLCAweDJjNTksIDB4MTExOCwgMHgyMDExLCAweDg0ODQsIDB4MDA1OCwgMHgyMDExLAorCTB4ODI4MiwgMHgwMDQwLCAweDA4MGMsIDB4MmM1OSwgMHgxMTE4LCAweDIwMTEsIDB4Y2RjNSwgMHgwMDEwLAogCTB4MjAxMSwgMHhjYWMyLCAweDA4MGMsIDB4MGYwMCwgMHgwMDJlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDA2LAogCTB4MjA3MSwgMHgxODAwLCAweGQwYjQsIDB4NzBlOCwgMHgxMTEwLCAweGMwZTQsIDB4MDA0OCwgMHgwMDA2LAogCTB4M2IwMCwgMHg5MDg0LCAweGZmM2YsIDB4MjBkOCwgMHgwMDBlLCAweDcwZWYsIDB4MDAwMCwgMHhjMGU1LApAQCAtMzA1LDcgKzMwNSw3IEBACiAJMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMTYsIDB4ODkwZSwgMHg4MTBlLCAweDgxMGYsCiAJMHg5MTg0LCAweDAwM2YsIDB4YTg2MiwgMHg5MTg0LCAweGZmYzAsIDB4YTg1ZSwgMHgwMDFlLCAweDAwMjAsCiAJMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MDJjLCAweGE4MDIsCi0JMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NWYxLCAweDAxMmUsCisJMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzI1LCAweDAxMmUsCiAJMHgwMGVlLCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLCAweDkwMjYsIDB4MjAwOSwgMHgwMDAwLCAweDIwNDksCiAJMHgwNDAwLCAweDI5MDAsIDB4NzAyZSwgMHg4OTQwLCAweDI4MDAsIDB4YTgwMiwgMHhhOTVlLCAweGE4NjMsCiAJMHgwMDAxLCAweDg0MjAsIDB4OTg4NiwgMHgwNDQwLCAweDAxMjAsIDB4Mjg0OCwgMHg5MTg4LCAweDAwNDAsCkBAIC0zMjEsMjEgKzMyMSwyMSBAQAogCTB4MTE2OCwgMHg5OTgyLCAweDA0MDAsIDB4MDJiOCwgMHg5OTgyLCAweDA0NDAsIDB4MDI3OCwgMHg5OTgyLAogCTB4MDUzNCwgMHgwMjg4LCAweDk5ODIsIDB4MDgwMCwgMHgxMjcwLCAweDAwNDAsIDB4OTk4MiwgMHgwODAwLAogCTB4MDI1MCwgMHgyMDcxLCAweDE4OGQsIDB4NzAxMCwgMHg5OTAyLCAweDEyMjgsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDAxZSwgMHgwMGVlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwZTYsIDB4MjA3MSwgMHgxYTFjLAorCTB4MDAxZSwgMHgwMGVlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwZTYsIDB4MjA3MSwgMHgxYTFiLAogCTB4NzAwNywgMHgwMDAwLCAweDkwMDYsIDB4NzAxZSwgMHg3MDIyLCAweDcwMDIsIDB4MjA3MSwgMHgwMDAwLAogCTB4NzAxMCwgMHg5MDg1LCAweDgwNDQsIDB4NzAxMiwgMHgyMDcxLCAweDAwODAsIDB4OTAwNiwgMHgyMGE5LAogCTB4MDA0MCwgMHg3MDIyLCAweDFmMDQsIDB4MTBmMSwgMHg3MDJiLCAweDAwMjAsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBlNiwgMHhhMDZmLCAweDAwMDAsIDB4MjA3MSwgMHgxYTFjLAotCTB4NzAxYywgMHg5MDg4LCAweDFhMjYsIDB4MjgwYSwgMHg4MDAwLCAweDkwODQsIDB4MDAzZiwgMHg3MDFlLAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBlNiwgMHhhMDZmLCAweDAwMDAsIDB4MjA3MSwgMHgxYTFiLAorCTB4NzAxYywgMHg5MDg4LCAweDFhMjUsIDB4MjgwYSwgMHg4MDAwLCAweDkwODQsIDB4MDAzZiwgMHg3MDFlLAogCTB4NzEyMCwgMHg5MTA2LCAweDA5MGMsIDB4MGRjNSwgMHg3MDA0LCAweDkwMDUsIDB4MTEyOCwgMHgwMGY2LAogCTB4MjA3OSwgMHgwMDgwLCAweDAwYTksIDB4MDBmZSwgMHgwMGVlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwZTYsIDB4MjA3MSwgMHgxYTFjLCAweDcwMDQsIDB4OTAwNSwgMHgxMTI4LAorCTB4MjA5MSwgMHg4MDAwLCAweDAwZTYsIDB4MjA3MSwgMHgxYTFiLCAweDcwMDQsIDB4OTAwNSwgMHgxMTI4LAogCTB4MDBmNiwgMHgyMDc5LCAweDAwODAsIDB4MDAyMSwgMHgwMGZlLCAweDAwZWUsIDB4MDEyZSwgMHgwMDA1LAogCTB4NzAwNCwgMHg5MDg2LCAweDAwMDAsIDB4MTExMCwgMHg3MDA3LCAweDAwMDYsIDB4NzAwMCwgMHgwMDAyLAogCTB4MTEzYSwgMHgxMmJkLCAweDExMzgsIDB4MTEzOCwgMHgxMmIxLCAweDEyYjEsIDB4MTJiMSwgMHgxMmIxLAogCTB4MDgwYywgMHgwZGM1LCAweDcwMWMsIDB4NzEyMCwgMHg5MTA2LCAweDExNDgsIDB4NzkyYywgMHg5MTg0LAogCTB4MDAwMSwgMHgxMTIwLCAweGQxZmMsIDB4MTExMCwgMHg3MDA3LCAweDAwMDAsIDB4MDAwNSwgMHgwMDk2LAotCTB4OTE4MCwgMHgxYTI2LCAweDIwMDQsIDB4NzAwYSwgMHgyMDQ4LCAweDgxMDgsIDB4OTE4YywgMHgwMDNmLAorCTB4OTE4MCwgMHgxYTI1LCAweDIwMDQsIDB4NzAwYSwgMHgyMDQ4LCAweDgxMDgsIDB4OTE4YywgMHgwMDNmLAogCTB4NzEyMiwgMHg3ODJiLCAweDAwMjYsIDB4YTg4YywgMHg3ODAyLCAweGE4OTAsIDB4NzgwNiwgMHhhODk0LAogCTB4NzgwYSwgMHhhODk4LCAweDc4MGUsIDB4YTg3OCwgMHg3MDBlLCAweGE4NzAsIDB4NzAxNiwgMHhhODc0LAogCTB4NzAxYSwgMHhhODY4LCAweDAwOWUsIDB4ZDA4NCwgMHgwMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwMDI5LApAQCAtMzQ3LDggKzM0Nyw4IEBACiAJMHgwMDI2LCAweDcxMGMsIDB4MjAxMSwgMHgwMDQwLCAweDkxODIsIDB4MDA0MCwgMHgxMjEwLCAweDIxMTAsCiAJMHg5MDA2LCAweDcwMGUsIDB4MjJhOCwgMHg0MDA2LCAweDgyMDMsIDB4NzgxMiwgMHg3ODJiLCAweDAwMjAsCiAJMHgzMzAwLCAweDcwMWEsIDB4NzgyYiwgMHgwMDAxLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MjAwOSwgMHgxYTFjLCAweDIxMDQsIDB4YzA5NSwgMHgyMDBhLCAweDA4MGMsCi0JMHgxMTE3LCAweDAwMDUsIDB4MDAxNiwgMHgwMGU2LCAweDIwNzEsIDB4MWExYywgMHgwMGY2LCAweDIwNzksCisJMHgwMDFlLCAweDAwMDUsIDB4MjAwOSwgMHgxYTFiLCAweDIxMDQsIDB4YzA5NSwgMHgyMDBhLCAweDA4MGMsCisJMHgxMTE3LCAweDAwMDUsIDB4MDAxNiwgMHgwMGU2LCAweDIwNzEsIDB4MWExYiwgMHgwMGY2LCAweDIwNzksCiAJMHgwMDgwLCAweDc5MmMsIDB4ZDFiYywgMHgxOTBjLCAweDBkYmUsIDB4NzgyYiwgMHgwMDAyLCAweGQxZmMsCiAJMHgwMTIwLCAweDkxOGMsIDB4MDcwMCwgMHg3MDA0LCAweDAwMjMsIDB4MDBmZSwgMHgwMGVlLCAweDAwMWUsCiAJMHgwMDA1LCAweDExMjgsIDB4MTFkMCwgMHgxMjA0LCAweDEyZGMsIDB4MGRjNSwgMHgxMmY3LCAweDBkYzUsCkBAIC0zNzAsNDUgKzM3MCw0NSBAQAogCTB4MTExNywgMHgwMDA1LCAweDAwZGUsIDB4MDA5ZSwgMHgwODBjLCAweDExMTcsIDB4MDAwNSwgMHhhOGE4LAogCTB4ZDA4YywgMHgwMDA1LCAweDAwOTYsIDB4YTBhMCwgMHg5MDRkLCAweDA5MGMsIDB4MGRjNSwgMHhhMDZjLAogCTB4OTA4ZSwgMHgwMTAwLCAweDAxMzAsIDB4YTg3YiwgMHgwMDMwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LAotCTB4NDAwMiwgMHgwODBjLCAweDZkYzQsIDB4YTA5ZiwgMHgwMDAwLCAweGEwYTMsIDB4MDAwMCwgMHgyODQ4LAorCTB4NDAwMiwgMHgwODBjLCAweDZlOTIsIDB4YTA5ZiwgMHgwMDAwLCAweGEwYTMsIDB4MDAwMCwgMHgyODQ4LAogCTB4MDgwYywgMHgxMDQwLCAweDAwOWUsIDB4MDAwNSwgMHgwMGE2LCAweGEwYTAsIDB4OTA0ZCwgMHgwOTBjLAogCTB4MGRjNSwgMHhhMDZjLCAweDkwOGUsIDB4MDEwMCwgMHgwMTI4LCAweGE4N2IsIDB4MDAwMSwgMHhhODgzLAogCTB4MDAwMCwgMHgwMGMwLCAweGE4MGMsIDB4MjA1MCwgMHhiMDA0LCAweDkwMDUsIDB4MDE5OCwgMHhhODBlLAogCTB4MjA1MCwgMHg4MDA2LCAweDgwMDYsIDB4ODAwNywgMHg5MDhjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLAogCTB4OTA4MCwgMHgwMDAyLCAweGEwNzYsIDB4YTE3MiwgMHhiMDAwLCAweGEwN2EsIDB4MjgxMCwgMHgwODBjLAotCTB4MTBmOCwgMHgwMGU4LCAweGE5N2MsIDB4YTg5NCwgMHgwMDE2LCAweDAwMDYsIDB4MDgwYywgMHg2ZGM0LAorCTB4MTBmOCwgMHgwMGU4LCAweGE5N2MsIDB4YTg5NCwgMHgwMDE2LCAweDAwMDYsIDB4MDgwYywgMHg2ZTkyLAogCTB4MDAwZSwgMHgwMDFlLCAweGQxZmMsIDB4MTEzOCwgMHhkMWY0LCAweDAxMjgsIDB4MDBjNiwgMHgyMDYwLAotCTB4MDgwYywgMHhiMTAxLCAweDAwY2UsIDB4NzAwOCwgMHgyMDQ4LCAweGE4OWYsIDB4MDAwMCwgMHhhOGEzLAorCTB4MDgwYywgMHhiMmQzLCAweDAwY2UsIDB4NzAwOCwgMHgyMDQ4LCAweGE4OWYsIDB4MDAwMCwgMHhhOGEzLAogCTB4MDAwMCwgMHgwODBjLCAweDEwNDAsIDB4NzAwNywgMHgwMDAwLCAweDA4MGMsIDB4MTExNywgMHgwMGFlLAogCTB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3ODJiLCAweDEwMDEsIDB4NzAwNywgMHgwMDA1LAotCTB4NzAwMCwgMHhjMDk0LCAweDcwMDIsIDB4MDEyZSwgMHgwMDA1LCAweDAwOTYsIDB4MjAwMSwgMHgxOTMwLAorCTB4NzAwMCwgMHhjMDk0LCAweDcwMDIsIDB4MDEyZSwgMHgwMDA1LCAweDAwOTYsIDB4MjAwMSwgMHgxOTJmLAogCTB4MjA0YywgMHhhODdjLCAweDc4MTIsIDB4YTg4YywgMHg3ODAyLCAweGE4OTAsIDB4NzgwNiwgMHhhODk0LAogCTB4NzgwYSwgMHhhODk4LCAweDc4MGUsIDB4NzgyYiwgMHgwMDIwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAogCTB4NzgyYiwgMHgwMDQxLCAweDcwMDcsIDB4MDAwMywgMHg3MDAwLCAweGMwODQsIDB4NzAwMiwgMHgyOTAwLAogCTB4NzAwYSwgMHgwMTJlLCAweDAwOWUsIDB4MDAwNSwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMDg4LAotCTB4NzgyYiwgMHgwMDQwLCAweDAwOTYsIDB4MjAwMSwgMHgxOTMwLCAweDIwNGMsIDB4YWE3YywgMHgwMDllLAotCTB4MDgwYywgMHg4YzVhLCAweDIwMDksIDB4MTg4YywgMHgyMTA0LCAweDkwODQsIDB4ZmZmYywgMHgyMDBhLAotCTB4MDgwYywgMHg4YWJmLCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLCAweDExMjgsIDB4MDAwNSwgMHg3MDA3LAorCTB4NzgyYiwgMHgwMDQwLCAweDAwOTYsIDB4MjAwMSwgMHgxOTJmLCAweDIwNGMsIDB4YWE3YywgMHgwMDllLAorCTB4MDgwYywgMHg4ZDkxLCAweDIwMDksIDB4MTg4YywgMHgyMTA0LCAweDkwODQsIDB4ZmZmYywgMHgyMDBhLAorCTB4MDgwYywgMHg4YmYzLCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLCAweDExMjgsIDB4MDAwNSwgMHg3MDA3LAogCTB4MDAwMCwgMHgwODBjLCAweDExMjgsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4MjIwMCwgMHgyMDc5LAotCTB4MDMwMCwgMHgyMDcxLCAweDFhNjYsIDB4NzAwMywgMHgwMDAwLCAweDc4YmYsIDB4MDBmNiwgMHg3ODFiLAotCTB4NDgwMCwgMHgwMGMxLCAweDc4MDMsIDB4MDAwMywgMHg3ODBmLCAweDAwMDAsIDB4MjBhOSwgMHgwM2U4LAotCTB4MjA2MSwgMHhlZTI5LCAweDJjMGQsIDB4NzkxMiwgMHhlMTA0LCAweDljZTAsIDB4MDAwMiwgMHg3OTE2LAorCTB4MDMwMCwgMHgyMDcxLCAweDFhNjUsIDB4NzAwMywgMHgwMDAwLCAweDc4YmYsIDB4MDBmNiwgMHg3ODFiLAorCTB4NDgwMCwgMHgwMGMxLCAweDc4MDMsIDB4MDAwMywgMHg3ODBmLCAweDAwMDAsIDB4MjBhOSwgMHgwM2VhLAorCTB4MjA2MSwgMHhmMGFlLCAweDJjMGQsIDB4NzkxMiwgMHhlMTA0LCAweDljZTAsIDB4MDAwMiwgMHg3OTE2LAogCTB4MWYwNCwgMHgxMzEyLCAweDc4MDcsIDB4MDAwNywgMHg3ODAzLCAweDAwMDAsIDB4NzgwMywgMHgwMDAxLAogCTB4MDEyZSwgMHgwMDA1LCAweDAwYzYsIDB4NzgwMywgMHgwMDAwLCAweDc4MDgsIDB4ZDA5YywgMHgwMTIwLAotCTB4NzgyMCwgMHgwODBjLCAweDEzNzYsIDB4MGNjOCwgMHgyMDAxLCAweDFhNjcsIDB4MjAwMywgMHgwMDAwLAorCTB4NzgyMCwgMHgwODBjLCAweDEzNzYsIDB4MGNjOCwgMHgyMDAxLCAweDFhNjYsIDB4MjAwMywgMHgwMDAwLAogCTB4NzhhYiwgMHgwMDA0LCAweDc4YWMsIDB4ZDBhYywgMHgxZGU4LCAweDc4YWIsIDB4MDAwMiwgMHg3ODA3LAogCTB4MDAwNywgMHg3ODI3LCAweDAwMzAsIDB4NzgyYiwgMHgwNDAwLCAweDc4MjcsIDB4MDAzMSwgMHg3ODJiLAotCTB4MWE4YSwgMHg3ODFmLCAweGZmMDAsIDB4NzgxYiwgMHhiNzAwLCAweDIwMDEsIDB4MDIwMCwgMHgyMDA0LAotCTB4ZDBkYywgMHgwMTEwLCAweDc4MWYsIDB4MDMwMywgMHgyMDYxLCAweDFhOGEsIDB4NjAyZiwgMHgxY2QwLAotCTB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OTA4MiwgMHgxY2QwLCAweDYwMzIsIDB4NjAzYiwgMHgyMGYwLAotCTB4MjAwMSwgMHgzM2FjLCAweGQwZmMsIDB4MTkwYywgMHgwZGM1LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LAorCTB4MWE4OSwgMHg3ODFmLCAweGZmMDAsIDB4NzgxYiwgMHhiNzAwLCAweDIwMDEsIDB4MDIwMCwgMHgyMDA0LAorCTB4ZDBkYywgMHgwMTEwLCAweDc4MWYsIDB4MDMwMywgMHgyMDYxLCAweDFhODksIDB4NjAyZiwgMHgxY2QwLAorCTB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OTA4MiwgMHgxY2QwLCAweDYwMzIsIDB4NjAzYiwgMHgyMGM3LAorCTB4MjAwMSwgMHgzM2I2LCAweGQwZmMsIDB4MTkwYywgMHgwZGM1LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LAogCTB4ZDBjNCwgMHgxMTI4LCAweDIwMDEsIDB4MDAwMywgMHgyMDA0LCAweGQwZDQsIDB4MTExOCwgMHg3ODNmLAotCTB4MzNhYywgMHgwMDIwLCAweDkwODQsIDB4YzAwMCwgMHg3ODNmLCAweGIzYWMsIDB4NjA0ZiwgMHgxOTNlLAotCTB4MjAwMSwgMHgxOTI5LCAweDIwMDQsIDB4NjA0MiwgMHgwMGNlLCAweDAwMDUsIDB4OTA4NiwgMHgwMDBkLAorCTB4MzNiNiwgMHgwMDIwLCAweDkwODQsIDB4YzAwMCwgMHg3ODNmLCAweGIzYjYsIDB4NjA0ZiwgMHgxOTNkLAorCTB4MjAwMSwgMHgxOTI4LCAweDIwMDQsIDB4NjA0MiwgMHgwMGNlLCAweDAwMDUsIDB4OTA4NiwgMHgwMDBkLAogCTB4MTFkMCwgMHg3ODA4LCAweGQwOWMsIDB4MDFiOCwgMHg3ODIwLCAweDAwMjYsIDB4MjAxMCwgMHgwODBjLAotCTB4Y2U0NCwgMHgwMTgwLCAweDIyNjAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTE1OCwgMHgwMDE2LAorCTB4ZDBjNiwgMHgwMTgwLCAweDIyNjAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTE1OCwgMHgwMDE2LAogCTB4NjEyMCwgMHg5MTg2LCAweDAwMDksIDB4MDEwOCwgMHgwMDIwLCAweDIwMDksIDB4MDA0YywgMHgwODBjLAotCTB4YjE4MCwgMHgwMDFlLCAweDAwMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4MjIwMCwgMHg3OTA4LAorCTB4YjM1MiwgMHgwMDFlLCAweDAwMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4MjIwMCwgMHg3OTA4LAogCTB4OTE4NCwgMHgwMDcwLCAweDE5MGMsIDB4MGRiZSwgMHhkMTljLCAweDAxNTgsIDB4NzgyMCwgMHg5MDhjLAogCTB4ZjAwMCwgMHgxNWU4LCAweDkwOGEsIDB4MDAyNCwgMHgxYTBjLCAweDBkYzUsIDB4MDAyMywgMHgwMTJlLAogCTB4MDAwNSwgMHgwMTJlLCAweDAwMDUsIDB4MTNjZiwgMHgxM2NmLCAweDEzZTYsIDB4MTNlYiwgMHgxM2VmLApAQCAtNDE2LDE4ICs0MTYsMTggQEAKIAkweDE1NzUsIDB4MTU3YywgMHgxM2NmLCAweDE1N2QsIDB4MTU3ZSwgMHgxNTg5LCAweDE1OTAsIDB4MTNjZiwKIAkweDEzY2YsIDB4MTNjZiwgMHgxM2NmLCAweDEzY2YsIDB4MTNjZiwgMHgxM2NmLCAweDEzZjYsIDB4MTNjZiwKIAkweDEzY2YsIDB4MTNjZiwgMHgxM2NmLCAweDEzY2YsIDB4MTNjZiwgMHgxM2QzLCAweDEzZDEsIDB4MDgwYywKLQkweDBkYzUsIDB4MDgwYywgMHgwZGJlLCAweDA4MGMsIDB4MTU5YiwgMHgyMDA5LCAweDFhN2YsIDB4MjEwNCwKLQkweDgwMDAsIDB4MjAwYSwgMHgwODBjLCAweDgwMDYsIDB4MDgwYywgMHgxYjAyLCAweDAwMDUsIDB4MjAwOSwKLQkweDAwNDgsIDB4MjA2MCwgMHgwODBjLCAweGIxODAsIDB4MDEyZSwgMHgwMDA1LCAweDcwMDQsIDB4YzA4NSwKKwkweDBkYzUsIDB4MDgwYywgMHgwZGJlLCAweDA4MGMsIDB4MTU5YiwgMHgyMDA5LCAweDFhN2UsIDB4MjEwNCwKKwkweDgwMDAsIDB4MjAwYSwgMHgwODBjLCAweDgxM2EsIDB4MDgwYywgMHgxYWQ5LCAweDAwMDUsIDB4MjAwOSwKKwkweDAwNDgsIDB4MjA2MCwgMHgwODBjLCAweGIzNTIsIDB4MDEyZSwgMHgwMDA1LCAweDcwMDQsIDB4YzA4NSwKIAkweGMwYjUsIDB4NzAwNiwgMHgwMDA1LCAweDcwMDQsIDB4YzA4NSwgMHg3MDA2LCAweDAwMDUsIDB4MDgwYywKIAkweDE1OWIsIDB4MDgwYywgMHgxNmZiLCAweDAwMDUsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4MTU5YiwKIAkweDIwNjAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTgzYiwgMHhmZmZmLCAweDAwOWUsIDB4MjAwOSwKLQkweDAwNDgsIDB4MDgwYywgMHhiMTgwLCAweDIwMDEsIDB4MDE1ZCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwOSwKKwkweDAwNDgsIDB4MDgwYywgMHhiMzUyLCAweDIwMDEsIDB4MDE1ZCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwOSwKIAkweDAzZTgsIDB4ODEwOSwgMHgwMTYwLCAweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweDkwMDUsIDB4MGRjOCwKIAkweDIwMDEsIDB4MDIxOCwgMHgyMDA0LCAweGQwZWMsIDB4MTExMCwgMHgwODBjLCAweDE1YTAsIDB4MjAwMSwKIAkweDAzMDcsIDB4MjAwMywgMHg4MDAwLCAweDAwMDUsIDB4NzAwNCwgMHhjMDk1LCAweDcwMDYsIDB4MDAwNSwKIAkweDA4MGMsIDB4MTU5YiwgMHgyMDYwLCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4M2IsIDB4ZmZmZiwKLQkweDAwOWUsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4YjE4MCwgMHgwMDA1LCAweDA4MGMsIDB4MTU5YiwKKwkweDAwOWUsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4YjM1MiwgMHgwMDA1LCAweDA4MGMsIDB4MTU5YiwKIAkweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweDE1OWIsIDB4MDgwYywgMHgxNGVhLCAweDc4MjcsIDB4MDAxOCwKIAkweDc5YWMsIDB4ZDFkYywgMHgwOTA0LCAweDE0OWIsIDB4NzgyNywgMHgwMDE1LCAweDc4MjgsIDB4NzgyYiwKIAkweDAwMDAsIDB4OTA2NSwgMHgwMTQwLCAweDIwMDEsIDB4MDIwZCwgMHgyMDAzLCAweDAwNTAsIDB4MjAwMywKQEAgLTQzNywyMCArNDM3LDIwIEBACiAJMHg3OGFiLCAweDAwMDQsIDB4NzgwMywgMHgwMDAxLCAweDA4MGMsIDB4MTUwMywgMHgwMDA1LCAweDc4MjcsCiAJMHgwMDE4LCAweGEwMDEsIDB4NzgyOCwgMHg3ODI3LCAweDAwMTEsIDB4YTAwMSwgMHg3OTI4LCAweDkxMDYsCiAJMHgwMTEwLCAweDc5YWMsIDB4MDhlMCwgMHgwMGU2LCAweDIwNzEsIDB4MDIwMCwgMHg3MDJjLCAweGQwYzQsCi0JMHgwMTQwLCAweDAwZWUsIDB4MDgwYywgMHgxYjAyLCAweDA4MGMsIDB4MTMyMiwgMHg3ODAzLCAweDAwMDEsCisJMHgwMTQwLCAweDAwZWUsIDB4MDgwYywgMHgxYWQ5LCAweDA4MGMsIDB4MTMyMiwgMHg3ODAzLCAweDAwMDEsCiAJMHgwMDA1LCAweDcwMzcsIDB4MDAwMSwgMHhhMDAxLCAweDcxNTAsIDB4MDBlZSwgMHg5MThjLCAweGZmMDAsCiAJMHg5MTg2LCAweDA1MDAsIDB4MDExMCwgMHg3OWFjLCAweDA4MTAsIDB4NzAwNCwgMHhjMDlkLCAweDcwMDYsCiAJMHg3OGFiLCAweDAwMDQsIDB4NzgwMywgMHgwMDAxLCAweDA4MGMsIDB4MTUwMywgMHgyMDAxLCAweDAyMGQsCiAJMHgyMDAzLCAweDAwMjAsIDB4MDAwNSwgMHg3ODI4LCAweDc4MmIsIDB4MDAwMCwgMHg5MDY1LCAweDA5MGMsCiAJMHgwZGM1LCAweDYwMTQsIDB4MjA0OCwgMHg3OGFiLCAweDAwMDQsIDB4OTE4YywgMHgwNzAwLCAweDAxYTgsCi0JMHgwODBjLCAweDgwMDYsIDB4MDgwYywgMHgxYjAyLCAweDA4MGMsIDB4Y2U1NiwgMHgwMTU4LCAweGE5YWMsCisJMHgwODBjLCAweDgxM2EsIDB4MDgwYywgMHgxYWQ5LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTU4LCAweGE5YWMsCiAJMHhhOTM2LCAweGE5YjAsIDB4YTkzYSwgMHhhODNmLCAweGZmZmYsIDB4YTg0MywgMHhmZmZmLCAweGE4ODAsCi0JMHhjMGJkLCAweGE4ODIsIDB4MDgwYywgMHhjYTcxLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDksCi0JMHgxMTI4LCAweDIwMDksIDB4MDA0YywgMHgwODBjLCAweGIxODAsIDB4MDA0OCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDYwMjQsIDB4MTkwYywgMHhkMjQyLCAweDIwMjksCisJMHhjMGJkLCAweGE4ODIsIDB4MDgwYywgMHhjY2YzLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDksCisJMHgxMTI4LCAweDIwMDksIDB4MDA0YywgMHgwODBjLCAweGIzNTIsIDB4MDA0OCwgMHg2MDEwLCAweDAwYjYsCisJMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDYwMjQsIDB4MTkwYywgMHhkNGM0LCAweDIwMjksCiAJMHgwMGM4LCAweDg1MjksIDB4MDEyOCwgMHgyMDAxLCAweDAyMDEsIDB4MjAwNCwgMHg5MDA1LCAweDBkYzgsCi0JMHg3ZGJjLCAweDA4MGMsIDB4ZWRkMiwgMHhkNWE0LCAweDExMTgsIDB4MDgwYywgMHgxNWEwLCAweDAwMDUsCi0JMHgwODBjLCAweDgwMDYsIDB4MDgwYywgMHgxYjAyLCAweDAwMDUsIDB4NzgxZiwgMHgwMzAwLCAweDc4MDMsCisJMHg3ZGJjLCAweDA4MGMsIDB4ZjA1NywgMHhkNWE0LCAweDExMTgsIDB4MDgwYywgMHgxNWEwLCAweDAwMDUsCisJMHgwODBjLCAweDgxM2EsIDB4MDgwYywgMHgxYWQ5LCAweDAwMDUsIDB4NzgxZiwgMHgwMzAwLCAweDc4MDMsCiAJMHgwMDAxLCAweDAwMDUsIDB4MDAxNiwgMHgwMDY2LCAweDAwNzYsIDB4MDBmNiwgMHgyMDc5LCAweDAzMDAsCiAJMHg3OTA4LCAweDkxOGMsIDB4MDAwNywgMHg5MTg2LCAweDAwMDMsIDB4MDEyMCwgMHgyMDAxLCAweDAwMTYsCiAJMHgwODBjLCAweDE2MTEsIDB4MDBmZSwgMHgwMDdlLCAweDAwNmUsIDB4MDAxZSwgMHgwMDA1LCAweDcwMDQsCkBAIC00NjMsMTUgKzQ2MywxNSBAQAogCTB4MDViMCwgMHg2MDE0LCAweDkwMDUsIDB4MDViMCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2NCwgMHgwMDllLAogCTB4OTA4NCwgMHgwMGZmLCAweDkwOGUsIDB4MDAyOSwgMHgwMTYwLCAweDkwOGUsIDB4MDA0OCwgMHgxNTUwLAogCTB4NjAxYywgMHhkMDg0LCAweDExZTAsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTc2OCwgMHgwMGZlLAotCTB4MDBiMCwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHgxOGYxLCAweDAwZmUsIDB4MjAwOSwgMHgwMWY0LAorCTB4MDBiMCwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHgxOGZkLCAweDAwZmUsIDB4MjAwOSwgMHgwMWY0LAogCTB4ODEwOSwgMHgwMTY4LCAweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweDkwMDUsIDB4MGRjOCwgMHgyMDAxLAogCTB4MDIxOCwgMHgyMDA0LCAweGQwZWMsIDB4MTExOCwgMHgwODBjLCAweDE1YTAsIDB4MDA0MCwgMHgyMDAxLAogCTB4MDIwZCwgMHgyMDAzLCAweDAwMjAsIDB4MDgwYywgMHgxMzIyLCAweDc4MDMsIDB4MDAwMSwgMHgwMGVlLAogCTB4MDAxZSwgMHgwMDA1LCAweDA4MGMsIDB4MTZkZSwgMHgwZGQwLCAweDIwMDEsIDB4MDIwZCwgMHgyMDAzLAogCTB4MDA1MCwgMHgyMDAzLCAweDAwMjAsIDB4MDQ2MSwgMHgwYzkwLCAweDA0MjksIDB4MjA2MCwgMHgyMDA5LAotCTB4MDA1MywgMHgwODBjLCAweGIxODAsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDBlMSwgMHgyMDA4LAotCTB4MDBkMSwgMHgwMDA2LCAweDcwMDQsIDB4YzA5ZCwgMHg3MDA2LCAweDAwMGUsIDB4MDgwYywgMHg4ZmFiLAotCTB4MDAwNSwgMHgwMDg5LCAweDkwMDUsIDB4MDExOCwgMHgwODBjLCAweDhiYWUsIDB4MGNkMCwgMHgwMDA1LAorCTB4MDA1MywgMHgwODBjLCAweGIzNTIsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDBlMSwgMHgyMDA4LAorCTB4MDBkMSwgMHgwMDA2LCAweDcwMDQsIDB4YzA5ZCwgMHg3MDA2LCAweDAwMGUsIDB4MDgwYywgMHg5MGRlLAorCTB4MDAwNSwgMHgwMDg5LCAweDkwMDUsIDB4MDExOCwgMHgwODBjLCAweDhjZTIsIDB4MGNkMCwgMHgwMDA1LAogCTB4MjAwMSwgMHgwMDM2LCAweDIwMDksIDB4MTgyMCwgMHgyMTBjLCAweDIwMTEsIDB4MTgxZiwgMHgyMjE0LAogCTB4MDgwYywgMHgxNjExLCAweDAwMDUsIDB4NzgwOCwgMHhkMDljLCAweDBkZTgsIDB4NzgyMCwgMHgwMDA1LAogCTB4MDgwYywgMHgxNGVhLCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDIwMDksIDB4MDFmNCwgMHg4MTA5LApAQCAtNDgxLDcgKzQ4MSw3IEBACiAJMHg4MTBjLCAweDA4MGMsIDB4MTYwMywgMHg2ODI3LCAweDAwMDEsIDB4ODEwOSwgMHgxZGQwLCAweDA0ZDksCiAJMHg2ODI3LCAweDAwMDIsIDB4MDRjMSwgMHg2ODA0LCAweDkwMDUsIDB4MTEzMCwgMHg2ODJjLCAweGQwZTQsCiAJMHgxNTAwLCAweDY4MDQsIDB4OTAwNSwgMHgwZGU4LCAweDc5YjgsIDB4ZDFlYywgMHgxMTMwLCAweDA4YzAsCi0JMHgwODBjLCAweDgwMDYsIDB4MDgwYywgMHgxYjAyLCAweDAwOTAsIDB4NzgyNywgMHgwMDE1LCAweDc4MmIsCisJMHgwODBjLCAweDgxM2EsIDB4MDgwYywgMHgxYWQ5LCAweDAwOTAsIDB4NzgyNywgMHgwMDE1LCAweDc4MmIsCiAJMHgwMDAwLCAweDc4MjcsIDB4MDAxOCwgMHg3ODJiLCAweDAwMDAsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsCiAJMHgwMDIwLCAweDIwMDEsIDB4MDMwNywgMHgyMDAzLCAweDAzMDAsIDB4NzgwMywgMHgwMDAxLCAweDAwZGUsCiAJMHgwMDA1LCAweDY4MmMsIDB4OTA4NCwgMHg1NDAwLCAweDkwODYsIDB4NTQwMCwgMHgwZDMwLCAweDc4MjcsCkBAIC00OTcsMTcgKzQ5NywxNyBAQAogCTB4MDkwNCwgMHgxNjhhLCAweDkyODQsIDB4MDA0OCwgMHg5MDg2LCAweDAwMDgsIDB4MTkwNCwgMHgxNjhhLAogCTB4MjAwMSwgMHgwMTA5LCAweDIwMDQsIDB4ZDA4YywgMHgwMWYwLCAweDAwMDYsIDB4MDFjNiwgMHgwMWQ2LAogCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MDBmNiwgMHgwMDI2LAotCTB4MDAxNiwgMHgyMDA5LCAweDFhODIsIDB4MjEwNCwgMHg4MDAwLCAweDAyMDgsIDB4MjAwYSwgMHgwODBjLAotCTB4OTJlZCwgMHgwMDFlLCAweDAwMmUsIDB4MDBmZSwgMHgwMTJlLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLAorCTB4MDAxNiwgMHgyMDA5LCAweDFhODEsIDB4MjEwNCwgMHg4MDAwLCAweDAyMDgsIDB4MjAwYSwgMHgwODBjLAorCTB4OTRiMSwgMHgwMDFlLCAweDAwMmUsIDB4MDBmZSwgMHgwMTJlLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLAogCTB4MDFkZSwgMHgwMWNlLCAweDAwMGUsIDB4MjAwMSwgMHgwMDliLCAweDIwMDQsIDB4ZDBmYywgMHgwMWQwLAogCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwMGY2LAotCTB4MDAxNiwgMHgyMDA5LCAweDFhODMsIDB4MjEwNCwgMHg4MDAwLCAweDAyMDgsIDB4MjAwYSwgMHgwODBjLAotCTB4MWYxNCwgMHgwMDFlLCAweDAwZmUsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4MDFkZSwgMHgwMWNlLAorCTB4MDAxNiwgMHgyMDA5LCAweDFhODIsIDB4MjEwNCwgMHg4MDAwLCAweDAyMDgsIDB4MjAwYSwgMHgwODBjLAorCTB4MWVlYiwgMHgwMDFlLCAweDAwZmUsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4MDFkZSwgMHgwMWNlLAogCTB4MDEyZSwgMHgwMDBlLCAweDc4MTgsIDB4ZDBiYywgMHgxOTA0LCAweDE2M2EsIDB4MDAwNSwgMHgyMDAxLAogCTB4MTgwYywgMHgyMDA0LCAweGQwZjQsIDB4MTUyOCwgMHg3YTE4LCAweDkyODQsIDB4MDAzMCwgMHgwNTA4LAotCTB4OTI4NCwgMHgwMDQ4LCAweDkwODYsIDB4MDAwOCwgMHgxMWUwLCAweDIwMDEsIDB4MTlmOCwgMHgyMDA0LAotCTB4OTAwNSwgMHgwMWI4LCAweDIwMDEsIDB4MWE2YSwgMHgyMDA0LCAweDkwODYsIDB4MDAwMCwgMHgwMTg4LAotCTB4MjAwOSwgMHgxYTgxLCAweDIxMDQsIDB4ODAwMCwgMHgwMjA4LCAweDIwMGEsIDB4MDgwYywgMHhhNTk1LAorCTB4OTI4NCwgMHgwMDQ4LCAweDkwODYsIDB4MDAwOCwgMHgxMWUwLCAweDIwMDEsIDB4MTlmNywgMHgyMDA0LAorCTB4OTAwNSwgMHgwMWI4LCAweDIwMDEsIDB4MWE2OSwgMHgyMDA0LCAweDkwODYsIDB4MDAwMCwgMHgwMTg4LAorCTB4MjAwOSwgMHgxYTgwLCAweDIxMDQsIDB4ODAwMCwgMHgwMjA4LCAweDIwMGEsIDB4MDgwYywgMHhhNzY3LAogCTB4MjAwOSwgMHgxODBjLCAweDIxMDQsIDB4YzBmNSwgMHgyMDBhLCAweDIwMDksIDB4ZmYwMCwgMHgwODA0LAogCTB4MTYzYSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg3ODMyLCAweDc5MzYsIDB4N2EzYSwgMHg3ODFiLAogCTB4ODA4MCwgMHgwODBjLCAweDE2MzMsIDB4MTEwOCwgMHgwMDA1LCAweDc5MmMsIDB4MzkwMCwgMHg4MDAwLApAQCAtNTE1LDcxNTAgKzUxNSw3MjMyIEBACiAJMHg3MDUwLCAweDIwNjAsIDB4ZDFiYywgMHgxMTEwLCAweDcwNTQsIDB4MjA2MCwgMHg5MThjLCAweGZmMDAsCiAJMHg5MTg2LCAweDA1MDAsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDA2LCAweDAwNDYsCiAJMHgwMGU2LCAweDIwNzEsIDB4MDIwMCwgMHg3MDM3LCAweDAwMDIsIDB4NzA1OCwgMHg5MDg0LCAweGZmMDAsCi0JMHg4MDA3LCAweDkwODYsIDB4MDBiYywgMHgxMTU4LCAweDIwMjEsIDB4MWE4MCwgMHgyNDA0LCAweDgwMDAsCi0JMHgwMjA4LCAweDIwMjIsIDB4MDgwYywgMHg4MDA2LCAweDA4MGMsIDB4MWIwMiwgMHg5MDA2LCAweDAwZWUsCisJMHg4MDA3LCAweDkwODYsIDB4MDBiYywgMHgxMTU4LCAweDIwMjEsIDB4MWE3ZiwgMHgyNDA0LCAweDgwMDAsCisJMHgwMjA4LCAweDIwMjIsIDB4MDgwYywgMHg4MTNhLCAweDA4MGMsIDB4MWFkOSwgMHg5MDA2LCAweDAwZWUsCiAJMHgwMDRlLCAweDAwMGUsIDB4MDAwNSwgMHgwYzExLCAweDExMDgsIDB4MDAwNSwgMHgwMGU2LCAweDAwMTYsCiAJMHgyMDcxLCAweDAyMDAsIDB4MDg0MSwgMHg2MTI0LCAweGQxZGMsIDB4MDFmOCwgMHg3MDFjLCAweGQwOGMsCiAJMHgwOTA0LCAweDE3NWQsIDB4NzAxNywgMHgwMDAwLCAweDIwMDEsIDB4MDI2NCwgMHgyMDA0LCAweGQwYmMsCiAJMHgwOTA0LCAweDE3NWQsIDB4MjAwMSwgMHgwMjY4LCAweDAwYzYsIDB4MjA2NCwgMHg2MTA0LCAweDYwMzgsCiAJMHgwMGNlLCAweDkxOGUsIDB4MDAzOSwgMHgxOTA0LCAweDE3NWQsIDB4OWMwNiwgMHgxNWYwLCAweDAxMjYsCi0JMHgyMDkxLCAweDI2MDAsIDB4MDgwYywgMHg3ZjRkLCAweDAxMmUsIDB4NzM1OCwgMHg3NDVjLCAweDYwMTQsCisJMHgyMDkxLCAweDI2MDAsIDB4MDgwYywgMHg4MDgxLCAweDAxMmUsIDB4NzM1OCwgMHg3NDVjLCAweDYwMTQsCiAJMHg5MDVkLCAweDA1OTgsIDB4MmI0OCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsCi0JMHhkMGJjLCAweDE5MGMsIDB4ZDIxZCwgMHhhYjQyLCAweGFjM2UsIDB4MjAwMSwgMHgxODY5LCAweDIwMDQsCisJMHhkMGJjLCAweDE5MGMsIDB4ZDQ5ZiwgMHhhYjQyLCAweGFjM2UsIDB4MjAwMSwgMHgxODY5LCAweDIwMDQsCiAJMHhkMGI0LCAweDExNzAsIDB4NjAxYywgMHhkMGU0LCAweDExNTgsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsCiAJMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgxMTIwLCAweGE4M2IsIDB4N2ZmZiwgMHhhODM3LCAweGZmZmYsCi0JMHgwODBjLCAweDIxMTAsIDB4MTE5MCwgMHgwODBjLCAweDE5NGUsIDB4MmEwMCwgMHhhODE2LCAweDAxMzAsCisJMHgwODBjLCAweDIwZTcsIDB4MTE5MCwgMHgwODBjLCAweDE5NWEsIDB4MmEwMCwgMHhhODE2LCAweDAxMzAsCiAJMHgyODAwLCAweGE4MGUsIDB4MmMwNSwgMHhhODBhLCAweDJjMDAsIDB4YTgxMiwgMHg3MDM3LCAweDAwMjAsCiAJMHg3ODFmLCAweDAzMDAsIDB4MDAxZSwgMHgwMGVlLCAweDAwMDUsIDB4NzAzNywgMHgwMDUwLCAweDcwMzcsCiAJMHgwMDIwLCAweDAwMWUsIDB4MDBlZSwgMHgwODBjLCAweDE1YTAsIDB4MDAwNSwgMHgwODBjLCAweDBkYzUsCi0JMHgyZmYwLCAweDAxMjYsIDB4MjA5MSwgMHgyMjAwLCAweDAwMTYsIDB4MDBjNiwgMHgzZTYwLCAweDYwMTQsCi0JMHgyMDQ4LCAweDI5NDAsIDB4OTAzZSwgMHgyNzMwLCAweGE4NjQsIDB4MjA2OCwgMHhhODFhLCAweDlkODQsCi0JMHgwMDBmLCAweDkwODgsIDB4MjBmMCwgMHgyMTY1LCAweDAwMDIsIDB4MTc5NCwgMHgxODAyLCAweDE3OTQsCi0JMHgxNzk0LCAweDE3OTgsIDB4MTdlMywgMHgxNzk0LCAweDE3YjgsIDB4MTc4ZCwgMHgxN2Y5LCAweDE3OTQsCi0JMHgxNzk0LCAweDE3OWQsIDB4MThlZiwgMHgxN2NjLCAweDE3YzIsIDB4YTk2NCwgMHg5MThjLCAweDAwZmYsCi0JMHg5MThlLCAweDAwNDgsIDB4MDkwNCwgMHgxN2Y5LCAweDkwODUsIDB4MDAwMSwgMHgwODA0LCAweDE4ZTUsCi0JMHhhODdjLCAweGQwYWMsIDB4MGRjOCwgMHgwODA0LCAweDE4MDksIDB4YTg3YywgMHhkMGFjLCAweDBkYTAsCi0JMHgwODA0LCAweDE4NzQsIDB4YTg5OCwgMHg5MDFkLCAweDExMDgsIDB4YWI5YywgMHg5MDE2LCAweGFhYjIsCi0JMHhhYTNlLCAweGFhNDIsIDB4M2UwMCwgMHg5MDgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDgwLCAweDkxNzksCi0JMHgyMDA1LCAweDkwMDUsIDB4MDkwYywgMHgwZGM1LCAweDIwMDQsIDB4YThhZSwgMHgwODA0LCAweDE4Y2QsCi0JMHhhODdjLCAweGQwYmMsIDB4MDljOCwgMHhhODkwLCAweGE4NDIsIDB4YTg4YywgMHhhODNlLCAweGE4ODgsCi0JMHgwODA0LCAweDE4MDksIDB4YTg3YywgMHhkMGJjLCAweDA5NzgsIDB4YTg5MCwgMHhhODQyLCAweGE4OGMsCi0JMHhhODNlLCAweGE4ODgsIDB4MDgwNCwgMHgxODc0LCAweGE4N2MsIDB4ZDBiYywgMHgwOTI4LCAweGE4OTAsCi0JMHhhODQyLCAweGE4OGMsIDB4YTgzZSwgMHhhODA0LCAweDkwNDUsIDB4MDkwYywgMHgwZGM1LCAweGExNjQsCi0JMHhhOTFhLCAweDkxZWMsIDB4MDAwZiwgMHg5ZDgwLCAweDIwZjAsIDB4MjA2NSwgMHhhODg4LCAweGQxOWMsCi0JMHgxOTA0LCAweDE4NzQsIDB4MDQzMCwgMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHgxNzk0LCAweGE4MDQsCi0JMHg5MDQ1LCAweDA5MGMsIDB4MGRjNSwgMHhhMTY0LCAweGE5MWEsIDB4OTFlYywgMHgwMDBmLCAweDlkODAsCi0JMHgyMGYwLCAweDIwNjUsIDB4OTAwNiwgMHhhODQyLCAweGE4M2UsIDB4ZDE5YywgMHgxOTA0LCAweDE4NzQsCi0JMHgwMDgwLCAweGE4N2MsIDB4ZDBhYywgMHgwOTA0LCAweDE3OTQsIDB4OTAwNiwgMHhhODQyLCAweGE4M2UsCi0JMHgwODA0LCAweDE4NzQsIDB4YTg3YywgMHhkMGFjLCAweDA5MDQsIDB4MTc5NCwgMHg5MDA2LCAweGE4NDIsCi0JMHhhODNlLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsIDB4MGRjNSwgMHg5MDgyLCAweDAwMWIsCi0JMHgwMDAyLCAweDE4MmMsIDB4MTgyYywgMHgxODJlLCAweDE4MmMsIDB4MTgyYywgMHgxODJjLCAweDE4MzgsCi0JMHgxODJjLCAweDE4MmMsIDB4MTgyYywgMHgxODQyLCAweDE4MmMsIDB4MTgyYywgMHgxODJjLCAweDE4NGMsCi0JMHgxODJjLCAweDE4MmMsIDB4MTgyYywgMHgxODU2LCAweDE4MmMsIDB4MTgyYywgMHgxODJjLCAweDE4NjAsCi0JMHgxODJjLCAweDE4MmMsIDB4MTgyYywgMHgxODZhLCAweDA4MGMsIDB4MGRjNSwgMHhhNTc0LCAweGE0NzgsCi0JMHg5ZDg2LCAweDAwMjQsIDB4MDkwNCwgMHgxN2EyLCAweGEzN2MsIDB4YTI4MCwgMHgwODA0LCAweDE4Y2QsCi0JMHhhNTg0LCAweGE0ODgsIDB4OWQ4NiwgMHgwMDI0LCAweDA5MDQsIDB4MTdhMiwgMHhhMzhjLCAweGEyOTAsCi0JMHgwODA0LCAweDE4Y2QsIDB4YTU5NCwgMHhhNDk4LCAweDlkODYsIDB4MDAyNCwgMHgwOTA0LCAweDE3YTIsCi0JMHhhMzljLCAweGEyYTAsIDB4MDgwNCwgMHgxOGNkLCAweGE1YTQsIDB4YTRhOCwgMHg5ZDg2LCAweDAwMjQsCi0JMHgwOTA0LCAweDE3YTIsIDB4YTNhYywgMHhhMmIwLCAweDA4MDQsIDB4MThjZCwgMHhhNWI0LCAweGE0YjgsCi0JMHg5ZDg2LCAweDAwMjQsIDB4MDkwNCwgMHgxN2EyLCAweGEzYmMsIDB4YTJjMCwgMHgwODA0LCAweDE4Y2QsCi0JMHhhNWM0LCAweGE0YzgsIDB4OWQ4NiwgMHgwMDI0LCAweDA5MDQsIDB4MTdhMiwgMHhhM2NjLCAweGEyZDAsCi0JMHgwODA0LCAweDE4Y2QsIDB4YTVkNCwgMHhhNGQ4LCAweDlkODYsIDB4MDAyNCwgMHgwOTA0LCAweDE3YTIsCi0JMHhhM2RjLCAweGEyZTAsIDB4MDgwNCwgMHgxOGNkLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM0LCAweDFhMGMsCi0JMHgwZGM1LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDE4OTcsIDB4MTg5NSwgMHgxODk1LCAweDE4OTUsCi0JMHgxODk1LCAweDE4OTUsIDB4MThhMiwgMHgxODk1LCAweDE4OTUsIDB4MTg5NSwgMHgxODk1LCAweDE4OTUsCi0JMHgxOGFkLCAweDE4OTUsIDB4MTg5NSwgMHgxODk1LCAweDE4OTUsIDB4MTg5NSwgMHgxOGI4LCAweDE4OTUsCi0JMHgxODk1LCAweDE4OTUsIDB4MTg5NSwgMHgxODk1LCAweDE4YzMsIDB4MDgwYywgMHgwZGM1LCAweGE1NmMsCi0JMHhhNDcwLCAweGE3NzQsIDB4YTY3OCwgMHg5ZDg2LCAweDAwMmMsIDB4MDkwNCwgMHgxN2EyLCAweGEzN2MsCi0JMHhhMjgwLCAweDA0NTgsIDB4YTU4NCwgMHhhNDg4LCAweGE3OGMsIDB4YTY5MCwgMHg5ZDg2LCAweDAwMmMsCi0JMHgwOTA0LCAweDE3YTIsIDB4YTM5NCwgMHhhMjk4LCAweDA0MDAsIDB4YTU5YywgMHhhNGEwLCAweGE3YTQsCi0JMHhhNmE4LCAweDlkODYsIDB4MDAyYywgMHgwOTA0LCAweDE3YTIsIDB4YTNhYywgMHhhMmIwLCAweDAwYTgsCi0JMHhhNWI0LCAweGE0YjgsIDB4YTdiYywgMHhhNmMwLCAweDlkODYsIDB4MDAyYywgMHgwOTA0LCAweDE3YTIsCi0JMHhhM2M0LCAweGEyYzgsIDB4MDA1MCwgMHhhNWNjLCAweGE0ZDAsIDB4YTdkNCwgMHhhNmQ4LCAweDlkODYsCi0JMHgwMDJjLCAweDA5MDQsIDB4MTdhMiwgMHhhM2RjLCAweGEyZTAsIDB4YWIyZSwgMHhhYTMyLCAweGFkMWUsCi0JMHhhYzIyLCAweGFmMjYsIDB4YWUyYSwgMHhhOTg4LCAweDhjNjAsIDB4MmMxZCwgMHhhOGFjLCAweGFhYjAsCi0JMHhhODM2LCAweGFhM2EsIDB4ODEwOSwgMHhhOTE2LCAweDExNjAsIDB4M2U2MCwgMHg2MDFjLCAweGMwODUsCi0JMHg2MDFlLCAweGE4N2MsIDB4YzBkZCwgMHhhODdlLCAweDkwMDYsIDB4MDBjZSwgMHgwMDFlLCAweDAxMmUsCi0JMHgwMDA1LCAweDI4MDAsIDB4YTgwZSwgMHhhYjBhLCAweDJjMDAsIDB4YTgxMiwgMHgwYzcwLCAweDA4MDQsCi0JMHgxNzk0LCAweDJmZjAsIDB4MDEyNiwgMHgyMDkxLCAweDIyMDAsIDB4MDAxNiwgMHgwMGM2LCAweDNlNjAsCi0JMHg2MDE0LCAweDIwNDgsIDB4Mjk0MCwgMHhhODBlLCAweDIwNjEsIDB4MjBlYiwgMHhhODEzLCAweDIwZWIsCi0JMHgyYzA1LCAweGE4MGEsIDB4YTk2NCwgMHhhOTFhLCAweGE4N2MsIDB4ZDBhYywgMHgwOTBjLCAweDBkYzUsCi0JMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkYzUsCi0JMHhhZGNjLCAweGFjZDAsIDB4YWZkNCwgMHhhZWQ4LCAweGFiZGMsIDB4YWFlMCwgMHhhYjJlLCAweGFhMzIsCi0JMHhhZDFlLCAweGFjMjIsIDB4YWYyNiwgMHhhZTJhLCAweGE4YWMsIDB4YWFiMCwgMHhhODM2LCAweGFhM2EsCi0JMHhhOTg4LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwOCwgMHgxMTIwLCAweDgxMDksCi0JMHhhOTE2LCAweDAxMjgsIDB4MDA4MCwgMHg5MThhLCAweDAwMDIsIDB4YTkxNiwgMHgxMTYwLCAweDNlNjAsCi0JMHg2MDFjLCAweGMwODUsIDB4NjAxZSwgMHhhODdjLCAweGMwZGQsIDB4YTg3ZSwgMHg5MDA2LCAweDAwY2UsCi0JMHgwMDFlLCAweDAxMmUsIDB4MDAwNSwgMHhhODA0LCAweDkwNDUsIDB4MDkwYywgMHgwZGM1LCAweGE4MGUsCi0JMHhhMDY0LCAweGE4MWEsIDB4OTA4NCwgMHgwMDBmLCAweDkwODAsIDB4MjBmMCwgMHgyMDE1LCAweDgyZmYsCi0JMHgwOTBjLCAweDBkYzUsIDB4YWExMiwgMHgyMjA1LCAweGE4MGEsIDB4MGMwOCwgMHg5MDNlLCAweDI3MzAsCi0JMHhhODgwLCAweGQwZmMsIDB4MTE5MCwgMHgyZDAwLCAweDAwMDIsIDB4MWE3OCwgMHgxOWE1LCAweDE5YTUsCi0JMHgxYTc4LCAweDE5YTUsIDB4MWE3MiwgMHgxYTc4LCAweDE5YTUsIDB4MWExNSwgMHgxYTE1LCAweDFhMTUsCi0JMHgxYTc4LCAweDFhMTUsIDB4MWE3OCwgMHgxYTZmLCAweDFhMTUsIDB4YzBmYywgMHhhODgyLCAweGFiMmMsCi0JMHhhYTMwLCAweGFkMWMsIDB4YWMyMCwgMHhkZDljLCAweDA5MDQsIDB4MWE3YSwgMHgyYzA1LCAweDkwOGEsCi0JMHgwMDM0LCAweDFhMGMsIDB4MGRjNSwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxOTkxLCAweDE5OGYsCi0JMHgxOThmLCAweDE5OGYsIDB4MTk4ZiwgMHgxOThmLCAweDE5OTUsIDB4MTk4ZiwgMHgxOThmLCAweDE5OGYsCi0JMHgxOThmLCAweDE5OGYsIDB4MTk5OSwgMHgxOThmLCAweDE5OGYsIDB4MTk4ZiwgMHgxOThmLCAweDE5OGYsCi0JMHgxOTlkLCAweDE5OGYsIDB4MTk4ZiwgMHgxOThmLCAweDE5OGYsIDB4MTk4ZiwgMHgxOWExLCAweDA4MGMsCi0JMHgwZGM1LCAweGE3NzQsIDB4YTY3OCwgMHgwODA0LCAweDFhN2EsIDB4YTc4YywgMHhhNjkwLCAweDA4MDQsCi0JMHgxYTdhLCAweGE3YTQsIDB4YTZhOCwgMHgwODA0LCAweDFhN2EsIDB4YTdiYywgMHhhNmMwLCAweDA4MDQsCi0JMHgxYTdhLCAweGE3ZDQsIDB4YTZkOCwgMHgwODA0LCAweDFhN2EsIDB4YTg5OCwgMHg5MDFkLCAweDExMDgsCi0JMHhhYjljLCAweDkwMTYsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCi0JMHgwMDFiLCAweDAwMDIsIDB4MTljZCwgMHgxOWNkLCAweDE5Y2YsIDB4MTljZCwgMHgxOWNkLCAweDE5Y2QsCi0JMHgxOWQ5LCAweDE5Y2QsIDB4MTljZCwgMHgxOWNkLCAweDE5ZTMsIDB4MTljZCwgMHgxOWNkLCAweDE5Y2QsCi0JMHgxOWVkLCAweDE5Y2QsIDB4MTljZCwgMHgxOWNkLCAweDE5ZjcsIDB4MTljZCwgMHgxOWNkLCAweDE5Y2QsCi0JMHgxYTAxLCAweDE5Y2QsIDB4MTljZCwgMHgxOWNkLCAweDFhMGIsIDB4MDgwYywgMHgwZGM1LCAweGE1NzQsCi0JMHhhNDc4LCAweDlkODYsIDB4MDAwNCwgMHgwOTA0LCAweDFhN2EsIDB4YTM3YywgMHhhMjgwLCAweDA4MDQsCi0JMHgxYTdhLCAweGE1ODQsIDB4YTQ4OCwgMHg5ZDg2LCAweDAwMDQsIDB4MDkwNCwgMHgxYTdhLCAweGEzOGMsCi0JMHhhMjkwLCAweDA4MDQsIDB4MWE3YSwgMHhhNTk0LCAweGE0OTgsIDB4OWQ4NiwgMHgwMDA0LCAweDA5MDQsCi0JMHgxYTdhLCAweGEzOWMsIDB4YTJhMCwgMHgwODA0LCAweDFhN2EsIDB4YTVhNCwgMHhhNGE4LCAweDlkODYsCi0JMHgwMDA0LCAweDA5MDQsIDB4MWE3YSwgMHhhM2FjLCAweGEyYjAsIDB4MDgwNCwgMHgxYTdhLCAweGE1YjQsCi0JMHhhNGI4LCAweDlkODYsIDB4MDAwNCwgMHgwOTA0LCAweDFhN2EsIDB4YTNiYywgMHhhMmMwLCAweDA4MDQsCi0JMHgxYTdhLCAweGE1YzQsIDB4YTRjOCwgMHg5ZDg2LCAweDAwMDQsIDB4MDkwNCwgMHgxYTdhLCAweGEzY2MsCi0JMHhhMmQwLCAweDA4MDQsIDB4MWE3YSwgMHhhNWQ0LCAweGE0ZDgsIDB4OWQ4NiwgMHgwMDA0LCAweDA5MDQsCi0JMHgxYTdhLCAweGEzZGMsIDB4YTJlMCwgMHgwODA0LCAweDFhN2EsIDB4YTg5OCwgMHg5MDFkLCAweDExMDgsCi0JMHhhYjljLCAweDkwMTYsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCi0JMHgwMDFiLCAweDAwMDIsIDB4MWEzZCwgMHgxYTNiLCAweDFhM2IsIDB4MWEzYiwgMHgxYTNiLCAweDFhM2IsCi0JMHgxYTQ3LCAweDFhM2IsIDB4MWEzYiwgMHgxYTNiLCAweDFhM2IsIDB4MWEzYiwgMHgxYTUxLCAweDFhM2IsCi0JMHgxYTNiLCAweDFhM2IsIDB4MWEzYiwgMHgxYTNiLCAweDFhNWIsIDB4MWEzYiwgMHgxYTNiLCAweDFhM2IsCi0JMHgxYTNiLCAweDFhM2IsIDB4MWE2NSwgMHgwODBjLCAweDBkYzUsIDB4YTU2YywgMHhhNDcwLCAweGE3NzQsCi0JMHhhNjc4LCAweDlkODYsIDB4MDAwYywgMHgwNWIwLCAweGEzN2MsIDB4YTI4MCwgMHgwNDk4LCAweGE1ODQsCi0JMHhhNDg4LCAweGE3OGMsIDB4YTY5MCwgMHg5ZDg2LCAweDAwMGMsIDB4MDU2MCwgMHhhMzk0LCAweGEyOTgsCi0JMHgwNDQ4LCAweGE1OWMsIDB4YTRhMCwgMHhhN2E0LCAweGE2YTgsIDB4OWQ4NiwgMHgwMDBjLCAweDA1MTAsCi0JMHhhM2FjLCAweGEyYjAsIDB4MDBmOCwgMHhhNWI0LCAweGE0YjgsIDB4YTdiYywgMHhhNmMwLCAweDlkODYsCi0JMHgwMDBjLCAweDAxYzAsIDB4YTNjNCwgMHhhMmM4LCAweDAwYTgsIDB4YTVjYywgMHhhNGQwLCAweGE3ZDQsCi0JMHhhNmQ4LCAweDlkODYsIDB4MDAwYywgMHgwMTcwLCAweGEzZGMsIDB4YTJlMCwgMHgwMDU4LCAweDlkODYsCi0JMHgwMDBlLCAweDExMzAsIDB4MDgwYywgMHgyMGE4LCAweDE5MDQsIDB4MTk0ZSwgMHg5MDBlLCAweDAwNTAsCi0JMHgwODBjLCAweDBkYzUsIDB4YWIyZSwgMHhhYTMyLCAweGFkMWUsIDB4YWMyMiwgMHhhZjI2LCAweGFlMmEsCi0JMHgwODBjLCAweDIwYTgsIDB4MDAwNSwgMHg2MDE0LCAweDIwNDgsIDB4NjExOCwgMHg4MWZmLCAweDAxNDgsCi0JMHg4MTBjLCAweDgxMGMsIDB4ODEwYywgMHg4MWZmLCAweDExMTgsIDB4YTg4NywgMHgwMDAxLCAweDAwMDgsCi0JMHhhOTg2LCAweDYwMWIsIDB4MDAwMiwgMHhhODc0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg0LCAweDAwMDgsCi0JMHgwMTUwLCAweDAwZTksIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDgsCi0JMHgwODBjLCAweGIxODAsIDB4MDAwNSwgMHhhOTc0LCAweGQxZGMsIDB4MTEwOCwgMHgwMDA1LCAweGE5MzQsCi0JMHhhODhjLCAweDkxMDYsIDB4MTE1OCwgMHhhOTM4LCAweGE4OTAsIDB4OTEwNiwgMHgxMTM4LCAweDYwMWMsCi0JMHhjMDg0LCAweDYwMWUsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MDQsIDB4YjE4MCwgMHgwMDA1LCAweDAxMjYsCi0JMHgwMGM2LCAweDIwOTEsIDB4MjIwMCwgMHgwMGNlLCAweDc5MDgsIDB4OTE4YywgMHgwMDA3LCAweDkxODYsCi0JMHgwMDAwLCAweDA1YjAsIDB4OTE4NiwgMHgwMDAzLCAweDA1OTgsIDB4NjAyMCwgMHg2MDIzLCAweDAwMDAsCi0JMHgwMDA2LCAweDIwMzEsIDB4MDAwOCwgMHgwMGM2LCAweDc4MWYsIDB4MDgwOCwgMHg3ODA4LCAweGQwOWMsCi0JMHgwMTIwLCAweDA4MGMsIDB4MTM5NCwgMHg4NjMxLCAweDFkYjgsIDB4MDBjZSwgMHg3ODFmLCAweDA4MDAsCi0JMHgyMDMxLCAweDAxNjgsIDB4MDBjNiwgMHg3ODA4LCAweGQwOWMsIDB4MTkwYywgMHgxMzk0LCAweDAwY2UsCi0JMHgyMDAxLCAweDAwMzgsIDB4MDgwYywgMHgxYjkyLCAweDc5MzAsIDB4OTE4NiwgMHgwMDQwLCAweDAxNjAsCi0JMHg5MTg2LCAweDAwNDIsIDB4MTkwYywgMHgwZGM1LCAweDIwMDEsIDB4MDAxZSwgMHg4MDAxLCAweDFkZjAsCi0JMHg4NjMxLCAweDFkNDAsIDB4MDgwYywgMHgxYmExLCAweDAwMGUsIDB4NjAyMiwgMHgwMTJlLCAweDAwMDUsCi0JMHgwODBjLCAweDFiOGUsIDB4NzgyNywgMHgwMDE1LCAweDc4MjgsIDB4OWMwNiwgMHgxZGI4LCAweDc4MmIsCi0JMHgwMDAwLCAweDBjYTAsIDB4MDBmNiwgMHgyMDc5LCAweDAzMDAsIDB4NzgwMywgMHgwMDAwLCAweDc4YWIsCi0JMHgwMDA0LCAweDIwMDEsIDB4ZjAwMCwgMHg4MDAxLCAweDA5MGMsIDB4MGRjNSwgMHg3YWFjLCAweGQyYWMsCi0JMHgxZGQwLCAweDAwZmUsIDB4MDgwYywgMHg3NTY5LCAweDExODgsIDB4MjAwMSwgMHgwMTM4LCAweDIwMDMsCi0JMHgwMDAwLCAweDIwMDEsIDB4MDE2MCwgMHgyMDAzLCAweDAwMDAsIDB4MjAxMSwgMHgwMTJjLCAweGEwMDEsCi0JMHhhMDAxLCAweDgyMTEsIDB4MWRlMCwgMHgwMDU5LCAweDA4MDQsIDB4NzYxNiwgMHgwNDc5LCAweDAwMzksCi0JMHgyMDAxLCAweDAxNjAsIDB4MjUwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweDAyMDAsIDB4MDgwYywgMHgyYzg2LCAweDIwMDksIDB4MDAzYywgMHgwODBjLCAweDI0MzIsCi0JMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLCAweDcwMDAsIDB4OTA4NCwgMHgwMDNjLCAweDFkZTAsCi0JMHgwODBjLCAweDg1ZjEsIDB4NzBhMCwgMHg3MGEyLCAweDcwOTgsIDB4NzA5YSwgMHg3MDljLCAweDcwOWUsCi0JMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDIwLCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLCAweDA4MGMsCi0JMHgxMzIyLCAweDc4MDMsIDB4MDAwMSwgMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDAxMzgsCi0JMHgyMDE0LCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAxNjAsIDB4MjAyYywgMHgyMDAzLCAweDAwMDAsCi0JMHgwODBjLCAweDc1NjksIDB4MTEwOCwgMHgwMDA1LCAweDIwMjEsIDB4MDI2MCwgMHgyMDAxLCAweDAxNDEsCi0JMHgyMDFjLCAweGQzZGMsIDB4MTE2OCwgMHgyMDAxLCAweDAxMDksIDB4MjAxYywgMHg5MzljLCAweDAwNDgsCi0JMHgxMTYwLCAweDIwMDEsIDB4MDExMSwgMHgyMDFjLCAweDgzZmYsIDB4MTExMCwgMHg4NDIxLCAweDFkNzAsCi0JMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MDA0NiwgMHgyMDIxLCAweDAwMTksCi0JMHgyMDAzLCAweDAwNDgsIDB4YTAwMSwgMHhhMDAxLCAweDIwMWMsIDB4OTM5YywgMHgwMDQ4LCAweDAxMjAsCi0JMHg4NDIxLCAweDFkYjAsIDB4MDA0ZSwgMHgwYzYwLCAweDAwNGUsIDB4MGM0MCwgMHg2MDFjLCAweGMwODQsCi0JMHg2MDFlLCAweDAwMDUsIDB4MmMwOCwgMHg2MjFjLCAweDA4MGMsIDB4MTYxMSwgMHg3OTMwLCAweDAwMDUsCi0JMHgyYzA4LCAweDYyMWMsIDB4MDgwYywgMHgxNmJjLCAweDc5MzAsIDB4MDAwNSwgMHg4MDAxLCAweDFkZjAsCi0JMHgwMDA1LCAweDIwMzEsIDB4MDA2NCwgMHg3ODFjLCAweDkwODQsIDB4MDAwNywgMHgwMTcwLCAweDIwMDEsCi0JMHgwMDM4LCAweDBjNDEsIDB4OTE4NiwgMHgwMDQwLCAweDA5MDQsIDB4MWJmZiwgMHgyMDAxLCAweDAwMWUsCi0JMHgwYzY5LCAweDg2MzEsIDB4MWQ4MCwgMHgwODBjLCAweDBkYzUsIDB4NzgxZiwgMHgwMjAyLCAweDIwMDEsCi0JMHgwMTVkLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDBkYWMsIDB4MGMwMSwgMHg3ODFjLCAweGQwODQsCi0JMHgwMTEwLCAweDA4NjEsIDB4MDRlMCwgMHgyMDAxLCAweDAwMzAsIDB4MDg5MSwgMHg5MTg2LCAweDAwNDAsCi0JMHgwNTY4LCAweDc4MWMsIDB4ZDA4NCwgMHgxZGE4LCAweDc4MWYsIDB4MDEwMSwgMHgyMDAxLCAweDAwMTQsCi0JMHgwODY5LCAweDIwMDEsIDB4MDAzNywgMHgwODIxLCAweDkxODYsIDB4MDA0MCwgMHgwMTQwLCAweDIwMDEsCi0JMHgwMDMwLCAweDA4MGMsIDB4MWI5OCwgMHg5MTg2LCAweDAwNDAsIDB4MTkwYywgMHgwZGM1LCAweDAwZDYsCi0JMHgyMDY5LCAweDAyMDAsIDB4NjkyYywgMHhkMWY0LCAweDExNzAsIDB4ZDFjNCwgMHgwMTYwLCAweGQxOWMsCi0JMHgwMTMwLCAweDY4MDAsIDB4OTA4NSwgMHgxODAwLCAweDY4MDIsIDB4MDBkZSwgMHgwMDgwLCAweDY5MDgsCi0JMHg5MTg0LCAweDAwMDcsIDB4MWRiMCwgMHgwMGRlLCAweDc4MWYsIDB4MDEwMCwgMHg3OTFjLCAweDkxODQsCi0JMHgwMDA3LCAweDA5MGMsIDB4MGRjNSwgMHhhMDAxLCAweGEwMDEsIDB4NzgxZiwgMHgwMjAwLCAweDAwMDUsCi0JMHgwMTI2LCAweDIwOTEsIDB4MjQwMCwgMHgyMDcxLCAweDFhNmEsIDB4MjA3OSwgMHgwMDkwLCAweDAxMmUsCi0JMHgwMDA1LCAweDkyODAsIDB4MDAwNSwgMHgyMDA0LCAweDIwNDgsIDB4YTk3YywgMHhkMWRjLCAweDE5MDQsCi0JMHgxY2ExLCAweGE5NjQsIDB4OTE4NCwgMHgwMDA3LCAweDAwMDIsIDB4MWMxZCwgMHgxYzhjLCAweDFjMzQsCi0JMHgxYzM2LCAweDFjMzQsIDB4MWM3NCwgMHgxYzU0LCAweDFjNDMsIDB4OTE4YywgMHgwMGZmLCAweDkxODYsCi0JMHgwMDA4LCAweDExNzAsIDB4YTg3YywgMHhkMGI0LCAweDA5MDQsIDB4MWVjZSwgMHg5MDA2LCAweGE4NDIsCi0JMHhhODNlLCAweGE5ODgsIDB4MjkwMCwgMHhhODVhLCAweGE4MTMsIDB4MjBlYiwgMHgwODA0LCAweDFjOWQsCi0JMHg5MTg2LCAweDAwNDgsIDB4MDkwNCwgMHgxYzhjLCAweDA4MGMsIDB4MGRjNSwgMHg5MTg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwMTMsIDB4MDkwNCwgMHgxYzhjLCAweDkxODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMWIsCi0JMHgwOTA0LCAweDFjOGMsIDB4MGM4OCwgMHhhODdjLCAweGQwYjQsIDB4MDkwNCwgMHgxZWNlLCAweGE4OTAsCi0JMHhhODQyLCAweGE4M2EsIDB4YTg4YywgMHhhODNlLCAweGE4MzYsIDB4YThhYywgMHhhODQ2LCAweGE4YjAsCi0JMHhhODRhLCAweGE5ODgsIDB4MDgwNCwgMHgxYzk0LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDFlLCAweDE5ZDAsIDB4YTg3YywgMHhkMGI0LCAweDA5MDQsIDB4MWVjZSwgMHhhODkwLCAweGE4NDIsCisJMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLCAweDE5MGMsIDB4NmI1ZSwgMHgyZmYwLCAweDAxMjYsCisJMHgyMDkxLCAweDIyMDAsIDB4MDAxNiwgMHgwMGM2LCAweDNlNjAsIDB4NjAxNCwgMHgyMDQ4LCAweDI5NDAsCisJMHg5MDNlLCAweDI3MzAsIDB4YTg2NCwgMHgyMDY4LCAweGE4MWEsIDB4OWQ4NCwgMHgwMDBmLCAweDkwODgsCisJMHgyMGM3LCAweDIxNjUsIDB4MDAwMiwgMHgxNzlhLCAweDE4MDgsIDB4MTc5YSwgMHgxNzlhLCAweDE3OWUsCisJMHgxN2U5LCAweDE3OWEsIDB4MTdiZSwgMHgxNzkzLCAweDE3ZmYsIDB4MTc5YSwgMHgxNzlhLCAweDE3YTMsCisJMHgxOGY1LCAweDE3ZDIsIDB4MTdjOCwgMHhhOTY0LCAweDkxOGMsIDB4MDBmZiwgMHg5MThlLCAweDAwNDgsCisJMHgwOTA0LCAweDE3ZmYsIDB4OTA4NSwgMHgwMDAxLCAweDA4MDQsIDB4MThlYiwgMHhhODdjLCAweGQwYWMsCisJMHgwZGM4LCAweDA4MDQsIDB4MTgwZiwgMHhhODdjLCAweGQwYWMsIDB4MGRhMCwgMHgwODA0LCAweDE4N2EsCisJMHhhODk4LCAweDkwMWQsIDB4MTEwOCwgMHhhYjljLCAweDkwMTYsIDB4YWFiMiwgMHhhYTNlLCAweGFhNDIsCisJMHgzZTAwLCAweDkwODAsIDB4MDAwOCwgMHgyMDA0LCAweDkwODAsIDB4OTMzZCwgMHgyMDA1LCAweDkwMDUsCisJMHgwOTBjLCAweDBkYzUsIDB4MjAwNCwgMHhhOGFlLCAweDA4MDQsIDB4MThkMywgMHhhODdjLCAweGQwYmMsCisJMHgwOWM4LCAweGE4OTAsIDB4YTg0MiwgMHhhODhjLCAweGE4M2UsIDB4YTg4OCwgMHgwODA0LCAweDE4MGYsCisJMHhhODdjLCAweGQwYmMsIDB4MDk3OCwgMHhhODkwLCAweGE4NDIsIDB4YTg4YywgMHhhODNlLCAweGE4ODgsCisJMHgwODA0LCAweDE4N2EsIDB4YTg3YywgMHhkMGJjLCAweDA5MjgsIDB4YTg5MCwgMHhhODQyLCAweGE4OGMsCisJMHhhODNlLCAweGE4MDQsIDB4OTA0NSwgMHgwOTBjLCAweDBkYzUsIDB4YTE2NCwgMHhhOTFhLCAweDkxZWMsCisJMHgwMDBmLCAweDlkODAsIDB4MjBjNywgMHgyMDY1LCAweGE4ODgsIDB4ZDE5YywgMHgxOTA0LCAweDE4N2EsCisJMHgwNDMwLCAweGE4N2MsIDB4ZDBhYywgMHgwOTA0LCAweDE3OWEsIDB4YTgwNCwgMHg5MDQ1LCAweDA5MGMsCisJMHgwZGM1LCAweGExNjQsIDB4YTkxYSwgMHg5MWVjLCAweDAwMGYsIDB4OWQ4MCwgMHgyMGM3LCAweDIwNjUsCisJMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHhkMTljLCAweDE5MDQsIDB4MTg3YSwgMHgwMDgwLCAweGE4N2MsCisJMHhkMGFjLCAweDA5MDQsIDB4MTc5YSwgMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHgwODA0LCAweDE4N2EsCisJMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHgxNzlhLCAweDkwMDYsIDB4YTg0MiwgMHhhODNlLCAweDJjMDUsCisJMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDE4MzIsCisJMHgxODMyLCAweDE4MzQsIDB4MTgzMiwgMHgxODMyLCAweDE4MzIsIDB4MTgzZSwgMHgxODMyLCAweDE4MzIsCisJMHgxODMyLCAweDE4NDgsIDB4MTgzMiwgMHgxODMyLCAweDE4MzIsIDB4MTg1MiwgMHgxODMyLCAweDE4MzIsCisJMHgxODMyLCAweDE4NWMsIDB4MTgzMiwgMHgxODMyLCAweDE4MzIsIDB4MTg2NiwgMHgxODMyLCAweDE4MzIsCisJMHgxODMyLCAweDE4NzAsIDB4MDgwYywgMHgwZGM1LCAweGE1NzQsIDB4YTQ3OCwgMHg5ZDg2LCAweDAwMjQsCisJMHgwOTA0LCAweDE3YTgsIDB4YTM3YywgMHhhMjgwLCAweDA4MDQsIDB4MThkMywgMHhhNTg0LCAweGE0ODgsCisJMHg5ZDg2LCAweDAwMjQsIDB4MDkwNCwgMHgxN2E4LCAweGEzOGMsIDB4YTI5MCwgMHgwODA0LCAweDE4ZDMsCisJMHhhNTk0LCAweGE0OTgsIDB4OWQ4NiwgMHgwMDI0LCAweDA5MDQsIDB4MTdhOCwgMHhhMzljLCAweGEyYTAsCisJMHgwODA0LCAweDE4ZDMsIDB4YTVhNCwgMHhhNGE4LCAweDlkODYsIDB4MDAyNCwgMHgwOTA0LCAweDE3YTgsCisJMHhhM2FjLCAweGEyYjAsIDB4MDgwNCwgMHgxOGQzLCAweGE1YjQsIDB4YTRiOCwgMHg5ZDg2LCAweDAwMjQsCisJMHgwOTA0LCAweDE3YTgsIDB4YTNiYywgMHhhMmMwLCAweDA4MDQsIDB4MThkMywgMHhhNWM0LCAweGE0YzgsCisJMHg5ZDg2LCAweDAwMjQsIDB4MDkwNCwgMHgxN2E4LCAweGEzY2MsIDB4YTJkMCwgMHgwODA0LCAweDE4ZDMsCisJMHhhNWQ0LCAweGE0ZDgsIDB4OWQ4NiwgMHgwMDI0LCAweDA5MDQsIDB4MTdhOCwgMHhhM2RjLCAweGEyZTAsCisJMHgwODA0LCAweDE4ZDMsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCisJMHgwMDFiLCAweDAwMDIsIDB4MTg5ZCwgMHgxODliLCAweDE4OWIsIDB4MTg5YiwgMHgxODliLCAweDE4OWIsCisJMHgxOGE4LCAweDE4OWIsIDB4MTg5YiwgMHgxODliLCAweDE4OWIsIDB4MTg5YiwgMHgxOGIzLCAweDE4OWIsCisJMHgxODliLCAweDE4OWIsIDB4MTg5YiwgMHgxODliLCAweDE4YmUsIDB4MTg5YiwgMHgxODliLCAweDE4OWIsCisJMHgxODliLCAweDE4OWIsIDB4MThjOSwgMHgwODBjLCAweDBkYzUsIDB4YTU2YywgMHhhNDcwLCAweGE3NzQsCisJMHhhNjc4LCAweDlkODYsIDB4MDAyYywgMHgwOTA0LCAweDE3YTgsIDB4YTM3YywgMHhhMjgwLCAweDA0NTgsCisJMHhhNTg0LCAweGE0ODgsIDB4YTc4YywgMHhhNjkwLCAweDlkODYsIDB4MDAyYywgMHgwOTA0LCAweDE3YTgsCisJMHhhMzk0LCAweGEyOTgsIDB4MDQwMCwgMHhhNTljLCAweGE0YTAsIDB4YTdhNCwgMHhhNmE4LCAweDlkODYsCisJMHgwMDJjLCAweDA5MDQsIDB4MTdhOCwgMHhhM2FjLCAweGEyYjAsIDB4MDBhOCwgMHhhNWI0LCAweGE0YjgsCisJMHhhN2JjLCAweGE2YzAsIDB4OWQ4NiwgMHgwMDJjLCAweDA5MDQsIDB4MTdhOCwgMHhhM2M0LCAweGEyYzgsCisJMHgwMDUwLCAweGE1Y2MsIDB4YTRkMCwgMHhhN2Q0LCAweGE2ZDgsIDB4OWQ4NiwgMHgwMDJjLCAweDA5MDQsCisJMHgxN2E4LCAweGEzZGMsIDB4YTJlMCwgMHhhYjJlLCAweGFhMzIsIDB4YWQxZSwgMHhhYzIyLCAweGFmMjYsCisJMHhhZTJhLCAweGE5ODgsIDB4OGM2MCwgMHgyYzFkLCAweGE4YWMsIDB4YWFiMCwgMHhhODM2LCAweGFhM2EsCisJMHg4MTA5LCAweGE5MTYsIDB4MTE2MCwgMHgzZTYwLCAweDYwMWMsIDB4YzA4NSwgMHg2MDFlLCAweGE4N2MsCisJMHhjMGRkLCAweGE4N2UsIDB4OTAwNiwgMHgwMGNlLCAweDAwMWUsIDB4MDEyZSwgMHgwMDA1LCAweDI4MDAsCisJMHhhODBlLCAweGFiMGEsIDB4MmMwMCwgMHhhODEyLCAweDBjNzAsIDB4MDgwNCwgMHgxNzlhLCAweDIwMDEsCisJMHgxODBkLCAweDIwMDQsIDB4ZDA4YywgMHgxOTBjLCAweDZiNWUsIDB4MmZmMCwgMHgwMTI2LCAweDIwOTEsCisJMHgyMjAwLCAweDAwMTYsIDB4MDBjNiwgMHgzZTYwLCAweDYwMTQsIDB4MjA0OCwgMHgyOTQwLCAweGE4MGUsCisJMHgyMDYxLCAweDIwYzIsIDB4YTgxMywgMHgyMGMyLCAweDJjMDUsIDB4YTgwYSwgMHhhOTY0LCAweGE5MWEsCisJMHhhODdjLCAweGQwYWMsIDB4MDkwYywgMHgwZGM1LCAweDkwMDYsIDB4YTg0MiwgMHhhODNlLCAweDJjMDUsCisJMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZGM1LCAweGFkY2MsIDB4YWNkMCwgMHhhZmQ0LCAweGFlZDgsCisJMHhhYmRjLCAweGFhZTAsIDB4YWIyZSwgMHhhYTMyLCAweGFkMWUsIDB4YWMyMiwgMHhhZjI2LCAweGFlMmEsCisJMHhhOGFjLCAweGFhYjAsIDB4YTgzNiwgMHhhYTNhLCAweGE5ODgsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MDg2LCAweDAwMDgsIDB4MTEyMCwgMHg4MTA5LCAweGE5MTYsIDB4MDEyOCwgMHgwMDgwLCAweDkxOGEsCisJMHgwMDAyLCAweGE5MTYsIDB4MTE2MCwgMHgzZTYwLCAweDYwMWMsIDB4YzA4NSwgMHg2MDFlLCAweGE4N2MsCisJMHhjMGRkLCAweGE4N2UsIDB4OTAwNiwgMHgwMGNlLCAweDAwMWUsIDB4MDEyZSwgMHgwMDA1LCAweGE4MDQsCisJMHg5MDQ1LCAweDA5MGMsIDB4MGRjNSwgMHhhODBlLCAweGEwNjQsIDB4YTgxYSwgMHg5MDg0LCAweDAwMGYsCisJMHg5MDgwLCAweDIwYzcsIDB4MjAxNSwgMHg4MmZmLCAweDA5MGMsIDB4MGRjNSwgMHhhYTEyLCAweDIyMDUsCisJMHhhODBhLCAweDBjMDgsIDB4OTAzZSwgMHgyNzMwLCAweGE4ODAsIDB4ZDBmYywgMHgxMTkwLCAweDJkMDAsCisJMHgwMDAyLCAweDFhNGYsIDB4MTliMSwgMHgxOWIxLCAweDFhNGYsIDB4MWE0ZiwgMHgxYTQ5LCAweDFhNGYsCisJMHgxOWIxLCAweDFhMDAsIDB4MWEwMCwgMHgxYTAwLCAweDFhNGYsIDB4MWE0ZiwgMHgxYTRmLCAweDFhNDYsCisJMHgxYTAwLCAweGMwZmMsIDB4YTg4MiwgMHhhYjJjLCAweGFhMzAsIDB4YWQxYywgMHhhYzIwLCAweGRkOWMsCisJMHgwOTA0LCAweDFhNTEsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCisJMHgwMDFiLCAweDAwMDIsIDB4MTk5ZCwgMHgxOTliLCAweDE5OWIsIDB4MTk5YiwgMHgxOTliLCAweDE5OWIsCisJMHgxOWExLCAweDE5OWIsIDB4MTk5YiwgMHgxOTliLCAweDE5OWIsIDB4MTk5YiwgMHgxOWE1LCAweDE5OWIsCisJMHgxOTliLCAweDE5OWIsIDB4MTk5YiwgMHgxOTliLCAweDE5YTksIDB4MTk5YiwgMHgxOTliLCAweDE5OWIsCisJMHgxOTliLCAweDE5OWIsIDB4MTlhZCwgMHgwODBjLCAweDBkYzUsIDB4YTc3NCwgMHhhNjc4LCAweDA4MDQsCisJMHgxYTUxLCAweGE3OGMsIDB4YTY5MCwgMHgwODA0LCAweDFhNTEsIDB4YTdhNCwgMHhhNmE4LCAweDA4MDQsCisJMHgxYTUxLCAweGE3YmMsIDB4YTZjMCwgMHgwODA0LCAweDFhNTEsIDB4YTdkNCwgMHhhNmQ4LCAweDA4MDQsCisJMHgxYTUxLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsIDB4MGRjNSwgMHg5MDgyLCAweDAwMWIsCisJMHgwMDAyLCAweDE5ZDQsIDB4MTlkNCwgMHgxOWQ2LCAweDE5ZDQsIDB4MTlkNCwgMHgxOWQ0LCAweDE5ZGMsCisJMHgxOWQ0LCAweDE5ZDQsIDB4MTlkNCwgMHgxOWUyLCAweDE5ZDQsIDB4MTlkNCwgMHgxOWQ0LCAweDE5ZTgsCisJMHgxOWQ0LCAweDE5ZDQsIDB4MTlkNCwgMHgxOWVlLCAweDE5ZDQsIDB4MTlkNCwgMHgxOWQ0LCAweDE5ZjQsCisJMHgxOWQ0LCAweDE5ZDQsIDB4MTlkNCwgMHgxOWZhLCAweDA4MGMsIDB4MGRjNSwgMHhhNTc0LCAweGE0NzgsCisJMHhhMzdjLCAweGEyODAsIDB4MDgwNCwgMHgxYTUxLCAweGE1ODQsIDB4YTQ4OCwgMHhhMzhjLCAweGEyOTAsCisJMHgwODA0LCAweDFhNTEsIDB4YTU5NCwgMHhhNDk4LCAweGEzOWMsIDB4YTJhMCwgMHgwODA0LCAweDFhNTEsCisJMHhhNWE0LCAweGE0YTgsIDB4YTNhYywgMHhhMmIwLCAweDA4MDQsIDB4MWE1MSwgMHhhNWI0LCAweGE0YjgsCisJMHhhM2JjLCAweGEyYzAsIDB4MDgwNCwgMHgxYTUxLCAweGE1YzQsIDB4YTRjOCwgMHhhM2NjLCAweGEyZDAsCisJMHgwODA0LCAweDFhNTEsIDB4YTVkNCwgMHhhNGQ4LCAweGEzZGMsIDB4YTJlMCwgMHgwODA0LCAweDFhNTEsCisJMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkYzUsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsCisJMHgxYTIzLCAweDFhMjEsIDB4MWEyMSwgMHgxYTIxLCAweDFhMjEsIDB4MWEyMSwgMHgxYTJhLCAweDFhMjEsCisJMHgxYTIxLCAweDFhMjEsIDB4MWEyMSwgMHgxYTIxLCAweDFhMzEsIDB4MWEyMSwgMHgxYTIxLCAweDFhMjEsCisJMHgxYTIxLCAweDFhMjEsIDB4MWEzOCwgMHgxYTIxLCAweDFhMjEsIDB4MWEyMSwgMHgxYTIxLCAweDFhMjEsCisJMHgxYTNmLCAweDA4MGMsIDB4MGRjNSwgMHhhNTZjLCAweGE0NzAsIDB4YTc3NCwgMHhhNjc4LCAweGEzN2MsCisJMHhhMjgwLCAweDA0MzgsIDB4YTU4NCwgMHhhNDg4LCAweGE3OGMsIDB4YTY5MCwgMHhhMzk0LCAweGEyOTgsCisJMHgwNDAwLCAweGE1OWMsIDB4YTRhMCwgMHhhN2E0LCAweGE2YTgsIDB4YTNhYywgMHhhMmIwLCAweDAwYzgsCisJMHhhNWI0LCAweGE0YjgsIDB4YTdiYywgMHhhNmMwLCAweGEzYzQsIDB4YTJjOCwgMHgwMDkwLCAweGE1Y2MsCisJMHhhNGQwLCAweGE3ZDQsIDB4YTZkOCwgMHhhM2RjLCAweGEyZTAsIDB4MDA1OCwgMHg5ZDg2LCAweDAwMGUsCisJMHgxMTMwLCAweDA4MGMsIDB4MjA3ZiwgMHgxOTA0LCAweDE5NWEsIDB4OTAwZSwgMHgwMDUwLCAweDA4MGMsCisJMHgwZGM1LCAweGFiMmUsIDB4YWEzMiwgMHhhZDFlLCAweGFjMjIsIDB4YWYyNiwgMHhhZTJhLCAweDA4MGMsCisJMHgyMDdmLCAweDAwMDUsIDB4NjAxNCwgMHgyMDQ4LCAweDYxMTgsIDB4ODFmZiwgMHgwMTQ4LCAweDgxMGMsCisJMHg4MTBjLCAweDgxMGMsIDB4ODFmZiwgMHgxMTE4LCAweGE4ODcsIDB4MDAwMSwgMHgwMDA4LCAweGE5ODYsCisJMHg2MDFiLCAweDAwMDIsIDB4YTg3NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NCwgMHgwMDA4LCAweDAxNTAsCisJMHgwMGU5LCAweDYwMDAsIDB4OTA4NiwgMHgwMDA0LCAweDExMjAsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsCisJMHhiMzUyLCAweDAwMDUsIDB4YTk3NCwgMHhkMWRjLCAweDExMDgsIDB4MDAwNSwgMHhhOTM0LCAweGE4OGMsCisJMHg5MTA2LCAweDExNTgsIDB4YTkzOCwgMHhhODkwLCAweDkxMDYsIDB4MTEzOCwgMHg2MDFjLCAweGMwODQsCisJMHg2MDFlLCAweDIwMDksIDB4MDA0OCwgMHgwODA0LCAweGIzNTIsIDB4MDAwNSwgMHgwMTI2LCAweDAwYzYsCisJMHgyMDkxLCAweDIyMDAsIDB4MDBjZSwgMHg3OTA4LCAweDkxOGMsIDB4MDAwNywgMHg5MTg2LCAweDAwMDAsCisJMHgwNWIwLCAweDkxODYsIDB4MDAwMywgMHgwNTk4LCAweDYwMjAsIDB4NjAyMywgMHgwMDAwLCAweDAwMDYsCisJMHgyMDMxLCAweDAwMDgsIDB4MDBjNiwgMHg3ODFmLCAweDA4MDgsIDB4NzgwOCwgMHhkMDljLCAweDAxMjAsCisJMHgwODBjLCAweDEzOTQsIDB4ODYzMSwgMHgxZGI4LCAweDAwY2UsIDB4NzgxZiwgMHgwODAwLCAweDIwMzEsCisJMHgwMTY4LCAweDAwYzYsIDB4NzgwOCwgMHhkMDljLCAweDE5MGMsIDB4MTM5NCwgMHgwMGNlLCAweDIwMDEsCisJMHgwMDM4LCAweDA4MGMsIDB4MWI2OSwgMHg3OTMwLCAweDkxODYsIDB4MDA0MCwgMHgwMTYwLCAweDkxODYsCisJMHgwMDQyLCAweDE5MGMsIDB4MGRjNSwgMHgyMDAxLCAweDAwMWUsIDB4ODAwMSwgMHgxZGYwLCAweDg2MzEsCisJMHgxZDQwLCAweDA4MGMsIDB4MWI3OCwgMHgwMDBlLCAweDYwMjIsIDB4MDEyZSwgMHgwMDA1LCAweDA4MGMsCisJMHgxYjY1LCAweDc4MjcsIDB4MDAxNSwgMHg3ODI4LCAweDljMDYsIDB4MWRiOCwgMHg3ODJiLCAweDAwMDAsCisJMHgwY2EwLCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLCAweDc4MDMsIDB4MDAwMCwgMHg3OGFiLCAweDAwMDQsCisJMHgyMDAxLCAweGYwMDAsIDB4ODAwMSwgMHgwOTBjLCAweDBkYzUsIDB4N2FhYywgMHhkMmFjLCAweDFkZDAsCisJMHgwMGZlLCAweDA4MGMsIDB4NzYzNywgMHgxMTg4LCAweDIwMDEsIDB4MDEzOCwgMHgyMDAzLCAweDAwMDAsCisJMHgyMDAxLCAweDAxNjAsIDB4MjAwMywgMHgwMDAwLCAweDIwMTEsIDB4MDEyYywgMHhhMDAxLCAweGEwMDEsCisJMHg4MjExLCAweDFkZTAsIDB4MDA1OSwgMHgwODA0LCAweDc2ZTQsIDB4MDQ3OSwgMHgwMDM5LCAweDIwMDEsCisJMHgwMTYwLCAweDI1MDIsIDB4MjAwMSwgMHgwMTM4LCAweDIyMDIsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCisJMHgwMjAwLCAweDA4MGMsIDB4MmM2ZCwgMHgyMDA5LCAweDAwM2MsIDB4MDgwYywgMHgyNDA5LCAweDIwMDEsCisJMHgwMTVkLCAweDIwMDMsIDB4MDAwMCwgMHg3MDAwLCAweDkwODQsIDB4MDAzYywgMHgxZGUwLCAweDA4MGMsCisJMHg4NzI1LCAweDcwYTAsIDB4NzBhMiwgMHg3MDk4LCAweDcwOWEsIDB4NzA5YywgMHg3MDllLCAweDIwMDEsCisJMHgwMjBkLCAweDIwMDMsIDB4MDAyMCwgMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHgwODBjLCAweDEzMjIsCisJMHg3ODAzLCAweDAwMDEsIDB4MDBmZSwgMHgwMGVlLCAweDAwMDUsIDB4MjAwMSwgMHgwMTM4LCAweDIwMTQsCisJMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMTYwLCAweDIwMmMsIDB4MjAwMywgMHgwMDAwLCAweDA4MGMsCisJMHg3NjM3LCAweDExMDgsIDB4MDAwNSwgMHgyMDIxLCAweDAyNjAsIDB4MjAwMSwgMHgwMTQxLCAweDIwMWMsCisJMHhkM2RjLCAweDExNjgsIDB4MjAwMSwgMHgwMTA5LCAweDIwMWMsIDB4OTM5YywgMHgwMDQ4LCAweDExNjAsCisJMHgyMDAxLCAweDAxMTEsIDB4MjAxYywgMHg4M2ZmLCAweDExMTAsIDB4ODQyMSwgMHgxZDcwLCAweDIwMDEsCisJMHgwMTVkLCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LCAweDAwNDYsIDB4MjAyMSwgMHgwMDE5LCAweDIwMDMsCisJMHgwMDQ4LCAweGEwMDEsIDB4YTAwMSwgMHgyMDFjLCAweDkzOWMsIDB4MDA0OCwgMHgwMTIwLCAweDg0MjEsCisJMHgxZGIwLCAweDAwNGUsIDB4MGM2MCwgMHgwMDRlLCAweDBjNDAsIDB4NjAxYywgMHhjMDg0LCAweDYwMWUsCisJMHgwMDA1LCAweDJjMDgsIDB4NjIxYywgMHgwODBjLCAweDE2MTEsIDB4NzkzMCwgMHgwMDA1LCAweDJjMDgsCisJMHg2MjFjLCAweDA4MGMsIDB4MTZiYywgMHg3OTMwLCAweDAwMDUsIDB4ODAwMSwgMHgxZGYwLCAweDAwMDUsCisJMHgyMDMxLCAweDAwNjQsIDB4NzgxYywgMHg5MDg0LCAweDAwMDcsIDB4MDE3MCwgMHgyMDAxLCAweDAwMzgsCisJMHgwYzQxLCAweDkxODYsIDB4MDA0MCwgMHgwOTA0LCAweDFiZDYsIDB4MjAwMSwgMHgwMDFlLCAweDBjNjksCisJMHg4NjMxLCAweDFkODAsIDB4MDgwYywgMHgwZGM1LCAweDc4MWYsIDB4MDIwMiwgMHgyMDAxLCAweDAxNWQsCisJMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwZGFjLCAweDBjMDEsIDB4NzgxYywgMHhkMDg0LCAweDAxMTAsCisJMHgwODYxLCAweDA0ZTAsIDB4MjAwMSwgMHgwMDMwLCAweDA4OTEsIDB4OTE4NiwgMHgwMDQwLCAweDA1NjgsCisJMHg3ODFjLCAweGQwODQsIDB4MWRhOCwgMHg3ODFmLCAweDAxMDEsIDB4MjAwMSwgMHgwMDE0LCAweDA4NjksCisJMHgyMDAxLCAweDAwMzcsIDB4MDgyMSwgMHg5MTg2LCAweDAwNDAsIDB4MDE0MCwgMHgyMDAxLCAweDAwMzAsCisJMHgwODBjLCAweDFiNmYsIDB4OTE4NiwgMHgwMDQwLCAweDE5MGMsIDB4MGRjNSwgMHgwMGQ2LCAweDIwNjksCisJMHgwMjAwLCAweDY5MmMsIDB4ZDFmNCwgMHgxMTcwLCAweGQxYzQsIDB4MDE2MCwgMHhkMTljLCAweDAxMzAsCisJMHg2ODAwLCAweDkwODUsIDB4MTgwMCwgMHg2ODAyLCAweDAwZGUsIDB4MDA4MCwgMHg2OTA4LCAweDkxODQsCisJMHgwMDA3LCAweDFkYjAsIDB4MDBkZSwgMHg3ODFmLCAweDAxMDAsIDB4NzkxYywgMHg5MTg0LCAweDAwMDcsCisJMHgwOTBjLCAweDBkYzUsIDB4YTAwMSwgMHhhMDAxLCAweDc4MWYsIDB4MDIwMCwgMHgwMDA1LCAweDAxMjYsCisJMHgyMDkxLCAweDI0MDAsIDB4MjA3MSwgMHgxYTY5LCAweDIwNzksIDB4MDA5MCwgMHgwMTJlLCAweDAwMDUsCisJMHg5MjgwLCAweDAwMDUsIDB4MjAwNCwgMHgyMDQ4LCAweGE5N2MsIDB4ZDFkYywgMHgxOTA0LCAweDFjNzgsCisJMHhhOTY0LCAweDkxODQsIDB4MDAwNywgMHgwMDAyLCAweDFiZjQsIDB4MWM2MywgMHgxYzBiLCAweDFjMGQsCisJMHgxYzBiLCAweDFjNGIsIDB4MWMyYiwgMHgxYzFhLCAweDkxOGMsIDB4MDBmZiwgMHg5MTg2LCAweDAwMDgsCisJMHgxMTcwLCAweGE4N2MsIDB4ZDBiNCwgMHgwOTA0LCAweDFlYTUsIDB4OTAwNiwgMHhhODQyLCAweGE4M2UsCisJMHhhOTg4LCAweDI5MDAsIDB4YTg1YSwgMHhhODEzLCAweDIwYzIsIDB4MDgwNCwgMHgxYzc0LCAweDkxODYsCisJMHgwMDQ4LCAweDA5MDQsIDB4MWM2MywgMHgwODBjLCAweDBkYzUsIDB4OTE4NCwgMHgwMGZmLCAweDkwODYsCisJMHgwMDEzLCAweDA5MDQsIDB4MWM2MywgMHg5MTg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDFiLCAweDA5MDQsCisJMHgxYzYzLCAweDBjODgsIDB4YTg3YywgMHhkMGI0LCAweDA5MDQsIDB4MWVhNSwgMHhhODkwLCAweGE4NDIsCiAJMHhhODNhLCAweGE4OGMsIDB4YTgzZSwgMHhhODM2LCAweGE4YWMsIDB4YTg0NiwgMHhhOGIwLCAweGE4NGEsCi0JMHhhODA0LCAweGE4NWEsIDB4MjA0MCwgMHhhMDY0LCAweDkwODQsIDB4MDAwZiwgMHg5MDgwLCAweDIwZjAsCi0JMHgyMDA1LCAweGE4MTIsIDB4YTk4OCwgMHgwNDQ4LCAweDkxOGMsIDB4MDBmZiwgMHg5MTg2LCAweDAwMTUsCi0JMHgxNTQwLCAweGE4N2MsIDB4ZDBiNCwgMHgwOTA0LCAweDFlY2UsIDB4YTgwNCwgMHhhODVhLCAweDIwNDAsCi0JMHhhMDY0LCAweDkwODQsIDB4MDAwZiwgMHg5MDgwLCAweDIwZjAsIDB4MjAwNSwgMHhhODEyLCAweGE5ODgsCi0JMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHgwMDg4LCAweGE4N2MsIDB4ZDBiNCwgMHgwOTA0LCAweDFlY2UsCi0JMHhhOTg4LCAweDkwMDYsIDB4YTg0MiwgMHhhODNlLCAweDI5MDAsIDB4YTg1YSwgMHhhODY0LCAweDkwODQsCi0JMHgwMDBmLCAweDkwODAsIDB4MjBmMCwgMHgyMDA1LCAweGE4MTIsIDB4YTkxNiwgMHhhODdjLCAweGMwZGQsCi0JMHhhODdlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAwOTAsIDB4NzgyYywgMHhkMGZjLCAweDE5MGMsCi0JMHgxZjE0LCAweDAwZTYsIDB4MjA3MSwgMHgxYTZhLCAweDcwMDAsIDB4OTAwNSwgMHgxOTA0LCAweDFkMDgsCi0JMHg3MjA2LCAweDkyODAsIDB4MDAwNSwgMHgyMDRjLCAweDkyODAsIDB4MDAwNCwgMHgyMDA0LCAweDc4MmIsCi0JMHgwMDA0LCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLCAweDc4MDMsIDB4MDA0MCwgMHgwMGZlLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4NmMsIDB4NzgzNiwgMHhiODkwLCAweDAwYmUsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsCi0JMHg3ODAzLCAweDAwNDAsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsCi0JMHg3ODFhLCAweDc4ZDcsIDB4MDAwMCwgMHgwMGZlLCAweGE4MTQsIDB4MjA1MCwgMHhhODU4LCAweDIwNDAsCi0JMHhhODEwLCAweDIwNjAsIDB4YTA2NCwgMHg5MGVjLCAweDAwMGYsIDB4YTk0NCwgMHg3OTFhLCAweDcxMTYsCi0JMHhhODQ4LCAweDc4MWUsIDB4NzAxYSwgMHg5MDA2LCAweDcwMGUsIDB4NzAxMiwgMHg3MDA0LCAweGE5NDAsCi0JMHhhODM4LCAweDkxMDYsIDB4MTUwMCwgMHhhOTNjLCAweGE4MzQsIDB4OTEwNiwgMHgxMWUwLCAweDAwMDYsCi0JMHgwMDE2LCAweGE5MzgsIDB4YTgzNCwgMHg5MTA1LCAweDAxMTgsIDB4MDAxZSwgMHgwMDBlLCAweDAwOTgsCi0JMHgwMDFlLCAweDAwMGUsIDB4OGFmZiwgMHgwMWM4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDksCi0JMHgwMzA2LCAweDIwMGIsIDB4MDgwOCwgMHgwMGQ5LCAweDAxMDgsIDB4MDBjOSwgMHgwMTJlLCAweDkwMDYsCi0JMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMDM2LCAweDAwNDYsIDB4YWIzOCwgMHhhYzM0LCAweDA4MGMsCi0JMHgyMTEwLCAweDAwNGUsIDB4MDAzZSwgMHgwZDMwLCAweDBjOTgsIDB4OTA4NSwgMHgwMDAxLCAweDBjODAsCi0JMHgyMDA5LCAweDAzMDYsIDB4MjAwYiwgMHg0ODAwLCAweDcwMjcsIDB4MDAwMCwgMHgwMDA1LCAweDAwNzYsCi0JMHgwMDY2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDM2LCAweDAwMjYsIDB4OGFmZiwgMHgwOTA0LCAweDFlYzcsCi0JMHg3MDBjLCAweDcyMTQsIDB4OTIzYSwgMHg3MDEwLCAweDcyMTgsIDB4OTIwMywgMHgwYTA0LCAweDFlYzYsCi0JMHg5NzA1LCAweDA5MDQsIDB4MWVjNiwgMHg5MDNlLCAweDI3MzAsIDB4YTg4MCwgMHhkMGZjLCAweDExOTAsCi0JMHgyZDAwLCAweDAwMDIsIDB4MWU0YiwgMHgxZDhhLCAweDFkOGEsIDB4MWU0YiwgMHgxZTRiLCAweDFlMjgsCi0JMHgxZTRiLCAweDFkOGEsIDB4MWUyZiwgMHgxZGQ5LCAweDFkZDksIDB4MWU0YiwgMHgxZTRiLCAweDFlNGIsCi0JMHgxZTIyLCAweDFkZDksIDB4YzBmYywgMHhhODgyLCAweGFiMmMsIDB4YWEzMCwgMHhhZDFjLCAweGFjMjAsCi0JMHhkZDljLCAweDA5MDQsIDB4MWU1OCwgMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkYzUsCi0JMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxZDc2LCAweDFkNzQsIDB4MWQ3NCwgMHgxZDc0LCAweDFkNzQsCi0JMHgxZDc0LCAweDFkN2EsIDB4MWQ3NCwgMHgxZDc0LCAweDFkNzQsIDB4MWQ3NCwgMHgxZDc0LCAweDFkN2UsCi0JMHgxZDc0LCAweDFkNzQsIDB4MWQ3NCwgMHgxZDc0LCAweDFkNzQsIDB4MWQ4MiwgMHgxZDc0LCAweDFkNzQsCi0JMHgxZDc0LCAweDFkNzQsIDB4MWQ3NCwgMHgxZDg2LCAweDA4MGMsIDB4MGRjNSwgMHhhNzc0LCAweGE2NzgsCi0JMHgwODA0LCAweDFlNTgsIDB4YTc4YywgMHhhNjkwLCAweDA4MDQsIDB4MWU1OCwgMHhhN2E0LCAweGE2YTgsCi0JMHgwODA0LCAweDFlNTgsIDB4YTdiYywgMHhhNmMwLCAweDA4MDQsIDB4MWU1OCwgMHhhN2Q0LCAweGE2ZDgsCi0JMHgwODA0LCAweDFlNTgsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCi0JMHgwMDFiLCAweDAwMDIsIDB4MWRhZCwgMHgxZGFkLCAweDFkYWYsIDB4MWRhZCwgMHgxZGFkLCAweDFkYWQsCi0JMHgxZGI1LCAweDFkYWQsIDB4MWRhZCwgMHgxZGFkLCAweDFkYmIsIDB4MWRhZCwgMHgxZGFkLCAweDFkYWQsCi0JMHgxZGMxLCAweDFkYWQsIDB4MWRhZCwgMHgxZGFkLCAweDFkYzcsIDB4MWRhZCwgMHgxZGFkLCAweDFkYWQsCi0JMHgxZGNkLCAweDFkYWQsIDB4MWRhZCwgMHgxZGFkLCAweDFkZDMsIDB4MDgwYywgMHgwZGM1LCAweGE1NzQsCi0JMHhhNDc4LCAweGEzN2MsIDB4YTI4MCwgMHgwODA0LCAweDFlNTgsIDB4YTU4NCwgMHhhNDg4LCAweGEzOGMsCi0JMHhhMjkwLCAweDA4MDQsIDB4MWU1OCwgMHhhNTk0LCAweGE0OTgsIDB4YTM5YywgMHhhMmEwLCAweDA4MDQsCi0JMHgxZTU4LCAweGE1YTQsIDB4YTRhOCwgMHhhM2FjLCAweGEyYjAsIDB4MDgwNCwgMHgxZTU4LCAweGE1YjQsCi0JMHhhNGI4LCAweGEzYmMsIDB4YTJjMCwgMHgwODA0LCAweDFlNTgsIDB4YTVjNCwgMHhhNGM4LCAweGEzY2MsCi0JMHhhMmQwLCAweDA4MDQsIDB4MWU1OCwgMHhhNWQ0LCAweGE0ZDgsIDB4YTNkYywgMHhhMmUwLCAweDA4MDQsCi0JMHgxZTU4LCAweDJjMDUsIDB4OTA4YSwgMHgwMDM0LCAweDFhMGMsIDB4MGRjNSwgMHg5MDgyLCAweDAwMWIsCi0JMHgwMDAyLCAweDFkZmMsIDB4MWRmYSwgMHgxZGZhLCAweDFkZmEsIDB4MWRmYSwgMHgxZGZhLCAweDFlMDQsCi0JMHgxZGZhLCAweDFkZmEsIDB4MWRmYSwgMHgxZGZhLCAweDFkZmEsIDB4MWUwYywgMHgxZGZhLCAweDFkZmEsCi0JMHgxZGZhLCAweDFkZmEsIDB4MWRmYSwgMHgxZTE0LCAweDFkZmEsIDB4MWRmYSwgMHgxZGZhLCAweDFkZmEsCi0JMHgxZGZhLCAweDFlMWIsIDB4MDgwYywgMHgwZGM1LCAweGE1NmMsIDB4YTQ3MCwgMHhhNzc0LCAweGE2NzgsCi0JMHhhMzdjLCAweGEyODAsIDB4MDgwNCwgMHgxZTU4LCAweGE1ODQsIDB4YTQ4OCwgMHhhNzhjLCAweGE2OTAsCi0JMHhhMzk0LCAweGEyOTgsIDB4MDgwNCwgMHgxZTU4LCAweGE1OWMsIDB4YTRhMCwgMHhhN2E0LCAweGE2YTgsCi0JMHhhM2FjLCAweGEyYjAsIDB4MDgwNCwgMHgxZTU4LCAweGE1YjQsIDB4YTRiOCwgMHhhN2JjLCAweGE2YzAsCi0JMHhhM2M0LCAweGEyYzgsIDB4MDRlOCwgMHhhNWNjLCAweGE0ZDAsIDB4YTdkNCwgMHhhNmQ4LCAweGEzZGMsCi0JMHhhMmUwLCAweDA0YjAsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDFlLCAweDE1MTgsCi0JMHgwODBjLCAweDIwYTgsIDB4MTkwNCwgMHgxZDI1LCAweDkwMGUsIDB4MDgwNCwgMHgxZWM3LCAweGFiNjQsCi0JMHg5MzljLCAweDAwZmYsIDB4OTM4NiwgMHgwMDQ4LCAweDExODAsIDB4MDBjNiwgMHg3MDA0LCAweDIwNjAsCi0JMHg2MDA0LCAweDkwODYsIDB4MDA0MywgMHgwMGNlLCAweDA5MDQsIDB4MWRkOSwgMHhhYjljLCAweDkwMTYsCi0JMHhhZDhjLCAweGFjOTAsIDB4YWY5NCwgMHhhZTk4LCAweDAwOTgsIDB4OTM4NiwgMHgwMDA4LCAweDA5MDQsCi0JMHgxZGQ5LCAweDA4MGMsIDB4MGRjNSwgMHhhOTY0LCAweDkxOGMsIDB4MDBmZiwgMHg5MTg2LCAweDAwMTMsCi0JMHgwOTA0LCAweDFkOGEsIDB4OTE4NiwgMHgwMDFiLCAweDA5MDQsIDB4MWRkOSwgMHgwODBjLCAweDBkYzUsCi0JMHgyMDA5LCAweDAzMGYsIDB4MjEwNCwgMHhkMGZjLCAweDA1MzgsIDB4MDA2NiwgMHgyMDA5LCAweDAzMDYsCi0JMHgyMTM0LCAweDIwMGIsIDB4NDAwMCwgMHgyMTA0LCAweDkwODQsIDB4MDAzMCwgMHgxNWI4LCAweDIwMzEsCi0JMHgxMDAwLCAweDI2MDAsIDB4OTMwMiwgMHg5MjhiLCAweDAwMDAsIDB4YTgyZSwgMHhhOTMyLCAweDAyNzgsCi0JMHg5MTA1LCAweDAxNjgsIDB4MjAxMSwgMHgwMDAwLCAweDI2MTgsIDB4MjYwMCwgMHg5NTAwLCAweGE4MWUsCi0JMHg5NDgxLCAweDAwMDAsIDB4YTgyMiwgMHhhODgwLCAweGMwZmQsIDB4YTg4MiwgMHgwMDIwLCAweGE4MmYsCi0JMHgwMDAwLCAweGE4MzMsIDB4MDAwMCwgMHgwMDZlLCAweDdiMTIsIDB4N2ExNiwgMHg3ZDAyLCAweDdjMDYsCi0JMHg3ZjBhLCAweDdlMGUsIDB4NzgyYiwgMHgwMDAxLCAweDcwMDAsIDB4ODAwMCwgMHg3MDAyLCAweGE4M2MsCi0JMHg5MzAwLCAweGE4M2UsIDB4YTg0MCwgMHg5MjAxLCAweGE4NDIsIDB4NzAwYywgMHg5MzAwLCAweDcwMGUsCi0JMHg3MDEwLCAweDkyMDEsIDB4NzAxMiwgMHgwODBjLCAweDIwYTgsIDB4MDQ0OCwgMHhkNmI0LCAweDAxMTAsCi0JMHgyMDBiLCAweDQwNDAsIDB4MjAzMSwgMHgwMDgwLCAweDk1ODQsIDB4MDA3ZiwgMHgwMTA4LCAweDk2MzIsCi0JMHg3MTI0LCAweDcwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDExOTgsIDB4YzE4NSwgMHg3MTI2LCAweDIwMDksCi0JMHgwMzA2LCAweDIxMDQsIDB4ZDBiNCwgMHgxOTA0LCAweDFlNjksIDB4MjAwYiwgMHg0MDQwLCAweDIwMDksCi0JMHgxYTg0LCAweDIxMDQsIDB4ODAwMCwgMHgwYTA0LCAweDFlNjksIDB4MjAwYSwgMHgwODA0LCAweDFlNjksCi0JMHhjMThkLCAweDcxMjYsIDB4ZDE4NCwgMHgxZDU4LCAweDA4MDQsIDB4MWU2OSwgMHg5MDA2LCAweDAwMmUsCi0JMHgwMDNlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsIDB4MDAwNSwgMHgwODBjLCAweDBkYzUsCi0JMHgwMDI2LCAweDIwMDEsIDB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4NzgyYiwgMHgwMDA0LCAweDcwMDMsCi0JMHgwMDAwLCAweDcwMDQsIDB4MjA2MCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZTU2LCAweDAxMTgsCi0JMHhhODgwLCAweGMwYmQsIDB4YTg4MiwgMHg3ODJjLCAweGQwYWMsIDB4MWRlOCwgMHgwODBjLCAweDFkMTgsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxMTgwLCAweDIwNjEsIDB4MDEwMCwgMHg2MmM4LCAweDIwMDEsCi0JMHgwMGZhLCAweDgwMDEsIDB4MWRmMCwgMHg2MGM4LCAweDkyMDYsIDB4MWRjMCwgMHg2MGM0LCAweGE4OWEsCi0JMHg2MGM4LCAweGE4OTYsIDB4NzAwNCwgMHgyMDYwLCAweDAwYzYsIDB4MDgwYywgMHhjYTcxLCAweDAwY2UsCi0JMHgyMDAxLCAweDE5ZjgsIDB4MjAwNCwgMHg5YzA2LCAweDExNjAsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsCi0JMHgyNDMyLCAweDA4MGMsIDB4YWE1OSwgMHgyMDExLCAweDAwMDAsIDB4MDgwYywgMHhhOGY3LCAweDA4MGMsCi0JMHg5YTBmLCAweDAwMmUsIDB4MDgwNCwgMHgyMDU4LCAweDAxMjYsIDB4MjA5MSwgMHgyNDAwLCAweGE4NTgsCi0JMHgyMDQwLCAweDc5MmMsIDB4NzgyYiwgMHgwMDAyLCAweDkxODQsIDB4MDcwMCwgMHgxOTA0LCAweDFlZDAsCi0JMHg3MDAwLCAweDAwMDIsIDB4MjA1OCwgMHgxZjI2LCAweDFmYTYsIDB4MjA1NiwgMHg4MDAxLCAweDcwMDIsCi0JMHg3MDI3LCAweDAwMDAsIDB4ZDE5YywgMHgxMTU4LCAweDhhZmYsIDB4MDkwNCwgMHgxZjczLCAweDA4MGMsCi0JMHgxZDFmLCAweDA5MDQsIDB4MjA1OCwgMHgwODBjLCAweDFkMWYsIDB4MDgwNCwgMHgyMDU4LCAweDc4MmIsCi0JMHgwMDA0LCAweGQxOTQsIDB4MDE0OCwgMHhhODgwLCAweGMwZmMsIDB4YTg4MiwgMHg4YWZmLCAweDE1MTgsCi0JMHhhODdjLCAweGMwZjUsIDB4YTg3ZSwgMHgwMGY4LCAweDAwMjYsIDB4MDAzNiwgMHhhYjNjLCAweGFhNDAsCi0JMHgwMDE2LCAweDc5MTAsIDB4YTgyYywgMHg5MTAwLCAweGE4MmUsIDB4NzkxNCwgMHhhODMwLCAweDkxMDEsCi0JMHhhODMyLCAweDAwMWUsIDB4NzgxMCwgMHg5MzFhLCAweDc4MTQsIDB4OTIxMywgMHg3ODAwLCAweGE4MWUsCi0JMHg3ODA0LCAweGE4MjIsIDB4YWIzZSwgMHhhYTQyLCAweDAwM2UsIDB4MDAyZSwgMHgwODBjLCAweDIwYzMsCi0JMHhhODgwLCAweGMwZmQsIDB4YTg4MiwgMHgyYTAwLCAweGE4MTYsIDB4MjgwMCwgMHhhODVhLCAweDJjMDAsCi0JMHhhODEyLCAweDcwMDMsIDB4MDAwMCwgMHgyMDA5LCAweDAzMDYsIDB4MjAwYiwgMHg0ODAwLCAweDcwMjcsCi0JMHgwMDAwLCAweDA4MDQsIDB4MjA1OCwgMHgwMGY2LCAweDAwMjYsIDB4NzgxYywgMHgwMDA2LCAweDc4MTgsCi0JMHgwMDA2LCAweDIwNzksIDB4MDEwMCwgMHg3YTE0LCAweDkyODQsIDB4MTk4NCwgMHg5MDg1LCAweDAwMTIsCi0JMHg3ODE2LCAweDAwMzYsIDB4MjAxOSwgMHgxMDAwLCAweDgzMTksIDB4MDkwYywgMHgwZGM1LCAweDc4MjAsCi0JMHhkMGJjLCAweDFkZDAsIDB4MDAzZSwgMHg3OWM4LCAweDAwMGUsIDB4OTEwMiwgMHgwMDFlLCAweDAwMDYsCi0JMHgwMDE2LCAweDc5YzQsIDB4MDAwZSwgMHg5MTAzLCAweDc4YzYsIDB4MDAwZSwgMHg3OGNhLCAweDkyODQsCi0JMHgxOTg0LCAweDkwODUsIDB4MDAxMiwgMHg3ODE2LCAweDAwMmUsIDB4MDBmZSwgMHg3ODJiLCAweDAwMDgsCi0JMHg3MDAzLCAweDAwMDAsIDB4MDgwYywgMHgxZDE4LCAweDA4MDQsIDB4MjA1OCwgMHg4MDAxLCAweDcwMDIsCi0JMHg3MDI0LCAweDgwMDQsIDB4NzAyNiwgMHhkMTk0LCAweDAxNzAsIDB4NzgyYywgMHhkMGZjLCAweDE5MDQsCi0JMHgxZjE5LCAweGQxOWMsIDB4MTkwNCwgMHgyMDU0LCAweDhhZmYsIDB4MDkwNCwgMHgyMDU4LCAweDA4MGMsCi0JMHgxZDFmLCAweDA4MDQsIDB4MjA1OCwgMHgwMDI2LCAweDAwMzYsIDB4YWIzYywgMHhhYTQwLCAweDA4MGMsCi0JMHgyMGMzLCAweGRkOWMsIDB4MTkwNCwgMHgyMDEzLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsCi0JMHgwZGM1LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDFmZTcsIDB4MWZlNywgMHgxZmU5LCAweDFmZTcsCi0JMHgxZmU3LCAweDFmZTcsIDB4MWZlZiwgMHgxZmU3LCAweDFmZTcsIDB4MWZlNywgMHgxZmY1LCAweDFmZTcsCi0JMHgxZmU3LCAweDFmZTcsIDB4MWZmYiwgMHgxZmU3LCAweDFmZTcsIDB4MWZlNywgMHgyMDAxLCAweDFmZTcsCi0JMHgxZmU3LCAweDFmZTcsIDB4MjAwNywgMHgxZmU3LCAweDFmZTcsIDB4MWZlNywgMHgyMDBkLCAweDA4MGMsCi0JMHgwZGM1LCAweGEwN2MsIDB4OTMxYSwgMHhhMDgwLCAweDkyMTMsIDB4MDgwNCwgMHgxZjQ4LCAweGEwOGMsCi0JMHg5MzFhLCAweGEwOTAsIDB4OTIxMywgMHgwODA0LCAweDFmNDgsIDB4YTA5YywgMHg5MzFhLCAweGEwYTAsCi0JMHg5MjEzLCAweDA4MDQsIDB4MWY0OCwgMHhhMGFjLCAweDkzMWEsIDB4YTBiMCwgMHg5MjEzLCAweDA4MDQsCi0JMHgxZjQ4LCAweGEwYmMsIDB4OTMxYSwgMHhhMGMwLCAweDkyMTMsIDB4MDgwNCwgMHgxZjQ4LCAweGEwY2MsCi0JMHg5MzFhLCAweGEwZDAsIDB4OTIxMywgMHgwODA0LCAweDFmNDgsIDB4YTBkYywgMHg5MzFhLCAweGEwZTAsCi0JMHg5MjEzLCAweDA4MDQsIDB4MWY0OCwgMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkYzUsCi0JMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgyMDM2LCAweDIwMzQsIDB4MjAzNCwgMHgyMDM0LCAweDIwMzQsCi0JMHgyMDM0LCAweDIwM2MsIDB4MjAzNCwgMHgyMDM0LCAweDIwMzQsIDB4MjAzNCwgMHgyMDM0LCAweDIwNDIsCi0JMHgyMDM0LCAweDIwMzQsIDB4MjAzNCwgMHgyMDM0LCAweDIwMzQsIDB4MjA0OCwgMHgyMDM0LCAweDIwMzQsCi0JMHgyMDM0LCAweDIwMzQsIDB4MjAzNCwgMHgyMDRlLCAweDA4MGMsIDB4MGRjNSwgMHhhMDdjLCAweDkzMWEsCi0JMHhhMDgwLCAweDkyMTMsIDB4MDgwNCwgMHgxZjQ4LCAweGEwOTQsIDB4OTMxYSwgMHhhMDk4LCAweDkyMTMsCi0JMHgwODA0LCAweDFmNDgsIDB4YTBhYywgMHg5MzFhLCAweGEwYjAsIDB4OTIxMywgMHgwODA0LCAweDFmNDgsCi0JMHhhMGM0LCAweDkzMWEsIDB4YTBjOCwgMHg5MjEzLCAweDA4MDQsIDB4MWY0OCwgMHhhMGRjLCAweDkzMWEsCi0JMHhhMGUwLCAweDkyMTMsIDB4MDgwNCwgMHgxZjQ4LCAweDA4MDQsIDB4MWY0NCwgMHgwODBjLCAweDBkYzUsCi0JMHgwMTJlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDIwNzEsIDB4MWE2YSwgMHg3MDAwLCAweDkwODYsCi0JMHgwMDAwLCAweDA5MDQsIDB4MjBhMywgMHgyMDc5LCAweDAwOTAsIDB4MjAwOSwgMHgwMjA3LCAweDIxMGMsCi0JMHhkMTk0LCAweDAxYjgsIDB4MjAwOSwgMHgwMjBjLCAweDIxMGMsIDB4OTE4NCwgMHgwMDAzLCAweDAxODgsCi0JMHgwODBjLCAweGVlMWIsIDB4MjAwMSwgMHgwMTMzLCAweDIwMDQsIDB4OTAwNSwgMHgwOTBjLCAweDBkYzUsCi0JMHgwMDE2LCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDI0MzIsIDB4MDAxZSwgMHgyMDAxLCAweDAyMGMsCi0JMHgyMTAyLCAweDIwMDksIDB4MDIwNiwgMHgyMTA0LCAweDIwMDksIDB4MDIwMywgMHgyMTBjLCAweDkxMDYsCi0JMHgxMTIwLCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDI0MzIsIDB4NzgyYywgMHhkMGZjLCAweDA5YTgsCi0JMHgwODBjLCAweDFmMTQsIDB4NzAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MTk3OCwgMHg3ODJiLCAweDAwMDQsCi0JMHg3ODJjLCAweGQwYWMsIDB4MWRlOCwgMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyNDMyLCAweDc4MmIsCi0JMHgwMDAyLCAweDcwMDMsIDB4MDAwMCwgMHgwODBjLCAweDFkMTgsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCi0JMHhhODgwLCAweGQwZmMsIDB4MTFhOCwgMHg4YzYwLCAweDJjMDUsIDB4OTAwNSwgMHgwMTEwLCAweDhhNTEsCi0JMHgwMDA1LCAweGEwMDQsIDB4OTAwNSwgMHgwMTY4LCAweGE4NWEsIDB4MjA0MCwgMHhhMDY0LCAweDkwODQsCi0JMHgwMDBmLCAweDkwODAsIDB4MjBmMCwgMHgyMDY1LCAweDhjZmYsIDB4MDkwYywgMHgwZGM1LCAweDhhNTEsCi0JMHgwMDA1LCAweDIwNTAsIDB4MDAwNSwgMHhhODgwLCAweGQwZmMsIDB4MTFiOCwgMHg4YTUwLCAweDhjNjEsCi0JMHgyYzA1LCAweDkwMDUsIDB4MTE5MCwgMHgyODAwLCAweDk5MDYsIDB4MDEyMCwgMHhhMDAwLCAweDkwMDUsCi0JMHgxMTA4LCAweDI5MDAsIDB4MjA0MCwgMHhhODVhLCAweGEwNjQsIDB4OTA4NCwgMHgwMDBmLCAweDkwODAsCi0JMHgyMTAwLCAweDIwNjUsIDB4OGNmZiwgMHgwOTBjLCAweDBkYzUsIDB4MDAwNSwgMHgwMDAwLCAweDAwMWQsCi0JMHgwMDIxLCAweDAwMjUsIDB4MDAyOSwgMHgwMDJkLCAweDAwMzEsIDB4MDAzNSwgMHgwMDAwLCAweDAwMWIsCi0JMHgwMDIxLCAweDAwMjcsIDB4MDAyZCwgMHgwMDMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDIzLCAweDAwMDAsCi0JMHgwMDAwLCAweDIwZTMsIDB4MjBkZiwgMHgyMGUzLCAweDIwZTMsIDB4MjBlZCwgMHgwMDAwLCAweDIwZTMsCi0JMHgyMGVhLCAweDIwZWEsIDB4MjBlNywgMHgyMGVhLCAweDIwZWEsIDB4MDAwMCwgMHgyMGVkLCAweDIwZWEsCi0JMHgwMDAwLCAweDIwZTUsIDB4MjBlNSwgMHgwMDAwLCAweDIwZTUsIDB4MjBlZCwgMHgwMDAwLCAweDIwZTUsCi0JMHgyMGViLCAweDIwZWIsIDB4MjBlYiwgMHgwMDAwLCAweDIwZWIsIDB4MDAwMCwgMHgyMGVkLCAweDIwZWIsCi0JMHgwMGM2LCAweDAwZDYsIDB4MDA4NiwgMHhhYjQyLCAweGFjM2UsIDB4YTg4OCwgMHg5MDU1LCAweDA5MDQsCi0JMHgyMmVmLCAweDI5NDAsIDB4YTA2NCwgMHg5MGVjLCAweDAwMGYsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDA4LCAweDExMTgsIDB4MjA2MSwgMHgyMGViLCAweDAwZDAsIDB4OWRlMCwgMHgyMGYwLCAweDlkODYsCi0JMHgwMDA3LCAweDAxMzAsIDB4OWQ4NiwgMHgwMDBlLCAweDAxMTgsIDB4OWQ4NiwgMHgwMDBmLCAweDExMjAsCi0JMHhhMDhjLCAweDk0MjIsIDB4YTA5MCwgMHg5MzFiLCAweDJjMDUsIDB4OTA2NSwgMHgxMTQwLCAweDAzMTAsCi0JMHgwODA0LCAweDIyZWYsIDB4YTAwNCwgMHg5MDQ1LCAweDA5MDQsIDB4MjJlZiwgMHgwOGQ4LCAweDJjMDUsCi0JMHg5MDA1LCAweDA5MDQsIDB4MjFkNywgMHhkZDljLCAweDE5MDQsIDB4MjE5MywgMHg5MDhhLCAweDAwMzYsCi0JMHgxYTBjLCAweDBkYzUsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MjE2OCwgMHgyMTY4LCAweDIxNmEsCi0JMHgyMTY4LCAweDIxNjgsIDB4MjE2OCwgMHgyMTcwLCAweDIxNjgsIDB4MjE2OCwgMHgyMTY4LCAweDIxNzYsCi0JMHgyMTY4LCAweDIxNjgsIDB4MjE2OCwgMHgyMTdjLCAweDIxNjgsIDB4MjE2OCwgMHgyMTY4LCAweDIxODIsCi0JMHgyMTY4LCAweDIxNjgsIDB4MjE2OCwgMHgyMTg4LCAweDIxNjgsIDB4MjE2OCwgMHgyMTY4LCAweDIxOGUsCi0JMHgwODBjLCAweDBkYzUsIDB4YTA3YywgMHg5NDIyLCAweGEwODAsIDB4OTMxYiwgMHgwODA0LCAweDIxY2QsCi0JMHhhMDhjLCAweDk0MjIsIDB4YTA5MCwgMHg5MzFiLCAweDA4MDQsIDB4MjFjZCwgMHhhMDljLCAweDk0MjIsCi0JMHhhMGEwLCAweDkzMWIsIDB4MDgwNCwgMHgyMWNkLCAweGEwYWMsIDB4OTQyMiwgMHhhMGIwLCAweDkzMWIsCi0JMHgwODA0LCAweDIxY2QsIDB4YTBiYywgMHg5NDIyLCAweGEwYzAsIDB4OTMxYiwgMHgwODA0LCAweDIxY2QsCi0JMHhhMGNjLCAweDk0MjIsIDB4YTBkMCwgMHg5MzFiLCAweDA4MDQsIDB4MjFjZCwgMHhhMGRjLCAweDk0MjIsCi0JMHhhMGUwLCAweDkzMWIsIDB4MDRkMCwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCi0JMHgwMDFiLCAweDAwMDIsIDB4MjFiNSwgMHgyMWIzLCAweDIxYjMsIDB4MjFiMywgMHgyMWIzLCAweDIxYjMsCi0JMHgyMWJhLCAweDIxYjMsIDB4MjFiMywgMHgyMWIzLCAweDIxYjMsIDB4MjFiMywgMHgyMWJmLCAweDIxYjMsCi0JMHgyMWIzLCAweDIxYjMsIDB4MjFiMywgMHgyMWIzLCAweDIxYzQsIDB4MjFiMywgMHgyMWIzLCAweDIxYjMsCi0JMHgyMWIzLCAweDIxYjMsIDB4MjFjOSwgMHgwODBjLCAweDBkYzUsIDB4YTA3YywgMHg5NDIyLCAweGEwODAsCi0JMHg5MzFiLCAweDAwOTgsIDB4YTA5NCwgMHg5NDIyLCAweGEwOTgsIDB4OTMxYiwgMHgwMDcwLCAweGEwYWMsCi0JMHg5NDIyLCAweGEwYjAsIDB4OTMxYiwgMHgwMDQ4LCAweGEwYzQsIDB4OTQyMiwgMHhhMGM4LCAweDkzMWIsCi0JMHgwMDIwLCAweGEwZGMsIDB4OTQyMiwgMHhhMGUwLCAweDkzMWIsIDB4MDYzMCwgMHgyMzAwLCAweDk0MDUsCi0JMHgwMTYwLCAweDhhNTEsIDB4MDkwNCwgMHgyMmVmLCAweDhjNjAsIDB4MDgwNCwgMHgyMTNmLCAweGEwMDQsCi0JMHg5MDQ1LCAweDA5MDQsIDB4MjJlZiwgMHgwODA0LCAweDIxMWEsIDB4OGE1MSwgMHgwOTA0LCAweDIyZWYsCi0JMHg4YzYwLCAweDJjMDUsIDB4OTAwNSwgMHgxMTU4LCAweGEwMDQsIDB4OTA0NSwgMHgwOTA0LCAweDIyZWYsCi0JMHhhMDY0LCAweDkwZWMsIDB4MDAwZiwgMHg5ZGUwLCAweDIwZjAsIDB4MmMwNSwgMHgyMDYwLCAweGE4ODAsCi0JMHhjMGZjLCAweGE4ODIsIDB4MDgwNCwgMHgyMmU0LCAweDJjMDUsIDB4ODQyMiwgMHg4NDIwLCAweDgzMWEsCi0JMHg5Mzk5LCAweDAwMDAsIDB4YWMyZSwgMHhhYjMyLCAweGRkOWMsIDB4MTkwNCwgMHgyMjgxLCAweDkwODIsCi0JMHgwMDFiLCAweDAwMDIsIDB4MjIxZCwgMHgyMjFkLCAweDIyMWYsIDB4MjIxZCwgMHgyMjFkLCAweDIyMWQsCi0JMHgyMjJkLCAweDIyMWQsIDB4MjIxZCwgMHgyMjFkLCAweDIyM2IsIDB4MjIxZCwgMHgyMjFkLCAweDIyMWQsCi0JMHgyMjQ5LCAweDIyMWQsIDB4MjIxZCwgMHgyMjFkLCAweDIyNTcsIDB4MjIxZCwgMHgyMjFkLCAweDIyMWQsCi0JMHgyMjY1LCAweDIyMWQsIDB4MjIxZCwgMHgyMjFkLCAweDIyNzMsIDB4MDgwYywgMHgwZGM1LCAweGExN2MsCi0JMHgyNDAwLCAweDkxMjIsIDB4YTE4MCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGM1LCAweGEwNzQsCi0JMHg5NDIwLCAweGEwNzgsIDB4OTMxOSwgMHgwODA0LCAweDIyZGYsIDB4YTE4YywgMHgyNDAwLCAweDkxMjIsCi0JMHhhMTkwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkYzUsIDB4YTA4NCwgMHg5NDIwLCAweGEwODgsCi0JMHg5MzE5LCAweDA4MDQsIDB4MjJkZiwgMHhhMTljLCAweDI0MDAsIDB4OTEyMiwgMHhhMWEwLCAweDIzMDAsCi0JMHg5MTFiLCAweDBhMGMsIDB4MGRjNSwgMHhhMDk0LCAweDk0MjAsIDB4YTA5OCwgMHg5MzE5LCAweDA4MDQsCi0JMHgyMmRmLCAweGExYWMsIDB4MjQwMCwgMHg5MTIyLCAweGExYjAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsCi0JMHgwZGM1LCAweGEwYTQsIDB4OTQyMCwgMHhhMGE4LCAweDkzMTksIDB4MDgwNCwgMHgyMmRmLCAweGExYmMsCi0JMHgyNDAwLCAweDkxMjIsIDB4YTFjMCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGM1LCAweGEwYjQsCi0JMHg5NDIwLCAweGEwYjgsIDB4OTMxOSwgMHgwODA0LCAweDIyZGYsIDB4YTFjYywgMHgyNDAwLCAweDkxMjIsCi0JMHhhMWQwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkYzUsIDB4YTBjNCwgMHg5NDIwLCAweGEwYzgsCi0JMHg5MzE5LCAweDA4MDQsIDB4MjJkZiwgMHhhMWRjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWUwLCAweDIzMDAsCi0JMHg5MTFiLCAweDBhMGMsIDB4MGRjNSwgMHhhMGQ0LCAweDk0MjAsIDB4YTBkOCwgMHg5MzE5LCAweDA4MDQsCi0JMHgyMmRmLCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDIyOWYsIDB4MjI5ZCwgMHgyMjlkLCAweDIyOWQsCi0JMHgyMjlkLCAweDIyOWQsIDB4MjJhYywgMHgyMjlkLCAweDIyOWQsIDB4MjI5ZCwgMHgyMjlkLCAweDIyOWQsCi0JMHgyMmI5LCAweDIyOWQsIDB4MjI5ZCwgMHgyMjlkLCAweDIyOWQsIDB4MjI5ZCwgMHgyMmM2LCAweDIyOWQsCi0JMHgyMjlkLCAweDIyOWQsIDB4MjI5ZCwgMHgyMjlkLCAweDIyZDMsIDB4MDgwYywgMHgwZGM1LCAweGExN2MsCi0JMHgyNDAwLCAweDkxMjIsIDB4YTE4MCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGM1LCAweGEwNmMsCi0JMHg5NDIwLCAweGEwNzAsIDB4OTMxOSwgMHgwNDk4LCAweGExOTQsIDB4MjQwMCwgMHg5MTIyLCAweGExOTgsCi0JMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGM1LCAweGEwODQsIDB4OTQyMCwgMHhhMDg4LCAweDkzMTksCi0JMHgwNDMwLCAweGExYWMsIDB4MjQwMCwgMHg5MTIyLCAweGExYjAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsCi0JMHgwZGM1LCAweGEwOWMsIDB4OTQyMCwgMHhhMGEwLCAweDkzMTksIDB4MDBjOCwgMHhhMWM0LCAweDI0MDAsCi0JMHg5MTIyLCAweGExYzgsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGRjNSwgMHhhMGI0LCAweDk0MjAsCi0JMHhhMGI4LCAweDkzMTksIDB4MDA2MCwgMHhhMWRjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWUwLCAweDIzMDAsCi0JMHg5MTFiLCAweDBhMGMsIDB4MGRjNSwgMHhhMGNjLCAweDk0MjAsIDB4YTBkMCwgMHg5MzE5LCAweGFjMWUsCi0JMHhhYjIyLCAweGE4ODAsIDB4YzBmZCwgMHhhODgyLCAweDI4MDAsIDB4YTg1YSwgMHgyYzAwLCAweGE4MTIsCi0JMHgyYTAwLCAweGE4MTYsIDB4MDAwZSwgMHgwMDBlLCAweDAwMGUsIDB4OTAwNiwgMHgwMDI4LCAweDAwOGUsCi0JMHgwMGRlLCAweDAwY2UsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MjAwMSwgMHgwMDA1LCAweDIwMDQsCi0JMHhkMGJjLCAweDE5MGMsIDB4MGRiZSwgMHg5MDg0LCAweDAwMDcsIDB4MDAwMiwgMHgyMzEwLCAweDFmMTQsCi0JMHgyMzEwLCAweDIzMDYsIDB4MjMwOSwgMHgyMzBjLCAweDIzMDksIDB4MjMwYywgMHgwODBjLCAweDFmMTQsCi0JMHgwMDA1LCAweDA4MGMsIDB4MTFiMiwgMHgwMDA1LCAweDA4MGMsIDB4MWYxNCwgMHgwODBjLCAweDExYjIsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyNjAwLCAweDIwNzksIDB4MDIwMCwgMHgyMDcxLCAweDAyNjAsCi0JMHgyMDY5LCAweDE4MDAsIDB4NzgxNywgMHgwMDAwLCAweDc4OWIsIDB4MDgxNCwgMHg3OGEzLCAweDA0MDYsCi0JMHg3ODlmLCAweDA0MTAsIDB4MjAwOSwgMHgwMTNiLCAweDIwMGIsIDB4MDQwMCwgMHg3ODFiLCAweDAwMDIsCi0JMHg3ODNiLCAweDAwMWYsIDB4NzgzNywgMHgwMDIwLCAweDc4MDMsIDB4MTYwMCwgMHgwMTJlLCAweDAwMDUsCi0JMHgyMDkxLCAweDI2MDAsIDB4NzgxYywgMHhkMGE0LCAweDE5MGMsIDB4MjQyZiwgMHg3OTAwLCAweGQxZGMsCi0JMHgxMTE4LCAweDkwODQsIDB4MDAwNiwgMHgwMDFhLCAweDkwODQsIDB4MDAwZSwgMHgwMDAyLCAweDIzNTcsCi0JMHgyMzRmLCAweDdmNGQsIDB4MjM0ZiwgMHgyMzUxLCAweDIzNTEsIDB4MjM1MSwgMHgyMzUxLCAweDdmMzMsCi0JMHgyMzRmLCAweDIzNTMsIDB4MjM0ZiwgMHgyMzUxLCAweDIzNGYsIDB4MjM1MSwgMHgyMzRmLCAweDA4MGMsCi0JMHgwZGM1LCAweDAwMzEsIDB4MDAyMCwgMHgwODBjLCAweDdmMzMsIDB4MDgwYywgMHg3ZjRkLCAweDAwMDUsCi0JMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweGVlMWIsIDB4NzkzMCwgMHg5MTg0LCAweDAwMDMsCi0JMHgwMWMwLCAweDIwMDEsIDB4MTlmOCwgMHgyMDA0LCAweDkwMDUsIDB4MDE3MCwgMHgyMDAxLCAweDAxMzMsCi0JMHgyMDA0LCAweDkwMDUsIDB4MDkwYywgMHgwZGM1LCAweDAwYzYsIDB4MjAwMSwgMHgxOWY4LCAweDIwNjQsCi0JMHgwODBjLCAweGNhNzEsIDB4MDBjZSwgMHgwMGY4LCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDI0MzIsCi0JMHgwMGQwLCAweDkxODQsIDB4MDAxNCwgMHgwMWEwLCAweDZhMDAsIDB4OTI4NiwgMHgwMDAzLCAweDAxNjAsCi0JMHgwODBjLCAweDc1NjksIDB4MTEzOCwgMHgwODBjLCAweDc4NGUsIDB4MDgwYywgMHg2MTI3LCAweDA4MGMsCi0JMHg3NDk1LCAweDAwMTAsIDB4MDgwYywgMHg1ZmU2LCAweDA4MGMsIDB4N2ZmYywgMHgwMDQxLCAweDAwMTgsCi0JMHg5MTg0LCAweDk1NDAsIDB4MWRjOCwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgyMDcxLCAweDFhNjYsIDB4MDgwYywgMHgxYjAyLCAweDAwNWUsCi0JMHgwMDRlLCAweDAwM2UsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyZTAwLCAweDIwNzEsCi0JMHgxODAwLCAweDcxMjgsIDB4MjAwMSwgMHgxOTcwLCAweDIxMDIsIDB4MjAwMSwgMHgxOTc4LCAweDIxMDIsCi0JMHgyMDAxLCAweDAxM2IsIDB4MjEwMiwgMHgyMDc5LCAweDAyMDAsIDB4MjAwMSwgMHgwMjAxLCAweDc4OWUsCi0JMHg3OGEzLCAweDAyMDAsIDB4OTE5OCwgMHgwMDA3LCAweDgzMWMsIDB4ODMxYywgMHg4MzFjLCAweDkzOTgsCi0JMHgwMDA1LCAweDIzMjAsIDB4OTE4MiwgMHgwMjA0LCAweDEyMzAsIDB4MjAxMSwgMHgwMDA4LCAweDg0MjMsCi0JMHg4NDIzLCAweDg0MjMsIDB4MDQ4OCwgMHg5MTgyLCAweDAyNGMsIDB4MTI0MCwgMHgyMDExLCAweDAwMDcsCi0JMHg4NDAzLCAweDgwMDMsIDB4OTQwMCwgMHg5NDAwLCAweDk0MjAsIDB4MDQzMCwgMHg5MTgyLCAweDAyYmMsCi0JMHgxMjM4LCAweDIwMTEsIDB4MDAwNiwgMHg4NDAzLCAweDgwMDMsIDB4OTQwMCwgMHg5NDIwLCAweDAwZTAsCi0JMHg5MTgyLCAweDAzNGMsIDB4MTIzMCwgMHgyMDExLCAweDAwMDUsIDB4ODQwMywgMHg4MDAzLCAweDk0MjAsCi0JMHgwMDk4LCAweDkxODIsIDB4MDQyYywgMHgxMjI4LCAweDIwMTEsIDB4MDAwNCwgMHg4NDIzLCAweDg0MjMsCi0JMHgwMDU4LCAweDkxODIsIDB4MDU5YywgMHgxMjI4LCAweDIwMTEsIDB4MDAwMywgMHg4NDAzLCAweDk0MjAsCi0JMHgwMDE4LCAweDIwMTEsIDB4MDAwMiwgMHg4NDIzLCAweDk0ODIsIDB4MDIyOCwgMHg4MDAyLCAweDgwMjAsCi0JMHg4MzAxLCAweDk0MDIsIDB4MDExMCwgMHgwMjA4LCAweDgzMjEsIDB4ODIxNywgMHg4MjAzLCAweDk0MDUsCi0JMHg3ODlhLCAweDAxMmUsIDB4MDAwNSwgMHgwMDA2LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTQsCi0JMHg5MDg0LCAweGZmYzAsIDB4OTEwZCwgMHg2OTE2LCAweDAwZGUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZDYsCi0JMHgyMDY5LCAweDAyMDAsIDB4OTAwNSwgMHg2ODEwLCAweDAxMTAsIDB4YzBhNSwgMHgwMDA4LCAweGMwYTQsCi0JMHg2ODEyLCAweDAwZGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTAsCi0JMHg5MDg0LCAweGZmZjgsIDB4OTEwZCwgMHg2OTEyLCAweDAwZGUsIDB4MDAwZSwgMHgwMDA1LCAweDc5MzgsCi0JMHgwODBjLCAweDBkYmUsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsIDB4NzkwMiwgMHhhMDAxLCAweGEwMDEsCi0JMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweDc5MDIsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsCi0JMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHgwMGZlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDI4MDAsCi0JMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHgxODAwLCAweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweDJjODAsCi0JMHgwODBjLCAweDJiOWIsIDB4NjA1NCwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDkwODQsCi0JMHgwMDBjLCAweDYxNTAsIDB4OTE4YywgMHhmZmYzLCAweDkxMDUsIDB4NjA1MiwgMHg2MDUwLCAweDkwODQsCi0JMHhiMTdmLCAweDkwODUsIDB4MjAwMCwgMHg2MDUyLCAweDIwMDksIDB4MTk5ZSwgMHgyMDExLCAweDE5OWYsCi0JMHg2MzU4LCAweDkzOWMsIDB4MzhmMCwgMHgyMzIwLCAweDA4MGMsIDB4MmJkZiwgMHgxMjM4LCAweDkzOWQsCi0JMHg0MDAzLCAweDk0YTUsIDB4ODYwMywgMHgyMzBhLCAweDI0MTIsIDB4MDAzMCwgMHg5MzlkLCAweDAyMDMsCi0JMHg5NGE1LCAweDg2MDMsIDB4MjMwYSwgMHgyNDEyLCAweDkwMDYsIDB4MDgwYywgMHgyYmNhLCAweDkwMDYsCi0JMHgwODBjLCAweDJiYWQsIDB4MjBhOSwgMHgwMDEyLCAweDFkMDQsIDB4MjQ4NCwgMHgyMDkxLCAweDYwMDAsCi0JMHgxZjA0LCAweDI0ODQsIDB4NjAyZiwgMHgwMTAwLCAweDYwMmYsIDB4MDAwMCwgMHg2MDUwLCAweDkwODUsCi0JMHgwNDAwLCAweDkwODQsIDB4ZGZmZiwgMHg2MDUyLCAweDYwMjQsIDB4NjAyNiwgMHgwODBjLCAweDI4Y2QsCi0JMHgyMDA5LCAweDAwZWYsIDB4NjEzMiwgMHg2MTM2LCAweDA4MGMsIDB4MjhkZCwgMHg2MGU3LCAweDAwMDAsCi0JMHg2MWVhLCAweDYwZTMsIDB4MDAwOCwgMHg2MDRiLCAweGY3ZjcsIDB4NjA0MywgMHgwMDAwLCAweDYwMmYsCi0JMHgwMDgwLCAweDYwMmYsIDB4MDAwMCwgMHg2MDA3LCAweDM0OWYsIDB4NjBiYiwgMHgwMDAwLCAweDIwYTksCi0JMHgwMDE4LCAweDYwYmYsIDB4MDAwMCwgMHgxZjA0LCAweDI0YjEsIDB4NjBiYiwgMHgwMDAwLCAweDYwYmYsCi0JMHgwMTA4LCAweDYwYmYsIDB4MDAxMiwgMHg2MGJmLCAweDA0MDUsIDB4NjBiZiwgMHgwMDE0LCAweDYwYmYsCi0JMHgwMzIwLCAweDYwYmYsIDB4MDAxOCwgMHg2MDFiLCAweDAwZjAsIDB4NjAxZiwgMHgwMDFlLCAweDYwMGYsCi0JMHgwMDZiLCAweDYwMmIsIDB4NDAyZiwgMHgwMTJlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAxNDAsCi0JMHg3OGMzLCAweDAwODAsIDB4NzhjMywgMHgwMDgzLCAweDc4YzMsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsCi0JMHgyMDAxLCAweDE4MzUsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MTgzNCwgMHgyMDAzLCAweDAwMDEsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDYxMjQsCi0JMHgwMDY2LCAweDIwMzEsIDB4MTgzNywgMHgyNjM0LCAweDk2YjQsIDB4MDAyOCwgMHgwMDZlLCAweDExMzgsCi0JMHg2MDIwLCAweGQxYmMsIDB4MDEyMCwgMHhkMGJjLCAweDExNjgsIDB4ZDBiNCwgMHgxMTk4LCAweDkxODQsCi0JMHg1ZTJjLCAweDExMTgsIDB4OTE4NCwgMHgwMDA3LCAweDAwYWEsIDB4OTE5NSwgMHgwMDA0LCAweDkyODQsCi0JMHgwMDA3LCAweDAwODIsIDB4MDAxNiwgMHgyMDAxLCAweDE4OGIsIDB4MjAwYywgMHhkMTg0LCAweDAwMWUsCi0JMHgwZDcwLCAweDBjOTgsIDB4MDAxNiwgMHgyMDAxLCAweDE4OGIsIDB4MjAwYywgMHhkMTk0LCAweDAwMWUsCi0JMHgwZDMwLCAweDBjNTgsIDB4MjUzNCwgMHgyNTFhLCAweDI1MWQsIDB4MjUyMCwgMHgyNTI1LCAweDI1MjcsCi0JMHgyNTJiLCAweDI1MmYsIDB4MDgwYywgMHg5MjFlLCAweDAwYjgsIDB4MDgwYywgMHg5MmVkLCAweDAwYTAsCi0JMHgwODBjLCAweDkyZWQsIDB4MDgwYywgMHg5MjFlLCAweDAwNzgsIDB4MDA5OSwgMHgwMDY4LCAweDA4MGMsCi0JMHg5MjFlLCAweDAwNzksIDB4MDA0OCwgMHgwODBjLCAweDkyZWQsIDB4MDA1OSwgMHgwMDI4LCAweDA4MGMsCi0JMHg5MmVkLCAweDA4MGMsIDB4OTIxZSwgMHgwMDI5LCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsCi0JMHgwMDA1LCAweDAwYTYsIDB4NjEyNCwgMHg2MDI4LCAweGQwOWMsIDB4MDExOCwgMHhkMTljLCAweDE5MDQsCi0JMHgyN2E1LCAweGQxZjQsIDB4MTkwYywgMHgwZGJlLCAweDA4MGMsIDB4NzU2OSwgMHgwOTA0LCAweDI1OGYsCi0JMHgwODBjLCAweGQ1NjEsIDB4MTEyMCwgMHg3MDAwLCAweDkwODYsIDB4MDAwMywgMHgwNTcwLCAweDYwMjQsCi0JMHg5MDg0LCAweDE4MDAsIDB4MDU1MCwgMHgwODBjLCAweDc1OGMsIDB4MDExOCwgMHgwODBjLCAweDc1N2EsCi0JMHgxNTIwLCAweDYwMjcsIDB4MDAyMCwgMHg2MDQzLCAweDAwMDAsIDB4MDgwYywgMHhkNTYxLCAweDAxNjgsCi0JMHgwODBjLCAweDc1OGMsIDB4MTE1MCwgMHgyMDAxLCAweDE5YTksIDB4MjAwMywgMHgwMDAxLCAweDYwMjcsCi0JMHgxODAwLCAweDA4MGMsIDB4NzNlNCwgMHgwODA0LCAweDI3YTgsIDB4NzBhNCwgMHg5MDA1LCAweDExNTAsCi0JMHg3MGE3LCAweDAwMDEsIDB4MDBkNiwgMHgyMDY5LCAweDAxNDAsIDB4MDgwYywgMHg3NWJkLCAweDAwZGUsCi0JMHgxOTA0LCAweDI3YTgsIDB4MDgwYywgMHg3ODU4LCAweDA0MjgsIDB4MDgwYywgMHg3NThjLCAweDE1OTAsCi0JMHg2MDI0LCAweDkwODQsIDB4MTgwMCwgMHgxMTA4LCAweDA0NjgsIDB4MDgwYywgMHg3ODU4LCAweDA4MGMsCi0JMHg3ODRlLCAweDA4MGMsIDB4NjEyNywgMHgwODBjLCAweDc0OTUsIDB4MDgwNCwgMHgyN2E1LCAweGQxYWMsCi0JMHgxNTA4LCAweDYwMjQsIDB4ZDBkYywgMHgxMTcwLCAweGQwZTQsIDB4MTE3OCwgMHhkMGQ0LCAweDExOTAsCi0JMHhkMGNjLCAweDAxMzAsIDB4NzA5OCwgMHg5MDg2LCAweDAwMjksIDB4MTExMCwgMHgwODBjLCAweDc3M2IsCi0JMHgwODA0LCAweDI3YTUsIDB4MDgwYywgMHg3ODUzLCAweDAwNDgsIDB4MjAwMSwgMHgxOTdlLCAweDIwMDMsCi0JMHgwMDAyLCAweDAwMjAsIDB4MDgwYywgMHg3NjllLCAweDA4MDQsIDB4MjdhNSwgMHgwODBjLCAweDc3ZDYsCi0JMHgwODA0LCAweDI3YTUsIDB4NjIyMCwgMHhkMWJjLCAweDAxMzgsIDB4ZDJiYywgMHgxOTA0LCAweDI4MDIsCi0JMHhkMmI0LCAweDE5MDQsIDB4MjgxNSwgMHgwMDAwLCAweGQxYWMsIDB4MDkwNCwgMHgyNmJhLCAweDAwMzYsCi0JMHg2MzI4LCAweGMzYmMsIDB4NjMyYSwgMHgwMDNlLCAweDA4MGMsIDB4NzU2OSwgMHgxMWMwLCAweDYwMjcsCi0JMHgwMDIwLCAweDAwMDYsIDB4MDAyNiwgMHgwMDM2LCAweDA4MGMsIDB4NzU4MywgMHgxMTU4LCAweDA4MGMsCi0JMHg3ODRlLCAweDA4MGMsIDB4NjEyNywgMHgwODBjLCAweDc0OTUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMGUsCi0JMHgwMGFlLCAweDAwMDUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMGUsIDB4MDgwYywgMHg3NTQxLCAweDAwMTYsCi0JMHgwMDQ2LCAweDAwYzYsIDB4NjQ0YywgMHg5NDg2LCAweGYwZjAsIDB4MTEzOCwgMHgyMDYxLCAweDAxMDAsCi0JMHg2NDRhLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4NzRkYSwgMHg5NDhjLCAweGZmMDAsCi0JMHg3MDM4LCAweGQwODQsIDB4MDE5MCwgMHgwODBjLCAweGQ1NjEsIDB4MTExOCwgMHg5MTg2LCAweGY4MDAsCi0JMHgxMTYwLCAweDcwNDgsIDB4ZDA4NCwgMHgxMTQ4LCAweGMwODUsIDB4NzA0YSwgMHgwMDM2LCAweDI0MTgsCi0JMHgyMDExLCAweDgwMTYsIDB4MDgwYywgMHg0YmU5LCAweDAwM2UsIDB4MDgwYywgMHhkNTVhLCAweDE5MDQsCi0JMHgyNjk3LCAweDkxOTYsIDB4ZmYwMCwgMHgwNWE4LCAweDcwNjAsIDB4OTA4NCwgMHgwMGZmLCAweDgxMGYsCi0JMHg4MWZmLCAweDAxMTAsIDB4OTExNiwgMHgwNTY4LCAweDcxMzAsIDB4ZDE4NCwgMHgxNTUwLCAweDA4MGMsCi0JMHgzM2EwLCAweDAxMjgsIDB4YzE4ZCwgMHg3MTMyLCAweDA4MGMsIDB4NmE4YSwgMHgxNTEwLCAweDYyNDAsCi0JMHg5Mjk0LCAweDAwMTAsIDB4MDEzMCwgMHg2MjQ4LCAweDkyOTQsIDB4ZmYwMCwgMHg5Mjk2LCAweGZmMDAsCi0JMHgwMWMwLCAweDcwMzAsIDB4ZDA4YywgMHgwOTA0LCAweDI2OTcsIDB4NzAzOCwgMHhkMDhjLCAweDExNDAsCi0JMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhkMWFjLCAweDE5MDQsIDB4MjY5NywgMHhjMWFkLCAweDIxMDIsCi0JMHgwMDM2LCAweDczZDgsIDB4MjAxMSwgMHg4MDEzLCAweDA4MGMsIDB4NGJlOSwgMHgwMDNlLCAweDA4MDQsCi0JMHgyNjk3LCAweDcwMzgsIDB4ZDA4YywgMHgxMTQwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGQxYWMsCi0JMHgxOTA0LCAweDI2OTcsIDB4YzFhZCwgMHgyMTAyLCAweDAwMzYsIDB4NzNkOCwgMHgyMDExLCAweDgwMTMsCi0JMHgwODBjLCAweDRiZTksIDB4MDAzZSwgMHg3MTMwLCAweGMxODUsIDB4NzEzMiwgMHgyMDExLCAweDE4NDgsCi0JMHgyMjBjLCAweGQxYTQsIDB4MDFmMCwgMHgwMDE2LCAweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsCi0JMHgwODBjLCAweDg5MWMsIDB4MjAxOSwgMHgwMDBlLCAweDAwYzYsIDB4MjA2MSwgMHgwMDAwLCAweDA4MGMsCi0JMHhlOTE1LCAweDAwY2UsIDB4OTQ4NCwgMHgwMGZmLCAweDkwODAsIDB4MzNhYywgMHgyMDBkLCAweDkxOGMsCi0JMHhmZjAwLCAweDgxMGYsIDB4MjEyMCwgMHg5MDA2LCAweDIwMDksIDB4MDAwZSwgMHgwODBjLCAweGU5YTUsCi0JMHgwMDFlLCAweDAwMTYsIDB4MjAwOSwgMHgwMDAyLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweDMyMTEsCi0JMHgwMDFlLCAweDAwYTgsIDB4MDE1NiwgMHgwMGI2LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDA4MGMsCi0JMHg2NzFkLCAweDExNDAsIDB4NzAzMCwgMHhkMDg0LCAweDExMTgsIDB4YjgwMCwgMHhkMGJjLCAweDExMTAsCi0JMHgwODBjLCAweDYxNDEsIDB4ODEwOCwgMHgxZjA0LCAweDI2ODcsIDB4MDBiZSwgMHgwMTVlLCAweDAwY2UsCi0JMHgwMDRlLCAweDA4MGMsIDB4YjA3MiwgMHg2MGUzLCAweDAwMDAsIDB4MDAxZSwgMHgyMDAxLCAweDE4MDAsCi0JMHgyMDE0LCAweDkyOTYsIDB4MDAwNCwgMHgxMTcwLCAweGQxOWMsIDB4MTFhMCwgMHgyMDExLCAweDE4MGMsCi0JMHgyMjE0LCAweGQyOWMsIDB4MTEyMCwgMHg2MjA0LCAweDkyOTUsIDB4MDAwMiwgMHg2MjA2LCAweDYyMjgsCi0JMHhjMjlkLCAweDYyMmEsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4MTgyNiwgMHgyMDAzLCAweDAwMDAsCi0JMHg2MDI3LCAweDAwMjAsIDB4ZDE5NCwgMHgwOTA0LCAweDI3YTUsIDB4MDAxNiwgMHg2MjIwLCAweGQyYjQsCi0JMHgwOTA0LCAweDI3NDIsIDB4MDgwYywgMHg4NzhmLCAweDA4MGMsIDB4YTUxNywgMHg2MDI3LCAweDAwMDQsCi0JMHgwMGY2LCAweDIwMTksIDB4MTlmMiwgMHgyMzA0LCAweDkwN2QsIDB4MDkwNCwgMHgyNzExLCAweDc4MDQsCi0JMHg5MDg2LCAweDAwMzIsIDB4MTVmMCwgMHgwMGQ2LCAweDAwYzYsIDB4MDBlNiwgMHgwMDk2LCAweDIwNjksCi0JMHgwMTQwLCAweDc4MmMsIDB4Njg1ZSwgMHg3ODA4LCAweDY4NWEsIDB4NjA0MywgMHgwMDAyLCAweDIwMDEsCi0JMHgwMDAzLCAweDgwMDEsIDB4MWRmMCwgMHg2MDQzLCAweDAwMDAsIDB4MjAwMSwgMHgwMDNjLCAweDgwMDEsCi0JMHgxZGYwLCAweDA4MGMsIDB4MmQ2MiwgMHgyMDAxLCAweDAwMWUsIDB4ODAwMSwgMHgwMjQwLCAweDIwYTksCi0JMHgwMDA5LCAweDA4MGMsIDB4MmM1YiwgMHg2OTA0LCAweGQxZGMsIDB4MTE0MCwgMHgwY2IwLCAweDIwMDEsCi0JMHgwMTAwLCAweDA4MGMsIDB4MmQ1MiwgMHg5MDA2LCAweDA4MGMsIDB4MmQ1MiwgMHgwODBjLCAweDk3ZTEsCi0JMHgwODBjLCAweDk4ZWQsIDB4NzgxNCwgMHgyMDQ4LCAweGE4NjcsIDB4MDEwMywgMHgyZjYwLCAweDA4MGMsCi0JMHhiMTAxLCAweDAwOWUsIDB4MDBlZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBmZSwgMHgwMDFlLCAweDAwYWUsCi0JMHgwMDA1LCAweDAwZmUsIDB4MDBkNiwgMHgyMDY5LCAweDAxNDAsIDB4NjgwNCwgMHg5MDg0LCAweDQwMDAsCi0JMHgwMTEwLCAweDA4MGMsIDB4MmQ2MiwgMHgwMGRlLCAweDAwYzYsIDB4MjA2MSwgMHgxOWU5LCAweDYwMjgsCi0JMHgwODBjLCAweGQ1NjEsIDB4MDEyMCwgMHg5MDlhLCAweDAwMDMsIDB4MTI1OCwgMHgwMDE4LCAweDkwOWEsCi0JMHgwMGM4LCAweDEyMzgsIDB4ODAwMCwgMHg2MDJhLCAweDAwY2UsIDB4MDgwYywgMHhhNGYzLCAweDA4MDQsCi0JMHgyN2E0LCAweDIwNjEsIDB4MDEwMCwgMHg2MmMwLCAweDA4MGMsIDB4YWVmOCwgMHgyMDE5LCAweDE5ZjIsCi0JMHgyMzA0LCAweDkwNjUsIDB4MDEyMCwgMHgyMDA5LCAweDAwMjcsIDB4MDgwYywgMHhiMTgwLCAweDAwY2UsCi0JMHgwODA0LCAweDI3YTQsIDB4ZDJiYywgMHgwOTA0LCAweDI3OGIsIDB4MDgwYywgMHg4NzljLCAweDYwMTQsCi0JMHg5MDg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDEwLCAweDYwMTYsIDB4NjAyNywgMHgwMDA0LCAweDAwZDYsCi0JMHgyMDY5LCAweDAxNDAsIDB4NjgwNCwgMHg5MDg0LCAweDQwMDAsIDB4MDExMCwgMHgwODBjLCAweDJkNjIsCi0JMHgwMGRlLCAweDAwYzYsIDB4MjA2MSwgMHgxOWU5LCAweDYwNDQsIDB4MDgwYywgMHhkNTYxLCAweDAxMjAsCi0JMHg5MDlhLCAweDAwMDMsIDB4MTY1OCwgMHgwMDE4LCAweDkwOWEsIDB4MDBjOCwgMHgxNjM4LCAweDgwMDAsCi0JMHg2MDQ2LCAweDYwM2MsIDB4MDBjZSwgMHg5MDA1LCAweDA1YjgsIDB4MjAwOSwgMHgwN2QwLCAweDA4MGMsCi0JMHg4Nzk0LCAweDkwODAsIDB4MDAwOCwgMHgyMDA0LCAweDkwODYsIDB4MDAwNiwgMHgxMTM4LCAweDYxMTQsCi0JMHg5MThjLCAweDE5ODQsIDB4OTE4ZCwgMHgwMDEyLCAweDYxMTYsIDB4MDQzMCwgMHg5MDgwLCAweDAwMDgsCi0JMHgyMDA0LCAweDkwODYsIDB4MDAwOSwgMHgwZDk4LCAweDYxMTQsIDB4OTE4YywgMHgxOTg0LCAweDkxOGQsCi0JMHgwMDE2LCAweDYxMTYsIDB4MDBjOCwgMHg2MDI3LCAweDAwMDQsIDB4MDBiMCwgMHgwMDM2LCAweDIwMTksCi0JMHgwMDAxLCAweDA4MGMsIDB4YTg3NywgMHgwMDNlLCAweDIwMTksIDB4MTlmOCwgMHgyMzA0LCAweDkwNjUsCi0JMHgwMTUwLCAweDIwMDksIDB4MDA0ZiwgMHg2MDIwLCAweDkwODYsIDB4MDAwOSwgMHgxMTEwLCAweDIwMDksCi0JMHgwMDRmLCAweDA4MGMsIDB4YjE4MCwgMHgwMGNlLCAweDAwMWUsIDB4ZDE5YywgMHgwOTA0LCAweDI3ZmQsCi0JMHg3MDM4LCAweGQwYWMsIDB4MTUzOCwgMHgwMDE2LCAweDAxNTYsIDB4NjAyNywgMHgwMDA4LCAweDA4MGMsCi0JMHgyZDhjLCAweDIwYTksIDB4MDAyOCwgMHhhMDAxLCAweDFmMDQsIDB4MjdiMywgMHg2MTUwLCAweDkxODUsCi0JMHgxNDAwLCAweDYwNTIsIDB4MjBhOSwgMHgwMzY2LCAweDFkMDQsIDB4MjdiYywgMHgwODBjLCAweDg3YzMsCi0JMHg2MDIwLCAweGQwOWMsIDB4MTEzMCwgMHgwMTVlLCAweDYxNTIsIDB4MDAxZSwgMHg2MDI3LCAweDAwMDgsCi0JMHgwNGEwLCAweDA4MGMsIDB4MmM0MiwgMHgxZjA0LCAweDI3YmMsIDB4MDE1ZSwgMHg2MTUyLCAweDAwMWUsCi0JMHg2MDI3LCAweDAwMDgsIDB4MDAxNiwgMHg2MDI4LCAweGMwOWMsIDB4NjAyYSwgMHgwODBjLCAweGIwNzIsCi0JMHg2MGUzLCAweDAwMDAsIDB4MDgwYywgMHhlZGZhLCAweDA4MGMsIDB4ZWUxNSwgMHgwODBjLCAweDU3ZDcsCi0JMHhkMGZjLCAweDExMzgsIDB4MDgwYywgMHhkNTVhLCAweDExMjAsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg3NWFkLCAweDkwMDYsIDB4MDgwYywgMHgyZDUyLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweDJjODAsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3MDAzLCAweDAwMDQsIDB4MDgwYywgMHgwZWEzLCAweDAwZWUsCi0JMHg2MDI3LCAweDAwMDgsIDB4MDgwYywgMHgwYmEwLCAweDAwMWUsIDB4OTE4YywgMHhmZmQwLCAweDYxMjYsCi0JMHgwMGFlLCAweDAwMDUsIDB4MDAxNiwgMHgyMDAxLCAweDE4OGIsIDB4MjAwYywgMHhkMTg0LCAweDAwMWUsCi0JMHgwOTA0LCAweDI1YmMsIDB4MDAxNiwgMHgyMDA5LCAweDI4MGUsIDB4MDBkMCwgMHgyMDAxLCAweDE4OGIsCi0JMHgyMDBjLCAweGMxODQsIDB4MjEwMiwgMHgwMDFlLCAweDBjNDAsIDB4MDAxNiwgMHgyMDAxLCAweDE4OGIsCi0JMHgyMDBjLCAweGQxOTQsIDB4MDAxZSwgMHgwOTA0LCAweDI1YmMsIDB4MDAxNiwgMHgyMDA5LCAweDI4MjEsCi0JMHgwMDM4LCAweDIwMDEsIDB4MTg4YiwgMHgyMDBjLCAweGMxOTQsIDB4MjEwMiwgMHgwMDFlLCAweDA4YTgsCi0JMHg2MDI4LCAweGMwYmMsIDB4NjAyYSwgMHgyMDAxLCAweDAxNTYsIDB4MjAwMywgMHhiYzkxLCAweDgwMDAsCi0JMHgyMDAzLCAweGZmZmYsIDB4NjA0MywgMHgwMDAxLCAweDA4MGMsIDB4MmM3YSwgMHg2MDI3LCAweDAwODAsCi0JMHg2MDE3LCAweDAwMDAsIDB4NjA0MywgMHgwMDAwLCAweDA4MTcsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMDM2LCAweDAwZTYsIDB4MDBmNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE4MDAsCi0JMHg3MWQwLCAweDcwZDIsIDB4OTExNiwgMHgwOTA0LCAweDI4OGMsIDB4ODFmZiwgMHgwMWEwLCAweDIwMDksCi0JMHgwMDAwLCAweDA4MGMsIDB4MmM4MCwgMHgyMDExLCAweDgwMTEsIDB4MjAxOSwgMHgwMTBlLCAweDIzMWMsCi0JMHg5MzllLCAweDAwMDcsIDB4MTExOCwgMHgyMDE5LCAweDAwMDEsIDB4MDAxMCwgMHgyMDE5LCAweDAwMDAsCi0JMHgwODBjLCAweDRiZTksIDB4MDQ0OCwgMHgyMDAxLCAweDE5YWEsIDB4MjAwYywgMHg4MWZmLCAweDExNDAsCi0JMHgyMDAxLCAweDAxMDksIDB4MjAwNCwgMHhkMGI0LCAweDAxMTgsIDB4MjAxOSwgMHgwMDAzLCAweDAwMDgsCi0JMHgyMTE4LCAweDIwMTEsIDB4ODAxMiwgMHgwODBjLCAweDRiZTksIDB4MDgwYywgMHgwZWEzLCAweDA4MGMsCi0JMHg1N2Q3LCAweGQwZmMsIDB4MTE4OCwgMHgwODBjLCAweGQ1NWEsIDB4MTE3MCwgMHgwMGM2LCAweDA4MGMsCi0JMHgyOTI4LCAweDA4MGMsIDB4YTdkZSwgMHgyMDYxLCAweDAxMDAsIDB4MjAxOSwgMHgwMDI4LCAweDIwMDksCi0JMHgwMDAyLCAweDA4MGMsIDB4MzIxMSwgMHgwMGNlLCAweDAxMmUsIDB4MDBmZSwgMHgwMGVlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDIwMjgsIDB4OTE4YywgMHgwMGZmLCAweDIxMzAsCi0JMHg5MDk0LCAweGZmMDAsIDB4MTFmMCwgMHgyMDExLCAweDE4MzcsIDB4MjIxNCwgMHhkMmFjLCAweDExYzgsCi0JMHg4MWZmLCAweDAxZTgsIDB4MjAxMSwgMHgxODFmLCAweDIyMDQsIDB4OTEwNiwgMHgxMTkwLCAweDIwMTEsCi0JMHgxODIwLCAweDIyMTQsIDB4OTI5NCwgMHhmZjAwLCAweDk1ODQsIDB4ZmYwMCwgMHg5MjA2LCAweDExNDgsCi0JMHgyMDExLCAweDE4MjAsIDB4MjIxNCwgMHg5Mjk0LCAweDAwZmYsIDB4OTU4NCwgMHgwMGZmLCAweDkyMDYsCi0JMHgxMTIwLCAweDI1MDAsIDB4MDgwYywgMHg4MjcxLCAweDAwNDgsIDB4OTU4NCwgMHgwMGZmLCAweDkwODAsCi0JMHgzM2FjLCAweDIwMGQsIDB4OTE4YywgMHhmZjAwLCAweDgxMGYsIDB4OTAwNiwgMHgwMDA1LCAweDkwODAsCi0JMHgzM2FjLCAweDIwMGQsIDB4OTE4YywgMHgwMGZmLCAweDAwMDUsIDB4MDBkNiwgMHgyMDY5LCAweDAxNDAsCi0JMHgyMDAxLCAweDE4MTgsIDB4MjAwMywgMHgwMGVmLCAweDIwYTksIDB4MDAxMCwgMHg5MDA2LCAweDY4NTIsCi0JMHg2ODU2LCAweDFmMDQsIDB4MjhkOCwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGQ2LCAweDAwMjYsCi0JMHgyMDY5LCAweDAxNDAsIDB4MjAwMSwgMHgxODE4LCAweDIxMDIsIDB4ODExNCwgMHg4MjE0LCAweDgyMTQsCi0JMHg4MjE0LCAweDIwYTksIDB4MDAxMCwgMHg2ODUzLCAweDAwMDAsIDB4OTAwNiwgMHg4MmZmLCAweDExMjgsCi0JMHg5MTg0LCAweDAwMGYsIDB4OTA4MCwgMHhmNWY3LCAweDIwMDUsIDB4Njg1NiwgMHg4MjExLCAweDFmMDQsCi0JMHgyOGVkLCAweDAwMmUsIDB4MDBkZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLCAweDE4MDAsCi0JMHg2MDMwLCAweDAxMTAsIDB4YzA5ZCwgMHgwMDA4LCAweGMwOWMsIDB4NjAzMiwgMHgwMGNlLCAweDAwMDUsCi0JMHgwMTU2LCAweDAwZDYsIDB4MDAyNiwgMHgwMDE2LCAweDAwMDYsIDB4MjA2OSwgMHgwMTQwLCAweDY5ODAsCi0JMHg5MTE2LCAweDAxODAsIDB4OTExMiwgMHgxMjMwLCAweDgyMTIsIDB4ODIxMCwgMHgyMmE4LCAweDIwMDEsCi0JMHgwNDAyLCAweDAwMTgsIDB4MjJhOCwgMHgyMDAxLCAweDA0MDQsIDB4NjgwZSwgMHgxZjA0LCAweDI5MWQsCi0JMHg2ODBmLCAweDAwMDAsIDB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDBkZSwgMHgwMTVlLCAweDAwMDUsCi0JMHgwODBjLCAweDU3ZDMsIDB4ZDBjNCwgMHgwMTUwLCAweGQwYTQsIDB4MDE0MCwgMHg5MDA2LCAweDAwNDYsCi0JMHgyMDIwLCAweDIwMDksIDB4MDAyZSwgMHgwODBjLCAweGU5YTUsIDB4MDA0ZSwgMHgwMDA1LCAweDAwZjYsCi0JMHgwMDE2LCAweDAwMjYsIDB4MjA3OSwgMHgwMTQwLCAweDc4YzQsIDB4ZDBkYywgMHgwOTA0LCAweDI5OTQsCi0JMHgwODBjLCAweDJiZGYsIDB4MDY2MCwgMHg5MDg0LCAweDA3MDAsIDB4OTA4ZSwgMHgwNjAwLCAweDExMjAsCi0JMHgyMDExLCAweDQwMDAsIDB4OTAwZSwgMHgwNDU4LCAweDkwOGUsIDB4MDUwMCwgMHgxMTIwLCAweDIwMTEsCi0JMHg4MDAwLCAweDkwMGUsIDB4MDQyMCwgMHg5MDhlLCAweDA0MDAsIDB4MTEyMCwgMHg5MDE2LCAweDIwMDksCi0JMHgwMDAxLCAweDAwZTgsIDB4OTA4ZSwgMHgwMzAwLCAweDExMjAsIDB4OTAxNiwgMHgyMDA5LCAweDAwMDIsCi0JMHgwMGIwLCAweDkwOGUsIDB4MDIwMCwgMHgxMTIwLCAweDkwMTYsIDB4MjAwOSwgMHgwMDA0LCAweDAwNzgsCi0JMHg5MDhlLCAweDAxMDAsIDB4MTU0OCwgMHg5MDE2LCAweDIwMDksIDB4MDAwOCwgMHgwMDQwLCAweDkwODQsCi0JMHgwNzAwLCAweDkwOGUsIDB4MDMwMCwgMHgxNTAwLCAweDIwMTEsIDB4MDAzMCwgMHgwMDU4LCAweDIzMDAsCi0JMHg5MDgwLCAweDAwMjAsIDB4MjAxOCwgMHgwODBjLCAweDkxYjEsIDB4OTI4YywgMHhmZjAwLCAweDAxMTAsCi0JMHgyMDExLCAweDAwZmYsIDB4MjIwMCwgMHg4MDA3LCAweDkwODUsIDB4MDA0YywgMHg3OGMyLCAweDIwMDksCi0JMHgwMTM4LCAweDIyMGEsIDB4MDgwYywgMHg3NTY5LCAweDExMTgsIDB4MjAwOSwgMHgxOTZlLCAweDIyMGEsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDBmZSwgMHgwMDA1LCAweDc4YzMsIDB4MDAwMCwgMHgwY2M4LCAweDAxMjYsCi0JMHgyMDkxLCAweDI4MDAsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MjAwMSwgMHgwMTcwLCAweDIwMGMsCi0JMHg4MDAwLCAweDIwMTQsIDB4OTE4NCwgMHgwMDAzLCAweDAxMTAsIDB4MDgwYywgMHgwZGJlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDIwMDEsIDB4MDE3MSwgMHgyMDA0LCAweGQwZGMsCi0JMHgwMTY4LCAweDIwMDEsIDB4MDE3MCwgMHgyMDBjLCAweDkxOGMsIDB4MDBmZiwgMHg5MThlLCAweDAwNGMsCi0JMHgxMTI4LCAweDIwMGMsIDB4OTE4YywgMHhmZjAwLCAweDgxMGYsIDB4MDAwNSwgMHg5MDBlLCAweDIwMDEsCi0JMHgwMjI3LCAweDIwMDQsIDB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4ODAwNCwgMHg5MTA4LCAweDIwMDEsCi0JMHgwMjI2LCAweDIwMDQsIDB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4ODAwNCwgMHg5MTA4LCAweDAwMDUsCi0JMHgwMDE4LCAweDAwMGMsIDB4MDAxOCwgMHgwMDIwLCAweDEwMDAsIDB4MDgwMCwgMHgxMDAwLCAweDE4MDAsCi0JMHgwMTU2LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwZTYsIDB4MjAwMSwgMHgxOTkxLCAweDIwMDQsCi0JMHg5MDhhLCAweDAwMDcsIDB4MWEwYywgMHgwZGM1LCAweDAwMzMsIDB4MDBlZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMDBlLCAweDAxNWUsIDB4MDAwNSwgMHgyOWYyLCAweDJhMTAsIDB4MmEzNCwgMHgyYTM2LCAweDJhNWYsCi0JMHgyYTYxLCAweDJhNjMsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjgzZCwgMHgwODBjLCAweDJjM2QsCi0JMHgyMDAxLCAweDE5OTMsIDB4MjAwMywgMHgwMDAwLCAweDc4MjgsIDB4OTA4NCwgMHhlMWQ3LCAweDc4MmEsCi0JMHg5MDA2LCAweDIwYTksIDB4MDAwOSwgMHgwODBjLCAweDJiZmIsIDB4MjAwMSwgMHgxOTkxLCAweDIwMDMsCi0JMHgwMDA2LCAweDIwMDksIDB4MDAxZSwgMHgyMDExLCAweDJhNjQsIDB4MDgwYywgMHg4N2ExLCAweDAwMDUsCi0JMHgyMDA5LCAweDE5OTYsIDB4MjAwYiwgMHgwMDAwLCAweDIwMDEsIDB4MTk5YiwgMHgyMDAzLCAweDAwMzYsCi0JMHgyMDAxLCAweDE5OWEsIDB4MjAwMywgMHgwMDJhLCAweDIwMDEsIDB4MTk5MywgMHgyMDAzLCAweDAwMDEsCi0JMHg5MDA2LCAweDA4MGMsIDB4MmJhZCwgMHgyMDAxLCAweGZmZmYsIDB4MjBhOSwgMHgwMDA5LCAweDA4MGMsCi0JMHgyYmZiLCAweDIwMDEsIDB4MTk5MSwgMHgyMDAzLCAweDAwMDYsIDB4MjAwOSwgMHgwMDFlLCAweDIwMTEsCi0JMHgyYTY0LCAweDA4MGMsIDB4ODdhMSwgMHgwMDA1LCAweDA4MGMsIDB4MGRjNSwgMHgyMDAxLCAweDE5OWIsCi0JMHgyMDAzLCAweDAwMzYsIDB4MjAwMSwgMHgxOTkzLCAweDIwMDMsIDB4MDAwMywgMHg3YTM4LCAweDkyOTQsCi0JMHgwMDA1LCAweDkyOTYsIDB4MDAwNCwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsCi0JMHgwODBjLCAweDJiYWQsIDB4MjAwMSwgMHgxOTk3LCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweGZmZmYsCi0JMHgyMGE5LCAweDAwMDksIDB4MDgwYywgMHgyYmZiLCAweDIwMDEsIDB4MTk5MSwgMHgyMDAzLCAweDAwMDYsCi0JMHgyMDA5LCAweDAwMWUsIDB4MjAxMSwgMHgyYTY0LCAweDA4MGMsIDB4ODdhMSwgMHgwMDA1LCAweDA4MGMsCi0JMHgwZGM1LCAweDA4MGMsIDB4MGRjNSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwZTYsCi0JMHgwMGY2LCAweDAxNTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgwMTAwLCAweDIwMDEsCi0JMHgxOTkzLCAweDIwMDQsIDB4OTA4YSwgMHgwMDA3LCAweDFhMGMsIDB4MGRjNSwgMHgwMDQzLCAweDAxMmUsCi0JMHgwMTVlLCAweDAwZmUsIDB4MDBlZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDJhODYsCi0JMHgyYWEyLCAweDJhZGUsIDB4MmIwYSwgMHgyYjJhLCAweDJiMzYsIDB4MmIzOCwgMHgwODBjLCAweDJiZWYsCi0JMHgxMTkwLCAweDIwMDksIDB4MTk5OSwgMHgyMTA0LCAweDdhMzgsIDB4OTI5NCwgMHgwMDA1LCAweDkyOTYsCi0JMHgwMDA0LCAweDAxMTAsIDB4YzA4ZCwgMHgwMDA4LCAweGMwODUsIDB4MjAwYSwgMHgyMDAxLCAweDE5OTEsCi0JMHgyMDAzLCAweDAwMDEsIDB4MDAzMCwgMHgwODBjLCAweDJiNWMsIDB4MjAwMSwgMHhmZmZmLCAweDA4MGMsCi0JMHgyYTAxLCAweDAwMDUsIDB4MDgwYywgMHgyYjNhLCAweDA1YzAsIDB4MjAwOSwgMHgxOTlhLCAweDIxMDQsCi0JMHg4MDAxLCAweDIwMGEsIDB4MDgwYywgMHgyYmVmLCAweDExNTgsIDB4N2EzOCwgMHg5Mjk0LCAweDAwMDUsCi0JMHg5Mjk2LCAweDAwMDUsIDB4MDUxOCwgMHgyMDA5LCAweDE5OTksIDB4MjEwNCwgMHhjMDg1LCAweDIwMGEsCi0JMHgyMDA5LCAweDE5OTYsIDB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4OTA4NiwgMHgwMDA1LCAweDAxMTgsCi0JMHgwODBjLCAweDJiNDIsIDB4MDBjMCwgMHgyMDBiLCAweDAwMDAsIDB4N2EzOCwgMHg5Mjk0LCAweDAwMDYsCi0JMHg5Mjk2LCAweDAwMDQsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCi0JMHgyYmNhLCAweDIwMDEsIDB4MTk5MywgMHgyMDAzLCAweDAwMDIsIDB4MDAyOCwgMHgyMDAxLCAweDE5OTEsCi0JMHgyMDAzLCAweDAwMDMsIDB4MDAxMCwgMHgwODBjLCAweDJhMjMsIDB4MDAwNSwgMHgwODBjLCAweDJiM2EsCi0JMHgwNTQwLCAweDIwMDksIDB4MTk5YSwgMHgyMTA0LCAweDgwMDEsIDB4MjAwYSwgMHgwODBjLCAweDJiZWYsCi0JMHgxMTQ4LCAweDIwMDEsIDB4MTk5MSwgMHgyMDAzLCAweDAwMDMsIDB4MjAwMSwgMHgxOTkyLCAweDIwMDMsCi0JMHgwMDAwLCAweDAwYjgsIDB4MjAwOSwgMHgxOTlhLCAweDIxMDQsIDB4OTAwNSwgMHgxMTE4LCAweDA4MGMsCi0JMHgyYjdmLCAweDAwMTAsIDB4MDgwYywgMHgyYjRmLCAweDA4MGMsIDB4MmI0MiwgMHgyMDA5LCAweDE5OTYsCi0JMHgyMDBiLCAweDAwMDAsIDB4MjAwMSwgMHgxOTkzLCAweDIwMDMsIDB4MDAwMSwgMHgwODBjLCAweDJhMjMsCi0JMHgwMDAwLCAweDAwMDUsIDB4MDQ3OSwgMHgwMWU4LCAweDA4MGMsIDB4MmJlZiwgMHgxMTk4LCAweDIwMDksCi0JMHgxOTk3LCAweDIxMDQsIDB4ODAwMCwgMHgyMDBhLCAweDkwODYsIDB4MDAwNywgMHgwMTA4LCAweDAwNzgsCi0JMHgyMDAxLCAweDE5OWMsIDB4MjAwMywgMHgwMDBhLCAweDIwMDksIDB4MTk5OSwgMHgyMTA0LCAweGMwZmQsCi0JMHgyMDBhLCAweDAwMzgsIDB4MDBmOSwgMHgyMDAxLCAweDE5OTMsIDB4MjAwMywgMHgwMDA0LCAweDA4MGMsCi0JMHgyYTRlLCAweDAwMDUsIDB4MDA3OSwgMHgwMTQ4LCAweDA4MGMsIDB4MmJlZiwgMHgxMTE4LCAweDA4MGMsCi0JMHgyYTNhLCAweDAwMTgsIDB4MDA3OSwgMHgwODBjLCAweDJhNGUsIDB4MDAwNSwgMHgwODBjLCAweDBkYzUsCi0JMHgwODBjLCAweDBkYzUsIDB4MjAwOSwgMHgxOTliLCAweDIxMDQsIDB4ODAwMSwgMHgyMDBhLCAweDA5MGMsCi0JMHgyYjliLCAweDAwMDUsIDB4N2EzOCwgMHg5Mjk0LCAweDAwMDUsIDB4OTI5NiwgMHgwMDA1LCAweDAxMTAsCi0JMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MmJjYSwgMHgwMDA1LCAweDdhMzgsCi0JMHg5Mjk0LCAweDAwMDYsIDB4OTI5NiwgMHgwMDA2LCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4MmJhZCwgMHgwMDA1LCAweDIwMDksIDB4MTk5NiwgMHgyMTA0LCAweDgwMDAsCi0JMHgyMDBhLCAweDkwODYsIDB4MDAwNSwgMHgwMTA4LCAweDAwNjgsIDB4MjAwYiwgMHgwMDAwLCAweDdhMzgsCi0JMHg5Mjk0LCAweDAwMDYsIDB4OTI5NiwgMHgwMDA2LCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDIwMDEsCi0JMHgwMDAxLCAweDA0ZDksIDB4N2EzOCwgMHg5Mjk0LCAweDAwMDUsIDB4OTI5NiwgMHgwMDA1LCAweDAxMTAsCi0JMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MmJjYSwgMHgwMDA1LCAweDAwODYsCi0JMHgyMDAxLCAweDE5OTksIDB4MjAwNCwgMHg5MDg0LCAweDdmZmYsIDB4MDkwYywgMHgwZGM1LCAweDIwMDksCi0JMHgxOTk4LCAweDIxNDQsIDB4ODg0NiwgMHgyODBhLCAweDk4NDQsIDB4MGRkOCwgMHhkMDhjLCAweDExMjAsCi0JMHhkMDg0LCAweDExMjAsIDB4MDgwYywgMHgwZGM1LCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsCi0JMHgwMGExLCAweDAwOGUsIDB4MDAwNSwgMHgwMDA2LCAweDAxNTYsIDB4MjAwMSwgMHgxOTkxLCAweDIwYTksCi0JMHgwMDA5LCAweDIwMDMsIDB4MDAwMCwgMHg4MDAwLCAweDFmMDQsIDB4MmJhMSwgMHgyMDAxLCAweDE5OTgsCi0JMHgyMDAzLCAweDgwMDAsIDB4MDE1ZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsCi0JMHg5MDg1LCAweDAwMDAsIDB4MDE1OCwgMHg3ODM4LCAweDkwODQsIDB4ZmZmOSwgMHg5MDg1LCAweDAwMDQsCi0JMHg3ODNhLCAweDIwMDksIDB4MTk5ZSwgMHgyMTBjLCAweDc5NWEsIDB4MDA1MCwgMHg3ODM4LCAweDkwODQsCi0JMHhmZmZiLCAweDkwODUsIDB4MDAwNiwgMHg3ODNhLCAweDIwMDksIDB4MTk5ZiwgMHgyMTBjLCAweDc5NWEsCi0JMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4OTA4NSwgMHgwMDAwLCAweDAxMzgsCi0JMHg3ODM4LCAweDkwODQsIDB4ZmZmYSwgMHg5MDg1LCAweDAwMDQsIDB4NzgzYSwgMHgwMDMwLCAweDc4MzgsCi0JMHg5MDg0LCAweGZmZmIsIDB4OTA4NSwgMHgwMDA1LCAweDc4M2EsIDB4MDBmZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHg5MDgyLCAweDAwMDcsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHg5MDgyLCAweDAwMDksIDB4MDAwZSwgMHgwMDA1LCAweDAxNTYsCi0JMHgyMGE5LCAweDAwNjQsIDB4NzgyMCwgMHgwODBjLCAweDJjN2EsIDB4ZDA5YywgMHgxMTEwLCAweDFmMDQsCi0JMHgyYmYyLCAweDAxNWUsIDB4MDAwNSwgMHgwMTI2LCAweDAwMTYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg3ODUwLCAweDkwODUsIDB4MDA0MCwgMHg3ODUyLCAweDc4NTAsIDB4OTA4NCwgMHhmYmNmLCAweDc4NTIsCi0JMHgwODBjLCAweDJjN2EsIDB4OTA4NSwgMHgyMDAwLCAweDc4NTIsIDB4MDAwZSwgMHgyMDA4LCAweDkxODYsCi0JMHgwMDAwLCAweDExMTgsIDB4NzgzYiwgMHgwMDA3LCAweDAwOTAsIDB4OTE4NiwgMHgwMDAxLCAweDExMTgsCi0JMHg3ODNiLCAweDAwMDYsIDB4MDA2MCwgMHg5MTg2LCAweDAwMDIsIDB4MTExOCwgMHg3ODNiLCAweDAwMDUsCi0JMHgwMDMwLCAweDkxODYsIDB4MDAwMywgMHgxMTE4LCAweDc4M2IsIDB4MDAwNCwgMHgwMDAwLCAweDAwMDYsCi0JMHgxZDA0LCAweDJjMjgsIDB4MDgwYywgMHg4N2MzLCAweDFmMDQsIDB4MmMyOCwgMHg3ODUwLCAweDkwODUsCi0JMHgwNDAwLCAweDkwODQsIDB4ZGZiZiwgMHg3ODUyLCAweDA4MGMsIDB4MmM3YSwgMHg5MDg1LCAweDEwMDAsCi0JMHg3ODUyLCAweDAwMGUsIDB4MDAxZSwgMHgwMTJlLCAweDAwMDUsIDB4Nzg1MCwgMHg5MDg0LCAweGZmY2YsCi0JMHg3ODUyLCAweDAwMDUsIDB4MDAwNiwgMHgwMTU2LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDIwYTksCi0JMHgwMDBhLCAweDc4NTQsIDB4ZDBhYywgMHgxMTMwLCAweDc4MjAsIDB4ZDBlNCwgMHgxMTQwLCAweDFmMDQsCi0JMHgyYzRjLCAweDAwMjgsIDB4Nzg1NCwgMHhkMDhjLCAweDExMTAsIDB4MWYwNCwgMHgyYzUyLCAweDAwZmUsCi0JMHgwMTVlLCAweDAwMGUsIDB4MDAwNSwgMHgxZDA0LCAweDJjNWIsIDB4MDgwYywgMHg4N2MzLCAweDFmMDQsCi0JMHgyYzViLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDE5OWQsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDAsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDE5OWQsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDEsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDE5OWQsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDIsCi0JMHgwMDBlLCAweDAwMDUsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweDAwMDUsCi0JMHgwMDA2LCAweDIwMDEsIDB4MTlhYSwgMHgyMTAyLCAweDAwMGUsIDB4MDAwNSwgMHgyMDA5LCAweDAxNzEsCi0JMHgyMTA0LCAweGQwZGMsIDB4MDE0MCwgMHgyMDA5LCAweDAxNzAsIDB4MjEwNCwgMHgyMDBiLCAweDAwODAsCi0JMHhhMDAxLCAweGEwMDEsIDB4MjAwYSwgMHgwMDA1LCAweDAwMzYsIDB4MDA0NiwgMHgyMDAxLCAweDAxNDEsCi0JMHgyMDBjLCAweDkxOGMsIDB4ZmYwMCwgMHg5MTg2LCAweDIxMDAsIDB4MDE0MCwgMHg5MTg2LCAweDIwMDAsCi0JMHgwMTcwLCAweDkxODYsIDB4MDEwMCwgMHgxOTA0LCAweDJjZjMsIDB4MDA0OCwgMHgwMDE2LCAweDIwMDksCi0JMHgxYTg4LCAweDIxMDQsIDB4ODAwMCwgMHgwMjA4LCAweDIwMGEsIDB4MDAxZSwgMHgwNGYwLCAweDIwMDksCi0JMHgwMGEyLCAweDA4MGMsIDB4MGU1MiwgMHgyMDE5LCAweDAxNjAsIDB4MjMyNCwgMHgyMDExLCAweDAwMDMsCi0JMHgyMDA5LCAweDAxNjksIDB4MjEwNCwgMHg5MDg0LCAweDAwMDcsIDB4MjEwYywgMHg5MThjLCAweDAwMDcsCi0JMHg5MTBlLCAweDFkYjAsIDB4OTA4NiwgMHgwMDAzLCAweDE1NDgsIDB4MjMwNCwgMHgwMDY2LCAweDAwNzYsCi0JMHgyMDMxLCAweDAwMDIsIDB4MjMzYywgMHg5NzNlLCAweDAxNDgsIDB4ODYzMSwgMHgxZGQ4LCAweDIwMzEsCi0JMHgxYTg5LCAweDI2M2MsIDB4ODczOCwgMHgwMjA4LCAweDI3MzIsIDB4MjMwNCwgMHgwMDdlLCAweDAwNmUsCi0JMHg5NDAyLCAweDAyYTAsIDB4MTlkMCwgMHg4MjExLCAweDE5ZDgsIDB4ODRmZiwgMHgwMTcwLCAweDIwMDEsCi0JMHgwMTQxLCAweDIwMGMsIDB4OTE4YywgMHhmZjAwLCAweDkxODYsIDB4MDEwMCwgMHgwMTMwLCAweDIwMDksCi0JMHgxODBjLCAweDIxMDQsIDB4YzBkZCwgMHgyMDBhLCAweDAwMDgsIDB4MDQyMSwgMHgyMDAxLCAweDE5ODIsCi0JMHgyMDBjLCAweDA4MGMsIDB4MGU1MiwgMHgwMDRlLCAweDAwM2UsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGMsCi0JMHgyMDA0LCAweGQwZGMsIDB4MDFiMCwgMHgyMDAxLCAweDAxNjAsIDB4MjAwNCwgMHg5MDA1LCAweDAxNDAsCi0JMHgyMDAxLCAweDAxNDEsIDB4MjAwNCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHgwMTAwLCAweDExNDgsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDE2LCAweDAwMjYsIDB4MDAyMSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMTJlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4NjAxNCwgMHgwMDA2LCAweDIwMDEsCi0JMHgwMTYxLCAweDIwMDMsIDB4MDAwMCwgMHg2MDE3LCAweDAwMTgsIDB4YTAwMSwgMHhhMDAxLCAweDYwMmYsCi0JMHgwMDA4LCAweDYxMDQsIDB4OTE4ZSwgMHgwMDEwLCAweDYxMDYsIDB4OTE4ZSwgMHgwMDEwLCAweDYxMDYsCi0JMHg2MDE3LCAweDAwNDAsIDB4MDRiOSwgMHgwMDFlLCAweDkxODQsIDB4MDAwMywgMHgwMWUwLCAweDAwMzYsCi0JMHgwMDE2LCAweDIwMTksIDB4MDE0MSwgMHg2MTI0LCAweDkxOGMsIDB4MDAyOCwgMHgxMTIwLCAweDIzMDQsCi0JMHg5MDg0LCAweDI4MDAsIDB4MGRjMCwgMHgwMDFlLCAweDkxOWMsIDB4ZmZlNCwgMHg5MTg0LCAweDAwMDEsCi0JMHgwMTE4LCAweDkzODUsIDB4MDAwOSwgMHg2MDE2LCAweDkxODQsIDB4MDAwMiwgMHgwMTE4LCAweDkzODUsCi0JMHgwMDEyLCAweDYwMTYsIDB4MDAzZSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMWRjLCAweDIxMDIsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4NzU4MywgMHgwMTA4LCAweGMwYmMsCi0JMHgyMDA5LCAweDAxNDAsIDB4MjExNCwgMHg5Mjk0LCAweDAwMDEsIDB4OTIxNSwgMHgyMjBhLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDksIDB4MDE0MCwgMHgyMTE0LCAweDkyOTQsCi0JMHgwMDAxLCAweDkyODUsIDB4MTAwMCwgMHgyMDBhLCAweDIyMGEsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwMjYsIDB4MjAwOSwgMHgwMTQwLCAweDIxMTQsIDB4OTI5NCwgMHgwMDAxLCAweDkyMTUsCi0JMHgyMjBhLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgyMDA5LCAweDAxNDAsCi0JMHgyMTA0LCAweDExMjgsIDB4MDgwYywgMHg3NTgzLCAweDAxMTAsIDB4YzBiYywgMHgwMDA4LCAweGMwYmQsCi0JMHgyMDBhLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDE1NiwgMHg2MDUwLCAweDkwODUsCi0JMHgwMDQwLCAweDYwNTIsIDB4NjA1MCwgMHg5MDg0LCAweGZiY2YsIDB4NjA1MiwgMHgwODBjLCAweDJjN2EsCi0JMHg5MDg1LCAweDIwMDAsIDB4NjA1MiwgMHgyMGE5LCAweDAwMTIsIDB4MWQwNCwgMHgyZDlkLCAweDA4MGMsCi0JMHg4N2MzLCAweDFmMDQsIDB4MmQ5ZCwgMHg2MDUwLCAweDkwODUsIDB4MDQwMCwgMHg5MDg0LCAweGRmYmYsCi0JMHg2MDUyLCAweDAxNWUsIDB4MDAwZSwgMHgwMDA1LCAweDMwMTgsIDB4MzAxOCwgMHgyZTNjLCAweDJlM2MsCi0JMHgyZTQ4LCAweDJlNDgsIDB4MmU1NCwgMHgyZTU0LCAweDJlNjIsIDB4MmU2MiwgMHgyZTZlLCAweDJlNmUsCi0JMHgyZTdjLCAweDJlN2MsIDB4MmU4YSwgMHgyZThhLCAweDJlOWMsIDB4MmU5YywgMHgyZWE4LCAweDJlYTgsCi0JMHgyZWI2LCAweDJlYjYsIDB4MmVkNCwgMHgyZWQ0LCAweDJlZjQsIDB4MmVmNCwgMHgyZWM0LCAweDJlYzQsCi0JMHgyZWU0LCAweDJlZTQsIDB4MmYwMiwgMHgyZjAyLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJmMTQsIDB4MmYxNCwgMHgyZjIwLCAweDJmMjAsCi0JMHgyZjJlLCAweDJmMmUsIDB4MmYzYywgMHgyZjNjLCAweDJmNGMsIDB4MmY0YywgMHgyZjVhLCAweDJmNWEsCi0JMHgyZjZhLCAweDJmNmEsIDB4MmY3YSwgMHgyZjdhLCAweDJmOGMsIDB4MmY4YywgMHgyZjlhLCAweDJmOWEsCi0JMHgyZmFhLCAweDJmYWEsIDB4MmZjYywgMHgyZmNjLCAweDJmZWUsIDB4MmZlZSwgMHgyZmJhLCAweDJmYmEsCi0JMHgyZmRkLCAweDJmZGQsIDB4MmZmZCwgMHgyZmZkLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDJlOWEsCi0JMHgyZTlhLCAweDJlOWEsIDB4MmU5YSwgMHgyZTlhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjRlMSwgMHgwODA0LCAweDMwMTAsCi0JMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsCi0JMHgwODBjLCAweDIyZjUsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjJmNSwgMHgwODBjLCAweDI0ZTEsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMzMwLCAweDA4MDQsIDB4MzAxMCwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI0ZTEsCi0JMHgwODBjLCAweDIzMzAsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjJmNSwgMHgwODBjLCAweDIzMzAsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMmY1LCAweDA4MGMsIDB4MjRlMSwgMHgwODBjLCAweDIzMzAsCi0JMHgwODA0LCAweDMwMTAsIDB4YTAwMSwgMHgwY2YwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MTM5NCwgMHgwODA0LCAweDMwMTAsCi0JMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsCi0JMHgwODBjLCAweDI0ZTEsIDB4MDgwYywgMHgxMzk0LCAweDA4MDQsIDB4MzAxMCwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIyZjUsCi0JMHgwODBjLCAweDEzOTQsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjRlMSwgMHgwODBjLCAweDEzOTQsCi0JMHgwODBjLCAweDIzMzAsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjJmNSwgMHgwODBjLCAweDI0ZTEsCi0JMHgwODBjLCAweDEzOTQsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjJmNSwgMHgwODBjLCAweDEzOTQsCi0JMHgwODBjLCAweDIzMzAsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MTM5NCwgMHgwODBjLCAweDIzMzAsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMmY1LCAweDA4MGMsIDB4MjRlMSwgMHgwODBjLCAweDEzOTQsCi0JMHgwODBjLCAweDIzMzAsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjk5NywgMHgwODA0LCAweDMwMTAsCi0JMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsCi0JMHgwODBjLCAweDI5OTcsIDB4MDgwYywgMHgyNGUxLCAweDA4MDQsIDB4MzAxMCwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI5OTcsCi0JMHgwODBjLCAweDIyZjUsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjk5NywgMHgwODBjLCAweDIyZjUsCi0JMHgwODBjLCAweDI0ZTEsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjk5NywgMHgwODBjLCAweDIzMzAsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTk3LCAweDA4MGMsIDB4MjRlMSwgMHgwODBjLCAweDIzMzAsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTk3LCAweDA4MGMsIDB4MjJmNSwgMHgwODBjLCAweDIzMzAsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTk3LCAweDA4MGMsIDB4MjJmNSwgMHgwODBjLCAweDI0ZTEsCi0JMHgwODBjLCAweDIzMzAsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjk5NywgMHgwODBjLCAweDEzOTQsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTk3LCAweDA4MGMsIDB4MjRlMSwgMHgwODBjLCAweDEzOTQsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTk3LCAweDA4MGMsIDB4MjJmNSwgMHgwODBjLCAweDEzOTQsCi0JMHgwODA0LCAweDMwMTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTk3LCAweDA4MGMsIDB4MjRlMSwgMHgwODBjLCAweDEzOTQsCi0JMHgwODBjLCAweDIzMzAsIDB4MDgwNCwgMHgzMDEwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjk5NywgMHgwODBjLCAweDIyZjUsCi0JMHgwODBjLCAweDI0ZTEsIDB4MDgwYywgMHgxMzk0LCAweDA0OTgsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsCi0JMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTk3LCAweDA4MGMsCi0JMHgyMmY1LCAweDA4MGMsIDB4MTM5NCwgMHgwODBjLCAweDIzMzAsIDB4MDQxMCwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI5OTcsCi0JMHgwODBjLCAweDEzOTQsIDB4MDgwYywgMHgyMzMwLCAweDAwOTgsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsCi0JMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTk3LCAweDA4MGMsCi0JMHgyMmY1LCAweDA4MGMsIDB4MjRlMSwgMHgwODBjLCAweDEzOTQsIDB4MDgwYywgMHgyMzMwLCAweDAwMDAsCi0JMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwgMHgwMWRlLCAweDAxY2UsIDB4MDEyZSwgMHgwMDBlLCAweDAxMGUsCi0JMHgwMDBkLCAweDAwYjYsIDB4MDBjNiwgMHgwMDI2LCAweDAwNDYsIDB4OTAyNiwgMHgwODBjLCAweDZhNTAsCi0JMHgxOTA0LCAweDMxMmQsIDB4NzJkYywgMHgyMDAxLCAweDE5N2QsIDB4MjAwNCwgMHg5MDA1LCAweDExMTAsCi0JMHhkMjljLCAweDAxNDgsIDB4ZDI4NCwgMHgxMTM4LCAweGQyYmMsIDB4MTkwNCwgMHgzMTJkLCAweDA4MGMsCi0JMHgzMTMyLCAweDA4MDQsIDB4MzEyZCwgMHhkMmNjLCAweDE5MDQsIDB4MzEyZCwgMHgwODBjLCAweDc1NjksCi0JMHgxMTIwLCAweDcwYWYsIDB4ZmZmZiwgMHgwODA0LCAweDMxMmQsIDB4ZDI5NCwgMHgwMTIwLCAweDcwYWYsCi0JMHhmZmZmLCAweDA4MDQsIDB4MzEyZCwgMHgwODBjLCAweDMzOWIsIDB4MDE2MCwgMHgwODBjLCAweGQ1NjEsCi0JMHgwMTI4LCAweDIwMDEsIDB4MTgxOCwgMHgyMDNjLCAweDA4MDQsIDB4MzBiNiwgMHg3MGFmLCAweGZmZmYsCi0JMHgwODA0LCAweDMxMmQsIDB4MjAwMSwgMHgxODE4LCAweDIwM2MsIDB4NzI5NCwgMHhkMjg0LCAweDA5MDQsCi0JMHgzMGI2LCAweGQyOGMsIDB4MTkwNCwgMHgzMGI2LCAweDAwMzYsIDB4NzNhYywgMHg5MzhlLCAweGZmZmYsCi0JMHgxMTEwLCAweDIwMTksIDB4MDAwMSwgMHg4MzE0LCAweDkyZTAsIDB4MWM4MCwgMHgyYzA0LCAweDkzOGMsCi0JMHgwMDAxLCAweDAxMjAsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDAxMCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5NzBlLCAweDA1ZDAsIDB4OTA4ZSwgMHgwMDAwLCAweDA1YjgsIDB4OTA4ZSwgMHgwMGZmLCAweDExNTAsCi0JMHg3MjMwLCAweGQyODQsIDB4MTViMCwgMHg3Mjk0LCAweGMyOGQsIDB4NzI5NiwgMHg3MGFmLCAweGZmZmYsCi0JMHgwMDNlLCAweDA0YTAsIDB4OTAwZSwgMHgwODBjLCAweDI4OTQsIDB4MDgwYywgMHg2NmIyLCAweDE1MzgsCi0JMHg5MDA2LCAweGI4YmIsIDB4MDUyMCwgMHhiOGFjLCAweDkwMDUsIDB4MDE0OCwgMHgwMGM2LCAweDIwNjAsCi0JMHgwODBjLCAweDhiYzMsIDB4MDBjZSwgMHgwOTBjLCAweDhmNjQsIDB4YjhhZiwgMHgwMDAwLCAweDA4MGMsCi0JMHg2YTkyLCAweDExNjgsIDB4NzAzMCwgMHhkMDhjLCAweDAxMzAsIDB4YjgwMCwgMHhkMGJjLCAweDAxMzgsCi0JMHgwODBjLCAweDY5M2QsIDB4MDEyMCwgMHgwODBjLCAweDMxNGIsIDB4MDE0OCwgMHgwMDI4LCAweDA4MGMsCi0JMHgzMjhiLCAweDA4MGMsIDB4MzE3NywgMHgwMTE4LCAweDgzMTgsIDB4MDgwNCwgMHgzMDYzLCAweDczYWUsCi0JMHgwMDEwLCAweDcwYWYsIDB4ZmZmZiwgMHgwMDNlLCAweDA4MDQsIDB4MzEyZCwgMHg5NzgwLCAweDMzYWMsCi0JMHgyMDNkLCAweDk3YmMsIDB4ZmYwMCwgMHg4NzNmLCAweDIwNDEsIDB4MDA3ZSwgMHg3MGFjLCAweDkwOTYsCi0JMHhmZmZmLCAweDExMTgsIDB4OTAwZSwgMHgyOGE4LCAweDAwNTAsIDB4OTgxMiwgMHgwMjIwLCAweDIwMDgsCi0JMHg5ODAyLCAweDIwYTgsIDB4MDAyMCwgMHg3MGFmLCAweGZmZmYsIDB4MDgwNCwgMHgzMTJkLCAweDI3MDAsCi0JMHgwMTU2LCAweDAwMTYsIDB4OTEwNiwgMHgwOTA0LCAweDMxMjIsIDB4YzQ4NCwgMHgwODBjLCAweDY3MWQsCi0JMHgwMTY4LCAweDA4MGMsIDB4ZDU2MSwgMHgxOTA0LCAweDMxMjIsIDB4MDgwYywgMHgzMzliLCAweDE5MDQsCi0JMHgzMTIyLCAweDA4MGMsIDB4NjZiMiwgMHgxOTA0LCAweDMxMmEsIDB4MDAwOCwgMHhjNDg1LCAweGI4YmIsCi0JMHgwNTIwLCAweGI4YWMsIDB4OTAwNSwgMHgwMTQ4LCAweDAwYzYsIDB4MjA2MCwgMHgwODBjLCAweDhiYzMsCi0JMHgwMGNlLCAweDA5MGMsIDB4OGY2NCwgMHhiOGFmLCAweDAwMDAsIDB4MDgwYywgMHg2YTkyLCAweDExMzAsCi0JMHg3MDMwLCAweGQwOGMsIDB4MDFmOCwgMHhiODAwLCAweGQwYmMsIDB4MTFlMCwgMHg3Mjk0LCAweGQyOGMsCi0JMHgwMTgwLCAweDA4MGMsIDB4NmE5MiwgMHg5MDgyLCAweDAwMDYsIDB4MDJlMCwgMHhkNDg0LCAweDExMTgsCi0JMHgwODBjLCAweDY2ZDcsIDB4MDAyOCwgMHgwODBjLCAweDMzMTcsIDB4MDFhMCwgMHgwODBjLCAweDMzNDIsCi0JMHgwMDg4LCAweDA4MGMsIDB4MzI4YiwgMHgwODBjLCAweGQ1NjEsIDB4MTE2MCwgMHgwODBjLCAweDMxNzcsCi0JMHgwMTg4LCAweDAwNDAsIDB4MDgwYywgMHhkNTYxLCAweDExMTgsIDB4MDgwYywgMHgzMzE3LCAweDAxMTAsCi0JMHgwNDUxLCAweDAxNDAsIDB4MDAxZSwgMHg4MTA4LCAweDAxNWUsIDB4MWYwNCwgMHgzMGNmLCAweDcwYWYsCi0JMHhmZmZmLCAweDAwMTgsIDB4MDAxZSwgMHgwMTVlLCAweDcxYWUsIDB4MDA0ZSwgMHgwMDJlLCAweDAwY2UsCi0JMHgwMGJlLCAweDAwMDUsIDB4MDBjNiwgMHgwMDE2LCAweDcwYWYsIDB4MDAwMSwgMHgyMDA5LCAweDAwN2UsCi0JMHgwODBjLCAweDY2YjIsIDB4MTE2OCwgMHhiODEzLCAweDAwZmYsIDB4YjgxNywgMHhmZmZlLCAweDA4MGMsCi0JMHgzMjhiLCAweDA0YTksIDB4MDEyOCwgMHg3MGRjLCAweGMwYmQsIDB4NzBkZSwgMHgwODBjLCAweGQyYTksCi0JMHgwMDFlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDE2LCAweDAwNzYsIDB4MDBkNiwgMHgwMGM2LCAweDIwMDEsCi0JMHgxODRjLCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweGI4NDIsIDB4MDgwYywgMHhiMTUzLCAweDAxZDAsCi0JMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhkMmQyLCAweDYwMjMsIDB4MDAwMSwgMHg5MDA2LCAweDA4MGMsCi0JMHg2NjRmLCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDY2NjMsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg3MGE4LCAweDgwMDAsIDB4NzBhYSwgMHgwMTJlLCAweDIwMDksIDB4MDAwNCwgMHgwODBjLCAweGIxODAsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsCi0JMHgwMDc2LCAweDAwZDYsIDB4MDBjNiwgMHgyMDAxLCAweDE4NGMsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsCi0JMHhiODQyLCAweDA4MGMsIDB4YjE1MywgMHgwNTQ4LCAweDJiMDAsIDB4NjAxMiwgMHhiODAwLCAweGMwYzQsCi0JMHhiODAyLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDAxNDAsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwMDYsIDB4MTExMCwgMHgwODBjLCAweDMyNDYsIDB4MDgwYywgMHhkMmQyLCAweDYwMjMsCi0JMHgwMDAxLCAweDkwMDYsIDB4MDgwYywgMHg2NjRmLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDY2NjMsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MGE4LCAweDgwMDAsIDB4NzBhYSwgMHgwMTJlLCAweDIwMDksCi0JMHgwMDAyLCAweDA4MGMsIDB4YjE4MCwgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGRlLCAweDAwN2UsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDAwMjYsIDB4MjAwOSwgMHgwMDgwLCAweDA4MGMsCi0JMHg2NmIyLCAweDExNDAsIDB4YjgxMywgMHgwMGZmLCAweGI4MTcsIDB4ZmZmYywgMHgwMDM5LCAweDAxMTAsCi0JMHg3MGUzLCAweGZmZmYsIDB4MDAyZSwgMHgwMGNlLCAweDAwYmUsIDB4MDAwNSwgMHgwMDE2LCAweDAwNzYsCi0JMHgwMGQ2LCAweDAwYzYsIDB4MDgwYywgMHhiMGFiLCAweDAxZDAsIDB4MmIwMCwgMHg2MDEyLCAweDA4MGMsCi0JMHhkMmQyLCAweDYwMjMsIDB4MDAwMSwgMHg5MDA2LCAweDA4MGMsIDB4NjY0ZiwgMHgyMDAxLCAweDAwMDIsCi0JMHgwODBjLCAweDY2NjMsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzBlNCwgMHg4MDAwLCAweDcwZTYsCi0JMHgwMTJlLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweGIxODAsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDY2YjIsIDB4MTFiOCwgMHhiODEzLCAweDAwZmYsCi0JMHhiODE3LCAweGZmZmQsIDB4YjhjZiwgMHgwMDA0LCAweDA4MGMsIDB4YjBhYiwgMHgwMTcwLCAweDJiMDAsCi0JMHg2MDEyLCAweDYzMTYsIDB4NjAyMywgMHgwMDAxLCAweDYyMGEsIDB4MDgwYywgMHhkMmQyLCAweDIwMDksCi0JMHgwMDIyLCAweDA4MGMsIDB4YjE4MCwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMzYsIDB4MDAyNiwgMHgwMGI2LCAweDIxZjAsCi0JMHgwODBjLCAweDk0ZWIsIDB4MDgwYywgMHg5NDZiLCAweDA4MGMsIDB4YWYzZiwgMHgwODBjLCAweGMwNTEsCi0JMHgzZTA4LCAweDIxMzAsIDB4ODFmZiwgMHgwMTIwLCAweDIwYTksIDB4MDA3ZSwgMHg5MDBlLCAweDAwMTgsCi0JMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwMDE2LCAweDA4MGMsIDB4NjcxZCwgMHgxMTQwLCAweDk2ODYsCi0JMHgwMDAyLCAweDExMTgsIDB4YjgwMCwgMHhkMGJjLCAweDExMTAsIDB4MDgwYywgMHg2MTQxLCAweDAwMWUsCi0JMHg4MTA4LCAweDFmMDQsIDB4MzIyYiwgMHg5Njg2LCAweDAwMDEsIDB4MTkwYywgMHgzMzZmLCAweDAwYmUsCi0JMHgwMDJlLCAweDAwM2UsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsCi0JMHgwMDQ2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LCAweDAwYjYsIDB4NjIxMCwgMHgyMjU4LCAweGJhYTAsCi0JMHgwMDI2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDk0ZTAsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsCi0JMHgwODBjLCAweDkzYjMsIDB4MmMwOCwgMHgwODBjLCAweGU2OTAsIDB4MDA3ZSwgMHgwMDFlLCAweGJhMTAsCi0JMHhiYjE0LCAweGJjYzAsIDB4MDgwYywgMHg2MTQxLCAweGJhMTIsIDB4YmIxNiwgMHhiY2MyLCAweDAwYmUsCi0JMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwgMHgwMDRlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgwMDA2LCAweDAwYjYsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsIDB4MDBiZSwgMHg5MDg2LCAweDAwODAsCi0JMHgwMTUwLCAweDIwNzEsIDB4MTgwMCwgMHg3MGE4LCAweDkwMDUsIDB4MDExMCwgMHg4MDAxLCAweDcwYWEsCi0JMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDcxLCAweDE4MDAsIDB4NzBlNCwgMHg5MDA1LCAweDBkYzAsCi0JMHg4MDAxLCAweDcwZTYsIDB4MGNhOCwgMHhiODAwLCAweGMwOGMsIDB4YjgwMiwgMHgwMDA1LCAweDAwZjYsCi0JMHgwMGU2LCAweDAwYzYsIDB4MDBiNiwgMHgwMDQ2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LCAweDAxNTYsCi0JMHgyMTc4LCAweDgxZmYsIDB4MTExOCwgMHgyMGE5LCAweDAwMDEsIDB4MDA3OCwgMHgwODBjLCAweDU3ZDMsCi0JMHhkMGM0LCAweDAxNDAsIDB4ZDBhNCwgMHgwMTMwLCAweDkwMDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmQsCi0JMHgwODBjLCAweGU5YTUsIDB4MjBhOSwgMHgwODAwLCAweDkwMTYsIDB4MDAyNiwgMHg5MjhlLCAweDAwN2UsCi0JMHgwOTA0LCAweDMyZjYsIDB4OTI4ZSwgMHgwMDdmLCAweDA5MDQsIDB4MzJmNiwgMHg5MjhlLCAweDAwODAsCi0JMHgwNWU4LCAweDkyODgsIDB4MTAwMCwgMHgyMTBjLCAweDgxZmYsIDB4MDVjMCwgMHg4ZmZmLCAweDExNDgsCi0JMHgyMDAxLCAweDE5OGYsIDB4MDAwNiwgMHgyMDAzLCAweDAwMDEsIDB4MDRmMSwgMHgwMDBlLCAweDIwMDMsCi0JMHgwMDAwLCAweDAwYjYsIDB4MDBjNiwgMHgyMTU4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDZhNWMsCi0JMHgwMGNlLCAweDAwYmUsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4OTRlMCwgMHgwMDc2LCAweDIwMzksCi0JMHgwMDAwLCAweDA4MGMsIDB4OTNiMywgMHgwMGI2LCAweDAwYzYsIDB4MDAyNiwgMHgyMTU4LCAweGJhMDQsCi0JMHg5Mjk0LCAweDAwZmYsIDB4OTI4NiwgMHgwMDA2LCAweDExMTgsIDB4YjgwNywgMHgwNDA0LCAweDAwMjgsCi0JMHgyMDAxLCAweDAwMDQsIDB4ODAwNywgMHg5MjE1LCAweGJhMDYsIDB4MDAyZSwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMDE2LCAweDJjMDgsIDB4MDgwYywgMHhlNjkwLCAweDAwMWUsIDB4MDA3ZSwgMHgwMDJlLCAweDgyMTAsCi0JMHgxZjA0LCAweDMyYWQsIDB4MDE1ZSwgMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwgMHgwMDRlLCAweDAwYmUsCi0JMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwNDYsIDB4MDAyNiwgMHgwMDE2LCAweDA4MGMsCi0JMHg1N2QzLCAweGQwYzQsIDB4MDE0MCwgMHhkMGE0LCAweDAxMzAsIDB4OTAwNiwgMHgyMjIwLCAweDIwMDksCi0JMHgwMDI5LCAweDA4MGMsIDB4ZTlhNSwgMHgwMDFlLCAweDAwMmUsIDB4MDA0ZSwgMHgwMDA1LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHg3Mjk0LCAweDgyZmYsIDB4MDFlOCwgMHgwODBjLCAweDZhOGEsCi0JMHgxMWQwLCAweDIxMDAsIDB4MDgwYywgMHgyOGM3LCAweDgxZmYsIDB4MDFiOCwgMHgyMDE5LCAweDAwMDEsCi0JMHg4MzE0LCAweDkyZTAsIDB4MWM4MCwgMHgyYzA0LCAweGQzODQsIDB4MDEyMCwgMHg5MDg0LCAweGZmMDAsCi0JMHg4MDA3LCAweDAwMTAsIDB4OTA4NCwgMHgwMGZmLCAweDkxMTYsIDB4MDEzOCwgMHg5MDk2LCAweDAwZmYsCi0JMHgwMTEwLCAweDgzMTgsIDB4MGM2OCwgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMzYsCi0JMHgyMDE5LCAweDAwMjksIDB4MDBhOSwgMHgwMDNlLCAweDkxODAsIDB4MTAwMCwgMHgyMDA0LCAweDkwNjUsCi0JMHgwMTU4LCAweDAwMTYsIDB4MDBjNiwgMHgyMDYxLCAweDFhYjgsIDB4MDAxZSwgMHg2MTEyLCAweDA4MGMsCi0JMHgzMjQ2LCAweDAwMWUsIDB4MDgwYywgMHg2NmQ3LCAweDAxMmUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwMjYsIDB4MjExMCwgMHgwODBjLCAweGFhOWEsIDB4MDgwYywgMHhlZDBmLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4ZDBjYywgMHgwMDA1LCAweDAwYzYsCi0JMHgwMGI2LCAweDA4MGMsIDB4NzU2OSwgMHgxMTE4LCAweDIwYTksIDB4MDgwMCwgMHgwMDEwLCAweDIwYTksCi0JMHgwNzgyLCAweDA4MGMsIDB4NzU2OSwgMHgxMTEwLCAweDkwMGUsIDB4MDAxMCwgMHgyMDA5LCAweDAwN2UsCi0JMHg5MTgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDVkLCAweDAxMzAsIDB4ODZmZiwgMHgwMTEwLCAweGI4MDAsCi0JMHhkMGJjLCAweDA5MGMsIDB4NjZkNywgMHg4MTA4LCAweDFmMDQsIDB4MzM4MCwgMHgyMDYxLCAweDE4MDAsCi0JMHg2MDdmLCAweDAwMDAsIDB4NjA4MCwgMHg5MDg0LCAweDAwZmYsIDB4NjA4MiwgMHg2MGIzLCAweDAwMDAsCi0JMHgwMGJlLCAweDAwY2UsIDB4MDAwNSwgMHgyMDAxLCAweDE4NjksIDB4MjAwNCwgMHhkMGJjLCAweDAwMDUsCi0JMHgyMDExLCAweDE4NDgsIDB4MjIxNCwgMHhkMmVjLCAweDAwMDUsIDB4MDAyNiwgMHgyMDExLCAweDE4NjcsCi0JMHgyMjE0LCAweGQyZGMsIDB4MDAyZSwgMHgwMDA1LCAweDdlZWYsIDB4N2RlOCwgMHg3Y2U0LCAweDgwZTIsCi0JMHg3YmUxLCAweDgwZTAsIDB4ODBkYywgMHg4MGRhLCAweDdhZDksIDB4ODBkNiwgMHg4MGQ1LCAweDgwZDQsCi0JMHg4MGQzLCAweDgwZDIsIDB4ODBkMSwgMHg3OWNlLCAweDc4Y2QsIDB4ODBjYywgMHg4MGNiLCAweDgwY2EsCi0JMHg4MGM5LCAweDgwYzcsIDB4ODBjNiwgMHg3N2M1LCAweDc2YzMsIDB4ODBiYywgMHg4MGJhLCAweDc1YjksCi0JMHg4MGI2LCAweDc0YjUsIDB4NzNiNCwgMHg3MmIzLCAweDgwYjIsIDB4ODBiMSwgMHg4MGFlLCAweDcxYWQsCi0JMHg4MGFjLCAweDcwYWIsIDB4NmZhYSwgMHg2ZWE5LCAweDgwYTcsIDB4NmRhNiwgMHg2Y2E1LCAweDZiYTMsCi0JMHg2YTlmLCAweDY5OWUsIDB4Njg5ZCwgMHg4MDliLCAweDgwOTgsIDB4Njc5NywgMHg2NjkwLCAweDY1OGYsCi0JMHg2NDg4LCAweDYzODQsIDB4NjI4MiwgMHg4MDgxLCAweDgwODAsIDB4NjE3YywgMHg2MDdhLCAweDgwNzksCi0JMHg1Zjc2LCAweDgwNzUsIDB4ODA3NCwgMHg4MDczLCAweDgwNzIsIDB4ODA3MSwgMHg4MDZlLCAweDVlNmQsCi0JMHg4MDZjLCAweDVkNmIsIDB4NWM2YSwgMHg1YjY5LCAweDgwNjcsIDB4NWE2NiwgMHg1OTY1LCAweDU4NjMsCi0JMHg1NzVjLCAweDU2NWEsIDB4NTU1OSwgMHg4MDU2LCAweDgwNTUsIDB4NTQ1NCwgMHg1MzUzLCAweDUyNTIsCi0JMHg1MTUxLCAweDUwNGUsIDB4NGY0ZCwgMHg4MDRjLCAweDgwNGIsIDB4NGU0YSwgMHg0ZDQ5LCAweDgwNDcsCi0JMHg0YzQ2LCAweDgwNDUsIDB4ODA0MywgMHg4MDNjLCAweDgwM2EsIDB4ODAzOSwgMHg4MDM2LCAweDRiMzUsCi0JMHg4MDM0LCAweDRhMzMsIDB4NDkzMiwgMHg0ODMxLCAweDgwMmUsIDB4NDcyZCwgMHg0NjJjLCAweDQ1MmIsCi0JMHg0NDJhLCAweDQzMjksIDB4NDIyNywgMHg4MDI2LCAweDgwMjUsIDB4NDEyMywgMHg0MDFmLCAweDNmMWUsCi0JMHgzZTFkLCAweDNkMWIsIDB4M2MxOCwgMHg4MDE3LCAweDgwMTAsIDB4M2IwZiwgMHgzYTA4LCAweDgwMDQsCi0JMHgzOTAyLCAweDgwMDEsIDB4ODAwMCwgMHg4MDAwLCAweDM4MDAsIDB4MzcwMCwgMHgzNjAwLCAweDgwMDAsCi0JMHgzNTAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDM0MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzMzAwLCAweDMyMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzMTAwLCAweDMwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDJmMDAsCi0JMHg4MDAwLCAweDJlMDAsIDB4MmQwMCwgMHgyYzAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDJiMDAsCi0JMHg4MDAwLCAweDJhMDAsIDB4MjkwMCwgMHgyODAwLCAweDgwMDAsIDB4MjcwMCwgMHgyNjAwLCAweDI1MDAsCi0JMHgyNDAwLCAweDIzMDAsIDB4MjIwMCwgMHg4MDAwLCAweDgwMDAsIDB4MjEwMCwgMHgyMDAwLCAweDFmMDAsCi0JMHgxZTAwLCAweDFkMDAsIDB4MWMwMCwgMHg4MDAwLCAweDgwMDAsIDB4MWIwMCwgMHgxYTAwLCAweDgwMDAsCi0JMHgxOTAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDE4MDAsCi0JMHg4MDAwLCAweDE3MDAsIDB4MTYwMCwgMHgxNTAwLCAweDgwMDAsIDB4MTQwMCwgMHgxMzAwLCAweDEyMDAsCi0JMHgxMTAwLCAweDEwMDAsIDB4MGYwMCwgMHg4MDAwLCAweDgwMDAsIDB4MGUwMCwgMHgwZDAwLCAweDBjMDAsCi0JMHgwYjAwLCAweDBhMDAsIDB4MDkwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDgwMCwgMHgwNzAwLCAweDgwMDAsCi0JMHgwNjAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDA1MDAsIDB4MDQwMCwgMHgwMzAwLCAweDgwMDAsCi0JMHgwMjAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDAxMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDIwNzEsIDB4MTg5ZSwgMHg3MDAzLCAweDAwMDIsCi0JMHg5MDA2LCAweDcwMTYsIDB4NzAxYSwgMHg3MDRhLCAweDcwNGUsIDB4NzAwZSwgMHg3MDQyLCAweDcwNDYsCi0JMHg3MDNiLCAweDE4YmEsIDB4NzAzZiwgMHgxOGJhLCAweDcwMDcsIDB4MDAwMSwgMHgwODBjLCAweDEwMjcsCi0JMHgwOTBjLCAweDBkYzUsIDB4MjkwMCwgMHg3MDZhLCAweGE4NjcsIDB4MDAwMiwgMHhhOGFiLCAweGRjYjAsCi0JMHgwODBjLCAweDEwMjcsIDB4MDkwYywgMHgwZGM1LCAweDI5MDAsIDB4NzA2ZSwgMHhhODY3LCAweDAwMDIsCi0JMHhhOGFiLCAweGRjYjAsIDB4MDAwNSwgMHgyMDcxLCAweDE4OWUsIDB4NzAwNCwgMHgwMDAyLCAweDM0ZGIsCi0JMHgzNGRjLCAweDM0ZWYsIDB4MzUwMywgMHgwMDA1LCAweDEwMDQsIDB4MzRlYywgMHgwZTA0LCAweDM0ZWMsCi0JMHgyMDc5LCAweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwYywgMHg5MDA1LCAweDExMjgsCi0JMHg3MDBmLCAweDAwMDEsIDB4MDEyZSwgMHgwNDY4LCAweDAwMDUsIDB4MDEyZSwgMHgwY2U4LCAweDIwNzksCi0JMHgwMDAwLCAweDIwNjEsIDB4MThiOCwgMHgyYzRjLCAweGE4NmMsIDB4OTA4ZSwgMHgwMTAwLCAweDAxMjgsCi0JMHg5MDg2LCAweDAyMDAsIDB4MDkwNCwgMHgzNWQ3LCAweDAwMDUsIDB4NzAxOCwgMHgyMDQ4LCAweDIwNjEsCi0JMHgxODAwLCAweDcwMWMsIDB4MDgwNywgMHg3MDE0LCAweDIwNDgsIDB4YTg2NCwgMHg5MDk0LCAweDAwZmYsCi0JMHg5Mjk2LCAweDAwMjksIDB4MTEyMCwgMHhhYTc4LCAweGQyZmMsIDB4MDEyOCwgMHgwMDA1LCAweDkwODYsCi0JMHgwMTAzLCAweDAxMDgsIDB4MDAwNSwgMHgyMDc5LCAweDAwMDAsIDB4MjA2MSwgMHgxODAwLCAweDcwMWMsCi0JMHgwODA3LCAweDIwNjEsIDB4MTgwMCwgMHg3ODgwLCAweDkwOGEsIDB4MDA0MCwgMHgxMjEwLCAweDYxZDAsCi0JMHgwMDQyLCAweDIxMDAsIDB4OTA4YSwgMHgwMDNmLCAweDFhMDQsIDB4MzVkNCwgMHg2MWQwLCAweDA4MDQsCi0JMHgzNTY5LCAweDM1YWIsIDB4MzVlMywgMHgzNWQ0LCAweDM1ZWYsIDB4MzVmOSwgMHgzNWZmLCAweDM2MDMsCi0JMHgzNjEzLCAweDM2MTcsIDB4MzYyZCwgMHgzNjMzLCAweDM2MzksIDB4MzY0NCwgMHgzNjRmLCAweDM2NWUsCi0JMHgzNjZkLCAweDM2N2IsIDB4MzY5MiwgMHgzNmFkLCAweDM1ZDQsIDB4Mzc1NiwgMHgzNzk0LCAweDM4M2EsCi0JMHgzODRiLCAweDM4NmUsIDB4MzVkNCwgMHgzNWQ0LCAweDM1ZDQsIDB4MzhhNiwgMHgzOGMyLCAweDM4Y2IsCi0JMHgzOGZhLCAweDM5MDAsIDB4MzVkNCwgMHgzOTQ2LCAweDM1ZDQsIDB4MzVkNCwgMHgzNWQ0LCAweDM1ZDQsCi0JMHgzNWQ0LCAweDM5NTEsIDB4Mzk1YSwgMHgzOTYyLCAweDM5NjQsIDB4MzVkNCwgMHgzNWQ0LCAweDM1ZDQsCi0JMHgzNWQ0LCAweDM1ZDQsIDB4MzVkNCwgMHgzOTkwLCAweDM1ZDQsIDB4MzVkNCwgMHgzNWQ0LCAweDM1ZDQsCi0JMHgzNWQ0LCAweDM5YWQsIDB4M2EyMiwgMHgzNWQ0LCAweDM1ZDQsIDB4MzVkNCwgMHgzNWQ0LCAweDM1ZDQsCi0JMHgzNWQ0LCAweDAwMDIsIDB4M2E0YywgMHgzYTRmLCAweDNhYWUsIDB4M2FjNywgMHgzYWY3LCAweDNkOTksCi0JMHgzNWQ0LCAweDUzOTYsIDB4MzVkNCwgMHgzNWQ0LCAweDM1ZDQsIDB4MzVkNCwgMHgzNWQ0LCAweDM1ZDQsCi0JMHgzNWQ0LCAweDM1ZDQsIDB4MzYyZCwgMHgzNjMzLCAweDQyY2UsIDB4NTdmNywgMHg0MmVjLCAweDU0MjUsCi0JMHg1NDc3LCAweDU1ODIsIDB4MzVkNCwgMHg1NWU0LCAweDU2MjAsIDB4NTY1MSwgMHg1NzU5LCAweDU2N2UsCi0JMHg1NmQ5LCAweDM1ZDQsIDB4NDJmMCwgMHg0NGI2LCAweDQ0Y2MsIDB4NDRmMSwgMHg0NTU2LCAweDQ1Y2EsCi0JMHg0NWVhLCAweDQ2NjEsIDB4NDZiZCwgMHg0NzE5LCAweDQ3MWMsIDB4NDc0MSwgMHg0N2Y4LCAweDQ4NWUsCi0JMHg0ODY2LCAweDQ5OWIsIDB4NGIxMywgMHg0YjQ3LCAweDRkYWIsIDB4MzVkNCwgMHg0ZGM5LCAweDRlNmYsCi0JMHg0ZjU4LCAweDRmYjIsIDB4MzVkNCwgMHg1MDY5LCAweDM1ZDQsIDB4NTBkNSwgMHg1MGYwLCAweDQ4NjYsCi0JMHg1MzM2LCAweDcxNGMsIDB4MDAwMCwgMHgyMDIxLCAweDQwMDAsIDB4MDgwYywgMHg0YmM1LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MGUwNCwgMHgzNWI1LCAweDAwMTAsIDB4MDEyZSwgMHgwY2MwLCAweDdjMzYsCi0JMHg5NDg2LCAweDQwMDAsIDB4MDExOCwgMHg3ODMzLCAweDAwMTEsIDB4MDAxMCwgMHg3ODMzLCAweDAwMTAsCi0JMHg3YzgyLCAweDc5ODYsIDB4N2E4YSwgMHg3YjhlLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksCi0JMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWFhLCAweDcwMDcsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsCi0JMHg3MDBmLCAweDAwMDAsIDB4MDEyZSwgMHgwMDA1LCAweDIwMjEsIDB4NDAwMSwgMHgwOGIwLCAweDIwMjEsCi0JMHg0MDAyLCAweDA4OTgsIDB4MjAyMSwgMHg0MDAzLCAweDA4ODAsIDB4MjAyMSwgMHg0MDA1LCAweDA4NjgsCi0JMHgyMDIxLCAweDQwMDYsIDB4MDg1MCwgMHgyMDM5LCAweDAwMDEsIDB4OTAyZSwgMHgyNTIwLCAweDdiODgsCi0JMHg3YThjLCAweDc4ODQsIDB4Nzk5MCwgMHg4MWZmLCAweDBkOTgsIDB4MDgwNCwgMHg0YmQyLCAweDIwMzksCi0JMHgwMDAxLCAweDkwMmUsIDB4MjUyMCwgMHg3Yjg4LCAweDdhOGMsIDB4Nzg4NCwgMHg3OTkwLCAweDA4MDQsCi0JMHg0YmQ1LCAweDc5ODQsIDB4Nzg4OCwgMHgyMTE0LCAweDIwMGEsIDB4MDgwNCwgMHgzNWFiLCAweDc5ODQsCi0JMHgyMTE0LCAweDA4MDQsIDB4MzVhYiwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMDIxLCAweDIwZTksCi0JMHgwMDAwLCAweDIwYTEsIDB4MDAyMSwgMHgyMGE5LCAweDAwMWYsIDB4NDAwMywgMHg3OTg0LCAweDdhODgsCi0JMHg3YjhjLCAweDA4MDQsIDB4MzVhYiwgMHg3ODg0LCAweDIwNjAsIDB4MDgwNCwgMHgzNjYwLCAweDIwMDksCi0JMHgwMDAzLCAweDIwMTEsIDB4MDAwMywgMHgyMDE5LCAweDAwMTIsIDB4Nzg5YiwgMHgwMTM3LCAweDc4OTMsCi0JMHhmZmZmLCAweDIwMDEsIDB4MTg4ZiwgMHgyMDA0LCAweDkwMDUsIDB4MDExOCwgMHg3ODk2LCAweDA4MDQsCi0JMHgzNWFiLCAweDc4OTcsIDB4MDAwMSwgMHgwODA0LCAweDM1YWIsIDB4MjAzOSwgMHgwMDAxLCAweDdkOTgsCi0JMHg3YzljLCAweDA4MDQsIDB4MzVlNywgMHgyMDM5LCAweDAwMDEsIDB4N2Q5OCwgMHg3YzljLCAweDA4MDQsCi0JMHgzNWYzLCAweDc5YTAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMTAsIDB4MDgwNCwgMHgzNWUwLCAweDIxMzgsCi0JMHg3ZDk4LCAweDdjOWMsIDB4MDgwNCwgMHgzNWU3LCAweDc5YTAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMTAsCi0JMHgwODA0LCAweDM1ZTAsIDB4MjEzOCwgMHg3ZDk4LCAweDdjOWMsIDB4MDgwNCwgMHgzNWYzLCAweDc5YTAsCi0JMHg5MTgyLCAweDAwNDAsIDB4MDIxMCwgMHgwODA0LCAweDM1ZTAsIDB4MjFlOCwgMHg3OTg0LCAweDc4ODgsCi0JMHgyMGE5LCAweDAwMDEsIDB4MjFhMCwgMHg0MDA0LCAweDA4MDQsIDB4MzVhYiwgMHgyMDYxLCAweDA4MDAsCi0JMHhlMTBjLCAweDkwMDYsIDB4MmMxNSwgMHg5MjAwLCAweDhjNjAsIDB4ODEwOSwgMHgxZGQ4LCAweDIwMTAsCi0JMHg5MDA1LCAweDA5MDQsIDB4MzVhYiwgMHgwODA0LCAweDM1ZGEsIDB4NzlhMCwgMHg5MTgyLCAweDAwNDAsCi0JMHgwMjEwLCAweDA4MDQsIDB4MzVlMCwgMHgyMWUwLCAweDIwYTksIDB4MDAwMSwgMHg3OTg0LCAweDIxOTgsCi0JMHg0MDEyLCAweDA4MDQsIDB4MzVhYiwgMHgyMDY5LCAweDE4NDcsIDB4Nzg4NCwgMHg3OTkwLCAweDkxMWEsCi0JMHgxYTA0LCAweDM1ZTAsIDB4ODAxOSwgMHgwOTA0LCAweDM1ZTAsIDB4Njg0YSwgMHg2OTQyLCAweDc4OGMsCi0JMHg2ODUyLCAweDc4ODgsIDB4Njg1NiwgMHg5MDA2LCAweDY4NWEsIDB4Njg1ZSwgMHgwODBjLCAweDc4N2YsCi0JMHgwODA0LCAweDM1YWIsIDB4MjA2OSwgMHgxODQ3LCAweDc4ODQsIDB4Nzk5NCwgMHg5MTFhLCAweDFhMDQsCi0JMHgzNWUwLCAweDgwMTksIDB4MDkwNCwgMHgzNWUwLCAweDY4NGUsIDB4Njk0NiwgMHg3ODhjLCAweDY4NjIsCi0JMHg3ODg4LCAweDY4NjYsIDB4OTAwNiwgMHg2ODZhLCAweDY4NmUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwODBjLCAweDZiMmEsIDB4MDEyZSwgMHgwODA0LCAweDM1YWIsIDB4OTAyZSwgMHgyNTIwLCAweDgxZmYsCi0JMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LCAweDM1ZGQsIDB4Nzk4NCwgMHg3Yjg4LCAweDdhOGMsCi0JMHgyMGE5LCAweDAwMDUsIDB4MjBlOSwgMHgwMDAxLCAweDIwYTEsIDB4MThhNiwgMHg0MTAxLCAweDA4MGMsCi0JMHg0Yjg5LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzVkZCwgMHgyMDA5LCAweDAwMjAsCi0JMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHhhZjYwLCAweDA4MGMsIDB4NGJkMiwgMHg3MDFmLCAweDM2ZDEsCi0JMHgwMDA1LCAweGE4NjQsIDB4MjAwOCwgMHg5MDg0LCAweDAwZmYsIDB4OTA5NiwgMHgwMDExLCAweDAxNjgsCi0JMHg5MDk2LCAweDAwMTksIDB4MDE1MCwgMHg5MDk2LCAweDAwMTUsIDB4MDEzOCwgMHg5MDk2LCAweDAwNDgsCi0JMHgwMTIwLCAweDkwOTYsIDB4MDAyOSwgMHgxOTA0LCAweDM1ZGQsIDB4ODEwZiwgMHg5MThjLCAweDAwZmYsCi0JMHgwOTA0LCAweDM1ZGQsIDB4NzExMiwgMHg3MDEwLCAweDgwMDEsIDB4MDU2MCwgMHg3MDEyLCAweDA4MGMsCi0JMHg0Yjg5LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzVkZCwgMHgyMDA5LCAweDAwMjAsCi0JMHg3MDY4LCAweDIwNDAsIDB4YTI4YywgMHhhMzkwLCAweGE0OTQsIDB4YTU5OCwgMHg5MjkwLCAweDAwNDAsCi0JMHg5Mzk5LCAweDAwMDAsIDB4OTRhMSwgMHgwMDAwLCAweDk1YTksIDB4MDAwMCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDE5LCAweGFmNjAsIDB4MDgwYywgMHg0YmQyLCAweDcwMWYsIDB4MzcwZiwgMHgwMDA1LCAweGE4NjQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA5NiwgMHgwMDAyLCAweDAxMjAsIDB4OTA5NiwgMHgwMDBhLCAweDE5MDQsCi0JMHgzNWRkLCAweDA4ODgsIDB4NzAxNCwgMHgyMDQ4LCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweGE4NjQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA5NiwgMHgwMDI5LCAweDExNjAsIDB4YzJmZCwgMHhhYTdhLCAweDA4MGMsCi0JMHg2Mjk4LCAweDAxNTAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YTg3YSwgMHhhOTgyLCAweDAxMmUsCi0JMHgwMDUwLCAweDA4MGMsIDB4NjVjOCwgMHgxMTI4LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDM3M2IsCi0JMHgwMDA1LCAweDA4MGMsIDB4NzAzZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMGE5LCAweDAwMDUsCi0JMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxOGE2LCAweDQwMGEsIDB4MjEwMCwgMHg5MjEwLCAweDkzOTksCi0JMHgwMDAwLCAweDk0YTEsIDB4MDAwMCwgMHg5NWE5LCAweDAwMDAsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksCi0JMHgyMDA5LCAweDAwMjAsIDB4MDEyZSwgMHhhZjYwLCAweDA4MDQsIDB4NGJkNSwgMHgyMDkxLCAweDgwMDAsCi0JMHg3ODM3LCAweDQwMDAsIDB4NzgzMywgMHgwMDEwLCAweDc4ODMsIDB4NDAwMCwgMHg3ODg3LCAweDQ5NTMsCi0JMHg3ODhiLCAweDUwMjAsIDB4Nzg4ZiwgMHgyMDIwLCAweDIwMDksIDB4MDE3ZiwgMHgyMTA0LCAweDc4OTIsCi0JMHgzZjAwLCAweDc4OTYsIDB4MjA2MSwgMHgwMTAwLCAweDYyMDAsIDB4MjA2MSwgMHgwMjAwLCAweDYwM2MsCi0JMHg4MDA3LCAweDkyMDUsIDB4Nzg5YSwgMHgyMDA5LCAweDA0ZmQsIDB4MjEwNCwgMHg3ODllLCAweDIwOTEsCi0JMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDAxODAsCi0JMHgyMDAxLCAweDFhMWQsIDB4MjAwNCwgMHg5MDA1LCAweDAxMjgsIDB4MjAwMSwgMHgwMDhiLCAweDIwMDQsCi0JMHhkMGZjLCAweDBkZDgsIDB4MjAwMSwgMHgwMDhhLCAweDIwMDMsIDB4MDAwMiwgMHgyMDAzLCAweDEwMDEsCi0JMHgyMDcxLCAweDAwODAsIDB4MDgwNCwgMHgwNDI3LCAweDgxZmYsIDB4MTkwNCwgMHgzNWRkLCAweDc5ODQsCi0JMHgwODBjLCAweDY3MWQsIDB4MTkwNCwgMHgzNWUwLCAweDdlOTgsIDB4OTY4NCwgMHgzZmZmLCAweDkwODIsCi0JMHg0MDAwLCAweDFhMDQsIDB4MzVlMCwgMHg3Yzg4LCAweDdkOGMsIDB4MDgwYywgMHg2ODgwLCAweDA4MGMsCi0JMHg2ODRmLCAweDAwMDAsIDB4MTUxOCwgMHgyMDYxLCAweDFjZDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDYwMTQsIDB4OTA0ZCwgMHgwMTMwLCAweGE4NmMsCi0JMHg5NDA2LCAweDExMTgsIDB4YTg3MCwgMHg5NTA2LCAweDAxNTAsIDB4MDEyZSwgMHg5Y2UwLCAweDAwMTgsCi0JMHgyMDAxLCAweDE4MWEsIDB4MjAwNCwgMHg5YzAyLCAweDFhMDQsIDB4MzVkZCwgMHgwYzMwLCAweDA4MGMsCi0JMHhjYTcxLCAweDAxMmUsIDB4MDkwNCwgMHgzNWRkLCAweDA4MDQsIDB4MzVhYiwgMHg5MDBlLCAweDIwMDEsCi0JMHgwMDA1LCAweDA4MGMsIDB4NzAzZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGQxNTIsCi0JMHgwODBjLCAweDZkZDEsIDB4MDEyZSwgMHgwODA0LCAweDM1YWIsIDB4MDBhNiwgMHgyOTUwLCAweGIxOTgsCi0JMHgwODBjLCAweDY3MWQsIDB4MTkwNCwgMHgzODI3LCAweGI2YTQsIDB4OTY4NCwgMHgzZmZmLCAweDkwODIsCi0JMHg0MDAwLCAweDE2ZTgsIDB4YjQ5YywgMHhiNWEwLCAweDA4MGMsIDB4Njg4MCwgMHgwODBjLCAweDY4NGYsCi0JMHgxNTIwLCAweDIwNjEsIDB4MWNkMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDAwLCAweDkwODYsCi0JMHgwMDAwLCAweDAxNDgsIDB4NjAxNCwgMHg5MDRkLCAweDAxMzAsIDB4YTg2YywgMHg5NDA2LCAweDExMTgsCi0JMHhhODcwLCAweDk1MDYsIDB4MDE1OCwgMHgwMTJlLCAweDljZTAsIDB4MDAxOCwgMHgyMDAxLCAweDE4MWEsCi0JMHgyMDA0LCAweDljMDIsIDB4MjAwOSwgMHgwMDBkLCAweDEyYjAsIDB4MGMyOCwgMHgwODBjLCAweGNhNzEsCi0JMHgwMTJlLCAweDIwMDksIDB4MDAwMywgMHgwMTc4LCAweDAwZTAsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDUsCi0JMHgwODBjLCAweDcwM2QsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhkMTUyLCAweDA4MGMsCi0JMHg2ZGM0LCAweDAxMmUsIDB4MDA3MCwgMHhiMDk3LCAweDQwMDUsIDB4YjE5YSwgMHgwMDEwLCAweGIwOTcsCi0JMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgyYTQ4LCAweDAwYWUsCi0JMHgwMDA1LCAweGIwOTcsIDB4NDAwMCwgMHg5MDA2LCAweDkxOGQsIDB4MDAwMSwgMHgyMDA4LCAweDJhNDgsCi0JMHgwMGFlLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDM1ZGQsIDB4MDgwYywgMHg0YmEwLCAweDA5MDQsCi0JMHgzNWUwLCAweDA4MGMsIDB4NjdlNCwgMHgwOTA0LCAweDM1ZGQsIDB4MDgwYywgMHg2ODg2LCAweDA5MDQsCi0JMHgzNWRkLCAweDA4MDQsIDB4NDVlMSwgMHg4MWZmLCAweDE5MDQsIDB4MzVkZCwgMHgwODBjLCAweDRiYmMsCi0JMHgwOTA0LCAweDM1ZTAsIDB4MDgwYywgMHg2OTE0LCAweDA5MDQsIDB4MzVkZCwgMHgyMDE5LCAweDAwMDUsCi0JMHg3OWE4LCAweDA4MGMsIDB4NjhhMSwgMHgwOTA0LCAweDM1ZGQsIDB4Nzg4OCwgMHg5MDhhLCAweDEwMDAsCi0JMHgxYTA0LCAweDM1ZTAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHgwODBjLCAweDg3MTcsCi0JMHg3OWE4LCAweGQxODQsIDB4MTkwNCwgMHgzNWFiLCAweDA4MDQsIDB4NDVlMSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDgxZmYsIDB4MDExOCwgMHgyMDA5LCAweDAwMDEsIDB4MDQ1MCwgMHgyMDI5LCAweDA3ZmYsCi0JMHg2NDVjLCAweDI0MDAsIDB4OTUwNiwgMHgwMWY4LCAweDI1MDgsIDB4MDgwYywgMHg2NzFkLCAweDExZDgsCi0JMHgwODBjLCAweDY5MTQsIDB4MTEyOCwgMHgyMDA5LCAweDAwMDIsIDB4NjJjMCwgMHgyNTE4LCAweDAwYzAsCi0JMHgyMDE5LCAweDAwMDQsIDB4OTAwZSwgMHgwODBjLCAweDY4YTEsIDB4MTExOCwgMHgyMDA5LCAweDAwMDYsCi0JMHgwMDc4LCAweDc4ODQsIDB4OTA4YSwgMHgxMDAwLCAweDEyNzAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsCi0JMHg5MTA4LCAweDA4MGMsIDB4ODcxNywgMHg4NTI5LCAweDFhZTAsIDB4MDEyZSwgMHgwODA0LCAweDM1YWIsCi0JMHgwMTJlLCAweDA4MDQsIDB4MzVkZCwgMHgwMTJlLCAweDA4MDQsIDB4MzVlMCwgMHgwODBjLCAweDRiYTAsCi0JMHgwOTA0LCAweDM1ZTAsIDB4MDgwYywgMHg2N2U0LCAweDA5MDQsIDB4MzVkZCwgMHhiYWEwLCAweDIwMTksCi0JMHgwMDA1LCAweDAwYzYsIDB4OTA2NiwgMHgwODBjLCAweDk0ZTAsIDB4MDA3NiwgMHg5MDNlLCAweDA4MGMsCi0JMHg5M2IzLCAweDkwMGUsIDB4MDgwYywgMHhlNjkwLCAweDAwN2UsIDB4MDBjZSwgMHgwODBjLCAweDY4ODAsCi0JMHgwODA0LCAweDM1YWIsIDB4MDgwYywgMHg0YmEwLCAweDA5MDQsIDB4MzVlMCwgMHgwODBjLCAweDY4ODAsCi0JMHgyMjA4LCAweDA4MDQsIDB4MzVhYiwgMHgwMTU2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDY5LCAweDE5MTAsCi0JMHg2ODEwLCAweDY5MTQsIDB4OTEwYSwgMHgxMjA4LCAweDkwMGUsIDB4NjgxNiwgMHg5MDE2LCAweDkwMWUsCi0JMHgyMGE5LCAweDAwN2UsIDB4MjA2OSwgMHgxMDAwLCAweDJkMDQsIDB4OTA1ZCwgMHgwMTE4LCAweGI4NGMsCi0JMHgwMDU5LCAweDkyMTAsIDB4OGQ2OCwgMHgxZjA0LCAweDM4ZGMsIDB4MjMwMCwgMHg5MjE4LCAweDAwZWUsCi0JMHgwMGRlLCAweDAxNWUsIDB4MDgwNCwgMHgzNWFiLCAweDAwZjYsIDB4MDAxNiwgMHg5MDdkLCAweDAxMzgsCi0JMHg5MDA2LCAweDgwMDAsIDB4MmYwYywgMHg4MWZmLCAweDAxMTAsIDB4MjE3OCwgMHgwY2QwLCAweDAwMWUsCi0JMHgwMGZlLCAweDAwMDUsIDB4MjA2OSwgMHgxOTEwLCAweDY5MTAsIDB4NjJiYywgMHgwODA0LCAweDM1YWIsCi0JMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsIDB4MzVkZCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4NTdlNywgMHgwMTI4LCAweDIwMDksIDB4MDAwNywgMHgwMTJlLCAweDA4MDQsCi0JMHgzNWRkLCAweDAxMmUsIDB4NjE1YywgMHg5MTkwLCAweDMzYWMsIDB4MjIxNSwgMHg5Mjk0LCAweDAwZmYsCi0JMHg2MzdjLCAweDgzZmYsIDB4MDEwOCwgMHg2MjgwLCAweDY3ZGMsIDB4OTdjNCwgMHgwMDBhLCAweDk4YzYsCi0JMHgwMDBhLCAweDExMTgsIDB4MjAzMSwgMHgwMDAxLCAweDAwZTgsIDB4OTdjNCwgMHgwMDIyLCAweDk4YzYsCi0JMHgwMDIyLCAweDExMTgsIDB4MjAzMSwgMHgwMDAzLCAweDAwYTgsIDB4OTdjNCwgMHgwMDEyLCAweDk4YzYsCi0JMHgwMDEyLCAweDExMTgsIDB4MjAzMSwgMHgwMDAyLCAweDAwNjgsIDB4MDgwYywgMHg3NTY5LCAweDExMTgsCi0JMHgyMDMxLCAweDAwMDQsIDB4MDAzOCwgMHhkNzljLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA1LCAweDA4MDQsCi0JMHgzNWRkLCAweDkwMzYsIDB4N2U5YSwgMHg3ZjllLCAweDA4MDQsIDB4MzVhYiwgMHg2MTRjLCAweDYyNTAsCi0JMHgyMDE5LCAweDE5ODcsIDB4MjMxYywgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg3ODlhLCAweDA4MDQsCi0JMHgzNWFiLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYxMzgsIDB4NjIzYywgMHg2MzQwLCAweDAxMmUsCi0JMHgwODA0LCAweDM1YWIsIDB4MDgwYywgMHg0YmJjLCAweDA5MDQsIDB4MzVlMCwgMHhiYTQ0LCAweGJiMzgsCi0JMHgwODA0LCAweDM1YWIsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4NGJiYywgMHgyMTEwLCAweDA5MDQsCi0JMHgzNWUwLCAweGI4MDQsIDB4OTA4YywgMHgwMGZmLCAweDkxOGUsIDB4MDAwNiwgMHgwMTQwLCAweDkwODQsCi0JMHhmZjAwLCAweDkwODYsIDB4MDYwMCwgMHgyMDA5LCAweDAwMDksIDB4MTkwNCwgMHgzNWRkLCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MjAxOSwgMHgwMDA1LCAweDAwYzYsIDB4OTA2NiwgMHgwODBjLCAweGFhOWEsCi0JMHgwODBjLCAweDk0ZTAsIDB4MDA3NiwgMHg5MDNlLCAweDA4MGMsIDB4OTNiMywgMHg5MDBlLCAweDA4MGMsCi0JMHhlNjkwLCAweDAwN2UsIDB4MDBjZSwgMHhiODA3LCAweDA0MDcsIDB4MDEyZSwgMHgwODA0LCAweDM1YWIsCi0JMHg2MTRjLCAweDYyNTAsIDB4Nzg4NCwgMHg2MDRlLCAweDdiODgsIDB4NjM1MiwgMHgyMDY5LCAweDE4NDcsCi0JMHg4MzFmLCAweDkzMDUsIDB4NjgxNiwgMHg3ODhjLCAweDIwNjksIDB4MTk4NywgMHgyZDFjLCAweDIwNmEsCi0JMHg3ZTk4LCAweDk2ODIsIDB4MDAxNCwgMHgxMjEwLCAweDIwMzEsIDB4MDdkMCwgMHgyMDY5LCAweDE5ODgsCi0JMHgyZDA0LCAweDI2NmEsIDB4Nzg5YSwgMHgwODA0LCAweDM1YWIsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg2MTM4LCAweDc4ODQsIDB4NjAzYSwgMHg5MTBlLCAweGQxYjQsIDB4MTkwYywgMHgwZWJlLCAweGQwOTQsCi0JMHgwMTQ4LCAweDAwZTYsIDB4MjA3MSwgMHgxOWZjLCAweDc5YjQsIDB4OTE5MiwgMHgwN2QwLCAweDEyMDgsCi0JMHg3MTNlLCAweDAwZWUsIDB4ZDBjNCwgMHgwMWE4LCAweDAwZDYsIDB4NzhhOCwgMHgyMDA5LCAweDE5OWUsCi0JMHgyMDBhLCAweDc4YWMsIDB4MjAxMSwgMHgxOTlmLCAweDIwMTIsIDB4MjA2OSwgMHgwMTAwLCAweDY4MzgsCi0JMHg5MDg2LCAweDAwMDcsIDB4MTExOCwgMHgyMjE0LCAweDZhNWEsIDB4MDAxMCwgMHgyMTBjLCAweDY5NWEsCi0JMHgwMGRlLCAweDIwMTEsIDB4MDExNCwgMHgyMjBjLCAweDc4ODgsIDB4ZDA4YywgMHgwMTE4LCAweDkxOGQsCi0JMHgwMDgwLCAweDAwMTAsIDB4OTE4YywgMHhmZjdmLCAweDIxMTIsIDB4NjAzYywgMHg3OTg4LCAweDYxM2UsCi0JMHg2MTQwLCAweDkxMGQsIDB4Nzg4YywgMHg2MDQyLCAweDdhODgsIDB4OTI5NCwgMHgxMDAwLCAweDkyMDUsCi0JMHg5MTBlLCAweGQxZTQsIDB4MTkwYywgMHgwZWQ0LCAweDkwODQsIDB4MDAyMCwgMHgwMTMwLCAweDc4YjQsCi0JMHg2MDQ2LCAweDkwODQsIDB4MDAwMSwgMHgwOTBjLCAweDQyY2UsIDB4NjA0MCwgMHhkMGNjLCAweDAxMjAsCi0JMHg3OGIwLCAweDIwMTEsIDB4MDExNCwgMHgyMDEyLCAweDAxMmUsIDB4MDgwNCwgMHgzNWFiLCAweDAwZjYsCi0JMHgyMDc5LCAweDE4MDAsIDB4N2EzOCwgMHhhODk4LCAweDkwODQsIDB4ZmViZiwgMHg5MjE1LCAweGE4OWMsCi0JMHg5MDg0LCAweGZlYmYsIDB4ODAwMiwgMHg5MjE0LCAweDc4MzgsIDB4OTA4NCwgMHgwMTQwLCAweDkyMTUsCi0JMHg3YTNhLCAweGE4OTcsIDB4NDAwMCwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsCi0JMHgwMGZlLCAweDAwMDUsIDB4Nzg5OCwgMHg5MDA1LCAweDAxYTgsIDB4Nzg4OCwgMHg5MDI1LCAweDA5MDQsCi0JMHgzNWUwLCAweDc4OGMsIDB4OTAyZCwgMHgwOTA0LCAweDM1ZTAsIDB4OTAwZSwgMHgwODBjLCAweDY3MWQsCi0JMHgxMTIwLCAweGJhNDQsIDB4YmIzOCwgMHhiYzQ2LCAweGJkM2EsIDB4OTE4NiwgMHgwN2ZmLCAweDAxOTAsCi0JMHg4MTA4LCAweDBjYTAsIDB4MDgwYywgMHg0YmJjLCAweDA5MDQsIDB4MzVlMCwgMHg3ODg4LCAweDkwMGQsCi0JMHgwOTA0LCAweDM1ZTAsIDB4Nzg4YywgMHg5MDA1LCAweDA5MDQsIDB4MzVlMCwgMHhiYTQ0LCAweGI5NDYsCi0JMHhiYjM4LCAweGI4M2EsIDB4MDgwNCwgMHgzNWFiLCAweDIwMTEsIDB4YmMwOSwgMHgwMDEwLCAweDIwMTEsCi0JMHhiYzA1LCAweDA4MGMsIDB4NTdlNywgMHgxOTA0LCAweDM1ZGQsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsCi0JMHg3OTg0LCAweDkxODYsIDB4MDBmZiwgMHgxMTMwLCAweDIwMDEsIDB4MTgxOCwgMHgyMDA0LCAweDkwODUsCi0JMHhmZjAwLCAweDAwODgsIDB4OTE4MiwgMHgwMDdmLCAweDE2ZTAsIDB4OTE4OCwgMHgzM2FjLCAweDIxMGQsCi0JMHg5MThjLCAweDAwZmYsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsIDB4MDAyNiwgMHg5MTE2LCAweDAwMmUsCi0JMHgwNTgwLCAweDgxMGYsIDB4OTEwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDA2LCAweDA4MGMsCi0JMHhiMGFiLCAweDAwMGUsIDB4MDUxMCwgMHg2MDJlLCAweDYyMGEsIDB4Nzk4NCwgMHgwMGI2LCAweDA4MGMsCi0JMHg2NmI4LCAweDJiMDgsIDB4MDBiZSwgMHgxNTAwLCAweDYxMTIsIDB4NjAyMywgMHgwMDAxLCAweDA4MGMsCi0JMHg0Yjg5LCAweDAxZDAsIDB4OTAwNiwgMHhhODY2LCAweDcwMDcsIDB4MDAwMywgMHhhODMyLCAweGE4NjgsCi0JMHhjMGZkLCAweGE4NmEsIDB4NzAxZiwgMHgzYWE3LCAweDI5MDAsIDB4NjAxNiwgMHgyMDA5LCAweDAwMzIsCi0JMHgwODBjLCAweGIxODAsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4MDEyZSwgMHgwMGNlLCAweDA4MDQsCi0JMHgzNWRkLCAweDAwY2UsIDB4MDgwNCwgMHgzNWUwLCAweDA4MGMsIDB4YjEwMSwgMHgwY2IwLCAweGE4MzAsCi0JMHg5MDg2LCAweDAxMDAsIDB4MDkwNCwgMHgzNWRkLCAweDA4MDQsIDB4MzVhYiwgMHgyMDYxLCAweDFhNzUsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDAwLCAweGQwODQsIDB4MDE3MCwgMHg2MTA0LCAweDYyMDgsCi0JMHgyMDYxLCAweDE4MDAsIDB4NjM1NCwgMHg2MDc0LCAweDc4OWEsIDB4NjBjMCwgMHg3ODllLCAweDYwYmMsCi0JMHg3OGFhLCAweDAxMmUsIDB4MDgwNCwgMHgzNWFiLCAweDkwMGUsIDB4MjExMCwgMHgwYzg4LCAweDgxZmYsCi0JMHgxOTA0LCAweDM1ZGQsIDB4MDgwYywgMHg3NTY5LCAweDA5MDQsIDB4MzVkZCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDYyNTQsIDB4NjA3NCwgMHg5MjAyLCAweDAyNDgsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHgyOGZkLCAweDA4MGMsIDB4NWEwYSwgMHgwMTJlLCAweDA4MDQsIDB4MzVhYiwgMHgwMTJlLCAweDA4MDQsCi0JMHgzNWUwLCAweDAwMDYsIDB4MDAxNiwgMHgwMGM2LCAweDAwZTYsIDB4MjAwMSwgMHgxOWFiLCAweDIwNzAsCi0JMHgyMDYxLCAweDE4NDcsIDB4NjAwOCwgMHgyMDcyLCAweDkwMGUsIDB4MjAxMSwgMHgxNDAwLCAweDA4MGMsCi0JMHg5MWIxLCAweDcyMDYsIDB4MDBlZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4ODFmZiwgMHgwMTI4LCAweDAxMmUsIDB4MjAyMSwgMHg0MDBiLCAweDA4MDQsCi0JMHgzNWFkLCAweDc4ODQsIDB4ZDBmYywgMHgwMTU4LCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwMDUsCi0JMHgwMTgwLCAweDkwODIsIDB4MDBlMSwgMHgwMjk4LCAweDAxMmUsIDB4MDgwNCwgMHgzNWUwLCAweDIwMDEsCi0JMHgwMDJhLCAweDIwMDQsIDB4OTAwNSwgMHgwMTI4LCAweDIwNjksIDB4MTg0NywgMHg2OTA4LCAweDkxMDIsCi0JMHgxMjMwLCAweDAxMmUsIDB4MDgwNCwgMHgzNWUwLCAweDAxMmUsIDB4MDgwNCwgMHgzNWRkLCAweDA4MGMsCi0JMHhiMDZiLCAweDBkZDAsIDB4Nzg4NCwgMHhkMGZjLCAweDA5MDQsIDB4M2I3NiwgMHgwMGM2LCAweDA4MGMsCi0JMHg0Yjg5LCAweDAwY2UsIDB4MGQ4OCwgMHhhODY3LCAweDAwMDAsIDB4Nzg4NCwgMHhhODBhLCAweDc4OTgsCi0JMHhhODBlLCAweDc4OWMsIDB4YTgxMiwgMHgyMDAxLCAweDAwMmUsIDB4MjAwNCwgMHhhODFhLCAweDIwMDEsCi0JMHgwMDJmLCAweDIwMDQsIDB4YTgxZSwgMHgyMDAxLCAweDAwMzAsIDB4MjAwNCwgMHhhODIyLCAweDIwMDEsCi0JMHgwMDMxLCAweDIwMDQsIDB4YTgyNiwgMHgyMDAxLCAweDAwMzQsIDB4MjAwNCwgMHhhODJhLCAweDIwMDEsCi0JMHgwMDM1LCAweDIwMDQsIDB4YTgyZSwgMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDgwLCAweDAwMDMsCi0JMHg5MDg0LCAweDAwZmMsIDB4ODAwNCwgMHhhODE2LCAweDA4MGMsIDB4M2NmYywgMHgwOTI4LCAweDcwMTQsCi0JMHgyMDQ4LCAweGFkMmMsIDB4YWMyOCwgMHhhYjFjLCAweGFhMTgsIDB4YTkzMCwgMHhhODA4LCAweGQwYjQsCi0JMHgxMTIwLCAweDIwMjksIDB4MDAwMCwgMHgyMDIxLCAweDAwMDAsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsCi0JMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgwODBjLCAweDRiZDIsCi0JMHg3MDFmLCAweDNjMzksIDB4NzAyMywgMHgwMDAxLCAweDAxMmUsIDB4MDAwNSwgMHgwMDQ2LCAweDAwODYsCi0JMHgwMDk2LCAweDAwYTYsIDB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDA4MGMsCi0JMHgzYWUxLCAweDIwMDEsIDB4MTlhMSwgMHgyMDAzLCAweDAwMDAsIDB4MjAyMSwgMHgwMDBhLCAweDIwNjEsCi0JMHgwMTAwLCAweDYxMDQsIDB4MDAxNiwgMHg2MGJiLCAweDAwMDAsIDB4NjBiZiwgMHgzMmUxLCAweDYwYmYsCi0JMHgwMDEyLCAweDA4MGMsIDB4M2Q2YiwgMHgwODBjLCAweDNkMmEsIDB4MDBmNiwgMHgwMGU2LCAweDAwODYsCi0JMHgyOTQwLCAweDIwNzEsIDB4MWE2YSwgMHgyMDc5LCAweDAwOTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsCi0JMHg2ODg0LCAweGQwYjQsIDB4MDE0MCwgMHgyMDAxLCAweDAwMzUsIDB4MjAwNCwgMHg3ODBlLCAweDIwMDEsCi0JMHgwMDM0LCAweDIwMDQsIDB4NzgwYSwgMHgwMGRlLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDQxMTIsCi0JMHgwMDhlLCAweDAwZWUsIDB4MDBmZSwgMHgwODBjLCAweDQwMzQsIDB4MDgwYywgMHgzZjM5LCAweDA1YjgsCi0JMHgyMDAxLCAweDAyMGIsIDB4MjAwNCwgMHg5MDg0LCAweDAxNDAsIDB4MWRiOCwgMHgwODBjLCAweDQxODYsCi0JMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHg3OGJjLCAweDAwZmUsIDB4OTA4YywgMHgwMDcwLCAweDE1NjAsCi0JMHgyMDcxLCAweDAyMDAsIDB4NzAzNywgMHgwMDAwLCAweDcwNTAsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsCi0JMHgzMjAwLCAweDE1MTAsIDB4NzAzNywgMHgwMDAxLCAweDcwNTAsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsCi0JMHhlMTAwLCAweDExZDAsIDB4NzAzNywgMHgwMDAwLCAweDcwNTQsIDB4NzAzNywgMHgwMDAwLCAweDcxNWMsCi0JMHg5MTA2LCAweDExOTAsIDB4MjAwMSwgMHgxODIwLCAweDIwMDQsIDB4OTEwNiwgMHgxMTY4LCAweDAwYzYsCi0JMHgyMDYxLCAweDAxMDAsIDB4NjAyNCwgMHg5MDg0LCAweDFlMDAsIDB4MDBjZSwgMHgwMTM4LCAweDA4MGMsCi0JMHgzZjQzLCAweDA4MGMsIDB4M2QyNSwgMHgwMDU4LCAweDA4MGMsIDB4M2QyNSwgMHgwODBjLCAweDQwYWEsCi0JMHgwODBjLCAweDQwMmEsIDB4MjAwMSwgMHgwMjBiLCAweDIwMDQsIDB4ZDBlNCwgMHgwZGQ4LCAweDIwMDEsCi0JMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHgyMDYxLCAweDAxMDAsIDB4NjAyNywgMHgwMDAyLCAweDAwMWUsCi0JMHg2MTA2LCAweDIwMTEsIDB4MDIwZCwgMHgyMDEzLCAweDAwMjAsIDB4NjBiYiwgMHgwMDAwLCAweDYwYmYsCi0JMHgwMTA4LCAweDYwYmYsIDB4MDAxMiwgMHgyMDAxLCAweDAwMDQsIDB4MjAwYywgMHg5MThjLCAweGZmZmQsCi0JMHgyMTAyLCAweDA4MGMsIDB4MTJmYywgMHgyMDA5LCAweDAwMjgsIDB4MDgwYywgMHgyNDMyLCAweDIwMDEsCi0JMHgwMjI3LCAweDIwMGMsIDB4MjEwMiwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMGFlLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDRlLCAweDIwMDEsIDB4MTlhMSwgMHgyMDA0LCAweDkwMDUsCi0JMHgxMTE4LCAweDAxMmUsIDB4MDgwNCwgMHgzNWFiLCAweDAxMmUsIDB4MjAyMSwgMHg0MDBjLCAweDA4MDQsCi0JMHgzNWFkLCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgwMDc2LCAweDAwODYsCi0JMHgwMDk2LCAweDAwZDYsIDB4MDE1NiwgMHg3MDE0LCAweDIwNDgsIDB4NzAyMCwgMHgyMGE4LCAweDgwMDAsCi0JMHg3MDIyLCAweGE4MDQsIDB4OTAwNSwgMHgwOTA0LCAweDNjOTUsIDB4MjA0OCwgMHgxZjA0LCAweDNjNDksCi0JMHg3MDY4LCAweDIwNDAsIDB4YTI4YywgMHhhMzkwLCAweGE0OTQsIDB4YTU5OCwgMHhhOTMwLCAweGE4MDgsCi0JMHhkMGI0LCAweDExMjAsIDB4MjAyOSwgMHgwMDAwLCAweDIwMjEsIDB4MDAwMCwgMHgwMDk2LCAweDcwMTQsCi0JMHgyMDQ4LCAweGE4NjQsIDB4MDA5ZSwgMHg5MDg2LCAweDAxMDMsIDB4MDE3MCwgMHg4OTA2LCAweDgwMDYsCi0JMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDFiLCAweDA4MGMsCi0JMHg0YmQyLCAweDcwMWYsIDB4M2MzOSwgMHgwMGIwLCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsCi0JMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMWIsIDB4MjFhOCwgMHgyN2UwLCAweDIwOTgsCi0JMHgyN2U4LCAweDIwYTAsIDB4MDAwNiwgMHgwODBjLCAweDBmOGIsIDB4MDAwZSwgMHgwODBjLCAweDRiZDUsCi0JMHg3MDFmLCAweDNjMzksIDB4MDE1ZSwgMHgwMGRlLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDdlLCAweDAwNWUsCi0JMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4NzAxNCwgMHgyMDQ4LCAweGE4NjQsCi0JMHg5MDg2LCAweDAxMDMsIDB4MTExOCwgMHg3MDFmLCAweDNjZmEsIDB4MDQ1MCwgMHg3MDE0LCAweDIwNDgsCi0JMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHgyMDA5LCAweDAwN2YsIDB4MDgwYywgMHg2NmIyLCAweDAxMTAsCi0JMHg5MDA2LCAweDAwMzAsIDB4YjgxMywgMHgwMGZmLCAweGI4MTcsIDB4ZmZmZCwgMHgwODBjLCAweGQzMjUsCi0JMHgwMTVlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDhlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDkwNCwgMHgzNWRkLCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsCi0JMHgwMDU2LCAweDAwNzYsIDB4MDA4NiwgMHgwMDk2LCAweDAwZDYsIDB4MDE1NiwgMHg3MDFmLCAweDNjY2MsCi0JMHg3MDA3LCAweDAwMDMsIDB4MDgwNCwgMHgzYzhhLCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLCAweDIwMjEsCi0JMHg0MDBjLCAweDA5MDQsIDB4MzVhZCwgMHgwMDc2LCAweGFkMTAsIDB4YWMwYywgMHhhYjI0LCAweGFhMjAsCi0JMHhhOTMwLCAweGE4MDgsIDB4ZDBiNCwgMHgxMTIwLCAweDIwMjksIDB4MDAwMCwgMHgyMDIxLCAweDAwMDAsCi0JMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsCi0JMHgwMDFiLCAweDIxYTgsIDB4MjdlMCwgMHgyMDk4LCAweDI3ZTgsIDB4MjBhMCwgMHgwMDA2LCAweDA4MGMsCi0JMHgwZjhiLCAweDAwMGUsIDB4MDgwYywgMHg0YmQ1LCAweDAwN2UsIDB4NzAxZiwgMHgzYzM5LCAweDcwMjMsCi0JMHgwMDAxLCAweDAwMDUsIDB4MDgwNCwgMHgzNWFiLCAweDAxNTYsIDB4MDBjNiwgMHhhODE0LCAweDkwOGEsCi0JMHgwMDFlLCAweDAyMTgsIDB4YTgzMywgMHgwMDFlLCAweDAwMTAsIDB4YTgzMiwgMHgwMDc4LCAweDgxZmYsCi0JMHgwMTY4LCAweDAwMTYsIDB4MDgwYywgMHg0Yjg5LCAweDAwMWUsIDB4MDEzMCwgMHhhODAwLCAweDIwNDAsCi0JMHhhMDA4LCAweGE4MGEsIDB4MjEwMCwgMHgwYzU4LCAweDkwMDYsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMGNlLCAweDAxNWUsIDB4MDAwNSwgMHgwMDA2LCAweDAwZjYsIDB4MjA3OSwgMHgwMDAwLCAweDc4ODAsCi0JMHg5MDg2LCAweDAwNDQsIDB4MDBmZSwgMHgwMDBlLCAweDAwMDUsIDB4MjAwMSwgMHgxOWExLCAweDIwMDMsCi0JMHgwMDAxLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwYzYsIDB4MjA2MSwgMHgwMjAwLCAweDIwMDEsCi0JMHgxOWFjLCAweDIwMDQsIDB4NjAxYSwgMHgyMDYxLCAweDAxMDAsIDB4MjAwMSwgMHgxOWFiLCAweDIwMDQsCi0JMHg2MGNlLCAweDYxMDQsIDB4YzFhYywgMHg2MTA2LCAweDA4MGMsIDB4NGI4OSwgMHhhODEzLCAweDAwMTksCi0JMHhhODE3LCAweDAwMDEsIDB4MjkwMCwgMHhhODVhLCAweDIwMDEsIDB4MDAyZSwgMHgyMDA0LCAweGE4NjYsCi0JMHgyMDAxLCAweDAwMmYsIDB4MjAwNCwgMHhhODZhLCAweDIwNjEsIDB4MDA5MCwgMHgyMDc5LCAweDAxMDAsCi0JMHgyMDAxLCAweDE5YWIsIDB4MjAwNCwgMHg2MDM2LCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDI0MzIsCi0JMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LCAweGZmZjgsIDB4YTg2ZSwgMHg2MDFhLCAweGE4NzMsCi0JMHgwMDAwLCAweDYwMWYsIDB4MDAwMCwgMHg3OGNhLCAweDkwMDYsIDB4NjAwYSwgMHg2MDBlLCAweDAwY2UsCi0JMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGU2LCAweDA4MGMsIDB4NGI4OSwgMHgyOTQwLCAweGEwMTMsCi0JMHgwMDE5LCAweGEwMTcsIDB4MDAwMSwgMHgyODAwLCAweGEwNWEsIDB4MjAwMSwgMHgwMDMwLCAweDIwMDQsCi0JMHhhODY2LCAweDIwMDEsIDB4MDAzMSwgMHgyMDA0LCAweGE4NmEsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsCi0JMHg5MDg0LCAweGZmZjgsIDB4YTg2ZSwgMHhhODczLCAweDAwMDAsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsCi0JMHgwMDA0LCAweDIwMDEsIDB4MDMwMCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsCi0JMHgwMDAwLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLCAweDkxOGQsIDB4MDAwMiwgMHgyMTAyLCAweDAwZWUsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDgxZmYsIDB4MDE0OCwgMHgwODBjLCAweDJjNzIsCi0JMHgxMTMwLCAweDkwMDYsIDB4MDgwYywgMHgyYmNhLCAweDkwMDYsIDB4MDgwYywgMHgyYmFkLCAweDIwMDEsCi0JMHgxOWEwLCAweDIwMDMsIDB4MDAwMCwgMHg3ODg0LCAweDkwODQsIDB4MDAwNywgMHgwMDAyLCAweDNkYmEsCi0JMHgzZGMzLCAweDNkY2MsIDB4M2RiNywgMHgzZGI3LCAweDNkYjcsIDB4M2RiNywgMHgzZGI3LCAweDAxMmUsCi0JMHgwODA0LCAweDM1ZTAsIDB4MjAwOSwgMHgwMTE0LCAweDIxMDQsIDB4OTA4NSwgMHgwODAwLCAweDIwMGEsCi0JMHgwODBjLCAweDNmOGQsIDB4MDBjMCwgMHgyMDA5LCAweDAxMTQsIDB4MjEwNCwgMHg5MDg1LCAweDQwMDAsCi0JMHgyMDBhLCAweDA4MGMsIDB4M2Y4ZCwgMHgwMDc4LCAweDA4MGMsIDB4NzU2OSwgMHgxMTI4LCAweDAxMmUsCi0JMHgyMDA5LCAweDAwMTYsIDB4MDgwNCwgMHgzNWRkLCAweDgxZmYsIDB4MDEyOCwgMHgwMTJlLCAweDIwMjEsCi0JMHg0MDBiLCAweDA4MDQsIDB4MzVhZCwgMHgyMDAxLCAweDAxNDEsIDB4MjAwNCwgMHhkMGRjLCAweDBkYjAsCi0JMHgwMDg2LCAweDAwOTYsIDB4MDBhNiwgMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsCi0JMHgwODBjLCAweDNhZTEsIDB4MjAwOSwgMHgwMTAxLCAweDIxMGMsIDB4MDAxNiwgMHg3ZWM4LCAweDdkY2MsCi0JMHg5MDA2LCAweDIwNjgsIDB4MjA2MCwgMHgyMDU4LCAweDA4MGMsIDB4NDI2MSwgMHgwODBjLCAweDQxYjEsCi0JMHg5MDNlLCAweDI3MjAsIDB4MDBmNiwgMHgwMGU2LCAweDAwODYsIDB4Mjk0MCwgMHgyMDcxLCAweDFhNmEsCi0JMHgyMDc5LCAweDAwOTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsIDB4Njg4NCwgMHhkMGI0LCAweDAxMjAsCi0JMHg2OGQ0LCAweDc4MGUsIDB4NjhkMCwgMHg3ODBhLCAweDAwZGUsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsCi0JMHg0MTEyLCAweDA4MGMsIDB4MmM3YSwgMHgwODBjLCAweDJjN2EsIDB4MDgwYywgMHgyYzdhLCAweDA4MGMsCi0JMHgyYzdhLCAweDA4MGMsIDB4NDExMiwgMHgwMDhlLCAweDAwZWUsIDB4MDBmZSwgMHgwODBjLCAweDQwMzQsCi0JMHgyMDA5LCAweDljNDAsIDB4ODEwOSwgMHgxMWIwLCAweDA4MGMsIDB4M2Y0MywgMHgyMDAxLCAweDAwMDQsCi0JMHgyMDBjLCAweDkxOGMsIDB4ZmZmZCwgMHgyMTAyLCAweDAwMWUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsCi0JMHgwMGNlLCAweDAwYmUsIDB4MDBhZSwgMHgwMDllLCAweDAwOGUsIDB4MjAwOSwgMHgwMDE3LCAweDA4MGMsCi0JMHgzNWRkLCAweDBjZjgsIDB4MjAwMSwgMHgwMjBiLCAweDIwMDQsIDB4OTA4NCwgMHgwMTQwLCAweDFkMTAsCi0JMHgwMGY2LCAweDIwNzksIDB4MDAwMCwgMHg3ODg0LCAweDAwZmUsIDB4ZDBiYywgMHgwMTc4LCAweDIwMDEsCi0JMHgwMjAxLCAweDIwMGMsIDB4ODFmZiwgMHgwMTUwLCAweDA4MGMsIDB4NDAxMiwgMHgyZDAwLCAweDljMDUsCi0JMHg5YjA1LCAweDAxMjAsIDB4MDgwYywgMHgzZjQzLCAweDA4MDQsIDB4M2VmMCwgMHgwODBjLCAweDQxODYsCi0JMHgwODBjLCAweDQwYWEsIDB4MDgwYywgMHgzZmY1LCAweDA4MGMsIDB4NDAyYSwgMHgwMGY2LCAweDIwNzksCi0JMHgwMTAwLCAweDc4MjQsIDB4ZDBhYywgMHgwMTMwLCAweDhiNTgsIDB4MDgwYywgMHgzZjQzLCAweDAwZmUsCi0JMHgwODA0LCAweDNlZjAsIDB4MDBmZSwgMHgwODBjLCAweDNmMzksIDB4MTE1MCwgMHg4ZDY4LCAweDIwMDEsCi0JMHgwMDMyLCAweDI2MDIsIDB4MjAwMSwgMHgwMDMzLCAweDI1MDIsIDB4MDgwYywgMHgzZjQzLCAweDAwODAsCi0JMHg4N2ZmLCAweDAxMzgsIDB4MjAwMSwgMHgwMjAxLCAweDIwMDQsIDB4OTAwNSwgMHgxOTA4LCAweDg3MzksCi0JMHgwMDM4LCAweDIwMDEsIDB4MWE2NiwgMHgyMDA0LCAweDkwODYsIDB4MDAwMCwgMHgxOTA0LCAweDNlNDAsCi0JMHgyMDAxLCAweDAzMmYsIDB4MjAwMywgMHgwMGY2LCAweDg2MzEsIDB4MTIwOCwgMHg4NTI5LCAweDI1MDAsCi0JMHg5NjA1LCAweDA5MDQsIDB4M2VmMCwgMHg3ODg0LCAweGQwYmMsIDB4MDEyOCwgMHgyZDAwLCAweDljMDUsCi0JMHg5YjA1LCAweDE5MDQsIDB4M2VmMCwgMHhhMDEzLCAweDAwMTksIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsCi0JMHgwMDA0LCAweDc4ODQsIDB4ZDBhYywgMHgxMTQ4LCAweDIwMDEsIDB4MWE2NiwgMHgyMDAzLCAweDAwMDMsCi0JMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA5LCAweDAwMzAsIDB4YTAxNywgMHgwMDAxLCAweDc4YjQsCi0JMHg5MDA1LCAweDAxMDgsIDB4YTAxNiwgMHgyODAwLCAweGEwNWEsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsCi0JMHgyNDMyLCAweDI5MDAsIDB4YTg1YSwgMHhhODEzLCAweDAwMTksIDB4Nzg4NCwgMHhkMGE0LCAweDExODAsCi0JMHhhODE3LCAweDAwMDAsIDB4MDBjNiwgMHgyMGE5LCAweDAwMDQsIDB4MjA2MSwgMHgwMDkwLCAweDYwMmIsCi0JMHgwMDA4LCAweDIwMDEsIDB4MDIwMywgMHgyMDA0LCAweDFmMDQsIDB4M2VjNywgMHgwMGNlLCAweDAwMzAsCi0JMHhhODE3LCAweDAwMDEsIDB4NzhiMCwgMHg5MDA1LCAweDAxMDgsIDB4YTgxNiwgMHgwMGY2LCAweDAwYzYsCi0JMHgyMDc5LCAweDAxMDAsIDB4MjA2MSwgMHgwMDkwLCAweDc4MjcsIDB4MDAwMiwgMHgyMDAxLCAweDAwMmEsCi0JMHgyMDA0LCAweDkwODQsIDB4ZmZmOCwgMHg2MDFhLCAweDAwMDYsIDB4MjAwMSwgMHgwMDJiLCAweDIwMDQsCi0JMHg2MDFlLCAweDc4YzYsIDB4MDAwZSwgMHg3OGNhLCAweDAwY2UsIDB4MDBmZSwgMHgwODA0LCAweDNkZmEsCi0JMHgwMDFlLCAweDAwYzYsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHgyMDYxLCAweDAxMDAsCi0JMHg2MDI3LCAweDAwMDIsIDB4NjEwNiwgMHgyMDExLCAweDAyMGQsIDB4MjAxMywgMHgwMDIwLCAweDIwMDEsCi0JMHgwMDA0LCAweDIwMGMsIDB4OTE4YywgMHhmZmZkLCAweDIxMDIsIDB4MDgwYywgMHgxMmZjLCAweDc4ODQsCi0JMHg5MDg0LCAweDAwMDMsIDB4OTA4NiwgMHgwMDAyLCAweDAxYTAsIDB4MjAwOSwgMHgwMDI4LCAweDA4MGMsCi0JMHgyNDMyLCAweDIwMDEsIDB4MDIyNywgMHgyMDBjLCAweDIxMDIsIDB4NjA1MCwgMHg5MDg0LCAweGI3ZWYsCi0JMHg2MDUyLCAweDYwMmYsIDB4MDAwMCwgMHg2MDRiLCAweGY3ZjcsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsCi0JMHgwMDEwLCAweDAwY2UsIDB4MmQwOCwgMHgyYzEwLCAweDJiMTgsIDB4MmIwMCwgMHg5YzA1LCAweDlkMDUsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsIDB4MDBhZSwgMHgwMDllLCAweDAwOGUsCi0JMHgxMTE4LCAweDAxMmUsIDB4MDgwNCwgMHgzNWFiLCAweDAxMmUsIDB4MjAyMSwgMHg0MDBjLCAweDA4MDQsCi0JMHgzNWFkLCAweDkwODUsIDB4MDAwMSwgMHgxZDA0LCAweDNmNDIsIDB4MjA5MSwgMHg2MDAwLCAweDg0MjAsCi0JMHg5NDg2LCAweDAwNjQsIDB4MDAwNSwgMHgyMDAxLCAweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDIwMDEsCi0JMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHgyMDAxLCAweDFhNjYsIDB4MjAwMywgMHgwMDAwLCAweDAwNzEsCi0JMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHgyNDMyLCAweDIwMDEsIDB4MDIyNywgMHgyMDI0LCAweDI0MDIsCi0JMHgyMDAxLCAweDAxMDksIDB4MjAwMywgMHg0MDAwLCAweDkwMjYsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsCi0JMHgyMDcxLCAweDFhNmEsIDB4NzAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDUyMCwgMHgyMDc5LCAweDAwOTAsCisJMHhhOTg4LCAweDA4MDQsIDB4MWM2YiwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMWUsCisJMHgxOWQwLCAweGE4N2MsIDB4ZDBiNCwgMHgwOTA0LCAweDFlYTUsIDB4YTg5MCwgMHhhODQyLCAweGE4M2EsCisJMHhhODhjLCAweGE4M2UsIDB4YTgzNiwgMHhhOGFjLCAweGE4NDYsIDB4YThiMCwgMHhhODRhLCAweGE4MDQsCisJMHhhODVhLCAweDIwNDAsIDB4YTA2NCwgMHg5MDg0LCAweDAwMGYsIDB4OTA4MCwgMHgyMGM3LCAweDIwMDUsCisJMHhhODEyLCAweGE5ODgsIDB4MDQ0OCwgMHg5MThjLCAweDAwZmYsIDB4OTE4NiwgMHgwMDE1LCAweDE1NDAsCisJMHhhODdjLCAweGQwYjQsIDB4MDkwNCwgMHgxZWE1LCAweGE4MDQsIDB4YTg1YSwgMHgyMDQwLCAweGEwNjQsCisJMHg5MDg0LCAweDAwMGYsIDB4OTA4MCwgMHgyMGM3LCAweDIwMDUsIDB4YTgxMiwgMHhhOTg4LCAweDkwMDYsCisJMHhhODQyLCAweGE4M2UsIDB4MDA4OCwgMHhhODdjLCAweGQwYjQsIDB4MDkwNCwgMHgxZWE1LCAweGE5ODgsCisJMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHgyOTAwLCAweGE4NWEsIDB4YTg2NCwgMHg5MDg0LCAweDAwMGYsCisJMHg5MDgwLCAweDIwYzcsIDB4MjAwNSwgMHhhODEyLCAweGE5MTYsIDB4YTg3YywgMHhjMGRkLCAweGE4N2UsCisJMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMDkwLCAweDc4MmMsIDB4ZDBmYywgMHgxOTBjLCAweDFlZWIsCisJMHgwMGU2LCAweDIwNzEsIDB4MWE2OSwgMHg3MDAwLCAweDkwMDUsIDB4MTkwNCwgMHgxY2RmLCAweDcyMDYsCisJMHg5MjgwLCAweDAwMDUsIDB4MjA0YywgMHg5MjgwLCAweDAwMDQsIDB4MjAwNCwgMHg3ODJiLCAweDAwMDQsCisJMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHg3ODAzLCAweDAwNDAsIDB4MDBmZSwgMHgwMGI2LCAweDIwNTgsCisJMHhiODZjLCAweDc4MzYsIDB4Yjg5MCwgMHgwMGJlLCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLCAweDc4MDMsCisJMHgwMDQwLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweDc4MWEsCisJMHg3OGQ3LCAweDAwMDAsIDB4MDBmZSwgMHhhODE0LCAweDIwNTAsIDB4YTg1OCwgMHgyMDQwLCAweGE4MTAsCisJMHgyMDYwLCAweGEwNjQsIDB4OTBlYywgMHgwMDBmLCAweGE5NDQsIDB4NzkxYSwgMHg3MTE2LCAweGE4NDgsCisJMHg3ODFlLCAweDcwMWEsIDB4OTAwNiwgMHg3MDBlLCAweDcwMTIsIDB4NzAwNCwgMHhhOTQwLCAweGE4MzgsCisJMHg5MTA2LCAweDE1MDAsIDB4YTkzYywgMHhhODM0LCAweDkxMDYsIDB4MTFlMCwgMHgwMDA2LCAweDAwMTYsCisJMHhhOTM4LCAweGE4MzQsIDB4OTEwNSwgMHgwMTE4LCAweDAwMWUsIDB4MDAwZSwgMHgwMDk4LCAweDAwMWUsCisJMHgwMDBlLCAweDhhZmYsIDB4MDFjOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweDAzMDYsCisJMHgyMDBiLCAweDA4MDgsIDB4MDBkOSwgMHgwMTA4LCAweDAwYzksIDB4MDEyZSwgMHg5MDA2LCAweDAwZWUsCisJMHgwMGZlLCAweDAwMDUsIDB4MDAzNiwgMHgwMDQ2LCAweGFiMzgsIDB4YWMzNCwgMHgwODBjLCAweDIwZTcsCisJMHgwMDRlLCAweDAwM2UsIDB4MGQzMCwgMHgwYzk4LCAweDkwODUsIDB4MDAwMSwgMHgwYzgwLCAweDIwMDksCisJMHgwMzA2LCAweDIwMGIsIDB4NDgwMCwgMHg3MDI3LCAweDAwMDAsIDB4MDAwNSwgMHgwMDc2LCAweDAwNjYsCisJMHgwMDU2LCAweDAwNDYsIDB4MDAzNiwgMHgwMDI2LCAweDhhZmYsIDB4MDkwNCwgMHgxZTllLCAweDcwMGMsCisJMHg3MjE0LCAweDkyM2EsIDB4NzAxMCwgMHg3MjE4LCAweDkyMDMsIDB4MGEwNCwgMHgxZTlkLCAweDk3MDUsCisJMHgwOTA0LCAweDFlOWQsIDB4OTAzZSwgMHgyNzMwLCAweGE4ODAsIDB4ZDBmYywgMHgxMTkwLCAweDJkMDAsCisJMHgwMDAyLCAweDFlMjIsIDB4MWQ2MSwgMHgxZDYxLCAweDFlMjIsIDB4MWUyMiwgMHgxZGZmLCAweDFlMjIsCisJMHgxZDYxLCAweDFlMDYsIDB4MWRiMCwgMHgxZGIwLCAweDFlMjIsIDB4MWUyMiwgMHgxZTIyLCAweDFkZjksCisJMHgxZGIwLCAweGMwZmMsIDB4YTg4MiwgMHhhYjJjLCAweGFhMzAsIDB4YWQxYywgMHhhYzIwLCAweGRkOWMsCisJMHgwOTA0LCAweDFlMmYsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCisJMHgwMDFiLCAweDAwMDIsIDB4MWQ0ZCwgMHgxZDRiLCAweDFkNGIsIDB4MWQ0YiwgMHgxZDRiLCAweDFkNGIsCisJMHgxZDUxLCAweDFkNGIsIDB4MWQ0YiwgMHgxZDRiLCAweDFkNGIsIDB4MWQ0YiwgMHgxZDU1LCAweDFkNGIsCisJMHgxZDRiLCAweDFkNGIsIDB4MWQ0YiwgMHgxZDRiLCAweDFkNTksIDB4MWQ0YiwgMHgxZDRiLCAweDFkNGIsCisJMHgxZDRiLCAweDFkNGIsIDB4MWQ1ZCwgMHgwODBjLCAweDBkYzUsIDB4YTc3NCwgMHhhNjc4LCAweDA4MDQsCisJMHgxZTJmLCAweGE3OGMsIDB4YTY5MCwgMHgwODA0LCAweDFlMmYsIDB4YTdhNCwgMHhhNmE4LCAweDA4MDQsCisJMHgxZTJmLCAweGE3YmMsIDB4YTZjMCwgMHgwODA0LCAweDFlMmYsIDB4YTdkNCwgMHhhNmQ4LCAweDA4MDQsCisJMHgxZTJmLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsIDB4MGRjNSwgMHg5MDgyLCAweDAwMWIsCisJMHgwMDAyLCAweDFkODQsIDB4MWQ4NCwgMHgxZDg2LCAweDFkODQsIDB4MWQ4NCwgMHgxZDg0LCAweDFkOGMsCisJMHgxZDg0LCAweDFkODQsIDB4MWQ4NCwgMHgxZDkyLCAweDFkODQsIDB4MWQ4NCwgMHgxZDg0LCAweDFkOTgsCisJMHgxZDg0LCAweDFkODQsIDB4MWQ4NCwgMHgxZDllLCAweDFkODQsIDB4MWQ4NCwgMHgxZDg0LCAweDFkYTQsCisJMHgxZDg0LCAweDFkODQsIDB4MWQ4NCwgMHgxZGFhLCAweDA4MGMsIDB4MGRjNSwgMHhhNTc0LCAweGE0NzgsCisJMHhhMzdjLCAweGEyODAsIDB4MDgwNCwgMHgxZTJmLCAweGE1ODQsIDB4YTQ4OCwgMHhhMzhjLCAweGEyOTAsCisJMHgwODA0LCAweDFlMmYsIDB4YTU5NCwgMHhhNDk4LCAweGEzOWMsIDB4YTJhMCwgMHgwODA0LCAweDFlMmYsCisJMHhhNWE0LCAweGE0YTgsIDB4YTNhYywgMHhhMmIwLCAweDA4MDQsIDB4MWUyZiwgMHhhNWI0LCAweGE0YjgsCisJMHhhM2JjLCAweGEyYzAsIDB4MDgwNCwgMHgxZTJmLCAweGE1YzQsIDB4YTRjOCwgMHhhM2NjLCAweGEyZDAsCisJMHgwODA0LCAweDFlMmYsIDB4YTVkNCwgMHhhNGQ4LCAweGEzZGMsIDB4YTJlMCwgMHgwODA0LCAweDFlMmYsCisJMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkYzUsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsCisJMHgxZGQzLCAweDFkZDEsIDB4MWRkMSwgMHgxZGQxLCAweDFkZDEsIDB4MWRkMSwgMHgxZGRiLCAweDFkZDEsCisJMHgxZGQxLCAweDFkZDEsIDB4MWRkMSwgMHgxZGQxLCAweDFkZTMsIDB4MWRkMSwgMHgxZGQxLCAweDFkZDEsCisJMHgxZGQxLCAweDFkZDEsIDB4MWRlYiwgMHgxZGQxLCAweDFkZDEsIDB4MWRkMSwgMHgxZGQxLCAweDFkZDEsCisJMHgxZGYyLCAweDA4MGMsIDB4MGRjNSwgMHhhNTZjLCAweGE0NzAsIDB4YTc3NCwgMHhhNjc4LCAweGEzN2MsCisJMHhhMjgwLCAweDA4MDQsIDB4MWUyZiwgMHhhNTg0LCAweGE0ODgsIDB4YTc4YywgMHhhNjkwLCAweGEzOTQsCisJMHhhMjk4LCAweDA4MDQsIDB4MWUyZiwgMHhhNTljLCAweGE0YTAsIDB4YTdhNCwgMHhhNmE4LCAweGEzYWMsCisJMHhhMmIwLCAweDA4MDQsIDB4MWUyZiwgMHhhNWI0LCAweGE0YjgsIDB4YTdiYywgMHhhNmMwLCAweGEzYzQsCisJMHhhMmM4LCAweDA0ZTgsIDB4YTVjYywgMHhhNGQwLCAweGE3ZDQsIDB4YTZkOCwgMHhhM2RjLCAweGEyZTAsCisJMHgwNGIwLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAxZSwgMHgxNTE4LCAweDA4MGMsCisJMHgyMDdmLCAweDE5MDQsIDB4MWNmYywgMHg5MDBlLCAweDA4MDQsIDB4MWU5ZSwgMHhhYjY0LCAweDkzOWMsCisJMHgwMGZmLCAweDkzODYsIDB4MDA0OCwgMHgxMTgwLCAweDAwYzYsIDB4NzAwNCwgMHgyMDYwLCAweDYwMDQsCisJMHg5MDg2LCAweDAwNDMsIDB4MDBjZSwgMHgwOTA0LCAweDFkYjAsIDB4YWI5YywgMHg5MDE2LCAweGFkOGMsCisJMHhhYzkwLCAweGFmOTQsIDB4YWU5OCwgMHgwMDk4LCAweDkzODYsIDB4MDAwOCwgMHgwOTA0LCAweDFkYjAsCisJMHgwODBjLCAweDBkYzUsIDB4YTk2NCwgMHg5MThjLCAweDAwZmYsIDB4OTE4NiwgMHgwMDEzLCAweDA5MDQsCisJMHgxZDYxLCAweDkxODYsIDB4MDAxYiwgMHgwOTA0LCAweDFkYjAsIDB4MDgwYywgMHgwZGM1LCAweDIwMDksCisJMHgwMzBmLCAweDIxMDQsIDB4ZDBmYywgMHgwNTM4LCAweDAwNjYsIDB4MjAwOSwgMHgwMzA2LCAweDIxMzQsCisJMHgyMDBiLCAweDQwMDAsIDB4MjEwNCwgMHg5MDg0LCAweDAwMzAsIDB4MTViOCwgMHgyMDMxLCAweDEwMDAsCisJMHgyNjAwLCAweDkzMDIsIDB4OTI4YiwgMHgwMDAwLCAweGE4MmUsIDB4YTkzMiwgMHgwMjc4LCAweDkxMDUsCisJMHgwMTY4LCAweDIwMTEsIDB4MDAwMCwgMHgyNjE4LCAweDI2MDAsIDB4OTUwMCwgMHhhODFlLCAweDk0ODEsCisJMHgwMDAwLCAweGE4MjIsIDB4YTg4MCwgMHhjMGZkLCAweGE4ODIsIDB4MDAyMCwgMHhhODJmLCAweDAwMDAsCisJMHhhODMzLCAweDAwMDAsIDB4MDA2ZSwgMHg3YjEyLCAweDdhMTYsIDB4N2QwMiwgMHg3YzA2LCAweDdmMGEsCisJMHg3ZTBlLCAweDc4MmIsIDB4MDAwMSwgMHg3MDAwLCAweDgwMDAsIDB4NzAwMiwgMHhhODNjLCAweDkzMDAsCisJMHhhODNlLCAweGE4NDAsIDB4OTIwMSwgMHhhODQyLCAweDcwMGMsIDB4OTMwMCwgMHg3MDBlLCAweDcwMTAsCisJMHg5MjAxLCAweDcwMTIsIDB4MDgwYywgMHgyMDdmLCAweDA0NDgsIDB4ZDZiNCwgMHgwMTEwLCAweDIwMGIsCisJMHg0MDQwLCAweDIwMzEsIDB4MDA4MCwgMHg5NTg0LCAweDAwN2YsIDB4MDEwOCwgMHg5NjMyLCAweDcxMjQsCisJMHg3MDAwLCAweDkwODYsIDB4MDAwMCwgMHgxMTk4LCAweGMxODUsIDB4NzEyNiwgMHgyMDA5LCAweDAzMDYsCisJMHgyMTA0LCAweGQwYjQsIDB4MTkwNCwgMHgxZTQwLCAweDIwMGIsIDB4NDA0MCwgMHgyMDA5LCAweDFhODMsCisJMHgyMTA0LCAweDgwMDAsIDB4MGEwNCwgMHgxZTQwLCAweDIwMGEsIDB4MDgwNCwgMHgxZTQwLCAweGMxOGQsCisJMHg3MTI2LCAweGQxODQsIDB4MWQ1OCwgMHgwODA0LCAweDFlNDAsIDB4OTAwNiwgMHgwMDJlLCAweDAwM2UsCisJMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwMDUsIDB4MDgwYywgMHgwZGM1LCAweDAwMjYsCisJMHgyMDAxLCAweDAxMDUsIDB4MjAwMywgMHgwMDEwLCAweDc4MmIsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsCisJMHg3MDA0LCAweDIwNjAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTE4LCAweGE4ODAsCisJMHhjMGJkLCAweGE4ODIsIDB4NzgyYywgMHhkMGFjLCAweDFkZTgsIDB4MDgwYywgMHgxY2VmLCAweDYwMjAsCisJMHg5MDg2LCAweDAwMDYsIDB4MTE4MCwgMHgyMDYxLCAweDAxMDAsIDB4NjJjOCwgMHgyMDAxLCAweDAwZmEsCisJMHg4MDAxLCAweDFkZjAsIDB4NjBjOCwgMHg5MjA2LCAweDFkYzAsIDB4NjBjNCwgMHhhODlhLCAweDYwYzgsCisJMHhhODk2LCAweDcwMDQsIDB4MjA2MCwgMHgwMGM2LCAweDA4MGMsIDB4Y2NmMywgMHgwMGNlLCAweDIwMDEsCisJMHgxOWY3LCAweDIwMDQsIDB4OWMwNiwgMHgxMTYwLCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDI0MDksCisJMHgwODBjLCAweGFjMmIsIDB4MjAxMSwgMHgwMDAwLCAweDA4MGMsIDB4YWFjOSwgMHgwODBjLCAweDliZDMsCisJMHgwMDJlLCAweDA4MDQsIDB4MjAyZiwgMHgwMTI2LCAweDIwOTEsIDB4MjQwMCwgMHhhODU4LCAweDIwNDAsCisJMHg3OTJjLCAweDc4MmIsIDB4MDAwMiwgMHg5MTg0LCAweDA3MDAsIDB4MTkwNCwgMHgxZWE3LCAweDcwMDAsCisJMHgwMDAyLCAweDIwMmYsIDB4MWVmZCwgMHgxZjdkLCAweDIwMmQsIDB4ODAwMSwgMHg3MDAyLCAweDcwMjcsCisJMHgwMDAwLCAweGQxOWMsIDB4MTE1OCwgMHg4YWZmLCAweDA5MDQsIDB4MWY0YSwgMHgwODBjLCAweDFjZjYsCisJMHgwOTA0LCAweDIwMmYsIDB4MDgwYywgMHgxY2Y2LCAweDA4MDQsIDB4MjAyZiwgMHg3ODJiLCAweDAwMDQsCisJMHhkMTk0LCAweDAxNDgsIDB4YTg4MCwgMHhjMGZjLCAweGE4ODIsIDB4OGFmZiwgMHgxNTE4LCAweGE4N2MsCisJMHhjMGY1LCAweGE4N2UsIDB4MDBmOCwgMHgwMDI2LCAweDAwMzYsIDB4YWIzYywgMHhhYTQwLCAweDAwMTYsCisJMHg3OTEwLCAweGE4MmMsIDB4OTEwMCwgMHhhODJlLCAweDc5MTQsIDB4YTgzMCwgMHg5MTAxLCAweGE4MzIsCisJMHgwMDFlLCAweDc4MTAsIDB4OTMxYSwgMHg3ODE0LCAweDkyMTMsIDB4NzgwMCwgMHhhODFlLCAweDc4MDQsCisJMHhhODIyLCAweGFiM2UsIDB4YWE0MiwgMHgwMDNlLCAweDAwMmUsIDB4MDgwYywgMHgyMDlhLCAweGE4ODAsCisJMHhjMGZkLCAweGE4ODIsIDB4MmEwMCwgMHhhODE2LCAweDI4MDAsIDB4YTg1YSwgMHgyYzAwLCAweGE4MTIsCisJMHg3MDAzLCAweDAwMDAsIDB4MjAwOSwgMHgwMzA2LCAweDIwMGIsIDB4NDgwMCwgMHg3MDI3LCAweDAwMDAsCisJMHgwODA0LCAweDIwMmYsIDB4MDBmNiwgMHgwMDI2LCAweDc4MWMsIDB4MDAwNiwgMHg3ODE4LCAweDAwMDYsCisJMHgyMDc5LCAweDAxMDAsIDB4N2ExNCwgMHg5Mjg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDEyLCAweDc4MTYsCisJMHgwMDM2LCAweDIwMTksIDB4MTAwMCwgMHg4MzE5LCAweDA5MGMsIDB4MGRjNSwgMHg3ODIwLCAweGQwYmMsCisJMHgxZGQwLCAweDAwM2UsIDB4NzljOCwgMHgwMDBlLCAweDkxMDIsIDB4MDAxZSwgMHgwMDA2LCAweDAwMTYsCisJMHg3OWM0LCAweDAwMGUsIDB4OTEwMywgMHg3OGM2LCAweDAwMGUsIDB4NzhjYSwgMHg5Mjg0LCAweDE5ODQsCisJMHg5MDg1LCAweDAwMTIsIDB4NzgxNiwgMHgwMDJlLCAweDAwZmUsIDB4NzgyYiwgMHgwMDA4LCAweDcwMDMsCisJMHgwMDAwLCAweDA4MGMsIDB4MWNlZiwgMHgwODA0LCAweDIwMmYsIDB4ODAwMSwgMHg3MDAyLCAweDcwMjQsCisJMHg4MDA0LCAweDcwMjYsIDB4ZDE5NCwgMHgwMTcwLCAweDc4MmMsIDB4ZDBmYywgMHgxOTA0LCAweDFlZjAsCisJMHhkMTljLCAweDE5MDQsIDB4MjAyYiwgMHg4YWZmLCAweDA5MDQsIDB4MjAyZiwgMHgwODBjLCAweDFjZjYsCisJMHgwODA0LCAweDIwMmYsIDB4MDAyNiwgMHgwMDM2LCAweGFiM2MsIDB4YWE0MCwgMHgwODBjLCAweDIwOWEsCisJMHhkZDljLCAweDE5MDQsIDB4MWZlYSwgMHgyYzA1LCAweDkwOGEsIDB4MDAzNiwgMHgxYTBjLCAweDBkYzUsCisJMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxZmJlLCAweDFmYmUsIDB4MWZjMCwgMHgxZmJlLCAweDFmYmUsCisJMHgxZmJlLCAweDFmYzYsIDB4MWZiZSwgMHgxZmJlLCAweDFmYmUsIDB4MWZjYywgMHgxZmJlLCAweDFmYmUsCisJMHgxZmJlLCAweDFmZDIsIDB4MWZiZSwgMHgxZmJlLCAweDFmYmUsIDB4MWZkOCwgMHgxZmJlLCAweDFmYmUsCisJMHgxZmJlLCAweDFmZGUsIDB4MWZiZSwgMHgxZmJlLCAweDFmYmUsIDB4MWZlNCwgMHgwODBjLCAweDBkYzUsCisJMHhhMDdjLCAweDkzMWEsIDB4YTA4MCwgMHg5MjEzLCAweDA4MDQsIDB4MWYxZiwgMHhhMDhjLCAweDkzMWEsCisJMHhhMDkwLCAweDkyMTMsIDB4MDgwNCwgMHgxZjFmLCAweGEwOWMsIDB4OTMxYSwgMHhhMGEwLCAweDkyMTMsCisJMHgwODA0LCAweDFmMWYsIDB4YTBhYywgMHg5MzFhLCAweGEwYjAsIDB4OTIxMywgMHgwODA0LCAweDFmMWYsCisJMHhhMGJjLCAweDkzMWEsIDB4YTBjMCwgMHg5MjEzLCAweDA4MDQsIDB4MWYxZiwgMHhhMGNjLCAweDkzMWEsCisJMHhhMGQwLCAweDkyMTMsIDB4MDgwNCwgMHgxZjFmLCAweGEwZGMsIDB4OTMxYSwgMHhhMGUwLCAweDkyMTMsCisJMHgwODA0LCAweDFmMWYsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCisJMHgwMDFiLCAweDAwMDIsIDB4MjAwZCwgMHgyMDBiLCAweDIwMGIsIDB4MjAwYiwgMHgyMDBiLCAweDIwMGIsCisJMHgyMDEzLCAweDIwMGIsIDB4MjAwYiwgMHgyMDBiLCAweDIwMGIsIDB4MjAwYiwgMHgyMDE5LCAweDIwMGIsCisJMHgyMDBiLCAweDIwMGIsIDB4MjAwYiwgMHgyMDBiLCAweDIwMWYsIDB4MjAwYiwgMHgyMDBiLCAweDIwMGIsCisJMHgyMDBiLCAweDIwMGIsIDB4MjAyNSwgMHgwODBjLCAweDBkYzUsIDB4YTA3YywgMHg5MzFhLCAweGEwODAsCisJMHg5MjEzLCAweDA4MDQsIDB4MWYxZiwgMHhhMDk0LCAweDkzMWEsIDB4YTA5OCwgMHg5MjEzLCAweDA4MDQsCisJMHgxZjFmLCAweGEwYWMsIDB4OTMxYSwgMHhhMGIwLCAweDkyMTMsIDB4MDgwNCwgMHgxZjFmLCAweGEwYzQsCisJMHg5MzFhLCAweGEwYzgsIDB4OTIxMywgMHgwODA0LCAweDFmMWYsIDB4YTBkYywgMHg5MzFhLCAweGEwZTAsCisJMHg5MjEzLCAweDA4MDQsIDB4MWYxZiwgMHgwODA0LCAweDFmMWIsIDB4MDgwYywgMHgwZGM1LCAweDAxMmUsCisJMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgyMDcxLCAweDFhNjksIDB4NzAwMCwgMHg5MDg2LCAweDAwMDAsCisJMHgwOTA0LCAweDIwN2EsIDB4MjA3OSwgMHgwMDkwLCAweDIwMDksIDB4MDIwNywgMHgyMTBjLCAweGQxOTQsCisJMHgwMWI4LCAweDIwMDksIDB4MDIwYywgMHgyMTBjLCAweDkxODQsIDB4MDAwMywgMHgwMTg4LCAweDA4MGMsCisJMHhmMGEwLCAweDIwMDEsIDB4MDEzMywgMHgyMDA0LCAweDkwMDUsIDB4MDkwYywgMHgwZGM1LCAweDAwMTYsCisJMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyNDA5LCAweDAwMWUsIDB4MjAwMSwgMHgwMjBjLCAweDIxMDIsCiAJMHgyMDA5LCAweDAyMDYsIDB4MjEwNCwgMHgyMDA5LCAweDAyMDMsIDB4MjEwYywgMHg5MTA2LCAweDExMjAsCi0JMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyNDMyLCAweDc4MmMsIDB4ZDBmYywgMHgwZDg4LCAweDA4MGMsCi0JMHg0MTg2LCAweDcwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDFkNTgsIDB4NzgyYiwgMHgwMDA0LCAweDc4MmMsCi0JMHhkMGFjLCAweDFkZTgsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjQzMiwgMHg3ODJiLCAweDAwMDIsCi0JMHg3MDAzLCAweDAwMDAsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsCi0JMHgyMDAxLCAweDE4MTgsIDB4MjAwYywgMHg3OTMyLCAweDc5MzYsIDB4MDgwYywgMHgyOGRkLCAweDc4NTAsCi0JMHg5MDg0LCAweGZiZmYsIDB4OTA4NSwgMHgwMDMwLCAweDc4NTIsIDB4MjAxOSwgMHgwMWY0LCAweDgzMTksCi0JMHgxZGYwLCAweDkwODQsIDB4ZmZjZiwgMHg5MDg1LCAweDIwMDAsIDB4Nzg1MiwgMHgyMGE5LCAweDAwNDYsCi0JMHgxZDA0LCAweDNmYTgsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4M2ZhOCwgMHg3ODUwLCAweDkwODUsCi0JMHgwNDAwLCAweDkwODQsIDB4ZGZmZiwgMHg3ODUyLCAweDIwMDEsIDB4MDAyMSwgMHgyMDA0LCAweDkwODQsCi0JMHgwMDAzLCAweDkwODYsIDB4MDAwMSwgMHgxMTIwLCAweDc4NTAsIDB4OTA4NCwgMHhkZmZmLCAweDc4NTIsCi0JMHg3ODRiLCAweGY3ZjcsIDB4Nzg0MywgMHgwMDkwLCAweDc4NDMsIDB4MDAxMCwgMHgyMGE5LCAweDAwMjgsCi0JMHhhMDAxLCAweDFmMDQsIDB4M2ZjOCwgMHg3ODUwLCAweDkwODUsIDB4MTQwMCwgMHg3ODUyLCAweDIwMTksCi0JMHg2MWE4LCAweDc4NTQsIDB4YTAwMSwgMHhhMDAxLCAweGQwOGMsIDB4MTExMCwgMHg4MzE5LCAweDFkYzgsCi0JMHg3ODI3LCAweDAwNDgsIDB4Nzg1MCwgMHg5MDg1LCAweDA0MDAsIDB4Nzg1MiwgMHg3ODQzLCAweDAwNDAsCi0JMHgyMDE5LCAweDAxZjQsIDB4YTAwMSwgMHhhMDAxLCAweDgzMTksIDB4MWRlMCwgMHgyMDAxLCAweDAxMDAsCi0JMHgwODBjLCAweDJkNTIsIDB4NzgyNywgMHgwMDIwLCAweDc4NDMsIDB4MDAwMCwgMHg5MDA2LCAweDA4MGMsCi0JMHgyZDUyLCAweDc4MjcsIDB4MDA0OCwgMHgwMGZlLCAweDAwMDUsIDB4Nzg4NCwgMHhkMGFjLCAweDExYzgsCi0JMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwgMHgxYTY2LCAweDIwNzksIDB4MDMyMCwgMHgyMDAxLCAweDAyMDEsCi0JMHgyMDA0LCAweDkwMDUsIDB4MDE2MCwgMHg3MDAwLCAweDkwODYsIDB4MDAwMCwgMHgxMTQwLCAweDAwNTEsCi0JMHhkMGJjLCAweDAxMDgsIDB4ODczOCwgMHg3MDAzLCAweDAwMDMsIDB4NzgyYiwgMHgwMDE5LCAweDAwZWUsCi0JMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAzMDAsIDB4NzhiYywgMHgwMGZlLCAweDkwOGMsCi0JMHgwMDcwLCAweDAxNzgsIDB4MjAwOSwgMHgwMDMyLCAweDI2MGEsIDB4MjAwOSwgMHgwMDMzLCAweDI1MGEsCi0JMHhkMGI0LCAweDAxMDgsIDB4OGM2MCwgMHhkMGFjLCAweDAxMDgsIDB4OGQ2OCwgMHhkMGE0LCAweDAxMDgsCi0JMHg4YjU4LCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsIDB4NzgxYywgMHhkMDg0LCAweDAxMTAsCi0JMHg3ODM3LCAweDAwNTAsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMTAwLCAweDIwMDEsCi0JMHgxOWFjLCAweDIwMDQsIDB4NzBlMiwgMHgwODBjLCAweDNkMWIsIDB4MTE4OCwgMHgyMDAxLCAweDE4MjAsCi0JMHgyMDA0LCAweDIwMDksIDB4MTgxZiwgMHgyMTBjLCAweDkxOGMsIDB4MDBmZiwgMHg3MDZlLCAweDcxNmEsCi0JMHg3MDY2LCAweDkxOGQsIDB4MzIwMCwgMHg3MTYyLCAweDcwNzMsIDB4ZTEwOSwgMHgwMDgwLCAweDcwMmMsCi0JMHg5MDg1LCAweDAwMDIsIDB4NzAyZSwgMHgyMDA5LCAweDE4MTgsIDB4MjEwYywgMHg3MTZlLCAweDcwNjMsCi0JMHgwMTAwLCAweDcxNjYsIDB4NzE5ZSwgMHg3MDZiLCAweDAwMDAsIDB4NzA3MywgMHgwODA5LCAweDcwNzcsCi0JMHgwMDA4LCAweDcwNzgsIDB4OTA4MCwgMHgwMTAwLCAweDcwN2EsIDB4NzA4MCwgMHg4MDAwLCAweDcwODIsCi0JMHg3MDg3LCAweGFhYWEsIDB4OTAwNiwgMHg3MDhhLCAweDcwOGUsIDB4NzA3ZSwgMHg3MGQ2LCAweDcwYWIsCi0JMHgwMDM2LCAweDcwYWYsIDB4OTVkNSwgMHg3MDE0LCAweDkwODQsIDB4MTk4NCwgMHg5MDg1LCAweDAwOTIsCi0JMHg3MDE2LCAweDA4MGMsIDB4NDE4NiwgMHgwMGY2LCAweDIwNzEsIDB4MWE2NiwgMHgyMDc5LCAweDAzMjAsCi0JMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODg0LCAweGQwYjQsIDB4MDEyMCwgMHg2ODljLCAweDc4MGUsCi0JMHg2ODk4LCAweDc4MGEsIDB4MDBkZSwgMHgwODBjLCAweDNkMWIsIDB4MDE0MCwgMHgyMDAxLCAweDE5YTAsCi0JMHgyMDBjLCAweDIwMDMsIDB4MDAwMSwgMHg5MThlLCAweDAwMDEsIDB4MDEyMCwgMHgyMDA5LCAweDAzZTgsCi0JMHg4MTA5LCAweDFkZjAsIDB4NzkyYywgMHhkMWZjLCAweDAxMTAsIDB4NzgyYiwgMHgwMDA0LCAweDIwMTEsCi0JMHgwMDExLCAweDA4MGMsIDB4NDExMiwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHg0MTEyLCAweDAwZmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDIwNzEsIDB4MWE2NiwgMHgyMDc5LCAweDAzMjAsCi0JMHg3OTJjLCAweGQxZmMsIDB4MDkwNCwgMHg0MTBmLCAweDc4MmIsIDB4MDAwMiwgMHg5MDI2LCAweGQxOWMsCi0JMHgxOTA0LCAweDQxMGIsIDB4NzAwMCwgMHgwMDAyLCAweDQxMGYsIDB4NDBjMCwgMHg0MGYwLCAweDQxMGIsCi0JMHhkMWJjLCAweDExNzAsIDB4ZDFkYywgMHgxMTkwLCAweDgwMDEsIDB4NzAwMiwgMHgyMDExLCAweDAwMDEsCi0JMHgwODBjLCAweDQxMTIsIDB4MDkwNCwgMHg0MTBmLCAweDA4MGMsIDB4NDExMiwgMHgwODA0LCAweDQxMGYsCi0JMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHg3OGJmLCAweDAwMDAsIDB4MDBmZSwgMHg3ODEwLCAweDc5MTQsCi0JMHg3ODJiLCAweDAwMDQsIDB4NzgxMiwgMHg3OTE2LCAweDIwMDEsIDB4MDIwMSwgMHgyMDBjLCAweDgxZmYsCi0JMHgwZGU4LCAweDA4MGMsIDB4NDAxMiwgMHgyMDA5LCAweDAwMDEsIDB4MDBmNiwgMHgyMDc5LCAweDAzMDAsCi0JMHg3OGI4LCAweDAwZmUsIDB4ZDBlYywgMHgwMTEwLCAweDIwMDksIDB4MDAxMSwgMHg3OTJhLCAweDAwZjgsCi0JMHg4MDAxLCAweDcwMDIsIDB4OTE4NCwgMHgwODgwLCAweDExNDAsIDB4NzgyYywgMHhkMGZjLCAweDE5MDQsCi0JMHg0MGI0LCAweDIwMTEsIDB4MDAwMSwgMHgwMGIxLCAweDAwOTAsIDB4YTAxMCwgMHg5MDkyLCAweDAwMDQsCi0JMHg5MDg2LCAweDAwMTUsIDB4MTEyMCwgMHhhMDAwLCAweGEwNWEsIDB4MjAxMSwgMHgwMDMxLCAweGEyMTIsCi0JMHhkMWRjLCAweDE5NjAsIDB4MDgyOCwgMHg3ODJiLCAweDAwMDQsIDB4NzAwMywgMHgwMDAwLCAweDAwZWUsCi0JMHgwMGZlLCAweDAwMDUsIDB4YTAxNCwgMHg5MDA1LCAweDA1NTAsIDB4ODAwMSwgMHgwMDM2LCAweDAwOTYsCi0JMHhhMDE2LCAweGEwNTgsIDB4MjA0OCwgMHhhMDEwLCAweDIwMDksIDB4MDAzMSwgMHg5MTFhLCAweDgzMWMsCi0JMHg4MzFjLCAweDkzOGEsIDB4MDAwNywgMHgxYTBjLCAweDBkYzUsIDB4OTM5OCwgMHg0MTQwLCAweDIzMWQsCi0JMHgwODNmLCAweDkwODAsIDB4MDAwNCwgMHg3YTJhLCAweDcxMDAsIDB4ODEwOCwgMHg3MTAyLCAweDAwOWUsCi0JMHgwMDNlLCAweDkwOGEsIDB4MDAzNSwgMHgxMTQwLCAweDAwOTYsIDB4YTA1OCwgMHgyMDQ4LCAweGE4MDQsCi0JMHhhMDVhLCAweDIwMDEsIDB4MDAxOSwgMHgwMDllLCAweGEwMTIsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHg0MTdkLCAweDQxNzQsIDB4NDE2YiwgMHg0MTYyLCAweDQxNTksIDB4NDE1MCwgMHg0MTQ3LCAweGE5NjQsCi0JMHg3OTAyLCAweGE5NjgsIDB4NzkwNiwgMHhhOTZjLCAweDc5MTIsIDB4YTk3MCwgMHg3OTE2LCAweDAwMDUsCi0JMHhhOTc0LCAweDc5MDIsIDB4YTk3OCwgMHg3OTA2LCAweGE5N2MsIDB4NzkxMiwgMHhhOTgwLCAweDc5MTYsCi0JMHgwMDA1LCAweGE5ODQsIDB4NzkwMiwgMHhhOTg4LCAweDc5MDYsIDB4YTk4YywgMHg3OTEyLCAweGE5OTAsCi0JMHg3OTE2LCAweDAwMDUsIDB4YTk5NCwgMHg3OTAyLCAweGE5OTgsIDB4NzkwNiwgMHhhOTljLCAweDc5MTIsCi0JMHhhOWEwLCAweDc5MTYsIDB4MDAwNSwgMHhhOWE0LCAweDc5MDIsIDB4YTlhOCwgMHg3OTA2LCAweGE5YWMsCi0JMHg3OTEyLCAweGE5YjAsIDB4NzkxNiwgMHgwMDA1LCAweGE5YjQsIDB4NzkwMiwgMHhhOWI4LCAweDc5MDYsCi0JMHhhOWJjLCAweDc5MTIsIDB4YTljMCwgMHg3OTE2LCAweDAwMDUsIDB4YTljNCwgMHg3OTAyLCAweGE5YzgsCi0JMHg3OTA2LCAweGE5Y2MsIDB4NzkxMiwgMHhhOWQwLCAweDc5MTYsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsCi0JMHgwMDg2LCAweDIwNzEsIDB4MWE2YSwgMHgyMDc5LCAweDAwOTAsIDB4NzkyYywgMHhkMWZjLCAweDAxZTgsCi0JMHg3ODJiLCAweDAwMDIsIDB4Mjk0MCwgMHg5MDI2LCAweDcwMDAsIDB4MDAwMiwgMHg0MWFkLCAweDQxOTksCi0JMHg0MWE0LCAweDgwMDEsIDB4NzAwMiwgMHhkMTljLCAweDExODAsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsCi0JMHg0MTEyLCAweDE5MGMsIDB4NDExMiwgMHgwMDQ4LCAweDgwMDEsIDB4NzAwMiwgMHg3ODJjLCAweGQwZmMsCi0JMHgxZDM4LCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDQxMTIsIDB4MDA4ZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwODYsIDB4MjA2MSwgMHgwMjAwLCAweDIwMDEsCi0JMHgxOWFjLCAweDIwMDQsIDB4NjAxYSwgMHgyMDYxLCAweDAxMDAsIDB4MjAwMSwgMHgxOWFiLCAweDIwMDQsCi0JMHg2MGNlLCAweDYxMDQsIDB4YzFhYywgMHg2MTA2LCAweDIwMDEsIDB4MDAyYywgMHgyMDA0LCAweDkwMDUsCi0JMHgwNTIwLCAweDIwMzgsIDB4MjAwMSwgMHgwMDJlLCAweDIwMjQsIDB4MjAwMSwgMHgwMDJmLCAweDIwMWMsCi0JMHgwODBjLCAweDRiODksIDB4YTgxMywgMHgwMDE5LCAweGFmMTYsIDB4MjkwMCwgMHhhODVhLCAweDk3OGEsCi0JMHgwMDA3LCAweDAyMjAsIDB4MjEzOCwgMHgyMDA5LCAweDAwMDcsIDB4MDAxMCwgMHgyNzA4LCAweDkwM2UsCi0JMHgwMDk2LCAweGE4NTgsIDB4MjA0OCwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgwMDllLCAweDA4MGMsCi0JMHg0MjI5LCAweDFkNjgsIDB4MjkwMCwgMHhhODVhLCAweDAwZDAsIDB4MDgwYywgMHg0Yjg5LCAweGE4MTMsCi0JMHgwMDE5LCAweGE4MTcsIDB4MDAwMSwgMHgyOTAwLCAweGE4NWEsIDB4MjAwMSwgMHgwMDJlLCAweDIwMDQsCi0JMHhhODY2LCAweDIwMDEsIDB4MDAyZiwgMHgyMDA0LCAweGE4NmEsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsCi0JMHg5MDg0LCAweGZmZjgsIDB4YTg2ZSwgMHgyMDAxLCAweDAwMmIsIDB4MjAwNCwgMHhhODcyLCAweDIwNjEsCi0JMHgwMDkwLCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweDE5YWIsIDB4MjAwNCwgMHg2MDM2LCAweDIwMDksCi0JMHgwMDQwLCAweDA4MGMsIDB4MjQzMiwgMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LCAweGZmZjgsCi0JMHg2MDFhLCAweDAwMDYsIDB4MjAwMSwgMHgwMDJiLCAweDIwMDQsIDB4NjAxZSwgMHg3OGM2LCAweDAwMGUsCi0JMHg3OGNhLCAweDkwMDYsIDB4NjAwYSwgMHg2MDBlLCAweDAwOGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMDgwLCAweGFhNjAsIDB4MjJlOCwgMHgyMGEwLCAweDIwZTEsCi0JMHgwMDAwLCAweDIwOTksIDB4MDA4OCwgMHg3MDJiLCAweDAwMjYsIDB4NzQwMiwgMHg3MzA2LCAweDkwMDYsCi0JMHg3MDBhLCAweDcwMGUsIDB4ODEwYiwgMHg4MTBiLCAweDIxYTgsIDB4ODEwYiwgMHg3MTEyLCAweDcwMmIsCi0JMHgwMDQxLCAweDcwMmMsIDB4ZDBmYywgMHgwZGU4LCAweDcwMmIsIDB4MDAwMiwgMHg3MDJiLCAweDAwNDAsCi0JMHg0MDA1LCAweDc0MDAsIDB4NzMwNCwgMHg4N2ZmLCAweDAxOTAsIDB4MDA4NiwgMHgwMDk2LCAweDI5NDAsCi0JMHgwMDg2LCAweDA4MGMsIDB4NGI4OSwgMHgwMDhlLCAweGEwNTgsIDB4MDBhNiwgMHgyMDUwLCAweDI5MDAsCi0JMHhiMDA2LCAweGEwNWEsIDB4MDBhZSwgMHgwMDllLCAweDAwOGUsIDB4OTA4NSwgMHgwMDAxLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MjAwMSwgMHgwMDJkLCAweDIwMDQsIDB4OTAwNSwgMHgwNTI4LCAweDIwMzgsCi0JMHgyMDAxLCAweDAwMzAsIDB4MjAyNCwgMHgyMDAxLCAweDAwMzEsIDB4MjAxYywgMHgwODBjLCAweDRiODksCi0JMHgyOTQwLCAweGE4MTMsIDB4MDAxOSwgMHhhZjE2LCAweDI5MDAsIDB4YTg1YSwgMHg5NzhhLCAweDAwMDcsCi0JMHgwMjIwLCAweDIxMzgsIDB4MjAwOSwgMHgwMDA3LCAweDAwMTAsIDB4MjcwOCwgMHg5MDNlLCAweDAwOTYsCi0JMHhhODU4LCAweDIwNDgsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4MDA5ZSwgMHgwODBjLCAweDQyMjksCi0JMHgxZDY4LCAweDI5MDAsIDB4YTg1YSwgMHgwMGQ4LCAweDA4MGMsIDB4NGI4OSwgMHgyOTQwLCAweGEwMTMsCi0JMHgwMDE5LCAweGEwMTcsIDB4MDAwMSwgMHgyODAwLCAweGEwNWEsIDB4MjAwMSwgMHgwMDMwLCAweDIwMDQsCi0JMHhhMDY2LCAweDIwMDEsIDB4MDAzMSwgMHgyMDA0LCAweGEwNmEsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsCi0JMHg5MDg0LCAweGZmZjgsIDB4YTA2ZSwgMHgyMDAxLCAweDAwMmIsIDB4MjAwNCwgMHhhMDcyLCAweDIwMDEsCi0JMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHg3ODg0LCAweGQwYWMsIDB4MTE4MCwgMHgyMDAxLCAweDAxMDEsCi0JMHgyMDBjLCAweDkxOGQsIDB4MDIwMCwgMHgyMTAyLCAweGEwMTcsIDB4MDAwMCwgMHgyMDAxLCAweDFhNjYsCi0JMHgyMDAzLCAweDAwMDMsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwOSwgMHgyMDAxLCAweDAzMDAsCi0JMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDQsCi0JMHgyMDBjLCAweDkxOGQsIDB4MDAwMiwgMHgyMTAyLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwYTksIDB4MDAwNywgMHgyMGExLCAweDE4NDAsIDB4MjBlOSwgMHgwMDAxLCAweDkwMDYsCi0JMHg0MDA0LCAweDIwYTksIDB4MDAxNCwgMHgyMGExLCAweGZmZWMsIDB4MjBlOSwgMHgwMDAwLCAweDkwMDYsCi0JMHg0MDA0LCAweDIwMDksIDB4MDEzYywgMHgyMDBhLCAweDAxMmUsIDB4Nzg4MCwgMHg5MDg2LCAweDAwNTIsCi0JMHgwMTA4LCAweDAwMDUsIDB4MDgwNCwgMHgzNWFiLCAweDdkOTgsIDB4N2M5YywgMHgwODA0LCAweDM2YWYsCi0JMHgwODBjLCAweDc1NjksIDB4MTkwYywgMHg2MGVjLCAweDYwNDAsIDB4OTA4NCwgMHgwMDIwLCAweDA5YjEsCi0JMHgyMDY5LCAweDE4NDcsIDB4MmQwMCwgMHgyMDA5LCAweDAwMzAsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsCi0JMHg3ZDk4LCAweDIwMzksIDB4MDAwMSwgMHgwODBjLCAweDRiZDIsIDB4NzAxZiwgMHg0MzA4LCAweDAwMDUsCi0JMHgwODBjLCAweDU3ZTIsIDB4MTEzMCwgMHgzYjAwLCAweDNhMDgsIDB4YzE5NCwgMHhjMDk1LCAweDIwZDgsCi0JMHgyMWQwLCAweDIwNjksIDB4MTg0NywgMHg2ODAwLCAweDkwMDUsIDB4MDkwNCwgMHgzNWUwLCAweDY4MDQsCi0JMHhkMGFjLCAweDAxMTgsIDB4ZDBhNCwgMHgwOTA0LCAweDM1ZTAsIDB4ZDA5NCwgMHgwMGM2LCAweDIwNjEsCi0JMHgwMTAwLCAweDYxMDQsIDB4MDEzOCwgMHg2MjAwLCAweDkyOTIsIDB4MDAwNSwgMHgwMjE4LCAweDkxOGMsCi0JMHhmZmRmLCAweDAwMTAsIDB4OTE4ZCwgMHgwMDIwLCAweDYxMDYsIDB4MDBjZSwgMHhkMDhjLCAweDAwYzYsCi0JMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwgMHgwMTE4LCAweDkxOGQsIDB4MDAxMCwgMHgwMDEwLCAweDkxOGMsCi0JMHhmZmVmLCAweDYxMDYsIDB4MDBjZSwgMHhkMDg0LCAweDAxNTgsIDB4NmEyOCwgMHg5MjhhLCAweDAwN2YsCi0JMHgxYTA0LCAweDM1ZTAsIDB4OTI4OCwgMHgzM2FjLCAweDIxMGQsIDB4OTE4YywgMHgwMGZmLCAweDYxNjYsCi0JMHhkMGRjLCAweDAxMzAsIDB4NjgyOCwgMHg5MDhhLCAweDAwN2YsIDB4MWEwNCwgMHgzNWUwLCAweDYwNWUsCi0JMHg2ODg4LCAweDkwODQsIDB4MDAzMCwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDAwMDYsCi0JMHgyMDA5LCAweDE5YjMsIDB4OTA4MCwgMHgyOWQwLCAweDIwMDUsIDB4MjAwYSwgMHgwMDBlLCAweDIwMDksCi0JMHgxOWI0LCAweDkwODAsIDB4MjlkNCwgMHgyMDA1LCAweDIwMGEsIDB4NjgwOCwgMHg5MDhhLCAweDAxMDAsCi0JMHgwYTA0LCAweDM1ZTAsIDB4OTA4YSwgMHgwODQxLCAweDFhMDQsIDB4MzVlMCwgMHg5MDg0LCAweDAwMDcsCi0JMHgxOTA0LCAweDM1ZTAsIDB4NjgwYywgMHg5MDA1LCAweDA5MDQsIDB4MzVlMCwgMHg2ODEwLCAweDkwMDUsCi0JMHgwOTA0LCAweDM1ZTAsIDB4Njg0OCwgMHg2OTQwLCAweDkxMGEsIDB4MWEwNCwgMHgzNWUwLCAweDgwMDEsCi0JMHgwOTA0LCAweDM1ZTAsIDB4Njg0YywgMHg2OTQ0LCAweDkxMGEsIDB4MWEwNCwgMHgzNWUwLCAweDgwMDEsCi0JMHgwOTA0LCAweDM1ZTAsIDB4MjAwOSwgMHgxOTgyLCAweDIwMGIsIDB4MDAwMCwgMHgyMDAxLCAweDE4NjksCi0JMHgyMDA0LCAweGQwYzQsIDB4MDE0MCwgMHg3ODg0LCAweDIwMGEsIDB4MjAwOCwgMHgwODBjLCAweDBlNTIsCi0JMHgzYjAwLCAweGMwODUsIDB4MjBkOCwgMHg2ODE0LCAweDkwOGMsIDB4MDBmZiwgMHg2MTRlLCAweDgwMDcsCi0JMHg5MDg0LCAweDAwZmYsIDB4NjA1MiwgMHgwODBjLCAweDc4N2YsIDB4MDgwYywgMHg2YWM4LCAweDA4MGMsCi0JMHg2YjJhLCAweDY4MDgsIDB4NjAyYSwgMHgwODBjLCAweDIzYTQsIDB4MjAwOSwgMHgwMTcwLCAweDIwMGIsCi0JMHgwMDgwLCAweGEwMDEsIDB4YTAwMSwgMHgyMDBiLCAweDAwMDAsIDB4MDAzNiwgMHg2YjA4LCAweDA4MGMsCi0JMHgyOTM3LCAweDAwM2UsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MTkwNCwgMHg0NGE0LCAweDY4MTgsCi0JMHg2OTFjLCAweDZhMjAsIDB4NmIyNCwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDYwMTYsCi0JMHg2MTFhLCAweDYyMWUsIDB4NjMyMiwgMHg2YzA0LCAweGQ0ZjQsIDB4MDE0OCwgMHg2ODMwLCAweDY5MzQsCi0JMHg2YTM4LCAweDZiM2MsIDB4ODAwNywgMHg4MTBmLCAweDgyMTcsIDB4ODMxZiwgMHgwMDEwLCAweDkwODQsCi0JMHhmMGZmLCAweDYwMDYsIDB4NjEwYSwgMHg2MjBlLCAweDYzMTIsIDB4ODAwNywgMHg4MTBmLCAweDgyMTcsCi0JMHg4MzFmLCAweDIwYTksIDB4MDAwNCwgMHgyMGExLCAweDE5YjUsIDB4MjBlOSwgMHgwMDAxLCAweDQwMDEsCi0JMHgyMGE5LCAweDAwMDQsIDB4MjBhMSwgMHgxOWNmLCAweDIwZTksIDB4MDAwMSwgMHg0MDAxLCAweDA4MGMsCi0JMHg4ODJlLCAweDAwYzYsIDB4OTAwZSwgMHgyMGE5LCAweDAwMDEsIDB4NmI3MCwgMHhkMzg0LCAweDA1MTAsCi0JMHgwMDY4LCAweDIwMDksIDB4MDEwMCwgMHgyMTBjLCAweDkxOGUsIDB4MDAwOCwgMHgxMTEwLCAweDgzOWQsCi0JMHgwMDEwLCAweDgzZjUsIDB4M2UxOCwgMHgxMmIwLCAweDM1MDgsIDB4ODEwOSwgMHgwODBjLCAweDdlM2IsCi0JMHg2ODc4LCAweDYwMTYsIDB4Njg3NCwgMHgyMDA4LCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDYwMGEsCi0JMHg5MTg0LCAweDAwZmYsIDB4NjAwNiwgMHg4MTA4LCAweDExMTgsIDB4NjAwMywgMHgwMDAzLCAweDAwMTAsCi0JMHg2MDAzLCAweDAwMDEsIDB4MWYwNCwgMHg0M2Y5LCAweDAwY2UsIDB4MDBjNiwgMHgyMDYxLCAweDE5OWQsCi0JMHg2YTg4LCAweDkyODQsIDB4YzAwMCwgMHgyMDEwLCAweDkyODYsIDB4MDAwMCwgMHgxMTU4LCAweDIwNjMsCi0JMHgwMDAwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDJiY2EsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCi0JMHgyYmFkLCAweDAwODgsIDB4OTI4NiwgMHg0MDAwLCAweDExNDgsIDB4MjA2MywgMHgwMDAxLCAweDkwMDYsCi0JMHgwODBjLCAweDJiY2EsIDB4OTAwNiwgMHgwODBjLCAweDJiYWQsIDB4MDAyOCwgMHg5Mjg2LCAweDgwMDAsCi0JMHgxZDMwLCAweDIwNjMsIDB4MDAwMiwgMHgwMGNlLCAweDAwZTYsIDB4MmM3MCwgMHgwODBjLCAweDBlYTMsCi0JMHgwMGVlLCAweDY4ODgsIDB4ZDBlYywgMHgwMTMwLCAweDIwMTEsIDB4MDExNCwgMHgyMjA0LCAweDkwODUsCi0JMHgwMTAwLCAweDIwMTIsIDB4NmE4MCwgMHg5Mjg0LCAweDAwMzAsIDB4OTA4NiwgMHgwMDMwLCAweDExMjgsCi0JMHg5Mjk0LCAweGZmY2YsIDB4OTI5NSwgMHgwMDIwLCAweDZhODIsIDB4MjAwMSwgMHgxOTdkLCAweDZhODAsCi0JMHg5Mjk0LCAweDAwMzAsIDB4OTI4ZSwgMHgwMDAwLCAweDAxNzAsIDB4OTI4ZSwgMHgwMDEwLCAweDAxMTgsCi0JMHg5MjhlLCAweDAwMjAsIDB4MDE0MCwgMHgyMDAzLCAweGFhYWEsIDB4MDgwYywgMHgyOWFjLCAweDIwMDEsCi0JMHgxOTZlLCAweDIxMDIsIDB4MDAwOCwgMHgyMTAyLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYwMmYsCi0JMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwMGNlLCAweDA4MGMsIDB4NzU2OSwgMHgwMTI4LCAweDA4MGMsCi0JMHg1MGM5LCAweDAxMTAsIDB4MDgwYywgMHgyOGZkLCAweDYwZDQsIDB4OTAwNSwgMHgwMWMwLCAweDYwMDMsCi0JMHgwMDAxLCAweDIwMDksIDB4NDQ4YywgMHgwMGUwLCAweDA4MGMsIDB4NzU2OSwgMHgxMTY4LCAweDIwMTEsCi0JMHg3M2U0LCAweDA4MGMsIDB4ODcwOSwgMHgyMDExLCAweDczZDcsIDB4MDgwYywgMHg4N2UzLCAweDA4MGMsCi0JMHg3ODUzLCAweDA4MGMsIDB4NzQ5NSwgMHgwMDQwLCAweDA4MGMsIDB4NWZlNiwgMHgwMDI4LCAweDYwMDMsCi0JMHgwMDA0LCAweDIwMDksIDB4NDRhNCwgMHgwMDIwLCAweDA4MGMsIDB4NjlmNCwgMHgwODA0LCAweDM1YWIsCi0JMHgyMDAxLCAweDAxNzAsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDRjLCAweDExMTgsCi0JMHgyMDkxLCAweDMwYmQsIDB4MDgxNywgMHgyMDkxLCAweDMwM2QsIDB4MDgxNywgMHg2MDAwLCAweDkwODYsCi0JMHgwMDAwLCAweDA5MDQsIDB4MzVkZCwgMHgyMDY5LCAweDE4NDcsIDB4Nzg5MCwgMHg2ODQyLCAweDc4OTQsCi0JMHg2ODQ2LCAweDJkMDAsIDB4MjAwOSwgMHgwMDMwLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsCi0JMHgyMDM5LCAweDAwMDEsIDB4MDgwNCwgMHg0YmQ1LCAweDkwMDYsIDB4MDgwYywgMHgyOGZkLCAweDgxZmYsCi0JMHgxOTA0LCAweDM1ZGQsIDB4MDgwYywgMHg3NTY5LCAweDExYjAsIDB4MDgwYywgMHg3ODRlLCAweDA4MGMsCi0JMHg2MTI3LCAweDA4MGMsIDB4MzNhMCwgMHgwMTE4LCAweDYxMzAsIDB4YzE4ZCwgMHg2MTMyLCAweDA4MGMsCi0JMHhkNTYxLCAweDAxMzAsIDB4MDgwYywgMHg3NThjLCAweDExMTgsIDB4MDgwYywgMHg3NTQxLCAweDAwMzgsCi0JMHgwODBjLCAweDc0OTUsIDB4MDAyMCwgMHgwODBjLCAweDYwZWMsIDB4MDgwYywgMHg1ZmU2LCAweDA4MDQsCi0JMHgzNWFiLCAweDgxZmYsIDB4MTkwNCwgMHgzNWRkLCAweDA4MGMsIDB4NzU2OSwgMHgxMTEwLCAweDA4MDQsCi0JMHgzNWRkLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYxOTQsIDB4ODFmZiwgMHgwMTkwLCAweDcwNGYsCi0JMHgwMDAwLCAweDIwMDEsIDB4MWM4MCwgMHgyMDA5LCAweDAwNDAsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsCi0JMHg3ZDk4LCAweDIwMzksIDB4MDAwMSwgMHgwODBjLCAweDRiZDUsIDB4NzAxZiwgMHgzNWE5LCAweDAxMmUsCi0JMHgwMDA1LCAweDcwNGYsIDB4MDAwMSwgMHgwMGQ2LCAweDIwNjksIDB4MWM4MCwgMHgyMGE5LCAweDAwNDAsCi0JMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxYzgwLCAweDIwMTksIDB4ZmZmZiwgMHg0MzA0LCAweDY1NWMsCi0JMHg5NTg4LCAweDMzYWMsIDB4MjEwZCwgMHg5MThjLCAweDAwZmYsIDB4MjE2YSwgMHg5MDBlLCAweDIwMTEsCi0JMHgwMDAyLCAweDIxMDAsIDB4OTUwNiwgMHgwMWE4LCAweDA4MGMsIDB4NjcxZCwgMHgxMTkwLCAweGI4MTQsCi0JMHg4MjFjLCAweDAyMzgsIDB4OTM5OCwgMHgxYzgwLCAweDkwODUsIDB4ZmYwMCwgMHg4MDA3LCAweDIwMWEsCi0JMHgwMDM4LCAweDkzOTgsIDB4MWM4MCwgMHgyMzI0LCAweDk0YTQsIDB4ZmYwMCwgMHg5NDA1LCAweDIwMWEsCi0JMHg4MjEwLCAweDgxMDgsIDB4OTE4MiwgMHgwMDgwLCAweDEyMDgsIDB4MGMxOCwgMHg4MjAxLCAweDgwMDcsCi0JMHgyZDBjLCAweDkxMDUsIDB4MjA2YSwgMHgwMGRlLCAweDIwYTksIDB4MDA0MCwgMHgyMGExLCAweDFjODAsCi0JMHgyMDk5LCAweDFjODAsIDB4MDgwYywgMHg2MDc3LCAweDA4MDQsIDB4NDUwMSwgMHgwODBjLCAweDRiYmMsCi0JMHgwOTA0LCAweDM1ZTAsIDB4MDgwYywgMHg0Yjg5LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsCi0JMHgzNWRkLCAweDA4MGMsIDB4NTdkMywgMHhkMGI0LCAweDA1NTgsIDB4Nzg4NCwgMHg5MDhlLCAweDAwN2UsCi0JMHgwNTM4LCAweDkwOGUsIDB4MDA3ZiwgMHgwNTIwLCAweDkwOGUsIDB4MDA4MCwgMHgwNTA4LCAweDA4MGMsCi0JMHgzMzliLCAweDExNDgsIDB4YjgwMCwgMHhkMDhjLCAweDExZDgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwMDYsIDB4MTFhOCwgMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsCi0JMHgwODBjLCAweGQwMjEsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNWRkLCAweDcwMDcsCi0JMHgwMDAzLCAweDcwMWYsIDB4NDU4YywgMHgwMDA1LCAweDA4MGMsIDB4NGJiYywgMHgwOTA0LCAweDM1ZTAsCi0JMHgyMGE5LCAweDAwMmIsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsIDB4MjA5OCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLCAweDQwMDMsIDB4MjBhOSwgMHgwMDA4LCAweDkwODAsCi0JMHgwMDA2LCAweDIwYTAsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsIDB4OTA4MCwgMHgwMDA2LCAweDIwOTgsCi0JMHgwODBjLCAweDBmOGIsIDB4MDA3MCwgMHgyMGE5LCAweDAwMDQsIDB4YTg1YywgMHg5MDgwLCAweDAwMGEsCi0JMHgyMGEwLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsIDB4MDAwYSwgMHgyMDk4LCAweDA4MGMsCi0JMHgwZjhiLCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsCi0JMHg5MDgwLCAweDAwMDIsIDB4MjAwOSwgMHgwMDJiLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsCi0JMHgwODA0LCAweDRiZDUsIDB4ODFmZiwgMHgxOTA0LCAweDM1ZGQsIDB4MDgwYywgMHg0YmEwLCAweDA5MDQsCi0JMHgzNWUwLCAweDA4MGMsIDB4Njg4ZiwgMHgwOTA0LCAweDM1ZGQsIDB4MDA1OCwgMHhhODc4LCAweDkwMDUsCi0JMHgwMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM1ZGQsIDB4YTk3NCwgMHhhYTk0LCAweDA4MDQsCi0JMHgzNWFiLCAweDA4MGMsIDB4NTdkYiwgMHgwOTA0LCAweDM1YWIsIDB4NzAxZiwgMHg0NWQ2LCAweDcwMDcsCi0JMHgwMDAzLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDM1ZGQsIDB4Nzg4OCwgMHg5MDhhLCAweDEwMDAsCi0JMHgxYTA0LCAweDM1ZTAsIDB4MDgwYywgMHg0YmJjLCAweDA5MDQsIDB4MzVlMCwgMHgwODBjLCAweDZhOTIsCi0JMHgwMTIwLCAweDA4MGMsIDB4NmE5YSwgMHgxOTA0LCAweDM1ZTAsIDB4MDgwYywgMHg2OTE0LCAweDA5MDQsCi0JMHgzNWRkLCAweDIwMTksIDB4MDAwNCwgMHg5MDBlLCAweDA4MGMsIDB4NjhhMSwgMHgwOTA0LCAweDM1ZGQsCi0JMHg3OTg0LCAweDdhODgsIDB4MDRjOSwgMHgwOGE4LCAweGE4OWMsIDB4OTA4YSwgMHgxMDAwLCAweDEyZjgsCi0JMHgwODBjLCAweDRiYmEsIDB4MDFlMCwgMHgwODBjLCAweDZhOTIsIDB4MDExOCwgMHgwODBjLCAweDZhOWEsCi0JMHgxMWIwLCAweDA4MGMsIDB4NjkxNCwgMHgyMDA5LCAweDAwMDIsIDB4MDE2OCwgMHgyMDA5LCAweDAwMDIsCi0JMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHg2OGExLCAweDIwMDksIDB4MDAwMywgMHgwMTIwLCAweGE5OTgsCi0JMHhhYTljLCAweDAwZDEsIDB4MDA2MCwgMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLCAweGE4OTcsCi0JMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LCAweGE4OTcsCi0JMHg0MDAwLCAweDA4MGMsIDB4NTdkYiwgMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLCAweDkwODUsCi0JMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDkxODYsIDB4MDBmZiwgMHgwMTEwLCAweDAwNzEsCi0JMHgwMDYwLCAweDIwMjksIDB4MDA3ZSwgMHgyMDYxLCAweDE4MDAsIDB4NjQ1YywgMHgyNDAwLCAweDk1MDYsCi0JMHgwMTEwLCAweDI1MDgsIDB4MDAxOSwgMHg4NTI5LCAweDFlYzgsIDB4MDAwNSwgMHgwODBjLCAweDY3MWQsCi0JMHgxMTM4LCAweDIyMDAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHgwODBjLCAweDg3MTcsCi0JMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNWRkLCAweDc5OGMsIDB4MjAwMSwgMHgxOTgxLCAweDkxOGMsCi0JMHg4MDAwLCAweDIxMDIsIDB4MDgwYywgMHg0YmEwLCAweDA5MDQsIDB4MzVlMCwgMHgwODBjLCAweDZhOTIsCi0JMHgwMTIwLCAweDA4MGMsIDB4NmE5YSwgMHgxOTA0LCAweDM1ZTAsIDB4MDgwYywgMHg2N2U0LCAweDA5MDQsCi0JMHgzNWRkLCAweDA4MGMsIDB4Njg5OCwgMHgwOTA0LCAweDM1ZGQsIDB4MjAwMSwgMHgxOTgxLCAweDIwMDQsCi0JMHhkMGZjLCAweDE5MDQsIDB4MzVhYiwgMHgwODA0LCAweDQ1ZTEsIDB4YTlhMCwgMHgyMDAxLCAweDE5ODEsCi0JMHg5MThjLCAweDgwMDAsIDB4YzE4ZCwgMHgyMTAyLCAweDA4MGMsIDB4NGJhZCwgMHgwMWEwLCAweDA4MGMsCi0JMHg2YTkyLCAweDAxMTgsIDB4MDgwYywgMHg2YTlhLCAweDExNzAsIDB4MDgwYywgMHg2N2U0LCAweDIwMDksCi0JMHgwMDAyLCAweDAxMjgsIDB4MDgwYywgMHg2ODk4LCAweDExNzAsIDB4MjAwOSwgMHgwMDAzLCAweGE4OTcsCi0JMHg0MDA1LCAweGE5OWEsIDB4MDAxMCwgMHhhODk3LCAweDQwMDYsIDB4OTAwZSwgMHg5MDg1LCAweDAwMDEsCi0JMHgyMDAxLCAweDAwMzAsIDB4MDAwNSwgMHhhODk3LCAweDQwMDAsIDB4MjAwMSwgMHgxOTgxLCAweDIwMDQsCi0JMHhkMGZjLCAweDExMjgsIDB4MDgwYywgMHg1N2RiLCAweDAxMTAsIDB4OTAwNiwgMHgwMDE4LCAweDkwMGUsCi0JMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDM1ZGQsCi0JMHg3OThjLCAweDIwMDEsIDB4MTk4MCwgMHg5MThjLCAweDgwMDAsIDB4MjEwMiwgMHgwODBjLCAweDRiYTAsCi0JMHgwOTA0LCAweDM1ZTAsIDB4MDgwYywgMHg2YTkyLCAweDAxMjAsIDB4MDgwYywgMHg2YTlhLCAweDE5MDQsCi0JMHgzNWUwLCAweDA4MGMsIDB4NjdlNCwgMHgwOTA0LCAweDM1ZGQsIDB4MDgwYywgMHg2ODg2LCAweDA5MDQsCi0JMHgzNWRkLCAweDIwMDEsIDB4MTk4MCwgMHgyMDA0LCAweGQwZmMsIDB4MTkwNCwgMHgzNWFiLCAweDA4MDQsCi0JMHg0NWUxLCAweGE5YTAsIDB4MjAwMSwgMHgxOTgwLCAweDkxOGMsIDB4ODAwMCwgMHhjMThkLCAweDIxMDIsCi0JMHgwODBjLCAweDRiYWQsIDB4MDFhMCwgMHgwODBjLCAweDZhOTIsIDB4MDExOCwgMHgwODBjLCAweDZhOWEsCi0JMHgxMTcwLCAweDA4MGMsIDB4NjdlNCwgMHgyMDA5LCAweDAwMDIsIDB4MDEyOCwgMHgwODBjLCAweDY4ODYsCi0JMHgxMTcwLCAweDIwMDksIDB4MDAwMywgMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLCAweGE4OTcsCi0JMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LCAweGE4OTcsCi0JMHg0MDAwLCAweDIwMDEsIDB4MTk4MCwgMHgyMDA0LCAweGQwZmMsIDB4MTEyOCwgMHgwODBjLCAweDU3ZGIsCi0JMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsCi0JMHgwMDA1LCAweDYxMDAsIDB4MDgwNCwgMHgzNWFiLCAweDA4MGMsIDB4NGJiYywgMHgwOTA0LCAweDM1ZTAsCi0JMHgwODBjLCAweDU3ZTcsIDB4MTkwNCwgMHgzNWRkLCAweDc5YTgsIDB4ZDE4NCwgMHgxMTU4LCAweGI4MzQsCi0JMHg4MDA3LCAweDc4OWUsIDB4YjgzMCwgMHg4MDA3LCAweDc4OWEsIDB4YmIyYywgMHg4MzFmLCAweGJhMjgsCi0JMHg4MjE3LCAweDAwNTAsIDB4YjgyNCwgMHg4MDA3LCAweDc4OWUsIDB4YjgyMCwgMHg4MDA3LCAweDc4OWEsCi0JMHhiYjFjLCAweDgzMWYsIDB4YmExOCwgMHg4MjE3LCAweGI5MDAsIDB4OTE4YywgMHgwMjAyLCAweDA4MDQsCi0JMHgzNWFiLCAweDc4YTgsIDB4OTA5YywgMHgwMDAzLCAweGQwYWMsIDB4MTE1OCwgMHhkMGI0LCAweDExNDgsCi0JMHg5MzlhLCAweDAwMDMsIDB4MWEwNCwgMHgzNWRkLCAweDYyNWMsIDB4Nzg4NCwgMHg5MjA2LCAweDE5MDQsCi0JMHg0NzljLCAweDA4MGMsIDB4ODgxOCwgMHgyMDAxLCAweGZmZWMsIDB4MjAwOSwgMHgwMDBjLCAweDdhOGMsCi0JMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgyMDM5LCAweDAwMDAsIDB4MDAwNiwgMHg3OGE4LCAweDkwODQsCi0JMHgwMDgwLCAweDE1MjgsIDB4MDAwNiwgMHgwMDM2LCAweDIwMDEsIDB4MWE4NCwgMHgyMDFjLCAweDdiOWEsCi0JMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgxYTg1LCAweDIwMWMsIDB4N2I5ZSwgMHgyMDAzLCAweDAwMDAsCi0JMHgyMDAxLCAweDFhODYsIDB4MjAxYywgMHg3YmFlLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDFhODAsCi0JMHgyMDFjLCAweDdiYWEsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MWE4NywgMHgyMDFjLCAweDdiYjIsCi0JMHgyMDAzLCAweDAwMDAsIDB4MDAzZSwgMHgwMDBlLCAweDAwMGUsIDB4MDgwNCwgMHg0YmQ1LCAweDAwMGUsCisJMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyNDA5LCAweDc4MmMsIDB4ZDBmYywgMHgwOWE4LCAweDA4MGMsCisJMHgxZWViLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDE5NzgsIDB4NzgyYiwgMHgwMDA0LCAweDc4MmMsCisJMHhkMGFjLCAweDFkZTgsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjQwOSwgMHg3ODJiLCAweDAwMDIsCisJMHg3MDAzLCAweDAwMDAsIDB4MDgwYywgMHgxY2VmLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweGE4ODAsCisJMHhkMGZjLCAweDExYTgsIDB4OGM2MCwgMHgyYzA1LCAweDkwMDUsIDB4MDExMCwgMHg4YTUxLCAweDAwMDUsCisJMHhhMDA0LCAweDkwMDUsIDB4MDE2OCwgMHhhODVhLCAweDIwNDAsIDB4YTA2NCwgMHg5MDg0LCAweDAwMGYsCisJMHg5MDgwLCAweDIwYzcsIDB4MjA2NSwgMHg4Y2ZmLCAweDA5MGMsIDB4MGRjNSwgMHg4YTUxLCAweDAwMDUsCisJMHgyMDUwLCAweDAwMDUsIDB4YTg4MCwgMHhkMGZjLCAweDExYjgsIDB4OGE1MCwgMHg4YzYxLCAweDJjMDUsCisJMHg5MDA1LCAweDExOTAsIDB4MjgwMCwgMHg5OTA2LCAweDAxMjAsIDB4YTAwMCwgMHg5MDA1LCAweDExMDgsCisJMHgyOTAwLCAweDIwNDAsIDB4YTg1YSwgMHhhMDY0LCAweDkwODQsIDB4MDAwZiwgMHg5MDgwLCAweDIwZDcsCisJMHgyMDY1LCAweDhjZmYsIDB4MDkwYywgMHgwZGM1LCAweDAwMDUsIDB4MDAwMCwgMHgwMDFkLCAweDAwMjEsCisJMHgwMDI1LCAweDAwMjksIDB4MDAyZCwgMHgwMDMxLCAweDAwMzUsIDB4MDAwMCwgMHgwMDFiLCAweDAwMjEsCisJMHgwMDI3LCAweDAwMmQsIDB4MDAzMywgMHgwMDAwLCAweDAwMDAsIDB4MDAyMywgMHgwMDAwLCAweDAwMDAsCisJMHgyMGJhLCAweDIwYjYsIDB4MjBiYSwgMHgyMGJhLCAweDIwYzQsIDB4MDAwMCwgMHgyMGJhLCAweDIwYzEsCisJMHgyMGMxLCAweDIwYmUsIDB4MjBjMSwgMHgyMGMxLCAweDAwMDAsIDB4MjBjNCwgMHgyMGMxLCAweDAwMDAsCisJMHgyMGJjLCAweDIwYmMsIDB4MDAwMCwgMHgyMGJjLCAweDIwYzQsIDB4MDAwMCwgMHgyMGJjLCAweDIwYzIsCisJMHgyMGMyLCAweDIwYzIsIDB4MDAwMCwgMHgyMGMyLCAweDAwMDAsIDB4MjBjNCwgMHgyMGMyLCAweDAwYzYsCisJMHgwMGQ2LCAweDAwODYsIDB4YWI0MiwgMHhhYzNlLCAweGE4ODgsIDB4OTA1NSwgMHgwOTA0LCAweDIyYzYsCisJMHgyOTQwLCAweGEwNjQsIDB4OTBlYywgMHgwMDBmLCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDgsCisJMHgxMTE4LCAweDIwNjEsIDB4MjBjMiwgMHgwMGQwLCAweDlkZTAsIDB4MjBjNywgMHg5ZDg2LCAweDAwMDcsCisJMHgwMTMwLCAweDlkODYsIDB4MDAwZSwgMHgwMTE4LCAweDlkODYsIDB4MDAwZiwgMHgxMTIwLCAweGEwOGMsCisJMHg5NDIyLCAweGEwOTAsIDB4OTMxYiwgMHgyYzA1LCAweDkwNjUsIDB4MTE0MCwgMHgwMzEwLCAweDA4MDQsCisJMHgyMmM2LCAweGEwMDQsIDB4OTA0NSwgMHgwOTA0LCAweDIyYzYsIDB4MDhkOCwgMHgyYzA1LCAweDkwMDUsCisJMHgwOTA0LCAweDIxYWUsIDB4ZGQ5YywgMHgxOTA0LCAweDIxNmEsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsCisJMHgwZGM1LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDIxM2YsIDB4MjEzZiwgMHgyMTQxLCAweDIxM2YsCisJMHgyMTNmLCAweDIxM2YsIDB4MjE0NywgMHgyMTNmLCAweDIxM2YsIDB4MjEzZiwgMHgyMTRkLCAweDIxM2YsCisJMHgyMTNmLCAweDIxM2YsIDB4MjE1MywgMHgyMTNmLCAweDIxM2YsIDB4MjEzZiwgMHgyMTU5LCAweDIxM2YsCisJMHgyMTNmLCAweDIxM2YsIDB4MjE1ZiwgMHgyMTNmLCAweDIxM2YsIDB4MjEzZiwgMHgyMTY1LCAweDA4MGMsCisJMHgwZGM1LCAweGEwN2MsIDB4OTQyMiwgMHhhMDgwLCAweDkzMWIsIDB4MDgwNCwgMHgyMWE0LCAweGEwOGMsCisJMHg5NDIyLCAweGEwOTAsIDB4OTMxYiwgMHgwODA0LCAweDIxYTQsIDB4YTA5YywgMHg5NDIyLCAweGEwYTAsCisJMHg5MzFiLCAweDA4MDQsIDB4MjFhNCwgMHhhMGFjLCAweDk0MjIsIDB4YTBiMCwgMHg5MzFiLCAweDA4MDQsCisJMHgyMWE0LCAweGEwYmMsIDB4OTQyMiwgMHhhMGMwLCAweDkzMWIsIDB4MDgwNCwgMHgyMWE0LCAweGEwY2MsCisJMHg5NDIyLCAweGEwZDAsIDB4OTMxYiwgMHgwODA0LCAweDIxYTQsIDB4YTBkYywgMHg5NDIyLCAweGEwZTAsCisJMHg5MzFiLCAweDA0ZDAsIDB4OTA4YSwgMHgwMDM0LCAweDFhMGMsIDB4MGRjNSwgMHg5MDgyLCAweDAwMWIsCisJMHgwMDAyLCAweDIxOGMsIDB4MjE4YSwgMHgyMThhLCAweDIxOGEsIDB4MjE4YSwgMHgyMThhLCAweDIxOTEsCisJMHgyMThhLCAweDIxOGEsIDB4MjE4YSwgMHgyMThhLCAweDIxOGEsIDB4MjE5NiwgMHgyMThhLCAweDIxOGEsCisJMHgyMThhLCAweDIxOGEsIDB4MjE4YSwgMHgyMTliLCAweDIxOGEsIDB4MjE4YSwgMHgyMThhLCAweDIxOGEsCisJMHgyMThhLCAweDIxYTAsIDB4MDgwYywgMHgwZGM1LCAweGEwN2MsIDB4OTQyMiwgMHhhMDgwLCAweDkzMWIsCisJMHgwMDk4LCAweGEwOTQsIDB4OTQyMiwgMHhhMDk4LCAweDkzMWIsIDB4MDA3MCwgMHhhMGFjLCAweDk0MjIsCisJMHhhMGIwLCAweDkzMWIsIDB4MDA0OCwgMHhhMGM0LCAweDk0MjIsIDB4YTBjOCwgMHg5MzFiLCAweDAwMjAsCisJMHhhMGRjLCAweDk0MjIsIDB4YTBlMCwgMHg5MzFiLCAweDA2MzAsIDB4MjMwMCwgMHg5NDA1LCAweDAxNjAsCisJMHg4YTUxLCAweDA5MDQsIDB4MjJjNiwgMHg4YzYwLCAweDA4MDQsIDB4MjExNiwgMHhhMDA0LCAweDkwNDUsCisJMHgwOTA0LCAweDIyYzYsIDB4MDgwNCwgMHgyMGYxLCAweDhhNTEsIDB4MDkwNCwgMHgyMmM2LCAweDhjNjAsCisJMHgyYzA1LCAweDkwMDUsIDB4MTE1OCwgMHhhMDA0LCAweDkwNDUsIDB4MDkwNCwgMHgyMmM2LCAweGEwNjQsCisJMHg5MGVjLCAweDAwMGYsIDB4OWRlMCwgMHgyMGM3LCAweDJjMDUsIDB4MjA2MCwgMHhhODgwLCAweGMwZmMsCisJMHhhODgyLCAweDA4MDQsIDB4MjJiYiwgMHgyYzA1LCAweDg0MjIsIDB4ODQyMCwgMHg4MzFhLCAweDkzOTksCisJMHgwMDAwLCAweGFjMmUsIDB4YWIzMiwgMHhkZDljLCAweDE5MDQsIDB4MjI1OCwgMHg5MDgyLCAweDAwMWIsCisJMHgwMDAyLCAweDIxZjQsIDB4MjFmNCwgMHgyMWY2LCAweDIxZjQsIDB4MjFmNCwgMHgyMWY0LCAweDIyMDQsCisJMHgyMWY0LCAweDIxZjQsIDB4MjFmNCwgMHgyMjEyLCAweDIxZjQsIDB4MjFmNCwgMHgyMWY0LCAweDIyMjAsCisJMHgyMWY0LCAweDIxZjQsIDB4MjFmNCwgMHgyMjJlLCAweDIxZjQsIDB4MjFmNCwgMHgyMWY0LCAweDIyM2MsCisJMHgyMWY0LCAweDIxZjQsIDB4MjFmNCwgMHgyMjRhLCAweDA4MGMsIDB4MGRjNSwgMHhhMTdjLCAweDI0MDAsCisJMHg5MTIyLCAweGExODAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGRjNSwgMHhhMDc0LCAweDk0MjAsCisJMHhhMDc4LCAweDkzMTksIDB4MDgwNCwgMHgyMmI2LCAweGExOGMsIDB4MjQwMCwgMHg5MTIyLCAweGExOTAsCisJMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGM1LCAweGEwODQsIDB4OTQyMCwgMHhhMDg4LCAweDkzMTksCisJMHgwODA0LCAweDIyYjYsIDB4YTE5YywgMHgyNDAwLCAweDkxMjIsIDB4YTFhMCwgMHgyMzAwLCAweDkxMWIsCisJMHgwYTBjLCAweDBkYzUsIDB4YTA5NCwgMHg5NDIwLCAweGEwOTgsIDB4OTMxOSwgMHgwODA0LCAweDIyYjYsCisJMHhhMWFjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWIwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkYzUsCisJMHhhMGE0LCAweDk0MjAsIDB4YTBhOCwgMHg5MzE5LCAweDA4MDQsIDB4MjJiNiwgMHhhMWJjLCAweDI0MDAsCisJMHg5MTIyLCAweGExYzAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGRjNSwgMHhhMGI0LCAweDk0MjAsCisJMHhhMGI4LCAweDkzMTksIDB4MDgwNCwgMHgyMmI2LCAweGExY2MsIDB4MjQwMCwgMHg5MTIyLCAweGExZDAsCisJMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGM1LCAweGEwYzQsIDB4OTQyMCwgMHhhMGM4LCAweDkzMTksCisJMHgwODA0LCAweDIyYjYsIDB4YTFkYywgMHgyNDAwLCAweDkxMjIsIDB4YTFlMCwgMHgyMzAwLCAweDkxMWIsCisJMHgwYTBjLCAweDBkYzUsIDB4YTBkNCwgMHg5NDIwLCAweGEwZDgsIDB4OTMxOSwgMHgwODA0LCAweDIyYjYsCisJMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgyMjc2LCAweDIyNzQsIDB4MjI3NCwgMHgyMjc0LCAweDIyNzQsCisJMHgyMjc0LCAweDIyODMsIDB4MjI3NCwgMHgyMjc0LCAweDIyNzQsIDB4MjI3NCwgMHgyMjc0LCAweDIyOTAsCisJMHgyMjc0LCAweDIyNzQsIDB4MjI3NCwgMHgyMjc0LCAweDIyNzQsIDB4MjI5ZCwgMHgyMjc0LCAweDIyNzQsCisJMHgyMjc0LCAweDIyNzQsIDB4MjI3NCwgMHgyMmFhLCAweDA4MGMsIDB4MGRjNSwgMHhhMTdjLCAweDI0MDAsCisJMHg5MTIyLCAweGExODAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGRjNSwgMHhhMDZjLCAweDk0MjAsCisJMHhhMDcwLCAweDkzMTksIDB4MDQ5OCwgMHhhMTk0LCAweDI0MDAsIDB4OTEyMiwgMHhhMTk4LCAweDIzMDAsCisJMHg5MTFiLCAweDBhMGMsIDB4MGRjNSwgMHhhMDg0LCAweDk0MjAsIDB4YTA4OCwgMHg5MzE5LCAweDA0MzAsCisJMHhhMWFjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWIwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkYzUsCisJMHhhMDljLCAweDk0MjAsIDB4YTBhMCwgMHg5MzE5LCAweDAwYzgsIDB4YTFjNCwgMHgyNDAwLCAweDkxMjIsCisJMHhhMWM4LCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkYzUsIDB4YTBiNCwgMHg5NDIwLCAweGEwYjgsCisJMHg5MzE5LCAweDAwNjAsIDB4YTFkYywgMHgyNDAwLCAweDkxMjIsIDB4YTFlMCwgMHgyMzAwLCAweDkxMWIsCisJMHgwYTBjLCAweDBkYzUsIDB4YTBjYywgMHg5NDIwLCAweGEwZDAsIDB4OTMxOSwgMHhhYzFlLCAweGFiMjIsCisJMHhhODgwLCAweGMwZmQsIDB4YTg4MiwgMHgyODAwLCAweGE4NWEsIDB4MmMwMCwgMHhhODEyLCAweDJhMDAsCisJMHhhODE2LCAweDAwMGUsIDB4MDAwZSwgMHgwMDBlLCAweDkwMDYsIDB4MDAyOCwgMHgwMDhlLCAweDAwZGUsCisJMHgwMGNlLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LCAweGQwYmMsCisJMHgxOTBjLCAweDBkYmUsIDB4OTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4MjJlNywgMHgxZWViLCAweDIyZTcsCisJMHgyMmRkLCAweDIyZTAsIDB4MjJlMywgMHgyMmUwLCAweDIyZTMsIDB4MDgwYywgMHgxZWViLCAweDAwMDUsCisJMHgwODBjLCAweDExYjIsIDB4MDAwNSwgMHgwODBjLCAweDFlZWIsIDB4MDgwYywgMHgxMWIyLCAweDAwMDUsCisJMHgwMTI2LCAweDIwOTEsIDB4MjYwMCwgMHgyMDc5LCAweDAyMDAsIDB4MjA3MSwgMHgwMjYwLCAweDIwNjksCisJMHgxODAwLCAweDc4MTcsIDB4MDAwMCwgMHg3ODliLCAweDA4MTQsIDB4NzhhMywgMHgwNDA2LCAweDc4OWYsCisJMHgwNDEwLCAweDIwMDksIDB4MDEzYiwgMHgyMDBiLCAweDA0MDAsIDB4NzgxYiwgMHgwMDAyLCAweDc4M2IsCisJMHgwMDFmLCAweDc4MzcsIDB4MDAyMCwgMHg3ODAzLCAweDE2MDAsIDB4MDEyZSwgMHgwMDA1LCAweDIwOTEsCisJMHgyNjAwLCAweDc4MWMsIDB4ZDBhNCwgMHgxOTBjLCAweDI0MDYsIDB4NzkwMCwgMHhkMWRjLCAweDExMTgsCisJMHg5MDg0LCAweDAwMDYsIDB4MDAxYSwgMHg5MDg0LCAweDAwMGUsIDB4MDAwMiwgMHgyMzJlLCAweDIzMjYsCisJMHg4MDgxLCAweDIzMjYsIDB4MjMyOCwgMHgyMzI4LCAweDIzMjgsIDB4MjMyOCwgMHg4MDY3LCAweDIzMjYsCisJMHgyMzJhLCAweDIzMjYsIDB4MjMyOCwgMHgyMzI2LCAweDIzMjgsIDB4MjMyNiwgMHgwODBjLCAweDBkYzUsCisJMHgwMDMxLCAweDAwMjAsIDB4MDgwYywgMHg4MDY3LCAweDA4MGMsIDB4ODA4MSwgMHgwMDA1LCAweDAwMDYsCisJMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHhmMGEwLCAweDc5MzAsIDB4OTE4NCwgMHgwMDAzLCAweDAxYzAsCisJMHgyMDAxLCAweDE5ZjcsIDB4MjAwNCwgMHg5MDA1LCAweDAxNzAsIDB4MjAwMSwgMHgwMTMzLCAweDIwMDQsCisJMHg5MDA1LCAweDA5MGMsIDB4MGRjNSwgMHgwMGM2LCAweDIwMDEsIDB4MTlmNywgMHgyMDY0LCAweDA4MGMsCisJMHhjY2YzLCAweDAwY2UsIDB4MDBmOCwgMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyNDA5LCAweDAwZDAsCisJMHg5MTg0LCAweDAwMTQsIDB4MDFhMCwgMHg2YTAwLCAweDkyODYsIDB4MDAwMywgMHgwMTYwLCAweDA4MGMsCisJMHg3NjM3LCAweDExMzgsIDB4MDgwYywgMHg3OTMyLCAweDA4MGMsIDB4NjEyZSwgMHgwODBjLCAweDc1NjMsCisJMHgwMDEwLCAweDA4MGMsIDB4NWZlZCwgMHgwODBjLCAweDgxMzAsIDB4MDA0MSwgMHgwMDE4LCAweDkxODQsCisJMHg5NTQwLCAweDFkYzgsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LCAweDAwMzYsCisJMHgwMDQ2LCAweDAwNTYsIDB4MjA3MSwgMHgxYTY1LCAweDA4MGMsIDB4MWFkOSwgMHgwMDVlLCAweDAwNGUsCisJMHgwMDNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4MmUwMCwgMHgyMDcxLCAweDE4MDAsCisJMHg3MTI4LCAweDIwMDEsIDB4MTk2ZiwgMHgyMTAyLCAweDIwMDEsIDB4MTk3NywgMHgyMTAyLCAweDIwMDEsCisJMHgwMTNiLCAweDIxMDIsIDB4MjA3OSwgMHgwMjAwLCAweDIwMDEsIDB4MDIwMSwgMHg3ODllLCAweDc4YTMsCisJMHgwMjAwLCAweDkxOTgsIDB4MDAwNywgMHg4MzFjLCAweDgzMWMsIDB4ODMxYywgMHg5Mzk4LCAweDAwMDUsCisJMHgyMzIwLCAweDkxODIsIDB4MDIwNCwgMHgxMjMwLCAweDIwMTEsIDB4MDAwOCwgMHg4NDIzLCAweDg0MjMsCisJMHg4NDIzLCAweDA0ODgsIDB4OTE4MiwgMHgwMjRjLCAweDEyNDAsIDB4MjAxMSwgMHgwMDA3LCAweDg0MDMsCisJMHg4MDAzLCAweDk0MDAsIDB4OTQwMCwgMHg5NDIwLCAweDA0MzAsIDB4OTE4MiwgMHgwMmJjLCAweDEyMzgsCisJMHgyMDExLCAweDAwMDYsIDB4ODQwMywgMHg4MDAzLCAweDk0MDAsIDB4OTQyMCwgMHgwMGUwLCAweDkxODIsCisJMHgwMzRjLCAweDEyMzAsIDB4MjAxMSwgMHgwMDA1LCAweDg0MDMsIDB4ODAwMywgMHg5NDIwLCAweDAwOTgsCisJMHg5MTgyLCAweDA0MmMsIDB4MTIyOCwgMHgyMDExLCAweDAwMDQsIDB4ODQyMywgMHg4NDIzLCAweDAwNTgsCisJMHg5MTgyLCAweDA1OWMsIDB4MTIyOCwgMHgyMDExLCAweDAwMDMsIDB4ODQwMywgMHg5NDIwLCAweDAwMTgsCisJMHgyMDExLCAweDAwMDIsIDB4ODQyMywgMHg5NDgyLCAweDAyMjgsIDB4ODAwMiwgMHg4MDIwLCAweDgzMDEsCisJMHg5NDAyLCAweDAxMTAsIDB4MDIwOCwgMHg4MzIxLCAweDgyMTcsIDB4ODIwMywgMHg5NDA1LCAweDc4OWEsCisJMHgwMTJlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGQ2LCAweDIwNjksIDB4MDIwMCwgMHg2ODE0LCAweDkwODQsCisJMHhmZmMwLCAweDkxMGQsIDB4NjkxNiwgMHgwMGRlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksCisJMHgwMjAwLCAweDkwMDUsIDB4NjgxMCwgMHgwMTEwLCAweGMwYTUsIDB4MDAwOCwgMHhjMGE0LCAweDY4MTIsCisJMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGQ2LCAweDIwNjksIDB4MDIwMCwgMHg2ODEwLCAweDkwODQsCisJMHhmZmY4LCAweDkxMGQsIDB4NjkxMiwgMHgwMGRlLCAweDAwMGUsIDB4MDAwNSwgMHg3OTM4LCAweDA4MGMsCisJMHgwZGJlLCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLCAweDc5MDIsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsCisJMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHg3OTAyLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsCisJMHhhMDAxLCAweGEwMDEsIDB4MDBmZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDIwNjEsCisJMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgyYzY3LCAweDA4MGMsCisJMHgyYjgyLCAweDYwNTQsIDB4ODAwNCwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg5MDg0LCAweDAwMGMsCisJMHg2MTUwLCAweDkxOGMsIDB4ZmZmMywgMHg5MTA1LCAweDYwNTIsIDB4NjA1MCwgMHg5MDg0LCAweGIxN2YsCisJMHg5MDg1LCAweDIwMDAsIDB4NjA1MiwgMHgyMDA5LCAweDE5OWQsIDB4MjAxMSwgMHgxOTllLCAweDYzNTgsCisJMHg5MzljLCAweDM4ZjAsIDB4MjMyMCwgMHgwODBjLCAweDJiYzYsIDB4MTIzOCwgMHg5MzlkLCAweDQwMDMsCisJMHg5NGE1LCAweDg2MDMsIDB4MjMwYSwgMHgyNDEyLCAweDAwMzAsIDB4OTM5ZCwgMHgwMjAzLCAweDk0YTUsCisJMHg4NjAzLCAweDIzMGEsIDB4MjQxMiwgMHg5MDA2LCAweDA4MGMsIDB4MmJiMSwgMHg5MDA2LCAweDA4MGMsCisJMHgyYjk0LCAweDIwYTksIDB4MDAxMiwgMHgxZDA0LCAweDI0NWIsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsCisJMHgyNDViLCAweDYwMmYsIDB4MDEwMCwgMHg2MDJmLCAweDAwMDAsIDB4NjA1MCwgMHg5MDg1LCAweDA0MDAsCisJMHg5MDg0LCAweGRmZmYsIDB4NjA1MiwgMHg2MDI0LCAweDYwMjYsIDB4MDgwYywgMHgyOGFjLCAweDIwMDksCisJMHgwMGVmLCAweDYxMzIsIDB4NjEzNiwgMHgwODBjLCAweDI4YmMsIDB4NjBlNywgMHgwMDAwLCAweDYxZWEsCisJMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLCAweDIwMDEsIDB4MDAwMiwgMHgxMTEwLCAweDIwMDEsCisJMHgwMDA4LCAweDYwZTIsIDB4NjA0YiwgMHhmN2Y3LCAweDYwNDMsIDB4MDAwMCwgMHg2MDJmLCAweDAwODAsCisJMHg2MDJmLCAweDAwMDAsIDB4NjAwNywgMHgzNDlmLCAweDYwYmIsIDB4MDAwMCwgMHgyMGE5LCAweDAwMTgsCisJMHg2MGJmLCAweDAwMDAsIDB4MWYwNCwgMHgyNDkwLCAweDYwYmIsIDB4MDAwMCwgMHg2MGJmLCAweDAxMDgsCisJMHg2MGJmLCAweDAwMTIsIDB4NjBiZiwgMHgwNDA1LCAweDYwYmYsIDB4MDAxNCwgMHg2MGJmLCAweDAzMjAsCisJMHg2MGJmLCAweDAwMTgsIDB4NjAxYiwgMHgwMGYwLCAweDYwMWYsIDB4MDAxZSwgMHg2MDBmLCAweDAwNmIsCisJMHg2MDJiLCAweDQwMmYsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMTQwLCAweDc4YzMsCisJMHgwMDgwLCAweDc4YzMsIDB4MDA4MywgMHg3OGMzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDIwMDEsCisJMHgxODM1LCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDE4MzQsIDB4MjAwMywgMHgwMDAxLCAweDAwMDUsCisJMHgwMTI2LCAweDIwOTEsIDB4MjgwMCwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHg2MTI0LCAweDAwNjYsCisJMHgyMDMxLCAweDE4MzcsIDB4MjYzNCwgMHg5NmI0LCAweDAwMjgsIDB4MDA2ZSwgMHgxMTM4LCAweDYwMjAsCisJMHhkMWJjLCAweDAxMjAsIDB4ZDBiYywgMHgxMTY4LCAweGQwYjQsIDB4MTE5OCwgMHg5MTg0LCAweDVlMmMsCisJMHgxMTE4LCAweDkxODQsIDB4MDAwNywgMHgwMGFhLCAweDkxOTUsIDB4MDAwNCwgMHg5Mjg0LCAweDAwMDcsCisJMHgwMDgyLCAweDAwMTYsIDB4MjAwMSwgMHgxODhiLCAweDIwMGMsIDB4ZDE4NCwgMHgwMDFlLCAweDBkNzAsCisJMHgwYzk4LCAweDAwMTYsIDB4MjAwMSwgMHgxODhiLCAweDIwMGMsIDB4ZDE5NCwgMHgwMDFlLCAweDBkMzAsCisJMHgwYzU4LCAweDI1MTMsIDB4MjRmOSwgMHgyNGZjLCAweDI0ZmYsIDB4MjUwNCwgMHgyNTA2LCAweDI1MGEsCisJMHgyNTBlLCAweDA4MGMsIDB4OTNlMiwgMHgwMGI4LCAweDA4MGMsIDB4OTRiMSwgMHgwMGEwLCAweDA4MGMsCisJMHg5NGIxLCAweDA4MGMsIDB4OTNlMiwgMHgwMDc4LCAweDAwOTksIDB4MDA2OCwgMHgwODBjLCAweDkzZTIsCisJMHgwMDc5LCAweDAwNDgsIDB4MDgwYywgMHg5NGIxLCAweDAwNTksIDB4MDAyOCwgMHgwODBjLCAweDk0YjEsCisJMHgwODBjLCAweDkzZTIsIDB4MDAyOSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsCisJMHgwMGE2LCAweDYxMjQsIDB4NjAyOCwgMHhkMDljLCAweDAxMTgsIDB4ZDE5YywgMHgxOTA0LCAweDI3ODQsCisJMHhkMWY0LCAweDE5MGMsIDB4MGRiZSwgMHgwODBjLCAweDc2MzcsIDB4MDkwNCwgMHgyNTZlLCAweDA4MGMsCisJMHhkN2UzLCAweDExMjAsIDB4NzAwMCwgMHg5MDg2LCAweDAwMDMsIDB4MDU3MCwgMHg2MDI0LCAweDkwODQsCisJMHgxODAwLCAweDA1NTAsIDB4MDgwYywgMHg3NjVhLCAweDAxMTgsIDB4MDgwYywgMHg3NjQ4LCAweDE1MjAsCisJMHg2MDI3LCAweDAwMjAsIDB4NjA0MywgMHgwMDAwLCAweDA4MGMsIDB4ZDdlMywgMHgwMTY4LCAweDA4MGMsCisJMHg3NjVhLCAweDExNTAsIDB4MjAwMSwgMHgxOWE4LCAweDIwMDMsIDB4MDAwMSwgMHg2MDI3LCAweDE4MDAsCisJMHgwODBjLCAweDc0YjIsIDB4MDgwNCwgMHgyNzg3LCAweDcwYTQsIDB4OTAwNSwgMHgxMTUwLCAweDcwYTcsCisJMHgwMDAxLCAweDAwZDYsIDB4MjA2OSwgMHgwMTQwLCAweDA4MGMsIDB4NzY4YiwgMHgwMGRlLCAweDE5MDQsCisJMHgyNzg3LCAweDA4MGMsIDB4NzkzYywgMHgwNDI4LCAweDA4MGMsIDB4NzY1YSwgMHgxNTkwLCAweDYwMjQsCisJMHg5MDg0LCAweDE4MDAsIDB4MTEwOCwgMHgwNDY4LCAweDA4MGMsIDB4NzkzYywgMHgwODBjLCAweDc5MzIsCisJMHgwODBjLCAweDYxMmUsIDB4MDgwYywgMHg3NTYzLCAweDA4MDQsIDB4Mjc4NCwgMHhkMWFjLCAweDE1MDgsCisJMHg2MDI0LCAweGQwZGMsIDB4MTE3MCwgMHhkMGU0LCAweDExNzgsIDB4ZDBkNCwgMHgxMTkwLCAweGQwY2MsCisJMHgwMTMwLCAweDcwOTgsIDB4OTA4NiwgMHgwMDI5LCAweDExMTAsIDB4MDgwYywgMHg3ODE4LCAweDA4MDQsCisJMHgyNzg0LCAweDA4MGMsIDB4NzkzNywgMHgwMDQ4LCAweDIwMDEsIDB4MTk3ZCwgMHgyMDAzLCAweDAwMDIsCisJMHgwMDIwLCAweDA4MGMsIDB4Nzc3NCwgMHgwODA0LCAweDI3ODQsIDB4MDgwYywgMHg3OGJhLCAweDA4MDQsCisJMHgyNzg0LCAweDYyMjAsIDB4ZDFiYywgMHgwMTM4LCAweGQyYmMsIDB4MTkwNCwgMHgyN2UxLCAweGQyYjQsCisJMHgxOTA0LCAweDI3ZjQsIDB4MDAwMCwgMHhkMWFjLCAweDA5MDQsIDB4MjY5OSwgMHgwMDM2LCAweDYzMjgsCisJMHhjM2JjLCAweDYzMmEsIDB4MDAzZSwgMHgwODBjLCAweDc2MzcsIDB4MTFjMCwgMHg2MDI3LCAweDAwMjAsCisJMHgwMDA2LCAweDAwMjYsIDB4MDAzNiwgMHgwODBjLCAweDc2NTEsIDB4MTE1OCwgMHgwODBjLCAweDc5MzIsCisJMHgwODBjLCAweDYxMmUsIDB4MDgwYywgMHg3NTYzLCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLCAweDAwYWUsCisJMHgwMDA1LCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLCAweDA4MGMsIDB4NzYwZiwgMHgwMDE2LCAweDAwNDYsCisJMHgwMGM2LCAweDY0NGMsIDB4OTQ4NiwgMHhmMGYwLCAweDExMzgsIDB4MjA2MSwgMHgwMTAwLCAweDY0NGEsCisJMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDc0ZGEsIDB4OTQ4YywgMHhmZjAwLCAweDcwMzgsCisJMHhkMDg0LCAweDAxOTAsIDB4MDgwYywgMHhkN2UzLCAweDExMTgsIDB4OTE4NiwgMHhmODAwLCAweDExNjAsCisJMHg3MDQ4LCAweGQwODQsIDB4MTE0OCwgMHhjMDg1LCAweDcwNGEsIDB4MDAzNiwgMHgyNDE4LCAweDIwMTEsCisJMHg4MDE2LCAweDA4MGMsIDB4NGM0NCwgMHgwMDNlLCAweDA4MGMsIDB4ZDdkYywgMHgxOTA0LCAweDI2NzYsCisJMHg5MTk2LCAweGZmMDAsIDB4MDVhOCwgMHg3MDYwLCAweDkwODQsIDB4MDBmZiwgMHg4MTBmLCAweDgxZmYsCisJMHgwMTEwLCAweDkxMTYsIDB4MDU2OCwgMHg3MTMwLCAweGQxODQsIDB4MTU1MCwgMHgwODBjLCAweDMzYWEsCisJMHgwMTI4LCAweGMxOGQsIDB4NzEzMiwgMHgwODBjLCAweDZhOWIsIDB4MTUxMCwgMHg2MjQwLCAweDkyOTQsCisJMHgwMDEwLCAweDAxMzAsIDB4NjI0OCwgMHg5Mjk0LCAweGZmMDAsIDB4OTI5NiwgMHhmZjAwLCAweDAxYzAsCisJMHg3MDMwLCAweGQwOGMsIDB4MDkwNCwgMHgyNjc2LCAweDcwMzgsIDB4ZDA4YywgMHgxMTQwLCAweDIwMDEsCisJMHgxODBjLCAweDIwMGMsIDB4ZDFhYywgMHgxOTA0LCAweDI2NzYsIDB4YzFhZCwgMHgyMTAyLCAweDAwMzYsCisJMHg3M2Q4LCAweDIwMTEsIDB4ODAxMywgMHgwODBjLCAweDRjNDQsIDB4MDAzZSwgMHgwODA0LCAweDI2NzYsCisJMHg3MDM4LCAweGQwOGMsIDB4MTE0MCwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhkMWFjLCAweDE5MDQsCisJMHgyNjc2LCAweGMxYWQsIDB4MjEwMiwgMHgwMDM2LCAweDczZDgsIDB4MjAxMSwgMHg4MDEzLCAweDA4MGMsCisJMHg0YzQ0LCAweDAwM2UsIDB4NzEzMCwgMHhjMTg1LCAweDcxMzIsIDB4MjAxMSwgMHgxODQ4LCAweDIyMGMsCisJMHhkMWE0LCAweDAxZjAsIDB4MDAxNiwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMTAwLCAweDA4MGMsCisJMHg4YTUwLCAweDIwMTksIDB4MDAwZSwgMHgwMGM2LCAweDIwNjEsIDB4MDAwMCwgMHgwODBjLCAweGViYTEsCisJMHgwMGNlLCAweDk0ODQsIDB4MDBmZiwgMHg5MDgwLCAweDMzYjYsIDB4MjAwZCwgMHg5MThjLCAweGZmMDAsCisJMHg4MTBmLCAweDIxMjAsIDB4OTAwNiwgMHgyMDA5LCAweDAwMGUsIDB4MDgwYywgMHhlYzMxLCAweDAwMWUsCisJMHgwMDE2LCAweDIwMDksIDB4MDAwMiwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHgzMjFiLCAweDAwMWUsCisJMHgwMGE4LCAweDAxNTYsIDB4MDBiNiwgMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwODBjLCAweDY3MjQsCisJMHgxMTQwLCAweDcwMzAsIDB4ZDA4NCwgMHgxMTE4LCAweGI4MDAsIDB4ZDBiYywgMHgxMTEwLCAweDA4MGMsCisJMHg2MTQ4LCAweDgxMDgsIDB4MWYwNCwgMHgyNjY2LCAweDAwYmUsIDB4MDE1ZSwgMHgwMGNlLCAweDAwNGUsCisJMHgwODBjLCAweGIyNDQsIDB4NjBlMywgMHgwMDAwLCAweDAwMWUsIDB4MjAwMSwgMHgxODAwLCAweDIwMTQsCisJMHg5Mjk2LCAweDAwMDQsIDB4MTE3MCwgMHhkMTljLCAweDExYTAsIDB4MjAxMSwgMHgxODBjLCAweDIyMTQsCisJMHhkMjljLCAweDExMjAsIDB4NjIwNCwgMHg5Mjk1LCAweDAwMDIsIDB4NjIwNiwgMHg2MjI4LCAweGMyOWQsCisJMHg2MjJhLCAweDIwMDMsIDB4MDAwMSwgMHgyMDAxLCAweDE4MjYsIDB4MjAwMywgMHgwMDAwLCAweDYwMjcsCisJMHgwMDIwLCAweGQxOTQsIDB4MDkwNCwgMHgyNzg0LCAweDAwMTYsIDB4NjIyMCwgMHhkMmI0LCAweDA5MDQsCisJMHgyNzIxLCAweDA4MGMsIDB4ODhjMywgMHgwODBjLCAweGE2ZTksIDB4NjAyNywgMHgwMDA0LCAweDAwZjYsCisJMHgyMDE5LCAweDE5ZjEsIDB4MjMwNCwgMHg5MDdkLCAweDA5MDQsIDB4MjZmMCwgMHg3ODA0LCAweDkwODYsCisJMHgwMDMyLCAweDE1ZjAsIDB4MDBkNiwgMHgwMGM2LCAweDAwZTYsIDB4MDA5NiwgMHgyMDY5LCAweDAxNDAsCisJMHg3ODJjLCAweDY4NWUsIDB4NzgwOCwgMHg2ODVhLCAweDYwNDMsIDB4MDAwMiwgMHgyMDAxLCAweDAwMDMsCisJMHg4MDAxLCAweDFkZjAsIDB4NjA0MywgMHgwMDAwLCAweDIwMDEsIDB4MDAzYywgMHg4MDAxLCAweDFkZjAsCisJMHgwODBjLCAweDJkNDksIDB4MjAwMSwgMHgwMDFlLCAweDgwMDEsIDB4MDI0MCwgMHgyMGE5LCAweDAwMDksCisJMHgwODBjLCAweDJjNDIsIDB4NjkwNCwgMHhkMWRjLCAweDExNDAsIDB4MGNiMCwgMHgyMDAxLCAweDAxMDAsCisJMHgwODBjLCAweDJkMzksIDB4OTAwNiwgMHgwODBjLCAweDJkMzksIDB4MDgwYywgMHg5OWE1LCAweDA4MGMsCisJMHg5YWIxLCAweDc4MTQsIDB4MjA0OCwgMHhhODY3LCAweDAxMDMsIDB4MmY2MCwgMHgwODBjLCAweGIyZDMsCisJMHgwMDllLCAweDAwZWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZmUsIDB4MDAxZSwgMHgwMGFlLCAweDAwMDUsCisJMHgwMGZlLCAweDAwZDYsIDB4MjA2OSwgMHgwMTQwLCAweDY4MDQsIDB4OTA4NCwgMHg0MDAwLCAweDAxMTAsCisJMHgwODBjLCAweDJkNDksIDB4MDBkZSwgMHgwMGM2LCAweDIwNjEsIDB4MTllOCwgMHg2MDI4LCAweDA4MGMsCisJMHhkN2UzLCAweDAxMjAsIDB4OTA5YSwgMHgwMDAzLCAweDEyNTgsIDB4MDAxOCwgMHg5MDlhLCAweDAwYzgsCisJMHgxMjM4LCAweDgwMDAsIDB4NjAyYSwgMHgwMGNlLCAweDA4MGMsIDB4YTZjNSwgMHgwODA0LCAweDI3ODMsCisJMHgyMDYxLCAweDAxMDAsIDB4NjJjMCwgMHgwODBjLCAweGIwY2EsIDB4MjAxOSwgMHgxOWYxLCAweDIzMDQsCisJMHg5MDY1LCAweDAxMjAsIDB4MjAwOSwgMHgwMDI3LCAweDA4MGMsIDB4YjM1MiwgMHgwMGNlLCAweDA4MDQsCisJMHgyNzgzLCAweGQyYmMsIDB4MDkwNCwgMHgyNzZhLCAweDA4MGMsIDB4ODhkMCwgMHg2MDE0LCAweDkwODQsCisJMHgxOTg0LCAweDkwODUsIDB4MDAxMCwgMHg2MDE2LCAweDYwMjcsIDB4MDAwNCwgMHgwMGQ2LCAweDIwNjksCisJMHgwMTQwLCAweDY4MDQsIDB4OTA4NCwgMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyZDQ5LCAweDAwZGUsCisJMHgwMGM2LCAweDIwNjEsIDB4MTllOCwgMHg2MDQ0LCAweDA4MGMsIDB4ZDdlMywgMHgwMTIwLCAweDkwOWEsCisJMHgwMDAzLCAweDE2NTgsIDB4MDAxOCwgMHg5MDlhLCAweDAwYzgsIDB4MTYzOCwgMHg4MDAwLCAweDYwNDYsCisJMHg2MDNjLCAweDAwY2UsIDB4OTAwNSwgMHgwNWI4LCAweDIwMDksIDB4MDdkMCwgMHgwODBjLCAweDg4YzgsCisJMHg5MDgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDYsIDB4MTEzOCwgMHg2MTE0LCAweDkxOGMsCisJMHgxOTg0LCAweDkxOGQsIDB4MDAxMiwgMHg2MTE2LCAweDA0MzAsIDB4OTA4MCwgMHgwMDA4LCAweDIwMDQsCisJMHg5MDg2LCAweDAwMDksIDB4MGQ5OCwgMHg2MTE0LCAweDkxOGMsIDB4MTk4NCwgMHg5MThkLCAweDAwMTYsCisJMHg2MTE2LCAweDAwYzgsIDB4NjAyNywgMHgwMDA0LCAweDAwYjAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsCisJMHgwODBjLCAweGFhNDksIDB4MDAzZSwgMHgyMDE5LCAweDE5ZjcsIDB4MjMwNCwgMHg5MDY1LCAweDAxNTAsCisJMHgyMDA5LCAweDAwNGYsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDksIDB4MTExMCwgMHgyMDA5LCAweDAwNGYsCisJMHgwODBjLCAweGIzNTIsIDB4MDBjZSwgMHgwMDFlLCAweGQxOWMsIDB4MDkwNCwgMHgyN2RjLCAweDcwMzgsCisJMHhkMGFjLCAweDE1MzgsIDB4MDAxNiwgMHgwMTU2LCAweDYwMjcsIDB4MDAwOCwgMHgwODBjLCAweDJkNzMsCisJMHgyMGE5LCAweDAwMjgsIDB4YTAwMSwgMHgxZjA0LCAweDI3OTIsIDB4NjE1MCwgMHg5MTg1LCAweDE0MDAsCisJMHg2MDUyLCAweDIwYTksIDB4MDM2NiwgMHgxZDA0LCAweDI3OWIsIDB4MDgwYywgMHg4OGY3LCAweDYwMjAsCisJMHhkMDljLCAweDExMzAsIDB4MDE1ZSwgMHg2MTUyLCAweDAwMWUsIDB4NjAyNywgMHgwMDA4LCAweDA0YTAsCisJMHgwODBjLCAweDJjMjksIDB4MWYwNCwgMHgyNzliLCAweDAxNWUsIDB4NjE1MiwgMHgwMDFlLCAweDYwMjcsCisJMHgwMDA4LCAweDAwMTYsIDB4NjAyOCwgMHhjMDljLCAweDYwMmEsIDB4MDgwYywgMHhiMjQ0LCAweDYwZTMsCisJMHgwMDAwLCAweDA4MGMsIDB4ZjA3ZiwgMHgwODBjLCAweGYwOWEsIDB4MDgwYywgMHg1N2Q5LCAweGQwZmMsCisJMHgxMTM4LCAweDA4MGMsIDB4ZDdkYywgMHgxMTIwLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDc2N2IsCisJMHg5MDA2LCAweDA4MGMsIDB4MmQzOSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHgyYzY3LCAweDAwZTYsCisJMHgyMDcxLCAweDE4MDAsIDB4NzAwMywgMHgwMDA0LCAweDA4MGMsIDB4MGVhMywgMHgwMGVlLCAweDYwMjcsCisJMHgwMDA4LCAweDA4MGMsIDB4MGJhMCwgMHgwMDFlLCAweDkxOGMsIDB4ZmZkMCwgMHg2MTI2LCAweDAwYWUsCisJMHgwMDA1LCAweDAwMTYsIDB4MjAwMSwgMHgxODhiLCAweDIwMGMsIDB4ZDE4NCwgMHgwMDFlLCAweDA5MDQsCisJMHgyNTliLCAweDAwMTYsIDB4MjAwOSwgMHgyN2VkLCAweDAwZDAsIDB4MjAwMSwgMHgxODhiLCAweDIwMGMsCisJMHhjMTg0LCAweDIxMDIsIDB4MDAxZSwgMHgwYzQwLCAweDAwMTYsIDB4MjAwMSwgMHgxODhiLCAweDIwMGMsCisJMHhkMTk0LCAweDAwMWUsIDB4MDkwNCwgMHgyNTliLCAweDAwMTYsIDB4MjAwOSwgMHgyODAwLCAweDAwMzgsCisJMHgyMDAxLCAweDE4OGIsIDB4MjAwYywgMHhjMTk0LCAweDIxMDIsIDB4MDAxZSwgMHgwOGE4LCAweDYwMjgsCisJMHhjMGJjLCAweDYwMmEsIDB4MjAwMSwgMHgwMTU2LCAweDIwMDMsIDB4YmM5MSwgMHg4MDAwLCAweDIwMDMsCisJMHhmZmZmLCAweDYwNDMsIDB4MDAwMSwgMHgwODBjLCAweDJjNjEsIDB4NjAyNywgMHgwMDgwLCAweDYwMTcsCisJMHgwMDAwLCAweDYwNDMsIDB4MDAwMCwgMHgwODE3LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCisJMHgwMGU2LCAweDAwZjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxODAwLCAweDcxZDAsCisJMHg3MGQyLCAweDkxMTYsIDB4MDkwNCwgMHgyODZiLCAweDgxZmYsIDB4MDFhMCwgMHgyMDA5LCAweDAwMDAsCisJMHgwODBjLCAweDJjNjcsIDB4MjAxMSwgMHg4MDExLCAweDIwMTksIDB4MDEwZSwgMHgyMzFjLCAweDkzOWUsCisJMHgwMDA3LCAweDExMTgsIDB4MjAxOSwgMHgwMDAxLCAweDAwMTAsIDB4MjAxOSwgMHgwMDAwLCAweDA4MGMsCisJMHg0YzQ0LCAweDA0NDgsIDB4MjAwMSwgMHgxOWE5LCAweDIwMGMsIDB4ODFmZiwgMHgxMTQwLCAweDIwMDEsCisJMHgwMTA5LCAweDIwMDQsIDB4ZDBiNCwgMHgwMTE4LCAweDIwMTksIDB4MDAwMywgMHgwMDA4LCAweDIxMTgsCisJMHgyMDExLCAweDgwMTIsIDB4MDgwYywgMHg0YzQ0LCAweDA4MGMsIDB4MGVhMywgMHgwODBjLCAweDU3ZDksCisJMHhkMGZjLCAweDExODgsIDB4MDgwYywgMHhkN2RjLCAweDExNzAsIDB4MDBjNiwgMHgwODBjLCAweDI5MDcsCisJMHgwODBjLCAweGE5YjAsIDB4MjA2MSwgMHgwMTAwLCAweDIwMTksIDB4MDAyOCwgMHgyMDA5LCAweDAwMDIsCisJMHgwODBjLCAweDMyMWIsIDB4MDBjZSwgMHgwMTJlLCAweDAwZmUsIDB4MDBlZSwgMHgwMDNlLCAweDAwMmUsCisJMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgyMDI4LCAweDkxOGMsIDB4MDBmZiwgMHgyMTMwLCAweDkwOTQsCisJMHhmZjAwLCAweDExZjAsIDB4MjAxMSwgMHgxODM3LCAweDIyMTQsIDB4ZDJhYywgMHgxMWM4LCAweDgxZmYsCisJMHgwMWU4LCAweDIwMTEsIDB4MTgxZiwgMHgyMjA0LCAweDkxMDYsIDB4MTE5MCwgMHgyMDExLCAweDE4MjAsCisJMHgyMjE0LCAweDkyOTQsIDB4ZmYwMCwgMHg5NTg0LCAweGZmMDAsIDB4OTIwNiwgMHgxMTQ4LCAweDIwMTEsCisJMHgxODIwLCAweDIyMTQsIDB4OTI5NCwgMHgwMGZmLCAweDk1ODQsIDB4MDBmZiwgMHg5MjA2LCAweDExMjAsCisJMHgyNTAwLCAweDA4MGMsIDB4ODNhNSwgMHgwMDQ4LCAweDk1ODQsIDB4MDBmZiwgMHg5MDgwLCAweDMzYjYsCisJMHgyMDBkLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkwMDYsIDB4MDAwNSwgMHg5MDgwLCAweDMzYjYsCisJMHgyMDBkLCAweDkxOGMsIDB4MDBmZiwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMTQwLCAweDIwMDEsCisJMHgxODE4LCAweDIwMDMsIDB4MDBlZiwgMHgyMGE5LCAweDAwMTAsIDB4OTAwNiwgMHg2ODUyLCAweDY4NTYsCisJMHgxZjA0LCAweDI4YjcsIDB4MDBkZSwgMHgwMDA1LCAweDAwMDYsIDB4MDBkNiwgMHgwMDI2LCAweDIwNjksCisJMHgwMTQwLCAweDIwMDEsIDB4MTgxOCwgMHgyMTAyLCAweDgxMTQsIDB4ODIxNCwgMHg4MjE0LCAweDgyMTQsCisJMHgyMGE5LCAweDAwMTAsIDB4Njg1MywgMHgwMDAwLCAweDkwMDYsIDB4ODJmZiwgMHgxMTI4LCAweDkxODQsCisJMHgwMDBmLCAweDkwODAsIDB4Zjg4MCwgMHgyMDA1LCAweDY4NTYsIDB4ODIxMSwgMHgxZjA0LCAweDI4Y2MsCisJMHgwMDJlLCAweDAwZGUsIDB4MDAwZSwgMHgwMDA1LCAweDAwYzYsIDB4MjA2MSwgMHgxODAwLCAweDYwMzAsCisJMHgwMTEwLCAweGMwOWQsIDB4MDAwOCwgMHhjMDljLCAweDYwMzIsIDB4MDBjZSwgMHgwMDA1LCAweDAxNTYsCisJMHgwMGQ2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LCAweDIwNjksIDB4MDE0MCwgMHg2OTgwLCAweDkxMTYsCisJMHgwMTgwLCAweDkxMTIsIDB4MTIzMCwgMHg4MjEyLCAweDgyMTAsIDB4MjJhOCwgMHgyMDAxLCAweDA0MDIsCisJMHgwMDE4LCAweDIyYTgsIDB4MjAwMSwgMHgwNDA0LCAweDY4MGUsIDB4MWYwNCwgMHgyOGZjLCAweDY4MGYsCisJMHgwMDAwLCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwZGUsIDB4MDE1ZSwgMHgwMDA1LCAweDA4MGMsCisJMHg1N2Q1LCAweGQwYzQsIDB4MDE1MCwgMHhkMGE0LCAweDAxNDAsIDB4OTAwNiwgMHgwMDQ2LCAweDIwMjAsCisJMHgyMDA5LCAweDAwMmUsIDB4MDgwYywgMHhlYzMxLCAweDAwNGUsIDB4MDAwNSwgMHgwMGY2LCAweDAwMTYsCisJMHgwMDI2LCAweDIwNzksIDB4MDE0MCwgMHg3OGM0LCAweGQwZGMsIDB4MDkwNCwgMHgyOTczLCAweDA4MGMsCisJMHgyYmM2LCAweDA2NjAsIDB4OTA4NCwgMHgwNzAwLCAweDkwOGUsIDB4MDYwMCwgMHgxMTIwLCAweDIwMTEsCisJMHg0MDAwLCAweDkwMGUsIDB4MDQ1OCwgMHg5MDhlLCAweDA1MDAsIDB4MTEyMCwgMHgyMDExLCAweDgwMDAsCisJMHg5MDBlLCAweDA0MjAsIDB4OTA4ZSwgMHgwNDAwLCAweDExMjAsIDB4OTAxNiwgMHgyMDA5LCAweDAwMDEsCisJMHgwMGU4LCAweDkwOGUsIDB4MDMwMCwgMHgxMTIwLCAweDkwMTYsIDB4MjAwOSwgMHgwMDAyLCAweDAwYjAsCisJMHg5MDhlLCAweDAyMDAsIDB4MTEyMCwgMHg5MDE2LCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDkwOGUsCisJMHgwMTAwLCAweDE1NDgsIDB4OTAxNiwgMHgyMDA5LCAweDAwMDgsIDB4MDA0MCwgMHg5MDg0LCAweDA3MDAsCisJMHg5MDhlLCAweDAzMDAsIDB4MTUwMCwgMHgyMDExLCAweDAwMzAsIDB4MDA1OCwgMHgyMzAwLCAweDkwODAsCisJMHgwMDIwLCAweDIwMTgsIDB4MDgwYywgMHg5Mzc1LCAweDkyOGMsIDB4ZmYwMCwgMHgwMTEwLCAweDIwMTEsCisJMHgwMGZmLCAweDIyMDAsIDB4ODAwNywgMHg5MDg1LCAweDAwNGMsIDB4NzhjMiwgMHgyMDA5LCAweDAxMzgsCisJMHgyMjBhLCAweDA4MGMsIDB4NzYzNywgMHgxMTE4LCAweDIwMDksIDB4MTk2ZCwgMHgyMjBhLCAweDAwMmUsCisJMHgwMDFlLCAweDAwZmUsIDB4MDAwNSwgMHg3OGMzLCAweDAwMDAsIDB4MGNjOCwgMHgwMTI2LCAweDIwOTEsCisJMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDEsIDB4MDE3MCwgMHgyMDBjLCAweDgwMDAsCisJMHgyMDE0LCAweDkxODQsIDB4MDAwMywgMHgwMTEwLCAweDA4MGMsIDB4MGRiZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLCAweDAxMTgsCisJMHgyMDA5LCAweDAwMDIsIDB4MDAwNSwgMHgyMDAxLCAweDAxNzEsIDB4MjAwNCwgMHhkMGRjLCAweDAxNjgsCisJMHgyMDAxLCAweDAxNzAsIDB4MjAwYywgMHg5MThjLCAweDAwZmYsIDB4OTE4ZSwgMHgwMDRjLCAweDExMjgsCisJMHgyMDBjLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDAwMDUsIDB4OTAwZSwgMHgyMDAxLCAweDAyMjcsCisJMHgyMDA0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDQsIDB4OTEwOCwgMHgyMDAxLCAweDAyMjYsCisJMHgyMDA0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDQsIDB4OTEwOCwgMHgwMDA1LCAweDAwMTgsCisJMHgwMDBjLCAweDAwMTgsIDB4MDAyMCwgMHgxMDAwLCAweDA4MDAsIDB4MTAwMCwgMHgxODAwLCAweDAxNTYsCisJMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMGU2LCAweDIwMDEsIDB4MTk5MCwgMHgyMDA0LCAweDkwOGEsCisJMHgwMDA3LCAweDFhMGMsIDB4MGRjNSwgMHgwMDMzLCAweDAwZWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCisJMHgwMTVlLCAweDAwMDUsIDB4MjlkOSwgMHgyOWY3LCAweDJhMWIsIDB4MmExZCwgMHgyYTQ2LCAweDJhNDgsCisJMHgyYTRhLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI4MWMsIDB4MDgwYywgMHgyYzI0LCAweDIwMDEsCisJMHgxOTkyLCAweDIwMDMsIDB4MDAwMCwgMHg3ODI4LCAweDkwODQsIDB4ZTFkNywgMHg3ODJhLCAweDkwMDYsCisJMHgyMGE5LCAweDAwMDksIDB4MDgwYywgMHgyYmUyLCAweDIwMDEsIDB4MTk5MCwgMHgyMDAzLCAweDAwMDYsCisJMHgyMDA5LCAweDAwMWUsIDB4MjAxMSwgMHgyYTRiLCAweDA4MGMsIDB4ODhkNSwgMHgwMDA1LCAweDIwMDksCisJMHgxOTk1LCAweDIwMGIsIDB4MDAwMCwgMHgyMDAxLCAweDE5OWEsIDB4MjAwMywgMHgwMDM2LCAweDIwMDEsCisJMHgxOTk5LCAweDIwMDMsIDB4MDAyYSwgMHgyMDAxLCAweDE5OTIsIDB4MjAwMywgMHgwMDAxLCAweDkwMDYsCisJMHgwODBjLCAweDJiOTQsIDB4MjAwMSwgMHhmZmZmLCAweDIwYTksIDB4MDAwOSwgMHgwODBjLCAweDJiZTIsCisJMHgyMDAxLCAweDE5OTAsIDB4MjAwMywgMHgwMDA2LCAweDIwMDksIDB4MDAxZSwgMHgyMDExLCAweDJhNGIsCisJMHgwODBjLCAweDg4ZDUsIDB4MDAwNSwgMHgwODBjLCAweDBkYzUsIDB4MjAwMSwgMHgxOTlhLCAweDIwMDMsCisJMHgwMDM2LCAweDIwMDEsIDB4MTk5MiwgMHgyMDAzLCAweDAwMDMsIDB4N2EzOCwgMHg5Mjk0LCAweDAwMDUsCisJMHg5Mjk2LCAweDAwMDQsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCisJMHgyYjk0LCAweDIwMDEsIDB4MTk5NiwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHhmZmZmLCAweDIwYTksCisJMHgwMDA5LCAweDA4MGMsIDB4MmJlMiwgMHgyMDAxLCAweDE5OTAsIDB4MjAwMywgMHgwMDA2LCAweDIwMDksCisJMHgwMDFlLCAweDIwMTEsIDB4MmE0YiwgMHgwODBjLCAweDg4ZDUsIDB4MDAwNSwgMHgwODBjLCAweDBkYzUsCisJMHgwODBjLCAweDBkYzUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMGU2LCAweDAwZjYsCisJMHgwMTU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweDE5OTIsCisJMHgyMDA0LCAweDkwOGEsIDB4MDAwNywgMHgxYTBjLCAweDBkYzUsIDB4MDA0MywgMHgwMTJlLCAweDAxNWUsCisJMHgwMGZlLCAweDAwZWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgyYTZkLCAweDJhODksCisJMHgyYWM1LCAweDJhZjEsIDB4MmIxMSwgMHgyYjFkLCAweDJiMWYsIDB4MDgwYywgMHgyYmQ2LCAweDExOTAsCisJMHgyMDA5LCAweDE5OTgsIDB4MjEwNCwgMHg3YTM4LCAweDkyOTQsIDB4MDAwNSwgMHg5Mjk2LCAweDAwMDQsCisJMHgwMTEwLCAweGMwOGQsIDB4MDAwOCwgMHhjMDg1LCAweDIwMGEsIDB4MjAwMSwgMHgxOTkwLCAweDIwMDMsCisJMHgwMDAxLCAweDAwMzAsIDB4MDgwYywgMHgyYjQzLCAweDIwMDEsIDB4ZmZmZiwgMHgwODBjLCAweDI5ZTgsCisJMHgwMDA1LCAweDA4MGMsIDB4MmIyMSwgMHgwNWMwLCAweDIwMDksIDB4MTk5OSwgMHgyMTA0LCAweDgwMDEsCisJMHgyMDBhLCAweDA4MGMsIDB4MmJkNiwgMHgxMTU4LCAweDdhMzgsIDB4OTI5NCwgMHgwMDA1LCAweDkyOTYsCisJMHgwMDA1LCAweDA1MTgsIDB4MjAwOSwgMHgxOTk4LCAweDIxMDQsIDB4YzA4NSwgMHgyMDBhLCAweDIwMDksCisJMHgxOTk1LCAweDIxMDQsIDB4ODAwMCwgMHgyMDBhLCAweDkwODYsIDB4MDAwNSwgMHgwMTE4LCAweDA4MGMsCisJMHgyYjI5LCAweDAwYzAsIDB4MjAwYiwgMHgwMDAwLCAweDdhMzgsIDB4OTI5NCwgMHgwMDA2LCAweDkyOTYsCisJMHgwMDA0LCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDJiYjEsCisJMHgyMDAxLCAweDE5OTIsIDB4MjAwMywgMHgwMDAyLCAweDAwMjgsIDB4MjAwMSwgMHgxOTkwLCAweDIwMDMsCisJMHgwMDAzLCAweDAwMTAsIDB4MDgwYywgMHgyYTBhLCAweDAwMDUsIDB4MDgwYywgMHgyYjIxLCAweDA1NDAsCisJMHgyMDA5LCAweDE5OTksIDB4MjEwNCwgMHg4MDAxLCAweDIwMGEsIDB4MDgwYywgMHgyYmQ2LCAweDExNDgsCisJMHgyMDAxLCAweDE5OTAsIDB4MjAwMywgMHgwMDAzLCAweDIwMDEsIDB4MTk5MSwgMHgyMDAzLCAweDAwMDAsCisJMHgwMGI4LCAweDIwMDksIDB4MTk5OSwgMHgyMTA0LCAweDkwMDUsIDB4MTExOCwgMHgwODBjLCAweDJiNjYsCisJMHgwMDEwLCAweDA4MGMsIDB4MmIzNiwgMHgwODBjLCAweDJiMjksIDB4MjAwOSwgMHgxOTk1LCAweDIwMGIsCisJMHgwMDAwLCAweDIwMDEsIDB4MTk5MiwgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywgMHgyYTBhLCAweDAwMDAsCisJMHgwMDA1LCAweDA0NzksIDB4MDFlOCwgMHgwODBjLCAweDJiZDYsIDB4MTE5OCwgMHgyMDA5LCAweDE5OTYsCisJMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwgMHg5MDg2LCAweDAwMDcsIDB4MDEwOCwgMHgwMDc4LCAweDIwMDEsCisJMHgxOTliLCAweDIwMDMsIDB4MDAwYSwgMHgyMDA5LCAweDE5OTgsIDB4MjEwNCwgMHhjMGZkLCAweDIwMGEsCisJMHgwMDM4LCAweDAwZjksIDB4MjAwMSwgMHgxOTkyLCAweDIwMDMsIDB4MDAwNCwgMHgwODBjLCAweDJhMzUsCisJMHgwMDA1LCAweDAwNzksIDB4MDE0OCwgMHgwODBjLCAweDJiZDYsIDB4MTExOCwgMHgwODBjLCAweDJhMjEsCisJMHgwMDE4LCAweDAwNzksIDB4MDgwYywgMHgyYTM1LCAweDAwMDUsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsCisJMHgwZGM1LCAweDIwMDksIDB4MTk5YSwgMHgyMTA0LCAweDgwMDEsIDB4MjAwYSwgMHgwOTBjLCAweDJiODIsCisJMHgwMDA1LCAweDdhMzgsIDB4OTI5NCwgMHgwMDA1LCAweDkyOTYsIDB4MDAwNSwgMHgwMTEwLCAweDkwMDYsCisJMHgwMDEwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDJiYjEsIDB4MDAwNSwgMHg3YTM4LCAweDkyOTQsCisJMHgwMDA2LCAweDkyOTYsIDB4MDAwNiwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsCisJMHgwODBjLCAweDJiOTQsIDB4MDAwNSwgMHgyMDA5LCAweDE5OTUsIDB4MjEwNCwgMHg4MDAwLCAweDIwMGEsCisJMHg5MDg2LCAweDAwMDUsIDB4MDEwOCwgMHgwMDY4LCAweDIwMGIsIDB4MDAwMCwgMHg3YTM4LCAweDkyOTQsCisJMHgwMDA2LCAweDkyOTYsIDB4MDAwNiwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsCisJMHgwNGQ5LCAweDdhMzgsIDB4OTI5NCwgMHgwMDA1LCAweDkyOTYsIDB4MDAwNSwgMHgwMTEwLCAweDkwMDYsCisJMHgwMDEwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDJiYjEsIDB4MDAwNSwgMHgwMDg2LCAweDIwMDEsCisJMHgxOTk4LCAweDIwMDQsIDB4OTA4NCwgMHg3ZmZmLCAweDA5MGMsIDB4MGRjNSwgMHgyMDA5LCAweDE5OTcsCisJMHgyMTQ0LCAweDg4NDYsIDB4MjgwYSwgMHg5ODQ0LCAweDBkZDgsIDB4ZDA4YywgMHgxMTIwLCAweGQwODQsCisJMHgxMTIwLCAweDA4MGMsIDB4MGRjNSwgMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLCAweDAwYTEsCisJMHgwMDhlLCAweDAwMDUsIDB4MDAwNiwgMHgwMTU2LCAweDIwMDEsIDB4MTk5MCwgMHgyMGE5LCAweDAwMDksCisJMHgyMDAzLCAweDAwMDAsIDB4ODAwMCwgMHgxZjA0LCAweDJiODgsIDB4MjAwMSwgMHgxOTk3LCAweDIwMDMsCisJMHg4MDAwLCAweDAxNWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDkwODUsCisJMHgwMDAwLCAweDAxNTgsIDB4NzgzOCwgMHg5MDg0LCAweGZmZjksIDB4OTA4NSwgMHgwMDA0LCAweDc4M2EsCisJMHgyMDA5LCAweDE5OWQsIDB4MjEwYywgMHg3OTVhLCAweDAwNTAsIDB4NzgzOCwgMHg5MDg0LCAweGZmZmIsCisJMHg5MDg1LCAweDAwMDYsIDB4NzgzYSwgMHgyMDA5LCAweDE5OWUsIDB4MjEwYywgMHg3OTVhLCAweDAwZmUsCisJMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDkwODUsIDB4MDAwMCwgMHgwMTM4LCAweDc4MzgsCisJMHg5MDg0LCAweGZmZmEsIDB4OTA4NSwgMHgwMDA0LCAweDc4M2EsIDB4MDAzMCwgMHg3ODM4LCAweDkwODQsCisJMHhmZmZiLCAweDkwODUsIDB4MDAwNSwgMHg3ODNhLCAweDAwZmUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsCisJMHgwMTAwLCAweDIwMDQsIDB4OTA4MiwgMHgwMDA3LCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsCisJMHgwMTAwLCAweDIwMDQsIDB4OTA4MiwgMHgwMDA5LCAweDAwMGUsIDB4MDAwNSwgMHgwMTU2LCAweDIwYTksCisJMHgwMDY0LCAweDc4MjAsIDB4MDgwYywgMHgyYzYxLCAweGQwOWMsIDB4MTExMCwgMHgxZjA0LCAweDJiZDksCisJMHgwMTVlLCAweDAwMDUsIDB4MDEyNiwgMHgwMDE2LCAweDAwMDYsIDB4MjA5MSwgMHg4MDAwLCAweDc4NTAsCisJMHg5MDg1LCAweDAwNDAsIDB4Nzg1MiwgMHg3ODUwLCAweDkwODQsIDB4ZmJjZiwgMHg3ODUyLCAweDA4MGMsCisJMHgyYzYxLCAweDkwODUsIDB4MjAwMCwgMHg3ODUyLCAweDAwMGUsIDB4MjAwOCwgMHg5MTg2LCAweDAwMDAsCisJMHgxMTE4LCAweDc4M2IsIDB4MDAwNywgMHgwMDkwLCAweDkxODYsIDB4MDAwMSwgMHgxMTE4LCAweDc4M2IsCisJMHgwMDA2LCAweDAwNjAsIDB4OTE4NiwgMHgwMDAyLCAweDExMTgsIDB4NzgzYiwgMHgwMDA1LCAweDAwMzAsCisJMHg5MTg2LCAweDAwMDMsIDB4MTExOCwgMHg3ODNiLCAweDAwMDQsIDB4MDAwMCwgMHgwMDA2LCAweDFkMDQsCisJMHgyYzBmLCAweDA4MGMsIDB4ODhmNywgMHgxZjA0LCAweDJjMGYsIDB4Nzg1MCwgMHg5MDg1LCAweDA0MDAsCisJMHg5MDg0LCAweGRmYmYsIDB4Nzg1MiwgMHgwODBjLCAweDJjNjEsIDB4OTA4NSwgMHgxMDAwLCAweDc4NTIsCisJMHgwMDBlLCAweDAwMWUsIDB4MDEyZSwgMHgwMDA1LCAweDc4NTAsIDB4OTA4NCwgMHhmZmNmLCAweDc4NTIsCisJMHgwMDA1LCAweDAwMDYsIDB4MDE1NiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgyMGE5LCAweDAwMGEsCisJMHg3ODU0LCAweGQwYWMsIDB4MTEzMCwgMHg3ODIwLCAweGQwZTQsIDB4MTE0MCwgMHgxZjA0LCAweDJjMzMsCisJMHgwMDI4LCAweDc4NTQsIDB4ZDA4YywgMHgxMTEwLCAweDFmMDQsIDB4MmMzOSwgMHgwMGZlLCAweDAxNWUsCisJMHgwMDBlLCAweDAwMDUsIDB4MWQwNCwgMHgyYzQyLCAweDA4MGMsIDB4ODhmNywgMHgxZjA0LCAweDJjNDIsCisJMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxOTljLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAwLCAweDAwMGUsCisJMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxOTljLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAxLCAweDAwMGUsCisJMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxOTljLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDAwMGUsCisJMHgwMDA1LCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHgwMDA1LCAweDAwMDYsCisJMHgyMDAxLCAweDE5YTksIDB4MjEwMiwgMHgwMDBlLCAweDAwMDUsIDB4MjAwOSwgMHgwMTcxLCAweDIxMDQsCisJMHhkMGRjLCAweDAxNDAsIDB4MjAwOSwgMHgwMTcwLCAweDIxMDQsIDB4MjAwYiwgMHgwMDgwLCAweGEwMDEsCisJMHhhMDAxLCAweDIwMGEsIDB4MDAwNSwgMHgwMDM2LCAweDAwNDYsIDB4MjAwMSwgMHgwMTQxLCAweDIwMGMsCisJMHg5MThjLCAweGZmMDAsIDB4OTE4NiwgMHgyMTAwLCAweDAxNDAsIDB4OTE4NiwgMHgyMDAwLCAweDAxNzAsCisJMHg5MTg2LCAweDAxMDAsIDB4MTkwNCwgMHgyY2RhLCAweDAwNDgsIDB4MDAxNiwgMHgyMDA5LCAweDFhODcsCisJMHgyMTA0LCAweDgwMDAsIDB4MDIwOCwgMHgyMDBhLCAweDAwMWUsIDB4MDRmMCwgMHgyMDA5LCAweDAwYTIsCisJMHgwODBjLCAweDBlNTIsIDB4MjAxOSwgMHgwMTYwLCAweDIzMjQsIDB4MjAxMSwgMHgwMDAzLCAweDIwMDksCisJMHgwMTY5LCAweDIxMDQsIDB4OTA4NCwgMHgwMDA3LCAweDIxMGMsIDB4OTE4YywgMHgwMDA3LCAweDkxMGUsCisJMHgxZGIwLCAweDkwODYsIDB4MDAwMywgMHgxNTQ4LCAweDIzMDQsIDB4MDA2NiwgMHgwMDc2LCAweDIwMzEsCisJMHgwMDAyLCAweDIzM2MsIDB4OTczZSwgMHgwMTQ4LCAweDg2MzEsIDB4MWRkOCwgMHgyMDMxLCAweDFhODgsCisJMHgyNjNjLCAweDg3MzgsIDB4MDIwOCwgMHgyNzMyLCAweDIzMDQsIDB4MDA3ZSwgMHgwMDZlLCAweDk0MDIsCisJMHgwMmEwLCAweDE5ZDAsIDB4ODIxMSwgMHgxOWQ4LCAweDg0ZmYsIDB4MDE3MCwgMHgyMDAxLCAweDAxNDEsCisJMHgyMDBjLCAweDkxOGMsIDB4ZmYwMCwgMHg5MTg2LCAweDAxMDAsIDB4MDEzMCwgMHgyMDA5LCAweDE4MGMsCisJMHgyMTA0LCAweGMwZGQsIDB4MjAwYSwgMHgwMDA4LCAweDA0MjEsIDB4MjAwMSwgMHgxOTgxLCAweDIwMGMsCisJMHgwODBjLCAweDBlNTIsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMDUsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsCisJMHhkMGRjLCAweDAxYjAsIDB4MjAwMSwgMHgwMTYwLCAweDIwMDQsIDB4OTAwNSwgMHgwMTQwLCAweDIwMDEsCisJMHgwMTQxLCAweDIwMDQsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsIDB4MDEwMCwgMHgxMTQ4LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDAxNiwgMHgwMDI2LCAweDAwMjEsIDB4MDAyZSwgMHgwMDFlLCAweDAxMmUsCisJMHgwMDA1LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYwMTQsIDB4MDAwNiwgMHgyMDAxLCAweDAxNjEsCisJMHgyMDAzLCAweDAwMDAsIDB4NjAxNywgMHgwMDE4LCAweGEwMDEsIDB4YTAwMSwgMHg2MDJmLCAweDAwMDgsCisJMHg2MTA0LCAweDkxOGUsIDB4MDAxMCwgMHg2MTA2LCAweDkxOGUsIDB4MDAxMCwgMHg2MTA2LCAweDYwMTcsCisJMHgwMDQwLCAweDA0YjksIDB4MDAxZSwgMHg5MTg0LCAweDAwMDMsIDB4MDFlMCwgMHgwMDM2LCAweDAwMTYsCisJMHgyMDE5LCAweDAxNDEsIDB4NjEyNCwgMHg5MThjLCAweDAwMjgsIDB4MTEyMCwgMHgyMzA0LCAweDkwODQsCisJMHgyODAwLCAweDBkYzAsIDB4MDAxZSwgMHg5MTljLCAweGZmZTQsIDB4OTE4NCwgMHgwMDAxLCAweDAxMTgsCisJMHg5Mzg1LCAweDAwMDksIDB4NjAxNiwgMHg5MTg0LCAweDAwMDIsIDB4MDExOCwgMHg5Mzg1LCAweDAwMTIsCisJMHg2MDE2LCAweDAwM2UsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsIDB4YzFkYywgMHgyMTAyLCAweDAwY2UsCisJMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweDc2NTEsIDB4MDEwOCwgMHhjMGJjLCAweDIwMDksCisJMHgwMTQwLCAweDIxMTQsIDB4OTI5NCwgMHgwMDAxLCAweDkyMTUsIDB4MjIwYSwgMHgwMDJlLCAweDAwMWUsCisJMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgyMDA5LCAweDAxNDAsIDB4MjExNCwgMHg5Mjk0LCAweDAwMDEsCisJMHg5Mjg1LCAweDEwMDAsIDB4MjAwYSwgMHgyMjBhLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsCisJMHgwMDI2LCAweDIwMDksIDB4MDE0MCwgMHgyMTE0LCAweDkyOTQsIDB4MDAwMSwgMHg5MjE1LCAweDIyMGEsCisJMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MjAwOSwgMHgwMTQwLCAweDIxMDQsCisJMHgxMTI4LCAweDA4MGMsIDB4NzY1MSwgMHgwMTEwLCAweGMwYmMsIDB4MDAwOCwgMHhjMGJkLCAweDIwMGEsCisJMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAxNTYsIDB4NjA1MCwgMHg5MDg1LCAweDAwNDAsCisJMHg2MDUyLCAweDYwNTAsIDB4OTA4NCwgMHhmYmNmLCAweDYwNTIsIDB4MDgwYywgMHgyYzYxLCAweDkwODUsCisJMHgyMDAwLCAweDYwNTIsIDB4MjBhOSwgMHgwMDEyLCAweDFkMDQsIDB4MmQ4NCwgMHgwODBjLCAweDg4ZjcsCisJMHgxZjA0LCAweDJkODQsIDB4NjA1MCwgMHg5MDg1LCAweDA0MDAsIDB4OTA4NCwgMHhkZmJmLCAweDYwNTIsCisJMHgwMTVlLCAweDAwMGUsIDB4MDAwNSwgMHgyZmZmLCAweDJmZmYsIDB4MmUyMywgMHgyZTIzLCAweDJlMmYsCisJMHgyZTJmLCAweDJlM2IsIDB4MmUzYiwgMHgyZTQ5LCAweDJlNDksIDB4MmU1NSwgMHgyZTU1LCAweDJlNjMsCisJMHgyZTYzLCAweDJlNzEsIDB4MmU3MSwgMHgyZTgzLCAweDJlODMsIDB4MmU4ZiwgMHgyZThmLCAweDJlOWQsCisJMHgyZTlkLCAweDJlYmIsIDB4MmViYiwgMHgyZWRiLCAweDJlZGIsIDB4MmVhYiwgMHgyZWFiLCAweDJlY2IsCisJMHgyZWNiLCAweDJlZTksIDB4MmVlOSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZWZiLCAweDJlZmIsIDB4MmYwNywgMHgyZjA3LCAweDJmMTUsCisJMHgyZjE1LCAweDJmMjMsIDB4MmYyMywgMHgyZjMzLCAweDJmMzMsIDB4MmY0MSwgMHgyZjQxLCAweDJmNTEsCisJMHgyZjUxLCAweDJmNjEsIDB4MmY2MSwgMHgyZjczLCAweDJmNzMsIDB4MmY4MSwgMHgyZjgxLCAweDJmOTEsCisJMHgyZjkxLCAweDJmYjMsIDB4MmZiMywgMHgyZmQ1LCAweDJmZDUsIDB4MmZhMSwgMHgyZmExLCAweDJmYzQsCisJMHgyZmM0LCAweDJmZTQsIDB4MmZlNCwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgyZTgxLCAweDJlODEsCisJMHgyZTgxLCAweDJlODEsIDB4MmU4MSwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI0YzAsIDB4MDgwNCwgMHgyZmY3LCAweDAxMDYsCisJMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsCisJMHgyMmNjLCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIyY2MsIDB4MDgwYywgMHgyNGMwLCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4MjMwNywgMHgwODA0LCAweDJmZjcsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsCisJMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNGMwLCAweDA4MGMsCisJMHgyMzA3LCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIyY2MsIDB4MDgwYywgMHgyMzA3LCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4MjJjYywgMHgwODBjLCAweDI0YzAsIDB4MDgwYywgMHgyMzA3LCAweDA4MDQsCisJMHgyZmY3LCAweGEwMDEsIDB4MGNmMCwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDEzOTQsIDB4MDgwNCwgMHgyZmY3LCAweDAxMDYsCisJMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsCisJMHgyNGMwLCAweDA4MGMsIDB4MTM5NCwgMHgwODA0LCAweDJmZjcsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsCisJMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMmNjLCAweDA4MGMsCisJMHgxMzk0LCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI0YzAsIDB4MDgwYywgMHgxMzk0LCAweDA4MGMsCisJMHgyMzA3LCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIyY2MsIDB4MDgwYywgMHgyNGMwLCAweDA4MGMsCisJMHgxMzk0LCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIyY2MsIDB4MDgwYywgMHgxMzk0LCAweDA4MGMsCisJMHgyMzA3LCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDEzOTQsIDB4MDgwYywgMHgyMzA3LCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4MjJjYywgMHgwODBjLCAweDI0YzAsIDB4MDgwYywgMHgxMzk0LCAweDA4MGMsCisJMHgyMzA3LCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI5NzYsIDB4MDgwNCwgMHgyZmY3LCAweDAxMDYsCisJMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsCisJMHgyOTc2LCAweDA4MGMsIDB4MjRjMCwgMHgwODA0LCAweDJmZjcsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsCisJMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTc2LCAweDA4MGMsCisJMHgyMmNjLCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI5NzYsIDB4MDgwYywgMHgyMmNjLCAweDA4MGMsCisJMHgyNGMwLCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI5NzYsIDB4MDgwYywgMHgyMzA3LCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4Mjk3NiwgMHgwODBjLCAweDI0YzAsIDB4MDgwYywgMHgyMzA3LCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4Mjk3NiwgMHgwODBjLCAweDIyY2MsIDB4MDgwYywgMHgyMzA3LCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4Mjk3NiwgMHgwODBjLCAweDIyY2MsIDB4MDgwYywgMHgyNGMwLCAweDA4MGMsCisJMHgyMzA3LCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI5NzYsIDB4MDgwYywgMHgxMzk0LCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4Mjk3NiwgMHgwODBjLCAweDI0YzAsIDB4MDgwYywgMHgxMzk0LCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4Mjk3NiwgMHgwODBjLCAweDIyY2MsIDB4MDgwYywgMHgxMzk0LCAweDA4MDQsCisJMHgyZmY3LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsCisJMHgwMTU2LCAweDA4MGMsIDB4Mjk3NiwgMHgwODBjLCAweDI0YzAsIDB4MDgwYywgMHgxMzk0LCAweDA4MGMsCisJMHgyMzA3LCAweDA4MDQsIDB4MmZmNywgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsCisJMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI5NzYsIDB4MDgwYywgMHgyMmNjLCAweDA4MGMsCisJMHgyNGMwLCAweDA4MGMsIDB4MTM5NCwgMHgwNDk4LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCisJMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjk3NiwgMHgwODBjLCAweDIyY2MsCisJMHgwODBjLCAweDEzOTQsIDB4MDgwYywgMHgyMzA3LCAweDA0MTAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsCisJMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyOTc2LCAweDA4MGMsCisJMHgxMzk0LCAweDA4MGMsIDB4MjMwNywgMHgwMDk4LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCisJMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjk3NiwgMHgwODBjLCAweDIyY2MsCisJMHgwODBjLCAweDI0YzAsIDB4MDgwYywgMHgxMzk0LCAweDA4MGMsIDB4MjMwNywgMHgwMDAwLCAweDAxNWUsCisJMHgwMTRlLCAweDAxM2UsIDB4MDFkZSwgMHgwMWNlLCAweDAxMmUsIDB4MDAwZSwgMHgwMTBlLCAweDAwMGQsCisJMHgwMGI2LCAweDAwYzYsIDB4MDAyNiwgMHgwMDQ2LCAweDkwMjYsIDB4MDgwYywgMHg2YTYxLCAweDE5MDQsCisJMHgzMTM3LCAweDcyZGMsIDB4MjAwMSwgMHgxOTdjLCAweDIwMDQsIDB4OTAwNSwgMHgxMTEwLCAweGQyOWMsCisJMHgwMTQ4LCAweGQyODQsIDB4MTEzOCwgMHhkMmJjLCAweDE5MDQsIDB4MzEzNywgMHgwODBjLCAweDMxM2MsCisJMHgwODA0LCAweDMxMzcsIDB4ZDJjYywgMHgxOTA0LCAweDMxMzcsIDB4MDgwYywgMHg3NjM3LCAweDExMjAsCisJMHg3MGFmLCAweGZmZmYsIDB4MDgwNCwgMHgzMTM3LCAweGQyOTQsIDB4MDEyMCwgMHg3MGFmLCAweGZmZmYsCisJMHgwODA0LCAweDMxMzcsIDB4MDgwYywgMHgzM2E1LCAweDAxNjAsIDB4MDgwYywgMHhkN2UzLCAweDAxMjgsCisJMHgyMDAxLCAweDE4MTgsIDB4MjAzYywgMHgwODA0LCAweDMwYjAsIDB4NzBhZiwgMHhmZmZmLCAweDA4MDQsCisJMHgzMTM3LCAweDIwMDEsIDB4MTgxOCwgMHgyMDNjLCAweDcyOTQsIDB4ZDI4NCwgMHgwOTA0LCAweDMwYjAsCisJMHhkMjhjLCAweDE5MDQsIDB4MzBiMCwgMHgwMDM2LCAweDczYWMsIDB4OTM4ZSwgMHhmZmZmLCAweDExMTAsCisJMHgyMDE5LCAweDAwMDEsIDB4ODMxNCwgMHg5MmUwLCAweDFjODAsIDB4MmMwNCwgMHg5MzhjLCAweDAwMDEsCisJMHgwMTIwLCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDAwMTAsIDB4OTA4NCwgMHgwMGZmLCAweDk3MGUsCisJMHgwOTA0LCAweDMwYTYsIDB4OTA4ZSwgMHgwMDAwLCAweDA5MDQsIDB4MzBhNiwgMHg5MDhlLCAweDAwZmYsCisJMHgxMTYwLCAweDcyMzAsIDB4ZDI4NCwgMHgxOTA0LCAweDMwYWIsIDB4NzI5NCwgMHhjMjhkLCAweDcyOTYsCisJMHg3MGFmLCAweGZmZmYsIDB4MDAzZSwgMHgwODA0LCAweDMwYjAsIDB4MjAwOSwgMHgxODBkLCAweDIxMGMsCisJMHhkMThjLCAweDAxNTAsIDB4MDAyNiwgMHgyMDExLCAweDAwMTAsIDB4MDgwYywgMHg2YWM3LCAweDAwMmUsCisJMHgwMTE4LCAweDcwYWYsIDB4ZmZmZiwgMHgwNDg4LCAweDkwMGUsIDB4MDgwYywgMHgyODczLCAweDA4MGMsCisJMHg2NmI5LCAweDE1MzgsIDB4OTAwNiwgMHhiOGJiLCAweDA1MjAsIDB4YjhhYywgMHg5MDA1LCAweDAxNDgsCisJMHgwMGM2LCAweDIwNjAsIDB4MDgwYywgMHg4Y2Y3LCAweDAwY2UsIDB4MDkwYywgMHg5MDk2LCAweGI4YWYsCisJMHgwMDAwLCAweDA4MGMsIDB4NmFhMywgMHgxMTY4LCAweDcwMzAsIDB4ZDA4YywgMHgwMTMwLCAweGI4MDAsCisJMHhkMGJjLCAweDAxMzgsIDB4MDgwYywgMHg2OTQ0LCAweDAxMjAsIDB4MDgwYywgMHgzMTU1LCAweDAxNDgsCisJMHgwMDI4LCAweDA4MGMsIDB4MzI5NSwgMHgwODBjLCAweDMxODEsIDB4MDExOCwgMHg4MzE4LCAweDA4MDQsCisJMHgzMDRhLCAweDczYWUsIDB4MDAxMCwgMHg3MGFmLCAweGZmZmYsIDB4MDAzZSwgMHgwODA0LCAweDMxMzcsCisJMHg5NzgwLCAweDMzYjYsIDB4MjAzZCwgMHg5N2JjLCAweGZmMDAsIDB4ODczZiwgMHgyMDQxLCAweDAwN2UsCisJMHg3MGFjLCAweDkwOTYsIDB4ZmZmZiwgMHgxMTE4LCAweDkwMGUsIDB4MjhhOCwgMHgwMDUwLCAweDk4MTIsCisJMHgwMjIwLCAweDIwMDgsIDB4OTgwMiwgMHgyMGE4LCAweDAwMjAsIDB4NzBhZiwgMHhmZmZmLCAweDA4MDQsCisJMHgzMTM3LCAweDI3MDAsIDB4MDE1NiwgMHgwMDE2LCAweDkxMDYsIDB4MDkwNCwgMHgzMTJjLCAweDIwMDEsCisJMHgxODBkLCAweDIwMDQsIDB4ZDA4YywgMHgwMTU4LCAweDAwMjYsIDB4MjAxMSwgMHgwMDEwLCAweDA4MGMsCisJMHg2YWM3LCAweDAwMmUsIDB4MDEyMCwgMHgyMDA5LCAweGZmZmYsIDB4MDgwNCwgMHgzMTM0LCAweGM0ODQsCisJMHgwODBjLCAweDY3MjQsIDB4MDE2OCwgMHgwODBjLCAweGQ3ZTMsIDB4MTkwNCwgMHgzMTJjLCAweDA4MGMsCisJMHgzM2E1LCAweDE5MDQsIDB4MzEyYywgMHgwODBjLCAweDY2YjksIDB4MTkwNCwgMHgzMTM0LCAweDAwMDgsCisJMHhjNDg1LCAweGI4YmIsIDB4MDUyMCwgMHhiOGFjLCAweDkwMDUsIDB4MDE0OCwgMHgwMGM2LCAweDIwNjAsCisJMHgwODBjLCAweDhjZjcsIDB4MDBjZSwgMHgwOTBjLCAweDkwOTYsIDB4YjhhZiwgMHgwMDAwLCAweDA4MGMsCisJMHg2YWEzLCAweDExMzAsIDB4NzAzMCwgMHhkMDhjLCAweDAxZjgsIDB4YjgwMCwgMHhkMGJjLCAweDExZTAsCisJMHg3Mjk0LCAweGQyOGMsIDB4MDE4MCwgMHgwODBjLCAweDZhYTMsIDB4OTA4MiwgMHgwMDA2LCAweDAyZTAsCisJMHhkNDg0LCAweDExMTgsIDB4MDgwYywgMHg2NmRlLCAweDAwMjgsIDB4MDgwYywgMHgzMzIxLCAweDAxYTAsCisJMHgwODBjLCAweDMzNGMsIDB4MDA4OCwgMHgwODBjLCAweDMyOTUsIDB4MDgwYywgMHhkN2UzLCAweDExNjAsCisJMHgwODBjLCAweDMxODEsIDB4MDE4OCwgMHgwMDQwLCAweDA4MGMsIDB4ZDdlMywgMHgxMTE4LCAweDA4MGMsCisJMHgzMzIxLCAweDAxMTAsIDB4MDQ1MSwgMHgwMTQwLCAweDAwMWUsIDB4ODEwOCwgMHgwMTVlLCAweDFmMDQsCisJMHgzMGM5LCAweDcwYWYsIDB4ZmZmZiwgMHgwMDE4LCAweDAwMWUsIDB4MDE1ZSwgMHg3MWFlLCAweDAwNGUsCisJMHgwMDJlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweDAwYzYsIDB4MDAxNiwgMHg3MGFmLCAweDAwMDEsCisJMHgyMDA5LCAweDAwN2UsIDB4MDgwYywgMHg2NmI5LCAweDExNjgsIDB4YjgxMywgMHgwMGZmLCAweGI4MTcsCisJMHhmZmZlLCAweDA4MGMsIDB4MzI5NSwgMHgwNGE5LCAweDAxMjgsIDB4NzBkYywgMHhjMGJkLCAweDcwZGUsCisJMHgwODBjLCAweGQ1MmIsIDB4MDAxZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDc2LCAweDAwZDYsCisJMHgwMGM2LCAweDIwMDEsIDB4MTg0YywgMHgyMDA0LCAweDkwODQsIDB4MDBmZiwgMHhiODQyLCAweDA4MGMsCisJMHhiMzI1LCAweDAxZDAsIDB4MmIwMCwgMHg2MDEyLCAweDA4MGMsIDB4ZDU1NCwgMHg2MDIzLCAweDAwMDEsCisJMHg5MDA2LCAweDA4MGMsIDB4NjY1NiwgMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg2NjZhLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4NzBhOCwgMHg4MDAwLCAweDcwYWEsIDB4MDEyZSwgMHgyMDA5LCAweDAwMDQsCisJMHgwODBjLCAweGIzNTIsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsIDB4MDBkZSwgMHgwMDdlLCAweDAwMWUsCisJMHgwMDA1LCAweDAwMTYsIDB4MDA3NiwgMHgwMGQ2LCAweDAwYzYsIDB4MjAwMSwgMHgxODRjLCAweDIwMDQsCisJMHg5MDg0LCAweDAwZmYsIDB4Yjg0MiwgMHgwODBjLCAweGIzMjUsIDB4MDU0OCwgMHgyYjAwLCAweDYwMTIsCisJMHhiODAwLCAweGMwYzQsIDB4YjgwMiwgMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgwMTQwLCAweGI4MDQsCisJMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LCAweDExMTAsIDB4MDgwYywgMHgzMjUwLCAweDA4MGMsCisJMHhkNTU0LCAweDYwMjMsIDB4MDAwMSwgMHg5MDA2LCAweDA4MGMsIDB4NjY1NiwgMHgyMDAxLCAweDAwMDIsCisJMHgwODBjLCAweDY2NmEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzBhOCwgMHg4MDAwLCAweDcwYWEsCisJMHgwMTJlLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweGIzNTIsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsCisJMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHgwMDI2LCAweDIwMDksCisJMHgwMDgwLCAweDA4MGMsIDB4NjZiOSwgMHgxMTQwLCAweGI4MTMsIDB4MDBmZiwgMHhiODE3LCAweGZmZmMsCisJMHgwMDM5LCAweDAxMTAsIDB4NzBlMywgMHhmZmZmLCAweDAwMmUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsCisJMHgwMDE2LCAweDAwNzYsIDB4MDBkNiwgMHgwMGM2LCAweDA4MGMsIDB4YjI3ZCwgMHgwMWQwLCAweDJiMDAsCisJMHg2MDEyLCAweDA4MGMsIDB4ZDU1NCwgMHg2MDIzLCAweDAwMDEsIDB4OTAwNiwgMHgwODBjLCAweDY2NTYsCisJMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NjZhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwZTQsCisJMHg4MDAwLCAweDcwZTYsIDB4MDEyZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHhiMzUyLCAweDkwODUsCisJMHgwMDAxLCAweDAwY2UsIDB4MDBkZSwgMHgwMDdlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweDAwN2YsIDB4MDgwYywgMHg2NmI5LCAweDExYjgsCisJMHhiODEzLCAweDAwZmYsIDB4YjgxNywgMHhmZmZkLCAweGI4Y2YsIDB4MDAwNCwgMHgwODBjLCAweGIyN2QsCisJMHgwMTcwLCAweDJiMDAsIDB4NjAxMiwgMHg2MzE2LCAweDYwMjMsIDB4MDAwMSwgMHg2MjBhLCAweDA4MGMsCisJMHhkNTU0LCAweDIwMDksIDB4MDAyMiwgMHgwODBjLCAweGIzNTIsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCisJMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDM2LCAweDAwMjYsCisJMHgwMGI2LCAweDIxZjAsIDB4MDgwYywgMHg5NmFmLCAweDA4MGMsIDB4OTYyZiwgMHgwODBjLCAweGIxMTEsCisJMHgwODBjLCAweGMyZDMsIDB4M2UwOCwgMHgyMTMwLCAweDgxZmYsIDB4MDEyMCwgMHgyMGE5LCAweDAwN2UsCisJMHg5MDBlLCAweDAwMTgsIDB4MjBhOSwgMHgwMDdmLCAweDkwMGUsIDB4MDAxNiwgMHgwODBjLCAweDY3MjQsCisJMHgxMTQwLCAweDk2ODYsIDB4MDAwMiwgMHgxMTE4LCAweGI4MDAsIDB4ZDBiYywgMHgxMTEwLCAweDA4MGMsCisJMHg2MTQ4LCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDMyMzUsIDB4OTY4NiwgMHgwMDAxLCAweDE5MGMsCisJMHgzMzc5LCAweDAwYmUsIDB4MDAyZSwgMHgwMDNlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsCisJMHgwMGU2LCAweDAwYzYsIDB4MDA0NiwgMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMGI2LCAweDYyMTAsCisJMHgyMjU4LCAweGJhYTAsIDB4MDAyNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg5NmE0LCAweDAwNzYsCisJMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg5NTc3LCAweDJjMDgsIDB4MDgwYywgMHhlOTFjLCAweDAwN2UsCisJMHgwMDFlLCAweGJhMTAsIDB4YmIxNCwgMHhiY2MwLCAweDA4MGMsIDB4NjE0OCwgMHhiYTEyLCAweGJiMTYsCisJMHhiY2MyLCAweDAwYmUsIDB4MDAxZSwgMHgwMDJlLCAweDAwM2UsIDB4MDA0ZSwgMHgwMGNlLCAweDAwZWUsCisJMHgwMDA1LCAweDAwZTYsIDB4MDAwNiwgMHgwMGI2LCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDAwYmUsCisJMHg5MDg2LCAweDAwODAsIDB4MDE1MCwgMHgyMDcxLCAweDE4MDAsIDB4NzBhOCwgMHg5MDA1LCAweDAxMTAsCisJMHg4MDAxLCAweDcwYWEsIDB4MDAwZSwgMHgwMGVlLCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLCAweDcwZTQsCisJMHg5MDA1LCAweDBkYzAsIDB4ODAwMSwgMHg3MGU2LCAweDBjYTgsIDB4YjgwMCwgMHhjMDhjLCAweGI4MDIsCisJMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwYjYsIDB4MDA0NiwgMHgwMDM2LCAweDAwMjYsCisJMHgwMDE2LCAweDAxNTYsIDB4MjE3OCwgMHg4MWZmLCAweDExMTgsIDB4MjBhOSwgMHgwMDAxLCAweDAwNzgsCisJMHgwODBjLCAweDU3ZDUsIDB4ZDBjNCwgMHgwMTQwLCAweGQwYTQsIDB4MDEzMCwgMHg5MDA2LCAweDIwMjAsCisJMHgyMDA5LCAweDAwMmQsIDB4MDgwYywgMHhlYzMxLCAweDIwYTksIDB4MDgwMCwgMHg5MDE2LCAweDAwMjYsCisJMHg5MjhlLCAweDAwN2UsIDB4MDkwNCwgMHgzMzAwLCAweDkyOGUsIDB4MDA3ZiwgMHgwOTA0LCAweDMzMDAsCisJMHg5MjhlLCAweDAwODAsIDB4MDVlOCwgMHg5Mjg4LCAweDEwMDAsIDB4MjEwYywgMHg4MWZmLCAweDA1YzAsCisJMHg4ZmZmLCAweDExNDgsIDB4MjAwMSwgMHgxOThlLCAweDAwMDYsIDB4MjAwMywgMHgwMDAxLCAweDA0ZjEsCisJMHgwMDBlLCAweDIwMDMsIDB4MDAwMCwgMHgwMGI2LCAweDAwYzYsIDB4MjE1OCwgMHgyMDAxLCAweDAwMDEsCisJMHgwODBjLCAweDZhNmQsIDB4MDBjZSwgMHgwMGJlLCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDk2YTQsCisJMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDk1NzcsIDB4MDBiNiwgMHgwMGM2LCAweDAwMjYsCisJMHgyMTU4LCAweGJhMDQsIDB4OTI5NCwgMHgwMGZmLCAweDkyODYsIDB4MDAwNiwgMHgxMTE4LCAweGI4MDcsCisJMHgwNDA0LCAweDAwMjgsIDB4MjAwMSwgMHgwMDA0LCAweDgwMDcsIDB4OTIxNSwgMHhiYTA2LCAweDAwMmUsCisJMHgwMGNlLCAweDAwYmUsIDB4MDAxNiwgMHgyYzA4LCAweDA4MGMsIDB4ZTkxYywgMHgwMDFlLCAweDAwN2UsCisJMHgwMDJlLCAweDgyMTAsIDB4MWYwNCwgMHgzMmI3LCAweDAxNWUsIDB4MDAxZSwgMHgwMDJlLCAweDAwM2UsCisJMHgwMDRlLCAweDAwYmUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMDQ2LCAweDAwMjYsCisJMHgwMDE2LCAweDA4MGMsIDB4NTdkNSwgMHhkMGM0LCAweDAxNDAsIDB4ZDBhNCwgMHgwMTMwLCAweDkwMDYsCisJMHgyMjIwLCAweDIwMDksIDB4MDAyOSwgMHgwODBjLCAweGVjMzEsIDB4MDAxZSwgMHgwMDJlLCAweDAwNGUsCisJMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4NzI5NCwgMHg4MmZmLCAweDAxZTgsCisJMHgwODBjLCAweDZhOWIsIDB4MTFkMCwgMHgyMTAwLCAweDA4MGMsIDB4MjhhNiwgMHg4MWZmLCAweDAxYjgsCisJMHgyMDE5LCAweDAwMDEsIDB4ODMxNCwgMHg5MmUwLCAweDFjODAsIDB4MmMwNCwgMHhkMzg0LCAweDAxMjAsCisJMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHgwMDEwLCAweDkwODQsIDB4MDBmZiwgMHg5MTE2LCAweDAxMzgsCisJMHg5MDk2LCAweDAwZmYsIDB4MDExMCwgMHg4MzE4LCAweDBjNjgsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsCisJMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDI5LCAweDAwYTksIDB4MDAzZSwgMHg5MTgwLCAweDEwMDAsCisJMHgyMDA0LCAweDkwNjUsIDB4MDE1OCwgMHgwMDE2LCAweDAwYzYsIDB4MjA2MSwgMHgxYWI3LCAweDAwMWUsCisJMHg2MTEyLCAweDA4MGMsIDB4MzI1MCwgMHgwMDFlLCAweDA4MGMsIDB4NjZkZSwgMHgwMTJlLCAweDAwY2UsCisJMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDIxMTAsIDB4MDgwYywgMHhhYzZjLCAweDA4MGMsCisJMHhlZjk0LCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwY2MsCisJMHgwMDA1LCAweDAwYzYsIDB4MDBiNiwgMHgwODBjLCAweDc2MzcsIDB4MTExOCwgMHgyMGE5LCAweDA4MDAsCisJMHgwMDEwLCAweDIwYTksIDB4MDc4MiwgMHgwODBjLCAweDc2MzcsIDB4MTExMCwgMHg5MDBlLCAweDAwMTAsCisJMHgyMDA5LCAweDAwN2UsIDB4OTE4MCwgMHgxMDAwLCAweDIwMDQsIDB4OTA1ZCwgMHgwMTMwLCAweDg2ZmYsCisJMHgwMTEwLCAweGI4MDAsIDB4ZDBiYywgMHgwOTBjLCAweDY2ZGUsIDB4ODEwOCwgMHgxZjA0LCAweDMzOGEsCisJMHgyMDYxLCAweDE4MDAsIDB4NjA3ZiwgMHgwMDAwLCAweDYwODAsIDB4OTA4NCwgMHgwMGZmLCAweDYwODIsCisJMHg2MGIzLCAweDAwMDAsIDB4MDBiZSwgMHgwMGNlLCAweDAwMDUsIDB4MjAwMSwgMHgxODY5LCAweDIwMDQsCisJMHhkMGJjLCAweDAwMDUsIDB4MjAxMSwgMHgxODQ4LCAweDIyMTQsIDB4ZDJlYywgMHgwMDA1LCAweDAwMjYsCisJMHgyMDExLCAweDE4NjcsIDB4MjIxNCwgMHhkMmRjLCAweDAwMmUsIDB4MDAwNSwgMHg3ZWVmLCAweDdkZTgsCisJMHg3Y2U0LCAweDgwZTIsIDB4N2JlMSwgMHg4MGUwLCAweDgwZGMsIDB4ODBkYSwgMHg3YWQ5LCAweDgwZDYsCisJMHg4MGQ1LCAweDgwZDQsIDB4ODBkMywgMHg4MGQyLCAweDgwZDEsIDB4NzljZSwgMHg3OGNkLCAweDgwY2MsCisJMHg4MGNiLCAweDgwY2EsIDB4ODBjOSwgMHg4MGM3LCAweDgwYzYsIDB4NzdjNSwgMHg3NmMzLCAweDgwYmMsCisJMHg4MGJhLCAweDc1YjksIDB4ODBiNiwgMHg3NGI1LCAweDczYjQsIDB4NzJiMywgMHg4MGIyLCAweDgwYjEsCisJMHg4MGFlLCAweDcxYWQsIDB4ODBhYywgMHg3MGFiLCAweDZmYWEsIDB4NmVhOSwgMHg4MGE3LCAweDZkYTYsCisJMHg2Y2E1LCAweDZiYTMsIDB4NmE5ZiwgMHg2OTllLCAweDY4OWQsIDB4ODA5YiwgMHg4MDk4LCAweDY3OTcsCisJMHg2NjkwLCAweDY1OGYsIDB4NjQ4OCwgMHg2Mzg0LCAweDYyODIsIDB4ODA4MSwgMHg4MDgwLCAweDYxN2MsCisJMHg2MDdhLCAweDgwNzksIDB4NWY3NiwgMHg4MDc1LCAweDgwNzQsIDB4ODA3MywgMHg4MDcyLCAweDgwNzEsCisJMHg4MDZlLCAweDVlNmQsIDB4ODA2YywgMHg1ZDZiLCAweDVjNmEsIDB4NWI2OSwgMHg4MDY3LCAweDVhNjYsCisJMHg1OTY1LCAweDU4NjMsIDB4NTc1YywgMHg1NjVhLCAweDU1NTksIDB4ODA1NiwgMHg4MDU1LCAweDU0NTQsCisJMHg1MzUzLCAweDUyNTIsIDB4NTE1MSwgMHg1MDRlLCAweDRmNGQsIDB4ODA0YywgMHg4MDRiLCAweDRlNGEsCisJMHg0ZDQ5LCAweDgwNDcsIDB4NGM0NiwgMHg4MDQ1LCAweDgwNDMsIDB4ODAzYywgMHg4MDNhLCAweDgwMzksCisJMHg4MDM2LCAweDRiMzUsIDB4ODAzNCwgMHg0YTMzLCAweDQ5MzIsIDB4NDgzMSwgMHg4MDJlLCAweDQ3MmQsCisJMHg0NjJjLCAweDQ1MmIsIDB4NDQyYSwgMHg0MzI5LCAweDQyMjcsIDB4ODAyNiwgMHg4MDI1LCAweDQxMjMsCisJMHg0MDFmLCAweDNmMWUsIDB4M2UxZCwgMHgzZDFiLCAweDNjMTgsIDB4ODAxNywgMHg4MDEwLCAweDNiMGYsCisJMHgzYTA4LCAweDgwMDQsIDB4MzkwMiwgMHg4MDAxLCAweDgwMDAsIDB4ODAwMCwgMHgzODAwLCAweDM3MDAsCisJMHgzNjAwLCAweDgwMDAsIDB4MzUwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzNDAwLCAweDgwMDAsCisJMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzMwMCwgMHgzMjAwLCAweDgwMDAsCisJMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzEwMCwgMHgzMDAwLCAweDgwMDAsCisJMHg4MDAwLCAweDJmMDAsIDB4ODAwMCwgMHgyZTAwLCAweDJkMDAsIDB4MmMwMCwgMHg4MDAwLCAweDgwMDAsCisJMHg4MDAwLCAweDJiMDAsIDB4ODAwMCwgMHgyYTAwLCAweDI5MDAsIDB4MjgwMCwgMHg4MDAwLCAweDI3MDAsCisJMHgyNjAwLCAweDI1MDAsIDB4MjQwMCwgMHgyMzAwLCAweDIyMDAsIDB4ODAwMCwgMHg4MDAwLCAweDIxMDAsCisJMHgyMDAwLCAweDFmMDAsIDB4MWUwMCwgMHgxZDAwLCAweDFjMDAsIDB4ODAwMCwgMHg4MDAwLCAweDFiMDAsCisJMHgxYTAwLCAweDgwMDAsIDB4MTkwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCisJMHg4MDAwLCAweDE4MDAsIDB4ODAwMCwgMHgxNzAwLCAweDE2MDAsIDB4MTUwMCwgMHg4MDAwLCAweDE0MDAsCisJMHgxMzAwLCAweDEyMDAsIDB4MTEwMCwgMHgxMDAwLCAweDBmMDAsIDB4ODAwMCwgMHg4MDAwLCAweDBlMDAsCisJMHgwZDAwLCAweDBjMDAsIDB4MGIwMCwgMHgwYTAwLCAweDA5MDAsIDB4ODAwMCwgMHg4MDAwLCAweDA4MDAsCisJMHgwNzAwLCAweDgwMDAsIDB4MDYwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwNTAwLCAweDA0MDAsCisJMHgwMzAwLCAweDgwMDAsIDB4MDIwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwMTAwLCAweDgwMDAsCisJMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDAwMCwgMHg4MDAwLCAweDgwMDAsCisJMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCisJMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgyMDcxLCAweDE4OWUsCisJMHg3MDAzLCAweDAwMDIsIDB4OTAwNiwgMHg3MDE2LCAweDcwMWEsIDB4NzA0YSwgMHg3MDRlLCAweDcwMGUsCisJMHg3MDQyLCAweDcwNDYsIDB4NzAzYiwgMHgxOGJhLCAweDcwM2YsIDB4MThiYSwgMHg3MDA3LCAweDAwMDEsCisJMHgwODBjLCAweDEwMjcsIDB4MDkwYywgMHgwZGM1LCAweDI5MDAsIDB4NzA2YSwgMHhhODY3LCAweDAwMDIsCisJMHhhOGFiLCAweGRjYjAsIDB4MDgwYywgMHgxMDI3LCAweDA5MGMsIDB4MGRjNSwgMHgyOTAwLCAweDcwNmUsCisJMHhhODY3LCAweDAwMDIsIDB4YThhYiwgMHhkY2IwLCAweDAwMDUsIDB4MjA3MSwgMHgxODllLCAweDcwMDQsCisJMHgwMDAyLCAweDM0ZTUsIDB4MzRlNiwgMHgzNGY5LCAweDM1MGQsIDB4MDAwNSwgMHgxMDA0LCAweDM0ZjYsCisJMHgwZTA0LCAweDM0ZjYsIDB4MjA3OSwgMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMGMsCisJMHg5MDA1LCAweDExMjgsIDB4NzAwZiwgMHgwMDAxLCAweDAxMmUsIDB4MDQ2OCwgMHgwMDA1LCAweDAxMmUsCisJMHgwY2U4LCAweDIwNzksIDB4MDAwMCwgMHgyMDYxLCAweDE4YjgsIDB4MmM0YywgMHhhODZjLCAweDkwOGUsCisJMHgwMTAwLCAweDAxMjgsIDB4OTA4NiwgMHgwMjAwLCAweDA5MDQsIDB4MzVlMSwgMHgwMDA1LCAweDcwMTgsCisJMHgyMDQ4LCAweDIwNjEsIDB4MTgwMCwgMHg3MDFjLCAweDA4MDcsIDB4NzAxNCwgMHgyMDQ4LCAweGE4NjQsCisJMHg5MDk0LCAweDAwZmYsIDB4OTI5NiwgMHgwMDI5LCAweDExMjAsIDB4YWE3OCwgMHhkMmZjLCAweDAxMjgsCisJMHgwMDA1LCAweDkwODYsIDB4MDEwMywgMHgwMTA4LCAweDAwMDUsIDB4MjA3OSwgMHgwMDAwLCAweDIwNjEsCisJMHgxODAwLCAweDcwMWMsIDB4MDgwNywgMHgyMDYxLCAweDE4MDAsIDB4Nzg4MCwgMHg5MDhhLCAweDAwNDAsCisJMHgxMjEwLCAweDYxZDAsIDB4MDA0MiwgMHgyMTAwLCAweDkwOGEsIDB4MDAzZiwgMHgxYTA0LCAweDM1ZGUsCisJMHg2MWQwLCAweDA4MDQsIDB4MzU3MywgMHgzNWI1LCAweDM1ZWQsIDB4MzVkZSwgMHgzNWY5LCAweDM2MDMsCisJMHgzNjA5LCAweDM2MGQsIDB4MzYxZCwgMHgzNjIxLCAweDM2MzcsIDB4MzYzZCwgMHgzNjQzLCAweDM2NGUsCisJMHgzNjU5LCAweDM2NjgsIDB4MzY3NywgMHgzNjg1LCAweDM2OWMsIDB4MzZiNywgMHgzNWRlLCAweDM3NjIsCisJMHgzN2EwLCAweDM4NDYsIDB4Mzg1NywgMHgzODdhLCAweDM1ZGUsIDB4MzVkZSwgMHgzNWRlLCAweDM4YjIsCisJMHgzOGNlLCAweDM4ZDcsIDB4MzkwNiwgMHgzOTBjLCAweDM1ZGUsIDB4Mzk1MiwgMHgzNWRlLCAweDM1ZGUsCisJMHgzNWRlLCAweDM1ZGUsIDB4MzVkZSwgMHgzOTVkLCAweDM5NjYsIDB4Mzk2ZSwgMHgzOTcwLCAweDM1ZGUsCisJMHgzNWRlLCAweDM1ZGUsIDB4MzVkZSwgMHgzNWRlLCAweDM1ZGUsIDB4Mzk5YywgMHgzNWRlLCAweDM1ZGUsCisJMHgzNWRlLCAweDM1ZGUsIDB4MzVkZSwgMHgzOWI5LCAweDNhNDAsIDB4MzVkZSwgMHgzNWRlLCAweDM1ZGUsCisJMHgzNWRlLCAweDM1ZGUsIDB4MzVkZSwgMHgwMDAyLCAweDNhNmEsIDB4M2E2ZCwgMHgzYWNjLCAweDNhZTUsCisJMHgzYjE1LCAweDNkYjcsIDB4MzVkZSwgMHg1Mzk4LCAweDM1ZGUsIDB4MzVkZSwgMHgzNWRlLCAweDM1ZGUsCisJMHgzNWRlLCAweDM1ZGUsIDB4MzVkZSwgMHgzNWRlLCAweDM2MzcsIDB4MzYzZCwgMHg0MmVjLCAweDU3ZjksCisJMHg0MzBhLCAweDU0MjcsIDB4NTQ3OSwgMHg1NTg0LCAweDM1ZGUsIDB4NTVlNiwgMHg1NjIyLCAweDU2NTMsCisJMHg1NzViLCAweDU2ODAsIDB4NTZkYiwgMHgzNWRlLCAweDQzMGUsIDB4NDRlMSwgMHg0NGY3LCAweDQ1MWMsCisJMHg0NTgxLCAweDQ1ZjUsIDB4NDYxNSwgMHg0NjhjLCAweDQ2ZTgsIDB4NDc0NCwgMHg0NzQ3LCAweDQ3NmMsCisJMHg0ODIzLCAweDQ4ODksIDB4NDg5MSwgMHg0OWM2LCAweDRiNmUsIDB4NGJhMiwgMHg0ZTA2LCAweDM1ZGUsCisJMHg0ZTI0LCAweDRlZWIsIDB4NGZkNCwgMHg1MDJlLCAweDM1ZGUsIDB4NTBjMSwgMHgzNWRlLCAweDUwZDcsCisJMHg1MGYyLCAweDQ4OTEsIDB4NTMzOCwgMHg3MTRjLCAweDAwMDAsIDB4MjAyMSwgMHg0MDAwLCAweDA4MGMsCisJMHg0YzIwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4MzViZiwgMHgwMDEwLCAweDAxMmUsCisJMHgwY2MwLCAweDdjMzYsIDB4OTQ4NiwgMHg0MDAwLCAweDAxMTgsIDB4NzgzMywgMHgwMDExLCAweDAwMTAsCisJMHg3ODMzLCAweDAwMTAsIDB4N2M4MiwgMHg3OTg2LCAweDdhOGEsIDB4N2I4ZSwgMHgyMDkxLCAweDQwODAsCisJMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHg3MDA3LCAweDAwMDEsCisJMHgyMDkxLCAweDUwMDAsIDB4NzAwZiwgMHgwMDAwLCAweDAxMmUsIDB4MDAwNSwgMHgyMDIxLCAweDQwMDEsCisJMHgwOGIwLCAweDIwMjEsIDB4NDAwMiwgMHgwODk4LCAweDIwMjEsIDB4NDAwMywgMHgwODgwLCAweDIwMjEsCisJMHg0MDA1LCAweDA4NjgsIDB4MjAyMSwgMHg0MDA2LCAweDA4NTAsIDB4MjAzOSwgMHgwMDAxLCAweDkwMmUsCisJMHgyNTIwLCAweDdiODgsIDB4N2E4YywgMHg3ODg0LCAweDc5OTAsIDB4ODFmZiwgMHgwZDk4LCAweDA4MDQsCisJMHg0YzJkLCAweDIwMzksIDB4MDAwMSwgMHg5MDJlLCAweDI1MjAsIDB4N2I4OCwgMHg3YThjLCAweDc4ODQsCisJMHg3OTkwLCAweDA4MDQsIDB4NGMzMCwgMHg3OTg0LCAweDc4ODgsIDB4MjExNCwgMHgyMDBhLCAweDA4MDQsCisJMHgzNWI1LCAweDc5ODQsIDB4MjExNCwgMHgwODA0LCAweDM1YjUsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksCisJMHgwMDIxLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAwMjEsIDB4MjBhOSwgMHgwMDFmLCAweDQwMDMsCisJMHg3OTg0LCAweDdhODgsIDB4N2I4YywgMHgwODA0LCAweDM1YjUsIDB4Nzg4NCwgMHgyMDYwLCAweDA4MDQsCisJMHgzNjZhLCAweDIwMDksIDB4MDAwMywgMHgyMDExLCAweDAwMDMsIDB4MjAxOSwgMHgwMDE0LCAweDc4OWIsCisJMHgwMTM3LCAweDc4OTMsIDB4ZmZmZiwgMHgyMDAxLCAweDE4OGYsIDB4MjAwNCwgMHg5MDA1LCAweDAxMTgsCisJMHg3ODk2LCAweDA4MDQsIDB4MzViNSwgMHg3ODk3LCAweDAwMDEsIDB4MDgwNCwgMHgzNWI1LCAweDIwMzksCisJMHgwMDAxLCAweDdkOTgsIDB4N2M5YywgMHgwODA0LCAweDM1ZjEsIDB4MjAzOSwgMHgwMDAxLCAweDdkOTgsCisJMHg3YzljLCAweDA4MDQsIDB4MzVmZCwgMHg3OWEwLCAweDkxODIsIDB4MDA0MCwgMHgwMjEwLCAweDA4MDQsCisJMHgzNWVhLCAweDIxMzgsIDB4N2Q5OCwgMHg3YzljLCAweDA4MDQsIDB4MzVmMSwgMHg3OWEwLCAweDkxODIsCisJMHgwMDQwLCAweDAyMTAsIDB4MDgwNCwgMHgzNWVhLCAweDIxMzgsIDB4N2Q5OCwgMHg3YzljLCAweDA4MDQsCisJMHgzNWZkLCAweDc5YTAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMTAsIDB4MDgwNCwgMHgzNWVhLCAweDIxZTgsCisJMHg3OTg0LCAweDc4ODgsIDB4MjBhOSwgMHgwMDAxLCAweDIxYTAsIDB4NDAwNCwgMHgwODA0LCAweDM1YjUsCisJMHgyMDYxLCAweDA4MDAsIDB4ZTEwYywgMHg5MDA2LCAweDJjMTUsIDB4OTIwMCwgMHg4YzYwLCAweDgxMDksCisJMHgxZGQ4LCAweDIwMTAsIDB4OTAwNSwgMHgwOTA0LCAweDM1YjUsIDB4MDgwNCwgMHgzNWU0LCAweDc5YTAsCisJMHg5MTgyLCAweDAwNDAsIDB4MDIxMCwgMHgwODA0LCAweDM1ZWEsIDB4MjFlMCwgMHgyMGE5LCAweDAwMDEsCisJMHg3OTg0LCAweDIxOTgsIDB4NDAxMiwgMHgwODA0LCAweDM1YjUsIDB4MjA2OSwgMHgxODQ3LCAweDc4ODQsCisJMHg3OTkwLCAweDkxMWEsIDB4MWEwNCwgMHgzNWVhLCAweDgwMTksIDB4MDkwNCwgMHgzNWVhLCAweDY4NGEsCisJMHg2OTQyLCAweDc4OGMsIDB4Njg1MiwgMHg3ODg4LCAweDY4NTYsIDB4OTAwNiwgMHg2ODVhLCAweDY4NWUsCisJMHgwODBjLCAweDc5NjMsIDB4MDgwNCwgMHgzNWI1LCAweDIwNjksIDB4MTg0NywgMHg3ODg0LCAweDc5OTQsCisJMHg5MTFhLCAweDFhMDQsIDB4MzVlYSwgMHg4MDE5LCAweDA5MDQsIDB4MzVlYSwgMHg2ODRlLCAweDY5NDYsCisJMHg3ODhjLCAweDY4NjIsIDB4Nzg4OCwgMHg2ODY2LCAweDkwMDYsIDB4Njg2YSwgMHg2ODZlLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2YmY4LCAweDAxMmUsIDB4MDgwNCwgMHgzNWI1LCAweDkwMmUsCisJMHgyNTIwLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNWU3LCAweDc5ODQsCisJMHg3Yjg4LCAweDdhOGMsIDB4MjBhOSwgMHgwMDA1LCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDE4YTYsCisJMHg0MTAxLCAweDA4MGMsIDB4NGJlNCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM1ZTcsCisJMHgyMDA5LCAweDAwMjAsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4YWY2MCwgMHgwODBjLCAweDRjMmQsCisJMHg3MDFmLCAweDM2ZGIsIDB4MDAwNSwgMHhhODY0LCAweDIwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDkwOTYsCisJMHgwMDExLCAweDAxNjgsIDB4OTA5NiwgMHgwMDE5LCAweDAxNTAsIDB4OTA5NiwgMHgwMDE1LCAweDAxMzgsCisJMHg5MDk2LCAweDAwNDgsIDB4MDEyMCwgMHg5MDk2LCAweDAwMjksIDB4MTkwNCwgMHgzNWU3LCAweDgxMGYsCisJMHg5MThjLCAweDAwZmYsIDB4MDkwNCwgMHgzNWU3LCAweDcxMTIsIDB4NzAxMCwgMHg4MDAxLCAweDA1NjAsCisJMHg3MDEyLCAweDA4MGMsIDB4NGJlNCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM1ZTcsCisJMHgyMDA5LCAweDAwMjAsIDB4NzA2OCwgMHgyMDQwLCAweGEyOGMsIDB4YTM5MCwgMHhhNDk0LCAweGE1OTgsCisJMHg5MjkwLCAweDAwNDAsIDB4OTM5OSwgMHgwMDAwLCAweDk0YTEsIDB4MDAwMCwgMHg5NWE5LCAweDAwMDAsCisJMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHhhZjYwLCAweDA4MGMsIDB4NGMyZCwgMHg3MDFmLCAweDM3MTksCisJMHgwMDA1LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwOTYsIDB4MDAwMiwgMHgwMTIwLCAweDkwOTYsCisJMHgwMDBhLCAweDE5MDQsIDB4MzVlNywgMHgwODg4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMTQsCisJMHgyMDQ4LCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwOTYsCisJMHgwMDI5LCAweDExNDgsIDB4YzJmZCwgMHhhYTdhLCAweDA4MGMsIDB4NjI5ZiwgMHgwMTM4LCAweGE4N2EsCisJMHhhOTgyLCAweDAxMmUsIDB4MDA2MCwgMHgwODBjLCAweDY1Y2YsIDB4MTEzMCwgMHg3MDA3LCAweDAwMDMsCisJMHg3MDFmLCAweDM3NDcsIDB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4NzEwYiwgMHgwMTJlLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MjBhOSwgMHgwMDA1LCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDE4YTYsCisJMHg0MDBhLCAweDIxMDAsIDB4OTIxMCwgMHg5Mzk5LCAweDAwMDAsIDB4OTRhMSwgMHgwMDAwLCAweDk1YTksCisJMHgwMDAwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDIwMDksIDB4MDAyMCwgMHgwMTJlLCAweGFmNjAsCisJMHgwODA0LCAweDRjMzAsIDB4MjA5MSwgMHg4MDAwLCAweDc4MzcsIDB4NDAwMCwgMHg3ODMzLCAweDAwMTAsCisJMHg3ODgzLCAweDQwMDAsIDB4Nzg4NywgMHg0OTUzLCAweDc4OGIsIDB4NTAyMCwgMHg3ODhmLCAweDIwMjAsCisJMHgyMDA5LCAweDAxN2YsIDB4MjEwNCwgMHg3ODkyLCAweDNmMDAsIDB4Nzg5NiwgMHgyMDYxLCAweDAxMDAsCisJMHg2MjAwLCAweDIwNjEsIDB4MDIwMCwgMHg2MDNjLCAweDgwMDcsIDB4OTIwNSwgMHg3ODlhLCAweDIwMDksCisJMHgwNGZkLCAweDIxMDQsIDB4Nzg5ZSwgMHgyMDkxLCAweDUwMDAsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsCisJMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgwMTgwLCAweDIwMDEsIDB4MWExYywgMHgyMDA0LCAweDkwMDUsCisJMHgwMTI4LCAweDIwMDEsIDB4MDA4YiwgMHgyMDA0LCAweGQwZmMsIDB4MGRkOCwgMHgyMDAxLCAweDAwOGEsCisJMHgyMDAzLCAweDAwMDIsIDB4MjAwMywgMHgxMDAxLCAweDIwNzEsIDB4MDA4MCwgMHgwODA0LCAweDA0MjcsCisJMHg4MWZmLCAweDE5MDQsIDB4MzVlNywgMHg3OTg0LCAweDA4MGMsIDB4NjcyNCwgMHgxOTA0LCAweDM1ZWEsCisJMHg3ZTk4LCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLCAweDQwMDAsIDB4MWEwNCwgMHgzNWVhLCAweDdjODgsCisJMHg3ZDhjLCAweDA4MGMsIDB4Njg4NywgMHgwODBjLCAweDY4NTYsIDB4MDAwMCwgMHgxNTE4LCAweDIwNjEsCisJMHgxY2QwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDAxNDgsCisJMHg2MDE0LCAweDkwNGQsIDB4MDEzMCwgMHhhODZjLCAweDk0MDYsIDB4MTExOCwgMHhhODcwLCAweDk1MDYsCisJMHgwMTUwLCAweDAxMmUsIDB4OWNlMCwgMHgwMDE4LCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDljMDIsCisJMHgxYTA0LCAweDM1ZTcsIDB4MGMzMCwgMHgwODBjLCAweGNjZjMsIDB4MDEyZSwgMHgwOTA0LCAweDM1ZTcsCisJMHgwODA0LCAweDM1YjUsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDUsIDB4MDgwYywgMHg3MTBiLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhkM2Q0LCAweDA4MGMsIDB4NmU5ZiwgMHgwMTJlLCAweDA4MDQsCisJMHgzNWI1LCAweDAwYTYsIDB4Mjk1MCwgMHhiMTk4LCAweDA4MGMsIDB4NjcyNCwgMHgxOTA0LCAweDM4MzMsCisJMHhiNmE0LCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLCAweDQwMDAsIDB4MTZlOCwgMHhiNDljLCAweGI1YTAsCisJMHgwODBjLCAweDY4ODcsIDB4MDgwYywgMHg2ODU2LCAweDE1MjAsIDB4MjA2MSwgMHgxY2QwLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg2MDE0LCAweDkwNGQsCisJMHgwMTMwLCAweGE4NmMsIDB4OTQwNiwgMHgxMTE4LCAweGE4NzAsIDB4OTUwNiwgMHgwMTU4LCAweDAxMmUsCisJMHg5Y2UwLCAweDAwMTgsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgyMDA5LCAweDAwMGQsCisJMHgxMmIwLCAweDBjMjgsIDB4MDgwYywgMHhjY2YzLCAweDAxMmUsIDB4MjAwOSwgMHgwMDAzLCAweDAxNzgsCisJMHgwMGUwLCAweDkwMGUsIDB4MjAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NzEwYiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDA4MGMsIDB4ZDNkNCwgMHgwODBjLCAweDZlOTIsIDB4MDEyZSwgMHgwMDcwLCAweGIwOTcsCisJMHg0MDA1LCAweGIxOWEsIDB4MDAxMCwgMHhiMDk3LCAweDQwMDYsIDB4OTAwZSwgMHg5MDg1LCAweDAwMDEsCisJMHgyMDAxLCAweDAwMzAsIDB4MmE0OCwgMHgwMGFlLCAweDAwMDUsIDB4YjA5NywgMHg0MDAwLCAweDkwMDYsCisJMHg5MThkLCAweDAwMDEsIDB4MjAwOCwgMHgyYTQ4LCAweDAwYWUsIDB4MDAwNSwgMHg4MWZmLCAweDE5MDQsCisJMHgzNWU3LCAweDA4MGMsIDB4NGJmYiwgMHgwOTA0LCAweDM1ZWEsIDB4MDgwYywgMHg2N2ViLCAweDA5MDQsCisJMHgzNWU3LCAweDA4MGMsIDB4Njg4ZCwgMHgwOTA0LCAweDM1ZTcsIDB4MDgwNCwgMHg0NjBjLCAweDgxZmYsCisJMHgxOTA0LCAweDM1ZTcsIDB4MDgwYywgMHg0YzE3LCAweDA5MDQsIDB4MzVlYSwgMHgwODBjLCAweDY5MWIsCisJMHgwOTA0LCAweDM1ZTcsIDB4MjAxOSwgMHgwMDA1LCAweDc5YTgsIDB4MDgwYywgMHg2OGE4LCAweDA5MDQsCisJMHgzNWU3LCAweDc4ODgsIDB4OTA4YSwgMHgxMDAwLCAweDFhMDQsIDB4MzVlYSwgMHg4MDAzLCAweDgwMGIsCisJMHg4MTBiLCAweDkxMDgsIDB4MDgwYywgMHg4ODRiLCAweDc5YTgsIDB4ZDE4NCwgMHgxOTA0LCAweDM1YjUsCisJMHgwODA0LCAweDQ2MGMsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4ODFmZiwgMHgwMTE4LCAweDIwMDksCisJMHgwMDAxLCAweDA0NTAsIDB4MjAyOSwgMHgwN2ZmLCAweDY0NWMsIDB4MjQwMCwgMHg5NTA2LCAweDAxZjgsCisJMHgyNTA4LCAweDA4MGMsIDB4NjcyNCwgMHgxMWQ4LCAweDA4MGMsIDB4NjkxYiwgMHgxMTI4LCAweDIwMDksCisJMHgwMDAyLCAweDYyYzAsIDB4MjUxOCwgMHgwMGMwLCAweDIwMTksIDB4MDAwNCwgMHg5MDBlLCAweDA4MGMsCisJMHg2OGE4LCAweDExMTgsIDB4MjAwOSwgMHgwMDA2LCAweDAwNzgsIDB4Nzg4NCwgMHg5MDhhLCAweDEwMDAsCisJMHgxMjcwLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweDkxMDgsIDB4MDgwYywgMHg4ODRiLCAweDg1MjksCisJMHgxYWUwLCAweDAxMmUsIDB4MDgwNCwgMHgzNWI1LCAweDAxMmUsIDB4MDgwNCwgMHgzNWU3LCAweDAxMmUsCisJMHgwODA0LCAweDM1ZWEsIDB4MDgwYywgMHg0YmZiLCAweDA5MDQsIDB4MzVlYSwgMHgwODBjLCAweDY3ZWIsCisJMHgwOTA0LCAweDM1ZTcsIDB4YmFhMCwgMHgyMDE5LCAweDAwMDUsIDB4MDBjNiwgMHg5MDY2LCAweDA4MGMsCisJMHg5NmE0LCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweDk1NzcsIDB4OTAwZSwgMHgwODBjLCAweGU5MWMsCisJMHgwMDdlLCAweDAwY2UsIDB4MDgwYywgMHg2ODg3LCAweDA4MDQsIDB4MzViNSwgMHgwODBjLCAweDRiZmIsCisJMHgwOTA0LCAweDM1ZWEsIDB4MDgwYywgMHg2ODg3LCAweDIyMDgsIDB4MDgwNCwgMHgzNWI1LCAweDAxNTYsCisJMHgwMGQ2LCAweDAwZTYsIDB4MjA2OSwgMHgxOTEwLCAweDY4MTAsIDB4NjkxNCwgMHg5MTBhLCAweDEyMDgsCisJMHg5MDBlLCAweDY4MTYsIDB4OTAxNiwgMHg5MDFlLCAweDIwYTksIDB4MDA3ZSwgMHgyMDY5LCAweDEwMDAsCisJMHgyZDA0LCAweDkwNWQsIDB4MDExOCwgMHhiODRjLCAweDAwNTksIDB4OTIxMCwgMHg4ZDY4LCAweDFmMDQsCisJMHgzOGU4LCAweDIzMDAsIDB4OTIxOCwgMHgwMGVlLCAweDAwZGUsIDB4MDE1ZSwgMHgwODA0LCAweDM1YjUsCisJMHgwMGY2LCAweDAwMTYsIDB4OTA3ZCwgMHgwMTM4LCAweDkwMDYsIDB4ODAwMCwgMHgyZjBjLCAweDgxZmYsCisJMHgwMTEwLCAweDIxNzgsIDB4MGNkMCwgMHgwMDFlLCAweDAwZmUsIDB4MDAwNSwgMHgyMDY5LCAweDE5MTAsCisJMHg2OTEwLCAweDYyYmMsIDB4MDgwNCwgMHgzNWI1LCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsCisJMHgwODA0LCAweDM1ZTcsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg1N2U5LCAweDAxMjgsCisJMHgyMDA5LCAweDAwMDcsIDB4MDEyZSwgMHgwODA0LCAweDM1ZTcsIDB4MDEyZSwgMHg2MTVjLCAweDkxOTAsCisJMHgzM2I2LCAweDIyMTUsIDB4OTI5NCwgMHgwMGZmLCAweDYzN2MsIDB4ODNmZiwgMHgwMTA4LCAweDYyODAsCisJMHg2N2RjLCAweDk3YzQsIDB4MDAwYSwgMHg5OGM2LCAweDAwMGEsIDB4MTExOCwgMHgyMDMxLCAweDAwMDEsCisJMHgwMGU4LCAweDk3YzQsIDB4MDAyMiwgMHg5OGM2LCAweDAwMjIsIDB4MTExOCwgMHgyMDMxLCAweDAwMDMsCisJMHgwMGE4LCAweDk3YzQsIDB4MDAxMiwgMHg5OGM2LCAweDAwMTIsIDB4MTExOCwgMHgyMDMxLCAweDAwMDIsCisJMHgwMDY4LCAweDA4MGMsIDB4NzYzNywgMHgxMTE4LCAweDIwMzEsIDB4MDAwNCwgMHgwMDM4LCAweGQ3OWMsCisJMHgwMTIwLCAweDIwMDksIDB4MDAwNSwgMHgwODA0LCAweDM1ZTcsIDB4OTAzNiwgMHg3ZTlhLCAweDdmOWUsCisJMHgwODA0LCAweDM1YjUsIDB4NjE0YywgMHg2MjUwLCAweDIwMTksIDB4MTk4NiwgMHgyMzFjLCAweDIwMDEsCisJMHgxOTg3LCAweDIwMDQsIDB4Nzg5YSwgMHgwODA0LCAweDM1YjUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHg2MTM4LCAweDYyM2MsIDB4NjM0MCwgMHgwMTJlLCAweDA4MDQsIDB4MzViNSwgMHgwODBjLCAweDRjMTcsCisJMHgwOTA0LCAweDM1ZWEsIDB4YmE0NCwgMHhiYjM4LCAweDA4MDQsIDB4MzViNSwgMHgwODBjLCAweDBkYzUsCisJMHgwODBjLCAweDRjMTcsIDB4MjExMCwgMHgwOTA0LCAweDM1ZWEsIDB4YjgwNCwgMHg5MDhjLCAweDAwZmYsCisJMHg5MThlLCAweDAwMDYsIDB4MDE0MCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHgwNjAwLCAweDIwMDksCisJMHgwMDA5LCAweDE5MDQsIDB4MzVlNywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDE5LCAweDAwMDUsCisJMHgwMGM2LCAweDkwNjYsIDB4MDgwYywgMHhhYzZjLCAweDA4MGMsIDB4OTZhNCwgMHgwMDc2LCAweDkwM2UsCisJMHgwODBjLCAweDk1NzcsIDB4OTAwZSwgMHgwODBjLCAweGU5MWMsIDB4MDA3ZSwgMHgwMGNlLCAweGI4MDcsCisJMHgwNDA3LCAweDAxMmUsIDB4MDgwNCwgMHgzNWI1LCAweDYxNGMsIDB4NjI1MCwgMHg3ODg0LCAweDYwNGUsCisJMHg3Yjg4LCAweDYzNTIsIDB4MjA2OSwgMHgxODQ3LCAweDgzMWYsIDB4OTMwNSwgMHg2ODE2LCAweDc4OGMsCisJMHgyMDY5LCAweDE5ODYsIDB4MmQxYywgMHgyMDZhLCAweDdlOTgsIDB4OTY4MiwgMHgwMDE0LCAweDEyMTAsCisJMHgyMDMxLCAweDA3ZDAsIDB4MjA2OSwgMHgxOTg3LCAweDJkMDQsIDB4MjY2YSwgMHg3ODlhLCAweDA4MDQsCisJMHgzNWI1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYxMzgsIDB4Nzg4NCwgMHg2MDNhLCAweDkxMGUsCisJMHhkMWI0LCAweDE5MGMsIDB4MGViZSwgMHhkMDk0LCAweDAxNDgsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZmIsCisJMHg3OWI0LCAweDkxOTIsIDB4MDdkMCwgMHgxMjA4LCAweDcxM2UsIDB4MDBlZSwgMHhkMGM0LCAweDAxYTgsCisJMHgwMGQ2LCAweDc4YTgsIDB4MjAwOSwgMHgxOTlkLCAweDIwMGEsIDB4NzhhYywgMHgyMDExLCAweDE5OWUsCisJMHgyMDEyLCAweDIwNjksIDB4MDEwMCwgMHg2ODM4LCAweDkwODYsIDB4MDAwNywgMHgxMTE4LCAweDIyMTQsCisJMHg2YTVhLCAweDAwMTAsIDB4MjEwYywgMHg2OTVhLCAweDAwZGUsIDB4Nzg4OCwgMHhkMGVjLCAweDAxNzgsCisJMHg2MDM0LCAweGMwOGQsIDB4NjAzNiwgMHgyMDAxLCAweDAwNTAsIDB4NjA3NiwgMHg2MDdhLCAweDYwNTYsCisJMHg2MDZiLCAweDI0NTAsIDB4MDBjNiwgMHgyMDYxLCAweDFhZDEsIDB4MjA2MiwgMHgwMGNlLCAweDIwMTEsCisJMHgwMTE0LCAweDIyMGMsIDB4Nzg4OCwgMHhkMDhjLCAweDAxMTgsIDB4OTE4ZCwgMHgwMDgwLCAweDAwMTAsCisJMHg5MThjLCAweGZmN2YsIDB4MjExMiwgMHg2MDNjLCAweDc5ODgsIDB4NjEzZSwgMHg2MTQwLCAweDkxMGQsCisJMHg3ODhjLCAweDYwNDIsIDB4N2E4OCwgMHg5Mjk0LCAweDEwMDAsIDB4OTIwNSwgMHg5MTBlLCAweGQxZTQsCisJMHgxOTBjLCAweDBlZDQsIDB4OTA4NCwgMHgwMDIwLCAweDAxMzAsIDB4NzhiNCwgMHg2MDQ2LCAweDkwODQsCisJMHgwMDAxLCAweDA5MGMsIDB4NDJlYywgMHg2MDQwLCAweGQwY2MsIDB4MDEyMCwgMHg3OGIwLCAweDIwMTEsCisJMHgwMTE0LCAweDIwMTIsIDB4MDEyZSwgMHgwODA0LCAweDM1YjUsIDB4MDBmNiwgMHgyMDc5LCAweDE4MDAsCisJMHg3YTM4LCAweGE4OTgsIDB4OTA4NCwgMHhmZWJmLCAweDkyMTUsIDB4YTg5YywgMHg5MDg0LCAweGZlYmYsCisJMHg4MDAyLCAweDkyMTQsIDB4NzgzOCwgMHg5MDg0LCAweDAxNDAsIDB4OTIxNSwgMHg3YTNhLCAweGE4OTcsCisJMHg0MDAwLCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsCisJMHg3ODk4LCAweDkwMDUsIDB4MDFhOCwgMHg3ODg4LCAweDkwMjUsIDB4MDkwNCwgMHgzNWVhLCAweDc4OGMsCisJMHg5MDJkLCAweDA5MDQsIDB4MzVlYSwgMHg5MDBlLCAweDA4MGMsIDB4NjcyNCwgMHgxMTIwLCAweGJhNDQsCisJMHhiYjM4LCAweGJjNDYsIDB4YmQzYSwgMHg5MTg2LCAweDA3ZmYsIDB4MDE5MCwgMHg4MTA4LCAweDBjYTAsCisJMHgwODBjLCAweDRjMTcsIDB4MDkwNCwgMHgzNWVhLCAweDc4ODgsIDB4OTAwZCwgMHgwOTA0LCAweDM1ZWEsCisJMHg3ODhjLCAweDkwMDUsIDB4MDkwNCwgMHgzNWVhLCAweGJhNDQsIDB4Yjk0NiwgMHhiYjM4LCAweGI4M2EsCisJMHgwODA0LCAweDM1YjUsIDB4MjAxMSwgMHhiYzA5LCAweDAwMTAsIDB4MjAxMSwgMHhiYzA1LCAweDA4MGMsCisJMHg1N2U5LCAweDE5MDQsIDB4MzVlNywgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg3OTg0LCAweDkxODYsCisJMHgwMGZmLCAweDExMzAsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsIDB4OTA4NSwgMHhmZjAwLCAweDAwODgsCisJMHg5MTgyLCAweDAwN2YsIDB4MTZlMCwgMHg5MTg4LCAweDMzYjYsIDB4MjEwZCwgMHg5MThjLCAweDAwZmYsCisJMHgyMDAxLCAweDE4MTgsIDB4MjAwNCwgMHgwMDI2LCAweDkxMTYsIDB4MDAyZSwgMHgwNTgwLCAweDgxMGYsCisJMHg5MTA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMDYsIDB4MDgwYywgMHhiMjdkLCAweDAwMGUsCisJMHgwNTEwLCAweDYwMmUsIDB4NjIwYSwgMHg3OTg0LCAweDAwYjYsIDB4MDgwYywgMHg2NmJmLCAweDJiMDgsCisJMHgwMGJlLCAweDE1MDAsIDB4NjExMiwgMHg2MDIzLCAweDAwMDEsIDB4MDgwYywgMHg0YmU0LCAweDAxZDAsCisJMHg5MDA2LCAweGE4NjYsIDB4NzAwNywgMHgwMDAzLCAweGE4MzIsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsCisJMHg3MDFmLCAweDNhYzUsIDB4MjkwMCwgMHg2MDE2LCAweDIwMDksIDB4MDAzMiwgMHgwODBjLCAweGIzNTIsCisJMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMTJlLCAweDAwY2UsIDB4MDgwNCwgMHgzNWU3LCAweDAwY2UsCisJMHgwODA0LCAweDM1ZWEsIDB4MDgwYywgMHhiMmQzLCAweDBjYjAsIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsCisJMHgwOTA0LCAweDM1ZTcsIDB4MDgwNCwgMHgzNWI1LCAweDIwNjEsIDB4MWE3NCwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDYwMDAsIDB4ZDA4NCwgMHgwMTcwLCAweDYxMDQsIDB4NjIwOCwgMHgyMDYxLCAweDE4MDAsCisJMHg2MzU0LCAweDYwNzQsIDB4Nzg5YSwgMHg2MGMwLCAweDc4OWUsIDB4NjBiYywgMHg3OGFhLCAweDAxMmUsCisJMHgwODA0LCAweDM1YjUsIDB4OTAwZSwgMHgyMTEwLCAweDBjODgsIDB4ODFmZiwgMHgxOTA0LCAweDM1ZTcsCisJMHgwODBjLCAweDc2MzcsIDB4MDkwNCwgMHgzNWU3LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyNTQsCisJMHg2MDc0LCAweDkyMDIsIDB4MDI0OCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHgyOGRjLCAweDA4MGMsCisJMHg1YTExLCAweDAxMmUsIDB4MDgwNCwgMHgzNWI1LCAweDAxMmUsIDB4MDgwNCwgMHgzNWVhLCAweDAwMDYsCisJMHgwMDE2LCAweDAwYzYsIDB4MDBlNiwgMHgyMDAxLCAweDE5YWEsIDB4MjA3MCwgMHgyMDYxLCAweDE4NDcsCisJMHg2MDA4LCAweDIwNzIsIDB4OTAwZSwgMHgyMDExLCAweDE0MDAsIDB4MDgwYywgMHg5Mzc1LCAweDcyMDYsCisJMHgwMGVlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHg4MWZmLCAweDAxMjgsIDB4MDEyZSwgMHgyMDIxLCAweDQwMGIsIDB4MDgwNCwgMHgzNWI3LCAweDc4ODQsCisJMHhkMGZjLCAweDAxNTgsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsIDB4OTAwNSwgMHgwMTgwLCAweDkwODIsCisJMHgwMGUxLCAweDAyOTgsIDB4MDEyZSwgMHgwODA0LCAweDM1ZWEsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsCisJMHg5MDA1LCAweDAxMjgsIDB4MjA2OSwgMHgxODQ3LCAweDY5MDgsIDB4OTEwMiwgMHgxMjMwLCAweDAxMmUsCisJMHgwODA0LCAweDM1ZWEsIDB4MDEyZSwgMHgwODA0LCAweDM1ZTcsIDB4MDgwYywgMHhiMjNkLCAweDBkZDAsCisJMHg3ODg0LCAweGQwZmMsIDB4MDkwNCwgMHgzYjk0LCAweDAwYzYsIDB4MDgwYywgMHg0YmU0LCAweDAwY2UsCisJMHgwZDg4LCAweGE4NjcsIDB4MDAwMCwgMHg3ODg0LCAweGE4MGEsIDB4Nzg5OCwgMHhhODBlLCAweDc4OWMsCisJMHhhODEyLCAweDIwMDEsIDB4MDAyZSwgMHgyMDA0LCAweGE4MWEsIDB4MjAwMSwgMHgwMDJmLCAweDIwMDQsCisJMHhhODFlLCAweDIwMDEsIDB4MDAzMCwgMHgyMDA0LCAweGE4MjIsIDB4MjAwMSwgMHgwMDMxLCAweDIwMDQsCisJMHhhODI2LCAweDIwMDEsIDB4MDAzNCwgMHgyMDA0LCAweGE4MmEsIDB4MjAwMSwgMHgwMDM1LCAweDIwMDQsCisJMHhhODJlLCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODAsIDB4MDAwMywgMHg5MDg0LCAweDAwZmMsCisJMHg4MDA0LCAweGE4MTYsIDB4MDgwYywgMHgzZDFhLCAweDA5MjgsIDB4NzAxNCwgMHgyMDQ4LCAweGFkMmMsCisJMHhhYzI4LCAweGFiMWMsIDB4YWExOCwgMHhhOTMwLCAweGE4MDgsIDB4ZDBiNCwgMHgxMTIwLCAweDIwMjksCisJMHgwMDAwLCAweDIwMjEsIDB4MDAwMCwgMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsCisJMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDFiLCAweDA4MGMsIDB4NGMyZCwgMHg3MDFmLCAweDNjNTcsCisJMHg3MDIzLCAweDAwMDEsIDB4MDEyZSwgMHgwMDA1LCAweDAwNDYsIDB4MDA4NiwgMHgwMDk2LCAweDAwYTYsCisJMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MDgwYywgMHgzYWZmLCAweDIwMDEsCisJMHgxOWEwLCAweDIwMDMsIDB4MDAwMCwgMHgyMDIxLCAweDAwMGEsIDB4MjA2MSwgMHgwMTAwLCAweDYxMDQsCisJMHgwMDE2LCAweDYwYmIsIDB4MDAwMCwgMHg2MGJmLCAweDMyZTEsIDB4NjBiZiwgMHgwMDEyLCAweDA4MGMsCisJMHgzZDg5LCAweDA4MGMsIDB4M2Q0OCwgMHgwMGY2LCAweDAwZTYsIDB4MDA4NiwgMHgyOTQwLCAweDIwNzEsCisJMHgxYTY5LCAweDIwNzksIDB4MDA5MCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODg0LCAweGQwYjQsCisJMHgwMTQwLCAweDIwMDEsIDB4MDAzNSwgMHgyMDA0LCAweDc4MGUsIDB4MjAwMSwgMHgwMDM0LCAweDIwMDQsCisJMHg3ODBhLCAweDAwZGUsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4NDEzMCwgMHgwMDhlLCAweDAwZWUsCisJMHgwMGZlLCAweDA4MGMsIDB4NDA1MiwgMHgwODBjLCAweDNmNTcsIDB4MDViOCwgMHgyMDAxLCAweDAyMGIsCisJMHgyMDA0LCAweDkwODQsIDB4MDE0MCwgMHgxZGI4LCAweDA4MGMsIDB4NDFhNCwgMHgwMGY2LCAweDIwNzksCisJMHgwMzAwLCAweDc4YmMsIDB4MDBmZSwgMHg5MDhjLCAweDAwNzAsIDB4MTU2MCwgMHgyMDcxLCAweDAyMDAsCisJMHg3MDM3LCAweDAwMDAsIDB4NzA1MCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHgzMjAwLCAweDE1MTAsCisJMHg3MDM3LCAweDAwMDEsIDB4NzA1MCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHhlMTAwLCAweDExZDAsCisJMHg3MDM3LCAweDAwMDAsIDB4NzA1NCwgMHg3MDM3LCAweDAwMDAsIDB4NzE1YywgMHg5MTA2LCAweDExOTAsCisJMHgyMDAxLCAweDE4MjAsIDB4MjAwNCwgMHg5MTA2LCAweDExNjgsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsCisJMHg2MDI0LCAweDkwODQsIDB4MWUwMCwgMHgwMGNlLCAweDAxMzgsIDB4MDgwYywgMHgzZjYxLCAweDA4MGMsCisJMHgzZDQzLCAweDAwNTgsIDB4MDgwYywgMHgzZDQzLCAweDA4MGMsIDB4NDBjOCwgMHgwODBjLCAweDQwNDgsCisJMHgyMDAxLCAweDAyMGIsIDB4MjAwNCwgMHhkMGU0LCAweDBkZDgsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsCisJMHgwMDA0LCAweDIwNjEsIDB4MDEwMCwgMHg2MDI3LCAweDAwMDIsIDB4MDAxZSwgMHg2MTA2LCAweDIwMTEsCisJMHgwMjBkLCAweDIwMTMsIDB4MDAyMCwgMHg2MGJiLCAweDAwMDAsIDB4NjBiZiwgMHgwMTA4LCAweDYwYmYsCisJMHgwMDEyLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLCAweDkxOGMsIDB4ZmZmZCwgMHgyMTAyLCAweDA4MGMsCisJMHgxMmZjLCAweDIwMDksIDB4MDAyOCwgMHgwODBjLCAweDI0MDksIDB4MjAwMSwgMHgwMjI3LCAweDIwMGMsCisJMHgyMTAyLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMGFlLCAweDAwOWUsCisJMHgwMDhlLCAweDAwNGUsIDB4MjAwMSwgMHgxOWEwLCAweDIwMDQsIDB4OTAwNSwgMHgxMTE4LCAweDAxMmUsCisJMHgwODA0LCAweDM1YjUsIDB4MDEyZSwgMHgyMDIxLCAweDQwMGMsIDB4MDgwNCwgMHgzNWI3LCAweDAwMTYsCisJMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDA4NiwgMHgwMDk2LCAweDAwZDYsCisJMHgwMTU2LCAweDcwMTQsIDB4MjA0OCwgMHg3MDIwLCAweDIwYTgsIDB4ODAwMCwgMHg3MDIyLCAweGE4MDQsCisJMHg5MDA1LCAweDA5MDQsIDB4M2NiMywgMHgyMDQ4LCAweDFmMDQsIDB4M2M2NywgMHg3MDY4LCAweDIwNDAsCisJMHhhMjhjLCAweGEzOTAsIDB4YTQ5NCwgMHhhNTk4LCAweGE5MzAsIDB4YTgwOCwgMHhkMGI0LCAweDExMjAsCisJMHgyMDI5LCAweDAwMDAsIDB4MjAyMSwgMHgwMDAwLCAweDAwOTYsIDB4NzAxNCwgMHgyMDQ4LCAweGE4NjQsCisJMHgwMDllLCAweDkwODYsIDB4MDEwMywgMHgwMTcwLCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsCisJMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMWIsIDB4MDgwYywgMHg0YzJkLCAweDcwMWYsCisJMHgzYzU3LCAweDAwYjAsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsCisJMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMWE4LCAweDI3ZTAsIDB4MjA5OCwgMHgyN2U4LCAweDIwYTAsCisJMHgwMDA2LCAweDA4MGMsIDB4MGY4YiwgMHgwMDBlLCAweDA4MGMsIDB4NGMzMCwgMHg3MDFmLCAweDNjNTcsCisJMHgwMTVlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDhlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsCisJMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHg3MDE0LCAweDIwNDgsIDB4YTg2NCwgMHg5MDg2LCAweDAxMDMsCisJMHgxMTE4LCAweDcwMWYsIDB4M2QxOCwgMHgwNDUwLCAweDcwMTQsIDB4MjA0OCwgMHhhODY4LCAweGMwZmQsCisJMHhhODZhLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDY2YjksIDB4MDExMCwgMHg5MDA2LCAweDAwMzAsCisJMHhiODEzLCAweDAwZmYsIDB4YjgxNywgMHhmZmZkLCAweDA4MGMsIDB4ZDVhNywgMHgwMTVlLCAweDAwZGUsCisJMHgwMDllLCAweDAwOGUsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwOTA0LCAweDM1ZTcsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsCisJMHgwMDg2LCAweDAwOTYsIDB4MDBkNiwgMHgwMTU2LCAweDcwMWYsIDB4M2NlYSwgMHg3MDA3LCAweDAwMDMsCisJMHgwODA0LCAweDNjYTgsIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsIDB4MjAyMSwgMHg0MDBjLCAweDA5MDQsCisJMHgzNWI3LCAweDAwNzYsIDB4YWQxMCwgMHhhYzBjLCAweGFiMjQsIDB4YWEyMCwgMHhhOTMwLCAweGE4MDgsCisJMHhkMGI0LCAweDExMjAsIDB4MjAyOSwgMHgwMDAwLCAweDIwMjEsIDB4MDAwMCwgMHg4OTA2LCAweDgwMDYsCisJMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDFiLCAweDIxYTgsCisJMHgyN2UwLCAweDIwOTgsIDB4MjdlOCwgMHgyMGEwLCAweDAwMDYsIDB4MDgwYywgMHgwZjhiLCAweDAwMGUsCisJMHgwODBjLCAweDRjMzAsIDB4MDA3ZSwgMHg3MDFmLCAweDNjNTcsIDB4NzAyMywgMHgwMDAxLCAweDAwMDUsCisJMHgwODA0LCAweDM1YjUsIDB4MDE1NiwgMHgwMGM2LCAweGE4MTQsIDB4OTA4YSwgMHgwMDFlLCAweDAyMTgsCisJMHhhODMzLCAweDAwMWUsIDB4MDAxMCwgMHhhODMyLCAweDAwNzgsIDB4ODFmZiwgMHgwMTY4LCAweDAwMTYsCisJMHgwODBjLCAweDRiZTQsIDB4MDAxZSwgMHgwMTMwLCAweGE4MDAsIDB4MjA0MCwgMHhhMDA4LCAweGE4MGEsCisJMHgyMTAwLCAweDBjNTgsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAxNWUsCisJMHgwMDA1LCAweDAwMDYsIDB4MDBmNiwgMHgyMDc5LCAweDAwMDAsIDB4Nzg4MCwgMHg5MDg2LCAweDAwNDQsCisJMHgwMGZlLCAweDAwMGUsIDB4MDAwNSwgMHgyMDAxLCAweDE5YTAsIDB4MjAwMywgMHgwMDAxLCAweDAwMDUsCisJMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgyMDYxLCAweDAyMDAsIDB4MjAwMSwgMHgxOWFiLCAweDIwMDQsCisJMHg2MDFhLCAweDIwNjEsIDB4MDEwMCwgMHgyMDAxLCAweDE5YWEsIDB4MjAwNCwgMHg2MGNlLCAweDYxMDQsCisJMHhjMWFjLCAweDYxMDYsIDB4MDgwYywgMHg0YmU0LCAweGE4MTMsIDB4MDAxOSwgMHhhODE3LCAweDAwMDEsCisJMHgyOTAwLCAweGE4NWEsIDB4MjAwMSwgMHgwMDJlLCAweDIwMDQsIDB4YTg2NiwgMHgyMDAxLCAweDAwMmYsCisJMHgyMDA0LCAweGE4NmEsIDB4MjA2MSwgMHgwMDkwLCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweDE5YWEsCisJMHgyMDA0LCAweDYwMzYsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjQwOSwgMHgyMDAxLCAweDAwMmEsCisJMHgyMDA0LCAweDkwODQsIDB4ZmZmOCwgMHhhODZlLCAweDYwMWEsIDB4YTg3MywgMHgwMDAwLCAweDYwMWYsCisJMHgwMDAwLCAweDc4Y2EsIDB4OTAwNiwgMHg2MDBhLCAweDYwMGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsCisJMHgwMDA1LCAweDAwZTYsIDB4MDgwYywgMHg0YmU0LCAweDI5NDAsIDB4YTAxMywgMHgwMDE5LCAweGEwMTcsCisJMHgwMDAxLCAweDI4MDAsIDB4YTA1YSwgMHgyMDAxLCAweDAwMzAsIDB4MjAwNCwgMHhhODY2LCAweDIwMDEsCisJMHgwMDMxLCAweDIwMDQsIDB4YTg2YSwgMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LCAweGZmZjgsCisJMHhhODZlLCAweGE4NzMsIDB4MDAwMCwgMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA0LCAweDIwMDEsCisJMHgwMzAwLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsCisJMHgwMDA0LCAweDIwMGMsIDB4OTE4ZCwgMHgwMDAyLCAweDIxMDIsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4ODFmZiwgMHgwMTQ4LCAweDA4MGMsIDB4MmM1OSwgMHgxMTMwLCAweDkwMDYsCisJMHgwODBjLCAweDJiYjEsIDB4OTAwNiwgMHgwODBjLCAweDJiOTQsIDB4MjAwMSwgMHgxOTlmLCAweDIwMDMsCisJMHgwMDAwLCAweDc4ODQsIDB4OTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4M2RkOCwgMHgzZGUxLCAweDNkZWEsCisJMHgzZGQ1LCAweDNkZDUsIDB4M2RkNSwgMHgzZGQ1LCAweDNkZDUsIDB4MDEyZSwgMHgwODA0LCAweDM1ZWEsCisJMHgyMDA5LCAweDAxMTQsIDB4MjEwNCwgMHg5MDg1LCAweDA4MDAsIDB4MjAwYSwgMHgwODBjLCAweDNmYWIsCisJMHgwMGMwLCAweDIwMDksIDB4MDExNCwgMHgyMTA0LCAweDkwODUsIDB4NDAwMCwgMHgyMDBhLCAweDA4MGMsCisJMHgzZmFiLCAweDAwNzgsIDB4MDgwYywgMHg3NjM3LCAweDExMjgsIDB4MDEyZSwgMHgyMDA5LCAweDAwMTYsCisJMHgwODA0LCAweDM1ZTcsIDB4ODFmZiwgMHgwMTI4LCAweDAxMmUsIDB4MjAyMSwgMHg0MDBiLCAweDA4MDQsCisJMHgzNWI3LCAweDIwMDEsIDB4MDE0MSwgMHgyMDA0LCAweGQwZGMsIDB4MGRiMCwgMHgwMDg2LCAweDAwOTYsCisJMHgwMGE2LCAweDAwYjYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwODBjLCAweDNhZmYsCisJMHgyMDA5LCAweDAxMDEsIDB4MjEwYywgMHgwMDE2LCAweDdlYzgsIDB4N2RjYywgMHg5MDA2LCAweDIwNjgsCisJMHgyMDYwLCAweDIwNTgsIDB4MDgwYywgMHg0MjdmLCAweDA4MGMsIDB4NDFjZiwgMHg5MDNlLCAweDI3MjAsCisJMHgwMGY2LCAweDAwZTYsIDB4MDA4NiwgMHgyOTQwLCAweDIwNzEsIDB4MWE2OSwgMHgyMDc5LCAweDAwOTAsCisJMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODg0LCAweGQwYjQsIDB4MDEyMCwgMHg2OGQ0LCAweDc4MGUsCisJMHg2OGQwLCAweDc4MGEsIDB4MDBkZSwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHg0MTMwLCAweDA4MGMsCisJMHgyYzYxLCAweDA4MGMsIDB4MmM2MSwgMHgwODBjLCAweDJjNjEsIDB4MDgwYywgMHgyYzYxLCAweDA4MGMsCisJMHg0MTMwLCAweDAwOGUsIDB4MDBlZSwgMHgwMGZlLCAweDA4MGMsIDB4NDA1MiwgMHgyMDA5LCAweDljNDAsCisJMHg4MTA5LCAweDExYjAsIDB4MDgwYywgMHgzZjYxLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLCAweDkxOGMsCisJMHhmZmZkLCAweDIxMDIsIDB4MDAxZSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsCisJMHgwMGFlLCAweDAwOWUsIDB4MDA4ZSwgMHgyMDA5LCAweDAwMTcsIDB4MDgwYywgMHgzNWU3LCAweDBjZjgsCisJMHgyMDAxLCAweDAyMGIsIDB4MjAwNCwgMHg5MDg0LCAweDAxNDAsIDB4MWQxMCwgMHgwMGY2LCAweDIwNzksCisJMHgwMDAwLCAweDc4ODQsIDB4MDBmZSwgMHhkMGJjLCAweDAxNzgsIDB4MjAwMSwgMHgwMjAxLCAweDIwMGMsCisJMHg4MWZmLCAweDAxNTAsIDB4MDgwYywgMHg0MDMwLCAweDJkMDAsIDB4OWMwNSwgMHg5YjA1LCAweDAxMjAsCisJMHgwODBjLCAweDNmNjEsIDB4MDgwNCwgMHgzZjBlLCAweDA4MGMsIDB4NDFhNCwgMHgwODBjLCAweDQwYzgsCisJMHgwODBjLCAweDQwMTMsIDB4MDgwYywgMHg0MDQ4LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDc4MjQsCisJMHhkMGFjLCAweDAxMzAsIDB4OGI1OCwgMHgwODBjLCAweDNmNjEsIDB4MDBmZSwgMHgwODA0LCAweDNmMGUsCisJMHgwMGZlLCAweDA4MGMsIDB4M2Y1NywgMHgxMTUwLCAweDhkNjgsIDB4MjAwMSwgMHgwMDMyLCAweDI2MDIsCisJMHgyMDAxLCAweDAwMzMsIDB4MjUwMiwgMHgwODBjLCAweDNmNjEsIDB4MDA4MCwgMHg4N2ZmLCAweDAxMzgsCisJMHgyMDAxLCAweDAyMDEsIDB4MjAwNCwgMHg5MDA1LCAweDE5MDgsIDB4ODczOSwgMHgwMDM4LCAweDIwMDEsCisJMHgxYTY1LCAweDIwMDQsIDB4OTA4NiwgMHgwMDAwLCAweDE5MDQsIDB4M2U1ZSwgMHgyMDAxLCAweDAzMmYsCisJMHgyMDAzLCAweDAwZjYsIDB4ODYzMSwgMHgxMjA4LCAweDg1MjksIDB4MjUwMCwgMHg5NjA1LCAweDA5MDQsCisJMHgzZjBlLCAweDc4ODQsIDB4ZDBiYywgMHgwMTI4LCAweDJkMDAsIDB4OWMwNSwgMHg5YjA1LCAweDE5MDQsCisJMHgzZjBlLCAweGEwMTMsIDB4MDAxOSwgMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA0LCAweDc4ODQsCisJMHhkMGFjLCAweDExNDgsIDB4MjAwMSwgMHgxYTY1LCAweDIwMDMsIDB4MDAwMywgMHgyMDAxLCAweDAzMmEsCisJMHgyMDAzLCAweDAwMDksIDB4MDAzMCwgMHhhMDE3LCAweDAwMDEsIDB4NzhiNCwgMHg5MDA1LCAweDAxMDgsCisJMHhhMDE2LCAweDI4MDAsIDB4YTA1YSwgMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyNDA5LCAweDI5MDAsCisJMHhhODVhLCAweGE4MTMsIDB4MDAxOSwgMHg3ODg0LCAweGQwYTQsIDB4MTE4MCwgMHhhODE3LCAweDAwMDAsCisJMHgwMGM2LCAweDIwYTksIDB4MDAwNCwgMHgyMDYxLCAweDAwOTAsIDB4NjAyYiwgMHgwMDA4LCAweDIwMDEsCisJMHgwMjAzLCAweDIwMDQsIDB4MWYwNCwgMHgzZWU1LCAweDAwY2UsIDB4MDAzMCwgMHhhODE3LCAweDAwMDEsCisJMHg3OGIwLCAweDkwMDUsIDB4MDEwOCwgMHhhODE2LCAweDAwZjYsIDB4MDBjNiwgMHgyMDc5LCAweDAxMDAsCisJMHgyMDYxLCAweDAwOTAsIDB4NzgyNywgMHgwMDAyLCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODQsCisJMHhmZmY4LCAweDYwMWEsIDB4MDAwNiwgMHgyMDAxLCAweDAwMmIsIDB4MjAwNCwgMHg2MDFlLCAweDc4YzYsCisJMHgwMDBlLCAweDc4Y2EsIDB4MDBjZSwgMHgwMGZlLCAweDA4MDQsIDB4M2UxOCwgMHgwMDFlLCAweDAwYzYsCisJMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA0LCAweDIwNjEsIDB4MDEwMCwgMHg2MDI3LCAweDAwMDIsCisJMHg2MTA2LCAweDIwMTEsIDB4MDIwZCwgMHgyMDEzLCAweDAwMjAsIDB4MjAwMSwgMHgwMDA0LCAweDIwMGMsCisJMHg5MThjLCAweGZmZmQsIDB4MjEwMiwgMHgwODBjLCAweDEyZmMsIDB4Nzg4NCwgMHg5MDg0LCAweDAwMDMsCisJMHg5MDg2LCAweDAwMDIsIDB4MDFhMCwgMHgyMDA5LCAweDAwMjgsIDB4MDgwYywgMHgyNDA5LCAweDIwMDEsCisJMHgwMjI3LCAweDIwMGMsIDB4MjEwMiwgMHg2MDUwLCAweDkwODQsIDB4YjdlZiwgMHg2MDUyLCAweDYwMmYsCisJMHgwMDAwLCAweDYwNGIsIDB4ZjdmNywgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDAwY2UsCisJMHgyZDA4LCAweDJjMTAsIDB4MmIxOCwgMHgyYjAwLCAweDljMDUsIDB4OWQwNSwgMHgwMGZlLCAweDAwZWUsCisJMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMGFlLCAweDAwOWUsIDB4MDA4ZSwgMHgxMTE4LCAweDAxMmUsCisJMHgwODA0LCAweDM1YjUsIDB4MDEyZSwgMHgyMDIxLCAweDQwMGMsIDB4MDgwNCwgMHgzNWI3LCAweDkwODUsCisJMHgwMDAxLCAweDFkMDQsIDB4M2Y2MCwgMHgyMDkxLCAweDYwMDAsIDB4ODQyMCwgMHg5NDg2LCAweDAwNjQsCisJMHgwMDA1LCAweDIwMDEsIDB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsCisJMHgwMDA0LCAweDIwMDEsIDB4MWE2NSwgMHgyMDAzLCAweDAwMDAsIDB4MDA3MSwgMHgyMDA5LCAweDAwNDgsCisJMHgwODBjLCAweDI0MDksIDB4MjAwMSwgMHgwMjI3LCAweDIwMjQsIDB4MjQwMiwgMHgyMDAxLCAweDAxMDksCisJMHgyMDAzLCAweDQwMDAsIDB4OTAyNiwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgyMDcxLCAweDFhNjksCisJMHg3MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwNTIwLCAweDIwNzksIDB4MDA5MCwgMHgyMDA5LCAweDAyMDYsCisJMHgyMTA0LCAweDIwMDksIDB4MDIwMywgMHgyMTBjLCAweDkxMDYsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDAsCisJMHgwODBjLCAweDI0MDksIDB4NzgyYywgMHhkMGZjLCAweDBkODgsIDB4MDgwYywgMHg0MWE0LCAweDcwMDAsCisJMHg5MDg2LCAweDAwMDAsIDB4MWQ1OCwgMHg3ODJiLCAweDAwMDQsIDB4NzgyYywgMHhkMGFjLCAweDFkZTgsCisJMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyNDA5LCAweDc4MmIsIDB4MDAwMiwgMHg3MDAzLCAweDAwMDAsCisJMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweDE4MTgsCisJMHgyMDBjLCAweDc5MzIsIDB4NzkzNiwgMHgwODBjLCAweDI4YmMsIDB4Nzg1MCwgMHg5MDg0LCAweGZiZmYsCisJMHg5MDg1LCAweDAwMzAsIDB4Nzg1MiwgMHgyMDE5LCAweDAxZjQsIDB4ODMxOSwgMHgxZGYwLCAweDkwODQsCisJMHhmZmNmLCAweDkwODUsIDB4MjAwMCwgMHg3ODUyLCAweDIwYTksIDB4MDA0NiwgMHgxZDA0LCAweDNmYzYsCisJMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHgzZmM2LCAweDc4NTAsIDB4OTA4NSwgMHgwNDAwLCAweDkwODQsCisJMHhkZmZmLCAweDc4NTIsIDB4MjAwMSwgMHgwMDIxLCAweDIwMDQsIDB4OTA4NCwgMHgwMDAzLCAweDkwODYsCisJMHgwMDAxLCAweDExMjAsIDB4Nzg1MCwgMHg5MDg0LCAweGRmZmYsIDB4Nzg1MiwgMHg3ODRiLCAweGY3ZjcsCisJMHg3ODQzLCAweDAwOTAsIDB4Nzg0MywgMHgwMDEwLCAweDIwYTksIDB4MDAyOCwgMHhhMDAxLCAweDFmMDQsCisJMHgzZmU2LCAweDc4NTAsIDB4OTA4NSwgMHgxNDAwLCAweDc4NTIsIDB4MjAxOSwgMHg2MWE4LCAweDc4NTQsCisJMHhhMDAxLCAweGEwMDEsIDB4ZDA4YywgMHgxMTEwLCAweDgzMTksIDB4MWRjOCwgMHg3ODI3LCAweDAwNDgsCisJMHg3ODUwLCAweDkwODUsIDB4MDQwMCwgMHg3ODUyLCAweDc4NDMsIDB4MDA0MCwgMHgyMDE5LCAweDAxZjQsCisJMHhhMDAxLCAweGEwMDEsIDB4ODMxOSwgMHgxZGUwLCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJkMzksCisJMHg3ODI3LCAweDAwMjAsIDB4Nzg0MywgMHgwMDAwLCAweDkwMDYsIDB4MDgwYywgMHgyZDM5LCAweDc4MjcsCisJMHgwMDQ4LCAweDAwZmUsIDB4MDAwNSwgMHg3ODg0LCAweGQwYWMsIDB4MTFjOCwgMHgwMGY2LCAweDAwZTYsCisJMHgyMDcxLCAweDFhNjUsIDB4MjA3OSwgMHgwMzIwLCAweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweDkwMDUsCisJMHgwMTYwLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDExNDAsIDB4MDA1MSwgMHhkMGJjLCAweDAxMDgsCisJMHg4NzM4LCAweDcwMDMsIDB4MDAwMywgMHg3ODJiLCAweDAwMTksIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCisJMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHg3OGJjLCAweDAwZmUsIDB4OTA4YywgMHgwMDcwLCAweDAxNzgsCisJMHgyMDA5LCAweDAwMzIsIDB4MjYwYSwgMHgyMDA5LCAweDAwMzMsIDB4MjUwYSwgMHhkMGI0LCAweDAxMDgsCisJMHg4YzYwLCAweGQwYWMsIDB4MDEwOCwgMHg4ZDY4LCAweGQwYTQsIDB4MDEwOCwgMHg4YjU4LCAweDAwMDUsCisJMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHg3ODFjLCAweGQwODQsIDB4MDExMCwgMHg3ODM3LCAweDAwNTAsCisJMHgwMGZlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDAxMDAsIDB4MjAwMSwgMHgxOWFiLCAweDIwMDQsCisJMHg3MGUyLCAweDA4MGMsIDB4M2QzOSwgMHgxMTg4LCAweDIwMDEsIDB4MTgyMCwgMHgyMDA0LCAweDIwMDksCisJMHgxODFmLCAweDIxMGMsIDB4OTE4YywgMHgwMGZmLCAweDcwNmUsIDB4NzE2YSwgMHg3MDY2LCAweDkxOGQsCisJMHgzMjAwLCAweDcxNjIsIDB4NzA3MywgMHhlMTA5LCAweDAwODAsIDB4NzAyYywgMHg5MDg1LCAweDAwMDIsCisJMHg3MDJlLCAweDIwMDksIDB4MTgxOCwgMHgyMTBjLCAweDcxNmUsIDB4NzA2MywgMHgwMTAwLCAweDcxNjYsCisJMHg3MTllLCAweDcwNmIsIDB4MDAwMCwgMHg3MDczLCAweDA4MDksIDB4NzA3NywgMHgwMDA4LCAweDcwNzgsCisJMHg5MDgwLCAweDAxMDAsIDB4NzA3YSwgMHg3MDgwLCAweDgwMDAsIDB4NzA4MiwgMHg3MDg3LCAweGFhYWEsCisJMHg5MDA2LCAweDcwOGEsIDB4NzA4ZSwgMHg3MDdlLCAweDcwZDYsIDB4NzBhYiwgMHgwMDM2LCAweDcwYWYsCisJMHg5NWQ1LCAweDcwMTQsIDB4OTA4NCwgMHgxOTg0LCAweDkwODUsIDB4MDA5MiwgMHg3MDE2LCAweDA4MGMsCisJMHg0MWE0LCAweDAwZjYsIDB4MjA3MSwgMHgxYTY1LCAweDIwNzksIDB4MDMyMCwgMHgwMGQ2LCAweDIwNjksCisJMHgwMDAwLCAweDY4ODQsIDB4ZDBiNCwgMHgwMTIwLCAweDY4OWMsIDB4NzgwZSwgMHg2ODk4LCAweDc4MGEsCisJMHgwMGRlLCAweDA4MGMsIDB4M2QzOSwgMHgwMTQwLCAweDIwMDEsIDB4MTk5ZiwgMHgyMDBjLCAweDIwMDMsCisJMHgwMDAxLCAweDkxOGUsIDB4MDAwMSwgMHgwMTIwLCAweDIwMDksIDB4MDNlOCwgMHg4MTA5LCAweDFkZjAsCisJMHg3OTJjLCAweGQxZmMsIDB4MDExMCwgMHg3ODJiLCAweDAwMDQsIDB4MjAxMSwgMHgwMDExLCAweDA4MGMsCisJMHg0MTMwLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDQxMzAsIDB4MDBmZSwgMHgwMGVlLCAweDAwMDUsCisJMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwgMHgxYTY1LCAweDIwNzksIDB4MDMyMCwgMHg3OTJjLCAweGQxZmMsCisJMHgwOTA0LCAweDQxMmQsIDB4NzgyYiwgMHgwMDAyLCAweDkwMjYsIDB4ZDE5YywgMHgxOTA0LCAweDQxMjksCisJMHg3MDAwLCAweDAwMDIsIDB4NDEyZCwgMHg0MGRlLCAweDQxMGUsIDB4NDEyOSwgMHhkMWJjLCAweDExNzAsCisJMHhkMWRjLCAweDExOTAsIDB4ODAwMSwgMHg3MDAyLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDQxMzAsCisJMHgwOTA0LCAweDQxMmQsIDB4MDgwYywgMHg0MTMwLCAweDA4MDQsIDB4NDEyZCwgMHgwMGY2LCAweDIwNzksCisJMHgwMzAwLCAweDc4YmYsIDB4MDAwMCwgMHgwMGZlLCAweDc4MTAsIDB4NzkxNCwgMHg3ODJiLCAweDAwMDQsCisJMHg3ODEyLCAweDc5MTYsIDB4MjAwMSwgMHgwMjAxLCAweDIwMGMsIDB4ODFmZiwgMHgwZGU4LCAweDA4MGMsCisJMHg0MDMwLCAweDIwMDksIDB4MDAwMSwgMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHg3OGI4LCAweDAwZmUsCisJMHhkMGVjLCAweDAxMTAsIDB4MjAwOSwgMHgwMDExLCAweDc5MmEsIDB4MDBmOCwgMHg4MDAxLCAweDcwMDIsCisJMHg5MTg0LCAweDA4ODAsIDB4MTE0MCwgMHg3ODJjLCAweGQwZmMsIDB4MTkwNCwgMHg0MGQyLCAweDIwMTEsCisJMHgwMDAxLCAweDAwYjEsIDB4MDA5MCwgMHhhMDEwLCAweDkwOTIsIDB4MDAwNCwgMHg5MDg2LCAweDAwMTUsCisJMHgxMTIwLCAweGEwMDAsIDB4YTA1YSwgMHgyMDExLCAweDAwMzEsIDB4YTIxMiwgMHhkMWRjLCAweDE5NjAsCisJMHgwODI4LCAweDc4MmIsIDB4MDAwNCwgMHg3MDAzLCAweDAwMDAsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCisJMHhhMDE0LCAweDkwMDUsIDB4MDU1MCwgMHg4MDAxLCAweDAwMzYsIDB4MDA5NiwgMHhhMDE2LCAweGEwNTgsCisJMHgyMDQ4LCAweGEwMTAsIDB4MjAwOSwgMHgwMDMxLCAweDkxMWEsIDB4ODMxYywgMHg4MzFjLCAweDkzOGEsCisJMHgwMDA3LCAweDFhMGMsIDB4MGRjNSwgMHg5Mzk4LCAweDQxNWUsIDB4MjMxZCwgMHgwODNmLCAweDkwODAsCisJMHgwMDA0LCAweDdhMmEsIDB4NzEwMCwgMHg4MTA4LCAweDcxMDIsIDB4MDA5ZSwgMHgwMDNlLCAweDkwOGEsCisJMHgwMDM1LCAweDExNDAsIDB4MDA5NiwgMHhhMDU4LCAweDIwNDgsIDB4YTgwNCwgMHhhMDVhLCAweDIwMDEsCisJMHgwMDE5LCAweDAwOWUsIDB4YTAxMiwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg0MTliLCAweDQxOTIsCisJMHg0MTg5LCAweDQxODAsIDB4NDE3NywgMHg0MTZlLCAweDQxNjUsIDB4YTk2NCwgMHg3OTAyLCAweGE5NjgsCisJMHg3OTA2LCAweGE5NmMsIDB4NzkxMiwgMHhhOTcwLCAweDc5MTYsIDB4MDAwNSwgMHhhOTc0LCAweDc5MDIsCisJMHhhOTc4LCAweDc5MDYsIDB4YTk3YywgMHg3OTEyLCAweGE5ODAsIDB4NzkxNiwgMHgwMDA1LCAweGE5ODQsCisJMHg3OTAyLCAweGE5ODgsIDB4NzkwNiwgMHhhOThjLCAweDc5MTIsIDB4YTk5MCwgMHg3OTE2LCAweDAwMDUsCisJMHhhOTk0LCAweDc5MDIsIDB4YTk5OCwgMHg3OTA2LCAweGE5OWMsIDB4NzkxMiwgMHhhOWEwLCAweDc5MTYsCisJMHgwMDA1LCAweGE5YTQsIDB4NzkwMiwgMHhhOWE4LCAweDc5MDYsIDB4YTlhYywgMHg3OTEyLCAweGE5YjAsCisJMHg3OTE2LCAweDAwMDUsIDB4YTliNCwgMHg3OTAyLCAweGE5YjgsIDB4NzkwNiwgMHhhOWJjLCAweDc5MTIsCisJMHhhOWMwLCAweDc5MTYsIDB4MDAwNSwgMHhhOWM0LCAweDc5MDIsIDB4YTljOCwgMHg3OTA2LCAweGE5Y2MsCisJMHg3OTEyLCAweGE5ZDAsIDB4NzkxNiwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMDg2LCAweDIwNzEsCisJMHgxYTY5LCAweDIwNzksIDB4MDA5MCwgMHg3OTJjLCAweGQxZmMsIDB4MDFlOCwgMHg3ODJiLCAweDAwMDIsCisJMHgyOTQwLCAweDkwMjYsIDB4NzAwMCwgMHgwMDAyLCAweDQxY2IsIDB4NDFiNywgMHg0MWMyLCAweDgwMDEsCisJMHg3MDAyLCAweGQxOWMsIDB4MTE4MCwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHg0MTMwLCAweDE5MGMsCisJMHg0MTMwLCAweDAwNDgsIDB4ODAwMSwgMHg3MDAyLCAweDc4MmMsIDB4ZDBmYywgMHgxZDM4LCAweDIwMTEsCisJMHgwMDAxLCAweDA4MGMsIDB4NDEzMCwgMHgwMDhlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsCisJMHgwMGU2LCAweDAwYzYsIDB4MDA4NiwgMHgyMDYxLCAweDAyMDAsIDB4MjAwMSwgMHgxOWFiLCAweDIwMDQsCisJMHg2MDFhLCAweDIwNjEsIDB4MDEwMCwgMHgyMDAxLCAweDE5YWEsIDB4MjAwNCwgMHg2MGNlLCAweDYxMDQsCisJMHhjMWFjLCAweDYxMDYsIDB4MjAwMSwgMHgwMDJjLCAweDIwMDQsIDB4OTAwNSwgMHgwNTIwLCAweDIwMzgsCisJMHgyMDAxLCAweDAwMmUsIDB4MjAyNCwgMHgyMDAxLCAweDAwMmYsIDB4MjAxYywgMHgwODBjLCAweDRiZTQsCisJMHhhODEzLCAweDAwMTksIDB4YWYxNiwgMHgyOTAwLCAweGE4NWEsIDB4OTc4YSwgMHgwMDA3LCAweDAyMjAsCisJMHgyMTM4LCAweDIwMDksIDB4MDAwNywgMHgwMDEwLCAweDI3MDgsIDB4OTAzZSwgMHgwMDk2LCAweGE4NTgsCisJMHgyMDQ4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDAwOWUsIDB4MDgwYywgMHg0MjQ3LCAweDFkNjgsCisJMHgyOTAwLCAweGE4NWEsIDB4MDBkMCwgMHgwODBjLCAweDRiZTQsIDB4YTgxMywgMHgwMDE5LCAweGE4MTcsCisJMHgwMDAxLCAweDI5MDAsIDB4YTg1YSwgMHgyMDAxLCAweDAwMmUsIDB4MjAwNCwgMHhhODY2LCAweDIwMDEsCisJMHgwMDJmLCAweDIwMDQsIDB4YTg2YSwgMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LCAweGZmZjgsCisJMHhhODZlLCAweDIwMDEsIDB4MDAyYiwgMHgyMDA0LCAweGE4NzIsIDB4MjA2MSwgMHgwMDkwLCAweDIwNzksCisJMHgwMTAwLCAweDIwMDEsIDB4MTlhYSwgMHgyMDA0LCAweDYwMzYsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsCisJMHgyNDA5LCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODQsIDB4ZmZmOCwgMHg2MDFhLCAweDAwMDYsCisJMHgyMDAxLCAweDAwMmIsIDB4MjAwNCwgMHg2MDFlLCAweDc4YzYsIDB4MDAwZSwgMHg3OGNhLCAweDkwMDYsCisJMHg2MDBhLCAweDYwMGUsIDB4MDA4ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsCisJMHgyMDcxLCAweDAwODAsIDB4YWE2MCwgMHgyMmU4LCAweDIwYTAsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksCisJMHgwMDg4LCAweDcwMmIsIDB4MDAyNiwgMHg3NDAyLCAweDczMDYsIDB4OTAwNiwgMHg3MDBhLCAweDcwMGUsCisJMHg4MTBiLCAweDgxMGIsIDB4MjFhOCwgMHg4MTBiLCAweDcxMTIsIDB4NzAyYiwgMHgwMDQxLCAweDcwMmMsCisJMHhkMGZjLCAweDBkZTgsIDB4NzAyYiwgMHgwMDAyLCAweDcwMmIsIDB4MDA0MCwgMHg0MDA1LCAweDc0MDAsCisJMHg3MzA0LCAweDg3ZmYsIDB4MDE5MCwgMHgwMDg2LCAweDAwOTYsIDB4Mjk0MCwgMHgwMDg2LCAweDA4MGMsCisJMHg0YmU0LCAweDAwOGUsIDB4YTA1OCwgMHgwMGE2LCAweDIwNTAsIDB4MjkwMCwgMHhiMDA2LCAweGEwNWEsCisJMHgwMGFlLCAweDAwOWUsIDB4MDA4ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsCisJMHgyMDAxLCAweDAwMmQsIDB4MjAwNCwgMHg5MDA1LCAweDA1MjgsIDB4MjAzOCwgMHgyMDAxLCAweDAwMzAsCisJMHgyMDI0LCAweDIwMDEsIDB4MDAzMSwgMHgyMDFjLCAweDA4MGMsIDB4NGJlNCwgMHgyOTQwLCAweGE4MTMsCisJMHgwMDE5LCAweGFmMTYsIDB4MjkwMCwgMHhhODVhLCAweDk3OGEsIDB4MDAwNywgMHgwMjIwLCAweDIxMzgsCisJMHgyMDA5LCAweDAwMDcsIDB4MDAxMCwgMHgyNzA4LCAweDkwM2UsIDB4MDA5NiwgMHhhODU4LCAweDIwNDgsCisJMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgwMDllLCAweDA4MGMsIDB4NDI0NywgMHgxZDY4LCAweDI5MDAsCisJMHhhODVhLCAweDAwZDgsIDB4MDgwYywgMHg0YmU0LCAweDI5NDAsIDB4YTAxMywgMHgwMDE5LCAweGEwMTcsCisJMHgwMDAxLCAweDI4MDAsIDB4YTA1YSwgMHgyMDAxLCAweDAwMzAsIDB4MjAwNCwgMHhhMDY2LCAweDIwMDEsCisJMHgwMDMxLCAweDIwMDQsIDB4YTA2YSwgMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LCAweGZmZjgsCisJMHhhMDZlLCAweDIwMDEsIDB4MDAyYiwgMHgyMDA0LCAweGEwNzIsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsCisJMHgwMDA0LCAweDc4ODQsIDB4ZDBhYywgMHgxMTgwLCAweDIwMDEsIDB4MDEwMSwgMHgyMDBjLCAweDkxOGQsCisJMHgwMjAwLCAweDIxMDIsIDB4YTAxNywgMHgwMDAwLCAweDIwMDEsIDB4MWE2NSwgMHgyMDAzLCAweDAwMDMsCisJMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA5LCAweDIwMDEsIDB4MDMwMCwgMHgyMDAzLCAweDAwMDAsCisJMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLCAweDkxOGQsCisJMHgwMDAyLCAweDIxMDIsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwYTksCisJMHgwMDA3LCAweDIwYTEsIDB4MTg0MCwgMHgyMGU5LCAweDAwMDEsIDB4OTAwNiwgMHg0MDA0LCAweDIwYTksCisJMHgwMDE0LCAweDIwYTEsIDB4ZmZlYywgMHgyMGU5LCAweDAwMDAsIDB4OTAwNiwgMHg0MDA0LCAweDIwMDksCisJMHgwMTNjLCAweDIwMGEsIDB4MDEyZSwgMHg3ODgwLCAweDkwODYsIDB4MDA1MiwgMHgwMTA4LCAweDAwMDUsCisJMHgwODA0LCAweDM1YjUsIDB4N2Q5OCwgMHg3YzljLCAweDA4MDQsIDB4MzZiOSwgMHgwODBjLCAweDc2MzcsCisJMHgxOTBjLCAweDYwZjMsIDB4NjA0MCwgMHg5MDg0LCAweDAwMjAsIDB4MDliMSwgMHgyMDY5LCAweDE4NDcsCisJMHgyZDAwLCAweDIwMDksIDB4MDAzMCwgMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweDIwMzksCisJMHgwMDAxLCAweDA4MGMsIDB4NGMyZCwgMHg3MDFmLCAweDQzMjYsIDB4MDAwNSwgMHgwODBjLCAweDU3ZTQsCisJMHgxMTMwLCAweDNiMDAsIDB4M2EwOCwgMHhjMTk0LCAweGMwOTUsIDB4MjBkOCwgMHgyMWQwLCAweDIwNjksCisJMHgxODQ3LCAweDY4MDAsIDB4OTAwNSwgMHgwOTA0LCAweDM1ZWEsIDB4MjAwMSwgMHgxODBkLCAweDIwMDQsCisJMHhkMDhjLCAweDY4MDQsIDB4MDExOCwgMHhjMGE0LCAweGMwYWMsIDB4NjgwNiwgMHhkMGFjLCAweDAxMTgsCisJMHhkMGE0LCAweDA5MDQsIDB4MzVlYSwgMHhkMDk0LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYxMDQsCisJMHgwMTM4LCAweDYyMDAsIDB4OTI5MiwgMHgwMDA1LCAweDAyMTgsIDB4OTE4YywgMHhmZmRmLCAweDAwMTAsCisJMHg5MThkLCAweDAwMjAsIDB4NjEwNiwgMHgwMGNlLCAweGQwOGMsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsCisJMHg2MTA0LCAweDAxMTgsIDB4OTE4ZCwgMHgwMDEwLCAweDAwMTAsIDB4OTE4YywgMHhmZmVmLCAweDYxMDYsCisJMHgwMGNlLCAweGQwODQsIDB4MDE1OCwgMHg2YTI4LCAweDkyOGEsIDB4MDA3ZiwgMHgxYTA0LCAweDM1ZWEsCisJMHg5Mjg4LCAweDMzYjYsIDB4MjEwZCwgMHg5MThjLCAweDAwZmYsIDB4NjE2NiwgMHhkMGRjLCAweDAxMzAsCisJMHg2ODI4LCAweDkwOGEsIDB4MDA3ZiwgMHgxYTA0LCAweDM1ZWEsIDB4NjA1ZSwgMHg2ODg4LCAweDkwODQsCisJMHgwMDMwLCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDgwMDQsIDB4MDAwNiwgMHgyMDA5LCAweDE5YjIsCisJMHg5MDgwLCAweDI5YjcsIDB4MjAwNSwgMHgyMDBhLCAweDAwMGUsIDB4MjAwOSwgMHgxOWIzLCAweDkwODAsCisJMHgyOWJiLCAweDIwMDUsIDB4MjAwYSwgMHg2ODA4LCAweDkwOGEsIDB4MDEwMCwgMHgwYTA0LCAweDM1ZWEsCisJMHg5MDhhLCAweDA4NDEsIDB4MWEwNCwgMHgzNWVhLCAweDkwODQsIDB4MDAwNywgMHgxOTA0LCAweDM1ZWEsCisJMHg2ODBjLCAweDkwMDUsIDB4MDkwNCwgMHgzNWVhLCAweDY4MTAsIDB4OTAwNSwgMHgwOTA0LCAweDM1ZWEsCisJMHg2ODQ4LCAweDY5NDAsIDB4OTEwYSwgMHgxYTA0LCAweDM1ZWEsIDB4ODAwMSwgMHgwOTA0LCAweDM1ZWEsCisJMHg2ODRjLCAweDY5NDQsIDB4OTEwYSwgMHgxYTA0LCAweDM1ZWEsIDB4ODAwMSwgMHgwOTA0LCAweDM1ZWEsCisJMHgyMDA5LCAweDE5ODEsIDB4MjAwYiwgMHgwMDAwLCAweDIwMDEsIDB4MTg2OSwgMHgyMDA0LCAweGQwYzQsCisJMHgwMTQwLCAweDc4ODQsIDB4MjAwYSwgMHgyMDA4LCAweDA4MGMsIDB4MGU1MiwgMHgzYjAwLCAweGMwODUsCisJMHgyMGQ4LCAweDY4MTQsIDB4OTA4YywgMHgwMGZmLCAweDYxNGUsIDB4ODAwNywgMHg5MDg0LCAweDAwZmYsCisJMHg2MDUyLCAweDA4MGMsIDB4Nzk2MywgMHgwODBjLCAweDZiOGUsIDB4MDgwYywgMHg2YmY4LCAweDY4MDgsCisJMHg2MDJhLCAweDA4MGMsIDB4MjM3YiwgMHgyMDA5LCAweDAxNzAsIDB4MjAwYiwgMHgwMDgwLCAweGEwMDEsCisJMHhhMDAxLCAweDIwMGIsIDB4MDAwMCwgMHgwMDM2LCAweDZiMDgsIDB4MDgwYywgMHgyOTE2LCAweDAwM2UsCisJMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgxOTA0LCAweDQ0Y2YsIDB4NjgxOCwgMHg2OTFjLCAweDZhMjAsCisJMHg2YjI0LCAweDgwMDcsIDB4ODEwZiwgMHg4MjE3LCAweDgzMWYsIDB4NjAxNiwgMHg2MTFhLCAweDYyMWUsCisJMHg2MzIyLCAweDZjMDQsIDB4ZDRmNCwgMHgwMTQ4LCAweDY4MzAsIDB4NjkzNCwgMHg2YTM4LCAweDZiM2MsCisJMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDAwMTAsIDB4OTA4NCwgMHhmMGZmLCAweDYwMDYsCisJMHg2MTBhLCAweDYyMGUsIDB4NjMxMiwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDIwYTksCisJMHgwMDA0LCAweDIwYTEsIDB4MTliNCwgMHgyMGU5LCAweDAwMDEsIDB4NDAwMSwgMHgyMGE5LCAweDAwMDQsCisJMHgyMGExLCAweDE5Y2UsIDB4MjBlOSwgMHgwMDAxLCAweDQwMDEsIDB4MDgwYywgMHg4OTYyLCAweDAwYzYsCisJMHg5MDBlLCAweDIwYTksIDB4MDAwMSwgMHg2YjcwLCAweGQzODQsIDB4MDUxMCwgMHgwMDY4LCAweDIwMDksCisJMHgwMTAwLCAweDIxMGMsIDB4OTE4ZSwgMHgwMDA4LCAweDExMTAsIDB4ODM5ZCwgMHgwMDEwLCAweDgzZjUsCisJMHgzZTE4LCAweDEyYjAsIDB4MzUwOCwgMHg4MTA5LCAweDA4MGMsIDB4N2Y2ZiwgMHg2ODc4LCAweDYwMTYsCisJMHg2ODc0LCAweDIwMDgsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4NjAwYSwgMHg5MTg0LCAweDAwZmYsCisJMHg2MDA2LCAweDgxMDgsIDB4MTExOCwgMHg2MDAzLCAweDAwMDMsIDB4MDAxMCwgMHg2MDAzLCAweDAwMDEsCisJMHgxZjA0LCAweDQ0MWYsIDB4MDBjZSwgMHgwMGM2LCAweDIwNjEsIDB4MTk5YywgMHgyMDAxLCAweDE4MGQsCisJMHgyMDA0LCAweGQwOGMsIDB4MTFhOCwgMHg2YTg4LCAweDkyODQsIDB4YzAwMCwgMHgyMDEwLCAweDkyODYsCisJMHgwMDAwLCAweDExNTgsIDB4MjA2MywgMHgwMDAwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDJiYjEsCisJMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyYjk0LCAweDAwODgsIDB4OTI4NiwgMHg0MDAwLCAweDExNDgsCisJMHgyMDYzLCAweDAwMDEsIDB4OTAwNiwgMHgwODBjLCAweDJiYjEsIDB4OTAwNiwgMHgwODBjLCAweDJiOTQsCisJMHgwMDI4LCAweDkyODYsIDB4ODAwMCwgMHgxZDMwLCAweDIwNjMsIDB4MDAwMiwgMHgwMGNlLCAweDAwZTYsCisJMHgyYzcwLCAweDA4MGMsIDB4MGVhMywgMHgwMGVlLCAweDY4ODgsIDB4ZDBlYywgMHgwMTMwLCAweDIwMTEsCisJMHgwMTE0LCAweDIyMDQsIDB4OTA4NSwgMHgwMTAwLCAweDIwMTIsIDB4NmE4MCwgMHg5Mjg0LCAweDAwMzAsCisJMHg5MDg2LCAweDAwMzAsIDB4MTEyOCwgMHg5Mjk0LCAweGZmY2YsIDB4OTI5NSwgMHgwMDIwLCAweDZhODIsCisJMHgyMDAxLCAweDE5N2MsIDB4NmE4MCwgMHg5Mjk0LCAweDAwMzAsIDB4OTI4ZSwgMHgwMDAwLCAweDAxNzAsCisJMHg5MjhlLCAweDAwMTAsIDB4MDExOCwgMHg5MjhlLCAweDAwMjAsIDB4MDE0MCwgMHgyMDAzLCAweGFhYWEsCisJMHgwODBjLCAweDI5OGIsIDB4MjAwMSwgMHgxOTZkLCAweDIxMDIsIDB4MDAwOCwgMHgyMTAyLCAweDAwYzYsCisJMHgyMDYxLCAweDAxMDAsIDB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwMGNlLCAweDA4MGMsCisJMHg3NjM3LCAweDAxMjgsIDB4MDgwYywgMHg1MGNiLCAweDAxMTAsIDB4MDgwYywgMHgyOGRjLCAweDYwZDQsCisJMHg5MDA1LCAweDAxYzAsIDB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4NDRiNywgMHgwMGUwLCAweDA4MGMsCisJMHg3NjM3LCAweDExNjgsIDB4MjAxMSwgMHg3NGIyLCAweDA4MGMsIDB4ODgzZCwgMHgyMDExLCAweDc0YTUsCisJMHgwODBjLCAweDg5MTcsIDB4MDgwYywgMHg3OTM3LCAweDA4MGMsIDB4NzU2MywgMHgwMDQwLCAweDA4MGMsCisJMHg1ZmVkLCAweDAwMjgsIDB4NjAwMywgMHgwMDA0LCAweDIwMDksIDB4NDRjZiwgMHgwMDIwLCAweDA4MGMsCisJMHg2YTA1LCAweDA4MDQsIDB4MzViNSwgMHgyMDAxLCAweDAxNzAsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MDg2LCAweDAwNGMsIDB4MTExOCwgMHgyMDkxLCAweDMwYmQsIDB4MDgxNywgMHgyMDkxLCAweDMwM2QsCisJMHgwODE3LCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDA5MDQsIDB4MzVlNywgMHgyMDY5LCAweDE4NDcsCisJMHg3ODkwLCAweDY4NDIsIDB4Nzg5NCwgMHg2ODQ2LCAweDJkMDAsIDB4MjAwOSwgMHgwMDMwLCAweDdhOGMsCisJMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgyMDM5LCAweDAwMDEsIDB4MDgwNCwgMHg0YzMwLCAweDkwMDYsCisJMHgwODBjLCAweDI4ZGMsIDB4ODFmZiwgMHgxOTA0LCAweDM1ZTcsIDB4MDgwYywgMHg3NjM3LCAweDExYjAsCisJMHgwODBjLCAweDc5MzIsIDB4MDgwYywgMHg2MTJlLCAweDA4MGMsIDB4MzNhYSwgMHgwMTE4LCAweDYxMzAsCisJMHhjMThkLCAweDYxMzIsIDB4MDgwYywgMHhkN2UzLCAweDAxMzAsIDB4MDgwYywgMHg3NjVhLCAweDExMTgsCisJMHgwODBjLCAweDc2MGYsIDB4MDAzOCwgMHgwODBjLCAweDc1NjMsIDB4MDAyMCwgMHgwODBjLCAweDYwZjMsCisJMHgwODBjLCAweDVmZWQsIDB4MDgwNCwgMHgzNWI1LCAweDgxZmYsIDB4MTkwNCwgMHgzNWU3LCAweDA4MGMsCisJMHg3NjM3LCAweDExMTAsIDB4MDgwNCwgMHgzNWU3LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYxOTQsCisJMHg4MWZmLCAweDAxOTAsIDB4NzA0ZiwgMHgwMDAwLCAweDIwMDEsIDB4MWM4MCwgMHgyMDA5LCAweDAwNDAsCisJMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweDIwMzksIDB4MDAwMSwgMHgwODBjLCAweDRjMzAsCisJMHg3MDFmLCAweDM1YjMsIDB4MDEyZSwgMHgwMDA1LCAweDcwNGYsIDB4MDAwMSwgMHgwMGQ2LCAweDIwNjksCisJMHgxYzgwLCAweDIwYTksIDB4MDA0MCwgMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxYzgwLCAweDIwMTksCisJMHhmZmZmLCAweDQzMDQsIDB4NjU1YywgMHg5NTg4LCAweDMzYjYsIDB4MjEwZCwgMHg5MThjLCAweDAwZmYsCisJMHgyMTZhLCAweDkwMGUsIDB4MjAxMSwgMHgwMDAyLCAweDIxMDAsIDB4OTUwNiwgMHgwMWE4LCAweDA4MGMsCisJMHg2NzI0LCAweDExOTAsIDB4YjgxNCwgMHg4MjFjLCAweDAyMzgsIDB4OTM5OCwgMHgxYzgwLCAweDkwODUsCisJMHhmZjAwLCAweDgwMDcsIDB4MjAxYSwgMHgwMDM4LCAweDkzOTgsIDB4MWM4MCwgMHgyMzI0LCAweDk0YTQsCisJMHhmZjAwLCAweDk0MDUsIDB4MjAxYSwgMHg4MjEwLCAweDgxMDgsIDB4OTE4MiwgMHgwMDgwLCAweDEyMDgsCisJMHgwYzE4LCAweDgyMDEsIDB4ODAwNywgMHgyZDBjLCAweDkxMDUsIDB4MjA2YSwgMHgwMGRlLCAweDIwYTksCisJMHgwMDQwLCAweDIwYTEsIDB4MWM4MCwgMHgyMDk5LCAweDFjODAsIDB4MDgwYywgMHg2MDdlLCAweDA4MDQsCisJMHg0NTJjLCAweDA4MGMsIDB4NGMxNywgMHgwOTA0LCAweDM1ZWEsIDB4MDgwYywgMHg0YmU0LCAweDExMjAsCisJMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNWU3LCAweDA4MGMsIDB4NTdkNSwgMHhkMGI0LCAweDA1NTgsCisJMHg3ODg0LCAweDkwOGUsIDB4MDA3ZSwgMHgwNTM4LCAweDkwOGUsIDB4MDA3ZiwgMHgwNTIwLCAweDkwOGUsCisJMHgwMDgwLCAweDA1MDgsIDB4MDgwYywgMHgzM2E1LCAweDExNDgsIDB4YjgwMCwgMHhkMDhjLCAweDExZDgsCisJMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDYsIDB4MTFhOCwgMHhhODY3LCAweDAwMDAsCisJMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHgwODBjLCAweGQyYTMsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsCisJMHgwODA0LCAweDM1ZTcsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NDViNywgMHgwMDA1LCAweDA4MGMsCisJMHg0YzE3LCAweDA5MDQsIDB4MzVlYSwgMHgyMGE5LCAweDAwMmIsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsCisJMHgyMDk4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLCAweDQwMDMsCisJMHgyMGE5LCAweDAwMDgsIDB4OTA4MCwgMHgwMDA2LCAweDIwYTAsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsCisJMHg5MDgwLCAweDAwMDYsIDB4MjA5OCwgMHgwODBjLCAweDBmOGIsIDB4MDA3MCwgMHgyMGE5LCAweDAwMDQsCisJMHhhODVjLCAweDkwODAsIDB4MDAwYSwgMHgyMGEwLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsCisJMHgwMDBhLCAweDIwOTgsIDB4MDgwYywgMHgwZjhiLCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsCisJMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMDIsIDB4MjAwOSwgMHgwMDJiLCAweDdhOGMsCisJMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgwODA0LCAweDRjMzAsIDB4ODFmZiwgMHgxOTA0LCAweDM1ZTcsCisJMHgwODBjLCAweDRiZmIsIDB4MDkwNCwgMHgzNWVhLCAweDA4MGMsIDB4Njg5NiwgMHgwOTA0LCAweDM1ZTcsCisJMHgwMDU4LCAweGE4NzgsIDB4OTAwNSwgMHgwMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM1ZTcsCisJMHhhOTc0LCAweGFhOTQsIDB4MDgwNCwgMHgzNWI1LCAweDA4MGMsIDB4NTdkZCwgMHgwOTA0LCAweDM1YjUsCisJMHg3MDFmLCAweDQ2MDEsIDB4NzAwNywgMHgwMDAzLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDM1ZTcsCisJMHg3ODg4LCAweDkwOGEsIDB4MTAwMCwgMHgxYTA0LCAweDM1ZWEsIDB4MDgwYywgMHg0YzE3LCAweDA5MDQsCisJMHgzNWVhLCAweDA4MGMsIDB4NmFhMywgMHgwMTIwLCAweDA4MGMsIDB4NmFhYiwgMHgxOTA0LCAweDM1ZWEsCisJMHgwODBjLCAweDY5MWIsIDB4MDkwNCwgMHgzNWU3LCAweDIwMTksIDB4MDAwNCwgMHg5MDBlLCAweDA4MGMsCisJMHg2OGE4LCAweDA5MDQsIDB4MzVlNywgMHg3OTg0LCAweDdhODgsIDB4MDRjOSwgMHgwOGE4LCAweGE4OWMsCisJMHg5MDhhLCAweDEwMDAsIDB4MTJmOCwgMHgwODBjLCAweDRjMTUsIDB4MDFlMCwgMHgwODBjLCAweDZhYTMsCisJMHgwMTE4LCAweDA4MGMsIDB4NmFhYiwgMHgxMWIwLCAweDA4MGMsIDB4NjkxYiwgMHgyMDA5LCAweDAwMDIsCisJMHgwMTY4LCAweDIwMDksIDB4MDAwMiwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHg2OGE4LCAweDIwMDksCisJMHgwMDAzLCAweDAxMjAsIDB4YTk5OCwgMHhhYTljLCAweDAwZDEsIDB4MDA2MCwgMHhhODk3LCAweDQwMDUsCisJMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsCisJMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLCAweDA4MGMsIDB4NTdkZCwgMHgwMTEwLCAweDkwMDYsCisJMHgwMDE4LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDkxODYsCisJMHgwMGZmLCAweDAxMTAsIDB4MDA3MSwgMHgwMDYwLCAweDIwMjksIDB4MDA3ZSwgMHgyMDYxLCAweDE4MDAsCisJMHg2NDVjLCAweDI0MDAsIDB4OTUwNiwgMHgwMTEwLCAweDI1MDgsIDB4MDAxOSwgMHg4NTI5LCAweDFlYzgsCisJMHgwMDA1LCAweDA4MGMsIDB4NjcyNCwgMHgxMTM4LCAweDIyMDAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsCisJMHg5MTA4LCAweDA4MGMsIDB4ODg0YiwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNWU3LCAweDc5OGMsCisJMHgyMDAxLCAweDE5ODAsIDB4OTE4YywgMHg4MDAwLCAweDIxMDIsIDB4MDgwYywgMHg0YmZiLCAweDA5MDQsCisJMHgzNWVhLCAweDA4MGMsIDB4NmFhMywgMHgwMTIwLCAweDA4MGMsIDB4NmFhYiwgMHgxOTA0LCAweDM1ZWEsCisJMHgwODBjLCAweDY3ZWIsIDB4MDkwNCwgMHgzNWU3LCAweDA4MGMsIDB4Njg5ZiwgMHgwOTA0LCAweDM1ZTcsCisJMHgyMDAxLCAweDE5ODAsIDB4MjAwNCwgMHhkMGZjLCAweDE5MDQsIDB4MzViNSwgMHgwODA0LCAweDQ2MGMsCisJMHhhOWEwLCAweDIwMDEsIDB4MTk4MCwgMHg5MThjLCAweDgwMDAsIDB4YzE4ZCwgMHgyMTAyLCAweDA4MGMsCisJMHg0YzA4LCAweDAxYTAsIDB4MDgwYywgMHg2YWEzLCAweDAxMTgsIDB4MDgwYywgMHg2YWFiLCAweDExNzAsCisJMHgwODBjLCAweDY3ZWIsIDB4MjAwOSwgMHgwMDAyLCAweDAxMjgsIDB4MDgwYywgMHg2ODlmLCAweDExNzAsCisJMHgyMDA5LCAweDAwMDMsIDB4YTg5NywgMHg0MDA1LCAweGE5OWEsIDB4MDAxMCwgMHhhODk3LCAweDQwMDYsCisJMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsIDB4MDAwNSwgMHhhODk3LCAweDQwMDAsCisJMHgyMDAxLCAweDE5ODAsIDB4MjAwNCwgMHhkMGZjLCAweDExMjgsIDB4MDgwYywgMHg1N2RkLCAweDAxMTAsCisJMHg5MDA2LCAweDAwMTgsIDB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDAwMDUsCisJMHg4MWZmLCAweDE5MDQsIDB4MzVlNywgMHg3OThjLCAweDIwMDEsIDB4MTk3ZiwgMHg5MThjLCAweDgwMDAsCisJMHgyMTAyLCAweDA4MGMsIDB4NGJmYiwgMHgwOTA0LCAweDM1ZWEsIDB4MDgwYywgMHg2YWEzLCAweDAxMjAsCisJMHgwODBjLCAweDZhYWIsIDB4MTkwNCwgMHgzNWVhLCAweDA4MGMsIDB4NjdlYiwgMHgwOTA0LCAweDM1ZTcsCisJMHgwODBjLCAweDY4OGQsIDB4MDkwNCwgMHgzNWU3LCAweDIwMDEsIDB4MTk3ZiwgMHgyMDA0LCAweGQwZmMsCisJMHgxOTA0LCAweDM1YjUsIDB4MDgwNCwgMHg0NjBjLCAweGE5YTAsIDB4MjAwMSwgMHgxOTdmLCAweDkxOGMsCisJMHg4MDAwLCAweGMxOGQsIDB4MjEwMiwgMHgwODBjLCAweDRjMDgsIDB4MDFhMCwgMHgwODBjLCAweDZhYTMsCisJMHgwMTE4LCAweDA4MGMsIDB4NmFhYiwgMHgxMTcwLCAweDA4MGMsIDB4NjdlYiwgMHgyMDA5LCAweDAwMDIsCisJMHgwMTI4LCAweDA4MGMsIDB4Njg4ZCwgMHgxMTcwLCAweDIwMDksIDB4MDAwMywgMHhhODk3LCAweDQwMDUsCisJMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsCisJMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLCAweDIwMDEsIDB4MTk3ZiwgMHgyMDA0LCAweGQwZmMsCisJMHgxMTI4LCAweDA4MGMsIDB4NTdkZCwgMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLCAweDkwODUsCisJMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDYxMDAsIDB4MDgwNCwgMHgzNWI1LCAweDA4MGMsCisJMHg0YzE3LCAweDA5MDQsIDB4MzVlYSwgMHgwODBjLCAweDU3ZTksIDB4MTkwNCwgMHgzNWU3LCAweDc5YTgsCisJMHhkMTg0LCAweDExNTgsIDB4YjgzNCwgMHg4MDA3LCAweDc4OWUsIDB4YjgzMCwgMHg4MDA3LCAweDc4OWEsCisJMHhiYjJjLCAweDgzMWYsIDB4YmEyOCwgMHg4MjE3LCAweDAwNTAsIDB4YjgyNCwgMHg4MDA3LCAweDc4OWUsCisJMHhiODIwLCAweDgwMDcsIDB4Nzg5YSwgMHhiYjFjLCAweDgzMWYsIDB4YmExOCwgMHg4MjE3LCAweGI5MDAsCisJMHg5MThjLCAweDAyMDIsIDB4MDgwNCwgMHgzNWI1LCAweDc4YTgsIDB4OTA5YywgMHgwMDAzLCAweGQwYWMsCisJMHgxMTU4LCAweGQwYjQsIDB4MTE0OCwgMHg5MzlhLCAweDAwMDMsIDB4MWEwNCwgMHgzNWU3LCAweDYyNWMsCisJMHg3ODg0LCAweDkyMDYsIDB4MTkwNCwgMHg0N2M3LCAweDA4MGMsIDB4ODk0YywgMHgyMDAxLCAweGZmZWMsCisJMHgyMDA5LCAweDAwMGMsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgyMDM5LCAweDAwMDAsCisJMHgwMDA2LCAweDc4YTgsIDB4OTA4NCwgMHgwMDgwLCAweDE1MjgsIDB4MDAwNiwgMHgwMDM2LCAweDIwMDEsCisJMHgxYTgzLCAweDIwMWMsIDB4N2I5YSwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgxYTg0LCAweDIwMWMsCisJMHg3YjllLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDFhODUsIDB4MjAxYywgMHg3YmFlLCAweDIwMDMsCisJMHgwMDAwLCAweDIwMDEsIDB4MWE3ZiwgMHgyMDFjLCAweDdiYWEsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsCisJMHgxYTg2LCAweDIwMWMsIDB4N2JiMiwgMHgyMDAzLCAweDAwMDAsIDB4MDAzZSwgMHgwMDBlLCAweDAwMGUsCisJMHgwODA0LCAweDRjMzAsIDB4MDAwZSwgMHgyMDMxLCAweDAwMDAsIDB4MjA2MSwgMHgxOGI4LCAweDJjNDQsCisJMHhhNjZhLCAweGExN2EsIDB4YTc3MiwgMHhhMDc2LCAweGEyOGUsIDB4YTM5MiwgMHhhNDk2LCAweGE1OWEsCisJMHgwODBjLCAweDEwZjgsIDB4NzAwNywgMHgwMDAyLCAweDcwMWYsIDB4NDdlNywgMHgwMDA1LCAweDgxZmYsCisJMHgxOTA0LCAweDM1ZTcsIDB4MDgwYywgMHg0YzE3LCAweDA5MDQsIDB4MzVlYSwgMHgwODBjLCAweDZhYTMsCisJMHgxOTA0LCAweDM1ZTcsIDB4MDBjNiwgMHgwODBjLCAweDRiZTQsIDB4MDBjZSwgMHgwOTA0LCAweDM1ZTcsCisJMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4N2VhOCwgMHgwODBjLCAweGQyNDksCisJMHgwOTA0LCAweDM1ZTcsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NDgwZCwgMHgwMDA1LCAweDA4MGMsCisJMHg0MmVjLCAweDAwMDYsIDB4MDAzNiwgMHgyMDAxLCAweDFhODMsIDB4MjAxYywgMHg3YjlhLCAweDIwMDMsCisJMHgwMDAwLCAweDIwMDEsIDB4MWE4NCwgMHgyMDFjLCAweDdiOWUsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsCisJMHgxYTg1LCAweDIwMWMsIDB4N2JhZSwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgxYTdmLCAweDIwMWMsCisJMHg3YmFhLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDFhODYsIDB4MjAxYywgMHg3YmIyLCAweDIwMDMsCisJMHgwMDAwLCAweDAwM2UsIDB4MDAwZSwgMHgwODA0LCAweDM1YjUsIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsCisJMHgwOTA0LCAweDM1ZTcsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsCisJMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMDA5LCAweDAwMGMsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsCisJMHg3ZDk4LCAweDA4MDQsIDB4NGMzMCwgMHg5MDA2LCAweDA4MGMsIDB4MjhkYywgMHg3OGE4LCAweDkwODQsCisJMHgwMGZmLCAweDkwODYsIDB4MDBmZiwgMHgwMTE4LCAweDgxZmYsIDB4MTkwNCwgMHgzNWU3LCAweDA4MGMsCisJMHg3NjM3LCAweDAxMTAsIDB4MDgwYywgMHg2MGYzLCAweDc4ODgsIDB4OTA4YSwgMHgxMDAwLCAweDFhMDQsCisJMHgzNWVhLCAweDc5ODQsIDB4OTE4NiwgMHgwMGZmLCAweDAxMzgsIDB4OTE4MiwgMHgwMDdmLCAweDFhMDQsCisJMHgzNWVhLCAweDIxMDAsIDB4MDgwYywgMHgyOGE2LCAweDAwMjYsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDIwNjEsIDB4MTlmYiwgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwgMHgwMDAwLCAweDYwN2IsCisJMHgwMDAwLCAweDYwN2YsIDB4MDAwMCwgMHgwODBjLCAweDc2MzcsIDB4MTE1OCwgMHgwODBjLCAweDc5MzIsCisJMHgwODBjLCAweDYxMmUsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4NzY3YiwgMHgwODBjLCAweDc1NjMsCisJMHgwMGQwLCAweDA4MGMsIDB4YjI0NCwgMHgyMDYxLCAweDAxMDAsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsCisJMHg5MDg0LCAweDAwZmYsIDB4ODEwZiwgMHg5MTA1LCAweDYwNGEsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsCisJMHgwMDEwLCAweDIwMDksIDB4MTk5OSwgMHgyMDBiLCAweDAwMDAsIDB4MjAwOSwgMHgwMDJkLCAweDIwMTEsCisJMHg2MDE5LCAweDA4MGMsIDB4ODhkNSwgMHg3OTg0LCAweDA4MGMsIDB4NzYzNywgMHgxMTEwLCAweDIwMDksCisJMHgwMGZmLCAweDdhODgsIDB4MDgwYywgMHg0NjZmLCAweDAxMmUsIDB4MDBjZSwgMHgwMDJlLCAweDA4MDQsCisJMHgzNWI1LCAweDc5ODQsIDB4MDgwYywgMHg2NmI5LCAweDJiMDgsIDB4MTkwNCwgMHgzNWVhLCAweDA4MDQsCisJMHgzNWI1LCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNWU3LCAweDYwZGMsCisJMHhkMGFjLCAweDExMzAsIDB4ZDA5YywgMHgxMTIwLCAweDIwMDksIDB4MDAwNSwgMHgwODA0LCAweDM1ZTcsCisJMHgwODBjLCAweDRiZTQsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNWU3LCAweDc5ODQsCisJMHg4MWZmLCAweDA5MDQsIDB4MzVlYSwgMHg5MTkyLCAweDAwMjEsIDB4MWEwNCwgMHgzNWVhLCAweDdhOGMsCisJMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHg3MDJhLCAweGFmNjAsCisJMHg3NzM2LCAweDA4MGMsIDB4NGMyZCwgMHg3MDFmLCAweDQ4YzQsIDB4Nzg4MCwgMHg5MDg2LCAweDAwNmUsCisJMHgwMTEwLCAweDcwMWYsIDB4NTI3ZCwgMHgwMDA1LCAweDIwMDksIDB4MDA4MCwgMHgwODBjLCAweDY3MjQsCisJMHgxMTE4LCAweDA4MGMsIDB4NmFhMywgMHgwMTIwLCAweDIwMjEsIDB4NDAwYSwgMHgwODA0LCAweDM1YjcsCisJMHgwMGQ2LCAweDAwOTYsIDB4YTk2NCwgMHhhYTZjLCAweGFiNzAsIDB4YWM3NCwgMHhhZDc4LCAweGFlN2MsCisJMHhhODg0LCAweDkwYmUsIDB4MDEwMCwgMHgwOTA0LCAweDQ5NWQsIDB4OTBiZSwgMHgwMTEyLCAweDA5MDQsCisJMHg0OTVkLCAweDkwYmUsIDB4MDExMywgMHgwOTA0LCAweDQ5NWQsIDB4OTBiZSwgMHgwMTE0LCAweDA5MDQsCisJMHg0OTVkLCAweDkwYmUsIDB4MDExNywgMHgwOTA0LCAweDQ5NWQsIDB4OTBiZSwgMHgwMTFhLCAweDA5MDQsCisJMHg0OTVkLCAweDkwYmUsIDB4MDExYywgMHgwOTA0LCAweDQ5NWQsIDB4OTBiZSwgMHgwMTIxLCAweDA5MDQsCisJMHg0OTQ0LCAweDkwYmUsIDB4MDEzMSwgMHgwOTA0LCAweDQ5NDQsIDB4OTBiZSwgMHgwMTcxLCAweDA5MDQsCisJMHg0OTVkLCAweDkwYmUsIDB4MDE3MywgMHgwOTA0LCAweDQ5NWQsIDB4OTBiZSwgMHgwMWExLCAweDExMjgsCisJMHhhODk0LCAweDgwMDcsIDB4YTg5NiwgMHgwODA0LCAweDQ5NjgsIDB4OTBiZSwgMHgwMjEyLCAweDA5MDQsCisJMHg0OTUxLCAweDkwYmUsIDB4MDIxMywgMHgwNWU4LCAweDkwYmUsIDB4MDIxNCwgMHgwNTAwLCAweDkwYmUsCisJMHgwMjE3LCAweDAxODgsIDB4OTBiZSwgMHgwMjFhLCAweDExMjAsIDB4YTg5YywgMHg4MDA3LCAweGE4OWUsCisJMHgwNGUwLCAweDkwYmUsIDB4MDIxZiwgMHgwNWM4LCAweDkwYmUsIDB4MDMwMCwgMHgwNWIwLCAweDAwOWUsCisJMHgwMGRlLCAweDA4MDQsIDB4MzVlYSwgMHg3MDI4LCAweDkwODAsIDB4MDAxMCwgMHgyMDk4LCAweDIwYTAsCisJMHg3MDM0LCAweDIwZTAsIDB4MjBlOCwgMHgyMGE5LCAweDAwMDcsIDB4MDgwYywgMHg0OWE2LCAweDcwMjgsCisJMHg5MDgwLCAweDAwMGUsIDB4MjA5OCwgMHgyMGEwLCAweDcwMzQsIDB4MjBlMCwgMHgyMGU4LCAweDIwYTksCisJMHgwMDAxLCAweDA4MGMsIDB4NDlhNiwgMHgwMGM4LCAweDcwMjgsIDB4OTA4MCwgMHgwMDBjLCAweDIwOTgsCisJMHgyMGEwLCAweDcwMzQsIDB4MjBlMCwgMHgyMGU4LCAweDIwYTksIDB4MDAwMSwgMHgwODBjLCAweDQ5YjMsCisJMHgwMGI4LCAweDcwMjgsIDB4OTA4MCwgMHgwMDBlLCAweDIwOTgsIDB4MjBhMCwgMHg3MDM0LCAweDIwZTAsCisJMHgyMGU4LCAweDIwYTksIDB4MDAwMSwgMHgwODBjLCAweDQ5YjMsIDB4NzAyOCwgMHg5MDgwLCAweDAwMGMsCisJMHgyMDk4LCAweDIwYTAsIDB4NzAzNCwgMHgyMGUwLCAweDIwZTgsIDB4MjBhOSwgMHgwMDAxLCAweDA0ZjEsCisJMHgwMGM2LCAweDA4MGMsIDB4NGJlNCwgMHgwNTUwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweGE4NjcsCisJMHgwMTE5LCAweDkwMDYsIDB4YTg4MiwgMHhhODdmLCAweDAwMjAsIDB4YTg4YiwgMHgwMDAxLCAweDgxMGIsCisJMHhhOWFlLCAweGE4YjIsIDB4YWFiNiwgMHhhYmJhLCAweGFjYmUsIDB4YWRjMiwgMHhhOWM2LCAweGE4Y2EsCisJMHgwMGNlLCAweDAwOWUsIDB4MDBkZSwgMHhhODY2LCAweGE4MjIsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsCisJMHhhODA0LCAweDIwNDgsIDB4MDgwYywgMHhkMjY0LCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsCisJMHgzNWU3LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDQ5OWQsIDB4MDAwNSwgMHgwMGNlLCAweDAwOWUsCisJMHgwMGRlLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM1ZTcsIDB4YTgyMCwgMHg5MDg2LCAweDgwMDEsCisJMHgxOTA0LCAweDM1YjUsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsIDB4MzVlNywgMHgwMDE2LCAweDAwMjYsCisJMHgzNTEwLCAweDIwYTksIDB4MDAwMiwgMHg0MDAyLCAweDQxMDQsIDB4NDAwNCwgMHg4MjExLCAweDFkYzgsCisJMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LCAweDM1MjAsCisJMHgyMGE5LCAweDAwMDQsIDB4NDAwMiwgMHg0MzA0LCAweDQyMDQsIDB4NDEwNCwgMHg0MDA0LCAweDg0MjEsCisJMHgxZGI4LCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHg4MWZmLCAweDAxMjAsCisJMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNWU3LCAweDYwZGMsIDB4ZDBhYywgMHgxMTg4LCAweDIwMDksCisJMHgxODBkLCAweDIxMGMsIDB4ZDE4YywgMHgwMTMwLCAweGQwOWMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMTYsCisJMHgwODA0LCAweDM1ZTcsIDB4ZDA5YywgMHgxMTIwLCAweDIwMDksIDB4MDAwNSwgMHgwODA0LCAweDM1ZTcsCisJMHg3OTg0LCAweDc4YTgsIDB4MjA0MCwgMHgwODBjLCAweGIyM2QsIDB4MTEyMCwgMHg5MTgyLCAweDAwN2YsCisJMHgwYTA0LCAweDM1ZWEsIDB4OTE4NiwgMHgwMGZmLCAweDA5MDQsIDB4MzVlYSwgMHg5MTgyLCAweDA4MDAsCisJMHgxYTA0LCAweDM1ZWEsIDB4N2E4YywgMHg3Yjg4LCAweDYwN2MsIDB4OTMwNiwgMHgxMTU4LCAweDYwODAsCisJMHg5MjRlLCAweDA5MDQsIDB4MzVlYSwgMHgwODBjLCAweGIyM2QsIDB4MTEyMCwgMHg5OWNjLCAweGZmMDAsCisJMHgwOTA0LCAweDM1ZWEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgxODBkLCAweDIwMDQsCisJMHhkMDhjLCAweDAxOTgsIDB4OTM4NiwgMHgwMGZmLCAweDAxODAsIDB4MDAyNiwgMHgyMDExLCAweDgwMDgsCisJMHgwODBjLCAweDZhYzcsIDB4MDAyZSwgMHgwMTQ4LCAweDkxOGQsIDB4ODAwMCwgMHgwODBjLCAweDZiMTEsCisJMHgxMTIwLCAweDIwMDEsIDB4NDAwOSwgMHgwODA0LCAweDRhNjQsIDB4MDgwYywgMHg0YWY3LCAweDA5MDQsCisJMHg0YTZhLCAweDAwODYsIDB4OTBjNiwgMHg0MDAwLCAweDAwOGUsIDB4MTUzOCwgMHgwMGM2LCAweDAwMDYsCisJMHgwMDM2LCAweGI4MTgsIDB4YmIxYywgMHg5MzA1LCAweGJiMjAsIDB4OTMwNSwgMHhiYjI0LCAweDkzMDUsCisJMHhiYjI4LCAweDkzMDUsIDB4YmIyYywgMHg5MzA1LCAweGJiMzAsIDB4OTMwNSwgMHhiYjM0LCAweDkzMDUsCisJMHgwMDNlLCAweDA1NzAsIDB4ZDg4YywgMHgxMTI4LCAweDA4MGMsIDB4NmFhMywgMHgwMTEwLCAweGM4OWQsCisJMHgwNDM4LCAweDkwMGUsIDB4MDgwYywgMHg2OTQ0LCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsCisJMHgwMTA4LCAweGMxOGQsIDB4MDAwZSwgMHgwMGNlLCAweDAwYjgsIDB4OTBjNiwgMHg0MDA3LCAweDExMTAsCisJMHgyNDA4LCAweDAwOTAsIDB4OTBjNiwgMHg0MDA4LCAweDExMTgsIDB4MjcwOCwgMHgyNjEwLCAweDAwNjAsCisJMHg5MGM2LCAweDQwMDksIDB4MTEwOCwgMHgwMDQwLCAweDkwYzYsIDB4NDAwNiwgMHgxMTA4LCAweDAwMjAsCisJMHgyMDAxLCAweDQwMDUsIDB4MjAwOSwgMHgwMDBhLCAweDIwMjAsIDB4MDEyZSwgMHgwODA0LCAweDM1YjcsCisJMHgwMDBlLCAweDAwY2UsIDB4MmIwMCwgMHg3MDI2LCAweDAwMTYsIDB4MDBiNiwgMHgwMGM2LCAweDAwZTYsCisJMHgyYzcwLCAweDA4MGMsIDB4YjMyNSwgMHgwOTA0LCAweDRhYmYsIDB4MmIwMCwgMHg2MDEyLCAweDA4MGMsCisJMHhkNTU0LCAweDJlNTgsIDB4MDBlZSwgMHgwMGU2LCAweDAwYzYsIDB4MDgwYywgMHg0YmU0LCAweDAwY2UsCisJMHgyYjcwLCAweDExNTgsIDB4MDgwYywgMHhiMmQzLCAweDAwZWUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMWUsCisJMHgwMTJlLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM1ZTcsIDB4OTAwZSwgMHhhOTY2LCAweGE5NmEsCisJMHgyOTAwLCAweDYwMTYsIDB4YTkzMiwgMHhhODY4LCAweGMwZmQsIDB4ZDg4YywgMHgwMTA4LCAweGMwZjUsCisJMHhhODZhLCAweGQ4OWMsIDB4MTExMCwgMHgwODBjLCAweDMyNTAsIDB4NjAyMywgMHgwMDAxLCAweDkwMDYsCisJMHgwODBjLCAweDY2NTYsIDB4ZDg5YywgMHgwMTM4LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDY2NmEsCisJMHgyMDA5LCAweDAwMDMsIDB4MDAzMCwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NjZhLCAweDIwMDksCisJMHgwMDAyLCAweDA4MGMsIDB4YjM1MiwgMHg3OGE4LCAweGQwOTQsIDB4MDEzOCwgMHgwMGVlLCAweDcwMjQsCisJMHgwMGU2LCAweDIwNTgsIDB4YjhjYywgMHhjMDhkLCAweGI4Y2UsIDB4OTA4NSwgMHgwMDAxLCAweDAwZWUsCisJMHgwMGNlLCAweDAwYmUsIDB4MDAxZSwgMHgwMTJlLCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsCisJMHgzNWU3LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDRhY2UsIDB4MDAwNSwgMHhhODMwLCAweDIwMDksCisJMHgxODBkLCAweDIxMGMsIDB4ZDE4YywgMHgwMTQwLCAweDIwMDgsIDB4OTE4ZSwgMHhkZWFkLCAweDExMjAsCisJMHgyMDIxLCAweDQwMDksIDB4MDgwNCwgMHgzNWI3LCAweDkwODYsIDB4MDEwMCwgMHg3MDI0LCAweDIwNTgsCisJMHgxMTM4LCAweDIwMDksIDB4MDAwNCwgMHhiYTA0LCAweDkyOTQsIDB4MDBmZiwgMHgwODA0LCAweDU3MjksCisJMHg5MDBlLCAweGE4NjgsIDB4ZDBmNCwgMHgxOTA0LCAweDM1YjUsIDB4MDgwYywgMHg2OTQ0LCAweDExMDgsCisJMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDgwNCwgMHgzNWI1LCAweDAwZTYsCisJMHgwMGQ2LCAweDAwOTYsIDB4ODNmZiwgMHgwOTA0LCAweDRiNDYsIDB4OTAyZSwgMHgwODBjLCAweGIyM2QsCisJMHgwMTMwLCAweDkwMjYsIDB4MjBhOSwgMHgwODAwLCAweDIwNzEsIDB4MTAwMCwgMHgwMDMwLCAweDIwMjEsCisJMHgwMDdmLCAweDIwYTksIDB4MDc4MSwgMHgyMDcxLCAweDEwN2YsIDB4MmUwNCwgMHg5MDA1LCAweDExYjgsCisJMHgyMTAwLCAweDk0MDYsIDB4MTkwNCwgMHg0YjU3LCAweDI0MjgsIDB4OTRjZSwgMHgwMDdmLCAweDExMjAsCisJMHg5MmNlLCAweGZmZmQsIDB4MTU1OCwgMHgwMDMwLCAweDk0Y2UsIDB4MDA4MCwgMHgxMTMwLCAweDkyY2UsCisJMHhmZmZjLCAweDE1MjAsIDB4OTNjZSwgMHgwMGZmLCAweDE1MDgsIDB4YzVmZCwgMHgwNDgwLCAweDIwNTgsCisJMHhiZjEwLCAweDI3MDAsIDB4OTMwNiwgMHgxMWU4LCAweGJlMTQsIDB4MjYwMCwgMHg5MjA2LCAweDExYzgsCisJMHgyNDAwLCAweDkxMDYsIDB4MTE4MCwgMHhkODg0LCAweDA1OTgsIDB4ZDg5NCwgMHgxNTg4LCAweDA4MGMsCisJMHg2YTQzLCAweDE1NzAsIDB4MjAwMSwgMHg0MDAwLCAweDA0NjAsIDB4MDgwYywgMHg2YWEzLCAweDE1NDAsCisJMHgyMDAxLCAweDQwMDAsIDB4MDQzMCwgMHgyMDAxLCAweDQwMDcsIDB4MDQxOCwgMHgyMDAxLCAweDQwMDYsCisJMHgwNDAwLCAweDI0MDAsIDB4OTEwNiwgMHgxMTU4LCAweGJlMTQsIDB4ODdmZiwgMHgxMTI4LCAweDg2ZmYsCisJMHgwOTE4LCAweDA4MGMsIDB4YjIzZCwgMHgxOTAwLCAweDIwMDEsIDB4NDAwOCwgMHgwMDkwLCAweDg0MjAsCisJMHg4ZTcwLCAweDFmMDQsIDB4NGIwZCwgMHg4NWZmLCAweDExMzAsIDB4MjAwMSwgMHg0MDA5LCAweDAwNDgsCisJMHgyMDAxLCAweDAwMDEsIDB4MDAzMCwgMHgwODBjLCAweDY2YjksIDB4MWRkMCwgMHhiYjEyLCAweGJhMTYsCisJMHg5MDA2LCAweDkwMDUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHg4MWZmLCAweDAxMjAsCisJMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNWU3LCAweDA4MGMsIDB4NGJlNCwgMHgxMTIwLCAweDIwMDksCisJMHgwMDAyLCAweDA4MDQsIDB4MzVlNywgMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsCisJMHg3ODg0LCAweDkwMDUsIDB4MDkwNCwgMHgzNWVhLCAweDkwOTYsIDB4MDBmZiwgMHgwMTIwLCAweDkwOTIsCisJMHgwMDA0LCAweDFhMDQsIDB4MzVlYSwgMHgyMDEwLCAweDI5MTgsIDB4MDgwYywgMHgzMWY2LCAweDExMjAsCisJMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNWU3LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDRiOTksCisJMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLCAweDE5MDQsIDB4MzViNSwgMHgyMDA5LCAweDAwMDQsCisJMHgwODA0LCAweDM1ZTcsIDB4Nzk4NCwgMHgwODBjLCAweGIyM2QsIDB4MTEyMCwgMHg5MTgyLCAweDAwN2YsCisJMHgwYTA0LCAweDM1ZWEsIDB4OTE4NiwgMHgwMGZmLCAweDA5MDQsIDB4MzVlYSwgMHg5MTgyLCAweDA4MDAsCisJMHgxYTA0LCAweDM1ZWEsIDB4MjAwMSwgMHg5NDAwLCAweDA4MGMsIDB4NTc4NCwgMHgxOTA0LCAweDM1ZTcsCisJMHgwODA0LCAweDM1YjUsIDB4YTk5OCwgMHgwODBjLCAweGIyM2QsIDB4MTExOCwgMHg5MTgyLCAweDAwN2YsCisJMHgwMjgwLCAweDkxODYsIDB4MDBmZiwgMHgwMTY4LCAweDkxODIsIDB4MDgwMCwgMHgxMjUwLCAweDIwMDEsCisJMHg5NDAwLCAweDA4MGMsIDB4NTc4NCwgMHgxMWE4LCAweDAwNjAsIDB4YTg5NywgMHg0MDA1LCAweGE5OWEsCisJMHgwMDEwLCAweGE4OTcsIDB4NDAwNiwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsCisJMHgwMDA1LCAweGE4OTcsIDB4NDAwMCwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsCisJMHgwMDA1LCAweDIwMDksIDB4MDAwYSwgMHgwYzQ4LCAweDA4MGMsIDB4MTAwZSwgMHgwMTk4LCAweDkwMDYsCisJMHhhODAyLCAweDcwMTQsIDB4OTAwNSwgMHgxMTIwLCAweDI5MDAsIDB4NzAxNiwgMHg3MDFhLCAweDAwNDAsCisJMHg3MDE4LCAweGE4MDIsIDB4MDA4NiwgMHgyMDQwLCAweDI5MDAsIDB4YTAwNiwgMHg3MDFhLCAweDAwOGUsCisJMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg3OTg0LCAweDA4MGMsIDB4NjcyNCwgMHgxMTMwLCAweDdlODgsCisJMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLCAweDAyMDgsIDB4OTA1ZSwgMHg4YmZmLCAweDAwMDUsCisJMHhhOTk4LCAweDA4MGMsIDB4NjcyNCwgMHgxMTMwLCAweGFlOWMsIDB4OTY4NCwgMHgzZmZmLCAweDkwODIsCisJMHg0MDAwLCAweDAyMDgsIDB4OTA1ZSwgMHg4YmZmLCAweDAwMDUsIDB4YWU5OCwgMHgwMDA4LCAweDdlODQsCisJMHgyNjA4LCAweDA4MGMsIDB4NjcyNCwgMHgxMTA4LCAweDAwMDgsIDB4OTA1ZSwgMHg4YmZmLCAweDAwMDUsCisJMHgwMDE2LCAweDcxMTQsIDB4ODFmZiwgMHgwMTI4LCAweDIxNDgsIDB4YTkwNCwgMHgwODBjLCAweDEwNDAsCisJMHgwY2M4LCAweDcxMTYsIDB4NzExYSwgMHgwMDFlLCAweDAwMDUsIDB4MjAzMSwgMHgwMDAxLCAweDAwMTAsCiAJMHgyMDMxLCAweDAwMDAsIDB4MjA2MSwgMHgxOGI4LCAweDJjNDQsIDB4YTY2YSwgMHhhMTdhLCAweGE3NzIsCiAJMHhhMDc2LCAweGEyOGUsIDB4YTM5MiwgMHhhNDk2LCAweGE1OWEsIDB4MDgwYywgMHgxMGY4LCAweDcwMDcsCi0JMHgwMDAyLCAweDcwMWYsIDB4NDdiYywgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNWRkLCAweDA4MGMsCi0JMHg0YmJjLCAweDA5MDQsIDB4MzVlMCwgMHgwODBjLCAweDZhOTIsIDB4MTkwNCwgMHgzNWRkLCAweDAwYzYsCi0JMHgwODBjLCAweDRiODksIDB4MDBjZSwgMHgwOTA0LCAweDM1ZGQsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsCi0JMHhjMGZkLCAweGE4NmEsIDB4N2VhOCwgMHgwODBjLCAweGNmYzcsIDB4MDkwNCwgMHgzNWRkLCAweDcwMDcsCi0JMHgwMDAzLCAweDcwMWYsIDB4NDdlMiwgMHgwMDA1LCAweDA4MGMsIDB4NDJjZSwgMHgwMDA2LCAweDAwMzYsCi0JMHgyMDAxLCAweDFhODQsIDB4MjAxYywgMHg3YjlhLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDFhODUsCi0JMHgyMDFjLCAweDdiOWUsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MWE4NiwgMHgyMDFjLCAweDdiYWUsCi0JMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgxYTgwLCAweDIwMWMsIDB4N2JhYSwgMHgyMDAzLCAweDAwMDAsCi0JMHgyMDAxLCAweDFhODcsIDB4MjAxYywgMHg3YmIyLCAweDIwMDMsIDB4MDAwMCwgMHgwMDNlLCAweDAwMGUsCi0JMHgwODA0LCAweDM1YWIsIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsIDB4MDkwNCwgMHgzNWRkLCAweDg5MDYsCi0JMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMWIsCi0JMHgyMDA5LCAweDAwMGMsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgwODA0LCAweDRiZDUsCi0JMHg5MDA2LCAweDA4MGMsIDB4MjhmZCwgMHg3OGE4LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwZmYsCi0JMHgwMTE4LCAweDgxZmYsIDB4MTkwNCwgMHgzNWRkLCAweDA4MGMsIDB4NzU2OSwgMHgwMTEwLCAweDA4MGMsCi0JMHg2MGVjLCAweDc4ODgsIDB4OTA4YSwgMHgxMDAwLCAweDFhMDQsIDB4MzVlMCwgMHg3OTg0LCAweDkxODYsCi0JMHgwMGZmLCAweDAxMzgsIDB4OTE4MiwgMHgwMDdmLCAweDFhMDQsIDB4MzVlMCwgMHgyMTAwLCAweDA4MGMsCi0JMHgyOGM3LCAweDAwMjYsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDYxLCAweDE5ZmMsCi0JMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwgMHgwMDAwLCAweDYwN2IsIDB4MDAwMCwgMHg2MDdmLCAweDAwMDAsCi0JMHgwODBjLCAweDc1NjksIDB4MTE1OCwgMHgwODBjLCAweDc4NGUsIDB4MDgwYywgMHg2MTI3LCAweDkwODUsCi0JMHgwMDAxLCAweDA4MGMsIDB4NzVhZCwgMHgwODBjLCAweDc0OTUsIDB4MDBkMCwgMHgwODBjLCAweGIwNzIsCi0JMHgyMDYxLCAweDAxMDAsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweDgxMGYsCi0JMHg5MTA1LCAweDYwNGEsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgyMDA5LCAweDE5OWEsCi0JMHgyMDBiLCAweDAwMDAsIDB4MjAwOSwgMHgwMDJkLCAweDIwMTEsIDB4NjAxMiwgMHgwODBjLCAweDg3YTEsCi0JMHg3OTg0LCAweDA4MGMsIDB4NzU2OSwgMHgxMTEwLCAweDIwMDksIDB4MDBmZiwgMHg3YTg4LCAweDA4MGMsCi0JMHg0NjQ0LCAweDAxMmUsIDB4MDBjZSwgMHgwMDJlLCAweDA4MDQsIDB4MzVhYiwgMHg3OTg0LCAweDA4MGMsCi0JMHg2NmIyLCAweDJiMDgsIDB4MTkwNCwgMHgzNWUwLCAweDA4MDQsIDB4MzVhYiwgMHg4MWZmLCAweDAxMjAsCi0JMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNWRkLCAweDYwZGMsIDB4ZDBhYywgMHgxMTMwLCAweGQwOWMsCi0JMHgxMTIwLCAweDIwMDksIDB4MDAwNSwgMHgwODA0LCAweDM1ZGQsIDB4MDgwYywgMHg0Yjg5LCAweDExMjAsCi0JMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNWRkLCAweDc5ODQsIDB4ODFmZiwgMHgwOTA0LCAweDM1ZTAsCi0JMHg5MTkyLCAweDAwMjEsIDB4MWEwNCwgMHgzNWUwLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHg3MDJhLCAweGFmNjAsIDB4NzczNiwgMHgwODBjLCAweDRiZDIsCi0JMHg3MDFmLCAweDQ4OTksIDB4Nzg4MCwgMHg5MDg2LCAweDAwNmUsIDB4MDExMCwgMHg3MDFmLCAweDUyN2IsCi0JMHgwMDA1LCAweDIwMDksIDB4MDA4MCwgMHgwODBjLCAweDY3MWQsIDB4MTExOCwgMHgwODBjLCAweDZhOTIsCi0JMHgwMTIwLCAweDIwMjEsIDB4NDAwYSwgMHgwODA0LCAweDM1YWQsIDB4MDBkNiwgMHgwMDk2LCAweGE5NjQsCi0JMHhhYTZjLCAweGFiNzAsIDB4YWM3NCwgMHhhZDc4LCAweGFlN2MsIDB4YTg4NCwgMHg5MGJlLCAweDAxMDAsCi0JMHgwOTA0LCAweDQ5MzIsIDB4OTBiZSwgMHgwMTEyLCAweDA5MDQsIDB4NDkzMiwgMHg5MGJlLCAweDAxMTMsCi0JMHgwOTA0LCAweDQ5MzIsIDB4OTBiZSwgMHgwMTE0LCAweDA5MDQsIDB4NDkzMiwgMHg5MGJlLCAweDAxMTcsCi0JMHgwOTA0LCAweDQ5MzIsIDB4OTBiZSwgMHgwMTFhLCAweDA5MDQsIDB4NDkzMiwgMHg5MGJlLCAweDAxMWMsCi0JMHgwOTA0LCAweDQ5MzIsIDB4OTBiZSwgMHgwMTIxLCAweDA5MDQsIDB4NDkxOSwgMHg5MGJlLCAweDAxMzEsCi0JMHgwOTA0LCAweDQ5MTksIDB4OTBiZSwgMHgwMTcxLCAweDA5MDQsIDB4NDkzMiwgMHg5MGJlLCAweDAxNzMsCi0JMHgwOTA0LCAweDQ5MzIsIDB4OTBiZSwgMHgwMWExLCAweDExMjgsIDB4YTg5NCwgMHg4MDA3LCAweGE4OTYsCi0JMHgwODA0LCAweDQ5M2QsIDB4OTBiZSwgMHgwMjEyLCAweDA5MDQsIDB4NDkyNiwgMHg5MGJlLCAweDAyMTMsCi0JMHgwNWU4LCAweDkwYmUsIDB4MDIxNCwgMHgwNTAwLCAweDkwYmUsIDB4MDIxNywgMHgwMTg4LCAweDkwYmUsCi0JMHgwMjFhLCAweDExMjAsIDB4YTg5YywgMHg4MDA3LCAweGE4OWUsIDB4MDRlMCwgMHg5MGJlLCAweDAyMWYsCi0JMHgwNWM4LCAweDkwYmUsIDB4MDMwMCwgMHgwNWIwLCAweDAwOWUsIDB4MDBkZSwgMHgwODA0LCAweDM1ZTAsCi0JMHg3MDI4LCAweDkwODAsIDB4MDAxMCwgMHgyMDk4LCAweDIwYTAsIDB4NzAzNCwgMHgyMGUwLCAweDIwZTgsCi0JMHgyMGE5LCAweDAwMDcsIDB4MDgwYywgMHg0OTdiLCAweDcwMjgsIDB4OTA4MCwgMHgwMDBlLCAweDIwOTgsCi0JMHgyMGEwLCAweDcwMzQsIDB4MjBlMCwgMHgyMGU4LCAweDIwYTksIDB4MDAwMSwgMHgwODBjLCAweDQ5N2IsCi0JMHgwMGM4LCAweDcwMjgsIDB4OTA4MCwgMHgwMDBjLCAweDIwOTgsIDB4MjBhMCwgMHg3MDM0LCAweDIwZTAsCi0JMHgyMGU4LCAweDIwYTksIDB4MDAwMSwgMHgwODBjLCAweDQ5ODgsIDB4MDBiOCwgMHg3MDI4LCAweDkwODAsCi0JMHgwMDBlLCAweDIwOTgsIDB4MjBhMCwgMHg3MDM0LCAweDIwZTAsIDB4MjBlOCwgMHgyMGE5LCAweDAwMDEsCi0JMHgwODBjLCAweDQ5ODgsIDB4NzAyOCwgMHg5MDgwLCAweDAwMGMsIDB4MjA5OCwgMHgyMGEwLCAweDcwMzQsCi0JMHgyMGUwLCAweDIwZTgsIDB4MjBhOSwgMHgwMDAxLCAweDA0ZjEsIDB4MDBjNiwgMHgwODBjLCAweDRiODksCi0JMHgwNTUwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweGE4NjcsIDB4MDExOSwgMHg5MDA2LCAweGE4ODIsCi0JMHhhODdmLCAweDAwMjAsIDB4YTg4YiwgMHgwMDAxLCAweDgxMGIsIDB4YTlhZSwgMHhhOGIyLCAweGFhYjYsCi0JMHhhYmJhLCAweGFjYmUsIDB4YWRjMiwgMHhhOWM2LCAweGE4Y2EsIDB4MDBjZSwgMHgwMDllLCAweDAwZGUsCi0JMHhhODY2LCAweGE4MjIsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4YTgwNCwgMHgyMDQ4LCAweDA4MGMsCi0JMHhjZmUyLCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsIDB4MzVkZCwgMHg3MDA3LCAweDAwMDMsCi0JMHg3MDFmLCAweDQ5NzIsIDB4MDAwNSwgMHgwMGNlLCAweDAwOWUsIDB4MDBkZSwgMHgyMDA5LCAweDAwMDIsCi0JMHgwODA0LCAweDM1ZGQsIDB4YTgyMCwgMHg5MDg2LCAweDgwMDEsIDB4MTkwNCwgMHgzNWFiLCAweDIwMDksCi0JMHgwMDA0LCAweDA4MDQsIDB4MzVkZCwgMHgwMDE2LCAweDAwMjYsIDB4MzUxMCwgMHgyMGE5LCAweDAwMDIsCi0JMHg0MDAyLCAweDQxMDQsIDB4NDAwNCwgMHg4MjExLCAweDFkYzgsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LCAweDM1MjAsIDB4MjBhOSwgMHgwMDA0LCAweDQwMDIsCi0JMHg0MzA0LCAweDQyMDQsIDB4NDEwNCwgMHg0MDA0LCAweDg0MjEsIDB4MWRiOCwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsCi0JMHgzNWRkLCAweDYwZGMsIDB4ZDBhYywgMHgxMTMwLCAweGQwOWMsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDUsCi0JMHgwODA0LCAweDM1ZGQsIDB4Nzk4NCwgMHg3OGE4LCAweDIwNDAsIDB4MDgwYywgMHhiMDZiLCAweDExMjAsCi0JMHg5MTgyLCAweDAwN2YsIDB4MGEwNCwgMHgzNWUwLCAweDkxODYsIDB4MDBmZiwgMHgwOTA0LCAweDM1ZTAsCi0JMHg5MTgyLCAweDA4MDAsIDB4MWEwNCwgMHgzNWUwLCAweDdhOGMsIDB4N2I4OCwgMHg2MDdjLCAweDkzMDYsCi0JMHgxMTU4LCAweDYwODAsIDB4OTI0ZSwgMHgwOTA0LCAweDM1ZTAsIDB4MDgwYywgMHhiMDZiLCAweDExMjAsCi0JMHg5OWNjLCAweGZmMDAsIDB4MDkwNCwgMHgzNWUwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg0YTljLCAweDA5MDQsIDB4NGExYywgMHgwMDg2LCAweDkwYzYsIDB4NDAwMCwgMHgwMDhlLCAweDE1MzgsCi0JMHgwMGM2LCAweDAwMDYsIDB4MDAzNiwgMHhiODE4LCAweGJiMWMsIDB4OTMwNSwgMHhiYjIwLCAweDkzMDUsCi0JMHhiYjI0LCAweDkzMDUsIDB4YmIyOCwgMHg5MzA1LCAweGJiMmMsIDB4OTMwNSwgMHhiYjMwLCAweDkzMDUsCi0JMHhiYjM0LCAweDkzMDUsIDB4MDAzZSwgMHgwNTcwLCAweGQ4OGMsIDB4MTEyOCwgMHgwODBjLCAweDZhOTIsCi0JMHgwMTEwLCAweGM4OWQsIDB4MDQzOCwgMHg5MDBlLCAweDA4MGMsIDB4NjkzZCwgMHgxMTA4LCAweGMxODUsCi0JMHhiODAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDAwMGUsIDB4MDBjZSwgMHgwMGI4LCAweDkwYzYsCi0JMHg0MDA3LCAweDExMTAsIDB4MjQwOCwgMHgwMDkwLCAweDkwYzYsIDB4NDAwOCwgMHgxMTE4LCAweDI3MDgsCi0JMHgyNjEwLCAweDAwNjAsIDB4OTBjNiwgMHg0MDA5LCAweDExMDgsIDB4MDA0MCwgMHg5MGM2LCAweDQwMDYsCi0JMHgxMTA4LCAweDAwMjAsIDB4MjAwMSwgMHg0MDA1LCAweDIwMDksIDB4MDAwYSwgMHgyMDIwLCAweDAxMmUsCi0JMHgwODA0LCAweDM1YWQsIDB4MDAwZSwgMHgwMGNlLCAweDJiMDAsIDB4NzAyNiwgMHgwMDE2LCAweDAwYjYsCi0JMHgwMGM2LCAweDAwZTYsIDB4MmM3MCwgMHgwODBjLCAweGIxNTMsIDB4MDkwNCwgMHg0YTcxLCAweDJiMDAsCi0JMHg2MDEyLCAweDA4MGMsIDB4ZDJkMiwgMHgyZTU4LCAweDAwZWUsIDB4MDBlNiwgMHgwMGM2LCAweDA4MGMsCi0JMHg0Yjg5LCAweDAwY2UsIDB4MmI3MCwgMHgxMTU4LCAweDA4MGMsIDB4YjEwMSwgMHgwMGVlLCAweDAwY2UsCi0JMHgwMGJlLCAweDAwMWUsIDB4MDEyZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNWRkLCAweDkwMGUsCi0JMHhhOTY2LCAweGE5NmEsIDB4MjkwMCwgMHg2MDE2LCAweGE5MzIsIDB4YTg2OCwgMHhjMGZkLCAweGQ4OGMsCi0JMHgwMTA4LCAweGMwZjUsIDB4YTg2YSwgMHhkODljLCAweDExMTAsIDB4MDgwYywgMHgzMjQ2LCAweDYwMjMsCi0JMHgwMDAxLCAweDkwMDYsIDB4MDgwYywgMHg2NjRmLCAweGQ4OWMsIDB4MDEzOCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwODBjLCAweDY2NjMsIDB4MjAwOSwgMHgwMDAzLCAweDAwMzAsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCi0JMHg2NjYzLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweGIxODAsIDB4NzhhOCwgMHhkMDk0LCAweDAxMzgsCi0JMHgwMGVlLCAweDcwMjQsIDB4MDBlNiwgMHgyMDU4LCAweGI4Y2MsIDB4YzA4ZCwgMHhiOGNlLCAweDkwODUsCi0JMHgwMDAxLCAweDAwZWUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMWUsIDB4MDEyZSwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDAzLCAweDA4MDQsIDB4MzVkZCwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg0YTgwLCAweDAwMDUsCi0JMHhhODMwLCAweDkwODYsIDB4MDEwMCwgMHg3MDI0LCAweDIwNTgsIDB4MTEzOCwgMHgyMDA5LCAweDAwMDQsCi0JMHhiYTA0LCAweDkyOTQsIDB4MDBmZiwgMHgwODA0LCAweDU3MjcsIDB4OTAwZSwgMHhhODY4LCAweGQwZjQsCi0JMHgxOTA0LCAweDM1YWIsIDB4MDgwYywgMHg2OTNkLCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsCi0JMHgwMTA4LCAweGMxOGQsIDB4MDgwNCwgMHgzNWFiLCAweDAwZTYsIDB4MDBkNiwgMHgwMDk2LCAweDgzZmYsCi0JMHgwOTA0LCAweDRhZWIsIDB4OTAyZSwgMHgwODBjLCAweGIwNmIsIDB4MDEzMCwgMHg5MDI2LCAweDIwYTksCi0JMHgwODAwLCAweDIwNzEsIDB4MTAwMCwgMHgwMDMwLCAweDIwMjEsIDB4MDA3ZiwgMHgyMGE5LCAweDA3ODEsCi0JMHgyMDcxLCAweDEwN2YsIDB4MmUwNCwgMHg5MDA1LCAweDExYjgsIDB4MjEwMCwgMHg5NDA2LCAweDE5MDQsCi0JMHg0YWZjLCAweDI0MjgsIDB4OTRjZSwgMHgwMDdmLCAweDExMjAsIDB4OTJjZSwgMHhmZmZkLCAweDE1NTgsCi0JMHgwMDMwLCAweDk0Y2UsIDB4MDA4MCwgMHgxMTMwLCAweDkyY2UsIDB4ZmZmYywgMHgxNTIwLCAweDkzY2UsCi0JMHgwMGZmLCAweDE1MDgsIDB4YzVmZCwgMHgwNDgwLCAweDIwNTgsIDB4YmYxMCwgMHgyNzAwLCAweDkzMDYsCi0JMHgxMWU4LCAweGJlMTQsIDB4MjYwMCwgMHg5MjA2LCAweDExYzgsIDB4MjQwMCwgMHg5MTA2LCAweDExODAsCi0JMHhkODg0LCAweDA1OTgsIDB4ZDg5NCwgMHgxNTg4LCAweDA4MGMsIDB4NmEzMiwgMHgxNTcwLCAweDIwMDEsCi0JMHg0MDAwLCAweDA0NjAsIDB4MDgwYywgMHg2YTkyLCAweDE1NDAsIDB4MjAwMSwgMHg0MDAwLCAweDA0MzAsCi0JMHgyMDAxLCAweDQwMDcsIDB4MDQxOCwgMHgyMDAxLCAweDQwMDYsIDB4MDQwMCwgMHgyNDAwLCAweDkxMDYsCi0JMHgxMTU4LCAweGJlMTQsIDB4ODdmZiwgMHgxMTI4LCAweDg2ZmYsIDB4MDkxOCwgMHgwODBjLCAweGIwNmIsCi0JMHgxOTAwLCAweDIwMDEsIDB4NDAwOCwgMHgwMDkwLCAweDg0MjAsIDB4OGU3MCwgMHgxZjA0LCAweDRhYjIsCi0JMHg4NWZmLCAweDExMzAsIDB4MjAwMSwgMHg0MDA5LCAweDAwNDgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMzAsCi0JMHgwODBjLCAweDY2YjIsIDB4MWRkMCwgMHhiYjEyLCAweGJhMTYsIDB4OTAwNiwgMHg5MDA1LCAweDAwOWUsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsCi0JMHgzNWRkLCAweDA4MGMsIDB4NGI4OSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM1ZGQsCi0JMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4Nzg4NCwgMHg5MDA1LCAweDA5MDQsCi0JMHgzNWUwLCAweDkwOTYsIDB4MDBmZiwgMHgwMTIwLCAweDkwOTIsIDB4MDAwNCwgMHgxYTA0LCAweDM1ZTAsCi0JMHgyMDEwLCAweDI5MTgsIDB4MDgwYywgMHgzMWVjLCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsCi0JMHgzNWRkLCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDRiM2UsIDB4MDAwNSwgMHhhODMwLCAweDkwODYsCi0JMHgwMTAwLCAweDE5MDQsIDB4MzVhYiwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgzNWRkLCAweDc5ODQsCi0JMHgwODBjLCAweGIwNmIsIDB4MTEyMCwgMHg5MTgyLCAweDAwN2YsIDB4MGEwNCwgMHgzNWUwLCAweDkxODYsCi0JMHgwMGZmLCAweDA5MDQsIDB4MzVlMCwgMHg5MTgyLCAweDA4MDAsIDB4MWEwNCwgMHgzNWUwLCAweDIwMDEsCi0JMHg5NDAwLCAweDA4MGMsIDB4NTc4MiwgMHgxOTA0LCAweDM1ZGQsIDB4MDgwNCwgMHgzNWFiLCAweGE5OTgsCi0JMHgwODBjLCAweGIwNmIsIDB4MTExOCwgMHg5MTgyLCAweDAwN2YsIDB4MDI4MCwgMHg5MTg2LCAweDAwZmYsCi0JMHgwMTY4LCAweDkxODIsIDB4MDgwMCwgMHgxMjUwLCAweDIwMDEsIDB4OTQwMCwgMHgwODBjLCAweDU3ODIsCi0JMHgxMWE4LCAweDAwNjAsIDB4YTg5NywgMHg0MDA1LCAweGE5OWEsIDB4MDAxMCwgMHhhODk3LCAweDQwMDYsCi0JMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsIDB4MDAwNSwgMHhhODk3LCAweDQwMDAsCi0JMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MDAwNSwgMHgyMDA5LCAweDAwMGEsCi0JMHgwYzQ4LCAweDA4MGMsIDB4MTAwZSwgMHgwMTk4LCAweDkwMDYsIDB4YTgwMiwgMHg3MDE0LCAweDkwMDUsCi0JMHgxMTIwLCAweDI5MDAsIDB4NzAxNiwgMHg3MDFhLCAweDAwNDAsIDB4NzAxOCwgMHhhODAyLCAweDAwODYsCi0JMHgyMDQwLCAweDI5MDAsIDB4YTAwNiwgMHg3MDFhLCAweDAwOGUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHg3OTg0LCAweDA4MGMsIDB4NjcxZCwgMHgxMTMwLCAweDdlODgsIDB4OTY4NCwgMHgzZmZmLCAweDkwODIsCi0JMHg0MDAwLCAweDAyMDgsIDB4OTA1ZSwgMHg4YmZmLCAweDAwMDUsIDB4YTk5OCwgMHgwODBjLCAweDY3MWQsCi0JMHgxMTMwLCAweGFlOWMsIDB4OTY4NCwgMHgzZmZmLCAweDkwODIsIDB4NDAwMCwgMHgwMjA4LCAweDkwNWUsCi0JMHg4YmZmLCAweDAwMDUsIDB4YWU5OCwgMHgwMDA4LCAweDdlODQsIDB4MjYwOCwgMHgwODBjLCAweDY3MWQsCi0JMHgxMTA4LCAweDAwMDgsIDB4OTA1ZSwgMHg4YmZmLCAweDAwMDUsIDB4MDAxNiwgMHg3MTE0LCAweDgxZmYsCi0JMHgwMTI4LCAweDIxNDgsIDB4YTkwNCwgMHgwODBjLCAweDEwNDAsIDB4MGNjOCwgMHg3MTE2LCAweDcxMWEsCi0JMHgwMDFlLCAweDAwMDUsIDB4MjAzMSwgMHgwMDAxLCAweDAwMTAsIDB4MjAzMSwgMHgwMDAwLCAweDIwNjEsCi0JMHgxOGI4LCAweDJjNDQsIDB4YTY2YSwgMHhhMTdhLCAweGE3NzIsIDB4YTA3NiwgMHhhMjhlLCAweGEzOTIsCi0JMHhhNDk2LCAweGE1OWEsIDB4MDgwYywgMHgxMGY4LCAweDcwMDcsIDB4MDAwMiwgMHg3MDFmLCAweDM1YWIsCi0JMHgwMDA1LCAweDAwZjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgwMDAwLCAweDIwMDEsCi0JMHgxOGIwLCAweDIwMDQsIDB4OTAwNSwgMHgxMTkwLCAweDBlMDQsIDB4NGMwNiwgMHg3YTM2LCAweDc4MzMsCi0JMHgwMDEyLCAweDdhODIsIDB4N2I4NiwgMHg3YzhhLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksCi0JMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWFhLCAweDA4MDQsIDB4NGM2YywgMHgwMDE2LCAweDAwODYsCi0JMHgwMDk2LCAweDAwYzYsIDB4MDBlNiwgMHgyMDcxLCAweDE4OWUsIDB4NzA0NCwgMHg5MDA1LCAweDE1NDAsCi0JMHg3MTQ4LCAweDkxODIsIDB4MDAxMCwgMHgwMjg4LCAweDcwMzgsIDB4MjA2MCwgMHgwODBjLCAweDEwMGUsCi0JMHgwOTA0LCAweDRjNjQsIDB4YTg0YiwgMHgwMDAwLCAweDI5MDAsIDB4NzA0NiwgMHgyMDAxLCAweDAwMDIsCi0JMHg5MDgwLCAweDIwZjAsIDB4MjAwNSwgMHhhODQ2LCAweDAwOTgsIDB4NzAzOCwgMHg5MGUwLCAweDAwMDQsCi0JMHgyMDAxLCAweDE4YmEsIDB4OWM4MiwgMHgxOGZhLCAweDAyMTAsIDB4MjA2MSwgMHgxOGJhLCAweDJjMDAsCi0JMHg3MDNhLCAweDcxNDgsIDB4ODFmZiwgMHgxMTA4LCAweDcwM2UsIDB4ODEwOCwgMHg3MTRhLCAweDA0NjAsCi0JMHg3MTQ4LCAweDgxMDgsIDB4NzE0YSwgMHg3MDQ0LCAweDIwNDAsIDB4YTE0NCwgMHgyMTA1LCAweDAwMTYsCi0JMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGM1LCAweDIwNjAsIDB4MDAxZSwgMHg4MTA4LCAweDIxMDUsCi0JMHg5MDA1LCAweGExNDYsIDB4MTUyMCwgMHgwODBjLCAweDEwMGUsIDB4MTEzMCwgMHg4MTA5LCAweGE5NDYsCi0JMHg3MTQ4LCAweDgxMDksIDB4NzE0YSwgMHgwMGQ4LCAweDkwMDYsIDB4YTgwNiwgMHhhODRhLCAweGEwNDYsCi0JMHgyODAwLCAweGE4MDIsIDB4MjkwMCwgMHhhMDA2LCAweDcwNDYsIDB4MjAwMSwgMHgwMDAyLCAweDkwODAsCi0JMHgyMGYwLCAweDIwMDUsIDB4YTg0NiwgMHgwMDU4LCAweDIyNjIsIDB4NjMwNiwgMHg2NDBhLCAweDAwZWUsCi0JMHgwMGNlLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDFlLCAweDAxMmUsIDB4MDBmZSwgMHgwMDA1LCAweDJjMDAsCi0JMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHg0YzhlLCAweDRjOGUsIDB4NGM5MCwgMHg0YzhlLCAweDRjOGUsCi0JMHg0YzhlLCAweDRjOTQsIDB4NGM4ZSwgMHg0YzhlLCAweDRjOGUsIDB4NGM5OCwgMHg0YzhlLCAweDRjOGUsCi0JMHg0YzhlLCAweDRjOWMsIDB4NGM4ZSwgMHg0YzhlLCAweDRjOGUsIDB4NGNhMCwgMHg0YzhlLCAweDRjOGUsCi0JMHg0YzhlLCAweDRjYTQsIDB4NGM4ZSwgMHg0YzhlLCAweDRjOGUsIDB4NGNhOSwgMHgwODBjLCAweDBkYzUsCi0JMHhhMjc2LCAweGEzN2EsIDB4YTQ3ZSwgMHgwODk4LCAweGEyODYsIDB4YTM4YSwgMHhhNDhlLCAweDA4NzgsCi0JMHhhMjk2LCAweGEzOWEsIDB4YTQ5ZSwgMHgwODU4LCAweGEyYTYsIDB4YTNhYSwgMHhhNGFlLCAweDA4MzgsCi0JMHhhMmI2LCAweGEzYmEsIDB4YTRiZSwgMHgwODE4LCAweGEyYzYsIDB4YTNjYSwgMHhhNGNlLCAweDA4MDQsCi0JMHg0YzY3LCAweGEyZDYsIDB4YTNkYSwgMHhhNGRlLCAweDA4MDQsIDB4NGM2NywgMHgwMGU2LCAweDIwNzEsCi0JMHgxODllLCAweDcwNDgsIDB4OTAwNSwgMHgwOTA0LCAweDRkNDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwZTA0LCAweDRkM2YsIDB4MDBmNiwgMHgyMDc5LCAweDAwMDAsIDB4MDBjNiwgMHgwMDk2LCAweDAwODYsCi0JMHgwMDc2LCAweDkwMDYsIDB4MjAzOCwgMHg3MDQwLCAweDIwNDgsIDB4OTAwNSwgMHgwNTAwLCAweGE5NDgsCi0JMHgyMTA1LCAweDAwMTYsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsIDB4MGRjNSwgMHgyMDYwLCAweDAwMWUsCi0JMHg4MTA4LCAweDIxMDUsIDB4OTAwNSwgMHhhOTRhLCAweDE5MDQsIDB4NGQ0MiwgMHhhODA0LCAweDkwMDUsCi0JMHgwOTBjLCAweDBkYzUsIDB4NzA0MiwgMHgyOTM4LCAweDIwNDAsIDB4YTAwMywgMHgwMDAwLCAweDIwMDEsCi0JMHgwMDAyLCAweDkwODAsIDB4MjBmMCwgMHgyMDA1LCAweGEwNGEsIDB4MDgwNCwgMHg0ZDQyLCAweDcwM2MsCi0JMHgyMDYwLCAweDJjMTQsIDB4NjMwNCwgMHg2NDA4LCAweDY1MGMsIDB4MjIwMCwgMHg3ODM2LCAweDc4MzMsCi0JMHgwMDEyLCAweDc4ODIsIDB4MjMwMCwgMHg3ODg2LCAweDI0MDAsIDB4Nzg4YSwgMHgyMDkxLCAweDQwODAsCi0JMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHg4N2ZmLCAweDAxMTgsCi0JMHgyNzQ4LCAweDA4MGMsIDB4MTA0MCwgMHg3MDQ4LCAweDgwMDEsIDB4NzA0YSwgMHg5MDA1LCAweDExNzAsCi0JMHg3MDQwLCAweDIwNDgsIDB4OTAwNSwgMHgwMTI4LCAweDA4MGMsIDB4MTA0MCwgMHg5MDA2LCAweDcwNDIsCi0JMHg3MDQ2LCAweDcwM2IsIDB4MThiYSwgMHg3MDNmLCAweDE4YmEsIDB4MDQyMCwgMHg3MDQwLCAweDkwMDUsCi0JMHgxNTA4LCAweDcyMzgsIDB4MmMwMCwgMHg5MjA2LCAweDAxNDgsIDB4OWM4MCwgMHgwMDA0LCAweDkwZmEsCi0JMHgxOGZhLCAweDAyMTAsIDB4MjAwMSwgMHgxOGJhLCAweDcwM2UsIDB4MDBhMCwgMHg5MDA2LCAweDcwM2UsCi0JMHg3MDNhLCAweDcwNDQsIDB4OTAwNSwgMHgwOTBjLCAweDBkYzUsIDB4MjA0OCwgMHhhODAwLCAweDkwMDUsCi0JMHgxZGUwLCAweDI5MDAsIDB4NzA0MiwgMHgyMDAxLCAweDAwMDIsIDB4OTA4MCwgMHgyMGYwLCAweDIwMDUsCi0JMHhhODRhLCAweDAwMDAsIDB4MDA3ZSwgMHgwMDhlLCAweDAwOWUsIDB4MDBjZSwgMHgwMGZlLCAweDAxMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MmMwMCwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHg0ZDYxLCAweDRkNjEsCi0JMHg0ZDYzLCAweDRkNjEsIDB4NGQ2MSwgMHg0ZDYxLCAweDRkNjgsIDB4NGQ2MSwgMHg0ZDYxLCAweDRkNjEsCi0JMHg0ZDZkLCAweDRkNjEsIDB4NGQ2MSwgMHg0ZDYxLCAweDRkNzIsIDB4NGQ2MSwgMHg0ZDYxLCAweDRkNjEsCi0JMHg0ZDc3LCAweDRkNjEsIDB4NGQ2MSwgMHg0ZDYxLCAweDRkN2MsIDB4NGQ2MSwgMHg0ZDYxLCAweDRkNjEsCi0JMHg0ZDgxLCAweDA4MGMsIDB4MGRjNSwgMHhhYTc0LCAweGFiNzgsIDB4YWM3YywgMHgwODA0LCAweDRjZWQsCi0JMHhhYTg0LCAweGFiODgsIDB4YWM4YywgMHgwODA0LCAweDRjZWQsIDB4YWE5NCwgMHhhYjk4LCAweGFjOWMsCi0JMHgwODA0LCAweDRjZWQsIDB4YWFhNCwgMHhhYmE4LCAweGFjYWMsIDB4MDgwNCwgMHg0Y2VkLCAweGFhYjQsCi0JMHhhYmI4LCAweGFjYmMsIDB4MDgwNCwgMHg0Y2VkLCAweGFhYzQsIDB4YWJjOCwgMHhhY2NjLCAweDA4MDQsCi0JMHg0Y2VkLCAweGFhZDQsIDB4YWJkOCwgMHhhY2RjLCAweDA4MDQsIDB4NGNlZCwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMDM2LCAweDAwYjYsIDB4MDBjNiwgMHgyMDA5LCAweDAwN2UsIDB4MDgwYywgMHg2NzFkLCAweDIwMTksCi0JMHgwMDAxLCAweGI4NWMsIDB4ZDBhYywgMHgwMTEwLCAweDIwMTksIDB4MDAwMCwgMHgyMDExLCAweDgwMWIsCi0JMHgwODBjLCAweDRiZTksIDB4MDBjZSwgMHgwMGJlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMDI2LCAweDA4MGMsIDB4NTdkMywgMHhkMGM0LCAweDAxMjAsIDB4MjAxMSwgMHg4MDE0LCAweDA4MGMsCi0JMHg0YmU5LCAweDAwMmUsIDB4MDAwNSwgMHg4MWZmLCAweDE5MDQsIDB4MzVkZCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDYwMzAsIDB4YzA4ZCwgMHhjMDg1LCAweGMwYWMsIDB4NjAzMiwgMHgwODBjLCAweDc1NjksCi0JMHgxMTU4LCAweDA4MGMsIDB4Nzg0ZSwgMHgwODBjLCAweDYxMjcsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg3NWFkLCAweDA4MGMsIDB4NzQ5NSwgMHgwMDEwLCAweDA4MGMsIDB4NWZlNiwgMHgwMTJlLCAweDA4MDQsCi0JMHgzNWFiLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNWRkLCAweDA4MGMsCi0JMHg1N2U3LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsIDB4MzVkZCwgMHgwODBjLCAweDZhOGEsCi0JMHgwMTIwLCAweDIwMDksIDB4MDAwOCwgMHgwODA0LCAweDM1ZGQsIDB4Nzk4NCwgMHgwODBjLCAweDY2YjIsCi0JMHgxOTA0LCAweDM1ZTAsIDB4MDgwYywgMHg0YmJjLCAweDA5MDQsIDB4MzVlMCwgMHgyYjAwLCAweDcwMjYsCi0JMHgwODBjLCAweDZhOTIsIDB4Nzg4OCwgMHgxMTcwLCAweDkwODQsIDB4MDAwNSwgMHgxMTU4LCAweDkwMGUsCi0JMHgwODBjLCAweDY5M2QsIDB4MTEwOCwgMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsCi0JMHgwODA0LCAweDM1YWIsIDB4MDgwYywgMHg0Yjg5LCAweDA5MDQsIDB4MzVkZCwgMHg5MDA2LCAweGE4NjYsCi0JMHhhODMyLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDA4MGMsIDB4ZDA4MCwgMHgwOTA0LCAweDM1ZGQsCi0JMHg3ODg4LCAweGQwOTQsIDB4MDExOCwgMHhiOGNjLCAweGMwOGQsIDB4YjhjZSwgMHg3MDA3LCAweDAwMDMsCi0JMHg3MDFmLCAweDRlNWMsIDB4MDAwNSwgMHgyMDYxLCAweDE4MDAsIDB4MDgwYywgMHg1N2U3LCAweDIwMDksCi0JMHgwMDA3LCAweDE1NjAsIDB4MDgwYywgMHg2YThhLCAweDAxMTgsIDB4MjAwOSwgMHgwMDA4LCAweDA0MzAsCi0JMHhhOTk4LCAweDA4MGMsIDB4NjZiMiwgMHgxNTMwLCAweDA4MGMsIDB4NGJiYSwgMHgwNTE4LCAweDA4MGMsCi0JMHg2YTkyLCAweGE4OWMsIDB4MTE2OCwgMHg5MDg0LCAweDAwMDUsIDB4MTE1MCwgMHg5MDBlLCAweDA4MGMsCi0JMHg2OTNkLCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDAwZDAsCi0JMHhhODY4LCAweGMwZmMsIDB4YTg2YSwgMHgwODBjLCAweGQwODAsIDB4MTFlMCwgMHhhODljLCAweGQwOTQsCi0JMHgwMTE4LCAweGI4Y2MsIDB4YzA4ZCwgMHhiOGNlLCAweDIwMDksIDB4MDAwMywgMHhhODk3LCAweDQwMDUsCi0JMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsCi0JMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLCAweGE5OWEsIDB4OTAwNiwgMHg5MThkLCAweDAwMDEsCi0JMHgyMDA4LCAweDAwMDUsIDB4OTAwNiwgMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLCAweDcwMjQsCi0JMHgyMDU4LCAweDExMTAsIDB4MDgwNCwgMHg1NzI3LCAweDkwMGUsIDB4MDgwYywgMHg2OTNkLCAweDExMDgsCi0JMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDgwNCwgMHgzNWFiLCAweDA4MGMsCi0JMHg1N2U3LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsIDB4MzVkZCwgMHg3Zjg0LCAweDdhOGMsCi0JMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgwODBjLCAweDRiODksIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsCi0JMHgwODA0LCAweDM1ZGQsIDB4OTAwZSwgMHgyMTMwLCAweDcxMjYsIDB4NzEzMiwgMHhhODYwLCAweDIwZTgsCi0JMHg3MDM2LCAweGE4NWMsIDB4OTA4MCwgMHgwMDA1LCAweDcwMmEsIDB4MjBhMCwgMHgwODBjLCAweDY3MWQsCi0JMHgxOTA0LCAweDRmMDUsIDB4MDgwYywgMHg2YTkyLCAweDAxMzgsIDB4MDgwYywgMHg2YTlhLCAweDAxMjAsCi0JMHgwODBjLCAweDZhMzIsIDB4MTkwNCwgMHg0ZjA1LCAweGQ3OTQsIDB4MTExMCwgMHhkNzg0LCAweDAxYTgsCi0JMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMDYsIDB4MjA5OCwgMHgzNDAwLCAweGQ3OTQsCi0JMHgwMTk4LCAweDIwYTksIDB4MDAwOCwgMHg0MDAzLCAweDIwOTgsIDB4MjBhMCwgMHgzZDAwLCAweDIwZTAsCi0JMHgyMGE5LCAweDAwMDIsIDB4MDgwYywgMHg0OTg4LCAweDAwODAsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsCi0JMHg5MDgwLCAweDAwMGEsIDB4MjA5OCwgMHgzNDAwLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLCAweDIwOTgsCi0JMHgyMGEwLCAweDNkMDAsIDB4MjBlMCwgMHgwODBjLCAweDQ5ODgsIDB4OTE4NiwgMHgwMDdlLCAweDAxNzAsCi0JMHg5MTg2LCAweDAwODAsIDB4MDE1OCwgMHgwODBjLCAweDZhOTIsIDB4OTBjMiwgMHgwMDA2LCAweDEyMTAsCi0JMHhjMWZkLCAweDAwMjAsIDB4MDgwYywgMHg2OTNkLCAweDExMDgsIDB4YzFmZCwgMHg0MTA0LCAweGMxZmMsCi0JMHhkNzk0LCAweDA1MjgsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsIDB4MjA2MCwgMHg5YzgwLCAweDAwMDAsCi0JMHgyMDk4LCAweDIwYTksIDB4MDAwMiwgMHg0MDAzLCAweDljODAsIDB4MDAwMywgMHgyMDk4LCAweDIwYTksCi0JMHgwMDAxLCAweDQwMDUsIDB4OWM4MCwgMHgwMDA0LCAweDIwOTgsIDB4MzQwMCwgMHgyMGE5LCAweDAwMDIsCi0JMHg0MDAzLCAweDIwOTgsIDB4MjBhMCwgMHgzZDAwLCAweDIwZTAsIDB4MDgwYywgMHg0OTdiLCAweDljODAsCi0JMHgwMDI2LCAweDIwOTgsIDB4YjhjNCwgMHgyMGUwLCAweDIwYTksIDB4MDAwMiwgMHg0MDAzLCAweGQ3OTQsCi0JMHgwMTEwLCAweDk2YjAsIDB4MDAwYiwgMHg5NmIwLCAweDAwMDUsIDB4ODEwOCwgMHgwODBjLCAweGIwNmIsCi0JMHgwMTE4LCAweDkxODYsIDB4MDgwMCwgMHgwMDQwLCAweGQ3OGMsIDB4MDEyMCwgMHg5MTg2LCAweDA4MDAsCi0JMHgwMTcwLCAweDAwMTgsIDB4OTE4NiwgMHgwMDdlLCAweDAxNTAsIDB4ZDc5NCwgMHgwMTE4LCAweDk2ODYsCi0JMHgwMDIwLCAweDAwMTAsIDB4OTY4NiwgMHgwMDI4LCAweDAxNTAsIDB4MDgwNCwgMHg0ZThlLCAweDg2ZmYsCi0JMHgxMTIwLCAweDcxMjQsIDB4ODEwYiwgMHgwODA0LCAweDM1YWIsIDB4NzAzMywgMHgwMDAxLCAweDcxMjIsCi0JMHg3MDI0LCAweDk2MDAsIDB4NzAyNiwgMHg3NzJlLCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LCAweGEwNmIsCi0JMHgwMDAwLCAweGE2N2EsIDB4NzAzNCwgMHhhMDcyLCAweDcwMjgsIDB4YTA3NiwgMHhhMjhlLCAweGEzOTIsCi0JMHhhNDk2LCAweGE1OWEsIDB4MDgwYywgMHgxMGY4LCAweDcwMDcsIDB4MDAwMiwgMHg3MDFmLCAweDRmNDEsCi0JMHgwMDA1LCAweDcwMzAsIDB4OTAwNSwgMHgxMTgwLCAweDcxMjAsIDB4NzAyOCwgMHgyMGEwLCAweDc3MmMsCi0JMHg5MDM2LCAweDcwMzQsIDB4MjBlOCwgMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHhhMjhjLCAweGEzOTAsCi0JMHhhNDk0LCAweGE1OTgsIDB4MDgwNCwgMHg0ZThlLCAweDcxMjQsIDB4ODEwYiwgMHgwODA0LCAweDM1YWIsCi0JMHgyMDI5LCAweDAwN2UsIDB4Nzk4NCwgMHg3YTg4LCAweDdiOGMsIDB4N2M5OCwgMHg5MTg0LCAweGZmMDAsCi0JMHg4MDA3LCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM1ZTAsIDB4OTUwMiwgMHgwYTA0LCAweDM1ZTAsCi0JMHg5MTg0LCAweDAwZmYsIDB4OTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MzVlMCwgMHg5NTAyLCAweDBhMDQsCi0JMHgzNWUwLCAweDkyODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM1ZTAsCi0JMHg5NTAyLCAweDBhMDQsIDB4MzVlMCwgMHg5Mjg0LCAweDAwZmYsIDB4OTBlMiwgMHgwMDIwLCAweDBhMDQsCi0JMHgzNWUwLCAweDk1MDIsIDB4MGEwNCwgMHgzNWUwLCAweDkzODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwZTIsCi0JMHgwMDIwLCAweDBhMDQsIDB4MzVlMCwgMHg5NTAyLCAweDBhMDQsIDB4MzVlMCwgMHg5Mzg0LCAweDAwZmYsCi0JMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNWUwLCAweDk1MDIsIDB4MGEwNCwgMHgzNWUwLCAweDk0ODQsCi0JMHhmZjAwLCAweDgwMDcsIDB4OTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MzVlMCwgMHg5NTAyLCAweDBhMDQsCi0JMHgzNWUwLCAweDk0ODQsIDB4MDBmZiwgMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNWUwLCAweDk1MDIsCi0JMHgwYTA0LCAweDM1ZTAsIDB4MjA2MSwgMHgxOThhLCAweDYxMDIsIDB4NjIwNiwgMHg2MzBhLCAweDY0MGUsCi0JMHgwODA0LCAweDM1YWIsIDB4MDgwYywgMHg0Yjg5LCAweDA5MDQsIDB4MzVkZCwgMHgyMDA5LCAweDAwMTYsCi0JMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweGFmNjAsCi0JMHgwODBjLCAweDRiZDIsIDB4NzAxZiwgMHg0ZmM1LCAweDAwMDUsIDB4MjAwMSwgMHgwMTM4LCAweDIwMDMsCi0JMHgwMDAwLCAweDAwZTYsIDB4MjA3MSwgMHgwMzAwLCAweDcwMWMsIDB4ZDBhNCwgMHgxZGU4LCAweDAwZWUsCi0JMHgyMGE5LCAweDAwMTYsIDB4ODk2ZSwgMHg4ZDZlLCAweDhkNmYsIDB4OWQ4NCwgMHhmZmMwLCAweDkwODAsCi0JMHgwMDE5LCAweDIwOTgsIDB4OWQ4NCwgMHgwMDNmLCAweDIwZTAsIDB4MjA2OSwgMHgxODc3LCAweDIwZTksCi0JMHgwMDAxLCAweDJkYTAsIDB4NDAwMywgMHg2ODAwLCAweDkwMDUsIDB4MDkwNCwgMHg1MDQ2LCAweDY4MDQsCi0JMHgyMDA4LCAweDkxOGMsIDB4ZmZmOCwgMHgxOTA0LCAweDUwNDYsIDB4NjgwYywgMHg5MDA1LCAweDA5MDQsCi0JMHg1MDQ2LCAweDkwODIsIDB4ZmYwMSwgMHgxYTA0LCAweDUwNDYsIDB4NjgxMCwgMHg5MDgyLCAweDAwNWMsCi0JMHgwYTA0LCAweDUwNDYsIDB4NjgyNCwgMHgyMDA4LCAweDkwODIsIDB4MDAwOCwgMHgwYTA0LCAweDUwNDYsCi0JMHg5MTgyLCAweDA0MDAsIDB4MWEwNCwgMHg1MDQ2LCAweDAwNTYsIDB4MjAyOSwgMHgwMDAwLCAweDA4MGMsCi0JMHg4ZDQ5LCAweDAwNWUsIDB4Njk0NCwgMHg2ODIwLCAweDkxMDIsIDB4MDZjMCwgMHg2ODIwLCAweDkwODIsCi0JMHgwMDE5LCAweDE2YTAsIDB4NjgyOCwgMHg2OTQ0LCAweDgxMGMsIDB4OTEwMiwgMHgwNjc4LCAweDY4NDAsCi0JMHg5MDgyLCAweDAwMGYsIDB4MTY1OCwgMHgwODBjLCAweDEwMjcsIDB4MjkwMCwgMHgwOTA0LCAweDUwNjIsCi0JMHg2ODRlLCAweDAwZTYsIDB4MjA3MSwgMHgxOTMyLCAweDAwYjYsIDB4MjA1OSwgMHgwMDAwLCAweDA4MGMsCi0JMHg4YzA1LCAweDAwYmUsIDB4MDBlZSwgMHgwNTY4LCAweDA4MGMsIDB4ODk1MCwgMHgwODBjLCAweDg5OWYsCi0JMHgxMWUwLCAweDY4NTcsIDB4MDAwMCwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg2MTA0LCAweDkxOGQsCi0JMHgyMDAwLCAweDYxMDYsIDB4NmIxMCwgMHgyMDYxLCAweDFhNjYsIDB4NjMwYSwgMHgwMGNlLCAweDA4MGMsCi0JMHgyOWFjLCAweDIwMDEsIDB4MDEzOCwgMHgyMTAyLCAweDA4MDQsIDB4MzVhYiwgMHgwODBjLCAweDI5YWMsCi0JMHgyMDAxLCAweDAxMzgsIDB4MjEwMiwgMHgwODA0LCAweDM1ZTAsIDB4MDgwYywgMHg4OTk4LCAweDAwZTYsCi0JMHgyMDcxLCAweDE5MzIsIDB4MDgwYywgMHg4ZGM5LCAweDA4MGMsIDB4OGRkOCwgMHgwODBjLCAweDhiZTgsCi0JMHgwMGVlLCAweDIwMDEsIDB4MTg4YSwgMHgyMDRjLCAweDA4MGMsIDB4MTA0MCwgMHgyMDAxLCAweDE4OGEsCi0JMHgyMDAzLCAweDAwMDAsIDB4MDgwYywgMHgyOWFjLCAweDIwMDEsIDB4MDEzOCwgMHgyMTAyLCAweDA4MDQsCi0JMHgzNWRkLCAweDIwMDEsIDB4MTkyNiwgMHgyMDBjLCAweDkxOGUsIDB4MDAwMCwgMHgwOTA0LCAweDUwYzcsCi0JMHgwODBjLCAweDhiZTMsIDB4MDkwNCwgMHg1MGM3LCAweDIwMDEsIDB4MDEwMSwgMHgyMDBjLCAweDkxOGMsCi0JMHhkZmZmLCAweDIxMDIsIDB4MjAwMSwgMHgwMTM4LCAweDIwMDMsIDB4MDAwMCwgMHgwMGU2LCAweDIwNzEsCi0JMHgwMzAwLCAweDcwMWMsIDB4ZDBhNCwgMHgxZGU4LCAweDAwZWUsIDB4MDgwYywgMHg4YmU4LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgwMDM1LCAweDA4MGMsIDB4MTYxMSwgMHgwMTJlLCAweDAwYzYsCi0JMHgyMDYxLCAweDE5M2UsIDB4NjAwNCwgMHg2MTAwLCAweDkxMDYsIDB4MWRlMCwgMHgwMGNlLCAweDA4MGMsCi0JMHgyOWFjLCAweDIwMDEsIDB4MDEzOCwgMHgyMTAyLCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweDE5MjUsCi0JMHgwODBjLCAweDhiMjIsIDB4MDEyMCwgMHgyZjAwLCAweDA4MGMsIDB4OGJhZSwgMHgwY2M4LCAweDAwZmUsCi0JMHgwMGVlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MTg4YSwgMHgyMDBjLCAweDgxZmYsCi0JMHgwMTM4LCAweDIxNDgsIDB4MDgwYywgMHgxMDQwLCAweDIwMDEsIDB4MTg4YSwgMHgyMDAzLCAweDAwMDAsCi0JMHgyMDAxLCAweDE4M2QsIDB4MjAwMywgMHgwMDIwLCAweDA4MGMsIDB4ODk5OCwgMHgwMGU2LCAweDIwNzEsCi0JMHgxOTMyLCAweDA4MGMsIDB4OGRjOSwgMHgwODBjLCAweDhkZDgsIDB4MDBlZSwgMHgwMTJlLCAweDA4MDQsCi0JMHgzNWFiLCAweDAwMDYsIDB4MDgwYywgMHg1N2QzLCAweGQwY2MsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgwODBjLCAweDU3ZDcsIDB4ZDBiYywgMHgwMDBlLCAweDAwMDUsIDB4NjE3NCwgMHg3YTg0LCAweDYzMDAsCi0JMHg4MmZmLCAweDExMTgsIDB4Nzk4NiwgMHgwODA0LCAweDM1YWIsIDB4ODNmZiwgMHgxOTA0LCAweDM1ZTAsCi0JMHgyMDAxLCAweGZmZjAsIDB4OTIwMCwgMHgxYTA0LCAweDM1ZTAsIDB4MjAxOSwgMHhmZmZmLCAweDYwNzgsCi0JMHg5MzAyLCAweDkyMDAsIDB4MGEwNCwgMHgzNWUwLCAweDc5ODYsIDB4NjI3NiwgMHgwODA0LCAweDM1YWIsCi0JMHgwODBjLCAweDU3ZTcsIDB4MTkwNCwgMHgzNWRkLCAweDdjODgsIDB4N2Q4NCwgMHg3ZTk4LCAweDdmOGMsCi0JMHgwODBjLCAweDRiODksIDB4MDkwNCwgMHgzNWRkLCAweDkwMGUsIDB4OTAxZSwgMHg3MzI2LCAweDczMzIsCi0JMHhhODYwLCAweDIwZTgsIDB4NzAzNiwgMHhhODVjLCAweDkwODAsIDB4MDAwMywgMHg3MDJhLCAweDIwYTAsCi0JMHg5MWQ4LCAweDEwMDAsIDB4MmI1YywgMHg4YmZmLCAweDAxNzgsIDB4MDgwYywgMHg2YTkyLCAweDAxMTgsCi0JMHgwODBjLCAweDZhOWEsIDB4MTE0OCwgMHgyMGE5LCAweDAwMDEsIDB4YjgxNCwgMHg0MDA0LCAweGI4MTAsCi0JMHg0MDA0LCAweDQxMDQsIDB4OTM5OCwgMHgwMDAzLCAweDgxMDgsIDB4OTE4MiwgMHgwODAwLCAweDAxMjAsCi0JMHg5Mzg2LCAweDAwM2MsIDB4MDE3MCwgMHgwYzIwLCAweDgzZmYsIDB4MTE0OCwgMHg3MjI0LCAweDkwMGUsCi0JMHgyMDAxLCAweDAwMDMsIDB4MDgwYywgMHg5MWIxLCAweDIyMDgsIDB4MDgwNCwgMHgzNWFiLCAweDcwMzMsCi0JMHgwMDAxLCAweDcxMjIsIDB4NzAyNCwgMHg5MzAwLCAweDcwMjYsIDB4MjA2MSwgMHgxOGI4LCAweDJjNDQsCi0JMHhhMDZiLCAweDAwMDAsIDB4YTM3YSwgMHg3MDI4LCAweGEwNzYsIDB4NzAzNCwgMHhhMDcyLCAweGE0OGUsCi0JMHhhNTkyLCAweGE2OTYsIDB4YTc5YSwgMHgwODBjLCAweDEwZjgsIDB4NzAwNywgMHgwMDAyLCAweDcwMWYsCi0JMHg1MTRhLCAweDAwMDUsIDB4NzAzMCwgMHg5MDA1LCAweDExNzgsIDB4NzEyMCwgMHg3MDI4LCAweDIwYTAsCi0JMHg5MDFlLCAweDcwMzQsIDB4MjBlOCwgMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHhhNDhjLCAweGE1OTAsCi0JMHhhNjk0LCAweGE3OTgsIDB4MDgwNCwgMHg1MTA4LCAweDcyMjQsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDMsCi0JMHgwODBjLCAweDkxYjEsIDB4MjIwOCwgMHgwODA0LCAweDM1YWIsIDB4MDBmNiwgMHgwMGU2LCAweDA4MGMsCi0JMHg1N2U3LCAweDIwMDksIDB4MDAwNywgMHgxOTA0LCAweDUxZGQsIDB4MjA3MSwgMHgxODllLCAweDc0NWMsCi0JMHg4NGZmLCAweDIwMDksIDB4MDAwZSwgMHgxOTA0LCAweDUxZGQsIDB4YWM5YywgMHhhZDk4LCAweGFlYTQsCi0JMHhhZmEwLCAweDAwOTYsIDB4MDgwYywgMHgxMDI3LCAweDIwMDksIDB4MDAwMiwgMHgwOTA0LCAweDUxZGQsCi0JMHgyOTAwLCAweDcwNWUsIDB4OTAwZSwgMHg5MDFlLCAweDczNTYsIDB4NzM2MiwgMHhhODYwLCAweDcwNjYsCi0JMHhhODVjLCAweDkwODAsIDB4MDAwMywgMHg3MDVhLCAweDIwYTAsIDB4OTFkOCwgMHgxMDAwLCAweDJiNWMsCi0JMHg4YmZmLCAweDAxNzgsIDB4MDgwYywgMHg2YTkyLCAweDAxMTgsIDB4MDgwYywgMHg2YTlhLCAweDExNDgsCi0JMHhiODE0LCAweDIwYTksIDB4MDAwMSwgMHg0MDA0LCAweGI4MTAsIDB4NDAwNCwgMHg0MTA0LCAweDkzOTgsCi0JMHgwMDAzLCAweDgxMDgsIDB4OTE4MiwgMHgwODAwLCAweDAxMjAsIDB4OTM4NiwgMHgwMDNjLCAweDAxZTgsCi0JMHgwYzIwLCAweDgzZmYsIDB4MTFjMCwgMHg3MjU0LCAweDkwMGUsIDB4MjAwMSwgMHgwMDAzLCAweDA4MGMsCi0JMHg5MWIxLCAweDIyMDgsIDB4MDA5ZSwgMHhhODk3LCAweDQwMDAsIDB4YTk5YSwgMHg3MTVjLCAweDgxZmYsCi0JMHgwOTBjLCAweDBkYzUsIDB4MjE0OCwgMHgwODBjLCAweDEwNDAsIDB4OTAwNiwgMHg3MDVlLCAweDkxOGQsCi0JMHgwMDAxLCAweDIwMDgsIDB4MDQxOCwgMHg3MDYzLCAweDAwMDEsIDB4NzE1MiwgMHg3MDU0LCAweDkzMDAsCi0JMHg3MDU2LCAweDIwNjEsIDB4MThiOSwgMHgyYzQ0LCAweGEzN2EsIDB4NzA1OCwgMHhhMDc2LCAweDcwNjQsCi0JMHhhMDcyLCAweGE0OGUsIDB4YTU5MiwgMHhhNjk2LCAweGE3OWEsIDB4YTA5ZiwgMHg1MWU5LCAweDAwMGUsCi0JMHhhMGEyLCAweDA4MGMsIDB4MTBmOCwgMHg5MDA2LCAweDAwNDgsIDB4MDA5ZSwgMHhhODk3LCAweDQwMDUsCi0JMHhhOTlhLCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZjYsIDB4YTBhMCwgMHg5MDRkLCAweDA5MGMsIDB4MGRjNSwgMHgwMGU2LCAweDIwNzEsCi0JMHgxODllLCAweGEwNmMsIDB4OTA4ZSwgMHgwMTAwLCAweDAxMzgsIDB4YTg3YiwgMHgwMDMwLCAweGE4ODMsCi0JMHgwMDAwLCAweGE4OTcsIDB4NDAwMiwgMHgwMGQ4LCAweDcwNjAsIDB4OTAwNSwgMHgxMTU4LCAweDcxNTAsCi0JMHg3MDU4LCAweDIwYTAsIDB4OTAxZSwgMHg3MDY0LCAweDIwZTgsIDB4YTQ4YywgMHhhNTkwLCAweGE2OTQsCi0JMHhhNzk4LCAweDA0MjgsIDB4YTg3YiwgMHgwMDAwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDAsCi0JMHg3MjU0LCAweDkwMGUsIDB4MjAwMSwgMHgwMDAzLCAweDA4MGMsIDB4OTFiMSwgMHhhYTlhLCAweDcxNWMsCi0JMHg4MWZmLCAweDA5MGMsIDB4MGRjNSwgMHgyMTQ4LCAweDA4MGMsIDB4MTA0MCwgMHg3MDVmLCAweDAwMDAsCi0JMHhhMGEwLCAweDIwNDgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2ZGQxLCAweDAxMmUsCi0JMHhhMDlmLCAweDAwMDAsIDB4YTBhMywgMHgwMDAwLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDkxZDgsCi0JMHgxMDAwLCAweDJiNWMsIDB4OGJmZiwgMHgwMTc4LCAweDA4MGMsIDB4NmE5MiwgMHgwMTE4LCAweDA4MGMsCi0JMHg2YTlhLCAweDExNDgsIDB4YjgxNCwgMHgyMGE5LCAweDAwMDEsIDB4NDAwNCwgMHhiODEwLCAweDQwMDQsCisJMHgwMDAyLCAweDcwMWYsIDB4MzViNSwgMHgwMDA1LCAweDAwZjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgyMDc5LCAweDAwMDAsIDB4MjAwMSwgMHgxOGIwLCAweDIwMDQsIDB4OTAwNSwgMHgxMTkwLCAweDBlMDQsCisJMHg0YzYxLCAweDdhMzYsIDB4NzgzMywgMHgwMDEyLCAweDdhODIsIDB4N2I4NiwgMHg3YzhhLCAweDIwOTEsCisJMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWFhLCAweDA4MDQsCisJMHg0Y2M3LCAweDAwMTYsIDB4MDA4NiwgMHgwMDk2LCAweDAwYzYsIDB4MDBlNiwgMHgyMDcxLCAweDE4OWUsCisJMHg3MDQ0LCAweDkwMDUsIDB4MTU0MCwgMHg3MTQ4LCAweDkxODIsIDB4MDAxMCwgMHgwMjg4LCAweDcwMzgsCisJMHgyMDYwLCAweDA4MGMsIDB4MTAwZSwgMHgwOTA0LCAweDRjYmYsIDB4YTg0YiwgMHgwMDAwLCAweDI5MDAsCisJMHg3MDQ2LCAweDIwMDEsIDB4MDAwMiwgMHg5MDgwLCAweDIwYzcsIDB4MjAwNSwgMHhhODQ2LCAweDAwOTgsCisJMHg3MDM4LCAweDkwZTAsIDB4MDAwNCwgMHgyMDAxLCAweDE4YmEsIDB4OWM4MiwgMHgxOGZhLCAweDAyMTAsCisJMHgyMDYxLCAweDE4YmEsIDB4MmMwMCwgMHg3MDNhLCAweDcxNDgsIDB4ODFmZiwgMHgxMTA4LCAweDcwM2UsCisJMHg4MTA4LCAweDcxNGEsIDB4MDQ2MCwgMHg3MTQ4LCAweDgxMDgsIDB4NzE0YSwgMHg3MDQ0LCAweDIwNDAsCisJMHhhMTQ0LCAweDIxMDUsIDB4MDAxNiwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGM1LCAweDIwNjAsCisJMHgwMDFlLCAweDgxMDgsIDB4MjEwNSwgMHg5MDA1LCAweGExNDYsIDB4MTUyMCwgMHgwODBjLCAweDEwMGUsCisJMHgxMTMwLCAweDgxMDksIDB4YTk0NiwgMHg3MTQ4LCAweDgxMDksIDB4NzE0YSwgMHgwMGQ4LCAweDkwMDYsCisJMHhhODA2LCAweGE4NGEsIDB4YTA0NiwgMHgyODAwLCAweGE4MDIsIDB4MjkwMCwgMHhhMDA2LCAweDcwNDYsCisJMHgyMDAxLCAweDAwMDIsIDB4OTA4MCwgMHgyMGM3LCAweDIwMDUsIDB4YTg0NiwgMHgwMDU4LCAweDIyNjIsCisJMHg2MzA2LCAweDY0MGEsIDB4MDBlZSwgMHgwMGNlLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDFlLCAweDAxMmUsCisJMHgwMGZlLCAweDAwMDUsIDB4MmMwMCwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHg0Y2U5LCAweDRjZTksCisJMHg0Y2ViLCAweDRjZTksIDB4NGNlOSwgMHg0Y2U5LCAweDRjZWYsIDB4NGNlOSwgMHg0Y2U5LCAweDRjZTksCisJMHg0Y2YzLCAweDRjZTksIDB4NGNlOSwgMHg0Y2U5LCAweDRjZjcsIDB4NGNlOSwgMHg0Y2U5LCAweDRjZTksCisJMHg0Y2ZiLCAweDRjZTksIDB4NGNlOSwgMHg0Y2U5LCAweDRjZmYsIDB4NGNlOSwgMHg0Y2U5LCAweDRjZTksCisJMHg0ZDA0LCAweDA4MGMsIDB4MGRjNSwgMHhhMjc2LCAweGEzN2EsIDB4YTQ3ZSwgMHgwODk4LCAweGEyODYsCisJMHhhMzhhLCAweGE0OGUsIDB4MDg3OCwgMHhhMjk2LCAweGEzOWEsIDB4YTQ5ZSwgMHgwODU4LCAweGEyYTYsCisJMHhhM2FhLCAweGE0YWUsIDB4MDgzOCwgMHhhMmI2LCAweGEzYmEsIDB4YTRiZSwgMHgwODE4LCAweGEyYzYsCisJMHhhM2NhLCAweGE0Y2UsIDB4MDgwNCwgMHg0Y2MyLCAweGEyZDYsIDB4YTNkYSwgMHhhNGRlLCAweDA4MDQsCisJMHg0Y2MyLCAweDAwZTYsIDB4MjA3MSwgMHgxODllLCAweDcwNDgsIDB4OTAwNSwgMHgwOTA0LCAweDRkOWIsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LCAweDRkOWEsIDB4MDBmNiwgMHgyMDc5LCAweDAwMDAsCisJMHgwMGM2LCAweDAwOTYsIDB4MDA4NiwgMHgwMDc2LCAweDkwMDYsIDB4MjAzOCwgMHg3MDQwLCAweDIwNDgsCisJMHg5MDA1LCAweDA1MDAsIDB4YTk0OCwgMHgyMTA1LCAweDAwMTYsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsCisJMHgwZGM1LCAweDIwNjAsIDB4MDAxZSwgMHg4MTA4LCAweDIxMDUsIDB4OTAwNSwgMHhhOTRhLCAweDE5MDQsCisJMHg0ZDlkLCAweGE4MDQsIDB4OTAwNSwgMHgwOTBjLCAweDBkYzUsIDB4NzA0MiwgMHgyOTM4LCAweDIwNDAsCisJMHhhMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMDAyLCAweDkwODAsIDB4MjBjNywgMHgyMDA1LCAweGEwNGEsCisJMHgwODA0LCAweDRkOWQsIDB4NzAzYywgMHgyMDYwLCAweDJjMTQsIDB4NjMwNCwgMHg2NDA4LCAweDY1MGMsCisJMHgyMjAwLCAweDc4MzYsIDB4NzgzMywgMHgwMDEyLCAweDc4ODIsIDB4MjMwMCwgMHg3ODg2LCAweDI0MDAsCisJMHg3ODhhLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCisJMHgxMWFhLCAweDg3ZmYsIDB4MDExOCwgMHgyNzQ4LCAweDA4MGMsIDB4MTA0MCwgMHg3MDQ4LCAweDgwMDEsCisJMHg3MDRhLCAweDkwMDUsIDB4MTE3MCwgMHg3MDQwLCAweDIwNDgsIDB4OTAwNSwgMHgwMTI4LCAweDA4MGMsCisJMHgxMDQwLCAweDkwMDYsIDB4NzA0MiwgMHg3MDQ2LCAweDcwM2IsIDB4MThiYSwgMHg3MDNmLCAweDE4YmEsCisJMHgwNDIwLCAweDcwNDAsIDB4OTAwNSwgMHgxNTA4LCAweDcyMzgsIDB4MmMwMCwgMHg5MjA2LCAweDAxNDgsCisJMHg5YzgwLCAweDAwMDQsIDB4OTBmYSwgMHgxOGZhLCAweDAyMTAsIDB4MjAwMSwgMHgxOGJhLCAweDcwM2UsCisJMHgwMGEwLCAweDkwMDYsIDB4NzAzZSwgMHg3MDNhLCAweDcwNDQsIDB4OTAwNSwgMHgwOTBjLCAweDBkYzUsCisJMHgyMDQ4LCAweGE4MDAsIDB4OTAwNSwgMHgxZGUwLCAweDI5MDAsIDB4NzA0MiwgMHgyMDAxLCAweDAwMDIsCisJMHg5MDgwLCAweDIwYzcsIDB4MjAwNSwgMHhhODRhLCAweDAwMDAsIDB4MDA3ZSwgMHgwMDhlLCAweDAwOWUsCisJMHgwMGNlLCAweDAwZmUsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MmMwMCwgMHg5MDgyLCAweDAwMWIsCisJMHgwMDAyLCAweDRkYmMsIDB4NGRiYywgMHg0ZGJlLCAweDRkYmMsIDB4NGRiYywgMHg0ZGJjLCAweDRkYzMsCisJMHg0ZGJjLCAweDRkYmMsIDB4NGRiYywgMHg0ZGM4LCAweDRkYmMsIDB4NGRiYywgMHg0ZGJjLCAweDRkY2QsCisJMHg0ZGJjLCAweDRkYmMsIDB4NGRiYywgMHg0ZGQyLCAweDRkYmMsIDB4NGRiYywgMHg0ZGJjLCAweDRkZDcsCisJMHg0ZGJjLCAweDRkYmMsIDB4NGRiYywgMHg0ZGRjLCAweDA4MGMsIDB4MGRjNSwgMHhhYTc0LCAweGFiNzgsCisJMHhhYzdjLCAweDA4MDQsIDB4NGQ0OCwgMHhhYTg0LCAweGFiODgsIDB4YWM4YywgMHgwODA0LCAweDRkNDgsCisJMHhhYTk0LCAweGFiOTgsIDB4YWM5YywgMHgwODA0LCAweDRkNDgsIDB4YWFhNCwgMHhhYmE4LCAweGFjYWMsCisJMHgwODA0LCAweDRkNDgsIDB4YWFiNCwgMHhhYmI4LCAweGFjYmMsIDB4MDgwNCwgMHg0ZDQ4LCAweGFhYzQsCisJMHhhYmM4LCAweGFjY2MsIDB4MDgwNCwgMHg0ZDQ4LCAweGFhZDQsIDB4YWJkOCwgMHhhY2RjLCAweDA4MDQsCisJMHg0ZDQ4LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYjYsIDB4MDBjNiwgMHgyMDA5LCAweDAwN2UsCisJMHgwODBjLCAweDY3MjQsIDB4MjAxOSwgMHgwMDAxLCAweGI4NWMsIDB4ZDBhYywgMHgwMTEwLCAweDIwMTksCisJMHgwMDAwLCAweDIwMTEsIDB4ODAxYiwgMHgwODBjLCAweDRjNDQsIDB4MDBjZSwgMHgwMGJlLCAweDAwM2UsCisJMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDI2LCAweDA4MGMsIDB4NTdkNSwgMHhkMGM0LCAweDAxMjAsCisJMHgyMDExLCAweDgwMTQsIDB4MDgwYywgMHg0YzQ0LCAweDAwMmUsIDB4MDAwNSwgMHg4MWZmLCAweDE5MDQsCisJMHgzNWU3LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwMzAsIDB4YzA4ZCwgMHhjMDg1LCAweGMwYWMsCisJMHg2MDMyLCAweDA4MGMsIDB4NzYzNywgMHgxMTU4LCAweDA4MGMsIDB4NzkzMiwgMHgwODBjLCAweDYxMmUsCisJMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHg3NjdiLCAweDA4MGMsIDB4NzU2MywgMHgwMDEwLCAweDA4MGMsCisJMHg1ZmVkLCAweDAxMmUsIDB4MDgwNCwgMHgzNWI1LCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsCisJMHgwODA0LCAweDM1ZTcsIDB4MDgwYywgMHg1N2U5LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsCisJMHgzNWU3LCAweDA4MGMsIDB4NmE5YiwgMHgwMTIwLCAweDIwMDksIDB4MDAwOCwgMHgwODA0LCAweDM1ZTcsCisJMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLCAweDAxNzgsIDB4MDAyNiwgMHgyMDExLCAweDAwMTAsCisJMHgwODBjLCAweDZhYzcsIDB4MDAyZSwgMHgwMTQwLCAweDc5ODQsIDB4MDgwYywgMHg2YjExLCAweDExMjAsCisJMHgyMDA5LCAweDQwMDksIDB4MDgwNCwgMHgzNWU3LCAweDc5ODQsIDB4MDgwYywgMHg2NmI5LCAweDE5MDQsCisJMHgzNWVhLCAweDA4MGMsIDB4NGMxNywgMHgwOTA0LCAweDM1ZWEsIDB4MmIwMCwgMHg3MDI2LCAweDA4MGMsCisJMHg2YWEzLCAweDc4ODgsIDB4MTE3MCwgMHg5MDg0LCAweDAwMDUsIDB4MTE1OCwgMHg5MDBlLCAweDA4MGMsCisJMHg2OTQ0LCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDA4MDQsCisJMHgzNWI1LCAweDA4MGMsIDB4NGJlNCwgMHgwOTA0LCAweDM1ZTcsIDB4OTAwNiwgMHhhODY2LCAweGE4MzIsCisJMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHgwODBjLCAweGQzMDIsIDB4MDkwNCwgMHgzNWU3LCAweDc4ODgsCisJMHhkMDk0LCAweDAxMTgsIDB4YjhjYywgMHhjMDhkLCAweGI4Y2UsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsCisJMHg0ZWNiLCAweDAwMDUsIDB4MjA2MSwgMHgxODAwLCAweDA4MGMsIDB4NTdlOSwgMHgyMDA5LCAweDAwMDcsCisJMHgxNTYwLCAweDA4MGMsIDB4NmE5YiwgMHgwMTE4LCAweDIwMDksIDB4MDAwOCwgMHgwNDMwLCAweGE5OTgsCisJMHgwODBjLCAweDY2YjksIDB4MTUzMCwgMHgwODBjLCAweDRjMTUsIDB4MDUxOCwgMHgwODBjLCAweDZhYTMsCisJMHhhODljLCAweDExNjgsIDB4OTA4NCwgMHgwMDA1LCAweDExNTAsIDB4OTAwZSwgMHgwODBjLCAweDY5NDQsCisJMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwMGQwLCAweGE4NjgsCisJMHhjMGZjLCAweGE4NmEsIDB4MDgwYywgMHhkMzAyLCAweDExZTAsIDB4YTg5YywgMHhkMDk0LCAweDAxMTgsCisJMHhiOGNjLCAweGMwOGQsIDB4YjhjZSwgMHgyMDA5LCAweDAwMDMsIDB4YTg5NywgMHg0MDA1LCAweGE5OWEsCisJMHgwMDEwLCAweGE4OTcsIDB4NDAwNiwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsCisJMHgwMDA1LCAweGE4OTcsIDB4NDAwMCwgMHhhOTlhLCAweDkwMDYsIDB4OTE4ZCwgMHgwMDAxLCAweDIwMDgsCisJMHgwMDA1LCAweDkwMDYsIDB4MDAwNSwgMHhhODMwLCAweDIwMDksIDB4MTgwZCwgMHgyMTBjLCAweGQxOGMsCisJMHgwMTQwLCAweDIwMDgsIDB4OTE4ZSwgMHhkZWFkLCAweDExMjAsIDB4MjAyMSwgMHg0MDA5LCAweDA4MDQsCisJMHgzNWI3LCAweDkwODYsIDB4MDEwMCwgMHg3MDI0LCAweDIwNTgsIDB4MTExMCwgMHgwODA0LCAweDU3MjksCisJMHg5MDBlLCAweDA4MGMsIDB4Njk0NCwgMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLCAweDAxMDgsCisJMHhjMThkLCAweDA4MDQsIDB4MzViNSwgMHgwODBjLCAweDU3ZTksIDB4MDEyMCwgMHgyMDA5LCAweDAwMDcsCisJMHgwODA0LCAweDM1ZTcsIDB4N2Y4NCwgMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweDA4MGMsCisJMHg0YmU0LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzVlNywgMHg5MDBlLCAweDIxMzAsCisJMHg3MTI2LCAweDcxMzIsIDB4YTg2MCwgMHgyMGU4LCAweDcwMzYsIDB4YTg1YywgMHg5MDgwLCAweDAwMDUsCisJMHg3MDJhLCAweDIwYTAsIDB4MDgwYywgMHg2NzI0LCAweDE5MDQsIDB4NGY4MSwgMHgwODBjLCAweDZhYTMsCisJMHgwMTM4LCAweDA4MGMsIDB4NmFhYiwgMHgwMTIwLCAweDA4MGMsIDB4NmE0MywgMHgxOTA0LCAweDRmODEsCisJMHhkNzk0LCAweDExMTAsIDB4ZDc4NCwgMHgwMWE4LCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsCisJMHgwMDA2LCAweDIwOTgsIDB4MzQwMCwgMHhkNzk0LCAweDAxOTgsIDB4MjBhOSwgMHgwMDA4LCAweDQwMDMsCisJMHgyMDk4LCAweDIwYTAsIDB4M2QwMCwgMHgyMGUwLCAweDIwYTksIDB4MDAwMiwgMHgwODBjLCAweDQ5YjMsCisJMHgwMDgwLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsIDB4MDAwYSwgMHgyMDk4LCAweDM0MDAsCisJMHgyMGE5LCAweDAwMDQsIDB4NDAwMywgMHgyMDk4LCAweDIwYTAsIDB4M2QwMCwgMHgyMGUwLCAweDA4MGMsCisJMHg0OWIzLCAweDkxODYsIDB4MDA3ZSwgMHgwMTcwLCAweDkxODYsIDB4MDA4MCwgMHgwMTU4LCAweDA4MGMsCisJMHg2YWEzLCAweDkwYzIsIDB4MDAwNiwgMHgxMjEwLCAweGMxZmQsIDB4MDAyMCwgMHgwODBjLCAweDY5NDQsCisJMHgxMTA4LCAweGMxZmQsIDB4NDEwNCwgMHhjMWZjLCAweGQ3OTQsIDB4MDUyOCwgMHhiOGM0LCAweDIwZTAsCisJMHhiOGM4LCAweDIwNjAsIDB4OWM4MCwgMHgwMDAwLCAweDIwOTgsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDMsCisJMHg5YzgwLCAweDAwMDMsIDB4MjA5OCwgMHgyMGE5LCAweDAwMDEsIDB4NDAwNSwgMHg5YzgwLCAweDAwMDQsCisJMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDMsIDB4MjA5OCwgMHgyMGEwLCAweDNkMDAsCisJMHgyMGUwLCAweDA4MGMsIDB4NDlhNiwgMHg5YzgwLCAweDAwMjYsIDB4MjA5OCwgMHhiOGM0LCAweDIwZTAsCisJMHgyMGE5LCAweDAwMDIsIDB4NDAwMywgMHhkNzk0LCAweDAxMTAsIDB4OTZiMCwgMHgwMDBiLCAweDk2YjAsCisJMHgwMDA1LCAweDgxMDgsIDB4MDgwYywgMHhiMjNkLCAweDAxMTgsIDB4OTE4NiwgMHgwODAwLCAweDAwNDAsCisJMHhkNzhjLCAweDAxMjAsIDB4OTE4NiwgMHgwODAwLCAweDAxNzAsIDB4MDAxOCwgMHg5MTg2LCAweDAwN2UsCisJMHgwMTUwLCAweGQ3OTQsIDB4MDExOCwgMHg5Njg2LCAweDAwMjAsIDB4MDAxMCwgMHg5Njg2LCAweDAwMjgsCisJMHgwMTUwLCAweDA4MDQsIDB4NGYwYSwgMHg4NmZmLCAweDExMjAsIDB4NzEyNCwgMHg4MTBiLCAweDA4MDQsCisJMHgzNWI1LCAweDcwMzMsIDB4MDAwMSwgMHg3MTIyLCAweDcwMjQsIDB4OTYwMCwgMHg3MDI2LCAweDc3MmUsCisJMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHhhMDZiLCAweDAwMDAsIDB4YTY3YSwgMHg3MDM0LCAweGEwNzIsCisJMHg3MDI4LCAweGEwNzYsIDB4YTI4ZSwgMHhhMzkyLCAweGE0OTYsIDB4YTU5YSwgMHgwODBjLCAweDEwZjgsCisJMHg3MDA3LCAweDAwMDIsIDB4NzAxZiwgMHg0ZmJkLCAweDAwMDUsIDB4NzAzMCwgMHg5MDA1LCAweDExODAsCisJMHg3MTIwLCAweDcwMjgsIDB4MjBhMCwgMHg3NzJjLCAweDkwMzYsIDB4NzAzNCwgMHgyMGU4LCAweDIwNjEsCisJMHgxOGI4LCAweDJjNDQsIDB4YTI4YywgMHhhMzkwLCAweGE0OTQsIDB4YTU5OCwgMHgwODA0LCAweDRmMGEsCisJMHg3MTI0LCAweDgxMGIsIDB4MDgwNCwgMHgzNWI1LCAweDIwMjksIDB4MDA3ZSwgMHg3OTg0LCAweDdhODgsCisJMHg3YjhjLCAweDdjOTgsIDB4OTE4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTBlMiwgMHgwMDIwLCAweDBhMDQsCisJMHgzNWVhLCAweDk1MDIsIDB4MGEwNCwgMHgzNWVhLCAweDkxODQsIDB4MDBmZiwgMHg5MGUyLCAweDAwMjAsCisJMHgwYTA0LCAweDM1ZWEsIDB4OTUwMiwgMHgwYTA0LCAweDM1ZWEsIDB4OTI4NCwgMHhmZjAwLCAweDgwMDcsCisJMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNWVhLCAweDk1MDIsIDB4MGEwNCwgMHgzNWVhLCAweDkyODQsCisJMHgwMGZmLCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM1ZWEsIDB4OTUwMiwgMHgwYTA0LCAweDM1ZWEsCisJMHg5Mzg0LCAweGZmMDAsIDB4ODAwNywgMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNWVhLCAweDk1MDIsCisJMHgwYTA0LCAweDM1ZWEsIDB4OTM4NCwgMHgwMGZmLCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM1ZWEsCisJMHg5NTAyLCAweDBhMDQsIDB4MzVlYSwgMHg5NDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MGUyLCAweDAwMjAsCisJMHgwYTA0LCAweDM1ZWEsIDB4OTUwMiwgMHgwYTA0LCAweDM1ZWEsIDB4OTQ4NCwgMHgwMGZmLCAweDkwZTIsCisJMHgwMDIwLCAweDBhMDQsIDB4MzVlYSwgMHg5NTAyLCAweDBhMDQsIDB4MzVlYSwgMHgyMDYxLCAweDE5ODksCisJMHg2MTAyLCAweDYyMDYsIDB4NjMwYSwgMHg2NDBlLCAweDA4MDQsIDB4MzViNSwgMHgwODBjLCAweDRiZTQsCisJMHgwOTA0LCAweDM1ZTcsIDB4MjAwOSwgMHgwMDE2LCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsCisJMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHhhZjYwLCAweDA4MGMsIDB4NGMyZCwgMHg3MDFmLCAweDUwNDEsCisJMHgwMDA1LCAweDIwYTksIDB4MDAxNiwgMHg4OTZlLCAweDhkNmUsIDB4OGQ2ZiwgMHg5ZDg0LCAweGZmYzAsCisJMHg5MDgwLCAweDAwMTksIDB4MjA5OCwgMHg5ZDg0LCAweDAwM2YsIDB4MjBlMCwgMHgyMDY5LCAweDE4NzcsCisJMHgyMGU5LCAweDAwMDEsIDB4MmRhMCwgMHg0MDAzLCAweDY4MDAsIDB4OTAwNSwgMHgwOTA0LCAweDUwYTgsCisJMHg2ODA0LCAweDIwMDgsIDB4OTE4YywgMHhmZmY4LCAweDE5MDQsIDB4NTBhOCwgMHg2ODBjLCAweDkwMDUsCisJMHgwOTA0LCAweDUwYTgsIDB4OTA4MiwgMHhmZjAxLCAweDFhMDQsIDB4NTBhOCwgMHg2ODEwLCAweDkwODIsCisJMHgwMDVjLCAweDA2ZjAsIDB4NjgyNCwgMHgyMDA4LCAweDkwODIsIDB4MDAwOCwgMHgwNmM4LCAweDkxODIsCisJMHgwNDAwLCAweDE2YjAsIDB4MDA1NiwgMHgyMDI5LCAweDAwMDAsIDB4MDgwYywgMHg4ZTgwLCAweDAwNWUsCisJMHg2OTQ0LCAweDY4MjAsIDB4OTEwMiwgMHgwNjYwLCAweDY4MjAsIDB4OTA4MiwgMHgwMDE5LCAweDE2NDAsCisJMHg2ODI4LCAweDY5NDQsIDB4ODEwYywgMHg5MTAyLCAweDA2MTgsIDB4Njg0MCwgMHg5MDgyLCAweDAwMGYsCisJMHgxMmY4LCAweDA4MGMsIDB4MTAyNywgMHgyOTAwLCAweDA1OTAsIDB4Njg0ZSwgMHgwMGU2LCAweDIwNzEsCisJMHgxOTMxLCAweDAwYjYsIDB4MjA1OSwgMHgwMDAwLCAweDA4MGMsIDB4OGQzYywgMHgwMGJlLCAweDAwZWUsCisJMHgwMWU4LCAweDA4MGMsIDB4OGE4NCwgMHgwODBjLCAweDhhZDMsIDB4MTE2MCwgMHg2ODU3LCAweDAwMDAsCisJMHgwMGM2LCAweDZiMTAsIDB4MjA2MSwgMHgxYTY1LCAweDYzMGEsIDB4MDBjZSwgMHgwODA0LCAweDM1YjUsCisJMHgwODA0LCAweDM1ZWEsIDB4MDgwYywgMHg4YWNjLCAweDAwZTYsIDB4MjA3MSwgMHgxOTMxLCAweDA4MGMsCisJMHg4ZjAwLCAweDA4MGMsIDB4OGYwZiwgMHgwODBjLCAweDhkMjEsIDB4MDBlZSwgMHgyMDAxLCAweDE4OGEsCisJMHgyMDRjLCAweDA4MGMsIDB4MTA0MCwgMHgyMDAxLCAweDE4OGEsIDB4MjAwMywgMHgwMDAwLCAweDA4MDQsCisJMHgzNWU3LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OTJiZiwgMHgwODBjLCAweDhhY2MsCisJMHgwMTJlLCAweDA4MDQsIDB4MzViNSwgMHgwMDA2LCAweDA4MGMsIDB4NTdkNSwgMHhkMGNjLCAweDAwMGUsCisJMHgwMDA1LCAweDAwMDYsIDB4MDgwYywgMHg1N2Q5LCAweGQwYmMsIDB4MDAwZSwgMHgwMDA1LCAweDYxNzQsCisJMHg3YTg0LCAweDYzMDAsIDB4ODJmZiwgMHgxMTE4LCAweDc5ODYsIDB4MDgwNCwgMHgzNWI1LCAweDgzZmYsCisJMHgxOTA0LCAweDM1ZWEsIDB4MjAwMSwgMHhmZmYwLCAweDkyMDAsIDB4MWEwNCwgMHgzNWVhLCAweDIwMTksCisJMHhmZmZmLCAweDYwNzgsIDB4OTMwMiwgMHg5MjAwLCAweDBhMDQsIDB4MzVlYSwgMHg3OTg2LCAweDYyNzYsCisJMHgwODA0LCAweDM1YjUsIDB4MDgwYywgMHg1N2U5LCAweDE5MDQsIDB4MzVlNywgMHg3Yzg4LCAweDdkODQsCisJMHg3ZTk4LCAweDdmOGMsIDB4MDgwYywgMHg0YmU0LCAweDA5MDQsIDB4MzVlNywgMHg5MDBlLCAweDkwMWUsCisJMHg3MzI2LCAweDczMzIsIDB4YTg2MCwgMHgyMGU4LCAweDcwMzYsIDB4YTg1YywgMHg5MDgwLCAweDAwMDMsCisJMHg3MDJhLCAweDIwYTAsIDB4OTFkOCwgMHgxMDAwLCAweDJiNWMsIDB4OGJmZiwgMHgwMTc4LCAweDA4MGMsCisJMHg2YWEzLCAweDAxMTgsIDB4MDgwYywgMHg2YWFiLCAweDExNDgsIDB4MjBhOSwgMHgwMDAxLCAweGI4MTQsCisJMHg0MDA0LCAweGI4MTAsIDB4NDAwNCwgMHg0MTA0LCAweDkzOTgsIDB4MDAwMywgMHg4MTA4LCAweDkxODIsCisJMHgwODAwLCAweDAxMjAsIDB4OTM4NiwgMHgwMDNjLCAweDAxNzAsIDB4MGMyMCwgMHg4M2ZmLCAweDExNDgsCisJMHg3MjI0LCAweDkwMGUsIDB4MjAwMSwgMHgwMDAzLCAweDA4MGMsIDB4OTM3NSwgMHgyMjA4LCAweDA4MDQsCisJMHgzNWI1LCAweDcwMzMsIDB4MDAwMSwgMHg3MTIyLCAweDcwMjQsIDB4OTMwMCwgMHg3MDI2LCAweDIwNjEsCisJMHgxOGI4LCAweDJjNDQsIDB4YTA2YiwgMHgwMDAwLCAweGEzN2EsIDB4NzAyOCwgMHhhMDc2LCAweDcwMzQsCisJMHhhMDcyLCAweGE0OGUsIDB4YTU5MiwgMHhhNjk2LCAweGE3OWEsIDB4MDgwYywgMHgxMGY4LCAweDcwMDcsCisJMHgwMDAyLCAweDcwMWYsIDB4NTE0YywgMHgwMDA1LCAweDcwMzAsIDB4OTAwNSwgMHgxMTc4LCAweDcxMjAsCisJMHg3MDI4LCAweDIwYTAsIDB4OTAxZSwgMHg3MDM0LCAweDIwZTgsIDB4MjA2MSwgMHgxOGI4LCAweDJjNDQsCisJMHhhNDhjLCAweGE1OTAsIDB4YTY5NCwgMHhhNzk4LCAweDA4MDQsIDB4NTEwYSwgMHg3MjI0LCAweDkwMGUsCisJMHgyMDAxLCAweDAwMDMsIDB4MDgwYywgMHg5Mzc1LCAweDIyMDgsIDB4MDgwNCwgMHgzNWI1LCAweDAwZjYsCisJMHgwMGU2LCAweDA4MGMsIDB4NTdlOSwgMHgyMDA5LCAweDAwMDcsIDB4MTkwNCwgMHg1MWRmLCAweDIwNzEsCisJMHgxODllLCAweDc0NWMsIDB4ODRmZiwgMHgyMDA5LCAweDAwMGUsIDB4MTkwNCwgMHg1MWRmLCAweGFjOWMsCisJMHhhZDk4LCAweGFlYTQsIDB4YWZhMCwgMHgwMDk2LCAweDA4MGMsIDB4MTAyNywgMHgyMDA5LCAweDAwMDIsCisJMHgwOTA0LCAweDUxZGYsIDB4MjkwMCwgMHg3MDVlLCAweDkwMGUsIDB4OTAxZSwgMHg3MzU2LCAweDczNjIsCisJMHhhODYwLCAweDcwNjYsIDB4YTg1YywgMHg5MDgwLCAweDAwMDMsIDB4NzA1YSwgMHgyMGEwLCAweDkxZDgsCisJMHgxMDAwLCAweDJiNWMsIDB4OGJmZiwgMHgwMTc4LCAweDA4MGMsIDB4NmFhMywgMHgwMTE4LCAweDA4MGMsCisJMHg2YWFiLCAweDExNDgsIDB4YjgxNCwgMHgyMGE5LCAweDAwMDEsIDB4NDAwNCwgMHhiODEwLCAweDQwMDQsCiAJMHg0MTA0LCAweDkzOTgsIDB4MDAwMywgMHg4MTA4LCAweDkxODIsIDB4MDgwMCwgMHgwMTIwLCAweDkzODYsCi0JMHgwMDNjLCAweDA1MTgsIDB4MGMyMCwgMHg4M2ZmLCAweDExZjAsIDB4NzE1NCwgMHg4MTBjLCAweGE5OWEsCi0JMHhhODk3LCAweDQwMDAsIDB4NzE1YywgMHg4MWZmLCAweDA5MGMsIDB4MGRjNSwgMHgyMTQ4LCAweDA4MGMsCi0JMHgxMDQwLCAweDkwMDYsIDB4NzA1ZSwgMHg5MThkLCAweDAwMDEsIDB4MjAwOCwgMHhhMGEwLCAweDIwNDgsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZkZDEsIDB4MDEyZSwgMHhhMDlmLCAweDAwMDAsCi0JMHhhMGEzLCAweDAwMDAsIDB4MDA3MCwgMHg3MDYzLCAweDAwMDEsIDB4NzE1MiwgMHg3MDU0LCAweDkzMDAsCi0JMHg3MDU2LCAweGEzN2EsIDB4YTQ4ZSwgMHhhNTkyLCAweGE2OTYsIDB4YTc5YSwgMHgwODBjLCAweDEwZjgsCi0JMHg5MDA2LCAweDAwZWUsIDB4MDAwNSwgMHgwMDk2LCAweGE4OGMsIDB4OTBiZSwgMHg3MDAwLCAweDAxNDgsCi0JMHg5MGJlLCAweDcxMDAsIDB4MDEzMCwgMHg5MGJlLCAweDcyMDAsIDB4MDExOCwgMHgwMDllLCAweDA4MDQsCi0JMHgzNWUwLCAweGE4ODQsIDB4YTk4OCwgMHgwODBjLCAweDI4OTQsIDB4MTUxOCwgMHgwODBjLCAweDY2YjIsCi0JMHgxNTAwLCAweDcxMjYsIDB4YmUxMiwgMHhiZDE2LCAweGFlN2MsIDB4MDgwYywgMHg0Yjg5LCAweDAxYzgsCi0JMHgwODBjLCAweDRiODksIDB4MDFiMCwgMHgwMDllLCAweGE4NjcsIDB4MDAwMCwgMHhhODY4LCAweGMwZmQsCi0JMHhhODZhLCAweGE4MjMsIDB4MDAwMCwgMHhhODA0LCAweDIwNDgsIDB4MDgwYywgMHhkMDAyLCAweDExMjAsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNWRkLCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDUyYjYsCi0JMHgwMDA1LCAweDAwOWUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzVkZCwgMHg3MTI0LCAweDA4MGMsCi0JMHgzMzQyLCAweGE4MjAsIDB4OTA4NiwgMHg4MDAxLCAweDExMjAsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsCi0JMHgzNWRkLCAweDI5MDAsIDB4NzAyMiwgMHhhODA0LCAweDAwOTYsIDB4MjA0OCwgMHg4OTA2LCAweDgwMDYsCi0JMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4MDA5ZSwgMHg5MDgwLCAweDAwMDIsCi0JMHgwMDc2LCAweDAwMDYsIDB4MjA5OCwgMHgyMGEwLCAweDI3ZTAsIDB4MjdlOCwgMHgyMGE5LCAweDAwMmEsCi0JMHgwODBjLCAweDBmOGIsIDB4YWE2YywgMHhhYjcwLCAweGFjNzQsIDB4YWQ3OCwgMHgyMDYxLCAweDE4YjgsCi0JMHgyYzQ0LCAweGEwNmIsIDB4MDAwMCwgMHhhZTY0LCAweGFmOGMsIDB4OTdjNiwgMHg3MDAwLCAweDAxMTgsCi0JMHg5N2M2LCAweDcxMDAsIDB4MTE0OCwgMHg5NmMyLCAweDAwMDQsIDB4MDYwMCwgMHgyMDA5LCAweDAwMDQsCi0JMHgwMDBlLCAweDAwN2UsIDB4MDgwNCwgMHg0YmQ1LCAweDk3YzYsIDB4NzIwMCwgMHgxMWI4LCAweDk2YzIsCi0JMHgwMDU0LCAweDAyYTAsIDB4MDAwZSwgMHgwMDdlLCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LCAweGEwNzYsCi0JMHhhNzcyLCAweGEwN2IsIDB4MDAyYSwgMHhhMjhlLCAweGEzOTIsIDB4YTQ5NiwgMHhhNTlhLCAweDA4MGMsCi0JMHgxMGY4LCAweDcwMDcsIDB4MDAwMiwgMHg3MDFmLCAweDUzMTIsIDB4MDAwNSwgMHgwMDBlLCAweDAwN2UsCi0JMHgwODA0LCAweDM1ZTAsIDB4NzAyMCwgMHgyMDQ4LCAweGE4MDQsIDB4MjA0OCwgMHhhODA0LCAweDIwNDgsCi0JMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsCi0JMHgwMDAyLCAweDIwOTgsIDB4MjBhMCwgMHgyN2UwLCAweDI3ZTgsIDB4MjBhOSwgMHgwMDJhLCAweDA4MGMsCi0JMHgwZjhiLCAweDIxMDAsIDB4MjIzOCwgMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHhhMjhjLCAweGEzOTAsCi0JMHhhNDk0LCAweGE1OTgsIDB4MjAwOSwgMHgwMDJhLCAweDA4MDQsIDB4NGJkNSwgMHg4MWZmLCAweDE5MDQsCi0JMHgzNWRkLCAweDc5OGMsIDB4MjAwMSwgMHgxOTdmLCAweDkxOGMsIDB4ODAwMCwgMHgyMTAyLCAweDA4MGMsCi0JMHg0YmEwLCAweDA5MDQsIDB4MzVlMCwgMHgwODBjLCAweDZhOTIsIDB4MDEyMCwgMHgwODBjLCAweDZhOWEsCi0JMHgxOTA0LCAweDM1ZTAsIDB4MDgwYywgMHg2N2U0LCAweDA5MDQsIDB4MzVkZCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4NjhhYSwgMHgwMTJlLCAweDA5MDQsIDB4MzVkZCwgMHgyMDAxLCAweDE5N2YsCi0JMHgyMDA0LCAweGQwZmMsIDB4MTkwNCwgMHgzNWFiLCAweDA4MDQsIDB4NDVlMSwgMHhhOWEwLCAweDIwMDEsCi0JMHgxOTdmLCAweDkxOGMsIDB4ODAwMCwgMHhjMThkLCAweDIxMDIsIDB4MDgwYywgMHg0YmFkLCAweDAxYTAsCi0JMHgwODBjLCAweDZhOTIsIDB4MDExOCwgMHgwODBjLCAweDZhOWEsIDB4MTE3MCwgMHgwODBjLCAweDY3ZTQsCi0JMHgyMDA5LCAweDAwMDIsIDB4MDEyOCwgMHgwODBjLCAweDY4YWEsIDB4MTE3MCwgMHgyMDA5LCAweDAwMDMsCisJMHgwMDNjLCAweDAxZTgsIDB4MGMyMCwgMHg4M2ZmLCAweDExYzAsIDB4NzI1NCwgMHg5MDBlLCAweDIwMDEsCisJMHgwMDAzLCAweDA4MGMsIDB4OTM3NSwgMHgyMjA4LCAweDAwOWUsIDB4YTg5NywgMHg0MDAwLCAweGE5OWEsCisJMHg3MTVjLCAweDgxZmYsIDB4MDkwYywgMHgwZGM1LCAweDIxNDgsIDB4MDgwYywgMHgxMDQwLCAweDkwMDYsCisJMHg3MDVlLCAweDkxOGQsIDB4MDAwMSwgMHgyMDA4LCAweDA0MTgsIDB4NzA2MywgMHgwMDAxLCAweDcxNTIsCisJMHg3MDU0LCAweDkzMDAsIDB4NzA1NiwgMHgyMDYxLCAweDE4YjksIDB4MmM0NCwgMHhhMzdhLCAweDcwNTgsCisJMHhhMDc2LCAweDcwNjQsIDB4YTA3MiwgMHhhNDhlLCAweGE1OTIsIDB4YTY5NiwgMHhhNzlhLCAweGEwOWYsCisJMHg1MWViLCAweDAwMGUsIDB4YTBhMiwgMHgwODBjLCAweDEwZjgsIDB4OTAwNiwgMHgwMDQ4LCAweDAwOWUsCisJMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsCisJMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweGEwYTAsIDB4OTA0ZCwgMHgwOTBjLCAweDBkYzUsCisJMHgwMGU2LCAweDIwNzEsIDB4MTg5ZSwgMHhhMDZjLCAweDkwOGUsIDB4MDEwMCwgMHgwMTM4LCAweGE4N2IsCisJMHgwMDMwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDIsIDB4MDBkOCwgMHg3MDYwLCAweDkwMDUsCisJMHgxMTU4LCAweDcxNTAsIDB4NzA1OCwgMHgyMGEwLCAweDkwMWUsIDB4NzA2NCwgMHgyMGU4LCAweGE0OGMsCisJMHhhNTkwLCAweGE2OTQsIDB4YTc5OCwgMHgwNDI4LCAweGE4N2IsIDB4MDAwMCwgMHhhODgzLCAweDAwMDAsCisJMHhhODk3LCAweDQwMDAsIDB4NzI1NCwgMHg5MDBlLCAweDIwMDEsIDB4MDAwMywgMHgwODBjLCAweDkzNzUsCisJMHhhYTlhLCAweDcxNWMsIDB4ODFmZiwgMHgwOTBjLCAweDBkYzUsIDB4MjE0OCwgMHgwODBjLCAweDEwNDAsCisJMHg3MDVmLCAweDAwMDAsIDB4YTBhMCwgMHgyMDQ4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCisJMHg2ZTlmLCAweDAxMmUsIDB4YTA5ZiwgMHgwMDAwLCAweGEwYTMsIDB4MDAwMCwgMHgwMGVlLCAweDAwZmUsCisJMHgwMDA1LCAweDkxZDgsIDB4MTAwMCwgMHgyYjVjLCAweDhiZmYsIDB4MDE3OCwgMHgwODBjLCAweDZhYTMsCisJMHgwMTE4LCAweDA4MGMsIDB4NmFhYiwgMHgxMTQ4LCAweGI4MTQsIDB4MjBhOSwgMHgwMDAxLCAweDQwMDQsCisJMHhiODEwLCAweDQwMDQsIDB4NDEwNCwgMHg5Mzk4LCAweDAwMDMsIDB4ODEwOCwgMHg5MTgyLCAweDA4MDAsCisJMHgwMTIwLCAweDkzODYsIDB4MDAzYywgMHgwNTE4LCAweDBjMjAsIDB4ODNmZiwgMHgxMWYwLCAweDcxNTQsCisJMHg4MTBjLCAweGE5OWEsIDB4YTg5NywgMHg0MDAwLCAweDcxNWMsIDB4ODFmZiwgMHgwOTBjLCAweDBkYzUsCisJMHgyMTQ4LCAweDA4MGMsIDB4MTA0MCwgMHg5MDA2LCAweDcwNWUsIDB4OTE4ZCwgMHgwMDAxLCAweDIwMDgsCisJMHhhMGEwLCAweDIwNDgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2ZTlmLCAweDAxMmUsCisJMHhhMDlmLCAweDAwMDAsIDB4YTBhMywgMHgwMDAwLCAweDAwNzAsIDB4NzA2MywgMHgwMDAxLCAweDcxNTIsCisJMHg3MDU0LCAweDkzMDAsIDB4NzA1NiwgMHhhMzdhLCAweGE0OGUsIDB4YTU5MiwgMHhhNjk2LCAweGE3OWEsCisJMHgwODBjLCAweDEwZjgsIDB4OTAwNiwgMHgwMGVlLCAweDAwMDUsIDB4MDA5NiwgMHhhODhjLCAweDkwYmUsCisJMHg3MDAwLCAweDAxNDgsIDB4OTBiZSwgMHg3MTAwLCAweDAxMzAsIDB4OTBiZSwgMHg3MjAwLCAweDAxMTgsCisJMHgwMDllLCAweDA4MDQsIDB4MzVlYSwgMHhhODg0LCAweGE5ODgsIDB4MDgwYywgMHgyODczLCAweDE1MTgsCisJMHgwODBjLCAweDY2YjksIDB4MTUwMCwgMHg3MTI2LCAweGJlMTIsIDB4YmQxNiwgMHhhZTdjLCAweDA4MGMsCisJMHg0YmU0LCAweDAxYzgsIDB4MDgwYywgMHg0YmU0LCAweDAxYjAsIDB4MDA5ZSwgMHhhODY3LCAweDAwMDAsCisJMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHhhODIzLCAweDAwMDAsIDB4YTgwNCwgMHgyMDQ4LCAweDA4MGMsCisJMHhkMjg0LCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsIDB4MzVlNywgMHg3MDA3LCAweDAwMDMsCisJMHg3MDFmLCAweDUyYjgsIDB4MDAwNSwgMHgwMDllLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM1ZTcsCisJMHg3MTI0LCAweDA4MGMsIDB4MzM0YywgMHhhODIwLCAweDkwODYsIDB4ODAwMSwgMHgxMTIwLCAweDIwMDksCisJMHgwMDA0LCAweDA4MDQsIDB4MzVlNywgMHgyOTAwLCAweDcwMjIsIDB4YTgwNCwgMHgwMDk2LCAweDIwNDgsCisJMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDAwOWUsCisJMHg5MDgwLCAweDAwMDIsIDB4MDA3NiwgMHgwMDA2LCAweDIwOTgsIDB4MjBhMCwgMHgyN2UwLCAweDI3ZTgsCisJMHgyMGE5LCAweDAwMmEsIDB4MDgwYywgMHgwZjhiLCAweGFhNmMsIDB4YWI3MCwgMHhhYzc0LCAweGFkNzgsCisJMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHhhMDZiLCAweDAwMDAsIDB4YWU2NCwgMHhhZjhjLCAweDk3YzYsCisJMHg3MDAwLCAweDAxMTgsIDB4OTdjNiwgMHg3MTAwLCAweDExNDgsIDB4OTZjMiwgMHgwMDA0LCAweDA2MDAsCisJMHgyMDA5LCAweDAwMDQsIDB4MDAwZSwgMHgwMDdlLCAweDA4MDQsIDB4NGMzMCwgMHg5N2M2LCAweDcyMDAsCisJMHgxMWI4LCAweDk2YzIsIDB4MDA1NCwgMHgwMmEwLCAweDAwMGUsIDB4MDA3ZSwgMHgyMDYxLCAweDE4YjgsCisJMHgyYzQ0LCAweGEwNzYsIDB4YTc3MiwgMHhhMDdiLCAweDAwMmEsIDB4YTI4ZSwgMHhhMzkyLCAweGE0OTYsCisJMHhhNTlhLCAweDA4MGMsIDB4MTBmOCwgMHg3MDA3LCAweDAwMDIsIDB4NzAxZiwgMHg1MzE0LCAweDAwMDUsCisJMHgwMDBlLCAweDAwN2UsIDB4MDgwNCwgMHgzNWVhLCAweDcwMjAsIDB4MjA0OCwgMHhhODA0LCAweDIwNDgsCisJMHhhODA0LCAweDIwNDgsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsCisJMHhmZmMwLCAweDkwODAsIDB4MDAwMiwgMHgyMDk4LCAweDIwYTAsIDB4MjdlMCwgMHgyN2U4LCAweDIwYTksCisJMHgwMDJhLCAweDA4MGMsIDB4MGY4YiwgMHgyMTAwLCAweDIyMzgsIDB4MjA2MSwgMHgxOGI4LCAweDJjNDQsCisJMHhhMjhjLCAweGEzOTAsIDB4YTQ5NCwgMHhhNTk4LCAweDIwMDksIDB4MDAyYSwgMHgwODA0LCAweDRjMzAsCisJMHg4MWZmLCAweDE5MDQsIDB4MzVlNywgMHg3OThjLCAweDIwMDEsIDB4MTk3ZSwgMHg5MThjLCAweDgwMDAsCisJMHgyMTAyLCAweDA4MGMsIDB4NGJmYiwgMHgwOTA0LCAweDM1ZWEsIDB4MDgwYywgMHg2YWEzLCAweDAxMjAsCisJMHgwODBjLCAweDZhYWIsIDB4MTkwNCwgMHgzNWVhLCAweDA4MGMsIDB4NjdlYiwgMHgwOTA0LCAweDM1ZTcsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDY4YjEsIDB4MDEyZSwgMHgwOTA0LCAweDM1ZTcsCisJMHgyMDAxLCAweDE5N2UsIDB4MjAwNCwgMHhkMGZjLCAweDE5MDQsIDB4MzViNSwgMHgwODA0LCAweDQ2MGMsCisJMHhhOWEwLCAweDIwMDEsIDB4MTk3ZSwgMHg5MThjLCAweDgwMDAsIDB4YzE4ZCwgMHgyMTAyLCAweDA4MGMsCisJMHg0YzA4LCAweDAxYTAsIDB4MDgwYywgMHg2YWEzLCAweDAxMTgsIDB4MDgwYywgMHg2YWFiLCAweDExNzAsCisJMHgwODBjLCAweDY3ZWIsIDB4MjAwOSwgMHgwMDAyLCAweDAxMjgsIDB4MDgwYywgMHg2OGIxLCAweDExNzAsCisJMHgyMDA5LCAweDAwMDMsIDB4YTg5NywgMHg0MDA1LCAweGE5OWEsIDB4MDAxMCwgMHhhODk3LCAweDQwMDYsCisJMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsIDB4MDAwNSwgMHhhODk3LCAweDQwMDAsCisJMHgyMDAxLCAweDE5N2UsIDB4MjAwNCwgMHhkMGZjLCAweDExMjgsIDB4MDgwYywgMHg1N2RkLCAweDAxMTAsCisJMHg5MDA2LCAweDAwMTgsIDB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDAwMDUsCisJMHg3OGE4LCAweGQwOGMsIDB4MTExOCwgMHhkMDg0LCAweDA5MDQsIDB4NDU4MSwgMHgwODBjLCAweDRjMTcsCisJMHgwOTA0LCAweDM1ZWEsIDB4MDgwYywgMHg0YmU0LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsCisJMHgzNWU3LCAweDA4MGMsIDB4NmFhMywgMHgwMTMwLCAweDkwOGUsIDB4MDAwNCwgMHgwMTE4LCAweDkwOGUsCisJMHgwMDA1LCAweDE1YTAsIDB4NzhhOCwgMHhkMDhjLCAweDAxMjAsIDB4YjgwMCwgMHhjMDhjLCAweGI4MDIsCisJMHgwMDI4LCAweDA4MGMsIDB4NTdkNSwgMHhkMGI0LCAweDA5MDQsIDB4NDViYiwgMHg3ODg0LCAweDkwOGUsCisJMHgwMDdlLCAweDA5MDQsIDB4NDViYiwgMHg5MDhlLCAweDAwN2YsIDB4MDkwNCwgMHg0NWJiLCAweDkwOGUsCisJMHgwMDgwLCAweDA5MDQsIDB4NDViYiwgMHhiODAwLCAweGQwOGMsIDB4MTkwNCwgMHg0NWJiLCAweGE4NjcsCisJMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDA4MGMsIDB4ZDJhMywgMHgxMTIwLCAweDIwMDksCisJMHgwMDAzLCAweDA4MDQsIDB4MzVlNywgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1M2UwLCAweDAwMDUsCisJMHgwODBjLCAweDRjMTcsIDB4MDkwNCwgMHgzNWVhLCAweDA4MDQsIDB4NDViYiwgMHgwODBjLCAweDMzYTUsCisJMHgwMTA4LCAweDAwMDUsIDB4MjAwOSwgMHgxODM0LCAweDIxMGMsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksCisJMHgwMDAxLCAweDA4MDQsIDB4MzVlNywgMHgwODBjLCAweDU3ZTksIDB4MDEyMCwgMHgyMDA5LCAweDAwMDcsCisJMHgwODA0LCAweDM1ZTcsIDB4MDgwYywgMHg2YTliLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA4LCAweDA4MDQsCisJMHgzNWU3LCAweGI4OWMsIDB4ZDBhNCwgMHgxMTE4LCAweGQwYWMsIDB4MTkwNCwgMHg0NWJiLCAweDkwMDYsCisJMHhhODY2LCAweGE4MzIsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MDgwYywgMHhkMzAyLCAweDExMjAsCisJMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNWU3LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDU0MTksCisJMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsCisJMHg1NzI5LCAweDA4MGMsIDB4NGMxNywgMHgwOTA0LCAweDM1ZWEsIDB4MDgwNCwgMHg1M2IyLCAweDgxZmYsCisJMHgyMDA5LCAweDAwMDEsIDB4MTkwNCwgMHgzNWU3LCAweDA4MGMsIDB4NTdlOSwgMHgyMDA5LCAweDAwMDcsCisJMHgxOTA0LCAweDM1ZTcsIDB4MDgwYywgMHg2YTliLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA4LCAweDA4MDQsCisJMHgzNWU3LCAweDA4MGMsIDB4NGMxNywgMHgwOTA0LCAweDM1ZWEsIDB4MDgwYywgMHg2YWEzLCAweDIwMDksCisJMHgwMDA5LCAweDE5MDQsIDB4MzVlNywgMHgwODBjLCAweDRiZTQsIDB4MjAwOSwgMHgwMDAyLCAweDA5MDQsCisJMHgzNWU3LCAweDkwMDYsIDB4YTg2NiwgMHhhODMyLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDc5ODgsCisJMHhhOTVhLCAweDkxOTQsIDB4ZmQwMCwgMHg5MThjLCAweDAwZmYsIDB4OTAwNiwgMHg4MmZmLCAweDExMjgsCisJMHhjMGVkLCAweGE5NTIsIDB4Nzk4YywgMHhhOTU2LCAweDAwMzgsIDB4OTI4ZSwgMHgwMTAwLCAweDE5MDQsCisJMHgzNWVhLCAweGMwZTUsIDB4YTk1MiwgMHhhOTU2LCAweGE4M2UsIDB4MDgwYywgMHhkNTU1LCAweDIwMDksCisJMHgwMDAzLCAweDA5MDQsIDB4MzVlNywgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1NDcwLCAweDAwMDUsCisJMHhhODMwLCAweDkwODYsIDB4MDEwMCwgMHgyMDA5LCAweDAwMDQsIDB4MDkwNCwgMHgzNWU3LCAweDA4MDQsCisJMHgzNWI1LCAweDdhYTgsIDB4OTI4NCwgMHhjMDAwLCAweDAxNDgsIDB4ZDJlYywgMHgwMWEwLCAweDA4MGMsCisJMHg1N2U5LCAweDExODgsIDB4MjAwOSwgMHgwMDE0LCAweDA4MDQsIDB4MzVlNywgMHhkMmRjLCAweDE1NzgsCisJMHg4MWZmLCAweDIwMDksIDB4MDAwMSwgMHgxOTA0LCAweDM1ZTcsIDB4MDgwYywgMHg1N2U5LCAweDIwMDksCisJMHgwMDA3LCAweDE5MDQsIDB4MzVlNywgMHhkMmY0LCAweDAxMzgsIDB4OTI4NCwgMHg1MDAwLCAweGMwZDUsCisJMHgwODBjLCAweDU3YWYsIDB4MDgwNCwgMHgzNWI1LCAweGQyZmMsIDB4MDE2MCwgMHgwODBjLCAweDRjMTcsCisJMHgwOTA0LCAweDM1ZWEsIDB4Nzk4NCwgMHg5Mjg0LCAweDkwMDAsIDB4YzBkNSwgMHgwODBjLCAweDU3ODQsCisJMHgwODA0LCAweDM1YjUsIDB4MDgwYywgMHg0YzE3LCAweDA5MDQsIDB4MzVlYSwgMHhiODA0LCAweDkwODQsCisJMHgwMGZmLCAweDkwODYsIDB4MDAwNiwgMHgyMDA5LCAweDAwMDksIDB4MTkwNCwgMHg1NTVmLCAweDA4MGMsCisJMHg0YmU0LCAweDIwMDksIDB4MDAwMiwgMHgwOTA0LCAweDU1NWYsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsCisJMHhhZjYwLCAweDIwMDksIDB4MDAwOCwgMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweDA4MGMsCisJMHg0YzJkLCAweDcwMWYsIDB4NTRjYywgMHgwMDA1LCAweGE4NmMsIDB4OTA4NiwgMHgwNTAwLCAweDExMzgsCisJMHhhODcwLCAweDkwMDUsIDB4MTEyMCwgMHhhODc0LCAweDkwODQsIDB4ZmYwMCwgMHgwMTEwLCAweDE5MDQsCisJMHgzNWVhLCAweGE4NjYsIDB4YTgzMiwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHgwODBjLCAweDRjMTcsCisJMHgxMTEwLCAweDA4MDQsIDB4MzVlYSwgMHgyMDA5LCAweDAwNDMsIDB4MDgwYywgMHhkNWMxLCAweDIwMDksCisJMHgwMDAzLCAweDA5MDQsIDB4NTU1ZiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1NGYwLCAweDAwMDUsCisJMHhhODMwLCAweDkwODYsIDB4MDEwMCwgMHgyMDA5LCAweDAwMDQsIDB4MDkwNCwgMHg1NTVmLCAweDc5ODQsCisJMHg3YWE4LCAweDkyODQsIDB4MTAwMCwgMHhjMGQ1LCAweDA4MGMsIDB4NTc4NCwgMHgwODA0LCAweDM1YjUsCisJMHgwMGM2LCAweGFhYjAsIDB4OTI4NCwgMHhjMDAwLCAweDAxNDgsIDB4ZDJlYywgMHgwMTcwLCAweDA4MGMsCisJMHg1N2U5LCAweDExNTgsIDB4MjAwOSwgMHgwMDE0LCAweDA4MDQsIDB4NTU0ZSwgMHgyMDYxLCAweDE4MDAsCisJMHgwODBjLCAweDU3ZTksIDB4MjAwOSwgMHgwMDA3LCAweDE1YzgsIDB4ZDJmNCwgMHgwMTMwLCAweDkyODQsCisJMHg1MDAwLCAweGMwZDUsIDB4MDgwYywgMHg1N2FmLCAweDAwNTgsIDB4ZDJmYywgMHgwMTgwLCAweDA4MGMsCisJMHg0YzE1LCAweDA1OTAsIDB4YTk5OCwgMHg5Mjg0LCAweDkwMDAsIDB4YzBkNSwgMHgwODBjLCAweDU3ODQsCisJMHhhODdiLCAweDAwMDAsIDB4YTg4MywgMHgwMDAwLCAweGE4OTcsIDB4NDAwMCwgMHgwNDM4LCAweDA4MGMsCisJMHg0YzE1LCAweDA1MTAsIDB4MDgwYywgMHg2YWEzLCAweDIwMDksIDB4MDAwOSwgMHgxMWI4LCAweGE4YzQsCisJMHg5MDg2LCAweDA1MDAsIDB4MTFjOCwgMHhhOGM4LCAweDkwMDUsIDB4MTFiMCwgMHhhOGNjLCAweDkwODQsCisJMHhmZjAwLCAweDExOTAsIDB4MDgwYywgMHg0YzE1LCAweDExMDgsIDB4MDA3MCwgMHgyMDA5LCAweDAwNGIsCisJMHgwODBjLCAweGQ1YzEsIDB4MjAwOSwgMHgwMDAzLCAweDAxMDgsIDB4MDA3OCwgMHgwNDMxLCAweDE5YzAsCiAJMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLCAweGE4OTcsIDB4NDAwNiwgMHg5MDBlLCAweDkwODUsCi0JMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LCAweGE4OTcsIDB4NDAwMCwgMHgyMDAxLCAweDE5N2YsCi0JMHgyMDA0LCAweGQwZmMsIDB4MTEyOCwgMHgwODBjLCAweDU3ZGIsIDB4MDExMCwgMHg5MDA2LCAweDAwMTgsCi0JMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MDAwNSwgMHg3OGE4LCAweGQwOGMsCi0JMHgxMTE4LCAweGQwODQsIDB4MDkwNCwgMHg0NTU2LCAweDA4MGMsIDB4NGJiYywgMHgwOTA0LCAweDM1ZTAsCi0JMHgwODBjLCAweDRiODksIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNWRkLCAweDA4MGMsCi0JMHg2YTkyLCAweDAxMzAsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMTgsIDB4OTA4ZSwgMHgwMDA1LCAweDE1YTAsCi0JMHg3OGE4LCAweGQwOGMsIDB4MDEyMCwgMHhiODAwLCAweGMwOGMsIDB4YjgwMiwgMHgwMDI4LCAweDA4MGMsCi0JMHg1N2QzLCAweGQwYjQsIDB4MDkwNCwgMHg0NTkwLCAweDc4ODQsIDB4OTA4ZSwgMHgwMDdlLCAweDA5MDQsCi0JMHg0NTkwLCAweDkwOGUsIDB4MDA3ZiwgMHgwOTA0LCAweDQ1OTAsIDB4OTA4ZSwgMHgwMDgwLCAweDA5MDQsCi0JMHg0NTkwLCAweGI4MDAsIDB4ZDA4YywgMHgxOTA0LCAweDQ1OTAsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsCi0JMHhjMGZkLCAweGE4NmEsIDB4MDgwYywgMHhkMDIxLCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsCi0JMHgzNWRkLCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDUzZGUsIDB4MDAwNSwgMHgwODBjLCAweDRiYmMsCi0JMHgwOTA0LCAweDM1ZTAsIDB4MDgwNCwgMHg0NTkwLCAweDA4MGMsIDB4MzM5YiwgMHgwMTA4LCAweDAwMDUsCi0JMHgyMDA5LCAweDE4MzQsIDB4MjEwYywgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsCi0JMHgzNWRkLCAweDA4MGMsIDB4NTdlNywgMHgwMTIwLCAweDIwMDksIDB4MDAwNywgMHgwODA0LCAweDM1ZGQsCi0JMHgwODBjLCAweDZhOGEsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDgsIDB4MDgwNCwgMHgzNWRkLCAweGI4OWMsCi0JMHhkMGE0LCAweDExMTgsIDB4ZDBhYywgMHgxOTA0LCAweDQ1OTAsIDB4OTAwNiwgMHhhODY2LCAweGE4MzIsCi0JMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHgwODBjLCAweGQwODAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsCi0JMHgwODA0LCAweDM1ZGQsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTQxNywgMHgwMDA1LCAweGE4MzAsCi0JMHg5MDg2LCAweDAxMDAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHg1NzI3LCAweDA4MGMsCi0JMHg0YmJjLCAweDA5MDQsIDB4MzVlMCwgMHgwODA0LCAweDUzYjAsIDB4ODFmZiwgMHgyMDA5LCAweDAwMDEsCi0JMHgxOTA0LCAweDM1ZGQsIDB4MDgwYywgMHg1N2U3LCAweDIwMDksIDB4MDAwNywgMHgxOTA0LCAweDM1ZGQsCi0JMHgwODBjLCAweDZhOGEsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDgsIDB4MDgwNCwgMHgzNWRkLCAweDA4MGMsCi0JMHg0YmJjLCAweDA5MDQsIDB4MzVlMCwgMHgwODBjLCAweDZhOTIsIDB4MjAwOSwgMHgwMDA5LCAweDE5MDQsCi0JMHgzNWRkLCAweDA4MGMsIDB4NGI4OSwgMHgyMDA5LCAweDAwMDIsIDB4MDkwNCwgMHgzNWRkLCAweDkwMDYsCi0JMHhhODY2LCAweGE4MzIsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4Nzk4OCwgMHhhOTVhLCAweDkxOTQsCi0JMHhmZDAwLCAweDkxOGMsIDB4MDBmZiwgMHg5MDA2LCAweDgyZmYsIDB4MTEyOCwgMHhjMGVkLCAweGE5NTIsCi0JMHg3OThjLCAweGE5NTYsIDB4MDAzOCwgMHg5MjhlLCAweDAxMDAsIDB4MTkwNCwgMHgzNWUwLCAweGMwZTUsCi0JMHhhOTUyLCAweGE5NTYsIDB4YTgzZSwgMHgwODBjLCAweGQyZDMsIDB4MjAwOSwgMHgwMDAzLCAweDA5MDQsCi0JMHgzNWRkLCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDU0NmUsIDB4MDAwNSwgMHhhODMwLCAweDkwODYsCi0JMHgwMTAwLCAweDIwMDksIDB4MDAwNCwgMHgwOTA0LCAweDM1ZGQsIDB4MDgwNCwgMHgzNWFiLCAweDdhYTgsCi0JMHg5Mjg0LCAweGMwMDAsIDB4MDE0OCwgMHhkMmVjLCAweDAxYTAsIDB4MDgwYywgMHg1N2U3LCAweDExODgsCi0JMHgyMDA5LCAweDAwMTQsIDB4MDgwNCwgMHgzNWRkLCAweGQyZGMsIDB4MTU3OCwgMHg4MWZmLCAweDIwMDksCi0JMHgwMDAxLCAweDE5MDQsIDB4MzVkZCwgMHgwODBjLCAweDU3ZTcsIDB4MjAwOSwgMHgwMDA3LCAweDE5MDQsCi0JMHgzNWRkLCAweGQyZjQsIDB4MDEzOCwgMHg5Mjg0LCAweDUwMDAsIDB4YzBkNSwgMHgwODBjLCAweDU3YWQsCi0JMHgwODA0LCAweDM1YWIsIDB4ZDJmYywgMHgwMTYwLCAweDA4MGMsIDB4NGJiYywgMHgwOTA0LCAweDM1ZTAsCi0JMHg3OTg0LCAweDkyODQsIDB4OTAwMCwgMHhjMGQ1LCAweDA4MGMsIDB4NTc4MiwgMHgwODA0LCAweDM1YWIsCi0JMHgwODBjLCAweDRiYmMsIDB4MDkwNCwgMHgzNWUwLCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDA2LCAweDIwMDksIDB4MDAwOSwgMHgxOTA0LCAweDU1NWQsIDB4MDgwYywgMHg0Yjg5LCAweDIwMDksCi0JMHgwMDAyLCAweDA5MDQsIDB4NTU1ZCwgMHhhODVjLCAweDkwODAsIDB4MDAxYiwgMHhhZjYwLCAweDIwMDksCi0JMHgwMDA4LCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4MDgwYywgMHg0YmQyLCAweDcwMWYsCi0JMHg1NGNhLCAweDAwMDUsIDB4YTg2YywgMHg5MDg2LCAweDA1MDAsIDB4MTEzOCwgMHhhODcwLCAweDkwMDUsCi0JMHgxMTIwLCAweGE4NzQsIDB4OTA4NCwgMHhmZjAwLCAweDAxMTAsIDB4MTkwNCwgMHgzNWUwLCAweGE4NjYsCi0JMHhhODMyLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDA4MGMsIDB4NGJiYywgMHgxMTEwLCAweDA4MDQsCi0JMHgzNWUwLCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGQzM2YsIDB4MjAwOSwgMHgwMDAzLCAweDA5MDQsCi0JMHg1NTVkLCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDU0ZWUsIDB4MDAwNSwgMHhhODMwLCAweDkwODYsCi0JMHgwMTAwLCAweDIwMDksIDB4MDAwNCwgMHgwOTA0LCAweDU1NWQsIDB4Nzk4NCwgMHg3YWE4LCAweDkyODQsCi0JMHgxMDAwLCAweGMwZDUsIDB4MDgwYywgMHg1NzgyLCAweDA4MDQsIDB4MzVhYiwgMHgwMGM2LCAweGFhYjAsCi0JMHg5Mjg0LCAweGMwMDAsIDB4MDE0OCwgMHhkMmVjLCAweDAxNzAsIDB4MDgwYywgMHg1N2U3LCAweDExNTgsCi0JMHgyMDA5LCAweDAwMTQsIDB4MDgwNCwgMHg1NTRjLCAweDIwNjEsIDB4MTgwMCwgMHgwODBjLCAweDU3ZTcsCi0JMHgyMDA5LCAweDAwMDcsIDB4MTVjOCwgMHhkMmY0LCAweDAxMzAsIDB4OTI4NCwgMHg1MDAwLCAweGMwZDUsCi0JMHgwODBjLCAweDU3YWQsIDB4MDA1OCwgMHhkMmZjLCAweDAxODAsIDB4MDgwYywgMHg0YmJhLCAweDA1OTAsCi0JMHhhOTk4LCAweDkyODQsIDB4OTAwMCwgMHhjMGQ1LCAweDA4MGMsIDB4NTc4MiwgMHhhODdiLCAweDAwMDAsCi0JMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDAwLCAweDA0MzgsIDB4MDgwYywgMHg0YmJhLCAweDA1MTAsCi0JMHgwODBjLCAweDZhOTIsIDB4MjAwOSwgMHgwMDA5LCAweDExYjgsIDB4YThjNCwgMHg5MDg2LCAweDA1MDAsCi0JMHgxMWM4LCAweGE4YzgsIDB4OTAwNSwgMHgxMWIwLCAweGE4Y2MsIDB4OTA4NCwgMHhmZjAwLCAweDExOTAsCi0JMHgwODBjLCAweDRiYmEsIDB4MTEwOCwgMHgwMDcwLCAweDIwMDksIDB4MDA0YiwgMHgwODBjLCAweGQzM2YsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDEwOCwgMHgwMDc4LCAweDA0MzEsIDB4MTljMCwgMHhhODk3LCAweDQwMDUsCi0JMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsCi0JMHgwMDMwLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZTAsIDB4N2FhOCwgMHhkMmRjLCAweDA5MDQsCi0JMHgzNWRkLCAweDAwMTYsIDB4Nzk4NCwgMHg5Mjg0LCAweDEwMDAsIDB4YzBmZCwgMHgwODBjLCAweDU3ODIsCi0JMHgwMDFlLCAweDE5MDQsIDB4MzVkZCwgMHgwODA0LCAweDM1YWIsIDB4MDBmNiwgMHgyZDc4LCAweGFhYjAsCi0JMHgwMDIxLCAweDAwZmUsIDB4MDAwNSwgMHhhYWIwLCAweGMyZDUsIDB4ZDJkYywgMHgwMTUwLCAweDAwMTYsCi0JMHhhOTk4LCAweDkyODQsIDB4MTQwMCwgMHhjMGZkLCAweDA4MGMsIDB4NTc4MiwgMHgwMDFlLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LCAweDM1ZGQsCi0JMHgwODBjLCAweDU3ZTcsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDcsIDB4MDgwNCwgMHgzNWRkLCAweDc5ODQsCi0JMHg3ZWE4LCAweDk2YjQsIDB4MDBmZiwgMHgwODBjLCAweDY3MWQsIDB4MTkwNCwgMHgzNWUwLCAweDkxODYsCi0JMHgwMDdmLCAweDAxMzgsIDB4MDgwYywgMHg2YTkyLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA5LCAweDA4MDQsCi0JMHgzNWRkLCAweDA4MGMsIDB4NGI4OSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM1ZGQsCi0JMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MjAwMSwgMHgwMTAwLCAweDgwMDcsCi0JMHhhODBhLCAweDA4MGMsIDB4ZDAzYiwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDM1ZGQsCi0JMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1NWJkLCAweDAwMDUsIDB4YTgwOCwgMHg4MDA3LCAweDkwODYsCi0JMHgwMTAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsIDB4MzVkZCwgMHhhOGUwLCAweGE4NjYsCi0JMHhhODEwLCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDgwMGMsIDB4YTgxNCwgMHg4MDA3LCAweDkwODQsCi0JMHgwMGZmLCAweDgwMDQsIDB4OTA4MCwgMHgwMDAyLCAweDkxMDgsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsCi0JMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwNCwgMHg3YThjLCAweDdiODgsCi0JMHg3YzljLCAweDdkOTgsIDB4MDgwNCwgMHg0YmQ1LCAweDA4MGMsIDB4NGI4OSwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDAyLCAweDA4MDQsIDB4MzVkZCwgMHg3OTg0LCAweDkxOTQsIDB4ZmYwMCwgMHg5MThjLCAweDAwZmYsCi0JMHg4MjE3LCAweDgyZmYsIDB4MTExOCwgMHg3MDIzLCAweDE5YjUsIDB4MDA0MCwgMHg5MmM2LCAweDAwMDEsCi0JMHgxMTE4LCAweDcwMjMsIDB4MTljZiwgMHgwMDEwLCAweDA4MDQsIDB4MzVlMCwgMHgyMDA5LCAweDAwMWEsCi0JMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweGFmNjAsCi0JMHgwODBjLCAweDRiZDIsIDB4NzAxZiwgMHg1NjBkLCAweDAwMDUsIDB4MjAwMSwgMHgxODJlLCAweDIwMDMsCi0JMHgwMDAxLCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDIwOTgsIDB4YTg2MCwgMHgyMGUwLCAweDIwYTksCi0JMHgwMDFhLCAweDcwMjAsIDB4MjBhMCwgMHgyMGU5LCAweDAwMDEsIDB4NDAwMywgMHgwODA0LCAweDM1YWIsCi0JMHgwODBjLCAweDRiODksIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNWRkLCAweDc5ODQsCi0JMHg5MTk0LCAweGZmMDAsIDB4OTE4YywgMHgwMGZmLCAweDgyMTcsIDB4ODJmZiwgMHgxMTE4LCAweDIwOTksCi0JMHgxOWI1LCAweDAwNDAsIDB4OTJjNiwgMHgwMDAxLCAweDExMTgsIDB4MjA5OSwgMHgxOWNmLCAweDAwMTAsCi0JMHgwODA0LCAweDM1ZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4MjBhMCwgMHhhODYwLCAweDIwZTgsCi0JMHgyMGE5LCAweDAwMWEsIDB4MjBlMSwgMHgwMDAxLCAweDQwMDMsIDB4MjAwOSwgMHgwMDFhLCAweDdhOGMsCi0JMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHhhZjYwLCAweDA4MDQsCi0JMHg0YmQ1LCAweDc4ODQsIDB4OTA4YSwgMHgxMDAwLCAweDFhMDQsIDB4MzVlMCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweDkxMDgsIDB4MDBjNiwgMHgyMDYxLCAweDE5ZmMsCi0JMHg2MTRhLCAweDAwY2UsIDB4MDEyZSwgMHgwODA0LCAweDM1YWIsIDB4MDBjNiwgMHgwODBjLCAweDc1NjksCi0JMHgxMTYwLCAweDA4MGMsIDB4Nzg0ZSwgMHgwODBjLCAweDYxMjcsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg3NWFkLCAweDA4MGMsIDB4NzQ5NSwgMHgwODBjLCAweDBkYzUsIDB4MjA2MSwgMHgxODAwLCAweDYwMzAsCi0JMHhjMDlkLCAweDYwMzIsIDB4MDgwYywgMHg1ZmU2LCAweDAwY2UsIDB4MDAwNSwgMHgwMGM2LCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDQsIDB4OTA4ZSwgMHgwMDAwLCAweDA5MDQsIDB4MzVkZCwgMHg3ODg0LCAweDkwMDUsCi0JMHgwMTg4LCAweDc4ODgsIDB4MjA2MSwgMHgxOTlkLCAweDJjMGMsIDB4MjA2MiwgMHgwODBjLCAweDJjNjIsCi0JMHgwMWEwLCAweDA4MGMsIDB4MmM2YSwgMHgwMTg4LCAweDA4MGMsIDB4MmM3MiwgMHgwMTcwLCAweDIxNjIsCi0JMHgwODA0LCAweDM1ZTAsIDB4MjA2MSwgMHgwMTAwLCAweDYwMzgsIDB4OTA4NiwgMHgwMDA3LCAweDExMTgsCi0JMHgyMDA5LCAweDAwMDEsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDAsIDB4Nzg4NCwgMHg5MDg2LCAweDAwMDIsCi0JMHgxNTY4LCAweDIwNjEsIDB4MDEwMCwgMHg2MDI4LCAweGMwOWMsIDB4NjAyYSwgMHgwMDI2LCAweDIwMTEsCi0JMHgwMDAzLCAweDA4MGMsIDB4YThlZCwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHhhOGY3LCAweDAwMmUsCi0JMHgwODBjLCAweGE4MDEsIDB4MDAzNiwgMHg5MDFlLCAweDA4MGMsIDB4YTg3NywgMHgwMDNlLCAweDYwZTMsCi0JMHgwMDAwLCAweDA4MGMsIDB4ZWRmYSwgMHgwODBjLCAweGVlMTUsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg3NWFkLCAweDkwMDYsIDB4MDgwYywgMHgyZDUyLCAweDIwMDEsIDB4MTgwMCwgMHgyMDAzLCAweDAwMDQsCi0JMHgyMDAxLCAweDE5YTksIDB4MjAwMywgMHgwMDAwLCAweDYwMjcsIDB4MDAwOCwgMHgwMGNlLCAweDA4MDQsCi0JMHgzNWFiLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNWRkLCAweDA4MGMsCi0JMHg1N2U3LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsIDB4MzVkZCwgMHg3OTg0LCAweDdlYTgsCi0JMHg5NmI0LCAweDAwZmYsIDB4MDgwYywgMHg2NzFkLCAweDE5MDQsIDB4MzVlMCwgMHg5MTg2LCAweDAwN2YsCi0JMHgwMTM4LCAweDA4MGMsIDB4NmE5MiwgMHgwMTIwLCAweDIwMDksIDB4MDAwOSwgMHgwODA0LCAweDM1ZGQsCi0JMHgwODBjLCAweDRiODksIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNWRkLCAweGE4NjcsCi0JMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDA4MGMsIDB4ZDAzZSwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDAzLCAweDA4MDQsIDB4MzVkZCwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1NzEwLCAweDAwMDUsCi0JMHhhODMwLCAweDkwODYsIDB4MDEwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM1ZGQsCi0JMHhhOGUwLCAweGE4NjYsIDB4YTgzNCwgMHg4MDA3LCAweDgwMGMsIDB4YTg1YywgMHg5MDgwLCAweDAwMGMsCi0JMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweGFmNjAsIDB4MDgwNCwgMHg0YmQ1LCAweGE4OTgsCi0JMHg5MDg2LCAweDAwMGQsIDB4MTkwNCwgMHgzNWRkLCAweDIwMjEsIDB4NDAwNSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDBlMDQsIDB4NTczNCwgMHgwMDEwLCAweDAxMmUsIDB4MGNjMCwgMHg3YzM2LCAweDk0ODYsCi0JMHg0MDAwLCAweDAxMTgsIDB4NzgzMywgMHgwMDExLCAweDAwMTAsIDB4NzgzMywgMHgwMDEwLCAweDc4ODMsCi0JMHg0MDA1LCAweGE5OTgsIDB4Nzk4NiwgMHhhOWE0LCAweDc5OWEsIDB4YTlhOCwgMHg3OTllLCAweDA4MGMsCi0JMHg0YmM1LCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCi0JMHgxMWFhLCAweDcwMDcsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4NzAwZiwgMHgwMDAwLCAweDAxMmUsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MjA2MSwgMHgxOWZjLCAweDc5ODQsCi0JMHg2MTVhLCAweDYxNTYsIDB4NjA1ZiwgMHgwMDAwLCAweDYwNTMsIDB4MDAwOSwgMHg3ODk4LCAweDYwNzIsCi0JMHg3ODljLCAweDYwNmUsIDB4Nzg4OCwgMHg2MDZhLCAweDc4OGMsIDB4NjA2NiwgMHgyMDAxLCAweDFhMGMsCi0JMHgyMDQ0LCAweDIwMDEsIDB4MWExMywgMHhhMDc2LCAweGEwNjAsIDB4YTA3MiwgMHhhMDdiLCAweDAwMDEsCi0JMHhhMDdmLCAweDAwMDIsIDB4YTA2YiwgMHgwMDAwLCAweGEwOWYsIDB4MDAwMCwgMHgwMGNlLCAweDAxMmUsCi0JMHgwODA0LCAweDM1YWIsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBiNiwgMHgwMGM2LCAweDkwZTQsCi0JMHhjMDAwLCAweDAxNjgsIDB4MDAwNiwgMHhkMGQ0LCAweDAxMzAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMjksCi0JMHgwODBjLCAweDMzNjAsIDB4MDAzZSwgMHgwODBjLCAweGNlYTMsIDB4MDAwZSwgMHgxMTk4LCAweGQwZTQsCi0JMHgwMTYwLCAweDkxODAsIDB4MTAwMCwgMHgyMDA0LCAweDkwNWQsIDB4MDE2MCwgMHgwODBjLCAweDYxNDEsCi0JMHgwODBjLCAweGIwNmIsIDB4MDExMCwgMHhiODE3LCAweDAwMDAsIDB4OTAwNiwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMTJlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDBjYzgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwMTU2LCAweDIwMTAsIDB4OTAwZSwgMHgyMGE5LCAweDA4MDAsIDB4MDAxNiwgMHg5MTgwLCAweDEwMDAsCi0JMHgyMDA0LCAweDkwMDUsIDB4MDE4OCwgMHg5MTg2LCAweDAwN2UsIDB4MDE3MCwgMHg5MTg2LCAweDAwN2YsCi0JMHgwMTU4LCAweDkxODYsIDB4MDA4MCwgMHgwMTQwLCAweDkxODYsIDB4MDBmZiwgMHgwMTI4LCAweDAwMjYsCi0JMHgyMjAwLCAweDA4MGMsIDB4NTc4MiwgMHgwMDJlLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDU3YjUsCi0JMHgwMTVlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4NDgsIDB4MjAwNCwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODY3LCAweDIwMDQsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwZDQsCi0JMHgwMDBlLCAweDAwMDUsIDB4MjAwMSwgMHgxODBlLCAweDIwMDQsIDB4ZDBiNCwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDAwMDUsIDB4MDAxNiwgMHgwMGU2LCAweDIwNzEsCi0JMHgxODllLCAweDcxMDgsIDB4OTEwZCwgMHg3MTBhLCAweDAwZWUsIDB4MDAxZSwgMHgwMDA1LCAweDc5YTQsCi0JMHg4MWZmLCAweDA5MDQsIDB4MzVlMCwgMHg5MTgyLCAweDAwODEsIDB4MWEwNCwgMHgzNWUwLCAweDgxMGMsCi0JMHgwMDE2LCAweDA4MGMsIDB4NGI4OSwgMHgwMTcwLCAweDA4MGMsIDB4MGYxNiwgMHgyMTAwLCAweDIyMzgsCi0JMHg3ZDg0LCAweDdjODgsIDB4N2I4YywgMHg3YTkwLCAweDAwMWUsIDB4MDgwYywgMHg0YmQyLCAweDcwMWYsCi0JMHg1ODE3LCAweDAwMDUsIDB4MDAxZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNWRkLCAweDIwNzksCi0JMHgwMDAwLCAweDdkOTQsIDB4N2M5OCwgMHg3YmE4LCAweDdhYWMsIDB4NzlhNCwgMHg4MTBjLCAweDIwNjEsCi0JMHgxOGI4LCAweDJjNDQsIDB4YTc3MCwgMHhhMDc0LCAweDIwNzEsIDB4MTg5ZSwgMHgwODBjLCAweDRiZDUsCi0JMHg3MDFmLCAweDU4MmIsIDB4MDAwNSwgMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHgwMDE2LCAweDAwMjYsCi0JMHhhMjcwLCAweGExNzQsIDB4MDgwYywgMHgwZjFlLCAweDAwMmUsIDB4MDAxZSwgMHgwODBjLCAweDBmY2IsCi0JMHg5MDA2LCAweGE4MDIsIDB4YTgwNiwgMHgwODA0LCAweDM1YWIsIDB4MDEyNiwgMHgwMTU2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxYzYsIDB4MDFkNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNjEsCi0JMHgwMTAwLCAweDIwNjksIDB4MDIwMCwgMHgyMDcxLCAweDE4MDAsIDB4NjA0NCwgMHhkMGE0LCAweDExZTgsCi0JMHhkMDg0LCAweDAxMTgsIDB4MDgwYywgMHg1OWU2LCAweDAwNjgsIDB4ZDA4YywgMHgwMTE4LCAweDA4MGMsCi0JMHg1OGVmLCAweDAwNDAsIDB4ZDA5NCwgMHgwMTE4LCAweDA4MGMsIDB4NThiZiwgMHgwMDE4LCAweGQwOWMsCi0JMHgwMTA4LCAweDAwOTksIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMWRlLCAweDAxY2UsCi0JMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDAxNiwgMHg2MTI4LCAweGQxOWMsCi0JMHgxMTEwLCAweGMxOWQsIDB4NjEyYSwgMHgwMDFlLCAweDBjNjgsIDB4MDAwNiwgMHg3MDk4LCAweDkwMDUsCi0JMHgwMDBlLCAweDAxMjAsIDB4NzA5YiwgMHgwMDAwLCAweDcwOTMsIDB4MDAwMCwgMHg2MjRjLCAweDkyODYsCi0JMHhmMGYwLCAweDExNTAsIDB4NjA0OCwgMHg5MDg2LCAweGYwZjAsIDB4MDEzMCwgMHg2MjRhLCAweDYwNDMsCi0JMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgwNDkwLCAweDkyOTQsIDB4ZmYwMCwgMHg5Mjk2LCAweGY3MDAsCi0JMHgwMTc4LCAweDcxMzgsIDB4ZDFhNCwgMHgxMTYwLCAweDYyNDAsIDB4OTI5NSwgMHgwMTAwLCAweDYyNDIsCi0JMHg5Mjk0LCAweDAwMTAsIDB4MDEyOCwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg2MGEzLCAweDAwZjAsCi0JMHg2MDQwLCAweDkwODQsIDB4MDAxMCwgMHg5MDg1LCAweDAxNDAsIDB4NjA0MiwgMHg2MDQzLCAweDAwMDAsCi0JMHg3MDg3LCAweDAwMDAsIDB4NzBhMywgMHgwMDAxLCAweDcwYzcsIDB4MDAwMCwgMHg3MGRmLCAweDAwMDAsCi0JMHgyMDA5LCAweDFjODAsIDB4MjAwYiwgMHgwMDAwLCAweDcwOTcsIDB4MDAwMCwgMHg3MDhiLCAweDAwMGYsCi0JMHgyMDA5LCAweDAwMGYsIDB4MjAxMSwgMHg1Zjg5LCAweDA4MGMsIDB4ODdhMSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODY5LCAweDIwMDQsIDB4ZDA4YywgMHgwMTEwLCAweDcwNWYsIDB4ZmZmZiwgMHg3MDg4LCAweDkwMDUsCi0JMHgxNTI4LCAweDIwMTEsIDB4NWY4OSwgMHgwODBjLCAweDg3MDksIDB4NjA0MCwgMHg5MDk0LCAweDAwMTAsCi0JMHg5Mjg1LCAweDAwMjAsIDB4NjA0MiwgMHgyMGE5LCAweDAwYzgsIDB4NjA0NCwgMHhkMDhjLCAweDExNjgsCi0JMHgxZjA0LCAweDU4ZDUsIDB4NjI0MiwgMHg3MDliLCAweDAwMDAsIDB4NjA0MCwgMHg5MDk0LCAweDAwMTAsCi0JMHg5Mjg1LCAweDAwODAsIDB4NjA0MiwgMHg2MjQyLCAweDAwNDgsIDB4NjI0MiwgMHg3MDliLCAweDAwMDAsCi0JMHg3MDhmLCAweDAwMDAsIDB4OTAwNiwgMHgwODBjLCAweDYxMmMsIDB4MDAwMCwgMHgwMDA1LCAweDcwOGMsCi0JMHg5MDhhLCAweDAwMDMsIDB4MWEwYywgMHgwZGM1LCAweDAwMGIsIDB4MDAwNSwgMHg1OGY5LCAweDU5NGEsCi0JMHg1OWU1LCAweDAwZjYsIDB4MDAxNiwgMHg2OTAwLCAweDkxOGMsIDB4MDgwMCwgMHg3MDhmLCAweDAwMDEsCi0JMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLCAweDY4MDMsIDB4MDBmYywgMHgyMGE5LCAweDAwMDQsCi0JMHg2ODAwLCAweDkwODQsIDB4MDBmYywgMHgwMTIwLCAweDFmMDQsIDB4NTkwOCwgMHgwODBjLCAweDBkYzUsCi0JMHg2OGEwLCAweDY4YTIsIDB4Njg5YywgMHg2ODllLCAweDY4OTgsIDB4Njg5YSwgMHhhMDAxLCAweDkxOGQsCi0JMHgxNjAwLCAweDY5MDIsIDB4MDAxZSwgMHg2ODM3LCAweDAwMjAsIDB4MDgwYywgMHg2MTA4LCAweDIwNzksCi0JMHgxYzAwLCAweDc4MzMsIDB4MTEwMSwgMHg3ODM3LCAweDAwMDAsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksCi0JMHgxODA1LCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDFjMGUsIDB4MjBhOSwgMHgwMDA0LCAweDQwMDMsCi0JMHgwODBjLCAweGFkYmMsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MWMwMCwgMHgyMGU5LCAweDAwMDAsCi0JMHgyMGExLCAweDAyNDAsIDB4MjBhOSwgMHgwMDE0LCAweDQwMDMsIDB4NjBjMywgMHgwMDBjLCAweDYwMGYsCi0JMHgwMDAwLCAweDA4MGMsIDB4NWZiYSwgMHgwMGZlLCAweDkwMDYsIDB4NzA5MiwgMHg2MDQzLCAweDAwMDgsCi0JMHg2MDQyLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDcwOTMsIDB4MDAwMCwgMHg5MDI1LCAweDA5MDQsCi0JMHg1OWMyLCAweDYwMjAsIDB4ZDBiNCwgMHgxOTA0LCAweDU5YzAsIDB4NzFhMCwgMHg4MWZmLCAweDA5MDQsCi0JMHg1OWFlLCAweDk0ODYsIDB4MDAwYywgMHgxOTA0LCAweDU5YmIsIDB4OTQ4MCwgMHgwMDE4LCAweDgwMDQsCi0JMHgyMGE4LCAweDA4MGMsIDB4NjEwMSwgMHgyMDExLCAweDAyNjAsIDB4MjAxOSwgMHgxYzAwLCAweDIyMGMsCi0JMHgyMzA0LCAweDkxMDYsIDB4MTFlOCwgMHg4MjEwLCAweDgzMTgsIDB4MWYwNCwgMHg1OTY3LCAweDYwNDMsCi0JMHgwMDA0LCAweDIwNjEsIDB4MDE0MCwgMHg2MDViLCAweGJjOTQsIDB4NjA1ZiwgMHhmMGYwLCAweDIwNjEsCi0JMHgwMTAwLCAweDYwNDMsIDB4MDAwNiwgMHg3MDhmLCAweDAwMDIsIDB4NzA5YiwgMHgwMDAyLCAweDIwMDksCi0JMHgwN2QwLCAweDIwMTEsIDB4NWY5MCwgMHgwODBjLCAweDg3YTEsIDB4MDgwYywgMHg2MTA4LCAweDA0YzAsCi0JMHgwODBjLCAweDYxMDEsIDB4MjA3OSwgMHgwMjYwLCAweDc5MzAsIDB4OTE4ZSwgMHgxMTAxLCAweDE1NTgsCi0JMHg3ODM0LCAweDkwMDUsIDB4MTU0MCwgMHg3OTAwLCAweDkxOGMsIDB4MDBmZiwgMHgxMTE4LCAweDc4MDQsCi0JMHg5MDA1LCAweDAxOTAsIDB4MDgwYywgMHg2MTAxLCAweDIwMTEsIDB4MDI2ZSwgMHgyMDE5LCAweDE4MDUsCi0JMHgyMGE5LCAweDAwMDQsIDB4MjIwYywgMHgyMzA0LCAweDkxMDIsIDB4MDIzMCwgMHgxMWEwLCAweDgyMTAsCi0JMHg4MzE4LCAweDFmMDQsIDB4NTlhMiwgMHgwMDc4LCAweDcwYTMsIDB4MDAwMCwgMHgwODBjLCAweDYxMDEsCi0JMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjYwLCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDFjMDAsCi0JMHgyMGE5LCAweDAwMTQsIDB4NDAwMywgMHg2MDQzLCAweDAwMDgsIDB4NjA0MywgMHgwMDAwLCAweDAwMTAsCi0JMHgwMGZlLCAweDAwMDUsIDB4NjA0MCwgMHg5MDg1LCAweDAxMDAsIDB4NjA0MiwgMHg2MDIwLCAweGQwYjQsCi0JMHgxZGI4LCAweDA4MGMsIDB4YWRiYywgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxYzAwLCAweDIwZTksCi0JMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHgyMGE5LCAweDAwMTQsIDB4NDAwMywgMHg2MGMzLCAweDAwMGMsCi0JMHgyMDExLCAweDE5ZjMsIDB4MjAxMywgMHgwMDAwLCAweDcwOTMsIDB4MDAwMCwgMHg2MGEzLCAweDAwNTYsCi0JMHg2MGE3LCAweDk1NzUsIDB4MDgwYywgMHhhNTBlLCAweDA4ZDgsIDB4MDAwNSwgMHg3MDk4LCAweDkwOGEsCi0JMHgwMDFkLCAweDFhMGMsIDB4MGRjNSwgMHgwMDBiLCAweDAwMDUsIDB4NWExNywgMHg1YTJhLCAweDVhNTMsCi0JMHg1YTczLCAweDVhOTksIDB4NWFjOCwgMHg1YWVlLCAweDViMjYsIDB4NWI0YywgMHg1YjdhLCAweDViYjUsCi0JMHg1YmVkLCAweDVjMGIsIDB4NWMzNiwgMHg1YzU4LCAweDVjNzMsIDB4NWM3ZCwgMHg1Y2IxLCAweDVjZDcsCi0JMHg1ZDA2LCAweDVkMmMsIDB4NWQ2NCwgMHg1ZGE4LCAweDVkZTUsIDB4NWUwNiwgMHg1ZTVmLCAweDVlODEsCi0JMHg1ZWFmLCAweDVlYWYsIDB4MDBjNiwgMHgyMDYxLCAweDE4MDAsIDB4NjAwMywgMHgwMDA3LCAweDIwNjEsCi0JMHgwMTAwLCAweDYwMDQsIDB4OTA4NCwgMHhmZmY5LCAweDYwMDYsIDB4MDBjZSwgMHgwMDA1LCAweDIwNjEsCi0JMHgwMTQwLCAweDYwNWIsIDB4YmM5NCwgMHg2MDVmLCAweGYwZjAsIDB4MjA2MSwgMHgwMTAwLCAweDYwNDMsCi0JMHgwMDAyLCAweDcwOWIsIDB4MDAwMSwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg1ZjkwLCAweDA4MGMsCi0JMHg4N2ExLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwODYsIDB4MDAxNCwgMHgxNTEwLCAweDYwNDIsCi0JMHg2MDIwLCAweGQwYjQsIDB4MTFmMCwgMHgwODBjLCAweDYxMDEsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsCi0JMHg5Mjk2LCAweDExMDIsIDB4MTFhMCwgMHg3ODM0LCAweDkwMDUsIDB4MTE4OCwgMHg3YTM4LCAweGQyZmMsCi0JMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHgyMDExLCAweDVmOTAsCi0JMHgwODBjLCAweDg3MDksIDB4NzA5YiwgMHgwMDEwLCAweDA4MGMsIDB4NWM3ZCwgMHgwMDEwLCAweDcwOTMsCi0JMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOWIsIDB4MDAwMywgMHg2MDQzLCAweDAwMDQsCi0JMHgyMDExLCAweDVmOTAsIDB4MDgwYywgMHg4NzA5LCAweDA4MGMsIDB4NjA4NSwgMHgyMDc5LCAweDAyNDAsCi0JMHg3ODMzLCAweDExMDIsIDB4NzgzNywgMHgwMDAwLCAweDIwYTksIDB4MDAwOCwgMHg5Zjg4LCAweDAwMGUsCi0JMHgyMDBiLCAweDAwMDAsIDB4ODEwOCwgMHgxZjA0LCAweDVhNjgsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsCi0JMHg1ZmJhLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsIDB4OTAwNSwgMHgwNTAwLCAweDIwMTEsCi0JMHg1ZjkwLCAweDA4MGMsIDB4ODcwOSwgMHg5MDg2LCAweDAwMTQsIDB4MTFiOCwgMHgwODBjLCAweDYxMDEsCi0JMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDIsIDB4MTE3OCwgMHg3ODM0LCAweDkwMDUsCi0JMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsCi0JMHgwMDAxLCAweDcwOWIsIDB4MDAwNCwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg2MGRkLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZjYsIDB4NzA5YiwgMHgwMDA1LCAweDA4MGMsIDB4NjA4NSwgMHgyMDc5LCAweDAyNDAsCi0JMHg3ODMzLCAweDExMDMsIDB4NzgzNywgMHgwMDAwLCAweDA4MGMsIDB4NjEwMSwgMHgwODBjLCAweDYwZTQsCi0JMHgxMTcwLCAweDcwODQsIDB4OTAwNSwgMHgxMTU4LCAweDcxNWMsIDB4OTE4NiwgMHhmZmZmLCAweDAxMzgsCi0JMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHg1ZjNkLCAweDAxNjgsIDB4MDgwYywgMHg2MGJhLCAweDIwYTksCi0JMHgwMDA4LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNmUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsCi0JMHgwMjRlLCAweDQwMDMsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NWZiYSwgMHgwMGZlLCAweDAwMDUsCi0JMHgwMGY2LCAweDcwOTAsIDB4OTAwNSwgMHgwNTAwLCAweDIwMTEsIDB4NWY5MCwgMHgwODBjLCAweDg3MDksCi0JMHg5MDg2LCAweDAwMTQsIDB4MTFiOCwgMHgwODBjLCAweDYxMDEsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsCi0JMHg5Mjk2LCAweDExMDMsIDB4MTE3OCwgMHg3ODM0LCAweDkwMDUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsCi0JMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg3MDliLCAweDAwMDYsCi0JMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg2MGRkLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOWIsCi0JMHgwMDA3LCAweDA4MGMsIDB4NjA4NSwgMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA0LCAweDc4MzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NjEwMSwgMHgwODBjLCAweDYwZTQsIDB4MTFiOCwgMHg3MDg0LCAweDkwMDUsCi0JMHgxMWEwLCAweDcxNjQsIDB4OTE4NiwgMHhmZmZmLCAweDAxODAsIDB4OTE4MCwgMHgzM2FjLCAweDIwMGQsCi0JMHg5MThjLCAweGZmMDAsIDB4ODEwZiwgMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHg1ZjNkLCAweDAxODAsCi0JMHgwODBjLCAweDUwY2YsIDB4MDExMCwgMHgwODBjLCAweDI4ZmQsIDB4MjBhOSwgMHgwMDA4LCAweDIwZTEsCi0JMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDQwMDMsCi0JMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg1ZmJhLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsCi0JMHg5MDA1LCAweDA1MDAsIDB4MjAxMSwgMHg1ZjkwLCAweDA4MGMsIDB4ODcwOSwgMHg5MDg2LCAweDAwMTQsCi0JMHgxMWI4LCAweDA4MGMsIDB4NjEwMSwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDQsCi0JMHgxMTc4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzQsCi0JMHg5MDA1LCAweDExMTAsIDB4NzBjNywgMHgwMDAxLCAweDcwOWIsIDB4MDAwOCwgMHgwMDI5LCAweDAwMTAsCi0JMHgwODBjLCAweDYwZGQsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5YiwgMHgwMDA5LCAweDA4MGMsCi0JMHg2MDg1LCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDUsIDB4NzgzNywgMHgwMTAwLCAweDA4MGMsCi0JMHg2MGU0LCAweDExNTAsIDB4NzA4NCwgMHg5MDA1LCAweDExMzgsIDB4MDgwYywgMHg1ZWIwLCAweDExODgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHgyOGZkLCAweDIwYTksIDB4MDAwOCwgMHgwODBjLCAweDYxMDEsCisJMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2UwLCAweDdhYTgsCisJMHhkMmRjLCAweDA5MDQsIDB4MzVlNywgMHgwMDE2LCAweDc5ODQsIDB4OTI4NCwgMHgxMDAwLCAweGMwZmQsCisJMHgwODBjLCAweDU3ODQsIDB4MDAxZSwgMHgxOTA0LCAweDM1ZTcsIDB4MDgwNCwgMHgzNWI1LCAweDAwZjYsCisJMHgyZDc4LCAweGFhYjAsIDB4MDAyMSwgMHgwMGZlLCAweDAwMDUsIDB4YWFiMCwgMHhjMmQ1LCAweGQyZGMsCisJMHgwMTUwLCAweDAwMTYsIDB4YTk5OCwgMHg5Mjg0LCAweDE0MDAsIDB4YzBmZCwgMHgwODBjLCAweDU3ODQsCisJMHgwMDFlLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsCisJMHgwODA0LCAweDM1ZTcsIDB4MDgwYywgMHg1N2U5LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsCisJMHgzNWU3LCAweDc5ODQsIDB4N2VhOCwgMHg5NmI0LCAweDAwZmYsIDB4MDgwYywgMHg2NzI0LCAweDE5MDQsCisJMHgzNWVhLCAweDkxODYsIDB4MDA3ZiwgMHgwMTM4LCAweDA4MGMsIDB4NmFhMywgMHgwMTIwLCAweDIwMDksCisJMHgwMDA5LCAweDA4MDQsIDB4MzVlNywgMHgwODBjLCAweDRiZTQsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsCisJMHgwODA0LCAweDM1ZTcsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDIwMDEsCisJMHgwMTAwLCAweDgwMDcsIDB4YTgwYSwgMHgwODBjLCAweGQyYmQsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsCisJMHgwODA0LCAweDM1ZTcsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTViZiwgMHgwMDA1LCAweGE4MDgsCisJMHg4MDA3LCAweDkwODYsIDB4MDEwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM1ZTcsCisJMHhhOGUwLCAweGE4NjYsIDB4YTgxMCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHg4MDBjLCAweGE4MTQsCisJMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHg4MDA0LCAweDkwODAsIDB4MDAwMiwgMHg5MTA4LCAweDg5MDYsCisJMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMDQsCisJMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweDA4MDQsIDB4NGMzMCwgMHgwODBjLCAweDRiZTQsCisJMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM1ZTcsIDB4Nzk4NCwgMHg5MTk0LCAweGZmMDAsCisJMHg5MThjLCAweDAwZmYsIDB4ODIxNywgMHg4MmZmLCAweDExMTgsIDB4NzAyMywgMHgxOWI0LCAweDAwNDAsCisJMHg5MmM2LCAweDAwMDEsIDB4MTExOCwgMHg3MDIzLCAweDE5Y2UsIDB4MDAxMCwgMHgwODA0LCAweDM1ZWEsCisJMHgyMDA5LCAweDAwMWEsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHhhODVjLCAweDkwODAsCisJMHgwMDE5LCAweGFmNjAsIDB4MDgwYywgMHg0YzJkLCAweDcwMWYsIDB4NTYwZiwgMHgwMDA1LCAweDIwMDEsCisJMHgxODJlLCAweDIwMDMsIDB4MDAwMSwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgyMDk4LCAweGE4NjAsCisJMHgyMGUwLCAweDIwYTksIDB4MDAxYSwgMHg3MDIwLCAweDIwYTAsIDB4MjBlOSwgMHgwMDAxLCAweDQwMDMsCisJMHgwODA0LCAweDM1YjUsIDB4MDgwYywgMHg0YmU0LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsCisJMHgzNWU3LCAweDc5ODQsIDB4OTE5NCwgMHhmZjAwLCAweDkxOGMsIDB4MDBmZiwgMHg4MjE3LCAweDgyZmYsCisJMHgxMTE4LCAweDIwOTksIDB4MTliNCwgMHgwMDQwLCAweDkyYzYsIDB4MDAwMSwgMHgxMTE4LCAweDIwOTksCisJMHgxOWNlLCAweDAwMTAsIDB4MDgwNCwgMHgzNWVhLCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDIwYTAsCisJMHhhODYwLCAweDIwZTgsIDB4MjBhOSwgMHgwMDFhLCAweDIwZTEsIDB4MDAwMSwgMHg0MDAzLCAweDIwMDksCisJMHgwMDFhLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksCisJMHhhZjYwLCAweDA4MDQsIDB4NGMzMCwgMHg3ODg0LCAweDkwOGEsIDB4MTAwMCwgMHgxYTA0LCAweDM1ZWEsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHg5MTA4LCAweDAwYzYsCisJMHgyMDYxLCAweDE5ZmIsIDB4NjE0YSwgMHgwMGNlLCAweDAxMmUsIDB4MDgwNCwgMHgzNWI1LCAweDAwYzYsCisJMHgwODBjLCAweDc2MzcsIDB4MTE2MCwgMHgwODBjLCAweDc5MzIsIDB4MDgwYywgMHg2MTJlLCAweDkwODUsCisJMHgwMDAxLCAweDA4MGMsIDB4NzY3YiwgMHgwODBjLCAweDc1NjMsIDB4MDgwYywgMHgwZGM1LCAweDIwNjEsCisJMHgxODAwLCAweDYwMzAsIDB4YzA5ZCwgMHg2MDMyLCAweDA4MGMsIDB4NWZlZCwgMHgwMGNlLCAweDAwMDUsCisJMHgwMGM2LCAweDIwMDEsIDB4MTgwMCwgMHgyMDA0LCAweDkwOGUsIDB4MDAwMCwgMHgwOTA0LCAweDM1ZTcsCisJMHg3ODg0LCAweDkwMDUsIDB4MDE4OCwgMHg3ODg4LCAweDIwNjEsIDB4MTk5YywgMHgyYzBjLCAweDIwNjIsCisJMHgwODBjLCAweDJjNDksIDB4MDFhMCwgMHgwODBjLCAweDJjNTEsIDB4MDE4OCwgMHgwODBjLCAweDJjNTksCisJMHgwMTcwLCAweDIxNjIsIDB4MDgwNCwgMHgzNWVhLCAweDIwNjEsIDB4MDEwMCwgMHg2MDM4LCAweDkwODYsCisJMHgwMDA3LCAweDExMTgsIDB4MjAwOSwgMHgwMDAxLCAweDAwMTAsIDB4MjAwOSwgMHgwMDAwLCAweDc4ODQsCisJMHg5MDg2LCAweDAwMDIsIDB4MTU2OCwgMHgyMDYxLCAweDAxMDAsIDB4NjAyOCwgMHhjMDljLCAweDYwMmEsCisJMHgwMDI2LCAweDIwMTEsIDB4MDAwMywgMHgwODBjLCAweGFhYmYsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsCisJMHhhYWM5LCAweDAwMmUsIDB4MDgwYywgMHhhOWQzLCAweDAwMzYsIDB4OTAxZSwgMHgwODBjLCAweGFhNDksCisJMHgwMDNlLCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweGYwN2YsIDB4MDgwYywgMHhmMDlhLCAweDkwODUsCisJMHgwMDAxLCAweDA4MGMsIDB4NzY3YiwgMHg5MDA2LCAweDA4MGMsIDB4MmQzOSwgMHgyMDAxLCAweDE4MDAsCisJMHgyMDAzLCAweDAwMDQsIDB4MjAwMSwgMHgxOWE4LCAweDIwMDMsIDB4MDAwMCwgMHg2MDI3LCAweDAwMDgsCisJMHgwMGNlLCAweDA4MDQsIDB4MzViNSwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsCisJMHgzNWU3LCAweDA4MGMsIDB4NTdlOSwgMHgwMTIwLCAweDIwMDksIDB4MDAwNywgMHgwODA0LCAweDM1ZTcsCisJMHg3OTg0LCAweDdlYTgsIDB4OTZiNCwgMHgwMGZmLCAweDA4MGMsIDB4NjcyNCwgMHgxOTA0LCAweDM1ZWEsCisJMHg5MTg2LCAweDAwN2YsIDB4MDEzOCwgMHgwODBjLCAweDZhYTMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDksCisJMHgwODA0LCAweDM1ZTcsIDB4MDgwYywgMHg0YmU0LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsCisJMHgzNWU3LCAweGE4NjcsIDB4MDAwMCwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHgwODBjLCAweGQyYzAsCisJMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDM1ZTcsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsCisJMHg1NzEyLCAweDAwMDUsIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDQsCisJMHgwODA0LCAweDM1ZTcsIDB4YThlMCwgMHhhODY2LCAweGE4MzQsIDB4ODAwNywgMHg4MDBjLCAweGE4NWMsCisJMHg5MDgwLCAweDAwMGMsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHhhZjYwLCAweDA4MDQsCisJMHg0YzMwLCAweGE4OTgsIDB4OTA4NiwgMHgwMDBkLCAweDE5MDQsIDB4MzVlNywgMHgyMDIxLCAweDQwMDUsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LCAweDU3MzYsIDB4MDAxMCwgMHgwMTJlLCAweDBjYzAsCisJMHg3YzM2LCAweDk0ODYsIDB4NDAwMCwgMHgwMTE4LCAweDc4MzMsIDB4MDAxMSwgMHgwMDEwLCAweDc4MzMsCisJMHgwMDEwLCAweDc4ODMsIDB4NDAwNSwgMHhhOTk4LCAweDc5ODYsIDB4YTlhNCwgMHg3OTlhLCAweGE5YTgsCisJMHg3OTllLCAweDA4MGMsIDB4NGMyMCwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsCisJMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHg3MDA3LCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDcwMGYsCisJMHgwMDAwLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGM2LCAweDIwNjEsCisJMHgxOWZiLCAweDc5ODQsIDB4NjE1YSwgMHg2MTU2LCAweDYwNWYsIDB4MDAwMCwgMHg2MDUzLCAweDAwMDksCisJMHg3ODk4LCAweDYwNzIsIDB4Nzg5YywgMHg2MDZlLCAweDc4ODgsIDB4NjA2YSwgMHg3ODhjLCAweDYwNjYsCisJMHgyMDAxLCAweDFhMGIsIDB4MjA0NCwgMHgyMDAxLCAweDFhMTIsIDB4YTA3NiwgMHhhMDYwLCAweGEwNzIsCisJMHhhMDdiLCAweDAwMDEsIDB4YTA3ZiwgMHgwMDAyLCAweGEwNmIsIDB4MDAwMCwgMHhhMDlmLCAweDAwMDAsCisJMHgwMGNlLCAweDAxMmUsIDB4MDgwNCwgMHgzNWI1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYjYsCisJMHgwMGM2LCAweDkwZTQsIDB4YzAwMCwgMHgwMTY4LCAweDAwMDYsIDB4ZDBkNCwgMHgwMTMwLCAweDAwMzYsCisJMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHgzMzZhLCAweDAwM2UsIDB4MDgwYywgMHhkMTI1LCAweDAwMGUsCisJMHgxMTk4LCAweGQwZTQsIDB4MDE2MCwgMHg5MTgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDVkLCAweDAxNjAsCisJMHgwODBjLCAweDYxNDgsIDB4MDgwYywgMHhiMjNkLCAweDAxMTAsIDB4YjgxNywgMHgwMDAwLCAweDkwMDYsCisJMHgwMGNlLCAweDAwYmUsIDB4MDEyZSwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwY2M4LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDE1NiwgMHgyMDEwLCAweDkwMGUsIDB4MjBhOSwgMHgwODAwLCAweDAwMTYsCisJMHg5MTgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDA1LCAweDAxODgsIDB4OTE4NiwgMHgwMDdlLCAweDAxNzAsCisJMHg5MTg2LCAweDAwN2YsIDB4MDE1OCwgMHg5MTg2LCAweDAwODAsIDB4MDE0MCwgMHg5MTg2LCAweDAwZmYsCisJMHgwMTI4LCAweDAwMjYsIDB4MjIwMCwgMHgwODBjLCAweDU3ODQsIDB4MDAyZSwgMHgwMDFlLCAweDgxMDgsCisJMHgxZjA0LCAweDU3YjcsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MjAwMSwgMHgxODQ4LCAweDIwMDQsCisJMHgwMDA1LCAweDIwMDEsIDB4MTg2NywgMHgyMDA0LCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDE4MTAsCisJMHgyMDA0LCAweGQwZDQsIDB4MDAwZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwYjQsCisJMHgwMDA1LCAweDIwMDEsIDB4MTgwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgwMDA1LCAweDAwMTYsCisJMHgwMGU2LCAweDIwNzEsIDB4MTg5ZSwgMHg3MTA4LCAweDkxMGQsIDB4NzEwYSwgMHgwMGVlLCAweDAwMWUsCisJMHgwMDA1LCAweDc5YTQsIDB4ODFmZiwgMHgwOTA0LCAweDM1ZWEsIDB4OTE4MiwgMHgwMDgxLCAweDFhMDQsCisJMHgzNWVhLCAweDgxMGMsIDB4MDAxNiwgMHgwODBjLCAweDRiZTQsIDB4MDE3MCwgMHgwODBjLCAweDBmMTYsCisJMHgyMTAwLCAweDIyMzgsIDB4N2Q4NCwgMHg3Yzg4LCAweDdiOGMsIDB4N2E5MCwgMHgwMDFlLCAweDA4MGMsCisJMHg0YzJkLCAweDcwMWYsIDB4NTgxOSwgMHgwMDA1LCAweDAwMWUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsCisJMHgzNWU3LCAweDIwNzksIDB4MDAwMCwgMHg3ZDk0LCAweDdjOTgsIDB4N2JhOCwgMHg3YWFjLCAweDc5YTQsCisJMHg4MTBjLCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LCAweGE3NzAsIDB4YTA3NCwgMHgyMDcxLCAweDE4OWUsCisJMHgwODBjLCAweDRjMzAsIDB4NzAxZiwgMHg1ODJkLCAweDAwMDUsIDB4MjA2MSwgMHgxOGI4LCAweDJjNDQsCisJMHgwMDE2LCAweDAwMjYsIDB4YTI3MCwgMHhhMTc0LCAweDA4MGMsIDB4MGYxZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwODBjLCAweDBmY2IsIDB4OTAwNiwgMHhhODAyLCAweGE4MDYsIDB4MDgwNCwgMHgzNWI1LCAweDAxMjYsCisJMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgwMWM2LCAweDAxZDYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsCisJMHgwMGY2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAyMDAsIDB4MjA3MSwgMHgxODAwLCAweDYwNDQsCisJMHhkMGE0LCAweDExZTgsIDB4ZDA4NCwgMHgwMTE4LCAweDA4MGMsIDB4NTllZCwgMHgwMDY4LCAweGQwOGMsCisJMHgwMTE4LCAweDA4MGMsIDB4NThmNiwgMHgwMDQwLCAweGQwOTQsIDB4MDExOCwgMHgwODBjLCAweDU4YzYsCisJMHgwMDE4LCAweGQwOWMsIDB4MDEwOCwgMHgwMDk5LCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsCisJMHgwMWRlLCAweDAxY2UsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDEyZSwgMHgwMDA1LCAweDAwMTYsCisJMHg2MTI4LCAweGQxOWMsIDB4MTExMCwgMHhjMTlkLCAweDYxMmEsIDB4MDAxZSwgMHgwYzY4LCAweDcwMzAsCisJMHhkMDljLCAweDExMjAsIDB4NjAwNCwgMHg5MDg1LCAweDAwMDIsIDB4NjAwNiwgMHg3MDk4LCAweDkwMDUsCisJMHgwMTIwLCAweDcwOWIsIDB4MDAwMCwgMHg3MDkzLCAweDAwMDAsIDB4NjI0YywgMHg5Mjg2LCAweGYwZjAsCisJMHgxMTUwLCAweDYwNDgsIDB4OTA4NiwgMHhmMGYwLCAweDAxMzAsIDB4NjI0YSwgMHg2MDQzLCAweDAwOTAsCisJMHg2MDQzLCAweDAwMTAsIDB4MDQ5MCwgMHg5Mjk0LCAweGZmMDAsIDB4OTI5NiwgMHhmNzAwLCAweDAxNzgsCisJMHg3MTM4LCAweGQxYTQsIDB4MTE2MCwgMHg2MjQwLCAweDkyOTUsIDB4MDEwMCwgMHg2MjQyLCAweDkyOTQsCisJMHgwMDEwLCAweDAxMjgsIDB4MjAwOSwgMHgwMGY3LCAweDA4MGMsIDB4NjBhYSwgMHgwMGYwLCAweDYwNDAsCisJMHg5MDg0LCAweDAwMTAsIDB4OTA4NSwgMHgwMTQwLCAweDYwNDIsIDB4NjA0MywgMHgwMDAwLCAweDcwODcsCisJMHgwMDAwLCAweDcwYTMsIDB4MDAwMSwgMHg3MGM3LCAweDAwMDAsIDB4NzBkZiwgMHgwMDAwLCAweDIwMDksCisJMHgxYzgwLCAweDIwMGIsIDB4MDAwMCwgMHg3MDk3LCAweDAwMDAsIDB4NzA4YiwgMHgwMDBmLCAweDIwMDksCisJMHgwMDBmLCAweDIwMTEsIDB4NWY5MCwgMHgwODBjLCAweDg4ZDUsIDB4MDAwNSwgMHgyMDAxLCAweDE4NjksCisJMHgyMDA0LCAweGQwOGMsIDB4MDExMCwgMHg3MDVmLCAweGZmZmYsIDB4NzA4OCwgMHg5MDA1LCAweDE1MjgsCisJMHgyMDExLCAweDVmOTAsIDB4MDgwYywgMHg4ODNkLCAweDYwNDAsIDB4OTA5NCwgMHgwMDEwLCAweDkyODUsCisJMHgwMDIwLCAweDYwNDIsIDB4MjBhOSwgMHgwMGM4LCAweDYwNDQsIDB4ZDA4YywgMHgxMTY4LCAweDFmMDQsCisJMHg1OGRjLCAweDYyNDIsIDB4NzA5YiwgMHgwMDAwLCAweDYwNDAsIDB4OTA5NCwgMHgwMDEwLCAweDkyODUsCisJMHgwMDgwLCAweDYwNDIsIDB4NjI0MiwgMHgwMDQ4LCAweDYyNDIsIDB4NzA5YiwgMHgwMDAwLCAweDcwOGYsCisJMHgwMDAwLCAweDkwMDYsIDB4MDgwYywgMHg2MTMzLCAweDAwMDAsIDB4MDAwNSwgMHg3MDhjLCAweDkwOGEsCisJMHgwMDAzLCAweDFhMGMsIDB4MGRjNSwgMHgwMDBiLCAweDAwMDUsIDB4NTkwMCwgMHg1OTUxLCAweDU5ZWMsCisJMHgwMGY2LCAweDAwMTYsIDB4NjkwMCwgMHg5MThjLCAweDA4MDAsIDB4NzA4ZiwgMHgwMDAxLCAweDIwMDEsCisJMHgwMTVkLCAweDIwMDMsIDB4MDAwMCwgMHg2ODAzLCAweDAwZmMsIDB4MjBhOSwgMHgwMDA0LCAweDY4MDAsCisJMHg5MDg0LCAweDAwZmMsIDB4MDEyMCwgMHgxZjA0LCAweDU5MGYsIDB4MDgwYywgMHgwZGM1LCAweDY4YTAsCisJMHg2OGEyLCAweDY4OWMsIDB4Njg5ZSwgMHg2ODk4LCAweDY4OWEsIDB4YTAwMSwgMHg5MThkLCAweDE2MDAsCisJMHg2OTAyLCAweDAwMWUsIDB4NjgzNywgMHgwMDIwLCAweDA4MGMsIDB4NjEwZiwgMHgyMDc5LCAweDFjMDAsCisJMHg3ODMzLCAweDExMDEsIDB4NzgzNywgMHgwMDAwLCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDE4MDUsCisJMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxYzBlLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLCAweDA4MGMsCisJMHhhZjhlLCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDFjMDAsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsCisJMHgwMjQwLCAweDIwYTksIDB4MDAxNCwgMHg0MDAzLCAweDYwYzMsIDB4MDAwYywgMHg2MDBmLCAweDAwMDAsCisJMHgwODBjLCAweDVmYzEsIDB4MDBmZSwgMHg5MDA2LCAweDcwOTIsIDB4NjA0MywgMHgwMDA4LCAweDYwNDIsCisJMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg3MDkzLCAweDAwMDAsIDB4OTAyNSwgMHgwOTA0LCAweDU5YzksCisJMHg2MDIwLCAweGQwYjQsIDB4MTkwNCwgMHg1OWM3LCAweDcxYTAsIDB4ODFmZiwgMHgwOTA0LCAweDU5YjUsCisJMHg5NDg2LCAweDAwMGMsIDB4MTkwNCwgMHg1OWMyLCAweDk0ODAsIDB4MDAxOCwgMHg4MDA0LCAweDIwYTgsCisJMHgwODBjLCAweDYxMDgsIDB4MjAxMSwgMHgwMjYwLCAweDIwMTksIDB4MWMwMCwgMHgyMjBjLCAweDIzMDQsCisJMHg5MTA2LCAweDExZTgsIDB4ODIxMCwgMHg4MzE4LCAweDFmMDQsIDB4NTk2ZSwgMHg2MDQzLCAweDAwMDQsCisJMHgyMDYxLCAweDAxNDAsIDB4NjA1YiwgMHhiYzk0LCAweDYwNWYsIDB4ZjBmMCwgMHgyMDYxLCAweDAxMDAsCisJMHg2MDQzLCAweDAwMDYsIDB4NzA4ZiwgMHgwMDAyLCAweDcwOWIsIDB4MDAwMiwgMHgyMDA5LCAweDA3ZDAsCisJMHgyMDExLCAweDVmOTcsIDB4MDgwYywgMHg4OGQ1LCAweDA4MGMsIDB4NjEwZiwgMHgwNGMwLCAweDA4MGMsCisJMHg2MTA4LCAweDIwNzksIDB4MDI2MCwgMHg3OTMwLCAweDkxOGUsIDB4MTEwMSwgMHgxNTU4LCAweDc4MzQsCisJMHg5MDA1LCAweDE1NDAsIDB4NzkwMCwgMHg5MThjLCAweDAwZmYsIDB4MTExOCwgMHg3ODA0LCAweDkwMDUsCisJMHgwMTkwLCAweDA4MGMsIDB4NjEwOCwgMHgyMDExLCAweDAyNmUsIDB4MjAxOSwgMHgxODA1LCAweDIwYTksCisJMHgwMDA0LCAweDIyMGMsIDB4MjMwNCwgMHg5MTAyLCAweDAyMzAsIDB4MTFhMCwgMHg4MjEwLCAweDgzMTgsCisJMHgxZjA0LCAweDU5YTksIDB4MDA3OCwgMHg3MGEzLCAweDAwMDAsIDB4MDgwYywgMHg2MTA4LCAweDIwZTEsCisJMHgwMDAwLCAweDIwOTksIDB4MDI2MCwgMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxYzAwLCAweDIwYTksCisJMHgwMDE0LCAweDQwMDMsIDB4NjA0MywgMHgwMDA4LCAweDYwNDMsIDB4MDAwMCwgMHgwMDEwLCAweDAwZmUsCisJMHgwMDA1LCAweDYwNDAsIDB4OTA4NSwgMHgwMTAwLCAweDYwNDIsIDB4NjAyMCwgMHhkMGI0LCAweDFkYjgsCisJMHgwODBjLCAweGFmOGUsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MWMwMCwgMHgyMGU5LCAweDAwMDAsCisJMHgyMGExLCAweDAyNDAsIDB4MjBhOSwgMHgwMDE0LCAweDQwMDMsIDB4NjBjMywgMHgwMDBjLCAweDIwMTEsCisJMHgxOWYyLCAweDIwMTMsIDB4MDAwMCwgMHg3MDkzLCAweDAwMDAsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsCisJMHg5NTc1LCAweDA4MGMsIDB4YTZlMCwgMHgwOGQ4LCAweDAwMDUsIDB4NzA5OCwgMHg5MDhhLCAweDAwMWQsCisJMHgxYTBjLCAweDBkYzUsIDB4MDAwYiwgMHgwMDA1LCAweDVhMWUsIDB4NWEzMSwgMHg1YTVhLCAweDVhN2EsCisJMHg1YWEwLCAweDVhY2YsIDB4NWFmNSwgMHg1YjJkLCAweDViNTMsIDB4NWI4MSwgMHg1YmJjLCAweDViZjQsCisJMHg1YzEyLCAweDVjM2QsIDB4NWM1ZiwgMHg1YzdhLCAweDVjODQsIDB4NWNiOCwgMHg1Y2RlLCAweDVkMGQsCisJMHg1ZDMzLCAweDVkNmIsIDB4NWRhZiwgMHg1ZGVjLCAweDVlMGQsIDB4NWU2NiwgMHg1ZTg4LCAweDVlYjYsCisJMHg1ZWI2LCAweDAwYzYsIDB4MjA2MSwgMHgxODAwLCAweDYwMDMsIDB4MDAwNywgMHgyMDYxLCAweDAxMDAsCisJMHg2MDA0LCAweDkwODQsIDB4ZmZmOSwgMHg2MDA2LCAweDAwY2UsIDB4MDAwNSwgMHgyMDYxLCAweDAxNDAsCisJMHg2MDViLCAweGJjOTQsIDB4NjA1ZiwgMHhmMGYwLCAweDIwNjEsIDB4MDEwMCwgMHg2MDQzLCAweDAwMDIsCisJMHg3MDliLCAweDAwMDEsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NWY5NywgMHgwODBjLCAweDg4ZDUsCisJMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDg2LCAweDAwMTQsIDB4MTUxMCwgMHg2MDQyLCAweDYwMjAsCisJMHhkMGI0LCAweDExZjAsIDB4MDgwYywgMHg2MTA4LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsCisJMHgxMTAyLCAweDExYTAsIDB4NzgzNCwgMHg5MDA1LCAweDExODgsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsCisJMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4MjAxMSwgMHg1Zjk3LCAweDA4MGMsCisJMHg4ODNkLCAweDcwOWIsIDB4MDAxMCwgMHgwODBjLCAweDVjODQsIDB4MDAxMCwgMHg3MDkzLCAweDAwMDAsCisJMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLCAweDAwMDMsIDB4NjA0MywgMHgwMDA0LCAweDIwMTEsCisJMHg1Zjk3LCAweDA4MGMsIDB4ODgzZCwgMHgwODBjLCAweDYwOGMsIDB4MjA3OSwgMHgwMjQwLCAweDc4MzMsCisJMHgxMTAyLCAweDc4MzcsIDB4MDAwMCwgMHgyMGE5LCAweDAwMDgsIDB4OWY4OCwgMHgwMDBlLCAweDIwMGIsCisJMHgwMDAwLCAweDgxMDgsIDB4MWYwNCwgMHg1YTZmLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDVmYzEsCisJMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDUwMCwgMHgyMDExLCAweDVmOTcsCisJMHgwODBjLCAweDg4M2QsIDB4OTA4NiwgMHgwMDE0LCAweDExYjgsIDB4MDgwYywgMHg2MTA4LCAweDIwNzksCisJMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTAyLCAweDExNzgsIDB4NzgzNCwgMHg5MDA1LCAweDExNjAsCisJMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LCAweDAwMDEsCisJMHg3MDliLCAweDAwMDQsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NjBlNCwgMHgwMGZlLCAweDAwMDUsCisJMHgwMGY2LCAweDcwOWIsIDB4MDAwNSwgMHgwODBjLCAweDYwOGMsIDB4MjA3OSwgMHgwMjQwLCAweDc4MzMsCisJMHgxMTAzLCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLCAweDYxMDgsIDB4MDgwYywgMHg2MGViLCAweDExNzAsCisJMHg3MDg0LCAweDkwMDUsIDB4MTE1OCwgMHg3MTVjLCAweDkxODYsIDB4ZmZmZiwgMHgwMTM4LCAweDIwMTEsCisJMHgwMDA4LCAweDA4MGMsIDB4NWY0NCwgMHgwMTY4LCAweDA4MGMsIDB4NjBjMSwgMHgyMGE5LCAweDAwMDgsCiAJMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsCi0JMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDVmYmEsIDB4MDAxMCwgMHgwODBjLCAweDVhMGEsCi0JMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDVhOCwgMHgyMDExLCAweDVmOTAsCi0JMHgwODBjLCAweDg3MDksIDB4OTA4NiwgMHgwMDE0LCAweDE1NjAsIDB4MDgwYywgMHg2MTAxLCAweDIwNzksCi0JMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA1LCAweDE1MjAsIDB4NzgzNCwgMHg5MDg0LCAweDAxMDAsCi0JMHgyMDExLCAweDAxMDAsIDB4OTIxZSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzQsCi0JMHg5MDA1LCAweDExMTAsIDB4NzBjNywgMHgwMDAxLCAweDcwOWIsIDB4MDAwYSwgMHgwMGIxLCAweDAwOTgsCi0JMHg5MDA1LCAweDExNzgsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBjNCwgMHg5MDA1LCAweDExMTAsCi0JMHg3MGM3LCAweDAwMDEsIDB4NzA5NywgMHgwMDAwLCAweDcwOWIsIDB4MDAwZSwgMHgwODBjLCAweDVjNTgsCi0JMHgwMDEwLCAweDA4MGMsIDB4NjBkZCwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLCAweDAwMGIsCi0JMHgyMDExLCAweDFjMGUsIDB4MjBlOSwgMHgwMDAxLCAweDIyYTAsIDB4MjBhOSwgMHgwMDQwLCAweDIwMTksCi0JMHhmZmZmLCAweDQzMDQsIDB4MDgwYywgMHg2MDg1LCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDYsCi0JMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MGU0LCAweDAxMTgsIDB4MjAxMywgMHgwMDAwLCAweDAwMjAsCi0JMHg3MDYwLCAweDkwODUsIDB4MDEwMCwgMHgyMDEyLCAweDIwYTksIDB4MDA0MCwgMHgyMDA5LCAweDAyNGUsCi0JMHgyMDExLCAweDFjMGUsIDB4MjIwZSwgMHg4MjEwLCAweDgxMDgsIDB4OTE4NiwgMHgwMjYwLCAweDExMjgsCi0JMHg2ODEwLCAweDgwMDAsIDB4NjgxMiwgMHgyMDA5LCAweDAyNDAsIDB4MWYwNCwgMHg1YmRhLCAweDYwYzMsCi0JMHgwMDg0LCAweDA4MGMsIDB4NWZiYSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsCi0JMHgwMWMwLCAweDIwMTEsIDB4NWY5MCwgMHgwODBjLCAweDg3MDksIDB4OTA4NiwgMHgwMDg0LCAweDExNzgsCi0JMHgwODBjLCAweDYxMDEsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA2LCAweDExMzgsCi0JMHg3ODM0LCAweDkwMDUsIDB4MTEyMCwgMHg3MDliLCAweDAwMGMsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsCi0JMHg2MGRkLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOWIsIDB4MDAwZCwgMHgwODBjLCAweDYwODUsCi0JMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA3LCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLCAweDYxMDEsCi0JMHgyMGE5LCAweDAwNDAsIDB4MjAxMSwgMHgwMjZlLCAweDIwMDksIDB4MDI0ZSwgMHgyMjBlLCAweDgyMTAsCi0JMHg4MTA4LCAweDkxODYsIDB4MDI2MCwgMHgxMTUwLCAweDY4MTAsIDB4ODAwMCwgMHg2ODEyLCAweDIwMDksCi0JMHgwMjQwLCAweDY4MTQsIDB4ODAwMCwgMHg2ODE2LCAweDIwMTEsIDB4MDI2MCwgMHgxZjA0LCAweDVjMWUsCi0JMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg1ZmJhLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsCi0JMHg5MDA1LCAweDAxZTAsIDB4MjAxMSwgMHg1ZjkwLCAweDA4MGMsIDB4ODcwOSwgMHg5MDg2LCAweDAwODQsCi0JMHgxMTk4LCAweDA4MGMsIDB4NjEwMSwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDcsCi0JMHgxMTU4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTQwLCAweDcwOTcsIDB4MDAwMSwgMHgwODBjLCAweDYwNTcsCi0JMHg3MDliLCAweDAwMGUsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NjBkZCwgMHgwMGZlLCAweDAwMDUsCi0JMHg5MThkLCAweDAwMDEsIDB4MDgwYywgMHg2MTJjLCAweDcwOWIsIDB4MDAwZiwgMHg3MDkzLCAweDAwMDAsCi0JMHgyMDYxLCAweDAxNDAsIDB4NjA1YiwgMHhiYzg1LCAweDYwNWYsIDB4YjViNSwgMHgyMDYxLCAweDAxMDAsCi0JMHg2MDQzLCAweDAwMDUsIDB4NjA0MywgMHgwMDA0LCAweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDVmOTAsCi0JMHgwODBjLCAweDg2ZmQsIDB4MDAwNSwgMHg3MDkwLCAweDkwMDUsIDB4MDEzMCwgMHgyMDExLCAweDVmOTAsCi0JMHgwODBjLCAweDg3MDksIDB4NzA5YiwgMHgwMDAwLCAweDAwMDUsIDB4NzA5YiwgMHgwMDExLCAweDA4MGMsCi0JMHhhZGJjLCAweDA4MGMsIDB4NjEwMSwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjYwLCAweDIwZTksCi0JMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHg3NDkwLCAweDk0ODAsIDB4MDAxOCwgMHg5MDgwLCAweDAwMDcsCi0JMHg5MDg0LCAweDAzZjgsIDB4ODAwNCwgMHgyMGE4LCAweDQwMDMsIDB4MDgwYywgMHg2MGU0LCAweDExYTAsCi0JMHg3MTdjLCAweDgxZmYsIDB4MDE4OCwgMHg5MDBlLCAweDcwODAsIDB4OTA4NCwgMHgwMGZmLCAweDAxNjAsCi0JMHgwODBjLCAweDI4OTQsIDB4OTE4NiwgMHgwMDdlLCAweDAxMzgsIDB4OTE4NiwgMHgwMDgwLCAweDAxMjAsCi0JMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHg1ZjNkLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDVmYmEsCi0JMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LCAweDA1MDAsIDB4MjAxMSwgMHg1ZjkwLCAweDA4MGMsCi0JMHg4NzA5LCAweDkwODYsIDB4MDAxNCwgMHgxMWI4LCAweDA4MGMsIDB4NjEwMSwgMHgyMDc5LCAweDAyNjAsCi0JMHg3YTMwLCAweDkyOTYsIDB4MTEwMywgMHgxMTc4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTYwLCAweDdhMzgsCi0JMHhkMmZjLCAweDAxMjgsIDB4NzBjNCwgMHg5MDA1LCAweDExMTAsIDB4NzBjNywgMHgwMDAxLCAweDcwOWIsCi0JMHgwMDEyLCAweDAwMjksIDB4MDAxMCwgMHg3MDkzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsCi0JMHg3MDliLCAweDAwMTMsIDB4MDgwYywgMHg2MDkzLCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDMsCi0JMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MTAxLCAweDA4MGMsIDB4NjBlNCwgMHgxMTcwLCAweDcwODQsCi0JMHg5MDA1LCAweDExNTgsIDB4NzE1YywgMHg5MTg2LCAweGZmZmYsIDB4MDEzOCwgMHgyMDExLCAweDAwMDgsCi0JMHgwODBjLCAweDVmM2QsIDB4MDE2OCwgMHgwODBjLCAweDYwYmEsIDB4MjBhOSwgMHgwMDA4LCAweDIwZTEsCisJMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDVmYzEsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsCisJMHg3MDkwLCAweDkwMDUsIDB4MDUwMCwgMHgyMDExLCAweDVmOTcsIDB4MDgwYywgMHg4ODNkLCAweDkwODYsCisJMHgwMDE0LCAweDExYjgsIDB4MDgwYywgMHg2MTA4LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsCisJMHgxMTAzLCAweDExNzgsIDB4NzgzNCwgMHg5MDA1LCAweDExNjAsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsCisJMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4NzA5YiwgMHgwMDA2LCAweDAwMjksCisJMHgwMDEwLCAweDA4MGMsIDB4NjBlNCwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLCAweDAwMDcsCisJMHgwODBjLCAweDYwOGMsIDB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwNCwgMHg3ODM3LCAweDAwMDAsCisJMHgwODBjLCAweDYxMDgsIDB4MDgwYywgMHg2MGViLCAweDExYjgsIDB4NzA4NCwgMHg5MDA1LCAweDExYTAsCisJMHg3MTY0LCAweDkxODYsIDB4ZmZmZiwgMHgwMTgwLCAweDkxODAsIDB4MzNiNiwgMHgyMDBkLCAweDkxOGMsCisJMHhmZjAwLCAweDgxMGYsIDB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4NWY0NCwgMHgwMTgwLCAweDA4MGMsCisJMHg1MGQxLCAweDAxMTAsIDB4MDgwYywgMHgyOGRjLCAweDIwYTksIDB4MDAwOCwgMHgyMGUxLCAweDAwMDAsCisJMHgyMDk5LCAweDAyNmUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0ZSwgMHg0MDAzLCAweDYwYzMsCisJMHgwMDE0LCAweDA4MGMsIDB4NWZjMSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsCisJMHgwNTAwLCAweDIwMTEsIDB4NWY5NywgMHgwODBjLCAweDg4M2QsIDB4OTA4NiwgMHgwMDE0LCAweDExYjgsCisJMHgwODBjLCAweDYxMDgsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA0LCAweDExNzgsCisJMHg3ODM0LCAweDkwMDUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LCAweDkwMDUsCisJMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg3MDliLCAweDAwMDgsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsCisJMHg2MGU0LCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOWIsIDB4MDAwOSwgMHgwODBjLCAweDYwOGMsCisJMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA1LCAweDc4MzcsIDB4MDEwMCwgMHgwODBjLCAweDYwZWIsCisJMHgxMTUwLCAweDcwODQsIDB4OTAwNSwgMHgxMTM4LCAweDA4MGMsIDB4NWViNywgMHgxMTg4LCAweDkwODUsCisJMHgwMDAxLCAweDA4MGMsIDB4MjhkYywgMHgyMGE5LCAweDAwMDgsIDB4MDgwYywgMHg2MTA4LCAweDIwZTEsCiAJMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDQwMDMsCi0JMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg1ZmJhLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsCi0JMHg5MDA1LCAweDA1MDAsIDB4MjAxMSwgMHg1ZjkwLCAweDA4MGMsIDB4ODcwOSwgMHg5MDg2LCAweDAwMTQsCi0JMHgxMWI4LCAweDA4MGMsIDB4NjEwMSwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDQsCi0JMHgxMTc4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzQsCi0JMHg5MDA1LCAweDExMTAsIDB4NzBjNywgMHgwMDAxLCAweDcwOWIsIDB4MDAxNCwgMHgwMDI5LCAweDAwMTAsCi0JMHg3MDkzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5YiwgMHgwMDE1LCAweDA4MGMsCi0JMHg2MDkzLCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDQsIDB4NzgzNywgMHgwMDAwLCAweDA4MGMsCi0JMHg2MTAxLCAweDA4MGMsIDB4NjBlNCwgMHgxMWI4LCAweDcwODQsIDB4OTAwNSwgMHgxMWEwLCAweDcxNjQsCi0JMHg5MTg2LCAweGZmZmYsIDB4MDE4MCwgMHg5MTgwLCAweDMzYWMsIDB4MjAwZCwgMHg5MThjLCAweGZmMDAsCi0JMHg4MTBmLCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLCAweDVmM2QsIDB4MDE4MCwgMHgwODBjLCAweDUwY2YsCi0JMHgwMTEwLCAweDA4MGMsIDB4MjhmZCwgMHgyMGE5LCAweDAwMDgsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksCi0JMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsIDB4NDAwMywgMHg2MGMzLCAweDAwMTQsCi0JMHgwODBjLCAweDVmYmEsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LCAweDA1ZjAsCi0JMHgyMDExLCAweDVmOTAsIDB4MDgwYywgMHg4NzA5LCAweDkwODYsIDB4MDAxNCwgMHgxNWE4LCAweDA4MGMsCi0JMHg2MTAxLCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwNSwgMHgxNTY4LCAweDc4MzQsCi0JMHg5MDg0LCAweDAxMDAsIDB4MjAxMSwgMHgwMTAwLCAweDkyMWUsIDB4MTE2OCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwODBjLCAweDYxMmMsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBjNCwgMHg5MDA1LCAweDExMTAsCi0JMHg3MGM3LCAweDAwMDEsIDB4MDA4MCwgMHg5MDA1LCAweDExYjgsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsCi0JMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg2MTJjLCAweDcwOTcsIDB4MDAwMCwgMHg3YTM4LCAweGQyZjQsIDB4MDExMCwgMHg3MGRmLCAweDAwMDgsCi0JMHg3MDliLCAweDAwMTYsIDB4MDAyOSwgMHgwMDEwLCAweDcwOTMsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsCi0JMHgwODBjLCAweGFkYmMsIDB4MDgwYywgMHg2MTAxLCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNjAsCi0JMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksIDB4MDAwZSwgMHg0MDAzLCAweDIwMTEsCi0JMHgwMjZkLCAweDIyMDQsIDB4OTA4NCwgMHgwMTAwLCAweDIwMTEsIDB4MDI0ZCwgMHgyMDEyLCAweDIwMTEsCi0JMHgwMjZlLCAweDcwOWIsIDB4MDAxNywgMHgwODBjLCAweDYwZTQsIDB4MTE1MCwgMHg3MDg0LCAweDkwMDUsCi0JMHgxMTM4LCAweDA4MGMsIDB4NWViMCwgMHgxMTg4LCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDI4ZmQsCi0JMHgyMGE5LCAweDAwMDgsIDB4MDgwYywgMHg2MTAxLCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNmUsCi0JMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDQwMDMsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsCi0JMHg1ZmJhLCAweDAwMTAsIDB4MDgwYywgMHg1YTBhLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsCi0JMHgwMWQ4LCAweDIwMTEsIDB4NWY5MCwgMHgwODBjLCAweDg3MDksIDB4OTA4NiwgMHgwMDg0LCAweDExOTAsCi0JMHgwODBjLCAweDYxMDEsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA2LCAweDExNTAsCi0JMHg3ODM0LCAweDkwMDUsIDB4MTEzOCwgMHg5MDA2LCAweDA4MGMsIDB4NjEyYywgMHg3MDliLCAweDAwMTgsCisJMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg1ZmMxLCAweDAwMTAsIDB4MDgwYywgMHg1YTExLCAweDAwZmUsCisJMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LCAweDA1YTgsIDB4MjAxMSwgMHg1Zjk3LCAweDA4MGMsCisJMHg4ODNkLCAweDkwODYsIDB4MDAxNCwgMHgxNTYwLCAweDA4MGMsIDB4NjEwOCwgMHgyMDc5LCAweDAyNjAsCisJMHg3YTMwLCAweDkyOTYsIDB4MTEwNSwgMHgxNTIwLCAweDc4MzQsIDB4OTA4NCwgMHgwMTAwLCAweDIwMTEsCisJMHgwMTAwLCAweDkyMWUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LCAweDkwMDUsCisJMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg3MDliLCAweDAwMGEsIDB4MDBiMSwgMHgwMDk4LCAweDkwMDUsCisJMHgxMTc4LCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsCisJMHgwMDAxLCAweDcwOTcsIDB4MDAwMCwgMHg3MDliLCAweDAwMGUsIDB4MDgwYywgMHg1YzVmLCAweDAwMTAsCisJMHgwODBjLCAweDYwZTQsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5YiwgMHgwMDBiLCAweDIwMTEsCisJMHgxYzBlLCAweDIwZTksIDB4MDAwMSwgMHgyMmEwLCAweDIwYTksIDB4MDA0MCwgMHgyMDE5LCAweGZmZmYsCisJMHg0MzA0LCAweDA4MGMsIDB4NjA4YywgMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA2LCAweDc4MzcsCisJMHgwMDAwLCAweDA4MGMsIDB4NjBlYiwgMHgwMTE4LCAweDIwMTMsIDB4MDAwMCwgMHgwMDIwLCAweDcwNjAsCisJMHg5MDg1LCAweDAxMDAsIDB4MjAxMiwgMHgyMGE5LCAweDAwNDAsIDB4MjAwOSwgMHgwMjRlLCAweDIwMTEsCisJMHgxYzBlLCAweDIyMGUsIDB4ODIxMCwgMHg4MTA4LCAweDkxODYsIDB4MDI2MCwgMHgxMTI4LCAweDY4MTAsCisJMHg4MDAwLCAweDY4MTIsIDB4MjAwOSwgMHgwMjQwLCAweDFmMDQsIDB4NWJlMSwgMHg2MGMzLCAweDAwODQsCisJMHgwODBjLCAweDVmYzEsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LCAweDAxYzAsCisJMHgyMDExLCAweDVmOTcsIDB4MDgwYywgMHg4ODNkLCAweDkwODYsIDB4MDA4NCwgMHgxMTc4LCAweDA4MGMsCisJMHg2MTA4LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwNiwgMHgxMTM4LCAweDc4MzQsCisJMHg5MDA1LCAweDExMjAsIDB4NzA5YiwgMHgwMDBjLCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDYwZTQsCisJMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLCAweDAwMGQsIDB4MDgwYywgMHg2MDhjLCAweDIwNzksCisJMHgwMjQwLCAweDc4MzMsIDB4MTEwNywgMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MTA4LCAweDIwYTksCisJMHgwMDQwLCAweDIwMTEsIDB4MDI2ZSwgMHgyMDA5LCAweDAyNGUsIDB4MjIwZSwgMHg4MjEwLCAweDgxMDgsCisJMHg5MTg2LCAweDAyNjAsIDB4MTE1MCwgMHg2ODEwLCAweDgwMDAsIDB4NjgxMiwgMHgyMDA5LCAweDAyNDAsCisJMHg2ODE0LCAweDgwMDAsIDB4NjgxNiwgMHgyMDExLCAweDAyNjAsIDB4MWYwNCwgMHg1YzI1LCAweDYwYzMsCisJMHgwMDg0LCAweDA4MGMsIDB4NWZjMSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsCisJMHgwMWUwLCAweDIwMTEsIDB4NWY5NywgMHgwODBjLCAweDg4M2QsIDB4OTA4NiwgMHgwMDg0LCAweDExOTgsCisJMHgwODBjLCAweDYxMDgsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA3LCAweDExNTgsCisJMHg3ODM0LCAweDkwMDUsIDB4MTE0MCwgMHg3MDk3LCAweDAwMDEsIDB4MDgwYywgMHg2MDVlLCAweDcwOWIsCisJMHgwMDBlLCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDYwZTQsIDB4MDBmZSwgMHgwMDA1LCAweDkxOGQsCisJMHgwMDAxLCAweDA4MGMsIDB4NjEzMywgMHg3MDliLCAweDAwMGYsIDB4NzA5MywgMHgwMDAwLCAweDIwNjEsCisJMHgwMTQwLCAweDYwNWIsIDB4YmM4NSwgMHg2MDVmLCAweGI1YjUsIDB4MjA2MSwgMHgwMTAwLCAweDYwNDMsCisJMHgwMDA1LCAweDYwNDMsIDB4MDAwNCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg1Zjk3LCAweDA4MGMsCisJMHg4ODMxLCAweDAwMDUsIDB4NzA5MCwgMHg5MDA1LCAweDAxMzAsIDB4MjAxMSwgMHg1Zjk3LCAweDA4MGMsCisJMHg4ODNkLCAweDcwOWIsIDB4MDAwMCwgMHgwMDA1LCAweDcwOWIsIDB4MDAxMSwgMHgwODBjLCAweGFmOGUsCisJMHgwODBjLCAweDYxMDgsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI2MCwgMHgyMGU5LCAweDAwMDAsCisJMHgyMGExLCAweDAyNDAsIDB4NzQ5MCwgMHg5NDgwLCAweDAwMTgsIDB4OTA4MCwgMHgwMDA3LCAweDkwODQsCisJMHgwM2Y4LCAweDgwMDQsIDB4MjBhOCwgMHg0MDAzLCAweDA4MGMsIDB4NjBlYiwgMHgxMWEwLCAweDcxN2MsCisJMHg4MWZmLCAweDAxODgsIDB4OTAwZSwgMHg3MDgwLCAweDkwODQsIDB4MDBmZiwgMHgwMTYwLCAweDA4MGMsCisJMHgyODczLCAweDkxODYsIDB4MDA3ZSwgMHgwMTM4LCAweDkxODYsIDB4MDA4MCwgMHgwMTIwLCAweDIwMTEsCisJMHgwMDA4LCAweDA4MGMsIDB4NWY0NCwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg1ZmMxLCAweDAwMDUsCisJMHgwMGY2LCAweDcwOTAsIDB4OTAwNSwgMHgwNTAwLCAweDIwMTEsIDB4NWY5NywgMHgwODBjLCAweDg4M2QsCisJMHg5MDg2LCAweDAwMTQsIDB4MTFiOCwgMHgwODBjLCAweDYxMDgsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsCisJMHg5Mjk2LCAweDExMDMsIDB4MTE3OCwgMHg3ODM0LCAweDkwMDUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsCisJMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg3MDliLCAweDAwMTIsCiAJMHgwMDI5LCAweDAwMTAsIDB4NzA5MywgMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOWIsCi0JMHgwMDE5LCAweDA4MGMsIDB4NjA5MywgMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA2LCAweDc4MzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NjEwMSwgMHgyMDA5LCAweDAyNmUsIDB4MjAzOSwgMHgxYzBlLCAweDIwYTksCi0JMHgwMDQwLCAweDIxM2UsIDB4ODczOCwgMHg4MTA4LCAweDkxODYsIDB4MDI4MCwgMHgxMTI4LCAweDY4MTQsCi0JMHg4MDAwLCAweDY4MTYsIDB4MjAwOSwgMHgwMjYwLCAweDFmMDQsIDB4NWUxOSwgMHgyMDM5LCAweDFjMGUsCi0JMHgwODBjLCAweDYwZTQsIDB4MTFlOCwgMHgyNzI4LCAweDI1MTQsIDB4ODIwNywgMHg5MDg0LCAweDAwZmYsCi0JMHg4MDAwLCAweDIwMTgsIDB4OTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4OTIwNSwgMHgyMDJhLCAweDcwNjAsCi0JMHgyMzEwLCAweDgyMTQsIDB4OTJhMCwgMHgxYzBlLCAweDI0MTQsIDB4OTM4YywgMHgwMDAxLCAweDAxMTgsCi0JMHg5Mjk0LCAweGZmMDAsIDB4MDAxOCwgMHg5Mjk0LCAweDAwZmYsIDB4ODAwNywgMHg5MjE1LCAweDIyMjIsCi0JMHgyMGE5LCAweDAwNDAsIDB4MjAwOSwgMHgwMjRlLCAweDI3MGUsIDB4ODczOCwgMHg4MTA4LCAweDkxODYsCi0JMHgwMjYwLCAweDExMjgsIDB4NjgxMCwgMHg4MDAwLCAweDY4MTIsIDB4MjAwOSwgMHgwMjQwLCAweDFmMDQsCi0JMHg1ZTRjLCAweDYwYzMsIDB4MDA4NCwgMHgwODBjLCAweDVmYmEsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsCi0JMHg3MDkwLCAweDkwMDUsIDB4MDFlMCwgMHgyMDExLCAweDVmOTAsIDB4MDgwYywgMHg4NzA5LCAweDkwODYsCi0JMHgwMDg0LCAweDExOTgsIDB4MDgwYywgMHg2MTAxLCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsCi0JMHgxMTA3LCAweDExNTgsIDB4NzgzNCwgMHg5MDA1LCAweDExNDAsIDB4NzA5NywgMHgwMDAxLCAweDA4MGMsCi0JMHg2MDU3LCAweDcwOWIsIDB4MDAxYSwgMHgwMDI5LCAweDAwMTAsIDB4NzA5MywgMHgwMDAwLCAweDAwZmUsCi0JMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDYxMmMsIDB4NzA5YiwgMHgwMDFiLCAweDA4MGMsCi0JMHhhZGJjLCAweDA4MGMsIDB4NjEwMSwgMHgyMDExLCAweDAyNjAsIDB4MjAwOSwgMHgwMjQwLCAweDc0OTAsCi0JMHg5NDgwLCAweDAwMTgsIDB4OTA4MCwgMHgwMDA3LCAweDkwODQsIDB4MDNmOCwgMHg4MDA0LCAweDIwYTgsCi0JMHgyMjBlLCAweDgyMTAsIDB4ODEwOCwgMHg5MTg2LCAweDAyNjAsIDB4MTE1MCwgMHg2ODEwLCAweDgwMDAsCi0JMHg2ODEyLCAweDIwMDksIDB4MDI0MCwgMHg2ODE0LCAweDgwMDAsIDB4NjgxNiwgMHgyMDExLCAweDAyNjAsCi0JMHgxZjA0LCAweDVlOTgsIDB4NjBjMywgMHgwMDg0LCAweDA4MGMsIDB4NWZiYSwgMHgwMDA1LCAweDAwMDUsCi0JMHgwMDg2LCAweDAwOTYsIDB4MjAyOSwgMHgxODQ4LCAweDI1MmMsIDB4MjBhOSwgMHgwMDA4LCAweDIwNDEsCi0JMHgxYzBlLCAweDIwZTksIDB4MDAwMSwgMHgyOGEwLCAweDA4MGMsIDB4NjEwMSwgMHgyMGUxLCAweDAwMDAsCi0JMHgyMDk5LCAweDAyNmUsIDB4NDAwMywgMHgyMGE5LCAweDAwMDgsIDB4MjAxMSwgMHgwMDA3LCAweGQ1ZDQsCi0JMHgwMTA4LCAweDkwMTYsIDB4MjgwMCwgMHg5MjAwLCAweDIwMGMsIDB4OTFhNiwgMHhmZmZmLCAweDExNDgsCi0JMHhkNWQ0LCAweDAxMTAsIDB4ODIxMCwgMHgwMDA4LCAweDgyMTEsIDB4MWYwNCwgMHg1ZWNhLCAweDA4MDQsCi0JMHg1ZjM5LCAweDgyZmYsIDB4MTE2MCwgMHhkNWQ0LCAweDAxMjAsIDB4OTFhNiwgMHgzZmZmLCAweDBkOTAsCi0JMHgwMDIwLCAweDkxYTYsIDB4M2ZmZiwgMHgwOTA0LCAweDVmMzksIDB4OTE4ZCwgMHhjMDAwLCAweDIwYTksCi0JMHgwMDEwLCAweDIwMTksIDB4MDAwMSwgMHhkNWQ0LCAweDAxMTAsIDB4MjAxOSwgMHgwMDEwLCAweDIxMjAsCi0JMHhkNWQ0LCAweDAxMTAsIDB4ODQyMywgMHgwMDA4LCAweDg0MjQsIDB4MTI0MCwgMHhkNWQ0LCAweDAxMTAsCi0JMHg4MzE5LCAweDAwMDgsIDB4ODMxOCwgMHgxZjA0LCAweDVlZjAsIDB4MDRkOCwgMHgyM2E4LCAweDIwMjEsCi0JMHgwMDAxLCAweDg0MjYsIDB4ODQyNSwgMHgxZjA0LCAweDVmMDIsIDB4MjMyOCwgMHg4NTI5LCAweDkyYmUsCi0JMHgwMDA3LCAweDAxNTgsIDB4MDAwNiwgMHgyMDM5LCAweDAwMDcsIDB4MjIwMCwgMHg5NzNhLCAweDAwMGUsCi0JMHgyN2E4LCAweDk1YTgsIDB4MDAxMCwgMHgxZjA0LCAweDVmMTEsIDB4NzU1ZSwgMHg5NWM4LCAweDMzYWMsCi0JMHgyOTJkLCAweDk1YWMsIDB4MDBmZiwgMHg3NTgyLCAweDY1MzIsIDB4NjUzNiwgMHgwMDE2LCAweDI1MDgsCi0JMHgwODBjLCAweDI4ZGQsIDB4MDAxZSwgMHg2MGU3LCAweDAwMDAsIDB4NjVlYSwgMHgyMDE4LCAweDIzMDQsCi0JMHg5NDA1LCAweDIwMWEsIDB4NzA4NywgMHgwMDAxLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsCi0JMHgyMGUxLCAweDAwMDEsIDB4Mjg5OCwgMHgyMGE5LCAweDAwMDgsIDB4NDAwMywgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA4LCAweDkwMDYsIDB4MDA5ZSwgMHgwMDhlLCAweDAwMDUsIDB4MDE1NiwgMHgwMWM2LCAweDAxZDYsCi0JMHgwMTM2LCAweDAxNDYsIDB4MjJhOCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLCAweDIwZTksCi0JMHgwMDAwLCAweDIwMTEsIDB4MDI0ZSwgMHgyMmEwLCAweDQwMDMsIDB4MDE0ZSwgMHgwMTNlLCAweDAxZGUsCi0JMHgwMWNlLCAweDAxNWUsIDB4MjExOCwgMHg5MDI2LCAweDIwMDEsIDB4MDAwNywgMHg5MzlhLCAweDAwMTAsCi0JMHgwMjE4LCAweDg0MjAsIDB4ODAwMSwgMHgwY2QwLCAweDIxMTgsIDB4ODRmZiwgMHgwMTIwLCAweDkzOWEsCi0JMHgwMDEwLCAweDg0MjEsIDB4MWRlMCwgMHgyMDIxLCAweDAwMDEsIDB4ODNmZiwgMHgwMTE4LCAweDg0MjMsCi0JMHg4MzE5LCAweDFkZTgsIDB4OTIzOCwgMHgyMDI5LCAweDAyNmUsIDB4OTUyOCwgMHgyNTA0LCAweDk0MmMsCi0JMHgxMWI4LCAweDk0MDUsIDB4MjAzYSwgMHg3MTVlLCAweDkxYTAsIDB4MzNhYywgMHgyNDJkLCAweDk1YWMsCi0JMHgwMGZmLCAweDc1ODIsIDB4NjUzMiwgMHg2NTM2LCAweDAwMTYsIDB4MjUwOCwgMHgwODBjLCAweDI4ZGQsCi0JMHgwMDFlLCAweDYwZTcsIDB4MDAwMCwgMHg2NWVhLCAweDcwODcsIDB4MDAwMSwgMHg5MDg0LCAweDAwMDAsCi0JMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDcwOGIsIDB4MDAwMCwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMGU2LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDIwNzEsIDB4MDE0MCwgMHgwODBjLCAweDYwNDYsCi0JMHgwODBjLCAweGE1MTcsIDB4NzAwNCwgMHg5MDg0LCAweDQwMDAsIDB4MDExMCwgMHgwODBjLCAweDJkNjIsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE4MjYsIDB4MjA3MywgMHgwMDAwLCAweDc4NDAsCi0JMHgwMDI2LCAweDAwMTYsIDB4MjAwOSwgMHgwMGY3LCAweDA4MGMsIDB4NjBhMywgMHgwMDFlLCAweDkwOTQsCi0JMHgwMDEwLCAweDkyODUsIDB4MDA4MCwgMHg3ODQyLCAweDdhNDIsIDB4MDAyZSwgMHgwMTJlLCAweDAwZmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgyYmU3LCAweDAyMjgsCi0JMHgyMDExLCAweDAxMDEsIDB4MjIwNCwgMHhjMGM1LCAweDIwMTIsIDB4MjAxMSwgMHgxOWYzLCAweDIwMTMsCi0JMHgwMDAwLCAweDcwOTMsIDB4MDAwMCwgMHgwMTJlLCAweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsCi0JMHgwODBjLCAweGE1MGUsIDB4NjE0NCwgMHhkMTg0LCAweDAxMjAsIDB4NzE5OCwgMHg5MThkLCAweDIwMDAsCi0JMHgwMDE4LCAweDcxOGMsIDB4OTE4ZCwgMHgxMDAwLCAweDIwMTEsIDB4MTk5YSwgMHgyMTEyLCAweDIwMDksCi0JMHgwN2QwLCAweDIwMTEsIDB4NWY5MCwgMHgwODBjLCAweDg3YTEsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4YjA3MiwgMHgyMDA5LCAweDAwZjcsCi0JMHgwODBjLCAweDYwYTMsIDB4MjA2MSwgMHgxOWZjLCAweDkwMGUsIDB4NjExYSwgMHg2MTFlLCAweDYxN2EsCi0JMHg2MTdlLCAweDIwNjEsIDB4MTgwMCwgMHg2MDAzLCAweDAwMDEsIDB4MjA2MSwgMHgwMTAwLCAweDYwNDMsCi0JMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgyMDA5LCAweDE5OWEsIDB4MjAwYiwgMHgwMDAwLCAweDIwMDksCi0JMHgwMDJkLCAweDIwMTEsIDB4NjAxMiwgMHgwODBjLCAweDg2ZmQsIDB4MDEyZSwgMHgwMGNlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA0NzEsCi0JMHgyMDcxLCAweDAxMDAsIDB4MDgwYywgMHhhNTE3LCAweDIwNzEsIDB4MDE0MCwgMHg3MDA0LCAweDkwODQsCi0JMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyZDYyLCAweDA4MGMsIDB4NzU3MSwgMHgwMTg4LCAweDA4MGMsCi0JMHg3NThjLCAweDExNzAsIDB4MDgwYywgMHg3ODU4LCAweDAwMTYsIDB4MDgwYywgMHgyOWFjLCAweDIwMDEsCi0JMHgxOTZlLCAweDIxMDIsIDB4MDAxZSwgMHgwODBjLCAweDc4NTMsIDB4MDgwYywgMHg3NDk1LCAweDAwNTAsCi0JMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgyYzgwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI4M2QsCi0JMHgwODBjLCAweDVmZTYsIDB4MDEyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGUsCi0JMHgyMDA0LCAweGQwYmMsIDB4MDE1OCwgMHgwMDI2LCAweDAwMzYsIDB4MjAxMSwgMHg4MDE3LCAweDIwMDEsCi0JMHgxOTlhLCAweDIwMWMsIDB4MDgwYywgMHg0YmU5LCAweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDIwYTksCi0JMHgwMDEyLCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDFjODAsIDB4MDgwYywgMHg2MTAxLCAweDIwZTksCi0JMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgwMDk5LCAweDIwYTksIDB4MDAyMCwgMHgwODBjLCAweDYwZmIsCi0JMHgyMDk5LCAweDAyNjAsIDB4MjBhMSwgMHgxYzkyLCAweDAwNTEsIDB4MjBhOSwgMHgwMDBlLCAweDA4MGMsCi0JMHg2MGZlLCAweDIwOTksIDB4MDI2MCwgMHgyMGExLCAweDFjYjIsIDB4MDAwOSwgMHgwMDA1LCAweDAwMTYsCi0JMHgwMDI2LCAweDM0MTAsIDB4MzMwOCwgMHgyMTA0LCAweDgwMDcsIDB4MjAxMiwgMHg4MTA4LCAweDgyMTAsCi0JMHgxZjA0LCAweDYwN2IsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHhhZGJjLCAweDIwZTEsCi0JMHgwMDAxLCAweDIwOTksIDB4MWMwMCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksCi0JMHgwMDBjLCAweDQwMDMsIDB4MDAwNSwgMHgwODBjLCAweGFkYmMsIDB4MDgwYywgMHg2MTAxLCAweDIwZTEsCi0JMHgwMDAwLCAweDIwOTksIDB4MDI2MCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksCi0JMHgwMDBjLCAweDQwMDMsIDB4MDAwNSwgMHgwMGM2LCAweDAwMDYsIDB4MjA2MSwgMHgwMTAwLCAweDgxMGYsCi0JMHgyMDAxLCAweDE4MzQsIDB4MjAwNCwgMHg5MDA1LCAweDExMzgsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTEwNSwgMHgwMDEwLCAweDkxODUsIDB4MDBmNywgMHg2MDRhLCAweDAwMGUsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDQ2LCAweDA4MGMsIDB4NmE4ZSwgMHgwMTU4LCAweDkwMDYsCi0JMHgyMDIwLCAweDIwMDksIDB4MDAyYSwgMHgwODBjLCAweGU5YTUsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCi0JMHhjMTk1LCAweDIxMDIsIDB4MjAxOSwgMHgwMDJhLCAweDkwMGUsIDB4MDgwYywgMHgzMjExLCAweDA4MGMsCi0JMHhkNTYxLCAweDAxNDAsIDB4MDAzNiwgMHgyMDE5LCAweGZmZmYsIDB4MjAyMSwgMHgwMDA3LCAweDA4MGMsCi0JMHg0ZGEwLCAweDAwM2UsIDB4MDA0ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHg1ZmU2LCAweDcwOWIsCi0JMHgwMDAwLCAweDcwOTMsIDB4MDAwMCwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsCi0JMHhkMDljLCAweDAxMDAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwMDEsIDB4MDEwMSwgMHgyMDBjLCAweDkxOGQsIDB4MDAwNiwgMHgyMTAyLCAweDAxMmUsCi0JMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgyMDA5LCAweDAwMDEsIDB4MDAyMCwgMHgyMDA5LCAweDAwMDIsCi0JMHgwMDA4LCAweDkwMGUsIDB4NjgxNCwgMHg5MDg0LCAweGZmYzAsIDB4OTEwZCwgMHg2OTE2LCAweDAwMDUsCi0JMHgwMGY2LCAweDAxNTYsIDB4MDE0NiwgMHgwMWQ2LCAweDkwMDYsIDB4MjBhOSwgMHgwMDgwLCAweDIwZTksCi0JMHgwMDAxLCAweDIwYTEsIDB4MWMwMCwgMHg0MDA0LCAweDIwNzksIDB4MWMwMCwgMHg3ODAzLCAweDIyMDAsCi0JMHg3ODA3LCAweDAwZWYsIDB4NzgwZiwgMHgwMGVmLCAweDc4MTMsIDB4MDEzOCwgMHg3ODIzLCAweGZmZmYsCi0JMHg3ODI3LCAweGZmZmYsIDB4MDFkZSwgMHgwMTRlLCAweDAxNWUsIDB4MDBmZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDIwMDEsIDB4MTlhOCwgMHgwMTE4LCAweDIwMDMsCi0JMHgwMDAxLCAweDAwMTAsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MDE1NiwgMHgyMGE5LCAweDA4MDAsCi0JMHgyMDA5LCAweDEwMDAsIDB4OTAwNiwgMHgyMDBhLCAweDgxMDgsIDB4MWYwNCwgMHg2MTNiLCAweDAxNWUsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgyMDY5LCAweDE4NDcsCi0JMHg5MDA2LCAweGI4MDIsIDB4YjhjZSwgMHhiODA3LCAweDA3MDcsIDB4YjgwYSwgMHhiODBlLCAweGI4MTIsCi0JMHg5MTk4LCAweDMzYWMsIDB4MjMxZCwgMHg5MzljLCAweDAwZmYsIDB4YmIxNiwgMHgwMDE2LCAweDAwMjYsCi0JMHhiOGMyLCAweDA4MGMsIDB4YjA2YiwgMHgxMTIwLCAweDkxOTIsIDB4MDA3ZSwgMHgxMjA4LCAweGJiYzIsCi0JMHgyMGE5LCAweDAwMDQsIDB4YjhjNCwgMHgyMGU4LCAweGI5YzgsIDB4OTE5OCwgMHgwMDA2LCAweDkwMDYsCi0JMHgyM2EwLCAweDQwMDQsIDB4MjBhOSwgMHgwMDA0LCAweDkxOTgsIDB4MDAwYSwgMHgyM2EwLCAweDQwMDQsCi0JMHgwMDJlLCAweDAwMWUsIDB4YjgzZSwgMHhiODQyLCAweGI4NGUsIDB4Yjg1MiwgMHhiODU2LCAweGI4NWEsCi0JMHhiODVlLCAweGI4NjIsIDB4Yjg2NiwgMHhiODZhLCAweGI4NmYsIDB4MDEwMCwgMHhiODcyLCAweGI4NzYsCi0JMHhiODdhLCAweGI4OGEsIDB4Yjg4ZSwgMHhiODkzLCAweDAwMDgsIDB4Yjg5NiwgMHhiODlhLCAweGI4OWUsCi0JMHhiOGJlLCAweGI5YTIsIDB4MDA5NiwgMHhiOGE0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDEwNDAsCi0JMHhiOGE3LCAweDAwMDAsIDB4MDA5ZSwgMHg5MDA2LCAweGI4NGEsIDB4NjgxMCwgMHhiODNhLCAweDY4MGMsCi0JMHhiODQ2LCAweGI4YmIsIDB4MDUyMCwgMHhiOGFjLCAweDkwMDUsIDB4MDE5OCwgMHgwMGM2LCAweDIwNjAsCi0JMHg5YzgyLCAweDFjZDAsIDB4MGEwYywgMHgwZGM1LCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDljMDIsCi0JMHgxYTBjLCAweDBkYzUsIDB4MDgwYywgMHg4YmMzLCAweDAwY2UsIDB4MDkwYywgMHg4ZjY0LCAweGI4YWYsCi0JMHgwMDAwLCAweDY4MTQsIDB4OTA4NCwgMHgwMGZmLCAweGI4NDIsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsCi0JMHgwMDNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhhOTc0LCAweGFlNzgsCi0JMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLCAweDFhMDQsIDB4NjIyOSwgMHg5MTgyLCAweDA4MDAsCi0JMHgxYTA0LCAweDYyMmQsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsIDB4OTA4NCwgMHgwMDAzLCAweDE5MDQsCi0JMHg2MjMzLCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LCAweDkwNWQsIDB4MDUxOCwgMHhiODA0LCAweDkwODQsCi0JMHgwMGZmLCAweDkwOGUsIDB4MDAwNiwgMHgxNTA4LCAweGI4YTQsIDB4OTAwZCwgMHgxOTA0LCAweDYyNDUsCi0JMHhiODUwLCAweDkwMGQsIDB4MTE0OCwgMHhhODAyLCAweDI5MDAsIDB4Yjg1MiwgMHhiODRlLCAweDA4MGMsCi0JMHg5MzU4LCAweDkwMDYsIDB4MDEyZSwgMHgwMDA1LCAweDAwYTYsIDB4MjE1MCwgMHgyOTAwLCAweGIwMDIsCi0JMHhhODAzLCAweDAwMDAsIDB4MDBhZSwgMHhiODUyLCAweDBjOTAsIDB4MjAwMSwgMHgwMDA1LCAweDkwMGUsCi0JMHgwNGI4LCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLCAweDA0OTgsIDB4OTA4MiwgMHgwMDA2LCAweDEyOTAsCi0JMHgwODBjLCAweGIwNmIsIDB4MTE2MCwgMHhiOGEwLCAweDkwODQsIDB4ZmY4MCwgMHgxMTQwLCAweGI5MDAsCi0JMHhkMWZjLCAweDA5OTAsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwNDA4LCAweDIwMDEsCi0JMHgwMDI4LCAweDAwYTgsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LCAweDIwMDEsCi0JMHgwMDA0LCAweDAwNjgsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDQwLCAweDIwMDEsCi0JMHgwMDI5LCAweGI5MDAsIDB4ZDFmYywgMHgwMTE4LCAweDIwMDksIDB4MTAwMCwgMHgwMDQ4LCAweDkwMGUsCi0JMHgwMDM4LCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLCAweDAwMTgsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsCi0JMHg5MDA1LCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwNCwgMHhkMDg0LCAweDE5ZDAsCi0JMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLCAweDA5YTgsIDB4MDgwYywgMHg2YTkyLCAweDE5OTAsCi0JMHhiODAwLCAweGQwYmMsIDB4MDk3OCwgMHgwODA0LCAweDYxZGMsIDB4MDgwYywgMHg2OGI5LCAweDA5MDQsCi0JMHg2MWY1LCAweDA4MDQsIDB4NjFlMCwgMHgwMGI2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHhhODc0LCAweDkwOGUsIDB4MDBmZiwgMHgxMTIwLCAweDIwMDEsIDB4MTk2YywgMHgyMDVjLCAweDAwNjAsCi0JMHhhOTc0LCAweDkxODIsIDB4MDgwMCwgMHgxNjkwLCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LCAweDkwNWQsCi0JMHgwMWQwLCAweDA4MGMsIDB4NmEzMiwgMHgxMWQwLCAweDA4MGMsIDB4YjBhYiwgMHgwNTcwLCAweDJiMDAsCi0JMHg2MDEyLCAweDI5MDAsIDB4NjAxNiwgMHg2MDIzLCAweDAwMDksIDB4NjAwYiwgMHgwMDAwLCAweGE4NzQsCi0JMHg5MDhlLCAweDAwZmYsIDB4MTExMCwgMHg2MDBiLCAweDgwMDAsIDB4MjAwOSwgMHgwMDQzLCAweDA4MGMsCi0JMHhiMTgwLCAweDkwMDYsIDB4MDBiMCwgMHgyMDAxLCAweDAwMjgsIDB4MDA5MCwgMHgyMDA5LCAweDE4MGMsCi0JMHgyMTBjLCAweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAzOCwgMHhkMTg0LCAweDAxMTgsCi0JMHgyMDAxLCAweDAwMDQsIDB4MDAxMCwgMHgyMDAxLCAweDAwMjksIDB4MDAxMCwgMHgyMDAxLCAweDAwMjksCi0JMHg5MDA1LCAweDAxMmUsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsIDB4MjAwMSwgMHgwMDJjLCAweDBjYzAsCi0JMHgwMGI2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YTk3NCwgMHg5MTgyLCAweDA4MDAsCi0JMHgxYTA0LCAweDYzMTYsIDB4OTE4OCwgMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHgwOTA0LCAweDYyZWUsCi0JMHhiOGEwLCAweDkwODYsIDB4MDA3ZiwgMHgwMTkwLCAweGE4N2MsIDB4ZDBmYywgMHgxMTc4LCAweDA4MGMsCi0JMHg2YTlhLCAweDAxNjAsIDB4YTk5NCwgMHg4MWZmLCAweDAxMzAsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMzAsCi0JMHg5MDhlLCAweDAwMDUsIDB4MDExOCwgMHgwODBjLCAweDZhOTIsIDB4MTU5OCwgMHhhODdjLCAweGQwZmMsCi0JMHgwMWUwLCAweGE4OTQsIDB4OTAwNSwgMHgwMWM4LCAweDIwNjAsIDB4MDAyNiwgMHgyMDEwLCAweDA4MGMsCi0JMHhjZTQ0LCAweDAwMmUsIDB4MTEyMCwgMHgyMDAxLCAweDAwMDgsIDB4MDgwNCwgMHg2MzE4LCAweDYwMjAsCi0JMHg5MDg2LCAweDAwMGEsIDB4MDEyMCwgMHgyMDAxLCAweDAwMDgsIDB4MDgwNCwgMHg2MzE4LCAweDYwMWEsCi0JMHg2MDAzLCAweDAwMDgsIDB4MjkwMCwgMHg2MDE2LCAweDAwNTgsIDB4MDgwYywgMHhiMGFiLCAweDA1ZTgsCi0JMHgyYjAwLCAweDYwMTIsIDB4MjkwMCwgMHg2MDE2LCAweDYwMGIsIDB4ZmZmZiwgMHg2MDIzLCAweDAwMGEsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDgwYywgMHhiMTgwLCAweDkwMDYsIDB4MDQ1OCwgMHgyMDAxLCAweDAwMjgsCi0JMHgwNDM4LCAweDkwODIsIDB4MDAwNiwgMHgxMjkwLCAweDA4MGMsIDB4YjA2YiwgMHgxMTYwLCAweGI4YTAsCi0JMHg5MDg0LCAweGZmODAsIDB4MTE0MCwgMHhiOTAwLCAweGQxZmMsIDB4MDkwMCwgMHgyMDAxLCAweDAwMjksCi0JMHgyMDA5LCAweDEwMDAsIDB4MDBhOCwgMHgyMDAxLCAweDAwMjgsIDB4MDA5MCwgMHgyMDA5LCAweDE4MGMsCi0JMHgyMTBjLCAweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDA1MCwgMHhkMTg0LCAweDAxMTgsCi0JMHgyMDAxLCAweDAwMDQsIDB4MDAyOCwgMHgyMDAxLCAweDAwMjksIDB4MDAxMCwgMHgyMDAxLCAweDAwMjksCi0JMHg5MDA1LCAweDAxMmUsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsIDB4MjAwMSwgMHgwMDJjLCAweDBjYzAsCi0JMHgwMGY2LCAweDAwYjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YThlMCwgMHg5MDA1LCAweDE1NTAsCi0JMHhhOGRjLCAweDkwODIsIDB4MDEwMSwgMHgxNjMwLCAweGE4YzgsIDB4OTAwNSwgMHgxNTE4LCAweGE4YzQsCi0JMHg5MDgyLCAweDAxMDEsIDB4MTJmOCwgMHhhOTc0LCAweDIwNzksIDB4MTgwMCwgMHg5MTgyLCAweDA4MDAsCi0JMHgxMmU4LCAweDc4MzAsIDB4OTA4NCwgMHgwMDAzLCAweDExMzAsIDB4YWE5OCwgMHhhYjk0LCAweGE4NzgsCi0JMHg5MDg0LCAweDAwMDcsIDB4MDBlYSwgMHg3OTMwLCAweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwMDM4LCAweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAxMCwgMHgyMDAxLCAweDAwMjksCi0JMHg5MDBlLCAweDAwMzgsIDB4MjAwMSwgMHgwMDJjLCAweDkwMGUsIDB4MDAxOCwgMHgyMDAxLCAweDAwMjksCi0JMHg5MDBlLCAweDkwMDYsIDB4MDAwOCwgMHg5MDA1LCAweDAxMmUsIDB4MDBiZSwgMHgwMGZlLCAweDAwMDUsCi0JMHg2M2FkLCAweDYzNjgsIDB4NjM3ZiwgMHg2M2FkLCAweDYzYWQsIDB4NjNhZCwgMHg2M2FkLCAweDYzYWQsCi0JMHgyMTAwLCAweDkwODIsIDB4MDA3ZSwgMHgxMjc4LCAweDA4MGMsIDB4NjZiMiwgMHgwMTQ4LCAweDkwNDYsCi0JMHhiODEwLCAweDkzMDYsIDB4MTkwNCwgMHg2M2I1LCAweGI4MTQsIDB4OTIwNiwgMHgxNWYwLCAweDAwMjgsCi0JMHhiYjEyLCAweGJhMTYsIDB4MDAxMCwgMHgwODBjLCAweDRhOWMsIDB4MDE1MCwgMHgwNGIwLCAweDA4MGMsCi0JMHg2NzFkLCAweDE1OTgsIDB4YjgxMCwgMHg5MzA2LCAweDE1ODAsIDB4YjgxNCwgMHg5MjA2LCAweDE1NjgsCi0JMHgwODBjLCAweGIwYWIsIDB4MDUzMCwgMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhkMmQyLCAweDI5MDAsCi0JMHg2MDE2LCAweDYwMGIsIDB4ZmZmZiwgMHg2MDIzLCAweDAwMGEsIDB4YTg3OCwgMHg5MDg2LCAweDAwMDEsCi0JMHgxMTcwLCAweDA4MGMsIDB4MzI0NiwgMHg5MDA2LCAweDA4MGMsIDB4NjY0ZiwgMHgyMDAxLCAweDAwMDIsCi0JMHgwODBjLCAweDY2NjMsIDB4MjAwMSwgMHgwMjAwLCAweGI4NmUsIDB4Yjg5MywgMHgwMDAyLCAweDIwMDksCi0JMHgwMDAzLCAweDA4MGMsIDB4YjE4MCwgMHg5MDA2LCAweDAwNjgsIDB4MjAwMSwgMHgwMDAxLCAweDkwMGUsCi0JMHgwMDM4LCAweDIwMDEsIDB4MDAyYywgMHg5MDBlLCAweDAwMTgsIDB4MjAwMSwgMHgwMDI4LCAweDkwMGUsCi0JMHg5MDA1LCAweDAwMDAsIDB4MDEyZSwgMHgwMGJlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZjYsCi0JMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4OTQsIDB4OTBjNiwgMHgwMDE1LCAweDA5MDQsCi0JMHg2NWEwLCAweDkwYzYsIDB4MDA1NiwgMHgwOTA0LCAweDY1YTQsIDB4OTBjNiwgMHgwMDY2LCAweDA5MDQsCi0JMHg2NWE4LCAweDkwYzYsIDB4MDA2NywgMHgwOTA0LCAweDY1YWMsIDB4OTBjNiwgMHgwMDY4LCAweDA5MDQsCi0JMHg2NWIwLCAweDkwYzYsIDB4MDA3MSwgMHgwOTA0LCAweDY1YjQsIDB4OTBjNiwgMHgwMDc0LCAweDA5MDQsCi0JMHg2NWI4LCAweDkwYzYsIDB4MDA3YywgMHgwOTA0LCAweDY1YmMsIDB4OTBjNiwgMHgwMDdlLCAweDA5MDQsCi0JMHg2NWMwLCAweDkwYzYsIDB4MDAzNywgMHgwOTA0LCAweDY1YzQsIDB4OTAxNiwgMHgyMDc5LCAweDE4MDAsCi0JMHhhOTc0LCAweDkxODYsIDB4MDBmZiwgMHgwOTA0LCAweDY1OWIsIDB4OTE4MiwgMHgwODAwLCAweDFhMDQsCi0JMHg2NTliLCAweDA4MGMsIDB4NjcxZCwgMHgxMTk4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODIsCi0JMHgwMDA2LCAweDEyNjgsIDB4YTg5NCwgMHg5MGM2LCAweDAwNmYsIDB4MDE0OCwgMHgwODBjLCAweGIwNmIsCi0JMHgxOTA0LCAweDY1ODQsIDB4YjhhMCwgMHg5MDg0LCAweGZmODAsIDB4MTkwNCwgMHg2NTg0LCAweGE4OTQsCi0JMHg5MGM2LCAweDAwNmYsIDB4MDE1OCwgMHg5MGM2LCAweDAwNWUsIDB4MDkwNCwgMHg2NGU0LCAweDkwYzYsCi0JMHgwMDY0LCAweDA5MDQsIDB4NjUwZCwgMHgyMDA4LCAweDA4MDQsIDB4NjRhNiwgMHhhOTk4LCAweGE4YjAsCi0JMHgyMDQwLCAweDA4MGMsIDB4YjA2YiwgMHgxMTIwLCAweDkxODIsIDB4MDA3ZiwgMHgwYTA0LCAweDY0YTYsCi0JMHg5MTg2LCAweDAwZmYsIDB4MDkwNCwgMHg2NGE2LCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LCAweDY0YTYsCi0JMHhhYWEwLCAweGFiOWMsIDB4Nzg3YywgMHg5MzA2LCAweDExYTgsIDB4Nzg4MCwgMHgwMDk2LCAweDkyNGUsCi0JMHgxMTI4LCAweDIyMDgsIDB4MjMxMCwgMHgwMDllLCAweDA4MDQsIDB4NjRhNiwgMHgwODBjLCAweGIwNmIsCi0JMHgxMTQwLCAweDk5Y2MsIDB4ZmYwMCwgMHgwMDllLCAweDExMjgsIDB4MjIwOCwgMHgyMzEwLCAweDA4MDQsCi0JMHg2NGE2LCAweDAwOWUsIDB4MDgwYywgMHg0YTljLCAweDA5MDQsIDB4NjRiMCwgMHg5MDBlLCAweDkwMTYsCi0JMHg5MGM2LCAweDQwMDAsIDB4MTVlMCwgMHgwMDA2LCAweDA4MGMsIDB4NjkzZCwgMHgxMTA4LCAweGMxODUsCi0JMHhiODAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDIwYTksIDB4MDAwNCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAzMSwgMHgyMGEwLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsCi0JMHgwMDA2LCAweDIwOTgsIDB4MDgwYywgMHgwZjhiLCAweDIwYTksIDB4MDAwNCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAzNSwgMHgyMGEwLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsCi0JMHgwMDBhLCAweDIwOTgsIDB4MDgwYywgMHgwZjhiLCAweGE4YzQsIDB4YWJjOCwgMHg5MzA1LCAweGFiY2MsCi0JMHg5MzA1LCAweGFiZDAsIDB4OTMwNSwgMHhhYmQ0LCAweDkzMDUsIDB4YWJkOCwgMHg5MzA1LCAweGFiZGMsCi0JMHg5MzA1LCAweGFiZTAsIDB4OTMwNSwgMHg5MDA1LCAweDA1MTAsIDB4MDAwZSwgMHgwMGM4LCAweDkwYzYsCi0JMHg0MDA3LCAweDExMTAsIDB4MjQwOCwgMHgwMGEwLCAweDkwYzYsIDB4NDAwOCwgMHgxMTE4LCAweDI3MDgsCi0JMHgyNjEwLCAweDAwNzAsIDB4OTBjNiwgMHg0MDA5LCAweDExMDgsIDB4MDA1MCwgMHg5MGM2LCAweDQwMDYsCi0JMHgwMTM4LCAweDIwMDEsIDB4NDAwNSwgMHgyMDA5LCAweDAwMGEsIDB4MDAxMCwgMHgyMDAxLCAweDQwMDYsCi0JMHhhODk2LCAweGE5OWEsIDB4YWE5ZSwgMHgyMDAxLCAweDAwMzAsIDB4OTAwZSwgMHgwNDc4LCAweDAwMGUsCi0JMHgwODBjLCAweGIwYWIsIDB4MTEzMCwgMHgyMDAxLCAweDQwMDUsIDB4MjAwOSwgMHgwMDAzLCAweDkwMTYsCi0JMHgwYzc4LCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLCAweGQyZDIsIDB4MjkwMCwgMHg2MDE2LCAweDYwMjMsCi0JMHgwMDAxLCAweGE4NjgsIDB4ZDg4YywgMHgwMTA4LCAweGMwZjUsIDB4YTg2YSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4MzI0NiwgMHgwMTJlLCAweDkwMDYsIDB4MDgwYywgMHg2NjRmLCAweDIwMDEsCi0JMHgwMDAyLCAweDA4MGMsIDB4NjY2MywgMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHhiMTgwLCAweGE4YjAsCi0JMHhkMDk0LCAweDAxMTgsIDB4YjhjYywgMHhjMDhkLCAweGI4Y2UsIDB4OTAwNiwgMHg5MDA1LCAweDAxMmUsCi0JMHgwMGVlLCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDA4MGMsIDB4NTdlNywgMHgwMTE4LCAweDIwMDksCi0JMHgwMDA3LCAweDAwZjgsIDB4YTk5OCwgMHhhZWIwLCAweDA4MGMsIDB4NjcxZCwgMHgxOTA0LCAweDY0YTEsCi0JMHg5MTg2LCAweDAwN2YsIDB4MDEzMCwgMHgwODBjLCAweDZhOTIsIDB4MDExOCwgMHgyMDA5LCAweDAwMDksCi0JMHgwMDgwLCAweDAwOTYsIDB4MDgwYywgMHgxMDBlLCAweDExMjAsIDB4MDA5ZSwgMHgyMDA5LCAweDAwMDIsCi0JMHgwMDQwLCAweDI5MDAsIDB4MDA5ZSwgMHhhODA2LCAweDA4MGMsIDB4ZDAzZSwgMHgxOWIwLCAweDIwMDksCi0JMHgwMDAzLCAweDIwMDEsIDB4NDAwNSwgMHgwODA0LCAweDY0YTgsIDB4YTk5OCwgMHhhZWIwLCAweDA4MGMsCi0JMHg2NzFkLCAweDE5MDQsIDB4NjRhMSwgMHgwMDk2LCAweDA4MGMsIDB4MTAwZSwgMHgxMTI4LCAweDAwOWUsCi0JMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHg2NTYxLCAweDI5MDAsIDB4MDA5ZSwgMHhhODA2LCAweDAwOTYsCi0JMHgyMDQ4LCAweDIwYTksIDB4MDAyYiwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHgyMDk4LCAweGE4NjAsCi0JMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDAyLCAweDIwYTAsIDB4NDAwMywgMHgyMGE5LCAweDAwMDgsCi0JMHg5MDgwLCAweDAwMDYsIDB4MjBhMCwgMHhiYmM4LCAweDkzOTgsIDB4MDAwNiwgMHgyMzk4LCAweDA4MGMsCi0JMHgwZjhiLCAweDAwOWUsIDB4YTg3YiwgMHgwMDAwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDAsCi0JMHhkNjg0LCAweDExNjgsIDB4MDgwYywgMHg1N2QzLCAweGQwYjQsIDB4MTExOCwgMHhhODliLCAweDAwMGIsCi0JMHgwMGUwLCAweGI4MDAsIDB4ZDA4YywgMHgwMTE4LCAweGE4OWIsIDB4MDAwYywgMHgwMGIwLCAweDA4MGMsCi0JMHg2YTkyLCAweDAxMTgsIDB4YTg5YiwgMHgwMDA5LCAweDAwODAsIDB4MDgwYywgMHg1N2U3LCAweDAxMTgsCi0JMHhhODliLCAweDAwMDcsIDB4MDA1MCwgMHgwODBjLCAweGQwMjEsIDB4MTkwNCwgMHg2NGRkLCAweDIwMDksCi0JMHgwMDAzLCAweDIwMDEsIDB4NDAwNSwgMHgwODA0LCAweDY0YTgsIDB4YTg3YiwgMHgwMDMwLCAweGE4OTcsCi0JMHg0MDA1LCAweGE4MDQsIDB4ODAwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsCi0JMHhmZmMwLCAweDkwODAsIDB4MDAwMiwgMHgyMDA5LCAweDAwMmIsIDB4YWFhMCwgMHhhYjljLCAweGFjYTgsCi0JMHhhZGE0LCAweDIwMzEsIDB4MDAwMCwgMHgyMDQxLCAweDEyNTIsIDB4MDgwYywgMHhiNjFmLCAweDE5MDQsCi0JMHg2NGRkLCAweDIwMDksIDB4MDAwMiwgMHgwOGU4LCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLCAweDA4MDQsCi0JMHg2NGRlLCAweDIwMDksIDB4MTgwYywgMHgyMTBjLCAweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwMDM4LCAweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAxMCwgMHgyMDAxLCAweDAwMjksCi0JMHg5MDBlLCAweDA4MDQsIDB4NjRkZSwgMHgyMDAxLCAweDAwMjksIDB4OTAwZSwgMHgwODA0LCAweDY0ZGUsCi0JMHgwODBjLCAweDM3ZGQsIDB4MDgwNCwgMHg2NGRmLCAweDA4MGMsIDB4NTRmZSwgMHgwODA0LCAweDY0ZGYsCi0JMHgwODBjLCAweDQ2MGMsIDB4MDgwNCwgMHg2NGRmLCAweDA4MGMsIDB4NDY4NSwgMHgwODA0LCAweDY0ZGYsCi0JMHgwODBjLCAweDQ2ZTEsIDB4MDgwNCwgMHg2NGRmLCAweDA4MGMsIDB4NGI1ZiwgMHgwODA0LCAweDY0ZGYsCi0JMHgwODBjLCAweDRlMTMsIDB4MDgwNCwgMHg2NGRmLCAweDA4MGMsIDB4NTE2NSwgMHgwODA0LCAweDY0ZGYsCi0JMHgwODBjLCAweDUzNWUsIDB4MDgwNCwgMHg2NGRmLCAweDA4MGMsIDB4M2EwNywgMHgwODA0LCAweDY0ZGYsCi0JMHgwMGI2LCAweGE5NzQsIDB4YWU3OCwgMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLCAweDE2MTgsCi0JMHg5MTgyLCAweDA4MDAsIDB4MTI2OCwgMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLCAweDAxNDAsCi0JMHgwODBjLCAweDZhOTIsIDB4MTE0OCwgMHgwMGU5LCAweDA4MGMsIDB4Njg0OCwgMHg5MDA2LCAweDAwYjAsCi0JMHgyMDAxLCAweDAwMjgsIDB4OTAwZSwgMHgwMDkwLCAweDkwODIsIDB4MDAwNiwgMHgxMjQwLCAweGI5MDAsCi0JMHhkMWZjLCAweDBkODgsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwMDM4LCAweDIwMDEsCi0JMHgwMDI5LCAweDkwMGUsIDB4MDAxOCwgMHgyMDAxLCAweDAwMjksIDB4OTAwZSwgMHg5MDA1LCAweDAwYmUsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGI4NTAsIDB4OTAwZCwgMHgwMTUwLCAweDI5MDAsCi0JMHgwMDk2LCAweDIxNDgsIDB4YTgwMiwgMHgwMDllLCAweGE4MDMsIDB4MDAwMCwgMHhiODUyLCAweDAxMmUsCi0JMHgwMDA1LCAweDI5MDAsIDB4Yjg1MiwgMHhiODRlLCAweGE4MDMsIDB4MDAwMCwgMHgwY2MwLCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4Yjg0YywgMHg5MDA1LCAweDAxNzAsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZTksCi0JMHg3MDA0LCAweDkwODYsIDB4MDAwMiwgMHgwMTY4LCAweDAwZWUsIDB4Yjg0YywgMHhhODAyLCAweDI5MDAsCi0JMHhiODRlLCAweDAxMmUsIDB4MDAwNSwgMHgyOTAwLCAweGI4NTIsIDB4Yjg0ZSwgMHhhODAzLCAweDAwMDAsCi0JMHgwY2MwLCAweDcwMWMsIDB4OWIwNiwgMHgxZDgwLCAweGI4NGMsIDB4MDBhNiwgMHgyMDUwLCAweGIwMDAsCi0JMHhhODAyLCAweDI5MDAsIDB4YjAwMiwgMHgwMGFlLCAweDAwZWUsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4Yjg0YywgMHg5MDRkLCAweDAxMzAsIDB4YTgwMCwgMHg5MDA1LCAweDExMDgsCi0JMHhiODUyLCAweGI4NGUsIDB4OTkwNSwgMHgwMTJlLCAweDAwMDUsIDB4Yjg0YywgMHg5MDRkLCAweDAxMzAsCi0JMHhhODAwLCAweDkwMDUsIDB4MTEwOCwgMHhiODUyLCAweGI4NGUsIDB4OTkwNSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMTI2LCAweDAwYzYsIDB4MDAyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIxMCwgMHgyMjU4LCAweGJhMDAsCi0JMHg5MDA1LCAweDAxMTAsIDB4YzI4NSwgMHgwMDA4LCAweGMyODQsIDB4YmEwMiwgMHgwMDJlLCAweDAwY2UsCi0JMHgwMTJlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LCAweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg2MjEwLCAweDIyNTgsIDB4YmEwNCwgMHgwMDA2LCAweDkwODYsIDB4MDAwNiwgMHgxMTcwLCAweGI4OWMsCi0JMHhkMGFjLCAweDAxNTgsIDB4MDgwYywgMHg2YThlLCAweDAxNDAsIDB4OTI4NCwgMHhmZjAwLCAweDgwMDcsCi0JMHg5MDg2LCAweDAwMDcsIDB4MTExMCwgMHgyMDExLCAweDA2MDAsIDB4MDAwZSwgMHg5Mjk0LCAweGZmMDAsCi0JMHg5MjE1LCAweGJhMDYsIDB4MDAwNiwgMHg5MDg2LCAweDAwMDYsIDB4MTEyMCwgMHhiYTkwLCAweDgyZmYsCi0JMHgwOTBjLCAweDBkYzUsIDB4MDAwZSwgMHgwMGNlLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMTI2LCAweDAwYzYsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTAsIDB4MjI1OCwgMHhiYTA0LCAweDAwMDYsCi0JMHg5MDg2LCAweDAwMDYsIDB4MTE2OCwgMHhiODljLCAweGQwYTQsIDB4MDE1MCwgMHgwODBjLCAweDZhOGEsCi0JMHgxMTM4LCAweDkyODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDcsIDB4MTExMCwgMHgyMDExLCAweDAwMDYsCi0JMHgwMDBlLCAweDkyOTQsIDB4MDBmZiwgMHg4MDA3LCAweDkyMTUsIDB4YmEwNiwgMHgwMGNlLCAweDAxMmUsCi0JMHgwMGJlLCAweDAwMDUsIDB4OTE4MiwgMHgwODAwLCAweDAyMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHgwMGQ2LCAweDAwMjYsIDB4OTE5MCwgMHgxMDAwLCAweDIyMDQsIDB4OTA1ZCwgMHgxMTg4LCAweDAwOTYsCi0JMHgwODBjLCAweDEwMGUsIDB4Mjk1OCwgMHgwMDllLCAweDAxNjgsIDB4MmIwMCwgMHgyMDEyLCAweGI4NWMsCi0JMHhiOGNhLCAweGI4NjAsIDB4YjhjNiwgMHg5MDA2LCAweGI4YTYsIDB4YjhhZSwgMHgwODBjLCAweDYxNDEsCi0JMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMjYsIDB4OTE4MiwgMHgwODAwLCAweDAyMTgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDRhOCwgMHgwMGQ2LCAweDkxOTAsIDB4MTAwMCwgMHgyMjA0LCAweDkwNWQsCi0JMHgwNTY4LCAweDIwMTMsIDB4MDAwMCwgMHhiOGE0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDEwNDAsCi0JMHgwMGQ2LCAweDAwYzYsIDB4YjhiYywgMHgyMDYwLCAweDhjZmYsIDB4MDE2OCwgMHg2MDBjLCAweDAwMDYsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZTU2LCAweDAxMTAsIDB4MDgwYywgMHgwZmMwLCAweDA4MGMsCi0JMHhiMTAxLCAweDAwY2UsIDB4MGM4OCwgMHgwMGNlLCAweDAwZGUsIDB4MDBjNiwgMHhiOGFjLCAweDkwNjUsCi0JMHgwMTI4LCAweDYyMWMsIDB4ZDJjNCwgMHgwMTEwLCAweDA4MGMsIDB4OGY2NCwgMHgwMGNlLCAweDJiNDgsCi0JMHhiOGM4LCAweGI4NWUsIDB4YjhjNCwgMHhiODYyLCAweDA4MGMsIDB4MTA1MCwgMHgwMGRlLCAweDkwMDYsCi0JMHgwMDJlLCAweDAxMmUsIDB4MDA5ZSwgMHgwMGJlLCAweDAwMDUsIDB4MDAxNiwgMHg5MTgyLCAweDA4MDAsCi0JMHgwMjE4LCAweDkwODUsIDB4MDAwMSwgMHgwMDMwLCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LCAweDkwNWQsCi0JMHgwZGMwLCAweDkwMDYsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsCi0JMHg5MDA2LCAweGI4MGEsIDB4YjgwZSwgMHhiODAwLCAweGMwOGMsIDB4YjgwMiwgMHgwODBjLCAweDc1NjksCi0JMHgxNTEwLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDAxMjAsIDB4MDgwYywgMHhiMDZiLCAweDExZDgsCi0JMHgwMDc4LCAweDcwNDAsIDB4ZDBlNCwgMHgwMWI4LCAweDAwYzYsIDB4MjA2MSwgMHgxOTgzLCAweDcwNDgsCi0JMHgyMDYyLCAweDcwNGMsIDB4NjAwNiwgMHg3MDUwLCAweDYwMGEsIDB4NzA1NCwgMHg2MDBlLCAweDAwY2UsCi0JMHg3MDNjLCAweDIwNjksIDB4MDE0MCwgMHg5MDA1LCAweDExMTAsIDB4MjAwMSwgMHgwMDAxLCAweDY4ODYsCi0JMHgyMDY5LCAweDE4MDAsIDB4NjhiNiwgMHg3MDQwLCAweGI4NWUsIDB4NzA0OCwgMHhiODYyLCAweDcwNGMsCi0JMHhiODY2LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNzYsIDB4YjhjNCwgMHgyMGU4LCAweGI4YzgsCi0JMHg5MDg4LCAweDAwMGEsIDB4MjFhMCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMywgMHgyMDk5LCAweDAyN2EsCi0JMHg5MDg4LCAweDAwMDYsIDB4MjFhMCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMywgMHgyMDY5LCAweDAyMDAsCi0JMHg2ODE3LCAweDAwMDEsIDB4NzA0MCwgMHhiODZhLCAweDcxNDQsIDB4Yjk2ZSwgMHg3MDQ4LCAweGI4NzIsCi0JMHg3MDUwLCAweGI4NzYsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTcsIDB4MDAwMCwgMHhiOGEwLCAweDkwODYsCi0JMHgwMDdlLCAweDExMTAsIDB4NzE0NCwgMHhiOTZlLCAweDkxODIsIDB4MDIxMSwgMHgxMjE4LCAweDIwMDksCi0JMHgwMDA4LCAweDA0MDAsIDB4OTE4MiwgMHgwMjU5LCAweDEyMTgsIDB4MjAwOSwgMHgwMDA3LCAweDAwZDAsCi0JMHg5MTgyLCAweDAyYzEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDYsIDB4MDBhMCwgMHg5MTgyLCAweDAzNDksCi0JMHgxMjE4LCAweDIwMDksIDB4MDAwNSwgMHgwMDcwLCAweDkxODIsIDB4MDQyMSwgMHgxMjE4LCAweDIwMDksCi0JMHgwMDA0LCAweDAwNDAsIDB4OTE4MiwgMHgwNTgxLCAweDEyMTgsIDB4MjAwOSwgMHgwMDAzLCAweDAwMTAsCi0JMHgyMDA5LCAweDAwMDIsIDB4Yjk5MiwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMGRlLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsIDB4NzAzNCwgMHhiODk2LCAweDcwM2MsCi0JMHhiODlhLCAweDcwNTQsIDB4Yjg5ZSwgMHgwMDM2LCAweGJiY2MsIDB4YzM4NCwgMHhiYTAwLCAweDIwMDksCi0JMHgxODY3LCAweDIxMGMsIDB4ZDBiYywgMHgwMTIwLCAweGQxZWMsIDB4MDExMCwgMHhjMmFkLCAweDAwMDgsCi0JMHhjMmFjLCAweGQwYzQsIDB4MDE0OCwgMHhkMWU0LCAweDAxMzgsIDB4YzJiZCwgMHhkMGNjLCAweDAxMjgsCi0JMHhkMzhjLCAweDExMDgsIDB4YzM4NSwgMHgwMDA4LCAweGMyYmMsIDB4YmEwMiwgMHhiYmNlLCAweDAwM2UsCi0JMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHhiOGE0LCAweDkwNGQsIDB4MDU3OCwgMHhhOTAwLCAweDgxZmYsIDB4MTVjMCwgMHhhYTA0LCAweDkyODIsCi0JMHgwMDEwLCAweDE2YzgsIDB4MDEzNiwgMHgwMTQ2LCAweDAxYzYsIDB4MDFkNiwgMHg4OTA2LCAweDgwMDYsCi0JMHg4MDA3LCAweDkwOGMsIDB4MDAzZiwgMHgyMWUwLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMDQsCi0JMHgyMDk4LCAweDIwMDksIDB4MDAxMCwgMHgyMGE5LCAweDAwMDEsIDB4NDAwMiwgMHg5MDg2LCAweGZmZmYsCi0JMHgwMTIwLCAweDgxMDksIDB4MWRkMCwgMHgwODBjLCAweDBkYzUsIDB4M2MwMCwgMHgyMGU4LCAweDMzMDAsCi0JMHg4MDAxLCAweDIwYTAsIDB4NDYwNCwgMHg4MjEwLCAweGFhMDYsIDB4MDFkZSwgMHgwMWNlLCAweDAxNGUsCi0JMHgwMTNlLCAweDAwNjAsIDB4MDgwYywgMHgxMDBlLCAweDAxNzAsIDB4MjkwMCwgMHhiOGE2LCAweGE4MDMsCi0JMHgwMDAwLCAweDA4MGMsIDB4NjhkOSwgMHhhODA3LCAweDAwMDEsIDB4YWUxMiwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMTJlLCAweDAwOWUsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwMDk2LCAweGI4YTQsIDB4OTA0ZCwgMHgwMTg4LCAweGE4MDAsIDB4OTAwNSwgMHgxMTUwLCAweDA4MGMsCi0JMHg2OGU4LCAweDExNTgsIDB4YTgwNCwgMHg5MDhhLCAweDAwMDIsIDB4MDIxOCwgMHg4MDAxLCAweGE4MDYsCi0JMHgwMDIwLCAweDA4MGMsIDB4MTA0MCwgMHhiOGE3LCAweDAwMDAsIDB4MDA5ZSwgMHgwMTJlLCAweDAwMDUsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDkzNTgsIDB4MDEyZSwgMHgwMDA1LCAweDkwMWUsCi0JMHgwMDEwLCAweDIwMTksIDB4MDAwMSwgMHg5MDBlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGI4NGMsCi0JMHgyMDQ4LCAweGI4MDAsIDB4ZDBkYywgMHgxMTcwLCAweDg5ZmYsIDB4MDUwMCwgMHg4M2ZmLCAweDAxMjAsCi0JMHhhODc4LCAweDk2MDYsIDB4MDE1OCwgMHgwMDMwLCAweGE4NmMsIDB4OTQwNiwgMHgxMTE4LCAweGE4NzAsCi0JMHg5NTA2LCAweDAxMjAsIDB4MjkwOCwgMHhhODAwLCAweDIwNDgsIDB4MGM3MCwgMHgwODBjLCAweGE5MWYsCi0JMHhhYTAwLCAweGI4NGMsIDB4OTkwNiwgMHgxMTEwLCAweGJhNGUsIDB4MDAyMCwgMHgwMGE2LCAweDIxNTAsCi0JMHhiMjAyLCAweDAwYWUsIDB4ODJmZiwgMHgxMTEwLCAweGI5NTIsIDB4ODlmZiwgMHgwMTJlLCAweDAwMDUsCi0JMHg5MDE2LCAweDA0ODksIDB4MTExMCwgMHgyMDExLCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLCAweDY5M2QsCi0JMHgwMTI4LCAweDA4MGMsIDB4Y2YxMywgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsCi0JMHg2OTNkLCAweDAxMjgsIDB4MDgwYywgMHhjZWI4LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHgwODBjLCAweDY5M2QsIDB4MDEyOCwgMHgwODBjLCAweGNmMTAsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDA4MGMsIDB4NjkzZCwgMHgwMTI4LCAweDA4MGMsIDB4Y2VkNywgMHgwMDEwLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg2OTNkLCAweDAxMjgsIDB4MDgwYywgMHhjZjU2LCAweDAwMTAsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHhiOGE0LCAweDkwMGQsIDB4MTExOCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAxMzYsIDB4MDFjNiwgMHhhODAwLCAweDkwMDUsIDB4MTFiOCwgMHg4OTBlLCAweDgxMGUsCi0JMHg4MTBmLCAweDkxODQsIDB4MDAzZiwgMHgyMGUwLCAweDkxODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMDQsCi0JMHgyMDk4LCAweDIwYTksIDB4MDAwMSwgMHgyMDA5LCAweDAwMTAsIDB4NDAwMiwgMHg5NjA2LCAweDAxMjgsCi0JMHg4MTA5LCAweDFkZDgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMWNlLCAweDAxM2UsCi0JMHgwMDA1LCAweDAxNDYsIDB4MDFkNiwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMDQsCi0JMHgyMGEwLCAweDIwYTksIDB4MDAxMCwgMHgyMDA5LCAweGZmZmYsIDB4NDEwNCwgMHgwMWRlLCAweDAxNGUsCisJMHgwMDEzLCAweDA4MGMsIDB4NjA5YSwgMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTAzLCAweDc4MzcsCisJMHgwMDAwLCAweDA4MGMsIDB4NjEwOCwgMHgwODBjLCAweDYwZWIsIDB4MTE3MCwgMHg3MDg0LCAweDkwMDUsCisJMHgxMTU4LCAweDcxNWMsIDB4OTE4NiwgMHhmZmZmLCAweDAxMzgsIDB4MjAxMSwgMHgwMDA4LCAweDA4MGMsCisJMHg1ZjQ0LCAweDAxNjgsIDB4MDgwYywgMHg2MGMxLCAweDIwYTksIDB4MDAwOCwgMHgyMGUxLCAweDAwMDAsCisJMHgyMDk5LCAweDAyNmUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0ZSwgMHg0MDAzLCAweDYwYzMsCisJMHgwMDE0LCAweDA4MGMsIDB4NWZjMSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsCisJMHgwNTAwLCAweDIwMTEsIDB4NWY5NywgMHgwODBjLCAweDg4M2QsIDB4OTA4NiwgMHgwMDE0LCAweDExYjgsCisJMHgwODBjLCAweDYxMDgsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA0LCAweDExNzgsCisJMHg3ODM0LCAweDkwMDUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LCAweDkwMDUsCisJMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg3MDliLCAweDAwMTQsIDB4MDAyOSwgMHgwMDEwLCAweDcwOTMsCisJMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOWIsIDB4MDAxNSwgMHgwODBjLCAweDYwOWEsCisJMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA0LCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLCAweDYxMDgsCisJMHgwODBjLCAweDYwZWIsIDB4MTFiOCwgMHg3MDg0LCAweDkwMDUsIDB4MTFhMCwgMHg3MTY0LCAweDkxODYsCisJMHhmZmZmLCAweDAxODAsIDB4OTE4MCwgMHgzM2I2LCAweDIwMGQsIDB4OTE4YywgMHhmZjAwLCAweDgxMGYsCisJMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHg1ZjQ0LCAweDAxODAsIDB4MDgwYywgMHg1MGQxLCAweDAxMTAsCisJMHgwODBjLCAweDI4ZGMsIDB4MjBhOSwgMHgwMDA4LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNmUsCisJMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDQwMDMsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsCisJMHg1ZmMxLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsIDB4OTAwNSwgMHgwNWYwLCAweDIwMTEsCisJMHg1Zjk3LCAweDA4MGMsIDB4ODgzZCwgMHg5MDg2LCAweDAwMTQsIDB4MTVhOCwgMHgwODBjLCAweDYxMDgsCisJMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDUsIDB4MTU2OCwgMHg3ODM0LCAweDkwODQsCisJMHgwMTAwLCAweDIwMTEsIDB4MDEwMCwgMHg5MjFlLCAweDExNjgsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCisJMHg2MTMzLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsCisJMHgwMDAxLCAweDAwODAsIDB4OTAwNSwgMHgxMWI4LCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzQsCisJMHg5MDA1LCAweDExMTAsIDB4NzBjNywgMHgwMDAxLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDYxMzMsCisJMHg3MDk3LCAweDAwMDAsIDB4N2EzOCwgMHhkMmY0LCAweDAxMTAsIDB4NzBkZiwgMHgwMDA4LCAweDcwOWIsCisJMHgwMDE2LCAweDAwMjksIDB4MDAxMCwgMHg3MDkzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDA4MGMsCisJMHhhZjhlLCAweDA4MGMsIDB4NjEwOCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjYwLCAweDIwZTksCisJMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHgyMGE5LCAweDAwMGUsIDB4NDAwMywgMHgyMDExLCAweDAyNmQsCisJMHgyMjA0LCAweDkwODQsIDB4MDEwMCwgMHgyMDExLCAweDAyNGQsIDB4MjAxMiwgMHgyMDExLCAweDAyNmUsCisJMHg3MDliLCAweDAwMTcsIDB4MDgwYywgMHg2MGViLCAweDExNTAsIDB4NzA4NCwgMHg5MDA1LCAweDExMzgsCisJMHgwODBjLCAweDVlYjcsIDB4MTE4OCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHgyOGRjLCAweDIwYTksCisJMHgwMDA4LCAweDA4MGMsIDB4NjEwOCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLCAweDIwZTksCisJMHgwMDAwLCAweDIwYTEsIDB4MDI0ZSwgMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDVmYzEsCisJMHgwMDEwLCAweDA4MGMsIDB4NWExMSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LCAweDAxZDgsCisJMHgyMDExLCAweDVmOTcsIDB4MDgwYywgMHg4ODNkLCAweDkwODYsIDB4MDA4NCwgMHgxMTkwLCAweDA4MGMsCisJMHg2MTA4LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwNiwgMHgxMTUwLCAweDc4MzQsCisJMHg5MDA1LCAweDExMzgsIDB4OTAwNiwgMHgwODBjLCAweDYxMzMsIDB4NzA5YiwgMHgwMDE4LCAweDAwMjksCisJMHgwMDEwLCAweDcwOTMsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLCAweDAwMTksCisJMHgwODBjLCAweDYwOWEsIDB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwNiwgMHg3ODM3LCAweDAwMDAsCisJMHgwODBjLCAweDYxMDgsIDB4MjAwOSwgMHgwMjZlLCAweDIwMzksIDB4MWMwZSwgMHgyMGE5LCAweDAwNDAsCisJMHgyMTNlLCAweDg3MzgsIDB4ODEwOCwgMHg5MTg2LCAweDAyODAsIDB4MTEyOCwgMHg2ODE0LCAweDgwMDAsCisJMHg2ODE2LCAweDIwMDksIDB4MDI2MCwgMHgxZjA0LCAweDVlMjAsIDB4MjAzOSwgMHgxYzBlLCAweDA4MGMsCisJMHg2MGViLCAweDExZTgsIDB4MjcyOCwgMHgyNTE0LCAweDgyMDcsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDAsCisJMHgyMDE4LCAweDkyOTQsIDB4MDBmZiwgMHg4MDA3LCAweDkyMDUsIDB4MjAyYSwgMHg3MDYwLCAweDIzMTAsCisJMHg4MjE0LCAweDkyYTAsIDB4MWMwZSwgMHgyNDE0LCAweDkzOGMsIDB4MDAwMSwgMHgwMTE4LCAweDkyOTQsCisJMHhmZjAwLCAweDAwMTgsIDB4OTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4OTIxNSwgMHgyMjIyLCAweDIwYTksCisJMHgwMDQwLCAweDIwMDksIDB4MDI0ZSwgMHgyNzBlLCAweDg3MzgsIDB4ODEwOCwgMHg5MTg2LCAweDAyNjAsCisJMHgxMTI4LCAweDY4MTAsIDB4ODAwMCwgMHg2ODEyLCAweDIwMDksIDB4MDI0MCwgMHgxZjA0LCAweDVlNTMsCisJMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg1ZmMxLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsCisJMHg5MDA1LCAweDAxZTAsIDB4MjAxMSwgMHg1Zjk3LCAweDA4MGMsIDB4ODgzZCwgMHg5MDg2LCAweDAwODQsCisJMHgxMTk4LCAweDA4MGMsIDB4NjEwOCwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDcsCisJMHgxMTU4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTQwLCAweDcwOTcsIDB4MDAwMSwgMHgwODBjLCAweDYwNWUsCisJMHg3MDliLCAweDAwMWEsIDB4MDAyOSwgMHgwMDEwLCAweDcwOTMsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsCisJMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHg2MTMzLCAweDcwOWIsIDB4MDAxYiwgMHgwODBjLCAweGFmOGUsCisJMHgwODBjLCAweDYxMDgsIDB4MjAxMSwgMHgwMjYwLCAweDIwMDksIDB4MDI0MCwgMHg3NDkwLCAweDk0ODAsCisJMHgwMDE4LCAweDkwODAsIDB4MDAwNywgMHg5MDg0LCAweDAzZjgsIDB4ODAwNCwgMHgyMGE4LCAweDIyMGUsCisJMHg4MjEwLCAweDgxMDgsIDB4OTE4NiwgMHgwMjYwLCAweDExNTAsIDB4NjgxMCwgMHg4MDAwLCAweDY4MTIsCisJMHgyMDA5LCAweDAyNDAsIDB4NjgxNCwgMHg4MDAwLCAweDY4MTYsIDB4MjAxMSwgMHgwMjYwLCAweDFmMDQsCisJMHg1ZTlmLCAweDYwYzMsIDB4MDA4NCwgMHgwODBjLCAweDVmYzEsIDB4MDAwNSwgMHgwMDA1LCAweDAwODYsCisJMHgwMDk2LCAweDIwMjksIDB4MTg0OCwgMHgyNTJjLCAweDIwYTksIDB4MDAwOCwgMHgyMDQxLCAweDFjMGUsCisJMHgyMGU5LCAweDAwMDEsIDB4MjhhMCwgMHgwODBjLCAweDYxMDgsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksCisJMHgwMjZlLCAweDQwMDMsIDB4MjBhOSwgMHgwMDA4LCAweDIwMTEsIDB4MDAwNywgMHhkNWQ0LCAweDAxMDgsCisJMHg5MDE2LCAweDI4MDAsIDB4OTIwMCwgMHgyMDBjLCAweDkxYTYsIDB4ZmZmZiwgMHgxMTQ4LCAweGQ1ZDQsCisJMHgwMTEwLCAweDgyMTAsIDB4MDAwOCwgMHg4MjExLCAweDFmMDQsIDB4NWVkMSwgMHgwODA0LCAweDVmNDAsCisJMHg4MmZmLCAweDExNjAsIDB4ZDVkNCwgMHgwMTIwLCAweDkxYTYsIDB4M2ZmZiwgMHgwZDkwLCAweDAwMjAsCisJMHg5MWE2LCAweDNmZmYsIDB4MDkwNCwgMHg1ZjQwLCAweDkxOGQsIDB4YzAwMCwgMHgyMGE5LCAweDAwMTAsCisJMHgyMDE5LCAweDAwMDEsIDB4ZDVkNCwgMHgwMTEwLCAweDIwMTksIDB4MDAxMCwgMHgyMTIwLCAweGQ1ZDQsCisJMHgwMTEwLCAweDg0MjMsIDB4MDAwOCwgMHg4NDI0LCAweDEyNDAsIDB4ZDVkNCwgMHgwMTEwLCAweDgzMTksCisJMHgwMDA4LCAweDgzMTgsIDB4MWYwNCwgMHg1ZWY3LCAweDA0ZDgsIDB4MjNhOCwgMHgyMDIxLCAweDAwMDEsCisJMHg4NDI2LCAweDg0MjUsIDB4MWYwNCwgMHg1ZjA5LCAweDIzMjgsIDB4ODUyOSwgMHg5MmJlLCAweDAwMDcsCisJMHgwMTU4LCAweDAwMDYsIDB4MjAzOSwgMHgwMDA3LCAweDIyMDAsIDB4OTczYSwgMHgwMDBlLCAweDI3YTgsCisJMHg5NWE4LCAweDAwMTAsIDB4MWYwNCwgMHg1ZjE4LCAweDc1NWUsIDB4OTVjOCwgMHgzM2I2LCAweDI5MmQsCisJMHg5NWFjLCAweDAwZmYsIDB4NzU4MiwgMHg2NTMyLCAweDY1MzYsIDB4MDAxNiwgMHgyNTA4LCAweDA4MGMsCisJMHgyOGJjLCAweDAwMWUsIDB4NjBlNywgMHgwMDAwLCAweDY1ZWEsIDB4MjAxOCwgMHgyMzA0LCAweDk0MDUsCisJMHgyMDFhLCAweDcwODcsIDB4MDAwMSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDIwZTEsCisJMHgwMDAxLCAweDI4OTgsIDB4MjBhOSwgMHgwMDA4LCAweDQwMDMsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsCisJMHg5MDA2LCAweDAwOWUsIDB4MDA4ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCisJMHgwMTQ2LCAweDIyYTgsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgyMGU5LCAweDAwMDAsCisJMHgyMDExLCAweDAyNGUsIDB4MjJhMCwgMHg0MDAzLCAweDAxNGUsIDB4MDEzZSwgMHgwMWRlLCAweDAxY2UsCisJMHgwMTVlLCAweDIxMTgsIDB4OTAyNiwgMHgyMDAxLCAweDAwMDcsIDB4OTM5YSwgMHgwMDEwLCAweDAyMTgsCisJMHg4NDIwLCAweDgwMDEsIDB4MGNkMCwgMHgyMTE4LCAweDg0ZmYsIDB4MDEyMCwgMHg5MzlhLCAweDAwMTAsCisJMHg4NDIxLCAweDFkZTAsIDB4MjAyMSwgMHgwMDAxLCAweDgzZmYsIDB4MDExOCwgMHg4NDIzLCAweDgzMTksCisJMHgxZGU4LCAweDkyMzgsIDB4MjAyOSwgMHgwMjZlLCAweDk1MjgsIDB4MjUwNCwgMHg5NDJjLCAweDExYjgsCisJMHg5NDA1LCAweDIwM2EsIDB4NzE1ZSwgMHg5MWEwLCAweDMzYjYsIDB4MjQyZCwgMHg5NWFjLCAweDAwZmYsCisJMHg3NTgyLCAweDY1MzIsIDB4NjUzNiwgMHgwMDE2LCAweDI1MDgsIDB4MDgwYywgMHgyOGJjLCAweDAwMWUsCisJMHg2MGU3LCAweDAwMDAsIDB4NjVlYSwgMHg3MDg3LCAweDAwMDEsIDB4OTA4NCwgMHgwMDAwLCAweDAwMDUsCisJMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3MDhiLCAweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsCisJMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgyMDcxLCAweDAxNDAsIDB4MDgwYywgMHg2MDRkLCAweDA4MGMsCisJMHhhNmU5LCAweDcwMDQsIDB4OTA4NCwgMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyZDQ5LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxODI2LCAweDIwNzMsIDB4MDAwMCwgMHg3ODQwLCAweDAwMjYsCisJMHgwMDE2LCAweDIwMDksIDB4MDBmNywgMHgwODBjLCAweDYwYWEsIDB4MDAxZSwgMHg5MDk0LCAweDAwMTAsCisJMHg5Mjg1LCAweDAwODAsIDB4Nzg0MiwgMHg3YTQyLCAweDAwMmUsIDB4MDEyZSwgMHgwMGZlLCAweDAwZWUsCisJMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MmJjZSwgMHgwMjI4LCAweDIwMTEsCisJMHgwMTAxLCAweDIyMDQsIDB4YzBjNSwgMHgyMDEyLCAweDIwMTEsIDB4MTlmMiwgMHgyMDEzLCAweDAwMDAsCisJMHg3MDkzLCAweDAwMDAsIDB4MDEyZSwgMHg2MGEzLCAweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDA4MGMsCisJMHhhNmUwLCAweDYxNDQsIDB4ZDE4NCwgMHgwMTIwLCAweDcxOTgsIDB4OTE4ZCwgMHgyMDAwLCAweDAwMTgsCisJMHg3MThjLCAweDkxOGQsIDB4MTAwMCwgMHgyMDExLCAweDE5OTksIDB4MjExMiwgMHgyMDA5LCAweDA3ZDAsCisJMHgyMDExLCAweDVmOTcsIDB4MDgwYywgMHg4OGQ1LCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwYzYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIyNDQsIDB4MjAwOSwgMHgwMGY3LCAweDA4MGMsCisJMHg2MGFhLCAweDIwNjEsIDB4MTlmYiwgMHg5MDBlLCAweDYxMWEsIDB4NjExZSwgMHg2MTdhLCAweDYxN2UsCisJMHgyMDYxLCAweDE4MDAsIDB4NjAwMywgMHgwMDAxLCAweDIwNjEsIDB4MDEwMCwgMHg2MDQzLCAweDAwOTAsCisJMHg2MDQzLCAweDAwMTAsIDB4MjAwOSwgMHgxOTk5LCAweDIwMGIsIDB4MDAwMCwgMHgyMDA5LCAweDAwMmQsCisJMHgyMDExLCAweDYwMTksIDB4MDgwYywgMHg4ODMxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwMDA1LCAweDAwZTYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwNDcxLCAweDIwNzEsCisJMHgwMTAwLCAweDA4MGMsIDB4YTZlOSwgMHgyMDcxLCAweDAxNDAsIDB4NzAwNCwgMHg5MDg0LCAweDQwMDAsCisJMHgwMTEwLCAweDA4MGMsIDB4MmQ0OSwgMHgwODBjLCAweDc2M2YsIDB4MDE4OCwgMHgwODBjLCAweDc2NWEsCisJMHgxMTcwLCAweDA4MGMsIDB4NzkzYywgMHgwMDE2LCAweDA4MGMsIDB4Mjk4YiwgMHgyMDAxLCAweDE5NmQsCisJMHgyMTAyLCAweDAwMWUsIDB4MDgwYywgMHg3OTM3LCAweDA4MGMsIDB4NzU2MywgMHgwMDUwLCAweDIwMDksCisJMHgwMDAxLCAweDA4MGMsIDB4MmM2NywgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyODFjLCAweDA4MGMsCisJMHg1ZmVkLCAweDAxMmUsIDB4MDAwZSwgMHgwMGVlLCAweDAwMDUsIDB4MjAwMSwgMHgxODBlLCAweDIwMDQsCisJMHhkMGJjLCAweDAxNTgsIDB4MDAyNiwgMHgwMDM2LCAweDIwMTEsIDB4ODAxNywgMHgyMDAxLCAweDE5OTksCisJMHgyMDFjLCAweDA4MGMsIDB4NGM0NCwgMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgyMGE5LCAweDAwMTIsCisJMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxYzgwLCAweDA4MGMsIDB4NjEwOCwgMHgyMGU5LCAweDAwMDAsCisJMHgyMDk5LCAweDAyNmUsIDB4MDA5OSwgMHgyMGE5LCAweDAwMjAsIDB4MDgwYywgMHg2MTAyLCAweDIwOTksCisJMHgwMjYwLCAweDIwYTEsIDB4MWM5MiwgMHgwMDUxLCAweDIwYTksIDB4MDAwZSwgMHgwODBjLCAweDYxMDUsCisJMHgyMDk5LCAweDAyNjAsIDB4MjBhMSwgMHgxY2IyLCAweDAwMDksIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsCisJMHgzNDEwLCAweDMzMDgsIDB4MjEwNCwgMHg4MDA3LCAweDIwMTIsIDB4ODEwOCwgMHg4MjEwLCAweDFmMDQsCisJMHg2MDgyLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDA4MGMsIDB4YWY4ZSwgMHgyMGUxLCAweDAwMDEsCisJMHgyMDk5LCAweDFjMDAsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHgyMGE5LCAweDAwMGMsCisJMHg0MDAzLCAweDAwMDUsIDB4MDgwYywgMHhhZjhlLCAweDA4MGMsIDB4NjEwOCwgMHgyMGUxLCAweDAwMDAsCisJMHgyMDk5LCAweDAyNjAsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHgyMGE5LCAweDAwMGMsCisJMHg0MDAzLCAweDAwMDUsIDB4MDBjNiwgMHgwMDA2LCAweDIwNjEsIDB4MDEwMCwgMHg4MTBmLCAweDIwMDEsCisJMHgxODM0LCAweDIwMDQsIDB4OTAwNSwgMHgxMTM4LCAweDIwMDEsIDB4MTgxOCwgMHgyMDA0LCAweDkwODQsCisJMHgwMGZmLCAweDkxMDUsIDB4MDAxMCwgMHg5MTg1LCAweDAwZjcsIDB4NjA0YSwgMHgwMDBlLCAweDAwY2UsCisJMHgwMDA1LCAweDAwMTYsIDB4MDA0NiwgMHgwODBjLCAweDZhOWYsIDB4MDE1OCwgMHg5MDA2LCAweDIwMjAsCisJMHgyMDA5LCAweDAwMmEsIDB4MDgwYywgMHhlYzMxLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxOTUsCisJMHgyMTAyLCAweDIwMTksIDB4MDAyYSwgMHg5MDBlLCAweDA4MGMsIDB4MzIxYiwgMHgwODBjLCAweGQ3ZTMsCisJMHgwMTQwLCAweDAwMzYsIDB4MjAxOSwgMHhmZmZmLCAweDIwMjEsIDB4MDAwNywgMHgwODBjLCAweDRkZmIsCisJMHgwMDNlLCAweDAwNGUsIDB4MDAxZSwgMHgwMDA1LCAweDA4MGMsIDB4NWZlZCwgMHg3MDliLCAweDAwMDAsCisJMHg3MDkzLCAweDAwMDAsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MTgwYywgMHgyMDA0LCAweGQwOWMsCisJMHgwMTAwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgyMDAxLCAweDAxMDEsIDB4MjAwYywgMHg5MThkLCAweDAwMDYsIDB4MjEwMiwgMHgwMTJlLCAweDAwMWUsCisJMHgwMDBlLCAweDAwMDUsIDB4MjAwOSwgMHgwMDAxLCAweDAwMjAsIDB4MjAwOSwgMHgwMDAyLCAweDAwMDgsCisJMHg5MDBlLCAweDY4MTQsIDB4OTA4NCwgMHhmZmMwLCAweDkxMGQsIDB4NjkxNiwgMHgwMDA1LCAweDAwZjYsCisJMHgwMTU2LCAweDAxNDYsIDB4MDFkNiwgMHg5MDA2LCAweDIwYTksIDB4MDA4MCwgMHgyMGU5LCAweDAwMDEsCisJMHgyMGExLCAweDFjMDAsIDB4NDAwNCwgMHgyMDc5LCAweDFjMDAsIDB4NzgwMywgMHgyMjAwLCAweDc4MDcsCisJMHgwMGVmLCAweDc4MGYsIDB4MDBlZiwgMHg3ODEzLCAweDAxMzgsIDB4NzgyMywgMHhmZmZmLCAweDc4MjcsCisJMHhmZmZmLCAweDAxZGUsIDB4MDE0ZSwgMHgwMTVlLCAweDAwZmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MDAsCisJMHgyMDAzLCAweDAwMDEsIDB4MDAwNSwgMHgyMDAxLCAweDE5YTcsIDB4MDExOCwgMHgyMDAzLCAweDAwMDEsCisJMHgwMDEwLCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LCAweDAxNTYsIDB4MjBhOSwgMHgwODAwLCAweDIwMDksCisJMHgxMDAwLCAweDkwMDYsIDB4MjAwYSwgMHg4MTA4LCAweDFmMDQsIDB4NjE0MiwgMHgwMTVlLCAweDAwMDUsCisJMHgwMGQ2LCAweDAwMzYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MjA2OSwgMHgxODQ3LCAweDkwMDYsCisJMHhiODAyLCAweGI4Y2UsIDB4YjgwNywgMHgwNzA3LCAweGI4MGEsIDB4YjgwZSwgMHhiODEyLCAweDkxOTgsCisJMHgzM2I2LCAweDIzMWQsIDB4OTM5YywgMHgwMGZmLCAweGJiMTYsIDB4MDAxNiwgMHgwMDI2LCAweGI4YzIsCisJMHgwODBjLCAweGIyM2QsIDB4MTEyMCwgMHg5MTkyLCAweDAwN2UsIDB4MTIwOCwgMHhiYmMyLCAweDIwYTksCisJMHgwMDA0LCAweGI4YzQsIDB4MjBlOCwgMHhiOWM4LCAweDkxOTgsIDB4MDAwNiwgMHg5MDA2LCAweDIzYTAsCisJMHg0MDA0LCAweDIwYTksIDB4MDAwNCwgMHg5MTk4LCAweDAwMGEsIDB4MjNhMCwgMHg0MDA0LCAweDAwMmUsCisJMHgwMDFlLCAweGI4M2UsIDB4Yjg0MiwgMHhiODRlLCAweGI4NTIsIDB4Yjg1NiwgMHhiODVhLCAweGI4NWUsCisJMHhiODYyLCAweGI4NjYsIDB4Yjg2YSwgMHhiODZmLCAweDAxMDAsIDB4Yjg3MiwgMHhiODc2LCAweGI4N2EsCisJMHhiODhhLCAweGI4OGUsIDB4Yjg5MywgMHgwMDA4LCAweGI4OTYsIDB4Yjg5YSwgMHhiODllLCAweGI4YmUsCisJMHhiOWEyLCAweDAwOTYsIDB4YjhhNCwgMHg5MDRkLCAweDAxMTAsIDB4MDgwYywgMHgxMDQwLCAweGI4YTcsCisJMHgwMDAwLCAweDAwOWUsIDB4OTAwNiwgMHhiODRhLCAweDY4MTAsIDB4YjgzYSwgMHg2ODBjLCAweGI4NDYsCisJMHhiOGJiLCAweDA1MjAsIDB4YjhhYywgMHg5MDA1LCAweDAxOTgsIDB4MDBjNiwgMHgyMDYwLCAweDljODIsCisJMHgxY2QwLCAweDBhMGMsIDB4MGRjNSwgMHgyMDAxLCAweDE4MWEsIDB4MjAwNCwgMHg5YzAyLCAweDFhMGMsCisJMHgwZGM1LCAweDA4MGMsIDB4OGNmNywgMHgwMGNlLCAweDA5MGMsIDB4OTA5NiwgMHhiOGFmLCAweDAwMDAsCisJMHg2ODE0LCAweDkwODQsIDB4MDBmZiwgMHhiODQyLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwM2UsCisJMHgwMGRlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YTk3NCwgMHhhZTc4LCAweDk2ODQsCisJMHgzZmZmLCAweDkwODIsIDB4NDAwMCwgMHgxYTA0LCAweDYyMzAsIDB4OTE4MiwgMHgwODAwLCAweDFhMDQsCisJMHg2MjM0LCAweDIwMDEsIDB4MTgwYywgMHgyMDA0LCAweDkwODQsIDB4MDAwMywgMHgxOTA0LCAweDYyM2EsCisJMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLCAweDA1MTgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MDhlLCAweDAwMDYsIDB4MTUwOCwgMHhiOGE0LCAweDkwMGQsIDB4MTkwNCwgMHg2MjRjLCAweGI4NTAsCisJMHg5MDBkLCAweDExNDgsIDB4YTgwMiwgMHgyOTAwLCAweGI4NTIsIDB4Yjg0ZSwgMHgwODBjLCAweDk1MWMsCisJMHg5MDA2LCAweDAxMmUsIDB4MDAwNSwgMHgwMGE2LCAweDIxNTAsIDB4MjkwMCwgMHhiMDAyLCAweGE4MDMsCisJMHgwMDAwLCAweDAwYWUsIDB4Yjg1MiwgMHgwYzkwLCAweDIwMDEsIDB4MDAwNSwgMHg5MDBlLCAweDA0YjgsCisJMHgyMDAxLCAweDAwMjgsIDB4OTAwZSwgMHgwNDk4LCAweDkwODIsIDB4MDAwNiwgMHgxMjkwLCAweDA4MGMsCisJMHhiMjNkLCAweDExNjAsIDB4YjhhMCwgMHg5MDg0LCAweGZmODAsIDB4MTE0MCwgMHhiOTAwLCAweGQxZmMsCisJMHgwOTkwLCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDQwOCwgMHgyMDAxLCAweDAwMjgsCisJMHgwMGE4LCAweDIwMDksIDB4MTgwYywgMHgyMTBjLCAweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsCisJMHgwMDY4LCAweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDA0MCwgMHgyMDAxLCAweDAwMjksCisJMHhiOTAwLCAweGQxZmMsIDB4MDExOCwgMHgyMDA5LCAweDEwMDAsIDB4MDA0OCwgMHg5MDBlLCAweDAwMzgsCisJMHgyMDAxLCAweDAwMjksIDB4OTAwZSwgMHgwMDE4LCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLCAweDkwMDUsCisJMHgwMTJlLCAweDAwMDUsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsIDB4ZDA4NCwgMHgxOWQwLCAweDkxODgsCisJMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHgwOWE4LCAweDA4MGMsIDB4NmFhMywgMHgxOTkwLCAweGI4MDAsCisJMHhkMGJjLCAweDA5NzgsIDB4MDgwNCwgMHg2MWUzLCAweDA4MGMsIDB4NjhjMCwgMHgwOTA0LCAweDYxZmMsCisJMHgwODA0LCAweDYxZTcsIDB4MDBiNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4NzQsCisJMHg5MDhlLCAweDAwZmYsIDB4MTEyMCwgMHgyMDAxLCAweDE5NmIsIDB4MjA1YywgMHgwMDYwLCAweGE5NzQsCisJMHg5MTgyLCAweDA4MDAsIDB4MTY5MCwgMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLCAweDAxZDAsCisJMHgwODBjLCAweDZhNDMsIDB4MTFkMCwgMHgwODBjLCAweGIyN2QsIDB4MDU3MCwgMHgyYjAwLCAweDYwMTIsCisJMHgyOTAwLCAweDYwMTYsIDB4NjAyMywgMHgwMDA5LCAweDYwMGIsIDB4MDAwMCwgMHhhODc0LCAweDkwOGUsCisJMHgwMGZmLCAweDExMTAsIDB4NjAwYiwgMHg4MDAwLCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGIzNTIsCisJMHg5MDA2LCAweDAwYjAsIDB4MjAwMSwgMHgwMDI4LCAweDAwOTAsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsCisJMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMzgsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsCisJMHgwMDA0LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDkwMDUsCisJMHgwMTJlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAyYywgMHgwY2MwLCAweDAwYjYsCisJMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE5NzQsIDB4OTE4MiwgMHgwODAwLCAweDFhMDQsCisJMHg2MzFkLCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LCAweDkwNWQsIDB4MDkwNCwgMHg2MmY1LCAweGI4YTAsCisJMHg5MDg2LCAweDAwN2YsIDB4MDE5MCwgMHhhODdjLCAweGQwZmMsIDB4MTE3OCwgMHgwODBjLCAweDZhYWIsCisJMHgwMTYwLCAweGE5OTQsIDB4ODFmZiwgMHgwMTMwLCAweDkwOGUsIDB4MDAwNCwgMHgwMTMwLCAweDkwOGUsCisJMHgwMDA1LCAweDAxMTgsIDB4MDgwYywgMHg2YWEzLCAweDE1OTgsIDB4YTg3YywgMHhkMGZjLCAweDAxZTAsCisJMHhhODk0LCAweDkwMDUsIDB4MDFjOCwgMHgyMDYwLCAweDAwMjYsIDB4MjAxMCwgMHgwODBjLCAweGQwYzYsCisJMHgwMDJlLCAweDExMjAsIDB4MjAwMSwgMHgwMDA4LCAweDA4MDQsIDB4NjMxZiwgMHg2MDIwLCAweDkwODYsCisJMHgwMDBhLCAweDAxMjAsIDB4MjAwMSwgMHgwMDA4LCAweDA4MDQsIDB4NjMxZiwgMHg2MDFhLCAweDYwMDMsCisJMHgwMDA4LCAweDI5MDAsIDB4NjAxNiwgMHgwMDU4LCAweDA4MGMsIDB4YjI3ZCwgMHgwNWU4LCAweDJiMDAsCisJMHg2MDEyLCAweDI5MDAsIDB4NjAxNiwgMHg2MDBiLCAweGZmZmYsIDB4NjAyMywgMHgwMDBhLCAweDIwMDksCisJMHgwMDAzLCAweDA4MGMsIDB4YjM1MiwgMHg5MDA2LCAweDA0NTgsIDB4MjAwMSwgMHgwMDI4LCAweDA0MzgsCisJMHg5MDgyLCAweDAwMDYsIDB4MTI5MCwgMHgwODBjLCAweGIyM2QsIDB4MTE2MCwgMHhiOGEwLCAweDkwODQsCisJMHhmZjgwLCAweDExNDAsIDB4YjkwMCwgMHhkMWZjLCAweDA5MDAsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksCisJMHgxMDAwLCAweDAwYTgsIDB4MjAwMSwgMHgwMDI4LCAweDAwOTAsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsCisJMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwNTAsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsCisJMHgwMDA0LCAweDAwMjgsIDB4MjAwMSwgMHgwMDI5LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDkwMDUsCisJMHgwMTJlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAyYywgMHgwY2MwLCAweDAwZjYsCisJMHgwMGI2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4ZTAsIDB4OTAwNSwgMHgxNTUwLCAweGE4ZGMsCisJMHg5MDgyLCAweDAxMDEsIDB4MTYzMCwgMHhhOGM4LCAweDkwMDUsIDB4MTUxOCwgMHhhOGM0LCAweDkwODIsCisJMHgwMTAxLCAweDEyZjgsIDB4YTk3NCwgMHgyMDc5LCAweDE4MDAsIDB4OTE4MiwgMHgwODAwLCAweDEyZTgsCisJMHg3ODMwLCAweDkwODQsIDB4MDAwMywgMHgxMTMwLCAweGFhOTgsIDB4YWI5NCwgMHhhODc4LCAweDkwODQsCisJMHgwMDA3LCAweDAwZWEsIDB4NzkzMCwgMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMzgsCisJMHhkMTg0LCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsCisJMHgwMDM4LCAweDIwMDEsIDB4MDAyYywgMHg5MDBlLCAweDAwMTgsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsCisJMHg5MDA2LCAweDAwMDgsIDB4OTAwNSwgMHgwMTJlLCAweDAwYmUsIDB4MDBmZSwgMHgwMDA1LCAweDYzYjQsCisJMHg2MzZmLCAweDYzODYsIDB4NjNiNCwgMHg2M2I0LCAweDYzYjQsIDB4NjNiNCwgMHg2M2I0LCAweDIxMDAsCisJMHg5MDgyLCAweDAwN2UsIDB4MTI3OCwgMHgwODBjLCAweDY2YjksIDB4MDE0OCwgMHg5MDQ2LCAweGI4MTAsCisJMHg5MzA2LCAweDE5MDQsIDB4NjNiYywgMHhiODE0LCAweDkyMDYsIDB4MTVmMCwgMHgwMDI4LCAweGJiMTIsCisJMHhiYTE2LCAweDAwMTAsIDB4MDgwYywgMHg0YWY3LCAweDAxNTAsIDB4MDRiMCwgMHgwODBjLCAweDY3MjQsCisJMHgxNTk4LCAweGI4MTAsIDB4OTMwNiwgMHgxNTgwLCAweGI4MTQsIDB4OTIwNiwgMHgxNTY4LCAweDA4MGMsCisJMHhiMjdkLCAweDA1MzAsIDB4MmIwMCwgMHg2MDEyLCAweDA4MGMsIDB4ZDU1NCwgMHgyOTAwLCAweDYwMTYsCisJMHg2MDBiLCAweGZmZmYsIDB4NjAyMywgMHgwMDBhLCAweGE4NzgsIDB4OTA4NiwgMHgwMDAxLCAweDExNzAsCisJMHgwODBjLCAweDMyNTAsIDB4OTAwNiwgMHgwODBjLCAweDY2NTYsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCisJMHg2NjZhLCAweDIwMDEsIDB4MDIwMCwgMHhiODZlLCAweGI4OTMsIDB4MDAwMiwgMHgyMDA5LCAweDAwMDMsCisJMHgwODBjLCAweGIzNTIsIDB4OTAwNiwgMHgwMDY4LCAweDIwMDEsIDB4MDAwMSwgMHg5MDBlLCAweDAwMzgsCisJMHgyMDAxLCAweDAwMmMsIDB4OTAwZSwgMHgwMDE4LCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLCAweDkwMDUsCisJMHgwMDAwLCAweDAxMmUsIDB4MDBiZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGY2LCAweDAwZTYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhhODk0LCAweDkwYzYsIDB4MDAxNSwgMHgwOTA0LCAweDY1YTcsCisJMHg5MGM2LCAweDAwNTYsIDB4MDkwNCwgMHg2NWFiLCAweDkwYzYsIDB4MDA2NiwgMHgwOTA0LCAweDY1YWYsCisJMHg5MGM2LCAweDAwNjcsIDB4MDkwNCwgMHg2NWIzLCAweDkwYzYsIDB4MDA2OCwgMHgwOTA0LCAweDY1YjcsCisJMHg5MGM2LCAweDAwNzEsIDB4MDkwNCwgMHg2NWJiLCAweDkwYzYsIDB4MDA3NCwgMHgwOTA0LCAweDY1YmYsCisJMHg5MGM2LCAweDAwN2MsIDB4MDkwNCwgMHg2NWMzLCAweDkwYzYsIDB4MDA3ZSwgMHgwOTA0LCAweDY1YzcsCisJMHg5MGM2LCAweDAwMzcsIDB4MDkwNCwgMHg2NWNiLCAweDkwMTYsIDB4MjA3OSwgMHgxODAwLCAweGE5NzQsCisJMHg5MTg2LCAweDAwZmYsIDB4MDkwNCwgMHg2NWEyLCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LCAweDY1YTIsCisJMHgwODBjLCAweDY3MjQsIDB4MTE5OCwgMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDgyLCAweDAwMDYsCisJMHgxMjY4LCAweGE4OTQsIDB4OTBjNiwgMHgwMDZmLCAweDAxNDgsIDB4MDgwYywgMHhiMjNkLCAweDE5MDQsCisJMHg2NThiLCAweGI4YTAsIDB4OTA4NCwgMHhmZjgwLCAweDE5MDQsIDB4NjU4YiwgMHhhODk0LCAweDkwYzYsCisJMHgwMDZmLCAweDAxNTgsIDB4OTBjNiwgMHgwMDVlLCAweDA5MDQsIDB4NjRlYiwgMHg5MGM2LCAweDAwNjQsCisJMHgwOTA0LCAweDY1MTQsIDB4MjAwOCwgMHgwODA0LCAweDY0YWQsIDB4YTk5OCwgMHhhOGIwLCAweDIwNDAsCisJMHgwODBjLCAweGIyM2QsIDB4MTEyMCwgMHg5MTgyLCAweDAwN2YsIDB4MGEwNCwgMHg2NGFkLCAweDkxODYsCisJMHgwMGZmLCAweDA5MDQsIDB4NjRhZCwgMHg5MTgyLCAweDA4MDAsIDB4MWEwNCwgMHg2NGFkLCAweGFhYTAsCisJMHhhYjljLCAweDc4N2MsIDB4OTMwNiwgMHgxMWE4LCAweDc4ODAsIDB4MDA5NiwgMHg5MjRlLCAweDExMjgsCisJMHgyMjA4LCAweDIzMTAsIDB4MDA5ZSwgMHgwODA0LCAweDY0YWQsIDB4MDgwYywgMHhiMjNkLCAweDExNDAsCisJMHg5OWNjLCAweGZmMDAsIDB4MDA5ZSwgMHgxMTI4LCAweDIyMDgsIDB4MjMxMCwgMHgwODA0LCAweDY0YWQsCisJMHgwMDllLCAweDA4MGMsIDB4NGFmNywgMHgwOTA0LCAweDY0YjcsIDB4OTAwZSwgMHg5MDE2LCAweDkwYzYsCisJMHg0MDAwLCAweDE1ZTAsIDB4MDAwNiwgMHgwODBjLCAweDY5NDQsIDB4MTEwOCwgMHhjMTg1LCAweGI4MDAsCisJMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgyMGE5LCAweDAwMDQsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsCisJMHg5MDgwLCAweDAwMzEsIDB4MjBhMCwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMDYsCisJMHgyMDk4LCAweDA4MGMsIDB4MGY4YiwgMHgyMGE5LCAweDAwMDQsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsCisJMHg5MDgwLCAweDAwMzUsIDB4MjBhMCwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMGEsCisJMHgyMDk4LCAweDA4MGMsIDB4MGY4YiwgMHhhOGM0LCAweGFiYzgsIDB4OTMwNSwgMHhhYmNjLCAweDkzMDUsCisJMHhhYmQwLCAweDkzMDUsIDB4YWJkNCwgMHg5MzA1LCAweGFiZDgsIDB4OTMwNSwgMHhhYmRjLCAweDkzMDUsCisJMHhhYmUwLCAweDkzMDUsIDB4OTAwNSwgMHgwNTEwLCAweDAwMGUsIDB4MDBjOCwgMHg5MGM2LCAweDQwMDcsCisJMHgxMTEwLCAweDI0MDgsIDB4MDBhMCwgMHg5MGM2LCAweDQwMDgsIDB4MTExOCwgMHgyNzA4LCAweDI2MTAsCisJMHgwMDcwLCAweDkwYzYsIDB4NDAwOSwgMHgxMTA4LCAweDAwNTAsIDB4OTBjNiwgMHg0MDA2LCAweDAxMzgsCisJMHgyMDAxLCAweDQwMDUsIDB4MjAwOSwgMHgwMDBhLCAweDAwMTAsIDB4MjAwMSwgMHg0MDA2LCAweGE4OTYsCisJMHhhOTlhLCAweGFhOWUsIDB4MjAwMSwgMHgwMDMwLCAweDkwMGUsIDB4MDQ3OCwgMHgwMDBlLCAweDA4MGMsCisJMHhiMjdkLCAweDExMzAsIDB4MjAwMSwgMHg0MDA1LCAweDIwMDksIDB4MDAwMywgMHg5MDE2LCAweDBjNzgsCisJMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhkNTU0LCAweDI5MDAsIDB4NjAxNiwgMHg2MDIzLCAweDAwMDEsCisJMHhhODY4LCAweGQ4OGMsIDB4MDEwOCwgMHhjMGY1LCAweGE4NmEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwODBjLCAweDMyNTAsIDB4MDEyZSwgMHg5MDA2LCAweDA4MGMsIDB4NjY1NiwgMHgyMDAxLCAweDAwMDIsCisJMHgwODBjLCAweDY2NmEsIDB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4YjM1MiwgMHhhOGIwLCAweGQwOTQsCisJMHgwMTE4LCAweGI4Y2MsIDB4YzA4ZCwgMHhiOGNlLCAweDkwMDYsIDB4OTAwNSwgMHgwMTJlLCAweDAwZWUsCisJMHgwMGZlLCAweDAwYmUsIDB4MDAwNSwgMHgwODBjLCAweDU3ZTksIDB4MDExOCwgMHgyMDA5LCAweDAwMDcsCisJMHgwMGY4LCAweGE5OTgsIDB4YWViMCwgMHgwODBjLCAweDY3MjQsIDB4MTkwNCwgMHg2NGE4LCAweDkxODYsCisJMHgwMDdmLCAweDAxMzAsIDB4MDgwYywgMHg2YWEzLCAweDAxMTgsIDB4MjAwOSwgMHgwMDA5LCAweDAwODAsCisJMHgwMDk2LCAweDA4MGMsIDB4MTAwZSwgMHgxMTIwLCAweDAwOWUsIDB4MjAwOSwgMHgwMDAyLCAweDAwNDAsCisJMHgyOTAwLCAweDAwOWUsIDB4YTgwNiwgMHgwODBjLCAweGQyYzAsIDB4MTliMCwgMHgyMDA5LCAweDAwMDMsCisJMHgyMDAxLCAweDQwMDUsIDB4MDgwNCwgMHg2NGFmLCAweGE5OTgsIDB4YWViMCwgMHgwODBjLCAweDY3MjQsCisJMHgxOTA0LCAweDY0YTgsIDB4MDA5NiwgMHgwODBjLCAweDEwMGUsIDB4MTEyOCwgMHgwMDllLCAweDIwMDksCisJMHgwMDAyLCAweDA4MDQsIDB4NjU2OCwgMHgyOTAwLCAweDAwOWUsIDB4YTgwNiwgMHgwMDk2LCAweDIwNDgsCisJMHgyMGE5LCAweDAwMmIsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsIDB4MjA5OCwgMHhhODYwLCAweDIwZTgsCisJMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLCAweDQwMDMsIDB4MjBhOSwgMHgwMDA4LCAweDkwODAsCisJMHgwMDA2LCAweDIwYTAsIDB4YmJjOCwgMHg5Mzk4LCAweDAwMDYsIDB4MjM5OCwgMHgwODBjLCAweDBmOGIsCisJMHgwMDllLCAweGE4N2IsIDB4MDAwMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDAwLCAweGQ2ODQsCisJMHgxMTY4LCAweDA4MGMsIDB4NTdkNSwgMHhkMGI0LCAweDExMTgsIDB4YTg5YiwgMHgwMDBiLCAweDAwZTAsCisJMHhiODAwLCAweGQwOGMsIDB4MDExOCwgMHhhODliLCAweDAwMGMsIDB4MDBiMCwgMHgwODBjLCAweDZhYTMsCisJMHgwMTE4LCAweGE4OWIsIDB4MDAwOSwgMHgwMDgwLCAweDA4MGMsIDB4NTdlOSwgMHgwMTE4LCAweGE4OWIsCisJMHgwMDA3LCAweDAwNTAsIDB4MDgwYywgMHhkMmEzLCAweDE5MDQsIDB4NjRlNCwgMHgyMDA5LCAweDAwMDMsCisJMHgyMDAxLCAweDQwMDUsIDB4MDgwNCwgMHg2NGFmLCAweGE4N2IsIDB4MDAzMCwgMHhhODk3LCAweDQwMDUsCisJMHhhODA0LCAweDgwMDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsCisJMHg5MDgwLCAweDAwMDIsIDB4MjAwOSwgMHgwMDJiLCAweGFhYTAsIDB4YWI5YywgMHhhY2E4LCAweGFkYTQsCisJMHgyMDMxLCAweDAwMDAsIDB4MjA0MSwgMHgxMjUyLCAweDA4MGMsIDB4YjdmMSwgMHgxOTA0LCAweDY0ZTQsCisJMHgyMDA5LCAweDAwMDIsIDB4MDhlOCwgMHgyMDAxLCAweDAwMjgsIDB4OTAwZSwgMHgwODA0LCAweDY0ZTUsCisJMHgyMDA5LCAweDE4MGMsIDB4MjEwYywgMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMzgsCisJMHhkMTg0LCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsCisJMHgwODA0LCAweDY0ZTUsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4MDgwNCwgMHg2NGU1LCAweDA4MGMsCisJMHgzN2U5LCAweDA4MDQsIDB4NjRlNiwgMHgwODBjLCAweDU1MDAsIDB4MDgwNCwgMHg2NGU2LCAweDA4MGMsCisJMHg0NjM3LCAweDA4MDQsIDB4NjRlNiwgMHgwODBjLCAweDQ2YjAsIDB4MDgwNCwgMHg2NGU2LCAweDA4MGMsCisJMHg0NzBjLCAweDA4MDQsIDB4NjRlNiwgMHgwODBjLCAweDRiYmEsIDB4MDgwNCwgMHg2NGU2LCAweDA4MGMsCisJMHg0ZTgyLCAweDA4MDQsIDB4NjRlNiwgMHgwODBjLCAweDUxNjcsIDB4MDgwNCwgMHg2NGU2LCAweDA4MGMsCisJMHg1MzYwLCAweDA4MDQsIDB4NjRlNiwgMHgwODBjLCAweDNhMjUsIDB4MDgwNCwgMHg2NGU2LCAweDAwYjYsCisJMHhhOTc0LCAweGFlNzgsIDB4OTY4NCwgMHgzZmZmLCAweDkwODIsIDB4NDAwMCwgMHgxNjE4LCAweDkxODIsCisJMHgwODAwLCAweDEyNjgsIDB4OTE4OCwgMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHgwMTQwLCAweDA4MGMsCisJMHg2YWEzLCAweDExNDgsIDB4MDBlOSwgMHgwODBjLCAweDY4NGYsIDB4OTAwNiwgMHgwMGIwLCAweDIwMDEsCisJMHgwMDI4LCAweDkwMGUsIDB4MDA5MCwgMHg5MDgyLCAweDAwMDYsIDB4MTI0MCwgMHhiOTAwLCAweGQxZmMsCisJMHgwZDg4LCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDAzOCwgMHgyMDAxLCAweDAwMjksCisJMHg5MDBlLCAweDAwMTgsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4OTAwNSwgMHgwMGJlLCAweDAwMDUsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiODUwLCAweDkwMGQsIDB4MDE1MCwgMHgyOTAwLCAweDAwOTYsCisJMHgyMTQ4LCAweGE4MDIsIDB4MDA5ZSwgMHhhODAzLCAweDAwMDAsIDB4Yjg1MiwgMHgwMTJlLCAweDAwMDUsCisJMHgyOTAwLCAweGI4NTIsIDB4Yjg0ZSwgMHhhODAzLCAweDAwMDAsIDB4MGNjMCwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweGI4NGMsIDB4OTAwNSwgMHgwMTcwLCAweDAwZTYsIDB4MjA3MSwgMHgxOWU4LCAweDcwMDQsCisJMHg5MDg2LCAweDAwMDIsIDB4MDE2OCwgMHgwMGVlLCAweGI4NGMsIDB4YTgwMiwgMHgyOTAwLCAweGI4NGUsCisJMHgwMTJlLCAweDAwMDUsIDB4MjkwMCwgMHhiODUyLCAweGI4NGUsIDB4YTgwMywgMHgwMDAwLCAweDBjYzAsCisJMHg3MDFjLCAweDliMDYsIDB4MWQ4MCwgMHhiODRjLCAweDAwYTYsIDB4MjA1MCwgMHhiMDAwLCAweGE4MDIsCisJMHgyOTAwLCAweGIwMDIsIDB4MDBhZSwgMHgwMGVlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweGI4NGMsIDB4OTA0ZCwgMHgwMTMwLCAweGE4MDAsIDB4OTAwNSwgMHgxMTA4LCAweGI4NTIsCisJMHhiODRlLCAweDk5MDUsIDB4MDEyZSwgMHgwMDA1LCAweGI4NGMsIDB4OTA0ZCwgMHgwMTMwLCAweGE4MDAsCisJMHg5MDA1LCAweDExMDgsIDB4Yjg1MiwgMHhiODRlLCAweDk5MDUsIDB4MDAwNSwgMHgwMGI2LCAweDAxMjYsCisJMHgwMGM2LCAweDAwMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTAsIDB4MjI1OCwgMHhiYTAwLCAweDkwMDUsCisJMHgwMTEwLCAweGMyODUsIDB4MDAwOCwgMHhjMjg0LCAweGJhMDIsIDB4MDAyZSwgMHgwMGNlLCAweDAxMmUsCisJMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMTI2LCAweDAwYzYsIDB4MjA5MSwgMHg4MDAwLCAweDYyMTAsCisJMHgyMjU4LCAweGJhMDQsIDB4MDAwNiwgMHg5MDg2LCAweDAwMDYsIDB4MTE3MCwgMHhiODljLCAweGQwYWMsCisJMHgwMTU4LCAweDA4MGMsIDB4NmE5ZiwgMHgwMTQwLCAweDkyODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwODYsCisJMHgwMDA3LCAweDExMTAsIDB4MjAxMSwgMHgwNjAwLCAweDAwMGUsIDB4OTI5NCwgMHhmZjAwLCAweDkyMTUsCisJMHhiYTA2LCAweDAwMDYsIDB4OTA4NiwgMHgwMDA2LCAweDExMjAsIDB4YmE5MCwgMHg4MmZmLCAweDA5MGMsCisJMHgwZGM1LCAweDAwMGUsIDB4MDBjZSwgMHgwMTJlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LCAweDAxMjYsCisJMHgwMGM2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjEwLCAweDIyNTgsIDB4YmEwNCwgMHgwMDA2LCAweDkwODYsCisJMHgwMDA2LCAweDExNjgsIDB4Yjg5YywgMHhkMGE0LCAweDAxNTAsIDB4MDgwYywgMHg2YTliLCAweDExMzgsCisJMHg5Mjg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA3LCAweDExMTAsIDB4MjAxMSwgMHgwMDA2LCAweDAwMGUsCisJMHg5Mjk0LCAweDAwZmYsIDB4ODAwNywgMHg5MjE1LCAweGJhMDYsIDB4MDBjZSwgMHgwMTJlLCAweDAwYmUsCisJMHgwMDA1LCAweDkxODIsIDB4MDgwMCwgMHgwMjE4LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwZDYsCisJMHgwMDI2LCAweDkxOTAsIDB4MTAwMCwgMHgyMjA0LCAweDkwNWQsIDB4MTE4OCwgMHgwMDk2LCAweDA4MGMsCisJMHgxMDBlLCAweDI5NTgsIDB4MDA5ZSwgMHgwMTY4LCAweDJiMDAsIDB4MjAxMiwgMHhiODVjLCAweGI4Y2EsCisJMHhiODYwLCAweGI4YzYsIDB4OTAwNiwgMHhiOGE2LCAweGI4YWUsIDB4MDgwYywgMHg2MTQ4LCAweDkwMDYsCisJMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDJlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGI2LCAweDAwOTYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDI2LCAweDkxODIsIDB4MDgwMCwgMHgwMjE4LCAweDkwODUsCisJMHgwMDAxLCAweDA0YTgsIDB4MDBkNiwgMHg5MTkwLCAweDEwMDAsIDB4MjIwNCwgMHg5MDVkLCAweDA1NjgsCisJMHgyMDEzLCAweDAwMDAsIDB4YjhhNCwgMHg5MDRkLCAweDAxMTAsIDB4MDgwYywgMHgxMDQwLCAweDAwZDYsCisJMHgwMGM2LCAweGI4YmMsIDB4MjA2MCwgMHg4Y2ZmLCAweDAxNjgsIDB4NjAwYywgMHgwMDA2LCAweDYwMTQsCisJMHgyMDQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTEwLCAweDA4MGMsIDB4MGZjMCwgMHgwODBjLCAweGIyZDMsCisJMHgwMGNlLCAweDBjODgsIDB4MDBjZSwgMHgwMGRlLCAweDAwYzYsIDB4YjhhYywgMHg5MDY1LCAweDAxMjgsCisJMHg2MjFjLCAweGQyYzQsIDB4MDExMCwgMHgwODBjLCAweDkwOTYsIDB4MDBjZSwgMHgyYjQ4LCAweGI4YzgsCisJMHhiODVlLCAweGI4YzQsIDB4Yjg2MiwgMHgwODBjLCAweDEwNTAsIDB4MDBkZSwgMHg5MDA2LCAweDAwMmUsCisJMHgwMTJlLCAweDAwOWUsIDB4MDBiZSwgMHgwMDA1LCAweDAwMTYsIDB4OTE4MiwgMHgwODAwLCAweDAyMTgsCisJMHg5MDg1LCAweDAwMDEsIDB4MDAzMCwgMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLCAweDBkYzAsCisJMHg5MDA2LCAweDAwMWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAxNTYsIDB4MDEzNiwgMHgwMTQ2LCAweDkwMDYsCisJMHhiODBhLCAweGI4MGUsIDB4YjgwMCwgMHhjMDhjLCAweGI4MDIsIDB4MDgwYywgMHg3NjM3LCAweDE1MTAsCisJMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgwMTIwLCAweDA4MGMsIDB4YjIzZCwgMHgxMWQ4LCAweDAwNzgsCisJMHg3MDQwLCAweGQwZTQsIDB4MDFiOCwgMHgwMGM2LCAweDIwNjEsIDB4MTk4MiwgMHg3MDQ4LCAweDIwNjIsCisJMHg3MDRjLCAweDYwMDYsIDB4NzA1MCwgMHg2MDBhLCAweDcwNTQsIDB4NjAwZSwgMHgwMGNlLCAweDcwM2MsCisJMHgyMDY5LCAweDAxNDAsIDB4OTAwNSwgMHgxMTEwLCAweDIwMDEsIDB4MDAwMSwgMHg2ODg2LCAweDIwNjksCisJMHgxODAwLCAweDY4YjYsIDB4NzA0MCwgMHhiODVlLCAweDcwNDgsIDB4Yjg2MiwgMHg3MDRjLCAweGI4NjYsCisJMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjc2LCAweGI4YzQsIDB4MjBlOCwgMHhiOGM4LCAweDkwODgsCisJMHgwMDBhLCAweDIxYTAsIDB4MjBhOSwgMHgwMDA0LCAweDQwMDMsIDB4MjA5OSwgMHgwMjdhLCAweDkwODgsCisJMHgwMDA2LCAweDIxYTAsIDB4MjBhOSwgMHgwMDA0LCAweDQwMDMsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTcsCisJMHgwMDAxLCAweDcwNDAsIDB4Yjg2YSwgMHg3MTQ0LCAweGI5NmUsIDB4NzA0OCwgMHhiODcyLCAweDcwNTAsCisJMHhiODc2LCAweDIwNjksIDB4MDIwMCwgMHg2ODE3LCAweDAwMDAsIDB4YjhhMCwgMHg5MDg2LCAweDAwN2UsCisJMHgxMTEwLCAweDcxNDQsIDB4Yjk2ZSwgMHg5MTgyLCAweDAyMTEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDgsCisJMHgwNDAwLCAweDkxODIsIDB4MDI1OSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNywgMHgwMGQwLCAweDkxODIsCisJMHgwMmMxLCAweDEyMTgsIDB4MjAwOSwgMHgwMDA2LCAweDAwYTAsIDB4OTE4MiwgMHgwMzQ5LCAweDEyMTgsCisJMHgyMDA5LCAweDAwMDUsIDB4MDA3MCwgMHg5MTgyLCAweDA0MjEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDQsCisJMHgwMDQwLCAweDkxODIsIDB4MDU4MSwgMHgxMjE4LCAweDIwMDksIDB4MDAwMywgMHgwMDEwLCAweDIwMDksCisJMHgwMDAyLCAweGI5OTIsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwMTYsCisJMHgwMDI2LCAweDAwZTYsIDB4MjA3MSwgMHgwMjYwLCAweDcwMzQsIDB4Yjg5NiwgMHg3MDNjLCAweGI4OWEsCisJMHg3MDU0LCAweGI4OWUsIDB4MDAzNiwgMHhiYmNjLCAweGMzODQsIDB4YmEwMCwgMHgyMDA5LCAweDE4NjcsCisJMHgyMTBjLCAweGQwYmMsIDB4MDEyMCwgMHhkMWVjLCAweDAxMTAsIDB4YzJhZCwgMHgwMDA4LCAweGMyYWMsCisJMHhkMGM0LCAweDAxNDgsIDB4ZDFlNCwgMHgwMTM4LCAweGMyYmQsIDB4ZDBjYywgMHgwMTI4LCAweGQzOGMsCisJMHgxMTA4LCAweGMzODUsIDB4MDAwOCwgMHhjMmJjLCAweGJhMDIsIDB4YmJjZSwgMHgwMDNlLCAweDAwZWUsCisJMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGI4YTQsCisJMHg5MDRkLCAweDA1NzgsIDB4YTkwMCwgMHg4MWZmLCAweDE1YzAsIDB4YWEwNCwgMHg5MjgyLCAweDAwMTAsCisJMHgxNmM4LCAweDAxMzYsIDB4MDE0NiwgMHgwMWM2LCAweDAxZDYsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsCisJMHg5MDhjLCAweDAwM2YsIDB4MjFlMCwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDA0LCAweDIwOTgsCisJMHgyMDA5LCAweDAwMTAsIDB4MjBhOSwgMHgwMDAxLCAweDQwMDIsIDB4OTA4NiwgMHhmZmZmLCAweDAxMjAsCisJMHg4MTA5LCAweDFkZDAsIDB4MDgwYywgMHgwZGM1LCAweDNjMDAsIDB4MjBlOCwgMHgzMzAwLCAweDgwMDEsCisJMHgyMGEwLCAweDQ2MDQsIDB4ODIxMCwgMHhhYTA2LCAweDAxZGUsIDB4MDFjZSwgMHgwMTRlLCAweDAxM2UsCisJMHgwMDYwLCAweDA4MGMsIDB4MTAwZSwgMHgwMTcwLCAweDI5MDAsIDB4YjhhNiwgMHhhODAzLCAweDAwMDAsCisJMHgwODBjLCAweDY4ZTAsIDB4YTgwNywgMHgwMDAxLCAweGFlMTIsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCisJMHgwMDllLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwOTYsCisJMHhiOGE0LCAweDkwNGQsIDB4MDE4OCwgMHhhODAwLCAweDkwMDUsIDB4MTE1MCwgMHgwODBjLCAweDY4ZWYsCisJMHgxMTU4LCAweGE4MDQsIDB4OTA4YSwgMHgwMDAyLCAweDAyMTgsIDB4ODAwMSwgMHhhODA2LCAweDAwMjAsCisJMHgwODBjLCAweDEwNDAsIDB4YjhhNywgMHgwMDAwLCAweDAwOWUsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5NTFjLCAweDAxMmUsIDB4MDAwNSwgMHg5MDFlLCAweDAwMTAsCisJMHgyMDE5LCAweDAwMDEsIDB4OTAwZSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiODRjLCAweDIwNDgsCisJMHhiODAwLCAweGQwZGMsIDB4MTE3MCwgMHg4OWZmLCAweDA1MDAsIDB4ODNmZiwgMHgwMTIwLCAweGE4NzgsCisJMHg5NjA2LCAweDAxNTgsIDB4MDAzMCwgMHhhODZjLCAweDk0MDYsIDB4MTExOCwgMHhhODcwLCAweDk1MDYsCisJMHgwMTIwLCAweDI5MDgsIDB4YTgwMCwgMHgyMDQ4LCAweDBjNzAsIDB4MDgwYywgMHhhYWYxLCAweGFhMDAsCisJMHhiODRjLCAweDk5MDYsIDB4MTExMCwgMHhiYTRlLCAweDAwMjAsIDB4MDBhNiwgMHgyMTUwLCAweGIyMDIsCisJMHgwMGFlLCAweDgyZmYsIDB4MTExMCwgMHhiOTUyLCAweDg5ZmYsIDB4MDEyZSwgMHgwMDA1LCAweDkwMTYsCisJMHgwNDg5LCAweDExMTAsIDB4MjAxMSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg2OTQ0LCAweDAxMjgsCisJMHgwODBjLCAweGQxOTUsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLCAweDY5NDQsCisJMHgwMTI4LCAweDA4MGMsIDB4ZDEzYSwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsCisJMHg2OTQ0LCAweDAxMjgsIDB4MDgwYywgMHhkMTkyLCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCisJMHgwODBjLCAweDY5NDQsIDB4MDEyOCwgMHgwODBjLCAweGQxNTksIDB4MDAxMCwgMHg5MDg1LCAweDAwMDEsCisJMHgwMDA1LCAweDA4MGMsIDB4Njk0NCwgMHgwMTI4LCAweDA4MGMsIDB4ZDFkOCwgMHgwMDEwLCAweDkwODUsCisJMHgwMDAxLCAweDAwMDUsIDB4YjhhNCwgMHg5MDBkLCAweDExMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCiAJMHgwMTM2LCAweDAxYzYsIDB4YTgwMCwgMHg5MDA1LCAweDExYjgsIDB4ODkwZSwgMHg4MTBlLCAweDgxMGYsCiAJMHg5MTg0LCAweDAwM2YsIDB4MjBlMCwgMHg5MTg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDA0LCAweDIwOTgsCiAJMHgyMGE5LCAweDAwMDEsIDB4MjAwOSwgMHgwMDEwLCAweDQwMDIsIDB4OTYwNiwgMHgwMTI4LCAweDgxMDksCi0JMHgxZGQ4LCAweDkwODUsIDB4MDAwMSwgMHgwMDY4LCAweDAxNDYsIDB4MDFkNiwgMHgzMzAwLCAweDgwMDEsCi0JMHgyMGEwLCAweDNjMDAsIDB4MjBlOCwgMHgyMDAxLCAweGZmZmYsIDB4NDAwNCwgMHgwMWRlLCAweDAxNGUsCi0JMHg5MDA2LCAweDAxY2UsIDB4MDEzZSwgMHgwMDA1LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHhiOGE0LCAweDkwNGQsIDB4MTEyOCwgMHgwODBjLCAweDEwMGUsIDB4MDE2OCwgMHgyOTAwLCAweGI4YTYsCi0JMHgwODBjLCAweDY4ZDksIDB4YTgwMywgMHgwMDAxLCAweGE4MDcsIDB4MDAwMCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMTJlLCAweDAwOWUsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MDA5NiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweGI4YTQsIDB4OTA0ZCwgMHgwMTMwLCAweGI4YTcsIDB4MDAwMCwgMHgwODBjLCAweDEwNDAsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMDllLCAweDAwMDUsIDB4Yjg5YywgMHhkMGE0LCAweDAwMDUsCi0JMHgwMGI2LCAweDAwZjYsIDB4MDgwYywgMHg3NTY5LCAweDAxYjAsIDB4NzFjNCwgMHg4MWZmLCAweDExOTgsCi0JMHg3MWRjLCAweGQxOWMsIDB4MDE4MCwgMHgyMDAxLCAweDAwN2UsIDB4OTA4MCwgMHgxMDAwLCAweDIwMDQsCi0JMHg5MDVkLCAweDAxNDgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LCAweDExMTgsCi0JMHhiODAwLCAweGMwZWQsIDB4YjgwMiwgMHgyMDc5LCAweDE4NDcsIDB4NzgwNCwgMHhkMGE0LCAweDAxZDAsCi0JMHgwMTU2LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDAwMTYsIDB4MDgwYywgMHg2NzFkLCAweDExNjgsCi0JMHhiODA0LCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwOTYsIDB4MDAwNCwgMHgwMTE4LCAweDkwODYsCi0JMHgwMDA2LCAweDExMTgsIDB4YjgwMCwgMHhjMGVkLCAweGI4MDIsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsCi0JMHg2OTY0LCAweDAxNWUsIDB4MDgwYywgMHg2YTUwLCAweDAxMjAsIDB4MjAwMSwgMHgxOTg2LCAweDIwMGMsCi0JMHgwMDM4LCAweDIwNzksIDB4MTg0NywgMHg3ODA0LCAweGQwYTQsIDB4MDEzMCwgMHgyMDA5LCAweDA3ZDAsCi0JMHgyMDExLCAweDY5OGYsIDB4MDgwYywgMHg4N2ExLCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgyMDExLCAweDY5OGYsIDB4MDgwYywgMHg4NzA5LCAweDA4MGMsIDB4NmE1MCwgMHgwMWQ4LCAweDIwMDEsCi0JMHgxMDdlLCAweDIwMDQsIDB4MjA1OCwgMHhiOTAwLCAweGMxZWMsIDB4YjkwMiwgMHgwODBjLCAweDZhOGUsCi0JMHgwMTMwLCAweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDY5OGYsIDB4MDgwYywgMHg4N2ExLCAweDAwZTYsCi0JMHgyMDcxLCAweDE4MDAsIDB4OTAwNiwgMHg3MDdlLCAweDcwNjAsIDB4NzA4MiwgMHgwODBjLCAweDMwMTksCi0JMHgwMGVlLCAweDA0YzAsIDB4MDE1NiwgMHgwMGM2LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDAwMTYsCi0JMHgwODBjLCAweDY3MWQsIDB4MTU0OCwgMHhiODAwLCAweGQwZWMsIDB4MDUzMCwgMHhkMGJjLCAweDE1MjAsCi0JMHgwMDQ2LCAweGJhYTAsIDB4MjIyMCwgMHg5MDA2LCAweDIwMDksIDB4MDAyOSwgMHgwODBjLCAweGU5YTUsCi0JMHhiODAwLCAweGMwZTUsIDB4YzBlYywgMHhiODAyLCAweDA4MGMsIDB4NmE4YSwgMHgyMDAxLCAweDA3MDcsCi0JMHgxMTI4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODUsIDB4MDcwMCwgMHhiODA2LCAweDIwMTksCi0JMHgwMDI5LCAweDA4MGMsIDB4OTRlMCwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5M2IzLCAweDkwMGUsCi0JMHgwODBjLCAweGU2OTAsIDB4MDA3ZSwgMHgwMDRlLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDY5YjcsCi0JMHgwMGNlLCAweDAxNWUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsCi0JMHhjMGVjLCAweGI4MDIsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHgwMDk2LCAweDA4MGMsCi0JMHgxMDI3LCAweDA5MGMsIDB4MGRjNSwgMHgyOTU4LCAweDAwOWUsIDB4MjAwMSwgMHgxOTZjLCAweDJiMDIsCi0JMHg4YjA3LCAweDgwMDYsIDB4ODAwNiwgMHg5MDhjLCAweDAwM2YsIDB4YjljNiwgMHg5MDhjLCAweGZmYzAsCi0JMHhiOWNhLCAweGI4YWYsIDB4MDAwMCwgMHgyMDA5LCAweDAwZmYsIDB4MDgwYywgMHg2MTQxLCAweGI4MDcsCi0JMHgwMDA2LCAweGI4MTMsIDB4MDBmZiwgMHhiODE3LCAweGZmZmYsIDB4Yjg2ZiwgMHgwMjAwLCAweGI4NmMsCi0JMHhiODkzLCAweDAwMDIsIDB4YjhiYiwgMHgwNTIwLCAweGI4YTMsIDB4MDBmZiwgMHhiOGFmLCAweDAwMDAsCi0JMHgwMGNlLCAweDAwYmUsIDB4MDAwNSwgMHg3ODEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsCi0JMHhkMGFjLCAweDAwMDUsIDB4NjAxMCwgMHgwMGI2LCAweDkwNWQsIDB4MDEwOCwgMHhiODAwLCAweDAwYmUsCi0JMHhkMGJjLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4YjgwNCwgMHg5MDhjLCAweDAwZmYsCi0JMHg5MTk2LCAweDAwMDYsIDB4MDE4OCwgMHg5MTk2LCAweDAwMDQsIDB4MDE3MCwgMHg5MTk2LCAweDAwMDUsCi0JMHgwMTU4LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxOTYsIDB4MDAwNiwgMHgwMTI4LCAweDkxOTYsCi0JMHgwMDA0LCAweDAxMTAsIDB4OTE5NiwgMHgwMDA1LCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAwZjYsIDB4MjAwMSwgMHgxMDdlLCAweDIwMDQsIDB4OTA1ZCwgMHgwMTEwLCAweGI4MDAsCi0JMHhkMGVjLCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDAxMjYsIDB4MDAyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwMDA2LCAweGJhYTAsIDB4OTI5MCwgMHgxMDAwLCAweDIyMDQsIDB4OWIwNiwgMHgxOTBjLCAweDBkYzUsCi0JMHgwMDBlLCAweGJhMDAsIDB4OTAwNSwgMHgwMTEwLCAweGMyZmQsIDB4MDAwOCwgMHhjMmZjLCAweGJhMDIsCi0JMHgwMDJlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDExLCAweDE4MzcsIDB4MjIwNCwgMHhkMGNjLCAweDAxMzgsCi0JMHgyMDAxLCAweDE5ODQsIDB4MjAwYywgMHgyMDExLCAweDZhODAsIDB4MDgwYywgMHg4N2ExLCAweDAwMDUsCi0JMHgyMDExLCAweDZhODAsIDB4MDgwYywgMHg4NzA5LCAweDIwMTEsIDB4MTgzNywgMHgyMjA0LCAweGMwY2MsCi0JMHgyMDEyLCAweDAwMDUsIDB4MDgwYywgMHg1N2QzLCAweGQwYWMsIDB4MDAwNSwgMHgwODBjLCAweDU3ZDMsCi0JMHhkMGE0LCAweDAwMDUsIDB4MDAxNiwgMHhiOTA0LCAweDkxODQsIDB4MDBmZiwgMHg5MDhlLCAweDAwMDYsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHhiOTA0LCAweDkxODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwOGUsCi0JMHgwMDA2LCAweDAwMWUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZjYsIDB4MDgwYywgMHhkNTYxLCAweDAxNTgsCi0JMHg3MGRjLCAweDkwODQsIDB4MDAyOCwgMHgwMTM4LCAweDIwMDEsIDB4MTA3ZiwgMHgyMDA0LCAweDkwNWQsCi0JMHgwMTEwLCAweGI4Y2MsIDB4ZDA5NCwgMHgwMGZlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDcxLCAweDE5MTAsCi0JMHg3MDAzLCAweDAwMDEsIDB4NzAwNywgMHgwMDAwLCAweDkwMDYsIDB4NzAxMiwgMHg3MDE2LCAweDcwMWEsCi0JMHg3MDFlLCAweDcwMGEsIDB4NzA0NiwgMHgyMDAxLCAweDE5MjIsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwZTYsIDB4MjA3MSwgMHgxOTQ5LCAweDkwMGUsIDB4NzEwYSwgMHgwODBjLCAweDU3ZDMsCi0JMHhkMGZjLCAweDExNDAsIDB4MDgwYywgMHg1N2QzLCAweDkwMGUsIDB4ZDA5YywgMHgwMTA4LCAweDgxMDgsCi0JMHg3MTAyLCAweDA0MzAsIDB4MjAwMSwgMHgxODY3LCAweDIwMGMsIDB4OTE4NCwgMHgwMDA3LCAweDAwMDIsCi0JMHg2YWQyLCAweDZhZDIsIDB4NmFkMiwgMHg2YWQyLCAweDZhZDIsIDB4NmFlOCwgMHg2YWZkLCAweDZiMGIsCi0JMHg3MDAzLCAweDAwMDMsIDB4MjAwOSwgMHgxODY4LCAweDIxMGMsIDB4OTE4NCwgMHhmZjAwLCAweDkwOGUsCi0JMHhmZjAwLCAweDAxNDAsIDB4ODAwNywgMHg5MDA1LCAweDExMTAsIDB4MjAwMSwgMHgwMDAyLCAweDgwMDMsCi0JMHg3MDA2LCAweDAwMzAsIDB4NzAwNywgMHgwMDAxLCAweDAwMTgsIDB4NzAwMywgMHgwMDA1LCAweDBjNTAsCi0JMHgyMDcxLCAweDE5MTAsIDB4NzA0ZiwgMHgwMDAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MGYzLCAweDAwMDEsCi0JMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHg3MDAzLCAweDAwMDAsIDB4MjA3MSwgMHgxOTEwLCAweDIwMDksCi0JMHgxODY4LCAweDIxMGMsIDB4OTE4NCwgMHg3ZjAwLCAweDgwMDcsIDB4OTA4YywgMHgwMDBmLCAweDAxNjAsCi0JMHg3MTRlLCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDgwMDQsIDB4MjA3MSwgMHgxODAwLCAweDkwOGMsCi0JMHgwMDA3LCAweDAxMjgsIDB4NzBmMiwgMHgwYzIwLCAweDcwNGYsIDB4MDAwZiwgMHgwYzkwLCAweDcwZjMsCi0JMHgwMDA1LCAweDA4ZjAsIDB4MDBlNiwgMHgyMDcxLCAweDAwNTAsIDB4Njg0YywgMHg5MDA1LCAweDExNTAsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTkxMCwgMHg3MDI4LCAweGMwODUsIDB4NzAyYSwgMHgwMGVlLCAweDkwODUsCi0JMHgwMDAxLCAweDA0ODgsIDB4Njg0NCwgMHg5MDA1LCAweDAxNTgsIDB4MDgwYywgMHg3OGMwLCAweDZhNjAsCi0JMHg5MjAwLCAweDcwMDIsIDB4Njg2NCwgMHg5MTAxLCAweDcwMDYsIDB4OTAwNiwgMHg3MDEyLCAweDcwMTYsCi0JMHg2ODYwLCAweDcwMDIsIDB4Njg2NCwgMHg3MDA2LCAweDY4NjgsIDB4NzAwYSwgMHg2ODZjLCAweDcwMGUsCi0JMHg2ODQ0LCAweDkwMDUsIDB4MTExMCwgMHg3MDEyLCAweDcwMTYsIDB4Njg0YywgMHg3MDFhLCAweDcwMWMsCi0JMHg5MDg1LCAweDAwNDAsIDB4NzAxZSwgMHg3MDM3LCAweDAwMTksIDB4NzAyYiwgMHgwMDAxLCAweDAwZTYsCi0JMHgyMDcxLCAweDE5MTAsIDB4NzAyOCwgMHhjMDg0LCAweDcwMmEsIDB4NzAwNywgMHgwMDAxLCAweDcwMGIsCi0JMHgwMDAwLCAweDAwZWUsIDB4OTAwNiwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDI2LCAweDIwNzEsCi0JMHgxOTQ5LCAweDcwMDAsIDB4OTAxNSwgMHgwOTA0LCAweDZkZDcsIDB4OTI4NiwgMHgwMDAzLCAweDA5MDQsCi0JMHg2YzcwLCAweDkyODYsIDB4MDAwNSwgMHgwOTA0LCAweDZjNzAsIDB4MjA3MSwgMHgxODc3LCAweGE4N2MsCi0JMHg5MDA1LCAweDA5MDQsIDB4NmJjYiwgMHg3MTQwLCAweGE4NjgsIDB4OTEwMiwgMHgwYTA0LCAweDZkZDcsCi0JMHhhODc4LCAweGQwODQsIDB4MTVkOCwgMHhhODUzLCAweDAwMTksIDB4MjAwMSwgMHg4MDIzLCAweGE4NGUsCi0JMHgyMDcxLCAweDE5MTAsIDB4NzAxYywgMHg5MDA1LCAweDE5MDQsIDB4NmZhNSwgMHgwZTA0LCAweDcwMTMsCi0JMHgyMDcxLCAweDAwMDAsIDB4YTg1MCwgMHg3MDMyLCAweGE4NGMsIDB4NzA4MiwgMHhhODcwLCAweDcwODYsCi0JMHhhODZjLCAweDcwOGEsIDB4YTg4MCwgMHg3MDhlLCAweDcwMzYsIDB4MDE0NiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMWM2LCAweDAxNTYsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDAyYSwgMHhhODY4LCAweDIwYTgsCi0JMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMjEsIDB4MjA5OCwgMHg0MDAzLCAweDAxNWUsCi0JMHgwMWNlLCAweDAxM2UsIDB4MDFkZSwgMHgwMTRlLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksCi0JMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWFhLCAweDA4MDQsIDB4NmM1MywgMHhhODUzLCAweDAwMWIsCi0JMHgyMDAxLCAweDgwMjcsIDB4MDgyMCwgMHg3MDA0LCAweGQwOGMsIDB4MTkwNCwgMHg2ZGQ3LCAweGE4NTMsCi0JMHgwMDFhLCAweDIwMDEsIDB4ODAyNCwgMHgwODA0LCAweDZiOGYsIDB4MDBlNiwgMHgwMDI2LCAweDIwNzEsCi0JMHgxOTQ5LCAweDcwMDAsIDB4OTAxNSwgMHgwOTA0LCAweDZkZDcsIDB4OTI4NiwgMHgwMDAzLCAweDA5MDQsCi0JMHg2YzcwLCAweDkyODYsIDB4MDAwNSwgMHgwOTA0LCAweDZjNzAsIDB4YTg0ZiwgMHg4MDIyLCAweGE4NTMsCi0JMHgwMDE4LCAweDA4MDQsIDB4NmMzOCwgMHhhODY4LCAweGQwZmMsIDB4MTUwOCwgMHgwMGU2LCAweDAwMjYsCi0JMHgyMDAxLCAweDE5NDksIDB4MjAwNCwgMHg5MDE1LCAweDA5MDQsIDB4NmRkNywgMHhhOTc4LCAweGE4NzQsCi0JMHg5MTA1LCAweDE5MDQsIDB4NmRkNywgMHg5Mjg2LCAweDAwMDMsIDB4MDkwNCwgMHg2YzcwLCAweDkyODYsCi0JMHgwMDA1LCAweDA5MDQsIDB4NmM3MCwgMHhhODdjLCAweGQwYmMsIDB4MTkwNCwgMHg2ZGQ3LCAweDIyMDAsCi0JMHgwMDAyLCAweDZkZDcsIDB4NmMzNCwgMHg2YzcwLCAweDZjNzAsIDB4NmRkNywgMHg2YzcwLCAweDAwMDUsCi0JMHhhODY4LCAweGQwZmMsIDB4MTUwMCwgMHgwMGU2LCAweDAwMjYsIDB4MjAwOSwgMHgxOTQ5LCAweDIxMGMsCi0JMHg4MWZmLCAweDA5MDQsIDB4NmRkNywgMHhhODgwLCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDEsCi0JMHgxOTA0LCAweDZkZDcsIDB4OTE4NiwgMHgwMDAzLCAweDA5MDQsIDB4NmM3MCwgMHg5MTg2LCAweDAwMDUsCi0JMHgwOTA0LCAweDZjNzAsIDB4YTg3YywgMHhkMGNjLCAweDA5MDQsIDB4NmRkNywgMHhhODRmLCAweDgwMjEsCi0JMHhhODUzLCAweDAwMTcsIDB4MDAyOCwgMHgwMDA1LCAweGE4NGYsIDB4ODAyMCwgMHhhODUzLCAweDAwMTYsCi0JMHgyMDcxLCAweDE5MTAsIDB4NzAxYywgMHg5MDA1LCAweDE5MDQsIDB4NmZhNSwgMHgwZTA0LCAweDcwMTMsCi0JMHgyMDcxLCAweDAwMDAsIDB4YTg0YywgMHg3MDgyLCAweGE4NTAsIDB4NzAzMiwgMHhhODZjLCAweDcwODYsCi0JMHg3MDM2LCAweGE4NzAsIDB4NzA4YSwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsCi0JMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHgyMDcxLCAweDE4MDAsIDB4MjAxMSwgMHgwMDAxLCAweGE4MDQsCi0JMHg5MDBkLCAweDcwMmMsIDB4MTE1OCwgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLCAweDkyMDAsCi0JMHg3MGMyLCAweDA4MGMsIDB4ODVmMSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgwMDk2LCAweDIxNDgsCi0JMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHgwMDllLCAweDBjNTgsCi0JMHhhODRmLCAweDAwMDAsIDB4MDBmNiwgMHgyMDc5LCAweDAwNTAsIDB4MjA3MSwgMHgxOTEwLCAweGE4MDMsCi0JMHgwMDAwLCAweDcwMTAsIDB4OTAwNSwgMHgxOTA0LCAweDZkNWIsIDB4NzgyYywgMHg5MDhjLCAweDA3ODAsCi0JMHgxOTBjLCAweDcxNjEsIDB4ODAwNCwgMHg4MDA0LCAweDgwMDQsIDB4OTA4NCwgMHgwMDAzLCAweDAwMDIsCi0JMHg2YzhlLCAweDZkNWIsIDB4NmNiMiwgMHg2Y2Y4LCAweDA4MGMsIDB4MGRjNSwgMHgyMDcxLCAweDE4MDAsCi0JMHgyOTAwLCAweDc4MjIsIDB4YTgwNCwgMHg5MDBkLCAweDExNjgsIDB4MjA3MSwgMHgxOWZjLCAweDcwNDQsCi0JMHg5MDA1LCAweDEzMjAsIDB4MjAwMSwgMHgxOTRhLCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsCi0JMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsCi0JMHg4NWYxLCAweDBjMTgsIDB4MjA3MSwgMHgxODAwLCAweDI5MDAsIDB4NzgyMiwgMHhhODA0LCAweDkwMGQsCi0JMHgxNTc4LCAweDc4MjQsIDB4MDBlNiwgMHgyMDcxLCAweDAwNDAsIDB4NzEyYywgMHhkMTljLCAweDExNDgsCi0JMHgyMDA5LCAweDE4MzAsIDB4MjEwYywgMHg5MThhLCAweDAwMjAsIDB4MDIxOCwgMHg3MDIyLCAweDAwZWUsCi0JMHgwMDU4LCAweDAwZWUsIDB4MjA0OCwgMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYzAsCi0JMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NWYxLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsCi0JMHg3MTYxLCAweGQwYTQsIDB4MTlmMCwgMHgyMDcxLCAweDE5ZmMsIDB4NzA0NCwgMHg5MDA1LCAweDEzMjAsCi0JMHgyMDAxLCAweDE5NGEsIDB4MjAwNCwgMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsCi0JMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLCAweDgxZmYsCi0JMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4NWYxLCAweDA4MDgsCi0JMHgwMDk2LCAweDAwZTYsIDB4NzgyNCwgMHgyMDQ4LCAweDIwNzEsIDB4MTgwMCwgMHg3MDJjLCAweGE4MDIsCi0JMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NWYxLCAweDc4MmMsCi0JMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MTYxLCAweGQwYTQsIDB4MWQ2MCwgMHgwMGVlLCAweDc4MmMsCi0JMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MTYxLCAweGQwOWMsIDB4MTE5OCwgMHgwMDllLCAweDI5MDAsCi0JMHg3ODIyLCAweGE4MDQsIDB4OTAwZCwgMHgxNTUwLCAweDIwNzEsIDB4MTlmYywgMHg3MDQ0LCAweDkwMDUsCi0JMHgxMzIwLCAweDIwMDEsIDB4MTk0YSwgMHgyMDA0LCAweDcwNDYsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwOWUsIDB4MjkwOCwgMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LCAweDkwNGQsCi0JMHg3MTFhLCAweDAxMTAsIDB4YTkwMiwgMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsCi0JMHgxMTY4LCAweDIwNzEsIDB4MTlmYywgMHg3MDQ0LCAweDkwMDUsIDB4MTMyMCwgMHgyMDAxLCAweDE5NGEsCi0JMHgyMDA0LCAweDcwNDYsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDcxLCAweDE4MDAsCi0JMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLCAweDgxZmYsCi0JMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4NWYxLCAweDAwZmUsCi0JMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgyOTA4LCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMTgsCi0JMHg5MDRkLCAweDcxMWEsIDB4MDExMCwgMHhhOTAyLCAweDAwMDgsIDB4NzExZSwgMHgyMTQ4LCAweGE4MDQsCi0JMHg5MDBkLCAweDE5MDQsIDB4NmRhZiwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcxNjEsCi0JMHhkMDljLCAweDExOTgsIDB4NzAxYywgMHg5MDRkLCAweDAxODAsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsCi0JMHgxMTA4LCAweDcwMWEsIDB4YTgwMCwgMHg3MDFlLCAweDI5MDAsIDB4NzgyMiwgMHg3ODJjLCAweDkwOTQsCi0JMHgwNzgwLCAweDE5MGMsIDB4NzE2MSwgMHhkMDljLCAweDBkNjgsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCi0JMHgxOTBjLCAweDcxNjEsIDB4ZDBhNCwgMHgwMWIwLCAweDAwZTYsIDB4NzgyNCwgMHgyMDQ4LCAweDIwNzEsCi0JMHgxODAwLCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsCi0JMHgwODBjLCAweDg1ZjEsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MTYxLCAweGQwYTQsCi0JMHgxZDYwLCAweDAwZWUsIDB4MjA3MSwgMHgxOWZjLCAweDcwNDQsIDB4OTAwNSwgMHgxMzIwLCAweDIwMDEsCi0JMHgxOTRhLCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweDE4MDAsIDB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsCi0JMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsCi0JMHg4NWYxLCAweDAwZWUsIDB4MDgwNCwgMHg2ZDZiLCAweGE4NjgsIDB4ZDBmYywgMHgxOTA0LCAweDZlMjUsCi0JMHgwMDk2LCAweGE4MDQsIDB4YTgwNywgMHgwMDAwLCAweDkwNGQsIDB4MTkwYywgMHgwZmMwLCAweDAwOWUsCi0JMHgwMDIwLCAweGE4NjgsIDB4ZDBmYywgMHgxOTA0LCAweDZlMjUsIDB4MDBlNiwgMHgwMDI2LCAweGE4NGYsCi0JMHgwMDAwLCAweDAwZjYsIDB4MjA3OSwgMHgwMDUwLCAweDIwNzEsIDB4MTgwMCwgMHg3MGVjLCAweDgwMDEsCi0JMHgwNTU4LCAweDFhMDQsIDB4NmUyMiwgMHgyMDcxLCAweDE5MTAsIDB4YTgwMywgMHgwMDAwLCAweGE4NjQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4ZSwgMHgwMDE2LCAweDAxYTgsIDB4NzAxMCwgMHg5MDA1LCAweDE5MDQsCi0JMHg2ZjIxLCAweDc4MmMsIDB4OTA4YywgMHgwNzgwLCAweDE5MGMsIDB4NzE2MSwgMHg4MDA0LCAweDgwMDQsCi0JMHg4MDA0LCAweDkwODQsIDB4MDAwMywgMHgwMDAyLCAweDZlMjYsIDB4NmYyMSwgMHg2ZTQxLCAweDZlYjIsCi0JMHgwODBjLCAweDBkYzUsIDB4MjAwOSwgMHgxOTQ5LCAweDIxMDQsIDB4MDAwMiwgMHg2ZGVkLCAweDZkZWQsCi0JMHg2ZGVkLCAweDZjNzksIDB4NmRlZCwgMHg2Yzc5LCAweDcwZWYsIDB4MGZhMCwgMHg3MWU4LCAweDgxMDcsCi0JMHg5MTA2LCAweDkwOTQsIDB4MDBjMCwgMHg5MTg0LCAweGZmM2YsIDB4OTIwNSwgMHg3MGVhLCAweDNiMDgsCi0JMHgzYTAwLCAweDkxMDQsIDB4OTE4ZCwgMHgwMGMwLCAweDIxZDgsIDB4OTA4NCwgMHhmZjNmLCAweDkyMDUsCi0JMHgyMGQwLCAweDA4MDgsIDB4NzBlZSwgMHgwODA0LCAweDZkZTMsIDB4MDAwNSwgMHgyMDcxLCAweDE4MDAsCi0JMHgyOTAwLCAweDc4MjIsIDB4YTgwNCwgMHg5MDBkLCAweDExMjAsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsCi0JMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg1ZjEsCi0JMHgwYzYwLCAweDIwNzEsIDB4MTgwMCwgMHgyOTAwLCAweDc4MjIsIDB4YTgwNCwgMHg5MDBkLCAweDE5MDQsCi0JMHg2ZWExLCAweDc4MzAsIDB4ODAwNywgMHg5MDhjLCAweDAwMWYsIDB4NzBmMCwgMHg5MTAyLCAweDEyMjAsCi0JMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDc4MjQsIDB4MDBlNiwgMHgyMDcxLCAweDAwNDAsCi0JMHg3MTJjLCAweGQxOWMsIDB4MTE0OCwgMHgyMDA5LCAweDE4MzAsIDB4MjEwYywgMHg5MThhLCAweDAwMjAsCi0JMHgwMjE4LCAweDcwMjIsIDB4MDBlZSwgMHgwMDU4LCAweDAwZWUsIDB4MjA0OCwgMHg3MDJjLCAweGE4MDIsCi0JMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NWYxLCAweDc4MmMsCi0JMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MTYxLCAweGQwYTQsIDB4MTlmMCwgMHgwZTA0LCAweDZlOTgsCi0JMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4MzYsCi0JMHg2ODMzLCAweDAwMTMsIDB4MDBkZSwgMHgyMDAxLCAweDE5MjEsIDB4MjAwYywgMHhjMTg0LCAweDIxMDIsCi0JMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDExYWEsCi0JMHgyMDAxLCAweDE5MjIsIDB4MjAwMywgMHgwMDAwLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsCi0JMHgyMDAxLCAweDE5MjEsIDB4MjAwYywgMHhjMTg1LCAweDIxMDIsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsCi0JMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg1ZjEsCi0JMHgwODA0LCAweDZlNTQsIDB4MDA5NiwgMHgwMGU2LCAweDc4MjQsIDB4MjA0OCwgMHgyMDcxLCAweDE4MDAsCi0JMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4ODAwMCwgMHg3MGMyLCAweDA4MGMsCi0JMHg4NWYxLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzE2MSwgMHhkMGE0LCAweDFkNjAsCi0JMHgwMGVlLCAweDBlMDQsIDB4NmVmNCwgMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLCAweDAwZDYsCi0JMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsIDB4MDBkZSwgMHg3MDQ0LCAweGMwODQsCi0JMHg3MDQ2LCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCi0JMHgxMWFhLCAweDcwNGIsIDB4MDAwMCwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcxNjEsCi0JMHhkMDljLCAweDExNzAsIDB4MDA5ZSwgMHgyOTAwLCAweDc4MjIsIDB4YTgwNCwgMHg5MDBkLCAweDExZTAsCi0JMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDcwNDQsIDB4YzA4NSwgMHg3MDQ2LCAweDBjNTgsCi0JMHgwMDllLCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHg5MDRkLCAweDcxMWEsCi0JMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLCAweDIxNDgsIDB4YTgwNCwgMHg5MDBkLCAweDExMjAsCi0JMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LCAweDcwMmMsCi0JMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsCi0JMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg1ZjEsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHg5MDRkLCAweDcxMWEsCi0JMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLCAweDIxNDgsIDB4YTgwNCwgMHg5MDBkLCAweDE5MDQsCi0JMHg2ZjkwLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzE2MSwgMHhkMDljLCAweDExYjAsCi0JMHg3MDFjLCAweDkwNGQsIDB4MDE5OCwgMHhhODRjLCAweDkwMDUsIDB4MTE4MCwgMHg3MDEwLCAweDgwMDEsCi0JMHg3MDEyLCAweDExMDgsIDB4NzAxYSwgMHhhODAwLCAweDcwMWUsIDB4MjkwMCwgMHg3ODIyLCAweDc4MmMsCi0JMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MTYxLCAweGQwOWMsIDB4MGQ1MCwgMHg3ODJjLCAweDkwOTQsCi0JMHgwNzgwLCAweDE5MGMsIDB4NzE2MSwgMHhkMGE0LCAweDA1YjgsIDB4MDBlNiwgMHg3ODI0LCAweDIwNDgsCi0JMHgyMDcxLCAweDE4MDAsIDB4NzAyYywgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLCAweDgwMDAsCi0JMHg3MGMyLCAweDA4MGMsIDB4ODVmMSwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcxNjEsCi0JMHhkMGE0LCAweDFkNjAsIDB4MDBlZSwgMHgwZTA0LCAweDZmODksIDB4NzgzOCwgMHg3OTM4LCAweDkxMGUsCi0JMHgxZGUwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4MzYsIDB4NjgzMywgMHgwMDEzLCAweDAwZGUsCi0JMHg3MDQ0LCAweGMwODQsIDB4NzA0NiwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsCi0JMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHg3MDRiLCAweDAwMDAsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDcwNDQsIDB4YzA4NSwgMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsCi0JMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsCi0JMHgwODBjLCAweDg1ZjEsIDB4MDBlZSwgMHgwODA0LCAweDZmMzEsIDB4MjA3MSwgMHgxOTEwLCAweGE4MDMsCi0JMHgwMDAwLCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHg5MDRkLCAweDcxMWEsCi0JMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLCAweDIxNDgsIDB4YTgwNCwgMHg5MDBkLCAweDExMjgsCi0JMHgxZTA0LCAweDZmZDAsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLCAweDkwMTYsCi0JMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLCAweDFkYzgsCi0JMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODVmMSwgMHgwZTA0LCAweDZmYmEsCi0JMHgyMDcxLCAweDE5MTAsIDB4NzAxYywgMHgyMDQ4LCAweGE4NGMsIDB4OTAwZCwgMHgwZDE4LCAweDIwNzEsCi0JMHgwMDAwLCAweDcxODIsIDB4YTg1MCwgMHg3MDMyLCAweGE4NmMsIDB4NzA4NiwgMHg3MDM2LCAweGE4NzAsCi0JMHg3MDhhLCAweGE4NTAsIDB4OTA4MiwgMHgwMDE5LCAweDEyNzgsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsCi0JMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDExYWEsIDB4MjA3MSwgMHgxOTEwLCAweDA4MGMsCi0JMHg3MTRkLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweGE4NTAsIDB4OTA4MiwgMHgwMDFjLCAweDFlNjgsCisJMHgxZGQ4LCAweDkwODUsIDB4MDAwMSwgMHgwMDA4LCAweDkwMDYsIDB4MDFjZSwgMHgwMTNlLCAweDAwMDUsCisJMHgwMTQ2LCAweDAxZDYsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDA0LCAweDIwYTAsCisJMHgyMGE5LCAweDAwMTAsIDB4MjAwOSwgMHhmZmZmLCAweDQxMDQsIDB4MDFkZSwgMHgwMTRlLCAweDAxMzYsCisJMHgwMWM2LCAweGE4MDAsIDB4OTAwNSwgMHgxMWI4LCAweDg5MGUsIDB4ODEwZSwgMHg4MTBmLCAweDkxODQsCisJMHgwMDNmLCAweDIwZTAsIDB4OTE4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwNCwgMHgyMDk4LCAweDIwYTksCisJMHgwMDAxLCAweDIwMDksIDB4MDAxMCwgMHg0MDAyLCAweDk2MDYsIDB4MDEyOCwgMHg4MTA5LCAweDFkZDgsCisJMHg5MDg1LCAweDAwMDEsIDB4MDA2OCwgMHgwMTQ2LCAweDAxZDYsIDB4MzMwMCwgMHg4MDAxLCAweDIwYTAsCisJMHgzYzAwLCAweDIwZTgsIDB4MjAwMSwgMHhmZmZmLCAweDQwMDQsIDB4MDFkZSwgMHgwMTRlLCAweDkwMDYsCisJMHgwMWNlLCAweDAxM2UsIDB4MDAwNSwgMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGI4YTQsCisJMHg5MDRkLCAweDExMjgsIDB4MDgwYywgMHgxMDBlLCAweDAxNjgsIDB4MjkwMCwgMHhiOGE2LCAweDA4MGMsCisJMHg2OGUwLCAweGE4MDMsIDB4MDAwMSwgMHhhODA3LCAweDAwMDAsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCisJMHgwMDllLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHhiOGE0LCAweDkwNGQsIDB4MDEzMCwgMHhiOGE3LCAweDAwMDAsIDB4MDgwYywgMHgxMDQwLCAweDkwODUsCisJMHgwMDAxLCAweDAxMmUsIDB4MDA5ZSwgMHgwMDA1LCAweGI4OWMsIDB4ZDBhNCwgMHgwMDA1LCAweDAwYjYsCisJMHgwMGY2LCAweDA4MGMsIDB4NzYzNywgMHgwMWIwLCAweDcxYzQsIDB4ODFmZiwgMHgxMTk4LCAweDcxZGMsCisJMHhkMTljLCAweDAxODAsIDB4MjAwMSwgMHgwMDdlLCAweDkwODAsIDB4MTAwMCwgMHgyMDA0LCAweDkwNWQsCisJMHgwMTQ4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwNiwgMHgxMTE4LCAweGI4MDAsCisJMHhjMGVkLCAweGI4MDIsIDB4MjA3OSwgMHgxODQ3LCAweDc4MDQsIDB4ZDBhNCwgMHgwMWQwLCAweDAxNTYsCisJMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwMDE2LCAweDA4MGMsIDB4NjcyNCwgMHgxMTY4LCAweGI4MDQsCisJMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDk2LCAweDAwMDQsIDB4MDExOCwgMHg5MDg2LCAweDAwMDYsCisJMHgxMTE4LCAweGI4MDAsIDB4YzBlZCwgMHhiODAyLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDY5NmIsCisJMHgwMTVlLCAweDA4MGMsIDB4NmE2MSwgMHgwMTIwLCAweDIwMDEsIDB4MTk4NSwgMHgyMDBjLCAweDAwOTgsCisJMHgyMDc5LCAweDE4NDcsIDB4NzgwNCwgMHhkMGE0LCAweDAxOTAsIDB4MjAwOSwgMHgwN2QwLCAweDIwMDEsCisJMHgxODJjLCAweDIwMDQsIDB4OTAwNSwgMHgwMTM4LCAweDIwMDEsIDB4MTg2NywgMHgyMDA0LCAweGQwZTQsCisJMHgwMTEwLCAweDIwMDksIDB4NWRjMCwgMHgyMDExLCAweDY5YTIsIDB4MDgwYywgMHg4OGQ1LCAweDAwZmUsCisJMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgyMDExLCAweDY5YTIsIDB4MDgwYywgMHg4ODNkLCAweDA4MGMsCisJMHg2YTYxLCAweDAxZDgsIDB4MjAwMSwgMHgxMDdlLCAweDIwMDQsIDB4MjA1OCwgMHhiOTAwLCAweGMxZWMsCisJMHhiOTAyLCAweDA4MGMsIDB4NmE5ZiwgMHgwMTMwLCAweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDY5YTIsCisJMHgwODBjLCAweDg4ZDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4OTAwNiwgMHg3MDdlLCAweDcwNjAsCisJMHg3MDgyLCAweDA4MGMsIDB4MzAwMCwgMHgwMGVlLCAweDA0YjAsIDB4MDE1NiwgMHgwMGM2LCAweDIwYTksCisJMHgwMDdmLCAweDkwMGUsIDB4MDAxNiwgMHgwODBjLCAweDY3MjQsIDB4MTUzOCwgMHhiODAwLCAweGQwZWMsCisJMHgwNTIwLCAweDAwNDYsIDB4YmFhMCwgMHgyMjIwLCAweDkwMDYsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsCisJMHhlYzMxLCAweGI4MDAsIDB4YzBlNSwgMHhjMGVjLCAweGI4MDIsIDB4MDgwYywgMHg2YTliLCAweDIwMDEsCisJMHgwNzA3LCAweDExMjgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NSwgMHgwNzAwLCAweGI4MDYsCisJMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg5NmE0LCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweDk1NzcsCisJMHg5MDBlLCAweDA4MGMsIDB4ZTkxYywgMHgwMDdlLCAweDAwNGUsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsCisJMHg2OWNhLCAweDAwY2UsIDB4MDE1ZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHg2MDEwLCAweDIwNTgsCisJMHhiODAwLCAweGMwZWMsIDB4YjgwMiwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDAwOTYsCisJMHgwODBjLCAweDEwMjcsIDB4MDkwYywgMHgwZGM1LCAweDI5NTgsIDB4MDA5ZSwgMHgyMDAxLCAweDE5NmIsCisJMHgyYjAyLCAweDhiMDcsIDB4ODAwNiwgMHg4MDA2LCAweDkwOGMsIDB4MDAzZiwgMHhiOWM2LCAweDkwOGMsCisJMHhmZmMwLCAweGI5Y2EsIDB4YjhhZiwgMHgwMDAwLCAweDIwMDksIDB4MDBmZiwgMHgwODBjLCAweDYxNDgsCisJMHhiODA3LCAweDAwMDYsIDB4YjgxMywgMHgwMGZmLCAweGI4MTcsIDB4ZmZmZiwgMHhiODZmLCAweDAyMDAsCisJMHhiODZjLCAweGI4OTMsIDB4MDAwMiwgMHhiOGJiLCAweDA1MjAsIDB4YjhhMywgMHgwMGZmLCAweGI4YWYsCisJMHgwMDAwLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweDc4MTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsCisJMHgwMGJlLCAweGQwYWMsIDB4MDAwNSwgMHg2MDEwLCAweDAwYjYsIDB4OTA1ZCwgMHgwMTA4LCAweGI4MDAsCisJMHgwMGJlLCAweGQwYmMsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHhiODA0LCAweDkwOGMsCisJMHgwMGZmLCAweDkxOTYsIDB4MDAwNiwgMHgwMTg4LCAweDkxOTYsIDB4MDAwNCwgMHgwMTcwLCAweDkxOTYsCisJMHgwMDA1LCAweDAxNTgsIDB4OTA4YywgMHhmZjAwLCAweDgxMGYsIDB4OTE5NiwgMHgwMDA2LCAweDAxMjgsCisJMHg5MTk2LCAweDAwMDQsIDB4MDExMCwgMHg5MTk2LCAweDAwMDUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCisJMHgwMDA1LCAweDAwYjYsIDB4MDBmNiwgMHgyMDAxLCAweDEwN2UsIDB4MjAwNCwgMHg5MDVkLCAweDAxMTAsCisJMHhiODAwLCAweGQwZWMsIDB4MDBmZSwgMHgwMGJlLCAweDAwMDUsIDB4MDEyNiwgMHgwMDI2LCAweDIwOTEsCisJMHg4MDAwLCAweDAwMDYsIDB4YmFhMCwgMHg5MjkwLCAweDEwMDAsIDB4MjIwNCwgMHg5YjA2LCAweDE5MGMsCisJMHgwZGM1LCAweDAwMGUsIDB4YmEwMCwgMHg5MDA1LCAweDAxMTAsIDB4YzJmZCwgMHgwMDA4LCAweGMyZmMsCisJMHhiYTAyLCAweDAwMmUsIDB4MDEyZSwgMHgwMDA1LCAweDIwMTEsIDB4MTgzNywgMHgyMjA0LCAweGQwY2MsCisJMHgwMTM4LCAweDIwMDEsIDB4MTk4MywgMHgyMDBjLCAweDIwMTEsIDB4NmE5MSwgMHgwODBjLCAweDg4ZDUsCisJMHgwMDA1LCAweDIwMTEsIDB4NmE5MSwgMHgwODBjLCAweDg4M2QsIDB4MjAxMSwgMHgxODM3LCAweDIyMDQsCisJMHhjMGNjLCAweDIwMTIsIDB4MDAwNSwgMHgwODBjLCAweDU3ZDUsIDB4ZDBhYywgMHgwMDA1LCAweDA4MGMsCisJMHg1N2Q1LCAweGQwYTQsIDB4MDAwNSwgMHgwMDE2LCAweGI5MDQsIDB4OTE4NCwgMHgwMGZmLCAweDkwOGUsCisJMHgwMDA2LCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweGI5MDQsIDB4OTE4NCwgMHhmZjAwLCAweDgwMDcsCisJMHg5MDhlLCAweDAwMDYsIDB4MDAxZSwgMHgwMDA1LCAweDAwYjYsIDB4MDBmNiwgMHgwODBjLCAweGQ3ZTMsCisJMHgwMTU4LCAweDcwZGMsIDB4OTA4NCwgMHgwMDI4LCAweDAxMzgsIDB4MjAwMSwgMHgxMDdmLCAweDIwMDQsCisJMHg5MDVkLCAweDAxMTAsIDB4YjhjYywgMHhkMDk0LCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwMDYsCisJMHgwMDE2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDc2LCAweDAwYjYsIDB4MjAwMSwgMHgxODE4LCAweDIwM2MsCisJMHg5NzgwLCAweDMzYjYsIDB4MjAzZCwgMHg5N2JjLCAweGZmMDAsIDB4ODczZiwgMHg5MDA2LCAweDIwMTgsCisJMHgyMDA4LCAweDkyODQsIDB4ODAwMCwgMHgwMTEwLCAweDIwMTksIDB4MDAwMSwgMHg5Mjk0LCAweDdmZmYsCisJMHgyMTAwLCAweDk3MDYsIDB4MDE5MCwgMHg5MWEwLCAweDEwMDAsIDB4MjQwNCwgMHg5MDVkLCAweDAxNjgsCisJMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDYsIDB4MTEzOCwgMHg4M2ZmLCAweDAxMTgsCisJMHhiODljLCAweGQwYTQsIDB4MDExMCwgMHg4MjExLCAweDAxNTgsIDB4ODEwOCwgMHg4M2ZmLCAweDAxMjAsCisJMHg5MTgyLCAweDA4MDAsIDB4MGUyOCwgMHgwMDY4LCAweDkxODIsIDB4MDA3ZSwgMHgwZTA4LCAweDAwNDgsCisJMHgwMGJlLCAweDAwN2UsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMWUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMGUsCisJMHgwMDA1LCAweDAwYmUsIDB4MDA3ZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAxZSwgMHg5MDA2LCAweDAwMGUsCisJMHgwMDA1LCAweDAwNDYsIDB4MDA1NiwgMHgwMDc2LCAweDAwYjYsIDB4MjEwMCwgMHg5MDg0LCAweDdmZmYsCisJMHg5MDgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDVkLCAweDAxMzAsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MDg2LCAweDAwMDYsIDB4MDU1MCwgMHg5MTg0LCAweDgwMDAsIDB4MDU4MCwgMHgyMDAxLCAweDE4MTgsCisJMHgyMDNjLCAweDk3ODAsIDB4MzNiNiwgMHgyMDNkLCAweDk3YmMsIDB4ZmYwMCwgMHg4NzNmLCAweDkwMDYsCisJMHgyMDIwLCAweDI0MDAsIDB4OTcwNiwgMHgwMWEwLCAweDk0YTgsIDB4MTAwMCwgMHgyNTA0LCAweDkwNWQsCisJMHgwMTc4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwNiwgMHgxMTQ4LCAweGI4OWMsCisJMHhkMGE0LCAweDAxMzAsIDB4YjgxNCwgMHg5MjA2LCAweDExMTgsIDB4YjgxMCwgMHg5MzA2LCAweDAxMjgsCisJMHg4NDIwLCAweDk0ODIsIDB4MDgwMCwgMHgwZTI4LCAweDAwNDgsIDB4OTE4YywgMHg3ZmZmLCAweDAwYmUsCisJMHgwMDdlLCAweDAwNWUsIDB4MDA0ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg5MThjLCAweDdmZmYsCisJMHgwMGJlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLCAweDkwMDYsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsCisJMHgwMGEwLCAweDgwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4MWRkOCwgMHgwMDBlLCAweDAwMDUsCisJMHgwMDA2LCAweDIwMDEsIDB4MDBmOCwgMHg4MDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweDFkZDgsCisJMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDAwZTgsIDB4ODAwMSwgMHhhMDAxLCAweGEwMDEsCisJMHhhMDAxLCAweDFkZDgsIDB4MDAwZSwgMHgwMDA1LCAweDIwNzEsIDB4MTkxMCwgMHg3MDAzLCAweDAwMDEsCisJMHg3MDA3LCAweDAwMDAsIDB4OTAwNiwgMHg3MDEyLCAweDcwMTYsIDB4NzAxYSwgMHg3MDFlLCAweDcwMGEsCisJMHg3MDQ2LCAweDIwMDEsIDB4MTkyMiwgMHgyMDAzLCAweDAwMDAsIDB4MDAwNSwgMHgwMDE2LCAweDAwZTYsCisJMHgyMDcxLCAweDE5NDgsIDB4OTAwZSwgMHg3MTBhLCAweDA4MGMsIDB4NTdkNSwgMHhkMGZjLCAweDExNDAsCisJMHgwODBjLCAweDU3ZDUsIDB4OTAwZSwgMHhkMDljLCAweDAxMDgsIDB4ODEwOCwgMHg3MTAyLCAweDA0NzAsCisJMHgyMDAxLCAweDE4NjcsIDB4MjAwYywgMHg5MTg0LCAweDAwMDcsIDB4MDAwNiwgMHgyMDAxLCAweDE4MGQsCisJMHgyMDA0LCAweGQwOGMsIDB4MDAwZSwgMHgwMTA4LCAweDkwMDYsIDB4MDAwMiwgMHg2Yjk4LCAweDZiOTgsCisJMHg2Yjk4LCAweDZiOTgsIDB4NmI5OCwgMHg2YmI2LCAweDZiY2IsIDB4NmJkOSwgMHg3MDAzLCAweDAwMDMsCisJMHgyMDA5LCAweDE4NjgsIDB4MjEwYywgMHg5MTg0LCAweGZmMDAsIDB4OTA4ZSwgMHhmZjAwLCAweDAxNDAsCisJMHg4MDA3LCAweDkwMDUsIDB4MTExMCwgMHgyMDAxLCAweDAwMDIsIDB4ODAwMywgMHg3MDA2LCAweDAwMzAsCisJMHg3MDA3LCAweDAwMDEsIDB4MDAxOCwgMHg3MDAzLCAweDAwMDUsIDB4MGM1MCwgMHgyMDcxLCAweDE5MTAsCisJMHg3MDRmLCAweDAwMDAsIDB4MjA3MSwgMHgxODAwLCAweDcwZjMsIDB4MDAwMSwgMHgwMGVlLCAweDAwMWUsCisJMHgwMDA1LCAweDcwMDMsIDB4MDAwMCwgMHgyMDcxLCAweDE5MTAsIDB4MjAwOSwgMHgxODY4LCAweDIxMGMsCisJMHg5MTg0LCAweDdmMDAsIDB4ODAwNywgMHg5MDhjLCAweDAwMGYsIDB4MDE2MCwgMHg3MTRlLCAweDgwMDQsCisJMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHgyMDcxLCAweDE4MDAsIDB4OTA4YywgMHgwMDA3LCAweDAxMjgsCisJMHg3MGYyLCAweDBjMjAsIDB4NzA0ZiwgMHgwMDBmLCAweDBjOTAsIDB4NzBmMywgMHgwMDA1LCAweDA4ZjAsCisJMHgwMGU2LCAweDIwNzEsIDB4MDA1MCwgMHg2ODRjLCAweDkwMDUsIDB4MTE1MCwgMHgwMGU2LCAweDIwNzEsCisJMHgxOTEwLCAweDcwMjgsIDB4YzA4NSwgMHg3MDJhLCAweDAwZWUsIDB4OTA4NSwgMHgwMDAxLCAweDA0ODgsCisJMHg2ODQ0LCAweDkwMDUsIDB4MDE1OCwgMHgwODBjLCAweDc5YTQsIDB4NmE2MCwgMHg5MjAwLCAweDcwMDIsCisJMHg2ODY0LCAweDkxMDEsIDB4NzAwNiwgMHg5MDA2LCAweDcwMTIsIDB4NzAxNiwgMHg2ODYwLCAweDcwMDIsCisJMHg2ODY0LCAweDcwMDYsIDB4Njg2OCwgMHg3MDBhLCAweDY4NmMsIDB4NzAwZSwgMHg2ODQ0LCAweDkwMDUsCisJMHgxMTEwLCAweDcwMTIsIDB4NzAxNiwgMHg2ODRjLCAweDcwMWEsIDB4NzAxYywgMHg5MDg1LCAweDAwNDAsCisJMHg3MDFlLCAweDcwMzcsIDB4MDAxOSwgMHg3MDJiLCAweDAwMDEsIDB4MDBlNiwgMHgyMDcxLCAweDE5MTAsCisJMHg3MDI4LCAweGMwODQsIDB4NzAyYSwgMHg3MDA3LCAweDAwMDEsIDB4NzAwYiwgMHgwMDAwLCAweDAwZWUsCisJMHg5MDA2LCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwMjYsIDB4MjA3MSwgMHgxOTQ4LCAweDcwMDAsCisJMHg5MDE1LCAweDA5MDQsIDB4NmVhNSwgMHg5Mjg2LCAweDAwMDMsIDB4MDkwNCwgMHg2ZDNlLCAweDkyODYsCisJMHgwMDA1LCAweDA5MDQsIDB4NmQzZSwgMHgyMDcxLCAweDE4NzcsIDB4YTg3YywgMHg5MDA1LCAweDA5MDQsCisJMHg2Yzk5LCAweDcxNDAsIDB4YTg2OCwgMHg5MTAyLCAweDBhMDQsIDB4NmVhNSwgMHhhODc4LCAweGQwODQsCisJMHgxNWQ4LCAweGE4NTMsIDB4MDAxOSwgMHgyMDAxLCAweDgwMjMsIDB4YTg0ZSwgMHgyMDcxLCAweDE5MTAsCisJMHg3MDFjLCAweDkwMDUsIDB4MTkwNCwgMHg3MDczLCAweDBlMDQsIDB4NzBlMSwgMHgyMDcxLCAweDAwMDAsCisJMHhhODUwLCAweDcwMzIsIDB4YTg0YywgMHg3MDgyLCAweGE4NzAsIDB4NzA4NiwgMHhhODZjLCAweDcwOGEsCiAJMHhhODgwLCAweDcwOGUsIDB4NzAzNiwgMHgwMTQ2LCAweDAxZDYsIDB4MDEzNiwgMHgwMWM2LCAweDAxNTYsCiAJMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMDJhLCAweGE4NjgsIDB4MjBhOCwgMHhhODYwLCAweDIwZTAsCiAJMHhhODVjLCAweDkwODAsIDB4MDAyMSwgMHgyMDk4LCAweDQwMDMsIDB4MDE1ZSwgMHgwMWNlLCAweDAxM2UsCi0JMHgwMWRlLCAweDAxNGUsIDB4MDg5MCwgMHgyMDcxLCAweDE5MTAsIDB4YTgwMywgMHgwMDAwLCAweDI5MDgsCisJMHgwMWRlLCAweDAxNGUsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsCisJMHgxOTBjLCAweDExYWEsIDB4MDgwNCwgMHg2ZDIxLCAweGE4NTMsIDB4MDAxYiwgMHgyMDAxLCAweDgwMjcsCisJMHgwODIwLCAweDcwMDQsIDB4ZDA4YywgMHgxOTA0LCAweDZlYTUsIDB4YTg1MywgMHgwMDFhLCAweDIwMDEsCisJMHg4MDI0LCAweDA4MDQsIDB4NmM1ZCwgMHgwMGU2LCAweDAwMjYsIDB4MjA3MSwgMHgxOTQ4LCAweDcwMDAsCisJMHg5MDE1LCAweDA5MDQsIDB4NmVhNSwgMHg5Mjg2LCAweDAwMDMsIDB4MDkwNCwgMHg2ZDNlLCAweDkyODYsCisJMHgwMDA1LCAweDA5MDQsIDB4NmQzZSwgMHhhODRmLCAweDgwMjIsIDB4YTg1MywgMHgwMDE4LCAweDA4MDQsCisJMHg2ZDA2LCAweGE4NjgsIDB4ZDBmYywgMHgxNTA4LCAweDAwZTYsIDB4MDAyNiwgMHgyMDAxLCAweDE5NDgsCisJMHgyMDA0LCAweDkwMTUsIDB4MDkwNCwgMHg2ZWE1LCAweGE5NzgsIDB4YTg3NCwgMHg5MTA1LCAweDE5MDQsCisJMHg2ZWE1LCAweDkyODYsIDB4MDAwMywgMHgwOTA0LCAweDZkM2UsIDB4OTI4NiwgMHgwMDA1LCAweDA5MDQsCisJMHg2ZDNlLCAweGE4N2MsIDB4ZDBiYywgMHgxOTA0LCAweDZlYTUsIDB4MjIwMCwgMHgwMDAyLCAweDZlYTUsCisJMHg2ZDAyLCAweDZkM2UsIDB4NmQzZSwgMHg2ZWE1LCAweDZkM2UsIDB4MDAwNSwgMHhhODY4LCAweGQwZmMsCisJMHgxNTAwLCAweDAwZTYsIDB4MDAyNiwgMHgyMDA5LCAweDE5NDgsIDB4MjEwYywgMHg4MWZmLCAweDA5MDQsCisJMHg2ZWE1LCAweGE4ODAsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwMSwgMHgxOTA0LCAweDZlYTUsCisJMHg5MTg2LCAweDAwMDMsIDB4MDkwNCwgMHg2ZDNlLCAweDkxODYsIDB4MDAwNSwgMHgwOTA0LCAweDZkM2UsCisJMHhhODdjLCAweGQwY2MsIDB4MDkwNCwgMHg2ZWE1LCAweGE4NGYsIDB4ODAyMSwgMHhhODUzLCAweDAwMTcsCisJMHgwMDI4LCAweDAwMDUsIDB4YTg0ZiwgMHg4MDIwLCAweGE4NTMsIDB4MDAxNiwgMHgyMDcxLCAweDE5MTAsCisJMHg3MDFjLCAweDkwMDUsIDB4MTkwNCwgMHg3MDczLCAweDBlMDQsIDB4NzBlMSwgMHgyMDcxLCAweDAwMDAsCisJMHhhODRjLCAweDcwODIsIDB4YTg1MCwgMHg3MDMyLCAweGE4NmMsIDB4NzA4NiwgMHg3MDM2LCAweGE4NzAsCisJMHg3MDhhLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCisJMHgxMWFhLCAweDIwNzEsIDB4MTgwMCwgMHgyMDExLCAweDAwMDEsIDB4YTgwNCwgMHg5MDBkLCAweDcwMmMsCisJMHgxMTU4LCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsCisJMHg4NzI1LCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwOTYsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsCisJMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDAwOWUsIDB4MGM1OCwgMHhhODRmLCAweDAwMDAsCisJMHgwMGY2LCAweDIwNzksIDB4MDA1MCwgMHgyMDcxLCAweDE5MTAsIDB4YTgwMywgMHgwMDAwLCAweDcwMTAsCisJMHg5MDA1LCAweDE5MDQsIDB4NmUyOSwgMHg3ODJjLCAweDkwOGMsIDB4MDc4MCwgMHgxOTBjLCAweDcyMmYsCisJMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg5MDg0LCAweDAwMDMsIDB4MDAwMiwgMHg2ZDVjLCAweDZlMjksCisJMHg2ZDgwLCAweDZkYzYsIDB4MDgwYywgMHgwZGM1LCAweDIwNzEsIDB4MTgwMCwgMHgyOTAwLCAweDc4MjIsCisJMHhhODA0LCAweDkwMGQsIDB4MTE2OCwgMHgyMDcxLCAweDE5ZmIsIDB4NzA0NCwgMHg5MDA1LCAweDEzMjAsCisJMHgyMDAxLCAweDE5NDksIDB4MjAwNCwgMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsCisJMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLCAweDgxZmYsCisJMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzI1LCAweDBjMTgsCisJMHgyMDcxLCAweDE4MDAsIDB4MjkwMCwgMHg3ODIyLCAweGE4MDQsIDB4OTAwZCwgMHgxNTc4LCAweDc4MjQsCisJMHgwMGU2LCAweDIwNzEsIDB4MDA0MCwgMHg3MTJjLCAweGQxOWMsIDB4MTE0OCwgMHgyMDA5LCAweDE4MzAsCisJMHgyMTBjLCAweDkxOGEsIDB4MDAyMCwgMHgwMjE4LCAweDcwMjIsIDB4MDBlZSwgMHgwMDU4LCAweDAwZWUsCisJMHgyMDQ4LCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsCisJMHgwODBjLCAweDg3MjUsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjJmLCAweGQwYTQsCisJMHgxOWYwLCAweDIwNzEsIDB4MTlmYiwgMHg3MDQ0LCAweDkwMDUsIDB4MTMyMCwgMHgyMDAxLCAweDE5NDksCisJMHgyMDA0LCAweDcwNDYsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHg5MDE2LCAweDcwMmMsCisJMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsCisJMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MjUsIDB4MDgwOCwgMHgwMDk2LCAweDAwZTYsCisJMHg3ODI0LCAweDIwNDgsIDB4MjA3MSwgMHgxODAwLCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsCisJMHg3MGMwLCAweDgwMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MjUsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCisJMHgxOTBjLCAweDcyMmYsIDB4ZDBhNCwgMHgxZDYwLCAweDAwZWUsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCisJMHgxOTBjLCAweDcyMmYsIDB4ZDA5YywgMHgxMTk4LCAweDAwOWUsIDB4MjkwMCwgMHg3ODIyLCAweGE4MDQsCisJMHg5MDBkLCAweDE1NTAsIDB4MjA3MSwgMHgxOWZiLCAweDcwNDQsIDB4OTAwNSwgMHgxMzIwLCAweDIwMDEsCisJMHgxOTQ5LCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwOWUsCisJMHgyOTA4LCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMTgsIDB4OTA0ZCwgMHg3MTFhLCAweDAxMTAsCisJMHhhOTAyLCAweDAwMDgsIDB4NzExZSwgMHgyMTQ4LCAweGE4MDQsIDB4OTAwZCwgMHgxMTY4LCAweDIwNzEsCisJMHgxOWZiLCAweDcwNDQsIDB4OTAwNSwgMHgxMzIwLCAweDIwMDEsIDB4MTk0OSwgMHgyMDA0LCAweDcwNDYsCisJMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LCAweDcwMmMsCisJMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsCisJMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MjUsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCisJMHgwMDA1LCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHg5MDRkLCAweDcxMWEsCisJMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLCAweDIxNDgsIDB4YTgwNCwgMHg5MDBkLCAweDE5MDQsCisJMHg2ZTdkLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzIyZiwgMHhkMDljLCAweDExOTgsCisJMHg3MDFjLCAweDkwNGQsIDB4MDE4MCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHgxMTA4LCAweDcwMWEsCisJMHhhODAwLCAweDcwMWUsIDB4MjkwMCwgMHg3ODIyLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsCisJMHg3MjJmLCAweGQwOWMsIDB4MGQ2OCwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcyMmYsCisJMHhkMGE0LCAweDAxYjAsIDB4MDBlNiwgMHg3ODI0LCAweDIwNDgsIDB4MjA3MSwgMHgxODAwLCAweDcwMmMsCisJMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLCAweDgwMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MjUsCisJMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcyMmYsIDB4ZDBhNCwgMHgxZDYwLCAweDAwZWUsCisJMHgyMDcxLCAweDE5ZmIsIDB4NzA0NCwgMHg5MDA1LCAweDEzMjAsIDB4MjAwMSwgMHgxOTQ5LCAweDIwMDQsCisJMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsCisJMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLCAweDgxZmYsCisJMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzI1LCAweDAwZWUsCisJMHgwODA0LCAweDZlMzksIDB4YTg2OCwgMHhkMGZjLCAweDE5MDQsIDB4NmVmMywgMHgwMDk2LCAweGE4MDQsCisJMHhhODA3LCAweDAwMDAsIDB4OTA0ZCwgMHgxOTBjLCAweDBmYzAsIDB4MDA5ZSwgMHgwMDIwLCAweGE4NjgsCisJMHhkMGZjLCAweDE5MDQsIDB4NmVmMywgMHgwMGU2LCAweDAwMjYsIDB4YTg0ZiwgMHgwMDAwLCAweDAwZjYsCisJMHgyMDc5LCAweDAwNTAsIDB4MjA3MSwgMHgxODAwLCAweDcwZWMsIDB4ODAwMSwgMHgwNTU4LCAweDFhMDQsCisJMHg2ZWYwLCAweDIwNzEsIDB4MTkxMCwgMHhhODAzLCAweDAwMDAsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MDhlLCAweDAwMTYsIDB4MDFhOCwgMHg3MDEwLCAweDkwMDUsIDB4MTkwNCwgMHg2ZmVmLCAweDc4MmMsCisJMHg5MDhjLCAweDA3ODAsIDB4MTkwYywgMHg3MjJmLCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDkwODQsCisJMHgwMDAzLCAweDAwMDIsIDB4NmVmNCwgMHg2ZmVmLCAweDZmMGYsIDB4NmY4MCwgMHgwODBjLCAweDBkYzUsCisJMHgyMDA5LCAweDE5NDgsIDB4MjEwNCwgMHgwMDAyLCAweDZlYmIsIDB4NmViYiwgMHg2ZWJiLCAweDZkNDcsCisJMHg2ZWJiLCAweDZkNDcsIDB4NzBlZiwgMHgwZmEwLCAweDcxZTgsIDB4ODEwNywgMHg5MTA2LCAweDkwOTQsCisJMHgwMGMwLCAweDkxODQsIDB4ZmYzZiwgMHg5MjA1LCAweDcwZWEsIDB4M2IwOCwgMHgzYTAwLCAweDkxMDQsCisJMHg5MThkLCAweDAwYzAsIDB4MjFkOCwgMHg5MDg0LCAweGZmM2YsIDB4OTIwNSwgMHgyMGQwLCAweDA4MDgsCisJMHg3MGVlLCAweDA4MDQsIDB4NmViMSwgMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHgyOTAwLCAweDc4MjIsCisJMHhhODA0LCAweDkwMGQsIDB4MTEyMCwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDkwMTYsCisJMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLCAweDFkYzgsCisJMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODcyNSwgMHgwYzYwLCAweDIwNzEsCisJMHgxODAwLCAweDI5MDAsIDB4NzgyMiwgMHhhODA0LCAweDkwMGQsIDB4MTkwNCwgMHg2ZjZmLCAweDc4MzAsCisJMHg4MDA3LCAweDkwOGMsIDB4MDAxZiwgMHg3MGYwLCAweDkxMDIsIDB4MTIyMCwgMHgwMGZlLCAweDAwMmUsCisJMHgwMGVlLCAweDAwMDUsIDB4NzgyNCwgMHgwMGU2LCAweDIwNzEsIDB4MDA0MCwgMHg3MTJjLCAweGQxOWMsCisJMHgxMTQ4LCAweDIwMDksIDB4MTgzMCwgMHgyMTBjLCAweDkxOGEsIDB4MDAyMCwgMHgwMjE4LCAweDcwMjIsCisJMHgwMGVlLCAweDAwNTgsIDB4MDBlZSwgMHgyMDQ4LCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsCisJMHg3MGMwLCAweDgwMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MjUsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCisJMHgxOTBjLCAweDcyMmYsIDB4ZDBhNCwgMHgxOWYwLCAweDBlMDQsIDB4NmY2NiwgMHg3ODM4LCAweDc5MzgsCisJMHg5MTBlLCAweDFkZTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsCisJMHgwMGRlLCAweDIwMDEsIDB4MTkyMSwgMHgyMDBjLCAweGMxODQsIDB4MjEwMiwgMHgyMDkxLCAweDQwODAsCisJMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHgyMDAxLCAweDE5MjIsCisJMHgyMDAzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDE5MjEsCisJMHgyMDBjLCAweGMxODUsIDB4MjEwMiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDkwMTYsCisJMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLCAweDFkYzgsCisJMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODcyNSwgMHgwODA0LCAweDZmMjIsCisJMHgwMDk2LCAweDAwZTYsIDB4NzgyNCwgMHgyMDQ4LCAweDIwNzEsIDB4MTgwMCwgMHg3MDJjLCAweGE4MDIsCisJMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzI1LCAweDc4MmMsCisJMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjJmLCAweGQwYTQsIDB4MWQ2MCwgMHgwMGVlLCAweDBlMDQsCisJMHg2ZmMyLCAweDc4MzgsIDB4NzkzOCwgMHg5MTBlLCAweDFkZTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsCisJMHg2ODM2LCAweDY4MzMsIDB4MDAxMywgMHgwMGRlLCAweDcwNDQsIDB4YzA4NCwgMHg3MDQ2LCAweDIwOTEsCisJMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWFhLCAweDcwNGIsCisJMHgwMDAwLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzIyZiwgMHhkMDljLCAweDExNzAsCisJMHgwMDllLCAweDI5MDAsIDB4NzgyMiwgMHhhODA0LCAweDkwMGQsIDB4MTFlMCwgMHgwMGZlLCAweDAwMmUsCisJMHgwMGVlLCAweDAwMDUsIDB4NzA0NCwgMHhjMDg1LCAweDcwNDYsIDB4MGM1OCwgMHgwMDllLCAweDI5MDgsCiAJMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LCAweDkwNGQsIDB4NzExYSwgMHgwMTEwLCAweGE5MDIsCi0JMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsIDB4MTExOCwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsCi0JMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsCi0JMHgwODBjLCAweDg1ZjEsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDAwNiwgMHhhODdjLCAweDAwMDYsCi0JMHhhODY3LCAweDAxMDMsIDB4MjBhOSwgMHgwMDFjLCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDFkLCAweDIwYTAsIDB4OTAwNiwgMHg0MDA0LCAweDAwMGUsIDB4OTA4NCwgMHgwMGZmLCAweGE4N2UsCi0JMHgwMDBlLCAweGE4N2EsIDB4YTk4MiwgMHgwMDA1LCAweDIwNzEsIDB4MTkxMCwgMHg3MDA0LCAweDAwMDIsCi0JMHg3MDYwLCAweDcwNjEsIDB4NzE0YywgMHg3MDYxLCAweDcwNWUsIDB4NzE0YywgMHgwODBjLCAweDBkYzUsCi0JMHgwMDA1LCAweDIwMDEsIDB4MTk0OSwgMHgyMDA0LCAweDAwMDIsIDB4NzA2YiwgMHg3MDZiLCAweDcwZTUsCi0JMHg3MGU2LCAweDcwNmIsIDB4NzBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgxZTBjLCAweDcxNmMsCi0JMHg3MDFjLCAweDkwNGQsIDB4MDUwOCwgMHhhODRjLCAweDkwMDUsIDB4MDkwNCwgMHg3MGI2LCAweDBlMDQsCi0JMHg3MDk0LCAweGE5NGMsIDB4MjA3MSwgMHgwMDAwLCAweDcxODIsIDB4YTg1MCwgMHg3MDMyLCAweGE4NmMsCi0JMHg3MDg2LCAweDcwMzYsIDB4YTg3MCwgMHg3MDhhLCAweGE4NTAsIDB4OTA4MiwgMHgwMDE5LCAweDEyNzgsCi0JMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDExYWEsCi0JMHgyMDcxLCAweDE5MTAsIDB4MDgwYywgMHg3MTRkLCAweDAxMmUsIDB4MDgwNCwgMHg3MGU0LCAweGE4NTAsCi0JMHg5MDgyLCAweDAwMWMsIDB4MWU2OCwgMHhhODgwLCAweDcwOGUsIDB4NzAzNiwgMHgwMTQ2LCAweDAxZDYsCi0JMHgwMTM2LCAweDAxYzYsIDB4MDE1NiwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMDJhLCAweGE4NjgsCi0JMHgyMGE4LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsIDB4MDAyMSwgMHgyMDk4LCAweDQwMDMsCi0JMHgwMTVlLCAweDAxY2UsIDB4MDEzZSwgMHgwMWRlLCAweDAxNGUsIDB4MDg5MCwgMHgyMDAxLCAweDAwNWIsCi0JMHgyMDA0LCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcxNjEsIDB4ZDA5YywgMHgyMDcxLCAweDE5MTAsCi0JMHgxNTEwLCAweDIwNzEsIDB4MTkxMCwgMHg3MDBmLCAweDAwMDEsIDB4YTk2NCwgMHg5MTg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwMDMsIDB4MTEzMCwgMHg4MTBmLCAweDkxOGMsIDB4MDBmZiwgMHg4MTAxLCAweDAxMDgsCi0JMHg3MTBlLCAweDI5MDAsIDB4MDBkNiwgMHgyMDY5LCAweDAwNTAsIDB4NjgyMiwgMHgwMGRlLCAweDIwNzEsCi0JMHgxOTEwLCAweDcwMWMsIDB4MjA0OCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHhhODAwLCAweDcwMWUsCi0JMHg5MDA1LCAweDExMDgsIDB4NzAxYSwgMHgwMTJlLCAweDAwMDUsIDB4MDAwNSwgMHgwMGQ2LCAweDIwMDgsCi0JMHgyMDY5LCAweDE5ZmMsIDB4Njg0NCwgMHg5MDA1LCAweDA3NjAsIDB4MDE1OCwgMHg5MTg2LCAweDAwMDMsCi0JMHgwNTQwLCAweDIwMDEsIDB4MTgxNSwgMHgyMDA0LCAweDIwMDksIDB4MWFkMiwgMHgyMTBjLCAweDkxMDIsCi0JMHgxNTAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4MDA1MCwgMHg2OTNjLCAweDY4MzgsCi0JMHg5MTA2LCAweDAxOTAsIDB4MGUwNCwgMHg3MTE4LCAweDIwNjksIDB4MDAwMCwgMHg2ODM3LCAweDgwNDAsCi0JMHg2ODMzLCAweDAwMTIsIDB4Njg4MywgMHg4MDQwLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksCi0JMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWFhLCAweDIwNjksIDB4MTlmYywgMHg2ODQ3LCAweGZmZmYsCi0JMHgwMTJlLCAweDAwZGUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MWUwYywgMHg3MWQ3LCAweDcwMWMsCi0JMHg5MDRkLCAweDA1NDAsIDB4MjAwMSwgMHgwMDViLCAweDIwMDQsIDB4OTA5NCwgMHgwNzgwLCAweDE1YzksCi0JMHhkMDljLCAweDE1MDAsIDB4MjA3MSwgMHgxOTEwLCAweDcwMGYsIDB4MDAwMSwgMHhhOTY0LCAweDkxODQsCi0JMHgwMGZmLCAweDkwODYsIDB4MDAwMywgMHgxMTMwLCAweDgxMGYsIDB4OTE4YywgMHgwMGZmLCAweDgxMDEsCi0JMHgwMTA4LCAweDcxMGUsIDB4MjkwMCwgMHgwMGQ2LCAweDIwNjksIDB4MDA1MCwgMHg2ODIyLCAweDAwZGUsCi0JMHg3MDFjLCAweDIwNDgsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsIDB4YTgwMCwgMHg3MDFlLCAweDkwMDUsCi0JMHgxMTA4LCAweDcwMWEsIDB4MDEyZSwgMHgwMDA1LCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg3MDFjLCAweDkwNGQsIDB4MDE2MCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHhhODAwLCAweDcwMWUsCi0JMHg5MDA1LCAweDExMDgsIDB4NzAxYSwgMHgwMTJlLCAweDA4MGMsIDB4MTA0MCwgMHgwMDA1LCAweDAxMmUsCi0JMHgwMDA1LCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LCAweDcxNjMsIDB4MDAwNiwgMHgwMDE2LCAweDIwMDEsCi0JMHg4MDA0LCAweDAwMDYsIDB4MDgwNCwgMHgwZGNlLCAweDAwOTYsIDB4MDBmNiwgMHgyMDc5LCAweDAwNTAsCi0JMHg3MDQ0LCAweGQwODQsIDB4MDFkMCwgMHhjMDg0LCAweDcwNDYsIDB4NzgzOCwgMHg3OTM4LCAweDkxMGUsCisJMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsIDB4MTEyMCwgMHgwMGZlLCAweDAwMmUsCisJMHgwMGVlLCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsCisJMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGMwLCAweDkyMDAsCisJMHg3MGMyLCAweDA4MGMsIDB4ODcyNSwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDI5MDgsCisJMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LCAweDkwNGQsIDB4NzExYSwgMHgwMTEwLCAweGE5MDIsCisJMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsIDB4MTkwNCwgMHg3MDVlLCAweDc4MmMsCisJMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjJmLCAweGQwOWMsIDB4MTFiMCwgMHg3MDFjLCAweDkwNGQsCisJMHgwMTk4LCAweGE4NGMsIDB4OTAwNSwgMHgxMTgwLCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweDExMDgsCisJMHg3MDFhLCAweGE4MDAsIDB4NzAxZSwgMHgyOTAwLCAweDc4MjIsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCisJMHgxOTBjLCAweDcyMmYsIDB4ZDA5YywgMHgwZDUwLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsCisJMHg3MjJmLCAweGQwYTQsIDB4MDViOCwgMHgwMGU2LCAweDc4MjQsIDB4MjA0OCwgMHgyMDcxLCAweDE4MDAsCisJMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4ODAwMCwgMHg3MGMyLCAweDA4MGMsCisJMHg4NzI1LCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzIyZiwgMHhkMGE0LCAweDFkNjAsCisJMHgwMGVlLCAweDBlMDQsIDB4NzA1NywgMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLCAweDAwZDYsCisJMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsIDB4MDBkZSwgMHg3MDQ0LCAweGMwODQsCisJMHg3MDQ2LCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCisJMHgxMWFhLCAweDcwNGIsIDB4MDAwMCwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDcwNDQsCisJMHhjMDg1LCAweDcwNDYsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCisJMHgxODAwLCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsCisJMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MjUsCisJMHgwMGVlLCAweDA4MDQsIDB4NmZmZiwgMHgyMDcxLCAweDE5MTAsIDB4YTgwMywgMHgwMDAwLCAweDI5MDgsCisJMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LCAweDkwNGQsIDB4NzExYSwgMHgwMTEwLCAweGE5MDIsCisJMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsIDB4MTEyOCwgMHgxZTA0LCAweDcwOWUsCisJMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDcxLCAweDE4MDAsIDB4OTAxNiwgMHg3MDJjLCAweDIxNDgsCisJMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYzAsCisJMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzI1LCAweDBlMDQsIDB4NzA4OCwgMHgyMDcxLCAweDE5MTAsCisJMHg3MDFjLCAweDIwNDgsIDB4YTg0YywgMHg5MDBkLCAweDBkMTgsIDB4MjA3MSwgMHgwMDAwLCAweDcxODIsCisJMHhhODUwLCAweDcwMzIsIDB4YTg2YywgMHg3MDg2LCAweDcwMzYsIDB4YTg3MCwgMHg3MDhhLCAweGE4NTAsCisJMHg5MDgyLCAweDAwMTksIDB4MTI3OCwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsCisJMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHgyMDcxLCAweDE5MTAsIDB4MDgwYywgMHg3MjFiLCAweDAwMmUsCisJMHgwMGVlLCAweDAwMDUsIDB4YTg1MCwgMHg5MDgyLCAweDAwMWMsIDB4MWU2OCwgMHhhODgwLCAweDcwOGUsCisJMHg3MDM2LCAweDAxNDYsIDB4MDFkNiwgMHgwMTM2LCAweDAxYzYsIDB4MDE1NiwgMHgyMGU5LCAweDAwMDAsCisJMHgyMGExLCAweDAwMmEsIDB4YTg2OCwgMHgyMGE4LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsCisJMHgwMDIxLCAweDIwOTgsIDB4NDAwMywgMHgwMTVlLCAweDAxY2UsIDB4MDEzZSwgMHgwMWRlLCAweDAxNGUsCisJMHgwODkwLCAweDIwNzEsIDB4MTkxMCwgMHhhODAzLCAweDAwMDAsIDB4MjkwOCwgMHg3MDEwLCAweDgwMDAsCisJMHg3MDEyLCAweDcwMTgsIDB4OTA0ZCwgMHg3MTFhLCAweDAxMTAsIDB4YTkwMiwgMHgwMDA4LCAweDcxMWUsCisJMHgyMTQ4LCAweGE4MDQsIDB4OTAwZCwgMHgxMTE4LCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzEsCisJMHgxODAwLCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsCisJMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MjUsCisJMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgwMDA2LCAweGE4N2MsIDB4MDAwNiwgMHhhODY3LCAweDAxMDMsCisJMHgyMGE5LCAweDAwMWMsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDFkLCAweDIwYTAsCisJMHg5MDA2LCAweDQwMDQsIDB4MDAwZSwgMHg5MDg0LCAweDAwZmYsIDB4YTg3ZSwgMHgwMDBlLCAweGE4N2EsCisJMHhhOTgyLCAweDAwMDUsIDB4MjA3MSwgMHgxOTEwLCAweDcwMDQsIDB4MDAwMiwgMHg3MTJlLCAweDcxMmYsCisJMHg3MjFhLCAweDcxMmYsIDB4NzEyYywgMHg3MjFhLCAweDA4MGMsIDB4MGRjNSwgMHgwMDA1LCAweDIwMDEsCisJMHgxOTQ4LCAweDIwMDQsIDB4MDAwMiwgMHg3MTM5LCAweDcxMzksIDB4NzFiMywgMHg3MWI0LCAweDcxMzksCisJMHg3MWI0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDFlMGMsIDB4NzIzYSwgMHg3MDFjLCAweDkwNGQsCisJMHgwNTA4LCAweGE4NGMsIDB4OTAwNSwgMHgwOTA0LCAweDcxODQsIDB4MGUwNCwgMHg3MTYyLCAweGE5NGMsCisJMHgyMDcxLCAweDAwMDAsIDB4NzE4MiwgMHhhODUwLCAweDcwMzIsIDB4YTg2YywgMHg3MDg2LCAweDcwMzYsCisJMHhhODcwLCAweDcwOGEsIDB4YTg1MCwgMHg5MDgyLCAweDAwMTksIDB4MTI3OCwgMHgyMDkxLCAweDQwODAsCisJMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHgyMDcxLCAweDE5MTAsCisJMHgwODBjLCAweDcyMWIsIDB4MDEyZSwgMHgwODA0LCAweDcxYjIsIDB4YTg1MCwgMHg5MDgyLCAweDAwMWMsCisJMHgxZTY4LCAweGE4ODAsIDB4NzA4ZSwgMHg3MDM2LCAweDAxNDYsIDB4MDFkNiwgMHgwMTM2LCAweDAxYzYsCisJMHgwMTU2LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAwMmEsIDB4YTg2OCwgMHgyMGE4LCAweGE4NjAsCisJMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDIxLCAweDIwOTgsIDB4NDAwMywgMHgwMTVlLCAweDAxY2UsCisJMHgwMTNlLCAweDAxZGUsIDB4MDE0ZSwgMHgwODkwLCAweDIwMDEsIDB4MDA1YiwgMHgyMDA0LCAweDkwOTQsCisJMHgwNzgwLCAweDE5MGMsIDB4NzIyZiwgMHhkMDljLCAweDIwNzEsIDB4MTkxMCwgMHgxNTEwLCAweDIwNzEsCisJMHgxOTEwLCAweDcwMGYsIDB4MDAwMSwgMHhhOTY0LCAweDkxODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDMsCisJMHgxMTMwLCAweDgxMGYsIDB4OTE4YywgMHgwMGZmLCAweDgxMDEsIDB4MDEwOCwgMHg3MTBlLCAweDI5MDAsCisJMHgwMGQ2LCAweDIwNjksIDB4MDA1MCwgMHg2ODIyLCAweDAwZGUsIDB4MjA3MSwgMHgxOTEwLCAweDcwMWMsCisJMHgyMDQ4LCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweGE4MDAsIDB4NzAxZSwgMHg5MDA1LCAweDExMDgsCisJMHg3MDFhLCAweDAxMmUsIDB4MDAwNSwgMHgwMDA1LCAweDAwZDYsIDB4MjAwOCwgMHgyMDY5LCAweDE5ZmIsCisJMHg2ODQ0LCAweDkwMDUsIDB4MDc2MCwgMHgwMTU4LCAweDkxODYsIDB4MDAwMywgMHgwNTQwLCAweDIwMDEsCisJMHgxODE1LCAweDIwMDQsIDB4MjAwOSwgMHgxYWQxLCAweDIxMGMsIDB4OTEwMiwgMHgxNTAwLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHgwMDUwLCAweDY5M2MsIDB4NjgzOCwgMHg5MTA2LCAweDAxOTAsCisJMHgwZTA0LCAweDcxZTYsIDB4MjA2OSwgMHgwMDAwLCAweDY4MzcsIDB4ODA0MCwgMHg2ODMzLCAweDAwMTIsCisJMHg2ODgzLCAweDgwNDAsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsCisJMHgxOTBjLCAweDExYWEsIDB4MjA2OSwgMHgxOWZiLCAweDY4NDcsIDB4ZmZmZiwgMHgwMTJlLCAweDAwZGUsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgxZTBjLCAweDcyYTUsIDB4NzAxYywgMHg5MDRkLCAweDA1NDAsCisJMHgyMDAxLCAweDAwNWIsIDB4MjAwNCwgMHg5MDk0LCAweDA3ODAsIDB4MTVjOSwgMHhkMDljLCAweDE1MDAsCisJMHgyMDcxLCAweDE5MTAsIDB4NzAwZiwgMHgwMDAxLCAweGE5NjQsIDB4OTE4NCwgMHgwMGZmLCAweDkwODYsCisJMHgwMDAzLCAweDExMzAsIDB4ODEwZiwgMHg5MThjLCAweDAwZmYsIDB4ODEwMSwgMHgwMTA4LCAweDcxMGUsCisJMHgyOTAwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDUwLCAweDY4MjIsIDB4MDBkZSwgMHg3MDFjLCAweDIwNDgsCisJMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHhhODAwLCAweDcwMWUsIDB4OTAwNSwgMHgxMTA4LCAweDcwMWEsCisJMHgwMTJlLCAweDAwMDUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDFjLCAweDkwNGQsCisJMHgwMTYwLCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweGE4MDAsIDB4NzAxZSwgMHg5MDA1LCAweDExMDgsCisJMHg3MDFhLCAweDAxMmUsIDB4MDgwYywgMHgxMDQwLCAweDAwMDUsIDB4MDEyZSwgMHgwMDA1LCAweDIwOTEsCisJMHg4MDAwLCAweDBlMDQsIDB4NzIzMSwgMHgwMDA2LCAweDAwMTYsIDB4MjAwMSwgMHg4MDA0LCAweDAwMDYsCisJMHgwODA0LCAweDBkY2UsIDB4MDA5NiwgMHgwMGY2LCAweDIwNzksIDB4MDA1MCwgMHg3MDQ0LCAweGQwODQsCisJMHgwMWQwLCAweGMwODQsIDB4NzA0NiwgMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLCAweDAwZDYsCisJMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsIDB4MDBkZSwgMHgyMDkxLCAweDQwODAsCisJMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFhYSwgMHg3MDRiLCAweDAwMDAsCisJMHgwMGZlLCAweDAwOWUsIDB4MDAwNSwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTgxLCAweGQwYTQsCisJMHgwZGI4LCAweDcxNDgsIDB4NzA0YywgMHg4MTA4LCAweDcxNGEsIDB4OTEwMiwgMHgwZTg4LCAweDAwZTYsCisJMHgyMDcxLCAweDE4MDAsIDB4NzgyNCwgMHgwMGU2LCAweDIwNzEsIDB4MDA0MCwgMHg3MTJjLCAweGQxOWMsCisJMHgxMTQ4LCAweDIwMDksIDB4MTgzMCwgMHgyMTBjLCAweDkxOGEsIDB4MDAyMCwgMHgwMjE4LCAweDcwMjIsCisJMHgwMGVlLCAweDAwNTgsIDB4MDBlZSwgMHgyMDQ4LCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsCisJMHg3MGMwLCAweDgwMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MjUsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCisJMHgxOTBjLCAweDcyMmYsIDB4ZDBhNCwgMHgxOWYwLCAweDc4MzgsIDB4NzkzOCwgMHg5MTBlLCAweDFkZTAsCisJMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODM2LCAweDY4MzMsIDB4MDAxMywgMHgwMGRlLCAweDIwOTEsCisJMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWFhLCAweDAwZWUsCisJMHg3MDRiLCAweDAwMDAsIDB4MDBmZSwgMHgwMDllLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAwNTAsCisJMHg3MDQ0LCAweGQwODQsIDB4MDFiOCwgMHhjMDg0LCAweDcwNDYsIDB4NzgzOCwgMHg3OTM4LCAweDkxMGUsCiAJMHgxZGUwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4MzYsIDB4NjgzMywgMHgwMDEzLCAweDAwZGUsCiAJMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDExYWEsCi0JMHg3MDRiLCAweDAwMDAsIDB4MDBmZSwgMHgwMDllLCAweDAwMDUsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCi0JMHgxOTgxLCAweGQwYTQsIDB4MGRiOCwgMHg3MTQ4LCAweDcwNGMsIDB4ODEwOCwgMHg3MTRhLCAweDkxMDIsCi0JMHgwZTg4LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDc4MjQsIDB4MDBlNiwgMHgyMDcxLCAweDAwNDAsCi0JMHg3MTJjLCAweGQxOWMsIDB4MTE0OCwgMHgyMDA5LCAweDE4MzAsIDB4MjEwYywgMHg5MThhLCAweDAwMjAsCi0JMHgwMjE4LCAweDcwMjIsIDB4MDBlZSwgMHgwMDU4LCAweDAwZWUsIDB4MjA0OCwgMHg3MDJjLCAweGE4MDIsCi0JMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NWYxLCAweDc4MmMsCi0JMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MTYxLCAweGQwYTQsIDB4MTlmMCwgMHg3ODM4LCAweDc5MzgsCi0JMHg5MTBlLCAweDFkZTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsCi0JMHgwMGRlLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCi0JMHgxMWFhLCAweDAwZWUsIDB4NzA0YiwgMHgwMDAwLCAweDAwZmUsIDB4MDA5ZSwgMHgwMDA1LCAweDAwZjYsCi0JMHgyMDc5LCAweDAwNTAsIDB4NzA0NCwgMHhkMDg0LCAweDAxYjgsIDB4YzA4NCwgMHg3MDQ2LCAweDc4MzgsCi0JMHg3OTM4LCAweDkxMGUsIDB4MWRlMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODM2LCAweDY4MzMsCi0JMHgwMDEzLCAweDAwZGUsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsCi0JMHgxOTBjLCAweDExYWEsIDB4MDBmZSwgMHgwMDA1LCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsCi0JMHg3MTYxLCAweGQwYTQsIDB4MGRiOCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3ODI0LCAweDIwNDgsCi0JMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4ODAwMCwgMHg3MGMyLCAweDA4MGMsCi0JMHg4NWYxLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzE2MSwgMHhkMGE0LCAweDFkNzAsCi0JMHgwMGQ2LCAweDIwNjksIDB4MDA1MCwgMHg2OTNjLCAweDIwNjksIDB4MTk0OSwgMHg2ODA4LCAweDY5MGEsCi0JMHgyMDY5LCAweDE5ZmMsIDB4OTEwMiwgMHgxMTE4LCAweDY4NDQsIDB4OTAwNSwgMHgxMzIwLCAweDIwMDEsCi0JMHgxOTRhLCAweDIwMGMsIDB4Njk0NiwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDcwOTgsCi0JMHg5MDhhLCAweDAwMmEsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsIDB4MDAxZCwgMHgwMDFiLCAweDYwMjcsCi0JMHgxZTAwLCAweDAwMDUsIDB4NzMxOCwgMHg3Mjg1LCAweDcyYTEsIDB4NzJjYiwgMHg3MzA3LCAweDczNDcsCi0JMHg3MzU5LCAweDcyYTEsIDB4NzMyZiwgMHg3MjQwLCAweDcyNmUsIDB4NzJmMSwgMHg3MjNmLCAweDAwMDUsCi0JMHgwMGQ2LCAweDIwNjksIDB4MDIwMCwgMHg2ODA0LCAweDkwMDUsIDB4MTE4MCwgMHg2ODA4LCAweDkwMDUsCi0JMHgxNTE4LCAweDcwOWIsIDB4MDAyOSwgMHgyMDY5LCAweDE5OTAsIDB4MmQwNCwgMHg3MDAyLCAweDA4MGMsCi0JMHg3NjllLCAweDYwMjgsIDB4OTA4NSwgMHgwNjAwLCAweDYwMmEsIDB4MDBiMCwgMHg3MDliLCAweDAwMjksCi0JMHgyMDY5LCAweDE5OTAsIDB4MmQwNCwgMHg3MDAyLCAweDYwMjgsIDB4OTA4NSwgMHgwNjAwLCAweDYwMmEsCi0JMHgwMGU2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDIwNzEsIDB4MWE2NiwgMHgwODBjLCAweDFiMDIsCi0JMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMGVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksCi0JMHgwMjAwLCAweDY4MDQsIDB4OTAwNSwgMHgxMTc4LCAweDY4MDgsIDB4OTAwNSwgMHgxMTYwLCAweDcwOWIsCi0JMHgwMDI5LCAweDIwNjksIDB4MTk5MCwgMHgyZDA0LCAweDcwMDIsIDB4MDgwYywgMHg3NzNiLCAweDYwMjgsCi0JMHg5MDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDAwOTAsCi0JMHgwODBjLCAweDJkNTIsIDB4MDAwZSwgMHg2MTI0LCAweGQxZTQsIDB4MTE5MCwgMHgwODBjLCAweDczYzYsCi0JMHhkMWQ0LCAweDExNjAsIDB4ZDFkYywgMHgxMTM4LCAweGQxY2MsIDB4MDE1MCwgMHg3MDliLCAweDAwMjAsCi0JMHgwODBjLCAweDczYzYsIDB4MDAyOCwgMHg3MDliLCAweDAwMWQsIDB4MDAxMCwgMHg3MDliLCAweDAwMWYsCi0JMHgwMDA1LCAweDIwMDEsIDB4MDA4OCwgMHgwODBjLCAweDJkNTIsIDB4NjEyNCwgMHhkMWNjLCAweDExZTgsCi0JMHhkMWRjLCAweDExYzAsIDB4ZDFlNCwgMHgxMTk4LCAweDkxODQsIDB4MWUwMCwgMHgxMWQ4LCAweDA4MGMsCi0JMHgxYjJmLCAweDYwZTMsIDB4MDAwMSwgMHg2MDBjLCAweGMwYjQsIDB4NjAwZSwgMHgwODBjLCAweDc1OTUsCi0JMHgyMDAxLCAweDAwODAsIDB4MDgwYywgMHgyZDUyLCAweDcwOWIsIDB4MDAyOSwgMHgwMDU4LCAweDcwOWIsCi0JMHgwMDFlLCAweDAwNDAsIDB4NzA5YiwgMHgwMDFkLCAweDAwMjgsIDB4NzA5YiwgMHgwMDIwLCAweDAwMTAsCi0JMHg3MDliLCAweDAwMWYsIDB4MDAwNSwgMHgwODBjLCAweDFiMmYsIDB4NjBlMywgMHgwMDAxLCAweDYwMGMsCi0JMHhjMGI0LCAweDYwMGUsIDB4MDgwYywgMHg3NTk1LCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLCAweDJkNTIsCi0JMHg2MTI0LCAweGQxZDQsIDB4MTE5OCwgMHhkMWRjLCAweDExNzAsIDB4ZDFlNCwgMHgxMTQ4LCAweDkxODQsCi0JMHgxZTAwLCAweDExMTgsIDB4NzA5YiwgMHgwMDI5LCAweDAwNTgsIDB4NzA5YiwgMHgwMDI4LCAweDAwNDAsCi0JMHg3MDliLCAweDAwMWUsIDB4MDAyOCwgMHg3MDliLCAweDAwMWQsIDB4MDAxMCwgMHg3MDliLCAweDAwMWYsCi0JMHgwMDA1LCAweDYxMjQsIDB4ZDFkNCwgMHgxMTgwLCAweGQxZGMsIDB4MTE1OCwgMHhkMWU0LCAweDExMzAsCi0JMHg5MTg0LCAweDFlMDAsIDB4MTE1OCwgMHg3MDliLCAweDAwMjksIDB4MDA0MCwgMHg3MDliLCAweDAwMWUsCisJMHgwMGZlLCAweDAwMDUsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjJmLCAweGQwYTQsCisJMHgwZGI4LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDc4MjQsIDB4MjA0OCwgMHg3MDJjLCAweGE4MDIsCisJMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzI1LCAweDc4MmMsCisJMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjJmLCAweGQwYTQsIDB4MWQ3MCwgMHgwMGQ2LCAweDIwNjksCisJMHgwMDUwLCAweDY5M2MsIDB4MjA2OSwgMHgxOTQ4LCAweDY4MDgsIDB4NjkwYSwgMHgyMDY5LCAweDE5ZmIsCisJMHg5MTAyLCAweDExMTgsIDB4Njg0NCwgMHg5MDA1LCAweDEzMjAsIDB4MjAwMSwgMHgxOTQ5LCAweDIwMGMsCisJMHg2OTQ2LCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NzA5OCwgMHg5MDhhLCAweDAwMmEsCisJMHgxYTBjLCAweDBkYzUsIDB4OTA4MiwgMHgwMDFkLCAweDAwMWIsIDB4NjAyNywgMHgxZTAwLCAweDAwMDUsCisJMHg3M2U2LCAweDczNTMsIDB4NzM2ZiwgMHg3Mzk5LCAweDczZDUsIDB4NzQxNSwgMHg3NDI3LCAweDczNmYsCisJMHg3M2ZkLCAweDczMGUsIDB4NzMzYywgMHg3M2JmLCAweDczMGQsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksCisJMHgwMjAwLCAweDY4MDQsIDB4OTAwNSwgMHgxMTgwLCAweDY4MDgsIDB4OTAwNSwgMHgxNTE4LCAweDcwOWIsCisJMHgwMDI5LCAweDIwNjksIDB4MTk4ZiwgMHgyZDA0LCAweDcwMDIsIDB4MDgwYywgMHg3Nzc0LCAweDYwMjgsCisJMHg5MDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGIwLCAweDcwOWIsIDB4MDAyOSwgMHgyMDY5LCAweDE5OGYsCisJMHgyZDA0LCAweDcwMDIsIDB4NjAyOCwgMHg5MDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGU2LCAweDAwMzYsCisJMHgwMDQ2LCAweDAwNTYsIDB4MjA3MSwgMHgxYTY1LCAweDA4MGMsIDB4MWFkOSwgMHgwMDVlLCAweDAwNGUsCisJMHgwMDNlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDY4MDQsCisJMHg5MDA1LCAweDExNzgsIDB4NjgwOCwgMHg5MDA1LCAweDExNjAsIDB4NzA5YiwgMHgwMDI5LCAweDIwNjksCisJMHgxOThmLCAweDJkMDQsIDB4NzAwMiwgMHgwODBjLCAweDc4MTgsIDB4NjAyOCwgMHg5MDg1LCAweDA2MDAsCisJMHg2MDJhLCAweDAwZGUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MDA5MCwgMHgwODBjLCAweDJkMzksCisJMHgwMDBlLCAweDYxMjQsIDB4ZDFlNCwgMHgxMTkwLCAweDA4MGMsIDB4NzQ5NCwgMHhkMWQ0LCAweDExNjAsCisJMHhkMWRjLCAweDExMzgsIDB4ZDFjYywgMHgwMTUwLCAweDcwOWIsIDB4MDAyMCwgMHgwODBjLCAweDc0OTQsCiAJMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOWIsIDB4MDAxZiwgMHgwMDA1LCAweDIwMDEsCi0JMHgwMGEwLCAweDA4MGMsIDB4MmQ1MiwgMHg2MTI0LCAweGQxZGMsIDB4MTEzOCwgMHhkMWU0LCAweDAxMzgsCi0JMHgwODBjLCAweDFiMmYsIDB4NzA5YiwgMHgwMDFlLCAweDAwMTAsIDB4NzA5YiwgMHgwMDFkLCAweDAwMDUsCi0JMHgwODBjLCAweDc0NDksIDB4NjEyNCwgMHhkMWRjLCAweDExODgsIDB4MDgwYywgMHg3M2M2LCAweDAwMTYsCi0JMHgwODBjLCAweDFiMmYsIDB4MDAxZSwgMHhkMWQ0LCAweDExMjgsIDB4ZDFlNCwgMHgwMTM4LCAweDcwOWIsCi0JMHgwMDFlLCAweDAwMjAsIDB4NzA5YiwgMHgwMDFmLCAweDA4MGMsIDB4NzNjNiwgMHgwMDA1LCAweDAwMDYsCi0JMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyZDUyLCAweDAwMGUsIDB4NjEyNCwgMHhkMWQ0LCAweDExNjAsCi0JMHhkMWNjLCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsIDB4MDE0MCwgMHg3MDliLCAweDAwMWUsCi0JMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOWIsIDB4MDAyMSwgMHgwMDA1LCAweDA4MGMsCi0JMHg3NDQ5LCAweDYxMjQsIDB4ZDFkNCwgMHgxMTUwLCAweGQxZGMsIDB4MTEyOCwgMHhkMWU0LCAweDAxNDAsCi0JMHg3MDliLCAweDAwMWUsIDB4MDAyOCwgMHg3MDliLCAweDAwMWQsIDB4MDAxMCwgMHg3MDliLCAweDAwMWYsCi0JMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgwMDkwLCAweDA4MGMsIDB4MmQ1MiwgMHgwMDBlLCAweDYxMjQsCi0JMHhkMWQ0LCAweDExNzgsIDB4ZDFjYywgMHgxMTUwLCAweGQxZGMsIDB4MTEyOCwgMHhkMWU0LCAweDAxNTgsCi0JMHg3MDliLCAweDAwMWUsIDB4MDA0MCwgMHg3MDliLCAweDAwMWQsIDB4MDAyOCwgMHg3MDliLCAweDAwMjAsCi0JMHgwMDEwLCAweDcwOWIsIDB4MDAxZiwgMHgwMDA1LCAweDAwMTYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsCi0JMHgwMTI2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4NzU2OSwgMHgxMWQ4LCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGQxYjQsCi0JMHgwMWIwLCAweGMxYjQsIDB4MjEwMiwgMHg2MDI3LCAweDAyMDAsIDB4MDgwYywgMHgyYzdhLCAweDYwMjQsCi0JMHhkMGNjLCAweDAxNDgsIDB4MjAwMSwgMHgwMGEwLCAweDA4MGMsIDB4MmQ1MiwgMHgwODBjLCAweDc4NGUsCi0JMHgwODBjLCAweDYxMjcsIDB4MDQyOCwgMHg2MDI4LCAweGMwY2QsIDB4NjAyYSwgMHgwNDA4LCAweDA4MGMsCi0JMHg3NTgzLCAweDAxNTAsIDB4MDgwYywgMHg3NTdhLCAweDExMzgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCi0JMHgyODNkLCAweDA4MGMsIDB4NzU0MSwgMHgwMGEwLCAweDA4MGMsIDB4NzQ0NiwgMHgwMTc4LCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4MjgzZCwgMHg3MDk4LCAweDkwODYsIDB4MDAxZSwgMHgwMTIwLCAweDcwOTgsCi0JMHg5MDg2LCAweDAwMjIsIDB4MTExOCwgMHg3MDliLCAweDAwMjUsIDB4MDAxMCwgMHg3MDliLCAweDAwMjEsCi0JMHgwMTJlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDI2LCAweDIwMTEsCi0JMHg3M2Q3LCAweDA4MGMsIDB4ODdlMywgMHgwMDJlLCAweDAwMTYsIDB4MDAyNiwgMHgyMDA5LCAweDAwNjQsCi0JMHgyMDExLCAweDczZDcsIDB4MDgwYywgMHg4N2RhLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgwMGY2LCAweDAwMTYsIDB4MDgwYywgMHhhNTE3LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweDczNzQsCi0JMHgwMDFlLCAweDAwZmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsCi0JMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwMTI2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweGE1MTcsCi0JMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDIwOTEsIDB4ODAwMCwgMHg2MDI4LCAweGMwOWMsCi0JMHg2MDJhLCAweDIwMTEsIDB4MDAwMywgMHgwODBjLCAweGE4ZWQsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsCi0JMHhhOGY3LCAweDA4MGMsIDB4YTgwMSwgMHgwODBjLCAweDg3OGYsIDB4MDAzNiwgMHg5MDFlLCAweDA4MGMsCi0JMHhhODc3LCAweDAwM2UsIDB4NjBlMywgMHgwMDAwLCAweDA4MGMsIDB4ZWRmYSwgMHgwODBjLCAweGVlMTUsCi0JMHgyMDA5LCAweDAwMDQsIDB4MDgwYywgMHgyYzgwLCAweDA4MGMsIDB4MmI5YiwgMHgyMDAxLCAweDE4MDAsCi0JMHgyMDAzLCAweDAwMDQsIDB4NjAyNywgMHgwMDA4LCAweDIwMTEsIDB4NzNkNywgMHgwODBjLCAweDg3ZTMsCi0JMHgwODBjLCAweDc1ODMsIDB4MDExOCwgMHg5MDA2LCAweDA4MGMsIDB4MmQ1MiwgMHgwODBjLCAweDBiYTAsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyODNkLCAweDAxMmUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsCi0JMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAyNiwgMHgwMGU2LCAweDIwMTEsCi0JMHg3M2U0LCAweDIwNzEsIDB4MTlmYywgMHg3MDFjLCAweDkyMDYsIDB4MTExOCwgMHg3MDE4LCAweDkwMDUsCi0JMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLCAweDAwMmUsIDB4MDAwNSwgMHg2MDIwLCAweGQwOWMsCi0JMHgwMDA1LCAweDY4MDAsIDB4OTA4NCwgMHhmZmZlLCAweDkwODYsIDB4MDBjMCwgMHgwMWI4LCAweDIwMDEsCi0JMHgwMGMwLCAweDA4MGMsIDB4MmQ1MiwgMHgwMTU2LCAweDIwYTksIDB4MDAyZCwgMHgxZDA0LCAweDc0NTYsCi0JMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHg3NDU2LCAweDAxNWUsIDB4MDBkNiwgMHgyMDY5LCAweDE4MDAsCi0JMHg2ODljLCAweDgwMDEsIDB4MDIyMCwgMHgwMTE4LCAweDY4OWUsIDB4MDBkZSwgMHgwMDA1LCAweDY4OWYsCi0JMHgwMDE0LCAweDY4ZTgsIDB4ZDBkYywgMHgwZGM4LCAweDY4MDAsIDB4OTA4NiwgMHgwMDAxLCAweDFkYTgsCi0JMHgwODBjLCAweDg3ZWYsIDB4MGM5MCwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsCi0JMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4Nzg1ZCwgMHgyMDAxLCAweDE5NmUsCi0JMHgyMDAzLCAweDAwMDAsIDB4OTAwNiwgMHg3MDlhLCAweDYwZTIsIDB4Njg4NiwgMHgwODBjLCAweDI5MDgsCi0JMHg5MDA2LCAweDA4MGMsIDB4MmQ1MiwgMHgwODBjLCAweDVmZTYsIDB4NjAyNywgMHhmZmZmLCAweDYwMmIsCi0JMHgxODJmLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsCi0JMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDIwNzEsIDB4MTgwMCwgMHgyMDAxLCAweDE5N2UsCi0JMHgyMDBjLCAweDkxODYsIDB4MDAwMCwgMHgwMTU4LCAweDkxODYsIDB4MDAwMSwgMHgwMTU4LCAweDkxODYsCi0JMHgwMDAyLCAweDAxNTgsIDB4OTE4NiwgMHgwMDAzLCAweDAxNTgsIDB4MDgwNCwgMHg3NTMxLCAweDcwOWIsCi0JMHgwMDIyLCAweDAwNDAsIDB4NzA5YiwgMHgwMDIxLCAweDAwMjgsIDB4NzA5YiwgMHgwMDIzLCAweDAwMTAsCi0JMHg3MDliLCAweDAwMjQsIDB4NjBlMywgMHgwMDAwLCAweDY4ODcsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDEsCi0JMHgwODBjLCAweDI5MDgsIDB4MDAyNiwgMHgwODBjLCAweGIwNzIsIDB4MDAyZSwgMHg3MDAwLCAweDkwOGUsCi0JMHgwMDA0LCAweDAxMTgsIDB4NjAyYiwgMHgwMDI4LCAweDAwMTAsIDB4NjAyYiwgMHgwMDIwLCAweDAxNTYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMGE5LCAweDAwMDUsIDB4NjAyNCwgMHhkMGFjLCAweDAxNTAsCi0JMHgwMTJlLCAweDAxNWUsIDB4MDgwYywgMHhkNTYxLCAweDAxMTgsIDB4OTAwNiwgMHgwODBjLCAweDJkN2MsCi0JMHgwODA0LCAweDc1M2QsIDB4NjgwMCwgMHg5MDg0LCAweDAwYTEsIDB4YzBiZCwgMHg2ODAyLCAweDA4MGMsCi0JMHgyYzdhLCAweDY5MDQsIDB4ZDFkNCwgMHgxMTQwLCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJkNTIsCi0JMHgxZjA0LCAweDc0ZDUsIDB4MDgwYywgMHg3NWJkLCAweDAxMmUsIDB4MDE1ZSwgMHgwODBjLCAweDc1N2EsCi0JMHgwMWQ4LCAweDYwNDQsIDB4OTAwNSwgMHgwMTk4LCAweDIwMTEsIDB4MDExNCwgMHgyMjA0LCAweDkwODUsCi0JMHgwMTAwLCAweDIwMTIsIDB4NjA1MCwgMHgwMDA2LCAweDkwODUsIDB4MDAyMCwgMHg2MDUyLCAweDA4MGMsCi0JMHg3NWJkLCAweDkwMDYsIDB4ODAwMSwgMHgxZGYwLCAweDAwMGUsIDB4NjA1MiwgMHgwMDI4LCAweDY4MDQsCi0JMHhkMGQ0LCAweDExMTAsIDB4MDgwYywgMHg3NWJkLCAweDA4MGMsIDB4ZDU2MSwgMHgwMTE4LCAweDkwMDYsCi0JMHgwODBjLCAweDJkN2MsIDB4MDAxNiwgMHgwMDI2LCAweDcwMDAsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMzAsCi0JMHgyMDA5LCAweDAwYzgsIDB4MjAxMSwgMHg3M2U0LCAweDA4MGMsIDB4ODdhMSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwODBjLCAweDg1ZTgsIDB4NzAzNCwgMHhjMDg1LCAweDcwMzYsIDB4MjAwMSwgMHgxOTdlLCAweDIwMDMsCi0JMHgwMDA0LCAweDA4MGMsIDB4NzIyNywgMHgwODBjLCAweDc1N2EsIDB4MDEzOCwgMHg2ODA0LCAweGQwZDQsCi0JMHgxMTIwLCAweGQwZGMsIDB4MTEwMCwgMHgwODBjLCAweDc4NTMsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsCi0JMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHg4NWZmLCAweDA4MGMsIDB4ODVmMSwgMHgwODBjLCAweDc4NWQsCi0JMHgyMDAxLCAweDE5NmUsIDB4MjAwMywgMHgwMDAwLCAweDkwMDYsIDB4NzA5YSwgMHg2MGUyLCAweDY4ODYsCi0JMHgwODBjLCAweDI5MDgsIDB4OTAwNiwgMHgwODBjLCAweDJkNTIsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsCi0JMHgwMDEwLCAweDYwMjcsIDB4ZmZmZiwgMHg2MDJiLCAweDE4MmYsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxOTdkLCAweDIwMDQsIDB4OTA4NiwgMHhhYWFhLCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDgwYywgMHg1N2Q3LCAweDkwODQsIDB4MDAzMCwgMHg5MDg2LCAweDAwMDAsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwODBjLCAweDU3ZDcsIDB4OTA4NCwgMHgwMDMwLCAweDkwODYsCi0JMHgwMDMwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDA4MGMsIDB4NTdkNywgMHg5MDg0LCAweDAwMzAsCi0JMHg5MDg2LCAweDAwMTAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDgwYywgMHg1N2Q3LCAweDkwODQsCi0JMHgwMDMwLCAweDkwODYsIDB4MDAyMCwgMHgwMDBlLCAweDAwMDUsIDB4MDAzNiwgMHgwMDE2LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMDQsIDB4OTA4YywgMHgwMDEzLCAweDAxNjgsIDB4MDAyMCwgMHgwODBjLCAweDI5MjgsCi0JMHg5MDBlLCAweDAwMTAsIDB4MjAwOSwgMHgwMDAyLCAweDIwMTksIDB4MDAyOCwgMHgwODBjLCAweDMyMTEsCi0JMHg5MDA2LCAweDAwMTksIDB4MDAxZSwgMHgwMDNlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MGMsCi0JMHgyZTA0LCAweDAxMzAsIDB4MDgwYywgMHhkNTVhLCAweDExMjgsIDB4OTA4NSwgMHgwMDEwLCAweDAwMTAsCi0JMHg5MDg0LCAweGZmZWYsIDB4MjA3MiwgMHgwMGVlLCAweDAwMDUsIDB4NjA1MCwgMHgwMDA2LCAweDYwZWMsCi0JMHgwMDA2LCAweDYwMGMsIDB4MDAwNiwgMHg2MDA0LCAweDAwMDYsIDB4NjAyOCwgMHgwMDA2LCAweDAwMTYsCi0JMHg2MTM4LCAweDYwNTAsIDB4OTA4NCwgMHhmYmZmLCAweDkwODUsIDB4MjAwMCwgMHg2MDUyLCAweDYxM2EsCi0JMHgyMGE5LCAweDAwMTIsIDB4MWQwNCwgMHg3NWQyLCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LCAweDc1ZDIsCi0JMHg2MDJmLCAweDAxMDAsIDB4NjAyZiwgMHgwMDAwLCAweDYwNTAsIDB4OTA4NSwgMHgwNDAwLCAweDkwODQsCi0JMHhkZmZmLCAweDYwNTIsIDB4NjEzYSwgMHgwMDFlLCAweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsCi0JMHgwMDBlLCAweDYwMmEsIDB4MDAwZSwgMHg2MDA2LCAweDAwMGUsIDB4NjAwZSwgMHgwMDBlLCAweDYwZWUsCi0JMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAxLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI5MDgsCi0JMHgyMDAxLCAweDAwYTAsIDB4MDAwNiwgMHgwODBjLCAweGQ1NjEsIDB4MDAwZSwgMHgwMTMwLCAweDA4MGMsCi0JMHgyZDcwLCAweDkwMDYsIDB4MDgwYywgMHgyZDdjLCAweDAwMTAsIDB4MDgwYywgMHgyZDUyLCAweDAwMGUsCi0JMHg2MDUyLCAweDYwNTAsIDB4MDAwNiwgMHhjMGU1LCAweDYwNTIsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsCi0JMHgwODBjLCAweDJiZWYsIDB4MDBmZSwgMHgwMDBlLCAweDYwNTIsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksCi0JMHgwMTQwLCAweDIwNzEsIDB4MTgwMCwgMHg2MDIwLCAweDkwODQsIDB4MDA4MCwgMHgwMTM4LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4YzFjNSwgMHgyMTAyLCAweDA4MDQsIDB4NzY5MCwgMHgyMDAxLCAweDE4MGMsCi0JMHgyMDBjLCAweGMxYzQsIDB4MjEwMiwgMHg2MDI4LCAweDkwODQsIDB4ZTFmZiwgMHg2MDJhLCAweDYwMjcsCi0JMHgwMjAwLCAweDIwMDEsIDB4MDA5MCwgMHgwODBjLCAweDJkNTIsIDB4MjBhOSwgMHgwMzY2LCAweDYwMjQsCi0JMHhkMGNjLCAweDE1MTgsIDB4MWQwNCwgMHg3NjNmLCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LCAweDc2M2YsCi0JMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHhhOGVkLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweGE4ZjcsCi0JMHgwODBjLCAweGE4MDEsIDB4OTAxZSwgMHgwODBjLCAweGE4NzcsIDB4MjAwMSwgMHgwMGEwLCAweDA4MGMsCi0JMHgyZDUyLCAweDA4MGMsIDB4Nzg0ZSwgMHgwODBjLCAweDYxMjcsIDB4MDgwYywgMHhkNTYxLCAweDAxMTAsCi0JMHgwODBjLCAweDBkMzMsIDB4OTA4NSwgMHgwMDAxLCAweDA0ODgsIDB4MDgwYywgMHgxYjJmLCAweDYwZTMsCi0JMHgwMDAwLCAweDIwMDEsIDB4MTk2ZSwgMHgyMDA0LCAweDA4MGMsIDB4MjkwOCwgMHg2MGUyLCAweDIwMDEsCi0JMHgwMDgwLCAweDA4MGMsIDB4MmQ1MiwgMHgyMGE5LCAweDAzNjYsIDB4NjAyNywgMHgxZTAwLCAweDIwMDksCi0JMHgxZTAwLCAweDA4MGMsIDB4MmM3YSwgMHg2MDI0LCAweDkxMGMsIDB4MDEzOCwgMHgxZDA0LCAweDc2NzUsCi0JMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHg3Njc1LCAweDA4MTgsIDB4NjAyOCwgMHg5MDg1LCAweDFlMDAsCi0JMHg2MDJhLCAweDcwYjQsIDB4OTAwNSwgMHgxMTE4LCAweDY4ODcsIDB4MDAwMSwgMHgwMDA4LCAweDY4ODYsCi0JMHgwODBjLCAweGQ1NjEsIDB4MDExMCwgMHgwODBjLCAweDBkMzMsIDB4OTAwNiwgMHgwMGVlLCAweDAwZGUsCi0JMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsCi0JMHgxODAwLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAzLCAweDExNjgsIDB4MjAwMSwgMHgwMjBiLCAweDIwMDQsCi0JMHg5MDg0LCAweDU1NDAsIDB4OTA4NiwgMHg1NTQwLCAweDExMjgsIDB4MjA2OSwgMHgxYTdkLCAweDJkMDQsCi0JMHg4MDAwLCAweDIwNmEsIDB4MjA2OSwgMHgwMTQwLCAweDYwMjAsIDB4OTA4NCwgMHgwMGMwLCAweDAxMjAsCi0JMHg2ODg0LCAweDkwMDUsIDB4MTkwNCwgMHg3NzAzLCAweDIwMDEsIDB4MDA4OCwgMHgwODBjLCAweDJkNTIsCi0JMHg5MDA2LCAweDYwZTIsIDB4Njg4NiwgMHgwODBjLCAweDI5MDgsIDB4MjA2OSwgMHgwMjAwLCAweDY4MDQsCi0JMHg5MDA1LCAweDExMTgsIDB4NjgwOCwgMHg5MDA1LCAweDAxYzAsIDB4NjAyOCwgMHg5MDg0LCAweGZiZmYsCi0JMHg2MDJhLCAweDYwMjcsIDB4MDQwMCwgMHgyMDY5LCAweDE5OTAsIDB4NzAwMCwgMHgyMDZhLCAweDcwOWIsCi0JMHgwMDI2LCAweDcwMDMsIDB4MDAwMSwgMHgyMGE5LCAweDAwMDIsIDB4MWQwNCwgMHg3NmU1LCAweDIwOTEsCi0JMHg2MDAwLCAweDFmMDQsIDB4NzZlNSwgMHgwODA0LCAweDc3MzMsIDB4MjA2OSwgMHgwMTQwLCAweDIwYTksCi0JMHgwMzg0LCAweDYwMjcsIDB4MWUwMCwgMHgyMDA5LCAweDFlMDAsIDB4MDgwYywgMHgyYzdhLCAweDYwMjQsCi0JMHg5MTBjLCAweDA1MDgsIDB4OTA4NCwgMHgxYTAwLCAweDExZjAsIDB4MWQwNCwgMHg3NmYxLCAweDIwOTEsCi0JMHg2MDAwLCAweDFmMDQsIDB4NzZmMSwgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHhhOGVkLCAweDIwMTEsCi0JMHgwMDAyLCAweDA4MGMsIDB4YThmNywgMHgwODBjLCAweGE4MDEsIDB4OTAxZSwgMHgwODBjLCAweGE4NzcsCi0JMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyZDUyLCAweDA4MGMsIDB4Nzg0ZSwgMHgwODBjLCAweDYxMjcsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDBjMCwgMHgwODBjLCAweDFiMmYsIDB4MjAwMSwgMHgwMDgwLCAweDA4MGMsCi0JMHgyZDUyLCAweDIwNjksIDB4MDE0MCwgMHg2MGUzLCAweDAwMDAsIDB4NzBiNCwgMHg5MDA1LCAweDExMTgsCi0JMHg2ODg3LCAweDAwMDEsIDB4MDAwOCwgMHg2ODg2LCAweDIwMDEsIDB4MTk2ZSwgMHgyMDA0LCAweDA4MGMsCi0JMHgyOTA4LCAweDYwZTIsIDB4OTAwNiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsCi0JMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHg2MDIwLCAweDkwODQsCi0JMHgwMGMwLCAweDAxYzgsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4YThlZCwgMHgyMDExLCAweDAwMDIsCi0JMHgwODBjLCAweGE4ZjcsIDB4MDgwYywgMHhhODAxLCAweDkwMWUsIDB4MDgwYywgMHhhODc3LCAweDIwNjksCi0JMHgwMTQwLCAweDIwMDEsIDB4MDBhMCwgMHgwODBjLCAweDJkNTIsIDB4MDgwYywgMHg3ODRlLCAweDA4MGMsCi0JMHg2MTI3LCAweDA4MDQsIDB4NzdjZSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhkMWI0LCAweDExNjAsCi0JMHhjMWI1LCAweDIxMDIsIDB4MDgwYywgMHg3M2NjLCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLCAweDAwODAsCi0JMHgwODBjLCAweDJkNTIsIDB4NjBlMywgMHgwMDAwLCAweDIwNjksIDB4MDIwMCwgMHg2ODA0LCAweDkwMDUsCi0JMHgxMTE4LCAweDY4MDgsIDB4OTAwNSwgMHgwMTgwLCAweDYwMjgsIDB4OTA4NCwgMHhmZGZmLCAweDYwMmEsCi0JMHg2MDI3LCAweDAyMDAsIDB4MjA2OSwgMHgxOTkwLCAweDcwMDAsIDB4MjA2YSwgMHg3MDliLCAweDAwMjcsCi0JMHg3MDAzLCAweDAwMDEsIDB4MDgwNCwgMHg3N2NlLCAweDYwMjcsIDB4MWUwMCwgMHgyMDA5LCAweDFlMDAsCi0JMHgwODBjLCAweDJjN2EsIDB4NjAyNCwgMHg5MTBjLCAweDAxYzgsIDB4OTA4NCwgMHgxYzAwLCAweDExYjAsCi0JMHgxZDA0LCAweDc3OGMsIDB4MDAwNiwgMHgwMDE2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDA4MGMsCi0JMHg4NjQyLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwZSwgMHgwMGU2LCAweDIwNzEsCi0JMHgxOWZjLCAweDcwNzgsIDB4MDBlZSwgMHg5MDA1LCAweDE5ZjgsIDB4MDQwMCwgMHgwMDI2LCAweDIwMTEsCi0JMHg3M2U0LCAweDA4MGMsIDB4ODcwOSwgMHgyMDExLCAweDczZDcsIDB4MDgwYywgMHg4N2UzLCAweDAwMmUsCi0JMHgyMDY5LCAweDAxNDAsIDB4NjBlMywgMHgwMDAwLCAweDcwYjQsIDB4OTAwNSwgMHgxMTE4LCAweDY4ODcsCi0JMHgwMDAxLCAweDAwMDgsIDB4Njg4NiwgMHgyMDAxLCAweDE5NmUsIDB4MjAwNCwgMHgwODBjLCAweDI5MDgsCi0JMHg2MGUyLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxYjQsIDB4MjEwMiwgMHgwMGVlLCAweDAwZGUsCi0JMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMGM2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsCi0JMHgxODAwLCAweDA4MGMsIDB4ZDU1YSwgMHgxOTA0LCAweDc4M2MsIDB4NzEzMCwgMHhkMTg0LCAweDExNzAsCi0JMHgwODBjLCAweDMzYTAsIDB4MDEzOCwgMHhjMThkLCAweDcxMzIsIDB4MjAxMSwgMHgxODQ4LCAweDIyMTQsCi0JMHhkMmFjLCAweDExMjAsIDB4NzAzMCwgMHhkMDhjLCAweDA5MDQsIDB4NzgzYywgMHgyMDExLCAweDE4NDgsCi0JMHgyMjBjLCAweGQxYTQsIDB4MDUzOCwgMHgwMDE2LCAweDIwMTksIDB4MDAwZSwgMHgwODBjLCAweGU5MTUsCi0JMHgwMTU2LCAweDAwYjYsIDB4MjBhOSwgMHgwMDdmLCAweDkwMGUsIDB4OTE4NiwgMHgwMDdlLCAweDAxYTAsCi0JMHg5MTg2LCAweDAwODAsIDB4MDE4OCwgMHgwODBjLCAweDY3MWQsIDB4MTE3MCwgMHgyMTIwLCAweDkwMDYsCi0JMHgwMDE2LCAweDIwMDksIDB4MDAwZSwgMHgwODBjLCAweGU5YTUsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsCi0JMHgwMTAwLCAweDA4MGMsIDB4ODkxYywgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHg3ODA1LCAweDAwYmUsCi0JMHgwMTVlLCAweDAwMWUsIDB4ZDFhYywgMHgxMTQ4LCAweDAwMTYsIDB4MjAwOSwgMHgwMDAyLCAweDIwMTksCi0JMHgwMDA0LCAweDA4MGMsIDB4MzIxMSwgMHgwMDFlLCAweDAwNzgsIDB4MDE1NiwgMHgwMGI2LCAweDIwYTksCi0JMHgwMDdmLCAweDkwMGUsIDB4MDgwYywgMHg2NzFkLCAweDExMTAsIDB4MDgwYywgMHg2MTQxLCAweDgxMDgsCi0JMHgxZjA0LCAweDc4MzIsIDB4MDBiZSwgMHgwMTVlLCAweDA4MGMsIDB4MWIyZiwgMHgwODBjLCAweGIwNzIsCi0JMHg2MGUzLCAweDAwMDAsIDB4MDgwYywgMHg2MTI3LCAweDA4MGMsIDB4NzQ5NSwgMHgwMGVlLCAweDAwY2UsCi0JMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgyMDAxLCAweDE5N2UsCi0JMHgyMDAzLCAweDAwMDEsIDB4MDAwNSwgMHgyMDAxLCAweDE5N2UsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsCi0JMHgyMDAxLCAweDE5N2QsIDB4MjAwMywgMHhhYWFhLCAweDAwMDUsIDB4MjAwMSwgMHgxOTdkLCAweDIwMDMsCi0JMHgwMDAwLCAweDAwMDUsIDB4MjA3MSwgMHgxOGZhLCAweDcwMDMsIDB4MDAwMCwgMHg3MDA3LCAweDAwMDAsCi0JMHgwODBjLCAweDEwMjcsIDB4MDkwYywgMHgwZGM1LCAweGE4YWIsIDB4ZGNiMCwgMHgyOTAwLCAweDcwNGUsCi0JMHgwODBjLCAweDEwMjcsIDB4MDkwYywgMHgwZGM1LCAweGE4YWIsIDB4ZGNiMCwgMHgyOTAwLCAweDcwNTIsCi0JMHhhODY3LCAweDAwMDAsIDB4YTg2YiwgMHgwMDAxLCAweGE4OWYsIDB4MDAwMCwgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweDAwNDAsIDB4Njg0OCwgMHg5MDA1LCAweDExMTgsIDB4OTA4NSwgMHgwMDAxLCAweDA0YjAsCi0JMHg2ODQwLCAweDkwMDUsIDB4MDE1MCwgMHgwNGExLCAweDZhNTAsIDB4OTIwMCwgMHg3MDAyLCAweDY4NTQsCi0JMHg5MTAxLCAweDcwMDYsIDB4OTAwNiwgMHg3MDEyLCAweDcwMTYsIDB4Njg1MCwgMHg3MDAyLCAweDY4NTQsCi0JMHg3MDA2LCAweDY4NTgsIDB4NzAwYSwgMHg2ODVjLCAweDcwMGUsIDB4Njg0MCwgMHg5MDA1LCAweDExMTAsCi0JMHg3MDEyLCAweDcwMTYsIDB4Njg0OCwgMHg3MDFhLCAweDcwMWMsIDB4OTA4NSwgMHgwMDQwLCAweDcwMWUsCi0JMHgyMDAxLCAweDAwMTksIDB4NzAzNiwgMHg3MDJiLCAweDAwMDEsIDB4MjAwMSwgMHgwMDA0LCAweDIwMGMsCi0JMHg5MThjLCAweGZmZjcsIDB4OTE4ZCwgMHg4MDAwLCAweDIxMDIsIDB4MDBkNiwgMHgyMDY5LCAweDE4ZmEsCi0JMHg2ODA3LCAweDAwMDEsIDB4MDBkZSwgMHgwODBjLCAweDdlNDAsIDB4OTAwNiwgMHgwMGVlLCAweDAwMDUsCi0JMHg5MDBlLCAweDAxNTYsIDB4MjBhOSwgMHgwMDA2LCAweDgwMDMsIDB4MjAxMSwgMHgwMTAwLCAweDIyMTQsCi0JMHg5Mjk2LCAweDAwMDgsIDB4MTExMCwgMHg4MThkLCAweDAwMTAsIDB4ODFmNSwgMHgzZTA4LCAweDFmMDQsCi0JMHg3OGM0LCAweDAxNWUsIDB4MDAwNSwgMHgyMDc5LCAweDAwNDAsIDB4MjA3MSwgMHgxOGZhLCAweDcwMDQsCi0JMHgwMDAyLCAweDc4ZTMsIDB4NzhlNCwgMHg3OTFjLCAweDc5NzcsIDB4N2E4NywgMHg3OGUxLCAweDc4ZTEsCi0JMHg3YWIxLCAweDA4MGMsIDB4MGRjNSwgMHgwMDA1LCAweDIwNzksIDB4MDA0MCwgMHg3ODJjLCAweDkwOGMsCi0JMHgwNzgwLCAweDE5MGMsIDB4N2YyMiwgMHhkMGE0LCAweDAxZjgsIDB4NzgyNCwgMHgyMDQ4LCAweDkwMDYsCi0JMHhhODAyLCAweGE4MDYsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4YSwgMHgwMDQwLCAweDA2MTAsCi0JMHgwMGMwLCAweDIwMDEsIDB4MTgwMCwgMHgyMDBjLCAweDkxODYsIDB4MDAwMywgMHgxMTY4LCAweDcwMDQsCi0JMHgwMDAyLCAweDc5MGMsIDB4NzhlNiwgMHg3OTBjLCAweDc5MGEsIDB4NzkwYywgMHg3OTBjLCAweDc5MGMsCi0JMHg3OTBjLCAweDc5MGMsIDB4MDgwYywgMHg3OTc3LCAweDc4MmMsIDB4ZDA5YywgMHgwOTBjLCAweDdlNDAsCi0JMHgwMDA1LCAweDkwODIsIDB4MDA1YSwgMHgxMjE4LCAweDIxMDAsIDB4MDAzYiwgMHgwYzEwLCAweDA4MGMsCi0JMHg3OWFkLCAweDBjOTAsIDB4MDBlMywgMHgwOGU4LCAweDAwMDUsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsCi0JMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsIDB4NzljZiwgMHg3OWFkLCAweDc5YWQsCi0JMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsCi0JMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsCi0JMHg3OWFkLCAweDc5YjksIDB4NzlhZCwgMHg3YmE3LCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5Y2YsCi0JMHg3OWFkLCAweDc5YjksIDB4N2JlOCwgMHg3YzI5LCAweDdjNzAsIDB4N2M4NCwgMHg3OWFkLCAweDc5YWQsCi0JMHg3OWNmLCAweDc5YjksIDB4NzllMywgMHg3OWFkLCAweDdhNWIsIDB4N2QyZiwgMHg3ZDRhLCAweDc5YWQsCi0JMHg3OWNmLCAweDc5YWQsIDB4NzllMywgMHg3OWFkLCAweDc5YWQsIDB4N2E1MSwgMHg3ZDRhLCAweDc5YWQsCi0JMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsCi0JMHg3OWY3LCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsCi0JMHg3OWFkLCAweDc5YWQsIDB4N2VjNiwgMHg3OWFkLCAweDdlNzAsIDB4NzlhZCwgMHg3ZTcwLCAweDc5YWQsCi0JMHg3YTBjLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDIwNzksCi0JMHgwMDQwLCAweDcwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDExOTgsIDB4NzgyYywgMHgwODBjLCAweDdlNjksCi0JMHhkMGE0LCAweDAxNzAsIDB4NzgyNCwgMHgyMDQ4LCAweDkwMDYsIDB4YTgwMiwgMHhhODA2LCAweGE4NjQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4YSwgMHgwMDFhLCAweDEyMTAsIDB4MDAyYiwgMHgwYzUwLCAweDAwZTksCi0JMHgwODBjLCAweDdlNDAsIDB4MDAwNSwgMHg3OWFkLCAweDc5YjksIDB4N2I5MywgMHg3OWFkLCAweDc5YjksCi0JMHg3OWFkLCAweDc5YjksIDB4NzliOSwgMHg3OWFkLCAweDc5YjksIDB4N2I5MywgMHg3OWI5LCAweDc5YjksCi0JMHg3OWI5LCAweDc5YjksIDB4NzliOSwgMHg3OWFkLCAweDc5YjksIDB4N2I5MywgMHg3OWFkLCAweDc5YWQsCi0JMHg3OWI5LCAweDc5YWQsIDB4NzlhZCwgMHg3OWFkLCAweDc5YjksIDB4MDBlNiwgMHgyMDcxLCAweDE4ZmEsCi0JMHgyMDA5LCAweDA0MDAsIDB4MDA3MSwgMHgwMGVlLCAweDAwMDUsIDB4MjAwOSwgMHgxMDAwLCAweDAwNDksCi0JMHgwMDA1LCAweDIwMDksIDB4MjAwMCwgMHgwMDI5LCAweDAwMDUsIDB4MjAwOSwgMHgwODAwLCAweDAwMDksCi0JMHgwMDA1LCAweDcwMDcsIDB4MDAwMSwgMHhhODY4LCAweDkwODQsIDB4MDBmZiwgMHg5MTA1LCAweGE4NmEsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZkZDEsIDB4MDEyZSwgMHgwMDA1LCAweGE4NjQsCi0JMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHgwZDA4LCAweDgwMDEsIDB4MTEyMCwgMHg3MDA3LCAweDAwMDEsCi0JMHgwODA0LCAweDdiMzAsIDB4NzAwNywgMHgwMDAzLCAweDcwMTIsIDB4MjkwMCwgMHg3MDE2LCAweDcwMWEsCi0JMHg3MDRiLCAweDdiMzAsIDB4MDAwNSwgMHhhODY0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDA5NjgsCi0JMHg4MDAxLCAweDExMjAsIDB4NzAwNywgMHgwMDAxLCAweDA4MDQsIDB4N2I0YiwgMHg3MDA3LCAweDAwMDMsCi0JMHg3MDEyLCAweDI5MDAsIDB4NzAxNiwgMHg3MDFhLCAweDcwNGIsIDB4N2I0YiwgMHgwMDA1LCAweGE4NjQsCi0JMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHgwOTA0LCAweDc5YjUsIDB4ODAwMSwgMHgxMTIwLCAweDcwMDcsCi0JMHgwMDAxLCAweDA4MDQsIDB4N2I2NywgMHg3MDA3LCAweDAwMDMsIDB4NzAxMiwgMHgyOTAwLCAweDcwMTYsCi0JMHg3MDFhLCAweDcwNGIsIDB4N2I2NywgMHgwMDA1LCAweGE4NjQsIDB4ODAwNywgMHg5MDg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwMDEsIDB4MTkwNCwgMHg3OWI1LCAweDcwMDcsIDB4MDAwMSwgMHgyMDA5LCAweDE4MzQsCi0JMHgyMTBjLCAweDgxZmYsIDB4MTFhOCwgMHhhODY4LCAweDkwODQsIDB4MDBmZiwgMHhhODZhLCAweGE4ODMsCi0JMHgwMDAwLCAweDA4MGMsIDB4NjNiZSwgMHgxMTA4LCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHhhODY3LCAweDAxMzksIDB4YTg3YSwgMHhhOTgyLCAweDA4MGMsIDB4NmRkMSwgMHgwMTJlLCAweDBjYTAsCi0JMHhhOTk0LCAweDkxODYsIDB4MDA3MSwgMHgwZDM4LCAweDkxODYsIDB4MDA2NCwgMHgwZDIwLCAweDkxODYsCi0JMHgwMDdjLCAweDBkMDgsIDB4OTE4NiwgMHgwMDI4LCAweDA5ZjAsIDB4OTE4NiwgMHgwMDM4LCAweDA5ZDgsCi0JMHg5MTg2LCAweDAwNzgsIDB4MDljMCwgMHg5MTg2LCAweDAwNWYsIDB4MDlhOCwgMHg5MTg2LCAweDAwNTYsCi0JMHgwOTkwLCAweGE4OTcsIDB4NDAwNSwgMHhhODliLCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLCAweDkwMGUsCi0JMHgwOGEwLCAweGE4N2MsIDB4OTA4NCwgMHgwMGMwLCAweDkwODYsIDB4MDBjMCwgMHgxMTIwLCAweDcwMDcsCi0JMHgwMDAxLCAweDA4MDQsIDB4N2Q2MSwgMHgyOTAwLCAweDcwMTYsIDB4NzAxYSwgMHgyMGE5LCAweDAwMDQsCi0JMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMzAsIDB4MjA5OCwgMHg3MDUwLCAweDIwNDAsCi0JMHhhMDYwLCAweDIwZTgsIDB4YTA1YywgMHg5MDgwLCAweDAwMjMsIDB4MjBhMCwgMHg0MDAzLCAweGE4ODgsCi0JMHg3MDEyLCAweDkwODIsIDB4MDQwMSwgMHgxYTA0LCAweDc5YmQsIDB4YWFiNCwgMHg5MjhhLCAweDAwMDIsCi0JMHgxYTA0LCAweDc5YmQsIDB4ODJmZiwgMHgxMTM4LCAweGE4YjgsIDB4YTliYywgMHg5MTA1LCAweDAxMTgsCi0JMHgyMDAxLCAweDdhZWUsIDB4MDAxOCwgMHg5MjgwLCAweDdhZTQsIDB4MjAwNSwgMHg3MDU2LCAweDcwMTAsCi0JMHg5MDE1LCAweDA5MDQsIDB4N2FjZiwgMHgwODBjLCAweDEwMjcsIDB4MTExOCwgMHg3MDA3LCAweDAwMDQsCi0JMHgwMDA1LCAweDI5MDAsIDB4NzAyMiwgMHg3MDU0LCAweDIwNjAsIDB4ZTAwMCwgMHhhODY2LCAweDcwNTAsCi0JMHgyMDQwLCAweGE5NWMsIDB4ZTAwNCwgMHg5MTAwLCAweGEwNzYsIDB4YTg2MCwgMHhhMDcyLCAweGUwMDgsCi0JMHg5MjBhLCAweDEyMTAsIDB4OTAwZSwgMHgyMjAwLCAweDcxMTIsIDB4ZTIwYywgMHg4MDAzLCAweDgwMGIsCi0JMHg5Mjk2LCAweDAwMDQsIDB4MDEwOCwgMHg5MTA4LCAweGExN2EsIDB4ODEwYiwgMHhhMTdlLCAweDA4MGMsCi0JMHgxMGY4LCAweGEwNmMsIDB4OTA4ZSwgMHgwMTAwLCAweDAxNzAsIDB4OTA4NiwgMHgwMjAwLCAweDAxMTgsCi0JMHg3MDA3LCAweDAwMDcsIDB4MDAwNSwgMHg3MDIwLCAweDIwNDgsIDB4MDgwYywgMHgxMDQwLCAweDcwMTQsCi0JMHgyMDQ4LCAweDA4MDQsIDB4NzliZCwgMHg3MDIwLCAweDIwNDgsIDB4NzAxOCwgMHhhODAyLCAweGE4MDcsCi0JMHgwMDAwLCAweDI5MDgsIDB4MjA0OCwgMHhhOTA2LCAweDcxMWEsIDB4MDgwNCwgMHg3YTg3LCAweDcwMTQsCi0JMHgyMDQ4LCAweDcwMDcsIDB4MDAwMSwgMHhhOGI0LCAweDkwMDUsIDB4MTEyOCwgMHhhOGI4LCAweGE5YmMsCi0JMHg5MTA1LCAweDAxMDgsIDB4MDBiOSwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMWUsCi0JMHgwOTA0LCAweDdkNjEsIDB4MDgwNCwgMHg3YjMwLCAweDdhZTYsIDB4N2FlYSwgMHgwMDAyLCAweDAwMWQsCi0JMHgwMDA3LCAweDAwMDQsIDB4MDAwYSwgMHgwMDFiLCAweDAwMDUsIDB4MDAwNiwgMHgwMDBhLCAweDAwMWQsCi0JMHgwMDA1LCAweDAwMDQsIDB4MDA3NiwgMHgwMDY2LCAweGFmYjgsIDB4YWViYywgMHhhODA0LCAweDIwNTAsCi0JMHhiMGMwLCAweGIwZTIsIDB4YjBiYywgMHhiMGRlLCAweGIwYjgsIDB4YjBkMiwgMHhiMGI0LCAweGIwY2UsCi0JMHhiNmRhLCAweGI3ZDYsIDB4YjBiMCwgMHhiMGNhLCAweGIwYWMsIDB4YjBjNiwgMHhiMGE4LCAweGIwYmEsCi0JMHhiMGE0LCAweGIwYjYsIDB4YjZjMiwgMHhiN2JlLCAweGIwYTAsIDB4YjBiMiwgMHhiMDljLCAweGIwYWUsCi0JMHhiMDk4LCAweGIwYTIsIDB4YjA5NCwgMHhiMDllLCAweGI2YWEsIDB4YjdhNiwgMHhiMDkwLCAweGIwOWEsCi0JMHhiMDhjLCAweGIwOTYsIDB4YjA4OCwgMHhiMDhhLCAweGIwODQsIDB4YjA4NiwgMHhiNjkyLCAweGI3OGUsCi0JMHhiMDgwLCAweGIwODIsIDB4YjA3YywgMHhiMDdlLCAweGIwNzgsIDB4YjA3MiwgMHhiMDc0LCAweGIwNmUsCi0JMHhiNjdhLCAweGI3NzYsIDB4YjAwNCwgMHg5MDU1LCAweDE5NTgsIDB4MDA2ZSwgMHgwMDdlLCAweDAwMDUsCi0JMHgyMDA5LCAweDE4MzQsIDB4MjEwYywgMHg4MWZmLCAweDExNzgsIDB4MDgwYywgMHg2MWJiLCAweDExMDgsCi0JMHgwMDA1LCAweDA4MGMsIDB4NzAzZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGQxNGMsCi0JMHgwODBjLCAweDZkZDEsIDB4MDEyZSwgMHgwY2EwLCAweDA4MGMsIDB4ZDU1YSwgMHgxZDcwLCAweDIwMDEsCi0JMHgwMDI4LCAweDkwMGUsIDB4MGM3MCwgMHgyMDA5LCAweDE4MzQsIDB4MjEwYywgMHg4MWZmLCAweDExODgsCi0JMHhhODg4LCAweDkwMDUsIDB4MDE4OCwgMHhhODgzLCAweDAwMDAsIDB4MDgwYywgMHg2MjRiLCAweDExMDgsCi0JMHgwMDA1LCAweGE4N2EsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2ZGQxLCAweDAxMmUsCi0JMHgwY2I4LCAweDIwMDEsIDB4MDAyOCwgMHgwY2E4LCAweDIwMDEsIDB4MDAwMCwgMHgwYzkwLCAweDA0MTksCi0JMHgxMWQ4LCAweGE4ODgsIDB4OTAwNSwgMHgwMWUwLCAweGE4ODMsIDB4MDAwMCwgMHhhODdjLCAweGQwZjQsCi0JMHgwMTIwLCAweDA4MGMsIDB4NjMyMCwgMHgxMTM4LCAweDAwMDUsIDB4OTAwNiwgMHhhODdhLCAweDA4MGMsCi0JMHg2Mjk4LCAweDExMDgsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhhODdhLCAweGE5ODIsCi0JMHgwODBjLCAweDZkZDEsIDB4MDEyZSwgMHgwY2IwLCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLCAweDBjOTgsCi0JMHgyMDAxLCAweDAwMDAsIDB4MGM4MCwgMHgwMGM2LCAweDIwNjEsIDB4MTgwMCwgMHg2MGQwLCAweDkwMDUsCi0JMHgwMTAwLCAweDAwY2UsIDB4MDAwNSwgMHg3MDE4LCAweGE4MDIsIDB4MjkwOCwgMHgyMDQ4LCAweGE5MDYsCi0JMHg3MTFhLCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweDAxMTgsIDB4NzAwNywgMHgwMDAzLCAweDAwMzAsCi0JMHg3MDE0LCAweDIwNDgsIDB4NzAwNywgMHgwMDAxLCAweDcwNDgsIDB4MDgwZiwgMHgwMDA1LCAweDAwYjYsCi0JMHg3MDA3LCAweDAwMDEsIDB4YTk3NCwgMHhhODc4LCAweDkwODQsIDB4MDBmZiwgMHg5MDk2LCAweDAwMDQsCi0JMHgwNTQwLCAweDIwYTksIDB4MDAwMSwgMHg5MDk2LCAweDAwMDEsIDB4MDE5MCwgMHg5MDBlLCAweDIwYTksCi0JMHgwODAwLCAweDkwOTYsIDB4MDAwMiwgMHgwMTYwLCAweDkwMDUsIDB4MTFkOCwgMHhhOTc0LCAweDA4MGMsCi0JMHg2NzFkLCAweDExYjgsIDB4MDA2NiwgMHhhZTgwLCAweDA4MGMsIDB4NjgyZCwgMHgwMDZlLCAweDAwODgsCi0JMHgwMDQ2LCAweDIwMTEsIDB4MTgwYywgMHgyMjI0LCAweGM0ODQsIDB4MjQxMiwgMHgwMDRlLCAweDAwYzYsCi0JMHgwODBjLCAweDY3MWQsIDB4MTExMCwgMHgwODBjLCAweDY5MmQsIDB4ODEwOCwgMHgxZjA0LCAweDdiZDAsCi0JMHgwMGNlLCAweGE4N2MsIDB4ZDA4NCwgMHgxMTIwLCAweDA4MGMsIDB4MTA0MCwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZkZDEsIDB4MDEyZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwYywgMHg2YThlLCAweDA1ODAsCi0JMHgyMDYxLCAweDFhNzUsIDB4NjEwMCwgMHhkMTg0LCAweDAxNzgsIDB4YTg4OCwgMHg5MDg0LCAweDAwZmYsCi0JMHgxNTUwLCAweDYwMDAsIDB4ZDA4NCwgMHgwNTIwLCAweDYwMDQsIDB4OTAwNSwgMHgxNTM4LCAweDYwMDMsCi0JMHgwMDAwLCAweDYwMGIsIDB4MDAwMCwgMHgwMGM4LCAweDIwMTEsIDB4MDAwMSwgMHhhODkwLCAweDkwMDUsCi0JMHgxMTEwLCAweDIwMDEsIDB4MDAxZSwgMHg4MDAwLCAweDYwMTYsIDB4YTg4OCwgMHg5MDg0LCAweDAwZmYsCi0JMHgwMTc4LCAweDYwMDYsIDB4YTg4OCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHgwMTQ4LCAweDYwMGEsCi0JMHhhODg4LCAweDgwMDAsIDB4MTEwOCwgMHhjMjhkLCAweDYyMDIsIDB4MDEyZSwgMHgwODA0LCAweDdlMmEsCi0JMHgwMTJlLCAweDA4MDQsIDB4N2UyNCwgMHgwMTJlLCAweDA4MDQsIDB4N2UxZSwgMHgwMTJlLCAweDA4MDQsCi0JMHg3ZTIxLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHgwODBjLCAweDZhOGUsCi0JMHgwNWUwLCAweDIwNjEsIDB4MWE3NSwgMHg2MDAwLCAweGQwODQsIDB4MDViOCwgMHg2MjA0LCAweDYzMDgsCi0JMHhkMDhjLCAweDE1MzAsIDB4YWM3OCwgMHg5NDg0LCAweDAwMDMsIDB4MDE3MCwgMHhhOTg4LCAweDkxOGMsCi0JMHgwMGZmLCAweDgwMDEsIDB4MTEyMCwgMHgyMTAwLCAweDkyMTAsIDB4MDYyMCwgMHgwMDI4LCAweDgwMDEsCi0JMHgxNTA4LCAweDIxMDAsIDB4OTIxMiwgMHgwMmYwLCAweDk0ODQsIDB4MDAwYywgMHgwMTg4LCAweGE5ODgsCi0JMHg4MTBmLCAweDkxOGMsIDB4MDBmZiwgMHg5MDgyLCAweDAwMDQsIDB4MTEyMCwgMHgyMTAwLCAweDkzMTgsCi0JMHgwMjg4LCAweDAwMzAsIDB4OTA4MiwgMHgwMDA0LCAweDExNjgsIDB4MjEwMCwgMHg5MzFhLCAweDAyNTAsCi0JMHhhODkwLCAweDkwMDUsIDB4MDExMCwgMHg4MDAwLCAweDYwMTYsIDB4NjIwNiwgMHg2MzBhLCAweDAxMmUsCi0JMHgwODA0LCAweDdlMmEsIDB4MDEyZSwgMHgwODA0LCAweDdlMjcsIDB4MDEyZSwgMHgwODA0LCAweDdlMjQsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4MjA2MSwgMHgxYTc1LCAweDYzMDAsCi0JMHhkMzhjLCAweDExMjAsIDB4NjMwOCwgMHg4MzE4LCAweDAyMjAsIDB4NjMwYSwgMHgwMTJlLCAweDA4MDQsCi0JMHg3ZTM4LCAweDAxMmUsIDB4MDgwNCwgMHg3ZTI3LCAweDAwYjYsIDB4MDEyNiwgMHgwMGM2LCAweDIwOTEsCi0JMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHhhODdjLCAweGQwYWMsIDB4MDE0OCwgMHgwMGM2LCAweDIwNjEsCi0JMHgxYTc1LCAweDYwMDAsIDB4OTA4NCwgMHhmY2ZmLCAweDYwMDIsIDB4MDBjZSwgMHgwNDQwLCAweGE4ODgsCi0JMHg5MDA1LCAweDA1ZDgsIDB4YTg4YywgMHg5MDY1LCAweDA1OTgsIDB4MjAwMSwgMHgxODM0LCAweDIwMDQsCi0JMHg5MDA1LCAweDAxMTgsIDB4MDgwYywgMHhiMTM0LCAweDAwNjgsIDB4NjAxNywgMHhmNDAwLCAweDYwNWIsCi0JMHgwMDAwLCAweGE5N2MsIDB4ZDFhNCwgMHgwMTEwLCAweGE5ODAsIDB4NjE1YSwgMHgyMDA5LCAweDAwNDEsCi0JMHgwODBjLCAweGIxODAsIDB4YTk4OCwgMHg5MThjLCAweGZmMDAsIDB4OTE4NiwgMHgyMDAwLCAweDExMzgsCi0JMHgwMDI2LCAweDkwMGUsIDB4MjAxMSwgMHhmZGZmLCAweDA4MGMsIDB4ODkxYywgMHgwMDJlLCAweGE4N2MsCi0JMHhkMGM0LCAweDAxNDgsIDB4MjA2MSwgMHgxYTc1LCAweDYwMDAsIDB4ZDA4YywgMHgxMTIwLCAweDYwMDgsCi0JMHg4MDAwLCAweDAyMDgsIDB4NjAwYSwgMHgwMGNlLCAweDAxMmUsIDB4MDBiZSwgMHgwODA0LCAweDdlMmEsCi0JMHgwMGNlLCAweDAxMmUsIDB4MDBiZSwgMHgwODA0LCAweDdlMjQsIDB4YTk4NCwgMHg5MTg2LCAweDAwMmUsCi0JMHgwZDMwLCAweDkxODYsIDB4MDAyZCwgMHgwZDE4LCAweDkxODYsIDB4MDA0NSwgMHgwNTEwLCAweDkxODYsCi0JMHgwMDJhLCAweDExMzAsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsIDB4YzE5NCwgMHgyMTAyLCAweDA4YjgsCi0JMHg5MTg2LCAweDAwMjAsIDB4MDE1OCwgMHg5MTg2LCAweDAwMjksIDB4MWQxMCwgMHhhOTc0LCAweDA4MGMsCi0JMHg2NzFkLCAweDE5NjgsIDB4YjgwMCwgMHhjMGU0LCAweGI4MDIsIDB4MDg0OCwgMHhhODhjLCAweDkwNjUsCi0JMHgwOWI4LCAweDYwMDcsIDB4MDAyNCwgMHgyMDAxLCAweDE5ODcsIDB4MjAwNCwgMHg2MDFhLCAweDA4MDQsCi0JMHg3Y2JmLCAweGE4OGMsIDB4OTA2NSwgMHgwOTYwLCAweDAwZTYsIDB4YTg5MCwgMHg5MDc1LCAweDIwMDEsCi0JMHgxODM0LCAweDIwMDQsIDB4OTAwNSwgMHgwMTUwLCAweDA4MGMsIDB4YjEzNCwgMHg4ZWZmLCAweDAxMTgsCi0JMHgyZTYwLCAweDA4MGMsIDB4YjEzNCwgMHgwMGVlLCAweDA4MDQsIDB4N2NiZiwgMHg2MDI0LCAweGMwZGMsCi0JMHhjMGQ1LCAweDYwMjYsIDB4MmU2MCwgMHg2MDA3LCAweDAwM2EsIDB4YThhMCwgMHg5MDA1LCAweDAxMzAsCi0JMHg2MDA3LCAweDAwM2IsIDB4YThhNCwgMHg2MDJlLCAweGE4YTgsIDB4NjAxNiwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDkzM2IsIDB4MDgwYywgMHg5OGVkLCAweDAwZWUsIDB4MDgwNCwgMHg3Y2JmLCAweDIwNjEsCi0JMHgxYTc1LCAweDYwMDAsIDB4ZDA4NCwgMHgwMTkwLCAweGQwOGMsIDB4MTkwNCwgMHg3ZTM4LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4NjIwNCwgMHg4MjEwLCAweDAyMjAsIDB4NjIwNiwgMHgwMTJlLCAweDA4MDQsCi0JMHg3ZTM4LCAweDAxMmUsIDB4YTg4MywgMHgwMDE2LCAweDA4MDQsIDB4N2UzMSwgMHhhODgzLCAweDAwMDcsCi0JMHgwODA0LCAweDdlMzEsIDB4YTg2NCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHgwMTMwLCAweDgwMDEsCi0JMHgxMTM4LCAweDcwMDcsIDB4MDAwMSwgMHgwMDY5LCAweDAwMDUsIDB4MDgwYywgMHg3OWI1LCAweDAwNDAsCi0JMHg3MDA3LCAweDAwMDMsIDB4NzAxMiwgMHgyOTAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDdkNjEsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg5MDNlLCAweDIwNjEsCi0JMHgxODAwLCAweDYxZDAsIDB4ODFmZiwgMHgxOTA0LCAweDdkZTMsIDB4NjEzMCwgMHhkMTk0LCAweDE5MDQsCi0JMHg3ZTBkLCAweGE4NzgsIDB4MjA3MCwgMHg5ZTgyLCAweDFjZDAsIDB4MGEwNCwgMHg3ZGQ3LCAweDYwNjgsCi0JMHg5ZTAyLCAweDFhMDQsIDB4N2RkNywgMHg3MTIwLCAweDkxODYsIDB4MDAwNiwgMHgxOTA0LCAweDdkYzksCi0JMHg3MDEwLCAweDkwNWQsIDB4MDkwNCwgMHg3ZGUzLCAweGI4MDAsIDB4ZDBlNCwgMHgxOTA0LCAweDdlMDcsCi0JMHgyMDYxLCAweDFhNzUsIDB4NjEwMCwgMHg5MTg0LCAweDAzMDEsIDB4OTA4NiwgMHgwMDAxLCAweDE1YTAsCi0JMHg3MDI0LCAweGQwZGMsIDB4MTkwNCwgMHg3ZTEwLCAweGE4ODMsIDB4MDAwMCwgMHhhODAzLCAweDAwMDAsCi0JMHgyOTA4LCAweDcwMTQsIDB4OTAwNSwgMHgxMTk4LCAweDcxMTYsIDB4YTg3YywgMHhkMGY0LCAweDE5MDQsCi0JMHg3ZTEzLCAweDA4MGMsIDB4NTdkMywgMHhkMDljLCAweDExMTgsIDB4YTg3YywgMHhjMGNjLCAweGE4N2UsCi0JMHgyZTYwLCAweDA4MGMsIDB4ODgzYywgMHgwMTJlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDIwNDgsCi0JMHhhODAwLCAweDkwMDUsIDB4MWRlMCwgMHhhOTAyLCAweDIxNDgsIDB4YTg3YywgMHhkMGY0LCAweDE5MDQsCi0JMHg3ZTEzLCAweDAxMmUsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsIDB4MDEyZSwgMHgwMGVlLCAweGE4ODMsCi0JMHgwMDA2LCAweDAwYmUsIDB4MDgwNCwgMHg3ZTMxLCAweGQxODQsIDB4MGRiOCwgMHhkMWM0LCAweDExOTAsCi0JMHgwMGEwLCAweGE5NzQsIDB4MDgwYywgMHg2NzFkLCAweDE1ZDAsIDB4YjgwMCwgMHhkMGU0LCAweDE1YjgsCi0JMHg3MTIwLCAweDkxODYsIDB4MDAwNywgMHgxMTE4LCAweGE4ODMsIDB4MDAwMiwgMHgwNDkwLCAweGE4ODMsCi0JMHgwMDA4LCAweDA0NzgsIDB4YTg4MywgMHgwMDBlLCAweDA0NjAsIDB4YTg4MywgMHgwMDE3LCAweDA0NDgsCi0JMHhhODgzLCAweDAwMzUsIDB4MDQzMCwgMHgwODBjLCAweDU3ZDcsIDB4ZDBmYywgMHgwMWU4LCAweGE4NzgsCi0JMHgyMDcwLCAweDllODIsIDB4MWNkMCwgMHgwMmMwLCAweDYwNjgsIDB4OWUwMiwgMHgxMmE4LCAweDcxMjAsCi0JMHg5MTg2LCAweDAwMDYsIDB4MTE4OCwgMHg3MDEwLCAweDkwNWQsIDB4MDE3MCwgMHhiODAwLCAweGQwYmMsCi0JMHgwMTU4LCAweDIwMzksIDB4MDAwMSwgMHg3MDAwLCAweDkwODYsIDB4MDAwNywgMHgxOTA0LCAweDdkNmQsCi0JMHg3MDAzLCAweDAwMDIsIDB4MDgwNCwgMHg3ZDZkLCAweGE4ODMsIDB4MDAyOCwgMHgwMDEwLCAweGE4ODMsCi0JMHgwMDI5LCAweDAxMmUsIDB4MDBlZSwgMHgwMGJlLCAweDA0MjAsIDB4YTg4MywgMHgwMDJhLCAweDBjYzgsCi0JMHhhODgzLCAweDAwNDUsIDB4MGNiMCwgMHgyZTYwLCAweDIwMTksIDB4MDAwMiwgMHg2MDFiLCAweDAwMTQsCi0JMHgwODBjLCAweGU0YzgsIDB4MDEyZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDA5LCAweDAwM2UsCi0JMHgwMDU4LCAweDIwMDksIDB4MDAwNCwgMHgwMDQwLCAweDIwMDksIDB4MDAwNiwgMHgwMDI4LCAweDIwMDksCi0JMHgwMDE2LCAweDAwMTAsIDB4MjAwOSwgMHgwMDAxLCAweGE4ODQsIDB4OTA4NCwgMHhmZjAwLCAweDkxMDUsCi0JMHhhODg2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmRkMSwgMHgwMTJlLCAweDAwMDUsCi0JMHgwODBjLCAweDEwNDAsIDB4MDAwNSwgMHgwMGQ2LCAweDA4MGMsIDB4ODgzMywgMHgwMGRlLCAweDAwMDUsCi0JMHgwMGQ2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgwMDQwLCAweDcwMmMsCi0JMHhkMDg0LCAweDAxZDgsIDB4OTA4YywgMHgwNzgwLCAweDE5MGMsIDB4N2YyMiwgMHhkMDljLCAweDExYTgsCi0JMHgyMDcxLCAweDE4MDAsIDB4NzBjMCwgMHg5MGVhLCAweDAwMjAsIDB4MDI3OCwgMHg4MDAxLCAweDcwYzIsCi0JMHg3MDJjLCAweDIwNDgsIDB4YTgwMCwgMHg3MDJlLCAweDkwMDYsIDB4YTgwMiwgMHhhODA2LCAweDIwNzEsCi0JMHgwMDQwLCAweDI5MDAsIDB4NzAyMiwgMHg3MDJjLCAweDBjMjgsIDB4MDEyZSwgMHgwMGVlLCAweDAwZGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4OTA4NCwgMHgwNzgwLCAweDE5MGMsIDB4N2YyMiwgMHgwMDBlLCAweDAwMDUsCi0JMHhhODk4LCAweDkwODQsIDB4MDAwMywgMHgwNWE4LCAweDA4MGMsIDB4YjBhYiwgMHgwNWQ4LCAweDI5MDAsCi0JMHg2MDE2LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAzNSwgMHgxMTM4LCAweDYwMDgsCi0JMHhjMGZkLCAweDYwMGEsIDB4MjAwMSwgMHgxOTZjLCAweDIwMDQsIDB4MDA5OCwgMHhhOGEwLCAweDkwODQsCi0JMHgwMGZmLCAweGE5OWMsIDB4OTE4YywgMHhmZjAwLCAweDkxMDUsIDB4YTk5YywgMHg5MThjLCAweDAwZmYsCi0JMHgwODBjLCAweDI4OTQsIDB4MTU0MCwgMHgwMGI2LCAweDA4MGMsIDB4NjcxZCwgMHgyYjAwLCAweDAwYmUsCi0JMHgxNTEwLCAweDYwMTIsIDB4NjAyMywgMHgwMDAxLCAweDIwMDksIDB4MDA0MCwgMHhhODY0LCAweDkwODQsCi0JMHgwMGZmLCAweDkwODYsIDB4MDAzNSwgMHgwMTEwLCAweDIwMDksIDB4MDA0MSwgMHgwODBjLCAweGIxODAsCi0JMHgwMDA1LCAweGE4N2IsIDB4MDEwMSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZkZDEsCi0JMHgwMTJlLCAweDAwMDUsIDB4YTg3YiwgMHgwMDJjLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg2ZGQxLCAweDAxMmUsIDB4MDAwNSwgMHhhODdiLCAweDAwMjgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwODBjLCAweDZkZDEsIDB4MDEyZSwgMHgwODBjLCAweGIxMDEsIDB4MDAwNSwgMHgwMGQ2LCAweDAwYzYsCi0JMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMGI2LCAweDcwMDcsIDB4MDAwMSwgMHhhYTc0LCAweDkyODIsCi0JMHgwMDA0LCAweDFhMDQsIDB4N2YxMywgMHhhOTdjLCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LCAweDkwNWQsCi0JMHhiODA0LCAweGQyODQsIDB4MDE0MCwgMHgwNWU4LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDkwODQsCi0JMHgwMDA2LCAweDExMDgsIDB4MDRiMCwgMHgyYjEwLCAweDA4MGMsIDB4YjBhYiwgMHgxMTE4LCAweDA4MGMsCi0JMHhiMTUzLCAweDA1YTgsIDB4NjIxMiwgMHhhODc0LCAweDAwMDIsIDB4N2VmMSwgMHg3ZWY2LCAweDdlZjksCi0JMHg3ZWZmLCAweDIwMTksIDB4MDAwMiwgMHgwODBjLCAweGU5MTUsIDB4MDA2MCwgMHgwODBjLCAweGU4YWMsCi0JMHgwMDQ4LCAweDIwMTksIDB4MDAwMiwgMHhhOTgwLCAweDA4MGMsIDB4ZThjNywgMHgwMDE4LCAweGE5ODAsCi0JMHgwODBjLCAweGU4YWMsIDB4MDgwYywgMHhiMTAxLCAweGE4ODcsIDB4MDAwMCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4NmRkMSwgMHgwMTJlLCAweDAwYmUsIDB4MDAxZSwgMHgwMDJlLCAweDAwM2UsCi0JMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHhhODg3LCAweDAwMDYsIDB4MGM4MCwgMHhhODg3LCAweDAwMDIsCi0JMHgwYzY4LCAweGE4ODcsIDB4MDAwNSwgMHgwYzUwLCAweGE4ODcsIDB4MDAwNCwgMHgwYzM4LCAweGE4ODcsCi0JMHgwMDA3LCAweDBjMjAsIDB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4N2YyNCwgMHgwMDA2LCAweDAwMTYsCi0JMHgyMDAxLCAweDgwMDMsIDB4MDAwNiwgMHgwODA0LCAweDBkY2UsIDB4MjAwMSwgMHgxODM0LCAweDIwMDQsCi0JMHg5MDA1LCAweDAwMDUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHgyMDAxLCAweDAyMDAsCi0JMHgyMDBjLCAweGMxZTUsIDB4YzFkYywgMHgyMTAyLCAweDIwMDksIDB4MDIxOCwgMHgyMTBjLCAweGQxZWMsCi0JMHgxMTIwLCAweDA4MGMsIDB4MTVhMCwgMHgwMGZlLCAweDAwMDUsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsCi0JMHgwMDIwLCAweDc4MWYsIDB4MDMwMCwgMHgwMGZlLCAweDAwMDUsIDB4NzgxYywgMHhkMDhjLCAweDA5MDQsCi0JMHg3ZmE0LCAweDY4YzAsIDB4OTBhYSwgMHgwMDA1LCAweDBhMDQsIDB4ODVlOCwgMHg3ZDQ0LCAweDdjNDAsCi0JMHg5NTg0LCAweDAwZjYsIDB4MTUxMCwgMHg5NDg0LCAweDcwMDAsIDB4MDE0MCwgMHg5MDhhLCAweDIwMDAsCi0JMHgxMjYwLCAweDk1ODQsIDB4MDcwMCwgMHg4MDA3LCAweDA4MDQsIDB4N2ZhYiwgMHg3MDAwLCAweDkwODQsCi0JMHhmZjAwLCAweDkwODYsIDB4ODEwMCwgMHgwZGE4LCAweDAwYjAsIDB4OTQ4NCwgMHgwZmZmLCAweDExMzAsCi0JMHg3MDAwLCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LCAweDgxMDAsIDB4MTFjMCwgMHgwODBjLCAweGVkZDIsCi0JMHgwODBjLCAweDg0Y2QsIDB4NzgxNywgMHgwMTQwLCAweDAwYTgsIDB4OTU4NCwgMHgwMDc2LCAweDExMTgsCi0JMHgwODBjLCAweDg1MmIsIDB4MTljMCwgMHhkNWE0LCAweDAxNDgsIDB4MDA0NiwgMHgwMDU2LCAweDA4MGMsCi0JMHg4MDA2LCAweDA4MGMsIDB4MjM5NywgMHgwMDVlLCAweDAwNGUsIDB4MDAyMCwgMHgwODBjLCAweGVkZDIsCi0JMHg3ODE3LCAweDAxNDAsIDB4MDgwYywgMHg3NTY5LCAweDAxNjgsIDB4MjAwMSwgMHgwMTExLCAweDIwMDQsCi0JMHhkMDhjLCAweDAxNDAsIDB4Njg5MywgMHgwMDAwLCAweDIwMDEsIDB4MDExMCwgMHgyMDAzLCAweDAwMDgsCi0JMHgyMDAzLCAweDAwMDAsIDB4MDgwYywgMHg3ZmU3LCAweDIwMDEsIDB4MTlmMiwgMHgyMDA0LCAweDkwMDUsCi0JMHgwOTBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwMDAyLCAweDdmYmQsIDB4ODJkNSwgMHg3ZmI0LCAweDdmYjQsCi0JMHg3ZmI0LCAweDdmYjQsIDB4N2ZiNCwgMHg3ZmI0LCAweDc4MTcsIDB4MDE0MCwgMHgyMDAxLCAweDE5ZjIsCi0JMHgyMDA0LCAweDkwMDUsIDB4MDkwYywgMHg5OGVkLCAweDAwMDUsIDB4NzAwMCwgMHg5MDhjLCAweGZmMDAsCi0JMHg5MTk0LCAweGYwMDAsIDB4ODEwZiwgMHg5NDg0LCAweDBmZmYsIDB4Njg5MiwgMHg5Mjg2LCAweDIwMDAsCi0JMHgxMTUwLCAweDY4MDAsIDB4OTA4NiwgMHgwMDAxLCAweDExMTgsIDB4MDgwYywgMHg1ODNkLCAweDAwNzAsCi0JMHgwODBjLCAweDgwMjYsIDB4MDA1OCwgMHg5Mjg2LCAweDMwMDAsIDB4MTExOCwgMHgwODBjLCAweDgyMGQsCi0JMHgwMDI4LCAweDkyODYsIDB4ODAwMCwgMHgxMTEwLCAweDA4MGMsIDB4ODNmNCwgMHg3ODE3LCAweDAxNDAsCi0JMHgyMDAxLCAweDE5ZjIsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsIDB4OThlZCwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODEwLCAweDIwMDQsIDB4ZDA4YywgMHgwMTc4LCAweDIwMDEsIDB4MTgwMCwgMHgyMDA0LCAweDkwODYsCi0JMHgwMDAzLCAweDExNDgsIDB4MDAyNiwgMHgwMDM2LCAweDIwMTEsIDB4ODA0OCwgMHgyNTE4LCAweDA4MGMsCi0JMHg0YmU5LCAweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwZjYsCi0JMHgyMDc5LCAweDAyMDAsIDB4MjAxOSwgMHhmZmZlLCAweDdjMzAsIDB4MDA1MCwgMHgwMDM2LCAweDAwNDYsCi0JMHgwMDU2LCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLCAweDdkNDQsIDB4N2M0MCwgMHgyMDE5LCAweGZmZmYsCi0JMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMDhjLCAweDAxNjAsIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsCi0JMHg5MDg2LCAweDAwMDMsIDB4MTEzMCwgMHgwMDI2LCAweDIwMTEsIDB4ODA0OCwgMHgwODBjLCAweDRiZTksCi0JMHgwMDJlLCAweDAwZmUsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAwNSwgMHgwMGI2LCAweDAwYzYsCi0JMHg3MDEwLCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwOTYsIDB4MDAwMSwgMHgwMTIwLCAweDkwOTYsCi0JMHgwMDIzLCAweDE5MDQsIDB4ODFkZSwgMHg5MTg2LCAweDAwMjMsIDB4MTVjMCwgMHgwODBjLCAweDg0OTIsCi0JMHgwOTA0LCAweDgxZGUsIDB4NjEyMCwgMHg5MTg2LCAweDAwMDEsIDB4MDE1MCwgMHg5MTg2LCAweDAwMDQsCi0JMHgwMTM4LCAweDkxODYsIDB4MDAwOCwgMHgwMTIwLCAweDkxODYsIDB4MDAwYSwgMHgxOTA0LCAweDgxZGUsCi0JMHg3MTI0LCAweDYxMGEsIDB4NzAzMCwgMHg5MDhlLCAweDAyMDAsIDB4MTEzMCwgMHgyMDA5LCAweDAwMTUsCi0JMHgwODBjLCAweGIxODAsIDB4MDgwNCwgMHg4MWRlLCAweDkwOGUsIDB4MDIxNCwgMHgwMTE4LCAweDkwOGUsCi0JMHgwMjEwLCAweDExMzAsIDB4MjAwOSwgMHgwMDE1LCAweDA4MGMsIDB4YjE4MCwgMHgwODA0LCAweDgxZGUsCi0JMHg5MDhlLCAweDAxMDAsIDB4MTkwNCwgMHg4MWRlLCAweDcwMzQsIDB4OTAwNSwgMHgxOTA0LCAweDgxZGUsCi0JMHgyMDA5LCAweDAwMTYsIDB4MDgwYywgMHhiMTgwLCAweDA4MDQsIDB4ODFkZSwgMHg5MTg2LCAweDAwMjIsCi0JMHgxOTA0LCAweDgxZGUsIDB4NzAzMCwgMHg5MDhlLCAweDAzMDAsIDB4MTU4MCwgMHg2OGRjLCAweGQwYTQsCi0JMHgwNTI4LCAweGMwYjUsIDB4NjhkZSwgMHg3MTAwLCAweDkxOGMsIDB4MDBmZiwgMHg2OTdlLCAweDcwMDQsCi0JMHg2ODgyLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDc5ZTYsIDB4NzhlYSwgMHgwMDA2LCAweDkwODQsCi0JMHgwMGZmLCAweDAwMTYsIDB4MjAwOCwgMHgwODBjLCAweDI4ZGQsIDB4NzkzMiwgMHg3OTM2LCAweDAwMWUsCi0JMHgwMDBlLCAweDAwZmUsIDB4MDgwYywgMHgyODk0LCAweDY5NWUsIDB4NzAzYywgMHgwMGU2LCAweDIwNzEsCi0JMHgwMTQwLCAweDcwODYsIDB4MjA3MSwgMHgxODAwLCAweDcwYjYsIDB4MDBlZSwgMHg3MDM0LCAweDkwMDUsCi0JMHgxOTA0LCAweDgxZGUsIDB4MjAwOSwgMHgwMDE3LCAweDA4MDQsIDB4ODE4ZSwgMHg5MDhlLCAweDA0MDAsCi0JMHgxMTkwLCAweDcwMzQsIDB4OTAwNSwgMHgxOTA0LCAweDgxZGUsIDB4MDgwYywgMHg3NTY5LCAweDAxMjAsCi0JMHgyMDA5LCAweDAwMWQsIDB4MDgwNCwgMHg4MThlLCAweDY4ZGMsIDB4YzBhNSwgMHg2OGRlLCAweDIwMDksCi0JMHgwMDMwLCAweDA4MDQsIDB4ODE4ZSwgMHg5MDhlLCAweDA1MDAsIDB4MTE0MCwgMHg3MDM0LCAweDkwMDUsCi0JMHgxOTA0LCAweDgxZGUsIDB4MjAwOSwgMHgwMDE4LCAweDA4MDQsIDB4ODE4ZSwgMHg5MDhlLCAweDIwMTAsCi0JMHgxMTIwLCAweDIwMDksIDB4MDAxOSwgMHgwODA0LCAweDgxOGUsIDB4OTA4ZSwgMHgyMTEwLCAweDExMjAsCi0JMHgyMDA5LCAweDAwMWEsIDB4MDgwNCwgMHg4MThlLCAweDkwOGUsIDB4NTIwMCwgMHgxMTQwLCAweDcwMzQsCi0JMHg5MDA1LCAweDE5MDQsIDB4ODFkZSwgMHgyMDA5LCAweDAwMWIsIDB4MDgwNCwgMHg4MThlLCAweDkwOGUsCi0JMHg1MDAwLCAweDExNDAsIDB4NzAzNCwgMHg5MDA1LCAweDE5MDQsIDB4ODFkZSwgMHgyMDA5LCAweDAwMWMsCi0JMHgwODA0LCAweDgxOGUsIDB4OTA4ZSwgMHgxMzAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDM0LCAweDA4MDQsCi0JMHg4MThlLCAweDkwOGUsIDB4MTIwMCwgMHgxMTQwLCAweDcwMzQsIDB4OTAwNSwgMHgxOTA0LCAweDgxZGUsCi0JMHgyMDA5LCAweDAwMjQsIDB4MDgwNCwgMHg4MThlLCAweDkwOGMsIDB4ZmYwMCwgMHg5MThlLCAweDI0MDAsCi0JMHgxMTcwLCAweDIwMDksIDB4MDAyZCwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMDljLCAweDA5MDQsCi0JMHg4MThlLCAweDA4MGMsIDB4ZGM5OCwgMHgxOTA0LCAweDgxZGUsIDB4MDgwNCwgMHg4MThjLCAweDkwOGMsCi0JMHhmZjAwLCAweDkxOGUsIDB4NTMwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAyYSwgMHgwODA0LCAweDgxOGUsCi0JMHg5MDhlLCAweDBmMDAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMjAsIDB4MDgwNCwgMHg4MThlLCAweDkwOGUsCi0JMHg2MTA0LCAweDE1MzAsIDB4MjAyOSwgMHgwMjA1LCAweDIwMTEsIDB4MDI2ZCwgMHg4MjA4LCAweDIyMDQsCi0JMHg5MDgyLCAweDAwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDIwYTgsIDB4MjAxMSwgMHg4MDE1LCAweDIxMWMsCi0JMHg4MTA4LCAweDAwNDYsIDB4MjEyNCwgMHgwODBjLCAweDRiZTksIDB4MDA0ZSwgMHg4MTA4LCAweDBmMDQsCi0JMHg4MTQyLCAweDkxODYsIDB4MDI4MCwgMHgxZDg4LCAweDI1MDQsIDB4ODAwMCwgMHgyMDJhLCAweDIwMDksCi0JMHgwMjYwLCAweDBjNTgsIDB4MjAyYiwgMHgwMDAwLCAweDIwMDksIDB4MDAyMywgMHgwODA0LCAweDgxOGUsCi0JMHg5MDhlLCAweDYwMDAsIDB4MTEyMCwgMHgyMDA5LCAweDAwM2YsIDB4MDgwNCwgMHg4MThlLCAweDkwOGUsCi0JMHg1NDAwLCAweDExMzgsIDB4MDgwYywgMHg4NTk4LCAweDE5MDQsIDB4ODFkZSwgMHgyMDA5LCAweDAwNDYsCi0JMHgwNGE4LCAweDkwOGUsIDB4NTUwMCwgMHgxMTQ4LCAweDA4MGMsIDB4ODVjMCwgMHgxMTE4LCAweDIwMDksCi0JMHgwMDQxLCAweDA0NjAsIDB4MjAwOSwgMHgwMDQyLCAweDA0NDgsIDB4OTA4ZSwgMHg3ODAwLCAweDExMTgsCi0JMHgyMDA5LCAweDAwNDUsIDB4MDQxOCwgMHg5MDhlLCAweDEwMDAsIDB4MTExOCwgMHgyMDA5LCAweDAwNGUsCi0JMHgwMGU4LCAweDkwOGUsIDB4NjMwMCwgMHgxMTE4LCAweDIwMDksIDB4MDA0YSwgMHgwMGI4LCAweDkwOGMsCi0JMHhmZjAwLCAweDkxOGUsIDB4NTYwMCwgMHgxMTE4LCAweDIwMDksIDB4MDA0ZiwgMHgwMDc4LCAweDkwOGMsCi0JMHhmZjAwLCAweDkxOGUsIDB4NTcwMCwgMHgxMTE4LCAweDIwMDksIDB4MDA1MCwgMHgwMDM4LCAweDIwMDksCi0JMHgwMDFkLCAweDY4MzgsIDB4ZDBkNCwgMHgwMTEwLCAweDIwMDksIDB4MDA0YywgMHgwMDE2LCAweDIwMTEsCi0JMHgwMjYzLCAweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDA4MGMsIDB4Mjg5NCwgMHgxOTA0LCAweDgxZTEsCi0JMHgwODBjLCAweDY2YjIsIDB4MTkwNCwgMHg4MWUxLCAweGJlMTIsIDB4YmQxNiwgMHgwMDFlLCAweDAwMTYsCi0JMHgwODBjLCAweDc1NjksIDB4MDFjMCwgMHg2OGRjLCAweGQwOGMsIDB4MTE0OCwgMHg3MDAwLCAweDkwODQsCi0JMHgwMGZmLCAweDExODgsIDB4NzAwNCwgMHg5MDg0LCAweGZmMDAsIDB4MTE2OCwgMHgwMDQwLCAweDY4N2MsCi0JMHg5NjA2LCAweDExNDgsIDB4Njg4MCwgMHg5NTA2LCAweDkwODQsIDB4ZmYwMCwgMHgxMTIwLCAweDk1ODQsCi0JMHgwMGZmLCAweGI4YzIsIDB4MDA4MCwgMHhiOGMwLCAweDkwMDUsIDB4MTE2OCwgMHg5MTg2LCAweDAwNDYsCi0JMHgxMTUwLCAweDY4N2MsIDB4OTYwNiwgMHgxMTM4LCAweDY4ODAsIDB4OTUwNiwgMHg5MDg0LCAweGZmMDAsCi0JMHgxMTEwLCAweDAwMWUsIDB4MDA5OCwgMHgwODBjLCAweGIwYWIsIDB4MDFhOCwgMHgyYjA4LCAweDYxMTIsCi0JMHg2MDIzLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDAwMWUsIDB4OTE4NiwgMHgwMDRjLCAweDExMTAsCi0JMHg2MDIzLCAweDAwMGEsIDB4MDAxNiwgMHgwMDFlLCAweDA4MGMsIDB4YjE4MCwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMDA1LCAweDAwMWUsIDB4MGNkOCwgMHgyMDAxLCAweDE4MGUsIDB4MjAwNCwgMHhkMGVjLCAweDAxMjAsCi0JMHgyMDExLCAweDgwNDksIDB4MDgwYywgMHg0YmU5LCAweDA4MGMsIDB4YjE1MywgMHgwZDkwLCAweDJiMDgsCi0JMHg2MTEyLCAweDYwMjMsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4MDAxZSwgMHgwMDE2LCAweDkxODYsCi0JMHgwMDE3LCAweDAxMTgsIDB4OTE4NiwgMHgwMDMwLCAweDExMjgsIDB4NjAwNywgMHgwMDA5LCAweDYwMTcsCi0JMHgyOTAwLCAweDAwMjAsIDB4NjAwNywgMHgwMDUxLCAweDYwMTcsIDB4MDAwMCwgMHg2MDJmLCAweDAwMDksCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzgzLCAweDA4YTAsIDB4MDgwYywgMHg4NjA3LCAweDExNTgsCi0JMHgwODBjLCAweDMzNmEsIDB4MTE0MCwgMHg3MDEwLCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwOGUsCi0JMHgwMDA4LCAweDExMDgsIDB4MDAwOSwgMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHgwMDQ2LCAweDcwMDAsCi0JMHg5MDhjLCAweGZmMDAsIDB4ODEwZiwgMHg5MTg2LCAweDAwMzMsIDB4MTFlOCwgMHgwODBjLCAweDg0OTIsCi0JMHgwOTA0LCAweDgyNmQsIDB4NzEyNCwgMHg2MTBhLCAweDcwMzAsIDB4OTA4ZSwgMHgwMjAwLCAweDExNDAsCi0JMHg3MDM0LCAweDkwMDUsIDB4MTVkMCwgMHgyMDA5LCAweDAwMTUsIDB4MDgwYywgMHhiMTgwLCAweDA0YTgsCi0JMHg5MDhlLCAweDAxMDAsIDB4MTU5MCwgMHg3MDM0LCAweDkwMDUsIDB4MTU3OCwgMHgyMDA5LCAweDAwMTYsCi0JMHgwODBjLCAweGIxODAsIDB4MDQ1MCwgMHg5MTg2LCAweDAwMzIsIDB4MTUzOCwgMHg3MDMwLCAweDkwOGUsCi0JMHgxNDAwLCAweDE1MTgsIDB4MjAwOSwgMHgwMDM4LCAweDAwMTYsIDB4MjAxMSwgMHgwMjYzLCAweDIyMDQsCi0JMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyODk0LCAweDExYjgsIDB4MDgwYywgMHg2NmIyLCAweDExYTAsCi0JMHhiZTEyLCAweGJkMTYsIDB4MDgwYywgMHhiMGFiLCAweDAxNzgsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsCi0JMHhkMmQyLCAweDYwMjMsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4MDAxZSwgMHgwODBjLCAweGIxODAsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDAxMCwgMHgwMGNlLCAweDAwMWUsIDB4MDA0ZSwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDA0NiwgMHgwMGU2LCAweDAwZDYsIDB4MjAyOCwgMHgyMTMwLCAweDk2OTYsCi0JMHgwMGZmLCAweDExYjgsIDB4OTU5MiwgMHhmZmZjLCAweDAyYTAsIDB4OTU5NiwgMHhmZmZkLCAweDExMjAsCi0JMHgyMDA5LCAweDAwN2YsIDB4MDgwNCwgMHg4MmNmLCAweDk1OTYsIDB4ZmZmZSwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDdlLCAweDA4MDQsIDB4ODJjZiwgMHg5NTk2LCAweGZmZmMsIDB4MTExOCwgMHgyMDA5LCAweDAwODAsCi0JMHgwNGYwLCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LCAweDE4MzcsIDB4MjMxYywgMHhkM2FjLCAweDAxMzAsCi0JMHg5MDI2LCAweDIwYTksIDB4MDgwMCwgMHgyMDcxLCAweDEwMDAsIDB4MDAzMCwgMHgyMDIxLCAweDAwODEsCi0JMHgyMGE5LCAweDA3N2YsIDB4MjA3MSwgMHgxMDgxLCAweDJlMWMsIDB4OTNkZCwgMHgwMDAwLCAweDExNDAsCi0JMHg4MmZmLCAweDExZDAsIDB4OTQ5NiwgMHgwMGZmLCAweDAxYjgsIDB4MjQxMCwgMHhjMmZkLCAweDAwYTAsCi0JMHhiZjEwLCAweDI2MDAsIDB4OTcwNiwgMHhiODE0LCAweDExMjAsIDB4OTU0NiwgMHgxMTEwLCAweDI0MDgsCi0JMHgwMGIwLCAweDk3NDUsIDB4MTE0OCwgMHg5NGM2LCAweDAwN2UsIDB4MDEzMCwgMHg5NGM2LCAweDAwN2YsCi0JMHgwMTE4LCAweDk0YzYsIDB4MDA4MCwgMHgxZDIwLCAweDg0MjAsIDB4OGU3MCwgMHgxZjA0LCAweDgyYTQsCi0JMHg4MmZmLCAweDExMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMTgsIDB4YzJmYywgMHgyMjA4LCAweDkwMDYsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDA0ZSwgMHgwMGJlLCAweDAwMDUsIDB4MjAwMSwgMHgxODM3LCAweDIwMGMsCi0JMHg5MTg0LCAweDAwODAsIDB4MDExMCwgMHhkMThjLCAweDAxMzgsIDB4NzAwMCwgMHg5MDhjLCAweGZmMDAsCi0JMHg4MTBmLCAweDkxODQsIDB4MDAwZiwgMHgwMDRhLCAweDc4MTcsIDB4MDE0MCwgMHgyMDAxLCAweDE5ZjIsCi0JMHgyMDA0LCAweDkwMDUsIDB4MDkwYywgMHg5OGVkLCAweDAwMDUsIDB4ODJmZCwgMHg4MmZkLCAweDgyZmQsCi0JMHg4NGE0LCAweDgyZmQsIDB4ODMwNiwgMHg4MzMxLCAweDgzYmYsIDB4ODJmZCwgMHg4MmZkLCAweDgyZmQsCi0JMHg4MmZkLCAweDgyZmQsIDB4ODJmZCwgMHg4MmZkLCAweDgyZmQsIDB4NzgxNywgMHgwMTQwLCAweDIwMDEsCi0JMHgxOWYyLCAweDIwMDQsIDB4OTAwNSwgMHgwOTBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwMGI2LCAweDcxMTAsCi0JMHhkMWJjLCAweDAxZTgsIDB4NzEyMCwgMHgyMTYwLCAweDljOGMsIDB4MDAwNywgMHgxMWMwLCAweDljOGEsCi0JMHgxY2QwLCAweDAyYTgsIDB4Njg2OCwgMHg5YzAyLCAweDEyOTAsIDB4NzAwOCwgMHg5MDg0LCAweDAwZmYsCi0JMHg2MTEwLCAweDIxNTgsIDB4YjkxMCwgMHg5MTA2LCAweDExNTAsIDB4NzAwYywgMHhiOTE0LCAweDkxMDYsCi0JMHgxMTMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LCAweDAwNDYsIDB4MDgwYywgMHhiMTgwLCAweDc4MTcsCi0JMHgwMTQwLCAweDIwMDEsIDB4MTlmMiwgMHgyMDA0LCAweDkwMDUsIDB4MDkwYywgMHg5OGVkLCAweDAwYmUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHg5NDg0LCAweDBmZmYsIDB4MDkwNCwgMHg4Mzk1LCAweDcxMTAsCi0JMHhkMWJjLCAweDE5MDQsIDB4ODM5NSwgMHg3MTA4LCAweDcwMGMsIDB4MjAyOCwgMHg5MThjLCAweDAwZmYsCi0JMHgyMTMwLCAweDkwOTQsIDB4ZmYwMCwgMHgxNWIwLCAweDgxZmYsIDB4MTVhMCwgMHg5MDgwLCAweDMzYWMsCi0JMHgyMDBkLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDIwMDEsIDB4MDA4MCwgMHg5MTA2LCAweDA5MDQsCi0JMHg4Mzk1LCAweDA4MGMsIDB4NjZiMiwgMHgxOTA0LCAweDgzOTUsIDB4YmUxMiwgMHhiZDE2LCAweGI4MDAsCi0JMHhkMGVjLCAweDE1ZDgsIDB4YmEwNCwgMHg5Mjk0LCAweGZmMDAsIDB4OTI4NiwgMHgwNjAwLCAweDExYTAsCi0JMHgwODBjLCAweGIwYWIsIDB4MDVlOCwgMHgyYjA4LCAweDcwMjgsIDB4NjA0NiwgMHg3MDJjLCAweDYwNGEsCi0JMHg2MTEyLCAweDYwMjMsIDB4MDAwNiwgMHg3MTIwLCAweDYxMGEsIDB4NzEzMCwgMHg2MTU2LCAweDIwMDksCi0JMHgwMDQ0LCAweDA4MGMsIDB4ZGYxMCwgMHgwNDA4LCAweDA4MGMsIDB4NmE5MiwgMHgxMTM4LCAweGI4MDcsCi0JMHgwNjA2LCAweDBjMzAsIDB4MTkwYywgMHg4MjcxLCAweDExYzAsIDB4MDg5OCwgMHgwODBjLCAweGIwYWIsCi0JMHgyYjA4LCAweDAxOTgsIDB4NjExMiwgMHg2MDIzLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDkyODYsCi0JMHgwNDAwLCAweDExMTgsIDB4NjAwNywgMHgwMDA1LCAweDAwMTAsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsCi0JMHgwMDAxLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsIDB4NzgxNywgMHgwMTQwLCAweDIwMDEsCi0JMHgxOWYyLCAweDIwMDQsIDB4OTAwNSwgMHgwOTBjLCAweDk4ZWQsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgyMDAxLCAweDE4MGUsIDB4MjAwNCwgMHhkMGVjLCAweDAxMjAsIDB4MjAxMSwgMHg4MDQ5LCAweDA4MGMsCi0JMHg0YmU5LCAweDA4MGMsIDB4YjE1MywgMHgwZDQ4LCAweDJiMDgsIDB4NjExMiwgMHg2MDIzLCAweDAwMDYsCi0JMHg3MTIwLCAweDYxMGEsIDB4NzEzMCwgMHg2MTU2LCAweDYwMTcsIDB4ZjMwMCwgMHg2MDAzLCAweDAwMDEsCi0JMHg2MDA3LCAweDAwNDEsIDB4MDgwYywgMHg5MzNiLCAweDA4MGMsIDB4OThlZCwgMHgwOGIwLCAweDAwYjYsCi0JMHg3MTEwLCAweGQxYmMsIDB4MDFlOCwgMHg3MDIwLCAweDIwNjAsIDB4OWM4NCwgMHgwMDA3LCAweDExYzAsCi0JMHg5YzgyLCAweDFjZDAsIDB4MDJhOCwgMHg2ODY4LCAweDljMDIsIDB4MTI5MCwgMHg3MDA4LCAweDkwODQsCi0JMHgwMGZmLCAweDYxMTAsIDB4MjE1OCwgMHhiOTEwLCAweDkxMDYsIDB4MTE1MCwgMHg3MDBjLCAweGI5MTQsCi0JMHg5MTA2LCAweDExMzAsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA0NSwgMHgwODBjLCAweGIxODAsCi0JMHg3ODE3LCAweDAxNDAsIDB4MjAwMSwgMHgxOWYyLCAweDIwMDQsIDB4OTAwNSwgMHgwOTBjLCAweDk4ZWQsCi0JMHgwMGJlLCAweDAwMDUsIDB4NjEyMCwgMHg5MTg2LCAweDAwMDIsIDB4MDEyOCwgMHg5MTg2LCAweDAwMDUsCi0JMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4ODYwNywgMHgxMTgwLCAweDA4MGMsCi0JMHgzMzZhLCAweDExNjgsIDB4NzAxMCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDg2LCAweDAwMDAsCi0JMHgxMTMwLCAweDkxODQsIDB4MDAwZiwgMHg5MDhhLCAweDAwMDYsIDB4MTIwOCwgMHgwMDBiLCAweDAwMDUsCi0JMHg4NDBlLCAweDg0MGYsIDB4ODQwZSwgMHg4NDBlLCAweDg0NzQsIDB4ODQ4MywgMHgwMDA1LCAweDAwYjYsCi0JMHg3MDBjLCAweDcxMDgsIDB4MDgwYywgMHgyODk0LCAweDE5MDQsIDB4ODQ3MiwgMHgwODBjLCAweDY2YjIsCi0JMHgxOTA0LCAweDg0NzIsIDB4YmUxMiwgMHhiZDE2LCAweDcxMTAsIDB4ZDFiYywgMHgwNTQwLCAweDcwMmMsCi0JMHhkMDg0LCAweDExMjAsIDB4YjgwMCwgMHhkMGJjLCAweDE5MDQsIDB4ODQ3MiwgMHgwODBjLCAweDZhOTIsCi0JMHgwMTQ4LCAweDkwODYsIDB4MDAwNCwgMHgwMTMwLCAweDA4MGMsIDB4NmE5YSwgMHgwMTE4LCAweDkwODYsCi0JMHgwMDA0LCAweDE1ODgsIDB4MDBjNiwgMHgwODBjLCAweDg0OTIsIDB4MDBjZSwgMHgwNWQ4LCAweDA4MGMsCi0JMHhiMGFiLCAweDJiMDgsIDB4MDViOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDJkMiwgMHg2MDIzLCAweDAwMDIsCi0JMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwgMHgwMDg4LCAweDA4MGMsIDB4YjE4MCwgMHgwNDU4LCAweDA4MGMsCi0JMHg2YTkyLCAweDAxNDgsIDB4OTA4NiwgMHgwMDA0LCAweDAxMzAsIDB4MDgwYywgMHg2YTlhLCAweDAxMTgsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTE4MCwgMHgwODBjLCAweGIwYWIsIDB4MmIwOCwgMHgwMWQ4LCAweDYxMTIsCi0JMHgwODBjLCAweGQyZDIsIDB4NjAyMywgMHgwMDA1LCAweDcxMjAsIDB4NjEwYSwgMHgyMDA5LCAweDAwODgsCi0JMHgwODBjLCAweGIxODAsIDB4MDA3OCwgMHgwODBjLCAweGIwYWIsIDB4MmIwOCwgMHgwMTU4LCAweDYxMTIsCi0JMHgwODBjLCAweGQyZDIsIDB4NjAyMywgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgyMDA5LCAweDAwMDEsCi0JMHgwODBjLCAweGIxODAsIDB4MDBiZSwgMHgwMDA1LCAweDcxMTAsIDB4ZDFiYywgMHgwMTU4LCAweDAwZDEsCi0JMHgwMTQ4LCAweDA4MGMsIDB4ODNlYSwgMHgxMTMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LCAweDAwODksCi0JMHgwODBjLCAweGIxODAsIDB4MDAwNSwgMHg3MTEwLCAweGQxYmMsIDB4MDE1OCwgMHgwMDU5LCAweDAxNDgsCi0JMHgwODBjLCAweDgzZWEsIDB4MTEzMCwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDhhLCAweDA4MGMsCi0JMHhiMTgwLCAweDAwMDUsIDB4NzAyMCwgMHgyMDYwLCAweDljODQsIDB4MDAwNywgMHgxMTU4LCAweDljODIsCi0JMHgxY2QwLCAweDAyNDAsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxMjE4LCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4OTAwNiwgMHgwY2U4LCAweDAwYjYsIDB4NzExMCwgMHhkMWJjLCAweDExZDgsCi0JMHg3MDI0LCAweDIwNjAsIDB4OWM4NCwgMHgwMDA3LCAweDExYjAsIDB4OWM4MiwgMHgxY2QwLCAweDAyOTgsCi0JMHg2ODY4LCAweDljMDIsIDB4MTI4MCwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MTEwLCAweDIxNTgsCi0JMHhiOTEwLCAweDkxMDYsIDB4MTE0MCwgMHg3MDBjLCAweGI5MTQsIDB4OTEwNiwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDUxLCAweDA4MGMsIDB4YjE4MCwgMHg3ODE3LCAweDAxNDAsIDB4MjAwMSwgMHgxOWYyLCAweDIwMDQsCi0JMHg5MDA1LCAweDA5MGMsIDB4OThlZCwgMHgwMGJlLCAweDAwMDUsIDB4MjAzMSwgMHgwMTA1LCAweDAwNjksCi0JMHgwMDA1LCAweDIwMzEsIDB4MDIwNiwgMHgwMDQ5LCAweDAwMDUsIDB4MjAzMSwgMHgwMjA3LCAweDAwMjksCi0JMHgwMDA1LCAweDIwMzEsIDB4MDIxMywgMHgwMDA5LCAweDAwMDUsIDB4MDBjNiwgMHgwMDk2LCAweDAwZjYsCi0JMHg3MDAwLCAweDkwODQsIDB4ZjAwMCwgMHg5MDg2LCAweGMwMDAsIDB4MDVkMCwgMHgwODBjLCAweGIwYWIsCi0JMHgwNWI4LCAweDAwNjYsIDB4MDBjNiwgMHgwMDQ2LCAweDIwMTEsIDB4MDI2MywgMHgyMjA0LCAweDgyMTEsCi0JMHgyMjBjLCAweDA4MGMsIDB4Mjg5NCwgMHgxNWEwLCAweDA4MGMsIDB4NjZiMiwgMHgxNTg4LCAweGJlMTIsCi0JMHhiZDE2LCAweDJiMDAsIDB4MDA0ZSwgMHgwMGNlLCAweDYwMTIsIDB4MDgwYywgMHhkMmQyLCAweDA4MGMsCi0JMHgxMDBlLCAweDA1MTAsIDB4MjkwMCwgMHg2MDVhLCAweDkwMDYsIDB4YTgwMiwgMHhhODY2LCAweGFjNmEsCi0JMHhhODVjLCAweDkwZjgsIDB4MDAxYiwgMHgyMGE5LCAweDAwMGUsIDB4YTg2MCwgMHgyMGU4LCAweDIwZTEsCi0JMHgwMDAwLCAweDJmYTAsIDB4MmU5OCwgMHg0MDAzLCAweDAwNmUsIDB4NjYxNiwgMHg2MDA3LCAweDAwM2UsCi0JMHg2MDIzLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsCi0JMHgwMGZlLCAweDAwOWUsIDB4MDBjZSwgMHgwMDA1LCAweDA4MGMsIDB4YjEwMSwgMHgwMDZlLCAweDBjYzAsCi0JMHgwMDRlLCAweDAwY2UsIDB4MGNjOCwgMHgwMGM2LCAweDcwMDAsIDB4OTA4YywgMHhmZjAwLCAweDkxODQsCi0JMHhmMDAwLCAweDgxMGYsIDB4OTA4NiwgMHgyMDAwLCAweDE5MDQsIDB4ODU4MiwgMHg5MTg2LCAweDAwMjIsCi0JMHgxNWYwLCAweDIwMDEsIDB4MDExMSwgMHgyMDA0LCAweDkwMDUsIDB4MTkwNCwgMHg4NTg0LCAweDcwMzAsCi0JMHg5MDhlLCAweDA0MDAsIDB4MDkwNCwgMHg4NTg0LCAweDkwOGUsIDB4NjAwMCwgMHgwNWU4LCAweDkwOGUsCi0JMHg1NDAwLCAweDA1ZDAsIDB4OTA4ZSwgMHgwMzAwLCAweDExZDgsIDB4MjAwOSwgMHgxODM3LCAweDIxMGMsCi0JMHhkMThjLCAweDE1OTAsIDB4ZDFhNCwgMHgxNTgwLCAweDA4MGMsIDB4NmE1MCwgMHgwNTg4LCAweDY4YjAsCi0JMHg5MDg0LCAweDAwZmYsIDB4NzEwMCwgMHg5MThjLCAweDAwZmYsIDB4OTEwNiwgMHgxNTE4LCAweDY4ODAsCi0JMHg2OWIwLCAweDkxOGMsIDB4ZmYwMCwgMHg5MTA1LCAweDcxMDQsIDB4OTEwNiwgMHgxMWQ4LCAweDAwZTAsCi0JMHgyMDA5LCAweDAxMDMsIDB4MjEwYywgMHhkMWI0LCAweDExYTgsIDB4OTA4ZSwgMHg1MjAwLCAweDA5ZTgsCi0JMHg5MDhlLCAweDA1MDAsIDB4MDlkMCwgMHg5MDhlLCAweDUwMDAsIDB4MDliOCwgMHgwMDU4LCAweDkxODYsCi0JMHgwMDIzLCAweDExNDAsIDB4MDgwYywgMHg4NDkyLCAweDAxMjgsIDB4NjAwNCwgMHg5MDg2LCAweDAwMDIsCi0JMHgwMTE4LCAweDAwMDAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAwMDUsCi0JMHg3MDMwLCAweDkwOGUsIDB4MDMwMCwgMHgwMTE4LCAweDkwOGUsIDB4NTIwMCwgMHgxZDk4LCAweDIwMDEsCi0JMHgxODM3LCAweDIwMDQsIDB4OTA4NCwgMHgwMDA5LCAweDkwODYsIDB4MDAwOCwgMHgwZDY4LCAweDBjNTAsCi0JMHgwMTU2LCAweDAwNDYsIDB4MDAxNiwgMHgwMDM2LCAweDcwMzgsIDB4MjAyMCwgMHg4NDI3LCAweDk0YTQsCi0JMHgwMDA3LCAweGQ0ODQsIDB4MDE0OCwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHgxODA1LCAweDIwMTEsCi0JMHgwMjdhLCAweDA4MGMsIDB4YzBlMywgMHgxMTc4LCAweGQ0OGMsIDB4MDE0OCwgMHgyMGE5LCAweDAwMDQsCi0JMHgyMDE5LCAweDE4MDEsIDB4MjAxMSwgMHgwMjdlLCAweDA4MGMsIDB4YzBlMywgMHgxMTIwLCAweGQ0OTQsCi0JMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDNlLCAweDAwMWUsIDB4MDA0ZSwgMHgwMTVlLCAweDAwMDUsCi0JMHgwMTU2LCAweDAwNDYsIDB4MDAxNiwgMHgwMDM2LCAweDcwMzgsIDB4MjAyMCwgMHg4NDI3LCAweDk0YTQsCi0JMHgwMDA3LCAweGQ0ODQsIDB4MDE0OCwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHgxODA1LCAweDIwMTEsCi0JMHgwMjcyLCAweDA4MGMsIDB4YzBlMywgMHgxMTc4LCAweGQ0OGMsIDB4MDE0OCwgMHgyMGE5LCAweDAwMDQsCi0JMHgyMDE5LCAweDE4MDEsIDB4MjAxMSwgMHgwMjc2LCAweDA4MGMsIDB4YzBlMywgMHgxMTIwLCAweGQ0OTQsCi0JMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDNlLCAweDAwMWUsIDB4MDA0ZSwgMHgwMTVlLCAweDAwMDUsCi0JMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHg3ODAwLCAweGMwZTUsIDB4YzBjYywgMHg3ODAyLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDc4MzQsIDB4ZDA4NCwgMHgxMTMwLCAweDIwNzksCi0JMHgwMjAwLCAweDc4MDAsIDB4OTA4NSwgMHgxMjAwLCAweDc4MDIsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweDE4MDAsIDB4NzAzNCwgMHhjMDg0LCAweDcwMzYsIDB4MDBlZSwgMHgwMDA1LCAweDAwMTYsCi0JMHgyMDAxLCAweDE4MzcsIDB4MjAwYywgMHg5MTg0LCAweDAwODAsIDB4MDExOCwgMHhkMThjLCAweDAxMTgsCi0JMHg5MDA2LCAweDAwMWUsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsIDB4MGNkOCwgMHgyMDcxLCAweDE5ZmMsCi0JMHg3MDAzLCAweDAwMDMsIDB4NzAwZiwgMHgwMzYxLCAweDkwMDYsIDB4NzAxYSwgMHg3MDdhLCAweDcwMTIsCi0JMHg3MDE3LCAweDFjZDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMjYsIDB4NzAyYiwgMHhhNTJkLCAweDcwMzIsCi0JMHg3MDNhLCAweDcwM2YsIDB4MDA2NCwgMHg3MDM3LCAweGE1OTUsIDB4NzA0NywgMHhmZmZmLCAweDcwNGEsCi0JMHg3MDRmLCAweDU2NjUsIDB4NzA1MiwgMHg3MDYzLCAweDg3YWEsIDB4MDgwYywgMHgxMDI3LCAweDA5MGMsCi0JMHgwZGM1LCAweDI5MDAsIDB4NzA0MiwgMHhhODY3LCAweDAwMDMsIDB4YTg2ZiwgMHgwMTAwLCAweGE4YWIsCi0JMHhkY2IwLCAweDAwMDUsIDB4MjA3MSwgMHgxOWZjLCAweDFkMDQsIDB4ODZmOCwgMHgyMDkxLCAweDYwMDAsCi0JMHg3MDBjLCAweDgwMDEsIDB4NzAwZSwgMHgxNTQwLCAweDIwMDEsIDB4MDEzYywgMHgyMDA0LCAweDkwMDUsCi0JMHgxOTBjLCAweDg4MTgsIDB4MjAwMSwgMHgxODY5LCAweDIwMDQsIDB4ZDBjNCwgMHgwMTU4LCAweDNhMDAsCi0JMHhkMDhjLCAweDExNDAsIDB4MjBkMSwgMHgwMDAwLCAweDIwZDEsIDB4MDAwMSwgMHgyMGQxLCAweDAwMDAsCi0JMHgwODBjLCAweDBkYzUsIDB4NzAwZiwgMHgwMzYxLCAweDcwMDcsIDB4MDAwMSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4ODdlZiwgMHg3MDQ4LCAweDkwMGQsIDB4MDE0OCwgMHg4MTA5LCAweDcxNGEsCi0JMHgxMTMwLCAweDcwNGMsIDB4MDgwZiwgMHgwMDE4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMjQsCi0JMHg5MDBkLCAweDAxODgsIDB4NzAyMCwgMHg4MDAxLCAweDcwMjIsIDB4MTE2OCwgMHg3MDIzLCAweDAwMDksCi0JMHg4MTA5LCAweDcxMjYsIDB4OTE4NiwgMHgwM2U4LCAweDExMTAsIDB4NzAyOCwgMHgwODBmLCAweDgxZmYsCi0JMHgxMTEwLCAweDcwMjgsIDB4MDgwZiwgMHg3MDMwLCAweDkwMGQsIDB4MDVhOCwgMHg3MDJjLCAweDgwMDEsCi0JMHg3MDJlLCAweDE1ODgsIDB4MDAxNiwgMHgyMDA5LCAweDAzMDYsIDB4MjEwYywgMHg5MTg0LCAweDAwMzAsCi0JMHgwMWU4LCAweDkxODQsIDB4MDA0OCwgMHg5MDg2LCAweDAwMDgsIDB4MTFjMCwgMHg3MDM4LCAweDkwMDUsCi0JMHgwMWE4LCAweDgwMDEsIDB4NzAzYSwgMHgxMTkwLCAweDA4MGMsIDB4NzU2OSwgMHgwMTc4LCAweDAwZTYsCi0JMHgyMDcxLCAweDE5ZTksIDB4MDgwYywgMHhhNjIzLCAweDAwZWUsIDB4MTE0MCwgMHgyMDA5LCAweDFhODcsCi0JMHgyMTA0LCAweDgwMDAsIDB4MDIwOCwgMHgyMDBhLCAweDAwMWUsIDB4MDA2OCwgMHgwMDFlLCAweDcwMmYsCi0JMHgwMDA5LCAweDgxMDksIDB4NzEzMiwgMHgwMTI4LCAweDkxODQsIDB4MDA3ZiwgMHgwOTBjLCAweGE2ZDksCi0JMHgwMDEwLCAweDcwMzQsIDB4MDgwZiwgMHg3MDQ0LCAweDkwMDUsIDB4MDExOCwgMHgwMzEwLCAweDgwMDEsCi0JMHg3MDQ2LCAweDcwNTQsIDB4OTAwZCwgMHgwMTY4LCAweDcwNTAsIDB4ODAwMSwgMHg3MDUyLCAweDExNDgsCi0JMHg3MDUzLCAweDAwMDksIDB4ODEwOSwgMHg3MTU2LCAweDExMjAsIDB4NzE1OCwgMHg3MTU2LCAweDcwNjAsCi0JMHgwODBmLCAweDcwMTgsIDB4OTAwZCwgMHgwMWQ4LCAweDAwMTYsIDB4NzA3OCwgMHg5MDBkLCAweDAxNTgsCi0JMHg3MDc0LCAweDgwMDEsIDB4NzA3NiwgMHgxMTM4LCAweDcwNzcsIDB4MDAwOSwgMHg4MTA5LCAweDcxN2EsCi0JMHgxMTEwLCAweDcwN2MsIDB4MDgwZiwgMHgwMDFlLCAweDcwMDgsIDB4ODAwMSwgMHg3MDBhLCAweDExMzgsCi0JMHg3MDBiLCAweDAwMDksIDB4ODEwOSwgMHg3MTFhLCAweDExMTAsIDB4NzAxYywgMHgwODBmLCAweDAxMmUsCi0JMHg3MDA0LCAweDAwMDIsIDB4ODcyMCwgMHg4NzIxLCAweDg3M2QsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZmMsCi0JMHg3MDE4LCAweDkwMDUsIDB4MTEyMCwgMHg3MTFhLCAweDcyMWUsIDB4NzAwYiwgMHgwMDA5LCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MDAwNiwgMHgyMDcxLCAweDE5ZmMsIDB4NzAxYywgMHg5MjA2LCAweDExMjAsCi0JMHg3MDFhLCAweDcwMWUsIDB4NzA3YSwgMHg3MDdlLCAweDAwMGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweDE5ZmMsIDB4Yjg4OCwgMHg5MTAyLCAweDAyMDgsIDB4Yjk4YSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMDA1LCAweDAwYjYsIDB4NzExMCwgMHgwODBjLCAweDY3MWQsIDB4MTE2OCwgMHhiODg4LCAweDgwMDEsCi0JMHgwMjUwLCAweGI4OGEsIDB4MTE0MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDE2LCAweDA4MGMsCi0JMHg5OGVkLCAweDAwMWUsIDB4MDEyZSwgMHg4MTA4LCAweDkxODIsIDB4MDgwMCwgMHgwMjE4LCAweDkwMGUsCi0JMHg3MDA3LCAweDAwMDIsIDB4NzExMiwgMHgwMGJlLCAweDAwMDUsIDB4NzAxNCwgMHgyMDYwLCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4NjA0MCwgMHg5MDA1LCAweDAxMjgsIDB4ODAwMSwgMHg2MDQyLCAweDExMTAsCi0JMHgwODBjLCAweGQxNjMsIDB4NjAxOCwgMHg5MDA1LCAweDA1NTgsIDB4ODAwMSwgMHg2MDFhLCAweDE1NDAsCi0JMHg2MTIwLCAweDkxODYsIDB4MDAwMywgMHgwMTQ4LCAweDkxODYsIDB4MDAwNiwgMHgwMTMwLCAweDkxODYsCi0JMHgwMDA5LCAweDExZTAsIDB4NjExYywgMHhkMWM0LCAweDExMDAsIDB4MDgwYywgMHhjZTU2LCAweDAxYjAsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg4NCwgMHg5MDhhLCAweDE5OWEsIDB4MDI4MCwgMHg5MDgyLCAweDE5OTksCi0JMHhhODg2LCAweDkwOGEsIDB4MTk5YSwgMHgwMjEwLCAweDIwMDEsIDB4MTk5OSwgMHg4MDAzLCAweDgwMGIsCi0JMHg4MTBiLCAweDkxMDgsIDB4NjExYSwgMHhhODdjLCAweGQwZTQsIDB4MDExMCwgMHgwODBjLCAweGNiM2UsCi0JMHgwMTJlLCAweDljODgsIDB4MDAxOCwgMHg3MTE2LCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDkxMDIsCi0JMHgwMjIwLCAweDcwMTcsIDB4MWNkMCwgMHg3MDA3LCAweDAwMDAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCi0JMHgxOWZjLCAweDcwMjcsIDB4MDdkMCwgMHg3MDIzLCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxYTA1LCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxOWZjLCAweDcxMzIsCi0JMHg3MDJmLCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDIwMTEsIDB4MWEwOCwgMHgyMDEzLCAweDAwMDAsCi0JMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxOWZjLCAweDcxMWEsIDB4NzIxZSwgMHg3MDBiLCAweDAwMDksCi0JMHgwMGVlLCAweDAwMDUsIDB4MDA4NiwgMHgwMDI2LCAweDcwNWMsIDB4ODAwMCwgMHg3MDVlLCAweDIwMDEsCi0JMHgxYTBjLCAweDIwNDQsIDB4YTA2YywgMHg5MDg2LCAweDAwMDAsIDB4MDE1MCwgMHg3MDcwLCAweGEwOWEsCi0JMHg3MDZjLCAweGEwOTYsIDB4NzA2OCwgMHhhMDkyLCAweDcwNjQsIDB4YTA4ZSwgMHgwODBjLCAweDEwZjgsCi0JMHgwMDJlLCAweDAwOGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDA5NiwgMHgwMGE2LCAweDAwYjYsCi0JMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDAxNTYsIDB4MDgwYywgMHg4NjQyLCAweDAxNWUsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsIDB4MDBhZSwgMHgwMDllLCAweDAwMWUsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZmMsIDB4NzE3YSwgMHg3MjdlLCAweDcwNzcsCi0JMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwMDYsIDB4MjA3MSwgMHgxOWZjLCAweDcwN2MsCi0JMHg5MjA2LCAweDExMTAsIDB4NzA3YSwgMHg3MDdlLCAweDAwMGUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNjksCi0JMHgxODAwLCAweDY5ZTgsIDB4ZDFlNCwgMHgxNTE4LCAweDAwMjYsIDB4ZDFlYywgMHgwMTQwLCAweDZhNTQsCi0JMHg2ODc0LCAweDkyMDIsIDB4MDI4OCwgMHg4MTE3LCAweDkyOTQsIDB4MDBjMCwgMHgwMDg4LCAweDkxODQsCi0JMHgwMDA3LCAweDAxYTAsIDB4ODEwOSwgMHg5MTg0LCAweDAwMDcsIDB4MDExMCwgMHg2OWVhLCAweDAwNzAsCi0JMHg4MTA3LCAweDkwODQsIDB4MDAwNywgMHg5MTBkLCAweDgxMDcsIDB4OTEwNiwgMHg5MDk0LCAweDAwYzAsCi0JMHg5MTg0LCAweGZmM2YsIDB4OTIwNSwgMHg2OGVhLCAweDA4MGMsIDB4MGVlZSwgMHgwMDJlLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwYzYsIDB4MjAwOSwgMHhmZmY0LCAweDIxMGQsIDB4MjA2MSwgMHgwMTAwLCAweDYwZjAsCi0JMHg5MTAwLCAweDYwZjMsIDB4MDAwMCwgMHgyMDA5LCAweGZmZjQsIDB4MjAwZiwgMHgxMjIwLCAweDgxMDgsCi0JMHgyMTA1LCAweDgwMDAsIDB4MjAwZiwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGM2LCAweDIwNjEsCi0JMHgxYTc1LCAweDAwY2UsIDB4MDAwNSwgMHg5MTg0LCAweDAwMGYsIDB4ODAwMywgMHg4MDAzLCAweDgwMDMsCi0JMHg5MDgwLCAweDFhNzUsIDB4MjA2MCwgMHgwMDA1LCAweGE4ODQsIDB4OTA4YSwgMHgxOTlhLCAweDE2MzgsCi0JMHg5MDA1LCAweDExNTAsIDB4MDBjNiwgMHgyMDYxLCAweDFhNzUsIDB4NjAxNCwgMHgwMGNlLCAweDkwMDUsCi0JMHgxMTMwLCAweDIwMDEsIDB4MDAxZSwgMHgwMDE4LCAweDkwOGUsIDB4ZmZmZiwgMHgwMWIwLCAweDgwMDMsCi0JMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHg2MTFhLCAweGE4N2MsIDB4OTA4YywgMHgwMGMwLCAweDkxOGUsCi0JMHgwMGMwLCAweDA5MDQsIDB4ODhjNiwgMHhkMGI0LCAweDExNjgsIDB4ZDBiYywgMHgxOTA0LCAweDg4OWYsCi0JMHgyMDA5LCAweDAwMDYsIDB4MDgwYywgMHg4OGYzLCAweDAwMDUsIDB4OTAwZSwgMHgwYzYwLCAweDIwMDEsCi0JMHgxOTk5LCAweDA4YjAsIDB4ZDBmYywgMHgwMTYwLCAweDkwOGMsIDB4MDAwMywgMHgwMTIwLCAweDkxOGUsCi0JMHgwMDAzLCAweDE5MDQsIDB4ODhlZCwgMHg5MDhjLCAweDIwMjAsIDB4OTE4ZSwgMHgyMDIwLCAweDAxYTgsCi0JMHg2MDI0LCAweGQwZDQsIDB4MTFlOCwgMHgyMDA5LCAweDE4NjksIDB4MjEwNCwgMHhkMDg0LCAweDExMzgsCi0JMHg4N2ZmLCAweDExMjAsIDB4MjAwOSwgMHgwMDQzLCAweDA4MDQsIDB4YjE4MCwgMHgwMDA1LCAweDg3ZmYsCi0JMHgxZGU4LCAweDIwMDksIDB4MDA0MiwgMHgwODA0LCAweGIxODAsIDB4NjExMCwgMHgwMGI2LCAweDIxNTgsCi0JMHhiOTAwLCAweDAwYmUsIDB4ZDFhYywgMHgwZDIwLCAweDYwMjQsIDB4YzBjZCwgMHg2MDI2LCAweDBjMDAsCi0JMHhjMGQ0LCAweDYwMjYsIDB4YTg5MCwgMHg2MDJlLCAweGE4OGMsIDB4NjAzMiwgMHgwOGUwLCAweGQwZmMsCi0JMHgwMTYwLCAweDkwOGMsIDB4MDAwMywgMHgwMTIwLCAweDkxOGUsIDB4MDAwMywgMHgxOTA0LCAweDg4ZWQsCi0JMHg5MDhjLCAweDIwMjAsIDB4OTE4ZSwgMHgyMDIwLCAweDAxNzAsIDB4MDA3NiwgMHgwMGY2LCAweDJjNzgsCi0JMHgwODBjLCAweDE3NjgsIDB4MDBmZSwgMHgwMDdlLCAweDg3ZmYsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDIsCi0JMHgwODBjLCAweGIxODAsIDB4MDAwNSwgMHg2MTEwLCAweDAwYjYsIDB4MjE1OCwgMHhiOTAwLCAweDAwYmUsCi0JMHhkMWFjLCAweDBkNTgsIDB4NjEyNCwgMHhjMWNkLCAweDYxMjYsIDB4MGMzOCwgMHhkMGZjLCAweDAxODgsCi0JMHg5MDhjLCAweDIwMjAsIDB4OTE4ZSwgMHgyMDIwLCAweDAxYTgsIDB4OTA4NCwgMHgwMDAzLCAweDkwOGUsCi0JMHgwMDAyLCAweDAxNDgsIDB4ODdmZiwgMHgxMTIwLCAweDIwMDksIDB4MDA0MSwgMHgwODBjLCAweGIxODAsCi0JMHgwMDA1LCAweDAwYjksIDB4MGNlOCwgMHg4N2ZmLCAweDFkZDgsIDB4MjAwOSwgMHgwMDQzLCAweDA4MGMsCi0JMHhiMTgwLCAweDBjYjAsIDB4NjExMCwgMHgwMGI2LCAweDIxNTgsIDB4YjkwMCwgMHgwMGJlLCAweGQxYWMsCi0JMHgwZDIwLCAweDYxMjQsIDB4YzFjZCwgMHg2MTI2LCAweDBjMDAsIDB4MjAwOSwgMHgwMDA0LCAweDAwMTksCi0JMHgwMDA1LCAweDIwMDksIDB4MDAwMSwgMHgwMDk2LCAweDA4MGMsIDB4Y2U1NiwgMHgwNTE4LCAweDYwMTQsCi0JMHgyMDQ4LCAweGE5ODIsIDB4YTgwMCwgMHg2MDE2LCAweDkxODYsIDB4MDAwMSwgMHgxMTg4LCAweGE5N2MsCi0JMHg5MThjLCAweDgxMDAsIDB4OTE4ZSwgMHg4MTAwLCAweDExNTgsIDB4MDBjNiwgMHgyMDYxLCAweDFhNzUsCi0JMHg2MjAwLCAweGQyOGMsIDB4MTEyMCwgMHg2MjA0LCAweDgyMTAsIDB4MDIwOCwgMHg2MjA2LCAweDAwY2UsCi0JMHgwODBjLCAweDZjMTAsIDB4NjAxNCwgMHg5MDRkLCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDE5MGMsCi0JMHg4ODNjLCAweDAwN2UsIDB4MDA5ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDBjNiwgMHgyMDYxLCAweDFhNzUsCi0JMHg2MDAwLCAweDgxZmYsIDB4MDExMCwgMHg5MjA1LCAweDAwMDgsIDB4OTIwNCwgMHg2MDAyLCAweDAwY2UsCi0JMHgwMTVlLCAweDAwMDUsIDB4NjgwMCwgMHhkMDhjLCAweDExMzgsIDB4NjgwOCwgMHg5MDA1LCAweDAxMjAsCi0JMHg4MDAxLCAweDY4MGEsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MjA3MSwgMHgxOTI1LCAweDcwMDMsCi0JMHgwMDA2LCAweDcwMDcsIDB4MDAwMCwgMHg3MDBmLCAweDAwMDAsIDB4NzAxMywgMHgwMDAxLCAweDA4MGMsCi0JMHgxMDI3LCAweDA5MGMsIDB4MGRjNSwgMHhhODY3LCAweDAwMDYsIDB4YTg2YiwgMHgwMDAxLCAweGE4YWIsCi0JMHhkY2IwLCAweGE4OWYsIDB4MDAwMCwgMHgyOTAwLCAweDcwMmUsIDB4NzAzMywgMHgwMDAwLCAweDAwMDUsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDk2LCAweDAwZTYsIDB4MjA3MSwgMHgxOTI1LCAweDcwMmMsCi0JMHgyMDQ4LCAweDZhMmMsIDB4NzIxZSwgMHg2YjMwLCAweDczMjIsIDB4NjgzNCwgMHg3MDI2LCAweGE4OTYsCi0JMHg2ODM4LCAweDcwMmEsIDB4YTg5YSwgMHg2ODI0LCAweDcwMTYsIDB4NjgzYywgMHg3MDFhLCAweDIwMDksCi0JMHgwMDI4LCAweDIwMGEsIDB4OTAwNSwgMHgwMTQ4LCAweDkwMGUsIDB4OTE4OCwgMHgwMDBjLCAweDgwMDEsCi0JMHgxZGUwLCAweDIxMDAsIDB4OTIxMCwgMHgxMjA4LCAweDgzMTgsIDB4YWE4ZSwgMHhhYjkyLCAweDcwMTAsCi0JMHhkMDg0LCAweDAxNjgsIDB4YzA4NCwgMHg3MDA3LCAweDAwMDEsIDB4NzAwZiwgMHgwMDAwLCAweDAwMDYsCi0JMHgyMDA5LCAweDFhZDIsIDB4MjEwNCwgMHg5MDgyLCAweDAwMDcsIDB4MjAwYSwgMHgwMDBlLCAweGMwOTUsCi0JMHg3MDEyLCAweDIwMDgsIDB4MjAwMSwgMHgwMDNiLCAweDA4MGMsIDB4MTYxMSwgMHg5MDA2LCAweDIwNzEsCi0JMHgxOTNlLCAweDcwMDIsIDB4NzAwNiwgMHg3MDJhLCAweDAwZWUsIDB4MDA5ZSwgMHgwMTJlLCAweDAwMDUsCi0JMHgyMDA5LCAweDFhZDIsIDB4MjEwNCwgMHg5MDgwLCAweDAwMDcsIDB4MjAwYSwgMHgwMDA1LCAweDAwZTYsCi0JMHgwMTI2LCAweDAxNTYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MTU0LCAweDIwMDEsCi0JMHgwMDA4LCAweDkxMGEsIDB4MDYzOCwgMHgyMDAxLCAweDE4N2QsIDB4MjBhYywgMHg5MDA2LCAweDkwODAsCi0JMHgwMDA4LCAweDFmMDQsIDB4ODlhZiwgMHg3MWMwLCAweDkxMDIsIDB4MDJlMCwgMHgyMDcxLCAweDE4NzcsCi0JMHgyMGE5LCAweDAwMDcsIDB4MDBjNiwgMHgwODBjLCAweGIwYWIsIDB4NjAyMywgMHgwMDA5LCAweDYwMDMsCi0JMHgwMDA0LCAweDYwMWYsIDB4MDEwMSwgMHgwMDg5LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg4YjJkLCAweDAxMmUsIDB4MWYwNCwgMHg4OWJiLCAweDkwMDYsIDB4MDBjZSwgMHgwMTVlLCAweDAxMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDBjYzgsIDB4MDBlNiwgMHgwMGI2LCAweDAwOTYsCi0JMHgwMDg2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDI2LCAweDcxMTgsIDB4NzIwYywgMHg3NjIwLCAweDcwMDQsCi0JMHhkMDg0LCAweDExMjgsIDB4MjAyMSwgMHgwMDI0LCAweDIwMjksIDB4MDAwMiwgMHgwMDIwLCAweDIwMjEsCi0JMHgwMDJjLCAweDIwMjksIDB4MDAwYSwgMHgwODBjLCAweDEwMGUsIDB4MDkwYywgMHgwZGM1LCAweDI5MDAsCi0JMHg2MDE2LCAweDIwNTgsIDB4YWM2NiwgMHg5MDA2LCAweGE4MDIsIDB4YTgwNiwgMHhhODZhLCAweGE4N2EsCi0JMHhhOGFhLCAweGE4ODcsIDB4MDAwNSwgMHhhODdmLCAweDAwMjAsIDB4NzAwOCwgMHhhODlhLCAweDcwMTAsCi0JMHhhODllLCAweGFlOGEsIDB4YThhZiwgMHhmZmZmLCAweGE4YjMsIDB4MDAwMCwgMHg4MTA5LCAweDAxNjAsCi0JMHgwODBjLCAweDEwMGUsIDB4MDkwYywgMHgwZGM1LCAweGFkNjYsIDB4MmIwMCwgMHhhODAyLCAweDI5MDAsCi0JMHhiODA2LCAweDIwNTgsIDB4ODEwOSwgMHgxZGEwLCAweDAwMmUsIDB4MDA0ZSwgMHgwMDVlLCAweDAwOGUsCi0JMHgwMDllLCAweDAwYmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzksIDB4MDAwMCwgMHgyMDcxLCAweDE5MjUsCi0JMHg3MDA0LCAweDAwNGIsIDB4NzAwYywgMHgwMDAyLCAweDhhMjcsIDB4OGEyMCwgMHg4YTIwLCAweDAwMDUsCi0JMHg4YTMxLCAweDhhODcsIDB4OGE4NywgMHg4YTg3LCAweDhhODgsIDB4OGE5OSwgMHg4YTk5LCAweDcwMGMsCi0JMHgwY2JhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDc4YTAsIDB4NzlhMCwgMHg5MTA2LCAweDE5MDQsCi0JMHg4YTc5LCAweDc4MTQsIDB4ZDBiYywgMHgxOTA0LCAweDhhODIsIDB4MDEyZSwgMHg3MDE4LCAweDkxMGEsCi0JMHgxMTI4LCAweDcwMzAsIDB4OTAwNSwgMHgxOTA0LCAweDhhY2IsIDB4MDAwNSwgMHgxMjEwLCAweDcxMTQsCi0JMHg5MTBhLCAweDkxOTIsIDB4MDAwYSwgMHgwMjEwLCAweDIwMDksIDB4MDAwYSwgMHgyMDAxLCAweDE4ODgsCi0JMHgyMDE0LCAweDIwMDEsIDB4MTkzNywgMHgyMDA0LCAweDkxMDAsIDB4OTIwMiwgMHgwZTUwLCAweDA4MGMsCi0JMHg4YzI1LCAweDIyMDAsIDB4OTEwMiwgMHgwMjA4LCAweDIyMDgsIDB4MDA5NiwgMHg3MDJjLCAweDIwNDgsCi0JMHhhODczLCAweDAwMDEsIDB4YTk3NiwgMHgwODBjLCAweDhkMmUsIDB4MjEwMCwgMHhhODdlLCAweGE4NmYsCi0JMHgwMDAwLCAweDAwOWUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHgxYTFjLCAweDIxMDQsCi0JMHhjMDg1LCAweDIwMGEsIDB4NzAwZiwgMHgwMDAyLCAweDAxMmUsIDB4MDgwYywgMHgxMTE3LCAweDFkZTgsCi0JMHgwMDA1LCAweDc4YTAsIDB4NzlhMCwgMHg5MTA2LCAweDA5MDQsIDB4OGEzOSwgMHgwODBjLCAweDhiZmQsCi0JMHgwMTJlLCAweDAwMDUsIDB4NzgxMCwgMHhjMGM1LCAweDc4MTIsIDB4MDgwNCwgMHg4YTM5LCAweDAwMDUsCi0JMHg3MDBjLCAweDAwMDIsIDB4OGE4ZCwgMHg4YTkwLCAweDhhOGYsIDB4MDgwYywgMHg4YTJmLCAweDAwMDUsCi0JMHg4MDAxLCAweDcwMGUsIDB4MDA5NiwgMHg3MDJjLCAweDIwNDgsIDB4YTk3NCwgMHgwMDllLCAweDAwMTEsCi0JMHgwY2EwLCAweDAwMDUsIDB4MDA5NiwgMHg3MDJjLCAweDIwNDgsIDB4NzAxOCwgMHg5MTAwLCAweDcyMTQsCi0JMHg5MjFhLCAweDExMzAsIDB4NzAxYywgMHhhODhlLCAweDcwMjAsIDB4YTg5MiwgMHg5MDA2LCAweDAwNjgsCi0JMHgwMDA2LCAweDA4MGMsIDB4OGQyZSwgMHgyMTAwLCAweGFhOGMsIDB4OTIxMCwgMHhhYThlLCAweDEyMjAsCi0JMHhhODkwLCAweDkwODEsIDB4MDAwMCwgMHhhODkyLCAweDAwMGUsIDB4MDA5ZSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDc4YTIsIDB4NzAxYSwgMHgwODBjLCAweDhiZmQsIDB4MDEyZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweDE5MjUsIDB4NzAwYywgMHgwMDAyLCAweDhhYzksIDB4OGFjOSwgMHg4YWM3LCAweDcwMGYsCi0JMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDMwLCAweDkwMDUsCi0JMHgwNTA4LCAweDIwNzgsIDB4NzgxNCwgMHgyMDQ4LCAweGFlODgsIDB4MDBiNiwgMHgyMDU5LCAweDAwMDAsCi0JMHgwODBjLCAweDhiMzYsIDB4MDBiZSwgMHgwMWIwLCAweDAwZTYsIDB4MjA3MSwgMHgxOTNlLCAweDA4MGMsCi0JMHg4YjdkLCAweDAwZWUsIDB4MDE3OCwgMHgwMDk2LCAweDA4MGMsIDB4MTAyNywgMHgyOTAwLCAweDAwOWUsCi0JMHgwMTQ4LCAweGE4YWEsIDB4MDRiOSwgMHgwMDQxLCAweDIwMDEsIDB4MTk0OCwgMHgyMDAzLCAweDAwMDAsCi0JMHgwMTJlLCAweDA4YzgsIDB4MDEyZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBjNiwgMHgwMDg2LCAweDAwYTYsCi0JMHgyOTQwLCAweDI2NTAsIDB4MjYwMCwgMHg5MDA1LCAweDAxODAsIDB4YTg2NCwgMHg5MDg0LCAweDAwMGYsCi0JMHgyMDY4LCAweDlkODgsIDB4MjBmMCwgMHgyMTY1LCAweDAwNTYsIDB4MjAyOSwgMHgwMDAwLCAweDA4MGMsCi0JMHg4Y2IzLCAweDA4MGMsIDB4MjBhOCwgMHgxZGQ4LCAweDAwNWUsIDB4MDBhZSwgMHgyMDAxLCAweDE4N2YsCi0JMHgyMDA0LCAweGE4OGEsIDB4MDgwYywgMHgxNzY4LCAweDc4MWYsIDB4MDEwMSwgMHg3ODEzLCAweDAwMDAsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDhiOGMsIDB4MDEyZSwgMHgwMDhlLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwMDUsIDB4NzAzMCwgMHg5MDA1LCAweDAxMzgsIDB4MjA3OCwgMHg3ODBjLCAweDcwMzIsCi0JMHgyMDAxLCAweDE5NDgsIDB4MjAwMywgMHgwMDAxLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE5MjUsCi0JMHg3MDMwLCAweDYwMGUsIDB4MmMwMCwgMHg3MDMyLCAweDAwZWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwYzYsCi0JMHgwMDI2LCAweDliODAsIDB4OGRmYywgMHgyMDA1LCAweDkwNmQsIDB4MDkwYywgMHgwZGM1LCAweDliODAsCi0JMHg4ZGY0LCAweDIwMDUsIDB4OTA2NSwgMHgwOTBjLCAweDBkYzUsIDB4NjExNCwgMHgyNjAwLCAweDkxMDIsCi0JMHgwMjQ4LCAweDY4MjgsIDB4OTEwMiwgMHgwMmYwLCAweDkwODUsIDB4MDAwMSwgMHgwMDJlLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwMDUsIDB4NjgwNCwgMHhkMDk0LCAweDAxNDgsIDB4Njg1NCwgMHhkMDg0LCAweDExNzgsCi0JMHhjMDg1LCAweDY4NTYsIDB4MjAxMSwgMHg4MDI2LCAweDA4MGMsIDB4NGJlOSwgMHg2ODRjLCAweDAwOTYsCi0JMHg5MDRkLCAweDA5MGMsIDB4MGRjNSwgMHhhODA0LCAweDgwMDAsIDB4YTgwNiwgMHgwMDllLCAweDkwMDYsCi0JMHgyMDMwLCAweDBjMjAsIDB4Njg1NCwgMHhkMDhjLCAweDFkMDgsIDB4YzA4ZCwgMHg2ODU2LCAweDIwMTEsCi0JMHg4MDI1LCAweDA4MGMsIDB4NGJlOSwgMHg2ODRjLCAweDAwOTYsIDB4OTA0ZCwgMHgwOTBjLCAweDBkYzUsCi0JMHhhODAwLCAweDgwMDAsIDB4YTgwMiwgMHgwMDllLCAweDA4ODgsIDB4NzAwMCwgMHgyMDE5LCAweDAwMDgsCi0JMHg4MzE5LCAweDcxMDQsIDB4OTEwMiwgMHgxMTE4LCAweDIzMDAsIDB4OTAwNSwgMHgwMDIwLCAweDAyMTAsCi0JMHg5MzAyLCAweDAwMDgsIDB4ODAwMiwgMHgwMDA1LCAweDAwZDYsIDB4NzgxNCwgMHg5MDA1LCAweDA5MGMsCi0JMHgwZGM1LCAweDc4MWMsIDB4OTA4NCwgMHgwMTAxLCAweDkwODYsIDB4MDEwMSwgMHgxOTBjLCAweDBkYzUsCi0JMHg3ODI3LCAweDAwMDAsIDB4MjA2OSwgMHgxOTNlLCAweDY4MDQsIDB4OTA4MCwgMHgxOTQwLCAweDJmMDgsCi0JMHgyMTAyLCAweDY5MDQsIDB4ODEwOCwgMHg5MTgyLCAweDAwMDgsIDB4MDIwOCwgMHg5MDBlLCAweDY5MDYsCi0JMHg5MTgwLCAweDE5NDAsIDB4MjAwMywgMHgwMDAwLCAweDAwZGUsIDB4MDAwNSwgMHgwMDk2LCAweDAwYzYsCi0JMHgyMDYwLCAweDYwMTQsIDB4MjA0OCwgMHhhOGE4LCAweDAwOTYsIDB4MjA0OCwgMHg5MDA1LCAweDE5MGMsCi0JMHgxMDQwLCAweDAwOWUsIDB4YThhYiwgMHgwMDAwLCAweDA4MGMsIDB4MGZjMCwgMHgwODBjLCAweGIxMDEsCi0JMHgwMGNlLCAweDAwOWUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwOSwgMHgxMTI4LCAweDYwMWMsCi0JMHhkMGM0LCAweDAxMTAsIDB4OTAwNiwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDAsIDB4MDE3OCwgMHg2MDEwLCAweDkwMDUsIDB4MDE1MCwgMHgwMGI2LCAweDIwNTgsCi0JMHgwODBjLCAweDhmMzEsIDB4MDBiZSwgMHg2MDEzLCAweDAwMDAsIDB4NjAxYiwgMHgwMDAwLCAweDAwMTAsCi0JMHgyYzAwLCAweDA4NjEsIDB4MDAwNSwgMHgyMDA5LCAweDE5MjksIDB4MjEwYywgMHhkMTk0LCAweDAwMDUsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGU2LCAweDIwNzEsIDB4MTkyNSwgMHg3MTEwLCAweGMxOTQsCi0JMHhkMTljLCAweDExMTgsIDB4YzE4NSwgMHg3MDA3LCAweDAwMDAsIDB4NzExMiwgMHgyMDAxLCAweDAwM2IsCi0JMHgwODBjLCAweDE2MTEsIDB4MDBlZSwgMHgwMTJlLCAweDAwMDUsIDB4NzgxNCwgMHhkMGJjLCAweDExMDgsCi0JMHgwMDA1LCAweDc4MTAsIDB4YzBjNSwgMHg3ODEyLCAweDBjYzAsIDB4MDA5NiwgMHgwMGQ2LCAweDkwMDYsCi0JMHg3MDA2LCAweDcwMGUsIDB4NzAxYSwgMHg3MDFlLCAweDcwMjIsIDB4NzAxNiwgMHg3MDJhLCAweDcwMjYsCi0JMHg3MDJmLCAweDAwMDAsIDB4MDgwYywgMHg4ZDdjLCAweDAxNzAsIDB4MDgwYywgMHg4ZGIxLCAweDAxNTgsCi0JMHgyOTAwLCAweDcwMDIsIDB4NzAwYSwgMHg3MDFhLCAweDcwMTMsIDB4MDAwMSwgMHg3MDFmLCAweDAwMGEsCi0JMHgwMGRlLCAweDAwOWUsIDB4MDAwNSwgMHg5MDBlLCAweDBjZDgsIDB4MDBlNiwgMHgwMDk2LCAweDAwODYsCi0JMHgwMGQ2LCAweDAwYzYsIDB4MjA3MSwgMHgxOTMyLCAweDcyMWMsIDB4MjEwMCwgMHg5MjAyLCAweDE2MTgsCi0JMHgwODBjLCAweDhkYjEsIDB4MDkwYywgMHgwZGM1LCAweDcwMTgsIDB4OTAwNSwgMHgxMTYwLCAweDI5MDAsCi0JMHg3MDAyLCAweDcwMGEsIDB4NzAxYSwgMHg5MDA2LCAweDcwMDYsIDB4NzAwZSwgMHhhODA2LCAweGE4MDIsCi0JMHg3MDEyLCAweDcwMWUsIDB4MDAzOCwgMHgyMDQwLCAweGE4MDYsIDB4MjkwMCwgMHhhMDAyLCAweDcwMWEsCi0JMHhhODAzLCAweDAwMDAsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxYywgMHg5MDgwLCAweDAwMGEsCi0JMHg3MDFlLCAweDcyMWMsIDB4MDhkMCwgMHg3MjFjLCAweDAwY2UsIDB4MDBkZSwgMHgwMDhlLCAweDAwOWUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDA5NiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgwMGU2LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOTMyLCAweDczMDAsIDB4ODMxZiwgMHg4MzFlLCAweDgzMWUsCi0JMHg5Mzg0LCAweDAwM2YsIDB4MjBlOCwgMHg5MzljLCAweGZmYzAsIDB4OTM5OCwgMHgwMDAzLCAweDcxMDQsCi0JMHgwODBjLCAweDhkMmUsIDB4ODEwYywgMHgyMTAwLCAweDkzMTgsIDB4ODAwMywgMHgyMjI4LCAweDIwMjEsCi0JMHgwMDc4LCAweDk0MDIsIDB4OTUzMiwgMHgwMjA4LCAweDIwMjgsIDB4MjUwMCwgMHg4MDA0LCAweDIwYTgsCi0JMHgyM2EwLCAweGEwMDEsIDB4YTAwMSwgMHg0MDA1LCAweDI1MDgsIDB4MDgwYywgMHg4ZDM3LCAweDIxMzAsCi0JMHg3MDE0LCAweDk2MDAsIDB4NzAxNiwgMHgyNjAwLCAweDcxMWMsIDB4OTEwMiwgMHg3MDFlLCAweDcwMDQsCi0JMHg5NjAwLCAweDIwMDgsIDB4OTA4MiwgMHgwMDBhLCAweDExOTAsIDB4NzAwMCwgMHgyMDQ4LCAweGE4MDAsCi0JMHg5MDA1LCAweDExNDgsIDB4MjAwOSwgMHgwMDAxLCAweDAwMjYsIDB4MDgwYywgMHg4YzI1LCAweDAwMmUsCi0JMHg3MDAwLCAweDIwNDgsIDB4YTgwMCwgMHg3MDAyLCAweDcwMDcsIDB4MDAwMCwgMHgwMDA4LCAweDcxMDYsCi0JMHgyNTAwLCAweDkyMTIsIDB4MTkwNCwgMHg4YzY0LCAweDAxMmUsIDB4MDBlZSwgMHgwMTRlLCAweDAxM2UsCi0JMHgwMTVlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDk1ODAsIDB4OGRmNCwgMHgyMDA1LCAweDkwNzUsIDB4MDkwYywgMHgwZGM1LCAweDA4MGMsCi0JMHg4ZDA5LCAweDAxMmUsIDB4OTU4MCwgMHg4ZGYwLCAweDIwMDUsIDB4OTA3NSwgMHgwOTBjLCAweDBkYzUsCi0JMHgwMTU2LCAweDAxMzYsIDB4MDFjNiwgMHgwMTQ2LCAweDAxZDYsIDB4ODMxZiwgMHg4MzFlLCAweDgzMWUsCi0JMHg5Mzg0LCAweDAwM2YsIDB4MjBlMCwgMHg5Mzg0LCAweGZmYzAsIDB4OTEwMCwgMHgyMDk4LCAweGE4NjAsCi0JMHgyMGU4LCAweGE5NWMsIDB4MmMwNSwgMHg5MTAwLCAweDIwYTAsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDMsCi0JMHgyZTBjLCAweDJkMDAsIDB4MDAwMiwgMHg4Y2YzLCAweDhjZjMsIDB4OGNmNSwgMHg4Y2YzLCAweDhjZjUsCi0JMHg4Y2YzLCAweDhjZjMsIDB4OGNmMywgMHg4Y2YzLCAweDhjZjMsIDB4OGNmYiwgMHg4Y2YzLCAweDhjZmIsCi0JMHg4Y2YzLCAweDhjZjMsIDB4OGNmMywgMHgwODBjLCAweDBkYzUsIDB4NDEwNCwgMHgyMGE5LCAweDAwMDIsCi0JMHg0MDAyLCAweDQwMDMsIDB4MDAyOCwgMHgyMGE5LCAweDAwMDIsIDB4NDAwMywgMHg0MTA0LCAweDQwMDMsCi0JMHgwMWRlLCAweDAxNGUsIDB4MDFjZSwgMHgwMTNlLCAweDAxNWUsIDB4MDBlZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMDA1LCAweDAwOTYsIDB4NzAxNCwgMHg4MDAxLCAweDcwMTYsIDB4NzEwYywgMHgyMTEwLCAweDAwZjEsCi0JMHg4MTBjLCAweDkxODgsIDB4MDAwMywgMHg3MzA4LCAweDgyMTAsIDB4OTI4MiwgMHgwMDBhLCAweDExOTgsCi0JMHg3MDA4LCAweDIwNDgsIDB4YTgwMCwgMHg5MDA1LCAweDAxNTgsIDB4MDAwNiwgMHgwODBjLCAweDhkYzAsCi0JMHgwMDllLCAweGE4MDcsIDB4MDAwMCwgMHgyOTAwLCAweDcwMGEsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsCi0JMHg3MDBmLCAweDAwMDAsIDB4MDAwOCwgMHg3MjBlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDA2LCAweDgxMGIsCi0JMHg4MTBiLCAweDIxMDAsIDB4ODEwYiwgMHg5MTAwLCAweDIwMDgsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgwMDI2LCAweDIxMDAsIDB4OTAwNSwgMHgwMTU4LCAweDkwOTIsIDB4MDAwYywgMHgwMjQwLCAweDkwMGUsCi0JMHg4MTA4LCAweDkwODIsIDB4MDAwYywgMHgxZGUwLCAweDAwMmUsIDB4MDAwZSwgMHgwMDA1LCAweDkwMGUsCi0JMHgwY2Q4LCAweDJkMDAsIDB4OTBiOCwgMHgwMDA4LCAweDIwMzEsIDB4OGQ3YSwgMHg5MDFlLCAweDY4MDgsCi0JMHg5MDA1LCAweDAxMDgsIDB4ODMxOCwgMHg2OTBjLCAweDkxMGEsIDB4MDI0OCwgMHgwMTQwLCAweDgzMTgsCi0JMHg2ODEwLCAweDkxMTIsIDB4MDIyMCwgMHgwMTE4LCAweDgzMTgsIDB4MjIwOCwgMHgwY2QwLCAweDIzM2EsCi0JMHg2ODA0LCAweGQwODQsIDB4MjMwMCwgMHgyMDIxLCAweDAwMDEsIDB4MTE1MCwgMHg5MDgyLCAweDAwMDMsCi0JMHgwOTY3LCAweDBhNjcsIDB4ODQyMCwgMHg5MDgyLCAweDAwMDcsIDB4MDk2NywgMHgwYTY3LCAweDBjZDAsCi0JMHg5MDgyLCAweDAwMDIsIDB4MDk2NywgMHgwYTY3LCAweDg0MjAsIDB4OTA4MiwgMHgwMDA1LCAweDA5NjcsCi0JMHgwYTY3LCAweDBjZDAsIDB4NmMxYSwgMHgwMDA1LCAweDAwOTYsIDB4MDA0NiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDJiMDAsIDB4OTA4MCwgMHg4ZGY4LCAweDIwMDUsIDB4OTAwNSwgMHgwOTBjLCAweDBkYzUsCi0JMHgyMDA0LCAweDkwYTAsIDB4MDAwYSwgMHgwODBjLCAweDEwMjcsIDB4MDFkMCwgMHgyOTAwLCAweDcwMjYsCi0JMHhhODAzLCAweDAwMDAsIDB4YTgwNywgMHgwMDAwLCAweDA4MGMsIDB4MTAyNywgMHgwMTg4LCAweDcwMjQsCi0JMHhhODAyLCAweGE4MDcsIDB4MDAwMCwgMHgyOTAwLCAweDcwMjYsIDB4OTRhMiwgMHgwMDBhLCAweDAxMTAsCi0JMHgwMjA4LCAweDBjOTAsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDA0ZSwgMHgwMDllLCAweDAwMDUsCi0JMHg3MDI0LCAweDkwMDUsIDB4MGRjOCwgMHgyMDQ4LCAweGFjMDAsIDB4MDgwYywgMHgxMDQwLCAweDI0MDAsCi0JMHgwY2MwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMjQsIDB4MjA0OCwgMHg5MDA1LCAweDAxMzAsCi0JMHhhODAwLCAweDcwMjYsIDB4YTgwMywgMHgwMDAwLCAweGE4MDcsIDB4MDAwMCwgMHgwMTJlLCAweDAwMDUsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDI0LCAweGE4MDIsIDB4MjkwMCwgMHg3MDI2LCAweDAxMmUsCi0JMHgwMDA1LCAweDAwOTYsIDB4OWU4MCwgMHgwMDA5LCAweDIwMDQsIDB4OTAwNSwgMHgwMTM4LCAweDIwNDgsCi0JMHhhODAwLCAweDAwMDYsIDB4MDgwYywgMHgxMDQwLCAweDAwMGUsIDB4MGNiOCwgMHgwMDllLCAweDAwMDUsCi0JMHgwMDk2LCAweDcwMDgsIDB4OTAwNSwgMHgwMTM4LCAweDIwNDgsIDB4YTgwMCwgMHgwMDA2LCAweDA4MGMsCi0JMHgxMDQwLCAweDAwMGUsIDB4MGNiOCwgMHg5MDA2LCAweDcwMDIsIDB4NzAwYSwgMHg3MDA2LCAweDcwMGUsCi0JMHg3MDFhLCAweDcwMWUsIDB4NzAyMiwgMHg3MDJhLCAweDcwMjYsIDB4NzAyZSwgMHgwMDllLCAweDAwMDUsCi0JMHgxYTY4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDE5MzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCi0JMHgxODg4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDE4NzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCi0JMHgwMGU2LCAweDAwYzYsIDB4MDBiNiwgMHgwMGE2LCAweGE4YTgsIDB4MjA0MCwgMHgyMDcxLCAweDE4NzcsCi0JMHgwODBjLCAweDhmMWMsIDB4YTA2NywgMHgwMDIzLCAweDYwMTAsIDB4OTA1ZCwgMHgwOTA0LCAweDhlZjEsCi0JMHhiODE0LCAweGEwNmUsIDB4YjkxMCwgMHhhMTcyLCAweGI5YTAsIDB4YTE3NiwgMHgyMDAxLCAweDAwMDMsCi0JMHhhMDdlLCAweGE4MzQsIDB4YTA4MiwgMHhhMDdiLCAweDAwMDAsIDB4YTg5OCwgMHg5MDA1LCAweDAxMTgsCi0JMHhhMDc4LCAweGMwODUsIDB4YTA3YSwgMHgyODU4LCAweDIwMzEsIDB4MDAxOCwgMHhhMDY4LCAweDkwOGEsCi0JMHgwMDE5LCAweDFhMGMsIDB4MGRjNSwgMHgyMDIwLCAweDIwNTAsIDB4Mjk0MCwgMHhhODY0LCAweDkwYmMsCi0JMHgwMGZmLCAweDkwOGMsIDB4MDAwZiwgMHg5MWUwLCAweDIwZjAsIDB4MmM2NSwgMHg5Nzg2LCAweDAwMjQsCi0JMHgyYzA1LCAweDE1OTAsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsIDB4MGRjNSwgMHg5MDgyLCAweDAwMWIsCi0JMHgwMDAyLCAweDhlNWMsIDB4OGU1YywgMHg4ZTVlLCAweDhlNWMsIDB4OGU1YywgMHg4ZTVjLCAweDhlNjAsCi0JMHg4ZTVjLCAweDhlNWMsIDB4OGU1YywgMHg4ZTYyLCAweDhlNWMsIDB4OGU1YywgMHg4ZTVjLCAweDhlNjQsCi0JMHg4ZTVjLCAweDhlNWMsIDB4OGU1YywgMHg4ZTY2LCAweDhlNWMsIDB4OGU1YywgMHg4ZTVjLCAweDhlNjgsCi0JMHg4ZTVjLCAweDhlNWMsIDB4OGU1YywgMHg4ZTZhLCAweDA4MGMsIDB4MGRjNSwgMHhhMTgwLCAweDA0YjgsCi0JMHhhMTkwLCAweDA0YTgsIDB4YTFhMCwgMHgwNDk4LCAweGExYjAsIDB4MDQ4OCwgMHhhMWMwLCAweDA0NzgsCi0JMHhhMWQwLCAweDA0NjgsIDB4YTFlMCwgMHgwNDU4LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkYzUsCi0JMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHg4ZThlLCAweDhlOGMsIDB4OGU4YywgMHg4ZThjLCAweDhlOGMsCi0JMHg4ZThjLCAweDhlOTAsIDB4OGU4YywgMHg4ZThjLCAweDhlOGMsIDB4OGU4YywgMHg4ZThjLCAweDhlOTIsCi0JMHg4ZThjLCAweDhlOGMsIDB4OGU4YywgMHg4ZThjLCAweDhlOGMsIDB4OGU5NCwgMHg4ZThjLCAweDhlOGMsCi0JMHg4ZThjLCAweDhlOGMsIDB4OGU4YywgMHg4ZTk2LCAweDA4MGMsIDB4MGRjNSwgMHhhMTgwLCAweDAwMzgsCi0JMHhhMTk4LCAweDAwMjgsIDB4YTFiMCwgMHgwMDE4LCAweGExYzgsIDB4MDAwOCwgMHhhMWUwLCAweDI2MDAsCi0JMHgwMDAyLCAweDhlYjIsIDB4OGViNCwgMHg4ZWI2LCAweDhlYjgsIDB4OGViYSwgMHg4ZWJjLCAweDhlYmUsCi0JMHg4ZWMwLCAweDhlYzIsIDB4OGVjNCwgMHg4ZWM2LCAweDhlYzgsIDB4OGVjYSwgMHg4ZWNjLCAweDhlY2UsCi0JMHg4ZWQwLCAweDhlZDIsIDB4OGVkNCwgMHg4ZWQ2LCAweDhlZDgsIDB4OGVkYSwgMHg4ZWRjLCAweDhlZGUsCi0JMHg4ZWUwLCAweDhlZTIsIDB4MDgwYywgMHgwZGM1LCAweGI5ZTIsIDB4MDQ2OCwgMHhiOWRlLCAweDA0NTgsCi0JMHhiOWRhLCAweDA0NDgsIDB4YjlkNiwgMHgwNDM4LCAweGI5ZDIsIDB4MDQyOCwgMHhiOWNlLCAweDA0MTgsCi0JMHhiOWNhLCAweDA0MDgsIDB4YjljNiwgMHgwMGY4LCAweGI5YzIsIDB4MDBlOCwgMHhiOWJlLCAweDAwZDgsCi0JMHhiOWJhLCAweDAwYzgsIDB4YjliNiwgMHgwMGI4LCAweGI5YjIsIDB4MDBhOCwgMHhiOWFlLCAweDAwOTgsCi0JMHhiOWFhLCAweDAwODgsIDB4YjlhNiwgMHgwMDc4LCAweGI5YTIsIDB4MDA2OCwgMHhiOTllLCAweDAwNTgsCi0JMHhiOTlhLCAweDAwNDgsIDB4Yjk5NiwgMHgwMDM4LCAweGI5OTIsIDB4MDAyOCwgMHhiOThlLCAweDAwMTgsCi0JMHhiOThhLCAweDAwMDgsIDB4Yjk4NiwgMHg4NjMxLCAweDg0MjEsIDB4MDEzMCwgMHgwODBjLCAweDIwYTgsCi0JMHgwOTBjLCAweDBkYzUsIDB4MDgwNCwgMHg4ZTM2LCAweDAwYWUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMDA1LCAweGE4NmMsIDB4YTA2ZSwgMHhhODcwLCAweGEwNzIsIDB4YTA3NywgMHgwMGZmLCAweDkwMDYsCi0JMHgwODA0LCAweDhlMTgsIDB4MDAwNiwgMHgwMDE2LCAweDAwYjYsIDB4NjAxMCwgMHgyMDU4LCAweGI4MTAsCi0JMHg5MDA1LCAweDAxYjAsIDB4MjAwMSwgMHgxOTI2LCAweDIwMDQsIDB4OTAwNSwgMHgwMTg4LCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDExNTgsIDB4MDAzNiwgMHgwMDQ2LCAweGJiYTAsCi0JMHgyMDIxLCAweDAwMDQsIDB4MjAxMSwgMHg4MDE0LCAweDA4MGMsIDB4NGJlOSwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMGJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDkwMTYsIDB4NzEwYywgMHhhODM0LCAweDkxMGEsCi0JMHhhOTM2LCAweDcwMDgsIDB4OTAwNSwgMHgwMTIwLCAweDgyMTAsIDB4OTEwYSwgMHgwMjM4LCAweDAxMzAsCi0JMHg3MDEwLCAweDgyMTAsIDB4OTEwYSwgMHgwMjEwLCAweDAxMDgsIDB4MGNkOCwgMHhhYThhLCAweGEyNmEsCi0JMHgwMDA1LCAweDAwZjYsIDB4MDBkNiwgMHgwMDM2LCAweDIwNzksIDB4MDMwMCwgMHg3ODFiLCAweDAyMDAsCi0JMHg3ODE4LCAweGQwOTQsIDB4MWRkOCwgMHg3ODFiLCAweDAyMDIsIDB4YTAwMSwgMHhhMDAxLCAweDc4MTgsCi0JMHhkMDk0LCAweDFkYTAsIDB4YjhhYywgMHg5MDA1LCAweDAxYjgsIDB4MjA2OCwgMHgyMDc5LCAweDAwMDAsCi0JMHgyYzA4LCAweDkxMWUsIDB4MTExOCwgMHg2ODBjLCAweGI4YWUsIDB4MDA2MCwgMHg5MTA2LCAweDAxNDAsCi0JMHgyZDAwLCAweDIwNzgsIDB4NjgwYywgMHg5MDA1LCAweDA5MGMsIDB4MGRjNSwgMHgyMDY4LCAweDBjYjAsCi0JMHg2YjBjLCAweDdiMGUsIDB4NjAwZiwgMHgwMDAwLCAweDIwNzksIDB4MDMwMCwgMHg3ODFiLCAweDAyMDAsCi0JMHgwMDNlLCAweDAwZGUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMDk2LCAweDAwYzYsCi0JMHgwMDM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAxNTYsIDB4MjBhOSwgMHgwMWZmLCAweDIwNzEsCi0JMHgwMzAwLCAweDcwMWIsIDB4MDIwMCwgMHg3MDE4LCAweGQwOTQsIDB4MDExMCwgMHgxZjA0LCAweDhmNzEsCi0JMHg3MDFiLCAweDAyMDIsIDB4YTAwMSwgMHhhMDAxLCAweDcwMTgsIDB4ZDA5NCwgMHgxZDkwLCAweGI4YWMsCi0JMHg5MDA1LCAweDAxZTgsIDB4MjA2MCwgMHg2MDBjLCAweGI4YWUsIDB4NjAyNCwgMHhjMDhkLCAweDYwMjYsCi0JMHg2MDAzLCAweDAwMDQsIDB4NjAxYiwgMHgwMDAwLCAweDYwMTMsIDB4MDAwMCwgMHg2MDFmLCAweDAxMDEsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg4YiwgMHgwMDAwLCAweGE4YTgsIDB4YThhYiwgMHgwMDAwLCAweDkwNGQsCi0JMHgwOTBjLCAweDBkYzUsIDB4MDgwYywgMHgxMDQwLCAweDA4MGMsIDB4OGIyZCwgMHgwYzAwLCAweDIwNzEsCi0JMHgwMzAwLCAweDcwMWIsIDB4MDIwMCwgMHgwMTVlLCAweDAxMmUsIDB4MDAzZSwgMHgwMGNlLCAweDAwOWUsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGM2LCAweDAwYjYsIDB4MDAxNiwgMHgwMDA2LCAweDAxNTYsCi0JMHgwODBjLCAweDI4OTQsIDB4MDE1ZSwgMHgxMWIwLCAweDA4MGMsIDB4NjZiMiwgMHgxOTBjLCAweDBkYzUsCi0JMHgwMDBlLCAweDAwMWUsIDB4YjkxMiwgMHhiODE2LCAweDA4MGMsIDB4YjBhYiwgMHgwMTQwLCAweDJiMDAsCi0JMHg2MDEyLCAweDYwMjMsIDB4MDAwMSwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHhiMTgwLCAweDAwYmUsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDAwZSwgMHgwMDFlLCAweDBjZDAsIDB4MDA2NiwgMHg2MDAwLCAweDkwYjIsCi0JMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwgMHg4ZmU2LCAweDhmZTYsCi0JMHg4ZmU2LCAweDhmZTgsIDB4OTAzOSwgMHg4ZmU2LCAweDhmZTYsIDB4OGZlNiwgMHg5MGEwLCAweDhmZTYsCi0JMHg5MGRkLCAweDhmZTYsIDB4OGZlNiwgMHg4ZmU2LCAweDhmZTYsIDB4OGZlNiwgMHgwODBjLCAweDBkYzUsCi0JMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHg4ZmZiLCAweDhmZmIsIDB4OGZmYiwgMHg4ZmZiLCAweDhmZmIsCi0JMHg4ZmZiLCAweDhmZmIsIDB4OGZmYiwgMHg4ZmZiLCAweDhmZmQsIDB4OTAxMiwgMHg4ZmZiLCAweDhmZmIsCi0JMHg4ZmZiLCAweDhmZmIsIDB4OTAyNSwgMHgwODBjLCAweDBkYzUsIDB4MDA5NiwgMHgwODBjLCAweDk4OWQsCi0JMHgwODBjLCAweDlhMGYsIDB4NjExNCwgMHgyMTQ4LCAweGE4N2IsIDB4MDAwMCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4YmIsIDB4MDUwMCwgMHgwMGJlLCAweDA4MGMsIDB4NmJkNSwgMHgwODBjLCAweGIxMDEsCi0JMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHg5ODlkLCAweDAwZDYsIDB4NjExNCwgMHgwODBjLCAweGNlNTYsCi0JMHgwMTMwLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4NmRkMSwgMHgwMDllLCAweDAwZGUsCi0JMHgwODBjLCAweGIxMDEsIDB4MDgwYywgMHg5YTBmLCAweDAwMDUsIDB4MDgwYywgMHg5ODlkLCAweDA4MGMsCi0JMHgzMjQ2LCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweDA4MGMsIDB4Y2U1NiwgMHgwMTIwLCAweGE4N2IsCi0JMHgwMDI5LCAweDA4MGMsIDB4NmRkMSwgMHgwMDllLCAweDA4MGMsIDB4YjEwMSwgMHgwODBjLCAweDlhMGYsCi0JMHgwMDA1LCAweDYwMWIsIDB4MDAwMCwgMHg5MTgyLCAweDAwNDAsIDB4MDA5NiwgMHgwMDAyLCAweDkwNTQsCi0JMHg5MDU0LCAweDkwNTQsIDB4OTA1NCwgMHg5MDU0LCAweDkwNTQsIDB4OTA1NCwgMHg5MDU0LCAweDkwNTYsCi0JMHg5MDU0LCAweDkwNTQsIDB4OTA1NCwgMHg5MDljLCAweDkwNTQsIDB4OTA1NCwgMHg5MDU0LCAweDkwNTQsCi0JMHg5MDU0LCAweDkwNTQsIDB4OTA1ZCwgMHg5MDU0LCAweDA4MGMsIDB4MGRjNSwgMHg2MTE0LCAweDIxNDgsCi0JMHhhOTM4LCAweDkxOGUsIDB4ZmZmZiwgMHgwOTA0LCAweDkwOWMsIDB4NjAyNCwgMHhkMDhjLCAweDE1YzAsCi0JMHgwMGU2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLCAweDhlMDAsIDB4MDA5NiwgMHhhOGE4LCAweDIwNDgsCi0JMHgwODBjLCAweDZiNmQsIDB4MDA5ZSwgMHhhOGFiLCAweDAwMDAsIDB4NjAxMCwgMHg5MDA1LCAweDAxMjgsCi0JMHgwMGI2LCAweDIwNTgsIDB4MDgwYywgMHg4ZjMxLCAweDAwYmUsIDB4YWU4OCwgMHgwMGI2LCAweDIwNTksCi0JMHgwMDAwLCAweDA4MGMsIDB4OGIzNiwgMHgwMGJlLCAweDAxZTAsIDB4MjA3MSwgMHgxOTNlLCAweDA4MGMsCi0JMHg4YjdkLCAweDAxYjgsIDB4OTA4NiwgMHgwMDAxLCAweDExMjgsIDB4MjAwMSwgMHgxOTQ4LCAweDIwMDQsCi0JMHg5MDA1LCAweDExNzgsIDB4MDA5NiwgMHgwODBjLCAweDEwMGUsIDB4MjkwMCwgMHgwMDllLCAweDAxNDgsCi0JMHhhOGFhLCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweDhhZjQsIDB4MDBmZSwgMHgwMGVlLCAweDAwOWUsCi0JMHgwMDA1LCAweDA4MGMsIDB4OGIyZCwgMHgwY2QwLCAweDA4MGMsIDB4OTE0YSwgMHgwMDllLCAweDAwMDUsCi0JMHg5MTgyLCAweDAwNDAsIDB4MDA5NiwgMHgwMDAyLCAweDkwYjQsIDB4OTBiNCwgMHg5MGI0LCAweDkwYjYsCi0JMHg5MGI0LCAweDkwYjQsIDB4OTBiNCwgMHg5MGRiLCAweDkwYjQsIDB4OTBiNCwgMHg5MGI0LCAweDkwYjQsCi0JMHg5MGI0LCAweDkwYjQsIDB4OTBiNCwgMHg5MGI0LCAweDA4MGMsIDB4MGRjNSwgMHg2MDAzLCAweDAwMDMsCi0JMHg2MTA2LCAweDYwMTQsIDB4MjA0OCwgMHhhOGFjLCAweGE4NDYsIDB4YThiMCwgMHhhODRhLCAweGE4MzcsCi0JMHgwMDAwLCAweGE4M2IsIDB4MDAwMCwgMHhhODg0LCAweDkwOTIsIDB4MTk5YSwgMHgwMjEwLCAweDIwMDEsCi0JMHgxOTk5LCAweDgwMDMsIDB4ODAxMywgMHg4MjEzLCAweDkyMTAsIDB4NjIxYSwgMHgyYzEwLCAweDA4MGMsCi0JMHgxYzA5LCAweDA4MGMsIDB4OTNhMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDlhMGYsCi0JMHgwMTJlLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweDBkYzUsIDB4MDgwYywgMHg5ODlkLCAweDA4MGMsCi0JMHg5YTBmLCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLCAweDAwMDAsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsCi0JMHhiOGJiLCAweDA1MDAsIDB4MDBiZSwgMHgwODBjLCAweDZkZDEsIDB4MDgwYywgMHhiMTAxLCAweDAwOWUsCi0JMHgwMDA1LCAweDYwMDAsIDB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHgwMDk2LCAweDAwMTMsCi0JMHgwMDllLCAweDAwMDUsIDB4OTEwYSwgMHg5MTBhLCAweDkxMGEsIDB4OTEwYywgMHg5MTFkLCAweDkxMGEsCi0JMHg5MTBhLCAweDkxMGEsIDB4OTEwYSwgMHg5MTBhLCAweDkxMGEsIDB4OTEwYSwgMHg5MTBhLCAweDkxMGEsCi0JMHg5MTBhLCAweDkxMGEsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4YWE1OSwgMHg2MTE0LCAweDIxNDgsCi0JMHhhODdiLCAweDAwMDYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjhiYiwgMHgwNTAwLCAweDAwYmUsCi0JMHgwODBjLCAweDZkZDEsIDB4MDgwYywgMHhiMTAxLCAweDAwMDUsIDB4MDQ2MSwgMHgwMDA1LCAweDYwMDAsCisJMHgwMDg4LCAweDA4MGMsIDB4MmQzOSwgMHg2MTI0LCAweGQxY2MsIDB4MTFlOCwgMHhkMWRjLCAweDExYzAsCisJMHhkMWU0LCAweDExOTgsIDB4OTE4NCwgMHgxZTAwLCAweDExZDgsIDB4MDgwYywgMHgxYjA2LCAweDYwZTMsCisJMHgwMDAxLCAweDYwMGMsIDB4YzBiNCwgMHg2MDBlLCAweDA4MGMsIDB4NzY2MywgMHgyMDAxLCAweDAwODAsCisJMHgwODBjLCAweDJkMzksIDB4NzA5YiwgMHgwMDI5LCAweDAwNTgsIDB4NzA5YiwgMHgwMDFlLCAweDAwNDAsCisJMHg3MDliLCAweDAwMWQsIDB4MDAyOCwgMHg3MDliLCAweDAwMjAsIDB4MDAxMCwgMHg3MDliLCAweDAwMWYsCisJMHgwMDA1LCAweDA4MGMsIDB4MWIwNiwgMHg2MGUzLCAweDAwMDEsIDB4NjAwYywgMHhjMGI0LCAweDYwMGUsCisJMHgwODBjLCAweDc2NjMsIDB4MjAwMSwgMHgwMDgwLCAweDA4MGMsIDB4MmQzOSwgMHg2MTI0LCAweGQxZDQsCisJMHgxMTk4LCAweGQxZGMsIDB4MTE3MCwgMHhkMWU0LCAweDExNDgsIDB4OTE4NCwgMHgxZTAwLCAweDExMTgsCisJMHg3MDliLCAweDAwMjksIDB4MDA1OCwgMHg3MDliLCAweDAwMjgsIDB4MDA0MCwgMHg3MDliLCAweDAwMWUsCisJMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOWIsIDB4MDAxZiwgMHgwMDA1LCAweDYxMjQsCisJMHhkMWQ0LCAweDExODAsIDB4ZDFkYywgMHgxMTU4LCAweGQxZTQsIDB4MTEzMCwgMHg5MTg0LCAweDFlMDAsCisJMHgxMTU4LCAweDcwOWIsIDB4MDAyOSwgMHgwMDQwLCAweDcwOWIsIDB4MDAxZSwgMHgwMDI4LCAweDcwOWIsCisJMHgwMDFkLCAweDAwMTAsIDB4NzA5YiwgMHgwMDFmLCAweDAwMDUsIDB4MjAwMSwgMHgwMGEwLCAweDA4MGMsCisJMHgyZDM5LCAweDYxMjQsIDB4ZDFkYywgMHgxMTM4LCAweGQxZTQsIDB4MDEzOCwgMHgwODBjLCAweDFiMDYsCisJMHg3MDliLCAweDAwMWUsIDB4MDAxMCwgMHg3MDliLCAweDAwMWQsIDB4MDAwNSwgMHgwODBjLCAweDc1MTcsCisJMHg2MTI0LCAweGQxZGMsIDB4MTE4OCwgMHgwODBjLCAweDc0OTQsIDB4MDAxNiwgMHgwODBjLCAweDFiMDYsCisJMHgwMDFlLCAweGQxZDQsIDB4MTEyOCwgMHhkMWU0LCAweDAxMzgsIDB4NzA5YiwgMHgwMDFlLCAweDAwMjAsCisJMHg3MDliLCAweDAwMWYsIDB4MDgwYywgMHg3NDk0LCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDAwYTAsCisJMHgwODBjLCAweDJkMzksIDB4MDAwZSwgMHg2MTI0LCAweGQxZDQsIDB4MTE2MCwgMHhkMWNjLCAweDExNTAsCisJMHhkMWRjLCAweDExMjgsIDB4ZDFlNCwgMHgwMTQwLCAweDcwOWIsIDB4MDAxZSwgMHgwMDI4LCAweDcwOWIsCisJMHgwMDFkLCAweDAwMTAsIDB4NzA5YiwgMHgwMDIxLCAweDAwMDUsIDB4MDgwYywgMHg3NTE3LCAweDYxMjQsCisJMHhkMWQ0LCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsIDB4MDE0MCwgMHg3MDliLCAweDAwMWUsCisJMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOWIsIDB4MDAxZiwgMHgwMDA1LCAweDAwMDYsCisJMHgyMDAxLCAweDAwOTAsIDB4MDgwYywgMHgyZDM5LCAweDAwMGUsIDB4NjEyNCwgMHhkMWQ0LCAweDExNzgsCisJMHhkMWNjLCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsIDB4MDE1OCwgMHg3MDliLCAweDAwMWUsCisJMHgwMDQwLCAweDcwOWIsIDB4MDAxZCwgMHgwMDI4LCAweDcwOWIsIDB4MDAyMCwgMHgwMDEwLCAweDcwOWIsCisJMHgwMDFmLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMTI2LCAweDIwNjEsCisJMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLCAweDE4MDAsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCisJMHg3NjM3LCAweDExZDgsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsIDB4ZDFiNCwgMHgwMWIwLCAweGMxYjQsCisJMHgyMTAyLCAweDYwMjcsIDB4MDIwMCwgMHgwODBjLCAweDJjNjEsIDB4NjAyNCwgMHhkMGNjLCAweDAxNDgsCisJMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyZDM5LCAweDA4MGMsIDB4NzkzMiwgMHgwODBjLCAweDYxMmUsCisJMHgwNDI4LCAweDYwMjgsIDB4YzBjZCwgMHg2MDJhLCAweDA0MDgsIDB4MDgwYywgMHg3NjUxLCAweDAxNTAsCisJMHgwODBjLCAweDc2NDgsIDB4MTEzOCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyODFjLCAweDA4MGMsCisJMHg3NjBmLCAweDAwYTAsIDB4MDgwYywgMHg3NTE0LCAweDAxNzgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCisJMHgyODFjLCAweDcwOTgsIDB4OTA4NiwgMHgwMDFlLCAweDAxMjAsIDB4NzA5OCwgMHg5MDg2LCAweDAwMjIsCisJMHgxMTE4LCAweDcwOWIsIDB4MDAyNSwgMHgwMDEwLCAweDcwOWIsIDB4MDAyMSwgMHgwMTJlLCAweDAwZWUsCisJMHgwMGRlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwMjYsIDB4MjAxMSwgMHg3NGE1LCAweDA4MGMsCisJMHg4OTE3LCAweDAwMmUsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDksIDB4MDA2NCwgMHgyMDExLCAweDc0YTUsCisJMHgwODBjLCAweDg5MGUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGY2LCAweDAwMTYsCisJMHgwODBjLCAweGE2ZTksIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4NzQ0MiwgMHgwMDFlLCAweDAwZmUsCisJMHgwMGVlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsCisJMHgwMGY2LCAweDAxMjYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4YTZlOSwgMHgyMDYxLCAweDAxMDAsCisJMHgyMDY5LCAweDAxNDAsIDB4MjA5MSwgMHg4MDAwLCAweDYwMjgsIDB4YzA5YywgMHg2MDJhLCAweDIwMTEsCisJMHgwMDAzLCAweDA4MGMsIDB4YWFiZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHhhYWM5LCAweDA4MGMsCisJMHhhOWQzLCAweDA4MGMsIDB4ODhjMywgMHgwMDM2LCAweDkwMWUsIDB4MDgwYywgMHhhYTQ5LCAweDAwM2UsCisJMHg2MGUzLCAweDAwMDAsIDB4MDgwYywgMHhmMDdmLCAweDA4MGMsIDB4ZjA5YSwgMHgyMDA5LCAweDAwMDQsCisJMHgwODBjLCAweDJjNjcsIDB4MDgwYywgMHgyYjgyLCAweDIwMDEsIDB4MTgwMCwgMHgyMDAzLCAweDAwMDQsCisJMHg2MDI3LCAweDAwMDgsIDB4MjAxMSwgMHg3NGE1LCAweDA4MGMsIDB4ODkxNywgMHgwODBjLCAweDc2NTEsCisJMHgwMTE4LCAweDkwMDYsIDB4MDgwYywgMHgyZDM5LCAweDA4MGMsIDB4MGJhMCwgMHgyMDAxLCAweDAwMDEsCisJMHgwODBjLCAweDI4MWMsIDB4MDEyZSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwM2UsCisJMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDI2LCAweDAwZTYsIDB4MjAxMSwgMHg3NGIyLCAweDIwNzEsCisJMHgxOWZiLCAweDcwMWMsIDB4OTIwNiwgMHgxMTE4LCAweDcwMTgsIDB4OTAwNSwgMHgwMTEwLCAweDkwODUsCisJMHgwMDAxLCAweDAwZWUsIDB4MDAyZSwgMHgwMDA1LCAweDYwMjAsIDB4ZDA5YywgMHgwMDA1LCAweDY4MDAsCisJMHg5MDg0LCAweGZmZmUsIDB4OTA4NiwgMHgwMGMwLCAweDAxYjgsIDB4MjAwMSwgMHgwMGMwLCAweDA4MGMsCisJMHgyZDM5LCAweDAxNTYsIDB4MjBhOSwgMHgwMDJkLCAweDFkMDQsIDB4NzUyNCwgMHgyMDkxLCAweDYwMDAsCisJMHgxZjA0LCAweDc1MjQsIDB4MDE1ZSwgMHgwMGQ2LCAweDIwNjksIDB4MTgwMCwgMHg2ODljLCAweDgwMDEsCisJMHgwMjIwLCAweDAxMTgsIDB4Njg5ZSwgMHgwMGRlLCAweDAwMDUsIDB4Njg5ZiwgMHgwMDE0LCAweDY4ZTgsCisJMHhkMGRjLCAweDBkYzgsIDB4NjgwMCwgMHg5MDg2LCAweDAwMDEsIDB4MWRhOCwgMHgwODBjLCAweDg5MjMsCisJMHgwYzkwLCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsCisJMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHg3OTQxLCAweDIwMDEsIDB4MTk2ZCwgMHgyMDAzLCAweDAwMDAsCisJMHg5MDA2LCAweDcwOWEsIDB4NjBlMiwgMHg2ODg2LCAweDA4MGMsIDB4MjhlNywgMHg5MDA2LCAweDA4MGMsCisJMHgyZDM5LCAweDA4MGMsIDB4NWZlZCwgMHg2MDI3LCAweGZmZmYsIDB4NjAyYiwgMHgxODJmLCAweDAwZWUsCisJMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsCisJMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLCAweDIwMDEsIDB4MTk3ZCwgMHgyMDBjLCAweDkxODYsCisJMHgwMDAwLCAweDAxNTgsIDB4OTE4NiwgMHgwMDAxLCAweDAxNTgsIDB4OTE4NiwgMHgwMDAyLCAweDAxNTgsCisJMHg5MTg2LCAweDAwMDMsIDB4MDE1OCwgMHgwODA0LCAweDc1ZmYsIDB4NzA5YiwgMHgwMDIyLCAweDAwNDAsCisJMHg3MDliLCAweDAwMjEsIDB4MDAyOCwgMHg3MDliLCAweDAwMjMsIDB4MDAxMCwgMHg3MDliLCAweDAwMjQsCisJMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAxLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI4ZTcsCisJMHgwMDI2LCAweDA4MGMsIDB4YjI0NCwgMHgwMDJlLCAweDcwMDAsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMTgsCisJMHg2MDJiLCAweDAwMjgsIDB4MDAxMCwgMHg2MDJiLCAweDAwMjAsIDB4MDE1NiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDIwYTksIDB4MDAwNSwgMHg2MDI0LCAweGQwYWMsIDB4MDE1MCwgMHgwMTJlLCAweDAxNWUsCisJMHgwODBjLCAweGQ3ZTMsIDB4MDExOCwgMHg5MDA2LCAweDA4MGMsIDB4MmQ2MywgMHgwODA0LCAweDc2MGIsCisJMHg2ODAwLCAweDkwODQsIDB4MDBhMSwgMHhjMGJkLCAweDY4MDIsIDB4MDgwYywgMHgyYzYxLCAweDY5MDQsCisJMHhkMWQ0LCAweDExNDAsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmQzOSwgMHgxZjA0LCAweDc1YTMsCisJMHgwODBjLCAweDc2OGIsIDB4MDEyZSwgMHgwMTVlLCAweDA4MGMsIDB4NzY0OCwgMHgwMWQ4LCAweDYwNDQsCisJMHg5MDA1LCAweDAxOTgsIDB4MjAxMSwgMHgwMTE0LCAweDIyMDQsIDB4OTA4NSwgMHgwMTAwLCAweDIwMTIsCisJMHg2MDUwLCAweDAwMDYsIDB4OTA4NSwgMHgwMDIwLCAweDYwNTIsIDB4MDgwYywgMHg3NjhiLCAweDkwMDYsCisJMHg4MDAxLCAweDFkZjAsIDB4MDAwZSwgMHg2MDUyLCAweDAwMjgsIDB4NjgwNCwgMHhkMGQ0LCAweDExMTAsCisJMHgwODBjLCAweDc2OGIsIDB4MDgwYywgMHhkN2UzLCAweDAxMTgsIDB4OTAwNiwgMHgwODBjLCAweDJkNjMsCisJMHgwMDE2LCAweDAwMjYsIDB4NzAwMCwgMHg5MDhlLCAweDAwMDQsIDB4MDEzMCwgMHgyMDA5LCAweDAwYzgsCisJMHgyMDExLCAweDc0YjIsIDB4MDgwYywgMHg4OGQ1LCAweDAwMmUsIDB4MDAxZSwgMHgwODBjLCAweDg3MWMsCisJMHg3MDM0LCAweGMwODUsIDB4NzAzNiwgMHgyMDAxLCAweDE5N2QsIDB4MjAwMywgMHgwMDA0LCAweDA4MGMsCisJMHg3MmY1LCAweDA4MGMsIDB4NzY0OCwgMHgwMTM4LCAweDY4MDQsIDB4ZDBkNCwgMHgxMTIwLCAweGQwZGMsCisJMHgxMTAwLCAweDA4MGMsIDB4NzkzNywgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsCisJMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLCAweDE4MDAsCisJMHgwODBjLCAweDg3MzMsIDB4MDgwYywgMHg4NzI1LCAweDA4MGMsIDB4Nzk0MSwgMHgyMDAxLCAweDE5NmQsCisJMHgyMDAzLCAweDAwMDAsIDB4OTAwNiwgMHg3MDlhLCAweDYwZTIsIDB4Njg4NiwgMHgwODBjLCAweDI4ZTcsCisJMHg5MDA2LCAweDA4MGMsIDB4MmQzOSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDYwMjcsCisJMHhmZmZmLCAweDYwMmIsIDB4MTgyZiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMDYsCisJMHgyMDAxLCAweDE5N2MsIDB4MjAwNCwgMHg5MDg2LCAweGFhYWEsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCisJMHgwODBjLCAweDU3ZDksIDB4OTA4NCwgMHgwMDMwLCAweDkwODYsIDB4MDAwMCwgMHgwMDBlLCAweDAwMDUsCisJMHgwMDA2LCAweDA4MGMsIDB4NTdkOSwgMHg5MDg0LCAweDAwMzAsIDB4OTA4NiwgMHgwMDMwLCAweDAwMGUsCisJMHgwMDA1LCAweDAwMDYsIDB4MDgwYywgMHg1N2Q5LCAweDkwODQsIDB4MDAzMCwgMHg5MDg2LCAweDAwMTAsCisJMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwODBjLCAweDU3ZDksIDB4OTA4NCwgMHgwMDMwLCAweDkwODYsCisJMHgwMDIwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDM2LCAweDAwMTYsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsCisJMHg5MDhjLCAweDAwMTMsIDB4MDE2OCwgMHgwMDIwLCAweDA4MGMsIDB4MjkwNywgMHg5MDBlLCAweDAwMTAsCisJMHgyMDA5LCAweDAwMDIsIDB4MjAxOSwgMHgwMDI4LCAweDA4MGMsIDB4MzIxYiwgMHg5MDA2LCAweDAwMTksCisJMHgwMDFlLCAweDAwM2UsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTgwYywgMHgyZTA0LCAweDAxMzAsCisJMHgwODBjLCAweGQ3ZGMsIDB4MTEyOCwgMHg5MDg1LCAweDAwMTAsIDB4MDAxMCwgMHg5MDg0LCAweGZmZWYsCisJMHgyMDcyLCAweDAwZWUsIDB4MDAwNSwgMHg2MDUwLCAweDAwMDYsIDB4NjBlYywgMHgwMDA2LCAweDYwMGMsCisJMHgwMDA2LCAweDYwMDQsIDB4MDAwNiwgMHg2MDI4LCAweDAwMDYsIDB4MDAxNiwgMHg2MTM4LCAweDYwNTAsCisJMHg5MDg0LCAweGZiZmYsIDB4OTA4NSwgMHgyMDAwLCAweDYwNTIsIDB4NjEzYSwgMHgyMGE5LCAweDAwMTIsCisJMHgxZDA0LCAweDc2YTAsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NzZhMCwgMHg2MDJmLCAweDAxMDAsCisJMHg2MDJmLCAweDAwMDAsIDB4NjA1MCwgMHg5MDg1LCAweDA0MDAsIDB4OTA4NCwgMHhkZmZmLCAweDYwNTIsCisJMHg2MTNhLCAweDAwMWUsIDB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwMDBlLCAweDYwMmEsCisJMHgwMDBlLCAweDYwMDYsIDB4MDAwZSwgMHg2MDBlLCAweDAwMGUsIDB4NjBlZSwgMHg2MGUzLCAweDAwMDAsCisJMHg2ODg3LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjhlNywgMHgyMDAxLCAweDAwYTAsCisJMHgwMDA2LCAweDA4MGMsIDB4ZDdlMywgMHgwMDBlLCAweDAxMzAsIDB4MDgwYywgMHgyZDU3LCAweDkwMDYsCisJMHgwODBjLCAweDJkNjMsIDB4MDAxMCwgMHgwODBjLCAweDJkMzksIDB4MDAwZSwgMHg2MDUyLCAweDYwNTAsCisJMHgwMDA2LCAweGMwZTUsIDB4NjA1MiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgwODBjLCAweDJiZDYsCisJMHgwMGZlLCAweDAwMGUsIDB4NjA1MiwgMHgwMDA1LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCisJMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDIwNzEsCisJMHgxODAwLCAweDYwMjAsIDB4OTA4NCwgMHgwMDgwLCAweDAxMzgsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCisJMHhjMWM1LCAweDIxMDIsIDB4MDgwNCwgMHg3NzY2LCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxYzQsCisJMHgyMTAyLCAweDYwMjgsIDB4OTA4NCwgMHhlMWZmLCAweDYwMmEsIDB4NjAyNywgMHgwMjAwLCAweDIwMDEsCisJMHgwMDkwLCAweDA4MGMsIDB4MmQzOSwgMHgyMGE5LCAweDAzNjYsIDB4NjAyNCwgMHhkMGNjLCAweDE1MTgsCisJMHgxZDA0LCAweDc3MGQsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NzcwZCwgMHgyMDExLCAweDAwMDMsCisJMHgwODBjLCAweGFhYmYsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsIDB4YWFjOSwgMHgwODBjLCAweGE5ZDMsCisJMHg5MDFlLCAweDA4MGMsIDB4YWE0OSwgMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyZDM5LCAweDA4MGMsCisJMHg3OTMyLCAweDA4MGMsIDB4NjEyZSwgMHgwODBjLCAweGQ3ZTMsIDB4MDExMCwgMHgwODBjLCAweDBkMzMsCisJMHg5MDg1LCAweDAwMDEsIDB4MDRjOCwgMHgwODBjLCAweDFiMDYsIDB4NjBlMywgMHgwMDAwLCAweDIwMDEsCisJMHgxODBkLCAweDIwMDQsIDB4ZDA4YywgMHgyMDAxLCAweDAwMDIsIDB4MTExOCwgMHgyMDAxLCAweDE5NmQsCisJMHgyMDA0LCAweDA4MGMsIDB4MjhlNywgMHg2MGUyLCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLCAweDJkMzksCisJMHgyMGE5LCAweDAzNjYsIDB4NjAyNywgMHgxZTAwLCAweDIwMDksIDB4MWUwMCwgMHgwODBjLCAweDJjNjEsCisJMHg2MDI0LCAweDkxMGMsIDB4MDE0MCwgMHgxZDA0LCAweDc3NGEsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsCisJMHg3NzRhLCAweDA4MDQsIDB4NzcxNiwgMHg2MDI4LCAweDkwODUsIDB4MWUwMCwgMHg2MDJhLCAweDcwYjQsCisJMHg5MDA1LCAweDExMTgsIDB4Njg4NywgMHgwMDAxLCAweDAwMDgsIDB4Njg4NiwgMHgwODBjLCAweGQ3ZTMsCisJMHgwMTEwLCAweDA4MGMsIDB4MGQzMywgMHg5MDA2LCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwM2UsCisJMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCisJMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHgxODAwLCAweDcwMDAsCisJMHg5MDg2LCAweDAwMDMsIDB4MTE2OCwgMHgyMDAxLCAweDAyMGIsIDB4MjAwNCwgMHg5MDg0LCAweDU1NDAsCisJMHg5MDg2LCAweDU1NDAsIDB4MTEyOCwgMHgyMDY5LCAweDFhN2MsIDB4MmQwNCwgMHg4MDAwLCAweDIwNmEsCisJMHgyMDY5LCAweDAxNDAsIDB4NjAyMCwgMHg5MDg0LCAweDAwYzAsIDB4MDEyMCwgMHg2ODg0LCAweDkwMDUsCisJMHgxOTA0LCAweDc3ZDksIDB4MjAwMSwgMHgwMDg4LCAweDA4MGMsIDB4MmQzOSwgMHg5MDA2LCAweDYwZTIsCisJMHg2ODg2LCAweDA4MGMsIDB4MjhlNywgMHgyMDY5LCAweDAyMDAsIDB4NjgwNCwgMHg5MDA1LCAweDExMTgsCisJMHg2ODA4LCAweDkwMDUsIDB4MDFjMCwgMHg2MDI4LCAweDkwODQsIDB4ZmJmZiwgMHg2MDJhLCAweDYwMjcsCisJMHgwNDAwLCAweDIwNjksIDB4MTk4ZiwgMHg3MDAwLCAweDIwNmEsIDB4NzA5YiwgMHgwMDI2LCAweDcwMDMsCisJMHgwMDAxLCAweDIwYTksIDB4MDAwMiwgMHgxZDA0LCAweDc3YmIsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsCisJMHg3N2JiLCAweDA4MDQsIDB4NzgxMCwgMHgyMDY5LCAweDAxNDAsIDB4MjBhOSwgMHgwMzg0LCAweDYwMjcsCisJMHgxZTAwLCAweDIwMDksIDB4MWUwMCwgMHgwODBjLCAweDJjNjEsIDB4NjAyNCwgMHg5MTBjLCAweDA1MDgsCisJMHg5MDg0LCAweDFhMDAsIDB4MTFmMCwgMHgxZDA0LCAweDc3YzcsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsCisJMHg3N2M3LCAweDIwMTEsIDB4MDAwMywgMHgwODBjLCAweGFhYmYsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsCisJMHhhYWM5LCAweDA4MGMsIDB4YTlkMywgMHg5MDFlLCAweDA4MGMsIDB4YWE0OSwgMHgyMDAxLCAweDAwYTAsCisJMHgwODBjLCAweDJkMzksIDB4MDgwYywgMHg3OTMyLCAweDA4MGMsIDB4NjEyZSwgMHg5MDg1LCAweDAwMDEsCisJMHgwMGY4LCAweDA4MGMsIDB4MWIwNiwgMHgyMDAxLCAweDAwODAsIDB4MDgwYywgMHgyZDM5LCAweDIwNjksCisJMHgwMTQwLCAweDYwZTMsIDB4MDAwMCwgMHg3MGI0LCAweDkwMDUsIDB4MTExOCwgMHg2ODg3LCAweDAwMDEsCisJMHgwMDA4LCAweDY4ODYsIDB4MjAwMSwgMHgxODBkLCAweDIwMDQsIDB4ZDA4YywgMHgyMDAxLCAweDAwMDIsCisJMHgxMTE4LCAweDIwMDEsIDB4MTk2ZCwgMHgyMDA0LCAweDA4MGMsIDB4MjhlNywgMHg2MGUyLCAweDkwMDYsCisJMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMTVlLCAweDAwMDUsCisJMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNjEsCisJMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHg2MDIwLCAweDkwODQsIDB4MDBjMCwgMHgwMWM4LCAweDIwMTEsCisJMHgwMDAzLCAweDA4MGMsIDB4YWFiZiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHhhYWM5LCAweDA4MGMsCisJMHhhOWQzLCAweDkwMWUsIDB4MDgwYywgMHhhYTQ5LCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLCAweDAwYTAsCisJMHgwODBjLCAweDJkMzksIDB4MDgwYywgMHg3OTMyLCAweDA4MGMsIDB4NjEyZSwgMHgwODA0LCAweDc4YjIsCisJMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhkMWI0LCAweDExNjAsIDB4YzFiNSwgMHgyMTAyLCAweDA4MGMsCisJMHg3NDlhLCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLCAweDAwODAsIDB4MDgwYywgMHgyZDM5LCAweDYwZTMsCisJMHgwMDAwLCAweDIwNjksIDB4MDIwMCwgMHg2ODA0LCAweDkwMDUsIDB4MTExOCwgMHg2ODA4LCAweDkwMDUsCisJMHgwMTgwLCAweDYwMjgsIDB4OTA4NCwgMHhmZGZmLCAweDYwMmEsIDB4NjAyNywgMHgwMjAwLCAweDIwNjksCisJMHgxOThmLCAweDcwMDAsIDB4MjA2YSwgMHg3MDliLCAweDAwMjcsIDB4NzAwMywgMHgwMDAxLCAweDA4MDQsCisJMHg3OGIyLCAweDYwMjcsIDB4MWUwMCwgMHgyMDA5LCAweDFlMDAsIDB4MDgwYywgMHgyYzYxLCAweDYwMjQsCisJMHg5MTBjLCAweDAxYzgsIDB4OTA4NCwgMHgxYzAwLCAweDExYjAsIDB4MWQwNCwgMHg3ODY5LCAweDAwMDYsCisJMHgwMDE2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDA4MGMsIDB4ODc3NiwgMHgwMGVlLCAweDAwZGUsCisJMHgwMGNlLCAweDAwMWUsIDB4MDAwZSwgMHgwMGU2LCAweDIwNzEsIDB4MTlmYiwgMHg3MDc4LCAweDAwZWUsCisJMHg5MDA1LCAweDE5ZjgsIDB4MDQzOCwgMHgwMDI2LCAweDIwMTEsIDB4NzRiMiwgMHgwODBjLCAweDg4M2QsCisJMHgyMDExLCAweDc0YTUsIDB4MDgwYywgMHg4OTE3LCAweDAwMmUsIDB4MjA2OSwgMHgwMTQwLCAweDYwZTMsCisJMHgwMDAwLCAweDcwYjQsIDB4OTAwNSwgMHgxMTE4LCAweDY4ODcsIDB4MDAwMSwgMHgwMDA4LCAweDY4ODYsCisJMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLCAweDIwMDEsIDB4MDAwMiwgMHgxMTE4LCAweDIwMDEsCisJMHgxOTZkLCAweDIwMDQsIDB4MDgwYywgMHgyOGU3LCAweDYwZTIsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCisJMHhjMWI0LCAweDIxMDIsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwMTVlLCAweDAwMDUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LCAweDAwYzYsCisJMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHhkN2RjLCAweDE5MDQsCisJMHg3OTIwLCAweDcxMzAsIDB4ZDE4NCwgMHgxMTcwLCAweDA4MGMsIDB4MzNhYSwgMHgwMTM4LCAweGMxOGQsCisJMHg3MTMyLCAweDIwMTEsIDB4MTg0OCwgMHgyMjE0LCAweGQyYWMsIDB4MTEyMCwgMHg3MDMwLCAweGQwOGMsCisJMHgwOTA0LCAweDc5MjAsIDB4MjAxMSwgMHgxODQ4LCAweDIyMGMsIDB4ZDFhNCwgMHgwNTM4LCAweDAwMTYsCisJMHgyMDE5LCAweDAwMGUsIDB4MDgwYywgMHhlYmExLCAweDAxNTYsIDB4MDBiNiwgMHgyMGE5LCAweDAwN2YsCisJMHg5MDBlLCAweDkxODYsIDB4MDA3ZSwgMHgwMWEwLCAweDkxODYsIDB4MDA4MCwgMHgwMTg4LCAweDA4MGMsCisJMHg2NzI0LCAweDExNzAsIDB4MjEyMCwgMHg5MDA2LCAweDAwMTYsIDB4MjAwOSwgMHgwMDBlLCAweDA4MGMsCisJMHhlYzMxLCAweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MDgwYywgMHg4YTUwLCAweDAwMWUsCisJMHg4MTA4LCAweDFmMDQsIDB4NzhlOSwgMHgwMGJlLCAweDAxNWUsIDB4MDAxZSwgMHhkMWFjLCAweDExNDgsCisJMHgwMDE2LCAweDIwMDksIDB4MDAwMiwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHgzMjFiLCAweDAwMWUsCisJMHgwMDc4LCAweDAxNTYsIDB4MDBiNiwgMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwODBjLCAweDY3MjQsCisJMHgxMTEwLCAweDA4MGMsIDB4NjE0OCwgMHg4MTA4LCAweDFmMDQsIDB4NzkxNiwgMHgwMGJlLCAweDAxNWUsCisJMHgwODBjLCAweDFiMDYsIDB4MDgwYywgMHhiMjQ0LCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweDYxMmUsCisJMHgwODBjLCAweDc1NjMsIDB4MDBlZSwgMHgwMGNlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwMTVlLCAweDAwMDUsIDB4MjAwMSwgMHgxOTdkLCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDIwMDEsCisJMHgxOTdkLCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LCAweDIwMDEsIDB4MTk3YywgMHgyMDAzLCAweGFhYWEsCisJMHgwMDA1LCAweDIwMDEsIDB4MTk3YywgMHgyMDAzLCAweDAwMDAsIDB4MDAwNSwgMHgyMDcxLCAweDE4ZmEsCisJMHg3MDAzLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLCAweDA4MGMsIDB4MTAyNywgMHgwOTBjLCAweDBkYzUsCisJMHhhOGFiLCAweGRjYjAsIDB4MjkwMCwgMHg3MDRlLCAweDA4MGMsIDB4MTAyNywgMHgwOTBjLCAweDBkYzUsCisJMHhhOGFiLCAweGRjYjAsIDB4MjkwMCwgMHg3MDUyLCAweGE4NjcsIDB4MDAwMCwgMHhhODZiLCAweDAwMDEsCisJMHhhODlmLCAweDAwMDAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDA0MCwgMHg2ODQ4LCAweDkwMDUsCisJMHgxMTE4LCAweDkwODUsIDB4MDAwMSwgMHgwNGIwLCAweDY4NDAsIDB4OTAwNSwgMHgwMTUwLCAweDA0YTEsCisJMHg2YTUwLCAweDkyMDAsIDB4NzAwMiwgMHg2ODU0LCAweDkxMDEsIDB4NzAwNiwgMHg5MDA2LCAweDcwMTIsCisJMHg3MDE2LCAweDY4NTAsIDB4NzAwMiwgMHg2ODU0LCAweDcwMDYsIDB4Njg1OCwgMHg3MDBhLCAweDY4NWMsCisJMHg3MDBlLCAweDY4NDAsIDB4OTAwNSwgMHgxMTEwLCAweDcwMTIsIDB4NzAxNiwgMHg2ODQ4LCAweDcwMWEsCisJMHg3MDFjLCAweDkwODUsIDB4MDA0MCwgMHg3MDFlLCAweDIwMDEsIDB4MDAxOSwgMHg3MDM2LCAweDcwMmIsCisJMHgwMDAxLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLCAweDkxOGMsIDB4ZmZmNywgMHg5MThkLCAweDgwMDAsCisJMHgyMTAyLCAweDAwZDYsIDB4MjA2OSwgMHgxOGZhLCAweDY4MDcsIDB4MDAwMSwgMHgwMGRlLCAweDA4MGMsCisJMHg3Zjc0LCAweDkwMDYsIDB4MDBlZSwgMHgwMDA1LCAweDkwMGUsIDB4MDE1NiwgMHgyMGE5LCAweDAwMDYsCisJMHg4MDAzLCAweDIwMTEsIDB4MDEwMCwgMHgyMjE0LCAweDkyOTYsIDB4MDAwOCwgMHgxMTEwLCAweDgxOGQsCisJMHgwMDEwLCAweDgxZjUsIDB4M2UwOCwgMHgxZjA0LCAweDc5YTgsIDB4MDE1ZSwgMHgwMDA1LCAweDIwNzksCisJMHgwMDQwLCAweDIwNzEsIDB4MThmYSwgMHg3MDA0LCAweDAwMDIsIDB4NzljNywgMHg3OWM4LCAweDdhMDAsCisJMHg3YTViLCAweDdiYmIsIDB4NzljNSwgMHg3OWM1LCAweDdiZTUsIDB4MDgwYywgMHgwZGM1LCAweDAwMDUsCisJMHgyMDc5LCAweDAwNDAsIDB4NzgyYywgMHg5MDhjLCAweDA3ODAsIDB4MTkwYywgMHg4MDU2LCAweGQwYTQsCisJMHgwMWY4LCAweDc4MjQsIDB4MjA0OCwgMHg5MDA2LCAweGE4MDIsIDB4YTgwNiwgMHhhODY0LCAweDkwODQsCisJMHgwMGZmLCAweDkwOGEsIDB4MDA0MCwgMHgwNjEwLCAweDAwYzAsIDB4MjAwMSwgMHgxODAwLCAweDIwMGMsCisJMHg5MTg2LCAweDAwMDMsIDB4MTE2OCwgMHg3MDA0LCAweDAwMDIsIDB4NzlmMCwgMHg3OWNhLCAweDc5ZjAsCisJMHg3OWVlLCAweDc5ZjAsIDB4NzlmMCwgMHg3OWYwLCAweDc5ZjAsIDB4NzlmMCwgMHgwODBjLCAweDdhNWIsCisJMHg3ODJjLCAweGQwOWMsIDB4MDkwYywgMHg3Zjc0LCAweDAwMDUsIDB4OTA4MiwgMHgwMDVhLCAweDEyMTgsCisJMHgyMTAwLCAweDAwM2IsIDB4MGMxMCwgMHgwODBjLCAweDdhOTEsIDB4MGM5MCwgMHgwMGUzLCAweDA4ZTgsCisJMHgwMDA1LCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsCisJMHg3YTkxLCAweDdhYjMsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsCisJMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsCisJMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsIDB4N2E5ZCwgMHg3YTkxLCAweDdjZGIsCisJMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YWIzLCAweDdhOTEsIDB4N2E5ZCwgMHg3ZDFjLCAweDdkNWQsCisJMHg3ZGE0LCAweDdkYjgsIDB4N2E5MSwgMHg3YTkxLCAweDdhYjMsIDB4N2E5ZCwgMHg3YWM3LCAweDdhOTEsCisJMHg3YjhmLCAweDdlNjMsIDB4N2U3ZSwgMHg3YTkxLCAweDdhYjMsIDB4N2E5MSwgMHg3YWM3LCAweDdhOTEsCisJMHg3YTkxLCAweDdiODUsIDB4N2U3ZSwgMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsCisJMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhZGIsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsCisJMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHg3ZmZhLCAweDdhOTEsCisJMHg3ZmE0LCAweDdhOTEsIDB4N2ZhNCwgMHg3YTkxLCAweDdhZjAsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsCisJMHg3YTkxLCAweDdhOTEsIDB4N2E5MSwgMHgyMDc5LCAweDAwNDAsIDB4NzAwNCwgMHg5MDg2LCAweDAwMDMsCisJMHgxMTk4LCAweDc4MmMsIDB4MDgwYywgMHg3ZjlkLCAweGQwYTQsIDB4MDE3MCwgMHg3ODI0LCAweDIwNDgsCisJMHg5MDA2LCAweGE4MDIsIDB4YTgwNiwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDhhLCAweDAwMWEsCisJMHgxMjEwLCAweDAwMmIsIDB4MGM1MCwgMHgwMGU5LCAweDA4MGMsIDB4N2Y3NCwgMHgwMDA1LCAweDdhOTEsCisJMHg3YTlkLCAweDdjYzcsIDB4N2E5MSwgMHg3YTlkLCAweDdhOTEsIDB4N2E5ZCwgMHg3YTlkLCAweDdhOTEsCisJMHg3YTlkLCAweDdjYzcsIDB4N2E5ZCwgMHg3YTlkLCAweDdhOWQsIDB4N2E5ZCwgMHg3YTlkLCAweDdhOTEsCisJMHg3YTlkLCAweDdjYzcsIDB4N2E5MSwgMHg3YTkxLCAweDdhOWQsIDB4N2E5MSwgMHg3YTkxLCAweDdhOTEsCisJMHg3YTlkLCAweDAwZTYsIDB4MjA3MSwgMHgxOGZhLCAweDIwMDksIDB4MDQwMCwgMHgwMDcxLCAweDAwZWUsCisJMHgwMDA1LCAweDIwMDksIDB4MTAwMCwgMHgwMDQ5LCAweDAwMDUsIDB4MjAwOSwgMHgyMDAwLCAweDAwMjksCisJMHgwMDA1LCAweDIwMDksIDB4MDgwMCwgMHgwMDA5LCAweDAwMDUsIDB4NzAwNywgMHgwMDAxLCAweGE4NjgsCisJMHg5MDg0LCAweDAwZmYsIDB4OTEwNSwgMHhhODZhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCisJMHg2ZTlmLCAweDAxMmUsIDB4MDAwNSwgMHhhODY0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDBkMDgsCisJMHg4MDAxLCAweDExMjAsIDB4NzAwNywgMHgwMDAxLCAweDA4MDQsIDB4N2M2NCwgMHg3MDA3LCAweDAwMDMsCisJMHg3MDEyLCAweDI5MDAsIDB4NzAxNiwgMHg3MDFhLCAweDcwNGIsIDB4N2M2NCwgMHgwMDA1LCAweGE4NjQsCisJMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHgwOTY4LCAweDgwMDEsIDB4MTEyMCwgMHg3MDA3LCAweDAwMDEsCisJMHgwODA0LCAweDdjN2YsIDB4NzAwNywgMHgwMDAzLCAweDcwMTIsIDB4MjkwMCwgMHg3MDE2LCAweDcwMWEsCisJMHg3MDRiLCAweDdjN2YsIDB4MDAwNSwgMHhhODY0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDA5MDQsCisJMHg3YTk5LCAweDgwMDEsIDB4MTEyMCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg3YzliLCAweDcwMDcsCisJMHgwMDAzLCAweDcwMTIsIDB4MjkwMCwgMHg3MDE2LCAweDcwMWEsIDB4NzA0YiwgMHg3YzliLCAweDAwMDUsCisJMHhhODY0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwMSwgMHgxOTA0LCAweDdhOTksCisJMHg3MDA3LCAweDAwMDEsIDB4MjAwOSwgMHgxODM0LCAweDIxMGMsIDB4ODFmZiwgMHgxOTA0LCAweDdiNWMsCisJMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLCAweDA5MDQsIDB4N2I0NywgMHhhOTljLCAweDkxODYsCisJMHgwMGZmLCAweDA1ZTgsIDB4YTk5NCwgMHg5MTg2LCAweDAwNmYsIDB4MDE4OCwgMHg5MTg2LCAweDAwNzQsCisJMHgxNWIwLCAweDAwMjYsIDB4MjAxMSwgMHgwMDEwLCAweDA4MGMsIDB4NmFjNywgMHgwMDJlLCAweDA1NzgsCisJMHgwMDE2LCAweGE5OTgsIDB4MDgwYywgMHg2YjExLCAweDAwMWUsIDB4MTU0OCwgMHgwNDAwLCAweDA4MGMsCisJMHg3NjM3LCAweDAxNDAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsIDB4MDAxNiwgMHgyMDAxLCAweDAwMzAsCisJMHg5MDBlLCAweDA0MzgsIDB4MDAyNiwgMHgyMDExLCAweDgwMDgsIDB4MDgwYywgMHg2YWM3LCAweDAwMmUsCisJMHgwMWIwLCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweGE5OTgsIDB4YWFhMCwgMHhhYjljLCAweDkxOGQsCisJMHg4MDAwLCAweDA4MGMsIDB4NmIxMSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgxMTQwLCAweGE4OTcsCisJMHg0MDA1LCAweGE4OWIsIDB4NDAwOSwgMHgyMDAxLCAweDAwMzAsIDB4OTAwZSwgMHgwMDUwLCAweGE4NjgsCisJMHg5MDg0LCAweDAwZmYsIDB4YTg2YSwgMHhhODgzLCAweDAwMDAsIDB4MDgwYywgMHg2M2M1LCAweDExMDgsCisJMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4NjcsIDB4MDEzOSwgMHhhODdhLCAweGE5ODIsCisJMHgwODBjLCAweDZlOWYsIDB4MDEyZSwgMHgwY2EwLCAweGE5OTQsIDB4OTE4NiwgMHgwMDcxLCAweDA5MDQsCisJMHg3YjAwLCAweDkxODYsIDB4MDA2NCwgMHgwOTA0LCAweDdiMDAsIDB4OTE4NiwgMHgwMDdjLCAweDA5MDQsCisJMHg3YjAwLCAweDkxODYsIDB4MDAyOCwgMHgwOTA0LCAweDdiMDAsIDB4OTE4NiwgMHgwMDM4LCAweDA5MDQsCisJMHg3YjAwLCAweDkxODYsIDB4MDA3OCwgMHgwOTA0LCAweDdiMDAsIDB4OTE4NiwgMHgwMDVmLCAweDA5MDQsCisJMHg3YjAwLCAweDkxODYsIDB4MDA1NiwgMHgwOTA0LCAweDdiMDAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsCisJMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHg5MDBlLCAweDA4NjAsIDB4YTg3YywgMHg5MDg0LCAweDAwYzAsCisJMHg5MDg2LCAweDAwYzAsIDB4MTEyMCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg3ZTk1LCAweDI5MDAsCisJMHg3MDE2LCAweDcwMWEsIDB4MjBhOSwgMHgwMDA0LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsCisJMHgwMDMwLCAweDIwOTgsIDB4NzA1MCwgMHgyMDQwLCAweGEwNjAsIDB4MjBlOCwgMHhhMDVjLCAweDkwODAsCisJMHgwMDIzLCAweDIwYTAsIDB4NDAwMywgMHhhODg4LCAweDcwMTIsIDB4OTA4MiwgMHgwNDAxLCAweDFhMDQsCisJMHg3YWExLCAweGFhYjQsIDB4OTI4YSwgMHgwMDAyLCAweDFhMDQsIDB4N2FhMSwgMHg4MmZmLCAweDExMzgsCisJMHhhOGI4LCAweGE5YmMsIDB4OTEwNSwgMHgwMTE4LCAweDIwMDEsIDB4N2MyMiwgMHgwMDE4LCAweDkyODAsCisJMHg3YzE4LCAweDIwMDUsIDB4NzA1NiwgMHg3MDEwLCAweDkwMTUsIDB4MDkwNCwgMHg3YzAzLCAweDA4MGMsCisJMHgxMDI3LCAweDExMTgsIDB4NzAwNywgMHgwMDA0LCAweDAwMDUsIDB4MjkwMCwgMHg3MDIyLCAweDcwNTQsCisJMHgyMDYwLCAweGUwMDAsIDB4YTg2NiwgMHg3MDUwLCAweDIwNDAsIDB4YTk1YywgMHhlMDA0LCAweDkxMDAsCisJMHhhMDc2LCAweGE4NjAsIDB4YTA3MiwgMHhlMDA4LCAweDkyMGEsIDB4MTIxMCwgMHg5MDBlLCAweDIyMDAsCisJMHg3MTEyLCAweGUyMGMsIDB4ODAwMywgMHg4MDBiLCAweDkyOTYsIDB4MDAwNCwgMHgwMTA4LCAweDkxMDgsCisJMHhhMTdhLCAweDgxMGIsIDB4YTE3ZSwgMHgwODBjLCAweDEwZjgsIDB4YTA2YywgMHg5MDhlLCAweDAxMDAsCisJMHgwMTcwLCAweDkwODYsIDB4MDIwMCwgMHgwMTE4LCAweDcwMDcsIDB4MDAwNywgMHgwMDA1LCAweDcwMjAsCisJMHgyMDQ4LCAweDA4MGMsIDB4MTA0MCwgMHg3MDE0LCAweDIwNDgsIDB4MDgwNCwgMHg3YWExLCAweDcwMjAsCisJMHgyMDQ4LCAweDcwMTgsIDB4YTgwMiwgMHhhODA3LCAweDAwMDAsIDB4MjkwOCwgMHgyMDQ4LCAweGE5MDYsCisJMHg3MTFhLCAweDA4MDQsIDB4N2JiYiwgMHg3MDE0LCAweDIwNDgsIDB4NzAwNywgMHgwMDAxLCAweGE4YjQsCisJMHg5MDA1LCAweDExMjgsIDB4YThiOCwgMHhhOWJjLCAweDkxMDUsIDB4MDEwOCwgMHgwMGI5LCAweGE4NjQsCisJMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDFlLCAweDA5MDQsIDB4N2U5NSwgMHgwODA0LCAweDdjNjQsCisJMHg3YzFhLCAweDdjMWUsIDB4MDAwMiwgMHgwMDFkLCAweDAwMDcsIDB4MDAwNCwgMHgwMDBhLCAweDAwMWIsCisJMHgwMDA1LCAweDAwMDYsIDB4MDAwYSwgMHgwMDFkLCAweDAwMDUsIDB4MDAwNCwgMHgwMDc2LCAweDAwNjYsCisJMHhhZmI4LCAweGFlYmMsIDB4YTgwNCwgMHgyMDUwLCAweGIwYzAsIDB4YjBlMiwgMHhiMGJjLCAweGIwZGUsCisJMHhiMGI4LCAweGIwZDIsIDB4YjBiNCwgMHhiMGNlLCAweGI2ZGEsIDB4YjdkNiwgMHhiMGIwLCAweGIwY2EsCisJMHhiMGFjLCAweGIwYzYsIDB4YjBhOCwgMHhiMGJhLCAweGIwYTQsIDB4YjBiNiwgMHhiNmMyLCAweGI3YmUsCisJMHhiMGEwLCAweGIwYjIsIDB4YjA5YywgMHhiMGFlLCAweGIwOTgsIDB4YjBhMiwgMHhiMDk0LCAweGIwOWUsCisJMHhiNmFhLCAweGI3YTYsIDB4YjA5MCwgMHhiMDlhLCAweGIwOGMsIDB4YjA5NiwgMHhiMDg4LCAweGIwOGEsCisJMHhiMDg0LCAweGIwODYsIDB4YjY5MiwgMHhiNzhlLCAweGIwODAsIDB4YjA4MiwgMHhiMDdjLCAweGIwN2UsCisJMHhiMDc4LCAweGIwNzIsIDB4YjA3NCwgMHhiMDZlLCAweGI2N2EsIDB4Yjc3NiwgMHhiMDA0LCAweDkwNTUsCisJMHgxOTU4LCAweDAwNmUsIDB4MDA3ZSwgMHgwMDA1LCAweDIwMDksIDB4MTgzNCwgMHgyMTBjLCAweDgxZmYsCisJMHgxMTc4LCAweDA4MGMsIDB4NjFjMiwgMHgxMTA4LCAweDAwMDUsIDB4MDgwYywgMHg3MTBiLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhkM2NlLCAweDA4MGMsIDB4NmU5ZiwgMHgwMTJlLCAweDBjYTAsCisJMHgwODBjLCAweGQ3ZGMsIDB4MWQ3MCwgMHgyMDAxLCAweDAwMjgsIDB4OTAwZSwgMHgwYzcwLCAweDIwMDksCisJMHgxODM0LCAweDIxMGMsIDB4ODFmZiwgMHgxMTg4LCAweGE4ODgsIDB4OTAwNSwgMHgwMTg4LCAweGE4ODMsCisJMHgwMDAwLCAweDA4MGMsIDB4NjI1MiwgMHgxMTA4LCAweDAwMDUsIDB4YTg3YSwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDA4MGMsIDB4NmU5ZiwgMHgwMTJlLCAweDBjYjgsIDB4MjAwMSwgMHgwMDI4LCAweDBjYTgsCisJMHgyMDAxLCAweDAwMDAsIDB4MGM5MCwgMHgwNDE5LCAweDExZDgsIDB4YTg4OCwgMHg5MDA1LCAweDAxZTAsCisJMHhhODgzLCAweDAwMDAsIDB4YTg3YywgMHhkMGY0LCAweDAxMjAsIDB4MDgwYywgMHg2MzI3LCAweDExMzgsCisJMHgwMDA1LCAweDkwMDYsIDB4YTg3YSwgMHgwODBjLCAweDYyOWYsIDB4MTEwOCwgMHgwMDA1LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4YTg3YSwgMHhhOTgyLCAweDA4MGMsIDB4NmU5ZiwgMHgwMTJlLCAweDBjYjAsCisJMHgyMDAxLCAweDAwMjgsIDB4OTAwZSwgMHgwYzk4LCAweDIwMDEsIDB4MDAwMCwgMHgwYzgwLCAweDAwYzYsCisJMHgyMDYxLCAweDE4MDAsIDB4NjBkMCwgMHg5MDA1LCAweDAxMDAsIDB4MDBjZSwgMHgwMDA1LCAweDcwMTgsCisJMHhhODAyLCAweDI5MDgsIDB4MjA0OCwgMHhhOTA2LCAweDcxMWEsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsCisJMHgwMTE4LCAweDcwMDcsIDB4MDAwMywgMHgwMDMwLCAweDcwMTQsIDB4MjA0OCwgMHg3MDA3LCAweDAwMDEsCisJMHg3MDQ4LCAweDA4MGYsIDB4MDAwNSwgMHgwMGI2LCAweDcwMDcsIDB4MDAwMSwgMHhhOTc0LCAweGE4NzgsCisJMHg5MDg0LCAweDAwZmYsIDB4OTA5NiwgMHgwMDA0LCAweDA1NDAsIDB4MjBhOSwgMHgwMDAxLCAweDkwOTYsCisJMHgwMDAxLCAweDAxOTAsIDB4OTAwZSwgMHgyMGE5LCAweDA4MDAsIDB4OTA5NiwgMHgwMDAyLCAweDAxNjAsCisJMHg5MDA1LCAweDExZDgsIDB4YTk3NCwgMHgwODBjLCAweDY3MjQsIDB4MTFiOCwgMHgwMDY2LCAweGFlODAsCisJMHgwODBjLCAweDY4MzQsIDB4MDA2ZSwgMHgwMDg4LCAweDAwNDYsIDB4MjAxMSwgMHgxODBjLCAweDIyMjQsCisJMHhjNDg0LCAweDI0MTIsIDB4MDA0ZSwgMHgwMGM2LCAweDA4MGMsIDB4NjcyNCwgMHgxMTEwLCAweDA4MGMsCisJMHg2OTM0LCAweDgxMDgsIDB4MWYwNCwgMHg3ZDA0LCAweDAwY2UsIDB4YTg3YywgMHhkMDg0LCAweDExMjAsCisJMHgwODBjLCAweDEwNDAsIDB4MDBiZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCisJMHg2ZTlmLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsCisJMHgwMDAxLCAweDA4MGMsIDB4NmE5ZiwgMHgwNTgwLCAweDIwNjEsIDB4MWE3NCwgMHg2MTAwLCAweGQxODQsCisJMHgwMTc4LCAweGE4ODgsIDB4OTA4NCwgMHgwMGZmLCAweDE1NTAsIDB4NjAwMCwgMHhkMDg0LCAweDA1MjAsCisJMHg2MDA0LCAweDkwMDUsIDB4MTUzOCwgMHg2MDAzLCAweDAwMDAsIDB4NjAwYiwgMHgwMDAwLCAweDAwYzgsCisJMHgyMDExLCAweDAwMDEsIDB4YTg5MCwgMHg5MDA1LCAweDExMTAsIDB4MjAwMSwgMHgwMDFlLCAweDgwMDAsCisJMHg2MDE2LCAweGE4ODgsIDB4OTA4NCwgMHgwMGZmLCAweDAxNzgsIDB4NjAwNiwgMHhhODg4LCAweDgwMDcsCisJMHg5MDg0LCAweDAwZmYsIDB4MDE0OCwgMHg2MDBhLCAweGE4ODgsIDB4ODAwMCwgMHgxMTA4LCAweGMyOGQsCisJMHg2MjAyLCAweDAxMmUsIDB4MDgwNCwgMHg3ZjVlLCAweDAxMmUsIDB4MDgwNCwgMHg3ZjU4LCAweDAxMmUsCisJMHgwODA0LCAweDdmNTIsIDB4MDEyZSwgMHgwODA0LCAweDdmNTUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHg3MDA3LCAweDAwMDEsIDB4MDgwYywgMHg2YTlmLCAweDA1ZTAsIDB4MjA2MSwgMHgxYTc0LCAweDYwMDAsCisJMHhkMDg0LCAweDA1YjgsIDB4NjIwNCwgMHg2MzA4LCAweGQwOGMsIDB4MTUzMCwgMHhhYzc4LCAweDk0ODQsCisJMHgwMDAzLCAweDAxNzAsIDB4YTk4OCwgMHg5MThjLCAweDAwZmYsIDB4ODAwMSwgMHgxMTIwLCAweDIxMDAsCisJMHg5MjEwLCAweDA2MjAsIDB4MDAyOCwgMHg4MDAxLCAweDE1MDgsIDB4MjEwMCwgMHg5MjEyLCAweDAyZjAsCisJMHg5NDg0LCAweDAwMGMsIDB4MDE4OCwgMHhhOTg4LCAweDgxMGYsIDB4OTE4YywgMHgwMGZmLCAweDkwODIsCisJMHgwMDA0LCAweDExMjAsIDB4MjEwMCwgMHg5MzE4LCAweDAyODgsIDB4MDAzMCwgMHg5MDgyLCAweDAwMDQsCisJMHgxMTY4LCAweDIxMDAsIDB4OTMxYSwgMHgwMjUwLCAweGE4OTAsIDB4OTAwNSwgMHgwMTEwLCAweDgwMDAsCisJMHg2MDE2LCAweDYyMDYsIDB4NjMwYSwgMHgwMTJlLCAweDA4MDQsIDB4N2Y1ZSwgMHgwMTJlLCAweDA4MDQsCisJMHg3ZjViLCAweDAxMmUsIDB4MDgwNCwgMHg3ZjU4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsCisJMHgwMDAxLCAweDIwNjEsIDB4MWE3NCwgMHg2MzAwLCAweGQzOGMsIDB4MTEyMCwgMHg2MzA4LCAweDgzMTgsCisJMHgwMjIwLCAweDYzMGEsIDB4MDEyZSwgMHgwODA0LCAweDdmNmMsIDB4MDEyZSwgMHgwODA0LCAweDdmNWIsCisJMHgwMGI2LCAweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwNywgMHgwMDAxLCAweGE4N2MsCisJMHhkMGFjLCAweDAxNDgsIDB4MDBjNiwgMHgyMDYxLCAweDFhNzQsIDB4NjAwMCwgMHg5MDg0LCAweGZjZmYsCisJMHg2MDAyLCAweDAwY2UsIDB4MDQ0MCwgMHhhODg4LCAweDkwMDUsIDB4MDVkOCwgMHhhODhjLCAweDkwNjUsCisJMHgwNTk4LCAweDIwMDEsIDB4MTgzNCwgMHgyMDA0LCAweDkwMDUsIDB4MDExOCwgMHgwODBjLCAweGIzMDYsCisJMHgwMDY4LCAweDYwMTcsIDB4ZjQwMCwgMHg2MDViLCAweDAwMDAsIDB4YTk3YywgMHhkMWE0LCAweDAxMTAsCisJMHhhOTgwLCAweDYxNWEsIDB4MjAwOSwgMHgwMDQxLCAweDA4MGMsIDB4YjM1MiwgMHhhOTg4LCAweDkxOGMsCisJMHhmZjAwLCAweDkxODYsIDB4MjAwMCwgMHgxMTM4LCAweDAwMjYsIDB4OTAwZSwgMHgyMDExLCAweGZkZmYsCisJMHgwODBjLCAweDhhNTAsIDB4MDAyZSwgMHhhODdjLCAweGQwYzQsIDB4MDE0OCwgMHgyMDYxLCAweDFhNzQsCisJMHg2MDAwLCAweGQwOGMsIDB4MTEyMCwgMHg2MDA4LCAweDgwMDAsIDB4MDIwOCwgMHg2MDBhLCAweDAwY2UsCisJMHgwMTJlLCAweDAwYmUsIDB4MDgwNCwgMHg3ZjVlLCAweDAwY2UsIDB4MDEyZSwgMHgwMGJlLCAweDA4MDQsCisJMHg3ZjU4LCAweGE5ODQsIDB4OTE4NiwgMHgwMDJlLCAweDBkMzAsIDB4OTE4NiwgMHgwMDJkLCAweDBkMTgsCisJMHg5MTg2LCAweDAwNDUsIDB4MDUxMCwgMHg5MTg2LCAweDAwMmEsIDB4MTEzMCwgMHgyMDAxLCAweDE4MGMsCisJMHgyMDBjLCAweGMxOTQsIDB4MjEwMiwgMHgwOGI4LCAweDkxODYsIDB4MDAyMCwgMHgwMTU4LCAweDkxODYsCisJMHgwMDI5LCAweDFkMTAsIDB4YTk3NCwgMHgwODBjLCAweDY3MjQsIDB4MTk2OCwgMHhiODAwLCAweGMwZTQsCisJMHhiODAyLCAweDA4NDgsIDB4YTg4YywgMHg5MDY1LCAweDA5YjgsIDB4NjAwNywgMHgwMDI0LCAweDIwMDEsCisJMHgxOTg2LCAweDIwMDQsIDB4NjAxYSwgMHgwODA0LCAweDdkZjMsIDB4YTg4YywgMHg5MDY1LCAweDA5NjAsCisJMHgwMGU2LCAweGE4OTAsIDB4OTA3NSwgMHgyMDAxLCAweDE4MzQsIDB4MjAwNCwgMHg5MDA1LCAweDAxNTAsCisJMHgwODBjLCAweGIzMDYsIDB4OGVmZiwgMHgwMTE4LCAweDJlNjAsIDB4MDgwYywgMHhiMzA2LCAweDAwZWUsCisJMHgwODA0LCAweDdkZjMsIDB4NjAyNCwgMHhjMGRjLCAweGMwZDUsIDB4NjAyNiwgMHgyZTYwLCAweDYwMDcsCisJMHgwMDNhLCAweGE4YTAsIDB4OTAwNSwgMHgwMTMwLCAweDYwMDcsIDB4MDAzYiwgMHhhOGE0LCAweDYwMmUsCisJMHhhOGE4LCAweDYwMTYsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTRmZiwgMHgwODBjLCAweDlhYjEsCisJMHgwMGVlLCAweDA4MDQsIDB4N2RmMywgMHgyMDYxLCAweDFhNzQsIDB4NjAwMCwgMHhkMDg0LCAweDAxOTAsCisJMHhkMDhjLCAweDE5MDQsIDB4N2Y2YywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjA0LCAweDgyMTAsCisJMHgwMjIwLCAweDYyMDYsIDB4MDEyZSwgMHgwODA0LCAweDdmNmMsIDB4MDEyZSwgMHhhODgzLCAweDAwMTYsCisJMHgwODA0LCAweDdmNjUsIDB4YTg4MywgMHgwMDA3LCAweDA4MDQsIDB4N2Y2NSwgMHhhODY0LCAweDgwMDcsCisJMHg5MDg0LCAweDAwZmYsIDB4MDEzMCwgMHg4MDAxLCAweDExMzgsIDB4NzAwNywgMHgwMDAxLCAweDAwNjksCisJMHgwMDA1LCAweDA4MGMsIDB4N2E5OSwgMHgwMDQwLCAweDcwMDcsIDB4MDAwMywgMHg3MDEyLCAweDI5MDAsCisJMHg3MDE2LCAweDcwMWEsIDB4NzA0YiwgMHg3ZTk1LCAweDAwMDUsIDB4MDBiNiwgMHgwMGU2LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4OTAzZSwgMHgyMDYxLCAweDE4MDAsIDB4NjFkMCwgMHg4MWZmLCAweDE5MDQsCisJMHg3ZjE3LCAweDYxMzAsIDB4ZDE5NCwgMHgxOTA0LCAweDdmNDEsIDB4YTg3OCwgMHgyMDcwLCAweDllODIsCisJMHgxY2QwLCAweDBhMDQsIDB4N2YwYiwgMHg2MDY4LCAweDllMDIsIDB4MWEwNCwgMHg3ZjBiLCAweDcxMjAsCisJMHg5MTg2LCAweDAwMDYsIDB4MTkwNCwgMHg3ZWZkLCAweDcwMTAsIDB4OTA1ZCwgMHgwOTA0LCAweDdmMTcsCisJMHhiODAwLCAweGQwZTQsIDB4MTkwNCwgMHg3ZjNiLCAweDIwNjEsIDB4MWE3NCwgMHg2MTAwLCAweDkxODQsCisJMHgwMzAxLCAweDkwODYsIDB4MDAwMSwgMHgxNWEwLCAweDcwMjQsIDB4ZDBkYywgMHgxOTA0LCAweDdmNDQsCisJMHhhODgzLCAweDAwMDAsIDB4YTgwMywgMHgwMDAwLCAweDI5MDgsIDB4NzAxNCwgMHg5MDA1LCAweDExOTgsCisJMHg3MTE2LCAweGE4N2MsIDB4ZDBmNCwgMHgxOTA0LCAweDdmNDcsIDB4MDgwYywgMHg1N2Q1LCAweGQwOWMsCisJMHgxMTE4LCAweGE4N2MsIDB4YzBjYywgMHhhODdlLCAweDJlNjAsIDB4MDgwYywgMHg4OTcwLCAweDAxMmUsCisJMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDQ4LCAweGE4MDAsIDB4OTAwNSwgMHgxZGUwLCAweGE5MDIsCisJMHgyMTQ4LCAweGE4N2MsIDB4ZDBmNCwgMHgxOTA0LCAweDdmNDcsIDB4MDEyZSwgMHgwMGVlLCAweDAwYmUsCisJMHgwMDA1LCAweDAxMmUsIDB4MDBlZSwgMHhhODgzLCAweDAwMDYsIDB4MDBiZSwgMHgwODA0LCAweDdmNjUsCisJMHhkMTg0LCAweDBkYjgsIDB4ZDFjNCwgMHgxMTkwLCAweDAwYTAsIDB4YTk3NCwgMHgwODBjLCAweDY3MjQsCisJMHgxNWQwLCAweGI4MDAsIDB4ZDBlNCwgMHgxNWI4LCAweDcxMjAsIDB4OTE4NiwgMHgwMDA3LCAweDExMTgsCisJMHhhODgzLCAweDAwMDIsIDB4MDQ5MCwgMHhhODgzLCAweDAwMDgsIDB4MDQ3OCwgMHhhODgzLCAweDAwMGUsCisJMHgwNDYwLCAweGE4ODMsIDB4MDAxNywgMHgwNDQ4LCAweGE4ODMsIDB4MDAzNSwgMHgwNDMwLCAweDA4MGMsCisJMHg1N2Q5LCAweGQwZmMsIDB4MDFlOCwgMHhhODc4LCAweDIwNzAsIDB4OWU4MiwgMHgxY2QwLCAweDAyYzAsCisJMHg2MDY4LCAweDllMDIsIDB4MTJhOCwgMHg3MTIwLCAweDkxODYsIDB4MDAwNiwgMHgxMTg4LCAweDcwMTAsCisJMHg5MDVkLCAweDAxNzAsIDB4YjgwMCwgMHhkMGJjLCAweDAxNTgsIDB4MjAzOSwgMHgwMDAxLCAweDcwMDAsCisJMHg5MDg2LCAweDAwMDcsIDB4MTkwNCwgMHg3ZWExLCAweDcwMDMsIDB4MDAwMiwgMHgwODA0LCAweDdlYTEsCisJMHhhODgzLCAweDAwMjgsIDB4MDAxMCwgMHhhODgzLCAweDAwMjksIDB4MDEyZSwgMHgwMGVlLCAweDAwYmUsCisJMHgwNDIwLCAweGE4ODMsIDB4MDAyYSwgMHgwY2M4LCAweGE4ODMsIDB4MDA0NSwgMHgwY2IwLCAweDJlNjAsCisJMHgyMDE5LCAweDAwMDIsIDB4NjAxYiwgMHgwMDE0LCAweDA4MGMsIDB4ZTc1NCwgMHgwMTJlLCAweDAwZWUsCisJMHgwMGJlLCAweDAwMDUsIDB4MjAwOSwgMHgwMDNlLCAweDAwNTgsIDB4MjAwOSwgMHgwMDA0LCAweDAwNDAsCisJMHgyMDA5LCAweDAwMDYsIDB4MDAyOCwgMHgyMDA5LCAweDAwMTYsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDEsCisJMHhhODg0LCAweDkwODQsIDB4ZmYwMCwgMHg5MTA1LCAweGE4ODYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwODBjLCAweDZlOWYsIDB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4MTA0MCwgMHgwMDA1LCAweDAwZDYsCisJMHgwODBjLCAweDg5NjcsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDIwNzEsIDB4MDA0MCwgMHg3MDJjLCAweGQwODQsIDB4MDFkOCwgMHg5MDhjLCAweDA3ODAsCisJMHgxOTBjLCAweDgwNTYsIDB4ZDA5YywgMHgxMWE4LCAweDIwNzEsIDB4MTgwMCwgMHg3MGMwLCAweDkwZWEsCisJMHgwMDIwLCAweDAyNzgsIDB4ODAwMSwgMHg3MGMyLCAweDcwMmMsIDB4MjA0OCwgMHhhODAwLCAweDcwMmUsCisJMHg5MDA2LCAweGE4MDIsIDB4YTgwNiwgMHgyMDcxLCAweDAwNDAsIDB4MjkwMCwgMHg3MDIyLCAweDcwMmMsCisJMHgwYzI4LCAweDAxMmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHg5MDg0LCAweDA3ODAsCisJMHgxOTBjLCAweDgwNTYsIDB4MDAwZSwgMHgwMDA1LCAweGE4OTgsIDB4OTA4NCwgMHgwMDAzLCAweDA1YTgsCisJMHgwODBjLCAweGIyN2QsIDB4MDVkOCwgMHgyOTAwLCAweDYwMTYsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MDg2LCAweDAwMzUsIDB4MTEzOCwgMHg2MDA4LCAweGMwZmQsIDB4NjAwYSwgMHgyMDAxLCAweDE5NmIsCisJMHgyMDA0LCAweDAwOTgsIDB4YThhMCwgMHg5MDg0LCAweDAwZmYsIDB4YTk5YywgMHg5MThjLCAweGZmMDAsCisJMHg5MTA1LCAweGE5OWMsIDB4OTE4YywgMHgwMGZmLCAweDA4MGMsIDB4Mjg3MywgMHgxNTQwLCAweDAwYjYsCisJMHgwODBjLCAweDY3MjQsIDB4MmIwMCwgMHgwMGJlLCAweDE1MTAsIDB4NjAxMiwgMHg2MDIzLCAweDAwMDEsCisJMHgyMDA5LCAweDAwNDAsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM1LCAweDAxMTAsCisJMHgyMDA5LCAweDAwNDEsIDB4MDgwYywgMHhiMzUyLCAweDAwMDUsIDB4YTg3YiwgMHgwMTAxLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2ZTlmLCAweDAxMmUsIDB4MDAwNSwgMHhhODdiLCAweDAwMmMsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZlOWYsIDB4MDEyZSwgMHgwMDA1LCAweGE4N2IsCisJMHgwMDI4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmU5ZiwgMHgwMTJlLCAweDA4MGMsCisJMHhiMmQzLCAweDAwMDUsIDB4MDBkNiwgMHgwMGM2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LCAweDAwYjYsCisJMHg3MDA3LCAweDAwMDEsIDB4YWE3NCwgMHg5MjgyLCAweDAwMDQsIDB4MWEwNCwgMHg4MDQ3LCAweGE5N2MsCisJMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLCAweGI4MDQsIDB4ZDI4NCwgMHgwMTQwLCAweDA1ZTgsCisJMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHg5MDg0LCAweDAwMDYsIDB4MTEwOCwgMHgwNGIwLCAweDJiMTAsCisJMHgwODBjLCAweGIyN2QsIDB4MTExOCwgMHgwODBjLCAweGIzMjUsIDB4MDVhOCwgMHg2MjEyLCAweGE4NzQsCisJMHgwMDAyLCAweDgwMjUsIDB4ODAyYSwgMHg4MDJkLCAweDgwMzMsIDB4MjAxOSwgMHgwMDAyLCAweDA4MGMsCisJMHhlYmExLCAweDAwNjAsIDB4MDgwYywgMHhlYjM4LCAweDAwNDgsIDB4MjAxOSwgMHgwMDAyLCAweGE5ODAsCisJMHgwODBjLCAweGViNTMsIDB4MDAxOCwgMHhhOTgwLCAweDA4MGMsIDB4ZWIzOCwgMHgwODBjLCAweGIyZDMsCisJMHhhODg3LCAweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2ZTlmLCAweDAxMmUsCisJMHgwMGJlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweGE4ODcsCisJMHgwMDA2LCAweDBjODAsIDB4YTg4NywgMHgwMDAyLCAweDBjNjgsIDB4YTg4NywgMHgwMDA1LCAweDBjNTAsCisJMHhhODg3LCAweDAwMDQsIDB4MGMzOCwgMHhhODg3LCAweDAwMDcsIDB4MGMyMCwgMHgyMDkxLCAweDgwMDAsCisJMHgwZTA0LCAweDgwNTgsIDB4MDAwNiwgMHgwMDE2LCAweDIwMDEsIDB4ODAwMywgMHgwMDA2LCAweDA4MDQsCisJMHgwZGNlLCAweDIwMDEsIDB4MTgzNCwgMHgyMDA0LCAweDkwMDUsIDB4MDAwNSwgMHgwMDA1LCAweDAwZjYsCisJMHgyMDc5LCAweDAzMDAsIDB4MjAwMSwgMHgwMjAwLCAweDIwMGMsIDB4YzFlNSwgMHhjMWRjLCAweDIxMDIsCisJMHgyMDA5LCAweDAyMTgsIDB4MjEwYywgMHhkMWVjLCAweDExMjAsIDB4MDgwYywgMHgxNWEwLCAweDAwZmUsCisJMHgwMDA1LCAweDIwMDEsIDB4MDIwZCwgMHgyMDAzLCAweDAwMjAsIDB4NzgxZiwgMHgwMzAwLCAweDAwZmUsCisJMHgwMDA1LCAweDc4MWMsIDB4ZDA4YywgMHgwOTA0LCAweDgwZDgsIDB4NjhjMCwgMHg5MGFhLCAweDAwMDUsCisJMHgwYTA0LCAweDg3MWMsIDB4N2Q0NCwgMHg3YzQwLCAweDk1ODQsIDB4MDBmNiwgMHgxNTEwLCAweDk0ODQsCisJMHg3MDAwLCAweDAxNDAsIDB4OTA4YSwgMHgyMDAwLCAweDEyNjAsIDB4OTU4NCwgMHgwNzAwLCAweDgwMDcsCisJMHgwODA0LCAweDgwZGYsIDB4NzAwMCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHg4MTAwLCAweDBkYTgsCisJMHgwMGIwLCAweDk0ODQsIDB4MGZmZiwgMHgxMTMwLCAweDcwMDAsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsCisJMHg4MTAwLCAweDExYzAsIDB4MDgwYywgMHhmMDU3LCAweDA4MGMsIDB4ODYwMSwgMHg3ODE3LCAweDAxNDAsCisJMHgwMGE4LCAweDk1ODQsIDB4MDA3NiwgMHgxMTE4LCAweDA4MGMsIDB4ODY1ZiwgMHgxOWMwLCAweGQ1YTQsCisJMHgwMTQ4LCAweDAwNDYsIDB4MDA1NiwgMHgwODBjLCAweDgxM2EsIDB4MDgwYywgMHgyMzZlLCAweDAwNWUsCisJMHgwMDRlLCAweDAwMjAsIDB4MDgwYywgMHhmMDU3LCAweDc4MTcsIDB4MDE0MCwgMHgwODBjLCAweDc2MzcsCisJMHgwMTY4LCAweDIwMDEsIDB4MDExMSwgMHgyMDA0LCAweGQwOGMsIDB4MDE0MCwgMHg2ODkzLCAweDAwMDAsCisJMHgyMDAxLCAweDAxMTAsIDB4MjAwMywgMHgwMDA4LCAweDIwMDMsIDB4MDAwMCwgMHgwODBjLCAweDgxMWIsCisJMHgyMDAxLCAweDE5ZjEsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsIDB4OWFiMSwgMHgwMDA1LCAweDAwMDIsCisJMHg4MGYxLCAweDg0MDksIDB4ODBlOCwgMHg4MGU4LCAweDgwZTgsIDB4ODBlOCwgMHg4MGU4LCAweDgwZTgsCisJMHg3ODE3LCAweDAxNDAsIDB4MjAwMSwgMHgxOWYxLCAweDIwMDQsIDB4OTAwNSwgMHgwOTBjLCAweDlhYjEsCisJMHgwMDA1LCAweDcwMDAsIDB4OTA4YywgMHhmZjAwLCAweDkxOTQsIDB4ZjAwMCwgMHg4MTBmLCAweDk0ODQsCisJMHgwZmZmLCAweDY4OTIsIDB4OTI4NiwgMHgyMDAwLCAweDExNTAsIDB4NjgwMCwgMHg5MDg2LCAweDAwMDEsCisJMHgxMTE4LCAweDA4MGMsIDB4NTgzZiwgMHgwMDcwLCAweDA4MGMsIDB4ODE1YSwgMHgwMDU4LCAweDkyODYsCisJMHgzMDAwLCAweDExMTgsIDB4MDgwYywgMHg4MzQxLCAweDAwMjgsIDB4OTI4NiwgMHg4MDAwLCAweDExMTAsCisJMHgwODBjLCAweDg1MjgsIDB4NzgxNywgMHgwMTQwLCAweDIwMDEsIDB4MTlmMSwgMHgyMDA0LCAweDkwMDUsCisJMHgwOTBjLCAweDlhYjEsIDB4MDAwNSwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMDhjLCAweDAxNzgsCisJMHgyMDAxLCAweDE4MDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDMsIDB4MTE0OCwgMHgwMDI2LCAweDAwMzYsCisJMHgyMDExLCAweDgwNDgsIDB4MjUxOCwgMHgwODBjLCAweDRjNDQsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsCisJMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHgyMDE5LCAweGZmZmUsCisJMHg3YzMwLCAweDAwNTAsIDB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsCisJMHg3ZDQ0LCAweDdjNDAsIDB4MjAxOSwgMHhmZmZmLCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwOGMsCisJMHgwMTYwLCAweDIwMDEsIDB4MTgwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTMwLCAweDAwMjYsCisJMHgyMDExLCAweDgwNDgsIDB4MDgwYywgMHg0YzQ0LCAweDAwMmUsIDB4MDBmZSwgMHgwMDVlLCAweDAwNGUsCisJMHgwMDNlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDcwMTAsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsCisJMHg5MDk2LCAweDAwMDEsIDB4MDEyMCwgMHg5MDk2LCAweDAwMjMsIDB4MTkwNCwgMHg4MzEyLCAweDkxODYsCisJMHgwMDIzLCAweDE1YzAsIDB4MDgwYywgMHg4NWM2LCAweDA5MDQsIDB4ODMxMiwgMHg2MTIwLCAweDkxODYsCisJMHgwMDAxLCAweDAxNTAsIDB4OTE4NiwgMHgwMDA0LCAweDAxMzgsIDB4OTE4NiwgMHgwMDA4LCAweDAxMjAsCisJMHg5MTg2LCAweDAwMGEsIDB4MTkwNCwgMHg4MzEyLCAweDcxMjQsIDB4NjEwYSwgMHg3MDMwLCAweDkwOGUsCisJMHgwMjAwLCAweDExMzAsIDB4MjAwOSwgMHgwMDE1LCAweDA4MGMsIDB4YjM1MiwgMHgwODA0LCAweDgzMTIsCisJMHg5MDhlLCAweDAyMTQsIDB4MDExOCwgMHg5MDhlLCAweDAyMTAsIDB4MTEzMCwgMHgyMDA5LCAweDAwMTUsCisJMHgwODBjLCAweGIzNTIsIDB4MDgwNCwgMHg4MzEyLCAweDkwOGUsIDB4MDEwMCwgMHgxOTA0LCAweDgzMTIsCisJMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg4MzEyLCAweDIwMDksIDB4MDAxNiwgMHgwODBjLCAweGIzNTIsCisJMHgwODA0LCAweDgzMTIsIDB4OTE4NiwgMHgwMDIyLCAweDE5MDQsIDB4ODMxMiwgMHg3MDMwLCAweDkwOGUsCisJMHgwMzAwLCAweDE1ODAsIDB4NjhkYywgMHhkMGE0LCAweDA1MjgsIDB4YzBiNSwgMHg2OGRlLCAweDcxMDAsCisJMHg5MThjLCAweDAwZmYsIDB4Njk3ZSwgMHg3MDA0LCAweDY4ODIsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsCisJMHg3OWU2LCAweDc4ZWEsIDB4MDAwNiwgMHg5MDg0LCAweDAwZmYsIDB4MDAxNiwgMHgyMDA4LCAweDA4MGMsCisJMHgyOGJjLCAweDc5MzIsIDB4NzkzNiwgMHgwMDFlLCAweDAwMGUsIDB4MDBmZSwgMHgwODBjLCAweDI4NzMsCisJMHg2OTVlLCAweDcwM2MsIDB4MDBlNiwgMHgyMDcxLCAweDAxNDAsIDB4NzA4NiwgMHgyMDcxLCAweDE4MDAsCisJMHg3MGI2LCAweDAwZWUsIDB4NzAzNCwgMHg5MDA1LCAweDE5MDQsIDB4ODMxMiwgMHgyMDA5LCAweDAwMTcsCisJMHgwODA0LCAweDgyYzIsIDB4OTA4ZSwgMHgwNDAwLCAweDExOTAsIDB4NzAzNCwgMHg5MDA1LCAweDE5MDQsCisJMHg4MzEyLCAweDA4MGMsIDB4NzYzNywgMHgwMTIwLCAweDIwMDksIDB4MDAxZCwgMHgwODA0LCAweDgyYzIsCisJMHg2OGRjLCAweGMwYTUsIDB4NjhkZSwgMHgyMDA5LCAweDAwMzAsIDB4MDgwNCwgMHg4MmMyLCAweDkwOGUsCisJMHgwNTAwLCAweDExNDAsIDB4NzAzNCwgMHg5MDA1LCAweDE5MDQsIDB4ODMxMiwgMHgyMDA5LCAweDAwMTgsCisJMHgwODA0LCAweDgyYzIsIDB4OTA4ZSwgMHgyMDEwLCAweDExMjAsIDB4MjAwOSwgMHgwMDE5LCAweDA4MDQsCisJMHg4MmMyLCAweDkwOGUsIDB4MjExMCwgMHgxMTIwLCAweDIwMDksIDB4MDAxYSwgMHgwODA0LCAweDgyYzIsCisJMHg5MDhlLCAweDUyMDAsIDB4MTE0MCwgMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg4MzEyLCAweDIwMDksCisJMHgwMDFiLCAweDA4MDQsIDB4ODJjMiwgMHg5MDhlLCAweDUwMDAsIDB4MTE0MCwgMHg3MDM0LCAweDkwMDUsCisJMHgxOTA0LCAweDgzMTIsIDB4MjAwOSwgMHgwMDFjLCAweDA4MDQsIDB4ODJjMiwgMHg5MDhlLCAweDEzMDAsCisJMHgxMTIwLCAweDIwMDksIDB4MDAzNCwgMHgwODA0LCAweDgyYzIsIDB4OTA4ZSwgMHgxMjAwLCAweDExNDAsCisJMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg4MzEyLCAweDIwMDksIDB4MDAyNCwgMHgwODA0LCAweDgyYzIsCisJMHg5MDhjLCAweGZmMDAsIDB4OTE4ZSwgMHgyNDAwLCAweDExNzAsIDB4MjAwOSwgMHgwMDJkLCAweDIwMDEsCisJMHgxODEwLCAweDIwMDQsIDB4ZDA5YywgMHgwOTA0LCAweDgyYzIsIDB4MDgwYywgMHhkZjFhLCAweDE5MDQsCisJMHg4MzEyLCAweDA4MDQsIDB4ODJjMCwgMHg5MDhjLCAweGZmMDAsIDB4OTE4ZSwgMHg1MzAwLCAweDExMjAsCisJMHgyMDA5LCAweDAwMmEsIDB4MDgwNCwgMHg4MmMyLCAweDkwOGUsIDB4MGYwMCwgMHgxMTIwLCAweDIwMDksCisJMHgwMDIwLCAweDA4MDQsIDB4ODJjMiwgMHg5MDhlLCAweDYxMDQsIDB4MTUzMCwgMHgyMDI5LCAweDAyMDUsCisJMHgyMDExLCAweDAyNmQsIDB4ODIwOCwgMHgyMjA0LCAweDkwODIsIDB4MDAwNCwgMHg4MDA0LCAweDgwMDQsCisJMHgyMGE4LCAweDIwMTEsIDB4ODAxNSwgMHgyMTFjLCAweDgxMDgsIDB4MDA0NiwgMHgyMTI0LCAweDA4MGMsCisJMHg0YzQ0LCAweDAwNGUsIDB4ODEwOCwgMHgwZjA0LCAweDgyNzYsIDB4OTE4NiwgMHgwMjgwLCAweDFkODgsCisJMHgyNTA0LCAweDgwMDAsIDB4MjAyYSwgMHgyMDA5LCAweDAyNjAsIDB4MGM1OCwgMHgyMDJiLCAweDAwMDAsCisJMHgyMDA5LCAweDAwMjMsIDB4MDgwNCwgMHg4MmMyLCAweDkwOGUsIDB4NjAwMCwgMHgxMTIwLCAweDIwMDksCisJMHgwMDNmLCAweDA4MDQsIDB4ODJjMiwgMHg5MDhlLCAweDU0MDAsIDB4MTEzOCwgMHgwODBjLCAweDg2Y2MsCisJMHgxOTA0LCAweDgzMTIsIDB4MjAwOSwgMHgwMDQ2LCAweDA0YTgsIDB4OTA4ZSwgMHg1NTAwLCAweDExNDgsCisJMHgwODBjLCAweDg2ZjQsIDB4MTExOCwgMHgyMDA5LCAweDAwNDEsIDB4MDQ2MCwgMHgyMDA5LCAweDAwNDIsCisJMHgwNDQ4LCAweDkwOGUsIDB4NzgwMCwgMHgxMTE4LCAweDIwMDksIDB4MDA0NSwgMHgwNDE4LCAweDkwOGUsCisJMHgxMDAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDRlLCAweDAwZTgsIDB4OTA4ZSwgMHg2MzAwLCAweDExMTgsCisJMHgyMDA5LCAweDAwNGEsIDB4MDBiOCwgMHg5MDhjLCAweGZmMDAsIDB4OTE4ZSwgMHg1NjAwLCAweDExMTgsCisJMHgyMDA5LCAweDAwNGYsIDB4MDA3OCwgMHg5MDhjLCAweGZmMDAsIDB4OTE4ZSwgMHg1NzAwLCAweDExMTgsCisJMHgyMDA5LCAweDAwNTAsIDB4MDAzOCwgMHgyMDA5LCAweDAwMWQsIDB4NjgzOCwgMHhkMGQ0LCAweDAxMTAsCisJMHgyMDA5LCAweDAwNGMsIDB4MDAxNiwgMHgyMDExLCAweDAyNjMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsCisJMHgwODBjLCAweDI4NzMsIDB4MTkwNCwgMHg4MzE1LCAweDA4MGMsIDB4NjZiOSwgMHgxOTA0LCAweDgzMTUsCisJMHhiZTEyLCAweGJkMTYsIDB4MDAxZSwgMHgwMDE2LCAweDA4MGMsIDB4NzYzNywgMHgwMWMwLCAweDY4ZGMsCisJMHhkMDhjLCAweDExNDgsIDB4NzAwMCwgMHg5MDg0LCAweDAwZmYsIDB4MTE4OCwgMHg3MDA0LCAweDkwODQsCisJMHhmZjAwLCAweDExNjgsIDB4MDA0MCwgMHg2ODdjLCAweDk2MDYsIDB4MTE0OCwgMHg2ODgwLCAweDk1MDYsCisJMHg5MDg0LCAweGZmMDAsIDB4MTEyMCwgMHg5NTg0LCAweDAwZmYsIDB4YjhjMiwgMHgwMDgwLCAweGI4YzAsCisJMHg5MDA1LCAweDExNjgsIDB4OTE4NiwgMHgwMDQ2LCAweDExNTAsIDB4Njg3YywgMHg5NjA2LCAweDExMzgsCisJMHg2ODgwLCAweDk1MDYsIDB4OTA4NCwgMHhmZjAwLCAweDExMTAsIDB4MDAxZSwgMHgwMDk4LCAweDA4MGMsCisJMHhiMjdkLCAweDAxYTgsIDB4MmIwOCwgMHg2MTEyLCAweDYwMjMsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsCisJMHgwMDFlLCAweDkxODYsIDB4MDA0YywgMHgxMTEwLCAweDYwMjMsIDB4MDAwYSwgMHgwMDE2LCAweDAwMWUsCisJMHgwODBjLCAweGIzNTIsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsIDB4MDAxZSwgMHgwY2Q4LCAweDIwMDEsCisJMHgxODBlLCAweDIwMDQsIDB4ZDBlYywgMHgwMTIwLCAweDIwMTEsIDB4ODA0OSwgMHgwODBjLCAweDRjNDQsCisJMHgwODBjLCAweGIzMjUsIDB4MGQ5MCwgMHgyYjA4LCAweDYxMTIsIDB4NjAyMywgMHgwMDA0LCAweDcxMjAsCisJMHg2MTBhLCAweDAwMWUsIDB4MDAxNiwgMHg5MTg2LCAweDAwMTcsIDB4MDExOCwgMHg5MTg2LCAweDAwMzAsCisJMHgxMTI4LCAweDYwMDcsIDB4MDAwOSwgMHg2MDE3LCAweDI5MDAsIDB4MDAyMCwgMHg2MDA3LCAweDAwNTEsCisJMHg2MDE3LCAweDAwMDAsIDB4NjAyZiwgMHgwMDA5LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk1NDcsCisJMHgwOGEwLCAweDA4MGMsIDB4ODczYiwgMHgxMTU4LCAweDA4MGMsIDB4MzM3NCwgMHgxMTQwLCAweDcwMTAsCisJMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDhlLCAweDAwMDgsIDB4MTEwOCwgMHgwMDA5LCAweDAwMDUsCisJMHgwMGI2LCAweDAwYzYsIDB4MDA0NiwgMHg3MDAwLCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsCisJMHgwMDMzLCAweDExZTgsIDB4MDgwYywgMHg4NWM2LCAweDA5MDQsIDB4ODNhMSwgMHg3MTI0LCAweDYxMGEsCisJMHg3MDMwLCAweDkwOGUsIDB4MDIwMCwgMHgxMTQwLCAweDcwMzQsIDB4OTAwNSwgMHgxNWQwLCAweDIwMDksCisJMHgwMDE1LCAweDA4MGMsIDB4YjM1MiwgMHgwNGE4LCAweDkwOGUsIDB4MDEwMCwgMHgxNTkwLCAweDcwMzQsCisJMHg5MDA1LCAweDE1NzgsIDB4MjAwOSwgMHgwMDE2LCAweDA4MGMsIDB4YjM1MiwgMHgwNDUwLCAweDkxODYsCisJMHgwMDMyLCAweDE1MzgsIDB4NzAzMCwgMHg5MDhlLCAweDE0MDAsIDB4MTUxOCwgMHgyMDA5LCAweDAwMzgsCisJMHgwMDE2LCAweDIwMTEsIDB4MDI2MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI4NzMsCisJMHgxMWI4LCAweDA4MGMsIDB4NjZiOSwgMHgxMWEwLCAweGJlMTIsIDB4YmQxNiwgMHgwODBjLCAweGIyN2QsCisJMHgwMTc4LCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGQ1NTQsIDB4NjAyMywgMHgwMDA0LCAweDcxMjAsCisJMHg2MTBhLCAweDAwMWUsIDB4MDgwYywgMHhiMzUyLCAweDA4MGMsIDB4OWFiMSwgMHgwMDEwLCAweDAwY2UsCisJMHgwMDFlLCAweDAwNGUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMDQ2LCAweDAwZTYsCisJMHgwMGQ2LCAweDIwMjgsIDB4MjEzMCwgMHg5Njk2LCAweDAwZmYsIDB4MTFiOCwgMHg5NTkyLCAweGZmZmMsCisJMHgwMmEwLCAweDk1OTYsIDB4ZmZmZCwgMHgxMTIwLCAweDIwMDksIDB4MDA3ZiwgMHgwODA0LCAweDg0MDMsCisJMHg5NTk2LCAweGZmZmUsIDB4MTEyMCwgMHgyMDA5LCAweDAwN2UsIDB4MDgwNCwgMHg4NDAzLCAweDk1OTYsCisJMHhmZmZjLCAweDExMTgsIDB4MjAwOSwgMHgwMDgwLCAweDA0ZjAsIDB4MjAxMSwgMHgwMDAwLCAweDIwMTksCisJMHgxODM3LCAweDIzMWMsIDB4ZDNhYywgMHgwMTMwLCAweDkwMjYsIDB4MjBhOSwgMHgwODAwLCAweDIwNzEsCisJMHgxMDAwLCAweDAwMzAsIDB4MjAyMSwgMHgwMDgxLCAweDIwYTksIDB4MDc3ZiwgMHgyMDcxLCAweDEwODEsCisJMHgyZTFjLCAweDkzZGQsIDB4MDAwMCwgMHgxMTQwLCAweDgyZmYsIDB4MTFkMCwgMHg5NDk2LCAweDAwZmYsCisJMHgwMWI4LCAweDI0MTAsIDB4YzJmZCwgMHgwMGEwLCAweGJmMTAsIDB4MjYwMCwgMHg5NzA2LCAweGI4MTQsCisJMHgxMTIwLCAweDk1NDYsIDB4MTExMCwgMHgyNDA4LCAweDAwYjAsIDB4OTc0NSwgMHgxMTQ4LCAweDk0YzYsCisJMHgwMDdlLCAweDAxMzAsIDB4OTRjNiwgMHgwMDdmLCAweDAxMTgsIDB4OTRjNiwgMHgwMDgwLCAweDFkMjAsCisJMHg4NDIwLCAweDhlNzAsIDB4MWYwNCwgMHg4M2Q4LCAweDgyZmYsIDB4MTExOCwgMHg5MDg1LCAweDAwMDEsCisJMHgwMDE4LCAweGMyZmMsIDB4MjIwOCwgMHg5MDA2LCAweDAwZGUsIDB4MDBlZSwgMHgwMDRlLCAweDAwYmUsCisJMHgwMDA1LCAweDIwMDEsIDB4MTgzNywgMHgyMDBjLCAweDkxODQsIDB4MDA4MCwgMHgwMTEwLCAweGQxOGMsCisJMHgwMTM4LCAweDcwMDAsIDB4OTA4YywgMHhmZjAwLCAweDgxMGYsIDB4OTE4NCwgMHgwMDBmLCAweDAwNGEsCisJMHg3ODE3LCAweDAxNDAsIDB4MjAwMSwgMHgxOWYxLCAweDIwMDQsIDB4OTAwNSwgMHgwOTBjLCAweDlhYjEsCisJMHgwMDA1LCAweDg0MzEsIDB4ODQzMSwgMHg4NDMxLCAweDg1ZDgsIDB4ODQzMSwgMHg4NDNhLCAweDg0NjUsCisJMHg4NGYzLCAweDg0MzEsIDB4ODQzMSwgMHg4NDMxLCAweDg0MzEsIDB4ODQzMSwgMHg4NDMxLCAweDg0MzEsCisJMHg4NDMxLCAweDc4MTcsIDB4MDE0MCwgMHgyMDAxLCAweDE5ZjEsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsCisJMHg5YWIxLCAweDAwMDUsIDB4MDBiNiwgMHg3MTEwLCAweGQxYmMsIDB4MDFlOCwgMHg3MTIwLCAweDIxNjAsCisJMHg5YzhjLCAweDAwMDcsIDB4MTFjMCwgMHg5YzhhLCAweDFjZDAsIDB4MDJhOCwgMHg2ODY4LCAweDljMDIsCisJMHgxMjkwLCAweDcwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDYxMTAsIDB4MjE1OCwgMHhiOTEwLCAweDkxMDYsCisJMHgxMTUwLCAweDcwMGMsIDB4YjkxNCwgMHg5MTA2LCAweDExMzAsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksCisJMHgwMDQ2LCAweDA4MGMsIDB4YjM1MiwgMHg3ODE3LCAweDAxNDAsIDB4MjAwMSwgMHgxOWYxLCAweDIwMDQsCisJMHg5MDA1LCAweDA5MGMsIDB4OWFiMSwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDk0ODQsCisJMHgwZmZmLCAweDA5MDQsIDB4ODRjOSwgMHg3MTEwLCAweGQxYmMsIDB4MTkwNCwgMHg4NGM5LCAweDcxMDgsCisJMHg3MDBjLCAweDIwMjgsIDB4OTE4YywgMHgwMGZmLCAweDIxMzAsIDB4OTA5NCwgMHhmZjAwLCAweDE1YjAsCisJMHg4MWZmLCAweDE1YTAsIDB4OTA4MCwgMHgzM2I2LCAweDIwMGQsIDB4OTE4YywgMHhmZjAwLCAweDgxMGYsCisJMHgyMDAxLCAweDAwODAsIDB4OTEwNiwgMHgwOTA0LCAweDg0YzksIDB4MDgwYywgMHg2NmI5LCAweDE5MDQsCisJMHg4NGM5LCAweGJlMTIsIDB4YmQxNiwgMHhiODAwLCAweGQwZWMsIDB4MTVkOCwgMHhiYTA0LCAweDkyOTQsCisJMHhmZjAwLCAweDkyODYsIDB4MDYwMCwgMHgxMWEwLCAweDA4MGMsIDB4YjI3ZCwgMHgwNWU4LCAweDJiMDgsCisJMHg3MDI4LCAweDYwNDYsIDB4NzAyYywgMHg2MDRhLCAweDYxMTIsIDB4NjAyMywgMHgwMDA2LCAweDcxMjAsCisJMHg2MTBhLCAweDcxMzAsIDB4NjE1NiwgMHgyMDA5LCAweDAwNDQsIDB4MDgwYywgMHhlMTkyLCAweDA0MDgsCisJMHgwODBjLCAweDZhYTMsIDB4MTEzOCwgMHhiODA3LCAweDA2MDYsIDB4MGMzMCwgMHgxOTBjLCAweDgzYTUsCisJMHgxMWMwLCAweDA4OTgsIDB4MDgwYywgMHhiMjdkLCAweDJiMDgsIDB4MDE5OCwgMHg2MTEyLCAweDYwMjMsCisJMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHg5Mjg2LCAweDA0MDAsIDB4MTExOCwgMHg2MDA3LCAweDAwMDUsCisJMHgwMDEwLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NTQ3LCAweDA4MGMsCisJMHg5YWIxLCAweDc4MTcsIDB4MDE0MCwgMHgyMDAxLCAweDE5ZjEsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsCisJMHg5YWIxLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZWMsCisJMHgwMTIwLCAweDIwMTEsIDB4ODA0OSwgMHgwODBjLCAweDRjNDQsIDB4MDgwYywgMHhiMzI1LCAweDBkNDgsCisJMHgyYjA4LCAweDYxMTIsIDB4NjAyMywgMHgwMDA2LCAweDcxMjAsIDB4NjEwYSwgMHg3MTMwLCAweDYxNTYsCisJMHg2MDE3LCAweGYzMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgwODBjLCAweDk0ZmYsCisJMHgwODBjLCAweDlhYjEsIDB4MDhiMCwgMHgwMGI2LCAweDcxMTAsIDB4ZDFiYywgMHgwMWU4LCAweDcwMjAsCisJMHgyMDYwLCAweDljODQsIDB4MDAwNywgMHgxMWMwLCAweDljODIsIDB4MWNkMCwgMHgwMmE4LCAweDY4NjgsCisJMHg5YzAyLCAweDEyOTAsIDB4NzAwOCwgMHg5MDg0LCAweDAwZmYsIDB4NjExMCwgMHgyMTU4LCAweGI5MTAsCisJMHg5MTA2LCAweDExNTAsIDB4NzAwYywgMHhiOTE0LCAweDkxMDYsIDB4MTEzMCwgMHg3MTI0LCAweDYxMGEsCisJMHgyMDA5LCAweDAwNDUsIDB4MDgwYywgMHhiMzUyLCAweDc4MTcsIDB4MDE0MCwgMHgyMDAxLCAweDE5ZjEsCisJMHgyMDA0LCAweDkwMDUsIDB4MDkwYywgMHg5YWIxLCAweDAwYmUsIDB4MDAwNSwgMHg2MTIwLCAweDkxODYsCisJMHgwMDAyLCAweDAxMjgsIDB4OTE4NiwgMHgwMDA1LCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCisJMHgwODBjLCAweDg3M2IsIDB4MTE4MCwgMHgwODBjLCAweDMzNzQsIDB4MTE2OCwgMHg3MDEwLCAweDkwODQsCisJMHhmZjAwLCAweDgwMDcsIDB4OTA4NiwgMHgwMDAwLCAweDExMzAsIDB4OTE4NCwgMHgwMDBmLCAweDkwOGEsCisJMHgwMDA2LCAweDEyMDgsIDB4MDAwYiwgMHgwMDA1LCAweDg1NDIsIDB4ODU0MywgMHg4NTQyLCAweDg1NDIsCisJMHg4NWE4LCAweDg1YjcsIDB4MDAwNSwgMHgwMGI2LCAweDcwMGMsIDB4NzEwOCwgMHgwODBjLCAweDI4NzMsCisJMHgxOTA0LCAweDg1YTYsIDB4MDgwYywgMHg2NmI5LCAweDE5MDQsIDB4ODVhNiwgMHhiZTEyLCAweGJkMTYsCisJMHg3MTEwLCAweGQxYmMsIDB4MDU0MCwgMHg3MDJjLCAweGQwODQsIDB4MTEyMCwgMHhiODAwLCAweGQwYmMsCisJMHgxOTA0LCAweDg1YTYsIDB4MDgwYywgMHg2YWEzLCAweDAxNDgsIDB4OTA4NiwgMHgwMDA0LCAweDAxMzAsCisJMHgwODBjLCAweDZhYWIsIDB4MDExOCwgMHg5MDg2LCAweDAwMDQsIDB4MTU4OCwgMHgwMGM2LCAweDA4MGMsCisJMHg4NWM2LCAweDAwY2UsIDB4MDVkOCwgMHgwODBjLCAweGIyN2QsIDB4MmIwOCwgMHgwNWI4LCAweDYxMTIsCisJMHgwODBjLCAweGQ1NTQsIDB4NjAyMywgMHgwMDAyLCAweDcxMjAsIDB4NjEwYSwgMHgyMDA5LCAweDAwODgsCisJMHgwODBjLCAweGIzNTIsIDB4MDQ1OCwgMHgwODBjLCAweDZhYTMsIDB4MDE0OCwgMHg5MDg2LCAweDAwMDQsCisJMHgwMTMwLCAweDA4MGMsIDB4NmFhYiwgMHgwMTE4LCAweDkwODYsIDB4MDAwNCwgMHgxMTgwLCAweDA4MGMsCisJMHhiMjdkLCAweDJiMDgsIDB4MDFkOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDU1NCwgMHg2MDIzLCAweDAwMDUsCisJMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwgMHgwMDg4LCAweDA4MGMsIDB4YjM1MiwgMHgwMDc4LCAweDA4MGMsCisJMHhiMjdkLCAweDJiMDgsIDB4MDE1OCwgMHg2MTEyLCAweDA4MGMsIDB4ZDU1NCwgMHg2MDIzLCAweDAwMDQsCisJMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4YjM1MiwgMHgwMGJlLCAweDAwMDUsCisJMHg3MTEwLCAweGQxYmMsIDB4MDE1OCwgMHgwMGQxLCAweDAxNDgsIDB4MDgwYywgMHg4NTFlLCAweDExMzAsCisJMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDg5LCAweDA4MGMsIDB4YjM1MiwgMHgwMDA1LCAweDcxMTAsCisJMHhkMWJjLCAweDAxNTgsIDB4MDA1OSwgMHgwMTQ4LCAweDA4MGMsIDB4ODUxZSwgMHgxMTMwLCAweDcxMjQsCisJMHg2MTBhLCAweDIwMDksIDB4MDA4YSwgMHgwODBjLCAweGIzNTIsIDB4MDAwNSwgMHg3MDIwLCAweDIwNjAsCisJMHg5Yzg0LCAweDAwMDcsIDB4MTE1OCwgMHg5YzgyLCAweDFjZDAsIDB4MDI0MCwgMHgyMDAxLCAweDE4MWEsCisJMHgyMDA0LCAweDljMDIsIDB4MTIxOCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg5MDA2LCAweDBjZTgsCisJMHgwMGI2LCAweDcxMTAsIDB4ZDFiYywgMHgxMWQ4LCAweDcwMjQsIDB4MjA2MCwgMHg5Yzg0LCAweDAwMDcsCisJMHgxMWIwLCAweDljODIsIDB4MWNkMCwgMHgwMjk4LCAweDY4NjgsIDB4OWMwMiwgMHgxMjgwLCAweDcwMDgsCisJMHg5MDg0LCAweDAwZmYsIDB4NjExMCwgMHgyMTU4LCAweGI5MTAsIDB4OTEwNiwgMHgxMTQwLCAweDcwMGMsCisJMHhiOTE0LCAweDkxMDYsIDB4MTEyMCwgMHgyMDA5LCAweDAwNTEsIDB4MDgwYywgMHhiMzUyLCAweDc4MTcsCisJMHgwMTQwLCAweDIwMDEsIDB4MTlmMSwgMHgyMDA0LCAweDkwMDUsIDB4MDkwYywgMHg5YWIxLCAweDAwYmUsCisJMHgwMDA1LCAweDIwMzEsIDB4MDEwNSwgMHgwMDY5LCAweDAwMDUsIDB4MjAzMSwgMHgwMjA2LCAweDAwNDksCisJMHgwMDA1LCAweDIwMzEsIDB4MDIwNywgMHgwMDI5LCAweDAwMDUsIDB4MjAzMSwgMHgwMjEzLCAweDAwMDksCisJMHgwMDA1LCAweDAwYzYsIDB4MDA5NiwgMHgwMGY2LCAweDcwMDAsIDB4OTA4NCwgMHhmMDAwLCAweDkwODYsCisJMHhjMDAwLCAweDA1ZDAsIDB4MDgwYywgMHhiMjdkLCAweDA1YjgsIDB4MDA2NiwgMHgwMGM2LCAweDAwNDYsCisJMHgyMDExLCAweDAyNjMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyODczLCAweDE1YTAsCisJMHgwODBjLCAweDY2YjksIDB4MTU4OCwgMHhiZTEyLCAweGJkMTYsIDB4MmIwMCwgMHgwMDRlLCAweDAwY2UsCisJMHg2MDEyLCAweDA4MGMsIDB4ZDU1NCwgMHgwODBjLCAweDEwMGUsIDB4MDUxMCwgMHgyOTAwLCAweDYwNWEsCisJMHg5MDA2LCAweGE4MDIsIDB4YTg2NiwgMHhhYzZhLCAweGE4NWMsIDB4OTBmOCwgMHgwMDFiLCAweDIwYTksCisJMHgwMDBlLCAweGE4NjAsIDB4MjBlOCwgMHgyMGUxLCAweDAwMDAsIDB4MmZhMCwgMHgyZTk4LCAweDQwMDMsCisJMHgwMDZlLCAweDY2MTYsIDB4NjAwNywgMHgwMDNlLCAweDYwMjMsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsCisJMHgwODBjLCAweDk1NDcsIDB4MDgwYywgMHg5YWIxLCAweDAwZmUsIDB4MDA5ZSwgMHgwMGNlLCAweDAwMDUsCisJMHgwODBjLCAweGIyZDMsIDB4MDA2ZSwgMHgwY2MwLCAweDAwNGUsIDB4MDBjZSwgMHgwY2M4LCAweDAwYzYsCisJMHg3MDAwLCAweDkwOGMsIDB4ZmYwMCwgMHg5MTg0LCAweGYwMDAsIDB4ODEwZiwgMHg5MDg2LCAweDIwMDAsCisJMHgxOTA0LCAweDg2YjYsIDB4OTE4NiwgMHgwMDIyLCAweDE1ZjAsIDB4MjAwMSwgMHgwMTExLCAweDIwMDQsCisJMHg5MDA1LCAweDE5MDQsIDB4ODZiOCwgMHg3MDMwLCAweDkwOGUsIDB4MDQwMCwgMHgwOTA0LCAweDg2YjgsCisJMHg5MDhlLCAweDYwMDAsIDB4MDVlOCwgMHg5MDhlLCAweDU0MDAsIDB4MDVkMCwgMHg5MDhlLCAweDAzMDAsCisJMHgxMWQ4LCAweDIwMDksIDB4MTgzNywgMHgyMTBjLCAweGQxOGMsIDB4MTU5MCwgMHhkMWE0LCAweDE1ODAsCisJMHgwODBjLCAweDZhNjEsIDB4MDU4OCwgMHg2OGIwLCAweDkwODQsIDB4MDBmZiwgMHg3MTAwLCAweDkxOGMsCisJMHgwMGZmLCAweDkxMDYsIDB4MTUxOCwgMHg2ODgwLCAweDY5YjAsIDB4OTE4YywgMHhmZjAwLCAweDkxMDUsCisJMHg3MTA0LCAweDkxMDYsIDB4MTFkOCwgMHgwMGUwLCAweDIwMDksIDB4MDEwMywgMHgyMTBjLCAweGQxYjQsCisJMHgxMWE4LCAweDkwOGUsIDB4NTIwMCwgMHgwOWU4LCAweDkwOGUsIDB4MDUwMCwgMHgwOWQwLCAweDkwOGUsCisJMHg1MDAwLCAweDA5YjgsIDB4MDA1OCwgMHg5MTg2LCAweDAwMjMsIDB4MTE0MCwgMHgwODBjLCAweDg1YzYsCisJMHgwMTI4LCAweDYwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDAxMTgsIDB4MDAwMCwgMHg5MDA2LCAweDAwMTAsCisJMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMDA1LCAweDcwMzAsIDB4OTA4ZSwgMHgwMzAwLCAweDAxMTgsCisJMHg5MDhlLCAweDUyMDAsIDB4MWQ5OCwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDksCisJMHg5MDg2LCAweDAwMDgsIDB4MGQ2OCwgMHgwYzUwLCAweDAxNTYsIDB4MDA0NiwgMHgwMDE2LCAweDAwMzYsCisJMHg3MDM4LCAweDIwMjAsIDB4ODQyNywgMHg5NGE0LCAweDAwMDcsIDB4ZDQ4NCwgMHgwMTQ4LCAweDIwYTksCisJMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLCAweDAyN2EsIDB4MDgwYywgMHhjMzY1LCAweDExNzgsCisJMHhkNDhjLCAweDAxNDgsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4MTgwMSwgMHgyMDExLCAweDAyN2UsCisJMHgwODBjLCAweGMzNjUsIDB4MTEyMCwgMHhkNDk0LCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwM2UsCisJMHgwMDFlLCAweDAwNGUsIDB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDA0NiwgMHgwMDE2LCAweDAwMzYsCisJMHg3MDM4LCAweDIwMjAsIDB4ODQyNywgMHg5NGE0LCAweDAwMDcsIDB4ZDQ4NCwgMHgwMTQ4LCAweDIwYTksCisJMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLCAweDAyNzIsIDB4MDgwYywgMHhjMzY1LCAweDExNzgsCisJMHhkNDhjLCAweDAxNDgsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4MTgwMSwgMHgyMDExLCAweDAyNzYsCisJMHgwODBjLCAweGMzNjUsIDB4MTEyMCwgMHhkNDk0LCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwM2UsCisJMHgwMDFlLCAweDAwNGUsIDB4MDE1ZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLCAweDc4MDAsCisJMHhjMGU1LCAweGMwY2MsIDB4NzgwMiwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDE4MDAsCisJMHg3ODM0LCAweGQwODQsIDB4MTEzMCwgMHgyMDc5LCAweDAyMDAsIDB4NzgwMCwgMHg5MDg1LCAweDEyMDAsCisJMHg3ODAyLCAweDAwZmUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3MDM0LCAweGMwODQsCisJMHg3MDM2LCAweDAwZWUsIDB4MDAwNSwgMHgwMDE2LCAweDIwMDEsIDB4MTgzNywgMHgyMDBjLCAweDkxODQsCisJMHgwMDgwLCAweDAxMTgsIDB4ZDE4YywgMHgwMTE4LCAweDkwMDYsIDB4MDAxZSwgMHgwMDA1LCAweDkwODUsCisJMHgwMDAxLCAweDBjZDgsIDB4MjA3MSwgMHgxOWZiLCAweDcwMDMsIDB4MDAwMywgMHg3MDBmLCAweDAzNjEsCisJMHg5MDA2LCAweDcwMWEsIDB4NzA3YSwgMHg3MDEyLCAweDcwMTcsIDB4MWNkMCwgMHg3MDA3LCAweDAwMDAsCisJMHg3MDI2LCAweDcwMmIsIDB4YTZmZiwgMHg3MDMyLCAweDcwM2EsIDB4NzAzZiwgMHgwMDY0LCAweDcwMzcsCisJMHhhNzY3LCAweDcwNDcsIDB4ZmZmZiwgMHg3MDRhLCAweDcwNGYsIDB4NTY2NywgMHg3MDUyLCAweDcwNjMsCisJMHg4OGRlLCAweDA4MGMsIDB4MTAyNywgMHgwOTBjLCAweDBkYzUsIDB4MjkwMCwgMHg3MDQyLCAweGE4NjcsCisJMHgwMDAzLCAweGE4NmYsIDB4MDEwMCwgMHhhOGFiLCAweGRjYjAsIDB4MDAwNSwgMHgyMDcxLCAweDE5ZmIsCisJMHgxZDA0LCAweDg4MmMsIDB4MjA5MSwgMHg2MDAwLCAweDcwMGMsIDB4ODAwMSwgMHg3MDBlLCAweDE1NDAsCisJMHgyMDAxLCAweDAxM2MsIDB4MjAwNCwgMHg5MDA1LCAweDE5MGMsIDB4ODk0YywgMHgyMDAxLCAweDE4NjksCisJMHgyMDA0LCAweGQwYzQsIDB4MDE1OCwgMHgzYTAwLCAweGQwOGMsIDB4MTE0MCwgMHgyMGQxLCAweDAwMDAsCisJMHgyMGQxLCAweDAwMDEsIDB4MjBkMSwgMHgwMDAwLCAweDA4MGMsIDB4MGRjNSwgMHg3MDBmLCAweDAzNjEsCisJMHg3MDA3LCAweDAwMDEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg4OTIzLCAweDcwNDgsCisJMHg5MDBkLCAweDAxNDgsIDB4ODEwOSwgMHg3MTRhLCAweDExMzAsIDB4NzA0YywgMHgwODBmLCAweDAwMTgsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDI0LCAweDkwMGQsIDB4MDE4OCwgMHg3MDIwLCAweDgwMDEsCisJMHg3MDIyLCAweDExNjgsIDB4NzAyMywgMHgwMDA5LCAweDgxMDksIDB4NzEyNiwgMHg5MTg2LCAweDAzZTgsCisJMHgxMTEwLCAweDcwMjgsIDB4MDgwZiwgMHg4MWZmLCAweDExMTAsIDB4NzAyOCwgMHgwODBmLCAweDcwMzAsCisJMHg5MDBkLCAweDA1YTgsIDB4NzAyYywgMHg4MDAxLCAweDcwMmUsIDB4MTU4OCwgMHgwMDE2LCAweDIwMDksCisJMHgwMzA2LCAweDIxMGMsIDB4OTE4NCwgMHgwMDMwLCAweDAxZTgsIDB4OTE4NCwgMHgwMDQ4LCAweDkwODYsCisJMHgwMDA4LCAweDExYzAsIDB4NzAzOCwgMHg5MDA1LCAweDAxYTgsIDB4ODAwMSwgMHg3MDNhLCAweDExOTAsCisJMHgwODBjLCAweDc2MzcsIDB4MDE3OCwgMHgwMGU2LCAweDIwNzEsIDB4MTllOCwgMHgwODBjLCAweGE3ZjUsCisJMHgwMGVlLCAweDExNDAsIDB4MjAwOSwgMHgxYTg2LCAweDIxMDQsIDB4ODAwMCwgMHgwMjA4LCAweDIwMGEsCisJMHgwMDFlLCAweDAwNjgsIDB4MDAxZSwgMHg3MDJmLCAweDAwMDksIDB4ODEwOSwgMHg3MTMyLCAweDAxMjgsCisJMHg5MTg0LCAweDAwN2YsIDB4MDkwYywgMHhhOGFiLCAweDAwMTAsIDB4NzAzNCwgMHgwODBmLCAweDcwNDQsCisJMHg5MDA1LCAweDAxMTgsIDB4MDMxMCwgMHg4MDAxLCAweDcwNDYsIDB4NzA1NCwgMHg5MDBkLCAweDAxNjgsCisJMHg3MDUwLCAweDgwMDEsIDB4NzA1MiwgMHgxMTQ4LCAweDcwNTMsIDB4MDAwOSwgMHg4MTA5LCAweDcxNTYsCisJMHgxMTIwLCAweDcxNTgsIDB4NzE1NiwgMHg3MDYwLCAweDA4MGYsIDB4NzAxOCwgMHg5MDBkLCAweDAxZDgsCisJMHgwMDE2LCAweDcwNzgsIDB4OTAwZCwgMHgwMTU4LCAweDcwNzQsIDB4ODAwMSwgMHg3MDc2LCAweDExMzgsCisJMHg3MDc3LCAweDAwMDksIDB4ODEwOSwgMHg3MTdhLCAweDExMTAsIDB4NzA3YywgMHgwODBmLCAweDAwMWUsCisJMHg3MDA4LCAweDgwMDEsIDB4NzAwYSwgMHgxMTM4LCAweDcwMGIsIDB4MDAwOSwgMHg4MTA5LCAweDcxMWEsCisJMHgxMTEwLCAweDcwMWMsIDB4MDgwZiwgMHgwMTJlLCAweDcwMDQsIDB4MDAwMiwgMHg4ODU0LCAweDg4NTUsCisJMHg4ODcxLCAweDAwZTYsIDB4MjA3MSwgMHgxOWZiLCAweDcwMTgsIDB4OTAwNSwgMHgxMTIwLCAweDcxMWEsCisJMHg3MjFlLCAweDcwMGIsIDB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDA2LCAweDIwNzEsCisJMHgxOWZiLCAweDcwMWMsIDB4OTIwNiwgMHgxMTIwLCAweDcwMWEsIDB4NzAxZSwgMHg3MDdhLCAweDcwN2UsCisJMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTlmYiwgMHhiODg4LCAweDkxMDIsCisJMHgwMjA4LCAweGI5OGEsIDB4MDBlZSwgMHgwMDA1LCAweDAwMDUsIDB4MDBiNiwgMHg3MTEwLCAweDA4MGMsCisJMHg2NzI0LCAweDExNjgsIDB4Yjg4OCwgMHg4MDAxLCAweDAyNTAsIDB4Yjg4YSwgMHgxMTQwLCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDAxNiwgMHgwODBjLCAweDlhYjEsIDB4MDAxZSwgMHgwMTJlLCAweDgxMDgsCisJMHg5MTgyLCAweDA4MDAsIDB4MDIxOCwgMHg5MDBlLCAweDcwMDcsIDB4MDAwMiwgMHg3MTEyLCAweDAwYmUsCisJMHgwMDA1LCAweDcwMTQsIDB4MjA2MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDQwLCAweDkwMDUsCisJMHgwMTI4LCAweDgwMDEsIDB4NjA0MiwgMHgxMTEwLCAweDA4MGMsIDB4ZDNlNSwgMHg2MDE4LCAweDkwMDUsCisJMHgwNTU4LCAweDgwMDEsIDB4NjAxYSwgMHgxNTQwLCAweDYxMjAsIDB4OTE4NiwgMHgwMDAzLCAweDAxNDgsCisJMHg5MTg2LCAweDAwMDYsIDB4MDEzMCwgMHg5MTg2LCAweDAwMDksIDB4MTFlMCwgMHg2MTFjLCAweGQxYzQsCisJMHgxMTAwLCAweDA4MGMsIDB4ZDBkOCwgMHgwMWIwLCAweDYwMTQsIDB4MjA0OCwgMHhhODg0LCAweDkwOGEsCisJMHgxOTlhLCAweDAyODAsIDB4OTA4MiwgMHgxOTk5LCAweGE4ODYsIDB4OTA4YSwgMHgxOTlhLCAweDAyMTAsCisJMHgyMDAxLCAweDE5OTksIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHg2MTFhLCAweGE4N2MsCisJMHhkMGU0LCAweDAxMTAsIDB4MDgwYywgMHhjZGJjLCAweDAxMmUsIDB4OWM4OCwgMHgwMDE4LCAweDcxMTYsCisJMHgyMDAxLCAweDE4MWEsIDB4MjAwNCwgMHg5MTAyLCAweDAyMjAsIDB4NzAxNywgMHgxY2QwLCAweDcwMDcsCisJMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZmIsIDB4NzAyNywgMHgwN2QwLCAweDcwMjMsCisJMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDFhMDQsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsCisJMHgwMGU2LCAweDIwNzEsIDB4MTlmYiwgMHg3MTMyLCAweDcwMmYsIDB4MDAwOSwgMHgwMGVlLCAweDAwMDUsCisJMHgyMDExLCAweDFhMDcsIDB4MjAxMywgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZmIsCisJMHg3MTFhLCAweDcyMWUsIDB4NzAwYiwgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgwMDg2LCAweDAwMjYsCisJMHg3MDVjLCAweDgwMDAsIDB4NzA1ZSwgMHgyMDAxLCAweDFhMGIsIDB4MjA0NCwgMHhhMDZjLCAweDkwODYsCisJMHgwMDAwLCAweDAxNTAsIDB4NzA3MCwgMHhhMDlhLCAweDcwNmMsIDB4YTA5NiwgMHg3MDY4LCAweGEwOTIsCisJMHg3MDY0LCAweGEwOGUsIDB4MDgwYywgMHgxMGY4LCAweDAwMmUsIDB4MDA4ZSwgMHgwMDA1LCAweDAwMDYsCisJMHgwMDE2LCAweDAwOTYsIDB4MDBhNiwgMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsCisJMHgwMTU2LCAweDA4MGMsIDB4ODc3NiwgMHgwMTVlLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsCisJMHgwMGJlLCAweDAwYWUsIDB4MDA5ZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCisJMHgxOWZiLCAweDcxN2EsIDB4NzI3ZSwgMHg3MDc3LCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsCisJMHgwMDA2LCAweDIwNzEsIDB4MTlmYiwgMHg3MDdjLCAweDkyMDYsIDB4MTExMCwgMHg3MDdhLCAweDcwN2UsCisJMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDY5LCAweDE4MDAsIDB4NjllOCwgMHhkMWU0LCAweDE1MTgsCisJMHgwMDI2LCAweGQxZWMsIDB4MDE0MCwgMHg2YTU0LCAweDY4NzQsIDB4OTIwMiwgMHgwMjg4LCAweDgxMTcsCisJMHg5Mjk0LCAweDAwYzAsIDB4MDA4OCwgMHg5MTg0LCAweDAwMDcsIDB4MDFhMCwgMHg4MTA5LCAweDkxODQsCisJMHgwMDA3LCAweDAxMTAsIDB4NjllYSwgMHgwMDcwLCAweDgxMDcsIDB4OTA4NCwgMHgwMDA3LCAweDkxMGQsCisJMHg4MTA3LCAweDkxMDYsIDB4OTA5NCwgMHgwMGMwLCAweDkxODQsIDB4ZmYzZiwgMHg5MjA1LCAweDY4ZWEsCisJMHgwODBjLCAweDBlZWUsIDB4MDAyZSwgMHgwMDA1LCAweDAwMTYsIDB4MDBjNiwgMHgyMDA5LCAweGZmZjQsCisJMHgyMTBkLCAweDIwNjEsIDB4MDEwMCwgMHg2MGYwLCAweDkxMDAsIDB4NjBmMywgMHgwMDAwLCAweDIwMDksCisJMHhmZmY0LCAweDIwMGYsIDB4MTIyMCwgMHg4MTA4LCAweDIxMDUsIDB4ODAwMCwgMHgyMDBmLCAweDAwY2UsCisJMHgwMDFlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLCAweDFhNzQsIDB4MDBjZSwgMHgwMDA1LCAweDkxODQsCisJMHgwMDBmLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweDkwODAsIDB4MWE3NCwgMHgyMDYwLCAweDAwMDUsCisJMHhhODg0LCAweDkwOGEsIDB4MTk5YSwgMHgxNjM4LCAweDkwMDUsIDB4MTE1MCwgMHgwMGM2LCAweDIwNjEsCisJMHgxYTc0LCAweDYwMTQsIDB4MDBjZSwgMHg5MDA1LCAweDExMzAsIDB4MjAwMSwgMHgwMDFlLCAweDAwMTgsCisJMHg5MDhlLCAweGZmZmYsIDB4MDFiMCwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHg5MTA4LCAweDYxMWEsCisJMHhhODdjLCAweDkwOGMsIDB4MDBjMCwgMHg5MThlLCAweDAwYzAsIDB4MDkwNCwgMHg4OWZhLCAweGQwYjQsCisJMHgxMTY4LCAweGQwYmMsIDB4MTkwNCwgMHg4OWQzLCAweDIwMDksIDB4MDAwNiwgMHgwODBjLCAweDhhMjcsCisJMHgwMDA1LCAweDkwMGUsIDB4MGM2MCwgMHgyMDAxLCAweDE5OTksIDB4MDhiMCwgMHhkMGZjLCAweDAxNjAsCisJMHg5MDhjLCAweDAwMDMsIDB4MDEyMCwgMHg5MThlLCAweDAwMDMsIDB4MTkwNCwgMHg4YTIxLCAweDkwOGMsCisJMHgyMDIwLCAweDkxOGUsIDB4MjAyMCwgMHgwMWE4LCAweDYwMjQsIDB4ZDBkNCwgMHgxMWU4LCAweDIwMDksCisJMHgxODY5LCAweDIxMDQsIDB4ZDA4NCwgMHgxMTM4LCAweDg3ZmYsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDMsCisJMHgwODA0LCAweGIzNTIsIDB4MDAwNSwgMHg4N2ZmLCAweDFkZTgsIDB4MjAwOSwgMHgwMDQyLCAweDA4MDQsCisJMHhiMzUyLCAweDYxMTAsIDB4MDBiNiwgMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWFjLCAweDBkMjAsCisJMHg2MDI0LCAweGMwY2QsIDB4NjAyNiwgMHgwYzAwLCAweGMwZDQsIDB4NjAyNiwgMHhhODkwLCAweDYwMmUsCisJMHhhODhjLCAweDYwMzIsIDB4MDhlMCwgMHhkMGZjLCAweDAxNjAsIDB4OTA4YywgMHgwMDAzLCAweDAxMjAsCisJMHg5MThlLCAweDAwMDMsIDB4MTkwNCwgMHg4YTIxLCAweDkwOGMsIDB4MjAyMCwgMHg5MThlLCAweDIwMjAsCisJMHgwMTcwLCAweDAwNzYsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTc2OCwgMHgwMGZlLCAweDAwN2UsCisJMHg4N2ZmLCAweDExMjAsIDB4MjAwOSwgMHgwMDQyLCAweDA4MGMsIDB4YjM1MiwgMHgwMDA1LCAweDYxMTAsCisJMHgwMGI2LCAweDIxNTgsIDB4YjkwMCwgMHgwMGJlLCAweGQxYWMsIDB4MGQ1OCwgMHg2MTI0LCAweGMxY2QsCisJMHg2MTI2LCAweDBjMzgsIDB4ZDBmYywgMHgwMTg4LCAweDkwOGMsIDB4MjAyMCwgMHg5MThlLCAweDIwMjAsCisJMHgwMWE4LCAweDkwODQsIDB4MDAwMywgMHg5MDhlLCAweDAwMDIsIDB4MDE0OCwgMHg4N2ZmLCAweDExMjAsCisJMHgyMDA5LCAweDAwNDEsIDB4MDgwYywgMHhiMzUyLCAweDAwMDUsIDB4MDBiOSwgMHgwY2U4LCAweDg3ZmYsCisJMHgxZGQ4LCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGIzNTIsIDB4MGNiMCwgMHg2MTEwLCAweDAwYjYsCisJMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWFjLCAweDBkMjAsIDB4NjEyNCwgMHhjMWNkLCAweDYxMjYsCisJMHgwYzAwLCAweDIwMDksIDB4MDAwNCwgMHgwMDE5LCAweDAwMDUsIDB4MjAwOSwgMHgwMDAxLCAweDAwOTYsCisJMHgwODBjLCAweGQwZDgsIDB4MDUxOCwgMHg2MDE0LCAweDIwNDgsIDB4YTk4MiwgMHhhODAwLCAweDYwMTYsCisJMHg5MTg2LCAweDAwMDEsIDB4MTE4OCwgMHhhOTdjLCAweDkxOGMsIDB4ODEwMCwgMHg5MThlLCAweDgxMDAsCisJMHgxMTU4LCAweDAwYzYsIDB4MjA2MSwgMHgxYTc0LCAweDYyMDAsIDB4ZDI4YywgMHgxMTIwLCAweDYyMDQsCisJMHg4MjEwLCAweDAyMDgsIDB4NjIwNiwgMHgwMGNlLCAweDA4MGMsIDB4NmNkZSwgMHg2MDE0LCAweDkwNGQsCisJMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgxOTBjLCAweDg5NzAsIDB4MDA3ZSwgMHgwMDllLCAweDAwMDUsCisJMHgwMTU2LCAweDAwYzYsIDB4MjA2MSwgMHgxYTc0LCAweDYwMDAsIDB4ODFmZiwgMHgwMTEwLCAweDkyMDUsCisJMHgwMDA4LCAweDkyMDQsIDB4NjAwMiwgMHgwMGNlLCAweDAxNWUsIDB4MDAwNSwgMHg2ODAwLCAweGQwOGMsCisJMHgxMTM4LCAweDY4MDgsIDB4OTAwNSwgMHgwMTIwLCAweDgwMDEsIDB4NjgwYSwgMHg5MDg1LCAweDAwMDEsCisJMHgwMDA1LCAweDIwNzEsIDB4MTkyNCwgMHg3MDAzLCAweDAwMDYsIDB4NzAwNywgMHgwMDAwLCAweDcwMGYsCisJMHgwMDAwLCAweDcwMTMsIDB4MDAwMSwgMHgwODBjLCAweDEwMjcsIDB4MDkwYywgMHgwZGM1LCAweGE4NjcsCisJMHgwMDA2LCAweGE4NmIsIDB4MDAwMSwgMHhhOGFiLCAweGRjYjAsIDB4YTg5ZiwgMHgwMDAwLCAweDI5MDAsCisJMHg3MDJlLCAweDcwMzMsIDB4MDAwMCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwOTYsCisJMHgwMGU2LCAweDIwNzEsIDB4MTkyNCwgMHg3MDJjLCAweDIwNDgsIDB4NmEyYywgMHg3MjFlLCAweDZiMzAsCisJMHg3MzIyLCAweDY4MzQsIDB4NzAyNiwgMHhhODk2LCAweDY4MzgsIDB4NzAyYSwgMHhhODlhLCAweDY4MjQsCisJMHg3MDE2LCAweDY4M2MsIDB4NzAxYSwgMHgyMDA5LCAweDAwMjgsIDB4MjAwYSwgMHg5MDA1LCAweDAxNDgsCisJMHg5MDBlLCAweDkxODgsIDB4MDAwYywgMHg4MDAxLCAweDFkZTAsIDB4MjEwMCwgMHg5MjEwLCAweDEyMDgsCisJMHg4MzE4LCAweGFhOGUsIDB4YWI5MiwgMHg3MDEwLCAweGQwODQsIDB4MDE2OCwgMHhjMDg0LCAweDcwMDcsCisJMHgwMDAxLCAweDcwMGYsIDB4MDAwMCwgMHgwMDA2LCAweDIwMDksIDB4MWFkMSwgMHgyMTA0LCAweDkwODIsCisJMHgwMDA3LCAweDIwMGEsIDB4MDAwZSwgMHhjMDk1LCAweDcwMTIsIDB4MjAwOCwgMHgyMDAxLCAweDAwM2IsCisJMHgwODBjLCAweDE2MTEsIDB4OTAwNiwgMHgyMDcxLCAweDE5M2QsIDB4NzAwMiwgMHg3MDA2LCAweDcwMmEsCisJMHgwMGVlLCAweDAwOWUsIDB4MDEyZSwgMHgwMDA1LCAweDIwMDksIDB4MWFkMSwgMHgyMTA0LCAweDkwODAsCisJMHgwMDA3LCAweDIwMGEsIDB4MDAwNSwgMHgwMGU2LCAweDAxMjYsIDB4MDE1NiwgMHgyMDkxLCAweDgwMDAsCisJMHgyMDcxLCAweDE4MDAsIDB4NzE1NCwgMHgyMDAxLCAweDAwMDgsIDB4OTEwYSwgMHgwNjM4LCAweDIwMDEsCisJMHgxODdkLCAweDIwYWMsIDB4OTAwNiwgMHg5MDgwLCAweDAwMDgsIDB4MWYwNCwgMHg4YWUzLCAweDcxYzAsCisJMHg5MTAyLCAweDAyZTAsIDB4MjA3MSwgMHgxODc3LCAweDIwYTksIDB4MDAwNywgMHgwMGM2LCAweDA4MGMsCisJMHhiMjdkLCAweDYwMjMsIDB4MDAwOSwgMHg2MDAzLCAweDAwMDQsIDB4NjAxZiwgMHgwMTAxLCAweDAwODksCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDhjNjEsIDB4MDEyZSwgMHgxZjA0LCAweDhhZWYsCisJMHg5MDA2LCAweDAwY2UsIDB4MDE1ZSwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsCisJMHgwY2M4LCAweDAwZTYsIDB4MDBiNiwgMHgwMDk2LCAweDAwODYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsCisJMHg3MTE4LCAweDcyMGMsIDB4NzYyMCwgMHg3MDA0LCAweGQwODQsIDB4MTEyOCwgMHgyMDIxLCAweDAwMjQsCisJMHgyMDI5LCAweDAwMDIsIDB4MDAyMCwgMHgyMDIxLCAweDAwMmMsIDB4MjAyOSwgMHgwMDBhLCAweDA4MGMsCisJMHgxMDBlLCAweDA5MGMsIDB4MGRjNSwgMHgyOTAwLCAweDYwMTYsIDB4MjA1OCwgMHhhYzY2LCAweDkwMDYsCisJMHhhODAyLCAweGE4MDYsIDB4YTg2YSwgMHhhODdhLCAweGE4YWEsIDB4YTg4NywgMHgwMDA1LCAweGE4N2YsCisJMHgwMDIwLCAweDcwMDgsIDB4YTg5YSwgMHg3MDEwLCAweGE4OWUsIDB4YWU4YSwgMHhhOGFmLCAweGZmZmYsCisJMHhhOGIzLCAweDAwMDAsIDB4ODEwOSwgMHgwMTYwLCAweDA4MGMsIDB4MTAwZSwgMHgwOTBjLCAweDBkYzUsCisJMHhhZDY2LCAweDJiMDAsIDB4YTgwMiwgMHgyOTAwLCAweGI4MDYsIDB4MjA1OCwgMHg4MTA5LCAweDFkYTAsCisJMHgwMDJlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMDhlLCAweDAwOWUsIDB4MDBiZSwgMHgwMGVlLCAweDAwMDUsCisJMHgyMDc5LCAweDAwMDAsIDB4MjA3MSwgMHgxOTI0LCAweDcwMDQsIDB4MDA0YiwgMHg3MDBjLCAweDAwMDIsCisJMHg4YjViLCAweDhiNTQsIDB4OGI1NCwgMHgwMDA1LCAweDhiNjUsIDB4OGJiYiwgMHg4YmJiLCAweDhiYmIsCisJMHg4YmJjLCAweDhiY2QsIDB4OGJjZCwgMHg3MDBjLCAweDBjYmEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHg3OGEwLCAweDc5YTAsIDB4OTEwNiwgMHgxOTA0LCAweDhiYWQsIDB4NzgxNCwgMHhkMGJjLCAweDE5MDQsCisJMHg4YmI2LCAweDAxMmUsIDB4NzAxOCwgMHg5MTBhLCAweDExMjgsIDB4NzAzMCwgMHg5MDA1LCAweDE5MDQsCisJMHg4YmZmLCAweDAwMDUsIDB4MTIxMCwgMHg3MTE0LCAweDkxMGEsIDB4OTE5MiwgMHgwMDBhLCAweDAyMTAsCisJMHgyMDA5LCAweDAwMGEsIDB4MjAwMSwgMHgxODg4LCAweDIwMTQsIDB4MjAwMSwgMHgxOTM2LCAweDIwMDQsCisJMHg5MTAwLCAweDkyMDIsIDB4MGU1MCwgMHgwODBjLCAweDhkNWMsIDB4MjIwMCwgMHg5MTAyLCAweDAyMDgsCisJMHgyMjA4LCAweDAwOTYsIDB4NzAyYywgMHgyMDQ4LCAweGE4NzMsIDB4MDAwMSwgMHhhOTc2LCAweDA4MGMsCisJMHg4ZTY1LCAweDIxMDAsIDB4YTg3ZSwgMHhhODZmLCAweDAwMDAsIDB4MDA5ZSwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDIwMDksIDB4MWExYiwgMHgyMTA0LCAweGMwODUsIDB4MjAwYSwgMHg3MDBmLCAweDAwMDIsCisJMHgwMTJlLCAweDA4MGMsIDB4MTExNywgMHgxZGU4LCAweDAwMDUsIDB4NzhhMCwgMHg3OWEwLCAweDkxMDYsCisJMHgwOTA0LCAweDhiNmQsIDB4MDgwYywgMHg4ZDM0LCAweDAxMmUsIDB4MDAwNSwgMHg3ODEwLCAweGMwYzUsCisJMHg3ODEyLCAweDA4MDQsIDB4OGI2ZCwgMHgwMDA1LCAweDcwMGMsIDB4MDAwMiwgMHg4YmMxLCAweDhiYzQsCisJMHg4YmMzLCAweDA4MGMsIDB4OGI2MywgMHgwMDA1LCAweDgwMDEsIDB4NzAwZSwgMHgwMDk2LCAweDcwMmMsCisJMHgyMDQ4LCAweGE5NzQsIDB4MDA5ZSwgMHgwMDExLCAweDBjYTAsIDB4MDAwNSwgMHgwMDk2LCAweDcwMmMsCisJMHgyMDQ4LCAweDcwMTgsIDB4OTEwMCwgMHg3MjE0LCAweDkyMWEsIDB4MTEzMCwgMHg3MDFjLCAweGE4OGUsCisJMHg3MDIwLCAweGE4OTIsIDB4OTAwNiwgMHgwMDY4LCAweDAwMDYsIDB4MDgwYywgMHg4ZTY1LCAweDIxMDAsCisJMHhhYThjLCAweDkyMTAsIDB4YWE4ZSwgMHgxMjIwLCAweGE4OTAsIDB4OTA4MSwgMHgwMDAwLCAweGE4OTIsCisJMHgwMDBlLCAweDAwOWUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzhhMiwgMHg3MDFhLCAweDA4MGMsCisJMHg4ZDM0LCAweDAxMmUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTkyNCwgMHg3MDBjLCAweDAwMDIsCisJMHg4YmZkLCAweDhiZmQsIDB4OGJmYiwgMHg3MDBmLCAweDAwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4NzAzMCwgMHg5MDA1LCAweDA1MDgsIDB4MjA3OCwgMHg3ODE0LCAweDIwNDgsCisJMHhhZTg4LCAweDAwYjYsIDB4MjA1OSwgMHgwMDAwLCAweDA4MGMsIDB4OGM2YSwgMHgwMGJlLCAweDAxYjAsCisJMHgwMGU2LCAweDIwNzEsIDB4MTkzZCwgMHgwODBjLCAweDhjYjEsIDB4MDBlZSwgMHgwMTc4LCAweDAwOTYsCisJMHgwODBjLCAweDEwMjcsIDB4MjkwMCwgMHgwMDllLCAweDAxNDgsIDB4YThhYSwgMHgwNGI5LCAweDAwNDEsCisJMHgyMDAxLCAweDE5NDcsIDB4MjAwMywgMHgwMDAwLCAweDAxMmUsIDB4MDhjOCwgMHgwMTJlLCAweDAwMDUsCisJMHgwMGQ2LCAweDAwYzYsIDB4MDA4NiwgMHgwMGE2LCAweDI5NDAsIDB4MjY1MCwgMHgyNjAwLCAweDkwMDUsCisJMHgwMTgwLCAweGE4NjQsIDB4OTA4NCwgMHgwMDBmLCAweDIwNjgsIDB4OWQ4OCwgMHgyMGM3LCAweDIxNjUsCisJMHgwMDU2LCAweDIwMjksIDB4MDAwMCwgMHgwODBjLCAweDhkZWEsIDB4MDgwYywgMHgyMDdmLCAweDFkZDgsCisJMHgwMDVlLCAweDAwYWUsIDB4MjAwMSwgMHgxODdmLCAweDIwMDQsIDB4YTg4YSwgMHgwODBjLCAweDE3NjgsCisJMHg3ODFmLCAweDAxMDEsIDB4NzgxMywgMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCisJMHg4Y2MwLCAweDAxMmUsIDB4MDA4ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHg3MDMwLCAweDkwMDUsCisJMHgwMTM4LCAweDIwNzgsIDB4NzgwYywgMHg3MDMyLCAweDIwMDEsIDB4MTk0NywgMHgyMDAzLCAweDAwMDEsCisJMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxOTI0LCAweDcwMzAsIDB4NjAwZSwgMHgyYzAwLCAweDcwMzIsCisJMHgwMGVlLCAweDAwMDUsIDB4MDBkNiwgMHgwMGM2LCAweDAwMjYsIDB4OWI4MCwgMHg4ZjMzLCAweDIwMDUsCisJMHg5MDZkLCAweDA5MGMsIDB4MGRjNSwgMHg5YjgwLCAweDhmMmIsIDB4MjAwNSwgMHg5MDY1LCAweDA5MGMsCisJMHgwZGM1LCAweDYxMTQsIDB4MjYwMCwgMHg5MTAyLCAweDAyNDgsIDB4NjgyOCwgMHg5MTAyLCAweDAyZjAsCisJMHg5MDg1LCAweDAwMDEsIDB4MDAyZSwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHg2ODA0LCAweGQwOTQsCisJMHgwMTQ4LCAweDY4NTQsIDB4ZDA4NCwgMHgxMTc4LCAweGMwODUsIDB4Njg1NiwgMHgyMDExLCAweDgwMjYsCisJMHgwODBjLCAweDRjNDQsIDB4Njg0YywgMHgwMDk2LCAweDkwNGQsIDB4MDkwYywgMHgwZGM1LCAweGE4MDQsCisJMHg4MDAwLCAweGE4MDYsIDB4MDA5ZSwgMHg5MDA2LCAweDIwMzAsIDB4MGMyMCwgMHg2ODU0LCAweGQwOGMsCisJMHgxZDA4LCAweGMwOGQsIDB4Njg1NiwgMHgyMDExLCAweDgwMjUsIDB4MDgwYywgMHg0YzQ0LCAweDY4NGMsCisJMHgwMDk2LCAweDkwNGQsIDB4MDkwYywgMHgwZGM1LCAweGE4MDAsIDB4ODAwMCwgMHhhODAyLCAweDAwOWUsCisJMHgwODg4LCAweDcwMDAsIDB4MjAxOSwgMHgwMDA4LCAweDgzMTksIDB4NzEwNCwgMHg5MTAyLCAweDExMTgsCisJMHgyMzAwLCAweDkwMDUsIDB4MDAyMCwgMHgwMjEwLCAweDkzMDIsIDB4MDAwOCwgMHg4MDAyLCAweDAwMDUsCisJMHgwMGQ2LCAweDc4MTQsIDB4OTAwNSwgMHgwOTBjLCAweDBkYzUsIDB4NzgxYywgMHg5MDg0LCAweDAxMDEsCisJMHg5MDg2LCAweDAxMDEsIDB4MTkwYywgMHgwZGM1LCAweDc4MjcsIDB4MDAwMCwgMHgyMDY5LCAweDE5M2QsCisJMHg2ODA0LCAweDkwODAsIDB4MTkzZiwgMHgyZjA4LCAweDIxMDIsIDB4NjkwNCwgMHg4MTA4LCAweDkxODIsCisJMHgwMDA4LCAweDAyMDgsIDB4OTAwZSwgMHg2OTA2LCAweDkxODAsIDB4MTkzZiwgMHgyMDAzLCAweDAwMDAsCisJMHgwMGRlLCAweDAwMDUsIDB4MDA5NiwgMHgwMGM2LCAweDIwNjAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4YTgsCisJMHgwMDk2LCAweDIwNDgsIDB4OTAwNSwgMHgxOTBjLCAweDEwNDAsIDB4MDA5ZSwgMHhhOGFiLCAweDAwMDAsCisJMHgwODBjLCAweDBmYzAsIDB4MDgwYywgMHhiMmQzLCAweDAwY2UsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMjAsCisJMHg5MDg2LCAweDAwMDksIDB4MTEyOCwgMHg2MDFjLCAweGQwYzQsIDB4MDExMCwgMHg5MDA2LCAweDAwMDUsCisJMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTc4LCAweDYwMTAsCisJMHg5MDA1LCAweDAxNTAsIDB4MDBiNiwgMHgyMDU4LCAweDA4MGMsIDB4OTA2NywgMHgwMGJlLCAweDYwMTMsCisJMHgwMDAwLCAweDYwMWIsIDB4MDAwMCwgMHgwMDEwLCAweDJjMDAsIDB4MDg2MSwgMHgwMDA1LCAweDIwMDksCisJMHgxOTI4LCAweDIxMGMsIDB4ZDE5NCwgMHgwMDA1LCAweDIwMDksIDB4MTkyOCwgMHgyMTBjLCAweGQxYzQsCisJMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwZTYsIDB4MjA3MSwgMHgxOTI0LCAweDcxMTAsCisJMHhjMTk0LCAweGMxODUsIDB4NzAwNywgMHgwMDAwLCAweDcxMTIsIDB4MjAwMSwgMHgwMDNiLCAweDA4MGMsCisJMHgxNjExLCAweDAwZWUsIDB4MDEyZSwgMHgwMDA1LCAweDc4MTQsIDB4ZDBiYywgMHgxMTA4LCAweDAwMDUsCisJMHg3ODEwLCAweGMwYzUsIDB4NzgxMiwgMHgwY2MwLCAweDAwOTYsIDB4MDBkNiwgMHg5MDA2LCAweDcwMDYsCisJMHg3MDBlLCAweDcwMWEsIDB4NzAxZSwgMHg3MDIyLCAweDcwMTYsIDB4NzAyYSwgMHg3MDI2LCAweDcwMmYsCisJMHgwMDAwLCAweDA4MGMsIDB4OGViMywgMHgwMTcwLCAweDA4MGMsIDB4OGVlOCwgMHgwMTU4LCAweDI5MDAsCisJMHg3MDAyLCAweDcwMGEsIDB4NzAxYSwgMHg3MDEzLCAweDAwMDEsIDB4NzAxZiwgMHgwMDBhLCAweDAwZGUsCisJMHgwMDllLCAweDAwMDUsIDB4OTAwZSwgMHgwY2Q4LCAweDAwZTYsIDB4MDA5NiwgMHgwMDg2LCAweDAwZDYsCisJMHgwMGM2LCAweDIwNzEsIDB4MTkzMSwgMHg3MjFjLCAweDIxMDAsIDB4OTIwMiwgMHgxNjE4LCAweDA4MGMsCisJMHg4ZWU4LCAweDA5MGMsIDB4MGRjNSwgMHg3MDE4LCAweDkwMDUsIDB4MTE2MCwgMHgyOTAwLCAweDcwMDIsCisJMHg3MDBhLCAweDcwMWEsIDB4OTAwNiwgMHg3MDA2LCAweDcwMGUsIDB4YTgwNiwgMHhhODAyLCAweDcwMTIsCisJMHg3MDFlLCAweDAwMzgsIDB4MjA0MCwgMHhhODA2LCAweDI5MDAsIDB4YTAwMiwgMHg3MDFhLCAweGE4MDMsCisJMHgwMDAwLCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMWMsIDB4OTA4MCwgMHgwMDBhLCAweDcwMWUsCisJMHg3MjFjLCAweDA4ZDAsIDB4NzIxYywgMHgwMGNlLCAweDAwZGUsIDB4MDA4ZSwgMHgwMDllLCAweDAwZWUsCisJMHgwMDA1LCAweDAwOTYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDIwNzEsIDB4MTkzMSwgMHg3MzAwLCAweDgzMWYsIDB4ODMxZSwgMHg4MzFlLCAweDkzODQsCisJMHgwMDNmLCAweDIwZTgsIDB4OTM5YywgMHhmZmMwLCAweDkzOTgsIDB4MDAwMywgMHg3MTA0LCAweDA4MGMsCisJMHg4ZTY1LCAweDgxMGMsIDB4MjEwMCwgMHg5MzE4LCAweDgwMDMsIDB4MjIyOCwgMHgyMDIxLCAweDAwNzgsCisJMHg5NDAyLCAweDk1MzIsIDB4MDIwOCwgMHgyMDI4LCAweDI1MDAsIDB4ODAwNCwgMHgyMGE4LCAweDIzYTAsCisJMHhhMDAxLCAweGEwMDEsIDB4NDAwNSwgMHgyNTA4LCAweDA4MGMsIDB4OGU2ZSwgMHgyMTMwLCAweDcwMTQsCisJMHg5NjAwLCAweDcwMTYsIDB4MjYwMCwgMHg3MTFjLCAweDkxMDIsIDB4NzAxZSwgMHg3MDA0LCAweDk2MDAsCisJMHgyMDA4LCAweDkwODIsIDB4MDAwYSwgMHgxMTkwLCAweDcwMDAsIDB4MjA0OCwgMHhhODAwLCAweDkwMDUsCisJMHgxMTQ4LCAweDIwMDksIDB4MDAwMSwgMHgwMDI2LCAweDA4MGMsIDB4OGQ1YywgMHgwMDJlLCAweDcwMDAsCisJMHgyMDQ4LCAweGE4MDAsIDB4NzAwMiwgMHg3MDA3LCAweDAwMDAsIDB4MDAwOCwgMHg3MTA2LCAweDI1MDAsCisJMHg5MjEyLCAweDE5MDQsIDB4OGQ5YiwgMHgwMTJlLCAweDAwZWUsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsCisJMHgwMDllLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHg5NTgwLCAweDhmMmIsIDB4MjAwNSwgMHg5MDc1LCAweDA5MGMsIDB4MGRjNSwgMHgwODBjLCAweDhlNDAsCisJMHgwMTJlLCAweDk1ODAsIDB4OGYyNywgMHgyMDA1LCAweDkwNzUsIDB4MDkwYywgMHgwZGM1LCAweDAxNTYsCisJMHgwMTM2LCAweDAxYzYsIDB4MDE0NiwgMHgwMWQ2LCAweDgzMWYsIDB4ODMxZSwgMHg4MzFlLCAweDkzODQsCisJMHgwMDNmLCAweDIwZTAsIDB4OTM4NCwgMHhmZmMwLCAweDkxMDAsIDB4MjA5OCwgMHhhODYwLCAweDIwZTgsCisJMHhhOTVjLCAweDJjMDUsIDB4OTEwMCwgMHgyMGEwLCAweDIwYTksIDB4MDAwMiwgMHg0MDAzLCAweDJlMGMsCisJMHgyZDAwLCAweDAwMDIsIDB4OGUyYSwgMHg4ZTJhLCAweDhlMmMsIDB4OGUyYSwgMHg4ZTJjLCAweDhlMmEsCisJMHg4ZTJhLCAweDhlMmEsIDB4OGUyYSwgMHg4ZTJhLCAweDhlMzIsIDB4OGUyYSwgMHg4ZTMyLCAweDhlMmEsCisJMHg4ZTJhLCAweDhlMmEsIDB4MDgwYywgMHgwZGM1LCAweDQxMDQsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDIsCisJMHg0MDAzLCAweDAwMjgsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDMsIDB4NDEwNCwgMHg0MDAzLCAweDAxZGUsCisJMHgwMTRlLCAweDAxY2UsIDB4MDEzZSwgMHgwMTVlLCAweDAwZWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCisJMHgwMDk2LCAweDcwMTQsIDB4ODAwMSwgMHg3MDE2LCAweDcxMGMsIDB4MjExMCwgMHgwMGYxLCAweDgxMGMsCisJMHg5MTg4LCAweDAwMDMsIDB4NzMwOCwgMHg4MjEwLCAweDkyODIsIDB4MDAwYSwgMHgxMTk4LCAweDcwMDgsCisJMHgyMDQ4LCAweGE4MDAsIDB4OTAwNSwgMHgwMTU4LCAweDAwMDYsIDB4MDgwYywgMHg4ZWY3LCAweDAwOWUsCisJMHhhODA3LCAweDAwMDAsIDB4MjkwMCwgMHg3MDBhLCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweDcwMGYsCisJMHgwMDAwLCAweDAwMDgsIDB4NzIwZSwgMHgwMDllLCAweDAwMDUsIDB4MDAwNiwgMHg4MTBiLCAweDgxMGIsCisJMHgyMTAwLCAweDgxMGIsIDB4OTEwMCwgMHgyMDA4LCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMjYsCisJMHgyMTAwLCAweDkwMDUsIDB4MDE1OCwgMHg5MDkyLCAweDAwMGMsIDB4MDI0MCwgMHg5MDBlLCAweDgxMDgsCisJMHg5MDgyLCAweDAwMGMsIDB4MWRlMCwgMHgwMDJlLCAweDAwMGUsIDB4MDAwNSwgMHg5MDBlLCAweDBjZDgsCisJMHgyZDAwLCAweDkwYjgsIDB4MDAwOCwgMHgyMDMxLCAweDhlYjEsIDB4OTAxZSwgMHg2ODA4LCAweDkwMDUsCisJMHgwMTA4LCAweDgzMTgsIDB4NjkwYywgMHg5MTBhLCAweDAyNDgsIDB4MDE0MCwgMHg4MzE4LCAweDY4MTAsCisJMHg5MTEyLCAweDAyMjAsIDB4MDExOCwgMHg4MzE4LCAweDIyMDgsIDB4MGNkMCwgMHgyMzNhLCAweDY4MDQsCisJMHhkMDg0LCAweDIzMDAsIDB4MjAyMSwgMHgwMDAxLCAweDExNTAsIDB4OTA4MiwgMHgwMDAzLCAweDA5NjcsCisJMHgwYTY3LCAweDg0MjAsIDB4OTA4MiwgMHgwMDA3LCAweDA5NjcsIDB4MGE2NywgMHgwY2QwLCAweDkwODIsCisJMHgwMDAyLCAweDA5NjcsIDB4MGE2NywgMHg4NDIwLCAweDkwODIsIDB4MDAwNSwgMHgwOTY3LCAweDBhNjcsCisJMHgwY2QwLCAweDZjMWEsIDB4MDAwNSwgMHgwMDk2LCAweDAwNDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgyYjAwLCAweDkwODAsIDB4OGYyZiwgMHgyMDA1LCAweDkwMDUsIDB4MDkwYywgMHgwZGM1LCAweDIwMDQsCisJMHg5MGEwLCAweDAwMGEsIDB4MDgwYywgMHgxMDI3LCAweDAxZDAsIDB4MjkwMCwgMHg3MDI2LCAweGE4MDMsCisJMHgwMDAwLCAweGE4MDcsIDB4MDAwMCwgMHgwODBjLCAweDEwMjcsIDB4MDE4OCwgMHg3MDI0LCAweGE4MDIsCisJMHhhODA3LCAweDAwMDAsIDB4MjkwMCwgMHg3MDI2LCAweDk0YTIsIDB4MDAwYSwgMHgwMTEwLCAweDAyMDgsCisJMHgwYzkwLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwNGUsIDB4MDA5ZSwgMHgwMDA1LCAweDcwMjQsCisJMHg5MDA1LCAweDBkYzgsIDB4MjA0OCwgMHhhYzAwLCAweDA4MGMsIDB4MTA0MCwgMHgyNDAwLCAweDBjYzAsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDI0LCAweDIwNDgsIDB4OTAwNSwgMHgwMTMwLCAweGE4MDAsCisJMHg3MDI2LCAweGE4MDMsIDB4MDAwMCwgMHhhODA3LCAweDAwMDAsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4NzAyNCwgMHhhODAyLCAweDI5MDAsIDB4NzAyNiwgMHgwMTJlLCAweDAwMDUsCisJMHgwMDk2LCAweDllODAsIDB4MDAwOSwgMHgyMDA0LCAweDkwMDUsIDB4MDEzOCwgMHgyMDQ4LCAweGE4MDAsCisJMHgwMDA2LCAweDA4MGMsIDB4MTA0MCwgMHgwMDBlLCAweDBjYjgsIDB4MDA5ZSwgMHgwMDA1LCAweDAwOTYsCisJMHg3MDA4LCAweDkwMDUsIDB4MDEzOCwgMHgyMDQ4LCAweGE4MDAsIDB4MDAwNiwgMHgwODBjLCAweDEwNDAsCisJMHgwMDBlLCAweDBjYjgsIDB4OTAwNiwgMHg3MDAyLCAweDcwMGEsIDB4NzAwNiwgMHg3MDBlLCAweDcwMWEsCisJMHg3MDFlLCAweDcwMjIsIDB4NzAyYSwgMHg3MDI2LCAweDcwMmUsIDB4MDA5ZSwgMHgwMDA1LCAweDFhNjcsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgxOTMxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDE4ODgsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgxODc3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwZTYsCisJMHgwMGM2LCAweDAwYjYsIDB4MDBhNiwgMHhhOGE4LCAweDIwNDAsIDB4MjA3MSwgMHgxODc3LCAweDA4MGMsCisJMHg5MDUzLCAweGEwNjcsIDB4MDAyMywgMHg2MDEwLCAweDkwNWQsIDB4MDkwNCwgMHg5MDI4LCAweGI4MTQsCisJMHhhMDZlLCAweGI5MTAsIDB4YTE3MiwgMHhiOWEwLCAweGExNzYsIDB4MjAwMSwgMHgwMDAzLCAweGEwN2UsCisJMHhhODM0LCAweGEwODIsIDB4YTA3YiwgMHgwMDAwLCAweGE4OTgsIDB4OTAwNSwgMHgwMTE4LCAweGEwNzgsCisJMHhjMDg1LCAweGEwN2EsIDB4Mjg1OCwgMHgyMDMxLCAweDAwMTgsIDB4YTA2OCwgMHg5MDhhLCAweDAwMTksCisJMHgxYTBjLCAweDBkYzUsIDB4MjAyMCwgMHgyMDUwLCAweDI5NDAsIDB4YTg2NCwgMHg5MGJjLCAweDAwZmYsCisJMHg5MDhjLCAweDAwMGYsIDB4OTFlMCwgMHgyMGM3LCAweDJjNjUsIDB4OTc4NiwgMHgwMDI0LCAweDJjMDUsCisJMHgxNTkwLCAweDkwOGEsIDB4MDAzNiwgMHgxYTBjLCAweDBkYzUsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsCisJMHg4ZjkzLCAweDhmOTMsIDB4OGY5NSwgMHg4ZjkzLCAweDhmOTMsIDB4OGY5MywgMHg4Zjk3LCAweDhmOTMsCisJMHg4ZjkzLCAweDhmOTMsIDB4OGY5OSwgMHg4ZjkzLCAweDhmOTMsIDB4OGY5MywgMHg4ZjliLCAweDhmOTMsCisJMHg4ZjkzLCAweDhmOTMsIDB4OGY5ZCwgMHg4ZjkzLCAweDhmOTMsIDB4OGY5MywgMHg4ZjlmLCAweDhmOTMsCisJMHg4ZjkzLCAweDhmOTMsIDB4OGZhMSwgMHgwODBjLCAweDBkYzUsIDB4YTE4MCwgMHgwNGI4LCAweGExOTAsCisJMHgwNGE4LCAweGExYTAsIDB4MDQ5OCwgMHhhMWIwLCAweDA0ODgsIDB4YTFjMCwgMHgwNDc4LCAweGExZDAsCisJMHgwNDY4LCAweGExZTAsIDB4MDQ1OCwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCisJMHgwMDFiLCAweDAwMDIsIDB4OGZjNSwgMHg4ZmMzLCAweDhmYzMsIDB4OGZjMywgMHg4ZmMzLCAweDhmYzMsCisJMHg4ZmM3LCAweDhmYzMsIDB4OGZjMywgMHg4ZmMzLCAweDhmYzMsIDB4OGZjMywgMHg4ZmM5LCAweDhmYzMsCisJMHg4ZmMzLCAweDhmYzMsIDB4OGZjMywgMHg4ZmMzLCAweDhmY2IsIDB4OGZjMywgMHg4ZmMzLCAweDhmYzMsCisJMHg4ZmMzLCAweDhmYzMsIDB4OGZjZCwgMHgwODBjLCAweDBkYzUsIDB4YTE4MCwgMHgwMDM4LCAweGExOTgsCisJMHgwMDI4LCAweGExYjAsIDB4MDAxOCwgMHhhMWM4LCAweDAwMDgsIDB4YTFlMCwgMHgyNjAwLCAweDAwMDIsCisJMHg4ZmU5LCAweDhmZWIsIDB4OGZlZCwgMHg4ZmVmLCAweDhmZjEsIDB4OGZmMywgMHg4ZmY1LCAweDhmZjcsCisJMHg4ZmY5LCAweDhmZmIsIDB4OGZmZCwgMHg4ZmZmLCAweDkwMDEsIDB4OTAwMywgMHg5MDA1LCAweDkwMDcsCisJMHg5MDA5LCAweDkwMGIsIDB4OTAwZCwgMHg5MDBmLCAweDkwMTEsIDB4OTAxMywgMHg5MDE1LCAweDkwMTcsCisJMHg5MDE5LCAweDA4MGMsIDB4MGRjNSwgMHhiOWUyLCAweDA0NjgsIDB4YjlkZSwgMHgwNDU4LCAweGI5ZGEsCisJMHgwNDQ4LCAweGI5ZDYsIDB4MDQzOCwgMHhiOWQyLCAweDA0MjgsIDB4YjljZSwgMHgwNDE4LCAweGI5Y2EsCisJMHgwNDA4LCAweGI5YzYsIDB4MDBmOCwgMHhiOWMyLCAweDAwZTgsIDB4YjliZSwgMHgwMGQ4LCAweGI5YmEsCisJMHgwMGM4LCAweGI5YjYsIDB4MDBiOCwgMHhiOWIyLCAweDAwYTgsIDB4YjlhZSwgMHgwMDk4LCAweGI5YWEsCisJMHgwMDg4LCAweGI5YTYsIDB4MDA3OCwgMHhiOWEyLCAweDAwNjgsIDB4Yjk5ZSwgMHgwMDU4LCAweGI5OWEsCisJMHgwMDQ4LCAweGI5OTYsIDB4MDAzOCwgMHhiOTkyLCAweDAwMjgsIDB4Yjk4ZSwgMHgwMDE4LCAweGI5OGEsCisJMHgwMDA4LCAweGI5ODYsIDB4ODYzMSwgMHg4NDIxLCAweDAxMzAsIDB4MDgwYywgMHgyMDdmLCAweDA5MGMsCisJMHgwZGM1LCAweDA4MDQsIDB4OGY2ZCwgMHgwMGFlLCAweDAwYmUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsCisJMHhhODZjLCAweGEwNmUsIDB4YTg3MCwgMHhhMDcyLCAweGEwNzcsIDB4MDBmZiwgMHg5MDA2LCAweDA4MDQsCisJMHg4ZjRmLCAweDAwMDYsIDB4MDAxNiwgMHgwMGI2LCAweDYwMTAsIDB4MjA1OCwgMHhiODEwLCAweDkwMDUsCisJMHgwMWIwLCAweDIwMDEsIDB4MTkyNSwgMHgyMDA0LCAweDkwMDUsIDB4MDE4OCwgMHgyMDAxLCAweDE4MDAsCisJMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTU4LCAweDAwMzYsIDB4MDA0NiwgMHhiYmEwLCAweDIwMjEsCisJMHgwMDA0LCAweDIwMTEsIDB4ODAxNCwgMHgwODBjLCAweDRjNDQsIDB4MDA0ZSwgMHgwMDNlLCAweDAwYmUsCisJMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHg5MDE2LCAweDcxMGMsIDB4YTgzNCwgMHg5MTBhLCAweGE5MzYsCisJMHg3MDA4LCAweDkwMDUsIDB4MDEyMCwgMHg4MjEwLCAweDkxMGEsIDB4MDIzMCwgMHgwMTI4LCAweDcwMTAsCisJMHg4MjEwLCAweDkxMGEsIDB4MDIwOCwgMHgxZGUwLCAweGFhOGEsIDB4YTI2YSwgMHgwMDA1LCAweDAwZjYsCisJMHgwMGQ2LCAweDAwMzYsIDB4MjA3OSwgMHgwMzAwLCAweDc4MWIsIDB4MDIwMCwgMHg3ODE4LCAweGQwOTQsCisJMHgxZGQ4LCAweDc4MWIsIDB4MDIwMiwgMHhhMDAxLCAweGEwMDEsIDB4NzgxOCwgMHhkMDk0LCAweDFkYTAsCisJMHhiOGFjLCAweDkwNmQsIDB4MDE5OCwgMHgyMDc5LCAweDAwMDAsIDB4OWMxZSwgMHgxMTE4LCAweDY4MGMsCisJMHhiOGFlLCAweDAwNTAsIDB4OWMwNiwgMHgwMTMwLCAweDJkNzgsIDB4NjgwYywgMHg5MDZkLCAweDFkZDAsCisJMHgwODBjLCAweDBkYzUsIDB4NmIwYywgMHg3YjBlLCAweDYwMGYsIDB4MDAwMCwgMHgyMDc5LCAweDAzMDAsCisJMHg3ODFiLCAweDAyMDAsIDB4MDAzZSwgMHgwMGRlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsCisJMHgwMDk2LCAweDAwYzYsIDB4MDAzNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMTU2LCAweDIwYTksCisJMHgwMWZmLCAweDIwNzEsIDB4MDMwMCwgMHg3MDFiLCAweDAyMDAsIDB4NzAxOCwgMHhkMDk0LCAweDAxMTAsCisJMHgxZjA0LCAweDkwYTMsIDB4NzAxYiwgMHgwMjAyLCAweGEwMDEsIDB4YTAwMSwgMHg3MDE4LCAweGQwOTQsCisJMHgxZDkwLCAweGI4YWMsIDB4OTA2NSwgMHgwMWYwLCAweDYwMGMsIDB4YjhhZSwgMHg2MDI0LCAweGMwOGQsCisJMHg2MDI2LCAweDYwMDMsIDB4MDAwNCwgMHg2MDFiLCAweDAwMDAsIDB4NjAxMywgMHgwMDAwLCAweDYwMWYsCisJMHgwMTAxLCAweDYwMTQsIDB4OTA0ZCwgMHgwOTBjLCAweDBkYzUsIDB4YTg4YiwgMHgwMDAwLCAweGE4YTgsCisJMHhhOGFiLCAweDAwMDAsIDB4OTA0ZCwgMHgwOTBjLCAweDBkYzUsIDB4MDgwYywgMHgxMDQwLCAweDA4MGMsCisJMHg4YzYxLCAweDA4ZjgsIDB4MjA3MSwgMHgwMzAwLCAweDcwMWIsIDB4MDIwMCwgMHgwMTVlLCAweDAxMmUsCisJMHgwMDNlLCAweDAwY2UsIDB4MDA5ZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGM2LCAweDAwYjYsCisJMHgwMDE2LCAweDAwMDYsIDB4MDE1NiwgMHgwODBjLCAweDI4NzMsIDB4MDE1ZSwgMHgxMWIwLCAweDA4MGMsCisJMHg2NmI5LCAweDE5MGMsIDB4MGRjNSwgMHgwMDBlLCAweDAwMWUsIDB4YjkxMiwgMHhiODE2LCAweDA4MGMsCisJMHhiMjdkLCAweDAxNDAsIDB4MmIwMCwgMHg2MDEyLCAweDYwMjMsIDB4MDAwMSwgMHgyMDA5LCAweDAwMDEsCisJMHgwODBjLCAweGIzNTIsIDB4MDBiZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAwZSwgMHgwMDFlLCAweDBjZDAsCisJMHgwMDY2LCAweDYwMDAsIDB4OTBiMiwgMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHgwMDEzLCAweDAwNmUsCisJMHgwMDA1LCAweDkxMTksIDB4OTExOSwgMHg5MTE5LCAweDkxMWIsIDB4OTE2YywgMHg5MTE5LCAweDkxMTksCisJMHg5MTE5LCAweDkxZTYsIDB4OTExOSwgMHg5MjIzLCAweDkxMTksIDB4OTExOSwgMHg5MTE5LCAweDkxMTksCisJMHg5MTE5LCAweDA4MGMsIDB4MGRjNSwgMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHg5MTJlLCAweDkxMmUsCisJMHg5MTJlLCAweDkxMmUsIDB4OTEyZSwgMHg5MTJlLCAweDkxMmUsIDB4OTEyZSwgMHg5MTJlLCAweDkxMzAsCisJMHg5MTQ1LCAweDkxMmUsIDB4OTEyZSwgMHg5MTJlLCAweDkxMmUsIDB4OTE1OCwgMHgwODBjLCAweDBkYzUsCisJMHgwMDk2LCAweDA4MGMsIDB4OWE2MSwgMHgwODBjLCAweDliZDMsIDB4NjExNCwgMHgyMTQ4LCAweGE4N2IsCisJMHgwMDAwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4YmIsIDB4MDUwMCwgMHgwMGJlLCAweDA4MGMsCisJMHg2Y2EzLCAweDA4MGMsIDB4YjJkMywgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHg5YTYxLCAweDAwZDYsCisJMHg2MTE0LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTMwLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsCisJMHg2ZTlmLCAweDAwOWUsIDB4MDBkZSwgMHgwODBjLCAweGIyZDMsIDB4MDgwYywgMHg5YmQzLCAweDAwMDUsCisJMHgwODBjLCAweDlhNjEsIDB4MDgwYywgMHgzMjUwLCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweDA4MGMsCisJMHhkMGQ4LCAweDAxMjAsIDB4YTg3YiwgMHgwMDI5LCAweDA4MGMsIDB4NmU5ZiwgMHgwMDllLCAweDA4MGMsCisJMHhiMmQzLCAweDA4MGMsIDB4OWJkMywgMHgwMDA1LCAweDYwMWIsIDB4MDAwMCwgMHg5MTgyLCAweDAwNDAsCisJMHgwMDk2LCAweDAwMDIsIDB4OTE4NywgMHg5MTg3LCAweDkxODcsIDB4OTE4NywgMHg5MTg3LCAweDkxODcsCisJMHg5MTg3LCAweDkxODcsIDB4OTE4OSwgMHg5MTg3LCAweDkxODcsIDB4OTE4NywgMHg5MWUyLCAweDkxODcsCisJMHg5MTg3LCAweDkxODcsIDB4OTE4NywgMHg5MTg3LCAweDkxODcsIDB4OTE5MCwgMHg5MTg3LCAweDA4MGMsCisJMHgwZGM1LCAweDYxMTQsIDB4MjE0OCwgMHhhOTM4LCAweDkxOGUsIDB4ZmZmZiwgMHgwOTA0LCAweDkxZTIsCisJMHg2MDI0LCAweGQwOGMsIDB4MTVkOCwgMHgwODBjLCAweDhkMTcsIDB4MDVlMCwgMHgwMGU2LCAweDYxMTQsCisJMHgyMTQ4LCAweDA4MGMsIDB4OGYzNywgMHgwMDk2LCAweGE4YTgsIDB4MjA0OCwgMHgwODBjLCAweDZjM2IsCisJMHgwMDllLCAweGE4YWIsIDB4MDAwMCwgMHg2MDEwLCAweDkwMDUsIDB4MDEyOCwgMHgwMGI2LCAweDIwNTgsCisJMHgwODBjLCAweDkwNjcsIDB4MDBiZSwgMHhhZTg4LCAweDAwYjYsIDB4MjA1OSwgMHgwMDAwLCAweDA4MGMsCisJMHg4YzZhLCAweDAwYmUsIDB4MDFlMCwgMHgyMDcxLCAweDE5M2QsIDB4MDgwYywgMHg4Y2IxLCAweDAxYjgsCisJMHg5MDg2LCAweDAwMDEsIDB4MTEyOCwgMHgyMDAxLCAweDE5NDcsIDB4MjAwNCwgMHg5MDA1LCAweDExNzgsCisJMHgwMDk2LCAweDA4MGMsIDB4MTAwZSwgMHgyOTAwLCAweDAwOWUsIDB4MDE0OCwgMHhhOGFhLCAweDAwZjYsCisJMHgyYzc4LCAweDA4MGMsIDB4OGMyOCwgMHgwMGZlLCAweDAwZWUsIDB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsCisJMHg4YzYxLCAweDBjZDAsIDB4MDgwYywgMHg4ZDFjLCAweDExNjAsIDB4NjAxMCwgMHg5MDA1LCAweDAxMzAsCisJMHgyMDU4LCAweGI4YWMsIDB4OTAwNSwgMHgxOTBjLCAweDBkYzUsIDB4NjAxMiwgMHgyYzAwLCAweDA4MGMsCisJMHg4Y2UyLCAweDAwMDUsIDB4MDgwYywgMHg5MjkwLCAweDAwOWUsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsCisJMHgwMDk2LCAweDAwMDIsIDB4OTFmYSwgMHg5MWZhLCAweDkxZmEsIDB4OTFmYywgMHg5MWZhLCAweDkxZmEsCisJMHg5MWZhLCAweDkyMjEsIDB4OTFmYSwgMHg5MWZhLCAweDkxZmEsIDB4OTFmYSwgMHg5MWZhLCAweDkxZmEsCisJMHg5MWZhLCAweDkxZmEsIDB4MDgwYywgMHgwZGM1LCAweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDYwMTQsCisJMHgyMDQ4LCAweGE4YWMsIDB4YTg0NiwgMHhhOGIwLCAweGE4NGEsIDB4YTgzNywgMHgwMDAwLCAweGE4M2IsCisJMHgwMDAwLCAweGE4ODQsIDB4OTA5MiwgMHgxOTlhLCAweDAyMTAsIDB4MjAwMSwgMHgxOTk5LCAweDgwMDMsCisJMHg4MDEzLCAweDgyMTMsIDB4OTIxMCwgMHg2MjFhLCAweDJjMTAsIDB4MDgwYywgMHgxYmUwLCAweDA4MGMsCisJMHg5NTY0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OWJkMywgMHgwMTJlLCAweDAwOWUsCisJMHgwMDA1LCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweDlhNjEsIDB4MDgwYywgMHg5YmQzLCAweDYxMTQsCisJMHgyMTQ4LCAweGE4N2IsIDB4MDAwMCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGJiLCAweDA1MDAsCisJMHgwMGJlLCAweDA4MGMsIDB4NmU5ZiwgMHgwODBjLCAweGIyZDMsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMDAsCiAJMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZGM1LCAweDAwOTYsIDB4MDAxMywgMHgwMDllLCAweDAwMDUsCi0JMHg5MTM4LCAweDkxMzgsIDB4OTEzOCwgMHg5MTNhLCAweDkxNGEsIDB4OTEzOCwgMHg5MTM4LCAweDkxMzgsCi0JMHg5MTM4LCAweDkxMzgsIDB4OTEzOCwgMHg5MTM4LCAweDkxMzgsIDB4OTEzOCwgMHg5MTM4LCAweDkxMzgsCi0JMHgwODBjLCAweDBkYzUsIDB4MDAzNiwgMHgwMGU2LCAweDIwNzEsIDB4MTllOSwgMHg3MDNjLCAweDljMDYsCi0JMHgxMTIwLCAweDIwMTksIDB4MDAwMCwgMHgwODBjLCAweGE4NzcsIDB4MDgwYywgMHhhYTU5LCAweDAwZWUsCi0JMHgwMDNlLCAweDAwMDUsIDB4NjAyNCwgMHhkMDhjLCAweDExZjAsIDB4MDBmNiwgMHgwMGU2LCAweDYwMWIsCi0JMHgwMDAwLCAweDYwMTQsIDB4MjA0OCwgMHg2MDEwLCAweDkwMDUsIDB4MDEyOCwgMHgwMGI2LCAweDIwNTgsCi0JMHgwODBjLCAweDhmMzEsIDB4MDBiZSwgMHgyMDcxLCAweDE5M2UsIDB4MDgwYywgMHg4YjdkLCAweDAxNjAsCi0JMHgyMDAxLCAweDE4N2YsIDB4MjAwNCwgMHhhODhhLCAweDIwMzEsIDB4MDAwMCwgMHgyYzc4LCAweDA4MGMsCi0JMHg4YWY0LCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwOTYsIDB4YTg4YiwgMHgwMDAwLCAweGE4YTgsCi0JMHgyMDQ4LCAweDA4MGMsIDB4MTA0MCwgMHgwMDllLCAweGE4YWIsIDB4MDAwMCwgMHgwODBjLCAweDhiMmQsCi0JMHgwYzgwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCi0JMHgwMDAwLCAweDAwMDAsIDB4MTg3YSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCi0JMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMzYsIDB4MDA0NiwgMHgyMGE5LCAweDAwMTAsCi0JMHg5MDA2LCAweDgwMDQsIDB4MjAxOSwgMHgwMTAwLCAweDIzMWMsIDB4OTNhNiwgMHgwMDA4LCAweDExMTgsCi0JMHg4MDg2LCAweDgxOGUsIDB4MDAyMCwgMHg4MGY2LCAweDNlMDAsIDB4ODFmNiwgMHgzZTA4LCAweDEyMDgsCi0JMHg5MjAwLCAweDFmMDQsIDB4OTE5MiwgMHg5M2E2LCAweDAwMDgsIDB4MTExOCwgMHg4MDg2LCAweDgxOGUsCi0JMHgwMDIwLCAweDgwZjYsIDB4M2UwMCwgMHg4MWY2LCAweDNlMDgsIDB4MDA0ZSwgMHgwMDNlLCAweDAxMmUsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwNzYsIDB4MDE1NiwgMHgyMGE5LCAweDAwMTAsCi0JMHg5MDA1LCAweDA1MTAsIDB4OTExYSwgMHgxNjAwLCAweDgyMTMsIDB4MjAzOSwgMHgwMTAwLCAweDI3M2MsCi0JMHg5N2JlLCAweDAwMDgsIDB4MTExMCwgMHg4MThkLCAweDAwMTAsIDB4ODFmNSwgMHgzZTA4LCAweDAyMjgsCi0JMHg5MTFhLCAweDEyMjAsIDB4MWYwNCwgMHg5MWJjLCAweDAwMjgsIDB4OTExYSwgMHgyMzA4LCAweDgyMTAsCi0JMHgxZjA0LCAweDkxYmMsIDB4MDAwNiwgMHgzMjAwLCAweDkwODQsIDB4ZWZmZiwgMHgyMDgwLCAweDAwMGUsCi0JMHgwMTVlLCAweDAwN2UsIDB4MDEyZSwgMHgwMDA1LCAweDAwMDYsIDB4MzIwMCwgMHg5MDg1LCAweDEwMDAsCi0JMHgwY2E4LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDIwNzksIDB4MTllOSwgMHgwMTJlLCAweDAwZDYsCi0JMHgyMDY5LCAweDE5ZTksIDB4NjgwMywgMHgwMDA1LCAweDAxNTYsIDB4MDE0NiwgMHgwMWQ2LCAweDIwZTksCi0JMHgwMDAwLCAweDIwNjksIDB4MDIwMCwgMHgwODBjLCAweGFkYmMsIDB4MDQwMSwgMHgwODBjLCAweGFkYTcsCi0JMHgwMGU5LCAweDA4MGMsIDB4YWRhYSwgMHgwMGQxLCAweDA4MGMsIDB4YWRhZCwgMHgwMGI5LCAweDA4MGMsCi0JMHhhZGIwLCAweDAwYTEsIDB4MDgwYywgMHhhZGIzLCAweDAwODksIDB4MDgwYywgMHhhZGI2LCAweDAwNzEsCi0JMHgwODBjLCAweGFkYjksIDB4MDA1OSwgMHgwMWRlLCAweDAxNGUsIDB4MDE1ZSwgMHgyMDY5LCAweDAwMDQsCi0JMHgyZDA0LCAweDkwODUsIDB4ODAwMSwgMHgyMDZhLCAweDAwZGUsIDB4MDAwNSwgMHgyMGE5LCAweDAwMjAsCi0JMHgyMGExLCAweDAyNDAsIDB4MjAwMSwgMHgwMDAwLCAweDQwMDQsIDB4MDAwNSwgMHgwMGM2LCAweDYwMjcsCi0JMHgwMDAxLCAweDc4MDQsIDB4OTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4OTIyZiwgMHg5MjUzLCAweDkyOTQsCi0JMHg5MjM1LCAweDkyNTMsIDB4OTIyZiwgMHg5MjJkLCAweDkyMmQsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsCi0JMHg4NzhmLCAweDA4MGMsIDB4OThlZCwgMHgwMGNlLCAweDAwMDUsIDB4NjJjMCwgMHg4MmZmLCAweDExMTAsCi0JMHgwMGNlLCAweDAwMDUsIDB4MjAxMSwgMHg1ZjkwLCAweDA4MGMsIDB4ODcwOSwgMHg3ODI4LCAweDkwOTIsCi0JMHgwMGM4LCAweDEyMjgsIDB4ODAwMCwgMHg3ODJhLCAweDA4MGMsIDB4NWZkMCwgMHgwYzg4LCAweDYyYzAsCi0JMHgwODBjLCAweGFlZjgsIDB4MDgwYywgMHg1ZjkwLCAweDc4MDcsIDB4MDAwMywgMHg3ODI3LCAweDAwMDAsCi0JMHg3ODJiLCAweDAwMDAsIDB4MGMyOCwgMHgwODBjLCAweDg3OGYsIDB4NjIyMCwgMHhkMmE0LCAweDAxNzAsCi0JMHhkMmNjLCAweDAxNjAsIDB4NzgyYiwgMHgwMDAwLCAweDc4MjQsIDB4OTA2NSwgMHgwOTBjLCAweDBkYzUsCi0JMHgyMDA5LCAweDAwMTMsIDB4MDgwYywgMHhiMTgwLCAweDAwY2UsIDB4MDAwNSwgMHgwMGM2LCAweDc4MjQsCi0JMHg5MDY1LCAweDA5MGMsIDB4MGRjNSwgMHg3ODI4LCAweDkwOTIsIDB4YzM1MCwgMHgxMmMwLCAweDgwMDAsCi0JMHg3ODJhLCAweDAwY2UsIDB4MDgwYywgMHgyYmU3LCAweDAyNzgsIDB4MDBjNiwgMHg3OTI0LCAweDIxNjAsCi0JMHg2MDEwLCAweDkwNmQsIDB4MDkwYywgMHgwZGM1LCAweDc4MDcsIDB4MDAwMCwgMHg3ODI3LCAweDAwMDAsCi0JMHgwMGNlLCAweDA4MGMsIDB4OThlZCwgMHgwYzAwLCAweDA4MGMsIDB4YTRmMywgMHgwOGU4LCAweDIwMTEsCi0JMHgwMTMwLCAweDIyMTQsIDB4MDgwYywgMHhhZWY4LCAweDA4MGMsIDB4ZWUwZiwgMHgyMDA5LCAweDAwMTQsCi0JMHgwODBjLCAweGIxODAsIDB4MDBjZSwgMHgwODgwLCAweDIwMDEsIDB4MWEwNSwgMHgyMDAzLCAweDAwMDAsCi0JMHg2MmMwLCAweDgyZmYsIDB4MTE2MCwgMHg3ODJiLCAweDAwMDAsIDB4NzgyNCwgMHg5MDY1LCAweDA5MGMsCi0JMHgwZGM1LCAweDIwMDksIDB4MDAxMywgMHgwODBjLCAweGIxZDIsIDB4MDBjZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMGM2LCAweDAwZDYsIDB4NzgyNCwgMHg5MDA1LCAweDA5MGMsIDB4MGRjNSwgMHg3ODI4LCAweDkwOTIsCi0JMHhjMzUwLCAweDE2NDgsIDB4ODAwMCwgMHg3ODJhLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDA4MGMsCi0JMHgyYmU3LCAweDAyZjAsIDB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4NzgxYywgMHg5MDVkLCAweDA5MGMsCi0JMHgwZGM1LCAweGI4MDAsIDB4YzBkYywgMHhiODAyLCAweDc5MjQsIDB4MjE2MCwgMHgwODBjLCAweGIxMDEsCi0JMHhiOTNjLCAweDgxZmYsIDB4MDkwYywgMHgwZGM1LCAweDgxMDksIDB4YjkzZSwgMHg3ODA3LCAweDAwMDAsCi0JMHg3ODI3LCAweDAwMDAsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsIDB4MDgwYywgMHg5OGVkLCAweDA4NjgsCi0JMHgwODBjLCAweGE0ZjMsIDB4MDg1MCwgMHgyMDExLCAweDAxMzAsIDB4MjIxNCwgMHgwODBjLCAweGFlZjgsCi0JMHgwODBjLCAweGVlMGYsIDB4NzgyNCwgMHg5MDY1LCAweDIwMDksIDB4MDAxNCwgMHgwODBjLCAweGIxODAsCi0JMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwODA0LCAweDkyYTUsIDB4MDBjNiwgMHgyMDAxLCAweDAwOWIsCi0JMHgyMDA0LCAweGQwZmMsIDB4MTkwYywgMHgxZjE0LCAweDYwMjQsIDB4NjAyNywgMHgwMDAyLCAweGQwZjQsCi0JMHgxNWI4LCAweDYyYzgsIDB4NjBjNCwgMHg5MjA1LCAweDExNzAsIDB4NzgzYywgMHg5MDY1LCAweDAxMzAsCi0JMHgyMDA5LCAweDAwNDksIDB4MDgwYywgMHhiMTgwLCAweDAwY2UsIDB4MDAwNSwgMHgyMDExLCAweDFhMDgsCi0JMHgyMDEzLCAweDAwMDAsIDB4MGNjOCwgMHg3OTNjLCAweDgxZmYsIDB4MGRjMCwgMHg3OTQ0LCAweDkxOTIsCi0JMHg3NTMwLCAweDE2MjgsIDB4ODEwOCwgMHg3OTQ2LCAweDc5M2MsIDB4OTE4OCwgMHgwMDA4LCAweDIxMGMsCi0JMHg5MThlLCAweDAwMDYsIDB4MTEzOCwgMHg2MDE0LCAweDkwODQsIDB4MTk4NCwgMHg5MDg1LCAweDAwMTIsCi0JMHg2MDE2LCAweDBjMTAsIDB4NzkzYywgMHg5MTg4LCAweDAwMDgsIDB4MjEwYywgMHg5MThlLCAweDAwMDksCi0JMHgwZDkwLCAweDYwMTQsIDB4OTA4NCwgMHgxOTg0LCAweDkwODUsIDB4MDAxNiwgMHg2MDE2LCAweDA4YTAsCi0JMHg3OTNjLCAweDIxNjAsIDB4MjAwOSwgMHgwMDRhLCAweDA4MGMsIDB4YjE4MCwgMHgwODY4LCAweDc4NDgsCi0JMHhjMDg1LCAweDc4NGEsIDB4MDg0OCwgMHgwMDA2LCAweDAwMTYsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDYwMGYsIDB4MDAwMCwgMHgyYzA4LCAweDIwNjEsIDB4MTllOSwgMHg2MDIwLCAweDgwMDAsCi0JMHg2MDIyLCAweDYwMTAsIDB4OTAwNSwgMHgwMTQ4LCAweDkwODAsIDB4MDAwMywgMHgyMTAyLCAweDYxMTIsCi0JMHgwMTJlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4NjExNiwgMHg2MTEyLCAweDBjYzAsCi0JMHgwMGQ2LCAweDIwNjksIDB4MTllOSwgMHhiODAwLCAweGQwZDQsIDB4MDE2OCwgMHg2ODIwLCAweDgwMDAsCi0JMHg2ODIyLCAweDkwODYsIDB4MDAwMSwgMHgxMTEwLCAweDJiMDAsIDB4NjgxZSwgMHgwMGRlLCAweDA4MDQsCi0JMHg5OGVkLCAweDAwZGUsIDB4MDAwNSwgMHhjMGQ1LCAweGI4MDIsIDB4NjgxOCwgMHg5MDA1LCAweDAxNjgsCi0JMHhiODU2LCAweGI4NWIsIDB4MDAwMCwgMHgwMDg2LCAweDAwMDYsIDB4MmIwMCwgMHg2ODFhLCAweDAwOGUsCi0JMHhhMDVhLCAweDAwOGUsIDB4MjA2OSwgMHgxOWU5LCAweDBjMDgsIDB4Yjg1NiwgMHhiODVhLCAweDJiMDAsCi0JMHg2ODFhLCAweDY4MWUsIDB4MDhkOCwgMHgwMDA2LCAweDAwMTYsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDYwMGYsIDB4MDAwMCwgMHgyYzA4LCAweDIwNjEsIDB4MTllOSwgMHg2MDIwLCAweDgwMDAsCi0JMHg2MDIyLCAweDYwMDgsIDB4OTAwNSwgMHgwMTQ4LCAweDkwODAsIDB4MDAwMywgMHgyMTAyLCAweDYxMGEsCi0JMHgwMTJlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4NjEwZSwgMHg2MTBhLCAweDBjYzAsCi0JMHgwMGM2LCAweDYwMGYsIDB4MDAwMCwgMHgyYzA4LCAweDIwNjEsIDB4MTllOSwgMHg2MDM0LCAweDkwMDUsCi0JMHgwMTMwLCAweDkwODAsIDB4MDAwMywgMHgyMTAyLCAweDYxMzYsIDB4MDBjZSwgMHgwMDA1LCAweDYxM2EsCi0JMHg2MTM2LCAweDAwY2UsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwYjYsCi0JMHgwMDk2LCAweDAwNzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LCAweDAwMDYsCi0JMHgwMTI2LCAweDkwMmUsIDB4MjA3MSwgMHgxOWU5LCAweDc2MzgsIDB4MjY2MCwgMHgyNjc4LCAweDIwOTEsCi0JMHg4MDAwLCAweDhjZmYsIDB4MDkwNCwgMHg5NDJmLCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDkyMDYsCi0JMHgxOTA0LCAweDk0MmEsIDB4ODdmZiwgMHgwMTIwLCAweDYwNTQsIDB4OTEwNiwgMHgxOTA0LCAweDk0MmEsCi0JMHg3MDNjLCAweDljMDYsIDB4MTE3OCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGE4NzcsCi0JMHg3MDMzLCAweDAwMDAsIDB4OTAwNiwgMHg3MDNlLCAweDcwNDIsIDB4NzA0NiwgMHg3MDRhLCAweDAwM2UsCi0JMHgyMDI5LCAweDAwMDEsIDB4NzAzOCwgMHg5YzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjNhLCAweDcwMzQsCi0JMHg5YzM2LCAweDExNDAsIDB4MmMwMCwgMHg5ZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDM2LCAweDAwMTAsCi0JMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4OWYwNiwgMHgwMTEwLCAweDdlMGUsCi0JMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4Y2U1NiwgMHgwMWYwLCAweDYwMTQsCi0JMHgyMDQ4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDAzLCAweDE1YjgsIDB4NjAwNCwgMHg5MDg2LCAweDAwNDAsCi0JMHgwOTBjLCAweGFhNDksIDB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDAwMTYsCi0JMHgwMDM2LCAweDAwNzYsIDB4MDgwYywgMHhkMTRjLCAweDA4MGMsIDB4ZWQwMCwgMHgwODBjLCAweDZkZDEsCi0JMHgwMDdlLCAweDAwM2UsIDB4MDAxZSwgMHgwODBjLCAweGQwNDEsIDB4MDgwYywgMHhiMTM0LCAweDAwY2UsCi0JMHgwODA0LCAweDkzYzksIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHg5M2M5LCAweDg1ZmYsCi0JMHgwMTIwLCAweDAwMzYsIDB4MDgwYywgMHg5YTBmLCAweDAwM2UsIDB4MDEyZSwgMHgwMDBlLCAweDAwMWUsCi0JMHgwMDJlLCAweDAwM2UsIDB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsIDB4MDA5ZSwgMHgwMGJlLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LCAweDExNTgsCi0JMHgwMDE2LCAweDAwMzYsIDB4MDA3NiwgMHgwODBjLCAweGVkMDAsIDB4MDgwYywgMHhlOTQ4LCAweDAwN2UsCi0JMHgwMDNlLCAweDAwMWUsIDB4MDg5MCwgMHg2MDIwLCAweDkwODYsIDB4MDAwOSwgMHgxMTY4LCAweGE4N2IsCi0JMHgwMDA2LCAweDAwMTYsIDB4MDAzNiwgMHgwMDc2LCAweDA4MGMsIDB4NmRkMSwgMHgwODBjLCAweGIxMDEsCi0JMHgwMDdlLCAweDAwM2UsIDB4MDAxZSwgMHgwODE4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDBhLCAweDA5MDQsCi0JMHg5NDE0LCAweDA4MDQsIDB4OTQwZCwgMHgwMDA2LCAweDAwNjYsIDB4MDA5NiwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGY2LCAweDkwMzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgxOWU5LCAweDc4MzgsCi0JMHg5MDY1LCAweDA5MDQsIDB4OTRjMCwgMHg2MDBjLCAweDAwMDYsIDB4NjAwZiwgMHgwMDAwLCAweDc4M2MsCi0JMHg5YzA2LCAweDExNjgsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhODc3LCAweDc4MzMsCi0JMHgwMDAwLCAweDkwMWUsIDB4N2IzZSwgMHg3YjQyLCAweDdiNDYsIDB4N2I0YSwgMHgwMDNlLCAweDA4MGMsCi0JMHhjZTU2LCAweDA1NDgsIDB4NjAxNCwgMHgyMDQ4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDAzLCAweDE1OTAsCi0JMHgzZTA4LCAweDkxOGUsIDB4MDAwMiwgMHgxMTg4LCAweDYwMTAsIDB4OTAwNSwgMHgwMTcwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDAxNDAsIDB4NjA0MCwgMHg5MDA1LCAweDExYTgsCi0JMHgyMDAxLCAweDE5ODksIDB4MjAwNCwgMHg2MDQyLCAweDAwODAsIDB4NjAwNCwgMHg5MDg2LCAweDAwNDAsCi0JMHgwOTBjLCAweGFhNDksIDB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsCi0JMHg2ZGM0LCAweDA4MGMsIDB4ZDA0MSwgMHgwODBjLCAweGIxMzQsIDB4MDAwZSwgMHgwODA0LCAweDk0NzgsCi0JMHg3ZTNhLCAweDdlMzYsIDB4MDEyZSwgMHgwMGZlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDllLCAweDAwNmUsCi0JMHgwMDBlLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsIDB4MTExOCwgMHgwODBjLCAweGU5NDgsCi0JMHgwYzUwLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA5LCAweDExMzAsIDB4YWI3YSwgMHgwODBjLCAweDZkZDEsCi0JMHgwODBjLCAweGIxMDEsIDB4MGMxMCwgMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwOWE4LCAweDA4NjgsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDA4NiwgMHg5MDQ2LCAweDAwOTksIDB4MDgwYywgMHg5NWNiLCAweDAwOGUsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGY2LCAweDAxMjYsIDB4MjA3OSwgMHgxOWU5LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4OTY2MiwgMHgwODBjLCAweDk2ZjIsIDB4MDEyZSwgMHgwMGZlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAwOTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMTYsCi0JMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOSwgMHg3NjE0LCAweDI2NjAsCi0JMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHg5NTkwLCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDkyMDYsCi0JMHgxOTA0LCAweDk1OGIsIDB4ODhmZiwgMHgwMTIwLCAweDYwNTQsIDB4OTEwNiwgMHgxOTA0LCAweDk1OGIsCi0JMHg3MDI0LCAweDljMDYsIDB4MTU2OCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyMCwgMHhkMGE0LCAweDAxMTAsCi0JMHhkMGNjLCAweDE1MDgsIDB4MDgwYywgMHg4NzhmLCAweDA4MGMsIDB4YTUxNywgMHg2OGMzLCAweDAwMDAsCi0JMHgwODBjLCAweGFhNDksIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsCi0JMHg5Mzg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyZDUyLCAweDkwMDYsCi0JMHgwODBjLCAweDJkNTIsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsCi0JMHgwMDAxLCAweDAwM2UsIDB4MDAyOCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgwODA0LCAweDk1OGIsCi0JMHg3MDE0LCAweDljMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2MTYsIDB4NzAxMCwgMHg5YzM2LCAweDExNDAsCi0JMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMTIsIDB4MDAxMCwgMHg3MDEzLCAweDAwMDAsCi0JMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHg5ZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LCAweDI2NzgsCi0JMHg2MDBmLCAweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NiwgMHgwMWU4LCAweDYwMjAsCi0JMHg5MDg2LCAweDAwMDMsIDB4MTU4MCwgMHgwODBjLCAweGQwNWUsIDB4MTExOCwgMHgwODBjLCAweGJhZTIsCi0JMHgwMDk4LCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwMDE2LCAweDAwMzYsCi0JMHgwMDg2LCAweDA4MGMsIDB4ZDE0YywgMHgwODBjLCAweGVkMDAsIDB4MDgwYywgMHg2ZGQxLCAweDAwOGUsCi0JMHgwMDNlLCAweDAwMWUsIDB4MDgwYywgMHhkMDQxLCAweDA4MGMsIDB4YjEzNCwgMHgwODBjLCAweGE5MWYsCi0JMHgwMGNlLCAweDA4MDQsIDB4OTUwOSwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LCAweDk1MDksCi0JMHgwMTJlLCAweDAwMGUsIDB4MDAxZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxMTU4LCAweDAwMTYsCi0JMHgwMDM2LCAweDAwODYsIDB4MDgwYywgMHhlZDAwLCAweDA4MGMsIDB4ZTk0OCwgMHgwMDhlLCAweDAwM2UsCi0JMHgwMDFlLCAweDA4ZDAsIDB4MDgwYywgMHhiYWUyLCAweDYwMjAsIDB4OTA4NiwgMHgwMDAyLCAweDExNjAsCi0JMHg2MDA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDg1LCAweDAwMGUsIDB4MDkwNCwgMHg5NTcxLCAweDkwODYsCi0JMHgwMDhiLCAweDA5MDQsIDB4OTU3MSwgMHgwODQwLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA1LCAweDE5MjAsCi0JMHg2MDA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDg1LCAweDAwMGUsIDB4MDljOCwgMHg5MDg2LCAweDAwOGIsCi0JMHgwOWIwLCAweDA4MDQsIDB4OTU4NCwgMHgwMGI2LCAweDAwYTYsIDB4MDA5NiwgMHgwMGM2LCAweDAwMDYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg5MjgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDVkLCAweDA5MDQsCi0JMHg5NjViLCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwNjYsIDB4MjA3MSwgMHgxOWU5LCAweGJlNTQsCi0JMHg3MDE4LCAweDliMDYsIDB4MTEwOCwgMHg3NjFhLCAweDcwMWMsIDB4OWIwNiwgMHgxMTMwLCAweDg2ZmYsCi0JMHgxMTE4LCAweDcwMTgsIDB4NzAxZSwgMHgwMDA4LCAweDc2MWUsIDB4Yjg1OCwgMHg5MDRkLCAweDAxMDgsCi0JMHhhZTU2LCAweDk2ZDUsIDB4MDAwMCwgMHgwMTEwLCAweDI5MDAsIDB4YjA1YSwgMHhiODU3LCAweDAwMDAsCi0JMHhiODViLCAweDAwMDAsIDB4YjgwMCwgMHhjMGQ0LCAweGMwZGMsIDB4YjgwMiwgMHgwODBjLCAweDY2NDUsCi0JMHgwOTA0LCAweDk2NTcsIDB4NzYyNCwgMHg4NmZmLCAweDA5MDQsIDB4OTY0NiwgMHg5NjgwLCAweDAwMDUsCi0JMHgyMDA0LCAweDk5MDYsIDB4MTVkOCwgMHgwMGQ2LCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLCAweDkwMDUsCi0JMHgwNTYwLCAweDA4MGMsIDB4ODc4ZiwgMHgwODBjLCAweGE1MTcsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsCi0JMHhhYTQ5LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsCi0JMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmQ1MiwgMHg5MDA2LCAweDA4MGMsCi0JMHgyZDUyLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsCi0JMHgwMDNlLCAweDAwZGUsIDB4MDBjNiwgMHhiODNjLCAweDkwMDUsIDB4MDExMCwgMHg4MDAxLCAweGI4M2UsCi0JMHgyNjYwLCAweDA4MGMsIDB4YjEzNCwgMHgwMGNlLCAweDAwNDgsIDB4MDBkZSwgMHgwMGM2LCAweDI2NjAsCi0JMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgwMGNlLCAweDA4MDQsIDB4OTVmZSwgMHg4OWZmLCAweDAxNTgsCi0JMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHhkMTRjLCAweDA4MGMsCi0JMHhlZDAwLCAweDA4MGMsIDB4NmRkMSwgMHgwODBjLCAweGE5MWYsIDB4MDgwNCwgMHg5NWZlLCAweDAwNmUsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMTJlLCAweDAwMGUsIDB4MDBjZSwgMHgwMDllLCAweDAwYWUsCi0JMHgwMGJlLCAweDAwMDUsIDB4MDA5NiwgMHgwMDA2LCAweDAwNjYsIDB4MDBjNiwgMHgwMGQ2LCAweDkwMzYsCi0JMHg3ODE0LCAweDkwNjUsIDB4MDkwNCwgMHg5NmM1LCAweDYwMGMsIDB4MDAwNiwgMHg2MDBmLCAweDAwMDAsCi0JMHg3ODI0LCAweDljMDYsIDB4MTU4MCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyMCwgMHhkMGE0LCAweDAxMTAsCi0JMHhkMGNjLCAweDE1MDgsIDB4MDgwYywgMHg4NzhmLCAweDA4MGMsIDB4YTUxNywgMHg2OGMzLCAweDAwMDAsCi0JMHgwODBjLCAweGFhNDksIDB4NzgyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsCi0JMHg5Mzg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyZDUyLCAweDkwMDYsCi0JMHgwODBjLCAweDJkNTIsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsCi0JMHgwMDAxLCAweDAwM2UsIDB4MDA0MCwgMHgwODBjLCAweDZhMmEsIDB4MTUyMCwgMHg2MDAzLCAweDAwMDksCi0JMHg2MzBhLCAweDJjMzAsIDB4MDBmOCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZTU0LCAweDAxYjAsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTA4LCAweDA4MGMsIDB4ZDA1ZSwgMHgxMTE4LCAweDA4MGMsCi0JMHhiYWUyLCAweDAwNjAsIDB4MDgwYywgMHg2YTJhLCAweDExNjgsIDB4YTg2NywgMHgwMTAzLCAweGFiN2EsCi0JMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZGQxLCAweDA4MGMsIDB4ZDA0MSwgMHgwODBjLCAweGIxMzQsCi0JMHgwODBjLCAweGE5MWYsIDB4MDAwZSwgMHgwODA0LCAweDk2NjksIDB4N2UxNiwgMHg3ZTEyLCAweDAwZGUsCi0JMHgwMGNlLCAweDAwNmUsIDB4MDAwZSwgMHgwMDllLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsCi0JMHgxMTE4LCAweDA4MGMsIDB4ZTk0OCwgMHgwYzUwLCAweDA4MGMsIDB4YmFlMiwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDAyLCAweDExNTAsIDB4NjAwNCwgMHgwMDA2LCAweDkwODYsIDB4MDA4NSwgMHgwMDBlLCAweDA5OTAsCi0JMHg5MDg2LCAweDAwOGIsIDB4MDk3OCwgMHgwOGQwLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA1LCAweDE5YjAsCi0JMHg2MDA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDg1LCAweDAwMGUsIDB4MGQxOCwgMHg5MDg2LCAweDAwOGIsCi0JMHgwZDAwLCAweDA4NjAsIDB4MDAwNiwgMHgwMDY2LCAweDAwOTYsIDB4MDBiNiwgMHgwMGM2LCAweDAwZDYsCi0JMHg3ODE4LCAweDkwNWQsIDB4MDkwNCwgMHg5NzcyLCAweGI4NTQsIDB4MDAwNiwgMHg5MDA2LCAweGI4NTYsCi0JMHhiODVhLCAweGI4MDAsIDB4YzBkNCwgMHhjMGRjLCAweGI4MDIsIDB4MDgwYywgMHg2NjQ1LCAweDA5MDQsCi0JMHg5NzZmLCAweDdlMjQsIDB4ODZmZiwgMHgwOTA0LCAweDk3NjIsIDB4OTY4MCwgMHgwMDA1LCAweDIwMDQsCi0JMHg5OTA2LCAweDE5MDQsIDB4OTc2MiwgMHgwMGQ2LCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLCAweDkwMDUsCi0JMHgwOTA0LCAweDk3NTksIDB4MDgwYywgMHg4NzhmLCAweDA4MGMsIDB4YTUxNywgMHg2OGMzLCAweDAwMDAsCi0JMHgwODBjLCAweGFhNDksIDB4NzgyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsCi0JMHg5Mzg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyZDUyLCAweDkwMDYsCi0JMHgwODBjLCAweDJkNTIsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsCi0JMHgwMDAxLCAweDAwM2UsIDB4MDBkZSwgMHgwMGM2LCAweDNlMDgsIDB4OTE4ZSwgMHgwMDAyLCAweDExNjgsCi0JMHhiODAwLCAweGQwYmMsIDB4MDE1MCwgMHg5NjgwLCAweDAwMTAsIDB4MjAwYywgMHg4MWZmLCAweDE1MTgsCi0JMHgyMDA5LCAweDE5ODksIDB4MjEwYywgMHgyMTAyLCAweDAwZjAsIDB4YjgzYywgMHg5MDA1LCAweDAxMTAsCi0JMHg4MDAxLCAweGI4M2UsIDB4MjY2MCwgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHhiMTM0LCAweDAwY2UsCisJMHg5MjUwLCAweDkyNTAsIDB4OTI1MCwgMHg5MjUyLCAweDkyNjMsIDB4OTI1MCwgMHg5MjUwLCAweDkyNTAsCisJMHg5MjUwLCAweDkyNTAsIDB4OTI1MCwgMHg5MjUwLCAweDkyNTAsIDB4OTI1MCwgMHg5MjUwLCAweDkyNTAsCisJMHgwODBjLCAweDBkYzUsIDB4MDgwYywgMHhhYzJiLCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLCAweDAwMDYsCisJMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGJiLCAweDA1MDAsIDB4MDBiZSwgMHgwODBjLCAweDZlOWYsCisJMHgwODBjLCAweGIyZDMsIDB4MDAwNSwgMHgwNDYxLCAweDAwMDUsIDB4NjAwMCwgMHg5MDhhLCAweDAwMTAsCisJMHgxYTBjLCAweDBkYzUsIDB4MDA5NiwgMHgwMDEzLCAweDAwOWUsIDB4MDAwNSwgMHg5MjdlLCAweDkyN2UsCisJMHg5MjdlLCAweDkyODAsIDB4OTI5MCwgMHg5MjdlLCAweDkyN2UsIDB4OTI3ZSwgMHg5MjdlLCAweDkyN2UsCisJMHg5MjdlLCAweDkyN2UsIDB4OTI3ZSwgMHg5MjdlLCAweDkyN2UsIDB4OTI3ZSwgMHgwODBjLCAweDBkYzUsCisJMHgwMDM2LCAweDAwZTYsIDB4MjA3MSwgMHgxOWU4LCAweDcwM2MsIDB4OWMwNiwgMHgxMTIwLCAweDIwMTksCisJMHgwMDAwLCAweDA4MGMsIDB4YWE0OSwgMHgwODBjLCAweGFjMmIsIDB4MDBlZSwgMHgwMDNlLCAweDAwMDUsCisJMHg2MDI0LCAweGQwOGMsIDB4MTFmMCwgMHgwMGY2LCAweDAwZTYsIDB4NjAxYiwgMHgwMDAwLCAweDYwMTQsCisJMHgyMDQ4LCAweDYwMTAsIDB4OTAwNSwgMHgwMTI4LCAweDAwYjYsIDB4MjA1OCwgMHgwODBjLCAweDkwNjcsCisJMHgwMGJlLCAweDIwNzEsIDB4MTkzZCwgMHgwODBjLCAweDhjYjEsIDB4MDE2MCwgMHgyMDAxLCAweDE4N2YsCisJMHgyMDA0LCAweGE4OGEsIDB4MjAzMSwgMHgwMDAwLCAweDJjNzgsIDB4MDgwYywgMHg4YzI4LCAweDAwZWUsCisJMHgwMGZlLCAweDAwMDUsIDB4MDA5NiwgMHhhODhiLCAweDAwMDAsIDB4YThhOCwgMHgyMDQ4LCAweDA4MGMsCisJMHgxMDQwLCAweDAwOWUsIDB4YThhYiwgMHgwMDAwLCAweDA4MGMsIDB4OGM2MSwgMHgwYzgwLCAweDIwMDEsCisJMHgxOTI1LCAweDIwMGMsIDB4OTE4ZSwgMHgwMDAwLCAweDE5MGMsIDB4OGQxNywgMHgwNWM4LCAweDAwZTYsCisJMHgyMDcxLCAweDE5MjQsIDB4NzExMCwgMHhjMWM1LCAweDcxMTIsIDB4MDgwYywgMHg4ZDIxLCAweDAwZjYsCisJMHgwMGM2LCAweDIwNzEsIDB4MTAwMCwgMHgwMGI2LCAweDJlMDQsIDB4OTA1ZCwgMHgwMTM4LCAweGI4YWMsCisJMHg5MDY1LCAweDAxMjAsIDB4MDgwYywgMHg4Y2Y3LCAweDA5MGMsIDB4OTA5NiwgMHg4ZTcwLCAweDllODYsCisJMHgxODAwLCAweDFkOTAsIDB4MDBiZSwgMHgwMGQ2LCAweDAwOTYsIDB4MDA0NiwgMHgyMDYxLCAweDFjZDAsCisJMHgyMDAxLCAweDE4MWEsIDB4MjAyNCwgMHg2MDIwLCAweDkwODYsIDB4MDAwMCwgMHgxMTkxLCAweDljZTAsCisJMHgwMDE4LCAweDI0MDAsIDB4OWMwNiwgMHgxZGI4LCAweDAwNGUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwZDEsCisJMHgwMGNlLCAweDAwZmUsIDB4MjA3MSwgMHgxOTI0LCAweDcxMTAsIDB4YzFjNCwgMHg3MTEyLCAweDAwZWUsCisJMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA5LCAweDExNjAsIDB4NjEwMCwgMHg5MTg2LCAweDAwMDQsCisJMHgxMTM4LCAweDYxMTAsIDB4ODFmZiwgMHgxOTBjLCAweDBkYzUsIDB4MmMwMCwgMHgwODBjLCAweDhjZTIsCisJMHg5MDA2LCAweDAwMDUsIDB4MjA3MSwgMHgxOTNmLCAweDIwNzMsIDB4MDAwMCwgMHg4ZTcwLCAweDllODYsCisJMHgxOTQ3LCAweDFkZDAsIDB4MjA3MSwgMHgxOTNkLCAweDcwMDYsIDB4NzAwMiwgMHgyMDAxLCAweDE5MzAsCisJMHgyMDY0LCAweDhjZmYsIDB4MDEzMCwgMHg2MTIwLCAweDkxOGUsIDB4MDAwMCwgMHgxOTBjLCAweDBkYzUsCisJMHgyMTAyLCAweDIwMDEsIDB4MTg4YSwgMHgyMDBjLCAweDgxZmYsIDB4MDE0OCwgMHgwMDk2LCAweDIxNDgsCisJMHgwODBjLCAweDEwNDAsIDB4MDA5ZSwgMHgyMDAxLCAweDE4OGEsIDB4MjAwMywgMHgwMDAwLCAweDIwNzEsCisJMHgxOTMxLCAweDA4MGMsIDB4OGYwMCwgMHgwODA0LCAweDhmMGYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgxODdhLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwMDM2LCAweDAwNDYsIDB4MjBhOSwgMHgwMDEwLCAweDkwMDYsIDB4ODAwNCwgMHgyMDE5LCAweDAxMDAsCisJMHgyMzFjLCAweDkzYTYsIDB4MDAwOCwgMHgxMTE4LCAweDgwODYsIDB4ODE4ZSwgMHgwMDIwLCAweDgwZjYsCisJMHgzZTAwLCAweDgxZjYsIDB4M2UwOCwgMHgxMjA4LCAweDkyMDAsIDB4MWYwNCwgMHg5MzU2LCAweDkzYTYsCisJMHgwMDA4LCAweDExMTgsIDB4ODA4NiwgMHg4MThlLCAweDAwMjAsIDB4ODBmNiwgMHgzZTAwLCAweDgxZjYsCisJMHgzZTA4LCAweDAwNGUsIDB4MDAzZSwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwMDc2LCAweDAxNTYsIDB4MjBhOSwgMHgwMDEwLCAweDkwMDUsIDB4MDUxMCwgMHg5MTFhLCAweDE2MDAsCisJMHg4MjEzLCAweDIwMzksIDB4MDEwMCwgMHgyNzNjLCAweDk3YmUsIDB4MDAwOCwgMHgxMTEwLCAweDgxOGQsCisJMHgwMDEwLCAweDgxZjUsIDB4M2UwOCwgMHgwMjI4LCAweDkxMWEsIDB4MTIyMCwgMHgxZjA0LCAweDkzODAsCisJMHgwMDI4LCAweDkxMWEsIDB4MjMwOCwgMHg4MjEwLCAweDFmMDQsIDB4OTM4MCwgMHgwMDA2LCAweDMyMDAsCisJMHg5MDg0LCAweGVmZmYsIDB4MjA4MCwgMHgwMDBlLCAweDAxNWUsIDB4MDA3ZSwgMHgwMTJlLCAweDAwMDUsCisJMHgwMDA2LCAweDMyMDAsIDB4OTA4NSwgMHgxMDAwLCAweDBjYTgsIDB4MDEyNiwgMHgyMDkxLCAweDI4MDAsCisJMHgyMDc5LCAweDE5ZTgsIDB4MDEyZSwgMHgwMGQ2LCAweDIwNjksIDB4MTllOCwgMHg2ODAzLCAweDAwMDUsCisJMHgwMTU2LCAweDAxNDYsIDB4MDFkNiwgMHgyMGU5LCAweDAwMDAsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsCisJMHhhZjhlLCAweDA0MDEsIDB4MDgwYywgMHhhZjc5LCAweDAwZTksIDB4MDgwYywgMHhhZjdjLCAweDAwZDEsCisJMHgwODBjLCAweGFmN2YsIDB4MDBiOSwgMHgwODBjLCAweGFmODIsIDB4MDBhMSwgMHgwODBjLCAweGFmODUsCisJMHgwMDg5LCAweDA4MGMsIDB4YWY4OCwgMHgwMDcxLCAweDA4MGMsIDB4YWY4YiwgMHgwMDU5LCAweDAxZGUsCisJMHgwMTRlLCAweDAxNWUsIDB4MjA2OSwgMHgwMDA0LCAweDJkMDQsIDB4OTA4NSwgMHg4MDAxLCAweDIwNmEsCisJMHgwMGRlLCAweDAwMDUsIDB4MjBhOSwgMHgwMDIwLCAweDIwYTEsIDB4MDI0MCwgMHgyMDAxLCAweDAwMDAsCisJMHg0MDA0LCAweDAwMDUsIDB4MDBjNiwgMHg2MDI3LCAweDAwMDEsIDB4NzgwNCwgMHg5MDg0LCAweDAwMDcsCisJMHgwMDAyLCAweDkzZjMsIDB4OTQxNywgMHg5NDU4LCAweDkzZjksIDB4OTQxNywgMHg5M2YzLCAweDkzZjEsCisJMHg5M2YxLCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweDg4YzMsIDB4MDgwYywgMHg5YWIxLCAweDAwY2UsCisJMHgwMDA1LCAweDYyYzAsIDB4ODJmZiwgMHgxMTEwLCAweDAwY2UsIDB4MDAwNSwgMHgyMDExLCAweDVmOTcsCisJMHgwODBjLCAweDg4M2QsIDB4NzgyOCwgMHg5MDkyLCAweDAwYzgsIDB4MTIyOCwgMHg4MDAwLCAweDc4MmEsCisJMHgwODBjLCAweDVmZDcsIDB4MGM4OCwgMHg2MmMwLCAweDA4MGMsIDB4YjBjYSwgMHgwODBjLCAweDVmOTcsCisJMHg3ODA3LCAweDAwMDMsIDB4NzgyNywgMHgwMDAwLCAweDc4MmIsIDB4MDAwMCwgMHgwYzI4LCAweDA4MGMsCisJMHg4OGMzLCAweDYyMjAsIDB4ZDJhNCwgMHgwMTcwLCAweGQyY2MsIDB4MDE2MCwgMHg3ODJiLCAweDAwMDAsCisJMHg3ODI0LCAweDkwNjUsIDB4MDkwYywgMHgwZGM1LCAweDIwMDksIDB4MDAxMywgMHgwODBjLCAweGIzNTIsCisJMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHg3ODI0LCAweDkwNjUsIDB4MDkwYywgMHgwZGM1LCAweDc4MjgsCisJMHg5MDkyLCAweGMzNTAsIDB4MTJjMCwgMHg4MDAwLCAweDc4MmEsIDB4MDBjZSwgMHgwODBjLCAweDJiY2UsCisJMHgwMjc4LCAweDAwYzYsIDB4NzkyNCwgMHgyMTYwLCAweDYwMTAsIDB4OTA2ZCwgMHgwOTBjLCAweDBkYzUsCisJMHg3ODA3LCAweDAwMDAsIDB4NzgyNywgMHgwMDAwLCAweDAwY2UsIDB4MDgwYywgMHg5YWIxLCAweDBjMDAsCisJMHgwODBjLCAweGE2YzUsIDB4MDhlOCwgMHgyMDExLCAweDAxMzAsIDB4MjIxNCwgMHgwODBjLCAweGIwY2EsCisJMHgwODBjLCAweGYwOTQsIDB4MjAwOSwgMHgwMDE0LCAweDA4MGMsIDB4YjM1MiwgMHgwMGNlLCAweDA4ODAsCisJMHgyMDAxLCAweDFhMDQsIDB4MjAwMywgMHgwMDAwLCAweDYyYzAsIDB4ODJmZiwgMHgxMTYwLCAweDc4MmIsCisJMHgwMDAwLCAweDc4MjQsIDB4OTA2NSwgMHgwOTBjLCAweDBkYzUsIDB4MjAwOSwgMHgwMDEzLCAweDA4MGMsCisJMHhiM2E0LCAweDAwY2UsIDB4MDAwNSwgMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHg3ODI0LCAweDkwMDUsCisJMHgwOTBjLCAweDBkYzUsIDB4NzgyOCwgMHg5MDkyLCAweGMzNTAsIDB4MTY0OCwgMHg4MDAwLCAweDc4MmEsCisJMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwODBjLCAweDJiY2UsIDB4MDJmMCwgMHgwMGI2LCAweDAwYzYsCisJMHgwMGQ2LCAweDc4MWMsIDB4OTA1ZCwgMHgwOTBjLCAweDBkYzUsIDB4YjgwMCwgMHhjMGRjLCAweGI4MDIsCisJMHg3OTI0LCAweDIxNjAsIDB4MDgwYywgMHhiMmQzLCAweGI5M2MsIDB4ODFmZiwgMHgwOTBjLCAweDBkYzUsCisJMHg4MTA5LCAweGI5M2UsIDB4NzgwNywgMHgwMDAwLCAweDc4MjcsIDB4MDAwMCwgMHgwMGRlLCAweDAwY2UsCisJMHgwMGJlLCAweDA4MGMsIDB4OWFiMSwgMHgwODY4LCAweDA4MGMsIDB4YTZjNSwgMHgwODUwLCAweDIwMTEsCisJMHgwMTMwLCAweDIyMTQsIDB4MDgwYywgMHhiMGNhLCAweDA4MGMsIDB4ZjA5NCwgMHg3ODI0LCAweDkwNjUsCisJMHgyMDA5LCAweDAwMTQsIDB4MDgwYywgMHhiMzUyLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDA4MDQsCisJMHg5NDY5LCAweDAwYzYsIDB4MjAwMSwgMHgwMDliLCAweDIwMDQsIDB4ZDBmYywgMHgxOTBjLCAweDFlZWIsCisJMHg2MDI0LCAweDYwMjcsIDB4MDAwMiwgMHhkMGY0LCAweDE1YjgsIDB4NjJjOCwgMHg2MGM0LCAweDkyMDUsCisJMHgxMTcwLCAweDc4M2MsIDB4OTA2NSwgMHgwMTMwLCAweDIwMDksIDB4MDA0OSwgMHgwODBjLCAweGIzNTIsCisJMHgwMGNlLCAweDAwMDUsIDB4MjAxMSwgMHgxYTA3LCAweDIwMTMsIDB4MDAwMCwgMHgwY2M4LCAweDc5M2MsCisJMHg4MWZmLCAweDBkYzAsIDB4Nzk0NCwgMHg5MTkyLCAweDc1MzAsIDB4MTYyOCwgMHg4MTA4LCAweDc5NDYsCisJMHg3OTNjLCAweDkxODgsIDB4MDAwOCwgMHgyMTBjLCAweDkxOGUsIDB4MDAwNiwgMHgxMTM4LCAweDYwMTQsCisJMHg5MDg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDEyLCAweDYwMTYsIDB4MGMxMCwgMHg3OTNjLCAweDkxODgsCisJMHgwMDA4LCAweDIxMGMsIDB4OTE4ZSwgMHgwMDA5LCAweDBkOTAsIDB4NjAxNCwgMHg5MDg0LCAweDE5ODQsCisJMHg5MDg1LCAweDAwMTYsIDB4NjAxNiwgMHgwOGEwLCAweDc5M2MsIDB4MjE2MCwgMHgyMDA5LCAweDAwNGEsCisJMHgwODBjLCAweGIzNTIsIDB4MDg2OCwgMHg3ODQ4LCAweGMwODUsIDB4Nzg0YSwgMHgwODQ4LCAweDAwMDYsCisJMHgwMDE2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsCisJMHgyMDYxLCAweDE5ZTgsIDB4NjAyMCwgMHg4MDAwLCAweDYwMjIsIDB4NjAxMCwgMHg5MDA1LCAweDAxNDgsCisJMHg5MDgwLCAweDAwMDMsIDB4MjEwMiwgMHg2MTEyLCAweDAxMmUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMGUsCisJMHgwMDA1LCAweDYxMTYsIDB4NjExMiwgMHgwY2MwLCAweDAwZDYsIDB4MjA2OSwgMHgxOWU4LCAweGI4MDAsCisJMHhkMGQ0LCAweDAxNjgsIDB4NjgyMCwgMHg4MDAwLCAweDY4MjIsIDB4OTA4NiwgMHgwMDAxLCAweDExMTAsCisJMHgyYjAwLCAweDY4MWUsIDB4MDBkZSwgMHgwODA0LCAweDlhYjEsIDB4MDBkZSwgMHgwMDA1LCAweGMwZDUsCisJMHhiODAyLCAweDY4MTgsIDB4OTAwNSwgMHgwMTY4LCAweGI4NTYsIDB4Yjg1YiwgMHgwMDAwLCAweDAwODYsCisJMHgwMDA2LCAweDJiMDAsIDB4NjgxYSwgMHgwMDhlLCAweGEwNWEsIDB4MDA4ZSwgMHgyMDY5LCAweDE5ZTgsCisJMHgwYzA4LCAweGI4NTYsIDB4Yjg1YSwgMHgyYjAwLCAweDY4MWEsIDB4NjgxZSwgMHgwOGQ4LCAweDAwMDYsCisJMHgwMDE2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsCisJMHgyMDYxLCAweDE5ZTgsIDB4NjAyMCwgMHg4MDAwLCAweDYwMjIsIDB4NjAwOCwgMHg5MDA1LCAweDAxNDgsCisJMHg5MDgwLCAweDAwMDMsIDB4MjEwMiwgMHg2MTBhLCAweDAxMmUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMGUsCisJMHgwMDA1LCAweDYxMGUsIDB4NjEwYSwgMHgwY2MwLCAweDAwYzYsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsCisJMHgyMDYxLCAweDE5ZTgsIDB4NjAzNCwgMHg5MDA1LCAweDAxMzAsIDB4OTA4MCwgMHgwMDAzLCAweDIxMDIsCisJMHg2MTM2LCAweDAwY2UsIDB4MDAwNSwgMHg2MTNhLCAweDYxMzYsIDB4MDBjZSwgMHgwMDA1LCAweDAwZjYsCisJMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMGI2LCAweDAwOTYsIDB4MDA3NiwgMHgwMDY2LCAweDAwNTYsCisJMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LCAweDAxMjYsIDB4OTAyZSwgMHgyMDcxLCAweDE5ZTgsCisJMHg3NjM4LCAweDI2NjAsIDB4MjY3OCwgMHgyMDkxLCAweDgwMDAsIDB4OGNmZiwgMHgwOTA0LCAweDk1ZjMsCisJMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwgMHg5MjA2LCAweDE5MDQsIDB4OTVlZSwgMHg4N2ZmLCAweDAxMjAsCisJMHg2MDU0LCAweDkxMDYsIDB4MTkwNCwgMHg5NWVlLCAweDcwM2MsIDB4OWMwNiwgMHgxMTc4LCAweDAwMzYsCisJMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhYTQ5LCAweDcwMzMsIDB4MDAwMCwgMHg5MDA2LCAweDcwM2UsCisJMHg3MDQyLCAweDcwNDYsIDB4NzA0YSwgMHgwMDNlLCAweDIwMjksIDB4MDAwMSwgMHg3MDM4LCAweDljMzYsCisJMHgxMTEwLCAweDY2MGMsIDB4NzYzYSwgMHg3MDM0LCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsCisJMHgwMTE4LCAweDJmMDAsIDB4NzAzNiwgMHgwMDEwLCAweDcwMzcsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsCisJMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsCisJMHgwODBjLCAweGQwZDgsIDB4MDFmMCwgMHg2MDE0LCAweDIwNDgsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDMsCisJMHgxNWI4LCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLCAweDA5MGMsIDB4YWMxYiwgMHhhODY3LCAweDAxMDMsCisJMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwMDE2LCAweDAwMzYsIDB4MDA3NiwgMHgwODBjLCAweGQzY2UsCisJMHgwODBjLCAweGVmODUsIDB4MDgwYywgMHg2ZTlmLCAweDAwN2UsIDB4MDAzZSwgMHgwMDFlLCAweDA4MGMsCisJMHhkMmMzLCAweDA4MGMsIDB4YjMwNiwgMHgwMGNlLCAweDA4MDQsIDB4OTU4ZCwgMHgyYzc4LCAweDYwMGMsCisJMHgyMDYwLCAweDA4MDQsIDB4OTU4ZCwgMHg4NWZmLCAweDAxMjAsIDB4MDAzNiwgMHgwODBjLCAweDliZDMsCisJMHgwMDNlLCAweDAxMmUsIDB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwgMHgwMDVlLCAweDAwNmUsCisJMHgwMDdlLCAweDAwOWUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCisJMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxMTU4LCAweDAwMTYsIDB4MDAzNiwgMHgwMDc2LCAweDA4MGMsCisJMHhlZjg1LCAweDA4MGMsIDB4ZWJkNCwgMHgwMDdlLCAweDAwM2UsIDB4MDAxZSwgMHgwODkwLCAweDYwMjAsCisJMHg5MDg2LCAweDAwMDksIDB4MTE2OCwgMHhhODdiLCAweDAwMDYsIDB4MDAxNiwgMHgwMDM2LCAweDAwNzYsCisJMHgwODBjLCAweDZlOWYsIDB4MDgwYywgMHhiMmQzLCAweDAwN2UsIDB4MDAzZSwgMHgwMDFlLCAweDA4MTgsCisJMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwOTA0LCAweDk1ZDgsIDB4MDgwNCwgMHg5NWQxLCAweDAwMDYsCisJMHgwMDY2LCAweDAwOTYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZjYsIDB4OTAzNiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDIwNzksIDB4MTllOCwgMHg3ODM4LCAweDkwNjUsIDB4MDkwNCwgMHg5Njg0LCAweDYwMGMsCisJMHgwMDA2LCAweDYwMGYsIDB4MDAwMCwgMHg3ODNjLCAweDljMDYsIDB4MTE2OCwgMHgwMDM2LCAweDIwMTksCisJMHgwMDAxLCAweDA4MGMsIDB4YWE0OSwgMHg3ODMzLCAweDAwMDAsIDB4OTAxZSwgMHg3YjNlLCAweDdiNDIsCisJMHg3YjQ2LCAweDdiNGEsIDB4MDAzZSwgMHgwODBjLCAweGQwZDgsIDB4MDU0OCwgMHg2MDE0LCAweDIwNDgsCisJMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTkwLCAweDNlMDgsIDB4OTE4ZSwgMHgwMDAyLCAweDExODgsCisJMHg2MDEwLCAweDkwMDUsIDB4MDE3MCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsCisJMHgwMTQwLCAweDYwNDAsIDB4OTAwNSwgMHgxMWE4LCAweDIwMDEsIDB4MTk4OCwgMHgyMDA0LCAweDYwNDIsCisJMHgwMDgwLCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLCAweDA5MGMsIDB4YWMxYiwgMHhhODY3LCAweDAxMDMsCisJMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweDZlOTIsIDB4MDgwYywgMHhkMmMzLCAweDA4MGMsCisJMHhiMzA2LCAweDAwMGUsIDB4MDgwNCwgMHg5NjNjLCAweDdlM2EsIDB4N2UzNiwgMHgwMTJlLCAweDAwZmUsCisJMHgwMGRlLCAweDAwY2UsIDB4MDA5ZSwgMHgwMDZlLCAweDAwMGUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODYsCisJMHgwMDA2LCAweDExMTgsIDB4MDgwYywgMHhlYmQ0LCAweDBjNTAsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDksCisJMHgxMTMwLCAweGFiN2EsIDB4MDgwYywgMHg2ZTlmLCAweDA4MGMsIDB4YjJkMywgMHgwYzEwLCAweDYwMjAsCisJMHg5MDg2LCAweDAwMGEsIDB4MDlhOCwgMHgwODY4LCAweDAwMTYsIDB4MDAyNiwgMHgwMDg2LCAweDkwNDYsCisJMHgwMDk5LCAweDA4MGMsIDB4OTc4ZiwgMHgwMDhlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZjYsCisJMHgwMTI2LCAweDIwNzksIDB4MTllOCwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5ODI2LCAweDA4MGMsCisJMHg5OGI2LCAweDAxMmUsIDB4MDBmZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGY2LCAweDAwZTYsCisJMHgwMGQ2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDE2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgyMDcxLCAweDE5ZTgsIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwOTA0LCAweDk3NTQsCisJMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwgMHg5MjA2LCAweDE5MDQsIDB4OTc0ZiwgMHg4OGZmLCAweDAxMjAsCisJMHg2MDU0LCAweDkxMDYsIDB4MTkwNCwgMHg5NzRmLCAweDcwMjQsIDB4OWMwNiwgMHgxNTY4LCAweDIwNjksCisJMHgwMTAwLCAweDY4MjAsIDB4ZDBhNCwgMHgwMTEwLCAweGQwY2MsIDB4MTUwOCwgMHgwODBjLCAweDg4YzMsCisJMHgwODBjLCAweGE2ZTksIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YWMxYiwgMHg3MDI3LCAweDAwMDAsCisJMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsCisJMHgwMTAwLCAweDA4MGMsIDB4MmQzOSwgMHg5MDA2LCAweDA4MGMsIDB4MmQzOSwgMHgyMDY5LCAweDAxMDAsCisJMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHgwMDI4LCAweDYwMDMsCisJMHgwMDA5LCAweDYzMGEsIDB4MDgwNCwgMHg5NzRmLCAweDcwMTQsIDB4OWMzNiwgMHgxMTEwLCAweDY2MGMsCisJMHg3NjE2LCAweDcwMTAsIDB4OWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4OWYzNiwgMHgwMTE4LCAweDJmMDAsCisJMHg3MDEyLCAweDAwMTAsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweDlmMDYsCisJMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDE0LCAweDIwNDgsCisJMHgwODBjLCAweGQwZDgsIDB4MDFlOCwgMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTgwLCAweDA4MGMsCisJMHhkMmUwLCAweDExMTgsIDB4MDgwYywgMHhiY2I2LCAweDAwOTgsIDB4YTg2NywgMHgwMTAzLCAweGFiN2EsCisJMHhhODc3LCAweDAwMDAsIDB4MDAxNiwgMHgwMDM2LCAweDAwODYsIDB4MDgwYywgMHhkM2NlLCAweDA4MGMsCisJMHhlZjg1LCAweDA4MGMsIDB4NmU5ZiwgMHgwMDhlLCAweDAwM2UsIDB4MDAxZSwgMHgwODBjLCAweGQyYzMsCisJMHgwODBjLCAweGIzMDYsIDB4MDgwYywgMHhhYWYxLCAweDAwY2UsIDB4MDgwNCwgMHg5NmNkLCAweDJjNzgsCisJMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHg5NmNkLCAweDAxMmUsIDB4MDAwZSwgMHgwMDFlLCAweDAwNmUsCisJMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwOWUsIDB4MDBiZSwgMHgwMDA1LCAweDYwMjAsCisJMHg5MDg2LCAweDAwMDYsIDB4MTE1OCwgMHgwMDE2LCAweDAwMzYsIDB4MDA4NiwgMHgwODBjLCAweGVmODUsCisJMHgwODBjLCAweGViZDQsIDB4MDA4ZSwgMHgwMDNlLCAweDAwMWUsIDB4MDhkMCwgMHgwODBjLCAweGJjYjYsCisJMHg2MDIwLCAweDkwODYsIDB4MDAwMiwgMHgxMTYwLCAweDYwMDQsIDB4MDAwNiwgMHg5MDg2LCAweDAwODUsCisJMHgwMDBlLCAweDA5MDQsIDB4OTczNSwgMHg5MDg2LCAweDAwOGIsIDB4MDkwNCwgMHg5NzM1LCAweDA4NDAsCisJMHg2MDIwLCAweDkwODYsIDB4MDAwNSwgMHgxOTIwLCAweDYwMDQsIDB4MDAwNiwgMHg5MDg2LCAweDAwODUsCisJMHgwMDBlLCAweDA5YzgsIDB4OTA4NiwgMHgwMDhiLCAweDA5YjAsIDB4MDgwNCwgMHg5NzQ4LCAweDAwYjYsCisJMHgwMGE2LCAweDAwOTYsIDB4MDBjNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDkyODAsCisJMHgxMDAwLCAweDIwMDQsIDB4OTA1ZCwgMHgwOTA0LCAweDk4MWYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsCisJMHgwMDY2LCAweDIwNzEsIDB4MTllOCwgMHhiZTU0LCAweDcwMTgsIDB4OWIwNiwgMHgxMTA4LCAweDc2MWEsCisJMHg3MDFjLCAweDliMDYsIDB4MTEzMCwgMHg4NmZmLCAweDExMTgsIDB4NzAxOCwgMHg3MDFlLCAweDAwMDgsCisJMHg3NjFlLCAweGI4NTgsIDB4OTA0ZCwgMHgwMTA4LCAweGFlNTYsIDB4OTZkNSwgMHgwMDAwLCAweDAxMTAsCisJMHgyOTAwLCAweGIwNWEsIDB4Yjg1NywgMHgwMDAwLCAweGI4NWIsIDB4MDAwMCwgMHhiODAwLCAweGMwZDQsCisJMHhjMGRjLCAweGI4MDIsIDB4MDgwYywgMHg2NjRjLCAweDA5MDQsIDB4OTgxYiwgMHg3NjI0LCAweDg2ZmYsCisJMHgwOTA0LCAweDk4MGEsIDB4OTY4MCwgMHgwMDA1LCAweDIwMDQsIDB4OTkwNiwgMHgxNWQ4LCAweDAwZDYsCisJMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHg5MDA1LCAweDA1NjAsIDB4MDgwYywgMHg4OGMzLCAweDA4MGMsCisJMHhhNmU5LCAweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweGFjMWIsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsCisJMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHg5Mzg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLCAweDAxMDAsCisJMHgwODBjLCAweDJkMzksIDB4OTAwNiwgMHgwODBjLCAweDJkMzksIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsCisJMHhkMDg0LCAweDAxMTAsIDB4NjgyNywgMHgwMDAxLCAweDAwM2UsIDB4MDBkZSwgMHgwMGM2LCAweGI4M2MsCisJMHg5MDA1LCAweDAxMTAsIDB4ODAwMSwgMHhiODNlLCAweDI2NjAsIDB4MDgwYywgMHhiMzA2LCAweDAwY2UsCiAJMHgwMDQ4LCAweDAwZGUsIDB4MDBjNiwgMHgyNjYwLCAweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDAwY2UsCi0JMHgwODA0LCAweDk3MDUsIDB4ODlmZiwgMHgwMTM4LCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLCAweGE4NzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NmRkMSwgMHgwODBjLCAweGE5MWYsIDB4MDgwNCwgMHg5NzA1LCAweDAwMGUsCi0JMHgwODA0LCAweDk2ZjksIDB4NzgxZSwgMHg3ODFhLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDAwOWUsCi0JMHgwMDZlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDA5NiwgMHgwMDY2LCAweGI4MDAsCi0JMHhkMGRjLCAweDAxYTAsIDB4Yjg0YywgMHg5MDRkLCAweDAxODgsIDB4YTg3OCwgMHg5NjA2LCAweDExNzAsCi0JMHgyMDcxLCAweDE5ZTksIDB4NzAyNCwgMHg5MDM1LCAweDAxNDgsIDB4OTA4MCwgMHgwMDA1LCAweDIwMDQsCi0JMHg5OTA2LCAweDExMjAsIDB4YjgwMCwgMHhjMGRjLCAweGI4MDIsIDB4MDAyOSwgMHgwMDZlLCAweDAwOWUsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg3OGMwLCAweDkwMDUsCi0JMHgxMTM4LCAweDAwYzYsIDB4MjY2MCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgwMGNlLCAweDA0YjgsCi0JMHgwODBjLCAweGE1MTcsIDB4NzhjMywgMHgwMDAwLCAweDA4MGMsIDB4YWE0OSwgMHg3MDI3LCAweDAwMDAsCi0JMHgwMDM2LCAweDIwNzksIDB4MDE0MCwgMHg3YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsCi0JMHgwMTAwLCAweDA4MGMsIDB4MmQ1MiwgMHg5MDA2LCAweDA4MGMsIDB4MmQ1MiwgMHgyMDc5LCAweDAxMDAsCi0JMHg3ODI0LCAweGQwODQsIDB4MDExMCwgMHg3ODI3LCAweDAwMDEsIDB4MDgwYywgMHhhYTQ5LCAweDAwM2UsCi0JMHgwODBjLCAweDY2NDUsIDB4MDBjNiwgMHhiODNjLCAweDkwMDUsIDB4MDExMCwgMHg4MDAxLCAweGI4M2UsCi0JMHgyNjYwLCAweDA4MGMsIDB4YjEwMSwgMHgwMGNlLCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLCAweGE4NzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4ZDE0YywgMHgwODBjLCAweDZkZDEsIDB4MDgwYywgMHhhOTFmLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDBlNiwgMHgwMGM2LCAweDIwMTEsIDB4MDEwMSwgMHgyMjA0LCAweGMwYzQsCi0JMHgyMDEyLCAweDIwMDEsIDB4MTgwYywgMHgyMDE0LCAweGMyZTQsIDB4MjIwMiwgMHgyMDcxLCAweDE5ZTksCi0JMHg3MDA0LCAweDkwODQsIDB4MDAwNywgMHgwMDAyLCAweDk3ZmUsIDB4OTgwMiwgMHg5ODIwLCAweDk4NDksCi0JMHg5ODg3LCAweDk3ZmUsIDB4OTgxOSwgMHg5N2ZjLCAweDA4MGMsIDB4MGRjNSwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMGJlLCAweDAwMDUsIDB4NzAyNCwgMHg5MDY1LCAweDAxNDgsIDB4NzAyMCwgMHg4MDAxLCAweDcwMjIsCi0JMHg2MDBjLCAweDkwMTUsIDB4MDE1OCwgMHg3MjE2LCAweDYwMGYsIDB4MDAwMCwgMHg3MDA3LCAweDAwMDAsCi0JMHg3MDI3LCAweDAwMDAsIDB4MDBjZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHg3MjE2LCAweDcyMTIsCi0JMHgwY2E4LCAweDcwMDcsIDB4MDAwMCwgMHg3MDI3LCAweDAwMDAsIDB4NzAyMCwgMHg5MDA1LCAweDAwNzAsCi0JMHg2MDEwLCAweDIwNTgsIDB4MDgwYywgMHg2NjQ1LCAweGI4MDAsIDB4YzBkYywgMHhiODAyLCAweDcwMDcsCi0JMHgwMDAwLCAweDcwMjcsIDB4MDAwMCwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwgMHgxMTQ4LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMTQsIDB4ZDJlYywgMHgxMTgwLCAweDAwY2UsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsCi0JMHhiODU0LCAweDkwMTUsIDB4MDEyMCwgMHg3MjFlLCAweDA4MGMsIDB4OThlZCwgMHgwY2E4LCAweDcyMTgsCi0JMHg3MjFlLCAweDA4MGMsIDB4OThlZCwgMHgwYzgwLCAweGMyZWMsIDB4MjIwMiwgMHgwODBjLCAweDlhMGYsCi0JMHgwYzU4LCAweDcwMjQsIDB4OTA2NSwgMHgwNWI4LCAweDcwMGMsIDB4OWMwNiwgMHgxMTYwLCAweDA4MGMsCi0JMHhhOTFmLCAweDYwMGMsIDB4OTAxNSwgMHgwMTIwLCAweDcyMGUsIDB4NjAwZiwgMHgwMDAwLCAweDA0NDgsCi0JMHg3MjBlLCAweDcyMGEsIDB4MDQzMCwgMHg3MDE0LCAweDljMDYsIDB4MTE2MCwgMHgwODBjLCAweGE5MWYsCi0JMHg2MDBjLCAweDkwMTUsIDB4MDEyMCwgMHg3MjE2LCAweDYwMGYsIDB4MDAwMCwgMHgwMGQwLCAweDcyMTYsCi0JMHg3MjEyLCAweDAwYjgsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDMsIDB4MTE5OCwgMHg2MDEwLCAweDIwNTgsCi0JMHgwODBjLCAweDY2NDUsIDB4YjgwMCwgMHhjMGRjLCAweGI4MDIsIDB4MDgwYywgMHhhOTFmLCAweDcwMWMsCi0JMHg5MDY1LCAweDAxMzgsIDB4Yjg1NCwgMHg5MDE1LCAweDAxMTAsIDB4NzIxZSwgMHgwMDEwLCAweDcyMTgsCi0JMHg3MjFlLCAweDcwMjcsIDB4MDAwMCwgMHgwMGNlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDcwMjQsCi0JMHg5MDY1LCAweDAxNDAsIDB4MDgwYywgMHhhOTFmLCAweDYwMGMsIDB4OTAxNSwgMHgwMTU4LCAweDcyMGUsCi0JMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHhhYTQ5LCAweDcwMjcsIDB4MDAwMCwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMGJlLCAweDAwMDUsIDB4NzIwZSwgMHg3MjBhLCAweDBjYTgsIDB4MDBkNiwgMHgyMDY5LCAweDE5ZTksCi0JMHg2ODMwLCAweDkwODQsIDB4MDAwMywgMHgwMDAyLCAweDk4YWEsIDB4OThhYywgMHg5OGQwLCAweDk4YTgsCi0JMHgwODBjLCAweDBkYzUsIDB4MDBkZSwgMHgwMDA1LCAweDAwYzYsIDB4Njg0MCwgMHg5MDg2LCAweDAwMDEsCi0JMHgwMWI4LCAweDY4M2MsIDB4OTA2NSwgMHgwMTMwLCAweDYwMGMsIDB4OTAxNSwgMHgwMTcwLCAweDZhM2EsCi0JMHg2MDBmLCAweDAwMDAsIDB4NjgzMywgMHgwMDAwLCAweDY4M2YsIDB4MDAwMCwgMHgyMDExLCAweDFhMDgsCi0JMHgyMDEzLCAweDAwMDAsIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4NjgzYSwgMHg2ODM2LCAweDBjOTAsCi0JMHg2ODQzLCAweDAwMDAsIDB4NjgzOCwgMHg5MDY1LCAweDBkNjgsIDB4NjAwMywgMHgwMDAzLCAweDBjNTAsCi0JMHgwMGM2LCAweDkwMDYsIDB4Njg0MiwgMHg2ODQ2LCAweDY4NGEsIDB4NjgzYywgMHg5MDY1LCAweDAxNjAsCi0JMHg2MDBjLCAweDkwMTUsIDB4MDEzMCwgMHg2YTNhLCAweDYwMGYsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsCi0JMHgwMDE4LCAweDY4M2UsIDB4NjgzYSwgMHg2ODM2LCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4YzFlNSwgMHgyMTAyLCAweDAwMDUsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCi0JMHhkMWVjLCAweDAxMjAsIDB4YzFlYywgMHgyMTAyLCAweDA4MGMsIDB4OWEwZiwgMHgyMDAxLCAweDE5ZjUsCi0JMHgyMDA0LCAweDkwODYsIDB4MDAwMSwgMHgwZDU4LCAweDAwZDYsIDB4MjA2OSwgMHgxOWU5LCAweDY4MDQsCi0JMHg5MDg0LCAweDAwMDcsIDB4MDAwNiwgMHg5MDA1LCAweDExYzgsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsCi0JMHg5MDg0LCAweDAwMjgsIDB4MTE5OCwgMHgyMDAxLCAweDE5N2QsIDB4MjAwNCwgMHg5MDg2LCAweGFhYWEsCi0JMHgwMTY4LCAweDIwMDEsIDB4MTg4YiwgMHgyMDA0LCAweGQwOGMsIDB4MTExOCwgMHhkMDg0LCAweDExMTgsCi0JMHgwMDI4LCAweDA4MGMsIDB4OWEwZiwgMHgwMDBlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDBlLCAweDAwMDIsCi0JMHg5OTJhLCAweDk5ZTMsIDB4OTllMywgMHg5OWUzLCAweDk5ZTMsIDB4OTllNSwgMHg5OWUzLCAweDk5MjgsCi0JMHgwODBjLCAweDBkYzUsIDB4NjgyMCwgMHg5MDA1LCAweDExMTAsIDB4MDBkZSwgMHgwMDA1LCAweDAwYzYsCi0JMHg2ODBjLCAweDkwNjUsIDB4MDFmMCwgMHg2MTA0LCAweDkxOGUsIDB4MDA0MCwgMHgxMTgwLCAweDIwMDksCi0JMHgxODM3LCAweDIxMGMsIDB4OTE4YywgMHgwMDI4LCAweDExNTAsIDB4MDgwYywgMHg3NTY5LCAweDAxMzgsCi0JMHgwMDA2LCAweDIwMDksIDB4MTg4YiwgMHgyMTA0LCAweGMwOTUsIDB4MjAwYSwgMHgwMDBlLCAweDY4MDcsCi0JMHgwMDA0LCAweDY4MjYsIDB4NjgyYiwgMHgwMDAwLCAweDA4MGMsIDB4OWFiOCwgMHgwMGNlLCAweDAwZGUsCi0JMHgwMDA1LCAweDY4MTQsIDB4OTA2NSwgMHgwMTUwLCAweDY4MDcsIDB4MDAwMSwgMHg2ODI2LCAweDY4MmIsCi0JMHgwMDAwLCAweDA4MGMsIDB4OWFiOCwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZTYsCi0JMHg2YTFjLCAweDkyZGQsIDB4MDAwMCwgMHgwOTA0LCAweDk5Y2QsIDB4Yjg0YywgMHg5MDBkLCAweDAxMTgsCi0JMHhiODg4LCAweDkwMDUsIDB4MDFhMCwgMHhiODU0LCAweDkwNWQsIDB4MDEyMCwgMHg5MjBlLCAweDA5MDQsCi0JMHg5OWNkLCAweDAwMjgsIDB4NjgxOCwgMHg5MjBlLCAweDA5MDQsIDB4OTljZCwgMHgyMDU4LCAweGI4NGMsCi0JMHg5MDBkLCAweDBkODgsIDB4Yjg4OCwgMHg5MDA1LCAweDFkNzAsIDB4MmIwMCwgMHg2ODFlLCAweGJiM2MsCi0JMHhiODM4LCAweDkzMDIsIDB4MWU0MCwgMHgwODBjLCAweGIwZDgsIDB4MDkwNCwgMHg5OWNkLCAweDgzMTgsCi0JMHhiYjNlLCAweDYxMTYsIDB4MmIxMCwgMHg2MjEyLCAweDAwOTYsIDB4MjE0OCwgMHhhODgwLCAweDkwODQsCi0JMHgwMGZmLCAweDYwNWUsIDB4YTg4MywgMHgwMDAwLCAweGE4ODQsIDB4MDA5ZSwgMHg5MDhhLCAweDE5OWEsCi0JMHgwMjEwLCAweDIwMDEsIDB4MTk5OSwgMHg4MDAzLCAweDgwMWIsIDB4ODMxYiwgMHg5MzE4LCAweDYzMWEsCi0JMHg2MTE0LCAweDAwOTYsIDB4MjE0OCwgMHhhOTY0LCAweDAwOWUsIDB4OTE4YywgMHgwMGZmLCAweDkxOGUsCi0JMHgwMDQ4LCAweDA1MzgsIDB4MDBmNiwgMHgyYzc4LCAweDIwNjEsIDB4MDEwMCwgMHhiYWMwLCAweDYyOWEsCi0JMHgyMDY5LCAweDAyMDAsIDB4MjA3MSwgMHgwMjQwLCAweDA4MGMsIDB4YTA0NywgMHgyMDY5LCAweDE5ZTksCi0JMHhiYjAwLCAweGMzZGQsIDB4YmIwMiwgMHg2ODA3LCAweDAwMDIsIDB4MmYxOCwgMHg2YjI2LCAweDY4MmIsCi0JMHgwMDAwLCAweDc4MjMsIDB4MDAwMywgMHg3ODAzLCAweDAwMDEsIDB4NzgwNywgMHgwMDQwLCAweDAwZmUsCi0JMHgwMGVlLCAweDAwYmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBlZSwgMHgwMGJlLCAweDAwY2UsCi0JMHgwY2QwLCAweDY4MDcsIDB4MDAwNiwgMHgyYzE4LCAweDZiMjYsIDB4NjgyMCwgMHg4MDAxLCAweDY4MjIsCi0JMHg2ODJiLCAweDAwMDAsIDB4MDgwYywgMHg2NjQ1LCAweDA4MGMsIDB4YWYxOCwgMHgwMGVlLCAweDAwYmUsCi0JMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGRlLCAweDAwMDUsIDB4MDBjNiwgMHg2ODBjLCAweDkwNjUsCi0JMHgwMWQ4LCAweDYxMDQsIDB4OTE4ZSwgMHgwMDQwLCAweDExODAsIDB4MjAwOSwgMHgxODM3LCAweDIxMGMsCi0JMHg5MThjLCAweDAwMjgsIDB4MTE1MCwgMHgwODBjLCAweDc1NjksIDB4MDEzOCwgMHgwMDA2LCAweDIwMDksCi0JMHgxODhiLCAweDIxMDQsIDB4YzA5NSwgMHgyMDBhLCAweDAwMGUsIDB4NjgwNywgMHgwMDA0LCAweDY4MjYsCi0JMHg2ODJiLCAweDAwMDAsIDB4MDgwYywgMHg5YWI4LCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMTQsIDB4YzJlZCwgMHgyMjAyLCAweDAwZGUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsCi0JMHgwMGQ2LCAweDIwNjksIDB4MTllOSwgMHg2ODMwLCAweDkwODYsIDB4MDAwMCwgMHgxNTcwLCAweDIwMDEsCi0JMHgxODBjLCAweDIwMTQsIDB4ZDJlNCwgMHgwMTMwLCAweGMyZTQsIDB4MjIwMiwgMHgwODBjLCAweDk4ZmMsCi0JMHgyMDY5LCAweDE5ZTksIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsIDB4ZDFjNCwgMHgxNTA4LCAweDY4MzgsCi0JMHg5MDdkLCAweDAxZDgsIDB4NmEwNCwgMHg5Mjk2LCAweDAwMDAsIDB4MTkwNCwgMHg5YWFjLCAweDc5MjAsCi0JMHg5MThlLCAweDAwMDksIDB4MDU2OCwgMHg2ODMzLCAweDAwMDEsIDB4NjgzZSwgMHg2ODQ3LCAweDAwMDAsCi0JMHg2ODRiLCAweDAwMDAsIDB4MDEyNiwgMHgwMGY2LCAweDIwOTEsIDB4MjQwMCwgMHgwMDJlLCAweDA4MGMsCi0JMHgxY2EyLCAweDExNTgsIDB4MDEyZSwgMHgwODBjLCAweGEzNzQsIDB4MDBkZSwgMHgwMGZlLCAweDAwMDUsCi0JMHhjMWM0LCAweDIxMDIsIDB4MDgwYywgMHg3NjE2LCAweDA4ZDAsIDB4MDEyZSwgMHg2ODQzLCAweDAwMDAsCi0JMHg3ODAzLCAweDAwMDIsIDB4NzgwYywgMHg5MDE1LCAweDAxNDAsIDB4NmEzYSwgMHg3ODBmLCAweDAwMDAsCi0JMHg2ODMzLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLCAweDBjNDAsIDB4NjgzYSwgMHg2ODM2LCAweDBjYzAsCi0JMHg3OTA4LCAweGQxZmMsIDB4MTE5OCwgMHg2ODMzLCAweDAwMDEsIDB4NjgzZSwgMHg2ODQ3LCAweDAwMDAsCi0JMHg2ODRiLCAweDAwMDAsIDB4MDEyNiwgMHgwMGY2LCAweDIwOTEsIDB4MjQwMCwgMHgwMDJlLCAweDA4MGMsCi0JMHgxY2EyLCAweDE5ZDgsIDB4MDEyZSwgMHgwODBjLCAweGEyZjUsIDB4MDg3OCwgMHgyMDAxLCAweDE4MzcsCi0JMHgyMDA0LCAweDkwODQsIDB4MDAyOCwgMHgxMTg4LCAweDIwMDEsIDB4MTk3ZCwgMHgyMDA0LCAweDkwODYsCi0JMHhhYWFhLCAweDAxNTgsIDB4MjAwMSwgMHgxOWVhLCAweDIwMDQsIDB4OTAwNSwgMHgxMWYwLCAweDIwMDEsCi0JMHgxODhiLCAweDIwMGMsIDB4YzE4NSwgMHhjMThjLCAweDIxMDIsIDB4MmYwMCwgMHg2ODMzLCAweDAwMDEsCi0JMHg2ODNlLCAweDY4NDcsIDB4MDAwMCwgMHg2ODRiLCAweDAwMDAsIDB4MDEyNiwgMHgwMGY2LCAweDIwOTEsCi0JMHgyNDAwLCAweDAwMmUsIDB4MDgwYywgMHgxY2EyLCAweDE5MDQsIDB4OWE0ZCwgMHgwMTJlLCAweDZhM2MsCi0JMHgyMjc4LCAweDA4MGMsIDB4YTI3ZiwgMHgwODA0LCAweDlhNDUsIDB4MjAxMSwgMHgxODhiLCAweDIyMDQsCi0JMHhjMDhkLCAweDIwMTIsIDB4MDgwNCwgMHg5YTQ1LCAweDZhMDQsIDB4OTI5NiwgMHgwMDA2LCAweDE5MDQsCi0JMHg5YTA3LCAweDZhMzAsIDB4OTI5NiwgMHgwMDAwLCAweDA5MDQsIDB4OWEyZiwgMHgwODA0LCAweDlhMDcsCi0JMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDBiLCAweDAwMDUsIDB4OWFjYywgMHg5YWQxLCAweDlmNzcsCi0JMHhhMDEwLCAweDlhZDEsIDB4OWY3NywgMHhhMDEwLCAweDlhY2MsIDB4OWFkMSwgMHg5YWNjLCAweDlhY2MsCi0JMHg5YWNjLCAweDlhY2MsIDB4OWFjYywgMHg5YWNjLCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweDk4ZWQsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MDFjNiwgMHgwMWQ2LCAweDAwYzYsCi0JMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDY5LCAweDAyMDAsIDB4MjA3MSwgMHgwMjQwLCAweDYwMDQsCi0JMHg5MDhhLCAweDAwNTMsIDB4MWEwYywgMHgwZGM1LCAweDYxMTAsIDB4MjE1OCwgMHhiOWMwLCAweDJjNzgsCi0JMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHg5MDhhLCAweDAwNDAsIDB4MWEwNCwgMHg5YjNkLCAweDAwNWIsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAxZGUsIDB4MDFjZSwgMHgwMTRlLCAweDAxM2UsCi0JMHgwMTVlLCAweDAwYmUsIDB4MDAwNSwgMHg5Y2U2LCAweDlkMjEsIDB4OWQ0YSwgMHg5ZTA2LCAweDllMjgsCi0JMHg5ZTJlLCAweDllM2IsIDB4OWU0MywgMHg5ZTRmLCAweDllNTUsIDB4OWU2NiwgMHg5ZTU1LCAweDllYmUsCi0JMHg5ZTQzLCAweDllY2EsIDB4OWVkMCwgMHg5ZTRmLCAweDllZDAsIDB4OWVkYywgMHg5YjNiLCAweDliM2IsCi0JMHg5YjNiLCAweDliM2IsIDB4OWIzYiwgMHg5YjNiLCAweDliM2IsIDB4OWIzYiwgMHg5YjNiLCAweDliM2IsCi0JMHg5YjNiLCAweGE3MmUsIDB4YTc1MSwgMHhhNzYyLCAweGE3ODIsIDB4YTdiNCwgMHg5ZTNiLCAweDliM2IsCi0JMHg5ZTNiLCAweDllNTUsIDB4OWIzYiwgMHg5ZDRhLCAweDllMDYsIDB4OWIzYiwgMHhhYjQwLCAweDllNTUsCi0JMHg5YjNiLCAweGFiNWMsIDB4OWU1NSwgMHg5YjNiLCAweDllNGYsIDB4OWNlMCwgMHg5YjVlLCAweDliM2IsCi0JMHhhYjc4LCAweGFiZTUsIDB4YWNjMCwgMHg5YjNiLCAweGFjY2QsIDB4OWUzOCwgMHhhY2Y4LCAweDliM2IsCi0JMHhhN2JlLCAweGFkMjUsIDB4OWIzYiwgMHgwODBjLCAweDBkYzUsIDB4MjEwMCwgMHgwMDViLCAweDAwZmUsCi0JMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMWRlLCAweDAxY2UsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsCi0JMHgwMGJlLCAweDAwMDUsIDB4YWRjMCwgMHhhZTcyLCAweDliNWMsIDB4OWI5NiwgMHg5YzQyLCAweDljNGQsCi0JMHg5YjVjLCAweDllM2IsIDB4OWI1YywgMHg5Y2E3LCAweDljYjMsIDB4OWJiMSwgMHg5YjVjLCAweDliY2MsCi0JMHg5YzAwLCAweGFmZGYsIDB4YjAyNCwgMHg5ZTU1LCAweDA4MGMsIDB4MGRjNSwgMHgwMGQ2LCAweDAwOTYsCi0JMHgwODBjLCAweDllZWYsIDB4MDAyNiwgMHgwMDM2LCAweDc4MTQsIDB4MjA0OCwgMHhhOTU4LCAweGQxY2MsCi0JMHgxMTM4LCAweDIwMDksIDB4MjQxNCwgMHgyMDExLCAweDAwMTgsIDB4MjAxOSwgMHgwMDE4LCAweDAwMzAsCi0JMHgyMDA5LCAweDI0MTAsIDB4MjAxMSwgMHgwMDE0LCAweDIwMTksIDB4MDAxNCwgMHg3MTAyLCAweDcyMDYsCi0JMHg3MDBiLCAweDA4MDAsIDB4YTgzYywgMHg3MDBlLCAweGE4NTAsIDB4NzAyMiwgMHhhODU0LCAweDcwMjYsCi0JMHg2M2MyLCAweDA4MGMsIDB4YTRlYiwgMHgwMDNlLCAweDAwMmUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsCi0JMHg3ODEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGEwLCAweDAwYmUsIDB4MDgwYywgMHhiMDZiLCAweDExMTgsCi0JMHg5MDg0LCAweGZmODAsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsCi0JMHgwODBjLCAweDllZWYsIDB4NzAwMywgMHgwNTAwLCAweDc4MTQsIDB4MjA0OCwgMHhhODc0LCAweDcwMGEsCi0JMHhhODc4LCAweDcwMGUsIDB4YTg3YywgMHg3MDEyLCAweGE4ODAsIDB4NzAxNiwgMHhhODg0LCAweDcwMWEsCi0JMHhhODg4LCAweDcwMWUsIDB4NjBjMywgMHgwMDEwLCAweDA4MGMsIDB4YTRlYiwgMHgwMDllLCAweDAwZGUsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwODBjLCAweDllZWYsIDB4NzAwMywgMHgwNTAwLCAweDc4MTQsCi0JMHgyMDQ4LCAweGE4Y2MsIDB4NzAwYSwgMHhhOGQwLCAweDcwMGUsIDB4YThkNCwgMHg3MDEyLCAweGE4ZDgsCi0JMHg3MDE2LCAweGE4ZGMsIDB4NzAxYSwgMHhhOGUwLCAweDcwMWUsIDB4NjBjMywgMHgwMDEwLCAweDA4MGMsCi0JMHhhNGViLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4OWVlZiwgMHgyMGU5LCAweDAwMDAsIDB4MjAwMSwgMHgxOWE1LCAweDIwMDMsCi0JMHgwMDAwLCAweDc4MTQsIDB4MjA0OCwgMHhhODE0LCAweDgwMDMsIDB4NjBjMiwgMHhhODMwLCAweDIwYTgsCi0JMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsIDB4MjA5OCwgMHgyMDAxLCAweDE5YTUsCi0JMHgwMDE2LCAweDIwMGMsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjQxNywgMHgwODBjLCAweGRiZmEsCi0JMHg5MDA2LCAweDA4MGMsIDB4MjQxNywgMHgwMDFlLCAweGE4MDQsIDB4OTAwNSwgMHgwMTEwLCAweDIwNDgsCi0JMHgwYzI4LCAweDA0ZDksIDB4MDgwYywgMHhhNGViLCAweDAxMmUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsCi0JMHgwMGQ2LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5ZjNhLCAweDIwZTksCi0JMHgwMDAwLCAweDIwMDEsIDB4MTlhNSwgMHgyMDAzLCAweDAwMDAsIDB4NzgxNCwgMHgyMDQ4LCAweGE4NmYsCi0JMHgwMjAwLCAweGE4NzMsIDB4MDAwMCwgMHhhODE0LCAweDgwMDMsIDB4NjBjMiwgMHhhODMwLCAweDIwYTgsCi0JMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsIDB4MjA5OCwgMHgyMDAxLCAweDE5YTUsCi0JMHgwMDE2LCAweDIwMGMsIDB4MDgwYywgMHhkYmZhLCAweDAwMWUsIDB4YTgwNCwgMHg5MDA1LCAweDAxMTAsCi0JMHgyMDQ4LCAweDBjNjAsIDB4MDA1MSwgMHg3ODE0LCAweDIwNDgsIDB4MDgwYywgMHgwZmMwLCAweDA4MGMsCi0JMHhhNGViLCAweDAxMmUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsIDB4NjBjMCwgMHg4MDA0LCAweDkwODQsCi0JMHgwMDAzLCAweDkwMDUsIDB4MDEzMCwgMHg5MDgyLCAweDAwMDQsIDB4MjBhMywgMHgwMDAwLCAweDgwMDAsCi0JMHgxZGUwLCAweDAwMDUsIDB4MDgwYywgMHg5ZWVmLCAweDcwMDMsIDB4NzgwMCwgMHg3ODA4LCAweDgwMDcsCi0JMHg3MDBhLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweGE0ZWIsIDB4MDBkNiwgMHgwMGU2LCAweDA4MGMsCi0JMHg5ZjNhLCAweDc4MTQsIDB4OTA4NCwgMHhmZjAwLCAweDIwNzMsIDB4MDIwMCwgMHg4ZTcwLCAweDhlNzAsCi0JMHg5MDk2LCAweGRmMDAsIDB4MDEzOCwgMHg5MDk2LCAweGUwMDAsIDB4MDEyMCwgMHgyMDczLCAweDAwMTAsCi0JMHg4ZTcwLCAweDAwMzAsIDB4OTA5NSwgMHgwMDEwLCAweDIyNzIsIDB4OGU3MCwgMHgyMDczLCAweDAwMzQsCi0JMHg4ZTcwLCAweDIwNjksIDB4MTgwNSwgMHgyMGE5LCAweDAwMDQsIDB4MmQ3NiwgMHg4ZDY4LCAweDhlNzAsCi0JMHgxZjA0LCAweDljNmQsIDB4MjA2OSwgMHgxODAxLCAweDIwYTksIDB4MDAwNCwgMHgyZDc2LCAweDhkNjgsCi0JMHg4ZTcwLCAweDFmMDQsIDB4OWM3NiwgMHg5MDk2LCAweGRmMDAsIDB4MDEzMCwgMHg5MDk2LCAweGUwMDAsCi0JMHgwMTE4LCAweDYwYzMsIDB4MDAxOCwgMHgwMGYwLCAweDIwNjksIDB4MTliNSwgMHg5MDg2LCAweGRmMDAsCi0JMHgwMTEwLCAweDIwNjksIDB4MTljZiwgMHgyMGE5LCAweDAwMWEsIDB4OWU4NiwgMHgwMjYwLCAweDExNDgsCi0JMHgwMGM2LCAweDIwNjEsIDB4MDIwMCwgMHg2MDEwLCAweDgwMDAsIDB4NjAxMiwgMHgwMGNlLCAweDIwNzEsCi0JMHgwMjQwLCAweDJkMDQsIDB4ODAwNywgMHgyMDcyLCAweDhkNjgsIDB4OGU3MCwgMHgxZjA0LCAweDljOGQsCi0JMHg2MGMzLCAweDAwNGMsIDB4MDgwYywgMHhhNGViLCAweDAwZWUsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsCi0JMHg5ZWVmLCAweDcwMDMsIDB4NjMwMCwgMHg3MDA3LCAweDAwMjgsIDB4NzgwOCwgMHg3MDBlLCAweDYwYzMsCi0JMHgwMDA4LCAweDA4MDQsIDB4YTRlYiwgMHgwMGQ2LCAweDAwMjYsIDB4MDAxNiwgMHgwODBjLCAweDlmM2EsCi0JMHg3MDAzLCAweDAyMDAsIDB4NzgxNCwgMHg3MDBlLCAweDAwZTYsIDB4OWVmMCwgMHgwMDA0LCAweDIwMDksCi0JMHgwMDAxLCAweDIwMTEsIDB4MDAwYywgMHgyMDY5LCAweDE5MjUsIDB4NjgxMCwgMHhkMDg0LCAweDExNDgsCi0JMHgyMDczLCAweDA1MDAsIDB4OGU3MCwgMHgyMDczLCAweDAwMDAsIDB4OGU3MCwgMHg4MTA4LCAweDkyOTAsCi0JMHgwMDA0LCAweDIwNzMsIDB4MDgwMCwgMHg4ZTcwLCAweDIwNzMsIDB4MDAwMCwgMHgwMGVlLCAweDcyMDYsCi0JMHg3MTBhLCAweDYyYzIsIDB4MDgwYywgMHhhNGViLCAweDAwMWUsIDB4MDAyZSwgMHgwMGRlLCAweDAwMDUsCi0JMHgyMDAxLCAweDE4MTgsIDB4MjAwNCwgMHg2MDlhLCAweDA4MDQsIDB4YTRlYiwgMHgwODBjLCAweDllZWYsCi0JMHg3MDAzLCAweDUyMDAsIDB4MjA2OSwgMHgxODQ3LCAweDY4MDQsIDB4ZDA4NCwgMHgwMTMwLCAweDY4MjgsCi0JMHgwMDE2LCAweDA4MGMsIDB4MjhjNywgMHg3MTBlLCAweDAwMWUsIDB4MjBhOSwgMHgwMDA0LCAweDIwZTEsCi0JMHgwMDAxLCAweDIwOTksIDB4MTgwNSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjUwLCAweDQwMDMsCi0JMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHgxODAxLCAweDIwYTEsIDB4MDI1NCwgMHg0MDAzLCAweDA4MGMsCi0JMHhiMDZiLCAweDExMjAsIDB4YjhhMCwgMHg5MDgyLCAweDAwN2YsIDB4MDI0OCwgMHgyMDAxLCAweDE4MWYsCi0JMHgyMDA0LCAweDcwMzIsIDB4MjAwMSwgMHgxODIwLCAweDIwMDQsIDB4NzAzNiwgMHgwMDMwLCAweDIwMDEsCi0JMHgxODE4LCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweDcwMzYsIDB4NjBjMywgMHgwMDFjLCAweDA4MDQsCi0JMHhhNGViLCAweDA4MGMsIDB4OWVlZiwgMHg3MDAzLCAweDA1MDAsIDB4MDgwYywgMHhiMDZiLCAweDExMjAsCi0JMHhiOGEwLCAweDkwODIsIDB4MDA3ZiwgMHgwMjQ4LCAweDIwMDEsIDB4MTgxZiwgMHgyMDA0LCAweDcwMGEsCi0JMHgyMDAxLCAweDE4MjAsIDB4MjAwNCwgMHg3MDBlLCAweDAwMzAsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4NzAwZSwgMHgyMGE5LCAweDAwMDQsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksCi0JMHgxODA1LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNTAsIDB4NDAwMywgMHg2MGMzLCAweDAwMTAsCi0JMHgwODA0LCAweGE0ZWIsIDB4MDgwYywgMHg5ZWVmLCAweDkwMDYsIDB4MDgwYywgMHg2YTVjLCAweGI4YTAsCi0JMHg5MDg2LCAweDAwN2UsIDB4MTE3MCwgMHgyMDExLCAweDAyNDAsIDB4MjAxMywgMHgyMmZmLCAweDIwMTEsCi0JMHgwMjQxLCAweDIwMTMsIDB4ZmZmZSwgMHg3MDAzLCAweDA0MDAsIDB4NjIwYywgMHhjMmI0LCAweDYyMGUsCi0JMHgwMDU4LCAweDc4MTQsIDB4MDA5NiwgMHg5MDRkLCAweDAxMjAsIDB4OTAwNiwgMHhhODlhLCAweGE4YTYsCi0JMHhhOGFhLCAweDAwOWUsIDB4NzAwMywgMHgwMzAwLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDE5MDQsCi0JMHg5ZGNkLCAweDAwZDYsIDB4MjA2OSwgMHgxOTZkLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwYTQsCi0JMHgwMTg4LCAweDY4MDAsIDB4NzAwYSwgMHg2ODA4LCAweDkwODQsIDB4MjAwMCwgMHg3MDEyLCAweDA4MGMsCi0JMHhiMDgyLCAweDY4MGMsIDB4NzAxNiwgMHg3MDFmLCAweDI3MTAsIDB4NjgxOCwgMHg3MDIyLCAweDY4MWMsCi0JMHg3MDI2LCAweDAwZjAsIDB4NjgwMCwgMHg3MDBhLCAweDY4MDQsIDB4NzAwZSwgMHgwMGY2LCAweDIwNzksCi0JMHgwMTAwLCAweDA4MGMsIDB4NzU2OSwgMHgxMTI4LCAweDc4ZTMsIDB4MDAwMCwgMHgwODBjLCAweDI5MDgsCi0JMHg3OGUyLCAweDAwZmUsIDB4NjgwOCwgMHgwODBjLCAweDc1NjksIDB4MTExOCwgMHg5MDg0LCAweDM3ZmYsCi0JMHgwMDEwLCAweDkwODQsIDB4M2ZmZiwgMHg3MDEyLCAweDA4MGMsIDB4YjA4MiwgMHg2ODBjLCAweDcwMTYsCi0JMHgwMGRlLCAweDIwYTksIDB4MDAwNCwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxODA1LCAweDIwZTksCi0JMHgwMDAwLCAweDIwYTEsIDB4MDI1NiwgMHg0MDAzLCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweDE4MDEsCi0JMHgyMGExLCAweDAyNWEsIDB4NDAwMywgMHgwMGQ2LCAweDA4MGMsIDB4YWRhNywgMHgyMDY5LCAweDE5NzUsCi0JMHgyMDcxLCAweDAyNGUsIDB4NjgwMCwgMHhjMGRkLCAweDcwMDIsIDB4MDgwYywgMHg1N2Q3LCAweGQwZTQsCi0JMHgwMTEwLCAweDY4MGMsIDB4NzAwZSwgMHgwMGRlLCAweDA0YTgsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsCi0JMHhkMGE0LCAweDAxNzAsIDB4MDAxNiwgMHgyMDAxLCAweDE5NmUsIDB4MjAwYywgMHg2MGUwLCAweDkxMDYsCi0JMHgwMTMwLCAweDIxMDAsIDB4NjBlMywgMHgwMDAwLCAweDA4MGMsIDB4MjkwOCwgMHg2MWUyLCAweDAwMWUsCi0JMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxOTZkLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsCi0JMHgyMGE5LCAweDAwMDgsIDB4NDAwMywgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHgxODA1LCAweDIwYTEsCi0JMHgwMjU2LCAweDQwMDMsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4MTgwMSwgMHgyMGExLCAweDAyNWEsCi0JMHg0MDAzLCAweDA4MGMsIDB4YWRhNywgMHgyMGExLCAweDAyNGUsIDB4MjBhOSwgMHgwMDA4LCAweDIwOTksCi0JMHgxOTc1LCAweDQwMDMsIDB4NjBjMywgMHgwMDc0LCAweDA4MDQsIDB4YTRlYiwgMHgwODBjLCAweDllZWYsCi0JMHg3MDAzLCAweDIwMTAsIDB4NzAwNywgMHgwMDE0LCAweDcwMGIsIDB4MDgwMCwgMHg3MDBmLCAweDIwMDAsCi0JMHg5MDA2LCAweDAwZjYsIDB4MjA3OSwgMHgxODQ3LCAweDc5MDQsIDB4MDBmZSwgMHhkMWFjLCAweDExMTAsCi0JMHg5MDg1LCAweDAwMjAsIDB4ZDFhNCwgMHgwMTEwLCAweDkwODUsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDIsCi0JMHgwMGQ2LCAweDA4MDQsIDB4OWU5ZiwgMHg3MDI2LCAweDYwYzMsIDB4MDAxNCwgMHgwODA0LCAweGE0ZWIsCi0JMHgwODBjLCAweDllZWYsIDB4NzAwMywgMHg1MDAwLCAweDA4MDQsIDB4OWQ2YywgMHgwODBjLCAweDllZWYsCi0JMHg3MDAzLCAweDIxMTAsIDB4NzAwNywgMHgwMDE0LCAweDYwYzMsIDB4MDAxNCwgMHgwODA0LCAweGE0ZWIsCi0JMHgwODBjLCAweDlmMzEsIDB4MDAxMCwgMHgwODBjLCAweDlmM2EsIDB4NzAwMywgMHgwMjAwLCAweDYwYzMsCi0JMHgwMDA0LCAweDA4MDQsIDB4YTRlYiwgMHgwODBjLCAweDlmM2EsIDB4NzAwMywgMHgwMTAwLCAweDcwMGIsCi0JMHgwMDAzLCAweDcwMGYsIDB4MmEwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhNGViLCAweDA4MGMsCi0JMHg5ZjNhLCAweDcwMDMsIDB4MDIwMCwgMHgwODA0LCAweDlkNmMsIDB4MDgwYywgMHg5ZjNhLCAweDcwMDMsCi0JMHgwMTAwLCAweDc4MmMsIDB4OTAwNSwgMHgwMTEwLCAweDcwMGEsIDB4MDAxMCwgMHg3MDBiLCAweDAwMDMsCi0JMHg3ODE0LCAweDcwMGUsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTRlYiwgMHgwMGQ2LCAweDA4MGMsCi0JMHg5ZjNhLCAweDcwMDMsIDB4MDIxMCwgMHg3MDA3LCAweDAwMTQsIDB4NzAwYiwgMHgwODAwLCAweGI4OTQsCi0JMHg5MDg2LCAweDAwMTQsIDB4MTE5OCwgMHhiOTljLCAweDkxODQsIDB4MDAzMCwgMHgwMTkwLCAweGI5OTgsCi0JMHg5MTg0LCAweGMwMDAsIDB4MTE0MCwgMHhkMWVjLCAweDAxMTgsIDB4NzAwZiwgMHgyMTAwLCAweDAwNTgsCi0JMHg3MDBmLCAweDAxMDAsIDB4MDA0MCwgMHg3MDBmLCAweDA0MDAsIDB4MDAyOCwgMHg3MDBmLCAweDA3MDAsCi0JMHgwMDEwLCAweDcwMGYsIDB4MDgwMCwgMHgwMGY2LCAweDIwNzksIDB4MTg0NywgMHg3OTA0LCAweDAwZmUsCisJMHgwODA0LCAweDk3YzIsIDB4ODlmZiwgMHgwMTU4LCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLCAweGE4NzcsCisJMHgwMDAwLCAweDA4MGMsIDB4ZDNjZSwgMHgwODBjLCAweGVmODUsIDB4MDgwYywgMHg2ZTlmLCAweDA4MGMsCisJMHhhYWYxLCAweDA4MDQsIDB4OTdjMiwgMHgwMDZlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAxMmUsCisJMHgwMDBlLCAweDAwY2UsIDB4MDA5ZSwgMHgwMGFlLCAweDAwYmUsIDB4MDAwNSwgMHgwMDk2LCAweDAwMDYsCisJMHgwMDY2LCAweDAwYzYsIDB4MDBkNiwgMHg5MDM2LCAweDc4MTQsIDB4OTA2NSwgMHgwOTA0LCAweDk4ODksCisJMHg2MDBjLCAweDAwMDYsIDB4NjAwZiwgMHgwMDAwLCAweDc4MjQsIDB4OWMwNiwgMHgxNTgwLCAweDIwNjksCisJMHgwMTAwLCAweDY4MjAsIDB4ZDBhNCwgMHgwMTEwLCAweGQwY2MsIDB4MTUwOCwgMHgwODBjLCAweDg4YzMsCisJMHgwODBjLCAweGE2ZTksIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YWMxYiwgMHg3ODI3LCAweDAwMDAsCisJMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsCisJMHgwMTAwLCAweDA4MGMsIDB4MmQzOSwgMHg5MDA2LCAweDA4MGMsIDB4MmQzOSwgMHgyMDY5LCAweDAxMDAsCisJMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHgwMDQwLCAweDA4MGMsCisJMHg2YTNiLCAweDE1MjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MmMzMCwgMHgwMGY4LCAweDYwMTQsCisJMHgyMDQ4LCAweDA4MGMsIDB4ZDBkNiwgMHgwMWIwLCAweDYwMjAsIDB4OTA4NiwgMHgwMDAzLCAweDE1MDgsCisJMHgwODBjLCAweGQyZTAsIDB4MTExOCwgMHgwODBjLCAweGJjYjYsIDB4MDA2MCwgMHgwODBjLCAweDZhM2IsCisJMHgxMTY4LCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweDZlOWYsCisJMHgwODBjLCAweGQyYzMsIDB4MDgwYywgMHhiMzA2LCAweDA4MGMsIDB4YWFmMSwgMHgwMDBlLCAweDA4MDQsCisJMHg5ODJkLCAweDdlMTYsIDB4N2UxMiwgMHgwMGRlLCAweDAwY2UsIDB4MDA2ZSwgMHgwMDBlLCAweDAwOWUsCisJMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LCAweDExMTgsIDB4MDgwYywgMHhlYmQ0LCAweDBjNTAsCisJMHgwODBjLCAweGJjYjYsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDIsIDB4MTE1MCwgMHg2MDA0LCAweDAwMDYsCisJMHg5MDg2LCAweDAwODUsIDB4MDAwZSwgMHgwOTkwLCAweDkwODYsIDB4MDA4YiwgMHgwOTc4LCAweDA4ZDAsCisJMHg2MDIwLCAweDkwODYsIDB4MDAwNSwgMHgxOWIwLCAweDYwMDQsIDB4MDAwNiwgMHg5MDg2LCAweDAwODUsCisJMHgwMDBlLCAweDBkMTgsIDB4OTA4NiwgMHgwMDhiLCAweDBkMDAsIDB4MDg2MCwgMHgwMDA2LCAweDAwNjYsCisJMHgwMDk2LCAweDAwYjYsIDB4MDBjNiwgMHgwMGQ2LCAweDc4MTgsIDB4OTA1ZCwgMHgwOTA0LCAweDk5MzYsCisJMHhiODU0LCAweDAwMDYsIDB4OTAwNiwgMHhiODU2LCAweGI4NWEsIDB4YjgwMCwgMHhjMGQ0LCAweGMwZGMsCisJMHhiODAyLCAweDA4MGMsIDB4NjY0YywgMHgwOTA0LCAweDk5MzMsIDB4N2UyNCwgMHg4NmZmLCAweDA5MDQsCisJMHg5OTI2LCAweDk2ODAsIDB4MDAwNSwgMHgyMDA0LCAweDk5MDYsIDB4MTkwNCwgMHg5OTI2LCAweDAwZDYsCisJMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHg5MDA1LCAweDA5MDQsIDB4OTkxZCwgMHgwODBjLCAweDg4YzMsCisJMHgwODBjLCAweGE2ZTksIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YWMxYiwgMHg3ODI3LCAweDAwMDAsCisJMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsCisJMHgwMTAwLCAweDA4MGMsIDB4MmQzOSwgMHg5MDA2LCAweDA4MGMsIDB4MmQzOSwgMHgyMDY5LCAweDAxMDAsCisJMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHgwMGRlLCAweDAwYzYsCisJMHgzZTA4LCAweDkxOGUsIDB4MDAwMiwgMHgxMTY4LCAweGI4MDAsIDB4ZDBiYywgMHgwMTUwLCAweDk2ODAsCisJMHgwMDEwLCAweDIwMGMsIDB4ODFmZiwgMHgxNTE4LCAweDIwMDksIDB4MTk4OCwgMHgyMTBjLCAweDIxMDIsCisJMHgwMGYwLCAweGI4M2MsIDB4OTAwNSwgMHgwMTEwLCAweDgwMDEsIDB4YjgzZSwgMHgyNjYwLCAweDYwMGYsCisJMHgwMDAwLCAweDA4MGMsIDB4YjMwNiwgMHgwMGNlLCAweDAwNDgsIDB4MDBkZSwgMHgwMGM2LCAweDI2NjAsCisJMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgwMGNlLCAweDA4MDQsIDB4OThjOSwgMHg4OWZmLCAweDAxMzgsCisJMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZTlmLCAweDA4MGMsCisJMHhhYWYxLCAweDA4MDQsIDB4OThjOSwgMHgwMDBlLCAweDA4MDQsIDB4OThiZCwgMHg3ODFlLCAweDc4MWEsCisJMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDllLCAweDAwNmUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZTYsCisJMHgwMGQ2LCAweDAwOTYsIDB4MDA2NiwgMHhiODAwLCAweGQwZGMsIDB4MDFhMCwgMHhiODRjLCAweDkwNGQsCisJMHgwMTg4LCAweGE4NzgsIDB4OTYwNiwgMHgxMTcwLCAweDIwNzEsIDB4MTllOCwgMHg3MDI0LCAweDkwMzUsCisJMHgwMTQ4LCAweDkwODAsIDB4MDAwNSwgMHgyMDA0LCAweDk5MDYsIDB4MTEyMCwgMHhiODAwLCAweGMwZGMsCisJMHhiODAyLCAweDAwMjksIDB4MDA2ZSwgMHgwMDllLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwZjYsCisJMHgyMDc5LCAweDAxMDAsIDB4NzhjMCwgMHg5MDA1LCAweDExMzgsIDB4MDBjNiwgMHgyNjYwLCAweDYwMDMsCisJMHgwMDA5LCAweDYzMGEsIDB4MDBjZSwgMHgwNGI4LCAweDA4MGMsIDB4YTZlOSwgMHg3OGMzLCAweDAwMDAsCisJMHgwODBjLCAweGFjMWIsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA3OSwgMHgwMTQwLCAweDdiMDQsCisJMHg5Mzg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyZDM5LCAweDkwMDYsCisJMHgwODBjLCAweDJkMzksIDB4MjA3OSwgMHgwMTAwLCAweDc4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDc4MjcsCisJMHgwMDAxLCAweDA4MGMsIDB4YWMxYiwgMHgwMDNlLCAweDA4MGMsIDB4NjY0YywgMHgwMGM2LCAweGI4M2MsCisJMHg5MDA1LCAweDAxMTAsIDB4ODAwMSwgMHhiODNlLCAweDI2NjAsIDB4MDgwYywgMHhiMmQzLCAweDAwY2UsCisJMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHhkM2NlLCAweDA4MGMsCisJMHg2ZTlmLCAweDA4MGMsIDB4YWFmMSwgMHgwMGZlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGU2LCAweDAwYzYsCisJMHgyMDExLCAweDAxMDEsIDB4MjIwNCwgMHhjMGM0LCAweDIwMTIsIDB4MjAwMSwgMHgxODBjLCAweDIwMTQsCisJMHhjMmU0LCAweDIyMDIsIDB4MjA3MSwgMHgxOWU4LCAweDcwMDQsIDB4OTA4NCwgMHgwMDA3LCAweDAwMDIsCisJMHg5OWMyLCAweDk5YzYsIDB4OTllNCwgMHg5YTBkLCAweDlhNGIsIDB4OTljMiwgMHg5OWRkLCAweDk5YzAsCisJMHgwODBjLCAweDBkYzUsIDB4MDBjZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHg3MDI0LCAweDkwNjUsCisJMHgwMTQ4LCAweDcwMjAsIDB4ODAwMSwgMHg3MDIyLCAweDYwMGMsIDB4OTAxNSwgMHgwMTU4LCAweDcyMTYsCisJMHg2MDBmLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMjcsIDB4MDAwMCwgMHgwMGNlLCAweDAwZWUsCisJMHgwMGJlLCAweDAwMDUsIDB4NzIxNiwgMHg3MjEyLCAweDBjYTgsIDB4NzAwNywgMHgwMDAwLCAweDcwMjcsCisJMHgwMDAwLCAweDcwMjAsIDB4OTAwNSwgMHgwMDcwLCAweDYwMTAsIDB4MjA1OCwgMHgwODBjLCAweDY2NGMsCisJMHhiODAwLCAweGMwZGMsIDB4YjgwMiwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNywgMHgwMDAwLCAweDcwMjAsCisJMHg4MDAxLCAweDcwMjIsIDB4MTE0OCwgMHgyMDAxLCAweDE4MGMsIDB4MjAxNCwgMHhkMmVjLCAweDExODAsCisJMHgwMGNlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweGI4NTQsIDB4OTAxNSwgMHgwMTIwLCAweDcyMWUsCisJMHgwODBjLCAweDlhYjEsIDB4MGNhOCwgMHg3MjE4LCAweDcyMWUsIDB4MDgwYywgMHg5YWIxLCAweDBjODAsCisJMHhjMmVjLCAweDIyMDIsIDB4MDgwYywgMHg5YmQzLCAweDBjNTgsIDB4NzAyNCwgMHg5MDY1LCAweDA1YjgsCisJMHg3MDBjLCAweDljMDYsIDB4MTE2MCwgMHgwODBjLCAweGFhZjEsIDB4NjAwYywgMHg5MDE1LCAweDAxMjAsCisJMHg3MjBlLCAweDYwMGYsIDB4MDAwMCwgMHgwNDQ4LCAweDcyMGUsIDB4NzIwYSwgMHgwNDMwLCAweDcwMTQsCisJMHg5YzA2LCAweDExNjAsIDB4MDgwYywgMHhhYWYxLCAweDYwMGMsIDB4OTAxNSwgMHgwMTIwLCAweDcyMTYsCisJMHg2MDBmLCAweDAwMDAsIDB4MDBkMCwgMHg3MjE2LCAweDcyMTIsIDB4MDBiOCwgMHg2MDIwLCAweDkwODYsCisJMHgwMDAzLCAweDExOTgsIDB4NjAxMCwgMHgyMDU4LCAweDA4MGMsIDB4NjY0YywgMHhiODAwLCAweGMwZGMsCisJMHhiODAyLCAweDA4MGMsIDB4YWFmMSwgMHg3MDFjLCAweDkwNjUsIDB4MDEzOCwgMHhiODU0LCAweDkwMTUsCisJMHgwMTEwLCAweDcyMWUsIDB4MDAxMCwgMHg3MjE4LCAweDcyMWUsIDB4NzAyNywgMHgwMDAwLCAweDAwY2UsCisJMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHg3MDI0LCAweDkwNjUsIDB4MDE0MCwgMHgwODBjLCAweGFhZjEsCisJMHg2MDBjLCAweDkwMTUsIDB4MDE1OCwgMHg3MjBlLCAweDYwMGYsIDB4MDAwMCwgMHgwODBjLCAweGFjMWIsCisJMHg3MDI3LCAweDAwMDAsIDB4MDBjZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHg3MjBlLCAweDcyMGEsCisJMHgwY2E4LCAweDAwZDYsIDB4MjA2OSwgMHgxOWU4LCAweDY4MzAsIDB4OTA4NCwgMHgwMDAzLCAweDAwMDIsCisJMHg5YTZlLCAweDlhNzAsIDB4OWE5NCwgMHg5YTZjLCAweDA4MGMsIDB4MGRjNSwgMHgwMGRlLCAweDAwMDUsCisJMHgwMGM2LCAweDY4NDAsIDB4OTA4NiwgMHgwMDAxLCAweDAxYjgsIDB4NjgzYywgMHg5MDY1LCAweDAxMzAsCisJMHg2MDBjLCAweDkwMTUsIDB4MDE3MCwgMHg2YTNhLCAweDYwMGYsIDB4MDAwMCwgMHg2ODMzLCAweDAwMDAsCisJMHg2ODNmLCAweDAwMDAsIDB4MjAxMSwgMHgxYTA3LCAweDIwMTMsIDB4MDAwMCwgMHgwMGNlLCAweDAwZGUsCisJMHgwMDA1LCAweDY4M2EsIDB4NjgzNiwgMHgwYzkwLCAweDY4NDMsIDB4MDAwMCwgMHg2ODM4LCAweDkwNjUsCisJMHgwZDY4LCAweDYwMDMsIDB4MDAwMywgMHgwYzUwLCAweDAwYzYsIDB4OTAwNiwgMHg2ODQyLCAweDY4NDYsCisJMHg2ODRhLCAweDY4M2MsIDB4OTA2NSwgMHgwMTYwLCAweDYwMGMsIDB4OTAxNSwgMHgwMTMwLCAweDZhM2EsCisJMHg2MDBmLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLCAweDAwMTgsIDB4NjgzZSwgMHg2ODNhLCAweDY4MzYsCisJMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMWU1LCAweDIxMDIsCisJMHgwMDA1LCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGQxZWMsIDB4MDEyMCwgMHhjMWVjLCAweDIxMDIsCisJMHgwODBjLCAweDliZDMsIDB4MjAwMSwgMHgxOWY0LCAweDIwMDQsIDB4OTA4NiwgMHgwMDAxLCAweDBkNTgsCisJMHgwMGQ2LCAweDIwNjksIDB4MTllOCwgMHg2ODA0LCAweDkwODQsIDB4MDAwNywgMHgwMDA2LCAweDkwMDUsCisJMHgxMWM4LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweDkwODQsIDB4MDAyOCwgMHgxMTk4LCAweDIwMDEsCisJMHgxOTdjLCAweDIwMDQsIDB4OTA4NiwgMHhhYWFhLCAweDAxNjgsIDB4MjAwMSwgMHgxODhiLCAweDIwMDQsCisJMHhkMDhjLCAweDExMTgsIDB4ZDA4NCwgMHgxMTE4LCAweDAwMjgsIDB4MDgwYywgMHg5YmQzLCAweDAwMGUsCisJMHgwMGRlLCAweDAwMDUsIDB4MDAwZSwgMHgwMDAyLCAweDlhZWUsIDB4OWJhNywgMHg5YmE3LCAweDliYTcsCisJMHg5YmE3LCAweDliYTksIDB4OWJhNywgMHg5YWVjLCAweDA4MGMsIDB4MGRjNSwgMHg2ODIwLCAweDkwMDUsCisJMHgxMTEwLCAweDAwZGUsIDB4MDAwNSwgMHgwMGM2LCAweDY4MGMsIDB4OTA2NSwgMHgwMWYwLCAweDYxMDQsCisJMHg5MThlLCAweDAwNDAsIDB4MTE4MCwgMHgyMDA5LCAweDE4MzcsIDB4MjEwYywgMHg5MThjLCAweDAwMjgsCisJMHgxMTUwLCAweDA4MGMsIDB4NzYzNywgMHgwMTM4LCAweDAwMDYsIDB4MjAwOSwgMHgxODhiLCAweDIxMDQsCisJMHhjMDk1LCAweDIwMGEsIDB4MDAwZSwgMHg2ODA3LCAweDAwMDQsIDB4NjgyNiwgMHg2ODJiLCAweDAwMDAsCisJMHgwODBjLCAweDljN2MsIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4NjgxNCwgMHg5MDY1LCAweDAxNTAsCisJMHg2ODA3LCAweDAwMDEsIDB4NjgyNiwgMHg2ODJiLCAweDAwMDAsIDB4MDgwYywgMHg5YzdjLCAweDAwY2UsCisJMHgwMGRlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGU2LCAweDZhMWMsIDB4OTJkZCwgMHgwMDAwLCAweDA5MDQsCisJMHg5YjkxLCAweGI4NGMsIDB4OTAwZCwgMHgwMTE4LCAweGI4ODgsIDB4OTAwNSwgMHgwMWEwLCAweGI4NTQsCisJMHg5MDVkLCAweDAxMjAsIDB4OTIwZSwgMHgwOTA0LCAweDliOTEsIDB4MDAyOCwgMHg2ODE4LCAweDkyMGUsCisJMHgwOTA0LCAweDliOTEsIDB4MjA1OCwgMHhiODRjLCAweDkwMGQsIDB4MGQ4OCwgMHhiODg4LCAweDkwMDUsCisJMHgxZDcwLCAweDJiMDAsIDB4NjgxZSwgMHhiYjNjLCAweGI4MzgsIDB4OTMwMiwgMHgxZTQwLCAweDA4MGMsCisJMHhiMmFhLCAweDA5MDQsIDB4OWI5MSwgMHg4MzE4LCAweGJiM2UsIDB4NjExNiwgMHgyYjEwLCAweDYyMTIsCisJMHgwMDk2LCAweDIxNDgsIDB4YTg4MCwgMHg5MDg0LCAweDAwZmYsIDB4NjA1ZSwgMHhhODgzLCAweDAwMDAsCisJMHhhODg0LCAweDAwOWUsIDB4OTA4YSwgMHgxOTlhLCAweDAyMTAsIDB4MjAwMSwgMHgxOTk5LCAweDgwMDMsCisJMHg4MDFiLCAweDgzMWIsIDB4OTMxOCwgMHg2MzFhLCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweGE5NjQsCisJMHgwMDllLCAweDkxOGMsIDB4MDBmZiwgMHg5MThlLCAweDAwNDgsIDB4MDUzOCwgMHgwMGY2LCAweDJjNzgsCisJMHgyMDYxLCAweDAxMDAsIDB4YmFjMCwgMHg2MjlhLCAweDIwNjksIDB4MDIwMCwgMHgyMDcxLCAweDAyNDAsCisJMHgwODBjLCAweGEyMTksIDB4MjA2OSwgMHgxOWU4LCAweGJiMDAsIDB4YzNkZCwgMHhiYjAyLCAweDY4MDcsCisJMHgwMDAyLCAweDJmMTgsIDB4NmIyNiwgMHg2ODJiLCAweDAwMDAsIDB4NzgyMywgMHgwMDAzLCAweDc4MDMsCisJMHgwMDAxLCAweDc4MDcsIDB4MDA0MCwgMHgwMGZlLCAweDAwZWUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZGUsCisJMHgwMDA1LCAweDAwZWUsIDB4MDBiZSwgMHgwMGNlLCAweDBjZDAsIDB4NjgwNywgMHgwMDA2LCAweDJjMTgsCisJMHg2YjI2LCAweDY4MjAsIDB4ODAwMSwgMHg2ODIyLCAweDY4MmIsIDB4MDAwMCwgMHgwODBjLCAweDY2NGMsCisJMHgwODBjLCAweGIwZWEsIDB4MDBlZSwgMHgwMGJlLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDAwZGUsCisJMHgwMDA1LCAweDAwYzYsIDB4NjgwYywgMHg5MDY1LCAweDAxZDgsIDB4NjEwNCwgMHg5MThlLCAweDAwNDAsCisJMHgxMTgwLCAweDIwMDksIDB4MTgzNywgMHgyMTBjLCAweDkxOGMsIDB4MDAyOCwgMHgxMTUwLCAweDA4MGMsCisJMHg3NjM3LCAweDAxMzgsIDB4MDAwNiwgMHgyMDA5LCAweDE4OGIsIDB4MjEwNCwgMHhjMDk1LCAweDIwMGEsCisJMHgwMDBlLCAweDY4MDcsIDB4MDAwNCwgMHg2ODI2LCAweDY4MmIsIDB4MDAwMCwgMHgwODBjLCAweDljN2MsCisJMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGMsIDB4MjAxNCwgMHhjMmVkLCAweDIyMDIsCisJMHgwMGRlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZDYsIDB4MjA2OSwgMHgxOWU4LCAweDY4MzAsCisJMHg5MDg2LCAweDAwMDAsIDB4MTU3MCwgMHgyMDAxLCAweDE4MGMsIDB4MjAxNCwgMHhkMmU0LCAweDAxMzAsCisJMHhjMmU0LCAweDIyMDIsIDB4MDgwYywgMHg5YWMwLCAweDIwNjksIDB4MTllOCwgMHgyMDAxLCAweDE4MGMsCisJMHgyMDBjLCAweGQxYzQsIDB4MTUwOCwgMHg2ODM4LCAweDkwN2QsIDB4MDFkOCwgMHg2YTA0LCAweDkyOTYsCisJMHgwMDAwLCAweDE5MDQsIDB4OWM3MCwgMHg3OTIwLCAweDkxOGUsIDB4MDAwOSwgMHgwNTY4LCAweDY4MzMsCisJMHgwMDAxLCAweDY4M2UsIDB4Njg0NywgMHgwMDAwLCAweDY4NGIsIDB4MDAwMCwgMHgwMTI2LCAweDAwZjYsCisJMHgyMDkxLCAweDI0MDAsIDB4MDAyZSwgMHgwODBjLCAweDFjNzksIDB4MTE1OCwgMHgwMTJlLCAweDA4MGMsCisJMHhhNTQ2LCAweDAwZGUsIDB4MDBmZSwgMHgwMDA1LCAweGMxYzQsIDB4MjEwMiwgMHgwODBjLCAweDc2ZTQsCisJMHgwOGQwLCAweDAxMmUsIDB4Njg0MywgMHgwMDAwLCAweDc4MDMsIDB4MDAwMiwgMHg3ODBjLCAweDkwMTUsCisJMHgwMTQwLCAweDZhM2EsIDB4NzgwZiwgMHgwMDAwLCAweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsCisJMHgwYzQwLCAweDY4M2EsIDB4NjgzNiwgMHgwY2MwLCAweDc5MDgsIDB4ZDFmYywgMHgxMTk4LCAweDY4MzMsCisJMHgwMDAxLCAweDY4M2UsIDB4Njg0NywgMHgwMDAwLCAweDY4NGIsIDB4MDAwMCwgMHgwMTI2LCAweDAwZjYsCisJMHgyMDkxLCAweDI0MDAsIDB4MDAyZSwgMHgwODBjLCAweDFjNzksIDB4MTlkOCwgMHgwMTJlLCAweDA4MGMsCisJMHhhNGM3LCAweDA4NzgsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4OTA4NCwgMHgwMDI4LCAweDExODgsCisJMHgyMDAxLCAweDE5N2MsIDB4MjAwNCwgMHg5MDg2LCAweGFhYWEsIDB4MDE1OCwgMHgyMDAxLCAweDE5ZTksCisJMHgyMDA0LCAweDkwMDUsIDB4MTFmMCwgMHgyMDAxLCAweDE4OGIsIDB4MjAwYywgMHhjMTg1LCAweGMxOGMsCisJMHgyMTAyLCAweDJmMDAsIDB4NjgzMywgMHgwMDAxLCAweDY4M2UsIDB4Njg0NywgMHgwMDAwLCAweDY4NGIsCisJMHgwMDAwLCAweDAxMjYsIDB4MDBmNiwgMHgyMDkxLCAweDI0MDAsIDB4MDAyZSwgMHgwODBjLCAweDFjNzksCisJMHgxOTA0LCAweDljMTEsIDB4MDEyZSwgMHg2YTNjLCAweDIyNzgsIDB4MDgwYywgMHhhNDUxLCAweDA4MDQsCisJMHg5YzA5LCAweDIwMTEsIDB4MTg4YiwgMHgyMjA0LCAweGMwOGQsIDB4MjAxMiwgMHgwODA0LCAweDljMDksCisJMHg2YTA0LCAweDkyOTYsIDB4MDAwNiwgMHgxOTA0LCAweDliY2IsIDB4NmEzMCwgMHg5Mjk2LCAweDAwMDAsCisJMHgwOTA0LCAweDliZjMsIDB4MDgwNCwgMHg5YmNiLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwMGIsCisJMHgwMDA1LCAweDljOTAsIDB4OWM5NSwgMHhhMTQ5LCAweGExZTIsIDB4OWM5NSwgMHhhMTQ5LCAweGExZTIsCisJMHg5YzkwLCAweDljOTUsIDB4OWM5MCwgMHg5YzkwLCAweDljOTAsIDB4OWM5MCwgMHg5YzkwLCAweDljOTAsCisJMHgwODBjLCAweDk5YTUsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4MDBiNiwgMHgwMTU2LCAweDAxMzYsCisJMHgwMTQ2LCAweDAxYzYsIDB4MDFkNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNjksCisJMHgwMjAwLCAweDIwNzEsIDB4MDI0MCwgMHg2MDA0LCAweDkwOGEsIDB4MDA1MywgMHgxYTBjLCAweDBkYzUsCisJMHg2MTEwLCAweDIxNTgsIDB4YjljMCwgMHgyYzc4LCAweDIwNjEsIDB4MDEwMCwgMHg2MTlhLCAweDkwOGEsCisJMHgwMDQwLCAweDFhMDQsIDB4OWQwMSwgMHgwMDViLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsCisJMHgwMWRlLCAweDAxY2UsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDBiZSwgMHgwMDA1LCAweDllYWEsCisJMHg5ZWU1LCAweDlmMGUsIDB4OWZkOCwgMHg5ZmZhLCAweGEwMDAsIDB4YTAwZCwgMHhhMDE1LCAweGEwMjEsCisJMHhhMDI3LCAweGEwMzgsIDB4YTAyNywgMHhhMDkwLCAweGEwMTUsIDB4YTA5YywgMHhhMGEyLCAweGEwMjEsCisJMHhhMGEyLCAweGEwYWUsIDB4OWNmZiwgMHg5Y2ZmLCAweDljZmYsIDB4OWNmZiwgMHg5Y2ZmLCAweDljZmYsCisJMHg5Y2ZmLCAweDljZmYsIDB4OWNmZiwgMHg5Y2ZmLCAweDljZmYsIDB4YTkwMCwgMHhhOTIzLCAweGE5MzQsCisJMHhhOTU0LCAweGE5ODYsIDB4YTAwZCwgMHg5Y2ZmLCAweGEwMGQsIDB4YTAyNywgMHg5Y2ZmLCAweDlmMGUsCisJMHg5ZmQ4LCAweDljZmYsIDB4YWQxMiwgMHhhMDI3LCAweDljZmYsIDB4YWQyZSwgMHhhMDI3LCAweDljZmYsCisJMHhhMDIxLCAweDllYTQsIDB4OWQyMiwgMHg5Y2ZmLCAweGFkNGEsIDB4YWRiNywgMHhhZTkyLCAweDljZmYsCisJMHhhZTlmLCAweGEwMGEsIDB4YWVjYSwgMHg5Y2ZmLCAweGE5OTAsIDB4YWVmNywgMHg5Y2ZmLCAweDA4MGMsCisJMHgwZGM1LCAweDIxMDAsIDB4MDA1YiwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAxZGUsCisJMHgwMWNlLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwYmUsIDB4MDAwNSwgMHhhZjkyLCAweGIwNDQsCisJMHg5ZDIwLCAweDlkNWEsIDB4OWUwNiwgMHg5ZTExLCAweDlkMjAsIDB4YTAwZCwgMHg5ZDIwLCAweDllNmIsCisJMHg5ZTc3LCAweDlkNzUsIDB4OWQyMCwgMHg5ZDkwLCAweDlkYzQsIDB4YjFiMSwgMHhiMWY2LCAweGEwMjcsCisJMHgwODBjLCAweDBkYzUsIDB4MDBkNiwgMHgwMDk2LCAweDA4MGMsIDB4YTBjMSwgMHgwMDI2LCAweDAwMzYsCisJMHg3ODE0LCAweDIwNDgsIDB4YTk1OCwgMHhkMWNjLCAweDExMzgsIDB4MjAwOSwgMHgyNDE0LCAweDIwMTEsCisJMHgwMDE4LCAweDIwMTksIDB4MDAxOCwgMHgwMDMwLCAweDIwMDksIDB4MjQxMCwgMHgyMDExLCAweDAwMTQsCisJMHgyMDE5LCAweDAwMTQsIDB4NzEwMiwgMHg3MjA2LCAweDcwMGIsIDB4MDgwMCwgMHhhODNjLCAweDcwMGUsCisJMHhhODUwLCAweDcwMjIsIDB4YTg1NCwgMHg3MDI2LCAweDYzYzIsIDB4MDgwYywgMHhhNmJkLCAweDAwM2UsCisJMHgwMDJlLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LCAweDc4MTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4YTAsCisJMHgwMGJlLCAweDA4MGMsIDB4YjIzZCwgMHgxMTE4LCAweDkwODQsIDB4ZmY4MCwgMHgwMTEwLCAweDkwODUsCisJMHgwMDAxLCAweDAwMDUsIDB4MDBkNiwgMHgwMDk2LCAweDA4MGMsIDB4YTBjMSwgMHg3MDAzLCAweDA1MDAsCisJMHg3ODE0LCAweDIwNDgsIDB4YTg3NCwgMHg3MDBhLCAweGE4NzgsIDB4NzAwZSwgMHhhODdjLCAweDcwMTIsCisJMHhhODgwLCAweDcwMTYsIDB4YTg4NCwgMHg3MDFhLCAweGE4ODgsIDB4NzAxZSwgMHg2MGMzLCAweDAwMTAsCisJMHgwODBjLCAweGE2YmQsIDB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDk2LCAweDA4MGMsCisJMHhhMGMxLCAweDcwMDMsIDB4MDUwMCwgMHg3ODE0LCAweDIwNDgsIDB4YThjYywgMHg3MDBhLCAweGE4ZDAsCisJMHg3MDBlLCAweGE4ZDQsIDB4NzAxMiwgMHhhOGQ4LCAweDcwMTYsIDB4YThkYywgMHg3MDFhLCAweGE4ZTAsCisJMHg3MDFlLCAweDYwYzMsIDB4MDAxMCwgMHgwODBjLCAweGE2YmQsIDB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsCisJMHgwMGQ2LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhhMGMxLCAweDIwZTksCisJMHgwMDAwLCAweDIwMDEsIDB4MTlhNCwgMHgyMDAzLCAweDAwMDAsIDB4NzgxNCwgMHgyMDQ4LCAweGE4MTQsCisJMHg4MDAzLCAweDYwYzIsIDB4YTgzMCwgMHgyMGE4LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsCisJMHgwMDFiLCAweDIwOTgsIDB4MjAwMSwgMHgxOWE0LCAweDAwMTYsIDB4MjAwYywgMHgyMDAxLCAweDAwMDEsCisJMHgwODBjLCAweDIzZWUsIDB4MDgwYywgMHhkZTdjLCAweDkwMDYsIDB4MDgwYywgMHgyM2VlLCAweDAwMWUsCisJMHhhODA0LCAweDkwMDUsIDB4MDExMCwgMHgyMDQ4LCAweDBjMjgsIDB4MDRkOSwgMHgwODBjLCAweGE2YmQsCisJMHgwMTJlLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDA4MGMsIDB4YTEwYywgMHgyMGU5LCAweDAwMDAsIDB4MjAwMSwgMHgxOWE0LCAweDIwMDMsCisJMHgwMDAwLCAweDc4MTQsIDB4MjA0OCwgMHhhODZmLCAweDAyMDAsIDB4YTg3MywgMHgwMDAwLCAweGE4MTQsCisJMHg4MDAzLCAweDYwYzIsIDB4YTgzMCwgMHgyMGE4LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsCisJMHgwMDFiLCAweDIwOTgsIDB4MjAwMSwgMHgxOWE0LCAweDAwMTYsIDB4MjAwYywgMHgwODBjLCAweGRlN2MsCisJMHgwMDFlLCAweGE4MDQsIDB4OTAwNSwgMHgwMTEwLCAweDIwNDgsIDB4MGM2MCwgMHgwMDUxLCAweDc4MTQsCisJMHgyMDQ4LCAweDA4MGMsIDB4MGZjMCwgMHgwODBjLCAweGE2YmQsIDB4MDEyZSwgMHgwMDllLCAweDAwZGUsCisJMHgwMDA1LCAweDYwYzAsIDB4ODAwNCwgMHg5MDg0LCAweDAwMDMsIDB4OTAwNSwgMHgwMTMwLCAweDkwODIsCisJMHgwMDA0LCAweDIwYTMsIDB4MDAwMCwgMHg4MDAwLCAweDFkZTAsIDB4MDAwNSwgMHgwODBjLCAweGEwYzEsCisJMHg3MDAzLCAweDc4MDAsIDB4NzgwOCwgMHg4MDA3LCAweDcwMGEsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsCisJMHhhNmJkLCAweDAwZDYsIDB4MDBlNiwgMHgwODBjLCAweGExMGMsIDB4NzgxNCwgMHg5MDg0LCAweGZmMDAsCisJMHgyMDczLCAweDAyMDAsIDB4OGU3MCwgMHg4ZTcwLCAweDkwOTYsIDB4ZGYwMCwgMHgwMTM4LCAweDkwOTYsCisJMHhlMDAwLCAweDAxMjAsIDB4MjA3MywgMHgwMDEwLCAweDhlNzAsIDB4MDAzMCwgMHg5MDk1LCAweDAwMTAsCisJMHgyMjcyLCAweDhlNzAsIDB4MjA3MywgMHgwMDM0LCAweDhlNzAsIDB4MjA2OSwgMHgxODA1LCAweDIwYTksCisJMHgwMDA0LCAweDJkNzYsIDB4OGQ2OCwgMHg4ZTcwLCAweDFmMDQsIDB4OWUzMSwgMHgyMDY5LCAweDE4MDEsCisJMHgyMGE5LCAweDAwMDQsIDB4MmQ3NiwgMHg4ZDY4LCAweDhlNzAsIDB4MWYwNCwgMHg5ZTNhLCAweDkwOTYsCisJMHhkZjAwLCAweDAxMzAsIDB4OTA5NiwgMHhlMDAwLCAweDAxMTgsIDB4NjBjMywgMHgwMDE4LCAweDAwZjAsCisJMHgyMDY5LCAweDE5YjQsIDB4OTA4NiwgMHhkZjAwLCAweDAxMTAsIDB4MjA2OSwgMHgxOWNlLCAweDIwYTksCisJMHgwMDFhLCAweDllODYsIDB4MDI2MCwgMHgxMTQ4LCAweDAwYzYsIDB4MjA2MSwgMHgwMjAwLCAweDYwMTAsCisJMHg4MDAwLCAweDYwMTIsIDB4MDBjZSwgMHgyMDcxLCAweDAyNDAsIDB4MmQwNCwgMHg4MDA3LCAweDIwNzIsCisJMHg4ZDY4LCAweDhlNzAsIDB4MWYwNCwgMHg5ZTUxLCAweDYwYzMsIDB4MDA0YywgMHgwODBjLCAweGE2YmQsCisJMHgwMGVlLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweGEwYzEsIDB4NzAwMywgMHg2MzAwLCAweDcwMDcsCisJMHgwMDI4LCAweDc4MDgsIDB4NzAwZSwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhNmJkLCAweDAwZDYsCisJMHgwMDI2LCAweDAwMTYsIDB4MDgwYywgMHhhMTBjLCAweDcwMDMsIDB4MDIwMCwgMHg3ODE0LCAweDcwMGUsCisJMHgwMGU2LCAweDllZjAsIDB4MDAwNCwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMDBjLCAweDIwNjksCisJMHgxOTI0LCAweDY4MTAsIDB4ZDA4NCwgMHgxMTQ4LCAweDIwNzMsIDB4MDUwMCwgMHg4ZTcwLCAweDIwNzMsCisJMHgwMDAwLCAweDhlNzAsIDB4ODEwOCwgMHg5MjkwLCAweDAwMDQsIDB4MjA3MywgMHgwODAwLCAweDhlNzAsCisJMHgyMDczLCAweDAwMDAsIDB4MDBlZSwgMHg3MjA2LCAweDcxMGEsIDB4NjJjMiwgMHgwODBjLCAweGE2YmQsCisJMHgwMDFlLCAweDAwMmUsIDB4MDBkZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgxOCwgMHgyMDA0LCAweDYwOWEsCisJMHgwODA0LCAweGE2YmQsIDB4MDgwYywgMHhhMGMxLCAweDcwMDMsIDB4NTIwMCwgMHgyMDY5LCAweDE4NDcsCisJMHg2ODA0LCAweGQwODQsIDB4MDEzMCwgMHg2ODI4LCAweDAwMTYsIDB4MDgwYywgMHgyOGE2LCAweDcxMGUsCisJMHgwMDFlLCAweDIwYTksIDB4MDAwNCwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxODA1LCAweDIwZTksCisJMHgwMDAwLCAweDIwYTEsIDB4MDI1MCwgMHg0MDAzLCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweDE4MDEsCisJMHgyMGExLCAweDAyNTQsIDB4NDAwMywgMHgwODBjLCAweGIyM2QsIDB4MTEyMCwgMHhiOGEwLCAweDkwODIsCisJMHgwMDdmLCAweDAyNDgsIDB4MjAwMSwgMHgxODFmLCAweDIwMDQsIDB4NzAzMiwgMHgyMDAxLCAweDE4MjAsCisJMHgyMDA0LCAweDcwMzYsIDB4MDAzMCwgMHgyMDAxLCAweDE4MTgsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsCisJMHg3MDM2LCAweDYwYzMsIDB4MDAxYywgMHgwODA0LCAweGE2YmQsIDB4MDgwYywgMHhhMGMxLCAweDcwMDMsCisJMHgwNTAwLCAweDA4MGMsIDB4YjIzZCwgMHgxMTIwLCAweGI4YTAsIDB4OTA4MiwgMHgwMDdmLCAweDAyNDgsCisJMHgyMDAxLCAweDE4MWYsIDB4MjAwNCwgMHg3MDBhLCAweDIwMDEsIDB4MTgyMCwgMHgyMDA0LCAweDcwMGUsCisJMHgwMDMwLCAweDIwMDEsIDB4MTgxOCwgMHgyMDA0LCAweDkwODQsIDB4MDBmZiwgMHg3MDBlLCAweDIwYTksCisJMHgwMDA0LCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDE4MDUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsCisJMHgwMjUwLCAweDQwMDMsIDB4NjBjMywgMHgwMDEwLCAweDA4MDQsIDB4YTZiZCwgMHgwODBjLCAweGEwYzEsCisJMHg5MDA2LCAweDA4MGMsIDB4NmE2ZCwgMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgxMTcwLCAweDIwMTEsCisJMHgwMjQwLCAweDIwMTMsIDB4MjJmZiwgMHgyMDExLCAweDAyNDEsIDB4MjAxMywgMHhmZmZlLCAweDcwMDMsCisJMHgwNDAwLCAweDYyMGMsIDB4YzJiNCwgMHg2MjBlLCAweDAwNTgsIDB4NzgxNCwgMHgwMDk2LCAweDkwNGQsCisJMHgwMTIwLCAweDkwMDYsIDB4YTg5YSwgMHhhOGE2LCAweGE4YWEsIDB4MDA5ZSwgMHg3MDAzLCAweDAzMDAsCisJMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgxOTA0LCAweDlmOTgsIDB4MDBkNiwgMHgyMDY5LCAweDE5NmMsCisJMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGE0LCAweDAxODgsIDB4NjgwMCwgMHg3MDBhLCAweDY4MDgsCisJMHg5MDg0LCAweDIwMDAsIDB4NzAxMiwgMHgwODBjLCAweGIyNTQsIDB4NjgwYywgMHg3MDE2LCAweDcwMWYsCisJMHgyNzEwLCAweDY4MTgsIDB4NzAyMiwgMHg2ODFjLCAweDcwMjYsIDB4MDQyOCwgMHg2ODAwLCAweDcwMGEsCisJMHg2ODA0LCAweDcwMGUsIDB4MjAwOSwgMHgxODBkLCAweDIxMGMsIDB4ZDE4YywgMHgwMTEwLCAweDIwMDEsCisJMHgwMDAyLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDA4MGMsIDB4NzYzNywgMHgxMTI4LCAweDc4ZTMsCisJMHgwMDAwLCAweDA4MGMsIDB4MjhlNywgMHg3OGUyLCAweDAwZmUsIDB4NjgwOCwgMHgwODBjLCAweDc2MzcsCisJMHgxMTE4LCAweDkwODQsIDB4MzdmZiwgMHgwMDEwLCAweDkwODQsIDB4M2ZmZiwgMHg3MDEyLCAweDA4MGMsCisJMHhiMjU0LCAweDY4MGMsIDB4NzAxNiwgMHgwMGRlLCAweDIwYTksIDB4MDAwNCwgMHgyMGUxLCAweDAwMDEsCisJMHgyMDk5LCAweDE4MDUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI1NiwgMHg0MDAzLCAweDIwYTksCisJMHgwMDA0LCAweDIwOTksIDB4MTgwMSwgMHgyMGExLCAweDAyNWEsIDB4NDAwMywgMHgwMGQ2LCAweDA4MGMsCisJMHhhZjc5LCAweDIwNjksIDB4MTk3NCwgMHgyMDcxLCAweDAyNGUsIDB4NjgwMCwgMHhjMGRkLCAweDcwMDIsCisJMHgwODBjLCAweDU3ZDksIDB4ZDBlNCwgMHgwMTEwLCAweDY4MGMsIDB4NzAwZSwgMHgwMGRlLCAweDA0ZTAsCisJMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGE0LCAweDAxYTgsIDB4MDAxNiwgMHgyMDAxLCAweDE4MGQsCisJMHgyMDA0LCAweGQwOGMsIDB4MjAwOSwgMHgwMDAyLCAweDExMTgsIDB4MjAwMSwgMHgxOTZkLCAweDIwMGMsCisJMHg2MGUwLCAweDkxMDYsIDB4MDEzMCwgMHgyMTAwLCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweDI4ZTcsCisJMHg2MWUyLCAweDAwMWUsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MTk2YywgMHgyMGU5LCAweDAwMDAsCisJMHgyMGExLCAweDAyNGUsIDB4MjBhOSwgMHgwMDA4LCAweDQwMDMsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksCisJMHgxODA1LCAweDIwYTEsIDB4MDI1NiwgMHg0MDAzLCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweDE4MDEsCisJMHgyMGExLCAweDAyNWEsIDB4NDAwMywgMHgwODBjLCAweGFmNzksIDB4MjBhMSwgMHgwMjRlLCAweDIwYTksCisJMHgwMDA4LCAweDIwOTksIDB4MTk3NCwgMHg0MDAzLCAweDYwYzMsIDB4MDA3NCwgMHgwODA0LCAweGE2YmQsCisJMHgwODBjLCAweGEwYzEsIDB4NzAwMywgMHgyMDEwLCAweDcwMDcsIDB4MDAxNCwgMHg3MDBiLCAweDA4MDAsCisJMHg3MDBmLCAweDIwMDAsIDB4OTAwNiwgMHgwMGY2LCAweDIwNzksIDB4MTg0NywgMHg3OTA0LCAweDAwZmUsCiAJMHhkMWFjLCAweDExMTAsIDB4OTA4NSwgMHgwMDIwLCAweGQxYTQsIDB4MDExMCwgMHg5MDg1LCAweDAwMTAsCi0JMHgyMDA5LCAweDE4NjksIDB4MjEwYywgMHhkMTg0LCAweDExMTAsIDB4OTA4NSwgMHgwMDAyLCAweDAwMjYsCi0JMHgyMDA5LCAweDE4NjcsIDB4MjEwYywgMHhkMWU0LCAweDAxNTAsIDB4YzBjNSwgMHhiYWNjLCAweGQyOGMsCi0JMHgxMTA4LCAweGMwY2QsIDB4OTA5NCwgMHgwMDMwLCAweDkyOTYsIDB4MDAxMCwgMHgwMTQwLCAweGQxZWMsCi0JMHgwMTMwLCAweDkwOTQsIDB4MDAzMCwgMHg5Mjk2LCAweDAwMTAsIDB4MDEwOCwgMHhjMGJkLCAweDAwMmUsCi0JMHg3MDI2LCAweDYwYzMsIDB4MDAxNCwgMHgwMGRlLCAweDA4MDQsIDB4YTRlYiwgMHgwODBjLCAweDlmM2EsCi0JMHg3MDAzLCAweDAyMTAsIDB4NzAwNywgMHgwMDE0LCAweDcwMGYsIDB4MDEwMCwgMHg2MGMzLCAweDAwMTQsCi0JMHgwODA0LCAweGE0ZWIsIDB4MDgwYywgMHg5ZjNhLCAweDcwMDMsIDB4MDIwMCwgMHgwODA0LCAweDljZWEsCi0JMHgwODBjLCAweDlmM2EsIDB4NzAwMywgMHgwMTAwLCAweDcwMGIsIDB4MDAwMywgMHg3MDBmLCAweDJhMDAsCi0JMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhNGViLCAweDA4MGMsIDB4OWYzYSwgMHg3MDAzLCAweDAxMDAsCi0JMHg3MDBiLCAweDAwMGIsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTRlYiwgMHgwMDI2LCAweDAwZDYsCi0JMHgwMDM2LCAweDAwNDYsIDB4MjAxOSwgMHgzMjAwLCAweDIwMjEsIDB4MDgwMCwgMHgwMDQwLCAweDAwMjYsCi0JMHgwMGQ2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDIyMDAsIDB4MjAyMSwgMHgwMTAwLCAweDA4MGMsCi0JMHhhZGJjLCAweGI4MTAsIDB4OTMwNSwgMHg3MDAyLCAweGI4MTQsIDB4NzAwNiwgMHgyMDY5LCAweDE4MDAsCi0JMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDk0ODUsIDB4MDAyOSwgMHg3MDEyLCAweDAwNGUsCi0JMHgwMDNlLCAweDAwZGUsIDB4MDgwYywgMHhhNGQ5LCAweDcyMWEsIDB4OWY5NSwgMHgwMDAwLCAweDcyMjIsCi0JMHg3MDI3LCAweGZmZmYsIDB4MjA3MSwgMHgwMjRjLCAweDAwMmUsIDB4MDAwNSwgMHgwMDI2LCAweDA4MGMsCi0JMHhhZGJjLCAweDcwMDMsIDB4MDJmZiwgMHg3MDA3LCAweGZmZmMsIDB4MDBkNiwgMHgyMDY5LCAweDE4MDAsCi0JMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDAwZGUsIDB4NzAxMywgMHgyMDI5LCAweDBjMTAsCi0JMHg3MDAzLCAweDAxMDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMGIsIDB4ZmMwMiwgMHg3MDBmLCAweDAwMDAsCi0JMHgwMDA1LCAweDAwMjYsIDB4MDBkNiwgMHgwMDM2LCAweDAwNDYsIDB4MjAxOSwgMHgzMzAwLCAweDIwMjEsCi0JMHgwODAwLCAweDAwNDAsIDB4MDAyNiwgMHgwMGQ2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDIzMDAsCi0JMHgyMDIxLCAweDAxMDAsIDB4MDgwYywgMHhhZGJjLCAweGI4MTAsIDB4OTMwNSwgMHg3MDAyLCAweGI4MTQsCi0JMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHhiODEwLCAweDkwMDUsIDB4MTE0MCwgMHhiODE0LCAweDkwMDUsCi0JMHgxMTI4LCAweDcwMGIsIDB4MDBmZiwgMHg3MDBmLCAweGZmZmUsIDB4MDAyMCwgMHg2ODdjLCAweDcwMGEsCi0JMHg2ODgwLCAweDcwMGUsIDB4MDAwMCwgMHg5NDg1LCAweDAwOTgsIDB4NzAxMiwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMGRlLCAweDA4MGMsIDB4YTRkOSwgMHg3MjFhLCAweDdhMDgsIDB4NzIyMiwgMHgyZjEwLCAweDcyMjYsCi0JMHgyMDcxLCAweDAyNGMsIDB4MDAyZSwgMHgwMDA1LCAweDA4MGMsIDB4YTRkOSwgMHg3MjFhLCAweDdhMDgsCi0JMHg3MjIyLCAweDc4MTQsIDB4NzAyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDAyZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNjksIDB4MDIwMCwgMHgyMDcxLCAweDAyNDAsCi0JMHg2MDA0LCAweDkwOGEsIDB4MDA4NSwgMHgwYTBjLCAweDBkYzUsIDB4OTA4YSwgMHgwMDkyLCAweDFhMGMsCi0JMHgwZGM1LCAweDYxMTAsIDB4MjE1OCwgMHhiOWMwLCAweDJjNzgsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsCi0JMHg5MDgyLCAweDAwODUsIDB4MDAzMywgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMDA1LCAweDlmYTgsIDB4OWZiNywgMHg5ZmMyLCAweDlmYTYsIDB4OWZhNiwgMHg5ZmE2LCAweDlmYTgsCi0JMHg5ZmE2LCAweDlmYTYsIDB4OWZhNiwgMHg5ZmE2LCAweDlmYTYsIDB4OWZhNiwgMHgwODBjLCAweDBkYzUsCi0JMHgwNDExLCAweDYwYzMsIDB4MDAwMCwgMHgwMDI2LCAweDA4MGMsIDB4MmJlNywgMHgwMjI4LCAweDIwMTEsCi0JMHgwMTAxLCAweDIyMDQsIDB4YzBjNSwgMHgyMDEyLCAweDAwMmUsIDB4MDgwNCwgMHhhNGViLCAweDA0MzEsCi0JMHg3ODA4LCAweDcwMGEsIDB4NzgxNCwgMHg3MDBlLCAweDcwMTcsIDB4ZmZmZiwgMHg2MGMzLCAweDAwMGMsCi0JMHgwODA0LCAweGE0ZWIsIDB4MDRhMSwgMHg3MDAzLCAweDAwMDMsIDB4NzAwNywgMHgwMzAwLCAweDYwYzMsCi0JMHgwMDA0LCAweDA4MDQsIDB4YTRlYiwgMHgwMDI2LCAweDA4MGMsIDB4YWRiYywgMHhiODEwLCAweDkwODUsCi0JMHg4MTAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLCAweDcwMGEsCi0JMHg2ODgwLCAweDcwMGUsIDB4NzAxMywgMHgwMDA5LCAweDA4MDQsIDB4OWYwYSwgMHgwMDI2LCAweDA4MGMsCi0JMHhhZGJjLCAweGI4MTAsIDB4OTA4NSwgMHg4NDAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksCi0JMHgxODAwLCAweDY4N2MsIDB4NzAwYSwgMHg2ODgwLCAweDcwMGUsIDB4MjAwMSwgMHgwMDk5LCAweDdhMjAsCi0JMHg5Mjk2LCAweDAwMDUsIDB4MDEwOCwgMHhjMGJjLCAweDcwMTIsIDB4MDgwNCwgMHg5ZjZjLCAweDAwMjYsCi0JMHgwODBjLCAweGFkYmMsIDB4YjgxMCwgMHg5MDg1LCAweDg1MDAsIDB4NzAwMiwgMHhiODE0LCAweDcwMDYsCi0JMHgyMDY5LCAweDE4MDAsIDB4Njg3YywgMHg3MDBhLCAweDY4ODAsIDB4NzAwZSwgMHgyMDAxLCAweDAwOTksCi0JMHg3YTIwLCAweDkyOTYsIDB4MDAwNSwgMHgwMTA4LCAweGMwYmMsIDB4NzAxMiwgMHgwODA0LCAweDlmNmMsCi0JMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MmM3OCwgMHgyMDY5LCAweDAyMDAsCi0JMHgyMDcxLCAweDAyNDAsIDB4NzgwNCwgMHg5MDhhLCAweDAwNDAsIDB4MGEwYywgMHgwZGM1LCAweDkwOGEsCi0JMHgwMDU0LCAweDFhMGMsIDB4MGRjNSwgMHg3OTEwLCAweDIxNTgsIDB4YjljMCwgMHgyMDYxLCAweDAxMDAsCi0JMHg2MTlhLCAweDkwODIsIDB4MDA0MCwgMHgwMDMzLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMGJlLCAweDAwMDUsIDB4YTA0NywgMHhhMTBlLCAweGEwZTEsIDB4YTIzMCwgMHhhMDQ1LCAweGEwNDUsCi0JMHhhMDQ1LCAweGEwNDUsIDB4YTA0NSwgMHhhMDQ1LCAweGEwNDUsIDB4YTkwNiwgMHhhOTBiLCAweGE5MTAsCi0JMHhhOTE1LCAweGEwNDUsIDB4YWQwNCwgMHhhMDQ1LCAweGE5MDEsIDB4MDgwYywgMHgwZGM1LCAweDAwOTYsCi0JMHg3ODBiLCAweGZmZmYsIDB4MDgwYywgMHhhMGIyLCAweDc5MTQsIDB4MjE0OCwgMHhhOTc4LCAweDc5NTYsCi0JMHhhZTY0LCAweDk2YjQsIDB4MDBmZiwgMHg5Njg2LCAweDAwMDgsIDB4MTE0OCwgMHhhOGI0LCAweDcwMzIsCi0JMHhhOGI4LCAweDcwMzYsIDB4YThiYywgMHg3MDNhLCAweGE4YzAsIDB4NzAzZSwgMHgwMDA4LCAweDcxMzIsCi0JMHhhOTdjLCAweDkxODQsIDB4MDAwZiwgMHgxMTE4LCAweDIwMDEsIDB4MDAwNSwgMHgwMDQwLCAweGQxODQsCi0JMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDE4LCAweDkwODQsIDB4MDAwNiwgMHg4MDA0LCAweDIwMTAsCi0JMHg3ODVjLCAweDkwODQsIDB4MDBmZiwgMHg4MDA3LCAweDkyMDUsIDB4NzA0MiwgMHhkMWFjLCAweDAxNTgsCi0JMHg3MDQ3LCAweDAwMDIsIDB4OTY4NiwgMHgwMDA4LCAweDExMTgsIDB4MDgwYywgMHgxOGYxLCAweDAwMTAsCi0JMHgwODBjLCAweDE3NjgsIDB4MDA1MCwgMHhkMWI0LCAweDAxMTgsIDB4NzA0NywgMHgwMDAxLCAweDAwMjgsCi0JMHg3MDQ3LCAweDAwMDAsIDB4OTAxNiwgMHgyMjMwLCAweDAwMTAsIDB4YWFiMCwgMHhhZWFjLCAweDcyNmEsCi0JMHg3NjZlLCAweDIwYTksIDB4MDAwOCwgMHgyMGU5LCAweDAwMDAsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsCi0JMHg5MDgwLCAweDAwMjMsIDB4MjA5OCwgMHgyMGExLCAweDAyNTIsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTMsCi0JMHgwMDE4LCAweDQwMDMsIDB4NjgxMywgMHgwMDA4LCAweDYwYzMsIDB4MDAyMCwgMHg2MDE3LCAweDAwMDksCi0JMHgyMDAxLCAweDFhMDUsIDB4MjAwMywgMHgwN2QwLCAweDIwMDEsIDB4MWEwNCwgMHgyMDAzLCAweDAwMDksCi0JMHgwMDllLCAweDAwMDUsIDB4NjgxMywgMHgwMDA4LCAweGJhOGMsIDB4ODIxMCwgMHhiOGNjLCAweGQwODQsCi0JMHgwMTgwLCAweDIwMDEsIDB4MWFkMSwgMHgyMDBjLCAweDgxMDgsIDB4MjEwMiwgMHgyMDAxLCAweDFhZDAsCi0JMHgyMDFjLCAweDEyMTgsIDB4ODMxOCwgMHgyMzAyLCAweDBlYTAsIDB4Nzk0YSwgMHg3MTJlLCAweDdiNDYsCi0JMHg3MzJhLCAweDkyOTQsIDB4MDBmZiwgMHhiYThlLCAweDgyMTcsIDB4NzIxYSwgMHhiYTEwLCAweDkyOTUsCi0JMHgwNjAwLCAweDcyMDIsIDB4YmExNCwgMHg3MjA2LCAweDIwNjksIDB4MTgwMCwgMHg2YTdjLCAweDcyMGEsCi0JMHg2YTgwLCAweDcyMGUsIDB4NzAxMywgMHgwODI5LCAweDJmMTAsIDB4NzIyMiwgMHg3MDI3LCAweGZmZmYsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwMDgxLCAweDc4MTQsIDB4MjA0OCwgMHhhODkwLCAweDcwMDIsCi0JMHhhODhjLCAweDcwMDYsIDB4YThiMCwgMHg3MDBhLCAweGE4YWMsIDB4NzAwZSwgMHg2MGMzLCAweDAwMGMsCi0JMHgwMDllLCAweDAwZGUsIDB4MDgwNCwgMHhhNGViLCAweDY4MTMsIDB4MDAwOCwgMHhiODEwLCAweDkwODUsCi0JMHgwNTAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLCAweDcwMGEsCi0JMHg2ODgwLCAweDcwMGUsIDB4NzAxMywgMHgwODg5LCAweDA4MGMsIDB4YTRkOSwgMHg3MjFhLCAweDdhMDgsCi0JMHg3MjIyLCAweDJmMTAsIDB4NzIyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsCi0JMHgwODBjLCAweGEyMGUsIDB4NzgxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NCwgMHgxMTMwLCAweDc4MTQsCi0JMHg5MDg0LCAweDA3MDAsIDB4ODAwNywgMHgwMDMzLCAweDAwMTAsIDB4OTAwNiwgMHgwMDFiLCAweDAwOWUsCi0JMHgwMGRlLCAweDAwMDUsIDB4YTEyYywgMHhhMTk1LCAweGExYTUsIDB4YTFjYiwgMHhhMWQ3LCAweGExZTgsCi0JMHhhMWYwLCAweGExMmEsIDB4MDgwYywgMHgwZGM1LCAweDAwMTYsIDB4MDAzNiwgMHhhOTdjLCAweDkxOGMsCi0JMHgwMDAzLCAweDAxMTgsIDB4OTE4NiwgMHgwMDAzLCAweDExOTgsIDB4YWJhOCwgMHg3ODI0LCAweGQwY2MsCi0JMHgxMTY4LCAweDczMTYsIDB4YTg5OCwgMHg3MDFhLCAweGE4OTQsIDB4NzAxZSwgMHgwMDNlLCAweDAwMWUsCi0JMHgyMDAxLCAweDE5YjMsIDB4MjAwNCwgMHg2MGMyLCAweDA4MDQsIDB4YTRlYiwgMHhjM2U1LCAweDBjODgsCi0JMHg5MTg2LCAweDAwMDEsIDB4MTkwYywgMHgwZGM1LCAweGFiYTgsIDB4NzgyNCwgMHhkMGNjLCAweDE5MDQsCi0JMHhhMTkyLCAweDczMTYsIDB4YTg5OCwgMHg3MDFhLCAweGE4OTQsIDB4NzAxZSwgMHhhOGE0LCAweDcwMjYsCi0JMHhhOGFjLCAweDcwMmUsIDB4MjAwOSwgMHgwMDE4LCAweDkzODQsIDB4MDMwMCwgMHgwNTcwLCAweGQzYzQsCi0JMHgwMTEwLCAweGE4YWMsIDB4OTEwOCwgMHhkM2NjLCAweDAxMTAsIDB4YThhNCwgMHg5MTA4LCAweDY4MTAsCi0JMHg5MDg1LCAweDAwMTAsIDB4NjgxMiwgMHgyMDExLCAweDAyNTgsIDB4MjBlOSwgMHgwMDAwLCAweDIyYTAsCi0JMHgwMTU2LCAweDIwYTksIDB4MDAwOCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMmMsCi0JMHgyMDk4LCAweDQwMDMsIDB4NjgxMCwgMHg4MDAwLCAweDY4MTIsIDB4MjAxMSwgMHgwMjQwLCAweDIyYTAsCi0JMHgyMGE5LCAweDAwMDUsIDB4NDAwMywgMHg2ODEwLCAweGMwYTQsIDB4NjgxMiwgMHgwMTVlLCAweDkxODQsCi0JMHgwMDAzLCAweDAxMTgsIDB4MjAxOSwgMHgwMjQ1LCAweDIwMWEsIDB4NjFjMiwgMHgwMDNlLCAweDAwMWUsCi0JMHgwODA0LCAweGE0ZWIsIDB4YzNlNSwgMHgwODA0LCAweGExNTEsIDB4MjAxMSwgMHgwMDA4LCAweDIwMDEsCi0JMHgxODBmLCAweDIwMDQsIDB4ZDBhNCwgMHgwMTEwLCAweDIwMTEsIDB4MDAyOCwgMHg3ODI0LCAweGQwY2MsCi0JMHgxMTEwLCAweDcyMTYsIDB4MDQ3MCwgMHgwY2U4LCAweGMyZTUsIDB4MjAxMSwgMHgwMzAyLCAweDAwMTYsCi0JMHg3ODJjLCAweDcwMWEsIDB4NzkzMCwgMHg3MTFlLCAweDkxMDUsIDB4MDEwOCwgMHhjMmRkLCAweDAwMWUsCi0JMHg3ODI0LCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDcyMTYsIDB4NzAyNywgMHgwMDEyLCAweDcwMmYsCi0JMHgwMDA4LCAweDcwNDMsIDB4NzAwMCwgMHg3MDQ3LCAweDA1MDAsIDB4NzA0ZiwgMHgwMDBhLCAweDIwNjksCi0JMHgwMjAwLCAweDY4MTMsIDB4MDAwOSwgMHgyMDcxLCAweDAyNDAsIDB4NzAwYiwgMHgyNTAwLCAweDYwYzMsCi0JMHgwMDMyLCAweDA4MDQsIDB4YTRlYiwgMHgyMDExLCAweDAwMjgsIDB4NzgyNCwgMHhkMGNjLCAweDExMjgsCi0JMHg3MjE2LCAweDYwYzMsIDB4MDAxOCwgMHgwODA0LCAweGE0ZWIsIDB4MGNkMCwgMHhjMmU1LCAweDIwMTEsCi0JMHgwMTAwLCAweDc4MjQsIDB4ZDBjYywgMHgwMTA4LCAweGMyZTUsIDB4NzIxNiwgMHg3MDJmLCAweDAwMDgsCi0JMHg3ODU4LCAweDkwODQsIDB4MDBmZiwgMHg3MDM2LCAweDYwYzMsIDB4MDAyMCwgMHgwODA0LCAweGE0ZWIsCi0JMHgyMDExLCAweDAwMDgsIDB4NzgyNCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHg3MjE2LCAweDBjMDgsCi0JMHgwMDM2LCAweDdiMTQsIDB4OTM4NCwgMHhmZjAwLCAweDc4MTYsIDB4OTM4NCwgMHgwMGZmLCAweDgwMDEsCi0JMHgxMTM4LCAweDc4MjQsIDB4ZDBjYywgMHgwMTA4LCAweGMyZTUsIDB4NzIxNiwgMHgwMDNlLCAweDA4ODgsCi0JMHgwMDQ2LCAweDIwMjEsIDB4MDgwMCwgMHgwMDA2LCAweDc4MjQsIDB4ZDBjYywgMHgwMDBlLCAweDAxMDgsCi0JMHhjNGU1LCAweDc0MTYsIDB4MDA0ZSwgMHg3MDFlLCAweDAwM2UsIDB4MDgxOCwgMHgwMGQ2LCAweDY4MTMsCi0JMHgwMDA4LCAweGI4MTAsIDB4OTA4NSwgMHgwNzAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksCi0JMHgxODAwLCAweDY4N2MsIDB4NzAwYSwgMHg2ODgwLCAweDcwMGUsIDB4NzgyNCwgMHhkMGNjLCAweDExNjgsCi0JMHg3MDEzLCAweDA4OTgsIDB4MDgwYywgMHhhNGQ5LCAweDcyMWEsIDB4N2EwOCwgMHg3MjIyLCAweDJmMTAsCi0JMHg3MjI2LCAweDIwNzEsIDB4MDI0YywgMHgwMGRlLCAweDAwMDUsIDB4NzAxMywgMHgwODg5LCAweDBjOTAsCi0JMHgwMDE2LCAweDc4MTQsIDB4OTA4NCwgMHgwNzAwLCAweDgwMDcsIDB4MDAxMywgMHgwMDFlLCAweDAwMDUsCi0JMHhhMjQwLCAweGEyNDAsIDB4YTI0MiwgMHhhMjQwLCAweGEyNDAsIDB4YTI0MCwgMHhhMjVjLCAweGEyNDAsCi0JMHgwODBjLCAweDBkYzUsIDB4NzkxNCwgMHg5MThjLCAweDA4ZmYsIDB4OTE4ZCwgMHhmNjAwLCAweDc5MTYsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDBiOSwgMHgyMDY5LCAweDE4NDcsIDB4NjgwNCwgMHhkMGJjLCAweDAxMzAsCi0JMHg2ODJjLCAweDkwODQsIDB4MDBmZiwgMHg4MDA3LCAweDcwMzIsIDB4MDAxMCwgMHg3MDMzLCAweDNmMDAsCi0JMHg2MGMzLCAweDAwMDEsIDB4MDgwNCwgMHhhNGViLCAweDIwMDksIDB4MDAwMywgMHgwMDE5LCAweDcwMzMsCi0JMHg3ZjAwLCAweDBjYjAsIDB4MDAxNiwgMHgwODBjLCAweGFkYmMsIDB4MDAxZSwgMHhiODEwLCAweDkwODUsCi0JMHgwMTAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2YTdjLCAweDcyMGEsCi0JMHg2YTgwLCAweDcyMGUsIDB4NzAxMywgMHgwODg4LCAweDkxOGQsIDB4MDAwOCwgMHg3MTE2LCAweDA4MGMsCi0JMHhhNGQ5LCAweDcyMWEsIDB4N2EwOCwgMHg3MjIyLCAweDJmMTAsIDB4NzIyNiwgMHgwMDA1LCAweDAwYjYsCisJMHg5MDg1LCAweDAwMDIsIDB4MDBkNiwgMHgwODA0LCAweGEwNzEsIDB4NzAyNiwgMHg2MGMzLCAweDAwMTQsCisJMHgwODA0LCAweGE2YmQsIDB4MDgwYywgMHhhMGMxLCAweDcwMDMsIDB4NTAwMCwgMHgwODA0LCAweDlmMzAsCisJMHgwODBjLCAweGEwYzEsIDB4NzAwMywgMHgyMTEwLCAweDcwMDcsIDB4MDAxNCwgMHg2MGMzLCAweDAwMTQsCisJMHgwODA0LCAweGE2YmQsIDB4MDgwYywgMHhhMTAzLCAweDAwMTAsIDB4MDgwYywgMHhhMTBjLCAweDcwMDMsCisJMHgwMjAwLCAweDYwYzMsIDB4MDAwNCwgMHgwODA0LCAweGE2YmQsIDB4MDgwYywgMHhhMTBjLCAweDcwMDMsCisJMHgwMTAwLCAweDcwMGIsIDB4MDAwMywgMHg3MDBmLCAweDJhMDAsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsCisJMHhhNmJkLCAweDA4MGMsIDB4YTEwYywgMHg3MDAzLCAweDAyMDAsIDB4MDgwNCwgMHg5ZjMwLCAweDA4MGMsCisJMHhhMTBjLCAweDcwMDMsIDB4MDEwMCwgMHg3ODJjLCAweDkwMDUsIDB4MDExMCwgMHg3MDBhLCAweDAwMTAsCisJMHg3MDBiLCAweDAwMDMsIDB4NzgxNCwgMHg3MDBlLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweGE2YmQsCisJMHgwMGQ2LCAweDA4MGMsIDB4YTEwYywgMHg3MDAzLCAweDAyMTAsIDB4NzAwNywgMHgwMDE0LCAweDcwMGIsCisJMHgwODAwLCAweGI4OTQsIDB4OTA4NiwgMHgwMDE0LCAweDExOTgsIDB4Yjk5YywgMHg5MTg0LCAweDAwMzAsCisJMHgwMTkwLCAweGI5OTgsIDB4OTE4NCwgMHhjMDAwLCAweDExNDAsIDB4ZDFlYywgMHgwMTE4LCAweDcwMGYsCisJMHgyMTAwLCAweDAwNTgsIDB4NzAwZiwgMHgwMTAwLCAweDAwNDAsIDB4NzAwZiwgMHgwNDAwLCAweDAwMjgsCisJMHg3MDBmLCAweDA3MDAsIDB4MDAxMCwgMHg3MDBmLCAweDA4MDAsIDB4MDBmNiwgMHgyMDc5LCAweDE4NDcsCisJMHg3OTA0LCAweDAwZmUsIDB4ZDFhYywgMHgxMTEwLCAweDkwODUsIDB4MDAyMCwgMHhkMWE0LCAweDAxMTAsCisJMHg5MDg1LCAweDAwMTAsIDB4MjAwOSwgMHgxODY5LCAweDIxMGMsIDB4ZDE4NCwgMHgxMTEwLCAweDkwODUsCisJMHgwMDAyLCAweDAwMjYsIDB4MjAwOSwgMHgxODY3LCAweDIxMGMsIDB4ZDFlNCwgMHgwMTUwLCAweGMwYzUsCisJMHhiYWNjLCAweGQyOGMsIDB4MTEwOCwgMHhjMGNkLCAweDkwOTQsIDB4MDAzMCwgMHg5Mjk2LCAweDAwMTAsCisJMHgwMTQwLCAweGQxZWMsIDB4MDEzMCwgMHg5MDk0LCAweDAwMzAsIDB4OTI5NiwgMHgwMDEwLCAweDAxMDgsCisJMHhjMGJkLCAweDAwMmUsIDB4NzAyNiwgMHg2MGMzLCAweDAwMTQsIDB4MDBkZSwgMHgwODA0LCAweGE2YmQsCisJMHgwODBjLCAweGExMGMsIDB4NzAwMywgMHgwMjEwLCAweDcwMDcsIDB4MDAxNCwgMHg3MDBmLCAweDAxMDAsCisJMHg2MGMzLCAweDAwMTQsIDB4MDgwNCwgMHhhNmJkLCAweDA4MGMsIDB4YTEwYywgMHg3MDAzLCAweDAyMDAsCisJMHgwODA0LCAweDllYWUsIDB4MDgwYywgMHhhMTBjLCAweDcwMDMsIDB4MDEwMCwgMHg3MDBiLCAweDAwMDMsCisJMHg3MDBmLCAweDJhMDAsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTZiZCwgMHgwODBjLCAweGExMGMsCisJMHg3MDAzLCAweDAxMDAsIDB4NzAwYiwgMHgwMDBiLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweGE2YmQsCisJMHgwMDI2LCAweDAwZDYsIDB4MDAzNiwgMHgwMDQ2LCAweDIwMTksIDB4MzIwMCwgMHgyMDIxLCAweDA4MDAsCisJMHgwMDQwLCAweDAwMjYsIDB4MDBkNiwgMHgwMDM2LCAweDAwNDYsIDB4MjAxOSwgMHgyMjAwLCAweDIwMjEsCisJMHgwMTAwLCAweDA4MGMsIDB4YWY4ZSwgMHhiODEwLCAweDkzMDUsIDB4NzAwMiwgMHhiODE0LCAweDcwMDYsCisJMHgyMDY5LCAweDE4MDAsIDB4Njg3YywgMHg3MDBhLCAweDY4ODAsIDB4NzAwZSwgMHg5NDg1LCAweDAwMjksCisJMHg3MDEyLCAweDAwNGUsIDB4MDAzZSwgMHgwMGRlLCAweDA4MGMsIDB4YTZhYiwgMHg3MjFhLCAweDlmOTUsCisJMHgwMDAwLCAweDcyMjIsIDB4NzAyNywgMHhmZmZmLCAweDIwNzEsIDB4MDI0YywgMHgwMDJlLCAweDAwMDUsCisJMHgwMDI2LCAweDA4MGMsIDB4YWY4ZSwgMHg3MDAzLCAweDAyZmYsIDB4NzAwNywgMHhmZmZjLCAweDAwZDYsCisJMHgyMDY5LCAweDE4MDAsIDB4Njg3YywgMHg3MDBhLCAweDY4ODAsIDB4NzAwZSwgMHgwMGRlLCAweDcwMTMsCisJMHgyMDI5LCAweDBjMTAsIDB4NzAwMywgMHgwMTAwLCAweDcwMDcsIDB4MDAwMCwgMHg3MDBiLCAweGZjMDIsCisJMHg3MDBmLCAweDAwMDAsIDB4MDAwNSwgMHgwMDI2LCAweDAwZDYsIDB4MDAzNiwgMHgwMDQ2LCAweDIwMTksCisJMHgzMzAwLCAweDIwMjEsIDB4MDgwMCwgMHgwMDQwLCAweDAwMjYsIDB4MDBkNiwgMHgwMDM2LCAweDAwNDYsCisJMHgyMDE5LCAweDIzMDAsIDB4MjAyMSwgMHgwMTAwLCAweDA4MGMsIDB4YWY4ZSwgMHhiODEwLCAweDkzMDUsCisJMHg3MDAyLCAweGI4MTQsIDB4NzAwNiwgMHgyMDY5LCAweDE4MDAsIDB4YjgxMCwgMHg5MDA1LCAweDExNDAsCisJMHhiODE0LCAweDkwMDUsIDB4MTEyOCwgMHg3MDBiLCAweDAwZmYsIDB4NzAwZiwgMHhmZmZlLCAweDAwMjAsCisJMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDAwMDAsIDB4OTQ4NSwgMHgwMDk4LCAweDcwMTIsCisJMHgwMDRlLCAweDAwM2UsIDB4MDBkZSwgMHgwODBjLCAweGE2YWIsIDB4NzIxYSwgMHg3YTA4LCAweDcyMjIsCisJMHgyZjEwLCAweDcyMjYsIDB4MjA3MSwgMHgwMjRjLCAweDAwMmUsIDB4MDAwNSwgMHgwODBjLCAweGE2YWIsCisJMHg3MjFhLCAweDdhMDgsIDB4NzIyMiwgMHg3ODE0LCAweDcwMjYsIDB4MjA3MSwgMHgwMjRjLCAweDAwMmUsCisJMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDY5LCAweDAyMDAsCisJMHgyMDcxLCAweDAyNDAsIDB4NjAwNCwgMHg5MDhhLCAweDAwODUsIDB4MGEwYywgMHgwZGM1LCAweDkwOGEsCisJMHgwMDkyLCAweDFhMGMsIDB4MGRjNSwgMHg2MTEwLCAweDIxNTgsIDB4YjljMCwgMHgyYzc4LCAweDIwNjEsCisJMHgwMTAwLCAweDYxOWEsIDB4OTA4MiwgMHgwMDg1LCAweDAwMzMsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsCisJMHgwMGNlLCAweDAwYmUsIDB4MDAwNSwgMHhhMTdhLCAweGExODksIDB4YTE5NCwgMHhhMTc4LCAweGExNzgsCisJMHhhMTc4LCAweGExN2EsIDB4YTE3OCwgMHhhMTc4LCAweGExNzgsIDB4YTE3OCwgMHhhMTc4LCAweGExNzgsCisJMHgwODBjLCAweDBkYzUsIDB4MDQxMSwgMHg2MGMzLCAweDAwMDAsIDB4MDAyNiwgMHgwODBjLCAweDJiY2UsCisJMHgwMjI4LCAweDIwMTEsIDB4MDEwMSwgMHgyMjA0LCAweGMwYzUsIDB4MjAxMiwgMHgwMDJlLCAweDA4MDQsCisJMHhhNmJkLCAweDA0MzEsIDB4NzgwOCwgMHg3MDBhLCAweDc4MTQsIDB4NzAwZSwgMHg3MDE3LCAweGZmZmYsCisJMHg2MGMzLCAweDAwMGMsIDB4MDgwNCwgMHhhNmJkLCAweDA0YTEsIDB4NzAwMywgMHgwMDAzLCAweDcwMDcsCisJMHgwMzAwLCAweDYwYzMsIDB4MDAwNCwgMHgwODA0LCAweGE2YmQsIDB4MDAyNiwgMHgwODBjLCAweGFmOGUsCisJMHhiODEwLCAweDkwODUsIDB4ODEwMCwgMHg3MDAyLCAweGI4MTQsIDB4NzAwNiwgMHgyMDY5LCAweDE4MDAsCisJMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDcwMTMsIDB4MDAwOSwgMHgwODA0LCAweGEwZGMsCisJMHgwMDI2LCAweDA4MGMsIDB4YWY4ZSwgMHhiODEwLCAweDkwODUsIDB4ODQwMCwgMHg3MDAyLCAweGI4MTQsCisJMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDIwMDEsCisJMHgwMDk5LCAweDdhMjAsIDB4OTI5NiwgMHgwMDA1LCAweDAxMDgsIDB4YzBiYywgMHg3MDEyLCAweDA4MDQsCisJMHhhMTNlLCAweDAwMjYsIDB4MDgwYywgMHhhZjhlLCAweGI4MTAsIDB4OTA4NSwgMHg4NTAwLCAweDcwMDIsCisJMHhiODE0LCAweDcwMDYsIDB4MjA2OSwgMHgxODAwLCAweDY4N2MsIDB4NzAwYSwgMHg2ODgwLCAweDcwMGUsCisJMHgyMDAxLCAweDAwOTksIDB4N2EyMCwgMHg5Mjk2LCAweDAwMDUsIDB4MDEwOCwgMHhjMGJjLCAweDcwMTIsCisJMHgwODA0LCAweGExM2UsIDB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDJjNzgsCisJMHgyMDY5LCAweDAyMDAsIDB4MjA3MSwgMHgwMjQwLCAweDc4MDQsIDB4OTA4YSwgMHgwMDQwLCAweDBhMGMsCisJMHgwZGM1LCAweDkwOGEsIDB4MDA1NCwgMHgxYTBjLCAweDBkYzUsIDB4NzkxMCwgMHgyMTU4LCAweGI5YzAsCisJMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHg5MDgyLCAweDAwNDAsIDB4MDAzMywgMHgwMGZlLCAweDAwZWUsCisJMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweGEyMTksIDB4YTJlMCwgMHhhMmIzLCAweGE0MDIsCisJMHhhMjE3LCAweGEyMTcsIDB4YTIxNywgMHhhMjE3LCAweGEyMTcsIDB4YTIxNywgMHhhMjE3LCAweGFhZDgsCisJMHhhYWRkLCAweGFhZTIsIDB4YWFlNywgMHhhMjE3LCAweGFlZDYsIDB4YTIxNywgMHhhYWQzLCAweDA4MGMsCisJMHgwZGM1LCAweDAwOTYsIDB4NzgwYiwgMHhmZmZmLCAweDA4MGMsIDB4YTI4NCwgMHg3OTE0LCAweDIxNDgsCisJMHhhOTc4LCAweDc5NTYsIDB4YWU2NCwgMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA4LCAweDExNDgsCisJMHhhOGI0LCAweDcwMzIsIDB4YThiOCwgMHg3MDM2LCAweGE4YmMsIDB4NzAzYSwgMHhhOGMwLCAweDcwM2UsCisJMHgwMDA4LCAweDcxMzIsIDB4YTk3YywgMHg5MTg0LCAweDAwMGYsIDB4MTExOCwgMHgyMDAxLCAweDAwMDUsCisJMHgwMDQwLCAweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAxOCwgMHg5MDg0LCAweDAwMDYsCisJMHg4MDA0LCAweDIwMTAsIDB4Nzg1YywgMHg5MDg0LCAweDAwZmYsIDB4ODAwNywgMHg5MjA1LCAweDcwNDIsCisJMHhkMWFjLCAweDAxNTgsIDB4NzA0NywgMHgwMDAyLCAweDk2ODYsIDB4MDAwOCwgMHgxMTE4LCAweDA4MGMsCisJMHgxOGY3LCAweDAwMTAsIDB4MDgwYywgMHgxNzY4LCAweDAwNTAsIDB4ZDFiNCwgMHgwMTE4LCAweDcwNDcsCisJMHgwMDAxLCAweDAwMjgsIDB4NzA0NywgMHgwMDAwLCAweDkwMTYsIDB4MjIzMCwgMHgwMDEwLCAweGFhYjAsCisJMHhhZWFjLCAweDcyNmEsIDB4NzY2ZSwgMHgyMGE5LCAweDAwMDgsIDB4MjBlOSwgMHgwMDAwLCAweGE4NjAsCisJMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDIzLCAweDIwOTgsIDB4MjBhMSwgMHgwMjUyLCAweDIwNjksCisJMHgwMjAwLCAweDY4MTMsIDB4MDAxOCwgMHg0MDAzLCAweDY4MTMsIDB4MDAwOCwgMHg2MGMzLCAweDAwMjAsCisJMHg2MDE3LCAweDAwMDksIDB4MjAwMSwgMHgxYTA0LCAweDIwMDMsIDB4MDdkMCwgMHgyMDAxLCAweDFhMDMsCisJMHgyMDAzLCAweDAwMDksIDB4MDA5ZSwgMHgwMDA1LCAweDY4MTMsIDB4MDAwOCwgMHhiYThjLCAweDgyMTAsCisJMHhiOGNjLCAweGQwODQsIDB4MDE4MCwgMHgyMDAxLCAweDFhZDAsIDB4MjAwYywgMHg4MTA4LCAweDIxMDIsCisJMHgyMDAxLCAweDFhY2YsIDB4MjAxYywgMHgxMjE4LCAweDgzMTgsIDB4MjMwMiwgMHgwZWEwLCAweDc5NGEsCisJMHg3MTJlLCAweDdiNDYsIDB4NzMyYSwgMHg5Mjk0LCAweDAwZmYsIDB4YmE4ZSwgMHg4MjE3LCAweDcyMWEsCisJMHhiYTEwLCAweDkyOTUsIDB4MDYwMCwgMHg3MjAyLCAweGJhMTQsIDB4NzIwNiwgMHgyMDY5LCAweDE4MDAsCisJMHg2YTdjLCAweDcyMGEsIDB4NmE4MCwgMHg3MjBlLCAweDcwMTMsIDB4MDgyOSwgMHgyZjEwLCAweDcyMjIsCisJMHg3MDI3LCAweGZmZmYsIDB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsIDB4MDA4MSwgMHg3ODE0LCAweDIwNDgsCisJMHhhODkwLCAweDcwMDIsIDB4YTg4YywgMHg3MDA2LCAweGE4YjAsIDB4NzAwYSwgMHhhOGFjLCAweDcwMGUsCisJMHg2MGMzLCAweDAwMGMsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MDQsIDB4YTZiZCwgMHg2ODEzLCAweDAwMDgsCisJMHhiODEwLCAweDkwODUsIDB4MDUwMCwgMHg3MDAyLCAweGI4MTQsIDB4NzAwNiwgMHgyMDY5LCAweDE4MDAsCisJMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDcwMTMsIDB4MDg4OSwgMHgwODBjLCAweGE2YWIsCisJMHg3MjFhLCAweDdhMDgsIDB4NzIyMiwgMHgyZjEwLCAweDcyMjYsIDB4MjA3MSwgMHgwMjRjLCAweDAwMDUsCisJMHgwMGQ2LCAweDAwOTYsIDB4MDgwYywgMHhhM2UwLCAweDc4MTQsIDB4MjA0OCwgMHgwODBjLCAweGQwZDYsCisJMHgxMTMwLCAweDc4MTQsIDB4OTA4NCwgMHgwNzAwLCAweDgwMDcsIDB4MDAzMywgMHgwMDEwLCAweDkwMDYsCisJMHgwMDFiLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LCAweGEyZmUsIDB4YTM2NywgMHhhMzc3LCAweGEzOWQsCisJMHhhM2E5LCAweGEzYmEsIDB4YTNjMiwgMHhhMmZjLCAweDA4MGMsIDB4MGRjNSwgMHgwMDE2LCAweDAwMzYsCisJMHhhOTdjLCAweDkxOGMsIDB4MDAwMywgMHgwMTE4LCAweDkxODYsIDB4MDAwMywgMHgxMTk4LCAweGFiYTgsCisJMHg3ODI0LCAweGQwY2MsIDB4MTE2OCwgMHg3MzE2LCAweGE4OTgsIDB4NzAxYSwgMHhhODk0LCAweDcwMWUsCisJMHgwMDNlLCAweDAwMWUsIDB4MjAwMSwgMHgxOWIyLCAweDIwMDQsIDB4NjBjMiwgMHgwODA0LCAweGE2YmQsCisJMHhjM2U1LCAweDBjODgsIDB4OTE4NiwgMHgwMDAxLCAweDE5MGMsIDB4MGRjNSwgMHhhYmE4LCAweDc4MjQsCisJMHhkMGNjLCAweDE5MDQsIDB4YTM2NCwgMHg3MzE2LCAweGE4OTgsIDB4NzAxYSwgMHhhODk0LCAweDcwMWUsCisJMHhhOGE0LCAweDcwMjYsIDB4YThhYywgMHg3MDJlLCAweDIwMDksIDB4MDAxOCwgMHg5Mzg0LCAweDAzMDAsCisJMHgwNTcwLCAweGQzYzQsIDB4MDExMCwgMHhhOGFjLCAweDkxMDgsIDB4ZDNjYywgMHgwMTEwLCAweGE4YTQsCisJMHg5MTA4LCAweDY4MTAsIDB4OTA4NSwgMHgwMDEwLCAweDY4MTIsIDB4MjAxMSwgMHgwMjU4LCAweDIwZTksCisJMHgwMDAwLCAweDIyYTAsIDB4MDE1NiwgMHgyMGE5LCAweDAwMDgsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsCisJMHg5MDgwLCAweDAwMmMsIDB4MjA5OCwgMHg0MDAzLCAweDY4MTAsIDB4ODAwMCwgMHg2ODEyLCAweDIwMTEsCisJMHgwMjQwLCAweDIyYTAsIDB4MjBhOSwgMHgwMDA1LCAweDQwMDMsIDB4NjgxMCwgMHhjMGE0LCAweDY4MTIsCisJMHgwMTVlLCAweDkxODQsIDB4MDAwMywgMHgwMTE4LCAweDIwMTksIDB4MDI0NSwgMHgyMDFhLCAweDYxYzIsCisJMHgwMDNlLCAweDAwMWUsIDB4MDgwNCwgMHhhNmJkLCAweGMzZTUsIDB4MDgwNCwgMHhhMzIzLCAweDIwMTEsCisJMHgwMDA4LCAweDIwMDEsIDB4MTgwZiwgMHgyMDA0LCAweGQwYTQsIDB4MDExMCwgMHgyMDExLCAweDAwMjgsCisJMHg3ODI0LCAweGQwY2MsIDB4MTExMCwgMHg3MjE2LCAweDA0NzAsIDB4MGNlOCwgMHhjMmU1LCAweDIwMTEsCisJMHgwMzAyLCAweDAwMTYsIDB4NzgyYywgMHg3MDFhLCAweDc5MzAsIDB4NzExZSwgMHg5MTA1LCAweDAxMDgsCisJMHhjMmRkLCAweDAwMWUsIDB4NzgyNCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHg3MjE2LCAweDcwMjcsCisJMHgwMDEyLCAweDcwMmYsIDB4MDAwOCwgMHg3MDQzLCAweDcwMDAsIDB4NzA0NywgMHgwNTAwLCAweDcwNGYsCisJMHgwMDBhLCAweDIwNjksIDB4MDIwMCwgMHg2ODEzLCAweDAwMDksIDB4MjA3MSwgMHgwMjQwLCAweDcwMGIsCisJMHgyNTAwLCAweDYwYzMsIDB4MDAzMiwgMHgwODA0LCAweGE2YmQsIDB4MjAxMSwgMHgwMDI4LCAweDc4MjQsCisJMHhkMGNjLCAweDExMjgsIDB4NzIxNiwgMHg2MGMzLCAweDAwMTgsIDB4MDgwNCwgMHhhNmJkLCAweDBjZDAsCisJMHhjMmU1LCAweDIwMTEsIDB4MDEwMCwgMHg3ODI0LCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDcyMTYsCisJMHg3MDJmLCAweDAwMDgsIDB4Nzg1OCwgMHg5MDg0LCAweDAwZmYsIDB4NzAzNiwgMHg2MGMzLCAweDAwMjAsCisJMHgwODA0LCAweGE2YmQsIDB4MjAxMSwgMHgwMDA4LCAweDc4MjQsIDB4ZDBjYywgMHgwMTA4LCAweGMyZTUsCisJMHg3MjE2LCAweDBjMDgsIDB4MDAzNiwgMHg3YjE0LCAweDkzODQsIDB4ZmYwMCwgMHg3ODE2LCAweDkzODQsCisJMHgwMGZmLCAweDgwMDEsIDB4MTEzOCwgMHg3ODI0LCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDcyMTYsCisJMHgwMDNlLCAweDA4ODgsIDB4MDA0NiwgMHgyMDIxLCAweDA4MDAsIDB4MDAwNiwgMHg3ODI0LCAweGQwY2MsCisJMHgwMDBlLCAweDAxMDgsIDB4YzRlNSwgMHg3NDE2LCAweDAwNGUsIDB4NzAxZSwgMHgwMDNlLCAweDA4MTgsCisJMHgwMGQ2LCAweDY4MTMsIDB4MDAwOCwgMHhiODEwLCAweDkwODUsIDB4MDcwMCwgMHg3MDAyLCAweGI4MTQsCisJMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDc4MjQsCisJMHhkMGNjLCAweDExNjgsIDB4NzAxMywgMHgwODk4LCAweDA4MGMsIDB4YTZhYiwgMHg3MjFhLCAweDdhMDgsCisJMHg3MjIyLCAweDJmMTAsIDB4NzIyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDBkZSwgMHgwMDA1LCAweDcwMTMsCisJMHgwODg5LCAweDBjOTAsIDB4MDAxNiwgMHg3ODE0LCAweDkwODQsIDB4MDcwMCwgMHg4MDA3LCAweDAwMTMsCisJMHgwMDFlLCAweDAwMDUsIDB4YTQxMiwgMHhhNDEyLCAweGE0MTQsIDB4YTQxMiwgMHhhNDEyLCAweGE0MTIsCisJMHhhNDJlLCAweGE0MTIsIDB4MDgwYywgMHgwZGM1LCAweDc5MTQsIDB4OTE4YywgMHgwOGZmLCAweDkxOGQsCisJMHhmNjAwLCAweDc5MTYsIDB4MjAwOSwgMHgwMDAzLCAweDAwYjksIDB4MjA2OSwgMHgxODQ3LCAweDY4MDQsCisJMHhkMGJjLCAweDAxMzAsIDB4NjgyYywgMHg5MDg0LCAweDAwZmYsIDB4ODAwNywgMHg3MDMyLCAweDAwMTAsCisJMHg3MDMzLCAweDNmMDAsIDB4NjBjMywgMHgwMDAxLCAweDA4MDQsIDB4YTZiZCwgMHgyMDA5LCAweDAwMDMsCisJMHgwMDE5LCAweDcwMzMsIDB4N2YwMCwgMHgwY2IwLCAweDAwMTYsIDB4MDgwYywgMHhhZjhlLCAweDAwMWUsCisJMHhiODEwLCAweDkwODUsIDB4MDEwMCwgMHg3MDAyLCAweGI4MTQsIDB4NzAwNiwgMHgyMDY5LCAweDE4MDAsCisJMHg2YTdjLCAweDcyMGEsIDB4NmE4MCwgMHg3MjBlLCAweDcwMTMsIDB4MDg4OCwgMHg5MThkLCAweDAwMDgsCisJMHg3MTE2LCAweDA4MGMsIDB4YTZhYiwgMHg3MjFhLCAweDdhMDgsIDB4NzIyMiwgMHgyZjEwLCAweDcyMjYsCisJMHgwMDA1LCAweDAwYjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsCisJMHgwMDM2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweDE4MDAsIDB4NzE2MCwgMHg3ODEwLCAweDIwNTgsCisJMHg3NmRjLCAweDk2YjQsIDB4MDAyOCwgMHgwMTEwLCAweDczN2MsIDB4NzQ4MCwgMHgyNTAwLCAweDc2ZGMsCisJMHg5NmI0LCAweDAwMjgsIDB4MDE0MCwgMHgyMDAxLCAweDA0ZmYsIDB4NjA2MiwgMHg2MDY3LCAweGZmZmYsCisJMHg2MzZhLCAweDY0NmUsIDB4MDA1MCwgMHgyMDAxLCAweDAwZmYsIDB4OTA4NSwgMHgwNDAwLCAweDYwNjIsCisJMHg2MDY3LCAweGZmZmYsIDB4NjA2YiwgMHgwMDAwLCAweDYxNmUsIDB4YjhiOCwgMHg2MDczLCAweDA1MzAsCisJMHg2MDc3LCAweDAwMDgsIDB4Yjg4YywgMHg4MDAwLCAweDkwODQsIDB4MDBmZiwgMHhiODhlLCAweDgwMDcsCisJMHg5MDg1LCAweDAwMjAsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmIwMCwgMHg2MDgyLCAweDYwODcsCisJMHhmZmZmLCAweDc4MTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4MzgsIDB4NjA4YSwgMHhhODM0LCAweDYwOGUsCisJMHhhODQ4LCAweDYwYzYsIDB4YTg0NCwgMHg2MGNhLCAweDAwOWUsIDB4Yjg2YywgMHg2MGNlLCAweDYwYWIsCisJMHgwMDM2LCAweDYwYWYsIDB4OTVkNSwgMHg2MGQ3LCAweDAwMDAsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsCisJMHg5MDg0LCAweDAwMjgsIDB4MDEyOCwgMHg2MDlmLCAweDAwMDAsIDB4MjAwMSwgMHgwMDkyLCAweDAwNDgsCisJMHg2MDI4LCAweGMwYmQsIDB4NjAyYSwgMHg2MDlmLCAweDAwZmYsIDB4NjAyNywgMHhmZmZmLCAweDIwMDEsCisJMHgwMGIyLCAweDYwMTYsIDB4MjAwOSwgMHgwN2QwLCAweDA4MGMsIDB4ODhjOCwgMHgwMDNlLCAweDAwNGUsCisJMHgwMDVlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsCiAJMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDY2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsCi0JMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MTYwLCAweDc4MTAsIDB4MjA1OCwgMHg3NmRjLCAweDk2YjQsCi0JMHgwMDI4LCAweDAxMTAsIDB4NzM3YywgMHg3NDgwLCAweDI1MDAsIDB4NzZkYywgMHg5NmI0LCAweDAwMjgsCi0JMHgwMTQwLCAweDIwMDEsIDB4MDRmZiwgMHg2MDYyLCAweDYwNjcsIDB4ZmZmZiwgMHg2MzZhLCAweDY0NmUsCi0JMHgwMDUwLCAweDIwMDEsIDB4MDBmZiwgMHg5MDg1LCAweDA0MDAsIDB4NjA2MiwgMHg2MDY3LCAweGZmZmYsCi0JMHg2MDZiLCAweDAwMDAsIDB4NjE2ZSwgMHhiOGI4LCAweDYwNzMsIDB4MDUzMCwgMHg2MDc3LCAweDAwMDgsCi0JMHhiODhjLCAweDgwMDAsIDB4OTA4NCwgMHgwMGZmLCAweGI4OGUsIDB4ODAwNywgMHg5MDg1LCAweDAwMjAsCi0JMHg2MDdhLCAweDYwN2YsIDB4MDAwMCwgMHgyYjAwLCAweDYwODIsIDB4NjA4NywgMHhmZmZmLCAweDc4MTQsCi0JMHgwMDk2LCAweDIwNDgsIDB4YTgzOCwgMHg2MDhhLCAweGE4MzQsIDB4NjA4ZSwgMHhhODQ4LCAweDYwYzYsCi0JMHhhODQ0LCAweDYwY2EsIDB4MDA5ZSwgMHhiODZjLCAweDYwY2UsIDB4NjBhYiwgMHgwMDM2LCAweDYwYWYsCi0JMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHg5MDg0LCAweDAwMjgsCi0JMHgwMTI4LCAweDYwOWYsIDB4MDAwMCwgMHgyMDAxLCAweDAwOTIsIDB4MDA0OCwgMHg2MDI4LCAweGMwYmQsCi0JMHg2MDJhLCAweDYwOWYsIDB4MDBmZiwgMHg2MDI3LCAweGZmZmYsIDB4MjAwMSwgMHgwMGIyLCAweDYwMTYsCi0JMHgyMDA5LCAweDA3ZDAsIDB4MDgwYywgMHg4Nzk0LCAweDAwM2UsIDB4MDA0ZSwgMHgwMDVlLCAweDAwNmUsCi0JMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGU2LCAweDAwZDYsCi0JMHgwMGM2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMzYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsCi0JMHgxODAwLCAweDcxNjAsIDB4NzgxMCwgMHgyMDU4LCAweGI4YTAsIDB4MjAyOCwgMHg3NmRjLCAweGQ2YWMsCi0JMHgxMTY4LCAweDk1ODIsIDB4MDA3ZSwgMHgxMjUwLCAweDI1MDAsIDB4OTA5NCwgMHhmZjgwLCAweDExMzAsCi0JMHg5MDgwLCAweDMzYWMsIDB4MjAxNSwgMHg5Mjk0LCAweDAwZmYsIDB4MDAyMCwgMHhiOTEwLCAweGJhMTQsCi0JMHg3MzdjLCAweDc0ODAsIDB4NzBkYywgMHhkMGFjLCAweDExMzAsIDB4OTU4MiwgMHgwMDdlLCAweDEyMTgsCi0JMHg5NTg0LCAweGZmODAsIDB4MDEzOCwgMHg5MTg1LCAweDA0MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsCi0JMHg2NDZlLCAweDAwMzAsIDB4NjA2MywgMHgwNDAwLCAweDYyNjYsIDB4NjA2YiwgMHgwMDAwLCAweDYxNmUsCi0JMHhiOGI4LCAweDYwNzIsIDB4NjA3NywgMHgwMDAwLCAweGI4NjQsIDB4ZDBhNCwgMHgwMTEwLCAweDYwNzcsCi0JMHgwMDA4LCAweGI4OGMsIDB4ODAwMCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg4ZSwgMHg4MDA3LCAweDkwODUsCi0JMHgwMDIwLCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLCAweDJiMDAsIDB4NjA4MiwgMHg2MDg3LCAweGZmZmYsCi0JMHg3ODE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODM4LCAweDYwOGEsIDB4YTgzNCwgMHg2MDhlLCAweGE4NDgsCi0JMHg2MGM2LCAweGE4NDQsIDB4NjBjYSwgMHgwMDllLCAweGI4NmMsIDB4NjBjZSwgMHg2MGFiLCAweDAwMzYsCi0JMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLCAweGJhYzAsIDB4NjI5ZSwgMHgwMGY2LCAweDIwNzksCi0JMHgwMTQwLCAweDc4MDMsIDB4MDAwMCwgMHgwMGZlLCAweDIwMDksIDB4MDA5MiwgMHg2MTE2LCAweDIwMDksCi0JMHgwN2QwLCAweDA4MGMsIDB4ODc5NCwgMHgwMDNlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGU2LCAweDAwZDYsCi0JMHgwMGM2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweDE4MDAsCi0JMHg3ODEwLCAweDIwNTgsIDB4YjhhMCwgMHgyMDI4LCAweGI5MTAsIDB4YmExNCwgMHg3MzdjLCAweDc0ODAsCi0JMHg3ODIwLCAweDkwYmUsIDB4MDAwNiwgMHgwOTA0LCAweGE0NDgsIDB4OTBiZSwgMHgwMDBhLCAweDE5MDQsCi0JMHhhNDA0LCAweGI4YzAsIDB4NjA5ZSwgMHg3ODE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDA1NTgsCi0JMHhhZjkwLCAweDk3ODQsIDB4ZmYwMCwgMHg5MTA1LCAweDYwNjIsIDB4ODczZiwgMHg5Nzg0LCAweGZmMDAsCi0JMHgwMDA2LCAweDc4MTQsIDB4MjA0OCwgMHhhODc4LCAweGMwZmMsIDB4OTAwNSwgMHgwMDBlLCAweDExNjAsCi0JMHhhZjk0LCAweDg3ZmYsIDB4MDE5OCwgMHgyMDM5LCAweDAwOTgsIDB4OTcwNSwgMHg2MDcyLCAweDc4MDgsCi0JMHg2MDgyLCAweDJmMDAsIDB4NjA4NiwgMHgwMDM4LCAweDkxODUsIDB4MjIwMCwgMHg2MDYyLCAweDYwNzMsCi0JMHgwMTI5LCAweDYwNzcsIDB4MDAwMCwgMHhiOGMwLCAweDYwOWUsIDB4MDA1MCwgMHgyMDM5LCAweDAwMjksCi0JMHg5NzA1LCAweDYwNzIsIDB4MGNjMCwgMHg5MTg1LCAweDAyMDAsIDB4NjA2MiwgMHg2MDczLCAweDIwMjksCi0JMHhhODdjLCAweGQwZmMsIDB4MDExOCwgMHhhZjk0LCAweDg3ZmYsIDB4MTEyMCwgMHgyZjAwLCAweDYwODIsCi0JMHg3ODA4LCAweDYwODYsIDB4NjI2NiwgMHg2MzZhLCAweDY0NmUsIDB4NjA3NywgMHgwMDAwLCAweGI4OGMsCi0JMHg4MDAwLCAweDkwODQsIDB4MDBmZiwgMHhiODhlLCAweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsCi0JMHhhODM4LCAweDYwOGEsIDB4YTgzNCwgMHg2MDhlLCAweGE4NDgsIDB4NjBjNiwgMHhhODQ0LCAweDYwY2EsCi0JMHhiODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwgMHgwODBjLCAweGFkYTEsCi0JMHgyMDA5LCAweDA3ZDAsIDB4NjBjNCwgMHg5MDg0LCAweGZmZjAsIDB4OTAwNSwgMHgwMTEwLCAweDIwMDksCi0JMHgxYjU4LCAweDA4MGMsIDB4ODc5NCwgMHgwMDNlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMGNlLCAweDAwZGUsCi0JMHgwMGVlLCAweDAwOWUsIDB4MDBiZSwgMHgwMDA1LCAweDc4MDQsIDB4OTA4NiwgMHgwMDQwLCAweDA5MDQsCi0JMHhhNDg0LCAweDkxODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDYwNzMsCi0JMHgwODA5LCAweDYwNzcsIDB4MDAwOCwgMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLCAweGI4OGMsCi0JMHg4MDAwLCAweDkwODQsIDB4MDBmZiwgMHhiODhlLCAweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsCi0JMHgyZjAwLCAweDYwODIsIDB4NzgwOCwgMHg2MDg2LCAweDc4MTQsIDB4MjA0OCwgMHhhODM4LCAweDYwOGEsCi0JMHhhODM0LCAweDYwOGUsIDB4YTg0OCwgMHg2MGM2LCAweGE4NDQsIDB4NjBjYSwgMHhiODZjLCAweDYwY2UsCi0JMHhiYWMwLCAweDYyOWUsIDB4MDgwYywgMHhhZGExLCAweDIwMDksIDB4MDdkMCwgMHg2MGM0LCAweDkwODQsCi0JMHhmZmYwLCAweDkwMDUsIDB4MDExMCwgMHgyMDA5LCAweDFiNTgsIDB4MDgwYywgMHg4Nzk0LCAweDAwM2UsCi0JMHgwMDRlLCAweDAwNWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDA5ZSwgMHgwMGJlLCAweDAwMDUsCi0JMHg3ODE0LCAweDIwNDgsIDB4YTg3YywgMHg5MDg0LCAweDAwMDMsIDB4OTA4NiwgMHgwMDAyLCAweDA5MDQsCi0JMHhhNGEwLCAweDkxODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDYwNzMsCi0JMHgwODgwLCAweDYwNzcsIDB4MDAwOCwgMHhiODhjLCAweDgwMDAsIDB4OTA4NCwgMHgwMGZmLCAweGI4OGUsCi0JMHg4MDA3LCAweDYwN2EsIDB4NzgzOCwgMHg2MDdlLCAweDJmMDAsIDB4NjA4NiwgMHg3ODA4LCAweDYwODIsCi0JMHhhODkwLCAweDYwOGEsIDB4YTg4YywgMHg2MDhlLCAweGE4YjAsIDB4NjBjNiwgMHhhOGFjLCAweDYwY2EsCi0JMHhhOGFjLCAweDc5MzAsIDB4OTEwOCwgMHg3OTMyLCAweGE4YjAsIDB4NzkyYywgMHg5MTA5LCAweDc5MmUsCi0JMHhiODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwgMHhiYWMwLCAweDYyOWUsCi0JMHgwODBjLCAweGFkN2UsIDB4MDgwNCwgMHhhNDM0LCAweGI4Y2MsIDB4ZDA4NCwgMHgwMTQ4LCAweGI4OGMsCi0JMHg3ODE0LCAweDIwNDgsIDB4Yjg4YywgMHg3ODRhLCAweGE4MzYsIDB4MjkwMCwgMHhhODNhLCAweGIwNDYsCi0JMHg5MTg1LCAweDA2MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsIDB4NjQ2ZSwgMHg2MDczLCAweDA4MjksCi0JMHg2MDc3LCAweDAwMDAsIDB4NjBhZiwgMHg5NTc1LCAweDYwZDcsIDB4MDAwMCwgMHgwODA0LCAweGE0MTcsCi0JMHg5MTg1LCAweDA3MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsIDB4NjQ2ZSwgMHg3ODI0LCAweGQwY2MsCi0JMHg3ODI2LCAweDAxMTgsIDB4NjA3MywgMHgwODg5LCAweDAwMTAsIDB4NjA3MywgMHgwODk4LCAweDYwNzcsCisJMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MTYwLCAweDc4MTAsIDB4MjA1OCwgMHhiOGEwLCAweDIwMjgsCisJMHg3NmRjLCAweGQ2YWMsIDB4MTE2OCwgMHg5NTgyLCAweDAwN2UsIDB4MTI1MCwgMHgyNTAwLCAweDkwOTQsCisJMHhmZjgwLCAweDExMzAsIDB4OTA4MCwgMHgzM2I2LCAweDIwMTUsIDB4OTI5NCwgMHgwMGZmLCAweDAwMjAsCisJMHhiOTEwLCAweGJhMTQsIDB4NzM3YywgMHg3NDgwLCAweDcwZGMsIDB4ZDBhYywgMHgxMTMwLCAweDk1ODIsCisJMHgwMDdlLCAweDEyMTgsIDB4OTU4NCwgMHhmZjgwLCAweDAxMzgsIDB4OTE4NSwgMHgwNDAwLCAweDYwNjIsCisJMHg2MjY2LCAweDYzNmEsIDB4NjQ2ZSwgMHgwMDMwLCAweDYwNjMsIDB4MDQwMCwgMHg2MjY2LCAweDYwNmIsCisJMHgwMDAwLCAweDYxNmUsIDB4YjhiOCwgMHg2MDcyLCAweDYwNzcsIDB4MDAwMCwgMHhiODY0LCAweGQwYTQsCisJMHgwMTEwLCAweDYwNzcsIDB4MDAwOCwgMHhiODhjLCAweDgwMDAsIDB4OTA4NCwgMHgwMGZmLCAweGI4OGUsCisJMHg4MDA3LCAweDkwODUsIDB4MDAyMCwgMHg2MDdhLCAweDYwN2YsIDB4MDAwMCwgMHgyYjAwLCAweDYwODIsCisJMHg2MDg3LCAweGZmZmYsIDB4NzgxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTgzOCwgMHg2MDhhLCAweGE4MzQsCisJMHg2MDhlLCAweGE4NDgsIDB4NjBjNiwgMHhhODQ0LCAweDYwY2EsIDB4MDA5ZSwgMHhiODZjLCAweDYwY2UsCisJMHg2MGFiLCAweDAwMzYsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwgMHhiYWMwLCAweDYyOWUsCisJMHgwMGY2LCAweDIwNzksIDB4MDE0MCwgMHg3ODAzLCAweDAwMDAsIDB4MDBmZSwgMHgyMDA5LCAweDAwOTIsCisJMHg2MTE2LCAweDIwMDksIDB4MDdkMCwgMHgwODBjLCAweDg4YzgsIDB4MDAzZSwgMHgwMDRlLCAweDAwNWUsCisJMHgwMDZlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LCAweDAwOTYsCisJMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDU2LCAweDAwNDYsIDB4MDAzNiwgMHgyMDYxLCAweDAxMDAsCisJMHgyMDcxLCAweDE4MDAsIDB4NzgxMCwgMHgyMDU4LCAweGI4YTAsIDB4MjAyOCwgMHhiOTEwLCAweGJhMTQsCisJMHg3MzdjLCAweDc0ODAsIDB4NzgyMCwgMHg5MGJlLCAweDAwMDYsIDB4MDkwNCwgMHhhNjFhLCAweDkwYmUsCisJMHgwMDBhLCAweDE5MDQsIDB4YTVkNiwgMHhiOGMwLCAweDYwOWUsIDB4NzgxNCwgMHgyMDQ4LCAweGE4N2MsCisJMHhkMGZjLCAweDA1NTgsIDB4YWY5MCwgMHg5Nzg0LCAweGZmMDAsIDB4OTEwNSwgMHg2MDYyLCAweDg3M2YsCisJMHg5Nzg0LCAweGZmMDAsIDB4MDAwNiwgMHg3ODE0LCAweDIwNDgsIDB4YTg3OCwgMHhjMGZjLCAweDkwMDUsCisJMHgwMDBlLCAweDExNjAsIDB4YWY5NCwgMHg4N2ZmLCAweDAxOTgsIDB4MjAzOSwgMHgwMDk4LCAweDk3MDUsCisJMHg2MDcyLCAweDc4MDgsIDB4NjA4MiwgMHgyZjAwLCAweDYwODYsIDB4MDAzOCwgMHg5MTg1LCAweDIyMDAsCisJMHg2MDYyLCAweDYwNzMsIDB4MDEyOSwgMHg2MDc3LCAweDAwMDAsIDB4YjhjMCwgMHg2MDllLCAweDAwNTAsCisJMHgyMDM5LCAweDAwMjksIDB4OTcwNSwgMHg2MDcyLCAweDBjYzAsIDB4OTE4NSwgMHgwMjAwLCAweDYwNjIsCisJMHg2MDczLCAweDIwMjksIDB4YTg3YywgMHhkMGZjLCAweDAxMTgsIDB4YWY5NCwgMHg4N2ZmLCAweDExMjAsCisJMHgyZjAwLCAweDYwODIsIDB4NzgwOCwgMHg2MDg2LCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDYwNzcsCiAJMHgwMDAwLCAweGI4OGMsIDB4ODAwMCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg4ZSwgMHg4MDA3LCAweDYwN2EsCi0JMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDg2LCAweDc4MDgsIDB4NjA4MiwgMHhhODM4LCAweDYwOGEsCi0JMHhhODM0LCAweDYwOGUsIDB4YTg0OCwgMHg2MGM2LCAweGE4NDQsIDB4NjBjYSwgMHhiODZjLCAweDYwY2UsCi0JMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLCAweGJhYzAsIDB4NjI5ZSwgMHg3ODI0LCAweGQwY2MsCi0JMHgwMTIwLCAweDA4MGMsIDB4YWRhMSwgMHgwODA0LCAweGE0MzQsIDB4MDgwYywgMHhhZDdlLCAweDA4MDQsCi0JMHhhNDM0LCAweDdhMTAsIDB4MDBiNiwgMHgyMjU4LCAweGJhOGMsIDB4ODIxMCwgMHg5Mjk0LCAweDAwZmYsCi0JMHhiYThlLCAweDAwYmUsIDB4ODIxNywgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgxOWU5LCAweDY4NDMsCi0JMHgwMDAxLCAweDAwZGUsIDB4MDAwNSwgMHg2MGEzLCAweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDAwZjEsCi0JMHgwODBjLCAweDg3ODYsIDB4MDAwNSwgMHgwMDE2LCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweDkxODQsCi0JMHgwNjAwLCAweDkwODYsIDB4MDYwMCwgMHgwMTI4LCAweDAwODksIDB4MDgwYywgMHg4Nzg2LCAweDAwMWUsCi0JMHgwMDA1LCAweGMxZTUsIDB4MjAwMSwgMHgxODBjLCAweDIxMDIsIDB4MjAwMSwgMHgxOWVhLCAweDIwMDMsCi0JMHgwMDAwLCAweDIwMDEsIDB4MTlmMiwgMHgyMDAzLCAweDAwMDAsIDB4MGM4OCwgMHgwMDA2LCAweDYwMTQsCi0JMHg5MDg0LCAweDE4MDQsIDB4OTA4NSwgMHgwMDA5LCAweDYwMTYsIDB4MDAwZSwgMHgwMDA1LCAweDAwMTYsCi0JMHgwMGM2LCAweDAwMDYsIDB4MjA2MSwgMHgwMTAwLCAweDYxYTQsIDB4NjBhNywgMHg5NWY1LCAweDYwMTQsCi0JMHg5MDg0LCAweDE4MDQsIDB4OTA4NSwgMHgwMDA4LCAweDYwMTYsIDB4MDAwZSwgMHhhMDAxLCAweGEwMDEsCi0JMHhhMDAxLCAweDYxYTYsIDB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAwMTYsCi0JMHgwMDI2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MDgwYywgMHg3NTY5LCAweDExYzAsCi0JMHgyMDAxLCAweDFhMDUsIDB4MjAwNCwgMHg5MDA1LCAweDE1ZDAsIDB4MDgwYywgMHg3NjE2LCAweDExNjAsCi0JMHgyMDYxLCAweDAxMDAsIDB4NjAyMCwgMHhkMGI0LCAweDExMjAsIDB4NjAyNCwgMHhkMDg0LCAweDA5MGMsCi0JMHgwZGM1LCAweDA4MGMsIDB4ODc4NiwgMHgwNDU4LCAweDAwYzYsIDB4MjA2MSwgMHgxOWU5LCAweDAwYzgsCi0JMHg2OTA0LCAweDkxOTQsIDB4NDAwMCwgMHgwNTQwLCAweDA4MTEsIDB4MDgwYywgMHgyZDYyLCAweDAwYzYsCi0JMHgyMDYxLCAweDE5ZTksIDB4NjEyOCwgMHg5MTkyLCAweDAwMDgsIDB4MTI1OCwgMHg4MTA4LCAweDYxMmEsCi0JMHg2MTI0LCAweDAwY2UsIDB4ODFmZiwgMHgwMTk4LCAweDA4MGMsIDB4ODc4NiwgMHgwODBjLCAweGE1MGUsCi0JMHgwMDcwLCAweDYxMjQsIDB4OTFlNSwgMHgwMDAwLCAweDAxNDAsIDB4MDgwYywgMHhlZTBmLCAweDA4MGMsCi0JMHg4NzhmLCAweDIwMDksIDB4MDAxNCwgMHgwODBjLCAweGIxODAsIDB4MDBjZSwgMHgwMDAwLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDIwMDEsIDB4MWEwNSwgMHgyMDA0LCAweDkwMDUsCi0JMHgxZGIwLCAweDAwYzYsIDB4MjA2MSwgMHgxOWU5LCAweDYxMjgsIDB4OTE5MiwgMHgwMDAzLCAweDFlMDgsCi0JMHg4MTA4LCAweDYxMmEsIDB4MDBjZSwgMHgwODBjLCAweDg3ODYsIDB4MDgwYywgMHg1ZmU2LCAweDIwMDksCi0JMHgxODQ2LCAweDIxMTQsIDB4ODIxMCwgMHgyMjBhLCAweDBjMTAsIDB4MDA5NiwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGU2LCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweDg3OWMsIDB4MjA3MSwgMHgxOWU5LCAweDcxM2MsCi0JMHg4MWZmLCAweDA5MDQsIDB4YTYxNywgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDA4MGMsCi0JMHg3NTY5LCAweDExZTAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDIsIDB4MDgwYywgMHhhODc3LCAweDAwM2UsCi0JMHg3MTNjLCAweDIxNjAsIDB4MDgwYywgMHhlZTBmLCAweDIwMDksIDB4MDA0YSwgMHg2MjIwLCAweDkyOTYsCi0JMHgwMDA5LCAweDExMzAsIDB4NjExNCwgMHgyMTQ4LCAweGE4N2IsIDB4MDAwNiwgMHgyMDA5LCAweDAwNGEsCi0JMHgwODBjLCAweGIxODAsIDB4MDgwYywgMHg3NjE2LCAweDA4MDQsIDB4YTYxNywgMHgwODBjLCAweGE2MjMsCi0JMHgwOTA0LCAweGE2MTcsIDB4NjkwNCwgMHhkMWY0LCAweDA5MDQsIDB4YTYxZSwgMHgwODBjLCAweDJkNjIsCi0JMHgwMGM2LCAweDcwM2MsIDB4OTA2NSwgMHgwOTBjLCAweDBkYzUsIDB4NjAyMCwgMHgwMGNlLCAweDkwODYsCi0JMHgwMDA2LCAweDE1MjgsIDB4NjFjOCwgMHg2MGM0LCAweDkxMDUsIDB4MTUwOCwgMHgyMDA5LCAweDE4MGMsCi0JMHgyMTA0LCAweGQwZDQsIDB4MDFlMCwgMHg2MjE0LCAweDkyOTQsIDB4MTgwMCwgMHgxMTI4LCAweDYyMjQsCi0JMHg5Mjk0LCAweDAwMDIsIDB4MTU2MCwgMHgwMDMwLCAweGMwZDQsIDB4MjAwYSwgMHhkMGNjLCAweDAxMTAsCi0JMHgwODBjLCAweDJjOTQsIDB4NjAxNCwgMHg5MDg0LCAweGU3ZmQsIDB4OTA4NSwgMHgwMDEwLCAweDYwMTYsCi0JMHg3MDNjLCAweDIwNjAsIDB4MjAwOSwgMHgwMDQ5LCAweDA4MGMsIDB4YjE4MCwgMHgwMGMwLCAweDAwMzYsCi0JMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhODc3LCAweDAwM2UsIDB4NzEzYywgMHgyMTYwLCAweDA4MGMsCi0JMHhlZTBmLCAweDIwMDksIDB4MDA0YSwgMHg2MjIwLCAweDkyOTYsIDB4MDAwOSwgMHgxMTMwLCAweDYxMTQsCi0JMHgyMTQ4LCAweGE4N2IsIDB4MDAwNiwgMHgyMDA5LCAweDAwNGEsIDB4MDgwYywgMHhiMTgwLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwOWUsIDB4MDAwNSwgMHhkMWVjLCAweDE5MDQsCi0JMHhhNWNlLCAweDA4MDQsIDB4YTVkMCwgMHgwMGQ2LCAweDAwYzYsIDB4MDA5NiwgMHg3MDNjLCAweDkwNjUsCi0JMHgwOTBjLCAweDBkYzUsIDB4MjAwMSwgMHgwMzA2LCAweDIwMGMsIDB4OTE4NCwgMHgwMDMwLCAweDA5MDQsCi0JMHhhNmQ2LCAweDkxODQsIDB4MDA0OCwgMHg5MDg2LCAweDAwMDgsIDB4MTkwNCwgMHhhNmQ2LCAweDIwMDksCi0JMHgwMjA2LCAweDIxMDQsIDB4MjAwOSwgMHgwMjAzLCAweDIxMGMsIDB4OTEwNiwgMHgxOTA0LCAweGE2ZDYsCi0JMHgyMDA5LCAweDAyMmEsIDB4MjEwNCwgMHgyMDA5LCAweDAyMmYsIDB4MjEwYywgMHg5MTE2LCAweDkwODQsCi0JMHgwM2ZmLCAweDkxOGMsIDB4MDNmZiwgMHg5Mjk0LCAweDA0MDAsIDB4MDExMCwgMHg5MTAyLCAweDAwMzAsCi0JMHgyMDEwLCAweDIxMDAsIDB4OTIwMiwgMHgyMDA5LCAweDAyMjgsIDB4OTEwMiwgMHg5MDgyLCAweDAwMDUsCi0JMHgwMjUwLCAweDIwMDgsIDB4MjAwMSwgMHgwMTNiLCAweDIwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDgwMDQsCi0JMHg5MTAyLCAweDFhMDQsIDB4YTZkNiwgMHgyMDA5LCAweDFhODUsIDB4MjEwNCwgMHg4MDAwLCAweDAyMDgsCi0JMHgyMDBhLCAweDIwNjksIDB4MDEwMCwgMHg2OTE0LCAweDkxOGMsIDB4MTk4NCwgMHg5MThkLCAweDAwMTAsCi0JMHg2OTE2LCAweDY5YzgsIDB4MjAxMSwgMHgwMDIwLCAweDY4YzgsIDB4OTEwNiwgMHgxNWMwLCAweDgyMTEsCi0JMHgxZGQ4LCAweDIwMDEsIDB4MDMwNiwgMHgyMDAzLCAweDQ4MDAsIDB4MjAwMSwgMHgwMDlhLCAweDIwMDMsCi0JMHgwMDA0LCAweDIwMDEsIDB4MWE2YSwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgxYTczLCAweDIwMDMsCi0JMHgwMDAwLCAweDZhODgsIDB4Njk4YywgMHgyMjAwLCAweDkxMDUsIDB4MTE3MCwgMHgwMDk2LCAweDYwMTQsCi0JMHgyMDQ4LCAweGE4N2MsIDB4YzBkYywgMHhhODdlLCAweGE4ODAsIDB4YzBmYywgMHhhODgyLCAweDAwOWUsCi0JMHgyYzEwLCAweDA4MGMsIDB4MWMwOSwgMHgwMDQwLCAweDYwMTQsIDB4MjA0OCwgMHhhYTNhLCAweGE5MzYsCi0JMHg2YWM0LCAweDY5YzgsIDB4YTk0NiwgMHhhYTRhLCAweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDI0MDAsCi0JMHgwMDJlLCAweDA4MGMsIDB4MWNhMiwgMHgxOTBjLCAweDBkYzUsIDB4MDEyZSwgMHgwMDkwLCAweDIwMDksCi0JMHgxYTg2LCAweDIxMDQsIDB4ODAwMCwgMHgwMjA4LCAweDIwMGEsIDB4NjljOCwgMHgyMDExLCAweDAwMjAsCi0JMHg4MjExLCAweDFkZjAsIDB4NjhjOCwgMHg5MTA2LCAweDFkYzAsIDB4NjljNCwgMHg2OGM4LCAweDkxMDUsCi0JMHgwMTYwLCAweDY4MjQsIDB4ZDA4YywgMHgwMTEwLCAweDY4MjcsIDB4MDAwMiwgMHg3MDQ4LCAweGMwODUsCi0JMHg3MDRhLCAweDAwNzksIDB4NzA0OCwgMHhjMDg0LCAweDcwNGEsIDB4MjAwOSwgMHgwN2QwLCAweDA4MGMsCi0JMHg4Nzk0LCAweDkwMDYsIDB4MDA5ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwY2M4LCAweDAwMjYsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZTksIDB4NzA0OCwgMHhkMDg0LCAweDAxZDgsCi0JMHg3MTNjLCAweDgxZmYsIDB4MDFjMCwgMHgyMDcxLCAweDAxMDAsIDB4OTE4OCwgMHgwMDA4LCAweDIxMTQsCi0JMHg5MjhlLCAweDAwMDYsIDB4MTEzOCwgMHg3MDE0LCAweDkwODQsIDB4MTk4NCwgMHg5MDg1LCAweDAwMTIsCi0JMHg3MDE2LCAweDAwNDgsIDB4OTI4ZSwgMHgwMDA5LCAweDBkYjAsIDB4NzAxNCwgMHg5MDg0LCAweDE5ODQsCi0JMHg5MDg1LCAweDAwMTYsIDB4NzAxNiwgMHgwMGVlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZTYsCi0JMHgwMGQ2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDYwMTAsIDB4MjA1OCwgMHhiY2EwLCAweDIwNzEsIDB4MTllOSwgMHg3MDE4LCAweDIwNTgsCi0JMHg4YmZmLCAweDAxOTAsIDB4YjhhMCwgMHg5NDA2LCAweDAxMTgsIDB4Yjg1NCwgMHgyMDU4LCAweDBjYzAsCi0JMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhYzZjLCAweGFkNzAsIDB4YWU3OCwgMHgwMDllLCAweDA4MGMsCi0JMHg2ODRmLCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDAwZSwgMHgwMDRlLCAweDAwNWUsCi0JMHgwMDZlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgwODBjLCAweDllZWYsCi0JMHg3MDAzLCAweDEyMDAsIDB4NzgzOCwgMHg3MDEyLCAweDc4M2MsIDB4NzAxNiwgMHgwMGM2LCAweDc4MjAsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTE0OCwgMHg3ODEwLCAweDkwMDUsIDB4MDEzMCwgMHgwMGI2LCAweDIwNTgsCi0JMHhiODEwLCAweGI5MTQsIDB4MDBiZSwgMHgwMDIwLCAweDIwNjEsIDB4MTgwMCwgMHg2MDdjLCAweDYxODAsCi0JMHg5MDg0LCAweDAwZmYsIDB4NzAwYSwgMHg3MTBlLCAweDAwY2UsIDB4NjBjMywgMHgwMDJjLCAweDA4MDQsCi0JMHhhNGViLCAweDA4MGMsIDB4OWVlZiwgMHg3MDAzLCAweDBmMDAsIDB4NzgwOCwgMHhkMDljLCAweDAxMjgsCi0JMHhiODEwLCAweDkwODQsIDB4MDBmZiwgMHg3MDBhLCAweGI4MTQsIDB4NzAwZSwgMHg2MGMzLCAweDAwMDgsCi0JMHgwODA0LCAweGE0ZWIsIDB4MDE1NiwgMHgwODBjLCAweDlmM2EsIDB4NzAwMywgMHgwMjAwLCAweDA4MGMsCi0JMHg4ODE4LCAweDIwYTksIDB4MDAwNiwgMHgyMDExLCAweGZmZWMsIDB4MjAxOSwgMHhmZmVkLCAweDllZjAsCi0JMHgwMDAyLCAweDIzMDUsIDB4MjA3MiwgMHg4ZTcwLCAweDIyMDUsIDB4MjA3MiwgMHg4ZTcwLCAweDkzOTgsCi0JMHgwMDAyLCAweDkyOTAsIDB4MDAwMiwgMHgxZjA0LCAweGE3NzEsIDB4NjBjMywgMHgwMDFjLCAweDAxNWUsCi0JMHgwODA0LCAweGE0ZWIsIDB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4OWYxNiwgMHgwODBjLCAweDlmMjgsCi0JMHg5ZTgwLCAweDAwMDQsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTAsIDB4NzgxNCwgMHgwMDk2LCAweDIwNDgsCi0JMHhhODAwLCAweDIwNDgsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDIxLCAweDIwOTgsCi0JMHgwMDllLCAweDc4MDgsIDB4OTA4OCwgMHgwMDAyLCAweDIxYTgsIDB4OTE5MiwgMHgwMDEwLCAweDEyNTAsCi0JMHg0MDAzLCAweDkwODAsIDB4MDAwNCwgMHg4MDAzLCAweDYwYzIsIDB4MDgwYywgMHhhNGViLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MjBhOSwgMHgwMDEwLCAweDQwMDMsIDB4MDgwYywgMHhhZGE3LCAweDIwYTEsCi0JMHgwMjQwLCAweDIyYTgsIDB4NDAwMywgMHgwYzY4LCAweDA4MGMsIDB4OWVlZiwgMHg3MDAzLCAweDYyMDAsCi0JMHg3ODA4LCAweDcwMGUsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTRlYiwgMHgwMDE2LCAweDAwMjYsCi0JMHgwODBjLCAweDllZWYsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0YywgMHg3ODE0LCAweDAwOTYsCi0JMHgyMDQ4LCAweGE4MDAsIDB4MjA0OCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMjMsCi0JMHgyMDk4LCAweDAwOWUsIDB4NzgwOCwgMHg5MDg4LCAweDAwMDIsIDB4MjFhOCwgMHg0MDAzLCAweDgwMDMsCi0JMHg2MGMyLCAweDA4MGMsIDB4YTRlYiwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsCi0JMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOSwgMHg3MDBjLCAweDIwNjAsCi0JMHg4Y2ZmLCAweDAxNzgsIDB4MDgwYywgMHhkMDVlLCAweDExMTAsIDB4MDgwYywgMHhiYWUyLCAweDYwMGMsCi0JMHgwMDA2LCAweDA4MGMsIDB4ZDJjYSwgMHgwODBjLCAweGIxMDEsIDB4MDgwYywgMHhhOTFmLCAweDAwY2UsCi0JMHgwYzc4LCAweDJjMDAsIDB4NzAwZSwgMHg3MDBhLCAweDAxMmUsIDB4MDAwZSwgMHgwMGNlLCAweDAwZWUsCisJMHg2MDdmLCAweDAwMDAsIDB4YTgzOCwgMHg2MDhhLCAweGE4MzQsIDB4NjA4ZSwgMHhhODQ4LCAweDYwYzYsCisJMHhhODQ0LCAweDYwY2EsIDB4Yjg2YywgMHg2MGNlLCAweDYwYWYsIDB4OTVkNSwgMHg2MGQ3LCAweDAwMDAsCisJMHgwODBjLCAweGFmNzMsIDB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4OTA4NCwgMHhmZmYwLCAweDkwMDUsCisJMHgwMTEwLCAweDIwMDksIDB4MWI1OCwgMHgwODBjLCAweDg4YzgsIDB4MDAzZSwgMHgwMDRlLCAweDAwNWUsCisJMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHg3ODA0LCAweDkwODYsCisJMHgwMDQwLCAweDA5MDQsIDB4YTY1NiwgMHg5MTg1LCAweDAxMDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsCisJMHg2NDZlLCAweDYwNzMsIDB4MDgwOSwgMHg2MDc3LCAweDAwMDgsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsCisJMHgwMDAwLCAweGI4OGMsIDB4ODAwMCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg4ZSwgMHg4MDA3LCAweDYwN2EsCisJMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDgyLCAweDc4MDgsIDB4NjA4NiwgMHg3ODE0LCAweDIwNDgsCisJMHhhODM4LCAweDYwOGEsIDB4YTgzNCwgMHg2MDhlLCAweGE4NDgsIDB4NjBjNiwgMHhhODQ0LCAweDYwY2EsCisJMHhiODZjLCAweDYwY2UsIDB4YmFjMCwgMHg2MjllLCAweDA4MGMsIDB4YWY3MywgMHgyMDA5LCAweDA3ZDAsCisJMHg2MGM0LCAweDkwODQsIDB4ZmZmMCwgMHg5MDA1LCAweDAxMTAsIDB4MjAwOSwgMHgxYjU4LCAweDA4MGMsCisJMHg4OGM4LCAweDAwM2UsIDB4MDA0ZSwgMHgwMDVlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwOWUsCisJMHgwMGJlLCAweDAwMDUsIDB4NzgxNCwgMHgyMDQ4LCAweGE4N2MsIDB4OTA4NCwgMHgwMDAzLCAweDkwODYsCisJMHgwMDAyLCAweDA5MDQsIDB4YTY3MiwgMHg5MTg1LCAweDAxMDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsCisJMHg2NDZlLCAweDYwNzMsIDB4MDg4MCwgMHg2MDc3LCAweDAwMDgsIDB4Yjg4YywgMHg4MDAwLCAweDkwODQsCisJMHgwMGZmLCAweGI4OGUsIDB4ODAwNywgMHg2MDdhLCAweDc4MzgsIDB4NjA3ZSwgMHgyZjAwLCAweDYwODYsCisJMHg3ODA4LCAweDYwODIsIDB4YTg5MCwgMHg2MDhhLCAweGE4OGMsIDB4NjA4ZSwgMHhhOGIwLCAweDYwYzYsCisJMHhhOGFjLCAweDYwY2EsIDB4YThhYywgMHg3OTMwLCAweDkxMDgsIDB4NzkzMiwgMHhhOGIwLCAweDc5MmMsCisJMHg5MTA5LCAweDc5MmUsIDB4Yjg2YywgMHg2MGNlLCAweDYwYWYsIDB4OTVkNSwgMHg2MGQ3LCAweDAwMDAsCisJMHhiYWMwLCAweDYyOWUsIDB4MDgwYywgMHhhZjUwLCAweDA4MDQsIDB4YTYwNiwgMHhiOGNjLCAweGQwODQsCisJMHgwMTQ4LCAweGI4OGMsIDB4NzgxNCwgMHgyMDQ4LCAweGI4OGMsIDB4Nzg0YSwgMHhhODM2LCAweDI5MDAsCisJMHhhODNhLCAweGIwNDYsIDB4OTE4NSwgMHgwNjAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLCAweDY0NmUsCisJMHg2MDczLCAweDA4MjksIDB4NjA3NywgMHgwMDAwLCAweDYwYWYsIDB4OTU3NSwgMHg2MGQ3LCAweDAwMDAsCisJMHgwODA0LCAweGE1ZTksIDB4OTE4NSwgMHgwNzAwLCAweDYwNjIsIDB4NjI2NiwgMHg2MzZhLCAweDY0NmUsCisJMHg3ODI0LCAweGQwY2MsIDB4NzgyNiwgMHgwMTE4LCAweDYwNzMsIDB4MDg4OSwgMHgwMDEwLCAweDYwNzMsCisJMHgwODk4LCAweDYwNzcsIDB4MDAwMCwgMHhiODhjLCAweDgwMDAsIDB4OTA4NCwgMHgwMGZmLCAweGI4OGUsCisJMHg4MDA3LCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLCAweDJmMDAsIDB4NjA4NiwgMHg3ODA4LCAweDYwODIsCisJMHhhODM4LCAweDYwOGEsIDB4YTgzNCwgMHg2MDhlLCAweGE4NDgsIDB4NjBjNiwgMHhhODQ0LCAweDYwY2EsCisJMHhiODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsIDB4MDAwMCwgMHhiYWMwLCAweDYyOWUsCisJMHg3ODI0LCAweGQwY2MsIDB4MDEyMCwgMHgwODBjLCAweGFmNzMsIDB4MDgwNCwgMHhhNjA2LCAweDA4MGMsCisJMHhhZjUwLCAweDA4MDQsIDB4YTYwNiwgMHg3YTEwLCAweDAwYjYsIDB4MjI1OCwgMHhiYThjLCAweDgyMTAsCisJMHg5Mjk0LCAweDAwZmYsIDB4YmE4ZSwgMHgwMGJlLCAweDgyMTcsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksCisJMHgxOWU4LCAweDY4NDMsIDB4MDAwMSwgMHgwMGRlLCAweDAwMDUsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsCisJMHg5NTc1LCAweDAwZjEsIDB4MDgwYywgMHg4OGJhLCAweDAwMDUsIDB4MDAxNiwgMHgyMDAxLCAweDE4MGMsCisJMHgyMDBjLCAweDkxODQsIDB4MDYwMCwgMHg5MDg2LCAweDA2MDAsIDB4MDEyOCwgMHgwMDg5LCAweDA4MGMsCisJMHg4OGJhLCAweDAwMWUsIDB4MDAwNSwgMHhjMWU1LCAweDIwMDEsIDB4MTgwYywgMHgyMTAyLCAweDIwMDEsCisJMHgxOWU5LCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDE5ZjEsIDB4MjAwMywgMHgwMDAwLCAweDBjODgsCisJMHgwMDA2LCAweDYwMTQsIDB4OTA4NCwgMHgxODA0LCAweDkwODUsIDB4MDAwOSwgMHg2MDE2LCAweDAwMGUsCisJMHgwMDA1LCAweDAwMTYsIDB4MDBjNiwgMHgwMDA2LCAweDIwNjEsIDB4MDEwMCwgMHg2MWE0LCAweDYwYTcsCisJMHg5NWY1LCAweDYwMTQsIDB4OTA4NCwgMHgxODA0LCAweDkwODUsIDB4MDAwOCwgMHg2MDE2LCAweDAwMGUsCisJMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHg2MWE2LCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwYzYsCisJMHgwMGQ2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDA4MGMsCisJMHg3NjM3LCAweDExYzAsIDB4MjAwMSwgMHgxYTA0LCAweDIwMDQsIDB4OTAwNSwgMHgxNWQwLCAweDA4MGMsCisJMHg3NmU0LCAweDExNjAsIDB4MjA2MSwgMHgwMTAwLCAweDYwMjAsIDB4ZDBiNCwgMHgxMTIwLCAweDYwMjQsCisJMHhkMDg0LCAweDA5MGMsIDB4MGRjNSwgMHgwODBjLCAweDg4YmEsIDB4MDQ1OCwgMHgwMGM2LCAweDIwNjEsCisJMHgxOWU4LCAweDAwYzgsIDB4NjkwNCwgMHg5MTk0LCAweDQwMDAsIDB4MDU0MCwgMHgwODExLCAweDA4MGMsCisJMHgyZDQ5LCAweDAwYzYsIDB4MjA2MSwgMHgxOWU4LCAweDYxMjgsIDB4OTE5MiwgMHgwMDA4LCAweDEyNTgsCisJMHg4MTA4LCAweDYxMmEsIDB4NjEyNCwgMHgwMGNlLCAweDgxZmYsIDB4MDE5OCwgMHgwODBjLCAweDg4YmEsCisJMHgwODBjLCAweGE2ZTAsIDB4MDA3MCwgMHg2MTI0LCAweDkxZTUsIDB4MDAwMCwgMHgwMTQwLCAweDA4MGMsCisJMHhmMDk0LCAweDA4MGMsIDB4ODhjMywgMHgyMDA5LCAweDAwMTQsIDB4MDgwYywgMHhiMzUyLCAweDAwY2UsCisJMHgwMDAwLCAweDAwMmUsIDB4MDAxZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgyMDAxLCAweDFhMDQsCisJMHgyMDA0LCAweDkwMDUsIDB4MWRiMCwgMHgwMGM2LCAweDIwNjEsIDB4MTllOCwgMHg2MTI4LCAweDkxOTIsCisJMHgwMDAzLCAweDFlMDgsIDB4ODEwOCwgMHg2MTJhLCAweDAwY2UsIDB4MDgwYywgMHg4OGJhLCAweDA4MGMsCisJMHg1ZmVkLCAweDIwMDksIDB4MTg0NiwgMHgyMTE0LCAweDgyMTAsIDB4MjIwYSwgMHgwYzEwLCAweDAwOTYsCisJMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg4OGQwLCAweDIwNzEsCisJMHgxOWU4LCAweDcxM2MsIDB4ODFmZiwgMHgwOTA0LCAweGE3ZTksIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksCisJMHgwMTQwLCAweDA4MGMsIDB4NzYzNywgMHgxMWUwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAyLCAweDA4MGMsCisJMHhhYTQ5LCAweDAwM2UsIDB4NzEzYywgMHgyMTYwLCAweDA4MGMsIDB4ZjA5NCwgMHgyMDA5LCAweDAwNGEsCisJMHg2MjIwLCAweDkyOTYsIDB4MDAwOSwgMHgxMTMwLCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLCAweDAwMDYsCisJMHgyMDA5LCAweDAwNGEsIDB4MDgwYywgMHhiMzUyLCAweDA4MGMsIDB4NzZlNCwgMHgwODA0LCAweGE3ZTksCisJMHgwODBjLCAweGE3ZjUsIDB4MDkwNCwgMHhhN2U5LCAweDY5MDQsIDB4ZDFmNCwgMHgwOTA0LCAweGE3ZjAsCisJMHgwODBjLCAweDJkNDksIDB4MDBjNiwgMHg3MDNjLCAweDkwNjUsIDB4MDkwYywgMHgwZGM1LCAweDYwMjAsCisJMHgwMGNlLCAweDkwODYsIDB4MDAwNiwgMHgxNTI4LCAweDYxYzgsIDB4NjBjNCwgMHg5MTA1LCAweDE1MDgsCisJMHgyMDA5LCAweDE4MGMsIDB4MjEwNCwgMHhkMGQ0LCAweDAxZTAsIDB4NjIxNCwgMHg5Mjk0LCAweDE4MDAsCisJMHgxMTI4LCAweDYyMjQsIDB4OTI5NCwgMHgwMDAyLCAweDE1NjAsIDB4MDAzMCwgMHhjMGQ0LCAweDIwMGEsCisJMHhkMGNjLCAweDAxMTAsIDB4MDgwYywgMHgyYzdiLCAweDYwMTQsIDB4OTA4NCwgMHhlN2ZkLCAweDkwODUsCisJMHgwMDEwLCAweDYwMTYsIDB4NzAzYywgMHgyMDYwLCAweDIwMDksIDB4MDA0OSwgMHgwODBjLCAweGIzNTIsCisJMHgwMGMwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4YWE0OSwgMHgwMDNlLCAweDcxM2MsCisJMHgyMTYwLCAweDA4MGMsIDB4ZjA5NCwgMHgyMDA5LCAweDAwNGEsIDB4NjIyMCwgMHg5Mjk2LCAweDAwMDksCisJMHgxMTMwLCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLCAweDAwMDYsIDB4MjAwOSwgMHgwMDRhLCAweDA4MGMsCisJMHhiMzUyLCAweDAwMmUsIDB4MDAxZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDllLCAweDAwMDUsCisJMHhkMWVjLCAweDE5MDQsIDB4YTdhMCwgMHgwODA0LCAweGE3YTIsIDB4MDBkNiwgMHgwMGM2LCAweDAwOTYsCisJMHg3MDNjLCAweDkwNjUsIDB4MDkwYywgMHgwZGM1LCAweDIwMDEsIDB4MDMwNiwgMHgyMDBjLCAweDkxODQsCisJMHgwMDMwLCAweDA5MDQsIDB4YThhOCwgMHg5MTg0LCAweDAwNDgsIDB4OTA4NiwgMHgwMDA4LCAweDE5MDQsCisJMHhhOGE4LCAweDIwMDksIDB4MDIwNiwgMHgyMTA0LCAweDIwMDksIDB4MDIwMywgMHgyMTBjLCAweDkxMDYsCisJMHgxOTA0LCAweGE4YTgsIDB4MjAwOSwgMHgwMjJhLCAweDIxMDQsIDB4MjAwOSwgMHgwMjJmLCAweDIxMGMsCisJMHg5MTE2LCAweDkwODQsIDB4MDNmZiwgMHg5MThjLCAweDAzZmYsIDB4OTI5NCwgMHgwNDAwLCAweDAxMTAsCisJMHg5MTAyLCAweDAwMzAsIDB4MjAxMCwgMHgyMTAwLCAweDkyMDIsIDB4MjAwOSwgMHgwMjI4LCAweDkxMDIsCisJMHg5MDgyLCAweDAwMDUsIDB4MDI1MCwgMHgyMDA4LCAweDIwMDEsIDB4MDEzYiwgMHgyMDA0LCAweDgwMDQsCisJMHg4MDA0LCAweDgwMDQsIDB4OTEwMiwgMHgxYTA0LCAweGE4YTgsIDB4MjAwOSwgMHgxYTg0LCAweDIxMDQsCisJMHg4MDAwLCAweDAyMDgsIDB4MjAwYSwgMHgyMDY5LCAweDAxMDAsIDB4NjkxNCwgMHg5MThjLCAweDE5ODQsCisJMHg5MThkLCAweDAwMTAsIDB4NjkxNiwgMHg2OWM4LCAweDIwMTEsIDB4MDAyMCwgMHg2OGM4LCAweDkxMDYsCisJMHgxNWMwLCAweDgyMTEsIDB4MWRkOCwgMHgyMDAxLCAweDAzMDYsIDB4MjAwMywgMHg0ODAwLCAweDIwMDEsCisJMHgwMDlhLCAweDIwMDMsIDB4MDAwNCwgMHgyMDAxLCAweDFhNjksIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsCisJMHgxYTcyLCAweDIwMDMsIDB4MDAwMCwgMHg2YTg4LCAweDY5OGMsIDB4MjIwMCwgMHg5MTA1LCAweDExNzAsCisJMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGMwZGMsIDB4YTg3ZSwgMHhhODgwLCAweGMwZmMsCisJMHhhODgyLCAweDAwOWUsIDB4MmMxMCwgMHgwODBjLCAweDFiZTAsIDB4MDA0MCwgMHg2MDE0LCAweDIwNDgsCisJMHhhYTNhLCAweGE5MzYsIDB4NmFjNCwgMHg2OWM4LCAweGE5NDYsIDB4YWE0YSwgMHgwMTI2LCAweDAwYzYsCisJMHgyMDkxLCAweDI0MDAsIDB4MDAyZSwgMHgwODBjLCAweDFjNzksIDB4MTkwYywgMHgwZGM1LCAweDAxMmUsCisJMHgwMDkwLCAweDIwMDksIDB4MWE4NSwgMHgyMTA0LCAweDgwMDAsIDB4MDIwOCwgMHgyMDBhLCAweDY5YzgsCisJMHgyMDExLCAweDAwMjAsIDB4ODIxMSwgMHgxZGYwLCAweDY4YzgsIDB4OTEwNiwgMHgxZGMwLCAweDY5YzQsCisJMHg2OGM4LCAweDkxMDUsIDB4MDE2MCwgMHg2ODI0LCAweGQwOGMsIDB4MDExMCwgMHg2ODI3LCAweDAwMDIsCisJMHg3MDQ4LCAweGMwODUsIDB4NzA0YSwgMHgwMDc5LCAweDcwNDgsIDB4YzA4NCwgMHg3MDRhLCAweDIwMDksCisJMHgwN2QwLCAweDA4MGMsIDB4ODhjOCwgMHg5MDA2LCAweDAwOWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsCisJMHg5MDg1LCAweDAwMDEsIDB4MGNjOCwgMHgwMDI2LCAweDAwZTYsIDB4MjA3MSwgMHgxOWU4LCAweDcwNDgsCisJMHhkMDg0LCAweDAxZDgsIDB4NzEzYywgMHg4MWZmLCAweDAxYzAsIDB4MjA3MSwgMHgwMTAwLCAweDkxODgsCisJMHgwMDA4LCAweDIxMTQsIDB4OTI4ZSwgMHgwMDA2LCAweDExMzgsIDB4NzAxNCwgMHg5MDg0LCAweDE5ODQsCisJMHg5MDg1LCAweDAwMTIsIDB4NzAxNiwgMHgwMDQ4LCAweDkyOGUsIDB4MDAwOSwgMHgwZGIwLCAweDcwMTQsCisJMHg5MDg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDE2LCAweDcwMTYsIDB4MDBlZSwgMHgwMDJlLCAweDAwMDUsCisJMHgwMGI2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMDYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDEwLCAweDIwNTgsIDB4YmNhMCwgMHgyMDcxLCAweDE5ZTgsCisJMHg3MDE4LCAweDIwNTgsIDB4OGJmZiwgMHgwMTkwLCAweGI4YTAsIDB4OTQwNiwgMHgwMTE4LCAweGI4NTQsCisJMHgyMDU4LCAweDBjYzAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YWM2YywgMHhhZDcwLCAweGFlNzgsCisJMHgwMDllLCAweDA4MGMsIDB4Njg1NiwgMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwMGUsCisJMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsCisJMHgwODBjLCAweGEwYzEsIDB4NzAwMywgMHgxMjAwLCAweDc4MzgsIDB4NzAxMiwgMHg3ODNjLCAweDcwMTYsCisJMHgwMGM2LCAweDc4MjAsIDB4OTA4NiwgMHgwMDA0LCAweDExNDgsIDB4NzgxMCwgMHg5MDA1LCAweDAxMzAsCisJMHgwMGI2LCAweDIwNTgsIDB4YjgxMCwgMHhiOTE0LCAweDAwYmUsIDB4MDAyMCwgMHgyMDYxLCAweDE4MDAsCisJMHg2MDdjLCAweDYxODAsIDB4OTA4NCwgMHgwMGZmLCAweDcwMGEsIDB4NzEwZSwgMHgwMGNlLCAweDYwYzMsCisJMHgwMDJjLCAweDA4MDQsIDB4YTZiZCwgMHgwODBjLCAweGEwYzEsIDB4NzAwMywgMHgwZjAwLCAweDc4MDgsCisJMHhkMDljLCAweDAxMjgsIDB4YjgxMCwgMHg5MDg0LCAweDAwZmYsIDB4NzAwYSwgMHhiODE0LCAweDcwMGUsCisJMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhNmJkLCAweDAxNTYsIDB4MDgwYywgMHhhMTBjLCAweDcwMDMsCisJMHgwMjAwLCAweDA4MGMsIDB4ODk0YywgMHgyMGE5LCAweDAwMDYsIDB4MjAxMSwgMHhmZmVjLCAweDIwMTksCisJMHhmZmVkLCAweDllZjAsIDB4MDAwMiwgMHgyMzA1LCAweDIwNzIsIDB4OGU3MCwgMHgyMjA1LCAweDIwNzIsCisJMHg4ZTcwLCAweDkzOTgsIDB4MDAwMiwgMHg5MjkwLCAweDAwMDIsIDB4MWYwNCwgMHhhOTQzLCAweDYwYzMsCisJMHgwMDFjLCAweDAxNWUsIDB4MDgwNCwgMHhhNmJkLCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweGEwZTgsCisJMHgwODBjLCAweGEwZmEsIDB4OWU4MCwgMHgwMDA0LCAweDIwZTksIDB4MDAwMCwgMHgyMGEwLCAweDc4MTQsCisJMHgwMDk2LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsCisJMHgwMDIxLCAweDIwOTgsIDB4MDA5ZSwgMHg3ODA4LCAweDkwODgsIDB4MDAwMiwgMHgyMWE4LCAweDkxOTIsCisJMHgwMDEwLCAweDEyNTAsIDB4NDAwMywgMHg5MDgwLCAweDAwMDQsIDB4ODAwMywgMHg2MGMyLCAweDA4MGMsCisJMHhhNmJkLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDIwYTksIDB4MDAxMCwgMHg0MDAzLCAweDA4MGMsCisJMHhhZjc5LCAweDIwYTEsIDB4MDI0MCwgMHgyMmE4LCAweDQwMDMsIDB4MGM2OCwgMHgwODBjLCAweGEwYzEsCisJMHg3MDAzLCAweDYyMDAsIDB4NzgwOCwgMHg3MDBlLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweGE2YmQsCisJMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHhhMGMxLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGMsCisJMHg3ODE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODAwLCAweDIwNDgsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsCisJMHg5MDgwLCAweDAwMjMsIDB4MjA5OCwgMHgwMDllLCAweDc4MDgsIDB4OTA4OCwgMHgwMDAyLCAweDIxYTgsCisJMHg0MDAzLCAweDgwMDMsIDB4NjBjMiwgMHgwODBjLCAweGE2YmQsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCisJMHgwMGU2LCAweDAwYzYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE5ZTgsCisJMHg3MDBjLCAweDIwNjAsIDB4OGNmZiwgMHgwMTc4LCAweDA4MGMsIDB4ZDJlMCwgMHgxMTEwLCAweDA4MGMsCisJMHhiY2I2LCAweDYwMGMsIDB4MDAwNiwgMHgwODBjLCAweGQ1NGMsIDB4MDgwYywgMHhiMmQzLCAweDA4MGMsCisJMHhhYWYxLCAweDAwY2UsIDB4MGM3OCwgMHgyYzAwLCAweDcwMGUsIDB4NzAwYSwgMHgwMTJlLCAweDAwMGUsCisJMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDAxNTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsCisJMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDE2LCAweDAwMDYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDEsCisJMHgxODBjLCAweDIwMGMsIDB4OTE4YywgMHhlN2ZmLCAweDIxMDIsIDB4MjA2OSwgMHgwMTAwLCAweDIwNzksCisJMHgwMTQwLCAweDIwNzEsIDB4MTllOCwgMHg3MDI0LCAweDIwNjAsIDB4OGNmZiwgMHgwMWY4LCAweDA4MGMsCisJMHhhNmU5LCAweDZhYzAsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4ODhjMywgMHgwMGM2LCAweDIwNjEsCisJMHgwMTAwLCAweDA4MGMsIDB4YjBjYSwgMHgwMGNlLCAweDIwYTksIDB4MDFmNCwgMHgwNDYxLCAweDIwMDksCisJMHgwMDEzLCAweDA4MGMsIDB4YjM1MiwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDZlLCAweDAwY2UsCisJMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMTVlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MDAsCisJMHgyMDA0LCAweDkwOTYsIDB4MDAwMSwgMHgwZDc4LCAweDkwOTYsIDB4MDAwNCwgMHgwZDYwLCAweDA4MGMsCisJMHg4OGMzLCAweDY4MTQsIDB4OTA4NCwgMHgwMDAxLCAweDAxMTAsIDB4NjhhNywgMHg5NWY1LCAweDY4MTcsCisJMHgwMDA4LCAweDY4YzMsIDB4MDAwMCwgMHgyMDExLCAweDVmOTcsIDB4MDgwYywgMHg4ODNkLCAweDIwYTksCisJMHgwMWY0LCAweDAwMDksIDB4MDhjMCwgMHg2ODI0LCAweGQwOTQsIDB4MDE0MCwgMHg2ODI3LCAweDAwMDQsCisJMHg3ODA0LCAweDkwODQsIDB4NDAwMCwgMHgxOTBjLCAweDJkNDksIDB4MDA5MCwgMHhkMDg0LCAweDAxMTgsCisJMHg2ODI3LCAweDQwMDEsIDB4MDAxMCwgMHgxZjA0LCAweGFhMmIsIDB4NzgwNCwgMHg5MDg0LCAweDEwMDAsCisJMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJkMzksIDB4OTAwNiwgMHgwODBjLCAweDJkMzksCiAJMHgwMDA1LCAweDAxMjYsIDB4MDE1NiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNjYsCiAJMHgwMDI2LCAweDAwMTYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCi0JMHg5MThjLCAweGU3ZmYsIDB4MjEwMiwgMHgyMDY5LCAweDAxMDAsIDB4MjA3OSwgMHgwMTQwLCAweDIwNzEsCi0JMHgxOWU5LCAweDcwMjQsIDB4MjA2MCwgMHg4Y2ZmLCAweDAxZjgsIDB4MDgwYywgMHhhNTE3LCAweDZhYzAsCi0JMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHg4NzhmLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDA4MGMsCi0JMHhhZWY4LCAweDAwY2UsIDB4MjBhOSwgMHgwMWY0LCAweDA0NjEsIDB4MjAwOSwgMHgwMDEzLCAweDA4MGMsCi0JMHhiMTgwLCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsCi0JMHgwMGZlLCAweDAxNWUsIDB4MDEyZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwMCwgMHgyMDA0LCAweDkwOTYsCi0JMHgwMDAxLCAweDBkNzgsIDB4OTA5NiwgMHgwMDA0LCAweDBkNjAsIDB4MDgwYywgMHg4NzhmLCAweDY4MTQsCi0JMHg5MDg0LCAweDAwMDEsIDB4MDExMCwgMHg2OGE3LCAweDk1ZjUsIDB4NjgxNywgMHgwMDA4LCAweDY4YzMsCi0JMHgwMDAwLCAweDIwMTEsIDB4NWY5MCwgMHgwODBjLCAweDg3MDksIDB4MjBhOSwgMHgwMWY0LCAweDAwMDksCi0JMHgwOGMwLCAweDY4MjQsIDB4ZDA5NCwgMHgwMTQwLCAweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweDkwODQsCi0JMHg0MDAwLCAweDE5MGMsIDB4MmQ2MiwgMHgwMDkwLCAweGQwODQsIDB4MDExOCwgMHg2ODI3LCAweDAwMDEsCi0JMHgwMDEwLCAweDFmMDQsIDB4YTg1OSwgMHg3ODA0LCAweDkwODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsCi0JMHgwMTAwLCAweDA4MGMsIDB4MmQ1MiwgMHg5MDA2LCAweDA4MGMsIDB4MmQ1MiwgMHgwMDA1LCAweDAxMjYsCi0JMHgwMTU2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDI2LCAweDAwMTYsCi0JMHgwMDA2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHg5MThjLCAweGRiZmYsCi0JMHgyMTAyLCAweDIwNjksIDB4MDEwMCwgMHgyMDc5LCAweDAxNDAsIDB4MjA3MSwgMHgxOWU5LCAweDcwM2MsCi0JMHgyMDYwLCAweDhjZmYsIDB4MDkwNCwgMHhhOGUyLCAweDkzODYsIDB4MDAwMiwgMHgxMTI4LCAweDY4MTQsCi0JMHg5MDg0LCAweDAwMDIsIDB4MDkwNCwgMHhhOGUyLCAweDY4YWYsIDB4OTVmNSwgMHg2ODE3LCAweDAwMTAsCi0JMHgyMDA5LCAweDAwZmEsIDB4ODEwOSwgMHgxZGYwLCAweDY5YzYsIDB4NjhjYiwgMHgwMDA4LCAweDA4MGMsCi0JMHg4NzljLCAweDA4MGMsIDB4MjA1YSwgMHgyMDAxLCAweDAwMzIsIDB4NjkyMCwgMHhkMWJjLCAweDAxMzAsCi0JMHg4MDAxLCAweDFkZDgsIDB4NjkyYywgMHg5MThkLCAweDAwMDgsIDB4NjkyZSwgMHgyMGE5LCAweDAzZTgsCi0JMHg2ODI0LCAweGQwOTQsIDB4MDE0MCwgMHg2ODI3LCAweDAwMDQsIDB4NzgwNCwgMHg5MDg0LCAweDQwMDAsCi0JMHgxOTBjLCAweDJkNjIsIDB4MDA5MCwgMHhkMDhjLCAweDAxMTgsIDB4NjgyNywgMHgwMDAyLCAweDAwMTAsCi0JMHgxZjA0LCAweGE4YjgsIDB4NzgwNCwgMHg5MDg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLCAweDAxMDAsCi0JMHgwODBjLCAweDJkNTIsIDB4OTAwNiwgMHgwODBjLCAweDJkNTIsIDB4NjgyNywgMHg0MDAwLCAweDY4MjQsCi0JMHg4M2ZmLCAweDExNDAsIDB4MjAwOSwgMHgwMDQ5LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA5LCAweDAxMTAsCi0JMHgwODBjLCAweGIxODAsIDB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsCi0JMHgwMGVlLCAweDAwZmUsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNjksIDB4MTllOSwgMHg2YTA2LCAweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDE5ZTksIDB4NmEzMiwgMHgwMTJlLCAweDAwZGUsCi0JMHgwMDA1LCAweDA4MGMsIDB4YTBiMiwgMHg3MDQ3LCAweDEwMDAsIDB4MDA5OCwgMHgwODBjLCAweGEwYjIsCi0JMHg3MDQ3LCAweDQwMDAsIDB4MDA3MCwgMHgwODBjLCAweGEwYjIsIDB4NzA0NywgMHgyMDAwLCAweDAwNDgsCi0JMHgwODBjLCAweGEwYjIsIDB4NzA0NywgMHgwNDAwLCAweDAwMjAsIDB4MDgwYywgMHhhMGIyLCAweDcwNDcsCi0JMHgwMjAwLCAweDc4NTQsIDB4NzAzMiwgMHg2MGMzLCAweDAwMjAsIDB4MDgwNCwgMHhhNGViLCAweDAwZTYsCi0JMHgyMDcxLCAweDE5ZTksIDB4NzAyMCwgMHg5MDA1LCAweDAxMTAsIDB4ODAwMSwgMHg3MDIyLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA3NiwgMHgwMDY2LCAweDAwMDYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE5ZTksIDB4NzYxNCwgMHgyNjYwLCAweDI2NzgsCi0JMHgyMDM5LCAweDAwMDEsIDB4ODdmZiwgMHgwOTA0LCAweGE5YzQsIDB4OGNmZiwgMHgwOTA0LCAweGE5YzQsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxOTA0LCAweGE5YmYsIDB4ODhmZiwgMHgwMTM4LCAweDI4MDAsCi0JMHg5YzA2LCAweDE5MDQsIDB4YTliZiwgMHgyMDM5LCAweDAwMDAsIDB4MDA1MCwgMHg2MDEwLCAweDliMDYsCi0JMHgxOTA0LCAweGE5YmYsIDB4ODVmZiwgMHgwMTIwLCAweDYwNTQsIDB4OTEwNiwgMHgxOTA0LCAweGE5YmYsCi0JMHg3MDI0LCAweDljMDYsIDB4MTViMCwgMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHg5MDA1LCAweDExNjAsCi0JMHg2ODI0LCAweGQwODQsIDB4MDE0OCwgMHg2ODI3LCAweDAwMDEsIDB4MDgwYywgMHg4NzhmLCAweDA4MGMsCi0JMHhhYTQ5LCAweDcwMjcsIDB4MDAwMCwgMHgwNDI4LCAweDA4MGMsIDB4ODc4ZiwgMHg2ODIwLCAweGQwYjQsCi0JMHgwMTEwLCAweDY4YTcsIDB4OTVmNSwgMHg2ODE3LCAweDAwMDgsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsCi0JMHhhYTQ5LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsCi0JMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmQ1MiwgMHg5MDA2LCAweDA4MGMsCi0JMHgyZDUyLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsCi0JMHgwMDNlLCAweDcwMTQsIDB4OWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYxNiwgMHg3MDEwLCAweDljMzYsCi0JMHgxMTQwLCAweDJjMDAsIDB4OWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAxMiwgMHgwMDEwLCAweDcwMTMsCi0JMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsCi0JMHgyNjc4LCAweDg5ZmYsIDB4MTE2OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsCi0JMHgwODBjLCAweGNlNTQsIDB4MDExMCwgMHgwODBjLCAweGU5NDgsIDB4MDA5ZSwgMHgwODBjLCAweGIxMzQsCi0JMHgwODBjLCAweGE5MWYsIDB4ODhmZiwgMHgxMTkwLCAweDAwY2UsIDB4MDgwNCwgMHhhOTNhLCAweDJjNzgsCi0JMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHhhOTNhLCAweDkwMDYsIDB4MDEyZSwgMHgwMDBlLCAweDAwNmUsCi0JMHgwMDdlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDFiLCAweDAwMDAsCi0JMHgwMGNlLCAweDk4YzUsIDB4MDAwMSwgMHgwYzg4LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwOTYsCi0JMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsCi0JMHgxOWU5LCAweDc2MzgsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHhhYTM4LCAweDYwMjAsCi0JMHg5MDg2LCAweDAwMDYsIDB4MTkwNCwgMHhhYTMzLCAweDg3ZmYsIDB4MDEyOCwgMHgyNzAwLCAweDljMDYsCi0JMHgxOTA0LCAweGFhMzMsIDB4MDA0MCwgMHg2MDEwLCAweDliMDYsIDB4MTVlOCwgMHg4NWZmLCAweDAxMTgsCi0JMHg2MDU0LCAweDkxMDYsIDB4MTVjMCwgMHg3MDNjLCAweDljMDYsIDB4MTE2OCwgMHgwMDM2LCAweDIwMTksCi0JMHgwMDAxLCAweDA4MGMsIDB4YTg3NywgMHg3MDMzLCAweDAwMDAsIDB4OTAwNiwgMHg3MDNlLCAweDcwNDIsCi0JMHg3MDQ2LCAweDcwNGEsIDB4MDAzZSwgMHg3MDM4LCAweDljMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2M2EsCi0JMHg3MDM0LCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMzYsCi0JMHgwMDEwLCAweDcwMzcsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHg5ZjA2LCAweDAxMTAsCi0JMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsCi0JMHhjZTU0LCAweDAxMTAsIDB4MDgwYywgMHhlOTQ4LCAweDA4MGMsIDB4YjEzNCwgMHg4N2ZmLCAweDExOTgsCi0JMHgwMGNlLCAweDA4MDQsIDB4YTllNCwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LCAweGE5ZTQsCi0JMHg5MDA2LCAweDAxMmUsIDB4MDAwZSwgMHgwMDJlLCAweDAwNmUsIDB4MDBjZSwgMHgwMDllLCAweDAwZGUsCi0JMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDFiLCAweDAwMDAsIDB4MDBjZSwgMHg5N2JkLCAweDAwMDEsCi0JMHgwYzgwLCAweDAwZTYsIDB4MjA3MSwgMHgxOWU5LCAweDIwMDEsIDB4MTgwMCwgMHgyMDA0LCAweDkwODYsCi0JMHgwMDAyLCAweDExMTgsIDB4NzAwNywgMHgwMDA1LCAweDAwMTAsIDB4NzAwNywgMHgwMDAwLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOWU5LCAweDJjMTAsIDB4NzYzOCwgMHgyNjYwLCAweDI2NzgsCi0JMHg4Y2ZmLCAweDA1NDAsIDB4MjIwMCwgMHg5YzA2LCAweDE1MDgsIDB4NzAzOCwgMHg5YzM2LCAweDExMTAsCisJMHg5MThjLCAweGRiZmYsIDB4MjEwMiwgMHgyMDY5LCAweDAxMDAsIDB4MjA3OSwgMHgwMTQwLCAweDIwNzEsCisJMHgxOWU4LCAweDcwM2MsIDB4MjA2MCwgMHg4Y2ZmLCAweDA5MDQsIDB4YWFiNCwgMHg5Mzg2LCAweDAwMDIsCisJMHgxMTI4LCAweDY4MTQsIDB4OTA4NCwgMHgwMDAyLCAweDA5MDQsIDB4YWFiNCwgMHg2OGFmLCAweDk1ZjUsCisJMHg2ODE3LCAweDAwMTAsIDB4MjAwOSwgMHgwMGZhLCAweDgxMDksIDB4MWRmMCwgMHg2OWM2LCAweDY4Y2IsCisJMHgwMDA4LCAweDA4MGMsIDB4ODhkMCwgMHgwODBjLCAweDIwMzEsIDB4MjAwMSwgMHgwMDMyLCAweDY5MjAsCisJMHhkMWJjLCAweDAxMzAsIDB4ODAwMSwgMHgxZGQ4LCAweDY5MmMsIDB4OTE4ZCwgMHgwMDA4LCAweDY5MmUsCisJMHgyMGE5LCAweDAzZTgsIDB4NjgyNCwgMHhkMDk0LCAweDAxNDAsIDB4NjgyNywgMHgwMDA0LCAweDc4MDQsCisJMHg5MDg0LCAweDQwMDAsIDB4MTkwYywgMHgyZDQ5LCAweDAwOTAsIDB4ZDA4YywgMHgwMTE4LCAweDY4MjcsCisJMHgwMDAyLCAweDAwMTAsIDB4MWYwNCwgMHhhYThhLCAweDc4MDQsIDB4OTA4NCwgMHgxMDAwLCAweDAxMzgsCisJMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyZDM5LCAweDkwMDYsIDB4MDgwYywgMHgyZDM5LCAweDY4MjcsCisJMHg0MDAwLCAweDY4MjQsIDB4ODNmZiwgMHgxMTQwLCAweDIwMDksIDB4MDA0OSwgMHg2MDIwLCAweDkwODYsCisJMHgwMDA5LCAweDAxMTAsIDB4MDgwYywgMHhiMzUyLCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwNmUsCisJMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAxNWUsIDB4MDEyZSwgMHgwMDA1LCAweDAwZDYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDE5ZTgsIDB4NmEwNiwgMHgwMTJlLCAweDAwZGUsCisJMHgwMDA1LCAweDAwZDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHgxOWU4LCAweDZhMzIsCisJMHgwMTJlLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweGEyODQsIDB4NzA0NywgMHgxMDAwLCAweDAwOTgsCisJMHgwODBjLCAweGEyODQsIDB4NzA0NywgMHg0MDAwLCAweDAwNzAsIDB4MDgwYywgMHhhMjg0LCAweDcwNDcsCisJMHgyMDAwLCAweDAwNDgsIDB4MDgwYywgMHhhMjg0LCAweDcwNDcsIDB4MDQwMCwgMHgwMDIwLCAweDA4MGMsCisJMHhhMjg0LCAweDcwNDcsIDB4MDIwMCwgMHg3ODU0LCAweDcwMzIsIDB4NjBjMywgMHgwMDIwLCAweDA4MDQsCisJMHhhNmJkLCAweDAwZTYsIDB4MjA3MSwgMHgxOWU4LCAweDcwMjAsIDB4OTAwNSwgMHgwMTEwLCAweDgwMDEsCisJMHg3MDIyLCAweDAwZWUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNzYsCisJMHgwMDY2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOWU4LCAweDc2MTQsCisJMHgyNjYwLCAweDI2NzgsIDB4MjAzOSwgMHgwMDAxLCAweDg3ZmYsIDB4MDkwNCwgMHhhYjk2LCAweDhjZmYsCisJMHgwOTA0LCAweGFiOTYsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsIDB4MTkwNCwgMHhhYjkxLCAweDg4ZmYsCisJMHgwMTM4LCAweDI4MDAsIDB4OWMwNiwgMHgxOTA0LCAweGFiOTEsIDB4MjAzOSwgMHgwMDAwLCAweDAwNTAsCisJMHg2MDEwLCAweDliMDYsIDB4MTkwNCwgMHhhYjkxLCAweDg1ZmYsIDB4MDEyMCwgMHg2MDU0LCAweDkxMDYsCisJMHgxOTA0LCAweGFiOTEsIDB4NzAyNCwgMHg5YzA2LCAweDE1YjAsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsCisJMHg5MDA1LCAweDExNjAsIDB4NjgyNCwgMHhkMDg0LCAweDAxNDgsIDB4NjgyNywgMHgwMDAxLCAweDA4MGMsCisJMHg4OGMzLCAweDA4MGMsIDB4YWMxYiwgMHg3MDI3LCAweDAwMDAsIDB4MDQyOCwgMHgwODBjLCAweDg4YzMsCisJMHg2ODIwLCAweGQwYjQsIDB4MDExMCwgMHg2OGE3LCAweDk1ZjUsIDB4NjgxNywgMHgwMDA4LCAweDY4YzMsCisJMHgwMDAwLCAweDA4MGMsIDB4YWMxYiwgMHg3MDI3LCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LCAweDAxNDAsCisJMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJkMzksCisJMHg5MDA2LCAweDA4MGMsIDB4MmQzOSwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAxMTAsCisJMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHg3MDE0LCAweDljMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2MTYsCisJMHg3MDEwLCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMTIsCisJMHgwMDEwLCAweDcwMTMsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHg5ZjA2LCAweDAxMTAsCisJMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg4OWZmLCAweDExNjgsIDB4NjAwZiwgMHgwMDAwLCAweDYwMTQsCisJMHgwMDk2LCAweDIwNDgsIDB4MDgwYywgMHhkMGQ2LCAweDAxMTAsIDB4MDgwYywgMHhlYmQ0LCAweDAwOWUsCisJMHgwODBjLCAweGIzMDYsIDB4MDgwYywgMHhhYWYxLCAweDg4ZmYsIDB4MTE5MCwgMHgwMGNlLCAweDA4MDQsCisJMHhhYjBjLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4YWIwYywgMHg5MDA2LCAweDAxMmUsCisJMHgwMDBlLCAweDAwNmUsIDB4MDA3ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCisJMHg2MDFiLCAweDAwMDAsIDB4MDBjZSwgMHg5OGM1LCAweDAwMDEsIDB4MGM4OCwgMHgwMGY2LCAweDAwZTYsCisJMHgwMGQ2LCAweDAwOTYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMjYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDIwNzEsIDB4MTllOCwgMHg3NjM4LCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDA5MDQsCisJMHhhYzBhLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LCAweDE5MDQsIDB4YWMwNSwgMHg4N2ZmLCAweDAxMjgsCisJMHgyNzAwLCAweDljMDYsIDB4MTkwNCwgMHhhYzA1LCAweDAwNDAsIDB4NjAxMCwgMHg5YjA2LCAweDE1ZTgsCisJMHg4NWZmLCAweDAxMTgsIDB4NjA1NCwgMHg5MTA2LCAweDE1YzAsIDB4NzAzYywgMHg5YzA2LCAweDExNjgsCisJMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGFhNDksIDB4NzAzMywgMHgwMDAwLCAweDkwMDYsCisJMHg3MDNlLCAweDcwNDIsIDB4NzA0NiwgMHg3MDRhLCAweDAwM2UsIDB4NzAzOCwgMHg5YzM2LCAweDExMTAsCiAJMHg2NjBjLCAweDc2M2EsIDB4NzAzNCwgMHg5YzM2LCAweDExNDAsIDB4MmMwMCwgMHg5ZjM2LCAweDAxMTgsCi0JMHgyZjAwLCAweDcwMzYsIDB4MDAxMCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgyYzAwLCAweDlmMDYsCi0JMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDA0LCAweDkwODYsCi0JMHgwMDQwLCAweDA5MGMsIDB4OTdlMSwgMHg5MDg1LCAweDAwMDEsIDB4MDAyMCwgMHgyYzc4LCAweDYwMGMsCi0JMHgyMDYwLCAweDA4YjAsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMGZlLCAweDAwMDUsIDB4MDA5NiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNjYsCi0JMHgwMDI2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOWU5LCAweDc2MGMsCi0JMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwOTA0LCAweGFiMmYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsCi0JMHhiOGEwLCAweDAwYmUsIDB4OTIwNiwgMHgxOTA0LCAweGFiMmEsIDB4NzAyNCwgMHg5YzA2LCAweDE1MjAsCi0JMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHg5MDA1LCAweDA5MDQsIDB4YWIwMSwgMHgwODBjLCAweGE1MTcsCi0JMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHhhYTQ5LCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksCi0JMHgwMTQwLCAweDZiMDQsIDB4OTM4NCwgMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsCi0JMHgyZDUyLCAweDkwMDYsIDB4MDgwYywgMHgyZDUyLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsCi0JMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLCAweDcwMGMsIDB4OWMzNiwgMHgxMTEwLCAweDY2MGMsCi0JMHg3NjBlLCAweDcwMDgsIDB4OWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4OWYzNiwgMHgwMTE4LCAweDJmMDAsCi0JMHg3MDBhLCAweDAwMTAsIDB4NzAwYiwgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweDlmMDYsCi0JMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHgwODBjLCAweGQwNGQsCi0JMHgxMTgwLCAweDA4MGMsIDB4MzI2ZiwgMHgwODBjLCAweGQwNWUsIDB4MTUxOCwgMHgwODBjLCAweGJhZTIsCi0JMHgwNDAwLCAweDA4MGMsIDB4YWE0OSwgMHg2ODI0LCAweGQwODQsIDB4MDliMCwgMHg2ODI3LCAweDAwMDEsCi0JMHgwODk4LCAweDA4MGMsIDB4ZDA1ZSwgMHgxMTE4LCAweDA4MGMsIDB4YmFlMiwgMHgwMDkwLCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NCwgMHgwMTY4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDAzLCAweDE1MDgsCi0JMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZGM0LCAweDA4MGMsCi0JMHhkMDQxLCAweDA4MGMsIDB4ZDJjYSwgMHgwODBjLCAweGIxMzQsIDB4MDgwYywgMHhhOTFmLCAweDAwY2UsCi0JMHgwODA0LCAweGFhYWEsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHhhYWFhLCAweDAxMmUsCi0JMHgwMDBlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwOWUsCi0JMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LCAweDFkMjAsIDB4MDgwYywgMHhlOTQ4LCAweDBjMDgsCi0JMHgwMGQ2LCAweDA4MGMsIDB4OWYzYSwgMHg3MDAzLCAweDAyMDAsIDB4NzAwNywgMHgwMDE0LCAweDYwYzMsCi0JMHgwMDE0LCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDE5OGEsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsCi0JMHgwMjUwLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLCAweDcwMjMsIDB4MDAwNCwgMHg3MDI3LCAweDc4NzgsCi0JMHgwODBjLCAweGE0ZWIsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4OWYzYSwgMHg3MDBiLCAweDA4MDAsCi0JMHg3ODE0LCAweDkwODQsIDB4ZmYwMCwgMHg3MDBlLCAweDc4MTQsIDB4OTA4NCwgMHgwMGZmLCAweDcwMjIsCi0JMHg3ODJjLCAweDcwMjYsIDB4Nzg1OCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NSwgMHgwMjAwLCAweDcwMDIsCi0JMHg3ODU4LCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDcwMDYsIDB4NjBjMiwgMHgwODA0LCAweGE0ZWIsCi0JMHgwMGI2LCAweDAwZDYsIDB4MDAxNiwgMHgwMGQ2LCAweDJmNjgsIDB4MjAwOSwgMHgwMDM1LCAweDA4MGMsCi0JMHhkNGQ3LCAweDAwZGUsIDB4MTkwNCwgMHhhYmRkLCAweDA4MGMsIDB4OWVlZiwgMHg3MDAzLCAweDEzMDAsCi0JMHg3ODJjLCAweDA4MGMsIDB4YWNlMywgMHgyMDY4LCAweDY4MjAsIDB4OTA4NiwgMHgwMDAzLCAweDA1NjAsCi0JMHg3ODEwLCAweDIwNTgsIDB4YmFhMCwgMHgwODBjLCAweGIwNmIsIDB4MTFkOCwgMHg5Mjg2LCAweDAwN2UsCi0JMHgxMTI4LCAweDcwMGIsIDB4MDBmZiwgMHg3MDBmLCAweGZmZmUsIDB4MDQ5OCwgMHg5Mjg2LCAweDAwN2YsCi0JMHgxMTI4LCAweDcwMGIsIDB4MDBmZiwgMHg3MDBmLCAweGZmZmQsIDB4MDQ1OCwgMHg5Mjg0LCAweGZmODAsCi0JMHgwMTgwLCAweDkyODYsIDB4MDA4MCwgMHgxMTI4LCAweDcwMGIsIDB4MDBmZiwgMHg3MDBmLCAweGZmZmMsCi0JMHgwNDAwLCAweDkyZDgsIDB4MTAwMCwgMHgyYjVjLCAweGI4MTAsIDB4NzAwYSwgMHhiODE0LCAweDcwMGUsCi0JMHgwMGMwLCAweDYwOTgsIDB4NzAwZSwgMHgwMGE4LCAweDA4MGMsIDB4YjA2YiwgMHgxMTMwLCAweDc4MTAsCi0JMHgyMDU4LCAweGI4YTAsIDB4OTA4MiwgMHgwMDdlLCAweDAyNTAsIDB4MDBkNiwgMHgyMDY5LCAweDE4MWYsCi0JMHgyZDA0LCAweDcwMGEsIDB4OGQ2OCwgMHgyZDA0LCAweDcwMGUsIDB4MDBkZSwgMHgwMDEwLCAweDYwMzQsCi0JMHg3MDBlLCAweDc4MzgsIDB4NzAxMiwgMHg3ODNjLCAweDcwMTYsIDB4NjBjMywgMHgwMDBjLCAweDAwMWUsCi0JMHgwMGRlLCAweDA4MGMsIDB4YTRlYiwgMHgwMGJlLCAweDAwMDUsIDB4NzgxYiwgMHgwMDAxLCAweDc4MDMsCi0JMHgwMDA2LCAweDAwMWUsIDB4MDBkZSwgMHgwMGJlLCAweDAwMDUsIDB4NzkyYywgMHg5MTgwLCAweDAwMDgsCi0JMHgyMDBjLCAweDkxODYsIDB4MDAwNiwgMHgwMWMwLCAweDkxODYsIDB4MDAwMywgMHgwOTA0LCAweGFjNTgsCi0JMHg5MTg2LCAweDAwMDUsIDB4MDkwNCwgMHhhYzQwLCAweDkxODYsIDB4MDAwNCwgMHgwNWQ4LCAweDkxODYsCi0JMHgwMDA4LCAweDA5MDQsIDB4YWM0OSwgMHg3ODA3LCAweDAwMzcsIDB4NzgyZiwgMHgwMDAzLCAweDc4MTcsCi0JMHgxNzAwLCAweDA4MGMsIDB4YWNjMCwgMHgwMDA1LCAweDA4MGMsIDB4YWM4MSwgMHgwMGQ2LCAweDAwMjYsCi0JMHg3OTJjLCAweDIxNjgsIDB4MjAwOSwgMHg0MDAwLCAweDY4MDAsIDB4MDAwMiwgMHhhYzIxLCAweGFjMmMsCi0JMHhhYzIzLCAweGFjMmMsIDB4YWMyOCwgMHhhYzIxLCAweGFjMjEsIDB4YWMyYywgMHhhYzJjLCAweGFjMmMsCi0JMHhhYzJjLCAweGFjMjEsIDB4YWMyMSwgMHhhYzIxLCAweGFjMjEsIDB4YWMyMSwgMHhhYzJjLCAweGFjMjEsCi0JMHhhYzJjLCAweDA4MGMsIDB4MGRjNSwgMHg2ODI0LCAweGQwZTQsIDB4MDExMCwgMHhkMGNjLCAweDAxMTAsCi0JMHg5MDBlLCAweDAwMTAsIDB4MjAwOSwgMHgyMDAwLCAweDY4MmMsIDB4NzAyMiwgMHg2ODMwLCAweDcwMjYsCi0JMHgwODA0LCAweGFjN2EsIDB4MDgwYywgMHhhYzgxLCAweDAwZDYsIDB4MDAyNiwgMHg3OTJjLCAweDIxNjgsCi0JMHgyMDA5LCAweDQwMDAsIDB4NmEwMCwgMHg5Mjg2LCAweDAwMDIsIDB4MTEwOCwgMHg5MDBlLCAweDA0ZDAsCi0JMHgwODBjLCAweGFjODEsIDB4MDBkNiwgMHgwMDI2LCAweDc5MmMsIDB4MjE2OCwgMHgyMDA5LCAweDQwMDAsCi0JMHgwNDg4LCAweDA0YjksIDB4MDBkNiwgMHgwMDI2LCAweDc5MmMsIDB4MjE2OCwgMHgyMDA5LCAweDQwMDAsCi0JMHg5Mjg2LCAweDAwMDUsIDB4MDExOCwgMHg5Mjg2LCAweDAwMDIsIDB4MTEwOCwgMHg5MDBlLCAweDA0MTAsCi0JMHgwNDQxLCAweDAwZDYsIDB4MDAyNiwgMHg3OTJjLCAweDIxNjgsIDB4NjgxNCwgMHg2OTI0LCAweGMxODUsCi0JMHg2OTI2LCAweDAwOTYsIDB4MjA0OCwgMHhhOWFjLCAweGE4MzQsIDB4OTExMiwgMHhhOWIwLCAweGE4MzgsCi0JMHgwMDllLCAweDkxMDMsIDB4NzAyMiwgMHg3MjI2LCAweDc5MmMsIDB4OTE4MCwgMHgwMDAwLCAweDIwMDQsCi0JMHg5MDhlLCAweDAwMDIsIDB4MDEzMCwgMHg5MDhlLCAweDAwMDQsIDB4MDExOCwgMHgyMDA5LCAweDQwMDAsCi0JMHgwMDA4LCAweDkwMGUsIDB4NzEyYSwgMHg2MGMzLCAweDAwMTgsIDB4MDAyZSwgMHgwMGRlLCAweDA4MDQsCi0JMHhhNGViLCAweDAwYjYsIDB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MDA2NiwgMHgwODBjLCAweDlmM2EsCi0JMHg5MDA2LCAweDcwMDMsIDB4MDIwMCwgMHg3OTM4LCAweDcxMGEsIDB4NzkzYywgMHg3MTBlLCAweDc4MTAsCi0JMHgyMDU4LCAweGI4YTAsIDB4MDgwYywgMHhiMDZiLCAweDExMTgsIDB4OTA5MiwgMHgwMDdlLCAweDAyNjgsCi0JMHgwMGQ2LCAweDIwNjksIDB4MTgxZiwgMHgyZDJjLCAweDhkNjgsIDB4MmQzNCwgMHg5MGQ4LCAweDEwMDAsCi0JMHgyYjVjLCAweGJiMTAsIDB4YmMxNCwgMHgwMGRlLCAweDAwMjgsIDB4OTAxZSwgMHg2NDk4LCAweDIwMjksCi0JMHgwMDAwLCAweDY2MzQsIDB4NzgyYywgMHg5MDgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDMsCi0JMHgxMTI4LCAweDc1MTIsIDB4NzYxNiwgMHg3MzFhLCAweDc0MWUsIDB4MDAyMCwgMHg3MzEyLCAweDc0MTYsCi0JMHg3NTFhLCAweDc2MWUsIDB4MDA2ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwODBjLCAweDlmM2EsIDB4NzAwMywgMHgwMTAwLCAweDc4MmMsIDB4NzAwYSwgMHg3ODE0LCAweDcwMGUsCi0JMHg3MDBlLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweGE0ZWIsIDB4MDgwYywgMHg5ZWU2LCAweDcwMDMsCi0JMHgxNDAwLCAweDc4MzgsIDB4NzAwYSwgMHgwMDc5LCAweDc4M2MsIDB4NzAwZSwgMHg3ODJjLCAweDcwMTIsCi0JMHg3ODMwLCAweDcwMTYsIDB4NzgzNCwgMHg5MDg0LCAweDAwZmYsIDB4ODAwNywgMHg3MDFhLCAweDYwYzMsCi0JMHgwMDEwLCAweDA4MDQsIDB4YTRlYiwgMHgwMGU2LCAweDIwNzEsIDB4MDI0MCwgMHgwMDA2LCAweDAwZjYsCi0JMHgyMDc4LCAweDc4MTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4Y2MsIDB4ZDA4NCwgMHgwMTIwLCAweDc4NDQsCi0JMHg3MDJhLCAweDc4NDgsIDB4NzAyZSwgMHgwMGJlLCAweDAwZmUsIDB4MDAwZSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwODBjLCAweDlmMzEsIDB4NzAwMywgMHgwMTAwLCAweDc4MmMsIDB4NzAwYSwgMHg3ODE0LCAweDcwMGUsCi0JMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhNGViLCAweDAwMjEsIDB4NjBjMywgMHgwMDAwLCAweDA4MDQsCi0JMHhhNGViLCAweDAwZDYsIDB4MDgwYywgMHhhZGJjLCAweGI4MTAsIDB4OTA4NSwgMHgwMzAwLCAweDcwMDIsCi0JMHhiODE0LCAweDcwMDYsIDB4MjA2OSwgMHgxODAwLCAweDY4N2MsIDB4NzAwYSwgMHg2ODgwLCAweDcwMGUsCi0JMHg3MDEzLCAweDA4MTksIDB4MDgwYywgMHhhNGQ5LCAweDcyMWEsIDB4MmYxMCwgMHg3MjIyLCAweDdhMDgsCi0JMHg3MjI2LCAweDIwNzEsIDB4MDI0YywgMHgwMGRlLCAweDAwMDUsIDB4MDBhOSwgMHg3OTE0LCAweDcxMmEsCi0JMHg2MGMzLCAweDAwMDAsIDB4NjBhNywgMHg5NTc1LCAweDAwMjYsIDB4MDgwYywgMHgyYmU3LCAweDAyMjgsCi0JMHgyMDExLCAweDAxMDEsIDB4MjIwNCwgMHhjMGM1LCAweDIwMTIsIDB4MDAyZSwgMHgwODBjLCAweGE1MGUsCi0JMHgwODBjLCAweDg3ODYsIDB4MDAwNSwgMHgwMDM2LCAweDAwOTYsIDB4MDBkNiwgMHgwMGU2LCAweDc4NTgsCi0JMHgyMDQ4LCAweGFhN2MsIDB4OTI5NiwgMHgwMGMwLCAweDkyOTQsIDB4MDBmZCwgMHhhYTdlLCAweGFhODAsCi0JMHg5Mjk0LCAweDAzMDAsIDB4YWE4MiwgMHhhOTZjLCAweDkxOTQsIDB4MDBmZiwgMHhhYjc0LCAweDkzODQsCi0JMHgwMGZmLCAweDkwOGQsIDB4YzIwMCwgMHhhOTZlLCAweDkzODQsIDB4ZmYwMCwgMHg5MjE1LCAweGFhNzYsCi0JMHhhODcwLCAweGFhNzgsIDB4YTg3YSwgMHhhYTcyLCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsCi0JMHhhZGJjLCAweDAwZGUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHgyMGE5LCAweDAwMGEsCi0JMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsIDB4MjA5OCwgMHg0MDAzLCAweDYwYTMsCi0JMHgwMDM1LCAweGFhNjgsIDB4OTI5NCwgMHg3MDAwLCAweDkyODYsIDB4MzAwMCwgMHgwMTEwLCAweDYwYTMsCi0JMHgwMDM3LCAweDAwZWUsIDB4MDBkZSwgMHgwMDllLCAweDAwM2UsIDB4MDAwNSwgMHg5MDBlLCAweDc4MTQsCi0JMHgwMDk2LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDAxYzAsIDB4OTA4NCwgMHgwMDAzLCAweDExYTgsCi0JMHgyMDAxLCAweDE4MGMsIDB4MjAwNCwgMHhkMGJjLCAweDAxODAsIDB4NzgyNCwgMHhkMGNjLCAweDExNjgsCi0JMHhkMGM0LCAweDExNTgsIDB4YThhOCwgMHg5MDA1LCAweDExNDAsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCi0JMHhjMWQ1LCAweDIxMDIsIDB4MjAwOSwgMHgxOWI0LCAweDIxMGMsIDB4MDA5ZSwgMHg5MThkLCAweDAwOTIsCi0JMHgwMDEwLCAweDIwMDksIDB4MDA5NiwgMHg2MGFiLCAweDAwMzYsIDB4NjExNiwgMHgwMDA1LCAweDIwMDksCi0JMHgwMDA5LCAweDAwYTAsIDB4MjAwOSwgMHgwMDBhLCAweDAwODgsIDB4MjAwOSwgMHgwMDBiLCAweDAwNzAsCi0JMHgyMDA5LCAweDAwMGMsIDB4MDA1OCwgMHgyMDA5LCAweDAwMGQsIDB4MDA0MCwgMHgyMDA5LCAweDAwMGUsCi0JMHgwMDI4LCAweDIwMDksIDB4MDAwZiwgMHgwMDEwLCAweDIwMDksIDB4MDAwOCwgMHg2OTEyLCAweDAwMDUsCi0JMHgwODBjLCAweDllZWYsIDB4MDAxNiwgMHgwMDI2LCAweDAwOTYsIDB4MDBkNiwgMHg3ODE0LCAweDIwNDgsCi0JMHg3MDEzLCAweDAxMzgsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4OTA4NCwgMHgwMDI4LCAweDExMzgsCi0JMHgyMDAxLCAweDE5N2QsIDB4MjAwNCwgMHg5MDg2LCAweGFhYWEsIDB4MTkwNCwgMHhhZTYxLCAweDcwMDMsCi0JMHg1NDAwLCAweDAwYzYsIDB4MjA2MSwgMHgxODAwLCAweDYwN2MsIDB4OTA4NCwgMHgwMGZmLCAweGE5OTgsCi0JMHg4MTBmLCAweDkxOGMsIDB4ZmYwMCwgMHg5MTA1LCAweDcwMGEsIDB4NjA4MCwgMHg3MDBlLCAweGE5OTgsCi0JMHg5MThjLCAweGZmMDAsIDB4NzExMiwgMHgyMGE5LCAweDAwMDQsIDB4MjAwOSwgMHgxODA1LCAweDJlMTAsCi0JMHg5MjkwLCAweDAwMDYsIDB4MjEwNCwgMHgyMDEyLCAweDgxMDgsIDB4ODIxMCwgMHgxZjA0LCAweGFkZjIsCi0JMHgyMGE5LCAweDAwMDQsIDB4MjAwOSwgMHgxODAxLCAweDIxMDQsIDB4MjAxMiwgMHg4MTA4LCAweDgyMTAsCi0JMHgxZjA0LCAweGFkZmMsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDI5LCAweDIwOTgsCi0JMHgyMDA5LCAweDAwMDYsIDB4MjBhOSwgMHgwMDAxLCAweDQwMDIsIDB4ODAwNywgMHgyMDEyLCAweDgyMTAsCi0JMHg4MTA5LCAweDFkYzAsIDB4MDBkNiwgMHgyMDY5LCAweDAyMDAsIDB4MDgwYywgMHhhZGE3LCAweDAwZGUsCi0JMHgyMDcxLCAweDAyNDAsIDB4MjAxMSwgMHgwMjQwLCAweDIwMDksIDB4MDAwMiwgMHgyMGE5LCAweDAwMDEsCi0JMHg0MDAyLCAweDgwMDcsIDB4MjAxMiwgMHg4MjEwLCAweDgxMDksIDB4MWRjMCwgMHgyMDA5LCAweDAwMDgsCisJMHgyZjAwLCAweDcwMzYsIDB4MDAxMCwgMHg3MDM3LCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsCisJMHg5ZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDYwMTQsCisJMHgyMDQ4LCAweDA4MGMsIDB4ZDBkNiwgMHgwMTEwLCAweDA4MGMsIDB4ZWJkNCwgMHgwODBjLCAweGIzMDYsCisJMHg4N2ZmLCAweDExOTgsIDB4MDBjZSwgMHgwODA0LCAweGFiYjYsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsCisJMHgwODA0LCAweGFiYjYsIDB4OTAwNiwgMHgwMTJlLCAweDAwMGUsIDB4MDAyZSwgMHgwMDZlLCAweDAwY2UsCisJMHgwMDllLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NjAxYiwgMHgwMDAwLCAweDAwY2UsCisJMHg5N2JkLCAweDAwMDEsIDB4MGM4MCwgMHgwMGU2LCAweDIwNzEsIDB4MTllOCwgMHgyMDAxLCAweDE4MDAsCisJMHgyMDA0LCAweDkwODYsIDB4MDAwMiwgMHgxMTE4LCAweDcwMDcsIDB4MDAwNSwgMHgwMDEwLCAweDcwMDcsCisJMHgwMDAwLCAweDAwZWUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMjYsCisJMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOCwgMHgyYzEwLCAweDc2MzgsCisJMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwNTQwLCAweDIyMDAsIDB4OWMwNiwgMHgxNTA4LCAweDcwMzgsCisJMHg5YzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjNhLCAweDcwMzQsIDB4OWMzNiwgMHgxMTQwLCAweDJjMDAsCisJMHg5ZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDM2LCAweDAwMTAsIDB4NzAzNywgMHgwMDAwLCAweDY2MGMsCisJMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsCisJMHg2MDA0LCAweDkwODYsIDB4MDA0MCwgMHgwOTBjLCAweDk5YTUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMjAsCisJMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwOGIwLCAweDAxMmUsIDB4MDAwZSwgMHgwMDJlLCAweDAwNmUsCisJMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwOTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsCisJMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsCisJMHgxOWU4LCAweDc2MGMsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHhhZDAxLCAweDYwMTAsCisJMHgwMGI2LCAweDIwNTgsIDB4YjhhMCwgMHgwMGJlLCAweDkyMDYsIDB4MTkwNCwgMHhhY2ZjLCAweDcwMjQsCisJMHg5YzA2LCAweDE1MjAsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4OTAwNSwgMHgwOTA0LCAweGFjZDMsCisJMHgwODBjLCAweGE2ZTksIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YWMxYiwgMHg3MDI3LCAweDAwMDAsCisJMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsCisJMHgwMTAwLCAweDA4MGMsIDB4MmQzOSwgMHg5MDA2LCAweDA4MGMsIDB4MmQzOSwgMHgyMDY5LCAweDAxMDAsCisJMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHg3MDBjLCAweDljMzYsCisJMHgxMTEwLCAweDY2MGMsIDB4NzYwZSwgMHg3MDA4LCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsCisJMHgwMTE4LCAweDJmMDAsIDB4NzAwYSwgMHgwMDEwLCAweDcwMGIsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsCisJMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsCisJMHgwODBjLCAweGQyY2YsIDB4MTE4MCwgMHgwODBjLCAweDMyNzksIDB4MDgwYywgMHhkMmUwLCAweDE1MTgsCisJMHgwODBjLCAweGJjYjYsIDB4MDQwMCwgMHgwODBjLCAweGFjMWIsIDB4NjgyNCwgMHhkMDg0LCAweDA5YjAsCisJMHg2ODI3LCAweDAwMDEsIDB4MDg5OCwgMHgwODBjLCAweGQyZTAsIDB4MTExOCwgMHgwODBjLCAweGJjYjYsCisJMHgwMDkwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGQwZDYsIDB4MDE2OCwgMHg2MDIwLCAweDkwODYsCisJMHgwMDAzLCAweDE1MDgsIDB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsCisJMHg2ZTkyLCAweDA4MGMsIDB4ZDJjMywgMHgwODBjLCAweGQ1NGMsIDB4MDgwYywgMHhiMzA2LCAweDA4MGMsCisJMHhhYWYxLCAweDAwY2UsIDB4MDgwNCwgMHhhYzdjLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsCisJMHhhYzdjLCAweDAxMmUsIDB4MDAwZSwgMHgwMDJlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsCisJMHgwMGZlLCAweDAwOWUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxZDIwLCAweDA4MGMsCisJMHhlYmQ0LCAweDBjMDgsIDB4MDBkNiwgMHgwODBjLCAweGExMGMsIDB4NzAwMywgMHgwMjAwLCAweDcwMDcsCisJMHgwMDE0LCAweDYwYzMsIDB4MDAxNCwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxOTg5LCAweDIwZTksCisJMHgwMDAwLCAweDIwYTEsIDB4MDI1MCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMywgMHg3MDIzLCAweDAwMDQsCisJMHg3MDI3LCAweDc4NzgsIDB4MDgwYywgMHhhNmJkLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweGExMGMsCisJMHg3MDBiLCAweDA4MDAsIDB4NzgxNCwgMHg5MDg0LCAweGZmMDAsIDB4NzAwZSwgMHg3ODE0LCAweDkwODQsCisJMHgwMGZmLCAweDcwMjIsIDB4NzgyYywgMHg3MDI2LCAweDc4NTgsIDB4OTA4NCwgMHgwMGZmLCAweDkwODUsCisJMHgwMjAwLCAweDcwMDIsIDB4Nzg1OCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg3MDA2LCAweDYwYzIsCisJMHgwODA0LCAweGE2YmQsIDB4MDBiNiwgMHgwMGQ2LCAweDAwMTYsIDB4MDBkNiwgMHgyZjY4LCAweDIwMDksCisJMHgwMDM1LCAweDA4MGMsIDB4ZDc1OSwgMHgwMGRlLCAweDE5MDQsIDB4YWRhZiwgMHgwODBjLCAweGEwYzEsCisJMHg3MDAzLCAweDEzMDAsIDB4NzgyYywgMHgwODBjLCAweGFlYjUsIDB4MjA2OCwgMHg2ODIwLCAweDkwODYsCisJMHgwMDAzLCAweDA1NjAsIDB4NzgxMCwgMHgyMDU4LCAweGJhYTAsIDB4MDgwYywgMHhiMjNkLCAweDExZDgsCisJMHg5Mjg2LCAweDAwN2UsIDB4MTEyOCwgMHg3MDBiLCAweDAwZmYsIDB4NzAwZiwgMHhmZmZlLCAweDA0OTgsCisJMHg5Mjg2LCAweDAwN2YsIDB4MTEyOCwgMHg3MDBiLCAweDAwZmYsIDB4NzAwZiwgMHhmZmZkLCAweDA0NTgsCisJMHg5Mjg0LCAweGZmODAsIDB4MDE4MCwgMHg5Mjg2LCAweDAwODAsIDB4MTEyOCwgMHg3MDBiLCAweDAwZmYsCisJMHg3MDBmLCAweGZmZmMsIDB4MDQwMCwgMHg5MmQ4LCAweDEwMDAsIDB4MmI1YywgMHhiODEwLCAweDcwMGEsCisJMHhiODE0LCAweDcwMGUsIDB4MDBjMCwgMHg2MDk4LCAweDcwMGUsIDB4MDBhOCwgMHgwODBjLCAweGIyM2QsCisJMHgxMTMwLCAweDc4MTAsIDB4MjA1OCwgMHhiOGEwLCAweDkwODIsIDB4MDA3ZSwgMHgwMjUwLCAweDAwZDYsCisJMHgyMDY5LCAweDE4MWYsIDB4MmQwNCwgMHg3MDBhLCAweDhkNjgsIDB4MmQwNCwgMHg3MDBlLCAweDAwZGUsCisJMHgwMDEwLCAweDYwMzQsIDB4NzAwZSwgMHg3ODM4LCAweDcwMTIsIDB4NzgzYywgMHg3MDE2LCAweDYwYzMsCisJMHgwMDBjLCAweDAwMWUsIDB4MDBkZSwgMHgwODBjLCAweGE2YmQsIDB4MDBiZSwgMHgwMDA1LCAweDc4MWIsCisJMHgwMDAxLCAweDc4MDMsIDB4MDAwNiwgMHgwMDFlLCAweDAwZGUsIDB4MDBiZSwgMHgwMDA1LCAweDc5MmMsCisJMHg5MTgwLCAweDAwMDgsIDB4MjAwYywgMHg5MTg2LCAweDAwMDYsIDB4MDFjMCwgMHg5MTg2LCAweDAwMDMsCisJMHgwOTA0LCAweGFlMmEsIDB4OTE4NiwgMHgwMDA1LCAweDA5MDQsIDB4YWUxMiwgMHg5MTg2LCAweDAwMDQsCisJMHgwNWQ4LCAweDkxODYsIDB4MDAwOCwgMHgwOTA0LCAweGFlMWIsIDB4NzgwNywgMHgwMDM3LCAweDc4MmYsCisJMHgwMDAzLCAweDc4MTcsIDB4MTcwMCwgMHgwODBjLCAweGFlOTIsIDB4MDAwNSwgMHgwODBjLCAweGFlNTMsCisJMHgwMGQ2LCAweDAwMjYsIDB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHg2ODAwLCAweDAwMDIsCisJMHhhZGYzLCAweGFkZmUsIDB4YWRmNSwgMHhhZGZlLCAweGFkZmEsIDB4YWRmMywgMHhhZGYzLCAweGFkZmUsCisJMHhhZGZlLCAweGFkZmUsIDB4YWRmZSwgMHhhZGYzLCAweGFkZjMsIDB4YWRmMywgMHhhZGYzLCAweGFkZjMsCisJMHhhZGZlLCAweGFkZjMsIDB4YWRmZSwgMHgwODBjLCAweDBkYzUsIDB4NjgyNCwgMHhkMGU0LCAweDAxMTAsCisJMHhkMGNjLCAweDAxMTAsIDB4OTAwZSwgMHgwMDEwLCAweDIwMDksIDB4MjAwMCwgMHg2ODJjLCAweDcwMjIsCisJMHg2ODMwLCAweDcwMjYsIDB4MDgwNCwgMHhhZTRjLCAweDA4MGMsIDB4YWU1MywgMHgwMGQ2LCAweDAwMjYsCisJMHg3OTJjLCAweDIxNjgsIDB4MjAwOSwgMHg0MDAwLCAweDZhMDAsIDB4OTI4NiwgMHgwMDAyLCAweDExMDgsCisJMHg5MDBlLCAweDA0ZDAsIDB4MDgwYywgMHhhZTUzLCAweDAwZDYsIDB4MDAyNiwgMHg3OTJjLCAweDIxNjgsCisJMHgyMDA5LCAweDQwMDAsIDB4MDQ4OCwgMHgwNGI5LCAweDAwZDYsIDB4MDAyNiwgMHg3OTJjLCAweDIxNjgsCisJMHgyMDA5LCAweDQwMDAsIDB4OTI4NiwgMHgwMDA1LCAweDAxMTgsIDB4OTI4NiwgMHgwMDAyLCAweDExMDgsCisJMHg5MDBlLCAweDA0MTAsIDB4MDQ0MSwgMHgwMGQ2LCAweDAwMjYsIDB4NzkyYywgMHgyMTY4LCAweDY4MTQsCisJMHg2OTI0LCAweGMxODUsIDB4NjkyNiwgMHgwMDk2LCAweDIwNDgsIDB4YTlhYywgMHhhODM0LCAweDkxMTIsCisJMHhhOWIwLCAweGE4MzgsIDB4MDA5ZSwgMHg5MTAzLCAweDcwMjIsIDB4NzIyNiwgMHg3OTJjLCAweDkxODAsCisJMHgwMDAwLCAweDIwMDQsIDB4OTA4ZSwgMHgwMDAyLCAweDAxMzAsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMTgsCisJMHgyMDA5LCAweDQwMDAsIDB4MDAwOCwgMHg5MDBlLCAweDcxMmEsIDB4NjBjMywgMHgwMDE4LCAweDAwMmUsCisJMHgwMGRlLCAweDA4MDQsIDB4YTZiZCwgMHgwMGI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNjYsCisJMHgwODBjLCAweGExMGMsIDB4OTAwNiwgMHg3MDAzLCAweDAyMDAsIDB4NzkzOCwgMHg3MTBhLCAweDc5M2MsCisJMHg3MTBlLCAweDc4MTAsIDB4MjA1OCwgMHhiOGEwLCAweDA4MGMsIDB4YjIzZCwgMHgxMTE4LCAweDkwOTIsCisJMHgwMDdlLCAweDAyNjgsIDB4MDBkNiwgMHgyMDY5LCAweDE4MWYsIDB4MmQyYywgMHg4ZDY4LCAweDJkMzQsCisJMHg5MGQ4LCAweDEwMDAsIDB4MmI1YywgMHhiYjEwLCAweGJjMTQsIDB4MDBkZSwgMHgwMDI4LCAweDkwMWUsCisJMHg2NDk4LCAweDIwMjksIDB4MDAwMCwgMHg2NjM0LCAweDc4MmMsIDB4OTA4MCwgMHgwMDA4LCAweDIwMDQsCisJMHg5MDg2LCAweDAwMDMsIDB4MTEyOCwgMHg3NTEyLCAweDc2MTYsIDB4NzMxYSwgMHg3NDFlLCAweDAwMjAsCisJMHg3MzEyLCAweDc0MTYsIDB4NzUxYSwgMHg3NjFlLCAweDAwNmUsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsCisJMHgwMGJlLCAweDAwMDUsIDB4MDgwYywgMHhhMTBjLCAweDcwMDMsIDB4MDEwMCwgMHg3ODJjLCAweDcwMGEsCisJMHg3ODE0LCAweDcwMGUsIDB4NzAwZSwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhNmJkLCAweDA4MGMsCisJMHhhMGI4LCAweDcwMDMsIDB4MTQwMCwgMHg3ODM4LCAweDcwMGEsIDB4MDA3OSwgMHg3ODNjLCAweDcwMGUsCisJMHg3ODJjLCAweDcwMTIsIDB4NzgzMCwgMHg3MDE2LCAweDc4MzQsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDcsCisJMHg3MDFhLCAweDYwYzMsIDB4MDAxMCwgMHgwODA0LCAweGE2YmQsIDB4MDBlNiwgMHgyMDcxLCAweDAyNDAsCisJMHgwMDA2LCAweDAwZjYsIDB4MjA3OCwgMHg3ODEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGNjLCAweGQwODQsCisJMHgwMTIwLCAweDc4NDQsIDB4NzAyYSwgMHg3ODQ4LCAweDcwMmUsIDB4MDBiZSwgMHgwMGZlLCAweDAwMGUsCisJMHgwMGVlLCAweDAwMDUsIDB4MDgwYywgMHhhMTAzLCAweDcwMDMsIDB4MDEwMCwgMHg3ODJjLCAweDcwMGEsCisJMHg3ODE0LCAweDcwMGUsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTZiZCwgMHgwMDIxLCAweDYwYzMsCisJMHgwMDAwLCAweDA4MDQsIDB4YTZiZCwgMHgwMGQ2LCAweDA4MGMsIDB4YWY4ZSwgMHhiODEwLCAweDkwODUsCisJMHgwMzAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLCAweDcwMGEsCisJMHg2ODgwLCAweDcwMGUsIDB4NzAxMywgMHgwODE5LCAweDA4MGMsIDB4YTZhYiwgMHg3MjFhLCAweDJmMTAsCisJMHg3MjIyLCAweDdhMDgsIDB4NzIyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDBkZSwgMHgwMDA1LCAweDAwYTksCisJMHg3OTE0LCAweDcxMmEsIDB4NjBjMywgMHgwMDAwLCAweDYwYTcsIDB4OTU3NSwgMHgwMDI2LCAweDA4MGMsCisJMHgyYmNlLCAweDAyMjgsIDB4MjAxMSwgMHgwMTAxLCAweDIyMDQsIDB4YzBjNSwgMHgyMDEyLCAweDAwMmUsCisJMHgwODBjLCAweGE2ZTAsIDB4MDgwYywgMHg4OGJhLCAweDAwMDUsIDB4MDAzNiwgMHgwMDk2LCAweDAwZDYsCisJMHgwMGU2LCAweDc4NTgsIDB4MjA0OCwgMHhhYTdjLCAweDkyOTYsIDB4MDBjMCwgMHg5Mjk0LCAweDAwZmQsCisJMHhhYTdlLCAweGFhODAsIDB4OTI5NCwgMHgwMzAwLCAweGFhODIsIDB4YTk2YywgMHg5MTk0LCAweDAwZmYsCisJMHhhYjc0LCAweDkzODQsIDB4MDBmZiwgMHg5MDhkLCAweGMyMDAsIDB4YTk2ZSwgMHg5Mzg0LCAweGZmMDAsCisJMHg5MjE1LCAweGFhNzYsIDB4YTg3MCwgMHhhYTc4LCAweGE4N2EsIDB4YWE3MiwgMHgwMGQ2LCAweDIwNjksCisJMHgwMjAwLCAweDA4MGMsIDB4YWY4ZSwgMHgwMGRlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNDAsCisJMHgyMGE5LCAweDAwMGEsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDFiLCAweDIwOTgsCisJMHg0MDAzLCAweDYwYTMsIDB4MDAzNSwgMHhhYTY4LCAweDkyOTQsIDB4NzAwMCwgMHg5Mjg2LCAweDMwMDAsCisJMHgwMTEwLCAweDYwYTMsIDB4MDAzNywgMHgwMGVlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDNlLCAweDAwMDUsCisJMHg5MDBlLCAweDc4MTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBmYywgMHgwMWMwLCAweDkwODQsCisJMHgwMDAzLCAweDExYTgsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsIDB4ZDBiYywgMHgwMTgwLCAweDc4MjQsCisJMHhkMGNjLCAweDExNjgsIDB4ZDBjNCwgMHgxMTU4LCAweGE4YTgsIDB4OTAwNSwgMHgxMTQwLCAweDIwMDEsCisJMHgxODBjLCAweDIwMGMsIDB4YzFkNSwgMHgyMTAyLCAweDIwMDksIDB4MTliMywgMHgyMTBjLCAweDAwOWUsCisJMHg5MThkLCAweDAwOTIsIDB4MDAxMCwgMHgyMDA5LCAweDAwOTYsIDB4NjBhYiwgMHgwMDM2LCAweDYxMTYsCisJMHgwMDA1LCAweDIwMDksIDB4MDAwOSwgMHgwMGEwLCAweDIwMDksIDB4MDAwYSwgMHgwMDg4LCAweDIwMDksCisJMHgwMDBiLCAweDAwNzAsIDB4MjAwOSwgMHgwMDBjLCAweDAwNTgsIDB4MjAwOSwgMHgwMDBkLCAweDAwNDAsCisJMHgyMDA5LCAweDAwMGUsIDB4MDAyOCwgMHgyMDA5LCAweDAwMGYsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDgsCisJMHg2OTEyLCAweDAwMDUsIDB4MDgwYywgMHhhMGMxLCAweDAwMTYsIDB4MDAyNiwgMHgwMDk2LCAweDAwZDYsCisJMHg3ODE0LCAweDIwNDgsIDB4NzAxMywgMHgwMTM4LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweDkwODQsCisJMHgwMDI4LCAweDExMzgsIDB4MjAwMSwgMHgxOTdjLCAweDIwMDQsIDB4OTA4NiwgMHhhYWFhLCAweDE5MDQsCisJMHhiMDMzLCAweDcwMDMsIDB4NTQwMCwgMHgwMGM2LCAweDIwNjEsIDB4MTgwMCwgMHg2MDdjLCAweDkwODQsCisJMHgwMGZmLCAweGE5OTgsIDB4ODEwZiwgMHg5MThjLCAweGZmMDAsIDB4OTEwNSwgMHg3MDBhLCAweDYwODAsCisJMHg3MDBlLCAweGE5OTgsIDB4OTE4YywgMHhmZjAwLCAweDcxMTIsIDB4MjBhOSwgMHgwMDA0LCAweDIwMDksCisJMHgxODA1LCAweDJlMTAsIDB4OTI5MCwgMHgwMDA2LCAweDIxMDQsIDB4MjAxMiwgMHg4MTA4LCAweDgyMTAsCisJMHgxZjA0LCAweGFmYzQsIDB4MjBhOSwgMHgwMDA0LCAweDIwMDksIDB4MTgwMSwgMHgyMTA0LCAweDIwMTIsCisJMHg4MTA4LCAweDgyMTAsIDB4MWYwNCwgMHhhZmNlLCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsCisJMHgwMDI5LCAweDIwOTgsIDB4MjAwOSwgMHgwMDA2LCAweDIwYTksIDB4MDAwMSwgMHg0MDAyLCAweDgwMDcsCisJMHgyMDEyLCAweDgyMTAsIDB4ODEwOSwgMHgxZGMwLCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsCisJMHhhZjc5LCAweDAwZGUsIDB4MjA3MSwgMHgwMjQwLCAweDIwMTEsIDB4MDI0MCwgMHgyMDA5LCAweDAwMDIsCiAJMHgyMGE5LCAweDAwMDEsIDB4NDAwMiwgMHg4MDA3LCAweDIwMTIsIDB4ODIxMCwgMHg4MTA5LCAweDFkYzAsCi0JMHhhODVjLCAweDkwODAsIDB4MDAzMSwgMHgyMDk4LCAweDIwMDksIDB4MDAwOCwgMHgyMGE5LCAweDAwMDEsCi0JMHg0MDAyLCAweDgwMDcsIDB4MjAxMiwgMHg4MjEwLCAweDgxMDksIDB4MWRjMCwgMHgwMGNlLCAweDYwYzMsCi0JMHgwMDRjLCAweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsCi0JMHg5MDg0LCAweDAwMjgsIDB4MTE2OCwgMHgwODBjLCAweDc1NjksIDB4MDE1MCwgMHg2MDI4LCAweGMwYmQsCi0JMHg2MDJhLCAweDYwMTQsIDB4OTA4NCwgMHgxODA0LCAweDkwODUsIDB4MDAyOSwgMHg2MDE2LCAweDAwMTAsCi0JMHgwODBjLCAweGE0ZWIsIDB4MDgwYywgMHg4Nzg2LCAweDAwZGUsIDB4MDA5ZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMjQwLCAweDIwMDEsIDB4MjIwMCwgMHg5MDg1LCAweDAwZmYsCi0JMHg3MDAyLCAweDcwMDcsIDB4ZmZmZiwgMHgyMDcxLCAweDAxMDAsIDB4NzA5YiwgMHgwMGZmLCAweDAwZWUsCi0JMHgwODA0LCAweGFkZDcsIDB4MDgwYywgMHg5ZWVmLCAweDAwMTYsIDB4MDAyNiwgMHgwMDk2LCAweDAwZDYsCi0JMHg3ODE0LCAweDIwNDgsIDB4NzAxMywgMHgwMTM4LCAweDcwMDMsIDB4NTUwMCwgMHgwMGM2LCAweGE4OWMsCi0JMHg5MDg0LCAweDAwZmYsIDB4YTk5OCwgMHg4MTBmLCAweDkxOGMsIDB4ZmYwMCwgMHg5MTA1LCAweDcwMGEsCi0JMHhhOTljLCAweDkxOGMsIDB4ZmYwMCwgMHhhOGEwLCAweDkwODQsIDB4MDBmZiwgMHg5MTA1LCAweDcwMGUsCi0JMHhhOTk4LCAweDkxOGMsIDB4ZmYwMCwgMHgyMDYxLCAweDE4MDAsIDB4NjA3YywgMHg5MDg0LCAweDAwZmYsCi0JMHg5MTBkLCAweDcxMTIsIDB4NjE4MCwgMHg3MTE2LCAweDIwMDksIDB4MDAwOCwgMHhhODYwLCAweDIwZTAsCi0JMHhhODVjLCAweDkwODAsIDB4MDAyOSwgMHgyMDk4LCAweDJlMTAsIDB4OTI5MCwgMHgwMDA2LCAweDIwYTksCi0JMHgwMDAxLCAweDQwMDIsIDB4ODAwNywgMHgyMDEyLCAweDgyMTAsIDB4ODEwOSwgMHgxZGMwLCAweDIwYTksCi0JMHgwMDA0LCAweDIwMDksIDB4MTgwNSwgMHgyMTA0LCAweDIwMTIsIDB4ODEwOCwgMHg4MjEwLCAweDFmMDQsCi0JMHhhZWIzLCAweDIwYTksIDB4MDAwMiwgMHgyMDA5LCAweDE4MDEsIDB4MjEwNCwgMHgyMDEyLCAweDgxMDgsCi0JMHg4MjEwLCAweDFmMDQsIDB4YWViZCwgMHgwMGQ2LCAweDAwMTYsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsCi0JMHhhZGE3LCAweDAwMWUsIDB4MDBkZSwgMHgyMDcxLCAweDAyNDAsIDB4MjBhOSwgMHgwMDAyLCAweDIwMDksCi0JMHgxODAzLCAweDIwMTEsIDB4MDI0MCwgMHgyMTA0LCAweDIwMTIsIDB4ODEwOCwgMHg4MjEwLCAweDFmMDQsCi0JMHhhZWQzLCAweDIwMDksIDB4MDAwOCwgMHg0MDAyLCAweDgwMDcsIDB4MjAxMiwgMHg4MjEwLCAweDgxMDksCi0JMHgxZGQwLCAweDkwMDYsIDB4MjBhOSwgMHgwMDA4LCAweDIwMTIsIDB4ODIxMCwgMHgxZjA0LCAweGFlZTQsCi0JMHgwMGNlLCAweDYwYzMsIDB4MDA0YywgMHg2MGEzLCAweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDA4MGMsCi0JMHhhNGViLCAweDA4MGMsIDB4ODc4NiwgMHgwMGRlLCAweDAwOWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMGQ2LCAweDkyOTAsIDB4MDAxOCwgMHg4MjE0LCAweDIwZTksIDB4MDAwMCwgMHgyMDY5LCAweDAyMDAsCi0JMHg2ODEzLCAweDAwMDAsIDB4MjJhOCwgMHg5Mjg0LCAweDAwZTAsIDB4MDEyOCwgMHgyMGE5LCAweDAwMjAsCi0JMHg5MjkyLCAweDAwMjAsIDB4MDAwOCwgMHg5MDE2LCAweDIwYTEsIDB4MDI0MCwgMHg5MDA2LCAweDQwMDQsCi0JMHg4MmZmLCAweDAxMjAsIDB4NjgxMCwgMHg4MDAwLCAweDY4MTIsIDB4MGM2MCwgMHgwMGRlLCAweDAwMDUsCi0JMHgwMGQ2LCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NzgsIDB4NjA1NiwgMHg5MDA2LCAweGE4MzYsCi0JMHhhODNhLCAweGE5OWMsIDB4YTk0NiwgMHhhODRhLCAweDYwMjMsIDB4MDAwMywgMHg2MDA3LCAweDAwNDAsCi0JMHg2MDAzLCAweDAwMDMsIDB4NjAwYiwgMHhmZmZmLCAweGE4MTcsIDB4MDAwMSwgMHhhODQyLCAweGE4M2UsCi0JMHgyOTAwLCAweGE4NWEsIDB4YTgxMywgMHgyMGVlLCAweDA4MGMsIDB4OTNhMCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4OWEwZiwgMHgwMTJlLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZjYsCi0JMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMGE2LCAweDAwOTYsIDB4MDA2NiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNzEsIDB4MTllOSwgMHg3NjBjLCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDA5MDQsCi0JMHhhZmNiLCAweDcwMjQsIDB4OWMwNiwgMHgxNTIwLCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLCAweDkwMDUsCi0JMHgwOTA0LCAweGFmOWQsIDB4MDgwYywgMHhhNTE3LCAweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweGFhNDksCi0JMHg3MDI3LCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHg5Mzg0LCAweDEwMDAsCi0JMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJkNTIsIDB4OTAwNiwgMHgwODBjLCAweDJkNTIsCi0JMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAxMTAsIDB4NjgyNywgMHgwMDAxLCAweDAwM2UsCi0JMHg3MDBjLCAweDljMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2MGUsIDB4NzAwOCwgMHg5YzM2LCAweDExNDAsCi0JMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMGEsIDB4MDAxMCwgMHg3MDBiLCAweDAwMDAsCi0JMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHg5ZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LCAweDI2NzgsCi0JMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHhkMDRkLCAweDExODAsIDB4MDgwYywgMHgzMjZmLCAweDA4MGMsCi0JMHhkMDVlLCAweDE1MTgsIDB4MDgwYywgMHhiYWUyLCAweDA0MDAsIDB4MDgwYywgMHhhYTQ5LCAweDY4MjQsCi0JMHhkMDg0LCAweDA5YjAsIDB4NjgyNywgMHgwMDAxLCAweDA4OTgsIDB4MDgwYywgMHhkMDVlLCAweDExMTgsCi0JMHgwODBjLCAweGJhZTIsIDB4MDA5MCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZTU0LCAweDAxNjgsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTIwLCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLCAweGE4NzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NmRkMSwgMHgwODBjLCAweGQwNDEsIDB4MDgwYywgMHhkMmNhLCAweDA4MGMsCi0JMHhiMTM0LCAweDA4MGMsIDB4YTkxZiwgMHgwMGNlLCAweDA4MDQsIDB4YWY0ZSwgMHgyYzc4LCAweDYwMGMsCi0JMHgyMDYwLCAweDA4MDQsIDB4YWY0ZSwgMHg3MDBmLCAweDAwMDAsIDB4NzAwYiwgMHgwMDAwLCAweDAxMmUsCi0JMHgwMDZlLCAweDAwOWUsIDB4MDBhZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxZDA4LCAweDA4MGMsIDB4ZTk0OCwgMHgwOGYwLCAweDAwZDYsCi0JMHgwMTU2LCAweDA4MGMsIDB4OWYzYSwgMHg3YTE0LCAweDgyZmYsIDB4MDEzOCwgMHg3MDAzLCAweDAxMDAsCi0JMHg3MDBiLCAweDAwMDMsIDB4NjBjMywgMHgwMDA4LCAweDA0OTAsIDB4NzAwMywgMHgwMjAwLCAweDcwMDcsCi0JMHgwMDAwLCAweDIwNjksIDB4MTgwMCwgMHg5MDFlLCAweDY4MDAsIDB4OTA4NiwgMHgwMDA0LCAweDExMTAsCi0JMHhjMzhkLCAweDAwNjAsIDB4MDgwYywgMHg3NTY5LCAweDExMTAsIDB4YzNhZCwgMHgwMDA4LCAweGMzYTUsCi0JMHg2YWRjLCAweGQyOWMsIDB4MTExMCwgMHhkMmFjLCAweDAxMDgsIDB4YzM5ZCwgMHg3MzBlLCAweDA4MGMsCi0JMHg4ODE4LCAweDIwYTksIDB4MDAwNiwgMHgyMDExLCAweGZmZWMsIDB4MjAxOSwgMHhmZmVkLCAweDIwNzEsCi0JMHgwMjUwLCAweDIzMDUsIDB4MjA3MiwgMHg4ZTcwLCAweDIyMDUsIDB4MjA3MiwgMHg4ZTcwLCAweDkzOTgsCi0JMHgwMDAyLCAweDkyOTAsIDB4MDAwMiwgMHgxZjA0LCAweGIwMTEsIDB4NjBjMywgMHgwMDIwLCAweDA4MGMsCi0JMHhhNGViLCAweDAxNWUsIDB4MDBkZSwgMHgwMDA1LCAweDAxNTYsIDB4MDgwYywgMHg5ZjNhLCAweDdhMTQsCi0JMHg4MmZmLCAweDAxNjgsIDB4OTI4NiwgMHhmZmZmLCAweDAxMTgsIDB4OTI4MiwgMHgwMDBlLCAweDEyMzgsCi0JMHg3MDAzLCAweDAxMDAsIDB4NzAwYiwgMHgwMDAzLCAweDYwYzMsIDB4MDAwOCwgMHgwNDg4LCAweDcwMDMsCi0JMHgwMjAwLCAweDcwMDcsIDB4MDAxYywgMHg3MDBmLCAweDAwMDEsIDB4MjAxMSwgMHgxOWJmLCAweDIyMDQsCi0JMHg4MDA3LCAweDcwMWEsIDB4ODIxMCwgMHgyMjA0LCAweDgwMDcsIDB4NzAxZSwgMHgwNDIxLCAweDExMjAsCi0JMHhiOGEwLCAweDkwODIsIDB4MDA3ZiwgMHgwMjQ4LCAweDIwMDEsIDB4MTgxZiwgMHgyMDA0LCAweDcwMjIsCi0JMHgyMDAxLCAweDE4MjAsIDB4MjAwNCwgMHg3MDI2LCAweDAwMzAsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4NzAyNiwgMHgyMGE5LCAweDAwMDQsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksCi0JMHgxODA1LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNTYsIDB4NDAwMywgMHg2MGMzLCAweDAwMWMsCi0JMHgwMTVlLCAweDA4MDQsIDB4YTRlYiwgMHgwMDA2LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwYWMsCi0JMHgwMDBlLCAweDAwMDUsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4YThlZCwgMHgyMDExLCAweDAwMDIsCi0JMHgwODBjLCAweGE4ZjcsIDB4MDgwYywgMHhhODAxLCAweDAwMzYsIDB4OTAxZSwgMHgwODBjLCAweGE4NzcsCi0JMHgwMDNlLCAweDAwMDUsIDB4MDgwYywgMHgzM2E1LCAweDAxODgsIDB4MDAxNiwgMHgwMGI2LCAweDAwYzYsCi0JMHg3MDEwLCAweDkwODUsIDB4MDAyMCwgMHg3MDEyLCAweDIwMDksIDB4MDA3ZSwgMHgwODBjLCAweDY3MWQsCi0JMHhiODVjLCAweGMwYWMsIDB4Yjg1ZSwgMHgwMGNlLCAweDAwYmUsIDB4MDAxZSwgMHgwMDA1LCAweDIwNzEsCi0JMHgxODhkLCAweDcwMDAsIDB4OTAwNSwgMHgwMTQwLCAweDIwMDEsIDB4MDk3NiwgMHgyMDcxLCAweDE4MDAsCi0JMHg3MDc2LCAweDcwN2EsIDB4NzA2YiwgMHhmZmUwLCAweDIwNzEsIDB4MTgwMCwgMHg3MDc0LCAweDcwNTYsCi0JMHg3MDViLCAweDFjZDAsIDB4MDAwNSwgMHgwMGU2LCAweDAxMjYsIDB4MjA3MSwgMHgxODAwLCAweDIwOTEsCi0JMHg4MDAwLCAweDc1NTQsIDB4OTU4MiwgMHgwMDEwLCAweDA2MDgsIDB4NzA1OCwgMHgyMDYwLCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg5Y2UwLCAweDAwMTgsIDB4NzA2OCwgMHg5YzAyLCAweDEyMDgsCi0JMHgwY2IwLCAweDIwNjEsIDB4MWNkMCwgMHgwYzk4LCAweDYwMDMsIDB4MDAwOCwgMHg4NTI5LCAweDc1NTYsCi0JMHg5Y2E4LCAweDAwMTgsIDB4NzA2OCwgMHg5NTAyLCAweDEyMzAsIDB4NzU1YSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDViLCAweDFjZDAsIDB4MGNjMCwgMHg5MDA2LCAweDBjYzAsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3NTU0LCAweDk1ODIsIDB4MDAxMCwgMHgwNjAwLCAweDcwNTgsCisJMHgyMDA5LCAweDAwMDgsIDB4MjBhOSwgMHgwMDAxLCAweDQwMDIsIDB4ODAwNywgMHgyMDEyLCAweDgyMTAsCisJMHg4MTA5LCAweDFkYzAsIDB4YTg1YywgMHg5MDgwLCAweDAwMzEsIDB4MjA5OCwgMHgyMDA5LCAweDAwMDgsCisJMHgyMGE5LCAweDAwMDEsIDB4NDAwMiwgMHg4MDA3LCAweDIwMTIsIDB4ODIxMCwgMHg4MTA5LCAweDFkYzAsCisJMHgwMGNlLCAweDYwYzMsIDB4MDA0YywgMHg2MGEzLCAweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDIwMDEsCisJMHgxODM3LCAweDIwMDQsIDB4OTA4NCwgMHgwMDI4LCAweDExNjgsIDB4MDgwYywgMHg3NjM3LCAweDAxNTAsCisJMHg2MDI4LCAweGMwYmQsIDB4NjAyYSwgMHg2MDE0LCAweDkwODQsIDB4MTgwNCwgMHg5MDg1LCAweDAwMjksCisJMHg2MDE2LCAweDAwMTAsIDB4MDgwYywgMHhhNmJkLCAweDA4MGMsIDB4ODhiYSwgMHgwMGRlLCAweDAwOWUsCisJMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDI0MCwgMHgyMDAxLCAweDIyMDAsCisJMHg5MDg1LCAweDAwZmYsIDB4NzAwMiwgMHg3MDA3LCAweGZmZmYsIDB4MjA3MSwgMHgwMTAwLCAweDcwOWIsCisJMHgwMGZmLCAweDAwZWUsIDB4MDgwNCwgMHhhZmE5LCAweDA4MGMsIDB4YTBjMSwgMHgwMDE2LCAweDAwMjYsCisJMHgwMDk2LCAweDAwZDYsIDB4NzgxNCwgMHgyMDQ4LCAweDcwMTMsIDB4MDEzOCwgMHg3MDAzLCAweDU1MDAsCisJMHgwMGM2LCAweGE4OWMsIDB4OTA4NCwgMHgwMGZmLCAweGE5OTgsIDB4ODEwZiwgMHg5MThjLCAweGZmMDAsCisJMHg5MTA1LCAweDcwMGEsIDB4YTk5YywgMHg5MThjLCAweGZmMDAsIDB4YThhMCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MTA1LCAweDcwMGUsIDB4YTk5OCwgMHg5MThjLCAweGZmMDAsIDB4MjA2MSwgMHgxODAwLCAweDYwN2MsCisJMHg5MDg0LCAweDAwZmYsIDB4OTEwZCwgMHg3MTEyLCAweDYxODAsIDB4NzExNiwgMHgyMDA5LCAweDAwMDgsCisJMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMjksIDB4MjA5OCwgMHgyZTEwLCAweDkyOTAsCisJMHgwMDA2LCAweDIwYTksIDB4MDAwMSwgMHg0MDAyLCAweDgwMDcsIDB4MjAxMiwgMHg4MjEwLCAweDgxMDksCisJMHgxZGMwLCAweDIwYTksIDB4MDAwNCwgMHgyMDA5LCAweDE4MDUsIDB4MjEwNCwgMHgyMDEyLCAweDgxMDgsCisJMHg4MjEwLCAweDFmMDQsIDB4YjA4NSwgMHgyMGE5LCAweDAwMDIsIDB4MjAwOSwgMHgxODAxLCAweDIxMDQsCisJMHgyMDEyLCAweDgxMDgsIDB4ODIxMCwgMHgxZjA0LCAweGIwOGYsIDB4MDBkNiwgMHgwMDE2LCAweDIwNjksCisJMHgwMjAwLCAweDA4MGMsIDB4YWY3OSwgMHgwMDFlLCAweDAwZGUsIDB4MjA3MSwgMHgwMjQwLCAweDIwYTksCisJMHgwMDAyLCAweDIwMDksIDB4MTgwMywgMHgyMDExLCAweDAyNDAsIDB4MjEwNCwgMHgyMDEyLCAweDgxMDgsCisJMHg4MjEwLCAweDFmMDQsIDB4YjBhNSwgMHgyMDA5LCAweDAwMDgsIDB4NDAwMiwgMHg4MDA3LCAweDIwMTIsCisJMHg4MjEwLCAweDgxMDksIDB4MWRkMCwgMHg5MDA2LCAweDIwYTksIDB4MDAwOCwgMHgyMDEyLCAweDgyMTAsCisJMHgxZjA0LCAweGIwYjYsIDB4MDBjZSwgMHg2MGMzLCAweDAwNGMsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsCisJMHg5NTc1LCAweDA4MGMsIDB4YTZiZCwgMHgwODBjLCAweDg4YmEsIDB4MDBkZSwgMHgwMDllLCAweDAwMmUsCisJMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHg5MjkwLCAweDAwMTgsIDB4ODIxNCwgMHgyMGU5LCAweDAwMDAsCisJMHgyMDY5LCAweDAyMDAsIDB4NjgxMywgMHgwMDAwLCAweDIyYTgsIDB4OTI4NCwgMHgwMGUwLCAweDAxMjgsCisJMHgyMGE5LCAweDAwMjAsIDB4OTI5MiwgMHgwMDIwLCAweDAwMDgsIDB4OTAxNiwgMHgyMGExLCAweDAyNDAsCisJMHg5MDA2LCAweDQwMDQsIDB4ODJmZiwgMHgwMTIwLCAweDY4MTAsIDB4ODAwMCwgMHg2ODEyLCAweDBjNjAsCisJMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHhhODc4LCAweDYwNTYsCisJMHg5MDA2LCAweGE4MzYsIDB4YTgzYSwgMHhhOTljLCAweGE5NDYsIDB4YTg0YSwgMHg2MDIzLCAweDAwMDMsCisJMHg2MDA3LCAweDAwNDAsIDB4NjAwMywgMHgwMDAzLCAweDYwMGIsIDB4ZmZmZiwgMHhhODE3LCAweDAwMDEsCisJMHhhODQyLCAweGE4M2UsIDB4MjkwMCwgMHhhODVhLCAweGE4MTMsIDB4MjBjNSwgMHgwODBjLCAweDk1NjQsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDliZDMsIDB4MDEyZSwgMHgwMDllLCAweDAwZGUsCisJMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDBhNiwgMHgwMDk2LCAweDAwNjYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE5ZTgsIDB4NzYwYywgMHgyNjYwLCAweDI2NzgsCisJMHg4Y2ZmLCAweDA5MDQsIDB4YjE5ZCwgMHg3MDI0LCAweDljMDYsIDB4MTUyMCwgMHgyMDY5LCAweDAxMDAsCisJMHg2OGMwLCAweDkwMDUsIDB4MDkwNCwgMHhiMTZmLCAweDA4MGMsIDB4YTZlOSwgMHg2OGMzLCAweDAwMDAsCisJMHgwODBjLCAweGFjMWIsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsCisJMHg5Mzg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyZDM5LCAweDkwMDYsCisJMHgwODBjLCAweDJkMzksIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsCisJMHgwMDAxLCAweDAwM2UsIDB4NzAwYywgMHg5YzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjBlLCAweDcwMDgsCisJMHg5YzM2LCAweDExNDAsIDB4MmMwMCwgMHg5ZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDBhLCAweDAwMTAsCisJMHg3MDBiLCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4OWYwNiwgMHgwMTEwLCAweDdlMGUsCisJMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4ZDJjZiwgMHgxMTgwLCAweDA4MGMsCisJMHgzMjc5LCAweDA4MGMsIDB4ZDJlMCwgMHgxNTE4LCAweDA4MGMsIDB4YmNiNiwgMHgwNDAwLCAweDA4MGMsCisJMHhhYzFiLCAweDY4MjQsIDB4ZDA4NCwgMHgwOWIwLCAweDY4MjcsIDB4MDAwMSwgMHgwODk4LCAweDA4MGMsCisJMHhkMmUwLCAweDExMTgsIDB4MDgwYywgMHhiY2I2LCAweDAwOTAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsCisJMHhkMGQ2LCAweDAxNjgsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDMsIDB4MTUyMCwgMHhhODY3LCAweDAxMDMsCisJMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweDZlOWYsIDB4MDgwYywgMHhkMmMzLCAweDA4MGMsCisJMHhkNTRjLCAweDA4MGMsIDB4YjMwNiwgMHgwODBjLCAweGFhZjEsIDB4MDBjZSwgMHgwODA0LCAweGIxMjAsCisJMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LCAweGIxMjAsIDB4NzAwZiwgMHgwMDAwLCAweDcwMGIsCisJMHgwMDAwLCAweDAxMmUsIDB4MDA2ZSwgMHgwMDllLCAweDAwYWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsCisJMHgwMGZlLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsIDB4MWQwOCwgMHgwODBjLCAweGViZDQsCisJMHgwOGYwLCAweDAwZDYsIDB4MDE1NiwgMHgwODBjLCAweGExMGMsIDB4N2ExNCwgMHg4MmZmLCAweDAxMzgsCisJMHg3MDAzLCAweDAxMDAsIDB4NzAwYiwgMHgwMDAzLCAweDYwYzMsIDB4MDAwOCwgMHgwNDkwLCAweDcwMDMsCisJMHgwMjAwLCAweDcwMDcsIDB4MDAwMCwgMHgyMDY5LCAweDE4MDAsIDB4OTAxZSwgMHg2ODAwLCAweDkwODYsCisJMHgwMDA0LCAweDExMTAsIDB4YzM4ZCwgMHgwMDYwLCAweDA4MGMsIDB4NzYzNywgMHgxMTEwLCAweGMzYWQsCisJMHgwMDA4LCAweGMzYTUsIDB4NmFkYywgMHhkMjljLCAweDExMTAsIDB4ZDJhYywgMHgwMTA4LCAweGMzOWQsCisJMHg3MzBlLCAweDA4MGMsIDB4ODk0YywgMHgyMGE5LCAweDAwMDYsIDB4MjAxMSwgMHhmZmVjLCAweDIwMTksCisJMHhmZmVkLCAweDIwNzEsIDB4MDI1MCwgMHgyMzA1LCAweDIwNzIsIDB4OGU3MCwgMHgyMjA1LCAweDIwNzIsCisJMHg4ZTcwLCAweDkzOTgsIDB4MDAwMiwgMHg5MjkwLCAweDAwMDIsIDB4MWYwNCwgMHhiMWUzLCAweDYwYzMsCisJMHgwMDIwLCAweDA4MGMsIDB4YTZiZCwgMHgwMTVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMTU2LCAweDA4MGMsCisJMHhhMTBjLCAweDdhMTQsIDB4ODJmZiwgMHgwMTY4LCAweDkyODYsIDB4ZmZmZiwgMHgwMTE4LCAweDkyODIsCisJMHgwMDBlLCAweDEyMzgsIDB4NzAwMywgMHgwMTAwLCAweDcwMGIsIDB4MDAwMywgMHg2MGMzLCAweDAwMDgsCisJMHgwNDg4LCAweDcwMDMsIDB4MDIwMCwgMHg3MDA3LCAweDAwMWMsIDB4NzAwZiwgMHgwMDAxLCAweDIwMTEsCisJMHgxOWJlLCAweDIyMDQsIDB4ODAwNywgMHg3MDFhLCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweDcwMWUsCisJMHgwNDIxLCAweDExMjAsIDB4YjhhMCwgMHg5MDgyLCAweDAwN2YsIDB4MDI0OCwgMHgyMDAxLCAweDE4MWYsCisJMHgyMDA0LCAweDcwMjIsIDB4MjAwMSwgMHgxODIwLCAweDIwMDQsIDB4NzAyNiwgMHgwMDMwLCAweDIwMDEsCisJMHgxODE4LCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweDcwMjYsIDB4MjBhOSwgMHgwMDA0LCAweDIwZTEsCisJMHgwMDAxLCAweDIwOTksIDB4MTgwNSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjU2LCAweDQwMDMsCisJMHg2MGMzLCAweDAwMWMsIDB4MDE1ZSwgMHgwODA0LCAweGE2YmQsIDB4MDAwNiwgMHgyMDAxLCAweDE4MzcsCisJMHgyMDA0LCAweGQwYWMsIDB4MDAwZSwgMHgwMDA1LCAweDIwMTEsIDB4MDAwMywgMHgwODBjLCAweGFhYmYsCisJMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHhhYWM5LCAweDA4MGMsIDB4YTlkMywgMHgwMDM2LCAweDkwMWUsCisJMHgwODBjLCAweGFhNDksIDB4MDAzZSwgMHgwMDA1LCAweDA4MGMsIDB4MzNhZiwgMHgwMTg4LCAweDAwMTYsCisJMHgwMGI2LCAweDAwYzYsIDB4NzAxMCwgMHg5MDg1LCAweDAwMjAsIDB4NzAxMiwgMHgyMDA5LCAweDAwN2UsCisJMHgwODBjLCAweDY3MjQsIDB4Yjg1YywgMHhjMGFjLCAweGI4NWUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMWUsCisJMHgwMDA1LCAweDIwNzEsIDB4MTg4ZCwgMHg3MDAwLCAweDkwMDUsIDB4MDE0MCwgMHgyMDAxLCAweDA5NzYsCisJMHgyMDcxLCAweDE4MDAsIDB4NzA3NiwgMHg3MDdhLCAweDcwNmIsIDB4ZmZlMCwgMHgyMDcxLCAweDE4MDAsCisJMHg3MDc0LCAweDcwNTYsIDB4NzA1YiwgMHgxY2QwLCAweDAwMDUsIDB4MDBlNiwgMHgwMTI2LCAweDIwNzEsCisJMHgxODAwLCAweDIwOTEsIDB4ODAwMCwgMHg3NTU0LCAweDk1ODIsIDB4MDAxMCwgMHgwNjA4LCAweDcwNTgsCiAJMHgyMDYwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4OWNlMCwgMHgwMDE4LCAweDcwNjgsCiAJMHg5YzAyLCAweDEyMDgsIDB4MGNiMCwgMHgyMDYxLCAweDFjZDAsIDB4MGM5OCwgMHg2MDAzLCAweDAwMDgsCi0JMHg4NTI5LCAweDc1NTYsIDB4OWNhOCwgMHgwMDE4LCAweDcwNjgsIDB4OTUwMiwgMHgxMjI4LCAweDc1NWEsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDBlZSwgMHgwMDA1LCAweDcwNWIsIDB4MWNkMCwgMHgwY2M4LCAweDkwMDYsCi0JMHgwY2M4LCAweDljODIsIDB4MWNkMCwgMHgwYTBjLCAweDBkYzUsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsCi0JMHg5YzAyLCAweDFhMGMsIDB4MGRjNSwgMHg5MDA2LCAweDYwMDYsIDB4NjAwYSwgMHg2MDBlLCAweDYwMTYsCi0JMHg2MDFhLCAweDYwMTIsIDB4NjAyMywgMHgwMDAwLCAweDYwMDMsIDB4MDAwMCwgMHg2MDFlLCAweDYwNTYsCi0JMHg2MDVhLCAweDYwMjYsIDB4NjAyYSwgMHg2MDJlLCAweDYwMzIsIDB4NjAzNiwgMHg2MDNhLCAweDYwM2UsCi0JMHg2MDQyLCAweDYwMmEsIDB4MjA2MSwgMHgxODAwLCAweDYwNTQsIDB4ODAwMCwgMHg2MDU2LCAweDkwODYsCi0JMHgwMDAxLCAweDAxMDgsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDE2LCAweDA4MGMsCi0JMHg5OGVkLCAweDAwMWUsIDB4MDEyZSwgMHgwY2IwLCAweDAwMDYsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsCi0JMHgwMWMwLCAweDYwMWMsIDB4ZDA4NCwgMHgxOTBjLCAweDFhYjcsIDB4NjAxNywgMHgwMDAwLCAweDYwMjMsCi0JMHgwMDA3LCAweDIwMDEsIDB4MTk4NywgMHgyMDA0LCAweDAwMDYsIDB4OTA4MiwgMHgwMDUxLCAweDAwMGUsCi0JMHgwMjA4LCAweDgwMDQsIDB4NjAxYSwgMHgwODBjLCAweGVjMDIsIDB4NjA0MywgMHgwMDAwLCAweDYwMTMsCi0JMHgwMDAwLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LCAweDAxMjYsIDB4MjA3MSwgMHgxODAwLCAweDIwOTEsCi0JMHg4MDAwLCAweDc1NTQsIDB4OTU4MiwgMHgwMDAxLCAweDA2MDgsIDB4NzA1OCwgMHgyMDYwLCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg5Y2UwLCAweDAwMTgsIDB4NzA2OCwgMHg5YzAyLCAweDEyMDgsCi0JMHgwY2IwLCAweDIwNjEsIDB4MWNkMCwgMHgwYzk4LCAweDYwMDMsIDB4MDAwOCwgMHg4NTI5LCAweDc1NTYsCi0JMHg5Y2E4LCAweDAwMTgsIDB4NzA2OCwgMHg5NTAyLCAweDEyMzAsIDB4NzU1YSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDViLCAweDFjZDAsIDB4MGNjMCwgMHg5MDA2LCAweDBjYzAsCi0JMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDAyLCAweGIxOTMsIDB4YjE5YywgMHhiMWI3LCAweGIxZDIsCi0JMHhkNWE5LCAweGQ1YzYsIDB4ZDVlMSwgMHhiMTkzLCAweGIxOWMsIDB4OGZjZCwgMHhiMWViLCAweGIxOTMsCi0JMHhiMTkzLCAweGIxOTMsIDB4YjE5MywgMHg5MTg2LCAweDAwMTMsIDB4MTEyOCwgMHgwODBjLCAweDk3ZTEsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwMDA1LCAweDAwNjYsIDB4NjAwMCwgMHg5MGIyLCAweDAwMTAsCi0JMHgxYTBjLCAweDBkYzUsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4YjFiNSwgMHhiOTMxLCAweGJiMjksCi0JMHhiMWI1LCAweGJiYmYsIDB4YjRjZSwgMHhiMWI1LCAweGIxYjUsIDB4YjhiMywgMHhjMTJmLCAweGIxYjUsCi0JMHhiMWI1LCAweGIxYjUsIDB4YjFiNSwgMHhiMWI1LCAweGIxYjUsIDB4MDgwYywgMHgwZGM1LCAweDAwNjYsCi0JMHg2MDAwLCAweDkwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDBkYzUsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsCi0JMHhiMWQwLCAweGM3ZmMsIDB4YjFkMCwgMHhiMWQwLCAweGIxZDAsIDB4YjFkMCwgMHhiMWQwLCAweGIxZDAsCi0JMHhjNzkzLCAweGM5N2UsIDB4YjFkMCwgMHhjODNkLCAweGM4YmMsIDB4YzgzZCwgMHhjOGJjLCAweGIxZDAsCi0JMHgwODBjLCAweDBkYzUsIDB4NjAwMCwgMHg5MDgyLCAweDAwMTAsIDB4MWEwYywgMHgwZGM1LCAweDYwMDAsCi0JMHgwMDAyLCAweGIxZTksIDB4YzE3NiwgMHhjMjNlLCAweGMzNzEsIDB4YzUyMCwgMHhiMWU5LCAweGIxZTksCi0JMHhiMWU5LCAweGMxNGEsIDB4YzcxZiwgMHhjNzIyLCAweGIxZTksIDB4YjFlOSwgMHhiMWU5LCAweGIxZTksCi0JMHhjNzUxLCAweDA4MGMsIDB4MGRjNSwgMHgwMDY2LCAweDYwMDAsIDB4OTBiMiwgMHgwMDEwLCAweDFhMGMsCi0JMHgwZGM1LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LCAweGIyMDQsIDB4YjIwNCwgMHhiMjQ3LCAweGIyZTYsCi0JMHhiMzdiLCAweGIyMDQsIDB4YjIwNCwgMHhiMjA0LCAweGIyMDYsIDB4YjIwNCwgMHhiMjA0LCAweGIyMDQsCi0JMHhiMjA0LCAweGIyMDQsIDB4YjIwNCwgMHhiMjA0LCAweDA4MGMsIDB4MGRjNSwgMHg5MTg2LCAweDAwNGMsCi0JMHgwNTg4LCAweDkxODYsIDB4MDAwMywgMHgxOTBjLCAweDBkYzUsIDB4MDA5NiwgMHg2MDFjLCAweGMwZWQsCi0JMHg2MDFlLCAweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweDkwODQsCi0JMHhhMDAwLCAweGMwYjUsIDB4YTg3ZSwgMHhhOGFjLCAweGE4NDYsIDB4YThiMCwgMHhhODRhLCAweDkwMDYsCi0JMHhhODM2LCAweGE4M2EsIDB4YTg4NCwgMHg5MDkyLCAweDE5OWEsIDB4MDIxMCwgMHgyMDAxLCAweDE5OTksCi0JMHg4MDAzLCAweDgwMTMsIDB4ODIxMywgMHg5MjEwLCAweDYyMWEsIDB4MDA5ZSwgMHgyYzEwLCAweDA4MGMsCi0JMHgxYzA5LCAweDA4MGMsIDB4OTNhMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDlhMGYsCi0JMHgwMTJlLCAweDAwMDUsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmNhMCwgMHgwMGJlLCAweDJjMDAsCi0JMHgwODBjLCAweGIzOWQsIDB4MDgwYywgMHhkNTc5LCAweDYwMDMsIDB4MDAwNywgMHgwMDA1LCAweDAwZDYsCi0JMHgwMDk2LCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDdhOTAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsCi0JMHhkMGVjLCAweDExMTAsIDB4OTI5MCwgMHgwMDE4LCAweGFjNzgsIDB4YzRmYywgMHgwMDQ2LCAweGE4ZTAsCi0JMHg5MDA1LCAweDExNDAsIDB4YThkYywgMHg5MjFhLCAweDAxNDAsIDB4MDIyMCwgMHhhODdiLCAweDAwMDcsCi0JMHgyMDEwLCAweDAwMjgsIDB4YTg3YiwgMHgwMDE1LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLCAweDgyMTQsCi0JMHhhODgzLCAweDAwMDAsIDB4YWEwMiwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGU2LCAweDAwZjYsIDB4MjQwMCwgMHg5MDA1LCAweDExMDgsIDB4MDA5YSwgMHgyMTAwLCAweDkwODYsCi0JMHgwMDE1LCAweDExMTgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMzgsIDB4MjEwMCwgMHg5MDg2LCAweDAwMTYsCi0JMHgwMTE4LCAweDIwMDEsIDB4MDAwMSwgMHgwMDJhLCAweDk0YTQsIDB4MDAwNywgMHg4NDIzLCAweDk0MDUsCi0JMHgwMDAyLCAweGIyYWUsIDB4YjJhZSwgMHhiMmE5LCAweGIyYWMsIDB4YjJhZSwgMHhiMmE2LCAweGIyOTksCi0JMHhiMjk5LCAweGIyOTksIDB4YjI5OSwgMHhiMjk5LCAweGIyOTksIDB4YjI5OSwgMHhiMjk5LCAweGIyOTksCi0JMHhiMjk5LCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCi0JMHgwMDRlLCAweDAwZmUsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweGJkODAsCi0JMHgwMDI4LCAweDA4MGMsIDB4YmU2NywgMHgwMDEwLCAweDA4MGMsIDB4YmY1ZCwgMHgwMGZlLCAweDAwZWUsCi0JMHgwMGRlLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDJjMDAsIDB4YTg5NiwgMHgwMDBlLCAweDA4MGMsCi0JMHhiNDViLCAweDA1MzAsIDB4YTgwNCwgMHhhODBlLCAweDAwYTYsIDB4MjA1MCwgMHhiMTAwLCAweDAwYWUsCi0JMHg4MDA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsCi0JMHgwMDAyLCAweGFhY2MsIDB4YWJkMCwgMHhhY2Q0LCAweGFkZDgsIDB4MjAzMSwgMHgwMDAwLCAweDIwNDEsCi0JMHgxMjZjLCAweDA4MGMsIDB4YjYxZiwgMHgwMTYwLCAweDAwMGUsIDB4OTAwNSwgMHgwMTIwLCAweDAwZmUsCi0JMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHgwMGZlLCAweDAwOWUsIDB4MDBkZSwgMHgwODA0LCAweGIxMDEsCi0JMHgyMDAxLCAweDAwMmMsIDB4OTAwZSwgMHgwODBjLCAweGI0YzEsIDB4MGM3MCwgMHg5MWI2LCAweDAwMTUsCi0JMHgwMTcwLCAweDkxYjYsIDB4MDAxNiwgMHgwMTU4LCAweDkxYjIsIDB4MDA0NywgMHgwYTBjLCAweDBkYzUsCi0JMHg5MWIyLCAweDAwNTAsIDB4MWEwYywgMHgwZGM1LCAweDkxODIsIDB4MDA0NywgMHgwMGNhLCAweDIwMDEsCi0JMHgwMTA5LCAweDIwMDQsIDB4ZDA4YywgMHgwMTk4LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg5MmVkLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsCi0JMHhhMDAxLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAyLCAweDExMTAsIDB4MDgwNCwgMHhiMjQ3LCAweDAwMDUsCi0JMHhiMzE5LCAweGIzMTksIDB4YjMxYiwgMHhiMzUxLCAweGIzMTksIDB4YjMxOSwgMHhiMzE5LCAweGIzMTksCi0JMHhiMzY0LCAweDA4MGMsIDB4MGRjNSwgMHgwMGQ2LCAweDAwMTYsIDB4MDA5NiwgMHgwODBjLCAweDk4OWQsCi0JMHgwODBjLCAweDlhMGYsIDB4NjAwMywgMHgwMDA0LCAweDYxMTQsIDB4MjE0OCwgMHhhODdjLCAweGQwZmMsCi0JMHgwMWMwLCAweGE4NzgsIDB4YzBmYywgMHg5MDA1LCAweDExNTgsIDB4YTg5NCwgMHg5MDA1LCAweDAxNDAsCi0JMHgyMDAxLCAweDAwMDAsIDB4OTAwZSwgMHgwODBjLCAweGI0YzEsIDB4MDgwYywgMHhiMTAxLCAweDAwYTgsCi0JMHg2MDAzLCAweDAwMDIsIDB4YThhNCwgMHhhOWE4LCAweDkxMDUsIDB4MTE3OCwgMHhhOGFlLCAweGE4YjIsCi0JMHgwYzc4LCAweGE4N2YsIDB4MDAyMCwgMHhhODhjLCAweGE4OGEsIDB4YThhNCwgMHhhOGFlLCAweGE4YTgsCi0JMHhhOGIyLCAweGE4YzcsIDB4MDAwMCwgMHhhOGNiLCAweDAwMDAsIDB4MDA5ZSwgMHgwMDFlLCAweDAwZGUsCi0JMHgwMDA1LCAweDA4MGMsIDB4OTg5ZCwgMHgwMGQ2LCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsCi0JMHhjZTU2LCAweDAxMjAsIDB4YTg3YiwgMHgwMDA2LCAweDA4MGMsIDB4NmRkMSwgMHgwMDllLCAweDAwZGUsCi0JMHgwODBjLCAweGIxMDEsIDB4MDgwNCwgMHg5YTBmLCAweDA4MGMsIDB4OTg5ZCwgMHgwODBjLCAweDMyNDYsCi0JMHgwODBjLCAweGQ1NzYsIDB4MDBkNiwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLCAweGNlNTYsCi0JMHgwMTIwLCAweGE4N2IsIDB4MDAyOSwgMHgwODBjLCAweDZkZDEsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MGMsCi0JMHhiMTAxLCAweDA4MDQsIDB4OWEwZiwgMHg5MTgyLCAweDAwNDcsIDB4MDAwMiwgMHhiMzhiLCAweGIzOGQsCi0JMHhiMzhiLCAweGIzOGIsIDB4YjM4YiwgMHhiMzhiLCAweGIzOGIsIDB4YjM4YiwgMHhiMzhiLCAweGIzOGIsCi0JMHhiMzhiLCAweGIzOGIsIDB4YjM4ZCwgMHgwODBjLCAweDBkYzUsIDB4MDBkNiwgMHgwMDk2LCAweDYwMWYsCi0JMHgwMDAwLCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLCAweDAwMDAsIDB4YTg4MywgMHgwMDAwLCAweDA4MGMsCi0JMHg2ZGQxLCAweDAwOWUsIDB4MDBkZSwgMHgwODA0LCAweGIxMDEsIDB4MDAyNiwgMHgwMDM2LCAweDAwNTYsCi0JMHgwMDY2LCAweDAwOTYsIDB4MDBhNiwgMHgwMGY2LCAweDAwMDYsIDB4MDgwYywgMHgxMDBlLCAweDAwMGUsCi0JMHgwOTBjLCAweDBkYzUsIDB4YTk2MCwgMHgyMWU4LCAweGE5NWMsIDB4OTE4OCwgMHgwMDE5LCAweDIxYTAsCi0JMHg5MDBlLCAweDIwYTksIDB4MDAyMCwgMHg0MTA0LCAweGE4N2EsIDB4MjA3OSwgMHgxODAwLCAweDc5OTAsCi0JMHg5MTg4LCAweDAwMTgsIDB4OTE4YywgMHgwZmZmLCAweGE5NzIsIDB4YWM3NiwgMHgyOTUwLCAweDAwYTYsCi0JMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAwLCAweDkwMWUsIDB4MjAyOSwgMHgwMDAxLCAweDkxODIsCi0JMHgwMDM1LCAweDEyMjgsIDB4MjAxMSwgMHgwMDFmLCAweDA4MGMsIDB4Y2EwMywgMHgwNGMwLCAweDIxMzAsCi0JMHgyMDA5LCAweDAwMzQsIDB4MjAxMSwgMHgwMDFmLCAweDA4MGMsIDB4Y2EwMywgMHg5NmIyLCAweDAwMzQsCi0JMHhiMDA0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDBmYzAsIDB4MDgwYywgMHgxMDBlLCAweDAxZDAsCi0JMHg4NTI4LCAweGE4NjcsIDB4MDExMCwgMHhhODZiLCAweDAwMDAsIDB4MjkyMCwgMHhiNDA2LCAweDk2OGEsCi0JMHgwMDNkLCAweDEyMzAsIDB4MjYwOCwgMHgyMDExLCAweDAwMWIsIDB4MDgwYywgMHhjYTAzLCAweDAwYjgsCi0JMHg5NmIyLCAweDAwM2MsIDB4MjAwOSwgMHgwMDNjLCAweDI5NTAsIDB4MjAxMSwgMHgwMDFiLCAweDA4MGMsCi0JMHhjYTAzLCAweDBjMTgsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHgwMGFlLCAweDg1MmYsCi0JMHg5NWFkLCAweDAwNTAsIDB4YjU2NiwgMHhiMDcwLCAweGMwZmQsIDB4YjA3MiwgMHgwMDQ4LCAweDIwMDEsCi0JMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHgwMGFlLCAweDg1MmYsIDB4OTVhZCwgMHgwMDUwLCAweGI1NjYsCi0JMHgyYTQ4LCAweGE4MDQsIDB4YTgwNywgMHgwMDAwLCAweDAwMDYsIDB4MDgwYywgMHg2ZGQxLCAweDAwMGUsCi0JMHgyMDQ4LCAweDkwMDUsIDB4MWRiMCwgMHgwMGZlLCAweDAwYWUsIDB4MDA5ZSwgMHgwMDZlLCAweDAwNWUsCi0JMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwZjYsIDB4MDA5NiwgMHgwMDA2LCAweDA4MGMsCisJMHg4NTI5LCAweDc1NTYsIDB4OWNhOCwgMHgwMDE4LCAweDcwNjgsIDB4OTUwMiwgMHgxMjMwLCAweDc1NWEsCisJMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4NzA1YiwgMHgxY2QwLCAweDBjYzAsCisJMHg5MDA2LCAweDBjYzAsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzU1NCwgMHg5NTgyLCAweDAwMTAsCisJMHgwNjAwLCAweDcwNTgsIDB4MjA2MCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDljZTAsCisJMHgwMDE4LCAweDcwNjgsIDB4OWMwMiwgMHgxMjA4LCAweDBjYjAsIDB4MjA2MSwgMHgxY2QwLCAweDBjOTgsCisJMHg2MDAzLCAweDAwMDgsIDB4ODUyOSwgMHg3NTU2LCAweDljYTgsIDB4MDAxOCwgMHg3MDY4LCAweDk1MDIsCisJMHgxMjI4LCAweDc1NWEsIDB4OTA4NSwgMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwgMHg3MDViLCAweDFjZDAsCisJMHgwY2M4LCAweDkwMDYsIDB4MGNjOCwgMHg5YzgyLCAweDFjZDAsIDB4MGEwYywgMHgwZGM1LCAweDIwMDEsCisJMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxYTBjLCAweDBkYzUsIDB4OTAwNiwgMHg2MDA2LCAweDYwMGEsCisJMHg2MDBlLCAweDYwMTYsIDB4NjAxYSwgMHg2MDEyLCAweDYwMjMsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDAsCisJMHg2MDFlLCAweDYwNTYsIDB4NjA1YSwgMHg2MDI2LCAweDYwMmEsIDB4NjAyZSwgMHg2MDMyLCAweDYwMzYsCisJMHg2MDNhLCAweDYwM2UsIDB4NjA0MiwgMHg2MDJhLCAweDIwNjEsIDB4MTgwMCwgMHg2MDU0LCAweDgwMDAsCisJMHg2MDU2LCAweDkwODYsIDB4MDAwMSwgMHgwMTA4LCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwMDE2LCAweDA4MGMsIDB4OWFiMSwgMHgwMDFlLCAweDAxMmUsIDB4MGNiMCwgMHgwMDA2LCAweDYwMDAsCisJMHg5MDg2LCAweDAwMDAsIDB4MDFjMCwgMHg2MDFjLCAweGQwODQsIDB4MTkwYywgMHgxYThlLCAweDYwMTcsCisJMHgwMDAwLCAweDYwMjMsIDB4MDAwNywgMHgyMDAxLCAweDE5ODYsIDB4MjAwNCwgMHgwMDA2LCAweDkwODIsCisJMHgwMDUxLCAweDAwMGUsIDB4MDIwOCwgMHg4MDA0LCAweDYwMWEsIDB4MDgwYywgMHhlZTg3LCAweDYwNDMsCisJMHgwMDAwLCAweDYwMTMsIDB4MDAwMCwgMHgwMDBlLCAweDAwMDUsIDB4MDBlNiwgMHgwMTI2LCAweDIwNzEsCisJMHgxODAwLCAweDIwOTEsIDB4ODAwMCwgMHg3NTU0LCAweDk1ODIsIDB4MDAwMSwgMHgwNjA4LCAweDcwNTgsCisJMHgyMDYwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4OWNlMCwgMHgwMDE4LCAweDcwNjgsCisJMHg5YzAyLCAweDEyMDgsIDB4MGNiMCwgMHgyMDYxLCAweDFjZDAsIDB4MGM5OCwgMHg2MDAzLCAweDAwMDgsCisJMHg4NTI5LCAweDc1NTYsIDB4OWNhOCwgMHgwMDE4LCAweDcwNjgsIDB4OTUwMiwgMHgxMjMwLCAweDc1NWEsCisJMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4NzA1YiwgMHgxY2QwLCAweDBjYzAsCisJMHg5MDA2LCAweDBjYzAsIDB4NjAyMCwgMHg5MDg0LCAweDAwMGYsIDB4MDAwMiwgMHhiMzY1LCAweGIzNmUsCisJMHhiMzg5LCAweGIzYTQsIDB4ZDgyYiwgMHhkODQ4LCAweGQ4NjMsIDB4YjM2NSwgMHhiMzZlLCAweDkxMDAsCisJMHhiM2JkLCAweGIzNjUsIDB4YjM2NSwgMHhiMzY1LCAweGIzNjUsIDB4OTE4NiwgMHgwMDEzLCAweDExMjgsCisJMHgwODBjLCAweDk5YTUsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDY2LCAweDYwMDAsCisJMHg5MGIyLCAweDAwMTAsIDB4MWEwYywgMHgwZGM1LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LCAweGIzODcsCisJMHhiYjA1LCAweGJjZmQsIDB4YjM4NywgMHhiZDkzLCAweGI2YTAsIDB4YjM4NywgMHhiMzg3LCAweGJhODcsCisJMHhjM2IxLCAweGIzODcsIDB4YjM4NywgMHhiMzg3LCAweGIzODcsIDB4YjM4NywgMHhiMzg3LCAweDA4MGMsCisJMHgwZGM1LCAweDAwNjYsIDB4NjAwMCwgMHg5MGIyLCAweDAwMTAsIDB4MWEwYywgMHgwZGM1LCAweDAwMTMsCisJMHgwMDZlLCAweDAwMDUsIDB4YjNhMiwgMHhjYTdlLCAweGIzYTIsIDB4YjNhMiwgMHhiM2EyLCAweGIzYTIsCisJMHhiM2EyLCAweGIzYTIsIDB4Y2ExNSwgMHhjYzAwLCAweGIzYTIsIDB4Y2FiZiwgMHhjYjNlLCAweGNhYmYsCisJMHhjYjNlLCAweGIzYTIsIDB4MDgwYywgMHgwZGM1LCAweDYwMDAsIDB4OTA4MiwgMHgwMDEwLCAweDFhMGMsCisJMHgwZGM1LCAweDYwMDAsIDB4MDAwMiwgMHhiM2JiLCAweGMzZjgsIDB4YzRjMCwgMHhjNWYzLCAweGM3YTIsCisJMHhiM2JiLCAweGIzYmIsIDB4YjNiYiwgMHhjM2NjLCAweGM5YTEsIDB4YzlhNCwgMHhiM2JiLCAweGIzYmIsCisJMHhiM2JiLCAweGIzYmIsIDB4YzlkMywgMHgwODBjLCAweDBkYzUsIDB4MDA2NiwgMHg2MDAwLCAweDkwYjIsCisJMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwgMHhiM2Q2LCAweGIzZDYsCisJMHhiNDE5LCAweGI0YjgsIDB4YjU0ZCwgMHhiM2Q2LCAweGIzZDYsIDB4YjNkNiwgMHhiM2Q4LCAweGIzZDYsCisJMHhiM2Q2LCAweGIzZDYsIDB4YjNkNiwgMHhiM2Q2LCAweGIzZDYsIDB4YjNkNiwgMHgwODBjLCAweDBkYzUsCisJMHg5MTg2LCAweDAwNGMsIDB4MDU4OCwgMHg5MTg2LCAweDAwMDMsIDB4MTkwYywgMHgwZGM1LCAweDAwOTYsCisJMHg2MDFjLCAweGMwZWQsIDB4NjAxZSwgMHg2MDAzLCAweDAwMDMsIDB4NjEwNiwgMHg2MDE0LCAweDIwNDgsCisJMHhhODdjLCAweDkwODQsIDB4YTAwMCwgMHhjMGI1LCAweGE4N2UsIDB4YThhYywgMHhhODQ2LCAweGE4YjAsCisJMHhhODRhLCAweDkwMDYsIDB4YTgzNiwgMHhhODNhLCAweGE4ODQsIDB4OTA5MiwgMHgxOTlhLCAweDAyMTAsCisJMHgyMDAxLCAweDE5OTksIDB4ODAwMywgMHg4MDEzLCAweDgyMTMsIDB4OTIxMCwgMHg2MjFhLCAweDAwOWUsCisJMHgyYzEwLCAweDA4MGMsIDB4MWJlMCwgMHgwODBjLCAweDk1NjQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwODBjLCAweDliZDMsIDB4MDEyZSwgMHgwMDA1LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGJjYTAsCisJMHgwMGJlLCAweDJjMDAsIDB4MDgwYywgMHhiNTZmLCAweDA4MGMsIDB4ZDdmYiwgMHg2MDAzLCAweDAwMDcsCisJMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwMGY2LCAweDIwNzksIDB4MTgwMCwgMHg3YTkwLCAweDYwMTQsCisJMHgyMDQ4LCAweGE4N2MsIDB4ZDBlYywgMHgxMTEwLCAweDkyOTAsIDB4MDAxOCwgMHhhYzc4LCAweGM0ZmMsCisJMHgwMDQ2LCAweGE4ZTAsIDB4OTAwNSwgMHgxMTQwLCAweGE4ZGMsIDB4OTIxYSwgMHgwMTQwLCAweDAyMjAsCisJMHhhODdiLCAweDAwMDcsIDB4MjAxMCwgMHgwMDI4LCAweGE4N2IsIDB4MDAxNSwgMHgwMDEwLCAweGE4N2IsCisJMHgwMDAwLCAweDgyMTQsIDB4YTg4MywgMHgwMDAwLCAweGFhMDIsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsCisJMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDI0MDAsIDB4OTAwNSwgMHgxMTA4LCAweDAwOWEsCisJMHgyMTAwLCAweDkwODYsIDB4MDAxNSwgMHgxMTE4LCAweDIwMDEsIDB4MDAwMSwgMHgwMDM4LCAweDIxMDAsCisJMHg5MDg2LCAweDAwMTYsIDB4MDExOCwgMHgyMDAxLCAweDAwMDEsIDB4MDAyYSwgMHg5NGE0LCAweDAwMDcsCisJMHg4NDIzLCAweDk0MDUsIDB4MDAwMiwgMHhiNDgwLCAweGI0ODAsIDB4YjQ3YiwgMHhiNDdlLCAweGI0ODAsCisJMHhiNDc4LCAweGI0NmIsIDB4YjQ2YiwgMHhiNDZiLCAweGI0NmIsIDB4YjQ2YiwgMHhiNDZiLCAweGI0NmIsCisJMHhiNDZiLCAweGI0NmIsIDB4YjQ2YiwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMmUsCisJMHgwMDFlLCAweDAwMGUsIDB4MDA0ZSwgMHgwMGZlLCAweDAwOWUsIDB4MDBkZSwgMHgwODBjLCAweDBkYzUsCisJMHgwODBjLCAweGJmYWIsIDB4MDAyOCwgMHgwODBjLCAweGMwZTksIDB4MDAxMCwgMHgwODBjLCAweGMxZGYsCisJMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMmUsIDB4MDAxZSwgMHgyYzAwLCAweGE4OTYsCisJMHgwMDBlLCAweDA4MGMsIDB4YjYyZCwgMHgwNTMwLCAweGE4MDQsIDB4YTgwZSwgMHgwMGE2LCAweDIwNTAsCisJMHhiMTAwLCAweDAwYWUsIDB4ODAwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsCisJMHhmZmMwLCAweDkwODAsIDB4MDAwMiwgMHhhYWNjLCAweGFiZDAsIDB4YWNkNCwgMHhhZGQ4LCAweDIwMzEsCisJMHgwMDAwLCAweDIwNDEsIDB4MTI2YywgMHgwODBjLCAweGI3ZjEsIDB4MDE2MCwgMHgwMDBlLCAweDkwMDUsCisJMHgwMTIwLCAweDAwZmUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBmZSwgMHgwMDllLCAweDAwZGUsCisJMHgwODA0LCAweGIyZDMsIDB4MjAwMSwgMHgwMDJjLCAweDkwMGUsIDB4MDgwYywgMHhiNjkzLCAweDBjNzAsCisJMHg5MWI2LCAweDAwMTUsIDB4MDE3MCwgMHg5MWI2LCAweDAwMTYsIDB4MDE1OCwgMHg5MWIyLCAweDAwNDcsCisJMHgwYTBjLCAweDBkYzUsIDB4OTFiMiwgMHgwMDUwLCAweDFhMGMsIDB4MGRjNSwgMHg5MTgyLCAweDAwNDcsCisJMHgwMGNhLCAweDIwMDEsIDB4MDEwOSwgMHgyMDA0LCAweGQwOGMsIDB4MDE5OCwgMHgwMTI2LCAweDIwOTEsCisJMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4OTRiMSwgMHgwMDJlLCAweDAwMWUsCisJMHgwMDBlLCAweDAxMmUsIDB4YTAwMSwgMHg2MDAwLCAweDkwODYsIDB4MDAwMiwgMHgxMTEwLCAweDA4MDQsCisJMHhiNDE5LCAweDAwMDUsIDB4YjRlYiwgMHhiNGViLCAweGI0ZWQsIDB4YjUyMywgMHhiNGViLCAweGI0ZWIsCisJMHhiNGViLCAweGI0ZWIsIDB4YjUzNiwgMHgwODBjLCAweDBkYzUsIDB4MDBkNiwgMHgwMDE2LCAweDAwOTYsCisJMHgwODBjLCAweDlhNjEsIDB4MDgwYywgMHg5YmQzLCAweDYwMDMsIDB4MDAwNCwgMHg2MTE0LCAweDIxNDgsCisJMHhhODdjLCAweGQwZmMsIDB4MDFjMCwgMHhhODc4LCAweGMwZmMsIDB4OTAwNSwgMHgxMTU4LCAweGE4OTQsCisJMHg5MDA1LCAweDAxNDAsIDB4MjAwMSwgMHgwMDAwLCAweDkwMGUsIDB4MDgwYywgMHhiNjkzLCAweDA4MGMsCisJMHhiMmQzLCAweDAwYTgsIDB4NjAwMywgMHgwMDAyLCAweGE4YTQsIDB4YTlhOCwgMHg5MTA1LCAweDExNzgsCisJMHhhOGFlLCAweGE4YjIsIDB4MGM3OCwgMHhhODdmLCAweDAwMjAsIDB4YTg4YywgMHhhODhhLCAweGE4YTQsCisJMHhhOGFlLCAweGE4YTgsIDB4YThiMiwgMHhhOGM3LCAweDAwMDAsIDB4YThjYiwgMHgwMDAwLCAweDAwOWUsCisJMHgwMDFlLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDlhNjEsIDB4MDBkNiwgMHgwMDk2LCAweDYxMTQsCisJMHgyMTQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTIwLCAweGE4N2IsIDB4MDAwNiwgMHgwODBjLCAweDZlOWYsCisJMHgwMDllLCAweDAwZGUsIDB4MDgwYywgMHhiMmQzLCAweDA4MDQsIDB4OWJkMywgMHgwODBjLCAweDlhNjEsCisJMHgwODBjLCAweDMyNTAsIDB4MDgwYywgMHhkN2Y4LCAweDAwZDYsIDB4MDA5NiwgMHg2MTE0LCAweDIxNDgsCisJMHgwODBjLCAweGQwZDgsIDB4MDEyMCwgMHhhODdiLCAweDAwMjksIDB4MDgwYywgMHg2ZTlmLCAweDAwOWUsCisJMHgwMGRlLCAweDA4MGMsIDB4YjJkMywgMHgwODA0LCAweDliZDMsIDB4OTE4MiwgMHgwMDQ3LCAweDAwMDIsCisJMHhiNTVkLCAweGI1NWYsIDB4YjU1ZCwgMHhiNTVkLCAweGI1NWQsIDB4YjU1ZCwgMHhiNTVkLCAweGI1NWQsCisJMHhiNTVkLCAweGI1NWQsIDB4YjU1ZCwgMHhiNTVkLCAweGI1NWYsIDB4MDgwYywgMHgwZGM1LCAweDAwZDYsCisJMHgwMDk2LCAweDYwMWYsIDB4MDAwMCwgMHg2MTE0LCAweDIxNDgsIDB4YTg3YiwgMHgwMDAwLCAweGE4ODMsCisJMHgwMDAwLCAweDA4MGMsIDB4NmU5ZiwgMHgwMDllLCAweDAwZGUsIDB4MDgwNCwgMHhiMmQzLCAweDAwMjYsCisJMHgwMDM2LCAweDAwNTYsIDB4MDA2NiwgMHgwMDk2LCAweDAwYTYsIDB4MDBmNiwgMHgwMDA2LCAweDA4MGMsCiAJMHgxMDBlLCAweDAwMGUsIDB4MDkwYywgMHgwZGM1LCAweGE5NjAsIDB4MjFlOCwgMHhhOTVjLCAweDkxODgsCi0JMHgwMDE5LCAweDIxYTAsIDB4OTAwZSwgMHgyMGE5LCAweDAwMjAsIDB4NDEwNCwgMHhhYTY2LCAweGE4N2EsCi0JMHgyMDc5LCAweDE4MDAsIDB4Nzk5MCwgMHg4MTBjLCAweDkxODgsIDB4MDAwYywgMHg5MTgyLCAweDAwMWEsCi0JMHgwMjEwLCAweDIwMDksIDB4MDAxYSwgMHgyMWE4LCAweDgxMGIsIDB4YTk3MiwgMHhhYzc2LCAweDJlOTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAxZiwgMHgyMGEwLCAweDIwMDEsIDB4MDIwNSwgMHgyMDBjLCAweDkxOGQsCi0JMHgwMDgwLCAweDIxMDIsIDB4NDAwMywgMHgyMDAzLCAweDAwMDAsIDB4MDgwYywgMHg2ZGQxLCAweDAwOWUsCi0JMHgwMGZlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDE2LCAweDAwZDYsIDB4MDBmNiwgMHgwMDk2LCAweDAwMTYsCi0JMHgyMDAxLCAweDAyMDUsIDB4MjAwYywgMHg5MThkLCAweDAwODAsIDB4MjEwMiwgMHgwMDFlLCAweDIwNzksCi0JMHgwMjAwLCAweDJlOTgsIDB4YTg3YywgMHhkMGVjLCAweDAxMTgsIDB4OWU4MCwgMHgwMDBjLCAweDIwOTgsCi0JMHgyMDIxLCAweDAwM2UsIDB4OTAxZSwgMHg5MjgyLCAweDAwMjAsIDB4MDIxOCwgMHgyMDExLCAweDAwMjAsCi0JMHgyMDE4LCAweDk0ODYsIDB4MDAzZSwgMHgxMTcwLCAweDAwOTYsIDB4MDgwYywgMHgxMDBlLCAweDI5MDAsCi0JMHgwMDllLCAweDA1YzAsIDB4YTgwNiwgMHgyMDQ4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDAyLCAweDIwYTAsIDB4MzMwMCwgMHg5MDhlLCAweDAyNjAsIDB4MDE0MCwgMHgyMDA5LCAweDAyODAsCi0JMHg5MTAyLCAweDkyMGEsIDB4MDIxOCwgMHgyMDEwLCAweDIxMDAsIDB4OTMxOCwgMHgyMjAwLCAweDk0MDIsCi0JMHgxMjI4LCAweDI0MDAsIDB4OTIwMiwgMHgyNDEwLCAweDkzMTgsIDB4OTAwNiwgMHgyMDIwLCAweDIyYTgsCi0JMHhhODAwLCAweDkyMDAsIDB4YTgwMiwgMHgyMGUxLCAweDAwMDAsIDB4NDAwMywgMHg4M2ZmLCAweDAxODAsCi0JMHgzMzAwLCAweDkwODYsIDB4MDI4MCwgMHgxMTMwLCAweDc4MTQsIDB4ODAwMCwgMHg5MDg1LCAweDAwODAsCi0JMHg3ODE2LCAweDJlOTgsIDB4MjMxMCwgMHg4NGZmLCAweDA5MDQsIDB4YjQ3MCwgMHgwODA0LCAweGI0NzIsCi0JMHg5MDg1LCAweDAwMDEsIDB4NzgxNywgMHgwMDAwLCAweDAwOWUsIDB4MDBmZSwgMHgwMGRlLCAweDAwMWUsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHgwMDk2LCAweDYzMTQsIDB4MjM0OCwgMHhhODdhLCAweGE5ODIsCi0JMHgwODBjLCAweDZkYzQsIDB4MDA5ZSwgMHgwMDNlLCAweDAwZGUsIDB4MDAwNSwgMHg5MWI2LCAweDAwMTUsCi0JMHgxMTE4LCAweDA4MGMsIDB4YjEwMSwgMHgwMDMwLCAweDkxYjYsIDB4MDAxNiwgMHgxOTBjLCAweDBkYzUsCi0JMHgwODBjLCAweGIxMDEsIDB4MDAwNSwgMHgyMGE5LCAweDAwMGUsIDB4MjBlMSwgMHgwMDAwLCAweDJlOTgsCi0JMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHgyMGEwLCAweDAwOWUsCi0JMHg0MDAzLCAweDkxOTYsIDB4MDAxNiwgMHgwMWYwLCAweDAxMzYsIDB4OTA4MCwgMHgwMDFiLCAweDIwYTAsCi0JMHgyMDExLCAweDAwMDYsIDB4MjBhOSwgMHgwMDAxLCAweDM0MTgsIDB4ODMxOCwgMHgyM2EwLCAweDQwMDMsCi0JMHgzMzE4LCAweDgzMTgsIDB4MjM5OCwgMHg4MjExLCAweDFkYjgsIDB4MjAxMSwgMHgwMDA2LCAweDAxM2UsCi0JMHgyMGEwLCAweDMzMTgsIDB4ODMxOCwgMHgyMzk4LCAweDQwMDMsIDB4MzQxOCwgMHg4MzE4LCAweDIzYTAsCi0JMHg4MjExLCAweDFkYjgsIDB4MDA5NiwgMHgwODBjLCAweGNlNTYsIDB4MDEzMCwgMHg2MDE0LCAweDIwNDgsCi0JMHhhODA3LCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweDAwOWUsIDB4MDgwNCwgMHhiMTAxLCAweDAwOTYsCi0JMHgwMGQ2LCAweDAwMzYsIDB4NzMzMCwgMHg5Mzg2LCAweDAyMDAsIDB4MTFhOCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4Y2YsIDB4MDAwMCwgMHgwMGJlLCAweDYwMTQsIDB4OTAwNSwgMHgwMTMwLCAweDIwNDgsCi0JMHhhODA3LCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweGFiMzIsIDB4MDgwYywgMHhiMTAxLCAweDAwM2UsCi0JMHgwMGRlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDExLCAweDFkNDgsIDB4MGNjOCwgMHgwMDA2LCAweDAwMTYsCi0JMHgwODBjLCAweGQ1NjEsIDB4MDE4OCwgMHg2MDE0LCAweDkwMDUsIDB4MTE3MCwgMHg2MDBiLCAweDAwMDMsCi0JMHg2MDFiLCAweDAwMDAsIDB4NjA0MywgMHgwMDAwLCAweDIwMDksIDB4MDAyMiwgMHgwODBjLCAweGI5MDksCi0JMHg5MDA2LCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwY2QwLCAweDAwOTYsCi0JMHgwMDE2LCAweDIwYTksIDB4MDAxNCwgMHg5ZTgwLCAweDAwMGMsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTgsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDAyLCAweDIwYTAsCi0JMHg0MDAzLCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDEsIDB4MjA5OSwgMHgwMjYwLCAweDIwYTksCi0JMHgwMDE2LCAweDQwMDMsIDB4MjBhOSwgMHgwMDBhLCAweGE4MDQsIDB4MjA0OCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLCAweDQwMDMsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsCi0JMHgwMDAyLCAweDIwOTksIDB4MDI2MCwgMHgyMGE5LCAweDAwMjAsIDB4NDAwMywgMHgyMDAzLCAweDAwMDAsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LCAweGE4NjcsIDB4MDEwMywgMHgwODBjLCAweGIxMDEsCi0JMHgwMDFlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDk2LCAweDAwMTYsIDB4OTAwZSwgMHg3MDMwLCAweDkwODYsCi0JMHgwMTAwLCAweDAxNDAsIDB4NzAzOCwgMHg5MDg0LCAweDAwZmYsIDB4ODAwYywgMHg3MDNjLCAweDkwODQsCi0JMHgwMGZmLCAweDgwMDQsIDB4OTA4MCwgMHgwMDA0LCAweDkxMDgsIDB4ODEwYiwgMHgyMDExLCAweDAwMDIsCi0JMHgyMDE5LCAweDAwMGMsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2EwMywgMHgwODBjLCAweGNlNTYsCi0JMHgwMTQwLCAweDYwMTQsIDB4MjA0OCwgMHhhODA3LCAweDAwMDAsIDB4YTg2NCwgMHhhOGUyLCAweGE4NjcsCi0JMHgwMTAzLCAweDA4MGMsIDB4YjEwMSwgMHgwMDFlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDE2LCAweDIwMDksCi0JMHgwMDAwLCAweDcwMzAsIDB4OTA4NiwgMHgwMjAwLCAweDAxMTAsIDB4MjAwOSwgMHgwMDAxLCAweDAwOTYsCi0JMHg2MDE0LCAweDkwNGQsIDB4MDkwYywgMHgwZGM1LCAweGE5N2EsIDB4MDgwYywgMHg2ZGQxLCAweDAwOWUsCi0JMHgwODBjLCAweGIxMDEsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDA5NiwgMHg3MDMwLCAweDkwODYsCi0JMHgwMTAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDA0LCAweDAwMTAsIDB4NzAzNCwgMHg4MDBjLCAweDgxMGIsCi0JMHgyMDExLCAweDAwMGMsIDB4MjAxOSwgMHgwMDBjLCAweDYwMTQsIDB4MjA0OCwgMHhhODA0LCAweDAwOTYsCi0JMHg5MDA1LCAweDAxMDgsIDB4MjA0OCwgMHgwODBjLCAweGNhMDMsIDB4MDA5ZSwgMHgwODBjLCAweGNlNTYsCi0JMHgwMTQ4LCAweGE4MDQsIDB4OTAwNSwgMHgxMTU4LCAweGE4MDcsIDB4MDAwMCwgMHhhODY0LCAweGE4ZTIsCi0JMHhhODY3LCAweDAxMDMsIDB4MDgwYywgMHhiMTAxLCAweDAwOWUsIDB4MDAxZSwgMHgwMDA1LCAweDAwODYsCi0JMHgyMDQwLCAweGEwMzAsIDB4ODAwNywgMHg5MDg2LCAweDAxMDAsIDB4MTExOCwgMHgwODBjLCAweGJhZTIsCi0JMHgwMGUwLCAweGEwMzQsIDB4ODAwNywgMHg4MDBjLCAweDg4MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsCi0JMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMGMsIDB4YTg3YiwgMHgwMDAwLCAweGE4ODMsCi0JMHgwMDAwLCAweGE4OTcsIDB4NDAwMCwgMHhhYWEwLCAweGFiOWMsIDB4YWNhOCwgMHhhZGE0LCAweDIwMzEsCi0JMHgwMDAwLCAweDIwNDEsIDB4MTI1MiwgMHgwMDE5LCAweDBkMDgsIDB4MDA4ZSwgMHgwODk4LCAweDAwOTYsCi0JMHgwMDA2LCAweDA4MGMsIDB4MTAwZSwgMHgwMDBlLCAweDAxYjAsIDB4YThhYiwgMHgwZGNiLCAweGE4NzYsCi0JMHgwMDBlLCAweGE4YTIsIDB4MDAwNiwgMHhhZTZhLCAweDI4MDAsIDB4YTg5ZSwgMHhhOTdhLCAweGFmNzIsCi0JMHhhYThlLCAweGFiOTIsIDB4YWM5NiwgMHhhZDlhLCAweDAwODYsIDB4Mjk0MCwgMHgwODBjLCAweDEwZjgsCi0JMHgwMDhlLCAweDkwODUsIDB4MDAwMSwgMHgwMDllLCAweDAwMDUsIDB4MDBlNiwgMHgwMGQ2LCAweDAwMjYsCi0JMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MjEwLCAweDAwYjYsIDB4MjI1OCwgMHhiYTEwLCAweDAwYmUsCi0JMHg5MjA2LCAweDE1MjAsIDB4NzAwYywgMHg2MjEwLCAweDAwYjYsIDB4MjI1OCwgMHhiYTE0LCAweDAwYmUsCi0JMHg5MjA2LCAweDExZTAsIDB4NjA0MywgMHgwMDAwLCAweDJjNjgsIDB4MDAxNiwgMHgyMDA5LCAweDAwMzUsCi0JMHgwODBjLCAweGQ0ZDcsIDB4MDAxZSwgMHgxMTU4LCAweDYyMmMsIDB4MjI2OCwgMHgyMDcxLCAweDAyNmMsCi0JMHg2YjIwLCAweDkzODYsIDB4MDAwMywgMHgwMTMwLCAweDkzODYsIDB4MDAwNiwgMHgwMTI4LCAweDA4MGMsCi0JMHhiMTAxLCAweDAwMjAsIDB4MDAzOSwgMHgwMDEwLCAweDA4MGMsIDB4YjczZSwgMHgwMDJlLCAweDAwZGUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDA5NiwgMHg2ODE0LCAweDIwNDgsIDB4OTE4NiwgMHgwMDE1LCAweDA5MDQsCi0JMHhiNzI2LCAweDkxOGUsIDB4MDAxNiwgMHgxOTA0LCAweGI3M2MsIDB4NzAwYywgMHg5MDhjLCAweGZmMDAsCi0JMHg5MTg2LCAweDE3MDAsIDB4MDEyMCwgMHg5MTg2LCAweDAzMDAsIDB4MTkwNCwgMHhiNzAwLCAweDg5ZmYsCi0JMHgxMTM4LCAweDY4MDAsIDB4OTA4NiwgMHgwMDBmLCAweDA5MDQsIDB4YjZlMywgMHgwODA0LCAweGI3M2EsCi0JMHg2ODA4LCAweDkwODYsIDB4ZmZmZiwgMHgxOTA0LCAweGI3MjgsIDB4YTg3YywgMHg5MDg0LCAweDAwNjAsCi0JMHg5MDg2LCAweDAwMjAsIDB4MTEyOCwgMHhhODNjLCAweGE5NDAsIDB4OTEwNSwgMHgxOTA0LCAweGI3MjgsCi0JMHg2ODI0LCAweGQwODQsIDB4MTkwNCwgMHhiNzI4LCAweGQwYjQsIDB4MDE1OCwgMHgwMDE2LCAweDIwMDEsCi0JMHgxOTg3LCAweDIwMGMsIDB4NjAxOCwgMHg5MTAyLCAweDkwODIsIDB4MDAwNSwgMHgwMDFlLCAweDFhMDQsCi0JMHhiNzI4LCAweDA4MGMsIDB4ZDA0MSwgMHg2ODVjLCAweGE4ODIsIDB4YTg3YywgMHhjMGRjLCAweGMwZjQsCi0JMHhjMGQ0LCAweGE4N2UsIDB4MDAyNiwgMHg5MDBlLCAweDZhMTgsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsCi0JMHg5MWIxLCAweGE4ODQsIDB4OTIwYSwgMHgwMjA4LCAweDgwMTEsIDB4YWE4NiwgMHg4MmZmLCAweDAwMmUsCi0JMHgxMTM4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweGNiNjUsIDB4MDBjZSwgMHgwODA0LCAweGI3M2EsCi0JMHgwMGM2LCAweGE4NjgsIDB4ZDBmYywgMHgxMTE4LCAweDA4MGMsIDB4NjFiYiwgMHgwMDEwLCAweDA4MGMsCi0JMHg2NWM4LCAweDAwY2UsIDB4MTkwNCwgMHhiNzI4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweGIxMDEsCi0JMHgwMGNlLCAweDA4MDQsIDB4YjczYSwgMHgwMGM2LCAweDA4MGMsIDB4YjE1MywgMHgwMTk4LCAweDYwMTcsCi0JMHgwMDAwLCAweDY4MTAsIDB4NjAxMiwgMHgwODBjLCAweGQyZDIsIDB4NjAyMywgMHgwMDAzLCAweDY5MDQsCi0JMHgwMGM2LCAweDJkNjAsIDB4MDgwYywgMHhiMTAxLCAweDAwY2UsIDB4MDgwYywgMHhiMTgwLCAweDAwY2UsCi0JMHgwODA0LCAweGI3M2EsIDB4MjAwMSwgMHgxOTg5LCAweDIwMDQsIDB4Njg0MiwgMHgwMGNlLCAweDA0ZDAsCi0JMHg3MDA4LCAweDkwODYsIDB4MDAwYiwgMHgxMWM4LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI5MDAsCi0JMHhjMWJjLCAweGI5MDIsIDB4MDBiZSwgMHgwMGM2LCAweDJkNjAsIDB4YTg3YiwgMHgwMDAzLCAweDA4MGMsCi0JMHhkNTFiLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDAyLCAweDA4MGMsCi0JMHg5MzNiLCAweDA4MGMsIDB4OThlZCwgMHgwMGNlLCAweDAwZTgsIDB4NzAwYywgMHg5MDg2LCAweDJhMDAsCi0JMHgxMTM4LCAweDIwMDEsIDB4MTk4OSwgMHgyMDA0LCAweDY4NDIsIDB4MDBhMCwgMHgwNDc5LCAweDAwYTAsCi0JMHg4OWZmLCAweDA5MGMsIDB4MGRjNSwgMHgwMGM2LCAweDAwZDYsIDB4MmQ2MCwgMHhhODY3LCAweDAxMDMsCi0JMHhhODdiLCAweDAwMDMsIDB4MDgwYywgMHg2YmViLCAweDA4MGMsIDB4ZDA0MSwgMHgwODBjLCAweGIxMzQsCi0JMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHhiMTAxLCAweDAwOWUsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTUsCi0JMHgxMTI4LCAweDIwMDEsIDB4MTk4OSwgMHgyMDA0LCAweDY4NDIsIDB4MDA2OCwgMHg5MThlLCAweDAwMTYsCi0JMHgxMTYwLCAweDAwYzYsIDB4MmQwMCwgMHgyMDYwLCAweDA4MGMsIDB4ZWMwMiwgMHgwODBjLCAweDg4ZjEsCi0JMHgwODBjLCAweGIxMDEsIDB4MDBjZSwgMHgwODBjLCAweGIxMDEsIDB4MDAwNSwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMDQ2LCAweDcyMjgsIDB4YWNiMCwgMHhhYmFjLCAweGQyZjQsIDB4MDEzMCwgMHgyMDAxLCAweDE5ODksCi0JMHgyMDA0LCAweDY4NDIsIDB4MDgwNCwgMHhiN2I4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweGNhNjQsCi0JMHgwMGNlLCAweDY4MDQsIDB4OTA4NiwgMHgwMDUwLCAweDExNjgsIDB4MDBjNiwgMHgyZDAwLCAweDIwNjAsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDUwLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsCi0JMHgwMGNlLCAweDA0ZjAsIDB4NjgwMCwgMHg5MDg2LCAweDAwMGYsIDB4MDFhOCwgMHg4OWZmLCAweDA5MGMsCi0JMHgwZGM1LCAweDY4MDAsIDB4OTA4NiwgMHgwMDA0LCAweDExOTAsIDB4YTg3YywgMHhkMGFjLCAweDAxNzgsCi0JMHhhODQzLCAweDBmZmYsIDB4YTgzZiwgMHgwZmZmLCAweGE4ODAsIDB4YzBmYywgMHhhODgyLCAweDIwMDEsCi0JMHgwMDAxLCAweDY4MzIsIDB4MDQwMCwgMHgyMDAxLCAweDAwMDcsIDB4NjgzMiwgMHgwMGUwLCAweGE4N2MsCi0JMHhkMGI0LCAweDExNTAsIDB4ZDBhYywgMHgwZGI4LCAweDY4MjQsIDB4ZDBmNCwgMHgxZDQ4LCAweGE4MzgsCi0JMHhhOTM0LCAweDkxMDUsIDB4MGQ4MCwgMHgwYzIwLCAweGQyZWMsIDB4MWQ2OCwgMHg3MDI0LCAweDkzMDYsCi0JMHgxMTE4LCAweDcwMjAsIDB4OTQwNiwgMHgwZDM4LCAweDcwMjAsIDB4NjgzZSwgMHg3MDI0LCAweDY4M2EsCi0JMHgyMDAxLCAweDAwMDUsIDB4NjgzMiwgMHgwODBjLCAweGQxYzksIDB4MDgwYywgMHg5OGVkLCAweDAwMTAsCi0JMHgwODBjLCAweGIxMDEsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsCi0JMHgwMDI2LCAweDcwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDYyMTAsIDB4MDBiNiwgMHgyMjU4LCAweGJhMTAsCi0JMHgwMGJlLCAweDkyMDYsIDB4MTkwNCwgMHhiODIzLCAweDcwMGMsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCi0JMHhiYTE0LCAweDAwYmUsIDB4OTIwNiwgMHgxOTA0LCAweGI4MjMsIDB4NjAzOCwgMHgyMDY4LCAweDY4MjQsCi0JMHhjMGRjLCAweDY4MjYsIDB4NmEyMCwgMHg5Mjg2LCAweDAwMDcsIDB4MDkwNCwgMHhiODIzLCAweDkyODYsCi0JMHgwMDAyLCAweDA5MDQsIDB4YjgyMywgMHg5Mjg2LCAweDAwMDAsIDB4MDVlOCwgMHg2ODA4LCAweDYzM2MsCi0JMHg5MzA2LCAweDE1YzgsIDB4MjA3MSwgMHgwMjZjLCAweDkxODYsIDB4MDAxNSwgMHgwNTcwLCAweDkxOGUsCi0JMHgwMDE2LCAweDExMDAsIDB4MDBjNiwgMHg2MDM4LCAweDIwNjAsIDB4NjEwNCwgMHg5MTg2LCAweDAwNGIsCi0JMHgwMWMwLCAweDkxODYsIDB4MDA0YywgMHgwMWE4LCAweDkxODYsIDB4MDA0ZCwgMHgwMTkwLCAweDkxODYsCi0JMHgwMDRlLCAweDAxNzgsIDB4OTE4NiwgMHgwMDUyLCAweDAxNjAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsCi0JMHgwODBjLCAweGNlNTYsIDB4MDkwYywgMHgwZGM1LCAweGE4N2IsIDB4MDAwMywgMHgwMDllLCAweDA4MGMsCi0JMHhkNTFiLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDAyLCAweDA4MGMsCi0JMHg5MzNiLCAweDA4MGMsIDB4OThlZCwgMHgwMGNlLCAweDAwMzAsIDB4NjAzOCwgMHgyMDcwLCAweDIwMDEsCi0JMHgxOTg5LCAweDIwMDQsIDB4NzA0MiwgMHgwODBjLCAweGIxMDEsIDB4MDAyZSwgMHgwMGRlLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGY2LCAweDYwMTQsIDB4MjA0OCwgMHg2MDEwLCAweDIwNTgsCi0JMHg5MWI2LCAweDAwMTUsIDB4MDEzMCwgMHhiYTA4LCAweGJiMGMsIDB4YmMwMCwgMHhjNDhjLCAweGJjMDIsCi0JMHgwNDYwLCAweDAwOTYsIDB4MDE1NiwgMHgwMDM2LCAweDAwMjYsIDB4MmI0OCwgMHg5ZTkwLCAweDAwMTAsCi0JMHgyMDE5LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4YzBmNywgMHgwMDJlLCAweDAwM2UsCi0JMHgwMTVlLCAweDAwOWUsIDB4MTkwNCwgMHhiODkyLCAweDAwOTYsIDB4MDE1NiwgMHgwMDM2LCAweDAwMjYsCi0JMHgyYjQ4LCAweDllOTAsIDB4MDAxNCwgMHgyMDE5LCAweDAwMDYsIDB4MjBhOSwgMHgwMDA0LCAweDA4MGMsCi0JMHhjMGY3LCAweDAwMmUsIDB4MDAzZSwgMHgwMTVlLCAweDAwOWUsIDB4MTVhMCwgMHg3MjM4LCAweGJhMGEsCi0JMHg3MzNjLCAweGJiMGUsIDB4YmMwMCwgMHhjNDhkLCAweGJjMDIsIDB4YTgwNCwgMHg5MDA1LCAweDExMjgsCi0JMHgwMGZlLCAweDAwOWUsIDB4MDBiZSwgMHgwODA0LCAweGI1MGEsIDB4MDA5NiwgMHgyMDQ4LCAweGFhMTIsCi0JMHhhYjE2LCAweGFjMGEsIDB4MDA5ZSwgMHg4MDA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsCi0JMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDAyLCAweDIwMDksIDB4MDAyYiwgMHhhYWEwLCAweGFiOWMsCi0JMHhhY2E4LCAweGFkYTQsIDB4MjAzMSwgMHgwMDAwLCAweDIwNDEsIDB4MTI1MiwgMHgwODBjLCAweGI2MWYsCi0JMHgwMTMwLCAweDAwZmUsIDB4MDA5ZSwgMHgwODBjLCAweGIxMDEsIDB4MDBiZSwgMHgwMDA1LCAweDA4MGMsCi0JMHhiYWUyLCAweDBjYjgsIDB4MmI3OCwgMHgwMGY2LCAweDA4MGMsIDB4MzI0NiwgMHgwODBjLCAweGQ1NzYsCi0JMHgwMGZlLCAweDAwYzYsIDB4MDgwYywgMHhiMGFiLCAweDJmMDAsIDB4NjAxMiwgMHg2MDE3LCAweDAwMDAsCi0JMHg2MDIzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDcsCi0JMHgwODBjLCAweDY2NjMsIDB4MDgwYywgMHg2NjhmLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsCi0JMHgwMGNlLCAweDA4MDQsIDB4Yjg2NSwgMHgyMTAwLCAweDkxYjIsIDB4MDA1MywgMHgxYTBjLCAweDBkYzUsCi0JMHg5MWIyLCAweDAwNDAsIDB4MWEwNCwgMHhiOTFiLCAweDAwMDIsIDB4YjkwOSwgMHhiOTA5LCAweGI4ZmYsCi0JMHhiOTA5LCAweGI5MDksIDB4YjkwOSwgMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsCi0JMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsCi0JMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsCi0JMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI5MDksIDB4YjhmZCwgMHhiOTA5LCAweGI5MDksCi0JMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsIDB4YjhmZiwgMHhiOGZkLCAweGI4ZmQsCi0JMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI5MDksCi0JMHhiOTA5LCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsIDB4YjhmZCwgMHhiOGZkLCAweGI4ZmQsCi0JMHhiOGZkLCAweGI4ZmQsIDB4YjkwOSwgMHhiOGZkLCAweGI4ZmQsIDB4MDgwYywgMHgwZGM1LCAweDAwNjYsCi0JMHgwMGI2LCAweDY2MTAsIDB4MjY1OCwgMHhiOGNjLCAweGMwOGMsIDB4YjhjZSwgMHgwMGJlLCAweDAwNmUsCi0JMHgwMDAwLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDkxODYsIDB4MDAzMiwgMHgwMTE4LCAweDA4MGMsCi0JMHg5MzgzLCAweDAwMTAsIDB4MDgwYywgMHg5MzNiLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg5OGVkLCAweDAxMmUsIDB4MDAwNSwgMHgyNjAwLCAweDAwMDIsIDB4YjkwOSwgMHhiOTA5LCAweGI5MmYsCi0JMHhiOTA5LCAweGI5MDksIDB4YjkyZiwgMHhiOTJmLCAweGI5MmYsIDB4YjkyZiwgMHhiOTA5LCAweGI5MmYsCi0JMHhiOTA5LCAweGI5MmYsIDB4YjkwOSwgMHhiOTJmLCAweGI5MmYsIDB4YjkyZiwgMHhiOTJmLCAweDA4MGMsCi0JMHgwZGM1LCAweDYwMDQsIDB4OTBiMiwgMHgwMDUzLCAweDFhMGMsIDB4MGRjNSwgMHg5MWI2LCAweDAwMTMsCi0JMHgwOTA0LCAweGJhMDQsIDB4OTFiNiwgMHgwMDI3LCAweDE5MDQsIDB4YjlhZSwgMHgwODBjLCAweDk3ZTEsCi0JMHg2MDA0LCAweDA4MGMsIDB4ZDA0ZCwgMHgwMWIwLCAweDA4MGMsIDB4ZDA1ZSwgMHgwMWE4LCAweDkwOGUsCi0JMHgwMDIxLCAweDA5MDQsIDB4YjlhYiwgMHg5MDhlLCAweDAwMjIsIDB4MTEzMCwgMHgwODBjLCAweGI1MzYsCi0JMHgwOTA0LCAweGI5YTcsIDB4MDgwNCwgMHhiOWE4LCAweDkwOGUsIDB4MDAzZCwgMHgwOTA0LCAweGI5YWIsCi0JMHgwODA0LCAweGI5YTEsIDB4MDgwYywgMHgzMjZmLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDY2NjMsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOWEwLCAweDAwYmUsIDB4MDgwYywgMHhiYWUyLCAweDkxODYsCi0JMHgwMDdlLCAweDExNDgsIDB4MjAwMSwgMHgxODM3LCAweDIwMTQsIDB4YzI4NSwgMHgwODBjLCAweDc1NjksCi0JMHgxMTA4LCAweGMyYWQsIDB4MjIwMiwgMHgwMDM2LCAweDAwMjYsIDB4MjAxOSwgMHgwMDI4LCAweDIxMTAsCi0JMHgwODBjLCAweGVkMGYsIDB4MDAyZSwgMHgwMDNlLCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDIxMTAsCi0JMHgyMDE5LCAweDAwMjgsIDB4MDgwYywgMHg5NGUwLCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweDkzYjMsCi0JMHg2MDEwLCAweDAwYjYsIDB4OTA1ZCwgMHgwMTAwLCAweDAwYmUsIDB4MmMwOCwgMHgwODBjLCAweGU2OTAsCi0JMHgwMDdlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDA4MGMsIDB4ZDU3NiwgMHgwMDE2LCAweDA4MGMsCi0JMHhkMmNhLCAweDA4MGMsIDB4YjEwMSwgMHgwMDFlLCAweDA4MGMsIDB4MzM0MiwgMHgwODBjLCAweDk4ZWQsCi0JMHgwMDMwLCAweDA4MGMsIDB4ZDJjYSwgMHgwODBjLCAweGIxMDEsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsCi0JMHgwODBjLCAweGJhZTIsIDB4MGNiMCwgMHgwODBjLCAweGJiMWUsIDB4MGM5OCwgMHg5MTg2LCAweDAwMTUsCi0JMHgwMTE4LCAweDkxODYsIDB4MDAxNiwgMHgxMTQ4LCAweDA4MGMsIDB4ZDU4NywgMHgwZDgwLCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDIsIDB4MDkwNCwgMHhiYjI5LCAweDBjNTAsIDB4OTE4NiwgMHgwMDE0LCAweDFkMzgsCi0JMHgwODBjLCAweDk3ZTEsIDB4NjAwNCwgMHg5MDhlLCAweDAwMjIsIDB4MTExOCwgMHgwODBjLCAweGI1MzYsCi0JMHgwOWYwLCAweDA4MGMsIDB4MzI0NiwgMHgwODBjLCAweGQ1NzYsIDB4MDgwYywgMHhkMDRkLCAweDExOTgsCi0JMHgwODBjLCAweDMyNmYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjlhMCwgMHgwMGJlLCAweDA4MGMsCi0JMHhiYWUyLCAweDkxODYsIDB4MDA3ZSwgMHgxMTI4LCAweDIwMDEsIDB4MTgzNywgMHgyMDBjLCAweGMxODUsCi0JMHgyMTAyLCAweDA4MDQsIDB4YjlhMSwgMHgwODBjLCAweGQwNWUsIDB4MTEyMCwgMHgwODBjLCAweGJhZTIsCi0JMHgwODA0LCAweGI5YTEsIDB4NjAwNCwgMHg5MDhlLCAweDAwMzIsIDB4MTE2MCwgMHgwMGU2LCAweDAwZjYsCi0JMHgyMDcxLCAweDE4OWUsIDB4MjA3OSwgMHgwMDAwLCAweDA4MGMsIDB4MzVkZCwgMHgwMGZlLCAweDAwZWUsCi0JMHgwODA0LCAweGI5YTEsIDB4NjAwNCwgMHg5MDhlLCAweDAwMjEsIDB4MGQ0MCwgMHg5MDhlLCAweDAwMjIsCi0JMHgwOTBjLCAweGJhZTIsIDB4MDgwNCwgMHhiOWExLCAweDkwYjIsIDB4MDA0MCwgMHgxYTA0LCAweGJhYmUsCi0JMHgyMDA4LCAweDAwMDIsIDB4YmE0YywgMHhiYTRkLCAweGJhNTAsIDB4YmE1MywgMHhiYTU2LCAweGJhNjMsCi0JMHhiYTRhLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhNGEsCi0JMHhiYTRhLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhNGEsCi0JMHhiYTRhLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhNGEsCi0JMHhiYTY2LCAweGJhNzMsIDB4YmE0YSwgMHhiYTc1LCAweGJhNzMsIDB4YmE0YSwgMHhiYTRhLCAweGJhNGEsCi0JMHhiYTRhLCAweGJhNGEsIDB4YmE3MywgMHhiYTczLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhNGEsCi0JMHhiYTRhLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhYTUsIDB4YmE3MywgMHhiYTRhLCAweGJhNmYsCi0JMHhiYTRhLCAweGJhNGEsIDB4YmE0YSwgMHhiYTcwLCAweGJhNGEsIDB4YmE0YSwgMHhiYTRhLCAweGJhNzMsCi0JMHhiYTljLCAweGJhNGEsIDB4MDgwYywgMHgwZGM1LCAweDA0MzAsIDB4MjAwMSwgMHgwMDBiLCAweDA0NzAsCi0JMHgyMDAxLCAweDAwMDMsIDB4MDQ1OCwgMHgyMDAxLCAweDAwMDUsIDB4MDQ0MCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4MDQsIDB4MDBiZSwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDAwLCAweDE1MDAsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDBkOCwgMHgyMDAxLCAweDAwMDksIDB4MDBjMCwgMHgwODBjLCAweDk3ZTEsCi0JMHg2MDAzLCAweDAwMDUsIDB4MDgwYywgMHhkNTc5LCAweDA4MGMsIDB4OThlZCwgMHgwMDcwLCAweDAwMTgsCi0JMHgwMDEwLCAweDA4MGMsIDB4NjY2MywgMHgwODA0LCAweGJhYjYsIDB4MDgwYywgMHg5N2UxLCAweDA4MGMsCi0JMHhkNTc5LCAweDYwMDMsIDB4MDAwNCwgMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwODBjLCAweDY2NjMsCi0JMHgwODBjLCAweDk3ZTEsIDB4NjAwMywgMHgwMDAyLCAweDAwMzYsIDB4MjAxOSwgMHgxODUyLCAweDIzMDQsCi0JMHg5MDg0LCAweGZmMDAsIDB4MTEyMCwgMHgyMDAxLCAweDE5ODcsIDB4MjAxYywgMHgwMDQwLCAweDgwMDcsCi0JMHg5MDlhLCAweDAwMDQsIDB4MGVjMCwgMHg4MDAzLCAweDgwMWIsIDB4ODMxYiwgMHg5MzE4LCAweDYzMWEsCi0JMHgwMDNlLCAweDA4MGMsIDB4OThlZCwgMHgwYzA4LCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweGQyY2EsCi0JMHgwODBjLCAweGIxMDEsIDB4MDgwYywgMHg5OGVkLCAweDA4YzAsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsCi0JMHgxODllLCAweDIwNzksIDB4MDAwMCwgMHgwODBjLCAweDM1ZGQsIDB4MDBmZSwgMHgwMGVlLCAweDA4MGMsCi0JMHg5N2UxLCAweDA4MGMsIDB4YjEwMSwgMHgwODBjLCAweDk4ZWQsIDB4MDgzOCwgMHgwODBjLCAweDk3ZTEsCi0JMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHhkNTc5LCAweDA4MDQsIDB4OThlZCwgMHgyNjAwLCAweDIwMDgsCi0JMHgwMDAyLCAweGJhZDUsIDB4YmFiNiwgMHhiYWQzLCAweGJhYjYsIDB4YmFiNiwgMHhiYWQzLCAweGJhZDMsCi0JMHhiYWQzLCAweGJhZDMsIDB4YmFiNiwgMHhiYWQzLCAweGJhYjYsIDB4YmFkMywgMHhiYWI2LCAweGJhZDMsCi0JMHhiYWQzLCAweGJhZDMsIDB4YmFkMywgMHgwODBjLCAweDBkYzUsIDB4MDgwYywgMHg5N2UxLCAweDAwOTYsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHg2ZGQxLCAweDAwOWUsIDB4MDgwYywgMHhiMTAxLCAweDA4MGMsCi0JMHg5OGVkLCAweDAwMDUsIDB4MDBlNiwgMHgwMDk2LCAweDAwMjYsIDB4MDAxNiwgMHgwODBjLCAweGNlNTYsCi0JMHgwNTY4LCAweDYwMTQsIDB4MjA0OCwgMHhhODY0LCAweDkwODYsIDB4MDEzOSwgMHgxMWE4LCAweGE4OTQsCi0JMHg5MDg2LCAweDAwNTYsIDB4MTE0OCwgMHgwODBjLCAweDU1NmQsIDB4MDEzMCwgMHgyMDAxLCAweDAwMDAsCi0JMHg5MDBlLCAweDIwMTEsIDB4NDAwMCwgMHgwMDI4LCAweDIwMDEsIDB4MDAzMCwgMHg5MDBlLCAweDIwMTEsCi0JMHg0MDA1LCAweDA4MGMsIDB4ZDQzYiwgMHgwMDkwLCAweGE4NjgsIDB4ZDBmYywgMHgwMTc4LCAweGE4MDcsCi0JMHgwMDAwLCAweDAwMTYsIDB4NjAwNCwgMHg5MDhlLCAweDAwMjEsIDB4MDE2OCwgMHg5MDhlLCAweDAwM2QsCi0JMHgwMTUwLCAweDAwMWUsIDB4YTg2NywgMHgwMTAzLCAweGE4MzMsIDB4MDEwMCwgMHgwMDFlLCAweDAwMmUsCi0JMHgwMDllLCAweDAwZWUsIDB4MDAwNSwgMHgwMDFlLCAweDAwMDksIDB4MGNjMCwgMHgwMDk2LCAweDYwMTQsCi0JMHgyMDQ4LCAweGE4MDAsIDB4MjA0OCwgMHhhODY3LCAweDAxMDMsIDB4YTgyMywgMHg4MDAxLCAweDAwOWUsCi0JMHgwMDA1LCAweDAwYjYsIDB4NjYxMCwgMHgyNjU4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwYjIsCi0JMHgwMDBjLCAweDFhMGMsIDB4MGRjNSwgMHg2NjA0LCAweDk2YjYsIDB4MDA0ZCwgMHgxMTIwLCAweDA4MGMsCi0JMHhkMzVhLCAweDA4MDQsIDB4YmJhZSwgMHg2NjA0LCAweDk2YjYsIDB4MDA0MywgMHgxMTIwLCAweDA4MGMsCi0JMHhkM2EzLCAweDA4MDQsIDB4YmJhZSwgMHg2NjA0LCAweDk2YjYsIDB4MDA0YiwgMHgxMTIwLCAweDA4MGMsCi0JMHhkM2NmLCAweDA4MDQsIDB4YmJhZSwgMHg2NjA0LCAweDk2YjYsIDB4MDAzMywgMHgxMTIwLCAweDA4MGMsCi0JMHhkMmVjLCAweDA4MDQsIDB4YmJhZSwgMHg2NjA0LCAweDk2YjYsIDB4MDAyOCwgMHgxMTIwLCAweDA4MGMsCi0JMHhkMDljLCAweDA4MDQsIDB4YmJhZSwgMHg2NjA0LCAweDk2YjYsIDB4MDAyOSwgMHgxMTIwLCAweDA4MGMsCi0JMHhkMGRkLCAweDA4MDQsIDB4YmJhZSwgMHg2NjA0LCAweDk2YjYsIDB4MDAxZiwgMHgxMTIwLCAweDA4MGMsCi0JMHhiNGRiLCAweDA4MDQsIDB4YmJhZSwgMHg2NjA0LCAweDk2YjYsIDB4MDAwMCwgMHgxMTE4LCAweDA4MGMsCi0JMHhiODI5LCAweDA0ZTAsIDB4NjYwNCwgMHg5NmI2LCAweDAwMjIsIDB4MTExOCwgMHgwODBjLCAweGI1MTcsCi0JMHgwNGE4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDM1LCAweDExMTgsIDB4MDgwYywgMHhiNjNkLCAweDA0NzAsCi0JMHg2NjA0LCAweDk2YjYsIDB4MDAzOSwgMHgxMTE4LCAweDA4MGMsIDB4YjdiZSwgMHgwNDM4LCAweDY2MDQsCi0JMHg5NmI2LCAweDAwM2QsIDB4MTExOCwgMHgwODBjLCAweGI1NGYsIDB4MDQwMCwgMHg2NjA0LCAweDk2YjYsCi0JMHgwMDQ0LCAweDExMTgsIDB4MDgwYywgMHhiNThiLCAweDAwYzgsIDB4NjYwNCwgMHg5NmI2LCAweDAwNDksCi0JMHgxMTE4LCAweDA4MGMsIDB4YjVjYywgMHgwMDkwLCAweDY2MDQsIDB4OTZiNiwgMHgwMDQxLCAweDExMTgsCi0JMHgwODBjLCAweGI1YjYsIDB4MDA1OCwgMHg5MWI2LCAweDAwMTUsIDB4MTExMCwgMHgwMDYzLCAweDAwMzAsCi0JMHg5MWI2LCAweDAwMTYsIDB4MTEyOCwgMHgwMGJlLCAweDA4MDQsIDB4YmUwYywgMHgwMGJlLCAweDAwMDUsCi0JMHgwODBjLCAweGIxOWIsIDB4MGNkOCwgMHhiYmNiLCAweGJiZDksIDB4YmJjYiwgMHhiYzIwLCAweGJiY2IsCi0JMHhiZDgwLCAweGJlMTksIDB4YmJjYiwgMHhiYmNiLCAweGJkZTIsIDB4YmJjYiwgMHhiZGY4LCAweDAwOTYsCi0JMHg2MDFmLCAweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MDAsIDB4MjA0OCwgMHhhODY3LCAweDAxMDMsCi0JMHgwMDllLCAweDA4MDQsIDB4YjEwMSwgMHhhMDAxLCAweGEwMDEsIDB4MDAwNSwgMHg2NjA0LCAweDk2YjYsCi0JMHgwMDA0LCAweDExMzAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NjY0ZiwgMHgwODA0LCAweGIxMDEsCi0JMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDcwOTAsIDB4OTA4NiwgMHgwMDc0LCAweDE1NDAsCi0JMHgwODBjLCAweGU2NjEsIDB4MTFiMCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHg3MDMwLCAweGQwOGMsCi0JMHgwMTI4LCAweGI4MDAsIDB4ZDBiYywgMHgwMTEwLCAweGMwYzUsIDB4YjgwMiwgMHgwMGY5LCAweDAwYmUsCi0JMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NjYzLCAweDA4MGMsIDB4MzI2ZiwgMHgwODBjLCAweGIxMDEsCi0JMHgwMDk4LCAweDIwMDEsIDB4MDAwYSwgMHgwODBjLCAweDY2NjMsIDB4MDgwYywgMHgzMjZmLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgwODBjLCAweDkzODMsIDB4MDgwYywgMHg5OGVkLCAweDAwMjAsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHhiZDUwLCAweDAwZWUsIDB4MDAwNSwgMHgwMGQ2LCAweGI4MDAsCi0JMHhkMDg0LCAweDAxNjAsIDB4OTAwNiwgMHgwODBjLCAweDY2NGYsIDB4MjA2OSwgMHgxODQ3LCAweDY4MDQsCi0JMHhkMGE0LCAweDAxMjAsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NjY4ZiwgMHgwMGRlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAwOTYsIDB4MDBkNiwgMHgyMDExLCAweDE4MjQsIDB4MjIwNCwgMHg5MDg2LCAweDAwNzQsCi0JMHgxOTA0LCAweGJkMjUsIDB4NjAxMCwgMHgyMDU4LCAweGJhYTAsIDB4OTI4NiwgMHgwMDdlLCAweDExMjAsCi0JMHgwODBjLCAweGJmNjgsIDB4MDgwNCwgMHhiYzkyLCAweDA4MGMsIDB4YmY1ZCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiYWEwLCAweDkyODYsIDB4MDA4MCwgMHgxNTEwLCAweDYwMTQsIDB4OTAwNSwgMHgwMWE4LCAweDIwNDgsCi0JMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzksIDB4MTE0MCwgMHgyMDAxLCAweDAwMDAsCi0JMHg5MDBlLCAweDIwMTEsIDB4NDAwMCwgMHgwODBjLCAweGQ0M2IsIDB4MDAzMCwgMHhhODA3LCAweDAwMDAsCi0JMHhhODY3LCAweDAxMDMsIDB4YTgzMywgMHgwMjAwLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY2NjMsCi0JMHgwODBjLCAweDMyNmYsIDB4MDgwYywgMHhiMTAxLCAweDA4MDQsIDB4YmQyYSwgMHgwODBjLCAweGJkMzgsCi0JMHg2MDE0LCAweDkwMDUsIDB4MDE5MCwgMHgyMDQ4LCAweGE4NjgsIDB4ZDBmNCwgMHgwMWU4LCAweGE4NjQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM5LCAweDFkMDgsIDB4MjAwMSwgMHgwMDAwLCAweDkwMGUsCi0JMHgyMDExLCAweDQwMDAsIDB4MDgwYywgMHhkNDNiLCAweDA4ZjgsIDB4MDgwYywgMHhiZDJlLCAweDAxNjAsCi0JMHg5MDA2LCAweDA4MGMsIDB4NjY0ZiwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg2NjhmLCAweDIwMDEsCi0JMHgwMDA3LCAweDA4MGMsIDB4NjY2MywgMHgwOGEwLCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDY2NjMsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAzLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsCi0JMHgwODA0LCAweGJkMmEsIDB4Yjg1YywgMHhkMGU0LCAweDAxNzgsIDB4MDgwYywgMHhkMjZjLCAweDA4MGMsCi0JMHg3NTY5LCAweDAxMTgsIDB4ZDBkYywgMHgxOTA0LCAweGJjNTQsIDB4MjAxMSwgMHgxODM3LCAweDIyMDQsCi0JMHhjMGFkLCAweDIwMTIsIDB4MDgwNCwgMHhiYzU0LCAweDA4MGMsIDB4ZDJhOSwgMHgyMDExLCAweDE4MzcsCi0JMHgyMjA0LCAweGMwYTUsIDB4MjAxMiwgMHgwMDA2LCAweDA4MGMsIDB4ZTgyZCwgMHgwMDBlLCAweDE5MDQsCi0JMHhiYzU0LCAweGMwYjUsIDB4MjAxMiwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NjYzLCAweDkwMDYsCi0JMHgwODBjLCAweDY2NGYsIDB4MDBjNiwgMHgyMDAxLCAweDE4MGYsIDB4MjAwNCwgMHhkMDljLCAweDA1MjAsCi0JMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3MDBjLCAweDkwODQsCi0JMHgwMGZmLCAweDc4ZTYsIDB4NzA3ZSwgMHg3MDEwLCAweDc4ZWEsIDB4NzA4MiwgMHg5MDhjLCAweDAwZmYsCi0JMHgwMGVlLCAweDc4MGMsIDB4YzBiNSwgMHg3ODBlLCAweDAwZmUsIDB4MDgwYywgMHgyOGRkLCAweDAwZjYsCi0JMHgyMTAwLCAweDkwMGUsIDB4MDgwYywgMHgyODk0LCAweDc5NWUsIDB4MDBmZSwgMHg5MTg2LCAweDAwODEsCi0JMHgwMWYwLCAweDIwMDksIDB4MDA4MSwgMHgwMGUwLCAweDIwMDksIDB4MDBlZiwgMHgwMGY2LCAweDIwNzksCi0JMHgwMTAwLCAweDc5ZWEsIDB4NzhlNywgMHgwMDAwLCAweDc5MzIsIDB4NzkzNiwgMHg3ODBjLCAweGMwYjUsCi0JMHg3ODBlLCAweDAwZmUsIDB4MDgwYywgMHgyOGRkLCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDc5ODIsCi0JMHgyMTAwLCAweDkwMGUsIDB4Nzk3ZSwgMHgwODBjLCAweDI4OTQsIDB4Nzk1ZSwgMHgwMGZlLCAweDgxMDgsCi0JMHgwODBjLCAweDY2YjIsIDB4MmIwMCwgMHgwMGNlLCAweDE5MDQsIDB4YmM1NCwgMHg2MDEyLCAweDIwMDksCi0JMHgxODBmLCAweDIxMGMsIDB4ZDE5YywgMHgwMTUwLCAweDIwMDksIDB4MDI3YywgMHgyMTBjLCAweDkxOGMsCi0JMHgwMGZmLCAweGI5MTIsIDB4MjAwOSwgMHgwMjdkLCAweDIxMGMsIDB4YjkxNiwgMHgyMDAxLCAweDAwMDIsCi0JMHgwODBjLCAweDY2NjMsIDB4NjAyMywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsCi0JMHgwODBjLCAweDkzODMsIDB4MDgwYywgMHg5OGVkLCAweDAwMjgsIDB4MDgwYywgMHhiYWUyLCAweDIwMDEsCi0JMHgwMDAxLCAweDA0MzEsIDB4MDBkZSwgMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MTAsCi0JMHgyMDA0LCAweGQwYTQsIDB4MDEyMCwgMHgyMDAxLCAweDE4NDgsIDB4MjAwNCwgMHhkMGFjLCAweDAwMDUsCi0JMHgwMGU2LCAweDA4MGMsIDB4ZWQ2OCwgMHgwMTkwLCAweDIwNzEsIDB4MDI2MCwgMHg3MTA4LCAweDcyMGMsCi0JMHg5MThjLCAweDAwZmYsIDB4MTExOCwgMHg5Mjg0LCAweGZmMDAsIDB4MDE0MCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiOGEwLCAweDkwODQsIDB4ZmY4MCwgMHgxMTEwLCAweGI5MTIsIDB4YmExNiwgMHgwMGVlLCAweDAwMDUsCi0JMHgyMDMwLCAweDkwMDUsIDB4MDE1OCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NjYzLCAweDA4MGMsCi0JMHg1N2U3LCAweDExMjAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjY4ZiwgMHgyNjAwLCAweDkwMDUsCi0JMHgxMWIwLCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4NjgsIDB4MDA5ZSwgMHhkMGZjLCAweDExNzgsCi0JMHgwMDM2LCAweDAwNDYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmJhMCwgMHgwMGJlLCAweDIwMjEsCi0JMHgwMDA0LCAweDIwMTEsIDB4ODAxNCwgMHgwODBjLCAweDRiZTksIDB4MDA0ZSwgMHgwMDNlLCAweDA4MGMsCi0JMHgzMjZmLCAweDYwMjAsIDB4OTA4NiwgMHgwMDBhLCAweDExMDgsIDB4MDAwNSwgMHgwODA0LCAweGIxMDEsCi0JMHgwMGI2LCAweDAwZTYsIDB4MDAyNiwgMHgwMDE2LCAweDIwNzEsIDB4MTgwMCwgMHg3MDkwLCAweDkwODYsCi0JMHgwMDE0LCAweDE5MDQsIDB4YmRkOCwgMHgwODBjLCAweDU3ZTcsIDB4MTE3MCwgMHg2MDE0LCAweDkwMDUsCi0JMHgxMTU4LCAweDAwMzYsIDB4MDA0NiwgMHg2MDEwLCAweDIwNTgsIDB4YmJhMCwgMHgyMDIxLCAweDAwMDYsCi0JMHgwODBjLCAweDRkYTAsIDB4MDA0ZSwgMHgwMDNlLCAweDAwZDYsIDB4NjAxMCwgMHgyMDU4LCAweDA4MGMsCi0JMHg2N2I4LCAweDA4MGMsIDB4YmMwZSwgMHgwMGRlLCAweDA4MGMsIDB4YzAzMywgMHgxNTg4LCAweDYwMTAsCi0JMHgyMDU4LCAweGI4OTAsIDB4OTAwNSwgMHgwNTYwLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY2NjMsCi0JMHgwMDk2LCAweDYwMTQsIDB4OTA0ZCwgMHgwMWQwLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDM5LCAweDExNDAsIDB4MjAwMSwgMHgwMDAwLCAweDkwMGUsIDB4MjAxMSwgMHg0MDAwLCAweDA4MGMsCi0JMHhkNDNiLCAweDAwNjAsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDI5LCAweDAxMzAsCi0JMHhhODA3LCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweGE4MzMsIDB4MDIwMCwgMHgwMDllLCAweDA4MGMsCi0JMHgzMjZmLCAweDYwMjAsIDB4OTA4NiwgMHgwMDBhLCAweDAxNDAsIDB4MDgwYywgMHhiMTAxLCAweDAwMjgsCi0JMHgwODBjLCAweGJhZTIsIDB4OTAwNiwgMHgwODBjLCAweGJkNTAsIDB4MDAxZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMGJlLCAweDAwMDUsIDB4MjAxMSwgMHgxODI0LCAweDIyMDQsIDB4OTA4NiwgMHgwMDE0LCAweDExNjAsCi0JMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NjYzLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsCi0JMHgwODBjLCAweDkzODMsIDB4MDgwNCwgMHg5OGVkLCAweDIwMDEsIDB4MDAwMSwgMHgwODA0LCAweGJkNTAsCi0JMHgyMDMwLCAweDIwMTEsIDB4MTgyNCwgMHgyMjA0LCAweDkwODYsIDB4MDAwNCwgMHgxMTQ4LCAweDk2YjYsCi0JMHgwMDBiLCAweDExMjAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjY2MywgMHgwODA0LCAweGIxMDEsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDgwNCwgMHhiZDUwLCAweDAwMDIsIDB4YmJjYiwgMHhiZTI0LCAweGJiY2IsCi0JMHhiZTY3LCAweGJiY2IsIDB4YmYxNCwgMHhiZTE5LCAweGJiY2UsIDB4YmJjYiwgMHhiZjI4LCAweGJiY2IsCi0JMHhiZjNhLCAweDY2MDQsIDB4OTY4NiwgMHgwMDAzLCAweDA5MDQsIDB4YmQ4MCwgMHg5NmI2LCAweDAwMWUsCi0JMHgxMTEwLCAweDA4MGMsIDB4YjEwMSwgMHgwMDA1LCAweDAwYjYsIDB4MDBkNiwgMHgwMGM2LCAweDA4MGMsCi0JMHhiZjRjLCAweDExYTAsIDB4OTAwNiwgMHgwODBjLCAweDY2NGYsIDB4MDgwYywgMHgzMjQ2LCAweDA4MGMsCi0JMHhkNTc2LCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDY2NjMsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCi0JMHgwMDAyLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsIDB4MDQyOCwgMHgyMDA5LCAweDAyNmUsCi0JMHgyMTA0LCAweDkwODYsIDB4MDAwOSwgMHgxMTYwLCAweDYwMTAsIDB4MjA1OCwgMHhiODQwLCAweDkwODQsCi0JMHgwMGZmLCAweDkwMDUsIDB4MDE4MCwgMHg4MDAxLCAweGI4NDIsIDB4NjAxYiwgMHgwMDBhLCAweDAwOTgsCi0JMHgyMDA5LCAweDAyNmYsIDB4MjEwNCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4ZSwgMHgxOTAwLCAweDAxNTgsCi0JMHg5MDhlLCAweDFlMDAsIDB4MDk5MCwgMHgwODBjLCAweDMyNDYsIDB4MDgwYywgMHhkNTc2LCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4YmQ1MCwgMHgwMGNlLCAweDAwZGUsIDB4MDBiZSwgMHgwMDA1LCAweDAwOTYsCi0JMHgwMGI2LCAweDAwMjYsIDB4OTAxNiwgMHgwODBjLCAweGJmNWEsIDB4MDBkNiwgMHgyMDY5LCAweDE5N2QsCi0JMHgyZDA0LCAweDkwMDUsIDB4MDE2OCwgMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwgMHg5MDg2LCAweDAwN2UsCi0JMHgxMTM4LCAweDIwNjksIDB4MTgyMCwgMHgyZDA0LCAweDgwMDAsIDB4MjA2YSwgMHgwMGRlLCAweDAwMTAsCi0JMHgwMGRlLCAweDAwODgsIDB4OTAwNiwgMHgwODBjLCAweDY2NGYsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCi0JMHg2NjYzLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MDgwYywgMHg5MzgzLCAweDA4MGMsCi0JMHg5OGVkLCAweDA4MDQsIDB4YmVlNCwgMHgwODBjLCAweGNlNTYsIDB4MDFiMCwgMHg2MDE0LCAweDIwNDgsCi0JMHhhODY0LCAweDIwMTAsIDB4OTA4NiwgMHgwMTM5LCAweDExMzgsIDB4NjAwNywgMHgwMDE2LCAweDIwMDEsCi0JMHgwMDAyLCAweDA4MGMsIDB4ZDQ5OCwgMHgwMGIwLCAweDYwMTQsIDB4MjA0OCwgMHhhODY0LCAweGQwZmMsCi0JMHgwMTE4LCAweDIwMDEsIDB4MDAwMSwgMHgwY2E4LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZGMsCi0JMHgwMTQ4LCAweDYwMTAsIDB4MjA1OCwgMHhiODQwLCAweDkwODQsIDB4MDBmZiwgMHg5MDA1LCAweDExMTAsCi0JMHg5MDA2LCAweDBjMzgsIDB4MDgwYywgMHhiYWUyLCAweDIwMDksIDB4MDI2ZSwgMHgyMTM0LCAweDk2YjQsCi0JMHgwMGZmLCAweDk2ODYsIDB4MDAwNSwgMHgwNTIwLCAweDk2ODYsIDB4MDAwYiwgMHgwMWM4LCAweDIwMDksCi0JMHgwMjZmLCAweDIxMDQsIDB4OTA4NCwgMHhmZjAwLCAweDExMTgsIDB4OTY4NiwgMHgwMDA5LCAweDAxYzAsCi0JMHg5MDg2LCAweDE5MDAsIDB4MTE2OCwgMHg5Njg2LCAweDAwMDksIDB4MDE5MCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwODBjLCAweDY2NjMsIDB4MjAwMSwgMHgwMDI4LCAweDYwMWEsIDB4NjAwNywgMHgwMDUyLCAweDAwMjAsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHhiZDUwLCAweDAwMmUsIDB4MDBiZSwgMHgwMDllLCAweDAwMDUsCi0JMHg5Mjg2LCAweDAxMzksIDB4MDE2MCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZTU2LCAweDAxNDAsCi0JMHhhODY0LCAweDkwODYsIDB4MDEzOSwgMHgwMTE4LCAweGE4NjgsIDB4ZDBmYywgMHgwMTA4LCAweDBjNDAsCi0JMHg2MDEwLCAweDIwNTgsIDB4Yjg0MCwgMHg5MDg0LCAweDAwZmYsIDB4OTAwNSwgMHgwMTM4LCAweDgwMDEsCi0JMHhiODQyLCAweDYwMWIsIDB4MDAwYSwgMHg2MDA3LCAweDAwMTYsIDB4MDhmMCwgMHhiOGEwLCAweDkwODYsCi0JMHgwMDdlLCAweDExMzgsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHg2MGJhLCAweDAwZWUsCi0JMHgwMDEwLCAweDA4MGMsIDB4MzI0NiwgMHgwODYwLCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDY2NjMsCi0JMHgwODBjLCAweGJmNWEsIDB4MTE0MCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAzLCAweDA4MGMsCi0JMHg5MzgzLCAweDA4MDQsIDB4OThlZCwgMHgwODBjLCAweGJhZTIsIDB4OTAwNiwgMHgwODA0LCAweGJkNTAsCi0JMHgwNDg5LCAweDExNjAsIDB4MjAwMSwgMHgwMDA4LCAweDA4MGMsIDB4NjY2MywgMHg2MDAzLCAweDAwMDEsCi0JMHg2MDA3LCAweDAwMDUsIDB4MDgwYywgMHg5MzgzLCAweDA4MDQsIDB4OThlZCwgMHgyMDAxLCAweDAwMDEsCi0JMHgwODA0LCAweGJkNTAsIDB4MDBmOSwgMHgxMTYwLCAweDIwMDEsIDB4MDAwYSwgMHgwODBjLCAweDY2NjMsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDA4MGMsIDB4OTM4MywgMHgwODA0LCAweDk4ZWQsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDgwNCwgMHhiZDUwLCAweDIwMDksIDB4MDI2ZSwgMHgyMTA0LCAweDkwODYsCi0JMHgwMDAzLCAweDExMzgsIDB4MjAwOSwgMHgwMjZmLCAweDIxMDQsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsCi0JMHgyYTAwLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDAwMTYsCi0JMHg2MTEwLCAweDIxNTgsIDB4MDgwYywgMHg2NzJjLCAweDAwMWUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwMzYsIDB4MDAxNiwgMHg2MDEwLCAweDIwNTgsCi0JMHgyMDA5LCAweDE4MzcsIDB4MjEwNCwgMHg5MDg1LCAweDAwMDMsIDB4MjAwYSwgMHgwODBjLCAweGMwMDUsCi0JMHgwNTYwLCAweDIwMDksIDB4MTgzNywgMHgyMTA0LCAweGMwY2QsIDB4MjAwYSwgMHgwODBjLCAweDZhOGUsCi0JMHgwMTU4LCAweDkwMDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmEsIDB4MDgwYywgMHhlOWE1LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4YzE5NSwgMHgyMTAyLCAweDIwMTksIDB4MDAyYSwgMHgyMDA5LCAweDAwMDEsCi0JMHgwODBjLCAweDMyMTEsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHgzMDE5LCAweDAwZWUsCi0JMHgwMGM2LCAweDAxNTYsIDB4MjBhOSwgMHgwNzgxLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDMzNDIsCi0JMHg4MTA4LCAweDFmMDQsIDB4YmY5ZSwgMHgwMTVlLCAweDAwY2UsIDB4MDgwYywgMHhiZjVkLCAweDIwNzEsCi0JMHgwMjYwLCAweDIwNzksIDB4MDIwMCwgMHg3ODE3LCAweDAwMDEsIDB4MjAwMSwgMHgxODM3LCAweDIwMGMsCi0JMHhjMWM1LCAweDcwMTgsIDB4ZDBmYywgMHgwMTEwLCAweGQwZGMsIDB4MDExOCwgMHg3MDM4LCAweGQwZGMsCi0JMHgxMTA4LCAweGMxYzQsIDB4NzgxNywgMHgwMDAwLCAweDIwMDEsIDB4MTgzNywgMHgyMTAyLCAweDkxODQsCi0JMHgwMDUwLCAweDkwODYsIDB4MDA1MCwgMHgwNWQwLCAweDIwNzksIDB4MDEwMCwgMHgyZTA0LCAweDkwODQsCi0JMHgwMGZmLCAweDIwNjksIDB4MTgxZiwgMHgyMDZhLCAweDc4ZTYsIDB4MDAwNiwgMHg4ZTcwLCAweDJlMDQsCi0JMHgyMDY5LCAweDE4MjAsIDB4MjA2YSwgMHg3OGVhLCAweDc4MzIsIDB4NzgzNiwgMHgyMDEwLCAweDkwODQsCi0JMHhmZjAwLCAweDAwMWUsIDB4OTEwNSwgMHgyMDA5LCAweDE4MmMsIDB4MjAwYSwgMHgyMjAwLCAweDkwODQsCi0JMHgwMGZmLCAweDIwMDgsIDB4MDgwYywgMHgyOGRkLCAweDA4MGMsIDB4NzU2OSwgMHgwMTcwLCAweDIwNzEsCi0JMHgwMjYwLCAweDIwNjksIDB4MTk4MywgMHg3MDQ4LCAweDIwNmEsIDB4NzA0YywgMHg2ODA2LCAweDcwNTAsCi0JMHg2ODBhLCAweDcwNTQsIDB4NjgwZSwgMHgwODBjLCAweGQyNmMsIDB4MDA0MCwgMHgyMDAxLCAweDAwMDYsCi0JMHgwODBjLCAweDY2NjMsIDB4MDgwYywgMHgzMjZmLCAweDA4MGMsIDB4YjEwMSwgMHgwMDFlLCAweDAwM2UsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMGJlLCAweDAwMDUsIDB4MDA5NiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMGU2LCAweDAxNTYsIDB4MjAxOSwgMHgxODJjLCAweDIzMWMsIDB4ODNmZiwgMHgwMWYwLCAweDIwNzEsCi0JMHgwMjYwLCAweDcyMDAsIDB4OTI5NCwgMHgwMGZmLCAweDcwMDQsIDB4OTA4NCwgMHhmZjAwLCAweDkyMDUsCi0JMHg5MzA2LCAweDExOTgsIDB4MjAxMSwgMHgwMjc2LCAweDIwYTksIDB4MDAwNCwgMHgyYjQ4LCAweDIwMTksCi0JMHgwMDBhLCAweDA4MGMsIDB4YzBmNywgMHgxMTQ4LCAweDIwMTEsIDB4MDI3YSwgMHgyMGE5LCAweDAwMDQsCi0JMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhjMGY3LCAweDExMDAsIDB4MDE1ZSwgMHgwMGVlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwOWUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDI2MCwgMHg3MDM0LCAweDkwODYsCi0JMHgwMDE0LCAweDExYTgsIDB4NzAzOCwgMHg5MDg2LCAweDA4MDAsIDB4MTE4OCwgMHg3MDNjLCAweGQwZWMsCi0JMHgwMTYwLCAweDkwODQsIDB4MGYwMCwgMHg5MDg2LCAweDAxMDAsIDB4MTEzOCwgMHg3MDU0LCAweGQwYTQsCi0JMHgxMTEwLCAweGQwYWMsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MDA5NiwgMHgwMGM2LCAweDAwNzYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsCi0JMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMjksIDB4MTlmMiwgMHgyNTJjLCAweDIwMjEsCi0JMHgxOWY4LCAweDI0MjQsIDB4MjA2MSwgMHgxY2QwLCAweDIwNzEsIDB4MTgwMCwgMHg3MjU0LCAweDcwNzQsCi0JMHg5MjAyLCAweDFhMDQsIDB4YzBjMywgMHgwODBjLCAweDhiYzMsIDB4MDkwNCwgMHhjMGJjLCAweDA4MGMsCi0JMHhlOWQ2LCAweDA5MDQsIDB4YzBiYywgMHg2NzIwLCAweDk3ODYsIDB4MDAwNywgMHgwOTA0LCAweGMwYmMsCi0JMHgyNTAwLCAweDljMDYsIDB4MDkwNCwgMHhjMGJjLCAweDI0MDAsIDB4OWMwNiwgMHgwNWU4LCAweDNlMDgsCi0JMHg5MTg2LCAweDAwMDIsIDB4MTE0OCwgMHg2MDEwLCAweDkwMDUsIDB4MDEzMCwgMHgwMGI2LCAweDIwNTgsCi0JMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgxNTgwLCAweDAwYzYsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsCi0JMHgxMTEwLCAweDA4MGMsIDB4MWFiNywgMHg5Nzg2LCAweDAwMGEsIDB4MDE0OCwgMHgwODBjLCAweGQwNWUsCi0JMHgxMTMwLCAweDAwY2UsIDB4MDgwYywgMHhiYWUyLCAweDA4MGMsIDB4YjEzNCwgMHgwMGU4LCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NiwgMHgwMWE4LCAweDk3ODYsIDB4MDAwMywgMHgxNTMwLCAweGE4NjcsCi0JMHgwMTAzLCAweGE4N2MsIDB4ZDBjYywgMHgwMTMwLCAweDAwOTYsIDB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsCi0JMHgwZmMwLCAweDAwOWUsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZGM0LCAweDA4MGMsCi0JMHhkMDQxLCAweDA4MGMsIDB4YjEzNCwgMHgwMGNlLCAweDljZTAsIDB4MDAxOCwgMHg3MDY4LCAweDljMDIsCi0JMHgxMjEwLCAweDA4MDQsIDB4YzA2NiwgMHgwMTJlLCAweDAwMGUsIDB4MDAyZSwgMHgwMDRlLCAweDAwNWUsCi0JMHgwMDdlLCAweDAwY2UsIDB4MDA5ZSwgMHgwMGVlLCAweDAwMDUsIDB4OTc4NiwgMHgwMDA2LCAweDExMTgsCi0JMHgwODBjLCAweGU5NDgsIDB4MGMzMCwgMHg5Nzg2LCAweDAwMDksIDB4MTE0OCwgMHg2MDAwLCAweDkwODYsCi0JMHgwMDA0LCAweDBkMDgsIDB4MjAwOSwgMHgwMDRjLCAweDA4MGMsIDB4YjE4MCwgMHgwOGUwLCAweDk3ODYsCi0JMHgwMDBhLCAweDA5ODAsIDB4MDgyMCwgMHgyMjBjLCAweDIzMDQsIDB4OTEwNiwgMHgxMTMwLCAweDgyMTAsCi0JMHg4MzE4LCAweDFmMDQsIDB4YzBlMywgMHg5MDA2LCAweDAwMDUsIDB4MjMwNCwgMHg5MTAyLCAweDAyMTgsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDAwOCwgMHg5MDA2LCAweDkxOGQsIDB4MDAwMSwgMHgwMDA1LCAweDAxMzYsCi0JMHgwMWM2LCAweDAwMTYsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTA4YywgMHgwMDNmLCAweDIxZTAsCi0JMHg5MDg0LCAweGZmYzAsIDB4OTMwMCwgMHgyMDk4LCAweDM1MTgsIDB4MjBhOSwgMHgwMDAxLCAweDIyMGMsCi0JMHg0MDAyLCAweDkxMGUsIDB4MTE0MCwgMHg4MjEwLCAweDgzMTksIDB4MWRjOCwgMHg5MDA2LCAweDAwMWUsCi0JMHgwMWNlLCAweDAxM2UsIDB4MDAwNSwgMHgyMjBjLCAweDkxMDIsIDB4MDIxOCwgMHgyMDAxLCAweDAwMDEsCi0JMHgwMDEwLCAweDIwMDEsIDB4MDAwMCwgMHg5MThkLCAweDAwMDEsIDB4MDAxZSwgMHgwMWNlLCAweDAxM2UsCi0JMHgwMDA1LCAweDIyMGMsIDB4ODEwZiwgMHgyMzA0LCAweDkxMDYsIDB4MTEzMCwgMHg4MjEwLCAweDgzMTgsCi0JMHgxZjA0LCAweGMxMjEsIDB4OTAwNiwgMHgwMDA1LCAweDkxOGQsIDB4MDAwMSwgMHgwMDA1LCAweDYwMDQsCi0JMHg5MDhhLCAweDAwNTMsIDB4MWEwYywgMHgwZGM1LCAweDA4MGMsIDB4ZDA0ZCwgMHgwMTIwLCAweDA4MGMsCi0JMHhkMDVlLCAweDAxNjgsIDB4MDAyOCwgMHgwODBjLCAweDMyNmYsIDB4MDgwYywgMHhkMDVlLCAweDAxMzgsCi0JMHgwODBjLCAweDk3ZTEsIDB4MDgwYywgMHhiMTAxLCAweDA4MGMsIDB4OThlZCwgMHgwMDA1LCAweDA4MGMsCi0JMHhiYWUyLCAweDBjYjAsIDB4OTE4MiwgMHgwMDU0LCAweDEyMjAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMDgsCi0JMHgwMDBhLCAweDAwMDUsIDB4YzE2NiwgMHhjMTY2LCAweGMxNjYsIDB4YzE2NiwgMHhjMTY2LCAweGMxNjYsCi0JMHhjMTY2LCAweGMxNjYsIDB4YzE2NiwgMHhjMTY2LCAweGMxNjYsIDB4YzE2OCwgMHhjMTY4LCAweGMxNjgsCi0JMHhjMTY4LCAweGMxNjYsIDB4YzE2NiwgMHhjMTY2LCAweGMxNjgsIDB4YzE2NiwgMHgwODBjLCAweDBkYzUsCi0JMHg2MDBiLCAweGZmZmYsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg5MzNiLCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5OGVkLCAweDAxMmUsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsCi0JMHgxMTI4LCAweDYwMDQsIDB4OTA4MiwgMHgwMDQwLCAweDA4MDQsIDB4YzIwMCwgMHg5MTg2LCAweDAwMjcsCi0JMHgxNTIwLCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweDMyNDYsIDB4MDgwYywgMHhkNTc2LCAweDAwOTYsCi0JMHg2MTE0LCAweDIxNDgsIDB4MDgwYywgMHhjZTU2LCAweDAxOTgsIDB4MDgwYywgMHhkMDVlLCAweDExMTgsCi0JMHgwODBjLCAweGJhZTIsIDB4MDA2OCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDI5LCAweGE4NzcsCi0JMHgwMDAwLCAweGE5N2MsIDB4YzFjNSwgMHhhOTdlLCAweDA4MGMsIDB4NmRkMSwgMHgwODBjLCAweGQwNDEsCi0JMHgwMDllLCAweDA4MGMsIDB4YjEwMSwgMHgwODA0LCAweDk4ZWQsIDB4OTE4NiwgMHgwMDE0LCAweDExMjAsCi0JMHg2MDA0LCAweDkwODIsIDB4MDA0MCwgMHgwMGI4LCAweDkxODYsIDB4MDA0NiwgMHgwMTUwLCAweDkxODYsCi0JMHgwMDQ1LCAweDAxMzgsIDB4OTE4NiwgMHgwMDUzLCAweDAxMjAsIDB4OTE4NiwgMHgwMDQ4LCAweDE5MGMsCi0JMHgwZGM1LCAweDA4MGMsIDB4ZDU4NywgMHgwMTMwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAyLCAweDExMTAsCi0JMHgwODA0LCAweGMyM2UsIDB4MDAwNSwgMHgwMDAyLCAweGMxZGEsIDB4YzFkOCwgMHhjMWQ4LCAweGMxZDgsCi0JMHhjMWQ4LCAweGMxZDgsIDB4YzFkOCwgMHhjMWQ4LCAweGMxZDgsIDB4YzFkOCwgMHhjMWQ4LCAweGMxZjUsCi0JMHhjMWY1LCAweGMxZjUsIDB4YzFmNSwgMHhjMWQ4LCAweGMxZjUsIDB4YzFkOCwgMHhjMWY1LCAweGMxZDgsCi0JMHgwODBjLCAweDBkYzUsIDB4MDgwYywgMHg5N2UxLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsCi0JMHhjZTU2LCAweDAxNjgsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsIDB4MDAwNiwgMHhhODc3LCAweDAwMDAsCi0JMHhhODgwLCAweGMwZWMsIDB4YTg4MiwgMHgwODBjLCAweDZkZDEsIDB4MDgwYywgMHhkMDQxLCAweDAwOWUsCi0JMHgwODBjLCAweGIxMDEsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsIDB4MDgwYywgMHg5N2UxLCAweDA4MGMsCi0JMHhkMDVlLCAweDA5MGMsIDB4YmFlMiwgMHgwODBjLCAweGIxMDEsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsCi0JMHgwMDAyLCAweGMyMTcsIDB4YzIxNSwgMHhjMjE1LCAweGMyMTUsIDB4YzIxNSwgMHhjMjE1LCAweGMyMTUsCi0JMHhjMjE1LCAweGMyMTUsIDB4YzIxNSwgMHhjMjE1LCAweGMyMmUsIDB4YzIyZSwgMHhjMjJlLCAweGMyMmUsCi0JMHhjMjE1LCAweGMyMzgsIDB4YzIxNSwgMHhjMjJlLCAweGMyMTUsIDB4MDgwYywgMHgwZGM1LCAweDAwOTYsCi0JMHgwODBjLCAweDk3ZTEsIDB4NjAxNCwgMHgyMDQ4LCAweDIwMDEsIDB4MTk4OSwgMHgyMDA0LCAweDYwNDIsCi0JMHhhOTdjLCAweGQxYWMsIDB4MDE0MCwgMHg2MDAzLCAweDAwMDQsIDB4YTg3YywgMHg5MDg1LCAweDA0MDAsCi0JMHhhODdlLCAweDAwOWUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDIsIDB4MGNiOCwgMHgwODBjLCAweDk3ZTEsCi0JMHgwODBjLCAweGQ1NzksIDB4MDgwYywgMHhkNTdlLCAweDYwMDMsIDB4MDAwZiwgMHgwODA0LCAweDk4ZWQsCi0JMHgwODBjLCAweDk3ZTEsIDB4MDgwYywgMHhiMTAxLCAweDA4MDQsIDB4OThlZCwgMHg5MTgyLCAweDAwNTQsCi0JMHgxMjIwLCAweDkxODIsIDB4MDA0MCwgMHgwMjA4LCAweDAwMGEsIDB4MDAwNSwgMHhjMjVhLCAweGMyNWEsCi0JMHhjMjVhLCAweGMyNWEsIDB4YzI1YSwgMHhjMjVjLCAweGMzM2MsIDB4YzI1YSwgMHhjMzcwLCAweGMyNWEsCi0JMHhjMjVhLCAweGMyNWEsIDB4YzI1YSwgMHhjMjVhLCAweGMyNWEsIDB4YzI1YSwgMHhjMjVhLCAweGMyNWEsCi0JMHhjMjVhLCAweGMzNzAsIDB4MDgwYywgMHgwZGM1LCAweDAwYjYsIDB4MDA5NiwgMHg2MTE0LCAweDIxNDgsCi0JMHg3NjQ0LCAweDk2YjQsIDB4MGZmZiwgMHg4NmZmLCAweDE1MjgsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsCi0JMHhkMGJjLCAweDE5MDQsIDB4YzMyYiwgMHhhODdiLCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweGFlNzYsCi0JMHhhODdjLCAweGQwYWMsIDB4MDEyOCwgMHhhODM0LCAweGE5MzgsIDB4OTExNSwgMHgxOTBjLCAweGM1MDksCi0JMHgwODBjLCAweDZiZWIsIDB4NjIxMCwgMHgyMjU4LCAweGJhM2MsIDB4ODJmZiwgMHgwMTEwLCAweDgyMTEsCi0JMHhiYTNlLCAweDcwNDQsIDB4ZDBlNCwgMHgxOTA0LCAweGMzMGMsIDB4MDgwYywgMHhiMTAxLCAweDAwOWUsCi0JMHgwMGJlLCAweDAwMDUsIDB4OTY4YywgMHgwYzAwLCAweDAxNTAsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsCi0JMHhkMGJjLCAweDE5MDQsIDB4YzMxMCwgMHg3MzQ4LCAweGFiOTIsIDB4NzM0YywgMHhhYjhlLCAweDk2OGMsCi0JMHgwMGZmLCAweDkxODYsIDB4MDAwMiwgMHgwNTA4LCAweDkxODYsIDB4MDAyOCwgMHgxMTE4LCAweGE4N2IsCi0JMHgwMDFjLCAweDAwZTgsIDB4ZDZkYywgMHgwMWEwLCAweGE4N2IsIDB4MDAxNSwgMHhhODdjLCAweGQwYWMsCi0JMHgwMTcwLCAweGE5MzgsIDB4YWEzNCwgMHgyMTAwLCAweDkyMDUsIDB4MDE0OCwgMHg3MDQ4LCAweDkxMDYsCi0JMHgxMTE4LCAweDcwNGMsIDB4OTIwNiwgMHgwMTE4LCAweGE5OTIsIDB4YWE4ZSwgMHhjNmRjLCAweDAwMzgsCi0JMHhkNmQ0LCAweDAxMTgsIDB4YTg3YiwgMHgwMDA3LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLCAweGE4NjcsCi0JMHgwMTAzLCAweGFlNzYsIDB4OTAxZSwgMHhkNmM0LCAweDAxZDgsIDB4OTY4NiwgMHgwMTAwLCAweDExMzAsCi0JMHg3MDY0LCAweDkwMDUsIDB4MTExOCwgMHhjNmM0LCAweDA4MDQsIDB4YzI2MywgMHg3MzVjLCAweGFiODYsCi0JMHg4M2ZmLCAweDAxNzAsIDB4OTM4YSwgMHgwMDA5LCAweDAyMTAsIDB4MjAxOSwgMHgwMDA4LCAweDAwMzYsCi0JMHgyMzA4LCAweDIwMTksIDB4MDAxOCwgMHgyMDExLCAweDAwMjUsIDB4MDgwYywgMHhjYTAzLCAweDAwM2UsCi0JMHhkNmNjLCAweDA5MDQsIDB4YzI3OCwgMHg3MTU0LCAweGE5OGEsIDB4ODFmZiwgMHgwOTA0LCAweGMyNzgsCi0JMHg5MTkyLCAweDAwMjEsIDB4MTI3OCwgMHg4MzA0LCAweDkwOTgsIDB4MDAxOCwgMHgyMDExLCAweDAwMjksCi0JMHgwODBjLCAweGNhMDMsIDB4MjAxMSwgMHgwMjA1LCAweDIwMTMsIDB4MDAwMCwgMHgwODBjLCAweGQ1MDQsCi0JMHgwODA0LCAweGMyNzgsIDB4YTg2OCwgMHhkMGZjLCAweDAxMjAsIDB4MjAwOSwgMHgwMDIwLCAweGE5OGEsCi0JMHgwYzUwLCAweDAwYTYsIDB4Mjk1MCwgMHgwODBjLCAweGM5YTIsIDB4MDBhZSwgMHgwODBjLCAweGQ1MDQsCi0JMHgwODBjLCAweGM5ZjMsIDB4MDgwNCwgMHhjMjdhLCAweDA4MGMsIDB4ZDE1NiwgMHgwODA0LCAweGMyODcsCi0JMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHhjMjkzLCAweGE4ODAsIDB4ZDBiYywgMHgxOTA0LCAweGMyOTMsCi0JMHg5Njg0LCAweDA0MDAsIDB4MDEzMCwgMHhhODM4LCAweGFiMzQsIDB4OTMwNSwgMHgwOTA0LCAweGMyOTMsCi0JMHgwMGI4LCAweDczNDgsIDB4YTgzOCwgMHg5MzA2LCAweDExOTgsIDB4NzM0YywgMHhhODM0LCAweDkzMWUsCi0JMHgwOTA0LCAweGMyOTMsIDB4MDA2OCwgMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHhjMjZiLCAweGE4MzgsCi0JMHhhOTM0LCAweDkxMDUsIDB4MDkwNCwgMHhjMjZiLCAweGE4ODAsIDB4ZDBiYywgMHgxOTA0LCAweGMyNmIsCi0JMHgwODBjLCAweGQxOTAsIDB4MDgwNCwgMHhjMjg3LCAweDAwOTYsIDB4MDBmNiwgMHg2MDAzLCAweDAwMDMsCi0JMHg2MDA3LCAweDAwNDMsIDB4MjA3OSwgMHgwMjZjLCAweDdjMDQsIDB4N2IwMCwgMHg3ZTBjLCAweDdkMDgsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGFjLCAweDAxNDAsIDB4NjAwMywgMHgwMDAyLCAweDAwZmUsCi0JMHgwMDllLCAweDAwMDUsIDB4MjEzMCwgMHgyMjI4LCAweDAwNTgsIDB4MjQwMCwgMHhhOWFjLCAweDkxMGEsCi0JMHgyMzAwLCAweGFhYjAsIDB4OTIxMywgMHgyNjAwLCAweDkxMDIsIDB4MjUwMCwgMHg5MjAzLCAweDBlOTAsCi0JMHhhYzM2LCAweGFiM2EsIDB4YWU0NiwgMHhhZDRhLCAweDAwZmUsIDB4NjA0MywgMHgwMDAwLCAweDJjMTAsCi0JMHgwODBjLCAweDFjMDksIDB4MDgwYywgMHg5M2EwLCAweDA4MGMsIDB4OWEwZiwgMHgwMDllLCAweDAwMDUsCi0JMHgwMDA1LCAweDkxODIsIDB4MDA1NCwgMHgxMjIwLCAweDkxODIsIDB4MDA0MCwgMHgwMjA4LCAweDAwMGEsCi0JMHgwMDA1LCAweGMzOGQsIDB4YzM4ZCwgMHhjMzhkLCAweGMzOGQsIDB4YzM4ZCwgMHhjMzhmLCAweGM0MjUsCi0JMHhjMzhkLCAweGMzOGQsIDB4YzQzYywgMHhjNGNjLCAweGMzOGQsIDB4YzM4ZCwgMHhjMzhkLCAweGMzOGQsCi0JMHhjNGUxLCAweGMzOGQsIDB4YzM4ZCwgMHhjMzhkLCAweGMzOGQsIDB4MDgwYywgMHgwZGM1LCAweDAwNzYsCi0JMHgwMGE2LCAweDAwZTYsIDB4MDA5NiwgMHgyMDcxLCAweDAyNjAsIDB4NjExNCwgMHgyMTUwLCAweDc2NDQsCi0JMHhiNjc2LCAweDk2YjQsIDB4MGZmZiwgMHhiNzdjLCAweGM3ZTUsIDB4Yjc3ZSwgMHg2MjEwLCAweDAwYjYsCi0JMHgyMjU4LCAweGJhM2MsIDB4ODJmZiwgMHgwMTEwLCAweDgyMTEsIDB4YmEzZSwgMHgwMGJlLCAweDg2ZmYsCi0JMHgwOTA0LCAweGM0MjAsIDB4OTY5NCwgMHhmZjAwLCAweDkyODQsIDB4MGMwMCwgMHgwMTIwLCAweDcwNDgsCi0JMHhiMDkyLCAweDcwNGMsIDB4YjA4ZSwgMHg5Mjg0LCAweDAzMDAsIDB4MDkwNCwgMHhjNDIwLCAweDA4MGMsCi0JMHgxMDBlLCAweDA5MGMsIDB4MGRjNSwgMHgyOTAwLCAweGIwN2EsIDB4Yjc3YywgMHhjN2NkLCAweGI3N2UsCi0JMHhhODY3LCAweDAxMDMsIDB4YjA2OCwgMHhhODZhLCAweGIwNmMsIDB4YTg2ZSwgMHhiMDcwLCAweGE4NzIsCi0JMHhhZTc2LCAweDk2OGMsIDB4MGMwMCwgMHgwMTIwLCAweDczNDgsIDB4YWI5MiwgMHg3MzRjLCAweGFiOGUsCi0JMHg5NjhjLCAweDAwZmYsIDB4OTE4NiwgMHgwMDAyLCAweDAxODAsIDB4OTE4NiwgMHgwMDI4LCAweDExMTgsCi0JMHhhODdiLCAweDAwMWMsIDB4MDA2MCwgMHhkNmRjLCAweDAxMTgsIDB4YTg3YiwgMHgwMDE1LCAweDAwMzgsCi0JMHhkNmQ0LCAweDAxMTgsIDB4YTg3YiwgMHgwMDA3LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLCAweGFmN2UsCi0JMHhiMDgwLCAweGE4ODIsIDB4YjA4NCwgMHhhODg2LCAweDkwMWUsIDB4ZDZjNCwgMHgwMTkwLCAweDczNWMsCi0JMHhhYjg2LCAweDgzZmYsIDB4MDE3MCwgMHg5MzhhLCAweDAwMDksIDB4MDIxMCwgMHgyMDE5LCAweDAwMDgsCi0JMHgwMDM2LCAweDIzMDgsIDB4MjAxOSwgMHgwMDE4LCAweDIwMTEsIDB4MDAyNSwgMHgwODBjLCAweGNhMDMsCi0JMHgwMDNlLCAweGQ2Y2MsIDB4MDFlOCwgMHg3MTU0LCAweGE5OGEsIDB4ODFmZiwgMHgwMWM4LCAweDkxOTIsCi0JMHgwMDIxLCAweDEyNjAsIDB4ODMwNCwgMHg5MDk4LCAweDAwMTgsIDB4MjAxMSwgMHgwMDI5LCAweDA4MGMsCi0JMHhjYTAzLCAweDIwMTEsIDB4MDIwNSwgMHgyMDEzLCAweDAwMDAsIDB4MDA1MCwgMHhiMDY4LCAweGQwZmMsCi0JMHgwMTIwLCAweDIwMDksIDB4MDAyMCwgMHhhOThhLCAweDBjNjgsIDB4Mjk1MCwgMHgwODBjLCAweGM5YTIsCi0JMHgwMDllLCAweDAwZWUsIDB4MDBhZSwgMHgwMDdlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGE2LCAweDYwMDMsCi0JMHgwMDAzLCAweDIwNzksIDB4MDI2YywgMHg3YzA0LCAweDdiMDAsIDB4N2UwYywgMHg3ZDA4LCAweDYwMTQsCi0JMHgyMDUwLCAweGI0MzYsIDB4YjMzYSwgMHhiNjQ2LCAweGI1NGEsIDB4MDBhZSwgMHgwMGZlLCAweDJjMTAsCi0JMHgwODBjLCAweDFjMDksIDB4MDgwNCwgMHhhNGU0LCAweDYwMDMsIDB4MDAwMiwgMHg2MDA0LCAweDkwODYsCi0JMHgwMDQwLCAweDExYzgsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGFjLCAweDAxNjAsCi0JMHg2MDFjLCAweGQwODQsIDB4MTEzMCwgMHgwMGY2LCAweDJjMDAsIDB4MjA3OCwgMHgwODBjLCAweDE3NjgsCi0JMHgwMGZlLCAweDYwMDMsIDB4MDAwNCwgMHgwMDEwLCAweDYwMDMsIDB4MDAwMiwgMHgwMDllLCAweDA4MGMsCi0JMHg5N2UxLCAweDA4MGMsIDB4OThlZCwgMHgwMDk2LCAweDIwMDEsIDB4MTk4OSwgMHgyMDA0LCAweDYwNDIsCi0JMHgwODBjLCAweDk4OWQsIDB4MDgwYywgMHg5YTBmLCAweDYxMTQsIDB4MjE0OCwgMHhhOTdjLCAweGQxZTQsCi0JMHgwOTA0LCAweGM0YzcsIDB4ZDFjYywgMHgwNWM4LCAweGE5NzgsIDB4YTg2OCwgMHhkMGZjLCAweDA1NDAsCi0JMHgwMDE2LCAweGE4N2MsIDB4MDAwNiwgMHhhODgwLCAweDAwMDYsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsCi0JMHg5MDgwLCAweDAwMTksIDB4MjBhMCwgMHg4MTBlLCAweDgxMGUsIDB4ODEwZiwgMHg5MTg0LCAweDAwM2YsCi0JMHgyMGUwLCAweDkxODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMTksIDB4MjA5OCwgMHgwMTU2LCAweDIwYTksCi0JMHgwMDIwLCAweDQwMDMsIDB4MDE1ZSwgMHgwMDBlLCAweGE4ODIsIDB4MDAwZSwgMHhjMGNjLCAweGE4N2UsCi0JMHgwMDFlLCAweGE4NzQsIDB4MDAwNiwgMHgyMTQ4LCAweDA4MGMsIDB4MGZjMCwgMHgwMDFlLCAweDA0NTgsCi0JMHgwMDE2LCAweDA4MGMsIDB4MGZjMCwgMHgwMDllLCAweGE4N2MsIDB4YzBjYywgMHhhODdlLCAweGE5NzQsCi0JMHgwMDE2LCAweDA4MGMsIDB4YzlmMywgMHgwMDFlLCAweDAwZjAsIDB4YTg2NywgMHgwMTAzLCAweGE5NzQsCi0JMHg5MTg0LCAweDAwZmYsIDB4OTBiNiwgMHgwMDAyLCAweDAxODAsIDB4OTA4NiwgMHgwMDI4LCAweDExMTgsCi0JMHhhODdiLCAweDAwMWMsIDB4MDA2MCwgMHhkMWRjLCAweDAxMTgsIDB4YTg3YiwgMHgwMDE1LCAweDAwMzgsCi0JMHhkMWQ0LCAweDAxMTgsIDB4YTg3YiwgMHgwMDA3LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLCAweDAwMTYsCi0JMHgwODBjLCAweDZiZWIsIDB4MDAxZSwgMHhkMWU0LCAweDExMjAsIDB4MDgwYywgMHhiMTAxLCAweDAwOWUsCi0JMHgwMDA1LCAweDA4MGMsIDB4ZDE1NiwgMHgwY2Q4LCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLCAweDExMjAsCi0JMHgwODBjLCAweDk3ZTEsIDB4MDgwYywgMHg5OGVkLCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGE4NzcsCi0JMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHhkNTdlLCAweDA4MGMsIDB4OTg5ZCwgMHgwODBjLCAweDlhMGYsCi0JMHgwMDA1LCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLCAweDExMjAsIDB4MDgwYywgMHg5N2UxLCAweDA4MGMsCi0JMHg5OGVkLCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGE4NzcsIDB4MDgwYywgMHg5ODlkLCAweDA4MGMsCi0JMHgzMjQ2LCAweDA4MGMsIDB4ZDU3NiwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLCAweGNlNTYsCi0JMHgwMTUwLCAweGE4NjcsIDB4MDEwMywgMHhhODdiLCAweDAwMjksIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsCi0JMHg2ZGQxLCAweDA4MGMsIDB4ZDA0MSwgMHgwMDllLCAweDA4MGMsIDB4YjEwMSwgMHgwODBjLCAweDlhMGYsCi0JMHgwMDA1LCAweGE4N2IsIDB4MDAxNSwgMHhkMWZjLCAweDAxODAsIDB4YTg3YiwgMHgwMDA3LCAweDgwMDIsCi0JMHg4MDAwLCAweDgxMGEsIDB4OTE4OSwgMHgwMDAwLCAweDAwMDYsIDB4MDAxNiwgMHgyMDA5LCAweDFhN2UsCi0JMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwgMHgwMDFlLCAweDAwMGUsIDB4YTk5MiwgMHhhODhlLCAweDAwMDUsCisJMHgwMDE5LCAweDIxYTAsIDB4OTAwZSwgMHgyMGE5LCAweDAwMjAsIDB4NDEwNCwgMHhhODdhLCAweDIwNzksCisJMHgxODAwLCAweDc5OTAsIDB4OTE4OCwgMHgwMDE4LCAweDkxOGMsIDB4MGZmZiwgMHhhOTcyLCAweGFjNzYsCisJMHgyOTUwLCAweDAwYTYsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHg5MDFlLCAweDIwMjksCisJMHgwMDAxLCAweDkxODIsIDB4MDAzNSwgMHgxMjI4LCAweDIwMTEsIDB4MDAxZiwgMHgwODBjLCAweGNjODUsCisJMHgwNGMwLCAweDIxMzAsIDB4MjAwOSwgMHgwMDM0LCAweDIwMTEsIDB4MDAxZiwgMHgwODBjLCAweGNjODUsCisJMHg5NmIyLCAweDAwMzQsIDB4YjAwNCwgMHg5MDRkLCAweDAxMTAsIDB4MDgwYywgMHgwZmMwLCAweDA4MGMsCisJMHgxMDBlLCAweDAxZDAsIDB4ODUyOCwgMHhhODY3LCAweDAxMTAsIDB4YTg2YiwgMHgwMDAwLCAweDI5MjAsCisJMHhiNDA2LCAweDk2OGEsIDB4MDAzZCwgMHgxMjMwLCAweDI2MDgsIDB4MjAxMSwgMHgwMDFiLCAweDA4MGMsCisJMHhjYzg1LCAweDAwYjgsIDB4OTZiMiwgMHgwMDNjLCAweDIwMDksIDB4MDAzYywgMHgyOTUwLCAweDIwMTEsCisJMHgwMDFiLCAweDA4MGMsIDB4Y2M4NSwgMHgwYzE4LCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDAsCisJMHgwMGFlLCAweDg1MmYsIDB4OTVhZCwgMHgwMDUwLCAweGI1NjYsIDB4YjA3MCwgMHhjMGZkLCAweGIwNzIsCisJMHgwMDQ4LCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDAsIDB4MDBhZSwgMHg4NTJmLCAweDk1YWQsCisJMHgwMDUwLCAweGI1NjYsIDB4MmE0OCwgMHhhODA0LCAweGE4MDcsIDB4MDAwMCwgMHgwMDA2LCAweDA4MGMsCisJMHg2ZTlmLCAweDAwMGUsIDB4MjA0OCwgMHg5MDA1LCAweDFkYjAsIDB4MDBmZSwgMHgwMGFlLCAweDAwOWUsCisJMHgwMDZlLCAweDAwNWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsIDB4MDBkNiwgMHgwMGY2LCAweDAwOTYsCisJMHgwMDA2LCAweDA4MGMsIDB4MTAwZSwgMHgwMDBlLCAweDA5MGMsIDB4MGRjNSwgMHhhOTYwLCAweDIxZTgsCisJMHhhOTVjLCAweDkxODgsIDB4MDAxOSwgMHgyMWEwLCAweDkwMGUsIDB4MjBhOSwgMHgwMDIwLCAweDQxMDQsCisJMHhhYTY2LCAweGE4N2EsIDB4MjA3OSwgMHgxODAwLCAweDc5OTAsIDB4ODEwYywgMHg5MTg4LCAweDAwMGMsCisJMHg5MTgyLCAweDAwMWEsIDB4MDIxMCwgMHgyMDA5LCAweDAwMWEsIDB4MjFhOCwgMHg4MTBiLCAweGE5NzIsCisJMHhhYzc2LCAweDJlOTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMWYsIDB4MjBhMCwgMHgyMDAxLCAweDAyMDUsCisJMHgyMDBjLCAweDkxOGQsIDB4MDA4MCwgMHgyMTAyLCAweDQwMDMsIDB4MjAwMywgMHgwMDAwLCAweDA4MGMsCisJMHg2ZTlmLCAweDAwOWUsIDB4MDBmZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGQ2LCAweDAwZjYsCisJMHgwMDk2LCAweDAwMTYsIDB4MjAwMSwgMHgwMjA1LCAweDIwMGMsIDB4OTE4ZCwgMHgwMDgwLCAweDIxMDIsCisJMHgwMDFlLCAweDIwNzksIDB4MDIwMCwgMHgyZTk4LCAweGE4N2MsIDB4ZDBlYywgMHgwMTE4LCAweDllODAsCisJMHgwMDBjLCAweDIwOTgsIDB4MjAyMSwgMHgwMDNlLCAweDkwMWUsIDB4OTI4MiwgMHgwMDIwLCAweDAyMTgsCisJMHgyMDExLCAweDAwMjAsIDB4MjAxOCwgMHg5NDg2LCAweDAwM2UsIDB4MTE3MCwgMHgwMDk2LCAweDA4MGMsCisJMHgxMDBlLCAweDI5MDAsIDB4MDA5ZSwgMHgwNWMwLCAweGE4MDYsIDB4MjA0OCwgMHhhODYwLCAweDIwZTgsCisJMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLCAweDMzMDAsIDB4OTA4ZSwgMHgwMjYwLCAweDAxNDAsCisJMHgyMDA5LCAweDAyODAsIDB4OTEwMiwgMHg5MjBhLCAweDAyMTgsIDB4MjAxMCwgMHgyMTAwLCAweDkzMTgsCisJMHgyMjAwLCAweDk0MDIsIDB4MTIyOCwgMHgyNDAwLCAweDkyMDIsIDB4MjQxMCwgMHg5MzE4LCAweDkwMDYsCisJMHgyMDIwLCAweDIyYTgsIDB4YTgwMCwgMHg5MjAwLCAweGE4MDIsIDB4MjBlMSwgMHgwMDAwLCAweDQwMDMsCisJMHg4M2ZmLCAweDAxODAsIDB4MzMwMCwgMHg5MDg2LCAweDAyODAsIDB4MTEzMCwgMHg3ODE0LCAweDgwMDAsCisJMHg5MDg1LCAweDAwODAsIDB4NzgxNiwgMHgyZTk4LCAweDIzMTAsIDB4ODRmZiwgMHgwOTA0LCAweGI2NDIsCisJMHgwODA0LCAweGI2NDQsIDB4OTA4NSwgMHgwMDAxLCAweDc4MTcsIDB4MDAwMCwgMHgwMDllLCAweDAwZmUsCisJMHgwMGRlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwMzYsIDB4MDA5NiwgMHg2MzE0LCAweDIzNDgsCisJMHhhODdhLCAweGE5ODIsIDB4MDgwYywgMHg2ZTkyLCAweDAwOWUsIDB4MDAzZSwgMHgwMGRlLCAweDAwMDUsCisJMHg5MWI2LCAweDAwMTUsIDB4MTExOCwgMHgwODBjLCAweGIyZDMsIDB4MDAzMCwgMHg5MWI2LCAweDAwMTYsCisJMHgxOTBjLCAweDBkYzUsIDB4MDgwYywgMHhiMmQzLCAweDAwMDUsIDB4MjBhOSwgMHgwMDBlLCAweDIwZTEsCisJMHgwMDAwLCAweDJlOTgsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsCisJMHgyMGEwLCAweDAwOWUsIDB4NDAwMywgMHg5MTk2LCAweDAwMTYsIDB4MDFmMCwgMHgwMTM2LCAweDkwODAsCisJMHgwMDFiLCAweDIwYTAsIDB4MjAxMSwgMHgwMDA2LCAweDIwYTksIDB4MDAwMSwgMHgzNDE4LCAweDgzMTgsCisJMHgyM2EwLCAweDQwMDMsIDB4MzMxOCwgMHg4MzE4LCAweDIzOTgsIDB4ODIxMSwgMHgxZGI4LCAweDIwMTEsCisJMHgwMDA2LCAweDAxM2UsIDB4MjBhMCwgMHgzMzE4LCAweDgzMTgsIDB4MjM5OCwgMHg0MDAzLCAweDM0MTgsCisJMHg4MzE4LCAweDIzYTAsIDB4ODIxMSwgMHgxZGI4LCAweDAwOTYsIDB4MDgwYywgMHhkMGQ4LCAweDAxMzAsCisJMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHgwMDllLCAweDA4MDQsCisJMHhiMmQzLCAweDAwOTYsIDB4MDBkNiwgMHgwMDM2LCAweDczMzAsIDB4OTM4NiwgMHgwMjAwLCAweDExYTgsCisJMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGNmLCAweDAwMDAsIDB4MDBiZSwgMHg2MDE0LCAweDkwMDUsCisJMHgwMTMwLCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhYjMyLCAweDA4MGMsCisJMHhiMmQzLCAweDAwM2UsIDB4MDBkZSwgMHgwMDllLCAweDAwMDUsIDB4MDAxMSwgMHgxZDQ4LCAweDBjYzgsCisJMHgwMDA2LCAweDAwMTYsIDB4MDgwYywgMHhkN2UzLCAweDAxODgsIDB4NjAxNCwgMHg5MDA1LCAweDExNzAsCisJMHg2MDBiLCAweDAwMDMsIDB4NjAxYiwgMHgwMDAwLCAweDYwNDMsIDB4MDAwMCwgMHgyMDA5LCAweDAwMjIsCisJMHgwODBjLCAweGJhZGQsIDB4OTAwNiwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsCisJMHgwY2QwLCAweDAwOTYsIDB4MDAxNiwgMHgyMGE5LCAweDAwMTQsIDB4OWU4MCwgMHgwMDBjLCAweDIwZTEsCisJMHgwMDAwLCAweDIwOTgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsCisJMHgwMDAyLCAweDIwYTAsIDB4NDAwMywgMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAxLCAweDIwOTksCisJMHgwMjYwLCAweDIwYTksIDB4MDAxNiwgMHg0MDAzLCAweDIwYTksIDB4MDAwYSwgMHhhODA0LCAweDIwNDgsCisJMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMDIsIDB4MjBhMCwgMHg0MDAzLCAweDIwMDEsCisJMHgwMjA1LCAweDIwMDMsIDB4MDAwMiwgMHgyMDk5LCAweDAyNjAsIDB4MjBhOSwgMHgwMDIwLCAweDQwMDMsCisJMHgyMDAzLCAweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MDAsIDB4MjA0OCwgMHhhODY3LCAweDAxMDMsCisJMHgwODBjLCAweGIyZDMsIDB4MDAxZSwgMHgwMDllLCAweDAwMDUsIDB4MDA5NiwgMHgwMDE2LCAweDkwMGUsCisJMHg3MDMwLCAweDkwODYsIDB4MDEwMCwgMHgwMTQwLCAweDcwMzgsIDB4OTA4NCwgMHgwMGZmLCAweDgwMGMsCisJMHg3MDNjLCAweDkwODQsIDB4MDBmZiwgMHg4MDA0LCAweDkwODAsIDB4MDAwNCwgMHg5MTA4LCAweDgxMGIsCisJMHgyMDExLCAweDAwMDIsIDB4MjAxOSwgMHgwMDBjLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGNjODUsCisJMHgwODBjLCAweGQwZDgsIDB4MDE0MCwgMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjQsCisJMHhhOGUyLCAweGE4NjcsIDB4MDEwMywgMHgwODBjLCAweGIyZDMsIDB4MDAxZSwgMHgwMDllLCAweDAwMDUsCisJMHgwMDE2LCAweDIwMDksIDB4MDAwMCwgMHg3MDMwLCAweDkwODYsIDB4MDIwMCwgMHgwMTEwLCAweDIwMDksCisJMHgwMDAxLCAweDAwOTYsIDB4NjAxNCwgMHg5MDRkLCAweDA5MGMsIDB4MGRjNSwgMHhhOTdhLCAweDA4MGMsCisJMHg2ZTlmLCAweDAwOWUsIDB4MDgwYywgMHhiMmQzLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwOTYsCisJMHg3MDMwLCAweDkwODYsIDB4MDEwMCwgMHgxMTE4LCAweDIwMDksIDB4MDAwNCwgMHgwMDEwLCAweDcwMzQsCisJMHg4MDBjLCAweDgxMGIsIDB4MjAxMSwgMHgwMDBjLCAweDIwMTksIDB4MDAwYywgMHg2MDE0LCAweDIwNDgsCisJMHhhODA0LCAweDAwOTYsIDB4OTAwNSwgMHgwMTA4LCAweDIwNDgsIDB4MDgwYywgMHhjYzg1LCAweDAwOWUsCisJMHgwODBjLCAweGQwZDgsIDB4MDE0OCwgMHhhODA0LCAweDkwMDUsIDB4MTE1OCwgMHhhODA3LCAweDAwMDAsCisJMHhhODY0LCAweGE4ZTIsIDB4YTg2NywgMHgwMTAzLCAweDA4MGMsIDB4YjJkMywgMHgwMDllLCAweDAwMWUsCisJMHgwMDA1LCAweDAwODYsIDB4MjA0MCwgMHhhMDMwLCAweDgwMDcsIDB4OTA4NiwgMHgwMTAwLCAweDExMTgsCisJMHgwODBjLCAweGJjYjYsIDB4MDBlMCwgMHhhMDM0LCAweDgwMDcsIDB4ODAwYywgMHg4ODA2LCAweDgwMDYsCisJMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDBjLCAweGE4N2IsCisJMHgwMDAwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDAsIDB4YWFhMCwgMHhhYjljLCAweGFjYTgsCisJMHhhZGE0LCAweDIwMzEsIDB4MDAwMCwgMHgyMDQxLCAweDEyNTIsIDB4MDAxOSwgMHgwZDA4LCAweDAwOGUsCisJMHgwODk4LCAweDAwOTYsIDB4MDAwNiwgMHgwODBjLCAweDEwMGUsIDB4MDAwZSwgMHgwMWIwLCAweGE4YWIsCisJMHgwZGNiLCAweGE4NzYsIDB4MDAwZSwgMHhhOGEyLCAweDAwMDYsIDB4YWU2YSwgMHgyODAwLCAweGE4OWUsCisJMHhhOTdhLCAweGFmNzIsIDB4YWE4ZSwgMHhhYjkyLCAweGFjOTYsIDB4YWQ5YSwgMHgwMDg2LCAweDI5NDAsCisJMHgwODBjLCAweDEwZjgsIDB4MDA4ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDA5ZSwgMHgwMDA1LCAweDAwZTYsCisJMHgwMGQ2LCAweDAwMjYsIDB4NzAwOCwgMHg5MDg0LCAweDAwZmYsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCisJMHhiYTEwLCAweDAwYmUsIDB4OTIwNiwgMHgxNTIwLCAweDcwMGMsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCisJMHhiYTE0LCAweDAwYmUsIDB4OTIwNiwgMHgxMWUwLCAweDYwNDMsIDB4MDAwMCwgMHgyYzY4LCAweDAwMTYsCisJMHgyMDA5LCAweDAwMzUsIDB4MDgwYywgMHhkNzU5LCAweDAwMWUsIDB4MTE1OCwgMHg2MjJjLCAweDIyNjgsCisJMHgyMDcxLCAweDAyNmMsIDB4NmIyMCwgMHg5Mzg2LCAweDAwMDMsIDB4MDEzMCwgMHg5Mzg2LCAweDAwMDYsCisJMHgwMTI4LCAweDA4MGMsIDB4YjJkMywgMHgwMDIwLCAweDAwMzksIDB4MDAxMCwgMHgwODBjLCAweGI5MTAsCisJMHgwMDJlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwOTYsIDB4NjgxNCwgMHgyMDQ4LCAweDkxODYsCisJMHgwMDE1LCAweDA5MDQsIDB4YjhmOCwgMHg5MThlLCAweDAwMTYsIDB4MTkwNCwgMHhiOTBlLCAweDcwMGMsCisJMHg5MDhjLCAweGZmMDAsIDB4OTE4NiwgMHgxNzAwLCAweDAxMjAsIDB4OTE4NiwgMHgwMzAwLCAweDE5MDQsCisJMHhiOGQyLCAweDg5ZmYsIDB4MTEzOCwgMHg2ODAwLCAweDkwODYsIDB4MDAwZiwgMHgwOTA0LCAweGI4YjUsCisJMHgwODA0LCAweGI5MGMsIDB4NjgwOCwgMHg5MDg2LCAweGZmZmYsIDB4MTkwNCwgMHhiOGZhLCAweGE4N2MsCisJMHg5MDg0LCAweDAwNjAsIDB4OTA4NiwgMHgwMDIwLCAweDExMjgsIDB4YTgzYywgMHhhOTQwLCAweDkxMDUsCisJMHgxOTA0LCAweGI4ZmEsIDB4NjgyNCwgMHhkMDg0LCAweDE5MDQsIDB4YjhmYSwgMHhkMGI0LCAweDAxNTgsCisJMHgwMDE2LCAweDIwMDEsIDB4MTk4NiwgMHgyMDBjLCAweDYwMTgsIDB4OTEwMiwgMHg5MDgyLCAweDAwMDUsCisJMHgwMDFlLCAweDFhMDQsIDB4YjhmYSwgMHgwODBjLCAweGQyYzMsIDB4Njg1YywgMHhhODgyLCAweGE4N2MsCisJMHhjMGRjLCAweGMwZjQsIDB4YzBkNCwgMHhhODdlLCAweDAwMjYsIDB4OTAwZSwgMHg2YTE4LCAweDIwMDEsCisJMHgwMDBhLCAweDA4MGMsIDB4OTM3NSwgMHhhODg0LCAweDkyMGEsIDB4MDIwOCwgMHg4MDExLCAweGFhODYsCisJMHg4MmZmLCAweDAwMmUsIDB4MTEzOCwgMHgwMGM2LCAweDJkNjAsIDB4MDgwYywgMHhjZGUzLCAweDAwY2UsCisJMHgwODA0LCAweGI5MGMsIDB4MDBjNiwgMHhhODY4LCAweGQwZmMsIDB4MTExOCwgMHgwODBjLCAweDYxYzIsCisJMHgwMDEwLCAweDA4MGMsIDB4NjVjZiwgMHgwMGNlLCAweDE5MDQsIDB4YjhmYSwgMHgwMGM2LCAweDJkNjAsCisJMHgwODBjLCAweGIyZDMsIDB4MDBjZSwgMHgwODA0LCAweGI5MGMsIDB4MDBjNiwgMHgwODBjLCAweGIzMjUsCisJMHgwMTk4LCAweDYwMTcsIDB4MDAwMCwgMHg2ODEwLCAweDYwMTIsIDB4MDgwYywgMHhkNTU0LCAweDYwMjMsCisJMHgwMDAzLCAweDY5MDQsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4YjJkMywgMHgwMGNlLCAweDA4MGMsCisJMHhiMzUyLCAweDAwY2UsIDB4MDgwNCwgMHhiOTBjLCAweDIwMDEsIDB4MTk4OCwgMHgyMDA0LCAweDY4NDIsCisJMHgwMGNlLCAweDA0ZDAsIDB4NzAwOCwgMHg5MDg2LCAweDAwMGIsIDB4MTFjOCwgMHg2MDEwLCAweDAwYjYsCisJMHgyMDU4LCAweGI5MDAsIDB4YzFiYywgMHhiOTAyLCAweDAwYmUsIDB4MDBjNiwgMHgyZDYwLCAweGE4N2IsCisJMHgwMDAzLCAweDA4MGMsIDB4ZDc5ZCwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsCisJMHgwMDAyLCAweDA4MGMsIDB4OTRmZiwgMHgwODBjLCAweDlhYjEsIDB4MDBjZSwgMHgwMGU4LCAweDcwMGMsCisJMHg5MDg2LCAweDJhMDAsIDB4MTEzOCwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2ODQyLCAweDAwYTAsCisJMHgwNDc5LCAweDAwYTAsIDB4ODlmZiwgMHgwOTBjLCAweDBkYzUsIDB4MDBjNiwgMHgwMGQ2LCAweDJkNjAsCisJMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDAzLCAweDA4MGMsIDB4NmNiOSwgMHgwODBjLCAweGQyYzMsCisJMHgwODBjLCAweGIzMDYsIDB4MDBkZSwgMHgwMGNlLCAweDA4MGMsIDB4YjJkMywgMHgwMDllLCAweDAwMDUsCisJMHg5MTg2LCAweDAwMTUsIDB4MTEyOCwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2ODQyLCAweDAwNjgsCisJMHg5MThlLCAweDAwMTYsIDB4MTE2MCwgMHgwMGM2LCAweDJkMDAsIDB4MjA2MCwgMHgwODBjLCAweGVlODcsCisJMHgwODBjLCAweDhhMjUsIDB4MDgwYywgMHhiMmQzLCAweDAwY2UsIDB4MDgwYywgMHhiMmQzLCAweDAwMDUsCisJMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHg3MjI4LCAweGFjYjAsIDB4YWJhYywgMHhkMmY0LCAweDAxMzAsCisJMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2ODQyLCAweDA4MDQsIDB4Yjk4YSwgMHgwMGM2LCAweDJkNjAsCisJMHgwODBjLCAweGNjZTYsIDB4MDBjZSwgMHg2ODA0LCAweDkwODYsIDB4MDA1MCwgMHgxMTY4LCAweDAwYzYsCisJMHgyZDAwLCAweDIwNjAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA1MCwgMHgwODBjLCAweDk0ZmYsCisJMHgwODBjLCAweDlhYjEsIDB4MDBjZSwgMHgwNGYwLCAweDY4MDAsIDB4OTA4NiwgMHgwMDBmLCAweDAxYTgsCisJMHg4OWZmLCAweDA5MGMsIDB4MGRjNSwgMHg2ODAwLCAweDkwODYsIDB4MDAwNCwgMHgxMTkwLCAweGE4N2MsCisJMHhkMGFjLCAweDAxNzgsIDB4YTg0MywgMHgwZmZmLCAweGE4M2YsIDB4MGZmZiwgMHhhODgwLCAweGMwZmMsCisJMHhhODgyLCAweDIwMDEsIDB4MDAwMSwgMHg2ODMyLCAweDA0MDAsIDB4MjAwMSwgMHgwMDA3LCAweDY4MzIsCisJMHgwMGUwLCAweGE4N2MsIDB4ZDBiNCwgMHgxMTUwLCAweGQwYWMsIDB4MGRiOCwgMHg2ODI0LCAweGQwZjQsCisJMHgxZDQ4LCAweGE4MzgsIDB4YTkzNCwgMHg5MTA1LCAweDBkODAsIDB4MGMyMCwgMHhkMmVjLCAweDFkNjgsCisJMHg3MDI0LCAweDkzMDYsIDB4MTExOCwgMHg3MDIwLCAweDk0MDYsIDB4MGQzOCwgMHg3MDIwLCAweDY4M2UsCisJMHg3MDI0LCAweDY4M2EsIDB4MjAwMSwgMHgwMDA1LCAweDY4MzIsIDB4MDgwYywgMHhkNDRiLCAweDA4MGMsCisJMHg5YWIxLCAweDAwMTAsIDB4MDgwYywgMHhiMmQzLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsCisJMHgwMGU2LCAweDAwZDYsIDB4MDAyNiwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MjEwLCAweDAwYjYsCisJMHgyMjU4LCAweGJhMTAsIDB4MDBiZSwgMHg5MjA2LCAweDE5MDQsIDB4YjlmNSwgMHg3MDBjLCAweDYyMTAsCisJMHgwMGI2LCAweDIyNTgsIDB4YmExNCwgMHgwMGJlLCAweDkyMDYsIDB4MTkwNCwgMHhiOWY1LCAweDYwMzgsCisJMHgyMDY4LCAweDY4MjQsIDB4YzBkYywgMHg2ODI2LCAweDZhMjAsIDB4OTI4NiwgMHgwMDA3LCAweDA5MDQsCisJMHhiOWY1LCAweDkyODYsIDB4MDAwMiwgMHgwOTA0LCAweGI5ZjUsIDB4OTI4NiwgMHgwMDAwLCAweDA1ZTgsCisJMHg2ODA4LCAweDYzM2MsIDB4OTMwNiwgMHgxNWM4LCAweDIwNzEsIDB4MDI2YywgMHg5MTg2LCAweDAwMTUsCisJMHgwNTcwLCAweDkxOGUsIDB4MDAxNiwgMHgxMTAwLCAweDAwYzYsIDB4NjAzOCwgMHgyMDYwLCAweDYxMDQsCisJMHg5MTg2LCAweDAwNGIsIDB4MDFjMCwgMHg5MTg2LCAweDAwNGMsIDB4MDFhOCwgMHg5MTg2LCAweDAwNGQsCisJMHgwMTkwLCAweDkxODYsIDB4MDA0ZSwgMHgwMTc4LCAweDkxODYsIDB4MDA1MiwgMHgwMTYwLCAweDYwMTQsCisJMHgwMDk2LCAweDIwNDgsIDB4MDgwYywgMHhkMGQ4LCAweDA5MGMsIDB4MGRjNSwgMHhhODdiLCAweDAwMDMsCisJMHgwMDllLCAweDA4MGMsIDB4ZDc5ZCwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsCisJMHgwMDAyLCAweDA4MGMsIDB4OTRmZiwgMHgwODBjLCAweDlhYjEsIDB4MDBjZSwgMHgwMDMwLCAweDYwMzgsCisJMHgyMDcwLCAweDIwMDEsIDB4MTk4OCwgMHgyMDA0LCAweDcwNDIsIDB4MDgwYywgMHhiMmQzLCAweDAwMmUsCisJMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGI2LCAweDAwOTYsIDB4MDBmNiwgMHg2MDE0LCAweDIwNDgsCisJMHg2MDEwLCAweDIwNTgsIDB4OTFiNiwgMHgwMDE1LCAweDAxMzAsIDB4YmEwOCwgMHhiYjBjLCAweGJjMDAsCisJMHhjNDhjLCAweGJjMDIsIDB4MDQ3MCwgMHgwMDk2LCAweDAxNTYsIDB4MDAzNiwgMHgwMDI2LCAweDJiNDgsCisJMHg5ZTkwLCAweDAwMTAsIDB4MjAxOSwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgwODBjLCAweGMzNzksCisJMHgwMDJlLCAweDAwM2UsIDB4MDE1ZSwgMHgwMDllLCAweDE5MDQsIDB4YmE2NiwgMHgwMDk2LCAweDAxNTYsCisJMHgwMDM2LCAweDAwMjYsIDB4MmI0OCwgMHg5ZTkwLCAweDAwMTQsIDB4MjAxOSwgMHgwMDA2LCAweDIwYTksCisJMHgwMDA0LCAweDA4MGMsIDB4YzM3OSwgMHgwMDJlLCAweDAwM2UsIDB4MDE1ZSwgMHgwMDllLCAweDE1YjAsCisJMHg3MjM4LCAweGJhMGEsIDB4NzMzYywgMHhiYjBlLCAweDgzZmYsIDB4MDExOCwgMHhiYzAwLCAweGM0OGQsCisJMHhiYzAyLCAweGE4MDQsIDB4OTAwNSwgMHgxMTI4LCAweDAwZmUsIDB4MDA5ZSwgMHgwMGJlLCAweDA4MDQsCisJMHhiNmRjLCAweDAwOTYsIDB4MjA0OCwgMHhhYTEyLCAweGFiMTYsIDB4YWMwYSwgMHgwMDllLCAweDgwMDYsCisJMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMDIsCisJMHgyMDA5LCAweDAwMmIsIDB4YWFhMCwgMHhhYjljLCAweGFjYTgsIDB4YWRhNCwgMHgyMDMxLCAweDAwMDAsCisJMHgyMDQxLCAweDEyNTIsIDB4MDgwYywgMHhiN2YxLCAweDAxMzAsIDB4MDBmZSwgMHgwMDllLCAweDA4MGMsCisJMHhiMmQzLCAweDAwYmUsIDB4MDAwNSwgMHgwODBjLCAweGJjYjYsIDB4MGNiOCwgMHgyYjc4LCAweDAwZjYsCisJMHgwODBjLCAweDMyNTAsIDB4MDgwYywgMHhkN2Y4LCAweDAwZmUsIDB4MDBjNiwgMHgwODBjLCAweGIyN2QsCisJMHgyZjAwLCAweDYwMTIsIDB4NjAxNywgMHgwMDAwLCAweDYwMjMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsCisJMHg2MDAzLCAweDAwMDEsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjY2YSwgMHgwODBjLCAweDY2OTYsCisJMHgwODBjLCAweDk1NDcsIDB4MDgwYywgMHg5YWIxLCAweDAwY2UsIDB4MDgwNCwgMHhiYTM5LCAweDIxMDAsCisJMHg5MWIyLCAweDAwNTMsIDB4MWEwYywgMHgwZGM1LCAweDkxYjIsIDB4MDA0MCwgMHgxYTA0LCAweGJhZWYsCisJMHgwMDAyLCAweGJhZGQsIDB4YmFkZCwgMHhiYWQzLCAweGJhZGQsIDB4YmFkZCwgMHhiYWRkLCAweGJhZDEsCisJMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsCisJMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsCisJMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsCisJMHhiYWRkLCAweGJhZDEsIDB4YmFkZCwgMHhiYWRkLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsCisJMHhiYWQxLCAweGJhZDMsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsCisJMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWRkLCAweGJhZGQsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsCisJMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWQxLCAweGJhZDEsIDB4YmFkMSwgMHhiYWRkLCAweGJhZDEsCisJMHhiYWQxLCAweDA4MGMsIDB4MGRjNSwgMHgwMDY2LCAweDAwYjYsIDB4NjYxMCwgMHgyNjU4LCAweGI4Y2MsCisJMHhjMDhjLCAweGI4Y2UsIDB4MDBiZSwgMHgwMDZlLCAweDAwMDAsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsCisJMHg5MTg2LCAweDAwMzIsIDB4MDExOCwgMHgwODBjLCAweDk1NDcsIDB4MDAxMCwgMHgwODBjLCAweDk0ZmYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDlhYjEsIDB4MDEyZSwgMHgwMDA1LCAweDI2MDAsCisJMHgwMDAyLCAweGJhZGQsIDB4YmFkZCwgMHhiYjAzLCAweGJhZGQsIDB4YmFkZCwgMHhiYjAzLCAweGJiMDMsCisJMHhiYjAzLCAweGJiMDMsIDB4YmFkZCwgMHhiYjAzLCAweGJhZGQsIDB4YmIwMywgMHhiYWRkLCAweGJiMDMsCisJMHhiYjAzLCAweGJiMDMsIDB4YmIwMywgMHgwODBjLCAweDBkYzUsIDB4NjAwNCwgMHg5MGIyLCAweDAwNTMsCisJMHgxYTBjLCAweDBkYzUsIDB4OTFiNiwgMHgwMDEzLCAweDA5MDQsIDB4YmJkOCwgMHg5MWI2LCAweDAwMjcsCisJMHgxOTA0LCAweGJiODIsIDB4MDgwYywgMHg5OWE1LCAweDYwMDQsIDB4MDgwYywgMHhkMmNmLCAweDAxYjAsCisJMHgwODBjLCAweGQyZTAsIDB4MDFhOCwgMHg5MDhlLCAweDAwMjEsIDB4MDkwNCwgMHhiYjdmLCAweDkwOGUsCisJMHgwMDIyLCAweDExMzAsIDB4MDgwYywgMHhiNzA4LCAweDA5MDQsIDB4YmI3YiwgMHgwODA0LCAweGJiN2MsCisJMHg5MDhlLCAweDAwM2QsIDB4MDkwNCwgMHhiYjdmLCAweDA4MDQsIDB4YmI3NSwgMHgwODBjLCAweDMyNzksCisJMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NjZhLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI5YTAsCisJMHgwMGJlLCAweDA4MGMsIDB4YmNiNiwgMHg5MTg2LCAweDAwN2UsIDB4MTE0OCwgMHgyMDAxLCAweDE4MzcsCisJMHgyMDE0LCAweGMyODUsIDB4MDgwYywgMHg3NjM3LCAweDExMDgsIDB4YzJhZCwgMHgyMjAyLCAweDAwMzYsCisJMHgwMDI2LCAweDIwMTksIDB4MDAyOCwgMHgyMTEwLCAweDA4MGMsIDB4ZWY5NCwgMHgwMDJlLCAweDAwM2UsCisJMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgyMTEwLCAweDIwMTksIDB4MDAyOCwgMHgwODBjLCAweDk2YTQsCisJMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5NTc3LCAweDYwMTAsIDB4MDBiNiwgMHg5MDVkLCAweDAxMDAsCisJMHgwMGJlLCAweDJjMDgsIDB4MDgwYywgMHhlOTFjLCAweDAwN2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwODBjLCAweGQ3ZjgsIDB4MDAxNiwgMHgwODBjLCAweGQ1NGMsIDB4MDgwYywgMHhiMmQzLCAweDAwMWUsCisJMHgwODBjLCAweDMzNGMsIDB4MDgwYywgMHg5YWIxLCAweDAwMzAsIDB4MDgwYywgMHhkNTRjLCAweDA4MGMsCisJMHhiMmQzLCAweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDA4MGMsIDB4YmNiNiwgMHgwY2IwLCAweDA4MGMsCisJMHhiY2YyLCAweDBjOTgsIDB4OTE4NiwgMHgwMDE1LCAweDAxMTgsIDB4OTE4NiwgMHgwMDE2LCAweDExNDgsCisJMHgwODBjLCAweGQ4MDksIDB4MGQ4MCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMiwgMHgwOTA0LCAweGJjZmQsCisJMHgwYzUwLCAweDkxODYsIDB4MDAxNCwgMHgxZDM4LCAweDA4MGMsIDB4OTlhNSwgMHg2MDA0LCAweDkwOGUsCisJMHgwMDIyLCAweDExMTgsIDB4MDgwYywgMHhiNzA4LCAweDA5ZjAsIDB4MDgwYywgMHgzMjUwLCAweDA4MGMsCisJMHhkN2Y4LCAweDA4MGMsIDB4ZDJjZiwgMHgxMTk4LCAweDA4MGMsIDB4MzI3OSwgMHg2MDEwLCAweDAwYjYsCisJMHgyMDU4LCAweGI5YTAsIDB4MDBiZSwgMHgwODBjLCAweGJjYjYsIDB4OTE4NiwgMHgwMDdlLCAweDExMjgsCisJMHgyMDAxLCAweDE4MzcsIDB4MjAwYywgMHhjMTg1LCAweDIxMDIsIDB4MDgwNCwgMHhiYjc1LCAweDA4MGMsCisJMHhkMmUwLCAweDExMjAsIDB4MDgwYywgMHhiY2I2LCAweDA4MDQsIDB4YmI3NSwgMHg2MDA0LCAweDkwOGUsCisJMHgwMDMyLCAweDExNjAsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsIDB4MTg5ZSwgMHgyMDc5LCAweDAwMDAsCisJMHgwODBjLCAweDM1ZTcsIDB4MDBmZSwgMHgwMGVlLCAweDA4MDQsIDB4YmI3NSwgMHg2MDA0LCAweDkwOGUsCisJMHgwMDIxLCAweDBkNDAsIDB4OTA4ZSwgMHgwMDIyLCAweDA5MGMsIDB4YmNiNiwgMHgwODA0LCAweGJiNzUsCisJMHg5MGIyLCAweDAwNDAsIDB4MWEwNCwgMHhiYzkyLCAweDIwMDgsIDB4MDAwMiwgMHhiYzIwLCAweGJjMjEsCisJMHhiYzI0LCAweGJjMjcsIDB4YmMyYSwgMHhiYzM3LCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjMWUsCisJMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjMWUsCisJMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjMWUsCisJMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjM2EsIDB4YmM0NywgMHhiYzFlLCAweGJjNDksCisJMHhiYzQ3LCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzQ3LCAweGJjNDcsCisJMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjMWUsCisJMHhiYzc5LCAweGJjNDcsIDB4YmMxZSwgMHhiYzQzLCAweGJjMWUsIDB4YmMxZSwgMHhiYzFlLCAweGJjNDQsCisJMHhiYzFlLCAweGJjMWUsIDB4YmMxZSwgMHhiYzQ3LCAweGJjNzAsIDB4YmMxZSwgMHgwODBjLCAweDBkYzUsCisJMHgwNDMwLCAweDIwMDEsIDB4MDAwYiwgMHgwNDcwLCAweDIwMDEsIDB4MDAwMywgMHgwNDU4LCAweDIwMDEsCisJMHgwMDA1LCAweDA0NDAsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwNCwgMHgwMGJlLCAweDkwODQsCisJMHgwMGZmLCAweDkwODYsIDB4MDAwMCwgMHgxNTAwLCAweDIwMDEsIDB4MDAwMSwgMHgwMGQ4LCAweDIwMDEsCisJMHgwMDA5LCAweDAwYzAsIDB4MDgwYywgMHg5OWE1LCAweDYwMDMsIDB4MDAwNSwgMHgwODBjLCAweGQ3ZmIsCisJMHgwODBjLCAweDlhYjEsIDB4MDA3MCwgMHgwMDE4LCAweDAwMTAsIDB4MDgwYywgMHg2NjZhLCAweDA4MDQsCisJMHhiYzhhLCAweDA4MGMsIDB4OTlhNSwgMHgwODBjLCAweGQ3ZmIsIDB4NjAwMywgMHgwMDA0LCAweDA4MGMsCisJMHg5YWIxLCAweDAwMDUsIDB4MDgwYywgMHg2NjZhLCAweDA4MGMsIDB4OTlhNSwgMHg2MDAzLCAweDAwMDIsCisJMHgwMDM2LCAweDIwMTksIDB4MTg1MiwgMHgyMzA0LCAweDkwODQsIDB4ZmYwMCwgMHgxMTIwLCAweDIwMDEsCisJMHgxOTg2LCAweDIwMWMsIDB4MDA0MCwgMHg4MDA3LCAweDkwOWEsIDB4MDAwNCwgMHgwZWMwLCAweDgwMDMsCisJMHg4MDFiLCAweDgzMWIsIDB4OTMxOCwgMHg2MzFhLCAweDAwM2UsIDB4MDgwYywgMHg5YWIxLCAweDBjMDgsCisJMHgwODBjLCAweDk5YTUsIDB4MDgwYywgMHhkNTRjLCAweDA4MGMsIDB4YjJkMywgMHgwODBjLCAweDlhYjEsCisJMHgwOGMwLCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweDE4OWUsIDB4MjA3OSwgMHgwMDAwLCAweDA4MGMsCisJMHgzNWU3LCAweDAwZmUsIDB4MDBlZSwgMHgwODBjLCAweDk5YTUsIDB4MDgwYywgMHhiMmQzLCAweDA4MGMsCisJMHg5YWIxLCAweDA4MzgsIDB4MDgwYywgMHg5OWE1LCAweDYwMDMsIDB4MDAwMiwgMHgwODBjLCAweGQ3ZmIsCisJMHgwODA0LCAweDlhYjEsIDB4MjYwMCwgMHgyMDA4LCAweDAwMDIsIDB4YmNhOSwgMHhiYzhhLCAweGJjYTcsCisJMHhiYzhhLCAweGJjOGEsIDB4YmNhNywgMHhiY2E3LCAweGJjYTcsIDB4YmNhNywgMHhiYzhhLCAweGJjYTcsCisJMHhiYzhhLCAweGJjYTcsIDB4YmM4YSwgMHhiY2E3LCAweGJjYTcsIDB4YmNhNywgMHhiY2E3LCAweDA4MGMsCisJMHgwZGM1LCAweDA4MGMsIDB4OTlhNSwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweDZlOWYsCisJMHgwMDllLCAweDA4MGMsIDB4YjJkMywgMHgwODBjLCAweDlhYjEsIDB4MDAwNSwgMHgwMGU2LCAweDAwOTYsCisJMHgwMDI2LCAweDAwMTYsIDB4MDgwYywgMHhkMGQ4LCAweDA1NjgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NjQsCisJMHg5MDg2LCAweDAxMzksIDB4MTFhOCwgMHhhODk0LCAweDkwODYsIDB4MDA1NiwgMHgxMTQ4LCAweDA4MGMsCisJMHg1NTZmLCAweDAxMzAsIDB4MjAwMSwgMHgwMDAwLCAweDkwMGUsIDB4MjAxMSwgMHg0MDAwLCAweDAwMjgsCisJMHgyMDAxLCAweDAwMzAsIDB4OTAwZSwgMHgyMDExLCAweDQwMDUsIDB4MDgwYywgMHhkNmJkLCAweDAwOTAsCisJMHhhODY4LCAweGQwZmMsIDB4MDE3OCwgMHhhODA3LCAweDAwMDAsIDB4MDAxNiwgMHg2MDA0LCAweDkwOGUsCisJMHgwMDIxLCAweDAxNjgsIDB4OTA4ZSwgMHgwMDNkLCAweDAxNTAsIDB4MDAxZSwgMHhhODY3LCAweDAxMDMsCisJMHhhODMzLCAweDAxMDAsIDB4MDAxZSwgMHgwMDJlLCAweDAwOWUsIDB4MDBlZSwgMHgwMDA1LCAweDAwMWUsCisJMHgwMDA5LCAweDBjYzAsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LCAweGE4NjcsCisJMHgwMTAzLCAweGE4MjMsIDB4ODAwMSwgMHgwMDllLCAweDAwMDUsIDB4MDBiNiwgMHg2NjEwLCAweDI2NTgsCisJMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MGIyLCAweDAwMGMsIDB4MWEwYywgMHgwZGM1LCAweDY2MDQsCisJMHg5NmI2LCAweDAwNGQsIDB4MTEyMCwgMHgwODBjLCAweGQ1ZGMsIDB4MDgwNCwgMHhiZDgyLCAweDY2MDQsCisJMHg5NmI2LCAweDAwNDMsIDB4MTEyMCwgMHgwODBjLCAweGQ2MjUsIDB4MDgwNCwgMHhiZDgyLCAweDY2MDQsCisJMHg5NmI2LCAweDAwNGIsIDB4MTEyMCwgMHgwODBjLCAweGQ2NTEsIDB4MDgwNCwgMHhiZDgyLCAweDY2MDQsCisJMHg5NmI2LCAweDAwMzMsIDB4MTEyMCwgMHgwODBjLCAweGQ1NmUsIDB4MDgwNCwgMHhiZDgyLCAweDY2MDQsCisJMHg5NmI2LCAweDAwMjgsIDB4MTEyMCwgMHgwODBjLCAweGQzMWUsIDB4MDgwNCwgMHhiZDgyLCAweDY2MDQsCisJMHg5NmI2LCAweDAwMjksIDB4MTEyMCwgMHgwODBjLCAweGQzNWYsIDB4MDgwNCwgMHhiZDgyLCAweDY2MDQsCisJMHg5NmI2LCAweDAwMWYsIDB4MTEyMCwgMHgwODBjLCAweGI2YWQsIDB4MDgwNCwgMHhiZDgyLCAweDY2MDQsCisJMHg5NmI2LCAweDAwMDAsIDB4MTExOCwgMHgwODBjLCAweGI5ZmIsIDB4MDRlMCwgMHg2NjA0LCAweDk2YjYsCisJMHgwMDIyLCAweDExMTgsIDB4MDgwYywgMHhiNmU5LCAweDA0YTgsIDB4NjYwNCwgMHg5NmI2LCAweDAwMzUsCisJMHgxMTE4LCAweDA4MGMsIDB4YjgwZiwgMHgwNDcwLCAweDY2MDQsIDB4OTZiNiwgMHgwMDM5LCAweDExMTgsCisJMHgwODBjLCAweGI5OTAsIDB4MDQzOCwgMHg2NjA0LCAweDk2YjYsIDB4MDAzZCwgMHgxMTE4LCAweDA4MGMsCisJMHhiNzIxLCAweDA0MDAsIDB4NjYwNCwgMHg5NmI2LCAweDAwNDQsIDB4MTExOCwgMHgwODBjLCAweGI3NWQsCisJMHgwMGM4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDQ5LCAweDExMTgsIDB4MDgwYywgMHhiNzllLCAweDAwOTAsCisJMHg2NjA0LCAweDk2YjYsIDB4MDA0MSwgMHgxMTE4LCAweDA4MGMsIDB4Yjc4OCwgMHgwMDU4LCAweDkxYjYsCisJMHgwMDE1LCAweDExMTAsIDB4MDA2MywgMHgwMDMwLCAweDkxYjYsIDB4MDAxNiwgMHgxMTI4LCAweDAwYmUsCisJMHgwODA0LCAweGMwOGUsIDB4MDBiZSwgMHgwMDA1LCAweDA4MGMsIDB4YjM2ZCwgMHgwY2Q4LCAweGJkOWYsCisJMHhiZGFkLCAweGJkOWYsIDB4YmRmNCwgMHhiZDlmLCAweGJmYWIsIDB4YzA5YiwgMHhiZDlmLCAweGJkOWYsCisJMHhjMDY0LCAweGJkOWYsIDB4YzA3YSwgMHgwMDk2LCAweDYwMWYsIDB4MDAwMCwgMHg2MDE0LCAweDIwNDgsCisJMHhhODAwLCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLCAweDAwOWUsIDB4MDgwNCwgMHhiMmQzLCAweGEwMDEsCisJMHhhMDAxLCAweDAwMDUsIDB4NjYwNCwgMHg5NmI2LCAweDAwMDQsIDB4MTEzMCwgMHgyMDAxLCAweDAwMDEsCisJMHgwODBjLCAweDY2NTYsIDB4MDgwNCwgMHhiMmQzLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsCisJMHg3MDkwLCAweDkwODYsIDB4MDA3NCwgMHgxNTQwLCAweDA4MGMsIDB4ZThlZCwgMHgxMWIwLCAweDYwMTAsCisJMHgwMGI2LCAweDIwNTgsIDB4NzAzMCwgMHhkMDhjLCAweDAxMjgsIDB4YjgwMCwgMHhkMGJjLCAweDAxMTAsCisJMHhjMGM1LCAweGI4MDIsIDB4MDBmOSwgMHgwMGJlLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY2NmEsCisJMHgwODBjLCAweDMyNzksIDB4MDgwYywgMHhiMmQzLCAweDAwOTgsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsCisJMHg2NjZhLCAweDA4MGMsIDB4MzI3OSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDA4MGMsCisJMHg5NTQ3LCAweDA4MGMsIDB4OWFiMSwgMHgwMDIwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGJmN2IsCisJMHgwMGVlLCAweDAwMDUsIDB4MDBkNiwgMHhiODAwLCAweGQwODQsIDB4MDE2MCwgMHg5MDA2LCAweDA4MGMsCisJMHg2NjU2LCAweDIwNjksIDB4MTg0NywgMHg2ODA0LCAweGQwYTQsIDB4MDEyMCwgMHgyMDAxLCAweDAwMDYsCisJMHgwODBjLCAweDY2OTYsIDB4MDBkZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGQ2LCAweDIwMTEsCisJMHgxODI0LCAweDIyMDQsIDB4OTA4NiwgMHgwMDc0LCAweDE5MDQsIDB4YmY1MCwgMHg2MDEwLCAweDIwNTgsCisJMHhiYWEwLCAweDkyODYsIDB4MDA3ZSwgMHgxMTIwLCAweDA4MGMsIDB4YzFlYSwgMHgwODA0LCAweGJlYmQsCisJMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLCAweDA5MDQsIDB4YmU1ZiwgMHgwMGQ2LCAweDA4MGMsCisJMHg3NjM3LCAweDAxYTAsIDB4MDAyNiwgMHgyMDExLCAweDAwMTAsIDB4MDgwYywgMHg2YWM3LCAweDAwMmUsCisJMHgwOTA0LCAweGJlNWUsIDB4MDgwYywgMHg1N2U5LCAweDE1OTgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MDcsCisJMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweGRlYWQsIDB4MDQ1MCwgMHg2MDEwLCAweDAwYjYsCisJMHgyMDU4LCAweGI5MTAsIDB4MDBiZSwgMHg5MTg2LCAweDAwZmYsIDB4MDU4MCwgMHgwMDI2LCAweDIwMTEsCisJMHg4MDA4LCAweDA4MGMsIDB4NmFjNywgMHgwMDJlLCAweDA1NDgsIDB4NjAxNCwgMHg5MDA1LCAweDA5MGMsCisJMHgwZGM1LCAweDIwNDgsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM5LCAweDExNDAsCisJMHgyMDAxLCAweDAwMzAsIDB4OTAwZSwgMHgyMDExLCAweDQwMDksIDB4MDgwYywgMHhkNmJkLCAweDAwNDAsCisJMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweGRlYWQsCisJMHg2MDEwLCAweDIwNTgsIDB4YjlhMCwgMHgwMDE2LCAweDA4MGMsIDB4MzI3OSwgMHgwODBjLCAweGIyZDMsCisJMHgwMDFlLCAweDA4MGMsIDB4MzM0YywgMHgwMGRlLCAweDA4MDQsIDB4YmY1NSwgMHgwMGRlLCAweDA4MGMsCisJMHhjMWRmLCAweDYwMTAsIDB4MjA1OCwgMHhiYWEwLCAweDkyODYsIDB4MDA4MCwgMHgxNTEwLCAweDYwMTQsCisJMHg5MDA1LCAweDAxYTgsIDB4MjA0OCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzksCisJMHgxMTQwLCAweDIwMDEsIDB4MDAwMCwgMHg5MDBlLCAweDIwMTEsIDB4NDAwMCwgMHgwODBjLCAweGQ2YmQsCisJMHgwMDMwLCAweGE4MDcsIDB4MDAwMCwgMHhhODY3LCAweDAxMDMsIDB4YTgzMywgMHgwMjAwLCAweDIwMDEsCisJMHgwMDA2LCAweDA4MGMsIDB4NjY2YSwgMHgwODBjLCAweDMyNzksIDB4MDgwYywgMHhiMmQzLCAweDA4MDQsCisJMHhiZjU1LCAweDA4MGMsIDB4YmY2MywgMHg2MDE0LCAweDkwMDUsIDB4MDE5MCwgMHgyMDQ4LCAweGE4NjgsCisJMHhkMGY0LCAweDAxZTgsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM5LCAweDFkMDgsCisJMHgyMDAxLCAweDAwMDAsIDB4OTAwZSwgMHgyMDExLCAweDQwMDAsIDB4MDgwYywgMHhkNmJkLCAweDA4ZjgsCisJMHgwODBjLCAweGJmNTksIDB4MDE2MCwgMHg5MDA2LCAweDA4MGMsIDB4NjY1NiwgMHgyMDAxLCAweDAwMDQsCisJMHgwODBjLCAweDY2OTYsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjY2YSwgMHgwOGEwLCAweDIwMDEsCisJMHgwMDA0LCAweDA4MGMsIDB4NjY2YSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAzLCAweDA4MGMsCisJMHg5NTQ3LCAweDA4MGMsIDB4OWFiMSwgMHgwODA0LCAweGJmNTUsIDB4Yjg1YywgMHhkMGU0LCAweDAxNzgsCisJMHgwODBjLCAweGQ0ZWUsIDB4MDgwYywgMHg3NjM3LCAweDAxMTgsIDB4ZDBkYywgMHgxOTA0LCAweGJlN2YsCisJMHgyMDExLCAweDE4MzcsIDB4MjIwNCwgMHhjMGFkLCAweDIwMTIsIDB4MDgwNCwgMHhiZTdmLCAweDA4MGMsCisJMHhkNTJiLCAweDIwMTEsIDB4MTgzNywgMHgyMjA0LCAweGMwYTUsIDB4MjAxMiwgMHgwMDA2LCAweDA4MGMsCisJMHhlYWI5LCAweDAwMGUsIDB4MTkwNCwgMHhiZTdmLCAweGMwYjUsIDB4MjAxMiwgMHgyMDAxLCAweDAwMDYsCisJMHgwODBjLCAweDY2NmEsIDB4OTAwNiwgMHgwODBjLCAweDY2NTYsIDB4MDBjNiwgMHgyMDAxLCAweDE4MGYsCisJMHgyMDA0LCAweGQwOWMsIDB4MDUyMCwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgwMGU2LCAweDIwNzEsCisJMHgxODAwLCAweDcwMGMsIDB4OTA4NCwgMHgwMGZmLCAweDc4ZTYsIDB4NzA3ZSwgMHg3MDEwLCAweDc4ZWEsCisJMHg3MDgyLCAweDkwOGMsIDB4MDBmZiwgMHgwMGVlLCAweDc4MGMsIDB4YzBiNSwgMHg3ODBlLCAweDAwZmUsCisJMHgwODBjLCAweDI4YmMsIDB4MDBmNiwgMHgyMTAwLCAweDkwMGUsIDB4MDgwYywgMHgyODczLCAweDc5NWUsCisJMHgwMGZlLCAweDkxODYsIDB4MDA4MSwgMHgwMWYwLCAweDIwMDksIDB4MDA4MSwgMHgwMGUwLCAweDIwMDksCisJMHgwMGVmLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDc5ZWEsIDB4NzhlNywgMHgwMDAwLCAweDc5MzIsCisJMHg3OTM2LCAweDc4MGMsIDB4YzBiNSwgMHg3ODBlLCAweDAwZmUsIDB4MDgwYywgMHgyOGJjLCAweDAwZjYsCisJMHgyMDc5LCAweDE4MDAsIDB4Nzk4MiwgMHgyMTAwLCAweDkwMGUsIDB4Nzk3ZSwgMHgwODBjLCAweDI4NzMsCisJMHg3OTVlLCAweDAwZmUsIDB4ODEwOCwgMHgwODBjLCAweDY2YjksIDB4MmIwMCwgMHgwMGNlLCAweDE5MDQsCisJMHhiZTdmLCAweDYwMTIsIDB4MjAwOSwgMHgxODBmLCAweDIxMGMsIDB4ZDE5YywgMHgwMTUwLCAweDIwMDksCisJMHgwMjdjLCAweDIxMGMsIDB4OTE4YywgMHgwMGZmLCAweGI5MTIsIDB4MjAwOSwgMHgwMjdkLCAweDIxMGMsCisJMHhiOTE2LCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDY2NmEsIDB4NjAyMywgMHgwMDAxLCAweDYwMDMsCisJMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDk1NDcsIDB4MDgwYywgMHg5YWIxLCAweDAwMjgsCisJMHgwODBjLCAweGJjYjYsIDB4MjAwMSwgMHgwMDAxLCAweDA0MzEsIDB4MDBkZSwgMHgwMDllLCAweDAwYmUsCisJMHgwMDA1LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwYTQsIDB4MDEyMCwgMHgyMDAxLCAweDE4NDgsCisJMHgyMDA0LCAweGQwYWMsIDB4MDAwNSwgMHgwMGU2LCAweDA4MGMsIDB4ZWZlZCwgMHgwMTkwLCAweDIwNzEsCisJMHgwMjYwLCAweDcxMDgsIDB4NzIwYywgMHg5MThjLCAweDAwZmYsIDB4MTExOCwgMHg5Mjg0LCAweGZmMDAsCisJMHgwMTQwLCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDkwODQsIDB4ZmY4MCwgMHgxMTEwLCAweGI5MTIsCisJMHhiYTE2LCAweDAwZWUsIDB4MDAwNSwgMHgyMDMwLCAweDkwMDUsIDB4MDE1OCwgMHgyMDAxLCAweDAwMDcsCisJMHgwODBjLCAweDY2NmEsIDB4MDgwYywgMHg1N2U5LCAweDExMjAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsCisJMHg2Njk2LCAweDI2MDAsIDB4OTAwNSwgMHgxMWIwLCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4NjgsCisJMHgwMDllLCAweGQwZmMsIDB4MTE3OCwgMHgwMDM2LCAweDAwNDYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsCisJMHhiYmEwLCAweDAwYmUsIDB4MjAyMSwgMHgwMDA0LCAweDIwMTEsIDB4ODAxNCwgMHgwODBjLCAweDRjNDQsCisJMHgwMDRlLCAweDAwM2UsIDB4MDgwYywgMHgzMjc5LCAweDYwMjAsIDB4OTA4NiwgMHgwMDBhLCAweDExMDgsCisJMHgwMDA1LCAweDA4MDQsIDB4YjJkMywgMHgwMGI2LCAweDAwZTYsIDB4MDAyNiwgMHgwMDE2LCAweDIwNzEsCisJMHgxODAwLCAweDcwOTAsIDB4OTA4NiwgMHgwMDE0LCAweDE5MDQsIDB4YzA1YSwgMHgyMDAxLCAweDE4MGQsCisJMHgyMDA0LCAweGQwOGMsIDB4MDkwNCwgMHhjMDBkLCAweDAwZDYsIDB4MDgwYywgMHg3NjM3LCAweDAxYTAsCisJMHgwMDI2LCAweDIwMTEsIDB4MDAxMCwgMHgwODBjLCAweDZhYzcsIDB4MDAyZSwgMHgwOTA0LCAweGMwMGMsCisJMHgwODBjLCAweDU3ZTksIDB4MTU5OCwgMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsCisJMHgwMTAzLCAweGE4MzMsIDB4ZGVhZCwgMHgwNDUwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI5MTAsCisJMHgwMGJlLCAweDkxODYsIDB4MDBmZiwgMHgwNTgwLCAweDAwMjYsIDB4MjAxMSwgMHg4MDA4LCAweDA4MGMsCisJMHg2YWM3LCAweDAwMmUsIDB4MDU0OCwgMHg2MDE0LCAweDkwMDUsIDB4MDkwYywgMHgwZGM1LCAweDIwNDgsCisJMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzksIDB4MTE0MCwgMHgyMDAxLCAweDAwMzAsCisJMHg5MDBlLCAweDIwMTEsIDB4NDAwOSwgMHgwODBjLCAweGQ2YmQsIDB4MDA0MCwgMHg2MDE0LCAweDIwNDgsCisJMHhhODA3LCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweGE4MzMsIDB4ZGVhZCwgMHg2MDEwLCAweDIwNTgsCisJMHhiOWEwLCAweDAwMTYsIDB4MDgwYywgMHgzMjc5LCAweDA4MGMsIDB4YjJkMywgMHgwMDFlLCAweDA4MGMsCisJMHgzMzRjLCAweDAwZGUsIDB4MDgwNCwgMHhjMDVmLCAweDAwZGUsIDB4MDgwYywgMHg1N2U5LCAweDExNzAsCisJMHg2MDE0LCAweDkwMDUsIDB4MTE1OCwgMHgwMDM2LCAweDAwNDYsIDB4NjAxMCwgMHgyMDU4LCAweGJiYTAsCisJMHgyMDIxLCAweDAwMDYsIDB4MDgwYywgMHg0ZGZiLCAweDAwNGUsIDB4MDAzZSwgMHgwMGQ2LCAweDYwMTAsCisJMHgyMDU4LCAweDA4MGMsIDB4NjdiZiwgMHgwODBjLCAweGJkZTIsIDB4MDBkZSwgMHgwODBjLCAweGMyYjUsCisJMHgxNTg4LCAweDYwMTAsIDB4MjA1OCwgMHhiODkwLCAweDkwMDUsIDB4MDU2MCwgMHgyMDAxLCAweDAwMDYsCisJMHgwODBjLCAweDY2NmEsIDB4MDA5NiwgMHg2MDE0LCAweDkwNGQsIDB4MDFkMCwgMHhhODY0LCAweDkwODQsCisJMHgwMGZmLCAweDkwODYsIDB4MDAzOSwgMHgxMTQwLCAweDIwMDEsIDB4MDAwMCwgMHg5MDBlLCAweDIwMTEsCisJMHg0MDAwLCAweDA4MGMsIDB4ZDZiZCwgMHgwMDYwLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCisJMHgwMDI5LCAweDAxMzAsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweDAyMDAsCisJMHgwMDllLCAweDA4MGMsIDB4MzI3OSwgMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwMTQwLCAweDA4MGMsCisJMHhiMmQzLCAweDAwMjgsIDB4MDgwYywgMHhiY2I2LCAweDkwMDYsIDB4MDgwYywgMHhiZjdiLCAweDAwMWUsCisJMHgwMDJlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDIwMTEsIDB4MTgyNCwgMHgyMjA0LCAweDkwODYsCisJMHgwMDE0LCAweDExNjAsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjY2YSwgMHg2MDAzLCAweDAwMDEsCisJMHg2MDA3LCAweDAwMDEsIDB4MDgwYywgMHg5NTQ3LCAweDA4MDQsIDB4OWFiMSwgMHgyMDAxLCAweDAwMDEsCisJMHgwODA0LCAweGJmN2IsIDB4MjAzMCwgMHgyMDExLCAweDE4MjQsIDB4MjIwNCwgMHg5MDg2LCAweDAwMDQsCisJMHgxMTQ4LCAweDk2YjYsIDB4MDAwYiwgMHgxMTIwLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDY2NmEsCisJMHgwODA0LCAweGIyZDMsIDB4MjAwMSwgMHgwMDAxLCAweDA4MDQsIDB4YmY3YiwgMHgwMDAyLCAweGJkOWYsCisJMHhjMGE2LCAweGJkOWYsIDB4YzBlOSwgMHhiZDlmLCAweGMxOTYsIDB4YzA5YiwgMHhiZGEyLCAweGJkOWYsCisJMHhjMWFhLCAweGJkOWYsIDB4YzFiYywgMHg2NjA0LCAweDk2ODYsIDB4MDAwMywgMHgwOTA0LCAweGJmYWIsCisJMHg5NmI2LCAweDAwMWUsIDB4MTExMCwgMHgwODBjLCAweGIyZDMsIDB4MDAwNSwgMHgwMGI2LCAweDAwZDYsCisJMHgwMGM2LCAweDA4MGMsIDB4YzFjZSwgMHgxMWEwLCAweDkwMDYsIDB4MDgwYywgMHg2NjU2LCAweDA4MGMsCisJMHgzMjUwLCAweDA4MGMsIDB4ZDdmOCwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NjZhLCAweDYwMDMsCisJMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDk1NDcsIDB4MDgwYywgMHg5YWIxLCAweDA0MjgsCisJMHgyMDA5LCAweDAyNmUsIDB4MjEwNCwgMHg5MDg2LCAweDAwMDksIDB4MTE2MCwgMHg2MDEwLCAweDIwNTgsCisJMHhiODQwLCAweDkwODQsIDB4MDBmZiwgMHg5MDA1LCAweDAxODAsIDB4ODAwMSwgMHhiODQyLCAweDYwMWIsCisJMHgwMDBhLCAweDAwOTgsIDB4MjAwOSwgMHgwMjZmLCAweDIxMDQsIDB4OTA4NCwgMHhmZjAwLCAweDkwOGUsCisJMHgxOTAwLCAweDAxNTgsIDB4OTA4ZSwgMHgxZTAwLCAweDA5OTAsIDB4MDgwYywgMHgzMjUwLCAweDA4MGMsCisJMHhkN2Y4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGJmN2IsIDB4MDBjZSwgMHgwMGRlLCAweDAwYmUsCisJMHgwMDA1LCAweDAwOTYsIDB4MDBiNiwgMHgwMDI2LCAweDkwMTYsIDB4MDgwYywgMHhjMWRjLCAweDAwZDYsCisJMHgyMDY5LCAweDE5N2MsIDB4MmQwNCwgMHg5MDA1LCAweDAxNjgsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsCisJMHg5MDg2LCAweDAwN2UsIDB4MTEzOCwgMHgyMDY5LCAweDE4MjAsIDB4MmQwNCwgMHg4MDAwLCAweDIwNmEsCisJMHgwMGRlLCAweDAwMTAsIDB4MDBkZSwgMHgwMDg4LCAweDkwMDYsIDB4MDgwYywgMHg2NjU2LCAweDIwMDEsCisJMHgwMDAyLCAweDA4MGMsIDB4NjY2YSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsCisJMHg5NTQ3LCAweDA4MGMsIDB4OWFiMSwgMHgwODA0LCAweGMxNjYsIDB4MDgwYywgMHhkMGQ4LCAweDAxYjAsCisJMHg2MDE0LCAweDIwNDgsIDB4YTg2NCwgMHgyMDEwLCAweDkwODYsIDB4MDEzOSwgMHgxMTM4LCAweDYwMDcsCisJMHgwMDE2LCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweGQ3MWEsIDB4MDBiMCwgMHg2MDE0LCAweDIwNDgsCisJMHhhODY0LCAweGQwZmMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDEsIDB4MGNhOCwgMHgyMDAxLCAweDE4MGUsCisJMHgyMDA0LCAweGQwZGMsIDB4MDE0OCwgMHg2MDEwLCAweDIwNTgsIDB4Yjg0MCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MDA1LCAweDExMTAsIDB4OTAwNiwgMHgwYzM4LCAweDA4MGMsIDB4YmNiNiwgMHgyMDA5LCAweDAyNmUsCisJMHgyMTM0LCAweDk2YjQsIDB4MDBmZiwgMHg5Njg2LCAweDAwMDUsIDB4MDUyMCwgMHg5Njg2LCAweDAwMGIsCisJMHgwMWM4LCAweDIwMDksIDB4MDI2ZiwgMHgyMTA0LCAweDkwODQsIDB4ZmYwMCwgMHgxMTE4LCAweDk2ODYsCisJMHgwMDA5LCAweDAxYzAsIDB4OTA4NiwgMHgxOTAwLCAweDExNjgsIDB4OTY4NiwgMHgwMDA5LCAweDAxOTAsCisJMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg2NjZhLCAweDIwMDEsIDB4MDAyOCwgMHg2MDFhLCAweDYwMDcsCisJMHgwMDUyLCAweDAwMjAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4YmY3YiwgMHgwMDJlLCAweDAwYmUsCisJMHgwMDllLCAweDAwMDUsIDB4OTI4NiwgMHgwMTM5LCAweDAxNjAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsCisJMHhkMGQ4LCAweDAxNDAsIDB4YTg2NCwgMHg5MDg2LCAweDAxMzksIDB4MDExOCwgMHhhODY4LCAweGQwZmMsCisJMHgwMTA4LCAweDBjNDAsIDB4NjAxMCwgMHgyMDU4LCAweGI4NDAsIDB4OTA4NCwgMHgwMGZmLCAweDkwMDUsCisJMHgwMTM4LCAweDgwMDEsIDB4Yjg0MiwgMHg2MDFiLCAweDAwMGEsIDB4NjAwNywgMHgwMDE2LCAweDA4ZjAsCisJMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgxMTM4LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsCisJMHg2MGMxLCAweDAwZWUsIDB4MDAxMCwgMHgwODBjLCAweDMyNTAsIDB4MDg2MCwgMHgyMDAxLCAweDAwMDQsCisJMHgwODBjLCAweDY2NmEsIDB4MDgwYywgMHhjMWRjLCAweDExNDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCisJMHgwMDAzLCAweDA4MGMsIDB4OTU0NywgMHgwODA0LCAweDlhYjEsIDB4MDgwYywgMHhiY2I2LCAweDkwMDYsCisJMHgwODA0LCAweGJmN2IsIDB4MDQ4OSwgMHgxMTYwLCAweDIwMDEsIDB4MDAwOCwgMHgwODBjLCAweDY2NmEsCisJMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDA1LCAweDA4MGMsIDB4OTU0NywgMHgwODA0LCAweDlhYjEsCisJMHgyMDAxLCAweDAwMDEsIDB4MDgwNCwgMHhiZjdiLCAweDAwZjksIDB4MTE2MCwgMHgyMDAxLCAweDAwMGEsCisJMHgwODBjLCAweDY2NmEsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgwODBjLCAweDk1NDcsCisJMHgwODA0LCAweDlhYjEsIDB4MjAwMSwgMHgwMDAxLCAweDA4MDQsIDB4YmY3YiwgMHgyMDA5LCAweDAyNmUsCisJMHgyMTA0LCAweDkwODYsIDB4MDAwMywgMHgxMTM4LCAweDIwMDksIDB4MDI2ZiwgMHgyMTA0LCAweDkwODQsCisJMHhmZjAwLCAweDkwODYsIDB4MmEwMCwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwYjYsCisJMHgwMGM2LCAweDAwMTYsIDB4NjExMCwgMHgyMTU4LCAweDA4MGMsIDB4NjczMywgMHgwMDFlLCAweDAwY2UsCisJMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMDM2LCAweDAwMTYsCisJMHg2MDEwLCAweDIwNTgsIDB4MjAwOSwgMHgxODM3LCAweDIxMDQsIDB4OTA4NSwgMHgwMDAzLCAweDIwMGEsCisJMHgwODBjLCAweGMyODcsIDB4MDU2MCwgMHgyMDA5LCAweDE4MzcsIDB4MjEwNCwgMHhjMGNkLCAweDIwMGEsCisJMHgwODBjLCAweDZhOWYsIDB4MDE1OCwgMHg5MDA2LCAweDIwMjAsIDB4MjAwOSwgMHgwMDJhLCAweDA4MGMsCisJMHhlYzMxLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxOTUsIDB4MjEwMiwgMHgyMDE5LCAweDAwMmEsCisJMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgzMjFiLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsCisJMHgzMDAwLCAweDAwZWUsIDB4MDBjNiwgMHgwMTU2LCAweDIwYTksIDB4MDc4MSwgMHgyMDA5LCAweDAwN2YsCisJMHgwODBjLCAweDMzNGMsIDB4ODEwOCwgMHgxZjA0LCAweGMyMjAsIDB4MDE1ZSwgMHgwMGNlLCAweDA4MGMsCisJMHhjMWRmLCAweDIwNzEsIDB4MDI2MCwgMHgyMDc5LCAweDAyMDAsIDB4NzgxNywgMHgwMDAxLCAweDIwMDEsCisJMHgxODM3LCAweDIwMGMsIDB4YzFjNSwgMHg3MDE4LCAweGQwZmMsIDB4MDExMCwgMHhkMGRjLCAweDAxMTgsCisJMHg3MDM4LCAweGQwZGMsIDB4MTEwOCwgMHhjMWM0LCAweDc4MTcsIDB4MDAwMCwgMHgyMDAxLCAweDE4MzcsCisJMHgyMTAyLCAweDkxODQsIDB4MDA1MCwgMHg5MDg2LCAweDAwNTAsIDB4MDVkMCwgMHgyMDc5LCAweDAxMDAsCisJMHgyZTA0LCAweDkwODQsIDB4MDBmZiwgMHgyMDY5LCAweDE4MWYsIDB4MjA2YSwgMHg3OGU2LCAweDAwMDYsCisJMHg4ZTcwLCAweDJlMDQsIDB4MjA2OSwgMHgxODIwLCAweDIwNmEsIDB4NzhlYSwgMHg3ODMyLCAweDc4MzYsCisJMHgyMDEwLCAweDkwODQsIDB4ZmYwMCwgMHgwMDFlLCAweDkxMDUsIDB4MjAwOSwgMHgxODJjLCAweDIwMGEsCisJMHgyMjAwLCAweDkwODQsIDB4MDBmZiwgMHgyMDA4LCAweDA4MGMsIDB4MjhiYywgMHgwODBjLCAweDc2MzcsCisJMHgwMTcwLCAweDIwNzEsIDB4MDI2MCwgMHgyMDY5LCAweDE5ODIsIDB4NzA0OCwgMHgyMDZhLCAweDcwNGMsCisJMHg2ODA2LCAweDcwNTAsIDB4NjgwYSwgMHg3MDU0LCAweDY4MGUsIDB4MDgwYywgMHhkNGVlLCAweDAwNDAsCisJMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NjZhLCAweDA4MGMsIDB4MzI3OSwgMHgwODBjLCAweGIyZDMsCisJMHgwMDFlLCAweDAwM2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwOTYsCisJMHgwMDI2LCAweDAwMzYsIDB4MDBlNiwgMHgwMTU2LCAweDIwMTksIDB4MTgyYywgMHgyMzFjLCAweDgzZmYsCisJMHgwMWYwLCAweDIwNzEsIDB4MDI2MCwgMHg3MjAwLCAweDkyOTQsIDB4MDBmZiwgMHg3MDA0LCAweDkwODQsCisJMHhmZjAwLCAweDkyMDUsIDB4OTMwNiwgMHgxMTk4LCAweDIwMTEsIDB4MDI3NiwgMHgyMGE5LCAweDAwMDQsCisJMHgyYjQ4LCAweDIwMTksIDB4MDAwYSwgMHgwODBjLCAweGMzNzksIDB4MTE0OCwgMHgyMDExLCAweDAyN2EsCisJMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHgwMDA2LCAweDA4MGMsIDB4YzM3OSwgMHgxMTAwLCAweDAxNWUsCisJMHgwMGVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDllLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsCisJMHg3MDM0LCAweDkwODYsIDB4MDAxNCwgMHgxMWE4LCAweDcwMzgsIDB4OTA4NiwgMHgwODAwLCAweDExODgsCisJMHg3MDNjLCAweGQwZWMsIDB4MDE2MCwgMHg5MDg0LCAweDBmMDAsIDB4OTA4NiwgMHgwMTAwLCAweDExMzgsCisJMHg3MDU0LCAweGQwYTQsIDB4MTExMCwgMHhkMGFjLCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsCisJMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwOTYsIDB4MDBjNiwgMHgwMDc2LCAweDAwNTYsCisJMHgwMDQ2LCAweDAwMjYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDI5LCAweDE5ZjEsCisJMHgyNTJjLCAweDIwMjEsIDB4MTlmNywgMHgyNDI0LCAweDIwNjEsIDB4MWNkMCwgMHgyMDcxLCAweDE4MDAsCisJMHg3MjU0LCAweDcwNzQsIDB4OTIwMiwgMHgxYTA0LCAweGMzNDUsIDB4MDgwYywgMHg4Y2Y3LCAweDA5MDQsCisJMHhjMzNlLCAweDA4MGMsIDB4ZWM2MiwgMHgwOTA0LCAweGMzM2UsIDB4NjcyMCwgMHg5Nzg2LCAweDAwMDcsCisJMHgwOTA0LCAweGMzM2UsIDB4MjUwMCwgMHg5YzA2LCAweDA5MDQsIDB4YzMzZSwgMHgyNDAwLCAweDljMDYsCisJMHgwNWU4LCAweDNlMDgsIDB4OTE4NiwgMHgwMDAyLCAweDExNDgsIDB4NjAxMCwgMHg5MDA1LCAweDAxMzAsCisJMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MTU4MCwgMHgwMGM2LCAweDYwMDAsCisJMHg5MDg2LCAweDAwMDQsIDB4MTExMCwgMHgwODBjLCAweDFhOGUsIDB4OTc4NiwgMHgwMDBhLCAweDAxNDgsCisJMHgwODBjLCAweGQyZTAsIDB4MTEzMCwgMHgwMGNlLCAweDA4MGMsIDB4YmNiNiwgMHgwODBjLCAweGIzMDYsCisJMHgwMGU4LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGQwZDgsIDB4MDFhOCwgMHg5Nzg2LCAweDAwMDMsCisJMHgxNTMwLCAweGE4NjcsIDB4MDEwMywgMHhhODdjLCAweGQwY2MsIDB4MDEzMCwgMHgwMDk2LCAweGE4NzgsCisJMHgyMDQ4LCAweDA4MGMsIDB4MGZjMCwgMHgwMDllLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsCisJMHg2ZTkyLCAweDA4MGMsIDB4ZDJjMywgMHgwODBjLCAweGIzMDYsIDB4MDBjZSwgMHg5Y2UwLCAweDAwMTgsCisJMHg3MDY4LCAweDljMDIsIDB4MTIxMCwgMHgwODA0LCAweGMyZTgsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsCisJMHgwMDRlLCAweDAwNWUsIDB4MDA3ZSwgMHgwMGNlLCAweDAwOWUsIDB4MDBlZSwgMHgwMDA1LCAweDk3ODYsCisJMHgwMDA2LCAweDExMTgsIDB4MDgwYywgMHhlYmQ0LCAweDBjMzAsIDB4OTc4NiwgMHgwMDA5LCAweDExNDgsCisJMHg2MDAwLCAweDkwODYsIDB4MDAwNCwgMHgwZDA4LCAweDIwMDksIDB4MDA0YywgMHgwODBjLCAweGIzNTIsCisJMHgwOGUwLCAweDk3ODYsIDB4MDAwYSwgMHgwOTgwLCAweDA4MjAsIDB4MjIwYywgMHgyMzA0LCAweDkxMDYsCisJMHgxMTMwLCAweDgyMTAsIDB4ODMxOCwgMHgxZjA0LCAweGMzNjUsIDB4OTAwNiwgMHgwMDA1LCAweDIzMDQsCisJMHg5MTAyLCAweDAyMTgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHg5MThkLCAweDAwMDEsCisJMHgwMDA1LCAweDAxMzYsIDB4MDFjNiwgMHgwMDE2LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwOGMsCisJMHgwMDNmLCAweDIxZTAsIDB4OTA4NCwgMHhmZmMwLCAweDkzMDAsIDB4MjA5OCwgMHgzNTE4LCAweDIwYTksCisJMHgwMDAxLCAweDIyMGMsIDB4NDAwMiwgMHg5MTBlLCAweDExNDAsIDB4ODIxMCwgMHg4MzE5LCAweDFkYzgsCisJMHg5MDA2LCAweDAwMWUsIDB4MDFjZSwgMHgwMTNlLCAweDAwMDUsIDB4MjIwYywgMHg5MTAyLCAweDAyMTgsCisJMHgyMDAxLCAweDAwMDEsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDAsIDB4OTE4ZCwgMHgwMDAxLCAweDAwMWUsCisJMHgwMWNlLCAweDAxM2UsIDB4MDAwNSwgMHgyMjBjLCAweDgxMGYsIDB4MjMwNCwgMHg5MTA2LCAweDExMzAsCisJMHg4MjEwLCAweDgzMTgsIDB4MWYwNCwgMHhjM2EzLCAweDkwMDYsIDB4MDAwNSwgMHg5MThkLCAweDAwMDEsCisJMHgwMDA1LCAweDYwMDQsIDB4OTA4YSwgMHgwMDUzLCAweDFhMGMsIDB4MGRjNSwgMHgwODBjLCAweGQyY2YsCisJMHgwMTIwLCAweDA4MGMsIDB4ZDJlMCwgMHgwMTY4LCAweDAwMjgsIDB4MDgwYywgMHgzMjc5LCAweDA4MGMsCisJMHhkMmUwLCAweDAxMzgsIDB4MDgwYywgMHg5OWE1LCAweDA4MGMsIDB4YjJkMywgMHgwODBjLCAweDlhYjEsCisJMHgwMDA1LCAweDA4MGMsIDB4YmNiNiwgMHgwY2IwLCAweDkxODIsIDB4MDA1NCwgMHgxMjIwLCAweDkxODIsCisJMHgwMDQwLCAweDAyMDgsIDB4MDAwYSwgMHgwMDA1LCAweGMzZTgsIDB4YzNlOCwgMHhjM2U4LCAweGMzZTgsCisJMHhjM2U4LCAweGMzZTgsIDB4YzNlOCwgMHhjM2U4LCAweGMzZTgsIDB4YzNlOCwgMHhjM2U4LCAweGMzZWEsCisJMHhjM2VhLCAweGMzZWEsIDB4YzNlYSwgMHhjM2U4LCAweGMzZTgsIDB4YzNlOCwgMHhjM2VhLCAweGMzZTgsCisJMHgwODBjLCAweDBkYzUsIDB4NjAwYiwgMHhmZmZmLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsCisJMHg5NGZmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OWFiMSwgMHgwMTJlLCAweDAwMDUsCisJMHg5MTg2LCAweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweDkwODIsIDB4MDA0MCwgMHgwODA0LCAweGM0ODIsCisJMHg5MTg2LCAweDAwMjcsIDB4MTUyMCwgMHgwODBjLCAweDk5YTUsIDB4MDgwYywgMHgzMjUwLCAweDA4MGMsCisJMHhkN2Y4LCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTk4LCAweDA4MGMsCisJMHhkMmUwLCAweDExMTgsIDB4MDgwYywgMHhiY2I2LCAweDAwNjgsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsCisJMHgwMDI5LCAweGE4NzcsIDB4MDAwMCwgMHhhOTdjLCAweGMxYzUsIDB4YTk3ZSwgMHgwODBjLCAweDZlOWYsCisJMHgwODBjLCAweGQyYzMsIDB4MDA5ZSwgMHgwODBjLCAweGIyZDMsIDB4MDgwNCwgMHg5YWIxLCAweDkxODYsCisJMHgwMDE0LCAweDExMjAsIDB4NjAwNCwgMHg5MDgyLCAweDAwNDAsIDB4MDBiOCwgMHg5MTg2LCAweDAwNDYsCisJMHgwMTUwLCAweDkxODYsIDB4MDA0NSwgMHgwMTM4LCAweDkxODYsIDB4MDA1MywgMHgwMTIwLCAweDkxODYsCisJMHgwMDQ4LCAweDE5MGMsIDB4MGRjNSwgMHgwODBjLCAweGQ4MDksIDB4MDEzMCwgMHg2MDAwLCAweDkwODYsCisJMHgwMDAyLCAweDExMTAsIDB4MDgwNCwgMHhjNGMwLCAweDAwMDUsIDB4MDAwMiwgMHhjNDVjLCAweGM0NWEsCisJMHhjNDVhLCAweGM0NWEsIDB4YzQ1YSwgMHhjNDVhLCAweGM0NWEsIDB4YzQ1YSwgMHhjNDVhLCAweGM0NWEsCisJMHhjNDVhLCAweGM0NzcsIDB4YzQ3NywgMHhjNDc3LCAweGM0NzcsIDB4YzQ1YSwgMHhjNDc3LCAweGM0NWEsCisJMHhjNDc3LCAweGM0NWEsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4OTlhNSwgMHgwMDk2LCAweDYxMTQsCisJMHgyMTQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTY4LCAweGE4NjcsIDB4MDEwMywgMHhhODdiLCAweDAwMDYsCisJMHhhODc3LCAweDAwMDAsIDB4YTg4MCwgMHhjMGVjLCAweGE4ODIsIDB4MDgwYywgMHg2ZTlmLCAweDA4MGMsCisJMHhkMmMzLCAweDAwOWUsIDB4MDgwYywgMHhiMmQzLCAweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDA4MGMsCisJMHg5OWE1LCAweDA4MGMsIDB4ZDJlMCwgMHgwOTBjLCAweGJjYjYsIDB4MDgwYywgMHhiMmQzLCAweDA4MGMsCisJMHg5YWIxLCAweDAwMDUsIDB4MDAwMiwgMHhjNDk5LCAweGM0OTcsIDB4YzQ5NywgMHhjNDk3LCAweGM0OTcsCisJMHhjNDk3LCAweGM0OTcsIDB4YzQ5NywgMHhjNDk3LCAweGM0OTcsIDB4YzQ5NywgMHhjNGIwLCAweGM0YjAsCisJMHhjNGIwLCAweGM0YjAsIDB4YzQ5NywgMHhjNGJhLCAweGM0OTcsIDB4YzRiMCwgMHhjNDk3LCAweDA4MGMsCisJMHgwZGM1LCAweDAwOTYsIDB4MDgwYywgMHg5OWE1LCAweDYwMTQsIDB4MjA0OCwgMHgyMDAxLCAweDE5ODgsCisJMHgyMDA0LCAweDYwNDIsIDB4YTk3YywgMHhkMWFjLCAweDAxNDAsIDB4NjAwMywgMHgwMDA0LCAweGE4N2MsCisJMHg5MDg1LCAweDA0MDAsIDB4YTg3ZSwgMHgwMDllLCAweDAwMDUsIDB4NjAwMywgMHgwMDAyLCAweDBjYjgsCisJMHgwODBjLCAweDk5YTUsIDB4MDgwYywgMHhkN2ZiLCAweDA4MGMsIDB4ZDgwMCwgMHg2MDAzLCAweDAwMGYsCisJMHgwODA0LCAweDlhYjEsIDB4MDgwYywgMHg5OWE1LCAweDA4MGMsIDB4YjJkMywgMHgwODA0LCAweDlhYjEsCiAJMHg5MTgyLCAweDAwNTQsIDB4MTIyMCwgMHg5MTgyLCAweDAwNDAsIDB4MDIwOCwgMHgwMDBhLCAweDAwMDUsCi0JMHhjNTNjLCAweGM1M2MsIDB4YzUzYywgMHhjNTNjLCAweGM1M2MsIDB4YzUzZSwgMHhjNTNjLCAweGM1M2MsCi0JMHhjNWU0LCAweGM1M2MsIDB4YzUzYywgMHhjNTNjLCAweGM1M2MsIDB4YzUzYywgMHhjNTNjLCAweGM1M2MsCi0JMHhjNTNjLCAweGM1M2MsIDB4YzUzYywgMHhjNzE2LCAweDA4MGMsIDB4MGRjNSwgMHgwMDc2LCAweDAwYTYsCi0JMHgwMGU2LCAweDAwOTYsIDB4MjA3MSwgMHgwMjYwLCAweDYxMTQsIDB4MjE1MCwgMHg3NjQ0LCAweGI2NzYsCi0JMHg5NmI0LCAweDBmZmYsIDB4Yjc3YywgMHhjN2U1LCAweGI3N2UsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCi0JMHhiYTNjLCAweDgyZmYsIDB4MDExMCwgMHg4MjExLCAweGJhM2UsIDB4MDBiZSwgMHg4NmZmLCAweDA5MDQsCi0JMHhjNWRkLCAweDk2OTQsIDB4ZmYwMCwgMHg5Mjg0LCAweDBjMDAsIDB4MDEyMCwgMHg3MDQ4LCAweGIwOTIsCi0JMHg3MDRjLCAweGIwOGUsIDB4OTI4NCwgMHgwMzAwLCAweDA5MDQsIDB4YzVkZCwgMHg5Njg2LCAweDAxMDAsCi0JMHgxMTMwLCAweDcwNjQsIDB4OTAwNSwgMHgxMTE4LCAweGM2YzQsIDB4YjY3NiwgMHgwYzM4LCAweDA4MGMsCi0JMHgxMDBlLCAweDA5MGMsIDB4MGRjNSwgMHgyOTAwLCAweGIwN2EsIDB4Yjc3YywgMHg5N2JkLCAweDAyMDAsCi0JMHhiNzdlLCAweGE4NjcsIDB4MDEwMywgMHhiMDY4LCAweGE4NmEsIDB4YjA2YywgMHhhODZlLCAweGIwNzAsCi0JMHhhODcyLCAweDcwNDQsIDB4OTA4NCwgMHhmMDAwLCAweDk2MzUsIDB4YWU3NiwgMHg5NjhjLCAweDBjMDAsCi0JMHgwMTIwLCAweDczNDgsIDB4YWI5MiwgMHg3MzRjLCAweGFiOGUsIDB4OTY4YywgMHgwMGZmLCAweDkxODYsCi0JMHgwMDAyLCAweDAxODAsIDB4OTE4NiwgMHgwMDI4LCAweDExMTgsIDB4YTg3YiwgMHgwMDFjLCAweDAwNjAsCi0JMHhkNmRjLCAweDAxMTgsIDB4YTg3YiwgMHgwMDE1LCAweDAwMzgsIDB4ZDZkNCwgMHgwMTE4LCAweGE4N2IsCi0JMHgwMDA3LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLCAweGFmN2UsIDB4YjA4MCwgMHhhODgyLCAweGIwODQsCi0JMHhhODg2LCAweDkwMWUsIDB4ZDZjNCwgMHgwMTkwLCAweDczNWMsIDB4YWI4NiwgMHg4M2ZmLCAweDAxNzAsCi0JMHg5MzhhLCAweDAwMDksIDB4MDIxMCwgMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwgMHgyMzA4LCAweDIwMTksCi0JMHgwMDE4LCAweDIwMTEsIDB4MDAyNSwgMHgwODBjLCAweGNhMDMsIDB4MDAzZSwgMHhkNmNjLCAweDAxZTgsCi0JMHg3MTU0LCAweGE5OGEsIDB4ODFmZiwgMHgwMWM4LCAweDkxOTIsIDB4MDAyMSwgMHgxMjYwLCAweDgzMDQsCi0JMHg5MDk4LCAweDAwMTgsIDB4MjAxMSwgMHgwMDI5LCAweDA4MGMsIDB4Y2EwMywgMHgyMDExLCAweDAyMDUsCi0JMHgyMDEzLCAweDAwMDAsIDB4MDA1MCwgMHhiMDY4LCAweGQwZmMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMjAsCi0JMHhhOThhLCAweDBjNjgsIDB4Mjk1MCwgMHgwODBjLCAweGM5YTIsIDB4MDgwYywgMHgxYTgzLCAweDAwOWUsCi0JMHgwMGVlLCAweDAwYWUsIDB4MDA3ZSwgMHgwMDA1LCAweDIwMDEsIDB4MTk4OSwgMHgyMDA0LCAweDYwNDIsCi0JMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHhhODNjLCAweGE5NDAsIDB4OTEwNSwgMHgxMTE4LCAweGE4N2MsCi0JMHhjMGRjLCAweGE4N2UsIDB4NjAwMywgMHgwMDAyLCAweGE5N2MsIDB4ZDFlNCwgMHgwOTA0LCAweGM3MTEsCi0JMHg2MDQzLCAweDAwMDAsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsCi0JMHgxNTAwLCAweGQxY2MsIDB4MDkwNCwgMHhjNmUwLCAweGE5NzgsIDB4YTg2OCwgMHhkMGZjLCAweDA5MDQsCi0JMHhjNmExLCAweDAwMTYsIDB4YTg3YywgMHgwMDA2LCAweGE4ODAsIDB4MDAwNiwgMHgwMGE2LCAweDIxNTAsCi0JMHhiMTc0LCAweDkxODQsIDB4MDBmZiwgMHg5MGI2LCAweDAwMDIsIDB4MDkwNCwgMHhjNjZlLCAweDkwODYsCi0JMHgwMDI4LCAweDE5MDQsIDB4YzY1YSwgMHhhODdiLCAweDAwMWMsIDB4YjA3YiwgMHgwMDFjLCAweDA4MDQsCi0JMHhjNjc2LCAweDYwMjQsIDB4ZDBmNCwgMHgxMWQwLCAweGE4MzgsIDB4YWEzNCwgMHg5MjA1LCAweDA5YzgsCi0JMHhhODM4LCAweGFhOTAsIDB4OTIwNiwgMHgxMTIwLCAweGE4OGMsIDB4YWEzNCwgMHg5MjA2LCAweDA5ODgsCi0JMHg2MDI0LCAweGQwZDQsIDB4MTE0OCwgMHhhOWFjLCAweGE4MzQsIDB4OTEwMiwgMHg2MDNhLCAweGE5YjAsCi0JMHhhODM4LCAweDkxMDMsIDB4NjAzZSwgMHg2MDI0LCAweGMwZjUsIDB4NjAyNiwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4M2MsIDB4ODAwMCwgMHhiODNlLCAweDAwYmUsIDB4OTAwNiwgMHhhODc2LCAweGE4OTIsCi0JMHhhODhlLCAweGE4N2MsIDB4YzBlNCwgMHhhODdlLCAweGQwY2MsIDB4MDE0MCwgMHhjMGNjLCAweGE4N2UsCi0JMHgwMDk2LCAweGE4NzgsIDB4MjA0OCwgMHgwODBjLCAweDBmYzAsIDB4MDA5ZSwgMHgwODBjLCAweGQxOTAsCi0JMHgwODA0LCAweGM3MTEsIDB4ZDFkYywgMHgwMTU4LCAweGE4N2IsIDB4MDAxNSwgMHhiMDdiLCAweDAwMTUsCi0JMHgwODBjLCAweGQ0MjQsIDB4MDExOCwgMHhiMTc0LCAweGMxZGMsIDB4YjE3NiwgMHgwMDc4LCAweGQxZDQsCi0JMHgwMTI4LCAweGE4N2IsIDB4MDAwNywgMHhiMDdiLCAweDAwMDcsIDB4MDA0MCwgMHhhODdjLCAweGQwYWMsCi0JMHgwMTI4LCAweGE4MzQsIDB4YTkzOCwgMHg5MTE1LCAweDE5MGMsIDB4YzUwOSwgMHhhODdjLCAweGIwN2UsCi0JMHhhODkwLCAweGIwOTIsIDB4YTg4YywgMHhiMDhlLCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDE5LCAweDIwYTAsIDB4MjBhOSwgMHgwMDIwLCAweDhhMDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwOTQsCi0JMHgwMDNmLCAweDIyZTAsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAxOSwgMHgyMDk4LCAweDQwMDMsCi0JMHgwMGFlLCAweDAwMGUsIDB4YTg4MiwgMHgwMDBlLCAweGMwY2MsIDB4YTg3ZSwgMHgwODBjLCAweGQ1MDQsCi0JMHgwMDFlLCAweGE4NzQsIDB4MDAwNiwgMHgyMTQ4LCAweDA4MGMsIDB4MGZjMCwgMHgwMDFlLCAweDA4MDQsCi0JMHhjNzBkLCAweDAwMTYsIDB4MDBhNiwgMHgyMTUwLCAweGIxNzQsIDB4OTE4NCwgMHgwMGZmLCAweDkwYjYsCi0JMHgwMDAyLCAweDAxZTAsIDB4OTA4NiwgMHgwMDI4LCAweDExMjgsIDB4YTg3YiwgMHgwMDFjLCAweGIwN2IsCi0JMHgwMDFjLCAweDAwZTAsIDB4ZDFkYywgMHgwMTU4LCAweGE4N2IsIDB4MDAxNSwgMHhiMDdiLCAweDAwMTUsCi0JMHgwODBjLCAweGQ0MjQsIDB4MDExOCwgMHhiMTc0LCAweGMxZGMsIDB4YjE3NiwgMHgwMDc4LCAweGQxZDQsCi0JMHgwMTI4LCAweGE4N2IsIDB4MDAwNywgMHhiMDdiLCAweDAwMDcsIDB4MDA0MCwgMHhhODdjLCAweGQwYWMsCi0JMHgwMTI4LCAweGE4MzQsIDB4YTkzOCwgMHg5MTE1LCAweDE5MGMsIDB4YzUwOSwgMHhhODkwLCAweGIwOTIsCi0JMHhhODhjLCAweGIwOGUsIDB4YTg3YywgMHhiMDdlLCAweDAwYWUsIDB4MDgwYywgMHgwZmMwLCAweDAwOWUsCi0JMHgwODBjLCAweGQ1MDQsIDB4YTk3NCwgMHgwMDE2LCAweDA4MGMsIDB4YzlmMywgMHgwMDFlLCAweDA0NjgsCi0JMHhhODY3LCAweDAxMDMsIDB4YTk3NCwgMHg5MTg0LCAweDAwZmYsIDB4OTBiNiwgMHgwMDAyLCAweDAxYjAsCi0JMHg5MDg2LCAweDAwMjgsIDB4MTExOCwgMHhhODdiLCAweDAwMWMsIDB4MDBkMCwgMHhkMWRjLCAweDAxNDgsCi0JMHhhODdiLCAweDAwMTUsIDB4MDgwYywgMHhkNDI0LCAweDAxMTgsIDB4YTk3NCwgMHhjMWRjLCAweGE5NzYsCi0JMHgwMDc4LCAweGQxZDQsIDB4MDExOCwgMHhhODdiLCAweDAwMDcsIDB4MDA1MCwgMHhhODdiLCAweDAwMDAsCi0JMHhhODdjLCAweGQwYWMsIDB4MDEyOCwgMHhhODM0LCAweGE5MzgsIDB4OTExNSwgMHgxOTBjLCAweGM1MDksCi0JMHhhOTc0LCAweDAwMTYsIDB4MDgwYywgMHg2YmViLCAweDAwMWUsIDB4ZDFlNCwgMHgxMTIwLCAweDA4MGMsCi0JMHhiMTAxLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweGQxNTYsIDB4MGNkOCwgMHg2MTE0LCAweDAwOTYsCi0JMHgyMTQ4LCAweGE5N2MsIDB4ZDFlNCwgMHgxOTBjLCAweDFhYTMsIDB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsCi0JMHg5N2UxLCAweDAwMTAsIDB4MDgwYywgMHg5ODlkLCAweDA4MGMsIDB4Y2U1NiwgMHgwMWYwLCAweDAwOTYsCi0JMHg2MTE0LCAweDIxNDgsIDB4MDgwYywgMHhkMDVlLCAweDExMTgsIDB4MDgwYywgMHhiYWUyLCAweDAwYTAsCi0JMHhhODY3LCAweDAxMDMsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgxMWI4LCAweGQxODQsCi0JMHgxMTkwLCAweDYxMDgsIDB4YTk3YSwgMHg5MThlLCAweDAwMjksIDB4MTExMCwgMHgwODBjLCAweGVkMDAsCi0JMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZGQxLCAweDAwOWUsIDB4MDgwYywgMHhiMTAxLCAweDA4MGMsCi0JMHg5OGVkLCAweDA4MDQsIDB4OWEwZiwgMHhhODdiLCAweDAwMDQsIDB4MGM5MCwgMHhhODdiLCAweDAwMDQsCi0JMHgwYzc4LCAweDkxODIsIDB4MDA1NCwgMHgxMjIwLCAweDkxODIsIDB4MDA0MCwgMHgwMjA4LCAweDAwMGEsCi0JMHgwMDA1LCAweGM3NmQsIDB4Yzc2ZCwgMHhjNzZkLCAweGM3NmQsIDB4Yzc2ZCwgMHhjNzZmLCAweGM3NmQsCi0JMHhjNzZkLCAweGM3NmQsIDB4Yzc2ZCwgMHhjNzZkLCAweGM3NmQsIDB4Yzc2ZCwgMHhjNzZkLCAweGM3NmQsCi0JMHhjNzZkLCAweGM3NmQsIDB4Yzc2ZCwgMHhjNzZkLCAweGM3NmQsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsCi0JMHg1N2RiLCAweDAxZjgsIDB4NjAxNCwgMHg3MTQ0LCAweDkxOGMsIDB4MGZmZiwgMHg5MDE2LCAweGQxYzQsCi0JMHgwMTE4LCAweDcyNjQsIDB4OTI5NCwgMHgwMGZmLCAweDAwOTYsIDB4OTA0ZCwgMHgwMTg4LCAweGE4N2IsCi0JMHgwMDAwLCAweGE4NjQsIDB4OTA4NiwgMHgwMTM5LCAweDAxMjgsIDB4YTg2NywgMHgwMTAzLCAweGE5NzYsCi0JMHhhYTk2LCAweDAwMzAsIDB4YTg5NywgMHg0MDAwLCAweGE5OWEsIDB4YWE5ZSwgMHgwODBjLCAweDZkZDEsCi0JMHgwMDllLCAweDA4MDQsIDB4YjEwMSwgMHg5MTgyLCAweDAwODUsIDB4MDAwMiwgMHhjN2E1LCAweGM3YTMsCi0JMHhjN2EzLCAweGM3YjEsIDB4YzdhMywgMHhjN2EzLCAweGM3YTMsIDB4YzdhMywgMHhjN2EzLCAweGM3YTMsCi0JMHhjN2EzLCAweGM3YTMsIDB4YzdhMywgMHgwODBjLCAweDBkYzUsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsCi0JMHgwODBjLCAweDkzM2IsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5OGVkLCAweDAxMmUsCi0JMHgwMDA1LCAweDAwMjYsIDB4MDA1NiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA3MSwgMHgwMjYwLCAweDcyMjQsCi0JMHg2MjE2LCAweDcyMjAsIDB4MDgwYywgMHhjZTQ0LCAweDAxZjgsIDB4MjI2OCwgMHg2ODAwLCAweDkwODYsCi0JMHgwMDAwLCAweDAxZDAsIDB4NjAxMCwgMHg2ZDEwLCAweDk1MmUsIDB4MTFiMCwgMHgwMGM2LCAweDJkNjAsCi0JMHgwMGQ2LCAweDA4MGMsIDB4Y2E2NCwgMHgwMGRlLCAweDAwY2UsIDB4MDE1OCwgMHg3MDJjLCAweGQwODQsCi0JMHgxMTE4LCAweDA4MGMsIDB4Y2EyZSwgMHgwMDEwLCAweDY4MDMsIDB4MDAwMiwgMHg2MDA3LCAweDAwODYsCi0JMHgwMDI4LCAweDA4MGMsIDB4Y2E1MCwgMHgwZDkwLCAweDYwMDcsIDB4MDA4NywgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDkzM2IsIDB4MDgwYywgMHg5OGVkLCAweDcyMjAsIDB4MDgwYywgMHhjZTQ0LCAweDAxNzgsCi0JMHg2ODEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwMTQwLCAweDY4MjQsCi0JMHhkMGVjLCAweDAxMjgsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4ZDE5MCwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMGRlLCAweDAwNWUsIDB4MDAyZSwgMHgwMDA1LCAweDkxODYsIDB4MDAxMywgMHgxMTYwLCAweDYwMDQsCi0JMHg5MDhhLCAweDAwODUsIDB4MGEwYywgMHgwZGM1LCAweDkwOGEsIDB4MDA5MiwgMHgxYTBjLCAweDBkYzUsCi0JMHg5MDgyLCAweDAwODUsIDB4MDBlMiwgMHg5MTg2LCAweDAwMjcsIDB4MDEyMCwgMHg5MTg2LCAweDAwMTQsCi0JMHgxOTBjLCAweDBkYzUsIDB4MDgwYywgMHg5N2UxLCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsCi0JMHhjZTU2LCAweDAxNDAsIDB4YTg2NywgMHgwMTAzLCAweGE4NzcsIDB4MDAwMCwgMHhhODdiLCAweDAwMjksCi0JMHgwODBjLCAweDZkZDEsIDB4MDA5ZSwgMHgwODBjLCAweGIxMzQsIDB4MDgwNCwgMHg5OGVkLCAweGM4MzQsCi0JMHhjODM2LCAweGM4MzYsIDB4YzgzNCwgMHhjODM0LCAweGM4MzQsIDB4YzgzNCwgMHhjODM0LCAweGM4MzQsCi0JMHhjODM0LCAweGM4MzQsIDB4YzgzNCwgMHhjODM0LCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweDk3ZTEsCi0JMHgwODBjLCAweGIxMzQsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsIDB4OTE4NiwgMHgwMDEzLCAweDExMjgsCi0JMHg2MDA0LCAweDkwODIsIDB4MDA4NSwgMHgyMDA4LCAweDA0YjgsIDB4OTE4NiwgMHgwMDI3LCAweDExZjgsCi0JMHgwODBjLCAweDk3ZTEsIDB4MDgwYywgMHgzMjQ2LCAweDA4MGMsIDB4ZDU3NiwgMHgwMDk2LCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NiwgMHgwMTUwLCAweGE4NjcsIDB4MDEwMywgMHhhODc3LCAweDAwMDAsCi0JMHhhODdiLCAweDAwMjksIDB4MDgwYywgMHg2ZGQxLCAweDA4MGMsIDB4ZDA0MSwgMHgwMDllLCAweDA4MGMsCi0JMHhiMTAxLCAweDA4MGMsIDB4OThlZCwgMHgwMDA1LCAweDA4MGMsIDB4YjE5YiwgMHgwY2UwLCAweDkxODYsCi0JMHgwMDE0LCAweDFkZDAsIDB4MDgwYywgMHg5N2UxLCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsCi0JMHhjZTU2LCAweDBkNjAsIDB4YTg2NywgMHgwMTAzLCAweGE4NzcsIDB4MDAwMCwgMHhhODdiLCAweDAwMDYsCi0JMHhhODgwLCAweGMwZWMsIDB4YTg4MiwgMHgwOGYwLCAweDAwMDIsIDB4Yzg4YywgMHhjODhhLCAweGM4OGEsCi0JMHhjODhhLCAweGM4OGEsIDB4Yzg4YSwgMHhjOGE0LCAweGM4OGEsIDB4Yzg4YSwgMHhjODhhLCAweGM4OGEsCi0JMHhjODhhLCAweGM4OGEsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4OTdlMSwgMHg2MDM0LCAweDkwOGMsCisJMHhjNGRjLCAweGM0ZGMsIDB4YzRkYywgMHhjNGRjLCAweGM0ZGMsIDB4YzRkZSwgMHhjNWJlLCAweGM0ZGMsCisJMHhjNWYyLCAweGM0ZGMsIDB4YzRkYywgMHhjNGRjLCAweGM0ZGMsIDB4YzRkYywgMHhjNGRjLCAweGM0ZGMsCisJMHhjNGRjLCAweGM0ZGMsIDB4YzRkYywgMHhjNWYyLCAweDA4MGMsIDB4MGRjNSwgMHgwMGI2LCAweDAwOTYsCisJMHg2MTE0LCAweDIxNDgsIDB4NzY0NCwgMHg5NmI0LCAweDBmZmYsIDB4ODZmZiwgMHgxNTI4LCAweDYwMTAsCisJMHgyMDU4LCAweGI4MDAsIDB4ZDBiYywgMHgxOTA0LCAweGM1YWQsIDB4YTg3YiwgMHgwMDAwLCAweGE4NjcsCisJMHgwMTAzLCAweGFlNzYsIDB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LCAweDkxMTUsCisJMHgxOTBjLCAweGM3OGIsIDB4MDgwYywgMHg2Y2I5LCAweDYyMTAsIDB4MjI1OCwgMHhiYTNjLCAweDgyZmYsCisJMHgwMTEwLCAweDgyMTEsIDB4YmEzZSwgMHg3MDQ0LCAweGQwZTQsIDB4MTkwNCwgMHhjNThlLCAweDA4MGMsCisJMHhiMmQzLCAweDAwOWUsIDB4MDBiZSwgMHgwMDA1LCAweDk2OGMsIDB4MGMwMCwgMHgwMTUwLCAweDYwMTAsCisJMHgyMDU4LCAweGI4MDAsIDB4ZDBiYywgMHgxOTA0LCAweGM1OTIsIDB4NzM0OCwgMHhhYjkyLCAweDczNGMsCisJMHhhYjhlLCAweDk2OGMsIDB4MDBmZiwgMHg5MTg2LCAweDAwMDIsIDB4MDUwOCwgMHg5MTg2LCAweDAwMjgsCisJMHgxMTE4LCAweGE4N2IsIDB4MDAxYywgMHgwMGU4LCAweGQ2ZGMsIDB4MDFhMCwgMHhhODdiLCAweDAwMTUsCisJMHhhODdjLCAweGQwYWMsIDB4MDE3MCwgMHhhOTM4LCAweGFhMzQsIDB4MjEwMCwgMHg5MjA1LCAweDAxNDgsCisJMHg3MDQ4LCAweDkxMDYsIDB4MTExOCwgMHg3MDRjLCAweDkyMDYsIDB4MDExOCwgMHhhOTkyLCAweGFhOGUsCisJMHhjNmRjLCAweDAwMzgsIDB4ZDZkNCwgMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDEwLCAweGE4N2IsCisJMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhZTc2LCAweDkwMWUsIDB4ZDZjNCwgMHgwMWQ4LCAweDk2ODYsCisJMHgwMTAwLCAweDExMzAsIDB4NzA2NCwgMHg5MDA1LCAweDExMTgsIDB4YzZjNCwgMHgwODA0LCAweGM0ZTUsCisJMHg3MzVjLCAweGFiODYsIDB4ODNmZiwgMHgwMTcwLCAweDkzOGEsIDB4MDAwOSwgMHgwMjEwLCAweDIwMTksCisJMHgwMDA4LCAweDAwMzYsIDB4MjMwOCwgMHgyMDE5LCAweDAwMTgsIDB4MjAxMSwgMHgwMDI1LCAweDA4MGMsCisJMHhjYzg1LCAweDAwM2UsIDB4ZDZjYywgMHgwOTA0LCAweGM0ZmEsIDB4NzE1NCwgMHhhOThhLCAweDgxZmYsCisJMHgwOTA0LCAweGM0ZmEsIDB4OTE5MiwgMHgwMDIxLCAweDEyNzgsIDB4ODMwNCwgMHg5MDk4LCAweDAwMTgsCisJMHgyMDExLCAweDAwMjksIDB4MDgwYywgMHhjYzg1LCAweDIwMTEsIDB4MDIwNSwgMHgyMDEzLCAweDAwMDAsCisJMHgwODBjLCAweGQ3ODYsIDB4MDgwNCwgMHhjNGZhLCAweGE4NjgsIDB4ZDBmYywgMHgwMTIwLCAweDIwMDksCisJMHgwMDIwLCAweGE5OGEsIDB4MGM1MCwgMHgwMGE2LCAweDI5NTAsIDB4MDgwYywgMHhjYzI0LCAweDAwYWUsCisJMHgwODBjLCAweGQ3ODYsIDB4MDgwYywgMHhjYzc1LCAweDA4MDQsIDB4YzRmYywgMHgwODBjLCAweGQzZDgsCisJMHgwODA0LCAweGM1MDksIDB4YTg3YywgMHhkMGFjLCAweDA5MDQsIDB4YzUxNSwgMHhhODgwLCAweGQwYmMsCisJMHgxOTA0LCAweGM1MTUsIDB4OTY4NCwgMHgwNDAwLCAweDAxMzAsIDB4YTgzOCwgMHhhYjM0LCAweDkzMDUsCisJMHgwOTA0LCAweGM1MTUsIDB4MDBiOCwgMHg3MzQ4LCAweGE4MzgsIDB4OTMwNiwgMHgxMTk4LCAweDczNGMsCisJMHhhODM0LCAweDkzMWUsIDB4MDkwNCwgMHhjNTE1LCAweDAwNjgsIDB4YTg3YywgMHhkMGFjLCAweDA5MDQsCisJMHhjNGVkLCAweGE4MzgsIDB4YTkzNCwgMHg5MTA1LCAweDA5MDQsIDB4YzRlZCwgMHhhODgwLCAweGQwYmMsCisJMHgxOTA0LCAweGM0ZWQsIDB4MDgwYywgMHhkNDEyLCAweDA4MDQsIDB4YzUwOSwgMHgwMDk2LCAweDAwZjYsCisJMHg2MDAzLCAweDAwMDMsIDB4NjAwNywgMHgwMDQzLCAweDIwNzksIDB4MDI2YywgMHg3YzA0LCAweDdiMDAsCisJMHg3ZTBjLCAweDdkMDgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBhYywgMHgwMTQwLCAweDYwMDMsCisJMHgwMDAyLCAweDAwZmUsIDB4MDA5ZSwgMHgwMDA1LCAweDIxMzAsIDB4MjIyOCwgMHgwMDU4LCAweDI0MDAsCisJMHhhOWFjLCAweDkxMGEsIDB4MjMwMCwgMHhhYWIwLCAweDkyMTMsIDB4MjYwMCwgMHg5MTAyLCAweDI1MDAsCisJMHg5MjAzLCAweDBlOTAsIDB4YWMzNiwgMHhhYjNhLCAweGFlNDYsIDB4YWQ0YSwgMHgwMGZlLCAweDYwNDMsCisJMHgwMDAwLCAweDJjMTAsIDB4MDgwYywgMHgxYmUwLCAweDA4MGMsIDB4OTU2NCwgMHgwODBjLCAweDliZDMsCisJMHgwMDllLCAweDAwMDUsIDB4MDAwNSwgMHg5MTgyLCAweDAwNTQsIDB4MTIyMCwgMHg5MTgyLCAweDAwNDAsCisJMHgwMjA4LCAweDAwMGEsIDB4MDAwNSwgMHhjNjBmLCAweGM2MGYsIDB4YzYwZiwgMHhjNjBmLCAweGM2MGYsCisJMHhjNjExLCAweGM2YTcsIDB4YzYwZiwgMHhjNjBmLCAweGM2YmUsIDB4Yzc0ZSwgMHhjNjBmLCAweGM2MGYsCisJMHhjNjBmLCAweGM2MGYsIDB4Yzc2MywgMHhjNjBmLCAweGM2MGYsIDB4YzYwZiwgMHhjNjBmLCAweDA4MGMsCisJMHgwZGM1LCAweDAwNzYsIDB4MDBhNiwgMHgwMGU2LCAweDAwOTYsIDB4MjA3MSwgMHgwMjYwLCAweDYxMTQsCisJMHgyMTUwLCAweDc2NDQsIDB4YjY3NiwgMHg5NmI0LCAweDBmZmYsIDB4Yjc3YywgMHhjN2U1LCAweGI3N2UsCisJMHg2MjEwLCAweDAwYjYsIDB4MjI1OCwgMHhiYTNjLCAweDgyZmYsIDB4MDExMCwgMHg4MjExLCAweGJhM2UsCisJMHgwMGJlLCAweDg2ZmYsIDB4MDkwNCwgMHhjNmEyLCAweDk2OTQsIDB4ZmYwMCwgMHg5Mjg0LCAweDBjMDAsCisJMHgwMTIwLCAweDcwNDgsIDB4YjA5MiwgMHg3MDRjLCAweGIwOGUsIDB4OTI4NCwgMHgwMzAwLCAweDA5MDQsCisJMHhjNmEyLCAweDA4MGMsIDB4MTAwZSwgMHgwOTBjLCAweDBkYzUsIDB4MjkwMCwgMHhiMDdhLCAweGI3N2MsCisJMHhjN2NkLCAweGI3N2UsIDB4YTg2NywgMHgwMTAzLCAweGIwNjgsIDB4YTg2YSwgMHhiMDZjLCAweGE4NmUsCisJMHhiMDcwLCAweGE4NzIsIDB4YWU3NiwgMHg5NjhjLCAweDBjMDAsIDB4MDEyMCwgMHg3MzQ4LCAweGFiOTIsCisJMHg3MzRjLCAweGFiOGUsIDB4OTY4YywgMHgwMGZmLCAweDkxODYsIDB4MDAwMiwgMHgwMTgwLCAweDkxODYsCisJMHgwMDI4LCAweDExMTgsIDB4YTg3YiwgMHgwMDFjLCAweDAwNjAsIDB4ZDZkYywgMHgwMTE4LCAweGE4N2IsCisJMHgwMDE1LCAweDAwMzgsIDB4ZDZkNCwgMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDEwLCAweGE4N2IsCisJMHgwMDAwLCAweGFmN2UsIDB4YjA4MCwgMHhhODgyLCAweGIwODQsIDB4YTg4NiwgMHg5MDFlLCAweGQ2YzQsCisJMHgwMTkwLCAweDczNWMsIDB4YWI4NiwgMHg4M2ZmLCAweDAxNzAsIDB4OTM4YSwgMHgwMDA5LCAweDAyMTAsCisJMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwgMHgyMzA4LCAweDIwMTksIDB4MDAxOCwgMHgyMDExLCAweDAwMjUsCisJMHgwODBjLCAweGNjODUsIDB4MDAzZSwgMHhkNmNjLCAweDAxZTgsIDB4NzE1NCwgMHhhOThhLCAweDgxZmYsCisJMHgwMWM4LCAweDkxOTIsIDB4MDAyMSwgMHgxMjYwLCAweDgzMDQsIDB4OTA5OCwgMHgwMDE4LCAweDIwMTEsCisJMHgwMDI5LCAweDA4MGMsIDB4Y2M4NSwgMHgyMDExLCAweDAyMDUsIDB4MjAxMywgMHgwMDAwLCAweDAwNTAsCisJMHhiMDY4LCAweGQwZmMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMjAsIDB4YTk4YSwgMHgwYzY4LCAweDI5NTAsCisJMHgwODBjLCAweGNjMjQsIDB4MDA5ZSwgMHgwMGVlLCAweDAwYWUsIDB4MDA3ZSwgMHgwMDA1LCAweDAwZjYsCisJMHgwMGE2LCAweDYwMDMsIDB4MDAwMywgMHgyMDc5LCAweDAyNmMsIDB4N2MwNCwgMHg3YjAwLCAweDdlMGMsCisJMHg3ZDA4LCAweDYwMTQsIDB4MjA1MCwgMHhiNDM2LCAweGIzM2EsIDB4YjY0NiwgMHhiNTRhLCAweDAwYWUsCisJMHgwMGZlLCAweDJjMTAsIDB4MDgwYywgMHgxYmUwLCAweDA4MDQsIDB4YTZiNiwgMHg2MDAzLCAweDAwMDIsCisJMHg2MDA0LCAweDkwODYsIDB4MDA0MCwgMHgxMWM4LCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsCisJMHhkMGFjLCAweDAxNjAsIDB4NjAxYywgMHhkMDg0LCAweDExMzAsIDB4MDBmNiwgMHgyYzAwLCAweDIwNzgsCisJMHgwODBjLCAweDE3NjgsIDB4MDBmZSwgMHg2MDAzLCAweDAwMDQsIDB4MDAxMCwgMHg2MDAzLCAweDAwMDIsCisJMHgwMDllLCAweDA4MGMsIDB4OTlhNSwgMHgwODBjLCAweDlhYjEsIDB4MDA5NiwgMHgyMDAxLCAweDE5ODgsCisJMHgyMDA0LCAweDYwNDIsIDB4MDgwYywgMHg5YTYxLCAweDA4MGMsIDB4OWJkMywgMHg2MTE0LCAweDIxNDgsCisJMHhhOTdjLCAweGQxZTQsIDB4MDkwNCwgMHhjNzQ5LCAweGQxY2MsIDB4MDVjOCwgMHhhOTc4LCAweGE4NjgsCisJMHhkMGZjLCAweDA1NDAsIDB4MDAxNiwgMHhhODdjLCAweDAwMDYsIDB4YTg4MCwgMHgwMDA2LCAweGE4NjAsCisJMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDIwYTAsIDB4ODEwZSwgMHg4MTBlLCAweDgxMGYsCisJMHg5MTg0LCAweDAwM2YsIDB4MjBlMCwgMHg5MTg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDE5LCAweDIwOTgsCisJMHgwMTU2LCAweDIwYTksIDB4MDAyMCwgMHg0MDAzLCAweDAxNWUsIDB4MDAwZSwgMHhhODgyLCAweDAwMGUsCisJMHhjMGNjLCAweGE4N2UsIDB4MDAxZSwgMHhhODc0LCAweDAwMDYsIDB4MjE0OCwgMHgwODBjLCAweDBmYzAsCisJMHgwMDFlLCAweDA0NTgsIDB4MDAxNiwgMHgwODBjLCAweDBmYzAsIDB4MDA5ZSwgMHhhODdjLCAweGMwY2MsCisJMHhhODdlLCAweGE5NzQsIDB4MDAxNiwgMHgwODBjLCAweGNjNzUsIDB4MDAxZSwgMHgwMGYwLCAweGE4NjcsCisJMHgwMTAzLCAweGE5NzQsIDB4OTE4NCwgMHgwMGZmLCAweDkwYjYsIDB4MDAwMiwgMHgwMTgwLCAweDkwODYsCisJMHgwMDI4LCAweDExMTgsIDB4YTg3YiwgMHgwMDFjLCAweDAwNjAsIDB4ZDFkYywgMHgwMTE4LCAweGE4N2IsCisJMHgwMDE1LCAweDAwMzgsIDB4ZDFkNCwgMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDEwLCAweGE4N2IsCisJMHgwMDAwLCAweDAwMTYsIDB4MDgwYywgMHg2Y2I5LCAweDAwMWUsIDB4ZDFlNCwgMHgxMTIwLCAweDA4MGMsCisJMHhiMmQzLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweGQzZDgsIDB4MGNkOCwgMHg2MDA0LCAweDkwODYsCisJMHgwMDQwLCAweDExMjAsIDB4MDgwYywgMHg5OWE1LCAweDA4MGMsIDB4OWFiMSwgMHgyMDE5LCAweDAwMDEsCisJMHgwODBjLCAweGFhNDksIDB4NjAwMywgMHgwMDAyLCAweDA4MGMsIDB4ZDgwMCwgMHgwODBjLCAweDlhNjEsCisJMHgwODBjLCAweDliZDMsIDB4MDAwNSwgMHg2MDA0LCAweDkwODYsIDB4MDA0MCwgMHgxMTIwLCAweDA4MGMsCisJMHg5OWE1LCAweDA4MGMsIDB4OWFiMSwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhYTQ5LCAweDA4MGMsCisJMHg5YTYxLCAweDA4MGMsIDB4MzI1MCwgMHgwODBjLCAweGQ3ZjgsIDB4MDA5NiwgMHg2MTE0LCAweDIxNDgsCisJMHgwODBjLCAweGQwZDgsIDB4MDE1MCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDI5LCAweGE4NzcsCisJMHgwMDAwLCAweDA4MGMsIDB4NmU5ZiwgMHgwODBjLCAweGQyYzMsIDB4MDA5ZSwgMHgwODBjLCAweGIyZDMsCisJMHgwODBjLCAweDliZDMsIDB4MDAwNSwgMHhhODdiLCAweDAwMTUsIDB4ZDFmYywgMHgwMTgwLCAweGE4N2IsCisJMHgwMDA3LCAweDgwMDIsIDB4ODAwMCwgMHg4MTBhLCAweDkxODksIDB4MDAwMCwgMHgwMDA2LCAweDAwMTYsCisJMHgyMDA5LCAweDFhN2QsIDB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4MDAxZSwgMHgwMDBlLCAweGE5OTIsCisJMHhhODhlLCAweDAwMDUsIDB4OTE4MiwgMHgwMDU0LCAweDEyMjAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMDgsCisJMHgwMDBhLCAweDAwMDUsIDB4YzdiZSwgMHhjN2JlLCAweGM3YmUsIDB4YzdiZSwgMHhjN2JlLCAweGM3YzAsCisJMHhjN2JlLCAweGM3YmUsIDB4Yzg2NiwgMHhjN2JlLCAweGM3YmUsIDB4YzdiZSwgMHhjN2JlLCAweGM3YmUsCisJMHhjN2JlLCAweGM3YmUsIDB4YzdiZSwgMHhjN2JlLCAweGM3YmUsIDB4Yzk5OCwgMHgwODBjLCAweDBkYzUsCisJMHgwMDc2LCAweDAwYTYsIDB4MDBlNiwgMHgwMDk2LCAweDIwNzEsIDB4MDI2MCwgMHg2MTE0LCAweDIxNTAsCisJMHg3NjQ0LCAweGI2NzYsIDB4OTZiNCwgMHgwZmZmLCAweGI3N2MsIDB4YzdlNSwgMHhiNzdlLCAweDYyMTAsCisJMHgwMGI2LCAweDIyNTgsIDB4YmEzYywgMHg4MmZmLCAweDAxMTAsIDB4ODIxMSwgMHhiYTNlLCAweDAwYmUsCisJMHg4NmZmLCAweDA5MDQsIDB4Yzg1ZiwgMHg5Njk0LCAweGZmMDAsIDB4OTI4NCwgMHgwYzAwLCAweDAxMjAsCisJMHg3MDQ4LCAweGIwOTIsIDB4NzA0YywgMHhiMDhlLCAweDkyODQsIDB4MDMwMCwgMHgwOTA0LCAweGM4NWYsCisJMHg5Njg2LCAweDAxMDAsIDB4MTEzMCwgMHg3MDY0LCAweDkwMDUsIDB4MTExOCwgMHhjNmM0LCAweGI2NzYsCisJMHgwYzM4LCAweDA4MGMsIDB4MTAwZSwgMHgwOTBjLCAweDBkYzUsIDB4MjkwMCwgMHhiMDdhLCAweGI3N2MsCisJMHg5N2JkLCAweDAyMDAsIDB4Yjc3ZSwgMHhhODY3LCAweDAxMDMsIDB4YjA2OCwgMHhhODZhLCAweGIwNmMsCisJMHhhODZlLCAweGIwNzAsIDB4YTg3MiwgMHg3MDQ0LCAweDkwODQsIDB4ZjAwMCwgMHg5NjM1LCAweGFlNzYsCisJMHg5NjhjLCAweDBjMDAsIDB4MDEyMCwgMHg3MzQ4LCAweGFiOTIsIDB4NzM0YywgMHhhYjhlLCAweDk2OGMsCisJMHgwMGZmLCAweDkxODYsIDB4MDAwMiwgMHgwMTgwLCAweDkxODYsIDB4MDAyOCwgMHgxMTE4LCAweGE4N2IsCisJMHgwMDFjLCAweDAwNjAsIDB4ZDZkYywgMHgwMTE4LCAweGE4N2IsIDB4MDAxNSwgMHgwMDM4LCAweGQ2ZDQsCisJMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDEwLCAweGE4N2IsIDB4MDAwMCwgMHhhZjdlLCAweGIwODAsCisJMHhhODgyLCAweGIwODQsIDB4YTg4NiwgMHg5MDFlLCAweGQ2YzQsIDB4MDE5MCwgMHg3MzVjLCAweGFiODYsCisJMHg4M2ZmLCAweDAxNzAsIDB4OTM4YSwgMHgwMDA5LCAweDAyMTAsIDB4MjAxOSwgMHgwMDA4LCAweDAwMzYsCisJMHgyMzA4LCAweDIwMTksIDB4MDAxOCwgMHgyMDExLCAweDAwMjUsIDB4MDgwYywgMHhjYzg1LCAweDAwM2UsCisJMHhkNmNjLCAweDAxZTgsIDB4NzE1NCwgMHhhOThhLCAweDgxZmYsIDB4MDFjOCwgMHg5MTkyLCAweDAwMjEsCisJMHgxMjYwLCAweDgzMDQsIDB4OTA5OCwgMHgwMDE4LCAweDIwMTEsIDB4MDAyOSwgMHgwODBjLCAweGNjODUsCisJMHgyMDExLCAweDAyMDUsIDB4MjAxMywgMHgwMDAwLCAweDAwNTAsIDB4YjA2OCwgMHhkMGZjLCAweDAxMjAsCisJMHgyMDA5LCAweDAwMjAsIDB4YTk4YSwgMHgwYzY4LCAweDI5NTAsIDB4MDgwYywgMHhjYzI0LCAweDA4MGMsCisJMHgxYTVhLCAweDAwOWUsIDB4MDBlZSwgMHgwMGFlLCAweDAwN2UsIDB4MDAwNSwgMHgyMDAxLCAweDE5ODgsCisJMHgyMDA0LCAweDYwNDIsIDB4MDA5NiwgMHg2MTE0LCAweDIxNDgsIDB4YTgzYywgMHhhOTQwLCAweDkxMDUsCisJMHgxMTE4LCAweGE4N2MsIDB4YzBkYywgMHhhODdlLCAweDYwMDMsIDB4MDAwMiwgMHhhOTdjLCAweGQxZTQsCisJMHgwOTA0LCAweGM5OTMsIDB4NjA0MywgMHgwMDAwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsCisJMHgwMGJlLCAweGQwYmMsIDB4MTUwMCwgMHhkMWNjLCAweDA5MDQsIDB4Yzk2MiwgMHhhOTc4LCAweGE4NjgsCisJMHhkMGZjLCAweDA5MDQsIDB4YzkyMywgMHgwMDE2LCAweGE4N2MsIDB4MDAwNiwgMHhhODgwLCAweDAwMDYsCisJMHgwMGE2LCAweDIxNTAsIDB4YjE3NCwgMHg5MTg0LCAweDAwZmYsIDB4OTBiNiwgMHgwMDAyLCAweDA5MDQsCisJMHhjOGYwLCAweDkwODYsIDB4MDAyOCwgMHgxOTA0LCAweGM4ZGMsIDB4YTg3YiwgMHgwMDFjLCAweGIwN2IsCisJMHgwMDFjLCAweDA4MDQsIDB4YzhmOCwgMHg2MDI0LCAweGQwZjQsIDB4MTFkMCwgMHhhODM4LCAweGFhMzQsCisJMHg5MjA1LCAweDA5YzgsIDB4YTgzOCwgMHhhYTkwLCAweDkyMDYsIDB4MTEyMCwgMHhhODhjLCAweGFhMzQsCisJMHg5MjA2LCAweDA5ODgsIDB4NjAyNCwgMHhkMGQ0LCAweDExNDgsIDB4YTlhYywgMHhhODM0LCAweDkxMDIsCisJMHg2MDNhLCAweGE5YjAsIDB4YTgzOCwgMHg5MTAzLCAweDYwM2UsIDB4NjAyNCwgMHhjMGY1LCAweDYwMjYsCisJMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODNjLCAweDgwMDAsIDB4YjgzZSwgMHgwMGJlLCAweDkwMDYsCisJMHhhODc2LCAweGE4OTIsIDB4YTg4ZSwgMHhhODdjLCAweGMwZTQsIDB4YTg3ZSwgMHhkMGNjLCAweDAxNDAsCisJMHhjMGNjLCAweGE4N2UsIDB4MDA5NiwgMHhhODc4LCAweDIwNDgsIDB4MDgwYywgMHgwZmMwLCAweDAwOWUsCisJMHgwODBjLCAweGQ0MTIsIDB4MDgwNCwgMHhjOTkzLCAweGQxZGMsIDB4MDE1OCwgMHhhODdiLCAweDAwMTUsCisJMHhiMDdiLCAweDAwMTUsIDB4MDgwYywgMHhkNmE2LCAweDAxMTgsIDB4YjE3NCwgMHhjMWRjLCAweGIxNzYsCisJMHgwMDc4LCAweGQxZDQsIDB4MDEyOCwgMHhhODdiLCAweDAwMDcsIDB4YjA3YiwgMHgwMDA3LCAweDAwNDAsCisJMHhhODdjLCAweGQwYWMsIDB4MDEyOCwgMHhhODM0LCAweGE5MzgsIDB4OTExNSwgMHgxOTBjLCAweGM3OGIsCisJMHhhODdjLCAweGIwN2UsIDB4YTg5MCwgMHhiMDkyLCAweGE4OGMsIDB4YjA4ZSwgMHhhODYwLCAweDIwZTgsCisJMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgyMGEwLCAweDIwYTksIDB4MDAyMCwgMHg4YTA2LCAweDgwMDYsCisJMHg4MDA3LCAweDkwOTQsIDB4MDAzZiwgMHgyMmUwLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMTksCisJMHgyMDk4LCAweDQwMDMsIDB4MDBhZSwgMHgwMDBlLCAweGE4ODIsIDB4MDAwZSwgMHhjMGNjLCAweGE4N2UsCisJMHgwODBjLCAweGQ3ODYsIDB4MDAxZSwgMHhhODc0LCAweDAwMDYsIDB4MjE0OCwgMHgwODBjLCAweDBmYzAsCisJMHgwMDFlLCAweDA4MDQsIDB4Yzk4ZiwgMHgwMDE2LCAweDAwYTYsIDB4MjE1MCwgMHhiMTc0LCAweDkxODQsCisJMHgwMGZmLCAweDkwYjYsIDB4MDAwMiwgMHgwMWUwLCAweDkwODYsIDB4MDAyOCwgMHgxMTI4LCAweGE4N2IsCisJMHgwMDFjLCAweGIwN2IsIDB4MDAxYywgMHgwMGUwLCAweGQxZGMsIDB4MDE1OCwgMHhhODdiLCAweDAwMTUsCisJMHhiMDdiLCAweDAwMTUsIDB4MDgwYywgMHhkNmE2LCAweDAxMTgsIDB4YjE3NCwgMHhjMWRjLCAweGIxNzYsCisJMHgwMDc4LCAweGQxZDQsIDB4MDEyOCwgMHhhODdiLCAweDAwMDcsIDB4YjA3YiwgMHgwMDA3LCAweDAwNDAsCisJMHhhODdjLCAweGQwYWMsIDB4MDEyOCwgMHhhODM0LCAweGE5MzgsIDB4OTExNSwgMHgxOTBjLCAweGM3OGIsCisJMHhhODkwLCAweGIwOTIsIDB4YTg4YywgMHhiMDhlLCAweGE4N2MsIDB4YjA3ZSwgMHgwMGFlLCAweDA4MGMsCisJMHgwZmMwLCAweDAwOWUsIDB4MDgwYywgMHhkNzg2LCAweGE5NzQsIDB4MDAxNiwgMHgwODBjLCAweGNjNzUsCisJMHgwMDFlLCAweDA0NjgsIDB4YTg2NywgMHgwMTAzLCAweGE5NzQsIDB4OTE4NCwgMHgwMGZmLCAweDkwYjYsCisJMHgwMDAyLCAweDAxYjAsIDB4OTA4NiwgMHgwMDI4LCAweDExMTgsIDB4YTg3YiwgMHgwMDFjLCAweDAwZDAsCisJMHhkMWRjLCAweDAxNDgsIDB4YTg3YiwgMHgwMDE1LCAweDA4MGMsIDB4ZDZhNiwgMHgwMTE4LCAweGE5NzQsCisJMHhjMWRjLCAweGE5NzYsIDB4MDA3OCwgMHhkMWQ0LCAweDAxMTgsIDB4YTg3YiwgMHgwMDA3LCAweDAwNTAsCisJMHhhODdiLCAweDAwMDAsIDB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LCAweDkxMTUsCisJMHgxOTBjLCAweGM3OGIsIDB4YTk3NCwgMHgwMDE2LCAweDA4MGMsIDB4NmNiOSwgMHgwMDFlLCAweGQxZTQsCisJMHgxMTIwLCAweDA4MGMsIDB4YjJkMywgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHhkM2Q4LCAweDBjZDgsCisJMHg2MTE0LCAweDAwOTYsIDB4MjE0OCwgMHhhOTdjLCAweGQxZTQsIDB4MTkwYywgMHgxYTdhLCAweDAwOWUsCisJMHgwMDA1LCAweDA4MGMsIDB4OTlhNSwgMHgwMDEwLCAweDA4MGMsIDB4OWE2MSwgMHgwODBjLCAweGQwZDgsCisJMHgwMWYwLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4ZDJlMCwgMHgxMTE4LCAweDA4MGMsCisJMHhiY2I2LCAweDAwYTAsIDB4YTg2NywgMHgwMTAzLCAweDIwMDksIDB4MTgwYywgMHgyMTBjLCAweGQxOGMsCisJMHgxMWI4LCAweGQxODQsIDB4MTE5MCwgMHg2MTA4LCAweGE5N2EsIDB4OTE4ZSwgMHgwMDI5LCAweDExMTAsCisJMHgwODBjLCAweGVmODUsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NmU5ZiwgMHgwMDllLCAweDA4MGMsCisJMHhiMmQzLCAweDA4MGMsIDB4OWFiMSwgMHgwODA0LCAweDliZDMsIDB4YTg3YiwgMHgwMDA0LCAweDBjOTAsCisJMHhhODdiLCAweDAwMDQsIDB4MGM3OCwgMHg5MTgyLCAweDAwNTQsIDB4MTIyMCwgMHg5MTgyLCAweDAwNDAsCisJMHgwMjA4LCAweDAwMGEsIDB4MDAwNSwgMHhjOWVmLCAweGM5ZWYsIDB4YzllZiwgMHhjOWVmLCAweGM5ZWYsCisJMHhjOWYxLCAweGM5ZWYsIDB4YzllZiwgMHhjOWVmLCAweGM5ZWYsIDB4YzllZiwgMHhjOWVmLCAweGM5ZWYsCisJMHhjOWVmLCAweGM5ZWYsIDB4YzllZiwgMHhjOWVmLCAweGM5ZWYsIDB4YzllZiwgMHhjOWVmLCAweDA4MGMsCisJMHgwZGM1LCAweDA4MGMsIDB4NTdkZCwgMHgwMWY4LCAweDYwMTQsIDB4NzE0NCwgMHg5MThjLCAweDBmZmYsCisJMHg5MDE2LCAweGQxYzQsIDB4MDExOCwgMHg3MjY0LCAweDkyOTQsIDB4MDBmZiwgMHgwMDk2LCAweDkwNGQsCisJMHgwMTg4LCAweGE4N2IsIDB4MDAwMCwgMHhhODY0LCAweDkwODYsIDB4MDEzOSwgMHgwMTI4LCAweGE4NjcsCisJMHgwMTAzLCAweGE5NzYsIDB4YWE5NiwgMHgwMDMwLCAweGE4OTcsIDB4NDAwMCwgMHhhOTlhLCAweGFhOWUsCisJMHgwODBjLCAweDZlOWYsIDB4MDA5ZSwgMHgwODA0LCAweGIyZDMsIDB4OTE4MiwgMHgwMDg1LCAweDAwMDIsCisJMHhjYTI3LCAweGNhMjUsIDB4Y2EyNSwgMHhjYTMzLCAweGNhMjUsIDB4Y2EyNSwgMHhjYTI1LCAweGNhMjUsCisJMHhjYTI1LCAweGNhMjUsIDB4Y2EyNSwgMHhjYTI1LCAweGNhMjUsIDB4MDgwYywgMHgwZGM1LCAweDYwMDMsCisJMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg5NGZmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCisJMHg5YWIxLCAweDAxMmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwNTYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNzEsCisJMHgwMjYwLCAweDcyMjQsIDB4NjIxNiwgMHg3MjIwLCAweDA4MGMsIDB4ZDBjNiwgMHgwMWY4LCAweDIyNjgsCisJMHg2ODAwLCAweDkwODYsIDB4MDAwMCwgMHgwMWQwLCAweDYwMTAsIDB4NmQxMCwgMHg5NTJlLCAweDExYjAsCisJMHgwMGM2LCAweDJkNjAsIDB4MDBkNiwgMHgwODBjLCAweGNjZTYsIDB4MDBkZSwgMHgwMGNlLCAweDAxNTgsCisJMHg3MDJjLCAweGQwODQsIDB4MTExOCwgMHgwODBjLCAweGNjYjAsIDB4MDAxMCwgMHg2ODAzLCAweDAwMDIsCisJMHg2MDA3LCAweDAwODYsIDB4MDAyOCwgMHgwODBjLCAweGNjZDIsIDB4MGQ5MCwgMHg2MDA3LCAweDAwODcsCisJMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NGZmLCAweDA4MGMsIDB4OWFiMSwgMHg3MjIwLCAweDA4MGMsCisJMHhkMGM2LCAweDAxNzgsIDB4NjgxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsCisJMHgwMTQwLCAweDY4MjQsIDB4ZDBlYywgMHgwMTI4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweGQ0MTIsCisJMHgwMGNlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDVlLCAweDAwMmUsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsCisJMHgxMTYwLCAweDYwMDQsIDB4OTA4YSwgMHgwMDg1LCAweDBhMGMsIDB4MGRjNSwgMHg5MDhhLCAweDAwOTIsCisJMHgxYTBjLCAweDBkYzUsIDB4OTA4MiwgMHgwMDg1LCAweDAwZTIsIDB4OTE4NiwgMHgwMDI3LCAweDAxMjAsCisJMHg5MTg2LCAweDAwMTQsIDB4MTkwYywgMHgwZGM1LCAweDA4MGMsIDB4OTlhNSwgMHgwMDk2LCAweDYwMTQsCisJMHgyMDQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTQwLCAweGE4NjcsIDB4MDEwMywgMHhhODc3LCAweDAwMDAsCisJMHhhODdiLCAweDAwMjksIDB4MDgwYywgMHg2ZTlmLCAweDAwOWUsIDB4MDgwYywgMHhiMzA2LCAweDA4MDQsCisJMHg5YWIxLCAweGNhYjYsIDB4Y2FiOCwgMHhjYWI4LCAweGNhYjYsIDB4Y2FiNiwgMHhjYWI2LCAweGNhYjYsCisJMHhjYWI2LCAweGNhYjYsIDB4Y2FiNiwgMHhjYWI2LCAweGNhYjYsIDB4Y2FiNiwgMHgwODBjLCAweDBkYzUsCisJMHgwODBjLCAweDk5YTUsIDB4MDgwYywgMHhiMzA2LCAweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDkxODYsCisJMHgwMDEzLCAweDExMjgsIDB4NjAwNCwgMHg5MDgyLCAweDAwODUsIDB4MjAwOCwgMHgwNGI4LCAweDkxODYsCisJMHgwMDI3LCAweDExZjgsIDB4MDgwYywgMHg5OWE1LCAweDA4MGMsIDB4MzI1MCwgMHgwODBjLCAweGQ3ZjgsCisJMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGQwZDgsIDB4MDE1MCwgMHhhODY3LCAweDAxMDMsCisJMHhhODc3LCAweDAwMDAsIDB4YTg3YiwgMHgwMDI5LCAweDA4MGMsIDB4NmU5ZiwgMHgwODBjLCAweGQyYzMsCisJMHgwMDllLCAweDA4MGMsIDB4YjJkMywgMHgwODBjLCAweDlhYjEsIDB4MDAwNSwgMHgwODBjLCAweGIzNmQsCisJMHgwY2UwLCAweDkxODYsIDB4MDAxNCwgMHgxZGQwLCAweDA4MGMsIDB4OTlhNSwgMHgwMDk2LCAweDYwMTQsCisJMHgyMDQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwZDYwLCAweGE4NjcsIDB4MDEwMywgMHhhODc3LCAweDAwMDAsCisJMHhhODdiLCAweDAwMDYsIDB4YTg4MCwgMHhjMGVjLCAweGE4ODIsIDB4MDhmMCwgMHgwMDAyLCAweGNiMGUsCisJMHhjYjBjLCAweGNiMGMsIDB4Y2IwYywgMHhjYjBjLCAweGNiMGMsIDB4Y2IyNiwgMHhjYjBjLCAweGNiMGMsCisJMHhjYjBjLCAweGNiMGMsIDB4Y2IwYywgMHhjYjBjLCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweDk5YTUsCisJMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzOSwgMHgwMTE4LCAweDkxODYsCisJMHgwMDM1LCAweDExMTgsIDB4MjAwMSwgMHgxOTg2LCAweDAwMTAsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsCisJMHg2MDFhLCAweDYwMDMsIDB4MDAwYywgMHgwODBjLCAweDlhYjEsIDB4MDAwNSwgMHgwODBjLCAweDk5YTUsCisJMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzOSwgMHgwMTE4LCAweDkxODYsCisJMHgwMDM1LCAweDExMTgsIDB4MjAwMSwgMHgxOTg2LCAweDAwMTAsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsCisJMHg2MDFhLCAweDYwMDMsIDB4MDAwZSwgMHgwODBjLCAweDlhYjEsIDB4MDAwNSwgMHg5MTgyLCAweDAwOTIsCisJMHgxMjIwLCAweDkxODIsIDB4MDA4NSwgMHgwMjA4LCAweDAwMTIsIDB4MDgwNCwgMHhiMzZkLCAweGNiNTQsCisJMHhjYjU0LCAweGNiNTQsIDB4Y2I1NCwgMHhjYjU2LCAweGNiYTMsIDB4Y2I1NCwgMHhjYjU0LCAweGNiNTQsCisJMHhjYjU0LCAweGNiNTQsIDB4Y2I1NCwgMHhjYjU0LCAweDA4MGMsIDB4MGRjNSwgMHgwMDk2LCAweDYwMTAsCisJMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MDE2OCwgMHg2MDM0LCAweDkwOGMsCiAJMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDM1LCAweDExMTgsCi0JMHgyMDAxLCAweDE5ODcsIDB4MDAxMCwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2MDFhLCAweDYwMDMsCi0JMHgwMDBjLCAweDA4MGMsIDB4OThlZCwgMHgwMDA1LCAweDA4MGMsIDB4OTdlMSwgMHg2MDM0LCAweDkwOGMsCi0JMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDM1LCAweDExMTgsCi0JMHgyMDAxLCAweDE5ODcsIDB4MDAxMCwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2MDFhLCAweDYwMDMsCi0JMHgwMDBlLCAweDA4MGMsIDB4OThlZCwgMHgwMDA1LCAweDkxODIsIDB4MDA5MiwgMHgxMjIwLCAweDkxODIsCi0JMHgwMDg1LCAweDAyMDgsIDB4MDAxMiwgMHgwODA0LCAweGIxOWIsIDB4YzhkMiwgMHhjOGQyLCAweGM4ZDIsCi0JMHhjOGQyLCAweGM4ZDQsIDB4YzkyMSwgMHhjOGQyLCAweGM4ZDIsIDB4YzhkMiwgMHhjOGQyLCAweGM4ZDIsCi0JMHhjOGQyLCAweGM4ZDIsIDB4MDgwYywgMHgwZGM1LCAweDAwOTYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsCi0JMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwMTY4LCAweDYwMzQsIDB4OTA4YywgMHhmZjAwLCAweDgxMGYsCi0JMHg5MTg2LCAweDAwMzksIDB4MDExOCwgMHg5MTg2LCAweDAwMzUsIDB4MTExOCwgMHgwMDllLCAweDA4MDQsCi0JMHhjOTM1LCAweDA4MGMsIDB4Y2U1NiwgMHgxMTE4LCAweDA4MGMsIDB4ZDA0MSwgMHgwMDY4LCAweDYwMTQsCi0JMHgyMDQ4LCAweGE4N2MsIDB4ZDBlNCwgMHgxMTEwLCAweDA4MGMsIDB4ZDA0MSwgMHhhODY3LCAweDAxMDMsCi0JMHgwODBjLCAweGQ1NDEsIDB4MDgwYywgMHg2ZGQxLCAweDAwZDYsIDB4MmM2OCwgMHgwODBjLCAweGIwYWIsCi0JMHgwMWQwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMWUsIDB4NjAwYiwgMHhmZmZmLCAweDIwMDksCi0JMHgwMjZlLCAweDIxMGMsIDB4NjEzYSwgMHgyMDA5LCAweDAyNmYsIDB4MjEwYywgMHg2MTNlLCAweDY5MTAsCi0JMHg2MTEyLCAweDA4MGMsIDB4ZDJkMiwgMHg2OTU0LCAweDYxNTYsIDB4NjAyMywgMHgwMDAxLCAweDA4MGMsCi0JMHg5MzNiLCAweDA4MGMsIDB4OThlZCwgMHgyZDYwLCAweDAwZGUsIDB4MDgwYywgMHhiMTAxLCAweDAwOWUsCi0JMHgwMDA1LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDA1YTAsCi0JMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzNSwgMHgwMTMwLCAweDkxODYsCi0JMHgwMDFlLCAweDAxMTgsIDB4OTE4NiwgMHgwMDM5LCAweDE1MzgsIDB4MDBkNiwgMHgyYzY4LCAweDA4MGMsCi0JMHhkNGQ3LCAweDExZjAsIDB4MDgwYywgMHhiMGFiLCAweDAxZDgsIDB4NjEwNiwgMHg2MDAzLCAweDAwMDEsCi0JMHg2MDIzLCAweDAwMDEsIDB4NjkxMCwgMHg2MTEyLCAweDY5MmMsIDB4NjEyZSwgMHg2OTMwLCAweDYxMzIsCi0JMHg2OTM0LCAweDkxOGMsIDB4MDBmZiwgMHg2MTM2LCAweDY5MzgsIDB4NjEzYSwgMHg2OTNjLCAweDYxM2UsCi0JMHg2OTU0LCAweDYxNTYsIDB4MDgwYywgMHhkMmQyLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsCi0JMHgyZDYwLCAweDAwZGUsIDB4MDgwNCwgMHhiMTAxLCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsCi0JMHhjZTU2LCAweDAxYzgsIDB4YTg2NywgMHgwMTAzLCAweGE4ODAsIDB4ZDBiNCwgMHgwMTI4LCAweGMwZWMsCi0JMHhhODgyLCAweGE4N2IsIDB4MDAwNiwgMHgwMDQ4LCAweGQwYmMsIDB4MDExOCwgMHhhODdiLCAweDAwMDIsCi0JMHgwMDIwLCAweGE4N2IsIDB4MDAwNSwgMHgwODBjLCAweGQxNTIsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsCi0JMHg2ZGQxLCAweDA4MGMsIDB4ZDA0MSwgMHgwMDllLCAweDA4MDQsIDB4YjEwMSwgMHgwMDE2LCAweDAwOTYsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZTU2LCAweDAxNDAsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsCi0JMHgwMDI4LCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweDZkZDEsIDB4MDA5ZSwgMHgwMDFlLCAweDkxODYsCi0JMHgwMDEzLCAweDAxNDgsIDB4OTE4NiwgMHgwMDE0LCAweDAxMzAsIDB4OTE4NiwgMHgwMDI3LCAweDAxMTgsCi0JMHgwODBjLCAweGIxOWIsIDB4MDAzMCwgMHgwODBjLCAweDk3ZTEsIDB4MDgwYywgMHhiMTM0LCAweDA4MGMsCi0JMHg5OGVkLCAweDAwMDUsIDB4MDA1NiwgMHgwMDY2LCAweDAwOTYsIDB4MDBhNiwgMHgyMDI5LCAweDAwMDEsCi0JMHg5MTgyLCAweDAxMDEsIDB4MTIwOCwgMHgwMDEwLCAweDIwMDksIDB4MDEwMCwgMHgyMTMwLCAweDgzMDQsCi0JMHg5MDk4LCAweDAwMTgsIDB4MjAwOSwgMHgwMDIwLCAweDIwMTEsIDB4MDAyOSwgMHgwODBjLCAweGNhMDMsCi0JMHg5NmIyLCAweDAwMjAsIDB4YjAwNCwgMHg5MDRkLCAweDAxMTAsIDB4MDgwYywgMHgwZmMwLCAweDA4MGMsCi0JMHgxMDBlLCAweDA1MjAsIDB4ODUyOCwgMHhhODY3LCAweDAxMTAsIDB4YTg2YiwgMHgwMDAwLCAweDI5MjAsCi0JMHhiNDA2LCAweDk2OGEsIDB4MDAzZCwgMHgxMjI4LCAweDI2MDgsIDB4MjAxMSwgMHgwMDFiLCAweDA0OTksCi0JMHgwMGE4LCAweDk2YjIsIDB4MDAzYywgMHgyMDA5LCAweDAwM2MsIDB4Mjk1MCwgMHgyMDExLCAweDAwMWIsCi0JMHgwNDUxLCAweDBjMjgsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHgwMGFlLCAweDg1MmYsCi0JMHg5NWFkLCAweDAwMDMsIDB4YjU2NiwgMHg5NWFjLCAweDAwMDAsIDB4MDA0OCwgMHgyMDAxLCAweDAyMDUsCi0JMHgyMDAzLCAweDAwMDAsIDB4MDBhZSwgMHg4NTJmLCAweDk1YWQsIDB4MDAwMywgMHhiNTY2LCAweDAwOWUsCi0JMHgwMDZlLCAweDAwNWUsIDB4MDAwNSwgMHgwMGE2LCAweDg5ZmYsIDB4MDE1OCwgMHhhODA0LCAweDkwNTUsCi0JMHgwMTMwLCAweGE4MDcsIDB4MDAwMCwgMHgwODBjLCAweDZkZDEsIDB4MmE0OCwgMHgwY2I4LCAweDA4MGMsCi0JMHg2ZGQxLCAweDAwYWUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHg3ODE0LCAweDkwODUsCi0JMHgwMDgwLCAweDc4MTYsIDB4ZDE4NCwgMHgwMTA4LCAweDgxMDgsIDB4ODEwYywgMHgyMGE5LCAweDAwMDEsCi0JMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MjAwLCAweDIwYTAsIDB4MjBlMSwgMHgwMDAwLCAweDIzMDAsCi0JMHg5ZTAwLCAweDIwOTgsIDB4NDAwMywgMHg4MzE4LCAweDkzODYsIDB4MDAyMCwgMHgxMTQ4LCAweDIwMTgsCi0JMHgyMzAwLCAweDllMDAsIDB4MjA5OCwgMHg3ODE0LCAweDgwMDAsIDB4OTA4NSwgMHgwMDgwLCAweDc4MTYsCi0JMHg4MTA5LCAweDFkODAsIDB4NzgxNywgMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHg2OTIwLCAweDkxODYsCi0JMHgwMDAzLCAweDAxMTgsIDB4OTE4NiwgMHgwMDAyLCAweDExZDAsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsCi0JMHgyZDYwLCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NiwgMHgwMTUwLCAweDIwMDEsCi0JMHgwMDA2LCAweGE5ODAsIDB4YzFkNSwgMHgwODBjLCAweDcwM2QsIDB4MDgwYywgMHg2ZGM0LCAweDA4MGMsCi0JMHhkMDQxLCAweDAwOWUsIDB4MDgwYywgMHhiMTM0LCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsCi0JMHgwMGM2LCAweDcwMmMsIDB4ZDA4NCwgMHgxMTcwLCAweDYwMDgsIDB4MjA2MCwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDAyLCAweDExNDAsIDB4NjEwNCwgMHg5MTg2LCAweDAwODUsIDB4MDExOCwgMHg5MTg2LCAweDAwOGIsCi0JMHgxMTA4LCAweDkwMDYsIDB4MDBjZSwgMHgwMDA1LCAweDAwNjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgyMDMxLCAweDAwMDEsIDB4NjAyMCwgMHg5MDg0LCAweDAwMGYsIDB4MDA4MywgMHgwMTJlLCAweDAwNmUsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwNjYsIDB4MjAzMSwgMHgwMDAwLCAweDYwMjAsCi0JMHg5MDg0LCAweDAwMGYsIDB4MDAxYiwgMHgwMDZlLCAweDAxMmUsIDB4MDAwNSwgMHhjYTlmLCAweGNhOWYsCi0JMHhjYTlhLCAweGNhYzEsIDB4Y2E4ZCwgMHhjYTlhLCAweGNhYzEsIDB4Y2E5YSwgMHhjYTlhLCAweDkxMWYsCi0JMHhjYTlhLCAweGNhOWEsIDB4Y2E5YSwgMHhjYThkLCAweGNhOGQsIDB4MDgwYywgMHgwZGM1LCAweDAwMzYsCi0JMHgyMDE5LCAweDAwMTAsIDB4MDgwYywgMHhlNGM4LCAweDYwMjMsIDB4MDAwNiwgMHg2MDAzLCAweDAwMDcsCi0JMHgwMDNlLCAweDAwMDUsIDB4OTAwNiwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwOTYsCi0JMHg4NmZmLCAweDExZDgsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NiwgMHgwMWMwLCAweGE4NjQsCi0JMHg5MDg2LCAweDAxMzksIDB4MTEyOCwgMHhhODdiLCAweDAwMDUsIDB4YTg4MywgMHgwMDAwLCAweDAwMjgsCi0JMHg5MDBlLCAweDIwMDEsIDB4MDAwNSwgMHgwODBjLCAweDcwM2QsIDB4MDgwYywgMHhkMTUyLCAweDA4MGMsCi0JMHg2ZGM0LCAweDA4MGMsIDB4YjEzNCwgMHg5MDg1LCAweDAwMDEsIDB4MDA5ZSwgMHgwMDA1LCAweDkwMDYsCi0JMHgwY2UwLCAweDYwMDAsIDB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHgwMDAyLCAweGNhZDcsCi0JMHhjYjA3LCAweGNhZDksIDB4Y2IyOCwgMHhjYjAyLCAweGNhZDcsIDB4Y2E5YSwgMHhjYTlmLCAweGNhOWYsCi0JMHhjYTlhLCAweGNhOWEsIDB4Y2E5YSwgMHhjYTlhLCAweGNhOWEsIDB4Y2E5YSwgMHhjYTlhLCAweDA4MGMsCi0JMHgwZGM1LCAweDg2ZmYsIDB4MTUyMCwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgwNTAwLCAweDAwOTYsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZTU2LCAweDAxNjgsIDB4YTg3YywgMHhkMGNjLCAweDAxNDAsCi0JMHgwMDk2LCAweGMwY2MsIDB4YTg3ZSwgMHhhODc4LCAweDIwNDgsIDB4MDgwYywgMHgwZmMwLCAweDAwOWUsCi0JMHgwODBjLCAweGQxNTIsIDB4MDA5ZSwgMHgwODBjLCAweGQ1MWIsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsCi0JMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHgwODBjLCAweDkzM2IsIDB4MDgwYywgMHg5OGVkLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4MDA2NiwgMHgwODBjLCAweDFhYjcsIDB4MDA2ZSwgMHgwODkwLCAweDAwZTYsCi0JMHgyMDcxLCAweDE5ZTksIDB4NzAyNCwgMHg5YzA2LCAweDExMjAsIDB4MDgwYywgMHhhODAxLCAweDAwZWUsCi0JMHgwODQwLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDkwODYsIDB4MDAwNiwgMHgxMTUwLCAweDAwODYsCi0JMHgwMDk2LCAweDIwNDksIDB4MDAwMSwgMHgyYzQwLCAweDA4MGMsIDB4YTkyOSwgMHgwMDllLCAweDAwOGUsCi0JMHgwMDEwLCAweDA4MGMsIDB4YTZmZSwgMHgwMGVlLCAweDE5MDQsIDB4Y2FkOSwgMHgwODA0LCAweGNhOWEsCi0JMHgwMDM2LCAweDAwZTYsIDB4MjA3MSwgMHgxOWU5LCAweDcwM2MsIDB4OWMwNiwgMHgxMTM4LCAweDkwMWUsCi0JMHgwODBjLCAweGE4NzcsIDB4MDBlZSwgMHgwMDNlLCAweDA4MDQsIDB4Y2FkOSwgMHgwODBjLCAweGFhNTksCi0JMHgwMGVlLCAweDAwM2UsIDB4MTkwNCwgMHhjYWQ5LCAweDA4MDQsIDB4Y2E5YSwgMHgwMGM2LCAweDYwMjAsCi0JMHg5MDg0LCAweDAwMGYsIDB4MDAxMywgMHgwMGNlLCAweDAwMDUsIDB4Y2I1YiwgMHhjYzI1LCAweGNkOGYsCi0JMHhjYjY1LCAweGIxMzQsIDB4Y2I1YiwgMHhlNGJhLCAweGQ1ODMsIDB4Y2MyNSwgMHg5MGYxLCAweGNlMWIsCi0JMHhjYjU0LCAweGNiNTQsIDB4Y2I1NCwgMHhjYjU0LCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweGQwNWUsCi0JMHgxMTEwLCAweDA4MGMsIDB4YmFlMiwgMHgwMDA1LCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweDk4ZWQsCi0JMHgwODA0LCAweGIxMDEsIDB4NjAxYiwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHhjZTU2LCAweDAxMzAsCi0JMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHgyYzAwLCAweGE4OTYsIDB4MDA5ZSwgMHg2MDAwLCAweDkwOGEsCi0JMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHgwMDAyLCAweGNiODQsIDB4Y2I4NiwgMHhjYmFhLCAweGNiYmUsCi0JMHhjYmU0LCAweGNiODQsIDB4Y2I1YiwgMHhjYjViLCAweGNiNWIsIDB4Y2JiZSwgMHhjYmJlLCAweGNiODQsCi0JMHhjYjg0LCAweGNiODQsIDB4Y2I4NCwgMHhjYmM4LCAweDA4MGMsIDB4MGRjNSwgMHgwMGU2LCAweDYwMTQsCi0JMHgwMDk2LCAweDIwNDgsIDB4YTg4MCwgMHhjMGI1LCAweGE4ODIsIDB4MDA5ZSwgMHgyMDcxLCAweDE5ZTksCi0JMHg3MDI0LCAweDljMDYsIDB4MDFhMCwgMHgwODBjLCAweGE2ZmUsIDB4MDgwYywgMHhkNTFiLCAweDYwMDcsCi0JMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDIzLCAweDAwMDIsIDB4MjAwMSwgMHgxOTg4LCAweDIwMDQsCi0JMHg2MDFhLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsIDB4MDBlZSwgMHgwMDA1LCAweDYwMWIsCi0JMHgwMDAxLCAweDBjZDgsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4YTg4MCwgMHhjMGI1LCAweGE4ODIsCi0JMHgwMDllLCAweDA4MGMsIDB4ZDUxYiwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsCi0JMHgwMDAyLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwMDk2LCAweDYwMWIsCi0JMHgwMDAxLCAweDYwMTQsIDB4MjA0OCwgMHhhODgwLCAweGMwYjUsIDB4YTg4MiwgMHgwMDllLCAweDAwMDUsCi0JMHgwODBjLCAweDU3ZGIsIDB4MDFiOCwgMHg2MDE0LCAweDAwOTYsIDB4OTA0ZCwgMHgwMTkwLCAweGE4NjQsCi0JMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDA2LCAweDkwODYsIDB4MDEzOSwgMHgxMTUwLCAweGE4NjcsCi0JMHgwMTM5LCAweGE4N2IsIDB4MDAzMCwgMHhhODk3LCAweDQwMDUsIDB4YTg5YiwgMHgwMDA0LCAweDA4MGMsCi0JMHg2ZGQxLCAweDAwOWUsIDB4MDgwNCwgMHhiMTAxLCAweDYwMTQsIDB4MDA5NiwgMHg5MDRkLCAweDA1YzAsCi0JMHhhOTdjLCAweGQxZTQsIDB4MDVhOCwgMHgyMDAxLCAweDE4MGYsIDB4MjAwNCwgMHhkMGM0LCAweDAxMTAsCi0JMHgwMDllLCAweDAwMDUsIDB4YTg4NCwgMHgwMDllLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweDkxMDgsCi0JMHg2MTFhLCAweDIwMDEsIDB4MDAzMCwgMHgyYzA4LCAweDA4MGMsIDB4MTYxMSwgMHgyMDAxLCAweDAzMGMsCi0JMHgyMDA0LCAweDkwODYsIDB4MDA0MSwgMHgxMTk4LCAweDYwMTQsIDB4MDA5NiwgMHg5MDRkLCAweDA5MGMsCi0JMHgwZGM1LCAweGE4ODAsIDB4ZDBmNCwgMHgxMTMwLCAweGMwZjUsIDB4YTg4MiwgMHgwMDllLCAweDYwMWIsCi0JMHgwMDAyLCAweDAwNjgsIDB4MDA5ZSwgMHgwMGM2LCAweDA4MGMsIDB4MjM5NywgMHgwMGNlLCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHhiMTgwLCAweDAwMDUsCi0JMHgwMDllLCAweDA4MGMsIDB4MWFiNywgMHgwODA0LCAweGNiYWEsIDB4NjAwMCwgMHg5MDhhLCAweDAwMTAsCi0JMHgxYTBjLCAweDBkYzUsIDB4MDAwYiwgMHgwMDA1LCAweGNjM2MsIDB4Y2I2MiwgMHhjYzNlLCAweGNjM2MsCi0JMHhjYzNlLCAweGNjM2UsIDB4Y2I1YywgMHhjYzNjLCAweGNiNTYsIDB4Y2I1NiwgMHhjYzNjLCAweGNjM2MsCi0JMHhjYzNjLCAweGNjM2MsIDB4Y2MzYywgMHhjYzNjLCAweDA4MGMsIDB4MGRjNSwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDAwYmUsIDB4OTA4YSwgMHgwMDBjLCAweDFhMGMsCi0JMHgwZGM1LCAweDAwYjYsIDB4MDAxMywgMHgwMGJlLCAweDAwMDUsIDB4Y2M1OSwgMHhjZDI2LCAweGNjNWIsCi0JMHhjYzliLCAweGNjNWIsIDB4Y2M5YiwgMHhjYzViLCAweGNjNjksIDB4Y2M1OSwgMHhjYzliLCAweGNjNTksCi0JMHhjYzhhLCAweDA4MGMsIDB4MGRjNSwgMHg2MDA0LCAweDkwOGUsIDB4MDAxNiwgMHgwNWMwLCAweDkwOGUsCi0JMHgwMDA0LCAweDA1YTgsIDB4OTA4ZSwgMHgwMDAyLCAweDA1OTAsIDB4OTA4ZSwgMHgwMDUyLCAweDA5MDQsCi0JMHhjZDIyLCAweDYwMDQsIDB4MDgwYywgMHhkMDVlLCAweDA5MDQsIDB4Y2QzZiwgMHg5MDhlLCAweDAwMDQsCi0JMHgxMTEwLCAweDA4MGMsIDB4MzI2ZiwgMHg5MDhlLCAweDAwMjEsIDB4MDkwNCwgMHhjZDQzLCAweDkwOGUsCi0JMHgwMDIyLCAweDA5MDQsIDB4Y2Q4YSwgMHg5MDhlLCAweDAwM2QsIDB4MDkwNCwgMHhjZDQzLCAweDkwOGUsCi0JMHgwMDM5LCAweDA5MDQsIDB4Y2Q0NywgMHg5MDhlLCAweDAwMzUsIDB4MDkwNCwgMHhjZDQ3LCAweDkwOGUsCi0JMHgwMDFlLCAweDAxNzgsIDB4OTA4ZSwgMHgwMDAxLCAweDExNDAsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LCAweDAxMTAsIDB4MDgwYywgMHgzMjQ2LCAweDA4MGMsCi0JMHhiYWUyLCAweDA4MDQsIDB4YjEzNCwgMHgwMGM2LCAweDAwZDYsIDB4NjEwNCwgMHg5MTg2LCAweDAwMTYsCi0JMHgwOTA0LCAweGNkMTMsIDB4OTE4NiwgMHgwMDAyLCAweDE5MDQsIDB4Y2NlOCwgMHgyMDAxLCAweDE4MzcsCi0JMHgyMDA0LCAweGQwOGMsIDB4MTFjOCwgMHgwODBjLCAweDc1NjksIDB4MTFiMCwgMHgwODBjLCAweGQ1NjEsCi0JMHgwMTM4LCAweDA4MGMsIDB4NzU4YywgMHgxMTIwLCAweDA4MGMsIDB4NzQ3MywgMHgwODA0LCAweGNkNzMsCi0JMHgyMDAxLCAweDE5N2UsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4MTgwMCwgMHgyMDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDc0OTUsIDB4MDgwNCwgMHhjZDczLCAweDYwMTAsIDB4MjA1OCwgMHgyMDAxLCAweDE4MzcsCi0JMHgyMDA0LCAweGQwYWMsIDB4MTkwNCwgMHhjZDczLCAweGI4YTAsIDB4OTA4NCwgMHhmZjgwLCAweDE5MDQsCi0JMHhjZDczLCAweGI4NDAsIDB4OTA4NCwgMHgwMGZmLCAweDkwMDUsIDB4MDE5MCwgMHg4MDAxLCAweGI4NDIsCi0JMHg2MDE3LCAweDAwMDAsIDB4NjAyMywgMHgwMDA3LCAweDYwMWIsIDB4MDM5OCwgMHg2MDQzLCAweDAwMDAsCi0JMHgwODBjLCAweGIwYWIsIDB4MDEyOCwgMHgyYjAwLCAweDYwMTIsIDB4NjAyMywgMHgwMDAxLCAweDA0NTgsCi0JMHgwMGRlLCAweDAwY2UsIDB4NjAwNCwgMHg5MDhlLCAweDAwMDIsIDB4MTFhMCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgxMTcwLCAweDIwMDksIDB4MTgzNywgMHgyMTA0LCAweGMwODUsCi0JMHgyMDBhLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4NjBiYSwgMHgwMGVlLCAweDA4MGMsCi0JMHhiYWUyLCAweDAwMzAsIDB4MDgwYywgMHhiYWUyLCAweDA4MGMsIDB4MzI0NiwgMHgwODBjLCAweGQ1NzYsCi0JMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MzI2ZiwgMHgwMTJlLCAweDAwZWUsCi0JMHgwODBjLCAweGIxMzQsIDB4MDAwNSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NjYzLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDkzODMsIDB4MDgwYywgMHg5OGVkLCAweDAwZGUsCi0JMHgwMGNlLCAweDBjODAsIDB4MDgwYywgMHgzMjZmLCAweDA4MDQsIDB4Y2M5NywgMHgwMGM2LCAweDAwZDYsCi0JMHg2MTA0LCAweDkxODYsIDB4MDAxNiwgMHgwZDM4LCAweDYwMTAsIDB4MjA1OCwgMHhiODQwLCAweDkwODQsCi0JMHgwMGZmLCAweDkwMDUsIDB4MDkwNCwgMHhjY2U4LCAweDgwMDEsIDB4Yjg0MiwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDkzODMsIDB4MDgwYywgMHg5OGVkLCAweDAwZGUsIDB4MDBjZSwgMHgwODk4LCAweDA4MGMsCi0JMHhiYWUyLCAweDA4MDQsIDB4Y2M5OSwgMHgwODBjLCAweGJiMWUsIDB4MDgwNCwgMHhjYzk5LCAweDAwZDYsCi0JMHgyYzY4LCAweDYxMDQsIDB4MDgwYywgMHhkNGQ3LCAweDAwZGUsIDB4MDExOCwgMHgwODBjLCAweGIxMDEsCi0JMHgwNDA4LCAweDYwMDQsIDB4ODAwNywgMHg2MTM0LCAweDkxOGMsIDB4MDBmZiwgMHg5MTA1LCAweDYwMzYsCi0JMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHg2MDNjLCAweDYwMGEsCi0JMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2MDFhLCAweDYwMmMsIDB4MmMwOCwgMHgyMDYwLCAweDYwMjQsCi0JMHhkMGI0LCAweDAxMDgsIDB4YzA4NSwgMHhjMGI1LCAweDYwMjYsIDB4MjE2MCwgMHgwODBjLCAweDkzM2IsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHhiYWUyLCAweDA4MGMsCi0JMHgzMjQ2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgzMjZmLCAweDYwMTcsCi0JMHgwMDAwLCAweDYwMjMsIDB4MDAwNywgMHg2MDFiLCAweDAzOTgsIDB4NjA0MywgMHgwMDAwLCAweDAxMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDgwYywgMHhiNTM2LCAweDE5MDQsIDB4Y2QzZiwgMHgwMDA1LCAweDYwMDAsCi0JMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZGM1LCAweDAwOTYsIDB4MDBkNiwgMHgwMDFiLCAweDAwZGUsCi0JMHgwMDllLCAweDAwMDUsIDB4Y2RhYSwgMHhjZGFhLCAweGNkYWEsIDB4Y2RhYSwgMHhjZGFhLCAweGNkYWEsCi0JMHhjZGFhLCAweGNkYWEsIDB4Y2RhYSwgMHhjYjViLCAweGNkYWEsIDB4Y2I2MiwgMHhjZGFjLCAweGNiNjIsCi0JMHhjZGM2LCAweGNkYWEsIDB4MDgwYywgMHgwZGM1LCAweDYwMDQsIDB4OTA4NiwgMHgwMDhiLCAweDAxYjAsCi0JMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzNSwgMHgxMTMwLCAweDYwMmMsCi0JMHg5MDgwLCAweDAwMDksIDB4MjAwYywgMHhjMTg1LCAweDIxMDIsIDB4NjAwNywgMHgwMDhiLCAweDYwMDMsCi0JMHgwMDBkLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwODBjLCAweGQ1NTUsCi0JMHgwMTE4LCAweDA4MGMsIDB4ZDU2OCwgMHgwMDEwLCAweDA4MGMsIDB4ZDU3NiwgMHgwODBjLCAweGQwNDEsCi0JMHgwODBjLCAweGNlNTYsIDB4MDU3MCwgMHgwODBjLCAweDMyNDYsIDB4MDgwYywgMHhjZTU2LCAweDAxNjgsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsIDB4MDAwNiwgMHhhODc3LCAweDAwMDAsCi0JMHhhODgwLCAweGMwZWQsIDB4YTg4MiwgMHgwODBjLCAweDZkZDEsIDB4MmM2OCwgMHgwODBjLCAweGIwYWIsCi0JMHgwMTUwLCAweDY4MTAsIDB4NjAxMiwgMHgwODBjLCAweGQyZDIsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsCi0JMHhiMTM0LCAweDAwY2UsIDB4MDAwOCwgMHgyZDYwLCAweDYwMTcsIDB4MDAwMCwgMHg2MDIzLCAweDAwMDEsCi0JMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsCi0JMHgwMGM4LCAweDA4MGMsIDB4ZDU1NSwgMHgwMTM4LCAweDYwMzQsIDB4OTA4NiwgMHg0MDAwLCAweDExMTgsCi0JMHgwODBjLCAweDMyNDYsIDB4MDhkMCwgMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsCi0JMHgwMDM5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDM1LCAweDExMTgsIDB4MDgwYywgMHgzMjQ2LCAweDA4NjgsCi0JMHgwODBjLCAweGIxMzQsIDB4MDAwNSwgMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDBkYzUsCi0JMHgwMDAyLCAweGNlMzEsIDB4Y2UzMSwgMHhjZTM1LCAweGNlMzMsIDB4Y2UzZiwgMHhjZTMxLCAweGNlMzEsCi0JMHhiMTM0LCAweGNlMzEsIDB4Y2UzMSwgMHhjZTMxLCAweGNlMzEsIDB4Y2UzMSwgMHhjZTMxLCAweGNlMzEsCi0JMHhjZTMxLCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweGFhNTksIDB4NjExNCwgMHgwMDk2LCAweDIxNDgsCi0JMHhhODdiLCAweDAwMDYsIDB4MDgwYywgMHg2ZGQxLCAweDAwOWUsIDB4MDgwNCwgMHhiMTAxLCAweDYwMWMsCi0JMHhkMDg0LCAweDE5MGMsIDB4MWFiNywgMHgwYzg4LCAweDkyODQsIDB4MDAwNywgMHgxMTU4LCAweDkyODIsCi0JMHgxY2QwLCAweDAyNDAsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OTIwMiwgMHgxMjE4LCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4OTAwNiwgMHgwY2U4LCAweDAwOTYsIDB4MDAyOCwgMHgwMDk2LCAweDAwMDYsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDAwZSwgMHgwMDA2LCAweDk5ODQsIDB4ZjAwMCwgMHg5MDg2LCAweGYwMDAsCi0JMHgwMTEwLCAweDA4MGMsIDB4MTBiOSwgMHgwMDBlLCAweDAwOWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsCi0JMHgwMDM2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2MSwgMHgxY2QwLCAweDIwNzEsCi0JMHgxODAwLCAweDczNTQsIDB4NzA3NCwgMHg5MzAyLCAweDE2NDAsIDB4NjAyMCwgMHg5MjA2LCAweDExZjgsCi0JMHgwODBjLCAweGQ1NjEsIDB4MDE4MCwgMHg5Mjg2LCAweDAwMDEsIDB4MTE2OCwgMHg2MDA0LCAweDkwODYsCi0JMHgwMDA0LCAweDExNDgsIDB4MDgwYywgMHgzMjQ2LCAweDA4MGMsIDB4ZDU3NiwgMHgwMGM2LCAweDA4MGMsCi0JMHhiMTM0LCAweDAwY2UsIDB4MDA2MCwgMHgwODBjLCAweGQyNGMsIDB4MDE0OCwgMHgwODBjLCAweGQwNWUsCi0JMHgxMTEwLCAweDA4MGMsIDB4YmFlMiwgMHgwMGM2LCAweDA4MGMsIDB4YjEwMSwgMHgwMGNlLCAweDljZTAsCi0JMHgwMDE4LCAweDcwNjgsIDB4OWMwMiwgMHgxMjA4LCAweDA4YTAsIDB4MDEyZSwgMHgwMDBlLCAweDAwM2UsCi0JMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDAxNiwgMHg5MTg4LCAweDEwMDAsCi0JMHgyMTBjLCAweDgxZmYsIDB4MDEyOCwgMHgyMDYxLCAweDFhYjgsIDB4NjExMiwgMHgwODBjLCAweDMyNDYsCi0JMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMWUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4YjBhYiwgMHgwMWIwLCAweDY2NTYsCi0JMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHg1N2RiLCAweDAxMTgsIDB4MDgwYywgMHhjZjg1LCAweDAxNjgsCi0JMHgwODBjLCAweGQyZDIsIDB4NjAyMywgMHgwMDAzLCAweDIwMDksIDB4MDA0YiwgMHgwODBjLCAweGIxODAsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwYzYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiYWEwLCAweDA4MGMsIDB4YjE1MywgMHgwNTYwLCAweDYwNTcsCi0JMHgwMDAwLCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLCAweGQyZDIsIDB4NjAyMywgMHgwMDAzLCAweDAwMTYsCi0JMHgwODBjLCAweDk0ZTAsIDB4MDA3NiwgMHg5MDNlLCAweDA4MGMsIDB4OTNiMywgMHgyYzA4LCAweDA4MGMsCi0JMHhlNjkwLCAweDAwN2UsIDB4MDAxZSwgMHhkMTg0LCAweDAxMjgsIDB4MDgwYywgMHhiMTAxLCAweDkwODUsCi0JMHgwMDAxLCAweDAwNzAsIDB4MDgwYywgMHg1N2RiLCAweDAxMjgsIDB4ZDE4YywgMHgxMTcwLCAweDA4MGMsCi0JMHhjZjg1LCAweDAxNDgsIDB4MjAwOSwgMHgwMDRjLCAweDA4MGMsIDB4YjE4MCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MjkwMCwgMHg2MDE2LCAweDBjOTAsCi0JMHgyMDA5LCAweDAwNGQsIDB4MDAxMCwgMHgyMDA5LCAweDAwNGUsIDB4MDBmNiwgMHgwMGM2LCAweDAwNDYsCi0JMHgwMDE2LCAweDA4MGMsIDB4YjBhYiwgMHgyYzc4LCAweDA1YTAsIDB4N2U1NiwgMHgyYjAwLCAweDc4MTIsCi0JMHg3ODIzLCAweDAwMDMsIDB4MDAxNiwgMHgyMDIxLCAweDAwMDUsIDB4MDgwYywgMHhjZjk3LCAweDAwMWUsCi0JMHg5MTg2LCAweDAwNGQsIDB4MDExOCwgMHg5MTg2LCAweDAwNGUsIDB4MDE0OCwgMHgyMDAxLCAweDE5ODEsCi0JMHgyMDBjLCAweGQxZmMsIDB4MDE2OCwgMHgyZjYwLCAweDA4MGMsIDB4YjEwMSwgMHgwMGQwLCAweDIwMDEsCi0JMHgxOTgwLCAweDIwMGMsIDB4ZDFmYywgMHgwMTIwLCAweDJmNjAsIDB4MDgwYywgMHhiMTAxLCAweDAwODgsCi0JMHgyZjYwLCAweDA4MGMsIDB4NTdkYiwgMHgwMTM4LCAweGQxOGMsIDB4MTExOCwgMHgwNGYxLCAweDAxNDgsCi0JMHgwMDEwLCAweDI5MDAsIDB4NzgxNiwgMHgwMDFlLCAweDAwMTYsIDB4MDgwYywgMHhiMTgwLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMWUsIDB4MDA0ZSwgMHgwMGNlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwYzYsCi0JMHgwMDQ2LCAweDA4MGMsIDB4YjBhYiwgMHgyYzc4LCAweDA1MDgsIDB4N2U1NiwgMHgyYjAwLCAweDc4MTIsCi0JMHg3ODIzLCAweDAwMDMsIDB4MDA5NiwgMHgyMDIxLCAweDAwMDQsIDB4MDQ4OSwgMHgwMDllLCAweDIwMDEsCi0JMHgxOTdmLCAweDIwMGMsIDB4ZDFmYywgMHgwMTIwLCAweDJmNjAsIDB4MDgwYywgMHhiMTAxLCAweDAwNjAsCi0JMHgyZjYwLCAweDA4MGMsIDB4NTdkYiwgMHgwMTIwLCAweGQxOGMsIDB4MTE2MCwgMHgwMDcxLCAweDAxMzAsCi0JMHgyMDA5LCAweDAwNTIsIDB4MDgwYywgMHhiMTgwLCAweDkwODUsIDB4MDAwMSwgMHgwMDRlLCAweDAwY2UsCi0JMHgwMGZlLCAweDAwMDUsIDB4MjkwMCwgMHg3ODE2LCAweDBjOTgsIDB4MDBjNiwgMHgwODBjLCAweDRiODksCi0JMHgwMGNlLCAweDExMjAsIDB4MDgwYywgMHhiMTAxLCAweDkwMDYsIDB4MDAwNSwgMHhhODY3LCAweDAwMDAsCi0JMHhhODZiLCAweDgwMDAsIDB4MjkwMCwgMHg2MDE2LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwOTYsCi0JMHgwMDc2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4Njg1MSwgMHgwMTU4LCAweDIwMDEsCi0JMHhjZjljLCAweDAwMDYsIDB4OTAwZSwgMHgyNDAwLCAweDA4MGMsIDB4NzAzZCwgMHgwODBjLCAweDZkZDEsCi0JMHgwMDBlLCAweDA4MDcsIDB4MjQxOCwgMHgwODBjLCAweDk3N2IsIDB4YmFhMCwgMHgwMDg2LCAweDIwNDEsCi0JMHgwMDAxLCAweDIwMzksIDB4MDAwMSwgMHgyNjA4LCAweDA4MGMsIDB4OTRmOCwgMHgwMDhlLCAweDA4MGMsCi0JMHg5M2IzLCAweDJmMDgsIDB4MjY0OCwgMHgwODBjLCAweGU2OTAsIDB4YjkzYywgMHg4MWZmLCAweDA5MGMsCi0JMHg5NWNiLCAweDA4MGMsIDB4OThlZCwgMHgwMTJlLCAweDAwN2UsIDB4MDA5ZSwgMHgwMDA1LCAweDAwYzYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIwYWIsIDB4MDE5MCwgMHg2NjBhLCAweDJiMDgsCi0JMHg2MTEyLCAweDA4MGMsIDB4ZDJkMiwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDIwMDksCi0JMHgwMDFmLCAweDA4MGMsIDB4YjE4MCwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsCi0JMHg5MDA2LCAweDBjZDgsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIxNTMsCi0JMHgwMWI4LCAweDY2MGEsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDJkMiwgMHg2MDIzLCAweDAwMDgsCi0JMHgyOTAwLCAweDYwMTYsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTc2OCwgMHgwMGZlLCAweDIwMDksCi0JMHgwMDIxLCAweDA4MGMsIDB4YjE4MCwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsCi0JMHg5MDA2LCAweDBjZDgsIDB4MjAwOSwgMHgwMDNkLCAweDAwYzYsIDB4MDEyNiwgMHgwMDE2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4YjBhYiwgMHgwMTk4LCAweDY2MGEsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsCi0JMHhkMmQyLCAweDYwMjMsIDB4MDAwMSwgMHgyOTAwLCAweDYwMTYsIDB4MDAxZSwgMHgwMDE2LCAweDA4MGMsCi0JMHhiMTgwLCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDkwMDYsCi0JMHgwY2QwLCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhiMTUzLCAweDAxODgsCi0JMHgyYjA4LCAweDYxMTIsIDB4MDgwYywgMHhkMmQyLCAweDYwMjMsIDB4MDAwMSwgMHgyOTAwLCAweDYwMTYsCi0JMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHhiMTgwLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsCi0JMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgyMDA5LCAweDAwNDQsIDB4MDgzMCwgMHgyMDA5LCAweDAwNDksCi0JMHgwODE4LCAweDAwMjYsIDB4MDBiNiwgMHg2MjEwLCAweDIyNTgsIDB4YmEzYywgMHg4MmZmLCAweDAxMTAsCi0JMHg4MjExLCAweGJhM2UsIDB4MDBiZSwgMHgwMDJlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDYwMDQsCi0JMHg5MDhlLCAweDAwMDIsIDB4MDE0MCwgMHg5MDhlLCAweDAwMDMsIDB4MDEyOCwgMHg5MDhlLCAweDAwMDQsCi0JMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwODYsCi0JMHgwMDk2LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA0LCAweDAxYTgsIDB4NjAxNCwgMHg5MDRkLCAweDA4MGMsCi0JMHhjZTU2LCAweDAxODAsIDB4YTg2NCwgMHg5MDg2LCAweDAxMzksIDB4MDE3MCwgMHg2MDIwLCAweDkwYzYsCi0JMHgwMDAzLCAweDAxNDAsIDB4OTBjNiwgMHgwMDAyLCAweDAxMjgsIDB4YTg2OCwgMHhkMGZjLCAweDAxMTAsCi0JMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDBlLCAweDAwMDUsCi0JMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4YjE1MywgMHgwMTk4LCAweDJiMDgsCi0JMHg2MTEyLCAweDA4MGMsIDB4ZDJkMiwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDA4MGMsCi0JMHgzMjQ2LCAweDIwMDksIDB4MDAyOCwgMHgwODBjLCAweGIxODAsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCi0JMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDkxODYsIDB4MDAxNSwgMHgxMWE4LCAweDIwMTEsCi0JMHgxODI0LCAweDIyMDQsIDB4OTA4NiwgMHgwMDc0LCAweDExNzgsIDB4MDBiNiwgMHgwODBjLCAweGJkMzgsCi0JMHgwMGJlLCAweDA4MGMsIDB4YmY1ZCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDI5LCAweDA4MGMsCi0JMHg5MzgzLCAweDA4MGMsIDB4OThlZCwgMHgwMDc4LCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4NjgsCi0JMHgwMDllLCAweGQwZmMsIDB4MDE0OCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHhkNDk4LCAweDA4MGMsCi0JMHhiYWUyLCAweDA4MGMsIDB4YjEwMSwgMHgwMDA1LCAweDAwOTYsIDB4NjAxNCwgMHg5MDRkLCAweDA5MGMsCi0JMHgwZGM1LCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsCi0JMHgwMDA0LCAweGE4NjcsIDB4MDEzOSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZkZDEsCi0JMHgwMTJlLCAweDAwOWUsIDB4MDgwYywgMHhiMTAxLCAweDBjMzAsIDB4MDA5NiwgMHg5MTg2LCAweDAwMTYsCi0JMHgxMTI4LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDY2NjMsIDB4MDBlOCwgMHg5MTg2LCAweDAwMTUsCi0JMHgxNTEwLCAweDIwMTEsIDB4MTgyNCwgMHgyMjA0LCAweDkwODYsIDB4MDAxNCwgMHgxMWUwLCAweDYwMTAsCi0JMHgwMGI2LCAweDIwNTgsIDB4MDgwYywgMHg2N2I4LCAweDAwYmUsIDB4MDgwYywgMHhjMDMzLCAweDExOTgsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODkwLCAweDAwYmUsIDB4OTAwNSwgMHgwMTYwLCAweDIwMDEsCi0JMHgwMDA2LCAweDA4MGMsIDB4NjY2MywgMHg2MDE0LCAweDIwNDgsIDB4YTg2OCwgMHhkMGZjLCAweDAxNzAsCi0JMHgwODBjLCAweGI1MGEsIDB4MDA0OCwgMHg2MDE0LCAweDIwNDgsIDB4YTg2OCwgMHhkMGZjLCAweDA1MjgsCi0JMHgwODBjLCAweGJhZTIsIDB4MDgwYywgMHhiMTAxLCAweDAwOWUsIDB4MDAwNSwgMHg2MDE0LCAweDYzMTAsCi0JMHgyMzU4LCAweDkwNGQsIDB4MDkwYywgMHgwZGM1LCAweGE4N2IsIDB4MDAwMCwgMHhhODgzLCAweDAwMDAsCi0JMHhhODk3LCAweDQwMDAsIDB4OTAwZSwgMHgwODBjLCAweDY5M2QsIDB4MTEwOCwgMHhjMTg1LCAweGI4MDAsCi0JMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHhhOTlhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg2ZGQxLCAweDAxMmUsIDB4MDgwYywgMHhiMTAxLCAweDA4ZjgsIDB4NjAxNCwgMHg5MDRkLCAweDA5MGMsCi0JMHgwZGM1LCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsCi0JMHgwMDA0LCAweGE4NjcsIDB4MDEzOSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZkZDEsCi0JMHgwMTJlLCAweDA4MGMsIDB4YjEwMSwgMHgwODQwLCAweGE4NzgsIDB4OTA4NiwgMHgwMDA1LCAweDExMDgsCi0JMHgwMDA5LCAweDAwMDUsIDB4YTg4MCwgMHhjMGFkLCAweGE4ODIsIDB4MDAwNSwgMHg2MDQzLCAweDAwMDAsCi0JMHg2MDE3LCAweDAwMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA1MCwgMHgwODBjLCAweDkzM2IsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwMGM2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsCi0JMHgwMGJlLCAweGQwYmMsIDB4MDEyMCwgMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDEzLCAweDAwY2UsCi0JMHgwMDA1LCAweGNiNWIsIDB4ZDE4MiwgMHhkMTgyLCAweGQxODUsIDB4ZTlmNCwgMHhlYTBmLCAweGVhMTIsCi0JMHhjYjViLCAweGNiNWIsIDB4Y2I1YiwgMHhjYjViLCAweGNiNWIsIDB4Y2I1YiwgMHhjYjViLCAweGNiNWIsCi0JMHgwODBjLCAweDBkYzUsIDB4YTAwMSwgMHhhMDAxLCAweDAwMDUsIDB4MDA5NiwgMHg2MDE0LCAweDkwNGQsCi0JMHgwMTE4LCAweGE4N2MsIDB4ZDBlNCwgMHgxMTEwLCAweDAwOWUsIDB4MDAxMCwgMHgwMDllLCAweDAwMDUsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwNTUwLCAweDIwMDEsCi0JMHgxODM0LCAweDIwMDQsIDB4OTAwNSwgMHgxNTQwLCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweGIwYWIsCi0JMHgwNTA4LCAweDc4MTAsIDB4NjAxMiwgMHgwODBjLCAweGQyZDIsIDB4NzgyMCwgMHg5MDg2LCAweDAwMDMsCi0JMHgwMTI4LCAweDc4MDgsIDB4NjAzYSwgMHgyZjAwLCAweDYwM2UsIDB4MDAyMCwgMHg3ODA4LCAweDYwM2UsCi0JMHgyZjAwLCAweDYwM2EsIDB4NjAyZSwgMHg2MDIzLCAweDAwMDEsIDB4NjAwNywgMHgwMDM1LCAweDYwMDMsCi0JMHgwMDAxLCAweDc5NTQsIDB4NjE1NiwgMHgwODBjLCAweDkzM2IsIDB4MDgwYywgMHg5OGVkLCAweDJmNjAsCi0JMHgwMGZlLCAweDAwMDUsIDB4MmY2MCwgMHgwMGZlLCAweDIwMDEsIDB4MTk4OSwgMHgyMDA0LCAweDYwNDIsCi0JMHgwMDA1LCAweDAwMTYsIDB4MDA5NiwgMHg2ODE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGU0LCAweDAxODAsCi0JMHhjMGU0LCAweGE4N2UsIDB4YTg3NywgMHgwMDAwLCAweGE4OTMsIDB4MDAwMCwgMHhhODhmLCAweDAwMDAsCi0JMHhkMGNjLCAweDAxMzAsIDB4YzBjYywgMHhhODdlLCAweGE4NzgsIDB4MjA0OCwgMHgwODBjLCAweDBmYzAsCi0JMHg2ODMwLCAweDYwMzYsIDB4OTA4ZSwgMHgwMDAxLCAweDAxNDgsIDB4NjgwMywgMHgwMDAyLCAweDkwODYsCi0JMHgwMDA1LCAweDAxNzAsIDB4OTAwNiwgMHg2MDJlLCAweDYwMzIsIDB4MDBkMCwgMHg2ODFjLCAweGMwODUsCi0JMHg2ODFlLCAweDY4MDMsIDB4MDAwNCwgMHg2ODI0LCAweGMwZjQsIDB4OTA4NSwgMHgwYzAwLCAweDY4MjYsCi0JMHg2ODE0LCAweDIwNDgsIDB4YThhYywgMHg2OTM4LCAweDkxMDIsIDB4YThiMCwgMHg2OTNjLCAweDkxMDMsCi0JMHgxZTQ4LCAweDY4M2MsIDB4NjAyZSwgMHg2ODM4LCAweDkwODQsIDB4ZmZmYywgMHg2ODNhLCAweDYwMzIsCi0JMHgyZDAwLCAweDYwM2EsIDB4NjgwOCwgMHg2MDNlLCAweDY5MTAsIDB4NjExMiwgMHg2OTU0LCAweDYxNTYsCi0JMHg2MDIzLCAweDAwMDEsIDB4NjAwNywgMHgwMDM5LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDkzM2IsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDA5ZSwgMHgwMDFlLCAweDAwMDUsIDB4NjAyNCwgMHhkMGQ0LCAweDA1MTAsCi0JMHhkMGY0LCAweDExZjgsIDB4NjAzOCwgMHg5NDBhLCAweDYwM2MsIDB4OTMwMywgMHgwMjMwLCAweDkxMDUsCi0JMHgwMTIwLCAweDYwMjQsIDB4YzBkNCwgMHhjMGY1LCAweDAwOTgsIDB4NjQzYSwgMHg2MzNlLCAweGFjM2UsCi0JMHhhYjQyLCAweDAwNDYsIDB4MDAzNiwgMHgyNDAwLCAweGFjYWMsIDB4OTQwMiwgMHhhODM2LCAweDIzMDAsCi0JMHhhYmIwLCAweDkzMDMsIDB4YTgzYSwgMHgwMDNlLCAweDAwNGUsIDB4NjAyNCwgMHhjMGQ0LCAweDAwMDAsCi0JMHg2MDI2LCAweDAwMDUsIDB4ZDBmNCwgMHgxMTM4LCAweGE4M2MsIDB4NjAzYSwgMHhhODQwLCAweDYwM2UsCi0JMHg2MDI0LCAweGMwZjUsIDB4NjAyNiwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHg2MDA0LCAweDkwOGUsCi0JMHgwMDM0LCAweDAxYjgsIDB4OTA4ZSwgMHgwMDM1LCAweDAxYTAsIDB4OTA4ZSwgMHgwMDM2LCAweDAxODgsCi0JMHg5MDhlLCAweDAwMzcsIDB4MDE3MCwgMHg5MDhlLCAweDAwMzgsIDB4MDE1OCwgMHg5MDhlLCAweDAwMzksCi0JMHgwMTQwLCAweDkwOGUsIDB4MDAzYSwgMHgwMTI4LCAweDkwOGUsIDB4MDAzYiwgMHgwMTEwLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMGU2LCAweDIwMDEsIDB4MTk4MywgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDAxLCAweDAwMzIsCi0JMHgwODBjLCAweDkxYjEsIDB4MjAwMSwgMHgxOTg3LCAweDgyZmYsIDB4MTExMCwgMHgyMDExLCAweDAwMTQsCi0JMHgyMjAyLCAweDIwMDEsIDB4MTk4NSwgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDcxLCAweDE5NmQsCi0JMHg3MTFhLCAweDcyMWUsIDB4MjAwMSwgMHgwMDY0LCAweDA4MGMsIDB4OTFiMSwgMHgyMDAxLCAweDE5ODgsCi0JMHg4MmZmLCAweDExMTAsIDB4MjAxMSwgMHgwMDE0LCAweDIyMDIsIDB4MjAwMSwgMHgxOTg5LCAweDkyODgsCi0JMHgwMDBhLCAweDIxMDIsIDB4MjAwMSwgMHgxYTk5LCAweDIxMDIsIDB4MjAwMSwgMHgwMDMyLCAweDA4MGMsCi0JMHgxNjExLCAweDA4MGMsIDB4NmE3MywgMHgwMGVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMGU2LCAweDIwMDEsIDB4MTk4NywgMHgyMDAzLCAweDAwMjgsCi0JMHgyMDAxLCAweDE5ODgsIDB4MjAwMywgMHgwMDE0LCAweDIwNzEsIDB4MTk2ZCwgMHg3MDFiLCAweDAwMDAsCi0JMHg3MDFmLCAweDA3ZDAsIDB4MjAwMSwgMHgxOTg5LCAweDIwMDksIDB4MDAxZSwgMHgyMTAyLCAweDIwMDEsCi0JMHgxYTk5LCAweDIxMDIsIDB4MjAwMSwgMHgwMDMyLCAweDA4MGMsIDB4MTYxMSwgMHgwMGVlLCAweDAwMWUsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDA5NiwgMHg2MDU4LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDEwNDAsCi0JMHgwMDllLCAweDAwMDUsIDB4MDAwNSwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHhiMGFiLCAweDAxODAsIDB4MmIwOCwgMHg2MTEyLCAweDBjYTksIDB4NjAyMywgMHgwMDAxLCAweDI5MDAsCi0JMHg2MDE2LCAweDIwMDksIDB4MDAzMywgMHgwODBjLCAweGIxODAsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCi0JMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwOTYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsCi0JMHgxODAwLCAweDkxODYsIDB4MDAxNSwgMHgxNTIwLCAweDcwOTAsIDB4OTA4NiwgMHgwMDE4LCAweDAxMjAsCi0JMHg3MDkwLCAweDkwODYsIDB4MDAxNCwgMHgxMWUwLCAweDYwMTQsIDB4MjA0OCwgMHhhYTNjLCAweGQyZTQsCi0JMHgxMTYwLCAweDJjNzgsIDB4MDgwYywgMHg5Yjg4LCAweDAxZDgsIDB4NzA3YywgMHhhYTUwLCAweDkyMDYsCi0JMHgxMTYwLCAweDcwODAsIDB4YWE1NCwgMHg5MjA2LCAweDExNDAsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCi0JMHhiYWEwLCAweDAwYmUsIDB4OTAwZSwgMHgwODBjLCAweDMyOGYsIDB4MDgwYywgMHhiNTBhLCAweDAwMjAsCi0JMHgwODBjLCAweGJhZTIsIDB4MDgwYywgMHhiMTAxLCAweDAwZmUsIDB4MDBlZSwgMHgwMDllLCAweDAwMDUsCi0JMHg3MDYwLCAweGFhNTQsIDB4OTIwNiwgMHgwZDQ4LCAweDBjODAsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4YjBhYiwgMHgwMTg4LCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGQyZDIsCi0JMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDIwMDksIDB4MDA0ZCwgMHgwODBjLCAweGIxODAsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwYzYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDE2LCAweDA4MGMsIDB4YjBhYiwgMHgwMTgwLCAweDJiMDgsCi0JMHg2MTEyLCAweDA4MGMsIDB4ZDJkMiwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDAwMWUsCi0JMHgwODBjLCAweGIxODAsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMWUsCi0JMHg5MDA2LCAweDBjZDAsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNjYsCi0JMHgwMDk2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweDE4MDAsIDB4OTE4NiwgMHgwMDE1LCAweDE1NjgsCi0JMHg3MTkwLCAweDYwMTQsIDB4MjA0OCwgMHhhODE0LCAweDgwMDMsIDB4OTEwNiwgMHgxNTMwLCAweDIwZTEsCi0JMHgwMDAwLCAweDIwMDEsIDB4MTlhMiwgMHgyMDAzLCAweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MzAsCi0JMHgyMGE4LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwOTQsIDB4MDAzZiwgMHgyMmU4LCAweDkwODQsCi0JMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMGEwLCAweDIwMDEsIDB4MTlhMiwgMHgwMDE2LCAweDIwMGMsCi0JMHgwODBjLCAweGRiYWMsIDB4MDAxZSwgMHhhODA0LCAweDkwMDUsIDB4MDExMCwgMHgyMDQ4LCAweDBjMzgsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLCAweDAwMTAsIDB4MDgwYywgMHhiYWUyLCAweDA4MGMsCi0JMHhiMTAxLCAweDAwZmUsIDB4MDBlZSwgMHgwMDllLCAweDAwNmUsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDk2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweDE4MDAsCi0JMHg5MTg2LCAweDAwMTUsIDB4MTFiOCwgMHg3MDkwLCAweDkwODYsIDB4MDAwNCwgMHgxMTk4LCAweDYwMTQsCi0JMHgyMDQ4LCAweDJjNzgsIDB4MDgwYywgMHg5Yjg4LCAweDAxYTgsIDB4NzA3YywgMHhhYTc0LCAweDkyMDYsCi0JMHgxMTMwLCAweDcwODAsIDB4YWE3OCwgMHg5MjA2LCAweDExMTAsIDB4MDgwYywgMHgzMjQ2LCAweDA4MGMsCi0JMHhiNTBhLCAweDAwMjAsIDB4MDgwYywgMHhiYWUyLCAweDA4MGMsIDB4YjEwMSwgMHgwMGZlLCAweDAwZWUsCi0JMHgwMDllLCAweDAwMDUsIDB4NzA2MCwgMHhhYTc4LCAweDkyMDYsIDB4MGQ3OCwgMHgwYzgwLCAweDAwOTYsCi0JMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHgxODAwLCAweDkxODYsIDB4MDAxNSwgMHgxNTUwLCAweDcwOTAsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTUzMCwgMHg2MDE0LCAweDIwNDgsIDB4MmM3OCwgMHgwODBjLCAweDliODgsCi0JMHgwNWYwLCAweDcwN2MsIDB4YWFjYywgMHg5MjA2LCAweDExODAsIDB4NzA4MCwgMHhhYWQwLCAweDkyMDYsCi0JMHgxMTYwLCAweDA4MGMsIDB4MzI0NiwgMHgwMDE2LCAweGE5OTgsIDB4YWFiMCwgMHg5Mjg0LCAweDEwMDAsCi0JMHhjMGZkLCAweDA4MGMsIDB4NTc4MiwgMHgwMDFlLCAweDAwMTAsIDB4MDgwYywgMHg1NTZkLCAweDA4MGMsCi0JMHhjZTU2LCAweDA1MDgsIDB4YTg3YiwgMHgwMDAwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDAsCi0JMHgwMDgwLCAweDA4MGMsIDB4Y2U1NiwgMHgwMWI4LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweDU1NmQsCi0JMHgxZDcwLCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsCi0JMHgwMDA0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4NjcsIDB4MDEzOSwgMHgwODBjLCAweDZkZDEsCi0JMHgwMTJlLCAweDA4MGMsIDB4YjEwMSwgMHgwMGZlLCAweDAwZWUsIDB4MDA5ZSwgMHgwMDA1LCAweDcwNjAsCi0JMHhhYWQwLCAweDkyMDYsIDB4MDkzMCwgMHgwODg4LCAweDAwMTYsIDB4MDAyNiwgMHhhODdjLCAweGQwYWMsCi0JMHgwMTc4LCAweGE5MzgsIDB4YWEzNCwgMHgyMTAwLCAweDkyMDUsIDB4MDE1MCwgMHhhODkwLCAweDkxMDYsCi0JMHgxMTE4LCAweGE4OGMsIDB4OTIwNiwgMHgwMTIwLCAweGE5OTIsIDB4YWE4ZSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZDYsIDB4MDAzNiwgMHgwODBjLCAweGNlNTYsCi0JMHgwOTA0LCAweGQ0OTQsIDB4MDA5NiwgMHg2MzE0LCAweDIzNDgsIDB4YTg3YSwgMHhhOTgyLCAweDkyOWUsCi0JMHg0MDAwLCAweDE1ODAsIDB4NjMxMCwgMHgwMGM2LCAweDIzNTgsIDB4MjAwOSwgMHgwMDAwLCAweGE4NjgsCi0JMHhkMGY0LCAweDExNDAsIDB4MDgwYywgMHg2OTNkLCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsCi0JMHgwMTA4LCAweGMxOGQsIDB4YWE5NiwgMHhhOTlhLCAweDIwYTksIDB4MDAwNCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAzMSwgMHgyMGEwLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsCi0JMHgwMDA2LCAweDIwOTgsIDB4MDgwYywgMHgwZjhiLCAweDIwYTksIDB4MDAwNCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDM1LCAweDIwYTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMGEsIDB4MjA5OCwgMHgwODBjLCAweDBmOGIsCi0JMHgwMGNlLCAweDAwOTAsIDB4YWE5NiwgMHgzOTE4LCAweDkzOTgsIDB4MDAwNywgMHgyMzFjLCAweDYwMDQsCi0JMHg5MDg2LCAweDAwMTYsIDB4MDExMCwgMHhhODliLCAweDAwMDQsIDB4YWJhMiwgMHg2MzEwLCAweDIzNTgsCi0JMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHhhODllLCAweGE4NjgsIDB4YzBmNCwgMHhhODZhLCAweDA4MGMsCi0JMHg2ZGM0LCAweDYwMTcsIDB4MDAwMCwgMHgwMDllLCAweDAwM2UsIDB4MDBkZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMGI2LCAweDAwOTYsIDB4MDBmNiwgMHg2MjE0LCAweDIyNDgsCi0JMHg2MjEwLCAweDIyNTgsIDB4MjA3OSwgMHgwMjYwLCAweDkwOTYsIDB4MDAwMCwgMHgxMWEwLCAweGI4MTQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTAwZSwgMHgwODBjLCAweDI4OTQsIDB4MjExOCwgMHg4MzFmLCAweDkzOWMsCi0JMHhmZjAwLCAweDc4MzgsIDB4OTA4NCwgMHgwMGZmLCAweDkzMWQsIDB4N2MzYywgMHgyMDExLCAweDgwMTgsCi0JMHgwODBjLCAweDRiZTksIDB4MDBhOCwgMHg5MDk2LCAweDAwMDEsIDB4MTE0OCwgMHg4OWZmLCAweDAxODAsCi0JMHhhODliLCAweDAwMGQsIDB4NzgzOCwgMHhhOGE2LCAweDc4M2MsIDB4YThhYSwgMHgwMDQ4LCAweDkwOTYsCi0JMHgwMDAyLCAweDExMzAsIDB4YTg5YiwgMHgwMDBkLCAweDc4MzgsIDB4YThhNiwgMHg3ODNjLCAweGE4YWEsCi0JMHgwMGZlLCAweDAwOWUsIDB4MDBiZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDAwYzYsCi0JMHgwMDI2LCAweDAwMTYsIDB4OTE4NiwgMHgwMDM1LCAweDAxMTAsIDB4NmEzOCwgMHgwMDA4LCAweDZhMmMsCi0JMHgwODBjLCAweGNlNDQsIDB4MDFmMCwgMHgyMjYwLCAweDYxMjAsIDB4OTE4NiwgMHgwMDAzLCAweDAxMTgsCi0JMHg5MTg2LCAweDAwMDYsIDB4MTE5MCwgMHg2ODM4LCAweDkyMDYsIDB4MDE0MCwgMHg2ODNjLCAweDkyMDYsCi0JMHgxMTYwLCAweDYxMDgsIDB4NjgzOCwgMHg5MTA2LCAweDExNDAsIDB4MDAyMCwgMHg2MDA4LCAweDY5M2MsCi0JMHg5MTA2LCAweDExMTgsIDB4NjAxMCwgMHg2OTEwLCAweDkxMDYsIDB4MDAxZSwgMHgwMDJlLCAweDAwY2UsCi0JMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwY2M4LCAweGE5NzQsIDB4ZDFjYywgMHgwMTk4LCAweDkxOGMsCi0JMHgwMGZmLCAweDkxOGUsIDB4MDAwMiwgMHgxMTcwLCAweGE5YTgsIDB4OTE4YywgMHgwMDBmLCAweDkxOGUsCi0JMHgwMDAxLCAweDExNDAsIDB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LCAweDkxMTUsCi0JMHgxOTBjLCAweGM1MDksIDB4MDAwNSwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwMDEwLCAweDAwMzYsCi0JMHg5MDFlLCAweDA0OTksIDB4MDFlMCwgMHgwODBjLCAweGNlNTYsIDB4MDFjOCwgMHgwODBjLCAweGQwNDEsCi0JMHg2MDM3LCAweDQwMDAsIDB4NjAxNCwgMHg2MDE3LCAweDAwMDAsIDB4MDA5NiwgMHgyMDQ4LCAweGE4N2MsCi0JMHgwODBjLCAweGQwNWUsIDB4MTExOCwgMHgwODBjLCAweGJhZTIsIDB4MDA0MCwgMHhhODY3LCAweDAxMDMsCi0JMHhhODc3LCAweDAwMDAsIDB4ODNmZiwgMHgxMTI5LCAweDA4MGMsIDB4NmRkMSwgMHgwMDllLCAweDAwM2UsCi0JMHgwMDA1LCAweGE4ODAsIDB4ZDBiNCwgMHgwMTI4LCAweGE4N2IsIDB4MDAwNiwgMHhjMGVjLCAweGE4ODIsCi0JMHgwMDQ4LCAweGQwYmMsIDB4MDExOCwgMHhhODdiLCAweDAwMDIsIDB4MDAyMCwgMHhhODdiLCAweDAwMDUsCi0JMHgwODBjLCAweGQxNTIsIDB4YTg3NywgMHgwMDAwLCAweDAwMDUsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsCi0JMHhkMGVjLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMGY0LCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsIDB4ZDBlNCwgMHgwMDBlLCAweDAwMDUsCi0JMHgwMDM2LCAweDAwNDYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmJhMCwgMHgwMGJlLCAweDIwMjEsCi0JMHgwMDA3LCAweDA4MGMsIDB4NGRhMCwgMHgwMDRlLCAweDAwM2UsIDB4MDAwNSwgMHgwYzUxLCAweDFkODEsCi0JMHgwMDA1LCAweDIwMDEsIDB4MTk4NywgMHgyMDA0LCAweDYwMWEsIDB4MDAwNSwgMHgyMDAxLCAweDE5ODksCi0JMHgyMDA0LCAweDYwNDIsIDB4MDAwNSwgMHgwODBjLCAweGIxMDEsIDB4MDgwNCwgMHg5OGVkLCAweDIwMDEsCi0JMHgwMTA5LCAweDIwMDQsIDB4ZDA4NCwgMHgwMWUwLCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgyMDc5LCAweDE5ZTksCi0JMHgyMDcxLCAweDE4MDAsIDB4MjA2MSwgMHgwMTAwLCAweDA4MGMsIDB4OTIxZSwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMGZlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDEyZSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDA2NiwgMHg2MDAwLCAweDkwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDBkYzUsCi0JMHgwMDFiLCAweDAwNmUsIDB4MDBiZSwgMHgwMDA1LCAweGQ1YzQsIDB4ZGQwYiwgMHhkZTgwLCAweGQ1YzQsCi0JMHhkNWM0LCAweGQ1YzQsIDB4ZDVjNCwgMHhkNWM0LCAweGQ1ZmIsIDB4ZGYwNCwgMHhkNWM0LCAweGQ1YzQsCi0JMHhkNWM0LCAweGQ1YzQsIDB4ZDVjNCwgMHhkNWM0LCAweDA4MGMsIDB4MGRjNSwgMHgwMDY2LCAweDYwMDAsCi0JMHg5MGIyLCAweDAwMTAsIDB4MWEwYywgMHgwZGM1LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LCAweGQ1ZGYsCi0JMHhlNDUzLCAweGQ1ZGYsIDB4ZDVkZiwgMHhkNWRmLCAweGQ1ZGYsIDB4ZDVkZiwgMHhkNWRmLCAweGU0MDAsCi0JMHhlNGE3LCAweGQ1ZGYsIDB4ZWIyZiwgMHhlYjY1LCAweGViMmYsIDB4ZWI2NSwgMHhkNWRmLCAweDA4MGMsCi0JMHgwZGM1LCAweDYwMDAsIDB4OTA4MiwgMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHg2MDAwLCAweDAwMGEsCi0JMHgwMDA1LCAweGQ1ZjksIDB4ZTBlMiwgMHhlMWIxLCAweGUxZDQsIDB4ZTI5NCwgMHhkNWY5LCAweGUzNzMsCi0JMHhlMzFjLCAweGRmMTAsIDB4ZTNkNiwgMHhlM2ViLCAweGQ1ZjksIDB4ZDVmOSwgMHhkNWY5LCAweGQ1ZjksCi0JMHhkNWY5LCAweDA4MGMsIDB4MGRjNSwgMHg5MWIyLCAweDAwNTMsIDB4MWEwYywgMHgwZGM1LCAweDIxMDAsCi0JMHg5MWIyLCAweDAwNDAsIDB4MWEwNCwgMHhkYTdiLCAweDAwMDIsIDB4ZDY0NSwgMHhkODQ5LCAweGQ2NDUsCi0JMHhkNjQ1LCAweGQ2NDUsIDB4ZDg1MiwgMHhkNjQ1LCAweGQ2NDUsIDB4ZDY0NSwgMHhkNjQ1LCAweGQ2NDUsCi0JMHhkNjQ1LCAweGQ2NDUsIDB4ZDY0NSwgMHhkNjQ1LCAweGQ2NDUsIDB4ZDY0NSwgMHhkNjQ1LCAweGQ2NDUsCi0JMHhkNjQ1LCAweGQ2NDUsIDB4ZDY0NSwgMHhkNjQ1LCAweGQ2NDcsIDB4ZDZhYSwgMHhkNmI5LCAweGQ3MWQsCi0JMHhkNzQ4LCAweGQ3YzEsIDB4ZDgzNCwgMHhkNjQ1LCAweGQ2NDUsIDB4ZDg1NSwgMHhkNjQ1LCAweGQ2NDUsCi0JMHhkODZhLCAweGQ4NzcsIDB4ZDY0NSwgMHhkNjQ1LCAweGQ2NDUsIDB4ZDY0NSwgMHhkNjQ1LCAweGQ5MWQsCi0JMHhkNjQ1LCAweGQ2NDUsIDB4ZDkzMSwgMHhkNjQ1LCAweGQ2NDUsIDB4ZDhlYywgMHhkNjQ1LCAweGQ2NDUsCi0JMHhkNjQ1LCAweGQ5NDksIDB4ZDY0NSwgMHhkNjQ1LCAweGQ2NDUsIDB4ZDljNiwgMHhkNjQ1LCAweGQ2NDUsCi0JMHhkNjQ1LCAweGQ2NDUsIDB4ZDY0NSwgMHhkNjQ1LCAweGRhNDMsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsCi0JMHg2YTUwLCAweDExNTAsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4ZDBjYywgMHgxMTI4LCAweDkwODQsCi0JMHgwMDA5LCAweDkwODYsIDB4MDAwOCwgMHgxMTQwLCAweDYwMDcsIDB4MDAwOSwgMHg2MDJmLCAweDAwMDksCi0JMHg2MDE3LCAweDAwMDAsIDB4MDgwNCwgMHhkODQyLCAweDA4MGMsIDB4NjllYywgMHgwMGU2LCAweDAwYzYsCi0JMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHg2MjEwLCAweDIyNTgsIDB4YmFhMCwgMHgwMDI2LCAweDIwMTksCi0JMHgwMDI5LCAweDA4MGMsIDB4OTRlMCwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5M2IzLCAweDJjMDgsCi0JMHgwODBjLCAweGU2OTAsIDB4MDA3ZSwgMHgwMDFlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLCAweDAwY2UsCi0JMHgwMGVlLCAweDY2MTAsIDB4MjY1OCwgMHgwODBjLCAweDY3MmMsIDB4YmUwNCwgMHg5Njg0LCAweDAwZmYsCi0JMHg5MDgyLCAweDAwMDYsIDB4MTI2OCwgMHgwMDE2LCAweDAwMjYsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCi0JMHhiYWEwLCAweDAwYmUsIDB4MmMwOCwgMHgwODBjLCAweGVkOTAsIDB4MDAyZSwgMHgwMDFlLCAweDExNzgsCi0JMHgwODBjLCAweGU1YzIsIDB4MTkwNCwgMHhkNzE1LCAweDA4MGMsIDB4ZTU1ZSwgMHgxMTIwLCAweDYwMDcsCi0JMHgwMDA4LCAweDA4MDQsIDB4ZDg0MiwgMHg2MDA3LCAweDAwMDksIDB4MDgwNCwgMHhkODQyLCAweDA4MGMsCi0JMHhlODJkLCAweDAxMjgsIDB4MDgwYywgMHhlNWMyLCAweDBkNzgsIDB4MDgwNCwgMHhkNzE1LCAweDYwMTcsCi0JMHgxOTAwLCAweDBjODgsIDB4MDgwYywgMHgzMzZhLCAweDE5MDQsIDB4ZGE3OCwgMHg2MTA2LCAweDA4MGMsCi0JMHhlNTAyLCAweDYwMDcsIDB4MDAwNiwgMHgwODA0LCAweGQ4NDIsIDB4NjAwNywgMHgwMDA3LCAweDA4MDQsCi0JMHhkODQyLCAweDA4MGMsIDB4ZWJhMSwgMHgxOTA0LCAweGRhNzgsIDB4MDgwYywgMHgzMzZhLCAweDE5MDQsCi0JMHhkYTc4LCAweDAwZDYsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsIDB4OTY4NCwgMHgwMGZmLCAweDkwODIsCi0JMHgwMDA2LCAweDEyMjAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NjY0ZiwgMHg5NmI0LCAweGZmMDAsCi0JMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwMTg4LCAweDk2ODYsIDB4MDAwNCwgMHgwMTcwLCAweGJlMDQsCi0JMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxNDAsIDB4OTY4NiwgMHgwMDA0LCAweDAxMjgsCi0JMHg5Njg2LCAweDAwMDUsIDB4MDExMCwgMHgwMGRlLCAweDA0ODAsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsCi0JMHg3MDM0LCAweDkwODQsIDB4MDAwMywgMHgxMTQwLCAweDcwMzQsIDB4OTA4MiwgMHgwMDE0LCAweDAyMjAsCi0JMHg3MDMwLCAweDkwODQsIDB4MDAwMywgMHgwMTMwLCAweDAwZWUsIDB4NjAxNywgMHgwMDAwLCAweDYwMmYsCi0JMHgwMDA3LCAweDAwYjAsIDB4MDBlZSwgMHgwODBjLCAweGU2MjYsIDB4MTE5MCwgMHg5Njg2LCAweDAwMDYsCi0JMHgxMTQwLCAweDAwMjYsIDB4NjIxMCwgMHgyMjU4LCAweGJhYTAsIDB4OTAwZSwgMHgwODBjLCAweDMyOGYsCi0JMHgwMDJlLCAweDA4MGMsIDB4NjdiOCwgMHg2MDA3LCAweDAwMGEsIDB4MDBkZSwgMHgwODA0LCAweGQ4NDIsCi0JMHg2MDA3LCAweDAwMGIsIDB4MDBkZSwgMHgwODA0LCAweGQ4NDIsIDB4MDgwYywgMHgzMjQ2LCAweDA4MGMsCi0JMHhkNTc2LCAweDYwMDcsIDB4MDAwMSwgMHgwODA0LCAweGQ4NDIsIDB4MDgwYywgMHhlYmExLCAweDE5MDQsCi0JMHhkYTc4LCAweDA4MGMsIDB4MzM2YSwgMHgxOTA0LCAweGRhNzgsIDB4MjA3MSwgMHgwMjYwLCAweDcwMzQsCi0JMHg5MGI0LCAweDAwMDMsIDB4MTk0OCwgMHg5MGIyLCAweDAwMTQsIDB4MGEzMCwgMHg3MDMwLCAweDkwODQsCi0JMHgwMDAzLCAweDE5MTAsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsIDB4OTY4NiwgMHgwNzA3LCAweDA5ZTgsCi0JMHgwMDI2LCAweDYyMTAsIDB4MjI1OCwgMHhiYWEwLCAweDkwMGUsIDB4MDgwYywgMHgzMjhmLCAweDAwMmUsCi0JMHg2MDA3LCAweDAwMGMsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4ZWQ2ZiwgMHgwODA0LCAweGQ4NDIsCi0JMHgwODBjLCAweDZhNTAsIDB4MTE0MCwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDksCi0JMHg5MDg2LCAweDAwMDgsIDB4MTExMCwgMHgwODA0LCAweGQ2NTQsIDB4MDgwYywgMHg2OWVjLCAweDY2MTAsCi0JMHgyNjU4LCAweGJlMDQsIDB4OTY4NCwgMHgwMGZmLCAweDkwODIsIDB4MDAwNiwgMHgwNmM4LCAweDExMzgsCi0JMHgwMDI2LCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY2OGYsIDB4MDAyZSwgMHgwMDUwLCAweDk2YjQsCi0JMHhmZjAwLCAweDg2MzcsIDB4OTY4NiwgMHgwMDA0LCAweDAxMjAsIDB4OTY4NiwgMHgwMDA2LCAweDE5MDQsCi0JMHhkNzE1LCAweDA4MGMsIDB4ZTYzMywgMHgxMTIwLCAweDYwMDcsIDB4MDAwZSwgMHgwODA0LCAweGQ4NDIsCi0JMHgwMDQ2LCAweDY0MTAsIDB4MjQ1OCwgMHhiY2EwLCAweDAwNDYsIDB4MDgwYywgMHgzMjQ2LCAweDA4MGMsCi0JMHhkNTc2LCAweDAwNGUsIDB4MDAxNiwgMHg5MDA2LCAweDIwMDksIDB4MTg0OCwgMHgyMTBjLCAweGQxYTQsCi0JMHgwMTQ4LCAweDIwMDksIDB4MDAyOSwgMHgwODBjLCAweGU5YTUsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsCi0JMHhjMGU1LCAweGI4MDIsIDB4MDAxZSwgMHgwMDRlLCAweDYwMDcsIDB4MDAwMSwgMHgwODA0LCAweGQ4NDIsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHg2NjRmLCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCi0JMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHgxODA1LCAweDIwMTEsIDB4MDI3MCwgMHgwODBjLCAweGMwZTMsCi0JMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMTVlLCAweDkwMDUsIDB4MDE2OCwgMHg5NmI0LCAweGZmMDAsCi0JMHg4NjM3LCAweDk2ODIsIDB4MDAwNCwgMHgwYTA0LCAweGQ3MTUsIDB4OTY4MiwgMHgwMDA3LCAweDBhMDQsCi0JMHhkNzcxLCAweDA4MDQsIDB4ZDcxNSwgMHg2MDE3LCAweDE5MDAsIDB4NjAwNywgMHgwMDA5LCAweDA4MDQsCi0JMHhkODQyLCAweDA4MGMsIDB4NmE1MCwgMHgxMTQwLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweDkwODQsCi0JMHgwMDA5LCAweDkwODYsIDB4MDAwOCwgMHgxMTEwLCAweDA4MDQsIDB4ZDY1NCwgMHgwODBjLCAweDY5ZWMsCi0JMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwgMHg5Njg0LCAweDAwZmYsIDB4MDAwNiwgMHgwMDE2LCAweDkwOGUsCi0JMHgwMDAxLCAweDAxMTgsIDB4OTA4ZSwgMHgwMDAwLCAweDExMTgsIDB4MDAxZSwgMHgwMDBlLCAweDAwODAsCi0JMHgwMDFlLCAweDAwMGUsIDB4OTA4MiwgMHgwMDA2LCAweDA2YTAsIDB4MDE1MCwgMHg5NmI0LCAweGZmMDAsCi0JMHg4NjM3LCAweDk2ODYsIDB4MDAwNCwgMHgwMTIwLCAweDk2ODYsIDB4MDAwNiwgMHgxOTA0LCAweGQ3MTUsCi0JMHgwODBjLCAweGU2NjEsIDB4MTEzOCwgMHgwODBjLCAweGU1NWUsIDB4MTEyMCwgMHg2MDA3LCAweDAwMTAsCi0JMHgwODA0LCAweGQ4NDIsIDB4MDA0NiwgMHg2NDEwLCAweDI0NTgsIDB4YmNhMCwgMHgwMDQ2LCAweDA4MGMsCi0JMHgzMjQ2LCAweDA4MGMsIDB4ZDU3NiwgMHgwMDRlLCAweDAwMTYsIDB4OTAwNiwgMHgyMDA5LCAweDE4NDgsCi0JMHgyMTBjLCAweGQxYTQsIDB4MDE0OCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhlOWE1LCAweDYwMTAsCisJMHgwMDllLCAweDA4MDQsIDB4Y2JiNywgMHgwODBjLCAweGQwZDgsIDB4MTExOCwgMHgwODBjLCAweGQyYzMsCisJMHgwMDY4LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwZTQsIDB4MTExMCwgMHgwODBjLCAweGQyYzMsCisJMHhhODY3LCAweDAxMDMsIDB4MDgwYywgMHhkN2MzLCAweDA4MGMsIDB4NmU5ZiwgMHgwMGQ2LCAweDJjNjgsCisJMHgwODBjLCAweGIyN2QsIDB4MDFkMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDYwMGIsCisJMHhmZmZmLCAweDIwMDksIDB4MDI2ZSwgMHgyMTBjLCAweDYxM2EsIDB4MjAwOSwgMHgwMjZmLCAweDIxMGMsCisJMHg2MTNlLCAweDY5MTAsIDB4NjExMiwgMHgwODBjLCAweGQ1NTQsIDB4Njk1NCwgMHg2MTU2LCAweDYwMjMsCisJMHgwMDAxLCAweDA4MGMsIDB4OTRmZiwgMHgwODBjLCAweDlhYjEsIDB4MmQ2MCwgMHgwMGRlLCAweDA4MGMsCisJMHhiMmQzLCAweDAwOWUsIDB4MDAwNSwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsCisJMHhkMGJjLCAweDA1YTAsIDB4NjAzNCwgMHg5MDhjLCAweGZmMDAsIDB4ODEwZiwgMHg5MTg2LCAweDAwMzUsCisJMHgwMTMwLCAweDkxODYsIDB4MDAxZSwgMHgwMTE4LCAweDkxODYsIDB4MDAzOSwgMHgxNTM4LCAweDAwZDYsCisJMHgyYzY4LCAweDA4MGMsIDB4ZDc1OSwgMHgxMWYwLCAweDA4MGMsIDB4YjI3ZCwgMHgwMWQ4LCAweDYxMDYsCisJMHg2MDAzLCAweDAwMDEsIDB4NjAyMywgMHgwMDAxLCAweDY5MTAsIDB4NjExMiwgMHg2OTJjLCAweDYxMmUsCisJMHg2OTMwLCAweDYxMzIsIDB4NjkzNCwgMHg5MThjLCAweDAwZmYsIDB4NjEzNiwgMHg2OTM4LCAweDYxM2EsCisJMHg2OTNjLCAweDYxM2UsIDB4Njk1NCwgMHg2MTU2LCAweDA4MGMsIDB4ZDU1NCwgMHgwODBjLCAweDk0ZmYsCisJMHgwODBjLCAweDlhYjEsIDB4MmQ2MCwgMHgwMGRlLCAweDA4MDQsIDB4YjJkMywgMHgwMDk2LCAweDYwMTQsCisJMHgyMDQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwMWM4LCAweGE4NjcsIDB4MDEwMywgMHhhODgwLCAweGQwYjQsCisJMHgwMTI4LCAweGMwZWMsIDB4YTg4MiwgMHhhODdiLCAweDAwMDYsIDB4MDA0OCwgMHhkMGJjLCAweDAxMTgsCisJMHhhODdiLCAweDAwMDIsIDB4MDAyMCwgMHhhODdiLCAweDAwMDUsIDB4MDgwYywgMHhkM2Q0LCAweGE4NzcsCisJMHgwMDAwLCAweDA4MGMsIDB4NmU5ZiwgMHgwODBjLCAweGQyYzMsIDB4MDA5ZSwgMHgwODA0LCAweGIyZDMsCisJMHgwMDE2LCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4ZDBkOCwgMHgwMTQwLCAweGE4NjcsCisJMHgwMTAzLCAweGE4N2IsIDB4MDAyOCwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZTlmLCAweDAwOWUsCisJMHgwMDFlLCAweDkxODYsIDB4MDAxMywgMHgwMTQ4LCAweDkxODYsIDB4MDAxNCwgMHgwMTMwLCAweDkxODYsCisJMHgwMDI3LCAweDAxMTgsIDB4MDgwYywgMHhiMzZkLCAweDAwMzAsIDB4MDgwYywgMHg5OWE1LCAweDA4MGMsCisJMHhiMzA2LCAweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDAwNTYsIDB4MDA2NiwgMHgwMDk2LCAweDAwYTYsCisJMHgyMDI5LCAweDAwMDEsIDB4OTE4MiwgMHgwMTAxLCAweDEyMDgsIDB4MDAxMCwgMHgyMDA5LCAweDAxMDAsCisJMHgyMTMwLCAweDgzMDQsIDB4OTA5OCwgMHgwMDE4LCAweDIwMDksIDB4MDAyMCwgMHgyMDExLCAweDAwMjksCisJMHgwODBjLCAweGNjODUsIDB4OTZiMiwgMHgwMDIwLCAweGIwMDQsIDB4OTA0ZCwgMHgwMTEwLCAweDA4MGMsCisJMHgwZmMwLCAweDA4MGMsIDB4MTAwZSwgMHgwNTIwLCAweDg1MjgsIDB4YTg2NywgMHgwMTEwLCAweGE4NmIsCisJMHgwMDAwLCAweDI5MjAsIDB4YjQwNiwgMHg5NjhhLCAweDAwM2QsIDB4MTIyOCwgMHgyNjA4LCAweDIwMTEsCisJMHgwMDFiLCAweDA0OTksIDB4MDBhOCwgMHg5NmIyLCAweDAwM2MsIDB4MjAwOSwgMHgwMDNjLCAweDI5NTAsCisJMHgyMDExLCAweDAwMWIsIDB4MDQ1MSwgMHgwYzI4LCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDAsCisJMHgwMGFlLCAweDg1MmYsIDB4OTVhZCwgMHgwMDAzLCAweGI1NjYsIDB4OTVhYywgMHgwMDAwLCAweDAwNDgsCisJMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAwLCAweDAwYWUsIDB4ODUyZiwgMHg5NWFkLCAweDAwMDMsCisJMHhiNTY2LCAweDAwOWUsIDB4MDA2ZSwgMHgwMDVlLCAweDAwMDUsIDB4MDBhNiwgMHg4OWZmLCAweDAxNTgsCisJMHhhODA0LCAweDkwNTUsIDB4MDEzMCwgMHhhODA3LCAweDAwMDAsIDB4MDgwYywgMHg2ZTlmLCAweDJhNDgsCisJMHgwY2I4LCAweDA4MGMsIDB4NmU5ZiwgMHgwMGFlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsCisJMHg3ODE0LCAweDkwODUsIDB4MDA4MCwgMHg3ODE2LCAweGQxODQsIDB4MDEwOCwgMHg4MTA4LCAweDgxMGMsCisJMHgyMGE5LCAweDAwMDEsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTIwMCwgMHgyMGEwLCAweDIwZTEsCisJMHgwMDAwLCAweDIzMDAsIDB4OWUwMCwgMHgyMDk4LCAweDQwMDMsIDB4ODMxOCwgMHg5Mzg2LCAweDAwMjAsCisJMHgxMTQ4LCAweDIwMTgsIDB4MjMwMCwgMHg5ZTAwLCAweDIwOTgsIDB4NzgxNCwgMHg4MDAwLCAweDkwODUsCisJMHgwMDgwLCAweDc4MTYsIDB4ODEwOSwgMHgxZDgwLCAweDc4MTcsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsCisJMHg2OTIwLCAweDkxODYsIDB4MDAwMywgMHgwMTE4LCAweDkxODYsIDB4MDAwMiwgMHgxMWQwLCAweDAwYzYsCisJMHgwMGQ2LCAweDAwZTYsIDB4MmQ2MCwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGQwZDgsCisJMHgwMTUwLCAweDIwMDEsIDB4MDAwNiwgMHhhOTgwLCAweGMxZDUsIDB4MDgwYywgMHg3MTBiLCAweDA4MGMsCisJMHg2ZTkyLCAweDA4MGMsIDB4ZDJjMywgMHgwMDllLCAweDA4MGMsIDB4YjMwNiwgMHgwMGVlLCAweDAwZGUsCisJMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHg3MDJjLCAweGQwODQsIDB4MTE3MCwgMHg2MDA4LCAweDIwNjAsCisJMHg2MDIwLCAweDkwODYsIDB4MDAwMiwgMHgxMTQwLCAweDYxMDQsIDB4OTE4NiwgMHgwMDg1LCAweDAxMTgsCisJMHg5MTg2LCAweDAwOGIsIDB4MTEwOCwgMHg5MDA2LCAweDAwY2UsIDB4MDAwNSwgMHgwMDY2LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MjAzMSwgMHgwMDAxLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwODMsCisJMHgwMTJlLCAweDAwNmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDY2LCAweDIwMzEsCisJMHgwMDAwLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwMWIsIDB4MDA2ZSwgMHgwMTJlLCAweDAwMDUsCisJMHhjZDFkLCAweGNkMWQsIDB4Y2QxOCwgMHhjZDNmLCAweGNkMGYsIDB4Y2QxOCwgMHhjZDNmLCAweGNkMTgsCisJMHhjZDE4LCAweDkyNjUsIDB4Y2QxOCwgMHhjZDE4LCAweGNkMTgsIDB4Y2QwZiwgMHhjZDBmLCAweDA4MGMsCisJMHgwZGM1LCAweDAwMzYsIDB4MjAxOSwgMHgwMDEwLCAweDA4MGMsIDB4ZTc0NiwgMHgwMDNlLCAweDAwMDUsCisJMHg5MDA2LCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDA5NiwgMHg4NmZmLCAweDExZDgsCisJMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhkMGQ4LCAweDAxYzAsIDB4YTg2NCwgMHg5MDg2LCAweDAxMzksCisJMHgxMTI4LCAweGE4N2IsIDB4MDAwNSwgMHhhODgzLCAweDAwMDAsIDB4MDAyOCwgMHg5MDBlLCAweDIwMDEsCisJMHgwMDA1LCAweDA4MGMsIDB4NzEwYiwgMHgwODBjLCAweGQzZDQsIDB4MDgwYywgMHg2ZTkyLCAweDA4MGMsCisJMHhiMzA2LCAweDkwODUsIDB4MDAwMSwgMHgwMDllLCAweDAwMDUsIDB4OTAwNiwgMHgwY2UwLCAweDYwMDAsCisJMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZGM1LCAweDAwMDIsIDB4Y2Q1NSwgMHhjZDg1LCAweGNkNTcsCisJMHhjZGE2LCAweGNkODAsIDB4Y2Q1NSwgMHhjZDE4LCAweGNkMWQsIDB4Y2QxZCwgMHhjZDE4LCAweGNkMTgsCisJMHhjZDE4LCAweGNkMTgsIDB4Y2QxOCwgMHhjZDE4LCAweGNkMTgsIDB4MDgwYywgMHgwZGM1LCAweDg2ZmYsCisJMHgxNTIwLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LCAweDA1MDAsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsCisJMHgwODBjLCAweGQwZDgsIDB4MDE2OCwgMHhhODdjLCAweGQwY2MsIDB4MDE0MCwgMHgwMDk2LCAweGMwY2MsCisJMHhhODdlLCAweGE4NzgsIDB4MjA0OCwgMHgwODBjLCAweDBmYzAsIDB4MDA5ZSwgMHgwODBjLCAweGQzZDQsCisJMHgwMDllLCAweDA4MGMsIDB4ZDc5ZCwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsCisJMHgwMDAyLCAweDA4MGMsIDB4OTRmZiwgMHgwODBjLCAweDlhYjEsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCisJMHgwMDY2LCAweDA4MGMsIDB4MWE4ZSwgMHgwMDZlLCAweDA4OTAsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZTgsCisJMHg3MDI0LCAweDljMDYsIDB4MTEyMCwgMHgwODBjLCAweGE5ZDMsIDB4MDBlZSwgMHgwODQwLCAweDYwMjAsCisJMHg5MDg0LCAweDAwMGYsIDB4OTA4NiwgMHgwMDA2LCAweDExNTAsIDB4MDA4NiwgMHgwMDk2LCAweDIwNDksCisJMHgwMDAxLCAweDJjNDAsIDB4MDgwYywgMHhhYWZiLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDEwLCAweDA4MGMsCisJMHhhOGQwLCAweDAwZWUsIDB4MTkwNCwgMHhjZDU3LCAweDA4MDQsIDB4Y2QxOCwgMHgwMDM2LCAweDAwZTYsCisJMHgyMDcxLCAweDE5ZTgsIDB4NzAzYywgMHg5YzA2LCAweDExMzgsIDB4OTAxZSwgMHgwODBjLCAweGFhNDksCisJMHgwMGVlLCAweDAwM2UsIDB4MDgwNCwgMHhjZDU3LCAweDA4MGMsIDB4YWMyYiwgMHgwMGVlLCAweDAwM2UsCisJMHgxOTA0LCAweGNkNTcsIDB4MDgwNCwgMHhjZDE4LCAweDAwYzYsIDB4NjAyMCwgMHg5MDg0LCAweDAwMGYsCisJMHgwMDEzLCAweDAwY2UsIDB4MDAwNSwgMHhjZGQ5LCAweGNlYTMsIDB4ZDAxMSwgMHhjZGUzLCAweGIzMDYsCisJMHhjZGQ5LCAweGU3M2MsIDB4ZDgwNSwgMHhjZWEzLCAweDkyMzcsIDB4ZDA5ZCwgMHhjZGQyLCAweGNkZDIsCisJMHhjZGQyLCAweGNkZDIsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4ZDJlMCwgMHgxMTEwLCAweDA4MGMsCisJMHhiY2I2LCAweDAwMDUsIDB4MDgwYywgMHg5OWE1LCAweDA4MGMsIDB4OWFiMSwgMHgwODA0LCAweGIyZDMsCisJMHg2MDFiLCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLCAweGQwZDgsIDB4MDEzMCwgMHg2MDE0LCAweDAwOTYsCisJMHgyMDQ4LCAweDJjMDAsIDB4YTg5NiwgMHgwMDllLCAweDYwMDAsIDB4OTA4YSwgMHgwMDEwLCAweDFhMGMsCisJMHgwZGM1LCAweDAwMDIsIDB4Y2UwMiwgMHhjZTA0LCAweGNlMjgsIDB4Y2UzYywgMHhjZTYyLCAweGNlMDIsCisJMHhjZGQ5LCAweGNkZDksIDB4Y2RkOSwgMHhjZTNjLCAweGNlM2MsIDB4Y2UwMiwgMHhjZTAyLCAweGNlMDIsCisJMHhjZTAyLCAweGNlNDYsIDB4MDgwYywgMHgwZGM1LCAweDAwZTYsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsCisJMHhhODgwLCAweGMwYjUsIDB4YTg4MiwgMHgwMDllLCAweDIwNzEsIDB4MTllOCwgMHg3MDI0LCAweDljMDYsCisJMHgwMWEwLCAweDA4MGMsIDB4YThkMCwgMHgwODBjLCAweGQ3OWQsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsCisJMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHgyMDAxLCAweDE5ODcsIDB4MjAwNCwgMHg2MDFhLCAweDA4MGMsCisJMHg5NGZmLCAweDA4MGMsIDB4OWFiMSwgMHgwMGVlLCAweDAwMDUsIDB4NjAxYiwgMHgwMDAxLCAweDBjZDgsCisJMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHhhODgwLCAweGMwYjUsIDB4YTg4MiwgMHgwMDllLCAweDA4MGMsCisJMHhkNzlkLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDAyLCAweDA4MGMsCisJMHg5NGZmLCAweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDAwOTYsIDB4NjAxYiwgMHgwMDAxLCAweDYwMTQsCisJMHgyMDQ4LCAweGE4ODAsIDB4YzBiNSwgMHhhODgyLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweDU3ZGQsCisJMHgwMWI4LCAweDYwMTQsIDB4MDA5NiwgMHg5MDRkLCAweDAxOTAsIDB4YTg2NCwgMHhhODY3LCAweDAxMDMsCisJMHhhODdiLCAweDAwMDYsIDB4OTA4NiwgMHgwMTM5LCAweDExNTAsIDB4YTg2NywgMHgwMTM5LCAweGE4N2IsCisJMHgwMDMwLCAweGE4OTcsIDB4NDAwNSwgMHhhODliLCAweDAwMDQsIDB4MDgwYywgMHg2ZTlmLCAweDAwOWUsCisJMHgwODA0LCAweGIyZDMsIDB4NjAxNCwgMHgwMDk2LCAweDkwNGQsIDB4MDVjMCwgMHhhOTdjLCAweGQxZTQsCisJMHgwNWE4LCAweDIwMDEsIDB4MTgwZiwgMHgyMDA0LCAweGQwYzQsIDB4MDExMCwgMHgwMDllLCAweDAwMDUsCisJMHhhODg0LCAweDAwOWUsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHg2MTFhLCAweDIwMDEsCisJMHgwMDMwLCAweDJjMDgsIDB4MDgwYywgMHgxNjExLCAweDIwMDEsIDB4MDMwYywgMHgyMDA0LCAweDkwODYsCisJMHgwMDQxLCAweDExOTgsIDB4NjAxNCwgMHgwMDk2LCAweDkwNGQsIDB4MDkwYywgMHgwZGM1LCAweGE4ODAsCisJMHhkMGY0LCAweDExMzAsIDB4YzBmNSwgMHhhODgyLCAweDAwOWUsIDB4NjAxYiwgMHgwMDAyLCAweDAwNjgsCisJMHgwMDllLCAweDAwYzYsIDB4MDgwYywgMHgyMzZlLCAweDAwY2UsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsCisJMHgxMTIwLCAweDIwMDksIDB4MDA0OCwgMHgwODBjLCAweGIzNTIsIDB4MDAwNSwgMHgwMDllLCAweDA4MGMsCisJMHgxYThlLCAweDA4MDQsIDB4Y2UyOCwgMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDBkYzUsCisJMHgwMDBiLCAweDAwMDUsIDB4Y2ViYSwgMHhjZGUwLCAweGNlYmMsIDB4Y2ViYSwgMHhjZWJjLCAweGNlYmMsCisJMHhjZGRhLCAweGNlYmEsIDB4Y2RkNCwgMHhjZGQ0LCAweGNlYmEsIDB4Y2ViYSwgMHhjZWJhLCAweGNlYmEsCisJMHhjZWJhLCAweGNlYmEsIDB4MDgwYywgMHgwZGM1LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDQsCisJMHg5MDg0LCAweDAwZmYsIDB4MDBiZSwgMHg5MDhhLCAweDAwMGMsIDB4MWEwYywgMHgwZGM1LCAweDAwYjYsCisJMHgwMDEzLCAweDAwYmUsIDB4MDAwNSwgMHhjZWQ3LCAweGNmYTgsIDB4Y2VkOSwgMHhjZjE5LCAweGNlZDksCisJMHhjZjE5LCAweGNlZDksIDB4Y2VlNywgMHhjZWQ3LCAweGNmMTksIDB4Y2VkNywgMHhjZjA4LCAweDA4MGMsCisJMHgwZGM1LCAweDYwMDQsIDB4OTA4ZSwgMHgwMDE2LCAweDA1YzAsIDB4OTA4ZSwgMHgwMDA0LCAweDA1YTgsCisJMHg5MDhlLCAweDAwMDIsIDB4MDU5MCwgMHg5MDhlLCAweDAwNTIsIDB4MDkwNCwgMHhjZmE0LCAweDYwMDQsCisJMHgwODBjLCAweGQyZTAsIDB4MDkwNCwgMHhjZmMxLCAweDkwOGUsIDB4MDAwNCwgMHgxMTEwLCAweDA4MGMsCisJMHgzMjc5LCAweDkwOGUsIDB4MDAyMSwgMHgwOTA0LCAweGNmYzUsIDB4OTA4ZSwgMHgwMDIyLCAweDA5MDQsCisJMHhkMDBjLCAweDkwOGUsIDB4MDAzZCwgMHgwOTA0LCAweGNmYzUsIDB4OTA4ZSwgMHgwMDM5LCAweDA5MDQsCisJMHhjZmM5LCAweDkwOGUsIDB4MDAzNSwgMHgwOTA0LCAweGNmYzksIDB4OTA4ZSwgMHgwMDFlLCAweDAxNzgsCisJMHg5MDhlLCAweDAwMDEsIDB4MTE0MCwgMHg2MDEwLCAweDIwNTgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MDg2LCAweDAwMDYsIDB4MDExMCwgMHgwODBjLCAweDMyNTAsIDB4MDgwYywgMHhiY2I2LCAweDA4MDQsCisJMHhiMzA2LCAweDAwYzYsIDB4MDBkNiwgMHg2MTA0LCAweDkxODYsIDB4MDAxNiwgMHgwOTA0LCAweGNmOTUsCisJMHg5MTg2LCAweDAwMDIsIDB4MTkwNCwgMHhjZjZhLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwOGMsCisJMHgxMWM4LCAweDA4MGMsIDB4NzYzNywgMHgxMWIwLCAweDA4MGMsIDB4ZDdlMywgMHgwMTM4LCAweDA4MGMsCisJMHg3NjVhLCAweDExMjAsIDB4MDgwYywgMHg3NTQxLCAweDA4MDQsIDB4Y2ZmNSwgMHgyMDAxLCAweDE5N2QsCisJMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHgxODAwLCAweDIwMDMsIDB4MDAwMSwgMHgwODBjLCAweDc1NjMsCisJMHgwODA0LCAweGNmZjUsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsIDB4OTA4NiwgMHgwMDgwLCAweDAxMzAsCisJMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGFjLCAweDE5MDQsIDB4Y2ZmNSwgMHhiOGEwLCAweDkwODIsCisJMHgwMDgxLCAweDFhMDQsIDB4Y2ZmNSwgMHhiODQwLCAweDkwODQsIDB4MDBmZiwgMHg5MDA1LCAweDAxOTAsCisJMHg4MDAxLCAweGI4NDIsIDB4NjAxNywgMHgwMDAwLCAweDYwMjMsIDB4MDAwNywgMHg2MDFiLCAweDAzOTgsCisJMHg2MDQzLCAweDAwMDAsIDB4MDgwYywgMHhiMjdkLCAweDAxMjgsIDB4MmIwMCwgMHg2MDEyLCAweDYwMjMsCisJMHgwMDAxLCAweDA0NTgsIDB4MDBkZSwgMHgwMGNlLCAweDYwMDQsIDB4OTA4ZSwgMHgwMDAyLCAweDExYTAsCisJMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwgMHg5MDg2LCAweDAwN2UsIDB4MTE3MCwgMHgyMDA5LCAweDE4MzcsCisJMHgyMTA0LCAweGMwODUsIDB4MjAwYSwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweDYwYzEsCisJMHgwMGVlLCAweDA4MGMsIDB4YmNiNiwgMHgwMDMwLCAweDA4MGMsIDB4YmNiNiwgMHgwODBjLCAweDMyNTAsCisJMHgwODBjLCAweGQ3ZjgsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDMyNzksCisJMHgwMTJlLCAweDAwZWUsIDB4MDgwYywgMHhiMzA2LCAweDAwMDUsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCisJMHg2NjZhLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MDgwYywgMHg5NTQ3LCAweDA4MGMsCisJMHg5YWIxLCAweDAwZGUsIDB4MDBjZSwgMHgwYzgwLCAweDA4MGMsIDB4MzI3OSwgMHgwODA0LCAweGNmMTUsCisJMHgwMGM2LCAweDAwZDYsIDB4NjEwNCwgMHg5MTg2LCAweDAwMTYsIDB4MGQzOCwgMHg2MDEwLCAweDIwNTgsCisJMHhiODQwLCAweDkwODQsIDB4MDBmZiwgMHg5MDA1LCAweDA5MDQsIDB4Y2Y2YSwgMHg4MDAxLCAweGI4NDIsCisJMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NTQ3LCAweDA4MGMsIDB4OWFiMSwgMHgwMGRlLCAweDAwY2UsCisJMHgwODk4LCAweDA4MGMsIDB4YmNiNiwgMHgwODA0LCAweGNmMTcsIDB4MDgwYywgMHhiY2YyLCAweDA4MDQsCisJMHhjZjE3LCAweDAwZDYsIDB4MmM2OCwgMHg2MTA0LCAweDA4MGMsIDB4ZDc1OSwgMHgwMGRlLCAweDAxMTgsCisJMHgwODBjLCAweGIyZDMsIDB4MDQwOCwgMHg2MDA0LCAweDgwMDcsIDB4NjEzNCwgMHg5MThjLCAweDAwZmYsCisJMHg5MTA1LCAweDYwMzYsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDIzLCAweDAwMDIsCisJMHg2MDNjLCAweDYwMGEsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsIDB4NjAxYSwgMHg2MDJjLCAweDJjMDgsCisJMHgyMDYwLCAweDYwMjQsIDB4ZDBiNCwgMHgwMTA4LCAweGMwODUsIDB4YzBiNSwgMHg2MDI2LCAweDIxNjAsCisJMHgwODBjLCAweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4MDBkZSwgMHgwMGNlLCAweDA4MGMsCisJMHhiY2I2LCAweDA4MGMsIDB4MzI1MCwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCisJMHgzMjc5LCAweDYwMTcsIDB4MDAwMCwgMHg2MDIzLCAweDAwMDcsIDB4NjAxYiwgMHgwMzk4LCAweDYwNDMsCisJMHgwMDAwLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDA4MGMsIDB4YjcwOCwgMHgxOTA0LCAweGNmYzEsCisJMHgwMDA1LCAweDYwMDAsIDB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHgwMDk2LCAweDAwZDYsCisJMHgwMDFiLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDA1LCAweGQwMmMsIDB4ZDAyYywgMHhkMDJjLCAweGQwMmMsCisJMHhkMDJjLCAweGQwMmMsIDB4ZDAyYywgMHhkMDJjLCAweGQwMmMsIDB4Y2RkOSwgMHhkMDJjLCAweGNkZTAsCisJMHhkMDJlLCAweGNkZTAsIDB4ZDA0OCwgMHhkMDJjLCAweDA4MGMsIDB4MGRjNSwgMHg2MDA0LCAweDkwODYsCisJMHgwMDhiLCAweDAxYjAsIDB4NjAzNCwgMHg5MDhjLCAweGZmMDAsIDB4ODEwZiwgMHg5MTg2LCAweDAwMzUsCisJMHgxMTMwLCAweDYwMmMsIDB4OTA4MCwgMHgwMDA5LCAweDIwMGMsIDB4YzE4NSwgMHgyMTAyLCAweDYwMDcsCisJMHgwMDhiLCAweDYwMDMsIDB4MDAwZCwgMHgwODBjLCAweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsCisJMHgwODBjLCAweGQ3ZDcsIDB4MDExOCwgMHgwODBjLCAweGQ3ZWEsIDB4MDAxMCwgMHgwODBjLCAweGQ3ZjgsCisJMHgwODBjLCAweGQyYzMsIDB4MDgwYywgMHhkMGQ4LCAweDA1NzAsIDB4MDgwYywgMHgzMjUwLCAweDA4MGMsCisJMHhkMGQ4LCAweDAxNjgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NjcsIDB4MDEwMywgMHhhODdiLCAweDAwMDYsCisJMHhhODc3LCAweDAwMDAsIDB4YTg4MCwgMHhjMGVkLCAweGE4ODIsIDB4MDgwYywgMHg2ZTlmLCAweDJjNjgsCisJMHgwODBjLCAweGIyN2QsIDB4MDE1MCwgMHg2ODEwLCAweDYwMTIsIDB4MDgwYywgMHhkNTU0LCAweDAwYzYsCisJMHgyZDYwLCAweDA4MGMsIDB4YjMwNiwgMHgwMGNlLCAweDAwMDgsIDB4MmQ2MCwgMHg2MDE3LCAweDAwMDAsCisJMHg2MDIzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk1NDcsCisJMHgwODBjLCAweDlhYjEsIDB4MDBjOCwgMHgwODBjLCAweGQ3ZDcsIDB4MDEzOCwgMHg2MDM0LCAweDkwODYsCisJMHg0MDAwLCAweDExMTgsIDB4MDgwYywgMHgzMjUwLCAweDA4ZDAsIDB4NjAzNCwgMHg5MDhjLCAweGZmMDAsCisJMHg4MTBmLCAweDkxODYsIDB4MDAzOSwgMHgwMTE4LCAweDkxODYsIDB4MDAzNSwgMHgxMTE4LCAweDA4MGMsCisJMHgzMjUwLCAweDA4NjgsIDB4MDgwYywgMHhiMzA2LCAweDAwMDUsIDB4NjAwMCwgMHg5MDhhLCAweDAwMTAsCisJMHgxYTBjLCAweDBkYzUsIDB4MDAwMiwgMHhkMGIzLCAweGQwYjMsIDB4ZDBiNywgMHhkMGI1LCAweGQwYzEsCisJMHhkMGIzLCAweGQwYjMsIDB4YjMwNiwgMHhkMGIzLCAweGQwYjMsIDB4ZDBiMywgMHhkMGIzLCAweGQwYjMsCisJMHhkMGIzLCAweGQwYjMsIDB4ZDBiMywgMHgwODBjLCAweDBkYzUsIDB4MDgwYywgMHhhYzJiLCAweDYxMTQsCisJMHgwMDk2LCAweDIxNDgsIDB4YTg3YiwgMHgwMDA2LCAweDA4MGMsIDB4NmU5ZiwgMHgwMDllLCAweDA4MDQsCisJMHhiMmQzLCAweDYwMWMsIDB4ZDA4NCwgMHgxOTBjLCAweDFhOGUsIDB4MGM4OCwgMHg5Mjg0LCAweDAwMDcsCisJMHgxMTU4LCAweDkyODIsIDB4MWNkMCwgMHgwMjQwLCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDkyMDIsCisJMHgxMjE4LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDkwMDYsIDB4MGNlOCwgMHgwMDk2LCAweDAwMjgsCisJMHgwMDk2LCAweDAwMDYsIDB4NjAxNCwgMHgyMDQ4LCAweDAwMGUsIDB4MDAwNiwgMHg5OTg0LCAweGYwMDAsCisJMHg5MDg2LCAweGYwMDAsIDB4MDExMCwgMHgwODBjLCAweDEwYjksIDB4MDAwZSwgMHgwMDllLCAweDAwMDUsCisJMHgwMGU2LCAweDAwYzYsIDB4MDAzNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjEsCisJMHgxY2QwLCAweDIwNzEsIDB4MTgwMCwgMHg3MzU0LCAweDcwNzQsIDB4OTMwMiwgMHgxNjQwLCAweDYwMjAsCisJMHg5MjA2LCAweDExZjgsIDB4MDgwYywgMHhkN2UzLCAweDAxODAsIDB4OTI4NiwgMHgwMDAxLCAweDExNjgsCisJMHg2MDA0LCAweDkwODYsIDB4MDAwNCwgMHgxMTQ4LCAweDA4MGMsIDB4MzI1MCwgMHgwODBjLCAweGQ3ZjgsCisJMHgwMGM2LCAweDA4MGMsIDB4YjMwNiwgMHgwMGNlLCAweDAwNjAsIDB4MDgwYywgMHhkNGNlLCAweDAxNDgsCisJMHgwODBjLCAweGQyZTAsIDB4MTExMCwgMHgwODBjLCAweGJjYjYsIDB4MDBjNiwgMHgwODBjLCAweGIyZDMsCisJMHgwMGNlLCAweDljZTAsIDB4MDAxOCwgMHg3MDY4LCAweDljMDIsIDB4MTIwOCwgMHgwOGEwLCAweDAxMmUsCisJMHgwMDBlLCAweDAwM2UsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwMTYsCisJMHg5MTg4LCAweDEwMDAsIDB4MjEwYywgMHg4MWZmLCAweDAxMjgsIDB4MjA2MSwgMHgxYWI3LCAweDYxMTIsCisJMHgwODBjLCAweDMyNTAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLCAweDAwY2UsCisJMHgwMGVlLCAweDAwMDUsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIyN2QsCisJMHgwMWIwLCAweDY2NTYsIDB4MmIwMCwgMHg2MDEyLCAweDA4MGMsIDB4NTdkZCwgMHgwMTE4LCAweDA4MGMsCisJMHhkMjA3LCAweDAxNjgsIDB4MDgwYywgMHhkNTU0LCAweDYwMjMsIDB4MDAwMywgMHgyMDA5LCAweDAwNGIsCisJMHgwODBjLCAweGIzNTIsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDkwMDYsCisJMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YmFhMCwgMHgwODBjLCAweGIzMjUsCisJMHgwNTYwLCAweDYwNTcsIDB4MDAwMCwgMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhkNTU0LCAweDYwMjMsCisJMHgwMDAzLCAweDAwMTYsIDB4MDgwYywgMHg5NmE0LCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweDk1NzcsCisJMHgyYzA4LCAweDA4MGMsIDB4ZTkxYywgMHgwMDdlLCAweDAwMWUsIDB4ZDE4NCwgMHgwMTI4LCAweDA4MGMsCisJMHhiMmQzLCAweDkwODUsIDB4MDAwMSwgMHgwMDcwLCAweDA4MGMsIDB4NTdkZCwgMHgwMTI4LCAweGQxOGMsCisJMHgxMTcwLCAweDA4MGMsIDB4ZDIwNywgMHgwMTQ4LCAweDIwMDksIDB4MDA0YywgMHgwODBjLCAweGIzNTIsCisJMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDI5MDAsCisJMHg2MDE2LCAweDBjOTAsIDB4MjAwOSwgMHgwMDRkLCAweDAwMTAsIDB4MjAwOSwgMHgwMDRlLCAweDAwZjYsCisJMHgwMGM2LCAweDAwNDYsIDB4MDAxNiwgMHgwODBjLCAweGIyN2QsIDB4MmM3OCwgMHgwNWEwLCAweDdlNTYsCisJMHgyYjAwLCAweDc4MTIsIDB4NzgyMywgMHgwMDAzLCAweDAwMTYsIDB4MjAyMSwgMHgwMDA1LCAweDA4MGMsCisJMHhkMjE5LCAweDAwMWUsIDB4OTE4NiwgMHgwMDRkLCAweDAxMTgsIDB4OTE4NiwgMHgwMDRlLCAweDAxNDgsCisJMHgyMDAxLCAweDE5ODAsIDB4MjAwYywgMHhkMWZjLCAweDAxNjgsIDB4MmY2MCwgMHgwODBjLCAweGIyZDMsCisJMHgwMGQwLCAweDIwMDEsIDB4MTk3ZiwgMHgyMDBjLCAweGQxZmMsIDB4MDEyMCwgMHgyZjYwLCAweDA4MGMsCisJMHhiMmQzLCAweDAwODgsIDB4MmY2MCwgMHgwODBjLCAweDU3ZGQsIDB4MDEzOCwgMHhkMThjLCAweDExMTgsCisJMHgwNGYxLCAweDAxNDgsIDB4MDAxMCwgMHgyOTAwLCAweDc4MTYsIDB4MDAxZSwgMHgwMDE2LCAweDA4MGMsCisJMHhiMzUyLCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLCAweDAwNGUsIDB4MDBjZSwgMHgwMGZlLCAweDAwMDUsCisJMHgwMGY2LCAweDAwYzYsIDB4MDA0NiwgMHgwODBjLCAweGIyN2QsIDB4MmM3OCwgMHgwNTA4LCAweDdlNTYsCisJMHgyYjAwLCAweDc4MTIsIDB4NzgyMywgMHgwMDAzLCAweDAwOTYsIDB4MjAyMSwgMHgwMDA0LCAweDA0ODksCisJMHgwMDllLCAweDIwMDEsIDB4MTk3ZSwgMHgyMDBjLCAweGQxZmMsIDB4MDEyMCwgMHgyZjYwLCAweDA4MGMsCisJMHhiMmQzLCAweDAwNjAsIDB4MmY2MCwgMHgwODBjLCAweDU3ZGQsIDB4MDEyMCwgMHhkMThjLCAweDExNjAsCisJMHgwMDcxLCAweDAxMzAsIDB4MjAwOSwgMHgwMDUyLCAweDA4MGMsIDB4YjM1MiwgMHg5MDg1LCAweDAwMDEsCisJMHgwMDRlLCAweDAwY2UsIDB4MDBmZSwgMHgwMDA1LCAweDI5MDAsIDB4NzgxNiwgMHgwYzk4LCAweDAwYzYsCisJMHgwODBjLCAweDRiZTQsIDB4MDBjZSwgMHgxMTIwLCAweDA4MGMsIDB4YjJkMywgMHg5MDA2LCAweDAwMDUsCisJMHhhODY3LCAweDAwMDAsIDB4YTg2YiwgMHg4MDAwLCAweDI5MDAsIDB4NjAxNiwgMHg5MDg1LCAweDAwMDEsCisJMHgwMDA1LCAweDAwOTYsIDB4MDA3NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDY4NTgsCisJMHgwMTU4LCAweDIwMDEsIDB4ZDIxZSwgMHgwMDA2LCAweDkwMGUsIDB4MjQwMCwgMHgwODBjLCAweDcxMGIsCisJMHgwODBjLCAweDZlOWYsIDB4MDAwZSwgMHgwODA3LCAweDI0MTgsIDB4MDgwYywgMHg5OTNmLCAweGJhYTAsCisJMHgwMDg2LCAweDIwNDEsIDB4MDAwMSwgMHgyMDM5LCAweDAwMDEsIDB4MjYwOCwgMHgwODBjLCAweDk2YmMsCisJMHgwMDhlLCAweDA4MGMsIDB4OTU3NywgMHgyZjA4LCAweDI2NDgsIDB4MDgwYywgMHhlOTFjLCAweGI5M2MsCisJMHg4MWZmLCAweDA5MGMsIDB4OTc4ZiwgMHgwODBjLCAweDlhYjEsIDB4MDEyZSwgMHgwMDdlLCAweDAwOWUsCisJMHgwMDA1LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhiMjdkLCAweDAxOTAsCisJMHg2NjBhLCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGQ1NTQsIDB4NjAyMywgMHgwMDAxLCAweDI5MDAsCisJMHg2MDE2LCAweDIwMDksIDB4MDAxZiwgMHgwODBjLCAweGIzNTIsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCisJMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwODBjLCAweGIzMjUsIDB4MDFiOCwgMHg2NjBhLCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGQ1NTQsCisJMHg2MDIzLCAweDAwMDgsIDB4MjkwMCwgMHg2MDE2LCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweDE3NjgsCisJMHgwMGZlLCAweDIwMDksIDB4MDAyMSwgMHgwODBjLCAweGIzNTIsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCisJMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDIwMDksIDB4MDAzZCwgMHgwMGM2LCAweDAxMjYsCisJMHgwMDE2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIyN2QsIDB4MDE5OCwgMHg2NjBhLCAweDJiMDgsCisJMHg2MTEyLCAweDA4MGMsIDB4ZDU1NCwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDAwMWUsCisJMHgwMDE2LCAweDA4MGMsIDB4YjM1MiwgMHg5MDg1LCAweDAwMDEsIDB4MDAxZSwgMHgwMTJlLCAweDAwY2UsCisJMHgwMDA1LCAweDkwMDYsIDB4MGNkMCwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCisJMHhiMzI1LCAweDAxODgsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDU1NCwgMHg2MDIzLCAweDAwMDEsCisJMHgyOTAwLCAweDYwMTYsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4YjM1MiwgMHg5MDg1LCAweDAwMDEsCisJMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MjAwOSwgMHgwMDQ0LCAweDA4MzAsCisJMHgyMDA5LCAweDAwNDksIDB4MDgxOCwgMHgwMDI2LCAweDAwYjYsIDB4NjIxMCwgMHgyMjU4LCAweGJhM2MsCisJMHg4MmZmLCAweDAxMTAsIDB4ODIxMSwgMHhiYTNlLCAweDAwYmUsIDB4MDAyZSwgMHgwMDA1LCAweDAwMDYsCisJMHgwMDE2LCAweDYwMDQsIDB4OTA4ZSwgMHgwMDAyLCAweDAxNDAsIDB4OTA4ZSwgMHgwMDAzLCAweDAxMjgsCisJMHg5MDhlLCAweDAwMDQsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsCisJMHgwMDA2LCAweDAwODYsIDB4MDA5NiwgMHg2MDIwLCAweDkwODYsIDB4MDAwNCwgMHgwMWE4LCAweDYwMTQsCisJMHg5MDRkLCAweDA4MGMsIDB4ZDBkOCwgMHgwMTgwLCAweGE4NjQsIDB4OTA4NiwgMHgwMTM5LCAweDAxNzAsCisJMHg2MDIwLCAweDkwYzYsIDB4MDAwMywgMHgwMTQwLCAweDkwYzYsIDB4MDAwMiwgMHgwMTI4LCAweGE4NjgsCisJMHhkMGZjLCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDllLCAweDAwOGUsCisJMHgwMDBlLCAweDAwMDUsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIzMjUsCisJMHgwMTk4LCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGQ1NTQsIDB4NjAyMywgMHgwMDAxLCAweDI5MDAsCisJMHg2MDE2LCAweDA4MGMsIDB4MzI1MCwgMHgyMDA5LCAweDAwMjgsIDB4MDgwYywgMHhiMzUyLCAweDkwODUsCisJMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHg5MTg2LCAweDAwMTUsCisJMHgxMWE4LCAweDIwMTEsIDB4MTgyNCwgMHgyMjA0LCAweDkwODYsIDB4MDA3NCwgMHgxMTc4LCAweDAwYjYsCisJMHgwODBjLCAweGJmNjMsIDB4MDBiZSwgMHgwODBjLCAweGMxZGYsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCisJMHgwMDI5LCAweDA4MGMsIDB4OTU0NywgMHgwODBjLCAweDlhYjEsIDB4MDA3OCwgMHg2MDE0LCAweDAwOTYsCisJMHgyMDQ4LCAweGE4NjgsIDB4MDA5ZSwgMHhkMGZjLCAweDAxNDgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCisJMHhkNzFhLCAweDA4MGMsIDB4YmNiNiwgMHgwODBjLCAweGIyZDMsIDB4MDAwNSwgMHgwMDk2LCAweDYwMTQsCisJMHg5MDRkLCAweDA5MGMsIDB4MGRjNSwgMHhhODdiLCAweDAwMzAsIDB4YTg4MywgMHgwMDAwLCAweGE4OTcsCisJMHg0MDA1LCAweGE4OWIsIDB4MDAwNCwgMHhhODY3LCAweDAxMzksIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwODBjLCAweDZlOWYsIDB4MDEyZSwgMHgwMDllLCAweDA4MGMsIDB4YjJkMywgMHgwYzMwLCAweDAwOTYsCisJMHg5MTg2LCAweDAwMTYsIDB4MTEyOCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg2NjZhLCAweDAwZTgsCisJMHg5MTg2LCAweDAwMTUsIDB4MTUxMCwgMHgyMDExLCAweDE4MjQsIDB4MjIwNCwgMHg5MDg2LCAweDAwMTQsCisJMHgxMWUwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweDA4MGMsIDB4NjdiZiwgMHgwMGJlLCAweDA4MGMsCisJMHhjMmI1LCAweDExOTgsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4Yjg5MCwgMHgwMGJlLCAweDkwMDUsCisJMHgwMTYwLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY2NmEsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NjgsCisJMHhkMGZjLCAweDAxNzAsIDB4MDgwYywgMHhiNmRjLCAweDAwNDgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NjgsCisJMHhkMGZjLCAweDA1MjgsIDB4MDgwYywgMHhiY2I2LCAweDA4MGMsIDB4YjJkMywgMHgwMDllLCAweDAwMDUsCisJMHg2MDE0LCAweDYzMTAsIDB4MjM1OCwgMHg5MDRkLCAweDA5MGMsIDB4MGRjNSwgMHhhODdiLCAweDAwMDAsCisJMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDAwLCAweDkwMGUsIDB4MDgwYywgMHg2OTQ0LCAweDExMDgsCisJMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4YTk5YSwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDA4MGMsIDB4NmU5ZiwgMHgwMTJlLCAweDA4MGMsIDB4YjJkMywgMHgwOGY4LCAweDYwMTQsCisJMHg5MDRkLCAweDA5MGMsIDB4MGRjNSwgMHhhODdiLCAweDAwMzAsIDB4YTg4MywgMHgwMDAwLCAweGE4OTcsCisJMHg0MDA1LCAweGE4OWIsIDB4MDAwNCwgMHhhODY3LCAweDAxMzksIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCisJMHgwODBjLCAweDZlOWYsIDB4MDEyZSwgMHgwODBjLCAweGIyZDMsIDB4MDg0MCwgMHhhODc4LCAweDkwODYsCisJMHgwMDA1LCAweDExMDgsIDB4MDAwOSwgMHgwMDA1LCAweGE4ODAsIDB4YzBhZCwgMHhhODgyLCAweDAwMDUsCisJMHg2MDQzLCAweDAwMDAsIDB4NjAxNywgMHgwMDAwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwNTAsCisJMHgwODBjLCAweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4MDBjNiwgMHg2MDEwLCAweDAwYjYsCisJMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDAxMjAsIDB4NjAyMCwgMHg5MDg0LCAweDAwMGYsCisJMHgwMDEzLCAweDAwY2UsIDB4MDAwNSwgMHhjZGQ5LCAweGQ0MDQsIDB4ZDQwNCwgMHhkNDA3LCAweGVjODAsCisJMHhlYzliLCAweGVjOWUsIDB4Y2RkOSwgMHhjZGQ5LCAweGNkZDksIDB4Y2RkOSwgMHhjZGQ5LCAweGNkZDksCisJMHhjZGQ5LCAweGNkZDksIDB4MDgwYywgMHgwZGM1LCAweGEwMDEsIDB4YTAwMSwgMHgwMDA1LCAweDAwOTYsCisJMHg2MDE0LCAweDkwNGQsIDB4MDExOCwgMHhhODdjLCAweGQwZTQsIDB4MTExMCwgMHgwMDllLCAweDAwMTAsCisJMHgwMDllLCAweDAwMDUsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsCisJMHgwNTUwLCAweDIwMDEsIDB4MTgzNCwgMHgyMDA0LCAweDkwMDUsIDB4MTU0MCwgMHgwMGY2LCAweDJjNzgsCisJMHgwODBjLCAweGIyN2QsIDB4MDUwOCwgMHg3ODEwLCAweDYwMTIsIDB4MDgwYywgMHhkNTU0LCAweDc4MjAsCisJMHg5MDg2LCAweDAwMDMsIDB4MDEyOCwgMHg3ODA4LCAweDYwM2EsIDB4MmYwMCwgMHg2MDNlLCAweDAwMjAsCisJMHg3ODA4LCAweDYwM2UsIDB4MmYwMCwgMHg2MDNhLCAweDYwMmUsIDB4NjAyMywgMHgwMDAxLCAweDYwMDcsCisJMHgwMDM1LCAweDYwMDMsIDB4MDAwMSwgMHg3OTU0LCAweDYxNTYsIDB4MDgwYywgMHg5NGZmLCAweDA4MGMsCisJMHg5YWIxLCAweDJmNjAsIDB4MDBmZSwgMHgwMDA1LCAweDJmNjAsIDB4MDBmZSwgMHgyMDAxLCAweDE5ODgsCisJMHgyMDA0LCAweDYwNDIsIDB4MDAwNSwgMHgwMDE2LCAweDAwOTYsIDB4NjgxNCwgMHgyMDQ4LCAweGE4N2MsCisJMHhkMGU0LCAweDAxODAsIDB4YzBlNCwgMHhhODdlLCAweGE4NzcsIDB4MDAwMCwgMHhhODkzLCAweDAwMDAsCisJMHhhODhmLCAweDAwMDAsIDB4ZDBjYywgMHgwMTMwLCAweGMwY2MsIDB4YTg3ZSwgMHhhODc4LCAweDIwNDgsCisJMHgwODBjLCAweDBmYzAsIDB4NjgzMCwgMHg2MDM2LCAweDkwOGUsIDB4MDAwMSwgMHgwMTQ4LCAweDY4MDMsCisJMHgwMDAyLCAweDkwODYsIDB4MDAwNSwgMHgwMTcwLCAweDkwMDYsIDB4NjAyZSwgMHg2MDMyLCAweDAwZDAsCisJMHg2ODFjLCAweGMwODUsIDB4NjgxZSwgMHg2ODAzLCAweDAwMDQsIDB4NjgyNCwgMHhjMGY0LCAweDkwODUsCisJMHgwYzAwLCAweDY4MjYsIDB4NjgxNCwgMHgyMDQ4LCAweGE4YWMsIDB4NjkzOCwgMHg5MTAyLCAweGE4YjAsCisJMHg2OTNjLCAweDkxMDMsIDB4MWU0OCwgMHg2ODNjLCAweDYwMmUsIDB4NjgzOCwgMHg5MDg0LCAweGZmZmMsCisJMHg2ODNhLCAweDYwMzIsIDB4MmQwMCwgMHg2MDNhLCAweDY4MDgsIDB4NjAzZSwgMHg2OTEwLCAweDYxMTIsCisJMHg2OTU0LCAweDYxNTYsIDB4NjAyMywgMHgwMDAxLCAweDYwMDcsIDB4MDAzOSwgMHg2MDAzLCAweDAwMDEsCisJMHgwODBjLCAweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDAwOWUsIDB4MDAxZSwgMHgwMDA1LCAweDYwMjQsCisJMHhkMGQ0LCAweDA1MTAsIDB4ZDBmNCwgMHgxMWY4LCAweDYwMzgsIDB4OTQwYSwgMHg2MDNjLCAweDkzMDMsCisJMHgwMjMwLCAweDkxMDUsIDB4MDEyMCwgMHg2MDI0LCAweGMwZDQsIDB4YzBmNSwgMHgwMDk4LCAweDY0M2EsCisJMHg2MzNlLCAweGFjM2UsIDB4YWI0MiwgMHgwMDQ2LCAweDAwMzYsIDB4MjQwMCwgMHhhY2FjLCAweDk0MDIsCisJMHhhODM2LCAweDIzMDAsIDB4YWJiMCwgMHg5MzAzLCAweGE4M2EsIDB4MDAzZSwgMHgwMDRlLCAweDYwMjQsCisJMHhjMGQ0LCAweDAwMDAsIDB4NjAyNiwgMHgwMDA1LCAweGQwZjQsIDB4MTEzOCwgMHhhODNjLCAweDYwM2EsCisJMHhhODQwLCAweDYwM2UsIDB4NjAyNCwgMHhjMGY1LCAweDYwMjYsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsCisJMHg2MDA0LCAweDkwOGUsIDB4MDAzNCwgMHgwMWI4LCAweDkwOGUsIDB4MDAzNSwgMHgwMWEwLCAweDkwOGUsCisJMHgwMDM2LCAweDAxODgsIDB4OTA4ZSwgMHgwMDM3LCAweDAxNzAsIDB4OTA4ZSwgMHgwMDM4LCAweDAxNTgsCisJMHg5MDhlLCAweDAwMzksIDB4MDE0MCwgMHg5MDhlLCAweDAwM2EsIDB4MDEyOCwgMHg5MDhlLCAweDAwM2IsCisJMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsCisJMHgwMDI2LCAweDAwMzYsIDB4MDBlNiwgMHgyMDAxLCAweDE5ODIsIDB4MjAwYywgMHg4MDAwLCAweDIwMTQsCisJMHgyMDAxLCAweDAwMzIsIDB4MDgwYywgMHg5Mzc1LCAweDIwMDEsIDB4MTk4NiwgMHg4MmZmLCAweDExMTAsCisJMHgyMDExLCAweDAwMTQsIDB4MjIwMiwgMHgyMDAxLCAweDE5ODQsIDB4MjAwYywgMHg4MDAwLCAweDIwMTQsCisJMHgyMDcxLCAweDE5NmMsIDB4NzExYSwgMHg3MjFlLCAweDIwMDEsIDB4MDA2NCwgMHgwODBjLCAweDkzNzUsCisJMHgyMDAxLCAweDE5ODcsIDB4ODJmZiwgMHgxMTEwLCAweDIwMTEsIDB4MDAxNCwgMHgyMjAyLCAweDIwMDEsCisJMHgxOTg4LCAweDkyODgsIDB4MDAwYSwgMHgyMTAyLCAweDIwMDEsIDB4MWE5OCwgMHgyMTAyLCAweDIwMDEsCisJMHgwMDMyLCAweDA4MGMsIDB4MTYxMSwgMHgwODBjLCAweDZhODQsIDB4MDBlZSwgMHgwMDNlLCAweDAwMmUsCisJMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDBlNiwgMHgyMDAxLCAweDE5ODYsCisJMHgyMDAzLCAweDAwMjgsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDMsIDB4MDAxNCwgMHgyMDcxLCAweDE5NmMsCisJMHg3MDFiLCAweDAwMDAsIDB4NzAxZiwgMHgwN2QwLCAweDIwMDEsIDB4MTk4OCwgMHgyMDA5LCAweDAwMWUsCisJMHgyMTAyLCAweDIwMDEsIDB4MWE5OCwgMHgyMTAyLCAweDIwMDEsIDB4MDAzMiwgMHgwODBjLCAweDE2MTEsCisJMHgwMGVlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwOTYsIDB4NjA1OCwgMHg5MDRkLCAweDAxMTAsCisJMHgwODBjLCAweDEwNDAsIDB4MDA5ZSwgMHgwMDA1LCAweDAwMDUsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDA4MGMsIDB4YjI3ZCwgMHgwMTgwLCAweDJiMDgsIDB4NjExMiwgMHgwY2E5LCAweDYwMjMsCisJMHgwMDAxLCAweDI5MDAsIDB4NjAxNiwgMHgyMDA5LCAweDAwMzMsIDB4MDgwYywgMHhiMzUyLCAweDkwODUsCisJMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMDk2LCAweDAwZTYsCisJMHgwMGY2LCAweDIwNzEsIDB4MTgwMCwgMHg5MTg2LCAweDAwMTUsIDB4MTUyMCwgMHg3MDkwLCAweDkwODYsCisJMHgwMDE4LCAweDAxMjAsIDB4NzA5MCwgMHg5MDg2LCAweDAwMTQsIDB4MTFlMCwgMHg2MDE0LCAweDIwNDgsCisJMHhhYTNjLCAweGQyZTQsIDB4MTE2MCwgMHgyYzc4LCAweDA4MGMsIDB4OWQ0YywgMHgwMWQ4LCAweDcwN2MsCisJMHhhYTUwLCAweDkyMDYsIDB4MTE2MCwgMHg3MDgwLCAweGFhNTQsIDB4OTIwNiwgMHgxMTQwLCAweDYyMTAsCisJMHgwMGI2LCAweDIyNTgsIDB4YmFhMCwgMHgwMGJlLCAweDkwMGUsIDB4MDgwYywgMHgzMjk5LCAweDA4MGMsCisJMHhiNmRjLCAweDAwMjAsIDB4MDgwYywgMHhiY2I2LCAweDA4MGMsIDB4YjJkMywgMHgwMGZlLCAweDAwZWUsCisJMHgwMDllLCAweDAwMDUsIDB4NzA2MCwgMHhhYTU0LCAweDkyMDYsIDB4MGQ0OCwgMHgwYzgwLCAweDAwYzYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIyN2QsIDB4MDE4OCwgMHgyYjA4LCAweDYxMTIsCisJMHgwODBjLCAweGQ1NTQsIDB4NjAyMywgMHgwMDAxLCAweDI5MDAsIDB4NjAxNiwgMHgyMDA5LCAweDAwNGQsCisJMHgwODBjLCAweGIzNTIsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDkwMDYsCisJMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAxNiwgMHgwODBjLCAweGIyN2QsCisJMHgwMTgwLCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGQ1NTQsIDB4NjAyMywgMHgwMDAxLCAweDI5MDAsCisJMHg2MDE2LCAweDAwMWUsIDB4MDgwYywgMHhiMzUyLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsCisJMHgwMDA1LCAweDAwMWUsIDB4OTAwNiwgMHgwY2QwLCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsCisJMHgwMDU2LCAweDAwNjYsIDB4MDA5NiwgMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHgxODAwLCAweDkxODYsCisJMHgwMDE1LCAweDE1NjgsIDB4NzE5MCwgMHg2MDE0LCAweDIwNDgsIDB4YTgxNCwgMHg4MDAzLCAweDkxMDYsCisJMHgxNTMwLCAweDIwZTEsIDB4MDAwMCwgMHgyMDAxLCAweDE5YTEsIDB4MjAwMywgMHgwMDAwLCAweDYwMTQsCisJMHgyMDQ4LCAweGE4MzAsIDB4MjBhOCwgMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MDk0LCAweDAwM2YsCisJMHgyMmU4LCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMWIsIDB4MjBhMCwgMHgyMDAxLCAweDE5YTEsCisJMHgwMDE2LCAweDIwMGMsIDB4MDgwYywgMHhkZTJlLCAweDAwMWUsIDB4YTgwNCwgMHg5MDA1LCAweDAxMTAsCisJMHgyMDQ4LCAweDBjMzgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NjcsIDB4MDEwMywgMHgwMDEwLCAweDA4MGMsCisJMHhiY2I2LCAweDA4MGMsIDB4YjJkMywgMHgwMGZlLCAweDAwZWUsIDB4MDA5ZSwgMHgwMDZlLCAweDAwNWUsCisJMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDA5NiwgMHgwMGU2LCAweDAwZjYsCisJMHgyMDcxLCAweDE4MDAsIDB4OTE4NiwgMHgwMDE1LCAweDExYjgsIDB4NzA5MCwgMHg5MDg2LCAweDAwMDQsCisJMHgxMTk4LCAweDYwMTQsIDB4MjA0OCwgMHgyYzc4LCAweDA4MGMsIDB4OWQ0YywgMHgwMWE4LCAweDcwN2MsCisJMHhhYTc0LCAweDkyMDYsIDB4MTEzMCwgMHg3MDgwLCAweGFhNzgsIDB4OTIwNiwgMHgxMTEwLCAweDA4MGMsCisJMHgzMjUwLCAweDA4MGMsIDB4YjZkYywgMHgwMDIwLCAweDA4MGMsIDB4YmNiNiwgMHgwODBjLCAweGIyZDMsCisJMHgwMGZlLCAweDAwZWUsIDB4MDA5ZSwgMHgwMDA1LCAweDcwNjAsIDB4YWE3OCwgMHg5MjA2LCAweDBkNzgsCisJMHgwYzgwLCAweDAwOTYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsIDB4MTgwMCwgMHg5MTg2LCAweDAwMTUsCisJMHgxNTUwLCAweDcwOTAsIDB4OTA4NiwgMHgwMDA0LCAweDE1MzAsIDB4NjAxNCwgMHgyMDQ4LCAweDJjNzgsCisJMHgwODBjLCAweDlkNGMsIDB4MDVmMCwgMHg3MDdjLCAweGFhY2MsIDB4OTIwNiwgMHgxMTgwLCAweDcwODAsCisJMHhhYWQwLCAweDkyMDYsIDB4MTE2MCwgMHgwODBjLCAweDMyNTAsIDB4MDAxNiwgMHhhOTk4LCAweGFhYjAsCisJMHg5Mjg0LCAweDEwMDAsIDB4YzBmZCwgMHgwODBjLCAweDU3ODQsIDB4MDAxZSwgMHgwMDEwLCAweDA4MGMsCisJMHg1NTZmLCAweDA4MGMsIDB4ZDBkOCwgMHgwNTA4LCAweGE4N2IsIDB4MDAwMCwgMHhhODgzLCAweDAwMDAsCisJMHhhODk3LCAweDQwMDAsIDB4MDA4MCwgMHgwODBjLCAweGQwZDgsIDB4MDFiOCwgMHg2MDE0LCAweDIwNDgsCisJMHgwODBjLCAweDU1NmYsIDB4MWQ3MCwgMHhhODdiLCAweDAwMzAsIDB4YTg4MywgMHgwMDAwLCAweGE4OTcsCisJMHg0MDA1LCAweGE4OWIsIDB4MDAwNCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhhODY3LCAweDAxMzksCisJMHgwODBjLCAweDZlOWYsIDB4MDEyZSwgMHgwODBjLCAweGIyZDMsIDB4MDBmZSwgMHgwMGVlLCAweDAwOWUsCisJMHgwMDA1LCAweDcwNjAsIDB4YWFkMCwgMHg5MjA2LCAweDA5MzAsIDB4MDg4OCwgMHgwMDE2LCAweDAwMjYsCisJMHhhODdjLCAweGQwYWMsIDB4MDE3OCwgMHhhOTM4LCAweGFhMzQsIDB4MjEwMCwgMHg5MjA1LCAweDAxNTAsCisJMHhhODkwLCAweDkxMDYsIDB4MTExOCwgMHhhODhjLCAweDkyMDYsIDB4MDEyMCwgMHhhOTkyLCAweGFhOGUsCisJMHg5MDg1LCAweDAwMDEsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGQ2LCAweDAwMzYsCisJMHgwODBjLCAweGQwZDgsIDB4MDkwNCwgMHhkNzE2LCAweDAwOTYsIDB4NjMxNCwgMHgyMzQ4LCAweGE4N2EsCisJMHhhOTgyLCAweDkyOWUsIDB4NDAwMCwgMHgxNTgwLCAweDYzMTAsIDB4MDBjNiwgMHgyMzU4LCAweDIwMDksCisJMHgwMDAwLCAweGE4NjgsIDB4ZDBmNCwgMHgxMTQwLCAweDA4MGMsIDB4Njk0NCwgMHgxMTA4LCAweGMxODUsCisJMHhiODAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweGFhOTYsIDB4YTk5YSwgMHgyMGE5LCAweDAwMDQsCisJMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMzEsIDB4MjBhMCwgMHhiOGM0LCAweDIwZTAsCisJMHhiOGM4LCAweDkwODAsIDB4MDAwNiwgMHgyMDk4LCAweDA4MGMsIDB4MGY4YiwgMHgyMGE5LCAweDAwMDQsCisJMHhhODVjLCAweDkwODAsIDB4MDAzNSwgMHgyMGEwLCAweGI4YzgsIDB4OTA4MCwgMHgwMDBhLCAweDIwOTgsCisJMHgwODBjLCAweDBmOGIsIDB4MDBjZSwgMHgwMDkwLCAweGFhOTYsIDB4MzkxOCwgMHg5Mzk4LCAweDAwMDcsCisJMHgyMzFjLCAweDYwMDQsIDB4OTA4NiwgMHgwMDE2LCAweDAxMTAsIDB4YTg5YiwgMHgwMDA0LCAweGFiYTIsCisJMHg2MzEwLCAweDIzNTgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4YTg5ZSwgMHhhODY4LCAweGMwZjQsCisJMHhhODZhLCAweDA4MGMsIDB4NmU5MiwgMHg2MDE3LCAweDAwMDAsIDB4MDA5ZSwgMHgwMDNlLCAweDAwZGUsCisJMHgwMGJlLCAweDAwMDUsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsIDB4MDBiNiwgMHgwMDk2LCAweDAwZjYsCisJMHg2MjE0LCAweDIyNDgsIDB4NjIxMCwgMHgyMjU4LCAweDIwNzksIDB4MDI2MCwgMHg5MDk2LCAweDAwMDAsCisJMHgxMWEwLCAweGI4MTQsIDB4OTA4NCwgMHgwMGZmLCAweDkwMGUsIDB4MDgwYywgMHgyODczLCAweDIxMTgsCisJMHg4MzFmLCAweDkzOWMsIDB4ZmYwMCwgMHg3ODM4LCAweDkwODQsIDB4MDBmZiwgMHg5MzFkLCAweDdjM2MsCisJMHgyMDExLCAweDgwMTgsIDB4MDgwYywgMHg0YzQ0LCAweDAwYTgsIDB4OTA5NiwgMHgwMDAxLCAweDExNDgsCisJMHg4OWZmLCAweDAxODAsIDB4YTg5YiwgMHgwMDBkLCAweDc4MzgsIDB4YThhNiwgMHg3ODNjLCAweGE4YWEsCisJMHgwMDQ4LCAweDkwOTYsIDB4MDAwMiwgMHgxMTMwLCAweGE4OWIsIDB4MDAwZCwgMHg3ODM4LCAweGE4YTYsCisJMHg3ODNjLCAweGE4YWEsIDB4MDBmZSwgMHgwMDllLCAweDAwYmUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsCisJMHgwMDA1LCAweDAwYzYsIDB4MDAyNiwgMHgwMDE2LCAweDkxODYsIDB4MDAzNSwgMHgwMTEwLCAweDZhMzgsCisJMHgwMDA4LCAweDZhMmMsIDB4MDgwYywgMHhkMGM2LCAweDAxZjAsIDB4MjI2MCwgMHg2MTIwLCAweDkxODYsCisJMHgwMDAzLCAweDAxMTgsIDB4OTE4NiwgMHgwMDA2LCAweDExOTAsIDB4NjgzOCwgMHg5MjA2LCAweDAxNDAsCisJMHg2ODNjLCAweDkyMDYsIDB4MTE2MCwgMHg2MTA4LCAweDY4MzgsIDB4OTEwNiwgMHgxMTQwLCAweDAwMjAsCisJMHg2MDA4LCAweDY5M2MsIDB4OTEwNiwgMHgxMTE4LCAweDYwMTAsIDB4NjkxMCwgMHg5MTA2LCAweDAwMWUsCisJMHgwMDJlLCAweDAwY2UsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsIDB4MGNjOCwgMHhhOTc0LCAweGQxY2MsCisJMHgwMTk4LCAweDkxOGMsIDB4MDBmZiwgMHg5MThlLCAweDAwMDIsIDB4MTE3MCwgMHhhOWE4LCAweDkxOGMsCisJMHgwMDBmLCAweDkxOGUsIDB4MDAwMSwgMHgxMTQwLCAweGE4N2MsIDB4ZDBhYywgMHgwMTI4LCAweGE4MzQsCisJMHhhOTM4LCAweDkxMTUsIDB4MTkwYywgMHhjNzhiLCAweDAwMDUsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsCisJMHgwMDEwLCAweDAwMzYsIDB4OTAxZSwgMHgwNDk5LCAweDAxZTAsIDB4MDgwYywgMHhkMGQ4LCAweDAxYzgsCisJMHgwODBjLCAweGQyYzMsIDB4NjAzNywgMHg0MDAwLCAweDYwMTQsIDB4NjAxNywgMHgwMDAwLCAweDAwOTYsCisJMHgyMDQ4LCAweGE4N2MsIDB4MDgwYywgMHhkMmUwLCAweDExMTgsIDB4MDgwYywgMHhiY2I2LCAweDAwNDAsCisJMHhhODY3LCAweDAxMDMsIDB4YTg3NywgMHgwMDAwLCAweDgzZmYsIDB4MTEyOSwgMHgwODBjLCAweDZlOWYsCisJMHgwMDllLCAweDAwM2UsIDB4MDAwNSwgMHhhODgwLCAweGQwYjQsIDB4MDEyOCwgMHhhODdiLCAweDAwMDYsCisJMHhjMGVjLCAweGE4ODIsIDB4MDA0OCwgMHhkMGJjLCAweDAxMTgsIDB4YTg3YiwgMHgwMDAyLCAweDAwMjAsCisJMHhhODdiLCAweDAwMDUsIDB4MDgwYywgMHhkM2Q0LCAweGE4NzcsIDB4MDAwMCwgMHgwMDA1LCAweDIwMDEsCisJMHgxODEwLCAweDIwMDQsIDB4ZDBlYywgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsCisJMHhkMGY0LCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwZTQsCisJMHgwMDBlLCAweDAwMDUsIDB4MDAzNiwgMHgwMDQ2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGJiYTAsCisJMHgwMGJlLCAweDIwMjEsIDB4MDAwNywgMHgwODBjLCAweDRkZmIsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMDUsCisJMHgwYzUxLCAweDFkODEsIDB4MDAwNSwgMHgyMDAxLCAweDE5ODYsIDB4MjAwNCwgMHg2MDFhLCAweDAwMDUsCisJMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2MDQyLCAweDAwMDUsIDB4MDgwYywgMHhiMmQzLCAweDA4MDQsCisJMHg5YWIxLCAweDIwMDEsIDB4MDEwOSwgMHgyMDA0LCAweGQwODQsIDB4MDFlMCwgMHgwMTI2LCAweDIwOTEsCisJMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBmNiwgMHgwMGU2LCAweDAwYzYsCisJMHgyMDc5LCAweDE5ZTgsIDB4MjA3MSwgMHgxODAwLCAweDIwNjEsIDB4MDEwMCwgMHgwODBjLCAweDkzZTIsCisJMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsCisJMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMGI2LCAweDAwNjYsIDB4NjAwMCwgMHg5MGIyLCAweDAwMTAsCisJMHgxYTBjLCAweDBkYzUsIDB4MDAxYiwgMHgwMDZlLCAweDAwYmUsIDB4MDAwNSwgMHhkODQ2LCAweGRmOGQsCisJMHhlMTAyLCAweGQ4NDYsIDB4ZDg0NiwgMHhkODQ2LCAweGQ4NDYsIDB4ZDg0NiwgMHhkODdkLCAweGUxODYsCisJMHhkODQ2LCAweGQ4NDYsIDB4ZDg0NiwgMHhkODQ2LCAweGQ4NDYsIDB4ZDg0NiwgMHgwODBjLCAweDBkYzUsCisJMHgwMDY2LCAweDYwMDAsIDB4OTBiMiwgMHgwMDEwLCAweDFhMGMsIDB4MGRjNSwgMHgwMDEzLCAweDAwNmUsCisJMHgwMDA1LCAweGQ4NjEsIDB4ZTZkNSwgMHhkODYxLCAweGQ4NjEsIDB4ZDg2MSwgMHhkODYxLCAweGQ4NjEsCisJMHhkODYxLCAweGU2ODIsIDB4ZTcyOSwgMHhkODYxLCAweGVkYjQsIDB4ZWRlYSwgMHhlZGI0LCAweGVkZWEsCisJMHhkODYxLCAweDA4MGMsIDB4MGRjNSwgMHg2MDAwLCAweDkwODIsIDB4MDAxMCwgMHgxYTBjLCAweDBkYzUsCisJMHg2MDAwLCAweDAwMGEsIDB4MDAwNSwgMHhkODdiLCAweGUzNjQsIDB4ZTQzMywgMHhlNDU2LCAweGU1MTYsCisJMHhkODdiLCAweGU1ZjUsIDB4ZTU5ZSwgMHhlMTkyLCAweGU2NTgsIDB4ZTY2ZCwgMHhkODdiLCAweGQ4N2IsCisJMHhkODdiLCAweGQ4N2IsIDB4ZDg3YiwgMHgwODBjLCAweDBkYzUsIDB4OTFiMiwgMHgwMDUzLCAweDFhMGMsCisJMHgwZGM1LCAweDIxMDAsIDB4OTFiMiwgMHgwMDQwLCAweDFhMDQsIDB4ZGNmZCwgMHgwMDAyLCAweGQ4YzcsCisJMHhkYWNiLCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweGRhZDQsIDB4ZDhjNywgMHhkOGM3LCAweGQ4YzcsCisJMHhkOGM3LCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweGQ4YzcsCisJMHhkOGM3LCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM5LCAweGQ5MmMsCisJMHhkOTNiLCAweGQ5OWYsIDB4ZDljYSwgMHhkYTQzLCAweGRhYjYsIDB4ZDhjNywgMHhkOGM3LCAweGRhZDcsCisJMHhkOGM3LCAweGQ4YzcsIDB4ZGFlYywgMHhkYWY5LCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweGQ4YzcsCisJMHhkOGM3LCAweGRiOWYsIDB4ZDhjNywgMHhkOGM3LCAweGRiYjMsIDB4ZDhjNywgMHhkOGM3LCAweGRiNmUsCisJMHhkOGM3LCAweGQ4YzcsIDB4ZDhjNywgMHhkYmNiLCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweGRjNDgsCisJMHhkOGM3LCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweGQ4YzcsIDB4ZDhjNywgMHhkY2M1LCAweDA4MGMsCisJMHgwZGM1LCAweDA4MGMsIDB4NmE2MSwgMHgxMTUwLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwY2MsCisJMHgxMTI4LCAweDkwODQsIDB4MDAwOSwgMHg5MDg2LCAweDAwMDgsIDB4MTE0MCwgMHg2MDA3LCAweDAwMDksCisJMHg2MDJmLCAweDAwMDksIDB4NjAxNywgMHgwMDAwLCAweDA4MDQsIDB4ZGFjNCwgMHgwODBjLCAweDY5ZmQsCisJMHgwMGU2LCAweDAwYzYsIDB4MDAzNiwgMHgwMDI2LCAweDAwMTYsIDB4NjIxMCwgMHgyMjU4LCAweGJhYTAsCisJMHgwMDI2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDk2YTQsIDB4MDA3NiwgMHg5MDNlLCAweDA4MGMsCisJMHg5NTc3LCAweDJjMDgsIDB4MDgwYywgMHhlOTFjLCAweDAwN2UsIDB4MDAxZSwgMHgwMDFlLCAweDAwMmUsCisJMHgwMDNlLCAweDAwY2UsIDB4MDBlZSwgMHg2NjEwLCAweDI2NTgsIDB4MDgwYywgMHg2NzMzLCAweGJlMDQsCisJMHg5Njg0LCAweDAwZmYsIDB4OTA4MiwgMHgwMDA2LCAweDEyNjgsIDB4MDAxNiwgMHgwMDI2LCAweDYyMTAsCisJMHgwMGI2LCAweDIyNTgsIDB4YmFhMCwgMHgwMGJlLCAweDJjMDgsIDB4MDgwYywgMHhmMDE1LCAweDAwMmUsCisJMHgwMDFlLCAweDExNzgsIDB4MDgwYywgMHhlODRlLCAweDE5MDQsIDB4ZDk5NywgMHgwODBjLCAweGU3ZWEsCisJMHgxMTIwLCAweDYwMDcsIDB4MDAwOCwgMHgwODA0LCAweGRhYzQsIDB4NjAwNywgMHgwMDA5LCAweDA4MDQsCisJMHhkYWM0LCAweDA4MGMsIDB4ZWFiOSwgMHgwMTI4LCAweDA4MGMsIDB4ZTg0ZSwgMHgwZDc4LCAweDA4MDQsCisJMHhkOTk3LCAweDYwMTcsIDB4MTkwMCwgMHgwYzg4LCAweDA4MGMsIDB4MzM3NCwgMHgxOTA0LCAweGRjZmEsCisJMHg2MTA2LCAweDA4MGMsIDB4ZTc4ZSwgMHg2MDA3LCAweDAwMDYsIDB4MDgwNCwgMHhkYWM0LCAweDYwMDcsCisJMHgwMDA3LCAweDA4MDQsIDB4ZGFjNCwgMHgwODBjLCAweGVlMjYsIDB4MTkwNCwgMHhkY2ZhLCAweDA4MGMsCisJMHgzMzc0LCAweDE5MDQsIDB4ZGNmYSwgMHgwMGQ2LCAweDY2MTAsIDB4MjY1OCwgMHhiZTA0LCAweDk2ODQsCisJMHgwMGZmLCAweDkwODIsIDB4MDAwNiwgMHgxMjIwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDY2NTYsCisJMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsIDB4MDE4OCwgMHg5Njg2LCAweDAwMDQsCisJMHgwMTcwLCAweGJlMDQsIDB4OTZiNCwgMHgwMGZmLCAweDk2ODYsIDB4MDAwNiwgMHgwMTQwLCAweDk2ODYsCisJMHgwMDA0LCAweDAxMjgsIDB4OTY4NiwgMHgwMDA1LCAweDAxMTAsIDB4MDBkZSwgMHgwNDgwLCAweDAwZTYsCisJMHgyMDcxLCAweDAyNjAsIDB4NzAzNCwgMHg5MDg0LCAweDAwMDMsIDB4MTE0MCwgMHg3MDM0LCAweDkwODIsCisJMHgwMDE0LCAweDAyMjAsIDB4NzAzMCwgMHg5MDg0LCAweDAwMDMsIDB4MDEzMCwgMHgwMGVlLCAweDYwMTcsCisJMHgwMDAwLCAweDYwMmYsIDB4MDAwNywgMHgwMGIwLCAweDAwZWUsIDB4MDgwYywgMHhlOGIyLCAweDExOTAsCisJMHg5Njg2LCAweDAwMDYsIDB4MTE0MCwgMHgwMDI2LCAweDYyMTAsIDB4MjI1OCwgMHhiYWEwLCAweDkwMGUsCisJMHgwODBjLCAweDMyOTksIDB4MDAyZSwgMHgwODBjLCAweDY3YmYsIDB4NjAwNywgMHgwMDBhLCAweDAwZGUsCisJMHgwODA0LCAweGRhYzQsIDB4NjAwNywgMHgwMDBiLCAweDAwZGUsIDB4MDgwNCwgMHhkYWM0LCAweDA4MGMsCisJMHgzMjUwLCAweDA4MGMsIDB4ZDdmOCwgMHg2MDA3LCAweDAwMDEsIDB4MDgwNCwgMHhkYWM0LCAweDA4MGMsCisJMHhlZTI2LCAweDE5MDQsIDB4ZGNmYSwgMHgwODBjLCAweDMzNzQsIDB4MTkwNCwgMHhkY2ZhLCAweDIwNzEsCisJMHgwMjYwLCAweDcwMzQsIDB4OTBiNCwgMHgwMDAzLCAweDE5NDgsIDB4OTBiMiwgMHgwMDE0LCAweDBhMzAsCisJMHg3MDMwLCAweDkwODQsIDB4MDAwMywgMHgxOTEwLCAweDY2MTAsIDB4MjY1OCwgMHhiZTA0LCAweDk2ODYsCisJMHgwNzA3LCAweDA5ZTgsIDB4MDAyNiwgMHg2MjEwLCAweDIyNTgsIDB4YmFhMCwgMHg5MDBlLCAweDA4MGMsCisJMHgzMjk5LCAweDAwMmUsIDB4NjAwNywgMHgwMDBjLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGVmZjQsCisJMHgwODA0LCAweGRhYzQsIDB4MDgwYywgMHg2YTYxLCAweDExNDAsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsCisJMHg5MDg0LCAweDAwMDksIDB4OTA4NiwgMHgwMDA4LCAweDExMTAsIDB4MDgwNCwgMHhkOGQ2LCAweDA4MGMsCisJMHg2OWZkLCAweDY2MTAsIDB4MjY1OCwgMHhiZTA0LCAweDk2ODQsIDB4MDBmZiwgMHg5MDgyLCAweDAwMDYsCisJMHgwNmM4LCAweDExMzgsIDB4MDAyNiwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2Njk2LCAweDAwMmUsCisJMHgwMDUwLCAweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsIDB4MDAwNCwgMHgwMTIwLCAweDk2ODYsCisJMHgwMDA2LCAweDE5MDQsIDB4ZDk5NywgMHgwODBjLCAweGU4YmYsIDB4MTEyMCwgMHg2MDA3LCAweDAwMGUsCisJMHgwODA0LCAweGRhYzQsIDB4MDA0NiwgMHg2NDEwLCAweDI0NTgsIDB4YmNhMCwgMHgwMDQ2LCAweDA4MGMsCisJMHgzMjUwLCAweDA4MGMsIDB4ZDdmOCwgMHgwMDRlLCAweDAwMTYsIDB4OTAwNiwgMHgyMDA5LCAweDE4NDgsCisJMHgyMTBjLCAweGQxYTQsIDB4MDE0OCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhlYzMxLCAweDYwMTAsCiAJMHgyMDU4LCAweGI4MDAsIDB4YzBlNSwgMHhiODAyLCAweDAwMWUsIDB4MDA0ZSwgMHg2MDA3LCAweDAwMDEsCi0JMHgwNDQ4LCAweDA4MGMsIDB4ZTgyZCwgMHgwMTk4LCAweDAwMTYsIDB4OTY4YywgMHgwMGZmLCAweDkxODYsCi0JMHgwMDAyLCAweDAxNjAsIDB4OTE4NiwgMHgwMDAzLCAweDAxNDgsIDB4MDAxZSwgMHg5NmI0LCAweGZmMDAsCi0JMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwOTIwLCAweDA4MDQsIDB4ZDcxNSwgMHgwMDFlLCAweDYwMTcsCi0JMHgxOTAwLCAweDYwMDcsIDB4MDAwOSwgMHgwMDcwLCAweDA4MGMsIDB4MzM2YSwgMHgxOTA0LCAweGRhNzgsCi0JMHgwODBjLCAweGViYTEsIDB4MTkwNCwgMHhkYTc4LCAweDA4MGMsIDB4ZGM0OSwgMHgxOTA0LCAweGQ3MTUsCi0JMHg2MDA3LCAweDAwMTIsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsCi0JMHgwMDA1LCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzgzLCAweDA4MGMsCi0JMHg5OGVkLCAweDBjYjAsIDB4NjAwNywgMHgwMDA1LCAweDBjNjgsIDB4MDgwYywgMHhlYmExLCAweDE5MDQsCi0JMHhkYTc4LCAweDA4MGMsIDB4MzM2YSwgMHgxOTA0LCAweGRhNzgsIDB4MDgwYywgMHhkYzQ5LCAweDE5MDQsCi0JMHhkNzE1LCAweDYwMDcsIDB4MDAyMCwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzgzLCAweDA4MGMsCi0JMHg5OGVkLCAweDAwMDUsIDB4MDgwYywgMHgzMzZhLCAweDE5MDQsIDB4ZGE3OCwgMHg2MDA3LCAweDAwMjMsCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzgzLCAweDA4MGMsIDB4OThlZCwgMHgwMDA1LCAweDA4MGMsCi0JMHhlYmExLCAweDE5MDQsIDB4ZGE3OCwgMHgwODBjLCAweDMzNmEsIDB4MTkwNCwgMHhkYTc4LCAweDA4MGMsCi0JMHhkYzQ5LCAweDE5MDQsIDB4ZDcxNSwgMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsCi0JMHgyYzA4LCAweDIwMTEsIDB4MTgyMCwgMHgyMjE0LCAweDcwM2MsIDB4OTIwNiwgMHgxMWUwLCAweDIwMTEsCi0JMHgxODFmLCAweDIyMTQsIDB4NzAzOCwgMHg5MDg0LCAweDAwZmYsIDB4OTIwNiwgMHgxMWEwLCAweDcyNDAsCi0JMHgwODBjLCAweGNlNDQsIDB4MDU3MCwgMHgyMjYwLCAweDYwMDgsIDB4OTA4NiwgMHhmZmZmLCAweDAxMjAsCi0JMHg3MjQ0LCAweDYwMDgsIDB4OTIwNiwgMHgxNTI4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA3LCAweDE1MDgsCi0JMHgwODBjLCAweGIxMDEsIDB4MDRhMCwgMHg3MjQ0LCAweDkyODYsIDB4ZmZmZiwgMHgwMTgwLCAweDJjMDgsCi0JMHgwODBjLCAweGNlNDQsIDB4MDFiMCwgMHgyMjYwLCAweDcyNDAsIDB4NjAwOCwgMHg5MjA2LCAweDExODgsCi0JMHg2MDEwLCAweDkxOTAsIDB4MDAwNCwgMHgyMjE0LCAweDkyMDYsIDB4MDFiOCwgMHgwMDUwLCAweDcyNDAsCi0JMHgyYzA4LCAweDkwMDYsIDB4MDgwYywgMHhlOTZmLCAweDExODAsIDB4NzI0NCwgMHg5Mjg2LCAweGZmZmYsCi0JMHgwMWIwLCAweDIxNjAsIDB4NjAwNywgMHgwMDI2LCAweDYwMTcsIDB4MTcwMCwgMHg3MjE0LCAweDkyOTYsCi0JMHhmZmZmLCAweDExODAsIDB4NjAwNywgMHgwMDI1LCAweDAwNjgsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDcsCi0JMHgxZDgwLCAweDYwMDQsIDB4OTA4NiwgMHgwMDI0LCAweDExMTAsIDB4MDgwYywgMHhiMTAxLCAweDIxNjAsCi0JMHg2MDA3LCAweDAwMjUsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsCi0JMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDY2NGYsCi0JMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDIwYTksIDB4MDAwNCwgMHgyMDE5LCAweDE4MDUsCi0JMHgyMDExLCAweDAyNzYsIDB4MDgwYywgMHhjMGUzLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsCi0JMHgwMTIwLCAweDYwMDcsIDB4MDAzMSwgMHgwODA0LCAweGQ4NDIsIDB4MDgwYywgMHhiZDUwLCAweDA4MGMsCi0JMHg3NTY5LCAweDExOTAsIDB4MDAwNiwgMHgwMDI2LCAweDAwMzYsIDB4MDgwYywgMHg3NTgzLCAweDExMzgsCi0JMHgwODBjLCAweDc4NGUsIDB4MDgwYywgMHg2MTI3LCAweDA4MGMsIDB4NzQ5NSwgMHgwMDEwLCAweDA4MGMsCi0JMHg3NTQxLCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLCAweDAwMDUsIDB4MDgwYywgMHgzMzZhLCAweDE5MDQsCi0JMHhkYTc4LCAweDA4MGMsIDB4ZGM0OSwgMHgxOTA0LCAweGQ3MTUsIDB4NjEwNiwgMHgwODBjLCAweGRjNjUsCi0JMHgxMTIwLCAweDYwMDcsIDB4MDAyYiwgMHgwODA0LCAweGQ4NDIsIDB4NjAwNywgMHgwMDJjLCAweDA4MDQsCi0JMHhkODQyLCAweDA4MGMsIDB4ZWJhMSwgMHgxOTA0LCAweGRhNzgsIDB4MDgwYywgMHgzMzZhLCAweDE5MDQsCi0JMHhkYTc4LCAweDA4MGMsIDB4ZGM0OSwgMHgxOTA0LCAweGQ3MTUsIDB4NjEwNiwgMHgwODBjLCAweGRjNmEsCi0JMHgxMTIwLCAweDYwMDcsIDB4MDAyZSwgMHgwODA0LCAweGQ4NDIsIDB4NjAwNywgMHgwMDJmLCAweDA4MDQsCi0JMHhkODQyLCAweDA4MGMsIDB4MzM2YSwgMHgxOTA0LCAweGRhNzgsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsCi0JMHg2MDEwLCAweDIwNTgsIDB4YjkwNCwgMHg5MTg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LCAweDAxNTgsCi0JMHg5MTg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDg2LCAweDAwMDYsIDB4MDEyOCwgMHgwMGNlLCAweDAwZGUsCi0JMHgwMGVlLCAweDA4MDQsIDB4ZDg0OSwgMHgwODBjLCAweDU3ZDcsIDB4ZDBlNCwgMHgwOTA0LCAweGQ5YzMsCi0JMHgyMDcxLCAweDAyNmMsIDB4NzAxMCwgMHg2MDNhLCAweDcwMTQsIDB4NjAzZSwgMHg3MTA4LCAweDcyMGMsCi0JMHgwODBjLCAweDZhOGUsIDB4MDE0MCwgMHg2MDEwLCAweDIwNTgsIDB4YjgxMCwgMHg5MTA2LCAweDExMTgsCi0JMHhiODE0LCAweDkyMDYsIDB4MDUxMCwgMHgwODBjLCAweDZhOGEsIDB4MTViOCwgMHgyMDY5LCAweDE4MDAsCi0JMHg2ODgwLCAweDkyMDYsIDB4MTU5MCwgMHg2ODdjLCAweDkxMDYsIDB4MTU3OCwgMHg3MjEwLCAweDA4MGMsCi0JMHhjZTQ0LCAweDA1OTAsIDB4MDgwYywgMHhkYjM2LCAweDA1NzgsIDB4MDgwYywgMHhlYTIxLCAweDA1NjAsCi0JMHg2MjJlLCAweDYwMDcsIDB4MDAzNiwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzNiLCAweDA4MGMsCi0JMHg5OGVkLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4NzIxNCwgMHg5Mjg2LCAweGZmZmYsCi0JMHgwMTUwLCAweDA4MGMsIDB4Y2U0NCwgMHgwMWMwLCAweDkyODAsIDB4MDAwMiwgMHgyMDA0LCAweDcxMTAsCi0JMHg5MTA2LCAweDExOTAsIDB4MDhlMCwgMHg3MjEwLCAweDJjMDgsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHhlOTZmLCAweDJjMTAsIDB4MjE2MCwgMHgwMTQwLCAweDA4OTAsIDB4NjAwNywgMHgwMDM3LCAweDYwMmYsCi0JMHgwMDA5LCAweDYwMTcsIDB4MTUwMCwgMHgwOGI4LCAweDYwMDcsIDB4MDAzNywgMHg2MDJmLCAweDAwMDMsCi0JMHg2MDE3LCAweDE3MDAsIDB4MDg4MCwgMHg2MDA3LCAweDAwMTIsIDB4MDg2OCwgMHgwODBjLCAweDMzNmEsCi0JMHgxOTA0LCAweGRhNzgsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDQsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsCi0JMHg5MDg2LCAweDAwMDYsIDB4MTkwNCwgMHhkODQ5LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDA4MGMsCi0JMHg1N2Q3LCAweGQwZTQsIDB4MDkwNCwgMHhkYTNiLCAweDIwNjksIDB4MTgwMCwgMHgyMDcxLCAweDAyNmMsCi0JMHg3MDA4LCAweDYwM2EsIDB4NzIwYywgMHg2MjNlLCAweDkyODYsIDB4ZmZmZiwgMHgxMTUwLCAweDcyMDgsCi0JMHgwMGM2LCAweDJjMDgsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4ZTk2ZiwgMHgyYzEwLCAweDAwY2UsCi0JMHgwNWU4LCAweDA4MGMsIDB4Y2U0NCwgMHgwNWQwLCAweDcxMDgsIDB4OTI4MCwgMHgwMDAyLCAweDIwMDQsCi0JMHg5MTA2LCAweDE1YTAsIDB4MDBjNiwgMHgwMDI2LCAweDIyNjAsIDB4MDgwYywgMHhjYTY0LCAweDAwMmUsCi0JMHgwMGNlLCAweDcxMTgsIDB4OTE4YywgMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwgMHgwMDAxLCAweDAxNzgsCi0JMHg5MTg2LCAweDAwMDUsIDB4MDExOCwgMHg5MTg2LCAweDAwMDcsIDB4MTE5OCwgMHg5MjgwLCAweDAwMDUsCi0JMHgyMDA0LCAweDkwMDUsIDB4MDE3MCwgMHgwODBjLCAweGRiMzYsIDB4MDkwNCwgMHhkOWJjLCAweDAwNTYsCi0JMHg3NTEwLCAweDc2MTQsIDB4MDgwYywgMHhlYTNhLCAweDAwNWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsCi0JMHgwMDA1LCAweDYwMDcsIDB4MDAzYiwgMHg2MDJmLCAweDAwMDksIDB4NjAxNywgMHgyYTAwLCAweDYwMDMsCi0JMHgwMDAxLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsIDB4MGM3OCwgMHg2MDA3LCAweDAwM2IsCi0JMHg2MDJmLCAweDAwMDMsIDB4NjAxNywgMHgwMzAwLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDkzM2IsCi0JMHgwODBjLCAweDk4ZWQsIDB4MGMxMCwgMHg2MDA3LCAweDAwM2IsIDB4NjAyZiwgMHgwMDBiLCAweDYwMTcsCi0JMHgwMDAwLCAweDA4MDQsIDB4ZDk5MywgMHgwMGU2LCAweDAwMjYsIDB4MDgwYywgMHg2YTUwLCAweDA1NTAsCi0JMHgwODBjLCAweDY5ZWMsIDB4MDgwYywgMHhlYzEyLCAweDE1MTgsIDB4MjA3MSwgMHgxODAwLCAweDcwZGMsCi0JMHg5MDg1LCAweDAwMDMsIDB4NzBkZSwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg3MmIwLCAweDkyODQsCi0JMHgwMGZmLCAweDcwN2UsIDB4NzhlNiwgMHg5Mjg0LCAweGZmMDAsIDB4NzI4MCwgMHg5MjA1LCAweDcwODIsCi0JMHg3OGVhLCAweDAwZmUsIDB4NzBlNywgMHgwMDAwLCAweDA4MGMsIDB4NmE4ZSwgMHgwMTIwLCAweDIwMTEsCi0JMHgxYTAyLCAweDIwMTMsIDB4MDdkMCwgMHhkMGFjLCAweDExMjgsIDB4MDgwYywgMHgzMDE5LCAweDAwMTAsCi0JMHgwODBjLCAweGVjNDYsIDB4MDAyZSwgMHgwMGVlLCAweDA4MGMsIDB4YjEwMSwgMHgwODA0LCAweGQ4NDgsCi0JMHgwODBjLCAweGIxMDEsIDB4MDAwNSwgMHgyNjAwLCAweDAwMDIsIDB4ZGE4ZiwgMHhkYWJkLCAweGRhY2UsCi0JMHhkYThmLCAweGRhOGYsIDB4ZGE5MSwgMHhkYWRmLCAweGRhOGYsIDB4ZGE4ZiwgMHhkYThmLCAweGRhYWIsCi0JMHhkYThmLCAweGRhOGYsIDB4ZGE4ZiwgMHhkYWVhLCAweGRiMDAsIDB4ZGIzMSwgMHhkYThmLCAweDA4MGMsCi0JMHgwZGM1LCAweDA4MGMsIDB4ZWJhMSwgMHgxZDIwLCAweDA4MGMsIDB4MzM2YSwgMHgxZDA4LCAweDcwMzgsCi0JMHg2MDE2LCAweDYwMDcsIDB4MDA0NSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzgzLCAweDAwMDUsCi0JMHgwODBjLCAweDMyNDYsIDB4MDgwYywgMHhkNTc2LCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDkzODMsIDB4MDAwNSwgMHgwODBjLCAweGViYTEsIDB4MTk1MCwgMHgwODBjLCAweDMzNmEsCi0JMHgxOTM4LCAweDA4MGMsIDB4ZGM0OSwgMHgxZDYwLCAweDcwM2MsIDB4NjAxNiwgMHg2MDA3LCAweDAwNGEsCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzgzLCAweDAwMDUsIDB4MDgwYywgMHgzMzZhLCAweDE5MDQsCi0JMHhkYTc4LCAweDIwMDksIDB4MDA0MSwgMHgwODBjLCAweGVjNGYsIDB4NjAwNywgMHgwMDQ3LCAweDYwMDMsCi0JMHgwMDAxLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwODBjLCAweDMzNmEsCi0JMHgxOTA0LCAweGRhNzgsIDB4MjAwOSwgMHgwMDQyLCAweDA4MGMsIDB4ZWM0ZiwgMHg2MDA3LCAweDAwNDcsCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzgzLCAweDA4MGMsIDB4OThlZCwgMHgwMDA1LCAweDA4MGMsCi0JMHgzMzZhLCAweDE5MDQsIDB4ZGE3OCwgMHgyMDA5LCAweDAwNDYsIDB4MDgwYywgMHhlYzRmLCAweDA4MGMsCi0JMHhiMTAxLCAweDAwMDUsIDB4MjAwMSwgMHgxODI0LCAweDIwMDQsIDB4OTA4MiwgMHgwMGUxLCAweDEyNjgsCi0JMHgwODBjLCAweGRiNTMsIDB4MDkwNCwgMHhkYTc4LCAweDYwMDcsIDB4MDA0ZSwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDkzODMsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsIDB4NjAwNywgMHgwMDEyLCAweDBjYjAsCi0JMHg2MDA3LCAweDAwNGYsIDB4NjAxNywgMHgwMDAwLCAweDcxMzQsIDB4OTE4YywgMHgwMGZmLCAweDgxZmYsCi0JMHgwNTA4LCAweDkxODYsIDB4MDAwMSwgMHgxMTYwLCAweDcxNDAsIDB4MjAwMSwgMHgxOWJmLCAweDIwMDQsCi0JMHg5MTA2LCAweDExYjAsIDB4NzE0NCwgMHgyMDAxLCAweDE5YzAsIDB4MjAwNCwgMHg5MTA2LCAweDAxOTAsCi0JMHg5MTg2LCAweDAwMDIsIDB4MTE2OCwgMHgyMDExLCAweDAyNzYsIDB4MjBhOSwgMHgwMDA0LCAweDYwMTAsCi0JMHgwMDk2LCAweDIwNDgsIDB4MjAxOSwgMHgwMDBhLCAweDA4MGMsIDB4YzBmNywgMHgwMDllLCAweDAxMTAsCi0JMHg2MDE3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsCi0JMHgwMDA1LCAweDYwMDcsIDB4MDA1MCwgMHg3MDNjLCAweDYwMTYsIDB4MGNhMCwgMHgwMDE2LCAweDAwZTYsCi0JMHgyMDcxLCAweDAyNjAsIDB4MDBiNiwgMHgwMGM2LCAweDIyNjAsIDB4NjAxMCwgMHgyMDU4LCAweGI4Y2MsCi0JMHhkMDg0LCAweDAxNTAsIDB4NzEyOCwgMHg2MDQ0LCAweDkxMDYsIDB4MTEyMCwgMHg3MTJjLCAweDYwNDgsCi0JMHg5MTA2LCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwOTYsIDB4MDA4NiwgMHgwMGU2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwgMHgyMGUxLCAweDAwMDAsCi0JMHgyMDAxLCAweDE5YTIsIDB4MjAwMywgMHgwMDAwLCAweDA4MGMsIDB4MTAyNywgMHgwNWEwLCAweDI5MDAsCi0JMHg2MDE2LCAweDcwOTAsIDB4ODAwNCwgMHhhODE2LCAweDkwOGEsIDB4MDAxZSwgMHgwMmQwLCAweGE4MzMsCi0JMHgwMDFlLCAweDIwYTksIDB4MDAxZSwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsCi0JMHgyMGEwLCAweDIwMDEsIDB4MTlhMiwgMHgwMDE2LCAweDIwMGMsIDB4MDQ3MSwgMHgwMDFlLCAweDgxZmYsCi0JMHgwMWI4LCAweDI5NDAsIDB4MDgwYywgMHgxMDI3LCAweDAxYjAsIDB4MjkwMCwgMHhhMDA2LCAweDIxMDAsCi0JMHgwYzE4LCAweGE4MzIsIDB4MjBhOCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsCi0JMHgyMGEwLCAweDIwMDEsIDB4MTlhMiwgMHgwMDE2LCAweDIwMGMsIDB4MDBiMSwgMHgwMDFlLCAweDAwMDAsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDA0OCwgMHgyMDcxLCAweDE4MDAsIDB4NzA5MywgMHgwMDAwLCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4MGZjMCwgMHg5MDA2LCAweDAxMmUsIDB4MDFkZSwgMHgwMWNlLCAweDAwZWUsCi0JMHgwMDhlLCAweDAwOWUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMGM2LCAweDkxOGMsIDB4ZmZmZiwgMHgxMWIwLCAweDA4MGMsIDB4MjQwYiwgMHgyMDk5LCAweDAyNmMsCi0JMHgyMDAxLCAweDAwMTQsIDB4MzUxOCwgMHg5MzEyLCAweDAxMDgsIDB4MTIxOCwgMHgyM2E4LCAweDQwMDMsCi0JMHgwNDAwLCAweDIwYTgsIDB4NDAwMywgMHgyMmE4LCAweDgxMDgsIDB4MDgwYywgMHgyNDBiLCAweDIwOTksCi0JMHgwMjYwLCAweDBjYTgsIDB4MDgwYywgMHgyNDBiLCAweDIwNjEsIDB4MTlhMiwgMHg2MDA0LCAweDIwOTgsCi0JMHg2MDA4LCAweDM1MTgsIDB4OTMxMiwgMHgwMTA4LCAweDEyMTgsIDB4MjNhOCwgMHg0MDAzLCAweDAwNDgsCi0JMHgyMGE4LCAweDQwMDMsIDB4MjJhOCwgMHg4MTA4LCAweDA4MGMsIDB4MjQwYiwgMHgyMDk5LCAweDAyNjAsCi0JMHgwY2E4LCAweDIwNjEsIDB4MTlhMiwgMHgyMDE5LCAweDAyODAsIDB4MzMwMCwgMHg5MzFlLCAweDAxMTAsCi0JMHg2MDA2LCAweDAwMjAsIDB4MjAwMSwgMHgwMjYwLCAweDYwMDYsIDB4ODEwOCwgMHgyMTYyLCAweDkyOTIsCi0JMHgwMDIxLCAweDkyOTYsIDB4ZmZmZiwgMHg2MjBhLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDgxZmYsCi0JMHgxMWI4LCAweDA4MGMsIDB4MjQyMywgMHgyMGExLCAweDAyNGMsIDB4MjAwMSwgMHgwMDE0LCAweDM1MTgsCi0JMHg5MzEyLCAweDEyMTgsIDB4MjNhOCwgMHg0MDAzLCAweDA0MTgsIDB4MjBhOCwgMHg0MDAzLCAweDgyZmYsCi0JMHgwMWY4LCAweDIyYTgsIDB4ODEwOCwgMHgwODBjLCAweDI0MjMsIDB4MjBhMSwgMHgwMjQwLCAweDBjOTgsCi0JMHgwODBjLCAweDI0MjMsIDB4MjA2MSwgMHgxOWE1LCAweDYwMDQsIDB4MjBhMCwgMHg2MDA4LCAweDM1MTgsCi0JMHg5MzEyLCAweDEyMTgsIDB4MjNhOCwgMHg0MDAzLCAweDAwNTgsIDB4MjBhOCwgMHg0MDAzLCAweDgyZmYsCi0JMHgwMTM4LCAweDIyYTgsIDB4ODEwOCwgMHgwODBjLCAweDI0MjMsIDB4MjBhMSwgMHgwMjQwLCAweDBjOTgsCi0JMHgyMDYxLCAweDE5YTUsIDB4MjAxOSwgMHgwMjYwLCAweDM0MDAsIDB4OTMxZSwgMHgwMTEwLCAweDYwMDYsCi0JMHgwMDIwLCAweDIwMDEsIDB4MDI0MCwgMHg2MDA2LCAweDgxMDgsIDB4MjE2MiwgMHg5MjkyLCAweDAwMjEsCi0JMHg5Mjk2LCAweGZmZmYsIDB4NjIwYSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDA2NiwgMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwgMHg5NmI0LCAweGZmMDAsCi0JMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwMTcwLCAweDk2ODYsIDB4MDAwNCwgMHgwMTU4LCAweGJlMDQsCi0JMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxMjgsIDB4OTY4NiwgMHgwMDA0LCAweDAxMTAsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDA2ZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweGRjZTEsCi0JMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweGRjZWUsIDB4MTUyMCwgMHg2ODBjLCAweDkwOGMsCi0JMHhmZjAwLCAweDY4MjAsIDB4OTA4NCwgMHgwMGZmLCAweDkxMTUsIDB4NjIxNiwgMHg2ODI0LCAweDYwMmUsCi0JMHhkMWU0LCAweDAxMzAsIDB4OTAwNiwgMHgwODBjLCAweGVkNmYsIDB4MjAwOSwgMHgwMDAxLCAweDAwNzgsCi0JMHhkMWVjLCAweDAxODAsIDB4NjkyMCwgMHg5MThjLCAweDAwZmYsIDB4NjgyNCwgMHgwODBjLCAweDI4OTQsCi0JMHgxMTQ4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGVkNmYsIDB4MjExMCwgMHg5MDBlLCAweDA4MGMsCi0JMHgzMjhmLCAweDAwMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMGRlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAwYzYsIDB4MDgwYywgMHhiMTUzLCAweDA1YTgsIDB4MDAxNiwgMHgwMDI2LCAweDAwYzYsCi0JMHgyMDExLCAweDAyNjMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyODk0LCAweDE1NzgsCi0JMHgwODBjLCAweDY2YjIsIDB4MTU2MCwgMHhiZTEyLCAweGJkMTYsIDB4MDBjZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhlYmExLCAweDExZDgsIDB4MDgwYywgMHgzMzZhLCAweDExYzAsCi0JMHgwODBjLCAweGRjNDksIDB4MDUxMCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NjYzLCAweDIwMDEsCi0JMHgwMDA3LCAweDA4MGMsIDB4NjY4ZiwgMHg2MDE3LCAweDAwMDAsIDB4NjAyMywgMHgwMDAxLCAweDYwMDcsCi0JMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDkzODMsIDB4MDgwYywgMHg5OGVkLCAweDAwMTAsCi0JMHgwODBjLCAweGIxMDEsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweDA4MGMsCi0JMHhiMTAxLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDBjYTgsIDB4MDgwYywgMHhiMTAxLCAweDkwMDYsCi0JMHgwYzk4LCAweDIwNjksIDB4MDI2ZCwgMHg2ODAwLCAweDkwODIsIDB4MDAxMCwgMHgxMjI4LCAweDYwMTcsCi0JMHgwMDAwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA4LCAweDkwMDYsIDB4MDAwNSwgMHg2MDE3LCAweDAwMDAsCi0JMHgyMDY5LCAweDAyNmMsIDB4NjgwOCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHgwODAwLCAweDExOTAsCi0JMHg2OTA0LCAweDkxODYsIDB4MDAxOCwgMHgwMTE4LCAweDkxODYsIDB4MDAxNCwgMHgxMTU4LCAweDgxMGYsCi0JMHg2ODAwLCAweDkwODQsIDB4MDBmZiwgMHg5MTBkLCAweDYxNWEsIDB4OTA4ZSwgMHgwMDE0LCAweDAxMTAsCi0JMHg5MDhlLCAweDAwMTAsIDB4MDAwNSwgMHg2MDA0LCAweDkwYjIsIDB4MDA1MywgMHgxYTBjLCAweDBkYzUsCi0JMHg5MWI2LCAweDAwMTMsIDB4MTEzMCwgMHgyMDA4LCAweDkxYjIsIDB4MDA0MCwgMHgxYTA0LCAweGRlNTAsCi0JMHgwNDBhLCAweDkxYjYsIDB4MDAyNywgMHgwMTk4LCAweDkxODYsIDB4MDAxNSwgMHgwMTE4LCAweDkxODYsCi0JMHgwMDE2LCAweDExNDgsIDB4MDgwYywgMHhkNTg3LCAweDAxMjgsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDIsCi0JMHgwOTA0LCAweGJiMjksIDB4MDAwNSwgMHg5MWI2LCAweDAwMTQsIDB4MTkwYywgMHgwZGM1LCAweDIwMDEsCi0JMHgwMDA3LCAweDA4MGMsIDB4NjY4ZiwgMHgwODBjLCAweDk3ZTEsIDB4MDgwYywgMHhiMTM0LCAweDA4MGMsCi0JMHg5OGVkLCAweDAwMDUsIDB4ZGQ3YSwgMHhkZDdjLCAweGRkN2EsIDB4ZGQ3YSwgMHhkZDdhLCAweGRkN2MsCi0JMHhkZDhiLCAweGRlNDksIDB4ZGRjZiwgMHhkZTQ5LCAweGRkZjcsIDB4ZGU0OSwgMHhkZDhiLCAweGRlNDksCi0JMHhkZTQxLCAweGRlNDksIDB4ZGU0MSwgMHhkZTQ5LCAweGRlNDksIDB4ZGQ3YSwgMHhkZDdhLCAweGRkN2EsCi0JMHhkZDdhLCAweGRkN2EsIDB4ZGQ3YSwgMHhkZDdhLCAweGRkN2EsIDB4ZGQ3YSwgMHhkZDdhLCAweGRkN2EsCi0JMHhkZDdjLCAweGRkN2EsIDB4ZGU0OSwgMHhkZDdhLCAweGRkN2EsIDB4ZGU0OSwgMHhkZDdhLCAweGRlNDYsCi0JMHhkZTQ5LCAweGRkN2EsIDB4ZGQ3YSwgMHhkZDdhLCAweGRkN2EsIDB4ZGU0OSwgMHhkZTQ5LCAweGRkN2EsCi0JMHhkZTQ5LCAweGRlNDksIDB4ZGQ3YSwgMHhkZDg2LCAweGRkN2EsIDB4ZGQ3YSwgMHhkZDdhLCAweGRkN2EsCi0JMHhkZTQ1LCAweGRlNDksIDB4ZGQ3YSwgMHhkZDdhLCAweGRlNDksIDB4ZGU0OSwgMHhkZDdhLCAweGRkN2EsCi0JMHhkZDdhLCAweGRkN2EsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweGQ1NzksCi0JMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHg5OGVkLCAweDA4MDQsIDB4ZGU0ZiwgMHg5MDA2LCAweDA4MGMsCi0JMHg2NjRmLCAweDA4MDQsIDB4ZGU0OSwgMHgwODBjLCAweDZhOGEsIDB4MTkwNCwgMHhkZTQ5LCAweDkwMDYsCi0JMHgwODBjLCAweDY2NGYsIDB4NjAxMCwgMHgyMDU4LCAweGI4MTAsIDB4OTA4NiwgMHgwMGZmLCAweDExNDAsCi0JMHgwMGY2LCAweDIwNzksIDB4MTgwMCwgMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwgMHgwMGZlLCAweDAwYjgsCi0JMHg2MDEwLCAweDIwNTgsIDB4YjhjMCwgMHg5MDA1LCAweDA5MDQsIDB4ZGU0OSwgMHgwODBjLCAweDMzOWIsCi0JMHgxOTA0LCAweGRlNDksIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDExMzgsCi0JMHgwMGY2LCAweDIwNzksIDB4MTgwMCwgMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwgMHgwMGZlLCAweDIwMDEsCi0JMHgwMDAyLCAweDA4MGMsIDB4NjY2MywgMHgwODBjLCAweDk3ZTEsIDB4NjAyMywgMHgwMDAxLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDkzODMsIDB4MDgwYywgMHg5OGVkLCAweDYxMTAsCi0JMHgyMTU4LCAweDIwMDksIDB4MDAwMSwgMHgwODBjLCAweDg3MTcsIDB4MDgwNCwgMHhkZTRmLCAweDY2MTAsCi0JMHgyNjU4LCAweGJlMDQsIDB4OTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4OTY4NiwgMHgwMDA2LCAweDAxNDgsCi0JMHg5Njg2LCAweDAwMDQsIDB4MDEzMCwgMHgwODBjLCAweDhlZmEsIDB4MjAwMSwgMHgwMDA0LCAweDA4MGMsCi0JMHg2NjhmLCAweDA4MGMsIDB4ZWRiZSwgMHgwOTA0LCAweGRlNDksIDB4MDgwYywgMHg5N2UxLCAweDIwMDEsCi0JMHgwMDA0LCAweDA4MGMsIDB4NjY2MywgMHg2MDIzLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCi0JMHgwMDAzLCAweDA4MGMsIDB4OTM4MywgMHgwODBjLCAweDk4ZWQsIDB4MDgwNCwgMHhkZTRmLCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDExNTgsIDB4MDAzNiwgMHgwMDQ2LCAweDYwMTAsCi0JMHgyMDU4LCAweGJiYTAsIDB4MjAyMSwgMHgwMDA2LCAweDA4MGMsIDB4NGRhMCwgMHgwMDRlLCAweDAwM2UsCi0JMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHhkZTZkLCAweDY2MTAsIDB4MjY1OCwgMHhiZTA0LCAweDAwNjYsCi0JMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsIDB4MDA2ZSwgMHgwMTgwLCAweDIwMDEsCi0JMHgwMDA2LCAweDA4MGMsIDB4NjY4ZiwgMHg5Mjg0LCAweDAwZmYsIDB4OTA4ZSwgMHgwMDA3LCAweDAxMTgsCi0JMHg5MDhlLCAweDAwMDQsIDB4MTEyMCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NjYzLCAweDA4MGMsCi0JMHg2YThhLCAweDExZjgsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4ZDBhNCwgMHgwMWQwLCAweGJlMDQsCi0JMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxYTAsIDB4MDBmNiwgMHgyMDc5LCAweDE4MDAsCi0JMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwgMHgwMGZlLCAweDA4MDQsIDB4ZGRiNywgMHgyMDAxLCAweDAwMDQsCi0JMHgwMDMwLCAweDIwMDEsIDB4MDAwNiwgMHgwNDQ5LCAweDAwMjAsIDB4MDAxOCwgMHgwMDEwLCAweDA4MGMsCi0JMHg2NjhmLCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweGIxMDEsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsCi0JMHgyNjAwLCAweDAwMDIsIDB4ZGU2NCwgMHhkZTY0LCAweGRlNjQsIDB4ZGU2NCwgMHhkZTY0LCAweGRlNjYsCi0JMHhkZTY0LCAweGRlNjYsIDB4ZGU2NCwgMHhkZTY0LCAweGRlNjYsIDB4ZGU2NCwgMHhkZTY0LCAweGRlNjQsCi0JMHhkZTY2LCAweGRlNjYsIDB4ZGU2NiwgMHhkZTY2LCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweDk3ZTEsCi0JMHgwODBjLCAweGIxMDEsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsIDB4MDAxNiwgMHgwMGI2LCAweDAwZDYsCi0JMHg2MTEwLCAweDIxNTgsIDB4YjkwMCwgMHhkMTg0LCAweDAxMzgsIDB4MDgwYywgMHg2NjYzLCAweDkwMDYsCi0JMHgwODBjLCAweDY2NGYsIDB4MDgwYywgMHgzMjZmLCAweDAwZGUsIDB4MDBiZSwgMHgwMDFlLCAweDAwMDUsCi0JMHg2NjEwLCAweDI2NTgsIDB4YjgwNCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MGIyLCAweDAwMGMsCi0JMHgxYTBjLCAweDBkYzUsIDB4OTFiNiwgMHgwMDE1LCAweDExMTAsIDB4MDAzYiwgMHgwMDI4LCAweDkxYjYsCi0JMHgwMDE2LCAweDE5MGMsIDB4MGRjNSwgMHgwMDZiLCAweDAwMDUsIDB4YmJjYiwgMHhiYmNiLCAweGJiY2IsCi0JMHhiYmNiLCAweGRmMDIsIDB4YmJjYiwgMHhkZWVjLCAweGRlYWQsIDB4YmJjYiwgMHhiYmNiLCAweGJiY2IsCi0JMHhiYmNiLCAweGJiY2IsIDB4YmJjYiwgMHhiYmNiLCAweGJiY2IsIDB4ZGYwMiwgMHhiYmNiLCAweGRlZWMsCi0JMHhkZWYzLCAweGJiY2IsIDB4YmJjYiwgMHhiYmNiLCAweGJiY2IsIDB4MDBmNiwgMHgwODBjLCAweDZhOGEsCi0JMHgxMWQ4LCAweDA4MGMsIDB4ZDU2MSwgMHgxMWMwLCAweDYwMTAsIDB4OTA1ZCwgMHgwMWE4LCAweGI4YzAsCi0JMHg5MDA1LCAweDAxOTAsIDB4OTAwNiwgMHgwODBjLCAweDY2NGYsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCi0JMHg2NjYzLCAweDYwMjMsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsCi0JMHg5MzgzLCAweDA4MGMsIDB4OThlZCwgMHgwMGYwLCAweDIwMTEsIDB4MDI2MywgMHgyMjA0LCAweDgyMTEsCi0JMHgyMjBjLCAweDA4MGMsIDB4Mjg5NCwgMHgxMWIwLCAweDA4MGMsIDB4NjcxZCwgMHgwMTE4LCAweDA4MGMsCi0JMHhiMTAxLCAweDAwODAsIDB4YjgxMCwgMHgwMDA2LCAweGI4MTQsIDB4MDAwNiwgMHhiOGMwLCAweDAwMDYsCi0JMHgwODBjLCAweDYxNDEsIDB4MDAwZSwgMHhiOGMyLCAweDAwMGUsIDB4YjgxNiwgMHgwMDBlLCAweGI4MTIsCi0JMHgwODBjLCAweGIxMDEsIDB4MDBmZSwgMHgwMDA1LCAweDY2MDQsIDB4OTZiNiwgMHgwMDFlLCAweDExMTAsCi0JMHgwODBjLCAweGIxMDEsIDB4MDAwNSwgMHgwODBjLCAweGJmNWEsIDB4MTE0OCwgMHg2MDAzLCAweDAwMDEsCi0JMHg2MDA3LCAweDAwMDEsIDB4MDgwYywgMHg5MzgzLCAweDA4MGMsIDB4OThlZCwgMHgwMDEwLCAweDA4MGMsCi0JMHhiMTAxLCAweDAwMDUsIDB4MDgwNCwgMHhiMTAxLCAweDYwMDQsIDB4OTA4YSwgMHgwMDUzLCAweDFhMGMsCi0JMHgwZGM1LCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweGIxMzQsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsCi0JMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHhkZjI3LCAweGRmMjcsIDB4ZGYyNywgMHhkZjI3LCAweGRmMjksCi0JMHhkZjI3LCAweGRmMjcsIDB4ZGYyNywgMHhkZjI3LCAweGRmMjcsIDB4ZGYyNywgMHhkZjI3LCAweGRmMjcsCi0JMHhkZjI3LCAweGRmMjcsIDB4ZGYyNywgMHhkZjI3LCAweGRmMjcsIDB4ZGYyNywgMHhkZjI3LCAweDA4MGMsCi0JMHgwZGM1LCAweDAwOTYsIDB4MDBiNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwMDQ2LCAweDAwMjYsCi0JMHg2MjEwLCAweDIyNTgsIDB4YjhiYywgMHg5MDA1LCAweDExYTgsIDB4NjEwNiwgMHgyMDcxLCAweDAyNjAsCi0JMHg3NDQ0LCAweDk0YTQsIDB4ZmYwMCwgMHgwOTA0LCAweGRmOGYsIDB4MDgwYywgMHhlZDYzLCAweDExNzAsCi0JMHg5NDg2LCAweDIwMDAsIDB4MTE1OCwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMjAwLCAweDA4MGMsCi0JMHg4OTFjLCAweDAwMjAsIDB4OTAyNiwgMHgwODBjLCAweGViZTYsIDB4MGMzOCwgMHgwODBjLCAweDEwMGUsCi0JMHgwOTBjLCAweDBkYzUsIDB4NjAwMywgMHgwMDA3LCAweGE4NjcsIDB4MDEwZCwgMHg5MDA2LCAweGE4MDIsCi0JMHhhODZhLCAweGFjOGEsIDB4MmMwMCwgMHhhODhlLCAweDYwMDgsIDB4YThlMiwgMHg2MDEwLCAweDIwNTgsCi0JMHhiOGEwLCAweDcxMzAsIDB4YTk3YSwgMHgwMDE2LCAweGE4NzYsIDB4YTg3ZiwgMHgwMDAwLCAweGE4ODMsCi0JMHgwMDAwLCAweGE4ODcsIDB4MDAzNiwgMHgwODBjLCAweDZkZDEsIDB4MDAxZSwgMHgwODBjLCAweGVkNjMsCi0JMHgxOTA0LCAweGRmZWYsIDB4OTQ4NiwgMHgyMDAwLCAweDExMzAsIDB4MjAxOSwgMHgwMDE3LCAweDA4MGMsCi0JMHhlOTE1LCAweDA4MDQsIDB4ZGZlZiwgMHg5NDg2LCAweDAyMDAsIDB4MTEyMCwgMHgwODBjLCAweGU4YWMsCi0JMHgwODA0LCAweGRmZWYsIDB4OTQ4NiwgMHgwNDAwLCAweDAxMjAsIDB4OTQ4NiwgMHgxMDAwLCAweDE5MDQsCi0JMHhkZmVmLCAweDIwMTksIDB4MDAwMiwgMHgwODBjLCAweGU4YzcsIDB4MDgwNCwgMHhkZmVmLCAweDIwNjksCi0JMHgxYTc1LCAweDZhMDAsIDB4ZDI4NCwgMHgwOTA0LCAweGUwNTksIDB4OTI4NCwgMHgwMzAwLCAweDE5MDQsCi0JMHhlMDUyLCAweDY4MDQsIDB4OTAwNSwgMHgwOTA0LCAweGUwM2EsIDB4MmQ3OCwgMHg2MDAzLCAweDAwMDcsCi0JMHgwODBjLCAweDEwMjcsIDB4MDkwNCwgMHhkZmZiLCAweDc4MDAsIDB4ZDA4YywgMHgxMTE4LCAweDc4MDQsCi0JMHg4MDAxLCAweDc4MDYsIDB4NjAxNywgMHgwMDAwLCAweDIwMDEsIDB4MTgwZiwgMHgyMDA0LCAweGQwODQsCi0JMHgxOTA0LCAweGUwNWQsIDB4OTAwNiwgMHhhODAyLCAweGE4NjcsIDB4MDExNiwgMHhhODZhLCAweDYwMDgsCi0JMHhhOGUyLCAweDJjMDAsIDB4YTg3YSwgMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwgMHg3MTMwLCAweGE5YjYsCi0JMHhhODc2LCAweGI5MjgsIDB4YTliYSwgMHhiOTJjLCAweGE5YmUsIDB4YjkzMCwgMHhhOWMyLCAweGI5MzQsCi0JMHhhOWM2LCAweGE4ODMsIDB4MDAzZCwgMHg3MDQ0LCAweDkwODQsIDB4MDAwMywgMHg5MDgwLCAweGRmZjcsCi0JMHgyMDA1LCAweGE4N2UsIDB4MjBhOSwgMHgwMDBhLCAweDIwMDEsIDB4MDI3MCwgMHhhYTVjLCAweDkyOTAsCi0JMHgwMDIxLCAweDIwMDksIDB4MDIwNSwgMHgyMDBiLCAweDAwODAsIDB4MjBlMSwgMHgwMDAwLCAweGFiNjAsCi0JMHgyM2U4LCAweDIwOTgsIDB4MjJhMCwgMHg0MDAzLCAweDIwMGIsIDB4MDAwMCwgMHgyMDAxLCAweDAyN2EsCi0JMHgyMDBjLCAweGE5YjIsIDB4ODAwMCwgMHgyMDBjLCAweGE5YWUsIDB4MDgwYywgMHg2ZGQxLCAweDAwMmUsCi0JMHgwMDRlLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwYmUsIDB4MDA5ZSwgMHgwMDA1LCAweDAwMDAsCi0JMHgwMDgwLCAweDAwNDAsIDB4MDAwMCwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMDg0LCAweDAxMjAsCi0JMHgwODBjLCAweDEwMGUsIDB4MTkwNCwgMHhkZmE0LCAweDYwMTcsIDB4ZjEwMCwgMHg2MDAzLCAweDAwMDEsCi0JMHg2MDA3LCAweDAwNDEsIDB4MDgwYywgMHg5MzNiLCAweDA4MGMsIDB4OThlZCwgMHgwYzAwLCAweDIwNjksCi0JMHgwMjYwLCAweDY4NDgsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsIDB4MTIwMCwgMHgxMTk4LCAweDY4NmMsCi0JMHg5MDg0LCAweDAwZmYsIDB4MDAxNiwgMHg2MTE0LCAweDkxOGMsIDB4ZjcwMCwgMHg5MTBkLCAweDYxMTYsCi0JMHgwMDFlLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwNDMsIDB4MDgwYywgMHg5MzNiLCAweDA4MGMsCi0JMHg5OGVkLCAweDA4MjgsIDB4Njg2OCwgMHg2MDJlLCAweDY4NmMsIDB4NjAzMiwgMHg2MDE3LCAweGYyMDAsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsCi0JMHgwODA0LCAweGRmZWYsIDB4MjAwMSwgMHgxODBlLCAweDIwMDQsIDB4ZDBlYywgMHgwMTIwLCAweDIwMTEsCi0JMHg4MDQ5LCAweDA4MGMsIDB4NGJlOSwgMHg2MDE3LCAweGYzMDAsIDB4MDAxMCwgMHg2MDE3LCAweGYxMDAsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsCi0JMHgwODA0LCAweGRmZWYsIDB4NjAxNywgMHhmNTAwLCAweDBjOTgsIDB4NjAxNywgMHhmNjAwLCAweDA4MDQsCi0JMHhlMDBmLCAweDYwMTcsIDB4ZjIwMCwgMHgwODA0LCAweGUwMGYsIDB4YTg2NywgMHgwMTQ2LCAweGE4NmIsCi0JMHgwMDAwLCAweDYwMDgsIDB4YTg4NiwgMHgyYzAwLCAweGE4N2EsIDB4NzA0NCwgMHg5MDg0LCAweDAwMDMsCi0JMHg5MDgwLCAweGRmZjcsIDB4MjAwNSwgMHhhODdlLCAweDI5MjgsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsCi0JMHhhODc2LCAweGI4MjgsIDB4YTg4YSwgMHhiODJjLCAweGE4OGUsIDB4YjgzMCwgMHhhODkyLCAweGI4MzQsCi0JMHhhODk2LCAweGE4ODMsIDB4MDAzZCwgMHgyMDA5LCAweDAyMDUsIDB4MjEwNCwgMHg5MDg1LCAweDAwODAsCi0JMHgyMDBhLCAweDIwZTEsIDB4MDAwMCwgMHgyMDExLCAweDAyMTAsIDB4MjIxNCwgMHg5Mjk0LCAweDBmZmYsCi0JMHhhYWEyLCAweDkyODIsIDB4MDExMSwgMHgxYTBjLCAweDBkYzUsIDB4ODIxMCwgMHg4MjFjLCAweDIwMDEsCi0JMHgwMjZjLCAweDIwOTgsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDI5LCAweDIwYTAsCi0JMHgyMDExLCAweGUwZDksIDB4MjA0MSwgMHgwMDAxLCAweDIyM2QsIDB4OTc4NCwgMHgwMGZmLCAweDkzMjIsCi0JMHgxMjA4LCAweDIzMDAsIDB4MjBhOCwgMHg0MDAzLCAweDkzMWEsIDB4MDUzMCwgMHg4MjEwLCAweGQ3ZmMsCi0JMHgxMTMwLCAweDhkNjgsIDB4MmQwYSwgMHgyMDAxLCAweDAyNjAsIDB4MjA5OCwgMHgwYzY4LCAweDI5NTAsCi0JMHgwODBjLCAweDEwMjcsIDB4MDE3MCwgMHgyOTAwLCAweGIwMDIsIDB4YTg2NywgMHgwMTQ3LCAweGE4NmIsCi0JMHgwMDAwLCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAxYiwgMHgyMGEwLCAweDg4NDAsCi0JMHgwOGQ4LCAweDI1NDgsIDB4YTgwMCwgMHg5MDJkLCAweDAxMTgsIDB4MDgwYywgMHgxMDQwLCAweDBjYzgsCi0JMHgwODBjLCAweDEwNDAsIDB4MDgwNCwgMHhkZmZiLCAweDI1NDgsIDB4ODg0NywgMHg5ODg1LCAweDAwNDYsCi0JMHhhODY2LCAweDIwMDksIDB4MDIwNSwgMHgyMDBiLCAweDAwMDAsIDB4MDgwYywgMHhlOTQ4LCAweDA4MDQsCi0JMHhkZmVmLCAweDgwMTAsIDB4MDAwNCwgMHg4MDFhLCAweDAwMDYsIDB4ODAxOCwgMHgwMDA4LCAweDgwMTYsCi0JMHgwMDBhLCAweDgwMTQsIDB4OTE4NiwgMHgwMDEzLCAweDExNjAsIDB4NjAwNCwgMHg5MDhhLCAweDAwNTQsCi0JMHgxYTBjLCAweDBkYzUsIDB4OTA4MiwgMHgwMDQwLCAweDBhMGMsIDB4MGRjNSwgMHgyMDA4LCAweDA4MDQsCi0JMHhlMTY4LCAweDkxODYsIDB4MDA1MSwgMHgwMTA4LCAweDAwNDgsIDB4MDgwYywgMHhkNTg3LCAweDA1MDAsCi0JMHg2MDAwLCAweDkwODYsIDB4MDAwMiwgMHgxMWUwLCAweDA4MDQsIDB4ZTFiMSwgMHg5MTg2LCAweDAwMjcsCi0JMHgwMTkwLCAweDkxODYsIDB4MDA0OCwgMHgwMTI4LCAweDkxODYsIDB4MDAxNCwgMHgwMTYwLCAweDE5MGMsCi0JMHgwZGM1LCAweDA4MGMsIDB4ZDU4NywgMHgwMTYwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDA0LCAweDE5MGMsCi0JMHgwZGM1LCAweDA4MDQsIDB4ZTI5NCwgMHg2MDA0LCAweDkwODIsIDB4MDA0MCwgMHgyMDA4LCAweDAwMWEsCi0JMHgwODBjLCAweGIxOWIsIDB4MDAwNSwgMHhlMTJmLCAweGUxMzEsIDB4ZTEzMSwgMHhlMTU4LCAweGUxMmYsCi0JMHhlMTJmLCAweGUxMmYsIDB4ZTEyZiwgMHhlMTJmLCAweGUxMmYsIDB4ZTEyZiwgMHhlMTJmLCAweGUxMmYsCi0JMHhlMTJmLCAweGUxMmYsIDB4ZTEyZiwgMHhlMTJmLCAweGUxMmYsIDB4ZTEyZiwgMHhlMTJmLCAweDA4MGMsCi0JMHgwZGM1LCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweDk4ZWQsIDB4MDAzNiwgMHgwMDk2LCAweDYwMTQsCi0JMHg5MDRkLCAweDAxZDgsIDB4MDgwYywgMHhjZTU2LCAweDAxYzAsIDB4NjAwMywgMHgwMDAyLCAweDYwMTAsCi0JMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MTE3OCwgMHgyMDE5LCAweDAwMDQsCi0JMHgwODBjLCAweGU5NDgsIDB4NjAxNywgMHgwMDAwLCAweDYwMTgsIDB4OTAwNSwgMHgxMTIwLCAweDIwMDEsCi0JMHgxOTg4LCAweDIwMDQsIDB4NjAxYSwgMHg2MDAzLCAweDAwMDcsIDB4MDA5ZSwgMHgwMDNlLCAweDAwMDUsCi0JMHgwMDk2LCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweDk4ZWQsIDB4MDgwYywgMHhjZTU2LCAweDAxMjAsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHgxMDQwLCAweDA4MGMsIDB4YjEzNCwgMHgwMDllLCAweDAwMDUsCi0JMHgwMDAyLCAweGUxN2QsIDB4ZTE5NCwgMHhlMTdmLCAweGUxYWIsIDB4ZTE3ZCwgMHhlMTdkLCAweGUxN2QsCi0JMHhlMTdkLCAweGUxN2QsIDB4ZTE3ZCwgMHhlMTdkLCAweGUxN2QsIDB4ZTE3ZCwgMHhlMTdkLCAweGUxN2QsCi0JMHhlMTdkLCAweGUxN2QsIDB4ZTE3ZCwgMHhlMTdkLCAweGUxN2QsIDB4MDgwYywgMHgwZGM1LCAweDAwOTYsCi0JMHgwODBjLCAweDk3ZTEsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBiNCwgMHgwMTM4LCAweDYwMDMsCi0JMHgwMDA3LCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGIxODAsIDB4MDAxMCwgMHg2MDAzLCAweDAwMDQsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsIDB4OTdlMSwgMHgwODBjLCAweGNlNTYsCi0JMHgwMTM4LCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweGE5N2MsIDB4MDA5ZSwgMHhkMWVjLCAweDExMzgsCi0JMHgwODBjLCAweDg4ZjEsIDB4MDgwYywgMHhiMTAxLCAweDA4MGMsIDB4OThlZCwgMHgwMDA1LCAweDA4MGMsCi0JMHhlYmFhLCAweDBkYjAsIDB4MGNjOCwgMHgwODBjLCAweDk3ZTEsIDB4MjAwOSwgMHgwMDQxLCAweDA4MDQsCi0JMHhlMzFjLCAweDkxODIsIDB4MDA0MCwgMHgwMDAyLCAweGUxYzgsIDB4ZTFjYSwgMHhlMWM4LCAweGUxYzgsCi0JMHhlMWM4LCAweGUxYzgsIDB4ZTFjOCwgMHhlMWM4LCAweGUxYzgsIDB4ZTFjOCwgMHhlMWM4LCAweGUxYzgsCi0JMHhlMWM4LCAweGUxYzgsIDB4ZTFjOCwgMHhlMWM4LCAweGUxYzgsIDB4ZTFjYiwgMHhlMWM4LCAweGUxYzgsCi0JMHgwODBjLCAweDBkYzUsIDB4MDAwNSwgMHgwMGQ2LCAweDA4MGMsIDB4ODhmMSwgMHgwMGRlLCAweDA4MGMsCi0JMHhlYzAyLCAweDA4MGMsIDB4YjEwMSwgMHgwMDA1LCAweDkxODIsIDB4MDA0MCwgMHgwMDAyLCAweGUxZWIsCi0JMHhlMWViLCAweGUxZWIsIDB4ZTFlYiwgMHhlMWViLCAweGUxZWIsIDB4ZTFlYiwgMHhlMWViLCAweGUxZWIsCi0JMHhlMWVkLCAweGUyNWMsIDB4ZTFlYiwgMHhlMWViLCAweGUxZWIsIDB4ZTFlYiwgMHhlMjVjLCAweGUxZWIsCi0JMHhlMWViLCAweGUxZWIsIDB4ZTFlYiwgMHgwODBjLCAweDBkYzUsIDB4MjAwMSwgMHgwMTA1LCAweDIwMDQsCi0JMHg5MDg0LCAweDE4MDAsIDB4MDFjOCwgMHgyMDAxLCAweDAxMzIsIDB4MjAwYywgMHgyMDAxLCAweDAxMzEsCi0JMHgyMDA0LCAweDkxMDUsIDB4MTkwNCwgMHhlMjVjLCAweDIwMDksIDB4MTgwYywgMHgyMTA0LCAweGQwZDQsCi0JMHgwOTA0LCAweGUyNWMsIDB4YzBkNCwgMHgyMDBhLCAweDIwMDksIDB4MDEwNSwgMHgyMTA0LCAweDkwODQsCi0JMHhlN2ZkLCAweDkwODUsIDB4MDAxMCwgMHgyMDBhLCAweDIwMDEsIDB4MTg2NywgMHgyMDA0LCAweGQwZTQsCi0JMHgxNTI4LCAweDYwM2IsIDB4MDAwMCwgMHgwODBjLCAweDk4OWQsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsCi0JMHhhODdjLCAweGQwZmMsIDB4MDE4OCwgMHg5MDhjLCAweDAwMDMsIDB4OTE4ZSwgMHgwMDAyLCAweDA1MDgsCi0JMHgyMDAxLCAweDE4MGMsIDB4MjAwNCwgMHhkMGQ0LCAweDExZTAsIDB4MDgwYywgMHg5YTBmLCAweDIwMDksCi0JMHgwMDQxLCAweDAwOWUsIDB4MDgwNCwgMHhlMzFjLCAweDA4MGMsIDB4OWEwZiwgMHg2MDAzLCAweDAwMDcsCi0JMHg2MDFiLCAweDAwMDAsIDB4MDgwYywgMHg4OGYxLCAweDAwOWUsIDB4MDAwNSwgMHgyMDAxLCAweDAxMDAsCi0JMHgyMDA0LCAweDkwODIsIDB4MDAwNSwgMHgwYWE4LCAweDIwMDEsIDB4MDExZiwgMHgyMDA0LCAweDYwM2EsCi0JMHgwODkwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxZDQsIDB4MjEwMiwgMHhkMWNjLCAweDAxMTAsCi0JMHgwODBjLCAweDJjOTQsIDB4MDgwYywgMHg5YTBmLCAweDYwMTQsIDB4MjA0OCwgMHhhOTdjLCAweGQxZWMsCi0JMHgxMTMwLCAweDA4MGMsIDB4ODhmMSwgMHgwODBjLCAweGIxMDEsIDB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsCi0JMHhlYmFhLCAweDBkYjgsIDB4MDA5ZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxZDQsCi0JMHgyMTAyLCAweDAwMzYsIDB4MDgwYywgMHg5ODlkLCAweDA4MGMsIDB4OWEwZiwgMHg2MDE0LCAweDAwOTYsCi0JMHgyMDQ4LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDAxODgsCi0JMHhhODdjLCAweDkwODQsIDB4MDAwMywgMHg5MDg2LCAweDAwMDIsIDB4MDE0MCwgMHhhOGFjLCAweDYzMzAsCi0JMHg5MzFhLCAweDYzMzIsIDB4YThiMCwgMHg2MzJjLCAweDkzMWIsIDB4NjMyZSwgMHg2MDAzLCAweDAwMDIsCi0JMHgwMDgwLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGU5NDgsIDB4NjAxOCwgMHg5MDA1LCAweDExMjgsCi0JMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg4MDAzLCAweDYwMWEsIDB4NjAxNywgMHgwMDAwLCAweDYwMDMsCi0JMHgwMDA3LCAweDAwOWUsIDB4MDAzZSwgMHgwMDA1LCAweDkxODIsIDB4MDA0MCwgMHgwMDAyLCAweGUyYWIsCi0JMHhlMmFiLCAweGUyYWIsIDB4ZTJhYiwgMHhlMmFiLCAweGUyYWIsIDB4ZTJhYiwgMHhlMmFiLCAweGUyYWQsCi0JMHhlMmFiLCAweGUyYWIsIDB4ZTJhYiwgMHhlMmFiLCAweGUyYWIsIDB4ZTJhYiwgMHhlMmFiLCAweGUyYWIsCi0JMHhlMmFiLCAweGUyYWIsIDB4ZTJmOCwgMHgwODBjLCAweDBkYzUsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsCi0JMHhhODM0LCAweGFhMzgsIDB4NjExMCwgMHgwMGI2LCAweDIxNTgsIDB4YjkwMCwgMHgwMGJlLCAweGQxYmMsCi0JMHgxMTkwLCAweDkyMGQsIDB4MTUxOCwgMHhhODdjLCAweGQwZmMsIDB4MDEyOCwgMHgyMDA5LCAweDAwNDEsCi0JMHgwMDllLCAweDA4MDQsIDB4ZTMxYywgMHg2MDAzLCAweDAwMDcsIDB4NjAxYiwgMHgwMDAwLCAweDA4MGMsCi0JMHg4OGYxLCAweDAwOWUsIDB4MDAwNSwgMHg2MTI0LCAweGQxZjQsIDB4MWQ1OCwgMHgwMDA2LCAweDAwNDYsCi0JMHhhY2FjLCAweDk0MjIsIDB4YTliMCwgMHgyMjAwLCAweDkxMGIsIDB4NjAzMCwgMHg5NDIwLCAweDY0MzIsCi0JMHg2MDJjLCAweDkxMDksIDB4NjEyZSwgMHgwMDRlLCAweDAwMGUsIDB4MDhkOCwgMHg2MTEwLCAweDAwYjYsCi0JMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWJjLCAweDExNzgsIDB4MjAwOSwgMHgxODBlLCAweDIxMGMsCi0JMHhkMTljLCAweDAxMTgsIDB4NjAwMywgMHgwMDA3LCAweDAwMTAsIDB4NjAwMywgMHgwMDA2LCAweDAwZTksCi0JMHgwODBjLCAweDg4ZjMsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMDMsIDB4MDAwMiwgMHgwMDllLCAweDAwMDUsCi0JMHg2MDI0LCAweGQwZjQsIDB4MDEyOCwgMHgwODBjLCAweDE2MDgsIDB4MTkwNCwgMHhlMmFkLCAweDAwMDUsCi0JMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODM0LCAweGE5MzgsIDB4MDA5ZSwgMHg5MTA1LCAweDExMjAsCi0JMHgwODBjLCAweDE2MDgsIDB4MTkwNCwgMHhlMmFkLCAweDAwMDUsIDB4ZDJmYywgMHgwMTQwLCAweDgwMDIsCi0JMHg4MDAwLCAweDgyMTIsIDB4OTI5MSwgMHgwMDAwLCAweDIwMDksIDB4MDAwOSwgMHgwMDEwLCAweDIwMDksCi0JMHgwMDE1LCAweGFhOWEsIDB4YTg5NiwgMHgwMDA1LCAweDkxODIsIDB4MDA0MCwgMHgwMjA4LCAweDAwNjIsCi0JMHg5MTg2LCAweDAwMTMsIDB4MDEyMCwgMHg5MTg2LCAweDAwMTQsIDB4MTkwYywgMHgwZGM1LCAweDYwMjQsCi0JMHhkMGRjLCAweDA5MGMsIDB4MGRjNSwgMHgwMDA1LCAweGUzNDAsIDB4ZTM0YywgMHhlMzU4LCAweGUzNjQsCi0JMHhlMzQwLCAweGUzNDAsIDB4ZTM0MCwgMHhlMzQwLCAweGUzNDcsIDB4ZTM0MiwgMHhlMzQyLCAweGUzNDAsCi0JMHhlMzQwLCAweGUzNDAsIDB4ZTM0MCwgMHhlMzQyLCAweGUzNDAsIDB4ZTM0MiwgMHhlMzQwLCAweGUzNDcsCi0JMHgwODBjLCAweDBkYzUsIDB4NjAyNCwgMHhkMGRjLCAweDA5MGMsIDB4MGRjNSwgMHgwMDA1LCAweDYwMTQsCi0JMHg5MDA1LCAweDE5MGMsIDB4MGRjNSwgMHgwMDA1LCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsCi0JMHg5MzNiLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OThlZCwgMHgwMTJlLCAweDAwMDUsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwODBjLCAweDkzM2IsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDEyZSwgMHgwMDA1LCAweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDJjMTAsCi0JMHgwODBjLCAweDFjMDksIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5M2EwLCAweDA4MGMsCi0JMHg5YTBmLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDM2LCAweDAwOTYsCi0JMHg5MTgyLCAweDAwNDAsIDB4MDAyMywgMHgwMDllLCAweDAwM2UsIDB4MDEyZSwgMHgwMDA1LCAweGUzOTMsCi0JMHhlMzk1LCAweGUzYTcsIDB4ZTNjMSwgMHhlMzkzLCAweGUzOTMsIDB4ZTM5MywgMHhlMzkzLCAweGUzOTMsCi0JMHhlMzkzLCAweGUzOTMsIDB4ZTM5MywgMHhlMzkzLCAweGUzOTMsIDB4ZTM5MywgMHhlMzkzLCAweGUzOTMsCi0JMHhlMzkzLCAweGUzOTMsIDB4ZTM5MywgMHgwODBjLCAweDBkYzUsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsCi0JMHhkMGZjLCAweDAxZjgsIDB4OTA5YywgMHgwMDAzLCAweDkzOWUsIDB4MDAwMywgMHgwMWQwLCAweDYwMDMsCi0JMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg5MzNiLCAweDA4MGMsIDB4OThlZCwgMHgwNDcwLCAweDYwMTQsCi0JMHgyMDQ4LCAweGE4N2MsIDB4ZDBmYywgMHgwMTY4LCAweDkwOWMsIDB4MDAwMywgMHg5MzllLCAweDAwMDMsCi0JMHgwMTQwLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsCi0JMHgwMGUwLCAweDkwMWUsIDB4NjMxNiwgMHg2MzFhLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGU5NDgsCi0JMHgwMGEwLCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsIDB4MGQ5OCwgMHg5MDljLCAweDAwMDMsCi0JMHg5MzllLCAweDAwMDMsIDB4MGQ3MCwgMHg2MDAzLCAweDAwMDMsIDB4NjEwNiwgMHgyYzEwLCAweDA4MGMsCi0JMHgxYzA5LCAweDA4MGMsIDB4OTNhMCwgMHgwODBjLCAweDlhMGYsIDB4MDAwNSwgMHgwODBjLCAweDk3ZTEsCi0JMHg2MTE0LCAweDgxZmYsIDB4MDE1OCwgMHgwMDk2LCAweDIxNDgsIDB4MDgwYywgMHhlZDAwLCAweDAwMzYsCi0JMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHhlOTQ4LCAweDAwM2UsIDB4MDA5ZSwgMHgwODBjLCAweGIxMzQsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwODBjLCAweDk4OWQsIDB4NjExNCwgMHg4MWZmLCAweDAxNTgsCi0JMHgwMDk2LCAweDIxNDgsIDB4MDgwYywgMHhlZDAwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsCi0JMHhlOTQ4LCAweDAwM2UsIDB4MDA5ZSwgMHgwODBjLCAweGIxMzQsIDB4MDgwYywgMHg5YTBmLCAweDAwMDUsCi0JMHg5MTgyLCAweDAwODUsIDB4MDAwMiwgMHhlNDEyLCAweGU0MTAsIDB4ZTQxMCwgMHhlNDFlLCAweGU0MTAsCi0JMHhlNDEwLCAweGU0MTAsIDB4ZTQxMCwgMHhlNDEwLCAweGU0MTAsIDB4ZTQxMCwgMHhlNDEwLCAweGU0MTAsCi0JMHgwODBjLCAweDBkYzUsIDB4NjAwMywgMHgwMDBiLCAweDYxMDYsIDB4MDgwYywgMHg5MzNiLCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5OGVkLCAweDAxMmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwZTYsCi0JMHgwODBjLCAweGViYTEsIDB4MDExOCwgMHgwODBjLCAweGIxMDEsIDB4MDQ1MCwgMHgyMDcxLCAweDAyNjAsCi0JMHg3MjI0LCAweDYyMTYsIDB4MjAwMSwgMHgxODBlLCAweDIwMDQsIDB4ZDBlNCwgMHgwMTUwLCAweDYwMTAsCi0JMHgwMGI2LCAweDIwNTgsIDB4YmNhMCwgMHgwMGJlLCAweDJjMDAsIDB4MjAxMSwgMHgwMTRlLCAweDA4MGMsCi0JMHhiNDIzLCAweDcyMjAsIDB4MDgwYywgMHhlNzlkLCAweDAxMTgsIDB4NjAwNywgMHgwMDg2LCAweDAwNDAsCi0JMHg2MDA3LCAweDAwODcsIDB4NzIyNCwgMHg5Mjk2LCAweGZmZmYsIDB4MTExMCwgMHg2MDA3LCAweDAwODYsCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzNiLCAweDA4MGMsIDB4OThlZCwgMHgwODBjLCAweDlhMGYsCi0JMHgwMGVlLCAweDAwMmUsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsIDB4MTE2MCwgMHg2MDA0LCAweDkwOGEsCi0JMHgwMDg1LCAweDBhMGMsIDB4MGRjNSwgMHg5MDhhLCAweDAwOTIsIDB4MWEwYywgMHgwZGM1LCAweDkwODIsCi0JMHgwMDg1LCAweDAwYTIsIDB4OTE4NiwgMHgwMDI3LCAweDAxMzAsIDB4OTE4NiwgMHgwMDE0LCAweDAxMTgsCi0JMHgwODBjLCAweGIxOWIsIDB4MDA1MCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NjhmLCAweDA4MGMsCi0JMHg5N2UxLCAweDA4MGMsIDB4YjEzNCwgMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHhlNDgzLCAweGU0ODUsCi0JMHhlNDg1LCAweGU0ODMsIDB4ZTQ4MywgMHhlNDgzLCAweGU0ODMsIDB4ZTQ4MywgMHhlNDgzLCAweGU0ODMsCi0JMHhlNDgzLCAweGU0ODMsIDB4ZTQ4MywgMHgwODBjLCAweDBkYzUsIDB4MDgwYywgMHg5N2UxLCAweDA4MGMsCi0JMHhiMTM0LCAweDA4MGMsIDB4OThlZCwgMHgwMDA1LCAweDkxODIsIDB4MDA4NSwgMHgwYTBjLCAweDBkYzUsCi0JMHg5MTgyLCAweDAwOTIsIDB4MWEwYywgMHgwZGM1LCAweDkxODIsIDB4MDA4NSwgMHgwMDAyLCAweGU0YTQsCi0JMHhlNGE0LCAweGU0YTQsIDB4ZTRhNiwgMHhlNGE0LCAweGU0YTQsIDB4ZTRhNCwgMHhlNGE0LCAweGU0YTQsCi0JMHhlNGE0LCAweGU0YTQsIDB4ZTRhNCwgMHhlNGE0LCAweDA4MGMsIDB4MGRjNSwgMHgwMDA1LCAweDkxODYsCi0JMHgwMDEzLCAweDAxNDgsIDB4OTE4NiwgMHgwMDE0LCAweDAxMzAsIDB4OTE4NiwgMHgwMDI3LCAweDAxMTgsCi0JMHgwODBjLCAweGIxOWIsIDB4MDAzMCwgMHgwODBjLCAweDk3ZTEsIDB4MDgwYywgMHhiMTM0LCAweDA4MGMsCi0JMHg5OGVkLCAweDAwMDUsIDB4MDAzNiwgMHgwODBjLCAweGVjMDIsIDB4NjA0MywgMHgwMDAwLCAweDIwMTksCi0JMHgwMDBiLCAweDAwMzEsIDB4NjAyMywgMHgwMDA2LCAweDYwMDMsIDB4MDAwNywgMHgwMDNlLCAweDAwMDUsCi0JMHgwMTI2LCAweDAwMzYsIDB4MjA5MSwgMHg4MDAwLCAweDAwODYsIDB4MmM0MCwgMHgwMDk2LCAweDkwNGUsCi0JMHgwODBjLCAweGE5MjksIDB4MDA5ZSwgMHgwMDhlLCAweDE1NTAsIDB4MDA3NiwgMHgyYzM4LCAweDA4MGMsCi0JMHhhOWQ0LCAweDAwN2UsIDB4MTUyMCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwNTAwLCAweDYwMjAsCi0JMHg5MDg2LCAweDAwMDcsIDB4MDFlMCwgMHgwMDk2LCAweDYwMWMsIDB4ZDA4NCwgMHgwMTQwLCAweDA4MGMsCi0JMHhlYzAyLCAweDA4MGMsIDB4ZDU3OSwgMHgwODBjLCAweDFhYjcsIDB4NjAyMywgMHgwMDA3LCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NiwgMHgwMTEwLCAweDA4MGMsIDB4ZTk0OCwgMHgwMDllLCAweDYwMTcsCi0JMHgwMDAwLCAweDA4MGMsIDB4ZWMwMiwgMHg2MDIzLCAweDAwMDcsIDB4MDgwYywgMHhkNTc5LCAweDAwM2UsCi0JMHgwMTJlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGM2LCAweDAwYjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwNzksCi0JMHgwMjYwLCAweDc5MzgsIDB4NzgzYywgMHgwODBjLCAweDI4OTQsIDB4MTkwNCwgMHhlNTU4LCAweDAwMTYsCi0JMHgwMGM2LCAweDA4MGMsIDB4NjcxZCwgMHgxOTA0LCAweGU1NTYsIDB4MDAxZSwgMHgwMGM2LCAweDA4MGMsCi0JMHhkNTYxLCAweDExMzAsIDB4YjhjMCwgMHg5MDA1LCAweDAxMTgsIDB4MDgwYywgMHgzMzliLCAweDAxNDgsCi0JMHgyYjEwLCAweDIxNjAsIDB4NjAxMCwgMHgwMDA2LCAweDYyMTIsIDB4MDgwYywgMHhkNTY4LCAweDAwMGUsCi0JMHg2MDEyLCAweDAwY2UsIDB4MDAyZSwgMHgwMDI2LCAweDAwMTYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsCi0JMHhhYTlhLCAweDA4MGMsIDB4OTRlMCwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5M2IzLCAweDAwN2UsCi0JMHgwMDFlLCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweGU2OTAsIDB4MDA3ZSwgMHgwMDI2LCAweGJhMDQsCi0JMHg5Mjk0LCAweGZmMDAsIDB4ODIxNywgMHg5Mjg2LCAweDAwMDYsIDB4MDExOCwgMHg5Mjg2LCAweDAwMDQsCi0JMHgxMTE4LCAweGJhYTAsIDB4MDgwYywgMHgzMzA0LCAweDAwMmUsIDB4YmNjMCwgMHgwMDFlLCAweDA4MGMsCi0JMHg2MTQxLCAweGJlMTIsIDB4YmQxNiwgMHhiY2MyLCAweDkwMDYsIDB4MDAxMCwgMHgwMGNlLCAweDAwMWUsCi0JMHgwMTVlLCAweDAwM2UsIDB4MDBiZSwgMHgwMGNlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGI2LCAweDAwMTYsIDB4MjAwOSwgMHgxODI0LCAweDIxMDQsIDB4OTA4NiwgMHgwMDc0LCAweDE5MDQsCi0JMHhlNWI3LCAweDIwNjksIDB4MDI2MCwgMHg2OTQ0LCAweDkxODIsIDB4MDEwMCwgMHgwNmUwLCAweDY5NDAsCi0JMHg5MTg0LCAweDgwMDAsIDB4MDkwNCwgMHhlNWI0LCAweDIwMDEsIDB4MTk3ZCwgMHgyMDA0LCAweDkwMDUsCi0JMHgxMTQwLCAweDYwMTAsIDB4MjA1OCwgMHhiOGMwLCAweDkwMDUsIDB4MDExOCwgMHg5MTg0LCAweDA4MDAsCi0JMHgwNTk4LCAweDY5NDgsIDB4OTE4YSwgMHgwMDAxLCAweDA2NDgsIDB4MDgwYywgMHhlZDY4LCAweDAxMTgsCi0JMHg2OTc4LCAweGQxZmMsIDB4MTFiOCwgMHgyMDA5LCAweDAyMDUsIDB4MjAwYiwgMHgwMDAxLCAweDY5M2MsCi0JMHg4MWZmLCAweDExOTgsIDB4Njk0NCwgMHg5MTgyLCAweDAxMDAsIDB4MDJhOCwgMHg2OTQwLCAweDgxZmYsCi0JMHgxMTc4LCAweDY5NDgsIDB4OTE4YSwgMHgwMDAxLCAweDAyODgsIDB4Njk1MCwgMHg5MThhLCAweDAwMDEsCi0JMHgwMjk4LCAweDAwZDAsIDB4NjAxNywgMHgwMTAwLCAweDAwYTAsIDB4NjAxNywgMHgwMzAwLCAweDAwODgsCi0JMHg2MDE3LCAweDA1MDAsIDB4MDA3MCwgMHg2MDE3LCAweDA3MDAsIDB4MDA1OCwgMHg2MDE3LCAweDA5MDAsCi0JMHgwMDQwLCAweDYwMTcsIDB4MGIwMCwgMHgwMDI4LCAweDYwMTcsIDB4MGYwMCwgMHgwMDEwLCAweDYwMTcsCi0JMHgyZDAwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA4LCAweDkwMDYsIDB4MDAxZSwgMHgwMGJlLCAweDAwZGUsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGI2LCAweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDYyMTAsCi0JMHgyMjU4LCAweGJiMDQsIDB4OTM5NCwgMHgwMGZmLCAweDkyODYsIDB4MDAwNiwgMHgwMTgwLCAweDkyODYsCi0JMHgwMDA0LCAweDAxNjgsIDB4OTM5NCwgMHhmZjAwLCAweDgyMTcsIDB4OTI4NiwgMHgwMDA2LCAweDAxMzgsCi0JMHg5Mjg2LCAweDAwMDQsIDB4MDEyMCwgMHgwODBjLCAweDY3MmMsIDB4MDgwNCwgMHhlNjFmLCAweDIwMTEsCi0JMHgwMjc2LCAweDIwYTksIDB4MDAwNCwgMHgwMDk2LCAweDJiNDgsIDB4MjAxOSwgMHgwMDBhLCAweDA4MGMsCi0JMHhjMGY3LCAweDAwOWUsIDB4MTVhOCwgMHgyMDExLCAweDAyN2EsIDB4MjBhOSwgMHgwMDA0LCAweDAwOTYsCi0JMHgyYjQ4LCAweDIwMTksIDB4MDAwNiwgMHgwODBjLCAweGMwZjcsIDB4MDA5ZSwgMHgxNTQ4LCAweDAwNDYsCi0JMHgwMDE2LCAweGJhYTAsIDB4MjIyMCwgMHg5MDA2LCAweDIwMDksIDB4MTg0OCwgMHgyMTBjLCAweGQxYTQsCi0JMHgwMTM4LCAweDIwMDksIDB4MDAyOSwgMHgwODBjLCAweGU5YTUsIDB4YjgwMCwgMHhjMGU1LCAweGI4MDIsCi0JMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg5NGUwLCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsCi0JMHg5M2IzLCAweDJjMDgsIDB4MDgwYywgMHhlNjkwLCAweDAwN2UsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsCi0JMHg2NjhmLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDY2NjMsIDB4MDAxZSwgMHgwMDRlLCAweDkwMDYsCi0JMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMGJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksCi0JMHgwMjZlLCAweDY4MDAsIDB4OTA4NiwgMHgwODAwLCAweDAxMTgsIDB4NjAxNywgMHgwMDAwLCAweDAwMDgsCi0JMHg5MDA2LCAweDAwZGUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZjYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMTU2LCAweDIwNzksIDB4MDI2YywgMHg3OTMwLCAweDc4MzQsIDB4MDgwYywgMHgyODk0LCAweDExZDAsCi0JMHgwODBjLCAweDY3MWQsIDB4MTFiOCwgMHgyMDExLCAweDAyNzAsIDB4MjBhOSwgMHgwMDA0LCAweDAwOTYsCi0JMHgyYjQ4LCAweDIwMTksIDB4MDAwYSwgMHgwODBjLCAweGMwZjcsIDB4MDA5ZSwgMHgxMTU4LCAweDIwMTEsCi0JMHgwMjc0LCAweDIwYTksIDB4MDAwNCwgMHgwMDk2LCAweDJiNDgsIDB4MjAxOSwgMHgwMDA2LCAweDA4MGMsCi0JMHhjMGY3LCAweDAwOWUsIDB4MDE1ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMGZlLCAweDAwYmUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwMTEsCi0JMHgwMjYzLCAweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDA4MGMsIDB4Mjg5NCwgMHgxMWQwLCAweDA4MGMsCi0JMHg2NzFkLCAweDExYjgsIDB4MjAxMSwgMHgwMjc2LCAweDIwYTksIDB4MDAwNCwgMHgwMDk2LCAweDJiNDgsCi0JMHgyMDE5LCAweDAwMGEsIDB4MDgwYywgMHhjMGY3LCAweDAwOWUsIDB4MTE1OCwgMHgyMDExLCAweDAyN2EsCi0JMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwgMHgyYjQ4LCAweDIwMTksIDB4MDAwNiwgMHgwODBjLCAweGMwZjcsCi0JMHgwMDllLCAweDAxNWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMGU2LCAweDAwYzYsIDB4MDA4NiwgMHgwMDc2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyNzQwLCAweDIwMjksIDB4MTlmMiwgMHgyNTJjLCAweDIwMjEsCi0JMHgxOWY4LCAweDI0MjQsIDB4MjA2MSwgMHgxY2QwLCAweDIwNzEsIDB4MTgwMCwgMHg3NjU0LCAweDcwNzQsCi0JMHg4MWZmLCAweDAxNTAsIDB4MDAwNiwgMHg5MTg2LCAweDFhYjgsIDB4MDAwZSwgMHgwMTI4LCAweDgwMDEsCi0JMHg5NjAyLCAweDFhMDQsIDB4ZTcyZSwgMHgwMDE4LCAweDk2MDYsIDB4MDkwNCwgMHhlNzJlLCAweDA4MGMsCi0JMHg4YmMzLCAweDA5MDQsIDB4ZTcyNSwgMHgyMTAwLCAweDljMDYsIDB4MDkwNCwgMHhlNzI1LCAweDY3MjAsCi0JMHg5Nzg2LCAweDAwMDcsIDB4MDkwNCwgMHhlNzI1LCAweDA4MGMsIDB4ZTllNiwgMHgxOTA0LCAweGU3MjUsCi0JMHgwODBjLCAweGVkODYsIDB4MDkwNCwgMHhlNzI1LCAweDA4MGMsIDB4ZTlkNiwgMHgwOTA0LCAweGU3MjUsCi0JMHg2NzIwLCAweDk3ODYsIDB4MDAwMSwgMHgxMTQ4LCAweDA4MGMsIDB4MzM5YiwgMHgwOTA0LCAweGU3NmQsCi0JMHg2MDA0LCAweDkwODYsIDB4MDAwMCwgMHgxOTA0LCAweGU3NmQsIDB4OTc4NiwgMHgwMDA0LCAweDA5MDQsCi0JMHhlNzZkLCAweDI1MDAsIDB4OWMwNiwgMHgwOTA0LCAweGU3MjUsIDB4MjQwMCwgMHg5YzA2LCAweDA1ZTgsCi0JMHg4OGZmLCAweDAxMTgsIDB4NjA1NCwgMHg5OTA2LCAweDE1YzAsIDB4MDA5NiwgMHg2MDAwLCAweDkwODYsCi0JMHgwMDA0LCAweDExMjAsIDB4MDAxNiwgMHgwODBjLCAweDFhYjcsIDB4MDAxZSwgMHg5Nzg2LCAweDAwMGEsCi0JMHgwMTQ4LCAweDA4MGMsIDB4ZDA1ZSwgMHgxMTMwLCAweDA4MGMsIDB4YmFlMiwgMHgwMDllLCAweDA4MGMsCi0JMHhiMTM0LCAweDA0MTgsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2U1NiwgMHgwMWQ4LCAweDk3ODYsCi0JMHgwMDAzLCAweDE1NzAsIDB4YTg2NywgMHgwMTAzLCAweGE4N2MsIDB4ZDBjYywgMHgwMTMwLCAweDAwOTYsCi0JMHhhODc4LCAweDIwNDgsIDB4MDgwYywgMHgwZmMwLCAweDAwOWUsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsCi0JMHgwODBjLCAweGVkMDAsIDB4MDAxNiwgMHgwODBjLCAweGQxNGMsIDB4MDgwYywgMHg2ZGM0LCAweDAwMWUsCi0JMHgwODBjLCAweGQwNDEsIDB4MDA5ZSwgMHgwODBjLCAweGIxMzQsIDB4OWNlMCwgMHgwMDE4LCAweDIwMDEsCi0JMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxMjEwLCAweDA4MDQsIDB4ZTZhNCwgMHgwMTJlLCAweDAwMmUsCi0JMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwOGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsCi0JMHg5Nzg2LCAweDAwMDYsIDB4MTE1MCwgMHg5Mzg2LCAweDAwMDUsIDB4MDEyOCwgMHgwODBjLCAweGVkMDAsCi0JMHgwODBjLCAweGU5NDgsIDB4MDhmOCwgMHgwMDllLCAweDBjMDAsIDB4OTc4NiwgMHgwMDA5LCAweDExZjgsCi0JMHg2MDAwLCAweDkwODYsIDB4MDAwNCwgMHgwMWMwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAzLCAweDExYTAsCi0JMHgwODBjLCAweDk4OWQsIDB4MDA5NiwgMHg2MTE0LCAweDIxNDgsIDB4MDgwYywgMHhjZTU2LCAweDAxMTgsCi0JMHg2MDEwLCAweDA4MGMsIDB4NmRkMSwgMHgwMDllLCAweDAwYzYsIDB4MDgwYywgMHhiMTAxLCAweDAwY2UsCi0JMHgwMDM2LCAweDA4MGMsIDB4OWEwZiwgMHgwMDNlLCAweDAwOWUsIDB4MDgwNCwgMHhlNzI1LCAweDk3ODYsCi0JMHgwMDBhLCAweDA5MDQsIDB4ZTcxNSwgMHgwODA0LCAweGU3MGEsIDB4ODFmZiwgMHgwOTA0LCAweGU3MjUsCi0JMHg5MTgwLCAweDAwMDEsIDB4MjAwNCwgMHg5MDg2LCAweDAwMTgsIDB4MDEzOCwgMHg5MTgwLCAweDAwMDEsCi0JMHgyMDA0LCAweDkwODYsIDB4MDAyZCwgMHgxOTA0LCAweGU3MjUsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDIsCi0JMHgxOTA0LCAweGU3MjUsIDB4MDgwYywgMHhkMDRkLCAweDAxMzgsIDB4MDgwYywgMHhkMDVlLCAweDE5MDQsCi0JMHhlNzI1LCAweDA4MGMsIDB4YmFlMiwgMHgwMDM4LCAweDA4MGMsIDB4MzI2ZiwgMHgwODBjLCAweGQwNWUsCi0JMHgxMTEwLCAweDA4MGMsIDB4YmFlMiwgMHgwODBjLCAweGIxMzQsIDB4MDgwNCwgMHhlNzI1LCAweGE4NjQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM5LCAweDAwMDUsIDB4MDBjNiwgMHgwMGU2LCAweDAwMTYsCi0JMHgyYzA4LCAweDIxNzAsIDB4OTAwNiwgMHgwODBjLCAweGU5NmYsIDB4MDAxZSwgMHgwMTIwLCAweDYwMjAsCi0JMHg5MDg0LCAweDAwMGYsIDB4MDAxYiwgMHgwMGVlLCAweDAwY2UsIDB4MDAwNSwgMHhlN2JjLCAweGU3YmMsCi0JMHhlN2JjLCAweGU3YmMsIDB4ZTdiYywgMHhlN2JjLCAweGU3YmUsIDB4ZTdiYywgMHhlN2JjLCAweGU3YmMsCi0JMHhlN2U3LCAweGIxMzQsIDB4YjEzNCwgMHhlN2JjLCAweDkwMDYsIDB4MDAwNSwgMHgwMDM2LCAweDAwNDYsCi0JMHgwMDE2LCAweDcwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGJjYTAsIDB4MDBiZSwgMHgyYzAwLCAweDIwMDksCi0JMHgwMDIwLCAweDA4MGMsIDB4ZTlhNSwgMHgwMDFlLCAweDAwNGUsIDB4MjAxOSwgMHgwMDAyLCAweDA4MGMsCi0JMHhlNGM4LCAweDAwM2UsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDA5NiwgMHgwODBjLCAweGNlNTYsCi0JMHgwMTQwLCAweDYwMTQsIDB4OTA0ZCwgMHgwODBjLCAweGNhNzEsIDB4Njg3YiwgMHgwMDA1LCAweDA4MGMsCi0JMHg2ZGQxLCAweDAwOWUsIDB4MDgwYywgMHhiMTM0LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwMTksCi0JMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDBkYzUsCi0JMHgwMDBiLCAweDAwMDUsIDB4ZTgwMiwgMHhlODAyLCAweGU4MTksIDB4ZTgwOSwgMHhlODI4LCAweGU4MDIsCi0JMHhlODAyLCAweGU4MDQsIDB4ZTgwMiwgMHhlODAyLCAweGU4MDIsIDB4ZTgwMiwgMHhlODAyLCAweGU4MDIsCi0JMHhlODAyLCAweGU4MDIsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4YjEzNCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAwMzYsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZTksIDB4NzAzYywgMHg5YzA2LCAweDExMjgsCi0JMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhODc3LCAweDAwMTAsIDB4MDgwYywgMHhhYTU5LCAweDAwZWUsCi0JMHgwMDNlLCAweDAwOTYsIDB4MDBkNiwgMHg2MDE0LCAweDIwNDgsIDB4YTg3YiwgMHgwMDA1LCAweDA4MGMsCi0JMHg2ZGQxLCAweDA4MGMsIDB4YjEzNCwgMHgwMGRlLCAweDAwOWUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHg2MDFjLCAweGQwODQsIDB4MTkwYywgMHgxYWI3LCAweDBjNjAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCi0JMHg2NjRmLCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksCi0JMHgxODA1LCAweDIwMTEsIDB4MDI3NiwgMHgwODBjLCAweGMwZTMsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMTVlLCAweDkwMDUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgwMDg2LCAweDAwNzYsCi0JMHgwMDY2LCAweDAwYjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4Mjc0MCwgMHgyMDYxLCAweDFjZDAsCi0JMHgyMDc5LCAweDAwMDEsIDB4OGZmZiwgMHgwOTA0LCAweGU4OWYsIDB4MjA3MSwgMHgxODAwLCAweDc2NTQsCi0JMHg3MDc0LCAweDgwMDEsIDB4OTYwMiwgMHgxYTA0LCAweGU4OWYsIDB4ODhmZiwgMHgwMTIwLCAweDI4MDAsCi0JMHg5YzA2LCAweDE1YTAsIDB4MjA3OCwgMHgwODBjLCAweGU5ZDYsIDB4MDU4MCwgMHgyNDAwLCAweDljMDYsCi0JMHgwNTY4LCAweDY3MjAsIDB4OTc4NiwgMHgwMDA2LCAweDE1NDgsIDB4OTc4NiwgMHgwMDA3LCAweDA1MzAsCi0JMHg4OGZmLCAweDExNTAsIDB4ZDU4YywgMHgxMTE4LCAweDYwMTAsIDB4OWIwNiwgMHgxMWY4LCAweGQ1ODQsCi0JMHgwMTE4LCAweDYwNTQsIDB4OTEwNiwgMHgxMWQwLCAweDAwOTYsIDB4NjAxYywgMHhkMDg0LCAweDAxNDAsCi0JMHgwODBjLCAweGVjMDIsIDB4MDgwYywgMHhkNTc5LCAweDA4MGMsIDB4MWFiNywgMHg2MDIzLCAweDAwMDcsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZTU2LCAweDAxMjAsIDB4MDA0NiwgMHgwODBjLCAweGU5NDgsCi0JMHgwMDRlLCAweDAwOWUsIDB4MDgwYywgMHhiMTM0LCAweDg4ZmYsIDB4MTE5OCwgMHg5Y2UwLCAweDAwMTgsCi0JMHgyMDAxLCAweDE4MWEsIDB4MjAwNCwgMHg5YzAyLCAweDEyMTAsIDB4MDgwNCwgMHhlODUyLCAweDkwMDYsCi0JMHgwMTJlLCAweDAwYmUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwOGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDk4YzUsIDB4MDAwMSwgMHgwY2EwLCAweDAwYjYsIDB4MDA3NiwgMHgwMDU2LCAweDAwODYsCi0JMHg5MDQ2LCAweDIwMjksIDB4MDAwMSwgMHgyYzIwLCAweDIwMTksIDB4MDAwMiwgMHg2MjEwLCAweDIyNTgsCi0JMHgwMDk2LCAweDkwNGUsIDB4MDgwYywgMHhhOTI5LCAweDAwOWUsIDB4MDA4ZSwgMHg5MDNlLCAweDA4MGMsCi0JMHhhOWQ0LCAweDA4MGMsIDB4ZTg0MywgMHgwMDVlLCAweDAwN2UsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMDQ2LCAweDAwNTYsIDB4MDA3NiwgMHgwMGM2LCAweDAxNTYsIDB4MmMyMCwgMHgyMTI4LCAweDIwYTksCi0JMHgwMDdmLCAweDkwMGUsIDB4MDAxNiwgMHgwMDM2LCAweDA4MGMsIDB4NjcxZCwgMHgxMTgwLCAweDAwNTYsCi0JMHgwMDg2LCAweDkwNDYsIDB4MjUwOCwgMHgyMDI5LCAweDAwMDEsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsCi0JMHhhOTI5LCAweDAwOWUsIDB4MDA4ZSwgMHg5MDNlLCAweDA4MGMsIDB4YTlkNCwgMHgwMDVlLCAweDAwM2UsCi0JMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHhlOGQyLCAweDAwMzYsIDB4MjUwOCwgMHgyMDI5LCAweDAwMDMsCi0JMHgwODBjLCAweGU4NDMsIDB4MDAzZSwgMHgwMTVlLCAweDAwY2UsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsCi0JMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMDc2LCAweDAwNTYsIDB4NjIxMCwgMHgyMjU4LCAweDAwODYsCi0JMHg5MDQ2LCAweDIwMjksIDB4MDAwMSwgMHgyMDE5LCAweDAwNDgsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsCi0JMHhhOTI5LCAweDAwOWUsIDB4MDA4ZSwgMHg5MDNlLCAweDA4MGMsIDB4YTlkNCwgMHgyYzIwLCAweDA4MGMsCi0JMHhlODQzLCAweDAwNWUsIDB4MDA3ZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMDQ2LCAweDAwNTYsCi0JMHgwMDc2LCAweDAwYzYsIDB4MDE1NiwgMHgyYzIwLCAweDIwYTksIDB4MDgwMCwgMHg5MDBlLCAweDAwMTYsCi0JMHgwMDM2LCAweDA4MGMsIDB4NjcxZCwgMHgxMTkwLCAweDAwODYsIDB4OTA0NiwgMHgyODI4LCAweDAwNDYsCi0JMHgyMDIxLCAweDAwMDEsIDB4MDgwYywgMHhlYmU2LCAweDAwNGUsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsCi0JMHhhOTI5LCAweDAwOWUsIDB4MDA4ZSwgMHg5MDNlLCAweDA4MGMsIDB4YTlkNCwgMHgwMDNlLCAweDAwMWUsCi0JMHg4MTA4LCAweDFmMDQsIDB4ZTkxZiwgMHgwMDM2LCAweDIwMjksIDB4MDAwMiwgMHgwODBjLCAweGU4NDMsCi0JMHgwMDNlLCAweDAxNWUsIDB4MDBjZSwgMHgwMDdlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwZjYsIDB4MDgwYywgMHhjZTU0LCAweDAxOTgsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwNDYsIDB4MDE4MCwgMHhhODAwLCAweDkwN2QsIDB4MDEzOCwgMHhhODAzLCAweDAwMDAsCi0JMHhhYjgyLCAweDA4MGMsIDB4NmRkMSwgMHgyZjQ4LCAweDBjYjAsIDB4YWI4MiwgMHgwODBjLCAweDZkZDEsCi0JMHgwMGZlLCAweDAwMWUsIDB4MDAwNSwgMHhhODAwLCAweDkwN2QsIDB4MDEzMCwgMHhhODAzLCAweDAwMDAsCi0JMHgwODBjLCAweDZkZDEsIDB4MmY0OCwgMHgwY2I4LCAweDA4MGMsIDB4NmRkMSwgMHgwYzg4LCAweDAwZTYsCi0JMHgwMDQ2LCAweDAwMzYsIDB4MjA2MSwgMHgxY2QwLCAweDkwMDUsIDB4MTEzOCwgMHgyMDcxLCAweDE4MDAsCi0JMHg3NDU0LCAweDcwNzQsIDB4ODAwMSwgMHg5NDAyLCAweDEyZjgsIDB4MjEwMCwgMHg5YzA2LCAweDAxODgsCi0JMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTY4LCAweDYwMDgsIDB4OTIwNiwgMHgxMTUwLCAweDYzMjAsCi0JMHg5Mzg2LCAweDAwMDksIDB4MDFiMCwgMHg2MDEwLCAweDkxYTAsIDB4MDAwNCwgMHgyNDI0LCAweDk0MDYsCi0JMHgwMTQwLCAweDljZTAsIDB4MDAxOCwgMHgyMDAxLCAweDE4MWEsIDB4MjAwNCwgMHg5YzAyLCAweDEyMjAsCi0JMHgwYzIwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA4LCAweDkwMDYsIDB4MDAzZSwgMHgwMDRlLCAweDAwZWUsCi0JMHgwMDA1LCAweDYzMWMsIDB4ZDNjNCwgMHgxZDY4LCAweDBjMzAsIDB4MDA5NiwgMHgwMDA2LCAweDA4MGMsCi0JMHgxMDBlLCAweDAwMGUsIDB4MDkwYywgMHgwZGM1LCAweGFhZTIsIDB4YTg2NywgMHgwMTBkLCAweGE4OGUsCi0JMHgwMDI2LCAweDIwMTAsIDB4MDgwYywgMHhjZTQ0LCAweDIwMDEsIDB4MDAwMCwgMHgwMTIwLCAweDIyMDAsCi0JMHg5MDgwLCAweDAwMTUsIDB4MjAwNCwgMHgwMDJlLCAweGE4N2EsIDB4OTE4NiwgMHgwMDIwLCAweDAxMTAsCi0JMHhhOGUzLCAweGZmZmYsIDB4YTk4NiwgMHhhYzc2LCAweGE4N2YsIDB4MDAwMCwgMHgyMDAxLCAweDE5OGYsCi0JMHgyMDA0LCAweGE4ODIsIDB4OTAwNiwgMHhhODAyLCAweGE4NmEsIDB4YTg4YSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4NmRkMSwgMHgwMTJlLCAweDAwOWUsIDB4MDAwNSwgMHg2NzAwLCAweDk3ODYsCi0JMHgwMDAwLCAweDAxNTgsIDB4OTc4NiwgMHgwMDAxLCAweDAxNDAsIDB4OTc4NiwgMHgwMDBhLCAweDAxMjgsCi0JMHg5Nzg2LCAweDAwMDksIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMGU2LCAweDYwMTAsCi0JMHg5MDc1LCAweDAxMzgsIDB4MDBiNiwgMHgyMDU4LCAweGI4YTAsIDB4MDBiZSwgMHg5MjA2LCAweDAwZWUsCi0JMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwY2Q4LCAweDAwMTYsIDB4NjAwNCwgMHg5MDhlLCAweDAwMWUsCi0JMHgxMWEwLCAweDgwMDcsIDB4NjEzNCwgMHg5MThjLCAweDAwZmYsIDB4OTEwNSwgMHg2MDM2LCAweDYwMDcsCi0JMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDIzLCAweDAwMDUsIDB4MjAwMSwgMHgxOTg4LCAweDIwMDQsCi0JMHg2MDFhLCAweDA4MGMsIDB4OTMzYiwgMHgwODBjLCAweDk4ZWQsIDB4MDAxZSwgMHgwMDA1LCAweGEwMDEsCi0JMHhhMDAxLCAweDAwMDUsIDB4NjAyNCwgMHhkMGU0LCAweDAxNTgsIDB4ZDBjYywgMHgwMTE4LCAweDA4MGMsCi0JMHhkMTkwLCAweDAwMzAsIDB4MDgwYywgMHhlYzAyLCAweDA4MGMsIDB4ODhmMSwgMHgwODBjLCAweGIxMDEsCi0JMHgwMDA1LCAweDkyODAsIDB4MDAwOCwgMHgyMDA0LCAweDkwODQsIDB4MDAwZiwgMHgwMDAyLCAweGVhMzUsCi0JMHhlYTM1LCAweGVhMzUsIDB4ZWEzNywgMHhlYTM1LCAweGVhMzcsIDB4ZWEzNywgMHhlYTM1LCAweGVhMzcsCi0JMHhlYTM1LCAweGVhMzUsIDB4ZWEzNSwgMHhlYTM1LCAweGVhMzUsIDB4OTAwNiwgMHgwMDA1LCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4OTI4MCwgMHgwMDA4LCAweDIwMDQsIDB4OTA4NCwgMHgwMDBmLCAweDAwMDIsCi0JMHhlYTRlLCAweGVhNGUsIDB4ZWE0ZSwgMHhlYTRlLCAweGVhNGUsIDB4ZWE0ZSwgMHhlYTViLCAweGVhNGUsCi0JMHhlYTRlLCAweGVhNGUsIDB4ZWE0ZSwgMHhlYTRlLCAweGVhNGUsIDB4ZWE0ZSwgMHg2MDA3LCAweDAwM2IsCi0JMHg2MDJmLCAweDAwMDksIDB4NjAxNywgMHgyYTAwLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDkzM2IsCi0JMHgwODBjLCAweDk4ZWQsIDB4MDAwNSwgMHgwMDk2LCAweDAwYzYsIDB4MjI2MCwgMHgwODBjLCAweGVjMDIsCi0JMHg2MDQzLCAweDAwMDAsIDB4NjAyNCwgMHhjMGY0LCAweGMwZTQsIDB4NjAyNiwgMHg2MDNiLCAweDAwMDAsCi0JMHgwMGNlLCAweDAwZDYsIDB4MjI2OCwgMHg5MTg2LCAweDAwMDcsIDB4MTkwNCwgMHhlYWI0LCAweDY4MTQsCi0JMHg5MDA1LCAweDAxMzgsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsIDB4MTExOCwgMHgwMGRlLCAweDAwOWUsCi0JMHgwOGE4LCAweDYwMDcsIDB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5MzNiLCAweDA4MGMsCi0JMHg5OGVkLCAweDAwYzYsIDB4MmQ2MCwgMHg2MTAwLCAweDkxODYsIDB4MDAwMiwgMHgxOTA0LCAweGViMmIsCi0JMHg2MDE0LCAweDkwMDUsIDB4MTEzOCwgMHg2MDAwLCAweDkwODYsIDB4MDAwNywgMHgxOTBjLCAweDBkYzUsCi0JMHgwODA0LCAweGViMmIsIDB4MjA0OCwgMHgwODBjLCAweGNlNTYsIDB4MTEzMCwgMHgwMDI4LCAweDIwNDgsCi0JMHhhODAwLCAweDkwMDUsIDB4MWRlMCwgMHgyOTAwLCAweDIwNDgsIDB4YTg3YywgMHg5MDg0LCAweDAwMDMsCi0JMHg5MDg2LCAweDAwMDIsIDB4MTE2OCwgMHhhODdjLCAweGMwZGMsIDB4YzBmNCwgMHhhODdlLCAweGE4ODAsCi0JMHhjMGZjLCAweGE4ODIsIDB4MjAwOSwgMHgwMDQzLCAweDA4MGMsIDB4ZTMxYywgMHgwODA0LCAweGViMmIsCi0JMHgyMDA5LCAweDAwNDEsIDB4MDgwNCwgMHhlYjI1LCAweDkxODYsIDB4MDAwNSwgMHgxNWEwLCAweDY4MTQsCi0JMHgyMDQ4LCAweGE4N2MsIDB4ZDBiYywgMHgxMTIwLCAweDAwZGUsIDB4MDA5ZSwgMHgwODA0LCAweGVhNGUsCi0JMHhkMGI0LCAweDAxMjgsIDB4ZDBmYywgMHgwOTBjLCAweDBkYzUsIDB4MDgwNCwgMHhlYTZmLCAweDYwMDcsCi0JMHgwMDNhLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDkzM2IsIDB4MDgwYywgMHg5OGVkLCAweDAwYzYsCi0JMHgyZDYwLCAweDYxMDAsIDB4OTE4NiwgMHgwMDAyLCAweDAxMjAsIDB4OTE4NiwgMHgwMDA0LCAweDE5MDQsCi0JMHhlYjJiLCAweDY4MTQsIDB4MjA0OCwgMHhhOTdjLCAweGMxZjQsIDB4YzFkYywgMHhhOTdlLCAweGE5ODAsCi0JMHhjMWZjLCAweGMxYmMsIDB4YTk4MiwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHgxNzY4LCAweDAwZmUsCi0JMHgyMDA5LCAweDAwNDIsIDB4MDRkMCwgMHgwMDM2LCAweDA4MGMsIDB4MTAwZSwgMHgwOTBjLCAweDBkYzUsCi0JMHhhODY3LCAweDAxMGQsIDB4OTAwNiwgMHhhODAyLCAweGE4NmEsIDB4YTg4YSwgMHgyZDE4LCAweGFiOGUsCi0JMHhhODg3LCAweDAwNDUsIDB4MmMwMCwgMHhhODkyLCAweDYwMzgsIDB4YThhMiwgMHgyMzYwLCAweDYwMjQsCi0JMHhjMGRkLCAweDYwMjYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjhhMCwgMHgwMGJlLCAweDIwMDQsCi0JMHg2MzU0LCAweGFiN2EsIDB4YTg3NiwgMHg5MDA2LCAweGE4N2UsIDB4YTg4MiwgMHhhZDlhLCAweGFlOTYsCi0JMHhhODlmLCAweDAwMDEsIDB4MDgwYywgMHg2ZGQxLCAweDIwMTksIDB4MDA0NSwgMHg2MDA4LCAweDIwNjgsCi0JMHgwODBjLCAweGU0YzgsIDB4MmQwMCwgMHg2MDBhLCAweDYwMjMsIDB4MDAwNiwgMHg2MDAzLCAweDAwMDcsCi0JMHg5MDFlLCAweDYzMWEsIDB4NjM0MiwgMHgwMDNlLCAweDAwMzgsIDB4NjA0MywgMHgwMDAwLCAweDYwMDMsCi0JMHgwMDA3LCAweDA4MGMsIDB4ZTMxYywgMHgwMGNlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDA1LCAweDkxODYsCi0JMHgwMDEzLCAweDExMjgsIDB4NjAwNCwgMHg5MDgyLCAweDAwODUsIDB4MjAwOCwgMHgwMGMyLCAweDkxODYsCi0JMHgwMDI3LCAweDExNzgsIDB4MDgwYywgMHg5N2UxLCAweDAwMzYsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsCi0JMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHhlOTQ4LCAweDAwOWUsIDB4MDAzZSwgMHgwODBjLCAweDk4ZWQsCi0JMHgwMDA1LCAweDkxODYsIDB4MDAxNCwgMHgwZDcwLCAweDA4MGMsIDB4YjE5YiwgMHgwMDA1LCAweGViNWUsCi0JMHhlYjVjLCAweGViNWMsIDB4ZWI1YywgMHhlYjVjLCAweGViNWMsIDB4ZWI1ZSwgMHhlYjVjLCAweGViNWMsCi0JMHhlYjVjLCAweGViNWMsIDB4ZWI1YywgMHhlYjVjLCAweDA4MGMsIDB4MGRjNSwgMHgwODBjLCAweDk3ZTEsCi0JMHg2MDAzLCAweDAwMGMsIDB4MDgwYywgMHg5OGVkLCAweDAwMDUsIDB4OTE4MiwgMHgwMDkyLCAweDEyMjAsCi0JMHg5MTgyLCAweDAwODUsIDB4MDIwOCwgMHgwMDFhLCAweDA4MGMsIDB4YjE5YiwgMHgwMDA1LCAweGViN2MsCi0JMHhlYjdjLCAweGViN2MsIDB4ZWI3YywgMHhlYjdlLCAweGViOWUsIDB4ZWI3YywgMHhlYjdjLCAweGViN2MsCi0JMHhlYjdjLCAweGViN2MsIDB4ZWI3YywgMHhlYjdjLCAweDA4MGMsIDB4MGRjNSwgMHgwMGQ2LCAweDJjNjgsCi0JMHgwODBjLCAweGIwYWIsIDB4MDFiMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDIwMDksCi0JMHgwMjZlLCAweDIxMGMsIDB4NjEzYSwgMHgyMDA5LCAweDAyNmYsIDB4MjEwYywgMHg2MTNlLCAweDYwMGIsCi0JMHhmZmZmLCAweDY5MTAsIDB4NjExMiwgMHg2MDIzLCAweDAwMDQsIDB4MDgwYywgMHg5MzNiLCAweDA4MGMsCi0JMHg5OGVkLCAweDJkNjAsIDB4MDgwYywgMHhiMTAxLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweGIxMDEsCi0JMHgwMDA1LCAweDAwZTYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwZWMsCi0JMHgwMGVlLCAweDAwMDUsIDB4MjAwOSwgMHgxODY3LCAweDIxMGMsIDB4ZDFlYywgMHgwNWIwLCAweDYwMDMsCi0JMHgwMDAyLCAweDYwMjQsIDB4YzBlNSwgMHg2MDI2LCAweGQwY2MsIDB4MDE1MCwgMHgyMDAxLCAweDE5ODksCi0JMHgyMDA0LCAweDYwNDIsIDB4MjAwOSwgMHgxODY3LCAweDIxMGMsIDB4ZDFmNCwgMHgxNTIwLCAweDAwYTAsCi0JMHgyMDA5LCAweDE4NjcsIDB4MjEwYywgMHhkMWY0LCAweDAxMjgsIDB4NjAyNCwgMHhjMGU0LCAweDYwMjYsCi0JMHg5MDA2LCAweDAwZDgsIDB4MjAwMSwgMHgxOTg5LCAweDIwMGMsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsCi0JMHg5MTAwLCAweDkwODAsIDB4MDAwYSwgMHg2MDQyLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4YmMsCi0JMHgwMGJlLCAweDAwMDgsIDB4MjEwNCwgMHg5MDA1LCAweDAxMTgsIDB4OTA4OCwgMHgwMDAzLCAweDBjZDAsCi0JMHgyYzBhLCAweDYwMGYsIDB4MDAwMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDE2LCAweDAwYzYsCi0JMHgwMGU2LCAweDYxNTQsIDB4YjhiYywgMHgyMDYwLCAweDhjZmYsIDB4MDE4MCwgMHg4NGZmLCAweDExMTgsCi0JMHg2MDU0LCAweDkxMDYsIDB4MTEzOCwgMHg2MDBjLCAweDIwNzIsIDB4MDgwYywgMHg4OGYxLCAweDA4MGMsCi0JMHhiMTAxLCAweDAwMTAsIDB4OWNmMCwgMHgwMDAzLCAweDJlNjQsIDB4MGM3MCwgMHgwMGVlLCAweDAwY2UsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHgwMGI2LCAweDYwMTAsIDB4MjA1OCwgMHhiOGJjLCAweDkwNmQsCi0JMHgwMTMwLCAweDljMDYsIDB4MDExMCwgMHg2ODBjLCAweDBjZDAsIDB4NjAwYywgMHg2ODBlLCAweDAwYmUsCi0JMHgwMGRlLCAweDAwMDUsIDB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4MjAxMSwgMHgxODJjLCAweDIyMDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4MjAxOSwgMHgwMjZlLCAweDIzMzQsIDB4OTZiNCwgMHgwMGZmLCAweDk2MzYsCi0JMHgxNTA4LCAweDgzMTgsIDB4MjMzNCwgMHgyMjA0LCAweDkwODQsIDB4ZmYwMCwgMHg5NjM2LCAweDExZDAsCi0JMHgyMDExLCAweDAyNzAsIDB4MjBhOSwgMHgwMDA0LCAweDYwMTAsIDB4MDA5NiwgMHgyMDQ4LCAweDIwMTksCi0JMHgwMDBhLCAweDA4MGMsIDB4YzBmNywgMHgwMDllLCAweDExNjgsIDB4MjAxMSwgMHgwMjc0LCAweDIwYTksCi0JMHgwMDA0LCAweDYwMTAsIDB4MDA5NiwgMHgyMDQ4LCAweDIwMTksIDB4MDAwNiwgMHgwODBjLCAweGMwZjcsCi0JMHgwMDllLCAweDExMDAsIDB4MDE1ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCi0JMHgxODAwLCAweDA4MGMsIDB4NjBiYSwgMHgwODBjLCAweDMwMTksIDB4MDBlZSwgMHgwMDA1LCAweDAwOTYsCi0JMHgwMDI2LCAweDA4MGMsIDB4MTAwZSwgMHgwOTBjLCAweDBkYzUsIDB4YTg1YywgMHg5MDgwLCAweDAwMWEsCi0JMHgyMGEwLCAweDIwYTksIDB4MDAwYywgMHhhODYwLCAweDIwZTgsIDB4OTAwNiwgMHg0MDA0LCAweDkxODYsCi0JMHgwMDQ2LCAweDExMTgsIDB4YTg2NywgMHgwMTM2LCAweDAwMzgsIDB4YTg2NywgMHgwMTM4LCAweDkxODYsCi0JMHgwMDQxLCAweDAxMTAsIDB4YTg3YiwgMHgwMDAxLCAweDcwMzgsIDB4OTA4NCwgMHhmZjAwLCAweDcyNDAsCi0JMHg5Mjk0LCAweGZmMDAsIDB4ODAwNywgMHg5MjE1LCAweGFhOWEsIDB4OTE4NiwgMHgwMDQ2LCAweDExNjgsCi0JMHg3MDM4LCAweDkwODQsIDB4MDBmZiwgMHg3MjNjLCAweDkyOTQsIDB4ZmYwMCwgMHg5MjE1LCAweGFhOWUsCi0JMHg3MjNjLCAweDkyOTQsIDB4MDBmZiwgMHhhYWEyLCAweDAwNjAsIDB4NzA0MCwgMHg5MDg0LCAweDAwZmYsCi0JMHg3MjQ0LCAweDkyOTQsIDB4ZmYwMCwgMHg5MjE1LCAweGFhOWUsIDB4NzI0NCwgMHg5Mjk0LCAweDAwZmYsCi0JMHhhYWEyLCAweDkxODYsIDB4MDA0NiwgMHgxMTE4LCAweDllOTAsIDB4MDAxMiwgMHgwMDEwLCAweDllOTAsCi0JMHgwMDFhLCAweDIyMDQsIDB4ODAwNywgMHhhOGE2LCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YWEsCi0JMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHhhOGFlLCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YjIsCi0JMHg4MjEwLCAweDkxODYsIDB4MDA0NiwgMHgxMWI4LCAweDllOTAsIDB4MDAxNiwgMHgyMjA0LCAweDgwMDcsCi0JMHhhOGI2LCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YmEsIDB4ODIxMCwgMHgyMjA0LCAweDgwMDcsCi0JMHhhOGJlLCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YzIsIDB4ODIxMCwgMHgyMDExLCAweDAyMDUsCi0JMHgyMDEzLCAweDAwMDEsIDB4MDBiMCwgMHg5ZTkwLCAweDAwMWUsIDB4MjIwNCwgMHg4MDA3LCAweGE4YjYsCi0JMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHhhOGJhLCAweDIwMTEsIDB4MDIwNSwgMHgyMDEzLCAweDAwMDEsCi0JMHgyMDExLCAweDAyNjAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YmUsIDB4ODIxMCwgMHgyMjA0LCAweDgwMDcsCi0JMHhhOGMyLCAweDkxODYsIDB4MDA0NiwgMHgxMTE4LCAweDIwMTEsIDB4MDI2MiwgMHgwMDEwLCAweDIwMTEsCi0JMHgwMjZhLCAweDAxNDYsIDB4MDFkNiwgMHgwMDM2LCAweDIwYTksIDB4MDAwMSwgMHgyMDE5LCAweDAwMDgsCi0JMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMzEsIDB4MjBhMCwgMHgyMjA0LCAweDgwMDcsCi0JMHg0MDA0LCAweDgyMTAsIDB4ODMxOSwgMHgxZGQwLCAweDAwM2UsIDB4MDFjZSwgMHgwMTNlLCAweDIwMTEsCi0JMHgwMjA1LCAweDIwMTMsIDB4MDAwMCwgMHgwMDJlLCAweDA4MGMsIDB4NmRkMSwgMHgwMDllLCAweDAwMDUsCi0JMHgwMGU2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGZjLCAweDAxMDgsCi0JMHgwMDExLCAweDAwZWUsIDB4MDAwNSwgMHhhODgwLCAweGMwZTUsIDB4YTg4MiwgMHgwMDA1LCAweDAwZTYsCi0JMHgwMGQ2LCAweDAwYzYsIDB4MDA3NiwgMHgwMDY2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDI2LCAweDAwMTYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDI5LCAweDE5ZjIsIDB4MjUyYywgMHgyMDIxLCAweDE5ZjgsCi0JMHgyNDI0LCAweDIwNjEsIDB4MWNkMCwgMHgyMDcxLCAweDE4MDAsIDB4NzY1NCwgMHg3MDc0LCAweDk2MDYsCi0JMHgwNTc4LCAweDY3MjAsIDB4OTc4NiwgMHgwMDAxLCAweDAxMTgsIDB4OTc4NiwgMHgwMDA4LCAweDE1MDAsCi0JMHgyNTAwLCAweDljMDYsIDB4MDFlOCwgMHgyNDAwLCAweDljMDYsIDB4MDFkMCwgMHgwODBjLCAweGU5ZDYsCi0JMHgwMWI4LCAweDA4MGMsIDB4ZTllNiwgMHgxMWEwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDA0LCAweDExMjAsCi0JMHgwMDE2LCAweDA4MGMsIDB4MWFiNywgMHgwMDFlLCAweDA4MGMsIDB4ZDA0ZCwgMHgxMTEwLCAweDA4MGMsCi0JMHgzMjZmLCAweDA4MGMsIDB4ZDA1ZSwgMHgxMTEwLCAweDA4MGMsIDB4YmFlMiwgMHgwODBjLCAweGIxMzQsCi0JMHg5Y2UwLCAweDAwMTgsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxMjA4LCAweDA4NTgsCi0JMHgwMTJlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMGRjLCAweDAwMDUsCi0JMHgwMDA2LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwOWMsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgwMDM2LCAweDAwNDYsIDB4MDgwYywgMHhkNTYxLCAweDAxNjgsIDB4MjAxOSwgMHhmZmZmLCAweDkwMDUsCi0JMHgwMTI4LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGJiYTAsIDB4MDBiZSwgMHgyMDIxLCAweDAwMDQsCi0JMHgwODBjLCAweDRkYTAsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMGUsIDB4MDAwNSwgMHg2MDA0LCAweDkwODYsCi0JMHgwMDAxLCAweDExMjgsIDB4MDgwYywgMHhhYTlhLCAweDA4MGMsIDB4YjEzNCwgMHg5MDA2LCAweDAwMDUsCi0JMHgwMGU2LCAweDAwYzYsIDB4MDBiNiwgMHgwMDQ2LCAweDIwNjEsIDB4MWNkMCwgMHgyMDcxLCAweDE4MDAsCi0JMHg3NDU0LCAweDcwNzQsIDB4ODAwMSwgMHg5NDAyLCAweDEyZDgsIDB4MjEwMCwgMHg5YzA2LCAweDAxNjgsCi0JMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDkyMDYsCi0JMHgxMTIwLCAweDYwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDAxNDAsIDB4OWNlMCwgMHgwMDE4LCAweDIwMDEsCi0JMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxMjIwLCAweDBjNDAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsCi0JMHg5MDA2LCAweDAwNGUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MTAsCi0JMHgyMDA0LCAweGQwYTQsIDB4MDE2MCwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGE0LCAweDAxMzgsCi0JMHgyMDAxLCAweDE4NDgsIDB4MjAwNCwgMHhkMGE0LCAweDExMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHg5MDA2LCAweDBjZTgsIDB4MDEyNiwgMHgwMDA2LCAweDAwZTYsIDB4MDAxNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgyMDcxLCAweDE4NDAsIDB4ZDVhNCwgMHgwMTE4LCAweDcwMDQsIDB4ODAwMCwgMHg3MDA2LCAweGQ1YjQsCi0JMHgwMTE4LCAweDcwMDAsIDB4ODAwMCwgMHg3MDAyLCAweGQ1YWMsIDB4MDE3OCwgMHgyNTAwLCAweDkwODQsCi0JMHgwMDA3LCAweDkwOGUsIDB4MDAwMywgMHgwMTQ4LCAweDkwOGUsIDB4MDAwNCwgMHgwMTMwLCAweDkwOGUsCi0JMHgwMDA1LCAweDAxMTgsIDB4MjA3MSwgMHhmZmY2LCAweDAwODksIDB4MDAxZSwgMHgwMGVlLCAweDAwMGUsCi0JMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgwMDA2LCAweDAwZTYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsCi0JMHhmZmVlLCAweDAwMjEsIDB4MDBlZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgyZTA1LCAweDgwMDAsCi0JMHgyMDc3LCAweDEyMjAsIDB4OGU3MCwgMHgyZTA1LCAweDgwMDAsIDB4MjA3NywgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweGZmZWMsIDB4MGM5OSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGZmZjAsCi0JMHgwYzY5LCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDAwMDYsIDB4MDBlNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgyMDcxLCAweDE4NDAsIDB4NzAxNCwgMHg4MDAwLCAweDcwMTYsIDB4MDBlZSwgMHgwMDBlLCAweDAxMmUsCi0JMHgwMDA1LCAweDAwMDMsIDB4MDAwYiwgMHgwN2NlLCAweDAwMDAsIDB4YzAwMCwgMHgwMDAxLCAweDgwNjQsCi0JMHgwMDA4LCAweDAwMTAsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsIDB4MDEwMSwgMHgwMDA4LCAweDQ0MDcsCi0JMHgwMDAzLCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4NTgwZCwgMHgwMDBiLCAweDc5YzAsCi0JMHgwMDAzLCAweDUxMDYsIDB4MDAwMywgMHg0YzBhLCAweDAwMDMsIDB4YmFjMCwgMHgwMDA5LCAweDAwOGEsCi0JMHgwMDAwLCAweDBjMGEsIDB4MDAwYiwgMHgxNWZlLCAweDAwMDgsIDB4MzQwYSwgMHgwMDAzLCAweGM0YzAsCi0JMHgwMDA5LCAweDcwMDAsIDB4MDAwMCwgMHhmZmEwLCAweDAwMDEsIDB4MjAwMCwgMHgwMDAwLCAweDE2ODAsCi0JMHgwMDBiLCAweDgwOGMsIDB4MDAwOCwgMHgwMDAxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDA3LCAweDQwMjgsCi0JMHgwMDAwLCAweDQwNDcsIDB4MDAwYSwgMHg4MDhjLCAweDAwMDgsIDB4MDAwMiwgMHgwMDAwLCAweDA4MjIsCi0JMHgwMDAzLCAweDQwMjIsIDB4MDAwMCwgMHgwMDI4LCAweDAwMGIsIDB4NDEyMiwgMHgwMDA4LCAweDk0YzAsCi0JMHgwMDA5LCAweGZmMDAsIDB4MDAwOCwgMHhmZmUwLCAweDAwMDksIDB4MDUwMCwgMHgwMDA4LCAweDBhYWIsCi0JMHgwMDAzLCAweDQ0NDcsIDB4MDAwMiwgMHgwZWE4LCAweDAwMGIsIDB4MGJmZSwgMHgwMDA4LCAweDExYTAsCi0JMHgwMDAxLCAweDEyODYsIDB4MDAwMywgMHgwY2EwLCAweDAwMDEsIDB4MTI4NiwgMHgwMDAzLCAweDkxODAsCi0JMHgwMDAxLCAweDAwMDQsIDB4MDAwMCwgMHg4MDYwLCAweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDdmNjIsCi0JMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwMDA5LCAweDAwMDgsIDB4NDQzNiwgMHgwMDBiLCAweDgwOGMsCi0JMHgwMDA4LCAweDAwMDAsIDB4MDAwOCwgMHgwMDYwLCAweDAwMDgsIDB4ODA2MiwgMHgwMDA4LCAweDAwMDQsCi0JMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwNDExLCAweDAwMDAsIDB4NDQzZSwgMHgwMDAzLCAweDAzZmUsCi0JMHgwMDAwLCAweDQzZTAsIDB4MDAwMSwgMHgwZTgzLCAweDAwMGIsIDB4YzJjMCwgMHgwMDA5LCAweDAwZmYsCi0JMHgwMDA4LCAweDAyZTAsIDB4MDAwMSwgMHgwZTgzLCAweDAwMGIsIDB4OTE4MCwgMHgwMDAxLCAweDAwMDUsCi0JMHgwMDA4LCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsCi0JMHgwMDAwLCAweDAwMTksIDB4MDAwMCwgMHg0NDRkLCAweDAwMGIsIDB4MDI0MCwgMHgwMDAyLCAweDBhODAsCi0JMHgwMDAzLCAweDAwZmUsIDB4MDAwMCwgMHgzMjgzLCAweDAwMGIsIDB4MDI0OCwgMHgwMDBhLCAweDA4NWMsCi0JMHgwMDAzLCAweDkxODAsIDB4MDAwMSwgMHgwMDA2LCAweDAwMDgsIDB4N2Y2MiwgMHgwMDA4LCAweDgwMDIsCi0JMHgwMDA4LCAweDAwMDMsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDIwYSwgMHgwMDAwLCAweDQ0NWIsCi0JMHgwMDAzLCAweDExMmEsIDB4MDAwMCwgMHgwMDJlLCAweDAwMDgsIDB4MDIyYywgMHgwMDA4LCAweDNhNDQsCi0JMHgwMDAyLCAweDBjMGEsIDB4MDAwYiwgMHg4MDhjLCAweDAwMDgsIDB4MDAwMiwgMHgwMDAwLCAweDE3NjAsCi0JMHgwMDA4LCAweDgwNjIsIDB4MDAwOCwgMHgwMDBmLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDAwMTEsCi0JMHgwMDA4LCAweDQ0NjgsIDB4MDAwMywgMHgwMWZlLCAweDAwMDgsIDB4NDJlMCwgMHgwMDA5LCAweDBlNzQsCi0JMHgwMDAzLCAweDAwZmUsIDB4MDAwMCwgMHg0M2UwLCAweDAwMDEsIDB4MGU3NCwgMHgwMDAzLCAweDE3MzQsCi0JMHgwMDAwLCAweDE1MzAsIDB4MDAwMCwgMHgxNjMyLCAweDAwMDgsIDB4MGQyYSwgMHgwMDA4LCAweDk4ODAsCi0JMHgwMDAxLCAweDAwMTAsIDB4MDAwMCwgMHg4MDYwLCAweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDdmNjIsCi0JMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgxZTBhLCAweDAwMDgsIDB4NDQ3YSwgMHgwMDAzLCAweDgwOGEsCi0JMHgwMDA4LCAweDAwMDMsIDB4MDAwOCwgMHgxYTYwLCAweDAwMDAsIDB4ODA2MiwgMHgwMDA4LCAweDAwMDIsCi0JMHgwMDAwLCAweDU4ODAsIDB4MDAwYiwgMHg4MDY2LCAweDAwMDAsIDB4MzY3OSwgMHgwMDAwLCAweDQ0ODMsCi0JMHgwMDAzLCAweDU4ODQsIDB4MDAwMywgMHgzZWZlLCAweDAwMDgsIDB4N2Y0ZiwgMHgwMDAyLCAweDA4OGEsCi0JMHgwMDBiLCAweDBkMDAsIDB4MDAwMCwgMHgwMDkyLCAweDAwMGMsIDB4ODA1NCwgMHgwMDA4LCAweDAwMTEsCi0JMHgwMDA4LCAweDgwNzQsIDB4MDAwMCwgMHgxMDEwLCAweDAwMDgsIDB4MWVmZSwgMHgwMDAwLCAweDMwMGEsCi0JMHgwMDBiLCAweDAwZTAsIDB4MDAwYywgMHgwMDBhLCAweDAwMGIsIDB4MDBmZSwgMHgwMDAwLCAweDM0OWEsCi0JMHgwMDAzLCAweDFhNjAsIDB4MDAwMCwgMHg4MDYyLCAweDAwMDgsIDB4MDAwNywgMHgwMDAwLCAweDgwNjYsCi0JMHgwMDAwLCAweDAyMzEsIDB4MDAwOCwgMHg0NDk5LCAweDAwMGIsIDB4MDNmZSwgMHgwMDAwLCAweDA0ZDAsCi0JMHgwMDAxLCAweDBjZDQsIDB4MDAwYiwgMHg4MmMwLCAweDAwMDEsIDB4MWYwMCwgMHgwMDAwLCAweGZmYTAsCi0JMHgwMDAxLCAweDA0MDAsIDB4MDAwMCwgMHgwOGIyLCAweDAwMDMsIDB4MTRkYywgMHgwMDAzLCAweDAxZmUsCi0JMHgwMDA4LCAweDA1ODAsIDB4MDAwOSwgMHg3ZjA2LCAweDAwMDAsIDB4ODY5MCwgMHgwMDA5LCAweDAwMDAsCi0JMHgwMDA4LCAweDdmMGMsIDB4MDAwMCwgMHgwMmZlLCAweDAwMDgsIDB4ZmZjMCwgMHgwMDAxLCAweDAwZmYsCi0JMHgwMDA4LCAweDA2ODAsIDB4MDAwOSwgMHgxMGIyLCAweDAwMDMsIDB4N2YwOCwgMHgwMDA4LCAweDg0YzAsCi0JMHgwMDAxLCAweGZmMDAsIDB4MDAwOCwgMHgwOGQ0LCAweDAwMDMsIDB4YjljMCwgMHgwMDA5LCAweDAwMzAsCi0JMHgwMDA4LCAweDBjYzMsIDB4MDAwYiwgMHg4MDYwLCAweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDgwZmUsCi0JMHgwMDA4LCAweDFhMGIsIDB4MDAwMSwgMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDA0MDksCi0JMHgwMDAwLCAweDQ0YmMsIDB4MDAwMywgMHg4MGZlLCAweDAwMDgsIDB4MWEwYSwgMHgwMDA5LCAweDdmNjIsCi0JMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwNDBhLCAweDAwMDAsIDB4NDRjMiwgMHgwMDAzLCAweDAwZmUsCi0JMHgwMDAwLCAweDM0Y2EsIDB4MDAwMywgMHg4MDcyLCAweDAwMDAsIDB4MTAxMCwgMHgwMDA4LCAweDM5NDQsCi0JMHgwMDAyLCAweDA4YzUsIDB4MDAwMywgMHgwMGNlLCAweDAwMDMsIDB4ODA3MiwgMHgwMDAwLCAweDIwMjAsCi0JMHgwMDA4LCAweDM5NDUsIDB4MDAwYSwgMHgwOGNhLCAweDAwMDMsIDB4Mzk0NiwgMHgwMDBhLCAweDBjZGIsCi0JMHgwMDBiLCAweDAwMDAsIDB4MDAwNywgMHgzOTQzLCAweDAwMGEsIDB4MDhkYiwgMHgwMDAzLCAweDAwY2UsCi0JMHgwMDAzLCAweDAwZmUsIDB4MDAwMCwgMHgzNGQ5LCAweDAwMGIsIDB4ODA3MiwgMHgwMDAwLCAweDEwMDAsCi0JMHgwMDAwLCAweDAwZGIsIDB4MDAwYiwgMHg4MDcyLCAweDAwMDAsIDB4MjAwMCwgMHgwMDAwLCAweDQwMDAsCi0JMHgwMDBmLCAweDg2YzAsIDB4MDAwOSwgMHhmYzAwLCAweDAwMDgsIDB4MDhkNCwgMHgwMDAzLCAweDAwYjIsCi0JMHgwMDBiLCAweDFjNjAsIDB4MDAwMCwgMHgxYjYyLCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDAyMzEsCi0JMHgwMDA4LCAweDQ0ZTQsIDB4MDAwYiwgMHg1OGU1LCAweDAwMGIsIDB4MDE0MCwgMHgwMDA4LCAweDAyNDIsCi0JMHgwMDAwLCAweDFmNDMsIDB4MDAwMiwgMHgwY2YzLCAweDAwMGIsIDB4MGQ0NCwgMHgwMDAwLCAweDBkNDYsCi0JMHgwMDA4LCAweDAzNDgsIDB4MDAwOCwgMHgwNDRhLCAweDAwMDgsIDB4MDMwYSwgMHgwMDA4LCAweDA0MGMsCi0JMHgwMDAwLCAweDBkMDYsIDB4MDAwMCwgMHgwZDA4LCAweDAwMDgsIDB4MDBmNywgMHgwMDAzLCAweDAzNDQsCi0JMHgwMDA4LCAweDA0NDYsIDB4MDAwOCwgMHgwNTQ4LCAweDAwMDgsIDB4MDY0YSwgMHgwMDAwLCAweDE5NDgsCi0JMHgwMDBhLCAweDA4ZmEsIDB4MDAwMywgMHgwZDRhLCAweDAwMDgsIDB4NThmYSwgMHgwMDAzLCAweDNlZmUsCi0JMHgwMDA4LCAweDdmNGYsIDB4MDAwMiwgMHgwOTAxLCAweDAwMDMsIDB4ODAwMCwgMHgwMDAwLCAweDAwMDEsCi0JMHgwMDAwLCAweDAwOTIsIDB4MDAwYywgMHg4MDU0LCAweDAwMDgsIDB4MDAwMSwgMHgwMDAwLCAweDgwNzQsCi0JMHgwMDAwLCAweDIwMjAsIDB4MDAwOCwgMHg0MDAwLCAweDAwMGYsIDB4M2E0MCwgMHgwMDBhLCAweDBjMGQsCi0JMHgwMDAzLCAweDJiMjQsIDB4MDAwOCwgMHgyYjI0LCAweDAwMDgsIDB4NTkwYSwgMHgwMDBiLCAweDgwNTQsCi0JMHgwMDA4LCAweDAwMDIsIDB4MDAwMCwgMHgxMjQyLCAweDAwMDIsIDB4MDk1OCwgMHgwMDAzLCAweDNhNDUsCi0JMHgwMDBhLCAweDA5NDcsIDB4MDAwYiwgMHg4MDcyLCAweDAwMDAsIDB4MTAwMCwgMHgwMDAwLCAweDM5NDUsCi0JMHgwMDBhLCAweDA5MTcsIDB4MDAwYiwgMHg4MDcyLCAweDAwMDAsIDB4MzAxMCwgMHgwMDAwLCAweDFlMTAsCi0JMHgwMDBhLCAweDdmM2MsIDB4MDAwMCwgMHgwOTQyLCAweDAwMGIsIDB4MWQwMCwgMHgwMDAyLCAweDdmM2EsCi0JMHgwMDAwLCAweDBkNjAsIDB4MDAwMCwgMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDAwMDksCi0JMHgwMDA4LCAweDQ1MjAsIDB4MDAwYiwgMHgwMGZlLCAweDAwMDAsIDB4MzUzZiwgMHgwMDBiLCAweDFjNjAsCi0JMHgwMDAwLCAweDgwNjIsIDB4MDAwOCwgMHgwMDAxLCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDAwMDksCi0JMHgwMDA4LCAweDQ1MjgsIDB4MDAwMywgMHgwMGZlLCAweDAwMDAsIDB4MzI1YiwgMHgwMDBiLCAweDAwMzgsCi0JMHgwMDAwLCAweDAwNjAsIDB4MDAwOCwgMHg4MDYyLCAweDAwMDgsIDB4MDAxOSwgMHgwMDAwLCAweDgwNjYsCi0JMHgwMDAwLCAweDAwMDksIDB4MDAwOCwgMHg0NTMxLCAweDAwMGIsIDB4ODBjMCwgMHgwMDA5LCAweDAwZmYsCi0JMHgwMDA4LCAweDdmM2UsIDB4MDAwOCwgMHgwZDYwLCAweDAwMDAsIDB4MGVmZSwgMHgwMDA4LCAweDFmODAsCi0JMHgwMDAxLCAweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDAwOSwgMHgwMDA4LCAweDQ1M2IsCi0JMHgwMDBiLCAweDAwM2EsIDB4MDAwOCwgMHgxZGZlLCAweDAwMDAsIDB4MDExYywgMHgwMDBiLCAweDAwMzYsCi0JMHgwMDA4LCAweDAwZTAsIDB4MDAwYywgMHgwMTU4LCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweDIwMDAsCi0JMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwgMHgyMDAwLCAweDAwMDAsIDB4MDE1OCwgMHgwMDBiLCAweDNhNDQsCi0JMHgwMDAyLCAweDBhODksIDB4MDAwMywgMHg4MDc0LCAweDAwMDAsIDB4MTAwMCwgMHgwMDAwLCAweDgwNzIsCi0JMHgwMDAwLCAweDEwMDAsIDB4MDAwMCwgMHgyZDBlLCAweDAwMDAsIDB4MmQwZSwgMHgwMDAwLCAweDM2NTgsCi0JMHgwMDAzLCAweDI2ZmUsIDB4MDAwOCwgMHgyNmZlLCAweDAwMDgsIDB4MjcwMCwgMHgwMDA4LCAweDI3MDAsCi0JMHgwMDA4LCAweDAwZDAsIDB4MDAwOSwgMHgwZDZhLCAweDAwMDMsIDB4ODA3NCwgMHgwMDAwLCAweDQwNDAsCi0JMHgwMDA4LCAweDU5NTgsIDB4MDAwMywgMHg1MTA2LCAweDAwMDMsIDB4M2E0NiwgMHgwMDBhLCAweDBkNmEsCi0JMHgwMDAzLCAweDNhNDcsIDB4MDAwMiwgMHgwOTY1LCAweDAwMGIsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDQsCi0JMHgwMDAwLCAweDgwNzQsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsIDB4ODA3MiwgMHgwMDAwLCAweDMwMDAsCi0JMHgwMDA4LCAweDAxYjQsIDB4MDAwMywgMHg5MmMwLCAweDAwMDksIDB4MGZjOCwgMHgwMDAwLCAweDA4MGEsCi0JMHgwMDAzLCAweDEyNDYsIDB4MDAwYSwgMHgwZTUyLCAweDAwMGIsIDB4MWE2MCwgMHgwMDAwLCAweDgwNjIsCi0JMHgwMDA4LCAweDAwMDIsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsIDB4MzYyYSwgMHgwMDAwLCAweDQ1NmYsCi0JMHgwMDAzLCAweDIwMDAsIDB4MDAwMCwgMHgyMDAwLCAweDAwMDAsIDB4MjEwMiwgMHgwMDAwLCAweDIxMDIsCi0JMHgwMDAwLCAweDIyMDQsIDB4MDAwMCwgMHgyMjA0LCAweDAwMDAsIDB4MjMwNiwgMHgwMDAwLCAweDIzMDYsCi0JMHgwMDAwLCAweDI0MDgsIDB4MDAwMCwgMHgyNDA4LCAweDAwMDAsIDB4MjUwYSwgMHgwMDAwLCAweDI1MGEsCi0JMHgwMDAwLCAweDI2MGMsIDB4MDAwMCwgMHgyNjBjLCAweDAwMDAsIDB4MjcwZSwgMHgwMDAwLCAweDI3MGUsCi0JMHgwMDAwLCAweDI4MTAsIDB4MDAwMCwgMHgyODEwLCAweDAwMDAsIDB4MjkxMiwgMHgwMDAwLCAweDI5MTIsCi0JMHgwMDAwLCAweDFhNjAsIDB4MDAwMCwgMHg4MDYyLCAweDAwMDgsIDB4MDAwNywgMHgwMDAwLCAweDgwNjYsCi0JMHgwMDAwLCAweDAwNTIsIDB4MDAwMCwgMHg0NTg5LCAweDAwMGIsIDB4OTJjMCwgMHgwMDA5LCAweDA3ODAsCi0JMHgwMDA4LCAweDBlNmUsIDB4MDAwYiwgMHgxMjRiLCAweDAwMDIsIDB4MDk5MiwgMHgwMDAzLCAweDJlNGQsCi0JMHgwMDAyLCAweDJlNGQsIDB4MDAwMiwgMHgwYTU4LCAweDAwMDMsIDB4M2E0NiwgMHgwMDBhLCAweDBkYTIsCi0JMHgwMDBiLCAweDU5OTQsIDB4MDAwMywgMHg4MDU0LCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDEyNDMsCi0JMHgwMDBhLCAweDA5YjAsIDB4MDAwMywgMHg4MDEwLCAweDAwMDgsIDB4MDAwZCwgMHgwMDAwLCAweDAyMzMsCi0JMHgwMDBjLCAweDE5NDgsIDB4MDAwYSwgMHgwOTlmLCAweDAwMGIsIDB4MDIyOCwgMHgwMDBjLCAweDE4MTAsCi0JMHgwMDAwLCAweDAyMzMsIDB4MDAwYywgMHgwMWIwLCAweDAwMGIsIDB4MTk0OCwgMHgwMDBhLCAweDA5YTYsCi0JMHgwMDBiLCAweDEyNDMsIDB4MDAwYSwgMHgwYTViLCAweDAwMDMsIDB4MTk0ZCwgMHgwMDBhLCAweDA5YWEsCi0JMHgwMDBiLCAweDEyNDMsIDB4MDAwYSwgMHgwYTYyLCAweDAwMDMsIDB4NTlhYSwgMHgwMDBiLCAweDgwNTQsCi0JMHgwMDA4LCAweDAwMDQsIDB4MDAwMCwgMHgwMjI4LCAweDAwMGMsIDB4MTgxMCwgMHgwMDAwLCAweDAyMzMsCi0JMHgwMDBjLCAweDgwNzQsIDB4MDAwMCwgMHhmMDAwLCAweDAwMDgsIDB4ODA3MiwgMHgwMDAwLCAweDMwMDAsCi0JMHgwMDA4LCAweDBkMzAsIDB4MDAwMCwgMHgzYTQyLCAweDAwMDIsIDB4MGRiYSwgMHgwMDBiLCAweDE1ZmUsCi0JMHgwMDA4LCAweDM0NjEsIDB4MDAwYiwgMHgwMDBhLCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweDA1MDEsCi0JMHgwMDAwLCAweDgwMTAsIDB4MDAwOCwgMHgwMDBjLCAweDAwMDgsIDB4MDIzMywgMHgwMDBjLCAweDAwMGEsCi0JMHgwMDBiLCAweGJiZTAsIDB4MDAwOSwgMHgwMDMwLCAweDAwMDgsIDB4MGRkMCwgMHgwMDBiLCAweDE4ZmUsCi0JMHgwMDAwLCAweDNjZTAsIDB4MDAwOSwgMHgwOWNkLCAweDAwMDMsIDB4MTVmZSwgMHgwMDA4LCAweDNjZTAsCi0JMHgwMDA5LCAweDA5Y2QsIDB4MDAwMywgMHgwMjIzLCAweDAwMDQsIDB4ODA3NiwgMHgwMDA4LCAweDAwNDAsCi0JMHgwMDAwLCAweDAyMjAsIDB4MDAwYiwgMHg4MDc2LCAweDAwMDgsIDB4MDA0MSwgMHgwMDA4LCAweDAyMjAsCi0JMHgwMDBiLCAweGJiZTAsIDB4MDAwOSwgMHgwMDMyLCAweDAwMDAsIDB4MGRkNSwgMHgwMDBiLCAweDNjMWUsCi0JMHgwMDA4LCAweDAyMjAsIDB4MDAwYiwgMHhiYmUwLCAweDAwMDksIDB4MDAzYiwgMHgwMDAwLCAweDBkZGEsCi0JMHgwMDBiLCAweDNjMjAsIDB4MDAwMCwgMHgwMjIwLCAweDAwMGIsIDB4YmJlMCwgMHgwMDA5LCAweDAwMzUsCi0JMHgwMDA4LCAweDBkZTAsIDB4MDAwYiwgMHg4MDcyLCAweDAwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDAzOWMsCi0JMHgwMDBiLCAweGJiZTAsIDB4MDAwOSwgMHgwMDM2LCAweDAwMDgsIDB4MGFiZCwgMHgwMDBiLCAweGJiZTAsCi0JMHgwMDA5LCAweDAwMzcsIDB4MDAwMCwgMHgwZTAxLCAweDAwMGIsIDB4MThmZSwgMHgwMDAwLCAweDNjZTAsCi0JMHgwMDA5LCAweDBkY2QsIDB4MDAwYiwgMHg4MDc2LCAweDAwMDgsIDB4MDA0MCwgMHgwMDAwLCAweDFhNjAsCi0JMHgwMDAwLCAweDgwNjIsIDB4MDAwOCwgMHgwMDBkLCAweDAwMDAsIDB4MjYwNCwgMHgwMDA4LCAweDI2MDQsCi0JMHgwMDA4LCAweDI3MDYsIDB4MDAwOCwgMHgyNzA2LCAweDAwMDgsIDB4MjgwOCwgMHgwMDAwLCAweDI4MDgsCi0JMHgwMDAwLCAweDI5MGEsIDB4MDAwMCwgMHgyOTBhLCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDA0MjIsCi0JMHgwMDAwLCAweDQ1ZjgsIDB4MDAwYiwgMHgwMjI4LCAweDAwMGMsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDQsCi0JMHgwMDAwLCAweDgwNzQsIDB4MDAwMCwgMHhmMDAwLCAweDAwMDgsIDB4ODA3MiwgMHgwMDAwLCAweGIwMDAsCi0JMHgwMDAwLCAweDAxYjQsIDB4MDAwMywgMHhiYmUwLCAweDAwMDksIDB4MDAzOCwgMHgwMDAwLCAweDBlMTMsCi0JMHgwMDBiLCAweDE4ZmUsIDB4MDAwMCwgMHgzY2UwLCAweDAwMDksIDB4MGExMCwgMHgwMDAzLCAweDE1ZmUsCi0JMHgwMDA4LCAweDNjZTAsIDB4MDAwOSwgMHgwZGM5LCAweDAwMDMsIDB4MDIyMywgMHgwMDA0LCAweDgwNzYsCi0JMHgwMDA4LCAweDAwNDAsIDB4MDAwMCwgMHg4MDcyLCAweDAwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDAyODAsCi0JMHgwMDBiLCAweDgwNzYsIDB4MDAwOCwgMHgwMDQyLCAweDAwMDgsIDB4MDIyMCwgMHgwMDBiLCAweGJiZTAsCi0JMHgwMDA5LCAweDAwMTYsIDB4MDAwMCwgMHgwZTIwLCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweDA4MDgsCi0JMHgwMDA4LCAweDNhNDQsIDB4MDAwMiwgMHgwYzBjLCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweDA4MDAsCi0JMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsIDB4ODAwMCwgMHgwMDBmLCAweDAwMGEsCi0JMHgwMDBiLCAweDgwNzIsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsIDB4MDAwYSwgMHgwMDBiLCAweDNkMzAsCi0JMHgwMDBhLCAweDdmMDAsIDB4MDAwMCwgMHhiYzgwLCAweDAwMDEsIDB4MDAwNywgMHgwMDAwLCAweDAyMmMsCi0JMHgwMDBiLCAweDE5MzAsIDB4MDAwYSwgMHg3ZjAwLCAweDAwMDAsIDB4OTg4MCwgMHgwMDAxLCAweDAwMDcsCi0JMHgwMDAwLCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsCi0JMHgwMDAwLCAweDAwMGEsIDB4MDAwOCwgMHg0NjMxLCAweDAwMGIsIDB4NDAwMCwgMHgwMDBmLCAweDIyMzYsCi0JMHgwMDBiLCAweDA4NzAsIDB4MDAwOCwgMHg0MDAwLCAweDAwMGYsIDB4N2UzMywgMHgwMDBiLCAweGJiZTAsCi0JMHgwMDA5LCAweDAwMzAsIDB4MDAwOCwgMHgwZTMzLCAweDAwMDMsIDB4MThmZSwgMHgwMDAwLCAweDNjZTAsCi0JMHgwMDA5LCAweDBhNDQsIDB4MDAwYiwgMHgxNWZlLCAweDAwMDgsIDB4M2NlMCwgMHgwMDA5LCAweDBhNDQsCi0JMHgwMDBiLCAweDAyMjMsIDB4MDAwNCwgMHg4MDc2LCAweDAwMDgsIDB4MDA0MCwgMHgwMDAwLCAweDAyNDYsCi0JMHgwMDBiLCAweDgwNzYsIDB4MDAwOCwgMHgwMDQxLCAweDAwMDgsIDB4ODA3MiwgMHgwMDAwLCAweDgwMDAsCi0JMHgwMDAwLCAweDAyMzMsIDB4MDAwMywgMHhiYWMwLCAweDAwMDksIDB4MDA5MCwgMHgwMDA4LCAweDBhNGYsCi0JMHgwMDAzLCAweDgwNzQsIDB4MDAwMCwgMHgwNzA2LCAweDAwMDAsIDB4MDI1MSwgMHgwMDBiLCAweDgwNzQsCi0JMHgwMDAwLCAweDA3MDMsIDB4MDAwMCwgMHg0MDAwLCAweDAwMGYsIDB4ODAxMCwgMHgwMDA4LCAweDAwMjMsCi0JMHgwMDAwLCAweDAyOGUsIDB4MDAwMywgMHg4MDEwLCAweDAwMDgsIDB4MDAwOCwgMHgwMDAwLCAweDAyOGUsCi0JMHgwMDAzLCAweDgwMTAsIDB4MDAwOCwgMHgwMDIyLCAweDAwMDgsIDB4MDI4ZSwgMHgwMDAzLCAweDAyMjgsCi0JMHgwMDBjLCAweDgwMTAsIDB4MDAwOCwgMHgwMDA3LCAweDAwMDAsIDB4MDIzMywgMHgwMDBjLCAweDE4MTAsCi0JMHgwMDAwLCAweDAyMzMsIDB4MDAwYywgMHgwMjlhLCAweDAwMDMsIDB4MDIyOCwgMHgwMDBjLCAweDgwMTAsCi0JMHgwMDA4LCAweDAwMWIsIDB4MDAwOCwgMHgwMjMzLCAweDAwMGMsIDB4MTgxMCwgMHgwMDAwLCAweDAyMzMsCi0JMHgwMDBjLCAweDgwNzQsIDB4MDAwMCwgMHhmMDgwLCAweDAwMDAsIDB4ODA3MiwgMHgwMDAwLCAweDMwMDAsCi0JMHgwMDA4LCAweDBkMzAsIDB4MDAwMCwgMHgwMDBhLCAweDAwMGIsIDB4ODAxMCwgMHgwMDA4LCAweDAwMDksCi0JMHgwMDA4LCAweDAyOGUsIDB4MDAwMywgMHg4MDEwLCAweDAwMDgsIDB4MDAwNSwgMHgwMDA4LCAweDAyOGUsCi0JMHgwMDAzLCAweDE2NDgsIDB4MDAwYSwgMHgwYzZmLCAweDAwMGIsIDB4ODA4YywgMHgwMDA4LCAweDAwMDEsCi0JMHgwMDAwLCAweDgwMTAsIDB4MDAwOCwgMHgwMDA0LCAweDAwMDAsIDB4NDE0MywgMHgwMDBhLCAweDA4NmYsCi0JMHgwMDAzLCAweDNhNDQsIDB4MDAwMiwgMHgwYzBhLCAweDAwMGIsIDB4MGQyYSwgMHgwMDA4LCAweDAyOGUsCi0JMHgwMDAzLCAweDgwMTAsIDB4MDAwOCwgMHgwMDAzLCAweDAwMDgsIDB4MDI5MiwgMHgwMDBiLCAweDgwMTAsCi0JMHgwMDA4LCAweDAwMGIsIDB4MDAwMCwgMHgwMjkyLCAweDAwMGIsIDB4ODAxMCwgMHgwMDA4LCAweDAwMDIsCi0JMHgwMDAwLCAweDAyOTIsIDB4MDAwYiwgMHgzYTQ3LCAweDAwMDIsIDB4MGQ1OCwgMHgwMDBiLCAweDgwMTAsCi0JMHgwMDA4LCAweDAwMDYsIDB4MDAwOCwgMHgwMjkyLCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweGYwMDAsCi0JMHgwMDA4LCAweDgwNzIsIDB4MDAwMCwgMHgzMDAwLCAweDAwMDgsIDB4MDIzMywgMHgwMDBjLCAweDAyNDksCi0JMHgwMDA0LCAweDNhNDAsIDB4MDAwYSwgMHgwODBhLCAweDAwMDMsIDB4ODAxMCwgMHgwMDA4LCAweDAwMGMsCi0JMHgwMDA4LCAweDAyMzMsIDB4MDAwYywgMHgwMDBhLCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweGYwODAsCi0JMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwgMHgzMDAwLCAweDAwMDgsIDB4MGQzMCwgMHgwMDAwLCAweDJlNGQsCi0JMHgwMDAyLCAweDJlNGQsIDB4MDAwMiwgMHgwYWE1LCAweDAwMGIsIDB4ODA1NCwgMHgwMDA4LCAweDAwMTksCi0JMHgwMDAwLCAweDAwMGEsIDB4MDAwYiwgMHg4MDU0LCAweDAwMDgsIDB4MDAwOSwgMHgwMDA4LCAweDAwMGEsCi0JMHgwMDBiLCAweDNhNDQsIDB4MDAwMiwgMHgwYzBhLCAweDAwMGIsIDB4MDI4MywgMHgwMDBiLCAweDgwOGMsCi0JMHgwMDA4LCAweDAwMDAsIDB4MDAwOCwgMHg0NDQ3LCAweDAwMDIsIDB4MGFkMSwgMHgwMDBiLCAweGMwYzAsCi0JMHgwMDAxLCAweDAwZmYsIDB4MDAwOCwgMHhmZmUwLCAweDAwMDksIDB4MDBmZiwgMHgwMDA4LCAweDBlYTgsCi0JMHgwMDBiLCAweGMxZTAsIDB4MDAwMSwgMHhmZmZmLCAweDAwMDgsIDB4MGVhOCwgMHgwMDBiLCAweDgwMTAsCi0JMHgwMDA4LCAweDAwMTMsIDB4MDAwMCwgMHgwMjMzLCAweDAwMGMsIDB4ODA3NCwgMHgwMDAwLCAweDAyMDIsCi0JMHgwMDA4LCAweDAwMGEsIDB4MDAwYiwgMHgzYTQwLCAweDAwMGEsIDB4MGVjZSwgMHgwMDBiLCAweDgwNzQsCi0JMHgwMDAwLCAweDAyMDAsIDB4MDAwMCwgMHgzZDAwLCAweDAwMDAsIDB4M2NmZSwgMHgwMDAwLCAweDgwNzIsCi0JMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwgMHg0M2UwLCAweDAwMDEsIDB4MGVjYywgMHgwMDAzLCAweDQyZmUsCi0JMHgwMDAwLCAweGZmYzAsIDB4MDAwMSwgMHgwMGZmLCAweDAwMDgsIDB4MDBlMCwgMHgwMDA5LCAweDBhYTgsCi0JMHgwMDAzLCAweDBkMDgsIDB4MDAwOCwgMHgwMzIxLCAweDAwMGIsIDB4ODA3MiwgMHgwMDAwLCAweDgwMDAsCi0JMHgwMDAwLCAweDAwMGEsIDB4MDAwYiwgMHgwM2E1LCAweDAwMDQsIDB4ODA4YywgMHgwMDA4LCAweDAwMDEsCi0JMHgwMDAwLCAweDA0ZmUsIDB4MDAwOCwgMHgzMzg4LCAweDAwMGIsIDB4MDQ2MCwgMHgwMDAwLCAweDgwNjIsCi0JMHgwMDA4LCAweDAwMDEsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsIDB4MDAwOSwgMHgwMDA4LCAweDQ2ZGIsCi0JMHgwMDAzLCAweDAwMDQsIDB4MDAwMCwgMHg4MGMwLCAweDAwMDksIDB4MDBmZiwgMHgwMDA4LCAweDdmMDAsCi0JMHgwMDAwLCAweDgwZTAsIDB4MDAwMSwgMHgwMDA0LCAweDAwMDAsIDB4MGFmNSwgMHgwMDBiLCAweDgwZTAsCi0JMHgwMDAxLCAweDAwMDUsIDB4MDAwOCwgMHgwYWY1LCAweDAwMGIsIDB4ODBlMCwgMHgwMDAxLCAweDAwMDYsCi0JMHgwMDA4LCAweDBhZjUsIDB4MDAwYiwgMHg4MmMwLCAweDAwMDEsIDB4ZmYwMCwgMHgwMDA4LCAweDdmMDQsCi0JMHgwMDA4LCAweDgyZTAsIDB4MDAwOSwgMHgwNjAwLCAweDAwMDgsIDB4MGFmNSwgMHgwMDBiLCAweDgyZTAsCi0JMHgwMDA5LCAweDA1MDAsIDB4MDAwOCwgMHgwYWY1LCAweDAwMGIsIDB4ODJlMCwgMHgwMDA5LCAweDA0MDAsCi0JMHgwMDAwLCAweDBmODgsIDB4MDAwYiwgMHhjNGMwLCAweDAwMDksIDB4NzAwMCwgMHgwMDAwLCAweGZmZTAsCi0JMHgwMDA5LCAweDEwMDAsIDB4MDAwMCwgMHgwYjIxLCAweDAwMDMsIDB4MDM5NiwgMHgwMDA0LCAweDM5NDEsCi0JMHgwMDAyLCAweDBiMDAsIDB4MDAwMywgMHg4MDcyLCAweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDAwMGEsCi0JMHgwMDBiLCAweDA0NjAsIDB4MDAwMCwgMHg4MGZlLCAweDAwMDgsIDB4MDAyYiwgMHgwMDA4LCAweDdmNjIsCi0JMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgyMjA5LCAweDAwMDgsIDB4NDcwNiwgMHgwMDBiLCAweDExZmUsCi0JMHgwMDAwLCAweDMzMWMsIDB4MDAwMywgMHg5MTgwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDAwLCAweDgwNjAsCi0JMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDA2MDksCi0JMHgwMDA4LCAweDQ3MTAsIDB4MDAwMywgMHg0MmZlLCAweDAwMDAsIDB4ZmZjMCwgMHgwMDAxLCAweGZmMDAsCi0JMHgwMDA4LCAweDAzZTAsIDB4MDAwOSwgMHgwZjE5LCAweDAwMDMsIDB4ODA3MiwgMHgwMDAwLCAweDA0MDAsCi0JMHgwMDAwLCAweDAwNDYsIDB4MDAwMywgMHg5MTgwLCAweDAwMDEsIDB4MDAwMywgMHgwMDA4LCAweDAzMDMsCi0JMHgwMDBiLCAweDgwNzIsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4ODAxMCwgMHgwMDA4LCAweDAwMTAsCi0JMHgwMDAwLCAweDAzNzksIDB4MDAwMywgMHgwMzk2LCAweDAwMDQsIDB4Mzk0MSwgMHgwMDAyLCAweDBiMjcsCi0JMHgwMDAzLCAweDgwNzIsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4MDAwYSwgMHgwMDBiLCAweDAzNWUsCi0JMHgwMDBjLCAweDExZmUsIDB4MDAwMCwgMHgzNzJmLCAweDAwMGIsIDB4ODA3MiwgMHgwMDAwLCAweDA0MDAsCi0JMHgwMDAwLCAweDgwMTAsIDB4MDAwOCwgMHgwMDBlLCAweDAwMDAsIDB4MDM3OSwgMHgwMDAzLCAweDgwNjAsCi0JMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHgwNGZlLCAweDAwMDgsIDB4Mzc0NCwgMHgwMDAzLCAweDgwOGMsCi0JMHgwMDA4LCAweDAwMDAsIDB4MDAwOCwgMHg5MTgwLCAweDAwMDEsIDB4MDAwNSwgMHgwMDA4LCAweDdmNjIsCi0JMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwMDA5LCAweDAwMDgsIDB4NDczYSwgMHgwMDBiLCAweDAwNjAsCi0JMHgwMDA4LCAweDgwNjIsIDB4MDAwOCwgMHgwMDFiLCAweDAwMDgsIDB4NDMwNCwgMHgwMDA4LCAweDQyMDYsCi0JMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwNDEyLCAweDAwMDAsIDB4NDc0MiwgMHgwMDBiLCAweDAzNWIsCi0JMHgwMDAzLCAweDgwOGMsIDB4MDAwOCwgMHgwMDAxLCAweDAwMDAsIDB4MDQ2MCwgMHgwMDAwLCAweDgwNjIsCi0JMHgwMDA4LCAweDAwMmIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDYwOSwgMHgwMDA4LCAweDQ3NGIsCi0JMHgwMDBiLCAweDgwNjYsIDB4MDAwMCwgMHgyMjBhLCAweDAwMDgsIDB4NDc0ZSwgMHgwMDBiLCAweDQyZmUsCi0JMHgwMDAwLCAweGZmYzAsIDB4MDAwMSwgMHhmZjAwLCAweDAwMDgsIDB4N2YwNCwgMHgwMDA4LCAweDgwNjAsCi0JMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHg5MTgwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDAwLCAweDdmNjIsCi0JMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwNDFhLCAweDAwMDgsIDB4NDc1YSwgMHgwMDBiLCAweDgwNzIsCi0JMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHgwMDQ2LCAweDAwMDMsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsCi0JMHgwMDAwLCAweDEzNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDQxMSwgMHgwMDAwLCAweDQ3NjMsCi0JMHgwMDBiLCAweDAyZmUsIDB4MDAwOCwgMHgwM2UwLCAweDAwMDksIDB4MGY2OSwgMHgwMDBiLCAweDBkMjIsCi0JMHgwMDAwLCAweDQwMDAsIDB4MDAwZiwgMHg4MjgwLCAweDAwMDksIDB4MDAwMiwgMHgwMDAwLCAweDEzODAsCi0JMHgwMDAxLCAweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MjIwOSwgMHgwMDA4LCAweDQ3NmYsCi0JMHgwMDBiLCAweDAyMDAsIDB4MDAwYSwgMHhmZmMwLCAweDAwMDEsIDB4MDAwNywgMHgwMDAwLCAweDdmMDYsCi0JMHgwMDAwLCAweDEzNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDYwYSwgMHgwMDA4LCAweDQ3NzcsCi0JMHgwMDBiLCAweDQwMDAsIDB4MDAwZiwgMHgzYTQ0LCAweDAwMDIsIDB4MGMwYSwgMHgwMDBiLCAweDJmNDQsCi0JMHgwMDBhLCAweDJmNDQsIDB4MDAwYSwgMHgwZTgzLCAweDAwMGIsIDB4ODA4YSwgMHgwMDA4LCAweDAwMDMsCi0JMHgwMDA4LCAweDgwNzQsIDB4MDAwMCwgMHhmMDgwLCAweDAwMDAsIDB4ODA3MiwgMHgwMDAwLCAweDMwMDAsCi0JMHgwMDA4LCAweDViODQsIDB4MDAwMywgMHg4MDU0LCAweDAwMDgsIDB4MDAxOSwgMHgwMDAwLCAweDAwMGEsCi0JMHgwMDBiLCAweDNhNDQsIDB4MDAwMiwgMHgwYzBhLCAweDAwMGIsIDB4ODA4YywgMHgwMDA4LCAweDAwMDAsCi0JMHgwMDA4LCAweDgwMTAsIDB4MDAwOCwgMHgwMDExLCAweDAwMDgsIDB4MDIzMywgMHgwMDBjLCAweDQyZmUsCi0JMHgwMDAwLCAweGZmYzAsIDB4MDAwMSwgMHgwMGZmLCAweDAwMDgsIDB4N2YxMCwgMHgwMDA4LCAweDAyMzMsCi0JMHgwMDBjLCAweDQzMTAsIDB4MDAwOCwgMHgwMjkyLCAweDAwMGIsIDB4Mzk0MSwgMHgwMDAyLCAweDBiOTksCi0JMHgwMDAzLCAweDQwMDAsIDB4MDAwZiwgMHg4MDcyLCAweDAwMDAsIDB4MDQwNCwgMHgwMDA4LCAweDQwMDAsCi0JMHgwMDBmLCAweDgwMTAsIDB4MDAwOCwgMHgwMDEyLCAweDAwMDgsIDB4MDIzMywgMHgwMDBjLCAweDAzNWUsCi0JMHgwMDBjLCAweDExMTAsIDB4MDAwMCwgMHgwMjMzLCAweDAwMGMsIDB4MTFmZSwgMHgwMDAwLCAweDM3OWYsCi0JMHgwMDAzLCAweDAwMGEsIDB4MDAwYiwgMHhjMmMwLCAweDAwMDksIDB4MDBmZiwgMHgwMDA4LCAweDdmMDAsCi0JMHgwMDAwLCAweGMzYzAsIDB4MDAwMSwgMHhmZjAwLCAweDAwMDgsIDB4MDBkMCwgMHgwMDA5LCAweDBiY2EsCi0JMHgwMDAzLCAweDBkMGEsIDB4MDAwMCwgMHg4NTgwLCAweDAwMDEsIDB4MTAwMCwgMHgwMDAwLCAweDdmNjIsCi0JMHgwMDA4LCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDA4MDksCi0JMHgwMDAwLCAweDQ3YjQsIDB4MDAwYiwgMHgwNGZlLCAweDAwMDgsIDB4MzNjMywgMHgwMDBiLCAweDA0NjAsCi0JMHgwMDAwLCAweDgwNjIsIDB4MDAwOCwgMHgwMDA0LCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDAyMTEsCi0JMHgwMDAwLCAweDQ3YmMsIDB4MDAwMywgMHgwMWZlLCAweDAwMDgsIDB4MDBlMCwgMHgwMDA5LCAweDBmYzMsCi0JMHgwMDBiLCAweDAyZmUsIDB4MDAwOCwgMHg0M2UwLCAweDAwMDEsIDB4MGJjOSwgMHgwMDAzLCAweDA1MDAsCi0JMHgwMDAyLCAweDdmMGEsIDB4MDAwMCwgMHhmZmUwLCAweDAwMDksIDB4MDgwMCwgMHgwMDAwLCAweDBmYWQsCi0JMHgwMDAzLCAweDBkMDgsIDB4MDAwOCwgMHg0MDAwLCAweDAwMGYsIDB4NDNmZSwgMHgwMDA4LCAweDNlODAsCi0JMHgwMDAxLCAweGZmYzAsIDB4MDAwMSwgMHg3ZmZmLCAweDAwMDAsIDB4MGQ2MCwgMHgwMDAwLCAweDdmNjIsCi0JMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwODA5LCAweDAwMDAsIDB4NDdkMiwgMHgwMDBiLCAweDgwNjAsCi0JMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHg4NGMwLCAweDAwMDEsIDB4ZmYwMCwgMHgwMDA4LCAweDdmNjAsCi0JMHgwMDBhLCAweDdmNjAsIDB4MDAwYSwgMHg3ZjYwLCAweDAwMGEsIDB4N2Y2MCwgMHgwMDBhLCAweDdmNjAsCi0JMHgwMDBhLCAweDdmNjAsIDB4MDAwYSwgMHg3ZjYwLCAweDAwMGEsIDB4N2Y2MCwgMHgwMDBhLCAweGZmODAsCi0JMHgwMDA5LCAweDEwMDAsIDB4MDAwMCwgMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDA4MDksCi0JMHgwMDAwLCAweDQ3ZTQsIDB4MDAwYiwgMHg0MDAwLCAweDAwMGYsIDB4YTkwZiwgMHhlYWY5LCAweDAwMDEsCi0JMHgwMDAyLCAweDAwMDQsIDB4MDAwOCwgMHgwMDEwLCAweDAwMjAsIDB4MDA0MCwgMHgwMDgwLCAweDAxMDAsCi0JMHgwMjAwLCAweDA0MDAsIDB4MDgwMCwgMHgxMDAwLCAweDIwMDAsIDB4NDAwMCwgMHg4MDAwLCAweDk1ZDAKKwkweDA4MDQsIDB4ZGFjNCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHg2NjU2LCAweDAxNTYsIDB4MDAxNiwKKwkweDAwMjYsIDB4MDAzNiwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHgxODA1LCAweDIwMTEsIDB4MDI3MCwKKwkweDA4MGMsIDB4YzM2NSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMTVlLCAweDkwMDUsIDB4MDE2OCwKKwkweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODIsIDB4MDAwNCwgMHgwYTA0LCAweGQ5OTcsIDB4OTY4MiwKKwkweDAwMDcsIDB4MGEwNCwgMHhkOWYzLCAweDA4MDQsIDB4ZDk5NywgMHg2MDE3LCAweDE5MDAsIDB4NjAwNywKKwkweDAwMDksIDB4MDgwNCwgMHhkYWM0LCAweDA4MGMsIDB4NmE2MSwgMHgxMTQwLCAweDIwMDEsIDB4MTgzNywKKwkweDIwMDQsIDB4OTA4NCwgMHgwMDA5LCAweDkwODYsIDB4MDAwOCwgMHgxMTEwLCAweDA4MDQsIDB4ZDhkNiwKKwkweDA4MGMsIDB4NjlmZCwgMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwgMHg5Njg0LCAweDAwZmYsIDB4MDAwNiwKKwkweDAwMTYsIDB4OTA4ZSwgMHgwMDAxLCAweDAxMTgsIDB4OTA4ZSwgMHgwMDAwLCAweDExMTgsIDB4MDAxZSwKKwkweDAwMGUsIDB4MDA4MCwgMHgwMDFlLCAweDAwMGUsIDB4OTA4MiwgMHgwMDA2LCAweDA2YTAsIDB4MDE1MCwKKwkweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsIDB4MDAwNCwgMHgwMTIwLCAweDk2ODYsIDB4MDAwNiwKKwkweDE5MDQsIDB4ZDk5NywgMHgwODBjLCAweGU4ZWQsIDB4MTEzOCwgMHgwODBjLCAweGU3ZWEsIDB4MTEyMCwKKwkweDYwMDcsIDB4MDAxMCwgMHgwODA0LCAweGRhYzQsIDB4MDA0NiwgMHg2NDEwLCAweDI0NTgsIDB4YmNhMCwKKwkweDAwNDYsIDB4MDgwYywgMHgzMjUwLCAweDA4MGMsIDB4ZDdmOCwgMHgwMDRlLCAweDAwMTYsIDB4OTAwNiwKKwkweDIwMDksIDB4MTg0OCwgMHgyMTBjLCAweGQxYTQsIDB4MDE0OCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywKKwkweGVjMzEsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsIDB4YzBlNSwgMHhiODAyLCAweDAwMWUsIDB4MDA0ZSwKKwkweDYwMDcsIDB4MDAwMSwgMHgwNDQ4LCAweDA4MGMsIDB4ZWFiOSwgMHgwMTk4LCAweDAwMTYsIDB4OTY4YywKKwkweDAwZmYsIDB4OTE4NiwgMHgwMDAyLCAweDAxNjAsIDB4OTE4NiwgMHgwMDAzLCAweDAxNDgsIDB4MDAxZSwKKwkweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwOTIwLCAweDA4MDQsIDB4ZDk5NywKKwkweDAwMWUsIDB4NjAxNywgMHgxOTAwLCAweDYwMDcsIDB4MDAwOSwgMHgwMDcwLCAweDA4MGMsIDB4MzM3NCwKKwkweDE5MDQsIDB4ZGNmYSwgMHgwODBjLCAweGVlMjYsIDB4MTkwNCwgMHhkY2ZhLCAweDA4MGMsIDB4ZGVjYiwKKwkweDE5MDQsIDB4ZDk5NywgMHg2MDA3LCAweDAwMTIsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTU0NywKKwkweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKKwkweDk1NDcsIDB4MDgwYywgMHg5YWIxLCAweDBjYjAsIDB4NjAwNywgMHgwMDA1LCAweDBjNjgsIDB4MDgwYywKKwkweGVlMjYsIDB4MTkwNCwgMHhkY2ZhLCAweDA4MGMsIDB4MzM3NCwgMHgxOTA0LCAweGRjZmEsIDB4MDgwYywKKwkweGRlY2IsIDB4MTkwNCwgMHhkOTk3LCAweDYwMDcsIDB4MDAyMCwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKKwkweDk1NDcsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4MDgwYywgMHgzMzc0LCAweDE5MDQsIDB4ZGNmYSwKKwkweDYwMDcsIDB4MDAyMywgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NTQ3LCAweDA4MGMsIDB4OWFiMSwKKwkweDAwMDUsIDB4MDgwYywgMHhlZTI2LCAweDE5MDQsIDB4ZGNmYSwgMHgwODBjLCAweDMzNzQsIDB4MTkwNCwKKwkweGRjZmEsIDB4MDgwYywgMHhkZWNiLCAweDE5MDQsIDB4ZDk5NywgMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwKKwkweDIwNzEsIDB4MDI2MCwgMHgyYzA4LCAweDIwMTEsIDB4MTgyMCwgMHgyMjE0LCAweDcwM2MsIDB4OTIwNiwKKwkweDExZTAsIDB4MjAxMSwgMHgxODFmLCAweDIyMTQsIDB4NzAzOCwgMHg5MDg0LCAweDAwZmYsIDB4OTIwNiwKKwkweDExYTAsIDB4NzI0MCwgMHgwODBjLCAweGQwYzYsIDB4MDU3MCwgMHgyMjYwLCAweDYwMDgsIDB4OTA4NiwKKwkweGZmZmYsIDB4MDEyMCwgMHg3MjQ0LCAweDYwMDgsIDB4OTIwNiwgMHgxNTI4LCAweDYwMjAsIDB4OTA4NiwKKwkweDAwMDcsIDB4MTUwOCwgMHgwODBjLCAweGIyZDMsIDB4MDRhMCwgMHg3MjQ0LCAweDkyODYsIDB4ZmZmZiwKKwkweDAxODAsIDB4MmMwOCwgMHgwODBjLCAweGQwYzYsIDB4MDFiMCwgMHgyMjYwLCAweDcyNDAsIDB4NjAwOCwKKwkweDkyMDYsIDB4MTE4OCwgMHg2MDEwLCAweDkxOTAsIDB4MDAwNCwgMHgyMjE0LCAweDkyMDYsIDB4MDFiOCwKKwkweDAwNTAsIDB4NzI0MCwgMHgyYzA4LCAweDkwMDYsIDB4MDgwYywgMHhlYmZiLCAweDExODAsIDB4NzI0NCwKKwkweDkyODYsIDB4ZmZmZiwgMHgwMWIwLCAweDIxNjAsIDB4NjAwNywgMHgwMDI2LCAweDYwMTcsIDB4MTcwMCwKKwkweDcyMTQsIDB4OTI5NiwgMHhmZmZmLCAweDExODAsIDB4NjAwNywgMHgwMDI1LCAweDAwNjgsIDB4NjAyMCwKKwkweDkwODYsIDB4MDAwNywgMHgxZDgwLCAweDYwMDQsIDB4OTA4NiwgMHgwMDI0LCAweDExMTAsIDB4MDgwYywKKwkweGIyZDMsIDB4MjE2MCwgMHg2MDA3LCAweDAwMjUsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTU0NywKKwkweDA4MGMsIDB4OWFiMSwgMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAwMSwKKwkweDA4MGMsIDB4NjY1NiwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDIwYTksIDB4MDAwNCwKKwkweDIwMTksIDB4MTgwNSwgMHgyMDExLCAweDAyNzYsIDB4MDgwYywgMHhjMzY1LCAweDAwM2UsIDB4MDAyZSwKKwkweDAwMWUsIDB4MDE1ZSwgMHgwMTIwLCAweDYwMDcsIDB4MDAzMSwgMHgwODA0LCAweGRhYzQsIDB4MDgwYywKKwkweGJmN2IsIDB4MDgwYywgMHg3NjM3LCAweDExOTAsIDB4MDAwNiwgMHgwMDI2LCAweDAwMzYsIDB4MDgwYywKKwkweDc2NTEsIDB4MTEzOCwgMHgwODBjLCAweDc5MzIsIDB4MDgwYywgMHg2MTJlLCAweDA4MGMsIDB4NzU2MywKKwkweDAwMTAsIDB4MDgwYywgMHg3NjBmLCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLCAweDAwMDUsIDB4MDgwYywKKwkweDMzNzQsIDB4MTkwNCwgMHhkY2ZhLCAweDA4MGMsIDB4ZGVjYiwgMHgxOTA0LCAweGQ5OTcsIDB4NjEwNiwKKwkweDA4MGMsIDB4ZGVlNywgMHgxMTIwLCAweDYwMDcsIDB4MDAyYiwgMHgwODA0LCAweGRhYzQsIDB4NjAwNywKKwkweDAwMmMsIDB4MDgwNCwgMHhkYWM0LCAweDA4MGMsIDB4ZWUyNiwgMHgxOTA0LCAweGRjZmEsIDB4MDgwYywKKwkweDMzNzQsIDB4MTkwNCwgMHhkY2ZhLCAweDA4MGMsIDB4ZGVjYiwgMHgxOTA0LCAweGQ5OTcsIDB4NjEwNiwKKwkweDA4MGMsIDB4ZGVlYywgMHgxMTIwLCAweDYwMDcsIDB4MDAyZSwgMHgwODA0LCAweGRhYzQsIDB4NjAwNywKKwkweDAwMmYsIDB4MDgwNCwgMHhkYWM0LCAweDA4MGMsIDB4MzM3NCwgMHgxOTA0LCAweGRjZmEsIDB4MDBlNiwKKwkweDAwZDYsIDB4MDBjNiwgMHg2MDEwLCAweDIwNTgsIDB4YjkwNCwgMHg5MTg0LCAweDAwZmYsIDB4OTA4NiwKKwkweDAwMDYsIDB4MDE1OCwgMHg5MTg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDg2LCAweDAwMDYsIDB4MDEyOCwKKwkweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDA4MDQsIDB4ZGFjYiwgMHgwODBjLCAweDU3ZDksIDB4ZDBlNCwKKwkweDA5MDQsIDB4ZGM0NSwgMHgyMDcxLCAweDAyNmMsIDB4NzAxMCwgMHg2MDNhLCAweDcwMTQsIDB4NjAzZSwKKwkweDcxMDgsIDB4NzIwYywgMHgwODBjLCAweDZhOWYsIDB4MDE0MCwgMHg2MDEwLCAweDIwNTgsIDB4YjgxMCwKKwkweDkxMDYsIDB4MTExOCwgMHhiODE0LCAweDkyMDYsIDB4MDUxMCwgMHgwODBjLCAweDZhOWIsIDB4MTViOCwKKwkweDIwNjksIDB4MTgwMCwgMHg2ODgwLCAweDkyMDYsIDB4MTU5MCwgMHg2ODdjLCAweDkxMDYsIDB4MTU3OCwKKwkweDcyMTAsIDB4MDgwYywgMHhkMGM2LCAweDA1OTAsIDB4MDgwYywgMHhkZGI4LCAweDA1NzgsIDB4MDgwYywKKwkweGVjYWQsIDB4MDU2MCwgMHg2MjJlLCAweDYwMDcsIDB4MDAzNiwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKKwkweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4NzIxNCwKKwkweDkyODYsIDB4ZmZmZiwgMHgwMTUwLCAweDA4MGMsIDB4ZDBjNiwgMHgwMWMwLCAweDkyODAsIDB4MDAwMiwKKwkweDIwMDQsIDB4NzExMCwgMHg5MTA2LCAweDExOTAsIDB4MDhlMCwgMHg3MjEwLCAweDJjMDgsIDB4OTA4NSwKKwkweDAwMDEsIDB4MDgwYywgMHhlYmZiLCAweDJjMTAsIDB4MjE2MCwgMHgwMTQwLCAweDA4OTAsIDB4NjAwNywKKwkweDAwMzcsIDB4NjAyZiwgMHgwMDA5LCAweDYwMTcsIDB4MTUwMCwgMHgwOGI4LCAweDYwMDcsIDB4MDAzNywKKwkweDYwMmYsIDB4MDAwMywgMHg2MDE3LCAweDE3MDAsIDB4MDg4MCwgMHg2MDA3LCAweDAwMTIsIDB4MDg2OCwKKwkweDA4MGMsIDB4MzM3NCwgMHgxOTA0LCAweGRjZmEsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDQsIDB4OTA4NCwKKwkweGZmMDAsIDB4ODAwNywgMHg5MDg2LCAweDAwMDYsIDB4MTkwNCwgMHhkYWNiLCAweDAwZTYsIDB4MDBkNiwKKwkweDAwYzYsIDB4MDgwYywgMHg1N2Q5LCAweGQwZTQsIDB4MDkwNCwgMHhkY2JkLCAweDIwNjksIDB4MTgwMCwKKwkweDIwNzEsIDB4MDI2YywgMHg3MDA4LCAweDYwM2EsIDB4NzIwYywgMHg2MjNlLCAweDkyODYsIDB4ZmZmZiwKKwkweDExNTAsIDB4NzIwOCwgMHgwMGM2LCAweDJjMDgsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4ZWJmYiwKKwkweDJjMTAsIDB4MDBjZSwgMHgwNWU4LCAweDA4MGMsIDB4ZDBjNiwgMHgwNWQwLCAweDcxMDgsIDB4OTI4MCwKKwkweDAwMDIsIDB4MjAwNCwgMHg5MTA2LCAweDE1YTAsIDB4MDBjNiwgMHgwMDI2LCAweDIyNjAsIDB4MDgwYywKKwkweGNjZTYsIDB4MDAyZSwgMHgwMGNlLCAweDcxMTgsIDB4OTE4YywgMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwKKwkweDAwMDEsIDB4MDE3OCwgMHg5MTg2LCAweDAwMDUsIDB4MDExOCwgMHg5MTg2LCAweDAwMDcsIDB4MTE5OCwKKwkweDkyODAsIDB4MDAwNSwgMHgyMDA0LCAweDkwMDUsIDB4MDE3MCwgMHgwODBjLCAweGRkYjgsIDB4MDkwNCwKKwkweGRjM2UsIDB4MDA1NiwgMHg3NTEwLCAweDc2MTQsIDB4MDgwYywgMHhlY2M2LCAweDAwNWUsIDB4MDBjZSwKKwkweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDYwMDcsIDB4MDAzYiwgMHg2MDJmLCAweDAwMDksIDB4NjAxNywKKwkweDJhMDAsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTRmZiwgMHgwODBjLCAweDlhYjEsIDB4MGM3OCwKKwkweDYwMDcsIDB4MDAzYiwgMHg2MDJmLCAweDAwMDMsIDB4NjAxNywgMHgwMzAwLCAweDYwMDMsIDB4MDAwMSwKKwkweDA4MGMsIDB4OTRmZiwgMHgwODBjLCAweDlhYjEsIDB4MGMxMCwgMHg2MDA3LCAweDAwM2IsIDB4NjAyZiwKKwkweDAwMGIsIDB4NjAxNywgMHgwMDAwLCAweDA4MDQsIDB4ZGMxNSwgMHgwMGU2LCAweDAwMjYsIDB4MDgwYywKKwkweDZhNjEsIDB4MDU1MCwgMHgwODBjLCAweDY5ZmQsIDB4MDgwYywgMHhlZTk3LCAweDE1MTgsIDB4MjA3MSwKKwkweDE4MDAsIDB4NzBkYywgMHg5MDg1LCAweDAwMDMsIDB4NzBkZSwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwKKwkweDcyYjAsIDB4OTI4NCwgMHgwMGZmLCAweDcwN2UsIDB4NzhlNiwgMHg5Mjg0LCAweGZmMDAsIDB4NzI4MCwKKwkweDkyMDUsIDB4NzA4MiwgMHg3OGVhLCAweDAwZmUsIDB4NzBlNywgMHgwMDAwLCAweDA4MGMsIDB4NmE5ZiwKKwkweDAxMjAsIDB4MjAxMSwgMHgxYTAxLCAweDIwMTMsIDB4MDdkMCwgMHhkMGFjLCAweDExMjgsIDB4MDgwYywKKwkweDMwMDAsIDB4MDAxMCwgMHgwODBjLCAweGVlY2IsIDB4MDAyZSwgMHgwMGVlLCAweDA4MGMsIDB4YjJkMywKKwkweDA4MDQsIDB4ZGFjYSwgMHgwODBjLCAweGIyZDMsIDB4MDAwNSwgMHgyNjAwLCAweDAwMDIsIDB4ZGQxMSwKKwkweGRkM2YsIDB4ZGQ1MCwgMHhkZDExLCAweGRkMTEsIDB4ZGQxMywgMHhkZDYxLCAweGRkMTEsIDB4ZGQxMSwKKwkweGRkMTEsIDB4ZGQyZCwgMHhkZDExLCAweGRkMTEsIDB4ZGQxMSwgMHhkZDZjLCAweGRkODIsIDB4ZGRiMywKKwkweGRkMTEsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4ZWUyNiwgMHgxZDIwLCAweDA4MGMsIDB4MzM3NCwKKwkweDFkMDgsIDB4NzAzOCwgMHg2MDE2LCAweDYwMDcsIDB4MDA0NSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKKwkweDk1NDcsIDB4MDAwNSwgMHgwODBjLCAweDMyNTAsIDB4MDgwYywgMHhkN2Y4LCAweDYwMDcsIDB4MDAwMSwKKwkweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk1NDcsIDB4MDAwNSwgMHgwODBjLCAweGVlMjYsIDB4MTk1MCwKKwkweDA4MGMsIDB4MzM3NCwgMHgxOTM4LCAweDA4MGMsIDB4ZGVjYiwgMHgxZDYwLCAweDcwM2MsIDB4NjAxNiwKKwkweDYwMDcsIDB4MDA0YSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NTQ3LCAweDAwMDUsIDB4MDgwYywKKwkweDMzNzQsIDB4MTkwNCwgMHhkY2ZhLCAweDIwMDksIDB4MDA0MSwgMHgwODBjLCAweGVlZDQsIDB4NjAwNywKKwkweDAwNDcsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTU0NywgMHgwODBjLCAweDlhYjEsIDB4MDAwNSwKKwkweDA4MGMsIDB4MzM3NCwgMHgxOTA0LCAweGRjZmEsIDB4MjAwOSwgMHgwMDQyLCAweDA4MGMsIDB4ZWVkNCwKKwkweDYwMDcsIDB4MDA0NywgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NTQ3LCAweDA4MGMsIDB4OWFiMSwKKwkweDAwMDUsIDB4MDgwYywgMHgzMzc0LCAweDE5MDQsIDB4ZGNmYSwgMHgyMDA5LCAweDAwNDYsIDB4MDgwYywKKwkweGVlZDQsIDB4MDgwYywgMHhiMmQzLCAweDAwMDUsIDB4MjAwMSwgMHgxODI0LCAweDIwMDQsIDB4OTA4MiwKKwkweDAwZTEsIDB4MTI2OCwgMHgwODBjLCAweGRkZDUsIDB4MDkwNCwgMHhkY2ZhLCAweDYwMDcsIDB4MDA0ZSwKKwkweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk1NDcsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4NjAwNywKKwkweDAwMTIsIDB4MGNiMCwgMHg2MDA3LCAweDAwNGYsIDB4NjAxNywgMHgwMDAwLCAweDcxMzQsIDB4OTE4YywKKwkweDAwZmYsIDB4ODFmZiwgMHgwNTA4LCAweDkxODYsIDB4MDAwMSwgMHgxMTYwLCAweDcxNDAsIDB4MjAwMSwKKwkweDE5YmUsIDB4MjAwNCwgMHg5MTA2LCAweDExYjAsIDB4NzE0NCwgMHgyMDAxLCAweDE5YmYsIDB4MjAwNCwKKwkweDkxMDYsIDB4MDE5MCwgMHg5MTg2LCAweDAwMDIsIDB4MTE2OCwgMHgyMDExLCAweDAyNzYsIDB4MjBhOSwKKwkweDAwMDQsIDB4NjAxMCwgMHgwMDk2LCAweDIwNDgsIDB4MjAxOSwgMHgwMDBhLCAweDA4MGMsIDB4YzM3OSwKKwkweDAwOWUsIDB4MDExMCwgMHg2MDE3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTU0NywKKwkweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDYwMDcsIDB4MDA1MCwgMHg3MDNjLCAweDYwMTYsIDB4MGNhMCwKKwkweDAwMTYsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsIDB4MDBiNiwgMHgwMGM2LCAweDIyNjAsIDB4NjAxMCwKKwkweDIwNTgsIDB4YjhjYywgMHhkMDg0LCAweDAxNTAsIDB4NzEyOCwgMHg2MDQ0LCAweDkxMDYsIDB4MTEyMCwKKwkweDcxMmMsIDB4NjA0OCwgMHg5MTA2LCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwKKwkweDAwY2UsIDB4MDBiZSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwOTYsIDB4MDA4NiwKKwkweDAwZTYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwKKwkweDIwZTEsIDB4MDAwMCwgMHgyMDAxLCAweDE5YTEsIDB4MjAwMywgMHgwMDAwLCAweDA4MGMsIDB4MTAyNywKKwkweDA1YTAsIDB4MjkwMCwgMHg2MDE2LCAweDcwOTAsIDB4ODAwNCwgMHhhODE2LCAweDkwOGEsIDB4MDAxZSwKKwkweDAyZDAsIDB4YTgzMywgMHgwMDFlLCAweDIwYTksIDB4MDAxZSwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywKKwkweDkwODAsIDB4MDAxYiwgMHgyMGEwLCAweDIwMDEsIDB4MTlhMSwgMHgwMDE2LCAweDIwMGMsIDB4MDQ3MSwKKwkweDAwMWUsIDB4ODFmZiwgMHgwMWI4LCAweDI5NDAsIDB4MDgwYywgMHgxMDI3LCAweDAxYjAsIDB4MjkwMCwKKwkweGEwMDYsIDB4MjEwMCwgMHgwYzE4LCAweGE4MzIsIDB4MjBhOCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywKKwkweDkwODAsIDB4MDAxYiwgMHgyMGEwLCAweDIwMDEsIDB4MTlhMSwgMHgwMDE2LCAweDIwMGMsIDB4MDBiMSwKKwkweDAwMWUsIDB4MDAwMCwgMHg5MDg1LCAweDAwMDEsIDB4MDA0OCwgMHgyMDcxLCAweDE4MDAsIDB4NzA5MywKKwkweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4MGZjMCwgMHg5MDA2LCAweDAxMmUsIDB4MDFkZSwKKwkweDAxY2UsIDB4MDBlZSwgMHgwMDhlLCAweDAwOWUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwKKwkweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDkxOGMsIDB4ZmZmZiwgMHgxMWIwLCAweDA4MGMsIDB4MjNlMiwKKwkweDIwOTksIDB4MDI2YywgMHgyMDAxLCAweDAwMTQsIDB4MzUxOCwgMHg5MzEyLCAweDAxMDgsIDB4MTIxOCwKKwkweDIzYTgsIDB4NDAwMywgMHgwNDAwLCAweDIwYTgsIDB4NDAwMywgMHgyMmE4LCAweDgxMDgsIDB4MDgwYywKKwkweDIzZTIsIDB4MjA5OSwgMHgwMjYwLCAweDBjYTgsIDB4MDgwYywgMHgyM2UyLCAweDIwNjEsIDB4MTlhMSwKKwkweDYwMDQsIDB4MjA5OCwgMHg2MDA4LCAweDM1MTgsIDB4OTMxMiwgMHgwMTA4LCAweDEyMTgsIDB4MjNhOCwKKwkweDQwMDMsIDB4MDA0OCwgMHgyMGE4LCAweDQwMDMsIDB4MjJhOCwgMHg4MTA4LCAweDA4MGMsIDB4MjNlMiwKKwkweDIwOTksIDB4MDI2MCwgMHgwY2E4LCAweDIwNjEsIDB4MTlhMSwgMHgyMDE5LCAweDAyODAsIDB4MzMwMCwKKwkweDkzMWUsIDB4MDExMCwgMHg2MDA2LCAweDAwMjAsIDB4MjAwMSwgMHgwMjYwLCAweDYwMDYsIDB4ODEwOCwKKwkweDIxNjIsIDB4OTI5MiwgMHgwMDIxLCAweDkyOTYsIDB4ZmZmZiwgMHg2MjBhLCAweDAwY2UsIDB4MDAzZSwKKwkweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwKKwkweDAwYzYsIDB4ODFmZiwgMHgxMWI4LCAweDA4MGMsIDB4MjNmYSwgMHgyMGExLCAweDAyNGMsIDB4MjAwMSwKKwkweDAwMTQsIDB4MzUxOCwgMHg5MzEyLCAweDEyMTgsIDB4MjNhOCwgMHg0MDAzLCAweDA0MTgsIDB4MjBhOCwKKwkweDQwMDMsIDB4ODJmZiwgMHgwMWY4LCAweDIyYTgsIDB4ODEwOCwgMHgwODBjLCAweDIzZmEsIDB4MjBhMSwKKwkweDAyNDAsIDB4MGM5OCwgMHgwODBjLCAweDIzZmEsIDB4MjA2MSwgMHgxOWE0LCAweDYwMDQsIDB4MjBhMCwKKwkweDYwMDgsIDB4MzUxOCwgMHg5MzEyLCAweDEyMTgsIDB4MjNhOCwgMHg0MDAzLCAweDAwNTgsIDB4MjBhOCwKKwkweDQwMDMsIDB4ODJmZiwgMHgwMTM4LCAweDIyYTgsIDB4ODEwOCwgMHgwODBjLCAweDIzZmEsIDB4MjBhMSwKKwkweDAyNDAsIDB4MGM5OCwgMHgyMDYxLCAweDE5YTQsIDB4MjAxOSwgMHgwMjYwLCAweDM0MDAsIDB4OTMxZSwKKwkweDAxMTAsIDB4NjAwNiwgMHgwMDIwLCAweDIwMDEsIDB4MDI0MCwgMHg2MDA2LCAweDgxMDgsIDB4MjE2MiwKKwkweDkyOTIsIDB4MDAyMSwgMHg5Mjk2LCAweGZmZmYsIDB4NjIwYSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwKKwkweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA2NiwgMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwKKwkweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwMTcwLCAweDk2ODYsIDB4MDAwNCwKKwkweDAxNTgsIDB4YmUwNCwgMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxMjgsIDB4OTY4NiwKKwkweDAwMDQsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDA2ZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBkNiwKKwkweDA4MGMsIDB4ZGY2MywgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweGRmNzAsIDB4MTUyMCwKKwkweDY4MGMsIDB4OTA4YywgMHhmZjAwLCAweDY4MjAsIDB4OTA4NCwgMHgwMGZmLCAweDkxMTUsIDB4NjIxNiwKKwkweDY4MjQsIDB4NjAyZSwgMHhkMWU0LCAweDAxMzAsIDB4OTAwNiwgMHgwODBjLCAweGVmZjQsIDB4MjAwOSwKKwkweDAwMDEsIDB4MDA3OCwgMHhkMWVjLCAweDAxODAsIDB4NjkyMCwgMHg5MThjLCAweDAwZmYsIDB4NjgyNCwKKwkweDA4MGMsIDB4Mjg3MywgMHgxMTQ4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGVmZjQsIDB4MjExMCwKKwkweDkwMGUsIDB4MDgwYywgMHgzMjk5LCAweDAwMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwKKwkweDAwZGUsIDB4MDAwNSwgMHgwMGI2LCAweDAwYzYsIDB4MDgwYywgMHhiMzI1LCAweDA1YTgsIDB4MDAxNiwKKwkweDAwMjYsIDB4MDBjNiwgMHgyMDExLCAweDAyNjMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MDgwYywKKwkweDI4NzMsIDB4MTU3OCwgMHgwODBjLCAweDY2YjksIDB4MTU2MCwgMHhiZTEyLCAweGJkMTYsIDB4MDBjZSwKKwkweDAwMmUsIDB4MDAxZSwgMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhlZTI2LCAweDExZDgsIDB4MDgwYywKKwkweDMzNzQsIDB4MTFjMCwgMHgwODBjLCAweGRlY2IsIDB4MDUxMCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywKKwkweDY2NmEsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjY5NiwgMHg2MDE3LCAweDAwMDAsIDB4NjAyMywKKwkweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk1NDcsIDB4MDgwYywKKwkweDlhYjEsIDB4MDAxMCwgMHgwODBjLCAweGIyZDMsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsIDB4MDBiZSwKKwkweDAwMDUsIDB4MDgwYywgMHhiMmQzLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDBjYTgsIDB4MDgwYywKKwkweGIyZDMsIDB4OTAwNiwgMHgwYzk4LCAweDIwNjksIDB4MDI2ZCwgMHg2ODAwLCAweDkwODIsIDB4MDAxMCwKKwkweDEyMjgsIDB4NjAxNywgMHgwMDAwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA4LCAweDkwMDYsIDB4MDAwNSwKKwkweDYwMTcsIDB4MDAwMCwgMHgyMDY5LCAweDAyNmMsIDB4NjgwOCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwKKwkweDA4MDAsIDB4MTE5MCwgMHg2OTA0LCAweDkxODYsIDB4MDAxOCwgMHgwMTE4LCAweDkxODYsIDB4MDAxNCwKKwkweDExNTgsIDB4ODEwZiwgMHg2ODAwLCAweDkwODQsIDB4MDBmZiwgMHg5MTBkLCAweDYxNWEsIDB4OTA4ZSwKKwkweDAwMTQsIDB4MDExMCwgMHg5MDhlLCAweDAwMTAsIDB4MDAwNSwgMHg2MDA0LCAweDkwYjIsIDB4MDA1MywKKwkweDFhMGMsIDB4MGRjNSwgMHg5MWI2LCAweDAwMTMsIDB4MTEzMCwgMHgyMDA4LCAweDkxYjIsIDB4MDA0MCwKKwkweDFhMDQsIDB4ZTBkMiwgMHgwNDBhLCAweDkxYjYsIDB4MDAyNywgMHgwMTk4LCAweDkxODYsIDB4MDAxNSwKKwkweDAxMTgsIDB4OTE4NiwgMHgwMDE2LCAweDExNDgsIDB4MDgwYywgMHhkODA5LCAweDAxMjgsIDB4NjAwMCwKKwkweDkwODYsIDB4MDAwMiwgMHgwOTA0LCAweGJjZmQsIDB4MDAwNSwgMHg5MWI2LCAweDAwMTQsIDB4MTkwYywKKwkweDBkYzUsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjY5NiwgMHgwODBjLCAweDk5YTUsIDB4MDgwYywKKwkweGIzMDYsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4ZGZmYywgMHhkZmZlLCAweGRmZmMsIDB4ZGZmYywKKwkweGRmZmMsIDB4ZGZmZSwgMHhlMDBkLCAweGUwY2IsIDB4ZTA1MSwgMHhlMGNiLCAweGUwNzksIDB4ZTBjYiwKKwkweGUwMGQsIDB4ZTBjYiwgMHhlMGMzLCAweGUwY2IsIDB4ZTBjMywgMHhlMGNiLCAweGUwY2IsIDB4ZGZmYywKKwkweGRmZmMsIDB4ZGZmYywgMHhkZmZjLCAweGRmZmMsIDB4ZGZmYywgMHhkZmZjLCAweGRmZmMsIDB4ZGZmYywKKwkweGRmZmMsIDB4ZGZmYywgMHhkZmZlLCAweGRmZmMsIDB4ZTBjYiwgMHhkZmZjLCAweGRmZmMsIDB4ZTBjYiwKKwkweGRmZmMsIDB4ZTBjOCwgMHhlMGNiLCAweGRmZmMsIDB4ZGZmYywgMHhkZmZjLCAweGRmZmMsIDB4ZTBjYiwKKwkweGUwY2IsIDB4ZGZmYywgMHhlMGNiLCAweGUwY2IsIDB4ZGZmYywgMHhlMDA4LCAweGRmZmMsIDB4ZGZmYywKKwkweGRmZmMsIDB4ZGZmYywgMHhlMGM3LCAweGUwY2IsIDB4ZGZmYywgMHhkZmZjLCAweGUwY2IsIDB4ZTBjYiwKKwkweGRmZmMsIDB4ZGZmYywgMHhkZmZjLCAweGRmZmMsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4OTlhNSwKKwkweDA4MGMsIDB4ZDdmYiwgMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHg5YWIxLCAweDA4MDQsIDB4ZTBkMSwKKwkweDkwMDYsIDB4MDgwYywgMHg2NjU2LCAweDA4MDQsIDB4ZTBjYiwgMHgwODBjLCAweDZhOWIsIDB4MTkwNCwKKwkweGUwY2IsIDB4OTAwNiwgMHgwODBjLCAweDY2NTYsIDB4NjAxMCwgMHgyMDU4LCAweGI4MTAsIDB4OTA4NiwKKwkweDAwZmYsIDB4MTE0MCwgMHgwMGY2LCAweDIwNzksIDB4MTgwMCwgMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwKKwkweDAwZmUsIDB4MDBiOCwgMHg2MDEwLCAweDIwNTgsIDB4YjhjMCwgMHg5MDA1LCAweDA5MDQsIDB4ZTBjYiwKKwkweDA4MGMsIDB4MzNhNSwgMHgxOTA0LCAweGUwY2IsIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA4NiwKKwkweDAwMDIsIDB4MTEzOCwgMHgwMGY2LCAweDIwNzksIDB4MTgwMCwgMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwKKwkweDAwZmUsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjY2YSwgMHgwODBjLCAweDk5YTUsIDB4NjAyMywKKwkweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDk1NDcsIDB4MDgwYywKKwkweDlhYjEsIDB4NjExMCwgMHgyMTU4LCAweDIwMDksIDB4MDAwMSwgMHgwODBjLCAweDg4NGIsIDB4MDgwNCwKKwkweGUwZDEsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsIDB4OTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4OTY4NiwKKwkweDAwMDYsIDB4MDE0OCwgMHg5Njg2LCAweDAwMDQsIDB4MDEzMCwgMHgwODBjLCAweDkwMzEsIDB4MjAwMSwKKwkweDAwMDQsIDB4MDgwYywgMHg2Njk2LCAweDA4MGMsIDB4ZjA0MywgMHgwOTA0LCAweGUwY2IsIDB4MDgwYywKKwkweDk5YTUsIDB4MjAwMSwgMHgwMDA0LCAweDA4MGMsIDB4NjY2YSwgMHg2MDIzLCAweDAwMDEsIDB4NjAwMywKKwkweDAwMDEsIDB4NjAwNywgMHgwMDAzLCAweDA4MGMsIDB4OTU0NywgMHgwODBjLCAweDlhYjEsIDB4MDgwNCwKKwkweGUwZDEsIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDExNTgsIDB4MDAzNiwKKwkweDAwNDYsIDB4NjAxMCwgMHgyMDU4LCAweGJiYTAsIDB4MjAyMSwgMHgwMDA2LCAweDA4MGMsIDB4NGRmYiwKKwkweDAwNGUsIDB4MDAzZSwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHhlMGVmLCAweDY2MTAsIDB4MjY1OCwKKwkweGJlMDQsIDB4MDA2NiwgMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsIDB4MDA2ZSwKKwkweDAxODAsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NjY5NiwgMHg5Mjg0LCAweDAwZmYsIDB4OTA4ZSwKKwkweDAwMDcsIDB4MDExOCwgMHg5MDhlLCAweDAwMDQsIDB4MTEyMCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywKKwkweDY2NmEsIDB4MDgwYywgMHg2YTliLCAweDExZjgsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4ZDBhNCwKKwkweDAxZDAsIDB4YmUwNCwgMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxYTAsIDB4MDBmNiwKKwkweDIwNzksIDB4MTgwMCwgMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwgMHgwMGZlLCAweDA4MDQsIDB4ZTAzOSwKKwkweDIwMDEsIDB4MDAwNCwgMHgwMDMwLCAweDIwMDEsIDB4MDAwNiwgMHgwNDQ5LCAweDAwMjAsIDB4MDAxOCwKKwkweDAwMTAsIDB4MDgwYywgMHg2Njk2LCAweDA4MGMsIDB4OTlhNSwgMHgwODBjLCAweGIyZDMsIDB4MDgwYywKKwkweDlhYjEsIDB4MDAwNSwgMHgyNjAwLCAweDAwMDIsIDB4ZTBlNiwgMHhlMGU2LCAweGUwZTYsIDB4ZTBlNiwKKwkweGUwZTYsIDB4ZTBlOCwgMHhlMGU2LCAweGUwZTgsIDB4ZTBlNiwgMHhlMGU2LCAweGUwZTgsIDB4ZTBlNiwKKwkweGUwZTYsIDB4ZTBlNiwgMHhlMGU4LCAweGUwZTgsIDB4ZTBlOCwgMHhlMGU4LCAweDA4MGMsIDB4MGRjNSwKKwkweDA4MGMsIDB4OTlhNSwgMHgwODBjLCAweGIyZDMsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4MDAxNiwKKwkweDAwYjYsIDB4MDBkNiwgMHg2MTEwLCAweDIxNTgsIDB4YjkwMCwgMHhkMTg0LCAweDAxMzgsIDB4MDgwYywKKwkweDY2NmEsIDB4OTAwNiwgMHgwODBjLCAweDY2NTYsIDB4MDgwYywgMHgzMjc5LCAweDAwZGUsIDB4MDBiZSwKKwkweDAwMWUsIDB4MDAwNSwgMHg2NjEwLCAweDI2NTgsIDB4YjgwNCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywKKwkweDkwYjIsIDB4MDAwYywgMHgxYTBjLCAweDBkYzUsIDB4OTFiNiwgMHgwMDE1LCAweDExMTAsIDB4MDAzYiwKKwkweDAwMjgsIDB4OTFiNiwgMHgwMDE2LCAweDE5MGMsIDB4MGRjNSwgMHgwMDZiLCAweDAwMDUsIDB4YmQ5ZiwKKwkweGJkOWYsIDB4YmQ5ZiwgMHhiZDlmLCAweGUxODQsIDB4YmQ5ZiwgMHhlMTZlLCAweGUxMmYsIDB4YmQ5ZiwKKwkweGJkOWYsIDB4YmQ5ZiwgMHhiZDlmLCAweGJkOWYsIDB4YmQ5ZiwgMHhiZDlmLCAweGJkOWYsIDB4ZTE4NCwKKwkweGJkOWYsIDB4ZTE2ZSwgMHhlMTc1LCAweGJkOWYsIDB4YmQ5ZiwgMHhiZDlmLCAweGJkOWYsIDB4MDBmNiwKKwkweDA4MGMsIDB4NmE5YiwgMHgxMWQ4LCAweDA4MGMsIDB4ZDdlMywgMHgxMWMwLCAweDYwMTAsIDB4OTA1ZCwKKwkweDAxYTgsIDB4YjhjMCwgMHg5MDA1LCAweDAxOTAsIDB4OTAwNiwgMHgwODBjLCAweDY2NTYsIDB4MjAwMSwKKwkweDAwMDIsIDB4MDgwYywgMHg2NjZhLCAweDYwMjMsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywKKwkweDAwMDIsIDB4MDgwYywgMHg5NTQ3LCAweDA4MGMsIDB4OWFiMSwgMHgwMGYwLCAweDIwMTEsIDB4MDI2MywKKwkweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDA4MGMsIDB4Mjg3MywgMHgxMWIwLCAweDA4MGMsIDB4NjcyNCwKKwkweDAxMTgsIDB4MDgwYywgMHhiMmQzLCAweDAwODAsIDB4YjgxMCwgMHgwMDA2LCAweGI4MTQsIDB4MDAwNiwKKwkweGI4YzAsIDB4MDAwNiwgMHgwODBjLCAweDYxNDgsIDB4MDAwZSwgMHhiOGMyLCAweDAwMGUsIDB4YjgxNiwKKwkweDAwMGUsIDB4YjgxMiwgMHgwODBjLCAweGIyZDMsIDB4MDBmZSwgMHgwMDA1LCAweDY2MDQsIDB4OTZiNiwKKwkweDAwMWUsIDB4MTExMCwgMHgwODBjLCAweGIyZDMsIDB4MDAwNSwgMHgwODBjLCAweGMxZGMsIDB4MTE0OCwKKwkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwYywgMHg5NTQ3LCAweDA4MGMsIDB4OWFiMSwKKwkweDAwMTAsIDB4MDgwYywgMHhiMmQzLCAweDAwMDUsIDB4MDgwNCwgMHhiMmQzLCAweDYwMDQsIDB4OTA4YSwKKwkweDAwNTMsIDB4MWEwYywgMHgwZGM1LCAweDA4MGMsIDB4OTlhNSwgMHgwODBjLCAweGIzMDYsIDB4MDgwYywKKwkweDlhYjEsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHhlMWE5LCAweGUxYTksIDB4ZTFhOSwKKwkweGUxYTksIDB4ZTFhYiwgMHhlMWE5LCAweGUxYTksIDB4ZTFhOSwgMHhlMWE5LCAweGUxYTksIDB4ZTFhOSwKKwkweGUxYTksIDB4ZTFhOSwgMHhlMWE5LCAweGUxYTksIDB4ZTFhOSwgMHhlMWE5LCAweGUxYTksIDB4ZTFhOSwKKwkweGUxYTksIDB4MDgwYywgMHgwZGM1LCAweDAwOTYsIDB4MDBiNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwKKwkweDAwNDYsIDB4MDAyNiwgMHg2MjEwLCAweDIyNTgsIDB4YjhiYywgMHg5MDA1LCAweDExYTgsIDB4NjEwNiwKKwkweDIwNzEsIDB4MDI2MCwgMHg3NDQ0LCAweDk0YTQsIDB4ZmYwMCwgMHgwOTA0LCAweGUyMTEsIDB4MDgwYywKKwkweGVmZTgsIDB4MTE3MCwgMHg5NDg2LCAweDIwMDAsIDB4MTE1OCwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwKKwkweDAyMDAsIDB4MDgwYywgMHg4YTUwLCAweDAwMjAsIDB4OTAyNiwgMHgwODBjLCAweGVlNmIsIDB4MGMzOCwKKwkweDA4MGMsIDB4MTAwZSwgMHgwOTBjLCAweDBkYzUsIDB4NjAwMywgMHgwMDA3LCAweGE4NjcsIDB4MDEwZCwKKwkweDkwMDYsIDB4YTgwMiwgMHhhODZhLCAweGFjOGEsIDB4MmMwMCwgMHhhODhlLCAweDYwMDgsIDB4YThlMiwKKwkweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDcxMzAsIDB4YTk3YSwgMHgwMDE2LCAweGE4NzYsIDB4YTg3ZiwKKwkweDAwMDAsIDB4YTg4MywgMHgwMDAwLCAweGE4ODcsIDB4MDAzNiwgMHgwODBjLCAweDZlOWYsIDB4MDAxZSwKKwkweDA4MGMsIDB4ZWZlOCwgMHgxOTA0LCAweGUyNzEsIDB4OTQ4NiwgMHgyMDAwLCAweDExMzAsIDB4MjAxOSwKKwkweDAwMTcsIDB4MDgwYywgMHhlYmExLCAweDA4MDQsIDB4ZTI3MSwgMHg5NDg2LCAweDAyMDAsIDB4MTEyMCwKKwkweDA4MGMsIDB4ZWIzOCwgMHgwODA0LCAweGUyNzEsIDB4OTQ4NiwgMHgwNDAwLCAweDAxMjAsIDB4OTQ4NiwKKwkweDEwMDAsIDB4MTkwNCwgMHhlMjcxLCAweDIwMTksIDB4MDAwMiwgMHgwODBjLCAweGViNTMsIDB4MDgwNCwKKwkweGUyNzEsIDB4MjA2OSwgMHgxYTc0LCAweDZhMDAsIDB4ZDI4NCwgMHgwOTA0LCAweGUyZGIsIDB4OTI4NCwKKwkweDAzMDAsIDB4MTkwNCwgMHhlMmQ0LCAweDY4MDQsIDB4OTAwNSwgMHgwOTA0LCAweGUyYmMsIDB4MmQ3OCwKKwkweDYwMDMsIDB4MDAwNywgMHgwODBjLCAweDEwMjcsIDB4MDkwNCwgMHhlMjdkLCAweDc4MDAsIDB4ZDA4YywKKwkweDExMTgsIDB4NzgwNCwgMHg4MDAxLCAweDc4MDYsIDB4NjAxNywgMHgwMDAwLCAweDIwMDEsIDB4MTgwZiwKKwkweDIwMDQsIDB4ZDA4NCwgMHgxOTA0LCAweGUyZGYsIDB4OTAwNiwgMHhhODAyLCAweGE4NjcsIDB4MDExNiwKKwkweGE4NmEsIDB4NjAwOCwgMHhhOGUyLCAweDJjMDAsIDB4YTg3YSwgMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwKKwkweDcxMzAsIDB4YTliNiwgMHhhODc2LCAweGI5MjgsIDB4YTliYSwgMHhiOTJjLCAweGE5YmUsIDB4YjkzMCwKKwkweGE5YzIsIDB4YjkzNCwgMHhhOWM2LCAweGE4ODMsIDB4MDAzZCwgMHg3MDQ0LCAweDkwODQsIDB4MDAwMywKKwkweDkwODAsIDB4ZTI3OSwgMHgyMDA1LCAweGE4N2UsIDB4MjBhOSwgMHgwMDBhLCAweDIwMDEsIDB4MDI3MCwKKwkweGFhNWMsIDB4OTI5MCwgMHgwMDIxLCAweDIwMDksIDB4MDIwNSwgMHgyMDBiLCAweDAwODAsIDB4MjBlMSwKKwkweDAwMDAsIDB4YWI2MCwgMHgyM2U4LCAweDIwOTgsIDB4MjJhMCwgMHg0MDAzLCAweDIwMGIsIDB4MDAwMCwKKwkweDIwMDEsIDB4MDI3YSwgMHgyMDBjLCAweGE5YjIsIDB4ODAwMCwgMHgyMDBjLCAweGE5YWUsIDB4MDgwYywKKwkweDZlOWYsIDB4MDAyZSwgMHgwMDRlLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwYmUsIDB4MDA5ZSwKKwkweDAwMDUsIDB4MDAwMCwgMHgwMDgwLCAweDAwNDAsIDB4MDAwMCwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwKKwkweGQwODQsIDB4MDEyMCwgMHgwODBjLCAweDEwMGUsIDB4MTkwNCwgMHhlMjI2LCAweDYwMTcsIDB4ZjEwMCwKKwkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwNDEsIDB4MDgwYywgMHg5NGZmLCAweDA4MGMsIDB4OWFiMSwKKwkweDBjMDAsIDB4MjA2OSwgMHgwMjYwLCAweDY4NDgsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsIDB4MTIwMCwKKwkweDExOTgsIDB4Njg2YywgMHg5MDg0LCAweDAwZmYsIDB4MDAxNiwgMHg2MTE0LCAweDkxOGMsIDB4ZjcwMCwKKwkweDkxMGQsIDB4NjExNiwgMHgwMDFlLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwNDMsIDB4MDgwYywKKwkweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDA4MjgsIDB4Njg2OCwgMHg2MDJlLCAweDY4NmMsIDB4NjAzMiwKKwkweDYwMTcsIDB4ZjIwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDA4MGMsIDB4OTRmZiwKKwkweDA4MGMsIDB4OWFiMSwgMHgwODA0LCAweGUyNzEsIDB4MjAwMSwgMHgxODBlLCAweDIwMDQsIDB4ZDBlYywKKwkweDAxMjAsIDB4MjAxMSwgMHg4MDQ5LCAweDA4MGMsIDB4NGM0NCwgMHg2MDE3LCAweGYzMDAsIDB4MDAxMCwKKwkweDYwMTcsIDB4ZjEwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDA4MGMsIDB4OTRmZiwKKwkweDA4MGMsIDB4OWFiMSwgMHgwODA0LCAweGUyNzEsIDB4NjAxNywgMHhmNTAwLCAweDBjOTgsIDB4NjAxNywKKwkweGY2MDAsIDB4MDgwNCwgMHhlMjkxLCAweDYwMTcsIDB4ZjIwMCwgMHgwODA0LCAweGUyOTEsIDB4YTg2NywKKwkweDAxNDYsIDB4YTg2YiwgMHgwMDAwLCAweDYwMDgsIDB4YTg4NiwgMHgyYzAwLCAweGE4N2EsIDB4NzA0NCwKKwkweDkwODQsIDB4MDAwMywgMHg5MDgwLCAweGUyNzksIDB4MjAwNSwgMHhhODdlLCAweDI5MjgsIDB4NjAxMCwKKwkweDIwNTgsIDB4YjhhMCwgMHhhODc2LCAweGI4MjgsIDB4YTg4YSwgMHhiODJjLCAweGE4OGUsIDB4YjgzMCwKKwkweGE4OTIsIDB4YjgzNCwgMHhhODk2LCAweGE4ODMsIDB4MDAzZCwgMHgyMDA5LCAweDAyMDUsIDB4MjEwNCwKKwkweDkwODUsIDB4MDA4MCwgMHgyMDBhLCAweDIwZTEsIDB4MDAwMCwgMHgyMDExLCAweDAyMTAsIDB4MjIxNCwKKwkweDkyOTQsIDB4MGZmZiwgMHhhYWEyLCAweDkyODIsIDB4MDExMSwgMHgxYTBjLCAweDBkYzUsIDB4ODIxMCwKKwkweDgyMWMsIDB4MjAwMSwgMHgwMjZjLCAweDIwOTgsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwKKwkweDAwMjksIDB4MjBhMCwgMHgyMDExLCAweGUzNWIsIDB4MjA0MSwgMHgwMDAxLCAweDIyM2QsIDB4OTc4NCwKKwkweDAwZmYsIDB4OTMyMiwgMHgxMjA4LCAweDIzMDAsIDB4MjBhOCwgMHg0MDAzLCAweDkzMWEsIDB4MDUzMCwKKwkweDgyMTAsIDB4ZDdmYywgMHgxMTMwLCAweDhkNjgsIDB4MmQwYSwgMHgyMDAxLCAweDAyNjAsIDB4MjA5OCwKKwkweDBjNjgsIDB4Mjk1MCwgMHgwODBjLCAweDEwMjcsIDB4MDE3MCwgMHgyOTAwLCAweGIwMDIsIDB4YTg2NywKKwkweDAxNDcsIDB4YTg2YiwgMHgwMDAwLCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAxYiwKKwkweDIwYTAsIDB4ODg0MCwgMHgwOGQ4LCAweDI1NDgsIDB4YTgwMCwgMHg5MDJkLCAweDAxMTgsIDB4MDgwYywKKwkweDEwNDAsIDB4MGNjOCwgMHgwODBjLCAweDEwNDAsIDB4MDgwNCwgMHhlMjdkLCAweDI1NDgsIDB4ODg0NywKKwkweDk4ODUsIDB4MDA0NiwgMHhhODY2LCAweDIwMDksIDB4MDIwNSwgMHgyMDBiLCAweDAwMDAsIDB4MDgwYywKKwkweGViZDQsIDB4MDgwNCwgMHhlMjcxLCAweDgwMTAsIDB4MDAwNCwgMHg4MDFhLCAweDAwMDYsIDB4ODAxOCwKKwkweDAwMDgsIDB4ODAxNiwgMHgwMDBhLCAweDgwMTQsIDB4OTE4NiwgMHgwMDEzLCAweDExNjAsIDB4NjAwNCwKKwkweDkwOGEsIDB4MDA1NCwgMHgxYTBjLCAweDBkYzUsIDB4OTA4MiwgMHgwMDQwLCAweDBhMGMsIDB4MGRjNSwKKwkweDIwMDgsIDB4MDgwNCwgMHhlM2VhLCAweDkxODYsIDB4MDA1MSwgMHgwMTA4LCAweDAwNDgsIDB4MDgwYywKKwkweGQ4MDksIDB4MDUwMCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMiwgMHgxMWUwLCAweDA4MDQsIDB4ZTQzMywKKwkweDkxODYsIDB4MDAyNywgMHgwMTkwLCAweDkxODYsIDB4MDA0OCwgMHgwMTI4LCAweDkxODYsIDB4MDAxNCwKKwkweDAxNjAsIDB4MTkwYywgMHgwZGM1LCAweDA4MGMsIDB4ZDgwOSwgMHgwMTYwLCAweDYwMDAsIDB4OTA4NiwKKwkweDAwMDQsIDB4MTkwYywgMHgwZGM1LCAweDA4MDQsIDB4ZTUxNiwgMHg2MDA0LCAweDkwODIsIDB4MDA0MCwKKwkweDIwMDgsIDB4MDAxYSwgMHgwODBjLCAweGIzNmQsIDB4MDAwNSwgMHhlM2IxLCAweGUzYjMsIDB4ZTNiMywKKwkweGUzZGEsIDB4ZTNiMSwgMHhlM2IxLCAweGUzYjEsIDB4ZTNiMSwgMHhlM2IxLCAweGUzYjEsIDB4ZTNiMSwKKwkweGUzYjEsIDB4ZTNiMSwgMHhlM2IxLCAweGUzYjEsIDB4ZTNiMSwgMHhlM2IxLCAweGUzYjEsIDB4ZTNiMSwKKwkweGUzYjEsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4OTlhNSwgMHgwODBjLCAweDlhYjEsIDB4MDAzNiwKKwkweDAwOTYsIDB4NjAxNCwgMHg5MDRkLCAweDAxZDgsIDB4MDgwYywgMHhkMGQ4LCAweDAxYzAsIDB4NjAwMywKKwkweDAwMDIsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MTE3OCwKKwkweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGViZDQsIDB4NjAxNywgMHgwMDAwLCAweDYwMTgsIDB4OTAwNSwKKwkweDExMjAsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsIDB4NjAxYSwgMHg2MDAzLCAweDAwMDcsIDB4MDA5ZSwKKwkweDAwM2UsIDB4MDAwNSwgMHgwMDk2LCAweDA4MGMsIDB4OTlhNSwgMHgwODBjLCAweDlhYjEsIDB4MDgwYywKKwkweGQwZDgsIDB4MDEyMCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHgxMDQwLCAweDA4MGMsIDB4YjMwNiwKKwkweDAwOWUsIDB4MDAwNSwgMHgwMDAyLCAweGUzZmYsIDB4ZTQxNiwgMHhlNDAxLCAweGU0MmQsIDB4ZTNmZiwKKwkweGUzZmYsIDB4ZTNmZiwgMHhlM2ZmLCAweGUzZmYsIDB4ZTNmZiwgMHhlM2ZmLCAweGUzZmYsIDB4ZTNmZiwKKwkweGUzZmYsIDB4ZTNmZiwgMHhlM2ZmLCAweGUzZmYsIDB4ZTNmZiwgMHhlM2ZmLCAweGUzZmYsIDB4MDgwYywKKwkweDBkYzUsIDB4MDA5NiwgMHgwODBjLCAweDk5YTUsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBiNCwKKwkweDAxMzgsIDB4NjAwMywgMHgwMDA3LCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGIzNTIsIDB4MDAxMCwKKwkweDYwMDMsIDB4MDAwNCwgMHgwODBjLCAweDlhYjEsIDB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsIDB4OTlhNSwKKwkweDA4MGMsIDB4ZDBkOCwgMHgwMTM4LCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweGE5N2MsIDB4MDA5ZSwKKwkweGQxZWMsIDB4MTEzOCwgMHgwODBjLCAweDhhMjUsIDB4MDgwYywgMHhiMmQzLCAweDA4MGMsIDB4OWFiMSwKKwkweDAwMDUsIDB4MDgwYywgMHhlZTJmLCAweDBkYjAsIDB4MGNjOCwgMHgwODBjLCAweDk5YTUsIDB4MjAwOSwKKwkweDAwNDEsIDB4MDgwNCwgMHhlNTllLCAweDkxODIsIDB4MDA0MCwgMHgwMDAyLCAweGU0NGEsIDB4ZTQ0YywKKwkweGU0NGEsIDB4ZTQ0YSwgMHhlNDRhLCAweGU0NGEsIDB4ZTQ0YSwgMHhlNDRhLCAweGU0NGEsIDB4ZTQ0YSwKKwkweGU0NGEsIDB4ZTQ0YSwgMHhlNDRhLCAweGU0NGEsIDB4ZTQ0YSwgMHhlNDRhLCAweGU0NGEsIDB4ZTQ0ZCwKKwkweGU0NGEsIDB4ZTQ0YSwgMHgwODBjLCAweDBkYzUsIDB4MDAwNSwgMHgwMGQ2LCAweDA4MGMsIDB4OGEyNSwKKwkweDAwZGUsIDB4MDgwYywgMHhlZTg3LCAweDA4MGMsIDB4YjJkMywgMHgwMDA1LCAweDkxODIsIDB4MDA0MCwKKwkweDAwMDIsIDB4ZTQ2ZCwgMHhlNDZkLCAweGU0NmQsIDB4ZTQ2ZCwgMHhlNDZkLCAweGU0NmQsIDB4ZTQ2ZCwKKwkweGU0NmQsIDB4ZTQ2ZCwgMHhlNDZmLCAweGU0ZGUsIDB4ZTQ2ZCwgMHhlNDZkLCAweGU0NmQsIDB4ZTQ2ZCwKKwkweGU0ZGUsIDB4ZTQ2ZCwgMHhlNDZkLCAweGU0NmQsIDB4ZTQ2ZCwgMHgwODBjLCAweDBkYzUsIDB4MjAwMSwKKwkweDAxMDUsIDB4MjAwNCwgMHg5MDg0LCAweDE4MDAsIDB4MDFjOCwgMHgyMDAxLCAweDAxMzIsIDB4MjAwYywKKwkweDIwMDEsIDB4MDEzMSwgMHgyMDA0LCAweDkxMDUsIDB4MTkwNCwgMHhlNGRlLCAweDIwMDksIDB4MTgwYywKKwkweDIxMDQsIDB4ZDBkNCwgMHgwOTA0LCAweGU0ZGUsIDB4YzBkNCwgMHgyMDBhLCAweDIwMDksIDB4MDEwNSwKKwkweDIxMDQsIDB4OTA4NCwgMHhlN2ZkLCAweDkwODUsIDB4MDAxMCwgMHgyMDBhLCAweDIwMDEsIDB4MTg2NywKKwkweDIwMDQsIDB4ZDBlNCwgMHgxNTI4LCAweDYwM2IsIDB4MDAwMCwgMHgwODBjLCAweDlhNjEsIDB4NjAxNCwKKwkweDAwOTYsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsIDB4MDE4OCwgMHg5MDhjLCAweDAwMDMsIDB4OTE4ZSwKKwkweDAwMDIsIDB4MDUwOCwgMHgyMDAxLCAweDE4MGMsIDB4MjAwNCwgMHhkMGQ0LCAweDExZTAsIDB4MDgwYywKKwkweDliZDMsIDB4MjAwOSwgMHgwMDQxLCAweDAwOWUsIDB4MDgwNCwgMHhlNTllLCAweDA4MGMsIDB4OWJkMywKKwkweDYwMDMsIDB4MDAwNywgMHg2MDFiLCAweDAwMDAsIDB4MDgwYywgMHg4YTI1LCAweDAwOWUsIDB4MDAwNSwKKwkweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODIsIDB4MDAwNSwgMHgwYWE4LCAweDIwMDEsIDB4MDExZiwKKwkweDIwMDQsIDB4NjAzYSwgMHgwODkwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxZDQsIDB4MjEwMiwKKwkweGQxY2MsIDB4MDExMCwgMHgwODBjLCAweDJjN2IsIDB4MDgwYywgMHg5YmQzLCAweDYwMTQsIDB4MjA0OCwKKwkweGE5N2MsIDB4ZDFlYywgMHgxMTMwLCAweDA4MGMsIDB4OGEyNSwgMHgwODBjLCAweGIyZDMsIDB4MDA5ZSwKKwkweDAwMDUsIDB4MDgwYywgMHhlZTJmLCAweDBkYjgsIDB4MDA5ZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwYywKKwkweDIwMGMsIDB4YzFkNCwgMHgyMTAyLCAweDAwMzYsIDB4MDgwYywgMHg5YTYxLCAweDA4MGMsIDB4OWJkMywKKwkweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwKKwkweGQwYmMsIDB4MDE4OCwgMHhhODdjLCAweDkwODQsIDB4MDAwMywgMHg5MDg2LCAweDAwMDIsIDB4MDE0MCwKKwkweGE4YWMsIDB4NjMzMCwgMHg5MzFhLCAweDYzMzIsIDB4YThiMCwgMHg2MzJjLCAweDkzMWIsIDB4NjMyZSwKKwkweDYwMDMsIDB4MDAwMiwgMHgwMDgwLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGViZDQsIDB4NjAxOCwKKwkweDkwMDUsIDB4MTEyOCwgMHgyMDAxLCAweDE5ODcsIDB4MjAwNCwgMHg4MDAzLCAweDYwMWEsIDB4NjAxNywKKwkweDAwMDAsIDB4NjAwMywgMHgwMDA3LCAweDAwOWUsIDB4MDAzZSwgMHgwMDA1LCAweDkxODIsIDB4MDA0MCwKKwkweDAwMDIsIDB4ZTUyZCwgMHhlNTJkLCAweGU1MmQsIDB4ZTUyZCwgMHhlNTJkLCAweGU1MmQsIDB4ZTUyZCwKKwkweGU1MmQsIDB4ZTUyZiwgMHhlNTJkLCAweGU1MmQsIDB4ZTUyZCwgMHhlNTJkLCAweGU1MmQsIDB4ZTUyZCwKKwkweGU1MmQsIDB4ZTUyZCwgMHhlNTJkLCAweGU1MmQsIDB4ZTU3YSwgMHgwODBjLCAweDBkYzUsIDB4NjAxNCwKKwkweDAwOTYsIDB4MjA0OCwgMHhhODM0LCAweGFhMzgsIDB4NjExMCwgMHgwMGI2LCAweDIxNTgsIDB4YjkwMCwKKwkweDAwYmUsIDB4ZDFiYywgMHgxMTkwLCAweDkyMGQsIDB4MTUxOCwgMHhhODdjLCAweGQwZmMsIDB4MDEyOCwKKwkweDIwMDksIDB4MDA0MSwgMHgwMDllLCAweDA4MDQsIDB4ZTU5ZSwgMHg2MDAzLCAweDAwMDcsIDB4NjAxYiwKKwkweDAwMDAsIDB4MDgwYywgMHg4YTI1LCAweDAwOWUsIDB4MDAwNSwgMHg2MTI0LCAweGQxZjQsIDB4MWQ1OCwKKwkweDAwMDYsIDB4MDA0NiwgMHhhY2FjLCAweDk0MjIsIDB4YTliMCwgMHgyMjAwLCAweDkxMGIsIDB4NjAzMCwKKwkweDk0MjAsIDB4NjQzMiwgMHg2MDJjLCAweDkxMDksIDB4NjEyZSwgMHgwMDRlLCAweDAwMGUsIDB4MDhkOCwKKwkweDYxMTAsIDB4MDBiNiwgMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWJjLCAweDExNzgsIDB4MjAwOSwKKwkweDE4MGUsIDB4MjEwYywgMHhkMTljLCAweDAxMTgsIDB4NjAwMywgMHgwMDA3LCAweDAwMTAsIDB4NjAwMywKKwkweDAwMDYsIDB4MDBlOSwgMHgwODBjLCAweDhhMjcsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMDMsIDB4MDAwMiwKKwkweDAwOWUsIDB4MDAwNSwgMHg2MDI0LCAweGQwZjQsIDB4MDEyOCwgMHgwODBjLCAweDE2MDgsIDB4MTkwNCwKKwkweGU1MmYsIDB4MDAwNSwgMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODM0LCAweGE5MzgsIDB4MDA5ZSwKKwkweDkxMDUsIDB4MTEyMCwgMHgwODBjLCAweDE2MDgsIDB4MTkwNCwgMHhlNTJmLCAweDAwMDUsIDB4ZDJmYywKKwkweDAxNDAsIDB4ODAwMiwgMHg4MDAwLCAweDgyMTIsIDB4OTI5MSwgMHgwMDAwLCAweDIwMDksIDB4MDAwOSwKKwkweDAwMTAsIDB4MjAwOSwgMHgwMDE1LCAweGFhOWEsIDB4YTg5NiwgMHgwMDA1LCAweDkxODIsIDB4MDA0MCwKKwkweDAyMDgsIDB4MDA2MiwgMHg5MTg2LCAweDAwMTMsIDB4MDEyMCwgMHg5MTg2LCAweDAwMTQsIDB4MTkwYywKKwkweDBkYzUsIDB4NjAyNCwgMHhkMGRjLCAweDA5MGMsIDB4MGRjNSwgMHgwMDA1LCAweGU1YzIsIDB4ZTVjZSwKKwkweGU1ZGEsIDB4ZTVlNiwgMHhlNWMyLCAweGU1YzIsIDB4ZTVjMiwgMHhlNWMyLCAweGU1YzksIDB4ZTVjNCwKKwkweGU1YzQsIDB4ZTVjMiwgMHhlNWMyLCAweGU1YzIsIDB4ZTVjMiwgMHhlNWM0LCAweGU1YzIsIDB4ZTVjNCwKKwkweGU1YzIsIDB4ZTVjOSwgMHgwODBjLCAweDBkYzUsIDB4NjAyNCwgMHhkMGRjLCAweDA5MGMsIDB4MGRjNSwKKwkweDAwMDUsIDB4NjAxNCwgMHg5MDA1LCAweDE5MGMsIDB4MGRjNSwgMHgwMDA1LCAweDYwMDMsIDB4MDAwMSwKKwkweDYxMDYsIDB4MDgwYywgMHg5NGZmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OWFiMSwKKwkweDAxMmUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwODBjLCAweDk0ZmYsIDB4MDEyNiwKKwkweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDlhYjEsIDB4MDEyZSwgMHgwMDA1LCAweDYwMDMsIDB4MDAwMywKKwkweDYxMDYsIDB4MmMxMCwgMHgwODBjLCAweDFiZTAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywKKwkweDk1NjQsIDB4MDgwYywgMHg5YmQzLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKKwkweDAwMzYsIDB4MDA5NiwgMHg5MTgyLCAweDAwNDAsIDB4MDAyMywgMHgwMDllLCAweDAwM2UsIDB4MDEyZSwKKwkweDAwMDUsIDB4ZTYxNSwgMHhlNjE3LCAweGU2MjksIDB4ZTY0MywgMHhlNjE1LCAweGU2MTUsIDB4ZTYxNSwKKwkweGU2MTUsIDB4ZTYxNSwgMHhlNjE1LCAweGU2MTUsIDB4ZTYxNSwgMHhlNjE1LCAweGU2MTUsIDB4ZTYxNSwKKwkweGU2MTUsIDB4ZTYxNSwgMHhlNjE1LCAweGU2MTUsIDB4ZTYxNSwgMHgwODBjLCAweDBkYzUsIDB4NjAxNCwKKwkweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDAxZjgsIDB4OTA5YywgMHgwMDAzLCAweDkzOWUsIDB4MDAwMywKKwkweDAxZDAsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg5NGZmLCAweDA4MGMsIDB4OWFiMSwKKwkweDA0NzAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBmYywgMHgwMTY4LCAweDkwOWMsIDB4MDAwMywKKwkweDkzOWUsIDB4MDAwMywgMHgwMTQwLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsIDB4OTRmZiwKKwkweDA4MGMsIDB4OWFiMSwgMHgwMGUwLCAweDkwMWUsIDB4NjMxNiwgMHg2MzFhLCAweDIwMTksIDB4MDAwNCwKKwkweDA4MGMsIDB4ZWJkNCwgMHgwMGEwLCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsIDB4MGQ5OCwKKwkweDkwOWMsIDB4MDAwMywgMHg5MzllLCAweDAwMDMsIDB4MGQ3MCwgMHg2MDAzLCAweDAwMDMsIDB4NjEwNiwKKwkweDJjMTAsIDB4MDgwYywgMHgxYmUwLCAweDA4MGMsIDB4OTU2NCwgMHgwODBjLCAweDliZDMsIDB4MDAwNSwKKwkweDA4MGMsIDB4OTlhNSwgMHg2MTE0LCAweDgxZmYsIDB4MDE1OCwgMHgwMDk2LCAweDIxNDgsIDB4MDgwYywKKwkweGVmODUsIDB4MDAzNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHhlYmQ0LCAweDAwM2UsIDB4MDA5ZSwKKwkweDA4MGMsIDB4YjMwNiwgMHgwODBjLCAweDlhYjEsIDB4MDAwNSwgMHgwODBjLCAweDlhNjEsIDB4NjExNCwKKwkweDgxZmYsIDB4MDE1OCwgMHgwMDk2LCAweDIxNDgsIDB4MDgwYywgMHhlZjg1LCAweDAwMzYsIDB4MjAxOSwKKwkweDAwMjksIDB4MDgwYywgMHhlYmQ0LCAweDAwM2UsIDB4MDA5ZSwgMHgwODBjLCAweGIzMDYsIDB4MDgwYywKKwkweDliZDMsIDB4MDAwNSwgMHg5MTgyLCAweDAwODUsIDB4MDAwMiwgMHhlNjk0LCAweGU2OTIsIDB4ZTY5MiwKKwkweGU2YTAsIDB4ZTY5MiwgMHhlNjkyLCAweGU2OTIsIDB4ZTY5MiwgMHhlNjkyLCAweGU2OTIsIDB4ZTY5MiwKKwkweGU2OTIsIDB4ZTY5MiwgMHgwODBjLCAweDBkYzUsIDB4NjAwMywgMHgwMDBiLCAweDYxMDYsIDB4MDgwYywKKwkweDk0ZmYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg5YWIxLCAweDAxMmUsIDB4MDAwNSwKKwkweDAwMjYsIDB4MDBlNiwgMHgwODBjLCAweGVlMjYsIDB4MDExOCwgMHgwODBjLCAweGIyZDMsIDB4MDQ1MCwKKwkweDIwNzEsIDB4MDI2MCwgMHg3MjI0LCAweDYyMTYsIDB4MjAwMSwgMHgxODBlLCAweDIwMDQsIDB4ZDBlNCwKKwkweDAxNTAsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmNhMCwgMHgwMGJlLCAweDJjMDAsIDB4MjAxMSwKKwkweDAxNGUsIDB4MDgwYywgMHhiNWY1LCAweDcyMjAsIDB4MDgwYywgMHhlYTI5LCAweDAxMTgsIDB4NjAwNywKKwkweDAwODYsIDB4MDA0MCwgMHg2MDA3LCAweDAwODcsIDB4NzIyNCwgMHg5Mjk2LCAweGZmZmYsIDB4MTExMCwKKwkweDYwMDcsIDB4MDA4NiwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NGZmLCAweDA4MGMsIDB4OWFiMSwKKwkweDA4MGMsIDB4OWJkMywgMHgwMGVlLCAweDAwMmUsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsIDB4MTE2MCwKKwkweDYwMDQsIDB4OTA4YSwgMHgwMDg1LCAweDBhMGMsIDB4MGRjNSwgMHg5MDhhLCAweDAwOTIsIDB4MWEwYywKKwkweDBkYzUsIDB4OTA4MiwgMHgwMDg1LCAweDAwYTIsIDB4OTE4NiwgMHgwMDI3LCAweDAxMzAsIDB4OTE4NiwKKwkweDAwMTQsIDB4MDExOCwgMHgwODBjLCAweGIzNmQsIDB4MDA1MCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywKKwkweDY2OTYsIDB4MDgwYywgMHg5OWE1LCAweDA4MGMsIDB4YjMwNiwgMHgwODBjLCAweDlhYjEsIDB4MDAwNSwKKwkweGU3MDUsIDB4ZTcwNywgMHhlNzA3LCAweGU3MDUsIDB4ZTcwNSwgMHhlNzA1LCAweGU3MDUsIDB4ZTcwNSwKKwkweGU3MDUsIDB4ZTcwNSwgMHhlNzA1LCAweGU3MDUsIDB4ZTcwNSwgMHgwODBjLCAweDBkYzUsIDB4MDgwYywKKwkweDk5YTUsIDB4MDgwYywgMHhiMzA2LCAweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDkxODIsIDB4MDA4NSwKKwkweDBhMGMsIDB4MGRjNSwgMHg5MTgyLCAweDAwOTIsIDB4MWEwYywgMHgwZGM1LCAweDkxODIsIDB4MDA4NSwKKwkweDAwMDIsIDB4ZTcyNiwgMHhlNzI2LCAweGU3MjYsIDB4ZTcyOCwgMHhlNzI2LCAweGU3MjYsIDB4ZTcyNiwKKwkweGU3MjYsIDB4ZTcyNiwgMHhlNzI2LCAweGU3MjYsIDB4ZTcyNiwgMHhlNzI2LCAweDA4MGMsIDB4MGRjNSwKKwkweDAwMDUsIDB4OTE4NiwgMHgwMDEzLCAweDAxNDgsIDB4OTE4NiwgMHgwMDE0LCAweDAxMzAsIDB4OTE4NiwKKwkweDAwMjcsIDB4MDExOCwgMHgwODBjLCAweGIzNmQsIDB4MDAzMCwgMHgwODBjLCAweDk5YTUsIDB4MDgwYywKKwkweGIzMDYsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4MDAzNiwgMHgwODBjLCAweGVlODcsIDB4NjA0MywKKwkweDAwMDAsIDB4MjAxOSwgMHgwMDBiLCAweDAwMTEsIDB4MDAzZSwgMHgwMDA1LCAweDYwMTAsIDB4MDAwNiwKKwkweDAwNTksIDB4MDAwZSwgMHg2MDEyLCAweDYwMjMsIDB4MDAwNiwgMHg2MDAzLCAweDAwMDcsIDB4NjAxYiwKKwkweDAwMDAsIDB4NjA0MywgMHgwMDAwLCAweDAwMDUsIDB4MDEyNiwgMHgwMDM2LCAweDIwOTEsIDB4ODAwMCwKKwkweDAwODYsIDB4MmM0MCwgMHgwMDk2LCAweDkwNGUsIDB4MDgwYywgMHhhYWZiLCAweDAwOWUsIDB4MDA4ZSwKKwkweDE1NTAsIDB4MDA3NiwgMHgyYzM4LCAweDA4MGMsIDB4YWJhNiwgMHgwMDdlLCAweDE1MjAsIDB4NjAwMCwKKwkweDkwODYsIDB4MDAwMCwgMHgwNTAwLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA3LCAweDAxZTAsIDB4MDA5NiwKKwkweDYwMWMsIDB4ZDA4NCwgMHgwMTQwLCAweDA4MGMsIDB4ZWU4NywgMHgwODBjLCAweGQ3ZmIsIDB4MDgwYywKKwkweDFhOGUsIDB4NjAyMywgMHgwMDA3LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGQwZDgsIDB4MDExMCwKKwkweDA4MGMsIDB4ZWJkNCwgMHgwMDllLCAweDYwMTcsIDB4MDAwMCwgMHgwODBjLCAweGVlODcsIDB4NjAyMywKKwkweDAwMDcsIDB4MDgwYywgMHhkN2ZiLCAweDAwM2UsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBjNiwKKwkweDAwYjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwNzksIDB4MDI2MCwgMHg3OTM4LCAweDc4M2MsIDB4MDgwYywKKwkweDI4NzMsIDB4MTkwNCwgMHhlN2U0LCAweDAwMTYsIDB4MDBjNiwgMHgwODBjLCAweDY3MjQsIDB4MTkwNCwKKwkweGU3ZTIsIDB4MDAxZSwgMHgwMGM2LCAweDA4MGMsIDB4ZDdlMywgMHgxMTMwLCAweGI4YzAsIDB4OTAwNSwKKwkweDAxMTgsIDB4MDgwYywgMHgzM2E1LCAweDAxNDgsIDB4MmIxMCwgMHgyMTYwLCAweDYwMTAsIDB4MDAwNiwKKwkweDYyMTIsIDB4MDgwYywgMHhkN2VhLCAweDAwMGUsIDB4NjAxMiwgMHgwMGNlLCAweDAwMmUsIDB4MDAyNiwKKwkweDAwMTYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4YWM2YywgMHgwODBjLCAweDk2YTQsIDB4MDA3NiwKKwkweDkwM2UsIDB4MDgwYywgMHg5NTc3LCAweDAwN2UsIDB4MDAxZSwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywKKwkweGU5MWMsIDB4MDA3ZSwgMHgwMDI2LCAweGJhMDQsIDB4OTI5NCwgMHhmZjAwLCAweDgyMTcsIDB4OTI4NiwKKwkweDAwMDYsIDB4MDExOCwgMHg5Mjg2LCAweDAwMDQsIDB4MTExOCwgMHhiYWEwLCAweDA4MGMsIDB4MzMwZSwKKwkweDAwMmUsIDB4YmNjMCwgMHgwMDFlLCAweDA4MGMsIDB4NjE0OCwgMHhiZTEyLCAweGJkMTYsIDB4YmNjMiwKKwkweDkwMDYsIDB4MDAxMCwgMHgwMGNlLCAweDAwMWUsIDB4MDE1ZSwgMHgwMDNlLCAweDAwYmUsIDB4MDBjZSwKKwkweDAwZmUsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDBiNiwgMHgwMDE2LCAweDIwMDksIDB4MTgyNCwKKwkweDIxMDQsIDB4OTA4NiwgMHgwMDc0LCAweDE5MDQsIDB4ZTg0MywgMHgyMDY5LCAweDAyNjAsIDB4Njk0NCwKKwkweDkxODIsIDB4MDEwMCwgMHgwNmUwLCAweDY5NDAsIDB4OTE4NCwgMHg4MDAwLCAweDA5MDQsIDB4ZTg0MCwKKwkweDIwMDEsIDB4MTk3YywgMHgyMDA0LCAweDkwMDUsIDB4MTE0MCwgMHg2MDEwLCAweDIwNTgsIDB4YjhjMCwKKwkweDkwMDUsIDB4MDExOCwgMHg5MTg0LCAweDA4MDAsIDB4MDU5OCwgMHg2OTQ4LCAweDkxOGEsIDB4MDAwMSwKKwkweDA2NDgsIDB4MDgwYywgMHhlZmVkLCAweDAxMTgsIDB4Njk3OCwgMHhkMWZjLCAweDExYjgsIDB4MjAwOSwKKwkweDAyMDUsIDB4MjAwYiwgMHgwMDAxLCAweDY5M2MsIDB4ODFmZiwgMHgxMTk4LCAweDY5NDQsIDB4OTE4MiwKKwkweDAxMDAsIDB4MDJhOCwgMHg2OTQwLCAweDgxZmYsIDB4MTE3OCwgMHg2OTQ4LCAweDkxOGEsIDB4MDAwMSwKKwkweDAyODgsIDB4Njk1MCwgMHg5MThhLCAweDAwMDEsIDB4MDI5OCwgMHgwMGQwLCAweDYwMTcsIDB4MDEwMCwKKwkweDAwYTAsIDB4NjAxNywgMHgwMzAwLCAweDAwODgsIDB4NjAxNywgMHgwNTAwLCAweDAwNzAsIDB4NjAxNywKKwkweDA3MDAsIDB4MDA1OCwgMHg2MDE3LCAweDA5MDAsIDB4MDA0MCwgMHg2MDE3LCAweDBiMDAsIDB4MDAyOCwKKwkweDYwMTcsIDB4MGYwMCwgMHgwMDEwLCAweDYwMTcsIDB4MmQwMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwOCwKKwkweDkwMDYsIDB4MDAxZSwgMHgwMGJlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBiNiwKKwkweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDYyMTAsIDB4MjI1OCwgMHhiYjA0LCAweDkzOTQsIDB4MDBmZiwKKwkweDkyODYsIDB4MDAwNiwgMHgwMTgwLCAweDkyODYsIDB4MDAwNCwgMHgwMTY4LCAweDkzOTQsIDB4ZmYwMCwKKwkweDgyMTcsIDB4OTI4NiwgMHgwMDA2LCAweDAxMzgsIDB4OTI4NiwgMHgwMDA0LCAweDAxMjAsIDB4MDgwYywKKwkweDY3MzMsIDB4MDgwNCwgMHhlOGFiLCAweDIwMTEsIDB4MDI3NiwgMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwKKwkweDJiNDgsIDB4MjAxOSwgMHgwMDBhLCAweDA4MGMsIDB4YzM3OSwgMHgwMDllLCAweDE1YTgsIDB4MjAxMSwKKwkweDAyN2EsIDB4MjBhOSwgMHgwMDA0LCAweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMDYsIDB4MDgwYywKKwkweGMzNzksIDB4MDA5ZSwgMHgxNTQ4LCAweDAwNDYsIDB4MDAxNiwgMHhiYWEwLCAweDIyMjAsIDB4OTAwNiwKKwkweDIwMDksIDB4MTg0OCwgMHgyMTBjLCAweGQxYTQsIDB4MDEzOCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywKKwkweGVjMzEsIDB4YjgwMCwgMHhjMGU1LCAweGI4MDIsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4OTZhNCwKKwkweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4OTU3NywgMHgyYzA4LCAweDA4MGMsIDB4ZTkxYywKKwkweDAwN2UsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjY5NiwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywKKwkweDY2NmEsIDB4MDAxZSwgMHgwMDRlLCAweDkwMDYsIDB4MDE1ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDBiZSwKKwkweDAwY2UsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4MDI2ZSwgMHg2ODAwLCAweDkwODYsIDB4MDgwMCwKKwkweDAxMTgsIDB4NjAxNywgMHgwMDAwLCAweDAwMDgsIDB4OTAwNiwgMHgwMGRlLCAweDAwMDUsIDB4MDBiNiwKKwkweDAwZjYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDE1NiwgMHgyMDc5LCAweDAyNmMsIDB4NzkzMCwKKwkweDc4MzQsIDB4MDgwYywgMHgyODczLCAweDExZDAsIDB4MDgwYywgMHg2NzI0LCAweDExYjgsIDB4MjAxMSwKKwkweDAyNzAsIDB4MjBhOSwgMHgwMDA0LCAweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMGEsIDB4MDgwYywKKwkweGMzNzksIDB4MDA5ZSwgMHgxMTU4LCAweDIwMTEsIDB4MDI3NCwgMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwKKwkweDJiNDgsIDB4MjAxOSwgMHgwMDA2LCAweDA4MGMsIDB4YzM3OSwgMHgwMDllLCAweDAxNWUsIDB4MDAzZSwKKwkweDAwMmUsIDB4MDAxZSwgMHgwMGZlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LCAweDAwMDYsIDB4MDAxNiwKKwkweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwMTEsIDB4MDI2MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywKKwkweDA4MGMsIDB4Mjg3MywgMHgxMWQwLCAweDA4MGMsIDB4NjcyNCwgMHgxMWI4LCAweDIwMTEsIDB4MDI3NiwKKwkweDIwYTksIDB4MDAwNCwgMHgwMDk2LCAweDJiNDgsIDB4MjAxOSwgMHgwMDBhLCAweDA4MGMsIDB4YzM3OSwKKwkweDAwOWUsIDB4MTE1OCwgMHgyMDExLCAweDAyN2EsIDB4MjBhOSwgMHgwMDA0LCAweDAwOTYsIDB4MmI0OCwKKwkweDIwMTksIDB4MDAwNiwgMHgwODBjLCAweGMzNzksIDB4MDA5ZSwgMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwKKwkweDAwMWUsIDB4MDAwZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwODYsIDB4MDA3NiwKKwkweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4Mjc0MCwKKwkweDIwMjksIDB4MTlmMSwgMHgyNTJjLCAweDIwMjEsIDB4MTlmNywgMHgyNDI0LCAweDIwNjEsIDB4MWNkMCwKKwkweDIwNzEsIDB4MTgwMCwgMHg3NjU0LCAweDcwNzQsIDB4ODFmZiwgMHgwMTUwLCAweDAwMDYsIDB4OTE4NiwKKwkweDFhYjcsIDB4MDAwZSwgMHgwMTI4LCAweDgwMDEsIDB4OTYwMiwgMHgxYTA0LCAweGU5YmEsIDB4MDAxOCwKKwkweDk2MDYsIDB4MDkwNCwgMHhlOWJhLCAweDA4MGMsIDB4OGNmNywgMHgwOTA0LCAweGU5YjEsIDB4MjEwMCwKKwkweDljMDYsIDB4MDkwNCwgMHhlOWIxLCAweDY3MjAsIDB4OTc4NiwgMHgwMDA3LCAweDA5MDQsIDB4ZTliMSwKKwkweDA4MGMsIDB4ZWM3MiwgMHgxOTA0LCAweGU5YjEsIDB4MDgwYywgMHhmMDBiLCAweDA5MDQsIDB4ZTliMSwKKwkweDA4MGMsIDB4ZWM2MiwgMHgwOTA0LCAweGU5YjEsIDB4NjcyMCwgMHg5Nzg2LCAweDAwMDEsIDB4MTE0OCwKKwkweDA4MGMsIDB4MzNhNSwgMHgwOTA0LCAweGU5ZjksIDB4NjAwNCwgMHg5MDg2LCAweDAwMDAsIDB4MTkwNCwKKwkweGU5ZjksIDB4OTc4NiwgMHgwMDA0LCAweDA5MDQsIDB4ZTlmOSwgMHgyNTAwLCAweDljMDYsIDB4MDkwNCwKKwkweGU5YjEsIDB4MjQwMCwgMHg5YzA2LCAweDA1ZTgsIDB4ODhmZiwgMHgwMTE4LCAweDYwNTQsIDB4OTkwNiwKKwkweDE1YzAsIDB4MDA5NiwgMHg2MDAwLCAweDkwODYsIDB4MDAwNCwgMHgxMTIwLCAweDAwMTYsIDB4MDgwYywKKwkweDFhOGUsIDB4MDAxZSwgMHg5Nzg2LCAweDAwMGEsIDB4MDE0OCwgMHgwODBjLCAweGQyZTAsIDB4MTEzMCwKKwkweDA4MGMsIDB4YmNiNiwgMHgwMDllLCAweDA4MGMsIDB4YjMwNiwgMHgwNDE4LCAweDYwMTQsIDB4MjA0OCwKKwkweDA4MGMsIDB4ZDBkOCwgMHgwMWQ4LCAweDk3ODYsIDB4MDAwMywgMHgxNTcwLCAweGE4NjcsIDB4MDEwMywKKwkweGE4N2MsIDB4ZDBjYywgMHgwMTMwLCAweDAwOTYsIDB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsIDB4MGZjMCwKKwkweDAwOWUsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHhlZjg1LCAweDAwMTYsIDB4MDgwYywKKwkweGQzY2UsIDB4MDgwYywgMHg2ZTkyLCAweDAwMWUsIDB4MDgwYywgMHhkMmMzLCAweDAwOWUsIDB4MDgwYywKKwkweGIzMDYsIDB4OWNlMCwgMHgwMDE4LCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDljMDIsIDB4MTIxMCwKKwkweDA4MDQsIDB4ZTkzMCwgMHgwMTJlLCAweDAwMmUsIDB4MDA0ZSwgMHgwMDVlLCAweDAwNmUsIDB4MDA3ZSwKKwkweDAwOGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4OTc4NiwgMHgwMDA2LCAweDExNTAsIDB4OTM4NiwKKwkweDAwMDUsIDB4MDEyOCwgMHgwODBjLCAweGVmODUsIDB4MDgwYywgMHhlYmQ0LCAweDA4ZjgsIDB4MDA5ZSwKKwkweDBjMDAsIDB4OTc4NiwgMHgwMDA5LCAweDExZjgsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MDFjMCwKKwkweDYwMDAsIDB4OTA4NiwgMHgwMDAzLCAweDExYTAsIDB4MDgwYywgMHg5YTYxLCAweDAwOTYsIDB4NjExNCwKKwkweDIxNDgsIDB4MDgwYywgMHhkMGQ4LCAweDAxMTgsIDB4NjAxMCwgMHgwODBjLCAweDZlOWYsIDB4MDA5ZSwKKwkweDAwYzYsIDB4MDgwYywgMHhiMmQzLCAweDAwY2UsIDB4MDAzNiwgMHgwODBjLCAweDliZDMsIDB4MDAzZSwKKwkweDAwOWUsIDB4MDgwNCwgMHhlOWIxLCAweDk3ODYsIDB4MDAwYSwgMHgwOTA0LCAweGU5YTEsIDB4MDgwNCwKKwkweGU5OTYsIDB4ODFmZiwgMHgwOTA0LCAweGU5YjEsIDB4OTE4MCwgMHgwMDAxLCAweDIwMDQsIDB4OTA4NiwKKwkweDAwMTgsIDB4MDEzOCwgMHg5MTgwLCAweDAwMDEsIDB4MjAwNCwgMHg5MDg2LCAweDAwMmQsIDB4MTkwNCwKKwkweGU5YjEsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDIsIDB4MTkwNCwgMHhlOWIxLCAweDA4MGMsIDB4ZDJjZiwKKwkweDAxMzgsIDB4MDgwYywgMHhkMmUwLCAweDE5MDQsIDB4ZTliMSwgMHgwODBjLCAweGJjYjYsIDB4MDAzOCwKKwkweDA4MGMsIDB4MzI3OSwgMHgwODBjLCAweGQyZTAsIDB4MTExMCwgMHgwODBjLCAweGJjYjYsIDB4MDgwYywKKwkweGIzMDYsIDB4MDgwNCwgMHhlOWIxLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAzOSwKKwkweDAwMDUsIDB4MDBjNiwgMHgwMGU2LCAweDAwMTYsIDB4MmMwOCwgMHgyMTcwLCAweDkwMDYsIDB4MDgwYywKKwkweGViZmIsIDB4MDAxZSwgMHgwMTIwLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwMWIsIDB4MDBlZSwKKwkweDAwY2UsIDB4MDAwNSwgMHhlYTQ4LCAweGVhNDgsIDB4ZWE0OCwgMHhlYTQ4LCAweGVhNDgsIDB4ZWE0OCwKKwkweGVhNGEsIDB4ZWE0OCwgMHhlYTQ4LCAweGVhNDgsIDB4ZWE3MywgMHhiMzA2LCAweGIzMDYsIDB4ZWE0OCwKKwkweDkwMDYsIDB4MDAwNSwgMHgwMDM2LCAweDAwNDYsIDB4MDAxNiwgMHg3MDEwLCAweDAwYjYsIDB4MjA1OCwKKwkweGJjYTAsIDB4MDBiZSwgMHgyYzAwLCAweDIwMDksIDB4MDAyMCwgMHgwODBjLCAweGVjMzEsIDB4MDAxZSwKKwkweDAwNGUsIDB4MjAxOSwgMHgwMDAyLCAweDA4MGMsIDB4ZTc1NCwgMHgwMDNlLCAweDkwODUsIDB4MDAwMSwKKwkweDAwMDUsIDB4MDA5NiwgMHgwODBjLCAweGQwZDgsIDB4MDE0MCwgMHg2MDE0LCAweDkwNGQsIDB4MDgwYywKKwkweGNjZjMsIDB4Njg3YiwgMHgwMDA1LCAweDA4MGMsIDB4NmU5ZiwgMHgwMDllLCAweDA4MGMsIDB4YjMwNiwKKwkweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwMTksIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4NjAwMCwKKwkweDkwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDBkYzUsIDB4MDAwYiwgMHgwMDA1LCAweGVhOGUsIDB4ZWE4ZSwKKwkweGVhYTUsIDB4ZWE5NSwgMHhlYWI0LCAweGVhOGUsIDB4ZWE4ZSwgMHhlYTkwLCAweGVhOGUsIDB4ZWE4ZSwKKwkweGVhOGUsIDB4ZWE4ZSwgMHhlYThlLCAweGVhOGUsIDB4ZWE4ZSwgMHhlYThlLCAweDA4MGMsIDB4MGRjNSwKKwkweDA4MGMsIDB4YjMwNiwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDM2LCAweDAwZTYsIDB4MjA3MSwKKwkweDE5ZTgsIDB4NzAzYywgMHg5YzA2LCAweDExMjgsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4YWE0OSwKKwkweDAwMTAsIDB4MDgwYywgMHhhYzJiLCAweDAwZWUsIDB4MDAzZSwgMHgwMDk2LCAweDAwZDYsIDB4NjAxNCwKKwkweDIwNDgsIDB4YTg3YiwgMHgwMDA1LCAweDA4MGMsIDB4NmU5ZiwgMHgwODBjLCAweGIzMDYsIDB4MDBkZSwKKwkweDAwOWUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4NjAxYywgMHhkMDg0LCAweDE5MGMsIDB4MWE4ZSwKKwkweDBjNjAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NjY1NiwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwKKwkweDAwMzYsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLCAweDAyNzYsIDB4MDgwYywKKwkweGMzNjUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHg5MDA1LCAweDAwMDUsIDB4MDBmNiwKKwkweDAwZTYsIDB4MDBjNiwgMHgwMDg2LCAweDAwNzYsIDB4MDA2NiwgMHgwMGI2LCAweDAxMjYsIDB4MjA5MSwKKwkweDgwMDAsIDB4Mjc0MCwgMHgyMDYxLCAweDFjZDAsIDB4MjA3OSwgMHgwMDAxLCAweDhmZmYsIDB4MDkwNCwKKwkweGViMmIsIDB4MjA3MSwgMHgxODAwLCAweDc2NTQsIDB4NzA3NCwgMHg4MDAxLCAweDk2MDIsIDB4MWEwNCwKKwkweGViMmIsIDB4ODhmZiwgMHgwMTIwLCAweDI4MDAsIDB4OWMwNiwgMHgxNWEwLCAweDIwNzgsIDB4MDgwYywKKwkweGVjNjIsIDB4MDU4MCwgMHgyNDAwLCAweDljMDYsIDB4MDU2OCwgMHg2NzIwLCAweDk3ODYsIDB4MDAwNiwKKwkweDE1NDgsIDB4OTc4NiwgMHgwMDA3LCAweDA1MzAsIDB4ODhmZiwgMHgxMTUwLCAweGQ1OGMsIDB4MTExOCwKKwkweDYwMTAsIDB4OWIwNiwgMHgxMWY4LCAweGQ1ODQsIDB4MDExOCwgMHg2MDU0LCAweDkxMDYsIDB4MTFkMCwKKwkweDAwOTYsIDB4NjAxYywgMHhkMDg0LCAweDAxNDAsIDB4MDgwYywgMHhlZTg3LCAweDA4MGMsIDB4ZDdmYiwKKwkweDA4MGMsIDB4MWE4ZSwgMHg2MDIzLCAweDAwMDcsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4ZDBkOCwKKwkweDAxMjAsIDB4MDA0NiwgMHgwODBjLCAweGViZDQsIDB4MDA0ZSwgMHgwMDllLCAweDA4MGMsIDB4YjMwNiwKKwkweDg4ZmYsIDB4MTE5OCwgMHg5Y2UwLCAweDAwMTgsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwKKwkweDEyMTAsIDB4MDgwNCwgMHhlYWRlLCAweDkwMDYsIDB4MDEyZSwgMHgwMGJlLCAweDAwNmUsIDB4MDA3ZSwKKwkweDAwOGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg5OGM1LCAweDAwMDEsIDB4MGNhMCwKKwkweDAwYjYsIDB4MDA3NiwgMHgwMDU2LCAweDAwODYsIDB4OTA0NiwgMHgyMDI5LCAweDAwMDEsIDB4MmMyMCwKKwkweDIwMTksIDB4MDAwMiwgMHg2MjEwLCAweDIyNTgsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsIDB4YWFmYiwKKwkweDAwOWUsIDB4MDA4ZSwgMHg5MDNlLCAweDA4MGMsIDB4YWJhNiwgMHgwODBjLCAweGVhY2YsIDB4MDA1ZSwKKwkweDAwN2UsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDBjNiwKKwkweDAxNTYsIDB4MmMyMCwgMHgyMTI4LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDAwMTYsIDB4MDAzNiwKKwkweDA4MGMsIDB4NjcyNCwgMHgxMTgwLCAweDAwNTYsIDB4MDA4NiwgMHg5MDQ2LCAweDI1MDgsIDB4MjAyOSwKKwkweDAwMDEsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsIDB4YWFmYiwgMHgwMDllLCAweDAwOGUsIDB4OTAzZSwKKwkweDA4MGMsIDB4YWJhNiwgMHgwMDVlLCAweDAwM2UsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4ZWI1ZSwKKwkweDAwMzYsIDB4MjUwOCwgMHgyMDI5LCAweDAwMDMsIDB4MDgwYywgMHhlYWNmLCAweDAwM2UsIDB4MDE1ZSwKKwkweDAwY2UsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA3NiwKKwkweDAwNTYsIDB4NjIxMCwgMHgyMjU4LCAweDAwODYsIDB4OTA0NiwgMHgyMDI5LCAweDAwMDEsIDB4MjAxOSwKKwkweDAwNDgsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsIDB4YWFmYiwgMHgwMDllLCAweDAwOGUsIDB4OTAzZSwKKwkweDA4MGMsIDB4YWJhNiwgMHgyYzIwLCAweDA4MGMsIDB4ZWFjZiwgMHgwMDVlLCAweDAwN2UsIDB4MDBiZSwKKwkweDAwMDUsIDB4MDBiNiwgMHgwMDQ2LCAweDAwNTYsIDB4MDA3NiwgMHgwMGM2LCAweDAxNTYsIDB4MmMyMCwKKwkweDIwYTksIDB4MDgwMCwgMHg5MDBlLCAweDAwMTYsIDB4MDAzNiwgMHgwODBjLCAweDY3MjQsIDB4MTE5MCwKKwkweDAwODYsIDB4OTA0NiwgMHgyODI4LCAweDAwNDYsIDB4MjAyMSwgMHgwMDAxLCAweDA4MGMsIDB4ZWU2YiwKKwkweDAwNGUsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsIDB4YWFmYiwgMHgwMDllLCAweDAwOGUsIDB4OTAzZSwKKwkweDA4MGMsIDB4YWJhNiwgMHgwMDNlLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweGViYWIsIDB4MDAzNiwKKwkweDIwMjksIDB4MDAwMiwgMHgwODBjLCAweGVhY2YsIDB4MDAzZSwgMHgwMTVlLCAweDAwY2UsIDB4MDA3ZSwKKwkweDAwNWUsIDB4MDA0ZSwgMHgwMGJlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGY2LCAweDA4MGMsIDB4ZDBkNiwKKwkweDAxOTgsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDQ2LCAweDAxODAsIDB4YTgwMCwKKwkweDkwN2QsIDB4MDEzOCwgMHhhODAzLCAweDAwMDAsIDB4YWI4MiwgMHgwODBjLCAweDZlOWYsIDB4MmY0OCwKKwkweDBjYjAsIDB4YWI4MiwgMHgwODBjLCAweDZlOWYsIDB4MDBmZSwgMHgwMDFlLCAweDAwMDUsIDB4YTgwMCwKKwkweDkwN2QsIDB4MDEzMCwgMHhhODAzLCAweDAwMDAsIDB4MDgwYywgMHg2ZTlmLCAweDJmNDgsIDB4MGNiOCwKKwkweDA4MGMsIDB4NmU5ZiwgMHgwYzg4LCAweDAwZTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4MWNkMCwKKwkweDkwMDUsIDB4MTEzOCwgMHgyMDcxLCAweDE4MDAsIDB4NzQ1NCwgMHg3MDc0LCAweDgwMDEsIDB4OTQwMiwKKwkweDEyZjgsIDB4MjEwMCwgMHg5YzA2LCAweDAxODgsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDE2OCwKKwkweDYwMDgsIDB4OTIwNiwgMHgxMTUwLCAweDYzMjAsIDB4OTM4NiwgMHgwMDA5LCAweDAxYjAsIDB4NjAxMCwKKwkweDkxYTAsIDB4MDAwNCwgMHgyNDI0LCAweDk0MDYsIDB4MDE0MCwgMHg5Y2UwLCAweDAwMTgsIDB4MjAwMSwKKwkweDE4MWEsIDB4MjAwNCwgMHg5YzAyLCAweDEyMjAsIDB4MGMyMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwOCwKKwkweDkwMDYsIDB4MDAzZSwgMHgwMDRlLCAweDAwZWUsIDB4MDAwNSwgMHg2MzFjLCAweGQzYzQsIDB4MWQ2OCwKKwkweDBjMzAsIDB4MDA5NiwgMHgwMDA2LCAweDA4MGMsIDB4MTAwZSwgMHgwMDBlLCAweDA5MGMsIDB4MGRjNSwKKwkweGFhZTIsIDB4YTg2NywgMHgwMTBkLCAweGE4OGUsIDB4MDAyNiwgMHgyMDEwLCAweDA4MGMsIDB4ZDBjNiwKKwkweDIwMDEsIDB4MDAwMCwgMHgwMTIwLCAweDIyMDAsIDB4OTA4MCwgMHgwMDE1LCAweDIwMDQsIDB4MDAyZSwKKwkweGE4N2EsIDB4OTE4NiwgMHgwMDIwLCAweDAxMTAsIDB4YThlMywgMHhmZmZmLCAweGE5ODYsIDB4YWM3NiwKKwkweGE4N2YsIDB4MDAwMCwgMHgyMDAxLCAweDE5OGUsIDB4MjAwNCwgMHhhODgyLCAweDkwMDYsIDB4YTgwMiwKKwkweGE4NmEsIDB4YTg4YSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZlOWYsIDB4MDEyZSwKKwkweDAwOWUsIDB4MDAwNSwgMHg2NzAwLCAweDk3ODYsIDB4MDAwMCwgMHgwMTU4LCAweDk3ODYsIDB4MDAwMSwKKwkweDAxNDAsIDB4OTc4NiwgMHgwMDBhLCAweDAxMjgsIDB4OTc4NiwgMHgwMDA5LCAweDAxMTAsIDB4OTA4NSwKKwkweDAwMDEsIDB4MDAwNSwgMHgwMGU2LCAweDYwMTAsIDB4OTA3NSwgMHgwMTM4LCAweDAwYjYsIDB4MjA1OCwKKwkweGI4YTAsIDB4MDBiZSwgMHg5MjA2LCAweDAwZWUsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsIDB4MGNkOCwKKwkweDAwMTYsIDB4NjAwNCwgMHg5MDhlLCAweDAwMWUsIDB4MTFhMCwgMHg4MDA3LCAweDYxMzQsIDB4OTE4YywKKwkweDAwZmYsIDB4OTEwNSwgMHg2MDM2LCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywKKwkweDAwMDUsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsIDB4NjAxYSwgMHgwODBjLCAweDk0ZmYsIDB4MDgwYywKKwkweDlhYjEsIDB4MDAxZSwgMHgwMDA1LCAweGEwMDEsIDB4YTAwMSwgMHgwMDA1LCAweDYwMjQsIDB4ZDBlNCwKKwkweDAxNTgsIDB4ZDBjYywgMHgwMTE4LCAweDA4MGMsIDB4ZDQxMiwgMHgwMDMwLCAweDA4MGMsIDB4ZWU4NywKKwkweDA4MGMsIDB4OGEyNSwgMHgwODBjLCAweGIyZDMsIDB4MDAwNSwgMHg5MjgwLCAweDAwMDgsIDB4MjAwNCwKKwkweDkwODQsIDB4MDAwZiwgMHgwMDAyLCAweGVjYzEsIDB4ZWNjMSwgMHhlY2MxLCAweGVjYzMsIDB4ZWNjMSwKKwkweGVjYzMsIDB4ZWNjMywgMHhlY2MxLCAweGVjYzMsIDB4ZWNjMSwgMHhlY2MxLCAweGVjYzEsIDB4ZWNjMSwKKwkweGVjYzEsIDB4OTAwNiwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDkyODAsIDB4MDAwOCwKKwkweDIwMDQsIDB4OTA4NCwgMHgwMDBmLCAweDAwMDIsIDB4ZWNkYSwgMHhlY2RhLCAweGVjZGEsIDB4ZWNkYSwKKwkweGVjZGEsIDB4ZWNkYSwgMHhlY2U3LCAweGVjZGEsIDB4ZWNkYSwgMHhlY2RhLCAweGVjZGEsIDB4ZWNkYSwKKwkweGVjZGEsIDB4ZWNkYSwgMHg2MDA3LCAweDAwM2IsIDB4NjAyZiwgMHgwMDA5LCAweDYwMTcsIDB4MmEwMCwKKwkweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDAwMDUsIDB4MDA5NiwKKwkweDAwYzYsIDB4MjI2MCwgMHgwODBjLCAweGVlODcsIDB4NjA0MywgMHgwMDAwLCAweDYwMjQsIDB4YzBmNCwKKwkweGMwZTQsIDB4NjAyNiwgMHg2MDNiLCAweDAwMDAsIDB4MDBjZSwgMHgwMGQ2LCAweDIyNjgsIDB4OTE4NiwKKwkweDAwMDcsIDB4MTkwNCwgMHhlZDQwLCAweDY4MTQsIDB4OTAwNSwgMHgwMTM4LCAweDIwNDgsIDB4YTg3YywKKwkweGQwZmMsIDB4MTExOCwgMHgwMGRlLCAweDAwOWUsIDB4MDhhOCwgMHg2MDA3LCAweDAwM2EsIDB4NjAwMywKKwkweDAwMDEsIDB4MDgwYywgMHg5NGZmLCAweDA4MGMsIDB4OWFiMSwgMHgwMGM2LCAweDJkNjAsIDB4NjEwMCwKKwkweDkxODYsIDB4MDAwMiwgMHgxOTA0LCAweGVkYjAsIDB4NjAxNCwgMHg5MDA1LCAweDExMzgsIDB4NjAwMCwKKwkweDkwODYsIDB4MDAwNywgMHgxOTBjLCAweDBkYzUsIDB4MDgwNCwgMHhlZGIwLCAweDIwNDgsIDB4MDgwYywKKwkweGQwZDgsIDB4MTEzMCwgMHgwMDI4LCAweDIwNDgsIDB4YTgwMCwgMHg5MDA1LCAweDFkZTAsIDB4MjkwMCwKKwkweDIwNDgsIDB4YTg3YywgMHg5MDg0LCAweDAwMDMsIDB4OTA4NiwgMHgwMDAyLCAweDExNjgsIDB4YTg3YywKKwkweGMwZGMsIDB4YzBmNCwgMHhhODdlLCAweGE4ODAsIDB4YzBmYywgMHhhODgyLCAweDIwMDksIDB4MDA0MywKKwkweDA4MGMsIDB4ZTU5ZSwgMHgwODA0LCAweGVkYjAsIDB4MjAwOSwgMHgwMDQxLCAweDA4MDQsIDB4ZWRhYSwKKwkweDkxODYsIDB4MDAwNSwgMHgxNWEwLCAweDY4MTQsIDB4MjA0OCwgMHhhODdjLCAweGQwYmMsIDB4MTEyMCwKKwkweDAwZGUsIDB4MDA5ZSwgMHgwODA0LCAweGVjZGEsIDB4ZDBiNCwgMHgwMTI4LCAweGQwZmMsIDB4MDkwYywKKwkweDBkYzUsIDB4MDgwNCwgMHhlY2ZiLCAweDYwMDcsIDB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywKKwkweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDAwYzYsIDB4MmQ2MCwgMHg2MTAwLCAweDkxODYsIDB4MDAwMiwKKwkweDAxMjAsIDB4OTE4NiwgMHgwMDA0LCAweDE5MDQsIDB4ZWRiMCwgMHg2ODE0LCAweDIwNDgsIDB4YTk3YywKKwkweGMxZjQsIDB4YzFkYywgMHhhOTdlLCAweGE5ODAsIDB4YzFmYywgMHhjMWJjLCAweGE5ODIsIDB4MDBmNiwKKwkweDJjNzgsIDB4MDgwYywgMHgxNzY4LCAweDAwZmUsIDB4MjAwOSwgMHgwMDQyLCAweDA0OTgsIDB4MDAzNiwKKwkweDA4MGMsIDB4MTAwZSwgMHgwOTBjLCAweDBkYzUsIDB4YTg2NywgMHgwMTBkLCAweDkwMDYsIDB4YTgwMiwKKwkweGE4NmEsIDB4YTg4YSwgMHgyZDE4LCAweGFiOGUsIDB4YTg4NywgMHgwMDQ1LCAweDJjMDAsIDB4YTg5MiwKKwkweDYwMzgsIDB4YThhMiwgMHgyMzYwLCAweDYwMjQsIDB4YzBkZCwgMHg2MDI2LCAweDYwMTAsIDB4MDBiNiwKKwkweDIwNTgsIDB4YjhhMCwgMHgwMGJlLCAweDIwMDQsIDB4NjM1NCwgMHhhYjdhLCAweGE4NzYsIDB4OTAwNiwKKwkweGE4N2UsIDB4YTg4MiwgMHhhZDlhLCAweGFlOTYsIDB4YTg5ZiwgMHgwMDAxLCAweDA4MGMsIDB4NmU5ZiwKKwkweDIwMTksIDB4MDA0NSwgMHg2MDA4LCAweDIwNjgsIDB4MDgwYywgMHhlNzQ2LCAweDJkMDAsIDB4NjAwYSwKKwkweDAwM2UsIDB4MDAzOCwgMHg2MDQzLCAweDAwMDAsIDB4NjAwMywgMHgwMDA3LCAweDA4MGMsIDB4ZTU5ZSwKKwkweDAwY2UsIDB4MDBkZSwgMHgwMDllLCAweDAwMDUsIDB4OTE4NiwgMHgwMDEzLCAweDExMjgsIDB4NjAwNCwKKwkweDkwODIsIDB4MDA4NSwgMHgyMDA4LCAweDAwYzIsIDB4OTE4NiwgMHgwMDI3LCAweDExNzgsIDB4MDgwYywKKwkweDk5YTUsIDB4MDAzNiwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywKKwkweGViZDQsIDB4MDA5ZSwgMHgwMDNlLCAweDA4MGMsIDB4OWFiMSwgMHgwMDA1LCAweDkxODYsIDB4MDAxNCwKKwkweDBkNzAsIDB4MDgwYywgMHhiMzZkLCAweDAwMDUsIDB4ZWRlMywgMHhlZGUxLCAweGVkZTEsIDB4ZWRlMSwKKwkweGVkZTEsIDB4ZWRlMSwgMHhlZGUzLCAweGVkZTEsIDB4ZWRlMSwgMHhlZGUxLCAweGVkZTEsIDB4ZWRlMSwKKwkweGVkZTEsIDB4MDgwYywgMHgwZGM1LCAweDA4MGMsIDB4OTlhNSwgMHg2MDAzLCAweDAwMGMsIDB4MDgwYywKKwkweDlhYjEsIDB4MDAwNSwgMHg5MTgyLCAweDAwOTIsIDB4MTIyMCwgMHg5MTgyLCAweDAwODUsIDB4MDIwOCwKKwkweDAwMWEsIDB4MDgwYywgMHhiMzZkLCAweDAwMDUsIDB4ZWUwMSwgMHhlZTAxLCAweGVlMDEsIDB4ZWUwMSwKKwkweGVlMDMsIDB4ZWUyMywgMHhlZTAxLCAweGVlMDEsIDB4ZWUwMSwgMHhlZTAxLCAweGVlMDEsIDB4ZWUwMSwKKwkweGVlMDEsIDB4MDgwYywgMHgwZGM1LCAweDAwZDYsIDB4MmM2OCwgMHgwODBjLCAweGIyN2QsIDB4MDFiMCwKKwkweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMWUsIDB4MjAwOSwgMHgwMjZlLCAweDIxMGMsIDB4NjEzYSwKKwkweDIwMDksIDB4MDI2ZiwgMHgyMTBjLCAweDYxM2UsIDB4NjAwYiwgMHhmZmZmLCAweDY5MTAsIDB4NjExMiwKKwkweDYwMjMsIDB4MDAwNCwgMHgwODBjLCAweDk0ZmYsIDB4MDgwYywgMHg5YWIxLCAweDJkNjAsIDB4MDgwYywKKwkweGIyZDMsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4YjJkMywgMHgwMDA1LCAweDAwZTYsIDB4NjAxMCwKKwkweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBlYywgMHgwMGVlLCAweDAwMDUsIDB4MjAwOSwKKwkweDE4NjcsIDB4MjEwYywgMHhkMWVjLCAweDA1YjAsIDB4NjAwMywgMHgwMDAyLCAweDYwMjQsIDB4YzBlNSwKKwkweDYwMjYsIDB4ZDBjYywgMHgwMTUwLCAweDIwMDEsIDB4MTk4OCwgMHgyMDA0LCAweDYwNDIsIDB4MjAwOSwKKwkweDE4NjcsIDB4MjEwYywgMHhkMWY0LCAweDE1MjAsIDB4MDBhMCwgMHgyMDA5LCAweDE4NjcsIDB4MjEwYywKKwkweGQxZjQsIDB4MDEyOCwgMHg2MDI0LCAweGMwZTQsIDB4NjAyNiwgMHg5MDA2LCAweDAwZDgsIDB4MjAwMSwKKwkweDE5ODgsIDB4MjAwYywgMHgyMDAxLCAweDE5ODYsIDB4MjAwNCwgMHg5MTAwLCAweDkwODAsIDB4MDAwYSwKKwkweDYwNDIsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjhiYywgMHgwMGJlLCAweDAwMDgsIDB4MjEwNCwKKwkweDkwMDUsIDB4MDExOCwgMHg5MDg4LCAweDAwMDMsIDB4MGNkMCwgMHgyYzBhLCAweDYwMGYsIDB4MDAwMCwKKwkweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwMTYsIDB4MDBjNiwgMHgwMGU2LCAweDYxNTQsIDB4YjhiYywKKwkweDIwNjAsIDB4OGNmZiwgMHgwMTgwLCAweDg0ZmYsIDB4MTExOCwgMHg2MDU0LCAweDkxMDYsIDB4MTEzOCwKKwkweDYwMGMsIDB4MjA3MiwgMHgwODBjLCAweDhhMjUsIDB4MDgwYywgMHhiMmQzLCAweDAwMTAsIDB4OWNmMCwKKwkweDAwMDMsIDB4MmU2NCwgMHgwYzcwLCAweDAwZWUsIDB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwKKwkweDAwYjYsIDB4NjAxMCwgMHgyMDU4LCAweGI4YmMsIDB4OTA2ZCwgMHgwMTMwLCAweDljMDYsIDB4MDExMCwKKwkweDY4MGMsIDB4MGNkMCwgMHg2MDBjLCAweDY4MGUsIDB4MDBiZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAyNiwKKwkweDAwMzYsIDB4MDE1NiwgMHgyMDExLCAweDE4MmMsIDB4MjIwNCwgMHg5MDg0LCAweDAwZmYsIDB4MjAxOSwKKwkweDAyNmUsIDB4MjMzNCwgMHg5NmI0LCAweDAwZmYsIDB4OTYzNiwgMHgxNTA4LCAweDgzMTgsIDB4MjMzNCwKKwkweDIyMDQsIDB4OTA4NCwgMHhmZjAwLCAweDk2MzYsIDB4MTFkMCwgMHgyMDExLCAweDAyNzAsIDB4MjBhOSwKKwkweDAwMDQsIDB4NjAxMCwgMHgwMDk2LCAweDIwNDgsIDB4MjAxOSwgMHgwMDBhLCAweDA4MGMsIDB4YzM3OSwKKwkweDAwOWUsIDB4MTE2OCwgMHgyMDExLCAweDAyNzQsIDB4MjBhOSwgMHgwMDA0LCAweDYwMTAsIDB4MDA5NiwKKwkweDIwNDgsIDB4MjAxOSwgMHgwMDA2LCAweDA4MGMsIDB4YzM3OSwgMHgwMDllLCAweDExMDAsIDB4MDE1ZSwKKwkweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4NjBjMSwKKwkweDA4MGMsIDB4MzAwMCwgMHgwMGVlLCAweDAwMDUsIDB4MDA5NiwgMHgwMDI2LCAweDA4MGMsIDB4MTAwZSwKKwkweDA5MGMsIDB4MGRjNSwgMHhhODVjLCAweDkwODAsIDB4MDAxYSwgMHgyMGEwLCAweDIwYTksIDB4MDAwYywKKwkweGE4NjAsIDB4MjBlOCwgMHg5MDA2LCAweDQwMDQsIDB4OTE4NiwgMHgwMDQ2LCAweDExMTgsIDB4YTg2NywKKwkweDAxMzYsIDB4MDAzOCwgMHhhODY3LCAweDAxMzgsIDB4OTE4NiwgMHgwMDQxLCAweDAxMTAsIDB4YTg3YiwKKwkweDAwMDEsIDB4NzAzOCwgMHg5MDg0LCAweGZmMDAsIDB4NzI0MCwgMHg5Mjk0LCAweGZmMDAsIDB4ODAwNywKKwkweDkyMTUsIDB4YWE5YSwgMHg5MTg2LCAweDAwNDYsIDB4MTE2OCwgMHg3MDM4LCAweDkwODQsIDB4MDBmZiwKKwkweDcyM2MsIDB4OTI5NCwgMHhmZjAwLCAweDkyMTUsIDB4YWE5ZSwgMHg3MjNjLCAweDkyOTQsIDB4MDBmZiwKKwkweGFhYTIsIDB4MDA2MCwgMHg3MDQwLCAweDkwODQsIDB4MDBmZiwgMHg3MjQ0LCAweDkyOTQsIDB4ZmYwMCwKKwkweDkyMTUsIDB4YWE5ZSwgMHg3MjQ0LCAweDkyOTQsIDB4MDBmZiwgMHhhYWEyLCAweDkxODYsIDB4MDA0NiwKKwkweDExMTgsIDB4OWU5MCwgMHgwMDEyLCAweDAwMTAsIDB4OWU5MCwgMHgwMDFhLCAweDIyMDQsIDB4ODAwNywKKwkweGE4YTYsIDB4ODIxMCwgMHgyMjA0LCAweDgwMDcsIDB4YThhYSwgMHg4MjEwLCAweDIyMDQsIDB4ODAwNywKKwkweGE4YWUsIDB4ODIxMCwgMHgyMjA0LCAweDgwMDcsIDB4YThiMiwgMHg4MjEwLCAweDkxODYsIDB4MDA0NiwKKwkweDExYjgsIDB4OWU5MCwgMHgwMDE2LCAweDIyMDQsIDB4ODAwNywgMHhhOGI2LCAweDgyMTAsIDB4MjIwNCwKKwkweDgwMDcsIDB4YThiYSwgMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHhhOGJlLCAweDgyMTAsIDB4MjIwNCwKKwkweDgwMDcsIDB4YThjMiwgMHg4MjEwLCAweDIwMTEsIDB4MDIwNSwgMHgyMDEzLCAweDAwMDEsIDB4MDBiMCwKKwkweDllOTAsIDB4MDAxZSwgMHgyMjA0LCAweDgwMDcsIDB4YThiNiwgMHg4MjEwLCAweDIyMDQsIDB4ODAwNywKKwkweGE4YmEsIDB4MjAxMSwgMHgwMjA1LCAweDIwMTMsIDB4MDAwMSwgMHgyMDExLCAweDAyNjAsIDB4MjIwNCwKKwkweDgwMDcsIDB4YThiZSwgMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHhhOGMyLCAweDkxODYsIDB4MDA0NiwKKwkweDExMTgsIDB4MjAxMSwgMHgwMjYyLCAweDAwMTAsIDB4MjAxMSwgMHgwMjZhLCAweDAxNDYsIDB4MDFkNiwKKwkweDAwMzYsIDB4MjBhOSwgMHgwMDAxLCAweDIwMTksIDB4MDAwOCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywKKwkweDkwODAsIDB4MDAzMSwgMHgyMGEwLCAweDIyMDQsIDB4ODAwNywgMHg0MDA0LCAweDgyMTAsIDB4ODMxOSwKKwkweDFkZDAsIDB4MDAzZSwgMHgwMWNlLCAweDAxM2UsIDB4MjAxMSwgMHgwMjA1LCAweDIwMTMsIDB4MDAwMCwKKwkweDAwMmUsIDB4MDgwYywgMHg2ZTlmLCAweDAwOWUsIDB4MDAwNSwgMHgwMGU2LCAweDYwMTAsIDB4MDBiNiwKKwkweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwZmMsIDB4MDEwOCwgMHgwMDExLCAweDAwZWUsIDB4MDAwNSwKKwkweGE4ODAsIDB4YzBlNSwgMHhhODgyLCAweDAwMDUsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA3NiwKKwkweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsIDB4MDAxNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKKwkweDIwMjksIDB4MTlmMSwgMHgyNTJjLCAweDIwMjEsIDB4MTlmNywgMHgyNDI0LCAweDIwNjEsIDB4MWNkMCwKKwkweDIwNzEsIDB4MTgwMCwgMHg3NjU0LCAweDcwNzQsIDB4OTYwNiwgMHgwNTc4LCAweDY3MjAsIDB4OTc4NiwKKwkweDAwMDEsIDB4MDExOCwgMHg5Nzg2LCAweDAwMDgsIDB4MTUwMCwgMHgyNTAwLCAweDljMDYsIDB4MDFlOCwKKwkweDI0MDAsIDB4OWMwNiwgMHgwMWQwLCAweDA4MGMsIDB4ZWM2MiwgMHgwMWI4LCAweDA4MGMsIDB4ZWM3MiwKKwkweDExYTAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTEyMCwgMHgwMDE2LCAweDA4MGMsIDB4MWE4ZSwKKwkweDAwMWUsIDB4MDgwYywgMHhkMmNmLCAweDExMTAsIDB4MDgwYywgMHgzMjc5LCAweDA4MGMsIDB4ZDJlMCwKKwkweDExMTAsIDB4MDgwYywgMHhiY2I2LCAweDA4MGMsIDB4YjMwNiwgMHg5Y2UwLCAweDAwMTgsIDB4MjAwMSwKKwkweDE4MWEsIDB4MjAwNCwgMHg5YzAyLCAweDEyMDgsIDB4MDg1OCwgMHgwMTJlLCAweDAwMWUsIDB4MDAyZSwKKwkweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwKKwkweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwZGMsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MTgzNywKKwkweDIwMDQsIDB4ZDA5YywgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDM2LCAweDAwNDYsIDB4MDgwYywKKwkweGQ3ZTMsIDB4MDE2OCwgMHgyMDE5LCAweGZmZmYsIDB4OTAwNSwgMHgwMTI4LCAweDYwMTAsIDB4MDBiNiwKKwkweDIwNTgsIDB4YmJhMCwgMHgwMGJlLCAweDIwMjEsIDB4MDAwNCwgMHgwODBjLCAweDRkZmIsIDB4MDA0ZSwKKwkweDAwM2UsIDB4MDAwZSwgMHgwMDA1LCAweDYwMDQsIDB4OTA4NiwgMHgwMDAxLCAweDExMjgsIDB4MDgwYywKKwkweGFjNmMsIDB4MDgwYywgMHhiMzA2LCAweDkwMDYsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDBiNiwKKwkweDAwNDYsIDB4MjA2MSwgMHgxY2QwLCAweDIwNzEsIDB4MTgwMCwgMHg3NDU0LCAweDcwNzQsIDB4ODAwMSwKKwkweDk0MDIsIDB4MTJkOCwgMHgyMTAwLCAweDljMDYsIDB4MDE2OCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMCwKKwkweDAxNDgsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsIDB4OTIwNiwgMHgxMTIwLCAweDYwMDQsIDB4OTA4NiwKKwkweDAwMDIsIDB4MDE0MCwgMHg5Y2UwLCAweDAwMTgsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwKKwkweDEyMjAsIDB4MGM0MCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwOCwgMHg5MDA2LCAweDAwNGUsIDB4MDBiZSwKKwkweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwYTQsIDB4MDE2MCwKKwkweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwYTQsIDB4MDEzOCwgMHgyMDAxLCAweDE4NDgsIDB4MjAwNCwKKwkweGQwYTQsIDB4MTExOCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg5MDA2LCAweDBjZTgsIDB4MDEyNiwKKwkweDAwMDYsIDB4MDBlNiwgMHgwMDE2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE4NDAsIDB4ZDVhNCwKKwkweDAxMTgsIDB4NzAwNCwgMHg4MDAwLCAweDcwMDYsIDB4ZDViNCwgMHgwMTE4LCAweDcwMDAsIDB4ODAwMCwKKwkweDcwMDIsIDB4ZDVhYywgMHgwMTc4LCAweDI1MDAsIDB4OTA4NCwgMHgwMDA3LCAweDkwOGUsIDB4MDAwMywKKwkweDAxNDgsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMzAsIDB4OTA4ZSwgMHgwMDA1LCAweDAxMTgsIDB4MjA3MSwKKwkweGZmZjYsIDB4MDA4OSwgMHgwMDFlLCAweDAwZWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwKKwkweDAwMDYsIDB4MDBlNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHhmZmVlLCAweDAwMjEsIDB4MDBlZSwKKwkweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDJlMDUsIDB4ODAwMCwgMHgyMDc3LCAweDEyMjAsIDB4OGU3MCwKKwkweDJlMDUsIDB4ODAwMCwgMHgyMDc3LCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGZmZWMsIDB4MGM5OSwKKwkweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4ZmZmMCwgMHgwYzY5LCAweDAwZWUsIDB4MDAwNSwKKwkweDAxMjYsIDB4MDAwNiwgMHgwMGU2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE4NDAsIDB4NzAxNCwKKwkweDgwMDAsIDB4NzAxNiwgMHgwMGVlLCAweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDAwMDMsIDB4MDAwYiwKKwkweDA3ZDIsIDB4MDAwMCwgMHhjMDAwLCAweDAwMDEsIDB4ODA2NCwgMHgwMDA4LCAweDAwMTAsIDB4MDAwMCwKKwkweDgwNjYsIDB4MDAwMCwgMHgwMTAxLCAweDAwMDgsIDB4NDQwNywgMHgwMDAzLCAweDgwNjAsIDB4MDAwMCwKKwkweDA0MDAsIDB4MDAwMCwgMHg1ODBkLCAweDAwMGIsIDB4NzljMCwgMHgwMDAzLCAweDUxMDYsIDB4MDAwMywKKwkweDRjMGEsIDB4MDAwMywgMHhiYWMwLCAweDAwMDksIDB4MDA4YSwgMHgwMDAwLCAweDBjMGEsIDB4MDAwYiwKKwkweDE1ZmUsIDB4MDAwOCwgMHgzNDBhLCAweDAwMDMsIDB4YzRjMCwgMHgwMDA5LCAweDcwMDAsIDB4MDAwMCwKKwkweGZmYTAsIDB4MDAwMSwgMHgyMDAwLCAweDAwMDAsIDB4MTY4MCwgMHgwMDBiLCAweDgwOGMsIDB4MDAwOCwKKwkweDAwMDEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDcsIDB4NDAyOCwgMHgwMDAwLCAweDQwNDcsIDB4MDAwYSwKKwkweDgwOGMsIDB4MDAwOCwgMHgwMDAyLCAweDAwMDAsIDB4MDgyMiwgMHgwMDAzLCAweDQwMjIsIDB4MDAwMCwKKwkweDAwMjgsIDB4MDAwYiwgMHg0MTIyLCAweDAwMDgsIDB4OTRjMCwgMHgwMDA5LCAweGZmMDAsIDB4MDAwOCwKKwkweGZmZTAsIDB4MDAwOSwgMHgwNTAwLCAweDAwMDgsIDB4MGFhYiwgMHgwMDAzLCAweDQ0NDcsIDB4MDAwMiwKKwkweDBlYTgsIDB4MDAwYiwgMHgwYmZlLCAweDAwMDgsIDB4MTFhMCwgMHgwMDAxLCAweDEyODYsIDB4MDAwMywKKwkweDBjYTAsIDB4MDAwMSwgMHgxMjg2LCAweDAwMDMsIDB4OTE4MCwgMHgwMDAxLCAweDAwMDQsIDB4MDAwMCwKKwkweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwKKwkweDAwMDksIDB4MDAwOCwgMHg0NDM2LCAweDAwMGIsIDB4ODA4YywgMHgwMDA4LCAweDAwMDAsIDB4MDAwOCwKKwkweDAwNjAsIDB4MDAwOCwgMHg4MDYyLCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwKKwkweDA0MTEsIDB4MDAwMCwgMHg0NDNlLCAweDAwMDMsIDB4MDNmZSwgMHgwMDAwLCAweDQzZTAsIDB4MDAwMSwKKwkweDBlODMsIDB4MDAwYiwgMHhjMmMwLCAweDAwMDksIDB4MDBmZiwgMHgwMDA4LCAweDAyZTAsIDB4MDAwMSwKKwkweDBlODMsIDB4MDAwYiwgMHg5MTgwLCAweDAwMDEsIDB4MDAwNSwgMHgwMDA4LCAweDgwNjAsIDB4MDAwMCwKKwkweDA0MDAsIDB4MDAwMCwgMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDAwMTksIDB4MDAwMCwKKwkweDQ0NGQsIDB4MDAwYiwgMHgwMjQwLCAweDAwMDIsIDB4MGE4MCwgMHgwMDAzLCAweDAwZmUsIDB4MDAwMCwKKwkweDMyODMsIDB4MDAwYiwgMHgwMjQ4LCAweDAwMGEsIDB4MDg1YywgMHgwMDAzLCAweDkxODAsIDB4MDAwMSwKKwkweDAwMDYsIDB4MDAwOCwgMHg3ZjYyLCAweDAwMDgsIDB4ODAwMiwgMHgwMDA4LCAweDAwMDMsIDB4MDAwOCwKKwkweDgwNjYsIDB4MDAwMCwgMHgwMjBhLCAweDAwMDAsIDB4NDQ1YiwgMHgwMDAzLCAweDExMmEsIDB4MDAwMCwKKwkweDAwMmUsIDB4MDAwOCwgMHgwMjJjLCAweDAwMDgsIDB4M2E0NCwgMHgwMDAyLCAweDBjMGEsIDB4MDAwYiwKKwkweDgwOGMsIDB4MDAwOCwgMHgwMDAyLCAweDAwMDAsIDB4MTc2MCwgMHgwMDA4LCAweDgwNjIsIDB4MDAwOCwKKwkweDAwMGYsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDAxMSwgMHgwMDA4LCAweDQ0NjgsIDB4MDAwMywKKwkweDAxZmUsIDB4MDAwOCwgMHg0MmUwLCAweDAwMDksIDB4MGU3NCwgMHgwMDAzLCAweDAwZmUsIDB4MDAwMCwKKwkweDQzZTAsIDB4MDAwMSwgMHgwZTc0LCAweDAwMDMsIDB4MTczNCwgMHgwMDAwLCAweDE1MzAsIDB4MDAwMCwKKwkweDE2MzIsIDB4MDAwOCwgMHgwZDJhLCAweDAwMDgsIDB4OTg4MCwgMHgwMDAxLCAweDAwMTAsIDB4MDAwMCwKKwkweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwKKwkweDFlMGEsIDB4MDAwOCwgMHg0NDdhLCAweDAwMDMsIDB4ODA4YSwgMHgwMDA4LCAweDAwMDMsIDB4MDAwOCwKKwkweDFhNjAsIDB4MDAwMCwgMHg4MDYyLCAweDAwMDgsIDB4MDAwMiwgMHgwMDAwLCAweDU4ODAsIDB4MDAwYiwKKwkweDgwNjYsIDB4MDAwMCwgMHgzNjc5LCAweDAwMDAsIDB4NDQ4MywgMHgwMDAzLCAweDU4ODQsIDB4MDAwMywKKwkweDNlZmUsIDB4MDAwOCwgMHg3ZjRmLCAweDAwMDIsIDB4MDg4YSwgMHgwMDBiLCAweDBkMDAsIDB4MDAwMCwKKwkweDAwOTIsIDB4MDAwYywgMHg4MDU0LCAweDAwMDgsIDB4MDAxMSwgMHgwMDA4LCAweDgwNzQsIDB4MDAwMCwKKwkweDEwMTAsIDB4MDAwOCwgMHgxZWZlLCAweDAwMDAsIDB4MzAwYSwgMHgwMDBiLCAweDAwZTAsIDB4MDAwYywKKwkweDAwMGEsIDB4MDAwYiwgMHgwMGZlLCAweDAwMDAsIDB4MzQ5YSwgMHgwMDAzLCAweDFhNjAsIDB4MDAwMCwKKwkweDgwNjIsIDB4MDAwOCwgMHgwMDA3LCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDAyMzEsIDB4MDAwOCwKKwkweDQ0OTksIDB4MDAwYiwgMHgwM2ZlLCAweDAwMDAsIDB4MDRkMCwgMHgwMDAxLCAweDBjZDQsIDB4MDAwYiwKKwkweDgyYzAsIDB4MDAwMSwgMHgxZjAwLCAweDAwMDAsIDB4ZmZhMCwgMHgwMDAxLCAweDA0MDAsIDB4MDAwMCwKKwkweDA4YjIsIDB4MDAwMywgMHgxNGRjLCAweDAwMDMsIDB4MDFmZSwgMHgwMDA4LCAweDA1ODAsIDB4MDAwOSwKKwkweDdmMDYsIDB4MDAwMCwgMHg4NjkwLCAweDAwMDksIDB4MDAwMCwgMHgwMDA4LCAweDdmMGMsIDB4MDAwMCwKKwkweDAyZmUsIDB4MDAwOCwgMHhmZmMwLCAweDAwMDEsIDB4MDBmZiwgMHgwMDA4LCAweDA2ODAsIDB4MDAwOSwKKwkweDEwYjIsIDB4MDAwMywgMHg3ZjA4LCAweDAwMDgsIDB4ODRjMCwgMHgwMDAxLCAweGZmMDAsIDB4MDAwOCwKKwkweDA4ZDQsIDB4MDAwMywgMHhiOWMwLCAweDAwMDksIDB4MDAzMCwgMHgwMDA4LCAweDBjYzMsIDB4MDAwYiwKKwkweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4ODBmZSwgMHgwMDA4LCAweDFhMGEsIDB4MDAwOSwKKwkweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDQwOSwgMHgwMDAwLCAweDQ0YmMsIDB4MDAwMywKKwkweDgwZmUsIDB4MDAwOCwgMHgxYTA5LCAweDAwMDksIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwKKwkweDA0MGEsIDB4MDAwMCwgMHg0NGMyLCAweDAwMDMsIDB4MDBmZSwgMHgwMDAwLCAweDM0Y2EsIDB4MDAwMywKKwkweDgwNzIsIDB4MDAwMCwgMHgxMDEwLCAweDAwMDgsIDB4Mzk0NCwgMHgwMDAyLCAweDA4YzUsIDB4MDAwMywKKwkweDAwY2UsIDB4MDAwMywgMHg4MDcyLCAweDAwMDAsIDB4MjAyMCwgMHgwMDA4LCAweDM5NDUsIDB4MDAwYSwKKwkweDA4Y2EsIDB4MDAwMywgMHgzOTQ2LCAweDAwMGEsIDB4MGNkYiwgMHgwMDBiLCAweDAwMDAsIDB4MDAwNywKKwkweDM5NDMsIDB4MDAwYSwgMHgwOGRiLCAweDAwMDMsIDB4MDBjZSwgMHgwMDAzLCAweDAwZmUsIDB4MDAwMCwKKwkweDM0ZDksIDB4MDAwYiwgMHg4MDcyLCAweDAwMDAsIDB4MTAwMCwgMHgwMDAwLCAweDAwZGIsIDB4MDAwYiwKKwkweDgwNzIsIDB4MDAwMCwgMHgyMDAwLCAweDAwMDAsIDB4NDAwMCwgMHgwMDBmLCAweDg2YzAsIDB4MDAwOSwKKwkweGZjMDAsIDB4MDAwOCwgMHgwOGQ0LCAweDAwMDMsIDB4MDBiMiwgMHgwMDBiLCAweDFjNjAsIDB4MDAwMCwKKwkweDFiNjIsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsIDB4MDIzMSwgMHgwMDA4LCAweDQ0ZTQsIDB4MDAwYiwKKwkweDU4ZTUsIDB4MDAwYiwgMHgwMTQwLCAweDAwMDgsIDB4MDI0MiwgMHgwMDAwLCAweDFmNDMsIDB4MDAwMiwKKwkweDBjZjMsIDB4MDAwYiwgMHgwZDQ0LCAweDAwMDAsIDB4MGQ0NiwgMHgwMDA4LCAweDAzNDgsIDB4MDAwOCwKKwkweDA0NGEsIDB4MDAwOCwgMHgwMzBhLCAweDAwMDgsIDB4MDQwYywgMHgwMDAwLCAweDBkMDYsIDB4MDAwMCwKKwkweDBkMDgsIDB4MDAwOCwgMHgwMGY3LCAweDAwMDMsIDB4MDM0NCwgMHgwMDA4LCAweDA0NDYsIDB4MDAwOCwKKwkweDA1NDgsIDB4MDAwOCwgMHgwNjRhLCAweDAwMDAsIDB4MTk0OCwgMHgwMDBhLCAweDA4ZmEsIDB4MDAwMywKKwkweDBkNGEsIDB4MDAwOCwgMHg1OGZhLCAweDAwMDMsIDB4M2VmZSwgMHgwMDA4LCAweDdmNGYsIDB4MDAwMiwKKwkweDA5MDEsIDB4MDAwMywgMHg4MDAwLCAweDAwMDAsIDB4MDAwMSwgMHgwMDAwLCAweDAwOTIsIDB4MDAwYywKKwkweDgwNTQsIDB4MDAwOCwgMHgwMDAxLCAweDAwMDAsIDB4ODA3NCwgMHgwMDAwLCAweDIwMjAsIDB4MDAwOCwKKwkweDQwMDAsIDB4MDAwZiwgMHgzYTQwLCAweDAwMGEsIDB4MGMwZCwgMHgwMDAzLCAweDJiMjQsIDB4MDAwOCwKKwkweDJiMjQsIDB4MDAwOCwgMHg1OTBhLCAweDAwMGIsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDIsIDB4MDAwMCwKKwkweDEyNDIsIDB4MDAwMiwgMHgwOTU4LCAweDAwMDMsIDB4M2E0NSwgMHgwMDBhLCAweDA5NDcsIDB4MDAwYiwKKwkweDgwNzIsIDB4MDAwMCwgMHgxMDAwLCAweDAwMDAsIDB4Mzk0NSwgMHgwMDBhLCAweDA5MTcsIDB4MDAwYiwKKwkweDgwNzIsIDB4MDAwMCwgMHgzMDEwLCAweDAwMDAsIDB4MWUxMCwgMHgwMDBhLCAweDdmM2MsIDB4MDAwMCwKKwkweDA5NDIsIDB4MDAwYiwgMHgxZDAwLCAweDAwMDIsIDB4N2YzYSwgMHgwMDAwLCAweDBkNjAsIDB4MDAwMCwKKwkweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDAwOSwgMHgwMDA4LCAweDQ1MjAsIDB4MDAwYiwKKwkweDAwZmUsIDB4MDAwMCwgMHgzNTNmLCAweDAwMGIsIDB4MWM2MCwgMHgwMDAwLCAweDgwNjIsIDB4MDAwOCwKKwkweDAwMDEsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsIDB4MDAwOSwgMHgwMDA4LCAweDQ1MjgsIDB4MDAwMywKKwkweDAwZmUsIDB4MDAwMCwgMHgzMjViLCAweDAwMGIsIDB4MDAzOCwgMHgwMDAwLCAweDAwNjAsIDB4MDAwOCwKKwkweDgwNjIsIDB4MDAwOCwgMHgwMDE5LCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDAwMDksIDB4MDAwOCwKKwkweDQ1MzEsIDB4MDAwYiwgMHg4MGMwLCAweDAwMDksIDB4MDBmZiwgMHgwMDA4LCAweDdmM2UsIDB4MDAwOCwKKwkweDBkNjAsIDB4MDAwMCwgMHgwZWZlLCAweDAwMDgsIDB4MWY4MCwgMHgwMDAxLCAweDdmNjIsIDB4MDAwOCwKKwkweDgwNjYsIDB4MDAwMCwgMHgwMDA5LCAweDAwMDgsIDB4NDUzYiwgMHgwMDBiLCAweDAwM2EsIDB4MDAwOCwKKwkweDFkZmUsIDB4MDAwMCwgMHgwMTFjLCAweDAwMGIsIDB4MDAzNiwgMHgwMDA4LCAweDAwZTAsIDB4MDAwYywKKwkweDAxNTgsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsIDB4MjAwMCwgMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwKKwkweDIwMDAsIDB4MDAwMCwgMHgwMTU4LCAweDAwMGIsIDB4M2E0NCwgMHgwMDAyLCAweDBhODksIDB4MDAwMywKKwkweDgwNzQsIDB4MDAwMCwgMHgxMDAwLCAweDAwMDAsIDB4ODA3MiwgMHgwMDAwLCAweDEwMDAsIDB4MDAwMCwKKwkweDJkMGUsIDB4MDAwMCwgMHgyZDBlLCAweDAwMDAsIDB4MzY1OCwgMHgwMDAzLCAweDI2ZmUsIDB4MDAwOCwKKwkweDI2ZmUsIDB4MDAwOCwgMHgyNzAwLCAweDAwMDgsIDB4MjcwMCwgMHgwMDA4LCAweDAwZDAsIDB4MDAwOSwKKwkweDBkNmEsIDB4MDAwMywgMHg4MDc0LCAweDAwMDAsIDB4NDA0MCwgMHgwMDA4LCAweDU5NTgsIDB4MDAwMywKKwkweDUxMDYsIDB4MDAwMywgMHgzYTQ2LCAweDAwMGEsIDB4MGQ2YSwgMHgwMDAzLCAweDNhNDcsIDB4MDAwMiwKKwkweDA5NjUsIDB4MDAwYiwgMHg4MDU0LCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDgwNzQsIDB4MDAwMCwKKwkweDgwMDAsIDB4MDAwMCwgMHg4MDcyLCAweDAwMDAsIDB4MzAwMCwgMHgwMDA4LCAweDAxYjQsIDB4MDAwMywKKwkweDkyYzAsIDB4MDAwOSwgMHgwZmM4LCAweDAwMDAsIDB4MDgwYSwgMHgwMDAzLCAweDEyNDYsIDB4MDAwYSwKKwkweDBlNTIsIDB4MDAwYiwgMHgxYTYwLCAweDAwMDAsIDB4ODA2MiwgMHgwMDA4LCAweDAwMDIsIDB4MDAwMCwKKwkweDgwNjYsIDB4MDAwMCwgMHgzNjJhLCAweDAwMDAsIDB4NDU2ZiwgMHgwMDAzLCAweDIwMDAsIDB4MDAwMCwKKwkweDIwMDAsIDB4MDAwMCwgMHgyMTAyLCAweDAwMDAsIDB4MjEwMiwgMHgwMDAwLCAweDIyMDQsIDB4MDAwMCwKKwkweDIyMDQsIDB4MDAwMCwgMHgyMzA2LCAweDAwMDAsIDB4MjMwNiwgMHgwMDAwLCAweDI0MDgsIDB4MDAwMCwKKwkweDI0MDgsIDB4MDAwMCwgMHgyNTBhLCAweDAwMDAsIDB4MjUwYSwgMHgwMDAwLCAweDI2MGMsIDB4MDAwMCwKKwkweDI2MGMsIDB4MDAwMCwgMHgyNzBlLCAweDAwMDAsIDB4MjcwZSwgMHgwMDAwLCAweDI4MTAsIDB4MDAwMCwKKwkweDI4MTAsIDB4MDAwMCwgMHgyOTEyLCAweDAwMDAsIDB4MjkxMiwgMHgwMDAwLCAweDFhNjAsIDB4MDAwMCwKKwkweDgwNjIsIDB4MDAwOCwgMHgwMDA3LCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDAwNTIsIDB4MDAwMCwKKwkweDQ1ODksIDB4MDAwYiwgMHg5MmMwLCAweDAwMDksIDB4MDc4MCwgMHgwMDA4LCAweDBlNmUsIDB4MDAwYiwKKwkweDEyNGIsIDB4MDAwMiwgMHgwOTkyLCAweDAwMDMsIDB4MmU0ZCwgMHgwMDAyLCAweDJlNGQsIDB4MDAwMiwKKwkweDBhNTgsIDB4MDAwMywgMHgzYTQ2LCAweDAwMGEsIDB4MGRhMiwgMHgwMDBiLCAweDU5OTQsIDB4MDAwMywKKwkweDgwNTQsIDB4MDAwOCwgMHgwMDA0LCAweDAwMDAsIDB4MTI0MywgMHgwMDBhLCAweDA5YjAsIDB4MDAwMywKKwkweDgwMTAsIDB4MDAwOCwgMHgwMDBkLCAweDAwMDAsIDB4MDIzMywgMHgwMDBjLCAweDE5NDgsIDB4MDAwYSwKKwkweDA5OWYsIDB4MDAwYiwgMHgwMjI4LCAweDAwMGMsIDB4MTgxMCwgMHgwMDAwLCAweDAyMzMsIDB4MDAwYywKKwkweDAxYjAsIDB4MDAwYiwgMHgxOTQ4LCAweDAwMGEsIDB4MDlhNiwgMHgwMDBiLCAweDEyNDMsIDB4MDAwYSwKKwkweDBhNWIsIDB4MDAwMywgMHgxOTRkLCAweDAwMGEsIDB4MDlhYSwgMHgwMDBiLCAweDEyNDMsIDB4MDAwYSwKKwkweDBhNjIsIDB4MDAwMywgMHg1OWFhLCAweDAwMGIsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDQsIDB4MDAwMCwKKwkweDAyMjgsIDB4MDAwYywgMHgxODEwLCAweDAwMDAsIDB4MDIzMywgMHgwMDBjLCAweDgwNzQsIDB4MDAwMCwKKwkweGYwMDAsIDB4MDAwOCwgMHg4MDcyLCAweDAwMDAsIDB4MzAwMCwgMHgwMDA4LCAweDBkMzAsIDB4MDAwMCwKKwkweDNhNDIsIDB4MDAwMiwgMHgwZGJhLCAweDAwMGIsIDB4MTVmZSwgMHgwMDA4LCAweDM0NjEsIDB4MDAwYiwKKwkweDAwMGEsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsIDB4MDUwMSwgMHgwMDAwLCAweDgwMTAsIDB4MDAwOCwKKwkweDAwMGMsIDB4MDAwOCwgMHgwMjMzLCAweDAwMGMsIDB4MDAwYSwgMHgwMDBiLCAweGJiZTAsIDB4MDAwOSwKKwkweDAwMzAsIDB4MDAwOCwgMHgwZGQwLCAweDAwMGIsIDB4MThmZSwgMHgwMDAwLCAweDNjZTAsIDB4MDAwOSwKKwkweDA5Y2QsIDB4MDAwMywgMHgxNWZlLCAweDAwMDgsIDB4M2NlMCwgMHgwMDA5LCAweDA5Y2QsIDB4MDAwMywKKwkweDAyMjMsIDB4MDAwNCwgMHg4MDc2LCAweDAwMDgsIDB4MDA0MCwgMHgwMDAwLCAweDAyMjAsIDB4MDAwYiwKKwkweDgwNzYsIDB4MDAwOCwgMHgwMDQxLCAweDAwMDgsIDB4MDIyMCwgMHgwMDBiLCAweGJiZTAsIDB4MDAwOSwKKwkweDAwMzIsIDB4MDAwMCwgMHgwZGQ1LCAweDAwMGIsIDB4M2MxZSwgMHgwMDA4LCAweDAyMjAsIDB4MDAwYiwKKwkweGJiZTAsIDB4MDAwOSwgMHgwMDNiLCAweDAwMDAsIDB4MGRkYSwgMHgwMDBiLCAweDNjMjAsIDB4MDAwMCwKKwkweDAyMjAsIDB4MDAwYiwgMHhiYmUwLCAweDAwMDksIDB4MDAzNSwgMHgwMDA4LCAweDBkZTAsIDB4MDAwYiwKKwkweDgwNzIsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsIDB4MDM5ZSwgMHgwMDAzLCAweGJiZTAsIDB4MDAwOSwKKwkweDAwMzYsIDB4MDAwOCwgMHgwYWJkLCAweDAwMGIsIDB4YmJlMCwgMHgwMDA5LCAweDAwMzcsIDB4MDAwMCwKKwkweDBlMDEsIDB4MDAwYiwgMHgxOGZlLCAweDAwMDAsIDB4M2NlMCwgMHgwMDA5LCAweDBkY2QsIDB4MDAwYiwKKwkweDgwNzYsIDB4MDAwOCwgMHgwMDQwLCAweDAwMDAsIDB4MWE2MCwgMHgwMDAwLCAweDgwNjIsIDB4MDAwOCwKKwkweDAwMGQsIDB4MDAwMCwgMHgyNjA0LCAweDAwMDgsIDB4MjYwNCwgMHgwMDA4LCAweDI3MDYsIDB4MDAwOCwKKwkweDI3MDYsIDB4MDAwOCwgMHgyODA4LCAweDAwMDAsIDB4MjgwOCwgMHgwMDAwLCAweDI5MGEsIDB4MDAwMCwKKwkweDI5MGEsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsIDB4MDQyMiwgMHgwMDAwLCAweDQ1ZjgsIDB4MDAwYiwKKwkweDAyMjgsIDB4MDAwYywgMHg4MDU0LCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDgwNzQsIDB4MDAwMCwKKwkweGYwMDAsIDB4MDAwOCwgMHg4MDcyLCAweDAwMDAsIDB4YjAwMCwgMHgwMDAwLCAweDAxYjQsIDB4MDAwMywKKwkweGJiZTAsIDB4MDAwOSwgMHgwMDM4LCAweDAwMDAsIDB4MGUxMywgMHgwMDBiLCAweDE4ZmUsIDB4MDAwMCwKKwkweDNjZTAsIDB4MDAwOSwgMHgwYTEwLCAweDAwMDMsIDB4MTVmZSwgMHgwMDA4LCAweDNjZTAsIDB4MDAwOSwKKwkweDBkYzksIDB4MDAwMywgMHgwMjIzLCAweDAwMDQsIDB4ODA3NiwgMHgwMDA4LCAweDAwNDAsIDB4MDAwMCwKKwkweDgwNzIsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsIDB4MDI4MCwgMHgwMDBiLCAweDgwNzYsIDB4MDAwOCwKKwkweDAwNDIsIDB4MDAwOCwgMHgwMjIwLCAweDAwMGIsIDB4YmJlMCwgMHgwMDA5LCAweDAwMTYsIDB4MDAwMCwKKwkweDBlMjAsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsIDB4MDgwOCwgMHgwMDA4LCAweDNhNDQsIDB4MDAwMiwKKwkweDBjMGMsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsIDB4MDgwMCwgMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwKKwkweDgwMDAsIDB4MDAwMCwgMHg4MDAwLCAweDAwMGYsIDB4MDAwYSwgMHgwMDBiLCAweDgwNzIsIDB4MDAwMCwKKwkweDgwMDAsIDB4MDAwMCwgMHgwMDBhLCAweDAwMGIsIDB4M2QzMCwgMHgwMDBhLCAweDdmMDAsIDB4MDAwMCwKKwkweGJjODAsIDB4MDAwMSwgMHgwMDA3LCAweDAwMDAsIDB4MDIyYywgMHgwMDBiLCAweDE5MzAsIDB4MDAwYSwKKwkweDdmMDAsIDB4MDAwMCwgMHg5ODgwLCAweDAwMDEsIDB4MDAwNywgMHgwMDAwLCAweDgwNjAsIDB4MDAwMCwKKwkweDA0MDAsIDB4MDAwMCwgMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDAwMGEsIDB4MDAwOCwKKwkweDQ2MzEsIDB4MDAwYiwgMHg0MDAwLCAweDAwMGYsIDB4MjIzNiwgMHgwMDBiLCAweDA4NzAsIDB4MDAwOCwKKwkweDQwMDAsIDB4MDAwZiwgMHg3ZTMzLCAweDAwMGIsIDB4YmJlMCwgMHgwMDA5LCAweDAwMzAsIDB4MDAwOCwKKwkweDBlMzMsIDB4MDAwMywgMHgxOGZlLCAweDAwMDAsIDB4M2NlMCwgMHgwMDA5LCAweDBhNDQsIDB4MDAwYiwKKwkweDE1ZmUsIDB4MDAwOCwgMHgzY2UwLCAweDAwMDksIDB4MGE0NCwgMHgwMDBiLCAweDAyMjMsIDB4MDAwNCwKKwkweDgwNzYsIDB4MDAwOCwgMHgwMDQwLCAweDAwMDAsIDB4MDI0NiwgMHgwMDBiLCAweDgwNzYsIDB4MDAwOCwKKwkweDAwNDEsIDB4MDAwOCwgMHg4MDcyLCAweDAwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDAyMzMsIDB4MDAwMywKKwkweGJhYzAsIDB4MDAwOSwgMHgwMDkwLCAweDAwMDgsIDB4MGE0ZiwgMHgwMDAzLCAweDgwNzQsIDB4MDAwMCwKKwkweDA3MDYsIDB4MDAwMCwgMHgwMjUxLCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweDA3MDMsIDB4MDAwMCwKKwkweDQwMDAsIDB4MDAwZiwgMHg4MDEwLCAweDAwMDgsIDB4MDAyMywgMHgwMDAwLCAweDAyOGUsIDB4MDAwMywKKwkweDgwMTAsIDB4MDAwOCwgMHgwMDA4LCAweDAwMDAsIDB4MDI4ZSwgMHgwMDAzLCAweDgwMTAsIDB4MDAwOCwKKwkweDAwMjIsIDB4MDAwOCwgMHgwMjhlLCAweDAwMDMsIDB4MDIyOCwgMHgwMDBjLCAweDgwMTAsIDB4MDAwOCwKKwkweDAwMDcsIDB4MDAwMCwgMHgwMjMzLCAweDAwMGMsIDB4MTgxMCwgMHgwMDAwLCAweDAyMzMsIDB4MDAwYywKKwkweDAyOWEsIDB4MDAwMywgMHgwMjI4LCAweDAwMGMsIDB4ODAxMCwgMHgwMDA4LCAweDAwMWIsIDB4MDAwOCwKKwkweDAyMzMsIDB4MDAwYywgMHgxODEwLCAweDAwMDAsIDB4MDIzMywgMHgwMDBjLCAweDgwNzQsIDB4MDAwMCwKKwkweGYwODAsIDB4MDAwMCwgMHg4MDcyLCAweDAwMDAsIDB4MzAwMCwgMHgwMDA4LCAweDBkMzAsIDB4MDAwMCwKKwkweDAwMGEsIDB4MDAwYiwgMHg4MDEwLCAweDAwMDgsIDB4MDAwOSwgMHgwMDA4LCAweDAyOGUsIDB4MDAwMywKKwkweDgwMTAsIDB4MDAwOCwgMHgwMDA1LCAweDAwMDgsIDB4MDI4ZSwgMHgwMDAzLCAweDE2NDgsIDB4MDAwYSwKKwkweDBjNmYsIDB4MDAwYiwgMHg4MDhjLCAweDAwMDgsIDB4MDAwMSwgMHgwMDAwLCAweDgwMTAsIDB4MDAwOCwKKwkweDAwMDQsIDB4MDAwMCwgMHg0MTQzLCAweDAwMGEsIDB4MDg2ZiwgMHgwMDAzLCAweDNhNDQsIDB4MDAwMiwKKwkweDBjMGEsIDB4MDAwYiwgMHgwZDJhLCAweDAwMDgsIDB4MDI4ZSwgMHgwMDAzLCAweDgwMTAsIDB4MDAwOCwKKwkweDAwMDMsIDB4MDAwOCwgMHgwMjkyLCAweDAwMGIsIDB4ODAxMCwgMHgwMDA4LCAweDAwMGIsIDB4MDAwMCwKKwkweDAyOTIsIDB4MDAwYiwgMHg4MDEwLCAweDAwMDgsIDB4MDAwMiwgMHgwMDAwLCAweDAyOTIsIDB4MDAwYiwKKwkweDNhNDcsIDB4MDAwMiwgMHgwZDU4LCAweDAwMGIsIDB4ODAxMCwgMHgwMDA4LCAweDAwMDYsIDB4MDAwOCwKKwkweDAyOTIsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsIDB4ZjAwMCwgMHgwMDA4LCAweDgwNzIsIDB4MDAwMCwKKwkweDMwMDAsIDB4MDAwOCwgMHgwMjMzLCAweDAwMGMsIDB4MDI0OSwgMHgwMDA0LCAweDNhNDAsIDB4MDAwYSwKKwkweDA4MGEsIDB4MDAwMywgMHg4MDEwLCAweDAwMDgsIDB4MDAwYywgMHgwMDA4LCAweDAyMzMsIDB4MDAwYywKKwkweDAwMGEsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsIDB4ZjA4MCwgMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwKKwkweDMwMDAsIDB4MDAwOCwgMHgwZDMwLCAweDAwMDAsIDB4MmU0ZCwgMHgwMDAyLCAweDJlNGQsIDB4MDAwMiwKKwkweDBhYTUsIDB4MDAwYiwgMHg4MDU0LCAweDAwMDgsIDB4MDAxOSwgMHgwMDAwLCAweDAwMGEsIDB4MDAwYiwKKwkweDgwNTQsIDB4MDAwOCwgMHgwMDA5LCAweDAwMDgsIDB4MDAwYSwgMHgwMDBiLCAweDNhNDQsIDB4MDAwMiwKKwkweDBjMGEsIDB4MDAwYiwgMHgwMjgzLCAweDAwMGIsIDB4ODA4YywgMHgwMDA4LCAweDAwMDAsIDB4MDAwOCwKKwkweDQ0NDcsIDB4MDAwMiwgMHgwYWQxLCAweDAwMGIsIDB4YzBjMCwgMHgwMDAxLCAweDAwZmYsIDB4MDAwOCwKKwkweGZmZTAsIDB4MDAwOSwgMHgwMGZmLCAweDAwMDgsIDB4MGVhOCwgMHgwMDBiLCAweGMxZTAsIDB4MDAwMSwKKwkweGZmZmYsIDB4MDAwOCwgMHgwZWE4LCAweDAwMGIsIDB4ODAxMCwgMHgwMDA4LCAweDAwMTMsIDB4MDAwMCwKKwkweDAyMzMsIDB4MDAwYywgMHg4MDc0LCAweDAwMDAsIDB4MDIwMiwgMHgwMDA4LCAweDAwMGEsIDB4MDAwYiwKKwkweDNhNDAsIDB4MDAwYSwgMHgwZWNlLCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweDAyMDAsIDB4MDAwMCwKKwkweDNkMDAsIDB4MDAwMCwgMHgzY2ZlLCAweDAwMDAsIDB4ODA3MiwgMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwKKwkweDQzZTAsIDB4MDAwMSwgMHgwZWNjLCAweDAwMDMsIDB4NDJmZSwgMHgwMDAwLCAweGZmYzAsIDB4MDAwMSwKKwkweDAwZmYsIDB4MDAwOCwgMHgwMGUwLCAweDAwMDksIDB4MGFhOCwgMHgwMDAzLCAweDBkMDgsIDB4MDAwOCwKKwkweDAzMjEsIDB4MDAwYiwgMHg4MDcyLCAweDAwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDAwMGEsIDB4MDAwYiwKKwkweDAzYTcsIDB4MDAwYywgMHg4MDhjLCAweDAwMDgsIDB4MDAwMSwgMHgwMDAwLCAweDA0ZmUsIDB4MDAwOCwKKwkweDMzOGEsIDB4MDAwMywgMHgwNDYwLCAweDAwMDAsIDB4ODA2MiwgMHgwMDA4LCAweDAwMDEsIDB4MDAwMCwKKwkweDgwNjYsIDB4MDAwMCwgMHgwMDA5LCAweDAwMDgsIDB4NDZkYiwgMHgwMDAzLCAweDAwMDQsIDB4MDAwMCwKKwkweDgwYzAsIDB4MDAwOSwgMHgwMGZmLCAweDAwMDgsIDB4N2YwMCwgMHgwMDAwLCAweDgwZTAsIDB4MDAwMSwKKwkweDAwMDQsIDB4MDAwMCwgMHgwYWY1LCAweDAwMGIsIDB4ODBlMCwgMHgwMDAxLCAweDAwMDUsIDB4MDAwOCwKKwkweDBhZjUsIDB4MDAwYiwgMHg4MGUwLCAweDAwMDEsIDB4MDAwNiwgMHgwMDA4LCAweDBhZjUsIDB4MDAwYiwKKwkweDgyYzAsIDB4MDAwMSwgMHhmZjAwLCAweDAwMDgsIDB4N2YwNCwgMHgwMDA4LCAweDgyZTAsIDB4MDAwOSwKKwkweDA2MDAsIDB4MDAwOCwgMHgwYWY1LCAweDAwMGIsIDB4ODJlMCwgMHgwMDA5LCAweDA1MDAsIDB4MDAwOCwKKwkweDBhZjUsIDB4MDAwYiwgMHg4MmUwLCAweDAwMDksIDB4MDQwMCwgMHgwMDAwLCAweDBmOGEsIDB4MDAwMywKKwkweGM0YzAsIDB4MDAwOSwgMHg3MDAwLCAweDAwMDAsIDB4ZmZlMCwgMHgwMDA5LCAweDEwMDAsIDB4MDAwMCwKKwkweDBiMjEsIDB4MDAwMywgMHgwMzk4LCAweDAwMGMsIDB4Mzk0MSwgMHgwMDAyLCAweDBiMDAsIDB4MDAwMywKKwkweDgwNzIsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4MDAwYSwgMHgwMDBiLCAweDA0NjAsIDB4MDAwMCwKKwkweDgwZmUsIDB4MDAwOCwgMHgwMDJiLCAweDAwMDgsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwKKwkweDIyMDksIDB4MDAwOCwgMHg0NzA2LCAweDAwMGIsIDB4MTFmZSwgMHgwMDAwLCAweDMzMWMsIDB4MDAwMywKKwkweDkxODAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDAsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwKKwkweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDYwOSwgMHgwMDA4LCAweDQ3MTAsIDB4MDAwMywKKwkweDQyZmUsIDB4MDAwMCwgMHhmZmMwLCAweDAwMDEsIDB4ZmYwMCwgMHgwMDA4LCAweDAzZTAsIDB4MDAwOSwKKwkweDBmMTksIDB4MDAwMywgMHg4MDcyLCAweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDAwNDYsIDB4MDAwMywKKwkweDkxODAsIDB4MDAwMSwgMHgwMDAzLCAweDAwMDgsIDB4MDMwMywgMHgwMDBiLCAweDgwNzIsIDB4MDAwMCwKKwkweDA0MDAsIDB4MDAwMCwgMHg4MDEwLCAweDAwMDgsIDB4MDAxMCwgMHgwMDAwLCAweDAzN2IsIDB4MDAwYiwKKwkweDAzOTgsIDB4MDAwYywgMHgzOTQxLCAweDAwMDIsIDB4MGIyNywgMHgwMDAzLCAweDgwNzIsIDB4MDAwMCwKKwkweDA0MDAsIDB4MDAwMCwgMHgwMDBhLCAweDAwMGIsIDB4MTA0MiwgMHgwMDBhLCAweDBiMmMsIDB4MDAwYiwKKwkweDAzNjAsIDB4MDAwNCwgMHgxMWZlLCAweDAwMDAsIDB4MzczMSwgMHgwMDBiLCAweDgwNzIsIDB4MDAwMCwKKwkweDA0MDAsIDB4MDAwMCwgMHg4MDEwLCAweDAwMDgsIDB4MDAwZSwgMHgwMDAwLCAweDAzN2IsIDB4MDAwYiwKKwkweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4MDRmZSwgMHgwMDA4LCAweDM3NDYsIDB4MDAwYiwKKwkweDgwOGMsIDB4MDAwOCwgMHgwMDAwLCAweDAwMDgsIDB4OTE4MCwgMHgwMDAxLCAweDAwMDUsIDB4MDAwOCwKKwkweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDAwOSwgMHgwMDA4LCAweDQ3M2MsIDB4MDAwYiwKKwkweDAwNjAsIDB4MDAwOCwgMHg4MDYyLCAweDAwMDgsIDB4MDAxYiwgMHgwMDA4LCAweDQzMDQsIDB4MDAwOCwKKwkweDQyMDYsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDQxMiwgMHgwMDAwLCAweDQ3NDQsIDB4MDAwYiwKKwkweDAzNWQsIDB4MDAwMywgMHg4MDhjLCAweDAwMDgsIDB4MDAwMSwgMHgwMDAwLCAweDA0NjAsIDB4MDAwMCwKKwkweDgwNjIsIDB4MDAwOCwgMHgwMDJiLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDA2MDksIDB4MDAwOCwKKwkweDQ3NGQsIDB4MDAwYiwgMHg4MDY2LCAweDAwMDAsIDB4MjIwYSwgMHgwMDA4LCAweDQ3NTAsIDB4MDAwYiwKKwkweDQyZmUsIDB4MDAwMCwgMHhmZmMwLCAweDAwMDEsIDB4ZmYwMCwgMHgwMDA4LCAweDdmMDQsIDB4MDAwOCwKKwkweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4OTE4MCwgMHgwMDAxLCAweDAwMDIsIDB4MDAwMCwKKwkweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDQxYSwgMHgwMDA4LCAweDQ3NWMsIDB4MDAwYiwKKwkweDgwNzIsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4MDA0NiwgMHgwMDAzLCAweDgwNjAsIDB4MDAwMCwKKwkweDA0MDAsIDB4MDAwMCwgMHgxMzYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDA0MTEsIDB4MDAwMCwKKwkweDQ3NjUsIDB4MDAwYiwgMHgwMmZlLCAweDAwMDgsIDB4MDNlMCwgMHgwMDA5LCAweDBmNmIsIDB4MDAwMywKKwkweDBkMjIsIDB4MDAwMCwgMHg0MDAwLCAweDAwMGYsIDB4ODI4MCwgMHgwMDA5LCAweDAwMDIsIDB4MDAwMCwKKwkweDEzODAsIDB4MDAwMSwgMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDIyMDksIDB4MDAwOCwKKwkweDQ3NzEsIDB4MDAwYiwgMHgwMjAwLCAweDAwMGEsIDB4ZmZjMCwgMHgwMDAxLCAweDAwMDcsIDB4MDAwMCwKKwkweDdmMDYsIDB4MDAwMCwgMHgxMzYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDA2MGEsIDB4MDAwOCwKKwkweDQ3NzksIDB4MDAwMywgMHg0MDAwLCAweDAwMGYsIDB4M2E0NCwgMHgwMDAyLCAweDBjMGEsIDB4MDAwYiwKKwkweDJmNDQsIDB4MDAwYSwgMHgyZjQ0LCAweDAwMGEsIDB4MGU4MywgMHgwMDBiLCAweDgwOGEsIDB4MDAwOCwKKwkweDAwMDMsIDB4MDAwOCwgMHg4MDc0LCAweDAwMDAsIDB4ZjA4MCwgMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwKKwkweDMwMDAsIDB4MDAwOCwgMHg1Yjg2LCAweDAwMGIsIDB4ODA1NCwgMHgwMDA4LCAweDAwMTksIDB4MDAwMCwKKwkweDAwMGEsIDB4MDAwYiwgMHgzYTQ0LCAweDAwMDIsIDB4MGMwYSwgMHgwMDBiLCAweDgwOGMsIDB4MDAwOCwKKwkweDAwMDAsIDB4MDAwOCwgMHg4MDEwLCAweDAwMDgsIDB4MDAxMSwgMHgwMDA4LCAweDAyMzMsIDB4MDAwYywKKwkweDQyZmUsIDB4MDAwMCwgMHhmZmMwLCAweDAwMDEsIDB4MDBmZiwgMHgwMDA4LCAweDdmMTAsIDB4MDAwOCwKKwkweDAyMzMsIDB4MDAwYywgMHg0MzEwLCAweDAwMDgsIDB4MDI5MiwgMHgwMDBiLCAweDM5NDEsIDB4MDAwMiwKKwkweDBiOWIsIDB4MDAwYiwgMHg0MDAwLCAweDAwMGYsIDB4ODA3MiwgMHgwMDAwLCAweDA0MDQsIDB4MDAwOCwKKwkweDQwMDAsIDB4MDAwZiwgMHg4MDEwLCAweDAwMDgsIDB4MDAxMiwgMHgwMDA4LCAweDAyMzMsIDB4MDAwYywKKwkweDAzNjAsIDB4MDAwNCwgMHgxMTEwLCAweDAwMDAsIDB4MDIzMywgMHgwMDBjLCAweDExZmUsIDB4MDAwMCwKKwkweDM3YTEsIDB4MDAwYiwgMHgwMDBhLCAweDAwMGIsIDB4YzJjMCwgMHgwMDA5LCAweDAwZmYsIDB4MDAwOCwKKwkweDdmMDAsIDB4MDAwMCwgMHhjM2MwLCAweDAwMDEsIDB4ZmYwMCwgMHgwMDA4LCAweDAwZDAsIDB4MDAwOSwKKwkweDBiY2MsIDB4MDAwMywgMHgwZDBhLCAweDAwMDAsIDB4ODU4MCwgMHgwMDAxLCAweDEwMDAsIDB4MDAwMCwKKwkweDdmNjIsIDB4MDAwOCwgMHg4MDYwLCAweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwKKwkweDA4MDksIDB4MDAwMCwgMHg0N2I2LCAweDAwMDMsIDB4MDRmZSwgMHgwMDA4LCAweDMzYzUsIDB4MDAwYiwKKwkweDA0NjAsIDB4MDAwMCwgMHg4MDYyLCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwKKwkweDAyMTEsIDB4MDAwMCwgMHg0N2JlLCAweDAwMGIsIDB4MDFmZSwgMHgwMDA4LCAweDAwZTAsIDB4MDAwOSwKKwkweDBmYzUsIDB4MDAwYiwgMHgwMmZlLCAweDAwMDgsIDB4NDNlMCwgMHgwMDAxLCAweDBiY2IsIDB4MDAwYiwKKwkweDA1MDAsIDB4MDAwMiwgMHg3ZjBhLCAweDAwMDAsIDB4ZmZlMCwgMHgwMDA5LCAweDA4MDAsIDB4MDAwMCwKKwkweDBmYWYsIDB4MDAwYiwgMHgwZDA4LCAweDAwMDgsIDB4NDAwMCwgMHgwMDBmLCAweDQzZmUsIDB4MDAwOCwKKwkweDNlODAsIDB4MDAwMSwgMHhmZmMwLCAweDAwMDEsIDB4N2ZmZiwgMHgwMDAwLCAweDBkNjAsIDB4MDAwMCwKKwkweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsIDB4MDgwOSwgMHgwMDAwLCAweDQ3ZDQsIDB4MDAwYiwKKwkweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsIDB4ODRjMCwgMHgwMDAxLCAweGZmMDAsIDB4MDAwOCwKKwkweDdmNjAsIDB4MDAwYSwgMHg3ZjYwLCAweDAwMGEsIDB4N2Y2MCwgMHgwMDBhLCAweDdmNjAsIDB4MDAwYSwKKwkweDdmNjAsIDB4MDAwYSwgMHg3ZjYwLCAweDAwMGEsIDB4N2Y2MCwgMHgwMDBhLCAweDdmNjAsIDB4MDAwYSwKKwkweGZmODAsIDB4MDAwOSwgMHgxMDAwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwKKwkweDA4MDksIDB4MDAwMCwgMHg0N2U2LCAweDAwMDMsIDB4NDAwMCwgMHgwMDBmLCAweDhkNWIsIDB4ZWFjNCwKKwkweDAwMDEsIDB4MDAwMiwgMHgwMDA0LCAweDAwMDgsIDB4MDAxMCwgMHgwMDIwLCAweDAwNDAsIDB4MDA4MCwKKwkweDAxMDAsIDB4MDIwMCwgMHgwNDAwLCAweDA4MDAsIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAsIDB4ODAwMCwKKwkweDEyYjAKIH07CiAjaWZkZWYgVU5JUVVFX0ZXX05BTUUKLXVuc2lnbmVkIHNob3J0IGZ3MjMwMGlweF9sZW5ndGgwMSA9IDB4ZWUwODsKK3Vuc2lnbmVkIHNob3J0IGZ3MjMwMGlweF9sZW5ndGgwMSA9IDB4ZjA5MTsKICNlbHNlCi11bnNpZ25lZCBzaG9ydCByaXNjX2NvZGVfbGVuZ3RoMDEgPSAweGVlMDg7Cit1bnNpZ25lZCBzaG9ydCByaXNjX2NvZGVfbGVuZ3RoMDEgPSAweGYwOTE7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWwyMzIyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDIzMjIuYwppbmRleCBjODhhMjJjLi4zYzhjYWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDIzMjIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDIzMjIuYwpAQCAtNTIsNiArNTIsMTEgQEAKIAkJLmlzcF9uYW1lCT0gIklTUDIzMjIiLAogCQkuZndfaW5mbwk9IHFsYV9md190YmwsCiAJfSwKKwl7CisJCS5kcnZfbmFtZQk9IHFsYV9kcml2ZXJfbmFtZSwKKwkJLmlzcF9uYW1lCT0gIklTUDYzMjIiLAorCQkuZndfaW5mbwk9IHFsYV9md190YmwsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBxbGEyMzIyX3BjaV90YmxbXSA9IHsKQEAgLTYyLDYgKzY3LDEzIEBACiAJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAogCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmcWxhX2JvYXJkX3RibFswXSwKIAl9LAorCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1FMT0dJQywKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzIyLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZxbGFfYm9hcmRfdGJsWzFdLAorCX0sCiAJezAsIDB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBxbGEyMzIyX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWwyMzIyX2Z3LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDIzMjJfZncuYwppbmRleCBjYjk2OGU3Li41MzU5OWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDIzMjJfZncuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDIzMjJfZncuYwpAQCAtNiw3ICs2LDcgQEAKICAqLwogCiAvKgotICoJRmlybXdhcmUgVmVyc2lvbiAzLjAzLjE4ICgxMjoxNCBTZXAgMjAsIDIwMDUpCisgKglGaXJtd2FyZSBWZXJzaW9uIDMuMDMuMjAgKDE1OjQyIEZlYiAwMSwgMjAwNikKICAqLwogCiAjaWZkZWYgVU5JUVVFX0ZXX05BTUUKQEAgLTE2LDE1ICsxNiwxNSBAQAogI2VuZGlmCiAKICNpZmRlZiBVTklRVUVfRldfTkFNRQotdW5zaWduZWQgY2hhciBmdzIzMjJpcHhfdmVyc2lvbl9zdHJbXSA9IHszLCAzLDE4fTsKK3Vuc2lnbmVkIGNoYXIgZncyMzIyaXB4X3ZlcnNpb25fc3RyW10gPSB7MywgMywyMH07CiAjZWxzZQotdW5zaWduZWQgY2hhciBmaXJtd2FyZV92ZXJzaW9uW10gPSB7MywgMywxOH07Cit1bnNpZ25lZCBjaGFyIGZpcm13YXJlX3ZlcnNpb25bXSA9IHszLCAzLDIwfTsKICNlbmRpZgogCiAjaWZkZWYgVU5JUVVFX0ZXX05BTUUKLSNkZWZpbmUgZncyMzIyaXB4X1ZFUlNJT05fU1RSSU5HICIzLjAzLjE4IgorI2RlZmluZSBmdzIzMjJpcHhfVkVSU0lPTl9TVFJJTkcgIjMuMDMuMjAiCiAjZWxzZQotI2RlZmluZSBGV19WRVJTSU9OX1NUUklORyAiMy4wMy4xOCIKKyNkZWZpbmUgRldfVkVSU0lPTl9TVFJJTkcgIjMuMDMuMjAiCiAjZW5kaWYKIAogI2lmZGVmIFVOSVFVRV9GV19OQU1FCkBAIC0zOCwxMiArMzgsMTIgQEAKICNlbHNlCiB1bnNpZ25lZCBzaG9ydCByaXNjX2NvZGUwMVtdID0geyAKICNlbmRpZgotCTB4MDQ3MCwgMHgwMDAwLCAweDAwMDAsIDB4ZTQyOCwgMHgwMDAwLCAweDAwMDMsIDB4MDAwMywgMHgwMDEyLAorCTB4MDQ3MCwgMHgwMDAwLCAweDAwMDAsIDB4ZTcxOSwgMHgwMDAwLCAweDAwMDMsIDB4MDAwMywgMHgwMDE0LAogCTB4MDEzNywgMHgyMDQzLCAweDRmNTAsIDB4NTk1MiwgMHg0OTQ3LCAweDQ4NTQsIDB4MjAzMiwgMHgzMDMwLAogCTB4MzEyMCwgMHg1MTRjLCAweDRmNDcsIDB4NDk0MywgMHgyMDQzLCAweDRmNTIsIDB4NTA0ZiwgMHg1MjQxLAogCTB4NTQ0OSwgMHg0ZjRlLCAweDIwNDksIDB4NTM1MCwgMHgzMjMzLCAweDMwMzAsIDB4MjA0NiwgMHg2OTcyLAogCTB4NmQ3NywgMHg2MTcyLCAweDY1MjAsIDB4MjA1NiwgMHg2NTcyLCAweDczNjksIDB4NmY2ZSwgMHgyMDMwLAotCTB4MzMyZSwgMHgzMDMzLCAweDJlMzEsIDB4MzgyMCwgMHgyMDIwLCAweDIwMjAsIDB4MjQwMCwgMHgyMGE5LAorCTB4MzMyZSwgMHgzMDMzLCAweDJlMzIsIDB4MzAyMCwgMHgyMDIwLCAweDIwMjAsIDB4MjQwMCwgMHgyMGE5LAogCTB4MDAwZiwgMHgyMDAxLCAweDAwMDAsIDB4NDAwZiwgMHgyMDkxLCAweDIyMDAsIDB4MjBhOSwgMHgwMDBmLAogCTB4MjAwMSwgMHgwMDAwLCAweDQwMGYsIDB4MjA5MSwgMHgyNDAwLCAweDIwYTksIDB4MDAwZiwgMHgyMDAxLAogCTB4MDAwMCwgMHg0MDBmLCAweDIwOTEsIDB4MjYwMCwgMHgyMGE5LCAweDAwMGYsIDB4MjAwMSwgMHgwMDAwLApAQCAtNTIsNjMzMSArNTIsNjQyNCBAQAogCTB4MmMwMCwgMHgyMGE5LCAweDAwMGYsIDB4MjAwMSwgMHgwMDAwLCAweDQwMGYsIDB4MjA5MSwgMHgyZTAwLAogCTB4MjBhOSwgMHgwMDBmLCAweDIwMDEsIDB4MDAwMCwgMHg0MDBmLCAweDIwOTEsIDB4MjAwMCwgMHgyMDAxLAogCTB4MDAwMCwgMHgyMGMxLCAweDAwMDQsIDB4MjBjOSwgMHgxY2ZmLCAweDIwNTksIDB4MDAwMCwgMHgyYjc4LAotCTB4Nzg4MywgMHgwMDA0LCAweDIwODksIDB4MmJjYiwgMHgyMDUxLCAweDE4MDAsIDB4MmE3MCwgMHgyMGUxLAotCTB4MDAwMSwgMHgyMGU5LCAweDAwMDEsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MGU2OCwgMHgwMGY2LAotCTB4Nzg4OCwgMHg5MDA1LCAweDExZjgsIDB4MjA2MSwgMHhjMDAwLCAweDA4MGMsIDB4MjBlMywgMHgxMTcwLAotCTB4MjA3OSwgMHgwMzAwLCAweDA4MGMsIDB4MjBmOSwgMHgyMDYxLCAweGUwMDAsIDB4MDgwYywgMHgyMGUzLAotCTB4MTEyOCwgMHgyMDc5LCAweDAzODAsIDB4MDgwYywgMHgyMGY5LCAweDAwNjAsIDB4MDBmZSwgMHg3ODgzLAorCTB4Nzg4MywgMHgwMDA0LCAweDIwODksIDB4MmJjMiwgMHgyMDUxLCAweDE4MDAsIDB4MmE3MCwgMHgyMGUxLAorCTB4MDAwMSwgMHgyMGU5LCAweDAwMDEsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MGU3NCwgMHgwMGY2LAorCTB4Nzg4OCwgMHg5MDA1LCAweDExZjgsIDB4MjA2MSwgMHhjMDAwLCAweDA4MGMsIDB4MjBjNiwgMHgxMTcwLAorCTB4MjA3OSwgMHgwMzAwLCAweDA4MGMsIDB4MjBkYywgMHgyMDYxLCAweGUwMDAsIDB4MDgwYywgMHgyMGM2LAorCTB4MTEyOCwgMHgyMDc5LCAweDAzODAsIDB4MDgwYywgMHgyMGRjLCAweDAwNjAsIDB4MDBmZSwgMHg3ODgzLAogCTB4NDAxMCwgMHg3ODM3LCAweDQwMTAsIDB4NzgzMywgMHgwMDExLCAweDIwOTEsIDB4NTAwMCwgMHgyMDkxLAogCTB4NDA4MCwgMHgwY2Y4LCAweDAwZmUsIDB4MjAyOSwgMHg1NjAwLCAweDIwMzEsIDB4ZmZmZiwgMHgyMDM5LAogCTB4NTVkYywgMHgyMDIxLCAweDAyMDAsIDB4MjBlOSwgMHgwMDAxLCAweDIwYTEsIDB4MDAwMCwgMHgyMGE5LAogCTB4MDgwMCwgMHg5MDBlLCAweDQxMDQsIDB4MjBlOSwgMHgwMDAxLCAweDIwYTEsIDB4MTAwMCwgMHg5MDBlLAogCTB4MjAwMSwgMHgwZGMxLCAweDkwODQsIDB4MGZmZiwgMHgyMGE4LCAweDQxMDQsIDB4MjAwMSwgMHgwMDAwLAogCTB4OTA4NiwgMHgwMDAwLCAweDAxMjAsIDB4MjFhOCwgMHg0MTA0LCAweDgwMDEsIDB4MWRlMCwgMHg3NTZlLAotCTB4NzY3MiwgMHg3NzZhLCAweDc0NzYsIDB4NzQ3YSwgMHgwMGU2LCAweDIwNzEsIDB4MWI3NCwgMHgyNDcyLAorCTB4NzY3MiwgMHg3NzZhLCAweDc0NzYsIDB4NzQ3YSwgMHgwMGU2LCAweDIwNzEsIDB4MWI3MywgMHgyNDcyLAogCTB4MDBlZSwgMHgyMGExLCAweDFkZGMsIDB4NzE3MCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwgMHg4MTBkLAogCTB4OTE4YywgMHgwMDBmLCAweDIwMDEsIDB4MDAwMSwgMHg5MTEyLCAweDkwMGUsIDB4MjFhOCwgMHg0MTA0LAogCTB4ODIxMSwgMHgxZGUwLCAweDcxNzAsIDB4MzQwMCwgMHg4MDAxLCAweDkxMDIsIDB4MDEyMCwgMHgwMjE4LAogCTB4MjBhOCwgMHg5MDBlLCAweDQxMDQsIDB4MjAwOSwgMHgxODAwLCAweDgxMGQsIDB4ODEwZCwgMHg4MTBkLAogCTB4ODEwZCwgMHg4MTBkLCAweDkxOGMsIDB4MDAxZiwgMHgyMDAxLCAweDAwMDEsIDB4OTExMiwgMHgyMGU5LAogCTB4MDAwMSwgMHgyMGExLCAweDA4MDAsIDB4OTAwZSwgMHgyMGE5LCAweDA4MDAsIDB4NDEwNCwgMHg4MjExLAotCTB4MWRkOCwgMHgwODBjLCAweDBmNjUsIDB4MDgwYywgMHg2MTg2LCAweDA4MGMsIDB4YWVlNCwgMHgwODBjLAotCTB4MTExYywgMHgwODBjLCAweDEzNDYsIDB4MDgwYywgMHgxYzM5LCAweDA4MGMsIDB4OTM4YiwgMHgwODBjLAotCTB4MGQwYiwgMHgwODBjLCAweDEwYTEsIDB4MDgwYywgMHgzNTc0LCAweDA4MGMsIDB4NzliMywgMHgwODBjLAotCTB4NmJmMSwgMHgwODBjLCAweDhhZjYsIDB4MDgwYywgMHg4NzU3LCAweDA4MGMsIDB4MjJkNCwgMHgwODBjLAotCTB4ODA4ZSwgMHgwODBjLCAweDIxMTIsIDB4MDgwYywgMHgyMjUwLCAweDA4MGMsIDB4MjJjOSwgMHgyMDkxLAorCTB4MWRkOCwgMHgwODBjLCAweDBmNzEsIDB4MDgwYywgMHg2MWFiLCAweDA4MGMsIDB4YjEwMiwgMHgwODBjLAorCTB4MTEyOCwgMHgwODBjLCAweDEzNTIsIDB4MDgwYywgMHgxYzFjLCAweDA4MGMsIDB4OTU4MiwgMHgwODBjLAorCTB4MGQxNywgMHgwODBjLCAweDEwYWQsIDB4MDgwYywgMHgzNThlLCAweDA4MGMsIDB4N2FjYSwgMHgwODBjLAorCTB4NmNlYSwgMHgwODBjLCAweDhjNWQsIDB4MDgwYywgMHg4OGJlLCAweDA4MGMsIDB4MjJiZiwgMHgwODBjLAorCTB4ODFmNSwgMHgwODBjLCAweDIwZjUsIDB4MDgwYywgMHgyMjMzLCAweDA4MGMsIDB4MjJiNCwgMHgyMDkxLAogCTB4MzAwOSwgMHg3ODgzLCAweDAwMDAsIDB4MTAwNCwgMHgwOTQzLCAweDc4ODAsIDB4OTA4NiwgMHgwMDAyLAogCTB4MTE5MCwgMHg3ODgzLCAweDQwMDAsIDB4NzgzNywgMHg0MDAwLCAweDc4MzMsIDB4MDAxMCwgMHgwZTA0LAogCTB4MDkzNywgMHgyMDkxLCAweDUwMDAsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LAotCTB4ZDA4NCwgMHgxOTBjLCAweDExZjQsIDB4MjA3MSwgMHgxODAwLCAweDcwMDMsIDB4MDAwMCwgMHg3ODBjLAotCTB4OTA4NCwgMHgwMDMwLCAweDkwODYsIDB4MDAwMCwgMHgxOTBjLCAweDBkNzksIDB4MjA3MSwgMHgxODAwLAotCTB4NzAwMCwgMHg5MDhlLCAweDAwMDMsIDB4MTE2OCwgMHgwODBjLCAweDRjZWQsIDB4MDgwYywgMHgzNTliLAotCTB4MDgwYywgMHg3YTFiLCAweDA4MGMsIDB4NzE3NCwgMHgwODBjLCAweDhiZGQsIDB4MDgwYywgMHg4NzgwLAotCTB4MGM2OCwgMHgwMDBiLCAweDBjODgsIDB4MDk2ZCwgMHgwOTZlLCAweDBiMDksIDB4MDk2YiwgMHgwYmMzLAotCTB4MGQwYSwgMHgwZDBhLCAweDBkMGEsIDB4MDgwYywgMHgwZDc5LCAweDAwMDUsIDB4MDEyNiwgMHgwMGY2LAotCTB4MjA5MSwgMHg4MDAwLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAxLCAweDE5MDQsIDB4MGFkYywgMHgwODBjLAotCTB4MGViOCwgMHgwODBjLCAweDc2OWQsIDB4MDE1MCwgMHgwODBjLCAweDc2YzAsIDB4MTViMCwgMHgyMDc5LAotCTB4MDEwMCwgMHg3ODI4LCAweDkwODUsIDB4MTgwMCwgMHg3ODJhLCAweDA0NzgsIDB4MDgwYywgMHg3NWNjLAotCTB4NzAwMCwgMHg5MDg2LCAweDAwMDEsIDB4MTkwNCwgMHgwYWRjLCAweDcwOTgsIDB4OTA4NiwgMHgwMDI5LAotCTB4MTkwNCwgMHgwYWRjLCAweDA4MGMsIDB4ODc0MCwgMHgwODBjLCAweDg3MzIsIDB4MjAwMSwgMHgwMTYxLAotCTB4MjAwMywgMHgwMDAxLCAweDIwNzksIDB4MDEwMCwgMHgyMDExLCAweGZmZmYsIDB4MDgwYywgMHgyYWRjLAotCTB4N2EyOCwgMHg5Mjk1LCAweDVlMmMsIDB4N2EyYSwgMHgyMDExLCAweDc1MTEsIDB4MDgwYywgMHg4ODJjLAotCTB4MjAxMSwgMHg3NTA0LCAweDA4MGMsIDB4ODkzOCwgMHgyMDExLCAweDVmZGQsIDB4MDgwYywgMHg4ODJjLAotCTB4MjAxMSwgMHg4MDMwLCAweDkwMWUsIDB4NzM5NiwgMHgwNGQwLCAweDA4MGMsIDB4NTg4YSwgMHgyMDc5LAotCTB4MDEwMCwgMHg3ODQ0LCAweDkwMDUsIDB4MTkwNCwgMHgwYWRjLCAweDIwMTEsIDB4NWZkZCwgMHgwODBjLAotCTB4ODgyYywgMHgyMDExLCAweDc1MTEsIDB4MDgwYywgMHg4ODJjLCAweDIwMTEsIDB4NzUwNCwgMHgwODBjLAotCTB4ODkzOCwgMHgyMDAxLCAweDAyNjUsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHg3ODQwLAotCTB4OTA4NCwgMHhmZmZiLCAweDc4NDIsIDB4MjAwMSwgMHgxOWE4LCAweDIwMDQsIDB4OTAwNSwgMHgxMTQwLAotCTB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4MDgwYywgMHg2MTJlLCAweDAwY2UsIDB4MDgwNCwgMHgwYWRjLAotCTB4NzgwZiwgMHgwMDZiLCAweDdhMjgsIDB4MDgwYywgMHg3NmE1LCAweDAxMTgsIDB4OTI5NSwgMHg1ZTJjLAotCTB4MDAxMCwgMHg5Mjk1LCAweDQwMmMsIDB4N2EyYSwgMHgyMDExLCAweDgwMTAsIDB4NzNkOCwgMHgyMDAxLAotCTB4MTlhOSwgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywgMHgyOWE4LCAweDA4MGMsIDB4NGMyOCwgMHg3MjQ4LAotCTB4YzI4NCwgMHg3MjRhLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxYWMsIDB4YzFjYywgMHgyMTAyLAotCTB4MjAwMSwgMHgwMzkwLCAweDIwMDMsIDB4MDQwMCwgMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHhhMmVjLAotCTB4MjAxMSwgMHgwMDA0LCAweDA4MGMsIDB4Y2M0MywgMHgwODBjLCAweGFiMTMsIDB4MDgwYywgMHg2YTc3LAotCTB4MDgwYywgMHg3NjlkLCAweDExMjAsIDB4MDgwYywgMHgyYTA5LCAweDA2MDAsIDB4MDQyMCwgMHgwODBjLAotCTB4NjEzNSwgMHgwMTQwLCAweDcwOTcsIDB4MDAwMSwgMHg3MGQzLCAweDAwMDAsIDB4MDgwYywgMHg1YTU3LAotCTB4MDgwNCwgMHgwYWRjLCAweDIwMDEsIDB4MDM5MCwgMHgyMDAzLCAweDA0MDQsIDB4MDgwYywgMHg1ODIwLAotCTB4ZDA5NCwgMHgwMTg4LCAweDIwMTEsIDB4MTgwYywgMHgyMjA0LCAweGMwY2QsIDB4MjAxMiwgMHgwODBjLAotCTB4NTgyNCwgMHhkMGQ0LCAweDExMTgsIDB4MDgwYywgMHgyYTA5LCAweDEyNzAsIDB4MjAxMSwgMHgxODBjLAotCTB4MjIwNCwgMHhjMGJjLCAweDAwYTgsIDB4MDgwYywgMHg1ODI0LCAweGQwZDQsIDB4MWRiOCwgMHgyMDExLAotCTB4MTgwYywgMHgyMjA0LCAweGMwYmQsIDB4MDA2MCwgMHgyMDExLCAweDE4MGMsIDB4MjIwNCwgMHhjMGJkLAotCTB4MjAxMiwgMHgwODBjLCAweDZiYzUsIDB4MTEyOCwgMHhkMGE0LCAweDAxMTgsIDB4MjIwNCwgMHhjMGZkLAotCTB4MjAxMiwgMHgwODBjLCAweDZiOGIsIDB4MDEyMCwgMHg3YTBjLCAweGMyYjQsIDB4N2EwZSwgMHgwMGE4LAotCTB4NzA3ZiwgMHgwMDAwLCAweDA4MGMsIDB4NzY5ZCwgMHgxMTMwLCAweDcwYjAsIDB4OTAwNSwgMHgxMTY4LAotCTB4MDgwYywgMHhkMGExLCAweDAwNTAsIDB4MDgwYywgMHhkMGExLCAweDcwZGMsIDB4ZDA5YywgMHgxMTI4LAotCTB4NzBiMCwgMHg5MDA1LCAweDAxMTAsIDB4MDgwYywgMHg2MTBiLCAweDcwZTcsIDB4MDAwMCwgMHg3MGUzLAotCTB4MDAwMCwgMHg3MGE3LCAweDAwMDAsIDB4MDgwYywgMHgyYTExLCAweDAyMjgsIDB4MjAxMSwgMHgwMTAxLAotCTB4MjIwNCwgMHhjMGM0LCAweDIwMTIsIDB4NzJkYywgMHgwODBjLCAweDc2OWQsIDB4MTE3OCwgMHg5MDE2LAotCTB4MDAxNiwgMHgwODBjLCAweDI3YjksIDB4MjAxOSwgMHgxOTZlLCAweDIxMWEsIDB4MDAxZSwgMHg3MDVmLAotCTB4ZmZmZiwgMHg3MDYzLCAweDAwZWYsIDB4NzA4MywgMHgwMDAwLCAweDAwMjAsIDB4MjAxOSwgMHgxOTZlLAotCTB4MjAxYiwgMHgwMDAwLCAweDIwNzksIDB4MTg0NywgMHg3ODA0LCAweGQwYWMsIDB4MDEwOCwgMHhjMjk1LAotCTB4NzJkZSwgMHgwODBjLCAweDc2OWQsIDB4MDExOCwgMHg5Mjk2LCAweDAwMDQsIDB4MDUxOCwgMHgyMDExLAotCTB4MDAwMSwgMHgwODBjLCAweGNjNDMsIDB4NzBhYiwgMHgwMDAwLCAweDcwYWYsIDB4ZmZmZiwgMHg3MDAzLAotCTB4MDAwMiwgMHgwMGZlLCAweDA4MGMsIDB4MzBjOCwgMHgwODBjLCAweGFhZjcsIDB4MjAxMSwgMHgwMDA1LAotCTB4MDgwYywgMHhhNDI2LCAweDA4MGMsIDB4YWIxMywgMHgwODBjLCAweDc2OWQsIDB4MDE0OCwgMHgwMGM2LAotCTB4MjA2MSwgMHgwMTAwLCAweDAwMTYsIDB4MDgwYywgMHgyN2I5LCAweDYxZTIsIDB4MDAxZSwgMHgwMGNlLAotCTB4MDEyZSwgMHgwMGUwLCAweDcwYWIsIDB4MDAwMCwgMHg3MGFmLCAweGZmZmYsIDB4NzAwMywgMHgwMDAyLAotCTB4MDgwYywgMHhhYWY3LCAweDIwMTEsIDB4MDAwNSwgMHgwODBjLCAweGE0MjYsIDB4MDgwYywgMHhhYjEzLAotCTB4MDgwYywgMHg3NjlkLCAweDAxNDgsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4MDAxNiwgMHgwODBjLAotCTB4MjdiOSwgMHg2MWUyLCAweDAwMWUsIDB4MDBjZSwgMHgwMGZlLCAweDAxMmUsIDB4MDAwNSwgMHgwMGM2LAotCTB4MDBiNiwgMHgwODBjLCAweDc2OWQsIDB4MTExOCwgMHgyMGE5LCAweDA4MDAsIDB4MDAxMCwgMHgyMGE5LAotCTB4MDc4MiwgMHgwODBjLCAweDc2OWQsIDB4MTExMCwgMHg5MDBlLCAweDAwMTAsIDB4MjAwOSwgMHgwMDdlLAotCTB4ODZmZiwgMHgwMTM4LCAweDkxODAsIDB4MTAwMCwgMHgyMDA0LCAweDkwNWQsIDB4MDExMCwgMHhiODAwLAotCTB4ZDBiYywgMHgwOTBjLCAweDM0MDQsIDB4ODEwOCwgMHgxZjA0LCAweDBhZjAsIDB4NzA3ZiwgMHgwMDAwLAotCTB4NzA4MCwgMHg5MDg0LCAweDAwZmYsIDB4NzA4MiwgMHg3MGIzLCAweDAwMDAsIDB4MDBiZSwgMHgwMGNlLAotCTB4MDAwNSwgMHgwMGI2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAyLAotCTB4MTkwNCwgMHgwYmMwLCAweDcwYWMsIDB4OTA4NiwgMHhmZmZmLCAweDAxMjAsIDB4MDgwYywgMHgzMGM4LAotCTB4MDgwNCwgMHgwYmMwLCAweDcwZGMsIDB4ZDBhYywgMHgxMTEwLCAweGQwOWMsIDB4MDUzOCwgMHhkMDg0LAotCTB4MDUyOCwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMywgMHgyMDAzLCAweDAwMmIsIDB4MDAwZSwgMHhkMDhjLAotCTB4MDFlOCwgMHgwODBjLCAweDM0NmQsIDB4MTFiMCwgMHg3MGUwLCAweDkwODYsIDB4ZmZmZiwgMHgwMTkwLAotCTB4MDgwYywgMHgzMjYxLCAweDcwZGMsIDB4ZDA5NCwgMHgxOTA0LCAweDBiYzAsIDB4MjAxMSwgMHgwMDAxLAotCTB4MDgwYywgMHhkMzVkLCAweDAxMTAsIDB4MjAxMSwgMHgwMDAzLCAweDkwMWUsIDB4MDgwYywgMHgzMjliLAotCTB4MDgwNCwgMHgwYmMwLCAweDcwZTQsIDB4OTAwNSwgMHgxOTA0LCAweDBiYzAsIDB4NzBhOCwgMHg5MDA1LAotCTB4MTkwNCwgMHgwYmMwLCAweDcwZGMsIDB4ZDBhNCwgMHgwMTE4LCAweGQwYjQsIDB4MDkwNCwgMHgwYmMwLAotCTB4MDgwYywgMHg2YjhiLCAweDE5MDQsIDB4MGJjMCwgMHgwODBjLCAweDZiZGUsIDB4MTkwNCwgMHgwYmMwLAotCTB4MDgwYywgMHg2YmM1LCAweDAxYzAsIDB4MDE1NiwgMHgwMGM2LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLAotCTB4MDAxNiwgMHgwODBjLCAweDY3ODMsIDB4MTExOCwgMHhiODAwLCAweGQwZWMsIDB4MTEzOCwgMHgwMDFlLAotCTB4ODEwOCwgMHgxZjA0LCAweDBiNjAsIDB4MDBjZSwgMHgwMTVlLCAweDAwMjgsIDB4MDAxZSwgMHgwMGNlLAotCTB4MDE1ZSwgMHgwODA0LCAweDBiYzAsIDB4MDAwNiwgMHgyMDAxLCAweDAxMDMsIDB4MjAwMywgMHgwMDJiLAotCTB4MDAwZSwgMHgyMDExLCAweDE5YjUsIDB4MDgwYywgMHgwZmQ1LCAweDIwMTEsIDB4MTljZiwgMHgwODBjLAotCTB4MGZkNSwgMHg3MDMwLCAweGMwOGMsIDB4NzAzMiwgMHg3MDAzLCAweDAwMDMsIDB4NzBhZiwgMHhmZmZmLAotCTB4MDgwYywgMHgwZThjLCAweDkwMDYsIDB4MDgwYywgMHgyNjQ2LCAweDA4MGMsIDB4MzQ2ZCwgMHgwMTE4LAotCTB4MDgwYywgMHg0ZGM1LCAweDAwNTAsIDB4MDAzNiwgMHgwMDQ2LCAweDIwMTksIDB4ZmZmZiwgMHgyMDIxLAotCTB4MDAwNiwgMHgwODBjLCAweDRkZGYsIDB4MDA0ZSwgMHgwMDNlLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLAotCTB4MDgwYywgMHg3NmMwLCAweDAxNTAsIDB4MDgwYywgMHg3NjlkLCAweDc4MjgsIDB4MDExOCwgMHg5MDg0LAotCTB4ZTFmZiwgMHgwMDEwLCAweDkwODQsIDB4ZmZkZiwgMHg3ODJhLCAweDAwZmUsIDB4MDgwYywgMHhhYWY3LAotCTB4MjAwMSwgMHgxOWVhLCAweDIwMDQsIDB4OTA4NiwgMHgwMDA1LCAweDExMjAsIDB4MjAxMSwgMHgwMDAwLAotCTB4MDgwYywgMHhhNDI2LCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweGE0MzAsIDB4MDgwYywgMHhhYjEzLAotCTB4MDEyZSwgMHgwMGJlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwNDYsIDB4MDBmNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDEwMCwgMHg3OTA0LCAweDkxOGMsIDB4ZmZmZCwgMHg3OTA2LAotCTB4MjAwOSwgMHgwMGY3LCAweDA4MGMsIDB4NjBmNCwgMHg3OTQwLCAweDkxOGMsIDB4MDAxMCwgMHg3OTQyLAotCTB4NzkyNCwgMHhkMWI0LCAweDAxMjAsIDB4MjAxMSwgMHgwMDQwLCAweDA4MGMsIDB4MmFkYywgMHhkMTljLAotCTB4MDEyMCwgMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHgyYWRjLCAweDAwMDYsIDB4MDAzNiwgMHgwMTU2LAotCTB4MDAwMCwgMHgyMDAxLCAweDE5YTksIDB4MjAwNCwgMHg5MDA1LCAweDE1MTgsIDB4MDgwYywgMHgyYTcwLAotCTB4MTE0OCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyOWQ3LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MjliYSwgMHgwMGI4LCAweDA4MGMsIDB4MmE3OCwgMHgxMTM4LCAweDkwMDYsIDB4MDgwYywgMHgyOWQ3LAotCTB4OTAwNiwgMHgwODBjLCAweDI5YmEsIDB4MDA2OCwgMHgwODBjLCAweDJhODAsIDB4MWQ1MCwgMHgyMDAxLAotCTB4MTk5OSwgMHgyMDA0LCAweGQwZmMsIDB4MDEwOCwgMHgwMDIwLCAweDA4MGMsIDB4MjdlNSwgMHgwODA0LAotCTB4MGNiZCwgMHgyMGE5LCAweDAwM2EsIDB4MWQwNCwgMHgwYzEzLCAweDA4MGMsIDB4ODkxOCwgMHgxZjA0LAotCTB4MGMxMywgMHgwODBjLCAweDc2YWUsIDB4MDE0OCwgMHgwODBjLCAweDc2YzAsIDB4MTExOCwgMHgwODBjLAotCTB4NzlhZSwgMHgwMDUwLCAweDA4MGMsIDB4NzZhNSwgMHgwZGQwLCAweDA4MGMsIDB4NzlhOSwgMHgwODBjLAotCTB4Nzk5ZiwgMHgwODBjLCAweDc1Y2MsIDB4MDAyMCwgMHgyMDA5LCAweDAwZjgsIDB4MDgwYywgMHg2MGY0LAotCTB4Nzg1MCwgMHhjMGU1LCAweDc4NTIsIDB4MDgwYywgMHg3NjlkLCAweDAxMjAsIDB4Nzg0MywgMHgwMDkwLAotCTB4Nzg0MywgMHgwMDEwLCAweDIwMjEsIDB4ZTY3OCwgMHgyMDE5LCAweGVhNjAsIDB4MGQwYywgMHg4OTE4LAotCTB4NzgyMCwgMHhkMDljLCAweDE1YTAsIDB4MDgwYywgMHg3NjlkLCAweDA5MDQsIDB4MGM5ZiwgMHg3ODI0LAotCTB4ZDBhYywgMHgxOTA0LCAweDBjYzIsIDB4MDgwYywgMHg3NmMwLCAweDE1NDgsIDB4MDA0NiwgMHgyMDIxLAotCTB4MDMyMCwgMHg4NDIxLCAweDFkZjAsIDB4MDA0ZSwgMHgyMDExLCAweDE4MDAsIDB4MDgwYywgMHgyYWRjLAotCTB4MDgwYywgMHgyYTg4LCAweDc4MjQsIDB4OTA4NCwgMHgxODAwLCAweDExNjgsIDB4OTQ4NCwgMHgwZmZmLAotCTB4MTE0MCwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHg5MDg0LCAweDkwMDAsIDB4MDExMCwgMHgwODBjLAotCTB4MGNlNSwgMHg4NDIxLCAweDExNjAsIDB4MWQwNCwgMHgwYzZmLCAweDA4MGMsIDB4ODkxOCwgMHgwODBjLAotCTB4NzlhOSwgMHgwODBjLCAweDc5OWYsIDB4NzAwMywgMHgwMDAxLCAweDA4MDQsIDB4MGNjMiwgMHg4MzE5LAotCTB4MTkyOCwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHg5MDg0LCAweDkwMDAsIDB4MDExMCwgMHgwODBjLAotCTB4MGNlNSwgMHgxZDA0LCAweDBjODUsIDB4MDgwYywgMHg4OTE4LCAweDIwMDksIDB4MTk5YywgMHgyMTA0LAotCTB4OTAwNSwgMHgwMTE4LCAweDgwMDEsIDB4MjAwYSwgMHgxMTg4LCAweDIwMGIsIDB4MDAwYSwgMHgyMDExLAotCTB4MDA0OCwgMHgwODBjLCAweDJhZGMsIDB4MjBhOSwgMHgwMDAyLCAweDA4MGMsIDB4MmE2OSwgMHg3OTI0LAotCTB4MDgwYywgMHgyYTg4LCAweGQxOWMsIDB4MDExMCwgMHgwODBjLCAweDI5YTgsIDB4MDBmMCwgMHgwODBjLAotCTB4NzZhZSwgMHgxMTQwLCAweDk0YTIsIDB4MDNlOCwgMHgxMTI4LCAweDA4MGMsIDB4NzY3MSwgMHg3MDAzLAotCTB4MDAwMSwgMHgwMGMwLCAweDIwMTEsIDB4MTgwMCwgMHgwODBjLCAweDJhZGMsIDB4MDgwYywgMHgyYTg4LAotCTB4NzgyNCwgMHgwODBjLCAweDc2YjcsIDB4MDExMCwgMHhkMGFjLCAweDExNjAsIDB4OTA4NCwgMHgxODAwLAotCTB4MDkwNCwgMHgwYzc3LCAweDcwMDMsIDB4MDAwMSwgMHgwMDI4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MjY0NiwgMHgwMGEwLCAweDc4NTAsIDB4YzBlNCwgMHg3ODUyLCAweDIwMDksIDB4MTgwYywgMHgyMTBjLAotCTB4ZDE5YywgMHgxMTIwLCAweDc5MDQsIDB4OTE4ZCwgMHgwMDAyLCAweDc5MDYsIDB4MjAxMSwgMHgwMDQ4LAotCTB4MDgwYywgMHgyYWRjLCAweDc4MjgsIDB4OTA4NSwgMHgwMDI4LCAweDc4MmEsIDB4MjAwMSwgMHgxOWE5LAotCTB4MjAwMywgMHgwMDAwLCAweDkwMDYsIDB4NzhmMiwgMHgwMTVlLCAweDAwM2UsIDB4MDAwZSwgMHgwMTJlLAotCTB4MDBmZSwgMHgwMDRlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LAotCTB4MDAzNiwgMHgwMDQ2LCAweDAwYjYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwMTU2LAotCTB4MDA3MSwgMHgwZDBjLCAweDg5MTgsIDB4MDE1ZSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLAotCTB4MDBiZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LAotCTB4MjA3MSwgMHgxODllLCAweDcwMDQsIDB4OTA4NiwgMHgwMDAxLCAweDExMTAsIDB4MDgwYywgMHgzNTliLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwMDUsIDB4MmE3MCwgMHgyMDYxLCAweDE5YWQsIDB4MjA2MywgMHgwMDAzLAotCTB4NjAwNywgMHgwMDAzLCAweDYwMGIsIDB4MDAxMiwgMHg2MDBmLCAweDAxMzcsIDB4MjAwMSwgMHgxOTdkLAotCTB4OTAwZSwgMHgyMTAyLCAweDcxOTYsIDB4MjAwMSwgMHgwMTAwLCAweDIwMDQsIDB4OTA4MiwgMHgwMDAyLAotCTB4MDIxOCwgMHg3MDVmLCAweGZmZmYsIDB4MDAwOCwgMHg3MTVlLCAweDcwNjcsIDB4ZmZmZiwgMHg3MTdlLAotCTB4NzE4MiwgMHgwODBjLCAweGQwYTEsIDB4NzBlZiwgMHgwMGMwLCAweDIwNjEsIDB4MTk2ZCwgMHg2MDAzLAotCTB4MDkwOSwgMHg2MTA2LCAweDYwMGIsIDB4ODgwMCwgMHg2MDBmLCAweDAyMDAsIDB4NjAxMywgMHgwMGZmLAotCTB4NjAxNywgMHgwMDFmLCAweDYxMWEsIDB4NjAxZiwgMHgwN2QwLCAweDIwNjEsIDB4MTk3NSwgMHg2MDAzLAotCTB4ODAwMCwgMHg2MTA2LCAweDYxMGEsIDB4NjAwZiwgMHgwMjAwLCAweDYwMTMsIDB4MDBmZiwgMHg2MTE2LAotCTB4NjAxYiwgMHgwMDAxLCAweDYxMWUsIDB4MjA2MSwgMHgxOThhLCAweDYwMDMsIDB4NTE0YywgMHg2MDA3LAotCTB4NGY0NywgMHg2MDBiLCAweDQ5NDMsIDB4NjAwZiwgMHgyMDIwLCAweDIwMDEsIDB4MTgyYywgMHgyMTAyLAotCTB4MDAwNSwgMHg5MDE2LCAweDA4MGMsIDB4Njc4MywgMHgxMTc4LCAweGI4MDQsIDB4OTBjNCwgMHgwMGZmLAotCTB4OThjNiwgMHgwMDA2LCAweDAxMjgsIDB4OTBjNCwgMHhmZjAwLCAweDk4YzYsIDB4MDYwMCwgMHgxMTIwLAotCTB4OTE4NiwgMHgwMDgwLCAweDAxMDgsIDB4ODIxMCwgMHg4MTA4LCAweDkxODYsIDB4MDgwMCwgMHgxZDUwLAotCTB4MjIwOCwgMHgwMDA1LCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAwMDAsIDB4MDAwZSwgMHgwMGY2LAotCTB4MDAxMCwgMHgyMDkxLCAweDgwMDAsIDB4MGUwNCwgMHgwZDdiLCAweDAwMDYsIDB4MDAxNiwgMHgyMDAxLAotCTB4ODAwMiwgMHgwMDA2LCAweDIwNzksIDB4MDAwMCwgMHgwMDBlLCAweDc4ODIsIDB4NzgzNiwgMHgwMDFlLAotCTB4Nzk4ZSwgMHgwMDBlLCAweDc4OGEsIDB4MDAwZSwgMHg3ODg2LCAweDM5MDAsIDB4Nzg5YSwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMzAwLCAweDY4MTgsIDB4NzhhZSwgMHg2ODFjLCAweDc4YjIsIDB4NjgwOCwgMHg3OGJlLAotCTB4MDBkZSwgMHg3ODMzLCAweDAwMTIsIDB4MjA5MSwgMHg1MDAwLCAweDAxNTYsIDB4MDBkNiwgMHgwMDM2LAotCTB4MDAyNiwgMHgyMDc5LCAweDAzMDAsIDB4MjA2OSwgMHgxYjJjLCAweDdhMDgsIDB4MjI2YSwgMHgyMDY5LAotCTB4MWIyZCwgMHg3YTE4LCAweDIyNmEsIDB4OGQ2OCwgMHg3YTFjLCAweDIyNmEsIDB4NzgyYywgMHgyMDE5LAotCTB4MWIzYSwgMHgyMDFhLCAweDIwMTksIDB4MWIzZCwgMHg5MDE2LCAweDc4MDgsIDB4ZDA5YywgMHgwMTY4LAotCTB4NzgyMCwgMHgyMDFhLCAweDgyMTAsIDB4ODMxOCwgMHg5Mzg2LCAweDFiNTYsIDB4MDEwOCwgMHgwY2E4LAotCTB4NzgwOCwgMHhkMDljLCAweDAxMTAsIDB4MjAxMSwgMHhkZWFkLCAweDIwMTksIDB4MWIzYiwgMHg3ODJjLAotCTB4MjAxYSwgMHg4MzE4LCAweDIyMWEsIDB4NzgwMywgMHgwMDAwLCAweDIwNjksIDB4MWE4MiwgMHg5MDFlLAotCTB4MjBhOSwgMHgwMDIwLCAweDdiMjYsIDB4N2EyOCwgMHgyMjZhLCAweDhkNjgsIDB4ODMxOCwgMHgxZjA0LAotCTB4MGRkMiwgMHgyMDY5LCAweDFhYTIsIDB4MjAxOSwgMHgwMDUwLCAweDIwYTksIDB4MDAyMCwgMHg3YjI2LAotCTB4N2EyOCwgMHgyMjZhLCAweDhkNjgsIDB4ODMxOCwgMHgxZjA0LCAweDBkZGYsIDB4MDQ5MSwgMHgwMDJlLAotCTB4MDAzZSwgMHgwMGRlLCAweDAxNWUsIDB4MjA3OSwgMHgxODAwLCAweDc4MDMsIDB4MDAwNSwgMHgyMDkxLAotCTB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDAxODAsIDB4MjAwMSwgMHgxYTI2LAotCTB4MjAwNCwgMHg5MDA1LCAweDAxMjgsIDB4MjAwMSwgMHgwMDhiLCAweDIwMDQsIDB4ZDBmYywgMHgwZGQ4LAotCTB4MjAwMSwgMHgwMDhhLCAweDIwMDMsIDB4MDAwMiwgMHgyMDAzLCAweDEwMDEsIDB4MDgwYywgMHg1ODJmLAotCTB4MTE3MCwgMHgwODBjLCAweDBmMjYsIDB4MDExMCwgMHgwODBjLCAweDBlNzksIDB4MDgwYywgMHg1ODJmLAotCTB4MTEzMCwgMHgyMDcxLCAweDE4MDAsIDB4MjAxMSwgMHg4MDAwLCAweDA4MGMsIDB4MGYzYSwgMHgwYzcwLAotCTB4MDAwNSwgMHgyMDAxLCAweDAzODIsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDcsIDB4OTA4NiwgMHgwMDAxLAotCTB4MTEyMCwgMHgyMDAxLCAweDAwMTUsIDB4MDgwYywgMHhhYWU4LCAweDIwNzksIDB4MDM4MCwgMHgyMDY5LAotCTB4MWIwYywgMHg3ODE4LCAweDY4MDIsIDB4NzgxYywgMHg2ODA2LCAweDc4NDAsIDB4NjgwYSwgMHg3ODQ0LAotCTB4NjgwZSwgMHg3ODJjLCAweDY4MTIsIDB4MjAxOSwgMHgxYjE3LCAweDkwMTYsIDB4NzgwOCwgMHhkMDljLAotCTB4MDE1MCwgMHg3ODIwLCAweDIwMWEsIDB4ODIxMCwgMHg4MzE4LCAweDgyMTAsIDB4OTI4MiwgMHgwMDExLAotCTB4MGVhOCwgMHgyMDExLCAweGRlYWQsIDB4NmEyYSwgMHg3ODMwLCAweDY4MWEsIDB4NzgzNCwgMHg2ODFlLAotCTB4NzgzOCwgMHg2ODIyLCAweDc4M2MsIDB4NjgyNiwgMHg3ODAzLCAweDAwMDAsIDB4MjA2OSwgMHgxYWNjLAotCTB4OTAxZSwgMHgyMGE5LCAweDAwMjAsIDB4N2IyNiwgMHg3ODI4LCAweDIwNmEsIDB4OGQ2OCwgMHg4MzE4LAotCTB4MWYwNCwgMHgwZTUzLCAweDIwNjksIDB4MWFlYywgMHgyMDE5LCAweDAwYjAsIDB4MjBhOSwgMHgwMDIwLAotCTB4N2IyNiwgMHg3ODI4LCAweDIwNmEsIDB4OGQ2OCwgMHg4MzE4LCAweDFmMDQsIDB4MGU2MCwgMHgwMDA1LAotCTB4OTE4YywgMHgwM2ZmLCAweDIwMDEsIDB4MDAwMywgMHgyMDA0LCAweDkwODQsIDB4MDYwMCwgMHgxMTE4LAotCTB4OTE4ZCwgMHg2YzAwLCAweDAwMTAsIDB4OTE4ZCwgMHg2NDAwLCAweDIwMDEsIDB4MDE3ZiwgMHgyMTAyLAotCTB4MDAwNSwgMHgwMDI2LCAweDAxMjYsIDB4MjAxMSwgMHgwMDgwLCAweDA4MGMsIDB4MGYxOCwgMHgyMGE5LAotCTB4MDkwMCwgMHgwODBjLCAweDBmNGUsIDB4MjAxMSwgMHgwMDQwLCAweDA4MGMsIDB4MGYxOCwgMHgyMGE5LAotCTB4MDkwMCwgMHgwODBjLCAweDBmNGUsIDB4MGM3OCwgMHgwMDI2LCAweDA4MGMsIDB4MGYyNiwgMHgxMTg4LAotCTB4MjAxMSwgMHgwMTBlLCAweDIyMTQsIDB4OTI5NCwgMHgwMDA3LCAweDkyOTYsIDB4MDAwNywgMHgwMTE4LAotCTB4MjAxMSwgMHgwOTQ3LCAweDAwMTAsIDB4MjAxMSwgMHgxYjQ3LCAweDA4MGMsIDB4MGYzYSwgMHgwMDJlLAotCTB4MDAwNSwgMHgyMDExLCAweDAxMGUsIDB4MjIxNCwgMHg5Mjk0LCAweDAwMDcsIDB4OTI5NiwgMHgwMDA3LAotCTB4MDExOCwgMHgyMDExLCAweGE4ODAsIDB4MDAxMCwgMHgyMDExLCAweDY4NDAsIDB4ZDBlNCwgMHg3MGYzLAotCTB4MDAwMCwgMHgxMTIwLCAweDcwZjMsIDB4MGZhMCwgMHgwODBjLCAweDBmMmIsIDB4MDAyZSwgMHgwMDA1LAotCTB4MDAyNiwgMHgwODBjLCAweDBmMjYsIDB4MDE0OCwgMHhkMGE0LCAweDExMzgsIDB4MjAxMSwgMHhjZGQ1LAotCTB4MDAxMCwgMHgyMDExLCAweDAwODAsIDB4MDgwYywgMHgwZjJiLCAweDAwMmUsIDB4MDAwNSwgMHgwMDI2LAotCTB4NzBmMywgMHgwMDAwLCAweDA4MGMsIDB4MGYyNiwgMHgxMTMwLCAweDIwMTEsIDB4ODA0MCwgMHgwODBjLAotCTB4MGYzYSwgMHgwMDJlLCAweDAwMDUsIDB4MDgwYywgMHgyYTgwLCAweDExMTgsIDB4MjAxMSwgMHhjZGM1LAotCTB4MDAxMCwgMHgyMDExLCAweGNhYzIsIDB4MDgwYywgMHgwZjJiLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LAotCTB4MDAxNiwgMHgwMDA2LCAweDIwNzEsIDB4MTgwMCwgMHhkMGI0LCAweDcwZWMsIDB4NzFlOCwgMHgxMTE4LAotCTB4YzBlNCwgMHhjMWY0LCAweDAwNTAsIDB4MDAwNiwgMHgzYjAwLCAweDkwODQsIDB4ZmYzZSwgMHgyMGQ4LAotCTB4MDAwZSwgMHg3MGYzLCAweDAwMDAsIDB4YzBlNSwgMHhjMWY1LCAweDAwOTksIDB4MDAwZSwgMHgwMDFlLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweGQwZTQsIDB4NzBlYywgMHgxMTEwLAotCTB4YzBkYywgMHgwMDA4LCAweGMwZGQsIDB4MDAxNiwgMHg3MWU4LCAweDAwMTksIDB4MDAxZSwgMHgwMGVlLAotCTB4MDAwNSwgMHg3MGVlLCAweDcxZWEsIDB4NzAwMCwgMHg5MDg0LCAweDAwMDcsIDB4MDAwYiwgMHgwMDA1LAotCTB4MGVkZSwgMHgwZWI4LCAweDBlYjgsIDB4MGU4YywgMHgwZWM3LCAweDBlYjgsIDB4MGViOCwgMHgwZWM3LAotCTB4YzI4NCwgMHgwMDE2LCAweDNiMDgsIDB4M2EwMCwgMHg5MTA0LCAweDkxOGQsIDB4MDBjMSwgMHgyMWQ4LAotCTB4OTA4NCwgMHhmZjNlLCAweDkyMDUsIDB4MjBkMCwgMHgwMDFlLCAweDAwMDUsIDB4MjAwMSwgMHgxODNiLAotCTB4MjAwNCwgMHhkMGRjLCAweDAwMDUsIDB4OWU4NiwgMHgxODAwLCAweDE5MGMsIDB4MGQ3OSwgMHg3MGVjLAotCTB4ZDBlNCwgMHgwMTA4LCAweGMyZTUsIDB4NzJlZSwgMHhkMGU0LCAweDExMTgsIDB4OTI5NCwgMHgwMGMxLAotCTB4MDhmOSwgMHgwMDA1LCAweDllODYsIDB4MTgwMCwgMHgxOTBjLCAweDBkNzksIDB4NzBlOCwgMHhkMGY0LAotCTB4MDEwOCwgMHhjMmY1LCAweDcyZWEsIDB4ZDBmNCwgMHgxMTQwLCAweDkyODQsIDB4ODAwMCwgMHg4MDA1LAotCTB4YzI4NCwgMHg5MjE1LCAweDkyOTQsIDB4MDBjMSwgMHgwODYxLCAweDAwMDUsIDB4MWQwNCwgMHgwZjRlLAotCTB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4MGY0ZSwgMHgwMDA1LCAweDg5MGUsIDB4ODEwZSwgMHg4MTBmLAotCTB4OTE5NCwgMHgwMDNmLCAweDkxOGMsIDB4ZmZjMCwgMHgwMDA1LCAweDAwMDYsIDB4MjIwMCwgMHg5MTRkLAotCTB4ODk0ZiwgMHg4OTRkLCAweDg5NGQsIDB4MDAwZSwgMHgwMDA1LCAweDAxZDYsIDB4MDE0NiwgMHgwMDM2LAotCTB4MDA5NiwgMHgyMDYxLCAweDE4OGQsIDB4NjAwYiwgMHgwMDAwLCAweDYwMGYsIDB4MDAwMCwgMHg2MDAzLAotCTB4MDAwMCwgMHg2MDA3LCAweDAwMDAsIDB4MjAwOSwgMHhmZmMwLCAweDIxMDUsIDB4MDAwNiwgMHgyMDAxLAotCTB4YWFhYSwgMHgyMDBmLCAweDIwMTksIDB4NTU1NSwgMHg5MDE2LCAweDIwNDksIDB4MGJmZiwgMHhhYjAyLAotCTB4YTAwMSwgMHhhMDAxLCAweGE4MDAsIDB4OTMwNiwgMHgxMTM4LCAweDIxMDUsIDB4OTMwNiwgMHgwMTIwLAotCTB4ODIxMCwgMHg5OWM4LCAweDA0MDAsIDB4MGM5OCwgMHgwMDBlLCAweDIwMGYsIDB4MjAwMSwgMHgxODlkLAotCTB4OTI4YSwgMHgwMDBlLCAweDE2MzgsIDB4OTI4YSwgMHgwMDA2LCAweDIwMTEsIDB4MDAwNiwgMHgxMjEwLAotCTB4MjAxMSwgMHgwMDAwLCAweDIyMDIsIDB4OTAwNiwgMHgyMDA4LCAweDgyZmYsIDB4MDFiMCwgMHg4MjAwLAotCTB4NjAwYSwgMHg2MDBmLCAweGZmZmYsIDB4NjAwMywgMHgwMDAyLCAweDYwMDcsIDB4MDAwMCwgMHgwMDI2LAotCTB4MjAxOSwgMHgwMDEwLCAweDkyODAsIDB4MDAwMSwgMHgyMGU4LCAweDIxYTAsIDB4MjFhOCwgMHg0MTA0LAotCTB4ODMxOSwgMHgxZGUwLCAweDgyMTEsIDB4MWRhMCwgMHgwMDJlLCAweDAwOWUsIDB4MDAzZSwgMHgwMTRlLAotCTB4MDFkZSwgMHgwMDA1LCAweDIwMTEsIDB4MDAwZSwgMHgwOGU4LCAweDAwMTYsIDB4MDAyNiwgMHgwMDk2LAotCTB4MzM0OCwgMHgwODBjLCAweDBmNTUsIDB4MjEwMCwgMHg5MzAwLCAweDIwOTgsIDB4MjJlMCwgMHgwMDllLAotCTB4MDAyZSwgMHgwMDFlLCAweDAwMzYsIDB4MzUxOCwgMHgyMGE5LCAweDAwMDEsIDB4NDAwMiwgMHg4MDA3LAotCTB4NDAwNCwgMHg4MzE5LCAweDFkZDgsIDB4MDAzZSwgMHgwMDA1LCAweDIwZTksIDB4MDAwMSwgMHg3MWI4LAotCTB4ODFmZiwgMHgxMWMwLCAweDkwMDYsIDB4MjAwOSwgMHgwMjAwLCAweDIwYTksIDB4MDAwMiwgMHg5Mjk4LAotCTB4MDAxOCwgMHgyM2EwLCAweDQwMDEsIDB4MjAwOSwgMHgwNzAwLCAweDIwYTksIDB4MDAwMiwgMHg5Mjk4LAotCTB4MDAwOCwgMHgyM2EwLCAweDQwMDEsIDB4NzA3YywgMHg4MDA3LCAweDcxODAsIDB4ODEwZiwgMHgyMGE5LAotCTB4MDAwMiwgMHg0MDAxLCAweDkyOTgsIDB4MDAwYywgMHgyM2EwLCAweDkwMGUsIDB4MDgwYywgMHgwZDU5LAotCTB4MjAwMSwgMHgwMDAwLCAweDgxMGYsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDEsIDB4MDAwNSwgMHg4OWZmLAotCTB4MDE0MCwgMHhhODA0LCAweGE4MDcsIDB4MDAwMCwgMHgwMDA2LCAweDA4MGMsIDB4MTA3ZiwgMHgwMDllLAotCTB4MGNiMCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4MTBmOCwgMHgwOTBjLAotCTB4MGQ3OSwgMHgwMGVlLCAweDAwMDUsIDB4MDA4NiwgMHgwMGU2LCAweDAwMDYsIDB4MDAyNiwgMHgwMDM2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjOSwgMHgyMDcxLCAweDE4MDAsIDB4NzNjMCwgMHg3MDJjLAotCTB4OTAxNiwgMHg5MDQ1LCAweDAxNTgsIDB4ODIxMCwgMHg5OTA2LCAweDA5MGMsIDB4MGQ3OSwgMHgyMzAwLAotCTB4OTIwMiwgMHgwMTIwLCAweDFhMGMsIDB4MGQ3OSwgMHhhMDAwLCAweDBjOTgsIDB4MDEyZSwgMHgwMDNlLAotCTB4MDAyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDA4ZSwgMHgwMDA1LCAweDAwODYsIDB4MDBlNiwgMHgwMDA2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOTEwLCAweDcwMTAsIDB4OTAwNSwgMHgwMTQwLAotCTB4NzAxOCwgMHg5MDQ1LCAweDAxMjgsIDB4OTkwNiwgMHgwOTBjLCAweDBkNzksIDB4YTAwMCwgMHgwY2M4LAotCTB4MDEyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDA4ZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzBjMCwgMHg4MDAxLCAweDAyNzAsIDB4NzBjMiwgMHg3MDJjLAotCTB4MjA0OCwgMHg5MDg1LCAweDAwMDEsIDB4YTgwMCwgMHg3MDJlLCAweGE4MDMsIDB4MDAwMCwgMHhhODA3LAotCTB4MDAwMCwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHg5MDRlLCAweDBjZDgsIDB4MDBlNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MGMwLCAweDkwY2EsIDB4MDAyMCwgMHgwMjY4LAotCTB4ODAwMSwgMHg3MGMyLCAweDcwMmMsIDB4MjA0OCwgMHhhODAwLCAweDcwMmUsIDB4YTgwMywgMHgwMDAwLAotCTB4YTgwNywgMHgwMDAwLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDkwNGUsIDB4MGNkOCwgMHgwMGU2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAxNiwgMHg4OTBlLCAweDgxMGUsIDB4ODEwZiwgMHg5MTg0LAotCTB4MDAzZiwgMHhhODYyLCAweDkxODQsIDB4ZmZjMCwgMHhhODVlLCAweDAwMWUsIDB4MDAyMCwgMHgwMGU2LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxODAwLCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLAotCTB4NzAyZSwgMHg3MGMwLCAweDgwMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MzIsIDB4MDEyZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgyMDcxLCAweDE4MDAsIDB4OTAyNiwgMHgyMDA5LCAweDAwMDAsIDB4MjA0OSwgMHgwNDAwLAotCTB4MjkwMCwgMHg3MDJlLCAweDg5NDAsIDB4MjgwMCwgMHhhODAyLCAweGE5NWUsIDB4YTg2MywgMHgwMDAxLAotCTB4ODQyMCwgMHg5ODg2LCAweDA0NDAsIDB4MDEyMCwgMHgyODQ4LCAweDkxODgsIDB4MDA0MCwgMHgwYzkwLAotCTB4MjA3MSwgMHgxODhkLCAweDcwMDAsIDB4OTAwNSwgMHgxMWEwLCAweDIwMDEsIDB4MDU1OCwgMHhhODAyLAotCTB4MjA0OCwgMHgyMDA5LCAweDU2MDAsIDB4ODk0MCwgMHgyODAwLCAweGE4MDIsIDB4YTk1ZSwgMHhhODYzLAotCTB4MDAwMSwgMHg4NDIwLCAweDk4ODYsIDB4MDgwMCwgMHgwMTIwLCAweDI4NDgsIDB4OTE4OCwgMHgwMDQwLAotCTB4MGM5MCwgMHgyMDcxLCAweDE4OGQsIDB4NzEwNCwgMHg3MjAwLCAweDgyZmYsIDB4MDFkMCwgMHg3MzA4LAotCTB4ODMxOCwgMHg4MzFmLCAweDgzMWIsIDB4ODMxYiwgMHg3MzEyLCAweDgzMTksIDB4MjAwMSwgMHgwODAwLAotCTB4YTgwMiwgMHgyMDQ4LCAweDg5MDAsIDB4YTgwMiwgMHgyMDQwLCAweGE5NWUsIDB4YWE2MiwgMHg4NDIwLAotCTB4MjMwMCwgMHg5OTA2LCAweDAxMzAsIDB4Mjg0OCwgMHg5MTg4LCAweDAwNDAsIDB4OTI5MSwgMHgwMDAwLAotCTB4MGM4OCwgMHhhODAzLCAweDAwMDAsIDB4MjA3MSwgMHgxODAwLCAweDc0YmUsIDB4NzRjMiwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMDE2LCAweDk5ODQsIDB4ZmMwMCwgMHgwMWU4LCAweDkwOGMsIDB4ZjgwMCwgMHgxMTY4LAotCTB4OTk4MiwgMHgwNDAwLCAweDAyYjgsIDB4OTk4MiwgMHgwNDQwLCAweDAyNzgsIDB4OTk4MiwgMHgwNTU4LAotCTB4MDI4OCwgMHg5OTgyLCAweDA4MDAsIDB4MTI3MCwgMHgwMDQwLCAweDk5ODIsIDB4MDgwMCwgMHgwMjUwLAotCTB4MjA3MSwgMHgxODhkLCAweDcwMTAsIDB4OTkwMiwgMHgxMjI4LCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLAotCTB4MDBlZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMGU2LCAweDIwNzEsIDB4MWEyNSwgMHg3MDA3LAotCTB4MDAwMCwgMHg5MDA2LCAweDcwMWUsIDB4NzAyMiwgMHg3MDAyLCAweDIwNzEsIDB4MDAwMCwgMHg3MDEwLAotCTB4OTA4NSwgMHg4MDQ0LCAweDcwMTIsIDB4MjA3MSwgMHgwMDgwLCAweDkwMDYsIDB4NzAyYiwgMHgwMDYwLAotCTB4MjBhOSwgMHgwMDQwLCAweDcwMjIsIDB4MWYwNCwgMHgxMTMyLCAweDcwMmIsIDB4MDA2MCwgMHg3MDJiLAotCTB4MDAyMCwgMHgyMGE5LCAweDAwNDAsIDB4NzAyMiwgMHgxZjA0LCAweDExM2IsIDB4NzAyYiwgMHgwMDIwLAotCTB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwZTYsIDB4YTA2ZiwgMHgwMDAwLAotCTB4MjA3MSwgMHgxYTI1LCAweDcwMWMsIDB4OTA4OCwgMHgxYTJmLCAweDI4MGEsIDB4ODAwMCwgMHg5MDg0LAotCTB4MDAzZiwgMHg3MDFlLCAweDcxMjAsIDB4OTEwNiwgMHgwOTBjLCAweDBkNzksIDB4NzAwNCwgMHg5MDA1LAotCTB4MTEyOCwgMHgwMGY2LCAweDIwNzksIDB4MDA4MCwgMHgwMGE5LCAweDAwZmUsIDB4MDBlZSwgMHgwMTJlLAotCTB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGU2LCAweDIwNzEsIDB4MWEyNSwgMHg3MDA0LAotCTB4OTAwNSwgMHgxMTI4LCAweDAwZjYsIDB4MjA3OSwgMHgwMDgwLCAweDAwMjEsIDB4MDBmZSwgMHgwMGVlLAotCTB4MDEyZSwgMHgwMDA1LCAweDcwMDQsIDB4OTA4NiwgMHgwMDAwLCAweDExMTAsIDB4NzAwNywgMHgwMDA2LAotCTB4NzAwMCwgMHgwMDAyLCAweDExODQsIDB4MTMwNywgMHgxMTgyLCAweDExODIsIDB4MTJmYiwgMHgxMmZiLAotCTB4MTJmYiwgMHgxMmZiLCAweDA4MGMsIDB4MGQ3OSwgMHg3MDFjLCAweDcxMjAsIDB4OTEwNiwgMHgxMTQ4LAotCTB4NzkyYywgMHg5MTg0LCAweDAwMDEsIDB4MTEyMCwgMHhkMWZjLCAweDExMTAsIDB4NzAwNywgMHgwMDAwLAotCTB4MDAwNSwgMHgwMDk2LCAweDkxODAsIDB4MWEyZiwgMHgyMDA0LCAweDcwMGEsIDB4MjA0OCwgMHg4MTA4LAotCTB4OTE4YywgMHgwMDNmLCAweDcxMjIsIDB4NzgyYiwgMHgwMDI2LCAweGE4OGMsIDB4NzgwMiwgMHhhODkwLAotCTB4NzgwNiwgMHhhODk0LCAweDc4MGEsIDB4YTg5OCwgMHg3ODBlLCAweGE4NzgsIDB4NzAwZSwgMHhhODcwLAotCTB4NzAxNiwgMHhhODc0LCAweDcwMWEsIDB4YTg2OCwgMHgwMDllLCAweGQwODQsIDB4MDEyMCwgMHg3MDA3LAotCTB4MDAwMSwgMHgwMDI5LCAweDAwMDUsIDB4NzAwNywgMHgwMDAyLCAweDAwYjEsIDB4MDAwNSwgMHgwMDE2LAotCTB4MDAyNiwgMHg3MTBjLCAweDIwMTEsIDB4MDA0MCwgMHg5MTgyLCAweDAwNDAsIDB4MTIxMCwgMHgyMTEwLAotCTB4OTAwNiwgMHg3MDBlLCAweDcyMTIsIDB4ODIwMywgMHg3ODEyLCAweDc4MmIsIDB4MDAyMCwgMHg3ODJiLAotCTB4MDA0MSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHg3MDE0LCAweDIwZTAsIDB4NzAxOCwgMHgyMDk4LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAotCTB4MDA4OCwgMHg3ODJiLCAweDAwMjYsIDB4NzEwYywgMHgyMDExLCAweDAwNDAsIDB4OTE4MiwgMHgwMDQwLAotCTB4MTIxMCwgMHgyMTEwLCAweDkwMDYsIDB4NzAwZSwgMHgyMmE4LCAweDQwMDYsIDB4ODIwMywgMHg3ODEyLAotCTB4NzgyYiwgMHgwMDIwLCAweDMzMDAsIDB4NzAxYSwgMHg3ODJiLCAweDAwMDEsIDB4MDE1ZSwgMHgwMTRlLAotCTB4MDEzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgyMDA5LCAweDFhMjUsIDB4MjEwNCwgMHhjMDk1LAotCTB4MjAwYSwgMHgwODBjLCAweDExNjEsIDB4MDAwNSwgMHgwMDE2LCAweDAwZTYsIDB4MjA3MSwgMHgxYTI1LAotCTB4MDBmNiwgMHgyMDc5LCAweDAwODAsIDB4NzkyYywgMHhkMWJjLCAweDE5MGMsIDB4MGQ3MiwgMHg3ODJiLAotCTB4MDAwMiwgMHhkMWZjLCAweDAxMjAsIDB4OTE4YywgMHgwNzAwLCAweDcwMDQsIDB4MDAyMywgMHgwMGZlLAotCTB4MDBlZSwgMHgwMDFlLCAweDAwMDUsIDB4MTE3MiwgMHgxMjFhLCAweDEyNGUsIDB4MTMyNiwgMHgwZDc5LAotCTB4MTM0MSwgMHgwZDc5LCAweDkxOGMsIDB4MDcwMCwgMHgxNTUwLCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAotCTB4NzAxNCwgMHgyMGU4LCAweDcwMTgsIDB4MjBhMCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMDg4LAotCTB4NzgyYiwgMHgwMDQwLCAweDcwMTAsIDB4MjBhOCwgMHg0MDA1LCAweDM0MDAsIDB4NzAxYSwgMHgwMTVlLAotCTB4MDE0ZSwgMHgwMTNlLCAweDcwMGMsIDB4OTAwNSwgMHgwNTc4LCAweDc4MDAsIDB4NzgwMiwgMHg3ODA0LAotCTB4NzgwNiwgMHgwODBjLCAweDExYjcsIDB4MDAwNSwgMHg3MDA4LCAweDAwOTYsIDB4MjA0OCwgMHhhODZmLAotCTB4MDEwMCwgMHgwMDllLCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLCAweDExNzIsIDB4MDAwNSwgMHg3MDA4LAotCTB4MDA5NiwgMHgyMDQ4LCAweGE4NmYsIDB4MDIwMCwgMHgwMDllLCAweDBjYTAsIDB4OTE4YywgMHgwNzAwLAotCTB4MTE1MCwgMHg3MDBjLCAweDkwMDUsIDB4MDE4MCwgMHg3ODAwLCAweDc4MDIsIDB4NzgwNCwgMHg3ODA2LAotCTB4MDgwYywgMHgxMWNjLCAweDAwMDUsIDB4NzAwOCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2ZiwgMHgwMjAwLAotCTB4MDA5ZSwgMHg3MDA3LCAweDAwMDAsIDB4MDA4MCwgMHgwMDk2LCAweDcwMDgsIDB4MjA0OCwgMHg3ODAwLAotCTB4YTg4ZSwgMHg3ODA0LCAweGE4OTIsIDB4NzgwOCwgMHhhODk2LCAweDc4MGMsIDB4YTg5YSwgMHhhODZmLAotCTB4MDEwMCwgMHgwMDllLCAweDcwMDcsIDB4MDAwMCwgMHgwMDk2LCAweDAwZDYsIDB4NzAwOCwgMHgyMDQ4LAotCTB4MjAwMSwgMHgxOGI5LCAweDIwMDQsIDB4OTkwNiwgMHgxMTI4LCAweGE4OWMsIDB4MDgwZiwgMHgwMGRlLAotCTB4MDA5ZSwgMHgwMGEwLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDk2LCAweDAwZDYsIDB4NzAwOCwgMHgyMDQ4LAotCTB4MDA4MSwgMHgwMTUwLCAweGE4OWMsIDB4MDA4NiwgMHgyOTQwLCAweDA4MGYsIDB4MDA4ZSwgMHgwMGRlLAotCTB4MDA5ZSwgMHgwODBjLCAweDExNjEsIDB4MDAwNSwgMHgwMGRlLCAweDAwOWUsIDB4MDgwYywgMHgxMTYxLAotCTB4MDAwNSwgMHhhOGE4LCAweGQwOGMsIDB4MDAwNSwgMHgwMDk2LCAweGEwYTAsIDB4OTA0ZCwgMHgwOTBjLAotCTB4MGQ3OSwgMHhhMDZjLCAweDkwOGUsIDB4MDEwMCwgMHgwMTMwLCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLAotCTB4MDAwMCwgMHhhODk3LCAweDQwMDIsIDB4MDgwYywgMHg2ZjA1LCAweGEwOWYsIDB4MDAwMCwgMHhhMGEzLAotCTB4MDAwMCwgMHgyODQ4LCAweDA4MGMsIDB4MTA3ZiwgMHgwMDllLCAweDAwMDUsIDB4MDBhNiwgMHhhMGEwLAotCTB4OTA0ZCwgMHgwOTBjLCAweDBkNzksIDB4YTA2YywgMHg5MDhlLCAweDAxMDAsIDB4MDEyOCwgMHhhODdiLAotCTB4MDAwMSwgMHhhODgzLCAweDAwMDAsIDB4MDBjMCwgMHhhODBjLCAweDIwNTAsIDB4YjAwNCwgMHg5MDA1LAotCTB4MDE5OCwgMHhhODBlLCAweDIwNTAsIDB4ODAwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTA4YywgMHgwMDNmLAotCTB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwMiwgMHhhMDc2LCAweGExNzIsIDB4YjAwMCwgMHhhMDdhLAotCTB4MjgxMCwgMHgwODBjLCAweDExNDIsIDB4MDBlOCwgMHhhOTdjLCAweGE4OTQsIDB4MDAxNiwgMHgwMDA2LAotCTB4MDgwYywgMHg2ZjA1LCAweDAwMGUsIDB4MDAxZSwgMHhkMWZjLCAweDExMzgsIDB4ZDFmNCwgMHgwMTI4LAotCTB4MDBjNiwgMHgyMDYwLCAweDA4MGMsIDB4YWY0ZSwgMHgwMGNlLCAweDcwMDgsIDB4MjA0OCwgMHhhODlmLAotCTB4MDAwMCwgMHhhOGEzLCAweDAwMDAsIDB4MDgwYywgMHgxMDdmLCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLAotCTB4MTE2MSwgMHgwMGFlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzgyYiwgMHgxMDAxLAotCTB4NzAwNywgMHgwMDA1LCAweDcwMDAsIDB4YzA5NCwgMHg3MDAyLCAweDAxMmUsIDB4MDAwNSwgMHgwMDk2LAotCTB4MjAwMSwgMHgxOTMwLCAweDIwNGMsIDB4YTg3YywgMHg3ODEyLCAweGE4OGMsIDB4NzgwMiwgMHhhODkwLAotCTB4NzgwNiwgMHhhODk0LCAweDc4MGEsIDB4YTg5OCwgMHg3ODBlLCAweDc4MmIsIDB4MDAyMCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDc4MmIsIDB4MDA0MSwgMHg3MDA3LCAweDAwMDMsIDB4NzAwMCwgMHhjMDg0LAotCTB4NzAwMiwgMHgyOTAwLCAweDcwMGEsIDB4MDEyZSwgMHgwMDllLCAweDAwMDUsIDB4MjBlMSwgMHgwMDAwLAotCTB4MjA5OSwgMHgwMDg4LCAweDc4MmIsIDB4MDA0MCwgMHgwMDk2LCAweDIwMDEsIDB4MTkzMCwgMHgyMDRjLAotCTB4YWE3YywgMHgwMDllLCAweDA4MGMsIDB4OGUxZSwgMHgyMDA5LCAweDE4OGMsIDB4MjEwNCwgMHg5MDg0LAotCTB4ZmZmYywgMHgyMDBhLCAweDA4MGMsIDB4OGM4MCwgMHg3MDA3LCAweDAwMDAsIDB4MDgwYywgMHgxMTcyLAotCTB4MDAwNSwgMHg3MDA3LCAweDAwMDAsIDB4MDgwYywgMHgxMTcyLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLAotCTB4MjIwMCwgMHgyMDc5LCAweDAzMDAsIDB4MjA3MSwgMHgxYTZmLCAweDcwMDMsIDB4MDAwMCwgMHg3OGJmLAotCTB4MDBmNiwgMHgwMDQxLCAweDc4MDcsIDB4MDAwNywgMHg3ODAzLCAweDAwMDAsIDB4NzgwMywgMHgwMDAxLAotCTB4MDEyZSwgMHgwMDA1LCAweDAwYzYsIDB4NzgwMywgMHgwMDAwLCAweDIwMDEsIDB4MDE2NSwgMHgyMDAzLAotCTB4NDE5OCwgMHg3ODA4LCAweGQwOWMsIDB4MDEyMCwgMHg3ODIwLCAweDA4MGMsIDB4MTNhYSwgMHgwY2M4LAotCTB4MjAwMSwgMHgxYTcwLCAweDIwMDMsIDB4MDAwMCwgMHg3OGFiLCAweDAwMDQsIDB4NzhhYywgMHhkMGFjLAotCTB4MWRlOCwgMHg3OGFiLCAweDAwMDIsIDB4NzgwNywgMHgwMDA3LCAweDc4MjcsIDB4MDAzMCwgMHg3ODJiLAotCTB4MDQwMCwgMHg3ODI3LCAweDAwMzEsIDB4NzgyYiwgMHgxYTgyLCAweDc4ZTMsIDB4ZmYwMCwgMHg3ODFmLAotCTB4ZmYwMCwgMHg3ODFiLCAweGZmMDAsIDB4MjAwMSwgMHgxYTcxLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLAotCTB4MDIwMCwgMHgyMDA0LCAweGQwZGMsIDB4MDExMCwgMHg3ODFmLCAweDAzMDMsIDB4MjA2MSwgMHgxYTgyLAotCTB4NjAyZiwgMHgxZGRjLCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDkwODIsIDB4MWRkYywgMHg2MDMyLAotCTB4NjAzYiwgMHgxZWRlLCAweDYwMmIsIDB4MWFjMiwgMHg2MDA3LCAweDFhYTIsIDB4MjA2MSwgMHgxYWEyLAotCTB4NjA2ZiwgMHgxOTNlLCAweDIwMDEsIDB4MTkyOSwgMHgyMDA0LCAweDYwN2EsIDB4NzgzZiwgMHgzNDc0LAotCTB4MDBjZSwgMHgwMDA1LCAweDkwODYsIDB4MDAwZCwgMHgxMWQwLCAweDc4MDgsIDB4ZDA5YywgMHgwMWI4LAotCTB4NzgyMCwgMHgwMDI2LCAweDIwMTAsIDB4MDgwYywgMHhjYzIxLCAweDAxODAsIDB4MjI2MCwgMHg2MDAwLAotCTB4OTA4NiwgMHgwMDA0LCAweDExNTgsIDB4MDAxNiwgMHg2MTIwLCAweDkxODYsIDB4MDAwOSwgMHgwMTA4LAotCTB4MDAyMCwgMHgyMDA5LCAweDAwNGMsIDB4MDgwYywgMHhhZmVjLCAweDAwMWUsIDB4MDAyZSwgMHgwMDA1LAotCTB4MDEyNiwgMHgyMDkxLCAweDIyMDAsIDB4NzkwOCwgMHg5MTg0LCAweDAwNzAsIDB4MTkwYywgMHgwZDcyLAotCTB4ZDE5YywgMHgwNWEwLCAweDc4MjAsIDB4OTA4YywgMHhmMDAwLCAweDA1NDAsIDB4MjA2MCwgMHg2MDIwLAotCTB4OTA4NiwgMHgwMDAzLCAweDE1NTAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTUzMCwgMHg2MTE0LAotCTB4MjE0OCwgMHhhODc2LCAweGE4N2EsIDB4YTg2NywgMHgwMTAzLCAweDA4MGMsIDB4NmQyNiwgMHgwMGI2LAotCTB4NjAxMCwgMHgyMDU4LCAweGJhM2MsIDB4ODIxMSwgMHgwMjA4LCAweGJhM2UsIDB4YjhkMCwgMHg5MDA1LAotCTB4MTkwYywgMHg2OGFlLCAweDAwYmUsIDB4NjA0NCwgMHhkMGZjLCAweDE5MGMsIDB4YWIyMCwgMHgwODBjLAotCTB4YWY3NywgMHg3ODA4LCAweGQwOWMsIDB4MTliMCwgMHgwMTJlLCAweDAwMDUsIDB4OTA4YSwgMHgwMDI0LAotCTB4MWEwYywgMHgwZDc5LCAweDAwMmIsIDB4MDEyZSwgMHgwMDA1LCAweDA0YjAsIDB4MDEyZSwgMHgwMDA1LAotCTB4MTQyYywgMHgxNDUyLCAweDE0ODIsIDB4MTQ4NywgMHgxNDhiLCAweDE0OTAsIDB4MTRiOCwgMHgxNGJjLAotCTB4MTRjYSwgMHgxNGNlLCAweDE0MmMsIDB4MTU5YiwgMHgxNTlmLCAweDE2MTEsIDB4MTYxOCwgMHgxNDJjLAotCTB4MTYxOSwgMHgxNjFhLCAweDE2MjUsIDB4MTYyYywgMHgxNDJjLCAweDE0MmMsIDB4MTQyYywgMHgxNDJjLAotCTB4MTQyYywgMHgxNDJjLCAweDE0MmMsIDB4MTQ5MiwgMHgxNDJjLCAweDE0NWEsIDB4MTQ3ZiwgMHgxNDQ2LAotCTB4MTQyYywgMHgxNDY2LCAweDE0MzAsIDB4MTQyZSwgMHgwODBjLCAweDBkNzksIDB4MDgwYywgMHgwZDcyLAotCTB4MDgwYywgMHgxNjM3LCAweDIwMDksIDB4MWE3ZSwgMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwgMHgwODBjLAotCTB4ODE1MSwgMHgwODBjLCAweDFiM2IsIDB4MDAwNSwgMHg2MDQ0LCAweGQwZmMsIDB4MTkwYywgMHhhYjIwLAotCTB4MjAwOSwgMHgwMDU1LCAweDA4MGMsIDB4YWZlYywgMHgwMTJlLCAweDAwMDUsIDB4MDgwYywgMHgxNjM3LAotCTB4MjA2MCwgMHg2MDQ0LCAweGQwZmMsIDB4MTkwYywgMHhhYjIwLCAweDIwMDksIDB4MDA1NSwgMHgwODBjLAotCTB4YWZlYywgMHgwMDA1LCAweDIwMDksIDB4MDA0OCwgMHgwODBjLCAweDE2MzcsIDB4MjA2MCwgMHgwODBjLAotCTB4YWZlYywgMHgwMDA1LCAweDIwMDksIDB4MDA1NCwgMHgwODBjLCAweDE2MzcsIDB4MjA2MCwgMHg2MDQ0LAotCTB4ZDBmYywgMHgxOTBjLCAweGFiMjAsIDB4MDgwYywgMHhhZmVjLCAweDAwMDUsIDB4MDgwYywgMHgxNjM3LAotCTB4MjA2MCwgMHgwMDU2LCAweDAwNjYsIDB4MDgwYywgMHgxNjM3LCAweDIwMjgsIDB4MDgwYywgMHgxNjM3LAotCTB4MjAzMCwgMHgwMDM2LCAweDAwNDYsIDB4MjAyMSwgMHgwMDAwLCAweDI0MTgsIDB4MjAwOSwgMHgwMDU2LAotCTB4MDgwYywgMHhhZmVjLCAweDAwNGUsIDB4MDAzZSwgMHgwMDZlLCAweDAwNWUsIDB4MDAwNSwgMHgwODBjLAotCTB4MTYzNywgMHgwMDA1LCAweDcwMDQsIDB4YzA4NSwgMHhjMGI1LCAweDcwMDYsIDB4MDAwNSwgMHg3MDA0LAotCTB4YzA4NSwgMHg3MDA2LCAweDAwMDUsIDB4MDgwYywgMHgxNjM3LCAweDA4MGMsIDB4MTczNCwgMHgwMDA1LAotCTB4MDgwYywgMHgwZDc5LCAweDA4MGMsIDB4MTYzNywgMHgyMDYwLCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LAotCTB4YTgzYiwgMHhmZmZmLCAweDAwOWUsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4YWZlYywgMHgyMDAxLAotCTB4MDE1ZCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwOSwgMHgwM2U4LCAweDgxMDksIDB4MDE2MCwgMHgyMDAxLAotCTB4MDIwMSwgMHgyMDA0LCAweDkwMDUsIDB4MGRjOCwgMHgyMDAxLCAweDAyMTgsIDB4MjAwNCwgMHhkMGVjLAotCTB4MTExMCwgMHgwODBjLCAweDE2M2MsIDB4MjAwMSwgMHgwMzA3LCAweDIwMDMsIDB4ODAwMCwgMHgwMDA1LAotCTB4NzAwNCwgMHhjMDk1LCAweDcwMDYsIDB4MDAwNSwgMHgwODBjLCAweDE2MzcsIDB4MjA2MCwgMHg2MDE0LAotCTB4MDA5NiwgMHgyMDQ4LCAweGE4M2IsIDB4ZmZmZiwgMHgwMDllLCAweDIwMDksIDB4MDA0OCwgMHgwODBjLAotCTB4YWZlYywgMHgwMDA1LCAweDA4MGMsIDB4MTYzNywgMHgwODBjLCAweDBkNzksIDB4MDgwYywgMHgxNjM3LAotCTB4MDgwYywgMHgxNTg2LCAweDc4MjcsIDB4MDAxOCwgMHg3OWFjLCAweGQxZGMsIDB4MDkwNCwgMHgxNTM3LAotCTB4NzgyNywgMHgwMDE1LCAweDc4MjgsIDB4NzgyYiwgMHgwMDAwLCAweDkwNjUsIDB4MDE0MCwgMHgyMDAxLAotCTB4MDIwZCwgMHgyMDAzLCAweDAwNTAsIDB4MjAwMywgMHgwMDIwLCAweDA4MDQsIDB4MTUzZCwgMHg3MDA0LAotCTB4OTAwNSwgMHgwMWM4LCAweDExODgsIDB4NzhhYiwgMHgwMDA0LCAweDc4MjcsIDB4MDAxOCwgMHg3ODJiLAotCTB4MDAwMCwgMHhkMWJjLCAweDA5MGMsIDB4MGQ3OSwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDUwLAotCTB4MjAwMywgMHgwMDIwLCAweDA4MDQsIDB4MTU2YiwgMHg3OGFiLCAweDAwMDQsIDB4NzgwMywgMHgwMDAxLAotCTB4MDgwYywgMHgxNTlmLCAweDAwMDUsIDB4NzgyNywgMHgwMDE4LCAweGEwMDEsIDB4NzgyOCwgMHg3ODI3LAotCTB4MDAxMSwgMHhhMDAxLCAweDc5MjgsIDB4OTEwNiwgMHgwMTEwLCAweDc5YWMsIDB4MDhlMCwgMHgwMGU2LAotCTB4MjA3MSwgMHgwMjAwLCAweDcwMmMsIDB4ZDBjNCwgMHgwMTQwLCAweDAwZWUsIDB4MDgwYywgMHgxYjNiLAotCTB4MDgwYywgMHgxMzVhLCAweDc4MDMsIDB4MDAwMSwgMHgwMDA1LCAweDcwMzcsIDB4MDAwMSwgMHhhMDAxLAotCTB4NzE1MCwgMHgwMGVlLCAweDkxOGMsIDB4ZmYwMCwgMHg5MTg2LCAweDA1MDAsIDB4MDExMCwgMHg3OWFjLAotCTB4MDgxMCwgMHg3MDA0LCAweGMwOWQsIDB4NzAwNiwgMHg3OGFiLCAweDAwMDQsIDB4NzgwMywgMHgwMDAxLAotCTB4MDgwYywgMHgxNTlmLCAweDIwMDEsIDB4MDIwZCwgMHgyMDAzLCAweDAwMjAsIDB4MDAwNSwgMHg3ODI4LAotCTB4NzgyYiwgMHgwMDAwLCAweDkwNjUsIDB4MDkwYywgMHgwZDc5LCAweDYwMTQsIDB4MjA0OCwgMHg3OGFiLAotCTB4MDAwNCwgMHg5MThjLCAweDA3MDAsIDB4MDFhOCwgMHgwODBjLCAweDgxNTEsIDB4MDgwYywgMHgxYjNiLAotCTB4MDgwYywgMHhjYzMzLCAweDAxNTgsIDB4YTlhYywgMHhhOTM2LCAweGE5YjAsIDB4YTkzYSwgMHhhODNmLAotCTB4ZmZmZiwgMHhhODQzLCAweGZmZmYsIDB4YTg4MCwgMHhjMGJkLCAweGE4ODIsIDB4MDgwYywgMHhjODFiLAotCTB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwOSwgMHgxMTI4LCAweDIwMDksIDB4MDA0YywgMHgwODBjLAotCTB4YWZlYywgMHgwMDQ4LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLAotCTB4NjAyNCwgMHgxOTBjLCAweGQwMzYsIDB4MjAyOSwgMHgwMGM4LCAweDg1MjksIDB4MDEyOCwgMHgyMDAxLAotCTB4MDIwMSwgMHgyMDA0LCAweDkwMDUsIDB4MGRjOCwgMHg3ZGJjLCAweDA4MGMsIDB4ZWJjMCwgMHhkNWE0LAotCTB4MTExOCwgMHgwODBjLCAweDE2M2MsIDB4MDAwNSwgMHgwODBjLCAweDgxNTEsIDB4MDgwYywgMHgxYjNiLAotCTB4MDAwNSwgMHg3ODFmLCAweDAzMDAsIDB4NzgwMywgMHgwMDAxLCAweDAwMDUsIDB4MDAxNiwgMHgwMDY2LAotCTB4MDA3NiwgMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHg3OTA4LCAweDkxOGMsIDB4MDAwNywgMHg5MTg2LAotCTB4MDAwMywgMHgwMTIwLCAweDIwMDEsIDB4MDAxNiwgMHgwODBjLCAweDE2YWQsIDB4MDBmZSwgMHgwMDdlLAotCTB4MDA2ZSwgMHgwMDFlLCAweDAwMDUsIDB4NzAwNCwgMHhjMDlkLCAweDcwMDYsIDB4MDAwNSwgMHg3MTA0LAotCTB4OTE4NCwgMHgwMDA0LCAweDE5MGMsIDB4MGQ3OSwgMHhkMTg0LCAweDExYjEsIDB4ZDE5YywgMHgwMTgwLAotCTB4YzE5YywgMHg3MTA2LCAweDAwMTYsIDB4MDgwYywgMHgxNzE3LCAweDAwMWUsIDB4MDE0OCwgMHgyMDAxLAotCTB4MDIwZCwgMHgyMDAzLCAweDAwNTAsIDB4MjAwMywgMHgwMDIwLCAweDA4MGMsIDB4MTYzYywgMHgwMDA1LAotCTB4ODFmZiwgMHgxOTBjLCAweDBkNzksIDB4MDAwNSwgMHgyMTAwLCAweGMxODQsIDB4YzFiNCwgMHg3MTA2LAotCTB4ZDBiNCwgMHgwMDE2LCAweDAwZTYsIDB4MTkwNCwgMHgxNjA2LCAweDIwNzEsIDB4MDIwMCwgMHgwODBjLAotCTB4MTcwNCwgMHgwNWUwLCAweDA4MGMsIDB4MTcxNywgMHgwNWIwLCAweDYwMTQsIDB4OTAwNSwgMHgwNWIwLAotCTB4MDA5NiwgMHgyMDQ4LCAweGE4NjQsIDB4MDA5ZSwgMHg5MDg0LCAweDAwZmYsIDB4OTA4ZSwgMHgwMDI5LAotCTB4MDE2MCwgMHg5MDhlLCAweDAwNDgsIDB4MTU1MCwgMHg2MDFjLCAweGQwODQsIDB4MTFlMCwgMHgwMGY2LAotCTB4MmM3OCwgMHgwODBjLCAweDE3YTEsIDB4MDBmZSwgMHgwMGIwLCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLAotCTB4MTkyYSwgMHgwMGZlLCAweDIwMDksIDB4MDFmNCwgMHg4MTA5LCAweDAxNjgsIDB4MjAwMSwgMHgwMjAxLAotCTB4MjAwNCwgMHg5MDA1LCAweDBkYzgsIDB4MjAwMSwgMHgwMjE4LCAweDIwMDQsIDB4ZDBlYywgMHgxMTE4LAotCTB4MDgwYywgMHgxNjNjLCAweDAwNDAsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsIDB4MDAyMCwgMHgwODBjLAotCTB4MTM1YSwgMHg3ODAzLCAweDAwMDEsIDB4MDBlZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHgxNzE3LAotCTB4MGRkMCwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDUwLCAweDIwMDMsIDB4MDAyMCwgMHgwNDYxLAotCTB4MGM5MCwgMHgwNDI5LCAweDIwNjAsIDB4MjAwOSwgMHgwMDUzLCAweDA4MGMsIDB4YWZlYywgMHgwMDA1LAotCTB4MDAwNSwgMHgwMDA1LCAweDAwZTEsIDB4MjAwOCwgMHgwMGQxLCAweDAwMDYsIDB4NzAwNCwgMHhjMDlkLAotCTB4NzAwNiwgMHgwMDBlLCAweDA4MGMsIDB4OTE2ZiwgMHgwMDA1LCAweDAwODksIDB4OTAwNSwgMHgwMTE4LAotCTB4MDgwYywgMHg4ZDcyLCAweDBjZDAsIDB4MDAwNSwgMHgyMDAxLCAweDAwMzYsIDB4MjAwOSwgMHgxODIwLAotCTB4MjEwYywgMHgyMDExLCAweDE4MWYsIDB4MjIxNCwgMHgwODBjLCAweDE2YWQsIDB4MDAwNSwgMHg3ODA4LAotCTB4ZDA5YywgMHgwZGU4LCAweDc4MjAsIDB4MDAwNSwgMHgwODBjLCAweDE1ODYsIDB4MDBkNiwgMHgyMDY5LAotCTB4MDIwMCwgMHgyMDA5LCAweDAxZjQsIDB4ODEwOSwgMHgwNTEwLCAweDY4MDQsIDB4OTAwNSwgMHgwZGQ4LAotCTB4MjAwMSwgMHgwMTVkLCAweDIwMDMsIDB4MDAwMCwgMHg3OWJjLCAweGQxYTQsIDB4MTUyOCwgMHg3OWI4LAotCTB4OTE4YywgMHgwZmZmLCAweDAxODAsIDB4OTE4MiwgMHgwODQxLCAweDEyNjgsIDB4OTE4OCwgMHgwMDA3LAotCTB4OTE4YywgMHgwZmY4LCAweDgxMGMsIDB4ODEwYywgMHg4MTBjLCAweDA4MGMsIDB4MTY5ZiwgMHg2ODI3LAotCTB4MDAwMSwgMHg4MTA5LCAweDFkZDAsIDB4MDRkOSwgMHg2ODI3LCAweDAwMDIsIDB4MDRjMSwgMHg2ODA0LAotCTB4OTAwNSwgMHgxMTMwLCAweDY4MmMsIDB4ZDBlNCwgMHgxNTAwLCAweDY4MDQsIDB4OTAwNSwgMHgwZGU4LAotCTB4NzliOCwgMHhkMWVjLCAweDExMzAsIDB4MDhjMCwgMHgwODBjLCAweDgxNTEsIDB4MDgwYywgMHgxYjNiLAotCTB4MDA5MCwgMHg3ODI3LCAweDAwMTUsIDB4NzgyYiwgMHgwMDAwLCAweDc4MjcsIDB4MDAxOCwgMHg3ODJiLAotCTB4MDAwMCwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDIwLCAweDIwMDEsIDB4MDMwNywgMHgyMDAzLAotCTB4MDMwMCwgMHg3ODAzLCAweDAwMDEsIDB4MDBkZSwgMHgwMDA1LCAweDY4MmMsIDB4OTA4NCwgMHg1NDAwLAotCTB4OTA4NiwgMHg1NDAwLCAweDBkMzAsIDB4NzgyNywgMHgwMDE1LCAweDc4MmIsIDB4MDAwMCwgMHg3ODAzLAotCTB4MDAwMSwgMHg2ODAwLCAweDkwODUsIDB4MTgwMCwgMHg2ODAyLCAweDAwZGUsIDB4MDAwNSwgMHg2ODI0LAotCTB4OTA4NCwgMHgwMDAzLCAweDFkZTAsIDB4MDAwNSwgMHgyMDAxLCAweDAwMzAsIDB4MmMwOCwgMHg2MjFjLAotCTB4MDAyMSwgMHg3ODMwLCAweDkwODYsIDB4MDA0MSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgyMDc5LAotCTB4MDMwMCwgMHgwMDA2LCAweDIwNzEsIDB4MWE2ZiwgMHg3MDA4LCAweDkwMDUsIDB4MTExMCwgMHg3OGUzLAotCTB4MGMwYywgMHg4MDAwLCAweDcwMGEsIDB4MDAyNiwgMHgyMDExLCAweDAwMDYsIDB4NzgwOCwgMHhkMDljLAotCTB4MDE1MCwgMHgwMDE2LCAweDAwMjYsIDB4MDBjNiwgMHgwODBjLCAweDEzYzgsIDB4MDBjZSwgMHgwMDJlLAotCTB4MDAxZSwgMHg4MjExLCAweDFkOTgsIDB4MDAyZSwgMHgwMDBlLCAweDAwMDYsIDB4NzgzMiwgMHg3OTM2LAotCTB4N2EzYSwgMHg3ODFiLCAweDgwODAsIDB4MDBiOSwgMHgxMTc4LCAweDIwNzEsIDB4MWE2ZiwgMHg3MDA4LAotCTB4OTAwNSwgMHgwMTMwLCAweDgwMDEsIDB4MGEwYywgMHgwZDc5LCAweDcwMGEsIDB4NzhlMywgMHgwYzAwLAotCTB4MDAwZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMDBlLCAweDc5MmMsIDB4MzkwMCwgMHg4MDAwLAotCTB4MjAwNCwgMHgwODBjLCAweDBkNzksIDB4MjAwOSwgMHhmZjAwLCAweDgxMDksIDB4MDEyMCwgMHg3ODE4LAotCTB4ZDBiYywgMHgxZGQ4LCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4NzgzMiwgMHg3OTM2LAotCTB4N2EzYSwgMHg3ODFiLCAweDgwODAsIDB4MGM3OSwgMHgxMTA4LCAweDAwMDUsIDB4NzkyYywgMHgzOTAwLAotCTB4ODAwMCwgMHgyMDA0LCAweDA4MGMsIDB4MGQ3OSwgMHg3MDM3LCAweDAwMDEsIDB4NzE1MCwgMHg3MDM3LAotCTB4MDAwMiwgMHg3MDUwLCAweDIwNjAsIDB4ZDFiYywgMHgxMTEwLCAweDcwNTQsIDB4MjA2MCwgMHg5MThjLAotCTB4ZmYwMCwgMHg5MTg2LCAweDA1MDAsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDA2LAotCTB4MDA0NiwgMHgwMGU2LCAweDIwNzEsIDB4MDIwMCwgMHg3MDM3LCAweDAwMDIsIDB4NzA1OCwgMHg5MDg0LAotCTB4ZmYwMCwgMHg4MDA3LCAweDkwODYsIDB4MDBiYywgMHgxMTU4LCAweDIwMjEsIDB4MWE3ZiwgMHgyNDA0LAotCTB4ODAwMCwgMHgwMjA4LCAweDIwMjIsIDB4MDgwYywgMHg4MTUxLCAweDA4MGMsIDB4MWIzYiwgMHg5MDA2LAotCTB4MDBlZSwgMHgwMDRlLCAweDAwMGUsIDB4MDAwNSwgMHgwYzExLCAweDExMDgsIDB4MDAwNSwgMHgwMGU2LAotCTB4MDAxNiwgMHgyMDcxLCAweDAyMDAsIDB4MDg0MSwgMHg2MTI0LCAweGQxZGMsIDB4MDFmOCwgMHg3MDFjLAotCTB4ZDA4YywgMHgwOTA0LCAweDE3OTYsIDB4NzAxNywgMHgwMDAwLCAweDIwMDEsIDB4MDI2NCwgMHgyMDA0LAotCTB4ZDBiYywgMHgwOTA0LCAweDE3OTYsIDB4MjAwMSwgMHgwMjY4LCAweDAwYzYsIDB4MjA2NCwgMHg2MTA0LAotCTB4NjAzOCwgMHgwMGNlLCAweDkxOGUsIDB4MDAzOSwgMHgxOTA0LCAweDE3OTYsIDB4OWMwNiwgMHgxNWYwLAotCTB4MDEyNiwgMHgyMDkxLCAweDI2MDAsIDB4MDgwYywgMHg4MGE5LCAweDAxMmUsIDB4NzM1OCwgMHg3NDVjLAotCTB4NjAxNCwgMHg5MDVkLCAweDA1OTgsIDB4MmI0OCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLAotCTB4MDBiZSwgMHhkMGJjLCAweDE5MGMsIDB4ZDAxMSwgMHhhYjQyLCAweGFjM2UsIDB4MjAwMSwgMHgxODY5LAotCTB4MjAwNCwgMHhkMGI0LCAweDExNzAsIDB4NjAxYywgMHhkMGU0LCAweDExNTgsIDB4NjAxMCwgMHgwMGI2LAotCTB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgxMTIwLCAweGE4M2IsIDB4N2ZmZiwgMHhhODM3LAotCTB4ZmZmZiwgMHgwODBjLCAweDFlZmUsIDB4MTE5MCwgMHgwODBjLCAweDE5ODcsIDB4MmEwMCwgMHhhODE2LAotCTB4MDEzMCwgMHgyODAwLCAweGE4MGUsIDB4MmMwNSwgMHhhODBhLCAweDJjMDAsIDB4YTgxMiwgMHg3MDM3LAotCTB4MDAyMCwgMHg3ODFmLCAweDAzMDAsIDB4MDAxZSwgMHgwMGVlLCAweDAwMDUsIDB4NzAzNywgMHgwMDUwLAotCTB4NzAzNywgMHgwMDIwLCAweDAwMWUsIDB4MDBlZSwgMHgwODBjLCAweDE2M2MsIDB4MDAwNSwgMHgwODBjLAotCTB4MGQ3OSwgMHgyY2YwLCAweDAxMjYsIDB4MjA5MSwgMHgyMjAwLCAweDAwMTYsIDB4MDBjNiwgMHgzZTYwLAotCTB4NjAxNCwgMHgyMDQ4LCAweDI5NDAsIDB4OTAzZSwgMHgyNzMwLCAweGE4NjQsIDB4MjA2OCwgMHhhODFhLAotCTB4OWQ4NCwgMHgwMDBmLCAweDkwODgsIDB4MWVkZSwgMHgyMTY1LCAweDAwMDIsIDB4MTdjZCwgMHgxODNiLAotCTB4MTdjZCwgMHgxN2NkLCAweDE3ZDEsIDB4MTgxYywgMHgxN2NkLCAweDE3ZjEsIDB4MTdjNiwgMHgxODMyLAotCTB4MTdjZCwgMHgxN2NkLCAweDE3ZDYsIDB4MTkyOCwgMHgxODA1LCAweDE3ZmIsIDB4YTk2NCwgMHg5MThjLAotCTB4MDBmZiwgMHg5MThlLCAweDAwNDgsIDB4MDkwNCwgMHgxODMyLCAweDkwODUsIDB4MDAwMSwgMHgwODA0LAotCTB4MTkxZSwgMHhhODdjLCAweGQwYWMsIDB4MGRjOCwgMHgwODA0LCAweDE4NDIsIDB4YTg3YywgMHhkMGFjLAotCTB4MGRhMCwgMHgwODA0LCAweDE4YWQsIDB4YTg5OCwgMHg5MDFkLCAweDExMDgsIDB4YWI5YywgMHg5MDE2LAotCTB4YWFiMiwgMHhhYTNlLCAweGFhNDIsIDB4M2UwMCwgMHg5MDgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDgwLAotCTB4OTMzZiwgMHgyMDA1LCAweDkwMDUsIDB4MDkwYywgMHgwZDc5LCAweDIwMDQsIDB4YThhZSwgMHgwODA0LAotCTB4MTkwNiwgMHhhODdjLCAweGQwYmMsIDB4MDljOCwgMHhhODkwLCAweGE4NDIsIDB4YTg4YywgMHhhODNlLAotCTB4YTg4OCwgMHgwODA0LCAweDE4NDIsIDB4YTg3YywgMHhkMGJjLCAweDA5NzgsIDB4YTg5MCwgMHhhODQyLAotCTB4YTg4YywgMHhhODNlLCAweGE4ODgsIDB4MDgwNCwgMHgxOGFkLCAweGE4N2MsIDB4ZDBiYywgMHgwOTI4LAotCTB4YTg5MCwgMHhhODQyLCAweGE4OGMsIDB4YTgzZSwgMHhhODA0LCAweDkwNDUsIDB4MDkwYywgMHgwZDc5LAotCTB4YTE2NCwgMHhhOTFhLCAweDkxZWMsIDB4MDAwZiwgMHg5ZDgwLCAweDFlZGUsIDB4MjA2NSwgMHhhODg4LAotCTB4ZDE5YywgMHgxOTA0LCAweDE4YWQsIDB4MDQzMCwgMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHgxN2NkLAotCTB4YTgwNCwgMHg5MDQ1LCAweDA5MGMsIDB4MGQ3OSwgMHhhMTY0LCAweGE5MWEsIDB4OTFlYywgMHgwMDBmLAotCTB4OWQ4MCwgMHgxZWRlLCAweDIwNjUsIDB4OTAwNiwgMHhhODQyLCAweGE4M2UsIDB4ZDE5YywgMHgxOTA0LAotCTB4MThhZCwgMHgwMDgwLCAweGE4N2MsIDB4ZDBhYywgMHgwOTA0LCAweDE3Y2QsIDB4OTAwNiwgMHhhODQyLAotCTB4YTgzZSwgMHgwODA0LCAweDE4YWQsIDB4YTg3YywgMHhkMGFjLCAweDA5MDQsIDB4MTdjZCwgMHg5MDA2LAotCTB4YTg0MiwgMHhhODNlLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsIDB4MGQ3OSwgMHg5MDgyLAotCTB4MDAxYiwgMHgwMDAyLCAweDE4NjUsIDB4MTg2NSwgMHgxODY3LCAweDE4NjUsIDB4MTg2NSwgMHgxODY1LAotCTB4MTg3MSwgMHgxODY1LCAweDE4NjUsIDB4MTg2NSwgMHgxODdiLCAweDE4NjUsIDB4MTg2NSwgMHgxODY1LAotCTB4MTg4NSwgMHgxODY1LCAweDE4NjUsIDB4MTg2NSwgMHgxODhmLCAweDE4NjUsIDB4MTg2NSwgMHgxODY1LAotCTB4MTg5OSwgMHgxODY1LCAweDE4NjUsIDB4MTg2NSwgMHgxOGEzLCAweDA4MGMsIDB4MGQ3OSwgMHhhNTc0LAotCTB4YTQ3OCwgMHg5ZDg2LCAweDAwMjQsIDB4MDkwNCwgMHgxN2RiLCAweGEzN2MsIDB4YTI4MCwgMHgwODA0LAotCTB4MTkwNiwgMHhhNTg0LCAweGE0ODgsIDB4OWQ4NiwgMHgwMDI0LCAweDA5MDQsIDB4MTdkYiwgMHhhMzhjLAotCTB4YTI5MCwgMHgwODA0LCAweDE5MDYsIDB4YTU5NCwgMHhhNDk4LCAweDlkODYsIDB4MDAyNCwgMHgwOTA0LAotCTB4MTdkYiwgMHhhMzljLCAweGEyYTAsIDB4MDgwNCwgMHgxOTA2LCAweGE1YTQsIDB4YTRhOCwgMHg5ZDg2LAotCTB4MDAyNCwgMHgwOTA0LCAweDE3ZGIsIDB4YTNhYywgMHhhMmIwLCAweDA4MDQsIDB4MTkwNiwgMHhhNWI0LAotCTB4YTRiOCwgMHg5ZDg2LCAweDAwMjQsIDB4MDkwNCwgMHgxN2RiLCAweGEzYmMsIDB4YTJjMCwgMHgwODA0LAotCTB4MTkwNiwgMHhhNWM0LCAweGE0YzgsIDB4OWQ4NiwgMHgwMDI0LCAweDA5MDQsIDB4MTdkYiwgMHhhM2NjLAotCTB4YTJkMCwgMHgwODA0LCAweDE5MDYsIDB4YTVkNCwgMHhhNGQ4LCAweDlkODYsIDB4MDAyNCwgMHgwOTA0LAotCTB4MTdkYiwgMHhhM2RjLCAweGEyZTAsIDB4MDgwNCwgMHgxOTA2LCAweDJjMDUsIDB4OTA4YSwgMHgwMDM0LAotCTB4MWEwYywgMHgwZDc5LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDE4ZDAsIDB4MThjZSwgMHgxOGNlLAotCTB4MThjZSwgMHgxOGNlLCAweDE4Y2UsIDB4MThkYiwgMHgxOGNlLCAweDE4Y2UsIDB4MThjZSwgMHgxOGNlLAotCTB4MThjZSwgMHgxOGU2LCAweDE4Y2UsIDB4MThjZSwgMHgxOGNlLCAweDE4Y2UsIDB4MThjZSwgMHgxOGYxLAotCTB4MThjZSwgMHgxOGNlLCAweDE4Y2UsIDB4MThjZSwgMHgxOGNlLCAweDE4ZmMsIDB4MDgwYywgMHgwZDc5LAotCTB4YTU2YywgMHhhNDcwLCAweGE3NzQsIDB4YTY3OCwgMHg5ZDg2LCAweDAwMmMsIDB4MDkwNCwgMHgxN2RiLAotCTB4YTM3YywgMHhhMjgwLCAweDA0NTgsIDB4YTU4NCwgMHhhNDg4LCAweGE3OGMsIDB4YTY5MCwgMHg5ZDg2LAotCTB4MDAyYywgMHgwOTA0LCAweDE3ZGIsIDB4YTM5NCwgMHhhMjk4LCAweDA0MDAsIDB4YTU5YywgMHhhNGEwLAotCTB4YTdhNCwgMHhhNmE4LCAweDlkODYsIDB4MDAyYywgMHgwOTA0LCAweDE3ZGIsIDB4YTNhYywgMHhhMmIwLAotCTB4MDBhOCwgMHhhNWI0LCAweGE0YjgsIDB4YTdiYywgMHhhNmMwLCAweDlkODYsIDB4MDAyYywgMHgwOTA0LAotCTB4MTdkYiwgMHhhM2M0LCAweGEyYzgsIDB4MDA1MCwgMHhhNWNjLCAweGE0ZDAsIDB4YTdkNCwgMHhhNmQ4LAotCTB4OWQ4NiwgMHgwMDJjLCAweDA5MDQsIDB4MTdkYiwgMHhhM2RjLCAweGEyZTAsIDB4YWIyZSwgMHhhYTMyLAotCTB4YWQxZSwgMHhhYzIyLCAweGFmMjYsIDB4YWUyYSwgMHhhOTg4LCAweDhjNjAsIDB4MmMxZCwgMHhhOGFjLAotCTB4YWFiMCwgMHhhODM2LCAweGFhM2EsIDB4ODEwOSwgMHhhOTE2LCAweDExNjAsIDB4M2U2MCwgMHg2MDFjLAotCTB4YzA4NSwgMHg2MDFlLCAweGE4N2MsIDB4YzBkZCwgMHhhODdlLCAweDkwMDYsIDB4MDBjZSwgMHgwMDFlLAotCTB4MDEyZSwgMHgwMDA1LCAweDI4MDAsIDB4YTgwZSwgMHhhYjBhLCAweDJjMDAsIDB4YTgxMiwgMHgwYzcwLAotCTB4MDgwNCwgMHgxN2NkLCAweDJmZjAsIDB4MDEyNiwgMHgyMDkxLCAweDIyMDAsIDB4MDAxNiwgMHgwMGM2LAotCTB4M2U2MCwgMHg2MDE0LCAweDIwNDgsIDB4Mjk0MCwgMHhhODBlLCAweDIwNjEsIDB4MWVkOSwgMHhhODEzLAotCTB4MWVkOSwgMHgyYzA1LCAweGE4MGEsIDB4YTk2NCwgMHhhOTFhLCAweGE4N2MsIDB4ZDBhYywgMHgwOTBjLAotCTB4MGQ3OSwgMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLAotCTB4MGQ3OSwgMHhhZGNjLCAweGFjZDAsIDB4YWZkNCwgMHhhZWQ4LCAweGFiZGMsIDB4YWFlMCwgMHhhYjJlLAorCTB4ZDA4NCwgMHgxOTBjLCAweDEyMDAsIDB4MjA3MSwgMHgxODAwLCAweDcwMDMsIDB4MDAwMCwgMHg3ODBjLAorCTB4OTA4NCwgMHgwMDMwLCAweDkwODYsIDB4MDAyMCwgMHgxMTY4LCAweDcwMzQsIDB4YzA4ZCwgMHg3MDM2LAorCTB4MjAwMSwgMHgwMDUwLCAweDcwNzYsIDB4NzA3YSwgMHg3MDU2LCAweDYwNmIsIDB4MjY5YywgMHgyMDcxLAorCTB4MWI3MywgMHgyMDcyLCAweDIwNzEsIDB4MTgwMCwgMHg3MDAwLCAweDkwOGUsIDB4MDAwMywgMHgxMTY4LAorCTB4MDgwYywgMHg0ZDY2LCAweDA4MGMsIDB4MzViNSwgMHgwODBjLCAweDdiMzIsIDB4MDgwYywgMHg3Mjc1LAorCTB4MDgwYywgMHg4ZDQ0LCAweDA4MGMsIDB4ODhlNywgMHgwYzY4LCAweDAwMGIsIDB4MGM4OCwgMHgwOTc5LAorCTB4MDk3YSwgMHgwYjE1LCAweDA5NzcsIDB4MGJjZiwgMHgwZDE2LCAweDBkMTYsIDB4MGQxNiwgMHgwODBjLAorCTB4MGQ4NSwgMHgwMDA1LCAweDAxMjYsIDB4MDBmNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwMCwgMHg5MDg2LAorCTB4MDAwMSwgMHgxOTA0LCAweDBhZTgsIDB4MDgwYywgMHgwZWM0LCAweDA4MGMsIDB4Nzc5ZSwgMHgwMTUwLAorCTB4MDgwYywgMHg3N2MxLCAweDE1YjAsIDB4MjA3OSwgMHgwMTAwLCAweDc4MjgsIDB4OTA4NSwgMHgxODAwLAorCTB4NzgyYSwgMHgwNDc4LCAweDA4MGMsIDB4NzZjZCwgMHg3MDAwLCAweDkwODYsIDB4MDAwMSwgMHgxOTA0LAorCTB4MGFlOCwgMHg3MDk4LCAweDkwODYsIDB4MDAyOSwgMHgxOTA0LCAweDBhZTgsIDB4MDgwYywgMHg4OGE3LAorCTB4MDgwYywgMHg4ODk5LCAweDIwMDEsIDB4MDE2MSwgMHgyMDAzLCAweDAwMDEsIDB4MjA3OSwgMHgwMTAwLAorCTB4MjAxMSwgMHhmZmZmLCAweDA4MGMsIDB4MmFkMywgMHg3YTI4LCAweDkyOTUsIDB4NWUyYywgMHg3YTJhLAorCTB4MjAxMSwgMHg3NjEyLCAweDA4MGMsIDB4ODk5MywgMHgyMDExLCAweDc2MDUsIDB4MDgwYywgMHg4YTlmLAorCTB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4ODk5MywgMHgyMDExLCAweDgwMzAsIDB4OTAxZSwgMHg3Mzk2LAorCTB4MDRkMCwgMHgwODBjLCAweDU4YWEsIDB4MjA3OSwgMHgwMTAwLCAweDc4NDQsIDB4OTAwNSwgMHgxOTA0LAorCTB4MGFlOCwgMHgyMDExLCAweDYwMDIsIDB4MDgwYywgMHg4OTkzLCAweDIwMTEsIDB4NzYxMiwgMHgwODBjLAorCTB4ODk5MywgMHgyMDExLCAweDc2MDUsIDB4MDgwYywgMHg4YTlmLCAweDIwMDEsIDB4MDI2NSwgMHgyMDAxLAorCTB4MDIwNSwgMHgyMDAzLCAweDAwMDAsIDB4Nzg0MCwgMHg5MDg0LCAweGZmZmIsIDB4Nzg0MiwgMHgyMDAxLAorCTB4MTlhNywgMHgyMDA0LCAweDkwMDUsIDB4MTE0MCwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHgwODBjLAorCTB4NjE1MywgMHgwMGNlLCAweDA4MDQsIDB4MGFlOCwgMHg3ODBmLCAweDAwNmIsIDB4N2EyOCwgMHgwODBjLAorCTB4NzdhNiwgMHgwMTE4LCAweDkyOTUsIDB4NWUyYywgMHgwMDEwLCAweDkyOTUsIDB4NDAyYywgMHg3YTJhLAorCTB4MjAxMSwgMHg4MDEwLCAweDczZDgsIDB4MjAwMSwgMHgxOWE4LCAweDIwMDMsIDB4MDAwMSwgMHgwODBjLAorCTB4Mjk5YiwgMHgwODBjLCAweDRjYTEsIDB4NzI0OCwgMHhjMjg0LCAweDcyNGEsIDB4MjAwMSwgMHgxODBjLAorCTB4MjAwYywgMHhjMWFjLCAweGMxY2MsIDB4MjEwMiwgMHgyMDAxLCAweDAzOTAsIDB4MjAwMywgMHgwNDAwLAorCTB4MDgwYywgMHhhY2ZjLCAweDA4MGMsIDB4YTRmMSwgMHgyMDExLCAweDAwMDQsIDB4MDgwYywgMHhjZjJiLAorCTB4MDgwYywgMHhhZDE4LCAweDA4MGMsIDB4NmFiMSwgMHgwODBjLCAweDc3OWUsIDB4MTEyMCwgMHgwODBjLAorCTB4MjlmYywgMHgwNjAwLCAweDA0MjAsIDB4MDgwYywgMHg2MTVhLCAweDAxNDAsIDB4NzA5NywgMHgwMDAxLAorCTB4NzBkMywgMHgwMDAwLCAweDA4MGMsIDB4NWE3YywgMHgwODA0LCAweDBhZTgsIDB4MjAwMSwgMHgwMzkwLAorCTB4MjAwMywgMHgwNDA0LCAweDA4MGMsIDB4NTg0MCwgMHhkMDk0LCAweDAxODgsIDB4MjAxMSwgMHgxODBjLAorCTB4MjIwNCwgMHhjMGNkLCAweDIwMTIsIDB4MDgwYywgMHg1ODQ0LCAweGQwZDQsIDB4MTExOCwgMHgwODBjLAorCTB4MjlmYywgMHgxMjcwLCAweDIwMTEsIDB4MTgwYywgMHgyMjA0LCAweGMwYmMsIDB4MDBhOCwgMHgwODBjLAorCTB4NTg0NCwgMHhkMGQ0LCAweDFkYjgsIDB4MjAxMSwgMHgxODBjLCAweDIyMDQsIDB4YzBiZCwgMHgwMDYwLAorCTB4MjAxMSwgMHgxODBjLCAweDIyMDQsIDB4YzBiZCwgMHgyMDEyLCAweDA4MGMsIDB4NmMwOSwgMHgxMTI4LAorCTB4ZDBhNCwgMHgwMTE4LCAweDIyMDQsIDB4YzBmZCwgMHgyMDEyLCAweDA4MGMsIDB4NmJjZiwgMHgwMTIwLAorCTB4N2EwYywgMHhjMmI0LCAweDdhMGUsIDB4MDBhOCwgMHg3MDdmLCAweDAwMDAsIDB4MDgwYywgMHg3NzllLAorCTB4MTEzMCwgMHg3MGIwLCAweDkwMDUsIDB4MTE2OCwgMHgwODBjLCAweGQzODksIDB4MDA1MCwgMHgwODBjLAorCTB4ZDM4OSwgMHg3MGRjLCAweGQwOWMsIDB4MTEyOCwgMHg3MGIwLCAweDkwMDUsIDB4MDExMCwgMHgwODBjLAorCTB4NjEzMCwgMHg3MGU3LCAweDAwMDAsIDB4NzBlMywgMHgwMDAwLCAweDcwYTcsIDB4MDAwMCwgMHgwODBjLAorCTB4MmEwNCwgMHgwMjI4LCAweDIwMTEsIDB4MDEwMSwgMHgyMjA0LCAweGMwYzQsIDB4MjAxMiwgMHg3MmRjLAorCTB4MDgwYywgMHg3NzllLCAweDExNzgsIDB4OTAxNiwgMHgwMDE2LCAweDA4MGMsIDB4MjdhNCwgMHgyMDE5LAorCTB4MTk2ZCwgMHgyMTFhLCAweDAwMWUsIDB4NzA1ZiwgMHhmZmZmLCAweDcwNjMsIDB4MDBlZiwgMHg3MDgzLAorCTB4MDAwMCwgMHgwMDIwLCAweDIwMTksIDB4MTk2ZCwgMHgyMDFiLCAweDAwMDAsIDB4MjA3OSwgMHgxODQ3LAorCTB4NzgwNCwgMHhkMGFjLCAweDAxMDgsIDB4YzI5NSwgMHg3MmRlLCAweDA4MGMsIDB4Nzc5ZSwgMHgwMTE4LAorCTB4OTI5NiwgMHgwMDA0LCAweDA1MTgsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4Y2YyYiwgMHg3MGFiLAorCTB4MDAwMCwgMHg3MGFmLCAweGZmZmYsIDB4NzAwMywgMHgwMDAyLCAweDAwZmUsIDB4MDgwYywgMHgzMGJmLAorCTB4MDgwYywgMHhhY2ZjLCAweDIwMTEsIDB4MDAwNSwgMHgwODBjLCAweGE2MmIsIDB4MDgwYywgMHhhZDE4LAorCTB4MDgwYywgMHg3NzllLCAweDAxNDgsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4MDAxNiwgMHgwODBjLAorCTB4MjdhNCwgMHg2MWUyLCAweDAwMWUsIDB4MDBjZSwgMHgwMTJlLCAweDAwZTAsIDB4NzBhYiwgMHgwMDAwLAorCTB4NzBhZiwgMHhmZmZmLCAweDcwMDMsIDB4MDAwMiwgMHgwODBjLCAweGFjZmMsIDB4MjAxMSwgMHgwMDA1LAorCTB4MDgwYywgMHhhNjJiLCAweDA4MGMsIDB4YWQxOCwgMHgwODBjLCAweDc3OWUsIDB4MDE0OCwgMHgwMGM2LAorCTB4MjA2MSwgMHgwMTAwLCAweDAwMTYsIDB4MDgwYywgMHgyN2E0LCAweDYxZTIsIDB4MDAxZSwgMHgwMGNlLAorCTB4MDBmZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGI2LCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTE4LAorCTB4MjBhOSwgMHgwODAwLCAweDAwMTAsIDB4MjBhOSwgMHgwNzgyLCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTEwLAorCTB4OTAwZSwgMHgwMDEwLCAweDIwMDksIDB4MDA3ZSwgMHg4NmZmLCAweDAxMzgsIDB4OTE4MCwgMHgxMDAwLAorCTB4MjAwNCwgMHg5MDVkLCAweDAxMTAsIDB4YjgwMCwgMHhkMGJjLCAweDA5MGMsIDB4MzQxZSwgMHg4MTA4LAorCTB4MWYwNCwgMHgwYWZjLCAweDcwN2YsIDB4MDAwMCwgMHg3MDgwLCAweDkwODQsIDB4MDBmZiwgMHg3MDgyLAorCTB4NzBiMywgMHgwMDAwLCAweDAwYmUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYjYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg3MDAwLCAweDkwODYsIDB4MDAwMiwgMHgxOTA0LCAweDBiY2MsIDB4NzBhYywgMHg5MDg2LAorCTB4ZmZmZiwgMHgwMTIwLCAweDA4MGMsIDB4MzBiZiwgMHgwODA0LCAweDBiY2MsIDB4NzBkYywgMHhkMGFjLAorCTB4MTExMCwgMHhkMDljLCAweDA1MzgsIDB4ZDA4NCwgMHgwNTI4LCAweDAwMDYsIDB4MjAwMSwgMHgwMTAzLAorCTB4MjAwMywgMHgwMDJiLCAweDAwMGUsIDB4ZDA4YywgMHgwMWU4LCAweDA4MGMsIDB4MzQ4NywgMHgxMWIwLAorCTB4NzBlMCwgMHg5MDg2LCAweGZmZmYsIDB4MDE5MCwgMHgwODBjLCAweDMyN2IsIDB4NzBkYywgMHhkMDk0LAorCTB4MTkwNCwgMHgwYmNjLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweGQ2NDUsIDB4MDExMCwgMHgyMDExLAorCTB4MDAwMywgMHg5MDFlLCAweDA4MGMsIDB4MzJiNSwgMHgwODA0LCAweDBiY2MsIDB4NzBlNCwgMHg5MDA1LAorCTB4MTkwNCwgMHgwYmNjLCAweDcwYTgsIDB4OTAwNSwgMHgxOTA0LCAweDBiY2MsIDB4NzBkYywgMHhkMGE0LAorCTB4MDExOCwgMHhkMGI0LCAweDA5MDQsIDB4MGJjYywgMHgwODBjLCAweDZiY2YsIDB4MTkwNCwgMHgwYmNjLAorCTB4MDgwYywgMHg2YzIyLCAweDE5MDQsIDB4MGJjYywgMHgwODBjLCAweDZjMDksIDB4MDFjMCwgMHgwMTU2LAorCTB4MDBjNiwgMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwMDE2LCAweDA4MGMsIDB4NjdiNCwgMHgxMTE4LAorCTB4YjgwMCwgMHhkMGVjLCAweDExMzgsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4MGI2YywgMHgwMGNlLAorCTB4MDE1ZSwgMHgwMDI4LCAweDAwMWUsIDB4MDBjZSwgMHgwMTVlLCAweDA4MDQsIDB4MGJjYywgMHgwMDA2LAorCTB4MjAwMSwgMHgwMTAzLCAweDIwMDMsIDB4MDAyYiwgMHgwMDBlLCAweDIwMTEsIDB4MTliNCwgMHgwODBjLAorCTB4MGZlMSwgMHgyMDExLCAweDE5Y2UsIDB4MDgwYywgMHgwZmUxLCAweDcwMzAsIDB4YzA4YywgMHg3MDMyLAorCTB4NzAwMywgMHgwMDAzLCAweDcwYWYsIDB4ZmZmZiwgMHgwODBjLCAweDBlOTgsIDB4OTAwNiwgMHgwODBjLAorCTB4MjYzMSwgMHgwODBjLCAweDM0ODcsIDB4MDExOCwgMHgwODBjLCAweDRlM2UsIDB4MDA1MCwgMHgwMDM2LAorCTB4MDA0NiwgMHgyMDE5LCAweGZmZmYsIDB4MjAyMSwgMHgwMDA2LCAweDA4MGMsIDB4NGU1OCwgMHgwMDRlLAorCTB4MDAzZSwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgwODBjLCAweDc3YzEsIDB4MDE1MCwgMHgwODBjLAorCTB4Nzc5ZSwgMHg3ODI4LCAweDAxMTgsIDB4OTA4NCwgMHhlMWZmLCAweDAwMTAsIDB4OTA4NCwgMHhmZmRmLAorCTB4NzgyYSwgMHgwMGZlLCAweDA4MGMsIDB4YWNmYywgMHgyMDAxLCAweDE5ZTksIDB4MjAwNCwgMHg5MDg2LAorCTB4MDAwNSwgMHgxMTIwLCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweGE2MmIsIDB4MjAxMSwgMHgwMDAwLAorCTB4MDgwYywgMHhhNjM1LCAweDA4MGMsIDB4YWQxOCwgMHgwMTJlLCAweDAwYmUsIDB4MDAwNSwgMHgwMDE2LAorCTB4MDAyNiwgMHgwMDQ2LCAweDAwZjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgwMTAwLAorCTB4NzkwNCwgMHg5MThjLCAweGZmZmQsIDB4NzkwNiwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg2MTE5LAorCTB4Nzk0MCwgMHg5MThjLCAweDAwMTAsIDB4Nzk0MiwgMHg3OTI0LCAweGQxYjQsIDB4MDEyMCwgMHgyMDExLAorCTB4MDA0MCwgMHgwODBjLCAweDJhZDMsIDB4ZDE5YywgMHgwMTIwLCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLAorCTB4MmFkMywgMHgwMDA2LCAweDAwMzYsIDB4MDE1NiwgMHgwMDAwLCAweDIwMDEsIDB4MTlhOCwgMHgyMDA0LAorCTB4OTAwNSwgMHgxNTE4LCAweDA4MGMsIDB4MmE2NywgMHgxMTQ4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAorCTB4MjljYSwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyOWFkLCAweDAwYjgsIDB4MDgwYywgMHgyYTZmLAorCTB4MTEzOCwgMHg5MDA2LCAweDA4MGMsIDB4MjljYSwgMHg5MDA2LCAweDA4MGMsIDB4MjlhZCwgMHgwMDY4LAorCTB4MDgwYywgMHgyYTc3LCAweDFkNTAsIDB4MjAwMSwgMHgxOTk4LCAweDIwMDQsIDB4ZDBmYywgMHgwMTA4LAorCTB4MDAyMCwgMHgwODBjLCAweDI3ZDgsIDB4MDgwNCwgMHgwY2M5LCAweDIwYTksIDB4MDAzYSwgMHgxZDA0LAorCTB4MGMxZiwgMHgwODBjLCAweDhhN2YsIDB4MWYwNCwgMHgwYzFmLCAweDA4MGMsIDB4NzdhZiwgMHgwMTQ4LAorCTB4MDgwYywgMHg3N2MxLCAweDExMTgsIDB4MDgwYywgMHg3YWM1LCAweDAwNTAsIDB4MDgwYywgMHg3N2E2LAorCTB4MGRkMCwgMHgwODBjLCAweDdhYzAsIDB4MDgwYywgMHg3YWI2LCAweDA4MGMsIDB4NzZjZCwgMHgwMDIwLAorCTB4MjAwOSwgMHgwMGY4LCAweDA4MGMsIDB4NjExOSwgMHg3ODUwLCAweGMwZTUsIDB4Nzg1MiwgMHgwODBjLAorCTB4Nzc5ZSwgMHgwMTIwLCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjAyMSwgMHhlNjc4LAorCTB4MjAxOSwgMHhlYTYwLCAweDBkMGMsIDB4OGE3ZiwgMHg3ODIwLCAweGQwOWMsIDB4MTVhMCwgMHgwODBjLAorCTB4Nzc5ZSwgMHgwOTA0LCAweDBjYWIsIDB4NzgyNCwgMHhkMGFjLCAweDE5MDQsIDB4MGNjZSwgMHgwODBjLAorCTB4NzdjMSwgMHgxNTQ4LCAweDAwNDYsIDB4MjAyMSwgMHgwMzIwLCAweDg0MjEsIDB4MWRmMCwgMHgwMDRlLAorCTB4MjAxMSwgMHgxODAwLCAweDA4MGMsIDB4MmFkMywgMHgwODBjLCAweDJhN2YsIDB4NzgyNCwgMHg5MDg0LAorCTB4MTgwMCwgMHgxMTY4LCAweDk0ODQsIDB4MGZmZiwgMHgxMTQwLCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LAorCTB4OTA4NCwgMHg5MDAwLCAweDAxMTAsIDB4MDgwYywgMHgwY2YxLCAweDg0MjEsIDB4MTE2MCwgMHgxZDA0LAorCTB4MGM3YiwgMHgwODBjLCAweDhhN2YsIDB4MDgwYywgMHg3YWMwLCAweDA4MGMsIDB4N2FiNiwgMHg3MDAzLAorCTB4MDAwMSwgMHgwODA0LCAweDBjY2UsIDB4ODMxOSwgMHgxOTI4LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LAorCTB4OTA4NCwgMHg5MDAwLCAweDAxMTAsIDB4MDgwYywgMHgwY2YxLCAweDFkMDQsIDB4MGM5MSwgMHgwODBjLAorCTB4OGE3ZiwgMHgyMDA5LCAweDE5OWIsIDB4MjEwNCwgMHg5MDA1LCAweDAxMTgsIDB4ODAwMSwgMHgyMDBhLAorCTB4MTE4OCwgMHgyMDBiLCAweDAwMGEsIDB4MjAxMSwgMHgwMDQ4LCAweDA4MGMsIDB4MmFkMywgMHgyMGE5LAorCTB4MDAwMiwgMHgwODBjLCAweDJhNjAsIDB4NzkyNCwgMHgwODBjLCAweDJhN2YsIDB4ZDE5YywgMHgwMTEwLAorCTB4MDgwYywgMHgyOTliLCAweDAwZjAsIDB4MDgwYywgMHg3N2FmLCAweDExNDAsIDB4OTRhMiwgMHgwM2U4LAorCTB4MTEyOCwgMHgwODBjLCAweDc3NzIsIDB4NzAwMywgMHgwMDAxLCAweDAwYzAsIDB4MjAxMSwgMHgxODAwLAorCTB4MDgwYywgMHgyYWQzLCAweDA4MGMsIDB4MmE3ZiwgMHg3ODI0LCAweDA4MGMsIDB4NzdiOCwgMHgwMTEwLAorCTB4ZDBhYywgMHgxMTYwLCAweDkwODQsIDB4MTgwMCwgMHgwOTA0LCAweDBjODMsIDB4NzAwMywgMHgwMDAxLAorCTB4MDAyOCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjMxLCAweDAwYTAsIDB4Nzg1MCwgMHhjMGU0LAorCTB4Nzg1MiwgMHgyMDA5LCAweDE4MGMsIDB4MjEwYywgMHhkMTljLCAweDExMjAsIDB4NzkwNCwgMHg5MThkLAorCTB4MDAwMiwgMHg3OTA2LCAweDIwMTEsIDB4MDA0OCwgMHgwODBjLCAweDJhZDMsIDB4NzgyOCwgMHg5MDg1LAorCTB4MDAyOCwgMHg3ODJhLCAweDIwMDEsIDB4MTlhOCwgMHgyMDAzLCAweDAwMDAsIDB4OTAwNiwgMHg3OGYyLAorCTB4MDE1ZSwgMHgwMDNlLCAweDAwMGUsIDB4MDEyZSwgMHgwMGZlLCAweDAwNGUsIDB4MDAyZSwgMHgwMDFlLAorCTB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsIDB4MDBiNiwgMHgwMGM2LAorCTB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MDE1NiwgMHgwMDcxLCAweDBkMGMsIDB4OGE3ZiwgMHgwMTVlLAorCTB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLAorCTB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4OWUsIDB4NzAwNCwgMHg5MDg2LAorCTB4MDAwMSwgMHgxMTEwLCAweDA4MGMsIDB4MzViNSwgMHgwMGVlLCAweDAwMDUsIDB4MDAwNSwgMHgyYTcwLAorCTB4MjA2MSwgMHgxOWFjLCAweDIwNjMsIDB4MDAwMywgMHg2MDA3LCAweDAwMDMsIDB4NjAwYiwgMHgwMDE0LAorCTB4NjAwZiwgMHgwMTM3LCAweDIwMDEsIDB4MTk3YywgMHg5MDBlLCAweDIxMDIsIDB4NzE5NiwgMHgyMDAxLAorCTB4MDEwMCwgMHgyMDA0LCAweDkwODIsIDB4MDAwMiwgMHgwMjE4LCAweDcwNWYsIDB4ZmZmZiwgMHgwMDA4LAorCTB4NzE1ZSwgMHg3MDY3LCAweGZmZmYsIDB4NzE3ZSwgMHg3MTgyLCAweDA4MGMsIDB4ZDM4OSwgMHg3MGVmLAorCTB4MDBjMCwgMHgyMDYxLCAweDE5NmMsIDB4NjAwMywgMHgwOTA5LCAweDYxMDYsIDB4NjAwYiwgMHg4ODAwLAorCTB4NjAwZiwgMHgwMjAwLCAweDYwMTMsIDB4MDBmZiwgMHg2MDE3LCAweDAwMWYsIDB4NjExYSwgMHg2MDFmLAorCTB4MDdkMCwgMHgyMDYxLCAweDE5NzQsIDB4NjAwMywgMHg4MDAwLCAweDYxMDYsIDB4NjEwYSwgMHg2MDBmLAorCTB4MDIwMCwgMHg2MDEzLCAweDAwZmYsIDB4NjExNiwgMHg2MDFiLCAweDAwMDEsIDB4NjExZSwgMHgyMDYxLAorCTB4MTk4OSwgMHg2MDAzLCAweDUxNGMsIDB4NjAwNywgMHg0ZjQ3LCAweDYwMGIsIDB4NDk0MywgMHg2MDBmLAorCTB4MjAyMCwgMHgyMDAxLCAweDE4MmMsIDB4MjEwMiwgMHgwMDA1LCAweDkwMTYsIDB4MDgwYywgMHg2N2I0LAorCTB4MTE3OCwgMHhiODA0LCAweDkwYzQsIDB4MDBmZiwgMHg5OGM2LCAweDAwMDYsIDB4MDEyOCwgMHg5MGM0LAorCTB4ZmYwMCwgMHg5OGM2LCAweDA2MDAsIDB4MTEyMCwgMHg5MTg2LCAweDAwODAsIDB4MDEwOCwgMHg4MjEwLAorCTB4ODEwOCwgMHg5MTg2LCAweDA4MDAsIDB4MWQ1MCwgMHgyMjA4LCAweDAwMDUsIDB4MjA5MSwgMHg4MDAwLAorCTB4MjA3OSwgMHgwMDAwLCAweDAwMGUsIDB4MDBmNiwgMHgwMDEwLCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LAorCTB4MGQ4NywgMHgwMDA2LCAweDAwMTYsIDB4MjAwMSwgMHg4MDAyLCAweDAwMDYsIDB4MjA3OSwgMHgwMDAwLAorCTB4MDAwZSwgMHg3ODgyLCAweDc4MzYsIDB4MDAxZSwgMHg3OThlLCAweDAwMGUsIDB4Nzg4YSwgMHgwMDBlLAorCTB4Nzg4NiwgMHgzOTAwLCAweDc4OWEsIDB4MDBkNiwgMHgyMDY5LCAweDAzMDAsIDB4NjgxOCwgMHg3OGFlLAorCTB4NjgxYywgMHg3OGIyLCAweDY4MDgsIDB4NzhiZSwgMHgwMGRlLCAweDc4MzMsIDB4MDAxMiwgMHgyMDkxLAorCTB4NTAwMCwgMHgwMTU2LCAweDAwZDYsIDB4MDAzNiwgMHgwMDI2LCAweDIwNzksIDB4MDMwMCwgMHgyMDY5LAorCTB4MWIyYiwgMHg3YTA4LCAweDIyNmEsIDB4MjA2OSwgMHgxYjJjLCAweDdhMTgsIDB4MjI2YSwgMHg4ZDY4LAorCTB4N2ExYywgMHgyMjZhLCAweDc4MmMsIDB4MjAxOSwgMHgxYjM5LCAweDIwMWEsIDB4MjAxOSwgMHgxYjNjLAorCTB4OTAxNiwgMHg3ODA4LCAweGQwOWMsIDB4MDE2OCwgMHg3ODIwLCAweDIwMWEsIDB4ODIxMCwgMHg4MzE4LAorCTB4OTM4NiwgMHgxYjU1LCAweDAxMDgsIDB4MGNhOCwgMHg3ODA4LCAweGQwOWMsIDB4MDExMCwgMHgyMDExLAorCTB4ZGVhZCwgMHgyMDE5LCAweDFiM2EsIDB4NzgyYywgMHgyMDFhLCAweDgzMTgsIDB4MjIxYSwgMHg3ODAzLAorCTB4MDAwMCwgMHgyMDY5LCAweDFhODEsIDB4OTAxZSwgMHgyMGE5LCAweDAwMjAsIDB4N2IyNiwgMHg3YTI4LAorCTB4MjI2YSwgMHg4ZDY4LCAweDgzMTgsIDB4MWYwNCwgMHgwZGRlLCAweDIwNjksIDB4MWFhMSwgMHgyMDE5LAorCTB4MDA1MCwgMHgyMGE5LCAweDAwMjAsIDB4N2IyNiwgMHg3YTI4LCAweDIyNmEsIDB4OGQ2OCwgMHg4MzE4LAorCTB4MWYwNCwgMHgwZGViLCAweDA0OTEsIDB4MDAyZSwgMHgwMDNlLCAweDAwZGUsIDB4MDE1ZSwgMHgyMDc5LAorCTB4MTgwMCwgMHg3ODAzLCAweDAwMDUsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LAorCTB4ZDA4NCwgMHgwMTgwLCAweDIwMDEsIDB4MWEyNSwgMHgyMDA0LCAweDkwMDUsIDB4MDEyOCwgMHgyMDAxLAorCTB4MDA4YiwgMHgyMDA0LCAweGQwZmMsIDB4MGRkOCwgMHgyMDAxLCAweDAwOGEsIDB4MjAwMywgMHgwMDAyLAorCTB4MjAwMywgMHgxMDAxLCAweDA4MGMsIDB4NTg0ZiwgMHgxMTcwLCAweDA4MGMsIDB4MGYzMiwgMHgwMTEwLAorCTB4MDgwYywgMHgwZTg1LCAweDA4MGMsIDB4NTg0ZiwgMHgxMTMwLCAweDIwNzEsIDB4MTgwMCwgMHgyMDExLAorCTB4ODAwMCwgMHgwODBjLCAweDBmNDYsIDB4MGM3MCwgMHgwMDA1LCAweDIwMDEsIDB4MDM4MiwgMHgyMDA0LAorCTB4OTA4NCwgMHgwMDA3LCAweDkwODYsIDB4MDAwMSwgMHgxMTIwLCAweDIwMDEsIDB4MDAxNSwgMHgwODBjLAorCTB4YWNlZCwgMHgyMDc5LCAweDAzODAsIDB4MjA2OSwgMHgxYjBiLCAweDc4MTgsIDB4NjgwMiwgMHg3ODFjLAorCTB4NjgwNiwgMHg3ODQwLCAweDY4MGEsIDB4Nzg0NCwgMHg2ODBlLCAweDc4MmMsIDB4NjgxMiwgMHgyMDE5LAorCTB4MWIxNiwgMHg5MDE2LCAweDc4MDgsIDB4ZDA5YywgMHgwMTUwLCAweDc4MjAsIDB4MjAxYSwgMHg4MjEwLAorCTB4ODMxOCwgMHg4MjEwLCAweDkyODIsIDB4MDAxMSwgMHgwZWE4LCAweDIwMTEsIDB4ZGVhZCwgMHg2YTJhLAorCTB4NzgzMCwgMHg2ODFhLCAweDc4MzQsIDB4NjgxZSwgMHg3ODM4LCAweDY4MjIsIDB4NzgzYywgMHg2ODI2LAorCTB4NzgwMywgMHgwMDAwLCAweDIwNjksIDB4MWFjYiwgMHg5MDFlLCAweDIwYTksIDB4MDAyMCwgMHg3YjI2LAorCTB4NzgyOCwgMHgyMDZhLCAweDhkNjgsIDB4ODMxOCwgMHgxZjA0LCAweDBlNWYsIDB4MjA2OSwgMHgxYWViLAorCTB4MjAxOSwgMHgwMGIwLCAweDIwYTksIDB4MDAyMCwgMHg3YjI2LCAweDc4MjgsIDB4MjA2YSwgMHg4ZDY4LAorCTB4ODMxOCwgMHgxZjA0LCAweDBlNmMsIDB4MDAwNSwgMHg5MThjLCAweDAzZmYsIDB4MjAwMSwgMHgwMDAzLAorCTB4MjAwNCwgMHg5MDg0LCAweDA2MDAsIDB4MTExOCwgMHg5MThkLCAweDZjMDAsIDB4MDAxMCwgMHg5MThkLAorCTB4NjQwMCwgMHgyMDAxLCAweDAxN2YsIDB4MjEwMiwgMHgwMDA1LCAweDAwMjYsIDB4MDEyNiwgMHgyMDExLAorCTB4MDA4MCwgMHgwODBjLCAweDBmMjQsIDB4MjBhOSwgMHgwOTAwLCAweDA4MGMsIDB4MGY1YSwgMHgyMDExLAorCTB4MDA0MCwgMHgwODBjLCAweDBmMjQsIDB4MjBhOSwgMHgwOTAwLCAweDA4MGMsIDB4MGY1YSwgMHgwYzc4LAorCTB4MDAyNiwgMHgwODBjLCAweDBmMzIsIDB4MTE4OCwgMHgyMDExLCAweDAxMGUsIDB4MjIxNCwgMHg5Mjk0LAorCTB4MDAwNywgMHg5Mjk2LCAweDAwMDcsIDB4MDExOCwgMHgyMDExLCAweDA5NDcsIDB4MDAxMCwgMHgyMDExLAorCTB4MWI0NywgMHgwODBjLCAweDBmNDYsIDB4MDAyZSwgMHgwMDA1LCAweDIwMTEsIDB4MDEwZSwgMHgyMjE0LAorCTB4OTI5NCwgMHgwMDA3LCAweDkyOTYsIDB4MDAwNywgMHgwMTE4LCAweDIwMTEsIDB4YTg4MCwgMHgwMDEwLAorCTB4MjAxMSwgMHg2ODQwLCAweGQwZTQsIDB4NzBmMywgMHgwMDAwLCAweDExMjAsIDB4NzBmMywgMHgwZmEwLAorCTB4MDgwYywgMHgwZjM3LCAweDAwMmUsIDB4MDAwNSwgMHgwMDI2LCAweDA4MGMsIDB4MGYzMiwgMHgwMTQ4LAorCTB4ZDBhNCwgMHgxMTM4LCAweDIwMTEsIDB4Y2RkNSwgMHgwMDEwLCAweDIwMTEsIDB4MDA4MCwgMHgwODBjLAorCTB4MGYzNywgMHgwMDJlLCAweDAwMDUsIDB4MDAyNiwgMHg3MGYzLCAweDAwMDAsIDB4MDgwYywgMHgwZjMyLAorCTB4MTEzMCwgMHgyMDExLCAweDgwNDAsIDB4MDgwYywgMHgwZjQ2LCAweDAwMmUsIDB4MDAwNSwgMHgwODBjLAorCTB4MmE3NywgMHgxMTE4LCAweDIwMTEsIDB4Y2RjNSwgMHgwMDEwLCAweDIwMTEsIDB4Y2FjMiwgMHgwODBjLAorCTB4MGYzNywgMHgwMDJlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDE2LCAweDAwMDYsIDB4MjA3MSwgMHgxODAwLAorCTB4ZDBiNCwgMHg3MGVjLCAweDcxZTgsIDB4MTExOCwgMHhjMGU0LCAweGMxZjQsIDB4MDA1MCwgMHgwMDA2LAorCTB4M2IwMCwgMHg5MDg0LCAweGZmM2UsIDB4MjBkOCwgMHgwMDBlLCAweDcwZjMsIDB4MDAwMCwgMHhjMGU1LAorCTB4YzFmNSwgMHgwMDk5LCAweDAwMGUsIDB4MDAxZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAorCTB4MTgwMCwgMHhkMGU0LCAweDcwZWMsIDB4MTExMCwgMHhjMGRjLCAweDAwMDgsIDB4YzBkZCwgMHgwMDE2LAorCTB4NzFlOCwgMHgwMDE5LCAweDAwMWUsIDB4MDBlZSwgMHgwMDA1LCAweDcwZWUsIDB4NzFlYSwgMHg3MDAwLAorCTB4OTA4NCwgMHgwMDA3LCAweDAwMGIsIDB4MDAwNSwgMHgwZWVhLCAweDBlYzQsIDB4MGVjNCwgMHgwZTk4LAorCTB4MGVkMywgMHgwZWM0LCAweDBlYzQsIDB4MGVkMywgMHhjMjg0LCAweDAwMTYsIDB4M2IwOCwgMHgzYTAwLAorCTB4OTEwNCwgMHg5MThkLCAweDAwYzEsIDB4MjFkOCwgMHg5MDg0LCAweGZmM2UsIDB4OTIwNSwgMHgyMGQwLAorCTB4MDAxZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgzYiwgMHgyMDA0LCAweGQwZGMsIDB4MDAwNSwgMHg5ZTg2LAorCTB4MTgwMCwgMHgxOTBjLCAweDBkODUsIDB4NzBlYywgMHhkMGU0LCAweDAxMDgsIDB4YzJlNSwgMHg3MmVlLAorCTB4ZDBlNCwgMHgxMTE4LCAweDkyOTQsIDB4MDBjMSwgMHgwOGY5LCAweDAwMDUsIDB4OWU4NiwgMHgxODAwLAorCTB4MTkwYywgMHgwZDg1LCAweDcwZTgsIDB4ZDBmNCwgMHgwMTA4LCAweGMyZjUsIDB4NzJlYSwgMHhkMGY0LAorCTB4MTE0MCwgMHg5Mjg0LCAweDgwMDAsIDB4ODAwNSwgMHhjMjg0LCAweDkyMTUsIDB4OTI5NCwgMHgwMGMxLAorCTB4MDg2MSwgMHgwMDA1LCAweDFkMDQsIDB4MGY1YSwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHgwZjVhLAorCTB4MDAwNSwgMHg4OTBlLCAweDgxMGUsIDB4ODEwZiwgMHg5MTk0LCAweDAwM2YsIDB4OTE4YywgMHhmZmMwLAorCTB4MDAwNSwgMHgwMDA2LCAweDIyMDAsIDB4OTE0ZCwgMHg4OTRmLCAweDg5NGQsIDB4ODk0ZCwgMHgwMDBlLAorCTB4MDAwNSwgMHgwMWQ2LCAweDAxNDYsIDB4MDAzNiwgMHgwMDk2LCAweDIwNjEsIDB4MTg4ZCwgMHg2MDBiLAorCTB4MDAwMCwgMHg2MDBmLCAweDAwMDAsIDB4NjAwMywgMHgwMDAwLCAweDYwMDcsIDB4MDAwMCwgMHgyMDA5LAorCTB4ZmZjMCwgMHgyMTA1LCAweDAwMDYsIDB4MjAwMSwgMHhhYWFhLCAweDIwMGYsIDB4MjAxOSwgMHg1NTU1LAorCTB4OTAxNiwgMHgyMDQ5LCAweDBiZmYsIDB4YWIwMiwgMHhhMDAxLCAweGEwMDEsIDB4YTgwMCwgMHg5MzA2LAorCTB4MTEzOCwgMHgyMTA1LCAweDkzMDYsIDB4MDEyMCwgMHg4MjEwLCAweDk5YzgsIDB4MDQwMCwgMHgwYzk4LAorCTB4MDAwZSwgMHgyMDBmLCAweDIwMDEsIDB4MTg5ZCwgMHg5MjhhLCAweDAwMGUsIDB4MTYzOCwgMHg5MjhhLAorCTB4MDAwNiwgMHgyMDExLCAweDAwMDYsIDB4MTIxMCwgMHgyMDExLCAweDAwMDAsIDB4MjIwMiwgMHg5MDA2LAorCTB4MjAwOCwgMHg4MmZmLCAweDAxYjAsIDB4ODIwMCwgMHg2MDBhLCAweDYwMGYsIDB4ZmZmZiwgMHg2MDAzLAorCTB4MDAwMiwgMHg2MDA3LCAweDAwMDAsIDB4MDAyNiwgMHgyMDE5LCAweDAwMTAsIDB4OTI4MCwgMHgwMDAxLAorCTB4MjBlOCwgMHgyMWEwLCAweDIxYTgsIDB4NDEwNCwgMHg4MzE5LCAweDFkZTAsIDB4ODIxMSwgMHgxZGEwLAorCTB4MDAyZSwgMHgwMDllLCAweDAwM2UsIDB4MDE0ZSwgMHgwMWRlLCAweDAwMDUsIDB4MjAxMSwgMHgwMDBlLAorCTB4MDhlOCwgMHgwMDE2LCAweDAwMjYsIDB4MDA5NiwgMHgzMzQ4LCAweDA4MGMsIDB4MGY2MSwgMHgyMTAwLAorCTB4OTMwMCwgMHgyMDk4LCAweDIyZTAsIDB4MDA5ZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAzNiwgMHgzNTE4LAorCTB4MjBhOSwgMHgwMDAxLCAweDQwMDIsIDB4ODAwNywgMHg0MDA0LCAweDgzMTksIDB4MWRkOCwgMHgwMDNlLAorCTB4MDAwNSwgMHgyMGU5LCAweDAwMDEsIDB4NzFiOCwgMHg4MWZmLCAweDExYzAsIDB4OTAwNiwgMHgyMDA5LAorCTB4MDIwMCwgMHgyMGE5LCAweDAwMDIsIDB4OTI5OCwgMHgwMDE4LCAweDIzYTAsIDB4NDAwMSwgMHgyMDA5LAorCTB4MDcwMCwgMHgyMGE5LCAweDAwMDIsIDB4OTI5OCwgMHgwMDA4LCAweDIzYTAsIDB4NDAwMSwgMHg3MDdjLAorCTB4ODAwNywgMHg3MTgwLCAweDgxMGYsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDEsIDB4OTI5OCwgMHgwMDBjLAorCTB4MjNhMCwgMHg5MDBlLCAweDA4MGMsIDB4MGQ2NSwgMHgyMDAxLCAweDAwMDAsIDB4ODEwZiwgMHgyMGE5LAorCTB4MDAwMiwgMHg0MDAxLCAweDAwMDUsIDB4ODlmZiwgMHgwMTQwLCAweGE4MDQsIDB4YTgwNywgMHgwMDAwLAorCTB4MDAwNiwgMHgwODBjLCAweDEwOGIsIDB4MDA5ZSwgMHgwY2IwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAorCTB4MTgwMCwgMHgwODBjLCAweDExMDQsIDB4MDkwYywgMHgwZDg1LCAweDAwZWUsIDB4MDAwNSwgMHgwMDg2LAorCTB4MDBlNiwgMHgwMDA2LCAweDAwMjYsIDB4MDAzNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGM5LAorCTB4MjA3MSwgMHgxODAwLCAweDczYzAsIDB4NzAyYywgMHg5MDE2LCAweDkwNDUsIDB4MDE1OCwgMHg4MjEwLAorCTB4OTkwNiwgMHgwOTBjLCAweDBkODUsIDB4MjMwMCwgMHg5MjAyLCAweDAxMjAsIDB4MWEwYywgMHgwZDg1LAorCTB4YTAwMCwgMHgwYzk4LCAweDAxMmUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMGUsIDB4MDBlZSwgMHgwMDhlLAorCTB4MDAwNSwgMHgwMDg2LCAweDAwZTYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAorCTB4MTkxMCwgMHg3MDEwLCAweDkwMDUsIDB4MDE0MCwgMHg3MDE4LCAweDkwNDUsIDB4MDEyOCwgMHg5OTA2LAorCTB4MDkwYywgMHgwZDg1LCAweGEwMDAsIDB4MGNjOCwgMHgwMTJlLCAweDAwMGUsIDB4MDBlZSwgMHgwMDhlLAorCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MGMwLAorCTB4ODAwMSwgMHgwMjcwLCAweDcwYzIsIDB4NzAyYywgMHgyMDQ4LCAweDkwODUsIDB4MDAwMSwgMHhhODAwLAorCTB4NzAyZSwgMHhhODAzLCAweDAwMDAsIDB4YTgwNywgMHgwMDAwLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LAorCTB4OTA0ZSwgMHgwY2Q4LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxODAwLAorCTB4NzBjMCwgMHg5MGNhLCAweDAwMjAsIDB4MDI2OCwgMHg4MDAxLCAweDcwYzIsIDB4NzAyYywgMHgyMDQ4LAorCTB4YTgwMCwgMHg3MDJlLCAweGE4MDMsIDB4MDAwMCwgMHhhODA3LCAweDAwMDAsIDB4MDEyZSwgMHgwMGVlLAorCTB4MDAwNSwgMHg5MDRlLCAweDBjZDgsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDE2LAorCTB4ODkwZSwgMHg4MTBlLCAweDgxMGYsIDB4OTE4NCwgMHgwMDNmLCAweGE4NjIsIDB4OTE4NCwgMHhmZmMwLAorCTB4YTg1ZSwgMHgwMDFlLCAweDAwMjAsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAorCTB4MTgwMCwgMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4ODAwMCwgMHg3MGMyLAorCTB4MDgwYywgMHg4ODk5LCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHg5MDI2LAorCTB4MjAwOSwgMHgwMDAwLCAweDIwNDksIDB4MDQwMCwgMHgyOTAwLCAweDcwMmUsIDB4ODk0MCwgMHgyODAwLAorCTB4YTgwMiwgMHhhOTVlLCAweGE4NjMsIDB4MDAwMSwgMHg4NDIwLCAweDk4ODYsIDB4MDQ0MCwgMHgwMTIwLAorCTB4Mjg0OCwgMHg5MTg4LCAweDAwNDAsIDB4MGM5MCwgMHgyMDcxLCAweDE4OGQsIDB4NzAwMCwgMHg5MDA1LAorCTB4MTFhMCwgMHgyMDAxLCAweDA1NTgsIDB4YTgwMiwgMHgyMDQ4LCAweDIwMDksIDB4NTYwMCwgMHg4OTQwLAorCTB4MjgwMCwgMHhhODAyLCAweGE5NWUsIDB4YTg2MywgMHgwMDAxLCAweDg0MjAsIDB4OTg4NiwgMHgwODAwLAorCTB4MDEyMCwgMHgyODQ4LCAweDkxODgsIDB4MDA0MCwgMHgwYzkwLCAweDIwNzEsIDB4MTg4ZCwgMHg3MTA0LAorCTB4NzIwMCwgMHg4MmZmLCAweDAxZDAsIDB4NzMwOCwgMHg4MzE4LCAweDgzMWYsIDB4ODMxYiwgMHg4MzFiLAorCTB4NzMxMiwgMHg4MzE5LCAweDIwMDEsIDB4MDgwMCwgMHhhODAyLCAweDIwNDgsIDB4ODkwMCwgMHhhODAyLAorCTB4MjA0MCwgMHhhOTVlLCAweGFhNjIsIDB4ODQyMCwgMHgyMzAwLCAweDk5MDYsIDB4MDEzMCwgMHgyODQ4LAorCTB4OTE4OCwgMHgwMDQwLCAweDkyOTEsIDB4MDAwMCwgMHgwYzg4LCAweGE4MDMsIDB4MDAwMCwgMHgyMDcxLAorCTB4MTgwMCwgMHg3NGJlLCAweDc0YzIsIDB4MDAwNSwgMHgwMGU2LCAweDAwMTYsIDB4OTk4NCwgMHhmYzAwLAorCTB4MDFlOCwgMHg5MDhjLCAweGY4MDAsIDB4MTE2OCwgMHg5OTgyLCAweDA0MDAsIDB4MDJiOCwgMHg5OTgyLAorCTB4MDQ0MCwgMHgwMjc4LCAweDk5ODIsIDB4MDU1OCwgMHgwMjg4LCAweDk5ODIsIDB4MDgwMCwgMHgxMjcwLAorCTB4MDA0MCwgMHg5OTgyLCAweDA4MDAsIDB4MDI1MCwgMHgyMDcxLCAweDE4OGQsIDB4NzAxMCwgMHg5OTAyLAorCTB4MTIyOCwgMHg5MDg1LCAweDAwMDEsIDB4MDAxZSwgMHgwMGVlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LAorCTB4MDBlNiwgMHgyMDcxLCAweDFhMjQsIDB4NzAwNywgMHgwMDAwLCAweDkwMDYsIDB4NzAxZSwgMHg3MDIyLAorCTB4NzAwMiwgMHgyMDcxLCAweDAwMDAsIDB4NzAxMCwgMHg5MDg1LCAweDgwNDQsIDB4NzAxMiwgMHgyMDcxLAorCTB4MDA4MCwgMHg5MDA2LCAweDcwMmIsIDB4MDA2MCwgMHgyMGE5LCAweDAwNDAsIDB4NzAyMiwgMHgxZjA0LAorCTB4MTEzZSwgMHg3MDJiLCAweDAwNjAsIDB4NzAyYiwgMHgwMDIwLCAweDIwYTksIDB4MDA0MCwgMHg3MDIyLAorCTB4MWYwNCwgMHgxMTQ3LCAweDcwMmIsIDB4MDAyMCwgMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgwMGU2LCAweGEwNmYsIDB4MDAwMCwgMHgyMDcxLCAweDFhMjQsIDB4NzAxYywgMHg5MDg4LAorCTB4MWEyZSwgMHgyODBhLCAweDgwMDAsIDB4OTA4NCwgMHgwMDNmLCAweDcwMWUsIDB4NzEyMCwgMHg5MTA2LAorCTB4MDkwYywgMHgwZDg1LCAweDcwMDQsIDB4OTAwNSwgMHgxMTI4LCAweDAwZjYsIDB4MjA3OSwgMHgwMDgwLAorCTB4MDBhOSwgMHgwMGZlLCAweDAwZWUsIDB4MDEyZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MDBlNiwgMHgyMDcxLCAweDFhMjQsIDB4NzAwNCwgMHg5MDA1LCAweDExMjgsIDB4MDBmNiwgMHgyMDc5LAorCTB4MDA4MCwgMHgwMDIxLCAweDAwZmUsIDB4MDBlZSwgMHgwMTJlLCAweDAwMDUsIDB4NzAwNCwgMHg5MDg2LAorCTB4MDAwMCwgMHgxMTEwLCAweDcwMDcsIDB4MDAwNiwgMHg3MDAwLCAweDAwMDIsIDB4MTE5MCwgMHgxMzEzLAorCTB4MTE4ZSwgMHgxMThlLCAweDEzMDcsIDB4MTMwNywgMHgxMzA3LCAweDEzMDcsIDB4MDgwYywgMHgwZDg1LAorCTB4NzAxYywgMHg3MTIwLCAweDkxMDYsIDB4MTE0OCwgMHg3OTJjLCAweDkxODQsIDB4MDAwMSwgMHgxMTIwLAorCTB4ZDFmYywgMHgxMTEwLCAweDcwMDcsIDB4MDAwMCwgMHgwMDA1LCAweDAwOTYsIDB4OTE4MCwgMHgxYTJlLAorCTB4MjAwNCwgMHg3MDBhLCAweDIwNDgsIDB4ODEwOCwgMHg5MThjLCAweDAwM2YsIDB4NzEyMiwgMHg3ODJiLAorCTB4MDAyNiwgMHhhODhjLCAweDc4MDIsIDB4YTg5MCwgMHg3ODA2LCAweGE4OTQsIDB4NzgwYSwgMHhhODk4LAorCTB4NzgwZSwgMHhhODc4LCAweDcwMGUsIDB4YTg3MCwgMHg3MDE2LCAweGE4NzQsIDB4NzAxYSwgMHhhODY4LAorCTB4MDA5ZSwgMHhkMDg0LCAweDAxMjAsIDB4NzAwNywgMHgwMDAxLCAweDAwMjksIDB4MDAwNSwgMHg3MDA3LAorCTB4MDAwMiwgMHgwMGIxLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDcxMGMsIDB4MjAxMSwgMHgwMDQwLAorCTB4OTE4MiwgMHgwMDQwLCAweDEyMTAsIDB4MjExMCwgMHg5MDA2LCAweDcwMGUsIDB4NzIxMiwgMHg4MjAzLAorCTB4NzgxMiwgMHg3ODJiLCAweDAwMjAsIDB4NzgyYiwgMHgwMDQxLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAorCTB4MDAxNiwgMHgwMDI2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDcwMTQsIDB4MjBlMCwgMHg3MDE4LAorCTB4MjA5OCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMDg4LCAweDc4MmIsIDB4MDAyNiwgMHg3MTBjLAorCTB4MjAxMSwgMHgwMDQwLCAweDkxODIsIDB4MDA0MCwgMHgxMjEwLCAweDIxMTAsIDB4OTAwNiwgMHg3MDBlLAorCTB4MjJhOCwgMHg0MDA2LCAweDgyMDMsIDB4NzgxMiwgMHg3ODJiLCAweDAwMjAsIDB4MzMwMCwgMHg3MDFhLAorCTB4NzgyYiwgMHgwMDAxLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAorCTB4MjAwOSwgMHgxYTI0LCAweDIxMDQsIDB4YzA5NSwgMHgyMDBhLCAweDA4MGMsIDB4MTE2ZCwgMHgwMDA1LAorCTB4MDAxNiwgMHgwMGU2LCAweDIwNzEsIDB4MWEyNCwgMHgwMGY2LCAweDIwNzksIDB4MDA4MCwgMHg3OTJjLAorCTB4ZDFiYywgMHgxOTBjLCAweDBkN2UsIDB4NzgyYiwgMHgwMDAyLCAweGQxZmMsIDB4MDEyMCwgMHg5MThjLAorCTB4MDcwMCwgMHg3MDA0LCAweDAwMjMsIDB4MDBmZSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHgxMTdlLAorCTB4MTIyNiwgMHgxMjVhLCAweDEzMzIsIDB4MGQ4NSwgMHgxMzRkLCAweDBkODUsIDB4OTE4YywgMHgwNzAwLAorCTB4MTU1MCwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHg3MDE0LCAweDIwZTgsIDB4NzAxOCwgMHgyMGEwLAorCTB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDA4OCwgMHg3ODJiLCAweDAwNDAsIDB4NzAxMCwgMHgyMGE4LAorCTB4NDAwNSwgMHgzNDAwLCAweDcwMWEsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4NzAwYywgMHg5MDA1LAorCTB4MDU3OCwgMHg3ODAwLCAweDc4MDIsIDB4NzgwNCwgMHg3ODA2LCAweDA4MGMsIDB4MTFjMywgMHgwMDA1LAorCTB4NzAwOCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2ZiwgMHgwMTAwLCAweDAwOWUsIDB4NzAwNywgMHgwMDAwLAorCTB4MDgwYywgMHgxMTdlLCAweDAwMDUsIDB4NzAwOCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2ZiwgMHgwMjAwLAorCTB4MDA5ZSwgMHgwY2EwLCAweDkxOGMsIDB4MDcwMCwgMHgxMTUwLCAweDcwMGMsIDB4OTAwNSwgMHgwMTgwLAorCTB4NzgwMCwgMHg3ODAyLCAweDc4MDQsIDB4NzgwNiwgMHgwODBjLCAweDExZDgsIDB4MDAwNSwgMHg3MDA4LAorCTB4MDA5NiwgMHgyMDQ4LCAweGE4NmYsIDB4MDIwMCwgMHgwMDllLCAweDcwMDcsIDB4MDAwMCwgMHgwMDgwLAorCTB4MDA5NiwgMHg3MDA4LCAweDIwNDgsIDB4NzgwMCwgMHhhODhlLCAweDc4MDQsIDB4YTg5MiwgMHg3ODA4LAorCTB4YTg5NiwgMHg3ODBjLCAweGE4OWEsIDB4YTg2ZiwgMHgwMTAwLCAweDAwOWUsIDB4NzAwNywgMHgwMDAwLAorCTB4MDA5NiwgMHgwMGQ2LCAweDcwMDgsIDB4MjA0OCwgMHgyMDAxLCAweDE4YjksIDB4MjAwNCwgMHg5OTA2LAorCTB4MTEyOCwgMHhhODljLCAweDA4MGYsIDB4MDBkZSwgMHgwMDllLCAweDAwYTAsIDB4MDBkZSwgMHgwMDllLAorCTB4MDA5NiwgMHgwMGQ2LCAweDcwMDgsIDB4MjA0OCwgMHgwMDgxLCAweDAxNTAsIDB4YTg5YywgMHgwMDg2LAorCTB4Mjk0MCwgMHgwODBmLCAweDAwOGUsIDB4MDBkZSwgMHgwMDllLCAweDA4MGMsIDB4MTE2ZCwgMHgwMDA1LAorCTB4MDBkZSwgMHgwMDllLCAweDA4MGMsIDB4MTE2ZCwgMHgwMDA1LCAweGE4YTgsIDB4ZDA4YywgMHgwMDA1LAorCTB4MDA5NiwgMHhhMGEwLCAweDkwNGQsIDB4MDkwYywgMHgwZDg1LCAweGEwNmMsIDB4OTA4ZSwgMHgwMTAwLAorCTB4MDEzMCwgMHhhODdiLCAweDAwMzAsIDB4YTg4MywgMHgwMDAwLCAweGE4OTcsIDB4NDAwMiwgMHgwODBjLAorCTB4NzAwNiwgMHhhMDlmLCAweDAwMDAsIDB4YTBhMywgMHgwMDAwLCAweDI4NDgsIDB4MDgwYywgMHgxMDhiLAorCTB4MDA5ZSwgMHgwMDA1LCAweDAwYTYsIDB4YTBhMCwgMHg5MDRkLCAweDA5MGMsIDB4MGQ4NSwgMHhhMDZjLAorCTB4OTA4ZSwgMHgwMTAwLCAweDAxMjgsIDB4YTg3YiwgMHgwMDAxLCAweGE4ODMsIDB4MDAwMCwgMHgwMGMwLAorCTB4YTgwYywgMHgyMDUwLCAweGIwMDQsIDB4OTAwNSwgMHgwMTk4LCAweGE4MGUsIDB4MjA1MCwgMHg4MDA2LAorCTB4ODAwNiwgMHg4MDA3LCAweDkwOGMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDAyLAorCTB4YTA3NiwgMHhhMTcyLCAweGIwMDAsIDB4YTA3YSwgMHgyODEwLCAweDA4MGMsIDB4MTE0ZSwgMHgwMGU4LAorCTB4YTk3YywgMHhhODk0LCAweDAwMTYsIDB4MDAwNiwgMHgwODBjLCAweDcwMDYsIDB4MDAwZSwgMHgwMDFlLAorCTB4ZDFmYywgMHgxMTM4LCAweGQxZjQsIDB4MDEyOCwgMHgwMGM2LCAweDIwNjAsIDB4MDgwYywgMHhiMTZjLAorCTB4MDBjZSwgMHg3MDA4LCAweDIwNDgsIDB4YTg5ZiwgMHgwMDAwLCAweGE4YTMsIDB4MDAwMCwgMHgwODBjLAorCTB4MTA4YiwgMHg3MDA3LCAweDAwMDAsIDB4MDgwYywgMHgxMTZkLCAweDAwYWUsIDB4MDAwNSwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDc4MmIsIDB4MTAwMSwgMHg3MDA3LCAweDAwMDUsIDB4NzAwMCwgMHhjMDk0LAorCTB4NzAwMiwgMHgwMTJlLCAweDAwMDUsIDB4MDA5NiwgMHgyMDAxLCAweDE5MmYsIDB4MjA0YywgMHhhODdjLAorCTB4NzgxMiwgMHhhODhjLCAweDc4MDIsIDB4YTg5MCwgMHg3ODA2LCAweGE4OTQsIDB4NzgwYSwgMHhhODk4LAorCTB4NzgwZSwgMHg3ODJiLCAweDAwMjAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzgyYiwgMHgwMDQxLAorCTB4NzAwNywgMHgwMDAzLCAweDcwMDAsIDB4YzA4NCwgMHg3MDAyLCAweDI5MDAsIDB4NzAwYSwgMHgwMTJlLAorCTB4MDA5ZSwgMHgwMDA1LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAwODgsIDB4NzgyYiwgMHgwMDQwLAorCTB4MDA5NiwgMHgyMDAxLCAweDE5MmYsIDB4MjA0YywgMHhhYTdjLCAweDAwOWUsIDB4MDgwYywgMHg4Zjg4LAorCTB4MjAwOSwgMHgxODhjLCAweDIxMDQsIDB4OTA4NCwgMHhmZmZjLCAweDIwMGEsIDB4MDgwYywgMHg4ZGU3LAorCTB4NzAwNywgMHgwMDAwLCAweDA4MGMsIDB4MTE3ZSwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLAorCTB4MTE3ZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyMjAwLCAweDIwNzksIDB4MDMwMCwgMHgyMDcxLAorCTB4MWE2ZSwgMHg3MDAzLCAweDAwMDAsIDB4NzhiZiwgMHgwMGY2LCAweDAwNDEsIDB4NzgwNywgMHgwMDA3LAorCTB4NzgwMywgMHgwMDAwLCAweDc4MDMsIDB4MDAwMSwgMHgwMTJlLCAweDAwMDUsIDB4MDBjNiwgMHg3ODAzLAorCTB4MDAwMCwgMHgyMDAxLCAweDAxNjUsIDB4MjAwMywgMHg0MTk4LCAweDc4MDgsIDB4ZDA5YywgMHgwMTIwLAorCTB4NzgyMCwgMHgwODBjLCAweDEzYjYsIDB4MGNjOCwgMHgyMDAxLCAweDFhNmYsIDB4MjAwMywgMHgwMDAwLAorCTB4NzhhYiwgMHgwMDA0LCAweDc4YWMsIDB4ZDBhYywgMHgxZGU4LCAweDc4YWIsIDB4MDAwMiwgMHg3ODA3LAorCTB4MDAwNywgMHg3ODI3LCAweDAwMzAsIDB4NzgyYiwgMHgwNDAwLCAweDc4MjcsIDB4MDAzMSwgMHg3ODJiLAorCTB4MWE4MSwgMHg3OGUzLCAweGZmMDAsIDB4NzgxZiwgMHhmZjAwLCAweDc4MWIsIDB4ZmYwMCwgMHgyMDAxLAorCTB4MWE3MCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMjAwLCAweDIwMDQsIDB4ZDBkYywgMHgwMTEwLAorCTB4NzgxZiwgMHgwMzAzLCAweDIwNjEsIDB4MWE4MSwgMHg2MDJmLCAweDFkZGMsIDB4MjAwMSwgMHgxODFhLAorCTB4MjAwNCwgMHg5MDgyLCAweDFkZGMsIDB4NjAzMiwgMHg2MDNiLCAweDFlYzEsIDB4NjAyYiwgMHgxYWMxLAorCTB4NjAwNywgMHgxYWExLCAweDIwNjEsIDB4MWFhMSwgMHg2MDZmLCAweDE5M2QsIDB4MjAwMSwgMHgxOTI4LAorCTB4MjAwNCwgMHg2MDdhLCAweDc4M2YsIDB4MzQ4ZSwgMHgwMGNlLCAweDAwMDUsIDB4OTA4NiwgMHgwMDBkLAorCTB4MTFkMCwgMHg3ODA4LCAweGQwOWMsIDB4MDFiOCwgMHg3ODIwLCAweDAwMjYsIDB4MjAxMCwgMHgwODBjLAorCTB4Y2YwOSwgMHgwMTgwLCAweDIyNjAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTE1OCwgMHgwMDE2LAorCTB4NjEyMCwgMHg5MTg2LCAweDAwMDksIDB4MDEwOCwgMHgwMDIwLCAweDIwMDksIDB4MDA0YywgMHgwODBjLAorCTB4YjIwYSwgMHgwMDFlLCAweDAwMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4MjIwMCwgMHg3OTA4LAorCTB4OTE4NCwgMHgwMDcwLCAweDE5MGMsIDB4MGQ3ZSwgMHhkMTljLCAweDA1YTAsIDB4NzgyMCwgMHg5MDhjLAorCTB4ZjAwMCwgMHgwNTQwLCAweDIwNjAsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDMsIDB4MTU1MCwgMHg2MDAwLAorCTB4OTA4NiwgMHgwMDA0LCAweDE1MzAsIDB4NjExNCwgMHgyMTQ4LCAweGE4NzYsIDB4YTg3YSwgMHhhODY3LAorCTB4MDEwMywgMHgwODBjLCAweDZlMjcsIDB4MDBiNiwgMHg2MDEwLCAweDIwNTgsIDB4YmEzYywgMHg4MjExLAorCTB4MDIwOCwgMHhiYTNlLCAweGI4ZDAsIDB4OTAwNSwgMHgxOTBjLCAweDY4ZGYsIDB4MDBiZSwgMHg2MDQ0LAorCTB4ZDBmYywgMHgxOTBjLCAweGFkMjUsIDB4MDgwYywgMHhiMTk1LCAweDc4MDgsIDB4ZDA5YywgMHgxOWIwLAorCTB4MDEyZSwgMHgwMDA1LCAweDkwOGEsIDB4MDAyNCwgMHgxYTBjLCAweDBkODUsIDB4MDAyYiwgMHgwMTJlLAorCTB4MDAwNSwgMHgwNGIwLCAweDAxMmUsIDB4MDAwNSwgMHgxNDM4LCAweDE0NWUsIDB4MTQ4ZSwgMHgxNDkzLAorCTB4MTQ5NywgMHgxNDljLCAweDE0YzQsIDB4MTRjOCwgMHgxNGQ2LCAweDE0ZGEsIDB4MTQzOCwgMHgxNWE3LAorCTB4MTVhYiwgMHgxNjFkLCAweDE2MjQsIDB4MTQzOCwgMHgxNjI1LCAweDE2MjYsIDB4MTYzMSwgMHgxNjM4LAorCTB4MTQzOCwgMHgxNDM4LCAweDE0MzgsIDB4MTQzOCwgMHgxNDM4LCAweDE0MzgsIDB4MTQzOCwgMHgxNDllLAorCTB4MTQzOCwgMHgxNDY2LCAweDE0OGIsIDB4MTQ1MiwgMHgxNDM4LCAweDE0NzIsIDB4MTQzYywgMHgxNDNhLAorCTB4MDgwYywgMHgwZDg1LCAweDA4MGMsIDB4MGQ3ZSwgMHgwODBjLCAweDE2NDMsIDB4MjAwOSwgMHgxYTdkLAorCTB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4MDgwYywgMHg4MmI4LCAweDA4MGMsIDB4MWIxZSwgMHgwMDA1LAorCTB4NjA0NCwgMHhkMGZjLCAweDE5MGMsIDB4YWQyNSwgMHgyMDA5LCAweDAwNTUsIDB4MDgwYywgMHhiMjBhLAorCTB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4MTY0MywgMHgyMDYwLCAweDYwNDQsIDB4ZDBmYywgMHgxOTBjLAorCTB4YWQyNSwgMHgyMDA5LCAweDAwNTUsIDB4MDgwYywgMHhiMjBhLCAweDAwMDUsIDB4MjAwOSwgMHgwMDQ4LAorCTB4MDgwYywgMHgxNjQzLCAweDIwNjAsIDB4MDgwYywgMHhiMjBhLCAweDAwMDUsIDB4MjAwOSwgMHgwMDU0LAorCTB4MDgwYywgMHgxNjQzLCAweDIwNjAsIDB4NjA0NCwgMHhkMGZjLCAweDE5MGMsIDB4YWQyNSwgMHgwODBjLAorCTB4YjIwYSwgMHgwMDA1LCAweDA4MGMsIDB4MTY0MywgMHgyMDYwLCAweDAwNTYsIDB4MDA2NiwgMHgwODBjLAorCTB4MTY0MywgMHgyMDI4LCAweDA4MGMsIDB4MTY0MywgMHgyMDMwLCAweDAwMzYsIDB4MDA0NiwgMHgyMDIxLAorCTB4MDAwMCwgMHgyNDE4LCAweDIwMDksIDB4MDA1NiwgMHgwODBjLCAweGIyMGEsIDB4MDA0ZSwgMHgwMDNlLAorCTB4MDA2ZSwgMHgwMDVlLCAweDAwMDUsIDB4MDgwYywgMHgxNjQzLCAweDAwMDUsIDB4NzAwNCwgMHhjMDg1LAorCTB4YzBiNSwgMHg3MDA2LCAweDAwMDUsIDB4NzAwNCwgMHhjMDg1LCAweDcwMDYsIDB4MDAwNSwgMHgwODBjLAorCTB4MTY0MywgMHgwODBjLCAweDE3NDAsIDB4MDAwNSwgMHgwODBjLCAweDBkODUsIDB4MDgwYywgMHgxNjQzLAorCTB4MjA2MCwgMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODNiLCAweGZmZmYsIDB4MDA5ZSwgMHgyMDA5LAorCTB4MDA0OCwgMHgwODBjLCAweGIyMGEsIDB4MjAwMSwgMHgwMTVkLCAweDIwMDMsIDB4MDAwMCwgMHgyMDA5LAorCTB4MDNlOCwgMHg4MTA5LCAweDAxNjAsIDB4MjAwMSwgMHgwMjAxLCAweDIwMDQsIDB4OTAwNSwgMHgwZGM4LAorCTB4MjAwMSwgMHgwMjE4LCAweDIwMDQsIDB4ZDBlYywgMHgxMTEwLCAweDA4MGMsIDB4MTY0OCwgMHgyMDAxLAorCTB4MDMwNywgMHgyMDAzLCAweDgwMDAsIDB4MDAwNSwgMHg3MDA0LCAweGMwOTUsIDB4NzAwNiwgMHgwMDA1LAorCTB4MDgwYywgMHgxNjQzLCAweDIwNjAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTgzYiwgMHhmZmZmLAorCTB4MDA5ZSwgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHhiMjBhLCAweDAwMDUsIDB4MDgwYywgMHgxNjQzLAorCTB4MDgwYywgMHgwZDg1LCAweDA4MGMsIDB4MTY0MywgMHgwODBjLCAweDE1OTIsIDB4NzgyNywgMHgwMDE4LAorCTB4NzlhYywgMHhkMWRjLCAweDA5MDQsIDB4MTU0MywgMHg3ODI3LCAweDAwMTUsIDB4NzgyOCwgMHg3ODJiLAorCTB4MDAwMCwgMHg5MDY1LCAweDAxNDAsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsIDB4MDA1MCwgMHgyMDAzLAorCTB4MDAyMCwgMHgwODA0LCAweDE1NDksIDB4NzAwNCwgMHg5MDA1LCAweDAxYzgsIDB4MTE4OCwgMHg3OGFiLAorCTB4MDAwNCwgMHg3ODI3LCAweDAwMTgsIDB4NzgyYiwgMHgwMDAwLCAweGQxYmMsIDB4MDkwYywgMHgwZDg1LAorCTB4MjAwMSwgMHgwMjBkLCAweDIwMDMsIDB4MDA1MCwgMHgyMDAzLCAweDAwMjAsIDB4MDgwNCwgMHgxNTc3LAorCTB4NzhhYiwgMHgwMDA0LCAweDc4MDMsIDB4MDAwMSwgMHgwODBjLCAweDE1YWIsIDB4MDAwNSwgMHg3ODI3LAorCTB4MDAxOCwgMHhhMDAxLCAweDc4MjgsIDB4NzgyNywgMHgwMDExLCAweGEwMDEsIDB4NzkyOCwgMHg5MTA2LAorCTB4MDExMCwgMHg3OWFjLCAweDA4ZTAsIDB4MDBlNiwgMHgyMDcxLCAweDAyMDAsIDB4NzAyYywgMHhkMGM0LAorCTB4MDE0MCwgMHgwMGVlLCAweDA4MGMsIDB4MWIxZSwgMHgwODBjLCAweDEzNjYsIDB4NzgwMywgMHgwMDAxLAorCTB4MDAwNSwgMHg3MDM3LCAweDAwMDEsIDB4YTAwMSwgMHg3MTUwLCAweDAwZWUsIDB4OTE4YywgMHhmZjAwLAorCTB4OTE4NiwgMHgwNTAwLCAweDAxMTAsIDB4NzlhYywgMHgwODEwLCAweDcwMDQsIDB4YzA5ZCwgMHg3MDA2LAorCTB4NzhhYiwgMHgwMDA0LCAweDc4MDMsIDB4MDAwMSwgMHgwODBjLCAweDE1YWIsIDB4MjAwMSwgMHgwMjBkLAorCTB4MjAwMywgMHgwMDIwLCAweDAwMDUsIDB4NzgyOCwgMHg3ODJiLCAweDAwMDAsIDB4OTA2NSwgMHgwOTBjLAorCTB4MGQ4NSwgMHg2MDE0LCAweDIwNDgsIDB4NzhhYiwgMHgwMDA0LCAweDkxOGMsIDB4MDcwMCwgMHgwMWE4LAorCTB4MDgwYywgMHg4MmI4LCAweDA4MGMsIDB4MWIxZSwgMHgwODBjLCAweGNmMWIsIDB4MDE1OCwgMHhhOWFjLAorCTB4YTkzNiwgMHhhOWIwLCAweGE5M2EsIDB4YTgzZiwgMHhmZmZmLCAweGE4NDMsIDB4ZmZmZiwgMHhhODgwLAorCTB4YzBiZCwgMHhhODgyLCAweDA4MGMsIDB4Y2FlOSwgMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA5LAorCTB4MTEyOCwgMHgyMDA5LCAweDAwNGMsIDB4MDgwYywgMHhiMjBhLCAweDAwNDgsIDB4NjAxMCwgMHgwMGI2LAorCTB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHg2MDI0LCAweDE5MGMsIDB4ZDMxZSwgMHgyMDI5LAorCTB4MDBjOCwgMHg4NTI5LCAweDAxMjgsIDB4MjAwMSwgMHgwMjAxLCAweDIwMDQsIDB4OTAwNSwgMHgwZGM4LAorCTB4N2RiYywgMHgwODBjLCAweGVlYjEsIDB4ZDVhNCwgMHgxMTE4LCAweDA4MGMsIDB4MTY0OCwgMHgwMDA1LAorCTB4MDgwYywgMHg4MmI4LCAweDA4MGMsIDB4MWIxZSwgMHgwMDA1LCAweDc4MWYsIDB4MDMwMCwgMHg3ODAzLAorCTB4MDAwMSwgMHgwMDA1LCAweDAwMTYsIDB4MDA2NiwgMHgwMDc2LCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLAorCTB4NzkwOCwgMHg5MThjLCAweDAwMDcsIDB4OTE4NiwgMHgwMDAzLCAweDAxMjAsIDB4MjAwMSwgMHgwMDE2LAorCTB4MDgwYywgMHgxNmI5LCAweDAwZmUsIDB4MDA3ZSwgMHgwMDZlLCAweDAwMWUsIDB4MDAwNSwgMHg3MDA0LAorCTB4YzA5ZCwgMHg3MDA2LCAweDAwMDUsIDB4NzEwNCwgMHg5MTg0LCAweDAwMDQsIDB4MTkwYywgMHgwZDg1LAorCTB4ZDE4NCwgMHgxMWIxLCAweGQxOWMsIDB4MDE4MCwgMHhjMTljLCAweDcxMDYsIDB4MDAxNiwgMHgwODBjLAorCTB4MTcyMywgMHgwMDFlLCAweDAxNDgsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsIDB4MDA1MCwgMHgyMDAzLAorCTB4MDAyMCwgMHgwODBjLCAweDE2NDgsIDB4MDAwNSwgMHg4MWZmLCAweDE5MGMsIDB4MGQ4NSwgMHgwMDA1LAorCTB4MjEwMCwgMHhjMTg0LCAweGMxYjQsIDB4NzEwNiwgMHhkMGI0LCAweDAwMTYsIDB4MDBlNiwgMHgxOTA0LAorCTB4MTYxMiwgMHgyMDcxLCAweDAyMDAsIDB4MDgwYywgMHgxNzEwLCAweDA1ZTAsIDB4MDgwYywgMHgxNzIzLAorCTB4MDViMCwgMHg2MDE0LCAweDkwMDUsIDB4MDViMCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2NCwgMHgwMDllLAorCTB4OTA4NCwgMHgwMGZmLCAweDkwOGUsIDB4MDAyOSwgMHgwMTYwLCAweDkwOGUsIDB4MDA0OCwgMHgxNTUwLAorCTB4NjAxYywgMHhkMDg0LCAweDExZTAsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTdhZCwgMHgwMGZlLAorCTB4MDBiMCwgMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHgxOTQyLCAweDAwZmUsIDB4MjAwOSwgMHgwMWY0LAorCTB4ODEwOSwgMHgwMTY4LCAweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweDkwMDUsIDB4MGRjOCwgMHgyMDAxLAorCTB4MDIxOCwgMHgyMDA0LCAweGQwZWMsIDB4MTExOCwgMHgwODBjLCAweDE2NDgsIDB4MDA0MCwgMHgyMDAxLAorCTB4MDIwZCwgMHgyMDAzLCAweDAwMjAsIDB4MDgwYywgMHgxMzY2LCAweDc4MDMsIDB4MDAwMSwgMHgwMGVlLAorCTB4MDAxZSwgMHgwMDA1LCAweDA4MGMsIDB4MTcyMywgMHgwZGQwLCAweDIwMDEsIDB4MDIwZCwgMHgyMDAzLAorCTB4MDA1MCwgMHgyMDAzLCAweDAwMjAsIDB4MDQ2MSwgMHgwYzkwLCAweDA0MjksIDB4MjA2MCwgMHgyMDA5LAorCTB4MDA1MywgMHgwODBjLCAweGIyMGEsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDBlMSwgMHgyMDA4LAorCTB4MDBkMSwgMHgwMDA2LCAweDcwMDQsIDB4YzA5ZCwgMHg3MDA2LCAweDAwMGUsIDB4MDgwYywgMHg5MmQ1LAorCTB4MDAwNSwgMHgwMDg5LCAweDkwMDUsIDB4MDExOCwgMHgwODBjLCAweDhlZDksIDB4MGNkMCwgMHgwMDA1LAorCTB4MjAwMSwgMHgwMDM2LCAweDIwMDksIDB4MTgyMCwgMHgyMTBjLCAweDIwMTEsIDB4MTgxZiwgMHgyMjE0LAorCTB4MDgwYywgMHgxNmI5LCAweDAwMDUsIDB4NzgwOCwgMHhkMDljLCAweDBkZTgsIDB4NzgyMCwgMHgwMDA1LAorCTB4MDgwYywgMHgxNTkyLCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDIwMDksIDB4MDFmNCwgMHg4MTA5LAorCTB4MDUxMCwgMHg2ODA0LCAweDkwMDUsIDB4MGRkOCwgMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLAorCTB4NzliYywgMHhkMWE0LCAweDE1MjgsIDB4NzliOCwgMHg5MThjLCAweDBmZmYsIDB4MDE4MCwgMHg5MTgyLAorCTB4MDg0MSwgMHgxMjY4LCAweDkxODgsIDB4MDAwNywgMHg5MThjLCAweDBmZjgsIDB4ODEwYywgMHg4MTBjLAorCTB4ODEwYywgMHgwODBjLCAweDE2YWIsIDB4NjgyNywgMHgwMDAxLCAweDgxMDksIDB4MWRkMCwgMHgwNGQ5LAorCTB4NjgyNywgMHgwMDAyLCAweDA0YzEsIDB4NjgwNCwgMHg5MDA1LCAweDExMzAsIDB4NjgyYywgMHhkMGU0LAorCTB4MTUwMCwgMHg2ODA0LCAweDkwMDUsIDB4MGRlOCwgMHg3OWI4LCAweGQxZWMsIDB4MTEzMCwgMHgwOGMwLAorCTB4MDgwYywgMHg4MmI4LCAweDA4MGMsIDB4MWIxZSwgMHgwMDkwLCAweDc4MjcsIDB4MDAxNSwgMHg3ODJiLAorCTB4MDAwMCwgMHg3ODI3LCAweDAwMTgsIDB4NzgyYiwgMHgwMDAwLCAweDIwMDEsIDB4MDIwZCwgMHgyMDAzLAorCTB4MDAyMCwgMHgyMDAxLCAweDAzMDcsIDB4MjAwMywgMHgwMzAwLCAweDc4MDMsIDB4MDAwMSwgMHgwMGRlLAorCTB4MDAwNSwgMHg2ODJjLCAweDkwODQsIDB4NTQwMCwgMHg5MDg2LCAweDU0MDAsIDB4MGQzMCwgMHg3ODI3LAorCTB4MDAxNSwgMHg3ODJiLCAweDAwMDAsIDB4NzgwMywgMHgwMDAxLCAweDY4MDAsIDB4OTA4NSwgMHgxODAwLAorCTB4NjgwMiwgMHgwMGRlLCAweDAwMDUsIDB4NjgyNCwgMHg5MDg0LCAweDAwMDMsIDB4MWRlMCwgMHgwMDA1LAorCTB4MjAwMSwgMHgwMDMwLCAweDJjMDgsIDB4NjIxYywgMHgwMDIxLCAweDc4MzAsIDB4OTA4NiwgMHgwMDQxLAorCTB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MjA3OSwgMHgwMzAwLCAweDAwMDYsIDB4MjA3MSwgMHgxYTZlLAorCTB4NzAwOCwgMHg5MDA1LCAweDExMTAsIDB4NzhlMywgMHgwYzBjLCAweDgwMDAsIDB4NzAwYSwgMHgwMDI2LAorCTB4MjAxMSwgMHgwMDA2LCAweDc4MDgsIDB4ZDA5YywgMHgwMTUwLCAweDAwMTYsIDB4MDAyNiwgMHgwMGM2LAorCTB4MDgwYywgMHgxM2Q0LCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDgyMTEsIDB4MWQ5OCwgMHgwMDJlLAorCTB4MDAwZSwgMHgwMDA2LCAweDc4MzIsIDB4NzkzNiwgMHg3YTNhLCAweDc4MWIsIDB4ODA4MCwgMHgwMGI5LAorCTB4MTE3OCwgMHgyMDcxLCAweDFhNmUsIDB4NzAwOCwgMHg5MDA1LCAweDAxMzAsIDB4ODAwMSwgMHgwYTBjLAorCTB4MGQ4NSwgMHg3MDBhLCAweDc4ZTMsIDB4MGMwMCwgMHgwMDBlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LAorCTB4MDAwZSwgMHg3OTJjLCAweDM5MDAsIDB4ODAwMCwgMHgyMDA0LCAweDA4MGMsIDB4MGQ4NSwgMHgyMDA5LAorCTB4ZmYwMCwgMHg4MTA5LCAweDAxMjAsIDB4NzgxOCwgMHhkMGJjLCAweDFkZDgsIDB4MDAwNSwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMDA1LCAweDc4MzIsIDB4NzkzNiwgMHg3YTNhLCAweDc4MWIsIDB4ODA4MCwgMHgwYzc5LAorCTB4MTEwOCwgMHgwMDA1LCAweDc5MmMsIDB4MzkwMCwgMHg4MDAwLCAweDIwMDQsIDB4MDgwYywgMHgwZDg1LAorCTB4NzAzNywgMHgwMDAxLCAweDcxNTAsIDB4NzAzNywgMHgwMDAyLCAweDcwNTAsIDB4MjA2MCwgMHhkMWJjLAorCTB4MTExMCwgMHg3MDU0LCAweDIwNjAsIDB4OTE4YywgMHhmZjAwLCAweDkxODYsIDB4MDUwMCwgMHgwMTEwLAorCTB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDAwNiwgMHgwMDQ2LCAweDAwZTYsIDB4MjA3MSwgMHgwMjAwLAorCTB4NzAzNywgMHgwMDAyLCAweDcwNTgsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTA4NiwgMHgwMGJjLAorCTB4MTE1OCwgMHgyMDIxLCAweDFhN2UsIDB4MjQwNCwgMHg4MDAwLCAweDAyMDgsIDB4MjAyMiwgMHgwODBjLAorCTB4ODJiOCwgMHgwODBjLCAweDFiMWUsIDB4OTAwNiwgMHgwMGVlLCAweDAwNGUsIDB4MDAwZSwgMHgwMDA1LAorCTB4MGMxMSwgMHgxMTA4LCAweDAwMDUsIDB4MDBlNiwgMHgwMDE2LCAweDIwNzEsIDB4MDIwMCwgMHgwODQxLAorCTB4NjEyNCwgMHhkMWRjLCAweDAxZjgsIDB4NzAxYywgMHhkMDhjLCAweDA5MDQsIDB4MTdhMiwgMHg3MDE3LAorCTB4MDAwMCwgMHgyMDAxLCAweDAyNjQsIDB4MjAwNCwgMHhkMGJjLCAweDA5MDQsIDB4MTdhMiwgMHgyMDAxLAorCTB4MDI2OCwgMHgwMGM2LCAweDIwNjQsIDB4NjEwNCwgMHg2MDM4LCAweDAwY2UsIDB4OTE4ZSwgMHgwMDM5LAorCTB4MTkwNCwgMHgxN2EyLCAweDljMDYsIDB4MTVmMCwgMHgwMTI2LCAweDIwOTEsIDB4MjYwMCwgMHgwODBjLAorCTB4ODIxMCwgMHgwMTJlLCAweDczNTgsIDB4NzQ1YywgMHg2MDE0LCAweDkwNWQsIDB4MDU5OCwgMHgyYjQ4LAorCTB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MTkwYywgMHhkMmY5LAorCTB4YWI0MiwgMHhhYzNlLCAweDIwMDEsIDB4MTg2OSwgMHgyMDA0LCAweGQwYjQsIDB4MTE3MCwgMHg2MDFjLAorCTB4ZDBlNCwgMHgxMTU4LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLAorCTB4MTEyMCwgMHhhODNiLCAweDdmZmYsIDB4YTgzNywgMHhmZmZmLCAweDA4MGMsIDB4MWVlMSwgMHgxMTkwLAorCTB4MDgwYywgMHgxOTlmLCAweDJhMDAsIDB4YTgxNiwgMHgwMTMwLCAweDI4MDAsIDB4YTgwZSwgMHgyYzA1LAorCTB4YTgwYSwgMHgyYzAwLCAweGE4MTIsIDB4NzAzNywgMHgwMDIwLCAweDc4MWYsIDB4MDMwMCwgMHgwMDFlLAorCTB4MDBlZSwgMHgwMDA1LCAweDcwMzcsIDB4MDA1MCwgMHg3MDM3LCAweDAwMjAsIDB4MDAxZSwgMHgwMGVlLAorCTB4MDgwYywgMHgxNjQ4LCAweDAwMDUsIDB4MDgwYywgMHgwZDg1LCAweDIwMDEsIDB4MTgwZCwgMHgyMDA0LAorCTB4ZDA4YywgMHgxOTBjLCAweDZjY2MsIDB4MmNmMCwgMHgwMTI2LCAweDIwOTEsIDB4MjIwMCwgMHgwMDE2LAorCTB4MDBjNiwgMHgzZTYwLCAweDYwMTQsIDB4MjA0OCwgMHgyOTQwLCAweDkwM2UsIDB4MjczMCwgMHhhODY0LAorCTB4MjA2OCwgMHhhODFhLCAweDlkODQsIDB4MDAwZiwgMHg5MDg4LCAweDFlYzEsIDB4MjE2NSwgMHgwMDAyLAorCTB4MTdkZiwgMHgxODRkLCAweDE3ZGYsIDB4MTdkZiwgMHgxN2UzLCAweDE4MmUsIDB4MTdkZiwgMHgxODAzLAorCTB4MTdkOCwgMHgxODQ0LCAweDE3ZGYsIDB4MTdkZiwgMHgxN2U4LCAweDE5M2EsIDB4MTgxNywgMHgxODBkLAorCTB4YTk2NCwgMHg5MThjLCAweDAwZmYsIDB4OTE4ZSwgMHgwMDQ4LCAweDA5MDQsIDB4MTg0NCwgMHg5MDg1LAorCTB4MDAwMSwgMHgwODA0LCAweDE5MzAsIDB4YTg3YywgMHhkMGFjLCAweDBkYzgsIDB4MDgwNCwgMHgxODU0LAorCTB4YTg3YywgMHhkMGFjLCAweDBkYTAsIDB4MDgwNCwgMHgxOGJmLCAweGE4OTgsIDB4OTAxZCwgMHgxMTA4LAorCTB4YWI5YywgMHg5MDE2LCAweGFhYjIsIDB4YWEzZSwgMHhhYTQyLCAweDNlMDAsIDB4OTA4MCwgMHgwMDA4LAorCTB4MjAwNCwgMHg5MDgwLCAweDk1MzYsIDB4MjAwNSwgMHg5MDA1LCAweDA5MGMsIDB4MGQ4NSwgMHgyMDA0LAorCTB4YThhZSwgMHgwODA0LCAweDE5MTgsIDB4YTg3YywgMHhkMGJjLCAweDA5YzgsIDB4YTg5MCwgMHhhODQyLAorCTB4YTg4YywgMHhhODNlLCAweGE4ODgsIDB4MDgwNCwgMHgxODU0LCAweGE4N2MsIDB4ZDBiYywgMHgwOTc4LAorCTB4YTg5MCwgMHhhODQyLCAweGE4OGMsIDB4YTgzZSwgMHhhODg4LCAweDA4MDQsIDB4MThiZiwgMHhhODdjLAorCTB4ZDBiYywgMHgwOTI4LCAweGE4OTAsIDB4YTg0MiwgMHhhODhjLCAweGE4M2UsIDB4YTgwNCwgMHg5MDQ1LAorCTB4MDkwYywgMHgwZDg1LCAweGExNjQsIDB4YTkxYSwgMHg5MWVjLCAweDAwMGYsIDB4OWQ4MCwgMHgxZWMxLAorCTB4MjA2NSwgMHhhODg4LCAweGQxOWMsIDB4MTkwNCwgMHgxOGJmLCAweDA0MzAsIDB4YTg3YywgMHhkMGFjLAorCTB4MDkwNCwgMHgxN2RmLCAweGE4MDQsIDB4OTA0NSwgMHgwOTBjLCAweDBkODUsIDB4YTE2NCwgMHhhOTFhLAorCTB4OTFlYywgMHgwMDBmLCAweDlkODAsIDB4MWVjMSwgMHgyMDY1LCAweDkwMDYsIDB4YTg0MiwgMHhhODNlLAorCTB4ZDE5YywgMHgxOTA0LCAweDE4YmYsIDB4MDA4MCwgMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHgxN2RmLAorCTB4OTAwNiwgMHhhODQyLCAweGE4M2UsIDB4MDgwNCwgMHgxOGJmLCAweGE4N2MsIDB4ZDBhYywgMHgwOTA0LAorCTB4MTdkZiwgMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHgyYzA1LCAweDkwOGEsIDB4MDAzNiwgMHgxYTBjLAorCTB4MGQ4NSwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxODc3LCAweDE4NzcsIDB4MTg3OSwgMHgxODc3LAorCTB4MTg3NywgMHgxODc3LCAweDE4ODMsIDB4MTg3NywgMHgxODc3LCAweDE4NzcsIDB4MTg4ZCwgMHgxODc3LAorCTB4MTg3NywgMHgxODc3LCAweDE4OTcsIDB4MTg3NywgMHgxODc3LCAweDE4NzcsIDB4MThhMSwgMHgxODc3LAorCTB4MTg3NywgMHgxODc3LCAweDE4YWIsIDB4MTg3NywgMHgxODc3LCAweDE4NzcsIDB4MThiNSwgMHgwODBjLAorCTB4MGQ4NSwgMHhhNTc0LCAweGE0NzgsIDB4OWQ4NiwgMHgwMDI0LCAweDA5MDQsIDB4MTdlZCwgMHhhMzdjLAorCTB4YTI4MCwgMHgwODA0LCAweDE5MTgsIDB4YTU4NCwgMHhhNDg4LCAweDlkODYsIDB4MDAyNCwgMHgwOTA0LAorCTB4MTdlZCwgMHhhMzhjLCAweGEyOTAsIDB4MDgwNCwgMHgxOTE4LCAweGE1OTQsIDB4YTQ5OCwgMHg5ZDg2LAorCTB4MDAyNCwgMHgwOTA0LCAweDE3ZWQsIDB4YTM5YywgMHhhMmEwLCAweDA4MDQsIDB4MTkxOCwgMHhhNWE0LAorCTB4YTRhOCwgMHg5ZDg2LCAweDAwMjQsIDB4MDkwNCwgMHgxN2VkLCAweGEzYWMsIDB4YTJiMCwgMHgwODA0LAorCTB4MTkxOCwgMHhhNWI0LCAweGE0YjgsIDB4OWQ4NiwgMHgwMDI0LCAweDA5MDQsIDB4MTdlZCwgMHhhM2JjLAorCTB4YTJjMCwgMHgwODA0LCAweDE5MTgsIDB4YTVjNCwgMHhhNGM4LCAweDlkODYsIDB4MDAyNCwgMHgwOTA0LAorCTB4MTdlZCwgMHhhM2NjLCAweGEyZDAsIDB4MDgwNCwgMHgxOTE4LCAweGE1ZDQsIDB4YTRkOCwgMHg5ZDg2LAorCTB4MDAyNCwgMHgwOTA0LCAweDE3ZWQsIDB4YTNkYywgMHhhMmUwLCAweDA4MDQsIDB4MTkxOCwgMHgyYzA1LAorCTB4OTA4YSwgMHgwMDM0LCAweDFhMGMsIDB4MGQ4NSwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxOGUyLAorCTB4MThlMCwgMHgxOGUwLCAweDE4ZTAsIDB4MThlMCwgMHgxOGUwLCAweDE4ZWQsIDB4MThlMCwgMHgxOGUwLAorCTB4MThlMCwgMHgxOGUwLCAweDE4ZTAsIDB4MThmOCwgMHgxOGUwLCAweDE4ZTAsIDB4MThlMCwgMHgxOGUwLAorCTB4MThlMCwgMHgxOTAzLCAweDE4ZTAsIDB4MThlMCwgMHgxOGUwLCAweDE4ZTAsIDB4MThlMCwgMHgxOTBlLAorCTB4MDgwYywgMHgwZDg1LCAweGE1NmMsIDB4YTQ3MCwgMHhhNzc0LCAweGE2NzgsIDB4OWQ4NiwgMHgwMDJjLAorCTB4MDkwNCwgMHgxN2VkLCAweGEzN2MsIDB4YTI4MCwgMHgwNDU4LCAweGE1ODQsIDB4YTQ4OCwgMHhhNzhjLAorCTB4YTY5MCwgMHg5ZDg2LCAweDAwMmMsIDB4MDkwNCwgMHgxN2VkLCAweGEzOTQsIDB4YTI5OCwgMHgwNDAwLAorCTB4YTU5YywgMHhhNGEwLCAweGE3YTQsIDB4YTZhOCwgMHg5ZDg2LCAweDAwMmMsIDB4MDkwNCwgMHgxN2VkLAorCTB4YTNhYywgMHhhMmIwLCAweDAwYTgsIDB4YTViNCwgMHhhNGI4LCAweGE3YmMsIDB4YTZjMCwgMHg5ZDg2LAorCTB4MDAyYywgMHgwOTA0LCAweDE3ZWQsIDB4YTNjNCwgMHhhMmM4LCAweDAwNTAsIDB4YTVjYywgMHhhNGQwLAorCTB4YTdkNCwgMHhhNmQ4LCAweDlkODYsIDB4MDAyYywgMHgwOTA0LCAweDE3ZWQsIDB4YTNkYywgMHhhMmUwLAorCTB4YWIyZSwgMHhhYTMyLCAweGFkMWUsIDB4YWMyMiwgMHhhZjI2LCAweGFlMmEsIDB4YTk4OCwgMHg4YzYwLAorCTB4MmMxZCwgMHhhOGFjLCAweGFhYjAsIDB4YTgzNiwgMHhhYTNhLCAweDgxMDksIDB4YTkxNiwgMHgxMTYwLAorCTB4M2U2MCwgMHg2MDFjLCAweGMwODUsIDB4NjAxZSwgMHhhODdjLCAweGMwZGQsIDB4YTg3ZSwgMHg5MDA2LAorCTB4MDBjZSwgMHgwMDFlLCAweDAxMmUsIDB4MDAwNSwgMHgyODAwLCAweGE4MGUsIDB4YWIwYSwgMHgyYzAwLAorCTB4YTgxMiwgMHgwYzcwLCAweDA4MDQsIDB4MTdkZiwgMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLAorCTB4MTkwYywgMHg2Y2NjLCAweDJmZjAsIDB4MDEyNiwgMHgyMDkxLCAweDIyMDAsIDB4MDAxNiwgMHgwMGM2LAorCTB4M2U2MCwgMHg2MDE0LCAweDIwNDgsIDB4Mjk0MCwgMHhhODBlLCAweDIwNjEsIDB4MWViYywgMHhhODEzLAorCTB4MWViYywgMHgyYzA1LCAweGE4MGEsIDB4YTk2NCwgMHhhOTFhLCAweGE4N2MsIDB4ZDBhYywgMHgwOTBjLAorCTB4MGQ4NSwgMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLAorCTB4MGQ4NSwgMHhhZGNjLCAweGFjZDAsIDB4YWZkNCwgMHhhZWQ4LCAweGFiZGMsIDB4YWFlMCwgMHhhYjJlLAogCTB4YWEzMiwgMHhhZDFlLCAweGFjMjIsIDB4YWYyNiwgMHhhZTJhLCAweGE4YWMsIDB4YWFiMCwgMHhhODM2LAogCTB4YWEzYSwgMHhhOTg4LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwOCwgMHgxMTIwLAogCTB4ODEwOSwgMHhhOTE2LCAweDAxMjgsIDB4MDA4MCwgMHg5MThhLCAweDAwMDIsIDB4YTkxNiwgMHgxMTYwLAogCTB4M2U2MCwgMHg2MDFjLCAweGMwODUsIDB4NjAxZSwgMHhhODdjLCAweGMwZGQsIDB4YTg3ZSwgMHg5MDA2LAotCTB4MDBjZSwgMHgwMDFlLCAweDAxMmUsIDB4MDAwNSwgMHhhODA0LCAweDkwNDUsIDB4MDkwYywgMHgwZDc5LAotCTB4YTgwZSwgMHhhMDY0LCAweGE4MWEsIDB4OTA4NCwgMHgwMDBmLCAweDkwODAsIDB4MWVkZSwgMHgyMDE1LAotCTB4ODJmZiwgMHgwOTBjLCAweDBkNzksIDB4YWExMiwgMHgyMjA1LCAweGE4MGEsIDB4MGMwOCwgMHg5MDNlLAotCTB4MjczMCwgMHhhODgwLCAweGQwZmMsIDB4MTE5MCwgMHgyZDAwLCAweDAwMDIsIDB4MWFiMSwgMHgxOWRlLAotCTB4MTlkZSwgMHgxYWIxLCAweDE5ZGUsIDB4MWFhYiwgMHgxYWIxLCAweDE5ZGUsIDB4MWE0ZSwgMHgxYTRlLAotCTB4MWE0ZSwgMHgxYWIxLCAweDFhNGUsIDB4MWFiMSwgMHgxYWE4LCAweDFhNGUsIDB4YzBmYywgMHhhODgyLAotCTB4YWIyYywgMHhhYTMwLCAweGFkMWMsIDB4YWMyMCwgMHhkZDljLCAweDA5MDQsIDB4MWFiMywgMHgyYzA1LAotCTB4OTA4YSwgMHgwMDM0LCAweDFhMGMsIDB4MGQ3OSwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxOWNhLAotCTB4MTljOCwgMHgxOWM4LCAweDE5YzgsIDB4MTljOCwgMHgxOWM4LCAweDE5Y2UsIDB4MTljOCwgMHgxOWM4LAotCTB4MTljOCwgMHgxOWM4LCAweDE5YzgsIDB4MTlkMiwgMHgxOWM4LCAweDE5YzgsIDB4MTljOCwgMHgxOWM4LAotCTB4MTljOCwgMHgxOWQ2LCAweDE5YzgsIDB4MTljOCwgMHgxOWM4LCAweDE5YzgsIDB4MTljOCwgMHgxOWRhLAotCTB4MDgwYywgMHgwZDc5LCAweGE3NzQsIDB4YTY3OCwgMHgwODA0LCAweDFhYjMsIDB4YTc4YywgMHhhNjkwLAotCTB4MDgwNCwgMHgxYWIzLCAweGE3YTQsIDB4YTZhOCwgMHgwODA0LCAweDFhYjMsIDB4YTdiYywgMHhhNmMwLAotCTB4MDgwNCwgMHgxYWIzLCAweGE3ZDQsIDB4YTZkOCwgMHgwODA0LCAweDFhYjMsIDB4YTg5OCwgMHg5MDFkLAotCTB4MTEwOCwgMHhhYjljLCAweDkwMTYsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZDc5LAotCTB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWEwNiwgMHgxYTA2LCAweDFhMDgsIDB4MWEwNiwgMHgxYTA2LAotCTB4MWEwNiwgMHgxYTEyLCAweDFhMDYsIDB4MWEwNiwgMHgxYTA2LCAweDFhMWMsIDB4MWEwNiwgMHgxYTA2LAotCTB4MWEwNiwgMHgxYTI2LCAweDFhMDYsIDB4MWEwNiwgMHgxYTA2LCAweDFhMzAsIDB4MWEwNiwgMHgxYTA2LAotCTB4MWEwNiwgMHgxYTNhLCAweDFhMDYsIDB4MWEwNiwgMHgxYTA2LCAweDFhNDQsIDB4MDgwYywgMHgwZDc5LAotCTB4YTU3NCwgMHhhNDc4LCAweDlkODYsIDB4MDAwNCwgMHgwOTA0LCAweDFhYjMsIDB4YTM3YywgMHhhMjgwLAotCTB4MDgwNCwgMHgxYWIzLCAweGE1ODQsIDB4YTQ4OCwgMHg5ZDg2LCAweDAwMDQsIDB4MDkwNCwgMHgxYWIzLAotCTB4YTM4YywgMHhhMjkwLCAweDA4MDQsIDB4MWFiMywgMHhhNTk0LCAweGE0OTgsIDB4OWQ4NiwgMHgwMDA0LAotCTB4MDkwNCwgMHgxYWIzLCAweGEzOWMsIDB4YTJhMCwgMHgwODA0LCAweDFhYjMsIDB4YTVhNCwgMHhhNGE4LAotCTB4OWQ4NiwgMHgwMDA0LCAweDA5MDQsIDB4MWFiMywgMHhhM2FjLCAweGEyYjAsIDB4MDgwNCwgMHgxYWIzLAotCTB4YTViNCwgMHhhNGI4LCAweDlkODYsIDB4MDAwNCwgMHgwOTA0LCAweDFhYjMsIDB4YTNiYywgMHhhMmMwLAotCTB4MDgwNCwgMHgxYWIzLCAweGE1YzQsIDB4YTRjOCwgMHg5ZDg2LCAweDAwMDQsIDB4MDkwNCwgMHgxYWIzLAotCTB4YTNjYywgMHhhMmQwLCAweDA4MDQsIDB4MWFiMywgMHhhNWQ0LCAweGE0ZDgsIDB4OWQ4NiwgMHgwMDA0LAotCTB4MDkwNCwgMHgxYWIzLCAweGEzZGMsIDB4YTJlMCwgMHgwODA0LCAweDFhYjMsIDB4YTg5OCwgMHg5MDFkLAotCTB4MTEwOCwgMHhhYjljLCAweDkwMTYsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZDc5LAotCTB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWE3NiwgMHgxYTc0LCAweDFhNzQsIDB4MWE3NCwgMHgxYTc0LAotCTB4MWE3NCwgMHgxYTgwLCAweDFhNzQsIDB4MWE3NCwgMHgxYTc0LCAweDFhNzQsIDB4MWE3NCwgMHgxYThhLAotCTB4MWE3NCwgMHgxYTc0LCAweDFhNzQsIDB4MWE3NCwgMHgxYTc0LCAweDFhOTQsIDB4MWE3NCwgMHgxYTc0LAotCTB4MWE3NCwgMHgxYTc0LCAweDFhNzQsIDB4MWE5ZSwgMHgwODBjLCAweDBkNzksIDB4YTU2YywgMHhhNDcwLAotCTB4YTc3NCwgMHhhNjc4LCAweDlkODYsIDB4MDAwYywgMHgwNWIwLCAweGEzN2MsIDB4YTI4MCwgMHgwNDk4LAotCTB4YTU4NCwgMHhhNDg4LCAweGE3OGMsIDB4YTY5MCwgMHg5ZDg2LCAweDAwMGMsIDB4MDU2MCwgMHhhMzk0LAotCTB4YTI5OCwgMHgwNDQ4LCAweGE1OWMsIDB4YTRhMCwgMHhhN2E0LCAweGE2YTgsIDB4OWQ4NiwgMHgwMDBjLAotCTB4MDUxMCwgMHhhM2FjLCAweGEyYjAsIDB4MDBmOCwgMHhhNWI0LCAweGE0YjgsIDB4YTdiYywgMHhhNmMwLAotCTB4OWQ4NiwgMHgwMDBjLCAweDAxYzAsIDB4YTNjNCwgMHhhMmM4LCAweDAwYTgsIDB4YTVjYywgMHhhNGQwLAotCTB4YTdkNCwgMHhhNmQ4LCAweDlkODYsIDB4MDAwYywgMHgwMTcwLCAweGEzZGMsIDB4YTJlMCwgMHgwMDU4LAotCTB4OWQ4NiwgMHgwMDBlLCAweDExMzAsIDB4MDgwYywgMHgxZWI0LCAweDE5MDQsIDB4MTk4NywgMHg5MDBlLAotCTB4MDA1MCwgMHgwODBjLCAweDBkNzksIDB4YWIyZSwgMHhhYTMyLCAweGFkMWUsIDB4YWMyMiwgMHhhZjI2LAotCTB4YWUyYSwgMHgwODBjLCAweDFlYjQsIDB4MDAwNSwgMHg2MDE0LCAweDIwNDgsIDB4NjExOCwgMHg4MWZmLAotCTB4MDE0OCwgMHg4MTBjLCAweDgxMGMsIDB4ODEwYywgMHg4MWZmLCAweDExMTgsIDB4YTg4NywgMHgwMDAxLAotCTB4MDAwOCwgMHhhOTg2LCAweDYwMWIsIDB4MDAwMiwgMHhhODc0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg0LAotCTB4MDAwOCwgMHgwMTUwLCAweDAwZTksIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTEyMCwgMHgyMDA5LAotCTB4MDA0OCwgMHgwODBjLCAweGFmZWMsIDB4MDAwNSwgMHhhOTc0LCAweGQxZGMsIDB4MTEwOCwgMHgwMDA1LAotCTB4YTkzNCwgMHhhODhjLCAweDkxMDYsIDB4MTE1OCwgMHhhOTM4LCAweGE4OTAsIDB4OTEwNiwgMHgxMTM4LAotCTB4NjAxYywgMHhjMDg0LCAweDYwMWUsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MDQsIDB4YWZlYywgMHgwMDA1LAotCTB4MDEyNiwgMHgwMGM2LCAweDIwOTEsIDB4MjIwMCwgMHgwMGNlLCAweDc5MDgsIDB4OTE4YywgMHgwMDA3LAotCTB4OTE4NiwgMHgwMDAwLCAweDA1YjAsIDB4OTE4NiwgMHgwMDAzLCAweDA1OTgsIDB4NjAyMCwgMHg2MDIzLAotCTB4MDAwMCwgMHgwMDA2LCAweDIwMzEsIDB4MDAwOCwgMHgwMGM2LCAweDc4MWYsIDB4MDgwOCwgMHg3ODA4LAotCTB4ZDA5YywgMHgwMTIwLCAweDA4MGMsIDB4MTNjOCwgMHg4NjMxLCAweDFkYjgsIDB4MDBjZSwgMHg3ODFmLAotCTB4MDgwMCwgMHgyMDMxLCAweDAxNjgsIDB4MDBjNiwgMHg3ODA4LCAweGQwOWMsIDB4MTkwYywgMHgxM2M4LAotCTB4MDBjZSwgMHgyMDAxLCAweDAwMzgsIDB4MDgwYywgMHgxYmNiLCAweDc5MzAsIDB4OTE4NiwgMHgwMDQwLAotCTB4MDE2MCwgMHg5MTg2LCAweDAwNDIsIDB4MTkwYywgMHgwZDc5LCAweDIwMDEsIDB4MDAxZSwgMHg4MDAxLAotCTB4MWRmMCwgMHg4NjMxLCAweDFkNDAsIDB4MDgwYywgMHgxYmRhLCAweDAwMGUsIDB4NjAyMiwgMHgwMTJlLAotCTB4MDAwNSwgMHgwODBjLCAweDFiYzcsIDB4NzgyNywgMHgwMDE1LCAweDc4MjgsIDB4OWMwNiwgMHgxZGI4LAotCTB4NzgyYiwgMHgwMDAwLCAweDBjYTAsIDB4MDBmNiwgMHgyMDc5LCAweDAzMDAsIDB4NzgwMywgMHgwMDAwLAotCTB4NzhhYiwgMHgwMDA0LCAweDIwMDEsIDB4ZjAwMCwgMHg4MDAxLCAweDA5MGMsIDB4MGQ3OSwgMHg3YWFjLAotCTB4ZDJhYywgMHgxZGQwLCAweDAwZmUsIDB4MDgwYywgMHg3NjlkLCAweDExODgsIDB4MjAwMSwgMHgwMTM4LAotCTB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDE2MCwgMHgyMDAzLCAweDAwMDAsIDB4MjAxMSwgMHgwMTJjLAotCTB4YTAwMSwgMHhhMDAxLCAweDgyMTEsIDB4MWRlMCwgMHgwMDU5LCAweDA4MDQsIDB4NzczZiwgMHgwNDc5LAotCTB4MDAzOSwgMHgyMDAxLCAweDAxNjAsIDB4MjUwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweDAyMDAsIDB4MDgwYywgMHgyYTk0LCAweDIwMDksIDB4MDAzYywgMHgwODBjLAotCTB4MjIzZCwgMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLCAweDcwMDAsIDB4OTA4NCwgMHgwMDNjLAotCTB4MWRlMCwgMHgwODBjLCAweDg3MzIsIDB4NzBhMCwgMHg3MGEyLCAweDcwOTgsIDB4NzA5YSwgMHg3MDljLAotCTB4NzA5ZSwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDIwLCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLAotCTB4MDgwYywgMHgxMzVhLCAweDc4MDMsIDB4MDAwMSwgMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLAotCTB4MDEzOCwgMHgyMDE0LCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAxNjAsIDB4MjAyYywgMHgyMDAzLAotCTB4MDAwMCwgMHgwODBjLCAweDc2OWQsIDB4MTEwOCwgMHgwMDA1LCAweDIwMjEsIDB4MDI2MCwgMHgyMDAxLAotCTB4MDE0MSwgMHgyMDFjLCAweGQzZGMsIDB4MTE2OCwgMHgyMDAxLCAweDAxMDksIDB4MjAxYywgMHg5MzljLAotCTB4MDA0OCwgMHgxMTYwLCAweDIwMDEsIDB4MDExMSwgMHgyMDFjLCAweDgzZmYsIDB4MTExMCwgMHg4NDIxLAotCTB4MWQ3MCwgMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MDA0NiwgMHgyMDIxLAotCTB4MDAxOSwgMHgyMDAzLCAweDAwNDgsIDB4YTAwMSwgMHhhMDAxLCAweDIwMWMsIDB4OTM5YywgMHgwMDQ4LAotCTB4MDEyMCwgMHg4NDIxLCAweDFkYjAsIDB4MDA0ZSwgMHgwYzYwLCAweDAwNGUsIDB4MGM0MCwgMHg2MDFjLAotCTB4YzA4NCwgMHg2MDFlLCAweDAwMDUsIDB4MmMwOCwgMHg2MjFjLCAweDA4MGMsIDB4MTZhZCwgMHg3OTMwLAotCTB4MDAwNSwgMHgyYzA4LCAweDYyMWMsIDB4MDgwYywgMHgxNmY2LCAweDc5MzAsIDB4MDAwNSwgMHg4MDAxLAotCTB4MWRmMCwgMHgwMDA1LCAweDIwMzEsIDB4MDA2NCwgMHg3ODFjLCAweDkwODQsIDB4MDAwNywgMHgwMTcwLAotCTB4MjAwMSwgMHgwMDM4LCAweDBjNDEsIDB4OTE4NiwgMHgwMDQwLCAweDA5MDQsIDB4MWMzOCwgMHgyMDAxLAotCTB4MDAxZSwgMHgwYzY5LCAweDg2MzEsIDB4MWQ4MCwgMHgwODBjLCAweDBkNzksIDB4NzgxZiwgMHgwMjAyLAotCTB4MjAwMSwgMHgwMTVkLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDBkYWMsIDB4MGMwMSwgMHg3ODFjLAotCTB4ZDA4NCwgMHgwMTEwLCAweDA4NjEsIDB4MDRlMCwgMHgyMDAxLCAweDAwMzAsIDB4MDg5MSwgMHg5MTg2LAotCTB4MDA0MCwgMHgwNTY4LCAweDc4MWMsIDB4ZDA4NCwgMHgxZGE4LCAweDc4MWYsIDB4MDEwMSwgMHgyMDAxLAotCTB4MDAxNCwgMHgwODY5LCAweDIwMDEsIDB4MDAzNywgMHgwODIxLCAweDkxODYsIDB4MDA0MCwgMHgwMTQwLAotCTB4MjAwMSwgMHgwMDMwLCAweDA4MGMsIDB4MWJkMSwgMHg5MTg2LCAweDAwNDAsIDB4MTkwYywgMHgwZDc5LAotCTB4MDBkNiwgMHgyMDY5LCAweDAyMDAsIDB4NjkyYywgMHhkMWY0LCAweDExNzAsIDB4ZDFjNCwgMHgwMTYwLAotCTB4ZDE5YywgMHgwMTMwLCAweDY4MDAsIDB4OTA4NSwgMHgxODAwLCAweDY4MDIsIDB4MDBkZSwgMHgwMDgwLAotCTB4NjkwOCwgMHg5MTg0LCAweDAwMDcsIDB4MWRiMCwgMHgwMGRlLCAweDc4MWYsIDB4MDEwMCwgMHg3OTFjLAotCTB4OTE4NCwgMHgwMDA3LCAweDA5MGMsIDB4MGQ3OSwgMHhhMDAxLCAweGEwMDEsIDB4NzgxZiwgMHgwMjAwLAotCTB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4MjQwMCwgMHgyMDc5LCAweDAzODAsIDB4MjAwMSwgMHgxOWU5LAotCTB4MjA3MCwgMHgwMTJlLCAweDAwMDUsIDB4MmNmMCwgMHgwMTI2LCAweDIwOTEsIDB4MjQwMCwgMHgzZTYwLAotCTB4NjAxNCwgMHgyMDQ4LCAweGE5NjQsIDB4YTkxYSwgMHg5MThjLCAweDAwZmYsIDB4OTE4NCwgMHgwMDBmLAotCTB4MDAwMiwgMHgxYzZkLCAweDFjNmQsIDB4MWM2ZCwgMHgxYzZmLCAweDFjNmQsIDB4MWM2ZCwgMHgxYzZkLAotCTB4MWM2ZCwgMHgxYzYxLCAweDFjNzcsIDB4MWM2ZCwgMHgxYzczLCAweDFjNmQsIDB4MWM2ZCwgMHgxYzZkLAotCTB4MWM2ZCwgMHg5MDg2LCAweDAwMDgsIDB4MTE0OCwgMHhhODdjLCAweGQwYjQsIDB4MDkwNCwgMHgxZGU3LAotCTB4MjAxMSwgMHgxZWQ5LCAweDIyMDUsIDB4YWI4OCwgMHgwMGE4LCAweDA4MGMsIDB4MGQ3OSwgMHg5MTg2LAotCTB4MDAxMywgMHgwMTI4LCAweDBjZDAsIDB4OTE4NiwgMHgwMDFiLCAweDAxMDgsIDB4MGNiMCwgMHhhODdjLAotCTB4ZDBiNCwgMHgwOTA0LCAweDFkZTcsIDB4OTE4NCwgMHgwMDBmLCAweDkwODAsIDB4MWVkZSwgMHgyMDE1LAotCTB4MjIwNSwgMHhhYjg4LCAweDI5MDgsIDB4YTgwYSwgMHhhOTBlLCAweGFhMTIsIDB4YWIxNiwgMHg5MDA2LAotCTB4YTg0MiwgMHhhODNlLCAweDAxMmUsIDB4MDAwNSwgMHgyY2YwLCAweDAxMjYsIDB4MjA5MSwgMHgyNDAwLAotCTB4M2U2MCwgMHg2MDE0LCAweDIwNDgsIDB4YTg4YywgMHhhOTkwLCAweGFhYWMsIDB4YWJiMCwgMHhhYTM2LAotCTB4YWIzYSwgMHhhODNlLCAweGE5NDIsIDB4YTg0NiwgMHhhOTRhLCAweGE5NjQsIDB4OTE4YywgMHgwMGZmLAotCTB4OTE4NiwgMHgwMDFlLCAweDAxOTgsIDB4Mjk0MCwgMHhhMDY0LCAweGE4MWEsIDB4OTBlYywgMHgwMDBmLAotCTB4OWQ4MCwgMHgxZWRlLCAweDIwNjUsIDB4MmMwNSwgMHgyODA4LCAweDJjMTAsIDB4YWI4OCwgMHhhODBhLAotCTB4YTkwZSwgMHhhYTEyLCAweGFiMTYsIDB4MDEyZSwgMHgzZTYwLCAweDAwMDUsIDB4YTgwNCwgMHgyMDQwLAotCTB4MGM1OCwgMHgyY2YwLCAweDAxMjYsIDB4MjA5MSwgMHgyNDAwLCAweDNlNjAsIDB4NjAxNCwgMHgyMDQ4LAotCTB4YTk3YywgMHgyOTUwLCAweGQxZGMsIDB4MTkwNCwgMHgxZGIxLCAweGMxZGQsIDB4YTk3ZSwgMHg5MDA2LAotCTB4YTg0MiwgMHhhODNlLCAweGE5ODgsIDB4ODEwOSwgMHhhOTE2LCAweGE5NjQsIDB4YTkxYSwgMHg5MTg0LAotCTB4MDAwZiwgMHg5MDg4LCAweDFlZGUsIDB4MjE0NSwgMHgwMDAyLCAweDFjZTUsIDB4MWNmMywgMHgxY2U1LAotCTB4MWNlNSwgMHgxY2U1LCAweDFjZTcsIDB4MWNlNSwgMHgxY2U1LCAweDFkNDgsIDB4MWQ0OCwgMHgxY2U1LAotCTB4MWNlNSwgMHgxY2U1LCAweDFkNDYsIDB4MWNlNSwgMHgxY2U1LCAweDA4MGMsIDB4MGQ3OSwgMHhhODA0LAotCTB4MjA1MCwgMHhiMTY0LCAweGE5MWEsIDB4OTE4NCwgMHgwMDBmLCAweDkwODAsIDB4MWVkZSwgMHgyMDQ1LAotCTB4ZDE5YywgMHgxOTA0LCAweDFkNDgsIDB4OTAzNiwgMHgyNjM4LCAweDI4MDUsIDB4OTA4YSwgMHgwMDM2LAotCTB4MWEwYywgMHgwZDc5LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDFkMTgsIDB4MWQxOCwgMHgxZDFhLAotCTB4MWQxOCwgMHgxZDE4LCAweDFkMTgsIDB4MWQyMCwgMHgxZDE4LCAweDFkMTgsIDB4MWQxOCwgMHgxZDI2LAotCTB4MWQxOCwgMHgxZDE4LCAweDFkMTgsIDB4MWQyYywgMHgxZDE4LCAweDFkMTgsIDB4MWQxOCwgMHgxZDMyLAotCTB4MWQxOCwgMHgxZDE4LCAweDFkMTgsIDB4MWQzOCwgMHgxZDE4LCAweDFkMTgsIDB4MWQxOCwgMHgxZDNlLAotCTB4MDgwYywgMHgwZDc5LCAweGI1NzQsIDB4YjQ3OCwgMHhiMzdjLCAweGIyODAsIDB4MDgwNCwgMHgxZDhkLAotCTB4YjU4NCwgMHhiNDg4LCAweGIzOGMsIDB4YjI5MCwgMHgwODA0LCAweDFkOGQsIDB4YjU5NCwgMHhiNDk4LAotCTB4YjM5YywgMHhiMmEwLCAweDA4MDQsIDB4MWQ4ZCwgMHhiNWE0LCAweGI0YTgsIDB4YjNhYywgMHhiMmIwLAotCTB4MDgwNCwgMHgxZDhkLCAweGI1YjQsIDB4YjRiOCwgMHhiM2JjLCAweGIyYzAsIDB4MDgwNCwgMHgxZDhkLAotCTB4YjVjNCwgMHhiNGM4LCAweGIzY2MsIDB4YjJkMCwgMHgwODA0LCAweDFkOGQsIDB4YjVkNCwgMHhiNGQ4LAotCTB4YjNkYywgMHhiMmUwLCAweDA4MDQsIDB4MWQ4ZCwgMHgwODA0LCAweDFkOGQsIDB4MDgwYywgMHgwZDc5LAotCTB4MjgwNSwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZDc5LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLAotCTB4MWQ2YiwgMHgxZDY5LCAweDFkNjksIDB4MWQ2OSwgMHgxZDY5LCAweDFkNjksIDB4MWQ3MiwgMHgxZDY5LAotCTB4MWQ2OSwgMHgxZDY5LCAweDFkNjksIDB4MWQ2OSwgMHgxZDc5LCAweDFkNjksIDB4MWQ2OSwgMHgxZDY5LAotCTB4MWQ2OSwgMHgxZDY5LCAweDFkODAsIDB4MWQ2OSwgMHgxZDY5LCAweDFkNjksIDB4MWQ2OSwgMHgxZDY5LAotCTB4MWQ4NywgMHgwODBjLCAweDBkNzksIDB4YjU2YywgMHhiNDcwLCAweGI3NzQsIDB4YjY3OCwgMHhiMzdjLAotCTB4YjI4MCwgMHgwMGQ4LCAweGI1ODQsIDB4YjQ4OCwgMHhiNzhjLCAweGI2OTAsIDB4YjM5NCwgMHhiMjk4LAotCTB4MDBhMCwgMHhiNTljLCAweGI0YTAsIDB4YjdhNCwgMHhiNmE4LCAweGIzYWMsIDB4YjJiMCwgMHgwMDY4LAotCTB4YjViNCwgMHhiNGI4LCAweGI3YmMsIDB4YjZjMCwgMHhiM2M0LCAweGIyYzgsIDB4MDAzMCwgMHhiNWNjLAotCTB4YjRkMCwgMHhiN2Q0LCAweGI2ZDgsIDB4YjNkYywgMHhiMmUwLCAweGFiMmUsIDB4YWEzMiwgMHhhZDFlLAotCTB4YWMyMiwgMHhhZjI2LCAweGFlMmEsIDB4YTk4OCwgMHg4MTA5LCAweGE5MTYsIDB4MTExOCwgMHg5MDA2LAotCTB4MDEyZSwgMHgwMDA1LCAweDg4NDAsIDB4MjgwNSwgMHg5MDA1LCAweDExNjgsIDB4YjAwNCwgMHg5MDA1LAotCTB4MDkwYywgMHgwZDc5LCAweDIwNTAsIDB4YjE2NCwgMHhhOTFhLCAweDkxODQsIDB4MDAwZiwgMHg5MDgwLAotCTB4MWVkZSwgMHgyMDQ1LCAweDI4MDUsIDB4MjgxMCwgMHgyYTA4LCAweGE4MGEsIDB4YTkwZSwgMHhhYTEyLAotCTB4MGMzMCwgMHgzZTYwLCAweDYzNDQsIDB4ZDNmYywgMHgxOTBjLCAweDBkNzksIDB4YTkzYywgMHhhYTQwLAotCTB4YTg0NCwgMHg5MTA2LCAweDExMTgsIDB4YTg0OCwgMHg5MjA2LCAweDA1MDgsIDB4Mjk1OCwgMHhhYjQ4LAotCTB4YWM0NCwgMHgyOTQwLCAweDA4MGMsIDB4MWVmZSwgMHgxOTk4LCAweDI4NTAsIDB4MmM0MCwgMHhhYjE0LAotCTB4YTg4MCwgMHhkMGZjLCAweDExNDAsIDB4YTgxMCwgMHgyMDA1LCAweGE4MGEsIDB4MmEwMCwgMHhhODBlLAotCTB4MjAwOSwgMHg4MDE1LCAweDAwNzAsIDB4MDBjNiwgMHgzZTYwLCAweDYwNDQsIDB4YzBhNCwgMHg5MDg1LAotCTB4ODAwNSwgMHg2MDQ2LCAweDAwY2UsIDB4ODMxOSwgMHhhYjE2LCAweDE5MDQsIDB4MWQ5YSwgMHgyMDA5LAotCTB4ODAwNSwgMHgzZTYwLCAweDYwNDQsIDB4OTEwNSwgMHg2MDQ2LCAweDA4MDQsIDB4MWQ5NywgMHgwODBjLAotCTB4MGQ3OSwgMHgwMGY2LCAweDAwZTYsIDB4MDA5NiwgMHgwMGM2LCAweDAwMjYsIDB4NzA0YywgMHg5YzA2LAotCTB4MTkwYywgMHgwZDc5LCAweDIwNzksIDB4MDA5MCwgMHgyMDAxLCAweDAxMDUsIDB4MjAwMywgMHgwMDEwLAotCTB4NzgyYiwgMHgwMDA0LCAweDcwNTcsIDB4MDAwMCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLAotCTB4MDExOCwgMHhhODgwLCAweGMwYmQsIDB4YTg4MiwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxMTcwLAotCTB4MjA2MSwgMHgwMTAwLCAweDYyYzgsIDB4MjAwMSwgMHgwMGZhLCAweDgwMDEsIDB4MWRmMCwgMHg2MGM4LAotCTB4OTIwNiwgMHgxZGMwLCAweDYwYzQsIDB4YTg5YSwgMHg2MGM4LCAweGE4OTYsIDB4NzA0YywgMHgyMDYwLAotCTB4MDBjNiwgMHgwODBjLCAweGM4MWIsIDB4MDgwYywgMHhhYWY3LCAweDAwY2UsIDB4NzA0YywgMHg5YzA2LAotCTB4MTE1MCwgMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyMjNkLCAweDA4MGMsIDB4YTU5YywgMHgyMDExLAotCTB4MDAwMCwgMHgwODBjLCAweGE0MzAsIDB4MDAyZSwgMHgwMGNlLCAweDAwOWUsIDB4MDBlZSwgMHgwMGZlLAotCTB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDA5MCwgMHg3ODFjLCAweDAwMDYsIDB4NzgxOCwgMHgwMDA2LAotCTB4MjA3OSwgMHgwMTAwLCAweDdhMTQsIDB4OTI4NCwgMHgxOTg0LCAweDkwODUsIDB4MDAxMiwgMHg3ODE2LAotCTB4MjAxOSwgMHgxMDAwLCAweDgzMTksIDB4MDkwYywgMHgwZDc5LCAweDc4MjAsIDB4ZDBiYywgMHgxZGQwLAotCTB4NzljOCwgMHgwMDBlLCAweDkxMDIsIDB4MDAxZSwgMHgwMDA2LCAweDAwMTYsIDB4NzljNCwgMHgwMDBlLAotCTB4OTEwMywgMHg3OGM2LCAweDAwMGUsIDB4NzhjYSwgMHg5Mjg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDEyLAotCTB4NzgxNiwgMHgyMDc5LCAweDAwOTAsIDB4NzgyYiwgMHgwMDA4LCAweDcwNTcsIDB4MDAwMCwgMHgwMGZlLAotCTB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwgMHgxOWU5LCAweDcwNTQsIDB4OTA4NiwgMHgwMDAwLAotCTB4MDkwNCwgMHgxZWFmLCAweDIwNzksIDB4MDA5MCwgMHgyMDA5LCAweDAyMDcsIDB4MjEwYywgMHhkMTk0LAotCTB4MDFiOCwgMHgyMDA5LCAweDAyMGMsIDB4MjEwYywgMHg5MTg0LCAweDAwMDMsIDB4MDE4OCwgMHgwODBjLAotCTB4ZWMwOSwgMHgyMDAxLCAweDAxMzMsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsIDB4MGQ3OSwgMHgwMDE2LAotCTB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIzZCwgMHgwMDFlLCAweDIwMDEsIDB4MDIwYywgMHgyMTAyLAotCTB4MjAwOSwgMHgwMjA2LCAweDIxMDQsIDB4MjAwOSwgMHgwMjAzLCAweDIxMGMsIDB4OTEwNiwgMHgxMTIwLAotCTB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIzZCwgMHg3ODJjLCAweGQwZmMsIDB4MDlhOCwgMHgwODBjLAotCTB4YWIxMywgMHg3ODJjLCAweGQwZmMsIDB4MWRlOCwgMHgwODBjLCAweGFhZjcsIDB4NzA1NCwgMHg5MDg2LAotCTB4MDAwMCwgMHgxOTUwLCAweDc4MmIsIDB4MDAwNCwgMHg3ODJjLCAweGQwYWMsIDB4MWRlOCwgMHgyMDA5LAotCTB4MDA0MCwgMHgwODBjLCAweDIyM2QsIDB4NzgyYiwgMHgwMDAyLCAweDcwNTcsIDB4MDAwMCwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDA4MGMsIDB4MGQ3OSwgMHg4YzYwLCAweDJjMDUsIDB4OTAwNSwgMHgwMTEwLAotCTB4OGE1MSwgMHgwMDA1LCAweGEwMDQsIDB4OTAwNSwgMHgwMTY4LCAweGE4NWEsIDB4MjA0MCwgMHhhMDY0LAotCTB4OTA4NCwgMHgwMDBmLCAweDkwODAsIDB4MWVkZSwgMHgyMDY1LCAweDhjZmYsIDB4MDkwYywgMHgwZDc5LAotCTB4OGE1MSwgMHgwMDA1LCAweDIwNTAsIDB4MDAwNSwgMHgwMDAwLCAweDAwMWQsIDB4MDAyMSwgMHgwMDI1LAotCTB4MDAyOSwgMHgwMDJkLCAweDAwMzEsIDB4MDAzNSwgMHgwMDAwLCAweDAwMWIsIDB4MDAyMSwgMHgwMDI3LAotCTB4MDAyZCwgMHgwMDMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDIzLCAweDAwMDAsIDB4MDAwMCwgMHgxZWQxLAotCTB4MWVjZCwgMHgxZWQxLCAweDFlZDEsIDB4MWVkYiwgMHgwMDAwLCAweDFlZDEsIDB4MWVkOCwgMHgxZWQ4LAotCTB4MWVkNSwgMHgxZWQ4LCAweDFlZDgsIDB4MDAwMCwgMHgxZWRiLCAweDFlZDgsIDB4MDAwMCwgMHgxZWQzLAotCTB4MWVkMywgMHgwMDAwLCAweDFlZDMsIDB4MWVkYiwgMHgwMDAwLCAweDFlZDMsIDB4MWVkOSwgMHgxZWQ5LAotCTB4MWVkOSwgMHgwMDAwLCAweDFlZDksIDB4MDAwMCwgMHgxZWRiLCAweDFlZDksIDB4MDBjNiwgMHgwMGQ2LAotCTB4MDA4NiwgMHhhYjQyLCAweGFjM2UsIDB4YTg4OCwgMHg5MDU1LCAweDA5MDQsIDB4MjBkZCwgMHgyOTQwLAotCTB4YTA2NCwgMHg5MGVjLCAweDAwMGYsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwOCwgMHgxMTE4LAotCTB4MjA2MSwgMHgxZWQ5LCAweDAwZDAsIDB4OWRlMCwgMHgxZWRlLCAweDlkODYsIDB4MDAwNywgMHgwMTMwLAotCTB4OWQ4NiwgMHgwMDBlLCAweDAxMTgsIDB4OWQ4NiwgMHgwMDBmLCAweDExMjAsIDB4YTA4YywgMHg5NDIyLAotCTB4YTA5MCwgMHg5MzFiLCAweDJjMDUsIDB4OTA2NSwgMHgxMTQwLCAweDAzMTAsIDB4MDgwNCwgMHgyMGRkLAotCTB4YTAwNCwgMHg5MDQ1LCAweDA5MDQsIDB4MjBkZCwgMHgwOGQ4LCAweDJjMDUsIDB4OTAwNSwgMHgwOTA0LAotCTB4MWZjNSwgMHhkZDljLCAweDE5MDQsIDB4MWY4MSwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZDc5LAotCTB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWY1NiwgMHgxZjU2LCAweDFmNTgsIDB4MWY1NiwgMHgxZjU2LAotCTB4MWY1NiwgMHgxZjVlLCAweDFmNTYsIDB4MWY1NiwgMHgxZjU2LCAweDFmNjQsIDB4MWY1NiwgMHgxZjU2LAotCTB4MWY1NiwgMHgxZjZhLCAweDFmNTYsIDB4MWY1NiwgMHgxZjU2LCAweDFmNzAsIDB4MWY1NiwgMHgxZjU2LAotCTB4MWY1NiwgMHgxZjc2LCAweDFmNTYsIDB4MWY1NiwgMHgxZjU2LCAweDFmN2MsIDB4MDgwYywgMHgwZDc5LAotCTB4YTA3YywgMHg5NDIyLCAweGEwODAsIDB4OTMxYiwgMHgwODA0LCAweDFmYmIsIDB4YTA4YywgMHg5NDIyLAotCTB4YTA5MCwgMHg5MzFiLCAweDA4MDQsIDB4MWZiYiwgMHhhMDljLCAweDk0MjIsIDB4YTBhMCwgMHg5MzFiLAotCTB4MDgwNCwgMHgxZmJiLCAweGEwYWMsIDB4OTQyMiwgMHhhMGIwLCAweDkzMWIsIDB4MDgwNCwgMHgxZmJiLAotCTB4YTBiYywgMHg5NDIyLCAweGEwYzAsIDB4OTMxYiwgMHgwODA0LCAweDFmYmIsIDB4YTBjYywgMHg5NDIyLAotCTB4YTBkMCwgMHg5MzFiLCAweDA4MDQsIDB4MWZiYiwgMHhhMGRjLCAweDk0MjIsIDB4YTBlMCwgMHg5MzFiLAotCTB4MDRkMCwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZDc5LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLAotCTB4MWZhMywgMHgxZmExLCAweDFmYTEsIDB4MWZhMSwgMHgxZmExLCAweDFmYTEsIDB4MWZhOCwgMHgxZmExLAotCTB4MWZhMSwgMHgxZmExLCAweDFmYTEsIDB4MWZhMSwgMHgxZmFkLCAweDFmYTEsIDB4MWZhMSwgMHgxZmExLAotCTB4MWZhMSwgMHgxZmExLCAweDFmYjIsIDB4MWZhMSwgMHgxZmExLCAweDFmYTEsIDB4MWZhMSwgMHgxZmExLAotCTB4MWZiNywgMHgwODBjLCAweDBkNzksIDB4YTA3YywgMHg5NDIyLCAweGEwODAsIDB4OTMxYiwgMHgwMDk4LAotCTB4YTA5NCwgMHg5NDIyLCAweGEwOTgsIDB4OTMxYiwgMHgwMDcwLCAweGEwYWMsIDB4OTQyMiwgMHhhMGIwLAotCTB4OTMxYiwgMHgwMDQ4LCAweGEwYzQsIDB4OTQyMiwgMHhhMGM4LCAweDkzMWIsIDB4MDAyMCwgMHhhMGRjLAotCTB4OTQyMiwgMHhhMGUwLCAweDkzMWIsIDB4MDYzMCwgMHgyMzAwLCAweDk0MDUsIDB4MDE2MCwgMHg4YTUxLAotCTB4MDkwNCwgMHgyMGRkLCAweDhjNjAsIDB4MDgwNCwgMHgxZjJkLCAweGEwMDQsIDB4OTA0NSwgMHgwOTA0LAotCTB4MjBkZCwgMHgwODA0LCAweDFmMDgsIDB4OGE1MSwgMHgwOTA0LCAweDIwZGQsIDB4OGM2MCwgMHgyYzA1LAotCTB4OTAwNSwgMHgxMTU4LCAweGEwMDQsIDB4OTA0NSwgMHgwOTA0LCAweDIwZGQsIDB4YTA2NCwgMHg5MGVjLAotCTB4MDAwZiwgMHg5ZGUwLCAweDFlZGUsIDB4MmMwNSwgMHgyMDYwLCAweGE4ODAsIDB4YzBmYywgMHhhODgyLAotCTB4MDgwNCwgMHgyMGQyLCAweDJjMDUsIDB4ODQyMiwgMHg4NDIwLCAweDgzMWEsIDB4OTM5OSwgMHgwMDAwLAotCTB4YWMyZSwgMHhhYjMyLCAweGRkOWMsIDB4MTkwNCwgMHgyMDZmLCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLAotCTB4MjAwYiwgMHgyMDBiLCAweDIwMGQsIDB4MjAwYiwgMHgyMDBiLCAweDIwMGIsIDB4MjAxYiwgMHgyMDBiLAotCTB4MjAwYiwgMHgyMDBiLCAweDIwMjksIDB4MjAwYiwgMHgyMDBiLCAweDIwMGIsIDB4MjAzNywgMHgyMDBiLAotCTB4MjAwYiwgMHgyMDBiLCAweDIwNDUsIDB4MjAwYiwgMHgyMDBiLCAweDIwMGIsIDB4MjA1MywgMHgyMDBiLAotCTB4MjAwYiwgMHgyMDBiLCAweDIwNjEsIDB4MDgwYywgMHgwZDc5LCAweGExN2MsIDB4MjQwMCwgMHg5MTIyLAotCTB4YTE4MCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZDc5LCAweGEwNzQsIDB4OTQyMCwgMHhhMDc4LAotCTB4OTMxOSwgMHgwODA0LCAweDIwY2QsIDB4YTE4YywgMHgyNDAwLCAweDkxMjIsIDB4YTE5MCwgMHgyMzAwLAotCTB4OTExYiwgMHgwYTBjLCAweDBkNzksIDB4YTA4NCwgMHg5NDIwLCAweGEwODgsIDB4OTMxOSwgMHgwODA0LAotCTB4MjBjZCwgMHhhMTljLCAweDI0MDAsIDB4OTEyMiwgMHhhMWEwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLAotCTB4MGQ3OSwgMHhhMDk0LCAweDk0MjAsIDB4YTA5OCwgMHg5MzE5LCAweDA4MDQsIDB4MjBjZCwgMHhhMWFjLAotCTB4MjQwMCwgMHg5MTIyLCAweGExYjAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGQ3OSwgMHhhMGE0LAotCTB4OTQyMCwgMHhhMGE4LCAweDkzMTksIDB4MDgwNCwgMHgyMGNkLCAweGExYmMsIDB4MjQwMCwgMHg5MTIyLAotCTB4YTFjMCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZDc5LCAweGEwYjQsIDB4OTQyMCwgMHhhMGI4LAotCTB4OTMxOSwgMHgwODA0LCAweDIwY2QsIDB4YTFjYywgMHgyNDAwLCAweDkxMjIsIDB4YTFkMCwgMHgyMzAwLAotCTB4OTExYiwgMHgwYTBjLCAweDBkNzksIDB4YTBjNCwgMHg5NDIwLCAweGEwYzgsIDB4OTMxOSwgMHgwODA0LAotCTB4MjBjZCwgMHhhMWRjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWUwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLAotCTB4MGQ3OSwgMHhhMGQ0LCAweDk0MjAsIDB4YTBkOCwgMHg5MzE5LCAweDA4MDQsIDB4MjBjZCwgMHg5MDgyLAotCTB4MDAxYiwgMHgwMDAyLCAweDIwOGQsIDB4MjA4YiwgMHgyMDhiLCAweDIwOGIsIDB4MjA4YiwgMHgyMDhiLAotCTB4MjA5YSwgMHgyMDhiLCAweDIwOGIsIDB4MjA4YiwgMHgyMDhiLCAweDIwOGIsIDB4MjBhNywgMHgyMDhiLAotCTB4MjA4YiwgMHgyMDhiLCAweDIwOGIsIDB4MjA4YiwgMHgyMGI0LCAweDIwOGIsIDB4MjA4YiwgMHgyMDhiLAotCTB4MjA4YiwgMHgyMDhiLCAweDIwYzEsIDB4MDgwYywgMHgwZDc5LCAweGExN2MsIDB4MjQwMCwgMHg5MTIyLAotCTB4YTE4MCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZDc5LCAweGEwNmMsIDB4OTQyMCwgMHhhMDcwLAotCTB4OTMxOSwgMHgwNDk4LCAweGExOTQsIDB4MjQwMCwgMHg5MTIyLCAweGExOTgsIDB4MjMwMCwgMHg5MTFiLAotCTB4MGEwYywgMHgwZDc5LCAweGEwODQsIDB4OTQyMCwgMHhhMDg4LCAweDkzMTksIDB4MDQzMCwgMHhhMWFjLAotCTB4MjQwMCwgMHg5MTIyLCAweGExYjAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGQ3OSwgMHhhMDljLAotCTB4OTQyMCwgMHhhMGEwLCAweDkzMTksIDB4MDBjOCwgMHhhMWM0LCAweDI0MDAsIDB4OTEyMiwgMHhhMWM4LAotCTB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGQ3OSwgMHhhMGI0LCAweDk0MjAsIDB4YTBiOCwgMHg5MzE5LAotCTB4MDA2MCwgMHhhMWRjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWUwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLAotCTB4MGQ3OSwgMHhhMGNjLCAweDk0MjAsIDB4YTBkMCwgMHg5MzE5LCAweGFjMWUsIDB4YWIyMiwgMHhhODgwLAotCTB4YzBmZCwgMHhhODgyLCAweDI4MDAsIDB4YTg1YSwgMHgyYzAwLCAweGE4MTIsIDB4MmEwMCwgMHhhODE2LAotCTB4MDAwZSwgMHgwMDBlLCAweDAwMGUsIDB4OTAwNiwgMHgwMDI4LCAweDAwOGUsIDB4MDBkZSwgMHgwMGNlLAotCTB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBjNiwgMHg2MTBjLCAweDAwMTYsIDB4OTAyNiwgMHgyNDEwLAotCTB4NjAwNCwgMHg5NDIwLCAweDkyOTEsIDB4MDAwMCwgMHgyYzA0LCAweDkyMTAsIDB4OWNlMCwgMHgwMDAyLAotCTB4OTE4YSwgMHgwMDAyLCAweDFkYTgsIDB4OTI4NCwgMHgwMDBmLCAweDk0MDUsIDB4MDAxZSwgMHgwMGNlLAotCTB4MDAwNSwgMHg3ODAzLCAweDAwMDMsIDB4NzgwZiwgMHgwMDAwLCAweDYwMDQsIDB4NzgxMiwgMHgyYzA0LAotCTB4NzgxNiwgMHg5Y2UwLCAweDAwMDIsIDB4OTE4YSwgMHgwMDAyLCAweDFkYjgsIDB4MDAwNSwgMHgyMDAxLAotCTB4MDAwNSwgMHgyMDA0LCAweGQwYmMsIDB4MTkwYywgMHgwZDcyLCAweGQwOTQsIDB4MDExMCwgMHgwODBjLAotCTB4MTFmYywgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyNjAwLCAweDIwNzksIDB4MDIwMCwgMHgyMDcxLAotCTB4MDI2MCwgMHgyMDY5LCAweDE4MDAsIDB4NzgxNywgMHgwMDAwLCAweDc4OWIsIDB4MDgxNCwgMHg3OGEzLAotCTB4MDQwNiwgMHg3ODlmLCAweDA0MTAsIDB4MjAwOSwgMHgwMTNiLCAweDIwMGIsIDB4MDQwMCwgMHg3ODFiLAotCTB4MDAwMiwgMHg3ODNiLCAweDAwMWYsIDB4NzgzNywgMHgwMDIwLCAweDc4MDMsIDB4MTYwMCwgMHgwMTJlLAotCTB4MDAwNSwgMHgyMDkxLCAweDI2MDAsIDB4NzgxYywgMHhkMGE0LCAweDE5MGMsIDB4MjIzYSwgMHg3OTAwLAotCTB4ZDFkYywgMHgxMTE4LCAweDkwODQsIDB4MDAwNiwgMHgwMDFhLCAweDkwODQsIDB4MDAwZSwgMHgwMDAyLAotCTB4MjE1OCwgMHgyMTUwLCAweDgwYTksIDB4MjE1MCwgMHgyMTUyLCAweDIxNTIsIDB4MjE1MiwgMHgyMTUyLAotCTB4ODA4ZiwgMHgyMTUwLCAweDIxNTQsIDB4MjE1MCwgMHgyMTUyLCAweDIxNTAsIDB4MjE1MiwgMHgyMTUwLAotCTB4MDgwYywgMHgwZDc5LCAweDAwMzEsIDB4MDAyMCwgMHgwODBjLCAweDgwOGYsIDB4MDgwYywgMHg4MGE5LAotCTB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweGVjMDksIDB4NzkzMCwgMHg5MTg0LAotCTB4MDAwMywgMHgwNTEwLCAweDA4MGMsIDB4YWFmNywgMHgyMDAxLCAweDE5ZmMsIDB4MjAwNCwgMHg5MDA1LAotCTB4MDFhMCwgMHgyMDAxLCAweDAxMzMsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsIDB4MGQ3OSwgMHgwMGM2LAotCTB4MjAwMSwgMHgxOWZjLCAweDIwNjQsIDB4MDgwYywgMHhhYjEzLCAweDA4MGMsIDB4YzgxYiwgMHgyMDA5LAotCTB4MDA0MCwgMHgwODBjLCAweDIyM2QsIDB4MDBjZSwgMHgwNDA4LCAweDIwMDksIDB4MDA0MCwgMHgwODBjLAotCTB4MjIzZCwgMHgwODBjLCAweGFiMTMsIDB4MDBkMCwgMHg5MTg0LCAweDAwMTQsIDB4MDFhMCwgMHg2YTAwLAotCTB4OTI4NiwgMHgwMDAzLCAweDAxNjAsIDB4MDgwYywgMHg3NjlkLCAweDExMzgsIDB4MDgwYywgMHg3OTlmLAotCTB4MDgwYywgMHg2MTc4LCAweDA4MGMsIDB4NzVjYywgMHgwMDEwLCAweDA4MGMsIDB4NjAzMywgMHgwODBjLAotCTB4ODE0NywgMHgwMDQxLCAweDAwMTgsIDB4OTE4NCwgMHg5NTQwLCAweDFkYzgsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDAwZSwgMHgwMDA1LCAweDAwZTYsIDB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MjA3MSwgMHgxYTZmLAotCTB4MDgwYywgMHgxYjNiLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LAotCTB4MjA5MSwgMHgyZTAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MTI4LCAweDIwMDEsIDB4MTk3MCwgMHgyMTAyLAotCTB4MjAwMSwgMHgxOTc4LCAweDIxMDIsIDB4MjAwMSwgMHgwMTNiLCAweDIxMDIsIDB4MjA3OSwgMHgwMjAwLAotCTB4MjAwMSwgMHgwMjAxLCAweDc4OWUsIDB4NzhhMywgMHgwMjAwLCAweDkxOTgsIDB4MDAwNywgMHg4MzFjLAotCTB4ODMxYywgMHg4MzFjLCAweDkzOTgsIDB4MDAwNSwgMHgyMzIwLCAweDkxODIsIDB4MDIwNCwgMHgxMjMwLAotCTB4MjAxMSwgMHgwMDA4LCAweDg0MjMsIDB4ODQyMywgMHg4NDIzLCAweDA0ODgsIDB4OTE4MiwgMHgwMjRjLAotCTB4MTI0MCwgMHgyMDExLCAweDAwMDcsIDB4ODQwMywgMHg4MDAzLCAweDk0MDAsIDB4OTQwMCwgMHg5NDIwLAotCTB4MDQzMCwgMHg5MTgyLCAweDAyYmMsIDB4MTIzOCwgMHgyMDExLCAweDAwMDYsIDB4ODQwMywgMHg4MDAzLAotCTB4OTQwMCwgMHg5NDIwLCAweDAwZTAsIDB4OTE4MiwgMHgwMzRjLCAweDEyMzAsIDB4MjAxMSwgMHgwMDA1LAotCTB4ODQwMywgMHg4MDAzLCAweDk0MjAsIDB4MDA5OCwgMHg5MTgyLCAweDA0MmMsIDB4MTIyOCwgMHgyMDExLAotCTB4MDAwNCwgMHg4NDIzLCAweDg0MjMsIDB4MDA1OCwgMHg5MTgyLCAweDA1OWMsIDB4MTIyOCwgMHgyMDExLAotCTB4MDAwMywgMHg4NDAzLCAweDk0MjAsIDB4MDAxOCwgMHgyMDExLCAweDAwMDIsIDB4ODQyMywgMHg5NDgyLAotCTB4MDIyOCwgMHg4MDAyLCAweDgwMjAsIDB4ODMwMSwgMHg5NDAyLCAweDAxMTAsIDB4MDIwOCwgMHg4MzIxLAotCTB4ODIxNywgMHg4MjAzLCAweDk0MDUsIDB4Nzg5YSwgMHgwMTJlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMjAwLCAweDY4MTQsIDB4OTA4NCwgMHhmZmMwLCAweDkxMGQsIDB4NjkxNiwgMHgwMGRlLAotCTB4MDAwZSwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDkwMDUsIDB4NjgxMCwgMHgwMTEwLAotCTB4YzBhNSwgMHgwMDA4LCAweGMwYTQsIDB4NjgxMiwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMjAwLCAweDY4MTAsIDB4OTA4NCwgMHhmZmY4LCAweDkxMGQsIDB4NjkxMiwgMHgwMGRlLAotCTB4MDAwZSwgMHgwMDA1LCAweDc5MzgsIDB4MDgwYywgMHgwZDcyLCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLAotCTB4NzkwMiwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHg3OTAyLAotCTB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHgyMDA5LAotCTB4MDAwMCwgMHgwODBjLCAweDJhOGUsIDB4MDgwYywgMHgyOWE4LCAweDIwMDEsIDB4MTk5ZSwgMHgyMDAzLAotCTB4MDcwMCwgMHgyMDAxLCAweDE5OWYsIDB4MjAwMywgMHgwNzAwLCAweDA4MGMsIDB4MmFmZiwgMHg5MDA2LAotCTB4MDgwYywgMHgyOWQ3LCAweDkwMDYsIDB4MDgwYywgMHgyOWJhLCAweDIwYTksIDB4MDAxMiwgMHgxZDA0LAotCTB4MjI2ZiwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHgyMjZmLCAweDYwMmYsIDB4MDEwMCwgMHg2MDJmLAotCTB4MDAwMCwgMHg2MDUwLCAweDkwODUsIDB4MDQwMCwgMHg5MDg0LCAweGRmZmYsIDB4NjA1MiwgMHg2MjI0LAotCTB4MDgwYywgMHgyYWRjLCAweDA4MGMsIDB4MjZkYSwgMHgyMDA5LCAweDAwZWYsIDB4NjEzMiwgMHg2MTM2LAotCTB4MDgwYywgMHgyNmVhLCAweDYwZTcsIDB4MDAwMCwgMHg2MWVhLCAweDYwZTMsIDB4MDAwOCwgMHg2MDRiLAotCTB4ZjdmNywgMHg2MDQzLCAweDAwMDAsIDB4NjAyZiwgMHgwMDgwLCAweDYwMmYsIDB4MDAwMCwgMHg2MDA3LAotCTB4MzQ5ZiwgMHgwMGM2LCAweDIwNjEsIDB4MDE0MCwgMHg2MDhiLCAweDAwMGIsIDB4NjA4ZiwgMHgxMGI4LAotCTB4NjA5MywgMHgwMDAwLCAweDYwOTcsIDB4MDE5OCwgMHgwMGNlLCAweDYwMDQsIDB4OTA4NSwgMHg4MDAwLAotCTB4NjAwNiwgMHg2MGJiLCAweDAwMDAsIDB4MjBhOSwgMHgwMDE4LCAweDYwYmYsIDB4MDAwMCwgMHgxZjA0LAotCTB4MjJhZCwgMHg2MGJiLCAweDAwMDAsIDB4NjBiZiwgMHgwMTA4LCAweDYwYmYsIDB4MDAxMiwgMHg2MGJmLAotCTB4MDQwNSwgMHg2MGJmLCAweDAwMTQsIDB4NjBiZiwgMHgwMzIwLCAweDYwYmYsIDB4MDAxOCwgMHg2MDFiLAotCTB4MDBmMCwgMHg2MDFmLCAweDAwMWUsIDB4NjAwZiwgMHgwMDZiLCAweDYwMmIsIDB4NDAyYywgMHgwMTJlLAotCTB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDE0MCwgMHg3OGMzLCAweDAwODAsIDB4NzhjMywgMHgwMDgzLAotCTB4NzhjMywgMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MzUsIDB4MjAwMywgMHgwMDAwLAotCTB4MjAwMSwgMHgxODM0LCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLAotCTB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4NjEyNCwgMHg2MDI4LCAweDkxMGMsIDB4MDA2NiwgMHgyMDMxLAotCTB4MTgzNywgMHgyNjM0LCAweDk2YjQsIDB4MDAyOCwgMHgwMDZlLCAweDExMzgsIDB4NjAyMCwgMHhkMWJjLAotCTB4MDEyMCwgMHhkMGJjLCAweDExNjgsIDB4ZDBiNCwgMHgxMTk4LCAweDkxODQsIDB4NWUyYywgMHgxMTE4LAotCTB4OTE4NCwgMHgwMDA3LCAweDAwYWEsIDB4OTE5NSwgMHgwMDA0LCAweDkyODQsIDB4MDAwNywgMHgwMDgyLAotCTB4MDAxNiwgMHgyMDAxLCAweDAzODcsIDB4MjAwYywgMHhkMWE0LCAweDAwMWUsIDB4MGQ3MCwgMHgwYzk4LAotCTB4MDAxNiwgMHgyMDAxLCAweDAzODcsIDB4MjAwYywgMHhkMWI0LCAweDAwMWUsIDB4MGQzMCwgMHgwYzU4LAotCTB4MjMxYiwgMHgyMzE4LCAweDIzMTgsIDB4MjMxOCwgMHgyMzFhLCAweDIzMTgsIDB4MjMxOCwgMHgyMzE4LAotCTB4MDgwYywgMHgwZDc5LCAweDAwMjksIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDEyZSwgMHgwMDA1LAotCTB4MDBhNiwgMHg2MTI0LCAweDYwMjgsIDB4ZDA5YywgMHgwMTE4LCAweGQxOWMsIDB4MTkwNCwgMHgyNWEwLAotCTB4ZDFmNCwgMHgxOTBjLCAweDBkNzIsIDB4MDgwYywgMHg3NjlkLCAweDA5MDQsIDB4MjM3OCwgMHgwODBjLAotCTB4ZDM1ZCwgMHgxMTIwLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAzLCAweDA1ODAsIDB4NjAyNCwgMHg5MDg0LAotCTB4MTgwMCwgMHgwNTYwLCAweDA4MGMsIDB4NzZjMCwgMHgwMTE4LCAweDA4MGMsIDB4NzZhZSwgMHgxNTMwLAotCTB4MjAxMSwgMHgwMDIwLCAweDA4MGMsIDB4MmFkYywgMHg2MDQzLCAweDAwMDAsIDB4MDgwYywgMHhkMzVkLAotCTB4MDE2OCwgMHgwODBjLCAweDc2YzAsIDB4MTE1MCwgMHgyMDAxLCAweDE5YTksIDB4MjAwMywgMHgwMDAxLAotCTB4NjAyNywgMHgxODAwLCAweDA4MGMsIDB4NzUxMSwgMHgwODA0LCAweDI1YTMsIDB4NzBhNCwgMHg5MDA1LAotCTB4MTE1MCwgMHg3MGE3LCAweDAwMDEsIDB4MDBkNiwgMHgyMDY5LCAweDAxNDAsIDB4MDgwYywgMHg3NmYxLAotCTB4MDBkZSwgMHgxOTA0LCAweDI1YTMsIDB4MDgwYywgMHg3OWE5LCAweDA0MjgsIDB4MDgwYywgMHg3NmMwLAotCTB4MTU5MCwgMHg2MDI0LCAweDkwODQsIDB4MTgwMCwgMHgxMTA4LCAweDA0NjgsIDB4MDgwYywgMHg3OWE5LAotCTB4MDgwYywgMHg3OTlmLCAweDA4MGMsIDB4NjE3OCwgMHgwODBjLCAweDc1Y2MsIDB4MDgwNCwgMHgyNWEwLAotCTB4ZDFhYywgMHgxNTA4LCAweDYwMjQsIDB4ZDBkYywgMHgxMTcwLCAweGQwZTQsIDB4MTE3OCwgMHhkMGQ0LAotCTB4MTE5MCwgMHhkMGNjLCAweDAxMzAsIDB4NzA5OCwgMHg5MDg2LCAweDAwMjksIDB4MTExMCwgMHgwODBjLAotCTB4Nzg4MCwgMHgwODA0LCAweDI1YTAsIDB4MDgwYywgMHg3OWE0LCAweDAwNDgsIDB4MjAwMSwgMHgxOTdlLAotCTB4MjAwMywgMHgwMDAyLCAweDAwMjAsIDB4MDgwYywgMHg3N2RiLCAweDA4MDQsIDB4MjVhMCwgMHgwODBjLAotCTB4NzkyMywgMHgwODA0LCAweDI1YTAsIDB4NjIyMCwgMHhkMWJjLCAweDAxMzgsIDB4ZDJiYywgMHgxOTA0LAotCTB4MjYwYiwgMHhkMmI0LCAweDE5MDQsIDB4MjYxZCwgMHgwMDAwLCAweGQxYWMsIDB4MDkwNCwgMHgyNGFkLAotCTB4MDAzNiwgMHg2MzI4LCAweGMzYmMsIDB4NjMyYSwgMHgwMDNlLCAweDA4MGMsIDB4NzY5ZCwgMHgxMWQwLAotCTB4MjAxMSwgMHgwMDIwLCAweDA4MGMsIDB4MmFkYywgMHgwMDA2LCAweDAwMjYsIDB4MDAzNiwgMHgwODBjLAotCTB4NzZiNywgMHgxMTU4LCAweDA4MGMsIDB4Nzk5ZiwgMHgwODBjLCAweDYxNzgsIDB4MDgwYywgMHg3NWNjLAotCTB4MDAzZSwgMHgwMDJlLCAweDAwMGUsIDB4MDBhZSwgMHgwMDA1LCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLAotCTB4MDgwYywgMHg3NjcxLCAweDAwMTYsIDB4MDA0NiwgMHgwMGM2LCAweDY0NGMsIDB4OTQ4NiwgMHhmMGYwLAotCTB4MTEzOCwgMHgyMDYxLCAweDAxMDAsIDB4NjQ0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLAotCTB4NzRkYSwgMHg5NDhjLCAweGZmMDAsIDB4NzAzOCwgMHhkMDg0LCAweDAxOTAsIDB4MDgwYywgMHhkMzVkLAotCTB4MTExOCwgMHg5MTg2LCAweGY4MDAsIDB4MTE2MCwgMHg3MDQ4LCAweGQwODQsIDB4MTE0OCwgMHhjMDg1LAotCTB4NzA0YSwgMHgwMDM2LCAweDI0MTgsIDB4MjAxMSwgMHg4MDE2LCAweDA4MGMsIDB4NGMyOCwgMHgwMDNlLAotCTB4MDgwYywgMHhkMzU2LCAweDE5MDQsIDB4MjQ4MiwgMHg5MTk2LCAweGZmMDAsIDB4MDVhOCwgMHg3MDYwLAotCTB4OTA4NCwgMHgwMGZmLCAweDgxMGYsIDB4ODFmZiwgMHgwMTEwLCAweDkxMTYsIDB4MDU2OCwgMHg3MTMwLAotCTB4ZDE4NCwgMHgxNTUwLCAweDA4MGMsIDB4MzQ2OCwgMHgwMTI4LCAweGMxOGQsIDB4NzEzMiwgMHgwODBjLAotCTB4NmJjNSwgMHgxNTEwLCAweDYyNDAsIDB4OTI5NCwgMHgwMDEwLCAweDAxMzAsIDB4NjI0OCwgMHg5Mjk0LAotCTB4ZmYwMCwgMHg5Mjk2LCAweGZmMDAsIDB4MDFjMCwgMHg3MDMwLCAweGQwOGMsIDB4MDkwNCwgMHgyNDgyLAotCTB4NzAzOCwgMHhkMDhjLCAweDExNDAsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsIDB4ZDFhYywgMHgxOTA0LAotCTB4MjQ4MiwgMHhjMWFkLCAweDIxMDIsIDB4MDAzNiwgMHg3M2Q4LCAweDIwMTEsIDB4ODAxMywgMHgwODBjLAotCTB4NGMyOCwgMHgwMDNlLCAweDA4MDQsIDB4MjQ4MiwgMHg3MDM4LCAweGQwOGMsIDB4MTE0MCwgMHgyMDAxLAotCTB4MTgwYywgMHgyMDBjLCAweGQxYWMsIDB4MTkwNCwgMHgyNDgyLCAweGMxYWQsIDB4MjEwMiwgMHgwMDM2LAotCTB4NzNkOCwgMHgyMDExLCAweDgwMTMsIDB4MDgwYywgMHg0YzI4LCAweDAwM2UsIDB4NzEzMCwgMHhjMTg1LAotCTB4NzEzMiwgMHgyMDExLCAweDE4NDgsIDB4MjIwYywgMHhkMWE0LCAweDAxZjAsIDB4MDAxNiwgMHgyMDA5LAotCTB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MDgwYywgMHg4YWRkLCAweDIwMTksIDB4MDAwZSwgMHgwMGM2LAotCTB4MjA2MSwgMHgwMDAwLCAweDA4MGMsIDB4ZTcwMSwgMHgwMGNlLCAweDk0ODQsIDB4MDBmZiwgMHg5MDgwLAotCTB4MzQ3NCwgMHgyMDBkLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDIxMjAsIDB4OTAwNiwgMHgyMDA5LAotCTB4MDAwZSwgMHgwODBjLCAweGU3OTUsIDB4MDAxZSwgMHgwMDE2LCAweDIwMDksIDB4MDAwMiwgMHgyMDE5LAotCTB4MDAwNCwgMHgwODBjLCAweDMyYzAsIDB4MDAxZSwgMHgwMGE4LCAweDAxNTYsIDB4MDBiNiwgMHgyMGE5LAotCTB4MDA3ZiwgMHg5MDBlLCAweDA4MGMsIDB4Njc4MywgMHgxMTQwLCAweDcwMzAsIDB4ZDA4NCwgMHgxMTE4LAotCTB4YjgwMCwgMHhkMGJjLCAweDExMTAsIDB4MDgwYywgMHg2MTkyLCAweDgxMDgsIDB4MWYwNCwgMHgyNDcyLAotCTB4MDBiZSwgMHgwMTVlLCAweDAwY2UsIDB4MDA0ZSwgMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHhhZGJlLAotCTB4MDgwYywgMHhhZTg3LCAweDA4MGMsIDB4YWIxMywgMHg2MGUzLCAweDAwMDAsIDB4MDAxZSwgMHgyMDAxLAotCTB4MTgwMCwgMHgyMDE0LCAweDkyOTYsIDB4MDAwNCwgMHgxMTcwLCAweGQxOWMsIDB4MTFiMCwgMHgyMDExLAotCTB4MTgwYywgMHgyMjE0LCAweGQyOWMsIDB4MTEyMCwgMHg2MjA0LCAweDkyOTUsIDB4MDAwMiwgMHg2MjA2LAotCTB4NjIyOCwgMHhjMjlkLCAweDYyMmEsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4MTgyNiwgMHgyMDAzLAotCTB4MDAwMCwgMHgyMDExLCAweDAwMjAsIDB4MDgwYywgMHgyYWRjLCAweGQxOTQsIDB4MDkwNCwgMHgyNWEwLAotCTB4MDAxNiwgMHgwODBjLCAweGFhZjcsIDB4NjIyMCwgMHhkMmI0LCAweDA5MDQsIDB4MjUzYiwgMHgwODBjLAotCTB4ODhlNCwgMHgwODBjLCAweGEwOWIsIDB4MjAxMSwgMHgwMDA0LCAweDA4MGMsIDB4MmFkYywgMHgwMGY2LAotCTB4MjAxOSwgMHgxOWY1LCAweDIzMDQsIDB4OTA3ZCwgMHgwOTA0LCAweDI1MDgsIDB4NzgwNCwgMHg5MDg2LAotCTB4MDAzMiwgMHgxNWYwLCAweDAwZDYsIDB4MDBjNiwgMHgwMGU2LCAweDAwOTYsIDB4MjA2OSwgMHgwMTQwLAotCTB4NzgyYywgMHg2ODVlLCAweDc4MDgsIDB4Njg1YSwgMHg2MDQzLCAweDAwMDIsIDB4MjAwMSwgMHgwMDAzLAotCTB4ODAwMSwgMHgxZGYwLCAweDYwNDMsIDB4MDAwMCwgMHgyMDAxLCAweDAwM2MsIDB4ODAwMSwgMHgxZGYwLAotCTB4MDgwYywgMHgyYWIyLCAweDIwMDEsIDB4MDAxZSwgMHg4MDAxLCAweDAyNDAsIDB4MjBhOSwgMHgwMDA5LAotCTB4MDgwYywgMHgyYTY5LCAweDY5MDQsIDB4ZDFkYywgMHgxMTQwLCAweDBjYjAsIDB4MjAwMSwgMHgwMTAwLAotCTB4MDgwYywgMHgyYWEyLCAweDkwMDYsIDB4MDgwYywgMHgyYWEyLCAweDA4MGMsIDB4OTdmNiwgMHgwODBjLAotCTB4YWIxMywgMHg3ODE0LCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLCAweDJmNjAsIDB4MDgwYywgMHhhZjRlLAotCTB4MDA5ZSwgMHgwMGVlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGZlLCAweDAwMWUsIDB4MDBhZSwgMHgwMDA1LAotCTB4MDBmZSwgMHgwMGQ2LCAweDIwNjksIDB4MDE0MCwgMHg2ODA0LCAweDkwODQsIDB4NDAwMCwgMHgwMTEwLAotCTB4MDgwYywgMHgyYWIyLCAweDAwZGUsIDB4MDBjNiwgMHgyMDYxLCAweDE5ZTksIDB4NjAzNCwgMHgwODBjLAotCTB4ZDM1ZCwgMHgwMTIwLCAweDkwOWEsIDB4MDAwMywgMHgxMjU4LCAweDAwMTgsIDB4OTA5YSwgMHgwMGM4LAotCTB4MTIzOCwgMHg4MDAwLCAweDYwMzYsIDB4MDBjZSwgMHgwODBjLCAweGEwNzMsIDB4MDgwNCwgMHgyNTlkLAotCTB4MjA2MSwgMHgwMTAwLCAweDYyYzAsIDB4MDgwYywgMHhhYTI4LCAweDIwMTksIDB4MTlmNSwgMHgyMzA0LAotCTB4OTA2NSwgMHgwMTMwLCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LCAweDAwMjcsIDB4MDgwYywgMHhhZmVjLAotCTB4MDBjZSwgMHgwODA0LCAweDI1OWQsIDB4ZDJiYywgMHgwOTA0LCAweDI1ODAsIDB4MDgwYywgMHg4OGYxLAotCTB4MjAxMSwgMHgwMDA0LCAweDA4MGMsIDB4MmFkYywgMHgwMGQ2LCAweDIwNjksIDB4MDE0MCwgMHg2ODA0LAotCTB4OTA4NCwgMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyYWIyLCAweDAwZGUsIDB4MDBjNiwgMHgyMDYxLAotCTB4MTllOSwgMHg2MDUwLCAweDA4MGMsIDB4ZDM1ZCwgMHgwMTIwLCAweDkwOWEsIDB4MDAwMywgMHgxNjY4LAotCTB4MDAxOCwgMHg5MDlhLCAweDAwYzgsIDB4MTY0OCwgMHg4MDAwLCAweDYwNTIsIDB4NjA0YywgMHgwMGNlLAotCTB4OTAwNSwgMHgwNWQ4LCAweDIwMDksIDB4MDdkMCwgMHgwODBjLCAweDg4ZTksIDB4OTA4MCwgMHgwMDA4LAotCTB4MjAwNCwgMHg5MDg2LCAweDAwMDYsIDB4MTEzOCwgMHgyMDA5LCAweDE5ODQsIDB4MjAxMSwgMHgwMDEyLAotCTB4MDgwYywgMHgyYWViLCAweDA0NTAsIDB4OTA4MCwgMHgwMDA4LCAweDIwMDQsIDB4OTA4NiwgMHgwMDA5LAotCTB4MGQ5OCwgMHgyMDA5LCAweDE5ODQsIDB4MjAxMSwgMHgwMDE2LCAweDA4MGMsIDB4MmFlYiwgMHgwMGU4LAotCTB4MjAxMSwgMHgwMDA0LCAweDA4MGMsIDB4MmFkYywgMHgwMGMwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLAotCTB4MDgwYywgMHhhMzkxLCAweDAwM2UsIDB4MjAxOSwgMHgxOWZjLCAweDIzMDQsIDB4OTA2NSwgMHgwMTYwLAotCTB4MjAwOSwgMHgwMDRmLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA5LCAweDExMTAsIDB4MjAwOSwgMHgwMDRmLAotCTB4NjAwMywgMHgwMDAzLCAweDA4MGMsIDB4YWZlYywgMHgwMGNlLCAweDA4MGMsIDB4YWIxMywgMHgwMDFlLAotCTB4ZDE5YywgMHgwOTA0LCAweDI2MDQsIDB4NzAzOCwgMHhkMGFjLCAweDE1NTgsIDB4MDAxNiwgMHgwMTU2LAotCTB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4MmFkYywgMHgwODBjLCAweDJhZmYsIDB4MDgwYywgMHgyYjMyLAotCTB4NjA1MCwgMHhjMGU1LCAweDYwNTIsIDB4MjBhOSwgMHgwMzY3LCAweDBmMDQsIDB4MjVjZiwgMHgxZDA0LAotCTB4MjViNywgMHgwODBjLCAweDg5MTgsIDB4NjAyMCwgMHhkMDljLCAweDFkYjgsIDB4MDBmNiwgMHgyMDc5LAotCTB4MDEwMCwgMHgwODBjLCAweDJhMTksIDB4MDBmZSwgMHgxZDgwLCAweDYwNTAsIDB4YzBlNCwgMHg2MDUyLAotCTB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4MmFkYywgMHgwMTVlLCAweDAwMWUsIDB4MDRhOCwgMHgwMTVlLAotCTB4MDAxZSwgMHgwMDE2LCAweDYwMjgsIDB4YzA5YywgMHg2MDJhLCAweDA4MGMsIDB4YWFmNywgMHgwODBjLAotCTB4YWRiZSwgMHgwODBjLCAweGFlODcsIDB4MDgwYywgMHhhYjEzLCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLAotCTB4ZWJlOCwgMHgwODBjLCAweGVjMDMsIDB4MDgwYywgMHg1ODI0LCAweGQwZmMsIDB4MTEzOCwgMHgwODBjLAotCTB4ZDM1NiwgMHgxMTIwLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDc2ZTEsIDB4OTAwNiwgMHgwODBjLAotCTB4MmFhMiwgMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHgyYThlLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLAotCTB4NzAwMywgMHgwMDA0LCAweDA4MGMsIDB4MGVjNywgMHgwMGVlLCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLAotCTB4MmFkYywgMHgwODBjLCAweDBiYzMsIDB4MDAxZSwgMHg5MThjLCAweGZmZDAsIDB4MjExMCwgMHgwODBjLAotCTB4MmFkYywgMHgwMGFlLCAweDAwMDUsIDB4MDAxNiwgMHgyMDAxLCAweDAzODcsIDB4MjAwYywgMHhkMWE0LAotCTB4MDAxZSwgMHgwOTA0LCAweDIzYTUsIDB4MDAxNiwgMHgyMDA5LCAweDI2MTcsIDB4MDBjMCwgMHgyMDAxLAotCTB4MDM4NywgMHgyMDAzLCAweDEwMDAsIDB4MDAxZSwgMHgwYzM4LCAweDAwMTYsIDB4MjAwMSwgMHgwMzg3LAotCTB4MjAwYywgMHhkMWI0LCAweDAwMWUsIDB4MDkwNCwgMHgyM2E1LCAweDAwMTYsIDB4MjAwOSwgMHgyNjI5LAotCTB4MDAzMCwgMHgyMDAxLCAweDAzODcsIDB4MjAwMywgMHg0MDAwLCAweDAwMWUsIDB4MDhhOCwgMHg2MDI4LAotCTB4YzBiYywgMHg2MDJhLCAweDIwMDEsIDB4MDE1NiwgMHgyMDAzLCAweGJjOTEsIDB4ODAwMCwgMHgyMDAzLAotCTB4ZmZmZiwgMHg2MDQzLCAweDAwMDEsIDB4MDgwYywgMHgyYTg4LCAweDIwMTEsIDB4MDA4MCwgMHgwODBjLAotCTB4MmFkYywgMHg2MDE3LCAweDAwMDAsIDB4NjA0MywgMHgwMDAwLCAweDA4MTcsIDB4MDAwNiwgMHgwMDE2LAotCTB4MDAyNiwgMHgwMDM2LCAweDAwZTYsIDB4MDBmNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAotCTB4MTgwMCwgMHg3MWQwLCAweDcwZDIsIDB4OTExNiwgMHgwOTA0LCAweDI2OTksIDB4ODFmZiwgMHgwMWEwLAotCTB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmE4ZSwgMHgyMDExLCAweDgwMTEsIDB4MjAxOSwgMHgwMTBlLAotCTB4MjMxYywgMHg5MzllLCAweDAwMDcsIDB4MTExOCwgMHgyMDE5LCAweDAwMDEsIDB4MDAxMCwgMHgyMDE5LAotCTB4MDAwMCwgMHgwODBjLCAweDRjMjgsIDB4MDQ2OCwgMHgyMDAxLCAweDE5YWEsIDB4MjAwYywgMHg4MWZmLAotCTB4MTE0MCwgMHgyMDAxLCAweDAxMDksIDB4MjAwNCwgMHhkMGI0LCAweDAxMTgsIDB4MjAxOSwgMHgwMDAzLAotCTB4MDAwOCwgMHgyMTE4LCAweDIwMTEsIDB4ODAxMiwgMHgwODBjLCAweDRjMjgsIDB4MDgwYywgMHgwZWM3LAotCTB4MDgwYywgMHg1ODI0LCAweGQwZmMsIDB4MTFhOCwgMHgwODBjLCAweGQzNTYsIDB4MTE5MCwgMHgwMGM2LAotCTB4MDgwYywgMHgyNzM1LCAweDA4MGMsIDB4YWFmNywgMHgwODBjLCAweGEyZWMsIDB4MDgwYywgMHhhYjEzLAotCTB4MjA2MSwgMHgwMTAwLCAweDIwMTksIDB4MDAyOCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHgzMmMwLAotCTB4MDBjZSwgMHgwMTJlLCAweDAwZmUsIDB4MDBlZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLAotCTB4MDAwNSwgMHgyMDI4LCAweDkxOGMsIDB4MDBmZiwgMHgyMTMwLCAweDkwOTQsIDB4ZmYwMCwgMHgxMWYwLAotCTB4MjAxMSwgMHgxODM3LCAweDIyMTQsIDB4ZDJhYywgMHgxMWM4LCAweDgxZmYsIDB4MDFlOCwgMHgyMDExLAotCTB4MTgxZiwgMHgyMjA0LCAweDkxMDYsIDB4MTE5MCwgMHgyMDExLCAweDE4MjAsIDB4MjIxNCwgMHg5Mjk0LAotCTB4ZmYwMCwgMHg5NTg0LCAweGZmMDAsIDB4OTIwNiwgMHgxMTQ4LCAweDIwMTEsIDB4MTgyMCwgMHgyMjE0LAotCTB4OTI5NCwgMHgwMGZmLCAweDk1ODQsIDB4MDBmZiwgMHg5MjA2LCAweDExMjAsIDB4MjUwMCwgMHgwODBjLAotCTB4ODNiYSwgMHgwMDQ4LCAweDk1ODQsIDB4MDBmZiwgMHg5MDgwLCAweDM0NzQsIDB4MjAwZCwgMHg5MThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweDkwMDYsIDB4MDAwNSwgMHg5MDgwLCAweDM0NzQsIDB4MjAwZCwgMHg5MThjLAotCTB4MDBmZiwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMTQwLCAweDIwMDEsIDB4MTgxOCwgMHgyMDAzLAotCTB4MDBlZiwgMHgyMGE5LCAweDAwMTAsIDB4OTAwNiwgMHg2ODUyLCAweDY4NTYsIDB4MWYwNCwgMHgyNmU1LAotCTB4MDBkZSwgMHgwMDA1LCAweDAwMDYsIDB4MDBkNiwgMHgwMDI2LCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLAotCTB4MTgxOCwgMHgyMTAyLCAweDgxMTQsIDB4ODIxNCwgMHg4MjE0LCAweDgyMTQsIDB4MjBhOSwgMHgwMDEwLAotCTB4Njg1MywgMHgwMDAwLCAweDkwMDYsIDB4ODJmZiwgMHgxMTI4LCAweDkxODQsIDB4MDAwZiwgMHg5MDgwLAotCTB4ZWMxNywgMHgyMDA1LCAweDY4NTYsIDB4ODIxMSwgMHgxZjA0LCAweDI2ZmEsIDB4MDAyZSwgMHgwMGRlLAotCTB4MDAwZSwgMHgwMDA1LCAweDAwYzYsIDB4MjA2MSwgMHgxODAwLCAweDYwMzAsIDB4MDExMCwgMHhjMDlkLAotCTB4MDAwOCwgMHhjMDljLCAweDYwMzIsIDB4MDBjZSwgMHgwMDA1LCAweDAxNTYsIDB4MDBkNiwgMHgwMDI2LAotCTB4MDAxNiwgMHgwMDA2LCAweDIwNjksIDB4MDE0MCwgMHg2OTgwLCAweDkxMTYsIDB4MDE4MCwgMHg5MTEyLAotCTB4MTIzMCwgMHg4MjEyLCAweDgyMTAsIDB4MjJhOCwgMHgyMDAxLCAweDA0MDIsIDB4MDAxOCwgMHgyMmE4LAotCTB4MjAwMSwgMHgwNDA0LCAweDY4MGUsIDB4MWYwNCwgMHgyNzJhLCAweDY4MGYsIDB4MDAwMCwgMHgwMDBlLAotCTB4MDAxZSwgMHgwMDJlLCAweDAwZGUsIDB4MDE1ZSwgMHgwMDA1LCAweDA4MGMsIDB4NTgyMCwgMHhkMGM0LAotCTB4MDE1MCwgMHhkMGE0LCAweDAxNDAsIDB4OTAwNiwgMHgwMDQ2LCAweDIwMjAsIDB4MjAwOSwgMHgwMDJlLAotCTB4MDgwYywgMHhlNzk1LCAweDAwNGUsIDB4MDAwNSwgMHgwMGY2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDc5LAotCTB4MDE0MCwgMHg3OGM0LCAweGQwZGMsIDB4MDkwNCwgMHgyN2ExLCAweDA4MGMsIDB4MmEwOSwgMHgwNjYwLAotCTB4OTA4NCwgMHgwNzAwLCAweDkwOGUsIDB4MDYwMCwgMHgxMTIwLCAweDIwMTEsIDB4NDAwMCwgMHg5MDBlLAotCTB4MDQ1OCwgMHg5MDhlLCAweDA1MDAsIDB4MTEyMCwgMHgyMDExLCAweDgwMDAsIDB4OTAwZSwgMHgwNDIwLAotCTB4OTA4ZSwgMHgwNDAwLCAweDExMjAsIDB4OTAxNiwgMHgyMDA5LCAweDAwMDEsIDB4MDBlOCwgMHg5MDhlLAotCTB4MDMwMCwgMHgxMTIwLCAweDkwMTYsIDB4MjAwOSwgMHgwMDAyLCAweDAwYjAsIDB4OTA4ZSwgMHgwMjAwLAotCTB4MTEyMCwgMHg5MDE2LCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LCAweDkwOGUsIDB4MDEwMCwgMHgxNTQ4LAotCTB4OTAxNiwgMHgyMDA5LCAweDAwMDgsIDB4MDA0MCwgMHg5MDg0LCAweDA3MDAsIDB4OTA4ZSwgMHgwMzAwLAotCTB4MTUwMCwgMHgyMDExLCAweDAwMzAsIDB4MDA1OCwgMHgyMzAwLCAweDkwODAsIDB4MDAyMCwgMHgyMDE4LAotCTB4MDgwYywgMHg5MzY0LCAweDkyOGMsIDB4ZmYwMCwgMHgwMTEwLCAweDIwMTEsIDB4MDBmZiwgMHgyMjAwLAotCTB4ODAwNywgMHg5MDg1LCAweDAwNGMsIDB4NzhjMiwgMHgyMDA5LCAweDAxMzgsIDB4MjIwYSwgMHgwODBjLAotCTB4NzY5ZCwgMHgxMTE4LCAweDIwMDksIDB4MTk2ZSwgMHgyMjBhLCAweDAwMmUsIDB4MDAxZSwgMHgwMGZlLAotCTB4MDAwNSwgMHg3OGMzLCAweDAwMDAsIDB4MGNjOCwgMHgwMTI2LCAweDIwOTEsIDB4MjgwMCwgMHgwMDA2LAotCTB4MDAxNiwgMHgwMDI2LCAweDIwMDEsIDB4MDE3MCwgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHg5MTg0LAotCTB4MDAwMywgMHgwMTEwLCAweDA4MGMsIDB4MGQ3MiwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMTJlLAotCTB4MDAwNSwgMHgyMDAxLCAweDAxNzEsIDB4MjAwNCwgMHhkMGRjLCAweDAxNjgsIDB4MjAwMSwgMHgwMTcwLAotCTB4MjAwYywgMHg5MThjLCAweDAwZmYsIDB4OTE4ZSwgMHgwMDRjLCAweDExMjgsIDB4MjAwYywgMHg5MThjLAotCTB4ZmYwMCwgMHg4MTBmLCAweDAwMDUsIDB4OTAwZSwgMHgyMDAxLCAweDAyMjcsIDB4MjAwNCwgMHg4MDA3LAotCTB4OTA4NCwgMHgwMGZmLCAweDgwMDQsIDB4OTEwOCwgMHgyMDAxLCAweDAyMjYsIDB4MjAwNCwgMHg4MDA3LAotCTB4OTA4NCwgMHgwMGZmLCAweDgwMDQsIDB4OTEwOCwgMHgwMDA1LCAweDAwMTgsIDB4MDAwYywgMHgwMDE4LAotCTB4MDAyMCwgMHgxMDAwLCAweDA4MDAsIDB4MTAwMCwgMHgxODAwLCAweDAxNTYsIDB4MDAwNiwgMHgwMDE2LAotCTB4MDAyNiwgMHgwMGU2LCAweDIwMDEsIDB4MTk5MSwgMHgyMDA0LCAweDkwOGEsIDB4MDAwNywgMHgxYTBjLAotCTB4MGQ3OSwgMHgwMDMzLCAweDAwZWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDE1ZSwgMHgwMDA1LAotCTB4MjdmZiwgMHgyODFkLCAweDI4NDEsIDB4Mjg0MywgMHgyODZjLCAweDI4NmUsIDB4Mjg3MCwgMHgyMDAxLAotCTB4MDAwMSwgMHgwODBjLCAweDI2NDYsIDB4MDgwYywgMHgyYTUzLCAweDIwMDEsIDB4MTk5MywgMHgyMDAzLAotCTB4MDAwMCwgMHg3ODI4LCAweDkwODQsIDB4ZTFkNywgMHg3ODJhLCAweDkwMDYsIDB4MjBhOSwgMHgwMDA5LAotCTB4MDgwYywgMHgyYTI1LCAweDIwMDEsIDB4MTk5MSwgMHgyMDAzLCAweDAwMDYsIDB4MjAwOSwgMHgwMDFlLAotCTB4MjAxMSwgMHgyODcxLCAweDA4MGMsIDB4ODhmNiwgMHgwMDA1LCAweDIwMDksIDB4MTk5NiwgMHgyMDBiLAotCTB4MDAwMCwgMHgyMDAxLCAweDE5OWIsIDB4MjAwMywgMHgwMDM2LCAweDIwMDEsIDB4MTk5YSwgMHgyMDAzLAotCTB4MDAyYSwgMHgyMDAxLCAweDE5OTMsIDB4MjAwMywgMHgwMDAxLCAweDkwMDYsIDB4MDgwYywgMHgyOWJhLAotCTB4MjAwMSwgMHhmZmZmLCAweDIwYTksIDB4MDAwOSwgMHgwODBjLCAweDJhMjUsIDB4MjAwMSwgMHgxOTkxLAotCTB4MjAwMywgMHgwMDA2LCAweDIwMDksIDB4MDAxZSwgMHgyMDExLCAweDI4NzEsIDB4MDgwYywgMHg4OGY2LAotCTB4MDAwNSwgMHgwODBjLCAweDBkNzksIDB4MjAwMSwgMHgxOTliLCAweDIwMDMsIDB4MDAzNiwgMHgyMDAxLAotCTB4MTk5MywgMHgyMDAzLCAweDAwMDMsIDB4N2EzOCwgMHg5Mjk0LCAweDAwMDUsIDB4OTI5NiwgMHgwMDA0LAotCTB4MDExMCwgMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjliYSwgMHgyMDAxLAotCTB4MTk5NywgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHhmZmZmLCAweDIwYTksIDB4MDAwOSwgMHgwODBjLAotCTB4MmEyNSwgMHgyMDAxLCAweDE5OTEsIDB4MjAwMywgMHgwMDA2LCAweDIwMDksIDB4MDAxZSwgMHgyMDExLAotCTB4Mjg3MSwgMHgwODBjLCAweDg4ZjYsIDB4MDAwNSwgMHgwODBjLCAweDBkNzksIDB4MDgwYywgMHgwZDc5LAotCTB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMGU2LCAweDAwZjYsIDB4MDE1NiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweDE5OTMsIDB4MjAwNCwgMHg5MDhhLAotCTB4MDAwNywgMHgxYTBjLCAweDBkNzksIDB4MDA0MywgMHgwMTJlLCAweDAxNWUsIDB4MDBmZSwgMHgwMGVlLAotCTB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgyODkzLCAweDI4YWYsIDB4MjhlYiwgMHgyOTE3LAotCTB4MjkzNywgMHgyOTQzLCAweDI5NDUsIDB4MDgwYywgMHgyYTE5LCAweDExOTAsIDB4MjAwOSwgMHgxOTk5LAotCTB4MjEwNCwgMHg3YTM4LCAweDkyOTQsIDB4MDAwNSwgMHg5Mjk2LCAweDAwMDQsIDB4MDExMCwgMHhjMDhkLAotCTB4MDAwOCwgMHhjMDg1LCAweDIwMGEsIDB4MjAwMSwgMHgxOTkxLCAweDIwMDMsIDB4MDAwMSwgMHgwMDMwLAotCTB4MDgwYywgMHgyOTY5LCAweDIwMDEsIDB4ZmZmZiwgMHgwODBjLCAweDI4MGUsIDB4MDAwNSwgMHgwODBjLAotCTB4Mjk0NywgMHgwNWMwLCAweDIwMDksIDB4MTk5YSwgMHgyMTA0LCAweDgwMDEsIDB4MjAwYSwgMHgwODBjLAotCTB4MmExOSwgMHgxMTU4LCAweDdhMzgsIDB4OTI5NCwgMHgwMDA1LCAweDkyOTYsIDB4MDAwNSwgMHgwNTE4LAotCTB4MjAwOSwgMHgxOTk5LCAweDIxMDQsIDB4YzA4NSwgMHgyMDBhLCAweDIwMDksIDB4MTk5NiwgMHgyMTA0LAotCTB4ODAwMCwgMHgyMDBhLCAweDkwODYsIDB4MDAwNSwgMHgwMTE4LCAweDA4MGMsIDB4Mjk0ZiwgMHgwMGMwLAotCTB4MjAwYiwgMHgwMDAwLCAweDdhMzgsIDB4OTI5NCwgMHgwMDA2LCAweDkyOTYsIDB4MDAwNCwgMHgwMTEwLAotCTB4OTAwNiwgMHgwMDEwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI5ZDcsIDB4MjAwMSwgMHgxOTkzLAotCTB4MjAwMywgMHgwMDAyLCAweDAwMjgsIDB4MjAwMSwgMHgxOTkxLCAweDIwMDMsIDB4MDAwMywgMHgwMDEwLAotCTB4MDgwYywgMHgyODMwLCAweDAwMDUsIDB4MDgwYywgMHgyOTQ3LCAweDA1NDAsIDB4MjAwOSwgMHgxOTlhLAotCTB4MjEwNCwgMHg4MDAxLCAweDIwMGEsIDB4MDgwYywgMHgyYTE5LCAweDExNDgsIDB4MjAwMSwgMHgxOTkxLAotCTB4MjAwMywgMHgwMDAzLCAweDIwMDEsIDB4MTk5MiwgMHgyMDAzLCAweDAwMDAsIDB4MDBiOCwgMHgyMDA5LAotCTB4MTk5YSwgMHgyMTA0LCAweDkwMDUsIDB4MTExOCwgMHgwODBjLCAweDI5OGMsIDB4MDAxMCwgMHgwODBjLAotCTB4Mjk1YywgMHgwODBjLCAweDI5NGYsIDB4MjAwOSwgMHgxOTk2LCAweDIwMGIsIDB4MDAwMCwgMHgyMDAxLAotCTB4MTk5MywgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywgMHgyODMwLCAweDAwMDAsIDB4MDAwNSwgMHgwNDc5LAotCTB4MDFlOCwgMHgwODBjLCAweDJhMTksIDB4MTE5OCwgMHgyMDA5LCAweDE5OTcsIDB4MjEwNCwgMHg4MDAwLAotCTB4MjAwYSwgMHg5MDg2LCAweDAwMDcsIDB4MDEwOCwgMHgwMDc4LCAweDIwMDEsIDB4MTk5YywgMHgyMDAzLAotCTB4MDAwYSwgMHgyMDA5LCAweDE5OTksIDB4MjEwNCwgMHhjMGZkLCAweDIwMGEsIDB4MDAzOCwgMHgwMGY5LAotCTB4MjAwMSwgMHgxOTkzLCAweDIwMDMsIDB4MDAwNCwgMHgwODBjLCAweDI4NWIsIDB4MDAwNSwgMHgwMDc5LAotCTB4MDE0OCwgMHgwODBjLCAweDJhMTksIDB4MTExOCwgMHgwODBjLCAweDI4NDcsIDB4MDAxOCwgMHgwMDc5LAotCTB4MDgwYywgMHgyODViLCAweDAwMDUsIDB4MDgwYywgMHgwZDc5LCAweDA4MGMsIDB4MGQ3OSwgMHgyMDA5LAotCTB4MTk5YiwgMHgyMTA0LCAweDgwMDEsIDB4MjAwYSwgMHgwOTBjLCAweDI5YTgsIDB4MDAwNSwgMHg3YTM4LAotCTB4OTI5NCwgMHgwMDA1LCAweDkyOTYsIDB4MDAwNSwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLAotCTB4MDAwMSwgMHgwODBjLCAweDI5ZDcsIDB4MDAwNSwgMHg3YTM4LCAweDkyOTQsIDB4MDAwNiwgMHg5Mjk2LAotCTB4MDAwNiwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyOWJhLAotCTB4MDAwNSwgMHgyMDA5LCAweDE5OTYsIDB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4OTA4NiwgMHgwMDA1LAotCTB4MDEwOCwgMHgwMDY4LCAweDIwMGIsIDB4MDAwMCwgMHg3YTM4LCAweDkyOTQsIDB4MDAwNiwgMHg5Mjk2LAotCTB4MDAwNiwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsIDB4MDRkOSwgMHg3YTM4LAotCTB4OTI5NCwgMHgwMDA1LCAweDkyOTYsIDB4MDAwNSwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLAotCTB4MDAwMSwgMHgwODBjLCAweDI5ZDcsIDB4MDAwNSwgMHgwMDg2LCAweDIwMDEsIDB4MTk5OSwgMHgyMDA0LAotCTB4OTA4NCwgMHg3ZmZmLCAweDA5MGMsIDB4MGQ3OSwgMHgyMDA5LCAweDE5OTgsIDB4MjE0NCwgMHg4ODQ2LAotCTB4MjgwYSwgMHg5ODQ0LCAweDBkZDgsIDB4ZDA4YywgMHgxMTIwLCAweGQwODQsIDB4MTEyMCwgMHgwODBjLAotCTB4MGQ3OSwgMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLCAweDAwYTEsIDB4MDA4ZSwgMHgwMDA1LAotCTB4MDAwNiwgMHgwMTU2LCAweDIwMDEsIDB4MTk5MSwgMHgyMGE5LCAweDAwMDksIDB4MjAwMywgMHgwMDAwLAotCTB4ODAwMCwgMHgxZjA0LCAweDI5YWUsIDB4MjAwMSwgMHgxOTk4LCAweDIwMDMsIDB4ODAwMCwgMHgwMTVlLAotCTB4MDAwZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDkwODUsIDB4MDAwMCwgMHgwMTU4LAotCTB4NzgzOCwgMHg5MDg0LCAweGZmZjksIDB4OTA4NSwgMHgwMDA0LCAweDc4M2EsIDB4MjAwOSwgMHgxOTllLAotCTB4MjEwYywgMHg3OTVhLCAweDAwNTAsIDB4NzgzOCwgMHg5MDg0LCAweGZmZmIsIDB4OTA4NSwgMHgwMDA2LAotCTB4NzgzYSwgMHgyMDA5LCAweDE5OWYsIDB4MjEwYywgMHg3OTVhLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LAotCTB4MjA3OSwgMHgwMTAwLCAweDkwODUsIDB4MDAwMCwgMHgwMTU4LCAweDc4MzgsIDB4OTA4NCwgMHhmZmZhLAotCTB4OTA4NSwgMHgwMDA0LCAweDc4M2EsIDB4Nzg1MCwgMHg5MDg0LCAweGZmZjAsIDB4Nzg1MiwgMHgwMGY4LAotCTB4NzgzOCwgMHg5MDg0LCAweGZmZmIsIDB4OTA4NSwgMHgwMDA1LCAweDc4M2EsIDB4Nzg1MCwgMHg5MDg0LAotCTB4ZmZmMCwgMHgwMDE2LCAweDIwMDksIDB4MDE3ZiwgMHgyMTBjLCAweDkxOGUsIDB4MDAwNSwgMHgwMTQwLAotCTB4MjAwOSwgMHgwMDAzLCAweDIxMGMsIDB4OTE4YywgMHgwNjAwLCAweDkxOGUsIDB4MDQwMCwgMHgwMTE4LAotCTB4OTA4NSwgMHgwMDBhLCAweDAwMTAsIDB4OTA4NSwgMHgwMDAwLCAweDAwMWUsIDB4Nzg1MiwgMHgwMGZlLAotCTB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODIsIDB4MDAwNywgMHgwMDBlLAotCTB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODIsIDB4MDAwOSwgMHgwMDBlLAotCTB4MDAwNSwgMHgwMTU2LCAweDIwYTksIDB4MDA2NCwgMHg3ODIwLCAweDA4MGMsIDB4MmE4OCwgMHhkMDljLAotCTB4MTExMCwgMHgxZjA0LCAweDJhMWMsIDB4MDE1ZSwgMHgwMDA1LCAweDAxMjYsIDB4MDAxNiwgMHgwMDA2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwMGUsIDB4MjAwOCwgMHg5MTg2LCAweDAwMDAsIDB4MTExOCwgMHg3ODNiLAotCTB4MDAwNywgMHgwMDkwLCAweDkxODYsIDB4MDAwMSwgMHgxMTE4LCAweDc4M2IsIDB4MDAwNiwgMHgwMDYwLAotCTB4OTE4NiwgMHgwMDAyLCAweDExMTgsIDB4NzgzYiwgMHgwMDA1LCAweDAwMzAsIDB4OTE4NiwgMHgwMDAzLAotCTB4MTExOCwgMHg3ODNiLCAweDAwMDQsIDB4MDAwMCwgMHgwMDA2LCAweDFkMDQsIDB4MmE0NSwgMHgwODBjLAotCTB4ODkxOCwgMHgxZjA0LCAweDJhNDUsIDB4Nzg1MCwgMHg5MDg1LCAweDEwMDAsIDB4Nzg1MiwgMHgwMDBlLAotCTB4MDAxZSwgMHgwMTJlLCAweDAwMDUsIDB4MDgwYywgMHgyYjMyLCAweDAwMDUsIDB4MDAwNiwgMHgwMTU2LAotCTB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4MjBhOSwgMHgwMDBhLCAweDc4NTQsIDB4ZDBhYywgMHgxMTAwLAotCTB4Nzg1NCwgMHhkMDhjLCAweDExMTAsIDB4MWYwNCwgMHgyYTYwLCAweDAwZmUsIDB4MDE1ZSwgMHgwMDBlLAotCTB4MDAwNSwgMHgxZDA0LCAweDJhNjksIDB4MDgwYywgMHg4OTE4LCAweDFmMDQsIDB4MmE2OSwgMHgwMDA1LAotCTB4MDAwNiwgMHgyMDAxLCAweDE5OWQsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDAsIDB4MDAwZSwgMHgwMDA1LAotCTB4MDAwNiwgMHgyMDAxLCAweDE5OWQsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDEsIDB4MDAwZSwgMHgwMDA1LAotCTB4MDAwNiwgMHgyMDAxLCAweDE5OWQsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDIsIDB4MDAwZSwgMHgwMDA1LAotCTB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLAotCTB4MTlhYSwgMHgyMTAyLCAweDAwMGUsIDB4MDAwNSwgMHgyMDA5LCAweDAxNzEsIDB4MjEwNCwgMHhkMGRjLAotCTB4MDE0MCwgMHgyMDA5LCAweDAxNzAsIDB4MjEwNCwgMHgyMDBiLCAweDAwODAsIDB4YTAwMSwgMHhhMDAxLAotCTB4MjAwYSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweDc2YjcsIDB4MDEwOCwgMHhjMGJjLAotCTB4MjAwOSwgMHgwMTQwLCAweDIxMTQsIDB4OTI5NCwgMHgwMDAxLCAweDkyMTUsIDB4MjIwYSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgyMDA5LCAweDAxNDAsIDB4MjExNCwgMHg5Mjk0LAotCTB4MDAwMSwgMHg5Mjg1LCAweDEwMDAsIDB4MjAwYSwgMHgyMjBhLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMDI2LCAweDIwMDksIDB4MDE0MCwgMHgyMTE0LCAweDkyOTQsIDB4MDAwMSwgMHg5MjE1LAotCTB4MjIwYSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MjAwOSwgMHgwMTQwLAotCTB4MjEwNCwgMHgxMTI4LCAweDA4MGMsIDB4NzZiNywgMHgwMTEwLCAweGMwYmMsIDB4MDAwOCwgMHhjMGJkLAotCTB4MjAwYSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDM4MCwgMHg3ODQzLAotCTB4MDEwMSwgMHg3ODQ0LCAweGQwODQsIDB4MWRlOCwgMHgyMDAxLCAweDAxMDksIDB4MjIwMiwgMHg3ODQzLAotCTB4MDEwMCwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAzODAsIDB4Nzg0MywgMHgwMjAyLAotCTB4Nzg0NCwgMHhkMDhjLCAweDFkZTgsIDB4MjA3OSwgMHgwMTAwLCAweDc4MTQsIDB4OTEwNCwgMHg5MjA1LAotCTB4N2ExNiwgMHgyMDc5LCAweDAzODAsIDB4Nzg0MywgMHgwMjAwLCAweDAwZmUsIDB4MDAwNSwgMHgwMDE2LAotCTB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYwNTAsIDB4OTA4NCwgMHhmYmZmLAotCTB4OTA4NSwgMHgwMDQwLCAweDYwNTIsIDB4MjBhOSwgMHgwMDAyLCAweDA4MGMsIDB4MmE2OSwgMHg2MDUwLAotCTB4OTA4NSwgMHgwNDAwLCAweDkwODQsIDB4ZmY5ZiwgMHg2MDUyLCAweDIwYTksIDB4MDAwNSwgMHgwODBjLAotCTB4MmE2OSwgMHg2MDU0LCAweGQwYmMsIDB4MDkwYywgMHgwZDc5LCAweDIwYTksIDB4MDAwNSwgMHgwODBjLAotCTB4MmE2OSwgMHg2MDU0LCAweGQwYWMsIDB4MDkwYywgMHgwZDc5LCAweDIwMDksIDB4MTliMSwgMHg5MDg0LAotCTB4N2UwMCwgMHg4MDA3LCAweDgwMDQsIDB4ODAwNCwgMHgyMDBhLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDA1LCAweDAwMDYsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4NjA1MCwgMHhjMGNkLAotCTB4NjA1MiwgMHgwMGNlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDE2LCAweDAwYzYsIDB4MDBkNiwgMHgwMDA2LAotCTB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHg2MDMwLCAweDAwMDYsIDB4NjA0OCwgMHgwMDA2LAotCTB4NjBlNCwgMHgwMDA2LCAweDYwZTgsIDB4MDAwNiwgMHg2MDUwLCAweDAwMDYsIDB4NjBlYywgMHgwMDA2LAotCTB4NjAwYywgMHgwMDA2LCAweDYwMDQsIDB4MDAwNiwgMHhjMGZjLCAweDYwMDYsIDB4MjAwOSwgMHgwODAwLAotCTB4MjAwMSwgMHgwMzM4LCAweDIwMDMsIDB4MDMwMSwgMHg4MTA5LCAweDA5MGMsIDB4MGQ3OSwgMHgyMDAxLAotCTB4MDMzOCwgMHgyMDA0LCAweGQwODQsIDB4MWRjMCwgMHg2MDI4LCAweDAwMDYsIDB4NjBlMCwgMHgwMDA2LAotCTB4Njg4OCwgMHgwMDA2LCAweDY4OGMsIDB4MDAwNiwgMHg2ODkwLCAweDAwMDYsIDB4MDgwYywgMHg3NjlkLAotCTB4MTExMCwgMHg2ODg0LCAweDAwMDYsIDB4NjAyZiwgMHgwMTAwLCAweDYwMmYsIDB4MDAwMCwgMHhhMDAxLAotCTB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwODBjLAotCTB4NzY5ZCwgMHgxMTIwLCAweDY4MDMsIDB4MDA4MCwgMHgwMDBlLCAweDY4ODYsIDB4Njg5NywgMHg0MTk4LAotCTB4MDAwZSwgMHg2ODkyLCAweDAwMGUsIDB4Njg4ZSwgMHgwMDBlLCAweDY4OGEsIDB4MDAwZSwgMHg2MGUyLAotCTB4MDAwZSwgMHg2MDJhLCAweDAwMGUsIDB4NjAwNiwgMHgwMDBlLCAweDYwMGUsIDB4MDAwZSwgMHg2MGVlLAotCTB4MDAwZSwgMHg2MDUyLCAweDAwMGUsIDB4NjBlYSwgMHgwMDBlLCAweDYwZTYsIDB4MDAwZSwgMHg2MDRhLAotCTB4MDAwZSwgMHg2MDMyLCAweDYwMzYsIDB4MjAwOCwgMHgwODBjLCAweDI2ZWEsIDB4MDAwZSwgMHgwMGRlLAotCTB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAwNiwgMHgwMTU2LCAweDYwNTAsIDB4OTA4NSwgMHgwMDQwLAotCTB4NjA1MiwgMHg2MDUwLCAweDkwODQsIDB4ZmJjZiwgMHg2MDUyLCAweDA4MGMsIDB4MmE4OCwgMHg5MDg1LAotCTB4MjAwMCwgMHg2MDUyLCAweDIwYTksIDB4MDAxMiwgMHgxZDA0LCAweDJiYmMsIDB4MDgwYywgMHg4OTE4LAotCTB4MWYwNCwgMHgyYmJjLCAweDYwNTAsIDB4OTA4NSwgMHgwNDAwLCAweDkwODQsIDB4ZGZiZiwgMHg2MDUyLAotCTB4MDE1ZSwgMHgwMDBlLCAweDAwMDUsIDB4MzBjNywgMHgzMGM3LCAweDJjY2IsIDB4MmNjYiwgMHgyY2Q3LAotCTB4MmNkNywgMHgyY2UzLCAweDJjZTMsIDB4MmNmMSwgMHgyY2YxLCAweDJjZmQsIDB4MmNmZCwgMHgyZDBiLAotCTB4MmQwYiwgMHgyZDE5LCAweDJkMTksIDB4MmQyYiwgMHgyZDJiLCAweDJkMzcsIDB4MmQzNywgMHgyZDQ1LAotCTB4MmQ0NSwgMHgyZDYzLCAweDJkNjMsIDB4MmQ4MywgMHgyZDgzLCAweDJkNTMsIDB4MmQ1MywgMHgyZDczLAotCTB4MmQ3MywgMHgyZDkxLCAweDJkOTEsIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmRhMywgMHgyZGEzLCAweDJkYWYsIDB4MmRhZiwgMHgyZGJkLAotCTB4MmRiZCwgMHgyZGNiLCAweDJkY2IsIDB4MmRkYiwgMHgyZGRiLCAweDJkZTksIDB4MmRlOSwgMHgyZGY5LAotCTB4MmRmOSwgMHgyZTA5LCAweDJlMDksIDB4MmUxYiwgMHgyZTFiLCAweDJlMjksIDB4MmUyOSwgMHgyZTM5LAotCTB4MmUzOSwgMHgyZTViLCAweDJlNWIsIDB4MmU3ZiwgMHgyZTdmLCAweDJlNDksIDB4MmU0OSwgMHgyZTZkLAotCTB4MmU2ZCwgMHgyZThmLCAweDJlOGYsIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmVhMywgMHgyZWEzLCAweDJlYWYsIDB4MmVhZiwgMHgyZWJkLAotCTB4MmViZCwgMHgyZWNiLCAweDJlY2IsIDB4MmVkYiwgMHgyZWRiLCAweDJlZTksIDB4MmVlOSwgMHgyZWY5LAotCTB4MmVmOSwgMHgyZjA5LCAweDJmMDksIDB4MmYxYiwgMHgyZjFiLCAweDJmMjksIDB4MmYyOSwgMHgyZjM5LAotCTB4MmYzOSwgMHgyZjQ5LCAweDJmNDksIDB4MmY1YiwgMHgyZjViLCAweDJmNmIsIDB4MmY2YiwgMHgyZjdkLAotCTB4MmY3ZCwgMHgyZjhmLCAweDJmOGYsIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmZhMywgMHgyZmEzLCAweDJmYjEsIDB4MmZiMSwgMHgyZmMxLAotCTB4MmZjMSwgMHgyZmQxLCAweDJmZDEsIDB4MmZlMywgMHgyZmUzLCAweDJmZjMsIDB4MmZmMywgMHgzMDA1LAotCTB4MzAwNSwgMHgzMDE3LCAweDMwMTcsIDB4MzAyYiwgMHgzMDJiLCAweDMwM2IsIDB4MzAzYiwgMHgzMDRkLAotCTB4MzA0ZCwgMHgzMDVmLCAweDMwNWYsIDB4MzA3MywgMHgzMDczLCAweDMwODQsIDB4MzA4NCwgMHgzMDk3LAotCTB4MzA5NywgMHgzMGFhLCAweDMwYWEsIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MmQyOSwgMHgyZDI5LAotCTB4MmQyOSwgMHgyZDI5LCAweDJkMjksIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMmRkLCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjEwNywgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4MjJkZCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDIxMzEsIDB4MDgwNCwgMHgzMGJmLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjJkZCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHhhMDAxLCAweDBjZjAsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgxM2M4LCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjJkZCwgMHgwODBjLCAweDEzYzgsIDB4MDgwNCwgMHgzMGJmLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjEwNywgMHgwODBjLAotCTB4MTNjOCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4MjJkZCwgMHgwODBjLAotCTB4MTNjOCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgxM2M4LCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjdhNCwgMHgwODBjLCAweDIyZGQsIDB4MDgwNCwgMHgzMGJmLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjdhNCwgMHgwODBjLAotCTB4MjEwNywgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4MjEwNywgMHgwODBjLAotCTB4MjJkZCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4MjJkZCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4MTNjOCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4MTNjOCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4MjEwNywgMHgwODBjLAotCTB4MjJkZCwgMHgwODBjLCAweDEzYzgsIDB4MDgwNCwgMHgzMGJmLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjdhNCwgMHgwODBjLAotCTB4MjEwNywgMHgwODBjLCAweDEzYzgsIDB4MDgwYywgMHgyMTMxLCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjdhNCwgMHgwODBjLCAweDEzYzgsIDB4MDgwYywgMHgyMTMxLCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjdhNCwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHhhYjVkLCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4YWI1ZCwgMHgwODBjLCAweDIyZGQsIDB4MDgwNCwgMHgzMGJmLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjEwNywgMHgwODBjLAotCTB4YWI1ZCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4YWI1ZCwgMHgwODBjLAotCTB4MjJkZCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweGFiNWQsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MjEzMSwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MjJkZCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MTNjOCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweGFiNWQsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MTNjOCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MjJkZCwgMHgwODBjLAotCTB4MTNjOCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MjJkZCwgMHgwODBjLAotCTB4MTNjOCwgMHgwODBjLCAweDIxMzEsIDB4MDgwNCwgMHgzMGJmLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjEwNywgMHgwODBjLAotCTB4YWI1ZCwgMHgwODBjLCAweDEzYzgsIDB4MDgwYywgMHgyMTMxLCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjEwNywgMHgwODBjLCAweGFiNWQsIDB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4YWI1ZCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MjJkZCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4YWI1ZCwgMHgwODA0LAotCTB4MzBiZiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAotCTB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHgyMTA3LCAweDA4MGMsIDB4YWI1ZCwgMHgwODBjLAotCTB4MjJkZCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4YWI1ZCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4YWI1ZCwgMHgwODBjLAotCTB4MjJkZCwgMHgwODBjLCAweDIxMzEsIDB4MDgwNCwgMHgzMGJmLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjdhNCwgMHgwODBjLAotCTB4MjEwNywgMHgwODBjLCAweGFiNWQsIDB4MDgwYywgMHgyMTMxLCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjdhNCwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MjJkZCwgMHgwODBjLAotCTB4MjEzMSwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4YWI1ZCwgMHgwODBjLAotCTB4MTNjOCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4YWI1ZCwgMHgwODBjLAotCTB4MjJkZCwgMHgwODBjLCAweDEzYzgsIDB4MDgwNCwgMHgzMGJmLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjdhNCwgMHgwODBjLAotCTB4MjEwNywgMHgwODBjLCAweGFiNWQsIDB4MDgwYywgMHgxM2M4LCAweDA4MDQsIDB4MzBiZiwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjdhNCwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHhhYjVkLCAweDA4MGMsIDB4MjJkZCwgMHgwODBjLAotCTB4MTNjOCwgMHgwODA0LCAweDMwYmYsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyN2E0LCAweDA4MGMsIDB4YWI1ZCwgMHgwODBjLAotCTB4MTNjOCwgMHgwODBjLCAweDIxMzEsIDB4MDRkOCwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAotCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3YTQsIDB4MDgwYywgMHhhYjVkLAotCTB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLCAweDIxMzEsIDB4MDQ0MCwgMHgwMTA2LAotCTB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLAotCTB4MjdhNCwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHgxM2M4LCAweDA4MGMsIDB4YWI1ZCwgMHgwODBjLAotCTB4MjEzMSwgMHgwMGE4LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAotCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjdhNCwgMHgwODBjLCAweDIxMDcsIDB4MDgwYywgMHhhYjVkLAotCTB4MDgwYywgMHgyMmRkLCAweDA4MGMsIDB4MTNjOCwgMHgwODBjLCAweDIxMzEsIDB4MDAwMCwgMHgwMTVlLAotCTB4MDE0ZSwgMHgwMTNlLCAweDAxZGUsIDB4MDFjZSwgMHgwMTJlLCAweDAwMGUsIDB4MDEwZSwgMHgwMDBkLAotCTB4MDBiNiwgMHgwMGM2LCAweDAwMjYsIDB4MDA0NiwgMHg5MDI2LCAweDA4MGMsIDB4NmI4YiwgMHgxOTA0LAotCTB4MzFkYywgMHg3MmRjLCAweDIwMDEsIDB4MTk3ZCwgMHgyMDA0LCAweDkwMDUsIDB4MTExMCwgMHhkMjljLAotCTB4MDE0OCwgMHhkMjg0LCAweDExMzgsIDB4ZDJiYywgMHgxOTA0LCAweDMxZGMsIDB4MDgwYywgMHgzMWUxLAotCTB4MDgwNCwgMHgzMWRjLCAweGQyY2MsIDB4MTkwNCwgMHgzMWRjLCAweDA4MGMsIDB4NzY5ZCwgMHgxMTIwLAotCTB4NzBhZiwgMHhmZmZmLCAweDA4MDQsIDB4MzFkYywgMHhkMjk0LCAweDAxMjAsIDB4NzBhZiwgMHhmZmZmLAotCTB4MDgwNCwgMHgzMWRjLCAweDA4MGMsIDB4MzQ2MywgMHgwMTYwLCAweDA4MGMsIDB4ZDM1ZCwgMHgwMTI4LAotCTB4MjAwMSwgMHgxODE4LCAweDIwM2MsIDB4MDgwNCwgMHgzMTY1LCAweDcwYWYsIDB4ZmZmZiwgMHgwODA0LAotCTB4MzFkYywgMHgyMDAxLCAweDE4MTgsIDB4MjAzYywgMHg3Mjk0LCAweGQyODQsIDB4MDkwNCwgMHgzMTY1LAotCTB4ZDI4YywgMHgxOTA0LCAweDMxNjUsIDB4MDAzNiwgMHg3M2FjLCAweDkzOGUsIDB4ZmZmZiwgMHgxMTEwLAotCTB4MjAxOSwgMHgwMDAxLCAweDgzMTQsIDB4OTJlMCwgMHgxZDgwLCAweDJjMDQsIDB4OTM4YywgMHgwMDAxLAotCTB4MDEyMCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHgwMDEwLCAweDkwODQsIDB4MDBmZiwgMHg5NzBlLAotCTB4MDVkMCwgMHg5MDhlLCAweDAwMDAsIDB4MDViOCwgMHg5MDhlLCAweDAwZmYsIDB4MTE1MCwgMHg3MjMwLAotCTB4ZDI4NCwgMHgxNWIwLCAweDcyOTQsIDB4YzI4ZCwgMHg3Mjk2LCAweDcwYWYsIDB4ZmZmZiwgMHgwMDNlLAotCTB4MDRhMCwgMHg5MDBlLCAweDA4MGMsIDB4MjZhMSwgMHgwODBjLCAweDY3MTgsIDB4MTUzOCwgMHg5MDA2LAorCTB4MDBjZSwgMHgwMDFlLCAweDAxMmUsIDB4MDAwNSwgMHhhODA0LCAweDkwNDUsIDB4MDkwYywgMHgwZDg1LAorCTB4YTgwZSwgMHhhMDY0LCAweGE4MWEsIDB4OTA4NCwgMHgwMDBmLCAweDkwODAsIDB4MWVjMSwgMHgyMDE1LAorCTB4ODJmZiwgMHgwOTBjLCAweDBkODUsIDB4YWExMiwgMHgyMjA1LCAweGE4MGEsIDB4MGMwOCwgMHg5MDNlLAorCTB4MjczMCwgMHhhODgwLCAweGQwZmMsIDB4MTE5MCwgMHgyZDAwLCAweDAwMDIsIDB4MWE5NCwgMHgxOWY2LAorCTB4MTlmNiwgMHgxYTk0LCAweDFhOTQsIDB4MWE4ZSwgMHgxYTk0LCAweDE5ZjYsIDB4MWE0NSwgMHgxYTQ1LAorCTB4MWE0NSwgMHgxYTk0LCAweDFhOTQsIDB4MWE5NCwgMHgxYThiLCAweDFhNDUsIDB4YzBmYywgMHhhODgyLAorCTB4YWIyYywgMHhhYTMwLCAweGFkMWMsIDB4YWMyMCwgMHhkZDljLCAweDA5MDQsIDB4MWE5NiwgMHgyYzA1LAorCTB4OTA4YSwgMHgwMDM0LCAweDFhMGMsIDB4MGQ4NSwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxOWUyLAorCTB4MTllMCwgMHgxOWUwLCAweDE5ZTAsIDB4MTllMCwgMHgxOWUwLCAweDE5ZTYsIDB4MTllMCwgMHgxOWUwLAorCTB4MTllMCwgMHgxOWUwLCAweDE5ZTAsIDB4MTllYSwgMHgxOWUwLCAweDE5ZTAsIDB4MTllMCwgMHgxOWUwLAorCTB4MTllMCwgMHgxOWVlLCAweDE5ZTAsIDB4MTllMCwgMHgxOWUwLCAweDE5ZTAsIDB4MTllMCwgMHgxOWYyLAorCTB4MDgwYywgMHgwZDg1LCAweGE3NzQsIDB4YTY3OCwgMHgwODA0LCAweDFhOTYsIDB4YTc4YywgMHhhNjkwLAorCTB4MDgwNCwgMHgxYTk2LCAweGE3YTQsIDB4YTZhOCwgMHgwODA0LCAweDFhOTYsIDB4YTdiYywgMHhhNmMwLAorCTB4MDgwNCwgMHgxYTk2LCAweGE3ZDQsIDB4YTZkOCwgMHgwODA0LCAweDFhOTYsIDB4MmMwNSwgMHg5MDhhLAorCTB4MDAzNiwgMHgxYTBjLCAweDBkODUsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWExOSwgMHgxYTE5LAorCTB4MWExYiwgMHgxYTE5LCAweDFhMTksIDB4MWExOSwgMHgxYTIxLCAweDFhMTksIDB4MWExOSwgMHgxYTE5LAorCTB4MWEyNywgMHgxYTE5LCAweDFhMTksIDB4MWExOSwgMHgxYTJkLCAweDFhMTksIDB4MWExOSwgMHgxYTE5LAorCTB4MWEzMywgMHgxYTE5LCAweDFhMTksIDB4MWExOSwgMHgxYTM5LCAweDFhMTksIDB4MWExOSwgMHgxYTE5LAorCTB4MWEzZiwgMHgwODBjLCAweDBkODUsIDB4YTU3NCwgMHhhNDc4LCAweGEzN2MsIDB4YTI4MCwgMHgwODA0LAorCTB4MWE5NiwgMHhhNTg0LCAweGE0ODgsIDB4YTM4YywgMHhhMjkwLCAweDA4MDQsIDB4MWE5NiwgMHhhNTk0LAorCTB4YTQ5OCwgMHhhMzljLCAweGEyYTAsIDB4MDgwNCwgMHgxYTk2LCAweGE1YTQsIDB4YTRhOCwgMHhhM2FjLAorCTB4YTJiMCwgMHgwODA0LCAweDFhOTYsIDB4YTViNCwgMHhhNGI4LCAweGEzYmMsIDB4YTJjMCwgMHgwODA0LAorCTB4MWE5NiwgMHhhNWM0LCAweGE0YzgsIDB4YTNjYywgMHhhMmQwLCAweDA4MDQsIDB4MWE5NiwgMHhhNWQ0LAorCTB4YTRkOCwgMHhhM2RjLCAweGEyZTAsIDB4MDgwNCwgMHgxYTk2LCAweDJjMDUsIDB4OTA4YSwgMHgwMDM0LAorCTB4MWEwYywgMHgwZDg1LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDFhNjgsIDB4MWE2NiwgMHgxYTY2LAorCTB4MWE2NiwgMHgxYTY2LCAweDFhNjYsIDB4MWE2ZiwgMHgxYTY2LCAweDFhNjYsIDB4MWE2NiwgMHgxYTY2LAorCTB4MWE2NiwgMHgxYTc2LCAweDFhNjYsIDB4MWE2NiwgMHgxYTY2LCAweDFhNjYsIDB4MWE2NiwgMHgxYTdkLAorCTB4MWE2NiwgMHgxYTY2LCAweDFhNjYsIDB4MWE2NiwgMHgxYTY2LCAweDFhODQsIDB4MDgwYywgMHgwZDg1LAorCTB4YTU2YywgMHhhNDcwLCAweGE3NzQsIDB4YTY3OCwgMHhhMzdjLCAweGEyODAsIDB4MDQzOCwgMHhhNTg0LAorCTB4YTQ4OCwgMHhhNzhjLCAweGE2OTAsIDB4YTM5NCwgMHhhMjk4LCAweDA0MDAsIDB4YTU5YywgMHhhNGEwLAorCTB4YTdhNCwgMHhhNmE4LCAweGEzYWMsIDB4YTJiMCwgMHgwMGM4LCAweGE1YjQsIDB4YTRiOCwgMHhhN2JjLAorCTB4YTZjMCwgMHhhM2M0LCAweGEyYzgsIDB4MDA5MCwgMHhhNWNjLCAweGE0ZDAsIDB4YTdkNCwgMHhhNmQ4LAorCTB4YTNkYywgMHhhMmUwLCAweDAwNTgsIDB4OWQ4NiwgMHgwMDBlLCAweDExMzAsIDB4MDgwYywgMHgxZTk3LAorCTB4MTkwNCwgMHgxOTlmLCAweDkwMGUsIDB4MDA1MCwgMHgwODBjLCAweDBkODUsIDB4YWIyZSwgMHhhYTMyLAorCTB4YWQxZSwgMHhhYzIyLCAweGFmMjYsIDB4YWUyYSwgMHgwODBjLCAweDFlOTcsIDB4MDAwNSwgMHg2MDE0LAorCTB4MjA0OCwgMHg2MTE4LCAweDgxZmYsIDB4MDE0OCwgMHg4MTBjLCAweDgxMGMsIDB4ODEwYywgMHg4MWZmLAorCTB4MTExOCwgMHhhODg3LCAweDAwMDEsIDB4MDAwOCwgMHhhOTg2LCAweDYwMWIsIDB4MDAwMiwgMHhhODc0LAorCTB4OTA4NCwgMHgwMGZmLCAweDkwODQsIDB4MDAwOCwgMHgwMTUwLCAweDAwZTksIDB4NjAwMCwgMHg5MDg2LAorCTB4MDAwNCwgMHgxMTIwLCAweDIwMDksIDB4MDA0OCwgMHgwODBjLCAweGIyMGEsIDB4MDAwNSwgMHhhOTc0LAorCTB4ZDFkYywgMHgxMTA4LCAweDAwMDUsIDB4YTkzNCwgMHhhODhjLCAweDkxMDYsIDB4MTE1OCwgMHhhOTM4LAorCTB4YTg5MCwgMHg5MTA2LCAweDExMzgsIDB4NjAxYywgMHhjMDg0LCAweDYwMWUsIDB4MjAwOSwgMHgwMDQ4LAorCTB4MDgwNCwgMHhiMjBhLCAweDAwMDUsIDB4MDEyNiwgMHgwMGM2LCAweDIwOTEsIDB4MjIwMCwgMHgwMGNlLAorCTB4NzkwOCwgMHg5MThjLCAweDAwMDcsIDB4OTE4NiwgMHgwMDAwLCAweDA1YjAsIDB4OTE4NiwgMHgwMDAzLAorCTB4MDU5OCwgMHg2MDIwLCAweDYwMjMsIDB4MDAwMCwgMHgwMDA2LCAweDIwMzEsIDB4MDAwOCwgMHgwMGM2LAorCTB4NzgxZiwgMHgwODA4LCAweDc4MDgsIDB4ZDA5YywgMHgwMTIwLCAweDA4MGMsIDB4MTNkNCwgMHg4NjMxLAorCTB4MWRiOCwgMHgwMGNlLCAweDc4MWYsIDB4MDgwMCwgMHgyMDMxLCAweDAxNjgsIDB4MDBjNiwgMHg3ODA4LAorCTB4ZDA5YywgMHgxOTBjLCAweDEzZDQsIDB4MDBjZSwgMHgyMDAxLCAweDAwMzgsIDB4MDgwYywgMHgxYmFlLAorCTB4NzkzMCwgMHg5MTg2LCAweDAwNDAsIDB4MDE2MCwgMHg5MTg2LCAweDAwNDIsIDB4MTkwYywgMHgwZDg1LAorCTB4MjAwMSwgMHgwMDFlLCAweDgwMDEsIDB4MWRmMCwgMHg4NjMxLCAweDFkNDAsIDB4MDgwYywgMHgxYmJkLAorCTB4MDAwZSwgMHg2MDIyLCAweDAxMmUsIDB4MDAwNSwgMHgwODBjLCAweDFiYWEsIDB4NzgyNywgMHgwMDE1LAorCTB4NzgyOCwgMHg5YzA2LCAweDFkYjgsIDB4NzgyYiwgMHgwMDAwLCAweDBjYTAsIDB4MDBmNiwgMHgyMDc5LAorCTB4MDMwMCwgMHg3ODAzLCAweDAwMDAsIDB4NzhhYiwgMHgwMDA0LCAweDIwMDEsIDB4ZjAwMCwgMHg4MDAxLAorCTB4MDkwYywgMHgwZDg1LCAweDdhYWMsIDB4ZDJhYywgMHgxZGQwLCAweDAwZmUsIDB4MDgwYywgMHg3NzllLAorCTB4MTE4OCwgMHgyMDAxLCAweDAxMzgsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MDE2MCwgMHgyMDAzLAorCTB4MDAwMCwgMHgyMDExLCAweDAxMmMsIDB4YTAwMSwgMHhhMDAxLCAweDgyMTEsIDB4MWRlMCwgMHgwMDU5LAorCTB4MDgwNCwgMHg3ODQwLCAweDA0NzksIDB4MDAzOSwgMHgyMDAxLCAweDAxNjAsIDB4MjUwMiwgMHgyMDAxLAorCTB4MDEzOCwgMHgyMjAyLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDAyMDAsIDB4MDgwYywgMHgyYThiLAorCTB4MjAwOSwgMHgwMDNjLCAweDA4MGMsIDB4MjIyMCwgMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLAorCTB4NzAwMCwgMHg5MDg0LCAweDAwM2MsIDB4MWRlMCwgMHgwODBjLCAweDg4OTksIDB4NzBhMCwgMHg3MGEyLAorCTB4NzA5OCwgMHg3MDlhLCAweDcwOWMsIDB4NzA5ZSwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDIwLAorCTB4MDBmNiwgMHgyMDc5LCAweDAzMDAsIDB4MDgwYywgMHgxMzY2LCAweDc4MDMsIDB4MDAwMSwgMHgwMGZlLAorCTB4MDBlZSwgMHgwMDA1LCAweDIwMDEsIDB4MDEzOCwgMHgyMDE0LCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLAorCTB4MDE2MCwgMHgyMDJjLCAweDIwMDMsIDB4MDAwMCwgMHgwODBjLCAweDc3OWUsIDB4MTEwOCwgMHgwMDA1LAorCTB4MjAyMSwgMHgwMjYwLCAweDIwMDEsIDB4MDE0MSwgMHgyMDFjLCAweGQzZGMsIDB4MTE2OCwgMHgyMDAxLAorCTB4MDEwOSwgMHgyMDFjLCAweDkzOWMsIDB4MDA0OCwgMHgxMTYwLCAweDIwMDEsIDB4MDExMSwgMHgyMDFjLAorCTB4ODNmZiwgMHgxMTEwLCAweDg0MjEsIDB4MWQ3MCwgMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLAorCTB4MDAwNSwgMHgwMDQ2LCAweDIwMjEsIDB4MDAxOSwgMHgyMDAzLCAweDAwNDgsIDB4YTAwMSwgMHhhMDAxLAorCTB4MjAxYywgMHg5MzljLCAweDAwNDgsIDB4MDEyMCwgMHg4NDIxLCAweDFkYjAsIDB4MDA0ZSwgMHgwYzYwLAorCTB4MDA0ZSwgMHgwYzQwLCAweDYwMWMsIDB4YzA4NCwgMHg2MDFlLCAweDAwMDUsIDB4MmMwOCwgMHg2MjFjLAorCTB4MDgwYywgMHgxNmI5LCAweDc5MzAsIDB4MDAwNSwgMHgyYzA4LCAweDYyMWMsIDB4MDgwYywgMHgxNzAyLAorCTB4NzkzMCwgMHgwMDA1LCAweDgwMDEsIDB4MWRmMCwgMHgwMDA1LCAweDIwMzEsIDB4MDA2NCwgMHg3ODFjLAorCTB4OTA4NCwgMHgwMDA3LCAweDAxNzAsIDB4MjAwMSwgMHgwMDM4LCAweDBjNDEsIDB4OTE4NiwgMHgwMDQwLAorCTB4MDkwNCwgMHgxYzFiLCAweDIwMDEsIDB4MDAxZSwgMHgwYzY5LCAweDg2MzEsIDB4MWQ4MCwgMHgwODBjLAorCTB4MGQ4NSwgMHg3ODFmLCAweDAyMDIsIDB4MjAwMSwgMHgwMTVkLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLAorCTB4MGRhYywgMHgwYzAxLCAweDc4MWMsIDB4ZDA4NCwgMHgwMTEwLCAweDA4NjEsIDB4MDRlMCwgMHgyMDAxLAorCTB4MDAzMCwgMHgwODkxLCAweDkxODYsIDB4MDA0MCwgMHgwNTY4LCAweDc4MWMsIDB4ZDA4NCwgMHgxZGE4LAorCTB4NzgxZiwgMHgwMTAxLCAweDIwMDEsIDB4MDAxNCwgMHgwODY5LCAweDIwMDEsIDB4MDAzNywgMHgwODIxLAorCTB4OTE4NiwgMHgwMDQwLCAweDAxNDAsIDB4MjAwMSwgMHgwMDMwLCAweDA4MGMsIDB4MWJiNCwgMHg5MTg2LAorCTB4MDA0MCwgMHgxOTBjLCAweDBkODUsIDB4MDBkNiwgMHgyMDY5LCAweDAyMDAsIDB4NjkyYywgMHhkMWY0LAorCTB4MTE3MCwgMHhkMWM0LCAweDAxNjAsIDB4ZDE5YywgMHgwMTMwLCAweDY4MDAsIDB4OTA4NSwgMHgxODAwLAorCTB4NjgwMiwgMHgwMGRlLCAweDAwODAsIDB4NjkwOCwgMHg5MTg0LCAweDAwMDcsIDB4MWRiMCwgMHgwMGRlLAorCTB4NzgxZiwgMHgwMTAwLCAweDc5MWMsIDB4OTE4NCwgMHgwMDA3LCAweDA5MGMsIDB4MGQ4NSwgMHhhMDAxLAorCTB4YTAwMSwgMHg3ODFmLCAweDAyMDAsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4MjQwMCwgMHgyMDc5LAorCTB4MDM4MCwgMHgyMDAxLCAweDE5ZTgsIDB4MjA3MCwgMHgwMTJlLCAweDAwMDUsIDB4MmNmMCwgMHgwMTI2LAorCTB4MjA5MSwgMHgyNDAwLCAweDNlNjAsIDB4NjAxNCwgMHgyMDQ4LCAweGE5NjQsIDB4YTkxYSwgMHg5MThjLAorCTB4MDBmZiwgMHg5MTg0LCAweDAwMGYsIDB4MDAwMiwgMHgxYzUwLCAweDFjNTAsIDB4MWM1MCwgMHgxYzUyLAorCTB4MWM1MCwgMHgxYzUwLCAweDFjNTAsIDB4MWM1MCwgMHgxYzQ0LCAweDFjNWEsIDB4MWM1MCwgMHgxYzU2LAorCTB4MWM1MCwgMHgxYzUwLCAweDFjNTAsIDB4MWM1MCwgMHg5MDg2LCAweDAwMDgsIDB4MTE0OCwgMHhhODdjLAorCTB4ZDBiNCwgMHgwOTA0LCAweDFkY2EsIDB4MjAxMSwgMHgxZWJjLCAweDIyMDUsIDB4YWI4OCwgMHgwMGE4LAorCTB4MDgwYywgMHgwZDg1LCAweDkxODYsIDB4MDAxMywgMHgwMTI4LCAweDBjZDAsIDB4OTE4NiwgMHgwMDFiLAorCTB4MDEwOCwgMHgwY2IwLCAweGE4N2MsIDB4ZDBiNCwgMHgwOTA0LCAweDFkY2EsIDB4OTE4NCwgMHgwMDBmLAorCTB4OTA4MCwgMHgxZWMxLCAweDIwMTUsIDB4MjIwNSwgMHhhYjg4LCAweDI5MDgsIDB4YTgwYSwgMHhhOTBlLAorCTB4YWExMiwgMHhhYjE2LCAweDkwMDYsIDB4YTg0MiwgMHhhODNlLCAweDAxMmUsIDB4MDAwNSwgMHgyY2YwLAorCTB4MDEyNiwgMHgyMDkxLCAweDI0MDAsIDB4M2U2MCwgMHg2MDE0LCAweDIwNDgsIDB4YTg4YywgMHhhOTkwLAorCTB4YWFhYywgMHhhYmIwLCAweGFhMzYsIDB4YWIzYSwgMHhhODNlLCAweGE5NDIsIDB4YTg0NiwgMHhhOTRhLAorCTB4YTk2NCwgMHg5MThjLCAweDAwZmYsIDB4OTE4NiwgMHgwMDFlLCAweDAxOTgsIDB4Mjk0MCwgMHhhMDY0LAorCTB4YTgxYSwgMHg5MGVjLCAweDAwMGYsIDB4OWQ4MCwgMHgxZWMxLCAweDIwNjUsIDB4MmMwNSwgMHgyODA4LAorCTB4MmMxMCwgMHhhYjg4LCAweGE4MGEsIDB4YTkwZSwgMHhhYTEyLCAweGFiMTYsIDB4MDEyZSwgMHgzZTYwLAorCTB4MDAwNSwgMHhhODA0LCAweDIwNDAsIDB4MGM1OCwgMHgyY2YwLCAweDAxMjYsIDB4MjA5MSwgMHgyNDAwLAorCTB4M2U2MCwgMHg2MDE0LCAweDIwNDgsIDB4YTk3YywgMHgyOTUwLCAweGQxZGMsIDB4MTkwNCwgMHgxZDk0LAorCTB4YzFkZCwgMHhhOTdlLCAweDkwMDYsIDB4YTg0MiwgMHhhODNlLCAweGE5ODgsIDB4ODEwOSwgMHhhOTE2LAorCTB4YTk2NCwgMHhhOTFhLCAweDkxODQsIDB4MDAwZiwgMHg5MDg4LCAweDFlYzEsIDB4MjE0NSwgMHgwMDAyLAorCTB4MWNjOCwgMHgxY2Q2LCAweDFjYzgsIDB4MWNjOCwgMHgxY2M4LCAweDFjY2EsIDB4MWNjOCwgMHgxY2M4LAorCTB4MWQyYiwgMHgxZDJiLCAweDFjYzgsIDB4MWNjOCwgMHgxY2M4LCAweDFkMjksIDB4MWNjOCwgMHgxY2M4LAorCTB4MDgwYywgMHgwZDg1LCAweGE4MDQsIDB4MjA1MCwgMHhiMTY0LCAweGE5MWEsIDB4OTE4NCwgMHgwMDBmLAorCTB4OTA4MCwgMHgxZWMxLCAweDIwNDUsIDB4ZDE5YywgMHgxOTA0LCAweDFkMmIsIDB4OTAzNiwgMHgyNjM4LAorCTB4MjgwNSwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZDg1LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLAorCTB4MWNmYiwgMHgxY2ZiLCAweDFjZmQsIDB4MWNmYiwgMHgxY2ZiLCAweDFjZmIsIDB4MWQwMywgMHgxY2ZiLAorCTB4MWNmYiwgMHgxY2ZiLCAweDFkMDksIDB4MWNmYiwgMHgxY2ZiLCAweDFjZmIsIDB4MWQwZiwgMHgxY2ZiLAorCTB4MWNmYiwgMHgxY2ZiLCAweDFkMTUsIDB4MWNmYiwgMHgxY2ZiLCAweDFjZmIsIDB4MWQxYiwgMHgxY2ZiLAorCTB4MWNmYiwgMHgxY2ZiLCAweDFkMjEsIDB4MDgwYywgMHgwZDg1LCAweGI1NzQsIDB4YjQ3OCwgMHhiMzdjLAorCTB4YjI4MCwgMHgwODA0LCAweDFkNzAsIDB4YjU4NCwgMHhiNDg4LCAweGIzOGMsIDB4YjI5MCwgMHgwODA0LAorCTB4MWQ3MCwgMHhiNTk0LCAweGI0OTgsIDB4YjM5YywgMHhiMmEwLCAweDA4MDQsIDB4MWQ3MCwgMHhiNWE0LAorCTB4YjRhOCwgMHhiM2FjLCAweGIyYjAsIDB4MDgwNCwgMHgxZDcwLCAweGI1YjQsIDB4YjRiOCwgMHhiM2JjLAorCTB4YjJjMCwgMHgwODA0LCAweDFkNzAsIDB4YjVjNCwgMHhiNGM4LCAweGIzY2MsIDB4YjJkMCwgMHgwODA0LAorCTB4MWQ3MCwgMHhiNWQ0LCAweGI0ZDgsIDB4YjNkYywgMHhiMmUwLCAweDA4MDQsIDB4MWQ3MCwgMHgwODA0LAorCTB4MWQ3MCwgMHgwODBjLCAweDBkODUsIDB4MjgwNSwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZDg1LAorCTB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWQ0ZSwgMHgxZDRjLCAweDFkNGMsIDB4MWQ0YywgMHgxZDRjLAorCTB4MWQ0YywgMHgxZDU1LCAweDFkNGMsIDB4MWQ0YywgMHgxZDRjLCAweDFkNGMsIDB4MWQ0YywgMHgxZDVjLAorCTB4MWQ0YywgMHgxZDRjLCAweDFkNGMsIDB4MWQ0YywgMHgxZDRjLCAweDFkNjMsIDB4MWQ0YywgMHgxZDRjLAorCTB4MWQ0YywgMHgxZDRjLCAweDFkNGMsIDB4MWQ2YSwgMHgwODBjLCAweDBkODUsIDB4YjU2YywgMHhiNDcwLAorCTB4Yjc3NCwgMHhiNjc4LCAweGIzN2MsIDB4YjI4MCwgMHgwMGQ4LCAweGI1ODQsIDB4YjQ4OCwgMHhiNzhjLAorCTB4YjY5MCwgMHhiMzk0LCAweGIyOTgsIDB4MDBhMCwgMHhiNTljLCAweGI0YTAsIDB4YjdhNCwgMHhiNmE4LAorCTB4YjNhYywgMHhiMmIwLCAweDAwNjgsIDB4YjViNCwgMHhiNGI4LCAweGI3YmMsIDB4YjZjMCwgMHhiM2M0LAorCTB4YjJjOCwgMHgwMDMwLCAweGI1Y2MsIDB4YjRkMCwgMHhiN2Q0LCAweGI2ZDgsIDB4YjNkYywgMHhiMmUwLAorCTB4YWIyZSwgMHhhYTMyLCAweGFkMWUsIDB4YWMyMiwgMHhhZjI2LCAweGFlMmEsIDB4YTk4OCwgMHg4MTA5LAorCTB4YTkxNiwgMHgxMTE4LCAweDkwMDYsIDB4MDEyZSwgMHgwMDA1LCAweDg4NDAsIDB4MjgwNSwgMHg5MDA1LAorCTB4MTE2OCwgMHhiMDA0LCAweDkwMDUsIDB4MDkwYywgMHgwZDg1LCAweDIwNTAsIDB4YjE2NCwgMHhhOTFhLAorCTB4OTE4NCwgMHgwMDBmLCAweDkwODAsIDB4MWVjMSwgMHgyMDQ1LCAweDI4MDUsIDB4MjgxMCwgMHgyYTA4LAorCTB4YTgwYSwgMHhhOTBlLCAweGFhMTIsIDB4MGMzMCwgMHgzZTYwLCAweDYzNDQsIDB4ZDNmYywgMHgxOTBjLAorCTB4MGQ4NSwgMHhhOTNjLCAweGFhNDAsIDB4YTg0NCwgMHg5MTA2LCAweDExMTgsIDB4YTg0OCwgMHg5MjA2LAorCTB4MDUwOCwgMHgyOTU4LCAweGFiNDgsIDB4YWM0NCwgMHgyOTQwLCAweDA4MGMsIDB4MWVlMSwgMHgxOTk4LAorCTB4Mjg1MCwgMHgyYzQwLCAweGFiMTQsIDB4YTg4MCwgMHhkMGZjLCAweDExNDAsIDB4YTgxMCwgMHgyMDA1LAorCTB4YTgwYSwgMHgyYTAwLCAweGE4MGUsIDB4MjAwOSwgMHg4MDE1LCAweDAwNzAsIDB4MDBjNiwgMHgzZTYwLAorCTB4NjA0NCwgMHhjMGE0LCAweDkwODUsIDB4ODAwNSwgMHg2MDQ2LCAweDAwY2UsIDB4ODMxOSwgMHhhYjE2LAorCTB4MTkwNCwgMHgxZDdkLCAweDIwMDksIDB4ODAwNSwgMHgzZTYwLCAweDYwNDQsIDB4OTEwNSwgMHg2MDQ2LAorCTB4MDgwNCwgMHgxZDdhLCAweDA4MGMsIDB4MGQ4NSwgMHgwMGY2LCAweDAwZTYsIDB4MDA5NiwgMHgwMGM2LAorCTB4MDAyNiwgMHg3MDRjLCAweDljMDYsIDB4MTkwYywgMHgwZDg1LCAweDIwNzksIDB4MDA5MCwgMHgyMDAxLAorCTB4MDEwNSwgMHgyMDAzLCAweDAwMTAsIDB4NzgyYiwgMHgwMDA0LCAweDcwNTcsIDB4MDAwMCwgMHg2MDE0LAorCTB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDExOCwgMHhhODgwLCAweGMwYmQsIDB4YTg4MiwgMHg2MDIwLAorCTB4OTA4NiwgMHgwMDA2LCAweDExNzAsIDB4MjA2MSwgMHgwMTAwLCAweDYyYzgsIDB4MjAwMSwgMHgwMGZhLAorCTB4ODAwMSwgMHgxZGYwLCAweDYwYzgsIDB4OTIwNiwgMHgxZGMwLCAweDYwYzQsIDB4YTg5YSwgMHg2MGM4LAorCTB4YTg5NiwgMHg3MDRjLCAweDIwNjAsIDB4MDBjNiwgMHgwODBjLCAweGNhZTksIDB4MDgwYywgMHhhY2ZjLAorCTB4MDBjZSwgMHg3MDRjLCAweDljMDYsIDB4MTE1MCwgMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyMjIwLAorCTB4MDgwYywgMHhhN2ExLCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweGE2MzUsIDB4MDAyZSwgMHgwMGNlLAorCTB4MDA5ZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDA5MCwgMHg3ODFjLAorCTB4MDAwNiwgMHg3ODE4LCAweDAwMDYsIDB4MjA3OSwgMHgwMTAwLCAweDdhMTQsIDB4OTI4NCwgMHgxOTg0LAorCTB4OTA4NSwgMHgwMDEyLCAweDc4MTYsIDB4MjAxOSwgMHgxMDAwLCAweDgzMTksIDB4MDkwYywgMHgwZDg1LAorCTB4NzgyMCwgMHhkMGJjLCAweDFkZDAsIDB4NzljOCwgMHgwMDBlLCAweDkxMDIsIDB4MDAxZSwgMHgwMDA2LAorCTB4MDAxNiwgMHg3OWM0LCAweDAwMGUsIDB4OTEwMywgMHg3OGM2LCAweDAwMGUsIDB4NzhjYSwgMHg5Mjg0LAorCTB4MTk4NCwgMHg5MDg1LCAweDAwMTIsIDB4NzgxNiwgMHgyMDc5LCAweDAwOTAsIDB4NzgyYiwgMHgwMDA4LAorCTB4NzA1NywgMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwgMHgxOWU4LAorCTB4NzA1NCwgMHg5MDg2LCAweDAwMDAsIDB4MDkwNCwgMHgxZTkyLCAweDIwNzksIDB4MDA5MCwgMHgyMDA5LAorCTB4MDIwNywgMHgyMTBjLCAweGQxOTQsIDB4MDFiOCwgMHgyMDA5LCAweDAyMGMsIDB4MjEwYywgMHg5MTg0LAorCTB4MDAwMywgMHgwMTg4LCAweDA4MGMsIDB4ZWVmYSwgMHgyMDAxLCAweDAxMzMsIDB4MjAwNCwgMHg5MDA1LAorCTB4MDkwYywgMHgwZDg1LCAweDAwMTYsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIyMCwgMHgwMDFlLAorCTB4MjAwMSwgMHgwMjBjLCAweDIxMDIsIDB4MjAwOSwgMHgwMjA2LCAweDIxMDQsIDB4MjAwOSwgMHgwMjAzLAorCTB4MjEwYywgMHg5MTA2LCAweDExMjAsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIyMCwgMHg3ODJjLAorCTB4ZDBmYywgMHgwOWE4LCAweDA4MGMsIDB4YWQxOCwgMHg3ODJjLCAweGQwZmMsIDB4MWRlOCwgMHgwODBjLAorCTB4YWNmYywgMHg3MDU0LCAweDkwODYsIDB4MDAwMCwgMHgxOTUwLCAweDc4MmIsIDB4MDAwNCwgMHg3ODJjLAorCTB4ZDBhYywgMHgxZGU4LCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDIyMjAsIDB4NzgyYiwgMHgwMDAyLAorCTB4NzA1NywgMHgwMDAwLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDA4MGMsIDB4MGQ4NSwgMHg4YzYwLAorCTB4MmMwNSwgMHg5MDA1LCAweDAxMTAsIDB4OGE1MSwgMHgwMDA1LCAweGEwMDQsIDB4OTAwNSwgMHgwMTY4LAorCTB4YTg1YSwgMHgyMDQwLCAweGEwNjQsIDB4OTA4NCwgMHgwMDBmLCAweDkwODAsIDB4MWVjMSwgMHgyMDY1LAorCTB4OGNmZiwgMHgwOTBjLCAweDBkODUsIDB4OGE1MSwgMHgwMDA1LCAweDIwNTAsIDB4MDAwNSwgMHgwMDAwLAorCTB4MDAxZCwgMHgwMDIxLCAweDAwMjUsIDB4MDAyOSwgMHgwMDJkLCAweDAwMzEsIDB4MDAzNSwgMHgwMDAwLAorCTB4MDAxYiwgMHgwMDIxLCAweDAwMjcsIDB4MDAyZCwgMHgwMDMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDIzLAorCTB4MDAwMCwgMHgwMDAwLCAweDFlYjQsIDB4MWViMCwgMHgxZWI0LCAweDFlYjQsIDB4MWViZSwgMHgwMDAwLAorCTB4MWViNCwgMHgxZWJiLCAweDFlYmIsIDB4MWViOCwgMHgxZWJiLCAweDFlYmIsIDB4MDAwMCwgMHgxZWJlLAorCTB4MWViYiwgMHgwMDAwLCAweDFlYjYsIDB4MWViNiwgMHgwMDAwLCAweDFlYjYsIDB4MWViZSwgMHgwMDAwLAorCTB4MWViNiwgMHgxZWJjLCAweDFlYmMsIDB4MWViYywgMHgwMDAwLCAweDFlYmMsIDB4MDAwMCwgMHgxZWJlLAorCTB4MWViYywgMHgwMGM2LCAweDAwZDYsIDB4MDA4NiwgMHhhYjQyLCAweGFjM2UsIDB4YTg4OCwgMHg5MDU1LAorCTB4MDkwNCwgMHgyMGMwLCAweDI5NDAsIDB4YTA2NCwgMHg5MGVjLCAweDAwMGYsIDB4OTA4NCwgMHgwMGZmLAorCTB4OTA4NiwgMHgwMDA4LCAweDExMTgsIDB4MjA2MSwgMHgxZWJjLCAweDAwZDAsIDB4OWRlMCwgMHgxZWMxLAorCTB4OWQ4NiwgMHgwMDA3LCAweDAxMzAsIDB4OWQ4NiwgMHgwMDBlLCAweDAxMTgsIDB4OWQ4NiwgMHgwMDBmLAorCTB4MTEyMCwgMHhhMDhjLCAweDk0MjIsIDB4YTA5MCwgMHg5MzFiLCAweDJjMDUsIDB4OTA2NSwgMHgxMTQwLAorCTB4MDMxMCwgMHgwODA0LCAweDIwYzAsIDB4YTAwNCwgMHg5MDQ1LCAweDA5MDQsIDB4MjBjMCwgMHgwOGQ4LAorCTB4MmMwNSwgMHg5MDA1LCAweDA5MDQsIDB4MWZhOCwgMHhkZDljLCAweDE5MDQsIDB4MWY2NCwgMHg5MDhhLAorCTB4MDAzNiwgMHgxYTBjLCAweDBkODUsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWYzOSwgMHgxZjM5LAorCTB4MWYzYiwgMHgxZjM5LCAweDFmMzksIDB4MWYzOSwgMHgxZjQxLCAweDFmMzksIDB4MWYzOSwgMHgxZjM5LAorCTB4MWY0NywgMHgxZjM5LCAweDFmMzksIDB4MWYzOSwgMHgxZjRkLCAweDFmMzksIDB4MWYzOSwgMHgxZjM5LAorCTB4MWY1MywgMHgxZjM5LCAweDFmMzksIDB4MWYzOSwgMHgxZjU5LCAweDFmMzksIDB4MWYzOSwgMHgxZjM5LAorCTB4MWY1ZiwgMHgwODBjLCAweDBkODUsIDB4YTA3YywgMHg5NDIyLCAweGEwODAsIDB4OTMxYiwgMHgwODA0LAorCTB4MWY5ZSwgMHhhMDhjLCAweDk0MjIsIDB4YTA5MCwgMHg5MzFiLCAweDA4MDQsIDB4MWY5ZSwgMHhhMDljLAorCTB4OTQyMiwgMHhhMGEwLCAweDkzMWIsIDB4MDgwNCwgMHgxZjllLCAweGEwYWMsIDB4OTQyMiwgMHhhMGIwLAorCTB4OTMxYiwgMHgwODA0LCAweDFmOWUsIDB4YTBiYywgMHg5NDIyLCAweGEwYzAsIDB4OTMxYiwgMHgwODA0LAorCTB4MWY5ZSwgMHhhMGNjLCAweDk0MjIsIDB4YTBkMCwgMHg5MzFiLCAweDA4MDQsIDB4MWY5ZSwgMHhhMGRjLAorCTB4OTQyMiwgMHhhMGUwLCAweDkzMWIsIDB4MDRkMCwgMHg5MDhhLCAweDAwMzQsIDB4MWEwYywgMHgwZDg1LAorCTB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWY4NiwgMHgxZjg0LCAweDFmODQsIDB4MWY4NCwgMHgxZjg0LAorCTB4MWY4NCwgMHgxZjhiLCAweDFmODQsIDB4MWY4NCwgMHgxZjg0LCAweDFmODQsIDB4MWY4NCwgMHgxZjkwLAorCTB4MWY4NCwgMHgxZjg0LCAweDFmODQsIDB4MWY4NCwgMHgxZjg0LCAweDFmOTUsIDB4MWY4NCwgMHgxZjg0LAorCTB4MWY4NCwgMHgxZjg0LCAweDFmODQsIDB4MWY5YSwgMHgwODBjLCAweDBkODUsIDB4YTA3YywgMHg5NDIyLAorCTB4YTA4MCwgMHg5MzFiLCAweDAwOTgsIDB4YTA5NCwgMHg5NDIyLCAweGEwOTgsIDB4OTMxYiwgMHgwMDcwLAorCTB4YTBhYywgMHg5NDIyLCAweGEwYjAsIDB4OTMxYiwgMHgwMDQ4LCAweGEwYzQsIDB4OTQyMiwgMHhhMGM4LAorCTB4OTMxYiwgMHgwMDIwLCAweGEwZGMsIDB4OTQyMiwgMHhhMGUwLCAweDkzMWIsIDB4MDYzMCwgMHgyMzAwLAorCTB4OTQwNSwgMHgwMTYwLCAweDhhNTEsIDB4MDkwNCwgMHgyMGMwLCAweDhjNjAsIDB4MDgwNCwgMHgxZjEwLAorCTB4YTAwNCwgMHg5MDQ1LCAweDA5MDQsIDB4MjBjMCwgMHgwODA0LCAweDFlZWIsIDB4OGE1MSwgMHgwOTA0LAorCTB4MjBjMCwgMHg4YzYwLCAweDJjMDUsIDB4OTAwNSwgMHgxMTU4LCAweGEwMDQsIDB4OTA0NSwgMHgwOTA0LAorCTB4MjBjMCwgMHhhMDY0LCAweDkwZWMsIDB4MDAwZiwgMHg5ZGUwLCAweDFlYzEsIDB4MmMwNSwgMHgyMDYwLAorCTB4YTg4MCwgMHhjMGZjLCAweGE4ODIsIDB4MDgwNCwgMHgyMGI1LCAweDJjMDUsIDB4ODQyMiwgMHg4NDIwLAorCTB4ODMxYSwgMHg5Mzk5LCAweDAwMDAsIDB4YWMyZSwgMHhhYjMyLCAweGRkOWMsIDB4MTkwNCwgMHgyMDUyLAorCTB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWZlZSwgMHgxZmVlLCAweDFmZjAsIDB4MWZlZSwgMHgxZmVlLAorCTB4MWZlZSwgMHgxZmZlLCAweDFmZWUsIDB4MWZlZSwgMHgxZmVlLCAweDIwMGMsIDB4MWZlZSwgMHgxZmVlLAorCTB4MWZlZSwgMHgyMDFhLCAweDFmZWUsIDB4MWZlZSwgMHgxZmVlLCAweDIwMjgsIDB4MWZlZSwgMHgxZmVlLAorCTB4MWZlZSwgMHgyMDM2LCAweDFmZWUsIDB4MWZlZSwgMHgxZmVlLCAweDIwNDQsIDB4MDgwYywgMHgwZDg1LAorCTB4YTE3YywgMHgyNDAwLCAweDkxMjIsIDB4YTE4MCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZDg1LAorCTB4YTA3NCwgMHg5NDIwLCAweGEwNzgsIDB4OTMxOSwgMHgwODA0LCAweDIwYjAsIDB4YTE4YywgMHgyNDAwLAorCTB4OTEyMiwgMHhhMTkwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkODUsIDB4YTA4NCwgMHg5NDIwLAorCTB4YTA4OCwgMHg5MzE5LCAweDA4MDQsIDB4MjBiMCwgMHhhMTljLCAweDI0MDAsIDB4OTEyMiwgMHhhMWEwLAorCTB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGQ4NSwgMHhhMDk0LCAweDk0MjAsIDB4YTA5OCwgMHg5MzE5LAorCTB4MDgwNCwgMHgyMGIwLCAweGExYWMsIDB4MjQwMCwgMHg5MTIyLCAweGExYjAsIDB4MjMwMCwgMHg5MTFiLAorCTB4MGEwYywgMHgwZDg1LCAweGEwYTQsIDB4OTQyMCwgMHhhMGE4LCAweDkzMTksIDB4MDgwNCwgMHgyMGIwLAorCTB4YTFiYywgMHgyNDAwLCAweDkxMjIsIDB4YTFjMCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZDg1LAorCTB4YTBiNCwgMHg5NDIwLCAweGEwYjgsIDB4OTMxOSwgMHgwODA0LCAweDIwYjAsIDB4YTFjYywgMHgyNDAwLAorCTB4OTEyMiwgMHhhMWQwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkODUsIDB4YTBjNCwgMHg5NDIwLAorCTB4YTBjOCwgMHg5MzE5LCAweDA4MDQsIDB4MjBiMCwgMHhhMWRjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWUwLAorCTB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGQ4NSwgMHhhMGQ0LCAweDk0MjAsIDB4YTBkOCwgMHg5MzE5LAorCTB4MDgwNCwgMHgyMGIwLCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDIwNzAsIDB4MjA2ZSwgMHgyMDZlLAorCTB4MjA2ZSwgMHgyMDZlLCAweDIwNmUsIDB4MjA3ZCwgMHgyMDZlLCAweDIwNmUsIDB4MjA2ZSwgMHgyMDZlLAorCTB4MjA2ZSwgMHgyMDhhLCAweDIwNmUsIDB4MjA2ZSwgMHgyMDZlLCAweDIwNmUsIDB4MjA2ZSwgMHgyMDk3LAorCTB4MjA2ZSwgMHgyMDZlLCAweDIwNmUsIDB4MjA2ZSwgMHgyMDZlLCAweDIwYTQsIDB4MDgwYywgMHgwZDg1LAorCTB4YTE3YywgMHgyNDAwLCAweDkxMjIsIDB4YTE4MCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZDg1LAorCTB4YTA2YywgMHg5NDIwLCAweGEwNzAsIDB4OTMxOSwgMHgwNDk4LCAweGExOTQsIDB4MjQwMCwgMHg5MTIyLAorCTB4YTE5OCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZDg1LCAweGEwODQsIDB4OTQyMCwgMHhhMDg4LAorCTB4OTMxOSwgMHgwNDMwLCAweGExYWMsIDB4MjQwMCwgMHg5MTIyLCAweGExYjAsIDB4MjMwMCwgMHg5MTFiLAorCTB4MGEwYywgMHgwZDg1LCAweGEwOWMsIDB4OTQyMCwgMHhhMGEwLCAweDkzMTksIDB4MDBjOCwgMHhhMWM0LAorCTB4MjQwMCwgMHg5MTIyLCAweGExYzgsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGQ4NSwgMHhhMGI0LAorCTB4OTQyMCwgMHhhMGI4LCAweDkzMTksIDB4MDA2MCwgMHhhMWRjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWUwLAorCTB4MjMwMCwgMHg5MTFiLCAweDBhMGMsIDB4MGQ4NSwgMHhhMGNjLCAweDk0MjAsIDB4YTBkMCwgMHg5MzE5LAorCTB4YWMxZSwgMHhhYjIyLCAweGE4ODAsIDB4YzBmZCwgMHhhODgyLCAweDI4MDAsIDB4YTg1YSwgMHgyYzAwLAorCTB4YTgxMiwgMHgyYTAwLCAweGE4MTYsIDB4MDAwZSwgMHgwMDBlLCAweDAwMGUsIDB4OTAwNiwgMHgwMDI4LAorCTB4MDA4ZSwgMHgwMGRlLCAweDAwY2UsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBjNiwgMHg2MTBjLAorCTB4MDAxNiwgMHg5MDI2LCAweDI0MTAsIDB4NjAwNCwgMHg5NDIwLCAweDkyOTEsIDB4MDAwMCwgMHgyYzA0LAorCTB4OTIxMCwgMHg5Y2UwLCAweDAwMDIsIDB4OTE4YSwgMHgwMDAyLCAweDFkYTgsIDB4OTI4NCwgMHgwMDBmLAorCTB4OTQwNSwgMHgwMDFlLCAweDAwY2UsIDB4MDAwNSwgMHg3ODAzLCAweDAwMDMsIDB4NzgwZiwgMHgwMDAwLAorCTB4NjAwNCwgMHg3ODEyLCAweDJjMDQsIDB4NzgxNiwgMHg5Y2UwLCAweDAwMDIsIDB4OTE4YSwgMHgwMDAyLAorCTB4MWRiOCwgMHgwMDA1LCAweDIwMDEsIDB4MDAwNSwgMHgyMDA0LCAweGQwYmMsIDB4MTkwYywgMHgwZDdlLAorCTB4ZDA5NCwgMHgwMTEwLCAweDA4MGMsIDB4MTIwOCwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyNjAwLAorCTB4MjA3OSwgMHgwMjAwLCAweDIwNzEsIDB4MDI2MCwgMHgyMDY5LCAweDE4MDAsIDB4NzgxNywgMHgwMDAwLAorCTB4Nzg5YiwgMHgwODE0LCAweDc4YTMsIDB4MDQwNiwgMHg3ODlmLCAweDA0MTAsIDB4MjAwOSwgMHgwMTNiLAorCTB4MjAwYiwgMHgwNDAwLCAweDc4MWIsIDB4MDAwMiwgMHg3ODNiLCAweDAwMWYsIDB4NzgzNywgMHgwMDIwLAorCTB4NzgwMywgMHgxNjAwLCAweDAxMmUsIDB4MDAwNSwgMHgyMDkxLCAweDI2MDAsIDB4NzgxYywgMHhkMGE0LAorCTB4MTkwYywgMHgyMjFkLCAweDc5MDAsIDB4ZDFkYywgMHgxMTE4LCAweDkwODQsIDB4MDAwNiwgMHgwMDFhLAorCTB4OTA4NCwgMHgwMDBlLCAweDAwMDIsIDB4MjEzYiwgMHgyMTMzLCAweDgyMTAsIDB4MjEzMywgMHgyMTM1LAorCTB4MjEzNSwgMHgyMTM1LCAweDIxMzUsIDB4ODFmNiwgMHgyMTMzLCAweDIxMzcsIDB4MjEzMywgMHgyMTM1LAorCTB4MjEzMywgMHgyMTM1LCAweDIxMzMsIDB4MDgwYywgMHgwZDg1LCAweDAwMzEsIDB4MDAyMCwgMHgwODBjLAorCTB4ODFmNiwgMHgwODBjLCAweDgyMTAsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLAorCTB4ZWVmYSwgMHg3OTMwLCAweDkxODQsIDB4MDAwMywgMHgwNTEwLCAweDA4MGMsIDB4YWNmYywgMHgyMDAxLAorCTB4MTlmYiwgMHgyMDA0LCAweDkwMDUsIDB4MDFhMCwgMHgyMDAxLCAweDAxMzMsIDB4MjAwNCwgMHg5MDA1LAorCTB4MDkwYywgMHgwZDg1LCAweDAwYzYsIDB4MjAwMSwgMHgxOWZiLCAweDIwNjQsIDB4MDgwYywgMHhhZDE4LAorCTB4MDgwYywgMHhjYWU5LCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDIyMjAsIDB4MDBjZSwgMHgwNDA4LAorCTB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIyMCwgMHgwODBjLCAweGFkMTgsIDB4MDBkMCwgMHg5MTg0LAorCTB4MDAxNCwgMHgwMWEwLCAweDZhMDAsIDB4OTI4NiwgMHgwMDAzLCAweDAxNjAsIDB4MDgwYywgMHg3NzllLAorCTB4MTEzOCwgMHgwODBjLCAweDdhYjYsIDB4MDgwYywgMHg2MTlkLCAweDA4MGMsIDB4NzZjZCwgMHgwMDEwLAorCTB4MDgwYywgMHg2MDU4LCAweDA4MGMsIDB4ODJhZSwgMHgwMDQxLCAweDAwMTgsIDB4OTE4NCwgMHg5NTQwLAorCTB4MWRjOCwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZTYsIDB4MDAzNiwgMHgwMDQ2LAorCTB4MDA1NiwgMHgyMDcxLCAweDFhNmUsIDB4MDgwYywgMHgxYjFlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLAorCTB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyZTAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MTI4LAorCTB4MjAwMSwgMHgxOTZmLCAweDIxMDIsIDB4MjAwMSwgMHgxOTc3LCAweDIxMDIsIDB4MjAwMSwgMHgwMTNiLAorCTB4MjEwMiwgMHgyMDc5LCAweDAyMDAsIDB4MjAwMSwgMHgwMjAxLCAweDc4OWUsIDB4NzhhMywgMHgwMjAwLAorCTB4OTE5OCwgMHgwMDA3LCAweDgzMWMsIDB4ODMxYywgMHg4MzFjLCAweDkzOTgsIDB4MDAwNSwgMHgyMzIwLAorCTB4OTE4MiwgMHgwMjA0LCAweDEyMzAsIDB4MjAxMSwgMHgwMDA4LCAweDg0MjMsIDB4ODQyMywgMHg4NDIzLAorCTB4MDQ4OCwgMHg5MTgyLCAweDAyNGMsIDB4MTI0MCwgMHgyMDExLCAweDAwMDcsIDB4ODQwMywgMHg4MDAzLAorCTB4OTQwMCwgMHg5NDAwLCAweDk0MjAsIDB4MDQzMCwgMHg5MTgyLCAweDAyYmMsIDB4MTIzOCwgMHgyMDExLAorCTB4MDAwNiwgMHg4NDAzLCAweDgwMDMsIDB4OTQwMCwgMHg5NDIwLCAweDAwZTAsIDB4OTE4MiwgMHgwMzRjLAorCTB4MTIzMCwgMHgyMDExLCAweDAwMDUsIDB4ODQwMywgMHg4MDAzLCAweDk0MjAsIDB4MDA5OCwgMHg5MTgyLAorCTB4MDQyYywgMHgxMjI4LCAweDIwMTEsIDB4MDAwNCwgMHg4NDIzLCAweDg0MjMsIDB4MDA1OCwgMHg5MTgyLAorCTB4MDU5YywgMHgxMjI4LCAweDIwMTEsIDB4MDAwMywgMHg4NDAzLCAweDk0MjAsIDB4MDAxOCwgMHgyMDExLAorCTB4MDAwMiwgMHg4NDIzLCAweDk0ODIsIDB4MDIyOCwgMHg4MDAyLCAweDgwMjAsIDB4ODMwMSwgMHg5NDAyLAorCTB4MDExMCwgMHgwMjA4LCAweDgzMjEsIDB4ODIxNywgMHg4MjAzLCAweDk0MDUsIDB4Nzg5YSwgMHgwMTJlLAorCTB4MDAwNSwgMHgwMDA2LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTQsIDB4OTA4NCwgMHhmZmMwLAorCTB4OTEwZCwgMHg2OTE2LCAweDAwZGUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLAorCTB4OTAwNSwgMHg2ODEwLCAweDAxMTAsIDB4YzBhNSwgMHgwMDA4LCAweGMwYTQsIDB4NjgxMiwgMHgwMGRlLAorCTB4MDAwNSwgMHgwMDA2LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTAsIDB4OTA4NCwgMHhmZmY4LAorCTB4OTEwZCwgMHg2OTEyLCAweDAwZGUsIDB4MDAwZSwgMHgwMDA1LCAweDc5MzgsIDB4MDgwYywgMHgwZDdlLAorCTB4MDBmNiwgMHgyMDc5LCAweDAyMDAsIDB4NzkwMiwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLAorCTB4YTAwMSwgMHhhMDAxLCAweDc5MDIsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLAorCTB4YTAwMSwgMHgwMGZlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MjA2MSwgMHgwMTAwLAorCTB4MjA3MSwgMHgxODAwLCAweDIwMDksIDB4MDAwMCwgMHgwODBjLCAweDJhODUsIDB4MDgwYywgMHgyOTliLAorCTB4MjAwMSwgMHgxOTlkLCAweDIwMDMsIDB4MDcwMCwgMHgyMDAxLCAweDE5OWUsIDB4MjAwMywgMHgwNzAwLAorCTB4MDgwYywgMHgyYWY2LCAweDkwMDYsIDB4MDgwYywgMHgyOWNhLCAweDkwMDYsIDB4MDgwYywgMHgyOWFkLAorCTB4MjBhOSwgMHgwMDEyLCAweDFkMDQsIDB4MjI1MiwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHgyMjUyLAorCTB4NjAyZiwgMHgwMTAwLCAweDYwMmYsIDB4MDAwMCwgMHg2MDUwLCAweDkwODUsIDB4MDQwMCwgMHg5MDg0LAorCTB4ZGZmZiwgMHg2MDUyLCAweDYyMjQsIDB4MDgwYywgMHgyYWQzLCAweDA4MGMsIDB4MjZjNSwgMHgyMDA5LAorCTB4MDBlZiwgMHg2MTMyLCAweDYxMzYsIDB4MDgwYywgMHgyNmQ1LCAweDYwZTcsIDB4MDAwMCwgMHg2MWVhLAorCTB4MjAwMSwgMHgxODBkLCAweDIwMDQsIDB4ZDA4YywgMHgyMDAxLCAweDAwMDIsIDB4MTExMCwgMHgyMDAxLAorCTB4MDAwOCwgMHg2MGUyLCAweDYwNGIsIDB4ZjdmNywgMHg2MDQzLCAweDAwMDAsIDB4NjAyZiwgMHgwMDgwLAorCTB4NjAyZiwgMHgwMDAwLCAweDYwMDcsIDB4MzQ5ZiwgMHgwMGM2LCAweDIwNjEsIDB4MDE0MCwgMHg2MDhiLAorCTB4MDAwYiwgMHg2MDhmLCAweDEwYjgsIDB4NjA5MywgMHgwMDAwLCAweDYwOTcsIDB4MDE5OCwgMHgwMGNlLAorCTB4NjAwNCwgMHg5MDg1LCAweDgwMDAsIDB4NjAwNiwgMHg2MGJiLCAweDAwMDAsIDB4MjBhOSwgMHgwMDE4LAorCTB4NjBiZiwgMHgwMDAwLCAweDFmMDQsIDB4MjI5OCwgMHg2MGJiLCAweDAwMDAsIDB4NjBiZiwgMHgwMTA4LAorCTB4NjBiZiwgMHgwMDEyLCAweDYwYmYsIDB4MDQwNSwgMHg2MGJmLCAweDAwMTQsIDB4NjBiZiwgMHgwMzIwLAorCTB4NjBiZiwgMHgwMDE4LCAweDYwMWIsIDB4MDBmMCwgMHg2MDFmLCAweDAwMWUsIDB4NjAwZiwgMHgwMDZiLAorCTB4NjAyYiwgMHg0MDJjLCAweDAxMmUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDE0MCwgMHg3OGMzLAorCTB4MDA4MCwgMHg3OGMzLCAweDAwODMsIDB4NzhjMywgMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgyMDAxLAorCTB4MTgzNSwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgxODM0LCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LAorCTB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4NjEyNCwgMHg2MDI4LAorCTB4OTEwYywgMHgwMDY2LCAweDIwMzEsIDB4MTgzNywgMHgyNjM0LCAweDk2YjQsIDB4MDAyOCwgMHgwMDZlLAorCTB4MTEzOCwgMHg2MDIwLCAweGQxYmMsIDB4MDEyMCwgMHhkMGJjLCAweDExNjgsIDB4ZDBiNCwgMHgxMTk4LAorCTB4OTE4NCwgMHg1ZTJjLCAweDExMTgsIDB4OTE4NCwgMHgwMDA3LCAweDAwYWEsIDB4OTE5NSwgMHgwMDA0LAorCTB4OTI4NCwgMHgwMDA3LCAweDAwODIsIDB4MDAxNiwgMHgyMDAxLCAweDAzODcsIDB4MjAwYywgMHhkMWE0LAorCTB4MDAxZSwgMHgwZDcwLCAweDBjOTgsIDB4MDAxNiwgMHgyMDAxLCAweDAzODcsIDB4MjAwYywgMHhkMWI0LAorCTB4MDAxZSwgMHgwZDMwLCAweDBjNTgsIDB4MjMwNiwgMHgyMzAzLCAweDIzMDMsIDB4MjMwMywgMHgyMzA1LAorCTB4MjMwMywgMHgyMzAzLCAweDIzMDMsIDB4MDgwYywgMHgwZDg1LCAweDAwMjksIDB4MDAyZSwgMHgwMDFlLAorCTB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBhNiwgMHg2MTI0LCAweDYwMjgsIDB4ZDA5YywgMHgwMTE4LAorCTB4ZDE5YywgMHgxOTA0LCAweDI1OGIsIDB4ZDFmNCwgMHgxOTBjLCAweDBkN2UsIDB4MDgwYywgMHg3NzllLAorCTB4MDkwNCwgMHgyMzYzLCAweDA4MGMsIDB4ZDY0NSwgMHgxMTIwLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAzLAorCTB4MDU4MCwgMHg2MDI0LCAweDkwODQsIDB4MTgwMCwgMHgwNTYwLCAweDA4MGMsIDB4NzdjMSwgMHgwMTE4LAorCTB4MDgwYywgMHg3N2FmLCAweDE1MzAsIDB4MjAxMSwgMHgwMDIwLCAweDA4MGMsIDB4MmFkMywgMHg2MDQzLAorCTB4MDAwMCwgMHgwODBjLCAweGQ2NDUsIDB4MDE2OCwgMHgwODBjLCAweDc3YzEsIDB4MTE1MCwgMHgyMDAxLAorCTB4MTlhOCwgMHgyMDAzLCAweDAwMDEsIDB4NjAyNywgMHgxODAwLCAweDA4MGMsIDB4NzYxMiwgMHgwODA0LAorCTB4MjU4ZSwgMHg3MGE0LCAweDkwMDUsIDB4MTE1MCwgMHg3MGE3LCAweDAwMDEsIDB4MDBkNiwgMHgyMDY5LAorCTB4MDE0MCwgMHgwODBjLCAweDc3ZjIsIDB4MDBkZSwgMHgxOTA0LCAweDI1OGUsIDB4MDgwYywgMHg3YWMwLAorCTB4MDQyOCwgMHgwODBjLCAweDc3YzEsIDB4MTU5MCwgMHg2MDI0LCAweDkwODQsIDB4MTgwMCwgMHgxMTA4LAorCTB4MDQ2OCwgMHgwODBjLCAweDdhYzAsIDB4MDgwYywgMHg3YWI2LCAweDA4MGMsIDB4NjE5ZCwgMHgwODBjLAorCTB4NzZjZCwgMHgwODA0LCAweDI1OGIsIDB4ZDFhYywgMHgxNTA4LCAweDYwMjQsIDB4ZDBkYywgMHgxMTcwLAorCTB4ZDBlNCwgMHgxMTc4LCAweGQwZDQsIDB4MTE5MCwgMHhkMGNjLCAweDAxMzAsIDB4NzA5OCwgMHg5MDg2LAorCTB4MDAyOSwgMHgxMTEwLCAweDA4MGMsIDB4Nzk5MCwgMHgwODA0LCAweDI1OGIsIDB4MDgwYywgMHg3YWJiLAorCTB4MDA0OCwgMHgyMDAxLCAweDE5N2QsIDB4MjAwMywgMHgwMDAyLCAweDAwMjAsIDB4MDgwYywgMHg3OGU0LAorCTB4MDgwNCwgMHgyNThiLCAweDA4MGMsIDB4N2EzYSwgMHgwODA0LCAweDI1OGIsIDB4NjIyMCwgMHhkMWJjLAorCTB4MDEzOCwgMHhkMmJjLCAweDE5MDQsIDB4MjVmNiwgMHhkMmI0LCAweDE5MDQsIDB4MjYwOCwgMHgwMDAwLAorCTB4ZDFhYywgMHgwOTA0LCAweDI0OTgsIDB4MDAzNiwgMHg2MzI4LCAweGMzYmMsIDB4NjMyYSwgMHgwMDNlLAorCTB4MDgwYywgMHg3NzllLCAweDExZDAsIDB4MjAxMSwgMHgwMDIwLCAweDA4MGMsIDB4MmFkMywgMHgwMDA2LAorCTB4MDAyNiwgMHgwMDM2LCAweDA4MGMsIDB4NzdiOCwgMHgxMTU4LCAweDA4MGMsIDB4N2FiNiwgMHgwODBjLAorCTB4NjE5ZCwgMHgwODBjLCAweDc2Y2QsIDB4MDAzZSwgMHgwMDJlLCAweDAwMGUsIDB4MDBhZSwgMHgwMDA1LAorCTB4MDAzZSwgMHgwMDJlLCAweDAwMGUsIDB4MDgwYywgMHg3NzcyLCAweDAwMTYsIDB4MDA0NiwgMHgwMGM2LAorCTB4NjQ0YywgMHg5NDg2LCAweGYwZjAsIDB4MTEzOCwgMHgyMDYxLCAweDAxMDAsIDB4NjQ0YSwgMHg2MDQzLAorCTB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4NzRkYSwgMHg5NDhjLCAweGZmMDAsIDB4NzAzOCwgMHhkMDg0LAorCTB4MDE5MCwgMHgwODBjLCAweGQ2NDUsIDB4MTExOCwgMHg5MTg2LCAweGY4MDAsIDB4MTE2MCwgMHg3MDQ4LAorCTB4ZDA4NCwgMHgxMTQ4LCAweGMwODUsIDB4NzA0YSwgMHgwMDM2LCAweDI0MTgsIDB4MjAxMSwgMHg4MDE2LAorCTB4MDgwYywgMHg0Y2ExLCAweDAwM2UsIDB4MDgwYywgMHhkNjNlLCAweDE5MDQsIDB4MjQ2ZCwgMHg5MTk2LAorCTB4ZmYwMCwgMHgwNWE4LCAweDcwNjAsIDB4OTA4NCwgMHgwMGZmLCAweDgxMGYsIDB4ODFmZiwgMHgwMTEwLAorCTB4OTExNiwgMHgwNTY4LCAweDcxMzAsIDB4ZDE4NCwgMHgxNTUwLCAweDA4MGMsIDB4MzQ4MiwgMHgwMTI4LAorCTB4YzE4ZCwgMHg3MTMyLCAweDA4MGMsIDB4NmMwOSwgMHgxNTEwLCAweDYyNDAsIDB4OTI5NCwgMHgwMDEwLAorCTB4MDEzMCwgMHg2MjQ4LCAweDkyOTQsIDB4ZmYwMCwgMHg5Mjk2LCAweGZmMDAsIDB4MDFjMCwgMHg3MDMwLAorCTB4ZDA4YywgMHgwOTA0LCAweDI0NmQsIDB4NzAzOCwgMHhkMDhjLCAweDExNDAsIDB4MjAwMSwgMHgxODBjLAorCTB4MjAwYywgMHhkMWFjLCAweDE5MDQsIDB4MjQ2ZCwgMHhjMWFkLCAweDIxMDIsIDB4MDAzNiwgMHg3M2Q4LAorCTB4MjAxMSwgMHg4MDEzLCAweDA4MGMsIDB4NGNhMSwgMHgwMDNlLCAweDA4MDQsIDB4MjQ2ZCwgMHg3MDM4LAorCTB4ZDA4YywgMHgxMTQwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGQxYWMsIDB4MTkwNCwgMHgyNDZkLAorCTB4YzFhZCwgMHgyMTAyLCAweDAwMzYsIDB4NzNkOCwgMHgyMDExLCAweDgwMTMsIDB4MDgwYywgMHg0Y2ExLAorCTB4MDAzZSwgMHg3MTMwLCAweGMxODUsIDB4NzEzMiwgMHgyMDExLCAweDE4NDgsIDB4MjIwYywgMHhkMWE0LAorCTB4MDFmMCwgMHgwMDE2LCAweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MDgwYywgMHg4YzQ0LAorCTB4MjAxOSwgMHgwMDBlLCAweDAwYzYsIDB4MjA2MSwgMHgwMDAwLCAweDA4MGMsIDB4ZTlmOSwgMHgwMGNlLAorCTB4OTQ4NCwgMHgwMGZmLCAweDkwODAsIDB4MzQ4ZSwgMHgyMDBkLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLAorCTB4MjEyMCwgMHg5MDA2LCAweDIwMDksIDB4MDAwZSwgMHgwODBjLCAweGVhOGQsIDB4MDAxZSwgMHgwMDE2LAorCTB4MjAwOSwgMHgwMDAyLCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweDMyZGEsIDB4MDAxZSwgMHgwMGE4LAorCTB4MDE1NiwgMHgwMGI2LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDA4MGMsIDB4NjdiNCwgMHgxMTQwLAorCTB4NzAzMCwgMHhkMDg0LCAweDExMTgsIDB4YjgwMCwgMHhkMGJjLCAweDExMTAsIDB4MDgwYywgMHg2MWI3LAorCTB4ODEwOCwgMHgxZjA0LCAweDI0NWQsIDB4MDBiZSwgMHgwMTVlLCAweDAwY2UsIDB4MDA0ZSwgMHgwODBjLAorCTB4YWNmYywgMHgwODBjLCAweGFmZDIsIDB4MDgwYywgMHhiMDliLCAweDA4MGMsIDB4YWQxOCwgMHg2MGUzLAorCTB4MDAwMCwgMHgwMDFlLCAweDIwMDEsIDB4MTgwMCwgMHgyMDE0LCAweDkyOTYsIDB4MDAwNCwgMHgxMTcwLAorCTB4ZDE5YywgMHgxMWIwLCAweDIwMTEsIDB4MTgwYywgMHgyMjE0LCAweGQyOWMsIDB4MTEyMCwgMHg2MjA0LAorCTB4OTI5NSwgMHgwMDAyLCAweDYyMDYsIDB4NjIyOCwgMHhjMjlkLCAweDYyMmEsIDB4MjAwMywgMHgwMDAxLAorCTB4MjAwMSwgMHgxODI2LCAweDIwMDMsIDB4MDAwMCwgMHgyMDExLCAweDAwMjAsIDB4MDgwYywgMHgyYWQzLAorCTB4ZDE5NCwgMHgwOTA0LCAweDI1OGIsIDB4MDAxNiwgMHgwODBjLCAweGFjZmMsIDB4NjIyMCwgMHhkMmI0LAorCTB4MDkwNCwgMHgyNTI2LCAweDA4MGMsIDB4OGE0YiwgMHgwODBjLCAweGEyYTAsIDB4MjAxMSwgMHgwMDA0LAorCTB4MDgwYywgMHgyYWQzLCAweDAwZjYsIDB4MjAxOSwgMHgxOWY0LCAweDIzMDQsIDB4OTA3ZCwgMHgwOTA0LAorCTB4MjRmMywgMHg3ODA0LCAweDkwODYsIDB4MDAzMiwgMHgxNWYwLCAweDAwZDYsIDB4MDBjNiwgMHgwMGU2LAorCTB4MDA5NiwgMHgyMDY5LCAweDAxNDAsIDB4NzgyYywgMHg2ODVlLCAweDc4MDgsIDB4Njg1YSwgMHg2MDQzLAorCTB4MDAwMiwgMHgyMDAxLCAweDAwMDMsIDB4ODAwMSwgMHgxZGYwLCAweDYwNDMsIDB4MDAwMCwgMHgyMDAxLAorCTB4MDAzYywgMHg4MDAxLCAweDFkZjAsIDB4MDgwYywgMHgyYWE5LCAweDIwMDEsIDB4MDAxZSwgMHg4MDAxLAorCTB4MDI0MCwgMHgyMGE5LCAweDAwMDksIDB4MDgwYywgMHgyYTYwLCAweDY5MDQsIDB4ZDFkYywgMHgxMTQwLAorCTB4MGNiMCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyYTk5LCAweDkwMDYsIDB4MDgwYywgMHgyYTk5LAorCTB4MDgwYywgMHg5OWVkLCAweDA4MGMsIDB4YWQxOCwgMHg3ODE0LCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLAorCTB4MmY2MCwgMHgwODBjLCAweGIxNmMsIDB4MDA5ZSwgMHgwMGVlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGZlLAorCTB4MDAxZSwgMHgwMGFlLCAweDAwMDUsIDB4MDBmZSwgMHgwMGQ2LCAweDIwNjksIDB4MDE0MCwgMHg2ODA0LAorCTB4OTA4NCwgMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyYWE5LCAweDAwZGUsIDB4MDBjNiwgMHgyMDYxLAorCTB4MTllOCwgMHg2MDM0LCAweDA4MGMsIDB4ZDY0NSwgMHgwMTIwLCAweDkwOWEsIDB4MDAwMywgMHgxMjU4LAorCTB4MDAxOCwgMHg5MDlhLCAweDAwYzgsIDB4MTIzOCwgMHg4MDAwLCAweDYwMzYsIDB4MDBjZSwgMHgwODBjLAorCTB4YTI3OCwgMHgwODA0LCAweDI1ODgsIDB4MjA2MSwgMHgwMTAwLCAweDYyYzAsIDB4MDgwYywgMHhhYzJkLAorCTB4MjAxOSwgMHgxOWY0LCAweDIzMDQsIDB4OTA2NSwgMHgwMTMwLCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LAorCTB4MDAyNywgMHgwODBjLCAweGIyMGEsIDB4MDBjZSwgMHgwODA0LCAweDI1ODgsIDB4ZDJiYywgMHgwOTA0LAorCTB4MjU2YiwgMHgwODBjLCAweDhhNTgsIDB4MjAxMSwgMHgwMDA0LCAweDA4MGMsIDB4MmFkMywgMHgwMGQ2LAorCTB4MjA2OSwgMHgwMTQwLCAweDY4MDQsIDB4OTA4NCwgMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyYWE5LAorCTB4MDBkZSwgMHgwMGM2LCAweDIwNjEsIDB4MTllOCwgMHg2MDUwLCAweDA4MGMsIDB4ZDY0NSwgMHgwMTIwLAorCTB4OTA5YSwgMHgwMDAzLCAweDE2NjgsIDB4MDAxOCwgMHg5MDlhLCAweDAwYzgsIDB4MTY0OCwgMHg4MDAwLAorCTB4NjA1MiwgMHg2MDRjLCAweDAwY2UsIDB4OTAwNSwgMHgwNWQ4LCAweDIwMDksIDB4MDdkMCwgMHgwODBjLAorCTB4OGE1MCwgMHg5MDgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDYsIDB4MTEzOCwgMHgyMDA5LAorCTB4MTk4NCwgMHgyMDExLCAweDAwMTIsIDB4MDgwYywgMHgyYWUyLCAweDA0NTAsIDB4OTA4MCwgMHgwMDA4LAorCTB4MjAwNCwgMHg5MDg2LCAweDAwMDksIDB4MGQ5OCwgMHgyMDA5LCAweDE5ODQsIDB4MjAxMSwgMHgwMDE2LAorCTB4MDgwYywgMHgyYWUyLCAweDAwZTgsIDB4MjAxMSwgMHgwMDA0LCAweDA4MGMsIDB4MmFkMywgMHgwMGMwLAorCTB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhNTk2LCAweDAwM2UsIDB4MjAxOSwgMHgxOWZiLAorCTB4MjMwNCwgMHg5MDY1LCAweDAxNjAsIDB4MjAwOSwgMHgwMDRmLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA5LAorCTB4MTExMCwgMHgyMDA5LCAweDAwNGYsIDB4NjAwMywgMHgwMDAzLCAweDA4MGMsIDB4YjIwYSwgMHgwMGNlLAorCTB4MDgwYywgMHhhZDE4LCAweDAwMWUsIDB4ZDE5YywgMHgwOTA0LCAweDI1ZWYsIDB4NzAzOCwgMHhkMGFjLAorCTB4MTU1OCwgMHgwMDE2LCAweDAxNTYsIDB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4MmFkMywgMHgwODBjLAorCTB4MmFmNiwgMHgwODBjLCAweDJiMjksIDB4NjA1MCwgMHhjMGU1LCAweDYwNTIsIDB4MjBhOSwgMHgwMzY3LAorCTB4MGYwNCwgMHgyNWJhLCAweDFkMDQsIDB4MjVhMiwgMHgwODBjLCAweDhhN2YsIDB4NjAyMCwgMHhkMDljLAorCTB4MWRiOCwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgwODBjLCAweDJhMGMsIDB4MDBmZSwgMHgxZDgwLAorCTB4NjA1MCwgMHhjMGU0LCAweDYwNTIsIDB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4MmFkMywgMHgwMTVlLAorCTB4MDAxZSwgMHgwNGE4LCAweDAxNWUsIDB4MDAxZSwgMHgwMDE2LCAweDYwMjgsIDB4YzA5YywgMHg2MDJhLAorCTB4MDgwYywgMHhhY2ZjLCAweDA4MGMsIDB4YWZkMiwgMHgwODBjLCAweGIwOWIsIDB4MDgwYywgMHhhZDE4LAorCTB4NjBlMywgMHgwMDAwLCAweDA4MGMsIDB4ZWVkOSwgMHgwODBjLCAweGVlZjQsIDB4MDgwYywgMHg1ODQ0LAorCTB4ZDBmYywgMHgxMTM4LCAweDA4MGMsIDB4ZDYzZSwgMHgxMTIwLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLAorCTB4NzdlMiwgMHg5MDA2LCAweDA4MGMsIDB4MmE5OSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHgyYTg1LAorCTB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzAwMywgMHgwMDA0LCAweDA4MGMsIDB4MGVkMywgMHgwMGVlLAorCTB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4MmFkMywgMHgwODBjLCAweDBiY2YsIDB4MDAxZSwgMHg5MThjLAorCTB4ZmZkMCwgMHgyMTEwLCAweDA4MGMsIDB4MmFkMywgMHgwMGFlLCAweDAwMDUsIDB4MDAxNiwgMHgyMDAxLAorCTB4MDM4NywgMHgyMDBjLCAweGQxYTQsIDB4MDAxZSwgMHgwOTA0LCAweDIzOTAsIDB4MDAxNiwgMHgyMDA5LAorCTB4MjYwMiwgMHgwMGMwLCAweDIwMDEsIDB4MDM4NywgMHgyMDAzLCAweDEwMDAsIDB4MDAxZSwgMHgwYzM4LAorCTB4MDAxNiwgMHgyMDAxLCAweDAzODcsIDB4MjAwYywgMHhkMWI0LCAweDAwMWUsIDB4MDkwNCwgMHgyMzkwLAorCTB4MDAxNiwgMHgyMDA5LCAweDI2MTQsIDB4MDAzMCwgMHgyMDAxLCAweDAzODcsIDB4MjAwMywgMHg0MDAwLAorCTB4MDAxZSwgMHgwOGE4LCAweDYwMjgsIDB4YzBiYywgMHg2MDJhLCAweDIwMDEsIDB4MDE1NiwgMHgyMDAzLAorCTB4YmM5MSwgMHg4MDAwLCAweDIwMDMsIDB4ZmZmZiwgMHg2MDQzLCAweDAwMDEsIDB4MDgwYywgMHgyYTdmLAorCTB4MjAxMSwgMHgwMDgwLCAweDA4MGMsIDB4MmFkMywgMHg2MDE3LCAweDAwMDAsIDB4NjA0MywgMHgwMDAwLAorCTB4MDgxNywgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwZTYsIDB4MDBmNiwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MWQwLCAweDcwZDIsIDB4OTExNiwgMHgwOTA0LAorCTB4MjY4NCwgMHg4MWZmLCAweDAxYTAsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmE4NSwgMHgyMDExLAorCTB4ODAxMSwgMHgyMDE5LCAweDAxMGUsIDB4MjMxYywgMHg5MzllLCAweDAwMDcsIDB4MTExOCwgMHgyMDE5LAorCTB4MDAwMSwgMHgwMDEwLCAweDIwMTksIDB4MDAwMCwgMHgwODBjLCAweDRjYTEsIDB4MDQ2OCwgMHgyMDAxLAorCTB4MTlhOSwgMHgyMDBjLCAweDgxZmYsIDB4MTE0MCwgMHgyMDAxLCAweDAxMDksIDB4MjAwNCwgMHhkMGI0LAorCTB4MDExOCwgMHgyMDE5LCAweDAwMDMsIDB4MDAwOCwgMHgyMTE4LCAweDIwMTEsIDB4ODAxMiwgMHgwODBjLAorCTB4NGNhMSwgMHgwODBjLCAweDBlZDMsIDB4MDgwYywgMHg1ODQ0LCAweGQwZmMsIDB4MTFhOCwgMHgwODBjLAorCTB4ZDYzZSwgMHgxMTkwLCAweDAwYzYsIDB4MDgwYywgMHgyNzIwLCAweDA4MGMsIDB4YWNmYywgMHgwODBjLAorCTB4YTRmMSwgMHgwODBjLCAweGFkMTgsIDB4MjA2MSwgMHgwMTAwLCAweDIwMTksIDB4MDAyOCwgMHgyMDA5LAorCTB4MDAwMiwgMHgwODBjLCAweDMyZGEsIDB4MDBjZSwgMHgwMTJlLCAweDAwZmUsIDB4MDBlZSwgMHgwMDNlLAorCTB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgyMDI4LCAweDkxOGMsIDB4MDBmZiwgMHgyMTMwLAorCTB4OTA5NCwgMHhmZjAwLCAweDExZjAsIDB4MjAxMSwgMHgxODM3LCAweDIyMTQsIDB4ZDJhYywgMHgxMWM4LAorCTB4ODFmZiwgMHgwMWU4LCAweDIwMTEsIDB4MTgxZiwgMHgyMjA0LCAweDkxMDYsIDB4MTE5MCwgMHgyMDExLAorCTB4MTgyMCwgMHgyMjE0LCAweDkyOTQsIDB4ZmYwMCwgMHg5NTg0LCAweGZmMDAsIDB4OTIwNiwgMHgxMTQ4LAorCTB4MjAxMSwgMHgxODIwLCAweDIyMTQsIDB4OTI5NCwgMHgwMGZmLCAweDk1ODQsIDB4MDBmZiwgMHg5MjA2LAorCTB4MTEyMCwgMHgyNTAwLCAweDA4MGMsIDB4ODUyMSwgMHgwMDQ4LCAweDk1ODQsIDB4MDBmZiwgMHg5MDgwLAorCTB4MzQ4ZSwgMHgyMDBkLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkwMDYsIDB4MDAwNSwgMHg5MDgwLAorCTB4MzQ4ZSwgMHgyMDBkLCAweDkxOGMsIDB4MDBmZiwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMTQwLAorCTB4MjAwMSwgMHgxODE4LCAweDIwMDMsIDB4MDBlZiwgMHgyMGE5LCAweDAwMTAsIDB4OTAwNiwgMHg2ODUyLAorCTB4Njg1NiwgMHgxZjA0LCAweDI2ZDAsIDB4MDBkZSwgMHgwMDA1LCAweDAwMDYsIDB4MDBkNiwgMHgwMDI2LAorCTB4MjA2OSwgMHgwMTQwLCAweDIwMDEsIDB4MTgxOCwgMHgyMTAyLCAweDgxMTQsIDB4ODIxNCwgMHg4MjE0LAorCTB4ODIxNCwgMHgyMGE5LCAweDAwMTAsIDB4Njg1MywgMHgwMDAwLCAweDkwMDYsIDB4ODJmZiwgMHgxMTI4LAorCTB4OTE4NCwgMHgwMDBmLCAweDkwODAsIDB4ZWYwOCwgMHgyMDA1LCAweDY4NTYsIDB4ODIxMSwgMHgxZjA0LAorCTB4MjZlNSwgMHgwMDJlLCAweDAwZGUsIDB4MDAwZSwgMHgwMDA1LCAweDAwYzYsIDB4MjA2MSwgMHgxODAwLAorCTB4NjAzMCwgMHgwMTEwLCAweGMwOWQsIDB4MDAwOCwgMHhjMDljLCAweDYwMzIsIDB4MDBjZSwgMHgwMDA1LAorCTB4MDE1NiwgMHgwMGQ2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LCAweDIwNjksIDB4MDE0MCwgMHg2OTgwLAorCTB4OTExNiwgMHgwMTgwLCAweDkxMTIsIDB4MTIzMCwgMHg4MjEyLCAweDgyMTAsIDB4MjJhOCwgMHgyMDAxLAorCTB4MDQwMiwgMHgwMDE4LCAweDIyYTgsIDB4MjAwMSwgMHgwNDA0LCAweDY4MGUsIDB4MWYwNCwgMHgyNzE1LAorCTB4NjgwZiwgMHgwMDAwLCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwZGUsIDB4MDE1ZSwgMHgwMDA1LAorCTB4MDgwYywgMHg1ODQwLCAweGQwYzQsIDB4MDE1MCwgMHhkMGE0LCAweDAxNDAsIDB4OTAwNiwgMHgwMDQ2LAorCTB4MjAyMCwgMHgyMDA5LCAweDAwMmUsIDB4MDgwYywgMHhlYThkLCAweDAwNGUsIDB4MDAwNSwgMHgwMGY2LAorCTB4MDAxNiwgMHgwMDI2LCAweDIwNzksIDB4MDE0MCwgMHg3OGM0LCAweGQwZGMsIDB4MDkwNCwgMHgyNzhjLAorCTB4MDgwYywgMHgyOWZjLCAweDA2NjAsIDB4OTA4NCwgMHgwNzAwLCAweDkwOGUsIDB4MDYwMCwgMHgxMTIwLAorCTB4MjAxMSwgMHg0MDAwLCAweDkwMGUsIDB4MDQ1OCwgMHg5MDhlLCAweDA1MDAsIDB4MTEyMCwgMHgyMDExLAorCTB4ODAwMCwgMHg5MDBlLCAweDA0MjAsIDB4OTA4ZSwgMHgwNDAwLCAweDExMjAsIDB4OTAxNiwgMHgyMDA5LAorCTB4MDAwMSwgMHgwMGU4LCAweDkwOGUsIDB4MDMwMCwgMHgxMTIwLCAweDkwMTYsIDB4MjAwOSwgMHgwMDAyLAorCTB4MDBiMCwgMHg5MDhlLCAweDAyMDAsIDB4MTEyMCwgMHg5MDE2LCAweDIwMDksIDB4MDAwNCwgMHgwMDc4LAorCTB4OTA4ZSwgMHgwMTAwLCAweDE1NDgsIDB4OTAxNiwgMHgyMDA5LCAweDAwMDgsIDB4MDA0MCwgMHg5MDg0LAorCTB4MDcwMCwgMHg5MDhlLCAweDAzMDAsIDB4MTUwMCwgMHgyMDExLCAweDAwMzAsIDB4MDA1OCwgMHgyMzAwLAorCTB4OTA4MCwgMHgwMDIwLCAweDIwMTgsIDB4MDgwYywgMHg5NTViLCAweDkyOGMsIDB4ZmYwMCwgMHgwMTEwLAorCTB4MjAxMSwgMHgwMGZmLCAweDIyMDAsIDB4ODAwNywgMHg5MDg1LCAweDAwNGMsIDB4NzhjMiwgMHgyMDA5LAorCTB4MDEzOCwgMHgyMjBhLCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTE4LCAweDIwMDksIDB4MTk2ZCwgMHgyMjBhLAorCTB4MDAyZSwgMHgwMDFlLCAweDAwZmUsIDB4MDAwNSwgMHg3OGMzLCAweDAwMDAsIDB4MGNjOCwgMHgwMTI2LAorCTB4MjA5MSwgMHgyODAwLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDEsIDB4MDE3MCwgMHgyMDBjLAorCTB4ODAwMCwgMHgyMDE0LCAweDkxODQsIDB4MDAwMywgMHgwMTEwLCAweDA4MGMsIDB4MGQ3ZSwgMHgwMDJlLAorCTB4MDAxZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLAorCTB4MDExOCwgMHgyMDA5LCAweDAwMDIsIDB4MDAwNSwgMHgyMDAxLCAweDAxNzEsIDB4MjAwNCwgMHhkMGRjLAorCTB4MDE2OCwgMHgyMDAxLCAweDAxNzAsIDB4MjAwYywgMHg5MThjLCAweDAwZmYsIDB4OTE4ZSwgMHgwMDRjLAorCTB4MTEyOCwgMHgyMDBjLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDAwMDUsIDB4OTAwZSwgMHgyMDAxLAorCTB4MDIyNywgMHgyMDA0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDQsIDB4OTEwOCwgMHgyMDAxLAorCTB4MDIyNiwgMHgyMDA0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDQsIDB4OTEwOCwgMHgwMDA1LAorCTB4MDAxOCwgMHgwMDBjLCAweDAwMTgsIDB4MDAyMCwgMHgxMDAwLCAweDA4MDAsIDB4MTAwMCwgMHgxODAwLAorCTB4MDE1NiwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMGU2LCAweDIwMDEsIDB4MTk5MCwgMHgyMDA0LAorCTB4OTA4YSwgMHgwMDA3LCAweDFhMGMsIDB4MGQ4NSwgMHgwMDMzLCAweDAwZWUsIDB4MDAyZSwgMHgwMDFlLAorCTB4MDAwZSwgMHgwMTVlLCAweDAwMDUsIDB4MjdmMiwgMHgyODEwLCAweDI4MzQsIDB4MjgzNiwgMHgyODVmLAorCTB4Mjg2MSwgMHgyODYzLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2MzEsIDB4MDgwYywgMHgyYTRhLAorCTB4MjAwMSwgMHgxOTkyLCAweDIwMDMsIDB4MDAwMCwgMHg3ODI4LCAweDkwODQsIDB4ZTFkNywgMHg3ODJhLAorCTB4OTAwNiwgMHgyMGE5LCAweDAwMDksIDB4MDgwYywgMHgyYTE4LCAweDIwMDEsIDB4MTk5MCwgMHgyMDAzLAorCTB4MDAwNiwgMHgyMDA5LCAweDAwMWUsIDB4MjAxMSwgMHgyODY0LCAweDA4MGMsIDB4OGE1ZCwgMHgwMDA1LAorCTB4MjAwOSwgMHgxOTk1LCAweDIwMGIsIDB4MDAwMCwgMHgyMDAxLCAweDE5OWEsIDB4MjAwMywgMHgwMDM2LAorCTB4MjAwMSwgMHgxOTk5LCAweDIwMDMsIDB4MDAyYSwgMHgyMDAxLCAweDE5OTIsIDB4MjAwMywgMHgwMDAxLAorCTB4OTAwNiwgMHgwODBjLCAweDI5YWQsIDB4MjAwMSwgMHhmZmZmLCAweDIwYTksIDB4MDAwOSwgMHgwODBjLAorCTB4MmExOCwgMHgyMDAxLCAweDE5OTAsIDB4MjAwMywgMHgwMDA2LCAweDIwMDksIDB4MDAxZSwgMHgyMDExLAorCTB4Mjg2NCwgMHgwODBjLCAweDhhNWQsIDB4MDAwNSwgMHgwODBjLCAweDBkODUsIDB4MjAwMSwgMHgxOTlhLAorCTB4MjAwMywgMHgwMDM2LCAweDIwMDEsIDB4MTk5MiwgMHgyMDAzLCAweDAwMDMsIDB4N2EzOCwgMHg5Mjk0LAorCTB4MDAwNSwgMHg5Mjk2LCAweDAwMDQsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLAorCTB4MDgwYywgMHgyOWFkLCAweDIwMDEsIDB4MTk5NiwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHhmZmZmLAorCTB4MjBhOSwgMHgwMDA5LCAweDA4MGMsIDB4MmExOCwgMHgyMDAxLCAweDE5OTAsIDB4MjAwMywgMHgwMDA2LAorCTB4MjAwOSwgMHgwMDFlLCAweDIwMTEsIDB4Mjg2NCwgMHgwODBjLCAweDhhNWQsIDB4MDAwNSwgMHgwODBjLAorCTB4MGQ4NSwgMHgwODBjLCAweDBkODUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMGU2LAorCTB4MDBmNiwgMHgwMTU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLAorCTB4MTk5MiwgMHgyMDA0LCAweDkwOGEsIDB4MDAwNywgMHgxYTBjLCAweDBkODUsIDB4MDA0MywgMHgwMTJlLAorCTB4MDE1ZSwgMHgwMGZlLCAweDAwZWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgyODg2LAorCTB4MjhhMiwgMHgyOGRlLCAweDI5MGEsIDB4MjkyYSwgMHgyOTM2LCAweDI5MzgsIDB4MDgwYywgMHgyYTBjLAorCTB4MTE5MCwgMHgyMDA5LCAweDE5OTgsIDB4MjEwNCwgMHg3YTM4LCAweDkyOTQsIDB4MDAwNSwgMHg5Mjk2LAorCTB4MDAwNCwgMHgwMTEwLCAweGMwOGQsIDB4MDAwOCwgMHhjMDg1LCAweDIwMGEsIDB4MjAwMSwgMHgxOTkwLAorCTB4MjAwMywgMHgwMDAxLCAweDAwMzAsIDB4MDgwYywgMHgyOTVjLCAweDIwMDEsIDB4ZmZmZiwgMHgwODBjLAorCTB4MjgwMSwgMHgwMDA1LCAweDA4MGMsIDB4MjkzYSwgMHgwNWMwLCAweDIwMDksIDB4MTk5OSwgMHgyMTA0LAorCTB4ODAwMSwgMHgyMDBhLCAweDA4MGMsIDB4MmEwYywgMHgxMTU4LCAweDdhMzgsIDB4OTI5NCwgMHgwMDA1LAorCTB4OTI5NiwgMHgwMDA1LCAweDA1MTgsIDB4MjAwOSwgMHgxOTk4LCAweDIxMDQsIDB4YzA4NSwgMHgyMDBhLAorCTB4MjAwOSwgMHgxOTk1LCAweDIxMDQsIDB4ODAwMCwgMHgyMDBhLCAweDkwODYsIDB4MDAwNSwgMHgwMTE4LAorCTB4MDgwYywgMHgyOTQyLCAweDAwYzAsIDB4MjAwYiwgMHgwMDAwLCAweDdhMzgsIDB4OTI5NCwgMHgwMDA2LAorCTB4OTI5NiwgMHgwMDA0LCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAorCTB4MjljYSwgMHgyMDAxLCAweDE5OTIsIDB4MjAwMywgMHgwMDAyLCAweDAwMjgsIDB4MjAwMSwgMHgxOTkwLAorCTB4MjAwMywgMHgwMDAzLCAweDAwMTAsIDB4MDgwYywgMHgyODIzLCAweDAwMDUsIDB4MDgwYywgMHgyOTNhLAorCTB4MDU0MCwgMHgyMDA5LCAweDE5OTksIDB4MjEwNCwgMHg4MDAxLCAweDIwMGEsIDB4MDgwYywgMHgyYTBjLAorCTB4MTE0OCwgMHgyMDAxLCAweDE5OTAsIDB4MjAwMywgMHgwMDAzLCAweDIwMDEsIDB4MTk5MSwgMHgyMDAzLAorCTB4MDAwMCwgMHgwMGI4LCAweDIwMDksIDB4MTk5OSwgMHgyMTA0LCAweDkwMDUsIDB4MTExOCwgMHgwODBjLAorCTB4Mjk3ZiwgMHgwMDEwLCAweDA4MGMsIDB4Mjk0ZiwgMHgwODBjLCAweDI5NDIsIDB4MjAwOSwgMHgxOTk1LAorCTB4MjAwYiwgMHgwMDAwLCAweDIwMDEsIDB4MTk5MiwgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywgMHgyODIzLAorCTB4MDAwMCwgMHgwMDA1LCAweDA0NzksIDB4MDFlOCwgMHgwODBjLCAweDJhMGMsIDB4MTE5OCwgMHgyMDA5LAorCTB4MTk5NiwgMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwgMHg5MDg2LCAweDAwMDcsIDB4MDEwOCwgMHgwMDc4LAorCTB4MjAwMSwgMHgxOTliLCAweDIwMDMsIDB4MDAwYSwgMHgyMDA5LCAweDE5OTgsIDB4MjEwNCwgMHhjMGZkLAorCTB4MjAwYSwgMHgwMDM4LCAweDAwZjksIDB4MjAwMSwgMHgxOTkyLCAweDIwMDMsIDB4MDAwNCwgMHgwODBjLAorCTB4Mjg0ZSwgMHgwMDA1LCAweDAwNzksIDB4MDE0OCwgMHgwODBjLCAweDJhMGMsIDB4MTExOCwgMHgwODBjLAorCTB4MjgzYSwgMHgwMDE4LCAweDAwNzksIDB4MDgwYywgMHgyODRlLCAweDAwMDUsIDB4MDgwYywgMHgwZDg1LAorCTB4MDgwYywgMHgwZDg1LCAweDIwMDksIDB4MTk5YSwgMHgyMTA0LCAweDgwMDEsIDB4MjAwYSwgMHgwOTBjLAorCTB4Mjk5YiwgMHgwMDA1LCAweDdhMzgsIDB4OTI5NCwgMHgwMDA1LCAweDkyOTYsIDB4MDAwNSwgMHgwMTEwLAorCTB4OTAwNiwgMHgwMDEwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI5Y2EsIDB4MDAwNSwgMHg3YTM4LAorCTB4OTI5NCwgMHgwMDA2LCAweDkyOTYsIDB4MDAwNiwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLAorCTB4MDAwMSwgMHgwODBjLCAweDI5YWQsIDB4MDAwNSwgMHgyMDA5LCAweDE5OTUsIDB4MjEwNCwgMHg4MDAwLAorCTB4MjAwYSwgMHg5MDg2LCAweDAwMDUsIDB4MDEwOCwgMHgwMDY4LCAweDIwMGIsIDB4MDAwMCwgMHg3YTM4LAorCTB4OTI5NCwgMHgwMDA2LCAweDkyOTYsIDB4MDAwNiwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLAorCTB4MDAwMSwgMHgwNGQ5LCAweDdhMzgsIDB4OTI5NCwgMHgwMDA1LCAweDkyOTYsIDB4MDAwNSwgMHgwMTEwLAorCTB4OTAwNiwgMHgwMDEwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI5Y2EsIDB4MDAwNSwgMHgwMDg2LAorCTB4MjAwMSwgMHgxOTk4LCAweDIwMDQsIDB4OTA4NCwgMHg3ZmZmLCAweDA5MGMsIDB4MGQ4NSwgMHgyMDA5LAorCTB4MTk5NywgMHgyMTQ0LCAweDg4NDYsIDB4MjgwYSwgMHg5ODQ0LCAweDBkZDgsIDB4ZDA4YywgMHgxMTIwLAorCTB4ZDA4NCwgMHgxMTIwLCAweDA4MGMsIDB4MGQ4NSwgMHg5MDA2LCAweDAwMTAsIDB4MjAwMSwgMHgwMDAxLAorCTB4MDBhMSwgMHgwMDhlLCAweDAwMDUsIDB4MDAwNiwgMHgwMTU2LCAweDIwMDEsIDB4MTk5MCwgMHgyMGE5LAorCTB4MDAwOSwgMHgyMDAzLCAweDAwMDAsIDB4ODAwMCwgMHgxZjA0LCAweDI5YTEsIDB4MjAwMSwgMHgxOTk3LAorCTB4MjAwMywgMHg4MDAwLCAweDAxNWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLAorCTB4OTA4NSwgMHgwMDAwLCAweDAxNTgsIDB4NzgzOCwgMHg5MDg0LCAweGZmZjksIDB4OTA4NSwgMHgwMDA0LAorCTB4NzgzYSwgMHgyMDA5LCAweDE5OWQsIDB4MjEwYywgMHg3OTVhLCAweDAwNTAsIDB4NzgzOCwgMHg5MDg0LAorCTB4ZmZmYiwgMHg5MDg1LCAweDAwMDYsIDB4NzgzYSwgMHgyMDA5LCAweDE5OWUsIDB4MjEwYywgMHg3OTVhLAorCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDkwODUsIDB4MDAwMCwgMHgwMTU4LAorCTB4NzgzOCwgMHg5MDg0LCAweGZmZmEsIDB4OTA4NSwgMHgwMDA0LCAweDc4M2EsIDB4Nzg1MCwgMHg5MDg0LAorCTB4ZmZmMCwgMHg3ODUyLCAweDAwZjgsIDB4NzgzOCwgMHg5MDg0LCAweGZmZmIsIDB4OTA4NSwgMHgwMDA1LAorCTB4NzgzYSwgMHg3ODUwLCAweDkwODQsIDB4ZmZmMCwgMHgwMDE2LCAweDIwMDksIDB4MDE3ZiwgMHgyMTBjLAorCTB4OTE4ZSwgMHgwMDA1LCAweDAxNDAsIDB4MjAwOSwgMHgwMDAzLCAweDIxMGMsIDB4OTE4YywgMHgwNjAwLAorCTB4OTE4ZSwgMHgwNDAwLCAweDAxMTgsIDB4OTA4NSwgMHgwMDBhLCAweDAwMTAsIDB4OTA4NSwgMHgwMDAwLAorCTB4MDAxZSwgMHg3ODUyLCAweDAwZmUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LAorCTB4OTA4MiwgMHgwMDA3LCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LAorCTB4OTA4MiwgMHgwMDA5LCAweDAwMGUsIDB4MDAwNSwgMHgwMTU2LCAweDIwYTksIDB4MDA2NCwgMHg3ODIwLAorCTB4MDgwYywgMHgyYTdmLCAweGQwOWMsIDB4MTExMCwgMHgxZjA0LCAweDJhMGYsIDB4MDE1ZSwgMHgwMDA1LAorCTB4MDEyNiwgMHgwMDE2LCAweDAwMDYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMGUsIDB4MjAwOCwgMHg5MTg2LAorCTB4MDAwMCwgMHgxMTE4LCAweDc4M2IsIDB4MDAwNywgMHgwMDkwLCAweDkxODYsIDB4MDAwMSwgMHgxMTE4LAorCTB4NzgzYiwgMHgwMDA2LCAweDAwNjAsIDB4OTE4NiwgMHgwMDAyLCAweDExMTgsIDB4NzgzYiwgMHgwMDA1LAorCTB4MDAzMCwgMHg5MTg2LCAweDAwMDMsIDB4MTExOCwgMHg3ODNiLCAweDAwMDQsIDB4MDAwMCwgMHgwMDA2LAorCTB4MWQwNCwgMHgyYTM4LCAweDA4MGMsIDB4OGE3ZiwgMHgxZjA0LCAweDJhMzgsIDB4MDgwYywgMHgyYWY2LAorCTB4MDgwYywgMHgyYjI5LCAweDc4NTAsIDB4OTA4NSwgMHgxMDAwLCAweDc4NTIsIDB4MDAwZSwgMHgwMDFlLAorCTB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4MmIyOSwgMHgwMDA1LCAweDAwMDYsIDB4MDE1NiwgMHgwMGY2LAorCTB4MjA3OSwgMHgwMTAwLCAweDIwYTksIDB4MDAwYSwgMHg3ODU0LCAweGQwYWMsIDB4MTEwMCwgMHg3ODU0LAorCTB4ZDA4YywgMHgxMTEwLCAweDFmMDQsIDB4MmE1NywgMHgwMGZlLCAweDAxNWUsIDB4MDAwZSwgMHgwMDA1LAorCTB4MWQwNCwgMHgyYTYwLCAweDA4MGMsIDB4OGE3ZiwgMHgxZjA0LCAweDJhNjAsIDB4MDAwNSwgMHgwMDA2LAorCTB4MjAwMSwgMHgxOTljLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LAorCTB4MjAwMSwgMHgxOTljLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAxLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LAorCTB4MjAwMSwgMHgxOTljLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDAwMGUsIDB4MDAwNSwgMHhhMDAxLAorCTB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxOWE5LAorCTB4MjEwMiwgMHgwMDBlLCAweDAwMDUsIDB4MjAwOSwgMHgwMTcxLCAweDIxMDQsIDB4ZDBkYywgMHgwMTQwLAorCTB4MjAwOSwgMHgwMTcwLCAweDIxMDQsIDB4MjAwYiwgMHgwMDgwLCAweGEwMDEsIDB4YTAwMSwgMHgyMDBhLAorCTB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg3N2I4LCAweDAxMDgsIDB4YzBiYywgMHgyMDA5LAorCTB4MDE0MCwgMHgyMTE0LCAweDkyOTQsIDB4MDAwMSwgMHg5MjE1LCAweDIyMGEsIDB4MDAyZSwgMHgwMDFlLAorCTB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MjAwOSwgMHgwMTQwLCAweDIxMTQsIDB4OTI5NCwgMHgwMDAxLAorCTB4OTI4NSwgMHgxMDAwLCAweDIwMGEsIDB4MjIwYSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LAorCTB4MDAyNiwgMHgyMDA5LCAweDAxNDAsIDB4MjExNCwgMHg5Mjk0LCAweDAwMDEsIDB4OTIxNSwgMHgyMjBhLAorCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDIwMDksIDB4MDE0MCwgMHgyMTA0LAorCTB4MTEyOCwgMHgwODBjLCAweDc3YjgsIDB4MDExMCwgMHhjMGJjLCAweDAwMDgsIDB4YzBiZCwgMHgyMDBhLAorCTB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAzODAsIDB4Nzg0MywgMHgwMTAxLAorCTB4Nzg0NCwgMHhkMDg0LCAweDFkZTgsIDB4MjAwMSwgMHgwMTA5LCAweDIyMDIsIDB4Nzg0MywgMHgwMTAwLAorCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMzgwLCAweDc4NDMsIDB4MDIwMiwgMHg3ODQ0LAorCTB4ZDA4YywgMHgxZGU4LCAweDIwNzksIDB4MDEwMCwgMHg3ODE0LCAweDkxMDQsIDB4OTIwNSwgMHg3YTE2LAorCTB4MjA3OSwgMHgwMzgwLCAweDc4NDMsIDB4MDIwMCwgMHgwMGZlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LAorCTB4MDAzNiwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg2MDUwLCAweDkwODQsIDB4ZmJmZiwgMHg5MDg1LAorCTB4MDA0MCwgMHg2MDUyLCAweDIwYTksIDB4MDAwMiwgMHgwODBjLCAweDJhNjAsIDB4NjA1MCwgMHg5MDg1LAorCTB4MDQwMCwgMHg5MDg0LCAweGZmOWYsIDB4NjA1MiwgMHgyMGE5LCAweDAwMDUsIDB4MDgwYywgMHgyYTYwLAorCTB4NjA1NCwgMHhkMGJjLCAweDA5MGMsIDB4MGQ4NSwgMHgyMGE5LCAweDAwMDUsIDB4MDgwYywgMHgyYTYwLAorCTB4NjA1NCwgMHhkMGFjLCAweDA5MGMsIDB4MGQ4NSwgMHgyMDA5LCAweDE5YjAsIDB4OTA4NCwgMHg3ZTAwLAorCTB4ODAwNywgMHg4MDA0LCAweDgwMDQsIDB4MjAwYSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLAorCTB4MDAwNSwgMHgwMDA2LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYwNTAsIDB4YzBjZCwgMHg2MDUyLAorCTB4MDBjZSwgMHgwMDBlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAwZDYsIDB4MDAwNiwgMHgyMDYxLAorCTB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4NjAzMCwgMHgwMDA2LCAweDYwNDgsIDB4MDAwNiwgMHg2MGU0LAorCTB4MDAwNiwgMHg2MGU4LCAweDAwMDYsIDB4NjA1MCwgMHgwMDA2LCAweDYwZWMsIDB4MDAwNiwgMHg2MDBjLAorCTB4MDAwNiwgMHg2MDA0LCAweDAwMDYsIDB4YzBmYywgMHg2MDA2LCAweDIwMDksIDB4MDgwMCwgMHgyMDAxLAorCTB4MDMzOCwgMHgyMDAzLCAweDAzMDEsIDB4ODEwOSwgMHgwOTBjLCAweDBkODUsIDB4MjAwMSwgMHgwMzM4LAorCTB4MjAwNCwgMHhkMDg0LCAweDFkYzAsIDB4NjAyOCwgMHgwMDA2LCAweDYwZTAsIDB4MDAwNiwgMHg2ODg4LAorCTB4MDAwNiwgMHg2ODhjLCAweDAwMDYsIDB4Njg5MCwgMHgwMDA2LCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTEwLAorCTB4Njg4NCwgMHgwMDA2LCAweDYwMmYsIDB4MDEwMCwgMHg2MDJmLCAweDAwMDAsIDB4YTAwMSwgMHhhMDAxLAorCTB4YTAwMSwgMHhhMDAxLCAweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDgwYywgMHg3NzllLAorCTB4MTEyMCwgMHg2ODAzLCAweDAwODAsIDB4MDAwZSwgMHg2ODg2LCAweDY4OTcsIDB4NDE5OCwgMHgwMDBlLAorCTB4Njg5MiwgMHgwMDBlLCAweDY4OGUsIDB4MDAwZSwgMHg2ODhhLCAweDAwMGUsIDB4NjBlMiwgMHgwMDBlLAorCTB4NjAyYSwgMHgwMDBlLCAweDYwMDYsIDB4MDAwZSwgMHg2MDBlLCAweDAwMGUsIDB4NjBlZSwgMHgwMDBlLAorCTB4NjA1MiwgMHgwMDBlLCAweDYwZWEsIDB4MDAwZSwgMHg2MGU2LCAweDAwMGUsIDB4NjA0YSwgMHgwMDBlLAorCTB4NjAzMiwgMHg2MDM2LCAweDIwMDgsIDB4MDgwYywgMHgyNmQ1LCAweDAwMGUsIDB4MDBkZSwgMHgwMGNlLAorCTB4MDAxZSwgMHgwMDA1LCAweDAwMDYsIDB4MDE1NiwgMHg2MDUwLCAweDkwODUsIDB4MDA0MCwgMHg2MDUyLAorCTB4NjA1MCwgMHg5MDg0LCAweGZiY2YsIDB4NjA1MiwgMHgwODBjLCAweDJhN2YsIDB4OTA4NSwgMHgyMDAwLAorCTB4NjA1MiwgMHgyMGE5LCAweDAwMTIsIDB4MWQwNCwgMHgyYmIzLCAweDA4MGMsIDB4OGE3ZiwgMHgxZjA0LAorCTB4MmJiMywgMHg2MDUwLCAweDkwODUsIDB4MDQwMCwgMHg5MDg0LCAweGRmYmYsIDB4NjA1MiwgMHgwMTVlLAorCTB4MDAwZSwgMHgwMDA1LCAweDMwYmUsIDB4MzBiZSwgMHgyY2MyLCAweDJjYzIsIDB4MmNjZSwgMHgyY2NlLAorCTB4MmNkYSwgMHgyY2RhLCAweDJjZTgsIDB4MmNlOCwgMHgyY2Y0LCAweDJjZjQsIDB4MmQwMiwgMHgyZDAyLAorCTB4MmQxMCwgMHgyZDEwLCAweDJkMjIsIDB4MmQyMiwgMHgyZDJlLCAweDJkMmUsIDB4MmQzYywgMHgyZDNjLAorCTB4MmQ1YSwgMHgyZDVhLCAweDJkN2EsIDB4MmQ3YSwgMHgyZDRhLCAweDJkNGEsIDB4MmQ2YSwgMHgyZDZhLAorCTB4MmQ4OCwgMHgyZDg4LCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkOWEsIDB4MmQ5YSwgMHgyZGE2LCAweDJkYTYsIDB4MmRiNCwgMHgyZGI0LAorCTB4MmRjMiwgMHgyZGMyLCAweDJkZDIsIDB4MmRkMiwgMHgyZGUwLCAweDJkZTAsIDB4MmRmMCwgMHgyZGYwLAorCTB4MmUwMCwgMHgyZTAwLCAweDJlMTIsIDB4MmUxMiwgMHgyZTIwLCAweDJlMjAsIDB4MmUzMCwgMHgyZTMwLAorCTB4MmU1MiwgMHgyZTUyLCAweDJlNzYsIDB4MmU3NiwgMHgyZTQwLCAweDJlNDAsIDB4MmU2NCwgMHgyZTY0LAorCTB4MmU4NiwgMHgyZTg2LCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJlOWEsIDB4MmU5YSwgMHgyZWE2LCAweDJlYTYsIDB4MmViNCwgMHgyZWI0LAorCTB4MmVjMiwgMHgyZWMyLCAweDJlZDIsIDB4MmVkMiwgMHgyZWUwLCAweDJlZTAsIDB4MmVmMCwgMHgyZWYwLAorCTB4MmYwMCwgMHgyZjAwLCAweDJmMTIsIDB4MmYxMiwgMHgyZjIwLCAweDJmMjAsIDB4MmYzMCwgMHgyZjMwLAorCTB4MmY0MCwgMHgyZjQwLCAweDJmNTIsIDB4MmY1MiwgMHgyZjYyLCAweDJmNjIsIDB4MmY3NCwgMHgyZjc0LAorCTB4MmY4NiwgMHgyZjg2LCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJmOWEsIDB4MmY5YSwgMHgyZmE4LCAweDJmYTgsIDB4MmZiOCwgMHgyZmI4LAorCTB4MmZjOCwgMHgyZmM4LCAweDJmZGEsIDB4MmZkYSwgMHgyZmVhLCAweDJmZWEsIDB4MmZmYywgMHgyZmZjLAorCTB4MzAwZSwgMHgzMDBlLCAweDMwMjIsIDB4MzAyMiwgMHgzMDMyLCAweDMwMzIsIDB4MzA0NCwgMHgzMDQ0LAorCTB4MzA1NiwgMHgzMDU2LCAweDMwNmEsIDB4MzA2YSwgMHgzMDdiLCAweDMwN2IsIDB4MzA4ZSwgMHgzMDhlLAorCTB4MzBhMSwgMHgzMGExLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLCAweDJkMjAsIDB4MmQyMCwgMHgyZDIwLAorCTB4MmQyMCwgMHgyZDIwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjJjOCwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMGVhLAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweDIyYzgsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyMTE0LCAweDA4MDQsIDB4MzBiNiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIyYzgsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4YTAwMSwgMHgwY2YwLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MTNkNCwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMmM4LAorCTB4MDgwYywgMHgxM2Q0LCAweDA4MDQsIDB4MzBiNiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIwZWEsIDB4MDgwYywgMHgxM2Q0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweDIyYzgsIDB4MDgwYywgMHgxM2Q0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MTNkNCwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNzhmLAorCTB4MDgwYywgMHgyMmM4LCAweDA4MDQsIDB4MzBiNiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3OGYsIDB4MDgwYywgMHgyMGVhLAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweDIwZWEsIDB4MDgwYywgMHgyMmM4LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweDIyYzgsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweDEzZDQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweDEzZDQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweDIwZWEsIDB4MDgwYywgMHgyMmM4LAorCTB4MDgwYywgMHgxM2Q0LCAweDA4MDQsIDB4MzBiNiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3OGYsIDB4MDgwYywgMHgyMGVhLAorCTB4MDgwYywgMHgxM2Q0LCAweDA4MGMsIDB4MjExNCwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNzhmLAorCTB4MDgwYywgMHgxM2Q0LCAweDA4MGMsIDB4MjExNCwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNzhmLAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4YWQ2MiwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHhhZDYyLAorCTB4MDgwYywgMHgyMmM4LCAweDA4MDQsIDB4MzBiNiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIwZWEsIDB4MDgwYywgMHhhZDYyLAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweGFkNjIsIDB4MDgwYywgMHgyMmM4LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHhhZDYyLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDIxMTQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDIyYzgsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDEzZDQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHhhZDYyLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDEzZDQsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDIyYzgsIDB4MDgwYywgMHgxM2Q0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDIyYzgsIDB4MDgwYywgMHgxM2Q0LAorCTB4MDgwYywgMHgyMTE0LCAweDA4MDQsIDB4MzBiNiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIwZWEsIDB4MDgwYywgMHhhZDYyLAorCTB4MDgwYywgMHgxM2Q0LCAweDA4MGMsIDB4MjExNCwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMGVhLAorCTB4MDgwYywgMHhhZDYyLCAweDA4MGMsIDB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweGFkNjIsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDIyYzgsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweGFkNjIsIDB4MDgwNCwgMHgzMGI2LAorCTB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LAorCTB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4MjBlYSwgMHgwODBjLCAweGFkNjIsIDB4MDgwYywgMHgyMmM4LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweGFkNjIsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweGFkNjIsIDB4MDgwYywgMHgyMmM4LAorCTB4MDgwYywgMHgyMTE0LCAweDA4MDQsIDB4MzBiNiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3OGYsIDB4MDgwYywgMHgyMGVhLAorCTB4MDgwYywgMHhhZDYyLCAweDA4MGMsIDB4MjExNCwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNzhmLAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDIyYzgsIDB4MDgwYywgMHgyMTE0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweGFkNjIsIDB4MDgwYywgMHgxM2Q0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweGFkNjIsIDB4MDgwYywgMHgyMmM4LAorCTB4MDgwYywgMHgxM2Q0LCAweDA4MDQsIDB4MzBiNiwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3OGYsIDB4MDgwYywgMHgyMGVhLAorCTB4MDgwYywgMHhhZDYyLCAweDA4MGMsIDB4MTNkNCwgMHgwODA0LCAweDMwYjYsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNzhmLAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLCAweDIyYzgsIDB4MDgwYywgMHgxM2Q0LAorCTB4MDgwNCwgMHgzMGI2LCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LAorCTB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc4ZiwgMHgwODBjLCAweGFkNjIsIDB4MDgwYywgMHgxM2Q0LAorCTB4MDgwYywgMHgyMTE0LCAweDA0ZDgsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LAorCTB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNzhmLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLAorCTB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LCAweDA0NDAsIDB4MDEwNiwgMHgwMDA2LAorCTB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNzhmLAorCTB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4MTNkNCwgMHgwODBjLCAweGFkNjIsIDB4MDgwYywgMHgyMTE0LAorCTB4MDBhOCwgMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LAorCTB4MDE1NiwgMHgwODBjLCAweDI3OGYsIDB4MDgwYywgMHgyMGVhLCAweDA4MGMsIDB4YWQ2MiwgMHgwODBjLAorCTB4MjJjOCwgMHgwODBjLCAweDEzZDQsIDB4MDgwYywgMHgyMTE0LCAweDAwMDAsIDB4MDE1ZSwgMHgwMTRlLAorCTB4MDEzZSwgMHgwMWRlLCAweDAxY2UsIDB4MDEyZSwgMHgwMDBlLCAweDAxMGUsIDB4MDAwZCwgMHgwMGI2LAorCTB4MDBjNiwgMHgwMDI2LCAweDAwNDYsIDB4OTAyNiwgMHgwODBjLCAweDZiY2YsIDB4MTkwNCwgMHgzMWY2LAorCTB4NzJkYywgMHgyMDAxLCAweDE5N2MsIDB4MjAwNCwgMHg5MDA1LCAweDExMTAsIDB4ZDI5YywgMHgwMTQ4LAorCTB4ZDI4NCwgMHgxMTM4LCAweGQyYmMsIDB4MTkwNCwgMHgzMWY2LCAweDA4MGMsIDB4MzFmYiwgMHgwODA0LAorCTB4MzFmNiwgMHhkMmNjLCAweDE5MDQsIDB4MzFmNiwgMHgwODBjLCAweDc3OWUsIDB4MTEyMCwgMHg3MGFmLAorCTB4ZmZmZiwgMHgwODA0LCAweDMxZjYsIDB4ZDI5NCwgMHgwMTIwLCAweDcwYWYsIDB4ZmZmZiwgMHgwODA0LAorCTB4MzFmNiwgMHgwODBjLCAweDM0N2QsIDB4MDE2MCwgMHgwODBjLCAweGQ2NDUsIDB4MDEyOCwgMHgyMDAxLAorCTB4MTgxOCwgMHgyMDNjLCAweDA4MDQsIDB4MzE2ZiwgMHg3MGFmLCAweGZmZmYsIDB4MDgwNCwgMHgzMWY2LAorCTB4MjAwMSwgMHgxODE4LCAweDIwM2MsIDB4NzI5NCwgMHhkMjg0LCAweDA5MDQsIDB4MzE2ZiwgMHhkMjhjLAorCTB4MTkwNCwgMHgzMTZmLCAweDAwMzYsIDB4NzNhYywgMHg5MzhlLCAweGZmZmYsIDB4MTExMCwgMHgyMDE5LAorCTB4MDAwMSwgMHg4MzE0LCAweDkyZTAsIDB4MWQ4MCwgMHgyYzA0LCAweDkzOGMsIDB4MDAwMSwgMHgwMTIwLAorCTB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDAxMCwgMHg5MDg0LCAweDAwZmYsIDB4OTcwZSwgMHgwOTA0LAorCTB4MzE2NSwgMHg5MDhlLCAweDAwMDAsIDB4MDkwNCwgMHgzMTY1LCAweDkwOGUsIDB4MDBmZiwgMHgxMTYwLAorCTB4NzIzMCwgMHhkMjg0LCAweDE5MDQsIDB4MzE2YSwgMHg3Mjk0LCAweGMyOGQsIDB4NzI5NiwgMHg3MGFmLAorCTB4ZmZmZiwgMHgwMDNlLCAweDA4MDQsIDB4MzE2ZiwgMHgyMDA5LCAweDE4MGQsIDB4MjEwYywgMHhkMThjLAorCTB4MDE1MCwgMHgwMDI2LCAweDIwMTEsIDB4MDAxMCwgMHgwODBjLCAweDZjMzUsIDB4MDAyZSwgMHgwMTE4LAorCTB4NzBhZiwgMHhmZmZmLCAweDA0ODgsIDB4OTAwZSwgMHgwODBjLCAweDI2OGMsIDB4MDgwYywgMHg2NzQ5LAorCTB4MTUzOCwgMHg5MDA2LCAweGI4YmIsIDB4MDUyMCwgMHhiOGFjLCAweDkwMDUsIDB4MDE0OCwgMHgwMGM2LAorCTB4MjA2MCwgMHgwODBjLCAweDhlZWUsIDB4MDBjZSwgMHgwOTBjLCAweDkyOGQsIDB4YjhhZiwgMHgwMDAwLAorCTB4MDgwYywgMHg2YzExLCAweDExNjgsIDB4NzAzMCwgMHhkMDhjLCAweDAxMzAsIDB4YjgwMCwgMHhkMGJjLAorCTB4MDEzOCwgMHgwODBjLCAweDZhYWUsIDB4MDEyMCwgMHgwODBjLCAweDMyMTQsIDB4MDE0OCwgMHgwMDI4LAorCTB4MDgwYywgMHgzMzYwLCAweDA4MGMsIDB4MzI0MCwgMHgwMTE4LCAweDgzMTgsIDB4MDgwNCwgMHgzMTA5LAorCTB4NzNhZSwgMHgwMDEwLCAweDcwYWYsIDB4ZmZmZiwgMHgwMDNlLCAweDA4MDQsIDB4MzFmNiwgMHg5NzgwLAorCTB4MzQ4ZSwgMHgyMDNkLCAweDk3YmMsIDB4ZmYwMCwgMHg4NzNmLCAweDIwNDEsIDB4MDA3ZSwgMHg3MGFjLAorCTB4OTA5NiwgMHhmZmZmLCAweDExMTgsIDB4OTAwZSwgMHgyOGE4LCAweDAwNTAsIDB4OTgxMiwgMHgwMjIwLAorCTB4MjAwOCwgMHg5ODAyLCAweDIwYTgsIDB4MDAyMCwgMHg3MGFmLCAweGZmZmYsIDB4MDgwNCwgMHgzMWY2LAorCTB4MjcwMCwgMHgwMTU2LCAweDAwMTYsIDB4OTEwNiwgMHgwOTA0LCAweDMxZWIsIDB4MjAwMSwgMHgxODBkLAorCTB4MjAwNCwgMHhkMDhjLCAweDAxNTgsIDB4MDAyNiwgMHgyMDExLCAweDAwMTAsIDB4MDgwYywgMHg2YzM1LAorCTB4MDAyZSwgMHgwMTIwLCAweDIwMDksIDB4ZmZmZiwgMHgwODA0LCAweDMxZjMsIDB4YzQ4NCwgMHgwODBjLAorCTB4NjdiNCwgMHgwMTY4LCAweDA4MGMsIDB4ZDY0NSwgMHgxOTA0LCAweDMxZWIsIDB4MDgwYywgMHgzNDdkLAorCTB4MTkwNCwgMHgzMWViLCAweDA4MGMsIDB4Njc0OSwgMHgxOTA0LCAweDMxZjMsIDB4MDAwOCwgMHhjNDg1LAogCTB4YjhiYiwgMHgwNTIwLCAweGI4YWMsIDB4OTAwNSwgMHgwMTQ4LCAweDAwYzYsIDB4MjA2MCwgMHgwODBjLAotCTB4OGQ4NywgMHgwMGNlLCAweDA5MGMsIDB4OTEyOCwgMHhiOGFmLCAweDAwMDAsIDB4MDgwYywgMHg2YmNkLAotCTB4MTE2OCwgMHg3MDMwLCAweGQwOGMsIDB4MDEzMCwgMHhiODAwLCAweGQwYmMsIDB4MDEzOCwgMHgwODBjLAotCTB4NmE3NCwgMHgwMTIwLCAweDA4MGMsIDB4MzFmYSwgMHgwMTQ4LCAweDAwMjgsIDB4MDgwYywgMHgzMzQ2LAotCTB4MDgwYywgMHgzMjI2LCAweDAxMTgsIDB4ODMxOCwgMHgwODA0LCAweDMxMTIsIDB4NzNhZSwgMHgwMDEwLAotCTB4NzBhZiwgMHhmZmZmLCAweDAwM2UsIDB4MDgwNCwgMHgzMWRjLCAweDk3ODAsIDB4MzQ3NCwgMHgyMDNkLAotCTB4OTdiYywgMHhmZjAwLCAweDg3M2YsIDB4MjA0MSwgMHgwMDdlLCAweDcwYWMsIDB4OTA5NiwgMHhmZmZmLAotCTB4MTExOCwgMHg5MDBlLCAweDI4YTgsIDB4MDA1MCwgMHg5ODEyLCAweDAyMjAsIDB4MjAwOCwgMHg5ODAyLAotCTB4MjBhOCwgMHgwMDIwLCAweDcwYWYsIDB4ZmZmZiwgMHgwODA0LCAweDMxZGMsIDB4MjcwMCwgMHgwMTU2LAotCTB4MDAxNiwgMHg5MTA2LCAweDA5MDQsIDB4MzFkMSwgMHhjNDg0LCAweDA4MGMsIDB4Njc4MywgMHgwMTY4LAotCTB4MDgwYywgMHhkMzVkLCAweDE5MDQsIDB4MzFkMSwgMHgwODBjLCAweDM0NjMsIDB4MTkwNCwgMHgzMWQxLAotCTB4MDgwYywgMHg2NzE4LCAweDE5MDQsIDB4MzFkOSwgMHgwMDA4LCAweGM0ODUsIDB4YjhiYiwgMHgwNTIwLAotCTB4YjhhYywgMHg5MDA1LCAweDAxNDgsIDB4MDBjNiwgMHgyMDYwLCAweDA4MGMsIDB4OGQ4NywgMHgwMGNlLAotCTB4MDkwYywgMHg5MTI4LCAweGI4YWYsIDB4MDAwMCwgMHgwODBjLCAweDZiY2QsIDB4MTEzMCwgMHg3MDMwLAotCTB4ZDA4YywgMHgwMWY4LCAweGI4MDAsIDB4ZDBiYywgMHgxMWUwLCAweDcyOTQsIDB4ZDI4YywgMHgwMTgwLAotCTB4MDgwYywgMHg2YmNkLCAweDkwODIsIDB4MDAwNiwgMHgwMmUwLCAweGQ0ODQsIDB4MTExOCwgMHgwODBjLAotCTB4NjczZCwgMHgwMDI4LCAweDA4MGMsIDB4MzNkOSwgMHgwMWEwLCAweDA4MGMsIDB4MzQwNCwgMHgwMDg4LAotCTB4MDgwYywgMHgzMzQ2LCAweDA4MGMsIDB4ZDM1ZCwgMHgxMTYwLCAweDA4MGMsIDB4MzIyNiwgMHgwMTg4LAotCTB4MDA0MCwgMHgwODBjLCAweGQzNWQsIDB4MTExOCwgMHgwODBjLCAweDMzZDksIDB4MDExMCwgMHgwNDUxLAotCTB4MDE0MCwgMHgwMDFlLCAweDgxMDgsIDB4MDE1ZSwgMHgxZjA0LCAweDMxN2UsIDB4NzBhZiwgMHhmZmZmLAotCTB4MDAxOCwgMHgwMDFlLCAweDAxNWUsIDB4NzFhZSwgMHgwMDRlLCAweDAwMmUsIDB4MDBjZSwgMHgwMGJlLAotCTB4MDAwNSwgMHgwMGM2LCAweDAwMTYsIDB4NzBhZiwgMHgwMDAxLCAweDIwMDksIDB4MDA3ZSwgMHgwODBjLAotCTB4NjcxOCwgMHgxMTY4LCAweGI4MTMsIDB4MDBmZiwgMHhiODE3LCAweGZmZmUsIDB4MDgwYywgMHgzMzQ2LAotCTB4MDRhOSwgMHgwMTI4LCAweDcwZGMsIDB4YzBiZCwgMHg3MGRlLCAweDA4MGMsIDB4ZDBhMSwgMHgwMDFlLAotCTB4MDBjZSwgMHgwMDA1LCAweDAwMTYsIDB4MDA3NiwgMHgwMGQ2LCAweDAwYzYsIDB4MjAwMSwgMHgxODRjLAotCTB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg0MiwgMHgwODBjLCAweGFmYmYsIDB4MDFkMCwgMHgyYjAwLAotCTB4NjAxMiwgMHgwODBjLCAweGQwY2UsIDB4NjAyMywgMHgwMDAxLCAweDkwMDYsIDB4MDgwYywgMHg2NmI1LAotCTB4MjAwMSwgMHgwMDAwLCAweDA4MGMsIDB4NjZjOSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MGE4LAotCTB4ODAwMCwgMHg3MGFhLCAweDAxMmUsIDB4MjAwOSwgMHgwMDA0LCAweDA4MGMsIDB4YWZlYywgMHg5MDg1LAotCTB4MDAwMSwgMHgwMGNlLCAweDAwZGUsIDB4MDA3ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDc2LAotCTB4MDBkNiwgMHgwMGM2LCAweDIwMDEsIDB4MTg0YywgMHgyMDA0LCAweDkwODQsIDB4MDBmZiwgMHhiODQyLAotCTB4MDgwYywgMHhhZmJmLCAweDA1NDgsIDB4MmIwMCwgMHg2MDEyLCAweGI4MDAsIDB4YzBjNCwgMHhiODAyLAotCTB4YjhhMCwgMHg5MDg2LCAweDAwN2UsIDB4MDE0MCwgMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LAotCTB4MDAwNiwgMHgxMTEwLCAweDA4MGMsIDB4MzJmYiwgMHgwODBjLCAweGQwY2UsIDB4NjAyMywgMHgwMDAxLAotCTB4OTAwNiwgMHgwODBjLCAweDY2YjUsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjZjOSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDcwYTgsIDB4ODAwMCwgMHg3MGFhLCAweDAxMmUsIDB4MjAwOSwgMHgwMDAyLAotCTB4MDgwYywgMHhhZmVjLCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAwZGUsIDB4MDA3ZSwgMHgwMDFlLAotCTB4MDAwNSwgMHgwMGI2LCAweDAwYzYsIDB4MDAyNiwgMHgyMDA5LCAweDAwODAsIDB4MDgwYywgMHg2NzE4LAotCTB4MTE0MCwgMHhiODEzLCAweDAwZmYsIDB4YjgxNywgMHhmZmZjLCAweDAwMzksIDB4MDExMCwgMHg3MGUzLAotCTB4ZmZmZiwgMHgwMDJlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweDAwMTYsIDB4MDA3NiwgMHgwMGQ2LAotCTB4MDBjNiwgMHgwODBjLCAweGFlZjgsIDB4MDFkMCwgMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhkMGNlLAotCTB4NjAyMywgMHgwMDAxLCAweDkwMDYsIDB4MDgwYywgMHg2NmI1LCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLAotCTB4NjZjOSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MGU0LCAweDgwMDAsIDB4NzBlNiwgMHgwMTJlLAotCTB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4YWZlYywgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGRlLAotCTB4MDA3ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjAwOSwgMHgwMDdmLCAweDA4MGMsIDB4NjcxOCwgMHgxMWI4LCAweGI4MTMsIDB4MDBmZiwgMHhiODE3LAotCTB4ZmZmZCwgMHhiOGQ3LCAweDAwMDQsIDB4MDgwYywgMHhhZWY4LCAweDAxNzAsIDB4MmIwMCwgMHg2MDEyLAotCTB4NjMxNiwgMHg2MDIzLCAweDAwMDEsIDB4NjIwYSwgMHgwODBjLCAweGQwY2UsIDB4MjAwOSwgMHgwMDIyLAotCTB4MDgwYywgMHhhZmVjLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAzNiwgMHgwMDI2LCAweDAwYjYsIDB4MjFmMCwgMHgwODBjLAotCTB4YWFmNywgMHgwMTA2LCAweDA4MGMsIDB4OTVjNCwgMHgwODBjLCAweDk1MzAsIDB4MDgwYywgMHhhYTQ4LAotCTB4MDgwYywgMHhiZWFiLCAweDAxMGUsIDB4MDkwYywgMHhhYjEzLCAweDNlMDgsIDB4MjEzMCwgMHg4MWZmLAotCTB4MDEyMCwgMHgyMGE5LCAweDAwN2UsIDB4OTAwZSwgMHgwMDE4LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLAotCTB4MDAxNiwgMHgwODBjLCAweDY3ODMsIDB4MTE0MCwgMHg5Njg2LCAweDAwMDIsIDB4MTExOCwgMHhiODAwLAotCTB4ZDBiYywgMHgxMTEwLCAweDA4MGMsIDB4NjE5MiwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHgzMmUwLAotCTB4OTY4NiwgMHgwMDAxLCAweDE5MGMsIDB4MzQzNywgMHgwMGJlLCAweDAwMmUsIDB4MDAzZSwgMHgwMDZlLAotCTB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwNDYsIDB4MDAzNiwgMHgwMDI2LAotCTB4MDAxNiwgMHgwMGI2LCAweDA4MGMsIDB4YWFmNywgMHgwMTA2LCAweDYyMTAsIDB4MjI1OCwgMHhiYWEwLAotCTB4MDAyNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg5NWI5LCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLAotCTB4MDgwYywgMHg5NDc2LCAweDJjMDgsIDB4MDgwYywgMHhlNDY1LCAweDAwN2UsIDB4MDAxZSwgMHgwMTBlLAotCTB4MDkwYywgMHhhYjEzLCAweGJhMTAsIDB4YmIxNCwgMHhiYzg0LCAweDA4MGMsIDB4NjE5MiwgMHhiYTEyLAotCTB4YmIxNiwgMHhiYzg2LCAweDAwYmUsIDB4MDAxZSwgMHgwMDJlLCAweDAwM2UsIDB4MDA0ZSwgMHgwMGNlLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDAwNiwgMHgwMGI2LCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLAotCTB4MDBiZSwgMHg5MDg2LCAweDAwODAsIDB4MDE1MCwgMHgyMDcxLCAweDE4MDAsIDB4NzBhOCwgMHg5MDA1LAotCTB4MDExMCwgMHg4MDAxLCAweDcwYWEsIDB4MDAwZSwgMHgwMGVlLCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLAotCTB4NzBlNCwgMHg5MDA1LCAweDBkYzAsIDB4ODAwMSwgMHg3MGU2LCAweDBjYTgsIDB4YjgwMCwgMHhjMDhjLAotCTB4YjgwMiwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwYjYsIDB4MDA0NiwgMHgwMDM2LAotCTB4MDAyNiwgMHgwMDE2LCAweDAxNTYsIDB4MjE3OCwgMHgwODBjLCAweGFhZjcsIDB4MDEwNiwgMHg4MWZmLAotCTB4MTExOCwgMHgyMGE5LCAweDAwMDEsIDB4MDA3OCwgMHgwODBjLCAweDU4MjAsIDB4ZDBjNCwgMHgwMTQwLAotCTB4ZDBhNCwgMHgwMTMwLCAweDkwMDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmQsIDB4MDgwYywgMHhlNzk1LAotCTB4MjBhOSwgMHgwODAwLCAweDkwMTYsIDB4MDAyNiwgMHg5MjhlLCAweDAwN2UsIDB4MDkwNCwgMHgzM2I1LAotCTB4OTI4ZSwgMHgwMDdmLCAweDA5MDQsIDB4MzNiNSwgMHg5MjhlLCAweDAwODAsIDB4MDVmMCwgMHg5Mjg4LAotCTB4MTAwMCwgMHgyMTBjLCAweDgxZmYsIDB4MDVjOCwgMHg4ZmZmLCAweDExNTAsIDB4MjAwMSwgMHgxOThmLAotCTB4MDAwNiwgMHgyMDAzLCAweDAwMDEsIDB4MDgwYywgMHgzM2M2LCAweDAwMGUsIDB4MjAwMywgMHgwMDAwLAotCTB4MDBiNiwgMHgwMGM2LCAweDIxNTgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NmI5NywgMHgwMGNlLAotCTB4MDBiZSwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg5NWI5LCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLAotCTB4MDgwYywgMHg5NDc2LCAweDAwYjYsIDB4MDBjNiwgMHgwMDI2LCAweDIxNTgsIDB4YmEwNCwgMHg5Mjk0LAotCTB4MDBmZiwgMHg5Mjg2LCAweDAwMDYsIDB4MTExOCwgMHhiODA3LCAweDA0MDQsIDB4MDAyOCwgMHgyMDAxLAotCTB4MDAwNCwgMHg4MDA3LCAweDkyMTUsIDB4YmEwNiwgMHgwMDJlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDE2LAotCTB4MmMwOCwgMHgwODBjLCAweGU0NjUsIDB4MDAxZSwgMHgwMDdlLCAweDAwMmUsIDB4ODIxMCwgMHgxZjA0LAotCTB4MzM2YiwgMHgwMTBlLCAweDA5MGMsIDB4YWIxMywgMHgwMTVlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLAotCTB4MDA0ZSwgMHgwMGJlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDA0NiwgMHgwMDI2LAotCTB4MDAxNiwgMHgwODBjLCAweDU4MjAsIDB4ZDBjNCwgMHgwMTQwLCAweGQwYTQsIDB4MDEzMCwgMHg5MDA2LAotCTB4MjIyMCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhlNzk1LCAweDAwMWUsIDB4MDAyZSwgMHgwMDRlLAotCTB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDcyOTQsIDB4ODJmZiwgMHgwMWU4LAotCTB4MDgwYywgMHg2YmM1LCAweDExZDAsIDB4MjEwMCwgMHgwODBjLCAweDI2ZDQsIDB4ODFmZiwgMHgwMWI4LAotCTB4MjAxOSwgMHgwMDAxLCAweDgzMTQsIDB4OTJlMCwgMHgxZDgwLCAweDJjMDQsIDB4ZDM4NCwgMHgwMTIwLAotCTB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4MDAxMCwgMHg5MDg0LCAweDAwZmYsIDB4OTExNiwgMHgwMTM4LAotCTB4OTA5NiwgMHgwMGZmLCAweDAxMTAsIDB4ODMxOCwgMHgwYzY4LCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLAotCTB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweGFhZjcsIDB4MDEwNiwgMHgwMDM2LCAweDIwMTksIDB4MDAyOSwgMHgwMGMxLAotCTB4MDAzZSwgMHgwMTBlLCAweDA5MGMsIDB4YWIxMywgMHg5MTgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDY1LAotCTB4MDE1OCwgMHgwMDE2LCAweDAwYzYsIDB4MjA2MSwgMHgxYjNhLCAweDAwMWUsIDB4NjExMiwgMHgwODBjLAotCTB4MzJmYiwgMHgwMDFlLCAweDA4MGMsIDB4NjczZCwgMHgwMTJlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMDI2LCAweDIxMTAsIDB4MDgwYywgMHhhNWRkLCAweDA4MGMsIDB4ZWFmZCwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwY2MsIDB4MDAwNSwgMHgwMGM2LAotCTB4MDBiNiwgMHgwODBjLCAweDc2OWQsIDB4MTExOCwgMHgyMGE5LCAweDA4MDAsIDB4MDAxMCwgMHgyMGE5LAotCTB4MDc4MiwgMHgwODBjLCAweDc2OWQsIDB4MTExMCwgMHg5MDBlLCAweDAwMTAsIDB4MjAwOSwgMHgwMDdlLAotCTB4OTE4MCwgMHgxMDAwLCAweDIwMDQsIDB4OTA1ZCwgMHgwMTMwLCAweDg2ZmYsIDB4MDExMCwgMHhiODAwLAotCTB4ZDBiYywgMHgwOTBjLCAweDY3M2QsIDB4ODEwOCwgMHgxZjA0LCAweDM0NDgsIDB4MjA2MSwgMHgxODAwLAotCTB4NjA3ZiwgMHgwMDAwLCAweDYwODAsIDB4OTA4NCwgMHgwMGZmLCAweDYwODIsIDB4NjBiMywgMHgwMDAwLAotCTB4MDBiZSwgMHgwMGNlLCAweDAwMDUsIDB4MjAwMSwgMHgxODY5LCAweDIwMDQsIDB4ZDBiYywgMHgwMDA1LAotCTB4MjAxMSwgMHgxODQ4LCAweDIyMTQsIDB4ZDJlYywgMHgwMDA1LCAweDAwMjYsIDB4MjAxMSwgMHgxODY3LAotCTB4MjIxNCwgMHhkMmRjLCAweDAwMmUsIDB4MDAwNSwgMHg3ZWVmLCAweDdkZTgsIDB4N2NlNCwgMHg4MGUyLAotCTB4N2JlMSwgMHg4MGUwLCAweDgwZGMsIDB4ODBkYSwgMHg3YWQ5LCAweDgwZDYsIDB4ODBkNSwgMHg4MGQ0LAotCTB4ODBkMywgMHg4MGQyLCAweDgwZDEsIDB4NzljZSwgMHg3OGNkLCAweDgwY2MsIDB4ODBjYiwgMHg4MGNhLAotCTB4ODBjOSwgMHg4MGM3LCAweDgwYzYsIDB4NzdjNSwgMHg3NmMzLCAweDgwYmMsIDB4ODBiYSwgMHg3NWI5LAotCTB4ODBiNiwgMHg3NGI1LCAweDczYjQsIDB4NzJiMywgMHg4MGIyLCAweDgwYjEsIDB4ODBhZSwgMHg3MWFkLAotCTB4ODBhYywgMHg3MGFiLCAweDZmYWEsIDB4NmVhOSwgMHg4MGE3LCAweDZkYTYsIDB4NmNhNSwgMHg2YmEzLAotCTB4NmE5ZiwgMHg2OTllLCAweDY4OWQsIDB4ODA5YiwgMHg4MDk4LCAweDY3OTcsIDB4NjY5MCwgMHg2NThmLAotCTB4NjQ4OCwgMHg2Mzg0LCAweDYyODIsIDB4ODA4MSwgMHg4MDgwLCAweDYxN2MsIDB4NjA3YSwgMHg4MDc5LAotCTB4NWY3NiwgMHg4MDc1LCAweDgwNzQsIDB4ODA3MywgMHg4MDcyLCAweDgwNzEsIDB4ODA2ZSwgMHg1ZTZkLAotCTB4ODA2YywgMHg1ZDZiLCAweDVjNmEsIDB4NWI2OSwgMHg4MDY3LCAweDVhNjYsIDB4NTk2NSwgMHg1ODYzLAotCTB4NTc1YywgMHg1NjVhLCAweDU1NTksIDB4ODA1NiwgMHg4MDU1LCAweDU0NTQsIDB4NTM1MywgMHg1MjUyLAotCTB4NTE1MSwgMHg1MDRlLCAweDRmNGQsIDB4ODA0YywgMHg4MDRiLCAweDRlNGEsIDB4NGQ0OSwgMHg4MDQ3LAotCTB4NGM0NiwgMHg4MDQ1LCAweDgwNDMsIDB4ODAzYywgMHg4MDNhLCAweDgwMzksIDB4ODAzNiwgMHg0YjM1LAotCTB4ODAzNCwgMHg0YTMzLCAweDQ5MzIsIDB4NDgzMSwgMHg4MDJlLCAweDQ3MmQsIDB4NDYyYywgMHg0NTJiLAotCTB4NDQyYSwgMHg0MzI5LCAweDQyMjcsIDB4ODAyNiwgMHg4MDI1LCAweDQxMjMsIDB4NDAxZiwgMHgzZjFlLAotCTB4M2UxZCwgMHgzZDFiLCAweDNjMTgsIDB4ODAxNywgMHg4MDEwLCAweDNiMGYsIDB4M2EwOCwgMHg4MDA0LAotCTB4MzkwMiwgMHg4MDAxLCAweDgwMDAsIDB4ODAwMCwgMHgzODAwLCAweDM3MDAsIDB4MzYwMCwgMHg4MDAwLAotCTB4MzUwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzNDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzMwMCwgMHgzMjAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzEwMCwgMHgzMDAwLCAweDgwMDAsIDB4ODAwMCwgMHgyZjAwLAotCTB4ODAwMCwgMHgyZTAwLCAweDJkMDAsIDB4MmMwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgyYjAwLAotCTB4ODAwMCwgMHgyYTAwLCAweDI5MDAsIDB4MjgwMCwgMHg4MDAwLCAweDI3MDAsIDB4MjYwMCwgMHgyNTAwLAotCTB4MjQwMCwgMHgyMzAwLCAweDIyMDAsIDB4ODAwMCwgMHg4MDAwLCAweDIxMDAsIDB4MjAwMCwgMHgxZjAwLAotCTB4MWUwMCwgMHgxZDAwLCAweDFjMDAsIDB4ODAwMCwgMHg4MDAwLCAweDFiMDAsIDB4MWEwMCwgMHg4MDAwLAotCTB4MTkwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgxODAwLAotCTB4ODAwMCwgMHgxNzAwLCAweDE2MDAsIDB4MTUwMCwgMHg4MDAwLCAweDE0MDAsIDB4MTMwMCwgMHgxMjAwLAotCTB4MTEwMCwgMHgxMDAwLCAweDBmMDAsIDB4ODAwMCwgMHg4MDAwLCAweDBlMDAsIDB4MGQwMCwgMHgwYzAwLAotCTB4MGIwMCwgMHgwYTAwLCAweDA5MDAsIDB4ODAwMCwgMHg4MDAwLCAweDA4MDAsIDB4MDcwMCwgMHg4MDAwLAotCTB4MDYwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwNTAwLCAweDA0MDAsIDB4MDMwMCwgMHg4MDAwLAotCTB4MDIwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwMTAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAorCTB4OGVlZSwgMHgwMGNlLCAweDA5MGMsIDB4OTI4ZCwgMHhiOGFmLCAweDAwMDAsIDB4MDgwYywgMHg2YzExLAorCTB4MTEzMCwgMHg3MDMwLCAweGQwOGMsIDB4MDFmOCwgMHhiODAwLCAweGQwYmMsIDB4MTFlMCwgMHg3Mjk0LAorCTB4ZDI4YywgMHgwMTgwLCAweDA4MGMsIDB4NmMxMSwgMHg5MDgyLCAweDAwMDYsIDB4MDJlMCwgMHhkNDg0LAorCTB4MTExOCwgMHgwODBjLCAweDY3NmUsIDB4MDAyOCwgMHgwODBjLCAweDMzZjMsIDB4MDFhMCwgMHgwODBjLAorCTB4MzQxZSwgMHgwMDg4LCAweDA4MGMsIDB4MzM2MCwgMHgwODBjLCAweGQ2NDUsIDB4MTE2MCwgMHgwODBjLAorCTB4MzI0MCwgMHgwMTg4LCAweDAwNDAsIDB4MDgwYywgMHhkNjQ1LCAweDExMTgsIDB4MDgwYywgMHgzM2YzLAorCTB4MDExMCwgMHgwNDUxLCAweDAxNDAsIDB4MDAxZSwgMHg4MTA4LCAweDAxNWUsIDB4MWYwNCwgMHgzMTg4LAorCTB4NzBhZiwgMHhmZmZmLCAweDAwMTgsIDB4MDAxZSwgMHgwMTVlLCAweDcxYWUsIDB4MDA0ZSwgMHgwMDJlLAorCTB4MDBjZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBjNiwgMHgwMDE2LCAweDcwYWYsIDB4MDAwMSwgMHgyMDA5LAorCTB4MDA3ZSwgMHgwODBjLCAweDY3NDksIDB4MTE2OCwgMHhiODEzLCAweDAwZmYsIDB4YjgxNywgMHhmZmZlLAorCTB4MDgwYywgMHgzMzYwLCAweDA0YTksIDB4MDEyOCwgMHg3MGRjLCAweGMwYmQsIDB4NzBkZSwgMHgwODBjLAorCTB4ZDM4OSwgMHgwMDFlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDE2LCAweDAwNzYsIDB4MDBkNiwgMHgwMGM2LAorCTB4MjAwMSwgMHgxODRjLCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweGI4NDIsIDB4MDgwYywgMHhiMWRkLAorCTB4MDFkMCwgMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhkM2I2LCAweDYwMjMsIDB4MDAwMSwgMHg5MDA2LAorCTB4MDgwYywgMHg2NmU2LCAweDIwMDEsIDB4MDAwMCwgMHgwODBjLCAweDY2ZmEsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg3MGE4LCAweDgwMDAsIDB4NzBhYSwgMHgwMTJlLCAweDIwMDksIDB4MDAwNCwgMHgwODBjLAorCTB4YjIwYSwgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwgMHgwMDA1LAorCTB4MDAxNiwgMHgwMDc2LCAweDAwZDYsIDB4MDBjNiwgMHgyMDAxLCAweDE4NGMsIDB4MjAwNCwgMHg5MDg0LAorCTB4MDBmZiwgMHhiODQyLCAweDA4MGMsIDB4YjFkZCwgMHgwNTQ4LCAweDJiMDAsIDB4NjAxMiwgMHhiODAwLAorCTB4YzBjNCwgMHhiODAyLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDAxNDAsIDB4YjgwNCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MDg2LCAweDAwMDYsIDB4MTExMCwgMHgwODBjLCAweDMzMTUsIDB4MDgwYywgMHhkM2I2LAorCTB4NjAyMywgMHgwMDAxLCAweDkwMDYsIDB4MDgwYywgMHg2NmU2LCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLAorCTB4NjZmYSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MGE4LCAweDgwMDAsIDB4NzBhYSwgMHgwMTJlLAorCTB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4YjIwYSwgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGRlLAorCTB4MDA3ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDAwMjYsIDB4MjAwOSwgMHgwMDgwLAorCTB4MDgwYywgMHg2NzQ5LCAweDExNDAsIDB4YjgxMywgMHgwMGZmLCAweGI4MTcsIDB4ZmZmYywgMHgwMDM5LAorCTB4MDExMCwgMHg3MGUzLCAweGZmZmYsIDB4MDAyZSwgMHgwMGNlLCAweDAwYmUsIDB4MDAwNSwgMHgwMDE2LAorCTB4MDA3NiwgMHgwMGQ2LCAweDAwYzYsIDB4MDgwYywgMHhiMTE2LCAweDAxZDAsIDB4MmIwMCwgMHg2MDEyLAorCTB4MDgwYywgMHhkM2I2LCAweDYwMjMsIDB4MDAwMSwgMHg5MDA2LCAweDA4MGMsIDB4NjZlNiwgMHgyMDAxLAorCTB4MDAwMiwgMHgwODBjLCAweDY2ZmEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzBlNCwgMHg4MDAwLAorCTB4NzBlNiwgMHgwMTJlLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweGIyMGEsIDB4OTA4NSwgMHgwMDAxLAorCTB4MDBjZSwgMHgwMGRlLCAweDAwN2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDY3NDksIDB4MTFiOCwgMHhiODEzLAorCTB4MDBmZiwgMHhiODE3LCAweGZmZmQsIDB4YjhkNywgMHgwMDA0LCAweDA4MGMsIDB4YjExNiwgMHgwMTcwLAorCTB4MmIwMCwgMHg2MDEyLCAweDYzMTYsIDB4NjAyMywgMHgwMDAxLCAweDYyMGEsIDB4MDgwYywgMHhkM2I2LAorCTB4MjAwOSwgMHgwMDIyLCAweDA4MGMsIDB4YjIwYSwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGRlLAorCTB4MDBjZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMzYsIDB4MDAyNiwgMHgwMGI2LAorCTB4MjFmMCwgMHgwODBjLCAweGFjZmMsIDB4MDEwNiwgMHgwODBjLCAweDk3YmIsIDB4MDgwYywgMHg5NzI3LAorCTB4MDgwYywgMHhhYzRkLCAweDA4MGMsIDB4YzE3OSwgMHgwMTBlLCAweDA5MGMsIDB4YWQxOCwgMHgzZTA4LAorCTB4MjEzMCwgMHg4MWZmLCAweDAxMjAsIDB4MjBhOSwgMHgwMDdlLCAweDkwMGUsIDB4MDAxOCwgMHgyMGE5LAorCTB4MDA3ZiwgMHg5MDBlLCAweDAwMTYsIDB4MDgwYywgMHg2N2I0LCAweDExNDAsIDB4OTY4NiwgMHgwMDAyLAorCTB4MTExOCwgMHhiODAwLCAweGQwYmMsIDB4MTExMCwgMHgwODBjLCAweDYxYjcsIDB4MDAxZSwgMHg4MTA4LAorCTB4MWYwNCwgMHgzMmZhLCAweDk2ODYsIDB4MDAwMSwgMHgxOTBjLCAweDM0NTEsIDB4MDBiZSwgMHgwMDJlLAorCTB4MDAzZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwgMHgwMDQ2LAorCTB4MDAzNiwgMHgwMDI2LCAweDAwMTYsIDB4MDBiNiwgMHgwODBjLCAweGFjZmMsIDB4MDEwNiwgMHg2MjEwLAorCTB4MjI1OCwgMHhiYWEwLCAweDAwMjYsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4OTdiMCwgMHgwMDc2LAorCTB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4OTY2ZCwgMHgyYzA4LCAweDA4MGMsIDB4ZTc1ZCwgMHgwMDdlLAorCTB4MDAxZSwgMHgwMTBlLCAweDA5MGMsIDB4YWQxOCwgMHhiYTEwLCAweGJiMTQsIDB4YmM4NCwgMHgwODBjLAorCTB4NjFiNywgMHhiYTEyLCAweGJiMTYsIDB4YmM4NiwgMHgwMGJlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLAorCTB4MDA0ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwMDYsIDB4MDBiNiwgMHg2MDEwLAorCTB4MjA1OCwgMHhiOGEwLCAweDAwYmUsIDB4OTA4NiwgMHgwMDgwLCAweDAxNTAsIDB4MjA3MSwgMHgxODAwLAorCTB4NzBhOCwgMHg5MDA1LCAweDAxMTAsIDB4ODAwMSwgMHg3MGFhLCAweDAwMGUsIDB4MDBlZSwgMHgwMDA1LAorCTB4MjA3MSwgMHgxODAwLCAweDcwZTQsIDB4OTAwNSwgMHgwZGMwLCAweDgwMDEsIDB4NzBlNiwgMHgwY2E4LAorCTB4YjgwMCwgMHhjMDhjLCAweGI4MDIsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgwMGI2LAorCTB4MDA0NiwgMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMTU2LCAweDIxNzgsIDB4MDgwYywgMHhhY2ZjLAorCTB4MDEwNiwgMHg4MWZmLCAweDExMTgsIDB4MjBhOSwgMHgwMDAxLCAweDAwNzgsIDB4MDgwYywgMHg1ODQwLAorCTB4ZDBjNCwgMHgwMTQwLCAweGQwYTQsIDB4MDEzMCwgMHg5MDA2LCAweDIwMjAsIDB4MjAwOSwgMHgwMDJkLAorCTB4MDgwYywgMHhlYThkLCAweDIwYTksIDB4MDgwMCwgMHg5MDE2LCAweDAwMjYsIDB4OTI4ZSwgMHgwMDdlLAorCTB4MDkwNCwgMHgzM2NmLCAweDkyOGUsIDB4MDA3ZiwgMHgwOTA0LCAweDMzY2YsIDB4OTI4ZSwgMHgwMDgwLAorCTB4MDVmMCwgMHg5Mjg4LCAweDEwMDAsIDB4MjEwYywgMHg4MWZmLCAweDA1YzgsIDB4OGZmZiwgMHgxMTUwLAorCTB4MjAwMSwgMHgxOThlLCAweDAwMDYsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsIDB4MzNlMCwgMHgwMDBlLAorCTB4MjAwMywgMHgwMDAwLCAweDAwYjYsIDB4MDBjNiwgMHgyMTU4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAorCTB4NmJkYiwgMHgwMGNlLCAweDAwYmUsIDB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4OTdiMCwgMHgwMDc2LAorCTB4MjAzOSwgMHgwMDAwLCAweDA4MGMsIDB4OTY2ZCwgMHgwMGI2LCAweDAwYzYsIDB4MDAyNiwgMHgyMTU4LAorCTB4YmEwNCwgMHg5Mjk0LCAweDAwZmYsIDB4OTI4NiwgMHgwMDA2LCAweDExMTgsIDB4YjgwNywgMHgwNDA0LAorCTB4MDAyOCwgMHgyMDAxLCAweDAwMDQsIDB4ODAwNywgMHg5MjE1LCAweGJhMDYsIDB4MDAyZSwgMHgwMGNlLAorCTB4MDBiZSwgMHgwMDE2LCAweDJjMDgsIDB4MDgwYywgMHhlNzVkLCAweDAwMWUsIDB4MDA3ZSwgMHgwMDJlLAorCTB4ODIxMCwgMHgxZjA0LCAweDMzODUsIDB4MDEwZSwgMHgwOTBjLCAweGFkMTgsIDB4MDE1ZSwgMHgwMDFlLAorCTB4MDAyZSwgMHgwMDNlLCAweDAwNGUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LAorCTB4MDA0NiwgMHgwMDI2LCAweDAwMTYsIDB4MDgwYywgMHg1ODQwLCAweGQwYzQsIDB4MDE0MCwgMHhkMGE0LAorCTB4MDEzMCwgMHg5MDA2LCAweDIyMjAsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4ZWE4ZCwgMHgwMDFlLAorCTB4MDAyZSwgMHgwMDRlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHg3Mjk0LAorCTB4ODJmZiwgMHgwMWU4LCAweDA4MGMsIDB4NmMwOSwgMHgxMWQwLCAweDIxMDAsIDB4MDgwYywgMHgyNmJmLAorCTB4ODFmZiwgMHgwMWI4LCAweDIwMTksIDB4MDAwMSwgMHg4MzE0LCAweDkyZTAsIDB4MWQ4MCwgMHgyYzA0LAorCTB4ZDM4NCwgMHgwMTIwLCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDAwMTAsIDB4OTA4NCwgMHgwMGZmLAorCTB4OTExNiwgMHgwMTM4LCAweDkwOTYsIDB4MDBmZiwgMHgwMTEwLCAweDgzMTgsIDB4MGM2OCwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhhY2ZjLCAweDAxMDYsIDB4MDAzNiwgMHgyMDE5LAorCTB4MDAyOSwgMHgwMGMxLCAweDAwM2UsIDB4MDEwZSwgMHgwOTBjLCAweGFkMTgsIDB4OTE4MCwgMHgxMDAwLAorCTB4MjAwNCwgMHg5MDY1LCAweDAxNTgsIDB4MDAxNiwgMHgwMGM2LCAweDIwNjEsIDB4MWIzOSwgMHgwMDFlLAorCTB4NjExMiwgMHgwODBjLCAweDMzMTUsIDB4MDAxZSwgMHgwODBjLCAweDY3NmUsIDB4MDEyZSwgMHgwMGNlLAorCTB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgyMTEwLCAweDA4MGMsIDB4YTdlMiwgMHgwODBjLAorCTB4ZWRlZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGNjLAorCTB4MDAwNSwgMHgwMGM2LCAweDAwYjYsIDB4MDgwYywgMHg3NzllLCAweDExMTgsIDB4MjBhOSwgMHgwODAwLAorCTB4MDAxMCwgMHgyMGE5LCAweDA3ODIsIDB4MDgwYywgMHg3NzllLCAweDExMTAsIDB4OTAwZSwgMHgwMDEwLAorCTB4MjAwOSwgMHgwMDdlLCAweDkxODAsIDB4MTAwMCwgMHgyMDA0LCAweDkwNWQsIDB4MDEzMCwgMHg4NmZmLAorCTB4MDExMCwgMHhiODAwLCAweGQwYmMsIDB4MDkwYywgMHg2NzZlLCAweDgxMDgsIDB4MWYwNCwgMHgzNDYyLAorCTB4MjA2MSwgMHgxODAwLCAweDYwN2YsIDB4MDAwMCwgMHg2MDgwLCAweDkwODQsIDB4MDBmZiwgMHg2MDgyLAorCTB4NjBiMywgMHgwMDAwLCAweDAwYmUsIDB4MDBjZSwgMHgwMDA1LCAweDIwMDEsIDB4MTg2OSwgMHgyMDA0LAorCTB4ZDBiYywgMHgwMDA1LCAweDIwMTEsIDB4MTg0OCwgMHgyMjE0LCAweGQyZWMsIDB4MDAwNSwgMHgwMDI2LAorCTB4MjAxMSwgMHgxODY3LCAweDIyMTQsIDB4ZDJkYywgMHgwMDJlLCAweDAwMDUsIDB4N2VlZiwgMHg3ZGU4LAorCTB4N2NlNCwgMHg4MGUyLCAweDdiZTEsIDB4ODBlMCwgMHg4MGRjLCAweDgwZGEsIDB4N2FkOSwgMHg4MGQ2LAorCTB4ODBkNSwgMHg4MGQ0LCAweDgwZDMsIDB4ODBkMiwgMHg4MGQxLCAweDc5Y2UsIDB4NzhjZCwgMHg4MGNjLAorCTB4ODBjYiwgMHg4MGNhLCAweDgwYzksIDB4ODBjNywgMHg4MGM2LCAweDc3YzUsIDB4NzZjMywgMHg4MGJjLAorCTB4ODBiYSwgMHg3NWI5LCAweDgwYjYsIDB4NzRiNSwgMHg3M2I0LCAweDcyYjMsIDB4ODBiMiwgMHg4MGIxLAorCTB4ODBhZSwgMHg3MWFkLCAweDgwYWMsIDB4NzBhYiwgMHg2ZmFhLCAweDZlYTksIDB4ODBhNywgMHg2ZGE2LAorCTB4NmNhNSwgMHg2YmEzLCAweDZhOWYsIDB4Njk5ZSwgMHg2ODlkLCAweDgwOWIsIDB4ODA5OCwgMHg2Nzk3LAorCTB4NjY5MCwgMHg2NThmLCAweDY0ODgsIDB4NjM4NCwgMHg2MjgyLCAweDgwODEsIDB4ODA4MCwgMHg2MTdjLAorCTB4NjA3YSwgMHg4MDc5LCAweDVmNzYsIDB4ODA3NSwgMHg4MDc0LCAweDgwNzMsIDB4ODA3MiwgMHg4MDcxLAorCTB4ODA2ZSwgMHg1ZTZkLCAweDgwNmMsIDB4NWQ2YiwgMHg1YzZhLCAweDViNjksIDB4ODA2NywgMHg1YTY2LAorCTB4NTk2NSwgMHg1ODYzLCAweDU3NWMsIDB4NTY1YSwgMHg1NTU5LCAweDgwNTYsIDB4ODA1NSwgMHg1NDU0LAorCTB4NTM1MywgMHg1MjUyLCAweDUxNTEsIDB4NTA0ZSwgMHg0ZjRkLCAweDgwNGMsIDB4ODA0YiwgMHg0ZTRhLAorCTB4NGQ0OSwgMHg4MDQ3LCAweDRjNDYsIDB4ODA0NSwgMHg4MDQzLCAweDgwM2MsIDB4ODAzYSwgMHg4MDM5LAorCTB4ODAzNiwgMHg0YjM1LCAweDgwMzQsIDB4NGEzMywgMHg0OTMyLCAweDQ4MzEsIDB4ODAyZSwgMHg0NzJkLAorCTB4NDYyYywgMHg0NTJiLCAweDQ0MmEsIDB4NDMyOSwgMHg0MjI3LCAweDgwMjYsIDB4ODAyNSwgMHg0MTIzLAorCTB4NDAxZiwgMHgzZjFlLCAweDNlMWQsIDB4M2QxYiwgMHgzYzE4LCAweDgwMTcsIDB4ODAxMCwgMHgzYjBmLAorCTB4M2EwOCwgMHg4MDA0LCAweDM5MDIsIDB4ODAwMSwgMHg4MDAwLCAweDgwMDAsIDB4MzgwMCwgMHgzNzAwLAorCTB4MzYwMCwgMHg4MDAwLCAweDM1MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MzQwMCwgMHg4MDAwLAorCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDMzMDAsIDB4MzIwMCwgMHg4MDAwLAorCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDMxMDAsIDB4MzAwMCwgMHg4MDAwLAorCTB4ODAwMCwgMHgyZjAwLCAweDgwMDAsIDB4MmUwMCwgMHgyZDAwLCAweDJjMDAsIDB4ODAwMCwgMHg4MDAwLAorCTB4ODAwMCwgMHgyYjAwLCAweDgwMDAsIDB4MmEwMCwgMHgyOTAwLCAweDI4MDAsIDB4ODAwMCwgMHgyNzAwLAorCTB4MjYwMCwgMHgyNTAwLCAweDI0MDAsIDB4MjMwMCwgMHgyMjAwLCAweDgwMDAsIDB4ODAwMCwgMHgyMTAwLAorCTB4MjAwMCwgMHgxZjAwLCAweDFlMDAsIDB4MWQwMCwgMHgxYzAwLCAweDgwMDAsIDB4ODAwMCwgMHgxYjAwLAorCTB4MWEwMCwgMHg4MDAwLCAweDE5MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAorCTB4ODAwMCwgMHgxODAwLCAweDgwMDAsIDB4MTcwMCwgMHgxNjAwLCAweDE1MDAsIDB4ODAwMCwgMHgxNDAwLAorCTB4MTMwMCwgMHgxMjAwLCAweDExMDAsIDB4MTAwMCwgMHgwZjAwLCAweDgwMDAsIDB4ODAwMCwgMHgwZTAwLAorCTB4MGQwMCwgMHgwYzAwLCAweDBiMDAsIDB4MGEwMCwgMHgwOTAwLCAweDgwMDAsIDB4ODAwMCwgMHgwODAwLAorCTB4MDcwMCwgMHg4MDAwLCAweDA2MDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDUwMCwgMHgwNDAwLAorCTB4MDMwMCwgMHg4MDAwLCAweDAyMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MDEwMCwgMHg4MDAwLAorCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDAwMDAsIDB4ODAwMCwgMHg4MDAwLAogCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLAotCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgyMDcxLCAweDE4OWUsIDB4NzAwMywgMHgwMDAyLAotCTB4OTAwNiwgMHg3MDE2LCAweDcwMWEsIDB4NzA0YSwgMHg3MDRlLCAweDcwMGUsIDB4NzA0MiwgMHg3MDQ2LAotCTB4NzAzYiwgMHgxOGJhLCAweDcwM2YsIDB4MThiYSwgMHg3MDA3LCAweDAwMDEsIDB4MDgwYywgMHgxMDY2LAotCTB4MDkwYywgMHgwZDc5LCAweDI5MDAsIDB4NzA2YSwgMHhhODY3LCAweDAwMDIsIDB4YThhYiwgMHhkY2IwLAotCTB4MDgwYywgMHgxMDY2LCAweDA5MGMsIDB4MGQ3OSwgMHgyOTAwLCAweDcwNmUsIDB4YTg2NywgMHgwMDAyLAotCTB4YThhYiwgMHhkY2IwLCAweDAwMDUsIDB4MjA3MSwgMHgxODllLCAweDcwMDQsIDB4MDAwMiwgMHgzNWEzLAotCTB4MzVhNCwgMHgzNWI3LCAweDM1Y2IsIDB4MDAwNSwgMHgxMDA0LCAweDM1YjQsIDB4MGUwNCwgMHgzNWI0LAotCTB4MjA3OSwgMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMGMsIDB4OTAwNSwgMHgxMTI4LAotCTB4NzAwZiwgMHgwMDAxLCAweDAxMmUsIDB4MDQ2OCwgMHgwMDA1LCAweDAxMmUsIDB4MGNlOCwgMHgyMDc5LAotCTB4MDAwMCwgMHgyMDYxLCAweDE4YjgsIDB4MmM0YywgMHhhODZjLCAweDkwOGUsIDB4MDEwMCwgMHgwMTI4LAotCTB4OTA4NiwgMHgwMjAwLCAweDA5MDQsIDB4MzY5ZiwgMHgwMDA1LCAweDcwMTgsIDB4MjA0OCwgMHgyMDYxLAotCTB4MTgwMCwgMHg3MDFjLCAweDA4MDcsIDB4NzAxNCwgMHgyMDQ4LCAweGE4NjQsIDB4OTA5NCwgMHgwMGZmLAotCTB4OTI5NiwgMHgwMDI5LCAweDExMjAsIDB4YWE3OCwgMHhkMmZjLCAweDAxMjgsIDB4MDAwNSwgMHg5MDg2LAotCTB4MDEwMywgMHgwMTA4LCAweDAwMDUsIDB4MjA3OSwgMHgwMDAwLCAweDIwNjEsIDB4MTgwMCwgMHg3MDFjLAotCTB4MDgwNywgMHgyMDYxLCAweDE4MDAsIDB4Nzg4MCwgMHg5MDhhLCAweDAwNDAsIDB4MTIxMCwgMHg2MWQwLAotCTB4MDA0MiwgMHgyMTAwLCAweDkwOGEsIDB4MDAzZiwgMHgxYTA0LCAweDM2OWMsIDB4NjFkMCwgMHgwODA0LAotCTB4MzYzMSwgMHgzNjczLCAweDM2YWIsIDB4MzY5YywgMHgzNmI3LCAweDM2YzEsIDB4MzZjNywgMHgzNmNiLAotCTB4MzZkYiwgMHgzNmRmLCAweDM2ZjUsIDB4MzZmYiwgMHgzNzAxLCAweDM3MGMsIDB4MzcxNywgMHgzNzI2LAotCTB4MzczNSwgMHgzNzQzLCAweDM3NWEsIDB4Mzc3NSwgMHgzNjljLCAweDM4MWUsIDB4Mzg1YywgMHgzOTAxLAotCTB4MzkxMiwgMHgzOTM1LCAweDM2OWMsIDB4MzY5YywgMHgzNjljLCAweDM5NmQsIDB4Mzk4ZCwgMHgzOTk2LAotCTB4MzljMiwgMHgzOWM4LCAweDM2OWMsIDB4M2EwZSwgMHgzNjljLCAweDM2OWMsIDB4MzY5YywgMHgzNjljLAotCTB4MzY5YywgMHgzYTE5LCAweDNhMjIsIDB4M2EyYSwgMHgzYTJjLCAweDM2OWMsIDB4MzY5YywgMHgzNjljLAotCTB4MzY5YywgMHgzNjljLCAweDM2OWMsIDB4M2E1YywgMHgzNjljLCAweDM2OWMsIDB4MzY5YywgMHgzNjljLAotCTB4MzY5YywgMHgzYTc5LCAweDNhZGQsIDB4MzY5YywgMHgzNjljLCAweDM2OWMsIDB4MzY5YywgMHgzNjljLAotCTB4MzY5YywgMHgwMDAyLCAweDNiMDcsIDB4M2IwYSwgMHgzYjY5LCAweDNiODIsIDB4M2JiMiwgMHgzZTU4LAotCTB4MzY5YywgMHg1M2Q1LCAweDM2OWMsIDB4MzY5YywgMHgzNjljLCAweDM2OWMsIDB4MzY5YywgMHgzNjljLAotCTB4MzY5YywgMHgzNjljLCAweDM2ZjUsIDB4MzZmYiwgMHg0MzViLCAweDU4NDQsIDB4NDM3OSwgMHg1NDY0LAotCTB4NTRiNiwgMHg1NWMxLCAweDM2OWMsIDB4NTYyMywgMHg1NjVmLCAweDU2OTAsIDB4NTdhMCwgMHg1NmJkLAotCTB4NTcyMCwgMHgzNjljLCAweDQzN2QsIDB4NDUzNiwgMHg0NTRjLCAweDQ1NzEsIDB4NDVkNiwgMHg0NjRhLAotCTB4NDY2YSwgMHg0NmUxLCAweDQ3M2QsIDB4NDc5OSwgMHg0NzljLCAweDQ3YzEsIDB4NDgzMywgMHg0ODlkLAotCTB4NDhhNSwgMHg0OWRhLCAweDRiNTIsIDB4NGI4NiwgMHg0ZGVhLCAweDM2OWMsIDB4NGUwOCwgMHg0ZWFlLAotCTB4NGY5NywgMHg0ZmYxLCAweDM2OWMsIDB4NTBhOCwgMHgzNjljLCAweDUxMTQsIDB4NTEyZiwgMHg0OGE1LAotCTB4NTM3NSwgMHg3MTRjLCAweDAwMDAsIDB4MjAyMSwgMHg0MDAwLCAweDA4MGMsIDB4NGMwNCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4MzY3ZCwgMHgwMDEwLCAweDAxMmUsIDB4MGNjMCwgMHg3YzM2LAotCTB4OTQ4NiwgMHg0MDAwLCAweDAxMTgsIDB4NzgzMywgMHgwMDExLCAweDAwMTAsIDB4NzgzMywgMHgwMDEwLAotCTB4N2M4MiwgMHg3OTg2LCAweDdhOGEsIDB4N2I4ZSwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LAotCTB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFmNCwgMHg3MDA3LCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLAotCTB4NzAwZiwgMHgwMDAwLCAweDAxMmUsIDB4MDAwNSwgMHgyMDIxLCAweDQwMDEsIDB4MDhiMCwgMHgyMDIxLAotCTB4NDAwMiwgMHgwODk4LCAweDIwMjEsIDB4NDAwMywgMHgwODgwLCAweDIwMjEsIDB4NDAwNSwgMHgwODY4LAotCTB4MjAyMSwgMHg0MDA2LCAweDA4NTAsIDB4MjAzOSwgMHgwMDAxLCAweDkwMmUsIDB4MjUyMCwgMHg3Yjg4LAotCTB4N2E4YywgMHg3ODg0LCAweDc5OTAsIDB4ODFmZiwgMHgwZDk4LCAweDA4MDQsIDB4NGMxMSwgMHgyMDM5LAotCTB4MDAwMSwgMHg5MDJlLCAweDI1MjAsIDB4N2I4OCwgMHg3YThjLCAweDc4ODQsIDB4Nzk5MCwgMHgwODA0LAotCTB4NGMxNCwgMHg3OTg0LCAweDc4ODgsIDB4MjExNCwgMHgyMDBhLCAweDA4MDQsIDB4MzY3MywgMHg3OTg0LAotCTB4MjExNCwgMHgwODA0LCAweDM2NzMsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDAyMSwgMHgyMGU5LAotCTB4MDAwMCwgMHgyMGExLCAweDAwMjEsIDB4MjBhOSwgMHgwMDFmLCAweDQwMDMsIDB4Nzk4NCwgMHg3YTg4LAotCTB4N2I4YywgMHgwODA0LCAweDM2NzMsIDB4Nzg4NCwgMHgyMDYwLCAweDA4MDQsIDB4MzcyOCwgMHgyMDA5LAotCTB4MDAwMywgMHgyMDExLCAweDAwMDMsIDB4MjAxOSwgMHgwMDEyLCAweDc4OWIsIDB4MDEzNywgMHg3ODkzLAotCTB4ZmZmZiwgMHgyMDAxLCAweDE4OGYsIDB4MjAwNCwgMHg5MDA1LCAweDAxMTgsIDB4Nzg5NiwgMHgwODA0LAotCTB4MzY3MywgMHg3ODk3LCAweDAwMDEsIDB4MDgwNCwgMHgzNjczLCAweDIwMzksIDB4MDAwMSwgMHg3ZDk4LAotCTB4N2M5YywgMHgwODA0LCAweDM2YWYsIDB4MjAzOSwgMHgwMDAxLCAweDdkOTgsIDB4N2M5YywgMHgwODA0LAotCTB4MzZiYiwgMHg3OWEwLCAweDkxODIsIDB4MDA0MCwgMHgwMjEwLCAweDA4MDQsIDB4MzZhOCwgMHgyMTM4LAotCTB4N2Q5OCwgMHg3YzljLCAweDA4MDQsIDB4MzZhZiwgMHg3OWEwLCAweDkxODIsIDB4MDA0MCwgMHgwMjEwLAotCTB4MDgwNCwgMHgzNmE4LCAweDIxMzgsIDB4N2Q5OCwgMHg3YzljLCAweDA4MDQsIDB4MzZiYiwgMHg3OWEwLAotCTB4OTE4MiwgMHgwMDQwLCAweDAyMTAsIDB4MDgwNCwgMHgzNmE4LCAweDIxZTgsIDB4Nzk4NCwgMHg3ODg4LAotCTB4MjBhOSwgMHgwMDAxLCAweDIxYTAsIDB4NDAwNCwgMHgwODA0LCAweDM2NzMsIDB4MjA2MSwgMHgwODAwLAotCTB4ZTEwYywgMHg5MDA2LCAweDJjMTUsIDB4OTIwMCwgMHg4YzYwLCAweDgxMDksIDB4MWRkOCwgMHgyMDEwLAotCTB4OTAwNSwgMHgwOTA0LCAweDM2NzMsIDB4MDgwNCwgMHgzNmEyLCAweDc5YTAsIDB4OTE4MiwgMHgwMDQwLAotCTB4MDIxMCwgMHgwODA0LCAweDM2YTgsIDB4MjFlMCwgMHgyMGE5LCAweDAwMDEsIDB4Nzk4NCwgMHgyMTk4LAotCTB4NDAxMiwgMHgwODA0LCAweDM2NzMsIDB4MjA2OSwgMHgxODQ3LCAweDc4ODQsIDB4Nzk5MCwgMHg5MTFhLAotCTB4MWEwNCwgMHgzNmE4LCAweDgwMTksIDB4MDkwNCwgMHgzNmE4LCAweDY4NGEsIDB4Njk0MiwgMHg3ODhjLAotCTB4Njg1MiwgMHg3ODg4LCAweDY4NTYsIDB4OTAwNiwgMHg2ODVhLCAweDY4NWUsIDB4MDgwYywgMHg3OWQwLAotCTB4MDgwNCwgMHgzNjczLCAweDIwNjksIDB4MTg0NywgMHg3ODg0LCAweDc5OTQsIDB4OTExYSwgMHgxYTA0LAotCTB4MzZhOCwgMHg4MDE5LCAweDA5MDQsIDB4MzZhOCwgMHg2ODRlLCAweDY5NDYsIDB4Nzg4YywgMHg2ODYyLAotCTB4Nzg4OCwgMHg2ODY2LCAweDkwMDYsIDB4Njg2YSwgMHg2ODZlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg2YzY1LCAweDAxMmUsIDB4MDgwNCwgMHgzNjczLCAweDkwMmUsIDB4MjUyMCwgMHg4MWZmLAotCTB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNmE1LCAweDc5ODQsIDB4N2I4OCwgMHg3YThjLAotCTB4MjBhOSwgMHgwMDA1LCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDE4YTYsIDB4NDEwMSwgMHgwODBjLAotCTB4NGJjOCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YTUsIDB4MjAwOSwgMHgwMDIwLAotCTB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4YWY2MCwgMHgwODBjLCAweDRjMTEsIDB4NzAxZiwgMHgzNzk5LAotCTB4MDAwNSwgMHhhODY0LCAweDIwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDkwOTYsIDB4MDAxMSwgMHgwMTY4LAotCTB4OTA5NiwgMHgwMDE5LCAweDAxNTAsIDB4OTA5NiwgMHgwMDE1LCAweDAxMzgsIDB4OTA5NiwgMHgwMDQ4LAotCTB4MDEyMCwgMHg5MDk2LCAweDAwMjksIDB4MTkwNCwgMHgzNmE1LCAweDgxMGYsIDB4OTE4YywgMHgwMGZmLAotCTB4MDkwNCwgMHgzNmE1LCAweDcxMTIsIDB4NzAxMCwgMHg4MDAxLCAweDA1NjAsIDB4NzAxMiwgMHgwODBjLAotCTB4NGJjOCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YTUsIDB4MjAwOSwgMHgwMDIwLAotCTB4NzA2OCwgMHgyMDQwLCAweGEyOGMsIDB4YTM5MCwgMHhhNDk0LCAweGE1OTgsIDB4OTI5MCwgMHgwMDQwLAotCTB4OTM5OSwgMHgwMDAwLCAweDk0YTEsIDB4MDAwMCwgMHg5NWE5LCAweDAwMDAsIDB4YTg1YywgMHg5MDgwLAotCTB4MDAxOSwgMHhhZjYwLCAweDA4MGMsIDB4NGMxMSwgMHg3MDFmLCAweDM3ZDcsIDB4MDAwNSwgMHhhODY0LAotCTB4OTA4NCwgMHgwMGZmLCAweDkwOTYsIDB4MDAwMiwgMHgwMTIwLCAweDkwOTYsIDB4MDAwYSwgMHgxOTA0LAotCTB4MzZhNSwgMHgwODg4LCAweDcwMTQsIDB4MjA0OCwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHhhODY0LAotCTB4OTA4NCwgMHgwMGZmLCAweDkwOTYsIDB4MDAyOSwgMHgxMTYwLCAweGMyZmQsIDB4YWE3YSwgMHgwODBjLAotCTB4NjJlNSwgMHgwMTUwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4N2EsIDB4YTk4MiwgMHgwMTJlLAotCTB4MDA1MCwgMHgwODBjLCAweDY2MTUsIDB4MTEyOCwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHgzODAzLAotCTB4MDAwNSwgMHgwODBjLCAweDcxNWQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjBhOSwgMHgwMDA1LAotCTB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MThhNiwgMHg0MDBhLCAweDIxMDAsIDB4OTIxMCwgMHg5Mzk5LAotCTB4MDAwMCwgMHg5NGExLCAweDAwMDAsIDB4OTVhOSwgMHgwMDAwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LAotCTB4MjAwOSwgMHgwMDIwLCAweDAxMmUsIDB4YWY2MCwgMHgwODA0LCAweDRjMTQsIDB4MjA5MSwgMHg4MDAwLAotCTB4NzgzNywgMHg0MDAwLCAweDc4MzMsIDB4MDAxMCwgMHg3ODgzLCAweDQwMDAsIDB4Nzg4NywgMHg0OTUzLAotCTB4Nzg4YiwgMHg1MDIwLCAweDc4OGYsIDB4MjAyMCwgMHgyMDA5LCAweDAxN2YsIDB4MjEwNCwgMHg3ODkyLAotCTB4M2YwMCwgMHg3ODk2LCAweDIwNjEsIDB4MDEwMCwgMHg2MjAwLCAweDIwNjEsIDB4MDIwMCwgMHg2MDNjLAotCTB4ODAwNywgMHg5MjA1LCAweDc4OWEsIDB4MjAwOSwgMHgwNGZkLCAweDIxMDQsIDB4Nzg5ZSwgMHgyMDkxLAotCTB4NTAwMCwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgwMTgwLAotCTB4MjAwMSwgMHgxYTI2LCAweDIwMDQsIDB4OTAwNSwgMHgwMTI4LCAweDIwMDEsIDB4MDA4YiwgMHgyMDA0LAotCTB4ZDBmYywgMHgwZGQ4LCAweDIwMDEsIDB4MDA4YSwgMHgyMDAzLCAweDAwMDIsIDB4MjAwMywgMHgxMDAxLAotCTB4MjA3MSwgMHgwMDgwLCAweDA4MDQsIDB4MDQyNywgMHg4MWZmLCAweDE5MDQsIDB4MzZhNSwgMHg3OTg0LAotCTB4MDgwYywgMHg2NzgzLCAweDE5MDQsIDB4MzZhOCwgMHg3ZTk4LCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLAotCTB4NDAwMCwgMHgxYTA0LCAweDM2YTgsIDB4N2M4OCwgMHg3ZDhjLCAweDA4MGMsIDB4NjliNywgMHgwODBjLAotCTB4Njk0NCwgMHgxNTE4LCAweDIwNjEsIDB4MWRkYywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDAwLAotCTB4OTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4NjAxNCwgMHg5MDRkLCAweDAxMzAsIDB4YTg2YywgMHg5NDA2LAotCTB4MTExOCwgMHhhODcwLCAweDk1MDYsIDB4MDE1MCwgMHgwMTJlLCAweDljZTAsIDB4MDAxYywgMHgyMDAxLAotCTB4MTgxYSwgMHgyMDA0LCAweDljMDIsIDB4MWEwNCwgMHgzNmE1LCAweDBjMzAsIDB4MDgwYywgMHhjODFiLAotCTB4MDEyZSwgMHgwOTA0LCAweDM2YTUsIDB4MDgwNCwgMHgzNjczLCAweDkwMGUsIDB4MjAwMSwgMHgwMDA1LAotCTB4MDgwYywgMHg3MTVkLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4Y2YzZSwgMHgwODBjLAotCTB4NmYxMSwgMHgwMTJlLCAweDA4MDQsIDB4MzY3MywgMHgwMGE2LCAweDI5NTAsIDB4YjE5OCwgMHgwODBjLAotCTB4Njc4MywgMHgxOTA0LCAweDM4ZWUsIDB4YjZhNCwgMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLAotCTB4MTZlOCwgMHhiNDljLCAweGI1YTAsIDB4MDgwYywgMHg2OWI3LCAweDA4MGMsIDB4Njk0NCwgMHgxNTIwLAotCTB4MjA2MSwgMHgxZGRjLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLAotCTB4MDE0OCwgMHg2MDE0LCAweDkwNGQsIDB4MDEzMCwgMHhhODZjLCAweDk0MDYsIDB4MTExOCwgMHhhODcwLAotCTB4OTUwNiwgMHgwMTU4LCAweDAxMmUsIDB4OWNlMCwgMHgwMDFjLCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LAotCTB4OWMwMiwgMHgyMDA5LCAweDAwMGQsIDB4MTJiMCwgMHgwYzI4LCAweDA4MGMsIDB4YzgxYiwgMHgwMTJlLAotCTB4MjAwOSwgMHgwMDAzLCAweDAxNzgsIDB4MDBlMCwgMHg5MDBlLCAweDIwMDEsIDB4MDAwNSwgMHgwODBjLAotCTB4NzE1ZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGNmM2UsIDB4MDgwYywgMHg2ZjA1LAotCTB4MDEyZSwgMHgwMDcwLCAweGIwOTcsIDB4NDAwNSwgMHhiMTlhLCAweDAwMTAsIDB4YjA5NywgMHg0MDA2LAotCTB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLCAweDJhNDgsIDB4MDBhZSwgMHgwMDA1LAotCTB4YjA5NywgMHg0MDAwLCAweDkwMDYsIDB4OTE4ZCwgMHgwMDAxLCAweDIwMDgsIDB4MmE0OCwgMHgwMGFlLAotCTB4MDAwNSwgMHg4MWZmLCAweDE5MDQsIDB4MzZhNSwgMHgwODBjLCAweDRiZGYsIDB4MDkwNCwgMHgzNmE4LAotCTB4MDgwYywgMHg2ODRhLCAweDA5MDQsIDB4MzZhNSwgMHgwODBjLCAweDY5YmQsIDB4MDkwNCwgMHgzNmE1LAotCTB4MDgwNCwgMHg0NjYxLCAweDgxZmYsIDB4MTkwNCwgMHgzNmE1LCAweDA4MGMsIDB4NGJmYiwgMHgwOTA0LAotCTB4MzZhOCwgMHgwODBjLCAweDZhNGIsIDB4MDkwNCwgMHgzNmE1LCAweDIwMTksIDB4MDAwNSwgMHg3OWE4LAotCTB4MDgwYywgMHg2OWQ4LCAweDA5MDQsIDB4MzZhNSwgMHg3ODg4LCAweDkwOGEsIDB4MTAwMCwgMHgxYTA0LAotCTB4MzZhOCwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHg5MTA4LCAweDA4MGMsIDB4ODgzYSwgMHg3OWE4LAotCTB4ZDE4NCwgMHgxOTA0LCAweDM2NzMsIDB4MDgwNCwgMHg0NjYxLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4ODFmZiwgMHgwMTE4LCAweDIwMDksIDB4MDAwMSwgMHgwNDUwLCAweDIwMjksIDB4MDdmZiwgMHg2NDVjLAotCTB4MjQwMCwgMHg5NTA2LCAweDAxZjgsIDB4MjUwOCwgMHgwODBjLCAweDY3ODMsIDB4MTFkOCwgMHgwODBjLAotCTB4NmE0YiwgMHgxMTI4LCAweDIwMDksIDB4MDAwMiwgMHg2MmMwLCAweDI1MTgsIDB4MDBjMCwgMHgyMDE5LAotCTB4MDAwNCwgMHg5MDBlLCAweDA4MGMsIDB4NjlkOCwgMHgxMTE4LCAweDIwMDksIDB4MDAwNiwgMHgwMDc4LAotCTB4Nzg4NCwgMHg5MDhhLCAweDEwMDAsIDB4MTI3MCwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHg5MTA4LAotCTB4MDgwYywgMHg4ODNhLCAweDg1MjksIDB4MWFlMCwgMHgwMTJlLCAweDA4MDQsIDB4MzY3MywgMHgwMTJlLAotCTB4MDgwNCwgMHgzNmE1LCAweDAxMmUsIDB4MDgwNCwgMHgzNmE4LCAweDA4MGMsIDB4NGJkZiwgMHgwOTA0LAotCTB4MzZhOCwgMHgwODBjLCAweDY4NGEsIDB4MDkwNCwgMHgzNmE1LCAweDA4MGMsIDB4YWFmNywgMHhiYWEwLAotCTB4MjAxOSwgMHgwMDA1LCAweDAwYzYsIDB4OTA2NiwgMHgwODBjLCAweDk1YjksIDB4MDA3NiwgMHg5MDNlLAotCTB4MDgwYywgMHg5NDc2LCAweDkwMGUsIDB4MDgwYywgMHhlNDY1LCAweDAwN2UsIDB4MDBjZSwgMHgwODBjLAotCTB4YWIxMywgMHgwODBjLCAweDY5YjcsIDB4MDgwNCwgMHgzNjczLCAweDA4MGMsIDB4NGJkZiwgMHgwOTA0LAotCTB4MzZhOCwgMHgwODBjLCAweDY5YjcsIDB4MjIwOCwgMHgwODA0LCAweDM2NzMsIDB4MDE1NiwgMHgwMGQ2LAotCTB4MDBlNiwgMHgwMGM2LCAweDIwNjksIDB4MTkxMCwgMHg2ODEwLCAweDY5MTQsIDB4OTEwYSwgMHgxMjA4LAotCTB4OTAwZSwgMHg2ODE2LCAweDkwMTYsIDB4OTAxZSwgMHgyMDcxLCAweDE5ZTksIDB4NzAyOCwgMHg5MDY1LAotCTB4MDExOCwgMHg4MjEwLCAweDYwMGMsIDB4MGNkOCwgMHgyMzAwLCAweDkyMTgsIDB4MDBjZSwgMHgwMGVlLAotCTB4MDBkZSwgMHgwMTVlLCAweDA4MDQsIDB4MzY3MywgMHgwMGY2LCAweDAwMTYsIDB4OTA3ZCwgMHgwMTM4LAotCTB4OTAwNiwgMHg4MDAwLCAweDJmMGMsIDB4ODFmZiwgMHgwMTEwLCAweDIxNzgsIDB4MGNkMCwgMHgwMDFlLAotCTB4MDBmZSwgMHgwMDA1LCAweDIwNjksIDB4MTkxMCwgMHg2OTEwLCAweDYyYmMsIDB4MDgwNCwgMHgzNjczLAotCTB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LCAweDM2YTUsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDU4MzQsIDB4MDEyOCwgMHgyMDA5LCAweDAwMDcsIDB4MDEyZSwgMHgwODA0LAotCTB4MzZhNSwgMHgwMTJlLCAweDYxNWMsIDB4OTE5MCwgMHgzNDc0LCAweDIyMTUsIDB4OTI5NCwgMHgwMGZmLAotCTB4NjM3YywgMHg4M2ZmLCAweDAxMDgsIDB4NjI4MCwgMHg2N2RjLCAweDk3YzQsIDB4MDAwYSwgMHg5OGM2LAotCTB4MDAwYSwgMHgxMTE4LCAweDIwMzEsIDB4MDAwMSwgMHgwMGU4LCAweDk3YzQsIDB4MDAyMiwgMHg5OGM2LAotCTB4MDAyMiwgMHgxMTE4LCAweDIwMzEsIDB4MDAwMywgMHgwMGE4LCAweDk3YzQsIDB4MDAxMiwgMHg5OGM2LAotCTB4MDAxMiwgMHgxMTE4LCAweDIwMzEsIDB4MDAwMiwgMHgwMDY4LCAweDA4MGMsIDB4NzY5ZCwgMHgxMTE4LAotCTB4MjAzMSwgMHgwMDA0LCAweDAwMzgsIDB4ZDc5YywgMHgwMTIwLCAweDIwMDksIDB4MDAwNSwgMHgwODA0LAotCTB4MzZhNSwgMHg5MDM2LCAweDdlOWEsIDB4N2Y5ZSwgMHgwODA0LCAweDM2NzMsIDB4NjE0YywgMHg2MjUwLAotCTB4MjAxOSwgMHgxOTg3LCAweDIzMWMsIDB4MjAwMSwgMHgxOTg4LCAweDIwMDQsIDB4Nzg5YSwgMHgwODA0LAotCTB4MzY3MywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MTM4LCAweDYyM2MsIDB4NjM0MCwgMHgwMTJlLAotCTB4MDgwNCwgMHgzNjczLCAweDA4MGMsIDB4NGJmYiwgMHgwOTA0LCAweDM2YTgsIDB4YmE0NCwgMHhiYjM4LAotCTB4MDgwNCwgMHgzNjczLCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLCAweDRiZmIsIDB4MjExMCwgMHgwOTA0LAotCTB4MzZhOCwgMHhiODA0LCAweDkwOGMsIDB4MDBmZiwgMHg5MThlLCAweDAwMDYsIDB4MDE0MCwgMHg5MDg0LAotCTB4ZmYwMCwgMHg5MDg2LCAweDA2MDAsIDB4MjAwOSwgMHgwMDA5LCAweDE5MDQsIDB4MzZhNSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwMTksIDB4MDAwNSwgMHgwMGM2LCAweDkwNjYsIDB4MDgwYywgMHhhYWY3LAotCTB4MDgwYywgMHhhNWRkLCAweDA4MGMsIDB4OTViOSwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5NDc2LAotCTB4OTAwZSwgMHgwODBjLCAweGU0NjUsIDB4MDA3ZSwgMHgwMGNlLCAweDA4MGMsIDB4YWIxMywgMHhiODA3LAotCTB4MDQwNywgMHgwMTJlLCAweDA4MDQsIDB4MzY3MywgMHg2MTRjLCAweDYyNTAsIDB4Nzg4NCwgMHg2MDRlLAotCTB4N2I4OCwgMHg2MzUyLCAweDIwNjksIDB4MTg0NywgMHg4MzFmLCAweDkzMDUsIDB4NjgxNiwgMHg3ODhjLAotCTB4MjA2OSwgMHgxOTg3LCAweDJkMWMsIDB4MjA2YSwgMHg3ZTk4LCAweDk2ODIsIDB4MDAxNCwgMHgxMjEwLAotCTB4MjAzMSwgMHgwN2QwLCAweDIwNjksIDB4MTk4OCwgMHgyZDA0LCAweDI2NmEsIDB4Nzg5YSwgMHgwODA0LAotCTB4MzY3MywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MTM4LCAweDc4ODQsIDB4NjAzYSwgMHg5MTBlLAotCTB4ZDFiNCwgMHgxOTBjLCAweDBlZGYsIDB4ZDBjNCwgMHgwMWE4LCAweDAwZDYsIDB4NzhhOCwgMHgyMDA5LAotCTB4MTk5ZSwgMHgyMDBhLCAweDc4YWMsIDB4MjAxMSwgMHgxOTlmLCAweDIwMTIsIDB4MjA2OSwgMHgwMTAwLAotCTB4NjgzOCwgMHg5MDg2LCAweDAwMDcsIDB4MTExOCwgMHgyMjE0LCAweDZhNWEsIDB4MDAxMCwgMHgyMTBjLAotCTB4Njk1YSwgMHgwMGRlLCAweDIwMTEsIDB4MDExNiwgMHgyMjBjLCAweDc4ODgsIDB4ZDA4YywgMHgwMTE4LAotCTB4OTE4ZCwgMHgwMDQwLCAweDAwMTAsIDB4OTE4YywgMHhmZjdmLCAweDIxMTIsIDB4Nzk4OCwgMHg2MTNlLAotCTB4NjE0MCwgMHg3ODhjLCAweDYwNDIsIDB4OTEwZSwgMHhkMWU0LCAweDE5MGMsIDB4MGVmYSwgMHg5MDg0LAotCTB4MDAyMCwgMHgwMTMwLCAweDc4YjQsIDB4NjA0NiwgMHg5MDg0LCAweDAwMDEsIDB4MDkwYywgMHg0MzViLAotCTB4NjA0MCwgMHhkMGNjLCAweDAxMjAsIDB4NzhiMCwgMHgyMDExLCAweDAxMTQsIDB4MjAxMiwgMHgwMTJlLAotCTB4MDgwNCwgMHgzNjczLCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDdhMzgsIDB4YTg5OCwgMHg5MDg0LAotCTB4ZmViZiwgMHg5MjE1LCAweGE4OWMsIDB4OTA4NCwgMHhmZWJmLCAweDgwMDIsIDB4OTIxNCwgMHg3ODM4LAotCTB4OTA4NCwgMHgwMTQwLCAweDkyMTUsIDB4N2EzYSwgMHhhODk3LCAweDQwMDAsIDB4OTAwZSwgMHg5MDg1LAotCTB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDc4OTgsIDB4OTAwNSwgMHgwMWE4LAotCTB4Nzg4OCwgMHg5MDI1LCAweDA5MDQsIDB4MzZhOCwgMHg3ODhjLCAweDkwMmQsIDB4MDkwNCwgMHgzNmE4LAotCTB4OTAwZSwgMHgwODBjLCAweDY3ODMsIDB4MTEyMCwgMHhiYTQ0LCAweGJiMzgsIDB4YmM0NiwgMHhiZDNhLAotCTB4OTE4NiwgMHgwN2ZmLCAweDAxOTAsIDB4ODEwOCwgMHgwY2EwLCAweDA4MGMsIDB4NGJmYiwgMHgwOTA0LAotCTB4MzZhOCwgMHg3ODg4LCAweDkwMGQsIDB4MDkwNCwgMHgzNmE4LCAweDc4OGMsIDB4OTAwNSwgMHgwOTA0LAotCTB4MzZhOCwgMHhiYTQ0LCAweGI5NDYsIDB4YmIzOCwgMHhiODNhLCAweDA4MDQsIDB4MzY3MywgMHgyMDExLAotCTB4YmMwOSwgMHgwMDEwLCAweDIwMTEsIDB4YmMwNSwgMHgwODBjLCAweDU4MzQsIDB4MTkwNCwgMHgzNmE1LAotCTB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4Nzk4NCwgMHg5MTg2LCAweDAwZmYsIDB4MTEzMCwgMHgyMDAxLAotCTB4MTgxOCwgMHgyMDA0LCAweDkwODUsIDB4ZmYwMCwgMHgwMDg4LCAweDkxODIsIDB4MDA3ZiwgMHgxNmUwLAotCTB4OTE4OCwgMHgzNDc0LCAweDIxMGQsIDB4OTE4YywgMHgwMGZmLCAweDIwMDEsIDB4MTgxOCwgMHgyMDA0LAotCTB4MDAyNiwgMHg5MTE2LCAweDAwMmUsIDB4MDU4MCwgMHg4MTBmLCAweDkxMDUsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwMDA2LCAweDA4MGMsIDB4YWVmOCwgMHgwMDBlLCAweDA1MTAsIDB4NjAyZSwgMHg2MjBhLAotCTB4Nzk4NCwgMHgwMGI2LCAweDA4MGMsIDB4NjcxZSwgMHgyYjA4LCAweDAwYmUsIDB4MTUwMCwgMHg2MTEyLAotCTB4NjAyMywgMHgwMDAxLCAweDA4MGMsIDB4NGJjOCwgMHgwMWQwLCAweDkwMDYsIDB4YTg2NiwgMHg3MDA3LAotCTB4MDAwMywgMHhhODMyLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDcwMWYsIDB4M2I2MiwgMHgyOTAwLAotCTB4NjAxNiwgMHgyMDA5LCAweDAwMzIsIDB4MDgwYywgMHhhZmVjLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LAotCTB4MDEyZSwgMHgwMGNlLCAweDA4MDQsIDB4MzZhNSwgMHgwMGNlLCAweDA4MDQsIDB4MzZhOCwgMHgwODBjLAotCTB4YWY0ZSwgMHgwY2IwLCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLCAweDA5MDQsIDB4MzZhNSwgMHgwODA0LAotCTB4MzY3MywgMHgyMDYxLCAweDFhNzQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwMCwgMHhkMDg0LAotCTB4MDE3MCwgMHg2MTA0LCAweDYyMDgsIDB4MjA2MSwgMHgxODAwLCAweDYzNTQsIDB4NjA3NCwgMHg3ODlhLAotCTB4NjBjMCwgMHg3ODllLCAweDYwYmMsIDB4NzhhYSwgMHgwMTJlLCAweDA4MDQsIDB4MzY3MywgMHg5MDBlLAotCTB4MjExMCwgMHgwYzg4LCAweDgxZmYsIDB4MTkwNCwgMHgzNmE1LCAweDA4MGMsIDB4NzY5ZCwgMHgwOTA0LAotCTB4MzZhNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjU0LCAweDYwNzQsIDB4OTIwMiwgMHgwMjQ4LAotCTB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4MjcwYSwgMHgwODBjLCAweDVhNTcsIDB4MDEyZSwgMHgwODA0LAotCTB4MzY3MywgMHgwMTJlLCAweDA4MDQsIDB4MzZhOCwgMHgwMDA2LCAweDAwMTYsIDB4MDBjNiwgMHgwMGU2LAotCTB4MjAwMSwgMHgxOWFiLCAweDIwNzAsIDB4MjA2MSwgMHgxODQ3LCAweDYwMDgsIDB4MjA3MiwgMHg5MDBlLAotCTB4MjAxMSwgMHgxNDAwLCAweDA4MGMsIDB4OTM2NCwgMHg3MjA2LCAweDAwZWUsIDB4MDBjZSwgMHgwMDFlLAotCTB4MDAwZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDgxZmYsIDB4MDEyOCwgMHgwMTJlLAotCTB4MjAyMSwgMHg0MDBiLCAweDA4MDQsIDB4MzY3NSwgMHg3ODg0LCAweGQwZmMsIDB4MDE1OCwgMHgyMDAxLAotCTB4MDAyYSwgMHgyMDA0LCAweDkwMDUsIDB4MDE4MCwgMHg5MDgyLCAweDAwZTEsIDB4MDI5OCwgMHgwMTJlLAotCTB4MDgwNCwgMHgzNmE4LCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwMDUsIDB4MDEyOCwgMHgyMDY5LAotCTB4MTg0NywgMHg2OTA4LCAweDkxMDIsIDB4MTIzMCwgMHgwMTJlLCAweDA4MDQsIDB4MzZhOCwgMHgwMTJlLAotCTB4MDgwNCwgMHgzNmE1LCAweDA4MGMsIDB4YWU4MCwgMHgwZGQwLCAweDc4ODQsIDB4ZDBmYywgMHgwOTA0LAotCTB4M2MzMSwgMHgwMGM2LCAweDA4MGMsIDB4NGJjOCwgMHgwMGNlLCAweDBkODgsIDB4YTg2NywgMHgwMDAwLAotCTB4Nzg4NCwgMHhhODBhLCAweDc4OTgsIDB4YTgwZSwgMHg3ODljLCAweGE4MTIsIDB4MjAwMSwgMHgwMDJlLAotCTB4MjAwNCwgMHhhODFhLCAweDIwMDEsIDB4MDAyZiwgMHgyMDA0LCAweGE4MWUsIDB4MjAwMSwgMHgwMDMwLAotCTB4MjAwNCwgMHhhODIyLCAweDIwMDEsIDB4MDAzMSwgMHgyMDA0LCAweGE4MjYsIDB4MjAwMSwgMHgwMDM0LAotCTB4MjAwNCwgMHhhODJhLCAweDIwMDEsIDB4MDAzNSwgMHgyMDA0LCAweGE4MmUsIDB4MjAwMSwgMHgwMDJhLAotCTB4MjAwNCwgMHg5MDgwLCAweDAwMDMsIDB4OTA4NCwgMHgwMGZjLCAweDgwMDQsIDB4YTgxNiwgMHgwODBjLAotCTB4M2RiYiwgMHgwOTI4LCAweDcwMTQsIDB4MjA0OCwgMHhhZDJjLCAweGFjMjgsIDB4YWIxYywgMHhhYTE4LAotCTB4YTkzMCwgMHhhODA4LCAweGQwYjQsIDB4MTEyMCwgMHgyMDI5LCAweDAwMDAsIDB4MjAyMSwgMHgwMDAwLAotCTB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLAotCTB4MDAxYiwgMHgwODBjLCAweDRjMTEsIDB4NzAxZiwgMHgzY2Y4LCAweDcwMjMsIDB4MDAwMSwgMHgwMTJlLAotCTB4MDAwNSwgMHgwODBjLCAweGFhZjcsIDB4MDA0NiwgMHgwMDg2LCAweDAwOTYsIDB4MDBhNiwgMHgwMGI2LAotCTB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwODBjLCAweDNiOWMsIDB4MjAwMSwgMHgxOWExLAotCTB4MjAwMywgMHgwMDAwLCAweDIwMjEsIDB4MDAwYSwgMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwgMHgwMDE2LAotCTB4NjBiYiwgMHgwMDAwLCAweDYwYmYsIDB4MzJlMSwgMHg2MGJmLCAweDAwMTIsIDB4MDgwYywgMHgzZTJhLAotCTB4MDgwYywgMHgzZGU5LCAweDAwZjYsIDB4MDBlNiwgMHgwMDg2LCAweDI5NDAsIDB4MjA3MSwgMHgxOWU5LAotCTB4MjA3OSwgMHgwMDkwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4ODQsIDB4ZDBiNCwgMHgwMTQwLAotCTB4MjAwMSwgMHgwMDM1LCAweDIwMDQsIDB4NzgwZSwgMHgyMDAxLCAweDAwMzQsIDB4MjAwNCwgMHg3ODBhLAotCTB4MDBkZSwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHg0MTlmLCAweDAwOGUsIDB4MDBlZSwgMHgwMGZlLAotCTB4MDgwYywgMHg0MGMxLCAweDA4MGMsIDB4M2ZlZSwgMHgwNWI4LCAweDIwMDEsIDB4MDIwYiwgMHgyMDA0LAotCTB4OTA4NCwgMHgwMTQwLCAweDFkYjgsIDB4MDgwYywgMHg0MjEzLCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLAotCTB4NzhiYywgMHgwMGZlLCAweDkwOGMsIDB4MDA3MCwgMHgxNTYwLCAweDIwNzEsIDB4MDIwMCwgMHg3MDM3LAotCTB4MDAwMCwgMHg3MDUwLCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LCAweDMyMDAsIDB4MTUxMCwgMHg3MDM3LAotCTB4MDAwMSwgMHg3MDUwLCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LCAweGUxMDAsIDB4MTFkMCwgMHg3MDM3LAotCTB4MDAwMCwgMHg3MDU0LCAweDcwMzcsIDB4MDAwMCwgMHg3MTVjLCAweDkxMDYsIDB4MTE5MCwgMHgyMDAxLAotCTB4MTgyMCwgMHgyMDA0LCAweDkxMDYsIDB4MTE2OCwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg2MDI0LAotCTB4OTA4NCwgMHgxZTAwLCAweDAwY2UsIDB4MDEzOCwgMHgwODBjLCAweDNmZjgsIDB4MDgwYywgMHgzZGU0LAotCTB4MDA1OCwgMHgwODBjLCAweDNkZTQsIDB4MDgwYywgMHg0MTM3LCAweDA4MGMsIDB4NDBiNywgMHgyMDAxLAotCTB4MDIwYiwgMHgyMDA0LCAweGQwZTQsIDB4MGRkOCwgMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA0LAotCTB4MjA2MSwgMHgwMTAwLCAweDYwMjcsIDB4MDAwMiwgMHgwMDFlLCAweDYxMDYsIDB4MjAxMSwgMHgwMjBkLAotCTB4MjAxMywgMHgwMDIwLCAweDYwYmIsIDB4MDAwMCwgMHg2MGJmLCAweDAxMDgsIDB4NjBiZiwgMHgwMDEyLAotCTB4MjAwMSwgMHgwMDA0LCAweDIwMGMsIDB4OTE4YywgMHhmZmZkLCAweDIxMDIsIDB4MDgwYywgMHgxMzQ2LAotCTB4MjAwOSwgMHgwMDI4LCAweDA4MGMsIDB4MjIzZCwgMHgyMDAxLCAweDAyMjcsIDB4MjAwYywgMHgyMTAyLAotCTB4MDgwYywgMHhhYjEzLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMGFlLAotCTB4MDA5ZSwgMHgwMDhlLCAweDAwNGUsIDB4MjAwMSwgMHgxOWExLCAweDIwMDQsIDB4OTAwNSwgMHgxMTE4LAotCTB4MDEyZSwgMHgwODA0LCAweDM2NzMsIDB4MDEyZSwgMHgyMDIxLCAweDQwMGMsIDB4MDgwNCwgMHgzNjc1LAotCTB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDA4NiwgMHgwMDk2LAotCTB4MDBkNiwgMHgwMTU2LCAweDcwMTQsIDB4MjA0OCwgMHg3MDIwLCAweDIwYTgsIDB4ODAwMCwgMHg3MDIyLAotCTB4YTgwNCwgMHg5MDA1LCAweDA5MDQsIDB4M2Q1NCwgMHgyMDQ4LCAweDFmMDQsIDB4M2QwOCwgMHg3MDY4LAotCTB4MjA0MCwgMHhhMjhjLCAweGEzOTAsIDB4YTQ5NCwgMHhhNTk4LCAweGE5MzAsIDB4YTgwOCwgMHhkMGI0LAotCTB4MTEyMCwgMHgyMDI5LCAweDAwMDAsIDB4MjAyMSwgMHgwMDAwLCAweDAwOTYsIDB4NzAxNCwgMHgyMDQ4LAotCTB4YTg2NCwgMHgwMDllLCAweDkwODYsIDB4MDEwMywgMHgwMTcwLCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LAotCTB4OTBiYywgMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMWIsIDB4MDgwYywgMHg0YzExLAotCTB4NzAxZiwgMHgzY2Y4LCAweDAwYjAsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLAotCTB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMWE4LCAweDI3ZTAsIDB4MjA5OCwgMHgyN2U4LAotCTB4MjBhMCwgMHgwMDA2LCAweDA4MGMsIDB4MGZjYSwgMHgwMDBlLCAweDA4MGMsIDB4NGMxNCwgMHg3MDFmLAotCTB4M2NmOCwgMHgwMTVlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDhlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLAotCTB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHg3MDE0LCAweDIwNDgsIDB4YTg2NCwgMHg5MDg2LAotCTB4MDEwMywgMHgxMTE4LCAweDcwMWYsIDB4M2RiOSwgMHgwNDUwLCAweDcwMTQsIDB4MjA0OCwgMHhhODY4LAotCTB4YzBmZCwgMHhhODZhLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDY3MTgsIDB4MDExMCwgMHg5MDA2LAotCTB4MDAzMCwgMHhiODEzLCAweDAwZmYsIDB4YjgxNywgMHhmZmZkLCAweDA4MGMsIDB4ZDEyMSwgMHgwMTVlLAotCTB4MDBkZSwgMHgwMDllLCAweDAwOGUsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwOTA0LCAweDM2YTUsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LAotCTB4MDA3NiwgMHgwMDg2LCAweDAwOTYsIDB4MDBkNiwgMHgwMTU2LCAweDcwMWYsIDB4M2Q4YiwgMHg3MDA3LAotCTB4MDAwMywgMHgwODA0LCAweDNkNDksIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsIDB4MjAyMSwgMHg0MDBjLAotCTB4MDkwNCwgMHgzNjc1LCAweDAwNzYsIDB4YWQxMCwgMHhhYzBjLCAweGFiMjQsIDB4YWEyMCwgMHhhOTMwLAotCTB4YTgwOCwgMHhkMGI0LCAweDExMjAsIDB4MjAyOSwgMHgwMDAwLCAweDIwMjEsIDB4MDAwMCwgMHg4OTA2LAorCTB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4MjA3MSwgMHgxODllLAorCTB4NzAwMywgMHgwMDAyLCAweDkwMDYsIDB4NzAxNiwgMHg3MDFhLCAweDcwNGEsIDB4NzA0ZSwgMHg3MDBlLAorCTB4NzA0MiwgMHg3MDQ2LCAweDcwM2IsIDB4MThiYSwgMHg3MDNmLCAweDE4YmEsIDB4NzAwNywgMHgwMDAxLAorCTB4MDgwYywgMHgxMDcyLCAweDA5MGMsIDB4MGQ4NSwgMHgyOTAwLCAweDcwNmEsIDB4YTg2NywgMHgwMDAyLAorCTB4YThhYiwgMHhkY2IwLCAweDA4MGMsIDB4MTA3MiwgMHgwOTBjLCAweDBkODUsIDB4MjkwMCwgMHg3MDZlLAorCTB4YTg2NywgMHgwMDAyLCAweGE4YWIsIDB4ZGNiMCwgMHgwMDA1LCAweDIwNzEsIDB4MTg5ZSwgMHg3MDA0LAorCTB4MDAwMiwgMHgzNWJkLCAweDM1YmUsIDB4MzVkMSwgMHgzNWU1LCAweDAwMDUsIDB4MTAwNCwgMHgzNWNlLAorCTB4MGUwNCwgMHgzNWNlLCAweDIwNzksIDB4MDAwMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDBjLAorCTB4OTAwNSwgMHgxMTI4LCAweDcwMGYsIDB4MDAwMSwgMHgwMTJlLCAweDA0NjgsIDB4MDAwNSwgMHgwMTJlLAorCTB4MGNlOCwgMHgyMDc5LCAweDAwMDAsIDB4MjA2MSwgMHgxOGI4LCAweDJjNGMsIDB4YTg2YywgMHg5MDhlLAorCTB4MDEwMCwgMHgwMTI4LCAweDkwODYsIDB4MDIwMCwgMHgwOTA0LCAweDM2YjksIDB4MDAwNSwgMHg3MDE4LAorCTB4MjA0OCwgMHgyMDYxLCAweDE4MDAsIDB4NzAxYywgMHgwODA3LCAweDcwMTQsIDB4MjA0OCwgMHhhODY0LAorCTB4OTA5NCwgMHgwMGZmLCAweDkyOTYsIDB4MDAyOSwgMHgxMTIwLCAweGFhNzgsIDB4ZDJmYywgMHgwMTI4LAorCTB4MDAwNSwgMHg5MDg2LCAweDAxMDMsIDB4MDEwOCwgMHgwMDA1LCAweDIwNzksIDB4MDAwMCwgMHgyMDYxLAorCTB4MTgwMCwgMHg3MDFjLCAweDA4MDcsIDB4MjA2MSwgMHgxODAwLCAweDc4ODAsIDB4OTA4YSwgMHgwMDQwLAorCTB4MTIxMCwgMHg2MWQwLCAweDAwNDIsIDB4MjEwMCwgMHg5MDhhLCAweDAwM2YsIDB4MWEwNCwgMHgzNmI2LAorCTB4NjFkMCwgMHgwODA0LCAweDM2NGIsIDB4MzY4ZCwgMHgzNmM1LCAweDM2YjYsIDB4MzZkMSwgMHgzNmRiLAorCTB4MzZlMSwgMHgzNmU1LCAweDM2ZjUsIDB4MzZmOSwgMHgzNzBmLCAweDM3MTUsIDB4MzcxYiwgMHgzNzI2LAorCTB4MzczMSwgMHgzNzQwLCAweDM3NGYsIDB4Mzc1ZCwgMHgzNzc0LCAweDM3OGYsIDB4MzZiNiwgMHgzODNhLAorCTB4Mzg3OCwgMHgzOTFkLCAweDM5MmUsIDB4Mzk1MSwgMHgzNmI2LCAweDM2YjYsIDB4MzZiNiwgMHgzOTg5LAorCTB4MzlhOSwgMHgzOWIyLCAweDM5ZGUsIDB4MzllNCwgMHgzNmI2LCAweDNhMmEsIDB4MzZiNiwgMHgzNmI2LAorCTB4MzZiNiwgMHgzNmI2LCAweDM2YjYsIDB4M2EzNSwgMHgzYTNlLCAweDNhNDYsIDB4M2E0OCwgMHgzNmI2LAorCTB4MzZiNiwgMHgzNmI2LCAweDM2YjYsIDB4MzZiNiwgMHgzNmI2LCAweDNhNzgsIDB4MzZiNiwgMHgzNmI2LAorCTB4MzZiNiwgMHgzNmI2LCAweDM2YjYsIDB4M2E5NSwgMHgzYjE5LCAweDM2YjYsIDB4MzZiNiwgMHgzNmI2LAorCTB4MzZiNiwgMHgzNmI2LCAweDM2YjYsIDB4MDAwMiwgMHgzYjQzLCAweDNiNDYsIDB4M2JhNSwgMHgzYmJlLAorCTB4M2JlZSwgMHgzZTk0LCAweDM2YjYsIDB4NTNmNSwgMHgzNmI2LCAweDM2YjYsIDB4MzZiNiwgMHgzNmI2LAorCTB4MzZiNiwgMHgzNmI2LCAweDM2YjYsIDB4MzZiNiwgMHgzNzBmLCAweDM3MTUsIDB4NDM5NywgMHg1ODY0LAorCTB4NDNiNSwgMHg1NDg0LCAweDU0ZDYsIDB4NTVlMSwgMHgzNmI2LCAweDU2NDMsIDB4NTY3ZiwgMHg1NmIwLAorCTB4NTdjMCwgMHg1NmRkLCAweDU3NDAsIDB4MzZiNiwgMHg0M2I5LCAweDQ1N2YsIDB4NDU5NSwgMHg0NWJhLAorCTB4NDYxZiwgMHg0NjkzLCAweDQ2YjMsIDB4NDcyYSwgMHg0Nzg2LCAweDQ3ZTIsIDB4NDdlNSwgMHg0ODBhLAorCTB4NDg3YywgMHg0OGU2LCAweDQ4ZWUsIDB4NGEyMywgMHg0YmNiLCAweDRiZmYsIDB4NGU2MywgMHgzNmI2LAorCTB4NGU4MSwgMHg0ZjQ4LCAweDUwMzEsIDB4NTA4YiwgMHgzNmI2LCAweDUxMWUsIDB4MzZiNiwgMHg1MTM0LAorCTB4NTE0ZiwgMHg0OGVlLCAweDUzOTUsIDB4NzE0YywgMHgwMDAwLCAweDIwMjEsIDB4NDAwMCwgMHgwODBjLAorCTB4NGM3ZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LCAweDM2OTcsIDB4MDAxMCwgMHgwMTJlLAorCTB4MGNjMCwgMHg3YzM2LCAweDk0ODYsIDB4NDAwMCwgMHgwMTE4LCAweDc4MzMsIDB4MDAxMSwgMHgwMDEwLAorCTB4NzgzMywgMHgwMDEwLCAweDdjODIsIDB4Nzk4NiwgMHg3YThhLCAweDdiOGUsIDB4MjA5MSwgMHg0MDgwLAorCTB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDEyMDAsIDB4NzAwNywgMHgwMDAxLAorCTB4MjA5MSwgMHg1MDAwLCAweDcwMGYsIDB4MDAwMCwgMHgwMTJlLCAweDAwMDUsIDB4MjAyMSwgMHg0MDAxLAorCTB4MDhiMCwgMHgyMDIxLCAweDQwMDIsIDB4MDg5OCwgMHgyMDIxLCAweDQwMDMsIDB4MDg4MCwgMHgyMDIxLAorCTB4NDAwNSwgMHgwODY4LCAweDIwMjEsIDB4NDAwNiwgMHgwODUwLCAweDIwMzksIDB4MDAwMSwgMHg5MDJlLAorCTB4MjUyMCwgMHg3Yjg4LCAweDdhOGMsIDB4Nzg4NCwgMHg3OTkwLCAweDgxZmYsIDB4MGQ5OCwgMHgwODA0LAorCTB4NGM4YSwgMHgyMDM5LCAweDAwMDEsIDB4OTAyZSwgMHgyNTIwLCAweDdiODgsIDB4N2E4YywgMHg3ODg0LAorCTB4Nzk5MCwgMHgwODA0LCAweDRjOGQsIDB4Nzk4NCwgMHg3ODg4LCAweDIxMTQsIDB4MjAwYSwgMHgwODA0LAorCTB4MzY4ZCwgMHg3OTg0LCAweDIxMTQsIDB4MDgwNCwgMHgzNjhkLCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LAorCTB4MDAyMSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMDIxLCAweDIwYTksIDB4MDAxZiwgMHg0MDAzLAorCTB4Nzk4NCwgMHg3YTg4LCAweDdiOGMsIDB4MDgwNCwgMHgzNjhkLCAweDc4ODQsIDB4MjA2MCwgMHgwODA0LAorCTB4Mzc0MiwgMHgyMDA5LCAweDAwMDMsIDB4MjAxMSwgMHgwMDAzLCAweDIwMTksIDB4MDAxNCwgMHg3ODliLAorCTB4MDEzNywgMHg3ODkzLCAweGZmZmYsIDB4MjAwMSwgMHgxODhmLCAweDIwMDQsIDB4OTAwNSwgMHgwMTE4LAorCTB4Nzg5NiwgMHgwODA0LCAweDM2OGQsIDB4Nzg5NywgMHgwMDAxLCAweDA4MDQsIDB4MzY4ZCwgMHgyMDM5LAorCTB4MDAwMSwgMHg3ZDk4LCAweDdjOWMsIDB4MDgwNCwgMHgzNmM5LCAweDIwMzksIDB4MDAwMSwgMHg3ZDk4LAorCTB4N2M5YywgMHgwODA0LCAweDM2ZDUsIDB4NzlhMCwgMHg5MTgyLCAweDAwNDAsIDB4MDIxMCwgMHgwODA0LAorCTB4MzZjMiwgMHgyMTM4LCAweDdkOTgsIDB4N2M5YywgMHgwODA0LCAweDM2YzksIDB4NzlhMCwgMHg5MTgyLAorCTB4MDA0MCwgMHgwMjEwLCAweDA4MDQsIDB4MzZjMiwgMHgyMTM4LCAweDdkOTgsIDB4N2M5YywgMHgwODA0LAorCTB4MzZkNSwgMHg3OWEwLCAweDkxODIsIDB4MDA0MCwgMHgwMjEwLCAweDA4MDQsIDB4MzZjMiwgMHgyMWU4LAorCTB4Nzk4NCwgMHg3ODg4LCAweDIwYTksIDB4MDAwMSwgMHgyMWEwLCAweDQwMDQsIDB4MDgwNCwgMHgzNjhkLAorCTB4MjA2MSwgMHgwODAwLCAweGUxMGMsIDB4OTAwNiwgMHgyYzE1LCAweDkyMDAsIDB4OGM2MCwgMHg4MTA5LAorCTB4MWRkOCwgMHgyMDEwLCAweDkwMDUsIDB4MDkwNCwgMHgzNjhkLCAweDA4MDQsIDB4MzZiYywgMHg3OWEwLAorCTB4OTE4MiwgMHgwMDQwLCAweDAyMTAsIDB4MDgwNCwgMHgzNmMyLCAweDIxZTAsIDB4MjBhOSwgMHgwMDAxLAorCTB4Nzk4NCwgMHgyMTk4LCAweDQwMTIsIDB4MDgwNCwgMHgzNjhkLCAweDIwNjksIDB4MTg0NywgMHg3ODg0LAorCTB4Nzk5MCwgMHg5MTFhLCAweDFhMDQsIDB4MzZjMiwgMHg4MDE5LCAweDA5MDQsIDB4MzZjMiwgMHg2ODRhLAorCTB4Njk0MiwgMHg3ODhjLCAweDY4NTIsIDB4Nzg4OCwgMHg2ODU2LCAweDkwMDYsIDB4Njg1YSwgMHg2ODVlLAorCTB4MDgwYywgMHg3YWU3LCAweDA4MDQsIDB4MzY4ZCwgMHgyMDY5LCAweDE4NDcsIDB4Nzg4NCwgMHg3OTk0LAorCTB4OTExYSwgMHgxYTA0LCAweDM2YzIsIDB4ODAxOSwgMHgwOTA0LCAweDM2YzIsIDB4Njg0ZSwgMHg2OTQ2LAorCTB4Nzg4YywgMHg2ODYyLCAweDc4ODgsIDB4Njg2NiwgMHg5MDA2LCAweDY4NmEsIDB4Njg2ZSwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmQ2NiwgMHgwMTJlLCAweDA4MDQsIDB4MzY4ZCwgMHg5MDJlLAorCTB4MjUyMCwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsIDB4MzZiZiwgMHg3OTg0LAorCTB4N2I4OCwgMHg3YThjLCAweDIwYTksIDB4MDAwNSwgMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxOGE2LAorCTB4NDEwMSwgMHgwODBjLCAweDRjNDEsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNmJmLAorCTB4MjAwOSwgMHgwMDIwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweGFmNjAsIDB4MDgwYywgMHg0YzhhLAorCTB4NzAxZiwgMHgzN2IzLCAweDAwMDUsIDB4YTg2NCwgMHgyMDA4LCAweDkwODQsIDB4MDBmZiwgMHg5MDk2LAorCTB4MDAxMSwgMHgwMTY4LCAweDkwOTYsIDB4MDAxOSwgMHgwMTUwLCAweDkwOTYsIDB4MDAxNSwgMHgwMTM4LAorCTB4OTA5NiwgMHgwMDQ4LCAweDAxMjAsIDB4OTA5NiwgMHgwMDI5LCAweDE5MDQsIDB4MzZiZiwgMHg4MTBmLAorCTB4OTE4YywgMHgwMGZmLCAweDA5MDQsIDB4MzZiZiwgMHg3MTEyLCAweDcwMTAsIDB4ODAwMSwgMHgwNTYwLAorCTB4NzAxMiwgMHgwODBjLCAweDRjNDEsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNmJmLAorCTB4MjAwOSwgMHgwMDIwLCAweDcwNjgsIDB4MjA0MCwgMHhhMjhjLCAweGEzOTAsIDB4YTQ5NCwgMHhhNTk4LAorCTB4OTI5MCwgMHgwMDQwLCAweDkzOTksIDB4MDAwMCwgMHg5NGExLCAweDAwMDAsIDB4OTVhOSwgMHgwMDAwLAorCTB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4YWY2MCwgMHgwODBjLCAweDRjOGEsIDB4NzAxZiwgMHgzN2YxLAorCTB4MDAwNSwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDk2LCAweDAwMDIsIDB4MDEyMCwgMHg5MDk2LAorCTB4MDAwYSwgMHgxOTA0LCAweDM2YmYsIDB4MDg4OCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDE0LAorCTB4MjA0OCwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDk2LAorCTB4MDAyOSwgMHgxMTQ4LCAweGMyZmQsIDB4YWE3YSwgMHgwODBjLCAweDYzMGEsIDB4MDEzOCwgMHhhODdhLAorCTB4YTk4MiwgMHgwMTJlLCAweDAwNjAsIDB4MDgwYywgMHg2NjNhLCAweDExMzAsIDB4NzAwNywgMHgwMDAzLAorCTB4NzAxZiwgMHgzODFmLCAweDAxMmUsIDB4MDAwNSwgMHgwODBjLCAweDcyNWUsIDB4MDEyZSwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwYTksIDB4MDAwNSwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxOGE2LAorCTB4NDAwYSwgMHgyMTAwLCAweDkyMTAsIDB4OTM5OSwgMHgwMDAwLCAweDk0YTEsIDB4MDAwMCwgMHg5NWE5LAorCTB4MDAwMCwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgyMDA5LCAweDAwMjAsIDB4MDEyZSwgMHhhZjYwLAorCTB4MDgwNCwgMHg0YzhkLCAweDIwOTEsIDB4ODAwMCwgMHg3ODM3LCAweDQwMDAsIDB4NzgzMywgMHgwMDEwLAorCTB4Nzg4MywgMHg0MDAwLCAweDc4ODcsIDB4NDk1MywgMHg3ODhiLCAweDUwMjAsIDB4Nzg4ZiwgMHgyMDIwLAorCTB4MjAwOSwgMHgwMTdmLCAweDIxMDQsIDB4Nzg5MiwgMHgzZjAwLCAweDc4OTYsIDB4MjA2MSwgMHgwMTAwLAorCTB4NjIwMCwgMHgyMDYxLCAweDAyMDAsIDB4NjAzYywgMHg4MDA3LCAweDkyMDUsIDB4Nzg5YSwgMHgyMDA5LAorCTB4MDRmZCwgMHgyMTA0LCAweDc4OWUsIDB4MjA5MSwgMHg1MDAwLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLAorCTB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MDE4MCwgMHgyMDAxLCAweDFhMjUsIDB4MjAwNCwgMHg5MDA1LAorCTB4MDEyOCwgMHgyMDAxLCAweDAwOGIsIDB4MjAwNCwgMHhkMGZjLCAweDBkZDgsIDB4MjAwMSwgMHgwMDhhLAorCTB4MjAwMywgMHgwMDAyLCAweDIwMDMsIDB4MTAwMSwgMHgyMDcxLCAweDAwODAsIDB4MDgwNCwgMHgwNDI3LAorCTB4ODFmZiwgMHgxOTA0LCAweDM2YmYsIDB4Nzk4NCwgMHgwODBjLCAweDY3YjQsIDB4MTkwNCwgMHgzNmMyLAorCTB4N2U5OCwgMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLCAweDFhMDQsIDB4MzZjMiwgMHg3Yzg4LAorCTB4N2Q4YywgMHgwODBjLCAweDY5ZjEsIDB4MDgwYywgMHg2OTdlLCAweDE1MTgsIDB4MjA2MSwgMHgxZGRjLAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg2MDE0LAorCTB4OTA0ZCwgMHgwMTMwLCAweGE4NmMsIDB4OTQwNiwgMHgxMTE4LCAweGE4NzAsIDB4OTUwNiwgMHgwMTUwLAorCTB4MDEyZSwgMHg5Y2UwLCAweDAwMWMsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxYTA0LAorCTB4MzZiZiwgMHgwYzMwLCAweDA4MGMsIDB4Y2FlOSwgMHgwMTJlLCAweDA5MDQsIDB4MzZiZiwgMHgwODA0LAorCTB4MzY4ZCwgMHg5MDBlLCAweDIwMDEsIDB4MDAwNSwgMHgwODBjLCAweDcyNWUsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgwODBjLCAweGQyMjYsIDB4MDgwYywgMHg3MDEyLCAweDAxMmUsIDB4MDgwNCwgMHgzNjhkLAorCTB4MDBhNiwgMHgyOTUwLCAweGIxOTgsIDB4MDgwYywgMHg2N2I0LCAweDE5MDQsIDB4MzkwYSwgMHhiNmE0LAorCTB4OTY4NCwgMHgzZmZmLCAweDkwODIsIDB4NDAwMCwgMHgxNmU4LCAweGI0OWMsIDB4YjVhMCwgMHgwODBjLAorCTB4NjlmMSwgMHgwODBjLCAweDY5N2UsIDB4MTUyMCwgMHgyMDYxLCAweDFkZGMsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDYwMTQsIDB4OTA0ZCwgMHgwMTMwLAorCTB4YTg2YywgMHg5NDA2LCAweDExMTgsIDB4YTg3MCwgMHg5NTA2LCAweDAxNTgsIDB4MDEyZSwgMHg5Y2UwLAorCTB4MDAxYywgMHgyMDAxLCAweDE4MWEsIDB4MjAwNCwgMHg5YzAyLCAweDIwMDksIDB4MDAwZCwgMHgxMmIwLAorCTB4MGMyOCwgMHgwODBjLCAweGNhZTksIDB4MDEyZSwgMHgyMDA5LCAweDAwMDMsIDB4MDE3OCwgMHgwMGUwLAorCTB4OTAwZSwgMHgyMDAxLCAweDAwMDUsIDB4MDgwYywgMHg3MjVlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MDgwYywgMHhkMjI2LCAweDA4MGMsIDB4NzAwNiwgMHgwMTJlLCAweDAwNzAsIDB4YjA5NywgMHg0MDA1LAorCTB4YjE5YSwgMHgwMDEwLCAweGIwOTcsIDB4NDAwNiwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLAorCTB4MDAzMCwgMHgyYTQ4LCAweDAwYWUsIDB4MDAwNSwgMHhiMDk3LCAweDQwMDAsIDB4OTAwNiwgMHg5MThkLAorCTB4MDAwMSwgMHgyMDA4LCAweDJhNDgsIDB4MDBhZSwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNmJmLAorCTB4MDgwYywgMHg0YzU4LCAweDA5MDQsIDB4MzZjMiwgMHgwODBjLCAweDY4N2IsIDB4MDkwNCwgMHgzNmJmLAorCTB4MDgwYywgMHg2OWY3LCAweDA5MDQsIDB4MzZiZiwgMHgwODA0LCAweDQ2YWEsIDB4ODFmZiwgMHgxOTA0LAorCTB4MzZiZiwgMHgwODBjLCAweDRjNzQsIDB4MDkwNCwgMHgzNmMyLCAweDA4MGMsIDB4NmE4NSwgMHgwOTA0LAorCTB4MzZiZiwgMHgyMDE5LCAweDAwMDUsIDB4NzlhOCwgMHgwODBjLCAweDZhMTIsIDB4MDkwNCwgMHgzNmJmLAorCTB4Nzg4OCwgMHg5MDhhLCAweDEwMDAsIDB4MWEwNCwgMHgzNmMyLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLAorCTB4OTEwOCwgMHgwODBjLCAweDg5YTEsIDB4NzlhOCwgMHhkMTg0LCAweDE5MDQsIDB4MzY4ZCwgMHgwODA0LAorCTB4NDZhYSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg4MWZmLCAweDAxMTgsIDB4MjAwOSwgMHgwMDAxLAorCTB4MDQ1MCwgMHgyMDI5LCAweDA3ZmYsIDB4NjQ1YywgMHgyNDAwLCAweDk1MDYsIDB4MDFmOCwgMHgyNTA4LAorCTB4MDgwYywgMHg2N2I0LCAweDExZDgsIDB4MDgwYywgMHg2YTg1LCAweDExMjgsIDB4MjAwOSwgMHgwMDAyLAorCTB4NjJjMCwgMHgyNTE4LCAweDAwYzAsIDB4MjAxOSwgMHgwMDA0LCAweDkwMGUsIDB4MDgwYywgMHg2YTEyLAorCTB4MTExOCwgMHgyMDA5LCAweDAwMDYsIDB4MDA3OCwgMHg3ODg0LCAweDkwOGEsIDB4MTAwMCwgMHgxMjcwLAorCTB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHgwODBjLCAweDg5YTEsIDB4ODUyOSwgMHgxYWUwLAorCTB4MDEyZSwgMHgwODA0LCAweDM2OGQsIDB4MDEyZSwgMHgwODA0LCAweDM2YmYsIDB4MDEyZSwgMHgwODA0LAorCTB4MzZjMiwgMHgwODBjLCAweDRjNTgsIDB4MDkwNCwgMHgzNmMyLCAweDA4MGMsIDB4Njg3YiwgMHgwOTA0LAorCTB4MzZiZiwgMHgwODBjLCAweGFjZmMsIDB4YmFhMCwgMHgyMDE5LCAweDAwMDUsIDB4MDBjNiwgMHg5MDY2LAorCTB4MDgwYywgMHg5N2IwLCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweDk2NmQsIDB4OTAwZSwgMHgwODBjLAorCTB4ZTc1ZCwgMHgwMDdlLCAweDAwY2UsIDB4MDgwYywgMHhhZDE4LCAweDA4MGMsIDB4NjlmMSwgMHgwODA0LAorCTB4MzY4ZCwgMHgwODBjLCAweDRjNTgsIDB4MDkwNCwgMHgzNmMyLCAweDA4MGMsIDB4NjlmMSwgMHgyMjA4LAorCTB4MDgwNCwgMHgzNjhkLCAweDAxNTYsIDB4MDBkNiwgMHgwMGU2LCAweDAwYzYsIDB4MjA2OSwgMHgxOTEwLAorCTB4NjgxMCwgMHg2OTE0LCAweDkxMGEsIDB4MTIwOCwgMHg5MDBlLCAweDY4MTYsIDB4OTAxNiwgMHg5MDFlLAorCTB4MjA3MSwgMHgxOWU4LCAweDcwMjgsIDB4OTA2NSwgMHgwMTE4LCAweDgyMTAsIDB4NjAwYywgMHgwY2Q4LAorCTB4MjMwMCwgMHg5MjE4LCAweDAwY2UsIDB4MDBlZSwgMHgwMGRlLCAweDAxNWUsIDB4MDgwNCwgMHgzNjhkLAorCTB4MDBmNiwgMHgwMDE2LCAweDkwN2QsIDB4MDEzOCwgMHg5MDA2LCAweDgwMDAsIDB4MmYwYywgMHg4MWZmLAorCTB4MDExMCwgMHgyMTc4LCAweDBjZDAsIDB4MDAxZSwgMHgwMGZlLCAweDAwMDUsIDB4MjA2OSwgMHgxOTEwLAorCTB4NjkxMCwgMHg2MmJjLCAweDA4MDQsIDB4MzY4ZCwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLAorCTB4MDgwNCwgMHgzNmJmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NTg1NCwgMHgwMTI4LAorCTB4MjAwOSwgMHgwMDA3LCAweDAxMmUsIDB4MDgwNCwgMHgzNmJmLCAweDAxMmUsIDB4NjE1YywgMHg5MTkwLAorCTB4MzQ4ZSwgMHgyMjE1LCAweDkyOTQsIDB4MDBmZiwgMHg2MzdjLCAweDgzZmYsIDB4MDEwOCwgMHg2MjgwLAorCTB4NjdkYywgMHg5N2M0LCAweDAwMGEsIDB4OThjNiwgMHgwMDBhLCAweDExMTgsIDB4MjAzMSwgMHgwMDAxLAorCTB4MDBlOCwgMHg5N2M0LCAweDAwMjIsIDB4OThjNiwgMHgwMDIyLCAweDExMTgsIDB4MjAzMSwgMHgwMDAzLAorCTB4MDBhOCwgMHg5N2M0LCAweDAwMTIsIDB4OThjNiwgMHgwMDEyLCAweDExMTgsIDB4MjAzMSwgMHgwMDAyLAorCTB4MDA2OCwgMHgwODBjLCAweDc3OWUsIDB4MTExOCwgMHgyMDMxLCAweDAwMDQsIDB4MDAzOCwgMHhkNzljLAorCTB4MDEyMCwgMHgyMDA5LCAweDAwMDUsIDB4MDgwNCwgMHgzNmJmLCAweDkwMzYsIDB4N2U5YSwgMHg3ZjllLAorCTB4MDgwNCwgMHgzNjhkLCAweDYxNGMsIDB4NjI1MCwgMHgyMDE5LCAweDE5ODYsIDB4MjMxYywgMHgyMDAxLAorCTB4MTk4NywgMHgyMDA0LCAweDc4OWEsIDB4MDgwNCwgMHgzNjhkLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4NjEzOCwgMHg2MjNjLCAweDYzNDAsIDB4MDEyZSwgMHgwODA0LCAweDM2OGQsIDB4MDgwYywgMHg0Yzc0LAorCTB4MDkwNCwgMHgzNmMyLCAweGJhNDQsIDB4YmIzOCwgMHgwODA0LCAweDM2OGQsIDB4MDgwYywgMHgwZDg1LAorCTB4MDgwYywgMHg0Yzc0LCAweDIxMTAsIDB4MDkwNCwgMHgzNmMyLCAweGI4MDQsIDB4OTA4YywgMHgwMGZmLAorCTB4OTE4ZSwgMHgwMDA2LCAweDAxNDAsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsIDB4MDYwMCwgMHgyMDA5LAorCTB4MDAwOSwgMHgxOTA0LCAweDM2YmYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAxOSwgMHgwMDA1LAorCTB4MDBjNiwgMHg5MDY2LCAweDA4MGMsIDB4YWNmYywgMHgwODBjLCAweGE3ZTIsIDB4MDgwYywgMHg5N2IwLAorCTB4MDA3NiwgMHg5MDNlLCAweDA4MGMsIDB4OTY2ZCwgMHg5MDBlLCAweDA4MGMsIDB4ZTc1ZCwgMHgwMDdlLAorCTB4MDBjZSwgMHgwODBjLCAweGFkMTgsIDB4YjgwNywgMHgwNDA3LCAweDAxMmUsIDB4MDgwNCwgMHgzNjhkLAorCTB4NjE0YywgMHg2MjUwLCAweDc4ODQsIDB4NjA0ZSwgMHg3Yjg4LCAweDYzNTIsIDB4MjA2OSwgMHgxODQ3LAorCTB4ODMxZiwgMHg5MzA1LCAweDY4MTYsIDB4Nzg4YywgMHgyMDY5LCAweDE5ODYsIDB4MmQxYywgMHgyMDZhLAorCTB4N2U5OCwgMHg5NjgyLCAweDAwMTQsIDB4MTIxMCwgMHgyMDMxLCAweDA3ZDAsIDB4MjA2OSwgMHgxOTg3LAorCTB4MmQwNCwgMHgyNjZhLCAweDc4OWEsIDB4MDgwNCwgMHgzNjhkLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4NjEzOCwgMHg3ODg0LCAweDYwM2EsIDB4OTEwZSwgMHhkMWI0LCAweDE5MGMsIDB4MGVlYiwgMHhkMGM0LAorCTB4MDFhOCwgMHgwMGQ2LCAweDc4YTgsIDB4MjAwOSwgMHgxOTlkLCAweDIwMGEsIDB4NzhhYywgMHgyMDExLAorCTB4MTk5ZSwgMHgyMDEyLCAweDIwNjksIDB4MDEwMCwgMHg2ODM4LCAweDkwODYsIDB4MDAwNywgMHgxMTE4LAorCTB4MjIxNCwgMHg2YTVhLCAweDAwMTAsIDB4MjEwYywgMHg2OTVhLCAweDAwZGUsIDB4Nzg4OCwgMHhkMGVjLAorCTB4MDE3OCwgMHg2MDM0LCAweGMwOGQsIDB4NjAzNiwgMHgyMDAxLCAweDAwNTAsIDB4NjA3NiwgMHg2MDdhLAorCTB4NjA1NiwgMHg2MDZiLCAweDI2OWMsIDB4MDBjNiwgMHgyMDYxLCAweDFiNzMsIDB4MjA2MiwgMHgwMGNlLAorCTB4MjAxMSwgMHgwMTE2LCAweDIyMGMsIDB4Nzg4OCwgMHhkMDhjLCAweDAxMTgsIDB4OTE4ZCwgMHgwMDQwLAorCTB4MDAxMCwgMHg5MThjLCAweGZmN2YsIDB4MjExMiwgMHg2MTM0LCAweGQxOGMsIDB4MjAwMSwgMHgwMDAwLAorCTB4MDEwOCwgMHg2MDNjLCAweDc5ODgsIDB4NjEzZSwgMHg2MTQwLCAweDkxMGQsIDB4Nzg4YywgMHg2MDQyLAorCTB4NjIzNCwgMHhkMjhjLCAweDAxMjAsIDB4N2E4OCwgMHg5Mjk0LCAweDEwMDAsIDB4OTIwNSwgMHg5MTBlLAorCTB4ZDFlNCwgMHgxOTBjLCAweDBmMDYsIDB4OTA4NCwgMHgwMDIwLCAweDAxMzAsIDB4NzhiNCwgMHg2MDQ2LAorCTB4OTA4NCwgMHgwMDAxLCAweDA5MGMsIDB4NDM5NywgMHg2MDQwLCAweGQwY2MsIDB4MDEyMCwgMHg3OGIwLAorCTB4MjAxMSwgMHgwMTE0LCAweDIwMTIsIDB4MDEyZSwgMHgwODA0LCAweDM2OGQsIDB4MDBmNiwgMHgyMDc5LAorCTB4MTgwMCwgMHg3YTM4LCAweGE4OTgsIDB4OTA4NCwgMHhmZWJmLCAweDkyMTUsIDB4YTg5YywgMHg5MDg0LAorCTB4ZmViZiwgMHg4MDAyLCAweDkyMTQsIDB4NzgzOCwgMHg5MDg0LCAweDAxNDAsIDB4OTIxNSwgMHg3YTNhLAorCTB4YTg5NywgMHg0MDAwLCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMGZlLAorCTB4MDAwNSwgMHg3ODk4LCAweDkwMDUsIDB4MDFhOCwgMHg3ODg4LCAweDkwMjUsIDB4MDkwNCwgMHgzNmMyLAorCTB4Nzg4YywgMHg5MDJkLCAweDA5MDQsIDB4MzZjMiwgMHg5MDBlLCAweDA4MGMsIDB4NjdiNCwgMHgxMTIwLAorCTB4YmE0NCwgMHhiYjM4LCAweGJjNDYsIDB4YmQzYSwgMHg5MTg2LCAweDA3ZmYsIDB4MDE5MCwgMHg4MTA4LAorCTB4MGNhMCwgMHgwODBjLCAweDRjNzQsIDB4MDkwNCwgMHgzNmMyLCAweDc4ODgsIDB4OTAwZCwgMHgwOTA0LAorCTB4MzZjMiwgMHg3ODhjLCAweDkwMDUsIDB4MDkwNCwgMHgzNmMyLCAweGJhNDQsIDB4Yjk0NiwgMHhiYjM4LAorCTB4YjgzYSwgMHgwODA0LCAweDM2OGQsIDB4MjAxMSwgMHhiYzA5LCAweDAwMTAsIDB4MjAxMSwgMHhiYzA1LAorCTB4MDgwYywgMHg1ODU0LCAweDE5MDQsIDB4MzZiZiwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg3OTg0LAorCTB4OTE4NiwgMHgwMGZmLCAweDExMzAsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsIDB4OTA4NSwgMHhmZjAwLAorCTB4MDA4OCwgMHg5MTgyLCAweDAwN2YsIDB4MTZlMCwgMHg5MTg4LCAweDM0OGUsIDB4MjEwZCwgMHg5MThjLAorCTB4MDBmZiwgMHgyMDAxLCAweDE4MTgsIDB4MjAwNCwgMHgwMDI2LCAweDkxMTYsIDB4MDAyZSwgMHgwNTgwLAorCTB4ODEwZiwgMHg5MTA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMDYsIDB4MDgwYywgMHhiMTE2LAorCTB4MDAwZSwgMHgwNTEwLCAweDYwMmUsIDB4NjIwYSwgMHg3OTg0LCAweDAwYjYsIDB4MDgwYywgMHg2NzRmLAorCTB4MmIwOCwgMHgwMGJlLCAweDE1MDAsIDB4NjExMiwgMHg2MDIzLCAweDAwMDEsIDB4MDgwYywgMHg0YzQxLAorCTB4MDFkMCwgMHg5MDA2LCAweGE4NjYsIDB4NzAwNywgMHgwMDAzLCAweGE4MzIsIDB4YTg2OCwgMHhjMGZkLAorCTB4YTg2YSwgMHg3MDFmLCAweDNiOWUsIDB4MjkwMCwgMHg2MDE2LCAweDIwMDksIDB4MDAzMiwgMHgwODBjLAorCTB4YjIwYSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMTJlLCAweDAwY2UsIDB4MDgwNCwgMHgzNmJmLAorCTB4MDBjZSwgMHgwODA0LCAweDM2YzIsIDB4MDgwYywgMHhiMTZjLCAweDBjYjAsIDB4YTgzMCwgMHg5MDg2LAorCTB4MDEwMCwgMHgwOTA0LCAweDM2YmYsIDB4MDgwNCwgMHgzNjhkLCAweDIwNjEsIDB4MWE3MywgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDYwMDAsIDB4ZDA4NCwgMHgwMTcwLCAweDYxMDQsIDB4NjIwOCwgMHgyMDYxLAorCTB4MTgwMCwgMHg2MzU0LCAweDYwNzQsIDB4Nzg5YSwgMHg2MGMwLCAweDc4OWUsIDB4NjBiYywgMHg3OGFhLAorCTB4MDEyZSwgMHgwODA0LCAweDM2OGQsIDB4OTAwZSwgMHgyMTEwLCAweDBjODgsIDB4ODFmZiwgMHgxOTA0LAorCTB4MzZiZiwgMHgwODBjLCAweDc3OWUsIDB4MDkwNCwgMHgzNmJmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4NjI1NCwgMHg2MDc0LCAweDkyMDIsIDB4MDI0OCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHgyNmY1LAorCTB4MDgwYywgMHg1YTdjLCAweDAxMmUsIDB4MDgwNCwgMHgzNjhkLCAweDAxMmUsIDB4MDgwNCwgMHgzNmMyLAorCTB4MDAwNiwgMHgwMDE2LCAweDAwYzYsIDB4MDBlNiwgMHgyMDAxLCAweDE5YWEsIDB4MjA3MCwgMHgyMDYxLAorCTB4MTg0NywgMHg2MDA4LCAweDIwNzIsIDB4OTAwZSwgMHgyMDExLCAweDE0MDAsIDB4MDgwYywgMHg5NTViLAorCTB4NzIwNiwgMHgwMGVlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg4MWZmLCAweDAxMjgsIDB4MDEyZSwgMHgyMDIxLCAweDQwMGIsIDB4MDgwNCwgMHgzNjhmLAorCTB4Nzg4NCwgMHhkMGZjLCAweDAxNTgsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsIDB4OTAwNSwgMHgwMTgwLAorCTB4OTA4MiwgMHgwMGUxLCAweDAyOTgsIDB4MDEyZSwgMHgwODA0LCAweDM2YzIsIDB4MjAwMSwgMHgwMDJhLAorCTB4MjAwNCwgMHg5MDA1LCAweDAxMjgsIDB4MjA2OSwgMHgxODQ3LCAweDY5MDgsIDB4OTEwMiwgMHgxMjMwLAorCTB4MDEyZSwgMHgwODA0LCAweDM2YzIsIDB4MDEyZSwgMHgwODA0LCAweDM2YmYsIDB4MDgwYywgMHhiMDk0LAorCTB4MGRkMCwgMHg3ODg0LCAweGQwZmMsIDB4MDkwNCwgMHgzYzZkLCAweDAwYzYsIDB4MDgwYywgMHg0YzQxLAorCTB4MDBjZSwgMHgwZDg4LCAweGE4NjcsIDB4MDAwMCwgMHg3ODg0LCAweGE4MGEsIDB4Nzg5OCwgMHhhODBlLAorCTB4Nzg5YywgMHhhODEyLCAweDIwMDEsIDB4MDAyZSwgMHgyMDA0LCAweGE4MWEsIDB4MjAwMSwgMHgwMDJmLAorCTB4MjAwNCwgMHhhODFlLCAweDIwMDEsIDB4MDAzMCwgMHgyMDA0LCAweGE4MjIsIDB4MjAwMSwgMHgwMDMxLAorCTB4MjAwNCwgMHhhODI2LCAweDIwMDEsIDB4MDAzNCwgMHgyMDA0LCAweGE4MmEsIDB4MjAwMSwgMHgwMDM1LAorCTB4MjAwNCwgMHhhODJlLCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODAsIDB4MDAwMywgMHg5MDg0LAorCTB4MDBmYywgMHg4MDA0LCAweGE4MTYsIDB4MDgwYywgMHgzZGY3LCAweDA5MjgsIDB4NzAxNCwgMHgyMDQ4LAorCTB4YWQyYywgMHhhYzI4LCAweGFiMWMsIDB4YWExOCwgMHhhOTMwLCAweGE4MDgsIDB4ZDBiNCwgMHgxMTIwLAorCTB4MjAyOSwgMHgwMDAwLCAweDIwMjEsIDB4MDAwMCwgMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLAorCTB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDFiLCAweDA4MGMsIDB4NGM4YSwgMHg3MDFmLAorCTB4M2QzNCwgMHg3MDIzLCAweDAwMDEsIDB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4YWNmYywgMHgwMDQ2LAorCTB4MDA4NiwgMHgwMDk2LCAweDAwYTYsIDB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LAorCTB4MDgwYywgMHgzYmQ4LCAweDIwMDEsIDB4MTlhMCwgMHgyMDAzLCAweDAwMDAsIDB4MjAyMSwgMHgwMDBhLAorCTB4MjA2MSwgMHgwMTAwLCAweDYxMDQsIDB4MDAxNiwgMHg2MGJiLCAweDAwMDAsIDB4NjBiZiwgMHgzMmUxLAorCTB4NjBiZiwgMHgwMDEyLCAweDA4MGMsIDB4M2U2NiwgMHgwODBjLCAweDNlMjUsIDB4MDBmNiwgMHgwMGU2LAorCTB4MDA4NiwgMHgyOTQwLCAweDIwNzEsIDB4MTllOCwgMHgyMDc5LCAweDAwOTAsIDB4MDBkNiwgMHgyMDY5LAorCTB4MDAwMCwgMHg2ODg0LCAweGQwYjQsIDB4MDE0MCwgMHgyMDAxLCAweDAwMzUsIDB4MjAwNCwgMHg3ODBlLAorCTB4MjAwMSwgMHgwMDM0LCAweDIwMDQsIDB4NzgwYSwgMHgwMGRlLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLAorCTB4NDFkYiwgMHgwMDhlLCAweDAwZWUsIDB4MDBmZSwgMHgwODBjLCAweDQwZmQsIDB4MDgwYywgMHg0MDJhLAorCTB4MDViOCwgMHgyMDAxLCAweDAyMGIsIDB4MjAwNCwgMHg5MDg0LCAweDAxNDAsIDB4MWRiOCwgMHgwODBjLAorCTB4NDI0ZiwgMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHg3OGJjLCAweDAwZmUsIDB4OTA4YywgMHgwMDcwLAorCTB4MTU2MCwgMHgyMDcxLCAweDAyMDAsIDB4NzAzNywgMHgwMDAwLCAweDcwNTAsIDB4OTA4NCwgMHhmZjAwLAorCTB4OTA4NiwgMHgzMjAwLCAweDE1MTAsIDB4NzAzNywgMHgwMDAxLCAweDcwNTAsIDB4OTA4NCwgMHhmZjAwLAorCTB4OTA4NiwgMHhlMTAwLCAweDExZDAsIDB4NzAzNywgMHgwMDAwLCAweDcwNTQsIDB4NzAzNywgMHgwMDAwLAorCTB4NzE1YywgMHg5MTA2LCAweDExOTAsIDB4MjAwMSwgMHgxODIwLCAweDIwMDQsIDB4OTEwNiwgMHgxMTY4LAorCTB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4NjAyNCwgMHg5MDg0LCAweDFlMDAsIDB4MDBjZSwgMHgwMTM4LAorCTB4MDgwYywgMHg0MDM0LCAweDA4MGMsIDB4M2UyMCwgMHgwMDU4LCAweDA4MGMsIDB4M2UyMCwgMHgwODBjLAorCTB4NDE3MywgMHgwODBjLCAweDQwZjMsIDB4MjAwMSwgMHgwMjBiLCAweDIwMDQsIDB4ZDBlNCwgMHgwZGQ4LAorCTB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHgyMDYxLCAweDAxMDAsIDB4NjAyNywgMHgwMDAyLAorCTB4MDAxZSwgMHg2MTA2LCAweDIwMTEsIDB4MDIwZCwgMHgyMDEzLCAweDAwMjAsIDB4NjBiYiwgMHgwMDAwLAorCTB4NjBiZiwgMHgwMTA4LCAweDYwYmYsIDB4MDAxMiwgMHgyMDAxLCAweDAwMDQsIDB4MjAwYywgMHg5MThjLAorCTB4ZmZmZCwgMHgyMTAyLCAweDA4MGMsIDB4MTM1MiwgMHgyMDA5LCAweDAwMjgsIDB4MDgwYywgMHgyMjIwLAorCTB4MjAwMSwgMHgwMjI3LCAweDIwMGMsIDB4MjEwMiwgMHgwODBjLCAweGFkMTgsIDB4MDBmZSwgMHgwMGVlLAorCTB4MDBkZSwgMHgwMGNlLCAweDAwYmUsIDB4MDBhZSwgMHgwMDllLCAweDAwOGUsIDB4MDA0ZSwgMHgyMDAxLAorCTB4MTlhMCwgMHgyMDA0LCAweDkwMDUsIDB4MTExOCwgMHgwMTJlLCAweDA4MDQsIDB4MzY4ZCwgMHgwMTJlLAorCTB4MjAyMSwgMHg0MDBjLCAweDA4MDQsIDB4MzY4ZiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LAorCTB4MDA1NiwgMHgwMDc2LCAweDAwODYsIDB4MDA5NiwgMHgwMGQ2LCAweDAxNTYsIDB4NzAxNCwgMHgyMDQ4LAorCTB4NzAyMCwgMHgyMGE4LCAweDgwMDAsIDB4NzAyMiwgMHhhODA0LCAweDkwMDUsIDB4MDkwNCwgMHgzZDkwLAorCTB4MjA0OCwgMHgxZjA0LCAweDNkNDQsIDB4NzA2OCwgMHgyMDQwLCAweGEyOGMsIDB4YTM5MCwgMHhhNDk0LAorCTB4YTU5OCwgMHhhOTMwLCAweGE4MDgsIDB4ZDBiNCwgMHgxMTIwLCAweDIwMjksIDB4MDAwMCwgMHgyMDIxLAorCTB4MDAwMCwgMHgwMDk2LCAweDcwMTQsIDB4MjA0OCwgMHhhODY0LCAweDAwOWUsIDB4OTA4NiwgMHgwMTAzLAorCTB4MDE3MCwgMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLAorCTB4OTA4MCwgMHgwMDFiLCAweDA4MGMsIDB4NGM4YSwgMHg3MDFmLCAweDNkMzQsIDB4MDBiMCwgMHg4OTA2LAogCTB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDFiLAotCTB4MjFhOCwgMHgyN2UwLCAweDIwOTgsIDB4MjdlOCwgMHgyMGEwLCAweDAwMDYsIDB4MDgwYywgMHgwZmNhLAotCTB4MDAwZSwgMHgwODBjLCAweDRjMTQsIDB4MDA3ZSwgMHg3MDFmLCAweDNjZjgsIDB4NzAyMywgMHgwMDAxLAotCTB4MDAwNSwgMHgwODA0LCAweDM2NzMsIDB4MDE1NiwgMHgwMGM2LCAweGE4MTQsIDB4OTA4YSwgMHgwMDFlLAotCTB4MDIxOCwgMHhhODMzLCAweDAwMWUsIDB4MDAxMCwgMHhhODMyLCAweDAwNzgsIDB4ODFmZiwgMHgwMTY4LAotCTB4MDAxNiwgMHgwODBjLCAweDRiYzgsIDB4MDAxZSwgMHgwMTMwLCAweGE4MDAsIDB4MjA0MCwgMHhhMDA4LAotCTB4YTgwYSwgMHgyMTAwLCAweDBjNTgsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLAotCTB4MDE1ZSwgMHgwMDA1LCAweDAwMDYsIDB4MDBmNiwgMHgyMDc5LCAweDAwMDAsIDB4Nzg4MCwgMHg5MDg2LAotCTB4MDA0NCwgMHgwMGZlLCAweDAwMGUsIDB4MDAwNSwgMHgyMDAxLCAweDE5YTEsIDB4MjAwMywgMHgwMDAxLAotCTB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgyMDYxLCAweDAyMDAsIDB4MjAwMSwgMHgxOWFjLAotCTB4MjAwNCwgMHg2MDFhLCAweDIwNjEsIDB4MDEwMCwgMHgyMDAxLCAweDE5YWIsIDB4MjAwNCwgMHg2MGNlLAotCTB4NjEwNCwgMHhjMWFjLCAweDYxMDYsIDB4MDgwYywgMHg0YmM4LCAweGE4MTMsIDB4MDAxOSwgMHhhODE3LAotCTB4MDAwMSwgMHgyOTAwLCAweGE4NWEsIDB4MjAwMSwgMHgwMDJlLCAweDIwMDQsIDB4YTg2NiwgMHgyMDAxLAotCTB4MDAyZiwgMHgyMDA0LCAweGE4NmEsIDB4MjA2MSwgMHgwMDkwLCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLAotCTB4MTlhYiwgMHgyMDA0LCAweDYwMzYsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIzZCwgMHgyMDAxLAotCTB4MDAyYSwgMHgyMDA0LCAweDkwODQsIDB4ZmZmOCwgMHhhODZlLCAweDYwMWEsIDB4YTg3MywgMHgwMDAwLAotCTB4NjAxZiwgMHgwMDAwLCAweDc4Y2EsIDB4OTAwNiwgMHg2MDBhLCAweDYwMGUsIDB4MDBjZSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MDgwYywgMHg0YmM4LCAweDI5NDAsIDB4YTAxMywgMHgwMDE5LAotCTB4YTAxNywgMHgwMDAxLCAweDI4MDAsIDB4YTA1YSwgMHgyMDAxLCAweDAwMzAsIDB4MjAwNCwgMHhhODY2LAotCTB4MjAwMSwgMHgwMDMxLCAweDIwMDQsIDB4YTg2YSwgMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LAotCTB4ZmZmOCwgMHhhODZlLCAweGE4NzMsIDB4MDAwMCwgMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA0LAotCTB4MjAwMSwgMHgwMzAwLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDAwLAotCTB4MjAwMSwgMHgwMDA0LCAweDIwMGMsIDB4OTE4ZCwgMHgwMDAyLCAweDIxMDIsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4ODFmZiwgMHgwMTQ4LCAweDA4MGMsIDB4MmE4MCwgMHgxMTMwLAotCTB4OTAwNiwgMHgwODBjLCAweDI5ZDcsIDB4OTAwNiwgMHgwODBjLCAweDI5YmEsIDB4MjAwMSwgMHgxOWEwLAotCTB4MjAwMywgMHgwMDAwLCAweDc4ODQsIDB4OTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4M2U3OSwgMHgzZTdhLAotCTB4M2U3YiwgMHgzZTc2LCAweDNlNzYsIDB4M2U3NiwgMHgzZTc2LCAweDNlNzYsIDB4MDEyZSwgMHgwODA0LAotCTB4MzZhOCwgMHgwY2UwLCAweDBjZDgsIDB4MDgwYywgMHg3NjlkLCAweDExMjgsIDB4MDEyZSwgMHgyMDA5LAotCTB4MDAxNiwgMHgwODA0LCAweDM2YTUsIDB4ODFmZiwgMHgwMTI4LCAweDAxMmUsIDB4MjAyMSwgMHg0MDBiLAotCTB4MDgwNCwgMHgzNjc1LCAweDIwMDEsIDB4MDE0MSwgMHgyMDA0LCAweGQwZGMsIDB4MGRiMCwgMHgwODBjLAotCTB4YWFmNywgMHgwMDg2LCAweDAwOTYsIDB4MDBhNiwgMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAotCTB4MDBmNiwgMHgwODBjLCAweDNiOWMsIDB4MjAwOSwgMHgwMTAxLCAweDIxMGMsIDB4MDAxNiwgMHg3ZWM4LAotCTB4N2RjYywgMHg5MDA2LCAweDIwNjgsIDB4MjA2MCwgMHgyMDU4LCAweDA4MGMsIDB4NDJlZSwgMHgwODBjLAotCTB4NDIzZSwgMHg5MDNlLCAweDI3MjAsIDB4MDBmNiwgMHgwMGU2LCAweDAwODYsIDB4Mjk0MCwgMHgyMDcxLAotCTB4MTllOSwgMHgyMDc5LCAweDAwOTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsIDB4Njg4NCwgMHhkMGI0LAotCTB4MDEyMCwgMHg2OGQ0LCAweDc4MGUsIDB4NjhkMCwgMHg3ODBhLCAweDAwZGUsIDB4MjAxMSwgMHgwMDAxLAotCTB4MDgwYywgMHg0MTlmLCAweDA4MGMsIDB4MmE4OCwgMHgwODBjLCAweDJhODgsIDB4MDgwYywgMHgyYTg4LAotCTB4MDgwYywgMHgyYTg4LCAweDA4MGMsIDB4NDE5ZiwgMHgwMDhlLCAweDAwZWUsIDB4MDBmZSwgMHgwODBjLAotCTB4NDBjMSwgMHgyMDA5LCAweDljNDAsIDB4ODEwOSwgMHgxMWIwLCAweDA4MGMsIDB4M2ZmOCwgMHgyMDAxLAotCTB4MDAwNCwgMHgyMDBjLCAweDkxOGMsIDB4ZmZmZCwgMHgyMTAyLCAweDAwMWUsIDB4MDBmZSwgMHgwMGVlLAotCTB4MDBkZSwgMHgwMGNlLCAweDAwYmUsIDB4MDBhZSwgMHgwMDllLCAweDAwOGUsIDB4MjAwOSwgMHgwMDE3LAotCTB4MDgwYywgMHgzNmE1LCAweDBjZjgsIDB4MjAwMSwgMHgwMjBiLCAweDIwMDQsIDB4OTA4NCwgMHgwMTQwLAotCTB4MWQxMCwgMHgwMGY2LCAweDIwNzksIDB4MDAwMCwgMHg3ODg0LCAweDAwZmUsIDB4ZDBiYywgMHgwMTc4LAotCTB4MjAwMSwgMHgwMjAxLCAweDIwMGMsIDB4ODFmZiwgMHgwMTUwLCAweDA4MGMsIDB4NDA5ZiwgMHgyZDAwLAotCTB4OWMwNSwgMHg5YjA1LCAweDAxMjAsIDB4MDgwYywgMHgzZmY4LCAweDA4MDQsIDB4M2ZhMSwgMHgwODBjLAotCTB4NDIxMywgMHgwODBjLCAweDQxMzcsIDB4MDgwYywgMHg0MDgyLCAweDA4MGMsIDB4NDBiNywgMHgwMGY2LAotCTB4MjA3OSwgMHgwMTAwLCAweDc4MjQsIDB4ZDBhYywgMHgwMTMwLCAweDhiNTgsIDB4MDgwYywgMHgzZmY4LAotCTB4MDBmZSwgMHgwODA0LCAweDNmYTEsIDB4MDBmZSwgMHgwODBjLCAweDNmZWUsIDB4MTE1MCwgMHg4ZDY4LAotCTB4MjAwMSwgMHgwMDMyLCAweDI2MDIsIDB4MjAwMSwgMHgwMDMzLCAweDI1MDIsIDB4MDgwYywgMHgzZmY4LAotCTB4MDA4MCwgMHg4N2ZmLCAweDAxMzgsIDB4MjAwMSwgMHgwMjAxLCAweDIwMDQsIDB4OTAwNSwgMHgxOTA4LAotCTB4ODczOSwgMHgwMDM4LCAweDIwMDEsIDB4MWE2ZiwgMHgyMDA0LCAweDkwODYsIDB4MDAwMCwgMHgxOTA0LAotCTB4M2VmMSwgMHgyMDAxLCAweDAzMmYsIDB4MjAwMywgMHgwMGY2LCAweDg2MzEsIDB4MTIwOCwgMHg4NTI5LAotCTB4MjUwMCwgMHg5NjA1LCAweDA5MDQsIDB4M2ZhMSwgMHg3ODg0LCAweGQwYmMsIDB4MDEyOCwgMHgyZDAwLAotCTB4OWMwNSwgMHg5YjA1LCAweDE5MDQsIDB4M2ZhMSwgMHhhMDEzLCAweDAwMTksIDB4MjAwMSwgMHgwMzJhLAotCTB4MjAwMywgMHgwMDA0LCAweDc4ODQsIDB4ZDBhYywgMHgxMTQ4LCAweDIwMDEsIDB4MWE2ZiwgMHgyMDAzLAotCTB4MDAwMywgMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA5LCAweDAwMzAsIDB4YTAxNywgMHgwMDAxLAotCTB4NzhiNCwgMHg5MDA1LCAweDAxMDgsIDB4YTAxNiwgMHgyODAwLCAweGEwNWEsIDB4MjAwOSwgMHgwMDQwLAotCTB4MDgwYywgMHgyMjNkLCAweDI5MDAsIDB4YTg1YSwgMHhhODEzLCAweDAwMTksIDB4Nzg4NCwgMHhkMGE0LAotCTB4MTE4MCwgMHhhODE3LCAweDAwMDAsIDB4MDBjNiwgMHgyMGE5LCAweDAwMDQsIDB4MjA2MSwgMHgwMDkwLAotCTB4NjAyYiwgMHgwMDA4LCAweDIwMDEsIDB4MDIwMywgMHgyMDA0LCAweDFmMDQsIDB4M2Y3OCwgMHgwMGNlLAotCTB4MDAzMCwgMHhhODE3LCAweDAwMDEsIDB4NzhiMCwgMHg5MDA1LCAweDAxMDgsIDB4YTgxNiwgMHgwMGY2LAotCTB4MDBjNiwgMHgyMDc5LCAweDAxMDAsIDB4MjA2MSwgMHgwMDkwLCAweDc4MjcsIDB4MDAwMiwgMHgyMDAxLAotCTB4MDAyYSwgMHgyMDA0LCAweDkwODQsIDB4ZmZmOCwgMHg2MDFhLCAweDAwMDYsIDB4MjAwMSwgMHgwMDJiLAotCTB4MjAwNCwgMHg2MDFlLCAweDc4YzYsIDB4MDAwZSwgMHg3OGNhLCAweDAwY2UsIDB4MDBmZSwgMHgwODA0LAotCTB4M2VhYiwgMHgwMDFlLCAweDAwYzYsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHgyMDYxLAotCTB4MDEwMCwgMHg2MDI3LCAweDAwMDIsIDB4NjEwNiwgMHgyMDExLCAweDAyMGQsIDB4MjAxMywgMHgwMDIwLAotCTB4MjAwMSwgMHgwMDA0LCAweDIwMGMsIDB4OTE4YywgMHhmZmZkLCAweDIxMDIsIDB4MDgwYywgMHgxMzQ2LAotCTB4Nzg4NCwgMHg5MDg0LCAweDAwMDMsIDB4OTA4NiwgMHgwMDAyLCAweDAxYjAsIDB4MjAwOSwgMHgwMDI4LAotCTB4MDgwYywgMHgyMjNkLCAweDIwMDEsIDB4MDIyNywgMHgyMDBjLCAweDIxMDIsIDB4NjA1MCwgMHg5MDg0LAotCTB4YjdmZiwgMHgwODBjLCAweDJiMzIsIDB4NjA1MiwgMHg2MDJmLCAweDAwMDAsIDB4NjA0YiwgMHhmN2Y3LAotCTB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgwODBjLCAweGFiMTMsIDB4MDBjZSwgMHgyZDA4LAotCTB4MmMxMCwgMHgyYjE4LCAweDJiMDAsIDB4OWMwNSwgMHg5ZDA1LCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLAotCTB4MDBjZSwgMHgwMGJlLCAweDAwYWUsIDB4MDA5ZSwgMHgwMDhlLCAweDExMTgsIDB4MDEyZSwgMHgwODA0LAotCTB4MzY3MywgMHgwMTJlLCAweDIwMjEsIDB4NDAwYywgMHgwODA0LCAweDM2NzUsIDB4OTA4NSwgMHgwMDAxLAotCTB4MWQwNCwgMHgzZmY3LCAweDIwOTEsIDB4NjAwMCwgMHg4NDIwLCAweDk0ODYsIDB4MDA2NCwgMHgwMDA1LAotCTB4MjAwMSwgMHgwMTA1LCAweDIwMDMsIDB4MDAxMCwgMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA0LAotCTB4MjAwMSwgMHgxYTZmLCAweDIwMDMsIDB4MDAwMCwgMHgwMDcxLCAweDIwMDksIDB4MDA0OCwgMHgwODBjLAotCTB4MjIzZCwgMHgyMDAxLCAweDAyMjcsIDB4MjAyNCwgMHgyNDAyLCAweDIwMDEsIDB4MDEwOSwgMHgyMDAzLAotCTB4NDAwMCwgMHg5MDI2LCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDIwNzEsIDB4MTllOSwgMHg3MDU0LAotCTB4OTA4NiwgMHgwMDAwLCAweDA1MjAsIDB4MjA3OSwgMHgwMDkwLCAweDIwMDksIDB4MDIwNiwgMHgyMTA0LAotCTB4MjAwOSwgMHgwMjAzLCAweDIxMGMsIDB4OTEwNiwgMHgxMTIwLCAweDIwMDksIDB4MDA0MCwgMHgwODBjLAotCTB4MjIzZCwgMHg3ODJjLCAweGQwZmMsIDB4MGQ4OCwgMHgwODBjLCAweDQyMTMsIDB4NzA1NCwgMHg5MDg2LAotCTB4MDAwMCwgMHgxZDU4LCAweDc4MmIsIDB4MDAwNCwgMHg3ODJjLCAweGQwYWMsIDB4MWRlOCwgMHgyMDA5LAotCTB4MDA0MCwgMHgwODBjLCAweDIyM2QsIDB4NzgyYiwgMHgwMDAyLCAweDcwNTcsIDB4MDAwMCwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDIwMDEsIDB4MTgxOCwgMHgyMDBjLAotCTB4NzkzMiwgMHg3OTM2LCAweDA4MGMsIDB4MjZlYSwgMHgwODBjLCAweDJhZmYsIDB4MDgwYywgMHgyYjMyLAotCTB4Nzg0YiwgMHhmN2Y3LCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4Nzg1MCwgMHhjMGU1LAotCTB4Nzg1MiwgMHgyMDE5LCAweDYxYTgsIDB4NzgyMCwgMHhkMDljLCAweDAxMTAsIDB4ODMxOSwgMHgxZGQ4LAotCTB4Nzg1MCwgMHhjMGU0LCAweDc4NTIsIDB4MjAxMSwgMHgwMDQ4LCAweDA4MGMsIDB4MmFkYywgMHg3ODQzLAotCTB4MDA0MCwgMHgyMDE5LCAweDAxZjQsIDB4YTAwMSwgMHhhMDAxLCAweDgzMTksIDB4MWRlMCwgMHgyMDAxLAotCTB4MDEwMCwgMHgwODBjLCAweDJhYTIsIDB4MjAxMSwgMHgwMDIwLCAweDA4MGMsIDB4MmFkYywgMHg3ODQzLAotCTB4MDAwMCwgMHg5MDA2LCAweDA4MGMsIDB4MmFhMiwgMHgyMDExLCAweDAwNDgsIDB4MDgwYywgMHgyYWRjLAotCTB4MDBmZSwgMHgwMDA1LCAweDc4ODQsIDB4ZDBhYywgMHgxMWM4LCAweDAwZjYsIDB4MDBlNiwgMHgyMDcxLAotCTB4MWE2ZiwgMHgyMDc5LCAweDAzMjAsIDB4MjAwMSwgMHgwMjAxLCAweDIwMDQsIDB4OTAwNSwgMHgwMTYwLAotCTB4NzAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MTE0MCwgMHgwMDUxLCAweGQwYmMsIDB4MDEwOCwgMHg4NzM4LAotCTB4NzAwMywgMHgwMDAzLCAweDc4MmIsIDB4MDAxOSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LAotCTB4MjA3OSwgMHgwMzAwLCAweDc4YmMsIDB4MDBmZSwgMHg5MDhjLCAweDAwNzAsIDB4MDE3OCwgMHgyMDA5LAotCTB4MDAzMiwgMHgyNjBhLCAweDIwMDksIDB4MDAzMywgMHgyNTBhLCAweGQwYjQsIDB4MDEwOCwgMHg4YzYwLAotCTB4ZDBhYywgMHgwMTA4LCAweDhkNjgsIDB4ZDBhNCwgMHgwMTA4LCAweDhiNTgsIDB4MDAwNSwgMHgwMGY2LAotCTB4MjA3OSwgMHgwMjAwLCAweDc4MWMsIDB4ZDA4NCwgMHgwMTEwLCAweDc4MzcsIDB4MDA1MCwgMHgwMGZlLAotCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDEwMCwgMHgyMDAxLCAweDE5YWMsIDB4MjAwNCwgMHg3MGUyLAotCTB4MDgwYywgMHgzZGRhLCAweDExODgsIDB4MjAwMSwgMHgxODIwLCAweDIwMDQsIDB4MjAwOSwgMHgxODFmLAotCTB4MjEwYywgMHg5MThjLCAweDAwZmYsIDB4NzA2ZSwgMHg3MTZhLCAweDcwNjYsIDB4OTE4ZCwgMHgzMjAwLAotCTB4NzE2MiwgMHg3MDczLCAweGUxMDksIDB4MDA4MCwgMHg3MDJjLCAweDkwODUsIDB4MDAwMiwgMHg3MDJlLAotCTB4MjAwOSwgMHgxODE4LCAweDIxMGMsIDB4NzE2ZSwgMHg3MDYzLCAweDAxMDAsIDB4NzE2NiwgMHg3MTllLAotCTB4NzA2YiwgMHgwMDAwLCAweDcwNzMsIDB4MDgwOSwgMHg3MDc3LCAweDAwMDgsIDB4NzA3OCwgMHg5MDgwLAotCTB4MDEwMCwgMHg3MDdhLCAweDcwODAsIDB4ODAwMCwgMHg3MDgyLCAweDcwODcsIDB4YWFhYSwgMHg5MDA2LAotCTB4NzA4YSwgMHg3MDhlLCAweDcwN2UsIDB4NzBkNiwgMHg3MGFiLCAweDAwMzYsIDB4NzBhZiwgMHg5NWQ1LAotCTB4NzAxNCwgMHg5MDg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDkyLCAweDcwMTYsIDB4MDgwYywgMHg0MjEzLAotCTB4MDBmNiwgMHgyMDcxLCAweDFhNmYsIDB4MjA3OSwgMHgwMzIwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLAotCTB4Njg4NCwgMHhkMGI0LCAweDAxMjAsIDB4Njg5YywgMHg3ODBlLCAweDY4OTgsIDB4NzgwYSwgMHgwMGRlLAotCTB4MDgwYywgMHgzZGRhLCAweDAxNDAsIDB4MjAwMSwgMHgxOWEwLCAweDIwMGMsIDB4MjAwMywgMHgwMDAxLAotCTB4OTE4ZSwgMHgwMDAxLCAweDAxMjAsIDB4MjAwOSwgMHgwM2U4LCAweDgxMDksIDB4MWRmMCwgMHg3OTJjLAotCTB4ZDFmYywgMHgwMTEwLCAweDc4MmIsIDB4MDAwNCwgMHgyMDExLCAweDAwMTEsIDB4MDgwYywgMHg0MTlmLAotCTB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4NDE5ZiwgMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGY2LAotCTB4MDBlNiwgMHgyMDcxLCAweDFhNmYsIDB4MjA3OSwgMHgwMzIwLCAweDc5MmMsIDB4ZDFmYywgMHgwOTA0LAotCTB4NDE5YywgMHg3ODJiLCAweDAwMDIsIDB4OTAyNiwgMHhkMTljLCAweDE5MDQsIDB4NDE5OCwgMHg3MDAwLAotCTB4MDAwMiwgMHg0MTljLCAweDQxNGQsIDB4NDE3ZCwgMHg0MTk4LCAweGQxYmMsIDB4MTE3MCwgMHhkMWRjLAotCTB4MTE5MCwgMHg4MDAxLCAweDcwMDIsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4NDE5ZiwgMHgwOTA0LAotCTB4NDE5YywgMHgwODBjLCAweDQxOWYsIDB4MDgwNCwgMHg0MTljLCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLAotCTB4NzhiZiwgMHgwMDAwLCAweDAwZmUsIDB4NzgxMCwgMHg3OTE0LCAweDc4MmIsIDB4MDAwNCwgMHg3ODEyLAotCTB4NzkxNiwgMHgyMDAxLCAweDAyMDEsIDB4MjAwYywgMHg4MWZmLCAweDBkZTgsIDB4MDgwYywgMHg0MDlmLAotCTB4MjAwOSwgMHgwMDAxLCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLCAweDc4YjgsIDB4MDBmZSwgMHhkMGVjLAotCTB4MDExMCwgMHgyMDA5LCAweDAwMTEsIDB4NzkyYSwgMHgwMGY4LCAweDgwMDEsIDB4NzAwMiwgMHg5MTg0LAotCTB4MDg4MCwgMHgxMTQwLCAweDc4MmMsIDB4ZDBmYywgMHgxOTA0LCAweDQxNDEsIDB4MjAxMSwgMHgwMDAxLAotCTB4MDBiMSwgMHgwMDkwLCAweGEwMTAsIDB4OTA5MiwgMHgwMDA0LCAweDkwODYsIDB4MDAxNSwgMHgxMTIwLAotCTB4YTAwMCwgMHhhMDVhLCAweDIwMTEsIDB4MDAzMSwgMHhhMjEyLCAweGQxZGMsIDB4MTk2MCwgMHgwODI4LAotCTB4NzgyYiwgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHhhMDE0LAotCTB4OTAwNSwgMHgwNTUwLCAweDgwMDEsIDB4MDAzNiwgMHgwMDk2LCAweGEwMTYsIDB4YTA1OCwgMHgyMDQ4LAotCTB4YTAxMCwgMHgyMDA5LCAweDAwMzEsIDB4OTExYSwgMHg4MzFjLCAweDgzMWMsIDB4OTM4YSwgMHgwMDA3LAotCTB4MWEwYywgMHgwZDc5LCAweDkzOTgsIDB4NDFjZCwgMHgyMzFkLCAweDA4M2YsIDB4OTA4MCwgMHgwMDA0LAotCTB4N2EyYSwgMHg3MTAwLCAweDgxMDgsIDB4NzEwMiwgMHgwMDllLCAweDAwM2UsIDB4OTA4YSwgMHgwMDM1LAotCTB4MTE0MCwgMHgwMDk2LCAweGEwNTgsIDB4MjA0OCwgMHhhODA0LCAweGEwNWEsIDB4MjAwMSwgMHgwMDE5LAotCTB4MDA5ZSwgMHhhMDEyLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDQyMGEsIDB4NDIwMSwgMHg0MWY4LAotCTB4NDFlZiwgMHg0MWU2LCAweDQxZGQsIDB4NDFkNCwgMHhhOTY0LCAweDc5MDIsIDB4YTk2OCwgMHg3OTA2LAotCTB4YTk2YywgMHg3OTEyLCAweGE5NzAsIDB4NzkxNiwgMHgwMDA1LCAweGE5NzQsIDB4NzkwMiwgMHhhOTc4LAotCTB4NzkwNiwgMHhhOTdjLCAweDc5MTIsIDB4YTk4MCwgMHg3OTE2LCAweDAwMDUsIDB4YTk4NCwgMHg3OTAyLAotCTB4YTk4OCwgMHg3OTA2LCAweGE5OGMsIDB4NzkxMiwgMHhhOTkwLCAweDc5MTYsIDB4MDAwNSwgMHhhOTk0LAotCTB4NzkwMiwgMHhhOTk4LCAweDc5MDYsIDB4YTk5YywgMHg3OTEyLCAweGE5YTAsIDB4NzkxNiwgMHgwMDA1LAotCTB4YTlhNCwgMHg3OTAyLCAweGE5YTgsIDB4NzkwNiwgMHhhOWFjLCAweDc5MTIsIDB4YTliMCwgMHg3OTE2LAotCTB4MDAwNSwgMHhhOWI0LCAweDc5MDIsIDB4YTliOCwgMHg3OTA2LCAweGE5YmMsIDB4NzkxMiwgMHhhOWMwLAotCTB4NzkxNiwgMHgwMDA1LCAweGE5YzQsIDB4NzkwMiwgMHhhOWM4LCAweDc5MDYsIDB4YTljYywgMHg3OTEyLAotCTB4YTlkMCwgMHg3OTE2LCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwODYsIDB4MjA3MSwgMHgxOWU5LAotCTB4MjA3OSwgMHgwMDkwLCAweDc5MmMsIDB4ZDFmYywgMHgwMWU4LCAweDc4MmIsIDB4MDAwMiwgMHgyOTQwLAotCTB4OTAyNiwgMHg3MDU0LCAweDAwMDIsIDB4NDIzYSwgMHg0MjI2LCAweDQyMzEsIDB4ODAwMSwgMHg3MDU2LAotCTB4ZDE5YywgMHgxMTgwLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDQxOWYsIDB4MTkwYywgMHg0MTlmLAotCTB4MDA0OCwgMHg4MDAxLCAweDcwNTYsIDB4NzgyYywgMHhkMGZjLCAweDFkMzgsIDB4MjAxMSwgMHgwMDAxLAotCTB4MDgwYywgMHg0MTlmLCAweDAwOGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LAotCTB4MDBjNiwgMHgwMDg2LCAweDIwNjEsIDB4MDIwMCwgMHgyMDAxLCAweDE5YWMsIDB4MjAwNCwgMHg2MDFhLAotCTB4MjA2MSwgMHgwMTAwLCAweDIwMDEsIDB4MTlhYiwgMHgyMDA0LCAweDYwY2UsIDB4NjEwNCwgMHhjMWFjLAotCTB4NjEwNiwgMHgyMDAxLCAweDAwMmMsIDB4MjAwNCwgMHg5MDA1LCAweDA1MjAsIDB4MjAzOCwgMHgyMDAxLAotCTB4MDAyZSwgMHgyMDI0LCAweDIwMDEsIDB4MDAyZiwgMHgyMDFjLCAweDA4MGMsIDB4NGJjOCwgMHhhODEzLAotCTB4MDAxOSwgMHhhZjE2LCAweDI5MDAsIDB4YTg1YSwgMHg5NzhhLCAweDAwMDcsIDB4MDIyMCwgMHgyMTM4LAotCTB4MjAwOSwgMHgwMDA3LCAweDAwMTAsIDB4MjcwOCwgMHg5MDNlLCAweDAwOTYsIDB4YTg1OCwgMHgyMDQ4LAotCTB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4MDA5ZSwgMHgwODBjLCAweDQyYjYsIDB4MWQ2OCwgMHgyOTAwLAotCTB4YTg1YSwgMHgwMGQwLCAweDA4MGMsIDB4NGJjOCwgMHhhODEzLCAweDAwMTksIDB4YTgxNywgMHgwMDAxLAotCTB4MjkwMCwgMHhhODVhLCAweDIwMDEsIDB4MDAyZSwgMHgyMDA0LCAweGE4NjYsIDB4MjAwMSwgMHgwMDJmLAotCTB4MjAwNCwgMHhhODZhLCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODQsIDB4ZmZmOCwgMHhhODZlLAotCTB4MjAwMSwgMHgwMDJiLCAweDIwMDQsIDB4YTg3MiwgMHgyMDYxLCAweDAwOTAsIDB4MjA3OSwgMHgwMTAwLAotCTB4MjAwMSwgMHgxOWFiLCAweDIwMDQsIDB4NjAzNiwgMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyMjNkLAotCTB4MjAwMSwgMHgwMDJhLCAweDIwMDQsIDB4OTA4NCwgMHhmZmY4LCAweDYwMWEsIDB4MDAwNiwgMHgyMDAxLAotCTB4MDAyYiwgMHgyMDA0LCAweDYwMWUsIDB4NzhjNiwgMHgwMDBlLCAweDc4Y2EsIDB4OTAwNiwgMHg2MDBhLAotCTB4NjAwZSwgMHgwMDhlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAotCTB4MDA4MCwgMHhhYTYwLCAweDIyZTgsIDB4MjBhMCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMDg4LAotCTB4NzAyYiwgMHgwMDI2LCAweDc0MDIsIDB4NzMwNiwgMHg5MDA2LCAweDcwMGEsIDB4NzAwZSwgMHg4MTBiLAotCTB4ODEwYiwgMHgyMWE4LCAweDgxMGIsIDB4NzExMiwgMHg3MDJiLCAweDAwNDEsIDB4NzAyYywgMHhkMGZjLAotCTB4MGRlOCwgMHg3MDJiLCAweDAwMDIsIDB4NzAyYiwgMHgwMDQwLCAweDQwMDUsIDB4NzQwMCwgMHg3MzA0LAotCTB4ODdmZiwgMHgwMTkwLCAweDAwODYsIDB4MDA5NiwgMHgyOTQwLCAweDAwODYsIDB4MDgwYywgMHg0YmM4LAotCTB4MDA4ZSwgMHhhMDU4LCAweDAwYTYsIDB4MjA1MCwgMHgyOTAwLCAweGIwMDYsIDB4YTA1YSwgMHgwMGFlLAotCTB4MDA5ZSwgMHgwMDhlLCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDAxLAotCTB4MDAyZCwgMHgyMDA0LCAweDkwMDUsIDB4MDUyOCwgMHgyMDM4LCAweDIwMDEsIDB4MDAzMCwgMHgyMDI0LAotCTB4MjAwMSwgMHgwMDMxLCAweDIwMWMsIDB4MDgwYywgMHg0YmM4LCAweDI5NDAsIDB4YTgxMywgMHgwMDE5LAotCTB4YWYxNiwgMHgyOTAwLCAweGE4NWEsIDB4OTc4YSwgMHgwMDA3LCAweDAyMjAsIDB4MjEzOCwgMHgyMDA5LAotCTB4MDAwNywgMHgwMDEwLCAweDI3MDgsIDB4OTAzZSwgMHgwMDk2LCAweGE4NTgsIDB4MjA0OCwgMHhhODVjLAotCTB4OTA4MCwgMHgwMDE5LCAweDAwOWUsIDB4MDgwYywgMHg0MmI2LCAweDFkNjgsIDB4MjkwMCwgMHhhODVhLAotCTB4MDBkOCwgMHgwODBjLCAweDRiYzgsIDB4Mjk0MCwgMHhhMDEzLCAweDAwMTksIDB4YTAxNywgMHgwMDAxLAotCTB4MjgwMCwgMHhhMDVhLCAweDIwMDEsIDB4MDAzMCwgMHgyMDA0LCAweGEwNjYsIDB4MjAwMSwgMHgwMDMxLAotCTB4MjAwNCwgMHhhMDZhLCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODQsIDB4ZmZmOCwgMHhhMDZlLAotCTB4MjAwMSwgMHgwMDJiLCAweDIwMDQsIDB4YTA3MiwgMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA0LAotCTB4Nzg4NCwgMHhkMGFjLCAweDExODAsIDB4MjAwMSwgMHgwMTAxLCAweDIwMGMsIDB4OTE4ZCwgMHgwMjAwLAotCTB4MjEwMiwgMHhhMDE3LCAweDAwMDAsIDB4MjAwMSwgMHgxYTZmLCAweDIwMDMsIDB4MDAwMywgMHgyMDAxLAotCTB4MDMyYSwgMHgyMDAzLCAweDAwMDksIDB4MjAwMSwgMHgwMzAwLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLAotCTB4MDIwZCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMDA0LCAweDIwMGMsIDB4OTE4ZCwgMHgwMDAyLAotCTB4MjEwMiwgMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjBhOSwgMHgwMDA3LAotCTB4MjBhMSwgMHgxODQwLCAweDIwZTksIDB4MDAwMSwgMHg5MDA2LCAweDQwMDQsIDB4MjBhOSwgMHgwMDE0LAotCTB4MjBhMSwgMHhmZmVjLCAweDIwZTksIDB4MDAwMCwgMHg5MDA2LCAweDQwMDQsIDB4MjAwOSwgMHgwMTNjLAotCTB4MjAwYSwgMHgwMTJlLCAweDc4ODAsIDB4OTA4NiwgMHgwMDUyLCAweDAxMDgsIDB4MDAwNSwgMHgwODA0LAotCTB4MzY3MywgMHg3ZDk4LCAweDdjOWMsIDB4MDgwNCwgMHgzNzc3LCAweDA4MGMsIDB4NzY5ZCwgMHgxOTBjLAotCTB4NjEzZCwgMHg2MDQwLCAweDkwODQsIDB4MDAyMCwgMHgwOWIxLCAweDIwNjksIDB4MTg0NywgMHgyZDAwLAotCTB4MjAwOSwgMHgwMDMwLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4MjAzOSwgMHgwMDAxLAotCTB4MDgwYywgMHg0YzExLCAweDcwMWYsIDB4NDM5NSwgMHgwMDA1LCAweDA4MGMsIDB4NTgyZiwgMHgxMTMwLAotCTB4M2IwMCwgMHgzYTA4LCAweGMxOTQsIDB4YzA5NSwgMHgyMGQ4LCAweDIxZDAsIDB4MjA2OSwgMHgxODQ3LAotCTB4NjgwMCwgMHg5MDA1LCAweDA5MDQsIDB4MzZhOCwgMHg2ODA0LCAweGQwYWMsIDB4MDExOCwgMHhkMGE0LAotCTB4MDkwNCwgMHgzNmE4LCAweGQwOTQsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwgMHgwMTM4LAotCTB4NjIwMCwgMHg5MjkyLCAweDAwMDUsIDB4MDIxOCwgMHg5MThjLCAweGZmZGYsIDB4MDAxMCwgMHg5MThkLAotCTB4MDAyMCwgMHg2MTA2LCAweDAwY2UsIDB4ZDA4YywgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg2MTA0LAotCTB4MDExOCwgMHg5MThkLCAweDAwMTAsIDB4MDAxMCwgMHg5MThjLCAweGZmZWYsIDB4NjEwNiwgMHgwMGNlLAotCTB4ZDA4NCwgMHgwMTU4LCAweDZhMjgsIDB4OTI4YSwgMHgwMDdmLCAweDFhMDQsIDB4MzZhOCwgMHg5Mjg4LAotCTB4MzQ3NCwgMHgyMTBkLCAweDkxOGMsIDB4MDBmZiwgMHg2MTY2LCAweGQwZGMsIDB4MDEzMCwgMHg2ODI4LAotCTB4OTA4YSwgMHgwMDdmLCAweDFhMDQsIDB4MzZhOCwgMHg2MDVlLCAweDY4ODgsIDB4OTA4NCwgMHgwMDMwLAotCTB4ODAwNCwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHgwMDA2LCAweDIwMDksIDB4MTliMywgMHg5MDgwLAotCTB4MjdkZCwgMHgyMDA1LCAweDIwMGEsIDB4MjAwOCwgMHgyMDAxLCAweDAwMTgsIDB4MDgwYywgMHhhYWU4LAotCTB4MjAwOSwgMHgwMzkwLCAweDIwMGIsIDB4MDQwMCwgMHgwMDBlLCAweDIwMDksIDB4MTliNCwgMHg5MDgwLAotCTB4MjdlMSwgMHgyMDA1LCAweDIwMGEsIDB4NjgwOCwgMHg5MDhhLCAweDAxMDAsIDB4MGEwNCwgMHgzNmE4LAotCTB4OTA4YSwgMHgwODQxLCAweDFhMDQsIDB4MzZhOCwgMHg5MDg0LCAweDAwMDcsIDB4MTkwNCwgMHgzNmE4LAotCTB4NjgwYywgMHg5MDA1LCAweDA5MDQsIDB4MzZhOCwgMHg2ODEwLCAweDkwMDUsIDB4MDkwNCwgMHgzNmE4LAotCTB4Njg0OCwgMHg2OTQwLCAweDkxMGEsIDB4MWEwNCwgMHgzNmE4LCAweDgwMDEsIDB4MDkwNCwgMHgzNmE4LAotCTB4Njg0YywgMHg2OTQ0LCAweDkxMGEsIDB4MWEwNCwgMHgzNmE4LCAweDgwMDEsIDB4MDkwNCwgMHgzNmE4LAotCTB4NjgxNCwgMHg5MDhjLCAweDAwZmYsIDB4NjE0ZSwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHg2MDUyLAotCTB4MDgwYywgMHg3OWQwLCAweDA4MGMsIDB4NmMwMywgMHgwODBjLCAweDZjNjUsIDB4NjgwOCwgMHg2MDJhLAotCTB4MDgwYywgMHgyMWFmLCAweDIwMDksIDB4MDE3MCwgMHgyMDBiLCAweDAwODAsIDB4YTAwMSwgMHhhMDAxLAotCTB4MjAwYiwgMHgwMDAwLCAweDAwMzYsIDB4NmIwOCwgMHgwODBjLCAweDI3NDQsIDB4MDAzZSwgMHg2MDAwLAotCTB4OTA4NiwgMHgwMDAwLCAweDE5MDQsIDB4NDUyNCwgMHg2ODE4LCAweDY5MWMsIDB4NmEyMCwgMHg2YjI0LAotCTB4ODAwNywgMHg4MTBmLCAweDgyMTcsIDB4ODMxZiwgMHg2MDE2LCAweDYxMWEsIDB4NjIxZSwgMHg2MzIyLAotCTB4NmMwNCwgMHhkNGY0LCAweDAxNDgsIDB4NjgzMCwgMHg2OTM0LCAweDZhMzgsIDB4NmIzYywgMHg4MDA3LAotCTB4ODEwZiwgMHg4MjE3LCAweDgzMWYsIDB4MDAxMCwgMHg5MDg0LCAweGYwZmYsIDB4NjAwNiwgMHg2MTBhLAotCTB4NjIwZSwgMHg2MzEyLCAweDgwMDcsIDB4ODEwZiwgMHg4MjE3LCAweDgzMWYsIDB4MjBhOSwgMHgwMDA0LAotCTB4MjBhMSwgMHgxOWI1LCAweDIwZTksIDB4MDAwMSwgMHg0MDAxLCAweDIwYTksIDB4MDAwNCwgMHgyMGExLAotCTB4MTljZiwgMHgyMGU5LCAweDAwMDEsIDB4NDAwMSwgMHgwODBjLCAweDg5YmYsIDB4MDBjNiwgMHg5MDBlLAotCTB4MjBhOSwgMHgwMDAxLCAweDZiNzAsIDB4ZDM4NCwgMHgwMWM4LCAweDAwMjAsIDB4ODM5ZCwgMHgxMmIwLAotCTB4MzUwOCwgMHg4MTA5LCAweDA4MGMsIDB4N2Y5NywgMHg2ODc4LCAweDYwMTYsIDB4Njg3NCwgMHgyMDA4LAotCTB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4NjAwYSwgMHg5MTg0LCAweDAwZmYsIDB4NjAwNiwgMHg4MTA4LAotCTB4MTExOCwgMHg2MDAzLCAweDAwMDMsIDB4MDAxMCwgMHg2MDAzLCAweDAwMDEsIDB4MWYwNCwgMHg0NDdlLAotCTB4MDBjZSwgMHgwMGM2LCAweDIwNjEsIDB4MTk5ZCwgMHg2YTg4LCAweDkyODQsIDB4YzAwMCwgMHgyMDEwLAotCTB4OTI4NiwgMHgwMDAwLCAweDExNTgsIDB4MjA2MywgMHgwMDAwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MjlkNywgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyOWJhLCAweDAwODgsIDB4OTI4NiwgMHg0MDAwLAotCTB4MTE0OCwgMHgyMDYzLCAweDAwMDEsIDB4OTAwNiwgMHgwODBjLCAweDI5ZDcsIDB4OTAwNiwgMHgwODBjLAotCTB4MjliYSwgMHgwMDI4LCAweDkyODYsIDB4ODAwMCwgMHgxZDMwLCAweDIwNjMsIDB4MDAwMiwgMHgwMGNlLAotCTB4MDBlNiwgMHgyYzcwLCAweDA4MGMsIDB4MGVjNywgMHgwMGVlLCAweDA4MGMsIDB4MmFmZiwgMHgwODBjLAotCTB4MmIzMiwgMHg2ODg4LCAweGQwZWMsIDB4MDEzMCwgMHgyMDExLCAweDAxMTQsIDB4MjIwNCwgMHg5MDg1LAotCTB4MDE4MCwgMHgyMDEyLCAweDZhODAsIDB4OTI4NCwgMHgwMDMwLCAweDkwODYsIDB4MDAzMCwgMHgxMTI4LAotCTB4OTI5NCwgMHhmZmNmLCAweDkyOTUsIDB4MDAyMCwgMHg2YTgyLCAweDIwMDEsIDB4MTk3ZCwgMHg2YTgwLAotCTB4OTI5NCwgMHgwMDMwLCAweDkyOGUsIDB4MDAwMCwgMHgwMTcwLCAweDkyOGUsIDB4MDAxMCwgMHgwMTE4LAotCTB4OTI4ZSwgMHgwMDIwLCAweDAxNDAsIDB4MjAwMywgMHhhYWFhLCAweDA4MGMsIDB4MjdiOSwgMHgyMDAxLAotCTB4MTk2ZSwgMHgyMTAyLCAweDAwMDgsIDB4MjEwMiwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg2MDJmLAotCTB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDBjZSwgMHgwODBjLCAweDc2OWQsIDB4MDEyOCwgMHgwODBjLAotCTB4NTEwOCwgMHgwMTEwLCAweDA4MGMsIDB4MjcwYSwgMHg2MGQ0LCAweDkwMDUsIDB4MDFjMCwgMHg2MDAzLAotCTB4MDAwMSwgMHgyMDA5LCAweDQ1MGMsIDB4MDBlMCwgMHgwODBjLCAweDc2OWQsIDB4MTE2OCwgMHgyMDExLAotCTB4NzUxMSwgMHgwODBjLCAweDg4MmMsIDB4MjAxMSwgMHg3NTA0LCAweDA4MGMsIDB4ODkzOCwgMHgwODBjLAotCTB4NzlhNCwgMHgwODBjLCAweDc1Y2MsIDB4MDA0MCwgMHgwODBjLCAweDYwMzMsIDB4MDAyOCwgMHg2MDAzLAotCTB4MDAwNCwgMHgyMDA5LCAweDQ1MjQsIDB4MDAyMCwgMHgwODBjLCAweDZiMmYsIDB4MDgwNCwgMHgzNjczLAotCTB4MjAwMSwgMHgwMTcwLCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDA0YywgMHgxMTE4LAotCTB4MjA5MSwgMHgzMWJkLCAweDA4MTcsIDB4MjA5MSwgMHgzMTNkLCAweDA4MTcsIDB4NjAwMCwgMHg5MDg2LAotCTB4MDAwMCwgMHgwOTA0LCAweDM2YTUsIDB4MjA2OSwgMHgxODQ3LCAweDc4OTAsIDB4Njg0MiwgMHg3ODk0LAotCTB4Njg0NiwgMHgyZDAwLCAweDIwMDksIDB4MDAzMCwgMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LAotCTB4MjAzOSwgMHgwMDAxLCAweDA4MDQsIDB4NGMxNCwgMHg5MDA2LCAweDA4MGMsIDB4MjcwYSwgMHg4MWZmLAotCTB4MTkwNCwgMHgzNmE1LCAweDA4MGMsIDB4NzY5ZCwgMHgxMWIwLCAweDA4MGMsIDB4Nzk5ZiwgMHgwODBjLAotCTB4NjE3OCwgMHgwODBjLCAweDM0NjgsIDB4MDExOCwgMHg2MTMwLCAweGMxOGQsIDB4NjEzMiwgMHgwODBjLAotCTB4ZDM1ZCwgMHgwMTMwLCAweDA4MGMsIDB4NzZjMCwgMHgxMTE4LCAweDA4MGMsIDB4NzY3MSwgMHgwMDM4LAotCTB4MDgwYywgMHg3NWNjLCAweDAwMjAsIDB4MDgwYywgMHg2MTNkLCAweDA4MGMsIDB4NjAzMywgMHgwODA0LAotCTB4MzY3MywgMHg4MWZmLCAweDE5MDQsIDB4MzZhNSwgMHgwODBjLCAweDc2OWQsIDB4MTExMCwgMHgwODA0LAotCTB4MzZhNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MTk0LCAweDgxZmYsIDB4MDE5MCwgMHg3MDRmLAotCTB4MDAwMCwgMHgyMDAxLCAweDFkODAsIDB4MjAwOSwgMHgwMDQwLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLAotCTB4N2Q5OCwgMHgyMDM5LCAweDAwMDEsIDB4MDgwYywgMHg0YzE0LCAweDcwMWYsIDB4MzY3MSwgMHgwMTJlLAotCTB4MDAwNSwgMHg3MDRmLCAweDAwMDEsIDB4MDBkNiwgMHgyMDY5LCAweDFkODAsIDB4MjBhOSwgMHgwMDQwLAotCTB4MjBlOSwgMHgwMDAxLCAweDIwYTEsIDB4MWQ4MCwgMHgyMDE5LCAweGZmZmYsIDB4NDMwNCwgMHg2NTVjLAotCTB4OTU4OCwgMHgzNDc0LCAweDIxMGQsIDB4OTE4YywgMHgwMGZmLCAweDIxNmEsIDB4OTAwZSwgMHgyMDExLAotCTB4MDAwMiwgMHgyMTAwLCAweDk1MDYsIDB4MDFhOCwgMHgwODBjLCAweDY3ODMsIDB4MTE5MCwgMHhiODE0LAotCTB4ODIxYywgMHgwMjM4LCAweDkzOTgsIDB4MWQ4MCwgMHg5MDg1LCAweGZmMDAsIDB4ODAwNywgMHgyMDFhLAotCTB4MDAzOCwgMHg5Mzk4LCAweDFkODAsIDB4MjMyNCwgMHg5NGE0LCAweGZmMDAsIDB4OTQwNSwgMHgyMDFhLAotCTB4ODIxMCwgMHg4MTA4LCAweDkxODIsIDB4MDA4MCwgMHgxMjA4LCAweDBjMTgsIDB4ODIwMSwgMHg4MDA3LAotCTB4MmQwYywgMHg5MTA1LCAweDIwNmEsIDB4MDBkZSwgMHgyMGE5LCAweDAwNDAsIDB4MjBhMSwgMHgxZDgwLAotCTB4MjA5OSwgMHgxZDgwLCAweDA4MGMsIDB4NjBjOCwgMHgwODA0LCAweDQ1ODEsIDB4MDgwYywgMHg0YmZiLAotCTB4MDkwNCwgMHgzNmE4LCAweDA4MGMsIDB4NGJjOCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LAotCTB4MzZhNSwgMHgwODBjLCAweDU4MjAsIDB4ZDBiNCwgMHgwNTU4LCAweDc4ODQsIDB4OTA4ZSwgMHgwMDdlLAotCTB4MDUzOCwgMHg5MDhlLCAweDAwN2YsIDB4MDUyMCwgMHg5MDhlLCAweDAwODAsIDB4MDUwOCwgMHgwODBjLAotCTB4MzQ2MywgMHgxMTQ4LCAweGI4MDAsIDB4ZDA4YywgMHgxMWQ4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLAotCTB4OTA4NiwgMHgwMDA2LCAweDExYTgsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLAotCTB4MDgwYywgMHhjZTA0LCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsIDB4MzZhNSwgMHg3MDA3LAotCTB4MDAwMywgMHg3MDFmLCAweDQ2MGMsIDB4MDAwNSwgMHgwODBjLCAweDRiZmIsIDB4MDkwNCwgMHgzNmE4LAotCTB4MjBhOSwgMHgwMDJiLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDIwOTgsIDB4YTg2MCwgMHgyMGU4LAotCTB4YTg1YywgMHg5MDgwLCAweDAwMDIsIDB4MjBhMCwgMHg0MDAzLCAweDIwYTksIDB4MDAwOCwgMHg5MDgwLAotCTB4MDAwNiwgMHgyMGEwLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsIDB4MDAwNiwgMHgyMDk4LAotCTB4MDgwYywgMHgwZmNhLCAweDAwNzAsIDB4MjBhOSwgMHgwMDA0LCAweGE4NWMsIDB4OTA4MCwgMHgwMDBhLAotCTB4MjBhMCwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMGEsIDB4MjA5OCwgMHgwODBjLAotCTB4MGZjYSwgMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLAotCTB4OTA4MCwgMHgwMDAyLCAweDIwMDksIDB4MDAyYiwgMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LAotCTB4MDgwNCwgMHg0YzE0LCAweDgxZmYsIDB4MTkwNCwgMHgzNmE1LCAweDA4MGMsIDB4NGJkZiwgMHgwOTA0LAotCTB4MzZhOCwgMHgwODBjLCAweDY5YzYsIDB4MDkwNCwgMHgzNmE1LCAweDAwNTgsIDB4YTg3OCwgMHg5MDA1LAotCTB4MDEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgzNmE1LCAweGE5NzQsIDB4YWE5NCwgMHgwODA0LAotCTB4MzY3MywgMHgwODBjLCAweDU4MjgsIDB4MDkwNCwgMHgzNjczLCAweDcwMWYsIDB4NDY1NiwgMHg3MDA3LAotCTB4MDAwMywgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNmE1LCAweDc4ODgsIDB4OTA4YSwgMHgxMDAwLAotCTB4MWEwNCwgMHgzNmE4LCAweDA4MGMsIDB4NGJmYiwgMHgwOTA0LCAweDM2YTgsIDB4MDgwYywgMHg2YmNkLAotCTB4MDEyMCwgMHgwODBjLCAweDZiZDUsIDB4MTkwNCwgMHgzNmE4LCAweDA4MGMsIDB4NmE0YiwgMHgwOTA0LAotCTB4MzZhNSwgMHgyMDE5LCAweDAwMDQsIDB4OTAwZSwgMHgwODBjLCAweDY5ZDgsIDB4MDkwNCwgMHgzNmE1LAotCTB4Nzk4NCwgMHg3YTg4LCAweDA0YzksIDB4MDhhOCwgMHhhODljLCAweDkwOGEsIDB4MTAwMCwgMHgxMmY4LAotCTB4MDgwYywgMHg0YmY5LCAweDAxZTAsIDB4MDgwYywgMHg2YmNkLCAweDAxMTgsIDB4MDgwYywgMHg2YmQ1LAotCTB4MTFiMCwgMHgwODBjLCAweDZhNGIsIDB4MjAwOSwgMHgwMDAyLCAweDAxNjgsIDB4MjAwOSwgMHgwMDAyLAotCTB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4NjlkOCwgMHgyMDA5LCAweDAwMDMsIDB4MDEyMCwgMHhhOTk4LAotCTB4YWE5YywgMHgwMGQxLCAweDAwNjAsIDB4YTg5NywgMHg0MDA1LCAweGE5OWEsIDB4MDAxMCwgMHhhODk3LAotCTB4NDAwNiwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsIDB4MDAwNSwgMHhhODk3LAotCTB4NDAwMCwgMHgwODBjLCAweDU4MjgsIDB4MDExMCwgMHg5MDA2LCAweDAwMTgsIDB4OTAwZSwgMHg5MDg1LAotCTB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MDAwNSwgMHg5MTg2LCAweDAwZmYsIDB4MDExMCwgMHgwMDcxLAotCTB4MDA2MCwgMHgyMDI5LCAweDAwN2UsIDB4MjA2MSwgMHgxODAwLCAweDY0NWMsIDB4MjQwMCwgMHg5NTA2LAotCTB4MDExMCwgMHgyNTA4LCAweDAwMTksIDB4ODUyOSwgMHgxZWM4LCAweDAwMDUsIDB4MDgwYywgMHg2NzgzLAotCTB4MTEzOCwgMHgyMjAwLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweDkxMDgsIDB4MDgwYywgMHg4ODNhLAotCTB4MDAwNSwgMHg4MWZmLCAweDE5MDQsIDB4MzZhNSwgMHg3OThjLCAweDIwMDEsIDB4MTk4MSwgMHg5MThjLAotCTB4ODAwMCwgMHgyMTAyLCAweDA4MGMsIDB4NGJkZiwgMHgwOTA0LCAweDM2YTgsIDB4MDgwYywgMHg2YmNkLAotCTB4MDEyMCwgMHgwODBjLCAweDZiZDUsIDB4MTkwNCwgMHgzNmE4LCAweDA4MGMsIDB4Njg0YSwgMHgwOTA0LAotCTB4MzZhNSwgMHgwODBjLCAweDY5Y2YsIDB4MDkwNCwgMHgzNmE1LCAweDIwMDEsIDB4MTk4MSwgMHgyMDA0LAotCTB4ZDBmYywgMHgxOTA0LCAweDM2NzMsIDB4MDgwNCwgMHg0NjYxLCAweGE5YTAsIDB4MjAwMSwgMHgxOTgxLAotCTB4OTE4YywgMHg4MDAwLCAweGMxOGQsIDB4MjEwMiwgMHgwODBjLCAweDRiZWMsIDB4MDFhMCwgMHgwODBjLAotCTB4NmJjZCwgMHgwMTE4LCAweDA4MGMsIDB4NmJkNSwgMHgxMTcwLCAweDA4MGMsIDB4Njg0YSwgMHgyMDA5LAotCTB4MDAwMiwgMHgwMTI4LCAweDA4MGMsIDB4NjljZiwgMHgxMTcwLCAweDIwMDksIDB4MDAwMywgMHhhODk3LAotCTB4NDAwNSwgMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLAotCTB4MjAwMSwgMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLCAweDIwMDEsIDB4MTk4MSwgMHgyMDA0LAotCTB4ZDBmYywgMHgxMTI4LCAweDA4MGMsIDB4NTgyOCwgMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLAotCTB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNmE1LAotCTB4Nzk4YywgMHgyMDAxLCAweDE5ODAsIDB4OTE4YywgMHg4MDAwLCAweDIxMDIsIDB4MDgwYywgMHg0YmRmLAotCTB4MDkwNCwgMHgzNmE4LCAweDA4MGMsIDB4NmJjZCwgMHgwMTIwLCAweDA4MGMsIDB4NmJkNSwgMHgxOTA0LAotCTB4MzZhOCwgMHgwODBjLCAweDY4NGEsIDB4MDkwNCwgMHgzNmE1LCAweDA4MGMsIDB4NjliZCwgMHgwOTA0LAotCTB4MzZhNSwgMHgyMDAxLCAweDE5ODAsIDB4MjAwNCwgMHhkMGZjLCAweDE5MDQsIDB4MzY3MywgMHgwODA0LAotCTB4NDY2MSwgMHhhOWEwLCAweDIwMDEsIDB4MTk4MCwgMHg5MThjLCAweDgwMDAsIDB4YzE4ZCwgMHgyMTAyLAotCTB4MDgwYywgMHg0YmVjLCAweDAxYTAsIDB4MDgwYywgMHg2YmNkLCAweDAxMTgsIDB4MDgwYywgMHg2YmQ1LAotCTB4MTE3MCwgMHgwODBjLCAweDY4NGEsIDB4MjAwOSwgMHgwMDAyLCAweDAxMjgsIDB4MDgwYywgMHg2OWJkLAotCTB4MTE3MCwgMHgyMDA5LCAweDAwMDMsIDB4YTg5NywgMHg0MDA1LCAweGE5OWEsIDB4MDAxMCwgMHhhODk3LAotCTB4NDAwNiwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsIDB4MDAwNSwgMHhhODk3LAotCTB4NDAwMCwgMHgyMDAxLCAweDE5ODAsIDB4MjAwNCwgMHhkMGZjLCAweDExMjgsIDB4MDgwYywgMHg1ODI4LAotCTB4MDExMCwgMHg5MDA2LCAweDAwMTgsIDB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLAotCTB4MDAwNSwgMHg2MTAwLCAweDA4MDQsIDB4MzY3MywgMHgwODBjLCAweDRiZmIsIDB4MDkwNCwgMHgzNmE4LAotCTB4MDgwYywgMHg1ODM0LCAweDE5MDQsIDB4MzZhNSwgMHg3OWE4LCAweGQxODQsIDB4MTE1OCwgMHhiODM0LAotCTB4ODAwNywgMHg3ODllLCAweGI4MzAsIDB4ODAwNywgMHg3ODlhLCAweGJiMmMsIDB4ODMxZiwgMHhiYTI4LAotCTB4ODIxNywgMHgwMDUwLCAweGI4MjQsIDB4ODAwNywgMHg3ODllLCAweGI4MjAsIDB4ODAwNywgMHg3ODlhLAotCTB4YmIxYywgMHg4MzFmLCAweGJhMTgsIDB4ODIxNywgMHhiOTAwLCAweDkxOGMsIDB4MDIwMiwgMHgwODA0LAotCTB4MzY3MywgMHg3OGE4LCAweDkwOWMsIDB4MDAwMywgMHhkMGFjLCAweDExNTAsIDB4ZDBiNCwgMHgxMTQwLAotCTB4OTM5YSwgMHgwMDAzLCAweDFhMDQsIDB4MzZhNSwgMHg2MjVjLCAweDc4ODQsIDB4OTIwNiwgMHgxNTQ4LAotCTB4MDgwYywgMHg4OWE5LCAweDIwMDEsIDB4ZmZlYywgMHgyMDA5LCAweDAwMGMsIDB4N2E4YywgMHg3Yjg4LAotCTB4N2M5YywgMHg3ZDk4LCAweDIwMzksIDB4MDAwMCwgMHgwMDA2LCAweDc4YTgsIDB4OTA4NCwgMHgwMDgwLAotCTB4MTExOCwgMHgwMDBlLCAweDA4MDQsIDB4NGMxNCwgMHgwMDBlLCAweDIwMzEsIDB4MDAwMCwgMHgyMDYxLAorCTB4MjFhOCwgMHgyN2UwLCAweDIwOTgsIDB4MjdlOCwgMHgyMGEwLCAweDAwMDYsIDB4MDgwYywgMHgwZmQ2LAorCTB4MDAwZSwgMHgwODBjLCAweDRjOGQsIDB4NzAxZiwgMHgzZDM0LCAweDAxNWUsIDB4MDBkZSwgMHgwMDllLAorCTB4MDA4ZSwgMHgwMDdlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAorCTB4NzAxNCwgMHgyMDQ4LCAweGE4NjQsIDB4OTA4NiwgMHgwMTAzLCAweDExMTgsIDB4NzAxZiwgMHgzZGY1LAorCTB4MDQ1MCwgMHg3MDE0LCAweDIwNDgsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MjAwOSwgMHgwMDdmLAorCTB4MDgwYywgMHg2NzQ5LCAweDAxMTAsIDB4OTAwNiwgMHgwMDMwLCAweGI4MTMsIDB4MDBmZiwgMHhiODE3LAorCTB4ZmZmZCwgMHgwODBjLCAweGQ0MDksIDB4MDE1ZSwgMHgwMGRlLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDdlLAorCTB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDA5MDQsIDB4MzZiZiwgMHgwMDE2LAorCTB4MDAyNiwgMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgwMDc2LCAweDAwODYsIDB4MDA5NiwgMHgwMGQ2LAorCTB4MDE1NiwgMHg3MDFmLCAweDNkYzcsIDB4NzAwNywgMHgwMDAzLCAweDA4MDQsIDB4M2Q4NSwgMHhhODMwLAorCTB4OTA4NiwgMHgwMTAwLCAweDIwMjEsIDB4NDAwYywgMHgwOTA0LCAweDM2OGYsIDB4MDA3NiwgMHhhZDEwLAorCTB4YWMwYywgMHhhYjI0LCAweGFhMjAsIDB4YTkzMCwgMHhhODA4LCAweGQwYjQsIDB4MTEyMCwgMHgyMDI5LAorCTB4MDAwMCwgMHgyMDIxLCAweDAwMDAsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLAorCTB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMWE4LCAweDI3ZTAsIDB4MjA5OCwgMHgyN2U4LAorCTB4MjBhMCwgMHgwMDA2LCAweDA4MGMsIDB4MGZkNiwgMHgwMDBlLCAweDA4MGMsIDB4NGM4ZCwgMHgwMDdlLAorCTB4NzAxZiwgMHgzZDM0LCAweDcwMjMsIDB4MDAwMSwgMHgwMDA1LCAweDA4MDQsIDB4MzY4ZCwgMHgwMTU2LAorCTB4MDBjNiwgMHhhODE0LCAweDkwOGEsIDB4MDAxZSwgMHgwMjE4LCAweGE4MzMsIDB4MDAxZSwgMHgwMDEwLAorCTB4YTgzMiwgMHgwMDc4LCAweDgxZmYsIDB4MDE2OCwgMHgwMDE2LCAweDA4MGMsIDB4NGM0MSwgMHgwMDFlLAorCTB4MDEzMCwgMHhhODAwLCAweDIwNDAsIDB4YTAwOCwgMHhhODBhLCAweDIxMDAsIDB4MGM1OCwgMHg5MDA2LAorCTB4MDAxMCwgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMTVlLCAweDAwMDUsIDB4MDAwNiwgMHgwMGY2LAorCTB4MjA3OSwgMHgwMDAwLCAweDc4ODAsIDB4OTA4NiwgMHgwMDQ0LCAweDAwZmUsIDB4MDAwZSwgMHgwMDA1LAorCTB4MjAwMSwgMHgxOWEwLCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LAorCTB4MjA2MSwgMHgwMjAwLCAweDIwMDEsIDB4MTlhYiwgMHgyMDA0LCAweDYwMWEsIDB4MjA2MSwgMHgwMTAwLAorCTB4MjAwMSwgMHgxOWFhLCAweDIwMDQsIDB4NjBjZSwgMHg2MTA0LCAweGMxYWMsIDB4NjEwNiwgMHgwODBjLAorCTB4NGM0MSwgMHhhODEzLCAweDAwMTksIDB4YTgxNywgMHgwMDAxLCAweDI5MDAsIDB4YTg1YSwgMHgyMDAxLAorCTB4MDAyZSwgMHgyMDA0LCAweGE4NjYsIDB4MjAwMSwgMHgwMDJmLCAweDIwMDQsIDB4YTg2YSwgMHgyMDYxLAorCTB4MDA5MCwgMHgyMDc5LCAweDAxMDAsIDB4MjAwMSwgMHgxOWFhLCAweDIwMDQsIDB4NjAzNiwgMHgyMDA5LAorCTB4MDA0MCwgMHgwODBjLCAweDIyMjAsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsIDB4OTA4NCwgMHhmZmY4LAorCTB4YTg2ZSwgMHg2MDFhLCAweGE4NzMsIDB4MDAwMCwgMHg2MDFmLCAweDAwMDAsIDB4NzhjYSwgMHg5MDA2LAorCTB4NjAwYSwgMHg2MDBlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBlNiwgMHgwODBjLAorCTB4NGM0MSwgMHgyOTQwLCAweGEwMTMsIDB4MDAxOSwgMHhhMDE3LCAweDAwMDEsIDB4MjgwMCwgMHhhMDVhLAorCTB4MjAwMSwgMHgwMDMwLCAweDIwMDQsIDB4YTg2NiwgMHgyMDAxLCAweDAwMzEsIDB4MjAwNCwgMHhhODZhLAorCTB4MjAwMSwgMHgwMDJhLCAweDIwMDQsIDB4OTA4NCwgMHhmZmY4LCAweGE4NmUsIDB4YTg3MywgMHgwMDAwLAorCTB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHgyMDAxLCAweDAzMDAsIDB4MjAwMywgMHgwMDAwLAorCTB4MjAwMSwgMHgwMjBkLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAwMDQsIDB4MjAwYywgMHg5MThkLAorCTB4MDAwMiwgMHgyMTAyLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg4MWZmLAorCTB4MDE0OCwgMHgwODBjLCAweDJhNzcsIDB4MTEzMCwgMHg5MDA2LCAweDA4MGMsIDB4MjljYSwgMHg5MDA2LAorCTB4MDgwYywgMHgyOWFkLCAweDIwMDEsIDB4MTk5ZiwgMHgyMDAzLCAweDAwMDAsIDB4Nzg4NCwgMHg5MDg0LAorCTB4MDAwNywgMHgwMDAyLCAweDNlYjUsIDB4M2ViNiwgMHgzZWI3LCAweDNlYjIsIDB4M2ViMiwgMHgzZWIyLAorCTB4M2ViMiwgMHgzZWIyLCAweDAxMmUsIDB4MDgwNCwgMHgzNmMyLCAweDBjZTAsIDB4MGNkOCwgMHgwODBjLAorCTB4Nzc5ZSwgMHgxMTI4LCAweDAxMmUsIDB4MjAwOSwgMHgwMDE2LCAweDA4MDQsIDB4MzZiZiwgMHg4MWZmLAorCTB4MDEyOCwgMHgwMTJlLCAweDIwMjEsIDB4NDAwYiwgMHgwODA0LCAweDM2OGYsIDB4MjAwMSwgMHgwMTQxLAorCTB4MjAwNCwgMHhkMGRjLCAweDBkYjAsIDB4MDgwYywgMHhhY2ZjLCAweDAwODYsIDB4MDA5NiwgMHgwMGE2LAorCTB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDA4MGMsIDB4M2JkOCwgMHgyMDA5LAorCTB4MDEwMSwgMHgyMTBjLCAweDAwMTYsIDB4N2VjOCwgMHg3ZGNjLCAweDkwMDYsIDB4MjA2OCwgMHgyMDYwLAorCTB4MjA1OCwgMHgwODBjLCAweDQzMmEsIDB4MDgwYywgMHg0MjdhLCAweDkwM2UsIDB4MjcyMCwgMHgwMGY2LAorCTB4MDBlNiwgMHgwMDg2LCAweDI5NDAsIDB4MjA3MSwgMHgxOWU4LCAweDIwNzksIDB4MDA5MCwgMHgwMGQ2LAorCTB4MjA2OSwgMHgwMDAwLCAweDY4ODQsIDB4ZDBiNCwgMHgwMTIwLCAweDY4ZDQsIDB4NzgwZSwgMHg2OGQwLAorCTB4NzgwYSwgMHgwMGRlLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDQxZGIsIDB4MDgwYywgMHgyYTdmLAorCTB4MDgwYywgMHgyYTdmLCAweDA4MGMsIDB4MmE3ZiwgMHgwODBjLCAweDJhN2YsIDB4MDgwYywgMHg0MWRiLAorCTB4MDA4ZSwgMHgwMGVlLCAweDAwZmUsIDB4MDgwYywgMHg0MGZkLCAweDIwMDksIDB4OWM0MCwgMHg4MTA5LAorCTB4MTFiMCwgMHgwODBjLCAweDQwMzQsIDB4MjAwMSwgMHgwMDA0LCAweDIwMGMsIDB4OTE4YywgMHhmZmZkLAorCTB4MjEwMiwgMHgwMDFlLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMGFlLAorCTB4MDA5ZSwgMHgwMDhlLCAweDIwMDksIDB4MDAxNywgMHgwODBjLCAweDM2YmYsIDB4MGNmOCwgMHgyMDAxLAorCTB4MDIwYiwgMHgyMDA0LCAweDkwODQsIDB4MDE0MCwgMHgxZDEwLCAweDAwZjYsIDB4MjA3OSwgMHgwMDAwLAorCTB4Nzg4NCwgMHgwMGZlLCAweGQwYmMsIDB4MDE3OCwgMHgyMDAxLCAweDAyMDEsIDB4MjAwYywgMHg4MWZmLAorCTB4MDE1MCwgMHgwODBjLCAweDQwZGIsIDB4MmQwMCwgMHg5YzA1LCAweDliMDUsIDB4MDEyMCwgMHgwODBjLAorCTB4NDAzNCwgMHgwODA0LCAweDNmZGQsIDB4MDgwYywgMHg0MjRmLCAweDA4MGMsIDB4NDE3MywgMHgwODBjLAorCTB4NDBiZSwgMHgwODBjLCAweDQwZjMsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzgyNCwgMHhkMGFjLAorCTB4MDEzMCwgMHg4YjU4LCAweDA4MGMsIDB4NDAzNCwgMHgwMGZlLCAweDA4MDQsIDB4M2ZkZCwgMHgwMGZlLAorCTB4MDgwYywgMHg0MDJhLCAweDExNTAsIDB4OGQ2OCwgMHgyMDAxLCAweDAwMzIsIDB4MjYwMiwgMHgyMDAxLAorCTB4MDAzMywgMHgyNTAyLCAweDA4MGMsIDB4NDAzNCwgMHgwMDgwLCAweDg3ZmYsIDB4MDEzOCwgMHgyMDAxLAorCTB4MDIwMSwgMHgyMDA0LCAweDkwMDUsIDB4MTkwOCwgMHg4NzM5LCAweDAwMzgsIDB4MjAwMSwgMHgxYTZlLAorCTB4MjAwNCwgMHg5MDg2LCAweDAwMDAsIDB4MTkwNCwgMHgzZjJkLCAweDIwMDEsIDB4MDMyZiwgMHgyMDAzLAorCTB4MDBmNiwgMHg4NjMxLCAweDEyMDgsIDB4ODUyOSwgMHgyNTAwLCAweDk2MDUsIDB4MDkwNCwgMHgzZmRkLAorCTB4Nzg4NCwgMHhkMGJjLCAweDAxMjgsIDB4MmQwMCwgMHg5YzA1LCAweDliMDUsIDB4MTkwNCwgMHgzZmRkLAorCTB4YTAxMywgMHgwMDE5LCAweDIwMDEsIDB4MDMyYSwgMHgyMDAzLCAweDAwMDQsIDB4Nzg4NCwgMHhkMGFjLAorCTB4MTE0OCwgMHgyMDAxLCAweDFhNmUsIDB4MjAwMywgMHgwMDAzLCAweDIwMDEsIDB4MDMyYSwgMHgyMDAzLAorCTB4MDAwOSwgMHgwMDMwLCAweGEwMTcsIDB4MDAwMSwgMHg3OGI0LCAweDkwMDUsIDB4MDEwOCwgMHhhMDE2LAorCTB4MjgwMCwgMHhhMDVhLCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDIyMjAsIDB4MjkwMCwgMHhhODVhLAorCTB4YTgxMywgMHgwMDE5LCAweDc4ODQsIDB4ZDBhNCwgMHgxMTgwLCAweGE4MTcsIDB4MDAwMCwgMHgwMGM2LAorCTB4MjBhOSwgMHgwMDA0LCAweDIwNjEsIDB4MDA5MCwgMHg2MDJiLCAweDAwMDgsIDB4MjAwMSwgMHgwMjAzLAorCTB4MjAwNCwgMHgxZjA0LCAweDNmYjQsIDB4MDBjZSwgMHgwMDMwLCAweGE4MTcsIDB4MDAwMSwgMHg3OGIwLAorCTB4OTAwNSwgMHgwMTA4LCAweGE4MTYsIDB4MDBmNiwgMHgwMGM2LCAweDIwNzksIDB4MDEwMCwgMHgyMDYxLAorCTB4MDA5MCwgMHg3ODI3LCAweDAwMDIsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsIDB4OTA4NCwgMHhmZmY4LAorCTB4NjAxYSwgMHgwMDA2LCAweDIwMDEsIDB4MDAyYiwgMHgyMDA0LCAweDYwMWUsIDB4NzhjNiwgMHgwMDBlLAorCTB4NzhjYSwgMHgwMGNlLCAweDAwZmUsIDB4MDgwNCwgMHgzZWU3LCAweDAwMWUsIDB4MDBjNiwgMHgyMDAxLAorCTB4MDMyYSwgMHgyMDAzLCAweDAwMDQsIDB4MjA2MSwgMHgwMTAwLCAweDYwMjcsIDB4MDAwMiwgMHg2MTA2LAorCTB4MjAxMSwgMHgwMjBkLCAweDIwMTMsIDB4MDAyMCwgMHgyMDAxLCAweDAwMDQsIDB4MjAwYywgMHg5MThjLAorCTB4ZmZmZCwgMHgyMTAyLCAweDA4MGMsIDB4MTM1MiwgMHg3ODg0LCAweDkwODQsIDB4MDAwMywgMHg5MDg2LAorCTB4MDAwMiwgMHgwMWIwLCAweDIwMDksIDB4MDAyOCwgMHgwODBjLCAweDIyMjAsIDB4MjAwMSwgMHgwMjI3LAorCTB4MjAwYywgMHgyMTAyLCAweDYwNTAsIDB4OTA4NCwgMHhiN2ZmLCAweDA4MGMsIDB4MmIyOSwgMHg2MDUyLAorCTB4NjAyZiwgMHgwMDAwLCAweDYwNGIsIDB4ZjdmNywgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLAorCTB4MDgwYywgMHhhZDE4LCAweDAwY2UsIDB4MmQwOCwgMHgyYzEwLCAweDJiMTgsIDB4MmIwMCwgMHg5YzA1LAorCTB4OWQwNSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsIDB4MDBhZSwgMHgwMDllLAorCTB4MDA4ZSwgMHgxMTE4LCAweDAxMmUsIDB4MDgwNCwgMHgzNjhkLCAweDAxMmUsIDB4MjAyMSwgMHg0MDBjLAorCTB4MDgwNCwgMHgzNjhmLCAweDkwODUsIDB4MDAwMSwgMHgxZDA0LCAweDQwMzMsIDB4MjA5MSwgMHg2MDAwLAorCTB4ODQyMCwgMHg5NDg2LCAweDAwNjQsIDB4MDAwNSwgMHgyMDAxLCAweDAxMDUsIDB4MjAwMywgMHgwMDEwLAorCTB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHgyMDAxLCAweDFhNmUsIDB4MjAwMywgMHgwMDAwLAorCTB4MDA3MSwgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHgyMjIwLCAweDIwMDEsIDB4MDIyNywgMHgyMDI0LAorCTB4MjQwMiwgMHgyMDAxLCAweDAxMDksIDB4MjAwMywgMHg0MDAwLCAweDkwMjYsIDB4MDAwNSwgMHgwMGY2LAorCTB4MDBlNiwgMHgyMDcxLCAweDE5ZTgsIDB4NzA1NCwgMHg5MDg2LCAweDAwMDAsIDB4MDUyMCwgMHgyMDc5LAorCTB4MDA5MCwgMHgyMDA5LCAweDAyMDYsIDB4MjEwNCwgMHgyMDA5LCAweDAyMDMsIDB4MjEwYywgMHg5MTA2LAorCTB4MTEyMCwgMHgyMDA5LCAweDAwNDAsIDB4MDgwYywgMHgyMjIwLCAweDc4MmMsIDB4ZDBmYywgMHgwZDg4LAorCTB4MDgwYywgMHg0MjRmLCAweDcwNTQsIDB4OTA4NiwgMHgwMDAwLCAweDFkNTgsIDB4NzgyYiwgMHgwMDA0LAorCTB4NzgyYywgMHhkMGFjLCAweDFkZTgsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIyMCwgMHg3ODJiLAorCTB4MDAwMiwgMHg3MDU3LCAweDAwMDAsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LAorCTB4MDEwMCwgMHgyMDAxLCAweDE4MTgsIDB4MjAwYywgMHg3OTMyLCAweDc5MzYsIDB4MDgwYywgMHgyNmQ1LAorCTB4MDgwYywgMHgyYWY2LCAweDA4MGMsIDB4MmIyOSwgMHg3ODRiLCAweGY3ZjcsIDB4Nzg0MywgMHgwMDkwLAorCTB4Nzg0MywgMHgwMDEwLCAweDc4NTAsIDB4YzBlNSwgMHg3ODUyLCAweDIwMTksIDB4NjFhOCwgMHg3ODIwLAorCTB4ZDA5YywgMHgwMTEwLCAweDgzMTksIDB4MWRkOCwgMHg3ODUwLCAweGMwZTQsIDB4Nzg1MiwgMHgyMDExLAorCTB4MDA0OCwgMHgwODBjLCAweDJhZDMsIDB4Nzg0MywgMHgwMDQwLCAweDIwMTksIDB4MDFmNCwgMHhhMDAxLAorCTB4YTAwMSwgMHg4MzE5LCAweDFkZTAsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmE5OSwgMHgyMDExLAorCTB4MDAyMCwgMHgwODBjLCAweDJhZDMsIDB4Nzg0MywgMHgwMDAwLCAweDkwMDYsIDB4MDgwYywgMHgyYTk5LAorCTB4MjAxMSwgMHgwMDQ4LCAweDA4MGMsIDB4MmFkMywgMHgwMGZlLCAweDAwMDUsIDB4Nzg4NCwgMHhkMGFjLAorCTB4MTFjOCwgMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwgMHgxYTZlLCAweDIwNzksIDB4MDMyMCwgMHgyMDAxLAorCTB4MDIwMSwgMHgyMDA0LCAweDkwMDUsIDB4MDE2MCwgMHg3MDAwLCAweDkwODYsIDB4MDAwMCwgMHgxMTQwLAorCTB4MDA1MSwgMHhkMGJjLCAweDAxMDgsIDB4ODczOCwgMHg3MDAzLCAweDAwMDMsIDB4NzgyYiwgMHgwMDE5LAorCTB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAzMDAsIDB4NzhiYywgMHgwMGZlLAorCTB4OTA4YywgMHgwMDcwLCAweDAxNzgsIDB4MjAwOSwgMHgwMDMyLCAweDI2MGEsIDB4MjAwOSwgMHgwMDMzLAorCTB4MjUwYSwgMHhkMGI0LCAweDAxMDgsIDB4OGM2MCwgMHhkMGFjLCAweDAxMDgsIDB4OGQ2OCwgMHhkMGE0LAorCTB4MDEwOCwgMHg4YjU4LCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsIDB4NzgxYywgMHhkMDg0LAorCTB4MDExMCwgMHg3ODM3LCAweDAwNTAsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMTAwLAorCTB4MjAwMSwgMHgxOWFiLCAweDIwMDQsIDB4NzBlMiwgMHgwODBjLCAweDNlMTYsIDB4MTE4OCwgMHgyMDAxLAorCTB4MTgyMCwgMHgyMDA0LCAweDIwMDksIDB4MTgxZiwgMHgyMTBjLCAweDkxOGMsIDB4MDBmZiwgMHg3MDZlLAorCTB4NzE2YSwgMHg3MDY2LCAweDkxOGQsIDB4MzIwMCwgMHg3MTYyLCAweDcwNzMsIDB4ZTEwOSwgMHgwMDgwLAorCTB4NzAyYywgMHg5MDg1LCAweDAwMDIsIDB4NzAyZSwgMHgyMDA5LCAweDE4MTgsIDB4MjEwYywgMHg3MTZlLAorCTB4NzA2MywgMHgwMTAwLCAweDcxNjYsIDB4NzE5ZSwgMHg3MDZiLCAweDAwMDAsIDB4NzA3MywgMHgwODA5LAorCTB4NzA3NywgMHgwMDA4LCAweDcwNzgsIDB4OTA4MCwgMHgwMTAwLCAweDcwN2EsIDB4NzA4MCwgMHg4MDAwLAorCTB4NzA4MiwgMHg3MDg3LCAweGFhYWEsIDB4OTAwNiwgMHg3MDhhLCAweDcwOGUsIDB4NzA3ZSwgMHg3MGQ2LAorCTB4NzBhYiwgMHgwMDM2LCAweDcwYWYsIDB4OTVkNSwgMHg3MDE0LCAweDkwODQsIDB4MTk4NCwgMHg5MDg1LAorCTB4MDA5MiwgMHg3MDE2LCAweDA4MGMsIDB4NDI0ZiwgMHgwMGY2LCAweDIwNzEsIDB4MWE2ZSwgMHgyMDc5LAorCTB4MDMyMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODg0LCAweGQwYjQsIDB4MDEyMCwgMHg2ODljLAorCTB4NzgwZSwgMHg2ODk4LCAweDc4MGEsIDB4MDBkZSwgMHgwODBjLCAweDNlMTYsIDB4MDE0MCwgMHgyMDAxLAorCTB4MTk5ZiwgMHgyMDBjLCAweDIwMDMsIDB4MDAwMSwgMHg5MThlLCAweDAwMDEsIDB4MDEyMCwgMHgyMDA5LAorCTB4MDNlOCwgMHg4MTA5LCAweDFkZjAsIDB4NzkyYywgMHhkMWZjLCAweDAxMTAsIDB4NzgyYiwgMHgwMDA0LAorCTB4MjAxMSwgMHgwMDExLCAweDA4MGMsIDB4NDFkYiwgMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHg0MWRiLAorCTB4MDBmZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDIwNzEsIDB4MWE2ZSwgMHgyMDc5LAorCTB4MDMyMCwgMHg3OTJjLCAweGQxZmMsIDB4MDkwNCwgMHg0MWQ4LCAweDc4MmIsIDB4MDAwMiwgMHg5MDI2LAorCTB4ZDE5YywgMHgxOTA0LCAweDQxZDQsIDB4NzAwMCwgMHgwMDAyLCAweDQxZDgsIDB4NDE4OSwgMHg0MWI5LAorCTB4NDFkNCwgMHhkMWJjLCAweDExNzAsIDB4ZDFkYywgMHgxMTkwLCAweDgwMDEsIDB4NzAwMiwgMHgyMDExLAorCTB4MDAwMSwgMHgwODBjLCAweDQxZGIsIDB4MDkwNCwgMHg0MWQ4LCAweDA4MGMsIDB4NDFkYiwgMHgwODA0LAorCTB4NDFkOCwgMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHg3OGJmLCAweDAwMDAsIDB4MDBmZSwgMHg3ODEwLAorCTB4NzkxNCwgMHg3ODJiLCAweDAwMDQsIDB4NzgxMiwgMHg3OTE2LCAweDIwMDEsIDB4MDIwMSwgMHgyMDBjLAorCTB4ODFmZiwgMHgwZGU4LCAweDA4MGMsIDB4NDBkYiwgMHgyMDA5LCAweDAwMDEsIDB4MDBmNiwgMHgyMDc5LAorCTB4MDMwMCwgMHg3OGI4LCAweDAwZmUsIDB4ZDBlYywgMHgwMTEwLCAweDIwMDksIDB4MDAxMSwgMHg3OTJhLAorCTB4MDBmOCwgMHg4MDAxLCAweDcwMDIsIDB4OTE4NCwgMHgwODgwLCAweDExNDAsIDB4NzgyYywgMHhkMGZjLAorCTB4MTkwNCwgMHg0MTdkLCAweDIwMTEsIDB4MDAwMSwgMHgwMGIxLCAweDAwOTAsIDB4YTAxMCwgMHg5MDkyLAorCTB4MDAwNCwgMHg5MDg2LCAweDAwMTUsIDB4MTEyMCwgMHhhMDAwLCAweGEwNWEsIDB4MjAxMSwgMHgwMDMxLAorCTB4YTIxMiwgMHhkMWRjLCAweDE5NjAsIDB4MDgyOCwgMHg3ODJiLCAweDAwMDQsIDB4NzAwMywgMHgwMDAwLAorCTB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4YTAxNCwgMHg5MDA1LCAweDA1NTAsIDB4ODAwMSwgMHgwMDM2LAorCTB4MDA5NiwgMHhhMDE2LCAweGEwNTgsIDB4MjA0OCwgMHhhMDEwLCAweDIwMDksIDB4MDAzMSwgMHg5MTFhLAorCTB4ODMxYywgMHg4MzFjLCAweDkzOGEsIDB4MDAwNywgMHgxYTBjLCAweDBkODUsIDB4OTM5OCwgMHg0MjA5LAorCTB4MjMxZCwgMHgwODNmLCAweDkwODAsIDB4MDAwNCwgMHg3YTJhLCAweDcxMDAsIDB4ODEwOCwgMHg3MTAyLAorCTB4MDA5ZSwgMHgwMDNlLCAweDkwOGEsIDB4MDAzNSwgMHgxMTQwLCAweDAwOTYsIDB4YTA1OCwgMHgyMDQ4LAorCTB4YTgwNCwgMHhhMDVhLCAweDIwMDEsIDB4MDAxOSwgMHgwMDllLCAweGEwMTIsIDB4OTA4NSwgMHgwMDAxLAorCTB4MDAwNSwgMHg0MjQ2LCAweDQyM2QsIDB4NDIzNCwgMHg0MjJiLCAweDQyMjIsIDB4NDIxOSwgMHg0MjEwLAorCTB4YTk2NCwgMHg3OTAyLCAweGE5NjgsIDB4NzkwNiwgMHhhOTZjLCAweDc5MTIsIDB4YTk3MCwgMHg3OTE2LAorCTB4MDAwNSwgMHhhOTc0LCAweDc5MDIsIDB4YTk3OCwgMHg3OTA2LCAweGE5N2MsIDB4NzkxMiwgMHhhOTgwLAorCTB4NzkxNiwgMHgwMDA1LCAweGE5ODQsIDB4NzkwMiwgMHhhOTg4LCAweDc5MDYsIDB4YTk4YywgMHg3OTEyLAorCTB4YTk5MCwgMHg3OTE2LCAweDAwMDUsIDB4YTk5NCwgMHg3OTAyLCAweGE5OTgsIDB4NzkwNiwgMHhhOTljLAorCTB4NzkxMiwgMHhhOWEwLCAweDc5MTYsIDB4MDAwNSwgMHhhOWE0LCAweDc5MDIsIDB4YTlhOCwgMHg3OTA2LAorCTB4YTlhYywgMHg3OTEyLCAweGE5YjAsIDB4NzkxNiwgMHgwMDA1LCAweGE5YjQsIDB4NzkwMiwgMHhhOWI4LAorCTB4NzkwNiwgMHhhOWJjLCAweDc5MTIsIDB4YTljMCwgMHg3OTE2LCAweDAwMDUsIDB4YTljNCwgMHg3OTAyLAorCTB4YTljOCwgMHg3OTA2LCAweGE5Y2MsIDB4NzkxMiwgMHhhOWQwLCAweDc5MTYsIDB4MDAwNSwgMHgwMGY2LAorCTB4MDBlNiwgMHgwMDg2LCAweDIwNzEsIDB4MTllOCwgMHgyMDc5LCAweDAwOTAsIDB4NzkyYywgMHhkMWZjLAorCTB4MDFlOCwgMHg3ODJiLCAweDAwMDIsIDB4Mjk0MCwgMHg5MDI2LCAweDcwNTQsIDB4MDAwMiwgMHg0Mjc2LAorCTB4NDI2MiwgMHg0MjZkLCAweDgwMDEsIDB4NzA1NiwgMHhkMTljLCAweDExODAsIDB4MjAxMSwgMHgwMDAxLAorCTB4MDgwYywgMHg0MWRiLCAweDE5MGMsIDB4NDFkYiwgMHgwMDQ4LCAweDgwMDEsIDB4NzA1NiwgMHg3ODJjLAorCTB4ZDBmYywgMHgxZDM4LCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDQxZGIsIDB4MDA4ZSwgMHgwMGVlLAorCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwODYsIDB4MjA2MSwgMHgwMjAwLAorCTB4MjAwMSwgMHgxOWFiLCAweDIwMDQsIDB4NjAxYSwgMHgyMDYxLCAweDAxMDAsIDB4MjAwMSwgMHgxOWFhLAorCTB4MjAwNCwgMHg2MGNlLCAweDYxMDQsIDB4YzFhYywgMHg2MTA2LCAweDIwMDEsIDB4MDAyYywgMHgyMDA0LAorCTB4OTAwNSwgMHgwNTIwLCAweDIwMzgsIDB4MjAwMSwgMHgwMDJlLCAweDIwMjQsIDB4MjAwMSwgMHgwMDJmLAorCTB4MjAxYywgMHgwODBjLCAweDRjNDEsIDB4YTgxMywgMHgwMDE5LCAweGFmMTYsIDB4MjkwMCwgMHhhODVhLAorCTB4OTc4YSwgMHgwMDA3LCAweDAyMjAsIDB4MjEzOCwgMHgyMDA5LCAweDAwMDcsIDB4MDAxMCwgMHgyNzA4LAorCTB4OTAzZSwgMHgwMDk2LCAweGE4NTgsIDB4MjA0OCwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgwMDllLAorCTB4MDgwYywgMHg0MmYyLCAweDFkNjgsIDB4MjkwMCwgMHhhODVhLCAweDAwZDAsIDB4MDgwYywgMHg0YzQxLAorCTB4YTgxMywgMHgwMDE5LCAweGE4MTcsIDB4MDAwMSwgMHgyOTAwLCAweGE4NWEsIDB4MjAwMSwgMHgwMDJlLAorCTB4MjAwNCwgMHhhODY2LCAweDIwMDEsIDB4MDAyZiwgMHgyMDA0LCAweGE4NmEsIDB4MjAwMSwgMHgwMDJhLAorCTB4MjAwNCwgMHg5MDg0LCAweGZmZjgsIDB4YTg2ZSwgMHgyMDAxLCAweDAwMmIsIDB4MjAwNCwgMHhhODcyLAorCTB4MjA2MSwgMHgwMDkwLCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweDE5YWEsIDB4MjAwNCwgMHg2MDM2LAorCTB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIyMCwgMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LAorCTB4ZmZmOCwgMHg2MDFhLCAweDAwMDYsIDB4MjAwMSwgMHgwMDJiLCAweDIwMDQsIDB4NjAxZSwgMHg3OGM2LAorCTB4MDAwZSwgMHg3OGNhLCAweDkwMDYsIDB4NjAwYSwgMHg2MDBlLCAweDAwOGUsIDB4MDBjZSwgMHgwMGVlLAorCTB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMDgwLCAweGFhNjAsIDB4MjJlOCwgMHgyMGEwLAorCTB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDA4OCwgMHg3MDJiLCAweDAwMjYsIDB4NzQwMiwgMHg3MzA2LAorCTB4OTAwNiwgMHg3MDBhLCAweDcwMGUsIDB4ODEwYiwgMHg4MTBiLCAweDIxYTgsIDB4ODEwYiwgMHg3MTEyLAorCTB4NzAyYiwgMHgwMDQxLCAweDcwMmMsIDB4ZDBmYywgMHgwZGU4LCAweDcwMmIsIDB4MDAwMiwgMHg3MDJiLAorCTB4MDA0MCwgMHg0MDA1LCAweDc0MDAsIDB4NzMwNCwgMHg4N2ZmLCAweDAxOTAsIDB4MDA4NiwgMHgwMDk2LAorCTB4Mjk0MCwgMHgwMDg2LCAweDA4MGMsIDB4NGM0MSwgMHgwMDhlLCAweGEwNTgsIDB4MDBhNiwgMHgyMDUwLAorCTB4MjkwMCwgMHhiMDA2LCAweGEwNWEsIDB4MDBhZSwgMHgwMDllLCAweDAwOGUsIDB4OTA4NSwgMHgwMDAxLAorCTB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MjAwMSwgMHgwMDJkLCAweDIwMDQsIDB4OTAwNSwgMHgwNTI4LAorCTB4MjAzOCwgMHgyMDAxLCAweDAwMzAsIDB4MjAyNCwgMHgyMDAxLCAweDAwMzEsIDB4MjAxYywgMHgwODBjLAorCTB4NGM0MSwgMHgyOTQwLCAweGE4MTMsIDB4MDAxOSwgMHhhZjE2LCAweDI5MDAsIDB4YTg1YSwgMHg5NzhhLAorCTB4MDAwNywgMHgwMjIwLCAweDIxMzgsIDB4MjAwOSwgMHgwMDA3LCAweDAwMTAsIDB4MjcwOCwgMHg5MDNlLAorCTB4MDA5NiwgMHhhODU4LCAweDIwNDgsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4MDA5ZSwgMHgwODBjLAorCTB4NDJmMiwgMHgxZDY4LCAweDI5MDAsIDB4YTg1YSwgMHgwMGQ4LCAweDA4MGMsIDB4NGM0MSwgMHgyOTQwLAorCTB4YTAxMywgMHgwMDE5LCAweGEwMTcsIDB4MDAwMSwgMHgyODAwLCAweGEwNWEsIDB4MjAwMSwgMHgwMDMwLAorCTB4MjAwNCwgMHhhMDY2LCAweDIwMDEsIDB4MDAzMSwgMHgyMDA0LCAweGEwNmEsIDB4MjAwMSwgMHgwMDJhLAorCTB4MjAwNCwgMHg5MDg0LCAweGZmZjgsIDB4YTA2ZSwgMHgyMDAxLCAweDAwMmIsIDB4MjAwNCwgMHhhMDcyLAorCTB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHg3ODg0LCAweGQwYWMsIDB4MTE4MCwgMHgyMDAxLAorCTB4MDEwMSwgMHgyMDBjLCAweDkxOGQsIDB4MDIwMCwgMHgyMTAyLCAweGEwMTcsIDB4MDAwMCwgMHgyMDAxLAorCTB4MWE2ZSwgMHgyMDAzLCAweDAwMDMsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwOSwgMHgyMDAxLAorCTB4MDMwMCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLAorCTB4MDAwNCwgMHgyMDBjLCAweDkxOGQsIDB4MDAwMiwgMHgyMTAyLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwYTksIDB4MDAwNywgMHgyMGExLCAweDE4NDAsIDB4MjBlOSwgMHgwMDAxLAorCTB4OTAwNiwgMHg0MDA0LCAweDIwYTksIDB4MDAxNCwgMHgyMGExLCAweGZmZWMsIDB4MjBlOSwgMHgwMDAwLAorCTB4OTAwNiwgMHg0MDA0LCAweDIwMDksIDB4MDEzYywgMHgyMDBhLCAweDAxMmUsIDB4Nzg4MCwgMHg5MDg2LAorCTB4MDA1MiwgMHgwMTA4LCAweDAwMDUsIDB4MDgwNCwgMHgzNjhkLCAweDdkOTgsIDB4N2M5YywgMHgwODA0LAorCTB4Mzc5MSwgMHgwODBjLCAweDc3OWUsIDB4MTkwYywgMHg2MTYyLCAweDYwNDAsIDB4OTA4NCwgMHgwMDIwLAorCTB4MDliMSwgMHgyMDY5LCAweDE4NDcsIDB4MmQwMCwgMHgyMDA5LCAweDAwMzAsIDB4N2E4YywgMHg3Yjg4LAorCTB4N2M5YywgMHg3ZDk4LCAweDIwMzksIDB4MDAwMSwgMHgwODBjLCAweDRjOGEsIDB4NzAxZiwgMHg0M2QxLAorCTB4MDAwNSwgMHgwODBjLCAweDU4NGYsIDB4MTEzMCwgMHgzYjAwLCAweDNhMDgsIDB4YzE5NCwgMHhjMDk1LAorCTB4MjBkOCwgMHgyMWQwLCAweDIwNjksIDB4MTg0NywgMHg2ODAwLCAweDkwMDUsIDB4MDkwNCwgMHgzNmMyLAorCTB4MjAwMSwgMHgxODBkLCAweDIwMDQsIDB4ZDA4YywgMHg2ODA0LCAweDAxMTgsIDB4YzBhNCwgMHhjMGFjLAorCTB4NjgwNiwgMHhkMGFjLCAweDAxMTgsIDB4ZDBhNCwgMHgwOTA0LCAweDM2YzIsIDB4ZDA5NCwgMHgwMGM2LAorCTB4MjA2MSwgMHgwMTAwLCAweDYxMDQsIDB4MDEzOCwgMHg2MjAwLCAweDkyOTIsIDB4MDAwNSwgMHgwMjE4LAorCTB4OTE4YywgMHhmZmRmLCAweDAwMTAsIDB4OTE4ZCwgMHgwMDIwLCAweDYxMDYsIDB4MDBjZSwgMHhkMDhjLAorCTB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4NjEwNCwgMHgwMTE4LCAweDkxOGQsIDB4MDAxMCwgMHgwMDEwLAorCTB4OTE4YywgMHhmZmVmLCAweDYxMDYsIDB4MDBjZSwgMHhkMDg0LCAweDAxNTgsIDB4NmEyOCwgMHg5MjhhLAorCTB4MDA3ZiwgMHgxYTA0LCAweDM2YzIsIDB4OTI4OCwgMHgzNDhlLCAweDIxMGQsIDB4OTE4YywgMHgwMGZmLAorCTB4NjE2NiwgMHhkMGRjLCAweDAxMzAsIDB4NjgyOCwgMHg5MDhhLCAweDAwN2YsIDB4MWEwNCwgMHgzNmMyLAorCTB4NjA1ZSwgMHg2ODg4LCAweDkwODQsIDB4MDAzMCwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LAorCTB4MDAwNiwgMHgyMDA5LCAweDE5YjIsIDB4OTA4MCwgMHgyN2QwLCAweDIwMDUsIDB4MjAwYSwgMHgyMDA4LAorCTB4MjAwMSwgMHgwMDE4LCAweDA4MGMsIDB4YWNlZCwgMHgyMDA5LCAweDAzOTAsIDB4MjAwYiwgMHgwNDAwLAorCTB4MDAwZSwgMHgyMDA5LCAweDE5YjMsIDB4OTA4MCwgMHgyN2Q0LCAweDIwMDUsIDB4MjAwYSwgMHg2ODA4LAorCTB4OTA4YSwgMHgwMTAwLCAweDBhMDQsIDB4MzZjMiwgMHg5MDhhLCAweDA4NDEsIDB4MWEwNCwgMHgzNmMyLAorCTB4OTA4NCwgMHgwMDA3LCAweDE5MDQsIDB4MzZjMiwgMHg2ODBjLCAweDkwMDUsIDB4MDkwNCwgMHgzNmMyLAorCTB4NjgxMCwgMHg5MDA1LCAweDA5MDQsIDB4MzZjMiwgMHg2ODQ4LCAweDY5NDAsIDB4OTEwYSwgMHgxYTA0LAorCTB4MzZjMiwgMHg4MDAxLCAweDA5MDQsIDB4MzZjMiwgMHg2ODRjLCAweDY5NDQsIDB4OTEwYSwgMHgxYTA0LAorCTB4MzZjMiwgMHg4MDAxLCAweDA5MDQsIDB4MzZjMiwgMHg2ODE0LCAweDkwOGMsIDB4MDBmZiwgMHg2MTRlLAorCTB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4NjA1MiwgMHgwODBjLCAweDdhZTcsIDB4MDgwYywgMHg2Y2ZjLAorCTB4MDgwYywgMHg2ZDY2LCAweDY4MDgsIDB4NjAyYSwgMHgwODBjLCAweDIxOTIsIDB4MjAwOSwgMHgwMTcwLAorCTB4MjAwYiwgMHgwMDgwLCAweGEwMDEsIDB4YTAwMSwgMHgyMDBiLCAweDAwMDAsIDB4MDAzNiwgMHg2YjA4LAorCTB4MDgwYywgMHgyNzJmLCAweDAwM2UsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MTkwNCwgMHg0NTZkLAorCTB4NjgxOCwgMHg2OTFjLCAweDZhMjAsIDB4NmIyNCwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLAorCTB4NjAxNiwgMHg2MTFhLCAweDYyMWUsIDB4NjMyMiwgMHg2YzA0LCAweGQ0ZjQsIDB4MDE0OCwgMHg2ODMwLAorCTB4NjkzNCwgMHg2YTM4LCAweDZiM2MsIDB4ODAwNywgMHg4MTBmLCAweDgyMTcsIDB4ODMxZiwgMHgwMDEwLAorCTB4OTA4NCwgMHhmMGZmLCAweDYwMDYsIDB4NjEwYSwgMHg2MjBlLCAweDYzMTIsIDB4ODAwNywgMHg4MTBmLAorCTB4ODIxNywgMHg4MzFmLCAweDIwYTksIDB4MDAwNCwgMHgyMGExLCAweDE5YjQsIDB4MjBlOSwgMHgwMDAxLAorCTB4NDAwMSwgMHgyMGE5LCAweDAwMDQsIDB4MjBhMSwgMHgxOWNlLCAweDIwZTksIDB4MDAwMSwgMHg0MDAxLAorCTB4MDgwYywgMHg4YjI2LCAweDAwYzYsIDB4OTAwZSwgMHgyMGE5LCAweDAwMDEsIDB4NmI3MCwgMHhkMzg0LAorCTB4MDFjOCwgMHgwMDIwLCAweDgzOWQsIDB4MTJiMCwgMHgzNTA4LCAweDgxMDksIDB4MDgwYywgMHg4MGZlLAorCTB4Njg3OCwgMHg2MDE2LCAweDY4NzQsIDB4MjAwOCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg2MDBhLAorCTB4OTE4NCwgMHgwMGZmLCAweDYwMDYsIDB4ODEwOCwgMHgxMTE4LCAweDYwMDMsIDB4MDAwMywgMHgwMDEwLAorCTB4NjAwMywgMHgwMDAxLCAweDFmMDQsIDB4NDRjMiwgMHgwMGNlLCAweDAwYzYsIDB4MjA2MSwgMHgxOTljLAorCTB4MjAwMSwgMHgxODBkLCAweDIwMDQsIDB4ZDA4YywgMHgxMWE4LCAweDZhODgsIDB4OTI4NCwgMHhjMDAwLAorCTB4MjAxMCwgMHg5Mjg2LCAweDAwMDAsIDB4MTE1OCwgMHgyMDYzLCAweDAwMDAsIDB4MjAwMSwgMHgwMDAxLAorCTB4MDgwYywgMHgyOWNhLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI5YWQsIDB4MDA4OCwgMHg5Mjg2LAorCTB4NDAwMCwgMHgxMTQ4LCAweDIwNjMsIDB4MDAwMSwgMHg5MDA2LCAweDA4MGMsIDB4MjljYSwgMHg5MDA2LAorCTB4MDgwYywgMHgyOWFkLCAweDAwMjgsIDB4OTI4NiwgMHg4MDAwLCAweDFkMzAsIDB4MjA2MywgMHgwMDAyLAorCTB4MDBjZSwgMHgwMGU2LCAweDJjNzAsIDB4MDgwYywgMHgwZWQzLCAweDAwZWUsIDB4MDgwYywgMHgyYWY2LAorCTB4MDgwYywgMHgyYjI5LCAweDY4ODgsIDB4ZDBlYywgMHgwMTMwLCAweDIwMTEsIDB4MDExNCwgMHgyMjA0LAorCTB4OTA4NSwgMHgwMTgwLCAweDIwMTIsIDB4NmE4MCwgMHg5Mjg0LCAweDAwMzAsIDB4OTA4NiwgMHgwMDMwLAorCTB4MTEyOCwgMHg5Mjk0LCAweGZmY2YsIDB4OTI5NSwgMHgwMDIwLCAweDZhODIsIDB4MjAwMSwgMHgxOTdjLAorCTB4NmE4MCwgMHg5Mjk0LCAweDAwMzAsIDB4OTI4ZSwgMHgwMDAwLCAweDAxNzAsIDB4OTI4ZSwgMHgwMDEwLAorCTB4MDExOCwgMHg5MjhlLCAweDAwMjAsIDB4MDE0MCwgMHgyMDAzLCAweGFhYWEsIDB4MDgwYywgMHgyN2E0LAorCTB4MjAwMSwgMHgxOTZkLCAweDIxMDIsIDB4MDAwOCwgMHgyMTAyLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLAorCTB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwMGNlLCAweDA4MGMsIDB4Nzc5ZSwgMHgwMTI4LAorCTB4MDgwYywgMHg1MTI4LCAweDAxMTAsIDB4MDgwYywgMHgyNmY1LCAweDYwZDQsIDB4OTAwNSwgMHgwMWMwLAorCTB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4NDU1NSwgMHgwMGUwLCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTY4LAorCTB4MjAxMSwgMHg3NjEyLCAweDA4MGMsIDB4ODk5MywgMHgyMDExLCAweDc2MDUsIDB4MDgwYywgMHg4YTlmLAorCTB4MDgwYywgMHg3YWJiLCAweDA4MGMsIDB4NzZjZCwgMHgwMDQwLCAweDA4MGMsIDB4NjA1OCwgMHgwMDI4LAorCTB4NjAwMywgMHgwMDA0LCAweDIwMDksIDB4NDU2ZCwgMHgwMDIwLCAweDA4MGMsIDB4NmI3MywgMHgwODA0LAorCTB4MzY4ZCwgMHgyMDAxLCAweDAxNzAsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDRjLAorCTB4MTExOCwgMHgyMDkxLCAweDMxYmQsIDB4MDgxNywgMHgyMDkxLCAweDMxM2QsIDB4MDgxNywgMHg2MDAwLAorCTB4OTA4NiwgMHgwMDAwLCAweDA5MDQsIDB4MzZiZiwgMHgyMDY5LCAweDE4NDcsIDB4Nzg5MCwgMHg2ODQyLAorCTB4Nzg5NCwgMHg2ODQ2LCAweDJkMDAsIDB4MjAwOSwgMHgwMDMwLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLAorCTB4N2Q5OCwgMHgyMDM5LCAweDAwMDEsIDB4MDgwNCwgMHg0YzhkLCAweDkwMDYsIDB4MDgwYywgMHgyNmY1LAorCTB4ODFmZiwgMHgxOTA0LCAweDM2YmYsIDB4MDgwYywgMHg3NzllLCAweDExYjAsIDB4MDgwYywgMHg3YWI2LAorCTB4MDgwYywgMHg2MTlkLCAweDA4MGMsIDB4MzQ4MiwgMHgwMTE4LCAweDYxMzAsIDB4YzE4ZCwgMHg2MTMyLAorCTB4MDgwYywgMHhkNjQ1LCAweDAxMzAsIDB4MDgwYywgMHg3N2MxLCAweDExMTgsIDB4MDgwYywgMHg3NzcyLAorCTB4MDAzOCwgMHgwODBjLCAweDc2Y2QsIDB4MDAyMCwgMHgwODBjLCAweDYxNjIsIDB4MDgwYywgMHg2MDU4LAorCTB4MDgwNCwgMHgzNjhkLCAweDgxZmYsIDB4MTkwNCwgMHgzNmJmLCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTEwLAorCTB4MDgwNCwgMHgzNmJmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYxOTQsIDB4ODFmZiwgMHgwMTkwLAorCTB4NzA0ZiwgMHgwMDAwLCAweDIwMDEsIDB4MWQ4MCwgMHgyMDA5LCAweDAwNDAsIDB4N2E4YywgMHg3Yjg4LAorCTB4N2M5YywgMHg3ZDk4LCAweDIwMzksIDB4MDAwMSwgMHgwODBjLCAweDRjOGQsIDB4NzAxZiwgMHgzNjhiLAorCTB4MDEyZSwgMHgwMDA1LCAweDcwNGYsIDB4MDAwMSwgMHgwMGQ2LCAweDIwNjksIDB4MWQ4MCwgMHgyMGE5LAorCTB4MDA0MCwgMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxZDgwLCAweDIwMTksIDB4ZmZmZiwgMHg0MzA0LAorCTB4NjU1YywgMHg5NTg4LCAweDM0OGUsIDB4MjEwZCwgMHg5MThjLCAweDAwZmYsIDB4MjE2YSwgMHg5MDBlLAorCTB4MjAxMSwgMHgwMDAyLCAweDIxMDAsIDB4OTUwNiwgMHgwMWE4LCAweDA4MGMsIDB4NjdiNCwgMHgxMTkwLAorCTB4YjgxNCwgMHg4MjFjLCAweDAyMzgsIDB4OTM5OCwgMHgxZDgwLCAweDkwODUsIDB4ZmYwMCwgMHg4MDA3LAorCTB4MjAxYSwgMHgwMDM4LCAweDkzOTgsIDB4MWQ4MCwgMHgyMzI0LCAweDk0YTQsIDB4ZmYwMCwgMHg5NDA1LAorCTB4MjAxYSwgMHg4MjEwLCAweDgxMDgsIDB4OTE4MiwgMHgwMDgwLCAweDEyMDgsIDB4MGMxOCwgMHg4MjAxLAorCTB4ODAwNywgMHgyZDBjLCAweDkxMDUsIDB4MjA2YSwgMHgwMGRlLCAweDIwYTksIDB4MDA0MCwgMHgyMGExLAorCTB4MWQ4MCwgMHgyMDk5LCAweDFkODAsIDB4MDgwYywgMHg2MGVkLCAweDA4MDQsIDB4NDVjYSwgMHgwODBjLAorCTB4NGM3NCwgMHgwOTA0LCAweDM2YzIsIDB4MDgwYywgMHg0YzQxLCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLAorCTB4MDgwNCwgMHgzNmJmLCAweDA4MGMsIDB4NTg0MCwgMHhkMGI0LCAweDA1NTgsIDB4Nzg4NCwgMHg5MDhlLAorCTB4MDA3ZSwgMHgwNTM4LCAweDkwOGUsIDB4MDA3ZiwgMHgwNTIwLCAweDkwOGUsIDB4MDA4MCwgMHgwNTA4LAorCTB4MDgwYywgMHgzNDdkLCAweDExNDgsIDB4YjgwMCwgMHhkMDhjLCAweDExZDgsIDB4YjgwNCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MDg2LCAweDAwMDYsIDB4MTFhOCwgMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLAorCTB4YTg2YSwgMHgwODBjLCAweGQwZWMsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNmJmLAorCTB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NDY1NSwgMHgwMDA1LCAweDA4MGMsIDB4NGM3NCwgMHgwOTA0LAorCTB4MzZjMiwgMHgyMGE5LCAweDAwMmIsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsIDB4MjA5OCwgMHhhODYwLAorCTB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLCAweDQwMDMsIDB4MjBhOSwgMHgwMDA4LAorCTB4OTA4MCwgMHgwMDA2LCAweDIwYTAsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsIDB4OTA4MCwgMHgwMDA2LAorCTB4MjA5OCwgMHgwODBjLCAweDBmZDYsIDB4MDA3MCwgMHgyMGE5LCAweDAwMDQsIDB4YTg1YywgMHg5MDgwLAorCTB4MDAwYSwgMHgyMGEwLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LCAweDkwODAsIDB4MDAwYSwgMHgyMDk4LAorCTB4MDgwYywgMHgwZmQ2LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LAorCTB4ZmZjMCwgMHg5MDgwLCAweDAwMDIsIDB4MjAwOSwgMHgwMDJiLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLAorCTB4N2Q5OCwgMHgwODA0LCAweDRjOGQsIDB4ODFmZiwgMHgxOTA0LCAweDM2YmYsIDB4MDgwYywgMHg0YzU4LAorCTB4MDkwNCwgMHgzNmMyLCAweDA4MGMsIDB4NmEwMCwgMHgwOTA0LCAweDM2YmYsIDB4MDA1OCwgMHhhODc4LAorCTB4OTAwNSwgMHgwMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM2YmYsIDB4YTk3NCwgMHhhYTk0LAorCTB4MDgwNCwgMHgzNjhkLCAweDA4MGMsIDB4NTg0OCwgMHgwOTA0LCAweDM2OGQsIDB4NzAxZiwgMHg0NjlmLAorCTB4NzAwNywgMHgwMDAzLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDM2YmYsIDB4Nzg4OCwgMHg5MDhhLAorCTB4MTAwMCwgMHgxYTA0LCAweDM2YzIsIDB4MDgwYywgMHg0Yzc0LCAweDA5MDQsIDB4MzZjMiwgMHgwODBjLAorCTB4NmMxMSwgMHgwMTIwLCAweDA4MGMsIDB4NmMxOSwgMHgxOTA0LCAweDM2YzIsIDB4MDgwYywgMHg2YTg1LAorCTB4MDkwNCwgMHgzNmJmLCAweDIwMTksIDB4MDAwNCwgMHg5MDBlLCAweDA4MGMsIDB4NmExMiwgMHgwOTA0LAorCTB4MzZiZiwgMHg3OTg0LCAweDdhODgsIDB4MDRjOSwgMHgwOGE4LCAweGE4OWMsIDB4OTA4YSwgMHgxMDAwLAorCTB4MTJmOCwgMHgwODBjLCAweDRjNzIsIDB4MDFlMCwgMHgwODBjLCAweDZjMTEsIDB4MDExOCwgMHgwODBjLAorCTB4NmMxOSwgMHgxMWIwLCAweDA4MGMsIDB4NmE4NSwgMHgyMDA5LCAweDAwMDIsIDB4MDE2OCwgMHgyMDA5LAorCTB4MDAwMiwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHg2YTEyLCAweDIwMDksIDB4MDAwMywgMHgwMTIwLAorCTB4YTk5OCwgMHhhYTljLCAweDAwZDEsIDB4MDA2MCwgMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLAorCTB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LAorCTB4YTg5NywgMHg0MDAwLCAweDA4MGMsIDB4NTg0OCwgMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLAorCTB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDkxODYsIDB4MDBmZiwgMHgwMTEwLAorCTB4MDA3MSwgMHgwMDYwLCAweDIwMjksIDB4MDA3ZSwgMHgyMDYxLCAweDE4MDAsIDB4NjQ1YywgMHgyNDAwLAorCTB4OTUwNiwgMHgwMTEwLCAweDI1MDgsIDB4MDAxOSwgMHg4NTI5LCAweDFlYzgsIDB4MDAwNSwgMHgwODBjLAorCTB4NjdiNCwgMHgxMTM4LCAweDIyMDAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHgwODBjLAorCTB4ODlhMSwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNmJmLCAweDc5OGMsIDB4MjAwMSwgMHgxOTgwLAorCTB4OTE4YywgMHg4MDAwLCAweDIxMDIsIDB4MDgwYywgMHg0YzU4LCAweDA5MDQsIDB4MzZjMiwgMHgwODBjLAorCTB4NmMxMSwgMHgwMTIwLCAweDA4MGMsIDB4NmMxOSwgMHgxOTA0LCAweDM2YzIsIDB4MDgwYywgMHg2ODdiLAorCTB4MDkwNCwgMHgzNmJmLCAweDA4MGMsIDB4NmEwOSwgMHgwOTA0LCAweDM2YmYsIDB4MjAwMSwgMHgxOTgwLAorCTB4MjAwNCwgMHhkMGZjLCAweDE5MDQsIDB4MzY4ZCwgMHgwODA0LCAweDQ2YWEsIDB4YTlhMCwgMHgyMDAxLAorCTB4MTk4MCwgMHg5MThjLCAweDgwMDAsIDB4YzE4ZCwgMHgyMTAyLCAweDA4MGMsIDB4NGM2NSwgMHgwMWEwLAorCTB4MDgwYywgMHg2YzExLCAweDAxMTgsIDB4MDgwYywgMHg2YzE5LCAweDExNzAsIDB4MDgwYywgMHg2ODdiLAorCTB4MjAwOSwgMHgwMDAyLCAweDAxMjgsIDB4MDgwYywgMHg2YTA5LCAweDExNzAsIDB4MjAwOSwgMHgwMDAzLAorCTB4YTg5NywgMHg0MDA1LCAweGE5OWEsIDB4MDAxMCwgMHhhODk3LCAweDQwMDYsIDB4OTAwZSwgMHg5MDg1LAorCTB4MDAwMSwgMHgyMDAxLCAweDAwMzAsIDB4MDAwNSwgMHhhODk3LCAweDQwMDAsIDB4MjAwMSwgMHgxOTgwLAorCTB4MjAwNCwgMHhkMGZjLCAweDExMjgsIDB4MDgwYywgMHg1ODQ4LCAweDAxMTAsIDB4OTAwNiwgMHgwMDE4LAorCTB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LAorCTB4MzZiZiwgMHg3OThjLCAweDIwMDEsIDB4MTk3ZiwgMHg5MThjLCAweDgwMDAsIDB4MjEwMiwgMHgwODBjLAorCTB4NGM1OCwgMHgwOTA0LCAweDM2YzIsIDB4MDgwYywgMHg2YzExLCAweDAxMjAsIDB4MDgwYywgMHg2YzE5LAorCTB4MTkwNCwgMHgzNmMyLCAweDA4MGMsIDB4Njg3YiwgMHgwOTA0LCAweDM2YmYsIDB4MDgwYywgMHg2OWY3LAorCTB4MDkwNCwgMHgzNmJmLCAweDIwMDEsIDB4MTk3ZiwgMHgyMDA0LCAweGQwZmMsIDB4MTkwNCwgMHgzNjhkLAorCTB4MDgwNCwgMHg0NmFhLCAweGE5YTAsIDB4MjAwMSwgMHgxOTdmLCAweDkxOGMsIDB4ODAwMCwgMHhjMThkLAorCTB4MjEwMiwgMHgwODBjLCAweDRjNjUsIDB4MDFhMCwgMHgwODBjLCAweDZjMTEsIDB4MDExOCwgMHgwODBjLAorCTB4NmMxOSwgMHgxMTcwLCAweDA4MGMsIDB4Njg3YiwgMHgyMDA5LCAweDAwMDIsIDB4MDEyOCwgMHgwODBjLAorCTB4NjlmNywgMHgxMTcwLCAweDIwMDksIDB4MDAwMywgMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLAorCTB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LAorCTB4YTg5NywgMHg0MDAwLCAweDIwMDEsIDB4MTk3ZiwgMHgyMDA0LCAweGQwZmMsIDB4MTEyOCwgMHgwODBjLAorCTB4NTg0OCwgMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLAorCTB4MDAwMCwgMHgwMDA1LCAweDYxMDAsIDB4MDgwNCwgMHgzNjhkLCAweDA4MGMsIDB4NGM3NCwgMHgwOTA0LAorCTB4MzZjMiwgMHgwODBjLCAweDU4NTQsIDB4MTkwNCwgMHgzNmJmLCAweDc5YTgsIDB4ZDE4NCwgMHgxMTU4LAorCTB4YjgzNCwgMHg4MDA3LCAweDc4OWUsIDB4YjgzMCwgMHg4MDA3LCAweDc4OWEsIDB4YmIyYywgMHg4MzFmLAorCTB4YmEyOCwgMHg4MjE3LCAweDAwNTAsIDB4YjgyNCwgMHg4MDA3LCAweDc4OWUsIDB4YjgyMCwgMHg4MDA3LAorCTB4Nzg5YSwgMHhiYjFjLCAweDgzMWYsIDB4YmExOCwgMHg4MjE3LCAweGI5MDAsIDB4OTE4YywgMHgwMjAyLAorCTB4MDgwNCwgMHgzNjhkLCAweDc4YTgsIDB4OTA5YywgMHgwMDAzLCAweGQwYWMsIDB4MTE1MCwgMHhkMGI0LAorCTB4MTE0MCwgMHg5MzlhLCAweDAwMDMsIDB4MWEwNCwgMHgzNmJmLCAweDYyNWMsIDB4Nzg4NCwgMHg5MjA2LAorCTB4MTU0OCwgMHgwODBjLCAweDhiMTAsIDB4MjAwMSwgMHhmZmVjLCAweDIwMDksIDB4MDAwYywgMHg3YThjLAorCTB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4MjAzOSwgMHgwMDAwLCAweDAwMDYsIDB4NzhhOCwgMHg5MDg0LAorCTB4MDA4MCwgMHgxMTE4LCAweDAwMGUsIDB4MDgwNCwgMHg0YzhkLCAweDAwMGUsIDB4MjAzMSwgMHgwMDAwLAorCTB4MjA2MSwgMHgxOGI4LCAweDJjNDQsIDB4YTY2YSwgMHhhMTdhLCAweGE3NzIsIDB4YTA3NiwgMHhhMjhlLAorCTB4YTM5MiwgMHhhNDk2LCAweGE1OWEsIDB4MDgwYywgMHgxMTRlLCAweDcwMDcsIDB4MDAwMiwgMHg3MDFmLAorCTB4NDg2MiwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNmJmLCAweDA4MGMsIDB4NGM3NCwgMHgwOTA0LAorCTB4MzZjMiwgMHgwODBjLCAweDZjMTEsIDB4MTkwNCwgMHgzNmJmLCAweDAwYzYsIDB4MDgwYywgMHg0YzQxLAorCTB4MDBjZSwgMHgwOTA0LCAweDM2YmYsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLAorCTB4N2VhOCwgMHgwODBjLCAweGQwOTIsIDB4MDkwNCwgMHgzNmJmLCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLAorCTB4NDg2NiwgMHgwMDA1LCAweDA4MGMsIDB4NDM5NywgMHgwODA0LCAweDM2OGQsIDB4YTgzMCwgMHg5MDg2LAorCTB4MDEwMCwgMHgwOTA0LCAweDM2YmYsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLAorCTB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMDA5LCAweDAwMGMsIDB4N2E4YywgMHg3Yjg4LAorCTB4N2M5YywgMHg3ZDk4LCAweDA4MDQsIDB4NGM4ZCwgMHg5MDA2LCAweDA4MGMsIDB4MjZmNSwgMHg3OGE4LAorCTB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDBmZiwgMHgwMTE4LCAweDgxZmYsIDB4MTkwNCwgMHgzNmJmLAorCTB4MDgwYywgMHg3NzllLCAweDAxMTAsIDB4MDgwYywgMHg2MTYyLCAweDc4ODgsIDB4OTA4YSwgMHgxMDAwLAorCTB4MWEwNCwgMHgzNmMyLCAweDc5ODQsIDB4OTE4NiwgMHgwMGZmLCAweDAxMzgsIDB4OTE4MiwgMHgwMDdmLAorCTB4MWEwNCwgMHgzNmMyLCAweDIxMDAsIDB4MDgwYywgMHgyNmJmLCAweDAwMjYsIDB4MDBjNiwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwNjEsIDB4MWEwNCwgMHg2MDFiLCAweDAwMDAsIDB4NjAxZiwgMHgwMDAwLAorCTB4NjA3YiwgMHgwMDAwLCAweDYwN2YsIDB4MDAwMCwgMHgwODBjLCAweDc3OWUsIDB4MTE1OCwgMHgwODBjLAorCTB4N2FiNiwgMHgwODBjLCAweDYxOWQsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4NzdlMiwgMHgwODBjLAorCTB4NzZjZCwgMHgwMGYwLCAweDA4MGMsIDB4YWNmYywgMHgwODBjLCAweGIwOWIsIDB4MDgwYywgMHhhZDE4LAorCTB4MjA2MSwgMHgwMTAwLCAweDIwMDEsIDB4MTgxOCwgMHgyMDA0LCAweDkwODQsIDB4MDBmZiwgMHg4MTBmLAorCTB4OTEwNSwgMHg2MDRhLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsIDB4MjAwOSwgMHgxOTk5LAorCTB4MjAwYiwgMHgwMDAwLCAweDIwMDksIDB4MDAyZCwgMHgyMDExLCAweDYwODgsIDB4MDgwYywgMHg4YTVkLAorCTB4Nzk4NCwgMHgwODBjLCAweDc3OWUsIDB4MTExMCwgMHgyMDA5LCAweDAwZmYsIDB4N2E4OCwgMHgwODBjLAorCTB4NDcwZCwgMHgwMTJlLCAweDAwY2UsIDB4MDAyZSwgMHgwODA0LCAweDM2OGQsIDB4Nzk4NCwgMHgwODBjLAorCTB4Njc0OSwgMHgyYjA4LCAweDE5MDQsIDB4MzZjMiwgMHgwODA0LCAweDM2OGQsIDB4ODFmZiwgMHgwMTIwLAorCTB4MjAwOSwgMHgwMDAxLCAweDA4MDQsIDB4MzZiZiwgMHg2MGRjLCAweGQwYWMsIDB4MTEzMCwgMHhkMDljLAorCTB4MTEyMCwgMHgyMDA5LCAweDAwMDUsIDB4MDgwNCwgMHgzNmJmLCAweDA4MGMsIDB4NGM0MSwgMHgxMTIwLAorCTB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzZiZiwgMHg3OTg0LCAweDgxZmYsIDB4MDkwNCwgMHgzNmMyLAorCTB4OTE5MiwgMHgwMDIxLCAweDFhMDQsIDB4MzZjMiwgMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LAorCTB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4NzAyYSwgMHhhZjYwLCAweDc3MzYsIDB4MDgwYywgMHg0YzhhLAorCTB4NzAxZiwgMHg0OTIxLCAweDc4ODAsIDB4OTA4NiwgMHgwMDZlLCAweDAxMTAsIDB4NzAxZiwgMHg1MmRhLAorCTB4MDAwNSwgMHgyMDA5LCAweDAwODAsIDB4MDgwYywgMHg2N2I0LCAweDExMTgsIDB4MDgwYywgMHg2YzExLAorCTB4MDEyMCwgMHgyMDIxLCAweDQwMGEsIDB4MDgwNCwgMHgzNjhmLCAweDAwZDYsIDB4MDA5NiwgMHhhOTY0LAorCTB4YWE2YywgMHhhYjcwLCAweGFjNzQsIDB4YWQ3OCwgMHhhZTdjLCAweGE4ODQsIDB4OTBiZSwgMHgwMTAwLAorCTB4MDkwNCwgMHg0OWJhLCAweDkwYmUsIDB4MDExMiwgMHgwOTA0LCAweDQ5YmEsIDB4OTBiZSwgMHgwMTEzLAorCTB4MDkwNCwgMHg0OWJhLCAweDkwYmUsIDB4MDExNCwgMHgwOTA0LCAweDQ5YmEsIDB4OTBiZSwgMHgwMTE3LAorCTB4MDkwNCwgMHg0OWJhLCAweDkwYmUsIDB4MDExYSwgMHgwOTA0LCAweDQ5YmEsIDB4OTBiZSwgMHgwMTFjLAorCTB4MDkwNCwgMHg0OWJhLCAweDkwYmUsIDB4MDEyMSwgMHgwOTA0LCAweDQ5YTEsIDB4OTBiZSwgMHgwMTMxLAorCTB4MDkwNCwgMHg0OWExLCAweDkwYmUsIDB4MDE3MSwgMHgwOTA0LCAweDQ5YmEsIDB4OTBiZSwgMHgwMTczLAorCTB4MDkwNCwgMHg0OWJhLCAweDkwYmUsIDB4MDFhMSwgMHgxMTI4LCAweGE4OTQsIDB4ODAwNywgMHhhODk2LAorCTB4MDgwNCwgMHg0OWM1LCAweDkwYmUsIDB4MDIxMiwgMHgwOTA0LCAweDQ5YWUsIDB4OTBiZSwgMHgwMjEzLAorCTB4MDVlOCwgMHg5MGJlLCAweDAyMTQsIDB4MDUwMCwgMHg5MGJlLCAweDAyMTcsIDB4MDE4OCwgMHg5MGJlLAorCTB4MDIxYSwgMHgxMTIwLCAweGE4OWMsIDB4ODAwNywgMHhhODllLCAweDA0ZTAsIDB4OTBiZSwgMHgwMjFmLAorCTB4MDVjOCwgMHg5MGJlLCAweDAzMDAsIDB4MDViMCwgMHgwMDllLCAweDAwZGUsIDB4MDgwNCwgMHgzNmMyLAorCTB4NzAyOCwgMHg5MDgwLCAweDAwMTAsIDB4MjA5OCwgMHgyMGEwLCAweDcwMzQsIDB4MjBlMCwgMHgyMGU4LAorCTB4MjBhOSwgMHgwMDA3LCAweDA4MGMsIDB4NGEwMywgMHg3MDI4LCAweDkwODAsIDB4MDAwZSwgMHgyMDk4LAorCTB4MjBhMCwgMHg3MDM0LCAweDIwZTAsIDB4MjBlOCwgMHgyMGE5LCAweDAwMDEsIDB4MDgwYywgMHg0YTAzLAorCTB4MDBjOCwgMHg3MDI4LCAweDkwODAsIDB4MDAwYywgMHgyMDk4LCAweDIwYTAsIDB4NzAzNCwgMHgyMGUwLAorCTB4MjBlOCwgMHgyMGE5LCAweDAwMDEsIDB4MDgwYywgMHg0YTEwLCAweDAwYjgsIDB4NzAyOCwgMHg5MDgwLAorCTB4MDAwZSwgMHgyMDk4LCAweDIwYTAsIDB4NzAzNCwgMHgyMGUwLCAweDIwZTgsIDB4MjBhOSwgMHgwMDAxLAorCTB4MDgwYywgMHg0YTEwLCAweDcwMjgsIDB4OTA4MCwgMHgwMDBjLCAweDIwOTgsIDB4MjBhMCwgMHg3MDM0LAorCTB4MjBlMCwgMHgyMGU4LCAweDIwYTksIDB4MDAwMSwgMHgwNGYxLCAweDAwYzYsIDB4MDgwYywgMHg0YzQxLAorCTB4MDU1MCwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHhhODY3LCAweDAxMTksIDB4OTAwNiwgMHhhODgyLAorCTB4YTg3ZiwgMHgwMDIwLCAweGE4OGIsIDB4MDAwMSwgMHg4MTBiLCAweGE5YWUsIDB4YThiMiwgMHhhYWI2LAorCTB4YWJiYSwgMHhhY2JlLCAweGFkYzIsIDB4YTljNiwgMHhhOGNhLCAweDAwY2UsIDB4MDA5ZSwgMHgwMGRlLAorCTB4YTg2NiwgMHhhODIyLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweGE4MDQsIDB4MjA0OCwgMHgwODBjLAorCTB4ZDBhZCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDM2YmYsIDB4NzAwNywgMHgwMDAzLAorCTB4NzAxZiwgMHg0OWZhLCAweDAwMDUsIDB4MDBjZSwgMHgwMDllLCAweDAwZGUsIDB4MjAwOSwgMHgwMDAyLAorCTB4MDgwNCwgMHgzNmJmLCAweGE4MjAsIDB4OTA4NiwgMHg4MDAxLCAweDE5MDQsIDB4MzY4ZCwgMHgyMDA5LAorCTB4MDAwNCwgMHgwODA0LCAweDM2YmYsIDB4MDAxNiwgMHgwMDI2LCAweDM1MTAsIDB4MjBhOSwgMHgwMDAyLAorCTB4NDAwMiwgMHg0MTA0LCAweDQwMDQsIDB4ODIxMSwgMHgxZGM4LCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAorCTB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgzNTIwLCAweDIwYTksIDB4MDAwNCwgMHg0MDAyLAorCTB4NDMwNCwgMHg0MjA0LCAweDQxMDQsIDB4NDAwNCwgMHg4NDIxLCAweDFkYjgsIDB4MDA0ZSwgMHgwMDNlLAorCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LAorCTB4MzZiZiwgMHg2MGRjLCAweGQwYWMsIDB4MTE4OCwgMHgyMDA5LCAweDE4MGQsIDB4MjEwYywgMHhkMThjLAorCTB4MDEzMCwgMHhkMDljLCAweDAxMjAsIDB4MjAwOSwgMHgwMDE2LCAweDA4MDQsIDB4MzZiZiwgMHhkMDljLAorCTB4MTEyMCwgMHgyMDA5LCAweDAwMDUsIDB4MDgwNCwgMHgzNmJmLCAweDc5ODQsIDB4NzhhOCwgMHgyMDQwLAorCTB4MDgwYywgMHhiMDk0LCAweDExMjAsIDB4OTE4MiwgMHgwMDdmLCAweDBhMDQsIDB4MzZjMiwgMHg5MTg2LAorCTB4MDBmZiwgMHgwOTA0LCAweDM2YzIsIDB4OTE4MiwgMHgwODAwLCAweDFhMDQsIDB4MzZjMiwgMHg3YThjLAorCTB4N2I4OCwgMHg2MDdjLCAweDkzMDYsIDB4MTE1OCwgMHg2MDgwLCAweDkyNGUsIDB4MDkwNCwgMHgzNmMyLAorCTB4MDgwYywgMHhiMDk0LCAweDExMjAsIDB4OTljYywgMHhmZjAwLCAweDA5MDQsIDB4MzZjMiwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MTgwZCwgMHgyMDA0LCAweGQwOGMsIDB4MDE5OCwgMHg5Mzg2LAorCTB4MDBmZiwgMHgwMTgwLCAweDAwMjYsIDB4MjAxMSwgMHg4MDA4LCAweDA4MGMsIDB4NmMzNSwgMHgwMDJlLAorCTB4MDE0OCwgMHg5MThkLCAweDgwMDAsIDB4MDgwYywgMHg2YzdmLCAweDExMjAsIDB4MjAwMSwgMHg0MDA5LAorCTB4MDgwNCwgMHg0YWMxLCAweDA4MGMsIDB4NGI1NCwgMHgwOTA0LCAweDRhYzcsIDB4MDA4NiwgMHg5MGM2LAorCTB4NDAwMCwgMHgwMDhlLCAweDE1MzgsIDB4MDBjNiwgMHgwMDA2LCAweDAwMzYsIDB4YjgxOCwgMHhiYjFjLAorCTB4OTMwNSwgMHhiYjIwLCAweDkzMDUsIDB4YmIyNCwgMHg5MzA1LCAweGJiMjgsIDB4OTMwNSwgMHhiYjJjLAorCTB4OTMwNSwgMHhiYjMwLCAweDkzMDUsIDB4YmIzNCwgMHg5MzA1LCAweDAwM2UsIDB4MDU3MCwgMHhkODhjLAorCTB4MTEyOCwgMHgwODBjLCAweDZjMTEsIDB4MDExMCwgMHhjODlkLCAweDA0MzgsIDB4OTAwZSwgMHgwODBjLAorCTB4NmFhZSwgMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwMDBlLAorCTB4MDBjZSwgMHgwMGI4LCAweDkwYzYsIDB4NDAwNywgMHgxMTEwLCAweDI0MDgsIDB4MDA5MCwgMHg5MGM2LAorCTB4NDAwOCwgMHgxMTE4LCAweDI3MDgsIDB4MjYxMCwgMHgwMDYwLCAweDkwYzYsIDB4NDAwOSwgMHgxMTA4LAorCTB4MDA0MCwgMHg5MGM2LCAweDQwMDYsIDB4MTEwOCwgMHgwMDIwLCAweDIwMDEsIDB4NDAwNSwgMHgyMDA5LAorCTB4MDAwYSwgMHgyMDIwLCAweDAxMmUsIDB4MDgwNCwgMHgzNjhmLCAweDAwMGUsIDB4MDBjZSwgMHgyYjAwLAorCTB4NzAyNiwgMHgwMDE2LCAweDAwYjYsIDB4MDBjNiwgMHgwMGU2LCAweDJjNzAsIDB4MDgwYywgMHhiMWRkLAorCTB4MDkwNCwgMHg0YjFjLCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLCAweGQzYjYsIDB4MmU1OCwgMHgwMGVlLAorCTB4MDBlNiwgMHgwMGM2LCAweDA4MGMsIDB4NGM0MSwgMHgwMGNlLCAweDJiNzAsIDB4MTE1OCwgMHgwODBjLAorCTB4YjE2YywgMHgwMGVlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDFlLCAweDAxMmUsIDB4MjAwOSwgMHgwMDAyLAorCTB4MDgwNCwgMHgzNmJmLCAweDkwMGUsIDB4YTk2NiwgMHhhOTZhLCAweDI5MDAsIDB4NjAxNiwgMHhhOTMyLAorCTB4YTg2OCwgMHhjMGZkLCAweGQ4OGMsIDB4MDEwOCwgMHhjMGY1LCAweGE4NmEsIDB4ZDg5YywgMHgxMTEwLAorCTB4MDgwYywgMHgzMzE1LCAweDYwMjMsIDB4MDAwMSwgMHg5MDA2LCAweDA4MGMsIDB4NjZlNiwgMHhkODljLAorCTB4MDEzOCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg2NmZhLCAweDIwMDksIDB4MDAwMywgMHgwMDMwLAorCTB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjZmYSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHhiMjBhLAorCTB4NzhhOCwgMHhkMDk0LCAweDAxMzgsIDB4MDBlZSwgMHg3MDI0LCAweDAwZTYsIDB4MjA1OCwgMHhiOGQ0LAorCTB4YzA4ZCwgMHhiOGQ2LCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDFlLAorCTB4MDEyZSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDM2YmYsIDB4NzAwNywgMHgwMDAzLAorCTB4NzAxZiwgMHg0YjJiLCAweDAwMDUsIDB4YTgzMCwgMHgyMDA5LCAweDE4MGQsIDB4MjEwYywgMHhkMThjLAorCTB4MDE0MCwgMHgyMDA4LCAweDkxOGUsIDB4ZGVhZCwgMHgxMTIwLCAweDIwMjEsIDB4NDAwOSwgMHgwODA0LAorCTB4MzY4ZiwgMHg5MDg2LCAweDAxMDAsIDB4NzAyNCwgMHgyMDU4LCAweDExMzgsIDB4MjAwOSwgMHgwMDA0LAorCTB4YmEwNCwgMHg5Mjk0LCAweDAwZmYsIDB4MDgwNCwgMHg1NzhlLCAweDkwMGUsIDB4YTg2OCwgMHhkMGY0LAorCTB4MTkwNCwgMHgzNjhkLCAweDA4MGMsIDB4NmFhZSwgMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLAorCTB4MDEwOCwgMHhjMThkLCAweDA4MDQsIDB4MzY4ZCwgMHgwMGU2LCAweDAwZDYsIDB4MDA5NiwgMHg4M2ZmLAorCTB4MDkwNCwgMHg0YmEzLCAweDkwMmUsIDB4MDgwYywgMHhiMDk0LCAweDAxMzAsIDB4OTAyNiwgMHgyMGE5LAorCTB4MDgwMCwgMHgyMDcxLCAweDEwMDAsIDB4MDAzMCwgMHgyMDIxLCAweDAwN2YsIDB4MjBhOSwgMHgwNzgxLAorCTB4MjA3MSwgMHgxMDdmLCAweDJlMDQsIDB4OTAwNSwgMHgxMWI4LCAweDIxMDAsIDB4OTQwNiwgMHgxOTA0LAorCTB4NGJiNCwgMHgyNDI4LCAweDk0Y2UsIDB4MDA3ZiwgMHgxMTIwLCAweDkyY2UsIDB4ZmZmZCwgMHgxNTU4LAorCTB4MDAzMCwgMHg5NGNlLCAweDAwODAsIDB4MTEzMCwgMHg5MmNlLCAweGZmZmMsIDB4MTUyMCwgMHg5M2NlLAorCTB4MDBmZiwgMHgxNTA4LCAweGM1ZmQsIDB4MDQ4MCwgMHgyMDU4LCAweGJmMTAsIDB4MjcwMCwgMHg5MzA2LAorCTB4MTFlOCwgMHhiZTE0LCAweDI2MDAsIDB4OTIwNiwgMHgxMWM4LCAweDI0MDAsIDB4OTEwNiwgMHgxMTgwLAorCTB4ZDg4NCwgMHgwNTk4LCAweGQ4OTQsIDB4MTU4OCwgMHgwODBjLCAweDZiYjEsIDB4MTU3MCwgMHgyMDAxLAorCTB4NDAwMCwgMHgwNDYwLCAweDA4MGMsIDB4NmMxMSwgMHgxNTQwLCAweDIwMDEsIDB4NDAwMCwgMHgwNDMwLAorCTB4MjAwMSwgMHg0MDA3LCAweDA0MTgsIDB4MjAwMSwgMHg0MDA2LCAweDA0MDAsIDB4MjQwMCwgMHg5MTA2LAorCTB4MTE1OCwgMHhiZTE0LCAweDg3ZmYsIDB4MTEyOCwgMHg4NmZmLCAweDA5MTgsIDB4MDgwYywgMHhiMDk0LAorCTB4MTkwMCwgMHgyMDAxLCAweDQwMDgsIDB4MDA5MCwgMHg4NDIwLCAweDhlNzAsIDB4MWYwNCwgMHg0YjZhLAorCTB4ODVmZiwgMHgxMTMwLCAweDIwMDEsIDB4NDAwOSwgMHgwMDQ4LCAweDIwMDEsIDB4MDAwMSwgMHgwMDMwLAorCTB4MDgwYywgMHg2NzQ5LCAweDFkZDAsIDB4YmIxMiwgMHhiYTE2LCAweDkwMDYsIDB4OTAwNSwgMHgwMDllLAorCTB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LAorCTB4MzZiZiwgMHgwODBjLCAweDRjNDEsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNmJmLAorCTB4YTg2NywgMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDc4ODQsIDB4OTAwNSwgMHgwOTA0LAorCTB4MzZjMiwgMHg5MDk2LCAweDAwZmYsIDB4MDEyMCwgMHg5MDkyLCAweDAwMDQsIDB4MWEwNCwgMHgzNmMyLAorCTB4MjAxMCwgMHgyOTE4LCAweDA4MGMsIDB4MzJiNSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LAorCTB4MzZiZiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg0YmY2LCAweDAwMDUsIDB4YTgzMCwgMHg5MDg2LAorCTB4MDEwMCwgMHgxOTA0LCAweDM2OGQsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsIDB4MzZiZiwgMHg3OTg0LAorCTB4MDgwYywgMHhiMDk0LCAweDExMjAsIDB4OTE4MiwgMHgwMDdmLCAweDBhMDQsIDB4MzZjMiwgMHg5MTg2LAorCTB4MDBmZiwgMHgwOTA0LCAweDM2YzIsIDB4OTE4MiwgMHgwODAwLCAweDFhMDQsIDB4MzZjMiwgMHgyMDAxLAorCTB4OTQwMCwgMHgwODBjLCAweDU3ZTksIDB4MTkwNCwgMHgzNmJmLCAweDA4MDQsIDB4MzY4ZCwgMHhhOTk4LAorCTB4MDgwYywgMHhiMDk0LCAweDExMTgsIDB4OTE4MiwgMHgwMDdmLCAweDAyODAsIDB4OTE4NiwgMHgwMGZmLAorCTB4MDE2OCwgMHg5MTgyLCAweDA4MDAsIDB4MTI1MCwgMHgyMDAxLCAweDk0MDAsIDB4MDgwYywgMHg1N2U5LAorCTB4MTFhOCwgMHgwMDYwLCAweGE4OTcsIDB4NDAwNSwgMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LAorCTB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLAorCTB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDAwMDUsIDB4MjAwOSwgMHgwMDBhLAorCTB4MGM0OCwgMHgwODBjLCAweDEwNTksIDB4MDE5OCwgMHg5MDA2LCAweGE4MDIsIDB4NzAxNCwgMHg5MDA1LAorCTB4MTEyMCwgMHgyOTAwLCAweDcwMTYsIDB4NzAxYSwgMHgwMDQwLCAweDcwMTgsIDB4YTgwMiwgMHgwMDg2LAorCTB4MjA0MCwgMHgyOTAwLCAweGEwMDYsIDB4NzAxYSwgMHgwMDhlLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LAorCTB4Nzk4NCwgMHgwODBjLCAweDY3YjQsIDB4MTEzMCwgMHg3ZTg4LCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLAorCTB4NDAwMCwgMHgwMjA4LCAweDkwNWUsIDB4OGJmZiwgMHgwMDA1LCAweGE5OTgsIDB4MDgwYywgMHg2N2I0LAorCTB4MTEzMCwgMHhhZTljLCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLCAweDQwMDAsIDB4MDIwOCwgMHg5MDVlLAorCTB4OGJmZiwgMHgwMDA1LCAweGFlOTgsIDB4MDAwOCwgMHg3ZTg0LCAweDI2MDgsIDB4MDgwYywgMHg2N2I0LAorCTB4MTEwOCwgMHgwMDA4LCAweDkwNWUsIDB4OGJmZiwgMHgwMDA1LCAweDAwMTYsIDB4NzExNCwgMHg4MWZmLAorCTB4MDEyOCwgMHgyMTQ4LCAweGE5MDQsIDB4MDgwYywgMHgxMDhiLCAweDBjYzgsIDB4NzExNiwgMHg3MTFhLAorCTB4MDAxZSwgMHgwMDA1LCAweDIwMzEsIDB4MDAwMSwgMHgwMDEwLCAweDIwMzEsIDB4MDAwMCwgMHgyMDYxLAogCTB4MThiOCwgMHgyYzQ0LCAweGE2NmEsIDB4YTE3YSwgMHhhNzcyLCAweGEwNzYsIDB4YTI4ZSwgMHhhMzkyLAotCTB4YTQ5NiwgMHhhNTlhLCAweDA4MGMsIDB4MTE0MiwgMHg3MDA3LCAweDAwMDIsIDB4NzAxZiwgMHg0ODE5LAotCTB4MDAwNSwgMHg4MWZmLCAweDE5MDQsIDB4MzZhNSwgMHgwODBjLCAweDRiZmIsIDB4MDkwNCwgMHgzNmE4LAotCTB4MDgwYywgMHg2YmNkLCAweDE5MDQsIDB4MzZhNSwgMHgwMGM2LCAweDA4MGMsIDB4NGJjOCwgMHgwMGNlLAotCTB4MDkwNCwgMHgzNmE1LCAweGE4NjcsIDB4MDAwMCwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHg3ZWE4LAotCTB4MDgwYywgMHhjZGFhLCAweDA5MDQsIDB4MzZhNSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg0ODFkLAotCTB4MDAwNSwgMHgwODBjLCAweDQzNWIsIDB4MDgwNCwgMHgzNjczLCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLAotCTB4MDkwNCwgMHgzNmE1LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LAotCTB4ZmZjMCwgMHg5MDgwLCAweDAwMWIsIDB4MjAwOSwgMHgwMDBjLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLAotCTB4N2Q5OCwgMHgwODA0LCAweDRjMTQsIDB4OTAwNiwgMHgwODBjLCAweDI3MGEsIDB4NzhhOCwgMHg5MDg0LAotCTB4MDBmZiwgMHg5MDg2LCAweDAwZmYsIDB4MDExOCwgMHg4MWZmLCAweDE5MDQsIDB4MzZhNSwgMHgwODBjLAotCTB4NzY5ZCwgMHgwMTEwLCAweDA4MGMsIDB4NjEzZCwgMHg3ODg4LCAweDkwOGEsIDB4MTAwMCwgMHgxYTA0LAotCTB4MzZhOCwgMHg3OTg0LCAweDkxODYsIDB4MDBmZiwgMHgwMTM4LCAweDkxODIsIDB4MDA3ZiwgMHgxYTA0LAotCTB4MzZhOCwgMHgyMTAwLCAweDA4MGMsIDB4MjZkNCwgMHgwMDI2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDYxLCAweDFhMDUsIDB4NjAxYiwgMHgwMDAwLCAweDYwMWYsIDB4MDAwMCwgMHg2MDdiLAotCTB4MDAwMCwgMHg2MDdmLCAweDAwMDAsIDB4MDgwYywgMHg3NjlkLCAweDExNTgsIDB4MDgwYywgMHg3OTlmLAotCTB4MDgwYywgMHg2MTc4LCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDc2ZTEsIDB4MDgwYywgMHg3NWNjLAotCTB4MDBmMCwgMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHhhZTg3LCAweDA4MGMsIDB4YWIxMywgMHgyMDYxLAotCTB4MDEwMCwgMHgyMDAxLCAweDE4MTgsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4ODEwZiwgMHg5MTA1LAotCTB4NjA0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDIwMDksIDB4MTk5YSwgMHgyMDBiLAotCTB4MDAwMCwgMHgyMDA5LCAweDAwMmQsIDB4MjAxMSwgMHg2MDYzLCAweDA4MGMsIDB4ODhmNiwgMHg3OTg0LAotCTB4MDgwYywgMHg3NjlkLCAweDExMTAsIDB4MjAwOSwgMHgwMGZmLCAweDdhODgsIDB4MDgwYywgMHg0NmM0LAotCTB4MDEyZSwgMHgwMGNlLCAweDAwMmUsIDB4MDgwNCwgMHgzNjczLCAweDc5ODQsIDB4MDgwYywgMHg2NzE4LAotCTB4MmIwOCwgMHgxOTA0LCAweDM2YTgsIDB4MDgwNCwgMHgzNjczLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LAotCTB4MDAwMSwgMHgwODA0LCAweDM2YTUsIDB4NjBkYywgMHhkMGFjLCAweDExMzAsIDB4ZDA5YywgMHgxMTIwLAotCTB4MjAwOSwgMHgwMDA1LCAweDA4MDQsIDB4MzZhNSwgMHgwODBjLCAweDRiYzgsIDB4MTEyMCwgMHgyMDA5LAotCTB4MDAwMiwgMHgwODA0LCAweDM2YTUsIDB4Nzk4NCwgMHg4MWZmLCAweDA5MDQsIDB4MzZhOCwgMHg5MTkyLAotCTB4MDAyMSwgMHgxYTA0LCAweDM2YTgsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHhhODVjLAotCTB4OTA4MCwgMHgwMDE5LCAweDcwMmEsIDB4YWY2MCwgMHg3NzM2LCAweDA4MGMsIDB4NGMxMSwgMHg3MDFmLAotCTB4NDhkOCwgMHg3ODgwLCAweDkwODYsIDB4MDA2ZSwgMHgwMTEwLCAweDcwMWYsIDB4NTJiYSwgMHgwMDA1LAotCTB4MjAwOSwgMHgwMDgwLCAweDA4MGMsIDB4Njc4MywgMHgxMTE4LCAweDA4MGMsIDB4NmJjZCwgMHgwMTIwLAotCTB4MjAyMSwgMHg0MDBhLCAweDA4MDQsIDB4MzY3NSwgMHgwMGQ2LCAweDAwOTYsIDB4YTk2NCwgMHhhYTZjLAotCTB4YWI3MCwgMHhhYzc0LCAweGFkNzgsIDB4YWU3YywgMHhhODg0LCAweDkwYmUsIDB4MDEwMCwgMHgwOTA0LAotCTB4NDk3MSwgMHg5MGJlLCAweDAxMTIsIDB4MDkwNCwgMHg0OTcxLCAweDkwYmUsIDB4MDExMywgMHgwOTA0LAotCTB4NDk3MSwgMHg5MGJlLCAweDAxMTQsIDB4MDkwNCwgMHg0OTcxLCAweDkwYmUsIDB4MDExNywgMHgwOTA0LAotCTB4NDk3MSwgMHg5MGJlLCAweDAxMWEsIDB4MDkwNCwgMHg0OTcxLCAweDkwYmUsIDB4MDExYywgMHgwOTA0LAotCTB4NDk3MSwgMHg5MGJlLCAweDAxMjEsIDB4MDkwNCwgMHg0OTU4LCAweDkwYmUsIDB4MDEzMSwgMHgwOTA0LAotCTB4NDk1OCwgMHg5MGJlLCAweDAxNzEsIDB4MDkwNCwgMHg0OTcxLCAweDkwYmUsIDB4MDE3MywgMHgwOTA0LAotCTB4NDk3MSwgMHg5MGJlLCAweDAxYTEsIDB4MTEyOCwgMHhhODk0LCAweDgwMDcsIDB4YTg5NiwgMHgwODA0LAotCTB4NDk3YywgMHg5MGJlLCAweDAyMTIsIDB4MDkwNCwgMHg0OTY1LCAweDkwYmUsIDB4MDIxMywgMHgwNWU4LAotCTB4OTBiZSwgMHgwMjE0LCAweDA1MDAsIDB4OTBiZSwgMHgwMjE3LCAweDAxODgsIDB4OTBiZSwgMHgwMjFhLAotCTB4MTEyMCwgMHhhODljLCAweDgwMDcsIDB4YTg5ZSwgMHgwNGUwLCAweDkwYmUsIDB4MDIxZiwgMHgwNWM4LAotCTB4OTBiZSwgMHgwMzAwLCAweDA1YjAsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MDQsIDB4MzZhOCwgMHg3MDI4LAotCTB4OTA4MCwgMHgwMDEwLCAweDIwOTgsIDB4MjBhMCwgMHg3MDM0LCAweDIwZTAsIDB4MjBlOCwgMHgyMGE5LAotCTB4MDAwNywgMHgwODBjLCAweDQ5YmEsIDB4NzAyOCwgMHg5MDgwLCAweDAwMGUsIDB4MjA5OCwgMHgyMGEwLAotCTB4NzAzNCwgMHgyMGUwLCAweDIwZTgsIDB4MjBhOSwgMHgwMDAxLCAweDA4MGMsIDB4NDliYSwgMHgwMGM4LAotCTB4NzAyOCwgMHg5MDgwLCAweDAwMGMsIDB4MjA5OCwgMHgyMGEwLCAweDcwMzQsIDB4MjBlMCwgMHgyMGU4LAotCTB4MjBhOSwgMHgwMDAxLCAweDA4MGMsIDB4NDljNywgMHgwMGI4LCAweDcwMjgsIDB4OTA4MCwgMHgwMDBlLAotCTB4MjA5OCwgMHgyMGEwLCAweDcwMzQsIDB4MjBlMCwgMHgyMGU4LCAweDIwYTksIDB4MDAwMSwgMHgwODBjLAotCTB4NDljNywgMHg3MDI4LCAweDkwODAsIDB4MDAwYywgMHgyMDk4LCAweDIwYTAsIDB4NzAzNCwgMHgyMGUwLAotCTB4MjBlOCwgMHgyMGE5LCAweDAwMDEsIDB4MDRmMSwgMHgwMGM2LCAweDA4MGMsIDB4NGJjOCwgMHgwNTUwLAotCTB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4YTg2NywgMHgwMTE5LCAweDkwMDYsIDB4YTg4MiwgMHhhODdmLAotCTB4MDAyMCwgMHhhODhiLCAweDAwMDEsIDB4ODEwYiwgMHhhOWFlLCAweGE4YjIsIDB4YWFiNiwgMHhhYmJhLAotCTB4YWNiZSwgMHhhZGMyLCAweGE5YzYsIDB4YThjYSwgMHgwMGNlLCAweDAwOWUsIDB4MDBkZSwgMHhhODY2LAotCTB4YTgyMiwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHhhODA0LCAweDIwNDgsIDB4MDgwYywgMHhjZGM1LAotCTB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNmE1LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLAotCTB4NDliMSwgMHgwMDA1LCAweDAwY2UsIDB4MDA5ZSwgMHgwMGRlLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LAotCTB4MzZhNSwgMHhhODIwLCAweDkwODYsIDB4ODAwMSwgMHgxOTA0LCAweDM2NzMsIDB4MjAwOSwgMHgwMDA0LAotCTB4MDgwNCwgMHgzNmE1LCAweDAwMTYsIDB4MDAyNiwgMHgzNTEwLCAweDIwYTksIDB4MDAwMiwgMHg0MDAyLAotCTB4NDEwNCwgMHg0MDA0LCAweDgyMTEsIDB4MWRjOCwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LAotCTB4MDAyNiwgMHgwMDM2LCAweDAwNDYsIDB4MzUyMCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMiwgMHg0MzA0LAotCTB4NDIwNCwgMHg0MTA0LCAweDQwMDQsIDB4ODQyMSwgMHgxZGI4LCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDA1LCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNmE1LAotCTB4NjBkYywgMHhkMGFjLCAweDExMzAsIDB4ZDA5YywgMHgxMTIwLCAweDIwMDksIDB4MDAwNSwgMHgwODA0LAotCTB4MzZhNSwgMHg3OTg0LCAweDc4YTgsIDB4MjA0MCwgMHgwODBjLCAweGFlODAsIDB4MTEyMCwgMHg5MTgyLAotCTB4MDA3ZiwgMHgwYTA0LCAweDM2YTgsIDB4OTE4NiwgMHgwMGZmLCAweDA5MDQsIDB4MzZhOCwgMHg5MTgyLAotCTB4MDgwMCwgMHgxYTA0LCAweDM2YTgsIDB4N2E4YywgMHg3Yjg4LCAweDYwN2MsIDB4OTMwNiwgMHgxMTU4LAotCTB4NjA4MCwgMHg5MjRlLCAweDA5MDQsIDB4MzZhOCwgMHgwODBjLCAweGFlODAsIDB4MTEyMCwgMHg5OWNjLAotCTB4ZmYwMCwgMHgwOTA0LCAweDM2YTgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg0YWRiLAotCTB4MDkwNCwgMHg0YTViLCAweDAwODYsIDB4OTBjNiwgMHg0MDAwLCAweDAwOGUsIDB4MTUzOCwgMHgwMGM2LAotCTB4MDAwNiwgMHgwMDM2LCAweGI4MTgsIDB4YmIxYywgMHg5MzA1LCAweGJiMjAsIDB4OTMwNSwgMHhiYjI0LAotCTB4OTMwNSwgMHhiYjI4LCAweDkzMDUsIDB4YmIyYywgMHg5MzA1LCAweGJiMzAsIDB4OTMwNSwgMHhiYjM0LAotCTB4OTMwNSwgMHgwMDNlLCAweDA1NzAsIDB4ZDg4YywgMHgxMTI4LCAweDA4MGMsIDB4NmJjZCwgMHgwMTEwLAotCTB4Yzg5ZCwgMHgwNDM4LCAweDkwMGUsIDB4MDgwYywgMHg2YTc0LCAweDExMDgsIDB4YzE4NSwgMHhiODAwLAotCTB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDAwZSwgMHgwMGNlLCAweDAwYjgsIDB4OTBjNiwgMHg0MDA3LAotCTB4MTExMCwgMHgyNDA4LCAweDAwOTAsIDB4OTBjNiwgMHg0MDA4LCAweDExMTgsIDB4MjcwOCwgMHgyNjEwLAotCTB4MDA2MCwgMHg5MGM2LCAweDQwMDksIDB4MTEwOCwgMHgwMDQwLCAweDkwYzYsIDB4NDAwNiwgMHgxMTA4LAotCTB4MDAyMCwgMHgyMDAxLCAweDQwMDUsIDB4MjAwOSwgMHgwMDBhLCAweDIwMjAsIDB4MDEyZSwgMHgwODA0LAotCTB4MzY3NSwgMHgwMDBlLCAweDAwY2UsIDB4MmIwMCwgMHg3MDI2LCAweDAwMTYsIDB4MDBiNiwgMHgwMGM2LAotCTB4MDBlNiwgMHgyYzcwLCAweDA4MGMsIDB4YWZiZiwgMHgwOTA0LCAweDRhYjAsIDB4MmIwMCwgMHg2MDEyLAotCTB4MDgwYywgMHhkMGNlLCAweDJlNTgsIDB4MDBlZSwgMHgwMGU2LCAweDAwYzYsIDB4MDgwYywgMHg0YmM4LAotCTB4MDBjZSwgMHgyYjcwLCAweDExNTgsIDB4MDgwYywgMHhhZjRlLCAweDAwZWUsIDB4MDBjZSwgMHgwMGJlLAotCTB4MDAxZSwgMHgwMTJlLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YTUsIDB4OTAwZSwgMHhhOTY2LAotCTB4YTk2YSwgMHgyOTAwLCAweDYwMTYsIDB4YTkzMiwgMHhhODY4LCAweGMwZmQsIDB4ZDg4YywgMHgwMTA4LAotCTB4YzBmNSwgMHhhODZhLCAweGQ4OWMsIDB4MTExMCwgMHgwODBjLCAweDMyZmIsIDB4NjAyMywgMHgwMDAxLAotCTB4OTAwNiwgMHgwODBjLCAweDY2YjUsIDB4ZDg5YywgMHgwMTM4LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLAotCTB4NjZjOSwgMHgyMDA5LCAweDAwMDMsIDB4MDAzMCwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NmM5LAotCTB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4YWZlYywgMHg3OGE4LCAweGQwOTQsIDB4MDEzOCwgMHgwMGVlLAotCTB4NzAyNCwgMHgwMGU2LCAweDIwNTgsIDB4YjhkNCwgMHhjMDhkLCAweGI4ZDYsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDBlZSwgMHgwMGNlLCAweDAwYmUsIDB4MDAxZSwgMHgwMTJlLCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLAotCTB4MDgwNCwgMHgzNmE1LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDRhYmYsIDB4MDAwNSwgMHhhODMwLAotCTB4OTA4NiwgMHgwMTAwLCAweDcwMjQsIDB4MjA1OCwgMHgxMTM4LCAweDIwMDksIDB4MDAwNCwgMHhiYTA0LAotCTB4OTI5NCwgMHgwMGZmLCAweDA4MDQsIDB4NTc2ZSwgMHg5MDBlLCAweGE4NjgsIDB4ZDBmNCwgMHgxOTA0LAotCTB4MzY3MywgMHgwODBjLCAweDZhNzQsIDB4MTEwOCwgMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LAotCTB4YzE4ZCwgMHgwODA0LCAweDM2NzMsIDB4MDBlNiwgMHgwMGQ2LCAweDAwOTYsIDB4ODNmZiwgMHgwOTA0LAotCTB4NGIyYSwgMHg5MDJlLCAweDA4MGMsIDB4YWU4MCwgMHgwMTMwLCAweDkwMjYsIDB4MjBhOSwgMHgwODAwLAotCTB4MjA3MSwgMHgxMDAwLCAweDAwMzAsIDB4MjAyMSwgMHgwMDdmLCAweDIwYTksIDB4MDc4MSwgMHgyMDcxLAotCTB4MTA3ZiwgMHgyZTA0LCAweDkwMDUsIDB4MTFiOCwgMHgyMTAwLCAweDk0MDYsIDB4MTkwNCwgMHg0YjNiLAotCTB4MjQyOCwgMHg5NGNlLCAweDAwN2YsIDB4MTEyMCwgMHg5MmNlLCAweGZmZmQsIDB4MTU1OCwgMHgwMDMwLAotCTB4OTRjZSwgMHgwMDgwLCAweDExMzAsIDB4OTJjZSwgMHhmZmZjLCAweDE1MjAsIDB4OTNjZSwgMHgwMGZmLAotCTB4MTUwOCwgMHhjNWZkLCAweDA0ODAsIDB4MjA1OCwgMHhiZjEwLCAweDI3MDAsIDB4OTMwNiwgMHgxMWU4LAotCTB4YmUxNCwgMHgyNjAwLCAweDkyMDYsIDB4MTFjOCwgMHgyNDAwLCAweDkxMDYsIDB4MTE4MCwgMHhkODg0LAotCTB4MDU5OCwgMHhkODk0LCAweDE1ODgsIDB4MDgwYywgMHg2YjZkLCAweDE1NzAsIDB4MjAwMSwgMHg0MDAwLAotCTB4MDQ2MCwgMHgwODBjLCAweDZiY2QsIDB4MTU0MCwgMHgyMDAxLCAweDQwMDAsIDB4MDQzMCwgMHgyMDAxLAotCTB4NDAwNywgMHgwNDE4LCAweDIwMDEsIDB4NDAwNiwgMHgwNDAwLCAweDI0MDAsIDB4OTEwNiwgMHgxMTU4LAotCTB4YmUxNCwgMHg4N2ZmLCAweDExMjgsIDB4ODZmZiwgMHgwOTE4LCAweDA4MGMsIDB4YWU4MCwgMHgxOTAwLAotCTB4MjAwMSwgMHg0MDA4LCAweDAwOTAsIDB4ODQyMCwgMHg4ZTcwLCAweDFmMDQsIDB4NGFmMSwgMHg4NWZmLAotCTB4MTEzMCwgMHgyMDAxLCAweDQwMDksIDB4MDA0OCwgMHgyMDAxLCAweDAwMDEsIDB4MDAzMCwgMHgwODBjLAotCTB4NjcxOCwgMHgxZGQwLCAweGJiMTIsIDB4YmExNiwgMHg5MDA2LCAweDkwMDUsIDB4MDA5ZSwgMHgwMGRlLAotCTB4MDBlZSwgMHgwMDA1LCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNmE1LAotCTB4MDgwYywgMHg0YmM4LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzZhNSwgMHhhODY3LAotCTB4MDAwMCwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHg3ODg0LCAweDkwMDUsIDB4MDkwNCwgMHgzNmE4LAotCTB4OTA5NiwgMHgwMGZmLCAweDAxMjAsIDB4OTA5MiwgMHgwMDA0LCAweDFhMDQsIDB4MzZhOCwgMHgyMDEwLAotCTB4MjkxOCwgMHgwODBjLCAweDMyOWIsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNmE1LAotCTB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NGI3ZCwgMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLAotCTB4MTkwNCwgMHgzNjczLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM2YTUsIDB4Nzk4NCwgMHgwODBjLAotCTB4YWU4MCwgMHgxMTIwLCAweDkxODIsIDB4MDA3ZiwgMHgwYTA0LCAweDM2YTgsIDB4OTE4NiwgMHgwMGZmLAotCTB4MDkwNCwgMHgzNmE4LCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LCAweDM2YTgsIDB4MjAwMSwgMHg5NDAwLAotCTB4MDgwYywgMHg1N2M5LCAweDE5MDQsIDB4MzZhNSwgMHgwODA0LCAweDM2NzMsIDB4YTk5OCwgMHgwODBjLAotCTB4YWU4MCwgMHgxMTE4LCAweDkxODIsIDB4MDA3ZiwgMHgwMjgwLCAweDkxODYsIDB4MDBmZiwgMHgwMTY4LAotCTB4OTE4MiwgMHgwODAwLCAweDEyNTAsIDB4MjAwMSwgMHg5NDAwLCAweDA4MGMsIDB4NTdjOSwgMHgxMWE4LAotCTB4MDA2MCwgMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLCAweGE4OTcsIDB4NDAwNiwgMHg5MDBlLAotCTB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LCAweGE4OTcsIDB4NDAwMCwgMHg5MDBlLAotCTB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDIwMDksIDB4MDAwYSwgMHgwYzQ4LAotCTB4MDgwYywgMHgxMDRkLCAweDAxOTgsIDB4OTAwNiwgMHhhODAyLCAweDcwMTQsIDB4OTAwNSwgMHgxMTIwLAotCTB4MjkwMCwgMHg3MDE2LCAweDcwMWEsIDB4MDA0MCwgMHg3MDE4LCAweGE4MDIsIDB4MDA4NiwgMHgyMDQwLAotCTB4MjkwMCwgMHhhMDA2LCAweDcwMWEsIDB4MDA4ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg3OTg0LAotCTB4MDgwYywgMHg2NzgzLCAweDExMzAsIDB4N2U4OCwgMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLAotCTB4MDIwOCwgMHg5MDVlLCAweDhiZmYsIDB4MDAwNSwgMHhhOTk4LCAweDA4MGMsIDB4Njc4MywgMHgxMTMwLAotCTB4YWU5YywgMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLCAweDAyMDgsIDB4OTA1ZSwgMHg4YmZmLAotCTB4MDAwNSwgMHhhZTk4LCAweDAwMDgsIDB4N2U4NCwgMHgyNjA4LCAweDA4MGMsIDB4Njc4MywgMHgxMTA4LAotCTB4MDAwOCwgMHg5MDVlLCAweDhiZmYsIDB4MDAwNSwgMHgwMDE2LCAweDcxMTQsIDB4ODFmZiwgMHgwMTI4LAotCTB4MjE0OCwgMHhhOTA0LCAweDA4MGMsIDB4MTA3ZiwgMHgwY2M4LCAweDcxMTYsIDB4NzExYSwgMHgwMDFlLAotCTB4MDAwNSwgMHgyMDMxLCAweDAwMDEsIDB4MDAxMCwgMHgyMDMxLCAweDAwMDAsIDB4MjA2MSwgMHgxOGI4LAotCTB4MmM0NCwgMHhhNjZhLCAweGExN2EsIDB4YTc3MiwgMHhhMDc2LCAweGEyOGUsIDB4YTM5MiwgMHhhNDk2LAotCTB4YTU5YSwgMHgwODBjLCAweDExNDIsIDB4NzAwNywgMHgwMDAyLCAweDcwMWYsIDB4MzY3MywgMHgwMDA1LAotCTB4MDBmNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAwMDAsIDB4MjAwMSwgMHgxOGIwLAotCTB4MjAwNCwgMHg5MDA1LCAweDExOTAsIDB4MGUwNCwgMHg0YzQ1LCAweDdhMzYsIDB4NzgzMywgMHgwMDEyLAotCTB4N2E4MiwgMHg3Yjg2LCAweDdjOGEsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LAotCTB4ZDA4NCwgMHgxOTBjLCAweDExZjQsIDB4MDgwNCwgMHg0Y2FiLCAweDAwMTYsIDB4MDA4NiwgMHgwMDk2LAotCTB4MDBjNiwgMHgwMGU2LCAweDIwNzEsIDB4MTg5ZSwgMHg3MDQ0LCAweDkwMDUsIDB4MTU0MCwgMHg3MTQ4LAotCTB4OTE4MiwgMHgwMDEwLCAweDAyODgsIDB4NzAzOCwgMHgyMDYwLCAweDA4MGMsIDB4MTA0ZCwgMHgwOTA0LAotCTB4NGNhMywgMHhhODRiLCAweDAwMDAsIDB4MjkwMCwgMHg3MDQ2LCAweDIwMDEsIDB4MDAwMiwgMHg5MDgwLAotCTB4MWVkZSwgMHgyMDA1LCAweGE4NDYsIDB4MDA5OCwgMHg3MDM4LCAweDkwZTAsIDB4MDAwNCwgMHgyMDAxLAotCTB4MThiYSwgMHg5YzgyLCAweDE4ZmEsIDB4MDIxMCwgMHgyMDYxLCAweDE4YmEsIDB4MmMwMCwgMHg3MDNhLAotCTB4NzE0OCwgMHg4MWZmLCAweDExMDgsIDB4NzAzZSwgMHg4MTA4LCAweDcxNGEsIDB4MDQ2MCwgMHg3MTQ4LAotCTB4ODEwOCwgMHg3MTRhLCAweDcwNDQsIDB4MjA0MCwgMHhhMTQ0LCAweDIxMDUsIDB4MDAxNiwgMHg5MDhhLAotCTB4MDAzNiwgMHgxYTBjLCAweDBkNzksIDB4MjA2MCwgMHgwMDFlLCAweDgxMDgsIDB4MjEwNSwgMHg5MDA1LAotCTB4YTE0NiwgMHgxNTIwLCAweDA4MGMsIDB4MTA0ZCwgMHgxMTMwLCAweDgxMDksIDB4YTk0NiwgMHg3MTQ4LAotCTB4ODEwOSwgMHg3MTRhLCAweDAwZDgsIDB4OTAwNiwgMHhhODA2LCAweGE4NGEsIDB4YTA0NiwgMHgyODAwLAotCTB4YTgwMiwgMHgyOTAwLCAweGEwMDYsIDB4NzA0NiwgMHgyMDAxLCAweDAwMDIsIDB4OTA4MCwgMHgxZWRlLAotCTB4MjAwNSwgMHhhODQ2LCAweDAwNTgsIDB4MjI2MiwgMHg2MzA2LCAweDY0MGEsIDB4MDBlZSwgMHgwMGNlLAotCTB4MDA5ZSwgMHgwMDhlLCAweDAwMWUsIDB4MDEyZSwgMHgwMGZlLCAweDAwMDUsIDB4MmMwMCwgMHg5MDgyLAotCTB4MDAxYiwgMHgwMDAyLCAweDRjY2QsIDB4NGNjZCwgMHg0Y2NmLCAweDRjY2QsIDB4NGNjZCwgMHg0Y2NkLAotCTB4NGNkMywgMHg0Y2NkLCAweDRjY2QsIDB4NGNjZCwgMHg0Y2Q3LCAweDRjY2QsIDB4NGNjZCwgMHg0Y2NkLAotCTB4NGNkYiwgMHg0Y2NkLCAweDRjY2QsIDB4NGNjZCwgMHg0Y2RmLCAweDRjY2QsIDB4NGNjZCwgMHg0Y2NkLAotCTB4NGNlMywgMHg0Y2NkLCAweDRjY2QsIDB4NGNjZCwgMHg0Y2U4LCAweDA4MGMsIDB4MGQ3OSwgMHhhMjc2LAotCTB4YTM3YSwgMHhhNDdlLCAweDA4OTgsIDB4YTI4NiwgMHhhMzhhLCAweGE0OGUsIDB4MDg3OCwgMHhhMjk2LAotCTB4YTM5YSwgMHhhNDllLCAweDA4NTgsIDB4YTJhNiwgMHhhM2FhLCAweGE0YWUsIDB4MDgzOCwgMHhhMmI2LAotCTB4YTNiYSwgMHhhNGJlLCAweDA4MTgsIDB4YTJjNiwgMHhhM2NhLCAweGE0Y2UsIDB4MDgwNCwgMHg0Y2E2LAotCTB4YTJkNiwgMHhhM2RhLCAweGE0ZGUsIDB4MDgwNCwgMHg0Y2E2LCAweDAwZTYsIDB4MjA3MSwgMHgxODllLAotCTB4NzA0OCwgMHg5MDA1LCAweDA5MDQsIDB4NGQ3ZiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LAotCTB4NGQ3ZSwgMHgwMGY2LCAweDIwNzksIDB4MDAwMCwgMHgwMGM2LCAweDAwOTYsIDB4MDA4NiwgMHgwMDc2LAotCTB4OTAwNiwgMHgyMDM4LCAweDcwNDAsIDB4MjA0OCwgMHg5MDA1LCAweDA1MDAsIDB4YTk0OCwgMHgyMTA1LAotCTB4MDAxNiwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZDc5LCAweDIwNjAsIDB4MDAxZSwgMHg4MTA4LAotCTB4MjEwNSwgMHg5MDA1LCAweGE5NGEsIDB4MTkwNCwgMHg0ZDgxLCAweGE4MDQsIDB4OTAwNSwgMHgwOTBjLAotCTB4MGQ3OSwgMHg3MDQyLCAweDI5MzgsIDB4MjA0MCwgMHhhMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMDAyLAotCTB4OTA4MCwgMHgxZWRlLCAweDIwMDUsIDB4YTA0YSwgMHgwODA0LCAweDRkODEsIDB4NzAzYywgMHgyMDYwLAotCTB4MmMxNCwgMHg2MzA0LCAweDY0MDgsIDB4NjUwYywgMHgyMjAwLCAweDc4MzYsIDB4NzgzMywgMHgwMDEyLAotCTB4Nzg4MiwgMHgyMzAwLCAweDc4ODYsIDB4MjQwMCwgMHg3ODhhLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLAotCTB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWY0LCAweDg3ZmYsIDB4MDExOCwgMHgyNzQ4LAotCTB4MDgwYywgMHgxMDdmLCAweDcwNDgsIDB4ODAwMSwgMHg3MDRhLCAweDkwMDUsIDB4MTE3MCwgMHg3MDQwLAotCTB4MjA0OCwgMHg5MDA1LCAweDAxMjgsIDB4MDgwYywgMHgxMDdmLCAweDkwMDYsIDB4NzA0MiwgMHg3MDQ2LAotCTB4NzAzYiwgMHgxOGJhLCAweDcwM2YsIDB4MThiYSwgMHgwNDIwLCAweDcwNDAsIDB4OTAwNSwgMHgxNTA4LAotCTB4NzIzOCwgMHgyYzAwLCAweDkyMDYsIDB4MDE0OCwgMHg5YzgwLCAweDAwMDQsIDB4OTBmYSwgMHgxOGZhLAotCTB4MDIxMCwgMHgyMDAxLCAweDE4YmEsIDB4NzAzZSwgMHgwMGEwLCAweDkwMDYsIDB4NzAzZSwgMHg3MDNhLAotCTB4NzA0NCwgMHg5MDA1LCAweDA5MGMsIDB4MGQ3OSwgMHgyMDQ4LCAweGE4MDAsIDB4OTAwNSwgMHgxZGUwLAotCTB4MjkwMCwgMHg3MDQyLCAweDIwMDEsIDB4MDAwMiwgMHg5MDgwLCAweDFlZGUsIDB4MjAwNSwgMHhhODRhLAotCTB4MDAwMCwgMHgwMDdlLCAweDAwOGUsIDB4MDA5ZSwgMHgwMGNlLCAweDAwZmUsIDB4MDEyZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgyYzAwLCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDRkYTAsIDB4NGRhMCwgMHg0ZGEyLAotCTB4NGRhMCwgMHg0ZGEwLCAweDRkYTAsIDB4NGRhNywgMHg0ZGEwLCAweDRkYTAsIDB4NGRhMCwgMHg0ZGFjLAotCTB4NGRhMCwgMHg0ZGEwLCAweDRkYTAsIDB4NGRiMSwgMHg0ZGEwLCAweDRkYTAsIDB4NGRhMCwgMHg0ZGI2LAotCTB4NGRhMCwgMHg0ZGEwLCAweDRkYTAsIDB4NGRiYiwgMHg0ZGEwLCAweDRkYTAsIDB4NGRhMCwgMHg0ZGMwLAotCTB4MDgwYywgMHgwZDc5LCAweGFhNzQsIDB4YWI3OCwgMHhhYzdjLCAweDA4MDQsIDB4NGQyYywgMHhhYTg0LAotCTB4YWI4OCwgMHhhYzhjLCAweDA4MDQsIDB4NGQyYywgMHhhYTk0LCAweGFiOTgsIDB4YWM5YywgMHgwODA0LAotCTB4NGQyYywgMHhhYWE0LCAweGFiYTgsIDB4YWNhYywgMHgwODA0LCAweDRkMmMsIDB4YWFiNCwgMHhhYmI4LAotCTB4YWNiYywgMHgwODA0LCAweDRkMmMsIDB4YWFjNCwgMHhhYmM4LCAweGFjY2MsIDB4MDgwNCwgMHg0ZDJjLAotCTB4YWFkNCwgMHhhYmQ4LCAweGFjZGMsIDB4MDgwNCwgMHg0ZDJjLCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LAotCTB4MDBiNiwgMHgwMGM2LCAweDIwMDksIDB4MDA3ZSwgMHgwODBjLCAweDY3ODMsIDB4MjAxOSwgMHgwMDAxLAotCTB4Yjg1YywgMHhkMGFjLCAweDAxMTAsIDB4MjAxOSwgMHgwMDAwLCAweDIwMTEsIDB4ODAxYiwgMHgwODBjLAotCTB4NGMyOCwgMHgwMGNlLCAweDAwYmUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDI2LAotCTB4MDgwYywgMHg1ODIwLCAweGQwYzQsIDB4MDEyMCwgMHgyMDExLCAweDgwMTQsIDB4MDgwYywgMHg0YzI4LAotCTB4MDAyZSwgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNmE1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NjAzMCwgMHhjMDhkLCAweGMwODUsIDB4YzBhYywgMHg2MDMyLCAweDA4MGMsIDB4NzY5ZCwgMHgxMTU4LAotCTB4MDgwYywgMHg3OTlmLCAweDA4MGMsIDB4NjE3OCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHg3NmUxLAotCTB4MDgwYywgMHg3NWNjLCAweDAwMTAsIDB4MDgwYywgMHg2MDMzLCAweDAxMmUsIDB4MDgwNCwgMHgzNjczLAotCTB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LCAweDM2YTUsIDB4MDgwYywgMHg1ODM0LAotCTB4MDEyMCwgMHgyMDA5LCAweDAwMDcsIDB4MDgwNCwgMHgzNmE1LCAweDA4MGMsIDB4NmJjNSwgMHgwMTIwLAotCTB4MjAwOSwgMHgwMDA4LCAweDA4MDQsIDB4MzZhNSwgMHg3OTg0LCAweDA4MGMsIDB4NjcxOCwgMHgxOTA0LAotCTB4MzZhOCwgMHgwODBjLCAweDRiZmIsIDB4MDkwNCwgMHgzNmE4LCAweDJiMDAsIDB4NzAyNiwgMHgwODBjLAotCTB4NmJjZCwgMHg3ODg4LCAweDExNzAsIDB4OTA4NCwgMHgwMDA1LCAweDExNTgsIDB4OTAwZSwgMHgwODBjLAotCTB4NmE3NCwgMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwODA0LAotCTB4MzY3MywgMHgwODBjLCAweDRiYzgsIDB4MDkwNCwgMHgzNmE1LCAweDkwMDYsIDB4YTg2NiwgMHhhODMyLAotCTB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MDgwYywgMHhjZTZjLCAweDA5MDQsIDB4MzZhNSwgMHg3ODg4LAotCTB4ZDA5NCwgMHgwMTE4LCAweGI4ZDQsIDB4YzA4ZCwgMHhiOGQ2LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLAotCTB4NGU5YiwgMHgwMDA1LCAweDIwNjEsIDB4MTgwMCwgMHgwODBjLCAweDU4MzQsIDB4MjAwOSwgMHgwMDA3LAotCTB4MTU2MCwgMHgwODBjLCAweDZiYzUsIDB4MDExOCwgMHgyMDA5LCAweDAwMDgsIDB4MDQzMCwgMHhhOTk4LAotCTB4MDgwYywgMHg2NzE4LCAweDE1MzAsIDB4MDgwYywgMHg0YmY5LCAweDA1MTgsIDB4MDgwYywgMHg2YmNkLAotCTB4YTg5YywgMHgxMTY4LCAweDkwODQsIDB4MDAwNSwgMHgxMTUwLCAweDkwMGUsIDB4MDgwYywgMHg2YTc0LAotCTB4MTEwOCwgMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDBkMCwgMHhhODY4LAotCTB4YzBmYywgMHhhODZhLCAweDA4MGMsIDB4Y2U2YywgMHgxMWUwLCAweGE4OWMsIDB4ZDA5NCwgMHgwMTE4LAotCTB4YjhkNCwgMHhjMDhkLCAweGI4ZDYsIDB4MjAwOSwgMHgwMDAzLCAweGE4OTcsIDB4NDAwNSwgMHhhOTlhLAotCTB4MDAxMCwgMHhhODk3LCAweDQwMDYsIDB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLAotCTB4MDAwNSwgMHhhODk3LCAweDQwMDAsIDB4YTk5YSwgMHg5MDA2LCAweDkxOGQsIDB4MDAwMSwgMHgyMDA4LAotCTB4MDAwNSwgMHg5MDA2LCAweDAwMDUsIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsIDB4NzAyNCwgMHgyMDU4LAotCTB4MTExMCwgMHgwODA0LCAweDU3NmUsIDB4OTAwZSwgMHgwODBjLCAweDZhNzQsIDB4MTEwOCwgMHhjMTg1LAotCTB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwODA0LCAweDM2NzMsIDB4MDgwYywgMHg1ODM0LAotCTB4MDEyMCwgMHgyMDA5LCAweDAwMDcsIDB4MDgwNCwgMHgzNmE1LCAweDdmODQsIDB4N2E4YywgMHg3Yjg4LAotCTB4N2M5YywgMHg3ZDk4LCAweDA4MGMsIDB4NGJjOCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LAotCTB4MzZhNSwgMHg5MDBlLCAweDIxMzAsIDB4NzEyNiwgMHg3MTMyLCAweGE4NjAsIDB4MjBlOCwgMHg3MDM2LAotCTB4YTg1YywgMHg5MDgwLCAweDAwMDUsIDB4NzAyYSwgMHgyMGEwLCAweDA4MGMsIDB4Njc4MywgMHgxOTA0LAotCTB4NGY0NCwgMHgwODBjLCAweDZiY2QsIDB4MDEzOCwgMHgwODBjLCAweDZiZDUsIDB4MDEyMCwgMHgwODBjLAotCTB4NmI2ZCwgMHgxOTA0LCAweDRmNDQsIDB4ZDc5NCwgMHgxMTEwLCAweGQ3ODQsIDB4MDFhOCwgMHhiOGM0LAotCTB4MjBlMCwgMHhiOGM4LCAweDkwODAsIDB4MDAwNiwgMHgyMDk4LCAweDM0MDAsIDB4ZDc5NCwgMHgwMTk4LAotCTB4MjBhOSwgMHgwMDA4LCAweDQwMDMsIDB4MjA5OCwgMHgyMGEwLCAweDNkMDAsIDB4MjBlMCwgMHgyMGE5LAotCTB4MDAwMiwgMHgwODBjLCAweDQ5YzcsIDB4MDA4MCwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLAotCTB4MDAwYSwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwgMHgwMDA0LCAweDQwMDMsIDB4MjA5OCwgMHgyMGEwLAotCTB4M2QwMCwgMHgyMGUwLCAweDA4MGMsIDB4NDljNywgMHg5MTg2LCAweDAwN2UsIDB4MDE3MCwgMHg5MTg2LAotCTB4MDA4MCwgMHgwMTU4LCAweDA4MGMsIDB4NmJjZCwgMHg5MGMyLCAweDAwMDYsIDB4MTIxMCwgMHhjMWZkLAotCTB4MDAyMCwgMHgwODBjLCAweDZhNzQsIDB4MTEwOCwgMHhjMWZkLCAweDQxMDQsIDB4YzFmYywgMHhkNzk0LAotCTB4MDUyOCwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHgyMDYwLCAweDljODAsIDB4MDAwMCwgMHgyMDk4LAotCTB4MjBhOSwgMHgwMDAyLCAweDQwMDMsIDB4OWM4MCwgMHgwMDAzLCAweDIwOTgsIDB4MjBhOSwgMHgwMDAxLAotCTB4NDAwNSwgMHg5YzgwLCAweDAwMDQsIDB4MjA5OCwgMHgzNDAwLCAweDIwYTksIDB4MDAwMiwgMHg0MDAzLAotCTB4MjA5OCwgMHgyMGEwLCAweDNkMDAsIDB4MjBlMCwgMHgwODBjLCAweDQ5YmEsIDB4OWM4MCwgMHgwMDI2LAotCTB4MjA5OCwgMHhiOGM0LCAweDIwZTAsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDMsIDB4ZDc5NCwgMHgwMTEwLAotCTB4OTZiMCwgMHgwMDBiLCAweDk2YjAsIDB4MDAwNSwgMHg4MTA4LCAweDA4MGMsIDB4YWU4MCwgMHgwMTE4LAotCTB4OTE4NiwgMHgwODAwLCAweDAwNDAsIDB4ZDc4YywgMHgwMTIwLCAweDkxODYsIDB4MDgwMCwgMHgwMTcwLAotCTB4MDAxOCwgMHg5MTg2LCAweDAwN2UsIDB4MDE1MCwgMHhkNzk0LCAweDAxMTgsIDB4OTY4NiwgMHgwMDIwLAotCTB4MDAxMCwgMHg5Njg2LCAweDAwMjgsIDB4MDE1MCwgMHgwODA0LCAweDRlY2QsIDB4ODZmZiwgMHgxMTIwLAotCTB4NzEyNCwgMHg4MTBiLCAweDA4MDQsIDB4MzY3MywgMHg3MDMzLCAweDAwMDEsIDB4NzEyMiwgMHg3MDI0LAotCTB4OTYwMCwgMHg3MDI2LCAweDc3MmUsIDB4MjA2MSwgMHgxOGI4LCAweDJjNDQsIDB4YTA2YiwgMHgwMDAwLAotCTB4YTY3YSwgMHg3MDM0LCAweGEwNzIsIDB4NzAyOCwgMHhhMDc2LCAweGEyOGUsIDB4YTM5MiwgMHhhNDk2LAotCTB4YTU5YSwgMHgwODBjLCAweDExNDIsIDB4NzAwNywgMHgwMDAyLCAweDcwMWYsIDB4NGY4MCwgMHgwMDA1LAotCTB4NzAzMCwgMHg5MDA1LCAweDExODAsIDB4NzEyMCwgMHg3MDI4LCAweDIwYTAsIDB4NzcyYywgMHg5MDM2LAotCTB4NzAzNCwgMHgyMGU4LCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LCAweGEyOGMsIDB4YTM5MCwgMHhhNDk0LAotCTB4YTU5OCwgMHgwODA0LCAweDRlY2QsIDB4NzEyNCwgMHg4MTBiLCAweDA4MDQsIDB4MzY3MywgMHgyMDI5LAotCTB4MDA3ZSwgMHg3OTg0LCAweDdhODgsIDB4N2I4YywgMHg3Yzk4LCAweDkxODQsIDB4ZmYwMCwgMHg4MDA3LAotCTB4OTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MzZhOCwgMHg5NTAyLCAweDBhMDQsIDB4MzZhOCwgMHg5MTg0LAotCTB4MDBmZiwgMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNmE4LCAweDk1MDIsIDB4MGEwNCwgMHgzNmE4LAotCTB4OTI4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MzZhOCwgMHg5NTAyLAotCTB4MGEwNCwgMHgzNmE4LCAweDkyODQsIDB4MDBmZiwgMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNmE4LAotCTB4OTUwMiwgMHgwYTA0LCAweDM2YTgsIDB4OTM4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTBlMiwgMHgwMDIwLAotCTB4MGEwNCwgMHgzNmE4LCAweDk1MDIsIDB4MGEwNCwgMHgzNmE4LCAweDkzODQsIDB4MDBmZiwgMHg5MGUyLAotCTB4MDAyMCwgMHgwYTA0LCAweDM2YTgsIDB4OTUwMiwgMHgwYTA0LCAweDM2YTgsIDB4OTQ4NCwgMHhmZjAwLAotCTB4ODAwNywgMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNmE4LCAweDk1MDIsIDB4MGEwNCwgMHgzNmE4LAotCTB4OTQ4NCwgMHgwMGZmLCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM2YTgsIDB4OTUwMiwgMHgwYTA0LAotCTB4MzZhOCwgMHgyMDYxLCAweDE5OGEsIDB4NjEwMiwgMHg2MjA2LCAweDYzMGEsIDB4NjQwZSwgMHgwODA0LAotCTB4MzY3MywgMHgwODBjLCAweDRiYzgsIDB4MDkwNCwgMHgzNmE1LCAweDIwMDksIDB4MDAxNiwgMHg3YThjLAotCTB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4YWY2MCwgMHgwODBjLAotCTB4NGMxMSwgMHg3MDFmLCAweDUwMDQsIDB4MDAwNSwgMHgyMDAxLCAweDAxMzgsIDB4MjAwMywgMHgwMDAwLAotCTB4MDBlNiwgMHgyMDcxLCAweDAzMDAsIDB4NzAxYywgMHhkMGE0LCAweDFkZTgsIDB4MDBlZSwgMHgyMGE5LAotCTB4MDAxNiwgMHg4OTZlLCAweDhkNmUsIDB4OGQ2ZiwgMHg5ZDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDE5LAotCTB4MjA5OCwgMHg5ZDg0LCAweDAwM2YsIDB4MjBlMCwgMHgyMDY5LCAweDE4NzcsIDB4MjBlOSwgMHgwMDAxLAotCTB4MmRhMCwgMHg0MDAzLCAweDY4MDAsIDB4OTAwNSwgMHgwOTA0LCAweDUwODUsIDB4NjgwNCwgMHgyMDA4LAotCTB4OTE4YywgMHhmZmY4LCAweDE5MDQsIDB4NTA4NSwgMHg2ODBjLCAweDkwMDUsIDB4MDkwNCwgMHg1MDg1LAotCTB4OTA4MiwgMHhmZjAxLCAweDFhMDQsIDB4NTA4NSwgMHg2ODEwLCAweDkwODIsIDB4MDA1YywgMHgwYTA0LAotCTB4NTA4NSwgMHg2ODI0LCAweDIwMDgsIDB4OTA4MiwgMHgwMDA4LCAweDBhMDQsIDB4NTA4NSwgMHg5MTgyLAotCTB4MDQwMCwgMHgxYTA0LCAweDUwODUsIDB4MDA1NiwgMHgyMDI5LCAweDAwMDAsIDB4MDgwYywgMHg4ZjBkLAotCTB4MDA1ZSwgMHg2OTQ0LCAweDY4MjAsIDB4OTEwMiwgMHgwNmMwLCAweDY4MjAsIDB4OTA4MiwgMHgwMDE5LAotCTB4MTZhMCwgMHg2ODI4LCAweDY5NDQsIDB4ODEwYywgMHg5MTAyLCAweDA2NzgsIDB4Njg0MCwgMHg5MDgyLAotCTB4MDAwZiwgMHgxNjU4LCAweDA4MGMsIDB4MTA2NiwgMHgyOTAwLCAweDA5MDQsIDB4NTBhMSwgMHg2ODRlLAotCTB4MDBlNiwgMHgyMDcxLCAweDE5MzIsIDB4MDBiNiwgMHgyMDU5LCAweDAwMDAsIDB4MDgwYywgMHg4ZGM5LAotCTB4MDBiZSwgMHgwMGVlLCAweDA1NjgsIDB4MDgwYywgMHg4YjExLCAweDA4MGMsIDB4OGI2MCwgMHgxMWUwLAotCTB4Njg1NywgMHgwMDAwLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYxMDQsIDB4OTE4ZCwgMHgyMDAwLAotCTB4NjEwNiwgMHg2YjEwLCAweDIwNjEsIDB4MWE2ZiwgMHg2MzBlLCAweDAwY2UsIDB4MDgwYywgMHgyN2I5LAotCTB4MjAwMSwgMHgwMTM4LCAweDIxMDIsIDB4MDgwNCwgMHgzNjczLCAweDA4MGMsIDB4MjdiOSwgMHgyMDAxLAotCTB4MDEzOCwgMHgyMTAyLCAweDA4MDQsIDB4MzZhOCwgMHgwODBjLCAweDhiNTksIDB4MDBlNiwgMHgyMDcxLAotCTB4MTkzMiwgMHgwODBjLCAweDhmOGQsIDB4MDgwYywgMHg4ZjljLCAweDA4MGMsIDB4OGRhYywgMHgwMGVlLAotCTB4MjAwMSwgMHgxODhhLCAweDIwNGMsIDB4MDgwYywgMHgxMDdmLCAweDIwMDEsIDB4MTg4YSwgMHgyMDAzLAotCTB4MDAwMCwgMHgwODBjLCAweDI3YjksIDB4MjAwMSwgMHgwMTM4LCAweDIxMDIsIDB4MDgwNCwgMHgzNmE1LAotCTB4MjAwMSwgMHgxOTI2LCAweDIwMGMsIDB4OTE4ZSwgMHgwMDAwLCAweDA5MDQsIDB4NTEwNiwgMHgwODBjLAotCTB4OGRhNywgMHgwOTA0LCAweDUxMDYsIDB4MjAwMSwgMHgwMTAxLCAweDIwMGMsIDB4OTE4YywgMHhkZmZmLAotCTB4MjEwMiwgMHgyMDAxLCAweDAxMzgsIDB4MjAwMywgMHgwMDAwLCAweDAwZTYsIDB4MjA3MSwgMHgwMzAwLAotCTB4NzAxYywgMHhkMGE0LCAweDFkZTgsIDB4MDBlZSwgMHgwODBjLCAweDhkYWMsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDAxLCAweDAwMzUsIDB4MDgwYywgMHgxNmFkLCAweDAxMmUsIDB4MDBjNiwgMHgyMDYxLAotCTB4MTkzZSwgMHg2MDA0LCAweDYxMDAsIDB4OTEwNiwgMHgxZGUwLCAweDAwY2UsIDB4MDgwYywgMHgyN2I5LAotCTB4MjAwMSwgMHgwMTM4LCAweDIxMDIsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsIDB4MTkyNSwgMHgwODBjLAotCTB4OGNlNiwgMHgwMTIwLCAweDJmMDAsIDB4MDgwYywgMHg4ZDcyLCAweDBjYzgsIDB4MDBmZSwgMHgwMGVlLAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgxODhhLCAweDIwMGMsIDB4ODFmZiwgMHgwMTM4LAotCTB4MjE0OCwgMHgwODBjLCAweDEwN2YsIDB4MjAwMSwgMHgxODhhLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLAotCTB4MTgzZSwgMHgyMDAzLCAweDAwMjAsIDB4MDgwYywgMHg4YjU5LCAweDAwZTYsIDB4MjA3MSwgMHgxOTMyLAotCTB4MDgwYywgMHg4ZjhkLCAweDA4MGMsIDB4OGY5YywgMHgwMGVlLCAweDAxMmUsIDB4MDgwNCwgMHgzNjczLAotCTB4MDAwNiwgMHgwODBjLCAweDU4MjAsIDB4ZDBjYywgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwODBjLAotCTB4NTgyNCwgMHhkMGJjLCAweDAwMGUsIDB4MDAwNSwgMHg2MTc0LCAweDdhODQsIDB4NjMwMCwgMHg4MmZmLAotCTB4MTExOCwgMHg3OTg2LCAweDA4MDQsIDB4MzY3MywgMHg4M2ZmLCAweDE5MDQsIDB4MzZhOCwgMHgyMDAxLAotCTB4ZmZmMCwgMHg5MjAwLCAweDFhMDQsIDB4MzZhOCwgMHgyMDE5LCAweGZmZmYsIDB4NjA3OCwgMHg5MzAyLAotCTB4OTIwMCwgMHgwYTA0LCAweDM2YTgsIDB4Nzk4NiwgMHg2Mjc2LCAweDA4MDQsIDB4MzY3MywgMHgwODBjLAotCTB4NTgzNCwgMHgxOTA0LCAweDM2YTUsIDB4N2M4OCwgMHg3ZDg0LCAweDdlOTgsIDB4N2Y4YywgMHgwODBjLAotCTB4NGJjOCwgMHgwOTA0LCAweDM2YTUsIDB4OTAwZSwgMHg5MDFlLCAweDczMjYsIDB4NzMzMiwgMHhhODYwLAorCTB4YTQ5NiwgMHhhNTlhLCAweDA4MGMsIDB4MTE0ZSwgMHg3MDA3LCAweDAwMDIsIDB4NzAxZiwgMHgzNjhkLAorCTB4MDAwNSwgMHgwMGY2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MDAwMCwgMHgyMDAxLAorCTB4MThiMCwgMHgyMDA0LCAweDkwMDUsIDB4MTE5MCwgMHgwZTA0LCAweDRjYmUsIDB4N2EzNiwgMHg3ODMzLAorCTB4MDAxMiwgMHg3YTgyLCAweDdiODYsIDB4N2M4YSwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LAorCTB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTIwMCwgMHgwODA0LCAweDRkMjQsIDB4MDAxNiwgMHgwMDg2LAorCTB4MDA5NiwgMHgwMGM2LCAweDAwZTYsIDB4MjA3MSwgMHgxODllLCAweDcwNDQsIDB4OTAwNSwgMHgxNTQwLAorCTB4NzE0OCwgMHg5MTgyLCAweDAwMTAsIDB4MDI4OCwgMHg3MDM4LCAweDIwNjAsIDB4MDgwYywgMHgxMDU5LAorCTB4MDkwNCwgMHg0ZDFjLCAweGE4NGIsIDB4MDAwMCwgMHgyOTAwLCAweDcwNDYsIDB4MjAwMSwgMHgwMDAyLAorCTB4OTA4MCwgMHgxZWMxLCAweDIwMDUsIDB4YTg0NiwgMHgwMDk4LCAweDcwMzgsIDB4OTBlMCwgMHgwMDA0LAorCTB4MjAwMSwgMHgxOGJhLCAweDljODIsIDB4MThmYSwgMHgwMjEwLCAweDIwNjEsIDB4MThiYSwgMHgyYzAwLAorCTB4NzAzYSwgMHg3MTQ4LCAweDgxZmYsIDB4MTEwOCwgMHg3MDNlLCAweDgxMDgsIDB4NzE0YSwgMHgwNDYwLAorCTB4NzE0OCwgMHg4MTA4LCAweDcxNGEsIDB4NzA0NCwgMHgyMDQwLCAweGExNDQsIDB4MjEwNSwgMHgwMDE2LAorCTB4OTA4YSwgMHgwMDM2LCAweDFhMGMsIDB4MGQ4NSwgMHgyMDYwLCAweDAwMWUsIDB4ODEwOCwgMHgyMTA1LAorCTB4OTAwNSwgMHhhMTQ2LCAweDE1MjAsIDB4MDgwYywgMHgxMDU5LCAweDExMzAsIDB4ODEwOSwgMHhhOTQ2LAorCTB4NzE0OCwgMHg4MTA5LCAweDcxNGEsIDB4MDBkOCwgMHg5MDA2LCAweGE4MDYsIDB4YTg0YSwgMHhhMDQ2LAorCTB4MjgwMCwgMHhhODAyLCAweDI5MDAsIDB4YTAwNiwgMHg3MDQ2LCAweDIwMDEsIDB4MDAwMiwgMHg5MDgwLAorCTB4MWVjMSwgMHgyMDA1LCAweGE4NDYsIDB4MDA1OCwgMHgyMjYyLCAweDYzMDYsIDB4NjQwYSwgMHgwMGVlLAorCTB4MDBjZSwgMHgwMDllLCAweDAwOGUsIDB4MDAxZSwgMHgwMTJlLCAweDAwZmUsIDB4MDAwNSwgMHgyYzAwLAorCTB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4NGQ0NiwgMHg0ZDQ2LCAweDRkNDgsIDB4NGQ0NiwgMHg0ZDQ2LAorCTB4NGQ0NiwgMHg0ZDRjLCAweDRkNDYsIDB4NGQ0NiwgMHg0ZDQ2LCAweDRkNTAsIDB4NGQ0NiwgMHg0ZDQ2LAorCTB4NGQ0NiwgMHg0ZDU0LCAweDRkNDYsIDB4NGQ0NiwgMHg0ZDQ2LCAweDRkNTgsIDB4NGQ0NiwgMHg0ZDQ2LAorCTB4NGQ0NiwgMHg0ZDVjLCAweDRkNDYsIDB4NGQ0NiwgMHg0ZDQ2LCAweDRkNjEsIDB4MDgwYywgMHgwZDg1LAorCTB4YTI3NiwgMHhhMzdhLCAweGE0N2UsIDB4MDg5OCwgMHhhMjg2LCAweGEzOGEsIDB4YTQ4ZSwgMHgwODc4LAorCTB4YTI5NiwgMHhhMzlhLCAweGE0OWUsIDB4MDg1OCwgMHhhMmE2LCAweGEzYWEsIDB4YTRhZSwgMHgwODM4LAorCTB4YTJiNiwgMHhhM2JhLCAweGE0YmUsIDB4MDgxOCwgMHhhMmM2LCAweGEzY2EsIDB4YTRjZSwgMHgwODA0LAorCTB4NGQxZiwgMHhhMmQ2LCAweGEzZGEsIDB4YTRkZSwgMHgwODA0LCAweDRkMWYsIDB4MDBlNiwgMHgyMDcxLAorCTB4MTg5ZSwgMHg3MDQ4LCAweDkwMDUsIDB4MDkwNCwgMHg0ZGY4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MGUwNCwgMHg0ZGY3LCAweDAwZjYsIDB4MjA3OSwgMHgwMDAwLCAweDAwYzYsIDB4MDA5NiwgMHgwMDg2LAorCTB4MDA3NiwgMHg5MDA2LCAweDIwMzgsIDB4NzA0MCwgMHgyMDQ4LCAweDkwMDUsIDB4MDUwMCwgMHhhOTQ4LAorCTB4MjEwNSwgMHgwMDE2LCAweDkwOGEsIDB4MDAzNiwgMHgxYTBjLCAweDBkODUsIDB4MjA2MCwgMHgwMDFlLAorCTB4ODEwOCwgMHgyMTA1LCAweDkwMDUsIDB4YTk0YSwgMHgxOTA0LCAweDRkZmEsIDB4YTgwNCwgMHg5MDA1LAorCTB4MDkwYywgMHgwZDg1LCAweDcwNDIsIDB4MjkzOCwgMHgyMDQwLCAweGEwMDMsIDB4MDAwMCwgMHgyMDAxLAorCTB4MDAwMiwgMHg5MDgwLCAweDFlYzEsIDB4MjAwNSwgMHhhMDRhLCAweDA4MDQsIDB4NGRmYSwgMHg3MDNjLAorCTB4MjA2MCwgMHgyYzE0LCAweDYzMDQsIDB4NjQwOCwgMHg2NTBjLCAweDIyMDAsIDB4NzgzNiwgMHg3ODMzLAorCTB4MDAxMiwgMHg3ODgyLCAweDIzMDAsIDB4Nzg4NiwgMHgyNDAwLCAweDc4OGEsIDB4MjA5MSwgMHg0MDgwLAorCTB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDEyMDAsIDB4ODdmZiwgMHgwMTE4LAorCTB4Mjc0OCwgMHgwODBjLCAweDEwOGIsIDB4NzA0OCwgMHg4MDAxLCAweDcwNGEsIDB4OTAwNSwgMHgxMTcwLAorCTB4NzA0MCwgMHgyMDQ4LCAweDkwMDUsIDB4MDEyOCwgMHgwODBjLCAweDEwOGIsIDB4OTAwNiwgMHg3MDQyLAorCTB4NzA0NiwgMHg3MDNiLCAweDE4YmEsIDB4NzAzZiwgMHgxOGJhLCAweDA0MjAsIDB4NzA0MCwgMHg5MDA1LAorCTB4MTUwOCwgMHg3MjM4LCAweDJjMDAsIDB4OTIwNiwgMHgwMTQ4LCAweDljODAsIDB4MDAwNCwgMHg5MGZhLAorCTB4MThmYSwgMHgwMjEwLCAweDIwMDEsIDB4MThiYSwgMHg3MDNlLCAweDAwYTAsIDB4OTAwNiwgMHg3MDNlLAorCTB4NzAzYSwgMHg3MDQ0LCAweDkwMDUsIDB4MDkwYywgMHgwZDg1LCAweDIwNDgsIDB4YTgwMCwgMHg5MDA1LAorCTB4MWRlMCwgMHgyOTAwLCAweDcwNDIsIDB4MjAwMSwgMHgwMDAyLCAweDkwODAsIDB4MWVjMSwgMHgyMDA1LAorCTB4YTg0YSwgMHgwMDAwLCAweDAwN2UsIDB4MDA4ZSwgMHgwMDllLCAweDAwY2UsIDB4MDBmZSwgMHgwMTJlLAorCTB4MDBlZSwgMHgwMDA1LCAweDJjMDAsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4NGUxOSwgMHg0ZTE5LAorCTB4NGUxYiwgMHg0ZTE5LCAweDRlMTksIDB4NGUxOSwgMHg0ZTIwLCAweDRlMTksIDB4NGUxOSwgMHg0ZTE5LAorCTB4NGUyNSwgMHg0ZTE5LCAweDRlMTksIDB4NGUxOSwgMHg0ZTJhLCAweDRlMTksIDB4NGUxOSwgMHg0ZTE5LAorCTB4NGUyZiwgMHg0ZTE5LCAweDRlMTksIDB4NGUxOSwgMHg0ZTM0LCAweDRlMTksIDB4NGUxOSwgMHg0ZTE5LAorCTB4NGUzOSwgMHgwODBjLCAweDBkODUsIDB4YWE3NCwgMHhhYjc4LCAweGFjN2MsIDB4MDgwNCwgMHg0ZGE1LAorCTB4YWE4NCwgMHhhYjg4LCAweGFjOGMsIDB4MDgwNCwgMHg0ZGE1LCAweGFhOTQsIDB4YWI5OCwgMHhhYzljLAorCTB4MDgwNCwgMHg0ZGE1LCAweGFhYTQsIDB4YWJhOCwgMHhhY2FjLCAweDA4MDQsIDB4NGRhNSwgMHhhYWI0LAorCTB4YWJiOCwgMHhhY2JjLCAweDA4MDQsIDB4NGRhNSwgMHhhYWM0LCAweGFiYzgsIDB4YWNjYywgMHgwODA0LAorCTB4NGRhNSwgMHhhYWQ0LCAweGFiZDgsIDB4YWNkYywgMHgwODA0LCAweDRkYTUsIDB4MDAxNiwgMHgwMDI2LAorCTB4MDAzNiwgMHgwMGI2LCAweDAwYzYsIDB4MjAwOSwgMHgwMDdlLCAweDA4MGMsIDB4NjdiNCwgMHgyMDE5LAorCTB4MDAwMSwgMHhiODVjLCAweGQwYWMsIDB4MDExMCwgMHgyMDE5LCAweDAwMDAsIDB4MjAxMSwgMHg4MDFiLAorCTB4MDgwYywgMHg0Y2ExLCAweDAwY2UsIDB4MDBiZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAorCTB4MDAyNiwgMHgwODBjLCAweDU4NDAsIDB4ZDBjNCwgMHgwMTIwLCAweDIwMTEsIDB4ODAxNCwgMHgwODBjLAorCTB4NGNhMSwgMHgwMDJlLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDM2YmYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg2MDMwLCAweGMwOGQsIDB4YzA4NSwgMHhjMGFjLCAweDYwMzIsIDB4MDgwYywgMHg3NzllLAorCTB4MTE1OCwgMHgwODBjLCAweDdhYjYsIDB4MDgwYywgMHg2MTlkLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLAorCTB4NzdlMiwgMHgwODBjLCAweDc2Y2QsIDB4MDAxMCwgMHgwODBjLCAweDYwNTgsIDB4MDEyZSwgMHgwODA0LAorCTB4MzY4ZCwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsIDB4MzZiZiwgMHgwODBjLAorCTB4NTg1NCwgMHgwMTIwLCAweDIwMDksIDB4MDAwNywgMHgwODA0LCAweDM2YmYsIDB4MDgwYywgMHg2YzA5LAorCTB4MDEyMCwgMHgyMDA5LCAweDAwMDgsIDB4MDgwNCwgMHgzNmJmLCAweDIwMDEsIDB4MTgwZCwgMHgyMDA0LAorCTB4ZDA4YywgMHgwMTc4LCAweDAwMjYsIDB4MjAxMSwgMHgwMDEwLCAweDA4MGMsIDB4NmMzNSwgMHgwMDJlLAorCTB4MDE0MCwgMHg3OTg0LCAweDA4MGMsIDB4NmM3ZiwgMHgxMTIwLCAweDIwMDksIDB4NDAwOSwgMHgwODA0LAorCTB4MzZiZiwgMHg3OTg0LCAweDA4MGMsIDB4Njc0OSwgMHgxOTA0LCAweDM2YzIsIDB4MDgwYywgMHg0Yzc0LAorCTB4MDkwNCwgMHgzNmMyLCAweDJiMDAsIDB4NzAyNiwgMHgwODBjLCAweDZjMTEsIDB4Nzg4OCwgMHgxMTcwLAorCTB4OTA4NCwgMHgwMDA1LCAweDExNTgsIDB4OTAwZSwgMHgwODBjLCAweDZhYWUsIDB4MTEwOCwgMHhjMTg1LAorCTB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwODA0LCAweDM2OGQsIDB4MDgwYywgMHg0YzQxLAorCTB4MDkwNCwgMHgzNmJmLCAweDkwMDYsIDB4YTg2NiwgMHhhODMyLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLAorCTB4MDgwYywgMHhkMTU0LCAweDA5MDQsIDB4MzZiZiwgMHg3ODg4LCAweGQwOTQsIDB4MDExOCwgMHhiOGQ0LAorCTB4YzA4ZCwgMHhiOGQ2LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDRmMjgsIDB4MDAwNSwgMHgyMDYxLAorCTB4MTgwMCwgMHgwODBjLCAweDU4NTQsIDB4MjAwOSwgMHgwMDA3LCAweDE1NjAsIDB4MDgwYywgMHg2YzA5LAorCTB4MDExOCwgMHgyMDA5LCAweDAwMDgsIDB4MDQzMCwgMHhhOTk4LCAweDA4MGMsIDB4Njc0OSwgMHgxNTMwLAorCTB4MDgwYywgMHg0YzcyLCAweDA1MTgsIDB4MDgwYywgMHg2YzExLCAweGE4OWMsIDB4MTE2OCwgMHg5MDg0LAorCTB4MDAwNSwgMHgxMTUwLCAweDkwMGUsIDB4MDgwYywgMHg2YWFlLCAweDExMDgsIDB4YzE4NSwgMHhiODAwLAorCTB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDBkMCwgMHhhODY4LCAweGMwZmMsIDB4YTg2YSwgMHgwODBjLAorCTB4ZDE1NCwgMHgxMWUwLCAweGE4OWMsIDB4ZDA5NCwgMHgwMTE4LCAweGI4ZDQsIDB4YzA4ZCwgMHhiOGQ2LAorCTB4MjAwOSwgMHgwMDAzLCAweGE4OTcsIDB4NDAwNSwgMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LAorCTB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLAorCTB4YTk5YSwgMHg5MDA2LCAweDkxOGQsIDB4MDAwMSwgMHgyMDA4LCAweDAwMDUsIDB4OTAwNiwgMHgwMDA1LAorCTB4YTgzMCwgMHgyMDA5LCAweDE4MGQsIDB4MjEwYywgMHhkMThjLCAweDAxNDAsIDB4MjAwOCwgMHg5MThlLAorCTB4ZGVhZCwgMHgxMTIwLCAweDIwMjEsIDB4NDAwOSwgMHgwODA0LCAweDM2OGYsIDB4OTA4NiwgMHgwMTAwLAorCTB4NzAyNCwgMHgyMDU4LCAweDExMTAsIDB4MDgwNCwgMHg1NzhlLCAweDkwMGUsIDB4MDgwYywgMHg2YWFlLAorCTB4MTEwOCwgMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MDgwNCwgMHgzNjhkLAorCTB4MDgwYywgMHg1ODU0LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsIDB4MzZiZiwgMHg3Zjg0LAorCTB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgwODBjLCAweDRjNDEsIDB4MTEyMCwgMHgyMDA5LAorCTB4MDAwMiwgMHgwODA0LCAweDM2YmYsIDB4OTAwZSwgMHgyMTMwLCAweDcxMjYsIDB4NzEzMiwgMHhhODYwLAorCTB4MjBlOCwgMHg3MDM2LCAweGE4NWMsIDB4OTA4MCwgMHgwMDA1LCAweDcwMmEsIDB4MjBhMCwgMHgwODBjLAorCTB4NjdiNCwgMHgxOTA0LCAweDRmZGUsIDB4MDgwYywgMHg2YzExLCAweDAxMzgsIDB4MDgwYywgMHg2YzE5LAorCTB4MDEyMCwgMHgwODBjLCAweDZiYjEsIDB4MTkwNCwgMHg0ZmRlLCAweGQ3OTQsIDB4MTExMCwgMHhkNzg0LAorCTB4MDFhOCwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMDYsIDB4MjA5OCwgMHgzNDAwLAorCTB4ZDc5NCwgMHgwMTk4LCAweDIwYTksIDB4MDAwOCwgMHg0MDAzLCAweDIwOTgsIDB4MjBhMCwgMHgzZDAwLAorCTB4MjBlMCwgMHgyMGE5LCAweDAwMDIsIDB4MDgwYywgMHg0YTEwLCAweDAwODAsIDB4YjhjNCwgMHgyMGUwLAorCTB4YjhjOCwgMHg5MDgwLCAweDAwMGEsIDB4MjA5OCwgMHgzNDAwLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLAorCTB4MjA5OCwgMHgyMGEwLCAweDNkMDAsIDB4MjBlMCwgMHgwODBjLCAweDRhMTAsIDB4OTE4NiwgMHgwMDdlLAorCTB4MDE3MCwgMHg5MTg2LCAweDAwODAsIDB4MDE1OCwgMHgwODBjLCAweDZjMTEsIDB4OTBjMiwgMHgwMDA2LAorCTB4MTIxMCwgMHhjMWZkLCAweDAwMjAsIDB4MDgwYywgMHg2YWFlLCAweDExMDgsIDB4YzFmZCwgMHg0MTA0LAorCTB4YzFmYywgMHhkNzk0LCAweDA1MjgsIDB4YjhjNCwgMHgyMGUwLCAweGI4YzgsIDB4MjA2MCwgMHg5YzgwLAorCTB4MDAwMCwgMHgyMDk4LCAweDIwYTksIDB4MDAwMiwgMHg0MDAzLCAweDljODAsIDB4MDAwMywgMHgyMDk4LAorCTB4MjBhOSwgMHgwMDAxLCAweDQwMDUsIDB4OWM4MCwgMHgwMDA0LCAweDIwOTgsIDB4MzQwMCwgMHgyMGE5LAorCTB4MDAwMiwgMHg0MDAzLCAweDIwOTgsIDB4MjBhMCwgMHgzZDAwLCAweDIwZTAsIDB4MDgwYywgMHg0YTAzLAorCTB4OWM4MCwgMHgwMDI2LCAweDIwOTgsIDB4YjhjNCwgMHgyMGUwLCAweDIwYTksIDB4MDAwMiwgMHg0MDAzLAorCTB4ZDc5NCwgMHgwMTEwLCAweDk2YjAsIDB4MDAwYiwgMHg5NmIwLCAweDAwMDUsIDB4ODEwOCwgMHgwODBjLAorCTB4YjA5NCwgMHgwMTE4LCAweDkxODYsIDB4MDgwMCwgMHgwMDQwLCAweGQ3OGMsIDB4MDEyMCwgMHg5MTg2LAorCTB4MDgwMCwgMHgwMTcwLCAweDAwMTgsIDB4OTE4NiwgMHgwMDdlLCAweDAxNTAsIDB4ZDc5NCwgMHgwMTE4LAorCTB4OTY4NiwgMHgwMDIwLCAweDAwMTAsIDB4OTY4NiwgMHgwMDI4LCAweDAxNTAsIDB4MDgwNCwgMHg0ZjY3LAorCTB4ODZmZiwgMHgxMTIwLCAweDcxMjQsIDB4ODEwYiwgMHgwODA0LCAweDM2OGQsIDB4NzAzMywgMHgwMDAxLAorCTB4NzEyMiwgMHg3MDI0LCAweDk2MDAsIDB4NzAyNiwgMHg3NzJlLCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LAorCTB4YTA2YiwgMHgwMDAwLCAweGE2N2EsIDB4NzAzNCwgMHhhMDcyLCAweDcwMjgsIDB4YTA3NiwgMHhhMjhlLAorCTB4YTM5MiwgMHhhNDk2LCAweGE1OWEsIDB4MDgwYywgMHgxMTRlLCAweDcwMDcsIDB4MDAwMiwgMHg3MDFmLAorCTB4NTAxYSwgMHgwMDA1LCAweDcwMzAsIDB4OTAwNSwgMHgxMTgwLCAweDcxMjAsIDB4NzAyOCwgMHgyMGEwLAorCTB4NzcyYywgMHg5MDM2LCAweDcwMzQsIDB4MjBlOCwgMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHhhMjhjLAorCTB4YTM5MCwgMHhhNDk0LCAweGE1OTgsIDB4MDgwNCwgMHg0ZjY3LCAweDcxMjQsIDB4ODEwYiwgMHgwODA0LAorCTB4MzY4ZCwgMHgyMDI5LCAweDAwN2UsIDB4Nzk4NCwgMHg3YTg4LCAweDdiOGMsIDB4N2M5OCwgMHg5MTg0LAorCTB4ZmYwMCwgMHg4MDA3LCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM2YzIsIDB4OTUwMiwgMHgwYTA0LAorCTB4MzZjMiwgMHg5MTg0LCAweDAwZmYsIDB4OTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MzZjMiwgMHg5NTAyLAorCTB4MGEwNCwgMHgzNmMyLCAweDkyODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LAorCTB4MzZjMiwgMHg5NTAyLCAweDBhMDQsIDB4MzZjMiwgMHg5Mjg0LCAweDAwZmYsIDB4OTBlMiwgMHgwMDIwLAorCTB4MGEwNCwgMHgzNmMyLCAweDk1MDIsIDB4MGEwNCwgMHgzNmMyLCAweDkzODQsIDB4ZmYwMCwgMHg4MDA3LAorCTB4OTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MzZjMiwgMHg5NTAyLCAweDBhMDQsIDB4MzZjMiwgMHg5Mzg0LAorCTB4MDBmZiwgMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNmMyLCAweDk1MDIsIDB4MGEwNCwgMHgzNmMyLAorCTB4OTQ4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MzZjMiwgMHg5NTAyLAorCTB4MGEwNCwgMHgzNmMyLCAweDk0ODQsIDB4MDBmZiwgMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNmMyLAorCTB4OTUwMiwgMHgwYTA0LCAweDM2YzIsIDB4MjA2MSwgMHgxOTg5LCAweDYxMDIsIDB4NjIwNiwgMHg2MzBhLAorCTB4NjQwZSwgMHgwODA0LCAweDM2OGQsIDB4MDgwYywgMHg0YzQxLCAweDA5MDQsIDB4MzZiZiwgMHgyMDA5LAorCTB4MDAxNiwgMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LAorCTB4YWY2MCwgMHgwODBjLCAweDRjOGEsIDB4NzAxZiwgMHg1MDllLCAweDAwMDUsIDB4MjBhOSwgMHgwMDE2LAorCTB4ODk2ZSwgMHg4ZDZlLCAweDhkNmYsIDB4OWQ4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAxOSwgMHgyMDk4LAorCTB4OWQ4NCwgMHgwMDNmLCAweDIwZTAsIDB4MjA2OSwgMHgxODc3LCAweDIwZTksIDB4MDAwMSwgMHgyZGEwLAorCTB4NDAwMywgMHg2ODAwLCAweDkwMDUsIDB4MDkwNCwgMHg1MTA1LCAweDY4MDQsIDB4MjAwOCwgMHg5MThjLAorCTB4ZmZmOCwgMHgxOTA0LCAweDUxMDUsIDB4NjgwYywgMHg5MDA1LCAweDA5MDQsIDB4NTEwNSwgMHg5MDgyLAorCTB4ZmYwMSwgMHgxYTA0LCAweDUxMDUsIDB4NjgxMCwgMHg5MDgyLCAweDAwNWMsIDB4MDZmMCwgMHg2ODI0LAorCTB4MjAwOCwgMHg5MDgyLCAweDAwMDgsIDB4MDZjOCwgMHg5MTgyLCAweDA0MDAsIDB4MTZiMCwgMHgwMDU2LAorCTB4MjAyOSwgMHgwMDAwLCAweDA4MGMsIDB4OTA3NywgMHgwMDVlLCAweDY5NDQsIDB4NjgyMCwgMHg5MTAyLAorCTB4MDY2MCwgMHg2ODIwLCAweDkwODIsIDB4MDAxOSwgMHgxNjQwLCAweDY4MjgsIDB4Njk0NCwgMHg4MTBjLAorCTB4OTEwMiwgMHgwNjE4LCAweDY4NDAsIDB4OTA4MiwgMHgwMDBmLCAweDEyZjgsIDB4MDgwYywgMHgxMDcyLAorCTB4MjkwMCwgMHgwNTkwLCAweDY4NGUsIDB4MDBlNiwgMHgyMDcxLCAweDE5MzEsIDB4MDBiNiwgMHgyMDU5LAorCTB4MDAwMCwgMHgwODBjLCAweDhmMzMsIDB4MDBiZSwgMHgwMGVlLCAweDAxZTgsIDB4MDgwYywgMHg4Yzc4LAorCTB4MDgwYywgMHg4Y2M3LCAweDExNjAsIDB4Njg1NywgMHgwMDAwLCAweDAwYzYsIDB4NmIxMCwgMHgyMDYxLAorCTB4MWE2ZSwgMHg2MzBlLCAweDAwY2UsIDB4MDgwNCwgMHgzNjhkLCAweDA4MDQsIDB4MzZjMiwgMHgwODBjLAorCTB4OGNjMCwgMHgwMGU2LCAweDIwNzEsIDB4MTkzMSwgMHgwODBjLCAweDkwZjcsIDB4MDgwYywgMHg5MTA2LAorCTB4MDgwYywgMHg4ZjE4LCAweDAwZWUsIDB4MjAwMSwgMHgxODhhLCAweDIwNGMsIDB4MDgwYywgMHgxMDhiLAorCTB4MjAwMSwgMHgxODhhLCAweDIwMDMsIDB4MDAwMCwgMHgwODA0LCAweDM2YmYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgwODBjLCAweDk0YjgsIDB4MDgwYywgMHg4Y2MwLCAweDAxMmUsIDB4MDgwNCwgMHgzNjhkLAorCTB4MDAwNiwgMHgwODBjLCAweDU4NDAsIDB4ZDBjYywgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwODBjLAorCTB4NTg0NCwgMHhkMGJjLCAweDAwMGUsIDB4MDAwNSwgMHg2MTc0LCAweDdhODQsIDB4NjMwMCwgMHg4MmZmLAorCTB4MTExOCwgMHg3OTg2LCAweDA4MDQsIDB4MzY4ZCwgMHg4M2ZmLCAweDE5MDQsIDB4MzZjMiwgMHgyMDAxLAorCTB4ZmZmMCwgMHg5MjAwLCAweDFhMDQsIDB4MzZjMiwgMHgyMDE5LCAweGZmZmYsIDB4NjA3OCwgMHg5MzAyLAorCTB4OTIwMCwgMHgwYTA0LCAweDM2YzIsIDB4Nzk4NiwgMHg2Mjc2LCAweDA4MDQsIDB4MzY4ZCwgMHgwODBjLAorCTB4NTg1NCwgMHgxOTA0LCAweDM2YmYsIDB4N2M4OCwgMHg3ZDg0LCAweDdlOTgsIDB4N2Y4YywgMHgwODBjLAorCTB4NGM0MSwgMHgwOTA0LCAweDM2YmYsIDB4OTAwZSwgMHg5MDFlLCAweDczMjYsIDB4NzMzMiwgMHhhODYwLAogCTB4MjBlOCwgMHg3MDM2LCAweGE4NWMsIDB4OTA4MCwgMHgwMDAzLCAweDcwMmEsIDB4MjBhMCwgMHg5MWQ4LAotCTB4MTAwMCwgMHgyYjVjLCAweDhiZmYsIDB4MDE3OCwgMHgwODBjLCAweDZiY2QsIDB4MDExOCwgMHgwODBjLAotCTB4NmJkNSwgMHgxMTQ4LCAweDIwYTksIDB4MDAwMSwgMHhiODE0LCAweDQwMDQsIDB4YjgxMCwgMHg0MDA0LAorCTB4MTAwMCwgMHgyYjVjLCAweDhiZmYsIDB4MDE3OCwgMHgwODBjLCAweDZjMTEsIDB4MDExOCwgMHgwODBjLAorCTB4NmMxOSwgMHgxMTQ4LCAweDIwYTksIDB4MDAwMSwgMHhiODE0LCAweDQwMDQsIDB4YjgxMCwgMHg0MDA0LAogCTB4NDEwNCwgMHg5Mzk4LCAweDAwMDMsIDB4ODEwOCwgMHg5MTgyLCAweDA4MDAsIDB4MDEyMCwgMHg5Mzg2LAogCTB4MDAzYywgMHgwMTcwLCAweDBjMjAsIDB4ODNmZiwgMHgxMTQ4LCAweDcyMjQsIDB4OTAwZSwgMHgyMDAxLAotCTB4MDAwMywgMHgwODBjLCAweDkzNjQsIDB4MjIwOCwgMHgwODA0LCAweDM2NzMsIDB4NzAzMywgMHgwMDAxLAorCTB4MDAwMywgMHgwODBjLCAweDk1NWIsIDB4MjIwOCwgMHgwODA0LCAweDM2OGQsIDB4NzAzMywgMHgwMDAxLAogCTB4NzEyMiwgMHg3MDI0LCAweDkzMDAsIDB4NzAyNiwgMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHhhMDZiLAogCTB4MDAwMCwgMHhhMzdhLCAweDcwMjgsIDB4YTA3NiwgMHg3MDM0LCAweGEwNzIsIDB4YTQ4ZSwgMHhhNTkyLAotCTB4YTY5NiwgMHhhNzlhLCAweDA4MGMsIDB4MTE0MiwgMHg3MDA3LCAweDAwMDIsIDB4NzAxZiwgMHg1MTg5LAorCTB4YTY5NiwgMHhhNzlhLCAweDA4MGMsIDB4MTE0ZSwgMHg3MDA3LCAweDAwMDIsIDB4NzAxZiwgMHg1MWE5LAogCTB4MDAwNSwgMHg3MDMwLCAweDkwMDUsIDB4MTE3OCwgMHg3MTIwLCAweDcwMjgsIDB4MjBhMCwgMHg5MDFlLAogCTB4NzAzNCwgMHgyMGU4LCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LCAweGE0OGMsIDB4YTU5MCwgMHhhNjk0LAotCTB4YTc5OCwgMHgwODA0LCAweDUxNDcsIDB4NzIyNCwgMHg5MDBlLCAweDIwMDEsIDB4MDAwMywgMHgwODBjLAotCTB4OTM2NCwgMHgyMjA4LCAweDA4MDQsIDB4MzY3MywgMHgwMGY2LCAweDAwZTYsIDB4MDgwYywgMHg1ODM0LAotCTB4MjAwOSwgMHgwMDA3LCAweDE5MDQsIDB4NTIxYywgMHgyMDcxLCAweDE4OWUsIDB4NzQ1YywgMHg4NGZmLAotCTB4MjAwOSwgMHgwMDBlLCAweDE5MDQsIDB4NTIxYywgMHhhYzljLCAweGFkOTgsIDB4YWVhNCwgMHhhZmEwLAotCTB4MDA5NiwgMHgwODBjLCAweDEwNjYsIDB4MjAwOSwgMHgwMDAyLCAweDA5MDQsIDB4NTIxYywgMHgyOTAwLAorCTB4YTc5OCwgMHgwODA0LCAweDUxNjcsIDB4NzIyNCwgMHg5MDBlLCAweDIwMDEsIDB4MDAwMywgMHgwODBjLAorCTB4OTU1YiwgMHgyMjA4LCAweDA4MDQsIDB4MzY4ZCwgMHgwMGY2LCAweDAwZTYsIDB4MDgwYywgMHg1ODU0LAorCTB4MjAwOSwgMHgwMDA3LCAweDE5MDQsIDB4NTIzYywgMHgyMDcxLCAweDE4OWUsIDB4NzQ1YywgMHg4NGZmLAorCTB4MjAwOSwgMHgwMDBlLCAweDE5MDQsIDB4NTIzYywgMHhhYzljLCAweGFkOTgsIDB4YWVhNCwgMHhhZmEwLAorCTB4MDA5NiwgMHgwODBjLCAweDEwNzIsIDB4MjAwOSwgMHgwMDAyLCAweDA5MDQsIDB4NTIzYywgMHgyOTAwLAogCTB4NzA1ZSwgMHg5MDBlLCAweDkwMWUsIDB4NzM1NiwgMHg3MzYyLCAweGE4NjAsIDB4NzA2NiwgMHhhODVjLAogCTB4OTA4MCwgMHgwMDAzLCAweDcwNWEsIDB4MjBhMCwgMHg5MWQ4LCAweDEwMDAsIDB4MmI1YywgMHg4YmZmLAotCTB4MDE3OCwgMHgwODBjLCAweDZiY2QsIDB4MDExOCwgMHgwODBjLCAweDZiZDUsIDB4MTE0OCwgMHhiODE0LAorCTB4MDE3OCwgMHgwODBjLCAweDZjMTEsIDB4MDExOCwgMHgwODBjLCAweDZjMTksIDB4MTE0OCwgMHhiODE0LAogCTB4MjBhOSwgMHgwMDAxLCAweDQwMDQsIDB4YjgxMCwgMHg0MDA0LCAweDQxMDQsIDB4OTM5OCwgMHgwMDAzLAogCTB4ODEwOCwgMHg5MTgyLCAweDA4MDAsIDB4MDEyMCwgMHg5Mzg2LCAweDAwM2MsIDB4MDFlOCwgMHgwYzIwLAotCTB4ODNmZiwgMHgxMWMwLCAweDcyNTQsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDMsIDB4MDgwYywgMHg5MzY0LAorCTB4ODNmZiwgMHgxMWMwLCAweDcyNTQsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDMsIDB4MDgwYywgMHg5NTViLAogCTB4MjIwOCwgMHgwMDllLCAweGE4OTcsIDB4NDAwMCwgMHhhOTlhLCAweDcxNWMsIDB4ODFmZiwgMHgwOTBjLAotCTB4MGQ3OSwgMHgyMTQ4LCAweDA4MGMsIDB4MTA3ZiwgMHg5MDA2LCAweDcwNWUsIDB4OTE4ZCwgMHgwMDAxLAorCTB4MGQ4NSwgMHgyMTQ4LCAweDA4MGMsIDB4MTA4YiwgMHg5MDA2LCAweDcwNWUsIDB4OTE4ZCwgMHgwMDAxLAogCTB4MjAwOCwgMHgwNDE4LCAweDcwNjMsIDB4MDAwMSwgMHg3MTUyLCAweDcwNTQsIDB4OTMwMCwgMHg3MDU2LAogCTB4MjA2MSwgMHgxOGI5LCAweDJjNDQsIDB4YTM3YSwgMHg3MDU4LCAweGEwNzYsIDB4NzA2NCwgMHhhMDcyLAotCTB4YTQ4ZSwgMHhhNTkyLCAweGE2OTYsIDB4YTc5YSwgMHhhMDlmLCAweDUyMjgsIDB4MDAwZSwgMHhhMGEyLAotCTB4MDgwYywgMHgxMTQyLCAweDkwMDYsIDB4MDA0OCwgMHgwMDllLCAweGE4OTcsIDB4NDAwNSwgMHhhOTlhLAorCTB4YTQ4ZSwgMHhhNTkyLCAweGE2OTYsIDB4YTc5YSwgMHhhMDlmLCAweDUyNDgsIDB4MDAwZSwgMHhhMGEyLAorCTB4MDgwYywgMHgxMTRlLCAweDkwMDYsIDB4MDA0OCwgMHgwMDllLCAweGE4OTcsIDB4NDAwNSwgMHhhOTlhLAogCTB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDBmNiwgMHhhMGEwLCAweDkwNGQsIDB4MDkwYywgMHgwZDc5LCAweDAwZTYsIDB4MjA3MSwgMHgxODllLAorCTB4MDBmNiwgMHhhMGEwLCAweDkwNGQsIDB4MDkwYywgMHgwZDg1LCAweDAwZTYsIDB4MjA3MSwgMHgxODllLAogCTB4YTA2YywgMHg5MDhlLCAweDAxMDAsIDB4MDEzOCwgMHhhODdiLCAweDAwMzAsIDB4YTg4MywgMHgwMDAwLAogCTB4YTg5NywgMHg0MDAyLCAweDAwZDgsIDB4NzA2MCwgMHg5MDA1LCAweDExNTgsIDB4NzE1MCwgMHg3MDU4LAogCTB4MjBhMCwgMHg5MDFlLCAweDcwNjQsIDB4MjBlOCwgMHhhNDhjLCAweGE1OTAsIDB4YTY5NCwgMHhhNzk4LAogCTB4MDQyOCwgMHhhODdiLCAweDAwMDAsIDB4YTg4MywgMHgwMDAwLCAweGE4OTcsIDB4NDAwMCwgMHg3MjU0LAotCTB4OTAwZSwgMHgyMDAxLCAweDAwMDMsIDB4MDgwYywgMHg5MzY0LCAweGFhOWEsIDB4NzE1YywgMHg4MWZmLAotCTB4MDkwYywgMHgwZDc5LCAweDIxNDgsIDB4MDgwYywgMHgxMDdmLCAweDcwNWYsIDB4MDAwMCwgMHhhMGEwLAotCTB4MjA0OCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZmMTEsIDB4MDEyZSwgMHhhMDlmLAorCTB4OTAwZSwgMHgyMDAxLCAweDAwMDMsIDB4MDgwYywgMHg5NTViLCAweGFhOWEsIDB4NzE1YywgMHg4MWZmLAorCTB4MDkwYywgMHgwZDg1LCAweDIxNDgsIDB4MDgwYywgMHgxMDhiLCAweDcwNWYsIDB4MDAwMCwgMHhhMGEwLAorCTB4MjA0OCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDcwMTIsIDB4MDEyZSwgMHhhMDlmLAogCTB4MDAwMCwgMHhhMGEzLCAweDAwMDAsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4OTFkOCwgMHgxMDAwLAotCTB4MmI1YywgMHg4YmZmLCAweDAxNzgsIDB4MDgwYywgMHg2YmNkLCAweDAxMTgsIDB4MDgwYywgMHg2YmQ1LAorCTB4MmI1YywgMHg4YmZmLCAweDAxNzgsIDB4MDgwYywgMHg2YzExLCAweDAxMTgsIDB4MDgwYywgMHg2YzE5LAogCTB4MTE0OCwgMHhiODE0LCAweDIwYTksIDB4MDAwMSwgMHg0MDA0LCAweGI4MTAsIDB4NDAwNCwgMHg0MTA0LAogCTB4OTM5OCwgMHgwMDAzLCAweDgxMDgsIDB4OTE4MiwgMHgwODAwLCAweDAxMjAsIDB4OTM4NiwgMHgwMDNjLAogCTB4MDUxOCwgMHgwYzIwLCAweDgzZmYsIDB4MTFmMCwgMHg3MTU0LCAweDgxMGMsIDB4YTk5YSwgMHhhODk3LAotCTB4NDAwMCwgMHg3MTVjLCAweDgxZmYsIDB4MDkwYywgMHgwZDc5LCAweDIxNDgsIDB4MDgwYywgMHgxMDdmLAorCTB4NDAwMCwgMHg3MTVjLCAweDgxZmYsIDB4MDkwYywgMHgwZDg1LCAweDIxNDgsIDB4MDgwYywgMHgxMDhiLAogCTB4OTAwNiwgMHg3MDVlLCAweDkxOGQsIDB4MDAwMSwgMHgyMDA4LCAweGEwYTAsIDB4MjA0OCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmYxMSwgMHgwMTJlLCAweGEwOWYsIDB4MDAwMCwgMHhhMGEzLAorCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NzAxMiwgMHgwMTJlLCAweGEwOWYsIDB4MDAwMCwgMHhhMGEzLAogCTB4MDAwMCwgMHgwMDcwLCAweDcwNjMsIDB4MDAwMSwgMHg3MTUyLCAweDcwNTQsIDB4OTMwMCwgMHg3MDU2LAotCTB4YTM3YSwgMHhhNDhlLCAweGE1OTIsIDB4YTY5NiwgMHhhNzlhLCAweDA4MGMsIDB4MTE0MiwgMHg5MDA2LAorCTB4YTM3YSwgMHhhNDhlLCAweGE1OTIsIDB4YTY5NiwgMHhhNzlhLCAweDA4MGMsIDB4MTE0ZSwgMHg5MDA2LAogCTB4MDBlZSwgMHgwMDA1LCAweDAwOTYsIDB4YTg4YywgMHg5MGJlLCAweDcwMDAsIDB4MDE0OCwgMHg5MGJlLAotCTB4NzEwMCwgMHgwMTMwLCAweDkwYmUsIDB4NzIwMCwgMHgwMTE4LCAweDAwOWUsIDB4MDgwNCwgMHgzNmE4LAotCTB4YTg4NCwgMHhhOTg4LCAweDA4MGMsIDB4MjZhMSwgMHgxNTE4LCAweDA4MGMsIDB4NjcxOCwgMHgxNTAwLAotCTB4NzEyNiwgMHhiZTEyLCAweGJkMTYsIDB4YWU3YywgMHgwODBjLCAweDRiYzgsIDB4MDFjOCwgMHgwODBjLAotCTB4NGJjOCwgMHgwMWIwLCAweDAwOWUsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLAotCTB4YTgyMywgMHgwMDAwLCAweGE4MDQsIDB4MjA0OCwgMHgwODBjLCAweGNkZTUsIDB4MTEyMCwgMHgyMDA5LAotCTB4MDAwMywgMHgwODA0LCAweDM2YTUsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTJmNSwgMHgwMDA1LAotCTB4MDA5ZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNmE1LCAweDcxMjQsIDB4MDgwYywgMHgzNDA0LAotCTB4YTgyMCwgMHg5MDg2LCAweDgwMDEsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgzNmE1LAorCTB4NzEwMCwgMHgwMTMwLCAweDkwYmUsIDB4NzIwMCwgMHgwMTE4LCAweDAwOWUsIDB4MDgwNCwgMHgzNmMyLAorCTB4YTg4NCwgMHhhOTg4LCAweDA4MGMsIDB4MjY4YywgMHgxNTE4LCAweDA4MGMsIDB4Njc0OSwgMHgxNTAwLAorCTB4NzEyNiwgMHhiZTEyLCAweGJkMTYsIDB4YWU3YywgMHgwODBjLCAweDRjNDEsIDB4MDFjOCwgMHgwODBjLAorCTB4NGM0MSwgMHgwMWIwLCAweDAwOWUsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLAorCTB4YTgyMywgMHgwMDAwLCAweGE4MDQsIDB4MjA0OCwgMHgwODBjLCAweGQwY2QsIDB4MTEyMCwgMHgyMDA5LAorCTB4MDAwMywgMHgwODA0LCAweDM2YmYsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTMxNSwgMHgwMDA1LAorCTB4MDA5ZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNmJmLCAweDcxMjQsIDB4MDgwYywgMHgzNDFlLAorCTB4YTgyMCwgMHg5MDg2LCAweDgwMDEsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgzNmJmLAogCTB4MjkwMCwgMHg3MDIyLCAweGE4MDQsIDB4MDA5NiwgMHgyMDQ4LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LAogCTB4OTBiYywgMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHgwMDllLCAweDkwODAsIDB4MDAwMiwgMHgwMDc2LAogCTB4MDAwNiwgMHgyMDk4LCAweDIwYTAsIDB4MjdlMCwgMHgyN2U4LCAweDIwYTksIDB4MDAyYSwgMHgwODBjLAotCTB4MGZjYSwgMHhhYTZjLCAweGFiNzAsIDB4YWM3NCwgMHhhZDc4LCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LAorCTB4MGZkNiwgMHhhYTZjLCAweGFiNzAsIDB4YWM3NCwgMHhhZDc4LCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LAogCTB4YTA2YiwgMHgwMDAwLCAweGFlNjQsIDB4YWY4YywgMHg5N2M2LCAweDcwMDAsIDB4MDExOCwgMHg5N2M2LAogCTB4NzEwMCwgMHgxMTQ4LCAweDk2YzIsIDB4MDAwNCwgMHgwNjAwLCAweDIwMDksIDB4MDAwNCwgMHgwMDBlLAotCTB4MDA3ZSwgMHgwODA0LCAweDRjMTQsIDB4OTdjNiwgMHg3MjAwLCAweDExYjgsIDB4OTZjMiwgMHgwMDU0LAorCTB4MDA3ZSwgMHgwODA0LCAweDRjOGQsIDB4OTdjNiwgMHg3MjAwLCAweDExYjgsIDB4OTZjMiwgMHgwMDU0LAogCTB4MDJhMCwgMHgwMDBlLCAweDAwN2UsIDB4MjA2MSwgMHgxOGI4LCAweDJjNDQsIDB4YTA3NiwgMHhhNzcyLAotCTB4YTA3YiwgMHgwMDJhLCAweGEyOGUsIDB4YTM5MiwgMHhhNDk2LCAweGE1OWEsIDB4MDgwYywgMHgxMTQyLAotCTB4NzAwNywgMHgwMDAyLCAweDcwMWYsIDB4NTM1MSwgMHgwMDA1LCAweDAwMGUsIDB4MDA3ZSwgMHgwODA0LAotCTB4MzZhOCwgMHg3MDIwLCAweDIwNDgsIDB4YTgwNCwgMHgyMDQ4LCAweGE4MDQsIDB4MjA0OCwgMHg4OTA2LAorCTB4YTA3YiwgMHgwMDJhLCAweGEyOGUsIDB4YTM5MiwgMHhhNDk2LCAweGE1OWEsIDB4MDgwYywgMHgxMTRlLAorCTB4NzAwNywgMHgwMDAyLCAweDcwMWYsIDB4NTM3MSwgMHgwMDA1LCAweDAwMGUsIDB4MDA3ZSwgMHgwODA0LAorCTB4MzZjMiwgMHg3MDIwLCAweDIwNDgsIDB4YTgwNCwgMHgyMDQ4LCAweGE4MDQsIDB4MjA0OCwgMHg4OTA2LAogCTB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDAyLAotCTB4MjA5OCwgMHgyMGEwLCAweDI3ZTAsIDB4MjdlOCwgMHgyMGE5LCAweDAwMmEsIDB4MDgwYywgMHgwZmNhLAorCTB4MjA5OCwgMHgyMGEwLCAweDI3ZTAsIDB4MjdlOCwgMHgyMGE5LCAweDAwMmEsIDB4MDgwYywgMHgwZmQ2LAogCTB4MjEwMCwgMHgyMjM4LCAweDIwNjEsIDB4MThiOCwgMHgyYzQ0LCAweGEyOGMsIDB4YTM5MCwgMHhhNDk0LAotCTB4YTU5OCwgMHgyMDA5LCAweDAwMmEsIDB4MDgwNCwgMHg0YzE0LCAweDgxZmYsIDB4MTkwNCwgMHgzNmE1LAotCTB4Nzk4YywgMHgyMDAxLCAweDE5N2YsIDB4OTE4YywgMHg4MDAwLCAweDIxMDIsIDB4MDgwYywgMHg0YmRmLAotCTB4MDkwNCwgMHgzNmE4LCAweDA4MGMsIDB4NmJjZCwgMHgwMTIwLCAweDA4MGMsIDB4NmJkNSwgMHgxOTA0LAotCTB4MzZhOCwgMHgwODBjLCAweDY4NGEsIDB4MDkwNCwgMHgzNmE1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg2OWUxLCAweDAxMmUsIDB4MDkwNCwgMHgzNmE1LCAweDIwMDEsIDB4MTk3ZiwgMHgyMDA0LAotCTB4ZDBmYywgMHgxOTA0LCAweDM2NzMsIDB4MDgwNCwgMHg0NjYxLCAweGE5YTAsIDB4MjAwMSwgMHgxOTdmLAotCTB4OTE4YywgMHg4MDAwLCAweGMxOGQsIDB4MjEwMiwgMHgwODBjLCAweDRiZWMsIDB4MDFhMCwgMHgwODBjLAotCTB4NmJjZCwgMHgwMTE4LCAweDA4MGMsIDB4NmJkNSwgMHgxMTcwLCAweDA4MGMsIDB4Njg0YSwgMHgyMDA5LAotCTB4MDAwMiwgMHgwMTI4LCAweDA4MGMsIDB4NjllMSwgMHgxMTcwLCAweDIwMDksIDB4MDAwMywgMHhhODk3LAorCTB4YTU5OCwgMHgyMDA5LCAweDAwMmEsIDB4MDgwNCwgMHg0YzhkLCAweDgxZmYsIDB4MTkwNCwgMHgzNmJmLAorCTB4Nzk4YywgMHgyMDAxLCAweDE5N2UsIDB4OTE4YywgMHg4MDAwLCAweDIxMDIsIDB4MDgwYywgMHg0YzU4LAorCTB4MDkwNCwgMHgzNmMyLCAweDA4MGMsIDB4NmMxMSwgMHgwMTIwLCAweDA4MGMsIDB4NmMxOSwgMHgxOTA0LAorCTB4MzZjMiwgMHgwODBjLCAweDY4N2IsIDB4MDkwNCwgMHgzNmJmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MDgwYywgMHg2YTFiLCAweDAxMmUsIDB4MDkwNCwgMHgzNmJmLCAweDIwMDEsIDB4MTk3ZSwgMHgyMDA0LAorCTB4ZDBmYywgMHgxOTA0LCAweDM2OGQsIDB4MDgwNCwgMHg0NmFhLCAweGE5YTAsIDB4MjAwMSwgMHgxOTdlLAorCTB4OTE4YywgMHg4MDAwLCAweGMxOGQsIDB4MjEwMiwgMHgwODBjLCAweDRjNjUsIDB4MDFhMCwgMHgwODBjLAorCTB4NmMxMSwgMHgwMTE4LCAweDA4MGMsIDB4NmMxOSwgMHgxMTcwLCAweDA4MGMsIDB4Njg3YiwgMHgyMDA5LAorCTB4MDAwMiwgMHgwMTI4LCAweDA4MGMsIDB4NmExYiwgMHgxMTcwLCAweDIwMDksIDB4MDAwMywgMHhhODk3LAogCTB4NDAwNSwgMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLAotCTB4MjAwMSwgMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLCAweDIwMDEsIDB4MTk3ZiwgMHgyMDA0LAotCTB4ZDBmYywgMHgxMTI4LCAweDA4MGMsIDB4NTgyOCwgMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLAorCTB4MjAwMSwgMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLCAweDIwMDEsIDB4MTk3ZSwgMHgyMDA0LAorCTB4ZDBmYywgMHgxMTI4LCAweDA4MGMsIDB4NTg0OCwgMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLAogCTB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDc4YTgsIDB4ZDA4YywgMHgxMTE4LAotCTB4ZDA4NCwgMHgwOTA0LCAweDQ1ZDYsIDB4MDgwYywgMHg0YmZiLCAweDA5MDQsIDB4MzZhOCwgMHgwODBjLAotCTB4NGJjOCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YTUsIDB4MDgwYywgMHg2YmNkLAorCTB4ZDA4NCwgMHgwOTA0LCAweDQ2MWYsIDB4MDgwYywgMHg0Yzc0LCAweDA5MDQsIDB4MzZjMiwgMHgwODBjLAorCTB4NGM0MSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YmYsIDB4MDgwYywgMHg2YzExLAogCTB4MDEzMCwgMHg5MDhlLCAweDAwMDQsIDB4MDExOCwgMHg5MDhlLCAweDAwMDUsIDB4MTVhMCwgMHg3OGE4LAotCTB4ZDA4YywgMHgwMTIwLCAweGI4MDAsIDB4YzA4YywgMHhiODAyLCAweDAwMjgsIDB4MDgwYywgMHg1ODIwLAotCTB4ZDBiNCwgMHgwOTA0LCAweDQ2MTAsIDB4Nzg4NCwgMHg5MDhlLCAweDAwN2UsIDB4MDkwNCwgMHg0NjEwLAotCTB4OTA4ZSwgMHgwMDdmLCAweDA5MDQsIDB4NDYxMCwgMHg5MDhlLCAweDAwODAsIDB4MDkwNCwgMHg0NjEwLAotCTB4YjgwMCwgMHhkMDhjLCAweDE5MDQsIDB4NDYxMCwgMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLAotCTB4YTg2YSwgMHgwODBjLCAweGNlMDQsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNmE1LAotCTB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTQxZCwgMHgwMDA1LCAweDA4MGMsIDB4NGJmYiwgMHgwOTA0LAotCTB4MzZhOCwgMHgwODA0LCAweDQ2MTAsIDB4MDgwYywgMHgzNDYzLCAweDAxMDgsIDB4MDAwNSwgMHgyMDA5LAotCTB4MTgzNCwgMHgyMTBjLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNmE1LAotCTB4MDgwYywgMHg1ODM0LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsIDB4MzZhNSwgMHgwODBjLAotCTB4NmJjNSwgMHgwMTIwLCAweDIwMDksIDB4MDAwOCwgMHgwODA0LCAweDM2YTUsIDB4Yjg5YywgMHhkMGE0LAotCTB4MTExOCwgMHhkMGFjLCAweDE5MDQsIDB4NDYxMCwgMHg5MDA2LCAweGE4NjYsIDB4YTgzMiwgMHhhODY4LAotCTB4YzBmZCwgMHhhODZhLCAweDA4MGMsIDB4Y2U2YywgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LAotCTB4MzZhNSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1NDU2LCAweDAwMDUsIDB4YTgzMCwgMHg5MDg2LAotCTB4MDEwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDU3NmUsIDB4MDgwYywgMHg0YmZiLAotCTB4MDkwNCwgMHgzNmE4LCAweDA4MDQsIDB4NTNlZiwgMHg4MWZmLCAweDIwMDksIDB4MDAwMSwgMHgxOTA0LAotCTB4MzZhNSwgMHgwODBjLCAweDU4MzQsIDB4MjAwOSwgMHgwMDA3LCAweDE5MDQsIDB4MzZhNSwgMHgwODBjLAotCTB4NmJjNSwgMHgwMTIwLCAweDIwMDksIDB4MDAwOCwgMHgwODA0LCAweDM2YTUsIDB4MDgwYywgMHg0YmZiLAotCTB4MDkwNCwgMHgzNmE4LCAweDA4MGMsIDB4NmJjZCwgMHgyMDA5LCAweDAwMDksIDB4MTkwNCwgMHgzNmE1LAotCTB4MDgwYywgMHg0YmM4LCAweDIwMDksIDB4MDAwMiwgMHgwOTA0LCAweDM2YTUsIDB4OTAwNiwgMHhhODY2LAorCTB4ZDA4YywgMHgwMTIwLCAweGI4MDAsIDB4YzA4YywgMHhiODAyLCAweDAwMjgsIDB4MDgwYywgMHg1ODQwLAorCTB4ZDBiNCwgMHgwOTA0LCAweDQ2NTksIDB4Nzg4NCwgMHg5MDhlLCAweDAwN2UsIDB4MDkwNCwgMHg0NjU5LAorCTB4OTA4ZSwgMHgwMDdmLCAweDA5MDQsIDB4NDY1OSwgMHg5MDhlLCAweDAwODAsIDB4MDkwNCwgMHg0NjU5LAorCTB4YjgwMCwgMHhkMDhjLCAweDE5MDQsIDB4NDY1OSwgMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLAorCTB4YTg2YSwgMHgwODBjLCAweGQwZWMsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNmJmLAorCTB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTQzZCwgMHgwMDA1LCAweDA4MGMsIDB4NGM3NCwgMHgwOTA0LAorCTB4MzZjMiwgMHgwODA0LCAweDQ2NTksIDB4MDgwYywgMHgzNDdkLCAweDAxMDgsIDB4MDAwNSwgMHgyMDA5LAorCTB4MTgzNCwgMHgyMTBjLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNmJmLAorCTB4MDgwYywgMHg1ODU0LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsIDB4MzZiZiwgMHgwODBjLAorCTB4NmMwOSwgMHgwMTIwLCAweDIwMDksIDB4MDAwOCwgMHgwODA0LCAweDM2YmYsIDB4Yjg5YywgMHhkMGE0LAorCTB4MTExOCwgMHhkMGFjLCAweDE5MDQsIDB4NDY1OSwgMHg5MDA2LCAweGE4NjYsIDB4YTgzMiwgMHhhODY4LAorCTB4YzBmZCwgMHhhODZhLCAweDA4MGMsIDB4ZDE1NCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LAorCTB4MzZiZiwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1NDc2LCAweDAwMDUsIDB4YTgzMCwgMHg5MDg2LAorCTB4MDEwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDU3OGUsIDB4MDgwYywgMHg0Yzc0LAorCTB4MDkwNCwgMHgzNmMyLCAweDA4MDQsIDB4NTQwZiwgMHg4MWZmLCAweDIwMDksIDB4MDAwMSwgMHgxOTA0LAorCTB4MzZiZiwgMHgwODBjLCAweDU4NTQsIDB4MjAwOSwgMHgwMDA3LCAweDE5MDQsIDB4MzZiZiwgMHgwODBjLAorCTB4NmMwOSwgMHgwMTIwLCAweDIwMDksIDB4MDAwOCwgMHgwODA0LCAweDM2YmYsIDB4MDgwYywgMHg0Yzc0LAorCTB4MDkwNCwgMHgzNmMyLCAweDA4MGMsIDB4NmMxMSwgMHgyMDA5LCAweDAwMDksIDB4MTkwNCwgMHgzNmJmLAorCTB4MDgwYywgMHg0YzQxLCAweDIwMDksIDB4MDAwMiwgMHgwOTA0LCAweDM2YmYsIDB4OTAwNiwgMHhhODY2LAogCTB4YTgzMiwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHg3OTg4LCAweGE5NWEsIDB4OTE5NCwgMHhmZDAwLAogCTB4OTE4YywgMHgwMGZmLCAweDkwMDYsIDB4ODJmZiwgMHgxMTI4LCAweGMwZWQsIDB4YTk1MiwgMHg3OThjLAotCTB4YTk1NiwgMHgwMDM4LCAweDkyOGUsIDB4MDEwMCwgMHgxOTA0LCAweDM2YTgsIDB4YzBlNSwgMHhhOTUyLAotCTB4YTk1NiwgMHhhODNlLCAweDA4MGMsIDB4ZDBjZiwgMHgyMDA5LCAweDAwMDMsIDB4MDkwNCwgMHgzNmE1LAotCTB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTRhZCwgMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLAotCTB4MjAwOSwgMHgwMDA0LCAweDA5MDQsIDB4MzZhNSwgMHgwODA0LCAweDM2NzMsIDB4N2FhOCwgMHg5Mjg0LAotCTB4YzAwMCwgMHgwMTQ4LCAweGQyZWMsIDB4MDFhMCwgMHgwODBjLCAweDU4MzQsIDB4MTE4OCwgMHgyMDA5LAotCTB4MDAxNCwgMHgwODA0LCAweDM2YTUsIDB4ZDJkYywgMHgxNTc4LCAweDgxZmYsIDB4MjAwOSwgMHgwMDAxLAotCTB4MTkwNCwgMHgzNmE1LCAweDA4MGMsIDB4NTgzNCwgMHgyMDA5LCAweDAwMDcsIDB4MTkwNCwgMHgzNmE1LAotCTB4ZDJmNCwgMHgwMTM4LCAweDkyODQsIDB4NTAwMCwgMHhjMGQ1LCAweDA4MGMsIDB4NTdmYSwgMHgwODA0LAotCTB4MzY3MywgMHhkMmZjLCAweDAxNjAsIDB4MDgwYywgMHg0YmZiLCAweDA5MDQsIDB4MzZhOCwgMHg3OTg0LAotCTB4OTI4NCwgMHg5MDAwLCAweGMwZDUsIDB4MDgwYywgMHg1N2M5LCAweDA4MDQsIDB4MzY3MywgMHgwODBjLAotCTB4NGJmYiwgMHgwOTA0LCAweDM2YTgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LAotCTB4MjAwOSwgMHgwMDA5LCAweDE5MDQsIDB4NTU5YywgMHgwODBjLCAweDRiYzgsIDB4MjAwOSwgMHgwMDAyLAotCTB4MDkwNCwgMHg1NTljLCAweGE4NWMsIDB4OTA4MCwgMHgwMDFiLCAweGFmNjAsIDB4MjAwOSwgMHgwMDA4LAotCTB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgwODBjLCAweDRjMTEsIDB4NzAxZiwgMHg1NTA5LAorCTB4YTk1NiwgMHgwMDM4LCAweDkyOGUsIDB4MDEwMCwgMHgxOTA0LCAweDM2YzIsIDB4YzBlNSwgMHhhOTUyLAorCTB4YTk1NiwgMHhhODNlLCAweDA4MGMsIDB4ZDNiNywgMHgyMDA5LCAweDAwMDMsIDB4MDkwNCwgMHgzNmJmLAorCTB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTRjZCwgMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLAorCTB4MjAwOSwgMHgwMDA0LCAweDA5MDQsIDB4MzZiZiwgMHgwODA0LCAweDM2OGQsIDB4N2FhOCwgMHg5Mjg0LAorCTB4YzAwMCwgMHgwMTQ4LCAweGQyZWMsIDB4MDFhMCwgMHgwODBjLCAweDU4NTQsIDB4MTE4OCwgMHgyMDA5LAorCTB4MDAxNCwgMHgwODA0LCAweDM2YmYsIDB4ZDJkYywgMHgxNTc4LCAweDgxZmYsIDB4MjAwOSwgMHgwMDAxLAorCTB4MTkwNCwgMHgzNmJmLCAweDA4MGMsIDB4NTg1NCwgMHgyMDA5LCAweDAwMDcsIDB4MTkwNCwgMHgzNmJmLAorCTB4ZDJmNCwgMHgwMTM4LCAweDkyODQsIDB4NTAwMCwgMHhjMGQ1LCAweDA4MGMsIDB4NTgxYSwgMHgwODA0LAorCTB4MzY4ZCwgMHhkMmZjLCAweDAxNjAsIDB4MDgwYywgMHg0Yzc0LCAweDA5MDQsIDB4MzZjMiwgMHg3OTg0LAorCTB4OTI4NCwgMHg5MDAwLCAweGMwZDUsIDB4MDgwYywgMHg1N2U5LCAweDA4MDQsIDB4MzY4ZCwgMHgwODBjLAorCTB4NGM3NCwgMHgwOTA0LCAweDM2YzIsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LAorCTB4MjAwOSwgMHgwMDA5LCAweDE5MDQsIDB4NTViYywgMHgwODBjLCAweDRjNDEsIDB4MjAwOSwgMHgwMDAyLAorCTB4MDkwNCwgMHg1NWJjLCAweGE4NWMsIDB4OTA4MCwgMHgwMDFiLCAweGFmNjAsIDB4MjAwOSwgMHgwMDA4LAorCTB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgwODBjLCAweDRjOGEsIDB4NzAxZiwgMHg1NTI5LAogCTB4MDAwNSwgMHhhODZjLCAweDkwODYsIDB4MDUwMCwgMHgxMTM4LCAweGE4NzAsIDB4OTAwNSwgMHgxMTIwLAotCTB4YTg3NCwgMHg5MDg0LCAweGZmMDAsIDB4MDExMCwgMHgxOTA0LCAweDM2YTgsIDB4YTg2NiwgMHhhODMyLAotCTB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MDgwYywgMHg0YmZiLCAweDExMTAsIDB4MDgwNCwgMHgzNmE4LAotCTB4MjAwOSwgMHgwMDQzLCAweDA4MGMsIDB4ZDEzYiwgMHgyMDA5LCAweDAwMDMsIDB4MDkwNCwgMHg1NTljLAotCTB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTUyZCwgMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLAotCTB4MjAwOSwgMHgwMDA0LCAweDA5MDQsIDB4NTU5YywgMHg3OTg0LCAweDdhYTgsIDB4OTI4NCwgMHgxMDAwLAotCTB4YzBkNSwgMHgwODBjLCAweDU3YzksIDB4MDgwNCwgMHgzNjczLCAweDAwYzYsIDB4YWFiMCwgMHg5Mjg0LAotCTB4YzAwMCwgMHgwMTQ4LCAweGQyZWMsIDB4MDE3MCwgMHgwODBjLCAweDU4MzQsIDB4MTE1OCwgMHgyMDA5LAotCTB4MDAxNCwgMHgwODA0LCAweDU1OGIsIDB4MjA2MSwgMHgxODAwLCAweDA4MGMsIDB4NTgzNCwgMHgyMDA5LAorCTB4YTg3NCwgMHg5MDg0LCAweGZmMDAsIDB4MDExMCwgMHgxOTA0LCAweDM2YzIsIDB4YTg2NiwgMHhhODMyLAorCTB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MDgwYywgMHg0Yzc0LCAweDExMTAsIDB4MDgwNCwgMHgzNmMyLAorCTB4MjAwOSwgMHgwMDQzLCAweDA4MGMsIDB4ZDQyMywgMHgyMDA5LCAweDAwMDMsIDB4MDkwNCwgMHg1NWJjLAorCTB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTU0ZCwgMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLAorCTB4MjAwOSwgMHgwMDA0LCAweDA5MDQsIDB4NTViYywgMHg3OTg0LCAweDdhYTgsIDB4OTI4NCwgMHgxMDAwLAorCTB4YzBkNSwgMHgwODBjLCAweDU3ZTksIDB4MDgwNCwgMHgzNjhkLCAweDAwYzYsIDB4YWFiMCwgMHg5Mjg0LAorCTB4YzAwMCwgMHgwMTQ4LCAweGQyZWMsIDB4MDE3MCwgMHgwODBjLCAweDU4NTQsIDB4MTE1OCwgMHgyMDA5LAorCTB4MDAxNCwgMHgwODA0LCAweDU1YWIsIDB4MjA2MSwgMHgxODAwLCAweDA4MGMsIDB4NTg1NCwgMHgyMDA5LAogCTB4MDAwNywgMHgxNWM4LCAweGQyZjQsIDB4MDEzMCwgMHg5Mjg0LCAweDUwMDAsIDB4YzBkNSwgMHgwODBjLAotCTB4NTdmYSwgMHgwMDU4LCAweGQyZmMsIDB4MDE4MCwgMHgwODBjLCAweDRiZjksIDB4MDU5MCwgMHhhOTk4LAotCTB4OTI4NCwgMHg5MDAwLCAweGMwZDUsIDB4MDgwYywgMHg1N2M5LCAweGE4N2IsIDB4MDAwMCwgMHhhODgzLAotCTB4MDAwMCwgMHhhODk3LCAweDQwMDAsIDB4MDQzOCwgMHgwODBjLCAweDRiZjksIDB4MDUxMCwgMHgwODBjLAotCTB4NmJjZCwgMHgyMDA5LCAweDAwMDksIDB4MTFiOCwgMHhhOGM0LCAweDkwODYsIDB4MDUwMCwgMHgxMWM4LAorCTB4NTgxYSwgMHgwMDU4LCAweGQyZmMsIDB4MDE4MCwgMHgwODBjLCAweDRjNzIsIDB4MDU5MCwgMHhhOTk4LAorCTB4OTI4NCwgMHg5MDAwLCAweGMwZDUsIDB4MDgwYywgMHg1N2U5LCAweGE4N2IsIDB4MDAwMCwgMHhhODgzLAorCTB4MDAwMCwgMHhhODk3LCAweDQwMDAsIDB4MDQzOCwgMHgwODBjLCAweDRjNzIsIDB4MDUxMCwgMHgwODBjLAorCTB4NmMxMSwgMHgyMDA5LCAweDAwMDksIDB4MTFiOCwgMHhhOGM0LCAweDkwODYsIDB4MDUwMCwgMHgxMWM4LAogCTB4YThjOCwgMHg5MDA1LCAweDExYjAsIDB4YThjYywgMHg5MDg0LCAweGZmMDAsIDB4MTE5MCwgMHgwODBjLAotCTB4NGJmOSwgMHgxMTA4LCAweDAwNzAsIDB4MjAwOSwgMHgwMDRiLCAweDA4MGMsIDB4ZDEzYiwgMHgyMDA5LAorCTB4NGM3MiwgMHgxMTA4LCAweDAwNzAsIDB4MjAwOSwgMHgwMDRiLCAweDA4MGMsIDB4ZDQyMywgMHgyMDA5LAogCTB4MDAwMywgMHgwMTA4LCAweDAwNzgsIDB4MDQzMSwgMHgxOWMwLCAweGE4OTcsIDB4NDAwNSwgMHhhOTlhLAogCTB4MDAxMCwgMHhhODk3LCAweDQwMDYsIDB4OTAwZSwgMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLAotCTB4MDBjZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNlMCwgMHg3YWE4LCAweGQyZGMsIDB4MDkwNCwgMHgzNmE1LAotCTB4MDAxNiwgMHg3OTg0LCAweDkyODQsIDB4MTAwMCwgMHhjMGZkLCAweDA4MGMsIDB4NTdjOSwgMHgwMDFlLAotCTB4MTkwNCwgMHgzNmE1LCAweDA4MDQsIDB4MzY3MywgMHgwMGY2LCAweDJkNzgsIDB4YWFiMCwgMHgwMDIxLAorCTB4MDBjZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNlMCwgMHg3YWE4LCAweGQyZGMsIDB4MDkwNCwgMHgzNmJmLAorCTB4MDAxNiwgMHg3OTg0LCAweDkyODQsIDB4MTAwMCwgMHhjMGZkLCAweDA4MGMsIDB4NTdlOSwgMHgwMDFlLAorCTB4MTkwNCwgMHgzNmJmLCAweDA4MDQsIDB4MzY4ZCwgMHgwMGY2LCAweDJkNzgsIDB4YWFiMCwgMHgwMDIxLAogCTB4MDBmZSwgMHgwMDA1LCAweGFhYjAsIDB4YzJkNSwgMHhkMmRjLCAweDAxNTAsIDB4MDAxNiwgMHhhOTk4LAotCTB4OTI4NCwgMHgxNDAwLCAweGMwZmQsIDB4MDgwYywgMHg1N2M5LCAweDAwMWUsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDAwNSwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsIDB4MzZhNSwgMHgwODBjLAotCTB4NTgzNCwgMHgwMTIwLCAweDIwMDksIDB4MDAwNywgMHgwODA0LCAweDM2YTUsIDB4Nzk4NCwgMHg3ZWE4LAotCTB4OTZiNCwgMHgwMGZmLCAweDA4MGMsIDB4Njc4MywgMHgxOTA0LCAweDM2YTgsIDB4OTE4NiwgMHgwMDdmLAotCTB4MDEzOCwgMHgwODBjLCAweDZiY2QsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDksIDB4MDgwNCwgMHgzNmE1LAotCTB4MDgwYywgMHg0YmM4LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzZhNSwgMHhhODY3LAorCTB4OTI4NCwgMHgxNDAwLCAweGMwZmQsIDB4MDgwYywgMHg1N2U5LCAweDAwMWUsIDB4OTA4NSwgMHgwMDAxLAorCTB4MDAwNSwgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsIDB4MzZiZiwgMHgwODBjLAorCTB4NTg1NCwgMHgwMTIwLCAweDIwMDksIDB4MDAwNywgMHgwODA0LCAweDM2YmYsIDB4Nzk4NCwgMHg3ZWE4LAorCTB4OTZiNCwgMHgwMGZmLCAweDA4MGMsIDB4NjdiNCwgMHgxOTA0LCAweDM2YzIsIDB4OTE4NiwgMHgwMDdmLAorCTB4MDEzOCwgMHgwODBjLCAweDZjMTEsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDksIDB4MDgwNCwgMHgzNmJmLAorCTB4MDgwYywgMHg0YzQxLCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzZiZiwgMHhhODY3LAogCTB4MDAwMCwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHgyMDAxLCAweDAxMDAsIDB4ODAwNywgMHhhODBhLAotCTB4MDgwYywgMHhjZTFlLCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsIDB4MzZhNSwgMHg3MDA3LAotCTB4MDAwMywgMHg3MDFmLCAweDU1ZmMsIDB4MDAwNSwgMHhhODA4LCAweDgwMDcsIDB4OTA4NiwgMHgwMTAwLAotCTB4MTEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgzNmE1LCAweGE4ZTAsIDB4YTg2NiwgMHhhODEwLAorCTB4MDgwYywgMHhkMTA2LCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsIDB4MzZiZiwgMHg3MDA3LAorCTB4MDAwMywgMHg3MDFmLCAweDU2MWMsIDB4MDAwNSwgMHhhODA4LCAweDgwMDcsIDB4OTA4NiwgMHgwMTAwLAorCTB4MTEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHgzNmJmLCAweGE4ZTAsIDB4YTg2NiwgMHhhODEwLAogCTB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4ODAwYywgMHhhODE0LCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLAogCTB4ODAwNCwgMHg5MDgwLCAweDAwMDIsIDB4OTEwOCwgMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLAogCTB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDA0LCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLAotCTB4N2Q5OCwgMHgwODA0LCAweDRjMTQsIDB4MDgwYywgMHg0YmM4LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLAotCTB4MDgwNCwgMHgzNmE1LCAweDc5ODQsIDB4OTE5NCwgMHhmZjAwLCAweDkxOGMsIDB4MDBmZiwgMHg4MjE3LAotCTB4ODJmZiwgMHgxMTE4LCAweDcwMjMsIDB4MTliNSwgMHgwMDQwLCAweDkyYzYsIDB4MDAwMSwgMHgxMTE4LAotCTB4NzAyMywgMHgxOWNmLCAweDAwMTAsIDB4MDgwNCwgMHgzNmE4LCAweDIwMDksIDB4MDAxYSwgMHg3YThjLAorCTB4N2Q5OCwgMHgwODA0LCAweDRjOGQsIDB4MDgwYywgMHg0YzQxLCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLAorCTB4MDgwNCwgMHgzNmJmLCAweDc5ODQsIDB4OTE5NCwgMHhmZjAwLCAweDkxOGMsIDB4MDBmZiwgMHg4MjE3LAorCTB4ODJmZiwgMHgxMTE4LCAweDcwMjMsIDB4MTliNCwgMHgwMDQwLCAweDkyYzYsIDB4MDAwMSwgMHgxMTE4LAorCTB4NzAyMywgMHgxOWNlLCAweDAwMTAsIDB4MDgwNCwgMHgzNmMyLCAweDIwMDksIDB4MDAxYSwgMHg3YThjLAogCTB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4YWY2MCwgMHgwODBjLAotCTB4NGMxMSwgMHg3MDFmLCAweDU2NGMsIDB4MDAwNSwgMHgyMDAxLCAweDE4MmUsIDB4MjAwMywgMHgwMDAxLAorCTB4NGM4YSwgMHg3MDFmLCAweDU2NmMsIDB4MDAwNSwgMHgyMDAxLCAweDE4MmUsIDB4MjAwMywgMHgwMDAxLAogCTB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4MjA5OCwgMHhhODYwLCAweDIwZTAsIDB4MjBhOSwgMHgwMDFhLAotCTB4NzAyMCwgMHgyMGEwLCAweDIwZTksIDB4MDAwMSwgMHg0MDAzLCAweDA4MDQsIDB4MzY3MywgMHgwODBjLAotCTB4NGJjOCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YTUsIDB4Nzk4NCwgMHg5MTk0LAotCTB4ZmYwMCwgMHg5MThjLCAweDAwZmYsIDB4ODIxNywgMHg4MmZmLCAweDExMTgsIDB4MjA5OSwgMHgxOWI1LAotCTB4MDA0MCwgMHg5MmM2LCAweDAwMDEsIDB4MTExOCwgMHgyMDk5LCAweDE5Y2YsIDB4MDAxMCwgMHgwODA0LAotCTB4MzZhOCwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgyMGEwLCAweGE4NjAsIDB4MjBlOCwgMHgyMGE5LAorCTB4NzAyMCwgMHgyMGEwLCAweDIwZTksIDB4MDAwMSwgMHg0MDAzLCAweDA4MDQsIDB4MzY4ZCwgMHgwODBjLAorCTB4NGM0MSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YmYsIDB4Nzk4NCwgMHg5MTk0LAorCTB4ZmYwMCwgMHg5MThjLCAweDAwZmYsIDB4ODIxNywgMHg4MmZmLCAweDExMTgsIDB4MjA5OSwgMHgxOWI0LAorCTB4MDA0MCwgMHg5MmM2LCAweDAwMDEsIDB4MTExOCwgMHgyMDk5LCAweDE5Y2UsIDB4MDAxMCwgMHgwODA0LAorCTB4MzZjMiwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgyMGEwLCAweGE4NjAsIDB4MjBlOCwgMHgyMGE5LAogCTB4MDAxYSwgMHgyMGUxLCAweDAwMDEsIDB4NDAwMywgMHgyMDA5LCAweDAwMWEsIDB4N2E4YywgMHg3Yjg4LAotCTB4N2M5YywgMHg3ZDk4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweGFmNjAsIDB4MDgwNCwgMHg0YzE0LAotCTB4Nzg4NCwgMHg5MDhhLCAweDEwMDAsIDB4MWEwNCwgMHgzNmE4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHgwMGM2LCAweDIwNjEsIDB4MWEwNSwgMHg2MTRhLAotCTB4MDBjZSwgMHgwMTJlLCAweDA4MDQsIDB4MzY3MywgMHgwMGM2LCAweDA4MGMsIDB4NzY5ZCwgMHgxMTYwLAotCTB4MDgwYywgMHg3OTlmLCAweDA4MGMsIDB4NjE3OCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHg3NmUxLAotCTB4MDgwYywgMHg3NWNjLCAweDA4MGMsIDB4MGQ3OSwgMHgyMDYxLCAweDE4MDAsIDB4NjAzMCwgMHhjMDlkLAotCTB4NjAzMiwgMHgwODBjLCAweDYwMzMsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MjAwMSwgMHgxODAwLAotCTB4MjAwNCwgMHg5MDhlLCAweDAwMDAsIDB4MDkwNCwgMHgzNmE1LCAweDc4ODQsIDB4OTAwNSwgMHgwMTg4LAotCTB4Nzg4OCwgMHgyMDYxLCAweDE5OWQsIDB4MmMwYywgMHgyMDYyLCAweDA4MGMsIDB4MmE3MCwgMHgwMWEwLAotCTB4MDgwYywgMHgyYTc4LCAweDAxODgsIDB4MDgwYywgMHgyYTgwLCAweDAxNzAsIDB4MjE2MiwgMHgwODA0LAotCTB4MzZhOCwgMHgyMDYxLCAweDAxMDAsIDB4NjAzOCwgMHg5MDg2LCAweDAwMDcsIDB4MTExOCwgMHgyMDA5LAorCTB4N2M5YywgMHg3ZDk4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweGFmNjAsIDB4MDgwNCwgMHg0YzhkLAorCTB4Nzg4NCwgMHg5MDhhLCAweDEwMDAsIDB4MWEwNCwgMHgzNmMyLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHgwMGM2LCAweDIwNjEsIDB4MWEwNCwgMHg2MTRhLAorCTB4MDBjZSwgMHgwMTJlLCAweDA4MDQsIDB4MzY4ZCwgMHgwMGM2LCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTYwLAorCTB4MDgwYywgMHg3YWI2LCAweDA4MGMsIDB4NjE5ZCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHg3N2UyLAorCTB4MDgwYywgMHg3NmNkLCAweDA4MGMsIDB4MGQ4NSwgMHgyMDYxLCAweDE4MDAsIDB4NjAzMCwgMHhjMDlkLAorCTB4NjAzMiwgMHgwODBjLCAweDYwNTgsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MjAwMSwgMHgxODAwLAorCTB4MjAwNCwgMHg5MDhlLCAweDAwMDAsIDB4MDkwNCwgMHgzNmJmLCAweDc4ODQsIDB4OTAwNSwgMHgwMTg4LAorCTB4Nzg4OCwgMHgyMDYxLCAweDE5OWMsIDB4MmMwYywgMHgyMDYyLCAweDA4MGMsIDB4MmE2NywgMHgwMWEwLAorCTB4MDgwYywgMHgyYTZmLCAweDAxODgsIDB4MDgwYywgMHgyYTc3LCAweDAxNzAsIDB4MjE2MiwgMHgwODA0LAorCTB4MzZjMiwgMHgyMDYxLCAweDAxMDAsIDB4NjAzOCwgMHg5MDg2LCAweDAwMDcsIDB4MTExOCwgMHgyMDA5LAogCTB4MDAwMSwgMHgwMDEwLCAweDIwMDksIDB4MDAwMCwgMHg3ODg0LCAweDkwODYsIDB4MDAwMiwgMHgxNWE4LAotCTB4MjA2MSwgMHgwMTAwLCAweDYwMjgsIDB4YzA5YywgMHg2MDJhLCAweDA4MGMsIDB4YWFmNywgMHgwMDI2LAotCTB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4YTQyNiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHhhNDMwLAotCTB4MDAyZSwgMHgwODBjLCAweGEzMTEsIDB4MDAzNiwgMHg5MDFlLCAweDA4MGMsIDB4YTM5MSwgMHgwMDNlLAotCTB4MDgwYywgMHhhYjEzLCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweGViZTgsIDB4MDgwYywgMHhlYzAzLAotCTB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4NzZlMSwgMHg5MDA2LCAweDA4MGMsIDB4MmFhMiwgMHgyMDAxLAotCTB4MTgwMCwgMHgyMDAzLCAweDAwMDQsIDB4MjAwMSwgMHgxOWE5LCAweDIwMDMsIDB4MDAwMCwgMHgwMDI2LAotCTB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4MmFkYywgMHgwMDJlLCAweDAwY2UsIDB4MDgwNCwgMHgzNjczLAotCTB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LCAweDM2YTUsIDB4MDgwYywgMHg1ODM0LAotCTB4MDEyMCwgMHgyMDA5LCAweDAwMDcsIDB4MDgwNCwgMHgzNmE1LCAweDc5ODQsIDB4N2VhOCwgMHg5NmI0LAotCTB4MDBmZiwgMHgwODBjLCAweDY3ODMsIDB4MTkwNCwgMHgzNmE4LCAweDkxODYsIDB4MDA3ZiwgMHgwMTM4LAotCTB4MDgwYywgMHg2YmNkLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA5LCAweDA4MDQsIDB4MzZhNSwgMHgwODBjLAotCTB4NGJjOCwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YTUsIDB4YTg2NywgMHgwMDAwLAotCTB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MDgwYywgMHhjZTIxLCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLAotCTB4MDgwNCwgMHgzNmE1LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDU3NTcsIDB4MDAwNSwgMHhhODMwLAotCTB4OTA4NiwgMHgwMTAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsIDB4MzZhNSwgMHhhOGUwLAorCTB4MjA2MSwgMHgwMTAwLCAweDYwMjgsIDB4YzA5YywgMHg2MDJhLCAweDA4MGMsIDB4YWNmYywgMHgwMDI2LAorCTB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4YTYyYiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHhhNjM1LAorCTB4MDAyZSwgMHgwODBjLCAweGE1MTYsIDB4MDAzNiwgMHg5MDFlLCAweDA4MGMsIDB4YTU5NiwgMHgwMDNlLAorCTB4MDgwYywgMHhhZDE4LCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweGVlZDksIDB4MDgwYywgMHhlZWY0LAorCTB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4NzdlMiwgMHg5MDA2LCAweDA4MGMsIDB4MmE5OSwgMHgyMDAxLAorCTB4MTgwMCwgMHgyMDAzLCAweDAwMDQsIDB4MjAwMSwgMHgxOWE4LCAweDIwMDMsIDB4MDAwMCwgMHgwMDI2LAorCTB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4MmFkMywgMHgwMDJlLCAweDAwY2UsIDB4MDgwNCwgMHgzNjhkLAorCTB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LCAweDM2YmYsIDB4MDgwYywgMHg1ODU0LAorCTB4MDEyMCwgMHgyMDA5LCAweDAwMDcsIDB4MDgwNCwgMHgzNmJmLCAweDc5ODQsIDB4N2VhOCwgMHg5NmI0LAorCTB4MDBmZiwgMHgwODBjLCAweDY3YjQsIDB4MTkwNCwgMHgzNmMyLCAweDkxODYsIDB4MDA3ZiwgMHgwMTM4LAorCTB4MDgwYywgMHg2YzExLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA5LCAweDA4MDQsIDB4MzZiZiwgMHgwODBjLAorCTB4NGM0MSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM2YmYsIDB4YTg2NywgMHgwMDAwLAorCTB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MDgwYywgMHhkMTA5LCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLAorCTB4MDgwNCwgMHgzNmJmLCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDU3NzcsIDB4MDAwNSwgMHhhODMwLAorCTB4OTA4NiwgMHgwMTAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsIDB4MzZiZiwgMHhhOGUwLAogCTB4YTg2NiwgMHhhODM0LCAweDgwMDcsIDB4ODAwYywgMHhhODVjLCAweDkwODAsIDB4MDAwYywgMHg3YThjLAotCTB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4YWY2MCwgMHgwODA0LCAweDRjMTQsIDB4YTg5OCwgMHg5MDg2LAotCTB4MDAwZCwgMHgxOTA0LCAweDM2YTUsIDB4MjAyMSwgMHg0MDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MGUwNCwgMHg1NzdiLCAweDAwMTAsIDB4MDEyZSwgMHgwY2MwLCAweDdjMzYsIDB4OTQ4NiwgMHg0MDAwLAorCTB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4YWY2MCwgMHgwODA0LCAweDRjOGQsIDB4YTg5OCwgMHg5MDg2LAorCTB4MDAwZCwgMHgxOTA0LCAweDM2YmYsIDB4MjAyMSwgMHg0MDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MGUwNCwgMHg1NzliLCAweDAwMTAsIDB4MDEyZSwgMHgwY2MwLCAweDdjMzYsIDB4OTQ4NiwgMHg0MDAwLAogCTB4MDExOCwgMHg3ODMzLCAweDAwMTEsIDB4MDAxMCwgMHg3ODMzLCAweDAwMTAsIDB4Nzg4MywgMHg0MDA1LAotCTB4YTk5OCwgMHg3OTg2LCAweGE5YTQsIDB4Nzk5YSwgMHhhOWE4LCAweDc5OWUsIDB4MDgwYywgMHg0YzA0LAotCTB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWY0LAorCTB4YTk5OCwgMHg3OTg2LCAweGE5YTQsIDB4Nzk5YSwgMHhhOWE4LCAweDc5OWUsIDB4MDgwYywgMHg0YzdkLAorCTB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMjAwLAogCTB4NzAwNywgMHgwMDAxLCAweDIwOTEsIDB4NTAwMCwgMHg3MDBmLCAweDAwMDAsIDB4MDEyZSwgMHgwMDA1LAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwgMHgyMDYxLCAweDFhMDUsIDB4Nzk4NCwgMHg2MTVhLAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjNiwgMHgyMDYxLCAweDFhMDQsIDB4Nzk4NCwgMHg2MTVhLAogCTB4NjE1NiwgMHg2MDVmLCAweDAwMDAsIDB4NjA1MywgMHgwMDA5LCAweDc4OTgsIDB4NjA3MiwgMHg3ODljLAotCTB4NjA2ZSwgMHg3ODg4LCAweDYwNmEsIDB4Nzg4YywgMHg2MDY2LCAweDIwMDEsIDB4MWExNSwgMHgyMDQ0LAotCTB4MjAwMSwgMHgxYTFjLCAweGEwNzYsIDB4YTA2MCwgMHhhMDcyLCAweGEwN2IsIDB4MDAwMSwgMHhhMDdmLAorCTB4NjA2ZSwgMHg3ODg4LCAweDYwNmEsIDB4Nzg4YywgMHg2MDY2LCAweDIwMDEsIDB4MWExNCwgMHgyMDQ0LAorCTB4MjAwMSwgMHgxYTFiLCAweGEwNzYsIDB4YTA2MCwgMHhhMDcyLCAweGEwN2IsIDB4MDAwMSwgMHhhMDdmLAogCTB4MDAwMiwgMHhhMDZiLCAweDAwMDAsIDB4YTA5ZiwgMHgwMDAwLCAweDAwY2UsIDB4MDEyZSwgMHgwODA0LAotCTB4MzY3MywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGI2LCAweDAwYzYsIDB4OTBlNCwgMHhjMDAwLAorCTB4MzY4ZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGI2LCAweDAwYzYsIDB4OTBlNCwgMHhjMDAwLAogCTB4MDE5OCwgMHgwMDA2LCAweGQwZDQsIDB4MDE2MCwgMHgwMDM2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLAotCTB4YWFmNywgMHgwMTA2LCAweDA4MGMsIDB4MzQyOCwgMHgwMTBlLCAweDA5MGMsIDB4YWIxMywgMHgwMDNlLAotCTB4MDgwYywgMHhjYzgwLCAweDAwMGUsIDB4MTE5OCwgMHhkMGU0LCAweDAxNjAsIDB4OTE4MCwgMHgxMDAwLAotCTB4MjAwNCwgMHg5MDVkLCAweDAxNjAsIDB4MDgwYywgMHg2MTkyLCAweDA4MGMsIDB4YWU4MCwgMHgwMTEwLAorCTB4YWNmYywgMHgwMTA2LCAweDA4MGMsIDB4MzQ0MiwgMHgwMTBlLCAweDA5MGMsIDB4YWQxOCwgMHgwMDNlLAorCTB4MDgwYywgMHhjZjY4LCAweDAwMGUsIDB4MTE5OCwgMHhkMGU0LCAweDAxNjAsIDB4OTE4MCwgMHgxMDAwLAorCTB4MjAwNCwgMHg5MDVkLCAweDAxNjAsIDB4MDgwYywgMHg2MWI3LCAweDA4MGMsIDB4YjA5NCwgMHgwMTEwLAogCTB4YjgxNywgMHgwMDAwLCAweDkwMDYsIDB4MDBjZSwgMHgwMGJlLCAweDAxMmUsIDB4MDAwNSwgMHg5MDg1LAogCTB4MDAwMSwgMHgwY2M4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAxNTYsIDB4MjAxMCwgMHg5MDBlLAogCTB4MjBhOSwgMHgwODAwLCAweDAwMTYsIDB4OTE4MCwgMHgxMDAwLCAweDIwMDQsIDB4OTAwNSwgMHgwMTg4LAogCTB4OTE4NiwgMHgwMDdlLCAweDAxNzAsIDB4OTE4NiwgMHgwMDdmLCAweDAxNTgsIDB4OTE4NiwgMHgwMDgwLAotCTB4MDE0MCwgMHg5MTg2LCAweDAwZmYsIDB4MDEyOCwgMHgwMDI2LCAweDIyMDAsIDB4MDgwYywgMHg1N2M5LAotCTB4MDAyZSwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHg1ODAyLCAweDAxNWUsIDB4MDEyZSwgMHgwMDA1LAorCTB4MDE0MCwgMHg5MTg2LCAweDAwZmYsIDB4MDEyOCwgMHgwMDI2LCAweDIyMDAsIDB4MDgwYywgMHg1N2U5LAorCTB4MDAyZSwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHg1ODIyLCAweDAxNWUsIDB4MDEyZSwgMHgwMDA1LAogCTB4MjAwMSwgMHgxODQ4LCAweDIwMDQsIDB4MDAwNSwgMHgyMDAxLCAweDE4NjcsIDB4MjAwNCwgMHgwMDA1LAogCTB4MDAwNiwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMGQ0LCAweDAwMGUsIDB4MDAwNSwgMHgyMDAxLAogCTB4MTgwZSwgMHgyMDA0LCAweGQwYjQsIDB4MDAwNSwgMHgyMDAxLCAweDE4MDAsIDB4MjAwNCwgMHg5MDg2LAogCTB4MDAwMywgMHgwMDA1LCAweDAwMTYsIDB4MDBlNiwgMHgyMDcxLCAweDE4OWUsIDB4NzEwOCwgMHg5MTBkLAotCTB4NzEwYSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHg3OWE0LCAweDgxZmYsIDB4MDkwNCwgMHgzNmE4LAotCTB4OTE4MiwgMHgwMDgxLCAweDFhMDQsIDB4MzZhOCwgMHg4MTBjLCAweDAwMTYsIDB4MDgwYywgMHg0YmM4LAotCTB4MDE3MCwgMHgwODBjLCAweDBmNTUsIDB4MjEwMCwgMHgyMjM4LCAweDdkODQsIDB4N2M4OCwgMHg3YjhjLAotCTB4N2E5MCwgMHgwMDFlLCAweDA4MGMsIDB4NGMxMSwgMHg3MDFmLCAweDU4NjQsIDB4MDAwNSwgMHgwMDFlLAotCTB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzZhNSwgMHgyMDc5LCAweDAwMDAsIDB4N2Q5NCwgMHg3Yzk4LAorCTB4NzEwYSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHg3OWE0LCAweDgxZmYsIDB4MDkwNCwgMHgzNmMyLAorCTB4OTE4MiwgMHgwMDgxLCAweDFhMDQsIDB4MzZjMiwgMHg4MTBjLCAweDAwMTYsIDB4MDgwYywgMHg0YzQxLAorCTB4MDE3MCwgMHgwODBjLCAweDBmNjEsIDB4MjEwMCwgMHgyMjM4LCAweDdkODQsIDB4N2M4OCwgMHg3YjhjLAorCTB4N2E5MCwgMHgwMDFlLCAweDA4MGMsIDB4NGM4YSwgMHg3MDFmLCAweDU4ODQsIDB4MDAwNSwgMHgwMDFlLAorCTB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzZiZiwgMHgyMDc5LCAweDAwMDAsIDB4N2Q5NCwgMHg3Yzk4LAogCTB4N2JhOCwgMHg3YWFjLCAweDc5YTQsIDB4ODEwYywgMHgyMDYxLCAweDE4YjgsIDB4MmM0NCwgMHhhNzcwLAotCTB4YTA3NCwgMHgyMDcxLCAweDE4OWUsIDB4MDgwYywgMHg0YzE0LCAweDcwMWYsIDB4NTg3OCwgMHgwMDA1LAorCTB4YTA3NCwgMHgyMDcxLCAweDE4OWUsIDB4MDgwYywgMHg0YzhkLCAweDcwMWYsIDB4NTg5OCwgMHgwMDA1LAogCTB4MjA2MSwgMHgxOGI4LCAweDJjNDQsIDB4MDAxNiwgMHgwMDI2LCAweGEyNzAsIDB4YTE3NCwgMHgwODBjLAotCTB4MGY1ZCwgMHgwMDJlLCAweDAwMWUsIDB4MDgwYywgMHgxMDBhLCAweDkwMDYsIDB4YTgwMiwgMHhhODA2LAotCTB4MDgwNCwgMHgzNjczLCAweDAxMjYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MDFjNiwgMHgwMWQ2LAorCTB4MGY2OSwgMHgwMDJlLCAweDAwMWUsIDB4MDgwYywgMHgxMDE2LCAweDkwMDYsIDB4YTgwMiwgMHhhODA2LAorCTB4MDgwNCwgMHgzNjhkLCAweDAxMjYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4MDFjNiwgMHgwMWQ2LAogCTB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMjAwLAogCTB4MjA3MSwgMHgxODAwLCAweDYwNDQsIDB4ZDBhNCwgMHgxMWU4LCAweGQwODQsIDB4MDExOCwgMHgwODBjLAotCTB4NWEzMywgMHgwMDY4LCAweGQwOGMsIDB4MDExOCwgMHgwODBjLCAweDU5M2MsIDB4MDA0MCwgMHhkMDk0LAotCTB4MDExOCwgMHgwODBjLCAweDU5MGMsIDB4MDAxOCwgMHhkMDljLCAweDAxMDgsIDB4MDA5OSwgMHgwMGZlLAorCTB4NWE1OCwgMHgwMDY4LCAweGQwOGMsIDB4MDExOCwgMHgwODBjLCAweDU5NjEsIDB4MDA0MCwgMHhkMDk0LAorCTB4MDExOCwgMHgwODBjLCAweDU5MzEsIDB4MDAxOCwgMHhkMDljLCAweDAxMDgsIDB4MDA5OSwgMHgwMGZlLAogCTB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDFkZSwgMHgwMWNlLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLAogCTB4MDEyZSwgMHgwMDA1LCAweDAwMTYsIDB4NjEyOCwgMHhkMTljLCAweDExMTAsIDB4YzE5ZCwgMHg2MTJhLAotCTB4MDAxZSwgMHgwYzY4LCAweDAwMDYsIDB4NzA5OCwgMHg5MDA1LCAweDAwMGUsIDB4MDEyMCwgMHg3MDliLAotCTB4MDAwMCwgMHg3MDkzLCAweDAwMDAsIDB4NjI0YywgMHg5Mjg2LCAweGYwZjAsIDB4MTE1MCwgMHg2MDQ4LAotCTB4OTA4NiwgMHhmMGYwLCAweDAxMzAsIDB4NjI0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLAotCTB4MDQ5MCwgMHg5Mjk0LCAweGZmMDAsIDB4OTI5NiwgMHhmNzAwLCAweDAxNzgsIDB4NzEzOCwgMHhkMWE0LAotCTB4MTE2MCwgMHg2MjQwLCAweDkyOTUsIDB4MDEwMCwgMHg2MjQyLCAweDkyOTQsIDB4MDAxMCwgMHgwMTI4LAotCTB4MjAwOSwgMHgwMGY3LCAweDA4MGMsIDB4NjBmNCwgMHgwMGYwLCAweDYwNDAsIDB4OTA4NCwgMHgwMDEwLAotCTB4OTA4NSwgMHgwMTQwLCAweDYwNDIsIDB4NjA0MywgMHgwMDAwLCAweDcwODcsIDB4MDAwMCwgMHg3MGEzLAotCTB4MDAwMSwgMHg3MGM3LCAweDAwMDAsIDB4NzBkZiwgMHgwMDAwLCAweDIwMDksIDB4MWQ4MCwgMHgyMDBiLAotCTB4MDAwMCwgMHg3MDk3LCAweDAwMDAsIDB4NzA4YiwgMHgwMDBmLCAweDIwMDksIDB4MDAwZiwgMHgyMDExLAotCTB4NWZkNiwgMHgwODBjLCAweDg4ZjYsIDB4MDAwNSwgMHgyMDAxLCAweDE4NjksIDB4MjAwNCwgMHhkMDhjLAotCTB4MDExMCwgMHg3MDVmLCAweGZmZmYsIDB4NzA4OCwgMHg5MDA1LCAweDE1MjgsIDB4MjAxMSwgMHg1ZmQ2LAotCTB4MDgwYywgMHg4ODJjLCAweDYwNDAsIDB4OTA5NCwgMHgwMDEwLCAweDkyODUsIDB4MDAyMCwgMHg2MDQyLAotCTB4MjBhOSwgMHgwMGM4LCAweDYwNDQsIDB4ZDA4YywgMHgxMTY4LCAweDFmMDQsIDB4NTkyMiwgMHg2MjQyLAotCTB4NzA5YiwgMHgwMDAwLCAweDYwNDAsIDB4OTA5NCwgMHgwMDEwLCAweDkyODUsIDB4MDA4MCwgMHg2MDQyLAotCTB4NjI0MiwgMHgwMDQ4LCAweDYyNDIsIDB4NzA5YiwgMHgwMDAwLCAweDcwOGYsIDB4MDAwMCwgMHg5MDA2LAotCTB4MDgwYywgMHg2MTdkLCAweDAwMDAsIDB4MDAwNSwgMHg3MDhjLCAweDkwOGEsIDB4MDAwMywgMHgxYTBjLAotCTB4MGQ3OSwgMHgwMDBiLCAweDAwMDUsIDB4NTk0NiwgMHg1OTk3LCAweDVhMzIsIDB4MDBmNiwgMHgwMDE2LAotCTB4NjkwMCwgMHg5MThjLCAweDA4MDAsIDB4NzA4ZiwgMHgwMDAxLCAweDIwMDEsIDB4MDE1ZCwgMHgyMDAzLAotCTB4MDAwMCwgMHg2ODAzLCAweDAwZmMsIDB4MjBhOSwgMHgwMDA0LCAweDY4MDAsIDB4OTA4NCwgMHgwMGZjLAotCTB4MDEyMCwgMHgxZjA0LCAweDU5NTUsIDB4MDgwYywgMHgwZDc5LCAweDY4YTAsIDB4NjhhMiwgMHg2ODljLAotCTB4Njg5ZSwgMHg2ODk4LCAweDY4OWEsIDB4YTAwMSwgMHg5MThkLCAweDE2MDAsIDB4NjkwMiwgMHgwMDFlLAotCTB4NjgzNywgMHgwMDIwLCAweDA4MGMsIDB4NjE1OSwgMHgyMDc5LCAweDFkMDAsIDB4NzgzMywgMHgxMTAxLAotCTB4NzgzNywgMHgwMDAwLCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDE4MDUsIDB4MjBlOSwgMHgwMDAxLAotCTB4MjBhMSwgMHgxZDBlLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLCAweDA4MGMsIDB4YThlYywgMHgyMGUxLAotCTB4MDAwMSwgMHgyMDk5LCAweDFkMDAsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHgyMGE5LAotCTB4MDAxNCwgMHg0MDAzLCAweDYwYzMsIDB4MDAwYywgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHg2MDA3LAotCTB4MDBmZSwgMHg5MDA2LCAweDcwOTIsIDB4NjA0MywgMHgwMDA4LCAweDYwNDIsIDB4MDAwNSwgMHgwMGY2LAotCTB4NzA5MCwgMHg3MDkzLCAweDAwMDAsIDB4OTAyNSwgMHgwOTA0LCAweDVhMGYsIDB4NjAyMCwgMHhkMGI0LAotCTB4MTkwNCwgMHg1YTBkLCAweDcxYTAsIDB4ODFmZiwgMHgwOTA0LCAweDU5ZmIsIDB4OTQ4NiwgMHgwMDBjLAotCTB4MTkwNCwgMHg1YTA4LCAweDk0ODAsIDB4MDAxOCwgMHg4MDA0LCAweDIwYTgsIDB4MDgwYywgMHg2MTUyLAotCTB4MjAxMSwgMHgwMjYwLCAweDIwMTksIDB4MWQwMCwgMHgyMjBjLCAweDIzMDQsIDB4OTEwNiwgMHgxMWU4LAotCTB4ODIxMCwgMHg4MzE4LCAweDFmMDQsIDB4NTliNCwgMHg2MDQzLCAweDAwMDQsIDB4MjA2MSwgMHgwMTQwLAotCTB4NjA1YiwgMHhiYzk0LCAweDYwNWYsIDB4ZjBmMCwgMHgyMDYxLCAweDAxMDAsIDB4NjA0MywgMHgwMDA2LAotCTB4NzA4ZiwgMHgwMDAyLCAweDcwOWIsIDB4MDAwMiwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg1ZmRkLAotCTB4MDgwYywgMHg4OGY2LCAweDA4MGMsIDB4NjE1OSwgMHgwNGMwLCAweDA4MGMsIDB4NjE1MiwgMHgyMDc5LAotCTB4MDI2MCwgMHg3OTMwLCAweDkxOGUsIDB4MTEwMSwgMHgxNTU4LCAweDc4MzQsIDB4OTAwNSwgMHgxNTQwLAotCTB4NzkwMCwgMHg5MThjLCAweDAwZmYsIDB4MTExOCwgMHg3ODA0LCAweDkwMDUsIDB4MDE5MCwgMHgwODBjLAotCTB4NjE1MiwgMHgyMDExLCAweDAyNmUsIDB4MjAxOSwgMHgxODA1LCAweDIwYTksIDB4MDAwNCwgMHgyMjBjLAotCTB4MjMwNCwgMHg5MTAyLCAweDAyMzAsIDB4MTFhMCwgMHg4MjEwLCAweDgzMTgsIDB4MWYwNCwgMHg1OWVmLAotCTB4MDA3OCwgMHg3MGEzLCAweDAwMDAsIDB4MDgwYywgMHg2MTUyLCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LAotCTB4MDI2MCwgMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxZDAwLCAweDIwYTksIDB4MDAxNCwgMHg0MDAzLAotCTB4NjA0MywgMHgwMDA4LCAweDYwNDMsIDB4MDAwMCwgMHgwMDEwLCAweDAwZmUsIDB4MDAwNSwgMHg2MDQwLAotCTB4OTA4NSwgMHgwMTAwLCAweDYwNDIsIDB4NjAyMCwgMHhkMGI0LCAweDFkYjgsIDB4MDgwYywgMHhhOGVjLAotCTB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MWQwMCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLAotCTB4MjBhOSwgMHgwMDE0LCAweDQwMDMsIDB4NjBjMywgMHgwMDBjLCAweDIwMTEsIDB4MTlmNiwgMHgyMDEzLAotCTB4MDAwMCwgMHg3MDkzLCAweDAwMDAsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwODBjLAotCTB4YTA4ZSwgMHgwOGQ4LCAweDAwMDUsIDB4NzA5OCwgMHg5MDhhLCAweDAwMWQsIDB4MWEwYywgMHgwZDc5LAotCTB4MDAwYiwgMHgwMDA1LCAweDVhNjQsIDB4NWE3NywgMHg1YWEwLCAweDVhYzAsIDB4NWFlNiwgMHg1YjE1LAotCTB4NWIzYiwgMHg1YjczLCAweDViOTksIDB4NWJjNywgMHg1YzAyLCAweDVjM2EsIDB4NWM1OCwgMHg1YzgzLAotCTB4NWNhNSwgMHg1Y2MwLCAweDVjY2EsIDB4NWNmZSwgMHg1ZDI0LCAweDVkNTMsIDB4NWQ3OSwgMHg1ZGIxLAotCTB4NWRmNSwgMHg1ZTMyLCAweDVlNTMsIDB4NWVhYywgMHg1ZWNlLCAweDVlZmMsIDB4NWVmYywgMHgwMGM2LAotCTB4MjA2MSwgMHgxODAwLCAweDYwMDMsIDB4MDAwNywgMHgyMDYxLCAweDAxMDAsIDB4NjAwNCwgMHg5MDg0LAotCTB4ZmZmOSwgMHg2MDA2LCAweDAwY2UsIDB4MDAwNSwgMHgyMDYxLCAweDAxNDAsIDB4NjA1YiwgMHhiYzk0LAotCTB4NjA1ZiwgMHhmMGYwLCAweDIwNjEsIDB4MDEwMCwgMHg2MDQzLCAweDAwMDIsIDB4NzA5YiwgMHgwMDAxLAotCTB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NWZkZCwgMHgwODBjLCAweDg4ZjYsIDB4MDAwNSwgMHgwMGY2LAotCTB4NzA5MCwgMHg5MDg2LCAweDAwMTQsIDB4MTUxMCwgMHg2MDQyLCAweDYwMjAsIDB4ZDBiNCwgMHgxMWYwLAotCTB4MDgwYywgMHg2MTUyLCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwMiwgMHgxMWEwLAotCTB4NzgzNCwgMHg5MDA1LCAweDExODgsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBjNCwgMHg5MDA1LAotCTB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4MjAxMSwgMHg1ZmRkLCAweDA4MGMsIDB4ODgyYywgMHg3MDliLAotCTB4MDAxMCwgMHgwODBjLCAweDVjY2EsIDB4MDAxMCwgMHg3MDkzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDBmNiwgMHg3MDliLCAweDAwMDMsIDB4NjA0MywgMHgwMDA0LCAweDIwMTEsIDB4NWZkZCwgMHgwODBjLAotCTB4ODgyYywgMHgwODBjLCAweDYwZDYsIDB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwMiwgMHg3ODM3LAotCTB4MDAwMCwgMHgyMGE5LCAweDAwMDgsIDB4OWY4OCwgMHgwMDBlLCAweDIwMGIsIDB4MDAwMCwgMHg4MTA4LAotCTB4MWYwNCwgMHg1YWI1LCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDYwMDcsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDUwMCwgMHgyMDExLCAweDVmZGQsIDB4MDgwYywgMHg4ODJjLAotCTB4OTA4NiwgMHgwMDE0LCAweDExYjgsIDB4MDgwYywgMHg2MTUyLCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLAotCTB4OTI5NiwgMHgxMTAyLCAweDExNzgsIDB4NzgzNCwgMHg5MDA1LCAweDExNjAsIDB4N2EzOCwgMHhkMmZjLAotCTB4MDEyOCwgMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4NzA5YiwgMHgwMDA0LAotCTB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NjEyZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLAotCTB4MDAwNSwgMHgwODBjLCAweDYwZDYsIDB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwMywgMHg3ODM3LAotCTB4MDAwMCwgMHgwODBjLCAweDYxNTIsIDB4MDgwYywgMHg2MTM1LCAweDExNzAsIDB4NzA4NCwgMHg5MDA1LAotCTB4MTE1OCwgMHg3MTVjLCAweDkxODYsIDB4ZmZmZiwgMHgwMTM4LCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLAotCTB4NWY4YSwgMHgwMTY4LCAweDA4MGMsIDB4NjEwYiwgMHgyMGE5LCAweDAwMDgsIDB4MjBlMSwgMHgwMDAwLAotCTB4MjA5OSwgMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsIDB4NDAwMywgMHg2MGMzLAotCTB4MDAxNCwgMHgwODBjLCAweDYwMDcsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LAotCTB4MDUwMCwgMHgyMDExLCAweDVmZGQsIDB4MDgwYywgMHg4ODJjLCAweDkwODYsIDB4MDAxNCwgMHgxMWI4LAotCTB4MDgwYywgMHg2MTUyLCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwMywgMHgxMTc4LAorCTB4MDAxZSwgMHgwYzY4LCAweDcwMzAsIDB4ZDA5YywgMHgxMTIwLCAweDYwMDQsIDB4OTA4NSwgMHgwMDAyLAorCTB4NjAwNiwgMHg3MDk4LCAweDkwMDUsIDB4MDEyMCwgMHg3MDliLCAweDAwMDAsIDB4NzA5MywgMHgwMDAwLAorCTB4NjI0YywgMHg5Mjg2LCAweGYwZjAsIDB4MTE1MCwgMHg2MDQ4LCAweDkwODYsIDB4ZjBmMCwgMHgwMTMwLAorCTB4NjI0YSwgMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDA0OTAsIDB4OTI5NCwgMHhmZjAwLAorCTB4OTI5NiwgMHhmNzAwLCAweDAxNzgsIDB4NzEzOCwgMHhkMWE0LCAweDExNjAsIDB4NjI0MCwgMHg5Mjk1LAorCTB4MDEwMCwgMHg2MjQyLCAweDkyOTQsIDB4MDAxMCwgMHgwMTI4LCAweDIwMDksIDB4MDBmNywgMHgwODBjLAorCTB4NjExOSwgMHgwMGYwLCAweDYwNDAsIDB4OTA4NCwgMHgwMDEwLCAweDkwODUsIDB4MDE0MCwgMHg2MDQyLAorCTB4NjA0MywgMHgwMDAwLCAweDcwODcsIDB4MDAwMCwgMHg3MGEzLCAweDAwMDEsIDB4NzBjNywgMHgwMDAwLAorCTB4NzBkZiwgMHgwMDAwLCAweDIwMDksIDB4MWQ4MCwgMHgyMDBiLCAweDAwMDAsIDB4NzA5NywgMHgwMDAwLAorCTB4NzA4YiwgMHgwMDBmLCAweDIwMDksIDB4MDAwZiwgMHgyMDExLCAweDVmZmIsIDB4MDgwYywgMHg4YTVkLAorCTB4MDAwNSwgMHgyMDAxLCAweDE4NjksIDB4MjAwNCwgMHhkMDhjLCAweDAxMTAsIDB4NzA1ZiwgMHhmZmZmLAorCTB4NzA4OCwgMHg5MDA1LCAweDE1MjgsIDB4MjAxMSwgMHg1ZmZiLCAweDA4MGMsIDB4ODk5MywgMHg2MDQwLAorCTB4OTA5NCwgMHgwMDEwLCAweDkyODUsIDB4MDAyMCwgMHg2MDQyLCAweDIwYTksIDB4MDBjOCwgMHg2MDQ0LAorCTB4ZDA4YywgMHgxMTY4LCAweDFmMDQsIDB4NTk0NywgMHg2MjQyLCAweDcwOWIsIDB4MDAwMCwgMHg2MDQwLAorCTB4OTA5NCwgMHgwMDEwLCAweDkyODUsIDB4MDA4MCwgMHg2MDQyLCAweDYyNDIsIDB4MDA0OCwgMHg2MjQyLAorCTB4NzA5YiwgMHgwMDAwLCAweDcwOGYsIDB4MDAwMCwgMHg5MDA2LCAweDA4MGMsIDB4NjFhMiwgMHgwMDAwLAorCTB4MDAwNSwgMHg3MDhjLCAweDkwOGEsIDB4MDAwMywgMHgxYTBjLCAweDBkODUsIDB4MDAwYiwgMHgwMDA1LAorCTB4NTk2YiwgMHg1OWJjLCAweDVhNTcsIDB4MDBmNiwgMHgwMDE2LCAweDY5MDAsIDB4OTE4YywgMHgwODAwLAorCTB4NzA4ZiwgMHgwMDAxLCAweDIwMDEsIDB4MDE1ZCwgMHgyMDAzLCAweDAwMDAsIDB4NjgwMywgMHgwMGZjLAorCTB4MjBhOSwgMHgwMDA0LCAweDY4MDAsIDB4OTA4NCwgMHgwMGZjLCAweDAxMjAsIDB4MWYwNCwgMHg1OTdhLAorCTB4MDgwYywgMHgwZDg1LCAweDY4YTAsIDB4NjhhMiwgMHg2ODljLCAweDY4OWUsIDB4Njg5OCwgMHg2ODlhLAorCTB4YTAwMSwgMHg5MThkLCAweDE2MDAsIDB4NjkwMiwgMHgwMDFlLCAweDY4MzcsIDB4MDAyMCwgMHgwODBjLAorCTB4NjE3ZSwgMHgyMDc5LCAweDFkMDAsIDB4NzgzMywgMHgxMTAxLCAweDc4MzcsIDB4MDAwMCwgMHgyMGUxLAorCTB4MDAwMSwgMHgyMDk5LCAweDE4MDUsIDB4MjBlOSwgMHgwMDAxLCAweDIwYTEsIDB4MWQwZSwgMHgyMGE5LAorCTB4MDAwNCwgMHg0MDAzLCAweDA4MGMsIDB4YWFmMSwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxZDAwLAorCTB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHgyMGE5LCAweDAwMTQsIDB4NDAwMywgMHg2MGMzLAorCTB4MDAwYywgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHg2MDJjLCAweDAwZmUsIDB4OTAwNiwgMHg3MDkyLAorCTB4NjA0MywgMHgwMDA4LCAweDYwNDIsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsIDB4NzA5MywgMHgwMDAwLAorCTB4OTAyNSwgMHgwOTA0LCAweDVhMzQsIDB4NjAyMCwgMHhkMGI0LCAweDE5MDQsIDB4NWEzMiwgMHg3MWEwLAorCTB4ODFmZiwgMHgwOTA0LCAweDVhMjAsIDB4OTQ4NiwgMHgwMDBjLCAweDE5MDQsIDB4NWEyZCwgMHg5NDgwLAorCTB4MDAxOCwgMHg4MDA0LCAweDIwYTgsIDB4MDgwYywgMHg2MTc3LCAweDIwMTEsIDB4MDI2MCwgMHgyMDE5LAorCTB4MWQwMCwgMHgyMjBjLCAweDIzMDQsIDB4OTEwNiwgMHgxMWU4LCAweDgyMTAsIDB4ODMxOCwgMHgxZjA0LAorCTB4NTlkOSwgMHg2MDQzLCAweDAwMDQsIDB4MjA2MSwgMHgwMTQwLCAweDYwNWIsIDB4YmM5NCwgMHg2MDVmLAorCTB4ZjBmMCwgMHgyMDYxLCAweDAxMDAsIDB4NjA0MywgMHgwMDA2LCAweDcwOGYsIDB4MDAwMiwgMHg3MDliLAorCTB4MDAwMiwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4OGE1ZCwgMHgwODBjLAorCTB4NjE3ZSwgMHgwNGMwLCAweDA4MGMsIDB4NjE3NywgMHgyMDc5LCAweDAyNjAsIDB4NzkzMCwgMHg5MThlLAorCTB4MTEwMSwgMHgxNTU4LCAweDc4MzQsIDB4OTAwNSwgMHgxNTQwLCAweDc5MDAsIDB4OTE4YywgMHgwMGZmLAorCTB4MTExOCwgMHg3ODA0LCAweDkwMDUsIDB4MDE5MCwgMHgwODBjLCAweDYxNzcsIDB4MjAxMSwgMHgwMjZlLAorCTB4MjAxOSwgMHgxODA1LCAweDIwYTksIDB4MDAwNCwgMHgyMjBjLCAweDIzMDQsIDB4OTEwMiwgMHgwMjMwLAorCTB4MTFhMCwgMHg4MjEwLCAweDgzMTgsIDB4MWYwNCwgMHg1YTE0LCAweDAwNzgsIDB4NzBhMywgMHgwMDAwLAorCTB4MDgwYywgMHg2MTc3LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNjAsIDB4MjBlOSwgMHgwMDAxLAorCTB4MjBhMSwgMHgxZDAwLCAweDIwYTksIDB4MDAxNCwgMHg0MDAzLCAweDYwNDMsIDB4MDAwOCwgMHg2MDQzLAorCTB4MDAwMCwgMHgwMDEwLCAweDAwZmUsIDB4MDAwNSwgMHg2MDQwLCAweDkwODUsIDB4MDEwMCwgMHg2MDQyLAorCTB4NjAyMCwgMHhkMGI0LCAweDFkYjgsIDB4MDgwYywgMHhhYWYxLCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LAorCTB4MWQwMCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksIDB4MDAxNCwgMHg0MDAzLAorCTB4NjBjMywgMHgwMDBjLCAweDIwMTEsIDB4MTlmNSwgMHgyMDEzLCAweDAwMDAsIDB4NzA5MywgMHgwMDAwLAorCTB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwODBjLCAweGEyOTMsIDB4MDhkOCwgMHgwMDA1LAorCTB4NzA5OCwgMHg5MDhhLCAweDAwMWQsIDB4MWEwYywgMHgwZDg1LCAweDAwMGIsIDB4MDAwNSwgMHg1YTg5LAorCTB4NWE5YywgMHg1YWM1LCAweDVhZTUsIDB4NWIwYiwgMHg1YjNhLCAweDViNjAsIDB4NWI5OCwgMHg1YmJlLAorCTB4NWJlYywgMHg1YzI3LCAweDVjNWYsIDB4NWM3ZCwgMHg1Y2E4LCAweDVjY2EsIDB4NWNlNSwgMHg1Y2VmLAorCTB4NWQyMywgMHg1ZDQ5LCAweDVkNzgsIDB4NWQ5ZSwgMHg1ZGQ2LCAweDVlMWEsIDB4NWU1NywgMHg1ZTc4LAorCTB4NWVkMSwgMHg1ZWYzLCAweDVmMjEsIDB4NWYyMSwgMHgwMGM2LCAweDIwNjEsIDB4MTgwMCwgMHg2MDAzLAorCTB4MDAwNywgMHgyMDYxLCAweDAxMDAsIDB4NjAwNCwgMHg5MDg0LCAweGZmZjksIDB4NjAwNiwgMHgwMGNlLAorCTB4MDAwNSwgMHgyMDYxLCAweDAxNDAsIDB4NjA1YiwgMHhiYzk0LCAweDYwNWYsIDB4ZjBmMCwgMHgyMDYxLAorCTB4MDEwMCwgMHg2MDQzLCAweDAwMDIsIDB4NzA5YiwgMHgwMDAxLCAweDIwMDksIDB4MDdkMCwgMHgyMDExLAorCTB4NjAwMiwgMHgwODBjLCAweDhhNWQsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsIDB4OTA4NiwgMHgwMDE0LAorCTB4MTUxMCwgMHg2MDQyLCAweDYwMjAsIDB4ZDBiNCwgMHgxMWYwLCAweDA4MGMsIDB4NjE3NywgMHgyMDc5LAorCTB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwMiwgMHgxMWEwLCAweDc4MzQsIDB4OTAwNSwgMHgxMTg4LAorCTB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBjNCwgMHg5MDA1LCAweDExMTAsIDB4NzBjNywgMHgwMDAxLAorCTB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4ODk5MywgMHg3MDliLCAweDAwMTAsIDB4MDgwYywgMHg1Y2VmLAorCTB4MDAxMCwgMHg3MDkzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5YiwgMHgwMDAzLAorCTB4NjA0MywgMHgwMDA0LCAweDIwMTEsIDB4NjAwMiwgMHgwODBjLCAweDg5OTMsIDB4MDgwYywgMHg2MGZiLAorCTB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwMiwgMHg3ODM3LCAweDAwMDAsIDB4MjBhOSwgMHgwMDA4LAorCTB4OWY4OCwgMHgwMDBlLCAweDIwMGIsIDB4MDAwMCwgMHg4MTA4LCAweDFmMDQsIDB4NWFkYSwgMHg2MGMzLAorCTB4MDAxNCwgMHgwODBjLCAweDYwMmMsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LAorCTB4MDUwMCwgMHgyMDExLCAweDYwMDIsIDB4MDgwYywgMHg4OTkzLCAweDkwODYsIDB4MDAxNCwgMHgxMWI4LAorCTB4MDgwYywgMHg2MTc3LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwMiwgMHgxMTc4LAogCTB4NzgzNCwgMHg5MDA1LCAweDExNjAsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBjNCwgMHg5MDA1LAotCTB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4NzA5YiwgMHgwMDA2LCAweDAwMjksIDB4MDAxMCwgMHgwODBjLAotCTB4NjEyZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLCAweDAwMDcsIDB4MDgwYywgMHg2MGQ2LAotCTB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwNCwgMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MTUyLAotCTB4MDgwYywgMHg2MTM1LCAweDExYjgsIDB4NzA4NCwgMHg5MDA1LCAweDExYTAsIDB4NzE2NCwgMHg5MTg2LAotCTB4ZmZmZiwgMHgwMTgwLCAweDkxODAsIDB4MzQ3NCwgMHgyMDBkLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4NWY4YSwgMHgwMTgwLCAweDA4MGMsIDB4NTEwZSwgMHgwMTEwLAotCTB4MDgwYywgMHgyNzBhLCAweDIwYTksIDB4MDAwOCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLAotCTB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0ZSwgMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLAotCTB4NjAwNywgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDUwMCwgMHgyMDExLAotCTB4NWZkZCwgMHgwODBjLCAweDg4MmMsIDB4OTA4NiwgMHgwMDE0LCAweDExYjgsIDB4MDgwYywgMHg2MTUyLAotCTB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA0LCAweDExNzgsIDB4NzgzNCwgMHg5MDA1LAorCTB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4NzA5YiwgMHgwMDA0LCAweDAwMjksIDB4MDAxMCwgMHgwODBjLAorCTB4NjE1MywgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLCAweDAwMDUsIDB4MDgwYywgMHg2MGZiLAorCTB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwMywgMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MTc3LAorCTB4MDgwYywgMHg2MTVhLCAweDExNzAsIDB4NzA4NCwgMHg5MDA1LCAweDExNTgsIDB4NzE1YywgMHg5MTg2LAorCTB4ZmZmZiwgMHgwMTM4LCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLCAweDVmYWYsIDB4MDE2OCwgMHgwODBjLAorCTB4NjEzMCwgMHgyMGE5LCAweDAwMDgsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgyMGU5LAorCTB4MDAwMCwgMHgyMGExLCAweDAyNGUsIDB4NDAwMywgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg2MDJjLAorCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LCAweDA1MDAsIDB4MjAxMSwgMHg2MDAyLAorCTB4MDgwYywgMHg4OTkzLCAweDkwODYsIDB4MDAxNCwgMHgxMWI4LCAweDA4MGMsIDB4NjE3NywgMHgyMDc5LAorCTB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwMywgMHgxMTc4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTYwLAorCTB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBjNCwgMHg5MDA1LCAweDExMTAsIDB4NzBjNywgMHgwMDAxLAorCTB4NzA5YiwgMHgwMDA2LCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDYxNTMsIDB4MDBmZSwgMHgwMDA1LAorCTB4MDBmNiwgMHg3MDliLCAweDAwMDcsIDB4MDgwYywgMHg2MGZiLCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLAorCTB4MTEwNCwgMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MTc3LCAweDA4MGMsIDB4NjE1YSwgMHgxMWI4LAorCTB4NzA4NCwgMHg5MDA1LCAweDExYTAsIDB4NzE2NCwgMHg5MTg2LCAweGZmZmYsIDB4MDE4MCwgMHg5MTgwLAorCTB4MzQ4ZSwgMHgyMDBkLCAweDkxOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLAorCTB4NWZhZiwgMHgwMTgwLCAweDA4MGMsIDB4NTEyZSwgMHgwMTEwLCAweDA4MGMsIDB4MjZmNSwgMHgyMGE5LAorCTB4MDAwOCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAorCTB4MDI0ZSwgMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDYwMmMsIDB4MDBmZSwgMHgwMDA1LAorCTB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDUwMCwgMHgyMDExLCAweDYwMDIsIDB4MDgwYywgMHg4OTkzLAorCTB4OTA4NiwgMHgwMDE0LCAweDExYjgsIDB4MDgwYywgMHg2MTc3LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLAorCTB4OTI5NiwgMHgxMTA0LCAweDExNzgsIDB4NzgzNCwgMHg5MDA1LCAweDExNjAsIDB4N2EzOCwgMHhkMmZjLAorCTB4MDEyOCwgMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4NzA5YiwgMHgwMDA4LAorCTB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NjE1MywgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLAorCTB4MDAwOSwgMHgwODBjLCAweDYwZmIsIDB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwNSwgMHg3ODM3LAorCTB4MDEwMCwgMHgwODBjLCAweDYxNWEsIDB4MTE1MCwgMHg3MDg0LCAweDkwMDUsIDB4MTEzOCwgMHgwODBjLAorCTB4NWYyMiwgMHgxMTg4LCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDI2ZjUsIDB4MjBhOSwgMHgwMDA4LAorCTB4MDgwYywgMHg2MTc3LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNmUsIDB4MjBlOSwgMHgwMDAwLAorCTB4MjBhMSwgMHgwMjRlLCAweDQwMDMsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NjAyYywgMHgwMDEwLAorCTB4MDgwYywgMHg1YTdjLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsIDB4OTAwNSwgMHgwNWE4LAorCTB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4ODk5MywgMHg5MDg2LCAweDAwMTQsIDB4MTU2MCwgMHgwODBjLAorCTB4NjE3NywgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDUsIDB4MTUyMCwgMHg3ODM0LAorCTB4OTA4NCwgMHgwMTAwLCAweDIwMTEsIDB4MDEwMCwgMHg5MjFlLCAweDExNjAsIDB4N2EzOCwgMHhkMmZjLAorCTB4MDEyOCwgMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4NzA5YiwgMHgwMDBhLAorCTB4MDBiMSwgMHgwMDk4LCAweDkwMDUsIDB4MTE3OCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LAorCTB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg3MDk3LCAweDAwMDAsIDB4NzA5YiwgMHgwMDBlLAorCTB4MDgwYywgMHg1Y2NhLCAweDAwMTAsIDB4MDgwYywgMHg2MTUzLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LAorCTB4NzA5YiwgMHgwMDBiLCAweDIwMTEsIDB4MWQwZSwgMHgyMGU5LCAweDAwMDEsIDB4MjJhMCwgMHgyMGE5LAorCTB4MDA0MCwgMHgyMDE5LCAweGZmZmYsIDB4NDMwNCwgMHgwODBjLCAweDYwZmIsIDB4MjA3OSwgMHgwMjQwLAorCTB4NzgzMywgMHgxMTA2LCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLCAweDYxNWEsIDB4MDExOCwgMHgyMDEzLAorCTB4MDAwMCwgMHgwMDIwLCAweDcwNjAsIDB4OTA4NSwgMHgwMTAwLCAweDIwMTIsIDB4MjBhOSwgMHgwMDQwLAorCTB4MjAwOSwgMHgwMjRlLCAweDIwMTEsIDB4MWQwZSwgMHgyMjBlLCAweDgyMTAsIDB4ODEwOCwgMHg5MTg2LAorCTB4MDI2MCwgMHgxMTI4LCAweDY4MTAsIDB4ODAwMCwgMHg2ODEyLCAweDIwMDksIDB4MDI0MCwgMHgxZjA0LAorCTB4NWM0YywgMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg2MDJjLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LAorCTB4NzA5MCwgMHg5MDA1LCAweDAxYzAsIDB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4ODk5MywgMHg5MDg2LAorCTB4MDA4NCwgMHgxMTc4LCAweDA4MGMsIDB4NjE3NywgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LAorCTB4MTEwNiwgMHgxMTM4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTIwLCAweDcwOWIsIDB4MDAwYywgMHgwMDI5LAorCTB4MDAxMCwgMHgwODBjLCAweDYxNTMsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5YiwgMHgwMDBkLAorCTB4MDgwYywgMHg2MGZiLCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDcsIDB4NzgzNywgMHgwMDAwLAorCTB4MDgwYywgMHg2MTc3LCAweDIwYTksIDB4MDA0MCwgMHgyMDExLCAweDAyNmUsIDB4MjAwOSwgMHgwMjRlLAorCTB4MjIwZSwgMHg4MjEwLCAweDgxMDgsIDB4OTE4NiwgMHgwMjYwLCAweDExNTAsIDB4NjgxMCwgMHg4MDAwLAorCTB4NjgxMiwgMHgyMDA5LCAweDAyNDAsIDB4NjgxNCwgMHg4MDAwLCAweDY4MTYsIDB4MjAxMSwgMHgwMjYwLAorCTB4MWYwNCwgMHg1YzkwLCAweDYwYzMsIDB4MDA4NCwgMHgwODBjLCAweDYwMmMsIDB4MDBmZSwgMHgwMDA1LAorCTB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDFlMCwgMHgyMDExLCAweDYwMDIsIDB4MDgwYywgMHg4OTkzLAorCTB4OTA4NiwgMHgwMDg0LCAweDExOTgsIDB4MDgwYywgMHg2MTc3LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLAorCTB4OTI5NiwgMHgxMTA3LCAweDExNTgsIDB4NzgzNCwgMHg5MDA1LCAweDExNDAsIDB4NzA5NywgMHgwMDAxLAorCTB4MDgwYywgMHg2MGNkLCAweDcwOWIsIDB4MDAwZSwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg2MTUzLAorCTB4MDBmZSwgMHgwMDA1LCAweDkxOGQsIDB4MDAwMSwgMHgwODBjLCAweDYxYTIsIDB4NzA5YiwgMHgwMDBmLAorCTB4NzA5MywgMHgwMDAwLCAweDIwNjEsIDB4MDE0MCwgMHg2MDViLCAweGJjODUsIDB4NjA1ZiwgMHhiNWI1LAorCTB4MjA2MSwgMHgwMTAwLCAweDYwNDMsIDB4MDAwNSwgMHg2MDQzLCAweDAwMDQsIDB4MjAwOSwgMHgwN2QwLAorCTB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4ODk4NywgMHgwMDA1LCAweDcwOTAsIDB4OTAwNSwgMHgwMTMwLAorCTB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4ODk5MywgMHg3MDliLCAweDAwMDAsIDB4MDAwNSwgMHg3MDliLAorCTB4MDAxMSwgMHgwODBjLCAweGFhZjEsIDB4MDgwYywgMHg2MTc3LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LAorCTB4MDI2MCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDc0OTAsIDB4OTQ4MCwgMHgwMDE4LAorCTB4OTA4MCwgMHgwMDA3LCAweDkwODQsIDB4MDNmOCwgMHg4MDA0LCAweDIwYTgsIDB4NDAwMywgMHgwODBjLAorCTB4NjE1YSwgMHgxMWEwLCAweDcxN2MsIDB4ODFmZiwgMHgwMTg4LCAweDkwMGUsIDB4NzA4MCwgMHg5MDg0LAorCTB4MDBmZiwgMHgwMTYwLCAweDA4MGMsIDB4MjY4YywgMHg5MTg2LCAweDAwN2UsIDB4MDEzOCwgMHg5MTg2LAorCTB4MDA4MCwgMHgwMTIwLCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLCAweDVmYWYsIDB4NjBjMywgMHgwMDE0LAorCTB4MDgwYywgMHg2MDJjLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDUwMCwgMHgyMDExLAorCTB4NjAwMiwgMHgwODBjLCAweDg5OTMsIDB4OTA4NiwgMHgwMDE0LCAweDExYjgsIDB4MDgwYywgMHg2MTc3LAorCTB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTAzLCAweDExNzgsIDB4NzgzNCwgMHg5MDA1LAogCTB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LAotCTB4MDAwMSwgMHg3MDliLCAweDAwMDgsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NjEyZSwgMHgwMGZlLAotCTB4MDAwNSwgMHgwMGY2LCAweDcwOWIsIDB4MDAwOSwgMHgwODBjLCAweDYwZDYsIDB4MjA3OSwgMHgwMjQwLAotCTB4NzgzMywgMHgxMTA1LCAweDc4MzcsIDB4MDEwMCwgMHgwODBjLCAweDYxMzUsIDB4MTE1MCwgMHg3MDg0LAotCTB4OTAwNSwgMHgxMTM4LCAweDA4MGMsIDB4NWVmZCwgMHgxMTg4LCAweDkwODUsIDB4MDAwMSwgMHgwODBjLAotCTB4MjcwYSwgMHgyMGE5LCAweDAwMDgsIDB4MDgwYywgMHg2MTUyLCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LAotCTB4MDI2ZSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDQwMDMsIDB4NjBjMywgMHgwMDE0LAotCTB4MDgwYywgMHg2MDA3LCAweDAwMTAsIDB4MDgwYywgMHg1YTU3LCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LAotCTB4NzA5MCwgMHg5MDA1LCAweDA1YTgsIDB4MjAxMSwgMHg1ZmRkLCAweDA4MGMsIDB4ODgyYywgMHg5MDg2LAotCTB4MDAxNCwgMHgxNTYwLCAweDA4MGMsIDB4NjE1MiwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LAotCTB4MTEwNSwgMHgxNTIwLCAweDc4MzQsIDB4OTA4NCwgMHgwMTAwLCAweDIwMTEsIDB4MDEwMCwgMHg5MjFlLAotCTB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LAotCTB4MDAwMSwgMHg3MDliLCAweDAwMGEsIDB4MDBiMSwgMHgwMDk4LCAweDkwMDUsIDB4MTE3OCwgMHg3YTM4LAotCTB4ZDJmYywgMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg3MDk3LAotCTB4MDAwMCwgMHg3MDliLCAweDAwMGUsIDB4MDgwYywgMHg1Y2E1LCAweDAwMTAsIDB4MDgwYywgMHg2MTJlLAotCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5YiwgMHgwMDBiLCAweDIwMTEsIDB4MWQwZSwgMHgyMGU5LAotCTB4MDAwMSwgMHgyMmEwLCAweDIwYTksIDB4MDA0MCwgMHgyMDE5LCAweGZmZmYsIDB4NDMwNCwgMHgwODBjLAotCTB4NjBkNiwgMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA2LCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLAotCTB4NjEzNSwgMHgwMTE4LCAweDIwMTMsIDB4MDAwMCwgMHgwMDIwLCAweDcwNjAsIDB4OTA4NSwgMHgwMTAwLAotCTB4MjAxMiwgMHgyMGE5LCAweDAwNDAsIDB4MjAwOSwgMHgwMjRlLCAweDIwMTEsIDB4MWQwZSwgMHgyMjBlLAotCTB4ODIxMCwgMHg4MTA4LCAweDkxODYsIDB4MDI2MCwgMHgxMTI4LCAweDY4MTAsIDB4ODAwMCwgMHg2ODEyLAotCTB4MjAwOSwgMHgwMjQwLCAweDFmMDQsIDB4NWMyNywgMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg2MDA3LAotCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LCAweDAxYzAsIDB4MjAxMSwgMHg1ZmRkLAotCTB4MDgwYywgMHg4ODJjLCAweDkwODYsIDB4MDA4NCwgMHgxMTc4LCAweDA4MGMsIDB4NjE1MiwgMHgyMDc5LAotCTB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwNiwgMHgxMTM4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTIwLAotCTB4NzA5YiwgMHgwMDBjLCAweDAwMjksIDB4MDAxMCwgMHgwODBjLCAweDYxMmUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDBmNiwgMHg3MDliLCAweDAwMGQsIDB4MDgwYywgMHg2MGQ2LCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLAotCTB4MTEwNywgMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MTUyLCAweDIwYTksIDB4MDA0MCwgMHgyMDExLAotCTB4MDI2ZSwgMHgyMDA5LCAweDAyNGUsIDB4MjIwZSwgMHg4MjEwLCAweDgxMDgsIDB4OTE4NiwgMHgwMjYwLAotCTB4MTE1MCwgMHg2ODEwLCAweDgwMDAsIDB4NjgxMiwgMHgyMDA5LCAweDAyNDAsIDB4NjgxNCwgMHg4MDAwLAotCTB4NjgxNiwgMHgyMDExLCAweDAyNjAsIDB4MWYwNCwgMHg1YzZiLCAweDYwYzMsIDB4MDA4NCwgMHgwODBjLAotCTB4NjAwNywgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDFlMCwgMHgyMDExLAotCTB4NWZkZCwgMHgwODBjLCAweDg4MmMsIDB4OTA4NiwgMHgwMDg0LCAweDExOTgsIDB4MDgwYywgMHg2MTUyLAotCTB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA3LCAweDExNTgsIDB4NzgzNCwgMHg5MDA1LAotCTB4MTE0MCwgMHg3MDk3LCAweDAwMDEsIDB4MDgwYywgMHg2MGE4LCAweDcwOWIsIDB4MDAwZSwgMHgwMDI5LAotCTB4MDAxMCwgMHgwODBjLCAweDYxMmUsIDB4MDBmZSwgMHgwMDA1LCAweDkxOGQsIDB4MDAwMSwgMHgwODBjLAotCTB4NjE3ZCwgMHg3MDliLCAweDAwMGYsIDB4NzA5MywgMHgwMDAwLCAweDIwNjEsIDB4MDE0MCwgMHg2MDViLAotCTB4YmM4NSwgMHg2MDVmLCAweGI1YjUsIDB4MjA2MSwgMHgwMTAwLCAweDYwNDMsIDB4MDAwNSwgMHg2MDQzLAotCTB4MDAwNCwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg1ZmRkLCAweDA4MGMsIDB4ODgyMCwgMHgwMDA1LAotCTB4NzA5MCwgMHg5MDA1LCAweDAxMzAsIDB4MjAxMSwgMHg1ZmRkLCAweDA4MGMsIDB4ODgyYywgMHg3MDliLAotCTB4MDAwMCwgMHgwMDA1LCAweDcwOWIsIDB4MDAxMSwgMHgwODBjLCAweGE4ZWMsIDB4MDgwYywgMHg2MTUyLAotCTB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI2MCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLAotCTB4NzQ5MCwgMHg5NDgwLCAweDAwMTgsIDB4OTA4MCwgMHgwMDA3LCAweDkwODQsIDB4MDNmOCwgMHg4MDA0LAotCTB4MjBhOCwgMHg0MDAzLCAweDA4MGMsIDB4NjEzNSwgMHgxMWEwLCAweDcxN2MsIDB4ODFmZiwgMHgwMTg4LAotCTB4OTAwZSwgMHg3MDgwLCAweDkwODQsIDB4MDBmZiwgMHgwMTYwLCAweDA4MGMsIDB4MjZhMSwgMHg5MTg2LAotCTB4MDA3ZSwgMHgwMTM4LCAweDkxODYsIDB4MDA4MCwgMHgwMTIwLCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLAotCTB4NWY4YSwgMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg2MDA3LCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLAotCTB4OTAwNSwgMHgwNTAwLCAweDIwMTEsIDB4NWZkZCwgMHgwODBjLCAweDg4MmMsIDB4OTA4NiwgMHgwMDE0LAotCTB4MTFiOCwgMHgwODBjLCAweDYxNTIsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTAzLAotCTB4MTE3OCwgMHg3ODM0LCAweDkwMDUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LAotCTB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg3MDliLCAweDAwMTIsIDB4MDAyOSwgMHgwMDEwLAotCTB4NzA5MywgMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOWIsIDB4MDAxMywgMHgwODBjLAotCTB4NjBlNCwgMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTAzLCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLAotCTB4NjE1MiwgMHgwODBjLCAweDYxMzUsIDB4MTE3MCwgMHg3MDg0LCAweDkwMDUsIDB4MTE1OCwgMHg3MTVjLAotCTB4OTE4NiwgMHhmZmZmLCAweDAxMzgsIDB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4NWY4YSwgMHgwMTY4LAotCTB4MDgwYywgMHg2MTBiLCAweDIwYTksIDB4MDAwOCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLAotCTB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0ZSwgMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLAotCTB4NjAwNywgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDUwMCwgMHgyMDExLAotCTB4NWZkZCwgMHgwODBjLCAweDg4MmMsIDB4OTA4NiwgMHgwMDE0LCAweDExYjgsIDB4MDgwYywgMHg2MTUyLAotCTB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA0LCAweDExNzgsIDB4NzgzNCwgMHg5MDA1LAotCTB4MTE2MCwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LAotCTB4MDAwMSwgMHg3MDliLCAweDAwMTQsIDB4MDAyOSwgMHgwMDEwLCAweDcwOTMsIDB4MDAwMCwgMHgwMGZlLAotCTB4MDAwNSwgMHgwMGY2LCAweDcwOWIsIDB4MDAxNSwgMHgwODBjLCAweDYwZTQsIDB4MjA3OSwgMHgwMjQwLAotCTB4NzgzMywgMHgxMTA0LCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLCAweDYxNTIsIDB4MDgwYywgMHg2MTM1LAotCTB4MTFiOCwgMHg3MDg0LCAweDkwMDUsIDB4MTFhMCwgMHg3MTY0LCAweDkxODYsIDB4ZmZmZiwgMHgwMTgwLAotCTB4OTE4MCwgMHgzNDc0LCAweDIwMGQsIDB4OTE4YywgMHhmZjAwLCAweDgxMGYsIDB4MjAxMSwgMHgwMDA4LAotCTB4MDgwYywgMHg1ZjhhLCAweDAxODAsIDB4MDgwYywgMHg1MTBlLCAweDAxMTAsIDB4MDgwYywgMHgyNzBhLAotCTB4MjBhOSwgMHgwMDA4LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNmUsIDB4MjBlOSwgMHgwMDAwLAotCTB4MjBhMSwgMHgwMjRlLCAweDQwMDMsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NjAwNywgMHgwMGZlLAotCTB4MDAwNSwgMHgwMGY2LCAweDcwOTAsIDB4OTAwNSwgMHgwNWYwLCAweDIwMTEsIDB4NWZkZCwgMHgwODBjLAotCTB4ODgyYywgMHg5MDg2LCAweDAwMTQsIDB4MTVhOCwgMHgwODBjLCAweDYxNTIsIDB4MjA3OSwgMHgwMjYwLAotCTB4N2EzMCwgMHg5Mjk2LCAweDExMDUsIDB4MTU2OCwgMHg3ODM0LCAweDkwODQsIDB4MDEwMCwgMHgyMDExLAotCTB4MDEwMCwgMHg5MjFlLCAweDExNjgsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4NjE3ZCwgMHg3YTM4LAotCTB4ZDJmYywgMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHgwMDgwLAotCTB4OTAwNSwgMHgxMWI4LCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLAotCTB4NzBjNywgMHgwMDAxLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDYxN2QsIDB4NzA5NywgMHgwMDAwLAotCTB4N2EzOCwgMHhkMmY0LCAweDAxMTAsIDB4NzBkZiwgMHgwMDA4LCAweDcwOWIsIDB4MDAxNiwgMHgwMDI5LAotCTB4MDAxMCwgMHg3MDkzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDA4MGMsIDB4YThlYywgMHgwODBjLAotCTB4NjE1MiwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjYwLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAotCTB4MDI0MCwgMHgyMGE5LCAweDAwMGUsIDB4NDAwMywgMHgyMDExLCAweDAyNmQsIDB4MjIwNCwgMHg5MDg0LAotCTB4MDEwMCwgMHgyMDExLCAweDAyNGQsIDB4MjAxMiwgMHgyMDExLCAweDAyNmUsIDB4NzA5YiwgMHgwMDE3LAotCTB4MDgwYywgMHg2MTM1LCAweDExNTAsIDB4NzA4NCwgMHg5MDA1LCAweDExMzgsIDB4MDgwYywgMHg1ZWZkLAotCTB4MTE4OCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHgyNzBhLCAweDIwYTksIDB4MDAwOCwgMHgwODBjLAotCTB4NjE1MiwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAotCTB4MDI0ZSwgMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDYwMDcsIDB4MDAxMCwgMHgwODBjLAotCTB4NWE1NywgMHgwMDA1LCAweDAwZjYsIDB4NzA5MCwgMHg5MDA1LCAweDAxZDgsIDB4MjAxMSwgMHg1ZmRkLAotCTB4MDgwYywgMHg4ODJjLCAweDkwODYsIDB4MDA4NCwgMHgxMTkwLCAweDA4MGMsIDB4NjE1MiwgMHgyMDc5LAotCTB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwNiwgMHgxMTUwLCAweDc4MzQsIDB4OTAwNSwgMHgxMTM4LAotCTB4OTAwNiwgMHgwODBjLCAweDYxN2QsIDB4NzA5YiwgMHgwMDE4LCAweDAwMjksIDB4MDAxMCwgMHg3MDkzLAotCTB4MDAwMCwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLCAweDAwMTksIDB4MDgwYywgMHg2MGU0LAotCTB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwNiwgMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MTUyLAotCTB4MjAwOSwgMHgwMjZlLCAweDIwMzksIDB4MWQwZSwgMHgyMGE5LCAweDAwNDAsIDB4MjEzZSwgMHg4NzM4LAotCTB4ODEwOCwgMHg5MTg2LCAweDAyODAsIDB4MTEyOCwgMHg2ODE0LCAweDgwMDAsIDB4NjgxNiwgMHgyMDA5LAotCTB4MDI2MCwgMHgxZjA0LCAweDVlNjYsIDB4MjAzOSwgMHgxZDBlLCAweDA4MGMsIDB4NjEzNSwgMHgxMWU4LAotCTB4MjcyOCwgMHgyNTE0LCAweDgyMDcsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDAsIDB4MjAxOCwgMHg5Mjk0LAotCTB4MDBmZiwgMHg4MDA3LCAweDkyMDUsIDB4MjAyYSwgMHg3MDYwLCAweDIzMTAsIDB4ODIxNCwgMHg5MmEwLAotCTB4MWQwZSwgMHgyNDE0LCAweDkzOGMsIDB4MDAwMSwgMHgwMTE4LCAweDkyOTQsIDB4ZmYwMCwgMHgwMDE4LAotCTB4OTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4OTIxNSwgMHgyMjIyLCAweDIwYTksIDB4MDA0MCwgMHgyMDA5LAotCTB4MDI0ZSwgMHgyNzBlLCAweDg3MzgsIDB4ODEwOCwgMHg5MTg2LCAweDAyNjAsIDB4MTEyOCwgMHg2ODEwLAotCTB4ODAwMCwgMHg2ODEyLCAweDIwMDksIDB4MDI0MCwgMHgxZjA0LCAweDVlOTksIDB4NjBjMywgMHgwMDg0LAotCTB4MDgwYywgMHg2MDA3LCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTAsIDB4OTAwNSwgMHgwMWUwLAotCTB4MjAxMSwgMHg1ZmRkLCAweDA4MGMsIDB4ODgyYywgMHg5MDg2LCAweDAwODQsIDB4MTE5OCwgMHgwODBjLAotCTB4NjE1MiwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDcsIDB4MTE1OCwgMHg3ODM0LAotCTB4OTAwNSwgMHgxMTQwLCAweDcwOTcsIDB4MDAwMSwgMHgwODBjLCAweDYwYTgsIDB4NzA5YiwgMHgwMDFhLAotCTB4MDAyOSwgMHgwMDEwLCAweDcwOTMsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDgwYywgMHg2MTdkLCAweDcwOWIsIDB4MDAxYiwgMHgwODBjLCAweGE4ZWMsIDB4MDgwYywgMHg2MTUyLAotCTB4MjAxMSwgMHgwMjYwLCAweDIwMDksIDB4MDI0MCwgMHg3NDkwLCAweDk0ODAsIDB4MDAxOCwgMHg5MDgwLAotCTB4MDAwNywgMHg5MDg0LCAweDAzZjgsIDB4ODAwNCwgMHgyMGE4LCAweDIyMGUsIDB4ODIxMCwgMHg4MTA4LAotCTB4OTE4NiwgMHgwMjYwLCAweDExNTAsIDB4NjgxMCwgMHg4MDAwLCAweDY4MTIsIDB4MjAwOSwgMHgwMjQwLAotCTB4NjgxNCwgMHg4MDAwLCAweDY4MTYsIDB4MjAxMSwgMHgwMjYwLCAweDFmMDQsIDB4NWVlNSwgMHg2MGMzLAotCTB4MDA4NCwgMHgwODBjLCAweDYwMDcsIDB4MDAwNSwgMHgwMDA1LCAweDAwODYsIDB4MDA5NiwgMHgyMDI5LAotCTB4MTg0OCwgMHgyNTJjLCAweDIwYTksIDB4MDAwOCwgMHgyMDQxLCAweDFkMGUsIDB4MjBlOSwgMHgwMDAxLAotCTB4MjhhMCwgMHgwODBjLCAweDYxNTIsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHg0MDAzLAotCTB4MjBhOSwgMHgwMDA4LCAweDIwMTEsIDB4MDAwNywgMHhkNWQ0LCAweDAxMDgsIDB4OTAxNiwgMHgyODAwLAotCTB4OTIwMCwgMHgyMDBjLCAweDkxYTYsIDB4ZmZmZiwgMHgxMTQ4LCAweGQ1ZDQsIDB4MDExMCwgMHg4MjEwLAotCTB4MDAwOCwgMHg4MjExLCAweDFmMDQsIDB4NWYxNywgMHgwODA0LCAweDVmODYsIDB4ODJmZiwgMHgxMTYwLAotCTB4ZDVkNCwgMHgwMTIwLCAweDkxYTYsIDB4M2ZmZiwgMHgwZDkwLCAweDAwMjAsIDB4OTFhNiwgMHgzZmZmLAotCTB4MDkwNCwgMHg1Zjg2LCAweDkxOGQsIDB4YzAwMCwgMHgyMGE5LCAweDAwMTAsIDB4MjAxOSwgMHgwMDAxLAotCTB4ZDVkNCwgMHgwMTEwLCAweDIwMTksIDB4MDAxMCwgMHgyMTIwLCAweGQ1ZDQsIDB4MDExMCwgMHg4NDIzLAotCTB4MDAwOCwgMHg4NDI0LCAweDEyNDAsIDB4ZDVkNCwgMHgwMTEwLCAweDgzMTksIDB4MDAwOCwgMHg4MzE4LAotCTB4MWYwNCwgMHg1ZjNkLCAweDA0ZDgsIDB4MjNhOCwgMHgyMDIxLCAweDAwMDEsIDB4ODQyNiwgMHg4NDI1LAotCTB4MWYwNCwgMHg1ZjRmLCAweDIzMjgsIDB4ODUyOSwgMHg5MmJlLCAweDAwMDcsIDB4MDE1OCwgMHgwMDA2LAotCTB4MjAzOSwgMHgwMDA3LCAweDIyMDAsIDB4OTczYSwgMHgwMDBlLCAweDI3YTgsIDB4OTVhOCwgMHgwMDEwLAotCTB4MWYwNCwgMHg1ZjVlLCAweDc1NWUsIDB4OTVjOCwgMHgzNDc0LCAweDI5MmQsIDB4OTVhYywgMHgwMGZmLAotCTB4NzU4MiwgMHg2NTMyLCAweDY1MzYsIDB4MDAxNiwgMHgyNTA4LCAweDA4MGMsIDB4MjZlYSwgMHgwMDFlLAotCTB4NjBlNywgMHgwMDAwLCAweDY1ZWEsIDB4MjAxOCwgMHgyMzA0LCAweDk0MDUsIDB4MjAxYSwgMHg3MDg3LAotCTB4MDAwMSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDIwZTEsIDB4MDAwMSwgMHgyODk4LAotCTB4MjBhOSwgMHgwMDA4LCAweDQwMDMsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMDllLAotCTB4MDA4ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgyMmE4LAotCTB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgyMGU5LCAweDAwMDAsIDB4MjAxMSwgMHgwMjRlLAotCTB4MjJhMCwgMHg0MDAzLCAweDAxNGUsIDB4MDEzZSwgMHgwMWRlLCAweDAxY2UsIDB4MDE1ZSwgMHgyMTE4LAotCTB4OTAyNiwgMHgyMDAxLCAweDAwMDcsIDB4OTM5YSwgMHgwMDEwLCAweDAyMTgsIDB4ODQyMCwgMHg4MDAxLAotCTB4MGNkMCwgMHgyMTE4LCAweDg0ZmYsIDB4MDEyMCwgMHg5MzlhLCAweDAwMTAsIDB4ODQyMSwgMHgxZGUwLAotCTB4MjAyMSwgMHgwMDAxLCAweDgzZmYsIDB4MDExOCwgMHg4NDIzLCAweDgzMTksIDB4MWRlOCwgMHg5MjM4LAotCTB4MjAyOSwgMHgwMjZlLCAweDk1MjgsIDB4MjUwNCwgMHg5NDJjLCAweDExYjgsIDB4OTQwNSwgMHgyMDNhLAotCTB4NzE1ZSwgMHg5MWEwLCAweDM0NzQsIDB4MjQyZCwgMHg5NWFjLCAweDAwZmYsIDB4NzU4MiwgMHg2NTMyLAotCTB4NjUzNiwgMHgwMDE2LCAweDI1MDgsIDB4MDgwYywgMHgyNmVhLCAweDAwMWUsIDB4NjBlNywgMHgwMDAwLAotCTB4NjVlYSwgMHg3MDg3LCAweDAwMDEsIDB4OTA4NCwgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAotCTB4MTgwMCwgMHg3MDhiLCAweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBmNiwgMHgyMDc5LAotCTB4MDEwMCwgMHgyMDcxLCAweDAxNDAsIDB4MDgwYywgMHg2MDk3LCAweDA4MGMsIDB4YTA5YiwgMHg3MDA0LAotCTB4OTA4NCwgMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyYWIyLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA3MSwgMHgxODI2LCAweDIwNzMsIDB4MDAwMCwgMHg3ODQwLCAweDAwMjYsIDB4MDAxNiwgMHgyMDA5LAotCTB4MDBmNywgMHgwODBjLCAweDYwZjQsIDB4MDAxZSwgMHg5MDk0LCAweDAwMTAsIDB4OTI4NSwgMHgwMDgwLAotCTB4Nzg0MiwgMHg3YTQyLCAweDAwMmUsIDB4MDEyZSwgMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MmExMSwgMHgwMjI4LCAweDIwMTEsIDB4MDEwMSwgMHgyMjA0LAotCTB4YzBjNSwgMHgyMDEyLCAweDIwMTEsIDB4MTlmNiwgMHgyMDEzLCAweDAwMDAsIDB4NzA5MywgMHgwMDAwLAotCTB4MDEyZSwgMHg2MGEzLCAweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDA4MGMsIDB4YTA4ZSwgMHg2MTQ0LAotCTB4ZDE4NCwgMHgwMTIwLCAweDcxOTgsIDB4OTE4ZCwgMHgyMDAwLCAweDAwMTgsIDB4NzE4YywgMHg5MThkLAotCTB4MTAwMCwgMHgyMDExLCAweDE5OWEsIDB4MjExMiwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg1ZmRkLAotCTB4MDgwYywgMHg4OGY2LCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHhhZTg3LCAweDA4MGMsIDB4YWIxMywgMHgyMDA5LAotCTB4MDBmNywgMHgwODBjLCAweDYwZjQsIDB4MjA2MSwgMHgxYTA1LCAweDkwMGUsIDB4NjExYSwgMHg2MTFlLAotCTB4NjE3YSwgMHg2MTdlLCAweDIwNjEsIDB4MTgwMCwgMHg2MDAzLCAweDAwMDEsIDB4MjA2MSwgMHgwMTAwLAotCTB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgyMDA5LCAweDE5OWEsIDB4MjAwYiwgMHgwMDAwLAotCTB4MjAwOSwgMHgwMDJkLCAweDIwMTEsIDB4NjA2MywgMHgwODBjLCAweDg4MjAsIDB4MDEyZSwgMHgwMGNlLAotCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDQ3MSwgMHgyMDcxLCAweDAxMDAsIDB4MDgwYywgMHhhMDliLCAweDIwNzEsIDB4MDE0MCwgMHg3MDA0LAotCTB4OTA4NCwgMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyYWIyLCAweDA4MGMsIDB4NzZhNSwgMHgwMTg4LAotCTB4MDgwYywgMHg3NmMwLCAweDExNzAsIDB4MDgwYywgMHg3OWE5LCAweDAwMTYsIDB4MDgwYywgMHgyN2I5LAotCTB4MjAwMSwgMHgxOTZlLCAweDIxMDIsIDB4MDAxZSwgMHgwODBjLCAweDc5YTQsIDB4MDgwYywgMHg3NWNjLAotCTB4MDA1MCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgyYThlLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MjY0NiwgMHgwODBjLCAweDYwMzMsIDB4MDEyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLAotCTB4MTgwZSwgMHgyMDA0LCAweGQwYmMsIDB4MDE1OCwgMHgwMDI2LCAweDAwMzYsIDB4MjAxMSwgMHg4MDE3LAotCTB4MjAwMSwgMHgxOTlhLCAweDIwMWMsIDB4MDgwYywgMHg0YzI4LCAweDAwM2UsIDB4MDAyZSwgMHgwMDA1LAotCTB4MjBhOSwgMHgwMDEyLCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDFkODAsIDB4MDgwYywgMHg2MTUyLAotCTB4MjBlOSwgMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgwMDk5LCAweDIwYTksIDB4MDAyMCwgMHgwODBjLAotCTB4NjE0YywgMHgyMDk5LCAweDAyNjAsIDB4MjBhMSwgMHgxZDkyLCAweDAwNTEsIDB4MjBhOSwgMHgwMDBlLAotCTB4MDgwYywgMHg2MTRmLCAweDIwOTksIDB4MDI2MCwgMHgyMGExLCAweDFkYjIsIDB4MDAwOSwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMDI2LCAweDM0MTAsIDB4MzMwOCwgMHgyMTA0LCAweDgwMDcsIDB4MjAxMiwgMHg4MTA4LAotCTB4ODIxMCwgMHgxZjA0LCAweDYwY2MsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHhhOGVjLAotCTB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MWQwMCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLAotCTB4MjBhOSwgMHgwMDBjLCAweDQwMDMsIDB4MDAwNSwgMHgwODBjLCAweGE4ZWMsIDB4MDgwYywgMHg2MTUyLAotCTB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI2MCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLAotCTB4MjBhOSwgMHgwMDBjLCAweDQwMDMsIDB4MDAwNSwgMHgwMGM2LCAweDAwMDYsIDB4MjA2MSwgMHgwMTAwLAotCTB4ODEwZiwgMHgyMDAxLCAweDE4MzQsIDB4MjAwNCwgMHg5MDA1LCAweDExMzgsIDB4MjAwMSwgMHgxODE4LAotCTB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTEwNSwgMHgwMDEwLCAweDkxODUsIDB4MDBmNywgMHg2MDRhLAotCTB4MDAwZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDQ2LCAweDA4MGMsIDB4NmJjOSwgMHgwMTU4LAotCTB4OTAwNiwgMHgyMDIwLCAweDIwMDksIDB4MDAyYSwgMHgwODBjLCAweGU3OTUsIDB4MjAwMSwgMHgxODBjLAotCTB4MjAwYywgMHhjMTk1LCAweDIxMDIsIDB4MjAxOSwgMHgwMDJhLCAweDkwMGUsIDB4MDgwYywgMHgzMmMwLAotCTB4MDgwYywgMHhkMzVkLCAweDAxNDAsIDB4MDAzNiwgMHgyMDE5LCAweGZmZmYsIDB4MjAyMSwgMHgwMDA3LAotCTB4MDgwYywgMHg0ZGRmLCAweDAwM2UsIDB4MDA0ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHg2MDMzLAotCTB4NzA5YiwgMHgwMDAwLCAweDcwOTMsIDB4MDAwMCwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxODBjLAotCTB4MjAwNCwgMHhkMDljLCAweDAxMDAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MDEwMSwgMHgyMDBjLCAweDkxOGQsIDB4MDAwNiwgMHgyMTAyLAotCTB4MDEyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgyMDA5LCAweDAwMDEsIDB4MDAyMCwgMHgyMDA5LAotCTB4MDAwMiwgMHgwMDA4LCAweDkwMGUsIDB4NjgxNCwgMHg5MDg0LCAweGZmYzAsIDB4OTEwZCwgMHg2OTE2LAotCTB4MDAwNSwgMHgwMGY2LCAweDAxNTYsIDB4MDE0NiwgMHgwMWQ2LCAweDkwMDYsIDB4MjBhOSwgMHgwMDgwLAotCTB4MjBlOSwgMHgwMDAxLCAweDIwYTEsIDB4MWQwMCwgMHg0MDA0LCAweDIwNzksIDB4MWQwMCwgMHg3ODAzLAotCTB4MjIwMCwgMHg3ODA3LCAweDAwZWYsIDB4NzgwZiwgMHgwMGVmLCAweDc4MTMsIDB4MDEzOCwgMHg3ODIzLAotCTB4ZmZmZiwgMHg3ODI3LCAweGZmZmYsIDB4MDFkZSwgMHgwMTRlLCAweDAxNWUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MjAwMSwgMHgxODAwLCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDIwMDEsIDB4MTlhOCwgMHgwMTE4LAotCTB4MjAwMywgMHgwMDAxLCAweDAwMTAsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MDE1NiwgMHgyMGE5LAotCTB4MDgwMCwgMHgyMDA5LCAweDEwMDAsIDB4OTAwNiwgMHgyMDBhLCAweDgxMDgsIDB4MWYwNCwgMHg2MThjLAotCTB4MDE1ZSwgMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgyMDY5LAotCTB4MTg0NywgMHg5MDA2LCAweGI4MDIsIDB4YjhkNiwgMHhiODA3LCAweDA3MDcsIDB4YjgwYSwgMHhiODBlLAotCTB4YjgxMiwgMHg5MTk4LCAweDM0NzQsIDB4MjMxZCwgMHg5MzljLCAweDAwZmYsIDB4YmIxNiwgMHgwMDE2LAotCTB4MDAyNiwgMHhiODg2LCAweDA4MGMsIDB4YWU4MCwgMHgxMTIwLCAweDkxOTIsIDB4MDA3ZSwgMHgxMjA4LAotCTB4YmI4NiwgMHgyMGE5LCAweDAwMDQsIDB4YjhjNCwgMHgyMGU4LCAweGI5YzgsIDB4OTE5OCwgMHgwMDA2LAotCTB4OTAwNiwgMHgyM2EwLCAweDQwMDQsIDB4MjBhOSwgMHgwMDA0LCAweDkxOTgsIDB4MDAwYSwgMHgyM2EwLAotCTB4NDAwNCwgMHgwMDJlLCAweDAwMWUsIDB4YjgzZSwgMHhiODQyLCAweGI4Y2UsIDB4YjhkMiwgMHhiODVlLAotCTB4Yjg2MiwgMHhiODY2LCAweGI4NmEsIDB4Yjg2ZiwgMHgwMTAwLCAweGI4NzIsIDB4Yjg3NiwgMHhiODdhLAotCTB4Yjg4YSwgMHhiODhlLCAweGI4OTMsIDB4MDAwOCwgMHhiODk2LCAweGI4OWEsIDB4Yjg5ZSwgMHhiOGJlLAotCTB4YjlhMiwgMHgwMDk2LCAweGI4YTQsIDB4OTA0ZCwgMHgwMTEwLCAweDA4MGMsIDB4MTA3ZiwgMHhiOGE3LAotCTB4MDAwMCwgMHgwMDllLCAweDkwMDYsIDB4Yjg0YSwgMHg2ODEwLCAweGI4M2EsIDB4NjgwYywgMHhiODQ2LAotCTB4YjhiYiwgMHgwNTIwLCAweGI4YWMsIDB4OTAwNSwgMHgwMTk4LCAweDAwYzYsIDB4MjA2MCwgMHg5YzgyLAotCTB4MWRkYywgMHgwYTBjLCAweDBkNzksIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxYTBjLAotCTB4MGQ3OSwgMHgwODBjLCAweDhkODcsIDB4MDBjZSwgMHgwOTBjLCAweDkxMjgsIDB4YjhhZiwgMHgwMDAwLAotCTB4NjgxNCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg0MiwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMDNlLAotCTB4MDBkZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE5NzQsIDB4YWU3OCwgMHg5Njg0LAotCTB4M2ZmZiwgMHg5MDgyLCAweDQwMDAsIDB4MWEwNCwgMHg2MjY4LCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LAotCTB4NjI2YywgMHgyMDAxLCAweDE4MGMsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDMsIDB4MTkwNCwgMHg2MjcyLAotCTB4OTE4OCwgMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHgwMTk4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLAotCTB4OTA4ZSwgMHgwMDA2LCAweDExODgsIDB4YjhhNCwgMHg5MDBkLCAweDE5MDQsIDB4NjI4NCwgMHgwODBjLAotCTB4NjY0NCwgMHg5MDA2LCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDAwMDUsIDB4OTAwZSwgMHgwNGI4LAotCTB4MjAwMSwgMHgwMDI4LCAweDkwMGUsIDB4MDQ5OCwgMHg5MDgyLCAweDAwMDYsIDB4MTI5MCwgMHgwODBjLAotCTB4YWU4MCwgMHgxMTYwLCAweGI4YTAsIDB4OTA4NCwgMHhmZjgwLCAweDExNDAsIDB4YjkwMCwgMHhkMWZjLAotCTB4MGQxMCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgxMDAwLCAweDA0MDgsIDB4MjAwMSwgMHgwMDI4LAotCTB4MDBhOCwgMHgyMDA5LCAweDE4MGMsIDB4MjEwYywgMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LAotCTB4MDA2OCwgMHhkMTg0LCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwNDAsIDB4MjAwMSwgMHgwMDI5LAotCTB4YjkwMCwgMHhkMWZjLCAweDAxMTgsIDB4MjAwOSwgMHgxMDAwLCAweDAwNDgsIDB4OTAwZSwgMHgwMDM4LAotCTB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4MDAxOCwgMHgyMDAxLCAweDAwMjksIDB4OTAwZSwgMHg5MDA1LAotCTB4MDEyZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwYywgMHgyMDA0LCAweGQwODQsIDB4MTlkMCwgMHg5MTg4LAotCTB4MTAwMCwgMHgyMTA0LCAweDkwNjUsIDB4MDlhOCwgMHgwODBjLCAweDZiY2QsIDB4MTk5MCwgMHhiODAwLAotCTB4ZDBiYywgMHgwOTc4LCAweDA4MDQsIDB4NjIyYiwgMHgwODBjLCAweDY5ZjAsIDB4MDkwNCwgMHg2MjM0LAotCTB4MDgwNCwgMHg2MjJmLCAweDAwZTYsIDB4MjA3MSwgMHgxOWU5LCAweDcwMDQsIDB4OTA4NiwgMHgwMDAyLAotCTB4MTEyOCwgMHg3MDMwLCAweDkwODAsIDB4MDAwNCwgMHgyMDA0LCAweDliMDYsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBiNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4NzQsIDB4OTA4ZSwgMHgwMGZmLAotCTB4MTEyMCwgMHgyMDAxLCAweDE5NmMsIDB4MjA1YywgMHgwMDYwLCAweGE5NzQsIDB4OTE4MiwgMHgwODAwLAotCTB4MTY5MCwgMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLCAweDAxZDAsIDB4MDgwYywgMHg2YjZkLAotCTB4MTFkMCwgMHgwODBjLCAweGFlZjgsIDB4MDU3MCwgMHgyYjAwLCAweDYwMTIsIDB4MjkwMCwgMHg2MDE2LAotCTB4NjAyMywgMHgwMDA5LCAweDYwMmIsIDB4MDAwMCwgMHhhODc0LCAweDkwOGUsIDB4MDBmZiwgMHgxMTEwLAotCTB4NjAyYiwgMHg4MDAwLCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGFmZWMsIDB4OTAwNiwgMHgwMGIwLAotCTB4MjAwMSwgMHgwMDI4LCAweDAwOTAsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LAorCTB4MDAwMSwgMHg3MDliLCAweDAwMTIsIDB4MDAyOSwgMHgwMDEwLCAweDcwOTMsIDB4MDAwMCwgMHgwMGZlLAorCTB4MDAwNSwgMHgwMGY2LCAweDcwOWIsIDB4MDAxMywgMHgwODBjLCAweDYxMDksIDB4MjA3OSwgMHgwMjQwLAorCTB4NzgzMywgMHgxMTAzLCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLCAweDYxNzcsIDB4MDgwYywgMHg2MTVhLAorCTB4MTE3MCwgMHg3MDg0LCAweDkwMDUsIDB4MTE1OCwgMHg3MTVjLCAweDkxODYsIDB4ZmZmZiwgMHgwMTM4LAorCTB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4NWZhZiwgMHgwMTY4LCAweDA4MGMsIDB4NjEzMCwgMHgyMGE5LAorCTB4MDAwOCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAorCTB4MDI0ZSwgMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDYwMmMsIDB4MDBmZSwgMHgwMDA1LAorCTB4MDBmNiwgMHg3MDkwLCAweDkwMDUsIDB4MDUwMCwgMHgyMDExLCAweDYwMDIsIDB4MDgwYywgMHg4OTkzLAorCTB4OTA4NiwgMHgwMDE0LCAweDExYjgsIDB4MDgwYywgMHg2MTc3LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLAorCTB4OTI5NiwgMHgxMTA0LCAweDExNzgsIDB4NzgzNCwgMHg5MDA1LCAweDExNjAsIDB4N2EzOCwgMHhkMmZjLAorCTB4MDEyOCwgMHg3MGM0LCAweDkwMDUsIDB4MTExMCwgMHg3MGM3LCAweDAwMDEsIDB4NzA5YiwgMHgwMDE0LAorCTB4MDAyOSwgMHgwMDEwLCAweDcwOTMsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDliLAorCTB4MDAxNSwgMHgwODBjLCAweDYxMDksIDB4MjA3OSwgMHgwMjQwLCAweDc4MzMsIDB4MTEwNCwgMHg3ODM3LAorCTB4MDAwMCwgMHgwODBjLCAweDYxNzcsIDB4MDgwYywgMHg2MTVhLCAweDExYjgsIDB4NzA4NCwgMHg5MDA1LAorCTB4MTFhMCwgMHg3MTY0LCAweDkxODYsIDB4ZmZmZiwgMHgwMTgwLCAweDkxODAsIDB4MzQ4ZSwgMHgyMDBkLAorCTB4OTE4YywgMHhmZjAwLCAweDgxMGYsIDB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4NWZhZiwgMHgwMTgwLAorCTB4MDgwYywgMHg1MTJlLCAweDAxMTAsIDB4MDgwYywgMHgyNmY1LCAweDIwYTksIDB4MDAwOCwgMHgyMGUxLAorCTB4MDAwMCwgMHgyMDk5LCAweDAyNmUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0ZSwgMHg0MDAzLAorCTB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NjAyYywgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDkwLAorCTB4OTAwNSwgMHgwNWYwLCAweDIwMTEsIDB4NjAwMiwgMHgwODBjLCAweDg5OTMsIDB4OTA4NiwgMHgwMDE0LAorCTB4MTVhOCwgMHgwODBjLCAweDYxNzcsIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA1LAorCTB4MTU2OCwgMHg3ODM0LCAweDkwODQsIDB4MDEwMCwgMHgyMDExLCAweDAxMDAsIDB4OTIxZSwgMHgxMTY4LAorCTB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4NjFhMiwgMHg3YTM4LCAweGQyZmMsIDB4MDEyOCwgMHg3MGM0LAorCTB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHgwMDgwLCAweDkwMDUsIDB4MTFiOCwgMHg3YTM4LAorCTB4ZDJmYywgMHgwMTI4LCAweDcwYzQsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzcsIDB4MDAwMSwgMHg5MDg1LAorCTB4MDAwMSwgMHgwODBjLCAweDYxYTIsIDB4NzA5NywgMHgwMDAwLCAweDdhMzgsIDB4ZDJmNCwgMHgwMTEwLAorCTB4NzBkZiwgMHgwMDA4LCAweDcwOWIsIDB4MDAxNiwgMHgwMDI5LCAweDAwMTAsIDB4NzA5MywgMHgwMDAwLAorCTB4MDBmZSwgMHgwMDA1LCAweDA4MGMsIDB4YWFmMSwgMHgwODBjLCAweDYxNzcsIDB4MjBlMSwgMHgwMDAwLAorCTB4MjA5OSwgMHgwMjYwLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNDAsIDB4MjBhOSwgMHgwMDBlLAorCTB4NDAwMywgMHgyMDExLCAweDAyNmQsIDB4MjIwNCwgMHg5MDg0LCAweDAxMDAsIDB4MjAxMSwgMHgwMjRkLAorCTB4MjAxMiwgMHgyMDExLCAweDAyNmUsIDB4NzA5YiwgMHgwMDE3LCAweDA4MGMsIDB4NjE1YSwgMHgxMTUwLAorCTB4NzA4NCwgMHg5MDA1LCAweDExMzgsIDB4MDgwYywgMHg1ZjIyLCAweDExODgsIDB4OTA4NSwgMHgwMDAxLAorCTB4MDgwYywgMHgyNmY1LCAweDIwYTksIDB4MDAwOCwgMHgwODBjLCAweDYxNzcsIDB4MjBlMSwgMHgwMDAwLAorCTB4MjA5OSwgMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsIDB4NDAwMywgMHg2MGMzLAorCTB4MDAxNCwgMHgwODBjLCAweDYwMmMsIDB4MDAxMCwgMHgwODBjLCAweDVhN2MsIDB4MDAwNSwgMHgwMGY2LAorCTB4NzA5MCwgMHg5MDA1LCAweDAxZDgsIDB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4ODk5MywgMHg5MDg2LAorCTB4MDA4NCwgMHgxMTkwLCAweDA4MGMsIDB4NjE3NywgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LAorCTB4MTEwNiwgMHgxMTUwLCAweDc4MzQsIDB4OTAwNSwgMHgxMTM4LCAweDkwMDYsIDB4MDgwYywgMHg2MWEyLAorCTB4NzA5YiwgMHgwMDE4LCAweDAwMjksIDB4MDAxMCwgMHg3MDkzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LAorCTB4MDBmNiwgMHg3MDliLCAweDAwMTksIDB4MDgwYywgMHg2MTA5LCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLAorCTB4MTEwNiwgMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg2MTc3LCAweDIwMDksIDB4MDI2ZSwgMHgyMDM5LAorCTB4MWQwZSwgMHgyMGE5LCAweDAwNDAsIDB4MjEzZSwgMHg4NzM4LCAweDgxMDgsIDB4OTE4NiwgMHgwMjgwLAorCTB4MTEyOCwgMHg2ODE0LCAweDgwMDAsIDB4NjgxNiwgMHgyMDA5LCAweDAyNjAsIDB4MWYwNCwgMHg1ZThiLAorCTB4MjAzOSwgMHgxZDBlLCAweDA4MGMsIDB4NjE1YSwgMHgxMWU4LCAweDI3MjgsIDB4MjUxNCwgMHg4MjA3LAorCTB4OTA4NCwgMHgwMGZmLCAweDgwMDAsIDB4MjAxOCwgMHg5Mjk0LCAweDAwZmYsIDB4ODAwNywgMHg5MjA1LAorCTB4MjAyYSwgMHg3MDYwLCAweDIzMTAsIDB4ODIxNCwgMHg5MmEwLCAweDFkMGUsIDB4MjQxNCwgMHg5MzhjLAorCTB4MDAwMSwgMHgwMTE4LCAweDkyOTQsIDB4ZmYwMCwgMHgwMDE4LCAweDkyOTQsIDB4MDBmZiwgMHg4MDA3LAorCTB4OTIxNSwgMHgyMjIyLCAweDIwYTksIDB4MDA0MCwgMHgyMDA5LCAweDAyNGUsIDB4MjcwZSwgMHg4NzM4LAorCTB4ODEwOCwgMHg5MTg2LCAweDAyNjAsIDB4MTEyOCwgMHg2ODEwLCAweDgwMDAsIDB4NjgxMiwgMHgyMDA5LAorCTB4MDI0MCwgMHgxZjA0LCAweDVlYmUsIDB4NjBjMywgMHgwMDg0LCAweDA4MGMsIDB4NjAyYywgMHgwMGZlLAorCTB4MDAwNSwgMHgwMGY2LCAweDcwOTAsIDB4OTAwNSwgMHgwMWUwLCAweDIwMTEsIDB4NjAwMiwgMHgwODBjLAorCTB4ODk5MywgMHg5MDg2LCAweDAwODQsIDB4MTE5OCwgMHgwODBjLCAweDYxNzcsIDB4MjA3OSwgMHgwMjYwLAorCTB4N2EzMCwgMHg5Mjk2LCAweDExMDcsIDB4MTE1OCwgMHg3ODM0LCAweDkwMDUsIDB4MTE0MCwgMHg3MDk3LAorCTB4MDAwMSwgMHgwODBjLCAweDYwY2QsIDB4NzA5YiwgMHgwMDFhLCAweDAwMjksIDB4MDAxMCwgMHg3MDkzLAorCTB4MDAwMCwgMHgwMGZlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4NjFhMiwgMHg3MDliLAorCTB4MDAxYiwgMHgwODBjLCAweGFhZjEsIDB4MDgwYywgMHg2MTc3LCAweDIwMTEsIDB4MDI2MCwgMHgyMDA5LAorCTB4MDI0MCwgMHg3NDkwLCAweDk0ODAsIDB4MDAxOCwgMHg5MDgwLCAweDAwMDcsIDB4OTA4NCwgMHgwM2Y4LAorCTB4ODAwNCwgMHgyMGE4LCAweDIyMGUsIDB4ODIxMCwgMHg4MTA4LCAweDkxODYsIDB4MDI2MCwgMHgxMTUwLAorCTB4NjgxMCwgMHg4MDAwLCAweDY4MTIsIDB4MjAwOSwgMHgwMjQwLCAweDY4MTQsIDB4ODAwMCwgMHg2ODE2LAorCTB4MjAxMSwgMHgwMjYwLCAweDFmMDQsIDB4NWYwYSwgMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg2MDJjLAorCTB4MDAwNSwgMHgwMDA1LCAweDAwODYsIDB4MDA5NiwgMHgyMDI5LCAweDE4NDgsIDB4MjUyYywgMHgyMGE5LAorCTB4MDAwOCwgMHgyMDQxLCAweDFkMGUsIDB4MjBlOSwgMHgwMDAxLCAweDI4YTAsIDB4MDgwYywgMHg2MTc3LAorCTB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHg0MDAzLCAweDIwYTksIDB4MDAwOCwgMHgyMDExLAorCTB4MDAwNywgMHhkNWQ0LCAweDAxMDgsIDB4OTAxNiwgMHgyODAwLCAweDkyMDAsIDB4MjAwYywgMHg5MWE2LAorCTB4ZmZmZiwgMHgxMTQ4LCAweGQ1ZDQsIDB4MDExMCwgMHg4MjEwLCAweDAwMDgsIDB4ODIxMSwgMHgxZjA0LAorCTB4NWYzYywgMHgwODA0LCAweDVmYWIsIDB4ODJmZiwgMHgxMTYwLCAweGQ1ZDQsIDB4MDEyMCwgMHg5MWE2LAorCTB4M2ZmZiwgMHgwZDkwLCAweDAwMjAsIDB4OTFhNiwgMHgzZmZmLCAweDA5MDQsIDB4NWZhYiwgMHg5MThkLAorCTB4YzAwMCwgMHgyMGE5LCAweDAwMTAsIDB4MjAxOSwgMHgwMDAxLCAweGQ1ZDQsIDB4MDExMCwgMHgyMDE5LAorCTB4MDAxMCwgMHgyMTIwLCAweGQ1ZDQsIDB4MDExMCwgMHg4NDIzLCAweDAwMDgsIDB4ODQyNCwgMHgxMjQwLAorCTB4ZDVkNCwgMHgwMTEwLCAweDgzMTksIDB4MDAwOCwgMHg4MzE4LCAweDFmMDQsIDB4NWY2MiwgMHgwNGQ4LAorCTB4MjNhOCwgMHgyMDIxLCAweDAwMDEsIDB4ODQyNiwgMHg4NDI1LCAweDFmMDQsIDB4NWY3NCwgMHgyMzI4LAorCTB4ODUyOSwgMHg5MmJlLCAweDAwMDcsIDB4MDE1OCwgMHgwMDA2LCAweDIwMzksIDB4MDAwNywgMHgyMjAwLAorCTB4OTczYSwgMHgwMDBlLCAweDI3YTgsIDB4OTVhOCwgMHgwMDEwLCAweDFmMDQsIDB4NWY4MywgMHg3NTVlLAorCTB4OTVjOCwgMHgzNDhlLCAweDI5MmQsIDB4OTVhYywgMHgwMGZmLCAweDc1ODIsIDB4NjUzMiwgMHg2NTM2LAorCTB4MDAxNiwgMHgyNTA4LCAweDA4MGMsIDB4MjZkNSwgMHgwMDFlLCAweDYwZTcsIDB4MDAwMCwgMHg2NWVhLAorCTB4MjAxOCwgMHgyMzA0LCAweDk0MDUsIDB4MjAxYSwgMHg3MDg3LCAweDAwMDEsIDB4MjBlOSwgMHgwMDAwLAorCTB4MjBhMSwgMHgwMjRlLCAweDIwZTEsIDB4MDAwMSwgMHgyODk4LCAweDIwYTksIDB4MDAwOCwgMHg0MDAzLAorCTB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMDllLCAweDAwOGUsIDB4MDAwNSwgMHgwMTU2LAorCTB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgyMmE4LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LAorCTB4MDI2ZSwgMHgyMGU5LCAweDAwMDAsIDB4MjAxMSwgMHgwMjRlLCAweDIyYTAsIDB4NDAwMywgMHgwMTRlLAorCTB4MDEzZSwgMHgwMWRlLCAweDAxY2UsIDB4MDE1ZSwgMHgyMTE4LCAweDkwMjYsIDB4MjAwMSwgMHgwMDA3LAorCTB4OTM5YSwgMHgwMDEwLCAweDAyMTgsIDB4ODQyMCwgMHg4MDAxLCAweDBjZDAsIDB4MjExOCwgMHg4NGZmLAorCTB4MDEyMCwgMHg5MzlhLCAweDAwMTAsIDB4ODQyMSwgMHgxZGUwLCAweDIwMjEsIDB4MDAwMSwgMHg4M2ZmLAorCTB4MDExOCwgMHg4NDIzLCAweDgzMTksIDB4MWRlOCwgMHg5MjM4LCAweDIwMjksIDB4MDI2ZSwgMHg5NTI4LAorCTB4MjUwNCwgMHg5NDJjLCAweDExYjgsIDB4OTQwNSwgMHgyMDNhLCAweDcxNWUsIDB4OTFhMCwgMHgzNDhlLAorCTB4MjQyZCwgMHg5NWFjLCAweDAwZmYsIDB4NzU4MiwgMHg2NTMyLCAweDY1MzYsIDB4MDAxNiwgMHgyNTA4LAorCTB4MDgwYywgMHgyNmQ1LCAweDAwMWUsIDB4NjBlNywgMHgwMDAwLCAweDY1ZWEsIDB4NzA4NywgMHgwMDAxLAorCTB4OTA4NCwgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzA4YiwgMHgwMDAwLAorCTB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4MjA3MSwgMHgwMTQwLAorCTB4MDgwYywgMHg2MGJjLCAweDA4MGMsIDB4YTJhMCwgMHg3MDA0LCAweDkwODQsIDB4NDAwMCwgMHgwMTEwLAorCTB4MDgwYywgMHgyYWE5LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgyNiwgMHgyMDczLAorCTB4MDAwMCwgMHg3ODQwLCAweDAwMjYsIDB4MDAxNiwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg2MTE5LAorCTB4MDAxZSwgMHg5MDk0LCAweDAwMTAsIDB4OTI4NSwgMHgwMDgwLCAweDc4NDIsIDB4N2E0MiwgMHgwMDJlLAorCTB4MDEyZSwgMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLAorCTB4MmEwNCwgMHgwMjI4LCAweDIwMTEsIDB4MDEwMSwgMHgyMjA0LCAweGMwYzUsIDB4MjAxMiwgMHgyMDExLAorCTB4MTlmNSwgMHgyMDEzLCAweDAwMDAsIDB4NzA5MywgMHgwMDAwLCAweDAxMmUsIDB4NjBhMywgMHgwMDU2LAorCTB4NjBhNywgMHg5NTc1LCAweDA4MGMsIDB4YTI5MywgMHg2MTQ0LCAweGQxODQsIDB4MDEyMCwgMHg3MTk4LAorCTB4OTE4ZCwgMHgyMDAwLCAweDAwMTgsIDB4NzE4YywgMHg5MThkLCAweDEwMDAsIDB4MjAxMSwgMHgxOTk5LAorCTB4MjExMiwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4OGE1ZCwgMHgwMDA1LAorCTB4MDAxNiwgMHgwMDI2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhhY2ZjLAorCTB4MDgwYywgMHhiMDliLCAweDA4MGMsIDB4YWQxOCwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg2MTE5LAorCTB4MjA2MSwgMHgxYTA0LCAweDkwMGUsIDB4NjExYSwgMHg2MTFlLCAweDYxN2EsIDB4NjE3ZSwgMHgyMDYxLAorCTB4MTgwMCwgMHg2MDAzLCAweDAwMDEsIDB4MjA2MSwgMHgwMTAwLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLAorCTB4MDAxMCwgMHgyMDA5LCAweDE5OTksIDB4MjAwYiwgMHgwMDAwLCAweDIwMDksIDB4MDAyZCwgMHgyMDExLAorCTB4NjA4OCwgMHgwODBjLCAweDg5ODcsIDB4MDEyZSwgMHgwMGNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAorCTB4MDBlNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA0NzEsIDB4MjA3MSwgMHgwMTAwLAorCTB4MDgwYywgMHhhMmEwLCAweDIwNzEsIDB4MDE0MCwgMHg3MDA0LCAweDkwODQsIDB4NDAwMCwgMHgwMTEwLAorCTB4MDgwYywgMHgyYWE5LCAweDA4MGMsIDB4NzdhNiwgMHgwMTg4LCAweDA4MGMsIDB4NzdjMSwgMHgxMTcwLAorCTB4MDgwYywgMHg3YWMwLCAweDAwMTYsIDB4MDgwYywgMHgyN2E0LCAweDIwMDEsIDB4MTk2ZCwgMHgyMTAyLAorCTB4MDAxZSwgMHgwODBjLCAweDdhYmIsIDB4MDgwYywgMHg3NmNkLCAweDAwNTAsIDB4MjAwOSwgMHgwMDAxLAorCTB4MDgwYywgMHgyYTg1LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2MzEsIDB4MDgwYywgMHg2MDU4LAorCTB4MDEyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGUsIDB4MjAwNCwgMHhkMGJjLAorCTB4MDE1OCwgMHgwMDI2LCAweDAwMzYsIDB4MjAxMSwgMHg4MDE3LCAweDIwMDEsIDB4MTk5OSwgMHgyMDFjLAorCTB4MDgwYywgMHg0Y2ExLCAweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDIwYTksIDB4MDAxMiwgMHgyMGU5LAorCTB4MDAwMSwgMHgyMGExLCAweDFkODAsIDB4MDgwYywgMHg2MTc3LCAweDIwZTksIDB4MDAwMCwgMHgyMDk5LAorCTB4MDI2ZSwgMHgwMDk5LCAweDIwYTksIDB4MDAyMCwgMHgwODBjLCAweDYxNzEsIDB4MjA5OSwgMHgwMjYwLAorCTB4MjBhMSwgMHgxZDkyLCAweDAwNTEsIDB4MjBhOSwgMHgwMDBlLCAweDA4MGMsIDB4NjE3NCwgMHgyMDk5LAorCTB4MDI2MCwgMHgyMGExLCAweDFkYjIsIDB4MDAwOSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgzNDEwLAorCTB4MzMwOCwgMHgyMTA0LCAweDgwMDcsIDB4MjAxMiwgMHg4MTA4LCAweDgyMTAsIDB4MWYwNCwgMHg2MGYxLAorCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHhhYWYxLCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LAorCTB4MWQwMCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksIDB4MDAwYywgMHg0MDAzLAorCTB4MDAwNSwgMHgwODBjLCAweGFhZjEsIDB4MDgwYywgMHg2MTc3LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LAorCTB4MDI2MCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksIDB4MDAwYywgMHg0MDAzLAorCTB4MDAwNSwgMHgwMGM2LCAweDAwMDYsIDB4MjA2MSwgMHgwMTAwLCAweDgxMGYsIDB4MjAwMSwgMHgxODM0LAorCTB4MjAwNCwgMHg5MDA1LCAweDExMzgsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLAorCTB4OTEwNSwgMHgwMDEwLCAweDkxODUsIDB4MDBmNywgMHg2MDRhLCAweDAwMGUsIDB4MDBjZSwgMHgwMDA1LAorCTB4MDAxNiwgMHgwMDQ2LCAweDA4MGMsIDB4NmMwZCwgMHgwMTU4LCAweDkwMDYsIDB4MjAyMCwgMHgyMDA5LAorCTB4MDAyYSwgMHgwODBjLCAweGVhOGQsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsIDB4YzE5NSwgMHgyMTAyLAorCTB4MjAxOSwgMHgwMDJhLCAweDkwMGUsIDB4MDgwYywgMHgzMmRhLCAweDA4MGMsIDB4ZDY0NSwgMHgwMTQwLAorCTB4MDAzNiwgMHgyMDE5LCAweGZmZmYsIDB4MjAyMSwgMHgwMDA3LCAweDA4MGMsIDB4NGU1OCwgMHgwMDNlLAorCTB4MDA0ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHg2MDU4LCAweDcwOWIsIDB4MDAwMCwgMHg3MDkzLAorCTB4MDAwMCwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsIDB4ZDA5YywgMHgwMTAwLAorCTB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDAxLAorCTB4MDEwMSwgMHgyMDBjLCAweDkxOGQsIDB4MDAwNiwgMHgyMTAyLCAweDAxMmUsIDB4MDAxZSwgMHgwMDBlLAorCTB4MDAwNSwgMHgyMDA5LCAweDAwMDEsIDB4MDAyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDAwOCwgMHg5MDBlLAorCTB4NjgxNCwgMHg5MDg0LCAweGZmYzAsIDB4OTEwZCwgMHg2OTE2LCAweDAwMDUsIDB4MDBmNiwgMHgwMTU2LAorCTB4MDE0NiwgMHgwMWQ2LCAweDkwMDYsIDB4MjBhOSwgMHgwMDgwLCAweDIwZTksIDB4MDAwMSwgMHgyMGExLAorCTB4MWQwMCwgMHg0MDA0LCAweDIwNzksIDB4MWQwMCwgMHg3ODAzLCAweDIyMDAsIDB4NzgwNywgMHgwMGVmLAorCTB4NzgwZiwgMHgwMGVmLCAweDc4MTMsIDB4MDEzOCwgMHg3ODIzLCAweGZmZmYsIDB4NzgyNywgMHhmZmZmLAorCTB4MDFkZSwgMHgwMTRlLCAweDAxNWUsIDB4MDBmZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwMCwgMHgyMDAzLAorCTB4MDAwMSwgMHgwMDA1LCAweDIwMDEsIDB4MTlhNywgMHgwMTE4LCAweDIwMDMsIDB4MDAwMSwgMHgwMDEwLAorCTB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MDE1NiwgMHgyMGE5LCAweDA4MDAsIDB4MjAwOSwgMHgxMDAwLAorCTB4OTAwNiwgMHgyMDBhLCAweDgxMDgsIDB4MWYwNCwgMHg2MWIxLCAweDAxNWUsIDB4MDAwNSwgMHgwMGQ2LAorCTB4MDAzNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgyMDY5LCAweDE4NDcsIDB4OTAwNiwgMHhiODAyLAorCTB4YjhkNiwgMHhiODA3LCAweDA3MDcsIDB4YjgwYSwgMHhiODBlLCAweGI4MTIsIDB4OTE5OCwgMHgzNDhlLAorCTB4MjMxZCwgMHg5MzljLCAweDAwZmYsIDB4YmIxNiwgMHgwMDE2LCAweDAwMjYsIDB4Yjg4NiwgMHgwODBjLAorCTB4YjA5NCwgMHgxMTIwLCAweDkxOTIsIDB4MDA3ZSwgMHgxMjA4LCAweGJiODYsIDB4MjBhOSwgMHgwMDA0LAorCTB4YjhjNCwgMHgyMGU4LCAweGI5YzgsIDB4OTE5OCwgMHgwMDA2LCAweDkwMDYsIDB4MjNhMCwgMHg0MDA0LAorCTB4MjBhOSwgMHgwMDA0LCAweDkxOTgsIDB4MDAwYSwgMHgyM2EwLCAweDQwMDQsIDB4MDAyZSwgMHgwMDFlLAorCTB4YjgzZSwgMHhiODQyLCAweGI4Y2UsIDB4YjhkMiwgMHhiODVlLCAweGI4NjIsIDB4Yjg2NiwgMHhiODZhLAorCTB4Yjg2ZiwgMHgwMTAwLCAweGI4NzIsIDB4Yjg3NiwgMHhiODdhLCAweGI4OGEsIDB4Yjg4ZSwgMHhiODkzLAorCTB4MDAwOCwgMHhiODk2LCAweGI4OWEsIDB4Yjg5ZSwgMHhiOGJlLCAweGI5YTIsIDB4MDA5NiwgMHhiOGE0LAorCTB4OTA0ZCwgMHgwMTEwLCAweDA4MGMsIDB4MTA4YiwgMHhiOGE3LCAweDAwMDAsIDB4MDA5ZSwgMHg5MDA2LAorCTB4Yjg0YSwgMHg2ODEwLCAweGI4M2EsIDB4NjgwYywgMHhiODQ2LCAweGI4YmIsIDB4MDUyMCwgMHhiOGFjLAorCTB4OTAwNSwgMHgwMTk4LCAweDAwYzYsIDB4MjA2MCwgMHg5YzgyLCAweDFkZGMsIDB4MGEwYywgMHgwZDg1LAorCTB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxYTBjLCAweDBkODUsIDB4MDgwYywgMHg4ZWVlLAorCTB4MDBjZSwgMHgwOTBjLCAweDkyOGQsIDB4YjhhZiwgMHgwMDAwLCAweDY4MTQsIDB4OTA4NCwgMHgwMGZmLAorCTB4Yjg0MiwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMDNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweGE5NzQsIDB4YWU3OCwgMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLAorCTB4MWEwNCwgMHg2MjhkLCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LCAweDYyOTEsIDB4MjAwMSwgMHgxODBjLAorCTB4MjAwNCwgMHg5MDg0LCAweDAwMDMsIDB4MTkwNCwgMHg2Mjk3LCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LAorCTB4OTA1ZCwgMHgwMTk4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwOGUsIDB4MDAwNiwgMHgxMTg4LAorCTB4YjhhNCwgMHg5MDBkLCAweDE5MDQsIDB4NjJhOSwgMHgwODBjLCAweDY2NjksIDB4OTAwNiwgMHgwMTJlLAorCTB4MDAwNSwgMHgyMDAxLCAweDAwMDUsIDB4OTAwZSwgMHgwNGI4LCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLAorCTB4MDQ5OCwgMHg5MDgyLCAweDAwMDYsIDB4MTI5MCwgMHgwODBjLCAweGIwOTQsIDB4MTE2MCwgMHhiOGEwLAorCTB4OTA4NCwgMHhmZjgwLCAweDExNDAsIDB4YjkwMCwgMHhkMWZjLCAweDBkMTAsIDB4MjAwMSwgMHgwMDI5LAorCTB4MjAwOSwgMHgxMDAwLCAweDA0MDgsIDB4MjAwMSwgMHgwMDI4LCAweDAwYTgsIDB4MjAwOSwgMHgxODBjLAorCTB4MjEwYywgMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwNjgsIDB4ZDE4NCwgMHgwMTE4LAorCTB4MjAwMSwgMHgwMDA0LCAweDAwNDAsIDB4MjAwMSwgMHgwMDI5LCAweGI5MDAsIDB4ZDFmYywgMHgwMTE4LAorCTB4MjAwOSwgMHgxMDAwLCAweDAwNDgsIDB4OTAwZSwgMHgwMDM4LCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLAorCTB4MDAxOCwgMHgyMDAxLCAweDAwMjksIDB4OTAwZSwgMHg5MDA1LCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLAorCTB4MTgwYywgMHgyMDA0LCAweGQwODQsIDB4MTlkMCwgMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDY1LAorCTB4MDlhOCwgMHgwODBjLCAweDZjMTEsIDB4MTk5MCwgMHhiODAwLCAweGQwYmMsIDB4MDk3OCwgMHgwODA0LAorCTB4NjI1MCwgMHgwODBjLCAweDZhMmEsIDB4MDkwNCwgMHg2MjU5LCAweDA4MDQsIDB4NjI1NCwgMHgwMGU2LAorCTB4MjA3MSwgMHgxOWU4LCAweDcwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDExMjgsIDB4NzAzMCwgMHg5MDgwLAorCTB4MDAwNCwgMHgyMDA0LCAweDliMDYsIDB4MDBlZSwgMHgwMDA1LCAweDAwYjYsIDB4MDBlNiwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweGE4NzQsIDB4OTA4ZSwgMHgwMGZmLCAweDExMjAsIDB4MjAwMSwgMHgxOTZiLAorCTB4MjA1YywgMHgwMDYwLCAweGE5NzQsIDB4OTE4MiwgMHgwODAwLCAweDE2OTAsIDB4OTE4OCwgMHgxMDAwLAorCTB4MjEwNCwgMHg5MDVkLCAweDAxZDAsIDB4MDgwYywgMHg2YmIxLCAweDExZDAsIDB4MDgwYywgMHhiMTE2LAorCTB4MDU3MCwgMHgyYjAwLCAweDYwMTIsIDB4MjkwMCwgMHg2MDE2LCAweDYwMjMsIDB4MDAwOSwgMHg2MDJiLAorCTB4MDAwMCwgMHhhODc0LCAweDkwOGUsIDB4MDBmZiwgMHgxMTEwLCAweDYwMmIsIDB4ODAwMCwgMHgyMDA5LAorCTB4MDA0MywgMHgwODBjLCAweGIyMGEsIDB4OTAwNiwgMHgwMGIwLCAweDIwMDEsIDB4MDAyOCwgMHgwMDkwLAorCTB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDM4LAorCTB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDEwLCAweDIwMDEsIDB4MDAyOSwgMHgwMDEwLAorCTB4MjAwMSwgMHgwMDI5LCAweDkwMDUsIDB4MDEyZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDAxLAorCTB4MDAyYywgMHgwY2MwLCAweDAwYjYsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhhOTc0LAorCTB4OTE4MiwgMHgwODAwLCAweDFhMDQsIDB4NjM4OCwgMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLAorCTB4MDkwNCwgMHg2MzYwLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdmLCAweDAxOTAsIDB4YTg3YywgMHhkMGZjLAorCTB4MTE3OCwgMHgwODBjLCAweDZjMTksIDB4MDE2MCwgMHhhOTk0LCAweDgxZmYsIDB4MDEzMCwgMHg5MDhlLAorCTB4MDAwNCwgMHgwMTMwLCAweDkwOGUsIDB4MDAwNSwgMHgwMTE4LCAweDA4MGMsIDB4NmMxMSwgMHgxNTk4LAorCTB4YTg3YywgMHhkMGZjLCAweDAxZTAsIDB4YTg5NCwgMHg5MDA1LCAweDAxYzgsIDB4MjA2MCwgMHgwMDI2LAorCTB4MjAxMCwgMHgwODBjLCAweGNmMDksIDB4MDAyZSwgMHgxMTIwLCAweDIwMDEsIDB4MDAwOCwgMHgwODA0LAorCTB4NjM4YSwgMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwMTIwLCAweDIwMDEsIDB4MDAwOCwgMHgwODA0LAorCTB4NjM4YSwgMHg2MDFhLCAweDYwMDMsIDB4MDAwOCwgMHgyOTAwLCAweDYwMTYsIDB4MDA1OCwgMHgwODBjLAorCTB4YjExNiwgMHgwNWU4LCAweDJiMDAsIDB4NjAxMiwgMHgyOTAwLCAweDYwMTYsIDB4NjAwYiwgMHhmZmZmLAorCTB4NjAyMywgMHgwMDBhLCAweDIwMDksIDB4MDAwMywgMHgwODBjLCAweGIyMGEsIDB4OTAwNiwgMHgwNDU4LAorCTB4MjAwMSwgMHgwMDI4LCAweDA0MzgsIDB4OTA4MiwgMHgwMDA2LCAweDEyOTAsIDB4MDgwYywgMHhiMDk0LAorCTB4MTE2MCwgMHhiOGEwLCAweDkwODQsIDB4ZmY4MCwgMHgxMTQwLCAweGI5MDAsIDB4ZDFmYywgMHgwOTAwLAorCTB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwMGE4LCAweDIwMDEsIDB4MDAyOCwgMHgwMDkwLAorCTB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDUwLAorCTB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDI4LCAweDIwMDEsIDB4MDAyOSwgMHgwMDEwLAorCTB4MjAwMSwgMHgwMDI5LCAweDkwMDUsIDB4MDEyZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDAxLAorCTB4MDAyYywgMHgwY2MwLCAweDAwZjYsIDB4MDBiNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhhOGUwLAorCTB4OTAwNSwgMHgxNTUwLCAweGE4ZGMsIDB4OTA4MiwgMHgwMTAxLCAweDE2MzAsIDB4YThjOCwgMHg5MDA1LAorCTB4MTUxOCwgMHhhOGM0LCAweDkwODIsIDB4MDEwMSwgMHgxMmY4LCAweGE5NzQsIDB4MjA3OSwgMHgxODAwLAorCTB4OTE4MiwgMHgwODAwLCAweDEyZTgsIDB4NzgzMCwgMHg5MDg0LCAweDAwMDMsIDB4MTEzMCwgMHhhYTk4LAorCTB4YWI5NCwgMHhhODc4LCAweDkwODQsIDB4MDAwNywgMHgwMGVhLCAweDc5MzAsIDB4ZDE4YywgMHgwMTE4LAogCTB4MjAwMSwgMHgwMDA0LCAweDAwMzgsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDEwLAotCTB4MjAwMSwgMHgwMDI5LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDkwMDUsIDB4MDEyZSwgMHgwMGVlLAotCTB4MDBiZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAyYywgMHgwY2MwLCAweDAwYjYsIDB4MDBlNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweGE5NzQsIDB4OTE4MiwgMHgwODAwLCAweDFhMDQsIDB4NjM2MywgMHg5MTg4LAotCTB4MTAwMCwgMHgyMTA0LCAweDkwNWQsIDB4MDkwNCwgMHg2MzNiLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdmLAotCTB4MDE5MCwgMHhhODdjLCAweGQwZmMsIDB4MTE3OCwgMHgwODBjLCAweDZiZDUsIDB4MDE2MCwgMHhhOTk0LAotCTB4ODFmZiwgMHgwMTMwLCAweDkwOGUsIDB4MDAwNCwgMHgwMTMwLCAweDkwOGUsIDB4MDAwNSwgMHgwMTE4LAotCTB4MDgwYywgMHg2YmNkLCAweDE1OTgsIDB4YTg3YywgMHhkMGZjLCAweDAxZTAsIDB4YTg5NCwgMHg5MDA1LAotCTB4MDFjOCwgMHgyMDYwLCAweDAwMjYsIDB4MjAxMCwgMHgwODBjLCAweGNjMjEsIDB4MDAyZSwgMHgxMTIwLAotCTB4MjAwMSwgMHgwMDA4LCAweDA4MDQsIDB4NjM2NSwgMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwMTIwLAotCTB4MjAwMSwgMHgwMDA4LCAweDA4MDQsIDB4NjM2NSwgMHg2MDFhLCAweDYwMDMsIDB4MDAwOCwgMHgyOTAwLAotCTB4NjAxNiwgMHgwMDU4LCAweDA4MGMsIDB4YWVmOCwgMHgwNWU4LCAweDJiMDAsIDB4NjAxMiwgMHgyOTAwLAotCTB4NjAxNiwgMHg2MDBiLCAweGZmZmYsIDB4NjAyMywgMHgwMDBhLCAweDIwMDksIDB4MDAwMywgMHgwODBjLAotCTB4YWZlYywgMHg5MDA2LCAweDA0NTgsIDB4MjAwMSwgMHgwMDI4LCAweDA0MzgsIDB4OTA4MiwgMHgwMDA2LAotCTB4MTI5MCwgMHgwODBjLCAweGFlODAsIDB4MTE2MCwgMHhiOGEwLCAweDkwODQsIDB4ZmY4MCwgMHgxMTQwLAotCTB4YjkwMCwgMHhkMWZjLCAweDA5MDAsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwMGE4LAotCTB4MjAwMSwgMHgwMDI4LCAweDAwOTAsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LAotCTB4MjAwMSwgMHgwMDA0LCAweDAwNTAsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDI4LAotCTB4MjAwMSwgMHgwMDI5LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDkwMDUsIDB4MDEyZSwgMHgwMGVlLAotCTB4MDBiZSwgMHgwMDA1LCAweDIwMDEsIDB4MDAyYywgMHgwY2MwLCAweDAwZjYsIDB4MDBiNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweGE4ZTAsIDB4OTAwNSwgMHgxNTUwLCAweGE4ZGMsIDB4OTA4MiwgMHgwMTAxLAotCTB4MTYzMCwgMHhhOGM4LCAweDkwMDUsIDB4MTUxOCwgMHhhOGM0LCAweDkwODIsIDB4MDEwMSwgMHgxMmY4LAotCTB4YTk3NCwgMHgyMDc5LCAweDE4MDAsIDB4OTE4MiwgMHgwODAwLCAweDEyZTgsIDB4NzgzMCwgMHg5MDg0LAotCTB4MDAwMywgMHgxMTMwLCAweGFhOTgsIDB4YWI5NCwgMHhhODc4LCAweDkwODQsIDB4MDAwNywgMHgwMGVhLAotCTB4NzkzMCwgMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMzgsIDB4ZDE4NCwgMHgwMTE4LAotCTB4MjAwMSwgMHgwMDA0LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4MDAzOCwgMHgyMDAxLAotCTB4MDAyYywgMHg5MDBlLCAweDAwMTgsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4OTAwNiwgMHgwMDA4LAotCTB4OTAwNSwgMHgwMTJlLCAweDAwYmUsIDB4MDBmZSwgMHgwMDA1LCAweDYzZmEsIDB4NjNiNSwgMHg2M2NjLAotCTB4NjNmYSwgMHg2M2ZhLCAweDYzZmEsIDB4NjNmYSwgMHg2M2ZhLCAweDIxMDAsIDB4OTA4MiwgMHgwMDdlLAotCTB4MTI3OCwgMHgwODBjLCAweDY3MTgsIDB4MDE0OCwgMHg5MDQ2LCAweGI4MTAsIDB4OTMwNiwgMHgxOTA0LAotCTB4NjQwMiwgMHhiODE0LCAweDkyMDYsIDB4MTVmMCwgMHgwMDI4LCAweGJiMTIsIDB4YmExNiwgMHgwMDEwLAotCTB4MDgwYywgMHg0YWRiLCAweDAxNTAsIDB4MDRiMCwgMHgwODBjLCAweDY3ODMsIDB4MTU5OCwgMHhiODEwLAotCTB4OTMwNiwgMHgxNTgwLCAweGI4MTQsIDB4OTIwNiwgMHgxNTY4LCAweDA4MGMsIDB4YWVmOCwgMHgwNTMwLAotCTB4MmIwMCwgMHg2MDEyLCAweDA4MGMsIDB4ZDBjZSwgMHgyOTAwLCAweDYwMTYsIDB4NjAwYiwgMHhmZmZmLAotCTB4NjAyMywgMHgwMDBhLCAweGE4NzgsIDB4OTA4NiwgMHgwMDAxLCAweDExNzAsIDB4MDgwYywgMHgzMmZiLAotCTB4OTAwNiwgMHgwODBjLCAweDY2YjUsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjZjOSwgMHgyMDAxLAotCTB4MDIwMCwgMHhiODZlLCAweGI4OTMsIDB4MDAwMiwgMHgyMDA5LCAweDAwMDMsIDB4MDgwYywgMHhhZmVjLAotCTB4OTAwNiwgMHgwMDY4LCAweDIwMDEsIDB4MDAwMSwgMHg5MDBlLCAweDAwMzgsIDB4MjAwMSwgMHgwMDJjLAotCTB4OTAwZSwgMHgwMDE4LCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLCAweDkwMDUsIDB4MDAwMCwgMHgwMTJlLAotCTB4MDBiZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGY2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHhhODk0LCAweDkwYzYsIDB4MDAxNSwgMHgwOTA0LCAweDY1ZWQsIDB4OTBjNiwgMHgwMDU2LAotCTB4MDkwNCwgMHg2NWYxLCAweDkwYzYsIDB4MDA2NiwgMHgwOTA0LCAweDY1ZjUsIDB4OTBjNiwgMHgwMDY3LAotCTB4MDkwNCwgMHg2NWY5LCAweDkwYzYsIDB4MDA2OCwgMHgwOTA0LCAweDY1ZmQsIDB4OTBjNiwgMHgwMDcxLAotCTB4MDkwNCwgMHg2NjAxLCAweDkwYzYsIDB4MDA3NCwgMHgwOTA0LCAweDY2MDUsIDB4OTBjNiwgMHgwMDdjLAotCTB4MDkwNCwgMHg2NjA5LCAweDkwYzYsIDB4MDA3ZSwgMHgwOTA0LCAweDY2MGQsIDB4OTBjNiwgMHgwMDM3LAotCTB4MDkwNCwgMHg2NjExLCAweDkwMTYsIDB4MjA3OSwgMHgxODAwLCAweGE5NzQsIDB4OTE4NiwgMHgwMGZmLAotCTB4MDkwNCwgMHg2NWU4LCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LCAweDY1ZTgsIDB4MDgwYywgMHg2NzgzLAotCTB4MTE5OCwgMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDgyLCAweDAwMDYsIDB4MTI2OCwgMHhhODk0LAotCTB4OTBjNiwgMHgwMDZmLCAweDAxNDgsIDB4MDgwYywgMHhhZTgwLCAweDE5MDQsIDB4NjVkMSwgMHhiOGEwLAotCTB4OTA4NCwgMHhmZjgwLCAweDE5MDQsIDB4NjVkMSwgMHhhODk0LCAweDkwYzYsIDB4MDA2ZiwgMHgwMTU4LAotCTB4OTBjNiwgMHgwMDVlLCAweDA5MDQsIDB4NjUzMSwgMHg5MGM2LCAweDAwNjQsIDB4MDkwNCwgMHg2NTVhLAotCTB4MjAwOCwgMHgwODA0LCAweDY0ZjMsIDB4YTk5OCwgMHhhOGIwLCAweDIwNDAsIDB4MDgwYywgMHhhZTgwLAotCTB4MTEyMCwgMHg5MTgyLCAweDAwN2YsIDB4MGEwNCwgMHg2NGYzLCAweDkxODYsIDB4MDBmZiwgMHgwOTA0LAotCTB4NjRmMywgMHg5MTgyLCAweDA4MDAsIDB4MWEwNCwgMHg2NGYzLCAweGFhYTAsIDB4YWI5YywgMHg3ODdjLAotCTB4OTMwNiwgMHgxMWE4LCAweDc4ODAsIDB4MDA5NiwgMHg5MjRlLCAweDExMjgsIDB4MjIwOCwgMHgyMzEwLAotCTB4MDA5ZSwgMHgwODA0LCAweDY0ZjMsIDB4MDgwYywgMHhhZTgwLCAweDExNDAsIDB4OTljYywgMHhmZjAwLAotCTB4MDA5ZSwgMHgxMTI4LCAweDIyMDgsIDB4MjMxMCwgMHgwODA0LCAweDY0ZjMsIDB4MDA5ZSwgMHgwODBjLAotCTB4NGFkYiwgMHgwOTA0LCAweDY0ZmQsIDB4OTAwZSwgMHg5MDE2LCAweDkwYzYsIDB4NDAwMCwgMHgxNWUwLAotCTB4MDAwNiwgMHgwODBjLCAweDZhNzQsIDB4MTEwOCwgMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LAotCTB4YzE4ZCwgMHgyMGE5LCAweDAwMDQsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDMxLAotCTB4MjBhMCwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMDYsIDB4MjA5OCwgMHgwODBjLAotCTB4MGZjYSwgMHgyMGE5LCAweDAwMDQsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDM1LAotCTB4MjBhMCwgMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMGEsIDB4MjA5OCwgMHgwODBjLAotCTB4MGZjYSwgMHhhOGM0LCAweGFiYzgsIDB4OTMwNSwgMHhhYmNjLCAweDkzMDUsIDB4YWJkMCwgMHg5MzA1LAotCTB4YWJkNCwgMHg5MzA1LCAweGFiZDgsIDB4OTMwNSwgMHhhYmRjLCAweDkzMDUsIDB4YWJlMCwgMHg5MzA1LAotCTB4OTAwNSwgMHgwNTEwLCAweDAwMGUsIDB4MDBjOCwgMHg5MGM2LCAweDQwMDcsIDB4MTExMCwgMHgyNDA4LAotCTB4MDBhMCwgMHg5MGM2LCAweDQwMDgsIDB4MTExOCwgMHgyNzA4LCAweDI2MTAsIDB4MDA3MCwgMHg5MGM2LAotCTB4NDAwOSwgMHgxMTA4LCAweDAwNTAsIDB4OTBjNiwgMHg0MDA2LCAweDAxMzgsIDB4MjAwMSwgMHg0MDA1LAotCTB4MjAwOSwgMHgwMDBhLCAweDAwMTAsIDB4MjAwMSwgMHg0MDA2LCAweGE4OTYsIDB4YTk5YSwgMHhhYTllLAotCTB4MjAwMSwgMHgwMDMwLCAweDkwMGUsIDB4MDQ3OCwgMHgwMDBlLCAweDA4MGMsIDB4YWVmOCwgMHgxMTMwLAotCTB4MjAwMSwgMHg0MDA1LCAweDIwMDksIDB4MDAwMywgMHg5MDE2LCAweDBjNzgsIDB4MmIwMCwgMHg2MDEyLAotCTB4MDgwYywgMHhkMGNlLCAweDI5MDAsIDB4NjAxNiwgMHg2MDIzLCAweDAwMDEsIDB4YTg2OCwgMHhkODhjLAotCTB4MDEwOCwgMHhjMGY1LCAweGE4NmEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgzMmZiLAotCTB4MDEyZSwgMHg5MDA2LCAweDA4MGMsIDB4NjZiNSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NmM5LAotCTB4MjAwOSwgMHgwMDAyLCAweDA4MGMsIDB4YWZlYywgMHhhOGIwLCAweGQwOTQsIDB4MDExOCwgMHhiOGQ0LAotCTB4YzA4ZCwgMHhiOGQ2LCAweDkwMDYsIDB4OTAwNSwgMHgwMTJlLCAweDAwZWUsIDB4MDBmZSwgMHgwMGJlLAotCTB4MDAwNSwgMHgwODBjLCAweDU4MzQsIDB4MDExOCwgMHgyMDA5LCAweDAwMDcsIDB4MDBmOCwgMHhhOTk4LAotCTB4YWViMCwgMHgwODBjLCAweDY3ODMsIDB4MTkwNCwgMHg2NGVlLCAweDkxODYsIDB4MDA3ZiwgMHgwMTMwLAotCTB4MDgwYywgMHg2YmNkLCAweDAxMTgsIDB4MjAwOSwgMHgwMDA5LCAweDAwODAsIDB4MDA5NiwgMHgwODBjLAotCTB4MTA0ZCwgMHgxMTIwLCAweDAwOWUsIDB4MjAwOSwgMHgwMDAyLCAweDAwNDAsIDB4MjkwMCwgMHgwMDllLAotCTB4YTgwNiwgMHgwODBjLCAweGNlMjEsIDB4MTliMCwgMHgyMDA5LCAweDAwMDMsIDB4MjAwMSwgMHg0MDA1LAotCTB4MDgwNCwgMHg2NGY1LCAweGE5OTgsIDB4YWViMCwgMHgwODBjLCAweDY3ODMsIDB4MTkwNCwgMHg2NGVlLAotCTB4MDA5NiwgMHgwODBjLCAweDEwNGQsIDB4MTEyOCwgMHgwMDllLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LAotCTB4NjVhZSwgMHgyOTAwLCAweDAwOWUsIDB4YTgwNiwgMHgwMDk2LCAweDIwNDgsIDB4MjBhOSwgMHgwMDJiLAotCTB4YjhjNCwgMHgyMGUwLCAweGI4YzgsIDB4MjA5OCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLAotCTB4MDAwMiwgMHgyMGEwLCAweDQwMDMsIDB4MjBhOSwgMHgwMDA4LCAweDkwODAsIDB4MDAwNiwgMHgyMGEwLAotCTB4YmJjOCwgMHg5Mzk4LCAweDAwMDYsIDB4MjM5OCwgMHgwODBjLCAweDBmY2EsIDB4MDA5ZSwgMHhhODdiLAotCTB4MDAwMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDAwLCAweGQ2ODQsIDB4MTE2OCwgMHgwODBjLAotCTB4NTgyMCwgMHhkMGI0LCAweDExMTgsIDB4YTg5YiwgMHgwMDBiLCAweDAwZTAsIDB4YjgwMCwgMHhkMDhjLAotCTB4MDExOCwgMHhhODliLCAweDAwMGMsIDB4MDBiMCwgMHgwODBjLCAweDZiY2QsIDB4MDExOCwgMHhhODliLAotCTB4MDAwOSwgMHgwMDgwLCAweDA4MGMsIDB4NTgzNCwgMHgwMTE4LCAweGE4OWIsIDB4MDAwNywgMHgwMDUwLAotCTB4MDgwYywgMHhjZTA0LCAweDE5MDQsIDB4NjUyYSwgMHgyMDA5LCAweDAwMDMsIDB4MjAwMSwgMHg0MDA1LAotCTB4MDgwNCwgMHg2NGY1LCAweGE4N2IsIDB4MDAzMCwgMHhhODk3LCAweDQwMDUsIDB4YTgwNCwgMHg4MDA2LAotCTB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDAyLAotCTB4MjAwOSwgMHgwMDJiLCAweGFhYTAsIDB4YWI5YywgMHhhY2E4LCAweGFkYTQsIDB4MjAzMSwgMHgwMDAwLAotCTB4MjA0MSwgMHgxMjljLCAweDA4MGMsIDB4YjQ3MywgMHgxOTA0LCAweDY1MmEsIDB4MjAwOSwgMHgwMDAyLAotCTB4MDhlOCwgMHgyMDAxLCAweDAwMjgsIDB4OTAwZSwgMHgwODA0LCAweDY1MmIsIDB4MjAwOSwgMHgxODBjLAotCTB4MjEwYywgMHhkMThjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDA0LCAweDAwMzgsIDB4ZDE4NCwgMHgwMTE4LAotCTB4MjAwMSwgMHgwMDA0LCAweDAwMTAsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4MDgwNCwgMHg2NTJiLAotCTB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4MDgwNCwgMHg2NTJiLCAweDA4MGMsIDB4MzhhNCwgMHgwODA0LAotCTB4NjUyYywgMHgwODBjLCAweDU1M2QsIDB4MDgwNCwgMHg2NTJjLCAweDA4MGMsIDB4NDY4YywgMHgwODA0LAotCTB4NjUyYywgMHgwODBjLCAweDQ3MDUsIDB4MDgwNCwgMHg2NTJjLCAweDA4MGMsIDB4NDc2MSwgMHgwODA0LAotCTB4NjUyYywgMHgwODBjLCAweDRiOWUsIDB4MDgwNCwgMHg2NTJjLCAweDA4MGMsIDB4NGU1MiwgMHgwODA0LAotCTB4NjUyYywgMHgwODBjLCAweDUxYTQsIDB4MDgwNCwgMHg2NTJjLCAweDA4MGMsIDB4NTM5ZCwgMHgwODA0LAotCTB4NjUyYywgMHgwODBjLCAweDNhYzIsIDB4MDgwNCwgMHg2NTJjLCAweDAwYjYsIDB4YTk3NCwgMHhhZTc4LAotCTB4OTY4NCwgMHgzZmZmLCAweDkwODIsIDB4NDAwMCwgMHgxNjA4LCAweDkxODIsIDB4MDgwMCwgMHgxMjU4LAotCTB4OTE4OCwgMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHgwMTMwLCAweDA4MGMsIDB4NmJjZCwgMHgxMTM4LAotCTB4MDBkOSwgMHg5MDA2LCAweDAwYjAsIDB4MjAwMSwgMHgwMDI4LCAweDkwMGUsIDB4MDA5MCwgMHg5MDgyLAotCTB4MDAwNiwgMHgxMjQwLCAweGI5MDAsIDB4ZDFmYywgMHgwZDk4LCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LAotCTB4MTAwMCwgMHgwMDM4LCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLCAweDAwMTgsIDB4MjAwMSwgMHgwMDI5LAotCTB4OTAwZSwgMHg5MDA1LCAweDAwYmUsIDB4MDAwNSwgMHhhODc3LCAweDAwMDAsIDB4YjhkMCwgMHg5MDA1LAotCTB4MTkwNCwgMHg2NmE5LCAweGI4ODgsIDB4OTAwNSwgMHgxOTA0LCAweDY2YTksIDB4YjgzOCwgMHhiOTNjLAotCTB4OTEwMiwgMHgxYTA0LCAweDY2YTksIDB4MmIxMCwgMHgwODBjLCAweGFmMjUsIDB4MDkwNCwgMHg2NmE1LAotCTB4ODEwOCwgMHhiOTNlLCAweDYyMTIsIDB4MjkwMCwgMHg2MDE2LCAweDYwMjMsIDB4MDAwMywgMHg2MDBiLAotCTB4ZmZmZiwgMHg2MDA3LCAweDAwNDAsIDB4YTg3OCwgMHg2MDVlLCAweGE4ODAsIDB4NjA2NiwgMHhhODgzLAotCTB4MDAwMCwgMHhhODdjLCAweGQwYWMsIDB4MDU4OCwgMHhjMGRkLCAweGE4N2UsIDB4YTg4OCwgMHg4MDAxLAotCTB4MTUzMCwgMHhhODE2LCAweGE4NjQsIDB4OTA5NCwgMHgwMGY3LCAweDkyOTYsIDB4MDAxMSwgMHgxMWY4LAotCTB4OTA4NCwgMHgwMGZmLCAweGMwYmQsIDB4NjAxZSwgMHhhOGFjLCAweGFhYjAsIDB4YTgzNiwgMHhhYTNhLAotCTB4MjAwMSwgMHgwMDBmLCAweDgwMDEsIDB4MWRmMCwgMHgyMDAxLCAweDgwMDQsIDB4NjAwMywgMHgwMDA0LAotCTB4NjA0NiwgMHgwMGY2LCAweDIwNzksIDB4MDM4MCwgMHg3ODE4LCAweGQwYmMsIDB4MWRlOCwgMHg3ODMzLAotCTB4MDAxMCwgMHgyYzAwLCAweDc4MzYsIDB4NzgxYiwgMHg4MDgwLCAweDAwZmUsIDB4MDAwNSwgMHgwODBjLAotCTB4MTdhMSwgMHg2MDFjLCAweGMwYmQsIDB4NjAxZSwgMHgwYzM4LCAweGQwYjQsIDB4MTkwYywgMHgxY2I5LAotCTB4MjAwMSwgMHg4MDA0LCAweDYwMDMsIDB4MDAwMiwgMHgwYzE4LCAweDgxZmYsIDB4MTExMCwgMHhiODhiLAotCTB4MDAwMSwgMHgyOTA4LCAweGI4Y2MsIDB4YjljZSwgMHg5MDA1LCAweDExMTAsIDB4YjlkMiwgMHgwMDIwLAotCTB4MDA5NiwgMHgyMDQ4LCAweGE5MDIsIDB4MDA5ZSwgMHgwMDA1LCAweDAwYjYsIDB4MDEyNiwgMHgwMGM2LAotCTB4MDAyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIxMCwgMHgyMjU4LCAweGJhMDAsIDB4OTAwNSwgMHgwMTEwLAotCTB4YzI4NSwgMHgwMDA4LCAweGMyODQsIDB4YmEwMiwgMHgwMDJlLCAweDAwY2UsIDB4MDEyZSwgMHgwMGJlLAotCTB4MDAwNSwgMHgwMGI2LCAweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIxMCwgMHgyMjU4LAotCTB4YmEwNCwgMHgwMDA2LCAweDkwODYsIDB4MDAwNiwgMHgxMTcwLCAweGI4OWMsIDB4ZDBhYywgMHgwMTU4LAotCTB4MDgwYywgMHg2YmM5LCAweDAxNDAsIDB4OTI4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTA4NiwgMHgwMDA3LAotCTB4MTExMCwgMHgyMDExLCAweDA2MDAsIDB4MDAwZSwgMHg5Mjk0LCAweGZmMDAsIDB4OTIxNSwgMHhiYTA2LAotCTB4MDAwNiwgMHg5MDg2LCAweDAwMDYsIDB4MTEyMCwgMHhiYTkwLCAweDgyZmYsIDB4MDkwYywgMHgwZDc5LAotCTB4MDAwZSwgMHgwMGNlLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDEyNiwgMHgwMGM2LAotCTB4MjA5MSwgMHg4MDAwLCAweDYyMTAsIDB4MjI1OCwgMHhiYTA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDA2LAotCTB4MTE2OCwgMHhiODljLCAweGQwYTQsIDB4MDE1MCwgMHgwODBjLCAweDZiYzUsIDB4MTEzOCwgMHg5Mjg0LAotCTB4MDBmZiwgMHg5MDg2LCAweDAwMDcsIDB4MTExMCwgMHgyMDExLCAweDAwMDYsIDB4MDAwZSwgMHg5Mjk0LAotCTB4MDBmZiwgMHg4MDA3LCAweDkyMTUsIDB4YmEwNiwgMHgwMGNlLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LAotCTB4OTE4MiwgMHgwODAwLCAweDAyMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBkNiwgMHgwMDI2LAotCTB4OTE5MCwgMHgxMDAwLCAweDIyMDQsIDB4OTA1ZCwgMHgxMTg4LCAweDAwOTYsIDB4MDgwYywgMHgxMDRkLAotCTB4Mjk1OCwgMHgwMDllLCAweDAxNjgsIDB4MmIwMCwgMHgyMDEyLCAweGI4NWMsIDB4YjhjYSwgMHhiODYwLAotCTB4YjhjNiwgMHg5MDA2LCAweGI4YTYsIDB4YjhhZSwgMHgwODBjLCAweDYxOTIsIDB4OTAwNiwgMHgwMDEwLAotCTB4OTA4NSwgMHgwMDAxLCAweDAwMmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwMjYsIDB4OTE4MiwgMHgwODAwLCAweDAyMTgsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDRhOCwgMHgwMGQ2LCAweDkxOTAsIDB4MTAwMCwgMHgyMjA0LCAweDkwNWQsIDB4MDU2OCwgMHgyMDEzLAotCTB4MDAwMCwgMHhiOGE0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDEwN2YsIDB4MDBkNiwgMHgwMGM2LAotCTB4YjhiYywgMHgyMDYwLCAweDhjZmYsIDB4MDE2OCwgMHg2MDBjLCAweDAwMDYsIDB4NjAxNCwgMHgyMDQ4LAotCTB4MDgwYywgMHhjYzMzLCAweDAxMTAsIDB4MDgwYywgMHgwZmZmLCAweDA4MGMsIDB4YWY0ZSwgMHgwMGNlLAotCTB4MGM4OCwgMHgwMGNlLCAweDAwZGUsIDB4MDBjNiwgMHhiOGFjLCAweDkwNjUsIDB4MDEyOCwgMHg2MjFjLAotCTB4ZDJjNCwgMHgwMTEwLCAweDA4MGMsIDB4OTEyOCwgMHgwMGNlLCAweDJiNDgsIDB4YjhjOCwgMHhiODVlLAotCTB4YjhjNCwgMHhiODYyLCAweDA4MGMsIDB4MTA4ZiwgMHgwMGRlLCAweDkwMDYsIDB4MDAyZSwgMHgwMTJlLAotCTB4MDA5ZSwgMHgwMGJlLCAweDAwMDUsIDB4MDAxNiwgMHg5MTgyLCAweDA4MDAsIDB4MDIxOCwgMHg5MDg1LAotCTB4MDAwMSwgMHgwMDMwLCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LCAweDkwNWQsIDB4MGRjMCwgMHg5MDA2LAotCTB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsIDB4OTAwNiwgMHhiODBhLAotCTB4YjgwZSwgMHhiODAwLCAweGMwOGMsIDB4YjgwMiwgMHgwODBjLCAweDc2OWQsIDB4MTUxMCwgMHhiOGEwLAotCTB4OTA4NiwgMHgwMDdlLCAweDAxMjAsIDB4MDgwYywgMHhhZTgwLCAweDExZDgsIDB4MDA3OCwgMHg3MDQwLAotCTB4ZDBlNCwgMHgwMWI4LCAweDAwYzYsIDB4MjA2MSwgMHgxOTgzLCAweDcwNDgsIDB4MjA2MiwgMHg3MDRjLAotCTB4NjAwNiwgMHg3MDUwLCAweDYwMGEsIDB4NzA1NCwgMHg2MDBlLCAweDAwY2UsIDB4NzAzYywgMHgyMDY5LAotCTB4MDE0MCwgMHg5MDA1LCAweDExMTAsIDB4MjAwMSwgMHgwMDAxLCAweDY4ODYsIDB4MjA2OSwgMHgxODAwLAotCTB4NjhiNiwgMHg3MDQwLCAweGI4NWUsIDB4NzA0OCwgMHhiODYyLCAweDcwNGMsIDB4Yjg2NiwgMHgyMGUxLAotCTB4MDAwMCwgMHgyMDk5LCAweDAyNzYsIDB4YjhjNCwgMHgyMGU4LCAweGI4YzgsIDB4OTA4OCwgMHgwMDBhLAotCTB4MjFhMCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMywgMHgyMDk5LCAweDAyN2EsIDB4OTA4OCwgMHgwMDA2LAotCTB4MjFhMCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMywgMHgyMDY5LCAweDAyMDAsIDB4NjgxNywgMHgwMDAxLAotCTB4NzA0MCwgMHhiODZhLCAweDcxNDQsIDB4Yjk2ZSwgMHg3MDQ4LCAweGI4NzIsIDB4NzA1MCwgMHhiODc2LAotCTB4MjA2OSwgMHgwMjAwLCAweDY4MTcsIDB4MDAwMCwgMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgxMTEwLAotCTB4NzE0NCwgMHhiOTZlLCAweDkxODIsIDB4MDIxMSwgMHgxMjE4LCAweDIwMDksIDB4MDAwOCwgMHgwNDAwLAotCTB4OTE4MiwgMHgwMjU5LCAweDEyMTgsIDB4MjAwOSwgMHgwMDA3LCAweDAwZDAsIDB4OTE4MiwgMHgwMmMxLAotCTB4MTIxOCwgMHgyMDA5LCAweDAwMDYsIDB4MDBhMCwgMHg5MTgyLCAweDAzNDksIDB4MTIxOCwgMHgyMDA5LAotCTB4MDAwNSwgMHgwMDcwLCAweDkxODIsIDB4MDQyMSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNCwgMHgwMDQwLAotCTB4OTE4MiwgMHgwNTgxLCAweDEyMTgsIDB4MjAwOSwgMHgwMDAzLCAweDAwMTAsIDB4MjAwOSwgMHgwMDAyLAotCTB4Yjk5MiwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LAotCTB4MDBlNiwgMHgyMDcxLCAweDAyNjAsIDB4NzAzNCwgMHhiODk2LCAweDcwM2MsIDB4Yjg5YSwgMHg3MDU0LAotCTB4Yjg5ZSwgMHgwMDM2LCAweGJiZDQsIDB4YzM4NCwgMHhiYTAwLCAweDIwMDksIDB4MTg2NywgMHgyMTBjLAotCTB4ZDBiYywgMHgwMTIwLCAweGQxZWMsIDB4MDExMCwgMHhjMmFkLCAweDAwMDgsIDB4YzJhYywgMHhkMGM0LAotCTB4MDE0OCwgMHhkMWU0LCAweDAxMzgsIDB4YzJiZCwgMHhkMGNjLCAweDAxMjgsIDB4ZDM4YywgMHgxMTA4LAotCTB4YzM4NSwgMHgwMDA4LCAweGMyYmMsIDB4YmEwMiwgMHhiYmQ2LCAweDAwM2UsIDB4MDBlZSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDA1LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YjhhNCwgMHg5MDRkLAotCTB4MDU3OCwgMHhhOTAwLCAweDgxZmYsIDB4MTVjMCwgMHhhYTA0LCAweDkyODIsIDB4MDAxMCwgMHgxNmM4LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAxYzYsIDB4MDFkNiwgMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MDhjLAotCTB4MDAzZiwgMHgyMWUwLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMDQsIDB4MjA5OCwgMHgyMDA5LAotCTB4MDAxMCwgMHgyMGE5LCAweDAwMDEsIDB4NDAwMiwgMHg5MDg2LCAweGZmZmYsIDB4MDEyMCwgMHg4MTA5LAotCTB4MWRkMCwgMHgwODBjLCAweDBkNzksIDB4M2MwMCwgMHgyMGU4LCAweDMzMDAsIDB4ODAwMSwgMHgyMGEwLAotCTB4NDYwNCwgMHg4MjEwLCAweGFhMDYsIDB4MDFkZSwgMHgwMWNlLCAweDAxNGUsIDB4MDEzZSwgMHgwMDYwLAotCTB4MDgwYywgMHgxMDRkLCAweDAxNzAsIDB4MjkwMCwgMHhiOGE2LCAweGE4MDMsIDB4MDAwMCwgMHgwODBjLAotCTB4NmExMCwgMHhhODA3LCAweDAwMDEsIDB4YWUxMiwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMDllLAotCTB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDA5NiwgMHhiOGE0LAotCTB4OTA0ZCwgMHgwMTg4LCAweGE4MDAsIDB4OTAwNSwgMHgxMTUwLCAweDA4MGMsIDB4NmExZiwgMHgxMTU4LAotCTB4YTgwNCwgMHg5MDhhLCAweDAwMDIsIDB4MDIxOCwgMHg4MDAxLCAweGE4MDYsIDB4MDAyMCwgMHgwODBjLAotCTB4MTA3ZiwgMHhiOGE3LCAweDAwMDAsIDB4MDA5ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDA5NiwgMHgwMGM2LAotCTB4Yjg4OCwgMHg5MDA1LCAweDE5MDQsIDB4NjkwNSwgMHhiOGQwLCAweDkwNGQsIDB4MDkwNCwgMHg2OTA1LAotCTB4MDgwYywgMHhhZjI1LCAweDA5MDQsIDB4NjkwMywgMHg4MjEwLCAweGJhM2UsIDB4YTgwMCwgMHhiOGQyLAotCTB4OTAwNSwgMHgxMTA4LCAweGI4Y2UsIDB4MmIwMCwgMHg2MDEyLCAweDI5MDAsIDB4NjAxNiwgMHg2MDIzLAotCTB4MDAwMywgMHg2MDBiLCAweGZmZmYsIDB4NjAwNywgMHgwMDQwLCAweGE4NzgsIDB4NjA1ZSwgMHhhODgwLAotCTB4OTA4NCwgMHgwMGZmLCAweDYwNjYsIDB4YTg4MywgMHgwMDAwLCAweGE4N2MsIDB4ZDBhYywgMHgwMWM4LAotCTB4YzBkZCwgMHhhODdlLCAweGE4ODgsIDB4ODAwMSwgMHgxNTU4LCAweGE4MTYsIDB4YTg2NCwgMHg5MDk0LAotCTB4MDBmNywgMHg5Mjk2LCAweDAwMTEsIDB4MTUyMCwgMHg5MDg0LCAweDAwZmYsIDB4YzBiZCwgMHg2MDFlLAotCTB4YThhYywgMHhhYWIwLCAweGE4MzYsIDB4YWEzYSwgMHgyMDAxLCAweDgwMDQsIDB4NjAwMywgMHgwMDA0LAotCTB4MDAzMCwgMHgwODBjLCAweDFjYjksIDB4MjAwMSwgMHg4MDA0LCAweDYwMDMsIDB4MDAwMiwgMHg2MDQ2LAotCTB4MjAwMSwgMHgwMDEwLCAweDJjMDgsIDB4MDgwYywgMHhhYWU4LCAweGI4MzgsIDB4YmEzYywgMHg5MjAyLAotCTB4MGEwNCwgMHg2OGI0LCAweDAwMTAsIDB4Yjg4YiwgMHgwMDAxLCAweDAwY2UsIDB4MDA5ZSwgMHgwMDA1LAotCTB4MDgwYywgMHgxN2ExLCAweDYwMWMsIDB4YzBiZCwgMHg2MDFlLCAweDA4ZjAsIDB4MDBiNiwgMHgwMDk2LAotCTB4MDAxNiwgMHgyMGE5LCAweDA4MDAsIDB4OTAwZSwgMHgwMDE2LCAweDA4MGMsIDB4Njc4MywgMHgxMTU4LAotCTB4YjhkMCwgMHg5MDRkLCAweDAxNDAsIDB4M2UwMCwgMHg5MDg2LCAweDAwMDIsIDB4MTExOCwgMHhiODAwLAotCTB4ZDBiYywgMHgxMTA4LCAweDAwNDEsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4NjkxNCwgMHgwMDFlLAotCTB4MDBiZSwgMHgwMDllLCAweDAwMDUsIDB4MDA5NiwgMHgwMDE2LCAweGI4ZDAsIDB4OTA0ZCwgMHgwMTg4LAotCTB4YTgwMCwgMHhiOGQyLCAweDkwMDUsIDB4MTEwOCwgMHhiOGNlLCAweDkwMDYsIDB4YTgwMiwgMHhhODY3LAotCTB4MDEwMywgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweGNmMzgsIDB4MDgwYywgMHg2ZjExLAotCTB4MGM2MCwgMHgwMDFlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDg2LCAweDkwNDYsIDB4YjhkMCwgMHg5MDRkLAotCTB4MDFiMCwgMHhhODZjLCAweDk0MDYsIDB4MTExOCwgMHhhODcwLCAweDk1MDYsIDB4MDEyOCwgMHgyOTQwLAotCTB4YTgwMCwgMHg5MDRkLCAweDAxNjAsIDB4MGNhOCwgMHhhODAwLCAweDg4ZmYsIDB4MTEyOCwgMHhiOGQyLAotCTB4OTAwNSwgMHgxMTE4LCAweGI4Y2UsIDB4MDAwOCwgMHhhMDAyLCAweGE4MDMsIDB4MDAwMCwgMHgwMDhlLAotCTB4MDAwNSwgMHg5MDFlLCAweDAwMTAsIDB4MjAxOSwgMHgwMDAxLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDBlNiwgMHgwMDk2LCAweDAwYzYsIDB4MDA4NiwgMHgwMDI2LCAweDIwNzEsIDB4MTllOSwgMHg5MDQ2LAotCTB4NzAyOCwgMHg5MDY1LCAweDAxZTgsIDB4NjAxNCwgMHgyMDY4LCAweDgzZmYsIDB4MDEyMCwgMHg2MDVjLAotCTB4OTYwNiwgMHgwMTU4LCAweDAwMzAsIDB4YTg2YywgMHg5NDA2LCAweDExMTgsIDB4YTg3MCwgMHg5NTA2LAotCTB4MDEyMCwgMHgyYzQwLCAweDYwMGMsIDB4MjA2MCwgMHgwYzYwLCAweDYwMGMsIDB4MDAwNiwgMHgwMDY2LAotCTB4MjgzMCwgMHgwODBjLCAweGEyMWIsIDB4MDA2ZSwgMHgwMDBlLCAweDgzZmYsIDB4MDUwOCwgMHgwYzA4LAotCTB4OTA0NiwgMHhiOGQwLCAweDkwNGQsIDB4MDFlMCwgMHg4M2ZmLCAweDAxMjAsIDB4YTg3OCwgMHg5NjA2LAotCTB4MDE1OCwgMHgwMDMwLCAweGE4NmMsIDB4OTQwNiwgMHgxMTE4LCAweGE4NzAsIDB4OTUwNiwgMHgwMTIwLAotCTB4Mjk0MCwgMHhhODAwLCAweDIwNDgsIDB4MGM3MCwgMHhiOGQwLCAweGFhMDAsIDB4MDAyNiwgMHg5OTA2LAotCTB4MTExMCwgMHhiYWQyLCAweDAwMDgsIDB4YTIwMiwgMHgwMDBlLCAweDgzZmYsIDB4MDEwOCwgMHgwYzEwLAotCTB4MDAyZSwgMHgwMDhlLCAweDAwY2UsIDB4MDA5ZSwgMHgwMGVlLCAweDAxMmUsIDB4MDAwNSwgMHg5MDE2LAotCTB4MDQ4OSwgMHgxMTEwLCAweDIwMTEsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NmE3NCwgMHgwMTI4LAotCTB4MDgwYywgMHhjY2Y0LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg2YTc0LAotCTB4MDEyOCwgMHgwODBjLCAweGNjOTUsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLAotCTB4NmE3NCwgMHgwMTI4LCAweDA4MGMsIDB4Y2NmMSwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LAotCTB4MDgwYywgMHg2YTc0LCAweDAxMjgsIDB4MDgwYywgMHhjY2I0LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDAwNSwgMHgwODBjLCAweDZhNzQsIDB4MDEyOCwgMHgwODBjLCAweGNkMzcsIDB4MDAxMCwgMHg5MDg1LAotCTB4MDAwMSwgMHgwMDA1LCAweGI4YTQsIDB4OTAwZCwgMHgxMTE4LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LAotCTB4MDEzNiwgMHgwMWM2LCAweGE4MDAsIDB4OTAwNSwgMHgxMWI4LCAweDg5MGUsIDB4ODEwZSwgMHg4MTBmLAotCTB4OTE4NCwgMHgwMDNmLCAweDIwZTAsIDB4OTE4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwNCwgMHgyMDk4LAotCTB4MjBhOSwgMHgwMDAxLCAweDIwMDksIDB4MDAxMCwgMHg0MDAyLCAweDk2MDYsIDB4MDEyOCwgMHg4MTA5LAotCTB4MWRkOCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwOCwgMHg5MDA2LCAweDAxY2UsIDB4MDEzZSwgMHgwMDA1LAotCTB4MDE0NiwgMHgwMWQ2LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAwNCwgMHgyMGEwLAotCTB4MjBhOSwgMHgwMDEwLCAweDIwMDksIDB4ZmZmZiwgMHg0MTA0LCAweDAxZGUsIDB4MDE0ZSwgMHgwMTM2LAotCTB4MDFjNiwgMHhhODAwLCAweDkwMDUsIDB4MTFiOCwgMHg4OTBlLCAweDgxMGUsIDB4ODEwZiwgMHg5MTg0LAotCTB4MDAzZiwgMHgyMGUwLCAweDkxODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMDQsIDB4MjA5OCwgMHgyMGE5LAotCTB4MDAwMSwgMHgyMDA5LCAweDAwMTAsIDB4NDAwMiwgMHg5NjA2LCAweDAxMjgsIDB4ODEwOSwgMHgxZGQ4LAotCTB4OTA4NSwgMHgwMDAxLCAweDAwNjgsIDB4MDE0NiwgMHgwMWQ2LCAweDMzMDAsIDB4ODAwMSwgMHgyMGEwLAotCTB4M2MwMCwgMHgyMGU4LCAweDIwMDEsIDB4ZmZmZiwgMHg0MDA0LCAweDAxZGUsIDB4MDE0ZSwgMHg5MDA2LAotCTB4MDFjZSwgMHgwMTNlLCAweDAwMDUsIDB4MDA5NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiOGE0LAotCTB4OTA0ZCwgMHgxMTI4LCAweDA4MGMsIDB4MTA0ZCwgMHgwMTY4LCAweDI5MDAsIDB4YjhhNiwgMHgwODBjLAotCTB4NmExMCwgMHhhODAzLCAweDAwMDEsIDB4YTgwNywgMHgwMDAwLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLAotCTB4MDA5ZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4YjhhNCwgMHg5MDRkLCAweDAxMzAsIDB4YjhhNywgMHgwMDAwLCAweDA4MGMsIDB4MTA3ZiwgMHg5MDg1LAotCTB4MDAwMSwgMHgwMTJlLCAweDAwOWUsIDB4MDAwNSwgMHhiODljLCAweGQwYTQsIDB4MDAwNSwgMHgwMGI2LAotCTB4MDBmNiwgMHgwODBjLCAweDc2OWQsIDB4MDFiMCwgMHg3MWM0LCAweDgxZmYsIDB4MTE5OCwgMHg3MWRjLAotCTB4ZDE5YywgMHgwMTgwLCAweDIwMDEsIDB4MDA3ZSwgMHg5MDgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDVkLAotCTB4MDE0OCwgMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDYsIDB4MTExOCwgMHhiODAwLAotCTB4YzBlZCwgMHhiODAyLCAweDIwNzksIDB4MTg0NywgMHg3ODA0LCAweGQwYTQsIDB4MDFkMCwgMHgwMTU2LAotCTB4MjBhOSwgMHgwMDdmLCAweDkwMGUsIDB4MDAxNiwgMHgwODBjLCAweDY3ODMsIDB4MTE2OCwgMHhiODA0LAotCTB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTA5NiwgMHgwMDA0LCAweDAxMTgsIDB4OTA4NiwgMHgwMDA2LAotCTB4MTExOCwgMHhiODAwLCAweGMwZWQsIDB4YjgwMiwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHg2YTliLAotCTB4MDE1ZSwgMHgwODBjLCAweDZiOGIsIDB4MDEyMCwgMHgyMDAxLCAweDE5ODYsIDB4MjAwYywgMHgwMDM4LAotCTB4MjA3OSwgMHgxODQ3LCAweDc4MDQsIDB4ZDBhNCwgMHgwMTMwLCAweDIwMDksIDB4MDdkMCwgMHgyMDExLAotCTB4NmFjNiwgMHgwODBjLCAweDg4ZjYsIDB4MDBmZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgyMDExLAotCTB4NmFjNiwgMHgwODBjLCAweDg4MmMsIDB4MDgwYywgMHg2YjhiLCAweDAxZDgsIDB4MjAwMSwgMHgxMDdlLAotCTB4MjAwNCwgMHgyMDU4LCAweGI5MDAsIDB4YzFlYywgMHhiOTAyLCAweDA4MGMsIDB4NmJjOSwgMHgwMTMwLAotCTB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NmFjNiwgMHgwODBjLCAweDg4ZjYsIDB4MDBlNiwgMHgyMDcxLAotCTB4MTgwMCwgMHg5MDA2LCAweDcwN2UsIDB4NzA2MCwgMHg3MDgyLCAweDA4MGMsIDB4MzBjOCwgMHgwMGVlLAotCTB4MDRlMCwgMHgwMTU2LCAweDAwYzYsIDB4MjBhOSwgMHgwMDdmLCAweDkwMGUsIDB4MDAxNiwgMHgwODBjLAotCTB4Njc4MywgMHgxNTY4LCAweGI4MDAsIDB4ZDBlYywgMHgwNTUwLCAweGQwYmMsIDB4MTU0MCwgMHgwMDQ2LAotCTB4YmFhMCwgMHgyMjIwLCAweDkwMDYsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsIDB4ZTc5NSwgMHhiODAwLAotCTB4YzBlNSwgMHhjMGVjLCAweGI4MDIsIDB4MDgwYywgMHg2YmM1LCAweDIwMDEsIDB4MDcwNywgMHgxMTI4LAotCTB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NSwgMHgwNzAwLCAweGI4MDYsIDB4MDgwYywgMHhhYWY3LAotCTB4MjAxOSwgMHgwMDI5LCAweDA4MGMsIDB4OTViOSwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5NDc2LAotCTB4OTAwZSwgMHgwODBjLCAweGU0NjUsIDB4MDA3ZSwgMHgwMDRlLCAweDA4MGMsIDB4YWIxMywgMHgwMDFlLAotCTB4ODEwOCwgMHgxZjA0LCAweDZhZWUsIDB4MDBjZSwgMHgwMTVlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LAotCTB4NjAxMCwgMHgyMDU4LCAweGI4MDAsIDB4YzBlYywgMHhiODAyLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LAotCTB4MDBjNiwgMHgwMDk2LCAweDA4MGMsIDB4MTA2NiwgMHgwOTBjLCAweDBkNzksIDB4Mjk1OCwgMHgwMDllLAotCTB4MjAwMSwgMHgxOTZjLCAweDJiMDIsIDB4OGIwNywgMHg4MDA2LCAweDgwMDYsIDB4OTA4YywgMHgwMDNmLAotCTB4YjljNiwgMHg5MDhjLCAweGZmYzAsIDB4YjljYSwgMHhiOGFmLCAweDAwMDAsIDB4MjAwOSwgMHgwMGZmLAotCTB4MDgwYywgMHg2MTkyLCAweGI4MDcsIDB4MDAwNiwgMHhiODEzLCAweDAwZmYsIDB4YjgxNywgMHhmZmZmLAotCTB4Yjg2ZiwgMHgwMjAwLCAweGI4NmMsIDB4Yjg5MywgMHgwMDAyLCAweGI4YmIsIDB4MDUyMCwgMHhiOGEzLAotCTB4MDBmZiwgMHhiOGFmLCAweDAwMDAsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsIDB4NzgxMCwgMHgwMGI2LAotCTB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBhYywgMHgwMDA1LCAweDYwMTAsIDB4MDBiNiwgMHg5MDVkLAotCTB4MDEwOCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LAotCTB4YjgwNCwgMHg5MDhjLCAweDAwZmYsIDB4OTE5NiwgMHgwMDA2LCAweDAxODgsIDB4OTE5NiwgMHgwMDA0LAotCTB4MDE3MCwgMHg5MTk2LCAweDAwMDUsIDB4MDE1OCwgMHg5MDhjLCAweGZmMDAsIDB4ODEwZiwgMHg5MTk2LAotCTB4MDAwNiwgMHgwMTI4LCAweDkxOTYsIDB4MDAwNCwgMHgwMTEwLCAweDkxOTYsIDB4MDAwNSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGY2LCAweDIwMDEsIDB4MTA3ZSwgMHgyMDA0LAotCTB4OTA1ZCwgMHgwMTEwLCAweGI4MDAsIDB4ZDBlYywgMHgwMGZlLCAweDAwYmUsIDB4MDAwNSwgMHgwMTI2LAotCTB4MDAyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAwNiwgMHhiYWEwLCAweDkyOTAsIDB4MTAwMCwgMHgyMjA0LAotCTB4OWIwNiwgMHgxOTBjLCAweDBkNzksIDB4MDAwZSwgMHhiYTAwLCAweDkwMDUsIDB4MDExMCwgMHhjMmZkLAotCTB4MDAwOCwgMHhjMmZjLCAweGJhMDIsIDB4MDAyZSwgMHgwMTJlLCAweDAwMDUsIDB4MjAxMSwgMHgxODM3LAotCTB4MjIwNCwgMHhkMGNjLCAweDAxMzgsIDB4MjAwMSwgMHgxOTg0LCAweDIwMGMsIDB4MjAxMSwgMHg2YmJiLAotCTB4MDgwYywgMHg4OGY2LCAweDAwMDUsIDB4MjAxMSwgMHg2YmJiLCAweDA4MGMsIDB4ODgyYywgMHgyMDExLAotCTB4MTgzNywgMHgyMjA0LCAweGMwY2MsIDB4MjAxMiwgMHgwMDA1LCAweDA4MGMsIDB4NTgyMCwgMHhkMGFjLAotCTB4MDAwNSwgMHgwODBjLCAweDU4MjAsIDB4ZDBhNCwgMHgwMDA1LCAweDAwMTYsIDB4YjkwNCwgMHg5MTg0LAotCTB4MDBmZiwgMHg5MDhlLCAweDAwMDYsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4YjkwNCwgMHg5MTg0LAotCTB4ZmYwMCwgMHg4MDA3LCAweDkwOGUsIDB4MDAwNiwgMHgwMDFlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGY2LAotCTB4MDgwYywgMHhkMzVkLCAweDAxNTgsIDB4NzBkYywgMHg5MDg0LCAweDAwMjgsIDB4MDEzOCwgMHgyMDAxLAotCTB4MTA3ZiwgMHgyMDA0LCAweDkwNWQsIDB4MDExMCwgMHhiOGQ0LCAweGQwOTQsIDB4MDBmZSwgMHgwMGJlLAotCTB4MDAwNSwgMHgyMDcxLCAweDE5MTAsIDB4NzAwMywgMHgwMDAxLCAweDcwMDcsIDB4MDAwMCwgMHg5MDA2LAotCTB4NzAxMiwgMHg3MDE2LCAweDcwMWEsIDB4NzAxZSwgMHg3MDBhLCAweDcwNDYsIDB4MjAwMSwgMHgxOTIyLAotCTB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MDAxNiwgMHgwMGU2LCAweDIwNzEsIDB4MTk0OSwgMHg5MDBlLAotCTB4NzEwYSwgMHgwODBjLCAweDU4MjAsIDB4ZDBmYywgMHgxMTQwLCAweDA4MGMsIDB4NTgyMCwgMHg5MDBlLAotCTB4ZDA5YywgMHgwMTA4LCAweDgxMDgsIDB4NzEwMiwgMHgwNDMwLCAweDIwMDEsIDB4MTg2NywgMHgyMDBjLAotCTB4OTE4NCwgMHgwMDA3LCAweDAwMDIsIDB4NmMwZCwgMHg2YzBkLCAweDZjMGQsIDB4NmMwZCwgMHg2YzBkLAotCTB4NmMyMywgMHg2YzM4LCAweDZjNDYsIDB4NzAwMywgMHgwMDAzLCAweDIwMDksIDB4MTg2OCwgMHgyMTBjLAotCTB4OTE4NCwgMHhmZjAwLCAweDkwOGUsIDB4ZmYwMCwgMHgwMTQwLCAweDgwMDcsIDB4OTAwNSwgMHgxMTEwLAotCTB4MjAwMSwgMHgwMDAyLCAweDgwMDMsIDB4NzAwNiwgMHgwMDMwLCAweDcwMDcsIDB4MDAwMSwgMHgwMDE4LAotCTB4NzAwMywgMHgwMDA1LCAweDBjNTAsIDB4MjA3MSwgMHgxOTEwLCAweDcwNGYsIDB4MDAwMCwgMHgyMDcxLAotCTB4MTgwMCwgMHg3MGY3LCAweDAwMDEsIDB4MDBlZSwgMHgwMDFlLCAweDAwMDUsIDB4NzAwMywgMHgwMDAwLAotCTB4MjA3MSwgMHgxOTEwLCAweDIwMDksIDB4MTg2OCwgMHgyMTBjLCAweDkxODQsIDB4N2YwMCwgMHg4MDA3LAotCTB4OTA4YywgMHgwMDBmLCAweDAxNjAsIDB4NzE0ZSwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LAotCTB4MjA3MSwgMHgxODAwLCAweDkwOGMsIDB4MDAwNywgMHgwMTI4LCAweDcwZjYsIDB4MGMyMCwgMHg3MDRmLAotCTB4MDAwZiwgMHgwYzkwLCAweDcwZjcsIDB4MDAwNSwgMHgwOGYwLCAweDAwZTYsIDB4MjA3MSwgMHgwMDUwLAotCTB4Njg0YywgMHg5MDA1LCAweDExNTAsIDB4MDBlNiwgMHgyMDcxLCAweDE5MTAsIDB4NzAyOCwgMHhjMDg1LAotCTB4NzAyYSwgMHgwMGVlLCAweDkwODUsIDB4MDAwMSwgMHgwNDg4LCAweDY4NDQsIDB4OTAwNSwgMHgwMTU4LAotCTB4MDgwYywgMHg3YTExLCAweDZhNjAsIDB4OTIwMCwgMHg3MDAyLCAweDY4NjQsIDB4OTEwMSwgMHg3MDA2LAotCTB4OTAwNiwgMHg3MDEyLCAweDcwMTYsIDB4Njg2MCwgMHg3MDAyLCAweDY4NjQsIDB4NzAwNiwgMHg2ODY4LAotCTB4NzAwYSwgMHg2ODZjLCAweDcwMGUsIDB4Njg0NCwgMHg5MDA1LCAweDExMTAsIDB4NzAxMiwgMHg3MDE2LAotCTB4Njg0YywgMHg3MDFhLCAweDcwMWMsIDB4OTA4NSwgMHgwMDQwLCAweDcwMWUsIDB4NzAzNywgMHgwMDE5LAotCTB4NzAyYiwgMHgwMDAxLCAweDAwZTYsIDB4MjA3MSwgMHgxOTEwLCAweDcwMjgsIDB4YzA4NCwgMHg3MDJhLAotCTB4NzAwNywgMHgwMDAxLCAweDcwMGIsIDB4MDAwMCwgMHgwMGVlLCAweDkwMDYsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMDI2LCAweDIwNzEsIDB4MTk0OSwgMHg3MDAwLCAweDkwMTUsIDB4MDkwNCwgMHg2ZjE2LAotCTB4OTI4NiwgMHgwMDAzLCAweDA5MDQsIDB4NmRhYiwgMHg5Mjg2LCAweDAwMDUsIDB4MDkwNCwgMHg2ZGFiLAotCTB4MjA3MSwgMHgxODc3LCAweGE4N2MsIDB4OTAwNSwgMHgwOTA0LCAweDZkMDYsIDB4NzE0MCwgMHhhODY4LAotCTB4OTEwMiwgMHgwYTA0LCAweDZmMTYsIDB4YTg3OCwgMHhkMDg0LCAweDE1ZDgsIDB4YTg1MywgMHgwMDE5LAotCTB4MjAwMSwgMHg4MDIzLCAweGE4NGUsIDB4MjA3MSwgMHgxOTEwLCAweDcwMWMsIDB4OTAwNSwgMHgxOTA0LAotCTB4NzBjNSwgMHgwZTA0LCAweDcxMzMsIDB4MjA3MSwgMHgwMDAwLCAweGE4NTAsIDB4NzAzMiwgMHhhODRjLAotCTB4NzA4MiwgMHhhODcwLCAweDcwODYsIDB4YTg2YywgMHg3MDhhLCAweGE4ODAsIDB4NzA4ZSwgMHg3MDM2LAotCTB4MDE0NiwgMHgwMWQ2LCAweDAxMzYsIDB4MDFjNiwgMHgwMTU2LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAotCTB4MDAyYSwgMHhhODY4LCAweDIwYTgsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDIxLAotCTB4MjA5OCwgMHg0MDAzLCAweDAxNWUsIDB4MDFjZSwgMHgwMTNlLCAweDAxZGUsIDB4MDE0ZSwgMHgyMDkxLAotCTB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFmNCwgMHgwODA0LAotCTB4NmQ4ZSwgMHhhODUzLCAweDAwMWIsIDB4MjAwMSwgMHg4MDI3LCAweDA4MjAsIDB4NzAwNCwgMHhkMDhjLAotCTB4MTkwNCwgMHg2ZjE2LCAweGE4NTMsIDB4MDAxYSwgMHgyMDAxLCAweDgwMjQsIDB4MDgwNCwgMHg2Y2NhLAotCTB4MDBlNiwgMHgwMDI2LCAweDIwNzEsIDB4MTk0OSwgMHg3MDAwLCAweDkwMTUsIDB4MDkwNCwgMHg2ZjE2LAotCTB4OTI4NiwgMHgwMDAzLCAweDA5MDQsIDB4NmRhYiwgMHg5Mjg2LCAweDAwMDUsIDB4MDkwNCwgMHg2ZGFiLAotCTB4YTg0ZiwgMHg4MDIyLCAweGE4NTMsIDB4MDAxOCwgMHgwODA0LCAweDZkNzMsIDB4YTg2OCwgMHhkMGZjLAotCTB4MTUwOCwgMHgwMGU2LCAweDAwMjYsIDB4MjAwMSwgMHgxOTQ5LCAweDIwMDQsIDB4OTAxNSwgMHgwOTA0LAotCTB4NmYxNiwgMHhhOTc4LCAweGE4NzQsIDB4OTEwNSwgMHgxOTA0LCAweDZmMTYsIDB4OTI4NiwgMHgwMDAzLAotCTB4MDkwNCwgMHg2ZGFiLCAweDkyODYsIDB4MDAwNSwgMHgwOTA0LCAweDZkYWIsIDB4YTg3YywgMHhkMGJjLAotCTB4MTkwNCwgMHg2ZjE2LCAweDIyMDAsIDB4MDAwMiwgMHg2ZjE2LCAweDZkNmYsIDB4NmRhYiwgMHg2ZGFiLAotCTB4NmYxNiwgMHg2ZGFiLCAweDAwMDUsIDB4YTg2OCwgMHhkMGZjLCAweDE1MDAsIDB4MDBlNiwgMHgwMDI2LAotCTB4MjAwOSwgMHgxOTQ5LCAweDIxMGMsIDB4ODFmZiwgMHgwOTA0LCAweDZmMTYsIDB4YTg4MCwgMHg5MDg0LAotCTB4MDBmZiwgMHg5MDg2LCAweDAwMDEsIDB4MTkwNCwgMHg2ZjE2LCAweDkxODYsIDB4MDAwMywgMHgwOTA0LAotCTB4NmRhYiwgMHg5MTg2LCAweDAwMDUsIDB4MDkwNCwgMHg2ZGFiLCAweGE4N2MsIDB4ZDBjYywgMHgwOTA0LAotCTB4NmYxNiwgMHhhODRmLCAweDgwMjEsIDB4YTg1MywgMHgwMDE3LCAweDAwMjgsIDB4MDAwNSwgMHhhODRmLAotCTB4ODAyMCwgMHhhODUzLCAweDAwMTYsIDB4MjA3MSwgMHgxOTEwLCAweDcwMWMsIDB4OTAwNSwgMHgxOTA0LAotCTB4NzBjNSwgMHgwZTA0LCAweDcxMzMsIDB4MjA3MSwgMHgwMDAwLCAweGE4NGMsIDB4NzA4MiwgMHhhODUwLAotCTB4NzAzMiwgMHhhODZjLCAweDcwODYsIDB4NzAzNiwgMHhhODcwLCAweDcwOGEsIDB4MjA5MSwgMHg0MDgwLAotCTB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDExZjQsIDB4MjA3MSwgMHgxODAwLAotCTB4MjAxMSwgMHgwMDAxLCAweGE4MDQsIDB4OTAwZCwgMHg3MDJjLCAweDExNTgsIDB4YTgwMiwgMHgyOTAwLAotCTB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MzIsIDB4MDAyZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgwMDk2LCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLAotCTB4MWRjOCwgMHgwMDllLCAweDBjNTgsIDB4YTg0ZiwgMHgwMDAwLCAweDAwZjYsIDB4MjA3OSwgMHgwMDUwLAotCTB4MjA3MSwgMHgxOTEwLCAweGE4MDMsIDB4MDAwMCwgMHg3MDEwLCAweDkwMDUsIDB4MTkwNCwgMHg2ZTljLAotCTB4NzgyYywgMHg5MDhjLCAweDA3ODAsIDB4MTkwYywgMHg3MjgxLCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LAotCTB4OTA4NCwgMHgwMDAzLCAweDAwMDIsIDB4NmRjOSwgMHg2ZTljLCAweDZkZWQsIDB4NmUzOSwgMHgwODBjLAotCTB4MGQ3OSwgMHgyMDcxLCAweDE4MDAsIDB4MjkwMCwgMHg3ODIyLCAweGE4MDQsIDB4OTAwZCwgMHgxMTY4LAotCTB4MjA3MSwgMHgxYTA1LCAweDcwNDQsIDB4OTAwNSwgMHgxMzIwLCAweDIwMDEsIDB4MTk0YSwgMHgyMDA0LAotCTB4NzA0NiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LAotCTB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGMwLAotCTB4OTIwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODczMiwgMHgwYzE4LCAweDIwNzEsIDB4MTgwMCwgMHgyOTAwLAotCTB4NzgyMiwgMHhhODA0LCAweDkwMGQsIDB4MTVhMCwgMHg3ODI0LCAweDAwZTYsIDB4MjA3MSwgMHgwMDQwLAotCTB4NzEyYywgMHhkMTljLCAweDExNzAsIDB4MjAwOSwgMHgxODMwLCAweDIxMGMsIDB4OTE4YSwgMHgwMDIwLAotCTB4MDI0MCwgMHg3MDIyLCAweDIwMDEsIDB4MWRjMCwgMHgyMDBjLCAweDgxMDgsIDB4MjEwMiwgMHgwMGVlLAotCTB4MDA1OCwgMHgwMGVlLCAweDIwNDgsIDB4NzAyYywgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLAotCTB4ODAwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODczMiwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLAotCTB4NzI4MSwgMHhkMGE0LCAweDE5YzgsIDB4MjA3MSwgMHgxYTA1LCAweDcwNDQsIDB4OTAwNSwgMHgxMzIwLAotCTB4MjAwMSwgMHgxOTRhLCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LAotCTB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLAotCTB4MWRjOCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODczMiwgMHgwODA0LAotCTB4NmRmNCwgMHgwMDk2LCAweDAwZTYsIDB4NzgyNCwgMHgyMDQ4LCAweDIwNzEsIDB4MTgwMCwgMHg3MDJjLAotCTB4YTgwMiwgMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzMyLAotCTB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjgxLCAweGQwYTQsIDB4MWQ2MCwgMHgwMGVlLAotCTB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjgxLCAweGQwOWMsIDB4MTE5OCwgMHgwMDllLAotCTB4MjkwMCwgMHg3ODIyLCAweGE4MDQsIDB4OTAwZCwgMHgxNTUwLCAweDIwNzEsIDB4MWEwNSwgMHg3MDQ0LAotCTB4OTAwNSwgMHgxMzIwLCAweDIwMDEsIDB4MTk0YSwgMHgyMDA0LCAweDcwNDYsIDB4MDBmZSwgMHgwMDJlLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwOWUsIDB4MjkwOCwgMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LAotCTB4OTA0ZCwgMHg3MTFhLCAweDAxMTAsIDB4YTkwMiwgMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LAotCTB4OTAwZCwgMHgxMTY4LCAweDIwNzEsIDB4MWEwNSwgMHg3MDQ0LCAweDkwMDUsIDB4MTMyMCwgMHgyMDAxLAotCTB4MTk0YSwgMHgyMDA0LCAweDcwNDYsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDcxLAotCTB4MTgwMCwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLAotCTB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzMyLAotCTB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgyOTA4LCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLAotCTB4NzAxOCwgMHg5MDRkLCAweDcxMWEsIDB4MDExMCwgMHhhOTAyLCAweDAwMDgsIDB4NzExZSwgMHgyMTQ4LAotCTB4YTgwNCwgMHg5MDBkLCAweDE5MDQsIDB4NmVmMCwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLAotCTB4NzI4MSwgMHhkMDljLCAweDExOTgsIDB4NzAxYywgMHg5MDRkLCAweDAxODAsIDB4NzAxMCwgMHg4MDAxLAotCTB4NzAxMiwgMHgxMTA4LCAweDcwMWEsIDB4YTgwMCwgMHg3MDFlLCAweDI5MDAsIDB4NzgyMiwgMHg3ODJjLAotCTB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzI4MSwgMHhkMDljLCAweDBkNjgsIDB4NzgyYywgMHg5MDk0LAotCTB4MDc4MCwgMHgxOTBjLCAweDcyODEsIDB4ZDBhNCwgMHgwMWIwLCAweDAwZTYsIDB4NzgyNCwgMHgyMDQ4LAotCTB4MjA3MSwgMHgxODAwLCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLAotCTB4NzBjMiwgMHgwODBjLCAweDg3MzIsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjgxLAotCTB4ZDBhNCwgMHgxZDYwLCAweDAwZWUsIDB4MjA3MSwgMHgxYTA1LCAweDcwNDQsIDB4OTAwNSwgMHgxMzIwLAotCTB4MjAwMSwgMHgxOTRhLCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLAotCTB4ODIxMCwgMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLAotCTB4MDgwYywgMHg4NzMyLCAweDAwZWUsIDB4MDgwNCwgMHg2ZWFjLCAweGE4NjgsIDB4ZDBmYywgMHgxNWUwLAotCTB4MDA5NiwgMHhhODA0LCAweGE4MDcsIDB4MDAwMCwgMHg5MDRkLCAweDE5MGMsIDB4MGZmZiwgMHgwMDllLAotCTB4MDAxOCwgMHhhODY4LCAweGQwZmMsIDB4MTU4MCwgMHgwMGU2LCAweDAwMjYsIDB4YTg0ZiwgMHgwMDAwLAotCTB4MDBmNiwgMHgyMDc5LCAweDAwNTAsIDB4MjA3MSwgMHgxOTEwLCAweGE4MDMsIDB4MDAwMCwgMHhhODY0LAotCTB4OTA4NCwgMHgwMGZmLCAweDkwOGUsIDB4MDAxNiwgMHgwMWE4LCAweDcwMTAsIDB4OTAwNSwgMHgxOTA0LAotCTB4NzA0MSwgMHg3ODJjLCAweDkwOGMsIDB4MDc4MCwgMHgxOTBjLCAweDcyODEsIDB4ODAwNCwgMHg4MDA0LAotCTB4ODAwNCwgMHg5MDg0LCAweDAwMDMsIDB4MDAwMiwgMHg2ZjQ1LCAweDcwNDEsIDB4NmY2MCwgMHg2ZmQyLAotCTB4MDgwYywgMHgwZDc5LCAweDIwMDksIDB4MTk0OSwgMHgyMTA0LCAweDAwMDIsIDB4NmYyNSwgMHg2ZjI1LAotCTB4NmYyNSwgMHg2ZGI0LCAweDZmMjUsIDB4NmRiNCwgMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHgyOTAwLAotCTB4NzgyMiwgMHhhODA0LCAweDkwMGQsIDB4MTEyMCwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LAotCTB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLAotCTB4MWRjOCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODczMiwgMHgwYzYwLAotCTB4MjA3MSwgMHgxODAwLCAweDI5MDAsIDB4NzgyMiwgMHhhODA0LCAweDkwMGQsIDB4MTkwNCwgMHg2ZmMxLAotCTB4NzgzMCwgMHhkMGRjLCAweDExMjAsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHg3ODI0LAotCTB4MDBlNiwgMHgyMDcxLCAweDAwNDAsIDB4NzEyYywgMHhkMTljLCAweDExNzAsIDB4MjAwOSwgMHgxODMwLAotCTB4MjEwYywgMHg5MThhLCAweDAwMjAsIDB4MDI0MCwgMHg3MDIyLCAweDIwMDEsIDB4MWRjMCwgMHgyMDBjLAotCTB4ODEwOCwgMHgyMTAyLCAweDAwZWUsIDB4MDA1OCwgMHgwMGVlLCAweDIwNDgsIDB4NzAyYywgMHhhODAyLAotCTB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4ODAwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODczMiwgMHg3ODJjLAotCTB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzI4MSwgMHhkMGE0LCAweDE5YzgsIDB4MGUwNCwgMHg2ZmI4LAotCTB4NzgzOCwgMHg3OTM4LCAweDkxMGUsIDB4MWRlMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODM2LAotCTB4NjgzMywgMHgwMDEzLCAweDAwZGUsIDB4MjAwMSwgMHgxOTIxLCAweDIwMGMsIDB4YzE4NCwgMHgyMTAyLAotCTB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWY0LAotCTB4MjAwMSwgMHgxOTIyLCAweDIwMDMsIDB4MDAwMCwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LAotCTB4MjAwMSwgMHgxOTIxLCAweDIwMGMsIDB4YzE4NSwgMHgyMTAyLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLAotCTB4MDAwNSwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLAotCTB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzMyLAotCTB4MDgwNCwgMHg2ZjZmLCAweDAwOTYsIDB4MDBlNiwgMHg3ODI0LCAweDIwNDgsIDB4MjA3MSwgMHgxODAwLAotCTB4NzAyYywgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLCAweDgwMDAsIDB4NzBjMiwgMHgwODBjLAotCTB4ODczMiwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcyODEsIDB4ZDBhNCwgMHgxZDYwLAotCTB4MDBlZSwgMHgwZTA0LCAweDcwMTQsIDB4NzgzOCwgMHg3OTM4LCAweDkxMGUsIDB4MWRlMCwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMDAwLCAweDY4MzYsIDB4NjgzMywgMHgwMDEzLCAweDAwZGUsIDB4NzA0NCwgMHhjMDg0LAotCTB4NzA0NiwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLAotCTB4MTFmNCwgMHg3MDRiLCAweDAwMDAsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjgxLAotCTB4ZDA5YywgMHgxMTcwLCAweDAwOWUsIDB4MjkwMCwgMHg3ODIyLCAweGE4MDQsIDB4OTAwZCwgMHgxMWUwLAotCTB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDQ0LCAweGMwODUsIDB4NzA0NiwgMHgwYzU4LAotCTB4MDA5ZSwgMHgyOTA4LCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMTgsIDB4OTA0ZCwgMHg3MTFhLAotCTB4MDExMCwgMHhhOTAyLCAweDAwMDgsIDB4NzExZSwgMHgyMTQ4LCAweGE4MDQsIDB4OTAwZCwgMHgxMTIwLAotCTB4MDBmZSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDcxLCAweDE4MDAsIDB4OTAxNiwgMHg3MDJjLAorCTB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4MDAzOCwgMHgyMDAxLCAweDAwMmMsIDB4OTAwZSwgMHgwMDE4LAorCTB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4OTAwNiwgMHgwMDA4LCAweDkwMDUsIDB4MDEyZSwgMHgwMGJlLAorCTB4MDBmZSwgMHgwMDA1LCAweDY0MWYsIDB4NjNkYSwgMHg2M2YxLCAweDY0MWYsIDB4NjQxZiwgMHg2NDFmLAorCTB4NjQxZiwgMHg2NDFmLCAweDIxMDAsIDB4OTA4MiwgMHgwMDdlLCAweDEyNzgsIDB4MDgwYywgMHg2NzQ5LAorCTB4MDE0OCwgMHg5MDQ2LCAweGI4MTAsIDB4OTMwNiwgMHgxOTA0LCAweDY0MjcsIDB4YjgxNCwgMHg5MjA2LAorCTB4MTVmMCwgMHgwMDI4LCAweGJiMTIsIDB4YmExNiwgMHgwMDEwLCAweDA4MGMsIDB4NGI1NCwgMHgwMTUwLAorCTB4MDRiMCwgMHgwODBjLCAweDY3YjQsIDB4MTU5OCwgMHhiODEwLCAweDkzMDYsIDB4MTU4MCwgMHhiODE0LAorCTB4OTIwNiwgMHgxNTY4LCAweDA4MGMsIDB4YjExNiwgMHgwNTMwLCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLAorCTB4ZDNiNiwgMHgyOTAwLCAweDYwMTYsIDB4NjAwYiwgMHhmZmZmLCAweDYwMjMsIDB4MDAwYSwgMHhhODc4LAorCTB4OTA4NiwgMHgwMDAxLCAweDExNzAsIDB4MDgwYywgMHgzMzE1LCAweDkwMDYsIDB4MDgwYywgMHg2NmU2LAorCTB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjZmYSwgMHgyMDAxLCAweDAyMDAsIDB4Yjg2ZSwgMHhiODkzLAorCTB4MDAwMiwgMHgyMDA5LCAweDAwMDMsIDB4MDgwYywgMHhiMjBhLCAweDkwMDYsIDB4MDA2OCwgMHgyMDAxLAorCTB4MDAwMSwgMHg5MDBlLCAweDAwMzgsIDB4MjAwMSwgMHgwMDJjLCAweDkwMGUsIDB4MDAxOCwgMHgyMDAxLAorCTB4MDAyOCwgMHg5MDBlLCAweDkwMDUsIDB4MDAwMCwgMHgwMTJlLCAweDAwYmUsIDB4MDBmZSwgMHgwMDA1LAorCTB4MDBiNiwgMHgwMGY2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YTg5NCwgMHg5MGM2LAorCTB4MDAxNSwgMHgwOTA0LCAweDY2MTIsIDB4OTBjNiwgMHgwMDU2LCAweDA5MDQsIDB4NjYxNiwgMHg5MGM2LAorCTB4MDA2NiwgMHgwOTA0LCAweDY2MWEsIDB4OTBjNiwgMHgwMDY3LCAweDA5MDQsIDB4NjYxZSwgMHg5MGM2LAorCTB4MDA2OCwgMHgwOTA0LCAweDY2MjIsIDB4OTBjNiwgMHgwMDcxLCAweDA5MDQsIDB4NjYyNiwgMHg5MGM2LAorCTB4MDA3NCwgMHgwOTA0LCAweDY2MmEsIDB4OTBjNiwgMHgwMDdjLCAweDA5MDQsIDB4NjYyZSwgMHg5MGM2LAorCTB4MDA3ZSwgMHgwOTA0LCAweDY2MzIsIDB4OTBjNiwgMHgwMDM3LCAweDA5MDQsIDB4NjYzNiwgMHg5MDE2LAorCTB4MjA3OSwgMHgxODAwLCAweGE5NzQsIDB4OTE4NiwgMHgwMGZmLCAweDA5MDQsIDB4NjYwZCwgMHg5MTgyLAorCTB4MDgwMCwgMHgxYTA0LCAweDY2MGQsIDB4MDgwYywgMHg2N2I0LCAweDExOTgsIDB4YjgwNCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MDgyLCAweDAwMDYsIDB4MTI2OCwgMHhhODk0LCAweDkwYzYsIDB4MDA2ZiwgMHgwMTQ4LAorCTB4MDgwYywgMHhiMDk0LCAweDE5MDQsIDB4NjVmNiwgMHhiOGEwLCAweDkwODQsIDB4ZmY4MCwgMHgxOTA0LAorCTB4NjVmNiwgMHhhODk0LCAweDkwYzYsIDB4MDA2ZiwgMHgwMTU4LCAweDkwYzYsIDB4MDA1ZSwgMHgwOTA0LAorCTB4NjU1NiwgMHg5MGM2LCAweDAwNjQsIDB4MDkwNCwgMHg2NTdmLCAweDIwMDgsIDB4MDgwNCwgMHg2NTE4LAorCTB4YTk5OCwgMHhhOGIwLCAweDIwNDAsIDB4MDgwYywgMHhiMDk0LCAweDExMjAsIDB4OTE4MiwgMHgwMDdmLAorCTB4MGEwNCwgMHg2NTE4LCAweDkxODYsIDB4MDBmZiwgMHgwOTA0LCAweDY1MTgsIDB4OTE4MiwgMHgwODAwLAorCTB4MWEwNCwgMHg2NTE4LCAweGFhYTAsIDB4YWI5YywgMHg3ODdjLCAweDkzMDYsIDB4MTFhOCwgMHg3ODgwLAorCTB4MDA5NiwgMHg5MjRlLCAweDExMjgsIDB4MjIwOCwgMHgyMzEwLCAweDAwOWUsIDB4MDgwNCwgMHg2NTE4LAorCTB4MDgwYywgMHhiMDk0LCAweDExNDAsIDB4OTljYywgMHhmZjAwLCAweDAwOWUsIDB4MTEyOCwgMHgyMjA4LAorCTB4MjMxMCwgMHgwODA0LCAweDY1MTgsIDB4MDA5ZSwgMHgwODBjLCAweDRiNTQsIDB4MDkwNCwgMHg2NTIyLAorCTB4OTAwZSwgMHg5MDE2LCAweDkwYzYsIDB4NDAwMCwgMHgxNWUwLCAweDAwMDYsIDB4MDgwYywgMHg2YWFlLAorCTB4MTEwOCwgMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsIDB4MjBhOSwgMHgwMDA0LAorCTB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDMxLCAweDIwYTAsIDB4YjhjNCwgMHgyMGUwLAorCTB4YjhjOCwgMHg5MDgwLCAweDAwMDYsIDB4MjA5OCwgMHgwODBjLCAweDBmZDYsIDB4MjBhOSwgMHgwMDA0LAorCTB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDM1LCAweDIwYTAsIDB4YjhjNCwgMHgyMGUwLAorCTB4YjhjOCwgMHg5MDgwLCAweDAwMGEsIDB4MjA5OCwgMHgwODBjLCAweDBmZDYsIDB4YThjNCwgMHhhYmM4LAorCTB4OTMwNSwgMHhhYmNjLCAweDkzMDUsIDB4YWJkMCwgMHg5MzA1LCAweGFiZDQsIDB4OTMwNSwgMHhhYmQ4LAorCTB4OTMwNSwgMHhhYmRjLCAweDkzMDUsIDB4YWJlMCwgMHg5MzA1LCAweDkwMDUsIDB4MDUxMCwgMHgwMDBlLAorCTB4MDBjOCwgMHg5MGM2LCAweDQwMDcsIDB4MTExMCwgMHgyNDA4LCAweDAwYTAsIDB4OTBjNiwgMHg0MDA4LAorCTB4MTExOCwgMHgyNzA4LCAweDI2MTAsIDB4MDA3MCwgMHg5MGM2LCAweDQwMDksIDB4MTEwOCwgMHgwMDUwLAorCTB4OTBjNiwgMHg0MDA2LCAweDAxMzgsIDB4MjAwMSwgMHg0MDA1LCAweDIwMDksIDB4MDAwYSwgMHgwMDEwLAorCTB4MjAwMSwgMHg0MDA2LCAweGE4OTYsIDB4YTk5YSwgMHhhYTllLCAweDIwMDEsIDB4MDAzMCwgMHg5MDBlLAorCTB4MDQ3OCwgMHgwMDBlLCAweDA4MGMsIDB4YjExNiwgMHgxMTMwLCAweDIwMDEsIDB4NDAwNSwgMHgyMDA5LAorCTB4MDAwMywgMHg5MDE2LCAweDBjNzgsIDB4MmIwMCwgMHg2MDEyLCAweDA4MGMsIDB4ZDNiNiwgMHgyOTAwLAorCTB4NjAxNiwgMHg2MDIzLCAweDAwMDEsIDB4YTg2OCwgMHhkODhjLCAweDAxMDgsIDB4YzBmNSwgMHhhODZhLAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgzMzE1LCAweDAxMmUsIDB4OTAwNiwgMHgwODBjLAorCTB4NjZlNiwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NmZhLCAweDIwMDksIDB4MDAwMiwgMHgwODBjLAorCTB4YjIwYSwgMHhhOGIwLCAweGQwOTQsIDB4MDExOCwgMHhiOGQ0LCAweGMwOGQsIDB4YjhkNiwgMHg5MDA2LAorCTB4OTAwNSwgMHgwMTJlLCAweDAwZWUsIDB4MDBmZSwgMHgwMGJlLCAweDAwMDUsIDB4MDgwYywgMHg1ODU0LAorCTB4MDExOCwgMHgyMDA5LCAweDAwMDcsIDB4MDBmOCwgMHhhOTk4LCAweGFlYjAsIDB4MDgwYywgMHg2N2I0LAorCTB4MTkwNCwgMHg2NTEzLCAweDkxODYsIDB4MDA3ZiwgMHgwMTMwLCAweDA4MGMsIDB4NmMxMSwgMHgwMTE4LAorCTB4MjAwOSwgMHgwMDA5LCAweDAwODAsIDB4MDA5NiwgMHgwODBjLCAweDEwNTksIDB4MTEyMCwgMHgwMDllLAorCTB4MjAwOSwgMHgwMDAyLCAweDAwNDAsIDB4MjkwMCwgMHgwMDllLCAweGE4MDYsIDB4MDgwYywgMHhkMTA5LAorCTB4MTliMCwgMHgyMDA5LCAweDAwMDMsIDB4MjAwMSwgMHg0MDA1LCAweDA4MDQsIDB4NjUxYSwgMHhhOTk4LAorCTB4YWViMCwgMHgwODBjLCAweDY3YjQsIDB4MTkwNCwgMHg2NTEzLCAweDAwOTYsIDB4MDgwYywgMHgxMDU5LAorCTB4MTEyOCwgMHgwMDllLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDY1ZDMsIDB4MjkwMCwgMHgwMDllLAorCTB4YTgwNiwgMHgwMDk2LCAweDIwNDgsIDB4MjBhOSwgMHgwMDJiLCAweGI4YzQsIDB4MjBlMCwgMHhiOGM4LAorCTB4MjA5OCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMDIsIDB4MjBhMCwgMHg0MDAzLAorCTB4MjBhOSwgMHgwMDA4LCAweDkwODAsIDB4MDAwNiwgMHgyMGEwLCAweGJiYzgsIDB4OTM5OCwgMHgwMDA2LAorCTB4MjM5OCwgMHgwODBjLCAweDBmZDYsIDB4MDA5ZSwgMHhhODdiLCAweDAwMDAsIDB4YTg4MywgMHgwMDAwLAorCTB4YTg5NywgMHg0MDAwLCAweGQ2ODQsIDB4MTE2OCwgMHgwODBjLCAweDU4NDAsIDB4ZDBiNCwgMHgxMTE4LAorCTB4YTg5YiwgMHgwMDBiLCAweDAwZTAsIDB4YjgwMCwgMHhkMDhjLCAweDAxMTgsIDB4YTg5YiwgMHgwMDBjLAorCTB4MDBiMCwgMHgwODBjLCAweDZjMTEsIDB4MDExOCwgMHhhODliLCAweDAwMDksIDB4MDA4MCwgMHgwODBjLAorCTB4NTg1NCwgMHgwMTE4LCAweGE4OWIsIDB4MDAwNywgMHgwMDUwLCAweDA4MGMsIDB4ZDBlYywgMHgxOTA0LAorCTB4NjU0ZiwgMHgyMDA5LCAweDAwMDMsIDB4MjAwMSwgMHg0MDA1LCAweDA4MDQsIDB4NjUxYSwgMHhhODdiLAorCTB4MDAzMCwgMHhhODk3LCAweDQwMDUsIDB4YTgwNCwgMHg4MDA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLAorCTB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDAyLCAweDIwMDksIDB4MDAyYiwgMHhhYWEwLAorCTB4YWI5YywgMHhhY2E4LCAweGFkYTQsIDB4MjAzMSwgMHgwMDAwLCAweDIwNDEsIDB4MTJhOCwgMHgwODBjLAorCTB4YjY5MSwgMHgxOTA0LCAweDY1NGYsIDB4MjAwOSwgMHgwMDAyLCAweDA4ZTgsIDB4MjAwMSwgMHgwMDI4LAorCTB4OTAwZSwgMHgwODA0LCAweDY1NTAsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LAorCTB4MjAwMSwgMHgwMDA0LCAweDAwMzgsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDEwLAorCTB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4MDgwNCwgMHg2NTUwLCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLAorCTB4MDgwNCwgMHg2NTUwLCAweDA4MGMsIDB4MzhjMCwgMHgwODA0LCAweDY1NTEsIDB4MDgwYywgMHg1NTVkLAorCTB4MDgwNCwgMHg2NTUxLCAweDA4MGMsIDB4NDZkNSwgMHgwODA0LCAweDY1NTEsIDB4MDgwYywgMHg0NzRlLAorCTB4MDgwNCwgMHg2NTUxLCAweDA4MGMsIDB4NDdhYSwgMHgwODA0LCAweDY1NTEsIDB4MDgwYywgMHg0YzE3LAorCTB4MDgwNCwgMHg2NTUxLCAweDA4MGMsIDB4NGVkZiwgMHgwODA0LCAweDY1NTEsIDB4MDgwYywgMHg1MWM0LAorCTB4MDgwNCwgMHg2NTUxLCAweDA4MGMsIDB4NTNiZCwgMHgwODA0LCAweDY1NTEsIDB4MDgwYywgMHgzYWZlLAorCTB4MDgwNCwgMHg2NTUxLCAweDAwYjYsIDB4YTk3NCwgMHhhZTc4LCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLAorCTB4NDAwMCwgMHgxNjA4LCAweDkxODIsIDB4MDgwMCwgMHgxMjU4LCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LAorCTB4OTA1ZCwgMHgwMTMwLCAweDA4MGMsIDB4NmMxMSwgMHgxMTM4LCAweDAwZDksIDB4OTAwNiwgMHgwMGIwLAorCTB4MjAwMSwgMHgwMDI4LCAweDkwMGUsIDB4MDA5MCwgMHg5MDgyLCAweDAwMDYsIDB4MTI0MCwgMHhiOTAwLAorCTB4ZDFmYywgMHgwZDk4LCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDAzOCwgMHgyMDAxLAorCTB4MDAyOSwgMHg5MDBlLCAweDAwMTgsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsIDB4OTAwNSwgMHgwMGJlLAorCTB4MDAwNSwgMHhhODc3LCAweDAwMDAsIDB4YjhkMCwgMHg5MDA1LCAweDE5MDQsIDB4NjZkYSwgMHhiODg4LAorCTB4OTAwNSwgMHgxOTA0LCAweDY2ZGEsIDB4YjgzOCwgMHhiOTNjLCAweDkxMDIsIDB4MWEwNCwgMHg2NmRhLAorCTB4MmIxMCwgMHgwODBjLCAweGIxNDMsIDB4MDkwNCwgMHg2NmQ2LCAweDgxMDgsIDB4YjkzZSwgMHg2MjEyLAorCTB4MjkwMCwgMHg2MDE2LCAweDYwMjMsIDB4MDAwMywgMHg2MDBiLCAweGZmZmYsIDB4NjAwNywgMHgwMDQwLAorCTB4YTg3OCwgMHg2MDVlLCAweGE4ODAsIDB4NjA2NiwgMHhhODgzLCAweDAwMDAsIDB4YTg3YywgMHhkMGFjLAorCTB4MDViOCwgMHhjMGRkLCAweGE4N2UsIDB4YTg4OCwgMHg4MDAxLCAweDE1NjAsIDB4MjAxMSwgMHgxODBkLAorCTB4MjIxNCwgMHhkMjhjLCAweDE5MGMsIDB4NmNkNiwgMHhhODE2LCAweGE4NjQsIDB4OTA5NCwgMHgwMGY3LAorCTB4OTI5NiwgMHgwMDExLCAweDExZjgsIDB4OTA4NCwgMHgwMGZmLCAweGMwYmQsIDB4NjAxZSwgMHhhOGFjLAorCTB4YWFiMCwgMHhhODM2LCAweGFhM2EsIDB4MjAwMSwgMHgwMDBmLCAweDgwMDEsIDB4MWRmMCwgMHgyMDAxLAorCTB4ODAwNCwgMHg2MDAzLCAweDAwMDQsIDB4NjA0NiwgMHgwMGY2LCAweDIwNzksIDB4MDM4MCwgMHg3ODE4LAorCTB4ZDBiYywgMHgxZGU4LCAweDc4MzMsIDB4MDAxMCwgMHgyYzAwLCAweDc4MzYsIDB4NzgxYiwgMHg4MDgwLAorCTB4MDBmZSwgMHgwMDA1LCAweDA4MGMsIDB4MTdhZCwgMHg2MDFjLCAweGMwYmQsIDB4NjAxZSwgMHgwYzM4LAorCTB4MjAwOSwgMHgxODBkLCAweDIxMGMsIDB4ZDE4YywgMHgxOTBjLCAweDZjZTAsIDB4ZDBiNCwgMHgxOTBjLAorCTB4MWM5YywgMHgyMDAxLCAweDgwMDQsIDB4NjAwMywgMHgwMDAyLCAweDA4ZTgsIDB4ODFmZiwgMHgxMTEwLAorCTB4Yjg4YiwgMHgwMDAxLCAweDI5MDgsIDB4YjhjYywgMHhiOWNlLCAweDkwMDUsIDB4MTExMCwgMHhiOWQyLAorCTB4MDAyMCwgMHgwMDk2LCAweDIwNDgsIDB4YTkwMiwgMHgwMDllLCAweDAwMDUsIDB4MDBiNiwgMHgwMTI2LAorCTB4MDBjNiwgMHgwMDI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjEwLCAweDIyNTgsIDB4YmEwMCwgMHg5MDA1LAorCTB4MDExMCwgMHhjMjg1LCAweDAwMDgsIDB4YzI4NCwgMHhiYTAyLCAweDAwMmUsIDB4MDBjZSwgMHgwMTJlLAorCTB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDEyNiwgMHgwMGM2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjEwLAorCTB4MjI1OCwgMHhiYTA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDA2LCAweDExNzAsIDB4Yjg5YywgMHhkMGFjLAorCTB4MDE1OCwgMHgwODBjLCAweDZjMGQsIDB4MDE0MCwgMHg5Mjg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDg2LAorCTB4MDAwNywgMHgxMTEwLCAweDIwMTEsIDB4MDYwMCwgMHgwMDBlLCAweDkyOTQsIDB4ZmYwMCwgMHg5MjE1LAorCTB4YmEwNiwgMHgwMDA2LCAweDkwODYsIDB4MDAwNiwgMHgxMTIwLCAweGJhOTAsIDB4ODJmZiwgMHgwOTBjLAorCTB4MGQ4NSwgMHgwMDBlLCAweDAwY2UsIDB4MDEyZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMTI2LAorCTB4MDBjNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIxMCwgMHgyMjU4LCAweGJhMDQsIDB4MDAwNiwgMHg5MDg2LAorCTB4MDAwNiwgMHgxMTY4LCAweGI4OWMsIDB4ZDBhNCwgMHgwMTUwLCAweDA4MGMsIDB4NmMwOSwgMHgxMTM4LAorCTB4OTI4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwNywgMHgxMTEwLCAweDIwMTEsIDB4MDAwNiwgMHgwMDBlLAorCTB4OTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4OTIxNSwgMHhiYTA2LCAweDAwY2UsIDB4MDEyZSwgMHgwMGJlLAorCTB4MDAwNSwgMHg5MTgyLCAweDA4MDAsIDB4MDIxOCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMGQ2LAorCTB4MDAyNiwgMHg5MTkwLCAweDEwMDAsIDB4MjIwNCwgMHg5MDVkLCAweDExODgsIDB4MDA5NiwgMHgwODBjLAorCTB4MTA1OSwgMHgyOTU4LCAweDAwOWUsIDB4MDE2OCwgMHgyYjAwLCAweDIwMTIsIDB4Yjg1YywgMHhiOGNhLAorCTB4Yjg2MCwgMHhiOGM2LCAweDkwMDYsIDB4YjhhNiwgMHhiOGFlLCAweDA4MGMsIDB4NjFiNywgMHg5MDA2LAorCTB4MDAxMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAyZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBiNiwgMHgwMDk2LAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAyNiwgMHg5MTgyLCAweDA4MDAsIDB4MDIxOCwgMHg5MDg1LAorCTB4MDAwMSwgMHgwNGE4LCAweDAwZDYsIDB4OTE5MCwgMHgxMDAwLCAweDIyMDQsIDB4OTA1ZCwgMHgwNTY4LAorCTB4MjAxMywgMHgwMDAwLCAweGI4YTQsIDB4OTA0ZCwgMHgwMTEwLCAweDA4MGMsIDB4MTA4YiwgMHgwMGQ2LAorCTB4MDBjNiwgMHhiOGJjLCAweDIwNjAsIDB4OGNmZiwgMHgwMTY4LCAweDYwMGMsIDB4MDAwNiwgMHg2MDE0LAorCTB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDExMCwgMHgwODBjLCAweDEwMGIsIDB4MDgwYywgMHhiMTZjLAorCTB4MDBjZSwgMHgwYzg4LCAweDAwY2UsIDB4MDBkZSwgMHgwMGM2LCAweGI4YWMsIDB4OTA2NSwgMHgwMTI4LAorCTB4NjIxYywgMHhkMmM0LCAweDAxMTAsIDB4MDgwYywgMHg5MjhkLCAweDAwY2UsIDB4MmI0OCwgMHhiOGM4LAorCTB4Yjg1ZSwgMHhiOGM0LCAweGI4NjIsIDB4MDgwYywgMHgxMDliLCAweDAwZGUsIDB4OTAwNiwgMHgwMDJlLAorCTB4MDEyZSwgMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHgwMDE2LCAweDkxODIsIDB4MDgwMCwgMHgwMjE4LAorCTB4OTA4NSwgMHgwMDAxLCAweDAwMzAsIDB4OTE4OCwgMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHgwZGMwLAorCTB4OTAwNiwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHg5MDA2LAorCTB4YjgwYSwgMHhiODBlLCAweGI4MDAsIDB4YzA4YywgMHhiODAyLCAweDA4MGMsIDB4Nzc5ZSwgMHgxNTEwLAorCTB4YjhhMCwgMHg5MDg2LCAweDAwN2UsIDB4MDEyMCwgMHgwODBjLCAweGIwOTQsIDB4MTFkOCwgMHgwMDc4LAorCTB4NzA0MCwgMHhkMGU0LCAweDAxYjgsIDB4MDBjNiwgMHgyMDYxLCAweDE5ODIsIDB4NzA0OCwgMHgyMDYyLAorCTB4NzA0YywgMHg2MDA2LCAweDcwNTAsIDB4NjAwYSwgMHg3MDU0LCAweDYwMGUsIDB4MDBjZSwgMHg3MDNjLAorCTB4MjA2OSwgMHgwMTQwLCAweDkwMDUsIDB4MTExMCwgMHgyMDAxLCAweDAwMDEsIDB4Njg4NiwgMHgyMDY5LAorCTB4MTgwMCwgMHg2OGI2LCAweDcwNDAsIDB4Yjg1ZSwgMHg3MDQ4LCAweGI4NjIsIDB4NzA0YywgMHhiODY2LAorCTB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDI3NiwgMHhiOGM0LCAweDIwZTgsIDB4YjhjOCwgMHg5MDg4LAorCTB4MDAwYSwgMHgyMWEwLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLCAweDIwOTksIDB4MDI3YSwgMHg5MDg4LAorCTB4MDAwNiwgMHgyMWEwLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLCAweDIwNjksIDB4MDIwMCwgMHg2ODE3LAorCTB4MDAwMSwgMHg3MDQwLCAweGI4NmEsIDB4NzE0NCwgMHhiOTZlLCAweDcwNDgsIDB4Yjg3MiwgMHg3MDUwLAorCTB4Yjg3NiwgMHgyMDY5LCAweDAyMDAsIDB4NjgxNywgMHgwMDAwLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLAorCTB4MTExMCwgMHg3MTQ0LCAweGI5NmUsIDB4OTE4MiwgMHgwMjExLCAweDEyMTgsIDB4MjAwOSwgMHgwMDA4LAorCTB4MDQwMCwgMHg5MTgyLCAweDAyNTksIDB4MTIxOCwgMHgyMDA5LCAweDAwMDcsIDB4MDBkMCwgMHg5MTgyLAorCTB4MDJjMSwgMHgxMjE4LCAweDIwMDksIDB4MDAwNiwgMHgwMGEwLCAweDkxODIsIDB4MDM0OSwgMHgxMjE4LAorCTB4MjAwOSwgMHgwMDA1LCAweDAwNzAsIDB4OTE4MiwgMHgwNDIxLCAweDEyMTgsIDB4MjAwOSwgMHgwMDA0LAorCTB4MDA0MCwgMHg5MTgyLCAweDA1ODEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDMsIDB4MDAxMCwgMHgyMDA5LAorCTB4MDAwMiwgMHhiOTkyLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDE2LAorCTB4MDAyNiwgMHgwMGU2LCAweDIwNzEsIDB4MDI2MCwgMHg3MDM0LCAweGI4OTYsIDB4NzAzYywgMHhiODlhLAorCTB4NzA1NCwgMHhiODllLCAweDAwMzYsIDB4YmJkNCwgMHhjMzg0LCAweGJhMDAsIDB4MjAwOSwgMHgxODY3LAorCTB4MjEwYywgMHhkMGJjLCAweDAxMjAsIDB4ZDFlYywgMHgwMTEwLCAweGMyYWQsIDB4MDAwOCwgMHhjMmFjLAorCTB4ZDBjNCwgMHgwMTQ4LCAweGQxZTQsIDB4MDEzOCwgMHhjMmJkLCAweGQwY2MsIDB4MDEyOCwgMHhkMzhjLAorCTB4MTEwOCwgMHhjMzg1LCAweDAwMDgsIDB4YzJiYywgMHhiYTAyLCAweGJiZDYsIDB4MDAzZSwgMHgwMGVlLAorCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDA5NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiOGE0LAorCTB4OTA0ZCwgMHgwNTc4LCAweGE5MDAsIDB4ODFmZiwgMHgxNWMwLCAweGFhMDQsIDB4OTI4MiwgMHgwMDEwLAorCTB4MTZjOCwgMHgwMTM2LCAweDAxNDYsIDB4MDFjNiwgMHgwMWQ2LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LAorCTB4OTA4YywgMHgwMDNmLCAweDIxZTAsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwNCwgMHgyMDk4LAorCTB4MjAwOSwgMHgwMDEwLCAweDIwYTksIDB4MDAwMSwgMHg0MDAyLCAweDkwODYsIDB4ZmZmZiwgMHgwMTIwLAorCTB4ODEwOSwgMHgxZGQwLCAweDA4MGMsIDB4MGQ4NSwgMHgzYzAwLCAweDIwZTgsIDB4MzMwMCwgMHg4MDAxLAorCTB4MjBhMCwgMHg0NjA0LCAweDgyMTAsIDB4YWEwNiwgMHgwMWRlLCAweDAxY2UsIDB4MDE0ZSwgMHgwMTNlLAorCTB4MDA2MCwgMHgwODBjLCAweDEwNTksIDB4MDE3MCwgMHgyOTAwLCAweGI4YTYsIDB4YTgwMywgMHgwMDAwLAorCTB4MDgwYywgMHg2YTRhLCAweGE4MDcsIDB4MDAwMSwgMHhhZTEyLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLAorCTB4MDA5ZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDk2LAorCTB4YjhhNCwgMHg5MDRkLCAweDAxODgsIDB4YTgwMCwgMHg5MDA1LCAweDExNTAsIDB4MDgwYywgMHg2YTU5LAorCTB4MTE1OCwgMHhhODA0LCAweDkwOGEsIDB4MDAwMiwgMHgwMjE4LCAweDgwMDEsIDB4YTgwNiwgMHgwMDIwLAorCTB4MDgwYywgMHgxMDhiLCAweGI4YTcsIDB4MDAwMCwgMHgwMDllLCAweDAxMmUsIDB4MDAwNSwgMHgwMDk2LAorCTB4MDBjNiwgMHhiODg4LCAweDkwMDUsIDB4MTkwNCwgMHg2OTNmLCAweGI4ZDAsIDB4OTA0ZCwgMHgwOTA0LAorCTB4NjkzZiwgMHgyMDAxLCAweDAzODIsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDcsIDB4OTA4NiwgMHgwMDAxLAorCTB4MTkwNCwgMHg2OTNkLCAweDA4MGMsIDB4YjE0MywgMHgwOTA0LCAweDY5M2QsIDB4ODIxMCwgMHhiYTNlLAorCTB4YTgwMCwgMHhiOGQyLCAweDkwMDUsIDB4MTEwOCwgMHhiOGNlLCAweDJiMDAsIDB4NjAxMiwgMHgyOTAwLAorCTB4NjAxNiwgMHg2MDIzLCAweDAwMDMsIDB4NjAwYiwgMHhmZmZmLCAweDYwMDcsIDB4MDA0MCwgMHhhODc4LAorCTB4NjA1ZSwgMHhhODgwLCAweDkwODQsIDB4MDBmZiwgMHg2MDY2LCAweGE4ODMsIDB4MDAwMCwgMHhhODdjLAorCTB4ZDBhYywgMHgwMWM4LCAweGMwZGQsIDB4YTg3ZSwgMHhhODg4LCAweDgwMDEsIDB4MTU1OCwgMHhhODE2LAorCTB4YTg2NCwgMHg5MDk0LCAweDAwZjcsIDB4OTI5NiwgMHgwMDExLCAweDE1MjAsIDB4OTA4NCwgMHgwMGZmLAorCTB4YzBiZCwgMHg2MDFlLCAweGE4YWMsIDB4YWFiMCwgMHhhODM2LCAweGFhM2EsIDB4MjAwMSwgMHg4MDA0LAorCTB4NjAwMywgMHgwMDA0LCAweDAwMzAsIDB4MDgwYywgMHgxYzljLCAweDIwMDEsIDB4ODAwNCwgMHg2MDAzLAorCTB4MDAwMiwgMHg2MDQ2LCAweDIwMDEsIDB4MDAxMCwgMHgyYzA4LCAweDA4MGMsIDB4YWNlZCwgMHhiODM4LAorCTB4YmEzYywgMHg5MjAyLCAweDBhMDQsIDB4NjhlNSwgMHgwMDEwLCAweGI4OGIsIDB4MDAwMSwgMHgwMGNlLAorCTB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsIDB4MTdhZCwgMHg2MDFjLCAweGMwYmQsIDB4NjAxZSwgMHgwOGYwLAorCTB4MDBiNiwgMHgwMDk2LCAweDAwMTYsIDB4MjBhOSwgMHgwODAwLCAweDkwMGUsIDB4MDAxNiwgMHgwODBjLAorCTB4NjdiNCwgMHgxMTU4LCAweGI4ZDAsIDB4OTA0ZCwgMHgwMTQwLCAweDNlMDAsIDB4OTA4NiwgMHgwMDAyLAorCTB4MTExOCwgMHhiODAwLCAweGQwYmMsIDB4MTEwOCwgMHgwMDQxLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LAorCTB4Njk0ZSwgMHgwMDFlLCAweDAwYmUsIDB4MDA5ZSwgMHgwMDA1LCAweDAwOTYsIDB4MDAxNiwgMHhiOGQwLAorCTB4OTA0ZCwgMHgwMTg4LCAweGE4MDAsIDB4YjhkMiwgMHg5MDA1LCAweDExMDgsIDB4YjhjZSwgMHg5MDA2LAorCTB4YTgwMiwgMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHhkMjIwLAorCTB4MDgwYywgMHg3MDEyLCAweDBjNjAsIDB4MDAxZSwgMHgwMDllLCAweDAwMDUsIDB4MDA4NiwgMHg5MDQ2LAorCTB4YjhkMCwgMHg5MDRkLCAweDAxYjAsIDB4YTg2YywgMHg5NDA2LCAweDExMTgsIDB4YTg3MCwgMHg5NTA2LAorCTB4MDEyOCwgMHgyOTQwLCAweGE4MDAsIDB4OTA0ZCwgMHgwMTYwLCAweDBjYTgsIDB4YTgwMCwgMHg4OGZmLAorCTB4MTEyOCwgMHhiOGQyLCAweDkwMDUsIDB4MTExOCwgMHhiOGNlLCAweDAwMDgsIDB4YTAwMiwgMHhhODAzLAorCTB4MDAwMCwgMHgwMDhlLCAweDAwMDUsIDB4OTAxZSwgMHgwMDEwLCAweDIwMTksIDB4MDAwMSwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDAwZTYsIDB4MDA5NiwgMHgwMGM2LCAweDAwODYsIDB4MDAyNiwgMHgyMDcxLAorCTB4MTllOCwgMHg5MDQ2LCAweDcwMjgsIDB4OTA2NSwgMHgwMWU4LCAweDYwMTQsIDB4MjA2OCwgMHg4M2ZmLAorCTB4MDEyMCwgMHg2MDVjLCAweDk2MDYsIDB4MDE1OCwgMHgwMDMwLCAweGE4NmMsIDB4OTQwNiwgMHgxMTE4LAorCTB4YTg3MCwgMHg5NTA2LCAweDAxMjAsIDB4MmM0MCwgMHg2MDBjLCAweDIwNjAsIDB4MGM2MCwgMHg2MDBjLAorCTB4MDAwNiwgMHgwMDY2LCAweDI4MzAsIDB4MDgwYywgMHhhNDIwLCAweDAwNmUsIDB4MDAwZSwgMHg4M2ZmLAorCTB4MDUwOCwgMHgwYzA4LCAweDkwNDYsIDB4YjhkMCwgMHg5MDRkLCAweDAxZTAsIDB4ODNmZiwgMHgwMTIwLAorCTB4YTg3OCwgMHg5NjA2LCAweDAxNTgsIDB4MDAzMCwgMHhhODZjLCAweDk0MDYsIDB4MTExOCwgMHhhODcwLAorCTB4OTUwNiwgMHgwMTIwLCAweDI5NDAsIDB4YTgwMCwgMHgyMDQ4LCAweDBjNzAsIDB4YjhkMCwgMHhhYTAwLAorCTB4MDAyNiwgMHg5OTA2LCAweDExMTAsIDB4YmFkMiwgMHgwMDA4LCAweGEyMDIsIDB4MDAwZSwgMHg4M2ZmLAorCTB4MDEwOCwgMHgwYzEwLCAweDAwMmUsIDB4MDA4ZSwgMHgwMGNlLCAweDAwOWUsIDB4MDBlZSwgMHgwMTJlLAorCTB4MDAwNSwgMHg5MDE2LCAweDA0ODksIDB4MTExMCwgMHgyMDExLCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLAorCTB4NmFhZSwgMHgwMTI4LCAweDA4MGMsIDB4Y2ZkYywgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LAorCTB4MDgwYywgMHg2YWFlLCAweDAxMjgsIDB4MDgwYywgMHhjZjdkLCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLAorCTB4MDAwNSwgMHgwODBjLCAweDZhYWUsIDB4MDEyOCwgMHgwODBjLCAweGNmZDksIDB4MDAxMCwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NmFhZSwgMHgwMTI4LCAweDA4MGMsIDB4Y2Y5YywgMHgwMDEwLAorCTB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg2YWFlLCAweDAxMjgsIDB4MDgwYywgMHhkMDFmLAorCTB4MDAxMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHhiOGE0LCAweDkwMGQsIDB4MTExOCwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMDA1LCAweDAxMzYsIDB4MDFjNiwgMHhhODAwLCAweDkwMDUsIDB4MTFiOCwgMHg4OTBlLAorCTB4ODEwZSwgMHg4MTBmLCAweDkxODQsIDB4MDAzZiwgMHgyMGUwLCAweDkxODQsIDB4ZmZjMCwgMHg5MDgwLAorCTB4MDAwNCwgMHgyMDk4LCAweDIwYTksIDB4MDAwMSwgMHgyMDA5LCAweDAwMTAsIDB4NDAwMiwgMHg5NjA2LAorCTB4MDEyOCwgMHg4MTA5LCAweDFkZDgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMWNlLAorCTB4MDEzZSwgMHgwMDA1LCAweDAxNDYsIDB4MDFkNiwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLAorCTB4MDAwNCwgMHgyMGEwLCAweDIwYTksIDB4MDAxMCwgMHgyMDA5LCAweGZmZmYsIDB4NDEwNCwgMHgwMWRlLAorCTB4MDE0ZSwgMHgwMTM2LCAweDAxYzYsIDB4YTgwMCwgMHg5MDA1LCAweDExYjgsIDB4ODkwZSwgMHg4MTBlLAorCTB4ODEwZiwgMHg5MTg0LCAweDAwM2YsIDB4MjBlMCwgMHg5MTg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDA0LAorCTB4MjA5OCwgMHgyMGE5LCAweDAwMDEsIDB4MjAwOSwgMHgwMDEwLCAweDQwMDIsIDB4OTYwNiwgMHgwMTI4LAorCTB4ODEwOSwgMHgxZGQ4LCAweDkwODUsIDB4MDAwMSwgMHgwMDY4LCAweDAxNDYsIDB4MDFkNiwgMHgzMzAwLAorCTB4ODAwMSwgMHgyMGEwLCAweDNjMDAsIDB4MjBlOCwgMHgyMDAxLCAweGZmZmYsIDB4NDAwNCwgMHgwMWRlLAorCTB4MDE0ZSwgMHg5MDA2LCAweDAxY2UsIDB4MDEzZSwgMHgwMDA1LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHhiOGE0LCAweDkwNGQsIDB4MTEyOCwgMHgwODBjLCAweDEwNTksIDB4MDE2OCwgMHgyOTAwLAorCTB4YjhhNiwgMHgwODBjLCAweDZhNGEsIDB4YTgwMywgMHgwMDAxLCAweGE4MDcsIDB4MDAwMCwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMTJlLCAweDAwOWUsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MDA5NiwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweGI4YTQsIDB4OTA0ZCwgMHgwMTMwLCAweGI4YTcsIDB4MDAwMCwgMHgwODBjLAorCTB4MTA4YiwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMDllLCAweDAwMDUsIDB4Yjg5YywgMHhkMGE0LAorCTB4MDAwNSwgMHgwMGI2LCAweDAwZjYsIDB4MDgwYywgMHg3NzllLCAweDAxYjAsIDB4NzFjNCwgMHg4MWZmLAorCTB4MTE5OCwgMHg3MWRjLCAweGQxOWMsIDB4MDE4MCwgMHgyMDAxLCAweDAwN2UsIDB4OTA4MCwgMHgxMDAwLAorCTB4MjAwNCwgMHg5MDVkLCAweDAxNDgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LAorCTB4MTExOCwgMHhiODAwLCAweGMwZWQsIDB4YjgwMiwgMHgyMDc5LCAweDE4NDcsIDB4NzgwNCwgMHhkMGE0LAorCTB4MDFkMCwgMHgwMTU2LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDAwMTYsIDB4MDgwYywgMHg2N2I0LAorCTB4MTE2OCwgMHhiODA0LCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwOTYsIDB4MDAwNCwgMHgwMTE4LAorCTB4OTA4NiwgMHgwMDA2LCAweDExMTgsIDB4YjgwMCwgMHhjMGVkLCAweGI4MDIsIDB4MDAxZSwgMHg4MTA4LAorCTB4MWYwNCwgMHg2YWQ1LCAweDAxNWUsIDB4MDgwYywgMHg2YmNmLCAweDAxMjAsIDB4MjAwMSwgMHgxOTg1LAorCTB4MjAwYywgMHgwMDk4LCAweDIwNzksIDB4MTg0NywgMHg3ODA0LCAweGQwYTQsIDB4MDE5MCwgMHgyMDA5LAorCTB4MDdkMCwgMHgyMDAxLCAweDE4MmMsIDB4MjAwNCwgMHg5MDA1LCAweDAxMzgsIDB4MjAwMSwgMHgxODY3LAorCTB4MjAwNCwgMHhkMGU0LCAweDAxMTAsIDB4MjAwOSwgMHg1ZGMwLCAweDIwMTEsIDB4NmIwYywgMHgwODBjLAorCTB4OGE1ZCwgMHgwMGZlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LCAweDIwMTEsIDB4NmIwYywgMHgwODBjLAorCTB4ODk5MywgMHgwODBjLCAweDZiY2YsIDB4MDFkOCwgMHgyMDAxLCAweDEwN2UsIDB4MjAwNCwgMHgyMDU4LAorCTB4YjkwMCwgMHhjMWVjLCAweGI5MDIsIDB4MDgwYywgMHg2YzBkLCAweDAxMzAsIDB4MjAwOSwgMHgwN2QwLAorCTB4MjAxMSwgMHg2YjBjLCAweDA4MGMsIDB4OGE1ZCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg5MDA2LAorCTB4NzA3ZSwgMHg3MDYwLCAweDcwODIsIDB4MDgwYywgMHgzMGJmLCAweDAwZWUsIDB4MDRkMCwgMHgwMTU2LAorCTB4MDBjNiwgMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwMDE2LCAweDA4MGMsIDB4NjdiNCwgMHgxNTU4LAorCTB4YjgwMCwgMHhkMGVjLCAweDA1NDAsIDB4MDA0NiwgMHhiYWEwLCAweDIyMjAsIDB4OTAwNiwgMHgyMDA5LAorCTB4MDAyOSwgMHgwODBjLCAweGVhOGQsIDB4YjgwMCwgMHhjMGU1LCAweGMwZWMsIDB4YjgwMiwgMHgwODBjLAorCTB4NmMwOSwgMHgyMDAxLCAweDA3MDcsIDB4MTEyOCwgMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg1LAorCTB4MDcwMCwgMHhiODA2LCAweDA4MGMsIDB4YWNmYywgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg5N2IwLAorCTB4MDA3NiwgMHg5MDNlLCAweDA4MGMsIDB4OTY2ZCwgMHg5MDBlLCAweDA4MGMsIDB4ZTc1ZCwgMHgwMDdlLAorCTB4MDA0ZSwgMHgwODBjLCAweGFkMTgsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4NmIzNCwgMHgwMGNlLAorCTB4MDE1ZSwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHg2MDEwLCAweDIwNTgsIDB4YjgwMCwgMHhjMGVjLAorCTB4YjgwMiwgMHgwMGJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDAwOTYsIDB4MDgwYywgMHgxMDcyLAorCTB4MDkwYywgMHgwZDg1LCAweDI5NTgsIDB4MDA5ZSwgMHgyMDAxLCAweDE5NmIsIDB4MmIwMiwgMHg4YjA3LAorCTB4ODAwNiwgMHg4MDA2LCAweDkwOGMsIDB4MDAzZiwgMHhiOWM2LCAweDkwOGMsIDB4ZmZjMCwgMHhiOWNhLAorCTB4YjhhZiwgMHgwMDAwLCAweDIwMDksIDB4MDBmZiwgMHgwODBjLCAweDYxYjcsIDB4YjgwNywgMHgwMDA2LAorCTB4YjgxMywgMHgwMGZmLCAweGI4MTcsIDB4ZmZmZiwgMHhiODZmLCAweDAyMDAsIDB4Yjg2YywgMHhiODkzLAorCTB4MDAwMiwgMHhiOGJiLCAweDA1MjAsIDB4YjhhMywgMHgwMGZmLCAweGI4YWYsIDB4MDAwMCwgMHgwMGNlLAorCTB4MDBiZSwgMHgwMDA1LCAweDc4MTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGFjLAorCTB4MDAwNSwgMHg2MDEwLCAweDAwYjYsIDB4OTA1ZCwgMHgwMTA4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLAorCTB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHhiODA0LCAweDkwOGMsIDB4MDBmZiwgMHg5MTk2LAorCTB4MDAwNiwgMHgwMTg4LCAweDkxOTYsIDB4MDAwNCwgMHgwMTcwLCAweDkxOTYsIDB4MDAwNSwgMHgwMTU4LAorCTB4OTA4YywgMHhmZjAwLCAweDgxMGYsIDB4OTE5NiwgMHgwMDA2LCAweDAxMjgsIDB4OTE5NiwgMHgwMDA0LAorCTB4MDExMCwgMHg5MTk2LCAweDAwMDUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGI2LAorCTB4MDBmNiwgMHgyMDAxLCAweDEwN2UsIDB4MjAwNCwgMHg5MDVkLCAweDAxMTAsIDB4YjgwMCwgMHhkMGVjLAorCTB4MDBmZSwgMHgwMGJlLCAweDAwMDUsIDB4MDEyNiwgMHgwMDI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDA2LAorCTB4YmFhMCwgMHg5MjkwLCAweDEwMDAsIDB4MjIwNCwgMHg5YjA2LCAweDE5MGMsIDB4MGQ4NSwgMHgwMDBlLAorCTB4YmEwMCwgMHg5MDA1LCAweDAxMTAsIDB4YzJmZCwgMHgwMDA4LCAweGMyZmMsIDB4YmEwMiwgMHgwMDJlLAorCTB4MDEyZSwgMHgwMDA1LCAweDIwMTEsIDB4MTgzNywgMHgyMjA0LCAweGQwY2MsIDB4MDEzOCwgMHgyMDAxLAorCTB4MTk4MywgMHgyMDBjLCAweDIwMTEsIDB4NmJmZiwgMHgwODBjLCAweDhhNWQsIDB4MDAwNSwgMHgyMDExLAorCTB4NmJmZiwgMHgwODBjLCAweDg5OTMsIDB4MjAxMSwgMHgxODM3LCAweDIyMDQsIDB4YzBjYywgMHgyMDEyLAorCTB4MDAwNSwgMHgwODBjLCAweDU4NDAsIDB4ZDBhYywgMHgwMDA1LCAweDA4MGMsIDB4NTg0MCwgMHhkMGE0LAorCTB4MDAwNSwgMHgwMDE2LCAweGI5MDQsIDB4OTE4NCwgMHgwMGZmLCAweDkwOGUsIDB4MDAwNiwgMHgwMDFlLAorCTB4MDAwNSwgMHgwMDE2LCAweGI5MDQsIDB4OTE4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTA4ZSwgMHgwMDA2LAorCTB4MDAxZSwgMHgwMDA1LCAweDAwYjYsIDB4MDBmNiwgMHgwODBjLCAweGQ2NDUsIDB4MDE1OCwgMHg3MGRjLAorCTB4OTA4NCwgMHgwMDI4LCAweDAxMzgsIDB4MjAwMSwgMHgxMDdmLCAweDIwMDQsIDB4OTA1ZCwgMHgwMTEwLAorCTB4YjhkNCwgMHhkMDk0LCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDM2LAorCTB4MDA0NiwgMHgwMDc2LCAweDAwYjYsIDB4MjAwMSwgMHgxODE4LCAweDIwM2MsIDB4OTc4MCwgMHgzNDhlLAorCTB4MjAzZCwgMHg5N2JjLCAweGZmMDAsIDB4ODczZiwgMHg5MDA2LCAweDIwMTgsIDB4MjAwOCwgMHg5Mjg0LAorCTB4ODAwMCwgMHgwMTEwLCAweDIwMTksIDB4MDAwMSwgMHg5Mjk0LCAweDdmZmYsIDB4MjEwMCwgMHg5NzA2LAorCTB4MDE5MCwgMHg5MWEwLCAweDEwMDAsIDB4MjQwNCwgMHg5MDVkLCAweDAxNjgsIDB4YjgwNCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MDg2LCAweDAwMDYsIDB4MTEzOCwgMHg4M2ZmLCAweDAxMTgsIDB4Yjg5YywgMHhkMGE0LAorCTB4MDExMCwgMHg4MjExLCAweDAxNTgsIDB4ODEwOCwgMHg4M2ZmLCAweDAxMjAsIDB4OTE4MiwgMHgwODAwLAorCTB4MGUyOCwgMHgwMDY4LCAweDkxODIsIDB4MDA3ZSwgMHgwZTA4LCAweDAwNDgsIDB4MDBiZSwgMHgwMDdlLAorCTB4MDA0ZSwgMHgwMDNlLCAweDAwMWUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMGUsIDB4MDAwNSwgMHgwMGJlLAorCTB4MDA3ZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAxZSwgMHg5MDA2LCAweDAwMGUsIDB4MDAwNSwgMHgwMDQ2LAorCTB4MDA1NiwgMHgwMDc2LCAweDAwYjYsIDB4MjEwMCwgMHg5MDg0LCAweDdmZmYsIDB4OTA4MCwgMHgxMDAwLAorCTB4MjAwNCwgMHg5MDVkLCAweDAxMzAsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LAorCTB4MDU1MCwgMHg5MTg0LCAweDgwMDAsIDB4MDU4MCwgMHgyMDAxLCAweDE4MTgsIDB4MjAzYywgMHg5NzgwLAorCTB4MzQ4ZSwgMHgyMDNkLCAweDk3YmMsIDB4ZmYwMCwgMHg4NzNmLCAweDkwMDYsIDB4MjAyMCwgMHgyNDAwLAorCTB4OTcwNiwgMHgwMWEwLCAweDk0YTgsIDB4MTAwMCwgMHgyNTA0LCAweDkwNWQsIDB4MDE3OCwgMHhiODA0LAorCTB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwNiwgMHgxMTQ4LCAweGI4OWMsIDB4ZDBhNCwgMHgwMTMwLAorCTB4YjgxNCwgMHg5MjA2LCAweDExMTgsIDB4YjgxMCwgMHg5MzA2LCAweDAxMjgsIDB4ODQyMCwgMHg5NDgyLAorCTB4MDgwMCwgMHgwZTI4LCAweDAwNDgsIDB4OTE4YywgMHg3ZmZmLCAweDAwYmUsIDB4MDA3ZSwgMHgwMDVlLAorCTB4MDA0ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg5MThjLCAweDdmZmYsIDB4MDBiZSwgMHgwMDdlLAorCTB4MDA1ZSwgMHgwMDRlLCAweDkwMDYsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MDBhMCwgMHg4MDAxLAorCTB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4MWRkOCwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLAorCTB4MDBmOCwgMHg4MDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweDFkZDgsIDB4MDAwZSwgMHgwMDA1LAorCTB4MDAwNiwgMHgyMDAxLCAweDAwZTgsIDB4ODAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHgxZGQ4LAorCTB4MDAwZSwgMHgwMDA1LCAweDIwNzEsIDB4MTkxMCwgMHg3MDAzLCAweDAwMDEsIDB4NzAwNywgMHgwMDAwLAorCTB4OTAwNiwgMHg3MDEyLCAweDcwMTYsIDB4NzAxYSwgMHg3MDFlLCAweDcwMGEsIDB4NzA0NiwgMHgyMDAxLAorCTB4MTkyMiwgMHgyMDAzLCAweDAwMDAsIDB4MDAwNSwgMHgwMDE2LCAweDAwZTYsIDB4MjA3MSwgMHgxOTQ4LAorCTB4OTAwZSwgMHg3MTBhLCAweDA4MGMsIDB4NTg0MCwgMHhkMGZjLCAweDExNDAsIDB4MDgwYywgMHg1ODQwLAorCTB4OTAwZSwgMHhkMDljLCAweDAxMDgsIDB4ODEwOCwgMHg3MTAyLCAweDA0NzAsIDB4MjAwMSwgMHgxODY3LAorCTB4MjAwYywgMHg5MTg0LCAweDAwMDcsIDB4MDAwNiwgMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLAorCTB4MDAwZSwgMHgwMTA4LCAweDkwMDYsIDB4MDAwMiwgMHg2ZDA2LCAweDZkMDYsIDB4NmQwNiwgMHg2ZDA2LAorCTB4NmQwNiwgMHg2ZDI0LCAweDZkMzksIDB4NmQ0NywgMHg3MDAzLCAweDAwMDMsIDB4MjAwOSwgMHgxODY4LAorCTB4MjEwYywgMHg5MTg0LCAweGZmMDAsIDB4OTA4ZSwgMHhmZjAwLCAweDAxNDAsIDB4ODAwNywgMHg5MDA1LAorCTB4MTExMCwgMHgyMDAxLCAweDAwMDIsIDB4ODAwMywgMHg3MDA2LCAweDAwMzAsIDB4NzAwNywgMHgwMDAxLAorCTB4MDAxOCwgMHg3MDAzLCAweDAwMDUsIDB4MGM1MCwgMHgyMDcxLCAweDE5MTAsIDB4NzA0ZiwgMHgwMDAwLAorCTB4MjA3MSwgMHgxODAwLCAweDcwZjcsIDB4MDAwMSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHg3MDAzLAorCTB4MDAwMCwgMHgyMDcxLCAweDE5MTAsIDB4MjAwOSwgMHgxODY4LCAweDIxMGMsIDB4OTE4NCwgMHg3ZjAwLAorCTB4ODAwNywgMHg5MDhjLCAweDAwMGYsIDB4MDE2MCwgMHg3MTRlLCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LAorCTB4ODAwNCwgMHgyMDcxLCAweDE4MDAsIDB4OTA4YywgMHgwMDA3LCAweDAxMjgsIDB4NzBmNiwgMHgwYzIwLAorCTB4NzA0ZiwgMHgwMDBmLCAweDBjOTAsIDB4NzBmNywgMHgwMDA1LCAweDA4ZjAsIDB4MDBlNiwgMHgyMDcxLAorCTB4MDA1MCwgMHg2ODRjLCAweDkwMDUsIDB4MTE1MCwgMHgwMGU2LCAweDIwNzEsIDB4MTkxMCwgMHg3MDI4LAorCTB4YzA4NSwgMHg3MDJhLCAweDAwZWUsIDB4OTA4NSwgMHgwMDAxLCAweDA0ODgsIDB4Njg0NCwgMHg5MDA1LAorCTB4MDE1OCwgMHgwODBjLCAweDdiMjgsIDB4NmE2MCwgMHg5MjAwLCAweDcwMDIsIDB4Njg2NCwgMHg5MTAxLAorCTB4NzAwNiwgMHg5MDA2LCAweDcwMTIsIDB4NzAxNiwgMHg2ODYwLCAweDcwMDIsIDB4Njg2NCwgMHg3MDA2LAorCTB4Njg2OCwgMHg3MDBhLCAweDY4NmMsIDB4NzAwZSwgMHg2ODQ0LCAweDkwMDUsIDB4MTExMCwgMHg3MDEyLAorCTB4NzAxNiwgMHg2ODRjLCAweDcwMWEsIDB4NzAxYywgMHg5MDg1LCAweDAwNDAsIDB4NzAxZSwgMHg3MDM3LAorCTB4MDAxOSwgMHg3MDJiLCAweDAwMDEsIDB4MDBlNiwgMHgyMDcxLCAweDE5MTAsIDB4NzAyOCwgMHhjMDg0LAorCTB4NzAyYSwgMHg3MDA3LCAweDAwMDEsIDB4NzAwYiwgMHgwMDAwLCAweDAwZWUsIDB4OTAwNiwgMHgwMGVlLAorCTB4MDAwNSwgMHgwMGU2LCAweDAwMjYsIDB4MjA3MSwgMHgxOTQ4LCAweDcwMDAsIDB4OTAxNSwgMHgwOTA0LAorCTB4NzAxNywgMHg5Mjg2LCAweDAwMDMsIDB4MDkwNCwgMHg2ZWFjLCAweDkyODYsIDB4MDAwNSwgMHgwOTA0LAorCTB4NmVhYywgMHgyMDcxLCAweDE4NzcsIDB4YTg3YywgMHg5MDA1LCAweDA5MDQsIDB4NmUwNywgMHg3MTQwLAorCTB4YTg2OCwgMHg5MTAyLCAweDBhMDQsIDB4NzAxNywgMHhhODc4LCAweGQwODQsIDB4MTVkOCwgMHhhODUzLAorCTB4MDAxOSwgMHgyMDAxLCAweDgwMjMsIDB4YTg0ZSwgMHgyMDcxLCAweDE5MTAsIDB4NzAxYywgMHg5MDA1LAorCTB4MTkwNCwgMHg3MWM2LCAweDBlMDQsIDB4NzIzNCwgMHgyMDcxLCAweDAwMDAsIDB4YTg1MCwgMHg3MDMyLAorCTB4YTg0YywgMHg3MDgyLCAweGE4NzAsIDB4NzA4NiwgMHhhODZjLCAweDcwOGEsIDB4YTg4MCwgMHg3MDhlLAorCTB4NzAzNiwgMHgwMTQ2LCAweDAxZDYsIDB4MDEzNiwgMHgwMWM2LCAweDAxNTYsIDB4MjBlOSwgMHgwMDAwLAorCTB4MjBhMSwgMHgwMDJhLCAweGE4NjgsIDB4MjBhOCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLAorCTB4MDAyMSwgMHgyMDk4LCAweDQwMDMsIDB4MDE1ZSwgMHgwMWNlLCAweDAxM2UsIDB4MDFkZSwgMHgwMTRlLAorCTB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMjAwLAorCTB4MDgwNCwgMHg2ZThmLCAweGE4NTMsIDB4MDAxYiwgMHgyMDAxLCAweDgwMjcsIDB4MDgyMCwgMHg3MDA0LAorCTB4ZDA4YywgMHgxOTA0LCAweDcwMTcsIDB4YTg1MywgMHgwMDFhLCAweDIwMDEsIDB4ODAyNCwgMHgwODA0LAorCTB4NmRjYiwgMHgwMGU2LCAweDAwMjYsIDB4MjA3MSwgMHgxOTQ4LCAweDcwMDAsIDB4OTAxNSwgMHgwOTA0LAorCTB4NzAxNywgMHg5Mjg2LCAweDAwMDMsIDB4MDkwNCwgMHg2ZWFjLCAweDkyODYsIDB4MDAwNSwgMHgwOTA0LAorCTB4NmVhYywgMHhhODRmLCAweDgwMjIsIDB4YTg1MywgMHgwMDE4LCAweDA4MDQsIDB4NmU3NCwgMHhhODY4LAorCTB4ZDBmYywgMHgxNTA4LCAweDAwZTYsIDB4MDAyNiwgMHgyMDAxLCAweDE5NDgsIDB4MjAwNCwgMHg5MDE1LAorCTB4MDkwNCwgMHg3MDE3LCAweGE5NzgsIDB4YTg3NCwgMHg5MTA1LCAweDE5MDQsIDB4NzAxNywgMHg5Mjg2LAorCTB4MDAwMywgMHgwOTA0LCAweDZlYWMsIDB4OTI4NiwgMHgwMDA1LCAweDA5MDQsIDB4NmVhYywgMHhhODdjLAorCTB4ZDBiYywgMHgxOTA0LCAweDcwMTcsIDB4MjIwMCwgMHgwMDAyLCAweDcwMTcsIDB4NmU3MCwgMHg2ZWFjLAorCTB4NmVhYywgMHg3MDE3LCAweDZlYWMsIDB4MDAwNSwgMHhhODY4LCAweGQwZmMsIDB4MTUwMCwgMHgwMGU2LAorCTB4MDAyNiwgMHgyMDA5LCAweDE5NDgsIDB4MjEwYywgMHg4MWZmLCAweDA5MDQsIDB4NzAxNywgMHhhODgwLAorCTB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwMSwgMHgxOTA0LCAweDcwMTcsIDB4OTE4NiwgMHgwMDAzLAorCTB4MDkwNCwgMHg2ZWFjLCAweDkxODYsIDB4MDAwNSwgMHgwOTA0LCAweDZlYWMsIDB4YTg3YywgMHhkMGNjLAorCTB4MDkwNCwgMHg3MDE3LCAweGE4NGYsIDB4ODAyMSwgMHhhODUzLCAweDAwMTcsIDB4MDAyOCwgMHgwMDA1LAorCTB4YTg0ZiwgMHg4MDIwLCAweGE4NTMsIDB4MDAxNiwgMHgyMDcxLCAweDE5MTAsIDB4NzAxYywgMHg5MDA1LAorCTB4MTkwNCwgMHg3MWM2LCAweDBlMDQsIDB4NzIzNCwgMHgyMDcxLCAweDAwMDAsIDB4YTg0YywgMHg3MDgyLAorCTB4YTg1MCwgMHg3MDMyLCAweGE4NmMsIDB4NzA4NiwgMHg3MDM2LCAweGE4NzAsIDB4NzA4YSwgMHgyMDkxLAorCTB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTIwMCwgMHgyMDcxLAorCTB4MTgwMCwgMHgyMDExLCAweDAwMDEsIDB4YTgwNCwgMHg5MDBkLCAweDcwMmMsIDB4MTE1OCwgMHhhODAyLAorCTB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODg5OSwgMHgwMDJlLAorCTB4MDBlZSwgMHgwMDA1LCAweDAwOTYsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLAorCTB4ODFmZiwgMHgxZGM4LCAweDAwOWUsIDB4MGM1OCwgMHhhODRmLCAweDAwMDAsIDB4MDBmNiwgMHgyMDc5LAorCTB4MDA1MCwgMHgyMDcxLCAweDE5MTAsIDB4YTgwMywgMHgwMDAwLCAweDcwMTAsIDB4OTAwNSwgMHgxOTA0LAorCTB4NmY5ZCwgMHg3ODJjLCAweDkwOGMsIDB4MDc4MCwgMHgxOTBjLCAweDczODIsIDB4ODAwNCwgMHg4MDA0LAorCTB4ODAwNCwgMHg5MDg0LCAweDAwMDMsIDB4MDAwMiwgMHg2ZWNhLCAweDZmOWQsIDB4NmVlZSwgMHg2ZjNhLAorCTB4MDgwYywgMHgwZDg1LCAweDIwNzEsIDB4MTgwMCwgMHgyOTAwLCAweDc4MjIsIDB4YTgwNCwgMHg5MDBkLAorCTB4MTE2OCwgMHgyMDcxLCAweDFhMDQsIDB4NzA0NCwgMHg5MDA1LCAweDEzMjAsIDB4MjAwMSwgMHgxOTQ5LAorCTB4MjAwNCwgMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4OTAxNiwgMHg3MDJjLAogCTB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLAotCTB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4NzMyLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgyOTA4LCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMTgsIDB4OTA0ZCwgMHg3MTFhLAotCTB4MDExMCwgMHhhOTAyLCAweDAwMDgsIDB4NzExZSwgMHgyMTQ4LCAweGE4MDQsIDB4OTAwZCwgMHgxOTA0LAotCTB4NzBiMCwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcyODEsIDB4ZDA5YywgMHgxMWIwLAotCTB4NzAxYywgMHg5MDRkLCAweDAxOTgsIDB4YTg0YywgMHg5MDA1LCAweDExODAsIDB4NzAxMCwgMHg4MDAxLAotCTB4NzAxMiwgMHgxMTA4LCAweDcwMWEsIDB4YTgwMCwgMHg3MDFlLCAweDI5MDAsIDB4NzgyMiwgMHg3ODJjLAotCTB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzI4MSwgMHhkMDljLCAweDBkNTAsIDB4NzgyYywgMHg5MDk0LAotCTB4MDc4MCwgMHgxOTBjLCAweDcyODEsIDB4ZDBhNCwgMHgwNWI4LCAweDAwZTYsIDB4NzgyNCwgMHgyMDQ4LAotCTB4MjA3MSwgMHgxODAwLCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLAotCTB4NzBjMiwgMHgwODBjLCAweDg3MzIsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjgxLAotCTB4ZDBhNCwgMHgxZDYwLCAweDAwZWUsIDB4MGUwNCwgMHg3MGE5LCAweDc4MzgsIDB4NzkzOCwgMHg5MTBlLAotCTB4MWRlMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODM2LCAweDY4MzMsIDB4MDAxMywgMHgwMGRlLAotCTB4NzA0NCwgMHhjMDg0LCAweDcwNDYsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LAotCTB4ZDA4NCwgMHgxOTBjLCAweDExZjQsIDB4NzA0YiwgMHgwMDAwLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLAotCTB4MDAwNSwgMHg3MDQ0LCAweGMwODUsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLAotCTB4ODIxMCwgMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLAotCTB4MDgwYywgMHg4NzMyLCAweDAwZWUsIDB4MDgwNCwgMHg3MDUxLCAweDIwNzEsIDB4MTkxMCwgMHhhODAzLAotCTB4MDAwMCwgMHgyOTA4LCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMTgsIDB4OTA0ZCwgMHg3MTFhLAotCTB4MDExMCwgMHhhOTAyLCAweDAwMDgsIDB4NzExZSwgMHgyMTQ4LCAweGE4MDQsIDB4OTAwZCwgMHgxMTI4LAotCTB4MWUwNCwgMHg3MGYwLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LAorCTB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4ODk5LCAweDBjMTgsIDB4MjA3MSwgMHgxODAwLAorCTB4MjkwMCwgMHg3ODIyLCAweGE4MDQsIDB4OTAwZCwgMHgxNWEwLCAweDc4MjQsIDB4MDBlNiwgMHgyMDcxLAorCTB4MDA0MCwgMHg3MTJjLCAweGQxOWMsIDB4MTE3MCwgMHgyMDA5LCAweDE4MzAsIDB4MjEwYywgMHg5MThhLAorCTB4MDAyMCwgMHgwMjQwLCAweDcwMjIsIDB4MjAwMSwgMHgxZGMwLCAweDIwMGMsIDB4ODEwOCwgMHgyMTAyLAorCTB4MDBlZSwgMHgwMDU4LCAweDAwZWUsIDB4MjA0OCwgMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLAorCTB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4ODk5LCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLAorCTB4MTkwYywgMHg3MzgyLCAweGQwYTQsIDB4MTljOCwgMHgyMDcxLCAweDFhMDQsIDB4NzA0NCwgMHg5MDA1LAorCTB4MTMyMCwgMHgyMDAxLCAweDE5NDksIDB4MjAwNCwgMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLAorCTB4MDAwNSwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLAorCTB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4ODk5LAorCTB4MDgwNCwgMHg2ZWY1LCAweDAwOTYsIDB4MDBlNiwgMHg3ODI0LCAweDIwNDgsIDB4MjA3MSwgMHgxODAwLAorCTB4NzAyYywgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLCAweDgwMDAsIDB4NzBjMiwgMHgwODBjLAorCTB4ODg5OSwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDczODIsIDB4ZDBhNCwgMHgxZDYwLAorCTB4MDBlZSwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDczODIsIDB4ZDA5YywgMHgxMTk4LAorCTB4MDA5ZSwgMHgyOTAwLCAweDc4MjIsIDB4YTgwNCwgMHg5MDBkLCAweDE1NTAsIDB4MjA3MSwgMHgxYTA0LAorCTB4NzA0NCwgMHg5MDA1LCAweDEzMjAsIDB4MjAwMSwgMHgxOTQ5LCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLAorCTB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDA5ZSwgMHgyOTA4LCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLAorCTB4NzAxOCwgMHg5MDRkLCAweDcxMWEsIDB4MDExMCwgMHhhOTAyLCAweDAwMDgsIDB4NzExZSwgMHgyMTQ4LAorCTB4YTgwNCwgMHg5MDBkLCAweDExNjgsIDB4MjA3MSwgMHgxYTA0LCAweDcwNDQsIDB4OTAwNSwgMHgxMzIwLAorCTB4MjAwMSwgMHgxOTQ5LCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LAorCTB4MjA3MSwgMHgxODAwLCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLAorCTB4MjkwMCwgMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLAorCTB4ODg5OSwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLAorCTB4NzAxMiwgMHg3MDE4LCAweDkwNGQsIDB4NzExYSwgMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLAorCTB4MjE0OCwgMHhhODA0LCAweDkwMGQsIDB4MTkwNCwgMHg2ZmYxLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLAorCTB4MTkwYywgMHg3MzgyLCAweGQwOWMsIDB4MTE5OCwgMHg3MDFjLCAweDkwNGQsIDB4MDE4MCwgMHg3MDEwLAorCTB4ODAwMSwgMHg3MDEyLCAweDExMDgsIDB4NzAxYSwgMHhhODAwLCAweDcwMWUsIDB4MjkwMCwgMHg3ODIyLAorCTB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MzgyLCAweGQwOWMsIDB4MGQ2OCwgMHg3ODJjLAorCTB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzM4MiwgMHhkMGE0LCAweDAxYjAsIDB4MDBlNiwgMHg3ODI0LAorCTB4MjA0OCwgMHgyMDcxLCAweDE4MDAsIDB4NzAyYywgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLAorCTB4ODAwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODg5OSwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLAorCTB4NzM4MiwgMHhkMGE0LCAweDFkNjAsIDB4MDBlZSwgMHgyMDcxLCAweDFhMDQsIDB4NzA0NCwgMHg5MDA1LAorCTB4MTMyMCwgMHgyMDAxLCAweDE5NDksIDB4MjAwNCwgMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLAorCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LAorCTB4YTgwMiwgMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLAorCTB4NzBjMiwgMHgwODBjLCAweDg4OTksIDB4MDBlZSwgMHgwODA0LCAweDZmYWQsIDB4YTg2OCwgMHhkMGZjLAorCTB4MTVlMCwgMHgwMDk2LCAweGE4MDQsIDB4YTgwNywgMHgwMDAwLCAweDkwNGQsIDB4MTkwYywgMHgxMDBiLAorCTB4MDA5ZSwgMHgwMDE4LCAweGE4NjgsIDB4ZDBmYywgMHgxNTgwLCAweDAwZTYsIDB4MDAyNiwgMHhhODRmLAorCTB4MDAwMCwgMHgwMGY2LCAweDIwNzksIDB4MDA1MCwgMHgyMDcxLCAweDE5MTAsIDB4YTgwMywgMHgwMDAwLAorCTB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4ZSwgMHgwMDE2LCAweDAxYTgsIDB4NzAxMCwgMHg5MDA1LAorCTB4MTkwNCwgMHg3MTQyLCAweDc4MmMsIDB4OTA4YywgMHgwNzgwLCAweDE5MGMsIDB4NzM4MiwgMHg4MDA0LAorCTB4ODAwNCwgMHg4MDA0LCAweDkwODQsIDB4MDAwMywgMHgwMDAyLCAweDcwNDYsIDB4NzE0MiwgMHg3MDYxLAorCTB4NzBkMywgMHgwODBjLCAweDBkODUsIDB4MjAwOSwgMHgxOTQ4LCAweDIxMDQsIDB4MDAwMiwgMHg3MDI2LAorCTB4NzAyNiwgMHg3MDI2LCAweDZlYjUsIDB4NzAyNiwgMHg2ZWI1LCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLAorCTB4MjkwMCwgMHg3ODIyLCAweGE4MDQsIDB4OTAwZCwgMHgxMTIwLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLAorCTB4MDAwNSwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLAorCTB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLCAweDcwYzIsIDB4MDgwYywgMHg4ODk5LAorCTB4MGM2MCwgMHgyMDcxLCAweDE4MDAsIDB4MjkwMCwgMHg3ODIyLCAweGE4MDQsIDB4OTAwZCwgMHgxOTA0LAorCTB4NzBjMiwgMHg3ODMwLCAweGQwZGMsIDB4MTEyMCwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LAorCTB4NzgyNCwgMHgwMGU2LCAweDIwNzEsIDB4MDA0MCwgMHg3MTJjLCAweGQxOWMsIDB4MTE3MCwgMHgyMDA5LAorCTB4MTgzMCwgMHgyMTBjLCAweDkxOGEsIDB4MDAyMCwgMHgwMjQwLCAweDcwMjIsIDB4MjAwMSwgMHgxZGMwLAorCTB4MjAwYywgMHg4MTA4LCAweDIxMDIsIDB4MDBlZSwgMHgwMDU4LCAweDAwZWUsIDB4MjA0OCwgMHg3MDJjLAorCTB4YTgwMiwgMHgyOTAwLCAweDcwMmUsIDB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4ODk5LAorCTB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MzgyLCAweGQwYTQsIDB4MTljOCwgMHgwZTA0LAorCTB4NzBiOSwgMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLAorCTB4NjgzNiwgMHg2ODMzLCAweDAwMTMsIDB4MDBkZSwgMHgyMDAxLCAweDE5MjEsIDB4MjAwYywgMHhjMTg0LAorCTB4MjEwMiwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLAorCTB4MTIwMCwgMHgyMDAxLCAweDE5MjIsIDB4MjAwMywgMHgwMDAwLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLAorCTB4MDAwNSwgMHgyMDAxLCAweDE5MjEsIDB4MjAwYywgMHhjMTg1LCAweDIxMDIsIDB4MDBmZSwgMHgwMDJlLAorCTB4MDBlZSwgMHgwMDA1LCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLAorCTB4MjkwMCwgMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLAorCTB4ODg5OSwgMHgwODA0LCAweDcwNzAsIDB4MDA5NiwgMHgwMGU2LCAweDc4MjQsIDB4MjA0OCwgMHgyMDcxLAorCTB4MTgwMCwgMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4ODAwMCwgMHg3MGMyLAorCTB4MDgwYywgMHg4ODk5LCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzM4MiwgMHhkMGE0LAorCTB4MWQ2MCwgMHgwMGVlLCAweDBlMDQsIDB4NzExNSwgMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLAorCTB4MDBkNiwgMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsIDB4MDBkZSwgMHg3MDQ0LAorCTB4YzA4NCwgMHg3MDQ2LCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LAorCTB4MTkwYywgMHgxMjAwLCAweDcwNGIsIDB4MDAwMCwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLAorCTB4NzM4MiwgMHhkMDljLCAweDExNzAsIDB4MDA5ZSwgMHgyOTAwLCAweDc4MjIsIDB4YTgwNCwgMHg5MDBkLAorCTB4MTFlMCwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDcwNDQsIDB4YzA4NSwgMHg3MDQ2LAorCTB4MGM1OCwgMHgwMDllLCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHg5MDRkLAorCTB4NzExYSwgMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLCAweDIxNDgsIDB4YTgwNCwgMHg5MDBkLAorCTB4MTEyMCwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LAogCTB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LAotCTB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MzIsIDB4MGUwNCwgMHg3MGRhLAotCTB4MjA3MSwgMHgxOTEwLCAweDcwMWMsIDB4MjA0OCwgMHhhODRjLCAweDkwMGQsIDB4MGQxOCwgMHgyMDcxLAotCTB4MDAwMCwgMHg3MTgyLCAweGE4NTAsIDB4NzAzMiwgMHhhODZjLCAweDcwODYsIDB4NzAzNiwgMHhhODcwLAotCTB4NzA4YSwgMHhhODUwLCAweDkwODIsIDB4MDAxOSwgMHgxMjc4LCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLAotCTB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWY0LCAweDIwNzEsIDB4MTkxMCwgMHgwODBjLAotCTB4NzI2ZCwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHhhODUwLCAweDkwODIsIDB4MDAxYywgMHgxZTY4LAotCTB4YTg4MCwgMHg3MDhlLCAweDcwMzYsIDB4MDE0NiwgMHgwMWQ2LCAweDAxMzYsIDB4MDFjNiwgMHgwMTU2LAotCTB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDAyYSwgMHhhODY4LCAweDIwYTgsIDB4YTg2MCwgMHgyMGUwLAotCTB4YTg1YywgMHg5MDgwLCAweDAwMjEsIDB4MjA5OCwgMHg0MDAzLCAweDAxNWUsIDB4MDFjZSwgMHgwMTNlLAotCTB4MDFkZSwgMHgwMTRlLCAweDA4OTAsIDB4MjA3MSwgMHgxOTEwLCAweGE4MDMsIDB4MDAwMCwgMHgyOTA4LAotCTB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHg5MDRkLCAweDcxMWEsIDB4MDExMCwgMHhhOTAyLAotCTB4MDAwOCwgMHg3MTFlLCAweDIxNDgsIDB4YTgwNCwgMHg5MDBkLCAweDExMTgsIDB4MDAyZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgyMDcxLCAweDE4MDAsIDB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLAotCTB4ODIxMCwgMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLAotCTB4MDgwYywgMHg4NzMyLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwMDYsIDB4YTg3YywgMHgwMDA2LAotCTB4YTg2NywgMHgwMTAzLCAweDIwYTksIDB4MDAxYywgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLAotCTB4MDAxZCwgMHgyMGEwLCAweDkwMDYsIDB4NDAwNCwgMHgwMDBlLCAweDkwODQsIDB4MDBmZiwgMHhhODdlLAotCTB4MDAwZSwgMHhhODdhLCAweGE5ODIsIDB4MDAwNSwgMHgyMDcxLCAweDE5MTAsIDB4NzAwNCwgMHgwMDAyLAotCTB4NzE4MCwgMHg3MTgxLCAweDcyNmMsIDB4NzE4MSwgMHg3MTdlLCAweDcyNmMsIDB4MDgwYywgMHgwZDc5LAotCTB4MDAwNSwgMHgyMDAxLCAweDE5NDksIDB4MjAwNCwgMHgwMDAyLCAweDcxOGIsIDB4NzE4YiwgMHg3MjA1LAotCTB4NzIwNiwgMHg3MThiLCAweDcyMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MWUwYywgMHg3MjhjLAotCTB4NzAxYywgMHg5MDRkLCAweDA1MDgsIDB4YTg0YywgMHg5MDA1LCAweDA5MDQsIDB4NzFkNiwgMHgwZTA0LAotCTB4NzFiNCwgMHhhOTRjLCAweDIwNzEsIDB4MDAwMCwgMHg3MTgyLCAweGE4NTAsIDB4NzAzMiwgMHhhODZjLAotCTB4NzA4NiwgMHg3MDM2LCAweGE4NzAsIDB4NzA4YSwgMHhhODUwLCAweDkwODIsIDB4MDAxOSwgMHgxMjc4LAotCTB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWY0LAotCTB4MjA3MSwgMHgxOTEwLCAweDA4MGMsIDB4NzI2ZCwgMHgwMTJlLCAweDA4MDQsIDB4NzIwNCwgMHhhODUwLAotCTB4OTA4MiwgMHgwMDFjLCAweDFlNjgsIDB4YTg4MCwgMHg3MDhlLCAweDcwMzYsIDB4MDE0NiwgMHgwMWQ2LAotCTB4MDEzNiwgMHgwMWM2LCAweDAxNTYsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDAyYSwgMHhhODY4LAotCTB4MjBhOCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMjEsIDB4MjA5OCwgMHg0MDAzLAotCTB4MDE1ZSwgMHgwMWNlLCAweDAxM2UsIDB4MDFkZSwgMHgwMTRlLCAweDA4OTAsIDB4MjAwMSwgMHgwMDViLAotCTB4MjAwNCwgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MjgxLCAweGQwOWMsIDB4MjA3MSwgMHgxOTEwLAotCTB4MTUxMCwgMHgyMDcxLCAweDE5MTAsIDB4NzAwZiwgMHgwMDAxLCAweGE5NjQsIDB4OTE4NCwgMHgwMGZmLAotCTB4OTA4NiwgMHgwMDAzLCAweDExMzAsIDB4ODEwZiwgMHg5MThjLCAweDAwZmYsIDB4ODEwMSwgMHgwMTA4LAotCTB4NzEwZSwgMHgyOTAwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDUwLCAweDY4MjIsIDB4MDBkZSwgMHgyMDcxLAotCTB4MTkxMCwgMHg3MDFjLCAweDIwNDgsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsIDB4YTgwMCwgMHg3MDFlLAotCTB4OTAwNSwgMHgxMTA4LCAweDcwMWEsIDB4MDEyZSwgMHgwMDA1LCAweDAwMDUsIDB4MDBkNiwgMHgyMDA4LAotCTB4MjA2OSwgMHgxYTA1LCAweDY4NDQsIDB4OTAwNSwgMHgwNzYwLCAweDAxNTgsIDB4OTE4NiwgMHgwMDAzLAotCTB4MDU0MCwgMHgyMDAxLCAweDE4MTUsIDB4MjAwNCwgMHgyMDA5LCAweDFiNzQsIDB4MjEwYywgMHg5MTAyLAotCTB4MTUwMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDAwNTAsIDB4NjkzYywgMHg2ODM4LAotCTB4OTEwNiwgMHgwMTkwLCAweDBlMDQsIDB4NzIzOCwgMHgyMDY5LCAweDAwMDAsIDB4NjgzNywgMHg4MDQwLAotCTB4NjgzMywgMHgwMDEyLCAweDY4ODMsIDB4ODA0MCwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LAotCTB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFmNCwgMHgyMDY5LCAweDFhMDUsIDB4Njg0NywgMHhmZmZmLAotCTB4MDEyZSwgMHgwMGRlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDFlMGMsIDB4NzJmYywgMHg3MDFjLAotCTB4OTA0ZCwgMHgwNTQwLCAweDIwMDEsIDB4MDA1YiwgMHgyMDA0LCAweDkwOTQsIDB4MDc4MCwgMHgxNWM5LAotCTB4ZDA5YywgMHgxNTAwLCAweDIwNzEsIDB4MTkxMCwgMHg3MDBmLCAweDAwMDEsIDB4YTk2NCwgMHg5MTg0LAorCTB4NzAyZSwgMHg3MGMwLCAweDkyMDAsIDB4NzBjMiwgMHgwODBjLCAweDg4OTksIDB4MDBmZSwgMHgwMDJlLAorCTB4MDBlZSwgMHgwMDA1LCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHg5MDRkLAorCTB4NzExYSwgMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLCAweDIxNDgsIDB4YTgwNCwgMHg5MDBkLAorCTB4MTkwNCwgMHg3MWIxLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzM4MiwgMHhkMDljLAorCTB4MTFiMCwgMHg3MDFjLCAweDkwNGQsIDB4MDE5OCwgMHhhODRjLCAweDkwMDUsIDB4MTE4MCwgMHg3MDEwLAorCTB4ODAwMSwgMHg3MDEyLCAweDExMDgsIDB4NzAxYSwgMHhhODAwLCAweDcwMWUsIDB4MjkwMCwgMHg3ODIyLAorCTB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg3MzgyLCAweGQwOWMsIDB4MGQ1MCwgMHg3ODJjLAorCTB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzM4MiwgMHhkMGE0LCAweDA1YjgsIDB4MDBlNiwgMHg3ODI0LAorCTB4MjA0OCwgMHgyMDcxLCAweDE4MDAsIDB4NzAyYywgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLAorCTB4ODAwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODg5OSwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLAorCTB4NzM4MiwgMHhkMGE0LCAweDFkNjAsIDB4MDBlZSwgMHgwZTA0LCAweDcxYWEsIDB4NzgzOCwgMHg3OTM4LAorCTB4OTEwZSwgMHgxZGUwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4MzYsIDB4NjgzMywgMHgwMDEzLAorCTB4MDBkZSwgMHg3MDQ0LCAweGMwODQsIDB4NzA0NiwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LAorCTB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTIwMCwgMHg3MDRiLCAweDAwMDAsIDB4MDBmZSwgMHgwMDJlLAorCTB4MDBlZSwgMHgwMDA1LCAweDcwNDQsIDB4YzA4NSwgMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLAorCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LAorCTB4YTgwMiwgMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLAorCTB4NzBjMiwgMHgwODBjLCAweDg4OTksIDB4MDBlZSwgMHgwODA0LCAweDcxNTIsIDB4MjA3MSwgMHgxOTEwLAorCTB4YTgwMywgMHgwMDAwLCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxOCwgMHg5MDRkLAorCTB4NzExYSwgMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLCAweDIxNDgsIDB4YTgwNCwgMHg5MDBkLAorCTB4MTEyOCwgMHgxZTA0LCAweDcxZjEsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLAorCTB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLAorCTB4MWRjOCwgMHg3MDJlLCAweDcwYzAsIDB4OTIwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODg5OSwgMHgwZTA0LAorCTB4NzFkYiwgMHgyMDcxLCAweDE5MTAsIDB4NzAxYywgMHgyMDQ4LCAweGE4NGMsIDB4OTAwZCwgMHgwZDE4LAorCTB4MjA3MSwgMHgwMDAwLCAweDcxODIsIDB4YTg1MCwgMHg3MDMyLCAweGE4NmMsIDB4NzA4NiwgMHg3MDM2LAorCTB4YTg3MCwgMHg3MDhhLCAweGE4NTAsIDB4OTA4MiwgMHgwMDE5LCAweDEyNzgsIDB4MjA5MSwgMHg0MDgwLAorCTB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDEyMDAsIDB4MjA3MSwgMHgxOTEwLAorCTB4MDgwYywgMHg3MzZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweGE4NTAsIDB4OTA4MiwgMHgwMDFjLAorCTB4MWU2OCwgMHhhODgwLCAweDcwOGUsIDB4NzAzNiwgMHgwMTQ2LCAweDAxZDYsIDB4MDEzNiwgMHgwMWM2LAorCTB4MDE1NiwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMDJhLCAweGE4NjgsIDB4MjBhOCwgMHhhODYwLAorCTB4MjBlMCwgMHhhODVjLCAweDkwODAsIDB4MDAyMSwgMHgyMDk4LCAweDQwMDMsIDB4MDE1ZSwgMHgwMWNlLAorCTB4MDEzZSwgMHgwMWRlLCAweDAxNGUsIDB4MDg5MCwgMHgyMDcxLCAweDE5MTAsIDB4YTgwMywgMHgwMDAwLAorCTB4MjkwOCwgMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LCAweDkwNGQsIDB4NzExYSwgMHgwMTEwLAorCTB4YTkwMiwgMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsIDB4MTExOCwgMHgwMDJlLAorCTB4MDBlZSwgMHgwMDA1LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LAorCTB4YTgwMiwgMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBjMCwgMHg5MjAwLAorCTB4NzBjMiwgMHgwODBjLCAweDg4OTksIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDAwNiwgMHhhODdjLAorCTB4MDAwNiwgMHhhODY3LCAweDAxMDMsIDB4MjBhOSwgMHgwMDFjLCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLAorCTB4OTA4MCwgMHgwMDFkLCAweDIwYTAsIDB4OTAwNiwgMHg0MDA0LCAweDAwMGUsIDB4OTA4NCwgMHgwMGZmLAorCTB4YTg3ZSwgMHgwMDBlLCAweGE4N2EsIDB4YTk4MiwgMHgwMDA1LCAweDIwNzEsIDB4MTkxMCwgMHg3MDA0LAorCTB4MDAwMiwgMHg3MjgxLCAweDcyODIsIDB4NzM2ZCwgMHg3MjgyLCAweDcyN2YsIDB4NzM2ZCwgMHgwODBjLAorCTB4MGQ4NSwgMHgwMDA1LCAweDIwMDEsIDB4MTk0OCwgMHgyMDA0LCAweDAwMDIsIDB4NzI4YywgMHg3MjhjLAorCTB4NzMwNiwgMHg3MzA3LCAweDcyOGMsIDB4NzMwNywgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgxZTBjLAorCTB4NzM4ZCwgMHg3MDFjLCAweDkwNGQsIDB4MDUwOCwgMHhhODRjLCAweDkwMDUsIDB4MDkwNCwgMHg3MmQ3LAorCTB4MGUwNCwgMHg3MmI1LCAweGE5NGMsIDB4MjA3MSwgMHgwMDAwLCAweDcxODIsIDB4YTg1MCwgMHg3MDMyLAorCTB4YTg2YywgMHg3MDg2LCAweDcwMzYsIDB4YTg3MCwgMHg3MDhhLCAweGE4NTAsIDB4OTA4MiwgMHgwMDE5LAorCTB4MTI3OCwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLAorCTB4MTIwMCwgMHgyMDcxLCAweDE5MTAsIDB4MDgwYywgMHg3MzZlLCAweDAxMmUsIDB4MDgwNCwgMHg3MzA1LAorCTB4YTg1MCwgMHg5MDgyLCAweDAwMWMsIDB4MWU2OCwgMHhhODgwLCAweDcwOGUsIDB4NzAzNiwgMHgwMTQ2LAorCTB4MDFkNiwgMHgwMTM2LCAweDAxYzYsIDB4MDE1NiwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMDJhLAorCTB4YTg2OCwgMHgyMGE4LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsIDB4MDAyMSwgMHgyMDk4LAorCTB4NDAwMywgMHgwMTVlLCAweDAxY2UsIDB4MDEzZSwgMHgwMWRlLCAweDAxNGUsIDB4MDg5MCwgMHgyMDAxLAorCTB4MDA1YiwgMHgyMDA0LCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDczODIsIDB4ZDA5YywgMHgyMDcxLAorCTB4MTkxMCwgMHgxNTEwLCAweDIwNzEsIDB4MTkxMCwgMHg3MDBmLCAweDAwMDEsIDB4YTk2NCwgMHg5MTg0LAogCTB4MDBmZiwgMHg5MDg2LCAweDAwMDMsIDB4MTEzMCwgMHg4MTBmLCAweDkxOGMsIDB4MDBmZiwgMHg4MTAxLAogCTB4MDEwOCwgMHg3MTBlLCAweDI5MDAsIDB4MDBkNiwgMHgyMDY5LCAweDAwNTAsIDB4NjgyMiwgMHgwMGRlLAotCTB4NzAxYywgMHgyMDQ4LCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweGE4MDAsIDB4NzAxZSwgMHg5MDA1LAotCTB4MTEwOCwgMHg3MDFhLCAweDAxMmUsIDB4MDAwNSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NzAxYywgMHg5MDRkLCAweDAxNjAsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsIDB4YTgwMCwgMHg3MDFlLAotCTB4OTAwNSwgMHgxMTA4LCAweDcwMWEsIDB4MDEyZSwgMHgwODBjLCAweDEwN2YsIDB4MDAwNSwgMHgwMTJlLAotCTB4MDAwNSwgMHgyMDkxLCAweDgwMDAsIDB4MGUwNCwgMHg3MjgzLCAweDAwMDYsIDB4MDAxNiwgMHgyMDAxLAotCTB4ODAwNCwgMHgwMDA2LCAweDA4MDQsIDB4MGQ4MiwgMHgwMDk2LCAweDAwZjYsIDB4MjA3OSwgMHgwMDUwLAotCTB4NzA0NCwgMHhkMDg0LCAweDAxZDAsIDB4YzA4NCwgMHg3MDQ2LCAweDc4MzgsIDB4NzkzOCwgMHg5MTBlLAotCTB4MWRlMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODM2LCAweDY4MzMsIDB4MDAxMywgMHgwMGRlLAotCTB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWY0LAotCTB4NzA0YiwgMHgwMDAwLCAweDAwZmUsIDB4MDA5ZSwgMHgwMDA1LCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLAotCTB4MTk4MSwgMHhkMGE0LCAweDBkYjgsIDB4NzE0OCwgMHg3MDRjLCAweDgxMDgsIDB4NzE0YSwgMHg5MTAyLAotCTB4MGU4OCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3ODI0LCAweDAwZTYsIDB4MjA3MSwgMHgwMDQwLAotCTB4NzEyYywgMHhkMTljLCAweDExNzAsIDB4MjAwOSwgMHgxODMwLCAweDIxMGMsIDB4OTE4YSwgMHgwMDIwLAotCTB4MDI0MCwgMHg3MDIyLCAweDIwMDEsIDB4MWRjMCwgMHgyMDBjLCAweDgxMDgsIDB4MjEwMiwgMHgwMGVlLAotCTB4MDA1OCwgMHgwMGVlLCAweDIwNDgsIDB4NzAyYywgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGMwLAotCTB4ODAwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODczMiwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLAotCTB4NzI4MSwgMHhkMGE0LCAweDE5YzgsIDB4NzgzOCwgMHg3OTM4LCAweDkxMGUsIDB4MWRlMCwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMDAwLCAweDY4MzYsIDB4NjgzMywgMHgwMDEzLCAweDAwZGUsIDB4MjA5MSwgMHg0MDgwLAotCTB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDExZjQsIDB4MDBlZSwgMHg3MDRiLAotCTB4MDAwMCwgMHgwMGZlLCAweDAwOWUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDA1MCwgMHg3MDQ0LAotCTB4ZDA4NCwgMHgwMWI4LCAweGMwODQsIDB4NzA0NiwgMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLAorCTB4MjA3MSwgMHgxOTEwLCAweDcwMWMsIDB4MjA0OCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHhhODAwLAorCTB4NzAxZSwgMHg5MDA1LCAweDExMDgsIDB4NzAxYSwgMHgwMTJlLCAweDAwMDUsIDB4MDAwNSwgMHgwMGQ2LAorCTB4MjAwOCwgMHgyMDY5LCAweDFhMDQsIDB4Njg0NCwgMHg5MDA1LCAweDA3NjAsIDB4MDE1OCwgMHg5MTg2LAorCTB4MDAwMywgMHgwNTQwLCAweDIwMDEsIDB4MTgxNSwgMHgyMDA0LCAweDIwMDksIDB4MWI3MywgMHgyMTBjLAorCTB4OTEwMiwgMHgxNTAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4MDA1MCwgMHg2OTNjLAorCTB4NjgzOCwgMHg5MTA2LCAweDAxOTAsIDB4MGUwNCwgMHg3MzM5LCAweDIwNjksIDB4MDAwMCwgMHg2ODM3LAorCTB4ODA0MCwgMHg2ODMzLCAweDAwMTIsIDB4Njg4MywgMHg4MDQwLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLAorCTB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMjAwLCAweDIwNjksIDB4MWEwNCwgMHg2ODQ3LAorCTB4ZmZmZiwgMHgwMTJlLCAweDAwZGUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MWUwYywgMHg3M2ZkLAorCTB4NzAxYywgMHg5MDRkLCAweDA1NDAsIDB4MjAwMSwgMHgwMDViLCAweDIwMDQsIDB4OTA5NCwgMHgwNzgwLAorCTB4MTVjOSwgMHhkMDljLCAweDE1MDAsIDB4MjA3MSwgMHgxOTEwLCAweDcwMGYsIDB4MDAwMSwgMHhhOTY0LAorCTB4OTE4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwMywgMHgxMTMwLCAweDgxMGYsIDB4OTE4YywgMHgwMGZmLAorCTB4ODEwMSwgMHgwMTA4LCAweDcxMGUsIDB4MjkwMCwgMHgwMGQ2LCAweDIwNjksIDB4MDA1MCwgMHg2ODIyLAorCTB4MDBkZSwgMHg3MDFjLCAweDIwNDgsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsIDB4YTgwMCwgMHg3MDFlLAorCTB4OTAwNSwgMHgxMTA4LCAweDcwMWEsIDB4MDEyZSwgMHgwMDA1LCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg3MDFjLCAweDkwNGQsIDB4MDE2MCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHhhODAwLAorCTB4NzAxZSwgMHg5MDA1LCAweDExMDgsIDB4NzAxYSwgMHgwMTJlLCAweDA4MGMsIDB4MTA4YiwgMHgwMDA1LAorCTB4MDEyZSwgMHgwMDA1LCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LCAweDczODQsIDB4MDAwNiwgMHgwMDE2LAorCTB4MjAwMSwgMHg4MDA0LCAweDAwMDYsIDB4MDgwNCwgMHgwZDhlLCAweDAwOTYsIDB4MDBmNiwgMHgyMDc5LAorCTB4MDA1MCwgMHg3MDQ0LCAweGQwODQsIDB4MDFkMCwgMHhjMDg0LCAweDcwNDYsIDB4NzgzOCwgMHg3OTM4LAorCTB4OTEwZSwgMHgxZGUwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4MzYsIDB4NjgzMywgMHgwMDEzLAorCTB4MDBkZSwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLAorCTB4MTIwMCwgMHg3MDRiLCAweDAwMDAsIDB4MDBmZSwgMHgwMDllLCAweDAwMDUsIDB4NzgyYywgMHg5MDk0LAorCTB4MDc4MCwgMHgxOTgxLCAweGQwYTQsIDB4MGRiOCwgMHg3MTQ4LCAweDcwNGMsIDB4ODEwOCwgMHg3MTRhLAorCTB4OTEwMiwgMHgwZTg4LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDc4MjQsIDB4MDBlNiwgMHgyMDcxLAorCTB4MDA0MCwgMHg3MTJjLCAweGQxOWMsIDB4MTE3MCwgMHgyMDA5LCAweDE4MzAsIDB4MjEwYywgMHg5MThhLAorCTB4MDAyMCwgMHgwMjQwLCAweDcwMjIsIDB4MjAwMSwgMHgxZGMwLCAweDIwMGMsIDB4ODEwOCwgMHgyMTAyLAorCTB4MDBlZSwgMHgwMDU4LCAweDAwZWUsIDB4MjA0OCwgMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLAorCTB4NzBjMCwgMHg4MDAwLCAweDcwYzIsIDB4MDgwYywgMHg4ODk5LCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLAorCTB4MTkwYywgMHg3MzgyLCAweGQwYTQsIDB4MTljOCwgMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLAogCTB4MDBkNiwgMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsIDB4MDBkZSwgMHgyMDkxLAotCTB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTFmNCwgMHgwMGZlLAotCTB4MDAwNSwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDcyODEsIDB4ZDBhNCwgMHgwZGI4LAotCTB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzgyNCwgMHgyMDQ4LCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLAotCTB4NzAyZSwgMHg3MGMwLCAweDgwMDAsIDB4NzBjMiwgMHgwODBjLCAweDg3MzIsIDB4NzgyYywgMHg5MDk0LAotCTB4MDc4MCwgMHgxOTBjLCAweDcyODEsIDB4ZDBhNCwgMHgxZDcwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDUwLAotCTB4NjkzYywgMHgyMDY5LCAweDE5NDksIDB4NjgwOCwgMHg2OTBhLCAweDIwNjksIDB4MWEwNSwgMHg5MTAyLAotCTB4MTExOCwgMHg2ODQ0LCAweDkwMDUsIDB4MTMyMCwgMHgyMDAxLCAweDE5NGEsIDB4MjAwYywgMHg2OTQ2LAotCTB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg3MDk4LCAweDkwOGEsIDB4MDAyYSwgMHgxYTBjLAotCTB4MGQ3OSwgMHg5MDgyLCAweDAwMWQsIDB4MDAzYiwgMHgwMDI2LCAweDIwMTEsIDB4MWUwMCwgMHgwODBjLAotCTB4MmFkYywgMHgwMDJlLCAweDAwMDUsIDB4NzQ0MSwgMHg3M2FlLCAweDczY2EsIDB4NzNmNCwgMHg3NDMwLAotCTB4NzQ3MCwgMHg3NDgyLCAweDczY2EsIDB4NzQ1OCwgMHg3MzY5LCAweDczOTcsIDB4NzQxYSwgMHg3MzY4LAotCTB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4MDIwMCwgMHg2ODA0LCAweDkwMDUsIDB4MTE4MCwgMHg2ODA4LAotCTB4OTAwNSwgMHgxNTE4LCAweDcwOWIsIDB4MDAyOSwgMHgyMDY5LCAweDE5OTAsIDB4MmQwNCwgMHg3MDAyLAotCTB4MDgwYywgMHg3N2RiLCAweDYwMjgsIDB4OTA4NSwgMHgwNjAwLCAweDYwMmEsIDB4MDBiMCwgMHg3MDliLAotCTB4MDAyOSwgMHgyMDY5LCAweDE5OTAsIDB4MmQwNCwgMHg3MDAyLCAweDYwMjgsIDB4OTA4NSwgMHgwNjAwLAotCTB4NjAyYSwgMHgwMGU2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDIwNzEsIDB4MWE2ZiwgMHgwODBjLAotCTB4MWIzYiwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMGVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMjAwLCAweDY4MDQsIDB4OTAwNSwgMHgxMTc4LCAweDY4MDgsIDB4OTAwNSwgMHgxMTYwLAotCTB4NzA5YiwgMHgwMDI5LCAweDIwNjksIDB4MTk5MCwgMHgyZDA0LCAweDcwMDIsIDB4MDgwYywgMHg3ODgwLAotCTB4NjAyOCwgMHg5MDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLAotCTB4MDA5MCwgMHgwODBjLCAweDJhYTIsIDB4MDAwZSwgMHg2MTI0LCAweGQxZTQsIDB4MTE5MCwgMHgwODBjLAotCTB4NzRmMywgMHhkMWQ0LCAweDExNjAsIDB4ZDFkYywgMHgxMTM4LCAweGQxY2MsIDB4MDE1MCwgMHg3MDliLAotCTB4MDAyMCwgMHgwODBjLCAweDc0ZjMsIDB4MDAyOCwgMHg3MDliLCAweDAwMWQsIDB4MDAxMCwgMHg3MDliLAotCTB4MDAxZiwgMHgwMDA1LCAweDIwMDEsIDB4MDA4OCwgMHgwODBjLCAweDJhYTIsIDB4NjEyNCwgMHhkMWNjLAotCTB4MTFlOCwgMHhkMWRjLCAweDExYzAsIDB4ZDFlNCwgMHgxMTk4LCAweDkxODQsIDB4MWUwMCwgMHgxMWQ4LAotCTB4MDgwYywgMHgxYjY4LCAweDYwZTMsIDB4MDAwMSwgMHg2MDBjLCAweGMwYjQsIDB4NjAwZSwgMHgwODBjLAotCTB4NzZjOSwgMHgyMDAxLCAweDAwODAsIDB4MDgwYywgMHgyYWEyLCAweDcwOWIsIDB4MDAyOSwgMHgwMDU4LAotCTB4NzA5YiwgMHgwMDFlLCAweDAwNDAsIDB4NzA5YiwgMHgwMDFkLCAweDAwMjgsIDB4NzA5YiwgMHgwMDIwLAotCTB4MDAxMCwgMHg3MDliLCAweDAwMWYsIDB4MDAwNSwgMHgwODBjLCAweDFiNjgsIDB4NjBlMywgMHgwMDAxLAotCTB4NjAwYywgMHhjMGI0LCAweDYwMGUsIDB4MDgwYywgMHg3NmM5LCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLAotCTB4MmFhMiwgMHg2MTI0LCAweGQxZDQsIDB4MTE5OCwgMHhkMWRjLCAweDExNzAsIDB4ZDFlNCwgMHgxMTQ4LAotCTB4OTE4NCwgMHgxZTAwLCAweDExMTgsIDB4NzA5YiwgMHgwMDI5LCAweDAwNTgsIDB4NzA5YiwgMHgwMDI4LAotCTB4MDA0MCwgMHg3MDliLCAweDAwMWUsIDB4MDAyOCwgMHg3MDliLCAweDAwMWQsIDB4MDAxMCwgMHg3MDliLAotCTB4MDAxZiwgMHgwMDA1LCAweDYxMjQsIDB4ZDFkNCwgMHgxMTgwLCAweGQxZGMsIDB4MTE1OCwgMHhkMWU0LAotCTB4MTEzMCwgMHg5MTg0LCAweDFlMDAsIDB4MTE1OCwgMHg3MDliLCAweDAwMjksIDB4MDA0MCwgMHg3MDliLAotCTB4MDAxZSwgMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOWIsIDB4MDAxZiwgMHgwMDA1LAotCTB4MjAwMSwgMHgwMGEwLCAweDA4MGMsIDB4MmFhMiwgMHg2MTI0LCAweGQxZGMsIDB4MTEzOCwgMHhkMWU0LAotCTB4MDEzOCwgMHgwODBjLCAweDFiNjgsIDB4NzA5YiwgMHgwMDFlLCAweDAwMTAsIDB4NzA5YiwgMHgwMDFkLAotCTB4MDAwNSwgMHgwODBjLCAweDc1N2MsIDB4NjEyNCwgMHhkMWRjLCAweDExODgsIDB4MDgwYywgMHg3NGYzLAotCTB4MDAxNiwgMHgwODBjLCAweDFiNjgsIDB4MDAxZSwgMHhkMWQ0LCAweDExMjgsIDB4ZDFlNCwgMHgwMTM4LAotCTB4NzA5YiwgMHgwMDFlLCAweDAwMjAsIDB4NzA5YiwgMHgwMDFmLCAweDA4MGMsIDB4NzRmMywgMHgwMDA1LAotCTB4MDAwNiwgMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyYWEyLCAweDAwMGUsIDB4NjEyNCwgMHhkMWQ0LAotCTB4MTE2MCwgMHhkMWNjLCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsIDB4MDE0MCwgMHg3MDliLAotCTB4MDAxZSwgMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLCAweDcwOWIsIDB4MDAyMSwgMHgwMDA1LAotCTB4MDgwYywgMHg3NTdjLCAweDYxMjQsIDB4ZDFkNCwgMHgxMTUwLCAweGQxZGMsIDB4MTEyOCwgMHhkMWU0LAotCTB4MDE0MCwgMHg3MDliLCAweDAwMWUsIDB4MDAyOCwgMHg3MDliLCAweDAwMWQsIDB4MDAxMCwgMHg3MDliLAotCTB4MDAxZiwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgwMDkwLCAweDA4MGMsIDB4MmFhMiwgMHgwMDBlLAotCTB4NjEyNCwgMHhkMWQ0LCAweDExNzgsIDB4ZDFjYywgMHgxMTUwLCAweGQxZGMsIDB4MTEyOCwgMHhkMWU0LAotCTB4MDE1OCwgMHg3MDliLCAweDAwMWUsIDB4MDA0MCwgMHg3MDliLCAweDAwMWQsIDB4MDAyOCwgMHg3MDliLAotCTB4MDAyMCwgMHgwMDEwLCAweDcwOWIsIDB4MDAxZiwgMHgwMDA1LCAweDAwMTYsIDB4MDBjNiwgMHgwMGQ2LAotCTB4MDBlNiwgMHgwMTI2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NzY5ZCwgMHgxMWY4LCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLAotCTB4ZDFiNCwgMHgwMWQwLCAweGMxYjQsIDB4MjEwMiwgMHgwMDI2LCAweDIwMTEsIDB4MDIwMCwgMHgwODBjLAotCTB4MmFkYywgMHgwMDJlLCAweDA4MGMsIDB4MmE4OCwgMHg2MDI0LCAweGQwY2MsIDB4MDE0OCwgMHgyMDAxLAotCTB4MDBhMCwgMHgwODBjLCAweDJhYTIsIDB4MDgwYywgMHg3OTlmLCAweDA4MGMsIDB4NjE3OCwgMHgwNDI4LAotCTB4NjAyOCwgMHhjMGNkLCAweDYwMmEsIDB4MDQwOCwgMHgwODBjLCAweDc2YjcsIDB4MDE1MCwgMHgwODBjLAotCTB4NzZhZSwgMHgxMTM4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2NDYsIDB4MDgwYywgMHg3NjcxLAotCTB4MDBhMCwgMHgwODBjLCAweDc1NzksIDB4MDE3OCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjQ2LAotCTB4NzA5OCwgMHg5MDg2LCAweDAwMWUsIDB4MDEyMCwgMHg3MDk4LCAweDkwODYsIDB4MDAyMiwgMHgxMTE4LAotCTB4NzA5YiwgMHgwMDI1LCAweDAwMTAsIDB4NzA5YiwgMHgwMDIxLCAweDAxMmUsIDB4MDBlZSwgMHgwMGRlLAotCTB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAyNiwgMHgyMDExLCAweDc1MDQsIDB4MDgwYywgMHg4OTM4LAotCTB4MDAyZSwgMHgwMDE2LCAweDAwMjYsIDB4MjAwOSwgMHgwMDY0LCAweDIwMTEsIDB4NzUwNCwgMHgwODBjLAotCTB4ODkyZiwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZjYsIDB4MDAxNiwgMHgwODBjLAotCTB4YTA5YiwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHg3NDlkLCAweDAwMWUsIDB4MDBmZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LAotCTB4MDEyNiwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHhhMDliLCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LAotCTB4MDE0MCwgMHgyMDkxLCAweDgwMDAsIDB4NjAyOCwgMHhjMDljLCAweDYwMmEsIDB4MDgwYywgMHhhYWY3LAotCTB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4YTQyNiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHhhNDMwLAotCTB4MDgwYywgMHhhMzExLCAweDA4MGMsIDB4ODhlNCwgMHgwMDM2LCAweDkwMWUsIDB4MDgwYywgMHhhMzkxLAotCTB4MDAzZSwgMHgwODBjLCAweGFiMTMsIDB4NjBlMywgMHgwMDAwLCAweDA4MGMsIDB4ZWJlOCwgMHgwODBjLAotCTB4ZWMwMywgMHgyMDA5LCAweDAwMDQsIDB4MDgwYywgMHgyYThlLCAweDA4MGMsIDB4MjlhOCwgMHgyMDAxLAotCTB4MTgwMCwgMHgyMDAzLCAweDAwMDQsIDB4MjAxMSwgMHgwMDA4LCAweDA4MGMsIDB4MmFkYywgMHgyMDExLAotCTB4NzUwNCwgMHgwODBjLCAweDg5MzgsIDB4MDgwYywgMHg3NmI3LCAweDAxMTgsIDB4OTAwNiwgMHgwODBjLAotCTB4MmFhMiwgMHgwODBjLCAweDBiYzMsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjY0NiwgMHgwMTJlLAotCTB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDAyNiwgMHgwMGU2LCAweDIwMTEsIDB4NzUxMSwgMHgyMDcxLCAweDFhMDUsIDB4NzAxYywgMHg5MjA2LAotCTB4MTExOCwgMHg3MDE4LCAweDkwMDUsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDBlZSwgMHgwMDJlLAotCTB4MDAwNSwgMHg2MDIwLCAweGQwOWMsIDB4MDAwNSwgMHg2ODAwLCAweDkwODQsIDB4ZmZmZSwgMHg5MDg2LAotCTB4MDBjMCwgMHgwMWI4LCAweDIwMDEsIDB4MDBjMCwgMHgwODBjLCAweDJhYTIsIDB4MDE1NiwgMHgyMGE5LAotCTB4MDAyZCwgMHgxZDA0LCAweDc1ODksIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NzU4OSwgMHgwMTVlLAotCTB4MDBkNiwgMHgyMDY5LCAweDE4MDAsIDB4Njg5YywgMHg4MDAxLCAweDAyMjAsIDB4MDExOCwgMHg2ODllLAotCTB4MDBkZSwgMHgwMDA1LCAweDY4OWYsIDB4MDAxNCwgMHg2OGVjLCAweGQwZGMsIDB4MGRjOCwgMHg2ODAwLAotCTB4OTA4NiwgMHgwMDAxLCAweDFkYTgsIDB4MDgwYywgMHg4OTQ0LCAweDBjOTAsIDB4MDBjNiwgMHgwMGQ2LAotCTB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLAotCTB4NzlhZSwgMHgyMDAxLCAweDE5NmUsIDB4MjAwMywgMHgwMDAwLCAweDkwMDYsIDB4NzA5YSwgMHg2MGUyLAotCTB4Njg4NiwgMHgwODBjLCAweDI3MTUsIDB4OTAwNiwgMHgwODBjLCAweDJhYTIsIDB4MDgwYywgMHg2MDMzLAotCTB4MDAyNiwgMHgyMDExLCAweGZmZmYsIDB4MDgwYywgMHgyYWRjLCAweDAwMmUsIDB4NjAyYiwgMHgxODJjLAotCTB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLAotCTB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLCAweDIwMDEsIDB4MTk3ZSwgMHgyMDBjLAotCTB4OTE4NiwgMHgwMDAwLCAweDAxNTgsIDB4OTE4NiwgMHgwMDAxLCAweDAxNTgsIDB4OTE4NiwgMHgwMDAyLAotCTB4MDE1OCwgMHg5MTg2LCAweDAwMDMsIDB4MDE1OCwgMHgwODA0LCAweDc2NjEsIDB4NzA5YiwgMHgwMDIyLAotCTB4MDA0MCwgMHg3MDliLCAweDAwMjEsIDB4MDAyOCwgMHg3MDliLCAweDAwMjMsIDB4MDAxMCwgMHg3MDliLAotCTB4MDAyNCwgMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAxLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MjcxNSwgMHgwODBjLCAweGFhZjcsIDB4MDAyNiwgMHgwODBjLCAweGFkYmUsIDB4MDgwYywgMHhhZTg3LAotCTB4MDAyZSwgMHgwODBjLCAweGFiMTMsIDB4NzAwMCwgMHg5MDhlLCAweDAwMDQsIDB4MDExOCwgMHg2MDJiLAotCTB4MDAyOCwgMHgwMDEwLCAweDYwMmIsIDB4MDAyMCwgMHgwMTU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjBhOSwgMHgwMDA1LCAweDYwMjQsIDB4ZDBhYywgMHgwMTUwLCAweDAxMmUsIDB4MDE1ZSwgMHgwODBjLAotCTB4ZDM1ZCwgMHgwMTE4LCAweDkwMDYsIDB4MDgwYywgMHgyYWNjLCAweDA4MDQsIDB4NzY2ZCwgMHg2ODAwLAotCTB4OTA4NCwgMHgwMGExLCAweGMwYmQsIDB4NjgwMiwgMHgwODBjLCAweDJhODgsIDB4NjkwNCwgMHhkMWQ0LAotCTB4MTE0MCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyYWEyLCAweDFmMDQsIDB4NzYxMiwgMHgwODBjLAotCTB4NzZmMSwgMHgwMTJlLCAweDAxNWUsIDB4MDgwYywgMHg3NmFlLCAweDAxNzAsIDB4NjA0NCwgMHg5MDA1LAotCTB4MDEzMCwgMHgwODBjLCAweDc2ZjEsIDB4OTAwNiwgMHg4MDAxLCAweDFkZjAsIDB4MDAyOCwgMHg2ODA0LAotCTB4ZDBkNCwgMHgxMTEwLCAweDA4MGMsIDB4NzZmMSwgMHgwODBjLCAweGQzNWQsIDB4MDExOCwgMHg5MDA2LAotCTB4MDgwYywgMHgyYWNjLCAweDAwMTYsIDB4MDAyNiwgMHg3MDAwLCAweDkwOGUsIDB4MDAwNCwgMHgwMTMwLAotCTB4MjAwOSwgMHgwMGM4LCAweDIwMTEsIDB4NzUxMSwgMHgwODBjLCAweDg4ZjYsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDgwYywgMHg4NzI5LCAweDcwMzQsIDB4YzA4NSwgMHg3MDM2LCAweDIwMDEsIDB4MTk3ZSwgMHgyMDAzLAotCTB4MDAwNCwgMHgwODBjLCAweDczNGMsIDB4MDgwYywgMHg3NmFlLCAweDAxMzgsIDB4NjgwNCwgMHhkMGQ0LAotCTB4MTEyMCwgMHhkMGRjLCAweDExMDAsIDB4MDgwYywgMHg3OWE0LCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLAotCTB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLAotCTB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4ODc0MCwgMHgwODBjLCAweDg3MzIsIDB4MDgwYywgMHg3OWFlLAotCTB4MjAwMSwgMHgxOTZlLCAweDIwMDMsIDB4MDAwMCwgMHg5MDA2LCAweDcwOWEsIDB4NjBlMiwgMHg2ODg2LAotCTB4MDgwYywgMHgyNzE1LCAweDkwMDYsIDB4MDgwYywgMHgyYWEyLCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLAotCTB4MDAxMCwgMHgwMDI2LCAweDIwMTEsIDB4ZmZmZiwgMHgwODBjLCAweDJhZGMsIDB4MDAyZSwgMHg2MDJiLAotCTB4MTgyYywgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxOTdkLAotCTB4MjAwNCwgMHg5MDg2LCAweGFhYWEsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDgwYywgMHg1ODI0LAotCTB4OTA4NCwgMHgwMDMwLCAweDkwODYsIDB4MDAwMCwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwODBjLAotCTB4NTgyNCwgMHg5MDg0LCAweDAwMzAsIDB4OTA4NiwgMHgwMDMwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LAotCTB4MDgwYywgMHg1ODI0LCAweDkwODQsIDB4MDAzMCwgMHg5MDg2LCAweDAwMTAsIDB4MDAwZSwgMHgwMDA1LAotCTB4MDAwNiwgMHgwODBjLCAweDU4MjQsIDB4OTA4NCwgMHgwMDMwLCAweDkwODYsIDB4MDAyMCwgMHgwMDBlLAotCTB4MDAwNSwgMHgwMDM2LCAweDAwMTYsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsIDB4OTA4YywgMHgwMDEzLAotCTB4MDE2OCwgMHgwMDIwLCAweDA4MGMsIDB4MjczNSwgMHg5MDBlLCAweDAwMTAsIDB4MjAwOSwgMHgwMDAyLAotCTB4MjAxOSwgMHgwMDI4LCAweDA4MGMsIDB4MzJjMCwgMHg5MDA2LCAweDAwMTksIDB4MDAxZSwgMHgwMDNlLAotCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTgwYywgMHgyZTA0LCAweDAxMzAsIDB4MDgwYywgMHhkMzU2LAotCTB4MTEyOCwgMHg5MDg1LCAweDAwMTAsIDB4MDAxMCwgMHg5MDg0LCAweGZmZWYsIDB4MjA3MiwgMHgwMGVlLAotCTB4MDAwNSwgMHg2MDUwLCAweDAwMDYsIDB4NjBlYywgMHgwMDA2LCAweDYwMGMsIDB4MDAwNiwgMHg2MDA0LAotCTB4MDAwNiwgMHg2MDI4LCAweDAwMDYsIDB4MDgwYywgMHgyYWZmLCAweDA4MGMsIDB4MmIzMiwgMHg2MDJmLAotCTB4MDEwMCwgMHg2MDJmLCAweDAwMDAsIDB4NjAyZiwgMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgyMGE5LAotCTB4MDAwMiwgMHgwODBjLCAweDJhNjksIDB4MDAyNiwgMHgyMDExLCAweDAwNDAsIDB4MDgwYywgMHgyYWRjLAotCTB4MDAyZSwgMHgwMDBlLCAweDYwMmEsIDB4MDAwZSwgMHg2MDA2LCAweDAwMGUsIDB4NjAwZSwgMHgwMDBlLAotCTB4NjBlZSwgMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAxLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAotCTB4MjcxNSwgMHgyMDAxLCAweDAwYTAsIDB4MDAwNiwgMHgwODBjLCAweGQzNWQsIDB4MDAwZSwgMHgwMTMwLAotCTB4MDgwYywgMHgyYWMwLCAweDkwMDYsIDB4MDgwYywgMHgyYWNjLCAweDAwMTAsIDB4MDgwYywgMHgyYWEyLAotCTB4MDAwZSwgMHg2MDUyLCAweDYwNTAsIDB4MDAwNiwgMHhjMGU1LCAweDYwNTIsIDB4MDBmNiwgMHgyMDc5LAotCTB4MDEwMCwgMHgwODBjLCAweDJhMTksIDB4MDBmZSwgMHgwMDBlLCAweDYwNTIsIDB4MDAwNSwgMHgwMTU2LAotCTB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLAotCTB4MjA2OSwgMHgwMTQwLCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweGFiNTUsIDB4MDE1OCwgMHgyMDAxLAotCTB4MDM4NiwgMHgyMDA0LCAweGQwYjQsIDB4MTEzMCwgMHgyMDAxLCAweDAwMTYsIDB4MDgwYywgMHhhYWU4LAotCTB4MDgwNCwgMHg3N2NkLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxYzQsIDB4MjEwMiwgMHg2MDI4LAotCTB4OTA4NCwgMHhlMWZmLCAweDYwMmEsIDB4MjAxMSwgMHgwMjAwLCAweDA4MGMsIDB4MmFkYywgMHgyMDAxLAotCTB4MDA5MCwgMHgwODBjLCAweDJhYTIsIDB4MjBhOSwgMHgwMzY2LCAweDYwMjQsIDB4ZDBjYywgMHgxNTU4LAotCTB4MWQwNCwgMHg3NzZkLCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LCAweDc3NmQsIDB4MDgwYywgMHhhYWY3LAotCTB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4YTQyNiwgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHhhNDMwLAotCTB4MDgwYywgMHhhMzExLCAweDkwMWUsIDB4MDgwYywgMHhhMzkxLCAweDIwMDEsIDB4MDM4NiwgMHgyMDAzLAotCTB4NzAwMCwgMHgwODBjLCAweGFiMTMsIDB4MjAwMSwgMHgwMGEwLCAweDA4MGMsIDB4MmFhMiwgMHgwODBjLAotCTB4Nzk5ZiwgMHgwODBjLCAweDYxNzgsIDB4MDgwYywgMHhkMzVkLCAweDAxMTAsIDB4MDgwYywgMHgwY2U1LAotCTB4OTA4NSwgMHgwMDAxLCAweDA0YzAsIDB4MDgwYywgMHgxYjY4LCAweDYwZTMsIDB4MDAwMCwgMHgyMDAxLAotCTB4MTk2ZSwgMHgyMDA0LCAweDA4MGMsIDB4MjcxNSwgMHg2MGUyLCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLAotCTB4MmFhMiwgMHgyMGE5LCAweDAzNjYsIDB4MjAxMSwgMHgxZTAwLCAweDA4MGMsIDB4MmFkYywgMHgyMDA5LAotCTB4MWUwMCwgMHgwODBjLCAweDJhODgsIDB4NjAyNCwgMHg5MTBjLCAweDAxNDAsIDB4MWQwNCwgMHg3N2FiLAotCTB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NzdhYiwgMHgwODA0LCAweDc3NzYsIDB4MjAwMSwgMHgwMzg2LAotCTB4MjAwMywgMHg3MDAwLCAweDYwMjgsIDB4OTA4NSwgMHgxZTAwLCAweDYwMmEsIDB4NzBiNCwgMHg5MDA1LAotCTB4MTExOCwgMHg2ODg3LCAweDAwMDEsIDB4MDAwOCwgMHg2ODg2LCAweDA4MGMsIDB4ZDM1ZCwgMHgwMTEwLAotCTB4MDgwYywgMHgwY2U1LCAweDkwMDYsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMTVlLCAweDAwMDUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LAotCTB4MDBkNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweDE4MDAsIDB4NzAwMCwgMHg5MDg2LAotCTB4MDAwMywgMHgxMTY4LCAweDIwMDEsIDB4MDIwYiwgMHgyMDA0LCAweDkwODQsIDB4NTU0MCwgMHg5MDg2LAotCTB4NTU0MCwgMHgxMTI4LCAweDIwNjksIDB4MWE3YywgMHgyZDA0LCAweDgwMDAsIDB4MjA2YSwgMHgyMDY5LAotCTB4MDE0MCwgMHg2MDIwLCAweDkwODQsIDB4MDBjMCwgMHgwMTIwLCAweDY4ODQsIDB4OTAwNSwgMHgxOTA0LAotCTB4Nzg0NCwgMHgyMDAxLCAweDAwODgsIDB4MDgwYywgMHgyYWEyLCAweDkwMDYsIDB4NjBlMiwgMHg2ODg2LAotCTB4MDgwYywgMHgyNzE1LCAweDIwNjksIDB4MDIwMCwgMHg2ODA0LCAweDkwMDUsIDB4MTExOCwgMHg2ODA4LAotCTB4OTAwNSwgMHgwMWQwLCAweDYwMjgsIDB4OTA4NCwgMHhmYmZmLCAweDYwMmEsIDB4MjAxMSwgMHgwNDAwLAotCTB4MDgwYywgMHgyYWRjLCAweDIwNjksIDB4MTk5MCwgMHg3MDAwLCAweDIwNmEsIDB4NzA5YiwgMHgwMDI2LAotCTB4NzAwMywgMHgwMDAxLCAweDIwYTksIDB4MDAwMiwgMHgxZDA0LCAweDc4MjQsIDB4MjA5MSwgMHg2MDAwLAotCTB4MWYwNCwgMHg3ODI0LCAweDA4MDQsIDB4Nzg3OCwgMHgyMDY5LCAweDAxNDAsIDB4MjBhOSwgMHgwMzg0LAotCTB4MjAxMSwgMHgxZTAwLCAweDA4MGMsIDB4MmFkYywgMHgyMDA5LCAweDFlMDAsIDB4MDgwYywgMHgyYTg4LAotCTB4NjAyNCwgMHg5MTBjLCAweDA1MjgsIDB4OTA4NCwgMHgxYTAwLCAweDE1MTAsIDB4MWQwNCwgMHg3ODMwLAotCTB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4NzgzMCwgMHgwODBjLCAweGFhZjcsIDB4MjAxMSwgMHgwMDAzLAotCTB4MDgwYywgMHhhNDI2LCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweGE0MzAsIDB4MDgwYywgMHhhMzExLAotCTB4OTAxZSwgMHgwODBjLCAweGEzOTEsIDB4MDgwYywgMHhhYjEzLCAweDIwMDEsIDB4MDBhMCwgMHgwODBjLAotCTB4MmFhMiwgMHgwODBjLCAweDc5OWYsIDB4MDgwYywgMHg2MTc4LCAweDkwODUsIDB4MDAwMSwgMHgwMGMwLAotCTB4MDgwYywgMHgxYjY4LCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLCAweDJhYTIsIDB4MjA2OSwgMHgwMTQwLAotCTB4NjBlMywgMHgwMDAwLCAweDcwYjQsIDB4OTAwNSwgMHgxMTE4LCAweDY4ODcsIDB4MDAwMSwgMHgwMDA4LAotCTB4Njg4NiwgMHgyMDAxLCAweDE5NmUsIDB4MjAwNCwgMHgwODBjLCAweDI3MTUsIDB4NjBlMiwgMHg5MDA2LAorCTB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsIDB4MTIwMCwgMHgwMGVlLAorCTB4NzA0YiwgMHgwMDAwLCAweDAwZmUsIDB4MDA5ZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMDUwLAorCTB4NzA0NCwgMHhkMDg0LCAweDAxYjgsIDB4YzA4NCwgMHg3MDQ2LCAweDc4MzgsIDB4NzkzOCwgMHg5MTBlLAorCTB4MWRlMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODM2LCAweDY4MzMsIDB4MDAxMywgMHgwMGRlLAorCTB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMjAwLAorCTB4MDBmZSwgMHgwMDA1LCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzM4MiwgMHhkMGE0LAorCTB4MGRiOCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3ODI0LCAweDIwNDgsIDB4NzAyYywgMHhhODAyLAorCTB4MjkwMCwgMHg3MDJlLCAweDcwYzAsIDB4ODAwMCwgMHg3MGMyLCAweDA4MGMsIDB4ODg5OSwgMHg3ODJjLAorCTB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NzM4MiwgMHhkMGE0LCAweDFkNzAsIDB4MDBkNiwgMHgyMDY5LAorCTB4MDA1MCwgMHg2OTNjLCAweDIwNjksIDB4MTk0OCwgMHg2ODA4LCAweDY5MGEsIDB4MjA2OSwgMHgxYTA0LAorCTB4OTEwMiwgMHgxMTE4LCAweDY4NDQsIDB4OTAwNSwgMHgxMzIwLCAweDIwMDEsIDB4MTk0OSwgMHgyMDBjLAorCTB4Njk0NiwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDcwOTgsIDB4OTA4YSwgMHgwMDJhLAorCTB4MWEwYywgMHgwZDg1LCAweDkwODIsIDB4MDAxZCwgMHgwMDNiLCAweDAwMjYsIDB4MjAxMSwgMHgxZTAwLAorCTB4MDgwYywgMHgyYWQzLCAweDAwMmUsIDB4MDAwNSwgMHg3NTQyLCAweDc0YWYsIDB4NzRjYiwgMHg3NGY1LAorCTB4NzUzMSwgMHg3NTcxLCAweDc1ODMsIDB4NzRjYiwgMHg3NTU5LCAweDc0NmEsIDB4NzQ5OCwgMHg3NTFiLAorCTB4NzQ2OSwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDY4MDQsIDB4OTAwNSwgMHgxMTgwLAorCTB4NjgwOCwgMHg5MDA1LCAweDE1MTgsIDB4NzA5YiwgMHgwMDI5LCAweDIwNjksIDB4MTk4ZiwgMHgyZDA0LAorCTB4NzAwMiwgMHgwODBjLCAweDc4ZTQsIDB4NjAyOCwgMHg5MDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGIwLAorCTB4NzA5YiwgMHgwMDI5LCAweDIwNjksIDB4MTk4ZiwgMHgyZDA0LCAweDcwMDIsIDB4NjAyOCwgMHg5MDg1LAorCTB4MDYwMCwgMHg2MDJhLCAweDAwZTYsIDB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MjA3MSwgMHgxYTZlLAorCTB4MDgwYywgMHgxYjFlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDA1LAorCTB4MDBkNiwgMHgyMDY5LCAweDAyMDAsIDB4NjgwNCwgMHg5MDA1LCAweDExNzgsIDB4NjgwOCwgMHg5MDA1LAorCTB4MTE2MCwgMHg3MDliLCAweDAwMjksIDB4MjA2OSwgMHgxOThmLCAweDJkMDQsIDB4NzAwMiwgMHgwODBjLAorCTB4Nzk5MCwgMHg2MDI4LCAweDkwODUsIDB4MDYwMCwgMHg2MDJhLCAweDAwZGUsIDB4MDAwNSwgMHgwMDA2LAorCTB4MjAwMSwgMHgwMDkwLCAweDA4MGMsIDB4MmE5OSwgMHgwMDBlLCAweDYxMjQsIDB4ZDFlNCwgMHgxMTkwLAorCTB4MDgwYywgMHg3NWY0LCAweGQxZDQsIDB4MTE2MCwgMHhkMWRjLCAweDExMzgsIDB4ZDFjYywgMHgwMTUwLAorCTB4NzA5YiwgMHgwMDIwLCAweDA4MGMsIDB4NzVmNCwgMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLAorCTB4NzA5YiwgMHgwMDFmLCAweDAwMDUsIDB4MjAwMSwgMHgwMDg4LCAweDA4MGMsIDB4MmE5OSwgMHg2MTI0LAorCTB4ZDFjYywgMHgxMWU4LCAweGQxZGMsIDB4MTFjMCwgMHhkMWU0LCAweDExOTgsIDB4OTE4NCwgMHgxZTAwLAorCTB4MTFkOCwgMHgwODBjLCAweDFiNGIsIDB4NjBlMywgMHgwMDAxLCAweDYwMGMsIDB4YzBiNCwgMHg2MDBlLAorCTB4MDgwYywgMHg3N2NhLCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLCAweDJhOTksIDB4NzA5YiwgMHgwMDI5LAorCTB4MDA1OCwgMHg3MDliLCAweDAwMWUsIDB4MDA0MCwgMHg3MDliLCAweDAwMWQsIDB4MDAyOCwgMHg3MDliLAorCTB4MDAyMCwgMHgwMDEwLCAweDcwOWIsIDB4MDAxZiwgMHgwMDA1LCAweDA4MGMsIDB4MWI0YiwgMHg2MGUzLAorCTB4MDAwMSwgMHg2MDBjLCAweGMwYjQsIDB4NjAwZSwgMHgwODBjLCAweDc3Y2EsIDB4MjAwMSwgMHgwMDgwLAorCTB4MDgwYywgMHgyYTk5LCAweDYxMjQsIDB4ZDFkNCwgMHgxMTk4LCAweGQxZGMsIDB4MTE3MCwgMHhkMWU0LAorCTB4MTE0OCwgMHg5MTg0LCAweDFlMDAsIDB4MTExOCwgMHg3MDliLCAweDAwMjksIDB4MDA1OCwgMHg3MDliLAorCTB4MDAyOCwgMHgwMDQwLCAweDcwOWIsIDB4MDAxZSwgMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLAorCTB4NzA5YiwgMHgwMDFmLCAweDAwMDUsIDB4NjEyNCwgMHhkMWQ0LCAweDExODAsIDB4ZDFkYywgMHgxMTU4LAorCTB4ZDFlNCwgMHgxMTMwLCAweDkxODQsIDB4MWUwMCwgMHgxMTU4LCAweDcwOWIsIDB4MDAyOSwgMHgwMDQwLAorCTB4NzA5YiwgMHgwMDFlLCAweDAwMjgsIDB4NzA5YiwgMHgwMDFkLCAweDAwMTAsIDB4NzA5YiwgMHgwMDFmLAorCTB4MDAwNSwgMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyYTk5LCAweDYxMjQsIDB4ZDFkYywgMHgxMTM4LAorCTB4ZDFlNCwgMHgwMTM4LCAweDA4MGMsIDB4MWI0YiwgMHg3MDliLCAweDAwMWUsIDB4MDAxMCwgMHg3MDliLAorCTB4MDAxZCwgMHgwMDA1LCAweDA4MGMsIDB4NzY3ZCwgMHg2MTI0LCAweGQxZGMsIDB4MTE4OCwgMHgwODBjLAorCTB4NzVmNCwgMHgwMDE2LCAweDA4MGMsIDB4MWI0YiwgMHgwMDFlLCAweGQxZDQsIDB4MTEyOCwgMHhkMWU0LAorCTB4MDEzOCwgMHg3MDliLCAweDAwMWUsIDB4MDAyMCwgMHg3MDliLCAweDAwMWYsIDB4MDgwYywgMHg3NWY0LAorCTB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MDBhMCwgMHgwODBjLCAweDJhOTksIDB4MDAwZSwgMHg2MTI0LAorCTB4ZDFkNCwgMHgxMTYwLCAweGQxY2MsIDB4MTE1MCwgMHhkMWRjLCAweDExMjgsIDB4ZDFlNCwgMHgwMTQwLAorCTB4NzA5YiwgMHgwMDFlLCAweDAwMjgsIDB4NzA5YiwgMHgwMDFkLCAweDAwMTAsIDB4NzA5YiwgMHgwMDIxLAorCTB4MDAwNSwgMHgwODBjLCAweDc2N2QsIDB4NjEyNCwgMHhkMWQ0LCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LAorCTB4ZDFlNCwgMHgwMTQwLCAweDcwOWIsIDB4MDAxZSwgMHgwMDI4LCAweDcwOWIsIDB4MDAxZCwgMHgwMDEwLAorCTB4NzA5YiwgMHgwMDFmLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDAwOTAsIDB4MDgwYywgMHgyYTk5LAorCTB4MDAwZSwgMHg2MTI0LCAweGQxZDQsIDB4MTE3OCwgMHhkMWNjLCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LAorCTB4ZDFlNCwgMHgwMTU4LCAweDcwOWIsIDB4MDAxZSwgMHgwMDQwLCAweDcwOWIsIDB4MDAxZCwgMHgwMDI4LAorCTB4NzA5YiwgMHgwMDIwLCAweDAwMTAsIDB4NzA5YiwgMHgwMDFmLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LAorCTB4MDBkNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLAorCTB4MTgwMCwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg3NzllLCAweDExZjgsIDB4MjAwMSwgMHgxODBjLAorCTB4MjAwYywgMHhkMWI0LCAweDAxZDAsIDB4YzFiNCwgMHgyMTAyLCAweDAwMjYsIDB4MjAxMSwgMHgwMjAwLAorCTB4MDgwYywgMHgyYWQzLCAweDAwMmUsIDB4MDgwYywgMHgyYTdmLCAweDYwMjQsIDB4ZDBjYywgMHgwMTQ4LAorCTB4MjAwMSwgMHgwMGEwLCAweDA4MGMsIDB4MmE5OSwgMHgwODBjLCAweDdhYjYsIDB4MDgwYywgMHg2MTlkLAorCTB4MDQyOCwgMHg2MDI4LCAweGMwY2QsIDB4NjAyYSwgMHgwNDA4LCAweDA4MGMsIDB4NzdiOCwgMHgwMTUwLAorCTB4MDgwYywgMHg3N2FmLCAweDExMzgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjYzMSwgMHgwODBjLAorCTB4Nzc3MiwgMHgwMGEwLCAweDA4MGMsIDB4NzY3YSwgMHgwMTc4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAorCTB4MjYzMSwgMHg3MDk4LCAweDkwODYsIDB4MDAxZSwgMHgwMTIwLCAweDcwOTgsIDB4OTA4NiwgMHgwMDIyLAorCTB4MTExOCwgMHg3MDliLCAweDAwMjUsIDB4MDAxMCwgMHg3MDliLCAweDAwMjEsIDB4MDEyZSwgMHgwMGVlLAorCTB4MDBkZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDI2LCAweDIwMTEsIDB4NzYwNSwgMHgwODBjLAorCTB4OGE5ZiwgMHgwMDJlLCAweDAwMTYsIDB4MDAyNiwgMHgyMDA5LCAweDAwNjQsIDB4MjAxMSwgMHg3NjA1LAorCTB4MDgwYywgMHg4YTk2LCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBmNiwgMHgwMDE2LAorCTB4MDgwYywgMHhhMmEwLCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweDc1OWUsIDB4MDAxZSwgMHgwMGZlLAorCTB4MDBlZSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAorCTB4MDBmNiwgMHgwMTI2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweGEyYTAsIDB4MjA2MSwgMHgwMTAwLAorCTB4MjA2OSwgMHgwMTQwLCAweDIwOTEsIDB4ODAwMCwgMHg2MDI4LCAweGMwOWMsIDB4NjAyYSwgMHgwODBjLAorCTB4YWNmYywgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHhhNjJiLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLAorCTB4YTYzNSwgMHgwODBjLCAweGE1MTYsIDB4MDgwYywgMHg4YTRiLCAweDAwMzYsIDB4OTAxZSwgMHgwODBjLAorCTB4YTU5NiwgMHgwMDNlLCAweDA4MGMsIDB4YWQxOCwgMHg2MGUzLCAweDAwMDAsIDB4MDgwYywgMHhlZWQ5LAorCTB4MDgwYywgMHhlZWY0LCAweDIwMDksIDB4MDAwNCwgMHgwODBjLCAweDJhODUsIDB4MDgwYywgMHgyOTliLAorCTB4MjAwMSwgMHgxODAwLCAweDIwMDMsIDB4MDAwNCwgMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHgyYWQzLAorCTB4MjAxMSwgMHg3NjA1LCAweDA4MGMsIDB4OGE5ZiwgMHgwODBjLCAweDc3YjgsIDB4MDExOCwgMHg5MDA2LAorCTB4MDgwYywgMHgyYTk5LCAweDA4MGMsIDB4MGJjZiwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjMxLAorCTB4MDEyZSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLAorCTB4MDAwNSwgMHgwMDI2LCAweDAwZTYsIDB4MjAxMSwgMHg3NjEyLCAweDIwNzEsIDB4MWEwNCwgMHg3MDFjLAorCTB4OTIwNiwgMHgxMTE4LCAweDcwMTgsIDB4OTAwNSwgMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLAorCTB4MDAyZSwgMHgwMDA1LCAweDYwMjAsIDB4ZDA5YywgMHgwMDA1LCAweDY4MDAsIDB4OTA4NCwgMHhmZmZlLAorCTB4OTA4NiwgMHgwMGMwLCAweDAxYjgsIDB4MjAwMSwgMHgwMGMwLCAweDA4MGMsIDB4MmE5OSwgMHgwMTU2LAorCTB4MjBhOSwgMHgwMDJkLCAweDFkMDQsIDB4NzY4YSwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHg3NjhhLAorCTB4MDE1ZSwgMHgwMGQ2LCAweDIwNjksIDB4MTgwMCwgMHg2ODljLCAweDgwMDEsIDB4MDIyMCwgMHgwMTE4LAorCTB4Njg5ZSwgMHgwMGRlLCAweDAwMDUsIDB4Njg5ZiwgMHgwMDE0LCAweDY4ZWMsIDB4ZDBkYywgMHgwZGM4LAorCTB4NjgwMCwgMHg5MDg2LCAweDAwMDEsIDB4MWRhOCwgMHgwODBjLCAweDhhYWIsIDB4MGM5MCwgMHgwMGM2LAorCTB4MDBkNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLAorCTB4MDgwYywgMHg3YWM1LCAweDIwMDEsIDB4MTk2ZCwgMHgyMDAzLCAweDAwMDAsIDB4OTAwNiwgMHg3MDlhLAorCTB4NjBlMiwgMHg2ODg2LCAweDA4MGMsIDB4MjcwMCwgMHg5MDA2LCAweDA4MGMsIDB4MmE5OSwgMHgwODBjLAorCTB4NjA1OCwgMHgwMDI2LCAweDIwMTEsIDB4ZmZmZiwgMHgwODBjLCAweDJhZDMsIDB4MDAyZSwgMHg2MDJiLAorCTB4MTgyYywgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAorCTB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLCAweDE4MDAsIDB4MjAwMSwgMHgxOTdkLAorCTB4MjAwYywgMHg5MTg2LCAweDAwMDAsIDB4MDE1OCwgMHg5MTg2LCAweDAwMDEsIDB4MDE1OCwgMHg5MTg2LAorCTB4MDAwMiwgMHgwMTU4LCAweDkxODYsIDB4MDAwMywgMHgwMTU4LCAweDA4MDQsIDB4Nzc2MiwgMHg3MDliLAorCTB4MDAyMiwgMHgwMDQwLCAweDcwOWIsIDB4MDAyMSwgMHgwMDI4LCAweDcwOWIsIDB4MDAyMywgMHgwMDEwLAorCTB4NzA5YiwgMHgwMDI0LCAweDYwZTMsIDB4MDAwMCwgMHg2ODg3LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAxLAorCTB4MDgwYywgMHgyNzAwLCAweDA4MGMsIDB4YWNmYywgMHgwMDI2LCAweDA4MGMsIDB4YWZkMiwgMHgwODBjLAorCTB4YjA5YiwgMHgwMDJlLCAweDA4MGMsIDB4YWQxOCwgMHg3MDAwLCAweDkwOGUsIDB4MDAwNCwgMHgwMTE4LAorCTB4NjAyYiwgMHgwMDI4LCAweDAwMTAsIDB4NjAyYiwgMHgwMDIwLCAweDAxNTYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgyMGE5LCAweDAwMDUsIDB4NjAyNCwgMHhkMGFjLCAweDAxNTAsIDB4MDEyZSwgMHgwMTVlLAorCTB4MDgwYywgMHhkNjQ1LCAweDAxMTgsIDB4OTAwNiwgMHgwODBjLCAweDJhYzMsIDB4MDgwNCwgMHg3NzZlLAorCTB4NjgwMCwgMHg5MDg0LCAweDAwYTEsIDB4YzBiZCwgMHg2ODAyLCAweDA4MGMsIDB4MmE3ZiwgMHg2OTA0LAorCTB4ZDFkNCwgMHgxMTQwLCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJhOTksIDB4MWYwNCwgMHg3NzEzLAorCTB4MDgwYywgMHg3N2YyLCAweDAxMmUsIDB4MDE1ZSwgMHgwODBjLCAweDc3YWYsIDB4MDE3MCwgMHg2MDQ0LAorCTB4OTAwNSwgMHgwMTMwLCAweDA4MGMsIDB4NzdmMiwgMHg5MDA2LCAweDgwMDEsIDB4MWRmMCwgMHgwMDI4LAorCTB4NjgwNCwgMHhkMGQ0LCAweDExMTAsIDB4MDgwYywgMHg3N2YyLCAweDA4MGMsIDB4ZDY0NSwgMHgwMTE4LAorCTB4OTAwNiwgMHgwODBjLCAweDJhYzMsIDB4MDAxNiwgMHgwMDI2LCAweDcwMDAsIDB4OTA4ZSwgMHgwMDA0LAorCTB4MDEzMCwgMHgyMDA5LCAweDAwYzgsIDB4MjAxMSwgMHg3NjEyLCAweDA4MGMsIDB4OGE1ZCwgMHgwMDJlLAorCTB4MDAxZSwgMHgwODBjLCAweDg4OTAsIDB4NzAzNCwgMHhjMDg1LCAweDcwMzYsIDB4MjAwMSwgMHgxOTdkLAorCTB4MjAwMywgMHgwMDA0LCAweDA4MGMsIDB4NzQ0ZCwgMHgwODBjLCAweDc3YWYsIDB4MDEzOCwgMHg2ODA0LAorCTB4ZDBkNCwgMHgxMTIwLCAweGQwZGMsIDB4MTEwMCwgMHgwODBjLCAweDdhYmIsIDB4MDBlZSwgMHgwMGRlLAorCTB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LAorCTB4MDE0MCwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHg4OGE3LCAweDA4MGMsIDB4ODg5OSwgMHgwODBjLAorCTB4N2FjNSwgMHgyMDAxLCAweDE5NmQsIDB4MjAwMywgMHgwMDAwLCAweDkwMDYsIDB4NzA5YSwgMHg2MGUyLAorCTB4Njg4NiwgMHgwODBjLCAweDI3MDAsIDB4OTAwNiwgMHgwODBjLCAweDJhOTksIDB4NjA0MywgMHgwMDkwLAorCTB4NjA0MywgMHgwMDEwLCAweDAwMjYsIDB4MjAxMSwgMHhmZmZmLCAweDA4MGMsIDB4MmFkMywgMHgwMDJlLAorCTB4NjAyYiwgMHgxODJjLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLAorCTB4MTk3YywgMHgyMDA0LCAweDkwODYsIDB4YWFhYSwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwODBjLAorCTB4NTg0NCwgMHg5MDg0LCAweDAwMzAsIDB4OTA4NiwgMHgwMDAwLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LAorCTB4MDgwYywgMHg1ODQ0LCAweDkwODQsIDB4MDAzMCwgMHg5MDg2LCAweDAwMzAsIDB4MDAwZSwgMHgwMDA1LAorCTB4MDAwNiwgMHgwODBjLCAweDU4NDQsIDB4OTA4NCwgMHgwMDMwLCAweDkwODYsIDB4MDAxMCwgMHgwMDBlLAorCTB4MDAwNSwgMHgwMDA2LCAweDA4MGMsIDB4NTg0NCwgMHg5MDg0LCAweDAwMzAsIDB4OTA4NiwgMHgwMDIwLAorCTB4MDAwZSwgMHgwMDA1LCAweDAwMzYsIDB4MDAxNiwgMHgyMDAxLCAweDE4MGMsIDB4MjAwNCwgMHg5MDhjLAorCTB4MDAxMywgMHgwMTY4LCAweDAwMjAsIDB4MDgwYywgMHgyNzIwLCAweDkwMGUsIDB4MDAxMCwgMHgyMDA5LAorCTB4MDAwMiwgMHgyMDE5LCAweDAwMjgsIDB4MDgwYywgMHgzMmRhLCAweDkwMDYsIDB4MDAxOSwgMHgwMDFlLAorCTB4MDAzZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODBjLCAweDJlMDQsIDB4MDEzMCwgMHgwODBjLAorCTB4ZDYzZSwgMHgxMTI4LCAweDkwODUsIDB4MDAxMCwgMHgwMDEwLCAweDkwODQsIDB4ZmZlZiwgMHgyMDcyLAorCTB4MDBlZSwgMHgwMDA1LCAweDYwNTAsIDB4MDAwNiwgMHg2MGVjLCAweDAwMDYsIDB4NjAwYywgMHgwMDA2LAorCTB4NjAwNCwgMHgwMDA2LCAweDYwMjgsIDB4MDAwNiwgMHgwODBjLCAweDJhZjYsIDB4MDgwYywgMHgyYjI5LAorCTB4NjAyZiwgMHgwMTAwLCAweDYwMmYsIDB4MDAwMCwgMHg2MDJmLCAweDAwNDAsIDB4NjAyZiwgMHgwMDAwLAorCTB4MjBhOSwgMHgwMDAyLCAweDA4MGMsIDB4MmE2MCwgMHgwMDI2LCAweDIwMTEsIDB4MDA0MCwgMHgwODBjLAorCTB4MmFkMywgMHgwMDJlLCAweDAwMGUsIDB4NjAyYSwgMHgwMDBlLCAweDYwMDYsIDB4MDAwZSwgMHg2MDBlLAorCTB4MDAwZSwgMHg2MGVlLCAweDYwZTMsIDB4MDAwMCwgMHg2ODg3LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAxLAorCTB4MDgwYywgMHgyNzAwLCAweDIwMDEsIDB4MDBhMCwgMHgwMDA2LCAweDA4MGMsIDB4ZDY0NSwgMHgwMDBlLAorCTB4MDEzMCwgMHgwODBjLCAweDJhYjcsIDB4OTAwNiwgMHgwODBjLCAweDJhYzMsIDB4MDAxMCwgMHgwODBjLAorCTB4MmE5OSwgMHgwMDBlLCAweDYwNTIsIDB4NjA1MCwgMHgwMDA2LCAweGMwZTUsIDB4NjA1MiwgMHgwMGY2LAorCTB4MjA3OSwgMHgwMTAwLCAweDA4MGMsIDB4MmEwYywgMHgwMGZlLCAweDAwMGUsIDB4NjA1MiwgMHgwMDA1LAorCTB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLAorCTB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4YWQ1YSwgMHgwMTU4LAorCTB4MjAwMSwgMHgwMzg2LCAweDIwMDQsIDB4ZDBiNCwgMHgxMTMwLCAweDIwMDEsIDB4MDAxNiwgMHgwODBjLAorCTB4YWNlZCwgMHgwODA0LCAweDc4ZDYsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsIDB4YzFjNCwgMHgyMTAyLAorCTB4NjAyOCwgMHg5MDg0LCAweGUxZmYsIDB4NjAyYSwgMHgyMDExLCAweDAyMDAsIDB4MDgwYywgMHgyYWQzLAorCTB4MjAwMSwgMHgwMDkwLCAweDA4MGMsIDB4MmE5OSwgMHgyMGE5LCAweDAzNjYsIDB4NjAyNCwgMHhkMGNjLAorCTB4MTU2MCwgMHgxZDA0LCAweDc4NmUsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4Nzg2ZSwgMHgwODBjLAorCTB4YWNmYywgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHhhNjJiLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLAorCTB4YTYzNSwgMHgwODBjLCAweGE1MTYsIDB4OTAxZSwgMHgwODBjLCAweGE1OTYsIDB4MjAwMSwgMHgwMzg2LAorCTB4MjAwMywgMHg3MDAwLCAweDA4MGMsIDB4YWQxOCwgMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyYTk5LAorCTB4MDgwYywgMHg3YWI2LCAweDA4MGMsIDB4NjE5ZCwgMHgwODBjLCAweGQ2NDUsIDB4MDExMCwgMHgwODBjLAorCTB4MGNmMSwgMHg5MDg1LCAweDAwMDEsIDB4MDgwNCwgMHg3OGRjLCAweDA4MGMsIDB4MWI0YiwgMHg2MGUzLAorCTB4MDAwMCwgMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLCAweDIwMDEsIDB4MDAwMiwgMHgxMTE4LAorCTB4MjAwMSwgMHgxOTZkLCAweDIwMDQsIDB4MDgwYywgMHgyNzAwLCAweDYwZTIsIDB4MjAwMSwgMHgwMDgwLAorCTB4MDgwYywgMHgyYTk5LCAweDIwYTksIDB4MDM2NiwgMHgyMDExLCAweDFlMDAsIDB4MDgwYywgMHgyYWQzLAorCTB4MjAwOSwgMHgxZTAwLCAweDA4MGMsIDB4MmE3ZiwgMHg2MDI0LCAweDkxMGMsIDB4MDE0MCwgMHgxZDA0LAorCTB4NzhiNCwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHg3OGI0LCAweDA4MDQsIDB4Nzg3NywgMHgyMDAxLAorCTB4MDM4NiwgMHgyMDAzLCAweDcwMDAsIDB4NjAyOCwgMHg5MDg1LCAweDFlMDAsIDB4NjAyYSwgMHg3MGI0LAorCTB4OTAwNSwgMHgxMTE4LCAweDY4ODcsIDB4MDAwMSwgMHgwMDA4LCAweDY4ODYsIDB4MDgwYywgMHhkNjQ1LAorCTB4MDExMCwgMHgwODBjLCAweDBjZjEsIDB4OTAwNiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLAorCTB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LAorCTB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MDAwLAorCTB4OTA4NiwgMHgwMDAzLCAweDExNjgsIDB4MjAwMSwgMHgwMjBiLCAweDIwMDQsIDB4OTA4NCwgMHg1NTQwLAorCTB4OTA4NiwgMHg1NTQwLCAweDExMjgsIDB4MjA2OSwgMHgxYTdiLCAweDJkMDQsIDB4ODAwMCwgMHgyMDZhLAorCTB4MjA2OSwgMHgwMTQwLCAweDYwMjAsIDB4OTA4NCwgMHgwMGMwLCAweDAxMjAsIDB4Njg4NCwgMHg5MDA1LAorCTB4MTkwNCwgMHg3OTRkLCAweDIwMDEsIDB4MDA4OCwgMHgwODBjLCAweDJhOTksIDB4OTAwNiwgMHg2MGUyLAorCTB4Njg4NiwgMHgwODBjLCAweDI3MDAsIDB4MjA2OSwgMHgwMjAwLCAweDY4MDQsIDB4OTAwNSwgMHgxMTE4LAorCTB4NjgwOCwgMHg5MDA1LCAweDAxZDAsIDB4NjAyOCwgMHg5MDg0LCAweGZiZmYsIDB4NjAyYSwgMHgyMDExLAorCTB4MDQwMCwgMHgwODBjLCAweDJhZDMsIDB4MjA2OSwgMHgxOThmLCAweDcwMDAsIDB4MjA2YSwgMHg3MDliLAorCTB4MDAyNiwgMHg3MDAzLCAweDAwMDEsIDB4MjBhOSwgMHgwMDAyLCAweDFkMDQsIDB4NzkyZCwgMHgyMDkxLAorCTB4NjAwMCwgMHgxZjA0LCAweDc5MmQsIDB4MDgwNCwgMHg3OTg4LCAweDIwNjksIDB4MDE0MCwgMHgyMGE5LAorCTB4MDM4NCwgMHgyMDExLCAweDFlMDAsIDB4MDgwYywgMHgyYWQzLCAweDIwMDksIDB4MWUwMCwgMHgwODBjLAorCTB4MmE3ZiwgMHg2MDI0LCAweDkxMGMsIDB4MDUyOCwgMHg5MDg0LCAweDFhMDAsIDB4MTUxMCwgMHgxZDA0LAorCTB4NzkzOSwgMHgyMDkxLCAweDYwMDAsIDB4MWYwNCwgMHg3OTM5LCAweDA4MGMsIDB4YWNmYywgMHgyMDExLAorCTB4MDAwMywgMHgwODBjLCAweGE2MmIsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsIDB4YTYzNSwgMHgwODBjLAorCTB4YTUxNiwgMHg5MDFlLCAweDA4MGMsIDB4YTU5NiwgMHgwODBjLCAweGFkMTgsIDB4MjAwMSwgMHgwMGEwLAorCTB4MDgwYywgMHgyYTk5LCAweDA4MGMsIDB4N2FiNiwgMHgwODBjLCAweDYxOWQsIDB4OTA4NSwgMHgwMDAxLAorCTB4MDBmOCwgMHgwODBjLCAweDFiNGIsIDB4MjAwMSwgMHgwMDgwLCAweDA4MGMsIDB4MmE5OSwgMHgyMDY5LAorCTB4MDE0MCwgMHg2MGUzLCAweDAwMDAsIDB4NzBiNCwgMHg5MDA1LCAweDExMTgsIDB4Njg4NywgMHgwMDAxLAorCTB4MDAwOCwgMHg2ODg2LCAweDIwMDEsIDB4MTgwZCwgMHgyMDA0LCAweGQwOGMsIDB4MjAwMSwgMHgwMDAyLAorCTB4MTExOCwgMHgyMDAxLCAweDE5NmQsIDB4MjAwNCwgMHgwODBjLCAweDI3MDAsIDB4NjBlMiwgMHg5MDA2LAogCTB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHgwMDA1LAogCTB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgyMDYxLAogCTB4MDEwMCwgMHgyMDcxLCAweDE4MDAsIDB4NjAyMCwgMHg5MDg0LCAweDAwYzAsIDB4MDFlOCwgMHgwODBjLAotCTB4YWFmNywgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHhhNDI2LCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLAotCTB4YTQzMCwgMHgwODBjLCAweGEzMTEsIDB4OTAxZSwgMHgwODBjLCAweGEzOTEsIDB4MDgwYywgMHhhYjEzLAotCTB4MjA2OSwgMHgwMTQwLCAweDIwMDEsIDB4MDBhMCwgMHgwODBjLCAweDJhYTIsIDB4MDgwYywgMHg3OTlmLAotCTB4MDgwYywgMHg2MTc4LCAweDA4MDQsIDB4NzkxYiwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhkMWI0LAotCTB4MTE2MCwgMHhjMWI1LCAweDIxMDIsIDB4MDgwYywgMHg3NGY5LCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLAotCTB4MDA4MCwgMHgwODBjLCAweDJhYTIsIDB4NjBlMywgMHgwMDAwLCAweDIwNjksIDB4MDIwMCwgMHg2ODA0LAorCTB4YWNmYywgMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHhhNjJiLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLAorCTB4YTYzNSwgMHgwODBjLCAweGE1MTYsIDB4OTAxZSwgMHgwODBjLCAweGE1OTYsIDB4MDgwYywgMHhhZDE4LAorCTB4MjA2OSwgMHgwMTQwLCAweDIwMDEsIDB4MDBhMCwgMHgwODBjLCAweDJhOTksIDB4MDgwYywgMHg3YWI2LAorCTB4MDgwYywgMHg2MTlkLCAweDA4MDQsIDB4N2EzMiwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhkMWI0LAorCTB4MTE2MCwgMHhjMWI1LCAweDIxMDIsIDB4MDgwYywgMHg3NWZhLCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLAorCTB4MDA4MCwgMHgwODBjLCAweDJhOTksIDB4NjBlMywgMHgwMDAwLCAweDIwNjksIDB4MDIwMCwgMHg2ODA0LAogCTB4OTAwNSwgMHgxMTE4LCAweDY4MDgsIDB4OTAwNSwgMHgwMTkwLCAweDYwMjgsIDB4OTA4NCwgMHhmZGZmLAotCTB4NjAyYSwgMHgyMDExLCAweDAyMDAsIDB4MDgwYywgMHgyYWRjLCAweDIwNjksIDB4MTk5MCwgMHg3MDAwLAotCTB4MjA2YSwgMHg3MDliLCAweDAwMjcsIDB4NzAwMywgMHgwMDAxLCAweDA4MDQsIDB4NzkxYiwgMHgyMDExLAotCTB4MWUwMCwgMHgwODBjLCAweDJhZGMsIDB4MjAwOSwgMHgxZTAwLCAweDA4MGMsIDB4MmE4OCwgMHg2MDI0LAotCTB4OTEwYywgMHgwMWM4LCAweDkwODQsIDB4MWMwMCwgMHgxMWIwLCAweDFkMDQsIDB4NzhkNywgMHgwMDA2LAotCTB4MDAxNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwODBjLCAweDg3ODAsIDB4MDBlZSwgMHgwMGRlLAotCTB4MDBjZSwgMHgwMDFlLCAweDAwMGUsIDB4MDBlNiwgMHgyMDcxLCAweDFhMDUsIDB4NzA3OCwgMHgwMGVlLAotCTB4OTAwNSwgMHgxOWU4LCAweDA0MDAsIDB4MDAyNiwgMHgyMDExLCAweDc1MTEsIDB4MDgwYywgMHg4ODJjLAotCTB4MjAxMSwgMHg3NTA0LCAweDA4MGMsIDB4ODkzOCwgMHgwMDJlLCAweDIwNjksIDB4MDE0MCwgMHg2MGUzLAorCTB4NjAyYSwgMHgyMDExLCAweDAyMDAsIDB4MDgwYywgMHgyYWQzLCAweDIwNjksIDB4MTk4ZiwgMHg3MDAwLAorCTB4MjA2YSwgMHg3MDliLCAweDAwMjcsIDB4NzAwMywgMHgwMDAxLCAweDA4MDQsIDB4N2EzMiwgMHgyMDExLAorCTB4MWUwMCwgMHgwODBjLCAweDJhZDMsIDB4MjAwOSwgMHgxZTAwLCAweDA4MGMsIDB4MmE3ZiwgMHg2MDI0LAorCTB4OTEwYywgMHgwMWM4LCAweDkwODQsIDB4MWMwMCwgMHgxMWIwLCAweDFkMDQsIDB4NzllNywgMHgwMDA2LAorCTB4MDAxNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwODBjLCAweDg4ZTcsIDB4MDBlZSwgMHgwMGRlLAorCTB4MDBjZSwgMHgwMDFlLCAweDAwMGUsIDB4MDBlNiwgMHgyMDcxLCAweDFhMDQsIDB4NzA3OCwgMHgwMGVlLAorCTB4OTAwNSwgMHgxOWU4LCAweDA0MzgsIDB4MDAyNiwgMHgyMDExLCAweDc2MTIsIDB4MDgwYywgMHg4OTkzLAorCTB4MjAxMSwgMHg3NjA1LCAweDA4MGMsIDB4OGE5ZiwgMHgwMDJlLCAweDIwNjksIDB4MDE0MCwgMHg2MGUzLAogCTB4MDAwMCwgMHg3MGI0LCAweDkwMDUsIDB4MTExOCwgMHg2ODg3LCAweDAwMDEsIDB4MDAwOCwgMHg2ODg2LAotCTB4MjAwMSwgMHgxOTZlLCAweDIwMDQsIDB4MDgwYywgMHgyNzE1LCAweDYwZTIsIDB4MjAwMSwgMHgxODBjLAotCTB4MjAwYywgMHhjMWI0LCAweDIxMDIsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMTVlLCAweDAwMDUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LAotCTB4MDBjNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHhkMzU2LAotCTB4MTkwNCwgMHg3OTg5LCAweDcxMzAsIDB4ZDE4NCwgMHgxMTcwLCAweDA4MGMsIDB4MzQ2OCwgMHgwMTM4LAotCTB4YzE4ZCwgMHg3MTMyLCAweDIwMTEsIDB4MTg0OCwgMHgyMjE0LCAweGQyYWMsIDB4MTEyMCwgMHg3MDMwLAotCTB4ZDA4YywgMHgwOTA0LCAweDc5ODksIDB4MjAxMSwgMHgxODQ4LCAweDIyMGMsIDB4ZDFhNCwgMHgwNTM4LAotCTB4MDAxNiwgMHgyMDE5LCAweDAwMGUsIDB4MDgwYywgMHhlNzAxLCAweDAxNTYsIDB4MDBiNiwgMHgyMGE5LAotCTB4MDA3ZiwgMHg5MDBlLCAweDkxODYsIDB4MDA3ZSwgMHgwMWEwLCAweDkxODYsIDB4MDA4MCwgMHgwMTg4LAotCTB4MDgwYywgMHg2NzgzLCAweDExNzAsIDB4MjEyMCwgMHg5MDA2LCAweDAwMTYsIDB4MjAwOSwgMHgwMDBlLAotCTB4MDgwYywgMHhlNzk1LCAweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MDgwYywgMHg4YWRkLAotCTB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4Nzk1MiwgMHgwMGJlLCAweDAxNWUsIDB4MDAxZSwgMHhkMWFjLAotCTB4MTE0OCwgMHgwMDE2LCAweDIwMDksIDB4MDAwMiwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHgzMmMwLAotCTB4MDAxZSwgMHgwMDc4LCAweDAxNTYsIDB4MDBiNiwgMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwODBjLAotCTB4Njc4MywgMHgxMTEwLCAweDA4MGMsIDB4NjE5MiwgMHg4MTA4LCAweDFmMDQsIDB4Nzk3ZiwgMHgwMGJlLAotCTB4MDE1ZSwgMHgwODBjLCAweDFiNjgsIDB4MDgwYywgMHhhYWY3LCAweDA4MGMsIDB4YWU4NywgMHgwODBjLAotCTB4YWIxMywgMHg2MGUzLCAweDAwMDAsIDB4MDgwYywgMHg2MTc4LCAweDA4MGMsIDB4NzVjYywgMHgwMGVlLAotCTB4MDBjZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgyMDAxLAotCTB4MTk3ZSwgMHgyMDAzLCAweDAwMDEsIDB4MDAwNSwgMHgyMDAxLCAweDE5N2UsIDB4MjAwMywgMHgwMDAwLAotCTB4MDAwNSwgMHgyMDAxLCAweDE5N2QsIDB4MjAwMywgMHhhYWFhLCAweDAwMDUsIDB4MjAwMSwgMHgxOTdkLAotCTB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MjA3MSwgMHgxOGZhLCAweDcwMDMsIDB4MDAwMCwgMHg3MDA3LAotCTB4MDAwMCwgMHgwODBjLCAweDEwNjYsIDB4MDkwYywgMHgwZDc5LCAweGE4YWIsIDB4ZGNiMCwgMHgyOTAwLAotCTB4NzA0ZSwgMHgwODBjLCAweDEwNjYsIDB4MDkwYywgMHgwZDc5LCAweGE4YWIsIDB4ZGNiMCwgMHgyOTAwLAotCTB4NzA1MiwgMHhhODY3LCAweDAwMDAsIDB4YTg2YiwgMHgwMDAxLCAweGE4OWYsIDB4MDAwMCwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweDAwNDAsIDB4Njg0OCwgMHg5MDA1LCAweDExMTgsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDRiMCwgMHg2ODQwLCAweDkwMDUsIDB4MDE1MCwgMHgwNGExLCAweDZhNTAsIDB4OTIwMCwgMHg3MDAyLAotCTB4Njg1NCwgMHg5MTAxLCAweDcwMDYsIDB4OTAwNiwgMHg3MDEyLCAweDcwMTYsIDB4Njg1MCwgMHg3MDAyLAotCTB4Njg1NCwgMHg3MDA2LCAweDY4NTgsIDB4NzAwYSwgMHg2ODVjLCAweDcwMGUsIDB4Njg0MCwgMHg5MDA1LAotCTB4MTExMCwgMHg3MDEyLCAweDcwMTYsIDB4Njg0OCwgMHg3MDFhLCAweDcwMWMsIDB4OTA4NSwgMHgwMDQwLAotCTB4NzAxZSwgMHgyMDAxLCAweDAwMTksIDB4NzAzNiwgMHg3MDJiLCAweDAwMDEsIDB4MjAwMSwgMHgwMDA0LAotCTB4MjAwYywgMHg5MThjLCAweGZmZjcsIDB4OTE4ZCwgMHg4MDAwLCAweDIxMDIsIDB4MDBkNiwgMHgyMDY5LAotCTB4MThmYSwgMHg2ODA3LCAweDAwMDEsIDB4MDBkZSwgMHgwODBjLCAweDdmOWMsIDB4OTAwNiwgMHgwMGVlLAotCTB4MDAwNSwgMHg5MDBlLCAweDAxNTYsIDB4MjBhOSwgMHgwMDA2LCAweDgwMDMsIDB4ODE4ZCwgMHgxZjA0LAotCTB4N2ExNSwgMHgwMTVlLCAweDAwMDUsIDB4MjA3OSwgMHgwMDQwLCAweDIwNzEsIDB4MThmYSwgMHg3MDA0LAotCTB4MDAwMiwgMHg3YTJiLCAweDdhMmMsIDB4N2E3OCwgMHg3YWQzLCAweDdiZTMsIDB4N2EyOSwgMHg3YTI5LAotCTB4N2MwZCwgMHgwODBjLCAweDBkNzksIDB4MDAwNSwgMHgyMDc5LCAweDAwNDAsIDB4MjAwMSwgMHgxZGMwLAotCTB4MjAwMywgMHgwMDAwLCAweDc4MmMsIDB4OTA4YywgMHgwNzgwLCAweDE5MGMsIDB4ODA3ZSwgMHhkMGE0LAotCTB4MDU3OCwgMHgyMDAxLCAweDFkYzAsIDB4MjAwNCwgMHg5MDgyLCAweDAwODAsIDB4MTY0OCwgMHgxZDA0LAotCTB4N2E0OSwgMHgyMDAxLCAweDFhMDgsIDB4MjAwYywgMHg4MTA5LCAweDA1MTAsIDB4MjA5MSwgMHg2MDAwLAotCTB4MjEwMiwgMHg3ODI0LCAweDIwNDgsIDB4OTAwNiwgMHhhODAyLCAweGE4MDYsIDB4YTg2NCwgMHg5MDg0LAotCTB4MDBmZiwgMHg5MDhhLCAweDAwNDAsIDB4MDYxMCwgMHgwMGMwLCAweDIwMDEsIDB4MTgwMCwgMHgyMDBjLAotCTB4OTE4NiwgMHgwMDAzLCAweDExNjgsIDB4NzAwNCwgMHgwMDAyLCAweDdhNjgsIDB4N2EzMiwgMHg3YTY4LAotCTB4N2E2NiwgMHg3YTY4LCAweDdhNjgsIDB4N2E2OCwgMHg3YTY4LCAweDdhNjgsIDB4MDgwYywgMHg3YWQzLAotCTB4NzgyYywgMHhkMDljLCAweDA5MGMsIDB4N2Y5YywgMHgwMDA1LCAweDkwODIsIDB4MDA1YSwgMHgxMjE4LAotCTB4MjEwMCwgMHgwMDNiLCAweDBjMTAsIDB4MDgwYywgMHg3YjA5LCAweDBjOTAsIDB4MDBlMywgMHgwOGU4LAotCTB4MDAwNSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LAotCTB4N2IwOSwgMHg3YjJiLCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LAotCTB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LAotCTB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LCAweDdiMTUsIDB4N2IwOSwgMHg3ZDAzLAotCTB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IyYiwgMHg3YjA5LCAweDdiMTUsIDB4N2Q0NCwgMHg3ZDg1LAotCTB4N2RjYywgMHg3ZGUwLCAweDdiMDksIDB4N2IwOSwgMHg3YjJiLCAweDdiMTUsIDB4N2IzZiwgMHg3YjA5LAotCTB4N2JiNywgMHg3ZThiLCAweDdlYTYsIDB4N2IwOSwgMHg3YjJiLCAweDdiMDksIDB4N2IzZiwgMHg3YjA5LAotCTB4N2IwOSwgMHg3YmFkLCAweDdlYTYsIDB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LAotCTB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjUzLCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LAotCTB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4ODAyMiwgMHg3YjA5LAotCTB4N2ZjYywgMHg3YjA5LCAweDdmY2MsIDB4N2IwOSwgMHg3YjY4LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LAotCTB4N2IwOSwgMHg3YjA5LCAweDdiMDksIDB4MjA3OSwgMHgwMDQwLCAweDcwMDQsIDB4OTA4NiwgMHgwMDAzLAotCTB4MTE5OCwgMHg3ODJjLCAweDA4MGMsIDB4N2ZjNSwgMHhkMGE0LCAweDAxNzAsIDB4NzgyNCwgMHgyMDQ4LAotCTB4OTAwNiwgMHhhODAyLCAweGE4MDYsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4YSwgMHgwMDFhLAotCTB4MTIxMCwgMHgwMDJiLCAweDBjNTAsIDB4MDBlOSwgMHgwODBjLCAweDdmOWMsIDB4MDAwNSwgMHg3YjA5LAotCTB4N2IxNSwgMHg3Y2VmLCAweDdiMDksIDB4N2IxNSwgMHg3YjA5LCAweDdiMTUsIDB4N2IxNSwgMHg3YjA5LAotCTB4N2IxNSwgMHg3Y2VmLCAweDdiMTUsIDB4N2IxNSwgMHg3YjE1LCAweDdiMTUsIDB4N2IxNSwgMHg3YjA5LAotCTB4N2IxNSwgMHg3Y2VmLCAweDdiMDksIDB4N2IwOSwgMHg3YjE1LCAweDdiMDksIDB4N2IwOSwgMHg3YjA5LAotCTB4N2IxNSwgMHgwMGU2LCAweDIwNzEsIDB4MThmYSwgMHgyMDA5LCAweDA0MDAsIDB4MDA3MSwgMHgwMGVlLAotCTB4MDAwNSwgMHgyMDA5LCAweDEwMDAsIDB4MDA0OSwgMHgwMDA1LCAweDIwMDksIDB4MjAwMCwgMHgwMDI5LAotCTB4MDAwNSwgMHgyMDA5LCAweDA4MDAsIDB4MDAwOSwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMSwgMHhhODY4LAotCTB4OTA4NCwgMHgwMGZmLCAweDkxMDUsIDB4YTg2YSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLAotCTB4NmYxMSwgMHgwMTJlLCAweDAwMDUsIDB4YTg2NCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHgwZDA4LAotCTB4ODAwMSwgMHgxMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwODA0LCAweDdjOGMsIDB4NzAwNywgMHgwMDAzLAotCTB4NzAxMiwgMHgyOTAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDdjOGMsIDB4MDAwNSwgMHhhODY0LAotCTB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4MDk2OCwgMHg4MDAxLCAweDExMjAsIDB4NzAwNywgMHgwMDAxLAotCTB4MDgwNCwgMHg3Y2E3LCAweDcwMDcsIDB4MDAwMywgMHg3MDEyLCAweDI5MDAsIDB4NzAxNiwgMHg3MDFhLAotCTB4NzA0YiwgMHg3Y2E3LCAweDAwMDUsIDB4YTg2NCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHgwOTA0LAotCTB4N2IxMSwgMHg4MDAxLCAweDExMjAsIDB4NzAwNywgMHgwMDAxLCAweDA4MDQsIDB4N2NjMywgMHg3MDA3LAotCTB4MDAwMywgMHg3MDEyLCAweDI5MDAsIDB4NzAxNiwgMHg3MDFhLCAweDcwNGIsIDB4N2NjMywgMHgwMDA1LAotCTB4YTg2NCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDEsIDB4MTkwNCwgMHg3YjExLAotCTB4NzAwNywgMHgwMDAxLCAweDIwMDksIDB4MTgzNCwgMHgyMTBjLCAweDgxZmYsIDB4MTFhOCwgMHhhODY4LAotCTB4OTA4NCwgMHgwMGZmLCAweGE4NmEsIDB4YTg4MywgMHgwMDAwLCAweDA4MGMsIDB4NjQwYiwgMHgxMTA4LAotCTB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhhODY3LCAweDAxMzksIDB4YTg3YSwgMHhhOTgyLAotCTB4MDgwYywgMHg2ZjExLCAweDAxMmUsIDB4MGNhMCwgMHhhOTk0LCAweDkxODYsIDB4MDA3MSwgMHgwZDM4LAotCTB4OTE4NiwgMHgwMDY0LCAweDBkMjAsIDB4OTE4NiwgMHgwMDdjLCAweDBkMDgsIDB4OTE4NiwgMHgwMDI4LAotCTB4MDlmMCwgMHg5MTg2LCAweDAwMzgsIDB4MDlkOCwgMHg5MTg2LCAweDAwNzgsIDB4MDljMCwgMHg5MTg2LAotCTB4MDA1ZiwgMHgwOWE4LCAweDkxODYsIDB4MDA1NiwgMHgwOTkwLCAweGE4OTcsIDB4NDAwNSwgMHhhODliLAotCTB4MDAwMSwgMHgyMDAxLCAweDAwMzAsIDB4OTAwZSwgMHgwOGEwLCAweGE4N2MsIDB4OTA4NCwgMHgwMGMwLAotCTB4OTA4NiwgMHgwMGMwLCAweDExMjAsIDB4NzAwNywgMHgwMDAxLCAweDA4MDQsIDB4N2ViZCwgMHgyOTAwLAotCTB4NzAxNiwgMHg3MDFhLCAweDIwYTksIDB4MDAwNCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLAotCTB4MDAzMCwgMHgyMDk4LCAweDcwNTAsIDB4MjA0MCwgMHhhMDYwLCAweDIwZTgsIDB4YTA1YywgMHg5MDgwLAotCTB4MDAyMywgMHgyMGEwLCAweDQwMDMsIDB4YTg4OCwgMHg3MDEyLCAweDkwODIsIDB4MDQwMSwgMHgxYTA0LAotCTB4N2IxOSwgMHhhYWI0LCAweDkyOGEsIDB4MDAwMiwgMHgxYTA0LCAweDdiMTksIDB4ODJmZiwgMHgxMTM4LAotCTB4YThiOCwgMHhhOWJjLCAweDkxMDUsIDB4MDExOCwgMHgyMDAxLCAweDdjNGEsIDB4MDAxOCwgMHg5MjgwLAotCTB4N2M0MCwgMHgyMDA1LCAweDcwNTYsIDB4NzAxMCwgMHg5MDE1LCAweDA5MDQsIDB4N2MyYiwgMHgwODBjLAotCTB4MTA2NiwgMHgxMTE4LCAweDcwMDcsIDB4MDAwNCwgMHgwMDA1LCAweDI5MDAsIDB4NzAyMiwgMHg3MDU0LAotCTB4MjA2MCwgMHhlMDAwLCAweGE4NjYsIDB4NzA1MCwgMHgyMDQwLCAweGE5NWMsIDB4ZTAwNCwgMHg5MTAwLAotCTB4YTA3NiwgMHhhODYwLCAweGEwNzIsIDB4ZTAwOCwgMHg5MjBhLCAweDEyMTAsIDB4OTAwZSwgMHgyMjAwLAotCTB4NzExMiwgMHhlMjBjLCAweDgwMDMsIDB4ODAwYiwgMHg5Mjk2LCAweDAwMDQsIDB4MDEwOCwgMHg5MTA4LAotCTB4YTE3YSwgMHg4MTBiLCAweGExN2UsIDB4MDgwYywgMHgxMTQyLCAweGEwNmMsIDB4OTA4ZSwgMHgwMTAwLAotCTB4MDE3MCwgMHg5MDg2LCAweDAyMDAsIDB4MDExOCwgMHg3MDA3LCAweDAwMDcsIDB4MDAwNSwgMHg3MDIwLAotCTB4MjA0OCwgMHgwODBjLCAweDEwN2YsIDB4NzAxNCwgMHgyMDQ4LCAweDA4MDQsIDB4N2IxOSwgMHg3MDIwLAotCTB4MjA0OCwgMHg3MDE4LCAweGE4MDIsIDB4YTgwNywgMHgwMDAwLCAweDI5MDgsIDB4MjA0OCwgMHhhOTA2LAotCTB4NzExYSwgMHgwODA0LCAweDdiZTMsIDB4NzAxNCwgMHgyMDQ4LCAweDcwMDcsIDB4MDAwMSwgMHhhOGI0LAotCTB4OTAwNSwgMHgxMTI4LCAweGE4YjgsIDB4YTliYywgMHg5MTA1LCAweDAxMDgsIDB4MDBiOSwgMHhhODY0LAotCTB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAxZSwgMHgwOTA0LCAweDdlYmQsIDB4MDgwNCwgMHg3YzhjLAotCTB4N2M0MiwgMHg3YzQ2LCAweDAwMDIsIDB4MDAxZCwgMHgwMDA3LCAweDAwMDQsIDB4MDAwYSwgMHgwMDFiLAotCTB4MDAwNSwgMHgwMDA2LCAweDAwMGEsIDB4MDAxZCwgMHgwMDA1LCAweDAwMDQsIDB4MDA3NiwgMHgwMDY2LAotCTB4YWZiOCwgMHhhZWJjLCAweGE4MDQsIDB4MjA1MCwgMHhiMGMwLCAweGIwZTIsIDB4YjBiYywgMHhiMGRlLAotCTB4YjBiOCwgMHhiMGQyLCAweGIwYjQsIDB4YjBjZSwgMHhiNmRhLCAweGI3ZDYsIDB4YjBiMCwgMHhiMGNhLAotCTB4YjBhYywgMHhiMGM2LCAweGIwYTgsIDB4YjBiYSwgMHhiMGE0LCAweGIwYjYsIDB4YjZjMiwgMHhiN2JlLAotCTB4YjBhMCwgMHhiMGIyLCAweGIwOWMsIDB4YjBhZSwgMHhiMDk4LCAweGIwYTIsIDB4YjA5NCwgMHhiMDllLAotCTB4YjZhYSwgMHhiN2E2LCAweGIwOTAsIDB4YjA5YSwgMHhiMDhjLCAweGIwOTYsIDB4YjA4OCwgMHhiMDhhLAotCTB4YjA4NCwgMHhiMDg2LCAweGI2OTIsIDB4Yjc4ZSwgMHhiMDgwLCAweGIwODIsIDB4YjA3YywgMHhiMDdlLAotCTB4YjA3OCwgMHhiMDcyLCAweGIwNzQsIDB4YjA2ZSwgMHhiNjdhLCAweGI3NzYsIDB4YjAwNCwgMHg5MDU1LAotCTB4MTk1OCwgMHgwMDZlLCAweDAwN2UsIDB4MDAwNSwgMHgyMDA5LCAweDE4MzQsIDB4MjEwYywgMHg4MWZmLAotCTB4MTE3OCwgMHgwODBjLCAweDYyMGEsIDB4MTEwOCwgMHgwMDA1LCAweDA4MGMsIDB4NzE1ZCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4Y2YzOCwgMHgwODBjLCAweDZmMTEsIDB4MDEyZSwgMHgwY2EwLAotCTB4MDgwYywgMHhkMzU2LCAweDFkNzAsIDB4MjAwMSwgMHgwMDI4LCAweDkwMGUsIDB4MGM3MCwgMHgyMDA5LAotCTB4MTgzNCwgMHgyMTBjLCAweDgxZmYsIDB4MTE4OCwgMHhhODg4LCAweDkwMDUsIDB4MDE4OCwgMHhhODgzLAotCTB4MDAwMCwgMHgwODBjLCAweDYyOTgsIDB4MTEwOCwgMHgwMDA1LCAweGE4N2EsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDZmMTEsIDB4MDEyZSwgMHgwY2I4LCAweDIwMDEsIDB4MDAyOCwgMHgwY2E4LAotCTB4MjAwMSwgMHgwMDAwLCAweDBjOTAsIDB4MDQxOSwgMHgxMWQ4LCAweGE4ODgsIDB4OTAwNSwgMHgwMWUwLAotCTB4YTg4MywgMHgwMDAwLCAweGE4N2MsIDB4ZDBmNCwgMHgwMTIwLCAweDA4MGMsIDB4NjM2ZCwgMHgxMTM4LAotCTB4MDAwNSwgMHg5MDA2LCAweGE4N2EsIDB4MDgwYywgMHg2MmU1LCAweDExMDgsIDB4MDAwNSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweGE4N2EsIDB4YTk4MiwgMHgwODBjLCAweDZmMTEsIDB4MDEyZSwgMHgwY2IwLAotCTB4MjAwMSwgMHgwMDI4LCAweDkwMGUsIDB4MGM5OCwgMHgyMDAxLCAweDAwMDAsIDB4MGM4MCwgMHgwMGM2LAotCTB4MjA2MSwgMHgxODAwLCAweDYwZDAsIDB4OTAwNSwgMHgwMTAwLCAweDAwY2UsIDB4MDAwNSwgMHg3MDE4LAotCTB4YTgwMiwgMHgyOTA4LCAweDIwNDgsIDB4YTkwNiwgMHg3MTFhLCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLAotCTB4MDExOCwgMHg3MDA3LCAweDAwMDMsIDB4MDAzMCwgMHg3MDE0LCAweDIwNDgsIDB4NzAwNywgMHgwMDAxLAotCTB4NzA0OCwgMHgwODBmLCAweDAwMDUsIDB4MDBiNiwgMHg3MDA3LCAweDAwMDEsIDB4YTk3NCwgMHhhODc4LAotCTB4OTA4NCwgMHgwMGZmLCAweDkwOTYsIDB4MDAwNCwgMHgwNTQwLCAweDIwYTksIDB4MDAwMSwgMHg5MDk2LAotCTB4MDAwMSwgMHgwMTkwLCAweDkwMGUsIDB4MjBhOSwgMHgwODAwLCAweDkwOTYsIDB4MDAwMiwgMHgwMTYwLAotCTB4OTAwNSwgMHgxMWQ4LCAweGE5NzQsIDB4MDgwYywgMHg2NzgzLCAweDExYjgsIDB4MDA2NiwgMHhhZTgwLAotCTB4MDgwYywgMHg2ODkzLCAweDAwNmUsIDB4MDA4OCwgMHgwMDQ2LCAweDIwMTEsIDB4MTgwYywgMHgyMjI0LAotCTB4YzQ4NCwgMHgyNDEyLCAweDAwNGUsIDB4MDBjNiwgMHgwODBjLCAweDY3ODMsIDB4MTExMCwgMHgwODBjLAotCTB4NmE2NCwgMHg4MTA4LCAweDFmMDQsIDB4N2QyYywgMHgwMGNlLCAweGE4N2MsIDB4ZDA4NCwgMHgxMTIwLAotCTB4MDgwYywgMHgxMDdmLCAweDAwYmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLAotCTB4NmYxMSwgMHgwMTJlLCAweDAwYmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LAotCTB4MDAwMSwgMHgwODBjLCAweDZiYzksIDB4MDU4MCwgMHgyMDYxLCAweDFhNzQsIDB4NjEwMCwgMHhkMTg0LAotCTB4MDE3OCwgMHhhODg4LCAweDkwODQsIDB4MDBmZiwgMHgxNTUwLCAweDYwMDAsIDB4ZDA4NCwgMHgwNTIwLAotCTB4NjAwNCwgMHg5MDA1LCAweDE1MzgsIDB4NjAwMywgMHgwMDAwLCAweDYwMGIsIDB4MDAwMCwgMHgwMGM4LAotCTB4MjAxMSwgMHgwMDAxLCAweGE4OTAsIDB4OTAwNSwgMHgxMTEwLCAweDIwMDEsIDB4MDAxZSwgMHg4MDAwLAotCTB4NjAxNiwgMHhhODg4LCAweDkwODQsIDB4MDBmZiwgMHgwMTc4LCAweDYwMDYsIDB4YTg4OCwgMHg4MDA3LAotCTB4OTA4NCwgMHgwMGZmLCAweDAxNDgsIDB4NjAwYSwgMHhhODg4LCAweDgwMDAsIDB4MTEwOCwgMHhjMjhkLAotCTB4NjIwMiwgMHgwMTJlLCAweDA4MDQsIDB4N2Y4NiwgMHgwMTJlLCAweDA4MDQsIDB4N2Y4MCwgMHgwMTJlLAotCTB4MDgwNCwgMHg3ZjdhLCAweDAxMmUsIDB4MDgwNCwgMHg3ZjdkLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NzAwNywgMHgwMDAxLCAweDA4MGMsIDB4NmJjOSwgMHgwNWUwLCAweDIwNjEsIDB4MWE3NCwgMHg2MDAwLAotCTB4ZDA4NCwgMHgwNWI4LCAweDYyMDQsIDB4NjMwOCwgMHhkMDhjLCAweDE1MzAsIDB4YWM3OCwgMHg5NDg0LAotCTB4MDAwMywgMHgwMTcwLCAweGE5ODgsIDB4OTE4YywgMHgwMGZmLCAweDgwMDEsIDB4MTEyMCwgMHgyMTAwLAotCTB4OTIxMCwgMHgwNjIwLCAweDAwMjgsIDB4ODAwMSwgMHgxNTA4LCAweDIxMDAsIDB4OTIxMiwgMHgwMmYwLAotCTB4OTQ4NCwgMHgwMDBjLCAweDAxODgsIDB4YTk4OCwgMHg4MTBmLCAweDkxOGMsIDB4MDBmZiwgMHg5MDgyLAotCTB4MDAwNCwgMHgxMTIwLCAweDIxMDAsIDB4OTMxOCwgMHgwMjg4LCAweDAwMzAsIDB4OTA4MiwgMHgwMDA0LAotCTB4MTE2OCwgMHgyMTAwLCAweDkzMWEsIDB4MDI1MCwgMHhhODkwLCAweDkwMDUsIDB4MDExMCwgMHg4MDAwLAotCTB4NjAxNiwgMHg2MjA2LCAweDYzMGEsIDB4MDEyZSwgMHgwODA0LCAweDdmODYsIDB4MDEyZSwgMHgwODA0LAotCTB4N2Y4MywgMHgwMTJlLCAweDA4MDQsIDB4N2Y4MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LAotCTB4MDAwMSwgMHgyMDYxLCAweDFhNzQsIDB4NjMwMCwgMHhkMzhjLCAweDExMjAsIDB4NjMwOCwgMHg4MzE4LAotCTB4MDIyMCwgMHg2MzBhLCAweDAxMmUsIDB4MDgwNCwgMHg3Zjk0LCAweDAxMmUsIDB4MDgwNCwgMHg3ZjgzLAotCTB4MDBiNiwgMHgwMTI2LCAweDAwYzYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsIDB4MDAwMSwgMHhhODdjLAotCTB4ZDBhYywgMHgwMTQ4LCAweDAwYzYsIDB4MjA2MSwgMHgxYTc0LCAweDYwMDAsIDB4OTA4NCwgMHhmY2ZmLAotCTB4NjAwMiwgMHgwMGNlLCAweDA0NDAsIDB4YTg4OCwgMHg5MDA1LCAweDA1ZDgsIDB4YTg4YywgMHg5MDY1LAotCTB4MDU5OCwgMHgyMDAxLCAweDE4MzQsIDB4MjAwNCwgMHg5MDA1LCAweDAxMTgsIDB4MDgwYywgMHhhZjg5LAotCTB4MDA2OCwgMHg2MDE3LCAweGY0MDAsIDB4NjA2MywgMHgwMDAwLCAweGE5N2MsIDB4ZDFhNCwgMHgwMTEwLAotCTB4YTk4MCwgMHg2MTYyLCAweDIwMDksIDB4MDA0MSwgMHgwODBjLCAweGFmZWMsIDB4YTk4OCwgMHg5MThjLAotCTB4ZmYwMCwgMHg5MTg2LCAweDIwMDAsIDB4MTEzOCwgMHgwMDI2LCAweDkwMGUsIDB4MjAxMSwgMHhmZGZmLAotCTB4MDgwYywgMHg4YWRkLCAweDAwMmUsIDB4YTg3YywgMHhkMGM0LCAweDAxNDgsIDB4MjA2MSwgMHgxYTc0LAotCTB4NjAwMCwgMHhkMDhjLCAweDExMjAsIDB4NjAwOCwgMHg4MDAwLCAweDAyMDgsIDB4NjAwYSwgMHgwMGNlLAotCTB4MDEyZSwgMHgwMGJlLCAweDA4MDQsIDB4N2Y4NiwgMHgwMGNlLCAweDAxMmUsIDB4MDBiZSwgMHgwODA0LAotCTB4N2Y4MCwgMHhhOTg0LCAweDkxODYsIDB4MDAyZSwgMHgwZDMwLCAweDkxODYsIDB4MDAyZCwgMHgwZDE4LAotCTB4OTE4NiwgMHgwMDQ1LCAweDA1MTAsIDB4OTE4NiwgMHgwMDJhLCAweDExMzAsIDB4MjAwMSwgMHgxODBjLAotCTB4MjAwYywgMHhjMTk0LCAweDIxMDIsIDB4MDhiOCwgMHg5MTg2LCAweDAwMjAsIDB4MDE1OCwgMHg5MTg2LAotCTB4MDAyOSwgMHgxZDEwLCAweGE5NzQsIDB4MDgwYywgMHg2NzgzLCAweDE5NjgsIDB4YjgwMCwgMHhjMGU0LAotCTB4YjgwMiwgMHgwODQ4LCAweGE4OGMsIDB4OTA2NSwgMHgwOWI4LCAweDYwMDcsIDB4MDAyNCwgMHgyMDAxLAotCTB4MTk4NywgMHgyMDA0LCAweDYwMWEsIDB4MDgwNCwgMHg3ZTFiLCAweGE4OGMsIDB4OTA2NSwgMHgwOTYwLAotCTB4MDBlNiwgMHhhODkwLCAweDkwNzUsIDB4MjAwMSwgMHgxODM0LCAweDIwMDQsIDB4OTAwNSwgMHgwMTUwLAotCTB4MDgwYywgMHhhZjg5LCAweDhlZmYsIDB4MDExOCwgMHgyZTYwLCAweDA4MGMsIDB4YWY4OSwgMHgwMGVlLAotCTB4MDgwNCwgMHg3ZTFiLCAweDYwMjQsIDB4YzBkYywgMHhjMGQ1LCAweDYwMjYsIDB4MmU2MCwgMHg2MDA3LAotCTB4MDAzYSwgMHhhOGEwLCAweDkwMDUsIDB4MDEzMCwgMHg2MDA3LCAweDAwM2IsIDB4YThhNCwgMHg2MDJlLAotCTB4YThhOCwgMHg2MDE2LCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NDIwLAotCTB4MDBlZSwgMHgwODA0LCAweDdlMWIsIDB4MjA2MSwgMHgxYTc0LCAweDYwMDAsIDB4ZDA4NCwgMHgwMTkwLAotCTB4ZDA4YywgMHgxOTA0LCAweDdmOTQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIwNCwgMHg4MjEwLAotCTB4MDIyMCwgMHg2MjA2LCAweDAxMmUsIDB4MDgwNCwgMHg3Zjk0LCAweDAxMmUsIDB4YTg4MywgMHgwMDE2LAotCTB4MDgwNCwgMHg3ZjhkLCAweGE4ODMsIDB4MDAwNywgMHgwODA0LCAweDdmOGQsIDB4YTg2NCwgMHg4MDA3LAotCTB4OTA4NCwgMHgwMGZmLCAweDAxMzAsIDB4ODAwMSwgMHgxMTM4LCAweDcwMDcsIDB4MDAwMSwgMHgwMDY5LAotCTB4MDAwNSwgMHgwODBjLCAweDdiMTEsIDB4MDA0MCwgMHg3MDA3LCAweDAwMDMsIDB4NzAxMiwgMHgyOTAwLAotCTB4NzAxNiwgMHg3MDFhLCAweDcwNGIsIDB4N2ViZCwgMHgwMDA1LCAweDAwYjYsIDB4MDBlNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDkwM2UsIDB4MjA2MSwgMHgxODAwLCAweDYxZDAsIDB4ODFmZiwgMHgxOTA0LAotCTB4N2YzZiwgMHg2MTMwLCAweGQxOTQsIDB4MTkwNCwgMHg3ZjY5LCAweGE4NzgsIDB4MjA3MCwgMHg5ZTgyLAotCTB4MWRkYywgMHgwYTA0LCAweDdmMzMsIDB4NjA2OCwgMHg5ZTAyLCAweDFhMDQsIDB4N2YzMywgMHg3MTIwLAotCTB4OTE4NiwgMHgwMDA2LCAweDE5MDQsIDB4N2YyNSwgMHg3MDEwLCAweDkwNWQsIDB4MDkwNCwgMHg3ZjNmLAotCTB4YjgwMCwgMHhkMGU0LCAweDE5MDQsIDB4N2Y2MywgMHgyMDYxLCAweDFhNzQsIDB4NjEwMCwgMHg5MTg0LAotCTB4MDMwMSwgMHg5MDg2LCAweDAwMDEsIDB4MTVhMCwgMHg3MDI0LCAweGQwZGMsIDB4MTkwNCwgMHg3ZjZjLAotCTB4YTg4MywgMHgwMDAwLCAweGE4MDMsIDB4MDAwMCwgMHgyOTA4LCAweDcwMTQsIDB4OTAwNSwgMHgxMTk4LAotCTB4NzExNiwgMHhhODdjLCAweGQwZjQsIDB4MTkwNCwgMHg3ZjZmLCAweDA4MGMsIDB4NTgyMCwgMHhkMDljLAotCTB4MTExOCwgMHhhODdjLCAweGMwY2MsIDB4YTg3ZSwgMHgyZTYwLCAweDA4MGMsIDB4ODljZCwgMHgwMTJlLAotCTB4MDBlZSwgMHgwMGJlLCAweDAwMDUsIDB4MjA0OCwgMHhhODAwLCAweDkwMDUsIDB4MWRlMCwgMHhhOTAyLAotCTB4MjE0OCwgMHhhODdjLCAweGQwZjQsIDB4MTkwNCwgMHg3ZjZmLCAweDAxMmUsIDB4MDBlZSwgMHgwMGJlLAotCTB4MDAwNSwgMHgwMTJlLCAweDAwZWUsIDB4YTg4MywgMHgwMDA2LCAweDAwYmUsIDB4MDgwNCwgMHg3ZjhkLAotCTB4ZDE4NCwgMHgwZGI4LCAweGQxYzQsIDB4MTE5MCwgMHgwMGEwLCAweGE5NzQsIDB4MDgwYywgMHg2NzgzLAotCTB4MTVkMCwgMHhiODAwLCAweGQwZTQsIDB4MTViOCwgMHg3MTIwLCAweDkxODYsIDB4MDAwNywgMHgxMTE4LAotCTB4YTg4MywgMHgwMDAyLCAweDA0OTAsIDB4YTg4MywgMHgwMDA4LCAweDA0NzgsIDB4YTg4MywgMHgwMDBlLAotCTB4MDQ2MCwgMHhhODgzLCAweDAwMTcsIDB4MDQ0OCwgMHhhODgzLCAweDAwMzUsIDB4MDQzMCwgMHgwODBjLAotCTB4NTgyNCwgMHhkMGZjLCAweDAxZTgsIDB4YTg3OCwgMHgyMDcwLCAweDllODIsIDB4MWRkYywgMHgwMmMwLAotCTB4NjA2OCwgMHg5ZTAyLCAweDEyYTgsIDB4NzEyMCwgMHg5MTg2LCAweDAwMDYsIDB4MTE4OCwgMHg3MDEwLAotCTB4OTA1ZCwgMHgwMTcwLCAweGI4MDAsIDB4ZDBiYywgMHgwMTU4LCAweDIwMzksIDB4MDAwMSwgMHg3MDAwLAotCTB4OTA4NiwgMHgwMDA3LCAweDE5MDQsIDB4N2VjOSwgMHg3MDAzLCAweDAwMDIsIDB4MDgwNCwgMHg3ZWM5LAotCTB4YTg4MywgMHgwMDI4LCAweDAwMTAsIDB4YTg4MywgMHgwMDI5LCAweDAxMmUsIDB4MDBlZSwgMHgwMGJlLAotCTB4MDQyMCwgMHhhODgzLCAweDAwMmEsIDB4MGNjOCwgMHhhODgzLCAweDAwNDUsIDB4MGNiMCwgMHgyZTYwLAotCTB4MjAxOSwgMHgwMDAyLCAweDYwMWIsIDB4MDAxNCwgMHgwODBjLCAweGUyOGUsIDB4MDEyZSwgMHgwMGVlLAotCTB4MDBiZSwgMHgwMDA1LCAweDIwMDksIDB4MDAzZSwgMHgwMDU4LCAweDIwMDksIDB4MDAwNCwgMHgwMDQwLAotCTB4MjAwOSwgMHgwMDA2LCAweDAwMjgsIDB4MjAwOSwgMHgwMDE2LCAweDAwMTAsIDB4MjAwOSwgMHgwMDAxLAotCTB4YTg4NCwgMHg5MDg0LCAweGZmMDAsIDB4OTEwNSwgMHhhODg2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg2ZjExLCAweDAxMmUsIDB4MDAwNSwgMHgwODBjLCAweDEwN2YsIDB4MDAwNSwgMHgwMGQ2LAotCTB4MDgwYywgMHg4OWM0LCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDcxLCAweDAwNDAsIDB4NzAyYywgMHhkMDg0LCAweDAxZDgsIDB4OTA4YywgMHgwNzgwLAotCTB4MTkwYywgMHg4MDdlLCAweGQwOWMsIDB4MTFhOCwgMHgyMDcxLCAweDE4MDAsIDB4NzBjMCwgMHg5MGVhLAotCTB4MDAyMCwgMHgwMjc4LCAweDgwMDEsIDB4NzBjMiwgMHg3MDJjLCAweDIwNDgsIDB4YTgwMCwgMHg3MDJlLAotCTB4OTAwNiwgMHhhODAyLCAweGE4MDYsIDB4MjA3MSwgMHgwMDQwLCAweDI5MDAsIDB4NzAyMiwgMHg3MDJjLAotCTB4MGMyOCwgMHgwMTJlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwMDYsIDB4OTA4NCwgMHgwNzgwLAotCTB4MTkwYywgMHg4MDdlLCAweDAwMGUsIDB4MDAwNSwgMHhhODk4LCAweDkwODQsIDB4MDAwMywgMHgwNWE4LAotCTB4MDgwYywgMHhhZWY4LCAweDA1ZDgsIDB4MjkwMCwgMHg2MDE2LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLAotCTB4OTA4NiwgMHgwMDM1LCAweDExMzgsIDB4NjAyOCwgMHhjMGZkLCAweDYwMmEsIDB4MjAwMSwgMHgxOTZjLAotCTB4MjAwNCwgMHgwMDk4LCAweGE4YTAsIDB4OTA4NCwgMHgwMGZmLCAweGE5OWMsIDB4OTE4YywgMHhmZjAwLAotCTB4OTEwNSwgMHhhOTljLCAweDkxOGMsIDB4MDBmZiwgMHgwODBjLCAweDI2YTEsIDB4MTU0MCwgMHgwMGI2LAotCTB4MDgwYywgMHg2NzgzLCAweDJiMDAsIDB4MDBiZSwgMHgxNTEwLCAweDYwMTIsIDB4NjAyMywgMHgwMDAxLAotCTB4MjAwOSwgMHgwMDQwLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAzNSwgMHgwMTEwLAotCTB4MjAwOSwgMHgwMDQxLCAweDA4MGMsIDB4YWZlYywgMHgwMDA1LCAweGE4N2IsIDB4MDEwMSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmYxMSwgMHgwMTJlLCAweDAwMDUsIDB4YTg3YiwgMHgwMDJjLAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2ZjExLCAweDAxMmUsIDB4MDAwNSwgMHhhODdiLAotCTB4MDAyOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZmMTEsIDB4MDEyZSwgMHgwODBjLAotCTB4YWY0ZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBjNiwgMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMGI2LAotCTB4NzAwNywgMHgwMDAxLCAweGFhNzQsIDB4OTI4MiwgMHgwMDA0LCAweDFhMDQsIDB4ODA2ZiwgMHhhOTdjLAotCTB4OTE4OCwgMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHhiODA0LCAweGQyODQsIDB4MDE0MCwgMHgwNWU4LAotCTB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4OTA4NCwgMHgwMDA2LCAweDExMDgsIDB4MDRiMCwgMHgyYjEwLAotCTB4MDgwYywgMHhhZWY4LCAweDExMTgsIDB4MDgwYywgMHhhZmJmLCAweDA1YTgsIDB4NjIxMiwgMHhhODc0LAotCTB4MDAwMiwgMHg4MDRkLCAweDgwNTIsIDB4ODA1NSwgMHg4MDViLCAweDIwMTksIDB4MDAwMiwgMHgwODBjLAotCTB4ZTcwMSwgMHgwMDYwLCAweDA4MGMsIDB4ZTY4YywgMHgwMDQ4LCAweDIwMTksIDB4MDAwMiwgMHhhOTgwLAotCTB4MDgwYywgMHhlNmFiLCAweDAwMTgsIDB4YTk4MCwgMHgwODBjLCAweGU2OGMsIDB4MDgwYywgMHhhZjRlLAotCTB4YTg4NywgMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmYxMSwgMHgwMTJlLAotCTB4MDBiZSwgMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHhhODg3LAotCTB4MDAwNiwgMHgwYzgwLCAweGE4ODcsIDB4MDAwMiwgMHgwYzY4LCAweGE4ODcsIDB4MDAwNSwgMHgwYzUwLAotCTB4YTg4NywgMHgwMDA0LCAweDBjMzgsIDB4YTg4NywgMHgwMDA3LCAweDBjMjAsIDB4MjA5MSwgMHg4MDAwLAotCTB4MGUwNCwgMHg4MDgwLCAweDAwMDYsIDB4MDAxNiwgMHgyMDAxLCAweDgwMDMsIDB4MDAwNiwgMHgwODA0LAotCTB4MGQ4MiwgMHgyMDAxLCAweDE4MzQsIDB4MjAwNCwgMHg5MDA1LCAweDAwMDUsIDB4MDAwNSwgMHgwMGY2LAotCTB4MjA3OSwgMHgwMzAwLCAweDIwMDEsIDB4MDIwMCwgMHgyMDBjLCAweGMxZTUsIDB4YzFkYywgMHgyMTAyLAotCTB4MjAwOSwgMHgwMjE4LCAweDIxMGMsIDB4ZDFlYywgMHgxMTIwLCAweDA4MGMsIDB4MTYzYywgMHgwMGZlLAotCTB4MDAwNSwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDIwLCAweDc4MWYsIDB4MDMwMCwgMHgwMGZlLAotCTB4MDAwNSwgMHg3ODFjLCAweGQwOGMsIDB4MDkwNCwgMHg4MTAxLCAweDY4YzAsIDB4OTBhYSwgMHgwMDA1LAotCTB4MGEwNCwgMHg4NzI5LCAweDdkNDQsIDB4N2M0MCwgMHhkNTljLCAweDE5MGMsIDB4MGQ3OSwgMHg5NTg0LAotCTB4MDBmNiwgMHgxNTA4LCAweDk0ODQsIDB4NzAwMCwgMHgwMTM4LCAweDkwOGEsIDB4MjAwMCwgMHgxMjU4LAotCTB4OTU4NCwgMHgwNzAwLCAweDgwMDcsIDB4MDRmMCwgMHg3MDAwLCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LAotCTB4ODEwMCwgMHgwZGIwLCAweDAwYjAsIDB4OTQ4NCwgMHgwZmZmLCAweDExMzAsIDB4NzAwMCwgMHg5MDg0LAotCTB4ZmYwMCwgMHg5MDg2LCAweDgxMDAsIDB4MTFjMCwgMHgwODBjLCAweGViYzAsIDB4MDgwYywgMHg4NjEwLAotCTB4NzgxNywgMHgwMTQwLCAweDAwYTgsIDB4OTU4NCwgMHgwMDc2LCAweDExMTgsIDB4MDgwYywgMHg4NjZjLAotCTB4MTljOCwgMHhkNWE0LCAweDAxNDgsIDB4MDA0NiwgMHgwMDU2LCAweDA4MGMsIDB4ODE1MSwgMHgwODBjLAotCTB4MjFhMiwgMHgwMDVlLCAweDAwNGUsIDB4MDAyMCwgMHgwODBjLCAweGViYzAsIDB4NzgxNywgMHgwMTQwLAotCTB4MDgwYywgMHg3NjlkLCAweDAxNjgsIDB4MjAwMSwgMHgwMTExLCAweDIwMDQsIDB4ZDA4YywgMHgwMTQwLAotCTB4Njg5MywgMHgwMDAwLCAweDIwMDEsIDB4MDExMCwgMHgyMDAzLCAweDAwMDgsIDB4MjAwMywgMHgwMDAwLAotCTB4MDQ4OSwgMHgwMDA1LCAweDAwMDIsIDB4ODEwZSwgMHg4NDFlLCAweDgxMGIsIDB4ODEwYiwgMHg4MTBiLAotCTB4ODEwYiwgMHg4MTBiLCAweDgxMGIsIDB4NzgxNywgMHgwMTQwLCAweDAwMDUsIDB4NzAwMCwgMHg5MDhjLAotCTB4ZmYwMCwgMHg5MTk0LCAweGYwMDAsIDB4ODEwZiwgMHg5NDg0LCAweDBmZmYsIDB4Njg5MiwgMHg5Mjg2LAotCTB4MjAwMCwgMHgxMTUwLCAweDY4MDAsIDB4OTA4NiwgMHgwMDAxLCAweDExMTgsIDB4MDgwYywgMHg1ODhhLAotCTB4MDA3MCwgMHgwODBjLCAweDgxNzEsIDB4MDA1OCwgMHg5Mjg2LCAweDMwMDAsIDB4MTExOCwgMHgwODBjLAotCTB4ODM1OCwgMHgwMDI4LCAweDkyODYsIDB4ODAwMCwgMHgxMTEwLCAweDA4MGMsIDB4ODUzZCwgMHg3ODE3LAotCTB4MDE0MCwgMHgwMDA1LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwOGMsIDB4MDE3OCwgMHgyMDAxLAotCTB4MTgwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTQ4LCAweDAwMjYsIDB4MDAzNiwgMHgyMDExLAotCTB4ODA0OCwgMHgyNTE4LCAweDA4MGMsIDB4NGMyOCwgMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMDM2LAotCTB4MDA0NiwgMHgwMDU2LCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLCAweDIwMTksIDB4ZmZmZSwgMHg3YzMwLAotCTB4MDA1MCwgMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHg3ZDQ0LAotCTB4N2M0MCwgMHgyMDE5LCAweGZmZmYsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsIDB4ZDA4YywgMHgwMTYwLAotCTB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDExMzAsIDB4MDAyNiwgMHgyMDExLAotCTB4ODA0OCwgMHgwODBjLCAweDRjMjgsIDB4MDAyZSwgMHgwMGZlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLAotCTB4MDAwNSwgMHgwMGI2LCAweDAwYzYsIDB4NzAxMCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDk2LAotCTB4MDAwMSwgMHgwMTIwLCAweDkwOTYsIDB4MDAyMywgMHgxOTA0LCAweDgzMjksIDB4OTE4NiwgMHgwMDIzLAotCTB4MTVjMCwgMHgwODBjLCAweDg1ZGIsIDB4MDkwNCwgMHg4MzI5LCAweDYxMjAsIDB4OTE4NiwgMHgwMDAxLAotCTB4MDE1MCwgMHg5MTg2LCAweDAwMDQsIDB4MDEzOCwgMHg5MTg2LCAweDAwMDgsIDB4MDEyMCwgMHg5MTg2LAotCTB4MDAwYSwgMHgxOTA0LCAweDgzMjksIDB4NzEyNCwgMHg2MTBhLCAweDcwMzAsIDB4OTA4ZSwgMHgwMjAwLAotCTB4MTEzMCwgMHgyMDA5LCAweDAwMTUsIDB4MDgwYywgMHhhZmVjLCAweDA4MDQsIDB4ODMyOSwgMHg5MDhlLAotCTB4MDIxNCwgMHgwMTE4LCAweDkwOGUsIDB4MDIxMCwgMHgxMTMwLCAweDIwMDksIDB4MDAxNSwgMHgwODBjLAotCTB4YWZlYywgMHgwODA0LCAweDgzMjksIDB4OTA4ZSwgMHgwMTAwLCAweDE5MDQsIDB4ODMyOSwgMHg3MDM0LAotCTB4OTAwNSwgMHgxOTA0LCAweDgzMjksIDB4MjAwOSwgMHgwMDE2LCAweDA4MGMsIDB4YWZlYywgMHgwODA0LAotCTB4ODMyOSwgMHg5MTg2LCAweDAwMjIsIDB4MTkwNCwgMHg4MzI5LCAweDcwMzAsIDB4OTA4ZSwgMHgwMzAwLAotCTB4MTU4MCwgMHg2OGRjLCAweGQwYTQsIDB4MDUyOCwgMHhjMGI1LCAweDY4ZGUsIDB4NzEwMCwgMHg5MThjLAotCTB4MDBmZiwgMHg2OTdlLCAweDcwMDQsIDB4Njg4MiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg3OWU2LAotCTB4NzhlYSwgMHgwMDA2LCAweDkwODQsIDB4MDBmZiwgMHgwMDE2LCAweDIwMDgsIDB4MDgwYywgMHgyNmVhLAotCTB4NzkzMiwgMHg3OTM2LCAweDAwMWUsIDB4MDAwZSwgMHgwMGZlLCAweDA4MGMsIDB4MjZhMSwgMHg2OTVlLAotCTB4NzAzYywgMHgwMGU2LCAweDIwNzEsIDB4MDE0MCwgMHg3MDg2LCAweDIwNzEsIDB4MTgwMCwgMHg3MGI2LAotCTB4MDBlZSwgMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg4MzI5LCAweDIwMDksIDB4MDAxNywgMHgwODA0LAotCTB4ODJkOSwgMHg5MDhlLCAweDA0MDAsIDB4MTE5MCwgMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg4MzI5LAotCTB4MDgwYywgMHg3NjlkLCAweDAxMjAsIDB4MjAwOSwgMHgwMDFkLCAweDA4MDQsIDB4ODJkOSwgMHg2OGRjLAotCTB4YzBhNSwgMHg2OGRlLCAweDIwMDksIDB4MDAzMCwgMHgwODA0LCAweDgyZDksIDB4OTA4ZSwgMHgwNTAwLAotCTB4MTE0MCwgMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg4MzI5LCAweDIwMDksIDB4MDAxOCwgMHgwODA0LAotCTB4ODJkOSwgMHg5MDhlLCAweDIwMTAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMTksIDB4MDgwNCwgMHg4MmQ5LAotCTB4OTA4ZSwgMHgyMTEwLCAweDExMjAsIDB4MjAwOSwgMHgwMDFhLCAweDA4MDQsIDB4ODJkOSwgMHg5MDhlLAotCTB4NTIwMCwgMHgxMTQwLCAweDcwMzQsIDB4OTAwNSwgMHgxOTA0LCAweDgzMjksIDB4MjAwOSwgMHgwMDFiLAotCTB4MDgwNCwgMHg4MmQ5LCAweDkwOGUsIDB4NTAwMCwgMHgxMTQwLCAweDcwMzQsIDB4OTAwNSwgMHgxOTA0LAotCTB4ODMyOSwgMHgyMDA5LCAweDAwMWMsIDB4MDgwNCwgMHg4MmQ5LCAweDkwOGUsIDB4MTMwMCwgMHgxMTIwLAotCTB4MjAwOSwgMHgwMDM0LCAweDA4MDQsIDB4ODJkOSwgMHg5MDhlLCAweDEyMDAsIDB4MTE0MCwgMHg3MDM0LAotCTB4OTAwNSwgMHgxOTA0LCAweDgzMjksIDB4MjAwOSwgMHgwMDI0LCAweDA4MDQsIDB4ODJkOSwgMHg5MDhjLAotCTB4ZmYwMCwgMHg5MThlLCAweDI0MDAsIDB4MTE3MCwgMHgyMDA5LCAweDAwMmQsIDB4MjAwMSwgMHgxODEwLAotCTB4MjAwNCwgMHhkMDljLCAweDA5MDQsIDB4ODJkOSwgMHgwODBjLCAweGRhYTMsIDB4MTkwNCwgMHg4MzI5LAotCTB4MDgwNCwgMHg4MmQ3LCAweDkwOGMsIDB4ZmYwMCwgMHg5MThlLCAweDUzMDAsIDB4MTEyMCwgMHgyMDA5LAotCTB4MDAyYSwgMHgwODA0LCAweDgyZDksIDB4OTA4ZSwgMHgwZjAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDIwLAotCTB4MDgwNCwgMHg4MmQ5LCAweDkwOGUsIDB4NjEwNCwgMHgxNTMwLCAweDIwMjksIDB4MDIwNSwgMHgyMDExLAotCTB4MDI2ZCwgMHg4MjA4LCAweDIyMDQsIDB4OTA4MiwgMHgwMDA0LCAweDgwMDQsIDB4ODAwNCwgMHgyMGE4LAotCTB4MjAxMSwgMHg4MDE1LCAweDIxMWMsIDB4ODEwOCwgMHgwMDQ2LCAweDIxMjQsIDB4MDgwYywgMHg0YzI4LAotCTB4MDA0ZSwgMHg4MTA4LCAweDBmMDQsIDB4ODI4ZCwgMHg5MTg2LCAweDAyODAsIDB4MWQ4OCwgMHgyNTA0LAotCTB4ODAwMCwgMHgyMDJhLCAweDIwMDksIDB4MDI2MCwgMHgwYzU4LCAweDIwMmIsIDB4MDAwMCwgMHgyMDA5LAotCTB4MDAyMywgMHgwODA0LCAweDgyZDksIDB4OTA4ZSwgMHg2MDAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDNmLAotCTB4MDgwNCwgMHg4MmQ5LCAweDkwOGUsIDB4NTQwMCwgMHgxMTM4LCAweDA4MGMsIDB4ODZkOSwgMHgxOTA0LAotCTB4ODMyOSwgMHgyMDA5LCAweDAwNDYsIDB4MDRhOCwgMHg5MDhlLCAweDU1MDAsIDB4MTE0OCwgMHgwODBjLAotCTB4ODcwMSwgMHgxMTE4LCAweDIwMDksIDB4MDA0MSwgMHgwNDYwLCAweDIwMDksIDB4MDA0MiwgMHgwNDQ4LAotCTB4OTA4ZSwgMHg3ODAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDQ1LCAweDA0MTgsIDB4OTA4ZSwgMHgxMDAwLAotCTB4MTExOCwgMHgyMDA5LCAweDAwNGUsIDB4MDBlOCwgMHg5MDhlLCAweDYzMDAsIDB4MTExOCwgMHgyMDA5LAotCTB4MDA0YSwgMHgwMGI4LCAweDkwOGMsIDB4ZmYwMCwgMHg5MThlLCAweDU2MDAsIDB4MTExOCwgMHgyMDA5LAotCTB4MDA0ZiwgMHgwMDc4LCAweDkwOGMsIDB4ZmYwMCwgMHg5MThlLCAweDU3MDAsIDB4MTExOCwgMHgyMDA5LAotCTB4MDA1MCwgMHgwMDM4LCAweDIwMDksIDB4MDAxZCwgMHg2ODM4LCAweGQwZDQsIDB4MDExMCwgMHgyMDA5LAotCTB4MDA0YywgMHgwMDE2LCAweDIwMTEsIDB4MDI2MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLAotCTB4MjZhMSwgMHgxOTA0LCAweDgzMmMsIDB4MDgwYywgMHg2NzE4LCAweDE5MDQsIDB4ODMyYywgMHhiZTEyLAotCTB4YmQxNiwgMHgwMDFlLCAweDAwMTYsIDB4MDgwYywgMHg3NjlkLCAweDAxYzAsIDB4NjhkYywgMHhkMDhjLAotCTB4MTE0OCwgMHg3MDAwLCAweDkwODQsIDB4MDBmZiwgMHgxMTg4LCAweDcwMDQsIDB4OTA4NCwgMHhmZjAwLAotCTB4MTE2OCwgMHgwMDQwLCAweDY4N2MsIDB4OTYwNiwgMHgxMTQ4LCAweDY4ODAsIDB4OTUwNiwgMHg5MDg0LAotCTB4ZmYwMCwgMHgxMTIwLCAweDk1ODQsIDB4MDBmZiwgMHhiODg2LCAweDAwODAsIDB4Yjg4NCwgMHg5MDA1LAotCTB4MTE2OCwgMHg5MTg2LCAweDAwNDYsIDB4MTE1MCwgMHg2ODdjLCAweDk2MDYsIDB4MTEzOCwgMHg2ODgwLAotCTB4OTUwNiwgMHg5MDg0LCAweGZmMDAsIDB4MTExMCwgMHgwMDFlLCAweDAwOTgsIDB4MDgwYywgMHhhZWY4LAotCTB4MDFhOCwgMHgyYjA4LCAweDYxMTIsIDB4NjAyMywgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMDFlLAotCTB4OTE4NiwgMHgwMDRjLCAweDExMTAsIDB4NjAyMywgMHgwMDBhLCAweDAwMTYsIDB4MDAxZSwgMHgwODBjLAotCTB4YWZlYywgMHgwMGNlLCAweDAwYmUsIDB4MDAwNSwgMHgwMDFlLCAweDBjZDgsIDB4MjAwMSwgMHgxODBlLAotCTB4MjAwNCwgMHhkMGVjLCAweDAxMjAsIDB4MjAxMSwgMHg4MDQ5LCAweDA4MGMsIDB4NGMyOCwgMHgwODBjLAotCTB4YWZiZiwgMHgwZDkwLCAweDJiMDgsIDB4NjExMiwgMHg2MDIzLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLAotCTB4MDAxZSwgMHgwMDE2LCAweDkxODYsIDB4MDAxNywgMHgwMTE4LCAweDkxODYsIDB4MDAzMCwgMHgxMTI4LAotCTB4NjAwNywgMHgwMDA5LCAweDYwMTcsIDB4MjkwMCwgMHgwMDIwLCAweDYwMDcsIDB4MDA1MSwgMHg2MDE3LAotCTB4MDAwMCwgMHg2MDJmLCAweDAwMDksIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTQyNywgMHgwOGEwLAotCTB4MDgwYywgMHg4NzQ4LCAweDExNTgsIDB4MDgwYywgMHgzNDMyLCAweDExNDAsIDB4NzAxMCwgMHg5MDg0LAotCTB4ZmYwMCwgMHg4MDA3LCAweDkwOGUsIDB4MDAwOCwgMHgxMTA4LCAweDAwMDksIDB4MDAwNSwgMHgwMGI2LAotCTB4MDBjNiwgMHgwMDQ2LCAweDcwMDAsIDB4OTA4YywgMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwgMHgwMDMzLAotCTB4MTFlOCwgMHgwODBjLCAweDg1ZGIsIDB4MDkwNCwgMHg4M2I2LCAweDcxMjQsIDB4NjEwYSwgMHg3MDMwLAotCTB4OTA4ZSwgMHgwMjAwLCAweDExNDAsIDB4NzAzNCwgMHg5MDA1LCAweDE1YzAsIDB4MjAwOSwgMHgwMDE1LAotCTB4MDgwYywgMHhhZmVjLCAweDA0OTgsIDB4OTA4ZSwgMHgwMTAwLCAweDE1ODAsIDB4NzAzNCwgMHg5MDA1LAotCTB4MTU2OCwgMHgyMDA5LCAweDAwMTYsIDB4MDgwYywgMHhhZmVjLCAweDA0NDAsIDB4OTE4NiwgMHgwMDMyLAotCTB4MTUyOCwgMHg3MDMwLCAweDkwOGUsIDB4MTQwMCwgMHgxNTA4LCAweDIwMDksIDB4MDAzOCwgMHgwMDE2LAotCTB4MjAxMSwgMHgwMjYzLCAweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDA4MGMsIDB4MjZhMSwgMHgxMWE4LAotCTB4MDgwYywgMHg2NzE4LCAweDExOTAsIDB4YmUxMiwgMHhiZDE2LCAweDA4MGMsIDB4YWVmOCwgMHgwMTY4LAotCTB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDBjZSwgMHg2MDIzLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLAotCTB4MDAxZSwgMHgwODBjLCAweGFmZWMsIDB4MDAxMCwgMHgwMGNlLCAweDAwMWUsIDB4MDA0ZSwgMHgwMGNlLAotCTB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA0NiwgMHgwMGU2LCAweDAwZDYsIDB4MjAyOCwgMHgyMTMwLAotCTB4OTY5NiwgMHgwMGZmLCAweDExYjgsIDB4OTU5MiwgMHhmZmZjLCAweDAyYTAsIDB4OTU5NiwgMHhmZmZkLAotCTB4MTEyMCwgMHgyMDA5LCAweDAwN2YsIDB4MDgwNCwgMHg4NDE4LCAweDk1OTYsIDB4ZmZmZSwgMHgxMTIwLAotCTB4MjAwOSwgMHgwMDdlLCAweDA4MDQsIDB4ODQxOCwgMHg5NTk2LCAweGZmZmMsIDB4MTExOCwgMHgyMDA5LAotCTB4MDA4MCwgMHgwNGYwLCAweDIwMTEsIDB4MDAwMCwgMHgyMDE5LCAweDE4MzcsIDB4MjMxYywgMHhkM2FjLAotCTB4MDEzMCwgMHg5MDI2LCAweDIwYTksIDB4MDgwMCwgMHgyMDcxLCAweDEwMDAsIDB4MDAzMCwgMHgyMDIxLAotCTB4MDA4MSwgMHgyMGE5LCAweDA3N2YsIDB4MjA3MSwgMHgxMDgxLCAweDJlMWMsIDB4OTNkZCwgMHgwMDAwLAotCTB4MTE0MCwgMHg4MmZmLCAweDExZDAsIDB4OTQ5NiwgMHgwMGZmLCAweDAxYjgsIDB4MjQxMCwgMHhjMmZkLAotCTB4MDBhMCwgMHhiZjEwLCAweDI2MDAsIDB4OTcwNiwgMHhiODE0LCAweDExMjAsIDB4OTU0NiwgMHgxMTEwLAotCTB4MjQwOCwgMHgwMGIwLCAweDk3NDUsIDB4MTE0OCwgMHg5NGM2LCAweDAwN2UsIDB4MDEzMCwgMHg5NGM2LAotCTB4MDA3ZiwgMHgwMTE4LCAweDk0YzYsIDB4MDA4MCwgMHgxZDIwLCAweDg0MjAsIDB4OGU3MCwgMHgxZjA0LAotCTB4ODNlZCwgMHg4MmZmLCAweDExMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMTgsIDB4YzJmYywgMHgyMjA4LAotCTB4OTAwNiwgMHgwMGRlLCAweDAwZWUsIDB4MDA0ZSwgMHgwMGJlLCAweDAwMDUsIDB4MjAwMSwgMHgxODM3LAotCTB4MjAwYywgMHg5MTg0LCAweDAwODAsIDB4MDExMCwgMHhkMThjLCAweDAxMzgsIDB4NzAwMCwgMHg5MDhjLAotCTB4ZmYwMCwgMHg4MTBmLCAweDkxODQsIDB4MDAwZiwgMHgwMDFhLCAweDc4MTcsIDB4MDE0MCwgMHgwMDA1LAotCTB4ODQ0MCwgMHg4NDQwLCAweDg0NDAsIDB4ODVlZCwgMHg4NDQwLCAweDg0NDMsIDB4ODQ2OCwgMHg4NGYxLAotCTB4ODQ0MCwgMHg4NDQwLCAweDg0NDAsIDB4ODQ0MCwgMHg4NDQwLCAweDg0NDAsIDB4ODQ0MCwgMHg4NDQwLAotCTB4NzgxNywgMHgwMTQwLCAweDAwMDUsIDB4MDBiNiwgMHg3MTEwLCAweGQxYmMsIDB4MDFlOCwgMHg3MTIwLAotCTB4MjE2MCwgMHg5YzhjLCAweDAwMDMsIDB4MTFjMCwgMHg5YzhhLCAweDFkZGMsIDB4MDJhOCwgMHg2ODY4LAotCTB4OWMwMiwgMHgxMjkwLCAweDcwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDYxMTAsIDB4MjE1OCwgMHhiOTEwLAotCTB4OTEwNiwgMHgxMTUwLCAweDcwMGMsIDB4YjkxNCwgMHg5MTA2LCAweDExMzAsIDB4NzEyNCwgMHg2MTBhLAotCTB4MjAwOSwgMHgwMDQ2LCAweDA4MGMsIDB4YWZlYywgMHg3ODE3LCAweDAxNDAsIDB4MDBiZSwgMHgwMDA1LAotCTB4MDBiNiwgMHgwMGM2LCAweDk0ODQsIDB4MGZmZiwgMHgwOTA0LCAweDg0Y2QsIDB4NzExMCwgMHhkMWJjLAotCTB4MTkwNCwgMHg4NGNkLCAweDcxMDgsIDB4NzAwYywgMHgyMDI4LCAweDkxOGMsIDB4MDBmZiwgMHgyMTMwLAotCTB4OTA5NCwgMHhmZjAwLCAweDE1YzgsIDB4ODFmZiwgMHgxNWI4LCAweDkwODAsIDB4MzQ3NCwgMHgyMDBkLAotCTB4OTE4YywgMHhmZjAwLCAweDgxMGYsIDB4MjAwMSwgMHgwMDgwLCAweDkxMDYsIDB4MDkwNCwgMHg4NGNkLAotCTB4OTE4MiwgMHgwODAxLCAweDFhMDQsIDB4ODRjZCwgMHg5MTkwLCAweDEwMDAsIDB4MjIwNCwgMHg5MDVkLAotCTB4MDVlMCwgMHhiZTEyLCAweGJkMTYsIDB4YjgwMCwgMHhkMGVjLCAweDE1YjgsIDB4YmEwNCwgMHg5Mjk0LAotCTB4ZmYwMCwgMHg5Mjg2LCAweDA2MDAsIDB4MTE5MCwgMHgwODBjLCAweGFlZjgsIDB4MDU5OCwgMHgyYjA4LAotCTB4NzAyOCwgMHg2MDRlLCAweDcwMmMsIDB4NjA1MiwgMHg2MTEyLCAweDYwMjMsIDB4MDAwNiwgMHg3MTIwLAotCTB4NjEwYSwgMHg3MTMwLCAweDYxNWUsIDB4MDgwYywgMHhkZDFmLCAweDAwZjgsIDB4MDgwYywgMHg2YmNkLAotCTB4MTEzOCwgMHhiODA3LCAweDA2MDYsIDB4MGM0MCwgMHgxOTBjLCAweDgzYmEsIDB4MTFiMCwgMHgwODgwLAotCTB4MDgwYywgMHhhZWY4LCAweDJiMDgsIDB4MDE4OCwgMHg2MTEyLCAweDYwMjMsIDB4MDAwNCwgMHg3MTIwLAotCTB4NjEwYSwgMHg5Mjg2LCAweDA0MDAsIDB4MTExOCwgMHg2MDA3LCAweDAwMDUsIDB4MDAxMCwgMHg2MDA3LAotCTB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NDI3LCAweDc4MTcsIDB4MDE0MCwgMHgwMGNlLAotCTB4MDBiZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZWMsIDB4MDEyMCwgMHgyMDExLAotCTB4ODA0OSwgMHgwODBjLCAweDRjMjgsIDB4MDgwYywgMHhhZmJmLCAweDBkNzgsIDB4MmIwOCwgMHg2MTEyLAotCTB4NjAyMywgMHgwMDA2LCAweDcxMjAsIDB4NjEwYSwgMHg3MTMwLCAweDYxNWUsIDB4NjAxNywgMHhmMzAwLAotCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgyMDA5LCAweGEwMjIsIDB4MDgwYywgMHg5NDIwLAotCTB4MDhlMCwgMHgwMGI2LCAweDcxMTAsIDB4ZDFiYywgMHgwNWQwLCAweDcwMjAsIDB4MjA2MCwgMHg5Yzg0LAotCTB4MDAwMywgMHgxNWE4LCAweDljODIsIDB4MWRkYywgMHgwNjkwLCAweDY4NjgsIDB4OWMwMiwgMHgxNjc4LAotCTB4OTQ4NCwgMHgwZmZmLCAweDkwODIsIDB4MDAwYywgMHgwNjUwLCAweDcwMDgsIDB4OTA4NCwgMHgwMGZmLAotCTB4NjExMCwgMHgyMTU4LCAweGI5MTAsIDB4OTEwNiwgMHgxNTEwLCAweDcwMGMsIDB4YjkxNCwgMHg5MTA2LAotCTB4MTFmMCwgMHg3MTI0LCAweDYxMGEsIDB4NjAxYywgMHhkMGZjLCAweDExYzgsIDB4MjAwMSwgMHgwMjcxLAotCTB4MjAwNCwgMHg5MDA1LCAweDExODAsIDB4OTQ4NCwgMHgwZmZmLCAweDkwODIsIDB4MDAwYywgMHgwMTU4LAotCTB4MDA2NiwgMHgyMDMxLCAweDAxMDAsIDB4YTAwMSwgMHhhMDAxLCAweDg2MzEsIDB4MWRlMCwgMHgwMDZlLAotCTB4NjAxYywgMHhkMGZjLCAweDExMjAsIDB4MjAwOSwgMHgwMDQ1LCAweDA4MGMsIDB4YWZlYywgMHg3ODE3LAotCTB4MDE0MCwgMHgwMGJlLCAweDAwMDUsIDB4NjEyMCwgMHg5MTg2LCAweDAwMDIsIDB4MDEyOCwgMHg5MTg2LAotCTB4MDAwNSwgMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4ODc0OCwgMHgxMTgwLAotCTB4MDgwYywgMHgzNDMyLCAweDExNjgsIDB4NzAxMCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDg2LAotCTB4MDAwMCwgMHgxMTMwLCAweDkxODQsIDB4MDAwZiwgMHg5MDhhLCAweDAwMDYsIDB4MTIwOCwgMHgwMDBiLAotCTB4MDAwNSwgMHg4NTU3LCAweDg1NTgsIDB4ODU1NywgMHg4NTU3LCAweDg1YmQsIDB4ODVjYywgMHgwMDA1LAotCTB4MDBiNiwgMHg3MDBjLCAweDcxMDgsIDB4MDgwYywgMHgyNmExLCAweDE5MDQsIDB4ODViYiwgMHgwODBjLAotCTB4NjcxOCwgMHgxOTA0LCAweDg1YmIsIDB4YmUxMiwgMHhiZDE2LCAweDcxMTAsIDB4ZDFiYywgMHgwNTQwLAotCTB4NzAyYywgMHhkMDg0LCAweDExMjAsIDB4YjgwMCwgMHhkMGJjLCAweDE5MDQsIDB4ODViYiwgMHgwODBjLAotCTB4NmJjZCwgMHgwMTQ4LCAweDkwODYsIDB4MDAwNCwgMHgwMTMwLCAweDA4MGMsIDB4NmJkNSwgMHgwMTE4LAotCTB4OTA4NiwgMHgwMDA0LCAweDE1ODgsIDB4MDBjNiwgMHgwODBjLCAweDg1ZGIsIDB4MDBjZSwgMHgwNWQ4LAotCTB4MDgwYywgMHhhZWY4LCAweDJiMDgsIDB4MDViOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDBjZSwgMHg2MDIzLAotCTB4MDAwMiwgMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwgMHgwMDg4LCAweDA4MGMsIDB4YWZlYywgMHgwNDU4LAotCTB4MDgwYywgMHg2YmNkLCAweDAxNDgsIDB4OTA4NiwgMHgwMDA0LCAweDAxMzAsIDB4MDgwYywgMHg2YmQ1LAotCTB4MDExOCwgMHg5MDg2LCAweDAwMDQsIDB4MTE4MCwgMHgwODBjLCAweGFlZjgsIDB4MmIwOCwgMHgwMWQ4LAotCTB4NjExMiwgMHgwODBjLCAweGQwY2UsIDB4NjAyMywgMHgwMDA1LCAweDcxMjAsIDB4NjEwYSwgMHgyMDA5LAotCTB4MDA4OCwgMHgwODBjLCAweGFmZWMsIDB4MDA3OCwgMHgwODBjLCAweGFlZjgsIDB4MmIwOCwgMHgwMTU4LAotCTB4NjExMiwgMHgwODBjLCAweGQwY2UsIDB4NjAyMywgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgyMDA5LAotCTB4MDAwMSwgMHgwODBjLCAweGFmZWMsIDB4MDBiZSwgMHgwMDA1LCAweDcxMTAsIDB4ZDFiYywgMHgwMTU4LAotCTB4MDBkMSwgMHgwMTQ4LCAweDA4MGMsIDB4ODUzMywgMHgxMTMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LAotCTB4MDA4OSwgMHgwODBjLCAweGFmZWMsIDB4MDAwNSwgMHg3MTEwLCAweGQxYmMsIDB4MDE1OCwgMHgwMDU5LAotCTB4MDE0OCwgMHgwODBjLCAweDg1MzMsIDB4MTEzMCwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDhhLAotCTB4MDgwYywgMHhhZmVjLCAweDAwMDUsIDB4NzAyMCwgMHgyMDYwLCAweDljODQsIDB4MDAwMywgMHgxMTU4LAotCTB4OWM4MiwgMHgxZGRjLCAweDAyNDAsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxMjE4LAotCTB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4OTAwNiwgMHgwY2U4LCAweDAwYjYsIDB4NzExMCwgMHhkMWJjLAotCTB4MTFkOCwgMHg3MDI0LCAweDIwNjAsIDB4OWM4NCwgMHgwMDAzLCAweDExYjAsIDB4OWM4MiwgMHgxZGRjLAotCTB4MDI5OCwgMHg2ODY4LCAweDljMDIsIDB4MTI4MCwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MTEwLAotCTB4MjE1OCwgMHhiOTEwLCAweDkxMDYsIDB4MTE0MCwgMHg3MDBjLCAweGI5MTQsIDB4OTEwNiwgMHgxMTIwLAotCTB4MjAwOSwgMHgwMDUxLCAweDA4MGMsIDB4YWZlYywgMHg3ODE3LCAweDAxNDAsIDB4MDBiZSwgMHgwMDA1LAotCTB4MjAzMSwgMHgwMTA1LCAweDAwNjksIDB4MDAwNSwgMHgyMDMxLCAweDAyMDYsIDB4MDA0OSwgMHgwMDA1LAotCTB4MjAzMSwgMHgwMjA3LCAweDAwMjksIDB4MDAwNSwgMHgyMDMxLCAweDAyMTMsIDB4MDAwOSwgMHgwMDA1LAotCTB4MDBjNiwgMHgwMDk2LCAweDAwZjYsIDB4NzAwMCwgMHg5MDg0LCAweGYwMDAsIDB4OTA4NiwgMHhjMDAwLAotCTB4MDVjMCwgMHgwODBjLCAweGFlZjgsIDB4MDVhOCwgMHgwMDY2LCAweDAwYzYsIDB4MDA0NiwgMHgyMDExLAotCTB4MDI2MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2YTEsIDB4MTU5MCwgMHgwODBjLAotCTB4NjcxOCwgMHgxNTc4LCAweGJlMTIsIDB4YmQxNiwgMHgyYjAwLCAweDAwNGUsIDB4MDBjZSwgMHg2MDEyLAotCTB4MDgwYywgMHhkMGNlLCAweDA4MGMsIDB4MTA0ZCwgMHgwNTAwLCAweDI5MDAsIDB4NjA2MiwgMHg5MDA2LAotCTB4YTgwMiwgMHhhODY2LCAweGFjNmEsIDB4YTg1YywgMHg5MGY4LCAweDAwMWIsIDB4MjBhOSwgMHgwMDBlLAotCTB4YTg2MCwgMHgyMGU4LCAweDIwZTEsIDB4MDAwMCwgMHgyZmEwLCAweDJlOTgsIDB4NDAwMywgMHgwMDZlLAotCTB4NjYxNiwgMHg2MDA3LCAweDAwM2UsIDB4NjAyMywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLAotCTB4OTQyNywgMHgwMGZlLCAweDAwOWUsIDB4MDBjZSwgMHgwMDA1LCAweDA4MGMsIDB4YWY0ZSwgMHgwMDZlLAotCTB4MGNjMCwgMHgwMDRlLCAweDAwY2UsIDB4MGNjOCwgMHgwMGM2LCAweDcwMDAsIDB4OTA4YywgMHhmZjAwLAotCTB4OTE4NCwgMHhmMDAwLCAweDgxMGYsIDB4OTA4NiwgMHgyMDAwLCAweDE5MDQsIDB4ODZjMywgMHg5MTg2LAotCTB4MDAyMiwgMHgxNWYwLCAweDIwMDEsIDB4MDExMSwgMHgyMDA0LCAweDkwMDUsIDB4MTkwNCwgMHg4NmM1LAotCTB4NzAzMCwgMHg5MDhlLCAweDA0MDAsIDB4MDkwNCwgMHg4NmM1LCAweDkwOGUsIDB4NjAwMCwgMHgwNWU4LAotCTB4OTA4ZSwgMHg1NDAwLCAweDA1ZDAsIDB4OTA4ZSwgMHgwMzAwLCAweDExZDgsIDB4MjAwOSwgMHgxODM3LAotCTB4MjEwYywgMHhkMThjLCAweDE1OTAsIDB4ZDFhNCwgMHgxNTgwLCAweDA4MGMsIDB4NmI4YiwgMHgwNTg4LAotCTB4NjhiMCwgMHg5MDg0LCAweDAwZmYsIDB4NzEwMCwgMHg5MThjLCAweDAwZmYsIDB4OTEwNiwgMHgxNTE4LAotCTB4Njg4MCwgMHg2OWIwLCAweDkxOGMsIDB4ZmYwMCwgMHg5MTA1LCAweDcxMDQsIDB4OTEwNiwgMHgxMWQ4LAotCTB4MDBlMCwgMHgyMDA5LCAweDAxMDMsIDB4MjEwYywgMHhkMWI0LCAweDExYTgsIDB4OTA4ZSwgMHg1MjAwLAotCTB4MDllOCwgMHg5MDhlLCAweDA1MDAsIDB4MDlkMCwgMHg5MDhlLCAweDUwMDAsIDB4MDliOCwgMHgwMDU4LAotCTB4OTE4NiwgMHgwMDIzLCAweDExNDAsIDB4MDgwYywgMHg4NWRiLCAweDAxMjgsIDB4NjAwNCwgMHg5MDg2LAotCTB4MDAwMiwgMHgwMTE4LCAweDAwMDAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLAotCTB4MDAwNSwgMHg3MDMwLCAweDkwOGUsIDB4MDMwMCwgMHgwMTE4LCAweDkwOGUsIDB4NTIwMCwgMHgxZDk4LAotCTB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4OTA4NCwgMHgwMDA5LCAweDkwODYsIDB4MDAwOCwgMHgwZDY4LAotCTB4MGM1MCwgMHgwMTU2LCAweDAwNDYsIDB4MDAxNiwgMHgwMDM2LCAweDcwMzgsIDB4MjAyMCwgMHg4NDI3LAotCTB4OTRhNCwgMHgwMDA3LCAweGQ0ODQsIDB4MDE0OCwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHgxODA1LAotCTB4MjAxMSwgMHgwMjdhLCAweDA4MGMsIDB4YmY0MCwgMHgxMTc4LCAweGQ0OGMsIDB4MDE0OCwgMHgyMGE5LAotCTB4MDAwNCwgMHgyMDE5LCAweDE4MDEsIDB4MjAxMSwgMHgwMjdlLCAweDA4MGMsIDB4YmY0MCwgMHgxMTIwLAotCTB4ZDQ5NCwgMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDNlLCAweDAwMWUsIDB4MDA0ZSwgMHgwMTVlLAotCTB4MDAwNSwgMHgwMTU2LCAweDAwNDYsIDB4MDAxNiwgMHgwMDM2LCAweDcwMzgsIDB4MjAyMCwgMHg4NDI3LAotCTB4OTRhNCwgMHgwMDA3LCAweGQ0ODQsIDB4MDE0OCwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHgxODA1LAotCTB4MjAxMSwgMHgwMjcyLCAweDA4MGMsIDB4YmY0MCwgMHgxMTc4LCAweGQ0OGMsIDB4MDE0OCwgMHgyMGE5LAotCTB4MDAwNCwgMHgyMDE5LCAweDE4MDEsIDB4MjAxMSwgMHgwMjc2LCAweDA4MGMsIDB4YmY0MCwgMHgxMTIwLAotCTB4ZDQ5NCwgMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDNlLCAweDAwMWUsIDB4MDA0ZSwgMHgwMTVlLAotCTB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHg3ODAwLCAweGMwZTUsIDB4YzBjYywgMHg3ODAyLAotCTB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDc4MzQsIDB4ZDA4NCwgMHgxMTMwLAotCTB4MjA3OSwgMHgwMjAwLCAweDc4MDAsIDB4OTA4NSwgMHgxMjAwLCAweDc4MDIsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzAzNCwgMHhjMDg0LCAweDcwMzYsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDAxNiwgMHgyMDAxLCAweDE4MzcsIDB4MjAwYywgMHg5MTg0LCAweDAwODAsIDB4MDExOCwgMHhkMThjLAotCTB4MDExOCwgMHg5MDA2LCAweDAwMWUsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsIDB4MGNkOCwgMHgyMDcxLAotCTB4MWEwNSwgMHg3MDAzLCAweDAwMDMsIDB4NzAwZiwgMHgwMzYxLCAweDkwMDYsIDB4NzAxYSwgMHg3MDdhLAotCTB4NzAxMiwgMHg3MDE3LCAweDFkZGMsIDB4NzAwNywgMHgwMDAwLCAweDcwMjYsIDB4NzAyYiwgMHhhMGJiLAotCTB4NzAzMiwgMHg3MDM3LCAweGExMzgsIDB4NzA0NywgMHhmZmZmLCAweDcwNGEsIDB4NzA0ZiwgMHg1NmE0LAotCTB4NzA1MiwgMHg3MDYzLCAweDg4ZmYsIDB4MDgwYywgMHgxMDY2LCAweDA5MGMsIDB4MGQ3OSwgMHgyOTAwLAotCTB4NzA0MiwgMHhhODY3LCAweDAwMDMsIDB4YTg2ZiwgMHgwMTAwLCAweGE4YWIsIDB4ZGNiMCwgMHgwMDA1LAotCTB4MjA3MSwgMHgxYTA1LCAweDFkMDQsIDB4ODgxYiwgMHgyMDkxLCAweDYwMDAsIDB4NzAwYywgMHg4MDAxLAotCTB4NzAwZSwgMHgxNTkwLCAweDIwMDEsIDB4MDEzYywgMHgyMDA0LCAweDkwMDUsIDB4MTkwYywgMHg4OWE5LAotCTB4MjAwMSwgMHgxODY5LCAweDIwMDQsIDB4ZDBjNCwgMHgwMTU4LCAweDNhMDAsIDB4ZDA4YywgMHgxMTQwLAotCTB4MjBkMSwgMHgwMDAwLCAweDIwZDEsIDB4MDAwMSwgMHgyMGQxLCAweDAwMDAsIDB4MDgwYywgMHgwZDc5LAotCTB4NzAwZiwgMHgwMzYxLCAweDcwMDcsIDB4MDAwMSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LAotCTB4MTgwMCwgMHg2OWVjLCAweGQxZTQsIDB4MTEzOCwgMHhkMWRjLCAweDExMTgsIDB4MDgwYywgMHg4OTZkLAotCTB4MDAxMCwgMHgwODBjLCAweDg5NDQsIDB4NzA0OCwgMHg5MDBkLCAweDAxNDgsIDB4ODEwOSwgMHg3MTRhLAotCTB4MTEzMCwgMHg3MDRjLCAweDA4MGYsIDB4MDAxOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDI0LAotCTB4OTAwZCwgMHgwMTg4LCAweDcwMjAsIDB4ODAwMSwgMHg3MDIyLCAweDExNjgsIDB4NzAyMywgMHgwMDA5LAotCTB4ODEwOSwgMHg3MTI2LCAweDkxODYsIDB4MDNlOCwgMHgxMTEwLCAweDcwMjgsIDB4MDgwZiwgMHg4MWZmLAotCTB4MTExMCwgMHg3MDI4LCAweDA4MGYsIDB4NzAzMCwgMHg5MDBkLCAweDAxODAsIDB4NzAyYywgMHg4MDAxLAotCTB4NzAyZSwgMHgxMTYwLCAweDcwMmYsIDB4MDAwOSwgMHg4MTA5LCAweDcxMzIsIDB4MDEyOCwgMHg5MTg0LAotCTB4MDA3ZiwgMHgwOTBjLCAweGExZTYsIDB4MDAxMCwgMHg3MDM0LCAweDA4MGYsIDB4NzA0NCwgMHg5MDA1LAotCTB4MDExOCwgMHgwMzEwLCAweDgwMDEsIDB4NzA0NiwgMHg3MDU0LCAweDkwMGQsIDB4MDE2OCwgMHg3MDUwLAotCTB4ODAwMSwgMHg3MDUyLCAweDExNDgsIDB4NzA1MywgMHgwMDA5LCAweDgxMDksIDB4NzE1NiwgMHgxMTIwLAotCTB4NzE1OCwgMHg3MTU2LCAweDcwNjAsIDB4MDgwZiwgMHg3MDE4LCAweDkwMGQsIDB4MDFkOCwgMHgwMDE2LAotCTB4NzA3OCwgMHg5MDBkLCAweDAxNTgsIDB4NzA3NCwgMHg4MDAxLCAweDcwNzYsIDB4MTEzOCwgMHg3MDc3LAotCTB4MDAwOSwgMHg4MTA5LCAweDcxN2EsIDB4MTExMCwgMHg3MDdjLCAweDA4MGYsIDB4MDAxZSwgMHg3MDA4LAotCTB4ODAwMSwgMHg3MDBhLCAweDExMzgsIDB4NzAwYiwgMHgwMDA5LCAweDgxMDksIDB4NzExYSwgMHgxMTEwLAotCTB4NzAxYywgMHgwODBmLCAweDAxMmUsIDB4NzAwNCwgMHgwMDAyLCAweDg4NDMsIDB4ODg0NCwgMHg4ODZlLAotCTB4MDBlNiwgMHgyMDcxLCAweDFhMDUsIDB4NzAxOCwgMHg5MDA1LCAweDExMjAsIDB4NzExYSwgMHg3MjFlLAotCTB4NzAwYiwgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwMDYsIDB4MjA3MSwgMHgxYTA1LAotCTB4NzAxYywgMHg5MjA2LCAweDExMjAsIDB4NzAxYSwgMHg3MDFlLCAweDcwN2EsIDB4NzA3ZSwgMHgwMDBlLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxYTA1LCAweGI4ODgsIDB4OTEwMiwgMHgwMjA4LAotCTB4Yjk4YSwgMHgwMGVlLCAweDAwMDUsIDB4MDAwNSwgMHgwMGI2LCAweDIwMzEsIDB4MDAxMCwgMHg3MTEwLAotCTB4MDgwYywgMHg2NzgzLCAweDExYTgsIDB4Yjg4OCwgMHg4MDAxLCAweDAyOTAsIDB4Yjg4YSwgMHgxMTgwLAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDA2NiwgMHhiOGQwLCAweDkwMDUsIDB4MDEzOCwgMHgwMDI2LAotCTB4YmEzYywgMHgwMDE2LCAweDA4MGMsIDB4NjhhZSwgMHgwMDFlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMTJlLAotCTB4ODEwOCwgMHg5MTgyLCAweDA4MDAsIDB4MTIyMCwgMHg4NjMxLCAweDAxMjgsIDB4NzExMiwgMHgwYzAwLAotCTB4OTAwZSwgMHg3MDA3LCAweDAwMDIsIDB4NzExMiwgMHgwMGJlLCAweDAwMDUsIDB4MjAzMSwgMHgwMDEwLAotCTB4NzAxNCwgMHgyMDYwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwNDgsIDB4OTAwNSwgMHgwMTI4LAotCTB4ODAwMSwgMHg2MDRhLCAweDExMTAsIDB4MDgwYywgMHhjZjRmLCAweDYwMTgsIDB4OTAwNSwgMHgwOTA0LAotCTB4ODhjNiwgMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHg3OTE4LCAweGQxYjQsIDB4MTkwNCwgMHg4OGQ5LAotCTB4NzgxYiwgMHgyMDIwLCAweGEwMDEsIDB4NzkxOCwgMHhkMWI0LCAweDAxMjAsIDB4NzgxYiwgMHgyMDAwLAotCTB4MDgwNCwgMHg4OGQ5LCAweDgwMDEsIDB4NjAxYSwgMHgwMTA2LCAweDc4MWIsIDB4MjAwMCwgMHhhMDAxLAotCTB4NzkxOCwgMHhkMWFjLCAweDFkZDAsIDB4MDEwZSwgMHgwMGZlLCAweDE1NDAsIDB4NjEyMCwgMHg5MTg2LAotCTB4MDAwMywgMHgwMTQ4LCAweDkxODYsIDB4MDAwNiwgMHgwMTMwLCAweDkxODYsIDB4MDAwOSwgMHgxMWUwLAotCTB4NjExYywgMHhkMWM0LCAweDExMDAsIDB4MDgwYywgMHhjYzMzLCAweDAxYjAsIDB4NjAxNCwgMHgyMDQ4LAotCTB4YTg4NCwgMHg5MDhhLCAweDE5OWEsIDB4MDI4MCwgMHg5MDgyLCAweDE5OTksIDB4YTg4NiwgMHg5MDhhLAotCTB4MTk5YSwgMHgwMjEwLCAweDIwMDEsIDB4MTk5OSwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHg5MTA4LAotCTB4NjExYSwgMHgwODBjLCAweGQzODksIDB4MDExMCwgMHgwODBjLCAweGM5MTAsIDB4MDEyZSwgMHg5Yzg4LAotCTB4MDAxYywgMHg3MTE2LCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDkxMDIsIDB4MTIyOCwgMHg4NjMxLAotCTB4MDEzOCwgMHgyMTYwLCAweDA4MDQsIDB4ODg3MiwgMHg3MDE3LCAweDFkZGMsIDB4NzAwNywgMHgwMDAwLAotCTB4MDAwNSwgMHgwMGZlLCAweDBjNTgsIDB4MDBlNiwgMHgyMDcxLCAweDFhMDUsIDB4NzAyNywgMHgwN2QwLAotCTB4NzAyMywgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDFhMGUsIDB4MjAwMywgMHgwMDAwLAotCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MWEwNSwgMHg3MTMyLCAweDcwMmYsIDB4MDAwOSwgMHgwMGVlLAotCTB4MDAwNSwgMHgyMDExLCAweDFhMTEsIDB4MjAxMywgMHgwMDAwLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAotCTB4MWEwNSwgMHg3MTFhLCAweDcyMWUsIDB4NzAwYiwgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgwMDg2LAotCTB4MDAyNiwgMHg3MDVjLCAweDgwMDAsIDB4NzA1ZSwgMHgyMDAxLCAweDFhMTUsIDB4MjA0NCwgMHhhMDZjLAotCTB4OTA4NiwgMHgwMDAwLCAweDAxNTAsIDB4NzA3MCwgMHhhMDlhLCAweDcwNmMsIDB4YTA5NiwgMHg3MDY4LAotCTB4YTA5MiwgMHg3MDY0LCAweGEwOGUsIDB4MDgwYywgMHgxMTQyLCAweDAwMmUsIDB4MDA4ZSwgMHgwMDA1LAotCTB4MDAwNiwgMHgwMDE2LCAweDAwOTYsIDB4MDBhNiwgMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAotCTB4MDBmNiwgMHgwMTU2LCAweDA4MGMsIDB4ODc4MCwgMHgwMTVlLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLAotCTB4MDBjZSwgMHgwMGJlLCAweDAwYWUsIDB4MDA5ZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LAotCTB4MjA3MSwgMHgxYTA1LCAweDcxN2EsIDB4NzI3ZSwgMHg3MDc3LCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMDA2LCAweDIwNzEsIDB4MWEwNSwgMHg3MDdjLCAweDkyMDYsIDB4MTExMCwgMHg3MDdhLAotCTB4NzA3ZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDY5LCAweDE4MDAsIDB4NjllYywgMHhkMWU0LAotCTB4MTUxOCwgMHgwMDI2LCAweGQxZWMsIDB4MDE0MCwgMHg2YTU0LCAweDY4NzQsIDB4OTIwMiwgMHgwMjg4LAotCTB4ODExNywgMHg5Mjk0LCAweDAwYzEsIDB4MDA4OCwgMHg5MTg0LCAweDAwMDcsIDB4MDFhMCwgMHg4MTA5LAotCTB4OTE4NCwgMHgwMDA3LCAweDAxMTAsIDB4NjllZSwgMHgwMDcwLCAweDgxMDcsIDB4OTA4NCwgMHgwMDA3LAotCTB4OTEwZCwgMHg4MTA3LCAweDkxMDYsIDB4OTA5NCwgMHgwMGMxLCAweDkxODQsIDB4ZmYzZSwgMHg5MjA1LAotCTB4NjhlZSwgMHgwODBjLCAweDBmMTgsIDB4MDAyZSwgMHgwMDA1LCAweDY5ZTgsIDB4OTE4NCwgMHgwMDNmLAotCTB4MDViOCwgMHg4MTA5LCAweDkxODQsIDB4MDAzZiwgMHgwMWE4LCAweDZhNTQsIDB4Njg3NCwgMHg5MjAyLAotCTB4MDIyMCwgMHhkMWJjLCAweDAxNjgsIDB4YzFiYywgMHgwMDE4LCAweGQxYmMsIDB4MTE0OCwgMHhjMWJkLAotCTB4MjExMCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweDBmM2EsIDB4MDBlZSwgMHgwNDAwLAotCTB4NjllYSwgMHgwMGYwLCAweDAwMjYsIDB4ODEwNywgMHg5MDk0LCAweDAwMDcsIDB4MDEyOCwgMHg4MDAxLAotCTB4ODAwNywgMHg5MDg1LCAweDAwMDcsIDB4MDA1MCwgMHgyMDEwLCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LAotCTB4OTA4NCwgMHgwMDA3LCAweDkyMDUsIDB4ODAwNywgMHg5MDg1LCAweDAwMjgsIDB4OTA4NiwgMHgwMDQwLAotCTB4MjAxMCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweDBmM2EsIDB4MDBlZSwgMHgwMDJlLAotCTB4MDAwNSwgMHgwMDE2LCAweDAwYzYsIDB4MjAwOSwgMHhmZmY0LCAweDIxMGQsIDB4MjA2MSwgMHgwMTAwLAotCTB4NjBmMCwgMHg5MTAwLCAweDYwZjMsIDB4MDAwMCwgMHgyMDA5LCAweGZmZjQsIDB4MjAwZiwgMHgxMjIwLAotCTB4ODEwOCwgMHgyMTA1LCAweDgwMDAsIDB4MjAwZiwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGM2LAotCTB4MjA2MSwgMHgxYTc0LCAweDAwY2UsIDB4MDAwNSwgMHg5MTg0LCAweDAwMGYsIDB4ODAwMywgMHg4MDAzLAotCTB4ODAwMywgMHg5MDgwLCAweDFhNzQsIDB4MjA2MCwgMHgwMDA1LCAweGE4ODQsIDB4OTA4YSwgMHgxOTlhLAotCTB4MTYzOCwgMHg5MDA1LCAweDExNTAsIDB4MDBjNiwgMHgyMDYxLCAweDFhNzQsIDB4NjAxNCwgMHgwMGNlLAotCTB4OTAwNSwgMHgxMTMwLCAweDIwMDEsIDB4MDAxZSwgMHgwMDE4LCAweDkwOGUsIDB4ZmZmZiwgMHgwMWIwLAotCTB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHg2MTFhLCAweGE4N2MsIDB4OTA4YywgMHgwMGMwLAotCTB4OTE4ZSwgMHgwMGMwLCAweDA5MDQsIDB4OGE4NywgMHhkMGI0LCAweDExNjgsIDB4ZDBiYywgMHgxOTA0LAotCTB4OGE2MCwgMHgyMDA5LCAweDAwMDYsIDB4MDgwYywgMHg4YWI0LCAweDAwMDUsIDB4OTAwZSwgMHgwYzYwLAotCTB4MjAwMSwgMHgxOTk5LCAweDA4YjAsIDB4ZDBmYywgMHgwNWUwLCAweDkwOGMsIDB4MjAyMywgMHgxNTY4LAotCTB4ODdmZiwgMHgxNTU4LCAweGE5YTgsIDB4ODFmZiwgMHgxNTQwLCAweDYxMjQsIDB4OTE4YywgMHgwNTAwLAotCTB4MTUyMCwgMHg2MTAwLCAweDkxOGUsIDB4MDAwNywgMHgxNTAwLCAweDIwMDksIDB4MTg2OSwgMHgyMTBjLAotCTB4ZDE4NCwgMHgxMWQ4LCAweDYwMDMsIDB4MDAwMywgMHg2MDA3LCAweDAwNDMsIDB4NjA0NywgMHhiMDM1LAotCTB4MDgwYywgMHgxYzhjLCAweGE4N2MsIDB4YzBkZCwgMHhhODdlLCAweDYwMGYsIDB4MDAwMCwgMHgwMGY2LAotCTB4MjA3OSwgMHgwMzgwLCAweDc4MTgsIDB4ZDBiYywgMHgxZGU4LCAweDc4MzMsIDB4MDAxMywgMHgyYzAwLAotCTB4NzgzNiwgMHg3ODFiLCAweDgwODAsIDB4MDBmZSwgMHgwMDA1LCAweDkwOGMsIDB4MDAwMywgMHgwMTIwLAotCTB4OTE4ZSwgMHgwMDAzLCAweDE5MDQsIDB4OGFhZSwgMHg5MDhjLCAweDIwMjAsIDB4OTE4ZSwgMHgyMDIwLAotCTB4MDFhOCwgMHg2MDI0LCAweGQwZDQsIDB4MTFlOCwgMHgyMDA5LCAweDE4NjksIDB4MjEwNCwgMHhkMDg0LAotCTB4MTEzOCwgMHg4N2ZmLCAweDExMjAsIDB4MjAwOSwgMHgwMDQzLCAweDA4MDQsIDB4YWZlYywgMHgwMDA1LAotCTB4ODdmZiwgMHgxZGU4LCAweDIwMDksIDB4MDA0MiwgMHgwODA0LCAweGFmZWMsIDB4NjExMCwgMHgwMGI2LAotCTB4MjE1OCwgMHhiOTAwLCAweDAwYmUsIDB4ZDFhYywgMHgwZDIwLCAweDYwMjQsIDB4YzBjZCwgMHg2MDI2LAotCTB4MGMwMCwgMHhjMGQ0LCAweDYwMjYsIDB4YTg5MCwgMHg2MDJlLCAweGE4OGMsIDB4NjAzMiwgMHgwOGUwLAotCTB4ZDBmYywgMHgwMTYwLCAweDkwOGMsIDB4MDAwMywgMHgwMTIwLCAweDkxOGUsIDB4MDAwMywgMHgxOTA0LAotCTB4OGFhZSwgMHg5MDhjLCAweDIwMjAsIDB4OTE4ZSwgMHgyMDIwLCAweDAxNzAsIDB4MDA3NiwgMHgwMGY2LAotCTB4MmM3OCwgMHgwODBjLCAweDE3YTEsIDB4MDBmZSwgMHgwMDdlLCAweDg3ZmYsIDB4MTEyMCwgMHgyMDA5LAotCTB4MDA0MiwgMHgwODBjLCAweGFmZWMsIDB4MDAwNSwgMHg2MTEwLCAweDAwYjYsIDB4MjE1OCwgMHhiOTAwLAotCTB4MDBiZSwgMHhkMWFjLCAweDBkNTgsIDB4NjEyNCwgMHhjMWNkLCAweDYxMjYsIDB4MGMzOCwgMHhkMGZjLAotCTB4MDE4OCwgMHg5MDhjLCAweDIwMjAsIDB4OTE4ZSwgMHgyMDIwLCAweDAxYTgsIDB4OTA4NCwgMHgwMDAzLAotCTB4OTA4ZSwgMHgwMDAyLCAweDAxNDgsIDB4ODdmZiwgMHgxMTIwLCAweDIwMDksIDB4MDA0MSwgMHgwODBjLAotCTB4YWZlYywgMHgwMDA1LCAweDAwYjksIDB4MGNlOCwgMHg4N2ZmLCAweDFkZDgsIDB4MjAwOSwgMHgwMDQzLAotCTB4MDgwYywgMHhhZmVjLCAweDBjYjAsIDB4NjExMCwgMHgwMGI2LCAweDIxNTgsIDB4YjkwMCwgMHgwMGJlLAotCTB4ZDFhYywgMHgwZDIwLCAweDYxMjQsIDB4YzFjZCwgMHg2MTI2LCAweDBjMDAsIDB4MjAwOSwgMHgwMDA0LAotCTB4MDAxOSwgMHgwMDA1LCAweDIwMDksIDB4MDAwMSwgMHgwMDk2LCAweDA4MGMsIDB4Y2MzMywgMHgwNTE4LAotCTB4NjAxNCwgMHgyMDQ4LCAweGE5ODIsIDB4YTgwMCwgMHg2MDE2LCAweDkxODYsIDB4MDAwMSwgMHgxMTg4LAotCTB4YTk3YywgMHg5MThjLCAweDgxMDAsIDB4OTE4ZSwgMHg4MTAwLCAweDExNTgsIDB4MDBjNiwgMHgyMDYxLAotCTB4MWE3NCwgMHg2MjAwLCAweGQyOGMsIDB4MTEyMCwgMHg2MjA0LCAweDgyMTAsIDB4MDIwOCwgMHg2MjA2LAotCTB4MDBjZSwgMHgwODBjLCAweDZkNGIsIDB4NjAxNCwgMHg5MDRkLCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLAotCTB4MTkwYywgMHg4OWNkLCAweDAwN2UsIDB4MDA5ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDBjNiwgMHgyMDYxLAotCTB4MWE3NCwgMHg2MDAwLCAweDgxZmYsIDB4MDExMCwgMHg5MjA1LCAweDAwMDgsIDB4OTIwNCwgMHg2MDAyLAotCTB4MDBjZSwgMHgwMTVlLCAweDAwMDUsIDB4NjgwMCwgMHhkMDhjLCAweDExMzgsIDB4NjgwOCwgMHg5MDA1LAotCTB4MDEyMCwgMHg4MDAxLCAweDY4MGEsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MjA3MSwgMHgxOTI1LAotCTB4NzAwMywgMHgwMDA2LCAweDcwMDcsIDB4MDAwMCwgMHg3MDBmLCAweDAwMDAsIDB4NzAxMywgMHgwMDAxLAotCTB4MDgwYywgMHgxMDY2LCAweDA5MGMsIDB4MGQ3OSwgMHhhODY3LCAweDAwMDYsIDB4YTg2YiwgMHgwMDAxLAotCTB4YThhYiwgMHhkY2IwLCAweGE4OWYsIDB4MDAwMCwgMHgyOTAwLCAweDcwMmUsIDB4NzAzMywgMHgwMDAwLAotCTB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDk2LCAweDAwZTYsIDB4MjA3MSwgMHgxOTI1LAotCTB4NzAyYywgMHgyMDQ4LCAweDZhMmMsIDB4NzIxZSwgMHg2YjMwLCAweDczMjIsIDB4NjgzNCwgMHg3MDI2LAotCTB4YTg5NiwgMHg2ODM4LCAweDcwMmEsIDB4YTg5YSwgMHg2ODI0LCAweDcwMTYsIDB4NjgzYywgMHg3MDFhLAotCTB4MjAwOSwgMHgwMDI4LCAweDIwMGEsIDB4OTAwNSwgMHgwMTQ4LCAweDkwMGUsIDB4OTE4OCwgMHgwMDBjLAotCTB4ODAwMSwgMHgxZGUwLCAweDIxMDAsIDB4OTIxMCwgMHgxMjA4LCAweDgzMTgsIDB4YWE4ZSwgMHhhYjkyLAotCTB4NzAxMCwgMHhkMDg0LCAweDAxNjgsIDB4YzA4NCwgMHg3MDA3LCAweDAwMDEsIDB4NzAwZiwgMHgwMDAwLAotCTB4MDAwNiwgMHgyMDA5LCAweDFiNzQsIDB4MjEwNCwgMHg5MDgyLCAweDAwMDcsIDB4MjAwYSwgMHgwMDBlLAotCTB4YzA5NSwgMHg3MDEyLCAweDIwMDgsIDB4MjAwMSwgMHgwMDNiLCAweDA4MGMsIDB4MTZhZCwgMHg5MDA2LAotCTB4MjA3MSwgMHgxOTNlLCAweDcwMDIsIDB4NzAwNiwgMHg3MDJhLCAweDAwZWUsIDB4MDA5ZSwgMHgwMTJlLAotCTB4MDAwNSwgMHgyMDA5LCAweDFiNzQsIDB4MjEwNCwgMHg5MDgwLCAweDAwMDcsIDB4MjAwYSwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMTI2LCAweDAxNTYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MTU0LAotCTB4MjAwMSwgMHgwMDA4LCAweDkxMGEsIDB4MDYzOCwgMHgyMDAxLCAweDE4N2QsIDB4MjBhYywgMHg5MDA2LAotCTB4OTA4MCwgMHgwMDA4LCAweDFmMDQsIDB4OGI3MCwgMHg3MWMwLCAweDkxMDIsIDB4MDJlMCwgMHgyMDcxLAotCTB4MTg3NywgMHgyMGE5LCAweDAwMDcsIDB4MDBjNiwgMHgwODBjLCAweGFlZjgsIDB4NjAyMywgMHgwMDA5LAotCTB4NjAwMywgMHgwMDA0LCAweDYwMWYsIDB4MDEwMSwgMHgwMDg5LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHg4Y2YxLCAweDAxMmUsIDB4MWYwNCwgMHg4YjdjLCAweDkwMDYsIDB4MDBjZSwgMHgwMTVlLAotCTB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDBjYzgsIDB4MDBlNiwgMHgwMGI2LAotCTB4MDA5NiwgMHgwMDg2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDI2LCAweDcxMTgsIDB4NzIwYywgMHg3NjIwLAotCTB4NzAwNCwgMHhkMDg0LCAweDExMjgsIDB4MjAyMSwgMHgwMDI0LCAweDIwMjksIDB4MDAwMiwgMHgwMDIwLAotCTB4MjAyMSwgMHgwMDJjLCAweDIwMjksIDB4MDAwYSwgMHgwODBjLCAweDEwNGQsIDB4MDkwYywgMHgwZDc5LAotCTB4MjkwMCwgMHg2MDE2LCAweDIwNTgsIDB4YWM2NiwgMHg5MDA2LCAweGE4MDIsIDB4YTgwNiwgMHhhODZhLAotCTB4YTg3YSwgMHhhOGFhLCAweGE4ODcsIDB4MDAwNSwgMHhhODdmLCAweDAwMjAsIDB4NzAwOCwgMHhhODlhLAotCTB4NzAxMCwgMHhhODllLCAweGFlOGEsIDB4YThhZiwgMHhmZmZmLCAweGE4YjMsIDB4MDAwMCwgMHg4MTA5LAotCTB4MDE2MCwgMHgwODBjLCAweDEwNGQsIDB4MDkwYywgMHgwZDc5LCAweGFkNjYsIDB4MmIwMCwgMHhhODAyLAotCTB4MjkwMCwgMHhiODA2LCAweDIwNTgsIDB4ODEwOSwgMHgxZGEwLCAweDAwMmUsIDB4MDA0ZSwgMHgwMDVlLAotCTB4MDA4ZSwgMHgwMDllLCAweDAwYmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzksIDB4MDAwMCwgMHgyMDcxLAotCTB4MTkyNSwgMHg3MDA0LCAweDAwNGIsIDB4NzAwYywgMHgwMDAyLCAweDhiZTgsIDB4OGJlMSwgMHg4YmUxLAotCTB4MDAwNSwgMHg4YmYyLCAweDhjNDgsIDB4OGM0OCwgMHg4YzQ4LCAweDhjNDksIDB4OGM1YSwgMHg4YzVhLAotCTB4NzAwYywgMHgwY2JhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDc4YTAsIDB4NzlhMCwgMHg5MTA2LAotCTB4MTkwNCwgMHg4YzNhLCAweDc4MTQsIDB4ZDBiYywgMHgxOTA0LCAweDhjNDMsIDB4MDEyZSwgMHg3MDE4LAotCTB4OTEwYSwgMHgxMTI4LCAweDcwMzAsIDB4OTAwNSwgMHgxOTA0LCAweDhjOGMsIDB4MDAwNSwgMHgxMjEwLAotCTB4NzExNCwgMHg5MTBhLCAweDkxOTIsIDB4MDAwYSwgMHgwMjEwLCAweDIwMDksIDB4MDAwYSwgMHgyMDAxLAotCTB4MTg4OCwgMHgyMDE0LCAweDIwMDEsIDB4MTkzNywgMHgyMDA0LCAweDkxMDAsIDB4OTIwMiwgMHgwZTUwLAotCTB4MDgwYywgMHg4ZGU5LCAweDIyMDAsIDB4OTEwMiwgMHgwMjA4LCAweDIyMDgsIDB4MDA5NiwgMHg3MDJjLAotCTB4MjA0OCwgMHhhODczLCAweDAwMDEsIDB4YTk3NiwgMHgwODBjLCAweDhlZjIsIDB4MjEwMCwgMHhhODdlLAotCTB4YTg2ZiwgMHgwMDAwLCAweDAwOWUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHgxYTI1LAotCTB4MjEwNCwgMHhjMDg1LCAweDIwMGEsIDB4NzAwZiwgMHgwMDAyLCAweDAxMmUsIDB4MDgwYywgMHgxMTYxLAotCTB4MWRlOCwgMHgwMDA1LCAweDc4YTAsIDB4NzlhMCwgMHg5MTA2LCAweDA5MDQsIDB4OGJmYSwgMHgwODBjLAotCTB4OGRjMSwgMHgwMTJlLCAweDAwMDUsIDB4NzgxMCwgMHhjMGM1LCAweDc4MTIsIDB4MDgwNCwgMHg4YmZhLAotCTB4MDAwNSwgMHg3MDBjLCAweDAwMDIsIDB4OGM0ZSwgMHg4YzUxLCAweDhjNTAsIDB4MDgwYywgMHg4YmYwLAotCTB4MDAwNSwgMHg4MDAxLCAweDcwMGUsIDB4MDA5NiwgMHg3MDJjLCAweDIwNDgsIDB4YTk3NCwgMHgwMDllLAotCTB4MDAxMSwgMHgwY2EwLCAweDAwMDUsIDB4MDA5NiwgMHg3MDJjLCAweDIwNDgsIDB4NzAxOCwgMHg5MTAwLAotCTB4NzIxNCwgMHg5MjFhLCAweDExMzAsIDB4NzAxYywgMHhhODhlLCAweDcwMjAsIDB4YTg5MiwgMHg5MDA2LAotCTB4MDA2OCwgMHgwMDA2LCAweDA4MGMsIDB4OGVmMiwgMHgyMTAwLCAweGFhOGMsIDB4OTIxMCwgMHhhYThlLAotCTB4MTIyMCwgMHhhODkwLCAweDkwODEsIDB4MDAwMCwgMHhhODkyLCAweDAwMGUsIDB4MDA5ZSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDc4YTIsIDB4NzAxYSwgMHgwODBjLCAweDhkYzEsIDB4MDEyZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgyMDcxLCAweDE5MjUsIDB4NzAwYywgMHgwMDAyLCAweDhjOGEsIDB4OGM4YSwgMHg4Yzg4LAotCTB4NzAwZiwgMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDMwLAotCTB4OTAwNSwgMHgwNTA4LCAweDIwNzgsIDB4NzgxNCwgMHgyMDQ4LCAweGFlODgsIDB4MDBiNiwgMHgyMDU5LAotCTB4MDAwMCwgMHgwODBjLCAweDhjZmEsIDB4MDBiZSwgMHgwMWIwLCAweDAwZTYsIDB4MjA3MSwgMHgxOTNlLAotCTB4MDgwYywgMHg4ZDQxLCAweDAwZWUsIDB4MDE3OCwgMHgwMDk2LCAweDA4MGMsIDB4MTA2NiwgMHgyOTAwLAotCTB4MDA5ZSwgMHgwMTQ4LCAweGE4YWEsIDB4MDRkMSwgMHgwMDQxLCAweDIwMDEsIDB4MTk0OCwgMHgyMDAzLAotCTB4MDAwMCwgMHgwMTJlLCAweDA4YzgsIDB4MDEyZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBjNiwgMHgwMDg2LAotCTB4MDBhNiwgMHgyOTQwLCAweDI2NTAsIDB4MjYwMCwgMHg5MDA1LCAweDAxODAsIDB4YTg2NCwgMHg5MDg0LAotCTB4MDAwZiwgMHgyMDY4LCAweDlkODgsIDB4MWVkZSwgMHgyMTY1LCAweDAwNTYsIDB4MjAyOSwgMHgwMDAwLAotCTB4MDgwYywgMHg4ZTc3LCAweDA4MGMsIDB4MWViNCwgMHgxZGQ4LCAweDAwNWUsIDB4MDBhZSwgMHgyMDAxLAotCTB4MTg3ZiwgMHgyMDA0LCAweGE4OGEsIDB4MDBjNiwgMHgyZjYwLCAweDA4MGMsIDB4MTdhMSwgMHgwMGNlLAotCTB4NzgxZiwgMHgwMTAxLCAweDc4MTMsIDB4MDAwMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLAotCTB4OGQ1MCwgMHgwMTJlLCAweDAwOGUsIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4NzAzMCwgMHg5MDA1LAotCTB4MDEzOCwgMHgyMDc4LCAweDc4MGMsIDB4NzAzMiwgMHgyMDAxLCAweDE5NDgsIDB4MjAwMywgMHgwMDAxLAotCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTkyNSwgMHg3MDMwLCAweDYwMGUsIDB4MmMwMCwgMHg3MDMyLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBjNiwgMHgwMDI2LCAweDliODAsIDB4OGZjMCwgMHgyMDA1LAotCTB4OTA2ZCwgMHgwOTBjLCAweDBkNzksIDB4OWI4MCwgMHg4ZmI4LCAweDIwMDUsIDB4OTA2NSwgMHgwOTBjLAotCTB4MGQ3OSwgMHg2MTE0LCAweDI2MDAsIDB4OTEwMiwgMHgwMjQ4LCAweDY4MjgsIDB4OTEwMiwgMHgwMmYwLAotCTB4OTA4NSwgMHgwMDAxLCAweDAwMmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4NjgwNCwgMHhkMDk0LAotCTB4MDE0OCwgMHg2ODU0LCAweGQwODQsIDB4MTE3OCwgMHhjMDg1LCAweDY4NTYsIDB4MjAxMSwgMHg4MDI2LAotCTB4MDgwYywgMHg0YzI4LCAweDY4NGMsIDB4MDA5NiwgMHg5MDRkLCAweDA5MGMsIDB4MGQ3OSwgMHhhODA0LAotCTB4ODAwMCwgMHhhODA2LCAweDAwOWUsIDB4OTAwNiwgMHgyMDMwLCAweDBjMjAsIDB4Njg1NCwgMHhkMDhjLAotCTB4MWQwOCwgMHhjMDhkLCAweDY4NTYsIDB4MjAxMSwgMHg4MDI1LCAweDA4MGMsIDB4NGMyOCwgMHg2ODRjLAotCTB4MDA5NiwgMHg5MDRkLCAweDA5MGMsIDB4MGQ3OSwgMHhhODAwLCAweDgwMDAsIDB4YTgwMiwgMHgwMDllLAotCTB4MDg4OCwgMHg3MDAwLCAweDIwMTksIDB4MDAwOCwgMHg4MzE5LCAweDcxMDQsIDB4OTEwMiwgMHgxMTE4LAotCTB4MjMwMCwgMHg5MDA1LCAweDAwMjAsIDB4MDIxMCwgMHg5MzAyLCAweDAwMDgsIDB4ODAwMiwgMHgwMDA1LAotCTB4MDBkNiwgMHg3ODE0LCAweDkwMDUsIDB4MDkwYywgMHgwZDc5LCAweDc4MWMsIDB4OTA4NCwgMHgwMTAxLAotCTB4OTA4NiwgMHgwMTAxLCAweDE5MGMsIDB4MGQ3OSwgMHg3ODI3LCAweDAwMDAsIDB4MjA2OSwgMHgxOTNlLAotCTB4NjgwNCwgMHg5MDgwLCAweDE5NDAsIDB4MmYwOCwgMHgyMTAyLCAweDY5MDQsIDB4ODEwOCwgMHg5MTgyLAotCTB4MDAwOCwgMHgwMjA4LCAweDkwMGUsIDB4NjkwNiwgMHg5MTgwLCAweDE5NDAsIDB4MjAwMywgMHgwMDAwLAotCTB4MDBkZSwgMHgwMDA1LCAweDAwOTYsIDB4MDBjNiwgMHgyMDYwLCAweDYwMTQsIDB4MjA0OCwgMHhhOGE4LAotCTB4MDA5NiwgMHgyMDQ4LCAweDkwMDUsIDB4MTkwYywgMHgxMDdmLCAweDAwOWUsIDB4YThhYiwgMHgwMDAwLAotCTB4MDgwYywgMHgwZmZmLCAweDA4MGMsIDB4YWY0ZSwgMHgwMGNlLCAweDAwOWUsIDB4MDAwNSwgMHg2MDIwLAotCTB4OTA4NiwgMHgwMDA5LCAweDExMjgsIDB4NjAxYywgMHhkMGM0LCAweDAxMTAsIDB4OTAwNiwgMHgwMDA1LAotCTB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDE3OCwgMHg2MDEwLAotCTB4OTAwNSwgMHgwMTUwLCAweDAwYjYsIDB4MjA1OCwgMHgwODBjLCAweDkwZjUsIDB4MDBiZSwgMHg2MDEzLAotCTB4MDAwMCwgMHg2MDFiLCAweDAwMDAsIDB4MDAxMCwgMHgyYzAwLCAweDA4NjEsIDB4MDAwNSwgMHgyMDA5LAotCTB4MTkyOSwgMHgyMTBjLCAweGQxOTQsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGU2LAotCTB4MjA3MSwgMHgxOTI1LCAweDcxMTAsIDB4YzE5NCwgMHhkMTljLCAweDExMTgsIDB4YzE4NSwgMHg3MDA3LAotCTB4MDAwMCwgMHg3MTEyLCAweDIwMDEsIDB4MDAzYiwgMHgwODBjLCAweDE2YWQsIDB4MDBlZSwgMHgwMTJlLAotCTB4MDAwNSwgMHg3ODE0LCAweGQwYmMsIDB4MTEwOCwgMHgwMDA1LCAweDc4MTAsIDB4YzBjNSwgMHg3ODEyLAotCTB4MGNjMCwgMHgwMDk2LCAweDAwZDYsIDB4OTAwNiwgMHg3MDA2LCAweDcwMGUsIDB4NzAxYSwgMHg3MDFlLAotCTB4NzAyMiwgMHg3MDE2LCAweDcwMmEsIDB4NzAyNiwgMHg3MDJmLCAweDAwMDAsIDB4MDgwYywgMHg4ZjQwLAotCTB4MDE3MCwgMHgwODBjLCAweDhmNzUsIDB4MDE1OCwgMHgyOTAwLCAweDcwMDIsIDB4NzAwYSwgMHg3MDFhLAotCTB4NzAxMywgMHgwMDAxLCAweDcwMWYsIDB4MDAwYSwgMHgwMGRlLCAweDAwOWUsIDB4MDAwNSwgMHg5MDBlLAotCTB4MGNkOCwgMHgwMGU2LCAweDAwOTYsIDB4MDA4NiwgMHgwMGQ2LCAweDAwYzYsIDB4MjA3MSwgMHgxOTMyLAotCTB4NzIxYywgMHgyMTAwLCAweDkyMDIsIDB4MTYxOCwgMHgwODBjLCAweDhmNzUsIDB4MDkwYywgMHgwZDc5LAotCTB4NzAxOCwgMHg5MDA1LCAweDExNjAsIDB4MjkwMCwgMHg3MDAyLCAweDcwMGEsIDB4NzAxYSwgMHg5MDA2LAotCTB4NzAwNiwgMHg3MDBlLCAweGE4MDYsIDB4YTgwMiwgMHg3MDEyLCAweDcwMWUsIDB4MDAzOCwgMHgyMDQwLAotCTB4YTgwNiwgMHgyOTAwLCAweGEwMDIsIDB4NzAxYSwgMHhhODAzLCAweDAwMDAsIDB4NzAxMCwgMHg4MDAwLAotCTB4NzAxMiwgMHg3MDFjLCAweDkwODAsIDB4MDAwYSwgMHg3MDFlLCAweDcyMWMsIDB4MDhkMCwgMHg3MjFjLAotCTB4MDBjZSwgMHgwMGRlLCAweDAwOGUsIDB4MDA5ZSwgMHgwMGVlLCAweDAwMDUsIDB4MDA5NiwgMHgwMTU2LAotCTB4MDEzNiwgMHgwMTQ2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOTMyLAotCTB4NzMwMCwgMHg4MzFmLCAweDgzMWUsIDB4ODMxZSwgMHg5Mzg0LCAweDAwM2YsIDB4MjBlOCwgMHg5MzljLAotCTB4ZmZjMCwgMHg5Mzk4LCAweDAwMDMsIDB4NzEwNCwgMHgwODBjLCAweDhlZjIsIDB4ODEwYywgMHgyMTAwLAotCTB4OTMxOCwgMHg4MDAzLCAweDIyMjgsIDB4MjAyMSwgMHgwMDc4LCAweDk0MDIsIDB4OTUzMiwgMHgwMjA4LAotCTB4MjAyOCwgMHgyNTAwLCAweDgwMDQsIDB4MjBhOCwgMHgyM2EwLCAweGEwMDEsIDB4YTAwMSwgMHg0MDA1LAotCTB4MjUwOCwgMHgwODBjLCAweDhlZmIsIDB4MjEzMCwgMHg3MDE0LCAweDk2MDAsIDB4NzAxNiwgMHgyNjAwLAotCTB4NzExYywgMHg5MTAyLCAweDcwMWUsIDB4NzAwNCwgMHg5NjAwLCAweDIwMDgsIDB4OTA4MiwgMHgwMDBhLAotCTB4MTE5MCwgMHg3MDAwLCAweDIwNDgsIDB4YTgwMCwgMHg5MDA1LCAweDExNDgsIDB4MjAwOSwgMHgwMDAxLAotCTB4MDAyNiwgMHgwODBjLCAweDhkZTksIDB4MDAyZSwgMHg3MDAwLCAweDIwNDgsIDB4YTgwMCwgMHg3MDAyLAotCTB4NzAwNywgMHgwMDAwLCAweDAwMDgsIDB4NzEwNiwgMHgyNTAwLCAweDkyMTIsIDB4MTkwNCwgMHg4ZTI4LAotCTB4MDEyZSwgMHgwMGVlLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDE2LAotCTB4MDAyNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDk1ODAsIDB4OGZiOCwgMHgyMDA1LAotCTB4OTA3NSwgMHgwOTBjLCAweDBkNzksIDB4MDgwYywgMHg4ZWNkLCAweDAxMmUsIDB4OTU4MCwgMHg4ZmI0LAotCTB4MjAwNSwgMHg5MDc1LCAweDA5MGMsIDB4MGQ3OSwgMHgwMTU2LCAweDAxMzYsIDB4MDFjNiwgMHgwMTQ2LAotCTB4MDFkNiwgMHg4MzFmLCAweDgzMWUsIDB4ODMxZSwgMHg5Mzg0LCAweDAwM2YsIDB4MjBlMCwgMHg5Mzg0LAotCTB4ZmZjMCwgMHg5MTAwLCAweDIwOTgsIDB4YTg2MCwgMHgyMGU4LCAweGE5NWMsIDB4MmMwNSwgMHg5MTAwLAotCTB4MjBhMCwgMHgyMGE5LCAweDAwMDIsIDB4NDAwMywgMHgyZTBjLCAweDJkMDAsIDB4MDAwMiwgMHg4ZWI3LAotCTB4OGViNywgMHg4ZWI5LCAweDhlYjcsIDB4OGViOSwgMHg4ZWI3LCAweDhlYjcsIDB4OGViNywgMHg4ZWI3LAotCTB4OGViNywgMHg4ZWJmLCAweDhlYjcsIDB4OGViZiwgMHg4ZWI3LCAweDhlYjcsIDB4OGViNywgMHgwODBjLAotCTB4MGQ3OSwgMHg0MTA0LCAweDIwYTksIDB4MDAwMiwgMHg0MDAyLCAweDQwMDMsIDB4MDAyOCwgMHgyMGE5LAotCTB4MDAwMiwgMHg0MDAzLCAweDQxMDQsIDB4NDAwMywgMHgwMWRlLCAweDAxNGUsIDB4MDFjZSwgMHgwMTNlLAotCTB4MDE1ZSwgMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwOTYsIDB4NzAxNCwgMHg4MDAxLAotCTB4NzAxNiwgMHg3MTBjLCAweDIxMTAsIDB4MDBmMSwgMHg4MTBjLCAweDkxODgsIDB4MDAwMywgMHg3MzA4LAotCTB4ODIxMCwgMHg5MjgyLCAweDAwMGEsIDB4MTE5OCwgMHg3MDA4LCAweDIwNDgsIDB4YTgwMCwgMHg5MDA1LAotCTB4MDE1OCwgMHgwMDA2LCAweDA4MGMsIDB4OGY4NCwgMHgwMDllLCAweGE4MDcsIDB4MDAwMCwgMHgyOTAwLAotCTB4NzAwYSwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHg3MDBmLCAweDAwMDAsIDB4MDAwOCwgMHg3MjBlLAotCTB4MDA5ZSwgMHgwMDA1LCAweDAwMDYsIDB4ODEwYiwgMHg4MTBiLCAweDIxMDAsIDB4ODEwYiwgMHg5MTAwLAotCTB4MjAwOCwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDI2LCAweDIxMDAsIDB4OTAwNSwgMHgwMTU4LAotCTB4OTA5MiwgMHgwMDBjLCAweDAyNDAsIDB4OTAwZSwgMHg4MTA4LCAweDkwODIsIDB4MDAwYywgMHgxZGUwLAotCTB4MDAyZSwgMHgwMDBlLCAweDAwMDUsIDB4OTAwZSwgMHgwY2Q4LCAweDJkMDAsIDB4OTBiOCwgMHgwMDA4LAotCTB4MjAzMSwgMHg4ZjNlLCAweDkwMWUsIDB4NjgwOCwgMHg5MDA1LCAweDAxMDgsIDB4ODMxOCwgMHg2OTBjLAotCTB4OTEwYSwgMHgwMjQ4LCAweDAxNDAsIDB4ODMxOCwgMHg2ODEwLCAweDkxMTIsIDB4MDIyMCwgMHgwMTE4LAotCTB4ODMxOCwgMHgyMjA4LCAweDBjZDAsIDB4MjMzYSwgMHg2ODA0LCAweGQwODQsIDB4MjMwMCwgMHgyMDIxLAotCTB4MDAwMSwgMHgxMTUwLCAweDkwODIsIDB4MDAwMywgMHgwOTY3LCAweDBhNjcsIDB4ODQyMCwgMHg5MDgyLAotCTB4MDAwNywgMHgwOTY3LCAweDBhNjcsIDB4MGNkMCwgMHg5MDgyLCAweDAwMDIsIDB4MDk2NywgMHgwYTY3LAotCTB4ODQyMCwgMHg5MDgyLCAweDAwMDUsIDB4MDk2NywgMHgwYTY3LCAweDBjZDAsIDB4NmMxYSwgMHgwMDA1LAotCTB4MDA5NiwgMHgwMDQ2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDJiMDAsIDB4OTA4MCwgMHg4ZmJjLAotCTB4MjAwNSwgMHg5MDA1LCAweDA5MGMsIDB4MGQ3OSwgMHgyMDA0LCAweDkwYTAsIDB4MDAwYSwgMHgwODBjLAotCTB4MTA2NiwgMHgwMWQwLCAweDI5MDAsIDB4NzAyNiwgMHhhODAzLCAweDAwMDAsIDB4YTgwNywgMHgwMDAwLAotCTB4MDgwYywgMHgxMDY2LCAweDAxODgsIDB4NzAyNCwgMHhhODAyLCAweGE4MDcsIDB4MDAwMCwgMHgyOTAwLAotCTB4NzAyNiwgMHg5NGEyLCAweDAwMGEsIDB4MDExMCwgMHgwMjA4LCAweDBjOTAsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDEyZSwgMHgwMDRlLCAweDAwOWUsIDB4MDAwNSwgMHg3MDI0LCAweDkwMDUsIDB4MGRjOCwgMHgyMDQ4LAotCTB4YWMwMCwgMHgwODBjLCAweDEwN2YsIDB4MjQwMCwgMHgwY2MwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4NzAyNCwgMHgyMDQ4LCAweDkwMDUsIDB4MDEzMCwgMHhhODAwLCAweDcwMjYsIDB4YTgwMywgMHgwMDAwLAotCTB4YTgwNywgMHgwMDAwLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDI0LAotCTB4YTgwMiwgMHgyOTAwLCAweDcwMjYsIDB4MDEyZSwgMHgwMDA1LCAweDAwOTYsIDB4OWU4MCwgMHgwMDA5LAotCTB4MjAwNCwgMHg5MDA1LCAweDAxMzgsIDB4MjA0OCwgMHhhODAwLCAweDAwMDYsIDB4MDgwYywgMHgxMDdmLAotCTB4MDAwZSwgMHgwY2I4LCAweDAwOWUsIDB4MDAwNSwgMHgwMDk2LCAweDcwMDgsIDB4OTAwNSwgMHgwMTM4LAotCTB4MjA0OCwgMHhhODAwLCAweDAwMDYsIDB4MDgwYywgMHgxMDdmLCAweDAwMGUsIDB4MGNiOCwgMHg5MDA2LAotCTB4NzAwMiwgMHg3MDBhLCAweDcwMDYsIDB4NzAwZSwgMHg3MDFhLCAweDcwMWUsIDB4NzAyMiwgMHg3MDJhLAotCTB4NzAyNiwgMHg3MDJlLCAweDAwOWUsIDB4MDAwNSwgMHgxYTcyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAotCTB4MTkzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgxODg4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAotCTB4MTg3NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMGU2LCAweDAwYzYsIDB4MDBiNiwgMHgwMGE2LAotCTB4YThhOCwgMHgyMDQwLCAweDIwNzEsIDB4MTg3NywgMHgwODBjLCAweDkwZTAsIDB4YTA2NywgMHgwMDIzLAotCTB4NjAxMCwgMHg5MDVkLCAweDA5MDQsIDB4OTBiNSwgMHhiODE0LCAweGEwNmUsIDB4YjkxMCwgMHhhMTcyLAotCTB4YjlhMCwgMHhhMTc2LCAweDIwMDEsIDB4MDAwMywgMHhhMDdlLCAweGE4MzQsIDB4YTA4MiwgMHhhMDdiLAotCTB4MDAwMCwgMHhhODk4LCAweDkwMDUsIDB4MDExOCwgMHhhMDc4LCAweGMwODUsIDB4YTA3YSwgMHgyODU4LAotCTB4MjAzMSwgMHgwMDE4LCAweGEwNjgsIDB4OTA4YSwgMHgwMDE5LCAweDFhMGMsIDB4MGQ3OSwgMHgyMDIwLAotCTB4MjA1MCwgMHgyOTQwLCAweGE4NjQsIDB4OTBiYywgMHgwMGZmLCAweDkwOGMsIDB4MDAwZiwgMHg5MWUwLAotCTB4MWVkZSwgMHgyYzY1LCAweDk3ODYsIDB4MDAyNCwgMHgyYzA1LCAweDE1OTAsIDB4OTA4YSwgMHgwMDM2LAotCTB4MWEwYywgMHgwZDc5LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDkwMjAsIDB4OTAyMCwgMHg5MDIyLAotCTB4OTAyMCwgMHg5MDIwLCAweDkwMjAsIDB4OTAyNCwgMHg5MDIwLCAweDkwMjAsIDB4OTAyMCwgMHg5MDI2LAotCTB4OTAyMCwgMHg5MDIwLCAweDkwMjAsIDB4OTAyOCwgMHg5MDIwLCAweDkwMjAsIDB4OTAyMCwgMHg5MDJhLAotCTB4OTAyMCwgMHg5MDIwLCAweDkwMjAsIDB4OTAyYywgMHg5MDIwLCAweDkwMjAsIDB4OTAyMCwgMHg5MDJlLAotCTB4MDgwYywgMHgwZDc5LCAweGExODAsIDB4MDRiOCwgMHhhMTkwLCAweDA0YTgsIDB4YTFhMCwgMHgwNDk4LAotCTB4YTFiMCwgMHgwNDg4LCAweGExYzAsIDB4MDQ3OCwgMHhhMWQwLCAweDA0NjgsIDB4YTFlMCwgMHgwNDU4LAotCTB4OTA4YSwgMHgwMDM0LCAweDFhMGMsIDB4MGQ3OSwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHg5MDUyLAotCTB4OTA1MCwgMHg5MDUwLCAweDkwNTAsIDB4OTA1MCwgMHg5MDUwLCAweDkwNTQsIDB4OTA1MCwgMHg5MDUwLAotCTB4OTA1MCwgMHg5MDUwLCAweDkwNTAsIDB4OTA1NiwgMHg5MDUwLCAweDkwNTAsIDB4OTA1MCwgMHg5MDUwLAotCTB4OTA1MCwgMHg5MDU4LCAweDkwNTAsIDB4OTA1MCwgMHg5MDUwLCAweDkwNTAsIDB4OTA1MCwgMHg5MDVhLAotCTB4MDgwYywgMHgwZDc5LCAweGExODAsIDB4MDAzOCwgMHhhMTk4LCAweDAwMjgsIDB4YTFiMCwgMHgwMDE4LAotCTB4YTFjOCwgMHgwMDA4LCAweGExZTAsIDB4MjYwMCwgMHgwMDAyLCAweDkwNzYsIDB4OTA3OCwgMHg5MDdhLAotCTB4OTA3YywgMHg5MDdlLCAweDkwODAsIDB4OTA4MiwgMHg5MDg0LCAweDkwODYsIDB4OTA4OCwgMHg5MDhhLAotCTB4OTA4YywgMHg5MDhlLCAweDkwOTAsIDB4OTA5MiwgMHg5MDk0LCAweDkwOTYsIDB4OTA5OCwgMHg5MDlhLAotCTB4OTA5YywgMHg5MDllLCAweDkwYTAsIDB4OTBhMiwgMHg5MGE0LCAweDkwYTYsIDB4MDgwYywgMHgwZDc5LAotCTB4YjllMiwgMHgwNDY4LCAweGI5ZGUsIDB4MDQ1OCwgMHhiOWRhLCAweDA0NDgsIDB4YjlkNiwgMHgwNDM4LAotCTB4YjlkMiwgMHgwNDI4LCAweGI5Y2UsIDB4MDQxOCwgMHhiOWNhLCAweDA0MDgsIDB4YjljNiwgMHgwMGY4LAotCTB4YjljMiwgMHgwMGU4LCAweGI5YmUsIDB4MDBkOCwgMHhiOWJhLCAweDAwYzgsIDB4YjliNiwgMHgwMGI4LAotCTB4YjliMiwgMHgwMGE4LCAweGI5YWUsIDB4MDA5OCwgMHhiOWFhLCAweDAwODgsIDB4YjlhNiwgMHgwMDc4LAotCTB4YjlhMiwgMHgwMDY4LCAweGI5OWUsIDB4MDA1OCwgMHhiOTlhLCAweDAwNDgsIDB4Yjk5NiwgMHgwMDM4LAotCTB4Yjk5MiwgMHgwMDI4LCAweGI5OGUsIDB4MDAxOCwgMHhiOThhLCAweDAwMDgsIDB4Yjk4NiwgMHg4NjMxLAotCTB4ODQyMSwgMHgwMTMwLCAweDA4MGMsIDB4MWViNCwgMHgwOTBjLCAweDBkNzksIDB4MDgwNCwgMHg4ZmZhLAotCTB4MDBhZSwgMHgwMGJlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweGE4NmMsIDB4YTA2ZSwgMHhhODcwLAotCTB4YTA3MiwgMHhhMDc3LCAweDAwZmYsIDB4OTAwNiwgMHgwODA0LCAweDhmZGMsIDB4MDAwNiwgMHgwMDE2LAotCTB4MDBiNiwgMHg2MDEwLCAweDIwNTgsIDB4YjgxMCwgMHg5MDA1LCAweDAxYjAsIDB4MjAwMSwgMHgxOTI2LAotCTB4MjAwNCwgMHg5MDA1LCAweDAxODgsIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLAotCTB4MTE1OCwgMHgwMDM2LCAweDAwNDYsIDB4YmJhMCwgMHgyMDIxLCAweDAwMDQsIDB4MjAxMSwgMHg4MDE0LAotCTB4MDgwYywgMHg0YzI4LCAweDAwNGUsIDB4MDAzZSwgMHgwMGJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LAotCTB4OTAxNiwgMHg3MTBjLCAweGE4MzQsIDB4OTEwYSwgMHhhOTM2LCAweDcwMDgsIDB4OTAwNSwgMHgwMTIwLAotCTB4ODIxMCwgMHg5MTBhLCAweDAyMzgsIDB4MDEzMCwgMHg3MDEwLCAweDgyMTAsIDB4OTEwYSwgMHgwMjEwLAotCTB4MDEwOCwgMHgwY2Q4LCAweGFhOGEsIDB4YTI2YSwgMHgwMDA1LCAweDAwZjYsIDB4MDBkNiwgMHgwMDM2LAotCTB4MjA3OSwgMHgwMzAwLCAweDc4MWIsIDB4MDIwMCwgMHg3ODE4LCAweGQwOTQsIDB4MWRkOCwgMHg3ODFiLAotCTB4MDIwMiwgMHhhMDAxLCAweGEwMDEsIDB4NzgxOCwgMHhkMDk0LCAweDFkYTAsIDB4YjhhYywgMHg5MDA1LAotCTB4MDFiOCwgMHgyMDY4LCAweDIwNzksIDB4MDAwMCwgMHgyYzA4LCAweDkxMWUsIDB4MTExOCwgMHg2ODBjLAotCTB4YjhhZSwgMHgwMDYwLCAweDkxMDYsIDB4MDE0MCwgMHgyZDAwLCAweDIwNzgsIDB4NjgwYywgMHg5MDA1LAotCTB4MDkwYywgMHgwZDc5LCAweDIwNjgsIDB4MGNiMCwgMHg2YjBjLCAweDdiMGUsIDB4NjAwZiwgMHgwMDAwLAotCTB4MjA3OSwgMHgwMzAwLCAweDc4MWIsIDB4MDIwMCwgMHgwMDNlLCAweDAwZGUsIDB4MDBmZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMGQ2LCAweDAwOTYsIDB4MDBjNiwgMHgwMDM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDE1NiwgMHgyMGE5LCAweDAxZmYsIDB4MjA3MSwgMHgwMzAwLCAweDcwMWIsIDB4MDIwMCwgMHg3MDE4LAotCTB4ZDA5NCwgMHgwMTEwLCAweDFmMDQsIDB4OTEzNSwgMHg3MDFiLCAweDAyMDIsIDB4YTAwMSwgMHhhMDAxLAotCTB4NzAxOCwgMHhkMDk0LCAweDFkOTAsIDB4YjhhYywgMHg5MDA1LCAweDAxZTgsIDB4MjA2MCwgMHg2MDBjLAotCTB4YjhhZSwgMHg2MDI0LCAweGMwOGQsIDB4NjAyNiwgMHg2MDAzLCAweDAwMDQsIDB4NjAxYiwgMHgwMDAwLAotCTB4NjAxMywgMHgwMDAwLCAweDYwMWYsIDB4MDEwMSwgMHg2MDE0LCAweDIwNDgsIDB4YTg4YiwgMHgwMDAwLAotCTB4YThhOCwgMHhhOGFiLCAweDAwMDAsIDB4OTA0ZCwgMHgwOTBjLCAweDBkNzksIDB4MDgwYywgMHgxMDdmLAotCTB4MDgwYywgMHg4Y2YxLCAweDBjMDAsIDB4MjA3MSwgMHgwMzAwLCAweDcwMWIsIDB4MDIwMCwgMHgwMTVlLAotCTB4MDEyZSwgMHgwMDNlLCAweDAwY2UsIDB4MDA5ZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGM2LAotCTB4MDBiNiwgMHgwMDE2LCAweDAwMDYsIDB4MDE1NiwgMHgwODBjLCAweDI2YTEsIDB4MDE1ZSwgMHgxMWIwLAotCTB4MDgwYywgMHg2NzE4LCAweDE5MGMsIDB4MGQ3OSwgMHgwMDBlLCAweDAwMWUsIDB4YjkxMiwgMHhiODE2LAotCTB4MDgwYywgMHhhZWY4LCAweDAxNDAsIDB4MmIwMCwgMHg2MDEyLCAweDYwMjMsIDB4MDAwMSwgMHgyMDA5LAotCTB4MDAwMSwgMHgwODBjLCAweGFmZWMsIDB4MDBiZSwgMHgwMGNlLCAweDAwMDUsIDB4MDAwZSwgMHgwMDFlLAotCTB4MGNkMCwgMHgwMDY2LCAweDYwMDAsIDB4OTBiMiwgMHgwMDEwLCAweDFhMGMsIDB4MGQ3OSwgMHgwMDEzLAotCTB4MDA2ZSwgMHgwMDA1LCAweDkxYWEsIDB4OTFhYSwgMHg5MWFhLCAweDkxYWMsIDB4OTFmNSwgMHg5MWFhLAotCTB4OTFhYSwgMHg5MWFhLCAweDkyNWMsIDB4OTFhYSwgMHg5Mjk0LCAweDkxYWEsIDB4OTFhYSwgMHg5MWFhLAotCTB4OTFhYSwgMHg5MWFhLCAweDA4MGMsIDB4MGQ3OSwgMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHg5MWJmLAotCTB4OTFiZiwgMHg5MWJmLCAweDkxYmYsIDB4OTFiZiwgMHg5MWJmLCAweDkxYmYsIDB4OTFiZiwgMHg5MWJmLAotCTB4OTFjMSwgMHg5MWQyLCAweDkxYmYsIDB4OTFiZiwgMHg5MWJmLCAweDkxYmYsIDB4OTFlMywgMHgwODBjLAotCTB4MGQ3OSwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLCAweDAwMDAsIDB4NjAxMCwgMHgwMGI2LAotCTB4MjA1OCwgMHhiOGJiLCAweDA1MDAsIDB4MDBiZSwgMHgwODBjLCAweDZkMTAsIDB4MDgwYywgMHhhZjRlLAotCTB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsIDB4OTg1MSwgMHgwMGQ2LCAweDYxMTQsIDB4MDgwYywgMHhjYzMzLAotCTB4MDEzMCwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLCAweDZmMTEsIDB4MDA5ZSwgMHgwMGRlLAotCTB4MDgwYywgMHhhZjRlLCAweDAwMDUsIDB4MDgwYywgMHg5ODUxLCAweDA4MGMsIDB4MzJmYiwgMHg2MTE0LAotCTB4MDA5NiwgMHgyMTQ4LCAweDA4MGMsIDB4Y2MzMywgMHgwMTIwLCAweGE4N2IsIDB4MDAyOSwgMHgwODBjLAotCTB4NmYxMSwgMHgwMDllLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDA1LCAweDYwMWIsIDB4MDAwMCwgMHg5MTgyLAotCTB4MDA0MCwgMHgwMDk2LCAweDAwMDIsIDB4OTIxMCwgMHg5MjEwLCAweDkyMTAsIDB4OTIxMCwgMHg5MjEwLAotCTB4OTIxMCwgMHg5MjEwLCAweDkyMTAsIDB4OTIxMiwgMHg5MjEwLCAweDkyMTAsIDB4OTIxMCwgMHg5MjU4LAotCTB4OTIxMCwgMHg5MjEwLCAweDkyMTAsIDB4OTIxMCwgMHg5MjEwLCAweDkyMTAsIDB4OTIxOSwgMHg5MjEwLAotCTB4MDgwYywgMHgwZDc5LCAweDYxMTQsIDB4MjE0OCwgMHhhOTM4LCAweDkxOGUsIDB4ZmZmZiwgMHgwOTA0LAotCTB4OTI1OCwgMHg2MDI0LCAweGQwOGMsIDB4MTVjMCwgMHgwMGU2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLAotCTB4OGZjNCwgMHgwMDk2LCAweGE4YTgsIDB4MjA0OCwgMHgwODBjLCAweDZjYTgsIDB4MDA5ZSwgMHhhOGFiLAotCTB4MDAwMCwgMHg2MDEwLCAweDkwMDUsIDB4MDEyOCwgMHgwMGI2LCAweDIwNTgsIDB4MDgwYywgMHg5MGY1LAotCTB4MDBiZSwgMHhhZTg4LCAweDAwYjYsIDB4MjA1OSwgMHgwMDAwLCAweDA4MGMsIDB4OGNmYSwgMHgwMGJlLAotCTB4MDFlMCwgMHgyMDcxLCAweDE5M2UsIDB4MDgwYywgMHg4ZDQxLCAweDAxYjgsIDB4OTA4NiwgMHgwMDAxLAotCTB4MTEyOCwgMHgyMDAxLCAweDE5NDgsIDB4MjAwNCwgMHg5MDA1LCAweDExNzgsIDB4MDA5NiwgMHgwODBjLAotCTB4MTA0ZCwgMHgyOTAwLCAweDAwOWUsIDB4MDE0OCwgMHhhOGFhLCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLAotCTB4OGNiNSwgMHgwMGZlLCAweDAwZWUsIDB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsIDB4OGNmMSwgMHgwY2QwLAotCTB4MDgwYywgMHg5MzEwLCAweDAwOWUsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsIDB4MDA5NiwgMHgwMDAyLAotCTB4OTI3MCwgMHg5MjcwLCAweDkyNzAsIDB4OTI3MiwgMHg5MjcwLCAweDkyNzAsIDB4OTI3MCwgMHg5MjkyLAotCTB4OTI3MCwgMHg5MjcwLCAweDkyNzAsIDB4OTI3MCwgMHg5MjcwLCAweDkyNzAsIDB4OTI3MCwgMHg5MjcwLAotCTB4MDgwYywgMHgwZDc5LCAweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDYwMTQsIDB4MjA0OCwgMHhhOGFjLAotCTB4YTgzNiwgMHhhOGIwLCAweGE4M2EsIDB4YTg0NywgMHgwMDAwLCAweGE4NGIsIDB4MDAwMCwgMHhhODg0LAotCTB4OTA5MiwgMHgxOTlhLCAweDAyMTAsIDB4MjAwMSwgMHgxOTk5LCAweDgwMDMsIDB4ODAxMywgMHg4MjEzLAotCTB4OTIxMCwgMHg2MjFhLCAweDA4MGMsIDB4MWM0MywgMHgyMDA5LCAweDgwMzAsIDB4MDgwYywgMHg5NDY3LAotCTB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLCAweDk4NTEsIDB4NjExNCwgMHgyMTQ4LAotCTB4YTg3YiwgMHgwMDAwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4YmIsIDB4MDUwMCwgMHgwMGJlLAotCTB4MDgwYywgMHg2ZjExLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHhhYWY3LAotCTB4NjE0NCwgMHhkMWZjLCAweDAxMjAsIDB4ZDFhYywgMHgxMTEwLCAweDYwMDMsIDB4MDAwMywgMHg2MDAwLAotCTB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGQ3OSwgMHgwMDk2LCAweDAwMjMsIDB4MDA5ZSwgMHgwODBjLAotCTB4YWIxMywgMHgwMDA1LCAweDkyY2EsIDB4OTJjYSwgMHg5MmNhLCAweDkyY2MsIDB4OTJkZCwgMHg5MmNhLAotCTB4OTJjYSwgMHg5MmNhLCAweDkyY2EsIDB4OTJjYSwgMHg5MmNhLCAweDkyY2EsIDB4OTJjYSwgMHg5MmNhLAotCTB4OTJjYSwgMHg5MmNhLCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLCAweGFjY2YsIDB4NjExNCwgMHgyMTQ4LAotCTB4YTg3YiwgMHgwMDA2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4YmIsIDB4MDUwMCwgMHgwMGJlLAotCTB4MDgwYywgMHg2ZjExLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDA1LCAweDA0OTEsIDB4MDAwNSwgMHgwODBjLAotCTB4YWFmNywgMHg2MDAwLCAweDYxNDQsIDB4ZDFmYywgMHgwMTMwLCAweGQxYWMsIDB4MTEyMCwgMHg2MDAzLAotCTB4MDAwMywgMHgyMDA5LCAweDAwMDMsIDB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGQ3OSwgMHgwMDk2LAotCTB4MDAzMywgMHgwMDllLCAweDAxMDYsIDB4MDgwYywgMHhhYjEzLCAweDAxMGUsIDB4MDAwNSwgMHg5MzA3LAotCTB4OTMwNywgMHg5MzA3LCAweDkzMDksIDB4OTMxMCwgMHg5MzA3LCAweDkzMDcsIDB4OTMwNywgMHg5MzA3LAotCTB4OTMwNywgMHg5MzA3LCAweDkzMDcsIDB4OTMwNywgMHg5MzA3LCAweDkzMDcsIDB4OTMwNywgMHgwODBjLAotCTB4MGQ3OSwgMHgwMDM2LCAweDAwZTYsIDB4MDgwYywgMHhhY2NmLCAweDAwZWUsIDB4MDAzZSwgMHgwMDA1LAotCTB4NjAyNCwgMHhkMDhjLCAweDExZjAsIDB4MDBmNiwgMHgwMGU2LCAweDYwMWIsIDB4MDAwMCwgMHg2MDE0LAotCTB4MjA0OCwgMHg2MDEwLCAweDkwMDUsIDB4MDEyOCwgMHgwMGI2LCAweDIwNTgsIDB4MDgwYywgMHg5MGY1LAotCTB4MDBiZSwgMHgyMDcxLCAweDE5M2UsIDB4MDgwYywgMHg4ZDQxLCAweDAxNjAsIDB4MjAwMSwgMHgxODdmLAotCTB4MjAwNCwgMHhhODhhLCAweDIwMzEsIDB4MDAwMCwgMHgyYzc4LCAweDA4MGMsIDB4OGNiNSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDA1LCAweDAwOTYsIDB4YTg4YiwgMHgwMDAwLCAweGE4YTgsIDB4MjA0OCwgMHgwODBjLAotCTB4MTA3ZiwgMHgwMDllLCAweGE4YWIsIDB4MDAwMCwgMHgwODBjLCAweDhjZjEsIDB4MGM4MCwgMHgwMDAwLAotCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAotCTB4MTg3YSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDAwMzYsIDB4MDA0NiwgMHgyMGE5LCAweDAwMTAsIDB4OTAwNiwgMHg4MDA0LAotCTB4ODA4NiwgMHg4MThlLCAweDEyMDgsIDB4OTIwMCwgMHgxZjA0LCAweDkzNTgsIDB4ODA4NiwgMHg4MThlLAotCTB4MDA0ZSwgMHgwMDNlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDc2LAotCTB4MDE1NiwgMHgyMGE5LCAweDAwMTAsIDB4OTAwNSwgMHgwMWM4LCAweDkxMWEsIDB4MTJiOCwgMHg4MjEzLAotCTB4ODE4ZCwgMHgwMjI4LCAweDkxMWEsIDB4MTIyMCwgMHgxZjA0LCAweDkzNmYsIDB4MDAyOCwgMHg5MTFhLAotCTB4MjMwOCwgMHg4MjEwLCAweDFmMDQsIDB4OTM2ZiwgMHgwMDA2LCAweDMyMDAsIDB4OTA4NCwgMHhlZmZmLAotCTB4MjA4MCwgMHgwMDBlLCAweDAxNWUsIDB4MDA3ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDAwNiwgMHgzMjAwLAotCTB4OTA4NSwgMHgxMDAwLCAweDBjYTgsIDB4MDEyNiwgMHgyMDkxLCAweDI4MDAsIDB4MjA3OSwgMHgxOWU5LAotCTB4MDEyZSwgMHgwMGQ2LCAweDIwNjksIDB4MTllOSwgMHg2ODAzLCAweDAwMDUsIDB4MDE1NiwgMHgwMTQ2LAotCTB4MDFkNiwgMHgyMGU5LCAweDAwMDAsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsIDB4YThlYywgMHgwNGM5LAotCTB4MDgwYywgMHhhOGQ3LCAweDA0YjEsIDB4MDgwYywgMHhhOGRhLCAweDA0OTksIDB4MDgwYywgMHhhOGRkLAotCTB4MDQ4MSwgMHgwODBjLCAweGE4ZTAsIDB4MDQ2OSwgMHgwODBjLCAweGE4ZTMsIDB4MDQ1MSwgMHgwODBjLAotCTB4YThlNiwgMHgwNDM5LCAweDA4MGMsIDB4YThlOSwgMHgwNDIxLCAweDAxZGUsIDB4MDE0ZSwgMHgwMTVlLAotCTB4Njg1NywgMHgwMDAwLCAweDAwZjYsIDB4MjA3OSwgMHgwMzgwLCAweDA0MTksIDB4NzgwNywgMHgwMDAzLAotCTB4NzgwMywgMHgwMDAwLCAweDc4MDMsIDB4MDAwMSwgMHgyMDY5LCAweDAwMDQsIDB4MmQwNCwgMHg5MDg0LAotCTB4ZmZmZSwgMHg5MDg1LCAweDgwMDAsIDB4MjA2YSwgMHgyMDY5LCAweDAxMDAsIDB4NjgyOCwgMHg5MDg0LAotCTB4ZmZmYywgMHg2ODJhLCAweDAwZmUsIDB4MjAwMSwgMHgxYjVlLCAweDIwMDMsIDB4MDAwMCwgMHgwMGRlLAotCTB4MDAwNSwgMHgyMGE5LCAweDAwMjAsIDB4MjBhMSwgMHgwMjQwLCAweDIwMDEsIDB4MDAwMCwgMHg0MDA0LAotCTB4MDAwNSwgMHgwMGM2LCAweDc4MDMsIDB4MDAwMCwgMHg5MDA2LCAweDc4MjcsIDB4MDAzMCwgMHg3ODJiLAotCTB4MDQwMCwgMHg3ODI3LCAweDAwMzEsIDB4NzgyYiwgMHgxYWY3LCAweDc4MWYsIDB4ZmYwMCwgMHg3ODFiLAotCTB4ZmYwMCwgMHgyMDYxLCAweDFhZWMsIDB4NjAyZiwgMHgxOWU5LCAweDYwMzMsIDB4MTgwMCwgMHg2MDM3LAotCTB4MWEwNSwgMHg2MDNiLCAweDFlZGUsIDB4NjAzZiwgMHgxZWVlLCAweDYwNDIsIDB4NjA0NywgMHgxYWMyLAotCTB4MDBjZSwgMHgwMDA1LCAweDIwMDEsIDB4MDM4MiwgMHgyMDA0LCAweDkwODQsIDB4MDAwNywgMHg5MDg2LAotCTB4MDAwMSwgMHgwMWIwLCAweDAwYzYsIDB4NjE0NiwgMHg2MDBmLCAweDAwMDAsIDB4MmMwOCwgMHgyMDYxLAotCTB4MTllOSwgMHg2MDJjLCAweDgwMDAsIDB4NjAyZSwgMHg2MDFjLCAweDkwMDUsIDB4MDEzMCwgMHg5MDgwLAotCTB4MDAwMywgMHgyMTAyLCAweDYxMWUsIDB4MDBjZSwgMHgwMDA1LCAweDYxMjIsIDB4NjExZSwgMHgwY2Q4LAotCTB4NjE0NiwgMHgyYzA4LCAweDIwMDEsIDB4MDAxMiwgMHgwODBjLCAweGFhZTgsIDB4MDAwNSwgMHgwMDE2LAotCTB4MjAwOSwgMHg4MDIwLCAweDYxNDYsIDB4MmMwOCwgMHgyMDAxLCAweDAzODIsIDB4MjAwNCwgMHg5MDg0LAotCTB4MDAwNywgMHg5MDg2LCAweDAwMDEsIDB4MTEyOCwgMHgyMDAxLCAweDAwMTksIDB4MDgwYywgMHhhYWU4LAotCTB4MDA4OCwgMHgwMGM2LCAweDIwNjEsIDB4MTllOSwgMHg2MDJjLCAweDgwMDAsIDB4NjAyZSwgMHg2MDBjLAotCTB4OTAwNSwgMHgwMTI4LCAweDkwODAsIDB4MDAwMywgMHgyMTAyLCAweDYxMGUsIDB4MDAxMCwgMHg2MTEyLAotCTB4NjEwZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgyMDAxLCAweDAzODIsIDB4MjAwNCwgMHg5MDg0LAotCTB4MDAwNywgMHg5MDg2LCAweDAwMDEsIDB4MDE5OCwgMHgwMGM2LCAweDYxNDYsIDB4NjAwZiwgMHgwMDAwLAotCTB4MmMwOCwgMHgyMDYxLCAweDE5ZTksIDB4NjA0NCwgMHg5MDA1LCAweDAxMzAsIDB4OTA4MCwgMHgwMDAzLAotCTB4MjEwMiwgMHg2MTQ2LCAweDAwY2UsIDB4MDAwNSwgMHg2MTRhLCAweDYxNDYsIDB4MGNkOCwgMHg2MTQ2LAotCTB4NjAwZiwgMHgwMDAwLCAweDJjMDgsIDB4MjAwMSwgMHgwMDEzLCAweDA4MGMsIDB4YWFlOCwgMHgwMDA1LAotCTB4NjA0NCwgMHhkMGRjLCAweDAxMTAsIDB4MDgwYywgMHhhNTg1LCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LAotCTB4MDBkNiwgMHgwMGM2LCAweDAwYjYsIDB4MDA5NiwgMHgwMDc2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDM2LAotCTB4MDAyNiwgMHgwMDE2LCAweDAwMDYsIDB4MDEyNiwgMHg5MDJlLCAweDIwNzEsIDB4MTllOSwgMHg3NjQ4LAotCTB4MjY2MCwgMHgyNjc4LCAweDIwOTEsIDB4ODAwMCwgMHg4Y2ZmLCAweDA5MDQsIDB4OTRmYSwgMHg5Yzg2LAotCTB4MWI1NiwgMHgwOTA0LCAweDk0ZjUsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsIDB4OTIwNiwgMHgxOTA0LAotCTB4OTRmNSwgMHg4N2ZmLCAweDAxMjAsIDB4NjA1YywgMHg5MTA2LCAweDE5MDQsIDB4OTRmNSwgMHg3MDRjLAotCTB4OWMwNiwgMHgxMTg4LCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4YTM5MSwgMHg3MDNmLAotCTB4MDAwMCwgMHg5MDA2LCAweDcwNGUsIDB4NzA2YSwgMHg3MDUyLCAweDcwNmUsIDB4MDgwYywgMHhhZGUwLAotCTB4MDAzZSwgMHgyMDI5LCAweDAwMDEsIDB4MDgwYywgMHg5NDcwLCAweDcwNDgsIDB4OWMzNiwgMHgxMTEwLAotCTB4NjYwYywgMHg3NjRhLCAweDcwNDQsIDB4OWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4OWYzNiwgMHgwMTE4LAotCTB4MmYwMCwgMHg3MDQ2LCAweDAwMTAsIDB4NzA0NywgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLAotCTB4OWYwNiwgMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHgwODBjLAotCTB4Y2MzMywgMHgwMWYwLCAweDYwMTQsIDB4MjA0OCwgMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTg4LAotCTB4NjAwNCwgMHg5MDg2LCAweDAwNDAsIDB4MDkwYywgMHhhNTg1LCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLAotCTB4YTg3NywgMHgwMDAwLCAweDAwMTYsIDB4MDAzNiwgMHgwMDc2LCAweDA4MGMsIDB4Y2YzOCwgMHgwODBjLAotCTB4ZWFlZSwgMHgwODBjLCAweDZmMTEsIDB4MDA3ZSwgMHgwMDNlLCAweDAwMWUsIDB4MDgwYywgMHhjZTI0LAotCTB4MDgwYywgMHhhZjg5LCAweDAwY2UsIDB4MDgwNCwgMHg5NDhjLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLAotCTB4MDgwNCwgMHg5NDhjLCAweDAxMmUsIDB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwgMHgwMDVlLAotCTB4MDA2ZSwgMHgwMDdlLCAweDAwOWUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLAotCTB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxMTU4LCAweDAwMTYsIDB4MDAzNiwgMHgwMDc2LAotCTB4MDgwYywgMHhlYWVlLCAweDA4MGMsIDB4ZTczOCwgMHgwMDdlLCAweDAwM2UsIDB4MDAxZSwgMHgwOGMwLAotCTB4NjAyMCwgMHg5MDg2LCAweDAwMDksIDB4MTE2OCwgMHhhODdiLCAweDAwMDYsIDB4MDAxNiwgMHgwMDM2LAotCTB4MDA3NiwgMHgwODBjLCAweDZmMTEsIDB4MDgwYywgMHhhZjRlLCAweDAwN2UsIDB4MDAzZSwgMHgwMDFlLAotCTB4MDg0OCwgMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwOTA0LCAweDk0ZGYsIDB4MDgwNCwgMHg5NGQ4LAotCTB4MDAwNiwgMHgwMDY2LCAweDAwOTYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZjYsIDB4OTAzNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzksIDB4MTllOSwgMHg3ODQ4LCAweDkwNjUsIDB4MDkwNCwgMHg5NTk5LAotCTB4NjAwYywgMHgwMDA2LCAweDYwMGYsIDB4MDAwMCwgMHg3ODRjLCAweDljMDYsIDB4MTFiMCwgMHgwMDM2LAotCTB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4YTM5MSwgMHg3ODNmLCAweDAwMDAsIDB4OTAxZSwgMHg3YjRlLAotCTB4N2I2YSwgMHg3YjUyLCAweDdiNmUsIDB4MDgwYywgMHhhZGUwLCAweDAwM2UsIDB4MDAwZSwgMHg5MDA1LAotCTB4MTExOCwgMHg2MDBjLCAweDYwMGYsIDB4MDAwMCwgMHgwMDA2LCAweDljODYsIDB4MWI1NiwgMHgwNWIwLAotCTB4MDBlNiwgMHgyZjcwLCAweDA4MGMsIDB4OTQ3MCwgMHgwMGVlLCAweDA4MGMsIDB4Y2MzMywgMHgwNTQ4LAotCTB4NjAxNCwgMHgyMDQ4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDAzLCAweDE1YTgsIDB4M2UwOCwgMHg5MThlLAotCTB4MDAwMiwgMHgxMTg4LCAweDYwMTAsIDB4OTAwNSwgMHgwMTcwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLAotCTB4MDBiZSwgMHhkMGJjLCAweDAxNDAsIDB4NjA0OCwgMHg5MDA1LCAweDExYzAsIDB4MjAwMSwgMHgxOTg5LAotCTB4MjAwNCwgMHg2MDRhLCAweDAwOTgsIDB4NjAwNCwgMHg5MDg2LCAweDAwNDAsIDB4MDkwYywgMHhhNTg1LAotCTB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NmYwNSwgMHgwODBjLAotCTB4Y2UyNCwgMHg2MDQ0LCAweGMwZmMsIDB4NjA0NiwgMHgwODBjLCAweGFmODksIDB4MDAwZSwgMHgwODA0LAotCTB4OTUzZCwgMHg3ZTRhLCAweDdlNDYsIDB4MDEyZSwgMHgwMGZlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDllLAotCTB4MDA2ZSwgMHgwMDBlLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsIDB4MTExOCwgMHgwODBjLAotCTB4ZTczOCwgMHgwYzM4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA5LCAweDExMzAsIDB4YWI3YSwgMHgwODBjLAotCTB4NmYxMSwgMHgwODBjLCAweGFmNGUsIDB4MGMxMCwgMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwOTkwLAotCTB4MDg1MCwgMHgwMDE2LCAweDAwMjYsIDB4MDA4NiwgMHg5MDQ2LCAweDAwYTksIDB4MDgwYywgMHg5NmFjLAotCTB4MDA4ZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGY2LCAweDAxMjYsIDB4MjA3OSwgMHgxOWU5LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OTZmNSwgMHgwODBjLCAweDk3OGIsIDB4MDgwYywgMHg2OTBlLAotCTB4MDEyZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBiNiwgMHgwMDk2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LAotCTB4MDBjNiwgMHgwMDY2LCAweDAwMTYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAotCTB4MTllOSwgMHg3NjIwLCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDA5MDQsIDB4OTY3MSwgMHg2MDEwLAotCTB4MjA1OCwgMHhiOGEwLCAweDkyMDYsIDB4MTkwNCwgMHg5NjZjLCAweDg4ZmYsIDB4MDEyMCwgMHg2MDVjLAotCTB4OTEwNiwgMHgxOTA0LCAweDk2NmMsIDB4NzAzMCwgMHg5YzA2LCAweDE1ODAsIDB4MjA2OSwgMHgwMTAwLAotCTB4NjgyMCwgMHhkMGE0LCAweDAxMTAsIDB4ZDBjYywgMHgxNTA4LCAweDA4MGMsIDB4ODhlNCwgMHgwODBjLAotCTB4YTA5YiwgMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHhhNTg1LCAweDcwMzMsIDB4MDAwMCwgMHgwMDM2LAotCTB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4OTM4NCwgMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLAotCTB4MDgwYywgMHgyYWEyLCAweDkwMDYsIDB4MDgwYywgMHgyYWEyLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LAotCTB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLCAweDAwNDAsIDB4NzAwOCwgMHhjMGFkLAotCTB4NzAwYSwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgwODA0LCAweDk2NmMsIDB4NzAyMCwgMHg5YzM2LAotCTB4MTExMCwgMHg2NjBjLCAweDc2MjIsIDB4NzAxYywgMHg5YzM2LCAweDExNDAsIDB4MmMwMCwgMHg5ZjM2LAotCTB4MDExOCwgMHgyZjAwLCAweDcwMWUsIDB4MDAxMCwgMHg3MDFmLCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LAotCTB4MmMwMCwgMHg5ZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLAotCTB4NjA0NCwgMHhjMGZjLCAweDYwNDYsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2MzMywgMHgwMWU4LAotCTB4NjAyMCwgMHg5MDg2LCAweDAwMDMsIDB4MTU4MCwgMHgwODBjLCAweGNlNGEsIDB4MTExOCwgMHgwODBjLAotCTB4YjkzYywgMHgwMDk4LCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwMDE2LAotCTB4MDAzNiwgMHgwMDg2LCAweDA4MGMsIDB4Y2YzOCwgMHgwODBjLCAweGVhZWUsIDB4MDgwYywgMHg2ZjExLAotCTB4MDA4ZSwgMHgwMDNlLCAweDAwMWUsIDB4MDgwYywgMHhjZTI0LCAweDA4MGMsIDB4YWY4OSwgMHgwODBjLAotCTB4YTQ1OCwgMHgwMGNlLCAweDA4MDQsIDB4OTVlNCwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LAotCTB4OTVlNCwgMHgwMTJlLCAweDAwMGUsIDB4MDAxZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLAotCTB4MDBmZSwgMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxMTU4LAotCTB4MDAxNiwgMHgwMDM2LCAweDAwODYsIDB4MDgwYywgMHhlYWVlLCAweDA4MGMsIDB4ZTczOCwgMHgwMDhlLAotCTB4MDAzZSwgMHgwMDFlLCAweDA4ZDAsIDB4MDgwYywgMHhiOTNjLCAweDYwMjAsIDB4OTA4NiwgMHgwMDAyLAotCTB4MTE2MCwgMHg2MDA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDg1LCAweDAwMGUsIDB4MDkwNCwgMHg5NjUyLAotCTB4OTA4NiwgMHgwMDhiLCAweDA5MDQsIDB4OTY1MiwgMHgwODQwLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA1LAotCTB4MTkyMCwgMHg2MDA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDg1LCAweDAwMGUsIDB4MDljOCwgMHg5MDg2LAotCTB4MDA4YiwgMHgwOWIwLCAweDA4MDQsIDB4OTY2NSwgMHgwMDA2LCAweDAwZjYsIDB4MDBlNiwgMHgwMDk2LAotCTB4MDBiNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAxNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg5MjgwLAotCTB4MTAwMCwgMHgyMDA0LCAweDkwNWQsIDB4MjA3OSwgMHgxOWU5LCAweDkwMzYsIDB4NzgyOCwgMHgyMDYwLAotCTB4OGNmZiwgMHgwNTM4LCAweDYwMTAsIDB4OWIwNiwgMHgxNTAwLCAweDYwNDMsIDB4ZmZmZiwgMHgwODBjLAotCTB4YWQxYSwgMHgwMWQ4LCAweDYxMGMsIDB4MDAxNiwgMHgwODBjLCAweGEyMWIsIDB4NjAxNCwgMHgyMDQ4LAotCTB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDAwMTYsIDB4MDAzNiwgMHgwMDg2LAotCTB4MDgwYywgMHhjZjM4LCAweDA4MGMsIDB4ZWFlZSwgMHgwODBjLCAweDZmMTEsIDB4MDA4ZSwgMHgwMDNlLAotCTB4MDAxZSwgMHgwODBjLCAweGFmODksIDB4MDBjZSwgMHgwOGQ4LCAweDJjMzAsIDB4NjAwYywgMHgyMDYwLAotCTB4MDhiOCwgMHgwODBjLCAweDY5MmIsIDB4MDEyZSwgMHgwMDFlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGJlLAotCTB4MDA5ZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwZSwgMHgwMDA1LCAweDAwOTYsIDB4MDAwNiwgMHgwMDY2LAotCTB4MDBjNiwgMHgwMGQ2LCAweDkwMzYsIDB4NzgyMCwgMHg5MDY1LCAweDA5MDQsIDB4OTc1ZSwgMHg2MDBjLAotCTB4MDAwNiwgMHg2MDQ0LCAweGMwZmMsIDB4NjA0NiwgMHg2MDBmLCAweDAwMDAsIDB4NzgzMCwgMHg5YzA2LAotCTB4MTU5OCwgMHgyMDY5LCAweDAxMDAsIDB4NjgyMCwgMHhkMGE0LCAweDAxMTAsIDB4ZDBjYywgMHgxNTA4LAotCTB4MDgwYywgMHg4OGU0LCAweDA4MGMsIDB4YTA5YiwgMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHhhNTg1LAotCTB4NzgzMywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4OTM4NCwgMHgxMDAwLAotCTB4MDEzOCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyYWEyLCAweDkwMDYsIDB4MDgwYywgMHgyYWEyLAotCTB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLAotCTB4MDA1OCwgMHgwODBjLCAweDZiNjUsIDB4MTUzOCwgMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHg3ODA4LAotCTB4YzBhZCwgMHg3ODBhLCAweDJjMzAsIDB4MDBmOCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMxLAotCTB4MDFiMCwgMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTA4LCAweDA4MGMsIDB4Y2U0YSwgMHgxMTE4LAotCTB4MDgwYywgMHhiOTNjLCAweDAwNjAsIDB4MDgwYywgMHg2YjY1LCAweDExNjgsIDB4YTg2NywgMHgwMTAzLAotCTB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZjExLCAweDA4MGMsIDB4Y2UyNCwgMHgwODBjLAotCTB4YWY4OSwgMHgwODBjLCAweGE0NTgsIDB4MDAwZSwgMHgwODA0LCAweDk2ZmMsIDB4N2UyMiwgMHg3ZTFlLAotCTB4MDBkZSwgMHgwMGNlLCAweDAwNmUsIDB4MDAwZSwgMHgwMDllLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LAotCTB4MDAwNiwgMHgxMTE4LCAweDA4MGMsIDB4ZTczOCwgMHgwYzUwLCAweDA4MGMsIDB4YjkzYywgMHg2MDIwLAotCTB4OTA4NiwgMHgwMDAyLCAweDExNTAsIDB4NjAwNCwgMHgwMDA2LCAweDkwODYsIDB4MDA4NSwgMHgwMDBlLAotCTB4MDk5MCwgMHg5MDg2LCAweDAwOGIsIDB4MDk3OCwgMHgwOGQwLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA1LAotCTB4MTliMCwgMHg2MDA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDg1LCAweDAwMGUsIDB4MGQxOCwgMHg5MDg2LAotCTB4MDA4YiwgMHgwZDAwLCAweDA4NjAsIDB4MDAwNiwgMHgwMDk2LCAweDAwYjYsIDB4MDBjNiwgMHgwMDY2LAotCTB4OTAzNiwgMHg3ODI4LCAweDkwNjUsIDB4MDUxMCwgMHg2MDEwLCAweDIwNTgsIDB4NjAwYywgMHgwMDA2LAotCTB4M2UwOCwgMHg5MThlLCAweDAwMDIsIDB4MTExOCwgMHhiODAwLCAweGQwYmMsIDB4MTFhOCwgMHg2MDQzLAotCTB4ZmZmZiwgMHgwODBjLCAweGFkMWEsIDB4MDE4MCwgMHg2MTBjLCAweDA4MGMsIDB4YTIxYiwgMHg2MDE0LAotCTB4MjA0OCwgMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZjExLAotCTB4MDgwYywgMHhhZjg5LCAweDAwMGUsIDB4MDhmMCwgMHgyYzMwLCAweDBjZTAsIDB4MDA2ZSwgMHgwMGNlLAotCTB4MDBiZSwgMHgwMDllLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDA5NiwgMHgwMDY2LAotCTB4MDgwYywgMHg2MjhhLCAweDExYjAsIDB4MjA3MSwgMHgxOWU5LCAweDcwMzAsIDB4OTA4MCwgMHgwMDA1LAotCTB4MjAwNCwgMHg5MDRkLCAweDAxNzAsIDB4YTg3OCwgMHg5NjA2LCAweDExNTgsIDB4MjA3MSwgMHgxOWU5LAotCTB4NzAzMCwgMHg5MDM1LCAweDAxMzAsIDB4OTA4MCwgMHgwMDA1LCAweDIwMDQsIDB4OTkwNiwgMHgxMTA4LAotCTB4MDAyOSwgMHgwMDZlLCAweDAwOWUsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBjNiwgMHgyNjYwLAotCTB4NjA0MywgMHhmZmZmLCAweDA4MGMsIDB4YWQxYSwgMHgwMTc4LCAweDA4MGMsIDB4YTIxYiwgMHg2MDE0LAotCTB4MjA0OCwgMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHhjZjM4LAotCTB4MDgwYywgMHg2ZjExLCAweDA4MGMsIDB4YWY4OSwgMHgwMGNlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGU2LAotCTB4MDBjNiwgMHgwODBjLCAweGFhZjcsIDB4MDEwNiwgMHgyMDcxLCAweDAxMDEsIDB4MmUwNCwgMHhjMGM0LAotCTB4MjA3MiwgMHg2MDQ0LCAweGQwZmMsIDB4MTEzOCwgMHgwMTBlLCAweDA5MGMsIDB4YWIxMywgMHgwMGNlLAotCTB4MDBlZSwgMHgwMGJlLCAweDAwMDUsIDB4MjA3MSwgMHgxOWU5LCAweDcwMzAsIDB4OTAwNSwgMHgwZGEwLAotCTB4OWMwNiwgMHgxOTBjLCAweDBkNzksIDB4NzAzNiwgMHgwODBjLCAweDg4ZTQsIDB4NzAwNCwgMHg5MDg0LAotCTB4MDAwNywgMHgwMDAyLCAweDk4MjQsIDB4OTgyNiwgMHg5ODJkLCAweDk4MzcsIDB4OTg0NSwgMHg5ODI0LAotCTB4OTgzMiwgMHg5ODIyLCAweDA4MGMsIDB4MGQ3OSwgMHgwNDI4LCAweDAwMDUsIDB4MDgwYywgMHhhZDA1LAotCTB4NzAwNywgMHgwMDAwLCAweDcwMzMsIDB4MDAwMCwgMHgwMGU4LCAweDAwNjYsIDB4OTAzNiwgMHgwODBjLAotCTB4YTIxYiwgMHgwMDZlLCAweDcwMDcsIDB4MDAwMCwgMHg3MDMzLCAweDAwMDAsIDB4MDA5OCwgMHgwODBjLAotCTB4YWNmMCwgMHgwMTQwLCAweDA4MGMsIDB4YWQwNSwgMHgwMTI4LCAweDAwNjYsIDB4OTAzNiwgMHgwODBjLAotCTB4YTIxYiwgMHgwMDZlLCAweDcwMzMsIDB4MDAwMCwgMHgwMDI4LCAweDA4MGMsIDB4YWNmMCwgMHgwODBjLAotCTB4YTU4NSwgMHgwMDAwLCAweDAxMGUsIDB4MDkwYywgMHhhYjEzLCAweDAwY2UsIDB4MDBlZSwgMHgwMGJlLAotCTB4MDAwNSwgMHgwMGQ2LCAweDAwYzYsIDB4MDgwYywgMHhhYWY3LCAweDAxMDYsIDB4NjA0NCwgMHhkMGZjLAotCTB4MTEzMCwgMHgwMTBlLCAweDA5MGMsIDB4YWIxMywgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgyMDY5LAotCTB4MTllOSwgMHg2ODRjLCAweDkwMDUsIDB4MGRhOCwgMHg5YzA2LCAweDE5MGMsIDB4MGQ3OSwgMHg2ODUyLAotCTB4MDBlNiwgMHgyZDcwLCAweDA4MGMsIDB4OTQ3MCwgMHgwMGVlLCAweDA4MGMsIDB4ODhmMSwgMHgwMDE2LAotCTB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIzZCwgMHgwMDFlLCAweDY4M2MsIDB4OTA4NCwgMHgwMDAzLAotCTB4MDAwMiwgMHg5ODdmLCAweDk4ODAsIDB4OTg5ZiwgMHg5ODdkLCAweDA4MGMsIDB4MGQ3OSwgMHgwNDkwLAotCTB4Njg2OCwgMHg5MDg2LCAweDAwMDEsIDB4MDE5OCwgMHg2MDBjLCAweDkwMTUsIDB4MDE2OCwgMHg2YTRhLAotCTB4NjAwZiwgMHgwMDAwLCAweDYwNDQsIDB4OTA4NCwgMHg3ZjdmLCAweDYwNDYsIDB4OTAwNiwgMHg2ODQyLAotCTB4Njg0ZSwgMHg2ODNmLCAweDAwMDAsIDB4MDBmMCwgMHg2ODRhLCAweDY4NDYsIDB4MGM5OCwgMHg2ODZiLAotCTB4MDAwMCwgMHg2ODQ4LCAweDkwNjUsIDB4MGQ3MCwgMHg2MDAzLCAweDAwMDIsIDB4MGM1OCwgMHg2MDQ0LAotCTB4OTA4NCwgMHg3ZjdmLCAweDYwNDYsIDB4OTAwNiwgMHg2ODQyLCAweDY4NGUsIDB4Njg2YSwgMHg2ODUyLAotCTB4Njg2ZSwgMHg2MDBjLCAweDkwMTUsIDB4MDEyMCwgMHg2YTRhLCAweDYwMGYsIDB4MDAwMCwgMHgwMDEwLAotCTB4Njg0YSwgMHg2ODQ2LCAweDA4MGMsIDB4YWRlMCwgMHg2ODRmLCAweDAwMDAsIDB4MDEwZSwgMHgwOTBjLAotCTB4YWIxMywgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDA1LCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLAotCTB4MDAwYiwgMHgwMDA1LCAweDk4ZDIsIDB4OThkNSwgMHg5ZDdiLCAweDllMTQsIDB4OThkNSwgMHg5ZDdiLAotCTB4OWUxNCwgMHg5OGQyLCAweDk4ZDUsIDB4OThkMiwgMHg5OGQyLCAweDk4ZDIsIDB4OThkMiwgMHg5OGQyLAotCTB4OThkMiwgMHg5OGQyLCAweDA4MGMsIDB4OTdmNiwgMHgwMDA1LCAweDAwYjYsIDB4MDE1NiwgMHgwMTM2LAotCTB4MDE0NiwgMHgwMWM2LCAweDAxZDYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDY5LAotCTB4MDIwMCwgMHgyMDcxLCAweDAyNDAsIDB4NjAwNCwgMHg5MDhhLCAweDAwNTMsIDB4MWEwYywgMHgwZDc5LAotCTB4NjExMCwgMHgyMTU4LCAweGI5ODQsIDB4MmM3OCwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHg5MDhhLAotCTB4MDA0MCwgMHgxYTA0LCAweDk5NDEsIDB4MDA1YiwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLAotCTB4MDFkZSwgMHgwMWNlLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwYmUsIDB4MDAwNSwgMHg5YWVhLAotCTB4OWIyNSwgMHg5YjRlLCAweDljMGEsIDB4OWMyYywgMHg5YzMyLCAweDljM2YsIDB4OWM0NywgMHg5YzUzLAotCTB4OWM1OSwgMHg5YzZhLCAweDljNTksIDB4OWNjMiwgMHg5YzQ3LCAweDljY2UsIDB4OWNkNCwgMHg5YzUzLAotCTB4OWNkNCwgMHg5Y2UwLCAweDk5M2YsIDB4OTkzZiwgMHg5OTNmLCAweDk5M2YsIDB4OTkzZiwgMHg5OTNmLAotCTB4OTkzZiwgMHg5OTNmLCAweDk5M2YsIDB4OTkzZiwgMHg5OTNmLCAweGEyM2MsIDB4YTI1ZiwgMHhhMjcwLAotCTB4YTI5MCwgMHhhMmMyLCAweDljM2YsIDB4OTkzZiwgMHg5YzNmLCAweDljNTksIDB4OTkzZiwgMHg5YjRlLAotCTB4OWMwYSwgMHg5OTNmLCAweGE2ODMsIDB4OWM1OSwgMHg5OTNmLCAweGE2OWYsIDB4OWM1OSwgMHg5OTNmLAotCTB4OWM1MywgMHg5YWU0LCAweDk5NjIsIDB4OTkzZiwgMHhhNmJiLCAweGE3MjgsIDB4YTgwYywgMHg5OTNmLAotCTB4YTgxOSwgMHg5YzNjLCAweGE4NDQsIDB4OTkzZiwgMHhhMmNjLCAweGE4NTAsIDB4OTkzZiwgMHgwODBjLAotCTB4MGQ3OSwgMHgyMTAwLCAweDAwNWIsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMWRlLAotCTB4MDFjZSwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMGJlLCAweDAwMDUsIDB4YThmMCwgMHhhOWEyLAotCTB4OTk2MCwgMHg5OTlhLCAweDlhNDYsIDB4OWE1MSwgMHg5OTYwLCAweDljM2YsIDB4OTk2MCwgMHg5YWFiLAotCTB4OWFiNywgMHg5OWI1LCAweDk5NjAsIDB4OTlkMCwgMHg5YTA0LCAweGFkZjQsIDB4YWUzOSwgMHg5YzU5LAotCTB4MDgwYywgMHgwZDc5LCAweDAwZDYsIDB4MDA5NiwgMHgwODBjLCAweDljZjMsIDB4MDAyNiwgMHgwMDM2LAotCTB4NzgxNCwgMHgyMDQ4LCAweGE5NTgsIDB4ZDFjYywgMHgxMTM4LCAweDIwMDksIDB4MjQxNCwgMHgyMDExLAotCTB4MDAxOCwgMHgyMDE5LCAweDAwMTgsIDB4MDAzMCwgMHgyMDA5LCAweDI0MTAsIDB4MjAxMSwgMHgwMDE0LAotCTB4MjAxOSwgMHgwMDE0LCAweDcxMDIsIDB4NzIwNiwgMHg3MDBiLCAweDA4MDAsIDB4YTgzYywgMHg3MDBlLAotCTB4YTg1MCwgMHg3MDIyLCAweGE4NTQsIDB4NzAyNiwgMHg2M2MyLCAweDA4MGMsIDB4YTA2YiwgMHgwMDNlLAotCTB4MDAyZSwgMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHg3ODEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGEwLAotCTB4MDBiZSwgMHgwODBjLCAweGFlODAsIDB4MTExOCwgMHg5MDg0LCAweGZmODAsIDB4MDExMCwgMHg5MDg1LAotCTB4MDAwMSwgMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwODBjLCAweDljZjMsIDB4NzAwMywgMHgwNTAwLAotCTB4NzgxNCwgMHgyMDQ4LCAweGE4NzQsIDB4NzAwYSwgMHhhODc4LCAweDcwMGUsIDB4YTg3YywgMHg3MDEyLAotCTB4YTg4MCwgMHg3MDE2LCAweGE4ODQsIDB4NzAxYSwgMHhhODg4LCAweDcwMWUsIDB4NjBjMywgMHgwMDEwLAotCTB4MDgwYywgMHhhMDZiLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwODBjLAotCTB4OWNmMywgMHg3MDAzLCAweDA1MDAsIDB4NzgxNCwgMHgyMDQ4LCAweGE4Y2MsIDB4NzAwYSwgMHhhOGQwLAotCTB4NzAwZSwgMHhhOGQ0LCAweDcwMTIsIDB4YThkOCwgMHg3MDE2LCAweGE4ZGMsIDB4NzAxYSwgMHhhOGUwLAotCTB4NzAxZSwgMHg2MGMzLCAweDAwMTAsIDB4MDgwYywgMHhhMDZiLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LAotCTB4MDBkNiwgMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OWNmMywgMHgyMGU5LAotCTB4MDAwMCwgMHgyMDAxLCAweDE5YTUsIDB4MjAwMywgMHgwMDAwLCAweDc4MTQsIDB4MjA0OCwgMHhhODE0LAotCTB4ODAwMywgMHg2MGMyLCAweGE4MzAsIDB4MjBhOCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLAotCTB4MDAxYiwgMHgyMDk4LCAweDIwMDEsIDB4MTlhNSwgMHgwMDE2LCAweDIwMGMsIDB4MjAwMSwgMHgwMDAxLAotCTB4MDgwYywgMHgyMjIyLCAweDA4MGMsIDB4ZGEwNSwgMHg5MDA2LCAweDA4MGMsIDB4MjIyMiwgMHgwMDFlLAotCTB4YTgwNCwgMHg5MDA1LCAweDAxMTAsIDB4MjA0OCwgMHgwYzI4LCAweDA0ZDksIDB4MDgwYywgMHhhMDZiLAotCTB4MDEyZSwgMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDlkM2UsIDB4MjBlOSwgMHgwMDAwLCAweDIwMDEsIDB4MTlhNSwgMHgyMDAzLAotCTB4MDAwMCwgMHg3ODE0LCAweDIwNDgsIDB4YTg2ZiwgMHgwMjAwLCAweGE4NzMsIDB4MDAwMCwgMHhhODE0LAotCTB4ODAwMywgMHg2MGMyLCAweGE4MzAsIDB4MjBhOCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLAotCTB4MDAxYiwgMHgyMDk4LCAweDIwMDEsIDB4MTlhNSwgMHgwMDE2LCAweDIwMGMsIDB4MDgwYywgMHhkYTA1LAotCTB4MDAxZSwgMHhhODA0LCAweDkwMDUsIDB4MDExMCwgMHgyMDQ4LCAweDBjNjAsIDB4MDA1MSwgMHg3ODE0LAotCTB4MjA0OCwgMHgwODBjLCAweDBmZmYsIDB4MDgwYywgMHhhMDZiLCAweDAxMmUsIDB4MDA5ZSwgMHgwMGRlLAotCTB4MDAwNSwgMHg2MGMwLCAweDgwMDQsIDB4OTA4NCwgMHgwMDAzLCAweDkwMDUsIDB4MDEzMCwgMHg5MDgyLAotCTB4MDAwNCwgMHgyMGEzLCAweDAwMDAsIDB4ODAwMCwgMHgxZGUwLCAweDAwMDUsIDB4MDgwYywgMHg5Y2YzLAotCTB4NzAwMywgMHg3ODAwLCAweDc4MDgsIDB4ODAwNywgMHg3MDBhLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LAotCTB4YTA2YiwgMHgwMGQ2LCAweDAwZTYsIDB4MDgwYywgMHg5ZDNlLCAweDc4MTQsIDB4OTA4NCwgMHhmZjAwLAotCTB4MjA3MywgMHgwMjAwLCAweDhlNzAsIDB4OGU3MCwgMHg5MDk2LCAweGRmMDAsIDB4MDEzOCwgMHg5MDk2LAotCTB4ZTAwMCwgMHgwMTIwLCAweDIwNzMsIDB4MDAxMCwgMHg4ZTcwLCAweDAwMzAsIDB4OTA5NSwgMHgwMDEwLAotCTB4MjI3MiwgMHg4ZTcwLCAweDIwNzMsIDB4MDAzNCwgMHg4ZTcwLCAweDIwNjksIDB4MTgwNSwgMHgyMGE5LAotCTB4MDAwNCwgMHgyZDc2LCAweDhkNjgsIDB4OGU3MCwgMHgxZjA0LCAweDlhNzEsIDB4MjA2OSwgMHgxODAxLAotCTB4MjBhOSwgMHgwMDA0LCAweDJkNzYsIDB4OGQ2OCwgMHg4ZTcwLCAweDFmMDQsIDB4OWE3YSwgMHg5MDk2LAotCTB4ZGYwMCwgMHgwMTMwLCAweDkwOTYsIDB4ZTAwMCwgMHgwMTE4LCAweDYwYzMsIDB4MDAxOCwgMHgwMGYwLAotCTB4MjA2OSwgMHgxOWI1LCAweDkwODYsIDB4ZGYwMCwgMHgwMTEwLCAweDIwNjksIDB4MTljZiwgMHgyMGE5LAotCTB4MDAxYSwgMHg5ZTg2LCAweDAyNjAsIDB4MTE0OCwgMHgwMGM2LCAweDIwNjEsIDB4MDIwMCwgMHg2MDEwLAotCTB4ODAwMCwgMHg2MDEyLCAweDAwY2UsIDB4MjA3MSwgMHgwMjQwLCAweDJkMDQsIDB4ODAwNywgMHgyMDcyLAotCTB4OGQ2OCwgMHg4ZTcwLCAweDFmMDQsIDB4OWE5MSwgMHg2MGMzLCAweDAwNGMsIDB4MDgwYywgMHhhMDZiLAotCTB4MDBlZSwgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHg5Y2YzLCAweDcwMDMsIDB4NjMwMCwgMHg3MDA3LAotCTB4MDAyOCwgMHg3ODA4LCAweDcwMGUsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTA2YiwgMHgwMGQ2LAotCTB4MDAyNiwgMHgwMDE2LCAweDA4MGMsIDB4OWQzZSwgMHg3MDAzLCAweDAyMDAsIDB4NzgxNCwgMHg3MDBlLAotCTB4MDBlNiwgMHg5ZWYwLCAweDAwMDQsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDAwYywgMHgyMDY5LAotCTB4MTkyNSwgMHg2ODEwLCAweGQwODQsIDB4MTE0OCwgMHgyMDczLCAweDA1MDAsIDB4OGU3MCwgMHgyMDczLAotCTB4MDAwMCwgMHg4ZTcwLCAweDgxMDgsIDB4OTI5MCwgMHgwMDA0LCAweDIwNzMsIDB4MDgwMCwgMHg4ZTcwLAotCTB4MjA3MywgMHgwMDAwLCAweDAwZWUsIDB4NzIwNiwgMHg3MTBhLCAweDYyYzIsIDB4MDgwYywgMHhhMDZiLAotCTB4MDAxZSwgMHgwMDJlLCAweDAwZGUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MTgsIDB4MjAwNCwgMHg2MDlhLAotCTB4MDgwNCwgMHhhMDZiLCAweDA4MGMsIDB4OWNmMywgMHg3MDAzLCAweDUyMDAsIDB4MjA2OSwgMHgxODQ3LAotCTB4NjgwNCwgMHhkMDg0LCAweDAxMzAsIDB4NjgyOCwgMHgwMDE2LCAweDA4MGMsIDB4MjZkNCwgMHg3MTBlLAotCTB4MDAxZSwgMHgyMGE5LCAweDAwMDQsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MTgwNSwgMHgyMGU5LAotCTB4MDAwMCwgMHgyMGExLCAweDAyNTAsIDB4NDAwMywgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHgxODAxLAotCTB4MjBhMSwgMHgwMjU0LCAweDQwMDMsIDB4MDgwYywgMHhhZTgwLCAweDExMjAsIDB4YjhhMCwgMHg5MDgyLAotCTB4MDA3ZiwgMHgwMjQ4LCAweDIwMDEsIDB4MTgxZiwgMHgyMDA0LCAweDcwMzIsIDB4MjAwMSwgMHgxODIwLAotCTB4MjAwNCwgMHg3MDM2LCAweDAwMzAsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLAotCTB4NzAzNiwgMHg2MGMzLCAweDAwMWMsIDB4MDgwNCwgMHhhMDZiLCAweDA4MGMsIDB4OWNmMywgMHg3MDAzLAotCTB4MDUwMCwgMHgwODBjLCAweGFlODAsIDB4MTEyMCwgMHhiOGEwLCAweDkwODIsIDB4MDA3ZiwgMHgwMjQ4LAotCTB4MjAwMSwgMHgxODFmLCAweDIwMDQsIDB4NzAwYSwgMHgyMDAxLCAweDE4MjAsIDB4MjAwNCwgMHg3MDBlLAotCTB4MDAzMCwgMHgyMDAxLCAweDE4MTgsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4NzAwZSwgMHgyMGE5LAotCTB4MDAwNCwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxODA1LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAotCTB4MDI1MCwgMHg0MDAzLCAweDYwYzMsIDB4MDAxMCwgMHgwODA0LCAweGEwNmIsIDB4MDgwYywgMHg5Y2YzLAotCTB4OTAwNiwgMHgwODBjLCAweDZiOTcsIDB4YjhhMCwgMHg5MDg2LCAweDAwN2UsIDB4MTE3MCwgMHgyMDExLAotCTB4MDI0MCwgMHgyMDEzLCAweDIyZmYsIDB4MjAxMSwgMHgwMjQxLCAweDIwMTMsIDB4ZmZmZSwgMHg3MDAzLAotCTB4MDQwMCwgMHg2MjBjLCAweGMyYjQsIDB4NjIwZSwgMHgwMDU4LCAweDc4MTQsIDB4MDA5NiwgMHg5MDRkLAotCTB4MDEyMCwgMHg5MDA2LCAweGE4OWEsIDB4YThhNiwgMHhhOGFhLCAweDAwOWUsIDB4NzAwMywgMHgwMzAwLAotCTB4YjhhMCwgMHg5MDg2LCAweDAwN2UsIDB4MTkwNCwgMHg5YmQxLCAweDAwZDYsIDB4MjA2OSwgMHgxOTZkLAotCTB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4ZDBhNCwgMHgwMTg4LCAweDY4MDAsIDB4NzAwYSwgMHg2ODA4LAotCTB4OTA4NCwgMHgyMDAwLCAweDcwMTIsIDB4MDgwYywgMHhhZTk3LCAweDY4MGMsIDB4NzAxNiwgMHg3MDFmLAotCTB4MjcxMCwgMHg2ODE4LCAweDcwMjIsIDB4NjgxYywgMHg3MDI2LCAweDAwZjAsIDB4NjgwMCwgMHg3MDBhLAotCTB4NjgwNCwgMHg3MDBlLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDA4MGMsIDB4NzY5ZCwgMHgxMTI4LAotCTB4NzhlMywgMHgwMDAwLCAweDA4MGMsIDB4MjcxNSwgMHg3OGUyLCAweDAwZmUsIDB4NjgwOCwgMHgwODBjLAotCTB4NzY5ZCwgMHgxMTE4LCAweDkwODQsIDB4MzdmZiwgMHgwMDEwLCAweDkwODQsIDB4M2ZmZiwgMHg3MDEyLAotCTB4MDgwYywgMHhhZTk3LCAweDY4MGMsIDB4NzAxNiwgMHgwMGRlLCAweDIwYTksIDB4MDAwNCwgMHgyMGUxLAotCTB4MDAwMSwgMHgyMDk5LCAweDE4MDUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI1NiwgMHg0MDAzLAotCTB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4MTgwMSwgMHgyMGExLCAweDAyNWEsIDB4NDAwMywgMHgwMGQ2LAotCTB4MDgwYywgMHhhOGQ3LCAweDIwNjksIDB4MTk3NSwgMHgyMDcxLCAweDAyNGUsIDB4NjgwMCwgMHhjMGRkLAotCTB4NzAwMiwgMHgwODBjLCAweDU4MjQsIDB4ZDBlNCwgMHgwMTEwLCAweDY4MGMsIDB4NzAwZSwgMHgwMGRlLAotCTB4MDRhOCwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGE0LCAweDAxNzAsIDB4MDAxNiwgMHgyMDAxLAotCTB4MTk2ZSwgMHgyMDBjLCAweDYwZTAsIDB4OTEwNiwgMHgwMTMwLCAweDIxMDAsIDB4NjBlMywgMHgwMDAwLAotCTB4MDgwYywgMHgyNzE1LCAweDYxZTIsIDB4MDAxZSwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxOTZkLAotCTB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0ZSwgMHgyMGE5LCAweDAwMDgsIDB4NDAwMywgMHgyMGE5LAotCTB4MDAwNCwgMHgyMDk5LCAweDE4MDUsIDB4MjBhMSwgMHgwMjU2LCAweDQwMDMsIDB4MjBhOSwgMHgwMDA0LAotCTB4MjA5OSwgMHgxODAxLCAweDIwYTEsIDB4MDI1YSwgMHg0MDAzLCAweDA4MGMsIDB4YThkNywgMHgyMGExLAotCTB4MDI0ZSwgMHgyMGE5LCAweDAwMDgsIDB4MjA5OSwgMHgxOTc1LCAweDQwMDMsIDB4NjBjMywgMHgwMDc0LAotCTB4MDgwNCwgMHhhMDZiLCAweDA4MGMsIDB4OWNmMywgMHg3MDAzLCAweDIwMTAsIDB4NzAwNywgMHgwMDE0LAotCTB4NzAwYiwgMHgwODAwLCAweDcwMGYsIDB4MjAwMCwgMHg5MDA2LCAweDAwZjYsIDB4MjA3OSwgMHgxODQ3LAotCTB4NzkwNCwgMHgwMGZlLCAweGQxYWMsIDB4MTExMCwgMHg5MDg1LCAweDAwMjAsIDB4ZDFhNCwgMHgwMTEwLAotCTB4OTA4NSwgMHgwMDEwLCAweDkwODUsIDB4MDAwMiwgMHgwMGQ2LCAweDA4MDQsIDB4OWNhMywgMHg3MDI2LAotCTB4NjBjMywgMHgwMDE0LCAweDA4MDQsIDB4YTA2YiwgMHgwODBjLCAweDljZjMsIDB4NzAwMywgMHg1MDAwLAotCTB4MDgwNCwgMHg5YjcwLCAweDA4MGMsIDB4OWNmMywgMHg3MDAzLCAweDIxMTAsIDB4NzAwNywgMHgwMDE0LAotCTB4NjBjMywgMHgwMDE0LCAweDA4MDQsIDB4YTA2YiwgMHgwODBjLCAweDlkMzUsIDB4MDAxMCwgMHgwODBjLAotCTB4OWQzZSwgMHg3MDAzLCAweDAyMDAsIDB4NjBjMywgMHgwMDA0LCAweDA4MDQsIDB4YTA2YiwgMHgwODBjLAotCTB4OWQzZSwgMHg3MDAzLCAweDAxMDAsIDB4NzAwYiwgMHgwMDAzLCAweDcwMGYsIDB4MmEwMCwgMHg2MGMzLAotCTB4MDAwOCwgMHgwODA0LCAweGEwNmIsIDB4MDgwYywgMHg5ZDNlLCAweDcwMDMsIDB4MDIwMCwgMHgwODA0LAotCTB4OWI3MCwgMHgwODBjLCAweDlkM2UsIDB4NzAwMywgMHgwMTAwLCAweDc4MmMsIDB4OTAwNSwgMHgwMTEwLAotCTB4NzAwYSwgMHgwMDEwLCAweDcwMGIsIDB4MDAwMywgMHg3ODE0LCAweDcwMGUsIDB4NjBjMywgMHgwMDA4LAotCTB4MDgwNCwgMHhhMDZiLCAweDAwZDYsIDB4MDgwYywgMHg5ZDNlLCAweDcwMDMsIDB4MDIxMCwgMHg3MDA3LAotCTB4MDAxNCwgMHg3MDBiLCAweDA4MDAsIDB4Yjg5NCwgMHg5MDg2LCAweDAwMTQsIDB4MTE5OCwgMHhiOTljLAotCTB4OTE4NCwgMHgwMDMwLCAweDAxOTAsIDB4Yjk5OCwgMHg5MTg0LCAweGMwMDAsIDB4MTE0MCwgMHhkMWVjLAotCTB4MDExOCwgMHg3MDBmLCAweDIxMDAsIDB4MDA1OCwgMHg3MDBmLCAweDAxMDAsIDB4MDA0MCwgMHg3MDBmLAotCTB4MDQwMCwgMHgwMDI4LCAweDcwMGYsIDB4MDcwMCwgMHgwMDEwLCAweDcwMGYsIDB4MDgwMCwgMHgwMGY2LAotCTB4MjA3OSwgMHgxODQ3LCAweDc5MDQsIDB4MDBmZSwgMHhkMWFjLCAweDExMTAsIDB4OTA4NSwgMHgwMDIwLAotCTB4ZDFhNCwgMHgwMTEwLCAweDkwODUsIDB4MDAxMCwgMHgyMDA5LCAweDE4NjksIDB4MjEwYywgMHhkMTg0LAotCTB4MTExMCwgMHg5MDg1LCAweDAwMDIsIDB4MDAyNiwgMHgyMDA5LCAweDE4NjcsIDB4MjEwYywgMHhkMWU0LAotCTB4MDE1MCwgMHhjMGM1LCAweGJhZDQsIDB4ZDI4YywgMHgxMTA4LCAweGMwY2QsIDB4OTA5NCwgMHgwMDMwLAotCTB4OTI5NiwgMHgwMDEwLCAweDAxNDAsIDB4ZDFlYywgMHgwMTMwLCAweDkwOTQsIDB4MDAzMCwgMHg5Mjk2LAotCTB4MDAxMCwgMHgwMTA4LCAweGMwYmQsIDB4MDAyZSwgMHg3MDI2LCAweDYwYzMsIDB4MDAxNCwgMHgwMGRlLAotCTB4MDgwNCwgMHhhMDZiLCAweDA4MGMsIDB4OWQzZSwgMHg3MDAzLCAweDAyMTAsIDB4NzAwNywgMHgwMDE0LAotCTB4NzAwZiwgMHgwMTAwLCAweDYwYzMsIDB4MDAxNCwgMHgwODA0LCAweGEwNmIsIDB4MDgwYywgMHg5ZDNlLAotCTB4NzAwMywgMHgwMjAwLCAweDA4MDQsIDB4OWFlZSwgMHgwODBjLCAweDlkM2UsIDB4NzAwMywgMHgwMTAwLAotCTB4NzAwYiwgMHgwMDAzLCAweDcwMGYsIDB4MmEwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhMDZiLAotCTB4MDgwYywgMHg5ZDNlLCAweDcwMDMsIDB4MDEwMCwgMHg3MDBiLCAweDAwMGIsIDB4NjBjMywgMHgwMDA4LAotCTB4MDgwNCwgMHhhMDZiLCAweDAwMjYsIDB4MDBkNiwgMHgwMDM2LCAweDAwNDYsIDB4MjAxOSwgMHgzMjAwLAorCTB4MjAwMSwgMHgxODBkLCAweDIwMDQsIDB4ZDA4YywgMHgyMDAxLCAweDAwMDIsIDB4MTExOCwgMHgyMDAxLAorCTB4MTk2ZCwgMHgyMDA0LCAweDA4MGMsIDB4MjcwMCwgMHg2MGUyLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLAorCTB4YzFiNCwgMHgyMTAyLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLAorCTB4MDE1ZSwgMHgwMDA1LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMGM2LAorCTB4MDBlNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4ZDYzZSwgMHgxOTA0LAorCTB4N2FhMCwgMHg3MTMwLCAweGQxODQsIDB4MTE3MCwgMHgwODBjLCAweDM0ODIsIDB4MDEzOCwgMHhjMThkLAorCTB4NzEzMiwgMHgyMDExLCAweDE4NDgsIDB4MjIxNCwgMHhkMmFjLCAweDExMjAsIDB4NzAzMCwgMHhkMDhjLAorCTB4MDkwNCwgMHg3YWEwLCAweDIwMTEsIDB4MTg0OCwgMHgyMjBjLCAweGQxYTQsIDB4MDUzOCwgMHgwMDE2LAorCTB4MjAxOSwgMHgwMDBlLCAweDA4MGMsIDB4ZTlmOSwgMHgwMTU2LCAweDAwYjYsIDB4MjBhOSwgMHgwMDdmLAorCTB4OTAwZSwgMHg5MTg2LCAweDAwN2UsIDB4MDFhMCwgMHg5MTg2LCAweDAwODAsIDB4MDE4OCwgMHgwODBjLAorCTB4NjdiNCwgMHgxMTcwLCAweDIxMjAsIDB4OTAwNiwgMHgwMDE2LCAweDIwMDksIDB4MDAwZSwgMHgwODBjLAorCTB4ZWE4ZCwgMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMTAwLCAweDA4MGMsIDB4OGM0NCwgMHgwMDFlLAorCTB4ODEwOCwgMHgxZjA0LCAweDdhNjksIDB4MDBiZSwgMHgwMTVlLCAweDAwMWUsIDB4ZDFhYywgMHgxMTQ4LAorCTB4MDAxNiwgMHgyMDA5LCAweDAwMDIsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4MzJkYSwgMHgwMDFlLAorCTB4MDA3OCwgMHgwMTU2LCAweDAwYjYsIDB4MjBhOSwgMHgwMDdmLCAweDkwMGUsIDB4MDgwYywgMHg2N2I0LAorCTB4MTExMCwgMHgwODBjLCAweDYxYjcsIDB4ODEwOCwgMHgxZjA0LCAweDdhOTYsIDB4MDBiZSwgMHgwMTVlLAorCTB4MDgwYywgMHgxYjRiLCAweDA4MGMsIDB4YWNmYywgMHgwODBjLCAweGIwOWIsIDB4MDgwYywgMHhhZDE4LAorCTB4NjBlMywgMHgwMDAwLCAweDA4MGMsIDB4NjE5ZCwgMHgwODBjLCAweDc2Y2QsIDB4MDBlZSwgMHgwMGNlLAorCTB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMTVlLCAweDAwMDUsIDB4MjAwMSwgMHgxOTdkLAorCTB4MjAwMywgMHgwMDAxLCAweDAwMDUsIDB4MjAwMSwgMHgxOTdkLCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LAorCTB4MjAwMSwgMHgxOTdjLCAweDIwMDMsIDB4YWFhYSwgMHgwMDA1LCAweDIwMDEsIDB4MTk3YywgMHgyMDAzLAorCTB4MDAwMCwgMHgwMDA1LCAweDIwNzEsIDB4MThmYSwgMHg3MDAzLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLAorCTB4MDgwYywgMHgxMDcyLCAweDA5MGMsIDB4MGQ4NSwgMHhhOGFiLCAweGRjYjAsIDB4MjkwMCwgMHg3MDRlLAorCTB4MDgwYywgMHgxMDcyLCAweDA5MGMsIDB4MGQ4NSwgMHhhOGFiLCAweGRjYjAsIDB4MjkwMCwgMHg3MDUyLAorCTB4YTg2NywgMHgwMDAwLCAweGE4NmIsIDB4MDAwMSwgMHhhODlmLCAweDAwMDAsIDB4MDAwNSwgMHgwMGU2LAorCTB4MjA3MSwgMHgwMDQwLCAweDY4NDgsIDB4OTAwNSwgMHgxMTE4LCAweDkwODUsIDB4MDAwMSwgMHgwNGIwLAorCTB4Njg0MCwgMHg5MDA1LCAweDAxNTAsIDB4MDRhMSwgMHg2YTUwLCAweDkyMDAsIDB4NzAwMiwgMHg2ODU0LAorCTB4OTEwMSwgMHg3MDA2LCAweDkwMDYsIDB4NzAxMiwgMHg3MDE2LCAweDY4NTAsIDB4NzAwMiwgMHg2ODU0LAorCTB4NzAwNiwgMHg2ODU4LCAweDcwMGEsIDB4Njg1YywgMHg3MDBlLCAweDY4NDAsIDB4OTAwNSwgMHgxMTEwLAorCTB4NzAxMiwgMHg3MDE2LCAweDY4NDgsIDB4NzAxYSwgMHg3MDFjLCAweDkwODUsIDB4MDA0MCwgMHg3MDFlLAorCTB4MjAwMSwgMHgwMDE5LCAweDcwMzYsIDB4NzAyYiwgMHgwMDAxLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLAorCTB4OTE4YywgMHhmZmY3LCAweDkxOGQsIDB4ODAwMCwgMHgyMTAyLCAweDAwZDYsIDB4MjA2OSwgMHgxOGZhLAorCTB4NjgwNywgMHgwMDAxLCAweDAwZGUsIDB4MDgwYywgMHg4MTAzLCAweDkwMDYsIDB4MDBlZSwgMHgwMDA1LAorCTB4OTAwZSwgMHgwMTU2LCAweDIwYTksIDB4MDAwNiwgMHg4MDAzLCAweDgxOGQsIDB4MWYwNCwgMHg3YjJjLAorCTB4MDE1ZSwgMHgwMDA1LCAweDIwNzksIDB4MDA0MCwgMHgyMDcxLCAweDE4ZmEsIDB4NzAwNCwgMHgwMDAyLAorCTB4N2I0MiwgMHg3YjQzLCAweDdiOGYsIDB4N2JlYSwgMHg3ZDRhLCAweDdiNDAsIDB4N2I0MCwgMHg3ZDc0LAorCTB4MDgwYywgMHgwZDg1LCAweDAwMDUsIDB4MjA3OSwgMHgwMDQwLCAweDIwMDEsIDB4MWRjMCwgMHgyMDAzLAorCTB4MDAwMCwgMHg3ODJjLCAweDkwOGMsIDB4MDc4MCwgMHgxOTBjLCAweDgxZTUsIDB4ZDBhNCwgMHgwNTc4LAorCTB4MjAwMSwgMHgxZGMwLCAweDIwMDQsIDB4OTA4MiwgMHgwMDgwLCAweDE2NDgsIDB4MWQwNCwgMHg3YjYwLAorCTB4MjAwMSwgMHgxYTA3LCAweDIwMGMsIDB4ODEwOSwgMHgwNTEwLCAweDIwOTEsIDB4NjAwMCwgMHgyMTAyLAorCTB4NzgyNCwgMHgyMDQ4LCAweDkwMDYsIDB4YTgwMiwgMHhhODA2LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLAorCTB4OTA4YSwgMHgwMDQwLCAweDA2MTAsIDB4MDBjMCwgMHgyMDAxLCAweDE4MDAsIDB4MjAwYywgMHg5MTg2LAorCTB4MDAwMywgMHgxMTY4LCAweDcwMDQsIDB4MDAwMiwgMHg3YjdmLCAweDdiNDksIDB4N2I3ZiwgMHg3YjdkLAorCTB4N2I3ZiwgMHg3YjdmLCAweDdiN2YsIDB4N2I3ZiwgMHg3YjdmLCAweDA4MGMsIDB4N2JlYSwgMHg3ODJjLAorCTB4ZDA5YywgMHgwOTBjLCAweDgxMDMsIDB4MDAwNSwgMHg5MDgyLCAweDAwNWEsIDB4MTIxOCwgMHgyMTAwLAorCTB4MDAzYiwgMHgwYzEwLCAweDA4MGMsIDB4N2MyMCwgMHgwYzkwLCAweDAwZTMsIDB4MDhlOCwgMHgwMDA1LAorCTB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLAorCTB4N2M0MiwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLAorCTB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLAorCTB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzJjLCAweDdjMjAsIDB4N2U2YSwgMHg3YzIwLAorCTB4N2MyMCwgMHg3YzIwLCAweDdjNDIsIDB4N2MyMCwgMHg3YzJjLCAweDdlYWIsIDB4N2VlYywgMHg3ZjMzLAorCTB4N2Y0NywgMHg3YzIwLCAweDdjMjAsIDB4N2M0MiwgMHg3YzJjLCAweDdjNTYsIDB4N2MyMCwgMHg3ZDFlLAorCTB4N2ZmMiwgMHg4MDBkLCAweDdjMjAsIDB4N2M0MiwgMHg3YzIwLCAweDdjNTYsIDB4N2MyMCwgMHg3YzIwLAorCTB4N2QxNCwgMHg4MDBkLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLAorCTB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2M2YSwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLAorCTB4N2MyMCwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLCAweDgxODksIDB4N2MyMCwgMHg4MTMzLAorCTB4N2MyMCwgMHg4MTMzLCAweDdjMjAsIDB4N2M3ZiwgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzIwLAorCTB4N2MyMCwgMHg3YzIwLCAweDIwNzksIDB4MDA0MCwgMHg3MDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTk4LAorCTB4NzgyYywgMHgwODBjLCAweDgxMmMsIDB4ZDBhNCwgMHgwMTcwLCAweDc4MjQsIDB4MjA0OCwgMHg5MDA2LAorCTB4YTgwMiwgMHhhODA2LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwOGEsIDB4MDAxYSwgMHgxMjEwLAorCTB4MDAyYiwgMHgwYzUwLCAweDAwZTksIDB4MDgwYywgMHg4MTAzLCAweDAwMDUsIDB4N2MyMCwgMHg3YzJjLAorCTB4N2U1NiwgMHg3YzIwLCAweDdjMmMsIDB4N2MyMCwgMHg3YzJjLCAweDdjMmMsIDB4N2MyMCwgMHg3YzJjLAorCTB4N2U1NiwgMHg3YzJjLCAweDdjMmMsIDB4N2MyYywgMHg3YzJjLCAweDdjMmMsIDB4N2MyMCwgMHg3YzJjLAorCTB4N2U1NiwgMHg3YzIwLCAweDdjMjAsIDB4N2MyYywgMHg3YzIwLCAweDdjMjAsIDB4N2MyMCwgMHg3YzJjLAorCTB4MDBlNiwgMHgyMDcxLCAweDE4ZmEsIDB4MjAwOSwgMHgwNDAwLCAweDAwNzEsIDB4MDBlZSwgMHgwMDA1LAorCTB4MjAwOSwgMHgxMDAwLCAweDAwNDksIDB4MDAwNSwgMHgyMDA5LCAweDIwMDAsIDB4MDAyOSwgMHgwMDA1LAorCTB4MjAwOSwgMHgwODAwLCAweDAwMDksIDB4MDAwNSwgMHg3MDA3LCAweDAwMDEsIDB4YTg2OCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MTA1LCAweGE4NmEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg3MDEyLAorCTB4MDEyZSwgMHgwMDA1LCAweGE4NjQsIDB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4MGQwOCwgMHg4MDAxLAorCTB4MTEyMCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwNCwgMHg3ZGYzLCAweDcwMDcsIDB4MDAwMywgMHg3MDEyLAorCTB4MjkwMCwgMHg3MDE2LCAweDcwMWEsIDB4NzA0YiwgMHg3ZGYzLCAweDAwMDUsIDB4YTg2NCwgMHg4MDA3LAorCTB4OTA4NCwgMHgwMGZmLCAweDA5NjgsIDB4ODAwMSwgMHgxMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwODA0LAorCTB4N2UwZSwgMHg3MDA3LCAweDAwMDMsIDB4NzAxMiwgMHgyOTAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLAorCTB4N2UwZSwgMHgwMDA1LCAweGE4NjQsIDB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4MDkwNCwgMHg3YzI4LAorCTB4ODAwMSwgMHgxMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwODA0LCAweDdlMmEsIDB4NzAwNywgMHgwMDAzLAorCTB4NzAxMiwgMHgyOTAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDdlMmEsIDB4MDAwNSwgMHhhODY0LAorCTB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDAxLCAweDE5MDQsIDB4N2MyOCwgMHg3MDA3LAorCTB4MDAwMSwgMHgyMDA5LCAweDE4MzQsIDB4MjEwYywgMHg4MWZmLCAweDE5MDQsIDB4N2NlYiwgMHgyMDAxLAorCTB4MTgwZCwgMHgyMDA0LCAweGQwOGMsIDB4MDkwNCwgMHg3Y2Q2LCAweGE5OWMsIDB4OTE4NiwgMHgwMGZmLAorCTB4MDVlOCwgMHhhOTk0LCAweDkxODYsIDB4MDA2ZiwgMHgwMTg4LCAweDkxODYsIDB4MDA3NCwgMHgxNWIwLAorCTB4MDAyNiwgMHgyMDExLCAweDAwMTAsIDB4MDgwYywgMHg2YzM1LCAweDAwMmUsIDB4MDU3OCwgMHgwMDE2LAorCTB4YTk5OCwgMHgwODBjLCAweDZjN2YsIDB4MDAxZSwgMHgxNTQ4LCAweDA0MDAsIDB4MDgwYywgMHg3NzllLAorCTB4MDE0MCwgMHhhODk3LCAweDQwMDUsIDB4YTg5YiwgMHgwMDE2LCAweDIwMDEsIDB4MDAzMCwgMHg5MDBlLAorCTB4MDQzOCwgMHgwMDI2LCAweDIwMTEsIDB4ODAwOCwgMHgwODBjLCAweDZjMzUsIDB4MDAyZSwgMHgwMWIwLAorCTB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4YTk5OCwgMHhhYWEwLCAweGFiOWMsIDB4OTE4ZCwgMHg4MDAwLAorCTB4MDgwYywgMHg2YzdmLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDExNDAsIDB4YTg5NywgMHg0MDA1LAorCTB4YTg5YiwgMHg0MDA5LCAweDIwMDEsIDB4MDAzMCwgMHg5MDBlLCAweDAwNTAsIDB4YTg2OCwgMHg5MDg0LAorCTB4MDBmZiwgMHhhODZhLCAweGE4ODMsIDB4MDAwMCwgMHgwODBjLCAweDY0MzAsIDB4MTEwOCwgMHgwMDA1LAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4YTg2NywgMHgwMTM5LCAweGE4N2EsIDB4YTk4MiwgMHgwODBjLAorCTB4NzAxMiwgMHgwMTJlLCAweDBjYTAsIDB4YTk5NCwgMHg5MTg2LCAweDAwNzEsIDB4MDkwNCwgMHg3YzhmLAorCTB4OTE4NiwgMHgwMDY0LCAweDA5MDQsIDB4N2M4ZiwgMHg5MTg2LCAweDAwN2MsIDB4MDkwNCwgMHg3YzhmLAorCTB4OTE4NiwgMHgwMDI4LCAweDA5MDQsIDB4N2M4ZiwgMHg5MTg2LCAweDAwMzgsIDB4MDkwNCwgMHg3YzhmLAorCTB4OTE4NiwgMHgwMDc4LCAweDA5MDQsIDB4N2M4ZiwgMHg5MTg2LCAweDAwNWYsIDB4MDkwNCwgMHg3YzhmLAorCTB4OTE4NiwgMHgwMDU2LCAweDA5MDQsIDB4N2M4ZiwgMHhhODk3LCAweDQwMDUsIDB4YTg5YiwgMHgwMDAxLAorCTB4MjAwMSwgMHgwMDMwLCAweDkwMGUsIDB4MDg2MCwgMHhhODdjLCAweDkwODQsIDB4MDBjMCwgMHg5MDg2LAorCTB4MDBjMCwgMHgxMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwODA0LCAweDgwMjQsIDB4MjkwMCwgMHg3MDE2LAorCTB4NzAxYSwgMHgyMGE5LCAweDAwMDQsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDMwLAorCTB4MjA5OCwgMHg3MDUwLCAweDIwNDAsIDB4YTA2MCwgMHgyMGU4LCAweGEwNWMsIDB4OTA4MCwgMHgwMDIzLAorCTB4MjBhMCwgMHg0MDAzLCAweGE4ODgsIDB4NzAxMiwgMHg5MDgyLCAweDA0MDEsIDB4MWEwNCwgMHg3YzMwLAorCTB4YWFiNCwgMHg5MjhhLCAweDAwMDIsIDB4MWEwNCwgMHg3YzMwLCAweDgyZmYsIDB4MTEzOCwgMHhhOGI4LAorCTB4YTliYywgMHg5MTA1LCAweDAxMTgsIDB4MjAwMSwgMHg3ZGIxLCAweDAwMTgsIDB4OTI4MCwgMHg3ZGE3LAorCTB4MjAwNSwgMHg3MDU2LCAweDcwMTAsIDB4OTAxNSwgMHgwOTA0LCAweDdkOTIsIDB4MDgwYywgMHgxMDcyLAorCTB4MTExOCwgMHg3MDA3LCAweDAwMDQsIDB4MDAwNSwgMHgyOTAwLCAweDcwMjIsIDB4NzA1NCwgMHgyMDYwLAorCTB4ZTAwMCwgMHhhODY2LCAweDcwNTAsIDB4MjA0MCwgMHhhOTVjLCAweGUwMDQsIDB4OTEwMCwgMHhhMDc2LAorCTB4YTg2MCwgMHhhMDcyLCAweGUwMDgsIDB4OTIwYSwgMHgxMjEwLCAweDkwMGUsIDB4MjIwMCwgMHg3MTEyLAorCTB4ZTIwYywgMHg4MDAzLCAweDgwMGIsIDB4OTI5NiwgMHgwMDA0LCAweDAxMDgsIDB4OTEwOCwgMHhhMTdhLAorCTB4ODEwYiwgMHhhMTdlLCAweDA4MGMsIDB4MTE0ZSwgMHhhMDZjLCAweDkwOGUsIDB4MDEwMCwgMHgwMTcwLAorCTB4OTA4NiwgMHgwMjAwLCAweDAxMTgsIDB4NzAwNywgMHgwMDA3LCAweDAwMDUsIDB4NzAyMCwgMHgyMDQ4LAorCTB4MDgwYywgMHgxMDhiLCAweDcwMTQsIDB4MjA0OCwgMHgwODA0LCAweDdjMzAsIDB4NzAyMCwgMHgyMDQ4LAorCTB4NzAxOCwgMHhhODAyLCAweGE4MDcsIDB4MDAwMCwgMHgyOTA4LCAweDIwNDgsIDB4YTkwNiwgMHg3MTFhLAorCTB4MDgwNCwgMHg3ZDRhLCAweDcwMTQsIDB4MjA0OCwgMHg3MDA3LCAweDAwMDEsIDB4YThiNCwgMHg5MDA1LAorCTB4MTEyOCwgMHhhOGI4LCAweGE5YmMsIDB4OTEwNSwgMHgwMTA4LCAweDAwYjksIDB4YTg2NCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MDg2LCAweDAwMWUsIDB4MDkwNCwgMHg4MDI0LCAweDA4MDQsIDB4N2RmMywgMHg3ZGE5LAorCTB4N2RhZCwgMHgwMDAyLCAweDAwMWQsIDB4MDAwNywgMHgwMDA0LCAweDAwMGEsIDB4MDAxYiwgMHgwMDA1LAorCTB4MDAwNiwgMHgwMDBhLCAweDAwMWQsIDB4MDAwNSwgMHgwMDA0LCAweDAwNzYsIDB4MDA2NiwgMHhhZmI4LAorCTB4YWViYywgMHhhODA0LCAweDIwNTAsIDB4YjBjMCwgMHhiMGUyLCAweGIwYmMsIDB4YjBkZSwgMHhiMGI4LAorCTB4YjBkMiwgMHhiMGI0LCAweGIwY2UsIDB4YjZkYSwgMHhiN2Q2LCAweGIwYjAsIDB4YjBjYSwgMHhiMGFjLAorCTB4YjBjNiwgMHhiMGE4LCAweGIwYmEsIDB4YjBhNCwgMHhiMGI2LCAweGI2YzIsIDB4YjdiZSwgMHhiMGEwLAorCTB4YjBiMiwgMHhiMDljLCAweGIwYWUsIDB4YjA5OCwgMHhiMGEyLCAweGIwOTQsIDB4YjA5ZSwgMHhiNmFhLAorCTB4YjdhNiwgMHhiMDkwLCAweGIwOWEsIDB4YjA4YywgMHhiMDk2LCAweGIwODgsIDB4YjA4YSwgMHhiMDg0LAorCTB4YjA4NiwgMHhiNjkyLCAweGI3OGUsIDB4YjA4MCwgMHhiMDgyLCAweGIwN2MsIDB4YjA3ZSwgMHhiMDc4LAorCTB4YjA3MiwgMHhiMDc0LCAweGIwNmUsIDB4YjY3YSwgMHhiNzc2LCAweGIwMDQsIDB4OTA1NSwgMHgxOTU4LAorCTB4MDA2ZSwgMHgwMDdlLCAweDAwMDUsIDB4MjAwOSwgMHgxODM0LCAweDIxMGMsIDB4ODFmZiwgMHgxMTc4LAorCTB4MDgwYywgMHg2MjJmLCAweDExMDgsIDB4MDAwNSwgMHgwODBjLCAweDcyNWUsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgwODBjLCAweGQyMjAsIDB4MDgwYywgMHg3MDEyLCAweDAxMmUsIDB4MGNhMCwgMHgwODBjLAorCTB4ZDYzZSwgMHgxZDcwLCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLCAweDBjNzAsIDB4MjAwOSwgMHgxODM0LAorCTB4MjEwYywgMHg4MWZmLCAweDExODgsIDB4YTg4OCwgMHg5MDA1LCAweDAxODgsIDB4YTg4MywgMHgwMDAwLAorCTB4MDgwYywgMHg2MmJkLCAweDExMDgsIDB4MDAwNSwgMHhhODdhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MDgwYywgMHg3MDEyLCAweDAxMmUsIDB4MGNiOCwgMHgyMDAxLCAweDAwMjgsIDB4MGNhOCwgMHgyMDAxLAorCTB4MDAwMCwgMHgwYzkwLCAweDA0MTksIDB4MTFkOCwgMHhhODg4LCAweDkwMDUsIDB4MDFlMCwgMHhhODgzLAorCTB4MDAwMCwgMHhhODdjLCAweGQwZjQsIDB4MDEyMCwgMHgwODBjLCAweDYzOTIsIDB4MTEzOCwgMHgwMDA1LAorCTB4OTAwNiwgMHhhODdhLCAweDA4MGMsIDB4NjMwYSwgMHgxMTA4LCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHhhODdhLCAweGE5ODIsIDB4MDgwYywgMHg3MDEyLCAweDAxMmUsIDB4MGNiMCwgMHgyMDAxLAorCTB4MDAyOCwgMHg5MDBlLCAweDBjOTgsIDB4MjAwMSwgMHgwMDAwLCAweDBjODAsIDB4MDBjNiwgMHgyMDYxLAorCTB4MTgwMCwgMHg2MGQwLCAweDkwMDUsIDB4MDEwMCwgMHgwMGNlLCAweDAwMDUsIDB4NzAxOCwgMHhhODAyLAorCTB4MjkwOCwgMHgyMDQ4LCAweGE5MDYsIDB4NzExYSwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHgwMTE4LAorCTB4NzAwNywgMHgwMDAzLCAweDAwMzAsIDB4NzAxNCwgMHgyMDQ4LCAweDcwMDcsIDB4MDAwMSwgMHg3MDQ4LAorCTB4MDgwZiwgMHgwMDA1LCAweDAwYjYsIDB4NzAwNywgMHgwMDAxLCAweGE5NzQsIDB4YTg3OCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MDk2LCAweDAwMDQsIDB4MDU0MCwgMHgyMGE5LCAweDAwMDEsIDB4OTA5NiwgMHgwMDAxLAorCTB4MDE5MCwgMHg5MDBlLCAweDIwYTksIDB4MDgwMCwgMHg5MDk2LCAweDAwMDIsIDB4MDE2MCwgMHg5MDA1LAorCTB4MTFkOCwgMHhhOTc0LCAweDA4MGMsIDB4NjdiNCwgMHgxMWI4LCAweDAwNjYsIDB4YWU4MCwgMHgwODBjLAorCTB4NjhjNCwgMHgwMDZlLCAweDAwODgsIDB4MDA0NiwgMHgyMDExLCAweDE4MGMsIDB4MjIyNCwgMHhjNDg0LAorCTB4MjQxMiwgMHgwMDRlLCAweDAwYzYsIDB4MDgwYywgMHg2N2I0LCAweDExMTAsIDB4MDgwYywgMHg2YTllLAorCTB4ODEwOCwgMHgxZjA0LCAweDdlOTMsIDB4MDBjZSwgMHhhODdjLCAweGQwODQsIDB4MTEyMCwgMHgwODBjLAorCTB4MTA4YiwgMHgwMGJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg3MDEyLAorCTB4MDEyZSwgMHgwMGJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwNywgMHgwMDAxLAorCTB4MDgwYywgMHg2YzBkLCAweDA1ODAsIDB4MjA2MSwgMHgxYTczLCAweDYxMDAsIDB4ZDE4NCwgMHgwMTc4LAorCTB4YTg4OCwgMHg5MDg0LCAweDAwZmYsIDB4MTU1MCwgMHg2MDAwLCAweGQwODQsIDB4MDUyMCwgMHg2MDA0LAorCTB4OTAwNSwgMHgxNTM4LCAweDYwMDMsIDB4MDAwMCwgMHg2MDBiLCAweDAwMDAsIDB4MDBjOCwgMHgyMDExLAorCTB4MDAwMSwgMHhhODkwLCAweDkwMDUsIDB4MTExMCwgMHgyMDAxLCAweDAwMWUsIDB4ODAwMCwgMHg2MDE2LAorCTB4YTg4OCwgMHg5MDg0LCAweDAwZmYsIDB4MDE3OCwgMHg2MDA2LCAweGE4ODgsIDB4ODAwNywgMHg5MDg0LAorCTB4MDBmZiwgMHgwMTQ4LCAweDYwMGEsIDB4YTg4OCwgMHg4MDAwLCAweDExMDgsIDB4YzI4ZCwgMHg2MjAyLAorCTB4MDEyZSwgMHgwODA0LCAweDgwZWQsIDB4MDEyZSwgMHgwODA0LCAweDgwZTcsIDB4MDEyZSwgMHgwODA0LAorCTB4ODBlMSwgMHgwMTJlLCAweDA4MDQsIDB4ODBlNCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LAorCTB4MDAwMSwgMHgwODBjLCAweDZjMGQsIDB4MDVlMCwgMHgyMDYxLCAweDFhNzMsIDB4NjAwMCwgMHhkMDg0LAorCTB4MDViOCwgMHg2MjA0LCAweDYzMDgsIDB4ZDA4YywgMHgxNTMwLCAweGFjNzgsIDB4OTQ4NCwgMHgwMDAzLAorCTB4MDE3MCwgMHhhOTg4LCAweDkxOGMsIDB4MDBmZiwgMHg4MDAxLCAweDExMjAsIDB4MjEwMCwgMHg5MjEwLAorCTB4MDYyMCwgMHgwMDI4LCAweDgwMDEsIDB4MTUwOCwgMHgyMTAwLCAweDkyMTIsIDB4MDJmMCwgMHg5NDg0LAorCTB4MDAwYywgMHgwMTg4LCAweGE5ODgsIDB4ODEwZiwgMHg5MThjLCAweDAwZmYsIDB4OTA4MiwgMHgwMDA0LAorCTB4MTEyMCwgMHgyMTAwLCAweDkzMTgsIDB4MDI4OCwgMHgwMDMwLCAweDkwODIsIDB4MDAwNCwgMHgxMTY4LAorCTB4MjEwMCwgMHg5MzFhLCAweDAyNTAsIDB4YTg5MCwgMHg5MDA1LCAweDAxMTAsIDB4ODAwMCwgMHg2MDE2LAorCTB4NjIwNiwgMHg2MzBhLCAweDAxMmUsIDB4MDgwNCwgMHg4MGVkLCAweDAxMmUsIDB4MDgwNCwgMHg4MGVhLAorCTB4MDEyZSwgMHgwODA0LCAweDgwZTcsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwNywgMHgwMDAxLAorCTB4MjA2MSwgMHgxYTczLCAweDYzMDAsIDB4ZDM4YywgMHgxMTIwLCAweDYzMDgsIDB4ODMxOCwgMHgwMjIwLAorCTB4NjMwYSwgMHgwMTJlLCAweDA4MDQsIDB4ODBmYiwgMHgwMTJlLCAweDA4MDQsIDB4ODBlYSwgMHgwMGI2LAorCTB4MDEyNiwgMHgwMGM2LCAweDIwOTEsIDB4ODAwMCwgMHg3MDA3LCAweDAwMDEsIDB4YTg3YywgMHhkMGFjLAorCTB4MDE0OCwgMHgwMGM2LCAweDIwNjEsIDB4MWE3MywgMHg2MDAwLCAweDkwODQsIDB4ZmNmZiwgMHg2MDAyLAorCTB4MDBjZSwgMHgwNDQwLCAweGE4ODgsIDB4OTAwNSwgMHgwNWQ4LCAweGE4OGMsIDB4OTA2NSwgMHgwNTk4LAorCTB4MjAwMSwgMHgxODM0LCAweDIwMDQsIDB4OTAwNSwgMHgwMTE4LCAweDA4MGMsIDB4YjFhNywgMHgwMDY4LAorCTB4NjAxNywgMHhmNDAwLCAweDYwNjMsIDB4MDAwMCwgMHhhOTdjLCAweGQxYTQsIDB4MDExMCwgMHhhOTgwLAorCTB4NjE2MiwgMHgyMDA5LCAweDAwNDEsIDB4MDgwYywgMHhiMjBhLCAweGE5ODgsIDB4OTE4YywgMHhmZjAwLAorCTB4OTE4NiwgMHgyMDAwLCAweDExMzgsIDB4MDAyNiwgMHg5MDBlLCAweDIwMTEsIDB4ZmRmZiwgMHgwODBjLAorCTB4OGM0NCwgMHgwMDJlLCAweGE4N2MsIDB4ZDBjNCwgMHgwMTQ4LCAweDIwNjEsIDB4MWE3MywgMHg2MDAwLAorCTB4ZDA4YywgMHgxMTIwLCAweDYwMDgsIDB4ODAwMCwgMHgwMjA4LCAweDYwMGEsIDB4MDBjZSwgMHgwMTJlLAorCTB4MDBiZSwgMHgwODA0LCAweDgwZWQsIDB4MDBjZSwgMHgwMTJlLCAweDAwYmUsIDB4MDgwNCwgMHg4MGU3LAorCTB4YTk4NCwgMHg5MTg2LCAweDAwMmUsIDB4MGQzMCwgMHg5MTg2LCAweDAwMmQsIDB4MGQxOCwgMHg5MTg2LAorCTB4MDA0NSwgMHgwNTEwLCAweDkxODYsIDB4MDAyYSwgMHgxMTMwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLAorCTB4YzE5NCwgMHgyMTAyLCAweDA4YjgsIDB4OTE4NiwgMHgwMDIwLCAweDAxNTgsIDB4OTE4NiwgMHgwMDI5LAorCTB4MWQxMCwgMHhhOTc0LCAweDA4MGMsIDB4NjdiNCwgMHgxOTY4LCAweGI4MDAsIDB4YzBlNCwgMHhiODAyLAorCTB4MDg0OCwgMHhhODhjLCAweDkwNjUsIDB4MDliOCwgMHg2MDA3LCAweDAwMjQsIDB4MjAwMSwgMHgxOTg2LAorCTB4MjAwNCwgMHg2MDFhLCAweDA4MDQsIDB4N2Y4MiwgMHhhODhjLCAweDkwNjUsIDB4MDk2MCwgMHgwMGU2LAorCTB4YTg5MCwgMHg5MDc1LCAweDIwMDEsIDB4MTgzNCwgMHgyMDA0LCAweDkwMDUsIDB4MDE1MCwgMHgwODBjLAorCTB4YjFhNywgMHg4ZWZmLCAweDAxMTgsIDB4MmU2MCwgMHgwODBjLCAweGIxYTcsIDB4MDBlZSwgMHgwODA0LAorCTB4N2Y4MiwgMHg2MDI0LCAweGMwZGMsIDB4YzBkNSwgMHg2MDI2LCAweDJlNjAsIDB4NjAwNywgMHgwMDNhLAorCTB4YThhMCwgMHg5MDA1LCAweDAxMzAsIDB4NjAwNywgMHgwMDNiLCAweGE4YTQsIDB4NjAyZSwgMHhhOGE4LAorCTB4NjAxNiwgMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTYxNywgMHgwMGVlLAorCTB4MDgwNCwgMHg3ZjgyLCAweDIwNjEsIDB4MWE3MywgMHg2MDAwLCAweGQwODQsIDB4MDE5MCwgMHhkMDhjLAorCTB4MTkwNCwgMHg4MGZiLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyMDQsIDB4ODIxMCwgMHgwMjIwLAorCTB4NjIwNiwgMHgwMTJlLCAweDA4MDQsIDB4ODBmYiwgMHgwMTJlLCAweGE4ODMsIDB4MDAxNiwgMHgwODA0LAorCTB4ODBmNCwgMHhhODgzLCAweDAwMDcsIDB4MDgwNCwgMHg4MGY0LCAweGE4NjQsIDB4ODAwNywgMHg5MDg0LAorCTB4MDBmZiwgMHgwMTMwLCAweDgwMDEsIDB4MTEzOCwgMHg3MDA3LCAweDAwMDEsIDB4MDA2OSwgMHgwMDA1LAorCTB4MDgwYywgMHg3YzI4LCAweDAwNDAsIDB4NzAwNywgMHgwMDAzLCAweDcwMTIsIDB4MjkwMCwgMHg3MDE2LAorCTB4NzAxYSwgMHg3MDRiLCAweDgwMjQsIDB4MDAwNSwgMHgwMGI2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg5MDNlLCAweDIwNjEsIDB4MTgwMCwgMHg2MWQwLCAweDgxZmYsIDB4MTkwNCwgMHg4MGE2LAorCTB4NjEzMCwgMHhkMTk0LCAweDE5MDQsIDB4ODBkMCwgMHhhODc4LCAweDIwNzAsIDB4OWU4MiwgMHgxZGRjLAorCTB4MGEwNCwgMHg4MDlhLCAweDYwNjgsIDB4OWUwMiwgMHgxYTA0LCAweDgwOWEsIDB4NzEyMCwgMHg5MTg2LAorCTB4MDAwNiwgMHgxOTA0LCAweDgwOGMsIDB4NzAxMCwgMHg5MDVkLCAweDA5MDQsIDB4ODBhNiwgMHhiODAwLAorCTB4ZDBlNCwgMHgxOTA0LCAweDgwY2EsIDB4MjA2MSwgMHgxYTczLCAweDYxMDAsIDB4OTE4NCwgMHgwMzAxLAorCTB4OTA4NiwgMHgwMDAxLCAweDE1YTAsIDB4NzAyNCwgMHhkMGRjLCAweDE5MDQsIDB4ODBkMywgMHhhODgzLAorCTB4MDAwMCwgMHhhODAzLCAweDAwMDAsIDB4MjkwOCwgMHg3MDE0LCAweDkwMDUsIDB4MTE5OCwgMHg3MTE2LAorCTB4YTg3YywgMHhkMGY0LCAweDE5MDQsIDB4ODBkNiwgMHgwODBjLCAweDU4NDAsIDB4ZDA5YywgMHgxMTE4LAorCTB4YTg3YywgMHhjMGNjLCAweGE4N2UsIDB4MmU2MCwgMHgwODBjLCAweDhiMzQsIDB4MDEyZSwgMHgwMGVlLAorCTB4MDBiZSwgMHgwMDA1LCAweDIwNDgsIDB4YTgwMCwgMHg5MDA1LCAweDFkZTAsIDB4YTkwMiwgMHgyMTQ4LAorCTB4YTg3YywgMHhkMGY0LCAweDE5MDQsIDB4ODBkNiwgMHgwMTJlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LAorCTB4MDEyZSwgMHgwMGVlLCAweGE4ODMsIDB4MDAwNiwgMHgwMGJlLCAweDA4MDQsIDB4ODBmNCwgMHhkMTg0LAorCTB4MGRiOCwgMHhkMWM0LCAweDExOTAsIDB4MDBhMCwgMHhhOTc0LCAweDA4MGMsIDB4NjdiNCwgMHgxNWQwLAorCTB4YjgwMCwgMHhkMGU0LCAweDE1YjgsIDB4NzEyMCwgMHg5MTg2LCAweDAwMDcsIDB4MTExOCwgMHhhODgzLAorCTB4MDAwMiwgMHgwNDkwLCAweGE4ODMsIDB4MDAwOCwgMHgwNDc4LCAweGE4ODMsIDB4MDAwZSwgMHgwNDYwLAorCTB4YTg4MywgMHgwMDE3LCAweDA0NDgsIDB4YTg4MywgMHgwMDM1LCAweDA0MzAsIDB4MDgwYywgMHg1ODQ0LAorCTB4ZDBmYywgMHgwMWU4LCAweGE4NzgsIDB4MjA3MCwgMHg5ZTgyLCAweDFkZGMsIDB4MDJjMCwgMHg2MDY4LAorCTB4OWUwMiwgMHgxMmE4LCAweDcxMjAsIDB4OTE4NiwgMHgwMDA2LCAweDExODgsIDB4NzAxMCwgMHg5MDVkLAorCTB4MDE3MCwgMHhiODAwLCAweGQwYmMsIDB4MDE1OCwgMHgyMDM5LCAweDAwMDEsIDB4NzAwMCwgMHg5MDg2LAorCTB4MDAwNywgMHgxOTA0LCAweDgwMzAsIDB4NzAwMywgMHgwMDAyLCAweDA4MDQsIDB4ODAzMCwgMHhhODgzLAorCTB4MDAyOCwgMHgwMDEwLCAweGE4ODMsIDB4MDAyOSwgMHgwMTJlLCAweDAwZWUsIDB4MDBiZSwgMHgwNDIwLAorCTB4YTg4MywgMHgwMDJhLCAweDBjYzgsIDB4YTg4MywgMHgwMDQ1LCAweDBjYjAsIDB4MmU2MCwgMHgyMDE5LAorCTB4MDAwMiwgMHg2MDFiLCAweDAwMTQsIDB4MDgwYywgMHhlNTg2LCAweDAxMmUsIDB4MDBlZSwgMHgwMGJlLAorCTB4MDAwNSwgMHgyMDA5LCAweDAwM2UsIDB4MDA1OCwgMHgyMDA5LCAweDAwMDQsIDB4MDA0MCwgMHgyMDA5LAorCTB4MDAwNiwgMHgwMDI4LCAweDIwMDksIDB4MDAxNiwgMHgwMDEwLCAweDIwMDksIDB4MDAwMSwgMHhhODg0LAorCTB4OTA4NCwgMHhmZjAwLCAweDkxMDUsIDB4YTg4NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLAorCTB4NzAxMiwgMHgwMTJlLCAweDAwMDUsIDB4MDgwYywgMHgxMDhiLCAweDAwMDUsIDB4MDBkNiwgMHgwODBjLAorCTB4OGIyYiwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MjA3MSwgMHgwMDQwLCAweDcwMmMsIDB4ZDA4NCwgMHgwMWQ4LCAweDkwOGMsIDB4MDc4MCwgMHgxOTBjLAorCTB4ODFlNSwgMHhkMDljLCAweDExYTgsIDB4MjA3MSwgMHgxODAwLCAweDcwYzAsIDB4OTBlYSwgMHgwMDIwLAorCTB4MDI3OCwgMHg4MDAxLCAweDcwYzIsIDB4NzAyYywgMHgyMDQ4LCAweGE4MDAsIDB4NzAyZSwgMHg5MDA2LAorCTB4YTgwMiwgMHhhODA2LCAweDIwNzEsIDB4MDA0MCwgMHgyOTAwLCAweDcwMjIsIDB4NzAyYywgMHgwYzI4LAorCTB4MDEyZSwgMHgwMGVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDA2LCAweDkwODQsIDB4MDc4MCwgMHgxOTBjLAorCTB4ODFlNSwgMHgwMDBlLCAweDAwMDUsIDB4YTg5OCwgMHg5MDg0LCAweDAwMDMsIDB4MDVhOCwgMHgwODBjLAorCTB4YjExNiwgMHgwNWQ4LCAweDI5MDAsIDB4NjAxNiwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LAorCTB4MDAzNSwgMHgxMTM4LCAweDYwMjgsIDB4YzBmZCwgMHg2MDJhLCAweDIwMDEsIDB4MTk2YiwgMHgyMDA0LAorCTB4MDA5OCwgMHhhOGEwLCAweDkwODQsIDB4MDBmZiwgMHhhOTljLCAweDkxOGMsIDB4ZmYwMCwgMHg5MTA1LAorCTB4YTk5YywgMHg5MThjLCAweDAwZmYsIDB4MDgwYywgMHgyNjhjLCAweDE1NDAsIDB4MDBiNiwgMHgwODBjLAorCTB4NjdiNCwgMHgyYjAwLCAweDAwYmUsIDB4MTUxMCwgMHg2MDEyLCAweDYwMjMsIDB4MDAwMSwgMHgyMDA5LAorCTB4MDA0MCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzUsIDB4MDExMCwgMHgyMDA5LAorCTB4MDA0MSwgMHgwODBjLCAweGIyMGEsIDB4MDAwNSwgMHhhODdiLCAweDAxMDEsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgwODBjLCAweDcwMTIsIDB4MDEyZSwgMHgwMDA1LCAweGE4N2IsIDB4MDAyYywgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NzAxMiwgMHgwMTJlLCAweDAwMDUsIDB4YTg3YiwgMHgwMDI4LAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg3MDEyLCAweDAxMmUsIDB4MDgwYywgMHhiMTZjLAorCTB4MDAwNSwgMHgwMGQ2LCAweDAwYzYsIDB4MDAzNiwgMHgwMDI2LCAweDAwMTYsIDB4MDBiNiwgMHg3MDA3LAorCTB4MDAwMSwgMHhhYTc0LCAweDkyODIsIDB4MDAwNCwgMHgxYTA0LCAweDgxZDYsIDB4YTk3YywgMHg5MTg4LAorCTB4MTAwMCwgMHgyMTA0LCAweDkwNWQsIDB4YjgwNCwgMHhkMjg0LCAweDAxNDAsIDB4MDVlOCwgMHg4MDA3LAorCTB4OTA4NCwgMHgwMGZmLCAweDkwODQsIDB4MDAwNiwgMHgxMTA4LCAweDA0YjAsIDB4MmIxMCwgMHgwODBjLAorCTB4YjExNiwgMHgxMTE4LCAweDA4MGMsIDB4YjFkZCwgMHgwNWE4LCAweDYyMTIsIDB4YTg3NCwgMHgwMDAyLAorCTB4ODFiNCwgMHg4MWI5LCAweDgxYmMsIDB4ODFjMiwgMHgyMDE5LCAweDAwMDIsIDB4MDgwYywgMHhlOWY5LAorCTB4MDA2MCwgMHgwODBjLCAweGU5ODQsIDB4MDA0OCwgMHgyMDE5LCAweDAwMDIsIDB4YTk4MCwgMHgwODBjLAorCTB4ZTlhMywgMHgwMDE4LCAweGE5ODAsIDB4MDgwYywgMHhlOTg0LCAweDA4MGMsIDB4YjE2YywgMHhhODg3LAorCTB4MDAwMCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDcwMTIsIDB4MDEyZSwgMHgwMGJlLAorCTB4MDAxZSwgMHgwMDJlLCAweDAwM2UsIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4YTg4NywgMHgwMDA2LAorCTB4MGM4MCwgMHhhODg3LCAweDAwMDIsIDB4MGM2OCwgMHhhODg3LCAweDAwMDUsIDB4MGM1MCwgMHhhODg3LAorCTB4MDAwNCwgMHgwYzM4LCAweGE4ODcsIDB4MDAwNywgMHgwYzIwLCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LAorCTB4ODFlNywgMHgwMDA2LCAweDAwMTYsIDB4MjAwMSwgMHg4MDAzLCAweDAwMDYsIDB4MDgwNCwgMHgwZDhlLAorCTB4MjAwMSwgMHgxODM0LCAweDIwMDQsIDB4OTAwNSwgMHgwMDA1LCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LAorCTB4MDMwMCwgMHgyMDAxLCAweDAyMDAsIDB4MjAwYywgMHhjMWU1LCAweGMxZGMsIDB4MjEwMiwgMHgyMDA5LAorCTB4MDIxOCwgMHgyMTBjLCAweGQxZWMsIDB4MTEyMCwgMHgwODBjLCAweDE2NDgsIDB4MDBmZSwgMHgwMDA1LAorCTB4MjAwMSwgMHgwMjBkLCAweDIwMDMsIDB4MDAyMCwgMHg3ODFmLCAweDAzMDAsIDB4MDBmZSwgMHgwMDA1LAorCTB4NzgxYywgMHhkMDhjLCAweDA5MDQsIDB4ODI2OCwgMHg2OGMwLCAweDkwYWEsIDB4MDAwNSwgMHgwYTA0LAorCTB4ODg5MCwgMHg3ZDQ0LCAweDdjNDAsIDB4ZDU5YywgMHgxOTBjLCAweDBkODUsIDB4OTU4NCwgMHgwMGY2LAorCTB4MTUwOCwgMHg5NDg0LCAweDcwMDAsIDB4MDEzOCwgMHg5MDhhLCAweDIwMDAsIDB4MTI1OCwgMHg5NTg0LAorCTB4MDcwMCwgMHg4MDA3LCAweDA0ZjAsIDB4NzAwMCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHg4MTAwLAorCTB4MGRiMCwgMHgwMGIwLCAweDk0ODQsIDB4MGZmZiwgMHgxMTMwLCAweDcwMDAsIDB4OTA4NCwgMHhmZjAwLAorCTB4OTA4NiwgMHg4MTAwLCAweDExYzAsIDB4MDgwYywgMHhlZWIxLCAweDA4MGMsIDB4ODc3NywgMHg3ODE3LAorCTB4MDE0MCwgMHgwMGE4LCAweDk1ODQsIDB4MDA3NiwgMHgxMTE4LCAweDA4MGMsIDB4ODdkMywgMHgxOWM4LAorCTB4ZDVhNCwgMHgwMTQ4LCAweDAwNDYsIDB4MDA1NiwgMHgwODBjLCAweDgyYjgsIDB4MDgwYywgMHgyMTg1LAorCTB4MDA1ZSwgMHgwMDRlLCAweDAwMjAsIDB4MDgwYywgMHhlZWIxLCAweDc4MTcsIDB4MDE0MCwgMHgwODBjLAorCTB4Nzc5ZSwgMHgwMTY4LCAweDIwMDEsIDB4MDExMSwgMHgyMDA0LCAweGQwOGMsIDB4MDE0MCwgMHg2ODkzLAorCTB4MDAwMCwgMHgyMDAxLCAweDAxMTAsIDB4MjAwMywgMHgwMDA4LCAweDIwMDMsIDB4MDAwMCwgMHgwNDg5LAorCTB4MDAwNSwgMHgwMDAyLCAweDgyNzUsIDB4ODU4NSwgMHg4MjcyLCAweDgyNzIsIDB4ODI3MiwgMHg4MjcyLAorCTB4ODI3MiwgMHg4MjcyLCAweDc4MTcsIDB4MDE0MCwgMHgwMDA1LCAweDcwMDAsIDB4OTA4YywgMHhmZjAwLAorCTB4OTE5NCwgMHhmMDAwLCAweDgxMGYsIDB4OTQ4NCwgMHgwZmZmLCAweDY4OTIsIDB4OTI4NiwgMHgyMDAwLAorCTB4MTE1MCwgMHg2ODAwLCAweDkwODYsIDB4MDAwMSwgMHgxMTE4LCAweDA4MGMsIDB4NThhYSwgMHgwMDcwLAorCTB4MDgwYywgMHg4MmQ4LCAweDAwNTgsIDB4OTI4NiwgMHgzMDAwLCAweDExMTgsIDB4MDgwYywgMHg4NGJmLAorCTB4MDAyOCwgMHg5Mjg2LCAweDgwMDAsIDB4MTExMCwgMHgwODBjLCAweDg2YTQsIDB4NzgxNywgMHgwMTQwLAorCTB4MDAwNSwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMDhjLCAweDAxNzgsIDB4MjAwMSwgMHgxODAwLAorCTB4MjAwNCwgMHg5MDg2LCAweDAwMDMsIDB4MTE0OCwgMHgwMDI2LCAweDAwMzYsIDB4MjAxMSwgMHg4MDQ4LAorCTB4MjUxOCwgMHgwODBjLCAweDRjYTEsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsIDB4MDAzNiwgMHgwMDQ2LAorCTB4MDA1NiwgMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHgyMDE5LCAweGZmZmUsIDB4N2MzMCwgMHgwMDUwLAorCTB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsIDB4N2Q0NCwgMHg3YzQwLAorCTB4MjAxOSwgMHhmZmZmLCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwOGMsIDB4MDE2MCwgMHgyMDAxLAorCTB4MTgwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTMwLCAweDAwMjYsIDB4MjAxMSwgMHg4MDQ4LAorCTB4MDgwYywgMHg0Y2ExLCAweDAwMmUsIDB4MDBmZSwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDA1LAorCTB4MDBiNiwgMHgwMGM2LCAweDcwMTAsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTA5NiwgMHgwMDAxLAorCTB4MDEyMCwgMHg5MDk2LCAweDAwMjMsIDB4MTkwNCwgMHg4NDkwLCAweDkxODYsIDB4MDAyMywgMHgxNWMwLAorCTB4MDgwYywgMHg4NzQyLCAweDA5MDQsIDB4ODQ5MCwgMHg2MTIwLCAweDkxODYsIDB4MDAwMSwgMHgwMTUwLAorCTB4OTE4NiwgMHgwMDA0LCAweDAxMzgsIDB4OTE4NiwgMHgwMDA4LCAweDAxMjAsIDB4OTE4NiwgMHgwMDBhLAorCTB4MTkwNCwgMHg4NDkwLCAweDcxMjQsIDB4NjEwYSwgMHg3MDMwLCAweDkwOGUsIDB4MDIwMCwgMHgxMTMwLAorCTB4MjAwOSwgMHgwMDE1LCAweDA4MGMsIDB4YjIwYSwgMHgwODA0LCAweDg0OTAsIDB4OTA4ZSwgMHgwMjE0LAorCTB4MDExOCwgMHg5MDhlLCAweDAyMTAsIDB4MTEzMCwgMHgyMDA5LCAweDAwMTUsIDB4MDgwYywgMHhiMjBhLAorCTB4MDgwNCwgMHg4NDkwLCAweDkwOGUsIDB4MDEwMCwgMHgxOTA0LCAweDg0OTAsIDB4NzAzNCwgMHg5MDA1LAorCTB4MTkwNCwgMHg4NDkwLCAweDIwMDksIDB4MDAxNiwgMHgwODBjLCAweGIyMGEsIDB4MDgwNCwgMHg4NDkwLAorCTB4OTE4NiwgMHgwMDIyLCAweDE5MDQsIDB4ODQ5MCwgMHg3MDMwLCAweDkwOGUsIDB4MDMwMCwgMHgxNTgwLAorCTB4NjhkYywgMHhkMGE0LCAweDA1MjgsIDB4YzBiNSwgMHg2OGRlLCAweDcxMDAsIDB4OTE4YywgMHgwMGZmLAorCTB4Njk3ZSwgMHg3MDA0LCAweDY4ODIsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzllNiwgMHg3OGVhLAorCTB4MDAwNiwgMHg5MDg0LCAweDAwZmYsIDB4MDAxNiwgMHgyMDA4LCAweDA4MGMsIDB4MjZkNSwgMHg3OTMyLAorCTB4NzkzNiwgMHgwMDFlLCAweDAwMGUsIDB4MDBmZSwgMHgwODBjLCAweDI2OGMsIDB4Njk1ZSwgMHg3MDNjLAorCTB4MDBlNiwgMHgyMDcxLCAweDAxNDAsIDB4NzA4NiwgMHgyMDcxLCAweDE4MDAsIDB4NzBiNiwgMHgwMGVlLAorCTB4NzAzNCwgMHg5MDA1LCAweDE5MDQsIDB4ODQ5MCwgMHgyMDA5LCAweDAwMTcsIDB4MDgwNCwgMHg4NDQwLAorCTB4OTA4ZSwgMHgwNDAwLCAweDExOTAsIDB4NzAzNCwgMHg5MDA1LCAweDE5MDQsIDB4ODQ5MCwgMHgwODBjLAorCTB4Nzc5ZSwgMHgwMTIwLCAweDIwMDksIDB4MDAxZCwgMHgwODA0LCAweDg0NDAsIDB4NjhkYywgMHhjMGE1LAorCTB4NjhkZSwgMHgyMDA5LCAweDAwMzAsIDB4MDgwNCwgMHg4NDQwLCAweDkwOGUsIDB4MDUwMCwgMHgxMTQwLAorCTB4NzAzNCwgMHg5MDA1LCAweDE5MDQsIDB4ODQ5MCwgMHgyMDA5LCAweDAwMTgsIDB4MDgwNCwgMHg4NDQwLAorCTB4OTA4ZSwgMHgyMDEwLCAweDExMjAsIDB4MjAwOSwgMHgwMDE5LCAweDA4MDQsIDB4ODQ0MCwgMHg5MDhlLAorCTB4MjExMCwgMHgxMTIwLCAweDIwMDksIDB4MDAxYSwgMHgwODA0LCAweDg0NDAsIDB4OTA4ZSwgMHg1MjAwLAorCTB4MTE0MCwgMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg4NDkwLCAweDIwMDksIDB4MDAxYiwgMHgwODA0LAorCTB4ODQ0MCwgMHg5MDhlLCAweDUwMDAsIDB4MTE0MCwgMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg4NDkwLAorCTB4MjAwOSwgMHgwMDFjLCAweDA4MDQsIDB4ODQ0MCwgMHg5MDhlLCAweDEzMDAsIDB4MTEyMCwgMHgyMDA5LAorCTB4MDAzNCwgMHgwODA0LCAweDg0NDAsIDB4OTA4ZSwgMHgxMjAwLCAweDExNDAsIDB4NzAzNCwgMHg5MDA1LAorCTB4MTkwNCwgMHg4NDkwLCAweDIwMDksIDB4MDAyNCwgMHgwODA0LCAweDg0NDAsIDB4OTA4YywgMHhmZjAwLAorCTB4OTE4ZSwgMHgyNDAwLCAweDExNzAsIDB4MjAwOSwgMHgwMDJkLCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LAorCTB4ZDA5YywgMHgwOTA0LCAweDg0NDAsIDB4MDgwYywgMHhkZDhkLCAweDE5MDQsIDB4ODQ5MCwgMHgwODA0LAorCTB4ODQzZSwgMHg5MDhjLCAweGZmMDAsIDB4OTE4ZSwgMHg1MzAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDJhLAorCTB4MDgwNCwgMHg4NDQwLCAweDkwOGUsIDB4MGYwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAyMCwgMHgwODA0LAorCTB4ODQ0MCwgMHg5MDhlLCAweDYxMDQsIDB4MTUzMCwgMHgyMDI5LCAweDAyMDUsIDB4MjAxMSwgMHgwMjZkLAorCTB4ODIwOCwgMHgyMjA0LCAweDkwODIsIDB4MDAwNCwgMHg4MDA0LCAweDgwMDQsIDB4MjBhOCwgMHgyMDExLAorCTB4ODAxNSwgMHgyMTFjLCAweDgxMDgsIDB4MDA0NiwgMHgyMTI0LCAweDA4MGMsIDB4NGNhMSwgMHgwMDRlLAorCTB4ODEwOCwgMHgwZjA0LCAweDgzZjQsIDB4OTE4NiwgMHgwMjgwLCAweDFkODgsIDB4MjUwNCwgMHg4MDAwLAorCTB4MjAyYSwgMHgyMDA5LCAweDAyNjAsIDB4MGM1OCwgMHgyMDJiLCAweDAwMDAsIDB4MjAwOSwgMHgwMDIzLAorCTB4MDgwNCwgMHg4NDQwLCAweDkwOGUsIDB4NjAwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAzZiwgMHgwODA0LAorCTB4ODQ0MCwgMHg5MDhlLCAweDU0MDAsIDB4MTEzOCwgMHgwODBjLCAweDg4NDAsIDB4MTkwNCwgMHg4NDkwLAorCTB4MjAwOSwgMHgwMDQ2LCAweDA0YTgsIDB4OTA4ZSwgMHg1NTAwLCAweDExNDgsIDB4MDgwYywgMHg4ODY4LAorCTB4MTExOCwgMHgyMDA5LCAweDAwNDEsIDB4MDQ2MCwgMHgyMDA5LCAweDAwNDIsIDB4MDQ0OCwgMHg5MDhlLAorCTB4NzgwMCwgMHgxMTE4LCAweDIwMDksIDB4MDA0NSwgMHgwNDE4LCAweDkwOGUsIDB4MTAwMCwgMHgxMTE4LAorCTB4MjAwOSwgMHgwMDRlLCAweDAwZTgsIDB4OTA4ZSwgMHg2MzAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDRhLAorCTB4MDBiOCwgMHg5MDhjLCAweGZmMDAsIDB4OTE4ZSwgMHg1NjAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDRmLAorCTB4MDA3OCwgMHg5MDhjLCAweGZmMDAsIDB4OTE4ZSwgMHg1NzAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDUwLAorCTB4MDAzOCwgMHgyMDA5LCAweDAwMWQsIDB4NjgzOCwgMHhkMGQ0LCAweDAxMTAsIDB4MjAwOSwgMHgwMDRjLAorCTB4MDAxNiwgMHgyMDExLCAweDAyNjMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyNjhjLAorCTB4MTkwNCwgMHg4NDkzLCAweDA4MGMsIDB4Njc0OSwgMHgxOTA0LCAweDg0OTMsIDB4YmUxMiwgMHhiZDE2LAorCTB4MDAxZSwgMHgwMDE2LCAweDA4MGMsIDB4Nzc5ZSwgMHgwMWMwLCAweDY4ZGMsIDB4ZDA4YywgMHgxMTQ4LAorCTB4NzAwMCwgMHg5MDg0LCAweDAwZmYsIDB4MTE4OCwgMHg3MDA0LCAweDkwODQsIDB4ZmYwMCwgMHgxMTY4LAorCTB4MDA0MCwgMHg2ODdjLCAweDk2MDYsIDB4MTE0OCwgMHg2ODgwLCAweDk1MDYsIDB4OTA4NCwgMHhmZjAwLAorCTB4MTEyMCwgMHg5NTg0LCAweDAwZmYsIDB4Yjg4NiwgMHgwMDgwLCAweGI4ODQsIDB4OTAwNSwgMHgxMTY4LAorCTB4OTE4NiwgMHgwMDQ2LCAweDExNTAsIDB4Njg3YywgMHg5NjA2LCAweDExMzgsIDB4Njg4MCwgMHg5NTA2LAorCTB4OTA4NCwgMHhmZjAwLCAweDExMTAsIDB4MDAxZSwgMHgwMDk4LCAweDA4MGMsIDB4YjExNiwgMHgwMWE4LAorCTB4MmIwOCwgMHg2MTEyLCAweDYwMjMsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4MDAxZSwgMHg5MTg2LAorCTB4MDA0YywgMHgxMTEwLCAweDYwMjMsIDB4MDAwYSwgMHgwMDE2LCAweDAwMWUsIDB4MDgwYywgMHhiMjBhLAorCTB4MDBjZSwgMHgwMGJlLCAweDAwMDUsIDB4MDAxZSwgMHgwY2Q4LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LAorCTB4ZDBlYywgMHgwMTIwLCAweDIwMTEsIDB4ODA0OSwgMHgwODBjLCAweDRjYTEsIDB4MDgwYywgMHhiMWRkLAorCTB4MGQ5MCwgMHgyYjA4LCAweDYxMTIsIDB4NjAyMywgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMDFlLAorCTB4MDAxNiwgMHg5MTg2LCAweDAwMTcsIDB4MDExOCwgMHg5MTg2LCAweDAwMzAsIDB4MTEyOCwgMHg2MDA3LAorCTB4MDAwOSwgMHg2MDE3LCAweDI5MDAsIDB4MDAyMCwgMHg2MDA3LCAweDAwNTEsIDB4NjAxNywgMHgwMDAwLAorCTB4NjAyZiwgMHgwMDA5LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk2MWUsIDB4MDhhMCwgMHgwODBjLAorCTB4ODhhZiwgMHgxMTU4LCAweDA4MGMsIDB4MzQ0YywgMHgxMTQwLCAweDcwMTAsIDB4OTA4NCwgMHhmZjAwLAorCTB4ODAwNywgMHg5MDhlLCAweDAwMDgsIDB4MTEwOCwgMHgwMDA5LCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LAorCTB4MDA0NiwgMHg3MDAwLCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzMywgMHgxMWU4LAorCTB4MDgwYywgMHg4NzQyLCAweDA5MDQsIDB4ODUxZCwgMHg3MTI0LCAweDYxMGEsIDB4NzAzMCwgMHg5MDhlLAorCTB4MDIwMCwgMHgxMTQwLCAweDcwMzQsIDB4OTAwNSwgMHgxNWMwLCAweDIwMDksIDB4MDAxNSwgMHgwODBjLAorCTB4YjIwYSwgMHgwNDk4LCAweDkwOGUsIDB4MDEwMCwgMHgxNTgwLCAweDcwMzQsIDB4OTAwNSwgMHgxNTY4LAorCTB4MjAwOSwgMHgwMDE2LCAweDA4MGMsIDB4YjIwYSwgMHgwNDQwLCAweDkxODYsIDB4MDAzMiwgMHgxNTI4LAorCTB4NzAzMCwgMHg5MDhlLCAweDE0MDAsIDB4MTUwOCwgMHgyMDA5LCAweDAwMzgsIDB4MDAxNiwgMHgyMDExLAorCTB4MDI2MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2OGMsIDB4MTFhOCwgMHgwODBjLAorCTB4Njc0OSwgMHgxMTkwLCAweGJlMTIsIDB4YmQxNiwgMHgwODBjLCAweGIxMTYsIDB4MDE2OCwgMHgyYjA4LAorCTB4NjExMiwgMHgwODBjLCAweGQzYjYsIDB4NjAyMywgMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMDFlLAorCTB4MDgwYywgMHhiMjBhLCAweDAwMTAsIDB4MDBjZSwgMHgwMDFlLCAweDAwNGUsIDB4MDBjZSwgMHgwMGJlLAorCTB4MDAwNSwgMHgwMGI2LCAweDAwNDYsIDB4MDBlNiwgMHgwMGQ2LCAweDIwMjgsIDB4MjEzMCwgMHg5Njk2LAorCTB4MDBmZiwgMHgxMWI4LCAweDk1OTIsIDB4ZmZmYywgMHgwMmEwLCAweDk1OTYsIDB4ZmZmZCwgMHgxMTIwLAorCTB4MjAwOSwgMHgwMDdmLCAweDA4MDQsIDB4ODU3ZiwgMHg5NTk2LCAweGZmZmUsIDB4MTEyMCwgMHgyMDA5LAorCTB4MDA3ZSwgMHgwODA0LCAweDg1N2YsIDB4OTU5NiwgMHhmZmZjLCAweDExMTgsIDB4MjAwOSwgMHgwMDgwLAorCTB4MDRmMCwgMHgyMDExLCAweDAwMDAsIDB4MjAxOSwgMHgxODM3LCAweDIzMWMsIDB4ZDNhYywgMHgwMTMwLAorCTB4OTAyNiwgMHgyMGE5LCAweDA4MDAsIDB4MjA3MSwgMHgxMDAwLCAweDAwMzAsIDB4MjAyMSwgMHgwMDgxLAorCTB4MjBhOSwgMHgwNzdmLCAweDIwNzEsIDB4MTA4MSwgMHgyZTFjLCAweDkzZGQsIDB4MDAwMCwgMHgxMTQwLAorCTB4ODJmZiwgMHgxMWQwLCAweDk0OTYsIDB4MDBmZiwgMHgwMWI4LCAweDI0MTAsIDB4YzJmZCwgMHgwMGEwLAorCTB4YmYxMCwgMHgyNjAwLCAweDk3MDYsIDB4YjgxNCwgMHgxMTIwLCAweDk1NDYsIDB4MTExMCwgMHgyNDA4LAorCTB4MDBiMCwgMHg5NzQ1LCAweDExNDgsIDB4OTRjNiwgMHgwMDdlLCAweDAxMzAsIDB4OTRjNiwgMHgwMDdmLAorCTB4MDExOCwgMHg5NGM2LCAweDAwODAsIDB4MWQyMCwgMHg4NDIwLCAweDhlNzAsIDB4MWYwNCwgMHg4NTU0LAorCTB4ODJmZiwgMHgxMTE4LCAweDkwODUsIDB4MDAwMSwgMHgwMDE4LCAweGMyZmMsIDB4MjIwOCwgMHg5MDA2LAorCTB4MDBkZSwgMHgwMGVlLCAweDAwNGUsIDB4MDBiZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgzNywgMHgyMDBjLAorCTB4OTE4NCwgMHgwMDgwLCAweDAxMTAsIDB4ZDE4YywgMHgwMTM4LCAweDcwMDAsIDB4OTA4YywgMHhmZjAwLAorCTB4ODEwZiwgMHg5MTg0LCAweDAwMGYsIDB4MDAxYSwgMHg3ODE3LCAweDAxNDAsIDB4MDAwNSwgMHg4NWE3LAorCTB4ODVhNywgMHg4NWE3LCAweDg3NTQsIDB4ODVhNywgMHg4NWFhLCAweDg1Y2YsIDB4ODY1OCwgMHg4NWE3LAorCTB4ODVhNywgMHg4NWE3LCAweDg1YTcsIDB4ODVhNywgMHg4NWE3LCAweDg1YTcsIDB4ODVhNywgMHg3ODE3LAorCTB4MDE0MCwgMHgwMDA1LCAweDAwYjYsIDB4NzExMCwgMHhkMWJjLCAweDAxZTgsIDB4NzEyMCwgMHgyMTYwLAorCTB4OWM4YywgMHgwMDAzLCAweDExYzAsIDB4OWM4YSwgMHgxZGRjLCAweDAyYTgsIDB4Njg2OCwgMHg5YzAyLAorCTB4MTI5MCwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MTEwLCAweDIxNTgsIDB4YjkxMCwgMHg5MTA2LAorCTB4MTE1MCwgMHg3MDBjLCAweGI5MTQsIDB4OTEwNiwgMHgxMTMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LAorCTB4MDA0NiwgMHgwODBjLCAweGIyMGEsIDB4NzgxNywgMHgwMTQwLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LAorCTB4MDBjNiwgMHg5NDg0LCAweDBmZmYsIDB4MDkwNCwgMHg4NjM0LCAweDcxMTAsIDB4ZDFiYywgMHgxOTA0LAorCTB4ODYzNCwgMHg3MTA4LCAweDcwMGMsIDB4MjAyOCwgMHg5MThjLCAweDAwZmYsIDB4MjEzMCwgMHg5MDk0LAorCTB4ZmYwMCwgMHgxNWM4LCAweDgxZmYsIDB4MTViOCwgMHg5MDgwLCAweDM0OGUsIDB4MjAwZCwgMHg5MThjLAorCTB4ZmYwMCwgMHg4MTBmLCAweDIwMDEsIDB4MDA4MCwgMHg5MTA2LCAweDA5MDQsIDB4ODYzNCwgMHg5MTgyLAorCTB4MDgwMSwgMHgxYTA0LCAweDg2MzQsIDB4OTE5MCwgMHgxMDAwLCAweDIyMDQsIDB4OTA1ZCwgMHgwNWUwLAorCTB4YmUxMiwgMHhiZDE2LCAweGI4MDAsIDB4ZDBlYywgMHgxNWI4LCAweGJhMDQsIDB4OTI5NCwgMHhmZjAwLAorCTB4OTI4NiwgMHgwNjAwLCAweDExOTAsIDB4MDgwYywgMHhiMTE2LCAweDA1OTgsIDB4MmIwOCwgMHg3MDI4LAorCTB4NjA0ZSwgMHg3MDJjLCAweDYwNTIsIDB4NjExMiwgMHg2MDIzLCAweDAwMDYsIDB4NzEyMCwgMHg2MTBhLAorCTB4NzEzMCwgMHg2MTVlLCAweDA4MGMsIDB4ZTAwOSwgMHgwMGY4LCAweDA4MGMsIDB4NmMxMSwgMHgxMTM4LAorCTB4YjgwNywgMHgwNjA2LCAweDBjNDAsIDB4MTkwYywgMHg4NTIxLCAweDExYjAsIDB4MDg4MCwgMHgwODBjLAorCTB4YjExNiwgMHgyYjA4LCAweDAxODgsIDB4NjExMiwgMHg2MDIzLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLAorCTB4OTI4NiwgMHgwNDAwLCAweDExMTgsIDB4NjAwNywgMHgwMDA1LCAweDAwMTAsIDB4NjAwNywgMHgwMDAxLAorCTB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTYxZSwgMHg3ODE3LCAweDAxNDAsIDB4MDBjZSwgMHgwMGJlLAorCTB4MDAwNSwgMHgyMDAxLCAweDE4MGUsIDB4MjAwNCwgMHhkMGVjLCAweDAxMjAsIDB4MjAxMSwgMHg4MDQ5LAorCTB4MDgwYywgMHg0Y2ExLCAweDA4MGMsIDB4YjFkZCwgMHgwZDc4LCAweDJiMDgsIDB4NjExMiwgMHg2MDIzLAorCTB4MDAwNiwgMHg3MTIwLCAweDYxMGEsIDB4NzEzMCwgMHg2MTVlLCAweDYwMTcsIDB4ZjMwMCwgMHg2MDAzLAorCTB4MDAwMSwgMHg2MDA3LCAweDAwNDEsIDB4MjAwOSwgMHhhMDIyLCAweDA4MGMsIDB4OTYxNywgMHgwOGUwLAorCTB4MDBiNiwgMHg3MTEwLCAweGQxYmMsIDB4MDVkMCwgMHg3MDIwLCAweDIwNjAsIDB4OWM4NCwgMHgwMDAzLAorCTB4MTVhOCwgMHg5YzgyLCAweDFkZGMsIDB4MDY5MCwgMHg2ODY4LCAweDljMDIsIDB4MTY3OCwgMHg5NDg0LAorCTB4MGZmZiwgMHg5MDgyLCAweDAwMGMsIDB4MDY1MCwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MTEwLAorCTB4MjE1OCwgMHhiOTEwLCAweDkxMDYsIDB4MTUxMCwgMHg3MDBjLCAweGI5MTQsIDB4OTEwNiwgMHgxMWYwLAorCTB4NzEyNCwgMHg2MTBhLCAweDYwMWMsIDB4ZDBmYywgMHgxMWM4LCAweDIwMDEsIDB4MDI3MSwgMHgyMDA0LAorCTB4OTAwNSwgMHgxMTgwLCAweDk0ODQsIDB4MGZmZiwgMHg5MDgyLCAweDAwMGMsIDB4MDE1OCwgMHgwMDY2LAorCTB4MjAzMSwgMHgwMTAwLCAweGEwMDEsIDB4YTAwMSwgMHg4NjMxLCAweDFkZTAsIDB4MDA2ZSwgMHg2MDFjLAorCTB4ZDBmYywgMHgxMTIwLCAweDIwMDksIDB4MDA0NSwgMHgwODBjLCAweGIyMGEsIDB4NzgxNywgMHgwMTQwLAorCTB4MDBiZSwgMHgwMDA1LCAweDYxMjAsIDB4OTE4NiwgMHgwMDAyLCAweDAxMjgsIDB4OTE4NiwgMHgwMDA1LAorCTB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLCAweDg4YWYsIDB4MTE4MCwgMHgwODBjLAorCTB4MzQ0YywgMHgxMTY4LCAweDcwMTAsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTA4NiwgMHgwMDAwLAorCTB4MTEzMCwgMHg5MTg0LCAweDAwMGYsIDB4OTA4YSwgMHgwMDA2LCAweDEyMDgsIDB4MDAwYiwgMHgwMDA1LAorCTB4ODZiZSwgMHg4NmJmLCAweDg2YmUsIDB4ODZiZSwgMHg4NzI0LCAweDg3MzMsIDB4MDAwNSwgMHgwMGI2LAorCTB4NzAwYywgMHg3MTA4LCAweDA4MGMsIDB4MjY4YywgMHgxOTA0LCAweDg3MjIsIDB4MDgwYywgMHg2NzQ5LAorCTB4MTkwNCwgMHg4NzIyLCAweGJlMTIsIDB4YmQxNiwgMHg3MTEwLCAweGQxYmMsIDB4MDU0MCwgMHg3MDJjLAorCTB4ZDA4NCwgMHgxMTIwLCAweGI4MDAsIDB4ZDBiYywgMHgxOTA0LCAweDg3MjIsIDB4MDgwYywgMHg2YzExLAorCTB4MDE0OCwgMHg5MDg2LCAweDAwMDQsIDB4MDEzMCwgMHgwODBjLCAweDZjMTksIDB4MDExOCwgMHg5MDg2LAorCTB4MDAwNCwgMHgxNTg4LCAweDAwYzYsIDB4MDgwYywgMHg4NzQyLCAweDAwY2UsIDB4MDVkOCwgMHgwODBjLAorCTB4YjExNiwgMHgyYjA4LCAweDA1YjgsIDB4NjExMiwgMHgwODBjLCAweGQzYjYsIDB4NjAyMywgMHgwMDAyLAorCTB4NzEyMCwgMHg2MTBhLCAweDIwMDksIDB4MDA4OCwgMHgwODBjLCAweGIyMGEsIDB4MDQ1OCwgMHgwODBjLAorCTB4NmMxMSwgMHgwMTQ4LCAweDkwODYsIDB4MDAwNCwgMHgwMTMwLCAweDA4MGMsIDB4NmMxOSwgMHgwMTE4LAorCTB4OTA4NiwgMHgwMDA0LCAweDExODAsIDB4MDgwYywgMHhiMTE2LCAweDJiMDgsIDB4MDFkOCwgMHg2MTEyLAorCTB4MDgwYywgMHhkM2I2LCAweDYwMjMsIDB4MDAwNSwgMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwgMHgwMDg4LAorCTB4MDgwYywgMHhiMjBhLCAweDAwNzgsIDB4MDgwYywgMHhiMTE2LCAweDJiMDgsIDB4MDE1OCwgMHg2MTEyLAorCTB4MDgwYywgMHhkM2I2LCAweDYwMjMsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4MjAwOSwgMHgwMDAxLAorCTB4MDgwYywgMHhiMjBhLCAweDAwYmUsIDB4MDAwNSwgMHg3MTEwLCAweGQxYmMsIDB4MDE1OCwgMHgwMGQxLAorCTB4MDE0OCwgMHgwODBjLCAweDg2OWEsIDB4MTEzMCwgMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDg5LAorCTB4MDgwYywgMHhiMjBhLCAweDAwMDUsIDB4NzExMCwgMHhkMWJjLCAweDAxNTgsIDB4MDA1OSwgMHgwMTQ4LAorCTB4MDgwYywgMHg4NjlhLCAweDExMzAsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA4YSwgMHgwODBjLAorCTB4YjIwYSwgMHgwMDA1LCAweDcwMjAsIDB4MjA2MCwgMHg5Yzg0LCAweDAwMDMsIDB4MTE1OCwgMHg5YzgyLAorCTB4MWRkYywgMHgwMjQwLCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDljMDIsIDB4MTIxOCwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMDA1LCAweDkwMDYsIDB4MGNlOCwgMHgwMGI2LCAweDcxMTAsIDB4ZDFiYywgMHgxMWQ4LAorCTB4NzAyNCwgMHgyMDYwLCAweDljODQsIDB4MDAwMywgMHgxMWIwLCAweDljODIsIDB4MWRkYywgMHgwMjk4LAorCTB4Njg2OCwgMHg5YzAyLCAweDEyODAsIDB4NzAwOCwgMHg5MDg0LCAweDAwZmYsIDB4NjExMCwgMHgyMTU4LAorCTB4YjkxMCwgMHg5MTA2LCAweDExNDAsIDB4NzAwYywgMHhiOTE0LCAweDkxMDYsIDB4MTEyMCwgMHgyMDA5LAorCTB4MDA1MSwgMHgwODBjLCAweGIyMGEsIDB4NzgxNywgMHgwMTQwLCAweDAwYmUsIDB4MDAwNSwgMHgyMDMxLAorCTB4MDEwNSwgMHgwMDY5LCAweDAwMDUsIDB4MjAzMSwgMHgwMjA2LCAweDAwNDksIDB4MDAwNSwgMHgyMDMxLAorCTB4MDIwNywgMHgwMDI5LCAweDAwMDUsIDB4MjAzMSwgMHgwMjEzLCAweDAwMDksIDB4MDAwNSwgMHgwMGM2LAorCTB4MDA5NiwgMHgwMGY2LCAweDcwMDAsIDB4OTA4NCwgMHhmMDAwLCAweDkwODYsIDB4YzAwMCwgMHgwNWMwLAorCTB4MDgwYywgMHhiMTE2LCAweDA1YTgsIDB4MDA2NiwgMHgwMGM2LCAweDAwNDYsIDB4MjAxMSwgMHgwMjYzLAorCTB4MjIwNCwgMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyNjhjLCAweDE1OTAsIDB4MDgwYywgMHg2NzQ5LAorCTB4MTU3OCwgMHhiZTEyLCAweGJkMTYsIDB4MmIwMCwgMHgwMDRlLCAweDAwY2UsIDB4NjAxMiwgMHgwODBjLAorCTB4ZDNiNiwgMHgwODBjLCAweDEwNTksIDB4MDUwMCwgMHgyOTAwLCAweDYwNjIsIDB4OTAwNiwgMHhhODAyLAorCTB4YTg2NiwgMHhhYzZhLCAweGE4NWMsIDB4OTBmOCwgMHgwMDFiLCAweDIwYTksIDB4MDAwZSwgMHhhODYwLAorCTB4MjBlOCwgMHgyMGUxLCAweDAwMDAsIDB4MmZhMCwgMHgyZTk4LCAweDQwMDMsIDB4MDA2ZSwgMHg2NjE2LAorCTB4NjAwNywgMHgwMDNlLCAweDYwMjMsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NjFlLAorCTB4MDBmZSwgMHgwMDllLCAweDAwY2UsIDB4MDAwNSwgMHgwODBjLCAweGIxNmMsIDB4MDA2ZSwgMHgwY2MwLAorCTB4MDA0ZSwgMHgwMGNlLCAweDBjYzgsIDB4MDBjNiwgMHg3MDAwLCAweDkwOGMsIDB4ZmYwMCwgMHg5MTg0LAorCTB4ZjAwMCwgMHg4MTBmLCAweDkwODYsIDB4MjAwMCwgMHgxOTA0LCAweDg4MmEsIDB4OTE4NiwgMHgwMDIyLAorCTB4MTVmMCwgMHgyMDAxLCAweDAxMTEsIDB4MjAwNCwgMHg5MDA1LCAweDE5MDQsIDB4ODgyYywgMHg3MDMwLAorCTB4OTA4ZSwgMHgwNDAwLCAweDA5MDQsIDB4ODgyYywgMHg5MDhlLCAweDYwMDAsIDB4MDVlOCwgMHg5MDhlLAorCTB4NTQwMCwgMHgwNWQwLCAweDkwOGUsIDB4MDMwMCwgMHgxMWQ4LCAweDIwMDksIDB4MTgzNywgMHgyMTBjLAorCTB4ZDE4YywgMHgxNTkwLCAweGQxYTQsIDB4MTU4MCwgMHgwODBjLCAweDZiY2YsIDB4MDU4OCwgMHg2OGIwLAorCTB4OTA4NCwgMHgwMGZmLCAweDcxMDAsIDB4OTE4YywgMHgwMGZmLCAweDkxMDYsIDB4MTUxOCwgMHg2ODgwLAorCTB4NjliMCwgMHg5MThjLCAweGZmMDAsIDB4OTEwNSwgMHg3MTA0LCAweDkxMDYsIDB4MTFkOCwgMHgwMGUwLAorCTB4MjAwOSwgMHgwMTAzLCAweDIxMGMsIDB4ZDFiNCwgMHgxMWE4LCAweDkwOGUsIDB4NTIwMCwgMHgwOWU4LAorCTB4OTA4ZSwgMHgwNTAwLCAweDA5ZDAsIDB4OTA4ZSwgMHg1MDAwLCAweDA5YjgsIDB4MDA1OCwgMHg5MTg2LAorCTB4MDAyMywgMHgxMTQwLCAweDA4MGMsIDB4ODc0MiwgMHgwMTI4LCAweDYwMDQsIDB4OTA4NiwgMHgwMDAyLAorCTB4MDExOCwgMHgwMDAwLCAweDkwMDYsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMDA1LAorCTB4NzAzMCwgMHg5MDhlLCAweDAzMDAsIDB4MDExOCwgMHg5MDhlLCAweDUyMDAsIDB4MWQ5OCwgMHgyMDAxLAorCTB4MTgzNywgMHgyMDA0LCAweDkwODQsIDB4MDAwOSwgMHg5MDg2LCAweDAwMDgsIDB4MGQ2OCwgMHgwYzUwLAorCTB4MDE1NiwgMHgwMDQ2LCAweDAwMTYsIDB4MDAzNiwgMHg3MDM4LCAweDIwMjAsIDB4ODQyNywgMHg5NGE0LAorCTB4MDAwNywgMHhkNDg0LCAweDAxNDgsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLAorCTB4MDI3YSwgMHgwODBjLCAweGMyMGUsIDB4MTE3OCwgMHhkNDhjLCAweDAxNDgsIDB4MjBhOSwgMHgwMDA0LAorCTB4MjAxOSwgMHgxODAxLCAweDIwMTEsIDB4MDI3ZSwgMHgwODBjLCAweGMyMGUsIDB4MTEyMCwgMHhkNDk0LAorCTB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAzZSwgMHgwMDFlLCAweDAwNGUsIDB4MDE1ZSwgMHgwMDA1LAorCTB4MDE1NiwgMHgwMDQ2LCAweDAwMTYsIDB4MDAzNiwgMHg3MDM4LCAweDIwMjAsIDB4ODQyNywgMHg5NGE0LAorCTB4MDAwNywgMHhkNDg0LCAweDAxNDgsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLAorCTB4MDI3MiwgMHgwODBjLCAweGMyMGUsIDB4MTE3OCwgMHhkNDhjLCAweDAxNDgsIDB4MjBhOSwgMHgwMDA0LAorCTB4MjAxOSwgMHgxODAxLCAweDIwMTEsIDB4MDI3NiwgMHgwODBjLCAweGMyMGUsIDB4MTEyMCwgMHhkNDk0LAorCTB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAzZSwgMHgwMDFlLCAweDAwNGUsIDB4MDE1ZSwgMHgwMDA1LAorCTB4MDBmNiwgMHgyMDc5LCAweDAyMDAsIDB4NzgwMCwgMHhjMGU1LCAweGMwY2MsIDB4NzgwMiwgMHgwMGZlLAorCTB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MTgwMCwgMHg3ODM0LCAweGQwODQsIDB4MTEzMCwgMHgyMDc5LAorCTB4MDIwMCwgMHg3ODAwLCAweDkwODUsIDB4MTIwMCwgMHg3ODAyLCAweDAwZmUsIDB4MDAwNSwgMHgwMGU2LAorCTB4MjA3MSwgMHgxODAwLCAweDcwMzQsIDB4YzA4NCwgMHg3MDM2LCAweDAwZWUsIDB4MDAwNSwgMHgwMDE2LAorCTB4MjAwMSwgMHgxODM3LCAweDIwMGMsIDB4OTE4NCwgMHgwMDgwLCAweDAxMTgsIDB4ZDE4YywgMHgwMTE4LAorCTB4OTAwNiwgMHgwMDFlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDBjZDgsIDB4MjA3MSwgMHgxYTA0LAorCTB4NzAwMywgMHgwMDAzLCAweDcwMGYsIDB4MDM2MSwgMHg5MDA2LCAweDcwMWEsIDB4NzA3YSwgMHg3MDEyLAorCTB4NzAxNywgMHgxZGRjLCAweDcwMDcsIDB4MDAwMCwgMHg3MDI2LCAweDcwMmIsIDB4YTJjMCwgMHg3MDMyLAorCTB4NzAzNywgMHhhMzNkLCAweDcwNDcsIDB4ZmZmZiwgMHg3MDRhLCAweDcwNGYsIDB4NTZjNCwgMHg3MDUyLAorCTB4NzA2MywgMHg4YTY2LCAweDA4MGMsIDB4MTA3MiwgMHgwOTBjLCAweDBkODUsIDB4MjkwMCwgMHg3MDQyLAorCTB4YTg2NywgMHgwMDAzLCAweGE4NmYsIDB4MDEwMCwgMHhhOGFiLCAweGRjYjAsIDB4MDAwNSwgMHgyMDcxLAorCTB4MWEwNCwgMHgxZDA0LCAweDg5ODIsIDB4MjA5MSwgMHg2MDAwLCAweDcwMGMsIDB4ODAwMSwgMHg3MDBlLAorCTB4MTU5MCwgMHgyMDAxLCAweDAxM2MsIDB4MjAwNCwgMHg5MDA1LCAweDE5MGMsIDB4OGIxMCwgMHgyMDAxLAorCTB4MTg2OSwgMHgyMDA0LCAweGQwYzQsIDB4MDE1OCwgMHgzYTAwLCAweGQwOGMsIDB4MTE0MCwgMHgyMGQxLAorCTB4MDAwMCwgMHgyMGQxLCAweDAwMDEsIDB4MjBkMSwgMHgwMDAwLCAweDA4MGMsIDB4MGQ4NSwgMHg3MDBmLAorCTB4MDM2MSwgMHg3MDA3LCAweDAwMDEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHgxODAwLAorCTB4NjllYywgMHhkMWU0LCAweDExMzgsIDB4ZDFkYywgMHgxMTE4LCAweDA4MGMsIDB4OGFkNCwgMHgwMDEwLAorCTB4MDgwYywgMHg4YWFiLCAweDcwNDgsIDB4OTAwZCwgMHgwMTQ4LCAweDgxMDksIDB4NzE0YSwgMHgxMTMwLAorCTB4NzA0YywgMHgwODBmLCAweDAwMTgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAyNCwgMHg5MDBkLAorCTB4MDE4OCwgMHg3MDIwLCAweDgwMDEsIDB4NzAyMiwgMHgxMTY4LCAweDcwMjMsIDB4MDAwOSwgMHg4MTA5LAorCTB4NzEyNiwgMHg5MTg2LCAweDAzZTgsIDB4MTExMCwgMHg3MDI4LCAweDA4MGYsIDB4ODFmZiwgMHgxMTEwLAorCTB4NzAyOCwgMHgwODBmLCAweDcwMzAsIDB4OTAwZCwgMHgwMTgwLCAweDcwMmMsIDB4ODAwMSwgMHg3MDJlLAorCTB4MTE2MCwgMHg3MDJmLCAweDAwMDksIDB4ODEwOSwgMHg3MTMyLCAweDAxMjgsIDB4OTE4NCwgMHgwMDdmLAorCTB4MDkwYywgMHhhM2ViLCAweDAwMTAsIDB4NzAzNCwgMHgwODBmLCAweDcwNDQsIDB4OTAwNSwgMHgwMTE4LAorCTB4MDMxMCwgMHg4MDAxLCAweDcwNDYsIDB4NzA1NCwgMHg5MDBkLCAweDAxNjgsIDB4NzA1MCwgMHg4MDAxLAorCTB4NzA1MiwgMHgxMTQ4LCAweDcwNTMsIDB4MDAwOSwgMHg4MTA5LCAweDcxNTYsIDB4MTEyMCwgMHg3MTU4LAorCTB4NzE1NiwgMHg3MDYwLCAweDA4MGYsIDB4NzAxOCwgMHg5MDBkLCAweDAxZDgsIDB4MDAxNiwgMHg3MDc4LAorCTB4OTAwZCwgMHgwMTU4LCAweDcwNzQsIDB4ODAwMSwgMHg3MDc2LCAweDExMzgsIDB4NzA3NywgMHgwMDA5LAorCTB4ODEwOSwgMHg3MTdhLCAweDExMTAsIDB4NzA3YywgMHgwODBmLCAweDAwMWUsIDB4NzAwOCwgMHg4MDAxLAorCTB4NzAwYSwgMHgxMTM4LCAweDcwMGIsIDB4MDAwOSwgMHg4MTA5LCAweDcxMWEsIDB4MTExMCwgMHg3MDFjLAorCTB4MDgwZiwgMHgwMTJlLCAweDcwMDQsIDB4MDAwMiwgMHg4OWFhLCAweDg5YWIsIDB4ODlkNSwgMHgwMGU2LAorCTB4MjA3MSwgMHgxYTA0LCAweDcwMTgsIDB4OTAwNSwgMHgxMTIwLCAweDcxMWEsIDB4NzIxZSwgMHg3MDBiLAorCTB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDA2LCAweDIwNzEsIDB4MWEwNCwgMHg3MDFjLAorCTB4OTIwNiwgMHgxMTIwLCAweDcwMWEsIDB4NzAxZSwgMHg3MDdhLCAweDcwN2UsIDB4MDAwZSwgMHgwMGVlLAorCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MWEwNCwgMHhiODg4LCAweDkxMDIsIDB4MDIwOCwgMHhiOThhLAorCTB4MDBlZSwgMHgwMDA1LCAweDAwMDUsIDB4MDBiNiwgMHgyMDMxLCAweDAwMTAsIDB4NzExMCwgMHgwODBjLAorCTB4NjdiNCwgMHgxMWE4LCAweGI4ODgsIDB4ODAwMSwgMHgwMjkwLCAweGI4OGEsIDB4MTE4MCwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDAwNjYsIDB4YjhkMCwgMHg5MDA1LCAweDAxMzgsIDB4MDAyNiwgMHhiYTNjLAorCTB4MDAxNiwgMHgwODBjLCAweDY4ZGYsIDB4MDAxZSwgMHgwMDJlLCAweDAwNmUsIDB4MDEyZSwgMHg4MTA4LAorCTB4OTE4MiwgMHgwODAwLCAweDEyMjAsIDB4ODYzMSwgMHgwMTI4LCAweDcxMTIsIDB4MGMwMCwgMHg5MDBlLAorCTB4NzAwNywgMHgwMDAyLCAweDcxMTIsIDB4MDBiZSwgMHgwMDA1LCAweDIwMzEsIDB4MDAxMCwgMHg3MDE0LAorCTB4MjA2MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDQ4LCAweDkwMDUsIDB4MDEyOCwgMHg4MDAxLAorCTB4NjA0YSwgMHgxMTEwLCAweDA4MGMsIDB4ZDIzNywgMHg2MDE4LCAweDkwMDUsIDB4MDkwNCwgMHg4YTJkLAorCTB4MDBmNiwgMHgyMDc5LCAweDAzMDAsIDB4NzkxOCwgMHhkMWI0LCAweDE5MDQsIDB4OGE0MCwgMHg3ODFiLAorCTB4MjAyMCwgMHhhMDAxLCAweDc5MTgsIDB4ZDFiNCwgMHgwMTIwLCAweDc4MWIsIDB4MjAwMCwgMHgwODA0LAorCTB4OGE0MCwgMHg4MDAxLCAweDYwMWEsIDB4MDEwNiwgMHg3ODFiLCAweDIwMDAsIDB4YTAwMSwgMHg3OTE4LAorCTB4ZDFhYywgMHgxZGQwLCAweDAxMGUsIDB4MDBmZSwgMHgxNTQwLCAweDYxMjAsIDB4OTE4NiwgMHgwMDAzLAorCTB4MDE0OCwgMHg5MTg2LCAweDAwMDYsIDB4MDEzMCwgMHg5MTg2LCAweDAwMDksIDB4MTFlMCwgMHg2MTFjLAorCTB4ZDFjNCwgMHgxMTAwLCAweDA4MGMsIDB4Y2YxYiwgMHgwMWIwLCAweDYwMTQsIDB4MjA0OCwgMHhhODg0LAorCTB4OTA4YSwgMHgxOTlhLCAweDAyODAsIDB4OTA4MiwgMHgxOTk5LCAweGE4ODYsIDB4OTA4YSwgMHgxOTlhLAorCTB4MDIxMCwgMHgyMDAxLCAweDE5OTksIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHg2MTFhLAorCTB4MDgwYywgMHhkNjcxLCAweDAxMTAsIDB4MDgwYywgMHhjYmQ5LCAweDAxMmUsIDB4OWM4OCwgMHgwMDFjLAorCTB4NzExNiwgMHgyMDAxLCAweDE4MWEsIDB4MjAwNCwgMHg5MTAyLCAweDEyMjgsIDB4ODYzMSwgMHgwMTM4LAorCTB4MjE2MCwgMHgwODA0LCAweDg5ZDksIDB4NzAxNywgMHgxZGRjLCAweDcwMDcsIDB4MDAwMCwgMHgwMDA1LAorCTB4MDBmZSwgMHgwYzU4LCAweDAwZTYsIDB4MjA3MSwgMHgxYTA0LCAweDcwMjcsIDB4MDdkMCwgMHg3MDIzLAorCTB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MjAwMSwgMHgxYTBkLCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LAorCTB4MDBlNiwgMHgyMDcxLCAweDFhMDQsIDB4NzEzMiwgMHg3MDJmLCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LAorCTB4MjAxMSwgMHgxYTEwLCAweDIwMTMsIDB4MDAwMCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxYTA0LAorCTB4NzExYSwgMHg3MjFlLCAweDcwMGIsIDB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MDA4NiwgMHgwMDI2LAorCTB4NzA1YywgMHg4MDAwLCAweDcwNWUsIDB4MjAwMSwgMHgxYTE0LCAweDIwNDQsIDB4YTA2YywgMHg5MDg2LAorCTB4MDAwMCwgMHgwMTUwLCAweDcwNzAsIDB4YTA5YSwgMHg3MDZjLCAweGEwOTYsIDB4NzA2OCwgMHhhMDkyLAorCTB4NzA2NCwgMHhhMDhlLCAweDA4MGMsIDB4MTE0ZSwgMHgwMDJlLCAweDAwOGUsIDB4MDAwNSwgMHgwMDA2LAorCTB4MDAxNiwgMHgwMDk2LCAweDAwYTYsIDB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LAorCTB4MDE1NiwgMHgwODBjLCAweDg4ZTcsIDB4MDE1ZSwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLAorCTB4MDBiZSwgMHgwMGFlLCAweDAwOWUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAorCTB4MWEwNCwgMHg3MTdhLCAweDcyN2UsIDB4NzA3NywgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LAorCTB4MDAwNiwgMHgyMDcxLCAweDFhMDQsIDB4NzA3YywgMHg5MjA2LCAweDExMTAsIDB4NzA3YSwgMHg3MDdlLAorCTB4MDAwZSwgMHgwMGVlLCAweDAwMDUsIDB4MjA2OSwgMHgxODAwLCAweDY5ZWMsIDB4ZDFlNCwgMHgxNTE4LAorCTB4MDAyNiwgMHhkMWVjLCAweDAxNDAsIDB4NmE1NCwgMHg2ODc0LCAweDkyMDIsIDB4MDI4OCwgMHg4MTE3LAorCTB4OTI5NCwgMHgwMGMxLCAweDAwODgsIDB4OTE4NCwgMHgwMDA3LCAweDAxYTAsIDB4ODEwOSwgMHg5MTg0LAorCTB4MDAwNywgMHgwMTEwLCAweDY5ZWUsIDB4MDA3MCwgMHg4MTA3LCAweDkwODQsIDB4MDAwNywgMHg5MTBkLAorCTB4ODEwNywgMHg5MTA2LCAweDkwOTQsIDB4MDBjMSwgMHg5MTg0LCAweGZmM2UsIDB4OTIwNSwgMHg2OGVlLAorCTB4MDgwYywgMHgwZjI0LCAweDAwMmUsIDB4MDAwNSwgMHg2OWU4LCAweDkxODQsIDB4MDAzZiwgMHgwNWI4LAorCTB4ODEwOSwgMHg5MTg0LCAweDAwM2YsIDB4MDFhOCwgMHg2YTU0LCAweDY4NzQsIDB4OTIwMiwgMHgwMjIwLAorCTB4ZDFiYywgMHgwMTY4LCAweGMxYmMsIDB4MDAxOCwgMHhkMWJjLCAweDExNDgsIDB4YzFiZCwgMHgyMTEwLAorCTB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHgwZjQ2LCAweDAwZWUsIDB4MDQwMCwgMHg2OWVhLAorCTB4MDBmMCwgMHgwMDI2LCAweDgxMDcsIDB4OTA5NCwgMHgwMDA3LCAweDAxMjgsIDB4ODAwMSwgMHg4MDA3LAorCTB4OTA4NSwgMHgwMDA3LCAweDAwNTAsIDB4MjAxMCwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg5MDg0LAorCTB4MDAwNywgMHg5MjA1LCAweDgwMDcsIDB4OTA4NSwgMHgwMDI4LCAweDkwODYsIDB4MDA0MCwgMHgyMDEwLAorCTB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHgwZjQ2LCAweDAwZWUsIDB4MDAyZSwgMHgwMDA1LAorCTB4MDAxNiwgMHgwMGM2LCAweDIwMDksIDB4ZmZmNCwgMHgyMTBkLCAweDIwNjEsIDB4MDEwMCwgMHg2MGYwLAorCTB4OTEwMCwgMHg2MGYzLCAweDAwMDAsIDB4MjAwOSwgMHhmZmY0LCAweDIwMGYsIDB4MTIyMCwgMHg4MTA4LAorCTB4MjEwNSwgMHg4MDAwLCAweDIwMGYsIDB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLAorCTB4MWE3MywgMHgwMGNlLCAweDAwMDUsIDB4OTE4NCwgMHgwMDBmLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLAorCTB4OTA4MCwgMHgxYTczLCAweDIwNjAsIDB4MDAwNSwgMHhhODg0LCAweDkwOGEsIDB4MTk5YSwgMHgxNjM4LAorCTB4OTAwNSwgMHgxMTUwLCAweDAwYzYsIDB4MjA2MSwgMHgxYTczLCAweDYwMTQsIDB4MDBjZSwgMHg5MDA1LAorCTB4MTEzMCwgMHgyMDAxLCAweDAwMWUsIDB4MDAxOCwgMHg5MDhlLCAweGZmZmYsIDB4MDFiMCwgMHg4MDAzLAorCTB4ODAwYiwgMHg4MTBiLCAweDkxMDgsIDB4NjExYSwgMHhhODdjLCAweDkwOGMsIDB4MDBjMCwgMHg5MThlLAorCTB4MDBjMCwgMHgwOTA0LCAweDhiZWUsIDB4ZDBiNCwgMHgxMTY4LCAweGQwYmMsIDB4MTkwNCwgMHg4YmM3LAorCTB4MjAwOSwgMHgwMDA2LCAweDA4MGMsIDB4OGMxYiwgMHgwMDA1LCAweDkwMGUsIDB4MGM2MCwgMHgyMDAxLAorCTB4MTk5OSwgMHgwOGIwLCAweGQwZmMsIDB4MDVlMCwgMHg5MDhjLCAweDIwMjMsIDB4MTU2OCwgMHg4N2ZmLAorCTB4MTU1OCwgMHhhOWE4LCAweDgxZmYsIDB4MTU0MCwgMHg2MTI0LCAweDkxOGMsIDB4MDUwMCwgMHgxNTIwLAorCTB4NjEwMCwgMHg5MThlLCAweDAwMDcsIDB4MTUwMCwgMHgyMDA5LCAweDE4NjksIDB4MjEwYywgMHhkMTg0LAorCTB4MTFkOCwgMHg2MDAzLCAweDAwMDMsIDB4NjAwNywgMHgwMDQzLCAweDYwNDcsIDB4YjAzNSwgMHgwODBjLAorCTB4MWM2ZiwgMHhhODdjLCAweGMwZGQsIDB4YTg3ZSwgMHg2MDBmLCAweDAwMDAsIDB4MDBmNiwgMHgyMDc5LAorCTB4MDM4MCwgMHg3ODE4LCAweGQwYmMsIDB4MWRlOCwgMHg3ODMzLCAweDAwMTMsIDB4MmMwMCwgMHg3ODM2LAorCTB4NzgxYiwgMHg4MDgwLCAweDAwZmUsIDB4MDAwNSwgMHg5MDhjLCAweDAwMDMsIDB4MDEyMCwgMHg5MThlLAorCTB4MDAwMywgMHgxOTA0LCAweDhjMTUsIDB4OTA4YywgMHgyMDIwLCAweDkxOGUsIDB4MjAyMCwgMHgwMWE4LAorCTB4NjAyNCwgMHhkMGQ0LCAweDExZTgsIDB4MjAwOSwgMHgxODY5LCAweDIxMDQsIDB4ZDA4NCwgMHgxMTM4LAorCTB4ODdmZiwgMHgxMTIwLCAweDIwMDksIDB4MDA0MywgMHgwODA0LCAweGIyMGEsIDB4MDAwNSwgMHg4N2ZmLAorCTB4MWRlOCwgMHgyMDA5LCAweDAwNDIsIDB4MDgwNCwgMHhiMjBhLCAweDYxMTAsIDB4MDBiNiwgMHgyMTU4LAorCTB4YjkwMCwgMHgwMGJlLCAweGQxYWMsIDB4MGQyMCwgMHg2MDI0LCAweGMwY2QsIDB4NjAyNiwgMHgwYzAwLAorCTB4YzBkNCwgMHg2MDI2LCAweGE4OTAsIDB4NjAyZSwgMHhhODhjLCAweDYwMzIsIDB4MDhlMCwgMHhkMGZjLAorCTB4MDE2MCwgMHg5MDhjLCAweDAwMDMsIDB4MDEyMCwgMHg5MThlLCAweDAwMDMsIDB4MTkwNCwgMHg4YzE1LAorCTB4OTA4YywgMHgyMDIwLCAweDkxOGUsIDB4MjAyMCwgMHgwMTcwLCAweDAwNzYsIDB4MDBmNiwgMHgyYzc4LAorCTB4MDgwYywgMHgxN2FkLCAweDAwZmUsIDB4MDA3ZSwgMHg4N2ZmLCAweDExMjAsIDB4MjAwOSwgMHgwMDQyLAorCTB4MDgwYywgMHhiMjBhLCAweDAwMDUsIDB4NjExMCwgMHgwMGI2LCAweDIxNTgsIDB4YjkwMCwgMHgwMGJlLAorCTB4ZDFhYywgMHgwZDU4LCAweDYxMjQsIDB4YzFjZCwgMHg2MTI2LCAweDBjMzgsIDB4ZDBmYywgMHgwMTg4LAorCTB4OTA4YywgMHgyMDIwLCAweDkxOGUsIDB4MjAyMCwgMHgwMWE4LCAweDkwODQsIDB4MDAwMywgMHg5MDhlLAorCTB4MDAwMiwgMHgwMTQ4LCAweDg3ZmYsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDEsIDB4MDgwYywgMHhiMjBhLAorCTB4MDAwNSwgMHgwMGI5LCAweDBjZTgsIDB4ODdmZiwgMHgxZGQ4LCAweDIwMDksIDB4MDA0MywgMHgwODBjLAorCTB4YjIwYSwgMHgwY2IwLCAweDYxMTAsIDB4MDBiNiwgMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWFjLAorCTB4MGQyMCwgMHg2MTI0LCAweGMxY2QsIDB4NjEyNiwgMHgwYzAwLCAweDIwMDksIDB4MDAwNCwgMHgwMDE5LAorCTB4MDAwNSwgMHgyMDA5LCAweDAwMDEsIDB4MDA5NiwgMHgwODBjLCAweGNmMWIsIDB4MDUxOCwgMHg2MDE0LAorCTB4MjA0OCwgMHhhOTgyLCAweGE4MDAsIDB4NjAxNiwgMHg5MTg2LCAweDAwMDEsIDB4MTE4OCwgMHhhOTdjLAorCTB4OTE4YywgMHg4MTAwLCAweDkxOGUsIDB4ODEwMCwgMHgxMTU4LCAweDAwYzYsIDB4MjA2MSwgMHgxYTczLAorCTB4NjIwMCwgMHhkMjhjLCAweDExMjAsIDB4NjIwNCwgMHg4MjEwLCAweDAyMDgsIDB4NjIwNiwgMHgwMGNlLAorCTB4MDgwYywgMHg2ZTRjLCAweDYwMTQsIDB4OTA0ZCwgMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgxOTBjLAorCTB4OGIzNCwgMHgwMDdlLCAweDAwOWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwYzYsIDB4MjA2MSwgMHgxYTczLAorCTB4NjAwMCwgMHg4MWZmLCAweDAxMTAsIDB4OTIwNSwgMHgwMDA4LCAweDkyMDQsIDB4NjAwMiwgMHgwMGNlLAorCTB4MDE1ZSwgMHgwMDA1LCAweDY4MDAsIDB4ZDA4YywgMHgxMTM4LCAweDY4MDgsIDB4OTAwNSwgMHgwMTIwLAorCTB4ODAwMSwgMHg2ODBhLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDIwNzEsIDB4MTkyNCwgMHg3MDAzLAorCTB4MDAwNiwgMHg3MDA3LCAweDAwMDAsIDB4NzAwZiwgMHgwMDAwLCAweDcwMTMsIDB4MDAwMSwgMHgwODBjLAorCTB4MTA3MiwgMHgwOTBjLCAweDBkODUsIDB4YTg2NywgMHgwMDA2LCAweGE4NmIsIDB4MDAwMSwgMHhhOGFiLAorCTB4ZGNiMCwgMHhhODlmLCAweDAwMDAsIDB4MjkwMCwgMHg3MDJlLCAweDcwMzMsIDB4MDAwMCwgMHgwMDA1LAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDA5NiwgMHgwMGU2LCAweDIwNzEsIDB4MTkyNCwgMHg3MDJjLAorCTB4MjA0OCwgMHg2YTJjLCAweDcyMWUsIDB4NmIzMCwgMHg3MzIyLCAweDY4MzQsIDB4NzAyNiwgMHhhODk2LAorCTB4NjgzOCwgMHg3MDJhLCAweGE4OWEsIDB4NjgyNCwgMHg3MDE2LCAweDY4M2MsIDB4NzAxYSwgMHgyMDA5LAorCTB4MDAyOCwgMHgyMDBhLCAweDkwMDUsIDB4MDE0OCwgMHg5MDBlLCAweDkxODgsIDB4MDAwYywgMHg4MDAxLAorCTB4MWRlMCwgMHgyMTAwLCAweDkyMTAsIDB4MTIwOCwgMHg4MzE4LCAweGFhOGUsIDB4YWI5MiwgMHg3MDEwLAorCTB4ZDA4NCwgMHgwMTY4LCAweGMwODQsIDB4NzAwNywgMHgwMDAxLCAweDcwMGYsIDB4MDAwMCwgMHgwMDA2LAorCTB4MjAwOSwgMHgxYjczLCAweDIxMDQsIDB4OTA4MiwgMHgwMDA3LCAweDIwMGEsIDB4MDAwZSwgMHhjMDk1LAorCTB4NzAxMiwgMHgyMDA4LCAweDIwMDEsIDB4MDAzYiwgMHgwODBjLCAweDE2YjksIDB4OTAwNiwgMHgyMDcxLAorCTB4MTkzZCwgMHg3MDAyLCAweDcwMDYsIDB4NzAyYSwgMHgwMGVlLCAweDAwOWUsIDB4MDEyZSwgMHgwMDA1LAorCTB4MjAwOSwgMHgxYjczLCAweDIxMDQsIDB4OTA4MCwgMHgwMDA3LCAweDIwMGEsIDB4MDAwNSwgMHgwMGU2LAorCTB4MDEyNiwgMHgwMTU2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE4MDAsIDB4NzE1NCwgMHgyMDAxLAorCTB4MDAwOCwgMHg5MTBhLCAweDA2MzgsIDB4MjAwMSwgMHgxODdkLCAweDIwYWMsIDB4OTAwNiwgMHg5MDgwLAorCTB4MDAwOCwgMHgxZjA0LCAweDhjZDcsIDB4NzFjMCwgMHg5MTAyLCAweDAyZTAsIDB4MjA3MSwgMHgxODc3LAorCTB4MjBhOSwgMHgwMDA3LCAweDAwYzYsIDB4MDgwYywgMHhiMTE2LCAweDYwMjMsIDB4MDAwOSwgMHg2MDAzLAorCTB4MDAwNCwgMHg2MDFmLCAweDAxMDEsIDB4MDA4OSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLAorCTB4OGU1OCwgMHgwMTJlLCAweDFmMDQsIDB4OGNlMywgMHg5MDA2LCAweDAwY2UsIDB4MDE1ZSwgMHgwMTJlLAorCTB4MDBlZSwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwY2M4LCAweDAwZTYsIDB4MDBiNiwgMHgwMDk2LAorCTB4MDA4NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAyNiwgMHg3MTE4LCAweDcyMGMsIDB4NzYyMCwgMHg3MDA0LAorCTB4ZDA4NCwgMHgxMTI4LCAweDIwMjEsIDB4MDAyNCwgMHgyMDI5LCAweDAwMDIsIDB4MDAyMCwgMHgyMDIxLAorCTB4MDAyYywgMHgyMDI5LCAweDAwMGEsIDB4MDgwYywgMHgxMDU5LCAweDA5MGMsIDB4MGQ4NSwgMHgyOTAwLAorCTB4NjAxNiwgMHgyMDU4LCAweGFjNjYsIDB4OTAwNiwgMHhhODAyLCAweGE4MDYsIDB4YTg2YSwgMHhhODdhLAorCTB4YThhYSwgMHhhODg3LCAweDAwMDUsIDB4YTg3ZiwgMHgwMDIwLCAweDcwMDgsIDB4YTg5YSwgMHg3MDEwLAorCTB4YTg5ZSwgMHhhZThhLCAweGE4YWYsIDB4ZmZmZiwgMHhhOGIzLCAweDAwMDAsIDB4ODEwOSwgMHgwMTYwLAorCTB4MDgwYywgMHgxMDU5LCAweDA5MGMsIDB4MGQ4NSwgMHhhZDY2LCAweDJiMDAsIDB4YTgwMiwgMHgyOTAwLAorCTB4YjgwNiwgMHgyMDU4LCAweDgxMDksIDB4MWRhMCwgMHgwMDJlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMDhlLAorCTB4MDA5ZSwgMHgwMGJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDc5LCAweDAwMDAsIDB4MjA3MSwgMHgxOTI0LAorCTB4NzAwNCwgMHgwMDRiLCAweDcwMGMsIDB4MDAwMiwgMHg4ZDRmLCAweDhkNDgsIDB4OGQ0OCwgMHgwMDA1LAorCTB4OGQ1OSwgMHg4ZGFmLCAweDhkYWYsIDB4OGRhZiwgMHg4ZGIwLCAweDhkYzEsIDB4OGRjMSwgMHg3MDBjLAorCTB4MGNiYSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg3OGEwLCAweDc5YTAsIDB4OTEwNiwgMHgxOTA0LAorCTB4OGRhMSwgMHg3ODE0LCAweGQwYmMsIDB4MTkwNCwgMHg4ZGFhLCAweDAxMmUsIDB4NzAxOCwgMHg5MTBhLAorCTB4MTEyOCwgMHg3MDMwLCAweDkwMDUsIDB4MTkwNCwgMHg4ZGYzLCAweDAwMDUsIDB4MTIxMCwgMHg3MTE0LAorCTB4OTEwYSwgMHg5MTkyLCAweDAwMGEsIDB4MDIxMCwgMHgyMDA5LCAweDAwMGEsIDB4MjAwMSwgMHgxODg4LAorCTB4MjAxNCwgMHgyMDAxLCAweDE5MzYsIDB4MjAwNCwgMHg5MTAwLCAweDkyMDIsIDB4MGU1MCwgMHgwODBjLAorCTB4OGY1MywgMHgyMjAwLCAweDkxMDIsIDB4MDIwOCwgMHgyMjA4LCAweDAwOTYsIDB4NzAyYywgMHgyMDQ4LAorCTB4YTg3MywgMHgwMDAxLCAweGE5NzYsIDB4MDgwYywgMHg5MDVjLCAweDIxMDAsIDB4YTg3ZSwgMHhhODZmLAorCTB4MDAwMCwgMHgwMDllLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDksIDB4MWEyNCwgMHgyMTA0LAorCTB4YzA4NSwgMHgyMDBhLCAweDcwMGYsIDB4MDAwMiwgMHgwMTJlLCAweDA4MGMsIDB4MTE2ZCwgMHgxZGU4LAorCTB4MDAwNSwgMHg3OGEwLCAweDc5YTAsIDB4OTEwNiwgMHgwOTA0LCAweDhkNjEsIDB4MDgwYywgMHg4ZjJiLAorCTB4MDEyZSwgMHgwMDA1LCAweDc4MTAsIDB4YzBjNSwgMHg3ODEyLCAweDA4MDQsIDB4OGQ2MSwgMHgwMDA1LAorCTB4NzAwYywgMHgwMDAyLCAweDhkYjUsIDB4OGRiOCwgMHg4ZGI3LCAweDA4MGMsIDB4OGQ1NywgMHgwMDA1LAorCTB4ODAwMSwgMHg3MDBlLCAweDAwOTYsIDB4NzAyYywgMHgyMDQ4LCAweGE5NzQsIDB4MDA5ZSwgMHgwMDExLAorCTB4MGNhMCwgMHgwMDA1LCAweDAwOTYsIDB4NzAyYywgMHgyMDQ4LCAweDcwMTgsIDB4OTEwMCwgMHg3MjE0LAorCTB4OTIxYSwgMHgxMTMwLCAweDcwMWMsIDB4YTg4ZSwgMHg3MDIwLCAweGE4OTIsIDB4OTAwNiwgMHgwMDY4LAorCTB4MDAwNiwgMHgwODBjLCAweDkwNWMsIDB4MjEwMCwgMHhhYThjLCAweDkyMTAsIDB4YWE4ZSwgMHgxMjIwLAorCTB4YTg5MCwgMHg5MDgxLCAweDAwMDAsIDB4YTg5MiwgMHgwMDBlLCAweDAwOWUsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg3OGEyLCAweDcwMWEsIDB4MDgwYywgMHg4ZjJiLCAweDAxMmUsIDB4MDAwNSwgMHgwMGU2LAorCTB4MjA3MSwgMHgxOTI0LCAweDcwMGMsIDB4MDAwMiwgMHg4ZGYxLCAweDhkZjEsIDB4OGRlZiwgMHg3MDBmLAorCTB4MDAwMSwgMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAzMCwgMHg5MDA1LAorCTB4MDUwOCwgMHgyMDc4LCAweDc4MTQsIDB4MjA0OCwgMHhhZTg4LCAweDAwYjYsIDB4MjA1OSwgMHgwMDAwLAorCTB4MDgwYywgMHg4ZTYxLCAweDAwYmUsIDB4MDFiMCwgMHgwMGU2LCAweDIwNzEsIDB4MTkzZCwgMHgwODBjLAorCTB4OGVhOCwgMHgwMGVlLCAweDAxNzgsIDB4MDA5NiwgMHgwODBjLCAweDEwNzIsIDB4MjkwMCwgMHgwMDllLAorCTB4MDE0OCwgMHhhOGFhLCAweDA0ZDEsIDB4MDA0MSwgMHgyMDAxLCAweDE5NDcsIDB4MjAwMywgMHgwMDAwLAorCTB4MDEyZSwgMHgwOGM4LCAweDAxMmUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwYzYsIDB4MDA4NiwgMHgwMGE2LAorCTB4Mjk0MCwgMHgyNjUwLCAweDI2MDAsIDB4OTAwNSwgMHgwMTgwLCAweGE4NjQsIDB4OTA4NCwgMHgwMDBmLAorCTB4MjA2OCwgMHg5ZDg4LCAweDFlYzEsIDB4MjE2NSwgMHgwMDU2LCAweDIwMjksIDB4MDAwMCwgMHgwODBjLAorCTB4OGZlMSwgMHgwODBjLCAweDFlOTcsIDB4MWRkOCwgMHgwMDVlLCAweDAwYWUsIDB4MjAwMSwgMHgxODdmLAorCTB4MjAwNCwgMHhhODhhLCAweDAwYzYsIDB4MmY2MCwgMHgwODBjLCAweDE3YWQsIDB4MDBjZSwgMHg3ODFmLAorCTB4MDEwMSwgMHg3ODEzLCAweDAwMDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg4ZWI3LAorCTB4MDEyZSwgMHgwMDhlLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDcwMzAsIDB4OTAwNSwgMHgwMTM4LAorCTB4MjA3OCwgMHg3ODBjLCAweDcwMzIsIDB4MjAwMSwgMHgxOTQ3LCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LAorCTB4MDBlNiwgMHgyMDcxLCAweDE5MjQsIDB4NzAzMCwgMHg2MDBlLCAweDJjMDAsIDB4NzAzMiwgMHgwMGVlLAorCTB4MDAwNSwgMHgwMGQ2LCAweDAwYzYsIDB4MDAyNiwgMHg5YjgwLCAweDkxMmEsIDB4MjAwNSwgMHg5MDZkLAorCTB4MDkwYywgMHgwZDg1LCAweDliODAsIDB4OTEyMiwgMHgyMDA1LCAweDkwNjUsIDB4MDkwYywgMHgwZDg1LAorCTB4NjExNCwgMHgyNjAwLCAweDkxMDIsIDB4MDI0OCwgMHg2ODI4LCAweDkxMDIsIDB4MDJmMCwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMDJlLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDY4MDQsIDB4ZDA5NCwgMHgwMTQ4LAorCTB4Njg1NCwgMHhkMDg0LCAweDExNzgsIDB4YzA4NSwgMHg2ODU2LCAweDIwMTEsIDB4ODAyNiwgMHgwODBjLAorCTB4NGNhMSwgMHg2ODRjLCAweDAwOTYsIDB4OTA0ZCwgMHgwOTBjLCAweDBkODUsIDB4YTgwNCwgMHg4MDAwLAorCTB4YTgwNiwgMHgwMDllLCAweDkwMDYsIDB4MjAzMCwgMHgwYzIwLCAweDY4NTQsIDB4ZDA4YywgMHgxZDA4LAorCTB4YzA4ZCwgMHg2ODU2LCAweDIwMTEsIDB4ODAyNSwgMHgwODBjLCAweDRjYTEsIDB4Njg0YywgMHgwMDk2LAorCTB4OTA0ZCwgMHgwOTBjLCAweDBkODUsIDB4YTgwMCwgMHg4MDAwLCAweGE4MDIsIDB4MDA5ZSwgMHgwODg4LAorCTB4NzAwMCwgMHgyMDE5LCAweDAwMDgsIDB4ODMxOSwgMHg3MTA0LCAweDkxMDIsIDB4MTExOCwgMHgyMzAwLAorCTB4OTAwNSwgMHgwMDIwLCAweDAyMTAsIDB4OTMwMiwgMHgwMDA4LCAweDgwMDIsIDB4MDAwNSwgMHgwMGQ2LAorCTB4NzgxNCwgMHg5MDA1LCAweDA5MGMsIDB4MGQ4NSwgMHg3ODFjLCAweDkwODQsIDB4MDEwMSwgMHg5MDg2LAorCTB4MDEwMSwgMHgxOTBjLCAweDBkODUsIDB4NzgyNywgMHgwMDAwLCAweDIwNjksIDB4MTkzZCwgMHg2ODA0LAorCTB4OTA4MCwgMHgxOTNmLCAweDJmMDgsIDB4MjEwMiwgMHg2OTA0LCAweDgxMDgsIDB4OTE4MiwgMHgwMDA4LAorCTB4MDIwOCwgMHg5MDBlLCAweDY5MDYsIDB4OTE4MCwgMHgxOTNmLCAweDIwMDMsIDB4MDAwMCwgMHgwMGRlLAorCTB4MDAwNSwgMHgwMDk2LCAweDAwYzYsIDB4MjA2MCwgMHg2MDE0LCAweDIwNDgsIDB4YThhOCwgMHgwMDk2LAorCTB4MjA0OCwgMHg5MDA1LCAweDE5MGMsIDB4MTA4YiwgMHgwMDllLCAweGE4YWIsIDB4MDAwMCwgMHgwODBjLAorCTB4MTAwYiwgMHgwODBjLCAweGIxNmMsIDB4MDBjZSwgMHgwMDllLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LAorCTB4MDAwOSwgMHgxMTI4LCAweDYwMWMsIDB4ZDBjNCwgMHgwMTEwLCAweDkwMDYsIDB4MDAwNSwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMDA1LCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDAxNzgsIDB4NjAxMCwgMHg5MDA1LAorCTB4MDE1MCwgMHgwMGI2LCAweDIwNTgsIDB4MDgwYywgMHg5MjVlLCAweDAwYmUsIDB4NjAxMywgMHgwMDAwLAorCTB4NjAxYiwgMHgwMDAwLCAweDAwMTAsIDB4MmMwMCwgMHgwODYxLCAweDAwMDUsIDB4MjAwOSwgMHgxOTI4LAorCTB4MjEwYywgMHhkMTk0LCAweDAwMDUsIDB4MjAwOSwgMHgxOTI4LCAweDIxMGMsIDB4ZDFjNCwgMHgwMDA1LAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBlNiwgMHgyMDcxLCAweDE5MjQsIDB4NzExMCwgMHhjMTk0LAorCTB4YzE4NSwgMHg3MDA3LCAweDAwMDAsIDB4NzExMiwgMHgyMDAxLCAweDAwM2IsIDB4MDgwYywgMHgxNmI5LAorCTB4MDBlZSwgMHgwMTJlLCAweDAwMDUsIDB4NzgxNCwgMHhkMGJjLCAweDExMDgsIDB4MDAwNSwgMHg3ODEwLAorCTB4YzBjNSwgMHg3ODEyLCAweDBjYzAsIDB4MDA5NiwgMHgwMGQ2LCAweDkwMDYsIDB4NzAwNiwgMHg3MDBlLAorCTB4NzAxYSwgMHg3MDFlLCAweDcwMjIsIDB4NzAxNiwgMHg3MDJhLCAweDcwMjYsIDB4NzAyZiwgMHgwMDAwLAorCTB4MDgwYywgMHg5MGFhLCAweDAxNzAsIDB4MDgwYywgMHg5MGRmLCAweDAxNTgsIDB4MjkwMCwgMHg3MDAyLAorCTB4NzAwYSwgMHg3MDFhLCAweDcwMTMsIDB4MDAwMSwgMHg3MDFmLCAweDAwMGEsIDB4MDBkZSwgMHgwMDllLAorCTB4MDAwNSwgMHg5MDBlLCAweDBjZDgsIDB4MDBlNiwgMHgwMDk2LCAweDAwODYsIDB4MDBkNiwgMHgwMGM2LAorCTB4MjA3MSwgMHgxOTMxLCAweDcyMWMsIDB4MjEwMCwgMHg5MjAyLCAweDE2MTgsIDB4MDgwYywgMHg5MGRmLAorCTB4MDkwYywgMHgwZDg1LCAweDcwMTgsIDB4OTAwNSwgMHgxMTYwLCAweDI5MDAsIDB4NzAwMiwgMHg3MDBhLAorCTB4NzAxYSwgMHg5MDA2LCAweDcwMDYsIDB4NzAwZSwgMHhhODA2LCAweGE4MDIsIDB4NzAxMiwgMHg3MDFlLAorCTB4MDAzOCwgMHgyMDQwLCAweGE4MDYsIDB4MjkwMCwgMHhhMDAyLCAweDcwMWEsIDB4YTgwMywgMHgwMDAwLAorCTB4NzAxMCwgMHg4MDAwLCAweDcwMTIsIDB4NzAxYywgMHg5MDgwLCAweDAwMGEsIDB4NzAxZSwgMHg3MjFjLAorCTB4MDhkMCwgMHg3MjFjLCAweDAwY2UsIDB4MDBkZSwgMHgwMDhlLCAweDAwOWUsIDB4MDBlZSwgMHgwMDA1LAorCTB4MDA5NiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MjA3MSwgMHgxOTMxLCAweDczMDAsIDB4ODMxZiwgMHg4MzFlLCAweDgzMWUsIDB4OTM4NCwgMHgwMDNmLAorCTB4MjBlOCwgMHg5MzljLCAweGZmYzAsIDB4OTM5OCwgMHgwMDAzLCAweDcxMDQsIDB4MDgwYywgMHg5MDVjLAorCTB4ODEwYywgMHgyMTAwLCAweDkzMTgsIDB4ODAwMywgMHgyMjI4LCAweDIwMjEsIDB4MDA3OCwgMHg5NDAyLAorCTB4OTUzMiwgMHgwMjA4LCAweDIwMjgsIDB4MjUwMCwgMHg4MDA0LCAweDIwYTgsIDB4MjNhMCwgMHhhMDAxLAorCTB4YTAwMSwgMHg0MDA1LCAweDI1MDgsIDB4MDgwYywgMHg5MDY1LCAweDIxMzAsIDB4NzAxNCwgMHg5NjAwLAorCTB4NzAxNiwgMHgyNjAwLCAweDcxMWMsIDB4OTEwMiwgMHg3MDFlLCAweDcwMDQsIDB4OTYwMCwgMHgyMDA4LAorCTB4OTA4MiwgMHgwMDBhLCAweDExOTAsIDB4NzAwMCwgMHgyMDQ4LCAweGE4MDAsIDB4OTAwNSwgMHgxMTQ4LAorCTB4MjAwOSwgMHgwMDAxLCAweDAwMjYsIDB4MDgwYywgMHg4ZjUzLCAweDAwMmUsIDB4NzAwMCwgMHgyMDQ4LAorCTB4YTgwMCwgMHg3MDAyLCAweDcwMDcsIDB4MDAwMCwgMHgwMDA4LCAweDcxMDYsIDB4MjUwMCwgMHg5MjEyLAorCTB4MTkwNCwgMHg4ZjkyLCAweDAxMmUsIDB4MDBlZSwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMDllLAorCTB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg5NTgwLAorCTB4OTEyMiwgMHgyMDA1LCAweDkwNzUsIDB4MDkwYywgMHgwZDg1LCAweDA4MGMsIDB4OTAzNywgMHgwMTJlLAorCTB4OTU4MCwgMHg5MTFlLCAweDIwMDUsIDB4OTA3NSwgMHgwOTBjLCAweDBkODUsIDB4MDE1NiwgMHgwMTM2LAorCTB4MDFjNiwgMHgwMTQ2LCAweDAxZDYsIDB4ODMxZiwgMHg4MzFlLCAweDgzMWUsIDB4OTM4NCwgMHgwMDNmLAorCTB4MjBlMCwgMHg5Mzg0LCAweGZmYzAsIDB4OTEwMCwgMHgyMDk4LCAweGE4NjAsIDB4MjBlOCwgMHhhOTVjLAorCTB4MmMwNSwgMHg5MTAwLCAweDIwYTAsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDMsIDB4MmUwYywgMHgyZDAwLAorCTB4MDAwMiwgMHg5MDIxLCAweDkwMjEsIDB4OTAyMywgMHg5MDIxLCAweDkwMjMsIDB4OTAyMSwgMHg5MDIxLAorCTB4OTAyMSwgMHg5MDIxLCAweDkwMjEsIDB4OTAyOSwgMHg5MDIxLCAweDkwMjksIDB4OTAyMSwgMHg5MDIxLAorCTB4OTAyMSwgMHgwODBjLCAweDBkODUsIDB4NDEwNCwgMHgyMGE5LCAweDAwMDIsIDB4NDAwMiwgMHg0MDAzLAorCTB4MDAyOCwgMHgyMGE5LCAweDAwMDIsIDB4NDAwMywgMHg0MTA0LCAweDQwMDMsIDB4MDFkZSwgMHgwMTRlLAorCTB4MDFjZSwgMHgwMTNlLCAweDAxNWUsIDB4MDBlZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDk2LAorCTB4NzAxNCwgMHg4MDAxLCAweDcwMTYsIDB4NzEwYywgMHgyMTEwLCAweDAwZjEsIDB4ODEwYywgMHg5MTg4LAorCTB4MDAwMywgMHg3MzA4LCAweDgyMTAsIDB4OTI4MiwgMHgwMDBhLCAweDExOTgsIDB4NzAwOCwgMHgyMDQ4LAorCTB4YTgwMCwgMHg5MDA1LCAweDAxNTgsIDB4MDAwNiwgMHgwODBjLCAweDkwZWUsIDB4MDA5ZSwgMHhhODA3LAorCTB4MDAwMCwgMHgyOTAwLCAweDcwMGEsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsIDB4NzAwZiwgMHgwMDAwLAorCTB4MDAwOCwgMHg3MjBlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDA2LCAweDgxMGIsIDB4ODEwYiwgMHgyMTAwLAorCTB4ODEwYiwgMHg5MTAwLCAweDIwMDgsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAyNiwgMHgyMTAwLAorCTB4OTAwNSwgMHgwMTU4LCAweDkwOTIsIDB4MDAwYywgMHgwMjQwLCAweDkwMGUsIDB4ODEwOCwgMHg5MDgyLAorCTB4MDAwYywgMHgxZGUwLCAweDAwMmUsIDB4MDAwZSwgMHgwMDA1LCAweDkwMGUsIDB4MGNkOCwgMHgyZDAwLAorCTB4OTBiOCwgMHgwMDA4LCAweDIwMzEsIDB4OTBhOCwgMHg5MDFlLCAweDY4MDgsIDB4OTAwNSwgMHgwMTA4LAorCTB4ODMxOCwgMHg2OTBjLCAweDkxMGEsIDB4MDI0OCwgMHgwMTQwLCAweDgzMTgsIDB4NjgxMCwgMHg5MTEyLAorCTB4MDIyMCwgMHgwMTE4LCAweDgzMTgsIDB4MjIwOCwgMHgwY2QwLCAweDIzM2EsIDB4NjgwNCwgMHhkMDg0LAorCTB4MjMwMCwgMHgyMDIxLCAweDAwMDEsIDB4MTE1MCwgMHg5MDgyLCAweDAwMDMsIDB4MDk2NywgMHgwYTY3LAorCTB4ODQyMCwgMHg5MDgyLCAweDAwMDcsIDB4MDk2NywgMHgwYTY3LCAweDBjZDAsIDB4OTA4MiwgMHgwMDAyLAorCTB4MDk2NywgMHgwYTY3LCAweDg0MjAsIDB4OTA4MiwgMHgwMDA1LCAweDA5NjcsIDB4MGE2NywgMHgwY2QwLAorCTB4NmMxYSwgMHgwMDA1LCAweDAwOTYsIDB4MDA0NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyYjAwLAorCTB4OTA4MCwgMHg5MTI2LCAweDIwMDUsIDB4OTAwNSwgMHgwOTBjLCAweDBkODUsIDB4MjAwNCwgMHg5MGEwLAorCTB4MDAwYSwgMHgwODBjLCAweDEwNzIsIDB4MDFkMCwgMHgyOTAwLCAweDcwMjYsIDB4YTgwMywgMHgwMDAwLAorCTB4YTgwNywgMHgwMDAwLCAweDA4MGMsIDB4MTA3MiwgMHgwMTg4LCAweDcwMjQsIDB4YTgwMiwgMHhhODA3LAorCTB4MDAwMCwgMHgyOTAwLCAweDcwMjYsIDB4OTRhMiwgMHgwMDBhLCAweDAxMTAsIDB4MDIwOCwgMHgwYzkwLAorCTB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDA0ZSwgMHgwMDllLCAweDAwMDUsIDB4NzAyNCwgMHg5MDA1LAorCTB4MGRjOCwgMHgyMDQ4LCAweGFjMDAsIDB4MDgwYywgMHgxMDhiLCAweDI0MDAsIDB4MGNjMCwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDcwMjQsIDB4MjA0OCwgMHg5MDA1LCAweDAxMzAsIDB4YTgwMCwgMHg3MDI2LAorCTB4YTgwMywgMHgwMDAwLCAweGE4MDcsIDB4MDAwMCwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHg3MDI0LCAweGE4MDIsIDB4MjkwMCwgMHg3MDI2LCAweDAxMmUsIDB4MDAwNSwgMHgwMDk2LAorCTB4OWU4MCwgMHgwMDA5LCAweDIwMDQsIDB4OTAwNSwgMHgwMTM4LCAweDIwNDgsIDB4YTgwMCwgMHgwMDA2LAorCTB4MDgwYywgMHgxMDhiLCAweDAwMGUsIDB4MGNiOCwgMHgwMDllLCAweDAwMDUsIDB4MDA5NiwgMHg3MDA4LAorCTB4OTAwNSwgMHgwMTM4LCAweDIwNDgsIDB4YTgwMCwgMHgwMDA2LCAweDA4MGMsIDB4MTA4YiwgMHgwMDBlLAorCTB4MGNiOCwgMHg5MDA2LCAweDcwMDIsIDB4NzAwYSwgMHg3MDA2LCAweDcwMGUsIDB4NzAxYSwgMHg3MDFlLAorCTB4NzAyMiwgMHg3MDJhLCAweDcwMjYsIDB4NzAyZSwgMHgwMDllLCAweDAwMDUsIDB4MWE3MSwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDE5MzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MTg4OCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDE4NzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDBlNiwgMHgwMGM2LAorCTB4MDBiNiwgMHgwMGE2LCAweGE4YTgsIDB4MjA0MCwgMHgyMDcxLCAweDE4NzcsIDB4MDgwYywgMHg5MjRhLAorCTB4YTA2NywgMHgwMDIzLCAweDYwMTAsIDB4OTA1ZCwgMHgwOTA0LCAweDkyMWYsIDB4YjgxNCwgMHhhMDZlLAorCTB4YjkxMCwgMHhhMTcyLCAweGI5YTAsIDB4YTE3NiwgMHgyMDAxLCAweDAwMDMsIDB4YTA3ZSwgMHhhODM0LAorCTB4YTA4MiwgMHhhMDdiLCAweDAwMDAsIDB4YTg5OCwgMHg5MDA1LCAweDAxMTgsIDB4YTA3OCwgMHhjMDg1LAorCTB4YTA3YSwgMHgyODU4LCAweDIwMzEsIDB4MDAxOCwgMHhhMDY4LCAweDkwOGEsIDB4MDAxOSwgMHgxYTBjLAorCTB4MGQ4NSwgMHgyMDIwLCAweDIwNTAsIDB4Mjk0MCwgMHhhODY0LCAweDkwYmMsIDB4MDBmZiwgMHg5MDhjLAorCTB4MDAwZiwgMHg5MWUwLCAweDFlYzEsIDB4MmM2NSwgMHg5Nzg2LCAweDAwMjQsIDB4MmMwNSwgMHgxNTkwLAorCTB4OTA4YSwgMHgwMDM2LCAweDFhMGMsIDB4MGQ4NSwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHg5MThhLAorCTB4OTE4YSwgMHg5MThjLCAweDkxOGEsIDB4OTE4YSwgMHg5MThhLCAweDkxOGUsIDB4OTE4YSwgMHg5MThhLAorCTB4OTE4YSwgMHg5MTkwLCAweDkxOGEsIDB4OTE4YSwgMHg5MThhLCAweDkxOTIsIDB4OTE4YSwgMHg5MThhLAorCTB4OTE4YSwgMHg5MTk0LCAweDkxOGEsIDB4OTE4YSwgMHg5MThhLCAweDkxOTYsIDB4OTE4YSwgMHg5MThhLAorCTB4OTE4YSwgMHg5MTk4LCAweDA4MGMsIDB4MGQ4NSwgMHhhMTgwLCAweDA0YjgsIDB4YTE5MCwgMHgwNGE4LAorCTB4YTFhMCwgMHgwNDk4LCAweGExYjAsIDB4MDQ4OCwgMHhhMWMwLCAweDA0NzgsIDB4YTFkMCwgMHgwNDY4LAorCTB4YTFlMCwgMHgwNDU4LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkODUsIDB4OTA4MiwgMHgwMDFiLAorCTB4MDAwMiwgMHg5MWJjLCAweDkxYmEsIDB4OTFiYSwgMHg5MWJhLCAweDkxYmEsIDB4OTFiYSwgMHg5MWJlLAorCTB4OTFiYSwgMHg5MWJhLCAweDkxYmEsIDB4OTFiYSwgMHg5MWJhLCAweDkxYzAsIDB4OTFiYSwgMHg5MWJhLAorCTB4OTFiYSwgMHg5MWJhLCAweDkxYmEsIDB4OTFjMiwgMHg5MWJhLCAweDkxYmEsIDB4OTFiYSwgMHg5MWJhLAorCTB4OTFiYSwgMHg5MWM0LCAweDA4MGMsIDB4MGQ4NSwgMHhhMTgwLCAweDAwMzgsIDB4YTE5OCwgMHgwMDI4LAorCTB4YTFiMCwgMHgwMDE4LCAweGExYzgsIDB4MDAwOCwgMHhhMWUwLCAweDI2MDAsIDB4MDAwMiwgMHg5MWUwLAorCTB4OTFlMiwgMHg5MWU0LCAweDkxZTYsIDB4OTFlOCwgMHg5MWVhLCAweDkxZWMsIDB4OTFlZSwgMHg5MWYwLAorCTB4OTFmMiwgMHg5MWY0LCAweDkxZjYsIDB4OTFmOCwgMHg5MWZhLCAweDkxZmMsIDB4OTFmZSwgMHg5MjAwLAorCTB4OTIwMiwgMHg5MjA0LCAweDkyMDYsIDB4OTIwOCwgMHg5MjBhLCAweDkyMGMsIDB4OTIwZSwgMHg5MjEwLAorCTB4MDgwYywgMHgwZDg1LCAweGI5ZTIsIDB4MDQ2OCwgMHhiOWRlLCAweDA0NTgsIDB4YjlkYSwgMHgwNDQ4LAorCTB4YjlkNiwgMHgwNDM4LCAweGI5ZDIsIDB4MDQyOCwgMHhiOWNlLCAweDA0MTgsIDB4YjljYSwgMHgwNDA4LAorCTB4YjljNiwgMHgwMGY4LCAweGI5YzIsIDB4MDBlOCwgMHhiOWJlLCAweDAwZDgsIDB4YjliYSwgMHgwMGM4LAorCTB4YjliNiwgMHgwMGI4LCAweGI5YjIsIDB4MDBhOCwgMHhiOWFlLCAweDAwOTgsIDB4YjlhYSwgMHgwMDg4LAorCTB4YjlhNiwgMHgwMDc4LCAweGI5YTIsIDB4MDA2OCwgMHhiOTllLCAweDAwNTgsIDB4Yjk5YSwgMHgwMDQ4LAorCTB4Yjk5NiwgMHgwMDM4LCAweGI5OTIsIDB4MDAyOCwgMHhiOThlLCAweDAwMTgsIDB4Yjk4YSwgMHgwMDA4LAorCTB4Yjk4NiwgMHg4NjMxLCAweDg0MjEsIDB4MDEzMCwgMHgwODBjLCAweDFlOTcsIDB4MDkwYywgMHgwZDg1LAorCTB4MDgwNCwgMHg5MTY0LCAweDAwYWUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHhhODZjLAorCTB4YTA2ZSwgMHhhODcwLCAweGEwNzIsIDB4YTA3NywgMHgwMGZmLCAweDkwMDYsIDB4MDgwNCwgMHg5MTQ2LAorCTB4MDAwNiwgMHgwMDE2LCAweDAwYjYsIDB4NjAxMCwgMHgyMDU4LCAweGI4MTAsIDB4OTAwNSwgMHgwMWIwLAorCTB4MjAwMSwgMHgxOTI1LCAweDIwMDQsIDB4OTAwNSwgMHgwMTg4LCAweDIwMDEsIDB4MTgwMCwgMHgyMDA0LAorCTB4OTA4NiwgMHgwMDAzLCAweDExNTgsIDB4MDAzNiwgMHgwMDQ2LCAweGJiYTAsIDB4MjAyMSwgMHgwMDA0LAorCTB4MjAxMSwgMHg4MDE0LCAweDA4MGMsIDB4NGNhMSwgMHgwMDRlLCAweDAwM2UsIDB4MDBiZSwgMHgwMDFlLAorCTB4MDAwZSwgMHgwMDA1LCAweDkwMTYsIDB4NzEwYywgMHhhODM0LCAweDkxMGEsIDB4YTkzNiwgMHg3MDA4LAorCTB4OTAwNSwgMHgwMTIwLCAweDgyMTAsIDB4OTEwYSwgMHgwMjMwLCAweDAxMjgsIDB4NzAxMCwgMHg4MjEwLAorCTB4OTEwYSwgMHgwMjA4LCAweDFkZTAsIDB4YWE4YSwgMHhhMjZhLCAweDAwMDUsIDB4MDBmNiwgMHgwMGQ2LAorCTB4MDAzNiwgMHgyMDc5LCAweDAzMDAsIDB4NzgxYiwgMHgwMjAwLCAweDc4MTgsIDB4ZDA5NCwgMHgxZGQ4LAorCTB4NzgxYiwgMHgwMjAyLCAweGEwMDEsIDB4YTAwMSwgMHg3ODE4LCAweGQwOTQsIDB4MWRhMCwgMHhiOGFjLAorCTB4OTA2ZCwgMHgwMTk4LCAweDIwNzksIDB4MDAwMCwgMHg5YzFlLCAweDExMTgsIDB4NjgwYywgMHhiOGFlLAorCTB4MDA1MCwgMHg5YzA2LCAweDAxMzAsIDB4MmQ3OCwgMHg2ODBjLCAweDkwNmQsIDB4MWRkMCwgMHgwODBjLAorCTB4MGQ4NSwgMHg2YjBjLCAweDdiMGUsIDB4NjAwZiwgMHgwMDAwLCAweDIwNzksIDB4MDMwMCwgMHg3ODFiLAorCTB4MDIwMCwgMHgwMDNlLCAweDAwZGUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMDk2LAorCTB4MDBjNiwgMHgwMDM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAxNTYsIDB4MjBhOSwgMHgwMWZmLAorCTB4MjA3MSwgMHgwMzAwLCAweDcwMWIsIDB4MDIwMCwgMHg3MDE4LCAweGQwOTQsIDB4MDExMCwgMHgxZjA0LAorCTB4OTI5YSwgMHg3MDFiLCAweDAyMDIsIDB4YTAwMSwgMHhhMDAxLCAweDcwMTgsIDB4ZDA5NCwgMHgxZDkwLAorCTB4YjhhYywgMHg5MDY1LCAweDAxZjAsIDB4NjAwYywgMHhiOGFlLCAweDYwMjQsIDB4YzA4ZCwgMHg2MDI2LAorCTB4NjAwMywgMHgwMDA0LCAweDYwMWIsIDB4MDAwMCwgMHg2MDEzLCAweDAwMDAsIDB4NjAxZiwgMHgwMTAxLAorCTB4NjAxNCwgMHg5MDRkLCAweDA5MGMsIDB4MGQ4NSwgMHhhODhiLCAweDAwMDAsIDB4YThhOCwgMHhhOGFiLAorCTB4MDAwMCwgMHg5MDRkLCAweDA5MGMsIDB4MGQ4NSwgMHgwODBjLCAweDEwOGIsIDB4MDgwYywgMHg4ZTU4LAorCTB4MDhmOCwgMHgyMDcxLCAweDAzMDAsIDB4NzAxYiwgMHgwMjAwLCAweDAxNWUsIDB4MDEyZSwgMHgwMDNlLAorCTB4MDBjZSwgMHgwMDllLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBiNiwgMHgwMDE2LAorCTB4MDAwNiwgMHgwMTU2LCAweDA4MGMsIDB4MjY4YywgMHgwMTVlLCAweDExYjAsIDB4MDgwYywgMHg2NzQ5LAorCTB4MTkwYywgMHgwZDg1LCAweDAwMGUsIDB4MDAxZSwgMHhiOTEyLCAweGI4MTYsIDB4MDgwYywgMHhiMTE2LAorCTB4MDE0MCwgMHgyYjAwLCAweDYwMTIsIDB4NjAyMywgMHgwMDAxLCAweDIwMDksIDB4MDAwMSwgMHgwODBjLAorCTB4YjIwYSwgMHgwMGJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDBlLCAweDAwMWUsIDB4MGNkMCwgMHgwMDY2LAorCTB4NjAwMCwgMHg5MGIyLCAweDAwMTAsIDB4MWEwYywgMHgwZDg1LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LAorCTB4OTMxMCwgMHg5MzEwLCAweDkzMTAsIDB4OTMxMiwgMHg5MzViLCAweDkzMTAsIDB4OTMxMCwgMHg5MzEwLAorCTB4OTNkNSwgMHg5MzEwLCAweDk0MGQsIDB4OTMxMCwgMHg5MzEwLCAweDkzMTAsIDB4OTMxMCwgMHg5MzEwLAorCTB4MDgwYywgMHgwZDg1LCAweDkxODIsIDB4MDA0MCwgMHgwMDAyLCAweDkzMjUsIDB4OTMyNSwgMHg5MzI1LAorCTB4OTMyNSwgMHg5MzI1LCAweDkzMjUsIDB4OTMyNSwgMHg5MzI1LCAweDkzMjUsIDB4OTMyNywgMHg5MzM4LAorCTB4OTMyNSwgMHg5MzI1LCAweDkzMjUsIDB4OTMyNSwgMHg5MzQ5LCAweDA4MGMsIDB4MGQ4NSwgMHgwMDk2LAorCTB4NjExNCwgMHgyMTQ4LCAweGE4N2IsIDB4MDAwMCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGJiLAorCTB4MDUwMCwgMHgwMGJlLCAweDA4MGMsIDB4NmUxMSwgMHgwODBjLCAweGIxNmMsIDB4MDA5ZSwgMHgwMDA1LAorCTB4MDgwYywgMHg5YTQ4LCAweDAwZDYsIDB4NjExNCwgMHgwODBjLCAweGNmMWIsIDB4MDEzMCwgMHgwMDk2LAorCTB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4NzAxMiwgMHgwMDllLCAweDAwZGUsIDB4MDgwYywgMHhiMTZjLAorCTB4MDAwNSwgMHgwODBjLCAweDlhNDgsIDB4MDgwYywgMHgzMzE1LCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LAorCTB4MDgwYywgMHhjZjFiLCAweDAxMjAsIDB4YTg3YiwgMHgwMDI5LCAweDA4MGMsIDB4NzAxMiwgMHgwMDllLAorCTB4MDgwYywgMHhiMTZjLCAweDAwMDUsIDB4NjAxYiwgMHgwMDAwLCAweDkxODIsIDB4MDA0MCwgMHgwMDk2LAorCTB4MDAwMiwgMHg5Mzc2LCAweDkzNzYsIDB4OTM3NiwgMHg5Mzc2LCAweDkzNzYsIDB4OTM3NiwgMHg5Mzc2LAorCTB4OTM3NiwgMHg5Mzc4LCAweDkzNzYsIDB4OTM3NiwgMHg5Mzc2LCAweDkzZDEsIDB4OTM3NiwgMHg5Mzc2LAorCTB4OTM3NiwgMHg5Mzc2LCAweDkzNzYsIDB4OTM3NiwgMHg5MzdmLCAweDkzNzYsIDB4MDgwYywgMHgwZDg1LAorCTB4NjExNCwgMHgyMTQ4LCAweGE5MzgsIDB4OTE4ZSwgMHhmZmZmLCAweDA5MDQsIDB4OTNkMSwgMHg2MDI0LAorCTB4ZDA4YywgMHgxNWQ4LCAweDA4MGMsIDB4OGYwZSwgMHgwNWUwLCAweDAwZTYsIDB4NjExNCwgMHgyMTQ4LAorCTB4MDgwYywgMHg5MTJlLCAweDAwOTYsIDB4YThhOCwgMHgyMDQ4LCAweDA4MGMsIDB4NmRhOSwgMHgwMDllLAorCTB4YThhYiwgMHgwMDAwLCAweDYwMTAsIDB4OTAwNSwgMHgwMTI4LCAweDAwYjYsIDB4MjA1OCwgMHgwODBjLAorCTB4OTI1ZSwgMHgwMGJlLCAweGFlODgsIDB4MDBiNiwgMHgyMDU5LCAweDAwMDAsIDB4MDgwYywgMHg4ZTYxLAorCTB4MDBiZSwgMHgwMWUwLCAweDIwNzEsIDB4MTkzZCwgMHgwODBjLCAweDhlYTgsIDB4MDFiOCwgMHg5MDg2LAorCTB4MDAwMSwgMHgxMTI4LCAweDIwMDEsIDB4MTk0NywgMHgyMDA0LCAweDkwMDUsIDB4MTE3OCwgMHgwMDk2LAorCTB4MDgwYywgMHgxMDU5LCAweDI5MDAsIDB4MDA5ZSwgMHgwMTQ4LCAweGE4YWEsIDB4MDBmNiwgMHgyYzc4LAorCTB4MDgwYywgMHg4ZTFjLCAweDAwZmUsIDB4MDBlZSwgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHg4ZTU4LAorCTB4MGNkMCwgMHgwODBjLCAweDhmMTMsIDB4MTE2MCwgMHg2MDEwLCAweDkwMDUsIDB4MDEzMCwgMHgyMDU4LAorCTB4YjhhYywgMHg5MDA1LCAweDE5MGMsIDB4MGQ4NSwgMHg2MDEyLCAweDJjMDAsIDB4MDgwYywgMHg4ZWQ5LAorCTB4MDAwNSwgMHgwODBjLCAweDk0ODksIDB4MDA5ZSwgMHgwMDA1LCAweDkxODIsIDB4MDA0MCwgMHgwMDk2LAorCTB4MDAwMiwgMHg5M2U5LCAweDkzZTksIDB4OTNlOSwgMHg5M2ViLCAweDkzZTksIDB4OTNlOSwgMHg5M2U5LAorCTB4OTQwYiwgMHg5M2U5LCAweDkzZTksIDB4OTNlOSwgMHg5M2U5LCAweDkzZTksIDB4OTNlOSwgMHg5M2U5LAorCTB4OTNlOSwgMHgwODBjLCAweDBkODUsIDB4NjAwMywgMHgwMDAzLCAweDYxMDYsIDB4NjAxNCwgMHgyMDQ4LAorCTB4YThhYywgMHhhODM2LCAweGE4YjAsIDB4YTgzYSwgMHhhODQ3LCAweDAwMDAsIDB4YTg0YiwgMHgwMDAwLAorCTB4YTg4NCwgMHg5MDkyLCAweDE5OWEsIDB4MDIxMCwgMHgyMDAxLCAweDE5OTksIDB4ODAwMywgMHg4MDEzLAorCTB4ODIxMywgMHg5MjEwLCAweDYyMWEsIDB4MDgwYywgMHgxYzI2LCAweDIwMDksIDB4ODAzMCwgMHgwODBjLAorCTB4OTY1ZSwgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHgwZDg1LCAweDA4MGMsIDB4OWE0OCwgMHg2MTE0LAorCTB4MjE0OCwgMHhhODdiLCAweDAwMDAsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjhiYiwgMHgwNTAwLAorCTB4MDBiZSwgMHgwODBjLCAweDcwMTIsIDB4MDgwYywgMHhiMTZjLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLAorCTB4YWNmYywgMHg2MTQ0LCAweGQxZmMsIDB4MDEyMCwgMHhkMWFjLCAweDExMTAsIDB4NjAwMywgMHgwMDAzLAorCTB4NjAwMCwgMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZDg1LCAweDAwOTYsIDB4MDAyMywgMHgwMDllLAorCTB4MDgwYywgMHhhZDE4LCAweDAwMDUsIDB4OTQ0MywgMHg5NDQzLCAweDk0NDMsIDB4OTQ0NSwgMHg5NDU2LAorCTB4OTQ0MywgMHg5NDQzLCAweDk0NDMsIDB4OTQ0MywgMHg5NDQzLCAweDk0NDMsIDB4OTQ0MywgMHg5NDQzLAorCTB4OTQ0MywgMHg5NDQzLCAweDk0NDMsIDB4MDgwYywgMHgwZDg1LCAweDA4MGMsIDB4YWVlMywgMHg2MTE0LAorCTB4MjE0OCwgMHhhODdiLCAweDAwMDYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjhiYiwgMHgwNTAwLAorCTB4MDBiZSwgMHgwODBjLCAweDcwMTIsIDB4MDgwYywgMHhiMTZjLCAweDAwMDUsIDB4MDQ5MSwgMHgwMDA1LAorCTB4MDgwYywgMHhhY2ZjLCAweDYwMDAsIDB4NjE0NCwgMHhkMWZjLCAweDAxMzAsIDB4ZDFhYywgMHgxMTIwLAorCTB4NjAwMywgMHgwMDAzLCAweDIwMDksIDB4MDAwMywgMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZDg1LAorCTB4MDA5NiwgMHgwMDMzLCAweDAwOWUsIDB4MDEwNiwgMHgwODBjLCAweGFkMTgsIDB4MDEwZSwgMHgwMDA1LAorCTB4OTQ4MCwgMHg5NDgwLCAweDk0ODAsIDB4OTQ4MiwgMHg5NDg5LCAweDk0ODAsIDB4OTQ4MCwgMHg5NDgwLAorCTB4OTQ4MCwgMHg5NDgwLCAweDk0ODAsIDB4OTQ4MCwgMHg5NDgwLCAweDk0ODAsIDB4OTQ4MCwgMHg5NDgwLAorCTB4MDgwYywgMHgwZDg1LCAweDAwMzYsIDB4MDBlNiwgMHgwODBjLCAweGFlZTMsIDB4MDBlZSwgMHgwMDNlLAorCTB4MDAwNSwgMHg2MDI0LCAweGQwOGMsIDB4MTFmMCwgMHgwMGY2LCAweDAwZTYsIDB4NjAxYiwgMHgwMDAwLAorCTB4NjAxNCwgMHgyMDQ4LCAweDYwMTAsIDB4OTAwNSwgMHgwMTI4LCAweDAwYjYsIDB4MjA1OCwgMHgwODBjLAorCTB4OTI1ZSwgMHgwMGJlLCAweDIwNzEsIDB4MTkzZCwgMHgwODBjLCAweDhlYTgsIDB4MDE2MCwgMHgyMDAxLAorCTB4MTg3ZiwgMHgyMDA0LCAweGE4OGEsIDB4MjAzMSwgMHgwMDAwLCAweDJjNzgsIDB4MDgwYywgMHg4ZTFjLAorCTB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4MDA5NiwgMHhhODhiLCAweDAwMDAsIDB4YThhOCwgMHgyMDQ4LAorCTB4MDgwYywgMHgxMDhiLCAweDAwOWUsIDB4YThhYiwgMHgwMDAwLCAweDA4MGMsIDB4OGU1OCwgMHgwYzgwLAorCTB4MjAwMSwgMHgxOTI1LCAweDIwMGMsIDB4OTE4ZSwgMHgwMDAwLCAweDE5MGMsIDB4OGYwZSwgMHgwNWM4LAorCTB4MDBlNiwgMHgyMDcxLCAweDE5MjQsIDB4NzExMCwgMHhjMWM1LCAweDcxMTIsIDB4MDgwYywgMHg4ZjE4LAorCTB4MDBmNiwgMHgwMGM2LCAweDIwNzEsIDB4MTAwMCwgMHgwMGI2LCAweDJlMDQsIDB4OTA1ZCwgMHgwMTM4LAorCTB4YjhhYywgMHg5MDY1LCAweDAxMjAsIDB4MDgwYywgMHg4ZWVlLCAweDA5MGMsIDB4OTI4ZCwgMHg4ZTcwLAorCTB4OWU4NiwgMHgxODAwLCAweDFkOTAsIDB4MDBiZSwgMHgwMGQ2LCAweDAwOTYsIDB4MDA0NiwgMHgyMDYxLAorCTB4MWRkYywgMHgyMDAxLCAweDE4MWEsIDB4MjAyNCwgMHg2MDIwLCAweDkwODYsIDB4MDAwMCwgMHgxMTkxLAorCTB4OWNlMCwgMHgwMDFjLCAweDI0MDAsIDB4OWMwNiwgMHgxZGI4LCAweDAwNGUsIDB4MDA5ZSwgMHgwMGRlLAorCTB4MDBkMSwgMHgwMGNlLCAweDAwZmUsIDB4MjA3MSwgMHgxOTI0LCAweDcxMTAsIDB4YzFjNCwgMHg3MTEyLAorCTB4MDBlZSwgMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA5LCAweDExNjAsIDB4NjEwMCwgMHg5MTg2LAorCTB4MDAwNCwgMHgxMTM4LCAweDYxMTAsIDB4ODFmZiwgMHgxOTBjLCAweDBkODUsIDB4MmMwMCwgMHgwODBjLAorCTB4OGVkOSwgMHg5MDA2LCAweDAwMDUsIDB4MjA3MSwgMHgxOTNmLCAweDIwNzMsIDB4MDAwMCwgMHg4ZTcwLAorCTB4OWU4NiwgMHgxOTQ3LCAweDFkZDAsIDB4MjA3MSwgMHgxOTNkLCAweDcwMDYsIDB4NzAwMiwgMHgyMDAxLAorCTB4MTkzMCwgMHgyMDY0LCAweDhjZmYsIDB4MDEzMCwgMHg2MTIwLCAweDkxOGUsIDB4MDAwMCwgMHgxOTBjLAorCTB4MGQ4NSwgMHgyMTAyLCAweDIwMDEsIDB4MTg4YSwgMHgyMDBjLCAweDgxZmYsIDB4MDE0OCwgMHgwMDk2LAorCTB4MjE0OCwgMHgwODBjLCAweDEwOGIsIDB4MDA5ZSwgMHgyMDAxLCAweDE4OGEsIDB4MjAwMywgMHgwMDAwLAorCTB4MjA3MSwgMHgxOTMxLCAweDA4MGMsIDB4OTBmNywgMHgwODA0LCAweDkxMDYsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgxODdhLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgwMDM2LCAweDAwNDYsIDB4MjBhOSwgMHgwMDEwLCAweDkwMDYsIDB4ODAwNCwgMHg4MDg2LAorCTB4ODE4ZSwgMHgxMjA4LCAweDkyMDAsIDB4MWYwNCwgMHg5NTRmLCAweDgwODYsIDB4ODE4ZSwgMHgwMDRlLAorCTB4MDAzZSwgMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDA3NiwgMHgwMTU2LAorCTB4MjBhOSwgMHgwMDEwLCAweDkwMDUsIDB4MDFjOCwgMHg5MTFhLCAweDEyYjgsIDB4ODIxMywgMHg4MThkLAorCTB4MDIyOCwgMHg5MTFhLCAweDEyMjAsIDB4MWYwNCwgMHg5NTY2LCAweDAwMjgsIDB4OTExYSwgMHgyMzA4LAorCTB4ODIxMCwgMHgxZjA0LCAweDk1NjYsIDB4MDAwNiwgMHgzMjAwLCAweDkwODQsIDB4ZWZmZiwgMHgyMDgwLAorCTB4MDAwZSwgMHgwMTVlLCAweDAwN2UsIDB4MDEyZSwgMHgwMDA1LCAweDAwMDYsIDB4MzIwMCwgMHg5MDg1LAorCTB4MTAwMCwgMHgwY2E4LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDIwNzksIDB4MTllOCwgMHgwMTJlLAorCTB4MDBkNiwgMHgyMDY5LCAweDE5ZTgsIDB4NjgwMywgMHgwMDA1LCAweDAxNTYsIDB4MDE0NiwgMHgwMWQ2LAorCTB4MjBlOSwgMHgwMDAwLCAweDIwNjksIDB4MDIwMCwgMHgwODBjLCAweGFhZjEsIDB4MDRjOSwgMHgwODBjLAorCTB4YWFkYywgMHgwNGIxLCAweDA4MGMsIDB4YWFkZiwgMHgwNDk5LCAweDA4MGMsIDB4YWFlMiwgMHgwNDgxLAorCTB4MDgwYywgMHhhYWU1LCAweDA0NjksIDB4MDgwYywgMHhhYWU4LCAweDA0NTEsIDB4MDgwYywgMHhhYWViLAorCTB4MDQzOSwgMHgwODBjLCAweGFhZWUsIDB4MDQyMSwgMHgwMWRlLCAweDAxNGUsIDB4MDE1ZSwgMHg2ODU3LAorCTB4MDAwMCwgMHgwMGY2LCAweDIwNzksIDB4MDM4MCwgMHgwNDE5LCAweDc4MDcsIDB4MDAwMywgMHg3ODAzLAorCTB4MDAwMCwgMHg3ODAzLCAweDAwMDEsIDB4MjA2OSwgMHgwMDA0LCAweDJkMDQsIDB4OTA4NCwgMHhmZmZlLAorCTB4OTA4NSwgMHg4MDAwLCAweDIwNmEsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjgsIDB4OTA4NCwgMHhmZmZjLAorCTB4NjgyYSwgMHgwMGZlLCAweDIwMDEsIDB4MWI1ZCwgMHgyMDAzLCAweDAwMDAsIDB4MDBkZSwgMHgwMDA1LAorCTB4MjBhOSwgMHgwMDIwLCAweDIwYTEsIDB4MDI0MCwgMHgyMDAxLCAweDAwMDAsIDB4NDAwNCwgMHgwMDA1LAorCTB4MDBjNiwgMHg3ODAzLCAweDAwMDAsIDB4OTAwNiwgMHg3ODI3LCAweDAwMzAsIDB4NzgyYiwgMHgwNDAwLAorCTB4NzgyNywgMHgwMDMxLCAweDc4MmIsIDB4MWFmNiwgMHg3ODFmLCAweGZmMDAsIDB4NzgxYiwgMHhmZjAwLAorCTB4MjA2MSwgMHgxYWViLCAweDYwMmYsIDB4MTllOCwgMHg2MDMzLCAweDE4MDAsIDB4NjAzNywgMHgxYTA0LAorCTB4NjAzYiwgMHgxZWMxLCAweDYwM2YsIDB4MWVkMSwgMHg2MDQyLCAweDYwNDcsIDB4MWFjMSwgMHgwMGNlLAorCTB4MDAwNSwgMHgyMDAxLCAweDAzODIsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDcsIDB4OTA4NiwgMHgwMDAxLAorCTB4MDFiMCwgMHgwMGM2LCAweDYxNDYsIDB4NjAwZiwgMHgwMDAwLCAweDJjMDgsIDB4MjA2MSwgMHgxOWU4LAorCTB4NjAyYywgMHg4MDAwLCAweDYwMmUsIDB4NjAxYywgMHg5MDA1LCAweDAxMzAsIDB4OTA4MCwgMHgwMDAzLAorCTB4MjEwMiwgMHg2MTFlLCAweDAwY2UsIDB4MDAwNSwgMHg2MTIyLCAweDYxMWUsIDB4MGNkOCwgMHg2MTQ2LAorCTB4MmMwOCwgMHgyMDAxLCAweDAwMTIsIDB4MDgwYywgMHhhY2VkLCAweDAwMDUsIDB4MDAxNiwgMHgyMDA5LAorCTB4ODAyMCwgMHg2MTQ2LCAweDJjMDgsIDB4MjAwMSwgMHgwMzgyLCAweDIwMDQsIDB4OTA4NCwgMHgwMDA3LAorCTB4OTA4NiwgMHgwMDAxLCAweDExMjgsIDB4MjAwMSwgMHgwMDE5LCAweDA4MGMsIDB4YWNlZCwgMHgwMDg4LAorCTB4MDBjNiwgMHgyMDYxLCAweDE5ZTgsIDB4NjAyYywgMHg4MDAwLCAweDYwMmUsIDB4NjAwYywgMHg5MDA1LAorCTB4MDEyOCwgMHg5MDgwLCAweDAwMDMsIDB4MjEwMiwgMHg2MTBlLCAweDAwMTAsIDB4NjExMiwgMHg2MTBlLAorCTB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MjAwMSwgMHgwMzgyLCAweDIwMDQsIDB4OTA4NCwgMHgwMDA3LAorCTB4OTA4NiwgMHgwMDAxLCAweDAxOTgsIDB4MDBjNiwgMHg2MTQ2LCAweDYwMGYsIDB4MDAwMCwgMHgyYzA4LAorCTB4MjA2MSwgMHgxOWU4LCAweDYwNDQsIDB4OTAwNSwgMHgwMTMwLCAweDkwODAsIDB4MDAwMywgMHgyMTAyLAorCTB4NjE0NiwgMHgwMGNlLCAweDAwMDUsIDB4NjE0YSwgMHg2MTQ2LCAweDBjZDgsIDB4NjE0NiwgMHg2MDBmLAorCTB4MDAwMCwgMHgyYzA4LCAweDIwMDEsIDB4MDAxMywgMHgwODBjLCAweGFjZWQsIDB4MDAwNSwgMHg2MDQ0LAorCTB4ZDBkYywgMHgwMTEwLCAweDA4MGMsIDB4YTc4YSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LAorCTB4MDBjNiwgMHgwMGI2LCAweDAwOTYsIDB4MDA3NiwgMHgwMDY2LCAweDAwNTYsIDB4MDAzNiwgMHgwMDI2LAorCTB4MDAxNiwgMHgwMDA2LCAweDAxMjYsIDB4OTAyZSwgMHgyMDcxLCAweDE5ZTgsIDB4NzY0OCwgMHgyNjYwLAorCTB4MjY3OCwgMHgyMDkxLCAweDgwMDAsIDB4OGNmZiwgMHgwOTA0LCAweDk2ZjEsIDB4OWM4NiwgMHgxYjU1LAorCTB4MDkwNCwgMHg5NmVjLCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDkyMDYsIDB4MTkwNCwgMHg5NmVjLAorCTB4ODdmZiwgMHgwMTIwLCAweDYwNWMsIDB4OTEwNiwgMHgxOTA0LCAweDk2ZWMsIDB4NzA0YywgMHg5YzA2LAorCTB4MTE4OCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGE1OTYsIDB4NzAzZiwgMHgwMDAwLAorCTB4OTAwNiwgMHg3MDRlLCAweDcwNmEsIDB4NzA1MiwgMHg3MDZlLCAweDA4MGMsIDB4YWZmNCwgMHgwMDNlLAorCTB4MjAyOSwgMHgwMDAxLCAweDA4MGMsIDB4OTY2NywgMHg3MDQ4LCAweDljMzYsIDB4MTExMCwgMHg2NjBjLAorCTB4NzY0YSwgMHg3MDQ0LCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLAorCTB4NzA0NiwgMHgwMDEwLCAweDcwNDcsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHg5ZjA2LAorCTB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHhjZjFiLAorCTB4MDFmMCwgMHg2MDE0LCAweDIwNDgsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDMsIDB4MTU4OCwgMHg2MDA0LAorCTB4OTA4NiwgMHgwMDQwLCAweDA5MGMsIDB4YTc4YSwgMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LAorCTB4MDAwMCwgMHgwMDE2LCAweDAwMzYsIDB4MDA3NiwgMHgwODBjLCAweGQyMjAsIDB4MDgwYywgMHhlZGRmLAorCTB4MDgwYywgMHg3MDEyLCAweDAwN2UsIDB4MDAzZSwgMHgwMDFlLCAweDA4MGMsIDB4ZDEwYywgMHgwODBjLAorCTB4YjFhNywgMHgwMGNlLCAweDA4MDQsIDB4OTY4MywgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LAorCTB4OTY4MywgMHgwMTJlLCAweDAwMGUsIDB4MDAxZSwgMHgwMDJlLCAweDAwM2UsIDB4MDA1ZSwgMHgwMDZlLAorCTB4MDA3ZSwgMHgwMDllLCAweDAwYmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LAorCTB4NjAyMCwgMHg5MDg2LCAweDAwMDYsIDB4MTE1OCwgMHgwMDE2LCAweDAwMzYsIDB4MDA3NiwgMHgwODBjLAorCTB4ZWRkZiwgMHgwODBjLCAweGVhMzAsIDB4MDA3ZSwgMHgwMDNlLCAweDAwMWUsIDB4MDhjMCwgMHg2MDIwLAorCTB4OTA4NiwgMHgwMDA5LCAweDExNjgsIDB4YTg3YiwgMHgwMDA2LCAweDAwMTYsIDB4MDAzNiwgMHgwMDc2LAorCTB4MDgwYywgMHg3MDEyLCAweDA4MGMsIDB4YjE2YywgMHgwMDdlLCAweDAwM2UsIDB4MDAxZSwgMHgwODQ4LAorCTB4NjAyMCwgMHg5MDg2LCAweDAwMGEsIDB4MDkwNCwgMHg5NmQ2LCAweDA4MDQsIDB4OTZjZiwgMHgwMDA2LAorCTB4MDA2NiwgMHgwMDk2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGY2LCAweDkwMzYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgyMDc5LCAweDE5ZTgsIDB4Nzg0OCwgMHg5MDY1LCAweDA5MDQsIDB4OTc5MCwgMHg2MDBjLAorCTB4MDAwNiwgMHg2MDBmLCAweDAwMDAsIDB4Nzg0YywgMHg5YzA2LCAweDExYjAsIDB4MDAzNiwgMHgyMDE5LAorCTB4MDAwMSwgMHgwODBjLCAweGE1OTYsIDB4NzgzZiwgMHgwMDAwLCAweDkwMWUsIDB4N2I0ZSwgMHg3YjZhLAorCTB4N2I1MiwgMHg3YjZlLCAweDA4MGMsIDB4YWZmNCwgMHgwMDNlLCAweDAwMGUsIDB4OTAwNSwgMHgxMTE4LAorCTB4NjAwYywgMHg2MDBmLCAweDAwMDAsIDB4MDAwNiwgMHg5Yzg2LCAweDFiNTUsIDB4MDViMCwgMHgwMGU2LAorCTB4MmY3MCwgMHgwODBjLCAweDk2NjcsIDB4MDBlZSwgMHgwODBjLCAweGNmMWIsIDB4MDU0OCwgMHg2MDE0LAorCTB4MjA0OCwgMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNWE4LCAweDNlMDgsIDB4OTE4ZSwgMHgwMDAyLAorCTB4MTE4OCwgMHg2MDEwLCAweDkwMDUsIDB4MDE3MCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLAorCTB4ZDBiYywgMHgwMTQwLCAweDYwNDgsIDB4OTAwNSwgMHgxMWMwLCAweDIwMDEsIDB4MTk4OCwgMHgyMDA0LAorCTB4NjA0YSwgMHgwMDk4LCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLCAweDA5MGMsIDB4YTc4YSwgMHhhODY3LAorCTB4MDEwMywgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweDcwMDYsIDB4MDgwYywgMHhkMTBjLAorCTB4NjA0NCwgMHhjMGZjLCAweDYwNDYsIDB4MDgwYywgMHhiMWE3LCAweDAwMGUsIDB4MDgwNCwgMHg5NzM0LAorCTB4N2U0YSwgMHg3ZTQ2LCAweDAxMmUsIDB4MDBmZSwgMHgwMGRlLCAweDAwY2UsIDB4MDA5ZSwgMHgwMDZlLAorCTB4MDAwZSwgMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LCAweDExMTgsIDB4MDgwYywgMHhlYTMwLAorCTB4MGMzOCwgMHg2MDIwLCAweDkwODYsIDB4MDAwOSwgMHgxMTMwLCAweGFiN2EsIDB4MDgwYywgMHg3MDEyLAorCTB4MDgwYywgMHhiMTZjLCAweDBjMTAsIDB4NjAyMCwgMHg5MDg2LCAweDAwMGEsIDB4MDk5MCwgMHgwODUwLAorCTB4MDAxNiwgMHgwMDI2LCAweDAwODYsIDB4OTA0NiwgMHgwMGE5LCAweDA4MGMsIDB4OThhMywgMHgwMDhlLAorCTB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBmNiwgMHgwMTI2LCAweDIwNzksIDB4MTllOCwgMHgyMDkxLAorCTB4ODAwMCwgMHgwODBjLCAweDk4ZWMsIDB4MDgwYywgMHg5OTgyLCAweDA4MGMsIDB4Njk0OCwgMHgwMTJlLAorCTB4MDBmZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LAorCTB4MDA2NiwgMHgwMDE2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOWU4LAorCTB4NzYyMCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwOTA0LCAweDk4NjgsIDB4NjAxMCwgMHgyMDU4LAorCTB4YjhhMCwgMHg5MjA2LCAweDE5MDQsIDB4OTg2MywgMHg4OGZmLCAweDAxMjAsIDB4NjA1YywgMHg5MTA2LAorCTB4MTkwNCwgMHg5ODYzLCAweDcwMzAsIDB4OWMwNiwgMHgxNTgwLCAweDIwNjksIDB4MDEwMCwgMHg2ODIwLAorCTB4ZDBhNCwgMHgwMTEwLCAweGQwY2MsIDB4MTUwOCwgMHgwODBjLCAweDhhNGIsIDB4MDgwYywgMHhhMmEwLAorCTB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YTc4YSwgMHg3MDMzLCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LAorCTB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLAorCTB4MmE5OSwgMHg5MDA2LCAweDA4MGMsIDB4MmE5OSwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LAorCTB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHgwMDQwLCAweDcwMDgsIDB4YzBhZCwgMHg3MDBhLAorCTB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MDgwNCwgMHg5ODYzLCAweDcwMjAsIDB4OWMzNiwgMHgxMTEwLAorCTB4NjYwYywgMHg3NjIyLCAweDcwMWMsIDB4OWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4OWYzNiwgMHgwMTE4LAorCTB4MmYwMCwgMHg3MDFlLCAweDAwMTAsIDB4NzAxZiwgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLAorCTB4OWYwNiwgMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDQ0LAorCTB4YzBmYywgMHg2MDQ2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDFlOCwgMHg2MDIwLAorCTB4OTA4NiwgMHgwMDAzLCAweDE1ODAsIDB4MDgwYywgMHhkMTMyLCAweDExMTgsIDB4MDgwYywgMHhiYjVjLAorCTB4MDA5OCwgMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsIDB4MDAxNiwgMHgwMDM2LAorCTB4MDA4NiwgMHgwODBjLCAweGQyMjAsIDB4MDgwYywgMHhlZGRmLCAweDA4MGMsIDB4NzAxMiwgMHgwMDhlLAorCTB4MDAzZSwgMHgwMDFlLCAweDA4MGMsIDB4ZDEwYywgMHgwODBjLCAweGIxYTcsIDB4MDgwYywgMHhhNjVkLAorCTB4MDBjZSwgMHgwODA0LCAweDk3ZGIsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHg5N2RiLAorCTB4MDEyZSwgMHgwMDBlLCAweDAwMWUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLAorCTB4MDA5ZSwgMHgwMGJlLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsIDB4MTE1OCwgMHgwMDE2LAorCTB4MDAzNiwgMHgwMDg2LCAweDA4MGMsIDB4ZWRkZiwgMHgwODBjLCAweGVhMzAsIDB4MDA4ZSwgMHgwMDNlLAorCTB4MDAxZSwgMHgwOGQwLCAweDA4MGMsIDB4YmI1YywgMHg2MDIwLCAweDkwODYsIDB4MDAwMiwgMHgxMTYwLAorCTB4NjAwNCwgMHgwMDA2LCAweDkwODYsIDB4MDA4NSwgMHgwMDBlLCAweDA5MDQsIDB4OTg0OSwgMHg5MDg2LAorCTB4MDA4YiwgMHgwOTA0LCAweDk4NDksIDB4MDg0MCwgMHg2MDIwLCAweDkwODYsIDB4MDAwNSwgMHgxOTIwLAorCTB4NjAwNCwgMHgwMDA2LCAweDkwODYsIDB4MDA4NSwgMHgwMDBlLCAweDA5YzgsIDB4OTA4NiwgMHgwMDhiLAorCTB4MDliMCwgMHgwODA0LCAweDk4NWMsIDB4MDAwNiwgMHgwMGY2LCAweDAwZTYsIDB4MDA5NiwgMHgwMGI2LAorCTB4MDBjNiwgMHgwMDY2LCAweDAwMTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4OTI4MCwgMHgxMDAwLAorCTB4MjAwNCwgMHg5MDVkLCAweDIwNzksIDB4MTllOCwgMHg5MDM2LCAweDc4MjgsIDB4MjA2MCwgMHg4Y2ZmLAorCTB4MDUzOCwgMHg2MDEwLCAweDliMDYsIDB4MTUwMCwgMHg2MDQzLCAweGZmZmYsIDB4MDgwYywgMHhhZjJlLAorCTB4MDFkOCwgMHg2MTBjLCAweDAwMTYsIDB4MDgwYywgMHhhNDIwLCAweDYwMTQsIDB4MjA0OCwgMHhhODY3LAorCTB4MDEwMywgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwMDE2LCAweDAwMzYsIDB4MDA4NiwgMHgwODBjLAorCTB4ZDIyMCwgMHgwODBjLCAweGVkZGYsIDB4MDgwYywgMHg3MDEyLCAweDAwOGUsIDB4MDAzZSwgMHgwMDFlLAorCTB4MDgwYywgMHhiMWE3LCAweDAwY2UsIDB4MDhkOCwgMHgyYzMwLCAweDYwMGMsIDB4MjA2MCwgMHgwOGI4LAorCTB4MDgwYywgMHg2OTY1LCAweDAxMmUsIDB4MDAxZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDllLAorCTB4MDBlZSwgMHgwMGZlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDk2LCAweDAwMDYsIDB4MDA2NiwgMHgwMGM2LAorCTB4MDBkNiwgMHg5MDM2LCAweDc4MjAsIDB4OTA2NSwgMHgwOTA0LCAweDk5NTUsIDB4NjAwYywgMHgwMDA2LAorCTB4NjA0NCwgMHhjMGZjLCAweDYwNDYsIDB4NjAwZiwgMHgwMDAwLCAweDc4MzAsIDB4OWMwNiwgMHgxNTk4LAorCTB4MjA2OSwgMHgwMTAwLCAweDY4MjAsIDB4ZDBhNCwgMHgwMTEwLCAweGQwY2MsIDB4MTUwOCwgMHgwODBjLAorCTB4OGE0YiwgMHgwODBjLCAweGEyYTAsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YTc4YSwgMHg3ODMzLAorCTB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LAorCTB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmE5OSwgMHg5MDA2LCAweDA4MGMsIDB4MmE5OSwgMHgyMDY5LAorCTB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHgwMDU4LAorCTB4MDgwYywgMHg2YmE5LCAweDE1MzgsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4NzgwOCwgMHhjMGFkLAorCTB4NzgwYSwgMHgyYzMwLCAweDAwZjgsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2YxOSwgMHgwMWIwLAorCTB4NjAyMCwgMHg5MDg2LCAweDAwMDMsIDB4MTUwOCwgMHgwODBjLCAweGQxMzIsIDB4MTExOCwgMHgwODBjLAorCTB4YmI1YywgMHgwMDYwLCAweDA4MGMsIDB4NmJhOSwgMHgxMTY4LCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLAorCTB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NzAxMiwgMHgwODBjLCAweGQxMGMsIDB4MDgwYywgMHhiMWE3LAorCTB4MDgwYywgMHhhNjVkLCAweDAwMGUsIDB4MDgwNCwgMHg5OGYzLCAweDdlMjIsIDB4N2UxZSwgMHgwMGRlLAorCTB4MDBjZSwgMHgwMDZlLCAweDAwMGUsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LAorCTB4MTExOCwgMHgwODBjLCAweGVhMzAsIDB4MGM1MCwgMHgwODBjLCAweGJiNWMsIDB4NjAyMCwgMHg5MDg2LAorCTB4MDAwMiwgMHgxMTUwLCAweDYwMDQsIDB4MDAwNiwgMHg5MDg2LCAweDAwODUsIDB4MDAwZSwgMHgwOTkwLAorCTB4OTA4NiwgMHgwMDhiLCAweDA5NzgsIDB4MDhkMCwgMHg2MDIwLCAweDkwODYsIDB4MDAwNSwgMHgxOWIwLAorCTB4NjAwNCwgMHgwMDA2LCAweDkwODYsIDB4MDA4NSwgMHgwMDBlLCAweDBkMTgsIDB4OTA4NiwgMHgwMDhiLAorCTB4MGQwMCwgMHgwODYwLCAweDAwMDYsIDB4MDA5NiwgMHgwMGI2LCAweDAwYzYsIDB4MDA2NiwgMHg5MDM2LAorCTB4NzgyOCwgMHg5MDY1LCAweDA1MTAsIDB4NjAxMCwgMHgyMDU4LCAweDYwMGMsIDB4MDAwNiwgMHgzZTA4LAorCTB4OTE4ZSwgMHgwMDAyLCAweDExMTgsIDB4YjgwMCwgMHhkMGJjLCAweDExYTgsIDB4NjA0MywgMHhmZmZmLAorCTB4MDgwYywgMHhhZjJlLCAweDAxODAsIDB4NjEwYywgMHgwODBjLCAweGE0MjAsIDB4NjAxNCwgMHgyMDQ4LAorCTB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NzAxMiwgMHgwODBjLAorCTB4YjFhNywgMHgwMDBlLCAweDA4ZjAsIDB4MmMzMCwgMHgwY2UwLCAweDAwNmUsIDB4MDBjZSwgMHgwMGJlLAorCTB4MDA5ZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGQ2LCAweDAwOTYsIDB4MDA2NiwgMHgwODBjLAorCTB4NjJhZiwgMHgxMWIwLCAweDIwNzEsIDB4MTllOCwgMHg3MDMwLCAweDkwODAsIDB4MDAwNSwgMHgyMDA0LAorCTB4OTA0ZCwgMHgwMTcwLCAweGE4NzgsIDB4OTYwNiwgMHgxMTU4LCAweDIwNzEsIDB4MTllOCwgMHg3MDMwLAorCTB4OTAzNSwgMHgwMTMwLCAweDkwODAsIDB4MDAwNSwgMHgyMDA0LCAweDk5MDYsIDB4MTEwOCwgMHgwMDI5LAorCTB4MDA2ZSwgMHgwMDllLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwYzYsIDB4MjY2MCwgMHg2MDQzLAorCTB4ZmZmZiwgMHgwODBjLCAweGFmMmUsIDB4MDE3OCwgMHgwODBjLCAweGE0MjAsIDB4NjAxNCwgMHgyMDQ4LAorCTB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4ZDIyMCwgMHgwODBjLAorCTB4NzAxMiwgMHgwODBjLCAweGIxYTcsIDB4MDBjZSwgMHgwMDA1LCAweDAwYjYsIDB4MDBlNiwgMHgwMGM2LAorCTB4MDgwYywgMHhhY2ZjLCAweDAxMDYsIDB4MjA3MSwgMHgwMTAxLCAweDJlMDQsIDB4YzBjNCwgMHgyMDcyLAorCTB4NjA0NCwgMHhkMGZjLCAweDExMzgsIDB4MDEwZSwgMHgwOTBjLCAweGFkMTgsIDB4MDBjZSwgMHgwMGVlLAorCTB4MDBiZSwgMHgwMDA1LCAweDIwNzEsIDB4MTllOCwgMHg3MDMwLCAweDkwMDUsIDB4MGRhMCwgMHg5YzA2LAorCTB4MTkwYywgMHgwZDg1LCAweDcwMzYsIDB4MDgwYywgMHg4YTRiLCAweDcwMDQsIDB4OTA4NCwgMHgwMDA3LAorCTB4MDAwMiwgMHg5YTFiLCAweDlhMWQsIDB4OWEyNCwgMHg5YTJlLCAweDlhM2MsIDB4OWExYiwgMHg5YTI5LAorCTB4OWExOSwgMHgwODBjLCAweDBkODUsIDB4MDQyOCwgMHgwMDA1LCAweDA4MGMsIDB4YWYxOSwgMHg3MDA3LAorCTB4MDAwMCwgMHg3MDMzLCAweDAwMDAsIDB4MDBlOCwgMHgwMDY2LCAweDkwMzYsIDB4MDgwYywgMHhhNDIwLAorCTB4MDA2ZSwgMHg3MDA3LCAweDAwMDAsIDB4NzAzMywgMHgwMDAwLCAweDAwOTgsIDB4MDgwYywgMHhhZjA0LAorCTB4MDE0MCwgMHgwODBjLCAweGFmMTksIDB4MDEyOCwgMHgwMDY2LCAweDkwMzYsIDB4MDgwYywgMHhhNDIwLAorCTB4MDA2ZSwgMHg3MDMzLCAweDAwMDAsIDB4MDAyOCwgMHgwODBjLCAweGFmMDQsIDB4MDgwYywgMHhhNzhhLAorCTB4MDAwMCwgMHgwMTBlLCAweDA5MGMsIDB4YWQxOCwgMHgwMGNlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LAorCTB4MDBkNiwgMHgwMGM2LCAweDA4MGMsIDB4YWNmYywgMHgwMTA2LCAweDYwNDQsIDB4ZDBmYywgMHgxMTMwLAorCTB4MDEwZSwgMHgwOTBjLCAweGFkMTgsIDB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4MjA2OSwgMHgxOWU4LAorCTB4Njg0YywgMHg5MDA1LCAweDBkYTgsIDB4OWMwNiwgMHgxOTBjLCAweDBkODUsIDB4Njg1MiwgMHgwMGU2LAorCTB4MmQ3MCwgMHgwODBjLCAweDk2NjcsIDB4MDBlZSwgMHgwODBjLCAweDhhNTgsIDB4MDAxNiwgMHgyMDA5LAorCTB4MDA0MCwgMHgwODBjLCAweDIyMjAsIDB4MDAxZSwgMHg2ODNjLCAweDkwODQsIDB4MDAwMywgMHgwMDAyLAorCTB4OWE3NiwgMHg5YTc3LCAweDlhOTYsIDB4OWE3NCwgMHgwODBjLCAweDBkODUsIDB4MDQ5MCwgMHg2ODY4LAorCTB4OTA4NiwgMHgwMDAxLCAweDAxOTgsIDB4NjAwYywgMHg5MDE1LCAweDAxNjgsIDB4NmE0YSwgMHg2MDBmLAorCTB4MDAwMCwgMHg2MDQ0LCAweDkwODQsIDB4N2Y3ZiwgMHg2MDQ2LCAweDkwMDYsIDB4Njg0MiwgMHg2ODRlLAorCTB4NjgzZiwgMHgwMDAwLCAweDAwZjAsIDB4Njg0YSwgMHg2ODQ2LCAweDBjOTgsIDB4Njg2YiwgMHgwMDAwLAorCTB4Njg0OCwgMHg5MDY1LCAweDBkNzAsIDB4NjAwMywgMHgwMDAyLCAweDBjNTgsIDB4NjA0NCwgMHg5MDg0LAorCTB4N2Y3ZiwgMHg2MDQ2LCAweDkwMDYsIDB4Njg0MiwgMHg2ODRlLCAweDY4NmEsIDB4Njg1MiwgMHg2ODZlLAorCTB4NjAwYywgMHg5MDE1LCAweDAxMjAsIDB4NmE0YSwgMHg2MDBmLCAweDAwMDAsIDB4MDAxMCwgMHg2ODRhLAorCTB4Njg0NiwgMHgwODBjLCAweGFmZjQsIDB4Njg0ZiwgMHgwMDAwLCAweDAxMGUsIDB4MDkwYywgMHhhZDE4LAorCTB4MDBjZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDBiLAorCTB4MDAwNSwgMHg5YWM5LCAweDlhY2MsIDB4OWY4MCwgMHhhMDE5LCAweDlhY2MsIDB4OWY4MCwgMHhhMDE5LAorCTB4OWFjOSwgMHg5YWNjLCAweDlhYzksIDB4OWFjOSwgMHg5YWM5LCAweDlhYzksIDB4OWFjOSwgMHg5YWM5LAorCTB4OWFjOSwgMHgwODBjLCAweDk5ZWQsIDB4MDAwNSwgMHgwMGI2LCAweDAxNTYsIDB4MDEzNiwgMHgwMTQ2LAorCTB4MDFjNiwgMHgwMWQ2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MjA2OSwgMHgwMjAwLAorCTB4MjA3MSwgMHgwMjQwLCAweDYwMDQsIDB4OTA4YSwgMHgwMDUzLCAweDFhMGMsIDB4MGQ4NSwgMHg2MTEwLAorCTB4MjE1OCwgMHhiOTg0LCAweDJjNzgsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsIDB4OTA4YSwgMHgwMDQwLAorCTB4MWEwNCwgMHg5YjM4LCAweDAwNWIsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMWRlLAorCTB4MDFjZSwgMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMGJlLCAweDAwMDUsIDB4OWNlMSwgMHg5ZDFjLAorCTB4OWQ0NSwgMHg5ZTBmLCAweDllMzEsIDB4OWUzNywgMHg5ZTQ0LCAweDllNGMsIDB4OWU1OCwgMHg5ZTVlLAorCTB4OWU2ZiwgMHg5ZTVlLCAweDllYzcsIDB4OWU0YywgMHg5ZWQzLCAweDllZDksIDB4OWU1OCwgMHg5ZWQ5LAorCTB4OWVlNSwgMHg5YjM2LCAweDliMzYsIDB4OWIzNiwgMHg5YjM2LCAweDliMzYsIDB4OWIzNiwgMHg5YjM2LAorCTB4OWIzNiwgMHg5YjM2LCAweDliMzYsIDB4OWIzNiwgMHhhNDQxLCAweGE0NjQsIDB4YTQ3NSwgMHhhNDk1LAorCTB4YTRjNywgMHg5ZTQ0LCAweDliMzYsIDB4OWU0NCwgMHg5ZTVlLCAweDliMzYsIDB4OWQ0NSwgMHg5ZTBmLAorCTB4OWIzNiwgMHhhODg4LCAweDllNWUsIDB4OWIzNiwgMHhhOGE0LCAweDllNWUsIDB4OWIzNiwgMHg5ZTU4LAorCTB4OWNkYiwgMHg5YjU5LCAweDliMzYsIDB4YThjMCwgMHhhOTJkLCAweGFhMTEsIDB4OWIzNiwgMHhhYTFlLAorCTB4OWU0MSwgMHhhYTQ5LCAweDliMzYsIDB4YTRkMSwgMHhhYTU1LCAweDliMzYsIDB4MDgwYywgMHgwZDg1LAorCTB4MjEwMCwgMHgwMDViLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDFkZSwgMHgwMWNlLAorCTB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsIDB4MDBiZSwgMHgwMDA1LCAweGFhZjUsIDB4YWJhNywgMHg5YjU3LAorCTB4OWI5MSwgMHg5YzNkLCAweDljNDgsIDB4OWI1NywgMHg5ZTQ0LCAweDliNTcsIDB4OWNhMiwgMHg5Y2FlLAorCTB4OWJhYywgMHg5YjU3LCAweDliYzcsIDB4OWJmYiwgMHhiMDA4LCAweGIwNGQsIDB4OWU1ZSwgMHgwODBjLAorCTB4MGQ4NSwgMHgwMGQ2LCAweDAwOTYsIDB4MDgwYywgMHg5ZWY4LCAweDAwMjYsIDB4MDAzNiwgMHg3ODE0LAorCTB4MjA0OCwgMHhhOTU4LCAweGQxY2MsIDB4MTEzOCwgMHgyMDA5LCAweDI0MTQsIDB4MjAxMSwgMHgwMDE4LAorCTB4MjAxOSwgMHgwMDE4LCAweDAwMzAsIDB4MjAwOSwgMHgyNDEwLCAweDIwMTEsIDB4MDAxNCwgMHgyMDE5LAorCTB4MDAxNCwgMHg3MTAyLCAweDcyMDYsIDB4NzAwYiwgMHgwODAwLCAweGE4M2MsIDB4NzAwZSwgMHhhODUwLAorCTB4NzAyMiwgMHhhODU0LCAweDcwMjYsIDB4NjNjMiwgMHgwODBjLCAweGEyNzAsIDB4MDAzZSwgMHgwMDJlLAorCTB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsIDB4NzgxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjhhMCwgMHgwMGJlLAorCTB4MDgwYywgMHhiMDk0LCAweDExMTgsIDB4OTA4NCwgMHhmZjgwLCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLAorCTB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsIDB4MDgwYywgMHg5ZWY4LCAweDcwMDMsIDB4MDUwMCwgMHg3ODE0LAorCTB4MjA0OCwgMHhhODc0LCAweDcwMGEsIDB4YTg3OCwgMHg3MDBlLCAweGE4N2MsIDB4NzAxMiwgMHhhODgwLAorCTB4NzAxNiwgMHhhODg0LCAweDcwMWEsIDB4YTg4OCwgMHg3MDFlLCAweDYwYzMsIDB4MDAxMCwgMHgwODBjLAorCTB4YTI3MCwgMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsIDB4MDgwYywgMHg5ZWY4LAorCTB4NzAwMywgMHgwNTAwLCAweDc4MTQsIDB4MjA0OCwgMHhhOGNjLCAweDcwMGEsIDB4YThkMCwgMHg3MDBlLAorCTB4YThkNCwgMHg3MDEyLCAweGE4ZDgsIDB4NzAxNiwgMHhhOGRjLCAweDcwMWEsIDB4YThlMCwgMHg3MDFlLAorCTB4NjBjMywgMHgwMDEwLCAweDA4MGMsIDB4YTI3MCwgMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LAorCTB4MDA5NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDllZjgsIDB4MjBlOSwgMHgwMDAwLAorCTB4MjAwMSwgMHgxOWE0LCAweDIwMDMsIDB4MDAwMCwgMHg3ODE0LCAweDIwNDgsIDB4YTgxNCwgMHg4MDAzLAorCTB4NjBjMiwgMHhhODMwLCAweDIwYTgsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDFiLAorCTB4MjA5OCwgMHgyMDAxLCAweDE5YTQsIDB4MDAxNiwgMHgyMDBjLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLAorCTB4MjIwNSwgMHgwODBjLCAweGRjZWYsIDB4OTAwNiwgMHgwODBjLCAweDIyMDUsIDB4MDAxZSwgMHhhODA0LAorCTB4OTAwNSwgMHgwMTEwLCAweDIwNDgsIDB4MGMyOCwgMHgwNGQ5LCAweDA4MGMsIDB4YTI3MCwgMHgwMTJlLAorCTB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MDgwYywgMHg5ZjQzLCAweDIwZTksIDB4MDAwMCwgMHgyMDAxLCAweDE5YTQsIDB4MjAwMywgMHgwMDAwLAorCTB4NzgxNCwgMHgyMDQ4LCAweGE4NmYsIDB4MDIwMCwgMHhhODczLCAweDAwMDAsIDB4YTgxNCwgMHg4MDAzLAorCTB4NjBjMiwgMHhhODMwLCAweDIwYTgsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDFiLAorCTB4MjA5OCwgMHgyMDAxLCAweDE5YTQsIDB4MDAxNiwgMHgyMDBjLCAweDA4MGMsIDB4ZGNlZiwgMHgwMDFlLAorCTB4YTgwNCwgMHg5MDA1LCAweDAxMTAsIDB4MjA0OCwgMHgwYzYwLCAweDAwNTEsIDB4NzgxNCwgMHgyMDQ4LAorCTB4MDgwYywgMHgxMDBiLCAweDA4MGMsIDB4YTI3MCwgMHgwMTJlLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LAorCTB4NjBjMCwgMHg4MDA0LCAweDkwODQsIDB4MDAwMywgMHg5MDA1LCAweDAxMzAsIDB4OTA4MiwgMHgwMDA0LAorCTB4MjBhMywgMHgwMDAwLCAweDgwMDAsIDB4MWRlMCwgMHgwMDA1LCAweDA4MGMsIDB4OWVmOCwgMHg3MDAzLAorCTB4NzgwMCwgMHg3ODA4LCAweDgwMDcsIDB4NzAwYSwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhMjcwLAorCTB4MDBkNiwgMHgwMGU2LCAweDA4MGMsIDB4OWY0MywgMHg3ODE0LCAweDkwODQsIDB4ZmYwMCwgMHgyMDczLAorCTB4MDIwMCwgMHg4ZTcwLCAweDhlNzAsIDB4OTA5NiwgMHhkZjAwLCAweDAxMzgsIDB4OTA5NiwgMHhlMDAwLAorCTB4MDEyMCwgMHgyMDczLCAweDAwMTAsIDB4OGU3MCwgMHgwMDMwLCAweDkwOTUsIDB4MDAxMCwgMHgyMjcyLAorCTB4OGU3MCwgMHgyMDczLCAweDAwMzQsIDB4OGU3MCwgMHgyMDY5LCAweDE4MDUsIDB4MjBhOSwgMHgwMDA0LAorCTB4MmQ3NiwgMHg4ZDY4LCAweDhlNzAsIDB4MWYwNCwgMHg5YzY4LCAweDIwNjksIDB4MTgwMSwgMHgyMGE5LAorCTB4MDAwNCwgMHgyZDc2LCAweDhkNjgsIDB4OGU3MCwgMHgxZjA0LCAweDljNzEsIDB4OTA5NiwgMHhkZjAwLAorCTB4MDEzMCwgMHg5MDk2LCAweGUwMDAsIDB4MDExOCwgMHg2MGMzLCAweDAwMTgsIDB4MDBmMCwgMHgyMDY5LAorCTB4MTliNCwgMHg5MDg2LCAweGRmMDAsIDB4MDExMCwgMHgyMDY5LCAweDE5Y2UsIDB4MjBhOSwgMHgwMDFhLAorCTB4OWU4NiwgMHgwMjYwLCAweDExNDgsIDB4MDBjNiwgMHgyMDYxLCAweDAyMDAsIDB4NjAxMCwgMHg4MDAwLAorCTB4NjAxMiwgMHgwMGNlLCAweDIwNzEsIDB4MDI0MCwgMHgyZDA0LCAweDgwMDcsIDB4MjA3MiwgMHg4ZDY4LAorCTB4OGU3MCwgMHgxZjA0LCAweDljODgsIDB4NjBjMywgMHgwMDRjLCAweDA4MGMsIDB4YTI3MCwgMHgwMGVlLAorCTB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4OWVmOCwgMHg3MDAzLCAweDYzMDAsIDB4NzAwNywgMHgwMDI4LAorCTB4NzgwOCwgMHg3MDBlLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweGEyNzAsIDB4MDBkNiwgMHgwMDI2LAorCTB4MDAxNiwgMHgwODBjLCAweDlmNDMsIDB4NzAwMywgMHgwMjAwLCAweDc4MTQsIDB4NzAwZSwgMHgwMGU2LAorCTB4OWVmMCwgMHgwMDA0LCAweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAwMGMsIDB4MjA2OSwgMHgxOTI0LAorCTB4NjgxMCwgMHhkMDg0LCAweDExNDgsIDB4MjA3MywgMHgwNTAwLCAweDhlNzAsIDB4MjA3MywgMHgwMDAwLAorCTB4OGU3MCwgMHg4MTA4LCAweDkyOTAsIDB4MDAwNCwgMHgyMDczLCAweDA4MDAsIDB4OGU3MCwgMHgyMDczLAorCTB4MDAwMCwgMHgwMGVlLCAweDcyMDYsIDB4NzEwYSwgMHg2MmMyLCAweDA4MGMsIDB4YTI3MCwgMHgwMDFlLAorCTB4MDAyZSwgMHgwMGRlLCAweDAwMDUsIDB4MjAwMSwgMHgxODE4LCAweDIwMDQsIDB4NjA5YSwgMHgwODA0LAorCTB4YTI3MCwgMHgwODBjLCAweDllZjgsIDB4NzAwMywgMHg1MjAwLCAweDIwNjksIDB4MTg0NywgMHg2ODA0LAorCTB4ZDA4NCwgMHgwMTMwLCAweDY4MjgsIDB4MDAxNiwgMHgwODBjLCAweDI2YmYsIDB4NzEwZSwgMHgwMDFlLAorCTB4MjBhOSwgMHgwMDA0LCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDE4MDUsIDB4MjBlOSwgMHgwMDAwLAorCTB4MjBhMSwgMHgwMjUwLCAweDQwMDMsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4MTgwMSwgMHgyMGExLAorCTB4MDI1NCwgMHg0MDAzLCAweDA4MGMsIDB4YjA5NCwgMHgxMTIwLCAweGI4YTAsIDB4OTA4MiwgMHgwMDdmLAorCTB4MDI0OCwgMHgyMDAxLCAweDE4MWYsIDB4MjAwNCwgMHg3MDMyLCAweDIwMDEsIDB4MTgyMCwgMHgyMDA0LAorCTB4NzAzNiwgMHgwMDMwLCAweDIwMDEsIDB4MTgxOCwgMHgyMDA0LCAweDkwODQsIDB4MDBmZiwgMHg3MDM2LAorCTB4NjBjMywgMHgwMDFjLCAweDA4MDQsIDB4YTI3MCwgMHgwODBjLCAweDllZjgsIDB4NzAwMywgMHgwNTAwLAorCTB4MDgwYywgMHhiMDk0LCAweDExMjAsIDB4YjhhMCwgMHg5MDgyLCAweDAwN2YsIDB4MDI0OCwgMHgyMDAxLAorCTB4MTgxZiwgMHgyMDA0LCAweDcwMGEsIDB4MjAwMSwgMHgxODIwLCAweDIwMDQsIDB4NzAwZSwgMHgwMDMwLAorCTB4MjAwMSwgMHgxODE4LCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweDcwMGUsIDB4MjBhOSwgMHgwMDA0LAorCTB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MTgwNSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjUwLAorCTB4NDAwMywgMHg2MGMzLCAweDAwMTAsIDB4MDgwNCwgMHhhMjcwLCAweDA4MGMsIDB4OWVmOCwgMHg5MDA2LAorCTB4MDgwYywgMHg2YmRiLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDExNzAsIDB4MjAxMSwgMHgwMjQwLAorCTB4MjAxMywgMHgyMmZmLCAweDIwMTEsIDB4MDI0MSwgMHgyMDEzLCAweGZmZmUsIDB4NzAwMywgMHgwNDAwLAorCTB4NjIwYywgMHhjMmI0LCAweDYyMGUsIDB4MDA1OCwgMHg3ODE0LCAweDAwOTYsIDB4OTA0ZCwgMHgwMTIwLAorCTB4OTAwNiwgMHhhODlhLCAweGE4YTYsIDB4YThhYSwgMHgwMDllLCAweDcwMDMsIDB4MDMwMCwgMHhiOGEwLAorCTB4OTA4NiwgMHgwMDdlLCAweDE5MDQsIDB4OWRjZiwgMHgwMGQ2LCAweDIwNjksIDB4MTk2YywgMHgyMDAxLAorCTB4MTgzNywgMHgyMDA0LCAweGQwYTQsIDB4MDE4OCwgMHg2ODAwLCAweDcwMGEsIDB4NjgwOCwgMHg5MDg0LAorCTB4MjAwMCwgMHg3MDEyLCAweDA4MGMsIDB4YjBhYiwgMHg2ODBjLCAweDcwMTYsIDB4NzAxZiwgMHgyNzEwLAorCTB4NjgxOCwgMHg3MDIyLCAweDY4MWMsIDB4NzAyNiwgMHgwNDI4LCAweDY4MDAsIDB4NzAwYSwgMHg2ODA0LAorCTB4NzAwZSwgMHgyMDA5LCAweDE4MGQsIDB4MjEwYywgMHhkMThjLCAweDAxMTAsIDB4MjAwMSwgMHgwMDAyLAorCTB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4MDgwYywgMHg3NzllLCAweDExMjgsIDB4NzhlMywgMHgwMDAwLAorCTB4MDgwYywgMHgyNzAwLCAweDc4ZTIsIDB4MDBmZSwgMHg2ODA4LCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTE4LAorCTB4OTA4NCwgMHgzN2ZmLCAweDAwMTAsIDB4OTA4NCwgMHgzZmZmLCAweDcwMTIsIDB4MDgwYywgMHhiMGFiLAorCTB4NjgwYywgMHg3MDE2LCAweDAwZGUsIDB4MjBhOSwgMHgwMDA0LCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LAorCTB4MTgwNSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjU2LCAweDQwMDMsIDB4MjBhOSwgMHgwMDA0LAorCTB4MjA5OSwgMHgxODAxLCAweDIwYTEsIDB4MDI1YSwgMHg0MDAzLCAweDAwZDYsIDB4MDgwYywgMHhhYWRjLAorCTB4MjA2OSwgMHgxOTc0LCAweDIwNzEsIDB4MDI0ZSwgMHg2ODAwLCAweGMwZGQsIDB4NzAwMiwgMHgwODBjLAorCTB4NTg0NCwgMHhkMGU0LCAweDAxMTAsIDB4NjgwYywgMHg3MDBlLCAweDAwZGUsIDB4MDRlMCwgMHgyMDAxLAorCTB4MTgzNywgMHgyMDA0LCAweGQwYTQsIDB4MDFhOCwgMHgwMDE2LCAweDIwMDEsIDB4MTgwZCwgMHgyMDA0LAorCTB4ZDA4YywgMHgyMDA5LCAweDAwMDIsIDB4MTExOCwgMHgyMDAxLCAweDE5NmQsIDB4MjAwYywgMHg2MGUwLAorCTB4OTEwNiwgMHgwMTMwLCAweDIxMDAsIDB4NjBlMywgMHgwMDAwLCAweDA4MGMsIDB4MjcwMCwgMHg2MWUyLAorCTB4MDAxZSwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxOTZjLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAorCTB4MDI0ZSwgMHgyMGE5LCAweDAwMDgsIDB4NDAwMywgMHgyMGE5LCAweDAwMDQsIDB4MjA5OSwgMHgxODA1LAorCTB4MjBhMSwgMHgwMjU2LCAweDQwMDMsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksIDB4MTgwMSwgMHgyMGExLAorCTB4MDI1YSwgMHg0MDAzLCAweDA4MGMsIDB4YWFkYywgMHgyMGExLCAweDAyNGUsIDB4MjBhOSwgMHgwMDA4LAorCTB4MjA5OSwgMHgxOTc0LCAweDQwMDMsIDB4NjBjMywgMHgwMDc0LCAweDA4MDQsIDB4YTI3MCwgMHgwODBjLAorCTB4OWVmOCwgMHg3MDAzLCAweDIwMTAsIDB4NzAwNywgMHgwMDE0LCAweDcwMGIsIDB4MDgwMCwgMHg3MDBmLAorCTB4MjAwMCwgMHg5MDA2LCAweDAwZjYsIDB4MjA3OSwgMHgxODQ3LCAweDc5MDQsIDB4MDBmZSwgMHhkMWFjLAorCTB4MTExMCwgMHg5MDg1LCAweDAwMjAsIDB4ZDFhNCwgMHgwMTEwLCAweDkwODUsIDB4MDAxMCwgMHg5MDg1LAorCTB4MDAwMiwgMHgwMGQ2LCAweDA4MDQsIDB4OWVhOCwgMHg3MDI2LCAweDYwYzMsIDB4MDAxNCwgMHgwODA0LAorCTB4YTI3MCwgMHgwODBjLCAweDllZjgsIDB4NzAwMywgMHg1MDAwLCAweDA4MDQsIDB4OWQ2NywgMHgwODBjLAorCTB4OWVmOCwgMHg3MDAzLCAweDIxMTAsIDB4NzAwNywgMHgwMDE0LCAweDYwYzMsIDB4MDAxNCwgMHgwODA0LAorCTB4YTI3MCwgMHgwODBjLCAweDlmM2EsIDB4MDAxMCwgMHgwODBjLCAweDlmNDMsIDB4NzAwMywgMHgwMjAwLAorCTB4NjBjMywgMHgwMDA0LCAweDA4MDQsIDB4YTI3MCwgMHgwODBjLCAweDlmNDMsIDB4NzAwMywgMHgwMTAwLAorCTB4NzAwYiwgMHgwMDAzLCAweDcwMGYsIDB4MmEwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhMjcwLAorCTB4MDgwYywgMHg5ZjQzLCAweDcwMDMsIDB4MDIwMCwgMHgwODA0LCAweDlkNjcsIDB4MDgwYywgMHg5ZjQzLAorCTB4NzAwMywgMHgwMTAwLCAweDc4MmMsIDB4OTAwNSwgMHgwMTEwLCAweDcwMGEsIDB4MDAxMCwgMHg3MDBiLAorCTB4MDAwMywgMHg3ODE0LCAweDcwMGUsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTI3MCwgMHgwMGQ2LAorCTB4MDgwYywgMHg5ZjQzLCAweDcwMDMsIDB4MDIxMCwgMHg3MDA3LCAweDAwMTQsIDB4NzAwYiwgMHgwODAwLAorCTB4Yjg5NCwgMHg5MDg2LCAweDAwMTQsIDB4MTE5OCwgMHhiOTljLCAweDkxODQsIDB4MDAzMCwgMHgwMTkwLAorCTB4Yjk5OCwgMHg5MTg0LCAweGMwMDAsIDB4MTE0MCwgMHhkMWVjLCAweDAxMTgsIDB4NzAwZiwgMHgyMTAwLAorCTB4MDA1OCwgMHg3MDBmLCAweDAxMDAsIDB4MDA0MCwgMHg3MDBmLCAweDA0MDAsIDB4MDAyOCwgMHg3MDBmLAorCTB4MDcwMCwgMHgwMDEwLCAweDcwMGYsIDB4MDgwMCwgMHgwMGY2LCAweDIwNzksIDB4MTg0NywgMHg3OTA0LAorCTB4MDBmZSwgMHhkMWFjLCAweDExMTAsIDB4OTA4NSwgMHgwMDIwLCAweGQxYTQsIDB4MDExMCwgMHg5MDg1LAorCTB4MDAxMCwgMHgyMDA5LCAweDE4NjksIDB4MjEwYywgMHhkMTg0LCAweDExMTAsIDB4OTA4NSwgMHgwMDAyLAorCTB4MDAyNiwgMHgyMDA5LCAweDE4NjcsIDB4MjEwYywgMHhkMWU0LCAweDAxNTAsIDB4YzBjNSwgMHhiYWQ0LAorCTB4ZDI4YywgMHgxMTA4LCAweGMwY2QsIDB4OTA5NCwgMHgwMDMwLCAweDkyOTYsIDB4MDAxMCwgMHgwMTQwLAorCTB4ZDFlYywgMHgwMTMwLCAweDkwOTQsIDB4MDAzMCwgMHg5Mjk2LCAweDAwMTAsIDB4MDEwOCwgMHhjMGJkLAorCTB4MDAyZSwgMHg3MDI2LCAweDYwYzMsIDB4MDAxNCwgMHgwMGRlLCAweDA4MDQsIDB4YTI3MCwgMHgwODBjLAorCTB4OWY0MywgMHg3MDAzLCAweDAyMTAsIDB4NzAwNywgMHgwMDE0LCAweDcwMGYsIDB4MDEwMCwgMHg2MGMzLAorCTB4MDAxNCwgMHgwODA0LCAweGEyNzAsIDB4MDgwYywgMHg5ZjQzLCAweDcwMDMsIDB4MDIwMCwgMHgwODA0LAorCTB4OWNlNSwgMHgwODBjLCAweDlmNDMsIDB4NzAwMywgMHgwMTAwLCAweDcwMGIsIDB4MDAwMywgMHg3MDBmLAorCTB4MmEwMCwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhMjcwLCAweDA4MGMsIDB4OWY0MywgMHg3MDAzLAorCTB4MDEwMCwgMHg3MDBiLCAweDAwMGIsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTI3MCwgMHgwMDI2LAorCTB4MDBkNiwgMHgwMDM2LCAweDAwNDYsIDB4MjAxOSwgMHgzMjAwLCAweDIwMjEsIDB4MDgwMCwgMHgwMDQwLAorCTB4MDAyNiwgMHgwMGQ2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDIyMDAsIDB4MjAyMSwgMHgwMTAwLAorCTB4MDgwYywgMHhhYWYxLCAweGI4MTAsIDB4OTMwNSwgMHg3MDAyLCAweGI4MTQsIDB4NzAwNiwgMHgyMDY5LAorCTB4MTgwMCwgMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDk0ODUsIDB4MDAyOSwgMHg3MDEyLAorCTB4MDA0ZSwgMHgwMDNlLCAweDAwZGUsIDB4MDgwYywgMHhhMjY0LCAweDcyMWEsIDB4OWY5NSwgMHgwMDAwLAorCTB4NzIyMiwgMHg3MDI3LCAweGZmZmYsIDB4MjA3MSwgMHgwMjRjLCAweDAwMmUsIDB4MDAwNSwgMHgwMDI2LAorCTB4MDgwYywgMHhhYWYxLCAweDcwMDMsIDB4MDJmZiwgMHg3MDA3LCAweGZmZmMsIDB4MDBkNiwgMHgyMDY5LAorCTB4MTgwMCwgMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLCAweDAwZGUsIDB4NzAxMywgMHgyMDI5LAorCTB4MGMxMCwgMHg3MDAzLCAweDAxMDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMGIsIDB4ZmMwMiwgMHg3MDBmLAorCTB4MDAwMCwgMHgwMDA1LCAweDAwMjYsIDB4MDBkNiwgMHgwMDM2LCAweDAwNDYsIDB4MjAxOSwgMHgzMzAwLAogCTB4MjAyMSwgMHgwODAwLCAweDAwNDAsIDB4MDAyNiwgMHgwMGQ2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LAotCTB4MjIwMCwgMHgyMDIxLCAweDAxMDAsIDB4MDgwYywgMHhhOGVjLCAweGI4MTAsIDB4OTMwNSwgMHg3MDAyLAotCTB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLAotCTB4OTQ4NSwgMHgwMDI5LCAweDcwMTIsIDB4MDA0ZSwgMHgwMDNlLCAweDAwZGUsIDB4MDgwYywgMHhhMDVmLAotCTB4NzIxYSwgMHg5Zjk1LCAweDAwMDAsIDB4NzIyMiwgMHg3MDI3LCAweGZmZmYsIDB4MjA3MSwgMHgwMjRjLAotCTB4MDAyZSwgMHgwMDA1LCAweDAwMjYsIDB4MDgwYywgMHhhOGVjLCAweDcwMDMsIDB4MDJmZiwgMHg3MDA3LAotCTB4ZmZmYywgMHgwMGQ2LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLCAweDcwMGEsIDB4Njg4MCwgMHg3MDBlLAotCTB4MDBkZSwgMHg3MDEzLCAweDIwMjksIDB4MGMxMCwgMHg3MDAzLCAweDAxMDAsIDB4NzAwNywgMHgwMDAwLAotCTB4NzAwYiwgMHhmYzAyLCAweDcwMGYsIDB4MDAwMCwgMHgwMDA1LCAweDAwMjYsIDB4MDBkNiwgMHgwMDM2LAotCTB4MDA0NiwgMHgyMDE5LCAweDMzMDAsIDB4MjAyMSwgMHgwODAwLCAweDAwNDAsIDB4MDAyNiwgMHgwMGQ2LAotCTB4MDAzNiwgMHgwMDQ2LCAweDIwMTksIDB4MjMwMCwgMHgyMDIxLCAweDAxMDAsIDB4MDgwYywgMHhhOGVjLAotCTB4YjgxMCwgMHg5MzA1LCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHhiODEwLAotCTB4OTAwNSwgMHgxMTQwLCAweGI4MTQsIDB4OTAwNSwgMHgxMTI4LCAweDcwMGIsIDB4MDBmZiwgMHg3MDBmLAotCTB4ZmZmZSwgMHgwMDIwLCAweDY4N2MsIDB4NzAwYSwgMHg2ODgwLCAweDcwMGUsIDB4MDAwMCwgMHg5NDg1LAotCTB4MDA5OCwgMHg3MDEyLCAweDAwNGUsIDB4MDAzZSwgMHgwMGRlLCAweDA4MGMsIDB4YTA1ZiwgMHg3MjFhLAotCTB4N2EwOCwgMHg3MjIyLCAweDJmMTAsIDB4NzIyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDAyZSwgMHgwMDA1LAotCTB4MDgwYywgMHhhMDVmLCAweDcyMWEsIDB4N2EwOCwgMHg3MjIyLCAweDc4MTQsIDB4NzAyNiwgMHgyMDcxLAotCTB4MDI0YywgMHgwMDJlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LAotCTB4MjA2OSwgMHgwMjAwLCAweDIwNzEsIDB4MDI0MCwgMHg2MDA0LCAweDkwOGEsIDB4MDA4NSwgMHgwYTBjLAotCTB4MGQ3OSwgMHg5MDhhLCAweDAwOTIsIDB4MWEwYywgMHgwZDc5LCAweDYxMTAsIDB4MjE1OCwgMHhiOTg0LAotCTB4MmM3OCwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHg5MDgyLCAweDAwODUsIDB4MDAzMywgMHgwMGZlLAotCTB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweDlkYWMsIDB4OWRiYiwgMHg5ZGM2LAotCTB4OWRhYSwgMHg5ZGFhLCAweDlkYWEsIDB4OWRhYywgMHg5ZGFhLCAweDlkYWEsIDB4OWRhYSwgMHg5ZGFhLAotCTB4OWRhYSwgMHg5ZGFhLCAweDA4MGMsIDB4MGQ3OSwgMHgwNDExLCAweDYwYzMsIDB4MDAwMCwgMHgwMDI2LAotCTB4MDgwYywgMHgyYTExLCAweDAyMjgsIDB4MjAxMSwgMHgwMTAxLCAweDIyMDQsIDB4YzBjNSwgMHgyMDEyLAotCTB4MDAyZSwgMHgwODA0LCAweGEwNmIsIDB4MDQzMSwgMHg3ODA4LCAweDcwMGEsIDB4NzgxNCwgMHg3MDBlLAotCTB4NzAxNywgMHhmZmZmLCAweDYwYzMsIDB4MDAwYywgMHgwODA0LCAweGEwNmIsIDB4MDRhMSwgMHg3MDAzLAotCTB4MDAwMywgMHg3MDA3LCAweDAzMDAsIDB4NjBjMywgMHgwMDA0LCAweDA4MDQsIDB4YTA2YiwgMHgwMDI2LAotCTB4MDgwYywgMHhhOGVjLCAweGI4MTAsIDB4OTA4NSwgMHg4MTAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LAotCTB4MjA2OSwgMHgxODAwLCAweDY4N2MsIDB4NzAwYSwgMHg2ODgwLCAweDcwMGUsIDB4NzAxMywgMHgwMDA5LAotCTB4MDgwNCwgMHg5ZDBlLCAweDAwMjYsIDB4MDgwYywgMHhhOGVjLCAweGI4MTAsIDB4OTA4NSwgMHg4NDAwLAotCTB4NzAwMiwgMHhiODE0LCAweDcwMDYsIDB4MjA2OSwgMHgxODAwLCAweDY4N2MsIDB4NzAwYSwgMHg2ODgwLAotCTB4NzAwZSwgMHgyMDAxLCAweDAwOTksIDB4N2EyMCwgMHg5Mjk2LCAweDAwMDUsIDB4MDEwOCwgMHhjMGJjLAotCTB4NzAxMiwgMHgwODA0LCAweDlkNzAsIDB4MDAyNiwgMHgwODBjLCAweGE4ZWMsIDB4YjgxMCwgMHg5MDg1LAotCTB4ODUwMCwgMHg3MDAyLCAweGI4MTQsIDB4NzAwNiwgMHgyMDY5LCAweDE4MDAsIDB4Njg3YywgMHg3MDBhLAotCTB4Njg4MCwgMHg3MDBlLCAweDIwMDEsIDB4MDA5OSwgMHg3YTIwLCAweDkyOTYsIDB4MDAwNSwgMHgwMTA4LAotCTB4YzBiYywgMHg3MDEyLCAweDA4MDQsIDB4OWQ3MCwgMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAotCTB4MDBmNiwgMHgyYzc4LCAweDIwNjksIDB4MDIwMCwgMHgyMDcxLCAweDAyNDAsIDB4NzgwNCwgMHg5MDhhLAotCTB4MDA0MCwgMHgwYTBjLCAweDBkNzksIDB4OTA4YSwgMHgwMDU3LCAweDFhMGMsIDB4MGQ3OSwgMHg3OTEwLAotCTB4MjE1OCwgMHhiOTg0LCAweDIwNjEsIDB4MDEwMCwgMHg2MTlhLCAweDkwODIsIDB4MDA0MCwgMHgwMDMzLAotCTB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsIDB4OWU0OSwgMHg5ZTQ5LAotCTB4OWU0OSwgMHg5ZTdhLCAweDllNDksIDB4OWU0OSwgMHg5ZTQ5LCAweDllNDksIDB4OWU0OSwgMHg5ZTQ5LAotCTB4OWU0OSwgMHhhNDNmLCAweGE0NDQsIDB4YTQ0OSwgMHhhNDRlLCAweDllNDksIDB4OWU0OSwgMHg5ZTQ5LAotCTB4YTQzYSwgMHgwODBjLCAweDBkNzksIDB4NjgxMywgMHgwMDA4LCAweGJhOGMsIDB4ODIxMCwgMHhiOGQ0LAotCTB4ZDA4NCwgMHgwMTgwLCAweDIwMDEsIDB4MWI3MywgMHgyMDBjLCAweDgxMDgsIDB4MjEwMiwgMHgyMDAxLAotCTB4MWI3MiwgMHgyMDFjLCAweDEyMTgsIDB4ODMxOCwgMHgyMzAyLCAweDBlYTAsIDB4Nzk1MiwgMHg3MTJlLAotCTB4N2I0ZSwgMHg3MzJhLCAweDkyOTQsIDB4MDBmZiwgMHhiYThlLCAweDgyMTcsIDB4NzIxYSwgMHhiYTEwLAotCTB4OTI5NSwgMHgwNjAwLCAweDcyMDIsIDB4YmExNCwgMHg3MjA2LCAweDIwNjksIDB4MTgwMCwgMHg2YTdjLAotCTB4NzIwYSwgMHg2YTgwLCAweDcyMGUsIDB4NzAxMywgMHgwODI5LCAweDJmMTAsIDB4NzIyMiwgMHg3MDI3LAotCTB4ZmZmZiwgMHgwMDA1LCAweDAwMTYsIDB4NzgxNCwgMHg5MDg0LCAweDA3MDAsIDB4ODAwNywgMHgwMDEzLAotCTB4MDAxZSwgMHgwMDA1LCAweDllOGEsIDB4OWU4YSwgMHg5ZThjLCAweDllOGEsIDB4OWU4YSwgMHg5ZThhLAotCTB4OWVhNiwgMHg5ZThhLCAweDA4MGMsIDB4MGQ3OSwgMHg3OTE0LCAweDkxOGMsIDB4MDhmZiwgMHg5MThkLAotCTB4ZjYwMCwgMHg3OTE2LCAweDIwMDksIDB4MDAwMywgMHgwMGI5LCAweDIwNjksIDB4MTg0NywgMHg2ODA0LAotCTB4ZDBiYywgMHgwMTMwLCAweDY4MmMsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDcsIDB4NzAzMiwgMHgwMDEwLAotCTB4NzAzMywgMHgzZjAwLCAweDYwYzMsIDB4MDAwMSwgMHgwODA0LCAweGEwNmIsIDB4MjAwOSwgMHgwMDAzLAotCTB4MDAxOSwgMHg3MDMzLCAweDdmMDAsIDB4MGNiMCwgMHgwMDE2LCAweDA4MGMsIDB4YThlYywgMHgwMDFlLAotCTB4YjgxMCwgMHg5MDg1LCAweDAxMDAsIDB4NzAwMiwgMHhiODE0LCAweDcwMDYsIDB4MjA2OSwgMHgxODAwLAotCTB4NmE3YywgMHg3MjBhLCAweDZhODAsIDB4NzIwZSwgMHg3MDEzLCAweDA4ODgsIDB4OTE4ZCwgMHgwMDA4LAotCTB4NzExNiwgMHgwODBjLCAweGEwNWYsIDB4NzIxYSwgMHg3YTA4LCAweDcyMjIsIDB4MmYxMCwgMHg3MjI2LAorCTB4MjMwMCwgMHgyMDIxLCAweDAxMDAsIDB4MDgwYywgMHhhYWYxLCAweGI4MTAsIDB4OTMwNSwgMHg3MDAyLAorCTB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHhiODEwLCAweDkwMDUsIDB4MTE0MCwgMHhiODE0LAorCTB4OTAwNSwgMHgxMTI4LCAweDcwMGIsIDB4MDBmZiwgMHg3MDBmLCAweGZmZmUsIDB4MDAyMCwgMHg2ODdjLAorCTB4NzAwYSwgMHg2ODgwLCAweDcwMGUsIDB4MDAwMCwgMHg5NDg1LCAweDAwOTgsIDB4NzAxMiwgMHgwMDRlLAorCTB4MDAzZSwgMHgwMGRlLCAweDA4MGMsIDB4YTI2NCwgMHg3MjFhLCAweDdhMDgsIDB4NzIyMiwgMHgyZjEwLAorCTB4NzIyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDAyZSwgMHgwMDA1LCAweDA4MGMsIDB4YTI2NCwgMHg3MjFhLAorCTB4N2EwOCwgMHg3MjIyLCAweDc4MTQsIDB4NzAyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDAyZSwgMHgwMDA1LAorCTB4MDBiNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNjksIDB4MDIwMCwgMHgyMDcxLAorCTB4MDI0MCwgMHg2MDA0LCAweDkwOGEsIDB4MDA4NSwgMHgwYTBjLCAweDBkODUsIDB4OTA4YSwgMHgwMDkyLAorCTB4MWEwYywgMHgwZDg1LCAweDYxMTAsIDB4MjE1OCwgMHhiOTg0LCAweDJjNzgsIDB4MjA2MSwgMHgwMTAwLAorCTB4NjE5YSwgMHg5MDgyLCAweDAwODUsIDB4MDAzMywgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLAorCTB4MDBiZSwgMHgwMDA1LCAweDlmYjEsIDB4OWZjMCwgMHg5ZmNiLCAweDlmYWYsIDB4OWZhZiwgMHg5ZmFmLAorCTB4OWZiMSwgMHg5ZmFmLCAweDlmYWYsIDB4OWZhZiwgMHg5ZmFmLCAweDlmYWYsIDB4OWZhZiwgMHgwODBjLAorCTB4MGQ4NSwgMHgwNDExLCAweDYwYzMsIDB4MDAwMCwgMHgwMDI2LCAweDA4MGMsIDB4MmEwNCwgMHgwMjI4LAorCTB4MjAxMSwgMHgwMTAxLCAweDIyMDQsIDB4YzBjNSwgMHgyMDEyLCAweDAwMmUsIDB4MDgwNCwgMHhhMjcwLAorCTB4MDQzMSwgMHg3ODA4LCAweDcwMGEsIDB4NzgxNCwgMHg3MDBlLCAweDcwMTcsIDB4ZmZmZiwgMHg2MGMzLAorCTB4MDAwYywgMHgwODA0LCAweGEyNzAsIDB4MDRhMSwgMHg3MDAzLCAweDAwMDMsIDB4NzAwNywgMHgwMzAwLAorCTB4NjBjMywgMHgwMDA0LCAweDA4MDQsIDB4YTI3MCwgMHgwMDI2LCAweDA4MGMsIDB4YWFmMSwgMHhiODEwLAorCTB4OTA4NSwgMHg4MTAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLAorCTB4NzAwYSwgMHg2ODgwLCAweDcwMGUsIDB4NzAxMywgMHgwMDA5LCAweDA4MDQsIDB4OWYxMywgMHgwMDI2LAorCTB4MDgwYywgMHhhYWYxLCAweGI4MTAsIDB4OTA4NSwgMHg4NDAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LAorCTB4MjA2OSwgMHgxODAwLCAweDY4N2MsIDB4NzAwYSwgMHg2ODgwLCAweDcwMGUsIDB4MjAwMSwgMHgwMDk5LAorCTB4N2EyMCwgMHg5Mjk2LCAweDAwMDUsIDB4MDEwOCwgMHhjMGJjLCAweDcwMTIsIDB4MDgwNCwgMHg5Zjc1LAorCTB4MDAyNiwgMHgwODBjLCAweGFhZjEsIDB4YjgxMCwgMHg5MDg1LCAweDg1MDAsIDB4NzAwMiwgMHhiODE0LAorCTB4NzAwNiwgMHgyMDY5LCAweDE4MDAsIDB4Njg3YywgMHg3MDBhLCAweDY4ODAsIDB4NzAwZSwgMHgyMDAxLAorCTB4MDA5OSwgMHg3YTIwLCAweDkyOTYsIDB4MDAwNSwgMHgwMTA4LCAweGMwYmMsIDB4NzAxMiwgMHgwODA0LAorCTB4OWY3NSwgMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MmM3OCwgMHgyMDY5LAorCTB4MDIwMCwgMHgyMDcxLCAweDAyNDAsIDB4NzgwNCwgMHg5MDhhLCAweDAwNDAsIDB4MGEwYywgMHgwZDg1LAorCTB4OTA4YSwgMHgwMDU3LCAweDFhMGMsIDB4MGQ4NSwgMHg3OTEwLCAweDIxNTgsIDB4Yjk4NCwgMHgyMDYxLAorCTB4MDEwMCwgMHg2MTlhLCAweDkwODIsIDB4MDA0MCwgMHgwMDMzLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLAorCTB4MDBjZSwgMHgwMGJlLCAweDAwMDUsIDB4YTA0ZSwgMHhhMDRlLCAweGEwNGUsIDB4YTA3ZiwgMHhhMDRlLAorCTB4YTA0ZSwgMHhhMDRlLCAweGEwNGUsIDB4YTA0ZSwgMHhhMDRlLCAweGEwNGUsIDB4YTY0NCwgMHhhNjQ5LAorCTB4YTY0ZSwgMHhhNjUzLCAweGEwNGUsIDB4YTA0ZSwgMHhhMDRlLCAweGE2M2YsIDB4MDgwYywgMHgwZDg1LAorCTB4NjgxMywgMHgwMDA4LCAweGJhOGMsIDB4ODIxMCwgMHhiOGQ0LCAweGQwODQsIDB4MDE4MCwgMHgyMDAxLAorCTB4MWI3MiwgMHgyMDBjLCAweDgxMDgsIDB4MjEwMiwgMHgyMDAxLCAweDFiNzEsIDB4MjAxYywgMHgxMjE4LAorCTB4ODMxOCwgMHgyMzAyLCAweDBlYTAsIDB4Nzk1MiwgMHg3MTJlLCAweDdiNGUsIDB4NzMyYSwgMHg5Mjk0LAorCTB4MDBmZiwgMHhiYThlLCAweDgyMTcsIDB4NzIxYSwgMHhiYTEwLCAweDkyOTUsIDB4MDYwMCwgMHg3MjAyLAorCTB4YmExNCwgMHg3MjA2LCAweDIwNjksIDB4MTgwMCwgMHg2YTdjLCAweDcyMGEsIDB4NmE4MCwgMHg3MjBlLAorCTB4NzAxMywgMHgwODI5LCAweDJmMTAsIDB4NzIyMiwgMHg3MDI3LCAweGZmZmYsIDB4MDAwNSwgMHgwMDE2LAorCTB4NzgxNCwgMHg5MDg0LCAweDA3MDAsIDB4ODAwNywgMHgwMDEzLCAweDAwMWUsIDB4MDAwNSwgMHhhMDhmLAorCTB4YTA4ZiwgMHhhMDkxLCAweGEwOGYsIDB4YTA4ZiwgMHhhMDhmLCAweGEwYWIsIDB4YTA4ZiwgMHgwODBjLAorCTB4MGQ4NSwgMHg3OTE0LCAweDkxOGMsIDB4MDhmZiwgMHg5MThkLCAweGY2MDAsIDB4NzkxNiwgMHgyMDA5LAorCTB4MDAwMywgMHgwMGI5LCAweDIwNjksIDB4MTg0NywgMHg2ODA0LCAweGQwYmMsIDB4MDEzMCwgMHg2ODJjLAorCTB4OTA4NCwgMHgwMGZmLCAweDgwMDcsIDB4NzAzMiwgMHgwMDEwLCAweDcwMzMsIDB4M2YwMCwgMHg2MGMzLAorCTB4MDAwMSwgMHgwODA0LCAweGEyNzAsIDB4MjAwOSwgMHgwMDAzLCAweDAwMTksIDB4NzAzMywgMHg3ZjAwLAorCTB4MGNiMCwgMHgwMDE2LCAweDA4MGMsIDB4YWFmMSwgMHgwMDFlLCAweGI4MTAsIDB4OTA4NSwgMHgwMTAwLAorCTB4NzAwMiwgMHhiODE0LCAweDcwMDYsIDB4MjA2OSwgMHgxODAwLCAweDZhN2MsIDB4NzIwYSwgMHg2YTgwLAorCTB4NzIwZSwgMHg3MDEzLCAweDA4ODgsIDB4OTE4ZCwgMHgwMDA4LCAweDcxMTYsIDB4MDgwYywgMHhhMjY0LAorCTB4NzIxYSwgMHg3YTA4LCAweDcyMjIsIDB4MmYxMCwgMHg3MjI2LCAweDAwMDUsIDB4MDBiNiwgMHgwMGU2LAorCTB4MDBkNiwgMHgwMGM2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMzYsIDB4MjA2MSwgMHgwMTAwLAorCTB4MjA3MSwgMHgxODAwLCAweDcxNjAsIDB4NzgxMCwgMHgyMDU4LCAweDc2ZGMsIDB4OTZiNCwgMHgwMDI4LAorCTB4MDExMCwgMHg3MzdjLCAweDc0ODAsIDB4MjUwMCwgMHg3NmRjLCAweDk2YjQsIDB4MDAyOCwgMHgwMTQwLAorCTB4MjAwMSwgMHgwNGZmLCAweDYwNjIsIDB4NjA2NywgMHhmZmZmLCAweDYzNmEsIDB4NjQ2ZSwgMHgwMDUwLAorCTB4MjAwMSwgMHgwMGZmLCAweDkwODUsIDB4MDQwMCwgMHg2MDYyLCAweDYwNjcsIDB4ZmZmZiwgMHg2MDZiLAorCTB4MDAwMCwgMHg2MTZlLCAweGI4YjgsIDB4NjA3MywgMHgwNTMwLCAweDYwNzcsIDB4MDAwOCwgMHhiODhjLAorCTB4ODAwMCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg4ZSwgMHg4MDA3LCAweDkwODUsIDB4MDAyMCwgMHg2MDdhLAorCTB4NjA3ZiwgMHgwMDAwLCAweDJiMDAsIDB4NjA4MiwgMHg2MDg3LCAweGZmZmYsIDB4NzgxNCwgMHgwMDk2LAorCTB4MjA0OCwgMHhhODQ4LCAweDYwOGEsIDB4YTg0NCwgMHg2MDhlLCAweGE4MzgsIDB4NjBjNiwgMHhhODM0LAorCTB4NjBjYSwgMHgwMDllLCAweGI4NmMsIDB4NjBjZSwgMHg2MGFiLCAweDAwMzYsIDB4NjBhZiwgMHg5NWQ1LAorCTB4NjBkNywgMHgwMDAwLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweDkwODQsIDB4MDAyOCwgMHgwMTI4LAorCTB4NjA5ZiwgMHgwMDAwLCAweDIwMDEsIDB4MDA5MiwgMHgwMDU4LCAweDYwMjgsIDB4YzBiZCwgMHg2MDJhLAorCTB4NjA5ZiwgMHgwMGZmLCAweDIwMTEsIDB4ZmZmZiwgMHgwODBjLCAweDJhZDMsIDB4MjAwMSwgMHgwMGIyLAorCTB4MjAxMCwgMHg5MDBlLCAweDA4MGMsIDB4MmFlMiwgMHgyMDA5LCAweDA3ZDAsIDB4MDgwYywgMHg4YTUwLAorCTB4MDAzZSwgMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGJlLAogCTB4MDAwNSwgMHgwMGI2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LAogCTB4MDAzNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHgxODAwLCAweDcxNjAsIDB4NzgxMCwgMHgyMDU4LAotCTB4NzZkYywgMHg5NmI0LCAweDAwMjgsIDB4MDExMCwgMHg3MzdjLCAweDc0ODAsIDB4MjUwMCwgMHg3NmRjLAotCTB4OTZiNCwgMHgwMDI4LCAweDAxNDAsIDB4MjAwMSwgMHgwNGZmLCAweDYwNjIsIDB4NjA2NywgMHhmZmZmLAotCTB4NjM2YSwgMHg2NDZlLCAweDAwNTAsIDB4MjAwMSwgMHgwMGZmLCAweDkwODUsIDB4MDQwMCwgMHg2MDYyLAotCTB4NjA2NywgMHhmZmZmLCAweDYwNmIsIDB4MDAwMCwgMHg2MTZlLCAweGI4YjgsIDB4NjA3MywgMHgwNTMwLAotCTB4NjA3NywgMHgwMDA4LCAweGI4OGMsIDB4ODAwMCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg4ZSwgMHg4MDA3LAotCTB4OTA4NSwgMHgwMDIwLCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLCAweDJiMDAsIDB4NjA4MiwgMHg2MDg3LAotCTB4ZmZmZiwgMHg3ODE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODQ4LCAweDYwOGEsIDB4YTg0NCwgMHg2MDhlLAotCTB4YTgzOCwgMHg2MGM2LCAweGE4MzQsIDB4NjBjYSwgMHgwMDllLCAweGI4NmMsIDB4NjBjZSwgMHg2MGFiLAotCTB4MDAzNiwgMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LAotCTB4OTA4NCwgMHgwMDI4LCAweDAxMjgsIDB4NjA5ZiwgMHgwMDAwLCAweDIwMDEsIDB4MDA5MiwgMHgwMDU4LAotCTB4NjAyOCwgMHhjMGJkLCAweDYwMmEsIDB4NjA5ZiwgMHgwMGZmLCAweDIwMTEsIDB4ZmZmZiwgMHgwODBjLAotCTB4MmFkYywgMHgyMDAxLCAweDAwYjIsIDB4MjAxMCwgMHg5MDBlLCAweDA4MGMsIDB4MmFlYiwgMHgyMDA5LAotCTB4MDdkMCwgMHgwODBjLCAweDg4ZTksIDB4MDAzZSwgMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LAotCTB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAzNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHgxODAwLAotCTB4NzE2MCwgMHg3ODEwLCAweDIwNTgsIDB4YjhhMCwgMHgyMDI4LCAweDc2ZGMsIDB4ZDZhYywgMHgxMTY4LAotCTB4OTU4MiwgMHgwMDdlLCAweDEyNTAsIDB4MjUwMCwgMHg5MDk0LCAweGZmODAsIDB4MTEzMCwgMHg5MDgwLAotCTB4MzQ3NCwgMHgyMDE1LCAweDkyOTQsIDB4MDBmZiwgMHgwMDIwLCAweGI5MTAsIDB4YmExNCwgMHg3MzdjLAotCTB4NzQ4MCwgMHg3MGRjLCAweGQwYWMsIDB4MTEzMCwgMHg5NTgyLCAweDAwN2UsIDB4MTIxOCwgMHg5NTg0LAotCTB4ZmY4MCwgMHgwMTM4LCAweDkxODUsIDB4MDQwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLAotCTB4MDAzMCwgMHg2MDYzLCAweDA0MDAsIDB4NjI2NiwgMHg2MDZiLCAweDAwMDAsIDB4NjE2ZSwgMHhiOGI4LAotCTB4NjA3MiwgMHg2MDc3LCAweDAwMDAsIDB4Yjg2NCwgMHhkMGE0LCAweDAxMTAsIDB4NjA3NywgMHgwMDA4LAotCTB4Yjg4YywgMHg4MDAwLCAweDkwODQsIDB4MDBmZiwgMHhiODhlLCAweDgwMDcsIDB4OTA4NSwgMHgwMDIwLAotCTB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmIwMCwgMHg2MDgyLCAweDYwODcsIDB4ZmZmZiwgMHg3ODE0LAotCTB4MDA5NiwgMHgyMDQ4LCAweGE4NDgsIDB4NjA4YSwgMHhhODQ0LCAweDYwOGUsIDB4YTgzOCwgMHg2MGM2LAotCTB4YTgzNCwgMHg2MGNhLCAweDAwOWUsIDB4Yjg2YywgMHg2MGNlLCAweDYwYWIsIDB4MDAzNiwgMHg2MGFmLAotCTB4OTVkNSwgMHg2MGQ3LCAweDAwMDAsIDB4YmE4NCwgMHg2MjllLCAweDAwZjYsIDB4MjA3OSwgMHgwMTQwLAotCTB4NzgwMywgMHgwMDAwLCAweDAwZmUsIDB4OTAwZSwgMHgyMDExLCAweDAwOTIsIDB4MDgwYywgMHgyYWViLAotCTB4MjAwOSwgMHgwN2QwLCAweDA4MGMsIDB4ODhlOSwgMHgwMDNlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLAotCTB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGU2LAotCTB4MDBkNiwgMHgwMGM2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLAotCTB4MTgwMCwgMHg3ODEwLCAweDIwNTgsIDB4YjhhMCwgMHgyMDI4LCAweGI5MTAsIDB4YmExNCwgMHg3MzdjLAotCTB4NzQ4MCwgMHg3ODIwLCAweDAwMDIsIDB4OWZlYSwgMHg5ZmVhLCAweDlmZWEsIDB4OWZlYSwgMHg5ZmVhLAotCTB4OWZlYSwgMHg5ZmVhLCAweDlmZWEsIDB4OWZlYSwgMHg5ZmVhLCAweDlmZWMsIDB4OWZlYSwgMHg5ZmVhLAotCTB4OWZlYSwgMHg5ZmVhLCAweDA4MGMsIDB4MGQ3OSwgMHhiODg0LCAweDYwOWUsIDB4NzgxNCwgMHgyMDQ4LAotCTB4YTg3YywgMHhkMGZjLCAweDA1NTgsIDB4YWY5MCwgMHg5Nzg0LCAweGZmMDAsIDB4OTEwNSwgMHg2MDYyLAotCTB4ODczZiwgMHg5Nzg0LCAweGZmMDAsIDB4MDAwNiwgMHg3ODE0LCAweDIwNDgsIDB4YTg3OCwgMHhjMGZjLAotCTB4OTAwNSwgMHgwMDBlLCAweDExNjAsIDB4YWY5NCwgMHg4N2ZmLCAweDAxOTgsIDB4MjAzOSwgMHgwMDk4LAotCTB4OTcwNSwgMHg2MDcyLCAweDc4MDgsIDB4NjA4MiwgMHgyZjAwLCAweDYwODYsIDB4MDAzOCwgMHg5MTg1LAotCTB4MjIwMCwgMHg2MDYyLCAweDYwNzMsIDB4MDEyOSwgMHg2MDc3LCAweDAwMDAsIDB4Yjg4NCwgMHg2MDllLAotCTB4MDA1MCwgMHgyMDM5LCAweDAwMjksIDB4OTcwNSwgMHg2MDcyLCAweDBjYzAsIDB4OTE4NSwgMHgwMjAwLAotCTB4NjA2MiwgMHg2MDczLCAweDIwMjksIDB4YTg3YywgMHhkMGZjLCAweDAxMTgsIDB4YWY5NCwgMHg4N2ZmLAotCTB4MTEyMCwgMHgyZjAwLCAweDYwODIsIDB4NzgwOCwgMHg2MDg2LCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLAotCTB4NjA3NywgMHgwMDAwLCAweGI4OGMsIDB4ODAwMCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg4ZSwgMHg4MDA3LAotCTB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4YTg0OCwgMHg2MDhhLCAweGE4NDQsIDB4NjA4ZSwgMHhhODM4LAotCTB4NjBjNiwgMHhhODM0LCAweDYwY2EsIDB4Yjg2YywgMHg2MGNlLCAweDYwYWYsIDB4OTVkNSwgMHg2MGQ3LAotCTB4MDAwMCwgMHgwODBjLCAweGE4Y2MsIDB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4OTA4NCwgMHhmZmYwLAotCTB4OTAwNSwgMHgwMTEwLCAweDIwMDksIDB4MWI1OCwgMHgwODBjLCAweDg4ZTksIDB4MDAzZSwgMHgwMDRlLAotCTB4MDA1ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHg3YTQwLAotCTB4OTI5NCwgMHgwMGZmLCAweDgyMTcsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4MTllOSwgMHg2ODZiLAotCTB4MDAwMSwgMHgwMGRlLCAweDAwMDUsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwMGYxLAotCTB4MDgwYywgMHg4OGRiLCAweDAwMDUsIDB4MDAxNiwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHg5MTg0LAotCTB4MDYwMCwgMHg5MDg2LCAweDA2MDAsIDB4MDEyOCwgMHgwMDg5LCAweDA4MGMsIDB4ODhkYiwgMHgwMDFlLAotCTB4MDAwNSwgMHhjMWU1LCAweDIwMDEsIDB4MTgwYywgMHgyMTAyLCAweDIwMDEsIDB4MTllYSwgMHgyMDAzLAotCTB4MDAwMCwgMHgyMDAxLCAweDE5ZjUsIDB4MjAwMywgMHgwMDAwLCAweDBjODgsIDB4MDAwNiwgMHgwMDE2LAotCTB4MDAyNiwgMHgyMDA5LCAweDE4MDQsIDB4MjAxMSwgMHgwMDA5LCAweDA4MGMsIDB4MmFlYiwgMHgwMDJlLAotCTB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAwMDYsIDB4MDgwYywgMHhhYWY3LAotCTB4MDEwNiwgMHgyMDYxLCAweDAxMDAsIDB4NjFhNCwgMHg2MGE3LCAweDk1ZjUsIDB4MDAxNiwgMHgwMDI2LAotCTB4MjAwOSwgMHgxODA0LCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLCAweDJhZWIsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDEwZSwgMHgwOTBjLCAweGFiMTMsIDB4MDAwZSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHg2MWE2LAotCTB4MDBjZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDYxLAotCTB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MDgwYywgMHg3NjlkLCAweDE1MTAsIDB4MjAwMSwgMHgxYTBlLAotCTB4MjAwNCwgMHg5MDA1LCAweDE5MDQsIDB4YTExYSwgMHgwODBjLCAweDc3M2YsIDB4MTFhOCwgMHgyMDY5LAotCTB4MDM4MCwgMHg2ODQzLCAweDAxMDEsIDB4Njg0NCwgMHhkMDg0LCAweDFkZTgsIDB4MjA2MSwgMHgwMTAwLAotCTB4NjAyMCwgMHhkMGI0LCAweDExMjAsIDB4NjAyNCwgMHhkMDg0LCAweDA5MGMsIDB4MGQ3OSwgMHg2ODQzLAotCTB4MDEwMCwgMHgwODBjLCAweDg4ZGIsIDB4MDRiMCwgMHgwMGM2LCAweDIwNjEsIDB4MTllOSwgMHgwMGYwLAotCTB4NjkwNCwgMHg5MTk0LCAweDQwMDAsIDB4MDU5OCwgMHgwODBjLCAweGEwOWIsIDB4MDgwYywgMHgyYWIyLAotCTB4MDBjNiwgMHgyMDYxLCAweDE5ZTksIDB4NjEzNCwgMHg5MTkyLCAweDAwMDgsIDB4MTI3OCwgMHg4MTA4LAotCTB4NjEzNiwgMHgwODBjLCAweGFhZjcsIDB4NjEzMCwgMHgwODBjLCAweGFiMTMsIDB4MDBjZSwgMHg4MWZmLAotCTB4MDFjOCwgMHgwODBjLCAweDg4ZGIsIDB4MDgwYywgMHhhMDhlLCAweDAwYTAsIDB4MDgwYywgMHhhYWY3LAotCTB4NjEzMCwgMHg5MWU1LCAweDAwMDAsIDB4MDE1MCwgMHgwODBjLCAweGViZmQsIDB4MDgwYywgMHg4OGU0LAotCTB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4MDAxNCwgMHgwODBjLCAweGFmZWMsIDB4MDgwYywgMHhhYjEzLAotCTB4MDBjZSwgMHgwMDAwLCAweDAwMmUsIDB4MDAxZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgyMDAxLAotCTB4MWEwZSwgMHgyMDA0LCAweDkwMDUsIDB4MWRiMCwgMHgwMGM2LCAweDIwNjEsIDB4MTllOSwgMHg2MTM0LAotCTB4OTE5MiwgMHgwMDAzLCAweDFhZDgsIDB4ODEwOCwgMHg2MTM2LCAweDAwY2UsIDB4MDgwYywgMHg4OGRiLAotCTB4MDgwYywgMHg2MDMzLCAweDIwMDksIDB4MTg0NiwgMHgyMTE0LCAweDgyMTAsIDB4MjIwYSwgMHgwYzEwLAotCTB4MDA5NiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg4OGYxLAotCTB4MDgwYywgMHhhYWY3LCAweDIwMDEsIDB4MDM4NywgMHgyMDAzLCAweDAyMDIsIDB4MjA3MSwgMHgxOWU5LAotCTB4NzE0YywgMHg4MWZmLCAweDA5MDQsIDB4YTFkNCwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLAotCTB4MDgwYywgMHg3NjlkLCAweDE1MTgsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDIsIDB4MDgwYywgMHhhMzkxLAotCTB4MDAzZSwgMHgwODBjLCAweGViZmQsIDB4NzA0YywgMHg5MDY1LCAweDAxODAsIDB4MjAwOSwgMHgwMDRhLAotCTB4NjIyMCwgMHg5Mjk2LCAweDAwMDksIDB4MTEzMCwgMHg2MTE0LCAweDIxNDgsIDB4YTg3YiwgMHgwMDA2LAotCTB4MjAwOSwgMHgwMDRhLCAweDYwMDMsIDB4MDAwMywgMHgwODBjLCAweGFmZWMsIDB4MjAwMSwgMHgwMzg2LAotCTB4MjAwMywgMHg1MDQwLCAweDA4MGMsIDB4NzczZiwgMHgwODA0LCAweGExZDQsIDB4NjkwNCwgMHhkMWY0LAotCTB4MDkwNCwgMHhhMWUxLCAweDA4MGMsIDB4MmFiMiwgMHgwMGM2LCAweDcwNGMsIDB4OTA2NSwgMHgwOTBjLAotCTB4MGQ3OSwgMHg2MDIwLCAweDAwY2UsIDB4OTA4NiwgMHgwMDA2LCAweDE1MjAsIDB4NjFjOCwgMHg2MGM0LAotCTB4OTEwNSwgMHgxNTAwLCAweDcxNGMsIDB4OTE4OCwgMHgwMDExLCAweDIxMDQsIDB4ZDBlNCwgMHgwMWQwLAotCTB4NjIxNCwgMHg5Mjk0LCAweDE4MDAsIDB4MTEyOCwgMHg2MjI0LCAweDkyOTQsIDB4MDAwMiwgMHgxNWUwLAotCTB4MDAxMCwgMHhjMGU0LCAweDIwMGEsIDB4NjAxNCwgMHg5MDg0LCAweGU3ZmQsIDB4OTA4NSwgMHgwMDEwLAotCTB4NjAxNiwgMHg3MDRjLCAweDIwNjAsIDB4MDgwYywgMHg5ODUxLCAweDIwMDksIDB4MDA0OSwgMHgwODBjLAotCTB4YWZlYywgMHgwNDUwLCAweDA4MGMsIDB4ZWJmZCwgMHg3MDRjLCAweDkwNjUsIDB4OTA4NiwgMHgxYjU2LAotCTB4MTE1OCwgMHgwODBjLCAweGFkYmUsIDB4MTUwMCwgMHgyMDYxLCAweDFiNTYsIDB4NjA2NCwgMHg4MDAwLAotCTB4NjA2NiwgMHgwODBjLCAweDYwMzMsIDB4MDBjMCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLAotCTB4YTM5MSwgMHgwMDNlLCAweDcxNGMsIDB4MjE2MCwgMHgyMDA5LCAweDAwNGEsIDB4NjIyMCwgMHg5Mjk2LAotCTB4MDAwOSwgMHgxMTMwLCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLCAweDAwMDYsIDB4MjAwOSwgMHgwMDRhLAotCTB4NjAwMywgMHgwMDAzLCAweDA4MGMsIDB4YWZlYywgMHgyMDAxLCAweDAzODcsIDB4MjAwMywgMHgwMjAwLAotCTB4MDgwYywgMHhhYjEzLCAweDAwMmUsIDB4MDAxZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDllLAotCTB4MDAwNSwgMHhkMWVjLCAweDE5MDQsIDB4YTE3YSwgMHgwODA0LCAweGExN2MsIDB4MDAyNiwgMHgwMGU2LAotCTB4MjA3MSwgMHgxOWU5LCAweDcwNmMsIDB4ZDA4NCwgMHgwMWU4LCAweGMwODQsIDB4NzA2ZSwgMHg3MTRjLAotCTB4ODFmZiwgMHgwMWMwLCAweDIwNzEsIDB4MDEwMCwgMHg5MTg4LCAweDAwMDgsIDB4MjExNCwgMHg5MjhlLAotCTB4MDAwNiwgMHgxMTM4LCAweDIwMDksIDB4MTk4NCwgMHgyMDExLCAweDAwMTIsIDB4MDgwYywgMHgyYWViLAotCTB4MDA0OCwgMHg5MjhlLCAweDAwMDksIDB4MGRiMCwgMHgyMDA5LCAweDE5ODQsIDB4MjAxMSwgMHgwMDE2LAotCTB4MDgwYywgMHgyYWViLCAweDAwZWUsIDB4MDAyZSwgMHgwMDA1LCAweDkwMzYsIDB4MjAwMSwgMHgxOWYzLAotCTB4MjAwNCwgMHg5MDA1LCAweDAxMjgsIDB4OWMwNiwgMHgwMTI4LCAweDJjMzAsIDB4NjAwYywgMHgwY2M4LAotCTB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDE5ZTksIDB4NjEwYywgMHg5MDA2LAotCTB4NjAwZSwgMHg2MDQ0LCAweGMwZmMsIDB4NjA0NiwgMHg4NmZmLCAweDExNDAsIDB4NzgyNCwgMHg5YzA2LAotCTB4MTExOCwgMHg3ODI2LCAweDc4MmEsIDB4MDA1MCwgMHg3OTJhLCAweDAwNDAsIDB4MDBjNiwgMHgyNjYwLAotCTB4NjEwZSwgMHgwMGNlLCAweDc4MjQsIDB4OWMwNiwgMHgxMTA4LCAweDdlMjYsIDB4MDgwYywgMHhhNDU4LAotCTB4MDgwYywgMHhjZTI0LCAweDAwZmUsIDB4MDAwNSwgMHgwODBjLCAweDljZjMsIDB4NzAwMywgMHgxMjAwLAotCTB4NzgzOCwgMHg3MDEyLCAweDc4M2MsIDB4NzAxNiwgMHgwMGM2LCAweDc4MjAsIDB4OTA4NiwgMHgwMDA0LAotCTB4MTE0OCwgMHg3ODEwLCAweDkwMDUsIDB4MDEzMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgxMCwgMHhiOTE0LAotCTB4MDBiZSwgMHgwMDIwLCAweDIwNjEsIDB4MTgwMCwgMHg2MDdjLCAweDYxODAsIDB4OTA4NCwgMHgwMGZmLAotCTB4NzAwYSwgMHg3MTBlLCAweDAwY2UsIDB4NjBjMywgMHgwMDJjLCAweDA4MDQsIDB4YTA2YiwgMHgwODBjLAotCTB4OWNmMywgMHg3MDAzLCAweDBmMDAsIDB4NzgwOCwgMHhkMDljLCAweDAxMjgsIDB4YjgxMCwgMHg5MDg0LAotCTB4MDBmZiwgMHg3MDBhLCAweGI4MTQsIDB4NzAwZSwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhMDZiLAotCTB4MDE1NiwgMHgwODBjLCAweDlkM2UsIDB4NzAwMywgMHgwMjAwLCAweDA4MGMsIDB4ODlhOSwgMHgyMGE5LAotCTB4MDAwNiwgMHgyMDExLCAweGZmZWMsIDB4MjAxOSwgMHhmZmVkLCAweDllZjAsIDB4MDAwMiwgMHgyMzA1LAotCTB4MjA3MiwgMHg4ZTcwLCAweDIyMDUsIDB4MjA3MiwgMHg4ZTcwLCAweDkzOTgsIDB4MDAwMiwgMHg5MjkwLAotCTB4MDAwMiwgMHgxZjA0LCAweGEyN2YsIDB4NjBjMywgMHgwMDFjLCAweDAxNWUsIDB4MDgwNCwgMHhhMDZiLAotCTB4MDAxNiwgMHgwMDI2LCAweDA4MGMsIDB4OWQxYSwgMHgwODBjLCAweDlkMmMsIDB4OWU4MCwgMHgwMDA0LAotCTB4MjBlOSwgMHgwMDAwLCAweDIwYTAsIDB4NzgxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LAotCTB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDIxLCAweDIwOTgsIDB4MDA5ZSwgMHg3ODA4LAotCTB4OTA4OCwgMHgwMDAyLCAweDIxYTgsIDB4OTE5MiwgMHgwMDEwLCAweDEyNTAsIDB4NDAwMywgMHg5MDgwLAotCTB4MDAwNCwgMHg4MDAzLCAweDYwYzIsIDB4MDgwYywgMHhhMDZiLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MjBhOSwgMHgwMDEwLCAweDQwMDMsIDB4MDgwYywgMHhhOGQ3LCAweDIwYTEsIDB4MDI0MCwgMHgyMmE4LAotCTB4NDAwMywgMHgwYzY4LCAweDA4MGMsIDB4OWNmMywgMHg3MDAzLCAweDYyMDAsIDB4NzgwOCwgMHg3MDBlLAotCTB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4YTA2YiwgMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg5Y2YzLAotCTB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI0YywgMHg3ODE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODAwLAotCTB4MjA0OCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMjMsIDB4MjA5OCwgMHgwMDllLAotCTB4NzgwOCwgMHg5MDg4LCAweDAwMDIsIDB4MjFhOCwgMHg0MDAzLCAweDgwMDMsIDB4NjBjMiwgMHgwODBjLAotCTB4YTA2YiwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDAwNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOSwgMHg3MDEwLCAweDIwNjAsIDB4OGNmZiwgMHgwMTg4LAotCTB4MDgwYywgMHhjZTRhLCAweDExMTAsIDB4MDgwYywgMHhiOTNjLCAweDYwMGMsIDB4MDAwNiwgMHgwODBjLAotCTB4ZDBjNiwgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHhhZjRlLCAweDA4MGMsIDB4YTQ1OCwgMHgwMGNlLAotCTB4MGM2OCwgMHgyYzAwLCAweDcwMTIsIDB4NzAwZSwgMHgwMTJlLCAweDAwMGUsIDB4MDBjZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgwMTI2LCAweDAxNTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDY2LAotCTB4MDAyNiwgMHgwMDE2LCAweDAwMDYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLAotCTB4OTE4YywgMHhlN2ZmLCAweDIxMDIsIDB4MjA2OSwgMHgwMTAwLCAweDIwNzksIDB4MDE0MCwgMHgyMDcxLAotCTB4MTllOSwgMHg3MDMwLCAweDIwNjAsIDB4OGNmZiwgMHgwNTQ4LCAweDA4MGMsIDB4YTA5YiwgMHg2YWMwLAotCTB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4ODhlNCwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHgwODBjLAotCTB4YWEyOCwgMHgwMGNlLCAweDIwYTksIDB4MDFmNCwgMHgwNGIxLCAweDA4MGMsIDB4OTdmNiwgMHg2MDQ0LAotCTB4ZDBhYywgMHgxMTI4LCAweDIwMDEsIDB4MTk4OSwgMHgyMDA0LCAweDYwNGEsIDB4MDAyMCwgMHgyMDA5LAotCTB4MDAxMywgMHgwODBjLCAweGFmZWMsIDB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MjAwMSwgMHgxODAwLAotCTB4MjAwNCwgMHg5MDk2LCAweDAwMDEsIDB4MGQ3OCwgMHg5MDk2LCAweDAwMDQsIDB4MGQ2MCwgMHgwODBjLAotCTB4ODhlNCwgMHg2ODE0LCAweDkwODQsIDB4MDAwMSwgMHgwMTEwLCAweDY4YTcsIDB4OTVmNSwgMHg2ODE3LAotCTB4MDAwOCwgMHg2OGMzLCAweDAwMDAsIDB4MjAxMSwgMHg1ZmRkLCAweDA4MGMsIDB4ODgyYywgMHgyMGE5LAotCTB4MDFmNCwgMHgwMDA5LCAweDA4YzAsIDB4NjgyNCwgMHhkMDk0LCAweDAxNDAsIDB4NjgyNywgMHgwMDA0LAotCTB4NzgwNCwgMHg5MDg0LCAweDQwMDAsIDB4MTkwYywgMHgyYWIyLCAweDAwOTAsIDB4ZDA4NCwgMHgwMTE4LAotCTB4NjgyNywgMHgwMDAxLCAweDAwMTAsIDB4MWYwNCwgMHhhMzczLCAweDc4MDQsIDB4OTA4NCwgMHgxMDAwLAotCTB4MDEzOCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyYWEyLCAweDkwMDYsIDB4MDgwYywgMHgyYWEyLAotCTB4MDAwNSwgMHgwMTI2LCAweDAxNTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDY2LAotCTB4MDAyNiwgMHgwMDE2LCAweDAwMDYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLAotCTB4OTE4YywgMHhkYmZmLCAweDIxMDIsIDB4MjA2OSwgMHgwMTAwLCAweDIwNzksIDB4MDE0MCwgMHgyMDcxLAotCTB4MDM4MCwgMHg3MDFjLCAweDAwMDYsIDB4NzAxZiwgMHgwMjAyLCAweDIwNzEsIDB4MTllOSwgMHg3MDRjLAotCTB4MjA2MCwgMHg4Y2ZmLCAweDA5MDQsIDB4YTQxNCwgMHgwODBjLCAweGFkNzAsIDB4MDkwNCwgMHhhNDE0LAotCTB4OTM4NiwgMHgwMDAyLCAweDExMjgsIDB4NjgxNCwgMHg5MDg0LCAweDAwMDIsIDB4MDkwNCwgMHhhNDE0LAotCTB4NjhhZiwgMHg5NWY1LCAweDY4MTcsIDB4MDAxMCwgMHgyMDA5LCAweDAwZmEsIDB4ODEwOSwgMHgxZGYwLAotCTB4NjljNiwgMHg2OGNiLCAweDAwMDgsIDB4MDgwYywgMHg4OGYxLCAweDA4MGMsIDB4MWU2MSwgMHgyMDAxLAotCTB4MDAzMiwgMHg2OTIwLCAweGQxYmMsIDB4MDEzMCwgMHg4MDAxLCAweDFkZDgsIDB4NjkyYywgMHg5MThkLAotCTB4MDAwOCwgMHg2OTJlLCAweDAwMTYsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIzZCwgMHgwMDFlLAotCTB4MjBhOSwgMHgwM2U4LCAweDY4MjQsIDB4ZDA5NCwgMHgwMTQwLCAweDY4MjcsIDB4MDAwNCwgMHg3ODA0LAotCTB4OTA4NCwgMHg0MDAwLCAweDE5MGMsIDB4MmFiMiwgMHgwMDkwLCAweGQwOGMsIDB4MDExOCwgMHg2ODI3LAotCTB4MDAwMiwgMHgwMDEwLCAweDFmMDQsIDB4YTNlMiwgMHg3ODA0LCAweDkwODQsIDB4MTAwMCwgMHgwMTM4LAotCTB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmFhMiwgMHg5MDA2LCAweDA4MGMsIDB4MmFhMiwgMHg2ODI3LAotCTB4NDAwMCwgMHg2ODI0LCAweDgzZmYsIDB4MTE4MCwgMHgyMDA5LCAweDAwNDksIDB4NjAyMCwgMHg5MDg2LAotCTB4MDAwOSwgMHgwMTUwLCAweDA4MGMsIDB4OTg1MSwgMHg2MDQ0LCAweGQwYWMsIDB4MTExOCwgMHg2MDAzLAotCTB4MDAwMiwgMHgwMDEwLCAweDA4MGMsIDB4YWZlYywgMHgwMDBlLCAweDIwNzEsIDB4MDM4MCwgMHhkMDhjLAotCTB4MTExMCwgMHg3MDFmLCAweDAyMDAsIDB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLAotCTB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNjksIDB4MTllOSwgMHg2YTA2LCAweDAxMmUsIDB4MDBkZSwgMHgwMDA1LAotCTB4MDBkNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LCAweDE5ZTksIDB4NmEzZSwgMHgwMTJlLAotCTB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4OWU0YiwgMHg3MDQ3LCAweDEwMDAsIDB4MDA5OCwgMHgwODBjLAotCTB4OWU0YiwgMHg3MDQ3LCAweDQwMDAsIDB4MDA3MCwgMHgwODBjLCAweDllNGIsIDB4NzA0NywgMHgyMDAwLAotCTB4MDA0OCwgMHgwODBjLCAweDllNGIsIDB4NzA0NywgMHgwNDAwLCAweDAwMjAsIDB4MDgwYywgMHg5ZTRiLAotCTB4NzA0NywgMHgwMjAwLCAweDc4NWMsIDB4NzAzMiwgMHg2MGMzLCAweDAwMjAsIDB4MDgwNCwgMHhhMDZiLAotCTB4MDBlNiwgMHgyMDcxLCAweDE5ZTksIDB4NzAyYywgMHg5MDA1LCAweDAxMTAsIDB4ODAwMSwgMHg3MDJlLAotCTB4MDBlZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA3NiwgMHgwMDY2LAotCTB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE5ZTksIDB4NzYyMCwgMHgyNjYwLAotCTB4MjY3OCwgMHgyMDM5LCAweDAwMDEsIDB4ODdmZiwgMHgwOTA0LCAweGE0ZmQsIDB4OGNmZiwgMHgwOTA0LAotCTB4YTRmZCwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxOTA0LCAweGE0ZjgsIDB4ODhmZiwgMHgwMTM4LAotCTB4MjgwMCwgMHg5YzA2LCAweDE5MDQsIDB4YTRmOCwgMHgyMDM5LCAweDAwMDAsIDB4MDA1MCwgMHg2MDEwLAotCTB4OWIwNiwgMHgxOTA0LCAweGE0ZjgsIDB4ODVmZiwgMHgwMTIwLCAweDYwNWMsIDB4OTEwNiwgMHgxOTA0LAotCTB4YTRmOCwgMHg3MDMwLCAweDljMDYsIDB4MTViMCwgMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHg5MDA1LAotCTB4MTE2MCwgMHg2ODI0LCAweGQwODQsIDB4MDE0OCwgMHg2ODI3LCAweDAwMDEsIDB4MDgwYywgMHg4OGU0LAotCTB4MDgwYywgMHhhNTg1LCAweDcwMzMsIDB4MDAwMCwgMHgwNDI4LCAweDA4MGMsIDB4ODhlNCwgMHg2ODIwLAotCTB4ZDBiNCwgMHgwMTEwLCAweDY4YTcsIDB4OTVmNSwgMHg2ODE3LCAweDAwMDgsIDB4NjhjMywgMHgwMDAwLAotCTB4MDgwYywgMHhhNTg1LCAweDcwMzMsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LAotCTB4OTM4NCwgMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmFhMiwgMHg5MDA2LAotCTB4MDgwYywgMHgyYWEyLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LAotCTB4MDAwMSwgMHgwMDNlLCAweDcwMjAsIDB4OWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYyMiwgMHg3MDFjLAotCTB4OWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4OWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAxZSwgMHgwMDEwLAotCTB4NzAxZiwgMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLAotCTB4MDAwOCwgMHgyNjc4LCAweDg5ZmYsIDB4MTE2OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAxNCwgMHgwMDk2LAotCTB4MjA0OCwgMHgwODBjLCAweGNjMzEsIDB4MDExMCwgMHgwODBjLCAweGU3MzgsIDB4MDA5ZSwgMHgwODBjLAotCTB4YWY4OSwgMHgwODBjLCAweGE0NTgsIDB4ODhmZiwgMHgxMTkwLCAweDAwY2UsIDB4MDgwNCwgMHhhNDczLAotCTB4MmM3OCwgMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHhhNDczLCAweDkwMDYsIDB4MDEyZSwgMHgwMDBlLAotCTB4MDA2ZSwgMHgwMDdlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDFiLAotCTB4MDAwMCwgMHgwMGNlLCAweDk4YzUsIDB4MDAwMSwgMHgwYzg4LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LAotCTB4MDA5NiwgMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA3MSwgMHgxOWU5LCAweDc2NDgsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHhhNTc0LAotCTB4NjAyMCwgMHg5MDg2LCAweDAwMDYsIDB4MTkwNCwgMHhhNTZmLCAweDg3ZmYsIDB4MDEyOCwgMHgyNzAwLAotCTB4OWMwNiwgMHgxOTA0LCAweGE1NmYsIDB4MDA0OCwgMHg2MDEwLCAweDliMDYsIDB4MTkwNCwgMHhhNTZmLAotCTB4ODVmZiwgMHgwMTE4LCAweDYwNWMsIDB4OTEwNiwgMHgxNWQwLCAweDcwNGMsIDB4OWMwNiwgMHgxMTc4LAotCTB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhMzkxLCAweDcwM2YsIDB4MDAwMCwgMHg5MDA2LAotCTB4NzA0ZSwgMHg3MDZhLCAweDcwNTIsIDB4NzA2ZSwgMHgwODBjLCAweGFkZTAsIDB4MDAzZSwgMHg3MDQ4LAotCTB4OWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzY0YSwgMHg3MDQ0LCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLAotCTB4OWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzA0NiwgMHgwMDEwLCAweDcwNDcsIDB4MDAwMCwgMHg2NjBjLAotCTB4MDA2NiwgMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLAotCTB4MDAwMCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMxLCAweDAxMTAsIDB4MDgwYywgMHhlNzM4LAotCTB4MDgwYywgMHhhZjg5LCAweDg3ZmYsIDB4MTE5OCwgMHgwMGNlLCAweDA4MDQsIDB4YTUxZCwgMHgyYzc4LAotCTB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4YTUxZCwgMHg5MDA2LCAweDAxMmUsIDB4MDAwZSwgMHgwMDJlLAotCTB4MDA2ZSwgMHgwMGNlLCAweDAwOWUsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDFiLAotCTB4MDAwMCwgMHgwMGNlLCAweDk3YmQsIDB4MDAwMSwgMHgwYzgwLCAweDAwZTYsIDB4MjA3MSwgMHgxOWU5LAotCTB4OTAwNiwgMHg3MDMyLCAweDcwMGEsIDB4NzAwNCwgMHg5MDg2LCAweDAwMDMsIDB4MDE1OCwgMHgyMDAxLAotCTB4MTgwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwMiwgMHgxMTE4LCAweDcwMDcsIDB4MDAwNSwgMHgwMDEwLAotCTB4NzAwNywgMHgwMDAwLCAweDAwZWUsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgwMDY2LAotCTB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOSwgMHgyYzEwLAotCTB4NzY0OCwgMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwNTQwLCAweDIyMDAsIDB4OWMwNiwgMHgxNTA4LAotCTB4NzA0OCwgMHg5YzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjRhLCAweDcwNDQsIDB4OWMzNiwgMHgxMTQwLAotCTB4MmMwMCwgMHg5ZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDQ2LCAweDAwMTAsIDB4NzA0NywgMHgwMDAwLAotCTB4NjYwYywgMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLAotCTB4MDAwMCwgMHg2MDA0LCAweDkwODYsIDB4MDA0MCwgMHgwOTBjLCAweDk3ZjYsIDB4OTA4NSwgMHgwMDAxLAotCTB4MDAyMCwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwOGIwLCAweDAxMmUsIDB4MDAwZSwgMHgwMDJlLAotCTB4MDA2ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwOTYsIDB4MDBmNiwgMHgwMGU2LAotCTB4MDBkNiwgMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MjA3MSwgMHgxOWU5LCAweDc2MTAsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHhhNjcyLAotCTB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjhhMCwgMHgwMGJlLCAweDkyMDYsIDB4MTkwNCwgMHhhNjZkLAotCTB4NzAzMCwgMHg5YzA2LCAweDE1MjAsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4OTAwNSwgMHgwOTA0LAotCTB4YTY0NCwgMHgwODBjLCAweGEwOWIsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YTU4NSwgMHg3MDMzLAorCTB4YjhhMCwgMHgyMDI4LCAweDc2ZGMsIDB4ZDZhYywgMHgxMTY4LCAweDk1ODIsIDB4MDA3ZSwgMHgxMjUwLAorCTB4MjUwMCwgMHg5MDk0LCAweGZmODAsIDB4MTEzMCwgMHg5MDgwLCAweDM0OGUsIDB4MjAxNSwgMHg5Mjk0LAorCTB4MDBmZiwgMHgwMDIwLCAweGI5MTAsIDB4YmExNCwgMHg3MzdjLCAweDc0ODAsIDB4NzBkYywgMHhkMGFjLAorCTB4MTEzMCwgMHg5NTgyLCAweDAwN2UsIDB4MTIxOCwgMHg5NTg0LCAweGZmODAsIDB4MDEzOCwgMHg5MTg1LAorCTB4MDQwMCwgMHg2MDYyLCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDAwMzAsIDB4NjA2MywgMHgwNDAwLAorCTB4NjI2NiwgMHg2MDZiLCAweDAwMDAsIDB4NjE2ZSwgMHhiOGI4LCAweDYwNzIsIDB4NjA3NywgMHgwMDAwLAorCTB4Yjg2NCwgMHhkMGE0LCAweDAxMTAsIDB4NjA3NywgMHgwMDA4LCAweGI4OGMsIDB4ODAwMCwgMHg5MDg0LAorCTB4MDBmZiwgMHhiODhlLCAweDgwMDcsIDB4OTA4NSwgMHgwMDIwLCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLAorCTB4MmIwMCwgMHg2MDgyLCAweDYwODcsIDB4ZmZmZiwgMHg3ODE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODQ4LAorCTB4NjA4YSwgMHhhODQ0LCAweDYwOGUsIDB4YTgzOCwgMHg2MGM2LCAweGE4MzQsIDB4NjBjYSwgMHgwMDllLAorCTB4Yjg2YywgMHg2MGNlLCAweDYwYWIsIDB4MDAzNiwgMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLAorCTB4YmE4NCwgMHg2MjllLCAweDAwZjYsIDB4MjA3OSwgMHgwMTQwLCAweDc4MDMsIDB4MDAwMCwgMHgwMGZlLAorCTB4OTAwZSwgMHgyMDExLCAweDAwOTIsIDB4MDgwYywgMHgyYWUyLCAweDIwMDksIDB4MDdkMCwgMHgwODBjLAorCTB4OGE1MCwgMHgwMDNlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLAorCTB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDU2LAorCTB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweDE4MDAsIDB4NzgxMCwgMHgyMDU4LAorCTB4YjhhMCwgMHgyMDI4LCAweGI5MTAsIDB4YmExNCwgMHg3MzdjLCAweDc0ODAsIDB4NzgyMCwgMHgwMDAyLAorCTB4YTFlZiwgMHhhMWVmLCAweGExZWYsIDB4YTFlZiwgMHhhMWVmLCAweGExZWYsIDB4YTFlZiwgMHhhMWVmLAorCTB4YTFlZiwgMHhhMWVmLCAweGExZjEsIDB4YTFlZiwgMHhhMWVmLCAweGExZWYsIDB4YTFlZiwgMHgwODBjLAorCTB4MGQ4NSwgMHhiODg0LCAweDYwOWUsIDB4NzgxNCwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBmYywgMHgwNTU4LAorCTB4YWY5MCwgMHg5Nzg0LCAweGZmMDAsIDB4OTEwNSwgMHg2MDYyLCAweDg3M2YsIDB4OTc4NCwgMHhmZjAwLAorCTB4MDAwNiwgMHg3ODE0LCAweDIwNDgsIDB4YTg3OCwgMHhjMGZjLCAweDkwMDUsIDB4MDAwZSwgMHgxMTYwLAorCTB4YWY5NCwgMHg4N2ZmLCAweDAxOTgsIDB4MjAzOSwgMHgwMDk4LCAweDk3MDUsIDB4NjA3MiwgMHg3ODA4LAorCTB4NjA4MiwgMHgyZjAwLCAweDYwODYsIDB4MDAzOCwgMHg5MTg1LCAweDIyMDAsIDB4NjA2MiwgMHg2MDczLAorCTB4MDEyOSwgMHg2MDc3LCAweDAwMDAsIDB4Yjg4NCwgMHg2MDllLCAweDAwNTAsIDB4MjAzOSwgMHgwMDI5LAorCTB4OTcwNSwgMHg2MDcyLCAweDBjYzAsIDB4OTE4NSwgMHgwMjAwLCAweDYwNjIsIDB4NjA3MywgMHgyMDI5LAorCTB4YTg3YywgMHhkMGZjLCAweDAxMTgsIDB4YWY5NCwgMHg4N2ZmLCAweDExMjAsIDB4MmYwMCwgMHg2MDgyLAorCTB4NzgwOCwgMHg2MDg2LCAweDYyNjYsIDB4NjM2YSwgMHg2NDZlLCAweDYwNzcsIDB4MDAwMCwgMHhiODhjLAorCTB4ODAwMCwgMHg5MDg0LCAweDAwZmYsIDB4Yjg4ZSwgMHg4MDA3LCAweDYwN2EsIDB4NjA3ZiwgMHgwMDAwLAorCTB4YTg0OCwgMHg2MDhhLCAweGE4NDQsIDB4NjA4ZSwgMHhhODM4LCAweDYwYzYsIDB4YTgzNCwgMHg2MGNhLAorCTB4Yjg2YywgMHg2MGNlLCAweDYwYWYsIDB4OTVkNSwgMHg2MGQ3LCAweDAwMDAsIDB4MDgwYywgMHhhYWQxLAorCTB4MjAwOSwgMHgwN2QwLCAweDYwYzQsIDB4OTA4NCwgMHhmZmYwLCAweDkwMDUsIDB4MDExMCwgMHgyMDA5LAorCTB4MWI1OCwgMHgwODBjLCAweDhhNTAsIDB4MDAzZSwgMHgwMDRlLCAweDAwNWUsIDB4MDBjZSwgMHgwMGRlLAorCTB4MDBlZSwgMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHg3YTQwLCAweDkyOTQsIDB4MDBmZiwgMHg4MjE3LAorCTB4MDAwNSwgMHgwMGQ2LCAweDIwNjksIDB4MTllOCwgMHg2ODZiLCAweDAwMDEsIDB4MDBkZSwgMHgwMDA1LAorCTB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwMGYxLCAweDA4MGMsIDB4OGE0MiwgMHgwMDA1LAorCTB4MDAxNiwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHg5MTg0LCAweDA2MDAsIDB4OTA4NiwgMHgwNjAwLAorCTB4MDEyOCwgMHgwMDg5LCAweDA4MGMsIDB4OGE0MiwgMHgwMDFlLCAweDAwMDUsIDB4YzFlNSwgMHgyMDAxLAorCTB4MTgwYywgMHgyMTAyLCAweDIwMDEsIDB4MTllOSwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgxOWY0LAorCTB4MjAwMywgMHgwMDAwLCAweDBjODgsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MjAwOSwgMHgxODA0LAorCTB4MjAxMSwgMHgwMDA5LCAweDA4MGMsIDB4MmFlMiwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LAorCTB4MDAxNiwgMHgwMGM2LCAweDAwMDYsIDB4MDgwYywgMHhhY2ZjLCAweDAxMDYsIDB4MjA2MSwgMHgwMTAwLAorCTB4NjFhNCwgMHg2MGE3LCAweDk1ZjUsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDksIDB4MTgwNCwgMHgyMDExLAorCTB4MDAwOCwgMHgwODBjLCAweDJhZTIsIDB4MDAyZSwgMHgwMDFlLCAweDAxMGUsIDB4MDkwYywgMHhhZDE4LAorCTB4MDAwZSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHg2MWE2LCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LAorCTB4MDBjNiwgMHgwMGQ2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLAorCTB4MDgwYywgMHg3NzllLCAweDE1MTAsIDB4MjAwMSwgMHgxYTBkLCAweDIwMDQsIDB4OTAwNSwgMHgxOTA0LAorCTB4YTMxZiwgMHgwODBjLCAweDc4NDAsIDB4MTFhOCwgMHgyMDY5LCAweDAzODAsIDB4Njg0MywgMHgwMTAxLAorCTB4Njg0NCwgMHhkMDg0LCAweDFkZTgsIDB4MjA2MSwgMHgwMTAwLCAweDYwMjAsIDB4ZDBiNCwgMHgxMTIwLAorCTB4NjAyNCwgMHhkMDg0LCAweDA5MGMsIDB4MGQ4NSwgMHg2ODQzLCAweDAxMDAsIDB4MDgwYywgMHg4YTQyLAorCTB4MDRiMCwgMHgwMGM2LCAweDIwNjEsIDB4MTllOCwgMHgwMGYwLCAweDY5MDQsIDB4OTE5NCwgMHg0MDAwLAorCTB4MDU5OCwgMHgwODBjLCAweGEyYTAsIDB4MDgwYywgMHgyYWE5LCAweDAwYzYsIDB4MjA2MSwgMHgxOWU4LAorCTB4NjEzNCwgMHg5MTkyLCAweDAwMDgsIDB4MTI3OCwgMHg4MTA4LCAweDYxMzYsIDB4MDgwYywgMHhhY2ZjLAorCTB4NjEzMCwgMHgwODBjLCAweGFkMTgsIDB4MDBjZSwgMHg4MWZmLCAweDAxYzgsIDB4MDgwYywgMHg4YTQyLAorCTB4MDgwYywgMHhhMjkzLCAweDAwYTAsIDB4MDgwYywgMHhhY2ZjLCAweDYxMzAsIDB4OTFlNSwgMHgwMDAwLAorCTB4MDE1MCwgMHgwODBjLCAweGVlZWUsIDB4MDgwYywgMHg4YTRiLCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LAorCTB4MDAxNCwgMHgwODBjLCAweGIyMGEsIDB4MDgwYywgMHhhZDE4LCAweDAwY2UsIDB4MDAwMCwgMHgwMDJlLAorCTB4MDAxZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgyMDAxLCAweDFhMGQsIDB4MjAwNCwgMHg5MDA1LAorCTB4MWRiMCwgMHgwMGM2LCAweDIwNjEsIDB4MTllOCwgMHg2MTM0LCAweDkxOTIsIDB4MDAwMywgMHgxYWQ4LAorCTB4ODEwOCwgMHg2MTM2LCAweDAwY2UsIDB4MDgwYywgMHg4YTQyLCAweDA4MGMsIDB4NjA1OCwgMHgyMDA5LAorCTB4MTg0NiwgMHgyMTE0LCAweDgyMTAsIDB4MjIwYSwgMHgwYzEwLCAweDAwOTYsIDB4MDBjNiwgMHgwMGQ2LAorCTB4MDBlNiwgMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg4YTU4LCAweDA4MGMsIDB4YWNmYywgMHgyMDAxLAorCTB4MDM4NywgMHgyMDAzLCAweDAyMDIsIDB4MjA3MSwgMHgxOWU4LCAweDcxNGMsIDB4ODFmZiwgMHgwOTA0LAorCTB4YTNkOSwgMHgyMDYxLCAweDAxMDAsIDB4MjA2OSwgMHgwMTQwLCAweDA4MGMsIDB4Nzc5ZSwgMHgxNTE4LAorCTB4MDAzNiwgMHgyMDE5LCAweDAwMDIsIDB4MDgwYywgMHhhNTk2LCAweDAwM2UsIDB4MDgwYywgMHhlZWVlLAorCTB4NzA0YywgMHg5MDY1LCAweDAxODAsIDB4MjAwOSwgMHgwMDRhLCAweDYyMjAsIDB4OTI5NiwgMHgwMDA5LAorCTB4MTEzMCwgMHg2MTE0LCAweDIxNDgsIDB4YTg3YiwgMHgwMDA2LCAweDIwMDksIDB4MDA0YSwgMHg2MDAzLAorCTB4MDAwMywgMHgwODBjLCAweGIyMGEsIDB4MjAwMSwgMHgwMzg2LCAweDIwMDMsIDB4NTA0MCwgMHgwODBjLAorCTB4Nzg0MCwgMHgwODA0LCAweGEzZDksIDB4NjkwNCwgMHhkMWY0LCAweDA5MDQsIDB4YTNlNiwgMHgwODBjLAorCTB4MmFhOSwgMHgwMGM2LCAweDcwNGMsIDB4OTA2NSwgMHgwOTBjLCAweDBkODUsIDB4NjAyMCwgMHgwMGNlLAorCTB4OTA4NiwgMHgwMDA2LCAweDE1MjAsIDB4NjFjOCwgMHg2MGM0LCAweDkxMDUsIDB4MTUwMCwgMHg3MTRjLAorCTB4OTE4OCwgMHgwMDExLCAweDIxMDQsIDB4ZDBlNCwgMHgwMWQwLCAweDYyMTQsIDB4OTI5NCwgMHgxODAwLAorCTB4MTEyOCwgMHg2MjI0LCAweDkyOTQsIDB4MDAwMiwgMHgxNWUwLCAweDAwMTAsIDB4YzBlNCwgMHgyMDBhLAorCTB4NjAxNCwgMHg5MDg0LCAweGU3ZmQsIDB4OTA4NSwgMHgwMDEwLCAweDYwMTYsIDB4NzA0YywgMHgyMDYwLAorCTB4MDgwYywgMHg5YTQ4LCAweDIwMDksIDB4MDA0OSwgMHgwODBjLCAweGIyMGEsIDB4MDQ1MCwgMHgwODBjLAorCTB4ZWVlZSwgMHg3MDRjLCAweDkwNjUsIDB4OTA4NiwgMHgxYjU1LCAweDExNTgsIDB4MDgwYywgMHhhZmQyLAorCTB4MTUwMCwgMHgyMDYxLCAweDFiNTUsIDB4NjA2NCwgMHg4MDAwLCAweDYwNjYsIDB4MDgwYywgMHg2MDU4LAorCTB4MDBjMCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGE1OTYsIDB4MDAzZSwgMHg3MTRjLAorCTB4MjE2MCwgMHgyMDA5LCAweDAwNGEsIDB4NjIyMCwgMHg5Mjk2LCAweDAwMDksIDB4MTEzMCwgMHg2MTE0LAorCTB4MjE0OCwgMHhhODdiLCAweDAwMDYsIDB4MjAwOSwgMHgwMDRhLCAweDYwMDMsIDB4MDAwMywgMHgwODBjLAorCTB4YjIwYSwgMHgyMDAxLCAweDAzODcsIDB4MjAwMywgMHgwMjAwLCAweDA4MGMsIDB4YWQxOCwgMHgwMDJlLAorCTB4MDAxZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDllLCAweDAwMDUsIDB4ZDFlYywgMHgxOTA0LAorCTB4YTM3ZiwgMHgwODA0LCAweGEzODEsIDB4MDAyNiwgMHgwMGU2LCAweDIwNzEsIDB4MTllOCwgMHg3MDZjLAorCTB4ZDA4NCwgMHgwMWU4LCAweGMwODQsIDB4NzA2ZSwgMHg3MTRjLCAweDgxZmYsIDB4MDFjMCwgMHgyMDcxLAorCTB4MDEwMCwgMHg5MTg4LCAweDAwMDgsIDB4MjExNCwgMHg5MjhlLCAweDAwMDYsIDB4MTEzOCwgMHgyMDA5LAorCTB4MTk4NCwgMHgyMDExLCAweDAwMTIsIDB4MDgwYywgMHgyYWUyLCAweDAwNDgsIDB4OTI4ZSwgMHgwMDA5LAorCTB4MGRiMCwgMHgyMDA5LCAweDE5ODQsIDB4MjAxMSwgMHgwMDE2LCAweDA4MGMsIDB4MmFlMiwgMHgwMGVlLAorCTB4MDAyZSwgMHgwMDA1LCAweDkwMzYsIDB4MjAwMSwgMHgxOWYyLCAweDIwMDQsIDB4OTAwNSwgMHgwMTI4LAorCTB4OWMwNiwgMHgwMTI4LCAweDJjMzAsIDB4NjAwYywgMHgwY2M4LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LAorCTB4MDBmNiwgMHgyMDc5LCAweDE5ZTgsIDB4NjEwYywgMHg5MDA2LCAweDYwMGUsIDB4NjA0NCwgMHhjMGZjLAorCTB4NjA0NiwgMHg4NmZmLCAweDExNDAsIDB4NzgyNCwgMHg5YzA2LCAweDExMTgsIDB4NzgyNiwgMHg3ODJhLAorCTB4MDA1MCwgMHg3OTJhLCAweDAwNDAsIDB4MDBjNiwgMHgyNjYwLCAweDYxMGUsIDB4MDBjZSwgMHg3ODI0LAorCTB4OWMwNiwgMHgxMTA4LCAweDdlMjYsIDB4MDgwYywgMHhhNjVkLCAweDA4MGMsIDB4ZDEwYywgMHgwMGZlLAorCTB4MDAwNSwgMHgwODBjLCAweDllZjgsIDB4NzAwMywgMHgxMjAwLCAweDc4MzgsIDB4NzAxMiwgMHg3ODNjLAorCTB4NzAxNiwgMHgwMGM2LCAweDc4MjAsIDB4OTA4NiwgMHgwMDA0LCAweDExNDgsIDB4NzgxMCwgMHg5MDA1LAorCTB4MDEzMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgxMCwgMHhiOTE0LCAweDAwYmUsIDB4MDAyMCwgMHgyMDYxLAorCTB4MTgwMCwgMHg2MDdjLCAweDYxODAsIDB4OTA4NCwgMHgwMGZmLCAweDcwMGEsIDB4NzEwZSwgMHgwMGNlLAorCTB4NjBjMywgMHgwMDJjLCAweDA4MDQsIDB4YTI3MCwgMHgwODBjLCAweDllZjgsIDB4NzAwMywgMHgwZjAwLAorCTB4NzgwOCwgMHhkMDljLCAweDAxMjgsIDB4YjgxMCwgMHg5MDg0LCAweDAwZmYsIDB4NzAwYSwgMHhiODE0LAorCTB4NzAwZSwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhMjcwLCAweDAxNTYsIDB4MDgwYywgMHg5ZjQzLAorCTB4NzAwMywgMHgwMjAwLCAweDA4MGMsIDB4OGIxMCwgMHgyMGE5LCAweDAwMDYsIDB4MjAxMSwgMHhmZmVjLAorCTB4MjAxOSwgMHhmZmVkLCAweDllZjAsIDB4MDAwMiwgMHgyMzA1LCAweDIwNzIsIDB4OGU3MCwgMHgyMjA1LAorCTB4MjA3MiwgMHg4ZTcwLCAweDkzOTgsIDB4MDAwMiwgMHg5MjkwLCAweDAwMDIsIDB4MWYwNCwgMHhhNDg0LAorCTB4NjBjMywgMHgwMDFjLCAweDAxNWUsIDB4MDgwNCwgMHhhMjcwLCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLAorCTB4OWYxZiwgMHgwODBjLCAweDlmMzEsIDB4OWU4MCwgMHgwMDA0LCAweDIwZTksIDB4MDAwMCwgMHgyMGEwLAorCTB4NzgxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLAorCTB4OTA4MCwgMHgwMDIxLCAweDIwOTgsIDB4MDA5ZSwgMHg3ODA4LCAweDkwODgsIDB4MDAwMiwgMHgyMWE4LAorCTB4OTE5MiwgMHgwMDEwLCAweDEyNTAsIDB4NDAwMywgMHg5MDgwLCAweDAwMDQsIDB4ODAwMywgMHg2MGMyLAorCTB4MDgwYywgMHhhMjcwLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDIwYTksIDB4MDAxMCwgMHg0MDAzLAorCTB4MDgwYywgMHhhYWRjLCAweDIwYTEsIDB4MDI0MCwgMHgyMmE4LCAweDQwMDMsIDB4MGM2OCwgMHgwODBjLAorCTB4OWVmOCwgMHg3MDAzLCAweDYyMDAsIDB4NzgwOCwgMHg3MDBlLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LAorCTB4YTI3MCwgMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg5ZWY4LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAorCTB4MDI0YywgMHg3ODE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODAwLCAweDIwNDgsIDB4YTg2MCwgMHgyMGUwLAorCTB4YTg1YywgMHg5MDgwLCAweDAwMjMsIDB4MjA5OCwgMHgwMDllLCAweDc4MDgsIDB4OTA4OCwgMHgwMDAyLAorCTB4MjFhOCwgMHg0MDAzLCAweDgwMDMsIDB4NjBjMiwgMHgwODBjLCAweGEyNzAsIDB4MDAyZSwgMHgwMDFlLAorCTB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAorCTB4MTllOCwgMHg3MDEwLCAweDIwNjAsIDB4OGNmZiwgMHgwMTg4LCAweDA4MGMsIDB4ZDEzMiwgMHgxMTEwLAorCTB4MDgwYywgMHhiYjVjLCAweDYwMGMsIDB4MDAwNiwgMHgwODBjLCAweGQzYWUsIDB4NjAwZiwgMHgwMDAwLAorCTB4MDgwYywgMHhiMTZjLCAweDA4MGMsIDB4YTY1ZCwgMHgwMGNlLCAweDBjNjgsIDB4MmMwMCwgMHg3MDEyLAorCTB4NzAwZSwgMHgwMTJlLCAweDAwMGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgwMTU2LAorCTB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweDkxOGMsIDB4ZTdmZiwgMHgyMTAyLAorCTB4MjA2OSwgMHgwMTAwLCAweDIwNzksIDB4MDE0MCwgMHgyMDcxLCAweDE5ZTgsIDB4NzAzMCwgMHgyMDYwLAorCTB4OGNmZiwgMHgwNTQ4LCAweDA4MGMsIDB4YTJhMCwgMHg2YWMwLCAweDY4YzMsIDB4MDAwMCwgMHgwODBjLAorCTB4OGE0YiwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHgwODBjLCAweGFjMmQsIDB4MDBjZSwgMHgyMGE5LAorCTB4MDFmNCwgMHgwNGIxLCAweDA4MGMsIDB4OTllZCwgMHg2MDQ0LCAweGQwYWMsIDB4MTEyOCwgMHgyMDAxLAorCTB4MTk4OCwgMHgyMDA0LCAweDYwNGEsIDB4MDAyMCwgMHgyMDA5LCAweDAwMTMsIDB4MDgwYywgMHhiMjBhLAorCTB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLAorCTB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA5NiwgMHgwMDAxLAorCTB4MGQ3OCwgMHg5MDk2LCAweDAwMDQsIDB4MGQ2MCwgMHgwODBjLCAweDhhNGIsIDB4NjgxNCwgMHg5MDg0LAorCTB4MDAwMSwgMHgwMTEwLCAweDY4YTcsIDB4OTVmNSwgMHg2ODE3LCAweDAwMDgsIDB4NjhjMywgMHgwMDAwLAorCTB4MjAxMSwgMHg2MDAyLCAweDA4MGMsIDB4ODk5MywgMHgyMGE5LCAweDAxZjQsIDB4MDAwOSwgMHgwOGMwLAorCTB4NjgyNCwgMHhkMDk0LCAweDAxNDAsIDB4NjgyNywgMHgwMDA0LCAweDc4MDQsIDB4OTA4NCwgMHg0MDAwLAorCTB4MTkwYywgMHgyYWE5LCAweDAwOTAsIDB4ZDA4NCwgMHgwMTE4LCAweDY4MjcsIDB4NDAwMSwgMHgwMDEwLAorCTB4MWYwNCwgMHhhNTc4LCAweDc4MDQsIDB4OTA4NCwgMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLAorCTB4MDgwYywgMHgyYTk5LCAweDkwMDYsIDB4MDgwYywgMHgyYTk5LCAweDAwMDUsIDB4MDEyNiwgMHgwMTU2LAorCTB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMjYsIDB4MDAxNiwgMHgwMDA2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweDkxOGMsIDB4ZGJmZiwgMHgyMTAyLAorCTB4MjA2OSwgMHgwMTAwLCAweDIwNzksIDB4MDE0MCwgMHgyMDcxLCAweDAzODAsIDB4NzAxYywgMHgwMDA2LAorCTB4NzAxZiwgMHgwMjAyLCAweDIwNzEsIDB4MTllOCwgMHg3MDRjLCAweDIwNjAsIDB4OGNmZiwgMHgwOTA0LAorCTB4YTYxOSwgMHgwODBjLCAweGFmODQsIDB4MDkwNCwgMHhhNjE5LCAweDkzODYsIDB4MDAwMiwgMHgxMTI4LAorCTB4NjgxNCwgMHg5MDg0LCAweDAwMDIsIDB4MDkwNCwgMHhhNjE5LCAweDY4YWYsIDB4OTVmNSwgMHg2ODE3LAorCTB4MDAxMCwgMHgyMDA5LCAweDAwZmEsIDB4ODEwOSwgMHgxZGYwLCAweDY5YzYsIDB4NjhjYiwgMHgwMDA4LAorCTB4MDgwYywgMHg4YTU4LCAweDA4MGMsIDB4MWU0NCwgMHgyMDAxLCAweDAwMzIsIDB4NjkyMCwgMHhkMWJjLAorCTB4MDEzMCwgMHg4MDAxLCAweDFkZDgsIDB4NjkyYywgMHg5MThkLCAweDAwMDgsIDB4NjkyZSwgMHgwMDE2LAorCTB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIyMCwgMHgwMDFlLCAweDIwYTksIDB4MDNlOCwgMHg2ODI0LAorCTB4ZDA5NCwgMHgwMTQwLCAweDY4MjcsIDB4MDAwNCwgMHg3ODA0LCAweDkwODQsIDB4NDAwMCwgMHgxOTBjLAorCTB4MmFhOSwgMHgwMDkwLCAweGQwOGMsIDB4MDExOCwgMHg2ODI3LCAweDAwMDIsIDB4MDAxMCwgMHgxZjA0LAorCTB4YTVlNywgMHg3ODA0LCAweDkwODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLAorCTB4MmE5OSwgMHg5MDA2LCAweDA4MGMsIDB4MmE5OSwgMHg2ODI3LCAweDQwMDAsIDB4NjgyNCwgMHg4M2ZmLAorCTB4MTE4MCwgMHgyMDA5LCAweDAwNDksIDB4NjAyMCwgMHg5MDg2LCAweDAwMDksIDB4MDE1MCwgMHgwODBjLAorCTB4OWE0OCwgMHg2MDQ0LCAweGQwYWMsIDB4MTExOCwgMHg2MDAzLCAweDAwMDIsIDB4MDAxMCwgMHgwODBjLAorCTB4YjIwYSwgMHgwMDBlLCAweDIwNzEsIDB4MDM4MCwgMHhkMDhjLCAweDExMTAsIDB4NzAxZiwgMHgwMjAwLAorCTB4MDAwZSwgMHgwMDFlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLAorCTB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDY5LAorCTB4MTllOCwgMHg2YTA2LCAweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgyMDY5LCAweDE5ZTgsIDB4NmEzZSwgMHgwMTJlLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLAorCTB4YTA1MCwgMHg3MDQ3LCAweDEwMDAsIDB4MDA5OCwgMHgwODBjLCAweGEwNTAsIDB4NzA0NywgMHg0MDAwLAorCTB4MDA3MCwgMHgwODBjLCAweGEwNTAsIDB4NzA0NywgMHgyMDAwLCAweDAwNDgsIDB4MDgwYywgMHhhMDUwLAorCTB4NzA0NywgMHgwNDAwLCAweDAwMjAsIDB4MDgwYywgMHhhMDUwLCAweDcwNDcsIDB4MDIwMCwgMHg3ODVjLAorCTB4NzAzMiwgMHg2MGMzLCAweDAwMjAsIDB4MDgwNCwgMHhhMjcwLCAweDAwZTYsIDB4MjA3MSwgMHgxOWU4LAorCTB4NzAyYywgMHg5MDA1LCAweDAxMTAsIDB4ODAwMSwgMHg3MDJlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGY2LAorCTB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA3NiwgMHgwMDY2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLAorCTB4ODAwMCwgMHgyMDcxLCAweDE5ZTgsIDB4NzYyMCwgMHgyNjYwLCAweDI2NzgsIDB4MjAzOSwgMHgwMDAxLAorCTB4ODdmZiwgMHgwOTA0LCAweGE3MDIsIDB4OGNmZiwgMHgwOTA0LCAweGE3MDIsIDB4NjAyMCwgMHg5MDg2LAorCTB4MDAwNiwgMHgxOTA0LCAweGE2ZmQsIDB4ODhmZiwgMHgwMTM4LCAweDI4MDAsIDB4OWMwNiwgMHgxOTA0LAorCTB4YTZmZCwgMHgyMDM5LCAweDAwMDAsIDB4MDA1MCwgMHg2MDEwLCAweDliMDYsIDB4MTkwNCwgMHhhNmZkLAorCTB4ODVmZiwgMHgwMTIwLCAweDYwNWMsIDB4OTEwNiwgMHgxOTA0LCAweGE2ZmQsIDB4NzAzMCwgMHg5YzA2LAorCTB4MTViMCwgMHgyMDY5LCAweDAxMDAsIDB4NjhjMCwgMHg5MDA1LCAweDExNjAsIDB4NjgyNCwgMHhkMDg0LAorCTB4MDE0OCwgMHg2ODI3LCAweDAwMDEsIDB4MDgwYywgMHg4YTRiLCAweDA4MGMsIDB4YTc4YSwgMHg3MDMzLAorCTB4MDAwMCwgMHgwNDI4LCAweDA4MGMsIDB4OGE0YiwgMHg2ODIwLCAweGQwYjQsIDB4MDExMCwgMHg2OGE3LAorCTB4OTVmNSwgMHg2ODE3LCAweDAwMDgsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YTc4YSwgMHg3MDMzLAogCTB4MDAwMCwgMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LAotCTB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmFhMiwgMHg5MDA2LCAweDA4MGMsIDB4MmFhMiwgMHgyMDY5LAotCTB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHg3MDEwLAotCTB4OWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYxMiwgMHg3MDBjLCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLAotCTB4OWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAwZSwgMHgwMDEwLCAweDcwMGYsIDB4MDAwMCwgMHg2NjBjLAotCTB4MDA2NiwgMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLAotCTB4MDAwMCwgMHgwODBjLCAweGNlMzksIDB4MTE4MCwgMHgwODBjLCAweDMzMmEsIDB4MDgwYywgMHhjZTRhLAotCTB4MTUxOCwgMHgwODBjLCAweGI5M2MsIDB4MDQwMCwgMHgwODBjLCAweGE1ODUsIDB4NjgyNCwgMHhkMDg0LAotCTB4MDliMCwgMHg2ODI3LCAweDAwMDEsIDB4MDg5OCwgMHgwODBjLCAweGNlNGEsIDB4MTExOCwgMHgwODBjLAotCTB4YjkzYywgMHgwMDkwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGNjMzEsIDB4MDE2OCwgMHg2MDIwLAotCTB4OTA4NiwgMHgwMDAzLCAweDE1MDgsIDB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLAotCTB4MDgwYywgMHg2ZjA1LCAweDA4MGMsIDB4Y2UyNCwgMHgwODBjLCAweGQwYzYsIDB4MDgwYywgMHhhZjg5LAotCTB4MDgwYywgMHhhNDU4LCAweDAwY2UsIDB4MDgwNCwgMHhhNWVkLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLAotCTB4MDgwNCwgMHhhNWVkLCAweDAxMmUsIDB4MDAwZSwgMHgwMDJlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGRlLAotCTB4MDBlZSwgMHgwMGZlLCAweDAwOWUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxZDIwLAotCTB4MDgwYywgMHhlNzM4LCAweDBjMDgsIDB4MDBkNiwgMHgwODBjLCAweDlkM2UsIDB4NzAwMywgMHgwMjAwLAotCTB4NzAwNywgMHgwMDE0LCAweDYwYzMsIDB4MDAxNCwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxOThhLAotCTB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI1MCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMywgMHg3MDIzLAotCTB4MDAwNCwgMHg3MDI3LCAweDc4NzgsIDB4MDgwYywgMHhhMDZiLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLAotCTB4OWQzZSwgMHg3MDBiLCAweDA4MDAsIDB4NzgxNCwgMHg5MDg0LCAweGZmMDAsIDB4NzAwZSwgMHg3ODE0LAotCTB4OTA4NCwgMHgwMGZmLCAweDcwMjIsIDB4NzgyYywgMHg3MDI2LCAweDc4NjAsIDB4OTA4NCwgMHgwMGZmLAotCTB4OTA4NSwgMHgwMjAwLCAweDcwMDIsIDB4Nzg2MCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg3MDA2LAotCTB4NjBjMiwgMHgwODA0LCAweGEwNmIsIDB4MDBiNiwgMHgwMGQ2LCAweDAwMTYsIDB4MDBkNiwgMHgyZjY4LAotCTB4MjAwOSwgMHgwMDM1LCAweDA4MGMsIDB4ZDJkMywgMHgwMGRlLCAweDE5MDQsIDB4YTcyMCwgMHgwODBjLAotCTB4OWNmMywgMHg3MDAzLCAweDEzMDAsIDB4NzgyYywgMHgwODBjLCAweGE4MmYsIDB4MjA2OCwgMHg2ODIwLAotCTB4OTA4NiwgMHgwMDAzLCAweDA1NjAsIDB4NzgxMCwgMHgyMDU4LCAweGJhYTAsIDB4MDgwYywgMHhhZTgwLAotCTB4MTFkOCwgMHg5Mjg2LCAweDAwN2UsIDB4MTEyOCwgMHg3MDBiLCAweDAwZmYsIDB4NzAwZiwgMHhmZmZlLAotCTB4MDQ5OCwgMHg5Mjg2LCAweDAwN2YsIDB4MTEyOCwgMHg3MDBiLCAweDAwZmYsIDB4NzAwZiwgMHhmZmZkLAotCTB4MDQ1OCwgMHg5Mjg0LCAweGZmODAsIDB4MDE4MCwgMHg5Mjg2LCAweDAwODAsIDB4MTEyOCwgMHg3MDBiLAotCTB4MDBmZiwgMHg3MDBmLCAweGZmZmMsIDB4MDQwMCwgMHg5MmQ4LCAweDEwMDAsIDB4MmI1YywgMHhiODEwLAotCTB4NzAwYSwgMHhiODE0LCAweDcwMGUsIDB4MDBjMCwgMHhiODg0LCAweDcwMGUsIDB4MDBhOCwgMHgwODBjLAotCTB4YWU4MCwgMHgxMTMwLCAweDc4MTAsIDB4MjA1OCwgMHhiOGEwLCAweDkwODIsIDB4MDA3ZSwgMHgwMjUwLAotCTB4MDBkNiwgMHgyMDY5LCAweDE4MWYsIDB4MmQwNCwgMHg3MDBhLCAweDhkNjgsIDB4MmQwNCwgMHg3MDBlLAotCTB4MDBkZSwgMHgwMDEwLCAweDYwMzQsIDB4NzAwZSwgMHg3ODM4LCAweDcwMTIsIDB4NzgzYywgMHg3MDE2LAotCTB4NjBjMywgMHgwMDBjLCAweDAwMWUsIDB4MDBkZSwgMHgwODBjLCAweGEwNmIsIDB4MDBiZSwgMHgwMDA1LAotCTB4NzgxYiwgMHgwMDAxLCAweDc4MDMsIDB4MDAwNiwgMHgwMDFlLCAweDAwZGUsIDB4MDBiZSwgMHgwMDA1LAotCTB4NzkyYywgMHg5MTgwLCAweDAwMDgsIDB4MjAwYywgMHg5MTg2LCAweDAwMDYsIDB4MDFjMCwgMHg5MTg2LAotCTB4MDAwMywgMHgwOTA0LCAweGE3OWYsIDB4OTE4NiwgMHgwMDA1LCAweDA5MDQsIDB4YTc4NywgMHg5MTg2LAotCTB4MDAwNCwgMHgwNWYwLCAweDkxODYsIDB4MDAwOCwgMHgwOTA0LCAweGE3OTAsIDB4NzgwNywgMHgwMDM3LAotCTB4NzgyZiwgMHgwMDAzLCAweDc4MTcsIDB4MTcwMCwgMHgwODBjLCAweGE4MGMsIDB4MDAwNSwgMHgwODBjLAotCTB4YTdjZCwgMHgwMGQ2LCAweDAwMjYsIDB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHg2ODAwLAotCTB4NmE0NCwgMHhkMmZjLCAweDExZjgsIDB4MDAwMiwgMHhhNzY3LCAweGE3NzIsIDB4YTc2OSwgMHhhNzcyLAotCTB4YTc2ZSwgMHhhNzY3LCAweGE3NjcsIDB4YTc3MiwgMHhhNzcyLCAweGE3NzIsIDB4YTc3MiwgMHhhNzY3LAotCTB4YTc2NywgMHhhNzY3LCAweGE3NjcsIDB4YTc2NywgMHhhNzcyLCAweGE3NjcsIDB4YTc3MiwgMHgwODBjLAotCTB4MGQ3OSwgMHg2ODI0LCAweGQwZTQsIDB4MDExMCwgMHhkMGNjLCAweDAxMTAsIDB4OTAwZSwgMHgwMDEwLAotCTB4MjAwOSwgMHgyMDAwLCAweDY4MmMsIDB4NzAyMiwgMHg2ODMwLCAweDcwMjYsIDB4MDgwNCwgMHhhN2M2LAotCTB4MDgwYywgMHhhN2NkLCAweDAwZDYsIDB4MDAyNiwgMHg3OTJjLCAweDIxNjgsIDB4MjAwOSwgMHg0MDAwLAotCTB4NmEwMCwgMHg5Mjg2LCAweDAwMDIsIDB4MTEwOCwgMHg5MDBlLCAweDA4MDQsIDB4YTdjNiwgMHgwODBjLAotCTB4YTdjZCwgMHgwMGQ2LCAweDAwMjYsIDB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHgwNGIwLAotCTB4MDRlMSwgMHgwMGQ2LCAweDAwMjYsIDB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHg5Mjg2LAotCTB4MDAwNSwgMHgwMTE4LCAweDkyODYsIDB4MDAwMiwgMHgxMTA4LCAweDkwMGUsIDB4MDQzOCwgMHgwNDY5LAotCTB4MDBkNiwgMHgwMDI2LCAweDc5MmMsIDB4MjE2OCwgMHg2ODE0LCAweDY5MjQsIDB4YzE4NSwgMHg2OTI2LAotCTB4MDA5NiwgMHgyMDQ4LCAweGE5YWMsIDB4YTgzNCwgMHg5MTEyLCAweGE5YjAsIDB4YTgzOCwgMHgwMDllLAotCTB4OTEwMywgMHg3MDIyLCAweDcyMjYsIDB4NzkyYywgMHg5MTgwLCAweDAwMTEsIDB4MjAwNCwgMHhkMGZjLAotCTB4MTE0OCwgMHg5MTgwLCAweDAwMDAsIDB4MjAwNCwgMHg5MDhlLCAweDAwMDIsIDB4MDEzMCwgMHg5MDhlLAotCTB4MDAwNCwgMHgwMTE4LCAweDIwMDksIDB4NDAwMCwgMHgwMDA4LCAweDkwMGUsIDB4NzEyYSwgMHg2MGMzLAotCTB4MDAxOCwgMHgwMDJlLCAweDAwZGUsIDB4MDgwNCwgMHhhMDZiLCAweDAwYjYsIDB4MDAzNiwgMHgwMDQ2LAotCTB4MDA1NiwgMHgwMDY2LCAweDA4MGMsIDB4OWQzZSwgMHg5MDA2LCAweDcwMDMsIDB4MDIwMCwgMHg3OTM4LAotCTB4NzEwYSwgMHg3OTNjLCAweDcxMGUsIDB4NzgxMCwgMHgyMDU4LCAweGI4YTAsIDB4MDgwYywgMHhhZTgwLAotCTB4MTExOCwgMHg5MDkyLCAweDAwN2UsIDB4MDI2OCwgMHgwMGQ2LCAweDIwNjksIDB4MTgxZiwgMHgyZDJjLAotCTB4OGQ2OCwgMHgyZDM0LCAweDkwZDgsIDB4MTAwMCwgMHgyYjVjLCAweGJiMTAsIDB4YmMxNCwgMHgwMGRlLAotCTB4MDAyOCwgMHg5MDFlLCAweGJjODQsIDB4MjAyOSwgMHgwMDAwLCAweDY2MzQsIDB4NzgyYywgMHg5MDgwLAotCTB4MDAwOCwgMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTI4LCAweDc1MTIsIDB4NzYxNiwgMHg3MzFhLAotCTB4NzQxZSwgMHgwMDIwLCAweDczMTIsIDB4NzQxNiwgMHg3NTFhLCAweDc2MWUsIDB4MDA2ZSwgMHgwMDVlLAotCTB4MDA0ZSwgMHgwMDNlLCAweDAwYmUsIDB4MDAwNSwgMHgwODBjLCAweDlkM2UsIDB4NzAwMywgMHgwMTAwLAotCTB4NzgyYywgMHg3MDBhLCAweDc4MTQsIDB4NzAwZSwgMHg3MDBlLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LAotCTB4YTA2YiwgMHgwODBjLCAweDljZWEsIDB4NzAwMywgMHgxNDAwLCAweDc4MzgsIDB4NzAwYSwgMHgwMDc5LAotCTB4NzgzYywgMHg3MDBlLCAweDc4MmMsIDB4NzAxMiwgMHg3ODMwLCAweDcwMTYsIDB4NzgzNCwgMHg5MDg0LAotCTB4MDBmZiwgMHg4MDA3LCAweDcwMWEsIDB4NjBjMywgMHgwMDEwLCAweDA4MDQsIDB4YTA2YiwgMHgwMGU2LAotCTB4MjA3MSwgMHgwMjQwLCAweDAwMDYsIDB4MDBmNiwgMHgyMDc4LCAweDc4MTAsIDB4MDBiNiwgMHgyMDU4LAotCTB4YjhkNCwgMHhkMDg0LCAweDAxMjAsIDB4Nzg0YywgMHg3MDJhLCAweDc4NTAsIDB4NzAyZSwgMHgwMGJlLAotCTB4MDBmZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgwODBjLCAweDlkMzUsIDB4NzAwMywgMHgwMTAwLAotCTB4NzgyYywgMHg3MDBhLCAweDc4MTQsIDB4NzAwZSwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhMDZiLAotCTB4MDBhOSwgMHg3OTE0LCAweDcxMmEsIDB4NjBjMywgMHgwMDAwLCAweDYwYTcsIDB4OTU3NSwgMHgwMDI2LAotCTB4MDgwYywgMHgyYTExLCAweDAyMjgsIDB4MjAxMSwgMHgwMTAxLCAweDIyMDQsIDB4YzBjNSwgMHgyMDEyLAotCTB4MDAyZSwgMHgwODBjLCAweGEwOGUsIDB4MDgwYywgMHg4OGRiLCAweDAwMDUsIDB4MDAzNiwgMHgwMDk2LAotCTB4MDBkNiwgMHgwMGU2LCAweDc4NjAsIDB4MjA0OCwgMHhhYTdjLCAweDkyOTYsIDB4MDBjMCwgMHg5Mjk0LAotCTB4MDBmZCwgMHhhYTdlLCAweGFhODAsIDB4OTI5NCwgMHgwMzAwLCAweGFhODIsIDB4YTk2YywgMHg5MTk0LAotCTB4MDBmZiwgMHhhYjc0LCAweDkzODQsIDB4MDBmZiwgMHg5MDhkLCAweGMyMDAsIDB4YTk2ZSwgMHg5Mzg0LAotCTB4ZmYwMCwgMHg5MjE1LCAweGFhNzYsIDB4YTg3MCwgMHhhYTc4LCAweGE4N2EsIDB4YWE3MiwgMHgwMGQ2LAotCTB4MjA2OSwgMHgwMjAwLCAweDA4MGMsIDB4YThlYywgMHgwMGRlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAotCTB4MDI0MCwgMHgyMGE5LCAweDAwMGEsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDFiLAotCTB4MjA5OCwgMHg0MDAzLCAweDYwYTMsIDB4MDAzNSwgMHhhYTY4LCAweDkyOTQsIDB4NzAwMCwgMHg5Mjg2LAotCTB4MzAwMCwgMHgwMTEwLCAweDYwYTMsIDB4MDAzNywgMHgwMGVlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDNlLAotCTB4MDAwNSwgMHg5MDBlLCAweDc4MTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBmYywgMHgwMWMwLAotCTB4OTA4NCwgMHgwMDAzLCAweDExYTgsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsIDB4ZDBiYywgMHgwMTgwLAotCTB4NzgyNCwgMHhkMGNjLCAweDExNjgsIDB4ZDBjNCwgMHgxMTU4LCAweGE4YTgsIDB4OTAwNSwgMHgxMTQwLAotCTB4MjAwMSwgMHgxODBjLCAweDIwMGMsIDB4YzFkNSwgMHgyMTAyLCAweDIwMDksIDB4MTliNCwgMHgyMTBjLAotCTB4MDA5ZSwgMHg5MThkLCAweDAwOTIsIDB4MDAxMCwgMHgyMDA5LCAweDAwOTYsIDB4NjBhYiwgMHgwMDM2LAotCTB4MDAyNiwgMHgyMTEwLCAweDkwMGUsIDB4MDgwYywgMHgyYWViLCAweDAwMmUsIDB4MDAwNSwgMHgyMDA5LAotCTB4MDAwOSwgMHgwMGEwLCAweDIwMDksIDB4MDAwYSwgMHgwMDg4LCAweDIwMDksIDB4MDAwYiwgMHgwMDcwLAotCTB4MjAwOSwgMHgwMDBjLCAweDAwNTgsIDB4MjAwOSwgMHgwMDBkLCAweDAwNDAsIDB4MjAwOSwgMHgwMDBlLAotCTB4MDAyOCwgMHgyMDA5LCAweDAwMGYsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDgsIDB4NjkxMiwgMHgwMDA1LAotCTB4MDgwYywgMHg5Y2YzLCAweDAwMTYsIDB4MDAyNiwgMHgwMDk2LCAweDAwZDYsIDB4NzgxNCwgMHgyMDQ4LAotCTB4NzAxMywgMHgwMTM4LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweDkwODQsIDB4MDAyOCwgMHgxMTM4LAotCTB4MjAwMSwgMHgxOTdkLCAweDIwMDQsIDB4OTA4NiwgMHhhYWFhLCAweDE5MDQsIDB4YTk5MSwgMHg3MDAzLAotCTB4NTQwMCwgMHgwMGM2LCAweDIwNjEsIDB4MTgwMCwgMHg2MDdjLCAweDkwODQsIDB4MDBmZiwgMHhhOTk4LAotCTB4ODEwZiwgMHg5MThjLCAweGZmMDAsIDB4OTEwNSwgMHg3MDBhLCAweDYwODAsIDB4NzAwZSwgMHhhOTk4LAotCTB4OTE4YywgMHhmZjAwLCAweDcxMTIsIDB4MjBhOSwgMHgwMDA0LCAweDIwMDksIDB4MTgwNSwgMHgyZTEwLAotCTB4OTI5MCwgMHgwMDA2LCAweDIxMDQsIDB4MjAxMiwgMHg4MTA4LCAweDgyMTAsIDB4MWYwNCwgMHhhOTIyLAotCTB4MjBhOSwgMHgwMDA0LCAweDIwMDksIDB4MTgwMSwgMHgyMTA0LCAweDIwMTIsIDB4ODEwOCwgMHg4MjEwLAotCTB4MWYwNCwgMHhhOTJjLCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsIDB4MDAyOSwgMHgyMDk4LAotCTB4MjAwOSwgMHgwMDA2LCAweDIwYTksIDB4MDAwMSwgMHg0MDAyLCAweDgwMDcsIDB4MjAxMiwgMHg4MjEwLAotCTB4ODEwOSwgMHgxZGMwLCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsIDB4YThkNywgMHgwMGRlLAotCTB4MjA3MSwgMHgwMjQwLCAweDIwMTEsIDB4MDI0MCwgMHgyMDA5LCAweDAwMDIsIDB4MjBhOSwgMHgwMDAxLAotCTB4NDAwMiwgMHg4MDA3LCAweDIwMTIsIDB4ODIxMCwgMHg4MTA5LCAweDFkYzAsIDB4MjAwOSwgMHgwMDA4LAotCTB4MjBhOSwgMHgwMDAxLCAweDQwMDIsIDB4ODAwNywgMHgyMDEyLCAweDgyMTAsIDB4ODEwOSwgMHgxZGMwLAotCTB4YTg1YywgMHg5MDgwLCAweDAwMzEsIDB4MjA5OCwgMHgyMDA5LCAweDAwMDgsIDB4MjBhOSwgMHgwMDAxLAotCTB4NDAwMiwgMHg4MDA3LCAweDIwMTIsIDB4ODIxMCwgMHg4MTA5LCAweDFkYzAsIDB4MDBjZSwgMHg2MGMzLAotCTB4MDA0YywgMHg2MGEzLCAweDAwNTYsIDB4NjBhNywgMHg5NTc1LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LAotCTB4OTA4NCwgMHgwMDI4LCAweDExNjgsIDB4MDgwYywgMHg3NjlkLCAweDAxNTAsIDB4NjAyOCwgMHhjMGJkLAotCTB4NjAyYSwgMHgyMDA5LCAweDE4MDQsIDB4MjAxMSwgMHgwMDI5LCAweDA4MGMsIDB4MmFlYiwgMHgwMDEwLAotCTB4MDgwYywgMHhhMDZiLCAweDA4MGMsIDB4ODhkYiwgMHgwMGRlLCAweDAwOWUsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDI0MCwgMHgyMDAxLCAweDIyMDAsIDB4OTA4NSwgMHgwMGZmLAotCTB4NzAwMiwgMHg3MDA3LCAweGZmZmYsIDB4MjA3MSwgMHgwMTAwLCAweDcwOWIsIDB4MDBmZiwgMHgwMGVlLAotCTB4MDgwNCwgMHhhOTA3LCAweDA4MGMsIDB4OWNmMywgMHgwMDE2LCAweDAwMjYsIDB4MDA5NiwgMHgwMGQ2LAotCTB4NzgxNCwgMHgyMDQ4LCAweDcwMTMsIDB4MDEzOCwgMHg3MDAzLCAweDU1MDAsIDB4MDBjNiwgMHhhODljLAotCTB4OTA4NCwgMHgwMGZmLCAweGE5OTgsIDB4ODEwZiwgMHg5MThjLCAweGZmMDAsIDB4OTEwNSwgMHg3MDBhLAotCTB4YTk5YywgMHg5MThjLCAweGZmMDAsIDB4YThhMCwgMHg5MDg0LCAweDAwZmYsIDB4OTEwNSwgMHg3MDBlLAotCTB4YTk5OCwgMHg5MThjLCAweGZmMDAsIDB4MjA2MSwgMHgxODAwLCAweDYwN2MsIDB4OTA4NCwgMHgwMGZmLAotCTB4OTEwZCwgMHg3MTEyLCAweDYxODAsIDB4NzExNiwgMHgyMDA5LCAweDAwMDgsIDB4YTg2MCwgMHgyMGUwLAotCTB4YTg1YywgMHg5MDgwLCAweDAwMjksIDB4MjA5OCwgMHgyZTEwLCAweDkyOTAsIDB4MDAwNiwgMHgyMGE5LAotCTB4MDAwMSwgMHg0MDAyLCAweDgwMDcsIDB4MjAxMiwgMHg4MjEwLCAweDgxMDksIDB4MWRjMCwgMHgyMGE5LAotCTB4MDAwNCwgMHgyMDA5LCAweDE4MDUsIDB4MjEwNCwgMHgyMDEyLCAweDgxMDgsIDB4ODIxMCwgMHgxZjA0LAotCTB4YTllMywgMHgyMGE5LCAweDAwMDIsIDB4MjAwOSwgMHgxODAxLCAweDIxMDQsIDB4MjAxMiwgMHg4MTA4LAotCTB4ODIxMCwgMHgxZjA0LCAweGE5ZWQsIDB4MDBkNiwgMHgwMDE2LCAweDIwNjksIDB4MDIwMCwgMHgwODBjLAotCTB4YThkNywgMHgwMDFlLCAweDAwZGUsIDB4MjA3MSwgMHgwMjQwLCAweDIwYTksIDB4MDAwMiwgMHgyMDA5LAotCTB4MTgwMywgMHgyMDExLCAweDAyNDAsIDB4MjEwNCwgMHgyMDEyLCAweDgxMDgsIDB4ODIxMCwgMHgxZjA0LAotCTB4YWEwMywgMHgyMDA5LCAweDAwMDgsIDB4NDAwMiwgMHg4MDA3LCAweDIwMTIsIDB4ODIxMCwgMHg4MTA5LAotCTB4MWRkMCwgMHg5MDA2LCAweDIwYTksIDB4MDAwOCwgMHgyMDEyLCAweDgyMTAsIDB4MWYwNCwgMHhhYTE0LAotCTB4MDBjZSwgMHg2MGMzLCAweDAwNGMsIDB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwODBjLAotCTB4YTA2YiwgMHgwODBjLCAweDg4ZGIsIDB4MDBkZSwgMHgwMDllLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDBkNiwgMHg5MjkwLCAweDAwMTgsIDB4ODIxNCwgMHgyMGU5LCAweDAwMDAsIDB4MjA2OSwgMHgwMjAwLAotCTB4NjgxMywgMHgwMDAwLCAweDIyYTgsIDB4OTI4NCwgMHgwMGUwLCAweDAxMjgsIDB4MjBhOSwgMHgwMDIwLAotCTB4OTI5MiwgMHgwMDIwLCAweDAwMDgsIDB4OTAxNiwgMHgyMGExLCAweDAyNDAsIDB4OTAwNiwgMHg0MDA0LAotCTB4ODJmZiwgMHgwMTIwLCAweDY4MTAsIDB4ODAwMCwgMHg2ODEyLCAweDBjNjAsIDB4MDBkZSwgMHgwMDA1LAotCTB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMGE2LCAweDAwOTYsIDB4MDA2NiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOSwgMHg3NjEwLCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLAotCTB4MDkwNCwgMHhhYWQ0LCAweDcwMzAsIDB4OWMwNiwgMHgxNTIwLCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLAotCTB4OTAwNSwgMHgwOTA0LCAweGFhYTYsIDB4MDgwYywgMHhhMDliLCAweDY4YzMsIDB4MDAwMCwgMHgwODBjLAotCTB4YTU4NSwgMHg3MDMzLCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHg5Mzg0LAotCTB4MTAwMCwgMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJhYTIsIDB4OTAwNiwgMHgwODBjLAotCTB4MmFhMiwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAxMTAsIDB4NjgyNywgMHgwMDAxLAotCTB4MDAzZSwgMHg3MDEwLCAweDljMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2MTIsIDB4NzAwYywgMHg5YzM2LAotCTB4MTE0MCwgMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMGUsIDB4MDAxMCwgMHg3MDBmLAotCTB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHg5ZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LAotCTB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHhjZTM5LCAweDExODAsIDB4MDgwYywgMHgzMzJhLAotCTB4MDgwYywgMHhjZTRhLCAweDE1MTgsIDB4MDgwYywgMHhiOTNjLCAweDA0MDAsIDB4MDgwYywgMHhhNTg1LAotCTB4NjgyNCwgMHhkMDg0LCAweDA5YjAsIDB4NjgyNywgMHgwMDAxLCAweDA4OTgsIDB4MDgwYywgMHhjZTRhLAotCTB4MTExOCwgMHgwODBjLCAweGI5M2MsIDB4MDA5MCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMxLAotCTB4MDE2OCwgMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTIwLCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLAotCTB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NmYxMSwgMHgwODBjLCAweGNlMjQsIDB4MDgwYywgMHhkMGM2LAotCTB4MDgwYywgMHhhZjg5LCAweDA4MGMsIDB4YTQ1OCwgMHgwMGNlLCAweDA4MDQsIDB4YWE1NywgMHgyYzc4LAotCTB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4YWE1NywgMHg3MDEzLCAweDAwMDAsIDB4NzAwZiwgMHgwMDAwLAotCTB4MDEyZSwgMHgwMDZlLCAweDAwOWUsIDB4MDBhZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLAotCTB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxZDA4LCAweDA4MGMsIDB4ZTczOCwgMHgwOGYwLAotCTB4MDBmNiwgMHgwMDM2LCAweDIwNzksIDB4MDM4MCwgMHg3YjE4LCAweGQzYmMsIDB4MWRlOCwgMHg3ODMyLAotCTB4NzkzNiwgMHg3YTNhLCAweDc4MWIsIDB4ODA4MCwgMHgwMDNlLCAweDAwZmUsIDB4MDAwNSwgMHgwMDE2LAotCTB4MjAwMSwgMHgwMzgyLCAweDIwMDQsIDB4OTA4NCwgMHgwMDA3LCAweDkwODYsIDB4MDAwMSwgMHgxMTg4LAotCTB4MjAwMSwgMHgwMDE1LCAweDBjMjksIDB4MjAwOSwgMHgxMDAwLCAweDIwMDEsIDB4MDM4MiwgMHgyMDA0LAotCTB4OTA4NCwgMHgwMDA3LCAweDkwODYsIDB4MDAwMywgMHgwMTIwLCAweDgxMDksIDB4MWRiMCwgMHgwODBjLAotCTB4MGQ3OSwgMHgwMDFlLCAweDAwMDUsIDB4MjAwMSwgMHgwMzgyLCAweDIwMDQsIDB4OTA4NCwgMHgwMDA3LAotCTB4OTA4NiwgMHgwMDAzLCAweDExMjAsIDB4MjAwMSwgMHgwMzgwLCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LAotCTB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHg5MDBlLCAweDIwNzEsIDB4MTllOSwgMHgwNDY5LAotCTB4MDEwNiwgMHgwMTkwLCAweDcwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDAxNDgsIDB4MjBhOSwgMHgxMDAwLAotCTB4NjA0NCwgMHhkMGZjLCAweDAxZDgsIDB4MWYwNCwgMHhhYjMwLCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLAotCTB4YWFmNywgMHg2MDQ0LCAweGQwZmMsIDB4MDE5MCwgMHg3MDMwLCAweDljMDYsIDB4MTE0OCwgMHgwODBjLAotCTB4OTdmNiwgMHg2MDQ0LCAweGQwZGMsIDB4MDE1MCwgMHhjMGRjLCAweDYwNDYsIDB4NzAwYSwgMHg3MDQyLAotCTB4NzA0YywgMHg5YzA2LCAweDE5MGMsIDB4MGQ3OSwgMHgwODBjLCAweDk4NTEsIDB4MDEwZSwgMHgxOTE5LAotCTB4MDBlZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHgwMDA1LCAweDIwMDEsIDB4MDM4MiwgMHgyMDA0LAotCTB4OTA4NCwgMHgwMDA3LCAweDkwODYsIDB4MDAwMywgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyNDAwLAotCTB4NzgwOCwgMHhkMGE0LCAweDE5MGMsIDB4MGQ3MiwgMHhkMDljLCAweDAxMjgsIDB4NzgyMCwgMHg5MDhjLAotCTB4ZjAwMCwgMHgxMWI4LCAweDAwMTIsIDB4MDEyZSwgMHgwMDA1LCAweGFiN2QsIDB4YWJiYiwgMHhhYmU1LAotCTB4YWMyMywgMHhhYzMzLCAweGFjNDQsIDB4YWM1MywgMHhhYzYxLCAweGFjOGUsIDB4YWM5MiwgMHhhYjdkLAotCTB4YWI3ZCwgMHhhYzk1LCAweGFjYjEsIDB4YWI3ZCwgMHhhYjdkLCAweDA4MGMsIDB4MGQ3OSwgMHgwMTJlLAotCTB4MDAwNSwgMHgyMDYwLCAweDYwNDQsIDB4ZDBiYywgMHgwMTQwLCAweGMwYmMsIDB4NjA0NiwgMHg2MDAwLAotCTB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGQ3OSwgMHgwMDEyLCAweDAxMmUsIDB4MDAwNSwgMHhhYmEyLAotCTB4YWJhNCwgMHhhYmEyLCAweGFiYWEsIDB4YWJhMiwgMHhhYmEyLCAweGFiYTIsIDB4YWJhMiwgMHhhYmEyLAotCTB4YWJhNCwgMHhhYmEyLCAweGFiYTQsIDB4YWJhMiwgMHhhYmE0LCAweGFiYTIsIDB4YWJhMiwgMHhhYmEyLAotCTB4YWJhNCwgMHhhYmEyLCAweDA4MGMsIDB4MGQ3OSwgMHgyMDA5LCAweDAwMTMsIDB4MDgwYywgMHhhZmVjLAotCTB4MDEyZSwgMHgwMDA1LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwZGMsIDB4MDEzMCwgMHgwODBjLAotCTB4OGFiMiwgMHgwODBjLCAweGFmNGUsIDB4MDEyZSwgMHgwMDA1LCAweDIwMDksIDB4MDA0OSwgMHgwODBjLAotCTB4YWZlYywgMHgwMTJlLCAweDAwMDUsIDB4MDgwYywgMHhhYWY3LCAweDIwMDEsIDB4MWEwZSwgMHgyMDAzLAotCTB4MDAwMCwgMHg3MDMwLCAweDkwNjUsIDB4MDkwYywgMHgwZDc5LCAweDcwMzQsIDB4OTA5MiwgMHhjMzUwLAotCTB4MTI1OCwgMHg4MDAwLCAweDcwMzYsIDB4NzAwNCwgMHg5MDg2LCAweDAwMDMsIDB4MDExMCwgMHg3MDA3LAotCTB4MDAwMCwgMHg3ODFmLCAweDA4MDgsIDB4MDA1OCwgMHgwODBjLCAweGFlYWMsIDB4MDE0MCwgMHgwODBjLAotCTB4ZWJmZCwgMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHgwMDE0LCAweDA4MGMsIDB4YWZlYywgMHg3ODFmLAotCTB4MDEwMCwgMHgwODBjLCAweGFiMTMsIDB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4YWFmNywgMHg3MTRjLAotCTB4ODFmZiwgMHgxMTI4LCAweDIwMTEsIDB4MWExMSwgMHgyMDEzLCAweDAwMDAsIDB4MDQ3MCwgMHgyMDYxLAotCTB4MDEwMCwgMHg3MTUwLCAweDkxOTIsIDB4NzUzMCwgMHgxNjI4LCAweDgxMDgsIDB4NzE1MiwgMHg3MTRjLAotCTB4OTE4NiwgMHgxYjU2LCAweDAxMjAsIDB4MjAwMSwgMHgwMzkxLCAweDIwMDMsIDB4MDQwMCwgMHg5MTg4LAotCTB4MDAwOCwgMHgyMTBjLCAweDkxOGUsIDB4MDAwNiwgMHgxMTM4LCAweDYwMTQsIDB4OTA4NCwgMHgxOTg0LAotCTB4OTA4NSwgMHgwMDEyLCAweDYwMTYsIDB4MDA4OCwgMHg3MTRjLCAweDkxODgsIDB4MDAwOCwgMHgyMTBjLAotCTB4OTE4ZSwgMHgwMDA5LCAweDBkOTAsIDB4NjAxNCwgMHg5MDg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDE2LAotCTB4NjAxNiwgMHgwMDE4LCAweDcwNmMsIDB4YzA4NSwgMHg3MDZlLCAweDc4MWYsIDB4MDIwMCwgMHgwODBjLAotCTB4YWIxMywgMHgwMTJlLCAweDAwMDUsIDB4MDgwYywgMHhhYWY3LCAweDcxNGMsIDB4MjE2MCwgMHg2MDAzLAotCTB4MDAwMywgMHgyMDA5LCAweDAwNGEsIDB4MDgwYywgMHhhZmVjLCAweDc4MWYsIDB4MDIwMCwgMHgwODBjLAotCTB4YWIxMywgMHgwMTJlLCAweDAwMDUsIDB4NzgwOCwgMHhkMDljLCAweDBkZTgsIDB4NzgyMCwgMHgyMDYwLAotCTB4NjAwMywgMHgwMDAzLCAweDA4MGMsIDB4YWFmNywgMHgwODBjLCAweDFkZTksIDB4NzgxZiwgMHgwNDAwLAotCTB4MDgwYywgMHhhYjEzLCAweDAxMmUsIDB4MDAwNSwgMHg3ODA4LCAweGQwOWMsIDB4MGRlOCwgMHg3ODIwLAotCTB4MjA2MCwgMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHgxZTMxLCAweDc4MWYsIDB4MDQwMCwgMHgwODBjLAotCTB4YWIxMywgMHgwMTJlLCAweDAwMDUsIDB4NzAzMCwgMHg5MDY1LCAweDAxNDgsIDB4NjA0NCwgMHhjMGJjLAotCTB4NjA0NiwgMHg3MTA0LCAweDkxODYsIDB4MDAwMywgMHgwMTEwLCAweDA4MGMsIDB4OThiZCwgMHgwMTJlLAotCTB4MDAwNSwgMHgwMGY2LCAweDcwM2MsIDB4OTA4NiwgMHgwMDAyLCAweDA1MjgsIDB4NzA0YywgMHg5MDdkLAotCTB4MDUxMCwgMHg3ODQ0LCAweGMwYmMsIDB4Nzg0NiwgMHg3ODIwLCAweDkwODYsIDB4MDAwOSwgMHgwMTE4LAotCTB4MDgwYywgMHg5ZmM1LCAweDAwYzAsIDB4NzgyOCwgMHhkMGZjLCAweDExMTgsIDB4MDgwYywgMHg5ZjQ0LAotCTB4MDA5MCwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHg5MDg0LCAweDAwMjgsIDB4MTEzMCwgMHgyMDAxLAotCTB4MTk3ZCwgMHgyMDA0LCAweDkwODYsIDB4YWFhYSwgMHgxMTIwLCAweDIwMDEsIDB4MDM4NywgMHgyMDAzLAotCTB4MTAwMCwgMHgwODBjLCAweDllYzksIDB4MDBmZSwgMHgwMTJlLCAweDAwMDUsIDB4MDgwYywgMHg3NzNmLAotCTB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4MGQ3OSwgMHgwMDA1LCAweDIwMDksIDB4MWI2NywgMHgyMTA0LAotCTB4ZDBiYywgMHgwMWE4LCAweGMwYmMsIDB4MjAwYSwgMHgyMDA5LCAweDAxMGIsIDB4MjEwNCwgMHg5MDg1LAotCTB4MDAwMiwgMHgyMDBhLCAweDIwMDksIDB4MDEwMSwgMHgyMTA0LCAweGMwYWMsIDB4MjAwYSwgMHgyMDA5LAotCTB4MDEwNSwgMHgyMTA0LCAweDkwODQsIDB4MTk4NCwgMHg5MDg1LCAweDgwOTIsIDB4MjAwYSwgMHgwMTJlLAotCTB4MDAwNSwgMHgwODBjLCAweDg4ZjEsIDB4MjAwOSwgMHgwMTBiLCAweDIxMDQsIDB4ZDA4YywgMHgwMWE4LAotCTB4YzA4YywgMHgyMDBhLCAweDIwMDEsIDB4MTg0OCwgMHgyMDA0LCAweGQwOTQsIDB4MTEzMCwgMHgyMDA5LAotCTB4MDEwMSwgMHgyMTA0LCAweDkwODUsIDB4MDAyMCwgMHgyMDBhLCAweDIwMDksIDB4MWI2NywgMHgyMDBiLAotCTB4MDAwMCwgMHgyMDAxLCAweDAwMWIsIDB4MDgwYywgMHhhYWU4LCAweDAxMmUsIDB4MDAwNSwgMHgwMGU2LAotCTB4MjA3MSwgMHgxOWU5LCAweDYwNDQsIDB4YzBiYywgMHg2MDQ2LCAweGQwZmMsIDB4MDFiOCwgMHg3MDRjLAotCTB4OWMwNiwgMHgxMTkwLCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGEzOTEsIDB4NzA0ZiwgMHgwMDAwLAotCTB4MjAwMSwgMHgwMTA5LCAweDIwMDQsIDB4ZDA4YywgMHgxMTM4LCAweDIwMDEsIDB4MDEwOCwgMHgyMDA0LAotCTB4ZDBiYywgMHgxMTEwLCAweDcwM2YsIDB4MDAwMCwgMHgwODBjLCAweGE1OWMsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDAyNiwgMHg3MDEwLCAweDljMDYsIDB4MTE3OCwgMHgwODBjLCAweGE0NTgsIDB4NjA0NCwgMHhjMGZjLAotCTB4NjA0NiwgMHg2MDBjLCAweDkwMTUsIDB4MDEyMCwgMHg3MjEyLCAweDYwMGYsIDB4MDAwMCwgMHgwMDEwLAotCTB4NzIxMiwgMHg3MjBlLCAweDkwMDYsIDB4MDAyZSwgMHgwMDA1LCAweDAwMjYsIDB4NzAyMCwgMHg5YzA2LAotCTB4MTE3OCwgMHgwODBjLCAweGE0NTgsIDB4NjA0NCwgMHhjMGZjLCAweDYwNDYsIDB4NjAwYywgMHg5MDE1LAotCTB4MDEyMCwgMHg3MjIyLCAweDYwMGYsIDB4MDAwMCwgMHgwMDEwLCAweDcyMjIsIDB4NzIxZSwgMHg5MDA2LAotCTB4MDAyZSwgMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHg3ODMwLCAweDljMDYsIDB4MTU1OCwgMHgyMDY5LAotCTB4MDEwMCwgMHg2OGMwLCAweDkwMDUsIDB4MDFmOCwgMHgwODBjLCAweDg4ZTQsIDB4MDgwYywgMHhhMDliLAotCTB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YTU4NSwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHg5Mzg0LAotCTB4MTAwMCwgMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJhYTIsIDB4OTAwNiwgMHgwODBjLAotCTB4MmFhMiwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAxMTAsIDB4NjgyNywgMHgwMDAxLAotCTB4OTA4NSwgMHgwMDAxLCAweDAwMzgsIDB4NzgwOCwgMHhjMGFkLCAweDc4MGEsIDB4NjAwMywgMHgwMDA5LAotCTB4NjMwYSwgMHg5MDA2LCAweDAwM2UsIDB4MDBkZSwgMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LAotCTB4NjEwMCwgMHgyMDE5LCAweDAxMDAsIDB4MjAwMSwgMHgwMzgyLCAweDIwMDQsIDB4ZDA5YywgMHgwMTkwLAotCTB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4MjgwMCwgMHgwMDE2LCAweDAwMzYsIDB4MDgwYywgMHhhYjVkLAotCTB4MDAzZSwgMHgwMDFlLCAweDAxMmUsIDB4MDBjZSwgMHg2MjAwLCAweDIyMDAsIDB4OTEwNiwgMHgwZDU4LAotCTB4MjIwMCwgMHgwMDEwLCAweDgzMTksIDB4MWQzOCwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDgwYywgMHhhYWY3LCAweDAxMDYsIDB4MjA3MSwgMHgxOWU5LAotCTB4MjA2OSwgMHgwMTAwLCAweDcwNGMsIDB4MjA2MCwgMHg5MDg2LCAweDFiNTYsIDB4MTViOCwgMHg2ODE0LAotCTB4ZDA4YywgMHgwMTg4LCAweDY4MTcsIDB4MDAxMCwgMHgyMDA5LCAweDAwMTksIDB4ODEwOSwgMHgxZGYwLAotCTB4MjAwMSwgMHgwMDMyLCAweDY5MjAsIDB4ZDFiYywgMHgwMTMwLCAweDgwMDEsIDB4MWRkOCwgMHg2OTJjLAotCTB4OTE4ZCwgMHgwMDA4LCAweDY5MmUsIDB4NjgyNCwgMHhkMDhjLCAweDAxMTAsIDB4NjgyNywgMHgwMDAyLAotCTB4NjhkMCwgMHg5MDA1LCAweDAxMTgsIDB4OTA4MiwgMHgwMDA1LCAweDAyMzgsIDB4NjA2MCwgMHg4MDAwLAotCTB4NjA2MiwgMHgyMDAxLCAweDAzOTEsIDB4MjAwMywgMHgwNDAwLCAweDA4MGMsIDB4OTg1MSwgMHg2ODJjLAotCTB4OTA4NCwgMHhmZmZkLCAweDY4MmUsIDB4MjAwMSwgMHgxODQ4LCAweDIwMDQsIDB4ZDA5NCwgMHgxMTIwLAotCTB4NjgwNCwgMHg5MDg1LCAweDAwMjAsIDB4NjgwNiwgMHgyMDY5LCAweDAwMDAsIDB4MDEwZSwgMHgwOTBjLAotCTB4YWIxMywgMHg4ZGZmLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGQ2LAotCTB4MDBjNiwgMHgwODBjLCAweGFhZjcsIDB4MDEwNiwgMHgyMDcxLCAweDE5ZTksIDB4MjA2OSwgMHgwMTAwLAotCTB4MDgwYywgMHhhZDcwLCAweDY4ZDAsIDB4OTAwNSwgMHgwMTU4LCAweDkwODIsIDB4MDAwNSwgMHgxMjQwLAotCTB4MDgwYywgMHgyYjNjLCAweDIwMDEsIDB4MDM5MSwgMHgyMDAzLCAweDA0MDAsIDB4MjA2OSwgMHgwMDAwLAotCTB4MDEwZSwgMHgwOTBjLCAweGFiMTMsIDB4OGRmZiwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDAxNiwgMHgyMDAxLCAweDAxMzQsIDB4MjAwNCwgMHg5MDA1LCAweDAxNDAsIDB4OTA4MiwgMHgwMDA1LAotCTB4MTIyOCwgMHgyMDAxLCAweDAzOTEsIDB4MjAwMywgMHgwNDA0LCAweDAwMjAsIDB4MjAwMSwgMHgwMzkxLAotCTB4MjAwMywgMHgwNDAwLCAweDAwMWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAxNTYsIDB4MDgwYywgMHg5ZDNlLAotCTB4N2ExNCwgMHg4MmZmLCAweDAxMzgsIDB4NzAwMywgMHgwMTAwLCAweDcwMGIsIDB4MDAwMywgMHg2MGMzLAotCTB4MDAwOCwgMHgwNDkwLCAweDcwMDMsIDB4MDIwMCwgMHg3MDA3LCAweDAwMDAsIDB4MjA2OSwgMHgxODAwLAotCTB4OTAxZSwgMHg2ODAwLCAweDkwODYsIDB4MDAwNCwgMHgxMTEwLCAweGMzOGQsIDB4MDA2MCwgMHgwODBjLAotCTB4NzY5ZCwgMHgxMTEwLCAweGMzYWQsIDB4MDAwOCwgMHhjM2E1LCAweDZhZGMsIDB4ZDI5YywgMHgxMTEwLAotCTB4ZDJhYywgMHgwMTA4LCAweGMzOWQsIDB4NzMwZSwgMHgwODBjLCAweDg5YTksIDB4MjBhOSwgMHgwMDA2LAotCTB4MjAxMSwgMHhmZmVjLCAweDIwMTksIDB4ZmZlZCwgMHgyMDcxLCAweDAyNTAsIDB4MjMwNSwgMHgyMDcyLAotCTB4OGU3MCwgMHgyMjA1LCAweDIwNzIsIDB4OGU3MCwgMHg5Mzk4LCAweDAwMDIsIDB4OTI5MCwgMHgwMDAyLAotCTB4MWYwNCwgMHhhZTI2LCAweDYwYzMsIDB4MDAyMCwgMHgwODBjLCAweGEwNmIsIDB4MDE1ZSwgMHgwMGRlLAotCTB4MDAwNSwgMHgwMTU2LCAweDA4MGMsIDB4OWQzZSwgMHg3YTE0LCAweDgyZmYsIDB4MDE2OCwgMHg5Mjg2LAotCTB4ZmZmZiwgMHgwMTE4LCAweDkyODIsIDB4MDAwZSwgMHgxMjM4LCAweDcwMDMsIDB4MDEwMCwgMHg3MDBiLAotCTB4MDAwMywgMHg2MGMzLCAweDAwMDgsIDB4MDQ4OCwgMHg3MDAzLCAweDAyMDAsIDB4NzAwNywgMHgwMDFjLAotCTB4NzAwZiwgMHgwMDAxLCAweDIwMTEsIDB4MTliZiwgMHgyMjA0LCAweDgwMDcsIDB4NzAxYSwgMHg4MjEwLAotCTB4MjIwNCwgMHg4MDA3LCAweDcwMWUsIDB4MDQyMSwgMHgxMTIwLCAweGI4YTAsIDB4OTA4MiwgMHgwMDdmLAotCTB4MDI0OCwgMHgyMDAxLCAweDE4MWYsIDB4MjAwNCwgMHg3MDIyLCAweDIwMDEsIDB4MTgyMCwgMHgyMDA0LAotCTB4NzAyNiwgMHgwMDMwLCAweDIwMDEsIDB4MTgxOCwgMHgyMDA0LCAweDkwODQsIDB4MDBmZiwgMHg3MDI2LAotCTB4MjBhOSwgMHgwMDA0LCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDE4MDUsIDB4MjBlOSwgMHgwMDAwLAotCTB4MjBhMSwgMHgwMjU2LCAweDQwMDMsIDB4NjBjMywgMHgwMDFjLCAweDAxNWUsIDB4MDgwNCwgMHhhMDZiLAotCTB4MDAwNiwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGFjLCAweDAwMGUsIDB4MDAwNSwgMHgyMDExLAotCTB4MDAwMywgMHgwODBjLCAweGE0MjYsIDB4MjAxMSwgMHgwMDAyLCAweDA4MGMsIDB4YTQzMCwgMHgwODBjLAotCTB4YTMxMSwgMHgwMDM2LCAweDkwMWUsIDB4MDgwYywgMHhhMzkxLCAweDAwM2UsIDB4MDAwNSwgMHgwODBjLAotCTB4MzQ2ZCwgMHgwMTg4LCAweDAwMTYsIDB4MDBiNiwgMHgwMGM2LCAweDcwMTAsIDB4OTA4NSwgMHgwMDIwLAotCTB4NzAxMiwgMHgyMDA5LCAweDAwN2UsIDB4MDgwYywgMHg2NzgzLCAweGI4NWMsIDB4YzBhYywgMHhiODVlLAotCTB4MDBjZSwgMHgwMGJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwZjYsIDB4NzEwNCwgMHg5MTg2LAotCTB4MDAwNCwgMHgxMTIwLCAweDc0MTAsIDB4OWU5MCwgMHgwMDA0LCAweDAwNjgsIDB4OTE4NiwgMHgwMDAxLAotCTB4MTEyMCwgMHg3NDIwLCAweDllOTAsIDB4MDAwOCwgMHgwMDMwLCAweDkxODYsIDB4MDAwMiwgMHgxNTA4LAotCTB4NzQyOCwgMHg5ZTkwLCAweDAwMGEsIDB4NjExMCwgMHgyNDY4LCAweDY4MGMsIDB4OTA3ZCwgMHgwMWM4LAotCTB4NzgxMCwgMHg5MTA2LCAweDExMjgsIDB4MmY2OCwgMHg3ODBjLCAweDkwN2QsIDB4MWRjOCwgMHgwMDg4LAotCTB4NzgwYywgMHg2ODBlLCAweDdjMGUsIDB4MmYxMiwgMHg5MDA2LCAweDcwMzIsIDB4NzAzNiwgMHg3MDA0LAotCTB4OTA4NiwgMHgwMDAzLCAweDAxMTAsIDB4NzAwNywgMHgwMDAwLCAweDkwMDYsIDB4MDBmZSwgMHgwMGRlLAotCTB4MDAwNSwgMHg5MDg1LCAweDAwMDEsIDB4MGNkMCwgMHgyMDcxLCAweDE4OGQsIDB4NzAwMCwgMHg5MDA1LAotCTB4MDE0MCwgMHgyMDAxLCAweDA4MTIsIDB4MjA3MSwgMHgxODAwLCAweDcwNzYsIDB4NzA3YSwgMHg3MDZiLAotCTB4ZmZkNCwgMHgyMDcxLCAweDE4MDAsIDB4NzA3NCwgMHg3MDU2LCAweDcwNWIsIDB4MWRkYywgMHgwMDA1LAotCTB4MDBlNiwgMHgwMTI2LCAweDIwNzEsIDB4MTgwMCwgMHgyMDkxLCAweDgwMDAsIDB4NzU1NCwgMHg5NTgyLAotCTB4MDAxMCwgMHgwNjA4LCAweDcwNTgsIDB4MjA2MCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTQ4LAorCTB4MjAwMSwgMHgwMTAwLCAweDA4MGMsIDB4MmE5OSwgMHg5MDA2LCAweDA4MGMsIDB4MmE5OSwgMHgyMDY5LAorCTB4MDEwMCwgMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHg3MDIwLAorCTB4OWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYyMiwgMHg3MDFjLCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLAorCTB4OWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAxZSwgMHgwMDEwLCAweDcwMWYsIDB4MDAwMCwgMHg2NjBjLAorCTB4MDA2NiwgMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg4OWZmLAorCTB4MTE2OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4MDgwYywgMHhjZjE5LAorCTB4MDExMCwgMHgwODBjLCAweGVhMzAsIDB4MDA5ZSwgMHgwODBjLCAweGIxYTcsIDB4MDgwYywgMHhhNjVkLAorCTB4ODhmZiwgMHgxMTkwLCAweDAwY2UsIDB4MDgwNCwgMHhhNjc4LCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLAorCTB4MDgwNCwgMHhhNjc4LCAweDkwMDYsIDB4MDEyZSwgMHgwMDBlLCAweDAwNmUsIDB4MDA3ZSwgMHgwMGNlLAorCTB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDFiLCAweDAwMDAsIDB4MDBjZSwgMHg5OGM1LAorCTB4MDAwMSwgMHgwYzg4LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwOTYsIDB4MDBjNiwgMHgwMDY2LAorCTB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOCwgMHg3NjQ4LAorCTB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHhhNzc5LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LAorCTB4MTkwNCwgMHhhNzc0LCAweDg3ZmYsIDB4MDEyOCwgMHgyNzAwLCAweDljMDYsIDB4MTkwNCwgMHhhNzc0LAorCTB4MDA0OCwgMHg2MDEwLCAweDliMDYsIDB4MTkwNCwgMHhhNzc0LCAweDg1ZmYsIDB4MDExOCwgMHg2MDVjLAorCTB4OTEwNiwgMHgxNWQwLCAweDcwNGMsIDB4OWMwNiwgMHgxMTc4LCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLAorCTB4MDgwYywgMHhhNTk2LCAweDcwM2YsIDB4MDAwMCwgMHg5MDA2LCAweDcwNGUsIDB4NzA2YSwgMHg3MDUyLAorCTB4NzA2ZSwgMHgwODBjLCAweGFmZjQsIDB4MDAzZSwgMHg3MDQ4LCAweDljMzYsIDB4MTExMCwgMHg2NjBjLAorCTB4NzY0YSwgMHg3MDQ0LCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLAorCTB4NzA0NiwgMHgwMDEwLCAweDcwNDcsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHg5ZjA2LAorCTB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LAorCTB4MDgwYywgMHhjZjE5LCAweDAxMTAsIDB4MDgwYywgMHhlYTMwLCAweDA4MGMsIDB4YjFhNywgMHg4N2ZmLAorCTB4MTE5OCwgMHgwMGNlLCAweDA4MDQsIDB4YTcyMiwgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LAorCTB4YTcyMiwgMHg5MDA2LCAweDAxMmUsIDB4MDAwZSwgMHgwMDJlLCAweDAwNmUsIDB4MDBjZSwgMHgwMDllLAorCTB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDFiLCAweDAwMDAsIDB4MDBjZSwgMHg5N2JkLAorCTB4MDAwMSwgMHgwYzgwLCAweDAwZTYsIDB4MjA3MSwgMHgxOWU4LCAweDkwMDYsIDB4NzAzMiwgMHg3MDBhLAorCTB4NzAwNCwgMHg5MDg2LCAweDAwMDMsIDB4MDE1OCwgMHgyMDAxLCAweDE4MDAsIDB4MjAwNCwgMHg5MDg2LAorCTB4MDAwMiwgMHgxMTE4LCAweDcwMDcsIDB4MDAwNSwgMHgwMDEwLCAweDcwMDcsIDB4MDAwMCwgMHgwMGVlLAorCTB4MDAwNSwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgwMDY2LCAweDAwMjYsIDB4MDAwNiwgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOCwgMHgyYzEwLCAweDc2NDgsIDB4MjY2MCwgMHgyNjc4LAorCTB4OGNmZiwgMHgwNTQwLCAweDIyMDAsIDB4OWMwNiwgMHgxNTA4LCAweDcwNDgsIDB4OWMzNiwgMHgxMTEwLAorCTB4NjYwYywgMHg3NjRhLCAweDcwNDQsIDB4OWMzNiwgMHgxMTQwLCAweDJjMDAsIDB4OWYzNiwgMHgwMTE4LAorCTB4MmYwMCwgMHg3MDQ2LCAweDAwMTAsIDB4NzA0NywgMHgwMDAwLCAweDY2MGMsIDB4MmMwMCwgMHg5ZjA2LAorCTB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4NjAwNCwgMHg5MDg2LAorCTB4MDA0MCwgMHgwOTBjLCAweDk5ZWQsIDB4OTA4NSwgMHgwMDAxLCAweDAwMjAsIDB4MmM3OCwgMHg2MDBjLAorCTB4MjA2MCwgMHgwOGIwLCAweDAxMmUsIDB4MDAwZSwgMHgwMDJlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGVlLAorCTB4MDBmZSwgMHgwMDA1LCAweDAwOTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDY2LAorCTB4MDAyNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTllOCwgMHg3NjEwLAorCTB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHhhODc3LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LAorCTB4YjhhMCwgMHgwMGJlLCAweDkyMDYsIDB4MTkwNCwgMHhhODcyLCAweDcwMzAsIDB4OWMwNiwgMHgxNTIwLAorCTB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4OTAwNSwgMHgwOTA0LCAweGE4NDksIDB4MDgwYywgMHhhMmEwLAorCTB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4YTc4YSwgMHg3MDMzLCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LAorCTB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLAorCTB4MmE5OSwgMHg5MDA2LCAweDA4MGMsIDB4MmE5OSwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LAorCTB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHg3MDEwLCAweDljMzYsIDB4MTExMCwgMHg2NjBjLAorCTB4NzYxMiwgMHg3MDBjLCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLAorCTB4NzAwZSwgMHgwMDEwLCAweDcwMGYsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsIDB4MmMwMCwgMHg5ZjA2LAorCTB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsIDB4MDgwYywgMHhkMTIxLAorCTB4MTE4MCwgMHgwODBjLCAweDMzNDQsIDB4MDgwYywgMHhkMTMyLCAweDE1MTgsIDB4MDgwYywgMHhiYjVjLAorCTB4MDQwMCwgMHgwODBjLCAweGE3OGEsIDB4NjgyNCwgMHhkMDg0LCAweDA5YjAsIDB4NjgyNywgMHgwMDAxLAorCTB4MDg5OCwgMHgwODBjLCAweGQxMzIsIDB4MTExOCwgMHgwODBjLCAweGJiNWMsIDB4MDA5MCwgMHg2MDE0LAorCTB4MjA0OCwgMHgwODBjLCAweGNmMTksIDB4MDE2OCwgMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTA4LAorCTB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NzAwNiwgMHgwODBjLAorCTB4ZDEwYywgMHgwODBjLCAweGQzYWUsIDB4MDgwYywgMHhiMWE3LCAweDA4MGMsIDB4YTY1ZCwgMHgwMGNlLAorCTB4MDgwNCwgMHhhN2YyLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4YTdmMiwgMHgwMTJlLAorCTB4MDAwZSwgMHgwMDJlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDllLAorCTB4MDAwNSwgMHg2MDIwLCAweDkwODYsIDB4MDAwNiwgMHgxZDIwLCAweDA4MGMsIDB4ZWEzMCwgMHgwYzA4LAorCTB4MDBkNiwgMHgwODBjLCAweDlmNDMsIDB4NzAwMywgMHgwMjAwLCAweDcwMDcsIDB4MDAxNCwgMHg2MGMzLAorCTB4MDAxNCwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxOTg5LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLAorCTB4MDI1MCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMywgMHg3MDIzLCAweDAwMDQsIDB4NzAyNywgMHg3ODc4LAorCTB4MDgwYywgMHhhMjcwLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweDlmNDMsIDB4NzAwYiwgMHgwODAwLAorCTB4NzgxNCwgMHg5MDg0LCAweGZmMDAsIDB4NzAwZSwgMHg3ODE0LCAweDkwODQsIDB4MDBmZiwgMHg3MDIyLAorCTB4NzgyYywgMHg3MDI2LCAweDc4NjAsIDB4OTA4NCwgMHgwMGZmLCAweDkwODUsIDB4MDIwMCwgMHg3MDAyLAorCTB4Nzg2MCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg3MDA2LCAweDYwYzIsIDB4MDgwNCwgMHhhMjcwLAorCTB4MDBiNiwgMHgwMGQ2LCAweDAwMTYsIDB4MDBkNiwgMHgyZjY4LCAweDIwMDksIDB4MDAzNSwgMHgwODBjLAorCTB4ZDViYiwgMHgwMGRlLCAweDE5MDQsIDB4YTkyNSwgMHgwODBjLCAweDllZjgsIDB4NzAwMywgMHgxMzAwLAorCTB4NzgyYywgMHgwODBjLCAweGFhMzQsIDB4MjA2OCwgMHg2ODIwLCAweDkwODYsIDB4MDAwMywgMHgwNTYwLAorCTB4NzgxMCwgMHgyMDU4LCAweGJhYTAsIDB4MDgwYywgMHhiMDk0LCAweDExZDgsIDB4OTI4NiwgMHgwMDdlLAorCTB4MTEyOCwgMHg3MDBiLCAweDAwZmYsIDB4NzAwZiwgMHhmZmZlLCAweDA0OTgsIDB4OTI4NiwgMHgwMDdmLAorCTB4MTEyOCwgMHg3MDBiLCAweDAwZmYsIDB4NzAwZiwgMHhmZmZkLCAweDA0NTgsIDB4OTI4NCwgMHhmZjgwLAorCTB4MDE4MCwgMHg5Mjg2LCAweDAwODAsIDB4MTEyOCwgMHg3MDBiLCAweDAwZmYsIDB4NzAwZiwgMHhmZmZjLAorCTB4MDQwMCwgMHg5MmQ4LCAweDEwMDAsIDB4MmI1YywgMHhiODEwLCAweDcwMGEsIDB4YjgxNCwgMHg3MDBlLAorCTB4MDBjMCwgMHhiODg0LCAweDcwMGUsIDB4MDBhOCwgMHgwODBjLCAweGIwOTQsIDB4MTEzMCwgMHg3ODEwLAorCTB4MjA1OCwgMHhiOGEwLCAweDkwODIsIDB4MDA3ZSwgMHgwMjUwLCAweDAwZDYsIDB4MjA2OSwgMHgxODFmLAorCTB4MmQwNCwgMHg3MDBhLCAweDhkNjgsIDB4MmQwNCwgMHg3MDBlLCAweDAwZGUsIDB4MDAxMCwgMHg2MDM0LAorCTB4NzAwZSwgMHg3ODM4LCAweDcwMTIsIDB4NzgzYywgMHg3MDE2LCAweDYwYzMsIDB4MDAwYywgMHgwMDFlLAorCTB4MDBkZSwgMHgwODBjLCAweGEyNzAsIDB4MDBiZSwgMHgwMDA1LCAweDc4MWIsIDB4MDAwMSwgMHg3ODAzLAorCTB4MDAwNiwgMHgwMDFlLCAweDAwZGUsIDB4MDBiZSwgMHgwMDA1LCAweDc5MmMsIDB4OTE4MCwgMHgwMDA4LAorCTB4MjAwYywgMHg5MTg2LCAweDAwMDYsIDB4MDFjMCwgMHg5MTg2LCAweDAwMDMsIDB4MDkwNCwgMHhhOWE0LAorCTB4OTE4NiwgMHgwMDA1LCAweDA5MDQsIDB4YTk4YywgMHg5MTg2LCAweDAwMDQsIDB4MDVmMCwgMHg5MTg2LAorCTB4MDAwOCwgMHgwOTA0LCAweGE5OTUsIDB4NzgwNywgMHgwMDM3LCAweDc4MmYsIDB4MDAwMywgMHg3ODE3LAorCTB4MTcwMCwgMHgwODBjLCAweGFhMTEsIDB4MDAwNSwgMHgwODBjLCAweGE5ZDIsIDB4MDBkNiwgMHgwMDI2LAorCTB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHg2ODAwLCAweDZhNDQsIDB4ZDJmYywgMHgxMWY4LAorCTB4MDAwMiwgMHhhOTZjLCAweGE5NzcsIDB4YTk2ZSwgMHhhOTc3LCAweGE5NzMsIDB4YTk2YywgMHhhOTZjLAorCTB4YTk3NywgMHhhOTc3LCAweGE5NzcsIDB4YTk3NywgMHhhOTZjLCAweGE5NmMsIDB4YTk2YywgMHhhOTZjLAorCTB4YTk2YywgMHhhOTc3LCAweGE5NmMsIDB4YTk3NywgMHgwODBjLCAweDBkODUsIDB4NjgyNCwgMHhkMGU0LAorCTB4MDExMCwgMHhkMGNjLCAweDAxMTAsIDB4OTAwZSwgMHgwMDEwLCAweDIwMDksIDB4MjAwMCwgMHg2ODJjLAorCTB4NzAyMiwgMHg2ODMwLCAweDcwMjYsIDB4MDgwNCwgMHhhOWNiLCAweDA4MGMsIDB4YTlkMiwgMHgwMGQ2LAorCTB4MDAyNiwgMHg3OTJjLCAweDIxNjgsIDB4MjAwOSwgMHg0MDAwLCAweDZhMDAsIDB4OTI4NiwgMHgwMDAyLAorCTB4MTEwOCwgMHg5MDBlLCAweDA4MDQsIDB4YTljYiwgMHgwODBjLCAweGE5ZDIsIDB4MDBkNiwgMHgwMDI2LAorCTB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHgwNGIwLCAweDA0ZTEsIDB4MDBkNiwgMHgwMDI2LAorCTB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHg5Mjg2LCAweDAwMDUsIDB4MDExOCwgMHg5Mjg2LAorCTB4MDAwMiwgMHgxMTA4LCAweDkwMGUsIDB4MDQzOCwgMHgwNDY5LCAweDAwZDYsIDB4MDAyNiwgMHg3OTJjLAorCTB4MjE2OCwgMHg2ODE0LCAweDY5MjQsIDB4YzE4NSwgMHg2OTI2LCAweDAwOTYsIDB4MjA0OCwgMHhhOWFjLAorCTB4YTgzNCwgMHg5MTEyLCAweGE5YjAsIDB4YTgzOCwgMHgwMDllLCAweDkxMDMsIDB4NzAyMiwgMHg3MjI2LAorCTB4NzkyYywgMHg5MTgwLCAweDAwMTEsIDB4MjAwNCwgMHhkMGZjLCAweDExNDgsIDB4OTE4MCwgMHgwMDAwLAorCTB4MjAwNCwgMHg5MDhlLCAweDAwMDIsIDB4MDEzMCwgMHg5MDhlLCAweDAwMDQsIDB4MDExOCwgMHgyMDA5LAorCTB4NDAwMCwgMHgwMDA4LCAweDkwMGUsIDB4NzEyYSwgMHg2MGMzLCAweDAwMTgsIDB4MDAyZSwgMHgwMGRlLAorCTB4MDgwNCwgMHhhMjcwLCAweDAwYjYsIDB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MDA2NiwgMHgwODBjLAorCTB4OWY0MywgMHg5MDA2LCAweDcwMDMsIDB4MDIwMCwgMHg3OTM4LCAweDcxMGEsIDB4NzkzYywgMHg3MTBlLAorCTB4NzgxMCwgMHgyMDU4LCAweGI4YTAsIDB4MDgwYywgMHhiMDk0LCAweDExMTgsIDB4OTA5MiwgMHgwMDdlLAorCTB4MDI2OCwgMHgwMGQ2LCAweDIwNjksIDB4MTgxZiwgMHgyZDJjLCAweDhkNjgsIDB4MmQzNCwgMHg5MGQ4LAorCTB4MTAwMCwgMHgyYjVjLCAweGJiMTAsIDB4YmMxNCwgMHgwMGRlLCAweDAwMjgsIDB4OTAxZSwgMHhiYzg0LAorCTB4MjAyOSwgMHgwMDAwLCAweDY2MzQsIDB4NzgyYywgMHg5MDgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDg2LAorCTB4MDAwMywgMHgxMTI4LCAweDc1MTIsIDB4NzYxNiwgMHg3MzFhLCAweDc0MWUsIDB4MDAyMCwgMHg3MzEyLAorCTB4NzQxNiwgMHg3NTFhLCAweDc2MWUsIDB4MDA2ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMGJlLAorCTB4MDAwNSwgMHgwODBjLCAweDlmNDMsIDB4NzAwMywgMHgwMTAwLCAweDc4MmMsIDB4NzAwYSwgMHg3ODE0LAorCTB4NzAwZSwgMHg3MDBlLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweGEyNzAsIDB4MDgwYywgMHg5ZWVmLAorCTB4NzAwMywgMHgxNDAwLCAweDc4MzgsIDB4NzAwYSwgMHgwMDc5LCAweDc4M2MsIDB4NzAwZSwgMHg3ODJjLAorCTB4NzAxMiwgMHg3ODMwLCAweDcwMTYsIDB4NzgzNCwgMHg5MDg0LCAweDAwZmYsIDB4ODAwNywgMHg3MDFhLAorCTB4NjBjMywgMHgwMDEwLCAweDA4MDQsIDB4YTI3MCwgMHgwMGU2LCAweDIwNzEsIDB4MDI0MCwgMHgwMDA2LAorCTB4MDBmNiwgMHgyMDc4LCAweDc4MTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4ZDQsIDB4ZDA4NCwgMHgwMTIwLAorCTB4Nzg0YywgMHg3MDJhLCAweDc4NTAsIDB4NzAyZSwgMHgwMGJlLCAweDAwZmUsIDB4MDAwZSwgMHgwMGVlLAorCTB4MDAwNSwgMHgwODBjLCAweDlmM2EsIDB4NzAwMywgMHgwMTAwLCAweDc4MmMsIDB4NzAwYSwgMHg3ODE0LAorCTB4NzAwZSwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHhhMjcwLCAweDAwYTksIDB4NzkxNCwgMHg3MTJhLAorCTB4NjBjMywgMHgwMDAwLCAweDYwYTcsIDB4OTU3NSwgMHgwMDI2LCAweDA4MGMsIDB4MmEwNCwgMHgwMjI4LAorCTB4MjAxMSwgMHgwMTAxLCAweDIyMDQsIDB4YzBjNSwgMHgyMDEyLCAweDAwMmUsIDB4MDgwYywgMHhhMjkzLAorCTB4MDgwYywgMHg4YTQyLCAweDAwMDUsIDB4MDAzNiwgMHgwMDk2LCAweDAwZDYsIDB4MDBlNiwgMHg3ODYwLAorCTB4MjA0OCwgMHhhYTdjLCAweDkyOTYsIDB4MDBjMCwgMHg5Mjk0LCAweDAwZmQsIDB4YWE3ZSwgMHhhYTgwLAorCTB4OTI5NCwgMHgwMzAwLCAweGFhODIsIDB4YTk2YywgMHg5MTk0LCAweDAwZmYsIDB4YWI3NCwgMHg5Mzg0LAorCTB4MDBmZiwgMHg5MDhkLCAweGMyMDAsIDB4YTk2ZSwgMHg5Mzg0LCAweGZmMDAsIDB4OTIxNSwgMHhhYTc2LAorCTB4YTg3MCwgMHhhYTc4LCAweGE4N2EsIDB4YWE3MiwgMHgwMGQ2LCAweDIwNjksIDB4MDIwMCwgMHgwODBjLAorCTB4YWFmMSwgMHgwMGRlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNDAsIDB4MjBhOSwgMHgwMDBhLAorCTB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDFiLCAweDIwOTgsIDB4NDAwMywgMHg2MGEzLAorCTB4MDAzNSwgMHhhYTY4LCAweDkyOTQsIDB4NzAwMCwgMHg5Mjg2LCAweDMwMDAsIDB4MDExMCwgMHg2MGEzLAorCTB4MDAzNywgMHgwMGVlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDNlLCAweDAwMDUsIDB4OTAwZSwgMHg3ODE0LAorCTB4MDA5NiwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBmYywgMHgwMWMwLCAweDkwODQsIDB4MDAwMywgMHgxMWE4LAorCTB4MjAwMSwgMHgxODBjLCAweDIwMDQsIDB4ZDBiYywgMHgwMTgwLCAweDc4MjQsIDB4ZDBjYywgMHgxMTY4LAorCTB4ZDBjNCwgMHgxMTU4LCAweGE4YTgsIDB4OTAwNSwgMHgxMTQwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLAorCTB4YzFkNSwgMHgyMTAyLCAweDIwMDksIDB4MTliMywgMHgyMTBjLCAweDAwOWUsIDB4OTE4ZCwgMHgwMDkyLAorCTB4MDAxMCwgMHgyMDA5LCAweDAwOTYsIDB4NjBhYiwgMHgwMDM2LCAweDAwMjYsIDB4MjExMCwgMHg5MDBlLAorCTB4MDgwYywgMHgyYWUyLCAweDAwMmUsIDB4MDAwNSwgMHgyMDA5LCAweDAwMDksIDB4MDBhMCwgMHgyMDA5LAorCTB4MDAwYSwgMHgwMDg4LCAweDIwMDksIDB4MDAwYiwgMHgwMDcwLCAweDIwMDksIDB4MDAwYywgMHgwMDU4LAorCTB4MjAwOSwgMHgwMDBkLCAweDAwNDAsIDB4MjAwOSwgMHgwMDBlLCAweDAwMjgsIDB4MjAwOSwgMHgwMDBmLAorCTB4MDAxMCwgMHgyMDA5LCAweDAwMDgsIDB4NjkxMiwgMHgwMDA1LCAweDA4MGMsIDB4OWVmOCwgMHgwMDE2LAorCTB4MDAyNiwgMHgwMDk2LCAweDAwZDYsIDB4NzgxNCwgMHgyMDQ4LCAweDcwMTMsIDB4MDEzOCwgMHgyMDAxLAorCTB4MTgzNywgMHgyMDA0LCAweDkwODQsIDB4MDAyOCwgMHgxMTM4LCAweDIwMDEsIDB4MTk3YywgMHgyMDA0LAorCTB4OTA4NiwgMHhhYWFhLCAweDE5MDQsIDB4YWI5NiwgMHg3MDAzLCAweDU0MDAsIDB4MDBjNiwgMHgyMDYxLAorCTB4MTgwMCwgMHg2MDdjLCAweDkwODQsIDB4MDBmZiwgMHhhOTk4LCAweDgxMGYsIDB4OTE4YywgMHhmZjAwLAorCTB4OTEwNSwgMHg3MDBhLCAweDYwODAsIDB4NzAwZSwgMHhhOTk4LCAweDkxOGMsIDB4ZmYwMCwgMHg3MTEyLAorCTB4MjBhOSwgMHgwMDA0LCAweDIwMDksIDB4MTgwNSwgMHgyZTEwLCAweDkyOTAsIDB4MDAwNiwgMHgyMTA0LAorCTB4MjAxMiwgMHg4MTA4LCAweDgyMTAsIDB4MWYwNCwgMHhhYjI3LCAweDIwYTksIDB4MDAwNCwgMHgyMDA5LAorCTB4MTgwMSwgMHgyMTA0LCAweDIwMTIsIDB4ODEwOCwgMHg4MjEwLCAweDFmMDQsIDB4YWIzMSwgMHhhODYwLAorCTB4MjBlMCwgMHhhODVjLCAweDkwODAsIDB4MDAyOSwgMHgyMDk4LCAweDIwMDksIDB4MDAwNiwgMHgyMGE5LAorCTB4MDAwMSwgMHg0MDAyLCAweDgwMDcsIDB4MjAxMiwgMHg4MjEwLCAweDgxMDksIDB4MWRjMCwgMHgwMGQ2LAorCTB4MjA2OSwgMHgwMjAwLCAweDA4MGMsIDB4YWFkYywgMHgwMGRlLCAweDIwNzEsIDB4MDI0MCwgMHgyMDExLAorCTB4MDI0MCwgMHgyMDA5LCAweDAwMDIsIDB4MjBhOSwgMHgwMDAxLCAweDQwMDIsIDB4ODAwNywgMHgyMDEyLAorCTB4ODIxMCwgMHg4MTA5LCAweDFkYzAsIDB4MjAwOSwgMHgwMDA4LCAweDIwYTksIDB4MDAwMSwgMHg0MDAyLAorCTB4ODAwNywgMHgyMDEyLCAweDgyMTAsIDB4ODEwOSwgMHgxZGMwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDMxLAorCTB4MjA5OCwgMHgyMDA5LCAweDAwMDgsIDB4MjBhOSwgMHgwMDAxLCAweDQwMDIsIDB4ODAwNywgMHgyMDEyLAorCTB4ODIxMCwgMHg4MTA5LCAweDFkYzAsIDB4MDBjZSwgMHg2MGMzLCAweDAwNGMsIDB4NjBhMywgMHgwMDU2LAorCTB4NjBhNywgMHg5NTc1LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweDkwODQsIDB4MDAyOCwgMHgxMTY4LAorCTB4MDgwYywgMHg3NzllLCAweDAxNTAsIDB4NjAyOCwgMHhjMGJkLCAweDYwMmEsIDB4MjAwOSwgMHgxODA0LAorCTB4MjAxMSwgMHgwMDI5LCAweDA4MGMsIDB4MmFlMiwgMHgwMDEwLCAweDA4MGMsIDB4YTI3MCwgMHgwODBjLAorCTB4OGE0MiwgMHgwMGRlLCAweDAwOWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLAorCTB4MDI0MCwgMHgyMDAxLCAweDIyMDAsIDB4OTA4NSwgMHgwMGZmLCAweDcwMDIsIDB4NzAwNywgMHhmZmZmLAorCTB4MjA3MSwgMHgwMTAwLCAweDcwOWIsIDB4MDBmZiwgMHgwMGVlLCAweDA4MDQsIDB4YWIwYywgMHgwODBjLAorCTB4OWVmOCwgMHgwMDE2LCAweDAwMjYsIDB4MDA5NiwgMHgwMGQ2LCAweDc4MTQsIDB4MjA0OCwgMHg3MDEzLAorCTB4MDEzOCwgMHg3MDAzLCAweDU1MDAsIDB4MDBjNiwgMHhhODljLCAweDkwODQsIDB4MDBmZiwgMHhhOTk4LAorCTB4ODEwZiwgMHg5MThjLCAweGZmMDAsIDB4OTEwNSwgMHg3MDBhLCAweGE5OWMsIDB4OTE4YywgMHhmZjAwLAorCTB4YThhMCwgMHg5MDg0LCAweDAwZmYsIDB4OTEwNSwgMHg3MDBlLCAweGE5OTgsIDB4OTE4YywgMHhmZjAwLAorCTB4MjA2MSwgMHgxODAwLCAweDYwN2MsIDB4OTA4NCwgMHgwMGZmLCAweDkxMGQsIDB4NzExMiwgMHg2MTgwLAorCTB4NzExNiwgMHgyMDA5LCAweDAwMDgsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDI5LAorCTB4MjA5OCwgMHgyZTEwLCAweDkyOTAsIDB4MDAwNiwgMHgyMGE5LCAweDAwMDEsIDB4NDAwMiwgMHg4MDA3LAorCTB4MjAxMiwgMHg4MjEwLCAweDgxMDksIDB4MWRjMCwgMHgyMGE5LCAweDAwMDQsIDB4MjAwOSwgMHgxODA1LAorCTB4MjEwNCwgMHgyMDEyLCAweDgxMDgsIDB4ODIxMCwgMHgxZjA0LCAweGFiZTgsIDB4MjBhOSwgMHgwMDAyLAorCTB4MjAwOSwgMHgxODAxLCAweDIxMDQsIDB4MjAxMiwgMHg4MTA4LCAweDgyMTAsIDB4MWYwNCwgMHhhYmYyLAorCTB4MDBkNiwgMHgwMDE2LCAweDIwNjksIDB4MDIwMCwgMHgwODBjLCAweGFhZGMsIDB4MDAxZSwgMHgwMGRlLAorCTB4MjA3MSwgMHgwMjQwLCAweDIwYTksIDB4MDAwMiwgMHgyMDA5LCAweDE4MDMsIDB4MjAxMSwgMHgwMjQwLAorCTB4MjEwNCwgMHgyMDEyLCAweDgxMDgsIDB4ODIxMCwgMHgxZjA0LCAweGFjMDgsIDB4MjAwOSwgMHgwMDA4LAorCTB4NDAwMiwgMHg4MDA3LCAweDIwMTIsIDB4ODIxMCwgMHg4MTA5LCAweDFkZDAsIDB4OTAwNiwgMHgyMGE5LAorCTB4MDAwOCwgMHgyMDEyLCAweDgyMTAsIDB4MWYwNCwgMHhhYzE5LCAweDAwY2UsIDB4NjBjMywgMHgwMDRjLAorCTB4NjBhMywgMHgwMDU2LCAweDYwYTcsIDB4OTU3NSwgMHgwODBjLCAweGEyNzAsIDB4MDgwYywgMHg4YTQyLAorCTB4MDBkZSwgMHgwMDllLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4OTI5MCwgMHgwMDE4LAorCTB4ODIxNCwgMHgyMGU5LCAweDAwMDAsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTMsIDB4MDAwMCwgMHgyMmE4LAorCTB4OTI4NCwgMHgwMGUwLCAweDAxMjgsIDB4MjBhOSwgMHgwMDIwLCAweDkyOTIsIDB4MDAyMCwgMHgwMDA4LAorCTB4OTAxNiwgMHgyMGExLCAweDAyNDAsIDB4OTAwNiwgMHg0MDA0LCAweDgyZmYsIDB4MDEyMCwgMHg2ODEwLAorCTB4ODAwMCwgMHg2ODEyLCAweDBjNjAsIDB4MDBkZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LAorCTB4MDBjNiwgMHgwMGE2LCAweDAwOTYsIDB4MDA2NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLAorCTB4MTllOCwgMHg3NjEwLCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDA5MDQsIDB4YWNkOSwgMHg3MDMwLAorCTB4OWMwNiwgMHgxNTIwLCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLCAweDkwMDUsIDB4MDkwNCwgMHhhY2FiLAorCTB4MDgwYywgMHhhMmEwLCAweDY4YzMsIDB4MDAwMCwgMHgwODBjLCAweGE3OGEsIDB4NzAzMywgMHgwMDAwLAorCTB4MDAzNiwgMHgyMDY5LCAweDAxNDAsIDB4NmIwNCwgMHg5Mzg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLAorCTB4MDEwMCwgMHgwODBjLCAweDJhOTksIDB4OTAwNiwgMHgwODBjLCAweDJhOTksIDB4MjA2OSwgMHgwMTAwLAorCTB4NjgyNCwgMHhkMDg0LCAweDAxMTAsIDB4NjgyNywgMHgwMDAxLCAweDAwM2UsIDB4NzAxMCwgMHg5YzM2LAorCTB4MTExMCwgMHg2NjBjLCAweDc2MTIsIDB4NzAwYywgMHg5YzM2LCAweDExNDAsIDB4MmMwMCwgMHg5ZjM2LAorCTB4MDExOCwgMHgyZjAwLCAweDcwMGUsIDB4MDAxMCwgMHg3MDBmLCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LAorCTB4MmMwMCwgMHg5ZjA2LCAweDAxMTAsIDB4N2UwZSwgMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLAorCTB4MDgwYywgMHhkMTIxLCAweDExODAsIDB4MDgwYywgMHgzMzQ0LCAweDA4MGMsIDB4ZDEzMiwgMHgxNTE4LAorCTB4MDgwYywgMHhiYjVjLCAweDA0MDAsIDB4MDgwYywgMHhhNzhhLCAweDY4MjQsIDB4ZDA4NCwgMHgwOWIwLAorCTB4NjgyNywgMHgwMDAxLCAweDA4OTgsIDB4MDgwYywgMHhkMTMyLCAweDExMTgsIDB4MDgwYywgMHhiYjVjLAorCTB4MDA5MCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZjE5LCAweDAxNjgsIDB4NjAyMCwgMHg5MDg2LAorCTB4MDAwMywgMHgxNTIwLCAweGE4NjcsIDB4MDEwMywgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLAorCTB4NzAxMiwgMHgwODBjLCAweGQxMGMsIDB4MDgwYywgMHhkM2FlLCAweDA4MGMsIDB4YjFhNywgMHgwODBjLAorCTB4YTY1ZCwgMHgwMGNlLCAweDA4MDQsIDB4YWM1YywgMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LAorCTB4YWM1YywgMHg3MDEzLCAweDAwMDAsIDB4NzAwZiwgMHgwMDAwLCAweDAxMmUsIDB4MDA2ZSwgMHgwMDllLAorCTB4MDBhZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LAorCTB4MDAwNiwgMHgxZDA4LCAweDA4MGMsIDB4ZWEzMCwgMHgwOGYwLCAweDAwZjYsIDB4MDAzNiwgMHgyMDc5LAorCTB4MDM4MCwgMHg3YjE4LCAweGQzYmMsIDB4MWRlOCwgMHg3ODMyLCAweDc5MzYsIDB4N2EzYSwgMHg3ODFiLAorCTB4ODA4MCwgMHgwMDNlLCAweDAwZmUsIDB4MDAwNSwgMHgwMDE2LCAweDIwMDEsIDB4MDM4MiwgMHgyMDA0LAorCTB4OTA4NCwgMHgwMDA3LCAweDkwODYsIDB4MDAwMSwgMHgxMTg4LCAweDIwMDEsIDB4MDAxNSwgMHgwYzI5LAorCTB4MjAwOSwgMHgxMDAwLCAweDIwMDEsIDB4MDM4MiwgMHgyMDA0LCAweDkwODQsIDB4MDAwNywgMHg5MDg2LAorCTB4MDAwMywgMHgwMTIwLCAweDgxMDksIDB4MWRiMCwgMHgwODBjLCAweDBkODUsIDB4MDAxZSwgMHgwMDA1LAorCTB4MjAwMSwgMHgwMzgyLCAweDIwMDQsIDB4OTA4NCwgMHgwMDA3LCAweDkwODYsIDB4MDAwMywgMHgxMTIwLAorCTB4MjAwMSwgMHgwMzgwLCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LAorCTB4MDBlNiwgMHg5MDBlLCAweDIwNzEsIDB4MTllOCwgMHgwNDY5LCAweDAxMDYsIDB4MDE5MCwgMHg3MDA0LAorCTB4OTA4NiwgMHgwMDAzLCAweDAxNDgsIDB4MjBhOSwgMHgxMDAwLCAweDYwNDQsIDB4ZDBmYywgMHgwMWQ4LAorCTB4MWYwNCwgMHhhZDM1LCAweDA4MGMsIDB4MGQ4NSwgMHgwODBjLCAweGFjZmMsIDB4NjA0NCwgMHhkMGZjLAorCTB4MDE5MCwgMHg3MDMwLCAweDljMDYsIDB4MTE0OCwgMHgwODBjLCAweDk5ZWQsIDB4NjA0NCwgMHhkMGRjLAorCTB4MDE1MCwgMHhjMGRjLCAweDYwNDYsIDB4NzAwYSwgMHg3MDQyLCAweDcwNGMsIDB4OWMwNiwgMHgxOTBjLAorCTB4MGQ4NSwgMHgwODBjLCAweDlhNDgsIDB4MDEwZSwgMHgxOTE5LCAweDAwZWUsIDB4MDAyZSwgMHgwMDFlLAorCTB4MDE1ZSwgMHgwMDA1LCAweDIwMDEsIDB4MDM4MiwgMHgyMDA0LCAweDkwODQsIDB4MDAwNywgMHg5MDg2LAorCTB4MDAwMywgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyNDAwLCAweDc4MDgsIDB4ZDBhNCwgMHgxOTBjLAorCTB4MGQ3ZSwgMHhkMDljLCAweDAxMjgsIDB4NzgyMCwgMHg5MDhjLCAweGYwMDAsIDB4MTFiOCwgMHgwMDEyLAorCTB4MDEyZSwgMHgwMDA1LCAweGFkODIsIDB4YWRjMCwgMHhhZGVmLCAweGFlMzcsIDB4YWU0NywgMHhhZTU4LAorCTB4YWU2NywgMHhhZTc1LCAweGFlYTIsIDB4YWVhNiwgMHhhZDgyLCAweGFkODIsIDB4YWVhOSwgMHhhZWM1LAorCTB4YWQ4MiwgMHhhZDgyLCAweDA4MGMsIDB4MGQ4NSwgMHgwMTJlLCAweDAwMDUsIDB4MjA2MCwgMHg2MDQ0LAorCTB4ZDBiYywgMHgwMTQwLCAweGMwYmMsIDB4NjA0NiwgMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLAorCTB4MGQ4NSwgMHgwMDEyLCAweDAxMmUsIDB4MDAwNSwgMHhhZGE3LCAweGFkYTksIDB4YWRhNywgMHhhZGFmLAorCTB4YWRhNywgMHhhZGE3LCAweGFkYTcsIDB4YWRhNywgMHhhZGE3LCAweGFkYTksIDB4YWRhNywgMHhhZGE5LAorCTB4YWRhNywgMHhhZGE5LCAweGFkYTcsIDB4YWRhNywgMHhhZGE3LCAweGFkYTksIDB4YWRhNywgMHgwODBjLAorCTB4MGQ4NSwgMHgyMDA5LCAweDAwMTMsIDB4MDgwYywgMHhiMjBhLCAweDAxMmUsIDB4MDAwNSwgMHg2MDE0LAorCTB4MjA0OCwgMHhhODdjLCAweGQwZGMsIDB4MDEzMCwgMHgwODBjLCAweDhjMTksIDB4MDgwYywgMHhiMTZjLAorCTB4MDEyZSwgMHgwMDA1LCAweDIwMDksIDB4MDA0OSwgMHgwODBjLCAweGIyMGEsIDB4MDEyZSwgMHgwMDA1LAorCTB4MDgwYywgMHhhY2ZjLCAweDIwMDEsIDB4MWEwZCwgMHgyMDAzLCAweDAwMDAsIDB4NzAzMCwgMHg5MDY1LAorCTB4MTEzMCwgMHg3MDA0LCAweDkwODYsIDB4MDAwMywgMHgwMWUwLCAweDA4MGMsIDB4MGQ4NSwgMHg3MDM0LAorCTB4OTA5MiwgMHhjMzUwLCAweDEyNTgsIDB4ODAwMCwgMHg3MDM2LCAweDcwMDQsIDB4OTA4NiwgMHgwMDAzLAorCTB4MDExMCwgMHg3MDA3LCAweDAwMDAsIDB4NzgxZiwgMHgwODA4LCAweDAwNTgsIDB4MDgwYywgMHhiMGMwLAorCTB4MDE0MCwgMHgwODBjLCAweGVlZWUsIDB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4MDAxNCwgMHgwODBjLAorCTB4YjIwYSwgMHg3ODFmLCAweDAxMDAsIDB4MDgwYywgMHhhZDE4LCAweDAxMmUsIDB4MDAwNSwgMHgwODBjLAorCTB4YWNmYywgMHg3MTRjLCAweDgxZmYsIDB4MTEyOCwgMHgyMDExLCAweDFhMTAsIDB4MjAxMywgMHgwMDAwLAorCTB4MDRjMCwgMHgyMDYxLCAweDAxMDAsIDB4NzE1MCwgMHg5MTkyLCAweDc1MzAsIDB4MTY3OCwgMHg4MTA4LAorCTB4NzE1MiwgMHg3MTRjLCAweDkxODYsIDB4MWI1NSwgMHgwMTIwLCAweDIwMDEsIDB4MDM5MSwgMHgyMDAzLAorCTB4MDQwMCwgMHg5MTg4LCAweDAwMDgsIDB4MjEwYywgMHg5MThlLCAweDAwMDYsIDB4MTE2MCwgMHg2MDE0LAorCTB4OTA4NCwgMHgxOTg0LCAweDkwODUsIDB4MDAxMiwgMHg3MTRjLCAweDkxOGUsIDB4MWI1NSwgMHgxMTA4LAorCTB4YzBmZCwgMHg2MDE2LCAweDAwYjAsIDB4NzE0YywgMHg5MTg4LCAweDAwMDgsIDB4MjEwYywgMHg5MThlLAorCTB4MDAwOSwgMHgwZDY4LCAweDYwMTQsIDB4OTA4NCwgMHgxOTg0LCAweDkwODUsIDB4MDAxNiwgMHg3MTRjLAorCTB4OTE4ZSwgMHgxYjU1LCAweDExMDgsIDB4YzBmZCwgMHg2MDE2LCAweDAwMTgsIDB4NzA2YywgMHhjMDg1LAorCTB4NzA2ZSwgMHg3ODFmLCAweDAyMDAsIDB4MDgwYywgMHhhZDE4LCAweDAxMmUsIDB4MDAwNSwgMHgwODBjLAorCTB4YWNmYywgMHg3MTRjLCAweDIxNjAsIDB4NjAwMywgMHgwMDAzLCAweDIwMDksIDB4MDA0YSwgMHgwODBjLAorCTB4YjIwYSwgMHg3ODFmLCAweDAyMDAsIDB4MDgwYywgMHhhZDE4LCAweDAxMmUsIDB4MDAwNSwgMHg3ODA4LAorCTB4ZDA5YywgMHgwZGU4LCAweDc4MjAsIDB4MjA2MCwgMHg2MDAzLCAweDAwMDMsIDB4MDgwYywgMHhhY2ZjLAorCTB4MDgwYywgMHgxZGNjLCAweDc4MWYsIDB4MDQwMCwgMHgwODBjLCAweGFkMTgsIDB4MDEyZSwgMHgwMDA1LAorCTB4NzgwOCwgMHhkMDljLCAweDBkZTgsIDB4NzgyMCwgMHgyMDYwLCAweDA4MGMsIDB4YWNmYywgMHgwODBjLAorCTB4MWUxNCwgMHg3ODFmLCAweDA0MDAsIDB4MDgwYywgMHhhZDE4LCAweDAxMmUsIDB4MDAwNSwgMHg3MDMwLAorCTB4OTA2NSwgMHgwMTQ4LCAweDYwNDQsIDB4YzBiYywgMHg2MDQ2LCAweDcxMDQsIDB4OTE4NiwgMHgwMDAzLAorCTB4MDExMCwgMHgwODBjLCAweDlhYjQsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsIDB4NzAzYywgMHg5MDg2LAorCTB4MDAwMiwgMHgwNTI4LCAweDcwNGMsIDB4OTA3ZCwgMHgwNTEwLCAweDc4NDQsIDB4YzBiYywgMHg3ODQ2LAorCTB4NzgyMCwgMHg5MDg2LCAweDAwMDksIDB4MDExOCwgMHgwODBjLCAweGExY2EsIDB4MDBjMCwgMHg3ODI4LAorCTB4ZDBmYywgMHgxMTE4LCAweDA4MGMsIDB4YTE0OSwgMHgwMDkwLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LAorCTB4OTA4NCwgMHgwMDI4LCAweDExMzAsIDB4MjAwMSwgMHgxOTdjLCAweDIwMDQsIDB4OTA4NiwgMHhhYWFhLAorCTB4MTEyMCwgMHgyMDAxLCAweDAzODcsIDB4MjAwMywgMHgxMDAwLCAweDA4MGMsIDB4YTBjZSwgMHgwMGZlLAorCTB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4Nzg0MCwgMHgwMTJlLCAweDAwMDUsIDB4MDgwYywgMHgwZDg1LAorCTB4MDAwNSwgMHgyMDA5LCAweDFiNjYsIDB4MjEwNCwgMHhkMGJjLCAweDAxYTgsIDB4YzBiYywgMHgyMDBhLAorCTB4MjAwOSwgMHgwMTBiLCAweDIxMDQsIDB4OTA4NSwgMHgwMDAyLCAweDIwMGEsIDB4MjAwOSwgMHgwMTAxLAorCTB4MjEwNCwgMHhjMGFjLCAweDIwMGEsIDB4MjAwOSwgMHgwMTA1LCAweDIxMDQsIDB4OTA4NCwgMHgxOTg0LAorCTB4OTA4NSwgMHg4MDkyLCAweDIwMGEsIDB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4OGE1OCwgMHgyMDA5LAorCTB4MDEwYiwgMHgyMTA0LCAweGQwOGMsIDB4MDFhOCwgMHhjMDhjLCAweDIwMGEsIDB4MjAwMSwgMHgxODQ4LAorCTB4MjAwNCwgMHhkMDk0LCAweDExMzAsIDB4MjAwOSwgMHgwMTAxLCAweDIxMDQsIDB4OTA4NSwgMHgwMDIwLAorCTB4MjAwYSwgMHgyMDA5LCAweDFiNjYsIDB4MjAwYiwgMHgwMDAwLCAweDIwMDEsIDB4MDAxYiwgMHgwODBjLAorCTB4YWNlZCwgMHgwMTJlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZTgsIDB4NjA0NCwgMHhjMGJjLAorCTB4NjA0NiwgMHhkMGZjLCAweDAxYjgsIDB4NzA0YywgMHg5YzA2LCAweDExOTAsIDB4MjAxOSwgMHgwMDAxLAorCTB4MDgwYywgMHhhNTk2LCAweDcwNGYsIDB4MDAwMCwgMHgyMDAxLCAweDAxMDksIDB4MjAwNCwgMHhkMDhjLAorCTB4MTEzOCwgMHgyMDAxLCAweDAxMDgsIDB4MjAwNCwgMHhkMGJjLCAweDExMTAsIDB4NzAzZiwgMHgwMDAwLAorCTB4MDgwYywgMHhhN2ExLCAweDAwZWUsIDB4MDAwNSwgMHgwMDI2LCAweDcwMTAsIDB4OWMwNiwgMHgxMTc4LAorCTB4MDgwYywgMHhhNjVkLCAweDYwNDQsIDB4YzBmYywgMHg2MDQ2LCAweDYwMGMsIDB4OTAxNSwgMHgwMTIwLAorCTB4NzIxMiwgMHg2MDBmLCAweDAwMDAsIDB4MDAxMCwgMHg3MjEyLCAweDcyMGUsIDB4OTAwNiwgMHgwMDJlLAorCTB4MDAwNSwgMHgwMDI2LCAweDcwMjAsIDB4OWMwNiwgMHgxMTc4LCAweDA4MGMsIDB4YTY1ZCwgMHg2MDQ0LAorCTB4YzBmYywgMHg2MDQ2LCAweDYwMGMsIDB4OTAxNSwgMHgwMTIwLCAweDcyMjIsIDB4NjAwZiwgMHgwMDAwLAorCTB4MDAxMCwgMHg3MjIyLCAweDcyMWUsIDB4OTAwNiwgMHgwMDJlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDM2LAorCTB4NzgzMCwgMHg5YzA2LCAweDE1NTgsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4OTAwNSwgMHgwMWY4LAorCTB4MDgwYywgMHg4YTRiLCAweDA4MGMsIDB4YTJhMCwgMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHhhNzhhLAorCTB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4OTM4NCwgMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLAorCTB4MDgwYywgMHgyYTk5LCAweDkwMDYsIDB4MDgwYywgMHgyYTk5LCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LAorCTB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHg5MDg1LCAweDAwMDEsIDB4MDAzOCwgMHg3ODA4LAorCTB4YzBhZCwgMHg3ODBhLCAweDYwMDMsIDB4MDAwOSwgMHg2MzBhLCAweDkwMDYsIDB4MDAzZSwgMHgwMGRlLAorCTB4MDAwNSwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHg2MTAwLCAweDIwMTksIDB4MDEwMCwgMHgyMDAxLAorCTB4MDM4MiwgMHgyMDA0LCAweGQwOWMsIDB4MDE5MCwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLAorCTB4MDAxNiwgMHgwMDM2LCAweDA4MGMsIDB4YWQ2MiwgMHgwMDNlLCAweDAwMWUsIDB4MDEyZSwgMHgwMGNlLAorCTB4NjIwMCwgMHgyMjAwLCAweDkxMDYsIDB4MGQ1OCwgMHgyMjAwLCAweDAwMTAsIDB4ODMxOSwgMHgxZDM4LAorCTB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwODBjLAorCTB4YWNmYywgMHgwMTA2LCAweDIwNzEsIDB4MTllOCwgMHgyMDY5LCAweDAxMDAsIDB4NzA0YywgMHgyMDYwLAorCTB4OTA4NiwgMHgxYjU1LCAweDE1YjgsIDB4NjgxNCwgMHhkMDhjLCAweDAxODgsIDB4NjgxNywgMHgwMDEwLAorCTB4MjAwOSwgMHgwMDE5LCAweDgxMDksIDB4MWRmMCwgMHgyMDAxLCAweDAwMzIsIDB4NjkyMCwgMHhkMWJjLAorCTB4MDEzMCwgMHg4MDAxLCAweDFkZDgsIDB4NjkyYywgMHg5MThkLCAweDAwMDgsIDB4NjkyZSwgMHg2ODI0LAorCTB4ZDA4YywgMHgwMTEwLCAweDY4MjcsIDB4MDAwMiwgMHg2OGQwLCAweDkwMDUsIDB4MDExOCwgMHg5MDgyLAorCTB4MDAwNSwgMHgwMjM4LCAweDYwNjAsIDB4ODAwMCwgMHg2MDYyLCAweDIwMDEsIDB4MDM5MSwgMHgyMDAzLAorCTB4MDQwMCwgMHgwODBjLCAweDlhNDgsIDB4NjgyYywgMHg5MDg0LCAweGZmZmQsIDB4NjgyZSwgMHgyMDAxLAorCTB4MTg0OCwgMHgyMDA0LCAweGQwOTQsIDB4MTEyMCwgMHg2ODA0LCAweDkwODUsIDB4MDAyMCwgMHg2ODA2LAorCTB4MjA2OSwgMHgwMDAwLCAweDAxMGUsIDB4MDkwYywgMHhhZDE4LCAweDhkZmYsIDB4MDBjZSwgMHgwMGRlLAorCTB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDA4MGMsIDB4YWNmYywgMHgwMTA2LAorCTB4MjA3MSwgMHgxOWU4LCAweDIwNjksIDB4MDEwMCwgMHgwODBjLCAweGFmODQsIDB4NjhkMCwgMHg5MDA1LAorCTB4MDE1OCwgMHg5MDgyLCAweDAwMDUsIDB4MTI0MCwgMHgwODBjLCAweDJiMzMsIDB4MjAwMSwgMHgwMzkxLAorCTB4MjAwMywgMHgwNDAwLCAweDIwNjksIDB4MDAwMCwgMHgwMTBlLCAweDA5MGMsIDB4YWQxOCwgMHg4ZGZmLAorCTB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMDE2LCAweDIwMDEsIDB4MDEzNCwgMHgyMDA0LAorCTB4OTAwNSwgMHgwMTQwLCAweDkwODIsIDB4MDAwNSwgMHgxMjI4LCAweDIwMDEsIDB4MDM5MSwgMHgyMDAzLAorCTB4MDQwNCwgMHgwMDIwLCAweDIwMDEsIDB4MDM5MSwgMHgyMDAzLCAweDA0MDAsIDB4MDAxZSwgMHgwMDA1LAorCTB4MDBkNiwgMHgwMTU2LCAweDA4MGMsIDB4OWY0MywgMHg3YTE0LCAweDgyZmYsIDB4MDEzOCwgMHg3MDAzLAorCTB4MDEwMCwgMHg3MDBiLCAweDAwMDMsIDB4NjBjMywgMHgwMDA4LCAweDA0OTAsIDB4NzAwMywgMHgwMjAwLAorCTB4NzAwNywgMHgwMDAwLCAweDIwNjksIDB4MTgwMCwgMHg5MDFlLCAweDY4MDAsIDB4OTA4NiwgMHgwMDA0LAorCTB4MTExMCwgMHhjMzhkLCAweDAwNjAsIDB4MDgwYywgMHg3NzllLCAweDExMTAsIDB4YzNhZCwgMHgwMDA4LAorCTB4YzNhNSwgMHg2YWRjLCAweGQyOWMsIDB4MTExMCwgMHhkMmFjLCAweDAxMDgsIDB4YzM5ZCwgMHg3MzBlLAorCTB4MDgwYywgMHg4YjEwLCAweDIwYTksIDB4MDAwNiwgMHgyMDExLCAweGZmZWMsIDB4MjAxOSwgMHhmZmVkLAorCTB4MjA3MSwgMHgwMjUwLCAweDIzMDUsIDB4MjA3MiwgMHg4ZTcwLCAweDIyMDUsIDB4MjA3MiwgMHg4ZTcwLAorCTB4OTM5OCwgMHgwMDAyLCAweDkyOTAsIDB4MDAwMiwgMHgxZjA0LCAweGIwM2EsIDB4NjBjMywgMHgwMDIwLAorCTB4MDgwYywgMHhhMjcwLCAweDAxNWUsIDB4MDBkZSwgMHgwMDA1LCAweDAxNTYsIDB4MDgwYywgMHg5ZjQzLAorCTB4N2ExNCwgMHg4MmZmLCAweDAxNjgsIDB4OTI4NiwgMHhmZmZmLCAweDAxMTgsIDB4OTI4MiwgMHgwMDBlLAorCTB4MTIzOCwgMHg3MDAzLCAweDAxMDAsIDB4NzAwYiwgMHgwMDAzLCAweDYwYzMsIDB4MDAwOCwgMHgwNDg4LAorCTB4NzAwMywgMHgwMjAwLCAweDcwMDcsIDB4MDAxYywgMHg3MDBmLCAweDAwMDEsIDB4MjAxMSwgMHgxOWJlLAorCTB4MjIwNCwgMHg4MDA3LCAweDcwMWEsIDB4ODIxMCwgMHgyMjA0LCAweDgwMDcsIDB4NzAxZSwgMHgwNDIxLAorCTB4MTEyMCwgMHhiOGEwLCAweDkwODIsIDB4MDA3ZiwgMHgwMjQ4LCAweDIwMDEsIDB4MTgxZiwgMHgyMDA0LAorCTB4NzAyMiwgMHgyMDAxLCAweDE4MjAsIDB4MjAwNCwgMHg3MDI2LCAweDAwMzAsIDB4MjAwMSwgMHgxODE4LAorCTB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4NzAyNiwgMHgyMGE5LCAweDAwMDQsIDB4MjBlMSwgMHgwMDAxLAorCTB4MjA5OSwgMHgxODA1LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNTYsIDB4NDAwMywgMHg2MGMzLAorCTB4MDAxYywgMHgwMTVlLCAweDA4MDQsIDB4YTI3MCwgMHgwMDA2LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LAorCTB4ZDBhYywgMHgwMDBlLCAweDAwMDUsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4YTYyYiwgMHgyMDExLAorCTB4MDAwMiwgMHgwODBjLCAweGE2MzUsIDB4MDgwYywgMHhhNTE2LCAweDAwMzYsIDB4OTAxZSwgMHgwODBjLAorCTB4YTU5NiwgMHgwMDNlLCAweDAwMDUsIDB4MDgwYywgMHgzNDg3LCAweDAxODgsIDB4MDAxNiwgMHgwMGI2LAorCTB4MDBjNiwgMHg3MDEwLCAweDkwODUsIDB4MDAyMCwgMHg3MDEyLCAweDIwMDksIDB4MDA3ZSwgMHgwODBjLAorCTB4NjdiNCwgMHhiODVjLCAweGMwYWMsIDB4Yjg1ZSwgMHgwMGNlLCAweDAwYmUsIDB4MDAxZSwgMHgwMDA1LAorCTB4MDBkNiwgMHgwMGY2LCAweDcxMDQsIDB4OTE4NiwgMHgwMDA0LCAweDExMzAsIDB4NzQxMCwgMHg5ZTkwLAorCTB4MDAwNCwgMHg5ZTk4LCAweDAwMDMsIDB4MDA4OCwgMHg5MTg2LCAweDAwMDEsIDB4MTEzMCwgMHg3NDIwLAorCTB4OWU5MCwgMHgwMDA4LCAweDllOTgsIDB4MDAwNywgMHgwMDQwLCAweDkxODYsIDB4MDAwMiwgMHgxNTM4LAorCTB4NzQyOCwgMHg5ZTkwLCAweDAwMGEsIDB4OWU5OCwgMHgwMDA5LCAweDYxMTAsIDB4MjQ2OCwgMHg2ODBjLAorCTB4OTA3ZCwgMHgwMWU4LCAweDc4MTAsIDB4OTEwNiwgMHgxMTI4LCAweDJmNjgsIDB4NzgwYywgMHg5MDdkLAorCTB4MWRjOCwgMHgwMGE4LCAweDc4MGMsIDB4NjgwZSwgMHg3YzBlLCAweDJmMTIsIDB4MjMwNCwgMHg5ZjA2LAorCTB4MTEwOCwgMHgyZDFhLCAweDkwMDYsIDB4NzAzMiwgMHg3MDM2LCAweDcwMDQsIDB4OTA4NiwgMHgwMDAzLAorCTB4MDExMCwgMHg3MDA3LCAweDAwMDAsIDB4OTAwNiwgMHgwMGZlLCAweDAwZGUsIDB4MDAwNSwgMHg5MDg1LAorCTB4MDAwMSwgMHgwY2QwLCAweDIwNzEsIDB4MTg4ZCwgMHg3MDAwLCAweDkwMDUsIDB4MDE0MCwgMHgyMDAxLAorCTB4MDgxMiwgMHgyMDcxLCAweDE4MDAsIDB4NzA3NiwgMHg3MDdhLCAweDcwNmIsIDB4ZmZkNCwgMHgyMDcxLAorCTB4MTgwMCwgMHg3MDc0LCAweDcwNTYsIDB4NzA1YiwgMHgxZGRjLCAweDAwMDUsIDB4MDBlNiwgMHgwMTI2LAorCTB4MjA3MSwgMHgxODAwLCAweDIwOTEsIDB4ODAwMCwgMHg3NTU0LCAweDk1ODIsIDB4MDAxMCwgMHgwNjA4LAorCTB4NzA1OCwgMHgyMDYwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4OWNlMCwgMHgwMDFjLAorCTB4NzA2OCwgMHg5YzAyLCAweDEyMDgsIDB4MGNiMCwgMHgyMDYxLCAweDFkZGMsIDB4MGM5OCwgMHg2MDAzLAorCTB4MDAwOCwgMHg4NTI5LCAweDc1NTYsIDB4OWNhOCwgMHgwMDFjLCAweDcwNjgsIDB4OTUwMiwgMHgxMjMwLAorCTB4NzU1YSwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4NzA1YiwgMHgxZGRjLAorCTB4MGNjMCwgMHg5MDA2LCAweDBjYzAsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzU1NCwgMHg5NTgyLAorCTB4MDAxMCwgMHgwNjAwLCAweDcwNTgsIDB4MjA2MCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTQ4LAogCTB4OWNlMCwgMHgwMDFjLCAweDcwNjgsIDB4OWMwMiwgMHgxMjA4LCAweDBjYjAsIDB4MjA2MSwgMHgxZGRjLAogCTB4MGM5OCwgMHg2MDAzLCAweDAwMDgsIDB4ODUyOSwgMHg3NTU2LCAweDljYTgsIDB4MDAxYywgMHg3MDY4LAotCTB4OTUwMiwgMHgxMjMwLCAweDc1NWEsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LAotCTB4NzA1YiwgMHgxZGRjLCAweDBjYzAsIDB4OTAwNiwgMHgwY2MwLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLAotCTB4NzU1NCwgMHg5NTgyLCAweDAwMTAsIDB4MDYwMCwgMHg3MDU4LCAweDIwNjAsIDB4NjAwMCwgMHg5MDg2LAotCTB4MDAwMCwgMHgwMTQ4LCAweDljZTAsIDB4MDAxYywgMHg3MDY4LCAweDljMDIsIDB4MTIwOCwgMHgwY2IwLAotCTB4MjA2MSwgMHgxZGRjLCAweDBjOTgsIDB4NjAwMywgMHgwMDA4LCAweDg1MjksIDB4NzU1NiwgMHg5Y2E4LAotCTB4MDAxYywgMHg3MDY4LCAweDk1MDIsIDB4MTIyOCwgMHg3NTVhLCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLAotCTB4MDAwNSwgMHg3MDViLCAweDFkZGMsIDB4MGNjOCwgMHg5MDA2LCAweDBjYzgsIDB4OWM4MiwgMHgxZGRjLAotCTB4MGEwYywgMHgwZDc5LCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDljMDIsIDB4MWEwYywgMHgwZDc5LAotCTB4OTAwNiwgMHg2MDA2LCAweDYwMGEsIDB4NjAwZSwgMHg2MDE2LCAweDYwMWEsIDB4NjAxMiwgMHg2MDIzLAotCTB4MDAwMCwgMHg2MDAzLCAweDAwMDAsIDB4NjAxZSwgMHg2MDVlLCAweDYwNjIsIDB4NjAyNiwgMHg2MDJhLAotCTB4NjAyZSwgMHg2MDMyLCAweDYwMzYsIDB4NjAzYSwgMHg2MDNlLCAweDYwNGEsIDB4NjAyYSwgMHg2MDQ2LAotCTB4NjA0MiwgMHgyMDYxLCAweDE4MDAsIDB4NjA1NCwgMHg4MDAwLCAweDYwNTYsIDB4MDAwNSwgMHg5MDA2LAotCTB4NjAwZSwgMHg2MDE2LCAweDYwMWEsIDB4NjAxMiwgMHg2MDIyLCAweDYwMDIsIDB4NjAxZSwgMHg2MDVlLAotCTB4NjA2MiwgMHg2MDRhLCAweDYwNDYsIDB4MjA2MSwgMHgxODAwLCAweDYwNTQsIDB4ODAwMCwgMHg2MDU2LAotCTB4MDAwNSwgMHgwMDA2LCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDAxZDgsIDB4NjAxYywgMHhkMDg0LAotCTB4MTkwYywgMHgxYWYwLCAweDYwMjMsIDB4MDAwNywgMHgyMDAxLCAweDE5ODcsIDB4MjAwNCwgMHgwMDA2LAotCTB4OTA4MiwgMHgwMDUxLCAweDAwMGUsIDB4MDIwOCwgMHg4MDA0LCAweDYwMWEsIDB4MDgwYywgMHhlOWYwLAotCTB4NjA0YiwgMHgwMDAwLCAweDYwNDQsIDB4ZDBmYywgMHgxMTMxLCAweDkwMDYsIDB4NjA0NiwgMHg2MDE2LAotCTB4NjAxMiwgMHgwMDBlLCAweDAwMDUsIDB4MDgwYywgMHhhYWY3LCAweDAxMDYsIDB4MjAwMSwgMHgxOWZjLAotCTB4MjAwNCwgMHg5YzA2LCAweDExMzAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhMzkxLAotCTB4MDAzZSwgMHgwODBjLCAweGE1OWMsIDB4MDEwZSwgMHgwOTBjLCAweGFiMTMsIDB4MDAwNSwgMHgwMGU2LAotCTB4MDEyNiwgMHgyMDcxLCAweDE4MDAsIDB4MjA5MSwgMHg4MDAwLCAweDc1NTQsIDB4OTU4MiwgMHgwMDAxLAotCTB4MDYwOCwgMHg3MDU4LCAweDIwNjAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg5Y2UwLAotCTB4MDAxYywgMHg3MDY4LCAweDljMDIsIDB4MTIwOCwgMHgwY2IwLCAweDIwNjEsIDB4MWRkYywgMHgwYzk4LAotCTB4NjAwMywgMHgwMDA4LCAweDg1MjksIDB4NzU1NiwgMHg5Y2E4LCAweDAwMWMsIDB4NzA2OCwgMHg5NTAyLAotCTB4MTIzMCwgMHg3NTVhLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDViLAotCTB4MWRkYywgMHgwY2MwLCAweDkwMDYsIDB4MGNjMCwgMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDAyLAotCTB4YjAwMCwgMHhiMDBhLCAweGIwMjUsIDB4YjA0MCwgMHhkM2IwLCAweGQzY2QsIDB4ZDNlOCwgMHhiMDAwLAotCTB4YjAwYSwgMHg5MTkxLCAweGIwNTksIDB4YjAwMCwgMHhiMDAwLCAweGIwMDAsIDB4YjAwMCwgMHhiMDAwLAotCTB4OTE4NiwgMHgwMDEzLCAweDExMzAsIDB4NjA0NCwgMHhkMGZjLCAweDAxMTAsIDB4MDgwYywgMHg5N2Y2LAotCTB4MDAwNSwgMHgwMDA1LCAweDAwNjYsIDB4NjAwMCwgMHg5MGIyLCAweDAwMTAsIDB4MWEwYywgMHgwZDc5LAotCTB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4YjAyMywgMHhiNzljLCAweGI5ODMsIDB4YjAyMywgMHhiYTE5LAotCTB4YjMyMiwgMHhiMDIzLCAweGIwMjMsIDB4YjcxZSwgMHhiZjhjLCAweGIwMjMsIDB4YjAyMywgMHhiMDIzLAotCTB4YjAyMywgMHhiMDIzLCAweGIwMjMsIDB4MDgwYywgMHgwZDc5LCAweDAwNjYsIDB4NjAwMCwgMHg5MGIyLAotCTB4MDAxMCwgMHgxYTBjLCAweDBkNzksIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4YjAzZSwgMHhjNWE3LAotCTB4YjAzZSwgMHhiMDNlLCAweGIwM2UsIDB4YjAzZSwgMHhiMDNlLCAweGIwM2UsIDB4YzUzZSwgMHhjNzJhLAotCTB4YjAzZSwgMHhjNWU0LCAweGM2NjgsIDB4YzVlNCwgMHhjNjY4LCAweGIwM2UsIDB4MDgwYywgMHgwZDc5LAotCTB4NjAwMCwgMHg5MDgyLCAweDAwMTAsIDB4MWEwYywgMHgwZDc5LCAweDYwMDAsIDB4MDAwMiwgMHhiMDU3LAotCTB4YmZkNiwgMHhjMDcwLCAweGMxZjMsIDB4YzI2MiwgMHhiMDU3LCAweGIwNTcsIDB4YjA1NywgMHhiZmE1LAotCTB4YzRiZiwgMHhjNGMyLCAweGIwNTcsIDB4YjA1NywgMHhiMDU3LCAweGIwNTcsIDB4YzRmMiwgMHgwODBjLAotCTB4MGQ3OSwgMHgwMDY2LCAweDYwMDAsIDB4OTBiMiwgMHgwMDEwLCAweDFhMGMsIDB4MGQ3OSwgMHgwMDEzLAotCTB4MDA2ZSwgMHgwMDA1LCAweGIwNzIsIDB4YjA3MiwgMHhiMGIwLCAweGIxNGYsIDB4YjFjZiwgMHhiMDcyLAotCTB4YjA3MiwgMHhiMDcyLCAweGIwNzQsIDB4YjA3MiwgMHhiMDcyLCAweGIwNzIsIDB4YjA3MiwgMHhiMDcyLAotCTB4YjA3MiwgMHhiMDcyLCAweDA4MGMsIDB4MGQ3OSwgMHg5MTg2LCAweDAwNGMsIDB4MDU2MCwgMHg5MTg2LAotCTB4MDAwMywgMHgxOTBjLCAweDBkNzksIDB4MDA5NiwgMHg2MDFjLCAweGMwZWQsIDB4NjAxZSwgMHg2MDAzLAotCTB4MDAwMywgMHg2MTA2LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweDkwODQsIDB4YTAwMCwgMHhjMGI1LAotCTB4YTg3ZSwgMHhhOGFjLCAweGE4MzYsIDB4YThiMCwgMHhhODNhLCAweDkwMDYsIDB4YTg0NiwgMHhhODRhLAotCTB4YTg4NCwgMHg5MDkyLCAweDE5OWEsIDB4MDIxMCwgMHgyMDAxLCAweDE5OTksIDB4ODAwMywgMHg4MDEzLAotCTB4ODIxMywgMHg5MjEwLCAweDYyMWEsIDB4MDA5ZSwgMHgwODBjLCAweDFjNDMsIDB4MjAwOSwgMHg4MDMwLAotCTB4MDgwYywgMHg5NDY3LCAweDAwMDUsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmNhMCwgMHgwMGJlLAotCTB4MmMwMCwgMHgwODBjLCAweGIxZjEsIDB4MDgwYywgMHhkMzc1LCAweDYwMDMsIDB4MDAwNywgMHgwMDA1LAotCTB4MDBkNiwgMHgwMDk2LCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDdhOTAsIDB4NjAxNCwgMHgyMDQ4LAotCTB4YTg3YywgMHhkMGVjLCAweDExMTAsIDB4OTI5MCwgMHgwMDE4LCAweGFjNzgsIDB4YzRmYywgMHgwMDQ2LAotCTB4YThlMCwgMHg5MDA1LCAweDExNDAsIDB4YThkYywgMHg5MjFhLCAweDAxNDAsIDB4MDIyMCwgMHhhODdiLAotCTB4MDAwNywgMHgyMDEwLCAweDAwMjgsIDB4YTg3YiwgMHgwMDE1LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLAotCTB4ODIxNCwgMHhhODgzLCAweDAwMDAsIDB4YWEwMiwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMGM2LAotCTB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MjQwMCwgMHg5MDA1LCAweDExMDgsIDB4MDA5YSwgMHgyMTAwLAotCTB4OTA4NiwgMHgwMDE1LCAweDExMTgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMzgsIDB4MjEwMCwgMHg5MDg2LAotCTB4MDAxNiwgMHgwMTE4LCAweDIwMDEsIDB4MDAwMSwgMHgwMDJhLCAweDk0YTQsIDB4MDAwNywgMHg4NDIzLAotCTB4OTQwNSwgMHgwMDAyLCAweGIxMTcsIDB4YjExNywgMHhiMTEyLCAweGIxMTUsIDB4YjExNywgMHhiMTBmLAotCTB4YjEwMiwgMHhiMTAyLCAweGIxMDIsIDB4YjEwMiwgMHhiMTAyLCAweGIxMDIsIDB4YjEwMiwgMHhiMTAyLAotCTB4YjEwMiwgMHhiMTAyLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLAotCTB4MDAwZSwgMHgwMDRlLCAweDAwZmUsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLAotCTB4YmJkYSwgMHgwMDI4LCAweDA4MGMsIDB4YmNjMSwgMHgwMDEwLCAweDA4MGMsIDB4YmRiNywgMHgwMGZlLAotCTB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDJjMDAsIDB4YTg5NiwgMHgwMDBlLAotCTB4MDgwYywgMHhiMmFmLCAweDA1MzAsIDB4YTgwNCwgMHhhODBlLCAweDAwYTYsIDB4MjA1MCwgMHhiMTAwLAotCTB4MDBhZSwgMHg4MDA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLAotCTB4OTA4MCwgMHgwMDAyLCAweGFhY2MsIDB4YWJkMCwgMHhhY2Q0LCAweGFkZDgsIDB4MjAzMSwgMHgwMDAwLAotCTB4MjA0MSwgMHgxMmI2LCAweDA4MGMsIDB4YjQ3MywgMHgwMTYwLCAweDAwMGUsIDB4OTAwNSwgMHgwMTIwLAotCTB4MDBmZSwgMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHgwMGZlLCAweDAwOWUsIDB4MDBkZSwgMHgwODA0LAotCTB4YWY0ZSwgMHgyMDAxLCAweDAwMmMsIDB4OTAwZSwgMHgwODBjLCAweGIzMTUsIDB4MGM3MCwgMHg5MWI2LAotCTB4MDAxNSwgMHgwMTcwLCAweDkxYjYsIDB4MDAxNiwgMHgwMTU4LCAweDkxYjIsIDB4MDA0NywgMHgwYTBjLAotCTB4MGQ3OSwgMHg5MWIyLCAweDAwNTAsIDB4MWEwYywgMHgwZDc5LCAweDkxODIsIDB4MDA0NywgMHgwMDQyLAotCTB4MDgwYywgMHhhZDRkLCAweDAxMjAsIDB4OTA4NiwgMHgwMDAyLCAweDA5MDQsIDB4YjBiMCwgMHgwMDA1LAotCTB4YjE3MSwgMHhiMTcxLCAweGIxNzMsIDB4YjFhNSwgMHhiMTcxLCAweGIxNzEsIDB4YjE3MSwgMHhiMTcxLAotCTB4YjFiOCwgMHgwODBjLCAweDBkNzksIDB4MDBkNiwgMHgwMDE2LCAweDAwOTYsIDB4NjAwMywgMHgwMDA0LAotCTB4NjExNCwgMHgyMTQ4LCAweGE4N2MsIDB4ZDBmYywgMHgwMWMwLCAweGE4NzgsIDB4YzBmYywgMHg5MDA1LAotCTB4MTE1OCwgMHhhODk0LCAweDkwMDUsIDB4MDE0MCwgMHgyMDAxLCAweDAwMDAsIDB4OTAwZSwgMHgwODBjLAotCTB4YjMxNSwgMHgwODBjLCAweGFmNGUsIDB4MDBhOCwgMHg2MDAzLCAweDAwMDIsIDB4YThhNCwgMHhhOWE4LAotCTB4OTEwNSwgMHgxMTc4LCAweGE4YWUsIDB4YThiMiwgMHgwYzc4LCAweGE4N2YsIDB4MDAyMCwgMHhhODhjLAotCTB4YTg4YSwgMHhhOGE0LCAweGE4YWUsIDB4YThhOCwgMHhhOGIyLCAweGE4YzcsIDB4MDAwMCwgMHhhOGNiLAotCTB4MDAwMCwgMHgwMDllLCAweDAwMWUsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsIDB4OTg1MSwgMHgwMGQ2LAotCTB4MDA5NiwgMHg2MTE0LCAweDIxNDgsIDB4MDgwYywgMHhjYzMzLCAweDAxMjAsIDB4YTg3YiwgMHgwMDA2LAotCTB4MDgwYywgMHg2ZjExLCAweDAwOWUsIDB4MDBkZSwgMHgwODBjLCAweGFmNGUsIDB4MDgwNCwgMHg5OGJjLAotCTB4MDgwYywgMHg5ODUxLCAweDA4MGMsIDB4MzJmYiwgMHgwODBjLCAweGQzNzIsIDB4MDBkNiwgMHgwMDk2LAotCTB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4Y2MzMywgMHgwMTIwLCAweGE4N2IsIDB4MDAyOSwgMHgwODBjLAotCTB4NmYxMSwgMHgwMDllLCAweDAwZGUsIDB4MDgwYywgMHhhZjRlLCAweDA4MDQsIDB4OThiYywgMHg5MTgyLAotCTB4MDA0NywgMHgwMDAyLCAweGIxZGYsIDB4YjFlMSwgMHhiMWRmLCAweGIxZGYsIDB4YjFkZiwgMHhiMWRmLAotCTB4YjFkZiwgMHhiMWRmLCAweGIxZGYsIDB4YjFkZiwgMHhiMWRmLCAweGIxZGYsIDB4YjFlMSwgMHgwODBjLAotCTB4MGQ3OSwgMHgwMGQ2LCAweDAwOTYsIDB4NjAxZiwgMHgwMDAwLCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLAotCTB4MDAwMCwgMHhhODgzLCAweDAwMDAsIDB4MDgwYywgMHg2ZjExLCAweDAwOWUsIDB4MDBkZSwgMHgwODA0LAotCTB4YWY0ZSwgMHgwMDI2LCAweDAwMzYsIDB4MDA1NiwgMHgwMDY2LCAweDAwOTYsIDB4MDBhNiwgMHgwMGY2LAotCTB4MDAwNiwgMHgwODBjLCAweDEwNGQsIDB4MDAwZSwgMHgwOTBjLCAweDBkNzksIDB4YTk2MCwgMHgyMWU4LAorCTB4OTUwMiwgMHgxMjI4LCAweDc1NWEsIDB4OTA4NSwgMHgwMDAxLCAweDAwZWUsIDB4MDAwNSwgMHg3MDViLAorCTB4MWRkYywgMHgwY2M4LCAweDkwMDYsIDB4MGNjOCwgMHg5YzgyLCAweDFkZGMsIDB4MGEwYywgMHgwZDg1LAorCTB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxYTBjLCAweDBkODUsIDB4OTAwNiwgMHg2MDA2LAorCTB4NjAwYSwgMHg2MDBlLCAweDYwMTYsIDB4NjAxYSwgMHg2MDEyLCAweDYwMjMsIDB4MDAwMCwgMHg2MDAzLAorCTB4MDAwMCwgMHg2MDFlLCAweDYwNWUsIDB4NjA2MiwgMHg2MDI2LCAweDYwMmEsIDB4NjAyZSwgMHg2MDMyLAorCTB4NjAzNiwgMHg2MDNhLCAweDYwM2UsIDB4NjA0YSwgMHg2MDJhLCAweDYwNDYsIDB4NjA0MiwgMHgyMDYxLAorCTB4MTgwMCwgMHg2MDU0LCAweDgwMDAsIDB4NjA1NiwgMHgwMDA1LCAweDkwMDYsIDB4NjAwZSwgMHg2MDE2LAorCTB4NjAxYSwgMHg2MDEyLCAweDYwMjIsIDB4NjAwMiwgMHg2MDFlLCAweDYwNWUsIDB4NjA2MiwgMHg2MDRhLAorCTB4NjA0NiwgMHgyMDYxLCAweDE4MDAsIDB4NjA1NCwgMHg4MDAwLCAweDYwNTYsIDB4MDAwNSwgMHgwMDA2LAorCTB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDFkOCwgMHg2MDFjLCAweGQwODQsIDB4MTkwYywgMHgxYWQzLAorCTB4NjAyMywgMHgwMDA3LCAweDIwMDEsIDB4MTk4NiwgMHgyMDA0LCAweDAwMDYsIDB4OTA4MiwgMHgwMDUxLAorCTB4MDAwZSwgMHgwMjA4LCAweDgwMDQsIDB4NjAxYSwgMHgwODBjLCAweGVjZTEsIDB4NjA0YiwgMHgwMDAwLAorCTB4NjA0NCwgMHhkMGZjLCAweDExMzEsIDB4OTAwNiwgMHg2MDQ2LCAweDYwMTYsIDB4NjAxMiwgMHgwMDBlLAorCTB4MDAwNSwgMHgwODBjLCAweGFjZmMsIDB4MDEwNiwgMHgyMDAxLCAweDE5ZmIsIDB4MjAwNCwgMHg5YzA2LAorCTB4MTEzMCwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGE1OTYsIDB4MDAzZSwgMHgwODBjLAorCTB4YTdhMSwgMHgwMTBlLCAweDA5MGMsIDB4YWQxOCwgMHgwMDA1LCAweDAwZTYsIDB4MDEyNiwgMHgyMDcxLAorCTB4MTgwMCwgMHgyMDkxLCAweDgwMDAsIDB4NzU1NCwgMHg5NTgyLCAweDAwMDEsIDB4MDYwOCwgMHg3MDU4LAorCTB4MjA2MCwgMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDljZTAsIDB4MDAxYywgMHg3MDY4LAorCTB4OWMwMiwgMHgxMjA4LCAweDBjYjAsIDB4MjA2MSwgMHgxZGRjLCAweDBjOTgsIDB4NjAwMywgMHgwMDA4LAorCTB4ODUyOSwgMHg3NTU2LCAweDljYTgsIDB4MDAxYywgMHg3MDY4LCAweDk1MDIsIDB4MTIzMCwgMHg3NTVhLAorCTB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDcwNWIsIDB4MWRkYywgMHgwY2MwLAorCTB4OTAwNiwgMHgwY2MwLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwMDIsIDB4YjIxZSwgMHhiMjI4LAorCTB4YjI0MywgMHhiMjVlLCAweGQ2OWEsIDB4ZDZiNywgMHhkNmQyLCAweGIyMWUsIDB4YjIyOCwgMHg5MmY3LAorCTB4YjI3NywgMHhiMjFlLCAweGIyMWUsIDB4YjIxZSwgMHhiMjFlLCAweGIyMWUsIDB4OTE4NiwgMHgwMDEzLAorCTB4MTEzMCwgMHg2MDQ0LCAweGQwZmMsIDB4MDExMCwgMHgwODBjLCAweDk5ZWQsIDB4MDAwNSwgMHgwMDA1LAorCTB4MDA2NiwgMHg2MDAwLCAweDkwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDBkODUsIDB4MDAxMywgMHgwMDZlLAorCTB4MDAwNSwgMHhiMjQxLCAweGI5YmMsIDB4YmJhMywgMHhiMjQxLCAweGJjMzksIDB4YjU0MCwgMHhiMjQxLAorCTB4YjI0MSwgMHhiOTNlLCAweGMyNWEsIDB4YjI0MSwgMHhiMjQxLCAweGIyNDEsIDB4YjI0MSwgMHhiMjQxLAorCTB4YjI0MSwgMHgwODBjLCAweDBkODUsIDB4MDA2NiwgMHg2MDAwLCAweDkwYjIsIDB4MDAxMCwgMHgxYTBjLAorCTB4MGQ4NSwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwgMHhiMjVjLCAweGM4NzUsIDB4YjI1YywgMHhiMjVjLAorCTB4YjI1YywgMHhiMjVjLCAweGIyNWMsIDB4YjI1YywgMHhjODBjLCAweGM5ZjgsIDB4YjI1YywgMHhjOGIyLAorCTB4YzkzNiwgMHhjOGIyLCAweGM5MzYsIDB4YjI1YywgMHgwODBjLCAweDBkODUsIDB4NjAwMCwgMHg5MDgyLAorCTB4MDAxMCwgMHgxYTBjLCAweDBkODUsIDB4NjAwMCwgMHgwMDAyLCAweGIyNzUsIDB4YzJhNCwgMHhjMzNlLAorCTB4YzRjMSwgMHhjNTMwLCAweGIyNzUsIDB4YjI3NSwgMHhiMjc1LCAweGMyNzMsIDB4Yzc4ZCwgMHhjNzkwLAorCTB4YjI3NSwgMHhiMjc1LCAweGIyNzUsIDB4YjI3NSwgMHhjN2MwLCAweDA4MGMsIDB4MGQ4NSwgMHgwMDY2LAorCTB4NjAwMCwgMHg5MGIyLCAweDAwMTAsIDB4MWEwYywgMHgwZDg1LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LAorCTB4YjI5MCwgMHhiMjkwLCAweGIyY2UsIDB4YjM2ZCwgMHhiM2VkLCAweGIyOTAsIDB4YjI5MCwgMHhiMjkwLAorCTB4YjI5MiwgMHhiMjkwLCAweGIyOTAsIDB4YjI5MCwgMHhiMjkwLCAweGIyOTAsIDB4YjI5MCwgMHhiMjkwLAorCTB4MDgwYywgMHgwZDg1LCAweDkxODYsIDB4MDA0YywgMHgwNTYwLCAweDkxODYsIDB4MDAwMywgMHgxOTBjLAorCTB4MGQ4NSwgMHgwMDk2LCAweDYwMWMsIDB4YzBlZCwgMHg2MDFlLCAweDYwMDMsIDB4MDAwMywgMHg2MTA2LAorCTB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsIDB4OTA4NCwgMHhhMDAwLCAweGMwYjUsIDB4YTg3ZSwgMHhhOGFjLAorCTB4YTgzNiwgMHhhOGIwLCAweGE4M2EsIDB4OTAwNiwgMHhhODQ2LCAweGE4NGEsIDB4YTg4NCwgMHg5MDkyLAorCTB4MTk5YSwgMHgwMjEwLCAweDIwMDEsIDB4MTk5OSwgMHg4MDAzLCAweDgwMTMsIDB4ODIxMywgMHg5MjEwLAorCTB4NjIxYSwgMHgwMDllLCAweDA4MGMsIDB4MWMyNiwgMHgyMDA5LCAweDgwMzAsIDB4MDgwYywgMHg5NjVlLAorCTB4MDAwNSwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiY2EwLCAweDAwYmUsIDB4MmMwMCwgMHgwODBjLAorCTB4YjQwZiwgMHgwODBjLCAweGQ2NWQsIDB4NjAwMywgMHgwMDA3LCAweDAwMDUsIDB4MDBkNiwgMHgwMDk2LAorCTB4MDBmNiwgMHgyMDc5LCAweDE4MDAsIDB4N2E5MCwgMHg2MDE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGVjLAorCTB4MTExMCwgMHg5MjkwLCAweDAwMTgsIDB4YWM3OCwgMHhjNGZjLCAweDAwNDYsIDB4YThlMCwgMHg5MDA1LAorCTB4MTE0MCwgMHhhOGRjLCAweDkyMWEsIDB4MDE0MCwgMHgwMjIwLCAweGE4N2IsIDB4MDAwNywgMHgyMDEwLAorCTB4MDAyOCwgMHhhODdiLCAweDAwMTUsIDB4MDAxMCwgMHhhODdiLCAweDAwMDAsIDB4ODIxNCwgMHhhODgzLAorCTB4MDAwMCwgMHhhYTAyLCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAorCTB4MDBmNiwgMHgyNDAwLCAweDkwMDUsIDB4MTEwOCwgMHgwMDlhLCAweDIxMDAsIDB4OTA4NiwgMHgwMDE1LAorCTB4MTExOCwgMHgyMDAxLCAweDAwMDEsIDB4MDAzOCwgMHgyMTAwLCAweDkwODYsIDB4MDAxNiwgMHgwMTE4LAorCTB4MjAwMSwgMHgwMDAxLCAweDAwMmEsIDB4OTRhNCwgMHgwMDA3LCAweDg0MjMsIDB4OTQwNSwgMHgwMDAyLAorCTB4YjMzNSwgMHhiMzM1LCAweGIzMzAsIDB4YjMzMywgMHhiMzM1LCAweGIzMmQsIDB4YjMyMCwgMHhiMzIwLAorCTB4YjMyMCwgMHhiMzIwLCAweGIzMjAsIDB4YjMyMCwgMHhiMzIwLCAweGIzMjAsIDB4YjMyMCwgMHhiMzIwLAorCTB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDRlLAorCTB4MDBmZSwgMHgwMDllLCAweDAwZGUsIDB4MDgwYywgMHgwZDg1LCAweDA4MGMsIDB4YmU1MSwgMHgwMDI4LAorCTB4MDgwYywgMHhiZjhmLCAweDAwMTAsIDB4MDgwYywgMHhjMDg1LCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLAorCTB4MDBjZSwgMHgwMDJlLCAweDAwMWUsIDB4MmMwMCwgMHhhODk2LCAweDAwMGUsIDB4MDgwYywgMHhiNGNkLAorCTB4MDUzMCwgMHhhODA0LCAweGE4MGUsIDB4MDBhNiwgMHgyMDUwLCAweGIxMDAsIDB4MDBhZSwgMHg4MDA2LAorCTB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDAyLAorCTB4YWFjYywgMHhhYmQwLCAweGFjZDQsIDB4YWRkOCwgMHgyMDMxLCAweDAwMDAsIDB4MjA0MSwgMHgxMmMyLAorCTB4MDgwYywgMHhiNjkxLCAweDAxNjAsIDB4MDAwZSwgMHg5MDA1LCAweDAxMjAsIDB4MDBmZSwgMHgwMDllLAorCTB4MDBkZSwgMHgwMDA1LCAweDAwZmUsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MDQsIDB4YjE2YywgMHgyMDAxLAorCTB4MDAyYywgMHg5MDBlLCAweDA4MGMsIDB4YjUzMywgMHgwYzcwLCAweDkxYjYsIDB4MDAxNSwgMHgwMTcwLAorCTB4OTFiNiwgMHgwMDE2LCAweDAxNTgsIDB4OTFiMiwgMHgwMDQ3LCAweDBhMGMsIDB4MGQ4NSwgMHg5MWIyLAorCTB4MDA1MCwgMHgxYTBjLCAweDBkODUsIDB4OTE4MiwgMHgwMDQ3LCAweDAwNDIsIDB4MDgwYywgMHhhZjYxLAorCTB4MDEyMCwgMHg5MDg2LCAweDAwMDIsIDB4MDkwNCwgMHhiMmNlLCAweDAwMDUsIDB4YjM4ZiwgMHhiMzhmLAorCTB4YjM5MSwgMHhiM2MzLCAweGIzOGYsIDB4YjM4ZiwgMHhiMzhmLCAweGIzOGYsIDB4YjNkNiwgMHgwODBjLAorCTB4MGQ4NSwgMHgwMGQ2LCAweDAwMTYsIDB4MDA5NiwgMHg2MDAzLCAweDAwMDQsIDB4NjExNCwgMHgyMTQ4LAorCTB4YTg3YywgMHhkMGZjLCAweDAxYzAsIDB4YTg3OCwgMHhjMGZjLCAweDkwMDUsIDB4MTE1OCwgMHhhODk0LAorCTB4OTAwNSwgMHgwMTQwLCAweDIwMDEsIDB4MDAwMCwgMHg5MDBlLCAweDA4MGMsIDB4YjUzMywgMHgwODBjLAorCTB4YjE2YywgMHgwMGE4LCAweDYwMDMsIDB4MDAwMiwgMHhhOGE0LCAweGE5YTgsIDB4OTEwNSwgMHgxMTc4LAorCTB4YThhZSwgMHhhOGIyLCAweDBjNzgsIDB4YTg3ZiwgMHgwMDIwLCAweGE4OGMsIDB4YTg4YSwgMHhhOGE0LAorCTB4YThhZSwgMHhhOGE4LCAweGE4YjIsIDB4YThjNywgMHgwMDAwLCAweGE4Y2IsIDB4MDAwMCwgMHgwMDllLAorCTB4MDAxZSwgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHg5YTQ4LCAweDAwZDYsIDB4MDA5NiwgMHg2MTE0LAorCTB4MjE0OCwgMHgwODBjLCAweGNmMWIsIDB4MDEyMCwgMHhhODdiLCAweDAwMDYsIDB4MDgwYywgMHg3MDEyLAorCTB4MDA5ZSwgMHgwMGRlLCAweDA4MGMsIDB4YjE2YywgMHgwODA0LCAweDlhYjMsIDB4MDgwYywgMHg5YTQ4LAorCTB4MDgwYywgMHgzMzE1LCAweDA4MGMsIDB4ZDY1YSwgMHgwMGQ2LCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LAorCTB4MDgwYywgMHhjZjFiLCAweDAxMjAsIDB4YTg3YiwgMHgwMDI5LCAweDA4MGMsIDB4NzAxMiwgMHgwMDllLAorCTB4MDBkZSwgMHgwODBjLCAweGIxNmMsIDB4MDgwNCwgMHg5YWIzLCAweDkxODIsIDB4MDA0NywgMHgwMDAyLAorCTB4YjNmZCwgMHhiM2ZmLCAweGIzZmQsIDB4YjNmZCwgMHhiM2ZkLCAweGIzZmQsIDB4YjNmZCwgMHhiM2ZkLAorCTB4YjNmZCwgMHhiM2ZkLCAweGIzZmQsIDB4YjNmZCwgMHhiM2ZmLCAweDA4MGMsIDB4MGQ4NSwgMHgwMGQ2LAorCTB4MDA5NiwgMHg2MDFmLCAweDAwMDAsIDB4NjExNCwgMHgyMTQ4LCAweGE4N2IsIDB4MDAwMCwgMHhhODgzLAorCTB4MDAwMCwgMHgwODBjLCAweDcwMTIsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MDQsIDB4YjE2YywgMHgwMDI2LAorCTB4MDAzNiwgMHgwMDU2LCAweDAwNjYsIDB4MDA5NiwgMHgwMGE2LCAweDAwZjYsIDB4MDAwNiwgMHgwODBjLAorCTB4MTA1OSwgMHgwMDBlLCAweDA5MGMsIDB4MGQ4NSwgMHhhOTYwLCAweDIxZTgsIDB4YTk1YywgMHg5MTg4LAorCTB4MDAxOSwgMHgyMWEwLCAweDkwMGUsIDB4MjBhOSwgMHgwMDIwLCAweDQxMDQsIDB4YTg3YSwgMHgyMDc5LAorCTB4MTgwMCwgMHg3OTkwLCAweDkxODgsIDB4MDAxOCwgMHg5MThjLCAweDBmZmYsIDB4YTk3MiwgMHhhYzc2LAorCTB4Mjk1MCwgMHgwMGE2LCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDAsIDB4OTAxZSwgMHgyMDI5LAorCTB4MDAwMSwgMHg5MTgyLCAweDAwMzUsIDB4MTIyOCwgMHgyMDExLCAweDAwMWYsIDB4MDgwYywgMHhjYTdiLAorCTB4MDRjMCwgMHgyMTMwLCAweDIwMDksIDB4MDAzNCwgMHgyMDExLCAweDAwMWYsIDB4MDgwYywgMHhjYTdiLAorCTB4OTZiMiwgMHgwMDM0LCAweGIwMDQsIDB4OTA0ZCwgMHgwMTEwLCAweDA4MGMsIDB4MTAwYiwgMHgwODBjLAorCTB4MTA1OSwgMHgwMWQwLCAweDg1MjgsIDB4YTg2NywgMHgwMTEwLCAweGE4NmIsIDB4MDAwMCwgMHgyOTIwLAorCTB4YjQwNiwgMHg5NjhhLCAweDAwM2QsIDB4MTIzMCwgMHgyNjA4LCAweDIwMTEsIDB4MDAxYiwgMHgwODBjLAorCTB4Y2E3YiwgMHgwMGI4LCAweDk2YjIsIDB4MDAzYywgMHgyMDA5LCAweDAwM2MsIDB4Mjk1MCwgMHgyMDExLAorCTB4MDAxYiwgMHgwODBjLCAweGNhN2IsIDB4MGMxOCwgMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAwLAorCTB4MDBhZSwgMHg4NTJmLCAweDk1YWQsIDB4MDA1MCwgMHhiNTY2LCAweGIwNzAsIDB4YzBmZCwgMHhiMDcyLAorCTB4MDA0OCwgMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAwLCAweDAwYWUsIDB4ODUyZiwgMHg5NWFkLAorCTB4MDA1MCwgMHhiNTY2LCAweDJhNDgsIDB4YTgwNCwgMHhhODA3LCAweDAwMDAsIDB4MDAwNiwgMHgwODBjLAorCTB4NzAxMiwgMHgwMDBlLCAweDIwNDgsIDB4OTAwNSwgMHgxZGIwLCAweDAwZmUsIDB4MDBhZSwgMHgwMDllLAorCTB4MDA2ZSwgMHgwMDVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBmNiwgMHgwMDk2LAorCTB4MDAwNiwgMHgwODBjLCAweDEwNTksIDB4MDAwZSwgMHgwOTBjLCAweDBkODUsIDB4YTk2MCwgMHgyMWU4LAogCTB4YTk1YywgMHg5MTg4LCAweDAwMTksIDB4MjFhMCwgMHg5MDBlLCAweDIwYTksIDB4MDAyMCwgMHg0MTA0LAotCTB4YTg3YSwgMHgyMDc5LCAweDE4MDAsIDB4Nzk5MCwgMHg5MTg4LCAweDAwMTgsIDB4OTE4YywgMHgwZmZmLAotCTB4YTk3MiwgMHhhYzc2LCAweDI5NTAsIDB4MDBhNiwgMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAwLAotCTB4OTAxZSwgMHgyMDI5LCAweDAwMDEsIDB4OTE4MiwgMHgwMDM1LCAweDEyMjgsIDB4MjAxMSwgMHgwMDFmLAotCTB4MDgwYywgMHhjN2FkLCAweDA0YzAsIDB4MjEzMCwgMHgyMDA5LCAweDAwMzQsIDB4MjAxMSwgMHgwMDFmLAotCTB4MDgwYywgMHhjN2FkLCAweDk2YjIsIDB4MDAzNCwgMHhiMDA0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLAotCTB4MGZmZiwgMHgwODBjLCAweDEwNGQsIDB4MDFkMCwgMHg4NTI4LCAweGE4NjcsIDB4MDExMCwgMHhhODZiLAotCTB4MDAwMCwgMHgyOTIwLCAweGI0MDYsIDB4OTY4YSwgMHgwMDNkLCAweDEyMzAsIDB4MjYwOCwgMHgyMDExLAotCTB4MDAxYiwgMHgwODBjLCAweGM3YWQsIDB4MDBiOCwgMHg5NmIyLCAweDAwM2MsIDB4MjAwOSwgMHgwMDNjLAotCTB4Mjk1MCwgMHgyMDExLCAweDAwMWIsIDB4MDgwYywgMHhjN2FkLCAweDBjMTgsIDB4MjAwMSwgMHgwMjA1LAotCTB4MjAwMywgMHgwMDAwLCAweDAwYWUsIDB4ODUyZiwgMHg5NWFkLCAweDAwNTAsIDB4YjU2NiwgMHhiMDcwLAotCTB4YzBmZCwgMHhiMDcyLCAweDAwNDgsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHgwMGFlLAotCTB4ODUyZiwgMHg5NWFkLCAweDAwNTAsIDB4YjU2NiwgMHgyYTQ4LCAweGE4MDQsIDB4YTgwNywgMHgwMDAwLAotCTB4MDAwNiwgMHgwODBjLCAweDZmMTEsIDB4MDAwZSwgMHgyMDQ4LCAweDkwMDUsIDB4MWRiMCwgMHgwMGZlLAotCTB4MDBhZSwgMHgwMDllLCAweDAwNmUsIDB4MDA1ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGQ2LAotCTB4MDBmNiwgMHgwMDk2LCAweDAwMDYsIDB4MDgwYywgMHgxMDRkLCAweDAwMGUsIDB4MDkwYywgMHgwZDc5LAotCTB4YTk2MCwgMHgyMWU4LCAweGE5NWMsIDB4OTE4OCwgMHgwMDE5LCAweDIxYTAsIDB4OTAwZSwgMHgyMGE5LAotCTB4MDAyMCwgMHg0MTA0LCAweGFhNjYsIDB4YTg3YSwgMHgyMDc5LCAweDE4MDAsIDB4Nzk5MCwgMHg4MTBjLAotCTB4OTE4OCwgMHgwMDBjLCAweDkxODIsIDB4MDAxYSwgMHgwMjEwLCAweDIwMDksIDB4MDAxYSwgMHgyMWE4LAotCTB4ODEwYiwgMHhhOTcyLCAweGFjNzYsIDB4MmU5OCwgMHhhODVjLCAweDkwODAsIDB4MDAxZiwgMHgyMGEwLAotCTB4MjAwMSwgMHgwMjA1LCAweDIwMGMsIDB4OTE4ZCwgMHgwMDgwLCAweDIxMDIsIDB4NDAwMywgMHgyMDAzLAotCTB4MDAwMCwgMHgwODBjLCAweDZmMTEsIDB4MDA5ZSwgMHgwMGZlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDE2LAotCTB4MDBkNiwgMHgwMGY2LCAweDAwOTYsIDB4MDAxNiwgMHgyMDAxLCAweDAyMDUsIDB4MjAwYywgMHg5MThkLAotCTB4MDA4MCwgMHgyMTAyLCAweDAwMWUsIDB4MjA3OSwgMHgwMjAwLCAweDJlOTgsIDB4YTg3YywgMHhkMGVjLAotCTB4MDExOCwgMHg5ZTgwLCAweDAwMGMsIDB4MjA5OCwgMHgyMDIxLCAweDAwM2UsIDB4OTAxZSwgMHg5MjgyLAotCTB4MDAyMCwgMHgwMjE4LCAweDIwMTEsIDB4MDAyMCwgMHgyMDE4LCAweDk0ODYsIDB4MDAzZSwgMHgxMTcwLAotCTB4MDA5NiwgMHgwODBjLCAweDEwNGQsIDB4MjkwMCwgMHgwMDllLCAweDA1YzAsIDB4YTgwNiwgMHgyMDQ4LAotCTB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDAyLCAweDIwYTAsIDB4MzMwMCwgMHg5MDhlLAotCTB4MDI2MCwgMHgwMTQwLCAweDIwMDksIDB4MDI4MCwgMHg5MTAyLCAweDkyMGEsIDB4MDIxOCwgMHgyMDEwLAotCTB4MjEwMCwgMHg5MzE4LCAweDIyMDAsIDB4OTQwMiwgMHgxMjI4LCAweDI0MDAsIDB4OTIwMiwgMHgyNDEwLAotCTB4OTMxOCwgMHg5MDA2LCAweDIwMjAsIDB4MjJhOCwgMHhhODAwLCAweDkyMDAsIDB4YTgwMiwgMHgyMGUxLAotCTB4MDAwMCwgMHg0MDAzLCAweDgzZmYsIDB4MDE4MCwgMHgzMzAwLCAweDkwODYsIDB4MDI4MCwgMHgxMTMwLAotCTB4NzgxNCwgMHg4MDAwLCAweDkwODUsIDB4MDA4MCwgMHg3ODE2LCAweDJlOTgsIDB4MjMxMCwgMHg4NGZmLAotCTB4MDkwNCwgMHhiMmM0LCAweDA4MDQsIDB4YjJjNiwgMHg5MDg1LCAweDAwMDEsIDB4NzgxNywgMHgwMDAwLAotCTB4MDA5ZSwgMHgwMGZlLCAweDAwZGUsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHgwMDk2LAotCTB4NjMxNCwgMHgyMzQ4LCAweGE4N2EsIDB4YTk4MiwgMHgwODBjLCAweDZmMDUsIDB4MDA5ZSwgMHgwMDNlLAotCTB4MDBkZSwgMHgwMDA1LCAweDkxYjYsIDB4MDAxNSwgMHgxMTE4LCAweDA4MGMsIDB4YWY0ZSwgMHgwMDMwLAotCTB4OTFiNiwgMHgwMDE2LCAweDE5MGMsIDB4MGQ3OSwgMHgwODBjLCAweGFmNGUsIDB4MDAwNSwgMHgyMGE5LAotCTB4MDAwZSwgMHgyMGUxLCAweDAwMDAsIDB4MmU5OCwgMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODYwLAotCTB4MjBlOCwgMHhhODVjLCAweDIwYTAsIDB4MDA5ZSwgMHg0MDAzLCAweDkxOTYsIDB4MDAxNiwgMHgwMWYwLAotCTB4MDEzNiwgMHg5MDgwLCAweDAwMWIsIDB4MjBhMCwgMHgyMDExLCAweDAwMDYsIDB4MjBhOSwgMHgwMDAxLAotCTB4MzQxOCwgMHg4MzE4LCAweDIzYTAsIDB4NDAwMywgMHgzMzE4LCAweDgzMTgsIDB4MjM5OCwgMHg4MjExLAotCTB4MWRiOCwgMHgyMDExLCAweDAwMDYsIDB4MDEzZSwgMHgyMGEwLCAweDMzMTgsIDB4ODMxOCwgMHgyMzk4LAotCTB4NDAwMywgMHgzNDE4LCAweDgzMTgsIDB4MjNhMCwgMHg4MjExLCAweDFkYjgsIDB4MDA5NiwgMHgwODBjLAotCTB4Y2MzMywgMHgwMTMwLCAweDYwMTQsIDB4MjA0OCwgMHhhODA3LCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLAotCTB4MDA5ZSwgMHgwODA0LCAweGFmNGUsIDB4MDA5NiwgMHgwMGQ2LCAweDAwMzYsIDB4NzMzMCwgMHg5Mzg2LAotCTB4MDIwMCwgMHgxMWE4LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4ZDcsIDB4MDAwMCwgMHgwMGJlLAotCTB4NjAxNCwgMHg5MDA1LCAweDAxMzAsIDB4MjA0OCwgMHhhODA3LCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLAotCTB4YWIzMiwgMHgwODBjLCAweGFmNGUsIDB4MDAzZSwgMHgwMGRlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDExLAotCTB4MWQ0OCwgMHgwY2M4LCAweDAwMDYsIDB4MDAxNiwgMHgwODBjLCAweGQzNWQsIDB4MDE4OCwgMHg2MDE0LAotCTB4OTAwNSwgMHgxMTcwLCAweDYwMGIsIDB4MDAwMywgMHg2MDFiLCAweDAwMDAsIDB4NjA0YiwgMHgwMDAwLAotCTB4MjAwOSwgMHgwMDIyLCAweDA4MGMsIDB4Yjc3NCwgMHg5MDA2LCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LAotCTB4OTA4NSwgMHgwMDAxLCAweDBjZDAsIDB4MDA5NiwgMHgwMDE2LCAweDIwYTksIDB4MDAxNCwgMHg5ZTgwLAotCTB4MDAwYywgMHgyMGUxLCAweDAwMDAsIDB4MjA5OCwgMHg2MDE0LCAweDIwNDgsIDB4YTg2MCwgMHgyMGU4LAotCTB4YTg1YywgMHg5MDgwLCAweDAwMDIsIDB4MjBhMCwgMHg0MDAzLCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLAotCTB4MDAwMSwgMHgyMDk5LCAweDAyNjAsIDB4MjBhOSwgMHgwMDE2LCAweDQwMDMsIDB4MjBhOSwgMHgwMDBhLAotCTB4YTgwNCwgMHgyMDQ4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLAotCTB4NDAwMywgMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAyLCAweDIwOTksIDB4MDI2MCwgMHgyMGE5LAotCTB4MDAyMCwgMHg0MDAzLCAweDIwMDMsIDB4MDAwMCwgMHg2MDE0LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LAotCTB4YTg2NywgMHgwMTAzLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDFlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDk2LAotCTB4MDAxNiwgMHg5MDBlLCAweDcwMzAsIDB4OTA4NiwgMHgwMTAwLCAweDAxNDAsIDB4NzAzOCwgMHg5MDg0LAotCTB4MDBmZiwgMHg4MDBjLCAweDcwM2MsIDB4OTA4NCwgMHgwMGZmLCAweDgwMDQsIDB4OTA4MCwgMHgwMDA0LAotCTB4OTEwOCwgMHg4MTBiLCAweDIwMTEsIDB4MDAwMiwgMHgyMDE5LCAweDAwMGMsIDB4NjAxNCwgMHgyMDQ4LAotCTB4MDgwYywgMHhjN2FkLCAweDA4MGMsIDB4Y2MzMywgMHgwMTQwLCAweDYwMTQsIDB4MjA0OCwgMHhhODA3LAotCTB4MDAwMCwgMHhhODY0LCAweGE4ZTIsIDB4YTg2NywgMHgwMTAzLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDFlLAotCTB4MDA5ZSwgMHgwMDA1LCAweDAwMTYsIDB4MjAwOSwgMHgwMDAwLCAweDcwMzAsIDB4OTA4NiwgMHgwMjAwLAotCTB4MDExMCwgMHgyMDA5LCAweDAwMDEsIDB4MDA5NiwgMHg2MDE0LCAweDkwNGQsIDB4MDkwYywgMHgwZDc5LAotCTB4YTk3YSwgMHgwODBjLCAweDZmMTEsIDB4MDA5ZSwgMHgwODBjLCAweGFmNGUsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDAxNiwgMHgwMDk2LCAweDcwMzAsIDB4OTA4NiwgMHgwMTAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDA0LAotCTB4MDAxMCwgMHg3MDM0LCAweDgwMGMsIDB4ODEwYiwgMHgyMDExLCAweDAwMGMsIDB4MjAxOSwgMHgwMDBjLAotCTB4NjAxNCwgMHgyMDQ4LCAweGE4MDQsIDB4MDA5NiwgMHg5MDA1LCAweDAxMDgsIDB4MjA0OCwgMHgwODBjLAotCTB4YzdhZCwgMHgwMDllLCAweDA4MGMsIDB4Y2MzMywgMHgwMTQ4LCAweGE4MDQsIDB4OTAwNSwgMHgxMTU4LAotCTB4YTgwNywgMHgwMDAwLCAweGE4NjQsIDB4YThlMiwgMHhhODY3LCAweDAxMDMsIDB4MDgwYywgMHhhZjRlLAotCTB4MDA5ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDA4NiwgMHgyMDQwLCAweGEwMzAsIDB4ODAwNywgMHg5MDg2LAotCTB4MDEwMCwgMHgxMTE4LCAweDA4MGMsIDB4YjkzYywgMHgwMGUwLCAweGEwMzQsIDB4ODAwNywgMHg4MDBjLAotCTB4ODgwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLAotCTB4MDAwYywgMHhhODdiLCAweDAwMDAsIDB4YTg4MywgMHgwMDAwLCAweGE4OTcsIDB4NDAwMCwgMHhhYWEwLAotCTB4YWI5YywgMHhhY2E4LCAweGFkYTQsIDB4MjAzMSwgMHgwMDAwLCAweDIwNDEsIDB4MTI5YywgMHgwMDE5LAotCTB4MGQwOCwgMHgwMDhlLCAweDA4OTgsIDB4MDA5NiwgMHgwMDA2LCAweDA4MGMsIDB4MTA0ZCwgMHgwMDBlLAotCTB4MDFiMCwgMHhhOGFiLCAweDBkY2IsIDB4YTg3NiwgMHgwMDBlLCAweGE4YTIsIDB4MDAwNiwgMHhhZTZhLAotCTB4MjgwMCwgMHhhODllLCAweGE5N2EsIDB4YWY3MiwgMHhhYThlLCAweGFiOTIsIDB4YWM5NiwgMHhhZDlhLAotCTB4MDA4NiwgMHgyOTQwLCAweDA4MGMsIDB4MTE0MiwgMHgwMDhlLCAweDkwODUsIDB4MDAwMSwgMHgwMDllLAotCTB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDAyNiwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MjEwLAotCTB4MDBiNiwgMHgyMjU4LCAweGJhMTAsIDB4MDBiZSwgMHg5MjA2LCAweDE1MjAsIDB4NzAwYywgMHg2MjEwLAotCTB4MDBiNiwgMHgyMjU4LCAweGJhMTQsIDB4MDBiZSwgMHg5MjA2LCAweDExZTAsIDB4NjA0YiwgMHgwMDAwLAotCTB4MmM2OCwgMHgwMDE2LCAweDIwMDksIDB4MDAzNSwgMHgwODBjLCAweGQyZDMsIDB4MDAxZSwgMHgxMTU4LAotCTB4NjIyYywgMHgyMjY4LCAweDIwNzEsIDB4MDI2YywgMHg2YjIwLCAweDkzODYsIDB4MDAwMywgMHgwMTMwLAotCTB4OTM4NiwgMHgwMDA2LCAweDAxMjgsIDB4MDgwYywgMHhhZjRlLCAweDAwMjAsIDB4MDAzOSwgMHgwMDEwLAotCTB4MDgwYywgMHhiNWE5LCAweDAwMmUsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4MDA5NiwgMHg2ODE0LAotCTB4MjA0OCwgMHg5MTg2LCAweDAwMTUsIDB4MDkwNCwgMHhiNTg4LCAweDkxOGUsIDB4MDAxNiwgMHgxOTA0LAotCTB4YjVhNywgMHg3MDBjLCAweDkwOGMsIDB4ZmYwMCwgMHg5MTg2LCAweDE3MDAsIDB4MDEyMCwgMHg5MTg2LAotCTB4MDMwMCwgMHgxOTA0LCAweGI1NjIsIDB4ODlmZiwgMHgxMTM4LCAweDY4MDAsIDB4OTA4NiwgMHgwMDBmLAotCTB4MDkwNCwgMHhiNTQ0LCAweDA4MDQsIDB4YjVhNSwgMHg2ODA4LCAweDkwODYsIDB4ZmZmZiwgMHgxOTA0LAotCTB4YjU4YSwgMHhhODdjLCAweDkwODQsIDB4MDA2MCwgMHg5MDg2LCAweDAwMjAsIDB4MTE1MCwgMHhhOGFjLAotCTB4YTkzNCwgMHg5MTA2LCAweDE5MDQsIDB4YjU4YSwgMHhhOGIwLCAweGE5MzgsIDB4OTEwNiwgMHgxOTA0LAotCTB4YjU4YSwgMHg2ODI0LCAweGQwODQsIDB4MTkwNCwgMHhiNThhLCAweGQwYjQsIDB4MDE1OCwgMHgwMDE2LAotCTB4MjAwMSwgMHgxOTg3LCAweDIwMGMsIDB4NjAxOCwgMHg5MTAyLCAweDkwODIsIDB4MDAwNSwgMHgwMDFlLAotCTB4MWEwNCwgMHhiNThhLCAweDA4MGMsIDB4Y2UyNCwgMHg2ODEwLCAweDAwOTYsIDB4MjA0OCwgMHhhOWEwLAotCTB4MDA5ZSwgMHg2ODVjLCAweGE4N2EsIDB4YTk3NiwgMHg2ODY0LCAweGE4ODIsIDB4YTg3YywgMHhjMGRjLAotCTB4YzBmNCwgMHhjMGQ0LCAweGE4N2UsIDB4MDAyNiwgMHg5MDBlLCAweDZhMTgsIDB4MjAwMSwgMHgwMDBhLAotCTB4MDgwYywgMHg5MzY0LCAweGE4ODQsIDB4OTIwYSwgMHgwMjA4LCAweDgwMTEsIDB4YWE4NiwgMHg4MmZmLAotCTB4MDAyZSwgMHgxMTM4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweGM5MzgsIDB4MDBjZSwgMHgwODA0LAotCTB4YjVhNSwgMHgwMGM2LCAweGE4NjgsIDB4ZDBmYywgMHgxMTE4LCAweDA4MGMsIDB4NjIwYSwgMHgwMDEwLAotCTB4MDgwYywgMHg2NjE1LCAweDAwY2UsIDB4MTkwNCwgMHhiNThhLCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLAotCTB4YWY0ZSwgMHgwMGNlLCAweDA4MDQsIDB4YjVhNSwgMHgwMGM2LCAweDA4MGMsIDB4YWZiZiwgMHgwMTk4LAotCTB4NjAxNywgMHgwMDAwLCAweDY4MTAsIDB4NjAxMiwgMHgwODBjLCAweGQwY2UsIDB4NjAyMywgMHgwMDAzLAotCTB4NjkwNCwgMHgwMGM2LCAweDJkNjAsIDB4MDgwYywgMHhhZjRlLCAweDAwY2UsIDB4MDgwYywgMHhhZmVjLAotCTB4MDBjZSwgMHgwODA0LCAweGI1YTUsIDB4MjAwMSwgMHgxOTg5LCAweDIwMDQsIDB4Njg0YSwgMHgwMGNlLAotCTB4MDgwNCwgMHhiNWE1LCAweDcwMDgsIDB4OTA4NiwgMHgwMDBiLCAweDExYzgsIDB4NjAxMCwgMHgwMGI2LAotCTB4MjA1OCwgMHhiOTAwLCAweGMxYmMsIDB4YjkwMiwgMHgwMGJlLCAweDAwYzYsIDB4MmQ2MCwgMHhhODdiLAotCTB4MDAwMywgMHgwODBjLCAweGQzMTcsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDIzLAotCTB4MDAwMiwgMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NDIwLCAweDAwY2UsIDB4MDQzMCwgMHg3MDBjLAotCTB4OTA4NiwgMHgyYTAwLCAweDExMzgsIDB4MjAwMSwgMHgxOTg5LCAweDIwMDQsIDB4Njg0YSwgMHgwMGU4LAotCTB4MDRjMSwgMHgwMGU4LCAweDg5ZmYsIDB4MDkwYywgMHgwZDc5LCAweDAwYzYsIDB4MDBkNiwgMHgyZDYwLAotCTB4YTg2NywgMHgwMTAzLCAweGE4N2IsIDB4MDAwMywgMHgwODBjLCAweDZkMjYsIDB4MDgwYywgMHhjZTI0LAotCTB4MDgwYywgMHhhZjg5LCAweDAwMjYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmEzYywgMHgwODBjLAotCTB4NjhhZSwgMHgwMGJlLCAweDAwMmUsIDB4MDBkZSwgMHgwMGNlLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDllLAotCTB4MDAwNSwgMHg5MTg2LCAweDAwMTUsIDB4MTEyOCwgMHgyMDAxLCAweDE5ODksIDB4MjAwNCwgMHg2ODRhLAotCTB4MDA2OCwgMHg5MThlLCAweDAwMTYsIDB4MTE2MCwgMHgwMGM2LCAweDJkMDAsIDB4MjA2MCwgMHgwODBjLAotCTB4ZTlmMCwgMHgwODBjLCAweDhhYjIsIDB4MDgwYywgMHhhZjRlLCAweDAwY2UsIDB4MDgwYywgMHhhZjRlLAotCTB4MDAwNSwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHg3MjI4LCAweGFjYjAsIDB4YWJhYywgMHhkMmY0LAotCTB4MDEzMCwgMHgyMDAxLCAweDE5ODksIDB4MjAwNCwgMHg2ODRhLCAweDA4MDQsIDB4YjYyMywgMHgwMGM2LAotCTB4MmQ2MCwgMHgwODBjLCAweGM4MGUsIDB4MDBjZSwgMHg2ODA0LCAweDkwODYsIDB4MDA1MCwgMHgxMTY4LAotCTB4MDBjNiwgMHgyZDAwLCAweDIwNjAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA1MCwgMHgyMDA5LAotCTB4ODAyMywgMHgwODBjLCAweDk0MjAsIDB4MDBjZSwgMHgwNGYwLCAweDY4MDAsIDB4OTA4NiwgMHgwMDBmLAotCTB4MDFhOCwgMHg4OWZmLCAweDA5MGMsIDB4MGQ3OSwgMHg2ODAwLCAweDkwODYsIDB4MDAwNCwgMHgxMTkwLAotCTB4YTg3YywgMHhkMGFjLCAweDAxNzgsIDB4YTg0MywgMHgwZmZmLCAweGE4M2YsIDB4MGZmZiwgMHhhODgwLAotCTB4YzBmYywgMHhhODgyLCAweDIwMDEsIDB4MDAwMSwgMHg2ODMyLCAweDA0MDAsIDB4MjAwMSwgMHgwMDA3LAotCTB4NjgzMiwgMHgwMGUwLCAweGE4N2MsIDB4ZDBiNCwgMHgxMTUwLCAweGQwYWMsIDB4MGRiOCwgMHg2ODI0LAotCTB4ZDBmNCwgMHgxZDQ4LCAweGE4MzgsIDB4YTkzNCwgMHg5MTA1LCAweDBkODAsIDB4MGMyMCwgMHhkMmVjLAotCTB4MWQ2OCwgMHg3MDI0LCAweDkzMDYsIDB4MTExOCwgMHg3MDIwLCAweDk0MDYsIDB4MGQzOCwgMHg3MDIwLAotCTB4NjgzZSwgMHg3MDI0LCAweDY4M2EsIDB4MjAwMSwgMHgwMDA1LCAweDY4MzIsIDB4MDgwYywgMHhjZmI4LAotCTB4MDgwYywgMHg5OGJjLCAweDAwMTAsIDB4MDgwYywgMHhhZjRlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAwNSwgMHgwMGU2LCAweDAwZDYsIDB4MDAyNiwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MjEwLAotCTB4MDBiNiwgMHgyMjU4LCAweGJhMTAsIDB4MDBiZSwgMHg5MjA2LCAweDE5MDQsIDB4YjY4ZSwgMHg3MDBjLAotCTB4NjIxMCwgMHgwMGI2LCAweDIyNTgsIDB4YmExNCwgMHgwMGJlLCAweDkyMDYsIDB4MTkwNCwgMHhiNjhlLAotCTB4NjAzOCwgMHgyMDY4LCAweDY4MjQsIDB4YzBkYywgMHg2ODI2LCAweDZhMjAsIDB4OTI4NiwgMHgwMDA3LAotCTB4MDkwNCwgMHhiNjhlLCAweDkyODYsIDB4MDAwMiwgMHgwOTA0LCAweGI2OGUsIDB4OTI4NiwgMHgwMDAwLAotCTB4MDVlOCwgMHg2ODA4LCAweDYzM2MsIDB4OTMwNiwgMHgxNWM4LCAweDIwNzEsIDB4MDI2YywgMHg5MTg2LAotCTB4MDAxNSwgMHgwNTcwLCAweDkxOGUsIDB4MDAxNiwgMHgxMTAwLCAweDAwYzYsIDB4NjAzOCwgMHgyMDYwLAotCTB4NjEwNCwgMHg5MTg2LCAweDAwNGIsIDB4MDFjMCwgMHg5MTg2LCAweDAwNGMsIDB4MDFhOCwgMHg5MTg2LAotCTB4MDA0ZCwgMHgwMTkwLCAweDkxODYsIDB4MDA0ZSwgMHgwMTc4LCAweDkxODYsIDB4MDA1MiwgMHgwMTYwLAotCTB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLCAweDA5MGMsIDB4MGQ3OSwgMHhhODdiLAotCTB4MDAwMywgMHgwMDllLCAweDA4MGMsIDB4ZDMxNywgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLAotCTB4NjAyMywgMHgwMDAyLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk0MjAsIDB4MDBjZSwgMHgwMDMwLAotCTB4NjAzOCwgMHgyMDcwLCAweDIwMDEsIDB4MTk4OSwgMHgyMDA0LCAweDcwNGEsIDB4MDgwYywgMHhhZjRlLAotCTB4MDAyZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGI2LCAweDAwOTYsIDB4MDBmNiwgMHg2MDE0LAotCTB4MjA0OCwgMHg2MDEwLCAweDIwNTgsIDB4OTFiNiwgMHgwMDE1LCAweDAxMzAsIDB4YmEwOCwgMHhiYjBjLAotCTB4YmMwMCwgMHhjNDhjLCAweGJjMDIsIDB4MDQ2MCwgMHgwMDk2LCAweDAxNTYsIDB4MDAzNiwgMHgwMDI2LAotCTB4MmI0OCwgMHg5ZTkwLCAweDAwMTAsIDB4MjAxOSwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgwODBjLAotCTB4YmY1NCwgMHgwMDJlLCAweDAwM2UsIDB4MDE1ZSwgMHgwMDllLCAweDE5MDQsIDB4YjZmZCwgMHgwMDk2LAotCTB4MDE1NiwgMHgwMDM2LCAweDAwMjYsIDB4MmI0OCwgMHg5ZTkwLCAweDAwMTQsIDB4MjAxOSwgMHgwMDA2LAotCTB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4YmY1NCwgMHgwMDJlLCAweDAwM2UsIDB4MDE1ZSwgMHgwMDllLAotCTB4MTVhMCwgMHg3MjM4LCAweGJhMGEsIDB4NzMzYywgMHhiYjBlLCAweGJjMDAsIDB4YzQ4ZCwgMHhiYzAyLAotCTB4YTgwNCwgMHg5MDA1LCAweDExMjgsIDB4MDBmZSwgMHgwMDllLCAweDAwYmUsIDB4MDgwNCwgMHhiMzVlLAorCTB4YWE2NiwgMHhhODdhLCAweDIwNzksIDB4MTgwMCwgMHg3OTkwLCAweDgxMGMsIDB4OTE4OCwgMHgwMDBjLAorCTB4OTE4MiwgMHgwMDFhLCAweDAyMTAsIDB4MjAwOSwgMHgwMDFhLCAweDIxYTgsIDB4ODEwYiwgMHhhOTcyLAorCTB4YWM3NiwgMHgyZTk4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDFmLCAweDIwYTAsIDB4MjAwMSwgMHgwMjA1LAorCTB4MjAwYywgMHg5MThkLCAweDAwODAsIDB4MjEwMiwgMHg0MDAzLCAweDIwMDMsIDB4MDAwMCwgMHgwODBjLAorCTB4NzAxMiwgMHgwMDllLCAweDAwZmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwMTYsIDB4MDBkNiwgMHgwMGY2LAorCTB4MDA5NiwgMHgwMDE2LCAweDIwMDEsIDB4MDIwNSwgMHgyMDBjLCAweDkxOGQsIDB4MDA4MCwgMHgyMTAyLAorCTB4MDAxZSwgMHgyMDc5LCAweDAyMDAsIDB4MmU5OCwgMHhhODdjLCAweGQwZWMsIDB4MDExOCwgMHg5ZTgwLAorCTB4MDAwYywgMHgyMDk4LCAweDIwMjEsIDB4MDAzZSwgMHg5MDFlLCAweDkyODIsIDB4MDAyMCwgMHgwMjE4LAorCTB4MjAxMSwgMHgwMDIwLCAweDIwMTgsIDB4OTQ4NiwgMHgwMDNlLCAweDExNzAsIDB4MDA5NiwgMHgwODBjLAorCTB4MTA1OSwgMHgyOTAwLCAweDAwOWUsIDB4MDVjMCwgMHhhODA2LCAweDIwNDgsIDB4YTg2MCwgMHgyMGU4LAorCTB4YTg1YywgMHg5MDgwLCAweDAwMDIsIDB4MjBhMCwgMHgzMzAwLCAweDkwOGUsIDB4MDI2MCwgMHgwMTQwLAorCTB4MjAwOSwgMHgwMjgwLCAweDkxMDIsIDB4OTIwYSwgMHgwMjE4LCAweDIwMTAsIDB4MjEwMCwgMHg5MzE4LAorCTB4MjIwMCwgMHg5NDAyLCAweDEyMjgsIDB4MjQwMCwgMHg5MjAyLCAweDI0MTAsIDB4OTMxOCwgMHg5MDA2LAorCTB4MjAyMCwgMHgyMmE4LCAweGE4MDAsIDB4OTIwMCwgMHhhODAyLCAweDIwZTEsIDB4MDAwMCwgMHg0MDAzLAorCTB4ODNmZiwgMHgwMTgwLCAweDMzMDAsIDB4OTA4NiwgMHgwMjgwLCAweDExMzAsIDB4NzgxNCwgMHg4MDAwLAorCTB4OTA4NSwgMHgwMDgwLCAweDc4MTYsIDB4MmU5OCwgMHgyMzEwLCAweDg0ZmYsIDB4MDkwNCwgMHhiNGUyLAorCTB4MDgwNCwgMHhiNGU0LCAweDkwODUsIDB4MDAwMSwgMHg3ODE3LCAweDAwMDAsIDB4MDA5ZSwgMHgwMGZlLAorCTB4MDBkZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHgwMDM2LCAweDAwOTYsIDB4NjMxNCwgMHgyMzQ4LAorCTB4YTg3YSwgMHhhOTgyLCAweDA4MGMsIDB4NzAwNiwgMHgwMDllLCAweDAwM2UsIDB4MDBkZSwgMHgwMDA1LAorCTB4OTFiNiwgMHgwMDE1LCAweDExMTgsIDB4MDgwYywgMHhiMTZjLCAweDAwMzAsIDB4OTFiNiwgMHgwMDE2LAorCTB4MTkwYywgMHgwZDg1LCAweDA4MGMsIDB4YjE2YywgMHgwMDA1LCAweDIwYTksIDB4MDAwZSwgMHgyMGUxLAorCTB4MDAwMCwgMHgyZTk4LCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLAorCTB4MjBhMCwgMHgwMDllLCAweDQwMDMsIDB4OTE5NiwgMHgwMDE2LCAweDAxZjAsIDB4MDEzNiwgMHg5MDgwLAorCTB4MDAxYiwgMHgyMGEwLCAweDIwMTEsIDB4MDAwNiwgMHgyMGE5LCAweDAwMDEsIDB4MzQxOCwgMHg4MzE4LAorCTB4MjNhMCwgMHg0MDAzLCAweDMzMTgsIDB4ODMxOCwgMHgyMzk4LCAweDgyMTEsIDB4MWRiOCwgMHgyMDExLAorCTB4MDAwNiwgMHgwMTNlLCAweDIwYTAsIDB4MzMxOCwgMHg4MzE4LCAweDIzOTgsIDB4NDAwMywgMHgzNDE4LAorCTB4ODMxOCwgMHgyM2EwLCAweDgyMTEsIDB4MWRiOCwgMHgwMDk2LCAweDA4MGMsIDB4Y2YxYiwgMHgwMTMwLAorCTB4NjAxNCwgMHgyMDQ4LCAweGE4MDcsIDB4MDAwMCwgMHhhODY3LCAweDAxMDMsIDB4MDA5ZSwgMHgwODA0LAorCTB4YjE2YywgMHgwMDk2LCAweDAwZDYsIDB4MDAzNiwgMHg3MzMwLCAweDkzODYsIDB4MDIwMCwgMHgxMWE4LAorCTB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjhkNywgMHgwMDAwLCAweDAwYmUsIDB4NjAxNCwgMHg5MDA1LAorCTB4MDEzMCwgMHgyMDQ4LCAweGE4MDcsIDB4MDAwMCwgMHhhODY3LCAweDAxMDMsIDB4YWIzMiwgMHgwODBjLAorCTB4YjE2YywgMHgwMDNlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDA1LCAweDAwMTEsIDB4MWQ0OCwgMHgwY2M4LAorCTB4MDAwNiwgMHgwMDE2LCAweDA4MGMsIDB4ZDY0NSwgMHgwMTg4LCAweDYwMTQsIDB4OTAwNSwgMHgxMTcwLAorCTB4NjAwYiwgMHgwMDAzLCAweDYwMWIsIDB4MDAwMCwgMHg2MDRiLCAweDAwMDAsIDB4MjAwOSwgMHgwMDIyLAorCTB4MDgwYywgMHhiOTk0LCAweDkwMDYsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLAorCTB4MGNkMCwgMHgwMDk2LCAweDAwMTYsIDB4MjBhOSwgMHgwMDE0LCAweDllODAsIDB4MDAwYywgMHgyMGUxLAorCTB4MDAwMCwgMHgyMDk4LCAweDYwMTQsIDB4MjA0OCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLAorCTB4MDAwMiwgMHgyMGEwLCAweDQwMDMsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMSwgMHgyMDk5LAorCTB4MDI2MCwgMHgyMGE5LCAweDAwMTYsIDB4NDAwMywgMHgyMGE5LCAweDAwMGEsIDB4YTgwNCwgMHgyMDQ4LAorCTB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDAyLCAweDIwYTAsIDB4NDAwMywgMHgyMDAxLAorCTB4MDIwNSwgMHgyMDAzLCAweDAwMDIsIDB4MjA5OSwgMHgwMjYwLCAweDIwYTksIDB4MDAyMCwgMHg0MDAzLAorCTB4MjAwMywgMHgwMDAwLCAweDYwMTQsIDB4MjA0OCwgMHhhODAwLCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLAorCTB4MDgwYywgMHhiMTZjLCAweDAwMWUsIDB4MDA5ZSwgMHgwMDA1LCAweDAwOTYsIDB4MDAxNiwgMHg5MDBlLAorCTB4NzAzMCwgMHg5MDg2LCAweDAxMDAsIDB4MDE0MCwgMHg3MDM4LCAweDkwODQsIDB4MDBmZiwgMHg4MDBjLAorCTB4NzAzYywgMHg5MDg0LCAweDAwZmYsIDB4ODAwNCwgMHg5MDgwLCAweDAwMDQsIDB4OTEwOCwgMHg4MTBiLAorCTB4MjAxMSwgMHgwMDAyLCAweDIwMTksIDB4MDAwYywgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYTdiLAorCTB4MDgwYywgMHhjZjFiLCAweDAxNDAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MDcsIDB4MDAwMCwgMHhhODY0LAorCTB4YThlMiwgMHhhODY3LCAweDAxMDMsIDB4MDgwYywgMHhiMTZjLCAweDAwMWUsIDB4MDA5ZSwgMHgwMDA1LAorCTB4MDAxNiwgMHgyMDA5LCAweDAwMDAsIDB4NzAzMCwgMHg5MDg2LCAweDAyMDAsIDB4MDExMCwgMHgyMDA5LAorCTB4MDAwMSwgMHgwMDk2LCAweDYwMTQsIDB4OTA0ZCwgMHgwOTBjLCAweDBkODUsIDB4YTk3YSwgMHgwODBjLAorCTB4NzAxMiwgMHgwMDllLCAweDA4MGMsIDB4YjE2YywgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDk2LAorCTB4NzAzMCwgMHg5MDg2LCAweDAxMDAsIDB4MTExOCwgMHgyMDA5LCAweDAwMDQsIDB4MDAxMCwgMHg3MDM0LAorCTB4ODAwYywgMHg4MTBiLCAweDIwMTEsIDB4MDAwYywgMHgyMDE5LCAweDAwMGMsIDB4NjAxNCwgMHgyMDQ4LAorCTB4YTgwNCwgMHgwMDk2LCAweDkwMDUsIDB4MDEwOCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2E3YiwgMHgwMDllLAorCTB4MDgwYywgMHhjZjFiLCAweDAxNDgsIDB4YTgwNCwgMHg5MDA1LCAweDExNTgsIDB4YTgwNywgMHgwMDAwLAorCTB4YTg2NCwgMHhhOGUyLCAweGE4NjcsIDB4MDEwMywgMHgwODBjLCAweGIxNmMsIDB4MDA5ZSwgMHgwMDFlLAorCTB4MDAwNSwgMHgwMDg2LCAweDIwNDAsIDB4YTAzMCwgMHg4MDA3LCAweDkwODYsIDB4MDEwMCwgMHgxMTE4LAorCTB4MDgwYywgMHhiYjVjLCAweDAwZTAsIDB4YTAzNCwgMHg4MDA3LCAweDgwMGMsIDB4ODgwNiwgMHg4MDA2LAorCTB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwYywgMHhhODdiLAorCTB4MDAwMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDAwLCAweGFhYTAsIDB4YWI5YywgMHhhY2E4LAorCTB4YWRhNCwgMHgyMDMxLCAweDAwMDAsIDB4MjA0MSwgMHgxMmE4LCAweDAwMTksIDB4MGQwOCwgMHgwMDhlLAorCTB4MDg5OCwgMHgwMDk2LCAweDAwMDYsIDB4MDgwYywgMHgxMDU5LCAweDAwMGUsIDB4MDFiMCwgMHhhOGFiLAorCTB4MGRjYiwgMHhhODc2LCAweDAwMGUsIDB4YThhMiwgMHgwMDA2LCAweGFlNmEsIDB4MjgwMCwgMHhhODllLAorCTB4YTk3YSwgMHhhZjcyLCAweGFhOGUsIDB4YWI5MiwgMHhhYzk2LCAweGFkOWEsIDB4MDA4NiwgMHgyOTQwLAorCTB4MDgwYywgMHgxMTRlLCAweDAwOGUsIDB4OTA4NSwgMHgwMDAxLCAweDAwOWUsIDB4MDAwNSwgMHgwMGU2LAorCTB4MDBkNiwgMHgwMDI2LCAweDcwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDYyMTAsIDB4MDBiNiwgMHgyMjU4LAorCTB4YmExMCwgMHgwMGJlLCAweDkyMDYsIDB4MTUyMCwgMHg3MDBjLCAweDYyMTAsIDB4MDBiNiwgMHgyMjU4LAorCTB4YmExNCwgMHgwMGJlLCAweDkyMDYsIDB4MTFlMCwgMHg2MDRiLCAweDAwMDAsIDB4MmM2OCwgMHgwMDE2LAorCTB4MjAwOSwgMHgwMDM1LCAweDA4MGMsIDB4ZDViYiwgMHgwMDFlLCAweDExNTgsIDB4NjIyYywgMHgyMjY4LAorCTB4MjA3MSwgMHgwMjZjLCAweDZiMjAsIDB4OTM4NiwgMHgwMDAzLCAweDAxMzAsIDB4OTM4NiwgMHgwMDA2LAorCTB4MDEyOCwgMHgwODBjLCAweGIxNmMsIDB4MDAyMCwgMHgwMDM5LCAweDAwMTAsIDB4MDgwYywgMHhiN2M3LAorCTB4MDAyZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMDk2LCAweDY4MTQsIDB4MjA0OCwgMHg5MTg2LAorCTB4MDAxNSwgMHgwOTA0LCAweGI3YTYsIDB4OTE4ZSwgMHgwMDE2LCAweDE5MDQsIDB4YjdjNSwgMHg3MDBjLAorCTB4OTA4YywgMHhmZjAwLCAweDkxODYsIDB4MTcwMCwgMHgwMTIwLCAweDkxODYsIDB4MDMwMCwgMHgxOTA0LAorCTB4Yjc4MCwgMHg4OWZmLCAweDExMzgsIDB4NjgwMCwgMHg5MDg2LCAweDAwMGYsIDB4MDkwNCwgMHhiNzYyLAorCTB4MDgwNCwgMHhiN2MzLCAweDY4MDgsIDB4OTA4NiwgMHhmZmZmLCAweDE5MDQsIDB4YjdhOCwgMHhhODdjLAorCTB4OTA4NCwgMHgwMDYwLCAweDkwODYsIDB4MDAyMCwgMHgxMTUwLCAweGE4YWMsIDB4YTkzNCwgMHg5MTA2LAorCTB4MTkwNCwgMHhiN2E4LCAweGE4YjAsIDB4YTkzOCwgMHg5MTA2LCAweDE5MDQsIDB4YjdhOCwgMHg2ODI0LAorCTB4ZDA4NCwgMHgxOTA0LCAweGI3YTgsIDB4ZDBiNCwgMHgwMTU4LCAweDAwMTYsIDB4MjAwMSwgMHgxOTg2LAorCTB4MjAwYywgMHg2MDE4LCAweDkxMDIsIDB4OTA4MiwgMHgwMDA1LCAweDAwMWUsIDB4MWEwNCwgMHhiN2E4LAorCTB4MDgwYywgMHhkMTBjLCAweDY4MTAsIDB4MDA5NiwgMHgyMDQ4LCAweGE5YTAsIDB4MDA5ZSwgMHg2ODVjLAorCTB4YTg3YSwgMHhhOTc2LCAweDY4NjQsIDB4YTg4MiwgMHhhODdjLCAweGMwZGMsIDB4YzBmNCwgMHhjMGQ0LAorCTB4YTg3ZSwgMHgwMDI2LCAweDkwMGUsIDB4NmExOCwgMHgyMDAxLCAweDAwMGEsIDB4MDgwYywgMHg5NTViLAorCTB4YTg4NCwgMHg5MjBhLCAweDAyMDgsIDB4ODAxMSwgMHhhYTg2LCAweDgyZmYsIDB4MDAyZSwgMHgxMTM4LAorCTB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4Y2MwMSwgMHgwMGNlLCAweDA4MDQsIDB4YjdjMywgMHgwMGM2LAorCTB4YTg2OCwgMHhkMGZjLCAweDExMTgsIDB4MDgwYywgMHg2MjJmLCAweDAwMTAsIDB4MDgwYywgMHg2NjNhLAorCTB4MDBjZSwgMHgxOTA0LCAweGI3YTgsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4YjE2YywgMHgwMGNlLAorCTB4MDgwNCwgMHhiN2MzLCAweDAwYzYsIDB4MDgwYywgMHhiMWRkLCAweDAxOTgsIDB4NjAxNywgMHgwMDAwLAorCTB4NjgxMCwgMHg2MDEyLCAweDA4MGMsIDB4ZDNiNiwgMHg2MDIzLCAweDAwMDMsIDB4NjkwNCwgMHgwMGM2LAorCTB4MmQ2MCwgMHgwODBjLCAweGIxNmMsIDB4MDBjZSwgMHgwODBjLCAweGIyMGEsIDB4MDBjZSwgMHgwODA0LAorCTB4YjdjMywgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2ODRhLCAweDAwY2UsIDB4MDgwNCwgMHhiN2MzLAorCTB4NzAwOCwgMHg5MDg2LCAweDAwMGIsIDB4MTFjOCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOTAwLAorCTB4YzFiYywgMHhiOTAyLCAweDAwYmUsIDB4MDBjNiwgMHgyZDYwLCAweGE4N2IsIDB4MDAwMywgMHgwODBjLAorCTB4ZDVmZiwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHgyMDA5LAorCTB4ODAyMCwgMHgwODBjLCAweDk2MTcsIDB4MDBjZSwgMHgwNDMwLCAweDcwMGMsIDB4OTA4NiwgMHgyYTAwLAorCTB4MTEzOCwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2ODRhLCAweDAwZTgsIDB4MDRjMSwgMHgwMGU4LAorCTB4ODlmZiwgMHgwOTBjLCAweDBkODUsIDB4MDBjNiwgMHgwMGQ2LCAweDJkNjAsIDB4YTg2NywgMHgwMTAzLAorCTB4YTg3YiwgMHgwMDAzLCAweDA4MGMsIDB4NmUyNywgMHgwODBjLCAweGQxMGMsIDB4MDgwYywgMHhiMWE3LAorCTB4MDAyNiwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiYTNjLCAweDA4MGMsIDB4NjhkZiwgMHgwMGJlLAorCTB4MDAyZSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHhiMTZjLCAweDAwOWUsIDB4MDAwNSwgMHg5MTg2LAorCTB4MDAxNSwgMHgxMTI4LCAweDIwMDEsIDB4MTk4OCwgMHgyMDA0LCAweDY4NGEsIDB4MDA2OCwgMHg5MThlLAorCTB4MDAxNiwgMHgxMTYwLCAweDAwYzYsIDB4MmQwMCwgMHgyMDYwLCAweDA4MGMsIDB4ZWNlMSwgMHgwODBjLAorCTB4OGMxOSwgMHgwODBjLCAweGIxNmMsIDB4MDBjZSwgMHgwODBjLCAweGIxNmMsIDB4MDAwNSwgMHgwMDI2LAorCTB4MDAzNiwgMHgwMDQ2LCAweDcyMjgsIDB4YWNiMCwgMHhhYmFjLCAweGQyZjQsIDB4MDEzMCwgMHgyMDAxLAorCTB4MTk4OCwgMHgyMDA0LCAweDY4NGEsIDB4MDgwNCwgMHhiODQxLCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLAorCTB4Y2FkYywgMHgwMGNlLCAweDY4MDQsIDB4OTA4NiwgMHgwMDUwLCAweDExNjgsIDB4MDBjNiwgMHgyZDAwLAorCTB4MjA2MCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDUwLCAweDIwMDksIDB4ODAyMywgMHgwODBjLAorCTB4OTYxNywgMHgwMGNlLCAweDA0ZjAsIDB4NjgwMCwgMHg5MDg2LCAweDAwMGYsIDB4MDFhOCwgMHg4OWZmLAorCTB4MDkwYywgMHgwZDg1LCAweDY4MDAsIDB4OTA4NiwgMHgwMDA0LCAweDExOTAsIDB4YTg3YywgMHhkMGFjLAorCTB4MDE3OCwgMHhhODQzLCAweDBmZmYsIDB4YTgzZiwgMHgwZmZmLCAweGE4ODAsIDB4YzBmYywgMHhhODgyLAorCTB4MjAwMSwgMHgwMDAxLCAweDY4MzIsIDB4MDQwMCwgMHgyMDAxLCAweDAwMDcsIDB4NjgzMiwgMHgwMGUwLAorCTB4YTg3YywgMHhkMGI0LCAweDExNTAsIDB4ZDBhYywgMHgwZGI4LCAweDY4MjQsIDB4ZDBmNCwgMHgxZDQ4LAorCTB4YTgzOCwgMHhhOTM0LCAweDkxMDUsIDB4MGQ4MCwgMHgwYzIwLCAweGQyZWMsIDB4MWQ2OCwgMHg3MDI0LAorCTB4OTMwNiwgMHgxMTE4LCAweDcwMjAsIDB4OTQwNiwgMHgwZDM4LCAweDcwMjAsIDB4NjgzZSwgMHg3MDI0LAorCTB4NjgzYSwgMHgyMDAxLCAweDAwMDUsIDB4NjgzMiwgMHgwODBjLCAweGQyYTAsIDB4MDgwYywgMHg5YWIzLAorCTB4MDAxMCwgMHgwODBjLCAweGIxNmMsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LAorCTB4MDBkNiwgMHgwMDI2LCAweDcwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDYyMTAsIDB4MDBiNiwgMHgyMjU4LAorCTB4YmExMCwgMHgwMGJlLCAweDkyMDYsIDB4MTkwNCwgMHhiOGFjLCAweDcwMGMsIDB4NjIxMCwgMHgwMGI2LAorCTB4MjI1OCwgMHhiYTE0LCAweDAwYmUsIDB4OTIwNiwgMHgxOTA0LCAweGI4YWMsIDB4NjAzOCwgMHgyMDY4LAorCTB4NjgyNCwgMHhjMGRjLCAweDY4MjYsIDB4NmEyMCwgMHg5Mjg2LCAweDAwMDcsIDB4MDkwNCwgMHhiOGFjLAorCTB4OTI4NiwgMHgwMDAyLCAweDA5MDQsIDB4YjhhYywgMHg5Mjg2LCAweDAwMDAsIDB4MDVlOCwgMHg2ODA4LAorCTB4NjMzYywgMHg5MzA2LCAweDE1YzgsIDB4MjA3MSwgMHgwMjZjLCAweDkxODYsIDB4MDAxNSwgMHgwNTcwLAorCTB4OTE4ZSwgMHgwMDE2LCAweDExMDAsIDB4MDBjNiwgMHg2MDM4LCAweDIwNjAsIDB4NjEwNCwgMHg5MTg2LAorCTB4MDA0YiwgMHgwMWMwLCAweDkxODYsIDB4MDA0YywgMHgwMWE4LCAweDkxODYsIDB4MDA0ZCwgMHgwMTkwLAorCTB4OTE4NiwgMHgwMDRlLCAweDAxNzgsIDB4OTE4NiwgMHgwMDUyLCAweDAxNjAsIDB4NjAxNCwgMHgwMDk2LAorCTB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDkwYywgMHgwZDg1LCAweGE4N2IsIDB4MDAwMywgMHgwMDllLAorCTB4MDgwYywgMHhkNWZmLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDAyLAorCTB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTYxNywgMHgwMGNlLCAweDAwMzAsIDB4NjAzOCwgMHgyMDcwLAorCTB4MjAwMSwgMHgxOTg4LCAweDIwMDQsIDB4NzA0YSwgMHgwODBjLCAweGIxNmMsIDB4MDAyZSwgMHgwMGRlLAorCTB4MDBlZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGY2LCAweDYwMTQsIDB4MjA0OCwgMHg2MDEwLAorCTB4MjA1OCwgMHg5MWI2LCAweDAwMTUsIDB4MDEzMCwgMHhiYTA4LCAweGJiMGMsIDB4YmMwMCwgMHhjNDhjLAorCTB4YmMwMiwgMHgwNDcwLCAweDAwOTYsIDB4MDE1NiwgMHgwMDM2LCAweDAwMjYsIDB4MmI0OCwgMHg5ZTkwLAorCTB4MDAxMCwgMHgyMDE5LCAweDAwMGEsIDB4MjBhOSwgMHgwMDA0LCAweDA4MGMsIDB4YzIyMiwgMHgwMDJlLAorCTB4MDAzZSwgMHgwMTVlLCAweDAwOWUsIDB4MTkwNCwgMHhiOTFkLCAweDAwOTYsIDB4MDE1NiwgMHgwMDM2LAorCTB4MDAyNiwgMHgyYjQ4LCAweDllOTAsIDB4MDAxNCwgMHgyMDE5LCAweDAwMDYsIDB4MjBhOSwgMHgwMDA0LAorCTB4MDgwYywgMHhjMjIyLCAweDAwMmUsIDB4MDAzZSwgMHgwMTVlLCAweDAwOWUsIDB4MTViMCwgMHg3MjM4LAorCTB4YmEwYSwgMHg3MzNjLCAweGJiMGUsIDB4ODNmZiwgMHgwMTE4LCAweGJjMDAsIDB4YzQ4ZCwgMHhiYzAyLAorCTB4YTgwNCwgMHg5MDA1LCAweDExMjgsIDB4MDBmZSwgMHgwMDllLCAweDAwYmUsIDB4MDgwNCwgMHhiNTdjLAogCTB4MDA5NiwgMHgyMDQ4LCAweGFhMTIsIDB4YWIxNiwgMHhhYzBhLCAweDAwOWUsIDB4ODAwNiwgMHg4MDA2LAogCTB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwMiwgMHgyMDA5LAogCTB4MDAyYiwgMHhhYWEwLCAweGFiOWMsIDB4YWNhOCwgMHhhZGE0LCAweDIwMzEsIDB4MDAwMCwgMHgyMDQxLAotCTB4MTI5YywgMHgwODBjLCAweGI0NzMsIDB4MDEzMCwgMHgwMGZlLCAweDAwOWUsIDB4MDgwYywgMHhhZjRlLAotCTB4MDBiZSwgMHgwMDA1LCAweDA4MGMsIDB4YjkzYywgMHgwY2I4LCAweDJiNzgsIDB4MDBmNiwgMHgwODBjLAotCTB4MzJmYiwgMHgwODBjLCAweGQzNzIsIDB4MDBmZSwgMHgwMGM2LCAweDA4MGMsIDB4YWVmOCwgMHgyZjAwLAorCTB4MTJhOCwgMHgwODBjLCAweGI2OTEsIDB4MDEzMCwgMHgwMGZlLCAweDAwOWUsIDB4MDgwYywgMHhiMTZjLAorCTB4MDBiZSwgMHgwMDA1LCAweDA4MGMsIDB4YmI1YywgMHgwY2I4LCAweDJiNzgsIDB4MDBmNiwgMHgwODBjLAorCTB4MzMxNSwgMHgwODBjLCAweGQ2NWEsIDB4MDBmZSwgMHgwMGM2LCAweDA4MGMsIDB4YjExNiwgMHgyZjAwLAogCTB4NjAxMiwgMHg2MDE3LCAweDAwMDAsIDB4NjAyMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLAotCTB4MDAwMSwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NmM5LCAweDA4MGMsIDB4NjZmNSwgMHgwODBjLAotCTB4OTQyNywgMHgwODBjLCAweDk4YmMsIDB4MDBjZSwgMHgwODA0LCAweGI2ZDAsIDB4MjEwMCwgMHg5MWIyLAotCTB4MDA1MywgMHgxYTBjLCAweDBkNzksIDB4OTFiMiwgMHgwMDQwLCAweDFhMDQsIDB4Yjc4NiwgMHgwMDAyLAotCTB4Yjc3NCwgMHhiNzc0LCAweGI3NmEsIDB4Yjc3NCwgMHhiNzc0LCAweGI3NzQsIDB4Yjc2OCwgMHhiNzY4LAotCTB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LAotCTB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LAotCTB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzc0LAotCTB4Yjc2OCwgMHhiNzc0LCAweGI3NzQsIDB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LAotCTB4Yjc2YSwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LAotCTB4Yjc2OCwgMHhiNzY4LCAweGI3NzQsIDB4Yjc3NCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LAotCTB4Yjc2OCwgMHhiNzY4LCAweGI3NjgsIDB4Yjc2OCwgMHhiNzY4LCAweGI3NzQsIDB4Yjc2OCwgMHhiNzY4LAotCTB4MDgwYywgMHgwZDc5LCAweDAwNjYsIDB4MDBiNiwgMHg2NjEwLCAweDI2NTgsIDB4YjhkNCwgMHhjMDhjLAorCTB4MDAwMSwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NmZhLCAweDA4MGMsIDB4NjcyNiwgMHgwODBjLAorCTB4OTYxZSwgMHgwODBjLCAweDlhYjMsIDB4MDBjZSwgMHgwODA0LCAweGI4ZjAsIDB4MjEwMCwgMHg5MWIyLAorCTB4MDA1MywgMHgxYTBjLCAweDBkODUsIDB4OTFiMiwgMHgwMDQwLCAweDFhMDQsIDB4YjlhNiwgMHgwMDAyLAorCTB4Yjk5NCwgMHhiOTk0LCAweGI5OGEsIDB4Yjk5NCwgMHhiOTk0LCAweGI5OTQsIDB4Yjk4OCwgMHhiOTg4LAorCTB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LAorCTB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LAorCTB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTk0LAorCTB4Yjk4OCwgMHhiOTk0LCAweGI5OTQsIDB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LAorCTB4Yjk4YSwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LAorCTB4Yjk4OCwgMHhiOTg4LCAweGI5OTQsIDB4Yjk5NCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LAorCTB4Yjk4OCwgMHhiOTg4LCAweGI5ODgsIDB4Yjk4OCwgMHhiOTg4LCAweGI5OTQsIDB4Yjk4OCwgMHhiOTg4LAorCTB4MDgwYywgMHgwZDg1LCAweDAwNjYsIDB4MDBiNiwgMHg2NjEwLCAweDI2NTgsIDB4YjhkNCwgMHhjMDhjLAogCTB4YjhkNiwgMHgwMGJlLCAweDAwNmUsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHg5MTg2LAotCTB4MDAzMiwgMHgwMTE4LCAweDA4MGMsIDB4OTQyNywgMHgwMDEwLCAweDA4MGMsIDB4OTQyMCwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OThiYywgMHgwMTJlLCAweDAwMDUsIDB4MjYwMCwgMHgwMDAyLAotCTB4Yjc3NCwgMHhiNzc0LCAweGI3OWEsIDB4Yjc3NCwgMHhiNzc0LCAweGI3OWEsIDB4Yjc5YSwgMHhiNzlhLAotCTB4Yjc5YSwgMHhiNzc0LCAweGI3OWEsIDB4Yjc3NCwgMHhiNzlhLCAweGI3NzQsIDB4Yjc5YSwgMHhiNzlhLAotCTB4Yjc5YSwgMHhiNzlhLCAweDA4MGMsIDB4MGQ3OSwgMHg2MDA0LCAweDkwYjIsIDB4MDA1MywgMHgxYTBjLAotCTB4MGQ3OSwgMHg5MWI2LCAweDAwMTMsIDB4MDkwNCwgMHhiODcxLCAweDkxYjYsIDB4MDAyNywgMHgxOTA0LAotCTB4YjgxZCwgMHgwODBjLCAweDk3ZjYsIDB4NjAwNCwgMHgwODBjLCAweGNlMzksIDB4MDFiMCwgMHgwODBjLAotCTB4Y2U0YSwgMHgwMWE4LCAweDkwOGUsIDB4MDAyMSwgMHgwOTA0LCAweGI4MWEsIDB4OTA4ZSwgMHgwMDIyLAotCTB4MTEzMCwgMHgwODBjLCAweGIzOGEsIDB4MDkwNCwgMHhiODE2LCAweDA4MDQsIDB4YjgxNywgMHg5MDhlLAotCTB4MDAzZCwgMHgwOTA0LCAweGI4MWEsIDB4MDgwNCwgMHhiODEwLCAweDA4MGMsIDB4MzMyYSwgMHgyMDAxLAotCTB4MDAwNywgMHgwODBjLCAweDY2YzksIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjlhMCwgMHgwMGJlLAotCTB4MDgwYywgMHhiOTNjLCAweDkxODYsIDB4MDA3ZSwgMHgxMTQ4LCAweDIwMDEsIDB4MTgzNywgMHgyMDE0LAotCTB4YzI4NSwgMHgwODBjLCAweDc2OWQsIDB4MTEwOCwgMHhjMmFkLCAweDIyMDIsIDB4MDgwYywgMHhhYWY3LAotCTB4MDAzNiwgMHgwMDI2LCAweDIwMTksIDB4MDAyOCwgMHgyMTEwLCAweDA4MGMsIDB4ZWFmZCwgMHgwMDJlLAorCTB4MDAzMiwgMHgwMTE4LCAweDA4MGMsIDB4OTYxZSwgMHgwMDEwLCAweDA4MGMsIDB4OTYxNywgMHgwMTI2LAorCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OWFiMywgMHgwMTJlLCAweDAwMDUsIDB4MjYwMCwgMHgwMDAyLAorCTB4Yjk5NCwgMHhiOTk0LCAweGI5YmEsIDB4Yjk5NCwgMHhiOTk0LCAweGI5YmEsIDB4YjliYSwgMHhiOWJhLAorCTB4YjliYSwgMHhiOTk0LCAweGI5YmEsIDB4Yjk5NCwgMHhiOWJhLCAweGI5OTQsIDB4YjliYSwgMHhiOWJhLAorCTB4YjliYSwgMHhiOWJhLCAweDA4MGMsIDB4MGQ4NSwgMHg2MDA0LCAweDkwYjIsIDB4MDA1MywgMHgxYTBjLAorCTB4MGQ4NSwgMHg5MWI2LCAweDAwMTMsIDB4MDkwNCwgMHhiYTkxLCAweDkxYjYsIDB4MDAyNywgMHgxOTA0LAorCTB4YmEzZCwgMHgwODBjLCAweDk5ZWQsIDB4NjAwNCwgMHgwODBjLCAweGQxMjEsIDB4MDFiMCwgMHgwODBjLAorCTB4ZDEzMiwgMHgwMWE4LCAweDkwOGUsIDB4MDAyMSwgMHgwOTA0LCAweGJhM2EsIDB4OTA4ZSwgMHgwMDIyLAorCTB4MTEzMCwgMHgwODBjLCAweGI1YTgsIDB4MDkwNCwgMHhiYTM2LCAweDA4MDQsIDB4YmEzNywgMHg5MDhlLAorCTB4MDAzZCwgMHgwOTA0LCAweGJhM2EsIDB4MDgwNCwgMHhiYTMwLCAweDA4MGMsIDB4MzM0NCwgMHgyMDAxLAorCTB4MDAwNywgMHgwODBjLCAweDY2ZmEsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjlhMCwgMHgwMGJlLAorCTB4MDgwYywgMHhiYjVjLCAweDkxODYsIDB4MDA3ZSwgMHgxMTQ4LCAweDIwMDEsIDB4MTgzNywgMHgyMDE0LAorCTB4YzI4NSwgMHgwODBjLCAweDc3OWUsIDB4MTEwOCwgMHhjMmFkLCAweDIyMDIsIDB4MDgwYywgMHhhY2ZjLAorCTB4MDAzNiwgMHgwMDI2LCAweDIwMTksIDB4MDAyOCwgMHgyMTEwLCAweDA4MGMsIDB4ZWRlZSwgMHgwMDJlLAogCTB4MDAzZSwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgyMTEwLCAweDIwMTksIDB4MDAyOCwgMHgwODBjLAotCTB4OTViOSwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5NDc2LCAweDYwMTAsIDB4MDBiNiwgMHg5MDVkLAotCTB4MDEwMCwgMHgwMGJlLCAweDJjMDgsIDB4MDgwYywgMHhlNDY1LCAweDAwN2UsIDB4MDAzZSwgMHgwMDJlLAotCTB4MDAxZSwgMHgwODBjLCAweGFiMTMsIDB4MDgwYywgMHhkMzcyLCAweDAwMTYsIDB4MDgwYywgMHhkMGM2LAotCTB4MDgwYywgMHhhZjRlLCAweDAwMWUsIDB4MDgwYywgMHgzNDA0LCAweDA4MGMsIDB4OThiYywgMHgwMDMwLAotCTB4MDgwYywgMHhkMGM2LCAweDA4MGMsIDB4YWY0ZSwgMHgwODBjLCAweDk4YmMsIDB4MDAwNSwgMHgwODBjLAotCTB4YjkzYywgMHgwY2IwLCAweDA4MGMsIDB4Yjk3OCwgMHgwYzk4LCAweDkxODYsIDB4MDAxNSwgMHgwMTE4LAotCTB4OTE4NiwgMHgwMDE2LCAweDExNDAsIDB4MDgwYywgMHhhZDRkLCAweDBkODAsIDB4OTA4NiwgMHgwMDAyLAotCTB4MDkwNCwgMHhiOTgzLCAweDBjNTgsIDB4OTE4NiwgMHgwMDE0LCAweDFkNDAsIDB4MDgwYywgMHg5N2Y2LAotCTB4NjAwNCwgMHg5MDhlLCAweDAwMjIsIDB4MTExOCwgMHgwODBjLCAweGIzOGEsIDB4MDlmOCwgMHgwODBjLAotCTB4MzJmYiwgMHgwODBjLCAweGQzNzIsIDB4MDgwYywgMHhjZTM5LCAweDExOTAsIDB4MDgwYywgMHgzMzJhLAotCTB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjlhMCwgMHgwMGJlLCAweDA4MGMsIDB4YjkzYywgMHg5MTg2LAorCTB4OTdiMCwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5NjZkLCAweDYwMTAsIDB4MDBiNiwgMHg5MDVkLAorCTB4MDEwMCwgMHgwMGJlLCAweDJjMDgsIDB4MDgwYywgMHhlNzVkLCAweDAwN2UsIDB4MDAzZSwgMHgwMDJlLAorCTB4MDAxZSwgMHgwODBjLCAweGFkMTgsIDB4MDgwYywgMHhkNjVhLCAweDAwMTYsIDB4MDgwYywgMHhkM2FlLAorCTB4MDgwYywgMHhiMTZjLCAweDAwMWUsIDB4MDgwYywgMHgzNDFlLCAweDA4MGMsIDB4OWFiMywgMHgwMDMwLAorCTB4MDgwYywgMHhkM2FlLCAweDA4MGMsIDB4YjE2YywgMHgwODBjLCAweDlhYjMsIDB4MDAwNSwgMHgwODBjLAorCTB4YmI1YywgMHgwY2IwLCAweDA4MGMsIDB4YmI5OCwgMHgwYzk4LCAweDkxODYsIDB4MDAxNSwgMHgwMTE4LAorCTB4OTE4NiwgMHgwMDE2LCAweDExNDAsIDB4MDgwYywgMHhhZjYxLCAweDBkODAsIDB4OTA4NiwgMHgwMDAyLAorCTB4MDkwNCwgMHhiYmEzLCAweDBjNTgsIDB4OTE4NiwgMHgwMDE0LCAweDFkNDAsIDB4MDgwYywgMHg5OWVkLAorCTB4NjAwNCwgMHg5MDhlLCAweDAwMjIsIDB4MTExOCwgMHgwODBjLCAweGI1YTgsIDB4MDlmOCwgMHgwODBjLAorCTB4MzMxNSwgMHgwODBjLCAweGQ2NWEsIDB4MDgwYywgMHhkMTIxLCAweDExOTAsIDB4MDgwYywgMHgzMzQ0LAorCTB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjlhMCwgMHgwMGJlLCAweDA4MGMsIDB4YmI1YywgMHg5MTg2LAogCTB4MDA3ZSwgMHgxMTI4LCAweDIwMDEsIDB4MTgzNywgMHgyMDBjLCAweGMxODUsIDB4MjEwMiwgMHgwODAwLAotCTB4MDgwYywgMHhjZTRhLCAweDExMjAsIDB4MDgwYywgMHhiOTNjLCAweDA4MDQsIDB4YjgxMCwgMHg2MDA0LAorCTB4MDgwYywgMHhkMTMyLCAweDExMjAsIDB4MDgwYywgMHhiYjVjLCAweDA4MDQsIDB4YmEzMCwgMHg2MDA0LAogCTB4OTA4ZSwgMHgwMDMyLCAweDExNjAsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsIDB4MTg5ZSwgMHgyMDc5LAotCTB4MDAwMCwgMHgwODBjLCAweDM2YTUsIDB4MDBmZSwgMHgwMGVlLCAweDA4MDQsIDB4YjgxMCwgMHg2MDA0LAotCTB4OTA4ZSwgMHgwMDIxLCAweDBkNDAsIDB4OTA4ZSwgMHgwMDIyLCAweDA5MGMsIDB4YjkzYywgMHgwODA0LAotCTB4YjgxMCwgMHg5MGIyLCAweDAwNDAsIDB4MWEwNCwgMHhiOTFjLCAweDIwMDgsIDB4MDAwMiwgMHhiOGI5LAotCTB4YjhiYSwgMHhiOGJkLCAweGI4YzAsIDB4YjhjMywgMHhiOGQwLCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LAotCTB4YjhiNywgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LAotCTB4YjhiNywgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LAotCTB4YjhiNywgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LCAweGI4ZDMsIDB4YjhkZSwgMHhiOGI3LAotCTB4YjhkZiwgMHhiOGRlLCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGRlLAotCTB4YjhkZSwgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LAotCTB4YjhiNywgMHhiOTA3LCAweGI4ZGUsIDB4YjhiNywgMHhiOGRhLCAweGI4YjcsIDB4YjhiNywgMHhiOGI3LAotCTB4YjhkYiwgMHhiOGI3LCAweGI4YjcsIDB4YjhiNywgMHhiOGRlLCAweGI5MDIsIDB4YjhiNywgMHgwODBjLAotCTB4MGQ3OSwgMHgwNDIwLCAweDIwMDEsIDB4MDAwYiwgMHgwNDQ4LCAweDIwMDEsIDB4MDAwMywgMHgwNDMwLAorCTB4MDAwMCwgMHgwODBjLCAweDM2YmYsIDB4MDBmZSwgMHgwMGVlLCAweDA4MDQsIDB4YmEzMCwgMHg2MDA0LAorCTB4OTA4ZSwgMHgwMDIxLCAweDBkNDAsIDB4OTA4ZSwgMHgwMDIyLCAweDA5MGMsIDB4YmI1YywgMHgwODA0LAorCTB4YmEzMCwgMHg5MGIyLCAweDAwNDAsIDB4MWEwNCwgMHhiYjNjLCAweDIwMDgsIDB4MDAwMiwgMHhiYWQ5LAorCTB4YmFkYSwgMHhiYWRkLCAweGJhZTAsIDB4YmFlMywgMHhiYWYwLCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LAorCTB4YmFkNywgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LAorCTB4YmFkNywgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LAorCTB4YmFkNywgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LCAweGJhZjMsIDB4YmFmZSwgMHhiYWQ3LAorCTB4YmFmZiwgMHhiYWZlLCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWZlLAorCTB4YmFmZSwgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LAorCTB4YmFkNywgMHhiYjI3LCAweGJhZmUsIDB4YmFkNywgMHhiYWZhLCAweGJhZDcsIDB4YmFkNywgMHhiYWQ3LAorCTB4YmFmYiwgMHhiYWQ3LCAweGJhZDcsIDB4YmFkNywgMHhiYWZlLCAweGJiMjIsIDB4YmFkNywgMHgwODBjLAorCTB4MGQ4NSwgMHgwNDIwLCAweDIwMDEsIDB4MDAwYiwgMHgwNDQ4LCAweDIwMDEsIDB4MDAwMywgMHgwNDMwLAogCTB4MjAwMSwgMHgwMDA1LCAweDA0MTgsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwNCwgMHgwMGJlLAogCTB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwMCwgMHgxMWQ4LCAweDIwMDEsIDB4MDAwMSwgMHgwMGIwLAotCTB4MjAwMSwgMHgwMDA5LCAweDAwOTgsIDB4NjAwMywgMHgwMDA1LCAweDA4MGMsIDB4ZDM3NSwgMHgwODBjLAotCTB4OThiYywgMHgwMDU4LCAweDAwMTgsIDB4MDAxMCwgMHgwODBjLCAweDY2YzksIDB4MDRiOCwgMHgwODBjLAotCTB4ZDM3NSwgMHg2MDAzLCAweDAwMDQsIDB4MDgwYywgMHg5OGJjLCAweDAwMDUsIDB4MDgwYywgMHg2NmM5LAorCTB4MjAwMSwgMHgwMDA5LCAweDAwOTgsIDB4NjAwMywgMHgwMDA1LCAweDA4MGMsIDB4ZDY1ZCwgMHgwODBjLAorCTB4OWFiMywgMHgwMDU4LCAweDAwMTgsIDB4MDAxMCwgMHgwODBjLCAweDY2ZmEsIDB4MDRiOCwgMHgwODBjLAorCTB4ZDY1ZCwgMHg2MDAzLCAweDAwMDQsIDB4MDgwYywgMHg5YWIzLCAweDAwMDUsIDB4MDgwYywgMHg2NmZhLAogCTB4NjAwMywgMHgwMDAyLCAweDAwMzYsIDB4MjAxOSwgMHgxODUyLCAweDIzMDQsIDB4OTA4NCwgMHhmZjAwLAotCTB4MTEyMCwgMHgyMDAxLCAweDE5ODcsIDB4MjAxYywgMHgwMDQwLCAweDgwMDcsIDB4OTA5YSwgMHgwMDA0LAorCTB4MTEyMCwgMHgyMDAxLCAweDE5ODYsIDB4MjAxYywgMHgwMDQwLCAweDgwMDcsIDB4OTA5YSwgMHgwMDA0LAogCTB4MGVjMCwgMHg4MDAzLCAweDgwMWIsIDB4ODMxYiwgMHg5MzE4LCAweDYzMWEsIDB4MDAzZSwgMHgwODBjLAotCTB4OThiYywgMHgwYzE4LCAweDA4MGMsIDB4ZDBjNiwgMHgwODBjLCAweGFmNGUsIDB4MDhmMCwgMHgwMGU2LAotCTB4MDBmNiwgMHgyMDcxLCAweDE4OWUsIDB4MjA3OSwgMHgwMDAwLCAweDA4MGMsIDB4MzZhNSwgMHgwMGZlLAotCTB4MDBlZSwgMHgwODBjLCAweDk3ZjYsIDB4MDgwYywgMHhhZjRlLCAweDA4NzgsIDB4NjAwMywgMHgwMDAyLAotCTB4MDgwYywgMHhkMzc1LCAweDA4MDQsIDB4OThiYywgMHgyNjAwLCAweDIwMDgsIDB4MDAwMiwgMHhiOTMzLAotCTB4YjkxNiwgMHhiOTMxLCAweGI5MTYsIDB4YjkxNiwgMHhiOTMxLCAweGI5MzEsIDB4YjkzMSwgMHhiOTMxLAotCTB4YjkxNiwgMHhiOTMxLCAweGI5MTYsIDB4YjkzMSwgMHhiOTE2LCAweGI5MzEsIDB4YjkzMSwgMHhiOTMxLAotCTB4YjkzMSwgMHgwODBjLCAweDBkNzksIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHg2ZjExLAotCTB4MDA5ZSwgMHgwODBjLCAweGFmNGUsIDB4MDAwNSwgMHgwMGU2LCAweDAwOTYsIDB4MDAyNiwgMHgwMDE2LAotCTB4MDgwYywgMHhjYzMzLCAweDA1NjgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NjQsIDB4OTA4NiwgMHgwMTM5LAotCTB4MTFhOCwgMHhhODk0LCAweDkwODYsIDB4MDA1NiwgMHgxMTQ4LCAweDA4MGMsIDB4NTVhYywgMHgwMTMwLAorCTB4OWFiMywgMHgwYzE4LCAweDA4MGMsIDB4ZDNhZSwgMHgwODBjLCAweGIxNmMsIDB4MDhmMCwgMHgwMGU2LAorCTB4MDBmNiwgMHgyMDcxLCAweDE4OWUsIDB4MjA3OSwgMHgwMDAwLCAweDA4MGMsIDB4MzZiZiwgMHgwMGZlLAorCTB4MDBlZSwgMHgwODBjLCAweDk5ZWQsIDB4MDgwYywgMHhiMTZjLCAweDA4NzgsIDB4NjAwMywgMHgwMDAyLAorCTB4MDgwYywgMHhkNjVkLCAweDA4MDQsIDB4OWFiMywgMHgyNjAwLCAweDIwMDgsIDB4MDAwMiwgMHhiYjUzLAorCTB4YmIzNiwgMHhiYjUxLCAweGJiMzYsIDB4YmIzNiwgMHhiYjUxLCAweGJiNTEsIDB4YmI1MSwgMHhiYjUxLAorCTB4YmIzNiwgMHhiYjUxLCAweGJiMzYsIDB4YmI1MSwgMHhiYjM2LCAweGJiNTEsIDB4YmI1MSwgMHhiYjUxLAorCTB4YmI1MSwgMHgwODBjLCAweDBkODUsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHg3MDEyLAorCTB4MDA5ZSwgMHgwODBjLCAweGIxNmMsIDB4MDAwNSwgMHgwMGU2LCAweDAwOTYsIDB4MDAyNiwgMHgwMDE2LAorCTB4MDgwYywgMHhjZjFiLCAweDA1NjgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4NjQsIDB4OTA4NiwgMHgwMTM5LAorCTB4MTFhOCwgMHhhODk0LCAweDkwODYsIDB4MDA1NiwgMHgxMTQ4LCAweDA4MGMsIDB4NTVjYywgMHgwMTMwLAogCTB4MjAwMSwgMHgwMDAwLCAweDkwMGUsIDB4MjAxMSwgMHg0MDAwLCAweDAwMjgsIDB4MjAwMSwgMHgwMDMwLAotCTB4OTAwZSwgMHgyMDExLCAweDQwMDUsIDB4MDgwYywgMHhkMjM3LCAweDAwOTAsIDB4YTg2OCwgMHhkMGZjLAorCTB4OTAwZSwgMHgyMDExLCAweDQwMDUsIDB4MDgwYywgMHhkNTFmLCAweDAwOTAsIDB4YTg2OCwgMHhkMGZjLAogCTB4MDE3OCwgMHhhODA3LCAweDAwMDAsIDB4MDAxNiwgMHg2MDA0LCAweDkwOGUsIDB4MDAyMSwgMHgwMTY4LAogCTB4OTA4ZSwgMHgwMDNkLCAweDAxNTAsIDB4MDAxZSwgMHhhODY3LCAweDAxMDMsIDB4YTgzMywgMHgwMTAwLAogCTB4MDAxZSwgMHgwMDJlLCAweDAwOWUsIDB4MDBlZSwgMHgwMDA1LCAweDAwMWUsIDB4MDAwOSwgMHgwY2MwLAogCTB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LCAweGE4NjcsIDB4MDEwMywgMHhhODIzLAogCTB4ODAwMSwgMHgwMDllLCAweDAwMDUsIDB4MDBiNiwgMHg2NjEwLCAweDI2NTgsIDB4YjgwNCwgMHg5MDg0LAotCTB4MDBmZiwgMHg5MGIyLCAweDAwMGMsIDB4MWEwYywgMHgwZDc5LCAweDY2MDQsIDB4OTZiNiwgMHgwMDRkLAotCTB4MTEyMCwgMHgwODBjLCAweGQxNTYsIDB4MDgwNCwgMHhiYTA4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDQzLAotCTB4MTEyMCwgMHgwODBjLCAweGQxOWYsIDB4MDgwNCwgMHhiYTA4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDRiLAotCTB4MTEyMCwgMHgwODBjLCAweGQxY2IsIDB4MDgwNCwgMHhiYTA4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDMzLAotCTB4MTEyMCwgMHgwODBjLCAweGQwZTgsIDB4MDgwNCwgMHhiYTA4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDI4LAotCTB4MTEyMCwgMHgwODBjLCAweGNlODgsIDB4MDgwNCwgMHhiYTA4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDI5LAotCTB4MTEyMCwgMHgwODBjLCAweGNlYzksIDB4MDgwNCwgMHhiYTA4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDFmLAotCTB4MTEyMCwgMHgwODBjLCAweGIzMmYsIDB4MDgwNCwgMHhiYTA4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDAwLAotCTB4MTExOCwgMHgwODBjLCAweGI2OTQsIDB4MDRlMCwgMHg2NjA0LCAweDk2YjYsIDB4MDAyMiwgMHgxMTE4LAotCTB4MDgwYywgMHhiMzZiLCAweDA0YTgsIDB4NjYwNCwgMHg5NmI2LCAweDAwMzUsIDB4MTExOCwgMHgwODBjLAotCTB4YjQ5MSwgMHgwNDcwLCAweDY2MDQsIDB4OTZiNiwgMHgwMDM5LCAweDExMTgsIDB4MDgwYywgMHhiNjI5LAotCTB4MDQzOCwgMHg2NjA0LCAweDk2YjYsIDB4MDAzZCwgMHgxMTE4LCAweDA4MGMsIDB4YjNhMywgMHgwNDAwLAotCTB4NjYwNCwgMHg5NmI2LCAweDAwNDQsIDB4MTExOCwgMHgwODBjLCAweGIzZGYsIDB4MDBjOCwgMHg2NjA0LAotCTB4OTZiNiwgMHgwMDQ5LCAweDExMTgsIDB4MDgwYywgMHhiNDIwLCAweDAwOTAsIDB4NjYwNCwgMHg5NmI2LAotCTB4MDA0MSwgMHgxMTE4LCAweDA4MGMsIDB4YjQwYSwgMHgwMDU4LCAweDkxYjYsIDB4MDAxNSwgMHgxMTEwLAotCTB4MDA2MywgMHgwMDMwLCAweDkxYjYsIDB4MDAxNiwgMHgxMTI4LCAweDAwYmUsIDB4MDgwNCwgMHhiYzY2LAotCTB4MDBiZSwgMHgwMDA1LCAweDA4MGMsIDB4YjAwOSwgMHgwY2Q4LCAweGJhMjUsIDB4YmEzMywgMHhiYTI1LAotCTB4YmE3YSwgMHhiYTI1LCAweGJiZGEsIDB4YmM3MywgMHhiYTI1LCAweGJhMjUsIDB4YmMzYywgMHhiYTI1LAotCTB4YmM1MiwgMHgwMDk2LCAweDYwMWYsIDB4MDAwMCwgMHg2MDE0LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LAotCTB4YTg2NywgMHgwMTAzLCAweDAwOWUsIDB4MDgwNCwgMHhhZjRlLCAweGEwMDEsIDB4YTAwMSwgMHgwMDA1LAotCTB4NjYwNCwgMHg5NmI2LCAweDAwMDQsIDB4MTEzMCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHg2NmI1LAotCTB4MDgwNCwgMHhhZjRlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzA5MCwgMHg5MDg2LAotCTB4MDA3NCwgMHgxNTQwLCAweDA4MGMsIDB4ZTQzNiwgMHgxMWIwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LAorCTB4MDBmZiwgMHg5MGIyLCAweDAwMGMsIDB4MWEwYywgMHgwZDg1LCAweDY2MDQsIDB4OTZiNiwgMHgwMDRkLAorCTB4MTEyMCwgMHgwODBjLCAweGQ0M2UsIDB4MDgwNCwgMHhiYzI4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDQzLAorCTB4MTEyMCwgMHgwODBjLCAweGQ0ODcsIDB4MDgwNCwgMHhiYzI4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDRiLAorCTB4MTEyMCwgMHgwODBjLCAweGQ0YjMsIDB4MDgwNCwgMHhiYzI4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDMzLAorCTB4MTEyMCwgMHgwODBjLCAweGQzZDAsIDB4MDgwNCwgMHhiYzI4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDI4LAorCTB4MTEyMCwgMHgwODBjLCAweGQxNzAsIDB4MDgwNCwgMHhiYzI4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDI5LAorCTB4MTEyMCwgMHgwODBjLCAweGQxYjEsIDB4MDgwNCwgMHhiYzI4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDFmLAorCTB4MTEyMCwgMHgwODBjLCAweGI1NGQsIDB4MDgwNCwgMHhiYzI4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDAwLAorCTB4MTExOCwgMHgwODBjLCAweGI4YjIsIDB4MDRlMCwgMHg2NjA0LCAweDk2YjYsIDB4MDAyMiwgMHgxMTE4LAorCTB4MDgwYywgMHhiNTg5LCAweDA0YTgsIDB4NjYwNCwgMHg5NmI2LCAweDAwMzUsIDB4MTExOCwgMHgwODBjLAorCTB4YjZhZiwgMHgwNDcwLCAweDY2MDQsIDB4OTZiNiwgMHgwMDM5LCAweDExMTgsIDB4MDgwYywgMHhiODQ3LAorCTB4MDQzOCwgMHg2NjA0LCAweDk2YjYsIDB4MDAzZCwgMHgxMTE4LCAweDA4MGMsIDB4YjVjMSwgMHgwNDAwLAorCTB4NjYwNCwgMHg5NmI2LCAweDAwNDQsIDB4MTExOCwgMHgwODBjLCAweGI1ZmQsIDB4MDBjOCwgMHg2NjA0LAorCTB4OTZiNiwgMHgwMDQ5LCAweDExMTgsIDB4MDgwYywgMHhiNjNlLCAweDAwOTAsIDB4NjYwNCwgMHg5NmI2LAorCTB4MDA0MSwgMHgxMTE4LCAweDA4MGMsIDB4YjYyOCwgMHgwMDU4LCAweDkxYjYsIDB4MDAxNSwgMHgxMTEwLAorCTB4MDA2MywgMHgwMDMwLCAweDkxYjYsIDB4MDAxNiwgMHgxMTI4LCAweDAwYmUsIDB4MDgwNCwgMHhiZjM0LAorCTB4MDBiZSwgMHgwMDA1LCAweDA4MGMsIDB4YjIyNywgMHgwY2Q4LCAweGJjNDUsIDB4YmM1MywgMHhiYzQ1LAorCTB4YmM5YSwgMHhiYzQ1LCAweGJlNTEsIDB4YmY0MSwgMHhiYzQ1LCAweGJjNDUsIDB4YmYwYSwgMHhiYzQ1LAorCTB4YmYyMCwgMHgwMDk2LCAweDYwMWYsIDB4MDAwMCwgMHg2MDE0LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LAorCTB4YTg2NywgMHgwMTAzLCAweDAwOWUsIDB4MDgwNCwgMHhiMTZjLCAweGEwMDEsIDB4YTAwMSwgMHgwMDA1LAorCTB4NjYwNCwgMHg5NmI2LCAweDAwMDQsIDB4MTEzMCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHg2NmU2LAorCTB4MDgwNCwgMHhiMTZjLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzA5MCwgMHg5MDg2LAorCTB4MDA3NCwgMHgxNTQwLCAweDA4MGMsIDB4ZTcyZSwgMHgxMWIwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LAogCTB4NzAzMCwgMHhkMDhjLCAweDAxMjgsIDB4YjgwMCwgMHhkMGJjLCAweDAxMTAsIDB4YzBjNSwgMHhiODAyLAotCTB4MDBmOSwgMHgwMGJlLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY2YzksIDB4MDgwYywgMHgzMzJhLAotCTB4MDgwYywgMHhhZjRlLCAweDAwOTgsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsIDB4NjZjOSwgMHgwODBjLAotCTB4MzMyYSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDA4MGMsIDB4OTQyNywgMHgwODBjLAotCTB4OThiYywgMHgwMDIwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGJiYWEsIDB4MDBlZSwgMHgwMDA1LAotCTB4MDBkNiwgMHhiODAwLCAweGQwODQsIDB4MDE2MCwgMHg5MDA2LCAweDA4MGMsIDB4NjZiNSwgMHgyMDY5LAotCTB4MTg0NywgMHg2ODA0LCAweGQwYTQsIDB4MDEyMCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NmY1LAorCTB4MDBmOSwgMHgwMGJlLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY2ZmEsIDB4MDgwYywgMHgzMzQ0LAorCTB4MDgwYywgMHhiMTZjLCAweDAwOTgsIDB4MjAwMSwgMHgwMDBhLCAweDA4MGMsIDB4NjZmYSwgMHgwODBjLAorCTB4MzM0NCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLAorCTB4OWFiMywgMHgwMDIwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGJlMjEsIDB4MDBlZSwgMHgwMDA1LAorCTB4MDBkNiwgMHhiODAwLCAweGQwODQsIDB4MDE2MCwgMHg5MDA2LCAweDA4MGMsIDB4NjZlNiwgMHgyMDY5LAorCTB4MTg0NywgMHg2ODA0LCAweGQwYTQsIDB4MDEyMCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NzI2LAogCTB4MDBkZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA5NiwgMHgwMGQ2LCAweDIwMTEsIDB4MTgyNCwgMHgyMjA0LAotCTB4OTA4NiwgMHgwMDc0LCAweDE5MDQsIDB4YmI3ZiwgMHg2MDEwLCAweDIwNTgsIDB4YmFhMCwgMHg5Mjg2LAotCTB4MDA3ZSwgMHgxMTIwLCAweDA4MGMsIDB4YmRjMiwgMHgwODA0LCAweGJhZWMsIDB4MDgwYywgMHhiZGI3LAotCTB4NjAxMCwgMHgyMDU4LCAweGJhYTAsIDB4OTI4NiwgMHgwMDgwLCAweDE1MTAsIDB4NjAxNCwgMHg5MDA1LAotCTB4MDFhOCwgMHgyMDQ4LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAzOSwgMHgxMTQwLAotCTB4MjAwMSwgMHgwMDAwLCAweDkwMGUsIDB4MjAxMSwgMHg0MDAwLCAweDA4MGMsIDB4ZDIzNywgMHgwMDMwLAotCTB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweDAyMDAsIDB4MjAwMSwgMHgwMDA2LAotCTB4MDgwYywgMHg2NmM5LCAweDA4MGMsIDB4MzMyYSwgMHgwODBjLCAweGFmNGUsIDB4MDgwNCwgMHhiYjg0LAotCTB4MDgwYywgMHhiYjkyLCAweDYwMTQsIDB4OTAwNSwgMHgwMTkwLCAweDIwNDgsIDB4YTg2OCwgMHhkMGY0LAotCTB4MDFlOCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzksIDB4MWQwOCwgMHgyMDAxLAotCTB4MDAwMCwgMHg5MDBlLCAweDIwMTEsIDB4NDAwMCwgMHgwODBjLCAweGQyMzcsIDB4MDhmOCwgMHgwODBjLAotCTB4YmI4OCwgMHgwMTYwLCAweDkwMDYsIDB4MDgwYywgMHg2NmI1LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLAotCTB4NjZmNSwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NmM5LCAweDA4YTAsIDB4MjAwMSwgMHgwMDA0LAotCTB4MDgwYywgMHg2NmM5LCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDMsIDB4MDgwYywgMHg5NDI3LAotCTB4MDgwYywgMHg5OGJjLCAweDA4MDQsIDB4YmI4NCwgMHhiODVjLCAweGQwZTQsIDB4MDE3OCwgMHgwODBjLAotCTB4ZDA2MCwgMHgwODBjLCAweDc2OWQsIDB4MDExOCwgMHhkMGRjLCAweDE5MDQsIDB4YmFhZSwgMHgyMDExLAotCTB4MTgzNywgMHgyMjA0LCAweGMwYWQsIDB4MjAxMiwgMHgwODA0LCAweGJhYWUsIDB4MDgwYywgMHhkMGExLAotCTB4MjAxMSwgMHgxODM3LCAweDIyMDQsIDB4YzBhNSwgMHgyMDEyLCAweDAwMDYsIDB4MDgwYywgMHhlNjBkLAotCTB4MDAwZSwgMHgxOTA0LCAweGJhYWUsIDB4YzBiNSwgMHgyMDEyLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLAotCTB4NjZjOSwgMHg5MDA2LCAweDA4MGMsIDB4NjZiNSwgMHgwMGM2LCAweDIwMDEsIDB4MTgwZiwgMHgyMDA0LAotCTB4ZDA5YywgMHgwNTIwLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLAotCTB4NzAwYywgMHg5MDg0LCAweDAwZmYsIDB4NzhlNiwgMHg3MDdlLCAweDcwMTAsIDB4NzhlYSwgMHg3MDgyLAotCTB4OTA4YywgMHgwMGZmLCAweDAwZWUsIDB4NzgwYywgMHhjMGI1LCAweDc4MGUsIDB4MDBmZSwgMHgwODBjLAotCTB4MjZlYSwgMHgwMGY2LCAweDIxMDAsIDB4OTAwZSwgMHgwODBjLCAweDI2YTEsIDB4Nzk1ZSwgMHgwMGZlLAotCTB4OTE4NiwgMHgwMDgxLCAweDAxZjAsIDB4MjAwOSwgMHgwMDgxLCAweDAwZTAsIDB4MjAwOSwgMHgwMGVmLAotCTB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4NzllYSwgMHg3OGU3LCAweDAwMDAsIDB4NzkzMiwgMHg3OTM2LAotCTB4NzgwYywgMHhjMGI1LCAweDc4MGUsIDB4MDBmZSwgMHgwODBjLCAweDI2ZWEsIDB4MDBmNiwgMHgyMDc5LAotCTB4MTgwMCwgMHg3OTgyLCAweDIxMDAsIDB4OTAwZSwgMHg3OTdlLCAweDA4MGMsIDB4MjZhMSwgMHg3OTVlLAotCTB4MDBmZSwgMHg4MTA4LCAweDA4MGMsIDB4NjcxOCwgMHgyYjAwLCAweDAwY2UsIDB4MTkwNCwgMHhiYWFlLAotCTB4NjAxMiwgMHgyMDA5LCAweDE4MGYsIDB4MjEwYywgMHhkMTljLCAweDAxNTAsIDB4MjAwOSwgMHgwMjdjLAotCTB4MjEwYywgMHg5MThjLCAweDAwZmYsIDB4YjkxMiwgMHgyMDA5LCAweDAyN2QsIDB4MjEwYywgMHhiOTE2LAotCTB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjZjOSwgMHg2MDIzLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLAotCTB4NjAwNywgMHgwMDAyLCAweDA4MGMsIDB4OTQyNywgMHgwODBjLCAweDk4YmMsIDB4MDAyOCwgMHgwODBjLAotCTB4YjkzYywgMHgyMDAxLCAweDAwMDEsIDB4MDQzMSwgMHgwMGRlLCAweDAwOWUsIDB4MDBiZSwgMHgwMDA1LAotCTB4MjAwMSwgMHgxODEwLCAweDIwMDQsIDB4ZDBhNCwgMHgwMTIwLCAweDIwMDEsIDB4MTg0OCwgMHgyMDA0LAotCTB4ZDBhYywgMHgwMDA1LCAweDAwZTYsIDB4MDgwYywgMHhlYjU2LCAweDAxOTAsIDB4MjA3MSwgMHgwMjYwLAotCTB4NzEwOCwgMHg3MjBjLCAweDkxOGMsIDB4MDBmZiwgMHgxMTE4LCAweDkyODQsIDB4ZmYwMCwgMHgwMTQwLAotCTB4NjAxMCwgMHgyMDU4LCAweGI4YTAsIDB4OTA4NCwgMHhmZjgwLCAweDExMTAsIDB4YjkxMiwgMHhiYTE2LAotCTB4MDBlZSwgMHgwMDA1LCAweDIwMzAsIDB4OTAwNSwgMHgwMTU4LCAweDIwMDEsIDB4MDAwNywgMHgwODBjLAotCTB4NjZjOSwgMHgwODBjLCAweDU4MzQsIDB4MTEyMCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NmY1LAotCTB4MjYwMCwgMHg5MDA1LCAweDExYjAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2OCwgMHgwMDllLAotCTB4ZDBmYywgMHgxMTc4LCAweDAwMzYsIDB4MDA0NiwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiYmEwLAotCTB4MDBiZSwgMHgyMDIxLCAweDAwMDQsIDB4MjAxMSwgMHg4MDE0LCAweDA4MGMsIDB4NGMyOCwgMHgwMDRlLAotCTB4MDAzZSwgMHgwODBjLCAweDMzMmEsIDB4NjAyMCwgMHg5MDg2LCAweDAwMGEsIDB4MTEwOCwgMHgwMDA1LAotCTB4MDgwNCwgMHhhZjRlLCAweDAwYjYsIDB4MDBlNiwgMHgwMDI2LCAweDAwMTYsIDB4MjA3MSwgMHgxODAwLAotCTB4NzA5MCwgMHg5MDg2LCAweDAwMTQsIDB4MTkwNCwgMHhiYzMyLCAweDA4MGMsIDB4NTgzNCwgMHgxMTcwLAotCTB4NjAxNCwgMHg5MDA1LCAweDExNTgsIDB4MDAzNiwgMHgwMDQ2LCAweDYwMTAsIDB4MjA1OCwgMHhiYmEwLAotCTB4MjAyMSwgMHgwMDA2LCAweDA4MGMsIDB4NGRkZiwgMHgwMDRlLCAweDAwM2UsIDB4MDBkNiwgMHg2MDEwLAotCTB4MjA1OCwgMHgwODBjLCAweDY4MWUsIDB4MDgwYywgMHhiYTY4LCAweDAwZGUsIDB4MDgwYywgMHhiZThkLAotCTB4MTU4OCwgMHg2MDEwLCAweDIwNTgsIDB4Yjg5MCwgMHg5MDA1LCAweDA1NjAsIDB4MjAwMSwgMHgwMDA2LAotCTB4MDgwYywgMHg2NmM5LCAweDAwOTYsIDB4NjAxNCwgMHg5MDRkLCAweDAxZDAsIDB4YTg2NCwgMHg5MDg0LAotCTB4MDBmZiwgMHg5MDg2LCAweDAwMzksIDB4MTE0MCwgMHgyMDAxLCAweDAwMDAsIDB4OTAwZSwgMHgyMDExLAotCTB4NDAwMCwgMHgwODBjLCAweGQyMzcsIDB4MDA2MCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LAotCTB4MDAyOSwgMHgwMTMwLCAweGE4MDcsIDB4MDAwMCwgMHhhODY3LCAweDAxMDMsIDB4YTgzMywgMHgwMjAwLAotCTB4MDA5ZSwgMHgwODBjLCAweDMzMmEsIDB4NjAyMCwgMHg5MDg2LCAweDAwMGEsIDB4MDE0MCwgMHgwODBjLAotCTB4YWY0ZSwgMHgwMDI4LCAweDA4MGMsIDB4YjkzYywgMHg5MDA2LCAweDA4MGMsIDB4YmJhYSwgMHgwMDFlLAotCTB4MDAyZSwgMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDExLCAweDE4MjQsIDB4MjIwNCwgMHg5MDg2LAotCTB4MDAxNCwgMHgxMTYwLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDY2YzksIDB4NjAwMywgMHgwMDAxLAotCTB4NjAwNywgMHgwMDAxLCAweDA4MGMsIDB4OTQyNywgMHgwODA0LCAweDk4YmMsIDB4MjAwMSwgMHgwMDAxLAotCTB4MDgwNCwgMHhiYmFhLCAweDIwMzAsIDB4MjAxMSwgMHgxODI0LCAweDIyMDQsIDB4OTA4NiwgMHgwMDA0LAotCTB4MTE0OCwgMHg5NmI2LCAweDAwMGIsIDB4MTEyMCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NmM5LAotCTB4MDgwNCwgMHhhZjRlLCAweDIwMDEsIDB4MDAwMSwgMHgwODA0LCAweGJiYWEsIDB4MDAwMiwgMHhiYTI1LAotCTB4YmM3ZSwgMHhiYTI1LCAweGJjYzEsIDB4YmEyNSwgMHhiZDZlLCAweGJjNzMsIDB4YmEyOCwgMHhiYTI1LAotCTB4YmQ4MiwgMHhiYTI1LCAweGJkOTQsIDB4NjYwNCwgMHg5Njg2LCAweDAwMDMsIDB4MDkwNCwgMHhiYmRhLAotCTB4OTZiNiwgMHgwMDFlLCAweDExMTAsIDB4MDgwYywgMHhhZjRlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGQ2LAotCTB4MDBjNiwgMHgwODBjLCAweGJkYTYsIDB4MTFhMCwgMHg5MDA2LCAweDA4MGMsIDB4NjZiNSwgMHgwODBjLAotCTB4MzJmYiwgMHgwODBjLCAweGQzNzIsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjZjOSwgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MDgwYywgMHg5NDI3LCAweDA4MGMsIDB4OThiYywgMHgwNDI4LAotCTB4MjAwOSwgMHgwMjZlLCAweDIxMDQsIDB4OTA4NiwgMHgwMDA5LCAweDExNjAsIDB4NjAxMCwgMHgyMDU4LAotCTB4Yjg0MCwgMHg5MDg0LCAweDAwZmYsIDB4OTAwNSwgMHgwMTgwLCAweDgwMDEsIDB4Yjg0MiwgMHg2MDFiLAotCTB4MDAwYSwgMHgwMDk4LCAweDIwMDksIDB4MDI2ZiwgMHgyMTA0LCAweDkwODQsIDB4ZmYwMCwgMHg5MDhlLAotCTB4MTkwMCwgMHgwMTU4LCAweDkwOGUsIDB4MWUwMCwgMHgwOTkwLCAweDA4MGMsIDB4MzJmYiwgMHgwODBjLAotCTB4ZDM3MiwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHhiYmFhLCAweDAwY2UsIDB4MDBkZSwgMHgwMGJlLAotCTB4MDAwNSwgMHgwMDk2LCAweDAwYjYsIDB4MDAyNiwgMHg5MDE2LCAweDA4MGMsIDB4YmRiNCwgMHgwMGQ2LAotCTB4MjA2OSwgMHgxOTdkLCAweDJkMDQsIDB4OTAwNSwgMHgwMTY4LCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLAotCTB4OTA4NiwgMHgwMDdlLCAweDExMzgsIDB4MjA2OSwgMHgxODIwLCAweDJkMDQsIDB4ODAwMCwgMHgyMDZhLAotCTB4MDBkZSwgMHgwMDEwLCAweDAwZGUsIDB4MDA4OCwgMHg5MDA2LCAweDA4MGMsIDB4NjZiNSwgMHgyMDAxLAotCTB4MDAwMiwgMHgwODBjLCAweDY2YzksIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLAotCTB4OTQyNywgMHgwODBjLCAweDk4YmMsIDB4MDgwNCwgMHhiZDNlLCAweDA4MGMsIDB4Y2MzMywgMHgwMWIwLAotCTB4NjAxNCwgMHgyMDQ4LCAweGE4NjQsIDB4MjAxMCwgMHg5MDg2LCAweDAxMzksIDB4MTEzOCwgMHg2MDA3LAotCTB4MDAxNiwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHhkMjk0LCAweDAwYjAsIDB4NjAxNCwgMHgyMDQ4LAotCTB4YTg2NCwgMHhkMGZjLCAweDAxMTgsIDB4MjAwMSwgMHgwMDAxLCAweDBjYTgsIDB4MjAwMSwgMHgxODBlLAotCTB4MjAwNCwgMHhkMGRjLCAweDAxNDgsIDB4NjAxMCwgMHgyMDU4LCAweGI4NDAsIDB4OTA4NCwgMHgwMGZmLAotCTB4OTAwNSwgMHgxMTEwLCAweDkwMDYsIDB4MGMzOCwgMHgwODBjLCAweGI5M2MsIDB4MjAwOSwgMHgwMjZlLAotCTB4MjEzNCwgMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA1LCAweDA1MjAsIDB4OTY4NiwgMHgwMDBiLAotCTB4MDFjOCwgMHgyMDA5LCAweDAyNmYsIDB4MjEwNCwgMHg5MDg0LCAweGZmMDAsIDB4MTExOCwgMHg5Njg2LAotCTB4MDAwOSwgMHgwMWMwLCAweDkwODYsIDB4MTkwMCwgMHgxMTY4LCAweDk2ODYsIDB4MDAwOSwgMHgwMTkwLAotCTB4MjAwMSwgMHgwMDA0LCAweDA4MGMsIDB4NjZjOSwgMHgyMDAxLCAweDAwMjgsIDB4NjAxYSwgMHg2MDA3LAotCTB4MDA1MiwgMHgwMDIwLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGJiYWEsIDB4MDAyZSwgMHgwMGJlLAotCTB4MDA5ZSwgMHgwMDA1LCAweDkyODYsIDB4MDEzOSwgMHgwMTYwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLAotCTB4Y2MzMywgMHgwMTQwLCAweGE4NjQsIDB4OTA4NiwgMHgwMTM5LCAweDAxMTgsIDB4YTg2OCwgMHhkMGZjLAotCTB4MDEwOCwgMHgwYzQwLCAweDYwMTAsIDB4MjA1OCwgMHhiODQwLCAweDkwODQsIDB4MDBmZiwgMHg5MDA1LAotCTB4MDEzOCwgMHg4MDAxLCAweGI4NDIsIDB4NjAxYiwgMHgwMDBhLCAweDYwMDcsIDB4MDAxNiwgMHgwOGYwLAotCTB4YjhhMCwgMHg5MDg2LCAweDAwN2UsIDB4MTEzOCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLAotCTB4NjEwYiwgMHgwMGVlLCAweDAwMTAsIDB4MDgwYywgMHgzMmZiLCAweDA4NjAsIDB4MjAwMSwgMHgwMDA0LAotCTB4MDgwYywgMHg2NmM5LCAweDA4MGMsIDB4YmRiNCwgMHgxMTQwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDAwMywgMHgwODBjLCAweDk0MjcsIDB4MDgwNCwgMHg5OGJjLCAweDA4MGMsIDB4YjkzYywgMHg5MDA2LAotCTB4MDgwNCwgMHhiYmFhLCAweDA0ODksIDB4MTE2MCwgMHgyMDAxLCAweDAwMDgsIDB4MDgwYywgMHg2NmM5LAotCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwNSwgMHgwODBjLCAweDk0MjcsIDB4MDgwNCwgMHg5OGJjLAotCTB4MjAwMSwgMHgwMDAxLCAweDA4MDQsIDB4YmJhYSwgMHgwMGY5LCAweDExNjAsIDB4MjAwMSwgMHgwMDBhLAotCTB4MDgwYywgMHg2NmM5LCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwYywgMHg5NDI3LAotCTB4MDgwNCwgMHg5OGJjLCAweDIwMDEsIDB4MDAwMSwgMHgwODA0LCAweGJiYWEsIDB4MjAwOSwgMHgwMjZlLAotCTB4MjEwNCwgMHg5MDg2LCAweDAwMDMsIDB4MTEzOCwgMHgyMDA5LCAweDAyNmYsIDB4MjEwNCwgMHg5MDg0LAotCTB4ZmYwMCwgMHg5MDg2LCAweDJhMDAsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMGI2LAotCTB4MDBjNiwgMHgwMDE2LCAweDYxMTAsIDB4MjE1OCwgMHgwODBjLCAweDY3OTIsIDB4MDAxZSwgMHgwMGNlLAotCTB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDAzNiwgMHgwMDE2LAotCTB4NjAxMCwgMHgyMDU4LCAweDIwMDksIDB4MTgzNywgMHgyMTA0LCAweDkwODUsIDB4MDAwMywgMHgyMDBhLAotCTB4MDgwYywgMHhiZTVmLCAweDA1NjAsIDB4MjAwOSwgMHgxODM3LCAweDIxMDQsIDB4YzBjZCwgMHgyMDBhLAotCTB4MDgwYywgMHg2YmM5LCAweDAxNTgsIDB4OTAwNiwgMHgyMDIwLCAweDIwMDksIDB4MDAyYSwgMHgwODBjLAotCTB4ZTc5NSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMTk1LCAweDIxMDIsIDB4MjAxOSwgMHgwMDJhLAotCTB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4MzJjMCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLAotCTB4MzBjOCwgMHgwMGVlLCAweDAwYzYsIDB4MDE1NiwgMHgyMGE5LCAweDA3ODEsIDB4MjAwOSwgMHgwMDdmLAotCTB4MDgwYywgMHgzNDA0LCAweDgxMDgsIDB4MWYwNCwgMHhiZGY4LCAweDAxNWUsIDB4MDBjZSwgMHgwODBjLAotCTB4YmRiNywgMHgyMDcxLCAweDAyNjAsIDB4MjA3OSwgMHgwMjAwLCAweDc4MTcsIDB4MDAwMSwgMHgyMDAxLAotCTB4MTgzNywgMHgyMDBjLCAweGMxYzUsIDB4NzAxOCwgMHhkMGZjLCAweDAxMTAsIDB4ZDBkYywgMHgwMTE4LAotCTB4NzAzOCwgMHhkMGRjLCAweDExMDgsIDB4YzFjNCwgMHg3ODE3LCAweDAwMDAsIDB4MjAwMSwgMHgxODM3LAotCTB4MjEwMiwgMHg5MTg0LCAweDAwNTAsIDB4OTA4NiwgMHgwMDUwLCAweDA1ZDAsIDB4MjA3OSwgMHgwMTAwLAotCTB4MmUwNCwgMHg5MDg0LCAweDAwZmYsIDB4MjA2OSwgMHgxODFmLCAweDIwNmEsIDB4NzhlNiwgMHgwMDA2LAotCTB4OGU3MCwgMHgyZTA0LCAweDIwNjksIDB4MTgyMCwgMHgyMDZhLCAweDc4ZWEsIDB4NzgzMiwgMHg3ODM2LAotCTB4MjAxMCwgMHg5MDg0LCAweGZmMDAsIDB4MDAxZSwgMHg5MTA1LCAweDIwMDksIDB4MTgyYywgMHgyMDBhLAotCTB4MjIwMCwgMHg5MDg0LCAweDAwZmYsIDB4MjAwOCwgMHgwODBjLCAweDI2ZWEsIDB4MDgwYywgMHg3NjlkLAotCTB4MDE3MCwgMHgyMDcxLCAweDAyNjAsIDB4MjA2OSwgMHgxOTgzLCAweDcwNDgsIDB4MjA2YSwgMHg3MDRjLAotCTB4NjgwNiwgMHg3MDUwLCAweDY4MGEsIDB4NzA1NCwgMHg2ODBlLCAweDA4MGMsIDB4ZDA2MCwgMHgwMDQwLAotCTB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NjZjOSwgMHgwODBjLCAweDMzMmEsIDB4MDgwYywgMHhhZjRlLAotCTB4MDAxZSwgMHgwMDNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwYmUsIDB4MDAwNSwgMHgwMDk2LAotCTB4MDAyNiwgMHgwMDM2LCAweDAwZTYsIDB4MDE1NiwgMHgyMDE5LCAweDE4MmMsIDB4MjMxYywgMHg4M2ZmLAotCTB4MDFmMCwgMHgyMDcxLCAweDAyNjAsIDB4NzIwMCwgMHg5Mjk0LCAweDAwZmYsIDB4NzAwNCwgMHg5MDg0LAotCTB4ZmYwMCwgMHg5MjA1LCAweDkzMDYsIDB4MTE5OCwgMHgyMDExLCAweDAyNzYsIDB4MjBhOSwgMHgwMDA0LAotCTB4MmI0OCwgMHgyMDE5LCAweDAwMGEsIDB4MDgwYywgMHhiZjU0LCAweDExNDgsIDB4MjAxMSwgMHgwMjdhLAotCTB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4MDAwNiwgMHgwODBjLCAweGJmNTQsIDB4MTEwMCwgMHgwMTVlLAotCTB4MDBlZSwgMHgwMDNlLCAweDAwMmUsIDB4MDA5ZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMjYwLAotCTB4NzAzNCwgMHg5MDg2LCAweDAwMTQsIDB4MTFhOCwgMHg3MDM4LCAweDkwODYsIDB4MDgwMCwgMHgxMTg4LAotCTB4NzAzYywgMHhkMGVjLCAweDAxNjAsIDB4OTA4NCwgMHgwZjAwLCAweDkwODYsIDB4MDEwMCwgMHgxMTM4LAotCTB4NzA1NCwgMHhkMGE0LCAweDExMTAsIDB4ZDBhYywgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHg5MDg1LAotCTB4MDAwMSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDk2LCAweDAwYzYsIDB4MDA3NiwgMHgwMDU2LAotCTB4MDA0NiwgMHgwMDI2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAyOSwgMHgxOWY1LAotCTB4MjUyYywgMHgyMDIxLCAweDE5ZmMsIDB4MjQyNCwgMHgyMDYxLCAweDFkZGMsIDB4MjA3MSwgMHgxODAwLAotCTB4NzI1NCwgMHg3MDc0LCAweDkyMDIsIDB4MWEwNCwgMHhiZjIwLCAweDA4MGMsIDB4OGQ4NywgMHgwOTA0LAotCTB4YmYxOSwgMHgwODBjLCAweGU3YzYsIDB4MDkwNCwgMHhiZjE5LCAweDY3MjAsIDB4OTc4NiwgMHgwMDA3LAotCTB4MDkwNCwgMHhiZjE5LCAweDI1MDAsIDB4OWMwNiwgMHgwOTA0LCAweGJmMTksIDB4MjQwMCwgMHg5YzA2LAotCTB4MDkwNCwgMHhiZjE5LCAweDNlMDgsIDB4OTE4NiwgMHgwMDAyLCAweDExNDgsIDB4NjAxMCwgMHg5MDA1LAotCTB4MDEzMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MTU5MCwgMHgwMGM2LAotCTB4NjA0MywgMHhmZmZmLCAweDYwMDAsIDB4OTA4NiwgMHgwMDA0LCAweDExMTAsIDB4MDgwYywgMHgxYWYwLAotCTB4OTc4NiwgMHgwMDBhLCAweDAxNDgsIDB4MDgwYywgMHhjZTRhLCAweDExMzAsIDB4MDBjZSwgMHgwODBjLAotCTB4YjkzYywgMHgwODBjLCAweGFmODksIDB4MDBlOCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLAotCTB4MDFhOCwgMHg5Nzg2LCAweDAwMDMsIDB4MTUzMCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YywgMHhkMGNjLAotCTB4MDEzMCwgMHgwMDk2LCAweGE4NzgsIDB4MjA0OCwgMHgwODBjLCAweDBmZmYsIDB4MDA5ZSwgMHhhYjdhLAotCTB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NmYwNSwgMHgwODBjLCAweGNlMjQsIDB4MDgwYywgMHhhZjg5LAotCTB4MDBjZSwgMHg5Y2UwLCAweDAwMWMsIDB4NzA2OCwgMHg5YzAyLCAweDEyMTAsIDB4MDgwNCwgMHhiZWMwLAotCTB4MDEyZSwgMHgwMDBlLCAweDAwMmUsIDB4MDA0ZSwgMHgwMDVlLCAweDAwN2UsIDB4MDBjZSwgMHgwMDllLAotCTB4MDBlZSwgMHgwMDA1LCAweDk3ODYsIDB4MDAwNiwgMHgxMTE4LCAweDA4MGMsIDB4ZTczOCwgMHgwYzMwLAotCTB4OTc4NiwgMHgwMDA5LCAweDExNDgsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MGQwOCwgMHgyMDA5LAotCTB4MDA0YywgMHgwODBjLCAweGFmZWMsIDB4MDhlMCwgMHg5Nzg2LCAweDAwMGEsIDB4MDk4MCwgMHgwODIwLAotCTB4MjIwYywgMHgyMzA0LCAweDkxMDYsIDB4MTEzMCwgMHg4MjEwLCAweDgzMTgsIDB4MWYwNCwgMHhiZjQwLAotCTB4OTAwNiwgMHgwMDA1LCAweDIzMDQsIDB4OTEwMiwgMHgwMjE4LCAweDIwMDEsIDB4MDAwMSwgMHgwMDA4LAotCTB4OTAwNiwgMHg5MThkLCAweDAwMDEsIDB4MDAwNSwgMHgwMTM2LCAweDAxYzYsIDB4MDAxNiwgMHg4OTA2LAotCTB4ODAwNiwgMHg4MDA3LCAweDkwOGMsIDB4MDAzZiwgMHgyMWUwLCAweDkwODQsIDB4ZmZjMCwgMHg5MzAwLAotCTB4MjA5OCwgMHgzNTE4LCAweDIwYTksIDB4MDAwMSwgMHgyMjBjLCAweDQwMDIsIDB4OTEwZSwgMHgxMTQwLAotCTB4ODIxMCwgMHg4MzE5LCAweDFkYzgsIDB4OTAwNiwgMHgwMDFlLCAweDAxY2UsIDB4MDEzZSwgMHgwMDA1LAotCTB4MjIwYywgMHg5MTAyLCAweDAyMTgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMTAsIDB4MjAwMSwgMHgwMDAwLAotCTB4OTE4ZCwgMHgwMDAxLCAweDAwMWUsIDB4MDFjZSwgMHgwMTNlLCAweDAwMDUsIDB4MjIwYywgMHg4MTBmLAotCTB4MjMwNCwgMHg5MTA2LCAweDExMzAsIDB4ODIxMCwgMHg4MzE4LCAweDFmMDQsIDB4YmY3ZSwgMHg5MDA2LAotCTB4MDAwNSwgMHg5MThkLCAweDAwMDEsIDB4MDAwNSwgMHg2MDA0LCAweDkwOGEsIDB4MDA1MywgMHgxYTBjLAotCTB4MGQ3OSwgMHgwODBjLCAweGNlMzksIDB4MDEyMCwgMHgwODBjLCAweGNlNGEsIDB4MDE1OCwgMHgwMDI4LAotCTB4MDgwYywgMHgzMzJhLCAweDA4MGMsIDB4Y2U0YSwgMHgwMTI4LCAweDA4MGMsIDB4OTdmNiwgMHgwODBjLAotCTB4YWY0ZSwgMHgwMDA1LCAweDA4MGMsIDB4YjkzYywgMHgwY2MwLCAweDkxODIsIDB4MDA1NywgMHgxMjIwLAotCTB4OTE4MiwgMHgwMDQwLCAweDAyMDgsIDB4MDAwYSwgMHgwMDA1LCAweGJmYzQsIDB4YmZjNCwgMHhiZmM0LAotCTB4YmZjNCwgMHhiZmM0LCAweGJmYzQsIDB4YmZjNCwgMHhiZmM0LCAweGJmYzQsIDB4YmZjNCwgMHhiZmM0LAotCTB4YmZjNiwgMHhiZmM2LCAweGJmYzYsIDB4YmZjNiwgMHhiZmM0LCAweGJmYzQsIDB4YmZjNCwgMHhiZmM2LAotCTB4YmZjNCwgMHhiZmM0LCAweGJmYzQsIDB4YmZjNCwgMHgwODBjLCAweDBkNzksIDB4NjAwYiwgMHhmZmZmLAotCTB4NjAwMywgMHgwMDBmLCAweDYxMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhkMzc1LAotCTB4MjAwOSwgMHg4MDAwLCAweDA4MGMsIDB4OTQyMCwgMHgwMTJlLCAweDAwMDUsIDB4OTE4NiwgMHgwMDEzLAotCTB4MTEyOCwgMHg2MDA0LCAweDkwODIsIDB4MDA0MCwgMHgwODA0LCAweGMwNGUsIDB4OTE4NiwgMHgwMDI3LAotCTB4MTUyMCwgMHgwODBjLCAweDk3ZjYsIDB4MDgwYywgMHgzMmZiLCAweDA4MGMsIDB4ZDM3MiwgMHgwMDk2LAotCTB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4Y2MzMywgMHgwMTk4LCAweDA4MGMsIDB4Y2U0YSwgMHgxMTE4LAotCTB4MDgwYywgMHhiOTNjLCAweDAwNjgsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsIDB4MDAyOSwgMHhhODc3LAotCTB4MDAwMCwgMHhhOTdjLCAweGMxYzUsIDB4YTk3ZSwgMHgwODBjLCAweDZmMTEsIDB4MDgwYywgMHhjZTI0LAotCTB4MDA5ZSwgMHgwODBjLCAweGFmNGUsIDB4MDgwNCwgMHg5OGJjLCAweDkxODYsIDB4MDAxNCwgMHgxMTIwLAotCTB4NjAwNCwgMHg5MDgyLCAweDAwNDAsIDB4MDAzMCwgMHg5MTg2LCAweDAwNTMsIDB4MDExMCwgMHgwODBjLAotCTB4MGQ3OSwgMHgwMDA1LCAweDAwMDIsIDB4YzAyYywgMHhjMDJhLCAweGMwMmEsIDB4YzAyYSwgMHhjMDJhLAotCTB4YzAyYSwgMHhjMDJhLCAweGMwMmEsIDB4YzAyYSwgMHhjMDJhLCAweGMwMmEsIDB4YzA0NSwgMHhjMDQ1LAotCTB4YzA0NSwgMHhjMDQ1LCAweGMwMmEsIDB4YzA0NSwgMHhjMDJhLCAweGMwNDUsIDB4YzAyYSwgMHhjMDJhLAotCTB4YzAyYSwgMHhjMDJhLCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLCAweDk3ZjYsIDB4MDA5NiwgMHg2MTE0LAotCTB4MjE0OCwgMHgwODBjLCAweGNjMzMsIDB4MDE2OCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDA2LAotCTB4YTg3NywgMHgwMDAwLCAweGE4ODAsIDB4YzBlYywgMHhhODgyLCAweDA4MGMsIDB4NmYxMSwgMHgwODBjLAotCTB4Y2UyNCwgMHgwMDllLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDA1LCAweDA4MGMsIDB4OTdmNiwgMHgwODBjLAotCTB4Y2U0YSwgMHgwOTBjLCAweGI5M2MsIDB4MDgwYywgMHhhZjRlLCAweDAwMDUsIDB4MDAwMiwgMHhjMDY4LAotCTB4YzA2NiwgMHhjMDY2LCAweGMwNjYsIDB4YzA2NiwgMHhjMDY2LCAweGMwNjYsIDB4YzA2NiwgMHhjMDY2LAotCTB4YzA2NiwgMHhjMDY2LCAweGMwNmEsIDB4YzA2YSwgMHhjMDZhLCAweGMwNmEsIDB4YzA2NiwgMHhjMDZjLAotCTB4YzA2NiwgMHhjMDZhLCAweGMwNjYsIDB4YzA2NiwgMHhjMDY2LCAweGMwNjYsIDB4MDgwYywgMHgwZDc5LAotCTB4MDgwYywgMHgwZDc5LCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLCAweGFmNGUsIDB4MDgwNCwgMHg5OGJjLAorCTB4OTA4NiwgMHgwMDc0LCAweDE5MDQsIDB4YmRmNiwgMHg2MDEwLCAweDIwNTgsIDB4YmFhMCwgMHg5Mjg2LAorCTB4MDA3ZSwgMHgxMTIwLCAweDA4MGMsIDB4YzA5MCwgMHgwODA0LCAweGJkNjMsIDB4MjAwMSwgMHgxODBkLAorCTB4MjAwNCwgMHhkMDhjLCAweDA5MDQsIDB4YmQwNSwgMHgwMGQ2LCAweDA4MGMsIDB4Nzc5ZSwgMHgwMWEwLAorCTB4MDAyNiwgMHgyMDExLCAweDAwMTAsIDB4MDgwYywgMHg2YzM1LCAweDAwMmUsIDB4MDkwNCwgMHhiZDA0LAorCTB4MDgwYywgMHg1ODU0LCAweDE1OTgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MDcsIDB4MDAwMCwgMHhhODY3LAorCTB4MDEwMywgMHhhODMzLCAweGRlYWQsIDB4MDQ1MCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOTEwLAorCTB4MDBiZSwgMHg5MTg2LCAweDAwZmYsIDB4MDU4MCwgMHgwMDI2LCAweDIwMTEsIDB4ODAwOCwgMHgwODBjLAorCTB4NmMzNSwgMHgwMDJlLCAweDA1NDgsIDB4NjAxNCwgMHg5MDA1LCAweDA5MGMsIDB4MGQ4NSwgMHgyMDQ4LAorCTB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM5LCAweDExNDAsIDB4MjAwMSwgMHgwMDMwLAorCTB4OTAwZSwgMHgyMDExLCAweDQwMDksIDB4MDgwYywgMHhkNTFmLCAweDAwNDAsIDB4NjAxNCwgMHgyMDQ4LAorCTB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweGRlYWQsIDB4NjAxMCwgMHgyMDU4LAorCTB4YjlhMCwgMHgwMDE2LCAweDA4MGMsIDB4MzM0NCwgMHgwODBjLCAweGIxNmMsIDB4MDAxZSwgMHgwODBjLAorCTB4MzQxZSwgMHgwMGRlLCAweDA4MDQsIDB4YmRmYiwgMHgwMGRlLCAweDA4MGMsIDB4YzA4NSwgMHg2MDEwLAorCTB4MjA1OCwgMHhiYWEwLCAweDkyODYsIDB4MDA4MCwgMHgxNTEwLCAweDYwMTQsIDB4OTAwNSwgMHgwMWE4LAorCTB4MjA0OCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzksIDB4MTE0MCwgMHgyMDAxLAorCTB4MDAwMCwgMHg5MDBlLCAweDIwMTEsIDB4NDAwMCwgMHgwODBjLCAweGQ1MWYsIDB4MDAzMCwgMHhhODA3LAorCTB4MDAwMCwgMHhhODY3LCAweDAxMDMsIDB4YTgzMywgMHgwMjAwLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLAorCTB4NjZmYSwgMHgwODBjLCAweDMzNDQsIDB4MDgwYywgMHhiMTZjLCAweDA4MDQsIDB4YmRmYiwgMHgwODBjLAorCTB4YmUwOSwgMHg2MDE0LCAweDkwMDUsIDB4MDE5MCwgMHgyMDQ4LCAweGE4NjgsIDB4ZDBmNCwgMHgwMWU4LAorCTB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM5LCAweDFkMDgsIDB4MjAwMSwgMHgwMDAwLAorCTB4OTAwZSwgMHgyMDExLCAweDQwMDAsIDB4MDgwYywgMHhkNTFmLCAweDA4ZjgsIDB4MDgwYywgMHhiZGZmLAorCTB4MDE2MCwgMHg5MDA2LCAweDA4MGMsIDB4NjZlNiwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg2NzI2LAorCTB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjZmYSwgMHgwOGEwLCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLAorCTB4NjZmYSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAzLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLAorCTB4OWFiMywgMHgwODA0LCAweGJkZmIsIDB4Yjg1YywgMHhkMGU0LCAweDAxNzgsIDB4MDgwYywgMHhkMzQ4LAorCTB4MDgwYywgMHg3NzllLCAweDAxMTgsIDB4ZDBkYywgMHgxOTA0LCAweGJkMjUsIDB4MjAxMSwgMHgxODM3LAorCTB4MjIwNCwgMHhjMGFkLCAweDIwMTIsIDB4MDgwNCwgMHhiZDI1LCAweDA4MGMsIDB4ZDM4OSwgMHgyMDExLAorCTB4MTgzNywgMHgyMjA0LCAweGMwYTUsIDB4MjAxMiwgMHgwMDA2LCAweDA4MGMsIDB4ZTkwNSwgMHgwMDBlLAorCTB4MTkwNCwgMHhiZDI1LCAweGMwYjUsIDB4MjAxMiwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NmZhLAorCTB4OTAwNiwgMHgwODBjLCAweDY2ZTYsIDB4MDBjNiwgMHgyMDAxLCAweDE4MGYsIDB4MjAwNCwgMHhkMDljLAorCTB4MDUyMCwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg3MDBjLAorCTB4OTA4NCwgMHgwMGZmLCAweDc4ZTYsIDB4NzA3ZSwgMHg3MDEwLCAweDc4ZWEsIDB4NzA4MiwgMHg5MDhjLAorCTB4MDBmZiwgMHgwMGVlLCAweDc4MGMsIDB4YzBiNSwgMHg3ODBlLCAweDAwZmUsIDB4MDgwYywgMHgyNmQ1LAorCTB4MDBmNiwgMHgyMTAwLCAweDkwMGUsIDB4MDgwYywgMHgyNjhjLCAweDc5NWUsIDB4MDBmZSwgMHg5MTg2LAorCTB4MDA4MSwgMHgwMWYwLCAweDIwMDksIDB4MDA4MSwgMHgwMGUwLCAweDIwMDksIDB4MDBlZiwgMHgwMGY2LAorCTB4MjA3OSwgMHgwMTAwLCAweDc5ZWEsIDB4NzhlNywgMHgwMDAwLCAweDc5MzIsIDB4NzkzNiwgMHg3ODBjLAorCTB4YzBiNSwgMHg3ODBlLCAweDAwZmUsIDB4MDgwYywgMHgyNmQ1LCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLAorCTB4Nzk4MiwgMHgyMTAwLCAweDkwMGUsIDB4Nzk3ZSwgMHgwODBjLCAweDI2OGMsIDB4Nzk1ZSwgMHgwMGZlLAorCTB4ODEwOCwgMHgwODBjLCAweDY3NDksIDB4MmIwMCwgMHgwMGNlLCAweDE5MDQsIDB4YmQyNSwgMHg2MDEyLAorCTB4MjAwOSwgMHgxODBmLCAweDIxMGMsIDB4ZDE5YywgMHgwMTUwLCAweDIwMDksIDB4MDI3YywgMHgyMTBjLAorCTB4OTE4YywgMHgwMGZmLCAweGI5MTIsIDB4MjAwOSwgMHgwMjdkLCAweDIxMGMsIDB4YjkxNiwgMHgyMDAxLAorCTB4MDAwMiwgMHgwODBjLCAweDY2ZmEsIDB4NjAyMywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAorCTB4MDAwMiwgMHgwODBjLCAweDk2MWUsIDB4MDgwYywgMHg5YWIzLCAweDAwMjgsIDB4MDgwYywgMHhiYjVjLAorCTB4MjAwMSwgMHgwMDAxLCAweDA0MzEsIDB4MDBkZSwgMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHgyMDAxLAorCTB4MTgxMCwgMHgyMDA0LCAweGQwYTQsIDB4MDEyMCwgMHgyMDAxLCAweDE4NDgsIDB4MjAwNCwgMHhkMGFjLAorCTB4MDAwNSwgMHgwMGU2LCAweDA4MGMsIDB4ZWU0NywgMHgwMTkwLCAweDIwNzEsIDB4MDI2MCwgMHg3MTA4LAorCTB4NzIwYywgMHg5MThjLCAweDAwZmYsIDB4MTExOCwgMHg5Mjg0LCAweGZmMDAsIDB4MDE0MCwgMHg2MDEwLAorCTB4MjA1OCwgMHhiOGEwLCAweDkwODQsIDB4ZmY4MCwgMHgxMTEwLCAweGI5MTIsIDB4YmExNiwgMHgwMGVlLAorCTB4MDAwNSwgMHgyMDMwLCAweDkwMDUsIDB4MDE1OCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NmZhLAorCTB4MDgwYywgMHg1ODU0LCAweDExMjAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjcyNiwgMHgyNjAwLAorCTB4OTAwNSwgMHgxMWIwLCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4NjgsIDB4MDA5ZSwgMHhkMGZjLAorCTB4MTE3OCwgMHgwMDM2LCAweDAwNDYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmJhMCwgMHgwMGJlLAorCTB4MjAyMSwgMHgwMDA0LCAweDIwMTEsIDB4ODAxNCwgMHgwODBjLCAweDRjYTEsIDB4MDA0ZSwgMHgwMDNlLAorCTB4MDgwYywgMHgzMzQ0LCAweDYwMjAsIDB4OTA4NiwgMHgwMDBhLCAweDExMDgsIDB4MDAwNSwgMHgwODA0LAorCTB4YjE2YywgMHgwMGI2LCAweDAwZTYsIDB4MDAyNiwgMHgwMDE2LCAweDIwNzEsIDB4MTgwMCwgMHg3MDkwLAorCTB4OTA4NiwgMHgwMDE0LCAweDE5MDQsIDB4YmYwMCwgMHgyMDAxLCAweDE4MGQsIDB4MjAwNCwgMHhkMDhjLAorCTB4MDkwNCwgMHhiZWIzLCAweDAwZDYsIDB4MDgwYywgMHg3NzllLCAweDAxYTAsIDB4MDAyNiwgMHgyMDExLAorCTB4MDAxMCwgMHgwODBjLCAweDZjMzUsIDB4MDAyZSwgMHgwOTA0LCAweGJlYjIsIDB4MDgwYywgMHg1ODU0LAorCTB4MTU5OCwgMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLAorCTB4ZGVhZCwgMHgwNDUwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI5MTAsIDB4MDBiZSwgMHg5MTg2LAorCTB4MDBmZiwgMHgwNTgwLCAweDAwMjYsIDB4MjAxMSwgMHg4MDA4LCAweDA4MGMsIDB4NmMzNSwgMHgwMDJlLAorCTB4MDU0OCwgMHg2MDE0LCAweDkwMDUsIDB4MDkwYywgMHgwZDg1LCAweDIwNDgsIDB4YTg2NCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MDg2LCAweDAwMzksIDB4MTE0MCwgMHgyMDAxLCAweDAwMzAsIDB4OTAwZSwgMHgyMDExLAorCTB4NDAwOSwgMHgwODBjLCAweGQ1MWYsIDB4MDA0MCwgMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLAorCTB4YTg2NywgMHgwMTAzLCAweGE4MzMsIDB4ZGVhZCwgMHg2MDEwLCAweDIwNTgsIDB4YjlhMCwgMHgwMDE2LAorCTB4MDgwYywgMHgzMzQ0LCAweDA4MGMsIDB4YjE2YywgMHgwMDFlLCAweDA4MGMsIDB4MzQxZSwgMHgwMGRlLAorCTB4MDgwNCwgMHhiZjA1LCAweDAwZGUsIDB4MDgwYywgMHg1ODU0LCAweDExNzAsIDB4NjAxNCwgMHg5MDA1LAorCTB4MTE1OCwgMHgwMDM2LCAweDAwNDYsIDB4NjAxMCwgMHgyMDU4LCAweGJiYTAsIDB4MjAyMSwgMHgwMDA2LAorCTB4MDgwYywgMHg0ZTU4LCAweDAwNGUsIDB4MDAzZSwgMHgwMGQ2LCAweDYwMTAsIDB4MjA1OCwgMHgwODBjLAorCTB4Njg0ZiwgMHgwODBjLCAweGJjODgsIDB4MDBkZSwgMHgwODBjLCAweGMxNWIsIDB4MTU4OCwgMHg2MDEwLAorCTB4MjA1OCwgMHhiODkwLCAweDkwMDUsIDB4MDU2MCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NmZhLAorCTB4MDA5NiwgMHg2MDE0LCAweDkwNGQsIDB4MDFkMCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LAorCTB4MDAzOSwgMHgxMTQwLCAweDIwMDEsIDB4MDAwMCwgMHg5MDBlLCAweDIwMTEsIDB4NDAwMCwgMHgwODBjLAorCTB4ZDUxZiwgMHgwMDYwLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAyOSwgMHgwMTMwLAorCTB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweDAyMDAsIDB4MDA5ZSwgMHgwODBjLAorCTB4MzM0NCwgMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwMTQwLCAweDA4MGMsIDB4YjE2YywgMHgwMDI4LAorCTB4MDgwYywgMHhiYjVjLCAweDkwMDYsIDB4MDgwYywgMHhiZTIxLCAweDAwMWUsIDB4MDAyZSwgMHgwMGVlLAorCTB4MDBiZSwgMHgwMDA1LCAweDIwMTEsIDB4MTgyNCwgMHgyMjA0LCAweDkwODYsIDB4MDAxNCwgMHgxMTYwLAorCTB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjZmYSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLAorCTB4MDgwYywgMHg5NjFlLCAweDA4MDQsIDB4OWFiMywgMHgyMDAxLCAweDAwMDEsIDB4MDgwNCwgMHhiZTIxLAorCTB4MjAzMCwgMHgyMDExLCAweDE4MjQsIDB4MjIwNCwgMHg5MDg2LCAweDAwMDQsIDB4MTE0OCwgMHg5NmI2LAorCTB4MDAwYiwgMHgxMTIwLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDY2ZmEsIDB4MDgwNCwgMHhiMTZjLAorCTB4MjAwMSwgMHgwMDAxLCAweDA4MDQsIDB4YmUyMSwgMHgwMDAyLCAweGJjNDUsIDB4YmY0YywgMHhiYzQ1LAorCTB4YmY4ZiwgMHhiYzQ1LCAweGMwM2MsIDB4YmY0MSwgMHhiYzQ4LCAweGJjNDUsIDB4YzA1MCwgMHhiYzQ1LAorCTB4YzA2MiwgMHg2NjA0LCAweDk2ODYsIDB4MDAwMywgMHgwOTA0LCAweGJlNTEsIDB4OTZiNiwgMHgwMDFlLAorCTB4MTExMCwgMHgwODBjLCAweGIxNmMsIDB4MDAwNSwgMHgwMGI2LCAweDAwZDYsIDB4MDBjNiwgMHgwODBjLAorCTB4YzA3NCwgMHgxMWEwLCAweDkwMDYsIDB4MDgwYywgMHg2NmU2LCAweDA4MGMsIDB4MzMxNSwgMHgwODBjLAorCTB4ZDY1YSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NmZhLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAorCTB4MDAwMiwgMHgwODBjLCAweDk2MWUsIDB4MDgwYywgMHg5YWIzLCAweDA0MjgsIDB4MjAwOSwgMHgwMjZlLAorCTB4MjEwNCwgMHg5MDg2LCAweDAwMDksIDB4MTE2MCwgMHg2MDEwLCAweDIwNTgsIDB4Yjg0MCwgMHg5MDg0LAorCTB4MDBmZiwgMHg5MDA1LCAweDAxODAsIDB4ODAwMSwgMHhiODQyLCAweDYwMWIsIDB4MDAwYSwgMHgwMDk4LAorCTB4MjAwOSwgMHgwMjZmLCAweDIxMDQsIDB4OTA4NCwgMHhmZjAwLCAweDkwOGUsIDB4MTkwMCwgMHgwMTU4LAorCTB4OTA4ZSwgMHgxZTAwLCAweDA5OTAsIDB4MDgwYywgMHgzMzE1LCAweDA4MGMsIDB4ZDY1YSwgMHgyMDAxLAorCTB4MDAwMSwgMHgwODBjLCAweGJlMjEsIDB4MDBjZSwgMHgwMGRlLCAweDAwYmUsIDB4MDAwNSwgMHgwMDk2LAorCTB4MDBiNiwgMHgwMDI2LCAweDkwMTYsIDB4MDgwYywgMHhjMDgyLCAweDAwZDYsIDB4MjA2OSwgMHgxOTdjLAorCTB4MmQwNCwgMHg5MDA1LCAweDAxNjgsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLAorCTB4MTEzOCwgMHgyMDY5LCAweDE4MjAsIDB4MmQwNCwgMHg4MDAwLCAweDIwNmEsIDB4MDBkZSwgMHgwMDEwLAorCTB4MDBkZSwgMHgwMDg4LCAweDkwMDYsIDB4MDgwYywgMHg2NmU2LCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLAorCTB4NjZmYSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLAorCTB4OWFiMywgMHgwODA0LCAweGMwMGMsIDB4MDgwYywgMHhjZjFiLCAweDAxYjAsIDB4NjAxNCwgMHgyMDQ4LAorCTB4YTg2NCwgMHgyMDEwLCAweDkwODYsIDB4MDEzOSwgMHgxMTM4LCAweDYwMDcsIDB4MDAxNiwgMHgyMDAxLAorCTB4MDAwMiwgMHgwODBjLCAweGQ1N2MsIDB4MDBiMCwgMHg2MDE0LCAweDIwNDgsIDB4YTg2NCwgMHhkMGZjLAorCTB4MDExOCwgMHgyMDAxLCAweDAwMDEsIDB4MGNhOCwgMHgyMDAxLCAweDE4MGUsIDB4MjAwNCwgMHhkMGRjLAorCTB4MDE0OCwgMHg2MDEwLCAweDIwNTgsIDB4Yjg0MCwgMHg5MDg0LCAweDAwZmYsIDB4OTAwNSwgMHgxMTEwLAorCTB4OTAwNiwgMHgwYzM4LCAweDA4MGMsIDB4YmI1YywgMHgyMDA5LCAweDAyNmUsIDB4MjEzNCwgMHg5NmI0LAorCTB4MDBmZiwgMHg5Njg2LCAweDAwMDUsIDB4MDUyMCwgMHg5Njg2LCAweDAwMGIsIDB4MDFjOCwgMHgyMDA5LAorCTB4MDI2ZiwgMHgyMTA0LCAweDkwODQsIDB4ZmYwMCwgMHgxMTE4LCAweDk2ODYsIDB4MDAwOSwgMHgwMWMwLAorCTB4OTA4NiwgMHgxOTAwLCAweDExNjgsIDB4OTY4NiwgMHgwMDA5LCAweDAxOTAsIDB4MjAwMSwgMHgwMDA0LAorCTB4MDgwYywgMHg2NmZhLCAweDIwMDEsIDB4MDAyOCwgMHg2MDFhLCAweDYwMDcsIDB4MDA1MiwgMHgwMDIwLAorCTB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4YmUyMSwgMHgwMDJlLCAweDAwYmUsIDB4MDA5ZSwgMHgwMDA1LAorCTB4OTI4NiwgMHgwMTM5LCAweDAxNjAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2YxYiwgMHgwMTQwLAorCTB4YTg2NCwgMHg5MDg2LCAweDAxMzksIDB4MDExOCwgMHhhODY4LCAweGQwZmMsIDB4MDEwOCwgMHgwYzQwLAorCTB4NjAxMCwgMHgyMDU4LCAweGI4NDAsIDB4OTA4NCwgMHgwMGZmLCAweDkwMDUsIDB4MDEzOCwgMHg4MDAxLAorCTB4Yjg0MiwgMHg2MDFiLCAweDAwMGEsIDB4NjAwNywgMHgwMDE2LCAweDA4ZjAsIDB4YjhhMCwgMHg5MDg2LAorCTB4MDA3ZSwgMHgxMTM4LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4NjEzMCwgMHgwMGVlLAorCTB4MDAxMCwgMHgwODBjLCAweDMzMTUsIDB4MDg2MCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg2NmZhLAorCTB4MDgwYywgMHhjMDgyLCAweDExNDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMywgMHgwODBjLAorCTB4OTYxZSwgMHgwODA0LCAweDlhYjMsIDB4MDgwYywgMHhiYjVjLCAweDkwMDYsIDB4MDgwNCwgMHhiZTIxLAorCTB4MDQ4OSwgMHgxMTYwLCAweDIwMDEsIDB4MDAwOCwgMHgwODBjLCAweDY2ZmEsIDB4NjAwMywgMHgwMDAxLAorCTB4NjAwNywgMHgwMDA1LCAweDA4MGMsIDB4OTYxZSwgMHgwODA0LCAweDlhYjMsIDB4MjAwMSwgMHgwMDAxLAorCTB4MDgwNCwgMHhiZTIxLCAweDAwZjksIDB4MTE2MCwgMHgyMDAxLCAweDAwMGEsIDB4MDgwYywgMHg2NmZhLAorCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgwODBjLCAweDk2MWUsIDB4MDgwNCwgMHg5YWIzLAorCTB4MjAwMSwgMHgwMDAxLCAweDA4MDQsIDB4YmUyMSwgMHgyMDA5LCAweDAyNmUsIDB4MjEwNCwgMHg5MDg2LAorCTB4MDAwMywgMHgxMTM4LCAweDIwMDksIDB4MDI2ZiwgMHgyMTA0LCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LAorCTB4MmEwMCwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHgwMDE2LAorCTB4NjExMCwgMHgyMTU4LCAweDA4MGMsIDB4NjdjMywgMHgwMDFlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LAorCTB4MDBiNiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMDM2LCAweDAwMTYsIDB4NjAxMCwgMHgyMDU4LAorCTB4MjAwOSwgMHgxODM3LCAweDIxMDQsIDB4OTA4NSwgMHgwMDAzLCAweDIwMGEsIDB4MDgwYywgMHhjMTJkLAorCTB4MDU2MCwgMHgyMDA5LCAweDE4MzcsIDB4MjEwNCwgMHhjMGNkLCAweDIwMGEsIDB4MDgwYywgMHg2YzBkLAorCTB4MDE1OCwgMHg5MDA2LCAweDIwMjAsIDB4MjAwOSwgMHgwMDJhLCAweDA4MGMsIDB4ZWE4ZCwgMHgyMDAxLAorCTB4MTgwYywgMHgyMDBjLCAweGMxOTUsIDB4MjEwMiwgMHgyMDE5LCAweDAwMmEsIDB4MjAwOSwgMHgwMDAxLAorCTB4MDgwYywgMHgzMmRhLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4MzBiZiwgMHgwMGVlLAorCTB4MDBjNiwgMHgwMTU2LCAweDIwYTksIDB4MDc4MSwgMHgyMDA5LCAweDAwN2YsIDB4MDgwYywgMHgzNDFlLAorCTB4ODEwOCwgMHgxZjA0LCAweGMwYzYsIDB4MDE1ZSwgMHgwMGNlLCAweDA4MGMsIDB4YzA4NSwgMHgyMDcxLAorCTB4MDI2MCwgMHgyMDc5LCAweDAyMDAsIDB4NzgxNywgMHgwMDAxLCAweDIwMDEsIDB4MTgzNywgMHgyMDBjLAorCTB4YzFjNSwgMHg3MDE4LCAweGQwZmMsIDB4MDExMCwgMHhkMGRjLCAweDAxMTgsIDB4NzAzOCwgMHhkMGRjLAorCTB4MTEwOCwgMHhjMWM0LCAweDc4MTcsIDB4MDAwMCwgMHgyMDAxLCAweDE4MzcsIDB4MjEwMiwgMHg5MTg0LAorCTB4MDA1MCwgMHg5MDg2LCAweDAwNTAsIDB4MDVkMCwgMHgyMDc5LCAweDAxMDAsIDB4MmUwNCwgMHg5MDg0LAorCTB4MDBmZiwgMHgyMDY5LCAweDE4MWYsIDB4MjA2YSwgMHg3OGU2LCAweDAwMDYsIDB4OGU3MCwgMHgyZTA0LAorCTB4MjA2OSwgMHgxODIwLCAweDIwNmEsIDB4NzhlYSwgMHg3ODMyLCAweDc4MzYsIDB4MjAxMCwgMHg5MDg0LAorCTB4ZmYwMCwgMHgwMDFlLCAweDkxMDUsIDB4MjAwOSwgMHgxODJjLCAweDIwMGEsIDB4MjIwMCwgMHg5MDg0LAorCTB4MDBmZiwgMHgyMDA4LCAweDA4MGMsIDB4MjZkNSwgMHgwODBjLCAweDc3OWUsIDB4MDE3MCwgMHgyMDcxLAorCTB4MDI2MCwgMHgyMDY5LCAweDE5ODIsIDB4NzA0OCwgMHgyMDZhLCAweDcwNGMsIDB4NjgwNiwgMHg3MDUwLAorCTB4NjgwYSwgMHg3MDU0LCAweDY4MGUsIDB4MDgwYywgMHhkMzQ4LCAweDAwNDAsIDB4MjAwMSwgMHgwMDA2LAorCTB4MDgwYywgMHg2NmZhLCAweDA4MGMsIDB4MzM0NCwgMHgwODBjLCAweGIxNmMsIDB4MDAxZSwgMHgwMDNlLAorCTB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwOTYsIDB4MDAyNiwgMHgwMDM2LAorCTB4MDBlNiwgMHgwMTU2LCAweDIwMTksIDB4MTgyYywgMHgyMzFjLCAweDgzZmYsIDB4MDFmMCwgMHgyMDcxLAorCTB4MDI2MCwgMHg3MjAwLCAweDkyOTQsIDB4MDBmZiwgMHg3MDA0LCAweDkwODQsIDB4ZmYwMCwgMHg5MjA1LAorCTB4OTMwNiwgMHgxMTk4LCAweDIwMTEsIDB4MDI3NiwgMHgyMGE5LCAweDAwMDQsIDB4MmI0OCwgMHgyMDE5LAorCTB4MDAwYSwgMHgwODBjLCAweGMyMjIsIDB4MTE0OCwgMHgyMDExLCAweDAyN2EsIDB4MjBhOSwgMHgwMDA0LAorCTB4MjAxOSwgMHgwMDA2LCAweDA4MGMsIDB4YzIyMiwgMHgxMTAwLCAweDAxNWUsIDB4MDBlZSwgMHgwMDNlLAorCTB4MDAyZSwgMHgwMDllLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsIDB4NzAzNCwgMHg5MDg2LAorCTB4MDAxNCwgMHgxMWE4LCAweDcwMzgsIDB4OTA4NiwgMHgwODAwLCAweDExODgsIDB4NzAzYywgMHhkMGVjLAorCTB4MDE2MCwgMHg5MDg0LCAweDBmMDAsIDB4OTA4NiwgMHgwMTAwLCAweDExMzgsIDB4NzA1NCwgMHhkMGE0LAorCTB4MTExMCwgMHhkMGFjLCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLAorCTB4MDAwNSwgMHgwMGU2LCAweDAwOTYsIDB4MDBjNiwgMHgwMDc2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDI2LAorCTB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDI5LCAweDE5ZjQsIDB4MjUyYywgMHgyMDIxLAorCTB4MTlmYiwgMHgyNDI0LCAweDIwNjEsIDB4MWRkYywgMHgyMDcxLCAweDE4MDAsIDB4NzI1NCwgMHg3MDc0LAorCTB4OTIwMiwgMHgxYTA0LCAweGMxZWUsIDB4MDgwYywgMHg4ZWVlLCAweDA5MDQsIDB4YzFlNywgMHgwODBjLAorCTB4ZWFiZSwgMHgwOTA0LCAweGMxZTcsIDB4NjcyMCwgMHg5Nzg2LCAweDAwMDcsIDB4MDkwNCwgMHhjMWU3LAorCTB4MjUwMCwgMHg5YzA2LCAweDA5MDQsIDB4YzFlNywgMHgyNDAwLCAweDljMDYsIDB4MDkwNCwgMHhjMWU3LAorCTB4M2UwOCwgMHg5MTg2LCAweDAwMDIsIDB4MTE0OCwgMHg2MDEwLCAweDkwMDUsIDB4MDEzMCwgMHgwMGI2LAorCTB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgxNTkwLCAweDAwYzYsIDB4NjA0MywgMHhmZmZmLAorCTB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTExMCwgMHgwODBjLCAweDFhZDMsIDB4OTc4NiwgMHgwMDBhLAorCTB4MDE0OCwgMHgwODBjLCAweGQxMzIsIDB4MTEzMCwgMHgwMGNlLCAweDA4MGMsIDB4YmI1YywgMHgwODBjLAorCTB4YjFhNywgMHgwMGU4LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDFhOCwgMHg5Nzg2LAorCTB4MDAwMywgMHgxNTMwLCAweGE4NjcsIDB4MDEwMywgMHhhODdjLCAweGQwY2MsIDB4MDEzMCwgMHgwMDk2LAorCTB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsIDB4MTAwYiwgMHgwMDllLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLAorCTB4MDgwYywgMHg3MDA2LCAweDA4MGMsIDB4ZDEwYywgMHgwODBjLCAweGIxYTcsIDB4MDBjZSwgMHg5Y2UwLAorCTB4MDAxYywgMHg3MDY4LCAweDljMDIsIDB4MTIxMCwgMHgwODA0LCAweGMxOGUsIDB4MDEyZSwgMHgwMDBlLAorCTB4MDAyZSwgMHgwMDRlLCAweDAwNWUsIDB4MDA3ZSwgMHgwMGNlLCAweDAwOWUsIDB4MDBlZSwgMHgwMDA1LAorCTB4OTc4NiwgMHgwMDA2LCAweDExMTgsIDB4MDgwYywgMHhlYTMwLCAweDBjMzAsIDB4OTc4NiwgMHgwMDA5LAorCTB4MTE0OCwgMHg2MDAwLCAweDkwODYsIDB4MDAwNCwgMHgwZDA4LCAweDIwMDksIDB4MDA0YywgMHgwODBjLAorCTB4YjIwYSwgMHgwOGUwLCAweDk3ODYsIDB4MDAwYSwgMHgwOTgwLCAweDA4MjAsIDB4MjIwYywgMHgyMzA0LAorCTB4OTEwNiwgMHgxMTMwLCAweDgyMTAsIDB4ODMxOCwgMHgxZjA0LCAweGMyMGUsIDB4OTAwNiwgMHgwMDA1LAorCTB4MjMwNCwgMHg5MTAyLCAweDAyMTgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHg5MThkLAorCTB4MDAwMSwgMHgwMDA1LCAweDAxMzYsIDB4MDFjNiwgMHgwMDE2LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LAorCTB4OTA4YywgMHgwMDNmLCAweDIxZTAsIDB4OTA4NCwgMHhmZmMwLCAweDkzMDAsIDB4MjA5OCwgMHgzNTE4LAorCTB4MjBhOSwgMHgwMDAxLCAweDIyMGMsIDB4NDAwMiwgMHg5MTBlLCAweDExNDAsIDB4ODIxMCwgMHg4MzE5LAorCTB4MWRjOCwgMHg5MDA2LCAweDAwMWUsIDB4MDFjZSwgMHgwMTNlLCAweDAwMDUsIDB4MjIwYywgMHg5MTAyLAorCTB4MDIxOCwgMHgyMDAxLCAweDAwMDEsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDAsIDB4OTE4ZCwgMHgwMDAxLAorCTB4MDAxZSwgMHgwMWNlLCAweDAxM2UsIDB4MDAwNSwgMHgyMjBjLCAweDgxMGYsIDB4MjMwNCwgMHg5MTA2LAorCTB4MTEzMCwgMHg4MjEwLCAweDgzMTgsIDB4MWYwNCwgMHhjMjRjLCAweDkwMDYsIDB4MDAwNSwgMHg5MThkLAorCTB4MDAwMSwgMHgwMDA1LCAweDYwMDQsIDB4OTA4YSwgMHgwMDUzLCAweDFhMGMsIDB4MGQ4NSwgMHgwODBjLAorCTB4ZDEyMSwgMHgwMTIwLCAweDA4MGMsIDB4ZDEzMiwgMHgwMTU4LCAweDAwMjgsIDB4MDgwYywgMHgzMzQ0LAorCTB4MDgwYywgMHhkMTMyLCAweDAxMjgsIDB4MDgwYywgMHg5OWVkLCAweDA4MGMsIDB4YjE2YywgMHgwMDA1LAorCTB4MDgwYywgMHhiYjVjLCAweDBjYzAsIDB4OTE4MiwgMHgwMDU3LCAweDEyMjAsIDB4OTE4MiwgMHgwMDQwLAorCTB4MDIwOCwgMHgwMDBhLCAweDAwMDUsIDB4YzI5MiwgMHhjMjkyLCAweGMyOTIsIDB4YzI5MiwgMHhjMjkyLAorCTB4YzI5MiwgMHhjMjkyLCAweGMyOTIsIDB4YzI5MiwgMHhjMjkyLCAweGMyOTIsIDB4YzI5NCwgMHhjMjk0LAorCTB4YzI5NCwgMHhjMjk0LCAweGMyOTIsIDB4YzI5MiwgMHhjMjkyLCAweGMyOTQsIDB4YzI5MiwgMHhjMjkyLAorCTB4YzI5MiwgMHhjMjkyLCAweDA4MGMsIDB4MGQ4NSwgMHg2MDBiLCAweGZmZmYsIDB4NjAwMywgMHgwMDBmLAorCTB4NjEwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGQ2NWQsIDB4MjAwOSwgMHg4MDAwLAorCTB4MDgwYywgMHg5NjE3LCAweDAxMmUsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsIDB4MTEyOCwgMHg2MDA0LAorCTB4OTA4MiwgMHgwMDQwLCAweDA4MDQsIDB4YzMxYywgMHg5MTg2LCAweDAwMjcsIDB4MTUyMCwgMHgwODBjLAorCTB4OTllZCwgMHgwODBjLCAweDMzMTUsIDB4MDgwYywgMHhkNjVhLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LAorCTB4MDgwYywgMHhjZjFiLCAweDAxOTgsIDB4MDgwYywgMHhkMTMyLCAweDExMTgsIDB4MDgwYywgMHhiYjVjLAorCTB4MDA2OCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDI5LCAweGE4NzcsIDB4MDAwMCwgMHhhOTdjLAorCTB4YzFjNSwgMHhhOTdlLCAweDA4MGMsIDB4NzAxMiwgMHgwODBjLCAweGQxMGMsIDB4MDA5ZSwgMHgwODBjLAorCTB4YjE2YywgMHgwODA0LCAweDlhYjMsIDB4OTE4NiwgMHgwMDE0LCAweDExMjAsIDB4NjAwNCwgMHg5MDgyLAorCTB4MDA0MCwgMHgwMDMwLCAweDkxODYsIDB4MDA1MywgMHgwMTEwLCAweDA4MGMsIDB4MGQ4NSwgMHgwMDA1LAorCTB4MDAwMiwgMHhjMmZhLCAweGMyZjgsIDB4YzJmOCwgMHhjMmY4LCAweGMyZjgsIDB4YzJmOCwgMHhjMmY4LAorCTB4YzJmOCwgMHhjMmY4LCAweGMyZjgsIDB4YzJmOCwgMHhjMzEzLCAweGMzMTMsIDB4YzMxMywgMHhjMzEzLAorCTB4YzJmOCwgMHhjMzEzLCAweGMyZjgsIDB4YzMxMywgMHhjMmY4LCAweGMyZjgsIDB4YzJmOCwgMHhjMmY4LAorCTB4MDgwYywgMHgwZDg1LCAweDA4MGMsIDB4OTllZCwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLAorCTB4Y2YxYiwgMHgwMTY4LCAweGE4NjcsIDB4MDEwMywgMHhhODdiLCAweDAwMDYsIDB4YTg3NywgMHgwMDAwLAorCTB4YTg4MCwgMHhjMGVjLCAweGE4ODIsIDB4MDgwYywgMHg3MDEyLCAweDA4MGMsIDB4ZDEwYywgMHgwMDllLAorCTB4MDgwYywgMHhiMTZjLCAweDAwMDUsIDB4MDgwYywgMHg5OWVkLCAweDA4MGMsIDB4ZDEzMiwgMHgwOTBjLAorCTB4YmI1YywgMHgwODBjLCAweGIxNmMsIDB4MDAwNSwgMHgwMDAyLCAweGMzMzYsIDB4YzMzNCwgMHhjMzM0LAorCTB4YzMzNCwgMHhjMzM0LCAweGMzMzQsIDB4YzMzNCwgMHhjMzM0LCAweGMzMzQsIDB4YzMzNCwgMHhjMzM0LAorCTB4YzMzOCwgMHhjMzM4LCAweGMzMzgsIDB4YzMzOCwgMHhjMzM0LCAweGMzM2EsIDB4YzMzNCwgMHhjMzM4LAorCTB4YzMzNCwgMHhjMzM0LCAweGMzMzQsIDB4YzMzNCwgMHgwODBjLCAweDBkODUsIDB4MDgwYywgMHgwZDg1LAorCTB4MDgwYywgMHgwZDg1LCAweDA4MGMsIDB4YjE2YywgMHgwODA0LCAweDlhYjMsIDB4OTE4MiwgMHgwMDU3LAorCTB4MTIyMCwgMHg5MTgyLCAweDAwNDAsIDB4MDIwOCwgMHgwMDBhLCAweDAwMDUsIDB4YzM1ZCwgMHhjMzVkLAorCTB4YzM1ZCwgMHhjMzVkLCAweGMzNWQsIDB4YzM5NiwgMHhjNDg4LCAweGMzNWQsIDB4YzQ5NCwgMHhjMzVkLAorCTB4YzM1ZCwgMHhjMzVkLCAweGMzNWQsIDB4YzM1ZCwgMHhjMzVkLCAweGMzNWQsIDB4YzM1ZCwgMHhjMzVkLAorCTB4YzM1ZCwgMHhjNDk0LCAweGMzNWYsIDB4YzM1ZCwgMHhjNDkyLCAweDA4MGMsIDB4MGQ4NSwgMHgwMGI2LAorCTB4MDA5NiwgMHg2MTE0LCAweDIxNDgsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsIDB4ZDBiYywgMHgxNTA4LAorCTB4YTg3YiwgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODc3LCAweDAwMDAsIDB4YTg3YywgMHhkMGFjLAorCTB4MDEyOCwgMHhhODM0LCAweGE5MzgsIDB4OTExNSwgMHgxOTBjLCAweGM1MTksIDB4MDgwYywgMHg2ZTI3LAorCTB4NjIxMCwgMHgyMjU4LCAweGJhM2MsIDB4ODJmZiwgMHgwMTEwLCAweDgyMTEsIDB4YmEzZSwgMHhiOGQwLAorCTB4OTAwNSwgMHgwMTEwLCAweDA4MGMsIDB4NjhkZiwgMHgwODBjLCAweGIxNmMsIDB4MDA5ZSwgMHgwMGJlLAorCTB4MDAwNSwgMHhhODdjLCAweGQwYWMsIDB4MDllMCwgMHhhODM4LCAweGE5MzQsIDB4OTEwNSwgMHgwOWMwLAorCTB4YTg4MCwgMHhkMGJjLCAweDE5YTgsIDB4MDgwYywgMHhkMjY3LCAweDBjODAsIDB4MDBiNiwgMHgwMDk2LAorCTB4NjExNCwgMHgyMTQ4LCAweDYwMWMsIDB4ZDBmYywgMHgxMTEwLCAweDc2NDQsIDB4MDAwOCwgMHg5MDM2LAorCTB4OTZiNCwgMHgwZmZmLCAweDg2ZmYsIDB4MTU5MCwgMHg2MDEwLCAweDIwNTgsIDB4YjgwMCwgMHhkMGJjLAorCTB4MTkwNCwgMHhjNDc3LCAweGE4N2IsIDB4MDAwMCwgMHhhODY3LCAweDAxMDMsIDB4YWU3NiwgMHhhODdjLAorCTB4ZDBhYywgMHgwMTI4LCAweGE4MzQsIDB4YTkzOCwgMHg5MTE1LCAweDE5MGMsIDB4YzUxOSwgMHgwODBjLAorCTB4NmUyNywgMHg2MjEwLCAweDIyNTgsIDB4YmEzYywgMHg4MmZmLCAweDAxMTAsIDB4ODIxMSwgMHhiYTNlLAorCTB4YjhkMCwgMHg5MDA1LCAweDAxMTAsIDB4MDgwYywgMHg2OGRmLCAweDYwMWMsIDB4ZDBmYywgMHgxMTQ4LAorCTB4NzA0NCwgMHhkMGU0LCAweDE5MDQsIDB4YzQ1OCwgMHgwODBjLCAweGIxNmMsIDB4MDA5ZSwgMHgwMGJlLAorCTB4MDAwNSwgMHgyMDA5LCAweDAyMTEsIDB4MjEwYywgMHgwODBjLCAweDBkODUsIDB4OTY4YywgMHgwYzAwLAorCTB4MDE1MCwgMHg2MDEwLCAweDIwNTgsIDB4YjgwMCwgMHhkMGJjLCAweDE5MDQsIDB4YzQ1YywgMHg3MzQ4LAorCTB4YWI5MiwgMHg3MzRjLCAweGFiOGUsIDB4OTY4YywgMHgwMGZmLCAweDkxODYsIDB4MDAwMiwgMHgwNTA4LAorCTB4OTE4NiwgMHgwMDI4LCAweDExMTgsIDB4YTg3YiwgMHgwMDFjLCAweDAwZTgsIDB4ZDZkYywgMHgwMWEwLAorCTB4YTg3YiwgMHgwMDE1LCAweGE4N2MsIDB4ZDBhYywgMHgwMTcwLCAweGE5MzgsIDB4YWEzNCwgMHgyMTAwLAorCTB4OTIwNSwgMHgwMTQ4LCAweDcwNDgsIDB4OTEwNiwgMHgxMTE4LCAweDcwNGMsIDB4OTIwNiwgMHgwMTE4LAorCTB4YTk5MiwgMHhhYThlLCAweGM2ZGMsIDB4MDAzOCwgMHhkNmQ0LCAweDAxMTgsIDB4YTg3YiwgMHgwMDA3LAorCTB4MDAxMCwgMHhhODdiLCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweGFlNzYsIDB4OTAxZSwgMHhkNmM0LAorCTB4MDFkOCwgMHg5Njg2LCAweDAxMDAsIDB4MTEzMCwgMHg3MDY0LCAweDkwMDUsIDB4MTExOCwgMHhjNmM0LAorCTB4MDgwNCwgMHhjM2EyLCAweDczNWMsIDB4YWI4NiwgMHg4M2ZmLCAweDAxNzAsIDB4OTM4YSwgMHgwMDA5LAorCTB4MDIxMCwgMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwgMHgyMzA4LCAweDIwMTksIDB4MDAxOCwgMHgyMDExLAorCTB4MDAyNSwgMHgwODBjLCAweGNhN2IsIDB4MDAzZSwgMHhkNmNjLCAweDA5MDQsIDB4YzNiNywgMHg3MTU0LAorCTB4YTk4YSwgMHg4MWZmLCAweDA5MDQsIDB4YzNiNywgMHg5MTkyLCAweDAwMjEsIDB4MTI3OCwgMHg4MzA0LAorCTB4OTA5OCwgMHgwMDE4LCAweDIwMTEsIDB4MDAyOSwgMHgwODBjLCAweGNhN2IsIDB4MjAxMSwgMHgwMjA1LAorCTB4MjAxMywgMHgwMDAwLCAweDA4MGMsIDB4ZDVlOCwgMHgwODA0LCAweGMzYjcsIDB4YTg2OCwgMHhkMGZjLAorCTB4MDEyMCwgMHgyMDA5LCAweDAwMjAsIDB4YTk4YSwgMHgwYzUwLCAweDAwYTYsIDB4Mjk1MCwgMHgwODBjLAorCTB4Y2ExYSwgMHgwMGFlLCAweDA4MGMsIDB4ZDVlOCwgMHgwODBjLCAweGNhNmIsIDB4MDgwNCwgMHhjM2I5LAorCTB4MDgwYywgMHhkMjJhLCAweDA4MDQsIDB4YzNjZSwgMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHhjM2RmLAorCTB4YTg4MCwgMHhkMGJjLCAweDE5MDQsIDB4YzNkZiwgMHg5Njg0LCAweDA0MDAsIDB4MDEzMCwgMHhhODM4LAorCTB4YWIzNCwgMHg5MzA1LCAweDA5MDQsIDB4YzNkZiwgMHgwMGI4LCAweDczNDgsIDB4YTgzOCwgMHg5MzA2LAorCTB4MTE5OCwgMHg3MzRjLCAweGE4MzQsIDB4OTMxZSwgMHgwOTA0LCAweGMzZGYsIDB4MDA2OCwgMHhhODdjLAorCTB4ZDBhYywgMHgwOTA0LCAweGMzYWEsIDB4YTgzOCwgMHhhOTM0LCAweDkxMDUsIDB4MDkwNCwgMHhjM2FhLAorCTB4YTg4MCwgMHhkMGJjLCAweDE5MDQsIDB4YzNhYSwgMHgwODBjLCAweGQyNjcsIDB4MDgwNCwgMHhjM2NlLAorCTB4MDBmNiwgMHgyMDc5LCAweDAyNmMsIDB4N2MwNCwgMHg3YjAwLCAweDdlMGMsIDB4N2QwOCwgMHgwMGZlLAorCTB4MDAyMSwgMHgwMDA1LCAweDAwMTEsIDB4MDAwNSwgMHgwMDA1LCAweDAwOTYsIDB4NjAwMywgMHgwMDAyLAorCTB4NjAwNywgMHgwMDQzLCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwYWMsIDB4MDEyOCwgMHgwMDllLAorCTB4MDAwNSwgMHgyMTMwLCAweDIyMjgsIDB4MDA1OCwgMHgyNDAwLCAweGE5YWMsIDB4OTEwYSwgMHgyMzAwLAorCTB4YWFiMCwgMHg5MjEzLCAweDI2MDAsIDB4OTEwMiwgMHgyNTAwLCAweDkyMDMsIDB4MGU5MCwgMHhhYzQ2LAorCTB4YWI0YSwgMHhhZTM2LCAweGFkM2EsIDB4NjA0NCwgMHhkMGZjLCAweDE5MGMsIDB4YWQyNSwgMHg2MDRiLAorCTB4MDAwMCwgMHgwODBjLCAweDFjOWMsIDB4MTExOCwgMHg2MTQ0LCAweDA4MGMsIDB4OTY0MywgMHgwMDllLAorCTB4MDAwNSwgMHg5MTgyLCAweDAwNTcsIDB4MTIyMCwgMHg5MTgyLCAweDAwNDAsIDB4MDIwOCwgMHgwMDBhLAorCTB4MDAwNSwgMHhjNGUwLCAweGM0ZTAsIDB4YzRlMCwgMHhjNGUwLCAweGM0ZTAsIDB4YzRlMCwgMHhjNGUwLAorCTB4YzRlMCwgMHhjNGUwLCAweGM0ZTAsIDB4YzRlMiwgMHhjNGUwLCAweGM0ZTAsIDB4YzRlMCwgMHhjNGUwLAorCTB4YzRmMywgMHhjNGUwLCAweGM0ZTAsIDB4YzRlMCwgMHhjNGUwLCAweGM1MTcsIDB4YzRlMCwgMHhjNGUwLAorCTB4MDgwYywgMHgwZDg1LCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLCAweDExMTAsIDB4MDgwYywgMHg5OWVkLAorCTB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4YTU5NiwgMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHhkNjYyLAorCTB4MDgwYywgMHg5YTQ4LCAweDAwMDUsIDB4NjAwNCwgMHg5MDg2LCAweDAwNDAsIDB4MTExMCwgMHgwODBjLAorCTB4OTllZCwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHhhNTk2LCAweDA4MGMsIDB4OWE0OCwgMHgwODBjLAorCTB4MzMxNSwgMHgwODBjLCAweGQ2NWEsIDB4MDA5NiwgMHg2MTE0LCAweDIxNDgsIDB4MDgwYywgMHhjZjFiLAorCTB4MDE1MCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDI5LCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLAorCTB4NzAxMiwgMHgwODBjLCAweGQxMGMsIDB4MDA5ZSwgMHgwODBjLCAweGIxNmMsIDB4MDAwNSwgMHgwODBjLAorCTB4MGQ4NSwgMHhhODdiLCAweDAwMTUsIDB4ZDFmYywgMHgwMTgwLCAweGE4N2IsIDB4MDAwNywgMHg4MDAyLAorCTB4ODAwMCwgMHg4MTBhLCAweDkxODksIDB4MDAwMCwgMHgwMDA2LCAweDAwMTYsIDB4MjAwOSwgMHgxYTdjLAorCTB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4MDAxZSwgMHgwMDBlLCAweGE5OTIsIDB4YTg4ZSwgMHgwMDA1LAogCTB4OTE4MiwgMHgwMDU3LCAweDEyMjAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMDgsIDB4MDAwYSwgMHgwMDA1LAotCTB4YzA4ZiwgMHhjMDhmLCAweGMwOGYsIDB4YzA4ZiwgMHhjMDhmLCAweGMwYzgsIDB4YzFiYSwgMHhjMDhmLAotCTB4YzFjNiwgMHhjMDhmLCAweGMwOGYsIDB4YzA4ZiwgMHhjMDhmLCAweGMwOGYsIDB4YzA4ZiwgMHhjMDhmLAotCTB4YzA4ZiwgMHhjMDhmLCAweGMwOGYsIDB4YzFjNiwgMHhjMDkxLCAweGMwOGYsIDB4YzFjNCwgMHgwODBjLAotCTB4MGQ3OSwgMHgwMGI2LCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDYwMTAsIDB4MjA1OCwgMHhiODAwLAotCTB4ZDBiYywgMHgxNTA4LCAweGE4N2IsIDB4MDAwMCwgMHhhODY3LCAweDAxMDMsIDB4YTg3NywgMHgwMDAwLAotCTB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LCAweDkxMTUsIDB4MTkwYywgMHhjMjRiLAotCTB4MDgwYywgMHg2ZDI2LCAweDYyMTAsIDB4MjI1OCwgMHhiYTNjLCAweDgyZmYsIDB4MDExMCwgMHg4MjExLAotCTB4YmEzZSwgMHhiOGQwLCAweDkwMDUsIDB4MDExMCwgMHgwODBjLCAweDY4YWUsIDB4MDgwYywgMHhhZjRlLAotCTB4MDA5ZSwgMHgwMGJlLCAweDAwMDUsIDB4YTg3YywgMHhkMGFjLCAweDA5ZTAsIDB4YTgzOCwgMHhhOTM0LAotCTB4OTEwNSwgMHgwOWMwLCAweGE4ODAsIDB4ZDBiYywgMHgxOWE4LCAweDA4MGMsIDB4Y2Y3ZiwgMHgwYzgwLAotCTB4MDBiNiwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHg2MDFjLCAweGQwZmMsIDB4MTExMCwgMHg3NjQ0LAotCTB4MDAwOCwgMHg5MDM2LCAweDk2YjQsIDB4MGZmZiwgMHg4NmZmLCAweDE1OTAsIDB4NjAxMCwgMHgyMDU4LAotCTB4YjgwMCwgMHhkMGJjLCAweDE5MDQsIDB4YzFhOSwgMHhhODdiLCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLAotCTB4YWU3NiwgMHhhODdjLCAweGQwYWMsIDB4MDEyOCwgMHhhODM0LCAweGE5MzgsIDB4OTExNSwgMHgxOTBjLAotCTB4YzI0YiwgMHgwODBjLCAweDZkMjYsIDB4NjIxMCwgMHgyMjU4LCAweGJhM2MsIDB4ODJmZiwgMHgwMTEwLAotCTB4ODIxMSwgMHhiYTNlLCAweGI4ZDAsIDB4OTAwNSwgMHgwMTEwLCAweDA4MGMsIDB4NjhhZSwgMHg2MDFjLAotCTB4ZDBmYywgMHgxMTQ4LCAweDcwNDQsIDB4ZDBlNCwgMHgxOTA0LCAweGMxOGEsIDB4MDgwYywgMHhhZjRlLAotCTB4MDA5ZSwgMHgwMGJlLCAweDAwMDUsIDB4MjAwOSwgMHgwMjExLCAweDIxMGMsIDB4MDgwYywgMHgwZDc5LAotCTB4OTY4YywgMHgwYzAwLCAweDAxNTAsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsIDB4ZDBiYywgMHgxOTA0LAotCTB4YzE4ZSwgMHg3MzQ4LCAweGFiOTIsIDB4NzM0YywgMHhhYjhlLCAweDk2OGMsIDB4MDBmZiwgMHg5MTg2LAotCTB4MDAwMiwgMHgwNTA4LCAweDkxODYsIDB4MDAyOCwgMHgxMTE4LCAweGE4N2IsIDB4MDAxYywgMHgwMGU4LAotCTB4ZDZkYywgMHgwMWEwLCAweGE4N2IsIDB4MDAxNSwgMHhhODdjLCAweGQwYWMsIDB4MDE3MCwgMHhhOTM4LAotCTB4YWEzNCwgMHgyMTAwLCAweDkyMDUsIDB4MDE0OCwgMHg3MDQ4LCAweDkxMDYsIDB4MTExOCwgMHg3MDRjLAotCTB4OTIwNiwgMHgwMTE4LCAweGE5OTIsIDB4YWE4ZSwgMHhjNmRjLCAweDAwMzgsIDB4ZDZkNCwgMHgwMTE4LAotCTB4YTg3YiwgMHgwMDA3LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhZTc2LAotCTB4OTAxZSwgMHhkNmM0LCAweDAxZDgsIDB4OTY4NiwgMHgwMTAwLCAweDExMzAsIDB4NzA2NCwgMHg5MDA1LAotCTB4MTExOCwgMHhjNmM0LCAweDA4MDQsIDB4YzBkNCwgMHg3MzVjLCAweGFiODYsIDB4ODNmZiwgMHgwMTcwLAotCTB4OTM4YSwgMHgwMDA5LCAweDAyMTAsIDB4MjAxOSwgMHgwMDA4LCAweDAwMzYsIDB4MjMwOCwgMHgyMDE5LAotCTB4MDAxOCwgMHgyMDExLCAweDAwMjUsIDB4MDgwYywgMHhjN2FkLCAweDAwM2UsIDB4ZDZjYywgMHgwOTA0LAotCTB4YzBlOSwgMHg3MTU0LCAweGE5OGEsIDB4ODFmZiwgMHgwOTA0LCAweGMwZTksIDB4OTE5MiwgMHgwMDIxLAotCTB4MTI3OCwgMHg4MzA0LCAweDkwOTgsIDB4MDAxOCwgMHgyMDExLCAweDAwMjksIDB4MDgwYywgMHhjN2FkLAotCTB4MjAxMSwgMHgwMjA1LCAweDIwMTMsIDB4MDAwMCwgMHgwODBjLCAweGQzMDAsIDB4MDgwNCwgMHhjMGU5LAotCTB4YTg2OCwgMHhkMGZjLCAweDAxMjAsIDB4MjAwOSwgMHgwMDIwLCAweGE5OGEsIDB4MGM1MCwgMHgwMGE2LAotCTB4Mjk1MCwgMHgwODBjLCAweGM3NGMsIDB4MDBhZSwgMHgwODBjLCAweGQzMDAsIDB4MDgwYywgMHhjNzlkLAotCTB4MDgwNCwgMHhjMGViLCAweDA4MGMsIDB4Y2Y0MiwgMHgwODA0LCAweGMxMDAsIDB4YTg3YywgMHhkMGFjLAotCTB4MDkwNCwgMHhjMTExLCAweGE4ODAsIDB4ZDBiYywgMHgxOTA0LCAweGMxMTEsIDB4OTY4NCwgMHgwNDAwLAotCTB4MDEzMCwgMHhhODM4LCAweGFiMzQsIDB4OTMwNSwgMHgwOTA0LCAweGMxMTEsIDB4MDBiOCwgMHg3MzQ4LAotCTB4YTgzOCwgMHg5MzA2LCAweDExOTgsIDB4NzM0YywgMHhhODM0LCAweDkzMWUsIDB4MDkwNCwgMHhjMTExLAotCTB4MDA2OCwgMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHhjMGRjLCAweGE4MzgsIDB4YTkzNCwgMHg5MTA1LAotCTB4MDkwNCwgMHhjMGRjLCAweGE4ODAsIDB4ZDBiYywgMHgxOTA0LCAweGMwZGMsIDB4MDgwYywgMHhjZjdmLAotCTB4MDgwNCwgMHhjMTAwLCAweDAwZjYsIDB4MjA3OSwgMHgwMjZjLCAweDdjMDQsIDB4N2IwMCwgMHg3ZTBjLAotCTB4N2QwOCwgMHgwMGZlLCAweDAwMjEsIDB4MDAwNSwgMHgwMDExLCAweDAwMDUsIDB4MDAwNSwgMHgwMDk2LAotCTB4NjAwMywgMHgwMDAyLCAweDYwMDcsIDB4MDA0MywgMHg2MDE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGFjLAotCTB4MDEyOCwgMHgwMDllLCAweDAwMDUsIDB4MjEzMCwgMHgyMjI4LCAweDAwNTgsIDB4MjQwMCwgMHhhOWFjLAotCTB4OTEwYSwgMHgyMzAwLCAweGFhYjAsIDB4OTIxMywgMHgyNjAwLCAweDkxMDIsIDB4MjUwMCwgMHg5MjAzLAotCTB4MGU5MCwgMHhhYzQ2LCAweGFiNGEsIDB4YWUzNiwgMHhhZDNhLCAweDYwNDQsIDB4ZDBmYywgMHgxOTBjLAotCTB4YWIyMCwgMHg2MDRiLCAweDAwMDAsIDB4MDgwYywgMHgxY2I5LCAweDExMTgsIDB4NjE0NCwgMHgwODBjLAotCTB4OTQ0YywgMHgwMDllLCAweDAwMDUsIDB4OTE4MiwgMHgwMDU3LCAweDEyMjAsIDB4OTE4MiwgMHgwMDQwLAotCTB4MDIwOCwgMHgwMDBhLCAweDAwMDUsIDB4YzIxMiwgMHhjMjEyLCAweGMyMTIsIDB4YzIxMiwgMHhjMjEyLAotCTB4YzIxMiwgMHhjMjEyLCAweGMyMTIsIDB4YzIxMiwgMHhjMjEyLCAweGMyMTQsIDB4YzIxMiwgMHhjMjEyLAotCTB4YzIxMiwgMHhjMjEyLCAweGMyMjUsIDB4YzIxMiwgMHhjMjEyLCAweGMyMTIsIDB4YzIxMiwgMHhjMjQ5LAotCTB4YzIxMiwgMHhjMjEyLCAweDA4MGMsIDB4MGQ3OSwgMHg2MDA0LCAweDkwODYsIDB4MDA0MCwgMHgxMTEwLAotCTB4MDgwYywgMHg5N2Y2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGEzOTEsIDB4NjAwMywgMHgwMDAyLAotCTB4MDgwYywgMHhkMzdhLCAweDA4MGMsIDB4OTg1MSwgMHgwMDA1LCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLAotCTB4MTExMCwgMHgwODBjLCAweDk3ZjYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4YTM5MSwgMHgwODBjLAotCTB4OTg1MSwgMHgwODBjLCAweDMyZmIsIDB4MDgwYywgMHhkMzcyLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LAotCTB4MDgwYywgMHhjYzMzLCAweDAxNTAsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsIDB4MDAyOSwgMHhhODc3LAotCTB4MDAwMCwgMHgwODBjLCAweDZmMTEsIDB4MDgwYywgMHhjZTI0LCAweDAwOWUsIDB4MDgwYywgMHhhZjRlLAotCTB4MDAwNSwgMHgwODBjLCAweDBkNzksIDB4YTg3YiwgMHgwMDE1LCAweGQxZmMsIDB4MDE4MCwgMHhhODdiLAotCTB4MDAwNywgMHg4MDAyLCAweDgwMDAsIDB4ODEwYSwgMHg5MTg5LCAweDAwMDAsIDB4MDAwNiwgMHgwMDE2LAotCTB4MjAwOSwgMHgxYTdkLCAweDIxMDQsIDB4ODAwMCwgMHgyMDBhLCAweDAwMWUsIDB4MDAwZSwgMHhhOTkyLAotCTB4YTg4ZSwgMHgwMDA1LCAweDkxODIsIDB4MDA1NywgMHgxMjIwLCAweDkxODIsIDB4MDA0MCwgMHgwMjA4LAotCTB4MDAwYSwgMHgwMDA1LCAweGMyODEsIDB4YzI4MSwgMHhjMjgxLCAweGMyODEsIDB4YzI4MSwgMHhjMjgzLAotCTB4YzI4MSwgMHhjMjgxLCAweGMzNDAsIDB4YzI4MSwgMHhjMjgxLCAweGMyODEsIDB4YzI4MSwgMHhjMjgxLAotCTB4YzI4MSwgMHhjMjgxLCAweGMyODEsIDB4YzI4MSwgMHhjMjgxLCAweGM0ODAsIDB4YzI4MSwgMHhjNDhhLAotCTB4YzI4MSwgMHgwODBjLCAweDBkNzksIDB4NjAxYywgMHhkMGJjLCAweDAxNzgsIDB4ZDA4NCwgMHgwMTY4LAotCTB4ZDBmNCwgMHgwMTIwLCAweGMwODQsIDB4NjAxZSwgMHgwODA0LCAweGMwNzAsIDB4NjExNCwgMHgwMDk2LAotCTB4MjE0OCwgMHhhODdjLCAweGMwZTUsIDB4YTg3ZSwgMHgwMDllLCAweDAwNzYsIDB4MDBhNiwgMHgwMGU2LAotCTB4MDA5NiwgMHgyMDcxLCAweDAyNjAsIDB4NjExNCwgMHgyMTUwLCAweDYwMWMsIDB4ZDBmYywgMHgxMTEwLAotCTB4NzY0NCwgMHgwMDA4LCAweDkwMzYsIDB4YjY3NiwgMHg5NmI0LCAweDBmZmYsIDB4Yjc3YywgMHhjN2U1LAotCTB4Yjc3ZSwgMHg2MjEwLCAweDAwYjYsIDB4MjI1OCwgMHhiYTNjLCAweDgyZmYsIDB4MDExMCwgMHg4MjExLAotCTB4YmEzZSwgMHgwMGJlLCAweDg2ZmYsIDB4MDkwNCwgMHhjMzM5LCAweDk2OTQsIDB4ZmYwMCwgMHg5Mjg0LAotCTB4MGMwMCwgMHgwMTIwLCAweDcwNDgsIDB4YjA5MiwgMHg3MDRjLCAweGIwOGUsIDB4OTI4NCwgMHgwMzAwLAotCTB4MDkwNCwgMHhjMzM5LCAweDk2ODYsIDB4MDEwMCwgMHgxMTMwLCAweDcwNjQsIDB4OTAwNSwgMHgxMTE4LAotCTB4YzZjNCwgMHhiNjc2LCAweDBjMzgsIDB4MDgwYywgMHgxMDRkLCAweDA5MGMsIDB4MGQ3OSwgMHgyOTAwLAotCTB4YjA3YSwgMHhiNzdjLCAweDk3YmQsIDB4MDIwMCwgMHhiNzdlLCAweGE4NjcsIDB4MDEwMywgMHhiMDY4LAotCTB4YTg2YSwgMHhiMDZjLCAweGE4NmUsIDB4YjA3MCwgMHhhODcyLCAweDcwNDQsIDB4OTA4NCwgMHhmMDAwLAotCTB4OTYzNSwgMHhhZTc2LCAweDk2OGMsIDB4MGMwMCwgMHgwMTIwLCAweDczNDgsIDB4YWI5MiwgMHg3MzRjLAotCTB4YWI4ZSwgMHg5NjhjLCAweDAwZmYsIDB4OTE4NiwgMHgwMDAyLCAweDAxODAsIDB4OTE4NiwgMHgwMDI4LAotCTB4MTExOCwgMHhhODdiLCAweDAwMWMsIDB4MDA2MCwgMHhkNmRjLCAweDAxMTgsIDB4YTg3YiwgMHgwMDE1LAotCTB4MDAzOCwgMHhkNmQ0LCAweDAxMTgsIDB4YTg3YiwgMHgwMDA3LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLAotCTB4YWY3ZSwgMHhiMDgwLCAweGE4ODIsIDB4YjA4NCwgMHhhODg2LCAweDkwMWUsIDB4ZDZjNCwgMHgwMTkwLAotCTB4NzM1YywgMHhhYjg2LCAweDgzZmYsIDB4MDE3MCwgMHg5MzhhLCAweDAwMDksIDB4MDIxMCwgMHgyMDE5LAotCTB4MDAwOCwgMHgwMDM2LCAweDIzMDgsIDB4MjAxOSwgMHgwMDE4LCAweDIwMTEsIDB4MDAyNSwgMHgwODBjLAotCTB4YzdhZCwgMHgwMDNlLCAweGQ2Y2MsIDB4MDFlOCwgMHg3MTU0LCAweGE5OGEsIDB4ODFmZiwgMHgwMWM4LAotCTB4OTE5MiwgMHgwMDIxLCAweDEyNjAsIDB4ODMwNCwgMHg5MDk4LCAweDAwMTgsIDB4MjAxMSwgMHgwMDI5LAotCTB4MDgwYywgMHhjN2FkLCAweDIwMTEsIDB4MDIwNSwgMHgyMDEzLCAweDAwMDAsIDB4MDA1MCwgMHhiMDY4LAotCTB4ZDBmYywgMHgwMTIwLCAweDIwMDksIDB4MDAyMCwgMHhhOThhLCAweDBjNjgsIDB4Mjk1MCwgMHgwODBjLAotCTB4Yzc0YywgMHgwODBjLCAweDFhYmMsIDB4MDA5ZSwgMHgwMGVlLCAweDAwYWUsIDB4MDA3ZSwgMHgwMDA1LAotCTB4MjAwMSwgMHgxOTg5LCAweDIwMDQsIDB4NjA0YSwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHhhODNjLAotCTB4YTk0MCwgMHg5MTA1LCAweDExMTgsIDB4YTg3YywgMHhjMGRjLCAweGE4N2UsIDB4NjAwMywgMHgwMDAyLAotCTB4MDgwYywgMHhkMzgzLCAweDA5MDQsIDB4YzQ3YiwgMHg2MDRiLCAweDAwMDAsIDB4NjAxMCwgMHgwMGI2LAotCTB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgxNTAwLCAweGQxY2MsIDB4MDkwNCwgMHhjNDNmLAotCTB4YTk3OCwgMHhhODY4LCAweGQwZmMsIDB4MDkwNCwgMHhjNDAwLCAweDAwMTYsIDB4YTg3YywgMHgwMDA2LAotCTB4YTg4MCwgMHgwMDA2LCAweDAwYTYsIDB4MjE1MCwgMHhiMTc0LCAweDkxODQsIDB4MDBmZiwgMHg5MGI2LAotCTB4MDAwMiwgMHgwOTA0LCAweGMzY2QsIDB4OTA4NiwgMHgwMDI4LCAweDE5MDQsIDB4YzNiOSwgMHhhODdiLAotCTB4MDAxYywgMHhiMDdiLCAweDAwMWMsIDB4MDgwNCwgMHhjM2Q1LCAweDYwMjQsIDB4ZDBmNCwgMHgxMWQwLAotCTB4YTgzOCwgMHhhYTM0LCAweDkyMDUsIDB4MDljOCwgMHhhODM4LCAweGFhOTAsIDB4OTIwNiwgMHgxMTIwLAotCTB4YTg4YywgMHhhYTM0LCAweDkyMDYsIDB4MDk4OCwgMHg2MDI0LCAweGQwZDQsIDB4MTE0OCwgMHhhOWFjLAotCTB4YTgzNCwgMHg5MTAyLCAweDYwM2EsIDB4YTliMCwgMHhhODM4LCAweDkxMDMsIDB4NjAzZSwgMHg2MDI0LAotCTB4YzBmNSwgMHg2MDI2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4M2MsIDB4ODAwMCwgMHhiODNlLAotCTB4MDBiZSwgMHg2MDFjLCAweGMwZmMsIDB4NjAxZSwgMHg5MDA2LCAweGE4NzYsIDB4YTg5MiwgMHhhODhlLAotCTB4YTg3YywgMHhjMGU0LCAweGE4N2UsIDB4ZDBjYywgMHgwMTQwLCAweGMwY2MsIDB4YTg3ZSwgMHgwMDk2LAotCTB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsIDB4MGZmZiwgMHgwMDllLCAweDA4MGMsIDB4Y2Y3ZiwgMHgwODA0LAotCTB4YzQ3YiwgMHhkMWRjLCAweDAxNTgsIDB4YTg3YiwgMHgwMDE1LCAweGIwN2IsIDB4MDAxNSwgMHgwODBjLAotCTB4ZDIyMCwgMHgwMTE4LCAweGIxNzQsIDB4YzFkYywgMHhiMTc2LCAweDAwNzgsIDB4ZDFkNCwgMHgwMTI4LAotCTB4YTg3YiwgMHgwMDA3LCAweGIwN2IsIDB4MDAwNywgMHgwMDQwLCAweGE4N2MsIDB4ZDBhYywgMHgwMTI4LAotCTB4YTgzNCwgMHhhOTM4LCAweDkxMTUsIDB4MTkwYywgMHhjMjRiLCAweGE4N2MsIDB4YjA3ZSwgMHhhODkwLAotCTB4YjA5MiwgMHhhODhjLCAweGIwOGUsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LAotCTB4MjBhMCwgMHgyMGE5LCAweDAwMjAsIDB4OGEwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTA5NCwgMHgwMDNmLAotCTB4MjJlMCwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDE5LCAweDIwOTgsIDB4NDAwMywgMHgwMGFlLAotCTB4MDAwZSwgMHhhODgyLCAweDAwMGUsIDB4YzBjYywgMHhhODdlLCAweDA4MGMsIDB4ZDMwMCwgMHgwMDFlLAotCTB4YTg3NCwgMHgwMDA2LCAweDIxNDgsIDB4MDgwYywgMHgwZmZmLCAweDAwMWUsIDB4MDgwNCwgMHhjNDZjLAotCTB4MDAxNiwgMHgwMGE2LCAweDIxNTAsIDB4YjE3NCwgMHg5MTg0LCAweDAwZmYsIDB4OTBiNiwgMHgwMDAyLAotCTB4MDFlMCwgMHg5MDg2LCAweDAwMjgsIDB4MTEyOCwgMHhhODdiLCAweDAwMWMsIDB4YjA3YiwgMHgwMDFjLAotCTB4MDBlMCwgMHhkMWRjLCAweDAxNTgsIDB4YTg3YiwgMHgwMDE1LCAweGIwN2IsIDB4MDAxNSwgMHgwODBjLAotCTB4ZDIyMCwgMHgwMTE4LCAweGIxNzQsIDB4YzFkYywgMHhiMTc2LCAweDAwNzgsIDB4ZDFkNCwgMHgwMTI4LAotCTB4YTg3YiwgMHgwMDA3LCAweGIwN2IsIDB4MDAwNywgMHgwMDQwLCAweGE4N2MsIDB4ZDBhYywgMHgwMTI4LAotCTB4YTgzNCwgMHhhOTM4LCAweDkxMTUsIDB4MTkwYywgMHhjMjRiLCAweGE4OTAsIDB4YjA5MiwgMHhhODhjLAotCTB4YjA4ZSwgMHhhODdjLCAweGIwN2UsIDB4MDBhZSwgMHgwODBjLCAweDBmZmYsIDB4MDA5ZSwgMHgwODBjLAotCTB4ZDMwMCwgMHhhOTc0LCAweDAwMTYsIDB4MDgwYywgMHhjNzlkLCAweDAwMWUsIDB4MDQ2OCwgMHhhODY3LAotCTB4MDEwMywgMHhhOTc0LCAweDkxODQsIDB4MDBmZiwgMHg5MGI2LCAweDAwMDIsIDB4MDFiMCwgMHg5MDg2LAotCTB4MDAyOCwgMHgxMTE4LCAweGE4N2IsIDB4MDAxYywgMHgwMGQwLCAweGQxZGMsIDB4MDE0OCwgMHhhODdiLAotCTB4MDAxNSwgMHgwODBjLCAweGQyMjAsIDB4MDExOCwgMHhhOTc0LCAweGMxZGMsIDB4YTk3NiwgMHgwMDc4LAotCTB4ZDFkNCwgMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDUwLCAweGE4N2IsIDB4MDAwMCwgMHhhODdjLAotCTB4ZDBhYywgMHgwMTI4LCAweGE4MzQsIDB4YTkzOCwgMHg5MTE1LCAweDE5MGMsIDB4YzI0YiwgMHhhOTc0LAotCTB4MDAxNiwgMHgwODBjLCAweDZkMjYsIDB4MDAxZSwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiYTNjLAotCTB4YjhkMCwgMHgwMDE2LCAweDkwMDUsIDB4MTkwYywgMHg2OGFlLCAweDAwMWUsIDB4MDBiZSwgMHhkMWU0LAotCTB4MTEyMCwgMHgwODBjLCAweGFmNGUsIDB4MDA5ZSwgMHgwMDA1LCAweDA4MGMsIDB4Y2Y0MiwgMHgwY2Q4LAotCTB4NjExNCwgMHgwMDk2LCAweDIxNDgsIDB4YTk3YywgMHgwODBjLCAweGQzODMsIDB4MTkwYywgMHgxYWRjLAotCTB4MDA5ZSwgMHgwMDA1LCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweGE4M2MsIDB4YTk0MCwgMHg5MTA1LAotCTB4MDFlOCwgMHhhODc3LCAweDAwMDAsIDB4YTg3YiwgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHgwMGI2LAotCTB4NjAxMCwgMHgyMDU4LCAweGE4MzQsIDB4YTkzOCwgMHg5MTE1LCAweDExYTAsIDB4MDgwYywgMHg2ZDI2LAotCTB4YmEzYywgMHg4MjExLCAweDAyMDgsIDB4YmEzZSwgMHhiOGQwLCAweDkwMDUsIDB4MDExMCwgMHgwODBjLAotCTB4NjhhZSwgMHgwODBjLCAweGFmNGUsIDB4MDBiZSwgMHgwMDllLCAweDAwMDUsIDB4YTg3YywgMHhjMGRjLAotCTB4YTg3ZSwgMHgwOGY4LCAweGI4MDAsIDB4ZDBiYywgMHgxMTIwLCAweGE4MzQsIDB4MDgwYywgMHhjMjRiLAotCTB4MGMyOCwgMHhhODgwLCAweGQwYmMsIDB4MWRjOCwgMHgwODBjLCAweGNmN2YsIDB4MGM2MCwgMHgwODBjLAotCTB4OTdmNiwgMHgwMDEwLCAweDA4MGMsIDB4OTg1MSwgMHg2MDFjLCAweGQwODQsIDB4MDExMCwgMHgwODBjLAotCTB4MWFmMCwgMHgwODBjLCAweGNjMzMsIDB4MDFmMCwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLAotCTB4Y2U0YSwgMHgxMTE4LCAweDA4MGMsIDB4YjkzYywgMHgwMGEwLCAweGE4NjcsIDB4MDEwMywgMHgyMDA5LAotCTB4MTgwYywgMHgyMTBjLCAweGQxOGMsIDB4MTE5OCwgMHhkMTg0LCAweDExNzAsIDB4NjEwOCwgMHhhOTdhLAotCTB4OTE4ZSwgMHgwMDI5LCAweDExMTAsIDB4MDgwYywgMHhlYWVlLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLAotCTB4NmYxMSwgMHgwMDllLCAweDA4MDQsIDB4YWY4OSwgMHhhODdiLCAweDAwMDQsIDB4MGNiMCwgMHhhODdiLAotCTB4MDAwNCwgMHgwYzk4LCAweDkxODIsIDB4MDA1NywgMHgxMjIwLCAweDkxODIsIDB4MDA0MCwgMHgwMjA4LAotCTB4MDAwYSwgMHgwMDA1LCAweGM1MTEsIDB4YzUxMSwgMHhjNTExLCAweGM1MTEsIDB4YzUxMSwgMHhjNTEzLAotCTB4YzUxMSwgMHhjNTExLCAweGM1MTEsIDB4YzUxMSwgMHhjNTExLCAweGM1MTEsIDB4YzUxMSwgMHhjNTExLAotCTB4YzUxMSwgMHhjNTExLCAweGM1MTEsIDB4YzUxMSwgMHhjNTExLCAweGM1MTEsIDB4YzUzNywgMHhjNTExLAotCTB4YzUxMSwgMHgwODBjLCAweDBkNzksIDB4MDgwYywgMHg1ODI4LCAweDAxZjgsIDB4NjAxNCwgMHg3MTQ0LAotCTB4OTE4YywgMHgwZmZmLCAweDkwMTYsIDB4ZDFjNCwgMHgwMTE4LCAweDcyNjQsIDB4OTI5NCwgMHgwMGZmLAotCTB4MDA5NiwgMHg5MDRkLCAweDAxODgsIDB4YTg3YiwgMHgwMDAwLCAweGE4NjQsIDB4OTA4NiwgMHgwMTM5LAotCTB4MDEyOCwgMHhhODY3LCAweDAxMDMsIDB4YTk3NiwgMHhhYTk2LCAweDAwMzAsIDB4YTg5NywgMHg0MDAwLAotCTB4YTk5YSwgMHhhYTllLCAweDA4MGMsIDB4NmYxMSwgMHgwMDllLCAweDA4MDQsIDB4YWY0ZSwgMHgwODBjLAotCTB4NTgyOCwgMHgwZGQ4LCAweDYwMTQsIDB4OTAwZSwgMHg5MDE2LCAweDBjMTAsIDB4OTE4MiwgMHgwMDg1LAotCTB4MDAwMiwgMHhjNTUwLCAweGM1NGUsIDB4YzU0ZSwgMHhjNTVjLCAweGM1NGUsIDB4YzU0ZSwgMHhjNTRlLAotCTB4YzU0ZSwgMHhjNTRlLCAweGM1NGUsIDB4YzU0ZSwgMHhjNTRlLCAweGM1NGUsIDB4MDgwYywgMHgwZDc5LAotCTB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHg4MDIwLAotCTB4MDgwYywgMHg5NDIwLCAweDAxMmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwNTYsIDB4MDBkNiwgMHgwMGU2LAotCTB4MjA3MSwgMHgwMjYwLCAweDcyMjQsIDB4NjIxNiwgMHg3MjIwLCAweDA4MGMsIDB4Y2MyMSwgMHgwMWY4LAotCTB4MjI2OCwgMHg2ODAwLCAweDkwODYsIDB4MDAwMCwgMHgwMWQwLCAweDYwMTAsIDB4NmQxMCwgMHg5NTJlLAotCTB4MTFiMCwgMHgwMGM2LCAweDJkNjAsIDB4MDBkNiwgMHgwODBjLCAweGM4MGUsIDB4MDBkZSwgMHgwMGNlLAotCTB4MDE1OCwgMHg3MDJjLCAweGQwODQsIDB4MTExOCwgMHgwODBjLCAweGM3ZDgsIDB4MDAxMCwgMHg2ODAzLAotCTB4MDAwMiwgMHg2MDA3LCAweDAwODYsIDB4MDAyOCwgMHgwODBjLCAweGM3ZmEsIDB4MGQ5MCwgMHg2MDA3LAotCTB4MDA4NywgMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTQyMCwgMHg3MjIwLAotCTB4MDgwYywgMHhjYzIxLCAweDAxNzgsIDB4NjgxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLAotCTB4ZDBiYywgMHgwMTQwLCAweDY4MjQsIDB4ZDBlYywgMHgwMTI4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLAotCTB4Y2Y3ZiwgMHgwMGNlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDVlLCAweDAwMmUsIDB4MDAwNSwgMHg5MTg2LAotCTB4MDAxMywgMHgxMTYwLCAweDYwMDQsIDB4OTA4YSwgMHgwMDg1LCAweDBhMGMsIDB4MGQ3OSwgMHg5MDhhLAotCTB4MDA5MiwgMHgxYTBjLCAweDBkNzksIDB4OTA4MiwgMHgwMDg1LCAweDAwZTIsIDB4OTE4NiwgMHgwMDI3LAotCTB4MDEyMCwgMHg5MTg2LCAweDAwMTQsIDB4MTkwYywgMHgwZDc5LCAweDA4MGMsIDB4OTdmNiwgMHgwMDk2LAotCTB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2MzMywgMHgwMTQwLCAweGE4NjcsIDB4MDEwMywgMHhhODc3LAotCTB4MDAwMCwgMHhhODdiLCAweDAwMjksIDB4MDgwYywgMHg2ZjExLCAweDAwOWUsIDB4MDgwYywgMHhhZjg5LAotCTB4MDgwNCwgMHg5OGJjLCAweGM1ZGYsIDB4YzVlMSwgMHhjNWUxLCAweGM1ZGYsIDB4YzVkZiwgMHhjNWRmLAotCTB4YzVkZiwgMHhjNWRmLCAweGM1ZGYsIDB4YzVkZiwgMHhjNWRmLCAweGM1ZGYsIDB4YzVkZiwgMHgwODBjLAotCTB4MGQ3OSwgMHgwODBjLCAweGFmODksIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsIDB4MTEzMCwgMHg2MDA0LAotCTB4OTA4MiwgMHgwMDg1LCAweDIwMDgsIDB4MDgwNCwgMHhjNjMwLCAweDkxODYsIDB4MDAyNywgMHgxNTU4LAotCTB4MDgwYywgMHg5N2Y2LCAweDA4MGMsIDB4MzJmYiwgMHgwODBjLCAweGQzNzIsIDB4MDA5NiwgMHg2MDE0LAotCTB4MjA0OCwgMHgwODBjLCAweGNjMzMsIDB4MDE1MCwgMHhhODY3LCAweDAxMDMsIDB4YTg3NywgMHgwMDAwLAotCTB4YTg3YiwgMHgwMDI5LCAweDA4MGMsIDB4NmYxMSwgMHgwODBjLCAweGNlMjQsIDB4MDA5ZSwgMHgwODBjLAotCTB4YWY0ZSwgMHgwMDA1LCAweDkxODYsIDB4MDA4OSwgMHgwMTE4LCAweDkxODYsIDB4MDA4YSwgMHgxMTQwLAotCTB4MDgwYywgMHhhZDRkLCAweDAxMjgsIDB4OTA4NiwgMHgwMDBjLCAweDA5MDQsIDB4YzY2OCwgMHgwMDAwLAotCTB4MDgwYywgMHhiMDA5LCAweDBjNzAsIDB4OTE4NiwgMHgwMDE0LCAweDFkNjAsIDB4MDgwYywgMHg5N2Y2LAotCTB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLCAweDBkMDAsIDB4YTg2NywgMHgwMTAzLAotCTB4YTg3NywgMHgwMDAwLCAweGE4N2IsIDB4MDAwNiwgMHhhODgwLCAweGMwZWMsIDB4YTg4MiwgMHgwODkwLAotCTB4MDAwMiwgMHhjNjQwLCAweGM2M2UsIDB4YzYzZSwgMHhjNjNlLCAweGM2M2UsIDB4YzYzZSwgMHhjNjU0LAotCTB4YzYzZSwgMHhjNjNlLCAweGM2M2UsIDB4YzYzZSwgMHhjNjNlLCAweGM2M2UsIDB4MDgwYywgMHgwZDc5LAotCTB4NjAzNCwgMHg5MDhjLCAweGZmMDAsIDB4ODEwZiwgMHg5MTg2LCAweDAwMzksIDB4MDExOCwgMHg5MTg2LAotCTB4MDAzNSwgMHgxMTE4LCAweDIwMDEsIDB4MTk4NywgMHgwMDEwLCAweDIwMDEsIDB4MTk4OCwgMHgyMDA0LAotCTB4NjAxYSwgMHg2MDAzLCAweDAwMGMsIDB4MDAwNSwgMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4OTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDM1LCAweDExMTgsIDB4MjAwMSwgMHgxOTg3LAotCTB4MDAxMCwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2MDFhLCAweDYwMDMsIDB4MDAwZSwgMHgwMDA1LAotCTB4OTE4MiwgMHgwMDkyLCAweDEyMjAsIDB4OTE4MiwgMHgwMDg1LCAweDAyMDgsIDB4MDAxMiwgMHgwODA0LAotCTB4YjAwOSwgMHhjNjdlLCAweGM2N2UsIDB4YzY3ZSwgMHhjNjdlLCAweGM2ODAsIDB4YzZjZCwgMHhjNjdlLAotCTB4YzY3ZSwgMHhjNjdlLCAweGM2N2UsIDB4YzY3ZSwgMHhjNjdlLCAweGM2N2UsIDB4MDgwYywgMHgwZDc5LAotCTB4MDA5NiwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwMTY4LAotCTB4NjAzNCwgMHg5MDhjLCAweGZmMDAsIDB4ODEwZiwgMHg5MTg2LCAweDAwMzksIDB4MDExOCwgMHg5MTg2LAotCTB4MDAzNSwgMHgxMTE4LCAweDAwOWUsIDB4MDgwNCwgMHhjNmUxLCAweDA4MGMsIDB4Y2MzMywgMHgxMTE4LAotCTB4MDgwYywgMHhjZTI0LCAweDAwNjgsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4ZDM4OSwgMHgxMTEwLAotCTB4MDgwYywgMHhjZTI0LCAweGE4NjcsIDB4MDEwMywgMHgwODBjLCAweGQzM2QsIDB4MDgwYywgMHg2ZjExLAotCTB4MDBkNiwgMHgyYzY4LCAweDA4MGMsIDB4YWVmOCwgMHgwMWQwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LAotCTB4MDAxZSwgMHg2MDBiLCAweGZmZmYsIDB4MjAwOSwgMHgwMjZlLCAweDIxMGMsIDB4NjEzYSwgMHgyMDA5LAotCTB4MDI2ZiwgMHgyMTBjLCAweDYxM2UsIDB4NjkxMCwgMHg2MTEyLCAweDA4MGMsIDB4ZDBjZSwgMHg2OTVjLAotCTB4NjE1ZSwgMHg2MDIzLCAweDAwMDEsIDB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTQyMCwgMHgyZDYwLAotCTB4MDBkZSwgMHgwODBjLCAweGFmNGUsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LAotCTB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MDVhMCwgMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4OTE4NiwgMHgwMDM1LCAweDAxMzAsIDB4OTE4NiwgMHgwMDFlLCAweDAxMTgsIDB4OTE4NiwgMHgwMDM5LAotCTB4MTUzOCwgMHgwMGQ2LCAweDJjNjgsIDB4MDgwYywgMHhkMmQzLCAweDExZjAsIDB4MDgwYywgMHhhZWY4LAotCTB4MDFkOCwgMHg2MTA2LCAweDYwMDMsIDB4MDAwMSwgMHg2MDIzLCAweDAwMDEsIDB4NjkxMCwgMHg2MTEyLAotCTB4NjkyYywgMHg2MTJlLCAweDY5MzAsIDB4NjEzMiwgMHg2OTM0LCAweDkxOGMsIDB4MDBmZiwgMHg2MTM2LAotCTB4NjkzOCwgMHg2MTNhLCAweDY5M2MsIDB4NjEzZSwgMHg2OTVjLCAweDYxNWUsIDB4MDgwYywgMHhkMGNlLAotCTB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTQyMCwgMHgyZDYwLCAweDAwZGUsIDB4MDgwNCwgMHhhZjRlLAotCTB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLCAweDAxYzgsIDB4YTg2NywgMHgwMTAzLAotCTB4YTg4MCwgMHhkMGI0LCAweDAxMjgsIDB4YzBlYywgMHhhODgyLCAweGE4N2IsIDB4MDAwNiwgMHgwMDQ4LAotCTB4ZDBiYywgMHgwMTE4LCAweGE4N2IsIDB4MDAwMiwgMHgwMDIwLCAweGE4N2IsIDB4MDAwNSwgMHgwODBjLAotCTB4Y2YzZSwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2ZjExLCAweDA4MGMsIDB4Y2UyNCwgMHgwMDllLAotCTB4MDgwNCwgMHhhZjRlLCAweDAwMTYsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLAotCTB4MDE0MCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDI4LCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLAotCTB4NmYxMSwgMHgwMDllLCAweDAwMWUsIDB4OTE4NiwgMHgwMDEzLCAweDAxNTgsIDB4OTE4NiwgMHgwMDE0LAotCTB4MDEzMCwgMHg5MTg2LCAweDAwMjcsIDB4MDExOCwgMHgwODBjLCAweGIwMDksIDB4MDAyMCwgMHgwODBjLAotCTB4OTdmNiwgMHgwODBjLCAweGFmODksIDB4MDAwNSwgMHgwMDU2LCAweDAwNjYsIDB4MDA5NiwgMHgwMGE2LAotCTB4MjAyOSwgMHgwMDAxLCAweDkxODIsIDB4MDEwMSwgMHgxMjA4LCAweDAwMTAsIDB4MjAwOSwgMHgwMTAwLAotCTB4MjEzMCwgMHg4MzA0LCAweDkwOTgsIDB4MDAxOCwgMHgyMDA5LCAweDAwMjAsIDB4MjAxMSwgMHgwMDI5LAotCTB4MDgwYywgMHhjN2FkLCAweDk2YjIsIDB4MDAyMCwgMHhiMDA0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLAotCTB4MGZmZiwgMHgwODBjLCAweDEwNGQsIDB4MDUyMCwgMHg4NTI4LCAweGE4NjcsIDB4MDExMCwgMHhhODZiLAotCTB4MDAwMCwgMHgyOTIwLCAweGI0MDYsIDB4OTY4YSwgMHgwMDNkLCAweDEyMjgsIDB4MjYwOCwgMHgyMDExLAotCTB4MDAxYiwgMHgwNDk5LCAweDAwYTgsIDB4OTZiMiwgMHgwMDNjLCAweDIwMDksIDB4MDAzYywgMHgyOTUwLAotCTB4MjAxMSwgMHgwMDFiLCAweDA0NTEsIDB4MGMyOCwgMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAwLAotCTB4MDBhZSwgMHg4NTJmLCAweDk1YWQsIDB4MDAwMywgMHhiNTY2LCAweDk1YWMsIDB4MDAwMCwgMHgwMDQ4LAotCTB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHgwMGFlLCAweDg1MmYsIDB4OTVhZCwgMHgwMDAzLAotCTB4YjU2NiwgMHgwMDllLCAweDAwNmUsIDB4MDA1ZSwgMHgwMDA1LCAweDAwYTYsIDB4ODlmZiwgMHgwMTU4LAotCTB4YTgwNCwgMHg5MDU1LCAweDAxMzAsIDB4YTgwNywgMHgwMDAwLCAweDA4MGMsIDB4NmYxMSwgMHgyYTQ4LAotCTB4MGNiOCwgMHgwODBjLCAweDZmMTEsIDB4MDBhZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLAotCTB4NzgxNCwgMHg5MDg1LCAweDAwODAsIDB4NzgxNiwgMHhkMTg0LCAweDAxMDgsIDB4ODEwOCwgMHg4MTBjLAotCTB4MjBhOSwgMHgwMDAxLCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkyMDAsIDB4MjBhMCwgMHgyMGUxLAotCTB4MDAwMCwgMHgyMzAwLCAweDllMDAsIDB4MjA5OCwgMHg0MDAzLCAweDgzMTgsIDB4OTM4NiwgMHgwMDIwLAotCTB4MTE0OCwgMHgyMDE4LCAweDIzMDAsIDB4OWUwMCwgMHgyMDk4LCAweDc4MTQsIDB4ODAwMCwgMHg5MDg1LAotCTB4MDA4MCwgMHg3ODE2LCAweDgxMDksIDB4MWQ4MCwgMHg3ODE3LCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LAotCTB4NjkyMCwgMHg5MTg2LCAweDAwMDMsIDB4MDExOCwgMHg5MTg2LCAweDAwMDIsIDB4MTFkMCwgMHgwMGM2LAotCTB4MDBkNiwgMHgwMGU2LCAweDJkNjAsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLAotCTB4MDE1MCwgMHgyMDAxLCAweDAwMDYsIDB4YTk4MCwgMHhjMWQ1LCAweDA4MGMsIDB4NzE1ZCwgMHgwODBjLAotCTB4NmYwNSwgMHgwODBjLCAweGNlMjQsIDB4MDA5ZSwgMHgwODBjLCAweGFmODksIDB4MDBlZSwgMHgwMGRlLAotCTB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4NzAyYywgMHhkMDg0LCAweDExNzAsIDB4NjAwOCwgMHgyMDYwLAotCTB4NjAyMCwgMHg5MDg2LCAweDAwMDIsIDB4MTE0MCwgMHg2MTA0LCAweDkxODYsIDB4MDA4NSwgMHgwMTE4LAotCTB4OTE4NiwgMHgwMDhiLCAweDExMDgsIDB4OTAwNiwgMHgwMGNlLCAweDAwMDUsIDB4MDA2NiwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDIwMzEsIDB4MDAwMSwgMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDgzLAotCTB4MDEyZSwgMHgwMDZlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDA2NiwgMHgyMDMxLAotCTB4MDAwMCwgMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDFiLCAweDAwNmUsIDB4MDEyZSwgMHgwMDA1LAotCTB4Yzg2MCwgMHhjODYwLCAweGM4NWIsIDB4Yzg4NCwgMHhjODM4LCAweGM4NWIsIDB4YzgzYSwgMHhjODViLAotCTB4Yzg1YiwgMHg5MmRmLCAweGM4NWIsIDB4Yzg1YiwgMHhjODViLCAweGM4MzgsIDB4YzgzOCwgMHhjODM4LAotCTB4MDgwYywgMHgwZDc5LCAweDYwMTAsIDB4OTA4MCwgMHgwMDAwLCAweDIwMDQsIDB4ZDBiYywgMHgxOTBjLAotCTB4Yzg4NCwgMHgwMDM2LCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4ODAsIDB4MDA5ZSwgMHhkMGNjLAotCTB4MDExOCwgMHgyMDE5LCAweDAwMGMsIDB4MDAzOCwgMHhkMDk0LCAweDAxMTgsIDB4MjAxOSwgMHgwMDBkLAotCTB4MDAxMCwgMHgyMDE5LCAweDAwMTAsIDB4MDgwYywgMHhlMjhlLCAweDYwMjMsIDB4MDAwNiwgMHg2MDAzLAotCTB4MDAwNywgMHgwMDNlLCAweDAwMDUsIDB4OTAwNiwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LAotCTB4MDA5NiwgMHg4NmZmLCAweDExZTgsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4Y2MzMywgMHgwMWQwLAotCTB4NjA0MywgMHhmZmZmLCAweGE4NjQsIDB4OTA4NiwgMHgwMTM5LCAweDExMjgsIDB4YTg3YiwgMHgwMDA1LAotCTB4YTg4MywgMHgwMDAwLCAweDAwMjgsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDUsIDB4MDgwYywgMHg3MTVkLAotCTB4MDgwYywgMHhjZjNlLCAweDA4MGMsIDB4NmYwNSwgMHgwODBjLCAweGFmODksIDB4OTA4NSwgMHgwMDAxLAotCTB4MDA5ZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNlMCwgMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHhkMzk3LAotCTB4NjAwMCwgMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZDc5LCAweDAwMmIsIDB4MDEwNiwgMHgwODBjLAotCTB4YWIxMywgMHgwMTBlLCAweDAwMDUsIDB4YzhhMywgMHhjOGQzLCAweGM4YTUsIDB4YzhmYSwgMHhjOGNlLAotCTB4YzhhMywgMHhjODViLCAweGM4NjAsIDB4Yzg2MCwgMHhjODViLCAweGM4NWIsIDB4Yzg1YiwgMHhjODViLAotCTB4Yzg1YiwgMHhjODViLCAweGM4NWIsIDB4MDgwYywgMHgwZDc5LCAweDg2ZmYsIDB4MTUyMCwgMHg2MDIwLAotCTB4OTA4NiwgMHgwMDA2LCAweDA1MDAsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLAotCTB4MDE2OCwgMHhhODdjLCAweGQwY2MsIDB4MDE0MCwgMHgwMDk2LCAweGMwY2MsIDB4YTg3ZSwgMHhhODc4LAotCTB4MjA0OCwgMHgwODBjLCAweDBmZmYsIDB4MDA5ZSwgMHgwODBjLCAweGNmM2UsIDB4MDA5ZSwgMHgwODBjLAotCTB4ZDMxNywgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHgyMDA5LAotCTB4ODAyMCwgMHgwODBjLCAweDk0MDIsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDA2NiwgMHgwODBjLAotCTB4MWFmMCwgMHgwMDZlLCAweDA4OTAsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZTksIDB4NzAzMCwgMHg5YzA2LAotCTB4MTEyMCwgMHgwODBjLCAweGEzMTEsIDB4MDBlZSwgMHgwODQwLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLAotCTB4OTA4NiwgMHgwMDA2LCAweDExNTAsIDB4MDA4NiwgMHgwMDk2LCAweDIwNDksIDB4MDAwMSwgMHgyYzQwLAotCTB4MDgwYywgMHhhNDYyLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDQwLCAweDAwNjYsIDB4MDgwYywgMHhhMjBkLAotCTB4MTkwYywgMHgwZDc5LCAweDA4MGMsIDB4YTIxYiwgMHgwMDZlLCAweDAwZWUsIDB4MTkwNCwgMHhjOGE1LAotCTB4MDgwNCwgMHhjODViLCAweDAwMzYsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZTksIDB4NzA0YywgMHg5YzA2LAotCTB4MTEzOCwgMHg5MDFlLCAweDA4MGMsIDB4YTM5MSwgMHgwMGVlLCAweDAwM2UsIDB4MDgwNCwgMHhjOGE1LAotCTB4MDgwYywgMHhhNTljLCAweDAwZWUsIDB4MDAzZSwgMHgxOTA0LCAweGM4YTUsIDB4MDgwNCwgMHhjODViLAotCTB4MDBjNiwgMHgwMDY2LCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwMWIsIDB4MDA2ZSwgMHgwMGNlLAotCTB4MDAwNSwgMHhjOTMwLCAweGM5ZmUsIDB4Y2I2OCwgMHhjOTM4LCAweGFmODksIDB4YzkzMCwgMHhlMjgwLAotCTB4ZDM3ZiwgMHhjOWZlLCAweDkyYTYsIDB4Y2JmNCwgMHhjOTI5LCAweGM5MjksIDB4YzkyOSwgMHhjOTI5LAotCTB4YzkyOSwgMHgwODBjLCAweDBkNzksIDB4MDgwYywgMHhjZTRhLCAweDExMTAsIDB4MDgwYywgMHhiOTNjLAotCTB4MDAwNSwgMHgwODBjLCAweDk3ZjYsIDB4MDgwNCwgMHhhZjRlLCAweDYwMWIsIDB4MDAwMSwgMHgwMDA1LAotCTB4MDgwYywgMHhjYzMzLCAweDAxMzAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4MmMwMCwgMHhhODk2LAotCTB4MDA5ZSwgMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHhkMzk3LCAweDYwMDAsIDB4OTA4YSwgMHgwMDEwLAotCTB4MWEwYywgMHgwZDc5LCAweDAwMTMsIDB4MDgwNCwgMHhhYjEzLCAweGM5NWQsIDB4Yzk1ZiwgMHhjOTg5LAotCTB4Yzk5ZCwgMHhjOWNhLCAweGM5NWQsIDB4YzkzMCwgMHhjOTMwLCAweGM5MzAsIDB4YzlhNCwgMHhjOWE0LAotCTB4Yzk1ZCwgMHhjOTVkLCAweGM5NWQsIDB4Yzk1ZCwgMHhjOWFlLCAweDA4MGMsIDB4MGQ3OSwgMHgwMGU2LAorCTB4YzU0ZiwgMHhjNTRmLCAweGM1NGYsIDB4YzU0ZiwgMHhjNTRmLCAweGM1NTEsIDB4YzU0ZiwgMHhjNTRmLAorCTB4YzYwZSwgMHhjNTRmLCAweGM1NGYsIDB4YzU0ZiwgMHhjNTRmLCAweGM1NGYsIDB4YzU0ZiwgMHhjNTRmLAorCTB4YzU0ZiwgMHhjNTRmLCAweGM1NGYsIDB4Yzc0ZSwgMHhjNTRmLCAweGM3NTgsIDB4YzU0ZiwgMHgwODBjLAorCTB4MGQ4NSwgMHg2MDFjLCAweGQwYmMsIDB4MDE3OCwgMHhkMDg0LCAweDAxNjgsIDB4ZDBmNCwgMHgwMTIwLAorCTB4YzA4NCwgMHg2MDFlLCAweDA4MDQsIDB4YzMzZSwgMHg2MTE0LCAweDAwOTYsIDB4MjE0OCwgMHhhODdjLAorCTB4YzBlNSwgMHhhODdlLCAweDAwOWUsIDB4MDA3NiwgMHgwMGE2LCAweDAwZTYsIDB4MDA5NiwgMHgyMDcxLAorCTB4MDI2MCwgMHg2MTE0LCAweDIxNTAsIDB4NjAxYywgMHhkMGZjLCAweDExMTAsIDB4NzY0NCwgMHgwMDA4LAorCTB4OTAzNiwgMHhiNjc2LCAweDk2YjQsIDB4MGZmZiwgMHhiNzdjLCAweGM3ZTUsIDB4Yjc3ZSwgMHg2MjEwLAorCTB4MDBiNiwgMHgyMjU4LCAweGJhM2MsIDB4ODJmZiwgMHgwMTEwLCAweDgyMTEsIDB4YmEzZSwgMHgwMGJlLAorCTB4ODZmZiwgMHgwOTA0LCAweGM2MDcsIDB4OTY5NCwgMHhmZjAwLCAweDkyODQsIDB4MGMwMCwgMHgwMTIwLAorCTB4NzA0OCwgMHhiMDkyLCAweDcwNGMsIDB4YjA4ZSwgMHg5Mjg0LCAweDAzMDAsIDB4MDkwNCwgMHhjNjA3LAorCTB4OTY4NiwgMHgwMTAwLCAweDExMzAsIDB4NzA2NCwgMHg5MDA1LCAweDExMTgsIDB4YzZjNCwgMHhiNjc2LAorCTB4MGMzOCwgMHgwODBjLCAweDEwNTksIDB4MDkwYywgMHgwZDg1LCAweDI5MDAsIDB4YjA3YSwgMHhiNzdjLAorCTB4OTdiZCwgMHgwMjAwLCAweGI3N2UsIDB4YTg2NywgMHgwMTAzLCAweGIwNjgsIDB4YTg2YSwgMHhiMDZjLAorCTB4YTg2ZSwgMHhiMDcwLCAweGE4NzIsIDB4NzA0NCwgMHg5MDg0LCAweGYwMDAsIDB4OTYzNSwgMHhhZTc2LAorCTB4OTY4YywgMHgwYzAwLCAweDAxMjAsIDB4NzM0OCwgMHhhYjkyLCAweDczNGMsIDB4YWI4ZSwgMHg5NjhjLAorCTB4MDBmZiwgMHg5MTg2LCAweDAwMDIsIDB4MDE4MCwgMHg5MTg2LCAweDAwMjgsIDB4MTExOCwgMHhhODdiLAorCTB4MDAxYywgMHgwMDYwLCAweGQ2ZGMsIDB4MDExOCwgMHhhODdiLCAweDAwMTUsIDB4MDAzOCwgMHhkNmQ0LAorCTB4MDExOCwgMHhhODdiLCAweDAwMDcsIDB4MDAxMCwgMHhhODdiLCAweDAwMDAsIDB4YWY3ZSwgMHhiMDgwLAorCTB4YTg4MiwgMHhiMDg0LCAweGE4ODYsIDB4OTAxZSwgMHhkNmM0LCAweDAxOTAsIDB4NzM1YywgMHhhYjg2LAorCTB4ODNmZiwgMHgwMTcwLCAweDkzOGEsIDB4MDAwOSwgMHgwMjEwLCAweDIwMTksIDB4MDAwOCwgMHgwMDM2LAorCTB4MjMwOCwgMHgyMDE5LCAweDAwMTgsIDB4MjAxMSwgMHgwMDI1LCAweDA4MGMsIDB4Y2E3YiwgMHgwMDNlLAorCTB4ZDZjYywgMHgwMWU4LCAweDcxNTQsIDB4YTk4YSwgMHg4MWZmLCAweDAxYzgsIDB4OTE5MiwgMHgwMDIxLAorCTB4MTI2MCwgMHg4MzA0LCAweDkwOTgsIDB4MDAxOCwgMHgyMDExLCAweDAwMjksIDB4MDgwYywgMHhjYTdiLAorCTB4MjAxMSwgMHgwMjA1LCAweDIwMTMsIDB4MDAwMCwgMHgwMDUwLCAweGIwNjgsIDB4ZDBmYywgMHgwMTIwLAorCTB4MjAwOSwgMHgwMDIwLCAweGE5OGEsIDB4MGM2OCwgMHgyOTUwLCAweDA4MGMsIDB4Y2ExYSwgMHgwODBjLAorCTB4MWE5ZiwgMHgwMDllLCAweDAwZWUsIDB4MDBhZSwgMHgwMDdlLCAweDAwMDUsIDB4MjAwMSwgMHgxOTg4LAorCTB4MjAwNCwgMHg2MDRhLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweGE4M2MsIDB4YTk0MCwgMHg5MTA1LAorCTB4MTExOCwgMHhhODdjLCAweGMwZGMsIDB4YTg3ZSwgMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHhkNjZiLAorCTB4MDkwNCwgMHhjNzQ5LCAweDYwNGIsIDB4MDAwMCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLAorCTB4MDBiZSwgMHhkMGJjLCAweDE1MDAsIDB4ZDFjYywgMHgwOTA0LCAweGM3MGQsIDB4YTk3OCwgMHhhODY4LAorCTB4ZDBmYywgMHgwOTA0LCAweGM2Y2UsIDB4MDAxNiwgMHhhODdjLCAweDAwMDYsIDB4YTg4MCwgMHgwMDA2LAorCTB4MDBhNiwgMHgyMTUwLCAweGIxNzQsIDB4OTE4NCwgMHgwMGZmLCAweDkwYjYsIDB4MDAwMiwgMHgwOTA0LAorCTB4YzY5YiwgMHg5MDg2LCAweDAwMjgsIDB4MTkwNCwgMHhjNjg3LCAweGE4N2IsIDB4MDAxYywgMHhiMDdiLAorCTB4MDAxYywgMHgwODA0LCAweGM2YTMsIDB4NjAyNCwgMHhkMGY0LCAweDExZDAsIDB4YTgzOCwgMHhhYTM0LAorCTB4OTIwNSwgMHgwOWM4LCAweGE4MzgsIDB4YWE5MCwgMHg5MjA2LCAweDExMjAsIDB4YTg4YywgMHhhYTM0LAorCTB4OTIwNiwgMHgwOTg4LCAweDYwMjQsIDB4ZDBkNCwgMHgxMTQ4LCAweGE5YWMsIDB4YTgzNCwgMHg5MTAyLAorCTB4NjAzYSwgMHhhOWIwLCAweGE4MzgsIDB4OTEwMywgMHg2MDNlLCAweDYwMjQsIDB4YzBmNSwgMHg2MDI2LAorCTB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgzYywgMHg4MDAwLCAweGI4M2UsIDB4MDBiZSwgMHg2MDFjLAorCTB4YzBmYywgMHg2MDFlLCAweDkwMDYsIDB4YTg3NiwgMHhhODkyLCAweGE4OGUsIDB4YTg3YywgMHhjMGU0LAorCTB4YTg3ZSwgMHhkMGNjLCAweDAxNDAsIDB4YzBjYywgMHhhODdlLCAweDAwOTYsIDB4YTg3OCwgMHgyMDQ4LAorCTB4MDgwYywgMHgxMDBiLCAweDAwOWUsIDB4MDgwYywgMHhkMjY3LCAweDA4MDQsIDB4Yzc0OSwgMHhkMWRjLAorCTB4MDE1OCwgMHhhODdiLCAweDAwMTUsIDB4YjA3YiwgMHgwMDE1LCAweDA4MGMsIDB4ZDUwOCwgMHgwMTE4LAorCTB4YjE3NCwgMHhjMWRjLCAweGIxNzYsIDB4MDA3OCwgMHhkMWQ0LCAweDAxMjgsIDB4YTg3YiwgMHgwMDA3LAorCTB4YjA3YiwgMHgwMDA3LCAweDAwNDAsIDB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LAorCTB4OTExNSwgMHgxOTBjLCAweGM1MTksIDB4YTg3YywgMHhiMDdlLCAweGE4OTAsIDB4YjA5MiwgMHhhODhjLAorCTB4YjA4ZSwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4MjBhMCwgMHgyMGE5LAorCTB4MDAyMCwgMHg4YTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MDk0LCAweDAwM2YsIDB4MjJlMCwgMHg5MDg0LAorCTB4ZmZjMCwgMHg5MDgwLCAweDAwMTksIDB4MjA5OCwgMHg0MDAzLCAweDAwYWUsIDB4MDAwZSwgMHhhODgyLAorCTB4MDAwZSwgMHhjMGNjLCAweGE4N2UsIDB4MDgwYywgMHhkNWU4LCAweDAwMWUsIDB4YTg3NCwgMHgwMDA2LAorCTB4MjE0OCwgMHgwODBjLCAweDEwMGIsIDB4MDAxZSwgMHgwODA0LCAweGM3M2EsIDB4MDAxNiwgMHgwMGE2LAorCTB4MjE1MCwgMHhiMTc0LCAweDkxODQsIDB4MDBmZiwgMHg5MGI2LCAweDAwMDIsIDB4MDFlMCwgMHg5MDg2LAorCTB4MDAyOCwgMHgxMTI4LCAweGE4N2IsIDB4MDAxYywgMHhiMDdiLCAweDAwMWMsIDB4MDBlMCwgMHhkMWRjLAorCTB4MDE1OCwgMHhhODdiLCAweDAwMTUsIDB4YjA3YiwgMHgwMDE1LCAweDA4MGMsIDB4ZDUwOCwgMHgwMTE4LAorCTB4YjE3NCwgMHhjMWRjLCAweGIxNzYsIDB4MDA3OCwgMHhkMWQ0LCAweDAxMjgsIDB4YTg3YiwgMHgwMDA3LAorCTB4YjA3YiwgMHgwMDA3LCAweDAwNDAsIDB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LAorCTB4OTExNSwgMHgxOTBjLCAweGM1MTksIDB4YTg5MCwgMHhiMDkyLCAweGE4OGMsIDB4YjA4ZSwgMHhhODdjLAorCTB4YjA3ZSwgMHgwMGFlLCAweDA4MGMsIDB4MTAwYiwgMHgwMDllLCAweDA4MGMsIDB4ZDVlOCwgMHhhOTc0LAorCTB4MDAxNiwgMHgwODBjLCAweGNhNmIsIDB4MDAxZSwgMHgwNDY4LCAweGE4NjcsIDB4MDEwMywgMHhhOTc0LAorCTB4OTE4NCwgMHgwMGZmLCAweDkwYjYsIDB4MDAwMiwgMHgwMWIwLCAweDkwODYsIDB4MDAyOCwgMHgxMTE4LAorCTB4YTg3YiwgMHgwMDFjLCAweDAwZDAsIDB4ZDFkYywgMHgwMTQ4LCAweGE4N2IsIDB4MDAxNSwgMHgwODBjLAorCTB4ZDUwOCwgMHgwMTE4LCAweGE5NzQsIDB4YzFkYywgMHhhOTc2LCAweDAwNzgsIDB4ZDFkNCwgMHgwMTE4LAorCTB4YTg3YiwgMHgwMDA3LCAweDAwNTAsIDB4YTg3YiwgMHgwMDAwLCAweGE4N2MsIDB4ZDBhYywgMHgwMTI4LAorCTB4YTgzNCwgMHhhOTM4LCAweDkxMTUsIDB4MTkwYywgMHhjNTE5LCAweGE5NzQsIDB4MDAxNiwgMHgwODBjLAorCTB4NmUyNywgMHgwMDFlLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGJhM2MsIDB4YjhkMCwgMHgwMDE2LAorCTB4OTAwNSwgMHgxOTBjLCAweDY4ZGYsIDB4MDAxZSwgMHgwMGJlLCAweGQxZTQsIDB4MTEyMCwgMHgwODBjLAorCTB4YjE2YywgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHhkMjJhLCAweDBjZDgsIDB4NjExNCwgMHgwMDk2LAorCTB4MjE0OCwgMHhhOTdjLCAweDA4MGMsIDB4ZDY2YiwgMHgxOTBjLCAweDFhYmYsIDB4MDA5ZSwgMHgwMDA1LAorCTB4MDA5NiwgMHg2MTE0LCAweDIxNDgsIDB4YTgzYywgMHhhOTQwLCAweDkxMDUsIDB4MDFlOCwgMHhhODc3LAorCTB4MDAwMCwgMHhhODdiLCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweDAwYjYsIDB4NjAxMCwgMHgyMDU4LAorCTB4YTgzNCwgMHhhOTM4LCAweDkxMTUsIDB4MTFhMCwgMHgwODBjLCAweDZlMjcsIDB4YmEzYywgMHg4MjExLAorCTB4MDIwOCwgMHhiYTNlLCAweGI4ZDAsIDB4OTAwNSwgMHgwMTEwLCAweDA4MGMsIDB4NjhkZiwgMHgwODBjLAorCTB4YjE2YywgMHgwMGJlLCAweDAwOWUsIDB4MDAwNSwgMHhhODdjLCAweGMwZGMsIDB4YTg3ZSwgMHgwOGY4LAorCTB4YjgwMCwgMHhkMGJjLCAweDExMjAsIDB4YTgzNCwgMHgwODBjLCAweGM1MTksIDB4MGMyOCwgMHhhODgwLAorCTB4ZDBiYywgMHgxZGM4LCAweDA4MGMsIDB4ZDI2NywgMHgwYzYwLCAweDA4MGMsIDB4OTllZCwgMHgwMDEwLAorCTB4MDgwYywgMHg5YTQ4LCAweDYwMWMsIDB4ZDA4NCwgMHgwMTEwLCAweDA4MGMsIDB4MWFkMywgMHgwODBjLAorCTB4Y2YxYiwgMHgwMWYwLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4ZDEzMiwgMHgxMTE4LAorCTB4MDgwYywgMHhiYjVjLCAweDAwYTAsIDB4YTg2NywgMHgwMTAzLCAweDIwMDksIDB4MTgwYywgMHgyMTBjLAorCTB4ZDE4YywgMHgxMTk4LCAweGQxODQsIDB4MTE3MCwgMHg2MTA4LCAweGE5N2EsIDB4OTE4ZSwgMHgwMDI5LAorCTB4MTExMCwgMHgwODBjLCAweGVkZGYsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NzAxMiwgMHgwMDllLAorCTB4MDgwNCwgMHhiMWE3LCAweGE4N2IsIDB4MDAwNCwgMHgwY2IwLCAweGE4N2IsIDB4MDAwNCwgMHgwYzk4LAorCTB4OTE4MiwgMHgwMDU3LCAweDEyMjAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMDgsIDB4MDAwYSwgMHgwMDA1LAorCTB4YzdkZiwgMHhjN2RmLCAweGM3ZGYsIDB4YzdkZiwgMHhjN2RmLCAweGM3ZTEsIDB4YzdkZiwgMHhjN2RmLAorCTB4YzdkZiwgMHhjN2RmLCAweGM3ZGYsIDB4YzdkZiwgMHhjN2RmLCAweGM3ZGYsIDB4YzdkZiwgMHhjN2RmLAorCTB4YzdkZiwgMHhjN2RmLCAweGM3ZGYsIDB4YzdkZiwgMHhjODA1LCAweGM3ZGYsIDB4YzdkZiwgMHgwODBjLAorCTB4MGQ4NSwgMHgwODBjLCAweDU4NDgsIDB4MDFmOCwgMHg2MDE0LCAweDcxNDQsIDB4OTE4YywgMHgwZmZmLAorCTB4OTAxNiwgMHhkMWM0LCAweDAxMTgsIDB4NzI2NCwgMHg5Mjk0LCAweDAwZmYsIDB4MDA5NiwgMHg5MDRkLAorCTB4MDE4OCwgMHhhODdiLCAweDAwMDAsIDB4YTg2NCwgMHg5MDg2LCAweDAxMzksIDB4MDEyOCwgMHhhODY3LAorCTB4MDEwMywgMHhhOTc2LCAweGFhOTYsIDB4MDAzMCwgMHhhODk3LCAweDQwMDAsIDB4YTk5YSwgMHhhYTllLAorCTB4MDgwYywgMHg3MDEyLCAweDAwOWUsIDB4MDgwNCwgMHhiMTZjLCAweDA4MGMsIDB4NTg0OCwgMHgwZGQ4LAorCTB4NjAxNCwgMHg5MDBlLCAweDkwMTYsIDB4MGMxMCwgMHg5MTgyLCAweDAwODUsIDB4MDAwMiwgMHhjODFlLAorCTB4YzgxYywgMHhjODFjLCAweGM4MmEsIDB4YzgxYywgMHhjODFjLCAweGM4MWMsIDB4YzgxYywgMHhjODFjLAorCTB4YzgxYywgMHhjODFjLCAweGM4MWMsIDB4YzgxYywgMHgwODBjLCAweDBkODUsIDB4NjAwMywgMHgwMDAxLAorCTB4NjEwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NjE3LAorCTB4MDEyZSwgMHgwMDA1LCAweDAwMjYsIDB4MDA1NiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA3MSwgMHgwMjYwLAorCTB4NzIyNCwgMHg2MjE2LCAweDcyMjAsIDB4MDgwYywgMHhjZjA5LCAweDAxZjgsIDB4MjI2OCwgMHg2ODAwLAorCTB4OTA4NiwgMHgwMDAwLCAweDAxZDAsIDB4NjAxMCwgMHg2ZDEwLCAweDk1MmUsIDB4MTFiMCwgMHgwMGM2LAorCTB4MmQ2MCwgMHgwMGQ2LCAweDA4MGMsIDB4Y2FkYywgMHgwMGRlLCAweDAwY2UsIDB4MDE1OCwgMHg3MDJjLAorCTB4ZDA4NCwgMHgxMTE4LCAweDA4MGMsIDB4Y2FhNiwgMHgwMDEwLCAweDY4MDMsIDB4MDAwMiwgMHg2MDA3LAorCTB4MDA4NiwgMHgwMDI4LCAweDA4MGMsIDB4Y2FjOCwgMHgwZDkwLCAweDYwMDcsIDB4MDA4NywgMHg2MDAzLAorCTB4MDAwMSwgMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NjE3LCAweDcyMjAsIDB4MDgwYywgMHhjZjA5LAorCTB4MDE3OCwgMHg2ODEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwMTQwLAorCTB4NjgyNCwgMHhkMGVjLCAweDAxMjgsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4ZDI2NywgMHgwMGNlLAorCTB4MDBlZSwgMHgwMGRlLCAweDAwNWUsIDB4MDAyZSwgMHgwMDA1LCAweDkxODYsIDB4MDAxMywgMHgxMTYwLAorCTB4NjAwNCwgMHg5MDhhLCAweDAwODUsIDB4MGEwYywgMHgwZDg1LCAweDkwOGEsIDB4MDA5MiwgMHgxYTBjLAorCTB4MGQ4NSwgMHg5MDgyLCAweDAwODUsIDB4MDBlMiwgMHg5MTg2LCAweDAwMjcsIDB4MDEyMCwgMHg5MTg2LAorCTB4MDAxNCwgMHgxOTBjLCAweDBkODUsIDB4MDgwYywgMHg5OWVkLCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LAorCTB4MDgwYywgMHhjZjFiLCAweDAxNDAsIDB4YTg2NywgMHgwMTAzLCAweGE4NzcsIDB4MDAwMCwgMHhhODdiLAorCTB4MDAyOSwgMHgwODBjLCAweDcwMTIsIDB4MDA5ZSwgMHgwODBjLCAweGIxYTcsIDB4MDgwNCwgMHg5YWIzLAorCTB4YzhhZCwgMHhjOGFmLCAweGM4YWYsIDB4YzhhZCwgMHhjOGFkLCAweGM4YWQsIDB4YzhhZCwgMHhjOGFkLAorCTB4YzhhZCwgMHhjOGFkLCAweGM4YWQsIDB4YzhhZCwgMHhjOGFkLCAweDA4MGMsIDB4MGQ4NSwgMHgwODBjLAorCTB4YjFhNywgMHgwMDA1LCAweDkxODYsIDB4MDAxMywgMHgxMTMwLCAweDYwMDQsIDB4OTA4MiwgMHgwMDg1LAorCTB4MjAwOCwgMHgwODA0LCAweGM4ZmUsIDB4OTE4NiwgMHgwMDI3LCAweDE1NTgsIDB4MDgwYywgMHg5OWVkLAorCTB4MDgwYywgMHgzMzE1LCAweDA4MGMsIDB4ZDY1YSwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLAorCTB4Y2YxYiwgMHgwMTUwLCAweGE4NjcsIDB4MDEwMywgMHhhODc3LCAweDAwMDAsIDB4YTg3YiwgMHgwMDI5LAorCTB4MDgwYywgMHg3MDEyLCAweDA4MGMsIDB4ZDEwYywgMHgwMDllLCAweDA4MGMsIDB4YjE2YywgMHgwMDA1LAorCTB4OTE4NiwgMHgwMDg5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDhhLCAweDExNDAsIDB4MDgwYywgMHhhZjYxLAorCTB4MDEyOCwgMHg5MDg2LCAweDAwMGMsIDB4MDkwNCwgMHhjOTM2LCAweDAwMDAsIDB4MDgwYywgMHhiMjI3LAorCTB4MGM3MCwgMHg5MTg2LCAweDAwMTQsIDB4MWQ2MCwgMHgwODBjLCAweDk5ZWQsIDB4MDA5NiwgMHg2MDE0LAorCTB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MGQwMCwgMHhhODY3LCAweDAxMDMsIDB4YTg3NywgMHgwMDAwLAorCTB4YTg3YiwgMHgwMDA2LCAweGE4ODAsIDB4YzBlYywgMHhhODgyLCAweDA4OTAsIDB4MDAwMiwgMHhjOTBlLAorCTB4YzkwYywgMHhjOTBjLCAweGM5MGMsIDB4YzkwYywgMHhjOTBjLCAweGM5MjIsIDB4YzkwYywgMHhjOTBjLAorCTB4YzkwYywgMHhjOTBjLCAweGM5MGMsIDB4YzkwYywgMHgwODBjLCAweDBkODUsIDB4NjAzNCwgMHg5MDhjLAorCTB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzOSwgMHgwMTE4LCAweDkxODYsIDB4MDAzNSwgMHgxMTE4LAorCTB4MjAwMSwgMHgxOTg2LCAweDAwMTAsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsIDB4NjAxYSwgMHg2MDAzLAorCTB4MDAwYywgMHgwMDA1LCAweDYwMzQsIDB4OTA4YywgMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwgMHgwMDM5LAorCTB4MDExOCwgMHg5MTg2LCAweDAwMzUsIDB4MTExOCwgMHgyMDAxLCAweDE5ODYsIDB4MDAxMCwgMHgyMDAxLAorCTB4MTk4NywgMHgyMDA0LCAweDYwMWEsIDB4NjAwMywgMHgwMDBlLCAweDAwMDUsIDB4OTE4MiwgMHgwMDkyLAorCTB4MTIyMCwgMHg5MTgyLCAweDAwODUsIDB4MDIwOCwgMHgwMDEyLCAweDA4MDQsIDB4YjIyNywgMHhjOTRjLAorCTB4Yzk0YywgMHhjOTRjLCAweGM5NGMsIDB4Yzk0ZSwgMHhjOTliLCAweGM5NGMsIDB4Yzk0YywgMHhjOTRjLAorCTB4Yzk0YywgMHhjOTRjLCAweGM5NGMsIDB4Yzk0YywgMHgwODBjLCAweDBkODUsIDB4MDA5NiwgMHg2MDEwLAorCTB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDAxNjgsIDB4NjAzNCwgMHg5MDhjLAorCTB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzOSwgMHgwMTE4LCAweDkxODYsIDB4MDAzNSwgMHgxMTE4LAorCTB4MDA5ZSwgMHgwODA0LCAweGM5YWYsIDB4MDgwYywgMHhjZjFiLCAweDExMTgsIDB4MDgwYywgMHhkMTBjLAorCTB4MDA2OCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhkNjcxLCAweDExMTAsIDB4MDgwYywgMHhkMTBjLAorCTB4YTg2NywgMHgwMTAzLCAweDA4MGMsIDB4ZDYyNSwgMHgwODBjLCAweDcwMTIsIDB4MDBkNiwgMHgyYzY4LAorCTB4MDgwYywgMHhiMTE2LCAweDAxZDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAxZSwgMHg2MDBiLAorCTB4ZmZmZiwgMHgyMDA5LCAweDAyNmUsIDB4MjEwYywgMHg2MTNhLCAweDIwMDksIDB4MDI2ZiwgMHgyMTBjLAorCTB4NjEzZSwgMHg2OTEwLCAweDYxMTIsIDB4MDgwYywgMHhkM2I2LCAweDY5NWMsIDB4NjE1ZSwgMHg2MDIzLAorCTB4MDAwMSwgMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NjE3LCAweDJkNjAsIDB4MDBkZSwgMHgwODBjLAorCTB4YjE2YywgMHgwMDllLCAweDAwMDUsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLAorCTB4ZDBiYywgMHgwNWEwLCAweDYwMzQsIDB4OTA4YywgMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwgMHgwMDM1LAorCTB4MDEzMCwgMHg5MTg2LCAweDAwMWUsIDB4MDExOCwgMHg5MTg2LCAweDAwMzksIDB4MTUzOCwgMHgwMGQ2LAorCTB4MmM2OCwgMHgwODBjLCAweGQ1YmIsIDB4MTFmMCwgMHgwODBjLCAweGIxMTYsIDB4MDFkOCwgMHg2MTA2LAorCTB4NjAwMywgMHgwMDAxLCAweDYwMjMsIDB4MDAwMSwgMHg2OTEwLCAweDYxMTIsIDB4NjkyYywgMHg2MTJlLAorCTB4NjkzMCwgMHg2MTMyLCAweDY5MzQsIDB4OTE4YywgMHgwMGZmLCAweDYxMzYsIDB4NjkzOCwgMHg2MTNhLAorCTB4NjkzYywgMHg2MTNlLCAweDY5NWMsIDB4NjE1ZSwgMHgwODBjLCAweGQzYjYsIDB4MjAwOSwgMHg4MDIwLAorCTB4MDgwYywgMHg5NjE3LCAweDJkNjAsIDB4MDBkZSwgMHgwODA0LCAweGIxNmMsIDB4MDA5NiwgMHg2MDE0LAorCTB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDFjOCwgMHhhODY3LCAweDAxMDMsIDB4YTg4MCwgMHhkMGI0LAorCTB4MDEyOCwgMHhjMGVjLCAweGE4ODIsIDB4YTg3YiwgMHgwMDA2LCAweDAwNDgsIDB4ZDBiYywgMHgwMTE4LAorCTB4YTg3YiwgMHgwMDAyLCAweDAwMjAsIDB4YTg3YiwgMHgwMDA1LCAweDA4MGMsIDB4ZDIyNiwgMHhhODc3LAorCTB4MDAwMCwgMHgwODBjLCAweDcwMTIsIDB4MDgwYywgMHhkMTBjLCAweDAwOWUsIDB4MDgwNCwgMHhiMTZjLAorCTB4MDAxNiwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDE0MCwgMHhhODY3LAorCTB4MDEwMywgMHhhODdiLCAweDAwMjgsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NzAxMiwgMHgwMDllLAorCTB4MDAxZSwgMHg5MTg2LCAweDAwMTMsIDB4MDE1OCwgMHg5MTg2LCAweDAwMTQsIDB4MDEzMCwgMHg5MTg2LAorCTB4MDAyNywgMHgwMTE4LCAweDA4MGMsIDB4YjIyNywgMHgwMDIwLCAweDA4MGMsIDB4OTllZCwgMHgwODBjLAorCTB4YjFhNywgMHgwMDA1LCAweDAwNTYsIDB4MDA2NiwgMHgwMDk2LCAweDAwYTYsIDB4MjAyOSwgMHgwMDAxLAorCTB4OTE4MiwgMHgwMTAxLCAweDEyMDgsIDB4MDAxMCwgMHgyMDA5LCAweDAxMDAsIDB4MjEzMCwgMHg4MzA0LAorCTB4OTA5OCwgMHgwMDE4LCAweDIwMDksIDB4MDAyMCwgMHgyMDExLCAweDAwMjksIDB4MDgwYywgMHhjYTdiLAorCTB4OTZiMiwgMHgwMDIwLCAweGIwMDQsIDB4OTA0ZCwgMHgwMTEwLCAweDA4MGMsIDB4MTAwYiwgMHgwODBjLAorCTB4MTA1OSwgMHgwNTIwLCAweDg1MjgsIDB4YTg2NywgMHgwMTEwLCAweGE4NmIsIDB4MDAwMCwgMHgyOTIwLAorCTB4YjQwNiwgMHg5NjhhLCAweDAwM2QsIDB4MTIyOCwgMHgyNjA4LCAweDIwMTEsIDB4MDAxYiwgMHgwNDk5LAorCTB4MDBhOCwgMHg5NmIyLCAweDAwM2MsIDB4MjAwOSwgMHgwMDNjLCAweDI5NTAsIDB4MjAxMSwgMHgwMDFiLAorCTB4MDQ1MSwgMHgwYzI4LCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDAsIDB4MDBhZSwgMHg4NTJmLAorCTB4OTVhZCwgMHgwMDAzLCAweGI1NjYsIDB4OTVhYywgMHgwMDAwLCAweDAwNDgsIDB4MjAwMSwgMHgwMjA1LAorCTB4MjAwMywgMHgwMDAwLCAweDAwYWUsIDB4ODUyZiwgMHg5NWFkLCAweDAwMDMsIDB4YjU2NiwgMHgwMDllLAorCTB4MDA2ZSwgMHgwMDVlLCAweDAwMDUsIDB4MDBhNiwgMHg4OWZmLCAweDAxNTgsIDB4YTgwNCwgMHg5MDU1LAorCTB4MDEzMCwgMHhhODA3LCAweDAwMDAsIDB4MDgwYywgMHg3MDEyLCAweDJhNDgsIDB4MGNiOCwgMHgwODBjLAorCTB4NzAxMiwgMHgwMGFlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsIDB4NzgxNCwgMHg5MDg1LAorCTB4MDA4MCwgMHg3ODE2LCAweGQxODQsIDB4MDEwOCwgMHg4MTA4LCAweDgxMGMsIDB4MjBhOSwgMHgwMDAxLAorCTB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTIwMCwgMHgyMGEwLCAweDIwZTEsIDB4MDAwMCwgMHgyMzAwLAorCTB4OWUwMCwgMHgyMDk4LCAweDQwMDMsIDB4ODMxOCwgMHg5Mzg2LCAweDAwMjAsIDB4MTE0OCwgMHgyMDE4LAorCTB4MjMwMCwgMHg5ZTAwLCAweDIwOTgsIDB4NzgxNCwgMHg4MDAwLCAweDkwODUsIDB4MDA4MCwgMHg3ODE2LAorCTB4ODEwOSwgMHgxZDgwLCAweDc4MTcsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsIDB4NjkyMCwgMHg5MTg2LAorCTB4MDAwMywgMHgwMTE4LCAweDkxODYsIDB4MDAwMiwgMHgxMWQwLCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LAorCTB4MmQ2MCwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDE1MCwgMHgyMDAxLAorCTB4MDAwNiwgMHhhOTgwLCAweGMxZDUsIDB4MDgwYywgMHg3MjVlLCAweDA4MGMsIDB4NzAwNiwgMHgwODBjLAorCTB4ZDEwYywgMHgwMDllLCAweDA4MGMsIDB4YjFhNywgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LAorCTB4MDBjNiwgMHg3MDJjLCAweGQwODQsIDB4MTE3MCwgMHg2MDA4LCAweDIwNjAsIDB4NjAyMCwgMHg5MDg2LAorCTB4MDAwMiwgMHgxMTQwLCAweDYxMDQsIDB4OTE4NiwgMHgwMDg1LCAweDAxMTgsIDB4OTE4NiwgMHgwMDhiLAorCTB4MTEwOCwgMHg5MDA2LCAweDAwY2UsIDB4MDAwNSwgMHgwMDY2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAorCTB4MjAzMSwgMHgwMDAxLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwODMsIDB4MDEyZSwgMHgwMDZlLAorCTB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDY2LCAweDIwMzEsIDB4MDAwMCwgMHg2MDIwLAorCTB4OTA4NCwgMHgwMDBmLCAweDAwMWIsIDB4MDA2ZSwgMHgwMTJlLCAweDAwMDUsIDB4Y2IyYSwgMHhjYjJhLAorCTB4Y2IyNSwgMHhjYjRlLCAweGNiMDYsIDB4Y2IyNSwgMHhjYjA4LCAweGNiMjUsIDB4Y2IyNSwgMHg5NDU4LAorCTB4Y2IyNSwgMHhjYjI1LCAweGNiMjUsIDB4Y2IwNiwgMHhjYjA2LCAweGNiMDYsIDB4MDgwYywgMHgwZDg1LAorCTB4NjAxMCwgMHg5MDgwLCAweDAwMDAsIDB4MjAwNCwgMHhkMGJjLCAweDE5MGMsIDB4Y2I0ZSwgMHgwMDM2LAorCTB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTg4MCwgMHgwMDllLCAweGQwY2MsIDB4MDExOCwgMHgyMDE5LAorCTB4MDAwYywgMHgwMDM4LCAweGQwOTQsIDB4MDExOCwgMHgyMDE5LCAweDAwMGQsIDB4MDAxMCwgMHgyMDE5LAorCTB4MDAxMCwgMHgwODBjLCAweGU1NzgsIDB4MDAzZSwgMHgwMDA1LCAweDkwMDYsIDB4MDAwNSwgMHg5MDg1LAorCTB4MDAwMSwgMHgwMDA1LCAweDAwOTYsIDB4ODZmZiwgMHgxMWU4LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLAorCTB4Y2YxYiwgMHgwMWQwLCAweDYwNDMsIDB4ZmZmZiwgMHhhODY0LCAweDkwODYsIDB4MDEzOSwgMHgxMTI4LAorCTB4YTg3YiwgMHgwMDA1LCAweGE4ODMsIDB4MDAwMCwgMHgwMDI4LCAweDkwMGUsIDB4MjAwMSwgMHgwMDA1LAorCTB4MDgwYywgMHg3MjVlLCAweDA4MGMsIDB4ZDIyNiwgMHgwODBjLCAweDcwMDYsIDB4MDgwYywgMHhiMWE3LAorCTB4OTA4NSwgMHgwMDAxLCAweDAwOWUsIDB4MDAwNSwgMHg5MDA2LCAweDBjZTAsIDB4MDgwYywgMHhhY2ZjLAorCTB4MDgwYywgMHhkNjdmLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDBkODUsIDB4MDAyYiwgMHgwMTA2LAorCTB4MDgwYywgMHhhZDE4LCAweDAxMGUsIDB4MDAwNSwgMHhjYjZjLCAweGNiOWMsIDB4Y2I2ZSwgMHhjYmMzLAorCTB4Y2I5NywgMHhjYjZjLCAweGNiMjUsIDB4Y2IyYSwgMHhjYjJhLCAweGNiMjUsIDB4Y2IyNSwgMHhjYjI1LAorCTB4Y2IyNSwgMHhjYjI1LCAweGNiMjUsIDB4Y2IyNSwgMHgwODBjLCAweDBkODUsIDB4ODZmZiwgMHgxNTIwLAorCTB4NjAyMCwgMHg5MDg2LCAweDAwMDYsIDB4MDUwMCwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLAorCTB4Y2YxYiwgMHgwMTY4LCAweGE4N2MsIDB4ZDBjYywgMHgwMTQwLCAweDAwOTYsIDB4YzBjYywgMHhhODdlLAorCTB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsIDB4MTAwYiwgMHgwMDllLCAweDA4MGMsIDB4ZDIyNiwgMHgwMDllLAorCTB4MDgwYywgMHhkNWZmLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDAyLAorCTB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTVmOSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDY2LAorCTB4MDgwYywgMHgxYWQzLCAweDAwNmUsIDB4MDg5MCwgMHgwMGU2LCAweDIwNzEsIDB4MTllOCwgMHg3MDMwLAorCTB4OWMwNiwgMHgxMTIwLCAweDA4MGMsIDB4YTUxNiwgMHgwMGVlLCAweDA4NDAsIDB4NjAyMCwgMHg5MDg0LAorCTB4MDAwZiwgMHg5MDg2LCAweDAwMDYsIDB4MTE1MCwgMHgwMDg2LCAweDAwOTYsIDB4MjA0OSwgMHgwMDAxLAorCTB4MmM0MCwgMHgwODBjLCAweGE2NjcsIDB4MDA5ZSwgMHgwMDhlLCAweDAwNDAsIDB4MDA2NiwgMHgwODBjLAorCTB4YTQxMiwgMHgxOTBjLCAweDBkODUsIDB4MDgwYywgMHhhNDIwLCAweDAwNmUsIDB4MDBlZSwgMHgxOTA0LAorCTB4Y2I2ZSwgMHgwODA0LCAweGNiMjUsIDB4MDAzNiwgMHgwMGU2LCAweDIwNzEsIDB4MTllOCwgMHg3MDRjLAorCTB4OWMwNiwgMHgxMTM4LCAweDkwMWUsIDB4MDgwYywgMHhhNTk2LCAweDAwZWUsIDB4MDAzZSwgMHgwODA0LAorCTB4Y2I2ZSwgMHgwODBjLCAweGE3YTEsIDB4MDBlZSwgMHgwMDNlLCAweDE5MDQsIDB4Y2I2ZSwgMHgwODA0LAorCTB4Y2IyNSwgMHgwMGM2LCAweDAwNjYsIDB4NjAyMCwgMHg5MDg0LCAweDAwMGYsIDB4MDAxYiwgMHgwMDZlLAorCTB4MDBjZSwgMHgwMDA1LCAweGNiZjksIDB4Y2NlMiwgMHhjZTUwLCAweGNjMDEsIDB4YjFhNywgMHhjYmY5LAorCTB4ZTU2ZSwgMHhkNjY3LCAweGNjZTIsIDB4OTQxZiwgMHhjZWRjLCAweGNiZjIsIDB4Y2JmMiwgMHhjYmYyLAorCTB4Y2JmMiwgMHhjYmYyLCAweDA4MGMsIDB4MGQ4NSwgMHgwODBjLCAweGQxMzIsIDB4MTExMCwgMHgwODBjLAorCTB4YmI1YywgMHgwMDA1LCAweDA4MGMsIDB4OTllZCwgMHgwODA0LCAweGIxNmMsIDB4NjAxYiwgMHgwMDAxLAorCTB4MDAwNSwgMHgwODBjLCAweGNmMWIsIDB4MDEzMCwgMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHgyYzAwLAorCTB4YTg5NiwgMHgwMDllLCAweDA4MGMsIDB4YWNmYywgMHgwODBjLCAweGQ2N2YsIDB4OTA4YSwgMHgwMDEwLAorCTB4MWEwYywgMHgwZDg1LCAweDAwMTMsIDB4MDgwNCwgMHhhZDE4LCAweGNjMjUsIDB4Y2MyNywgMHhjYzUxLAorCTB4Y2M2NSwgMHhjYzkyLCAweGNjMjUsIDB4Y2JmOSwgMHhjYmY5LCAweGNiZjksIDB4Y2M2YywgMHhjYzZjLAorCTB4Y2MyNSwgMHhjYzI1LCAweGNjMjUsIDB4Y2MyNSwgMHhjYzc2LCAweDA4MGMsIDB4MGQ4NSwgMHgwMGU2LAogCTB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTg4MCwgMHhjMGI1LCAweGE4ODIsIDB4MDA5ZSwgMHgyMDcxLAotCTB4MTllOSwgMHg3MDMwLCAweDljMDYsIDB4MDFkMCwgMHgwMDY2LCAweDA4MGMsIDB4YTIwZCwgMHgxOTBjLAotCTB4MGQ3OSwgMHgwODBjLCAweGEyMWIsIDB4MDA2ZSwgMHgwODBjLCAweGQzMTcsIDB4NjAwNywgMHgwMDg1LAotCTB4NjAwMywgMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2MDFhLAotCTB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTQwMiwgMHgwMGVlLCAweDAwMDUsIDB4NjAxYiwgMHgwMDAxLAorCTB4MTllOCwgMHg3MDMwLCAweDljMDYsIDB4MDFkMCwgMHgwMDY2LCAweDA4MGMsIDB4YTQxMiwgMHgxOTBjLAorCTB4MGQ4NSwgMHgwODBjLCAweGE0MjAsIDB4MDA2ZSwgMHgwODBjLCAweGQ1ZmYsIDB4NjAwNywgMHgwMDg1LAorCTB4NjAwMywgMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHgyMDAxLCAweDE5ODcsIDB4MjAwNCwgMHg2MDFhLAorCTB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTVmOSwgMHgwMGVlLCAweDAwMDUsIDB4NjAxYiwgMHgwMDAxLAogCTB4MGNkOCwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHhhODgwLCAweGMwYjUsIDB4YTg4MiwgMHgwMDllLAotCTB4MDgwYywgMHhkMzE3LCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDAyLAotCTB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTQwMiwgMHgwMDA1LCAweDA4MGMsIDB4YWFmNywgMHgwODBjLAotCTB4YWNjZiwgMHgwODBjLCAweGFiMTMsIDB4MGMyOCwgMHgwMDk2LCAweDYwMWIsIDB4MDAwMSwgMHg2MDE0LAotCTB4MjA0OCwgMHhhODgwLCAweGMwYjUsIDB4YTg4MiwgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHg1ODI4LAorCTB4MDgwYywgMHhkNWZmLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDAyLAorCTB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTVmOSwgMHgwMDA1LCAweDA4MGMsIDB4YWNmYywgMHgwODBjLAorCTB4YWVlMywgMHgwODBjLCAweGFkMTgsIDB4MGMyOCwgMHgwMDk2LCAweDYwMWIsIDB4MDAwMSwgMHg2MDE0LAorCTB4MjA0OCwgMHhhODgwLCAweGMwYjUsIDB4YTg4MiwgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHg1ODQ4LAogCTB4MDFiOCwgMHg2MDE0LCAweDAwOTYsIDB4OTA0ZCwgMHgwMTkwLCAweGE4NjQsIDB4YTg2NywgMHgwMTAzLAogCTB4YTg3YiwgMHgwMDA2LCAweDkwODYsIDB4MDEzOSwgMHgxMTUwLCAweGE4NjcsIDB4MDEzOSwgMHhhODdiLAotCTB4MDAzMCwgMHhhODk3LCAweDQwMDUsIDB4YTg5YiwgMHgwMDA0LCAweDA4MGMsIDB4NmYxMSwgMHgwMDllLAotCTB4MDgwNCwgMHhhZjRlLCAweDYwMTQsIDB4MDA5NiwgMHg5MDRkLCAweDA1NTgsIDB4YTk3YywgMHhkMWU0LAotCTB4MTE1OCwgMHg2MTFjLCAweGQxZmMsIDB4MDUyOCwgMHg2MTEwLCAweDAwYjYsIDB4MjE1OCwgMHhiOTNjLAotCTB4ODEwOSwgMHgwMjA4LCAweGI5M2UsIDB4MDBiZSwgMHgwODBjLCAweGFiMTMsIDB4MjAwMSwgMHgxODBmLAotCTB4MjAwNCwgMHhkMGM0LCAweDAxMTAsIDB4MDA5ZSwgMHgwMDA1LCAweGE4ODQsIDB4MDA5ZSwgMHg4MDAzLAotCTB4ODAwYiwgMHg4MTBiLCAweDkxMDgsIDB4NjExYSwgMHgwMGM2LCAweDA4MGMsIDB4MjFhMiwgMHgwMGNlLAotCTB4NjAwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHhhZmVjLAotCTB4MDAwNSwgMHgwMDllLCAweDA4MGMsIDB4MWFmMCwgMHgwODA0LCAweGM5ODksIDB4NjAwMCwgMHg5MDhhLAotCTB4MDAxMCwgMHgxYTBjLCAweDBkNzksIDB4MDAwYiwgMHgwMDA1LCAweGNhMTUsIDB4YzkzNSwgMHhjYTE3LAotCTB4Y2ExNSwgMHhjYTE3LCAweGNhMTcsIDB4YzkzMSwgMHhjYTE1LCAweGM5MmIsIDB4YzkyYiwgMHhjYTE1LAotCTB4Y2ExNSwgMHhjYTE1LCAweGNhMTUsIDB4Y2ExNSwgMHhjYTE1LCAweDA4MGMsIDB4MGQ3OSwgMHg2MDEwLAotCTB4MDBiNiwgMHgyMDU4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDAwYmUsIDB4OTA4YSwgMHgwMDBjLAotCTB4MWEwYywgMHgwZDc5LCAweDAwYjYsIDB4MDAxMywgMHgwMGJlLCAweDAwMDUsIDB4Y2EzMiwgMHhjYWZmLAotCTB4Y2EzNCwgMHhjYTc0LCAweGNhMzQsIDB4Y2E3NCwgMHhjYTM0LCAweGNhNDIsIDB4Y2EzMiwgMHhjYTc0LAotCTB4Y2EzMiwgMHhjYTYzLCAweDA4MGMsIDB4MGQ3OSwgMHg2MDA0LCAweDkwOGUsIDB4MDAxNiwgMHgwNWMwLAotCTB4OTA4ZSwgMHgwMDA0LCAweDA1YTgsIDB4OTA4ZSwgMHgwMDAyLCAweDA1OTAsIDB4OTA4ZSwgMHgwMDUyLAotCTB4MDkwNCwgMHhjYWZiLCAweDYwMDQsIDB4MDgwYywgMHhjZTRhLCAweDA5MDQsIDB4Y2IxOCwgMHg5MDhlLAotCTB4MDAwNCwgMHgxMTEwLCAweDA4MGMsIDB4MzMyYSwgMHg5MDhlLCAweDAwMjEsIDB4MDkwNCwgMHhjYjFjLAotCTB4OTA4ZSwgMHgwMDIyLCAweDA5MDQsIDB4Y2I2MywgMHg5MDhlLCAweDAwM2QsIDB4MDkwNCwgMHhjYjFjLAotCTB4OTA4ZSwgMHgwMDM5LCAweDA5MDQsIDB4Y2IyMCwgMHg5MDhlLCAweDAwMzUsIDB4MDkwNCwgMHhjYjIwLAotCTB4OTA4ZSwgMHgwMDFlLCAweDAxNzgsIDB4OTA4ZSwgMHgwMDAxLCAweDExNDAsIDB4NjAxMCwgMHgyMDU4LAotCTB4YjgwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LCAweDAxMTAsIDB4MDgwYywgMHgzMmZiLAotCTB4MDgwYywgMHhiOTNjLCAweDA4MDQsIDB4YWY4OSwgMHgwMGM2LCAweDAwZDYsIDB4NjEwNCwgMHg5MTg2LAotCTB4MDAxNiwgMHgwOTA0LCAweGNhZWMsIDB4OTE4NiwgMHgwMDAyLCAweDE5MDQsIDB4Y2FjMSwgMHgyMDAxLAotCTB4MTgzNywgMHgyMDA0LCAweGQwOGMsIDB4MTFjOCwgMHgwODBjLCAweDc2OWQsIDB4MTFiMCwgMHgwODBjLAotCTB4ZDM1ZCwgMHgwMTM4LCAweDA4MGMsIDB4NzZjMCwgMHgxMTIwLCAweDA4MGMsIDB4NzVhNiwgMHgwODA0LAotCTB4Y2I0YywgMHgyMDAxLCAweDE5N2UsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4MTgwMCwgMHgyMDAzLAotCTB4MDAwMSwgMHgwODBjLCAweDc1Y2MsIDB4MDgwNCwgMHhjYjRjLCAweDYwMTAsIDB4MjA1OCwgMHgyMDAxLAotCTB4MTgzNywgMHgyMDA0LCAweGQwYWMsIDB4MTkwNCwgMHhjYjRjLCAweGI4YTAsIDB4OTA4NCwgMHhmZjgwLAotCTB4MTkwNCwgMHhjYjRjLCAweGI4NDAsIDB4OTA4NCwgMHgwMGZmLCAweDkwMDUsIDB4MDE5MCwgMHg4MDAxLAorCTB4MDAzMCwgMHhhODk3LCAweDQwMDUsIDB4YTg5YiwgMHgwMDA0LCAweDA4MGMsIDB4NzAxMiwgMHgwMDllLAorCTB4MDgwNCwgMHhiMTZjLCAweDYwMTQsIDB4MDA5NiwgMHg5MDRkLCAweDA5MDQsIDB4Y2NkZCwgMHhhOTdjLAorCTB4ZDFlNCwgMHgxMTYwLCAweDYxMWMsIDB4ZDFmYywgMHgwOTA0LCAweGNjZGQsIDB4NjExMCwgMHgwMGI2LAorCTB4MjE1OCwgMHhiOTNjLCAweDgxMDksIDB4MDIwOCwgMHhiOTNlLCAweDAwYmUsIDB4MDgwYywgMHhhZDE4LAorCTB4MjAwMSwgMHgxODBmLCAweDIwMDQsIDB4ZDBjNCwgMHgwMTEwLCAweDAwOWUsIDB4MDAwNSwgMHhhODg0LAorCTB4MDA5ZSwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHg5MTA4LCAweDYxMWEsIDB4MjAwMSwgMHgwMDMwLAorCTB4MmMwOCwgMHgwODBjLCAweDE2YjksIDB4MjAwMSwgMHgwMzBjLCAweDIwMDQsIDB4OTA4NiwgMHgwMDQxLAorCTB4MTE5OCwgMHg2MDE0LCAweDAwOTYsIDB4OTA0ZCwgMHgwOTBjLCAweDBkODUsIDB4YTg4MCwgMHhkMGY0LAorCTB4MTEzMCwgMHhjMGY1LCAweGE4ODIsIDB4MDA5ZSwgMHg2MDFiLCAweDAwMDIsIDB4MDA2OCwgMHgwMDllLAorCTB4MDBjNiwgMHgwODBjLCAweDIxODUsIDB4MDBjZSwgMHg2MDAwLCAweDkwODYsIDB4MDAwNCwgMHgxMTIwLAorCTB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4YjIwYSwgMHgwMDA1LCAweDAwOWUsIDB4MDgwYywgMHgxYWQzLAorCTB4MDgwNCwgMHhjYzUxLCAweDYwMDAsIDB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGQ4NSwgMHgwMDBiLAorCTB4MDAwNSwgMHhjY2Y5LCAweGNiZmUsIDB4Y2NmYiwgMHhjY2Y5LCAweGNjZmIsIDB4Y2NmYiwgMHhjYmZhLAorCTB4Y2NmOSwgMHhjYmY0LCAweGNiZjQsIDB4Y2NmOSwgMHhjY2Y5LCAweGNjZjksIDB4Y2NmOSwgMHhjY2Y5LAorCTB4Y2NmOSwgMHgwODBjLCAweDBkODUsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwNCwgMHg5MDg0LAorCTB4MDBmZiwgMHgwMGJlLCAweDkwOGEsIDB4MDAwYywgMHgxYTBjLCAweDBkODUsIDB4MDBiNiwgMHgwMDEzLAorCTB4MDBiZSwgMHgwMDA1LCAweGNkMTYsIDB4Y2RlNywgMHhjZDE4LCAweGNkNTgsIDB4Y2QxOCwgMHhjZDU4LAorCTB4Y2QxOCwgMHhjZDI2LCAweGNkMTYsIDB4Y2Q1OCwgMHhjZDE2LCAweGNkNDcsIDB4MDgwYywgMHgwZDg1LAorCTB4NjAwNCwgMHg5MDhlLCAweDAwMTYsIDB4MDVjMCwgMHg5MDhlLCAweDAwMDQsIDB4MDVhOCwgMHg5MDhlLAorCTB4MDAwMiwgMHgwNTkwLCAweDkwOGUsIDB4MDA1MiwgMHgwOTA0LCAweGNkZTMsIDB4NjAwNCwgMHgwODBjLAorCTB4ZDEzMiwgMHgwOTA0LCAweGNlMDAsIDB4OTA4ZSwgMHgwMDA0LCAweDExMTAsIDB4MDgwYywgMHgzMzQ0LAorCTB4OTA4ZSwgMHgwMDIxLCAweDA5MDQsIDB4Y2UwNCwgMHg5MDhlLCAweDAwMjIsIDB4MDkwNCwgMHhjZTRiLAorCTB4OTA4ZSwgMHgwMDNkLCAweDA5MDQsIDB4Y2UwNCwgMHg5MDhlLCAweDAwMzksIDB4MDkwNCwgMHhjZTA4LAorCTB4OTA4ZSwgMHgwMDM1LCAweDA5MDQsIDB4Y2UwOCwgMHg5MDhlLCAweDAwMWUsIDB4MDE3OCwgMHg5MDhlLAorCTB4MDAwMSwgMHgxMTQwLCAweDYwMTAsIDB4MjA1OCwgMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LAorCTB4MDAwNiwgMHgwMTEwLCAweDA4MGMsIDB4MzMxNSwgMHgwODBjLCAweGJiNWMsIDB4MDgwNCwgMHhiMWE3LAorCTB4MDBjNiwgMHgwMGQ2LCAweDYxMDQsIDB4OTE4NiwgMHgwMDE2LCAweDA5MDQsIDB4Y2RkNCwgMHg5MTg2LAorCTB4MDAwMiwgMHgxOTA0LCAweGNkYTksIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4ZDA4YywgMHgxMWM4LAorCTB4MDgwYywgMHg3NzllLCAweDExYjAsIDB4MDgwYywgMHhkNjQ1LCAweDAxMzgsIDB4MDgwYywgMHg3N2MxLAorCTB4MTEyMCwgMHgwODBjLCAweDc2YTcsIDB4MDgwNCwgMHhjZTM0LCAweDIwMDEsIDB4MTk3ZCwgMHgyMDAzLAorCTB4MDAwMSwgMHgyMDAxLCAweDE4MDAsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsIDB4NzZjZCwgMHgwODA0LAorCTB4Y2UzNCwgMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwgMHg5MDg2LCAweDAwODAsIDB4MDEzMCwgMHgyMDAxLAorCTB4MTgzNywgMHgyMDA0LCAweGQwYWMsIDB4MTkwNCwgMHhjZTM0LCAweGI4YTAsIDB4OTA4MiwgMHgwMDgxLAorCTB4MWEwNCwgMHhjZTM0LCAweGI4NDAsIDB4OTA4NCwgMHgwMGZmLCAweDkwMDUsIDB4MDE5MCwgMHg4MDAxLAogCTB4Yjg0MiwgMHg2MDE3LCAweDAwMDAsIDB4NjAyMywgMHgwMDA3LCAweDYwMWIsIDB4MDM5OCwgMHg2MDRiLAotCTB4MDAwMCwgMHgwODBjLCAweGFlZjgsIDB4MDEyOCwgMHgyYjAwLCAweDYwMTIsIDB4NjAyMywgMHgwMDAxLAorCTB4MDAwMCwgMHgwODBjLCAweGIxMTYsIDB4MDEyOCwgMHgyYjAwLCAweDYwMTIsIDB4NjAyMywgMHgwMDAxLAogCTB4MDQ1OCwgMHgwMGRlLCAweDAwY2UsIDB4NjAwNCwgMHg5MDhlLCAweDAwMDIsIDB4MTFhMCwgMHg2MDEwLAogCTB4MjA1OCwgMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgxMTcwLCAweDIwMDksIDB4MTgzNywgMHgyMTA0LAotCTB4YzA4NSwgMHgyMDBhLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4NjEwYiwgMHgwMGVlLAotCTB4MDgwYywgMHhiOTNjLCAweDAwMzAsIDB4MDgwYywgMHhiOTNjLCAweDA4MGMsIDB4MzJmYiwgMHgwODBjLAotCTB4ZDM3MiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MzMyYSwgMHgwMTJlLAotCTB4MDBlZSwgMHgwODBjLCAweGFmODksIDB4MDAwNSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NmM5LAotCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDk0MjcsIDB4MDgwYywgMHg5OGJjLAotCTB4MDBkZSwgMHgwMGNlLCAweDBjODAsIDB4MDgwYywgMHgzMzJhLCAweDA4MDQsIDB4Y2E3MCwgMHgwMGM2LAorCTB4YzA4NSwgMHgyMDBhLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4NjEzMCwgMHgwMGVlLAorCTB4MDgwYywgMHhiYjVjLCAweDAwMzAsIDB4MDgwYywgMHhiYjVjLCAweDA4MGMsIDB4MzMxNSwgMHgwODBjLAorCTB4ZDY1YSwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MzM0NCwgMHgwMTJlLAorCTB4MDBlZSwgMHgwODBjLCAweGIxYTcsIDB4MDAwNSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2NmZhLAorCTB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDk2MWUsIDB4MDgwYywgMHg5YWIzLAorCTB4MDBkZSwgMHgwMGNlLCAweDBjODAsIDB4MDgwYywgMHgzMzQ0LCAweDA4MDQsIDB4Y2Q1NCwgMHgwMGM2LAogCTB4MDBkNiwgMHg2MTA0LCAweDkxODYsIDB4MDAxNiwgMHgwZDM4LCAweDYwMTAsIDB4MjA1OCwgMHhiODQwLAotCTB4OTA4NCwgMHgwMGZmLCAweDkwMDUsIDB4MDkwNCwgMHhjYWMxLCAweDgwMDEsIDB4Yjg0MiwgMHg2MDAzLAotCTB4MDAwMSwgMHgwODBjLCAweDk0MjcsIDB4MDgwYywgMHg5OGJjLCAweDAwZGUsIDB4MDBjZSwgMHgwODk4LAotCTB4MDgwYywgMHhiOTNjLCAweDA4MDQsIDB4Y2E3MiwgMHgwODBjLCAweGI5NzgsIDB4MDgwNCwgMHhjYTcyLAotCTB4MDBkNiwgMHgyYzY4LCAweDYxMDQsIDB4MDgwYywgMHhkMmQzLCAweDAwZGUsIDB4MDExOCwgMHgwODBjLAotCTB4YWY0ZSwgMHgwNDA4LCAweDYwMDQsIDB4ODAwNywgMHg2MTM0LCAweDkxOGMsIDB4MDBmZiwgMHg5MTA1LAorCTB4OTA4NCwgMHgwMGZmLCAweDkwMDUsIDB4MDkwNCwgMHhjZGE5LCAweDgwMDEsIDB4Yjg0MiwgMHg2MDAzLAorCTB4MDAwMSwgMHgwODBjLCAweDk2MWUsIDB4MDgwYywgMHg5YWIzLCAweDAwZGUsIDB4MDBjZSwgMHgwODk4LAorCTB4MDgwYywgMHhiYjVjLCAweDA4MDQsIDB4Y2Q1NiwgMHgwODBjLCAweGJiOTgsIDB4MDgwNCwgMHhjZDU2LAorCTB4MDBkNiwgMHgyYzY4LCAweDYxMDQsIDB4MDgwYywgMHhkNWJiLCAweDAwZGUsIDB4MDExOCwgMHgwODBjLAorCTB4YjE2YywgMHgwNDA4LCAweDYwMDQsIDB4ODAwNywgMHg2MTM0LCAweDkxOGMsIDB4MDBmZiwgMHg5MTA1LAogCTB4NjAzNiwgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHg2MDNjLAotCTB4NjAwYSwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2MDFhLCAweDYwMmMsIDB4MmMwOCwgMHgyMDYwLAorCTB4NjAwYSwgMHgyMDAxLCAweDE5ODcsIDB4MjAwNCwgMHg2MDFhLCAweDYwMmMsIDB4MmMwOCwgMHgyMDYwLAogCTB4NjAyNCwgMHhkMGI0LCAweDAxMDgsIDB4YzA4NSwgMHhjMGI1LCAweDYwMjYsIDB4MjE2MCwgMHgyMDA5LAotCTB4ODAyMCwgMHgwODBjLCAweDk0MjAsIDB4MDAwNSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHhiOTNjLAotCTB4MDgwYywgMHgzMmZiLCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgzMzJhLAorCTB4ODAyMCwgMHgwODBjLCAweDk2MTcsIDB4MDAwNSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHhiYjVjLAorCTB4MDgwYywgMHgzMzE1LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgzMzQ0LAogCTB4NjAxNywgMHgwMDAwLCAweDYwMjMsIDB4MDAwNywgMHg2MDFiLCAweDAzOTgsIDB4NjA0YiwgMHgwMDAwLAotCTB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDgwYywgMHhiMzhhLCAweDE5MDQsIDB4Y2IxOCwgMHgwMDA1LAotCTB4NjAwMCwgMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZDc5LCAweDAwOTYsIDB4MDBkNiwgMHgwMDFiLAotCTB4MDBkZSwgMHgwMDllLCAweDAwMDUsIDB4Y2I4MywgMHhjYjgzLCAweGNiODMsIDB4Y2I4MywgMHhjYjgzLAotCTB4Y2I4MywgMHhjYjgzLCAweGNiODMsIDB4Y2I4MywgMHhjOTMwLCAweGNiODMsIDB4YzkzNSwgMHhjYjg1LAotCTB4YzkzNSwgMHhjYjlmLCAweGNiODMsIDB4MDgwYywgMHgwZDc5LCAweDYwMDQsIDB4OTA4NiwgMHgwMDhiLAorCTB4MDEyZSwgMHgwMGVlLCAweDAwMDUsIDB4MDgwYywgMHhiNWE4LCAweDE5MDQsIDB4Y2UwMCwgMHgwMDA1LAorCTB4NjAwMCwgMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZDg1LCAweDAwOTYsIDB4MDBkNiwgMHgwMDFiLAorCTB4MDBkZSwgMHgwMDllLCAweDAwMDUsIDB4Y2U2YiwgMHhjZTZiLCAweGNlNmIsIDB4Y2U2YiwgMHhjZTZiLAorCTB4Y2U2YiwgMHhjZTZiLCAweGNlNmIsIDB4Y2U2YiwgMHhjYmY5LCAweGNlNmIsIDB4Y2JmZSwgMHhjZTZkLAorCTB4Y2JmZSwgMHhjZTg3LCAweGNlNmIsIDB4MDgwYywgMHgwZDg1LCAweDYwMDQsIDB4OTA4NiwgMHgwMDhiLAogCTB4MDFiMCwgMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzNSwgMHgxMTMwLAogCTB4NjAyYywgMHg5MDgwLCAweDAwMDksIDB4MjAwYywgMHhjMTg1LCAweDIxMDIsIDB4NjAwNywgMHgwMDhiLAotCTB4NjAwMywgMHgwMDBkLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk0MjAsIDB4MDAwNSwgMHgwODBjLAotCTB4ZDM1MSwgMHgwMTE4LCAweDA4MGMsIDB4ZDM2NCwgMHgwMDEwLCAweDA4MGMsIDB4ZDM3MiwgMHgwODBjLAotCTB4Y2UyNCwgMHgwODBjLCAweGNjMzMsIDB4MDU3MCwgMHgwODBjLCAweDMyZmIsIDB4MDgwYywgMHhjYzMzLAorCTB4NjAwMywgMHgwMDBkLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk2MTcsIDB4MDAwNSwgMHgwODBjLAorCTB4ZDYzOSwgMHgwMTE4LCAweDA4MGMsIDB4ZDY0YywgMHgwMDEwLCAweDA4MGMsIDB4ZDY1YSwgMHgwODBjLAorCTB4ZDEwYywgMHgwODBjLCAweGNmMWIsIDB4MDU3MCwgMHgwODBjLCAweDMzMTUsIDB4MDgwYywgMHhjZjFiLAogCTB4MDE2OCwgMHg2MDE0LCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsIDB4MDAwNiwgMHhhODc3LAotCTB4MDAwMCwgMHhhODgwLCAweGMwZWQsIDB4YTg4MiwgMHgwODBjLCAweDZmMTEsIDB4MmM2OCwgMHgwODBjLAotCTB4YWVmOCwgMHgwMTUwLCAweDY4MTAsIDB4NjAxMiwgMHgwODBjLCAweGQwY2UsIDB4MDBjNiwgMHgyZDYwLAotCTB4MDgwYywgMHhhZjg5LCAweDAwY2UsIDB4MDAwOCwgMHgyZDYwLCAweDYwMTcsIDB4MDAwMCwgMHg2MDIzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTQyNywgMHgwODBjLAotCTB4OThiYywgMHgwMGM4LCAweDA4MGMsIDB4ZDM1MSwgMHgwMTM4LCAweDYwMzQsIDB4OTA4NiwgMHg0MDAwLAotCTB4MTExOCwgMHgwODBjLCAweDMyZmIsIDB4MDhkMCwgMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLAotCTB4OTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDM1LCAweDExMTgsIDB4MDgwYywgMHgzMmZiLAotCTB4MDg2OCwgMHgwODBjLCAweGFmODksIDB4MDAwNSwgMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLAotCTB4MGQ3OSwgMHgwMDAyLCAweGNjMGEsIDB4Y2MwYSwgMHhjYzEyLCAweGNjMGMsIDB4Y2MxYywgMHhjYzBhLAotCTB4Y2MwYSwgMHhhZjg5LCAweGNjMGEsIDB4Y2MwYSwgMHhjYzBhLCAweGNjMGEsIDB4Y2MwYSwgMHhjYzBhLAotCTB4Y2MwYSwgMHhjYzBhLCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHhhY2NmLAotCTB4MDgwYywgMHhhYjEzLCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweGE4N2IsIDB4MDAwNiwgMHgwODBjLAotCTB4NmYxMSwgMHgwMDllLCAweDA4MDQsIDB4YWY0ZSwgMHg2MDFjLCAweGQwODQsIDB4MTkwYywgMHgxYWYwLAorCTB4MDAwMCwgMHhhODgwLCAweGMwZWQsIDB4YTg4MiwgMHgwODBjLCAweDcwMTIsIDB4MmM2OCwgMHgwODBjLAorCTB4YjExNiwgMHgwMTUwLCAweDY4MTAsIDB4NjAxMiwgMHgwODBjLCAweGQzYjYsIDB4MDBjNiwgMHgyZDYwLAorCTB4MDgwYywgMHhiMWE3LCAweDAwY2UsIDB4MDAwOCwgMHgyZDYwLCAweDYwMTcsIDB4MDAwMCwgMHg2MDIzLAorCTB4MDAwMSwgMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLAorCTB4OWFiMywgMHgwMGM4LCAweDA4MGMsIDB4ZDYzOSwgMHgwMTM4LCAweDYwMzQsIDB4OTA4NiwgMHg0MDAwLAorCTB4MTExOCwgMHgwODBjLCAweDMzMTUsIDB4MDhkMCwgMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLAorCTB4OTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDM1LCAweDExMTgsIDB4MDgwYywgMHgzMzE1LAorCTB4MDg2OCwgMHgwODBjLCAweGIxYTcsIDB4MDAwNSwgMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLAorCTB4MGQ4NSwgMHgwMDAyLCAweGNlZjIsIDB4Y2VmMiwgMHhjZWZhLCAweGNlZjQsIDB4Y2YwNCwgMHhjZWYyLAorCTB4Y2VmMiwgMHhiMWE3LCAweGNlZjIsIDB4Y2VmMiwgMHhjZWYyLCAweGNlZjIsIDB4Y2VmMiwgMHhjZWYyLAorCTB4Y2VmMiwgMHhjZWYyLCAweDA4MGMsIDB4MGQ4NSwgMHgwODBjLCAweGFjZmMsIDB4MDgwYywgMHhhZWUzLAorCTB4MDgwYywgMHhhZDE4LCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweGE4N2IsIDB4MDAwNiwgMHgwODBjLAorCTB4NzAxMiwgMHgwMDllLCAweDA4MDQsIDB4YjE2YywgMHg2MDFjLCAweGQwODQsIDB4MTkwYywgMHgxYWQzLAogCTB4MGM4OCwgMHg5Mjg0LCAweDAwMDMsIDB4MTE1OCwgMHg5MjgyLCAweDFkZGMsIDB4MDI0MCwgMHgyMDAxLAogCTB4MTgxYSwgMHgyMDA0LCAweDkyMDIsIDB4MTIxOCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg5MDA2LAogCTB4MGNlOCwgMHgwMDk2LCAweDAwMjgsIDB4MDA5NiwgMHgwMDA2LCAweDYwMTQsIDB4MjA0OCwgMHgwMDBlLAotCTB4MDAwNiwgMHg5OTg0LCAweGYwMDAsIDB4OTA4NiwgMHhmMDAwLCAweDAxMTAsIDB4MDgwYywgMHgxMGY4LAorCTB4MDAwNiwgMHg5OTg0LCAweGYwMDAsIDB4OTA4NiwgMHhmMDAwLCAweDAxMTAsIDB4MDgwYywgMHgxMTA0LAogCTB4MDAwZSwgMHgwMDllLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwMzYsIDB4MDAwNiwgMHgwMTI2LAogCTB4MjA5MSwgMHg4MDAwLCAweDIwNjEsIDB4MWRkYywgMHgyMDcxLCAweDE4MDAsIDB4NzM1NCwgMHg3MDc0LAotCTB4OTMwMiwgMHgxNjQwLCAweDYwMjAsIDB4OTIwNiwgMHgxMWY4LCAweDA4MGMsIDB4ZDM1ZCwgMHgwMTgwLAorCTB4OTMwMiwgMHgxNjQwLCAweDYwMjAsIDB4OTIwNiwgMHgxMWY4LCAweDA4MGMsIDB4ZDY0NSwgMHgwMTgwLAogCTB4OTI4NiwgMHgwMDAxLCAweDExNjgsIDB4NjAwNCwgMHg5MDg2LCAweDAwMDQsIDB4MTE0OCwgMHgwODBjLAotCTB4MzJmYiwgMHgwODBjLCAweGQzNzIsIDB4MDBjNiwgMHgwODBjLCAweGFmODksIDB4MDBjZSwgMHgwMDYwLAotCTB4MDgwYywgMHhkMDQwLCAweDAxNDgsIDB4MDgwYywgMHhjZTRhLCAweDExMTAsIDB4MDgwYywgMHhiOTNjLAotCTB4MDBjNiwgMHgwODBjLCAweGFmNGUsIDB4MDBjZSwgMHg5Y2UwLCAweDAwMWMsIDB4NzA2OCwgMHg5YzAyLAorCTB4MzMxNSwgMHgwODBjLCAweGQ2NWEsIDB4MDBjNiwgMHgwODBjLCAweGIxYTcsIDB4MDBjZSwgMHgwMDYwLAorCTB4MDgwYywgMHhkMzI4LCAweDAxNDgsIDB4MDgwYywgMHhkMTMyLCAweDExMTAsIDB4MDgwYywgMHhiYjVjLAorCTB4MDBjNiwgMHgwODBjLCAweGIxNmMsIDB4MDBjZSwgMHg5Y2UwLCAweDAwMWMsIDB4NzA2OCwgMHg5YzAyLAogCTB4MTIwOCwgMHgwOGEwLCAweDAxMmUsIDB4MDAwZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LAogCTB4MDBlNiwgMHgwMGM2LCAweDAwMTYsIDB4OTE4OCwgMHgxMDAwLCAweDIxMGMsIDB4ODFmZiwgMHgwMTI4LAotCTB4MjA2MSwgMHgxYjNhLCAweDYxMTIsIDB4MDgwYywgMHgzMmZiLCAweDkwMDYsIDB4MDAxMCwgMHg5MDg1LAorCTB4MjA2MSwgMHgxYjM5LCAweDYxMTIsIDB4MDgwYywgMHgzMzE1LCAweDkwMDYsIDB4MDAxMCwgMHg5MDg1LAogCTB4MDAwMSwgMHgwMDFlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweGFlZjgsIDB4MDFiMCwgMHg2NjVlLCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLAotCTB4NTgyOCwgMHgwMTE4LCAweDA4MGMsIDB4Y2Q2NiwgMHgwMTY4LCAweDA4MGMsIDB4ZDBjZSwgMHg2MDIzLAotCTB4MDAwMywgMHgyMDA5LCAweDAwNGIsIDB4MDgwYywgMHhhZmVjLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLAorCTB4ODAwMCwgMHgwODBjLCAweGIxMTYsIDB4MDFiMCwgMHg2NjVlLCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLAorCTB4NTg0OCwgMHgwMTE4LCAweDA4MGMsIDB4ZDA0ZSwgMHgwMTY4LCAweDA4MGMsIDB4ZDNiNiwgMHg2MDIzLAorCTB4MDAwMywgMHgyMDA5LCAweDAwNGIsIDB4MDgwYywgMHhiMjBhLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLAogCTB4MDBjZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4YmFhMCwgMHgwODBjLCAweGFmYmYsIDB4MDU4MCwgMHg2MDVmLCAweDAwMDAsIDB4MmIwMCwgMHg2MDEyLAotCTB4MDgwYywgMHhkMGNlLCAweDYwMjMsIDB4MDAwMywgMHgwMDE2LCAweDA4MGMsIDB4YWFmNywgMHgwODBjLAotCTB4OTViOSwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5NDc2LCAweDJjMDgsIDB4MDgwYywgMHhlNDY1LAotCTB4MDA3ZSwgMHgwODBjLCAweGFiMTMsIDB4MDAxZSwgMHhkMTg0LCAweDAxMjgsIDB4MDgwYywgMHhhZjRlLAotCTB4OTA4NSwgMHgwMDAxLCAweDAwNzAsIDB4MDgwYywgMHg1ODI4LCAweDAxMjgsIDB4ZDE4YywgMHgxMTcwLAotCTB4MDgwYywgMHhjZDY2LCAweDAxNDgsIDB4MjAwOSwgMHgwMDRjLCAweDA4MGMsIDB4YWZlYywgMHg5MDg1LAorCTB4YmFhMCwgMHgwODBjLCAweGIxZGQsIDB4MDU4MCwgMHg2MDVmLCAweDAwMDAsIDB4MmIwMCwgMHg2MDEyLAorCTB4MDgwYywgMHhkM2I2LCAweDYwMjMsIDB4MDAwMywgMHgwMDE2LCAweDA4MGMsIDB4YWNmYywgMHgwODBjLAorCTB4OTdiMCwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg5NjZkLCAweDJjMDgsIDB4MDgwYywgMHhlNzVkLAorCTB4MDA3ZSwgMHgwODBjLCAweGFkMTgsIDB4MDAxZSwgMHhkMTg0LCAweDAxMjgsIDB4MDgwYywgMHhiMTZjLAorCTB4OTA4NSwgMHgwMDAxLCAweDAwNzAsIDB4MDgwYywgMHg1ODQ4LCAweDAxMjgsIDB4ZDE4YywgMHgxMTcwLAorCTB4MDgwYywgMHhkMDRlLCAweDAxNDgsIDB4MjAwOSwgMHgwMDRjLCAweDA4MGMsIDB4YjIwYSwgMHg5MDg1LAogCTB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MjkwMCwgMHg2MDE2LAogCTB4MGM5MCwgMHgyMDA5LCAweDAwNGQsIDB4MDAxMCwgMHgyMDA5LCAweDAwNGUsIDB4MDBmNiwgMHgwMGM2LAotCTB4MDA0NiwgMHgwMDE2LCAweDA4MGMsIDB4YWVmOCwgMHgyYzc4LCAweDA1YTAsIDB4N2U1ZSwgMHgyYjAwLAotCTB4NzgxMiwgMHg3ODIzLCAweDAwMDMsIDB4MDAxNiwgMHgyMDIxLCAweDAwMDUsIDB4MDgwYywgMHhjZDc4LAorCTB4MDA0NiwgMHgwMDE2LCAweDA4MGMsIDB4YjExNiwgMHgyYzc4LCAweDA1YTAsIDB4N2U1ZSwgMHgyYjAwLAorCTB4NzgxMiwgMHg3ODIzLCAweDAwMDMsIDB4MDAxNiwgMHgyMDIxLCAweDAwMDUsIDB4MDgwYywgMHhkMDYwLAogCTB4MDAxZSwgMHg5MTg2LCAweDAwNGQsIDB4MDExOCwgMHg5MTg2LCAweDAwNGUsIDB4MDE0OCwgMHgyMDAxLAotCTB4MTk4MSwgMHgyMDBjLCAweGQxZmMsIDB4MDE2OCwgMHgyZjYwLCAweDA4MGMsIDB4YWY0ZSwgMHgwMGQwLAotCTB4MjAwMSwgMHgxOTgwLCAweDIwMGMsIDB4ZDFmYywgMHgwMTIwLCAweDJmNjAsIDB4MDgwYywgMHhhZjRlLAotCTB4MDA4OCwgMHgyZjYwLCAweDA4MGMsIDB4NTgyOCwgMHgwMTM4LCAweGQxOGMsIDB4MTExOCwgMHgwNGYxLAotCTB4MDE0OCwgMHgwMDEwLCAweDI5MDAsIDB4NzgxNiwgMHgwMDFlLCAweDAwMTYsIDB4MDgwYywgMHhhZmVjLAorCTB4MTk4MCwgMHgyMDBjLCAweGQxZmMsIDB4MDE2OCwgMHgyZjYwLCAweDA4MGMsIDB4YjE2YywgMHgwMGQwLAorCTB4MjAwMSwgMHgxOTdmLCAweDIwMGMsIDB4ZDFmYywgMHgwMTIwLCAweDJmNjAsIDB4MDgwYywgMHhiMTZjLAorCTB4MDA4OCwgMHgyZjYwLCAweDA4MGMsIDB4NTg0OCwgMHgwMTM4LCAweGQxOGMsIDB4MTExOCwgMHgwNGYxLAorCTB4MDE0OCwgMHgwMDEwLCAweDI5MDAsIDB4NzgxNiwgMHgwMDFlLCAweDAwMTYsIDB4MDgwYywgMHhiMjBhLAogCTB4OTA4NSwgMHgwMDAxLCAweDAwMWUsIDB4MDA0ZSwgMHgwMGNlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LAotCTB4MDBjNiwgMHgwMDQ2LCAweDA4MGMsIDB4YWVmOCwgMHgyYzc4LCAweDA1MDgsIDB4N2U1ZSwgMHgyYjAwLAorCTB4MDBjNiwgMHgwMDQ2LCAweDA4MGMsIDB4YjExNiwgMHgyYzc4LCAweDA1MDgsIDB4N2U1ZSwgMHgyYjAwLAogCTB4NzgxMiwgMHg3ODIzLCAweDAwMDMsIDB4MDA5NiwgMHgyMDIxLCAweDAwMDQsIDB4MDQ4OSwgMHgwMDllLAotCTB4MjAwMSwgMHgxOTdmLCAweDIwMGMsIDB4ZDFmYywgMHgwMTIwLCAweDJmNjAsIDB4MDgwYywgMHhhZjRlLAotCTB4MDA2MCwgMHgyZjYwLCAweDA4MGMsIDB4NTgyOCwgMHgwMTIwLCAweGQxOGMsIDB4MTE2MCwgMHgwMDcxLAotCTB4MDEzMCwgMHgyMDA5LCAweDAwNTIsIDB4MDgwYywgMHhhZmVjLCAweDkwODUsIDB4MDAwMSwgMHgwMDRlLAorCTB4MjAwMSwgMHgxOTdlLCAweDIwMGMsIDB4ZDFmYywgMHgwMTIwLCAweDJmNjAsIDB4MDgwYywgMHhiMTZjLAorCTB4MDA2MCwgMHgyZjYwLCAweDA4MGMsIDB4NTg0OCwgMHgwMTIwLCAweGQxOGMsIDB4MTE2MCwgMHgwMDcxLAorCTB4MDEzMCwgMHgyMDA5LCAweDAwNTIsIDB4MDgwYywgMHhiMjBhLCAweDkwODUsIDB4MDAwMSwgMHgwMDRlLAogCTB4MDBjZSwgMHgwMGZlLCAweDAwMDUsIDB4MjkwMCwgMHg3ODE2LCAweDBjOTgsIDB4MDBjNiwgMHgwODBjLAotCTB4NGJjOCwgMHgwMGNlLCAweDExMjAsIDB4MDgwYywgMHhhZjRlLCAweDkwMDYsIDB4MDAwNSwgMHhhODY3LAorCTB4NGM0MSwgMHgwMGNlLCAweDExMjAsIDB4MDgwYywgMHhiMTZjLCAweDkwMDYsIDB4MDAwNSwgMHhhODY3LAogCTB4MDAwMCwgMHhhODZiLCAweDgwMDAsIDB4MjkwMCwgMHg2MDE2LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LAotCTB4MDA5NiwgMHgwMDc2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4YWFmNywgMHgwODBjLAotCTB4Njk2MywgMHgwMTU4LCAweDIwMDEsIDB4Y2Q3ZiwgMHgwMDA2LCAweDkwMGUsIDB4MjQwMCwgMHgwODBjLAotCTB4NzE1ZCwgMHgwODBjLCAweDZmMTEsIDB4MDAwZSwgMHgwODA3LCAweDI0MTgsIDB4MDgwYywgMHg5N2JjLAorCTB4MDA5NiwgMHgwMDc2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4YWNmYywgMHgwODBjLAorCTB4Njk5ZCwgMHgwMTU4LCAweDIwMDEsIDB4ZDA2NywgMHgwMDA2LCAweDkwMGUsIDB4MjQwMCwgMHgwODBjLAorCTB4NzI1ZSwgMHgwODBjLCAweDcwMTIsIDB4MDAwZSwgMHgwODA3LCAweDI0MTgsIDB4MDgwYywgMHg5OWIzLAogCTB4YmFhMCwgMHgwMDg2LCAweDIwNDEsIDB4MDAwMSwgMHgyMDM5LCAweDAwMDEsIDB4MjYwOCwgMHgwODBjLAotCTB4OTVkMywgMHgwMDhlLCAweDA4MGMsIDB4OTQ3NiwgMHgyZjA4LCAweDI2NDgsIDB4MDgwYywgMHhlNDY1LAotCTB4YjkzYywgMHg4MWZmLCAweDA5MGMsIDB4OTZhYywgMHgwODBjLCAweGFiMTMsIDB4MDEyZSwgMHgwMDdlLAotCTB4MDA5ZSwgMHgwMDA1LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhhZWY4LAotCTB4MDE5MCwgMHg2NjBhLCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGQwY2UsIDB4NjAyMywgMHgwMDAxLAotCTB4MjkwMCwgMHg2MDE2LCAweDIwMDksIDB4MDAxZiwgMHgwODBjLCAweGFmZWMsIDB4OTA4NSwgMHgwMDAxLAorCTB4OTdjYSwgMHgwMDhlLCAweDA4MGMsIDB4OTY2ZCwgMHgyZjA4LCAweDI2NDgsIDB4MDgwYywgMHhlNzVkLAorCTB4YjkzYywgMHg4MWZmLCAweDA5MGMsIDB4OThhMywgMHgwODBjLCAweGFkMTgsIDB4MDEyZSwgMHgwMDdlLAorCTB4MDA5ZSwgMHgwMDA1LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhiMTE2LAorCTB4MDE5MCwgMHg2NjBhLCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGQzYjYsIDB4NjAyMywgMHgwMDAxLAorCTB4MjkwMCwgMHg2MDE2LCAweDIwMDksIDB4MDAxZiwgMHgwODBjLCAweGIyMGEsIDB4OTA4NSwgMHgwMDAxLAogCTB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweGFmYmYsIDB4MDFiOCwgMHg2NjBhLCAweDJiMDgsIDB4NjExMiwgMHgwODBjLAotCTB4ZDBjZSwgMHg2MDIzLCAweDAwMDgsIDB4MjkwMCwgMHg2MDE2LCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLAotCTB4MTdhMSwgMHgwMGZlLCAweDIwMDksIDB4MDAyMSwgMHgwODBjLCAweGFmZWMsIDB4OTA4NSwgMHgwMDAxLAorCTB4ODAwMCwgMHgwODBjLCAweGIxZGQsIDB4MDFiOCwgMHg2NjBhLCAweDJiMDgsIDB4NjExMiwgMHgwODBjLAorCTB4ZDNiNiwgMHg2MDIzLCAweDAwMDgsIDB4MjkwMCwgMHg2MDE2LCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLAorCTB4MTdhZCwgMHgwMGZlLCAweDIwMDksIDB4MDAyMSwgMHgwODBjLCAweGIyMGEsIDB4OTA4NSwgMHgwMDAxLAogCTB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDIwMDksIDB4MDAzZCwgMHgwMGM2LAotCTB4MDEyNiwgMHgwMDE2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGFlZjgsIDB4MDE5OCwgMHg2NjBhLAotCTB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDBjZSwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LAotCTB4MDAxZSwgMHgwMDE2LCAweDA4MGMsIDB4YWZlYywgMHg5MDg1LCAweDAwMDEsIDB4MDAxZSwgMHgwMTJlLAorCTB4MDEyNiwgMHgwMDE2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIxMTYsIDB4MDE5OCwgMHg2NjBhLAorCTB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDNiNiwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LAorCTB4MDAxZSwgMHgwMDE2LCAweDA4MGMsIDB4YjIwYSwgMHg5MDg1LCAweDAwMDEsIDB4MDAxZSwgMHgwMTJlLAogCTB4MDBjZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNkMCwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHhhZmJmLCAweDAxODgsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDBjZSwgMHg2MDIzLAotCTB4MDAwMSwgMHgyOTAwLCAweDYwMTYsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4YWZlYywgMHg5MDg1LAorCTB4MDgwYywgMHhiMWRkLCAweDAxODgsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDNiNiwgMHg2MDIzLAorCTB4MDAwMSwgMHgyOTAwLCAweDYwMTYsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4YjIwYSwgMHg5MDg1LAogCTB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MjAwOSwgMHgwMDQ0LAogCTB4MDgzMCwgMHgyMDA5LCAweDAwNDksIDB4MDgxOCwgMHgwMDI2LCAweDAwYjYsIDB4NjIxMCwgMHgyMjU4LAogCTB4YmEzYywgMHg4MmZmLCAweDAxMTgsIDB4ODIxMSwgMHhiYTNlLCAweDExNDAsIDB4YjhkMCwgMHg5MDA1LApAQCAtNjM4NCw2MiArNjQ3Nyw2MiBAQAogCTB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4NjAwNCwgMHg5MDhlLCAweDAwMDIsIDB4MDE0MCwgMHg5MDhlLAogCTB4MDAwMywgMHgwMTI4LCAweDkwOGUsIDB4MDAwNCwgMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLAogCTB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDA4NiwgMHgwMDk2LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA0LAotCTB4MDFhOCwgMHg2MDE0LCAweDkwNGQsIDB4MDgwYywgMHhjYzMzLCAweDAxODAsIDB4YTg2NCwgMHg5MDg2LAorCTB4MDFhOCwgMHg2MDE0LCAweDkwNGQsIDB4MDgwYywgMHhjZjFiLCAweDAxODAsIDB4YTg2NCwgMHg5MDg2LAogCTB4MDEzOSwgMHgwMTcwLCAweDYwMjAsIDB4OTBjNiwgMHgwMDAzLCAweDAxNDAsIDB4OTBjNiwgMHgwMDAyLAogCTB4MDEyOCwgMHhhODY4LCAweGQwZmMsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLAogCTB4MDA5ZSwgMHgwMDhlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLAotCTB4MDgwYywgMHhhZmJmLCAweDAxOTgsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDBjZSwgMHg2MDIzLAotCTB4MDAwMSwgMHgyOTAwLCAweDYwMTYsIDB4MDgwYywgMHgzMmZiLCAweDIwMDksIDB4MDAyOCwgMHgwODBjLAotCTB4YWZlYywgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LAorCTB4MDgwYywgMHhiMWRkLCAweDAxOTgsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4ZDNiNiwgMHg2MDIzLAorCTB4MDAwMSwgMHgyOTAwLCAweDYwMTYsIDB4MDgwYywgMHgzMzE1LCAweDIwMDksIDB4MDAyOCwgMHgwODBjLAorCTB4YjIwYSwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LAogCTB4OTE4NiwgMHgwMDE1LCAweDExYTgsIDB4MjAxMSwgMHgxODI0LCAweDIyMDQsIDB4OTA4NiwgMHgwMDc0LAotCTB4MTE3OCwgMHgwMGI2LCAweDA4MGMsIDB4YmI5MiwgMHgwMGJlLCAweDA4MGMsIDB4YmRiNywgMHg2MDAzLAotCTB4MDAwMSwgMHg2MDA3LCAweDAwMjksIDB4MDgwYywgMHg5NDI3LCAweDA4MGMsIDB4OThiYywgMHgwMDc4LAorCTB4MTE3OCwgMHgwMGI2LCAweDA4MGMsIDB4YmUwOSwgMHgwMGJlLCAweDA4MGMsIDB4YzA4NSwgMHg2MDAzLAorCTB4MDAwMSwgMHg2MDA3LCAweDAwMjksIDB4MDgwYywgMHg5NjFlLCAweDA4MGMsIDB4OWFiMywgMHgwMDc4LAogCTB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2OCwgMHgwMDllLCAweGQwZmMsIDB4MDE0OCwgMHgyMDAxLAotCTB4MDAwMSwgMHgwODBjLCAweGQyOTQsIDB4MDgwYywgMHhiOTNjLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDA1LAotCTB4MDA5NiwgMHg2MDE0LCAweDkwNGQsIDB4MDkwYywgMHgwZDc5LCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLAorCTB4MDAwMSwgMHgwODBjLCAweGQ1N2MsIDB4MDgwYywgMHhiYjVjLCAweDA4MGMsIDB4YjE2YywgMHgwMDA1LAorCTB4MDA5NiwgMHg2MDE0LCAweDkwNGQsIDB4MDkwYywgMHgwZDg1LCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLAogCTB4MDAwMCwgMHhhODk3LCAweDQwMDUsIDB4YTg5YiwgMHgwMDA0LCAweGE4NjcsIDB4MDEzOSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmYxMSwgMHgwMTJlLCAweDAwOWUsIDB4MDgwYywgMHhhZjRlLAorCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NzAxMiwgMHgwMTJlLCAweDAwOWUsIDB4MDgwYywgMHhiMTZjLAogCTB4MGMzMCwgMHgwMDk2LCAweDkxODYsIDB4MDAxNiwgMHgxMTI4LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLAotCTB4NjZjOSwgMHgwMGU4LCAweDkxODYsIDB4MDAxNSwgMHgxNTEwLCAweDIwMTEsIDB4MTgyNCwgMHgyMjA0LAotCTB4OTA4NiwgMHgwMDE0LCAweDExZTAsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4MDgwYywgMHg2ODFlLAotCTB4MDBiZSwgMHgwODBjLCAweGJlOGQsIDB4MTE5OCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODkwLAotCTB4MDBiZSwgMHg5MDA1LCAweDAxNjAsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NjZjOSwgMHg2MDE0LAotCTB4MjA0OCwgMHhhODY4LCAweGQwZmMsIDB4MDE3MCwgMHgwODBjLCAweGIzNWUsIDB4MDA0OCwgMHg2MDE0LAotCTB4MjA0OCwgMHhhODY4LCAweGQwZmMsIDB4MDUyOCwgMHgwODBjLCAweGI5M2MsIDB4MDgwYywgMHhhZjRlLAotCTB4MDA5ZSwgMHgwMDA1LCAweDYwMTQsIDB4NjMxMCwgMHgyMzU4LCAweDkwNGQsIDB4MDkwYywgMHgwZDc5LAorCTB4NjZmYSwgMHgwMGU4LCAweDkxODYsIDB4MDAxNSwgMHgxNTEwLCAweDIwMTEsIDB4MTgyNCwgMHgyMjA0LAorCTB4OTA4NiwgMHgwMDE0LCAweDExZTAsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4MDgwYywgMHg2ODRmLAorCTB4MDBiZSwgMHgwODBjLCAweGMxNWIsIDB4MTE5OCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODkwLAorCTB4MDBiZSwgMHg5MDA1LCAweDAxNjAsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NjZmYSwgMHg2MDE0LAorCTB4MjA0OCwgMHhhODY4LCAweGQwZmMsIDB4MDE3MCwgMHgwODBjLCAweGI1N2MsIDB4MDA0OCwgMHg2MDE0LAorCTB4MjA0OCwgMHhhODY4LCAweGQwZmMsIDB4MDUyOCwgMHgwODBjLCAweGJiNWMsIDB4MDgwYywgMHhiMTZjLAorCTB4MDA5ZSwgMHgwMDA1LCAweDYwMTQsIDB4NjMxMCwgMHgyMzU4LCAweDkwNGQsIDB4MDkwYywgMHgwZDg1LAogCTB4YTg3YiwgMHgwMDAwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDAsIDB4OTAwZSwgMHgwODBjLAotCTB4NmE3NCwgMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHhhOTlhLAotCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2ZjExLCAweDAxMmUsIDB4MDgwYywgMHhhZjRlLAotCTB4MDhmOCwgMHg2MDE0LCAweDkwNGQsIDB4MDkwYywgMHgwZDc5LCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLAorCTB4NmFhZSwgMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHhhOTlhLAorCTB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg3MDEyLCAweDAxMmUsIDB4MDgwYywgMHhiMTZjLAorCTB4MDhmOCwgMHg2MDE0LCAweDkwNGQsIDB4MDkwYywgMHgwZDg1LCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLAogCTB4MDAwMCwgMHhhODk3LCAweDQwMDUsIDB4YTg5YiwgMHgwMDA0LCAweGE4NjcsIDB4MDEzOSwgMHgwMTI2LAotCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NmYxMSwgMHgwMTJlLCAweDA4MGMsIDB4YWY0ZSwgMHgwODQwLAorCTB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NzAxMiwgMHgwMTJlLCAweDA4MGMsIDB4YjE2YywgMHgwODQwLAogCTB4YTg3OCwgMHg5MDg2LCAweDAwMDUsIDB4MTEwOCwgMHgwMDA5LCAweDAwMDUsIDB4YTg4MCwgMHhjMGFkLAogCTB4YTg4MiwgMHgwMDA1LCAweDYwNGIsIDB4MDAwMCwgMHg2MDE3LCAweDAwMDAsIDB4NjAwMywgMHgwMDAxLAotCTB4NjAwNywgMHgwMDUwLCAweDIwMDksIDB4ODAyMywgMHgwODBjLCAweDk0MjAsIDB4MDAwNSwgMHgwMGM2LAorCTB4NjAwNywgMHgwMDUwLCAweDIwMDksIDB4ODAyMywgMHgwODBjLCAweDk2MTcsIDB4MDAwNSwgMHgwMGM2LAogCTB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MDEzMCwgMHgwMDY2LAotCTB4NjAyMCwgMHg5MDg0LCAweDAwMGYsIDB4MDAxYiwgMHgwMDZlLCAweDAwY2UsIDB4MDAwNSwgMHhjOTMwLAotCTB4Y2Y3MSwgMHhjZjcxLCAweGNmNzQsIDB4ZTdlNCwgMHhlN2ZmLCAweGU4MDIsIDB4YzkzMCwgMHhjOTMwLAotCTB4YzkzMCwgMHhjOTMwLCAweGM5MzAsIDB4YzkzMCwgMHhjOTMwLCAweGM5MzAsIDB4YzkzMCwgMHgwODBjLAotCTB4MGQ3OSwgMHhhMDAxLCAweGEwMDEsIDB4MDAwNSwgMHgwMDk2LCAweDYwMTQsIDB4OTA0ZCwgMHgwMTE4LAorCTB4NjAyMCwgMHg5MDg0LCAweDAwMGYsIDB4MDAxYiwgMHgwMDZlLCAweDAwY2UsIDB4MDAwNSwgMHhjYmY5LAorCTB4ZDI1OSwgMHhkMjU5LCAweGQyNWMsIDB4ZWFkYywgMHhlYWY3LCAweGVhZmEsIDB4Y2JmOSwgMHhjYmY5LAorCTB4Y2JmOSwgMHhjYmY5LCAweGNiZjksIDB4Y2JmOSwgMHhjYmY5LCAweGNiZjksIDB4Y2JmOSwgMHgwODBjLAorCTB4MGQ4NSwgMHhhMDAxLCAweGEwMDEsIDB4MDAwNSwgMHgwMDk2LCAweDYwMTQsIDB4OTA0ZCwgMHgwMTE4LAogCTB4YTg3YywgMHhkMGU0LCAweDExMTAsIDB4MDA5ZSwgMHgwMDEwLCAweDAwOWUsIDB4MDAwNSwgMHg2MDEwLAogCTB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDA1NTAsIDB4MjAwMSwgMHgxODM0LAotCTB4MjAwNCwgMHg5MDA1LCAweDE1NDAsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4YWVmOCwgMHgwNTA4LAotCTB4NzgxMCwgMHg2MDEyLCAweDA4MGMsIDB4ZDBjZSwgMHg3ODIwLCAweDkwODYsIDB4MDAwMywgMHgwMTI4LAorCTB4MjAwNCwgMHg5MDA1LCAweDE1NDAsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4YjExNiwgMHgwNTA4LAorCTB4NzgxMCwgMHg2MDEyLCAweDA4MGMsIDB4ZDNiNiwgMHg3ODIwLCAweDkwODYsIDB4MDAwMywgMHgwMTI4LAogCTB4NzgwOCwgMHg2MDNhLCAweDJmMDAsIDB4NjAzZSwgMHgwMDIwLCAweDc4MDgsIDB4NjAzZSwgMHgyZjAwLAogCTB4NjAzYSwgMHg2MDJlLCAweDYwMjMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMzUsIDB4NjAwMywgMHgwMDAxLAotCTB4Nzk1YywgMHg2MTVlLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk0MjAsIDB4MmY2MCwgMHgwMGZlLAotCTB4MDAwNSwgMHgyZjYwLCAweDAwZmUsIDB4MjAwMSwgMHgxOTg5LCAweDIwMDQsIDB4NjA0YSwgMHgwMDA1LAorCTB4Nzk1YywgMHg2MTVlLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk2MTcsIDB4MmY2MCwgMHgwMGZlLAorCTB4MDAwNSwgMHgyZjYwLCAweDAwZmUsIDB4MjAwMSwgMHgxOTg4LCAweDIwMDQsIDB4NjA0YSwgMHgwMDA1LAogCTB4MDAxNiwgMHgwMDk2LCAweDY4MTQsIDB4MjA0OCwgMHg2ODFjLCAweGQwZmMsIDB4YzBmYywgMHg2ODFlLAogCTB4YTg3YywgMHgxMTA4LCAweGQwZTQsIDB4MDE4MCwgMHhjMGU0LCAweGE4N2UsIDB4YTg3NywgMHgwMDAwLAogCTB4YTg5MywgMHgwMDAwLCAweGE4OGYsIDB4MDAwMCwgMHhkMGNjLCAweDAxMzAsIDB4YzBjYywgMHhhODdlLAotCTB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsIDB4MGZmZiwgMHg2ODMwLCAweDYwMzYsIDB4OTA4ZSwgMHgwMDAxLAorCTB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsIDB4MTAwYiwgMHg2ODMwLCAweDYwMzYsIDB4OTA4ZSwgMHgwMDAxLAogCTB4MDE0OCwgMHg2ODAzLCAweDAwMDIsIDB4OTA4NiwgMHgwMDA1LCAweDAxNzAsIDB4OTAwNiwgMHg2MDJlLAogCTB4NjAzMiwgMHgwMGQwLCAweDY4MWMsIDB4YzA4NSwgMHg2ODFlLCAweDY4MDMsIDB4MDAwNCwgMHg2ODI0LAogCTB4YzBmNCwgMHg5MDg1LCAweDBjMDAsIDB4NjgyNiwgMHg2ODE0LCAweDIwNDgsIDB4YThhYywgMHg2OTM4LAogCTB4OTEwMiwgMHhhOGIwLCAweDY5M2MsIDB4OTEwMywgMHgxZTQ4LCAweDY4M2MsIDB4NjAyZSwgMHg2ODM4LAogCTB4OTA4NCwgMHhmZmZjLCAweDY4M2EsIDB4NjAzMiwgMHgyZDAwLCAweDYwM2EsIDB4NjgwOCwgMHg2MDNlLAogCTB4NjkxMCwgMHg2MTEyLCAweDY5NWMsIDB4NjE1ZSwgMHg2MDIzLCAweDAwMDEsIDB4NjAwNywgMHgwMDM5LAotCTB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk0MjAsIDB4MDA5ZSwgMHgwMDFlLAorCTB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk2MTcsIDB4MDA5ZSwgMHgwMDFlLAogCTB4MDAwNSwgMHg2MDI0LCAweGQwZDQsIDB4MDUxMCwgMHhkMGY0LCAweDExZjgsIDB4NjAzOCwgMHg5NDBhLAogCTB4NjAzYywgMHg5MzAzLCAweDAyMzAsIDB4OTEwNSwgMHgwMTIwLCAweDYwMjQsIDB4YzBkNCwgMHhjMGY1LAogCTB4MDA5OCwgMHg2NDNhLCAweDYzM2UsIDB4YWMzZSwgMHhhYjQyLCAweDAwNDYsIDB4MDAzNiwgMHgyNDAwLApAQCAtNjQ1MCw2MTMgKzY1NDMsNjE1IEBACiAJMHgwMWEwLCAweDkwOGUsIDB4MDAzNiwgMHgwMTg4LCAweDkwOGUsIDB4MDAzNywgMHgwMTcwLCAweDkwOGUsCiAJMHgwMDM4LCAweDAxNTgsIDB4OTA4ZSwgMHgwMDM5LCAweDAxNDAsIDB4OTA4ZSwgMHgwMDNhLCAweDAxMjgsCiAJMHg5MDhlLCAweDAwM2IsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsCi0JMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwZTYsIDB4MjAwMSwgMHgxOTgzLCAweDIwMGMsCi0JMHg4MDAwLCAweDIwMTQsIDB4MjAwMSwgMHgwMDMyLCAweDA4MGMsIDB4OTM2NCwgMHgyMDAxLCAweDE5ODcsCi0JMHg4MmZmLCAweDExMTAsIDB4MjAxMSwgMHgwMDE0LCAweDIyMDIsIDB4MjAwMSwgMHgxOTg1LCAweDIwMGMsCi0JMHg4MDAwLCAweDIwMTQsIDB4MjA3MSwgMHgxOTZkLCAweDcxMWEsIDB4NzIxZSwgMHgyMDAxLCAweDAwNjQsCi0JMHgwODBjLCAweDkzNjQsIDB4MjAwMSwgMHgxOTg4LCAweDgyZmYsIDB4MTExMCwgMHgyMDExLCAweDAwMTQsCi0JMHgyMjAyLCAweDIwMDEsIDB4MTk4OSwgMHg5Mjg4LCAweDAwMGEsIDB4MjEwMiwgMHgyMDAxLCAweDAwMTcsCi0JMHgwODBjLCAweGFhZTgsIDB4MjAwMSwgMHgxYTkxLCAweDIxMDIsIDB4MjAwMSwgMHgwMDMyLCAweDA4MGMsCi0JMHgxNmFkLCAweDA4MGMsIDB4NmJhZSwgMHgwMGVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMGU2LCAweDIwMDEsIDB4MTk4NywgMHgyMDAzLCAweDAwMjgsCi0JMHgyMDAxLCAweDE5ODgsIDB4MjAwMywgMHgwMDE0LCAweDIwNzEsIDB4MTk2ZCwgMHg3MDFiLCAweDAwMDAsCi0JMHg3MDFmLCAweDA3ZDAsIDB4MjAwMSwgMHgxOTg5LCAweDIwMDksIDB4MDAxZSwgMHgyMTAyLCAweDIwMDEsCi0JMHgwMDE3LCAweDA4MGMsIDB4YWFlOCwgMHgyMDAxLCAweDFhOTEsIDB4MjEwMiwgMHgyMDAxLCAweDAwMzIsCi0JMHgwODBjLCAweDE2YWQsIDB4MDBlZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDk2LCAweDYwNjAsCi0JMHg5MDRkLCAweDAxMTAsIDB4MDgwYywgMHgxMDdmLCAweDAwOWUsIDB4MDAwNSwgMHgwMDA1LCAweDAwYzYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGFlZjgsIDB4MDE4MCwgMHgyYjA4LCAweDYxMTIsCisJMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwZTYsIDB4MjAwMSwgMHgxOTgyLCAweDIwMGMsCisJMHg4MDAwLCAweDIwMTQsIDB4MjAwMSwgMHgwMDMyLCAweDA4MGMsIDB4OTU1YiwgMHgyMDAxLCAweDE5ODYsCisJMHg4MmZmLCAweDExMTAsIDB4MjAxMSwgMHgwMDE0LCAweDIyMDIsIDB4MjAwMSwgMHgxOTg0LCAweDIwMGMsCisJMHg4MDAwLCAweDIwMTQsIDB4MjA3MSwgMHgxOTZjLCAweDcxMWEsIDB4NzIxZSwgMHgyMDAxLCAweDAwNjQsCisJMHgwODBjLCAweDk1NWIsIDB4MjAwMSwgMHgxOTg3LCAweDgyZmYsIDB4MTExMCwgMHgyMDExLCAweDAwMTQsCisJMHgyMjAyLCAweDIwMDEsIDB4MTk4OCwgMHg5Mjg4LCAweDAwMGEsIDB4MjEwMiwgMHgyMDAxLCAweDAwMTcsCisJMHgwODBjLCAweGFjZWQsIDB4MjAwMSwgMHgxYTkwLCAweDIxMDIsIDB4MjAwMSwgMHgwMDMyLCAweDA4MGMsCisJMHgxNmI5LCAweDA4MGMsIDB4NmJmMiwgMHgwMGVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCisJMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMGU2LCAweDIwMDEsIDB4MTk4NiwgMHgyMDAzLCAweDAwMjgsCisJMHgyMDAxLCAweDE5ODcsIDB4MjAwMywgMHgwMDE0LCAweDIwNzEsIDB4MTk2YywgMHg3MDFiLCAweDAwMDAsCisJMHg3MDFmLCAweDA3ZDAsIDB4MjAwMSwgMHgxOTg4LCAweDIwMDksIDB4MDAxZSwgMHgyMTAyLCAweDIwMDEsCisJMHgwMDE3LCAweDA4MGMsIDB4YWNlZCwgMHgyMDAxLCAweDFhOTAsIDB4MjEwMiwgMHgyMDAxLCAweDAwMzIsCisJMHgwODBjLCAweDE2YjksIDB4MDBlZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDk2LCAweDYwNjAsCisJMHg5MDRkLCAweDAxMTAsIDB4MDgwYywgMHgxMDhiLCAweDAwOWUsIDB4MDAwNSwgMHgwMDA1LCAweDAwYzYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGIxMTYsIDB4MDE4MCwgMHgyYjA4LCAweDYxMTIsCiAJMHgwY2E5LCAweDYwMjMsIDB4MDAwMSwgMHgyOTAwLCAweDYwMTYsIDB4MjAwOSwgMHgwMDMzLCAweDA4MGMsCi0JMHhhZmVjLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsCisJMHhiMjBhLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsCiAJMHgwMDk2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweDE4MDAsIDB4OTE4NiwgMHgwMDE1LCAweDE1MjAsCiAJMHg3MDkwLCAweDkwODYsIDB4MDAxOCwgMHgwMTIwLCAweDcwOTAsIDB4OTA4NiwgMHgwMDE0LCAweDExZTAsCi0JMHg2MDE0LCAweDIwNDgsIDB4YWEzYywgMHhkMmU0LCAweDExNjAsIDB4MmM3OCwgMHgwODBjLCAweDk5OGMsCisJMHg2MDE0LCAweDIwNDgsIDB4YWEzYywgMHhkMmU0LCAweDExNjAsIDB4MmM3OCwgMHgwODBjLCAweDliODMsCiAJMHgwMWQ4LCAweDcwN2MsIDB4YWE1MCwgMHg5MjA2LCAweDExNjAsIDB4NzA4MCwgMHhhYTU0LCAweDkyMDYsCiAJMHgxMTQwLCAweDYyMTAsIDB4MDBiNiwgMHgyMjU4LCAweGJhYTAsIDB4MDBiZSwgMHg5MDBlLCAweDA4MGMsCi0JMHgzMzRhLCAweDA4MGMsIDB4YjM1ZSwgMHgwMDIwLCAweDA4MGMsIDB4YjkzYywgMHgwODBjLCAweGFmNGUsCisJMHgzMzY0LCAweDA4MGMsIDB4YjU3YywgMHgwMDIwLCAweDA4MGMsIDB4YmI1YywgMHgwODBjLCAweGIxNmMsCiAJMHgwMGZlLCAweDAwZWUsIDB4MDA5ZSwgMHgwMDA1LCAweDcwNjAsIDB4YWE1NCwgMHg5MjA2LCAweDBkNDgsCi0JMHgwYzgwLCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhhZWY4LCAweDAxODgsCi0JMHgyYjA4LCAweDYxMTIsIDB4MDgwYywgMHhkMGNlLCAweDYwMjMsIDB4MDAwMSwgMHgyOTAwLCAweDYwMTYsCi0JMHgyMDA5LCAweDAwNGQsIDB4MDgwYywgMHhhZmVjLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsCisJMHgwYzgwLCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhiMTE2LCAweDAxODgsCisJMHgyYjA4LCAweDYxMTIsIDB4MDgwYywgMHhkM2I2LCAweDYwMjMsIDB4MDAwMSwgMHgyOTAwLCAweDYwMTYsCisJMHgyMDA5LCAweDAwNGQsIDB4MDgwYywgMHhiMjBhLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsCiAJMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMTYsCi0JMHgwODBjLCAweGFlZjgsIDB4MDE4MCwgMHgyYjA4LCAweDYxMTIsIDB4MDgwYywgMHhkMGNlLCAweDYwMjMsCi0JMHgwMDAxLCAweDI5MDAsIDB4NjAxNiwgMHgwMDFlLCAweDA4MGMsIDB4YWZlYywgMHg5MDg1LCAweDAwMDEsCisJMHgwODBjLCAweGIxMTYsIDB4MDE4MCwgMHgyYjA4LCAweDYxMTIsIDB4MDgwYywgMHhkM2I2LCAweDYwMjMsCisJMHgwMDAxLCAweDI5MDAsIDB4NjAxNiwgMHgwMDFlLCAweDA4MGMsIDB4YjIwYSwgMHg5MDg1LCAweDAwMDEsCiAJMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDFlLCAweDkwMDYsIDB4MGNkMCwgMHgwMDE2LCAweDAwMjYsCiAJMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgwMDY2LCAweDAwOTYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsCiAJMHgxODAwLCAweDkxODYsIDB4MDAxNSwgMHgxNTY4LCAweDcxOTAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MTQsCi0JMHg4MDAzLCAweDkxMDYsIDB4MTUzMCwgMHgyMGUxLCAweDAwMDAsIDB4MjAwMSwgMHgxOWEyLCAweDIwMDMsCisJMHg4MDAzLCAweDkxMDYsIDB4MTUzMCwgMHgyMGUxLCAweDAwMDAsIDB4MjAwMSwgMHgxOWExLCAweDIwMDMsCiAJMHgwMDAwLCAweDYwMTQsIDB4MjA0OCwgMHhhODMwLCAweDIwYTgsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsCiAJMHg5MDk0LCAweDAwM2YsIDB4MjJlOCwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDFiLCAweDIwYTAsCi0JMHgyMDAxLCAweDE5YTIsIDB4MDAxNiwgMHgyMDBjLCAweDA4MGMsIDB4ZDliNywgMHgwMDFlLCAweGE4MDQsCisJMHgyMDAxLCAweDE5YTEsIDB4MDAxNiwgMHgyMDBjLCAweDA4MGMsIDB4ZGNhMSwgMHgwMDFlLCAweGE4MDQsCiAJMHg5MDA1LCAweDAxMTAsIDB4MjA0OCwgMHgwYzM4LCAweDYwMTQsIDB4MjA0OCwgMHhhODY3LCAweDAxMDMsCi0JMHgwMDEwLCAweDA4MGMsIDB4YjkzYywgMHgwODBjLCAweGFmNGUsIDB4MDBmZSwgMHgwMGVlLCAweDAwOWUsCisJMHgwMDEwLCAweDA4MGMsIDB4YmI1YywgMHgwODBjLCAweGIxNmMsIDB4MDBmZSwgMHgwMGVlLCAweDAwOWUsCiAJMHgwMDZlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwOTYsCiAJMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHgxODAwLCAweDkxODYsIDB4MDAxNSwgMHgxMWI4LCAweDcwOTAsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTE5OCwgMHg2MDE0LCAweDIwNDgsIDB4MmM3OCwgMHgwODBjLCAweDk5OGMsCisJMHg5MDg2LCAweDAwMDQsIDB4MTE5OCwgMHg2MDE0LCAweDIwNDgsIDB4MmM3OCwgMHgwODBjLCAweDliODMsCiAJMHgwMWE4LCAweDcwN2MsIDB4YWE3NCwgMHg5MjA2LCAweDExMzAsIDB4NzA4MCwgMHhhYTc4LCAweDkyMDYsCi0JMHgxMTEwLCAweDA4MGMsIDB4MzJmYiwgMHgwODBjLCAweGIzNWUsIDB4MDAyMCwgMHgwODBjLCAweGI5M2MsCi0JMHgwODBjLCAweGFmNGUsIDB4MDBmZSwgMHgwMGVlLCAweDAwOWUsIDB4MDAwNSwgMHg3MDYwLCAweGFhNzgsCisJMHgxMTEwLCAweDA4MGMsIDB4MzMxNSwgMHgwODBjLCAweGI1N2MsIDB4MDAyMCwgMHgwODBjLCAweGJiNWMsCisJMHgwODBjLCAweGIxNmMsIDB4MDBmZSwgMHgwMGVlLCAweDAwOWUsIDB4MDAwNSwgMHg3MDYwLCAweGFhNzgsCiAJMHg5MjA2LCAweDBkNzgsIDB4MGM4MCwgMHgwMDk2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweDE4MDAsCiAJMHg5MTg2LCAweDAwMTUsIDB4MTU1MCwgMHg3MDkwLCAweDkwODYsIDB4MDAwNCwgMHgxNTMwLCAweDYwMTQsCi0JMHgyMDQ4LCAweDJjNzgsIDB4MDgwYywgMHg5OThjLCAweDA1ZjAsIDB4NzA3YywgMHhhYWNjLCAweDkyMDYsCi0JMHgxMTgwLCAweDcwODAsIDB4YWFkMCwgMHg5MjA2LCAweDExNjAsIDB4MDgwYywgMHgzMmZiLCAweDAwMTYsCi0JMHhhOTk4LCAweGFhYjAsIDB4OTI4NCwgMHgxMDAwLCAweGMwZmQsIDB4MDgwYywgMHg1N2M5LCAweDAwMWUsCi0JMHgwMDEwLCAweDA4MGMsIDB4NTVhYywgMHgwODBjLCAweGNjMzMsIDB4MDUwOCwgMHhhODdiLCAweDAwMDAsCi0JMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDAwLCAweDAwODAsIDB4MDgwYywgMHhjYzMzLCAweDAxYjgsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHg1NWFjLCAweDFkNzAsIDB4YTg3YiwgMHgwMDMwLCAweGE4ODMsCisJMHgyMDQ4LCAweDJjNzgsIDB4MDgwYywgMHg5YjgzLCAweDA1ZjAsIDB4NzA3YywgMHhhYWNjLCAweDkyMDYsCisJMHgxMTgwLCAweDcwODAsIDB4YWFkMCwgMHg5MjA2LCAweDExNjAsIDB4MDgwYywgMHgzMzE1LCAweDAwMTYsCisJMHhhOTk4LCAweGFhYjAsIDB4OTI4NCwgMHgxMDAwLCAweGMwZmQsIDB4MDgwYywgMHg1N2U5LCAweDAwMWUsCisJMHgwMDEwLCAweDA4MGMsIDB4NTVjYywgMHgwODBjLCAweGNmMWIsIDB4MDUwOCwgMHhhODdiLCAweDAwMDAsCisJMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDAwLCAweDAwODAsIDB4MDgwYywgMHhjZjFiLCAweDAxYjgsCisJMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHg1NWNjLCAweDFkNzAsIDB4YTg3YiwgMHgwMDMwLCAweGE4ODMsCiAJMHgwMDAwLCAweGE4OTcsIDB4NDAwNSwgMHhhODliLCAweDAwMDQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHhhODY3LCAweDAxMzksIDB4MDgwYywgMHg2ZjExLCAweDAxMmUsIDB4MDgwYywgMHhhZjRlLCAweDAwZmUsCisJMHhhODY3LCAweDAxMzksIDB4MDgwYywgMHg3MDEyLCAweDAxMmUsIDB4MDgwYywgMHhiMTZjLCAweDAwZmUsCiAJMHgwMGVlLCAweDAwOWUsIDB4MDAwNSwgMHg3MDYwLCAweGFhZDAsIDB4OTIwNiwgMHgwOTMwLCAweDA4ODgsCiAJMHgwMDE2LCAweDAwMjYsIDB4YTg3YywgMHhkMGFjLCAweDAxNzgsIDB4YTkzOCwgMHhhYTM0LCAweDIxMDAsCiAJMHg5MjA1LCAweDAxNTAsIDB4YTg5MCwgMHg5MTA2LCAweDExMTgsIDB4YTg4YywgMHg5MjA2LCAweDAxMjAsCiAJMHhhOTkyLCAweGFhOGUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMGQ2LCAweDAwMzYsIDB4MDgwYywgMHhjYzMzLCAweDA5MDQsIDB4ZDI5MCwgMHgwMDk2LCAweDYzMTQsCisJMHgwMGQ2LCAweDAwMzYsIDB4MDgwYywgMHhjZjFiLCAweDA5MDQsIDB4ZDU3OCwgMHgwMDk2LCAweDYzMTQsCiAJMHgyMzQ4LCAweGE4N2EsIDB4YTk4MiwgMHg5MjllLCAweDQwMDAsIDB4MTU4MCwgMHg2MzEwLCAweDAwYzYsCi0JMHgyMzU4LCAweDIwMDksIDB4MDAwMCwgMHhhODY4LCAweGQwZjQsIDB4MTE0MCwgMHgwODBjLCAweDZhNzQsCisJMHgyMzU4LCAweDIwMDksIDB4MDAwMCwgMHhhODY4LCAweGQwZjQsIDB4MTE0MCwgMHgwODBjLCAweDZhYWUsCiAJMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHhhYTk2LCAweGE5OWEsCiAJMHgyMGE5LCAweDAwMDQsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDMxLCAweDIwYTAsCi0JMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMDYsIDB4MjA5OCwgMHgwODBjLCAweDBmY2EsCisJMHhiOGM0LCAweDIwZTAsIDB4YjhjOCwgMHg5MDgwLCAweDAwMDYsIDB4MjA5OCwgMHgwODBjLCAweDBmZDYsCiAJMHgyMGE5LCAweDAwMDQsIDB4YTg1YywgMHg5MDgwLCAweDAwMzUsIDB4MjBhMCwgMHhiOGM4LCAweDkwODAsCi0JMHgwMDBhLCAweDIwOTgsIDB4MDgwYywgMHgwZmNhLCAweDAwY2UsIDB4MDA5MCwgMHhhYTk2LCAweDM5MTgsCisJMHgwMDBhLCAweDIwOTgsIDB4MDgwYywgMHgwZmQ2LCAweDAwY2UsIDB4MDA5MCwgMHhhYTk2LCAweDM5MTgsCiAJMHg5Mzk4LCAweDAwMDcsIDB4MjMxYywgMHg2MDA0LCAweDkwODYsIDB4MDAxNiwgMHgwMTEwLCAweGE4OWIsCiAJMHgwMDA0LCAweGFiYTIsIDB4NjMxMCwgMHgyMzU4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweGE4OWUsCi0JMHhhODY4LCAweGMwZjQsIDB4YTg2YSwgMHgwODBjLCAweDZmMDUsIDB4NjAxNywgMHgwMDAwLCAweDAwOWUsCisJMHhhODY4LCAweGMwZjQsIDB4YTg2YSwgMHgwODBjLCAweDcwMDYsIDB4NjAxNywgMHgwMDAwLCAweDAwOWUsCiAJMHgwMDNlLCAweDAwZGUsIDB4MDBiZSwgMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwgMHgwMDQ2LCAweDAwYjYsCiAJMHgwMDk2LCAweDAwZjYsIDB4NjIxNCwgMHgyMjQ4LCAweDYyMTAsIDB4MjI1OCwgMHgyMDc5LCAweDAyNjAsCiAJMHg5MDk2LCAweDAwMDAsIDB4MTFhMCwgMHhiODE0LCAweDkwODQsIDB4MDBmZiwgMHg5MDBlLCAweDA4MGMsCi0JMHgyNmExLCAweDIxMTgsIDB4ODMxZiwgMHg5MzljLCAweGZmMDAsIDB4NzgzOCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MzFkLCAweDdjM2MsIDB4MjAxMSwgMHg4MDE4LCAweDA4MGMsIDB4NGMyOCwgMHgwMGE4LCAweDkwOTYsCisJMHgyNjhjLCAweDIxMTgsIDB4ODMxZiwgMHg5MzljLCAweGZmMDAsIDB4NzgzOCwgMHg5MDg0LCAweDAwZmYsCisJMHg5MzFkLCAweDdjM2MsIDB4MjAxMSwgMHg4MDE4LCAweDA4MGMsIDB4NGNhMSwgMHgwMGE4LCAweDkwOTYsCiAJMHgwMDAxLCAweDExNDgsIDB4ODlmZiwgMHgwMTgwLCAweGE4OWIsIDB4MDAwZCwgMHg3ODM4LCAweGE4YTYsCiAJMHg3ODNjLCAweGE4YWEsIDB4MDA0OCwgMHg5MDk2LCAweDAwMDIsIDB4MTEzMCwgMHhhODliLCAweDAwMGQsCiAJMHg3ODM4LCAweGE4YTYsIDB4NzgzYywgMHhhOGFhLCAweDAwZmUsIDB4MDA5ZSwgMHgwMGJlLCAweDAwNGUsCiAJMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGM2LCAweDAwMjYsIDB4MDAxNiwgMHg5MTg2LCAweDAwMzUsCi0JMHgwMTEwLCAweDZhMzgsIDB4MDAwOCwgMHg2YTJjLCAweDA4MGMsIDB4Y2MyMSwgMHgwMWYwLCAweDIyNjAsCisJMHgwMTEwLCAweDZhMzgsIDB4MDAwOCwgMHg2YTJjLCAweDA4MGMsIDB4Y2YwOSwgMHgwMWYwLCAweDIyNjAsCiAJMHg2MTIwLCAweDkxODYsIDB4MDAwMywgMHgwMTE4LCAweDkxODYsIDB4MDAwNiwgMHgxMTkwLCAweDY4MzgsCiAJMHg5MjA2LCAweDAxNDAsIDB4NjgzYywgMHg5MjA2LCAweDExNjAsIDB4NjEwOCwgMHg2ODM4LCAweDkxMDYsCiAJMHgxMTQwLCAweDAwMjAsIDB4NjAwOCwgMHg2OTNjLCAweDkxMDYsIDB4MTExOCwgMHg2MDEwLCAweDY5MTAsCiAJMHg5MTA2LCAweDAwMWUsIDB4MDAyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDBjYzgsCiAJMHhhOTc0LCAweGQxY2MsIDB4MDE5OCwgMHg5MThjLCAweDAwZmYsIDB4OTE4ZSwgMHgwMDAyLCAweDExNzAsCiAJMHhhOWE4LCAweDkxOGMsIDB4MDAwZiwgMHg5MThlLCAweDAwMDEsIDB4MTE0MCwgMHhhODdjLCAweGQwYWMsCi0JMHgwMTI4LCAweGE4MzQsIDB4YTkzOCwgMHg5MTE1LCAweDE5MGMsIDB4YzI0YiwgMHgwMDA1LCAweDAwMzYsCisJMHgwMTI4LCAweGE4MzQsIDB4YTkzOCwgMHg5MTE1LCAweDE5MGMsIDB4YzUxOSwgMHgwMDA1LCAweDAwMzYsCiAJMHgyMDE5LCAweDAwMDEsIDB4MDAxMCwgMHgwMDM2LCAweDkwMWUsIDB4MDQ5OSwgMHgwMWUwLCAweDA4MGMsCi0JMHhjYzMzLCAweDAxYzgsIDB4MDgwYywgMHhjZTI0LCAweDYwMzcsIDB4NDAwMCwgMHg2MDE0LCAweDYwMTcsCi0JMHgwMDAwLCAweDAwOTYsIDB4MjA0OCwgMHhhODdjLCAweDA4MGMsIDB4Y2U0YSwgMHgxMTE4LCAweDA4MGMsCi0JMHhiOTNjLCAweDAwNDAsIDB4YTg2NywgMHgwMTAzLCAweGE4NzcsIDB4MDAwMCwgMHg4M2ZmLCAweDExMjksCi0JMHgwODBjLCAweDZmMTEsIDB4MDA5ZSwgMHgwMDNlLCAweDAwMDUsIDB4YTg4MCwgMHhkMGI0LCAweDAxMjgsCisJMHhjZjFiLCAweDAxYzgsIDB4MDgwYywgMHhkMTBjLCAweDYwMzcsIDB4NDAwMCwgMHg2MDE0LCAweDYwMTcsCisJMHgwMDAwLCAweDAwOTYsIDB4MjA0OCwgMHhhODdjLCAweDA4MGMsIDB4ZDEzMiwgMHgxMTE4LCAweDA4MGMsCisJMHhiYjVjLCAweDAwNDAsIDB4YTg2NywgMHgwMTAzLCAweGE4NzcsIDB4MDAwMCwgMHg4M2ZmLCAweDExMjksCisJMHgwODBjLCAweDcwMTIsIDB4MDA5ZSwgMHgwMDNlLCAweDAwMDUsIDB4YTg4MCwgMHhkMGI0LCAweDAxMjgsCiAJMHhhODdiLCAweDAwMDYsIDB4YzBlYywgMHhhODgyLCAweDAwNDgsIDB4ZDBiYywgMHgwMTE4LCAweGE4N2IsCi0JMHgwMDAyLCAweDAwMjAsIDB4YTg3YiwgMHgwMDA1LCAweDA4MGMsIDB4Y2YzZSwgMHhhODc3LCAweDAwMDAsCisJMHgwMDAyLCAweDAwMjAsIDB4YTg3YiwgMHgwMDA1LCAweDA4MGMsIDB4ZDIyNiwgMHhhODc3LCAweDAwMDAsCiAJMHgwMDA1LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwZWMsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsCiAJMHgxODEwLCAweDIwMDQsIDB4ZDBmNCwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDE4MTAsCiAJMHgyMDA0LCAweGQwZTQsIDB4MDAwZSwgMHgwMDA1LCAweDAwMzYsIDB4MDA0NiwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGJiYTAsIDB4MDBiZSwgMHgyMDIxLCAweDAwMDcsIDB4MDgwYywgMHg0ZGRmLCAweDAwNGUsCi0JMHgwMDNlLCAweDAwMDUsIDB4MGM1MSwgMHgxZDgxLCAweDAwMDUsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsCi0JMHg2MDFhLCAweDAwMDUsIDB4MjAwMSwgMHgxOTg5LCAweDIwMDQsIDB4NjA0YSwgMHgwMDA1LCAweDA4MGMsCi0JMHhhZjRlLCAweDA4MDQsIDB4OThiYywgMHg2MTFjLCAweGQxZmMsIDB4YTk3YywgMHgxMTA4LCAweGQxZTQsCisJMHgyMDU4LCAweGJiYTAsIDB4MDBiZSwgMHgyMDIxLCAweDAwMDcsIDB4MDgwYywgMHg0ZTU4LCAweDAwNGUsCisJMHgwMDNlLCAweDAwMDUsIDB4MGM1MSwgMHgxZDgxLCAweDAwMDUsIDB4MjAwMSwgMHgxOTg2LCAweDIwMDQsCisJMHg2MDFhLCAweDAwMDUsIDB4MjAwMSwgMHgxOTg4LCAweDIwMDQsIDB4NjA0YSwgMHgwMDA1LCAweDA4MGMsCisJMHhiMTZjLCAweDA4MDQsIDB4OWFiMywgMHg2MTFjLCAweGQxZmMsIDB4YTk3YywgMHgxMTA4LCAweGQxZTQsCiAJMHgwMDA1LCAweDYwMWMsIDB4ZDBmYywgMHhhODdjLCAweDExMDgsIDB4ZDBlNCwgMHgwMDA1LCAweDYwMWMsCiAJMHhkMGZjLCAweGMwZmMsIDB4NjAxZSwgMHhhODdjLCAweDExMDgsIDB4ZDBlNCwgMHgwMDA1LCAweDYwNDQsCi0JMHhkMGZjLCAweDExMzgsIDB4ZDBiYywgMHgwMTk4LCAweGMwYmMsIDB4NjA0NiwgMHg2MDAzLCAweDAwMDIsCi0JMHgwMDcwLCAweGQwYWMsIDB4MTE2MCwgMHhkMGRjLCAweDExMjgsIDB4OTA4YywgMHgwMDBmLCAweDkxODYsCi0JMHgwMDA1LCAweDExMTgsIDB4NjAwMywgMHgwMDAzLCAweDAwMTAsIDB4NjAwMywgMHgwMDAxLCAweDAwMDUsCi0JMHgwMGI2LCAweDAwNjYsIDB4NjAwMCwgMHg5MGIyLCAweDAwMTAsIDB4MWEwYywgMHgwZDc5LCAweDAwMWIsCi0JMHgwMDZlLCAweDAwYmUsIDB4MDAwNSwgMHhkM2NiLCAweGRiMTQsIDB4ZGM3OCwgMHhkM2NiLCAweGQzY2IsCi0JMHhkM2NiLCAweGQzY2IsIDB4ZDNjYiwgMHhkNDAyLCAweGRjZmMsIDB4ZDNjYiwgMHhkM2NiLCAweGQzY2IsCi0JMHhkM2NiLCAweGQzY2IsIDB4ZDNjYiwgMHgwODBjLCAweDBkNzksIDB4MDA2NiwgMHg2MDAwLCAweDkwYjIsCi0JMHgwMDEwLCAweDFhMGMsIDB4MGQ3OSwgMHgwMDEzLCAweDAwNmUsIDB4MDAwNSwgMHhkM2U2LCAweGUyMWQsCi0JMHhkM2U2LCAweGQzZTYsIDB4ZDNlNiwgMHhkM2U2LCAweGQzZTYsIDB4ZDNlNiwgMHhlMWNjLCAweGUyNmYsCi0JMHhkM2U2LCAweGU5MWYsIDB4ZTk1MywgMHhlOTFmLCAweGU5NTMsIDB4ZDNlNiwgMHgwODBjLCAweDBkNzksCi0JMHg2MDAwLCAweDkwODIsIDB4MDAxMCwgMHgxYTBjLCAweDBkNzksIDB4NjAwMCwgMHgwMDBhLCAweDAwMDUsCi0JMHhkNDAwLCAweGRlZDksIDB4ZGZhNCwgMHhkZmM3LCAweGUwNDMsIDB4ZDQwMCwgMHhlMTNlLCAweGUwY2IsCi0JMHhkZDA2LCAweGUxYTQsIDB4ZTFiOSwgMHhkNDAwLCAweGQ0MDAsIDB4ZDQwMCwgMHhkNDAwLCAweGQ0MDAsCi0JMHgwODBjLCAweDBkNzksIDB4OTFiMiwgMHgwMDUzLCAweDFhMGMsIDB4MGQ3OSwgMHgyMTAwLCAweDkxYjIsCi0JMHgwMDQwLCAweDFhMDQsIDB4ZDg4NiwgMHgwMDAyLCAweGQ0NGMsIDB4ZDY1NCwgMHhkNDRjLCAweGQ0NGMsCi0JMHhkNDRjLCAweGQ2NWQsIDB4ZDQ0YywgMHhkNDRjLCAweGQ0NGMsIDB4ZDQ0YywgMHhkNDRjLCAweGQ0NGMsCi0JMHhkNDRjLCAweGQ0NGMsIDB4ZDQ0YywgMHhkNDRjLCAweGQ0NGMsIDB4ZDQ0YywgMHhkNDRjLCAweGQ0NGMsCi0JMHhkNDRjLCAweGQ0NGMsIDB4ZDQ0YywgMHhkNDRlLCAweGQ0YjUsIDB4ZDRjNCwgMHhkNTI4LCAweGQ1NTMsCi0JMHhkNWNjLCAweGQ2M2YsIDB4ZDQ0YywgMHhkNDRjLCAweGQ2NjAsIDB4ZDQ0YywgMHhkNDRjLCAweGQ2NzUsCi0JMHhkNjgyLCAweGQ0NGMsIDB4ZDQ0YywgMHhkNDRjLCAweGQ0NGMsIDB4ZDQ0YywgMHhkNzI4LCAweGQ0NGMsCi0JMHhkNDRjLCAweGQ3M2MsIDB4ZDQ0YywgMHhkNDRjLCAweGQ2ZjcsIDB4ZDQ0YywgMHhkNDRjLCAweGQ0NGMsCi0JMHhkNzU0LCAweGQ0NGMsIDB4ZDQ0YywgMHhkNDRjLCAweGQ3ZDEsIDB4ZDQ0YywgMHhkNDRjLCAweGQ0NGMsCi0JMHhkNDRjLCAweGQ0NGMsIDB4ZDQ0YywgMHhkODRlLCAweDA4MGMsIDB4MGQ3OSwgMHgwODBjLCAweDZiOGIsCi0JMHgxMTUwLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwY2MsIDB4MTEyOCwgMHg5MDg0LCAweDAwMDksCi0JMHg5MDg2LCAweDAwMDgsIDB4MTE0MCwgMHg2MDA3LCAweDAwMDksIDB4NjAyZiwgMHgwMDA5LCAweDYwMTcsCi0JMHgwMDAwLCAweDA4MDQsIDB4ZDY0ZCwgMHgwODBjLCAweDZiMjcsIDB4MDBlNiwgMHgwMGM2LCAweDAwMzYsCi0JMHgwMDI2LCAweDAwMTYsIDB4NjIxMCwgMHgyMjU4LCAweGJhYTAsIDB4MDAyNiwgMHgyMDE5LCAweDAwMjksCi0JMHgwODBjLCAweGFhZjcsIDB4MDgwYywgMHg5NWI5LCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweDk0NzYsCi0JMHgyYzA4LCAweDA4MGMsIDB4ZTQ2NSwgMHgwMDdlLCAweDAwMWUsIDB4MDgwYywgMHhhYjEzLCAweDAwMWUsCi0JMHgwMDJlLCAweDAwM2UsIDB4MDBjZSwgMHgwMGVlLCAweDY2MTAsIDB4MjY1OCwgMHgwODBjLCAweDY3OTIsCi0JMHhiZTA0LCAweDk2ODQsIDB4MDBmZiwgMHg5MDgyLCAweDAwMDYsIDB4MTI2OCwgMHgwMDE2LCAweDAwMjYsCi0JMHg2MjEwLCAweDAwYjYsIDB4MjI1OCwgMHhiYWEwLCAweDAwYmUsIDB4MmMwOCwgMHgwODBjLCAweGViN2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MTE3OCwgMHgwODBjLCAweGUzOTMsIDB4MTkwNCwgMHhkNTIwLCAweDA4MGMsCi0JMHhlMzJmLCAweDExMjAsIDB4NjAwNywgMHgwMDA4LCAweDA4MDQsIDB4ZDY0ZCwgMHg2MDA3LCAweDAwMDksCi0JMHgwODA0LCAweGQ2NGQsIDB4MDgwYywgMHhlNjBkLCAweDAxMjgsIDB4MDgwYywgMHhlMzkzLCAweDBkNzgsCi0JMHgwODA0LCAweGQ1MjAsIDB4NjAxNywgMHgxOTAwLCAweDBjODgsIDB4MDgwYywgMHgzNDMyLCAweDE5MDQsCi0JMHhkODgzLCAweDYxMDYsIDB4MDgwYywgMHhlMmNmLCAweDYwMDcsIDB4MDAwNiwgMHgwODA0LCAweGQ2NGQsCi0JMHg2MDA3LCAweDAwMDcsIDB4MDgwNCwgMHhkNjRkLCAweDA4MGMsIDB4ZTk4ZiwgMHgxOTA0LCAweGQ4ODMsCi0JMHgwODBjLCAweDM0MzIsIDB4MTkwNCwgMHhkODgzLCAweDAwZDYsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsCi0JMHg5Njg0LCAweDAwZmYsIDB4OTA4MiwgMHgwMDA2LCAweDEyMjAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCi0JMHg2NmI1LCAweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwMTg4LCAweDk2ODYsCi0JMHgwMDA0LCAweDAxNzAsIDB4YmUwNCwgMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxNDAsCi0JMHg5Njg2LCAweDAwMDQsIDB4MDEyOCwgMHg5Njg2LCAweDAwMDUsIDB4MDExMCwgMHgwMGRlLCAweDA0ODAsCi0JMHgwMGU2LCAweDIwNzEsIDB4MDI2MCwgMHg3MDM0LCAweDkwODQsIDB4MDAwMywgMHgxMTQwLCAweDcwMzQsCi0JMHg5MDgyLCAweDAwMTQsIDB4MDIyMCwgMHg3MDMwLCAweDkwODQsIDB4MDAwMywgMHgwMTMwLCAweDAwZWUsCi0JMHg2MDE3LCAweDAwMDAsIDB4NjAyZiwgMHgwMDA3LCAweDAwYjAsIDB4MDBlZSwgMHgwODBjLCAweGUzZmIsCi0JMHgxMTkwLCAweDk2ODYsIDB4MDAwNiwgMHgxMTQwLCAweDAwMjYsIDB4NjIxMCwgMHgyMjU4LCAweGJhYTAsCi0JMHg5MDBlLCAweDA4MGMsIDB4MzM0YSwgMHgwMDJlLCAweDA4MGMsIDB4NjgxZSwgMHg2MDA3LCAweDAwMGEsCi0JMHgwMGRlLCAweDA4MDQsIDB4ZDY0ZCwgMHg2MDA3LCAweDAwMGIsIDB4MDBkZSwgMHgwODA0LCAweGQ2NGQsCi0JMHgwODBjLCAweDMyZmIsIDB4MDgwYywgMHhkMzcyLCAweDYwMDcsIDB4MDAwMSwgMHgwODA0LCAweGQ2NGQsCi0JMHgwODBjLCAweGU5OGYsIDB4MTkwNCwgMHhkODgzLCAweDA4MGMsIDB4MzQzMiwgMHgxOTA0LCAweGQ4ODMsCi0JMHgyMDcxLCAweDAyNjAsIDB4NzAzNCwgMHg5MGI0LCAweDAwMDMsIDB4MTk0OCwgMHg5MGIyLCAweDAwMTQsCi0JMHgwYTMwLCAweDcwMzAsIDB4OTA4NCwgMHgwMDAzLCAweDE5MTAsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsCi0JMHg5Njg2LCAweDA3MDcsIDB4MDllOCwgMHgwMDI2LCAweDYyMTAsIDB4MjI1OCwgMHhiYWEwLCAweDkwMGUsCi0JMHgwODBjLCAweDMzNGEsIDB4MDAyZSwgMHg2MDA3LCAweDAwMGMsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCi0JMHhlYjVkLCAweDA4MDQsIDB4ZDY0ZCwgMHgwODBjLCAweDZiOGIsIDB4MTE0MCwgMHgyMDAxLCAweDE4MzcsCi0JMHgyMDA0LCAweDkwODQsIDB4MDAwOSwgMHg5MDg2LCAweDAwMDgsIDB4MTExMCwgMHgwODA0LCAweGQ0NWIsCi0JMHgwODBjLCAweDZiMjcsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsIDB4OTY4NCwgMHgwMGZmLCAweDkwODIsCi0JMHgwMDA2LCAweDA2YzgsIDB4MTEzOCwgMHgwMDI2LCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY2ZjUsCi0JMHgwMDJlLCAweDAwNTAsIDB4OTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4OTY4NiwgMHgwMDA0LCAweDAxMjAsCi0JMHg5Njg2LCAweDAwMDYsIDB4MTkwNCwgMHhkNTIwLCAweDA4MGMsIDB4ZTQwOCwgMHgxMTIwLCAweDYwMDcsCi0JMHgwMDBlLCAweDA4MDQsIDB4ZDY0ZCwgMHgwMDQ2LCAweDY0MTAsIDB4MjQ1OCwgMHhiY2EwLCAweDAwNDYsCi0JMHgwODBjLCAweDMyZmIsIDB4MDgwYywgMHhkMzcyLCAweDAwNGUsIDB4MDAxNiwgMHg5MDA2LCAweDIwMDksCi0JMHgxODQ4LCAweDIxMGMsIDB4ZDFhNCwgMHgwMTQ4LCAweDIwMDksIDB4MDAyOSwgMHgwODBjLCAweGU3OTUsCi0JMHg2MDEwLCAweDIwNTgsIDB4YjgwMCwgMHhjMGU1LCAweGI4MDIsIDB4MDAxZSwgMHgwMDRlLCAweDYwMDcsCi0JMHgwMDAxLCAweDA4MDQsIDB4ZDY0ZCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHg2NmI1LCAweDAxNTYsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwgMHgxODA1LCAweDIwMTEsCi0JMHgwMjcwLCAweDA4MGMsIDB4YmY0MCwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMTVlLCAweDkwMDUsCi0JMHgwMTY4LCAweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODIsIDB4MDAwNCwgMHgwYTA0LCAweGQ1MjAsCi0JMHg5NjgyLCAweDAwMDcsIDB4MGEwNCwgMHhkNTdjLCAweDA4MDQsIDB4ZDUyMCwgMHg2MDE3LCAweDE5MDAsCi0JMHg2MDA3LCAweDAwMDksIDB4MDgwNCwgMHhkNjRkLCAweDA4MGMsIDB4NmI4YiwgMHgxMTQwLCAweDIwMDEsCi0JMHgxODM3LCAweDIwMDQsIDB4OTA4NCwgMHgwMDA5LCAweDkwODYsIDB4MDAwOCwgMHgxMTEwLCAweDA4MDQsCi0JMHhkNDViLCAweDA4MGMsIDB4NmIyNywgMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwgMHg5Njg0LCAweDAwZmYsCi0JMHgwMDA2LCAweDAwMTYsIDB4OTA4ZSwgMHgwMDAxLCAweDAxMTgsIDB4OTA4ZSwgMHgwMDAwLCAweDExMTgsCi0JMHgwMDFlLCAweDAwMGUsIDB4MDA4MCwgMHgwMDFlLCAweDAwMGUsIDB4OTA4MiwgMHgwMDA2LCAweDA2YTAsCi0JMHgwMTUwLCAweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsIDB4MDAwNCwgMHgwMTIwLCAweDk2ODYsCi0JMHgwMDA2LCAweDE5MDQsIDB4ZDUyMCwgMHgwODBjLCAweGU0MzYsIDB4MTEzOCwgMHgwODBjLCAweGUzMmYsCi0JMHgxMTIwLCAweDYwMDcsIDB4MDAxMCwgMHgwODA0LCAweGQ2NGQsIDB4MDA0NiwgMHg2NDEwLCAweDI0NTgsCi0JMHhiY2EwLCAweDAwNDYsIDB4MDgwYywgMHgzMmZiLCAweDA4MGMsIDB4ZDM3MiwgMHgwMDRlLCAweDAwMTYsCisJMHhkMGZjLCAweDExMzgsIDB4ZDBiYywgMHgwMWEwLCAweGMwYmMsIDB4NjA0NiwgMHgyMDAxLCAweDAwMDIsCisJMHgwMDgwLCAweGQwYWMsIDB4MTE2OCwgMHhkMGRjLCAweDExMjgsIDB4OTA4YywgMHgwMDBmLCAweDkxODYsCisJMHgwMDA1LCAweDExMTgsIDB4MjAwMSwgMHgwMDAzLCAweDAwMjAsIDB4MjAwMSwgMHgwMDAxLCAweDAwMDgsCisJMHg2MDAwLCAweDAwMDUsIDB4MDBiNiwgMHgwMDY2LCAweDYwMDAsIDB4OTBiMiwgMHgwMDEwLCAweDFhMGMsCisJMHgwZDg1LCAweDAwMWIsIDB4MDA2ZSwgMHgwMGJlLCAweDAwMDUsIDB4ZDZiNSwgMHhkZGZlLCAweGRmNjIsCisJMHhkNmI1LCAweGQ2YjUsIDB4ZDZiNSwgMHhkNmI1LCAweGQ2YjUsIDB4ZDZlYywgMHhkZmU2LCAweGQ2YjUsCisJMHhkNmI1LCAweGQ2YjUsIDB4ZDZiNSwgMHhkNmI1LCAweGQ2YjUsIDB4MDgwYywgMHgwZDg1LCAweDAwNjYsCisJMHg2MDAwLCAweDkwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDBkODUsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsCisJMHhkNmQwLCAweGU1MGIsIDB4ZDZkMCwgMHhkNmQwLCAweGQ2ZDAsIDB4ZDZkMCwgMHhkNmQwLCAweGQ2ZDAsCisJMHhlNGJhLCAweGU1NWQsIDB4ZDZkMCwgMHhlYzEwLCAweGVjNDQsIDB4ZWMxMCwgMHhlYzQ0LCAweGQ2ZDAsCisJMHgwODBjLCAweDBkODUsIDB4NjAwMCwgMHg5MDgyLCAweDAwMTAsIDB4MWEwYywgMHgwZDg1LCAweDYwMDAsCisJMHgwMDBhLCAweDAwMDUsIDB4ZDZlYSwgMHhlMWMzLCAweGUyOGUsIDB4ZTJiMSwgMHhlMzJkLCAweGQ2ZWEsCisJMHhlNDJhLCAweGUzYjUsIDB4ZGZmMCwgMHhlNDkyLCAweGU0YTcsIDB4ZDZlYSwgMHhkNmVhLCAweGQ2ZWEsCisJMHhkNmVhLCAweGQ2ZWEsIDB4MDgwYywgMHgwZDg1LCAweDkxYjIsIDB4MDA1MywgMHgxYTBjLCAweDBkODUsCisJMHgyMTAwLCAweDkxYjIsIDB4MDA0MCwgMHgxYTA0LCAweGRiNzAsIDB4MDAwMiwgMHhkNzM2LCAweGQ5M2UsCisJMHhkNzM2LCAweGQ3MzYsIDB4ZDczNiwgMHhkOTQ3LCAweGQ3MzYsIDB4ZDczNiwgMHhkNzM2LCAweGQ3MzYsCisJMHhkNzM2LCAweGQ3MzYsIDB4ZDczNiwgMHhkNzM2LCAweGQ3MzYsIDB4ZDczNiwgMHhkNzM2LCAweGQ3MzYsCisJMHhkNzM2LCAweGQ3MzYsIDB4ZDczNiwgMHhkNzM2LCAweGQ3MzYsIDB4ZDczOCwgMHhkNzlmLCAweGQ3YWUsCisJMHhkODEyLCAweGQ4M2QsIDB4ZDhiNiwgMHhkOTI5LCAweGQ3MzYsIDB4ZDczNiwgMHhkOTRhLCAweGQ3MzYsCisJMHhkNzM2LCAweGQ5NWYsIDB4ZDk2YywgMHhkNzM2LCAweGQ3MzYsIDB4ZDczNiwgMHhkNzM2LCAweGQ3MzYsCisJMHhkYTEyLCAweGQ3MzYsIDB4ZDczNiwgMHhkYTI2LCAweGQ3MzYsIDB4ZDczNiwgMHhkOWUxLCAweGQ3MzYsCisJMHhkNzM2LCAweGQ3MzYsIDB4ZGEzZSwgMHhkNzM2LCAweGQ3MzYsIDB4ZDczNiwgMHhkYWJiLCAweGQ3MzYsCisJMHhkNzM2LCAweGQ3MzYsIDB4ZDczNiwgMHhkNzM2LCAweGQ3MzYsIDB4ZGIzOCwgMHgwODBjLCAweDBkODUsCisJMHgwODBjLCAweDZiY2YsIDB4MTE1MCwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGNjLCAweDExMjgsCisJMHg5MDg0LCAweDAwMDksIDB4OTA4NiwgMHgwMDA4LCAweDExNDAsIDB4NjAwNywgMHgwMDA5LCAweDYwMmYsCisJMHgwMDA5LCAweDYwMTcsIDB4MDAwMCwgMHgwODA0LCAweGQ5MzcsIDB4MDgwYywgMHg2YjZiLCAweDAwZTYsCisJMHgwMGM2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LCAweDYyMTAsIDB4MjI1OCwgMHhiYWEwLCAweDAwMjYsCisJMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHhhY2ZjLCAweDA4MGMsIDB4OTdiMCwgMHgwMDc2LCAweDkwM2UsCisJMHgwODBjLCAweDk2NmQsIDB4MmMwOCwgMHgwODBjLCAweGU3NWQsIDB4MDA3ZSwgMHgwMDFlLCAweDA4MGMsCisJMHhhZDE4LCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLCAweDAwY2UsIDB4MDBlZSwgMHg2NjEwLCAweDI2NTgsCisJMHgwODBjLCAweDY3YzMsIDB4YmUwNCwgMHg5Njg0LCAweDAwZmYsIDB4OTA4MiwgMHgwMDA2LCAweDEyNjgsCisJMHgwMDE2LCAweDAwMjYsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsIDB4YmFhMCwgMHgwMGJlLCAweDJjMDgsCisJMHgwODBjLCAweGVlNmYsIDB4MDAyZSwgMHgwMDFlLCAweDExNzgsIDB4MDgwYywgMHhlNjhiLCAweDE5MDQsCisJMHhkODBhLCAweDA4MGMsIDB4ZTYyNywgMHgxMTIwLCAweDYwMDcsIDB4MDAwOCwgMHgwODA0LCAweGQ5MzcsCisJMHg2MDA3LCAweDAwMDksIDB4MDgwNCwgMHhkOTM3LCAweDA4MGMsIDB4ZTkwNSwgMHgwMTI4LCAweDA4MGMsCisJMHhlNjhiLCAweDBkNzgsIDB4MDgwNCwgMHhkODBhLCAweDYwMTcsIDB4MTkwMCwgMHgwYzg4LCAweDA4MGMsCisJMHgzNDRjLCAweDE5MDQsIDB4ZGI2ZCwgMHg2MTA2LCAweDA4MGMsIDB4ZTVjNywgMHg2MDA3LCAweDAwMDYsCisJMHgwODA0LCAweGQ5MzcsIDB4NjAwNywgMHgwMDA3LCAweDA4MDQsIDB4ZDkzNywgMHgwODBjLCAweGVjODAsCisJMHgxOTA0LCAweGRiNmQsIDB4MDgwYywgMHgzNDRjLCAweDE5MDQsIDB4ZGI2ZCwgMHgwMGQ2LCAweDY2MTAsCisJMHgyNjU4LCAweGJlMDQsIDB4OTY4NCwgMHgwMGZmLCAweDkwODIsIDB4MDAwNiwgMHgxMjIwLCAweDIwMDEsCisJMHgwMDAxLCAweDA4MGMsIDB4NjZlNiwgMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsCisJMHgwMTg4LCAweDk2ODYsIDB4MDAwNCwgMHgwMTcwLCAweGJlMDQsIDB4OTZiNCwgMHgwMGZmLCAweDk2ODYsCisJMHgwMDA2LCAweDAxNDAsIDB4OTY4NiwgMHgwMDA0LCAweDAxMjgsIDB4OTY4NiwgMHgwMDA1LCAweDAxMTAsCisJMHgwMGRlLCAweDA0ODAsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsIDB4NzAzNCwgMHg5MDg0LCAweDAwMDMsCisJMHgxMTQwLCAweDcwMzQsIDB4OTA4MiwgMHgwMDE0LCAweDAyMjAsIDB4NzAzMCwgMHg5MDg0LCAweDAwMDMsCisJMHgwMTMwLCAweDAwZWUsIDB4NjAxNywgMHgwMDAwLCAweDYwMmYsIDB4MDAwNywgMHgwMGIwLCAweDAwZWUsCisJMHgwODBjLCAweGU2ZjMsIDB4MTE5MCwgMHg5Njg2LCAweDAwMDYsIDB4MTE0MCwgMHgwMDI2LCAweDYyMTAsCisJMHgyMjU4LCAweGJhYTAsIDB4OTAwZSwgMHgwODBjLCAweDMzNjQsIDB4MDAyZSwgMHgwODBjLCAweDY4NGYsCisJMHg2MDA3LCAweDAwMGEsIDB4MDBkZSwgMHgwODA0LCAweGQ5MzcsIDB4NjAwNywgMHgwMDBiLCAweDAwZGUsCisJMHgwODA0LCAweGQ5MzcsIDB4MDgwYywgMHgzMzE1LCAweDA4MGMsIDB4ZDY1YSwgMHg2MDA3LCAweDAwMDEsCisJMHgwODA0LCAweGQ5MzcsIDB4MDgwYywgMHhlYzgwLCAweDE5MDQsIDB4ZGI2ZCwgMHgwODBjLCAweDM0NGMsCisJMHgxOTA0LCAweGRiNmQsIDB4MjA3MSwgMHgwMjYwLCAweDcwMzQsIDB4OTBiNCwgMHgwMDAzLCAweDE5NDgsCisJMHg5MGIyLCAweDAwMTQsIDB4MGEzMCwgMHg3MDMwLCAweDkwODQsIDB4MDAwMywgMHgxOTEwLCAweDY2MTAsCisJMHgyNjU4LCAweGJlMDQsIDB4OTY4NiwgMHgwNzA3LCAweDA5ZTgsIDB4MDAyNiwgMHg2MjEwLCAweDIyNTgsCisJMHhiYWEwLCAweDkwMGUsIDB4MDgwYywgMHgzMzY0LCAweDAwMmUsIDB4NjAwNywgMHgwMDBjLCAweDIwMDEsCisJMHgwMDAxLCAweDA4MGMsIDB4ZWU0ZSwgMHgwODA0LCAweGQ5MzcsIDB4MDgwYywgMHg2YmNmLCAweDExNDAsCisJMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDksIDB4OTA4NiwgMHgwMDA4LCAweDExMTAsCisJMHgwODA0LCAweGQ3NDUsIDB4MDgwYywgMHg2YjZiLCAweDY2MTAsIDB4MjY1OCwgMHhiZTA0LCAweDk2ODQsCisJMHgwMGZmLCAweDkwODIsIDB4MDAwNiwgMHgwNmM4LCAweDExMzgsIDB4MDAyNiwgMHgyMDAxLCAweDAwMDYsCisJMHgwODBjLCAweDY3MjYsIDB4MDAyZSwgMHgwMDUwLCAweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsCisJMHgwMDA0LCAweDAxMjAsIDB4OTY4NiwgMHgwMDA2LCAweDE5MDQsIDB4ZDgwYSwgMHgwODBjLCAweGU3MDAsCisJMHgxMTIwLCAweDYwMDcsIDB4MDAwZSwgMHgwODA0LCAweGQ5MzcsIDB4MDA0NiwgMHg2NDEwLCAweDI0NTgsCisJMHhiY2EwLCAweDAwNDYsIDB4MDgwYywgMHgzMzE1LCAweDA4MGMsIDB4ZDY1YSwgMHgwMDRlLCAweDAwMTYsCiAJMHg5MDA2LCAweDIwMDksIDB4MTg0OCwgMHgyMTBjLCAweGQxYTQsIDB4MDE0OCwgMHgyMDA5LCAweDAwMjksCi0JMHgwODBjLCAweGU3OTUsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsIDB4YzBlNSwgMHhiODAyLCAweDAwMWUsCi0JMHgwMDRlLCAweDYwMDcsIDB4MDAwMSwgMHgwNDQ4LCAweDA4MGMsIDB4ZTYwZCwgMHgwMTk4LCAweDAwMTYsCi0JMHg5NjhjLCAweDAwZmYsIDB4OTE4NiwgMHgwMDAyLCAweDAxNjAsIDB4OTE4NiwgMHgwMDAzLCAweDAxNDgsCi0JMHgwMDFlLCAweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwOTIwLCAweDA4MDQsCi0JMHhkNTIwLCAweDAwMWUsIDB4NjAxNywgMHgxOTAwLCAweDYwMDcsIDB4MDAwOSwgMHgwMDcwLCAweDA4MGMsCi0JMHgzNDMyLCAweDE5MDQsIDB4ZDg4MywgMHgwODBjLCAweGU5OGYsIDB4MTkwNCwgMHhkODgzLCAweDA4MGMsCi0JMHhkYTU0LCAweDE5MDQsIDB4ZDUyMCwgMHg2MDA3LCAweDAwMTIsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCi0JMHg5NDI3LCAweDA4MGMsIDB4OThiYywgMHgwMDA1LCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDk0MjcsIDB4MDgwYywgMHg5OGJjLCAweDBjYjAsIDB4NjAwNywgMHgwMDA1LCAweDBjNjgsCi0JMHgwODBjLCAweGU5OGYsIDB4MTkwNCwgMHhkODgzLCAweDA4MGMsIDB4MzQzMiwgMHgxOTA0LCAweGQ4ODMsCi0JMHgwODBjLCAweGRhNTQsIDB4MTkwNCwgMHhkNTIwLCAweDYwMDcsIDB4MDAyMCwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDk0MjcsIDB4MDgwYywgMHg5OGJjLCAweDAwMDUsIDB4MDgwYywgMHgzNDMyLCAweDE5MDQsCi0JMHhkODgzLCAweDYwMDcsIDB4MDAyMywgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NDI3LCAweDA4MGMsCi0JMHg5OGJjLCAweDAwMDUsIDB4MDgwYywgMHhlOThmLCAweDE5MDQsIDB4ZDg4MywgMHgwODBjLCAweDM0MzIsCi0JMHgxOTA0LCAweGQ4ODMsIDB4MDgwYywgMHhkYTU0LCAweDE5MDQsIDB4ZDUyMCwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMGU2LCAweDIwNzEsIDB4MDI2MCwgMHgyYzA4LCAweDIwMTEsIDB4MTgyMCwgMHgyMjE0LCAweDcwM2MsCi0JMHg5MjA2LCAweDExZTAsIDB4MjAxMSwgMHgxODFmLCAweDIyMTQsIDB4NzAzOCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MjA2LCAweDExYTAsIDB4NzI0MCwgMHgwODBjLCAweGNjMjEsIDB4MDU3MCwgMHgyMjYwLCAweDYwMDgsCi0JMHg5MDg2LCAweGZmZmYsIDB4MDEyMCwgMHg3MjQ0LCAweDYwMDgsIDB4OTIwNiwgMHgxNTI4LCAweDYwMjAsCi0JMHg5MDg2LCAweDAwMDcsIDB4MTUwOCwgMHgwODBjLCAweGFmNGUsIDB4MDRhMCwgMHg3MjQ0LCAweDkyODYsCi0JMHhmZmZmLCAweDAxODAsIDB4MmMwOCwgMHgwODBjLCAweGNjMjEsIDB4MDFiMCwgMHgyMjYwLCAweDcyNDAsCi0JMHg2MDA4LCAweDkyMDYsIDB4MTE4OCwgMHg2MDEwLCAweDkxOTAsIDB4MDAwNCwgMHgyMjE0LCAweDkyMDYsCi0JMHgwMWI4LCAweDAwNTAsIDB4NzI0MCwgMHgyYzA4LCAweDkwMDYsIDB4MDgwYywgMHhlNzVmLCAweDExODAsCi0JMHg3MjQ0LCAweDkyODYsIDB4ZmZmZiwgMHgwMWIwLCAweDIxNjAsIDB4NjAwNywgMHgwMDI2LCAweDYwMTcsCi0JMHgxNzAwLCAweDcyMTQsIDB4OTI5NiwgMHhmZmZmLCAweDExODAsIDB4NjAwNywgMHgwMDI1LCAweDAwNjgsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwNywgMHgxZDgwLCAweDYwMDQsIDB4OTA4NiwgMHgwMDI0LCAweDExMTAsCi0JMHgwODBjLCAweGFmNGUsIDB4MjE2MCwgMHg2MDA3LCAweDAwMjUsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCi0JMHg5NDI3LCAweDA4MGMsIDB4OThiYywgMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4NjZiNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDIwYTksCi0JMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLCAweDAyNzYsIDB4MDgwYywgMHhiZjQwLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHgwMTIwLCAweDYwMDcsIDB4MDAzMSwgMHgwODA0LCAweGQ2NGQsCi0JMHgwODBjLCAweGJiYWEsIDB4MDgwYywgMHg3NjlkLCAweDExOTAsIDB4MDAwNiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwODBjLCAweDc2YjcsIDB4MTEzOCwgMHgwODBjLCAweDc5OWYsIDB4MDgwYywgMHg2MTc4LCAweDA4MGMsCi0JMHg3NWNjLCAweDAwMTAsIDB4MDgwYywgMHg3NjcxLCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLCAweDAwMDUsCi0JMHgwODBjLCAweDM0MzIsIDB4MTkwNCwgMHhkODgzLCAweDA4MGMsIDB4ZGE1NCwgMHgxOTA0LCAweGQ1MjAsCi0JMHg2MTA2LCAweDA4MGMsIDB4ZGE3MCwgMHgxMTIwLCAweDYwMDcsIDB4MDAyYiwgMHgwODA0LCAweGQ2NGQsCi0JMHg2MDA3LCAweDAwMmMsIDB4MDgwNCwgMHhkNjRkLCAweDA4MGMsIDB4ZTk4ZiwgMHgxOTA0LCAweGQ4ODMsCi0JMHgwODBjLCAweDM0MzIsIDB4MTkwNCwgMHhkODgzLCAweDA4MGMsIDB4ZGE1NCwgMHgxOTA0LCAweGQ1MjAsCi0JMHg2MTA2LCAweDA4MGMsIDB4ZGE3NSwgMHgxMTIwLCAweDYwMDcsIDB4MDAyZSwgMHgwODA0LCAweGQ2NGQsCi0JMHg2MDA3LCAweDAwMmYsIDB4MDgwNCwgMHhkNjRkLCAweDA4MGMsIDB4MzQzMiwgMHgxOTA0LCAweGQ4ODMsCi0JMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHg2MDEwLCAweDIwNTgsIDB4YjkwNCwgMHg5MTg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwMDYsIDB4MDE1OCwgMHg5MTg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDg2LCAweDAwMDYsCi0JMHgwMTI4LCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDA4MDQsIDB4ZDY1NCwgMHgwODBjLCAweDU4MjQsCi0JMHhkMGU0LCAweDA5MDQsIDB4ZDdjZSwgMHgyMDcxLCAweDAyNmMsIDB4NzAxMCwgMHg2MDNhLCAweDcwMTQsCi0JMHg2MDNlLCAweDcxMDgsIDB4NzIwYywgMHgwODBjLCAweDZiYzksIDB4MDE0MCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiODEwLCAweDkxMDYsIDB4MTExOCwgMHhiODE0LCAweDkyMDYsIDB4MDUxMCwgMHgwODBjLCAweDZiYzUsCi0JMHgxNWI4LCAweDIwNjksIDB4MTgwMCwgMHg2ODgwLCAweDkyMDYsIDB4MTU5MCwgMHg2ODdjLCAweDkxMDYsCi0JMHgxNTc4LCAweDcyMTAsIDB4MDgwYywgMHhjYzIxLCAweDA1OTAsIDB4MDgwYywgMHhkOTQxLCAweDA1NzgsCi0JMHgwODBjLCAweGU4MTEsIDB4MDU2MCwgMHg2MjJlLCAweDYwMDcsIDB4MDAzNiwgMHg2MDAzLCAweDAwMDEsCi0JMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NDIwLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsCi0JMHg3MjE0LCAweDkyODYsIDB4ZmZmZiwgMHgwMTUwLCAweDA4MGMsIDB4Y2MyMSwgMHgwMWMwLCAweDkyODAsCi0JMHgwMDAyLCAweDIwMDQsIDB4NzExMCwgMHg5MTA2LCAweDExOTAsIDB4MDhlMCwgMHg3MjEwLCAweDJjMDgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHhlNzVmLCAweDJjMTAsIDB4MjE2MCwgMHgwMTQwLCAweDA4OTAsCi0JMHg2MDA3LCAweDAwMzcsIDB4NjAyZiwgMHgwMDA5LCAweDYwMTcsIDB4MTUwMCwgMHgwOGI4LCAweDYwMDcsCi0JMHgwMDM3LCAweDYwMmYsIDB4MDAwMywgMHg2MDE3LCAweDE3MDAsIDB4MDg4MCwgMHg2MDA3LCAweDAwMTIsCi0JMHgwODY4LCAweDA4MGMsIDB4MzQzMiwgMHgxOTA0LCAweGQ4ODMsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDQsCi0JMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDg2LCAweDAwMDYsIDB4MTkwNCwgMHhkNjU0LCAweDAwZTYsCi0JMHgwMGQ2LCAweDAwYzYsIDB4MDgwYywgMHg1ODI0LCAweGQwZTQsIDB4MDkwNCwgMHhkODQ2LCAweDIwNjksCi0JMHgxODAwLCAweDIwNzEsIDB4MDI2YywgMHg3MDA4LCAweDYwM2EsIDB4NzIwYywgMHg2MjNlLCAweDkyODYsCi0JMHhmZmZmLCAweDExNTAsIDB4NzIwOCwgMHgwMGM2LCAweDJjMDgsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHhlNzVmLCAweDJjMTAsIDB4MDBjZSwgMHgwNWU4LCAweDA4MGMsIDB4Y2MyMSwgMHgwNWQwLCAweDcxMDgsCi0JMHg5MjgwLCAweDAwMDIsIDB4MjAwNCwgMHg5MTA2LCAweDE1YTAsIDB4MDBjNiwgMHgwMDI2LCAweDIyNjAsCi0JMHgwODBjLCAweGM4MGUsIDB4MDAyZSwgMHgwMGNlLCAweDcxMTgsIDB4OTE4YywgMHhmZjAwLCAweDgxMGYsCi0JMHg5MTg2LCAweDAwMDEsIDB4MDE3OCwgMHg5MTg2LCAweDAwMDUsIDB4MDExOCwgMHg5MTg2LCAweDAwMDcsCi0JMHgxMTk4LCAweDkyODAsIDB4MDAwNSwgMHgyMDA0LCAweDkwMDUsIDB4MDE3MCwgMHgwODBjLCAweGQ5NDEsCi0JMHgwOTA0LCAweGQ3YzcsIDB4MDA1NiwgMHg3NTEwLCAweDc2MTQsIDB4MDgwYywgMHhlODJhLCAweDAwNWUsCi0JMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDYwMDcsIDB4MDAzYiwgMHg2MDJmLCAweDAwMDksCi0JMHg2MDE3LCAweDJhMDAsIDB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk0MjAsCi0JMHgwYzc4LCAweDYwMDcsIDB4MDAzYiwgMHg2MDJmLCAweDAwMDMsIDB4NjAxNywgMHgwMzAwLCAweDYwMDMsCi0JMHgwMDAxLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk0MjAsIDB4MGMxMCwgMHg2MDA3LCAweDAwM2IsCi0JMHg2MDJmLCAweDAwMGIsIDB4NjAxNywgMHgwMDAwLCAweDA4MDQsIDB4ZDc5ZSwgMHgwMGU2LCAweDAwMjYsCi0JMHgwODBjLCAweDZiOGIsIDB4MDU1MCwgMHgwODBjLCAweDZiMjcsIDB4MDgwYywgMHhlYTAwLCAweDE1MTgsCi0JMHgyMDcxLCAweDE4MDAsIDB4NzBkYywgMHg5MDg1LCAweDAwMDMsIDB4NzBkZSwgMHgwMGY2LCAweDIwNzksCi0JMHgwMTAwLCAweDcyYjAsIDB4OTI4NCwgMHgwMGZmLCAweDcwN2UsIDB4NzhlNiwgMHg5Mjg0LCAweGZmMDAsCi0JMHg3MjgwLCAweDkyMDUsIDB4NzA4MiwgMHg3OGVhLCAweDAwZmUsIDB4NzBlNywgMHgwMDAwLCAweDA4MGMsCi0JMHg2YmM5LCAweDAxMjAsIDB4MjAxMSwgMHgxYTBiLCAweDIwMTMsIDB4MDdkMCwgMHhkMGFjLCAweDExMjgsCi0JMHgwODBjLCAweDMwYzgsIDB4MDAxMCwgMHgwODBjLCAweGVhMzQsIDB4MDAyZSwgMHgwMGVlLCAweDA4MGMsCi0JMHhhZjRlLCAweDA4MDQsIDB4ZDY1MywgMHgwODBjLCAweGFmNGUsIDB4MDAwNSwgMHgyNjAwLCAweDAwMDIsCi0JMHhkODlhLCAweGQ4YzgsIDB4ZDhkOSwgMHhkODlhLCAweGQ4OWEsIDB4ZDg5YywgMHhkOGVhLCAweGQ4OWEsCi0JMHhkODlhLCAweGQ4OWEsIDB4ZDhiNiwgMHhkODlhLCAweGQ4OWEsIDB4ZDg5YSwgMHhkOGY1LCAweGQ5MGIsCi0JMHhkOTNjLCAweGQ4OWEsIDB4MDgwYywgMHgwZDc5LCAweDA4MGMsIDB4ZTk4ZiwgMHgxZDIwLCAweDA4MGMsCi0JMHgzNDMyLCAweDFkMDgsIDB4NzAzOCwgMHg2MDE2LCAweDYwMDcsIDB4MDA0NSwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDk0MjcsIDB4MDAwNSwgMHgwODBjLCAweDMyZmIsIDB4MDgwYywgMHhkMzcyLCAweDYwMDcsCi0JMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk0MjcsIDB4MDAwNSwgMHgwODBjLCAweGU5OGYsCi0JMHgxOTUwLCAweDA4MGMsIDB4MzQzMiwgMHgxOTM4LCAweDA4MGMsIDB4ZGE1NCwgMHgxZDYwLCAweDcwM2MsCi0JMHg2MDE2LCAweDYwMDcsIDB4MDA0YSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NDI3LCAweDAwMDUsCi0JMHgwODBjLCAweDM0MzIsIDB4MTkwNCwgMHhkODgzLCAweDIwMDksIDB4MDA0MSwgMHgwODBjLCAweGVhM2QsCi0JMHg2MDA3LCAweDAwNDcsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4OTQyNywgMHgwODBjLCAweDk4YmMsCi0JMHgwMDA1LCAweDA4MGMsIDB4MzQzMiwgMHgxOTA0LCAweGQ4ODMsIDB4MjAwOSwgMHgwMDQyLCAweDA4MGMsCi0JMHhlYTNkLCAweDYwMDcsIDB4MDA0NywgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NDI3LCAweDA4MGMsCi0JMHg5OGJjLCAweDAwMDUsIDB4MDgwYywgMHgzNDMyLCAweDE5MDQsIDB4ZDg4MywgMHgyMDA5LCAweDAwNDYsCi0JMHgwODBjLCAweGVhM2QsIDB4MDgwYywgMHhhZjRlLCAweDAwMDUsIDB4MjAwMSwgMHgxODI0LCAweDIwMDQsCi0JMHg5MDgyLCAweDAwZTEsIDB4MTI2OCwgMHgwODBjLCAweGQ5NWUsIDB4MDkwNCwgMHhkODgzLCAweDYwMDcsCi0JMHgwMDRlLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk0MjcsIDB4MDgwYywgMHg5OGJjLCAweDAwMDUsCi0JMHg2MDA3LCAweDAwMTIsIDB4MGNiMCwgMHg2MDA3LCAweDAwNGYsIDB4NjAxNywgMHgwMDAwLCAweDcxMzQsCi0JMHg5MThjLCAweDAwZmYsIDB4ODFmZiwgMHgwNTA4LCAweDkxODYsIDB4MDAwMSwgMHgxMTYwLCAweDcxNDAsCi0JMHgyMDAxLCAweDE5YmYsIDB4MjAwNCwgMHg5MTA2LCAweDExYjAsIDB4NzE0NCwgMHgyMDAxLCAweDE5YzAsCi0JMHgyMDA0LCAweDkxMDYsIDB4MDE5MCwgMHg5MTg2LCAweDAwMDIsIDB4MTE2OCwgMHgyMDExLCAweDAyNzYsCi0JMHgyMGE5LCAweDAwMDQsIDB4NjAxMCwgMHgwMDk2LCAweDIwNDgsIDB4MjAxOSwgMHgwMDBhLCAweDA4MGMsCi0JMHhiZjU0LCAweDAwOWUsIDB4MDExMCwgMHg2MDE3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCi0JMHg5NDI3LCAweDA4MGMsIDB4OThiYywgMHgwMDA1LCAweDYwMDcsIDB4MDA1MCwgMHg3MDNjLCAweDYwMTYsCi0JMHgwY2EwLCAweDAwMTYsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsIDB4MDBiNiwgMHgwMGM2LCAweDIyNjAsCi0JMHg2MDEwLCAweDIwNTgsIDB4YjhkNCwgMHhkMDg0LCAweDAxNTAsIDB4NzEyOCwgMHg2MDRjLCAweDkxMDYsCi0JMHgxMTIwLCAweDcxMmMsIDB4NjA1MCwgMHg5MTA2LCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsCi0JMHgwMDAxLCAweDAwY2UsIDB4MDBiZSwgMHgwMGVlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwOTYsCi0JMHgwMDg2LCAweDAwZTYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsCi0JMHgxODAwLCAweDIwZTEsIDB4MDAwMCwgMHgyMDAxLCAweDE5YTIsIDB4MjAwMywgMHgwMDAwLCAweDA4MGMsCi0JMHgxMDY2LCAweDA1YTAsIDB4MjkwMCwgMHg2MDE2LCAweDcwOTAsIDB4ODAwNCwgMHhhODE2LCAweDkwOGEsCi0JMHgwMDFlLCAweDAyZDAsIDB4YTgzMywgMHgwMDFlLCAweDIwYTksIDB4MDAxZSwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAxYiwgMHgyMGEwLCAweDIwMDEsIDB4MTlhMiwgMHgwMDE2LCAweDIwMGMsCi0JMHgwNDcxLCAweDAwMWUsIDB4ODFmZiwgMHgwMWI4LCAweDI5NDAsIDB4MDgwYywgMHgxMDY2LCAweDAxYjAsCi0JMHgyOTAwLCAweGEwMDYsIDB4MjEwMCwgMHgwYzE4LCAweGE4MzIsIDB4MjBhOCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAxYiwgMHgyMGEwLCAweDIwMDEsIDB4MTlhMiwgMHgwMDE2LCAweDIwMGMsCi0JMHgwMGIxLCAweDAwMWUsIDB4MDAwMCwgMHg5MDg1LCAweDAwMDEsIDB4MDA0OCwgMHgyMDcxLCAweDE4MDAsCi0JMHg3MDkzLCAweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4MGZmZiwgMHg5MDA2LCAweDAxMmUsCi0JMHgwMWRlLCAweDAxY2UsIDB4MDBlZSwgMHgwMDhlLCAweDAwOWUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDkxOGMsIDB4ZmZmZiwgMHgxMWIwLCAweDA4MGMsCi0JMHgyMjE2LCAweDIwOTksIDB4MDI2YywgMHgyMDAxLCAweDAwMTQsIDB4MzUxOCwgMHg5MzEyLCAweDAxMDgsCi0JMHgxMjE4LCAweDIzYTgsIDB4NDAwMywgMHgwNDAwLCAweDIwYTgsIDB4NDAwMywgMHgyMmE4LCAweDgxMDgsCi0JMHgwODBjLCAweDIyMTYsIDB4MjA5OSwgMHgwMjYwLCAweDBjYTgsIDB4MDgwYywgMHgyMjE2LCAweDIwNjEsCi0JMHgxOWEyLCAweDYwMDQsIDB4MjA5OCwgMHg2MDA4LCAweDM1MTgsIDB4OTMxMiwgMHgwMTA4LCAweDEyMTgsCi0JMHgyM2E4LCAweDQwMDMsIDB4MDA0OCwgMHgyMGE4LCAweDQwMDMsIDB4MjJhOCwgMHg4MTA4LCAweDA4MGMsCi0JMHgyMjE2LCAweDIwOTksIDB4MDI2MCwgMHgwY2E4LCAweDIwNjEsIDB4MTlhMiwgMHgyMDE5LCAweDAyODAsCi0JMHgzMzAwLCAweDkzMWUsIDB4MDExMCwgMHg2MDA2LCAweDAwMjAsIDB4MjAwMSwgMHgwMjYwLCAweDYwMDYsCi0JMHg4MTA4LCAweDIxNjIsIDB4OTI5MiwgMHgwMDIxLCAweDkyOTYsIDB4ZmZmZiwgMHg2MjBhLCAweDAwY2UsCi0JMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMDM2LCAweDAwYzYsIDB4ODFmZiwgMHgxMWI4LCAweDA4MGMsIDB4MjIyZSwgMHgyMGExLCAweDAyNGMsCi0JMHgyMDAxLCAweDAwMTQsIDB4MzUxOCwgMHg5MzEyLCAweDEyMTgsIDB4MjNhOCwgMHg0MDAzLCAweDA0MTgsCi0JMHgyMGE4LCAweDQwMDMsIDB4ODJmZiwgMHgwMWY4LCAweDIyYTgsIDB4ODEwOCwgMHgwODBjLCAweDIyMmUsCi0JMHgyMGExLCAweDAyNDAsIDB4MGM5OCwgMHgwODBjLCAweDIyMmUsIDB4MjA2MSwgMHgxOWE1LCAweDYwMDQsCi0JMHgyMGEwLCAweDYwMDgsIDB4MzUxOCwgMHg5MzEyLCAweDEyMTgsIDB4MjNhOCwgMHg0MDAzLCAweDAwNTgsCi0JMHgyMGE4LCAweDQwMDMsIDB4ODJmZiwgMHgwMTM4LCAweDIyYTgsIDB4ODEwOCwgMHgwODBjLCAweDIyMmUsCi0JMHgyMGExLCAweDAyNDAsIDB4MGM5OCwgMHgyMDYxLCAweDE5YTUsIDB4MjAxOSwgMHgwMjYwLCAweDM0MDAsCi0JMHg5MzFlLCAweDAxMTAsIDB4NjAwNiwgMHgwMDIwLCAweDIwMDEsIDB4MDI0MCwgMHg2MDA2LCAweDgxMDgsCi0JMHgyMTYyLCAweDkyOTIsIDB4MDAyMSwgMHg5Mjk2LCAweGZmZmYsIDB4NjIwYSwgMHgwMGNlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA2NiwgMHg2NjEwLCAweDI2NTgsCi0JMHhiZTA0LCAweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwMTcwLCAweDk2ODYsCi0JMHgwMDA0LCAweDAxNTgsIDB4YmUwNCwgMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxMjgsCi0JMHg5Njg2LCAweDAwMDQsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsIDB4MDA2ZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMGQ2LCAweDA4MGMsIDB4ZGFlYSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweGRhZjcsCi0JMHgxNTIwLCAweDY4MGMsIDB4OTA4YywgMHhmZjAwLCAweDY4MjAsIDB4OTA4NCwgMHgwMGZmLCAweDkxMTUsCi0JMHg2MjE2LCAweDY4MjQsIDB4NjAyZSwgMHhkMWU0LCAweDAxMzAsIDB4OTAwNiwgMHgwODBjLCAweGViNWQsCi0JMHgyMDA5LCAweDAwMDEsIDB4MDA3OCwgMHhkMWVjLCAweDAxODAsIDB4NjkyMCwgMHg5MThjLCAweDAwZmYsCi0JMHg2ODI0LCAweDA4MGMsIDB4MjZhMSwgMHgxMTQ4LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweGViNWQsCi0JMHgyMTEwLCAweDkwMGUsIDB4MDgwYywgMHgzMzRhLCAweDAwMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsCi0JMHg5MDA2LCAweDAwZGUsIDB4MDAwNSwgMHgwMGI2LCAweDAwYzYsIDB4MDgwYywgMHhhZmJmLCAweDA1OTgsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDBjNiwgMHgyMDExLCAweDAyNjMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsCi0JMHgwODBjLCAweDI2YTEsIDB4MTU2OCwgMHgwODBjLCAweDY3MTgsIDB4MTU1MCwgMHhiZTEyLCAweGJkMTYsCi0JMHgwMGNlLCAweDAwMmUsIDB4MDAxZSwgMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHhlOThmLCAweDExYzgsCi0JMHgwODBjLCAweDM0MzIsIDB4MTFiMCwgMHgwODBjLCAweGRhNTQsIDB4MDUwMCwgMHgyMDAxLCAweDAwMDcsCi0JMHgwODBjLCAweDY2YzksIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjZmNSwgMHg2MDE3LCAweDAwMDAsCi0JMHg2MDIzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk0MjcsCi0JMHgwMDEwLCAweDA4MGMsIDB4YWY0ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwODBjLCAweGFmNGUsIDB4MDBjZSwgMHgwMDJlLCAweDAwMWUsIDB4MGNhOCwgMHgwODBjLCAweGFmNGUsCi0JMHg5MDA2LCAweDBjOTgsIDB4MjA2OSwgMHgwMjZkLCAweDY4MDAsIDB4OTA4MiwgMHgwMDEwLCAweDEyMjgsCi0JMHg2MDE3LCAweDAwMDAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMDA1LCAweDYwMTcsCi0JMHgwMDAwLCAweDIwNjksIDB4MDI2YywgMHg2ODA4LCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LCAweDA4MDAsCi0JMHgxMTkwLCAweDY5MDQsIDB4OTE4NiwgMHgwMDE4LCAweDAxMTgsIDB4OTE4NiwgMHgwMDE0LCAweDExNTgsCi0JMHg4MTBmLCAweDY4MDAsIDB4OTA4NCwgMHgwMGZmLCAweDkxMGQsIDB4NjE2MiwgMHg5MDhlLCAweDAwMTQsCi0JMHgwMTEwLCAweDkwOGUsIDB4MDAxMCwgMHgwMDA1LCAweDYwMDQsIDB4OTBiMiwgMHgwMDUzLCAweDFhMGMsCi0JMHgwZDc5LCAweDkxYjYsIDB4MDAxMywgMHgxMTMwLCAweDIwMDgsIDB4OTFiMiwgMHgwMDQwLCAweDFhMDQsCi0JMHhkYzRjLCAweDA0MDIsIDB4OTFiNiwgMHgwMDI3LCAweDAxOTAsIDB4OTE4NiwgMHgwMDE1LCAweDAxMTgsCi0JMHg5MTg2LCAweDAwMTYsIDB4MTE0MCwgMHgwODBjLCAweGFkNGQsIDB4MDEyMCwgMHg5MDg2LCAweDAwMDIsCi0JMHgwOTA0LCAweGI5ODMsIDB4MDAwNSwgMHg5MWI2LCAweDAwMTQsIDB4MTkwYywgMHgwZDc5LCAweDIwMDEsCi0JMHgwMDA3LCAweDA4MGMsIDB4NjZmNSwgMHgwODBjLCAweDk3ZjYsIDB4MDgwYywgMHhhZjg5LCAweDA4MGMsCi0JMHg5OGJjLCAweDAwMDUsIDB4ZGI4MiwgMHhkYjg0LCAweGRiODIsIDB4ZGI4MiwgMHhkYjgyLCAweGRiODQsCi0JMHhkYjkxLCAweGRjNDksIDB4ZGJkMywgMHhkYzQ5LCAweGRiZjcsIDB4ZGM0OSwgMHhkYjkxLCAweGRjNDksCi0JMHhkYzQxLCAweGRjNDksIDB4ZGM0MSwgMHhkYzQ5LCAweGRjNDksIDB4ZGI4MiwgMHhkYjgyLCAweGRiODIsCi0JMHhkYjgyLCAweGRiODIsIDB4ZGI4MiwgMHhkYjgyLCAweGRiODIsIDB4ZGI4MiwgMHhkYjgyLCAweGRiODIsCi0JMHhkYjg0LCAweGRiODIsIDB4ZGM0OSwgMHhkYjgyLCAweGRiODIsIDB4ZGM0OSwgMHhkYjgyLCAweGRjNDYsCi0JMHhkYzQ5LCAweGRiODIsIDB4ZGI4MiwgMHhkYjgyLCAweGRiODIsIDB4ZGM0OSwgMHhkYzQ5LCAweGRiODIsCi0JMHhkYzQ5LCAweGRjNDksIDB4ZGI4MiwgMHhkYjhjLCAweGRiODIsIDB4ZGI4MiwgMHhkYjgyLCAweGRiODIsCi0JMHhkYzQ1LCAweGRjNDksIDB4ZGI4MiwgMHhkYjgyLCAweGRjNDksIDB4ZGM0OSwgMHhkYjgyLCAweGRiODIsCi0JMHhkYjgyLCAweGRiODIsIDB4MDgwYywgMHgwZDc5LCAweDA4MGMsIDB4ZDM3NSwgMHg2MDAzLCAweDAwMDIsCi0JMHgwODBjLCAweDk4YmMsIDB4MDgwNCwgMHhkYzRiLCAweDkwMDYsIDB4MDgwYywgMHg2NmI1LCAweDA4MDQsCi0JMHhkYzQ5LCAweDA4MGMsIDB4NmJjNSwgMHgxOTA0LCAweGRjNDksIDB4OTAwNiwgMHgwODBjLCAweDY2YjUsCi0JMHg2MDEwLCAweDIwNTgsIDB4YjgxMCwgMHg5MDg2LCAweDAwZmYsIDB4MTE0MCwgMHgwMGY2LCAweDIwNzksCi0JMHgxODAwLCAweDc4YTgsIDB4ODAwMCwgMHg3OGFhLCAweDAwZmUsIDB4MDBiOCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiODg0LCAweDkwMDUsIDB4MDkwNCwgMHhkYzQ5LCAweDA4MGMsIDB4MzQ2MywgMHgxOTA0LCAweGRjNDksCi0JMHgyMDAxLCAweDE4MDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDIsIDB4MTEzOCwgMHgwMGY2LCAweDIwNzksCi0JMHgxODAwLCAweDc4YTgsIDB4ODAwMCwgMHg3OGFhLCAweDAwZmUsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCi0JMHg2NmM5LCAweDYwMjMsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsCi0JMHg5NDI3LCAweDA4MGMsIDB4OThiYywgMHg2MTEwLCAweDIxNTgsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsCi0JMHg4ODNhLCAweDA4MDQsIDB4ZGM0YiwgMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwgMHg5NmI0LCAweGZmMDAsCi0JMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwMTQ4LCAweDk2ODYsIDB4MDAwNCwgMHgwMTMwLCAweDA4MGMsCi0JMHg5MGJlLCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDY2ZjUsIDB4MDgwYywgMHhlYmFjLCAweDA5MDQsCi0JMHhkYzQ5LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDY2YzksIDB4NjAyMywgMHgwMDAxLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDAwMywgMHgwODBjLCAweDk0MjcsIDB4MDgwNCwgMHhkYzRiLCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDExNTgsIDB4MDAzNiwgMHgwMDQ2LCAweDYwMTAsCi0JMHgyMDU4LCAweGJiYTAsIDB4MjAyMSwgMHgwMDA2LCAweDA4MGMsIDB4NGRkZiwgMHgwMDRlLCAweDAwM2UsCi0JMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHhkYzY1LCAweDY2MTAsIDB4MjY1OCwgMHhiZTA0LCAweDAwNjYsCi0JMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsIDB4MDA2ZSwgMHgwMTgwLCAweDIwMDEsCi0JMHgwMDA2LCAweDA4MGMsIDB4NjZmNSwgMHg5Mjg0LCAweDAwZmYsIDB4OTA4ZSwgMHgwMDA3LCAweDAxMTgsCi0JMHg5MDhlLCAweDAwMDQsIDB4MTEyMCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2NmM5LCAweDA4MGMsCi0JMHg2YmM1LCAweDExZjgsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4ZDBhNCwgMHgwMWQwLCAweGJlMDQsCi0JMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxYTAsIDB4MDBmNiwgMHgyMDc5LCAweDE4MDAsCi0JMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwgMHgwMGZlLCAweDA4MDQsIDB4ZGJiZCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwMDMwLCAweDIwMDEsIDB4MDAwNiwgMHgwNDA5LCAweDAwMjAsIDB4MDAxOCwgMHgwMDEwLCAweDA4MGMsCi0JMHg2NmY1LCAweDA4MGMsIDB4YWY0ZSwgMHgwMDA1LCAweDI2MDAsIDB4MDAwMiwgMHhkYzYwLCAweGRjNjAsCi0JMHhkYzYwLCAweGRjNjAsIDB4ZGM2MCwgMHhkYzYyLCAweGRjNjAsIDB4ZGM2MiwgMHhkYzYwLCAweGRjNjAsCi0JMHhkYzYyLCAweGRjNjAsIDB4ZGM2MCwgMHhkYzYwLCAweGRjNjIsIDB4ZGM2MiwgMHhkYzYyLCAweGRjNjIsCi0JMHgwODBjLCAweDBkNzksIDB4MDgwYywgMHhhZjRlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGI2LCAweDAwZDYsCi0JMHg2MTEwLCAweDIxNTgsIDB4YjkwMCwgMHhkMTg0LCAweDAxMzgsIDB4MDgwYywgMHg2NmM5LCAweDkwMDYsCi0JMHgwODBjLCAweDY2YjUsIDB4MDgwYywgMHgzMzJhLCAweDAwZGUsIDB4MDBiZSwgMHgwMDFlLCAweDAwMDUsCi0JMHg2NjEwLCAweDI2NTgsIDB4YjgwNCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MGIyLCAweDAwMGMsCi0JMHgxYTBjLCAweDBkNzksIDB4OTFiNiwgMHgwMDE1LCAweDExMTAsIDB4MDAzYiwgMHgwMDI4LCAweDkxYjYsCi0JMHgwMDE2LCAweDE5MGMsIDB4MGQ3OSwgMHgwMDZiLCAweDAwMDUsIDB4YmEyNSwgMHhiYTI1LCAweGJhMjUsCi0JMHhiYTI1LCAweGRjZmEsIDB4YmEyNSwgMHhkY2U0LCAweGRjYTUsIDB4YmEyNSwgMHhiYTI1LCAweGJhMjUsCi0JMHhiYTI1LCAweGJhMjUsIDB4YmEyNSwgMHhiYTI1LCAweGJhMjUsIDB4ZGNmYSwgMHhiYTI1LCAweGRjZTQsCi0JMHhkY2ViLCAweGJhMjUsIDB4YmEyNSwgMHhiYTI1LCAweGJhMjUsIDB4MDBmNiwgMHgwODBjLCAweDZiYzUsCi0JMHgxMWQ4LCAweDA4MGMsIDB4ZDM1ZCwgMHgxMWMwLCAweDYwMTAsIDB4OTA1ZCwgMHgwMWE4LCAweGI4ODQsCi0JMHg5MDA1LCAweDAxOTAsIDB4OTAwNiwgMHgwODBjLCAweDY2YjUsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCi0JMHg2NmM5LCAweDYwMjMsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsCi0JMHg5NDI3LCAweDA4MGMsIDB4OThiYywgMHgwMGYwLCAweDIwMTEsIDB4MDI2MywgMHgyMjA0LCAweDgyMTEsCi0JMHgyMjBjLCAweDA4MGMsIDB4MjZhMSwgMHgxMWIwLCAweDA4MGMsIDB4Njc4MywgMHgwMTE4LCAweDA4MGMsCi0JMHhhZjRlLCAweDAwODAsIDB4YjgxMCwgMHgwMDA2LCAweGI4MTQsIDB4MDAwNiwgMHhiODg0LCAweDAwMDYsCi0JMHgwODBjLCAweDYxOTIsIDB4MDAwZSwgMHhiODg2LCAweDAwMGUsIDB4YjgxNiwgMHgwMDBlLCAweGI4MTIsCi0JMHgwODBjLCAweGFmNGUsIDB4MDBmZSwgMHgwMDA1LCAweDY2MDQsIDB4OTZiNiwgMHgwMDFlLCAweDExMTAsCi0JMHgwODBjLCAweGFmNGUsIDB4MDAwNSwgMHgwODBjLCAweGJkYjQsIDB4MTE0OCwgMHg2MDAzLCAweDAwMDEsCi0JMHg2MDA3LCAweDAwMDEsIDB4MDgwYywgMHg5NDI3LCAweDA4MGMsIDB4OThiYywgMHgwMDEwLCAweDA4MGMsCi0JMHhhZjRlLCAweDAwMDUsIDB4MDgwNCwgMHhhZjRlLCAweDYwMDQsIDB4OTA4YSwgMHgwMDUzLCAweDFhMGMsCi0JMHgwZDc5LCAweDA4MGMsIDB4OTdmNiwgMHgwODBjLCAweGFmODksIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsCi0JMHgwMDAyLCAweGRkMWQsIDB4ZGQxZCwgMHhkZDFkLCAweGRkMWQsIDB4ZGQxZiwgMHhkZDFkLCAweGRkMWQsCi0JMHhkZDFkLCAweGRkMWQsIDB4ZGQxZCwgMHhkZDFkLCAweGRkMWQsIDB4ZGQxZCwgMHhkZDFkLCAweGRkMWQsCi0JMHhkZDFkLCAweGRkMWQsIDB4ZGQxZCwgMHhkZDFkLCAweGRkMWQsIDB4MDgwYywgMHgwZDc5LCAweDAwOTYsCi0JMHgwMGI2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDAwNDYsIDB4MDAyNiwgMHg2MjEwLCAweDIyNTgsCi0JMHhiOGJjLCAweDkwMDUsIDB4MTFiMCwgMHg2MDA3LCAweDAwNDQsIDB4MjA3MSwgMHgwMjYwLCAweDc0NDQsCi0JMHg5NGE0LCAweGZmMDAsIDB4MDkwNCwgMHhkZDg2LCAweDA4MGMsIDB4ZWI1MSwgMHgxMTcwLCAweDk0ODYsCi0JMHgyMDAwLCAweDExNTgsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDIwMCwgMHgwODBjLCAweDhhZGQsCi0JMHgwMDIwLCAweDkwMjYsIDB4MDgwYywgMHhlOWQ0LCAweDBjMzAsIDB4MDgwYywgMHgxMDRkLCAweDA5MGMsCi0JMHgwZDc5LCAweDYwMDMsIDB4MDAwNywgMHhhODY3LCAweDAxMGQsIDB4OTAwNiwgMHhhODAyLCAweGE4NmEsCi0JMHhhYzhhLCAweDJjMDAsIDB4YTg4ZSwgMHg2MDA4LCAweGE4ZTIsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsCi0JMHg3MTMwLCAweGE5N2EsIDB4MDAxNiwgMHhhODc2LCAweGE4N2YsIDB4MDAwMCwgMHhhODgzLCAweDAwMDAsCi0JMHhhODg3LCAweDAwMzYsIDB4MDgwYywgMHg2ZjExLCAweDAwMWUsIDB4MDgwYywgMHhlYjUxLCAweDE5MDQsCi0JMHhkZGU2LCAweDk0ODYsIDB4MjAwMCwgMHgxMTMwLCAweDIwMTksIDB4MDAxNywgMHgwODBjLCAweGU3MDEsCi0JMHgwODA0LCAweGRkZTYsIDB4OTQ4NiwgMHgwMjAwLCAweDExMjAsIDB4MDgwYywgMHhlNjhjLCAweDA4MDQsCi0JMHhkZGU2LCAweDk0ODYsIDB4MDQwMCwgMHgwMTIwLCAweDk0ODYsIDB4MTAwMCwgMHgxOTA0LCAweGRkZTYsCi0JMHgyMDE5LCAweDAwMDIsIDB4MDgwYywgMHhlNmFiLCAweDA4MDQsIDB4ZGRlNiwgMHgyMDY5LCAweDFhNzQsCi0JMHg2YTAwLCAweGQyODQsIDB4MDkwNCwgMHhkZTUwLCAweDkyODQsIDB4MDMwMCwgMHgxOTA0LCAweGRlNDksCi0JMHg2ODA0LCAweDkwMDUsIDB4MDkwNCwgMHhkZTMxLCAweDJkNzgsIDB4NjAwMywgMHgwMDA3LCAweDA4MGMsCi0JMHgxMDY2LCAweDA5MDQsIDB4ZGRmMiwgMHg3ODAwLCAweGQwOGMsIDB4MTExOCwgMHg3ODA0LCAweDgwMDEsCi0JMHg3ODA2LCAweDYwMTcsIDB4MDAwMCwgMHgyMDAxLCAweDE4MGYsIDB4MjAwNCwgMHhkMDg0LCAweDE5MDQsCi0JMHhkZTU0LCAweDkwMDYsIDB4YTgwMiwgMHhhODY3LCAweDAxMTYsIDB4YTg2YSwgMHg2MDA4LCAweGE4ZTIsCi0JMHgyYzAwLCAweGE4N2EsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsIDB4NzEzMCwgMHhhOWI2LCAweGE4NzYsCi0JMHhiOTI4LCAweGE5YmEsIDB4YjkyYywgMHhhOWJlLCAweGI5MzAsIDB4YTljMiwgMHhiOTM0LCAweGE5YzYsCi0JMHhhODgzLCAweDAwM2QsIDB4NzA0NCwgMHg5MDg0LCAweDAwMDMsIDB4OTA4MCwgMHhkZGVlLCAweDIwMDUsCi0JMHhhODdlLCAweDIwYTksIDB4MDAwYSwgMHgyMDAxLCAweDAyNzAsIDB4YWE1YywgMHg5MjkwLCAweDAwMjEsCi0JMHgyMDA5LCAweDAyMDUsIDB4MjAwYiwgMHgwMDgwLCAweDIwZTEsIDB4MDAwMCwgMHhhYjYwLCAweDIzZTgsCi0JMHgyMDk4LCAweDIyYTAsIDB4NDAwMywgMHgyMDBiLCAweDAwMDAsIDB4MjAwMSwgMHgwMjdhLCAweDIwMGMsCi0JMHhhOWIyLCAweDgwMDAsIDB4MjAwYywgMHhhOWFlLCAweDA4MGMsIDB4NmYxNCwgMHgwMDJlLCAweDAwNGUsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGJlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDAwLCAweDAwODAsCi0JMHgwMDQwLCAweDAwMDAsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsIDB4ZDA4NCwgMHgwMTIwLCAweDA4MGMsCi0JMHgxMDRkLCAweDE5MDQsIDB4ZGQ5YiwgMHg2MDE3LCAweGYxMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCi0JMHgwMDQxLCAweDIwMDksIDB4YTAyMiwgMHgwODBjLCAweDk0MjAsIDB4MGMwMCwgMHgyMDY5LCAweDAyNjAsCi0JMHg2ODQ4LCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LCAweDEyMDAsIDB4MTE5OCwgMHg2ODZjLCAweDkwODQsCi0JMHgwMGZmLCAweDAwMTYsIDB4NjExNCwgMHg5MThjLCAweGY3MDAsIDB4OTEwZCwgMHg2MTE2LCAweDAwMWUsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQzLCAweDIwMDksIDB4YTAyNSwgMHgwODBjLCAweDk0MjAsCi0JMHgwODI4LCAweDY4NjgsIDB4NjAyZSwgMHg2ODZjLCAweDYwMzIsIDB4NjAxNywgMHhmMjAwLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgyMDA5LCAweGEwMjIsIDB4MDgwYywgMHg5NDIwLCAweDA4MDQsCi0JMHhkZGU2LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZWMsIDB4MDEyMCwgMHgyMDExLCAweDgwNDksCi0JMHgwODBjLCAweDRjMjgsIDB4NjAxNywgMHhmMzAwLCAweDAwMTAsIDB4NjAxNywgMHhmMTAwLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgyMDA5LCAweGEwMjIsIDB4MDgwYywgMHg5NDIwLCAweDA4MDQsCi0JMHhkZGU2LCAweDYwMTcsIDB4ZjUwMCwgMHgwYzk4LCAweDYwMTcsIDB4ZjYwMCwgMHgwODA0LCAweGRlMDYsCi0JMHg2MDE3LCAweGYyMDAsIDB4MDgwNCwgMHhkZTA2LCAweGE4NjcsIDB4MDE0NiwgMHhhODZiLCAweDAwMDAsCi0JMHg2MDA4LCAweGE4ODYsIDB4MmMwMCwgMHhhODdhLCAweDcwNDQsIDB4OTA4NCwgMHgwMDAzLCAweDkwODAsCi0JMHhkZGVlLCAweDIwMDUsIDB4YTg3ZSwgMHgyOTI4LCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweGE4NzYsCi0JMHhiODI4LCAweGE4OGEsIDB4YjgyYywgMHhhODhlLCAweGI4MzAsIDB4YTg5MiwgMHhiODM0LCAweGE4OTYsCi0JMHhhODgzLCAweDAwM2QsIDB4MjAwOSwgMHgwMjA1LCAweDIxMDQsIDB4OTA4NSwgMHgwMDgwLCAweDIwMGEsCi0JMHgyMGUxLCAweDAwMDAsIDB4MjAxMSwgMHgwMjEwLCAweDIyMTQsIDB4OTI5NCwgMHgwZmZmLCAweGFhYTIsCi0JMHg5MjgyLCAweDAxMTEsIDB4MWEwYywgMHgwZDc5LCAweDgyMTAsIDB4ODIxYywgMHgyMDAxLCAweDAyNmMsCi0JMHgyMDk4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAyOSwgMHgyMGEwLCAweDIwMTEsCi0JMHhkZWQwLCAweDIwNDEsIDB4MDAwMSwgMHgyMjNkLCAweDk3ODQsIDB4MDBmZiwgMHg5MzIyLCAweDEyMDgsCi0JMHgyMzAwLCAweDIwYTgsIDB4NDAwMywgMHg5MzFhLCAweDA1MzAsIDB4ODIxMCwgMHhkN2ZjLCAweDExMzAsCi0JMHg4ZDY4LCAweDJkMGEsIDB4MjAwMSwgMHgwMjYwLCAweDIwOTgsIDB4MGM2OCwgMHgyOTUwLCAweDA4MGMsCi0JMHgxMDY2LCAweDAxNzAsIDB4MjkwMCwgMHhiMDAyLCAweGE4NjcsIDB4MDE0NywgMHhhODZiLCAweDAwMDAsCi0JMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsIDB4MjBhMCwgMHg4ODQwLCAweDA4ZDgsCi0JMHgyNTQ4LCAweGE4MDAsIDB4OTAyZCwgMHgwMTE4LCAweDA4MGMsIDB4MTA3ZiwgMHgwY2M4LCAweDA4MGMsCi0JMHgxMDdmLCAweDA4MDQsIDB4ZGRmMiwgMHgyNTQ4LCAweDg4NDcsIDB4OTg4NSwgMHgwMDQ2LCAweGE4NjYsCi0JMHgyMDA5LCAweDAyMDUsIDB4MjAwYiwgMHgwMDAwLCAweDA4MGMsIDB4ZTczOCwgMHgwODA0LCAweGRkZTYsCi0JMHg4MDEwLCAweDAwMDQsIDB4ODAxYSwgMHgwMDA2LCAweDgwMTgsIDB4MDAwOCwgMHg4MDE2LCAweDAwMGEsCi0JMHg4MDE0LCAweDkxODYsIDB4MDAxMywgMHgxMTYwLCAweDYwMDQsIDB4OTA4YSwgMHgwMDU3LCAweDFhMGMsCi0JMHgwZDc5LCAweDkwODIsIDB4MDA0MCwgMHgwYTBjLCAweDBkNzksIDB4MjAwOCwgMHgwODA0LCAweGRmNWMsCi0JMHg5MTg2LCAweDAwNTEsIDB4MDEwOCwgMHgwMDQwLCAweDA4MGMsIDB4YWQ0ZCwgMHgwMWU4LCAweDkwODYsCi0JMHgwMDAyLCAweDA5MDQsIDB4ZGZhNCwgMHgwMGMwLCAweDkxODYsIDB4MDAyNywgMHgwMTgwLCAweDkxODYsCi0JMHgwMDQ4LCAweDAxMjgsIDB4OTE4NiwgMHgwMDE0LCAweDAxNTAsIDB4MTkwYywgMHgwZDc5LCAweDA4MGMsCi0JMHhhZDRkLCAweDAxNTAsIDB4OTA4NiwgMHgwMDA0LCAweDA5MDQsIDB4ZTA0MywgMHgwMDI4LCAweDYwMDQsCi0JMHg5MDgyLCAweDAwNDAsIDB4MjAwOCwgMHgwMDFhLCAweDA4MGMsIDB4YjAwOSwgMHgwMDA1LCAweGRmMjMsCi0JMHhkZjI1LCAweGRmMjUsIDB4ZGY0YywgMHhkZjIzLCAweGRmMjMsIDB4ZGYyMywgMHhkZjIzLCAweGRmMjMsCi0JMHhkZjIzLCAweGRmMjMsIDB4ZGYyMywgMHhkZjIzLCAweGRmMjMsIDB4ZGYyMywgMHhkZjIzLCAweGRmMjMsCi0JMHhkZjIzLCAweGRmMjMsIDB4ZGYyMywgMHgwODBjLCAweDBkNzksIDB4MDgwYywgMHg5N2Y2LCAweDA4MGMsCi0JMHg5OGJjLCAweDAwMzYsIDB4MDA5NiwgMHg2MDE0LCAweDkwNGQsIDB4MDFkOCwgMHgwODBjLCAweGNjMzMsCi0JMHgwMWMwLCAweDYwMDMsIDB4MDAwMiwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsCi0JMHhkMGJjLCAweDExNzgsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4ZTczOCwgMHg2MDE3LCAweDAwMDAsCi0JMHg2MDE4LCAweDkwMDUsIDB4MTEyMCwgMHgyMDAxLCAweDE5ODgsIDB4MjAwNCwgMHg2MDFhLCAweDYwMDMsCi0JMHgwMDA3LCAweDAwOWUsIDB4MDAzZSwgMHgwMDA1LCAweDAwOTYsIDB4MDgwYywgMHg5N2Y2LCAweDA4MGMsCi0JMHg5OGJjLCAweDA4MGMsIDB4Y2MzMywgMHgwMTIwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweDEwN2YsCi0JMHgwODBjLCAweGFmODksIDB4MDA5ZSwgMHgwMDA1LCAweDAwMDIsIDB4ZGY3MSwgMHhkZjg2LCAweGRmNzMsCi0JMHhkZjliLCAweGRmNzEsIDB4ZGY3MSwgMHhkZjcxLCAweGRmNzEsIDB4ZGY3MSwgMHhkZjcxLCAweGRmNzEsCi0JMHhkZjcxLCAweGRmNzEsIDB4ZGY3MSwgMHhkZjcxLCAweGRmNzEsIDB4ZGY3MSwgMHhkZjcxLCAweGRmNzEsCi0JMHhkZjcxLCAweDA4MGMsIDB4MGQ3OSwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwYjQsCi0JMHgwMTM4LCAweDYwMDMsIDB4MDAwNywgMHgyMDA5LCAweDAwNDMsIDB4MDgwYywgMHhhZmVjLCAweDAwMTAsCi0JMHg2MDAzLCAweDAwMDQsIDB4MDgwYywgMHg5OGJjLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweGNjMzMsCi0JMHgwMTM4LCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweGE5N2MsIDB4MDA5ZSwgMHhkMWVjLCAweDExMzgsCi0JMHgwODBjLCAweDhhYjIsIDB4MDgwYywgMHhhZjRlLCAweDA4MGMsIDB4OThiYywgMHgwMDA1LCAweDA4MGMsCi0JMHhlOTk4LCAweDBkYjAsIDB4MGNjOCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQxLCAweDIwMDksCi0JMHhhMDIyLCAweDA4MGMsIDB4OTQyMCwgMHgwMDA1LCAweDkxODIsIDB4MDA0MCwgMHgwMDAyLCAweGRmYmIsCi0JMHhkZmJkLCAweGRmYmIsIDB4ZGZiYiwgMHhkZmJiLCAweGRmYmIsIDB4ZGZiYiwgMHhkZmJiLCAweGRmYmIsCi0JMHhkZmJiLCAweGRmYmIsIDB4ZGZiYiwgMHhkZmJiLCAweGRmYmIsIDB4ZGZiYiwgMHhkZmJiLCAweGRmYmIsCi0JMHhkZmJlLCAweGRmYmIsIDB4ZGZiYiwgMHgwODBjLCAweDBkNzksIDB4MDAwNSwgMHgwMGQ2LCAweDA4MGMsCi0JMHg4YWIyLCAweDAwZGUsIDB4MDgwYywgMHhlOWYwLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDA1LCAweDkxODIsCi0JMHgwMDQwLCAweDAwMDIsIDB4ZGZkZSwgMHhkZmRlLCAweGRmZGUsIDB4ZGZkZSwgMHhkZmRlLCAweGRmZGUsCi0JMHhkZmRlLCAweGRmZGUsIDB4ZGZkZSwgMHhkZmUwLCAweGUwMGIsIDB4ZGZkZSwgMHhkZmRlLCAweGRmZGUsCi0JMHhkZmRlLCAweGUwMGIsIDB4ZGZkZSwgMHhkZmRlLCAweGRmZGUsIDB4ZGZkZSwgMHgwODBjLCAweDBkNzksCi0JMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsIDB4MDE2OCwgMHg5MDhjLCAweDAwMDMsCi0JMHg5MThlLCAweDAwMDIsIDB4MDE4MCwgMHg2MTQ0LCAweGQxZTQsIDB4MTE2OCwgMHgyMDA5LCAweDAwNDEsCi0JMHgwMDllLCAweDA4MDQsIDB4ZTBjYiwgMHg2MDAzLCAweDAwMDcsIDB4NjAxYiwgMHgwMDAwLCAweDA4MGMsCi0JMHg4YWIyLCAweDAwOWUsIDB4MDAwNSwgMHg2MDE0LCAweDIwNDgsIDB4YTk3YywgMHhkMWVjLCAweDExMzAsCi0JMHgwODBjLCAweDhhYjIsIDB4MDgwYywgMHhhZjRlLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweGU5OTgsCi0JMHgwZGI4LCAweDAwOWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMWQ0LCAweDIxMDIsCi0JMHgwMDM2LCAweDA4MGMsIDB4OTg1MSwgMHgwODBjLCAweDk4YmMsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwMTg4LCAweGE4N2MsCi0JMHg5MDg0LCAweDAwMDMsIDB4OTA4NiwgMHgwMDAyLCAweDAxNDAsIDB4YThhYywgMHg2MzMwLCAweDkzMWEsCi0JMHg2MzMyLCAweGE4YjAsIDB4NjMyYywgMHg5MzFiLCAweDYzMmUsIDB4NjAwMywgMHgwMDAyLCAweDAwODAsCi0JMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHhlNzM4LCAweDYwMTgsIDB4OTAwNSwgMHgxMTI4LCAweDIwMDEsCi0JMHgxOTg4LCAweDIwMDQsIDB4ODAwMywgMHg2MDFhLCAweDYwMTcsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDcsCi0JMHgwMDllLCAweDAwM2UsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHhlMDVhLCAweGUwNWEsCi0JMHhlMDVhLCAweGUwNWEsIDB4ZTA1YSwgMHhlMDVhLCAweGUwNWEsIDB4ZTA1YSwgMHhlMDVjLCAweGUwNWEsCi0JMHhlMDVhLCAweGUwNWEsIDB4ZTA1YSwgMHhlMDVhLCAweGUwNWEsIDB4ZTA1YSwgMHhlMDVhLCAweGUwNWEsCi0JMHhlMDVhLCAweGUwYTcsIDB4MDgwYywgMHgwZDc5LCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4MzQsCi0JMHhhYTM4LCAweDYxMTAsIDB4MDBiNiwgMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWJjLCAweDExOTAsCi0JMHg5MjBkLCAweDE1MTgsIDB4YTg3YywgMHhkMGZjLCAweDAxMjgsIDB4MjAwOSwgMHgwMDQxLCAweDAwOWUsCi0JMHgwODA0LCAweGUwY2IsIDB4NjAwMywgMHgwMDA3LCAweDYwMWIsIDB4MDAwMCwgMHgwODBjLCAweDhhYjIsCi0JMHgwMDllLCAweDAwMDUsIDB4NjEyNCwgMHhkMWY0LCAweDFkNTgsIDB4MDAwNiwgMHgwMDQ2LCAweGFjYWMsCi0JMHg5NDIyLCAweGE5YjAsIDB4MjIwMCwgMHg5MTBiLCAweDYwMzAsIDB4OTQyMCwgMHg2NDMyLCAweDYwMmMsCi0JMHg5MTA5LCAweDYxMmUsIDB4MDA0ZSwgMHgwMDBlLCAweDA4ZDgsIDB4NjExMCwgMHgwMGI2LCAweDIxNTgsCi0JMHhiOTAwLCAweDAwYmUsIDB4ZDFiYywgMHgxMTc4LCAweDIwMDksIDB4MTgwZSwgMHgyMTBjLCAweGQxOWMsCi0JMHgwMTE4LCAweDYwMDMsIDB4MDAwNywgMHgwMDEwLCAweDYwMDMsIDB4MDAwNiwgMHgwMGU5LCAweDA4MGMsCi0JMHg4YWI0LCAweDAwOWUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDIsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMjQsCi0JMHhkMGY0LCAweDAxMjgsIDB4MDgwYywgMHgxNmE0LCAweDE5MDQsIDB4ZTA1YywgMHgwMDA1LCAweDYwMTQsCi0JMHgwMDk2LCAweDIwNDgsIDB4YTgzNCwgMHhhOTM4LCAweDAwOWUsIDB4OTEwNSwgMHgxMTIwLCAweDA4MGMsCi0JMHgxNmE0LCAweDE5MDQsIDB4ZTA1YywgMHgwMDA1LCAweGQyZmMsIDB4MDE0MCwgMHg4MDAyLCAweDgwMDAsCi0JMHg4MjEyLCAweDkyOTEsIDB4MDAwMCwgMHgyMDA5LCAweDAwMDksIDB4MDAxMCwgMHgyMDA5LCAweDAwMTUsCi0JMHhhYTlhLCAweGE4OTYsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsIDB4MDIwOCwgMHgwMDYyLCAweDkxODYsCi0JMHgwMDEzLCAweDAxMjAsIDB4OTE4NiwgMHgwMDE0LCAweDE5MGMsIDB4MGQ3OSwgMHg2MDI0LCAweGQwZGMsCi0JMHgwOTBjLCAweDBkNzksIDB4MDAwNSwgMHhlMGVmLCAweGUwZmIsIDB4ZTEwNywgMHhlMTEzLCAweGUwZWYsCi0JMHhlMGVmLCAweGUwZWYsIDB4ZTBlZiwgMHhlMGY2LCAweGUwZjEsIDB4ZTBmMSwgMHhlMGVmLCAweGUwZWYsCi0JMHhlMGVmLCAweGUwZWYsIDB4ZTBmMSwgMHhlMGVmLCAweGUwZjEsIDB4ZTBlZiwgMHhlMGY2LCAweDA4MGMsCi0JMHgwZDc5LCAweDYwMjQsIDB4ZDBkYywgMHgwOTBjLCAweDBkNzksIDB4MDAwNSwgMHg2MDE0LCAweDkwMDUsCi0JMHgxOTBjLCAweDBkNzksIDB4MDAwNSwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwMDksIDB4YTAyMiwgMHgwODBjLCAweDk0MDIsIDB4MDEyZSwgMHgwMDA1LCAweDYwMDMsCi0JMHgwMDA0LCAweDYxMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHhhMDAxLCAweDA4MGMsCi0JMHg5NDIwLCAweDAxMmUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDMsIDB4NjEwNiwgMHgwODBjLCAweDFjOGMsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsCi0JMHgwMTg4LCAweDkwODQsIDB4MDAwMywgMHg5MDg2LCAweDAwMDIsIDB4MDFhMCwgMHg2MDI0LCAweGQwY2MsCi0JMHgxMTQ4LCAweGQwYzQsIDB4MTEzOCwgMHhhOGE4LCAweDkwMDUsIDB4MTEyMCwgMHg2MTQ0LCAweDkxOGQsCi0JMHhiMDM1LCAweDAwMTgsIDB4NjE0NCwgMHg5MThkLCAweGEwMzUsIDB4MDA5ZSwgMHgwODBjLCAweDk0NjcsCi0JMHgwMTJlLCAweDAwMDUsIDB4NjE0NCwgMHg5MThkLCAweGEwMzIsIDB4MGNiOCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDAwMzYsIDB4MDA5NiwgMHg5MTgyLCAweDAwNDAsIDB4MDAyMywgMHgwMDllLCAweDAwM2UsCi0JMHgwMTJlLCAweDAwMDUsIDB4ZTE1ZSwgMHhlMTYwLCAweGUxNzUsIDB4ZTE4ZiwgMHhlMTVlLCAweGUxNWUsCi0JMHhlMTVlLCAweGUxNWUsIDB4ZTE1ZSwgMHhlMTVlLCAweGUxNWUsIDB4ZTE1ZSwgMHhlMTVlLCAweGUxNWUsCi0JMHhlMTVlLCAweGUxNWUsIDB4ZTE1ZSwgMHhlMTVlLCAweGUxNWUsIDB4ZTE1ZSwgMHgwODBjLCAweDBkNzksCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDA1MTAsIDB4OTA5YywgMHgwMDAzLCAweDkzOWUsCi0JMHgwMDAzLCAweDAxZTgsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgyMDA5LCAweGEwMjIsIDB4MDgwYywgMHg5NDIwLCAweDA0NzAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsCi0JMHhkMGZjLCAweDAxNjgsIDB4OTA5YywgMHgwMDAzLCAweDkzOWUsIDB4MDAwMywgMHgwMTQwLCAweDYwMDMsCi0JMHgwMDAxLCAweDYxMDYsIDB4MjAwOSwgMHhhMDAxLCAweDA4MGMsIDB4OTQyMCwgMHgwMGUwLCAweDkwMWUsCi0JMHg2MzE2LCAweDYzMWEsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4ZTczOCwgMHgwMGEwLCAweDYwMTQsCi0JMHgyMDQ4LCAweGE4N2MsIDB4ZDBmYywgMHgwZDk4LCAweDkwOWMsIDB4MDAwMywgMHg5MzllLCAweDAwMDMsCi0JMHgwZDcwLCAweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDA4MGMsIDB4MWM4YywgMHg2MTQ0LCAweDkxOGQsCi0JMHhhMDM1LCAweDA4MGMsIDB4OTQ2NywgMHgwMDA1LCAweDA4MGMsIDB4OTdmNiwgMHg2MTE0LCAweDgxZmYsCi0JMHgwMTU4LCAweDAwOTYsIDB4MjE0OCwgMHgwODBjLCAweGVhZWUsIDB4MDAzNiwgMHgyMDE5LCAweDAwMjksCi0JMHgwODBjLCAweGU3MzgsIDB4MDAzZSwgMHgwMDllLCAweDA4MGMsIDB4YWY4OSwgMHgwODBjLCAweDk4YmMsCi0JMHgwMDA1LCAweDA4MGMsIDB4OTg1MSwgMHg2MTE0LCAweDgxZmYsIDB4MDE1OCwgMHgwMDk2LCAweDIxNDgsCi0JMHgwODBjLCAweGVhZWUsIDB4MDAzNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHhlNzM4LCAweDAwM2UsCi0JMHgwMDllLCAweDA4MGMsIDB4YWY4OSwgMHgwMDA1LCAweDkxODIsIDB4MDA4NSwgMHgwMDAyLCAweGUxZGUsCi0JMHhlMWRjLCAweGUxZGMsIDB4ZTFlYSwgMHhlMWRjLCAweGUxZGMsIDB4ZTFkYywgMHhlMWRjLCAweGUxZGMsCi0JMHhlMWRjLCAweGUxZGMsIDB4ZTFkYywgMHhlMWRjLCAweDA4MGMsIDB4MGQ3OSwgMHg2MDAzLCAweDAwMGIsCi0JMHg2MTA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk0MjAsCi0JMHgwMTJlLCAweDAwMDUsIDB4MDAyNiwgMHgwMGU2LCAweDA4MGMsIDB4ZTk4ZiwgMHgwMTE4LCAweDA4MGMsCi0JMHhhZjRlLCAweDA0NDAsIDB4MjA3MSwgMHgwMjYwLCAweDcyMjQsIDB4NjIxNiwgMHgyMDAxLCAweDE4MGUsCi0JMHgyMDA0LCAweGQwZTQsIDB4MDE1MCwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiY2EwLCAweDAwYmUsCi0JMHgyYzAwLCAweDIwMTEsIDB4MDE0ZSwgMHgwODBjLCAweGIyNzcsIDB4NzIyMCwgMHgwODBjLCAweGU1N2QsCi0JMHgwMTE4LCAweDYwMDcsIDB4MDA4NiwgMHgwMDQwLCAweDYwMDcsIDB4MDA4NywgMHg3MjI0LCAweDkyOTYsCi0JMHhmZmZmLCAweDExMTAsIDB4NjAwNywgMHgwMDg2LCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LCAweDgwMjAsCi0JMHgwODBjLCAweDk0MjAsIDB4MDBlZSwgMHgwMDJlLCAweDAwMDUsIDB4OTE4NiwgMHgwMDEzLCAweDExNjAsCi0JMHg2MDA0LCAweDkwOGEsIDB4MDA4NSwgMHgwYTBjLCAweDBkNzksIDB4OTA4YSwgMHgwMDkyLCAweDFhMGMsCi0JMHgwZDc5LCAweDkwODIsIDB4MDA4NSwgMHgwMGEyLCAweDkxODYsIDB4MDAyNywgMHgwMTMwLCAweDkxODYsCi0JMHgwMDE0LCAweDAxMTgsIDB4MDgwYywgMHhiMDA5LCAweDAwNTAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsCi0JMHg2NmY1LCAweDA4MGMsIDB4OTdmNiwgMHgwODBjLCAweGFmODksIDB4MDgwYywgMHg5OGJjLCAweDAwMDUsCi0JMHhlMjRkLCAweGUyNGYsIDB4ZTI0ZiwgMHhlMjRkLCAweGUyNGQsIDB4ZTI0ZCwgMHhlMjRkLCAweGUyNGQsCi0JMHhlMjRkLCAweGUyNGQsIDB4ZTI0ZCwgMHhlMjRkLCAweGUyNGQsIDB4MDgwYywgMHgwZDc5LCAweDA4MGMsCi0JMHhhZjg5LCAweDA4MGMsIDB4OThiYywgMHgwMDA1LCAweDkxODIsIDB4MDA4NSwgMHgwYTBjLCAweDBkNzksCi0JMHg5MTgyLCAweDAwOTIsIDB4MWEwYywgMHgwZDc5LCAweDkxODIsIDB4MDA4NSwgMHgwMDAyLCAweGUyNmMsCi0JMHhlMjZjLCAweGUyNmMsIDB4ZTI2ZSwgMHhlMjZjLCAweGUyNmMsIDB4ZTI2YywgMHhlMjZjLCAweGUyNmMsCi0JMHhlMjZjLCAweGUyNmMsIDB4ZTI2YywgMHhlMjZjLCAweDA4MGMsIDB4MGQ3OSwgMHgwMDA1LCAweDkxODYsCi0JMHgwMDEzLCAweDAxNDgsIDB4OTE4NiwgMHgwMDE0LCAweDAxMzAsIDB4OTE4NiwgMHgwMDI3LCAweDAxMTgsCi0JMHgwODBjLCAweGIwMDksIDB4MDAyMCwgMHgwODBjLCAweDk3ZjYsIDB4MDgwYywgMHhhZjg5LCAweDAwMDUsCi0JMHgwMDM2LCAweDA4MGMsIDB4ZTlmMCwgMHg2MDRiLCAweDAwMDAsIDB4MjAxOSwgMHgwMDBiLCAweDAwMzEsCi0JMHg2MDIzLCAweDAwMDYsIDB4NjAwMywgMHgwMDA3LCAweDAwM2UsIDB4MDAwNSwgMHgwMTI2LCAweDAwMzYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhhYWY3LCAweDAxMDYsIDB4MDA4NiwgMHgyYzQwLCAweDAwOTYsCi0JMHg5MDRlLCAweDA4MGMsIDB4YTQ2MiwgMHgwMDllLCAweDAwOGUsIDB4MTU1OCwgMHgwMDc2LCAweDJjMzgsCi0JMHgwODBjLCAweGE1MGQsIDB4MDA3ZSwgMHgxNTI4LCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDA1MDgsCisJMHgwODBjLCAweGVhOGQsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsIDB4YzBlNSwgMHhiODAyLCAweDAwMWUsCisJMHgwMDRlLCAweDYwMDcsIDB4MDAwMSwgMHgwODA0LCAweGQ5MzcsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCisJMHg2NmU2LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksCisJMHgxODA1LCAweDIwMTEsIDB4MDI3MCwgMHgwODBjLCAweGMyMGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwMTVlLCAweDkwMDUsIDB4MDE2OCwgMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5NjgyLCAweDAwMDQsCisJMHgwYTA0LCAweGQ4MGEsIDB4OTY4MiwgMHgwMDA3LCAweDBhMDQsIDB4ZDg2NiwgMHgwODA0LCAweGQ4MGEsCisJMHg2MDE3LCAweDE5MDAsIDB4NjAwNywgMHgwMDA5LCAweDA4MDQsIDB4ZDkzNywgMHgwODBjLCAweDZiY2YsCisJMHgxMTQwLCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweDkwODQsIDB4MDAwOSwgMHg5MDg2LCAweDAwMDgsCisJMHgxMTEwLCAweDA4MDQsIDB4ZDc0NSwgMHgwODBjLCAweDZiNmIsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsCisJMHg5Njg0LCAweDAwZmYsIDB4MDAwNiwgMHgwMDE2LCAweDkwOGUsIDB4MDAwMSwgMHgwMTE4LCAweDkwOGUsCisJMHgwMDAwLCAweDExMTgsIDB4MDAxZSwgMHgwMDBlLCAweDAwODAsIDB4MDAxZSwgMHgwMDBlLCAweDkwODIsCisJMHgwMDA2LCAweDA2YTAsIDB4MDE1MCwgMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDQsCisJMHgwMTIwLCAweDk2ODYsIDB4MDAwNiwgMHgxOTA0LCAweGQ4MGEsIDB4MDgwYywgMHhlNzJlLCAweDExMzgsCisJMHgwODBjLCAweGU2MjcsIDB4MTEyMCwgMHg2MDA3LCAweDAwMTAsIDB4MDgwNCwgMHhkOTM3LCAweDAwNDYsCisJMHg2NDEwLCAweDI0NTgsIDB4YmNhMCwgMHgwMDQ2LCAweDA4MGMsIDB4MzMxNSwgMHgwODBjLCAweGQ2NWEsCisJMHgwMDRlLCAweDAwMTYsIDB4OTAwNiwgMHgyMDA5LCAweDE4NDgsIDB4MjEwYywgMHhkMWE0LCAweDAxNDgsCisJMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhlYThkLCAweDYwMTAsIDB4MjA1OCwgMHhiODAwLCAweGMwZTUsCisJMHhiODAyLCAweDAwMWUsIDB4MDA0ZSwgMHg2MDA3LCAweDAwMDEsIDB4MDQ0OCwgMHgwODBjLCAweGU5MDUsCisJMHgwMTk4LCAweDAwMTYsIDB4OTY4YywgMHgwMGZmLCAweDkxODYsIDB4MDAwMiwgMHgwMTYwLCAweDkxODYsCisJMHgwMDAzLCAweDAxNDgsIDB4MDAxZSwgMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsCisJMHgwOTIwLCAweDA4MDQsIDB4ZDgwYSwgMHgwMDFlLCAweDYwMTcsIDB4MTkwMCwgMHg2MDA3LCAweDAwMDksCisJMHgwMDcwLCAweDA4MGMsIDB4MzQ0YywgMHgxOTA0LCAweGRiNmQsIDB4MDgwYywgMHhlYzgwLCAweDE5MDQsCisJMHhkYjZkLCAweDA4MGMsIDB4ZGQzZSwgMHgxOTA0LCAweGQ4MGEsIDB4NjAwNywgMHgwMDEyLCAweDYwMDMsCisJMHgwMDAxLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLCAweDlhYjMsIDB4MDAwNSwgMHg2MDA3LCAweDAwMDEsCisJMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NjFlLCAweDA4MGMsIDB4OWFiMywgMHgwY2IwLCAweDYwMDcsCisJMHgwMDA1LCAweDBjNjgsIDB4MDgwYywgMHhlYzgwLCAweDE5MDQsIDB4ZGI2ZCwgMHgwODBjLCAweDM0NGMsCisJMHgxOTA0LCAweGRiNmQsIDB4MDgwYywgMHhkZDNlLCAweDE5MDQsIDB4ZDgwYSwgMHg2MDA3LCAweDAwMjAsCisJMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NjFlLCAweDA4MGMsIDB4OWFiMywgMHgwMDA1LCAweDA4MGMsCisJMHgzNDRjLCAweDE5MDQsIDB4ZGI2ZCwgMHg2MDA3LCAweDAwMjMsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCisJMHg5NjFlLCAweDA4MGMsIDB4OWFiMywgMHgwMDA1LCAweDA4MGMsIDB4ZWM4MCwgMHgxOTA0LCAweGRiNmQsCisJMHgwODBjLCAweDM0NGMsIDB4MTkwNCwgMHhkYjZkLCAweDA4MGMsIDB4ZGQzZSwgMHgxOTA0LCAweGQ4MGEsCisJMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsIDB4MmMwOCwgMHgyMDExLCAweDE4MjAsCisJMHgyMjE0LCAweDcwM2MsIDB4OTIwNiwgMHgxMWUwLCAweDIwMTEsIDB4MTgxZiwgMHgyMjE0LCAweDcwMzgsCisJMHg5MDg0LCAweDAwZmYsIDB4OTIwNiwgMHgxMWEwLCAweDcyNDAsIDB4MDgwYywgMHhjZjA5LCAweDA1NzAsCisJMHgyMjYwLCAweDYwMDgsIDB4OTA4NiwgMHhmZmZmLCAweDAxMjAsIDB4NzI0NCwgMHg2MDA4LCAweDkyMDYsCisJMHgxNTI4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA3LCAweDE1MDgsIDB4MDgwYywgMHhiMTZjLCAweDA0YTAsCisJMHg3MjQ0LCAweDkyODYsIDB4ZmZmZiwgMHgwMTgwLCAweDJjMDgsIDB4MDgwYywgMHhjZjA5LCAweDAxYjAsCisJMHgyMjYwLCAweDcyNDAsIDB4NjAwOCwgMHg5MjA2LCAweDExODgsIDB4NjAxMCwgMHg5MTkwLCAweDAwMDQsCisJMHgyMjE0LCAweDkyMDYsIDB4MDFiOCwgMHgwMDUwLCAweDcyNDAsIDB4MmMwOCwgMHg5MDA2LCAweDA4MGMsCisJMHhlYTU3LCAweDExODAsIDB4NzI0NCwgMHg5Mjg2LCAweGZmZmYsIDB4MDFiMCwgMHgyMTYwLCAweDYwMDcsCisJMHgwMDI2LCAweDYwMTcsIDB4MTcwMCwgMHg3MjE0LCAweDkyOTYsIDB4ZmZmZiwgMHgxMTgwLCAweDYwMDcsCisJMHgwMDI1LCAweDAwNjgsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDcsIDB4MWQ4MCwgMHg2MDA0LCAweDkwODYsCisJMHgwMDI0LCAweDExMTAsIDB4MDgwYywgMHhiMTZjLCAweDIxNjAsIDB4NjAwNywgMHgwMDI1LCAweDYwMDMsCisJMHgwMDAxLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLCAweDlhYjMsIDB4MDBlZSwgMHgwMDJlLCAweDAwMWUsCisJMHgwMDA1LCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDY2ZTYsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsCisJMHgwMDM2LCAweDIwYTksIDB4MDAwNCwgMHgyMDE5LCAweDE4MDUsIDB4MjAxMSwgMHgwMjc2LCAweDA4MGMsCisJMHhjMjBlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsIDB4MDEyMCwgMHg2MDA3LCAweDAwMzEsCisJMHgwODA0LCAweGQ5MzcsIDB4MDgwYywgMHhiZTIxLCAweDA4MGMsIDB4Nzc5ZSwgMHgxMTkwLCAweDAwMDYsCisJMHgwMDI2LCAweDAwMzYsIDB4MDgwYywgMHg3N2I4LCAweDExMzgsIDB4MDgwYywgMHg3YWI2LCAweDA4MGMsCisJMHg2MTlkLCAweDA4MGMsIDB4NzZjZCwgMHgwMDEwLCAweDA4MGMsIDB4Nzc3MiwgMHgwMDNlLCAweDAwMmUsCisJMHgwMDBlLCAweDAwMDUsIDB4MDgwYywgMHgzNDRjLCAweDE5MDQsIDB4ZGI2ZCwgMHgwODBjLCAweGRkM2UsCisJMHgxOTA0LCAweGQ4MGEsIDB4NjEwNiwgMHgwODBjLCAweGRkNWEsIDB4MTEyMCwgMHg2MDA3LCAweDAwMmIsCisJMHgwODA0LCAweGQ5MzcsIDB4NjAwNywgMHgwMDJjLCAweDA4MDQsIDB4ZDkzNywgMHgwODBjLCAweGVjODAsCisJMHgxOTA0LCAweGRiNmQsIDB4MDgwYywgMHgzNDRjLCAweDE5MDQsIDB4ZGI2ZCwgMHgwODBjLCAweGRkM2UsCisJMHgxOTA0LCAweGQ4MGEsIDB4NjEwNiwgMHgwODBjLCAweGRkNWYsIDB4MTEyMCwgMHg2MDA3LCAweDAwMmUsCisJMHgwODA0LCAweGQ5MzcsIDB4NjAwNywgMHgwMDJmLCAweDA4MDQsIDB4ZDkzNywgMHgwODBjLCAweDM0NGMsCisJMHgxOTA0LCAweGRiNmQsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4NjAxMCwgMHgyMDU4LCAweGI5MDQsCisJMHg5MTg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LCAweDAxNTgsIDB4OTE4NCwgMHhmZjAwLCAweDgwMDcsCisJMHg5MDg2LCAweDAwMDYsIDB4MDEyOCwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwODA0LCAweGQ5M2UsCisJMHgwODBjLCAweDU4NDQsIDB4ZDBlNCwgMHgwOTA0LCAweGRhYjgsIDB4MjA3MSwgMHgwMjZjLCAweDcwMTAsCisJMHg2MDNhLCAweDcwMTQsIDB4NjAzZSwgMHg3MTA4LCAweDcyMGMsIDB4MDgwYywgMHg2YzBkLCAweDAxNDAsCisJMHg2MDEwLCAweDIwNTgsIDB4YjgxMCwgMHg5MTA2LCAweDExMTgsIDB4YjgxNCwgMHg5MjA2LCAweDA1MTAsCisJMHgwODBjLCAweDZjMDksIDB4MTViOCwgMHgyMDY5LCAweDE4MDAsIDB4Njg4MCwgMHg5MjA2LCAweDE1OTAsCisJMHg2ODdjLCAweDkxMDYsIDB4MTU3OCwgMHg3MjEwLCAweDA4MGMsIDB4Y2YwOSwgMHgwNTkwLCAweDA4MGMsCisJMHhkYzJiLCAweDA1NzgsIDB4MDgwYywgMHhlYjA5LCAweDA1NjAsIDB4NjIyZSwgMHg2MDA3LCAweDAwMzYsCisJMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTYxNywgMHgwMGNlLCAweDAwZGUsCisJMHgwMGVlLCAweDAwMDUsIDB4NzIxNCwgMHg5Mjg2LCAweGZmZmYsIDB4MDE1MCwgMHgwODBjLCAweGNmMDksCisJMHgwMWMwLCAweDkyODAsIDB4MDAwMiwgMHgyMDA0LCAweDcxMTAsIDB4OTEwNiwgMHgxMTkwLCAweDA4ZTAsCisJMHg3MjEwLCAweDJjMDgsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsIDB4ZWE1NywgMHgyYzEwLCAweDIxNjAsCisJMHgwMTQwLCAweDA4OTAsIDB4NjAwNywgMHgwMDM3LCAweDYwMmYsIDB4MDAwOSwgMHg2MDE3LCAweDE1MDAsCisJMHgwOGI4LCAweDYwMDcsIDB4MDAzNywgMHg2MDJmLCAweDAwMDMsIDB4NjAxNywgMHgxNzAwLCAweDA4ODAsCisJMHg2MDA3LCAweDAwMTIsIDB4MDg2OCwgMHgwODBjLCAweDM0NGMsIDB4MTkwNCwgMHhkYjZkLCAweDYwMTAsCisJMHgyMDU4LCAweGI4MDQsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTA4NiwgMHgwMDA2LCAweDE5MDQsCisJMHhkOTNlLCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDA4MGMsIDB4NTg0NCwgMHhkMGU0LCAweDA5MDQsCisJMHhkYjMwLCAweDIwNjksIDB4MTgwMCwgMHgyMDcxLCAweDAyNmMsIDB4NzAwOCwgMHg2MDNhLCAweDcyMGMsCisJMHg2MjNlLCAweDkyODYsIDB4ZmZmZiwgMHgxMTUwLCAweDcyMDgsIDB4MDBjNiwgMHgyYzA4LCAweDkwODUsCisJMHgwMDAxLCAweDA4MGMsIDB4ZWE1NywgMHgyYzEwLCAweDAwY2UsIDB4MDVlOCwgMHgwODBjLCAweGNmMDksCisJMHgwNWQwLCAweDcxMDgsIDB4OTI4MCwgMHgwMDAyLCAweDIwMDQsIDB4OTEwNiwgMHgxNWEwLCAweDAwYzYsCisJMHgwMDI2LCAweDIyNjAsIDB4MDgwYywgMHhjYWRjLCAweDAwMmUsIDB4MDBjZSwgMHg3MTE4LCAweDkxOGMsCisJMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwgMHgwMDAxLCAweDAxNzgsIDB4OTE4NiwgMHgwMDA1LCAweDAxMTgsCisJMHg5MTg2LCAweDAwMDcsIDB4MTE5OCwgMHg5MjgwLCAweDAwMDUsIDB4MjAwNCwgMHg5MDA1LCAweDAxNzAsCisJMHgwODBjLCAweGRjMmIsIDB4MDkwNCwgMHhkYWIxLCAweDAwNTYsIDB4NzUxMCwgMHg3NjE0LCAweDA4MGMsCisJMHhlYjIyLCAweDAwNWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHg2MDA3LCAweDAwM2IsCisJMHg2MDJmLCAweDAwMDksIDB4NjAxNywgMHgyYTAwLCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LCAweDgwMjAsCisJMHgwODBjLCAweDk2MTcsIDB4MGM3OCwgMHg2MDA3LCAweDAwM2IsIDB4NjAyZiwgMHgwMDAzLCAweDYwMTcsCisJMHgwMzAwLCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NjE3LCAweDBjMTAsCisJMHg2MDA3LCAweDAwM2IsIDB4NjAyZiwgMHgwMDBiLCAweDYwMTcsIDB4MDAwMCwgMHgwODA0LCAweGRhODgsCisJMHgwMGU2LCAweDAwMjYsIDB4MDgwYywgMHg2YmNmLCAweDA1NTAsIDB4MDgwYywgMHg2YjZiLCAweDA4MGMsCisJMHhlY2YxLCAweDE1MTgsIDB4MjA3MSwgMHgxODAwLCAweDcwZGMsIDB4OTA4NSwgMHgwMDAzLCAweDcwZGUsCisJMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg3MmIwLCAweDkyODQsIDB4MDBmZiwgMHg3MDdlLCAweDc4ZTYsCisJMHg5Mjg0LCAweGZmMDAsIDB4NzI4MCwgMHg5MjA1LCAweDcwODIsIDB4NzhlYSwgMHgwMGZlLCAweDcwZTcsCisJMHgwMDAwLCAweDA4MGMsIDB4NmMwZCwgMHgwMTIwLCAweDIwMTEsIDB4MWEwYSwgMHgyMDEzLCAweDA3ZDAsCisJMHhkMGFjLCAweDExMjgsIDB4MDgwYywgMHgzMGJmLCAweDAwMTAsIDB4MDgwYywgMHhlZDI1LCAweDAwMmUsCisJMHgwMGVlLCAweDA4MGMsIDB4YjE2YywgMHgwODA0LCAweGQ5M2QsIDB4MDgwYywgMHhiMTZjLCAweDAwMDUsCisJMHgyNjAwLCAweDAwMDIsIDB4ZGI4NCwgMHhkYmIyLCAweGRiYzMsIDB4ZGI4NCwgMHhkYjg0LCAweGRiODYsCisJMHhkYmQ0LCAweGRiODQsIDB4ZGI4NCwgMHhkYjg0LCAweGRiYTAsIDB4ZGI4NCwgMHhkYjg0LCAweGRiODQsCisJMHhkYmRmLCAweGRiZjUsIDB4ZGMyNiwgMHhkYjg0LCAweDA4MGMsIDB4MGQ4NSwgMHgwODBjLCAweGVjODAsCisJMHgxZDIwLCAweDA4MGMsIDB4MzQ0YywgMHgxZDA4LCAweDcwMzgsIDB4NjAxNiwgMHg2MDA3LCAweDAwNDUsCisJMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NjFlLCAweDAwMDUsIDB4MDgwYywgMHgzMzE1LCAweDA4MGMsCisJMHhkNjVhLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NjFlLCAweDAwMDUsCisJMHgwODBjLCAweGVjODAsIDB4MTk1MCwgMHgwODBjLCAweDM0NGMsIDB4MTkzOCwgMHgwODBjLCAweGRkM2UsCisJMHgxZDYwLCAweDcwM2MsIDB4NjAxNiwgMHg2MDA3LCAweDAwNGEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCisJMHg5NjFlLCAweDAwMDUsIDB4MDgwYywgMHgzNDRjLCAweDE5MDQsIDB4ZGI2ZCwgMHgyMDA5LCAweDAwNDEsCisJMHgwODBjLCAweGVkMmUsIDB4NjAwNywgMHgwMDQ3LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDk2MWUsCisJMHgwODBjLCAweDlhYjMsIDB4MDAwNSwgMHgwODBjLCAweDM0NGMsIDB4MTkwNCwgMHhkYjZkLCAweDIwMDksCisJMHgwMDQyLCAweDA4MGMsIDB4ZWQyZSwgMHg2MDA3LCAweDAwNDcsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCisJMHg5NjFlLCAweDA4MGMsIDB4OWFiMywgMHgwMDA1LCAweDA4MGMsIDB4MzQ0YywgMHgxOTA0LCAweGRiNmQsCisJMHgyMDA5LCAweDAwNDYsIDB4MDgwYywgMHhlZDJlLCAweDA4MGMsIDB4YjE2YywgMHgwMDA1LCAweDIwMDEsCisJMHgxODI0LCAweDIwMDQsIDB4OTA4MiwgMHgwMGUxLCAweDEyNjgsIDB4MDgwYywgMHhkYzQ4LCAweDA5MDQsCisJMHhkYjZkLCAweDYwMDcsIDB4MDA0ZSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg5NjFlLCAweDA4MGMsCisJMHg5YWIzLCAweDAwMDUsIDB4NjAwNywgMHgwMDEyLCAweDBjYjAsIDB4NjAwNywgMHgwMDRmLCAweDYwMTcsCisJMHgwMDAwLCAweDcxMzQsIDB4OTE4YywgMHgwMGZmLCAweDgxZmYsIDB4MDUwOCwgMHg5MTg2LCAweDAwMDEsCisJMHgxMTYwLCAweDcxNDAsIDB4MjAwMSwgMHgxOWJlLCAweDIwMDQsIDB4OTEwNiwgMHgxMWIwLCAweDcxNDQsCisJMHgyMDAxLCAweDE5YmYsIDB4MjAwNCwgMHg5MTA2LCAweDAxOTAsIDB4OTE4NiwgMHgwMDAyLCAweDExNjgsCisJMHgyMDExLCAweDAyNzYsIDB4MjBhOSwgMHgwMDA0LCAweDYwMTAsIDB4MDA5NiwgMHgyMDQ4LCAweDIwMTksCisJMHgwMDBhLCAweDA4MGMsIDB4YzIyMiwgMHgwMDllLCAweDAxMTAsIDB4NjAxNywgMHgwMDAxLCAweDYwMDMsCisJMHgwMDAxLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLCAweDlhYjMsIDB4MDAwNSwgMHg2MDA3LCAweDAwNTAsCisJMHg3MDNjLCAweDYwMTYsIDB4MGNhMCwgMHgwMDE2LCAweDAwZTYsIDB4MjA3MSwgMHgwMjYwLCAweDAwYjYsCisJMHgwMGM2LCAweDIyNjAsIDB4NjAxMCwgMHgyMDU4LCAweGI4ZDQsIDB4ZDA4NCwgMHgwMTUwLCAweDcxMjgsCisJMHg2MDRjLCAweDkxMDYsIDB4MTEyMCwgMHg3MTJjLCAweDYwNTAsIDB4OTEwNiwgMHgwMTEwLCAweDkwMDYsCisJMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAwYmUsIDB4MDBlZSwgMHgwMDFlLCAweDAwMDUsCisJMHgwMDE2LCAweDAwOTYsIDB4MDA4NiwgMHgwMGU2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTI2LCAweDIwOTEsCisJMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwgMHgyMGUxLCAweDAwMDAsIDB4MjAwMSwgMHgxOWExLCAweDIwMDMsCisJMHgwMDAwLCAweDA4MGMsIDB4MTA3MiwgMHgwNWEwLCAweDI5MDAsIDB4NjAxNiwgMHg3MDkwLCAweDgwMDQsCisJMHhhODE2LCAweDkwOGEsIDB4MDAxZSwgMHgwMmQwLCAweGE4MzMsIDB4MDAxZSwgMHgyMGE5LCAweDAwMWUsCisJMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsIDB4MjBhMCwgMHgyMDAxLCAweDE5YTEsCisJMHgwMDE2LCAweDIwMGMsIDB4MDQ3MSwgMHgwMDFlLCAweDgxZmYsIDB4MDFiOCwgMHgyOTQwLCAweDA4MGMsCisJMHgxMDcyLCAweDAxYjAsIDB4MjkwMCwgMHhhMDA2LCAweDIxMDAsIDB4MGMxOCwgMHhhODMyLCAweDIwYTgsCisJMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsIDB4MjBhMCwgMHgyMDAxLCAweDE5YTEsCisJMHgwMDE2LCAweDIwMGMsIDB4MDBiMSwgMHgwMDFlLCAweDAwMDAsIDB4OTA4NSwgMHgwMDAxLCAweDAwNDgsCisJMHgyMDcxLCAweDE4MDAsIDB4NzA5MywgMHgwMDAwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweDEwMGIsCisJMHg5MDA2LCAweDAxMmUsIDB4MDFkZSwgMHgwMWNlLCAweDAwZWUsIDB4MDA4ZSwgMHgwMDllLCAweDAwMWUsCisJMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHg5MThjLCAweGZmZmYsCisJMHgxMWIwLCAweDA4MGMsIDB4MjFmOSwgMHgyMDk5LCAweDAyNmMsIDB4MjAwMSwgMHgwMDE0LCAweDM1MTgsCisJMHg5MzEyLCAweDAxMDgsIDB4MTIxOCwgMHgyM2E4LCAweDQwMDMsIDB4MDQwMCwgMHgyMGE4LCAweDQwMDMsCisJMHgyMmE4LCAweDgxMDgsIDB4MDgwYywgMHgyMWY5LCAweDIwOTksIDB4MDI2MCwgMHgwY2E4LCAweDA4MGMsCisJMHgyMWY5LCAweDIwNjEsIDB4MTlhMSwgMHg2MDA0LCAweDIwOTgsIDB4NjAwOCwgMHgzNTE4LCAweDkzMTIsCisJMHgwMTA4LCAweDEyMTgsIDB4MjNhOCwgMHg0MDAzLCAweDAwNDgsIDB4MjBhOCwgMHg0MDAzLCAweDIyYTgsCisJMHg4MTA4LCAweDA4MGMsIDB4MjFmOSwgMHgyMDk5LCAweDAyNjAsIDB4MGNhOCwgMHgyMDYxLCAweDE5YTEsCisJMHgyMDE5LCAweDAyODAsIDB4MzMwMCwgMHg5MzFlLCAweDAxMTAsIDB4NjAwNiwgMHgwMDIwLCAweDIwMDEsCisJMHgwMjYwLCAweDYwMDYsIDB4ODEwOCwgMHgyMTYyLCAweDkyOTIsIDB4MDAyMSwgMHg5Mjk2LCAweGZmZmYsCisJMHg2MjBhLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCisJMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGM2LCAweDgxZmYsIDB4MTFiOCwgMHgwODBjLCAweDIyMTEsCisJMHgyMGExLCAweDAyNGMsIDB4MjAwMSwgMHgwMDE0LCAweDM1MTgsIDB4OTMxMiwgMHgxMjE4LCAweDIzYTgsCisJMHg0MDAzLCAweDA0MTgsIDB4MjBhOCwgMHg0MDAzLCAweDgyZmYsIDB4MDFmOCwgMHgyMmE4LCAweDgxMDgsCisJMHgwODBjLCAweDIyMTEsIDB4MjBhMSwgMHgwMjQwLCAweDBjOTgsIDB4MDgwYywgMHgyMjExLCAweDIwNjEsCisJMHgxOWE0LCAweDYwMDQsIDB4MjBhMCwgMHg2MDA4LCAweDM1MTgsIDB4OTMxMiwgMHgxMjE4LCAweDIzYTgsCisJMHg0MDAzLCAweDAwNTgsIDB4MjBhOCwgMHg0MDAzLCAweDgyZmYsIDB4MDEzOCwgMHgyMmE4LCAweDgxMDgsCisJMHgwODBjLCAweDIyMTEsIDB4MjBhMSwgMHgwMjQwLCAweDBjOTgsIDB4MjA2MSwgMHgxOWE0LCAweDIwMTksCisJMHgwMjYwLCAweDM0MDAsIDB4OTMxZSwgMHgwMTEwLCAweDYwMDYsIDB4MDAyMCwgMHgyMDAxLCAweDAyNDAsCisJMHg2MDA2LCAweDgxMDgsIDB4MjE2MiwgMHg5MjkyLCAweDAwMjEsIDB4OTI5NiwgMHhmZmZmLCAweDYyMGEsCisJMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGI2LCAweDAwNjYsCisJMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwgMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsCisJMHgwMTcwLCAweDk2ODYsIDB4MDAwNCwgMHgwMTU4LCAweGJlMDQsIDB4OTZiNCwgMHgwMGZmLCAweDk2ODYsCisJMHgwMDA2LCAweDAxMjgsIDB4OTY4NiwgMHgwMDA0LCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwNmUsCisJMHgwMGJlLCAweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweGRkZDQsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsCisJMHgwODBjLCAweGRkZTEsIDB4MTUyMCwgMHg2ODBjLCAweDkwOGMsIDB4ZmYwMCwgMHg2ODIwLCAweDkwODQsCisJMHgwMGZmLCAweDkxMTUsIDB4NjIxNiwgMHg2ODI0LCAweDYwMmUsIDB4ZDFlNCwgMHgwMTMwLCAweDkwMDYsCisJMHgwODBjLCAweGVlNGUsIDB4MjAwOSwgMHgwMDAxLCAweDAwNzgsIDB4ZDFlYywgMHgwMTgwLCAweDY5MjAsCisJMHg5MThjLCAweDAwZmYsIDB4NjgyNCwgMHgwODBjLCAweDI2OGMsIDB4MTE0OCwgMHgyMDAxLCAweDAwMDEsCisJMHgwODBjLCAweGVlNGUsIDB4MjExMCwgMHg5MDBlLCAweDA4MGMsIDB4MzM2NCwgMHgwMDE4LCAweDkwODUsCisJMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMGRlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDA4MGMsCisJMHhiMWRkLCAweDA1OTgsIDB4MDAxNiwgMHgwMDI2LCAweDAwYzYsIDB4MjAxMSwgMHgwMjYzLCAweDIyMDQsCisJMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyNjhjLCAweDE1NjgsIDB4MDgwYywgMHg2NzQ5LCAweDE1NTAsCisJMHhiZTEyLCAweGJkMTYsIDB4MDBjZSwgMHgwMDJlLCAweDAwMWUsIDB4MmIwMCwgMHg2MDEyLCAweDA4MGMsCisJMHhlYzgwLCAweDExYzgsIDB4MDgwYywgMHgzNDRjLCAweDExYjAsIDB4MDgwYywgMHhkZDNlLCAweDA1MDAsCisJMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NmZhLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDY3MjYsCisJMHg2MDE3LCAweDAwMDAsIDB4NjAyMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsCisJMHgwODBjLCAweDk2MWUsIDB4MDAxMCwgMHgwODBjLCAweGIxNmMsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsCisJMHgwMGJlLCAweDAwMDUsIDB4MDgwYywgMHhiMTZjLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDBjYTgsCisJMHgwODBjLCAweGIxNmMsIDB4OTAwNiwgMHgwYzk4LCAweDIwNjksIDB4MDI2ZCwgMHg2ODAwLCAweDkwODIsCisJMHgwMDEwLCAweDEyMjgsIDB4NjAxNywgMHgwMDAwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA4LCAweDkwMDYsCisJMHgwMDA1LCAweDYwMTcsIDB4MDAwMCwgMHgyMDY5LCAweDAyNmMsIDB4NjgwOCwgMHg5MDg0LCAweGZmMDAsCisJMHg5MDg2LCAweDA4MDAsIDB4MTE5MCwgMHg2OTA0LCAweDkxODYsIDB4MDAxOCwgMHgwMTE4LCAweDkxODYsCisJMHgwMDE0LCAweDExNTgsIDB4ODEwZiwgMHg2ODAwLCAweDkwODQsIDB4MDBmZiwgMHg5MTBkLCAweDYxNjIsCisJMHg5MDhlLCAweDAwMTQsIDB4MDExMCwgMHg5MDhlLCAweDAwMTAsIDB4MDAwNSwgMHg2MDA0LCAweDkwYjIsCisJMHgwMDUzLCAweDFhMGMsIDB4MGQ4NSwgMHg5MWI2LCAweDAwMTMsIDB4MTEzMCwgMHgyMDA4LCAweDkxYjIsCisJMHgwMDQwLCAweDFhMDQsIDB4ZGYzNiwgMHgwNDAyLCAweDkxYjYsIDB4MDAyNywgMHgwMTkwLCAweDkxODYsCisJMHgwMDE1LCAweDAxMTgsIDB4OTE4NiwgMHgwMDE2LCAweDExNDAsIDB4MDgwYywgMHhhZjYxLCAweDAxMjAsCisJMHg5MDg2LCAweDAwMDIsIDB4MDkwNCwgMHhiYmEzLCAweDAwMDUsIDB4OTFiNiwgMHgwMDE0LCAweDE5MGMsCisJMHgwZDg1LCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDY3MjYsIDB4MDgwYywgMHg5OWVkLCAweDA4MGMsCisJMHhiMWE3LCAweDA4MGMsIDB4OWFiMywgMHgwMDA1LCAweGRlNmMsIDB4ZGU2ZSwgMHhkZTZjLCAweGRlNmMsCisJMHhkZTZjLCAweGRlNmUsIDB4ZGU3YiwgMHhkZjMzLCAweGRlYmQsIDB4ZGYzMywgMHhkZWUxLCAweGRmMzMsCisJMHhkZTdiLCAweGRmMzMsIDB4ZGYyYiwgMHhkZjMzLCAweGRmMmIsIDB4ZGYzMywgMHhkZjMzLCAweGRlNmMsCisJMHhkZTZjLCAweGRlNmMsIDB4ZGU2YywgMHhkZTZjLCAweGRlNmMsIDB4ZGU2YywgMHhkZTZjLCAweGRlNmMsCisJMHhkZTZjLCAweGRlNmMsIDB4ZGU2ZSwgMHhkZTZjLCAweGRmMzMsIDB4ZGU2YywgMHhkZTZjLCAweGRmMzMsCisJMHhkZTZjLCAweGRmMzAsIDB4ZGYzMywgMHhkZTZjLCAweGRlNmMsIDB4ZGU2YywgMHhkZTZjLCAweGRmMzMsCisJMHhkZjMzLCAweGRlNmMsIDB4ZGYzMywgMHhkZjMzLCAweGRlNmMsIDB4ZGU3NiwgMHhkZTZjLCAweGRlNmMsCisJMHhkZTZjLCAweGRlNmMsIDB4ZGYyZiwgMHhkZjMzLCAweGRlNmMsIDB4ZGU2YywgMHhkZjMzLCAweGRmMzMsCisJMHhkZTZjLCAweGRlNmMsIDB4ZGU2YywgMHhkZTZjLCAweDA4MGMsIDB4MGQ4NSwgMHgwODBjLCAweGQ2NWQsCisJMHg2MDAzLCAweDAwMDIsIDB4MDgwYywgMHg5YWIzLCAweDA4MDQsIDB4ZGYzNSwgMHg5MDA2LCAweDA4MGMsCisJMHg2NmU2LCAweDA4MDQsIDB4ZGYzMywgMHgwODBjLCAweDZjMDksIDB4MTkwNCwgMHhkZjMzLCAweDkwMDYsCisJMHgwODBjLCAweDY2ZTYsIDB4NjAxMCwgMHgyMDU4LCAweGI4MTAsIDB4OTA4NiwgMHgwMGZmLCAweDExNDAsCisJMHgwMGY2LCAweDIwNzksIDB4MTgwMCwgMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwgMHgwMGZlLCAweDAwYjgsCisJMHg2MDEwLCAweDIwNTgsIDB4Yjg4NCwgMHg5MDA1LCAweDA5MDQsIDB4ZGYzMywgMHgwODBjLCAweDM0N2QsCisJMHgxOTA0LCAweGRmMzMsIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDExMzgsCisJMHgwMGY2LCAweDIwNzksIDB4MTgwMCwgMHg3OGE4LCAweDgwMDAsIDB4NzhhYSwgMHgwMGZlLCAweDIwMDEsCisJMHgwMDAyLCAweDA4MGMsIDB4NjZmYSwgMHg2MDIzLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCisJMHgwMDAyLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLCAweDlhYjMsIDB4NjExMCwgMHgyMTU4LCAweDIwMDksCisJMHgwMDAxLCAweDA4MGMsIDB4ODlhMSwgMHgwODA0LCAweGRmMzUsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsCisJMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsIDB4MDE0OCwgMHg5Njg2LCAweDAwMDQsCisJMHgwMTMwLCAweDA4MGMsIDB4OTIyOCwgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg2NzI2LCAweDA4MGMsCisJMHhlZTlkLCAweDA5MDQsIDB4ZGYzMywgMHgyMDAxLCAweDAwMDQsIDB4MDgwYywgMHg2NmZhLCAweDYwMjMsCisJMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDMsIDB4MDgwYywgMHg5NjFlLCAweDA4MDQsCisJMHhkZjM1LCAweDIwMDEsIDB4MTgwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTU4LCAweDAwMzYsCisJMHgwMDQ2LCAweDYwMTAsIDB4MjA1OCwgMHhiYmEwLCAweDIwMjEsIDB4MDAwNiwgMHgwODBjLCAweDRlNTgsCisJMHgwMDRlLCAweDAwM2UsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4ZGY0ZiwgMHg2NjEwLCAweDI2NTgsCisJMHhiZTA0LCAweDAwNjYsIDB4OTZiNCwgMHhmZjAwLCAweDg2MzcsIDB4OTY4NiwgMHgwMDA2LCAweDAwNmUsCisJMHgwMTgwLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDY3MjYsIDB4OTI4NCwgMHgwMGZmLCAweDkwOGUsCisJMHgwMDA3LCAweDAxMTgsIDB4OTA4ZSwgMHgwMDA0LCAweDExMjAsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsCisJMHg2NmZhLCAweDA4MGMsIDB4NmMwOSwgMHgxMWY4LCAweDIwMDEsIDB4MTgzNywgMHgyMDA0LCAweGQwYTQsCisJMHgwMWQwLCAweGJlMDQsIDB4OTZiNCwgMHgwMGZmLCAweDk2ODYsIDB4MDAwNiwgMHgwMWEwLCAweDAwZjYsCisJMHgyMDc5LCAweDE4MDAsIDB4NzhhOCwgMHg4MDAwLCAweDc4YWEsIDB4MDBmZSwgMHgwODA0LCAweGRlYTcsCisJMHgyMDAxLCAweDAwMDQsIDB4MDAzMCwgMHgyMDAxLCAweDAwMDYsIDB4MDQwOSwgMHgwMDIwLCAweDAwMTgsCisJMHgwMDEwLCAweDA4MGMsIDB4NjcyNiwgMHgwODBjLCAweGIxNmMsIDB4MDAwNSwgMHgyNjAwLCAweDAwMDIsCisJMHhkZjRhLCAweGRmNGEsIDB4ZGY0YSwgMHhkZjRhLCAweGRmNGEsIDB4ZGY0YywgMHhkZjRhLCAweGRmNGMsCisJMHhkZjRhLCAweGRmNGEsIDB4ZGY0YywgMHhkZjRhLCAweGRmNGEsIDB4ZGY0YSwgMHhkZjRjLCAweGRmNGMsCisJMHhkZjRjLCAweGRmNGMsIDB4MDgwYywgMHgwZDg1LCAweDA4MGMsIDB4YjE2YywgMHgwMDA1LCAweDAwMTYsCisJMHgwMGI2LCAweDAwZDYsIDB4NjExMCwgMHgyMTU4LCAweGI5MDAsIDB4ZDE4NCwgMHgwMTM4LCAweDA4MGMsCisJMHg2NmZhLCAweDkwMDYsIDB4MDgwYywgMHg2NmU2LCAweDA4MGMsIDB4MzM0NCwgMHgwMGRlLCAweDAwYmUsCisJMHgwMDFlLCAweDAwMDUsIDB4NjYxMCwgMHgyNjU4LCAweGI4MDQsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsCisJMHg5MGIyLCAweDAwMGMsIDB4MWEwYywgMHgwZDg1LCAweDkxYjYsIDB4MDAxNSwgMHgxMTEwLCAweDAwM2IsCisJMHgwMDI4LCAweDkxYjYsIDB4MDAxNiwgMHgxOTBjLCAweDBkODUsIDB4MDA2YiwgMHgwMDA1LCAweGJjNDUsCisJMHhiYzQ1LCAweGJjNDUsIDB4YmM0NSwgMHhkZmU0LCAweGJjNDUsIDB4ZGZjZSwgMHhkZjhmLCAweGJjNDUsCisJMHhiYzQ1LCAweGJjNDUsIDB4YmM0NSwgMHhiYzQ1LCAweGJjNDUsIDB4YmM0NSwgMHhiYzQ1LCAweGRmZTQsCisJMHhiYzQ1LCAweGRmY2UsIDB4ZGZkNSwgMHhiYzQ1LCAweGJjNDUsIDB4YmM0NSwgMHhiYzQ1LCAweDAwZjYsCisJMHgwODBjLCAweDZjMDksIDB4MTFkOCwgMHgwODBjLCAweGQ2NDUsIDB4MTFjMCwgMHg2MDEwLCAweDkwNWQsCisJMHgwMWE4LCAweGI4ODQsIDB4OTAwNSwgMHgwMTkwLCAweDkwMDYsIDB4MDgwYywgMHg2NmU2LCAweDIwMDEsCisJMHgwMDAyLCAweDA4MGMsIDB4NjZmYSwgMHg2MDIzLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCisJMHgwMDAyLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLCAweDlhYjMsIDB4MDBmMCwgMHgyMDExLCAweDAyNjMsCisJMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2OGMsIDB4MTFiMCwgMHgwODBjLCAweDY3YjQsCisJMHgwMTE4LCAweDA4MGMsIDB4YjE2YywgMHgwMDgwLCAweGI4MTAsIDB4MDAwNiwgMHhiODE0LCAweDAwMDYsCisJMHhiODg0LCAweDAwMDYsIDB4MDgwYywgMHg2MWI3LCAweDAwMGUsIDB4Yjg4NiwgMHgwMDBlLCAweGI4MTYsCisJMHgwMDBlLCAweGI4MTIsIDB4MDgwYywgMHhiMTZjLCAweDAwZmUsIDB4MDAwNSwgMHg2NjA0LCAweDk2YjYsCisJMHgwMDFlLCAweDExMTAsIDB4MDgwYywgMHhiMTZjLCAweDAwMDUsIDB4MDgwYywgMHhjMDgyLCAweDExNDgsCisJMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAxLCAweDA4MGMsIDB4OTYxZSwgMHgwODBjLCAweDlhYjMsCisJMHgwMDEwLCAweDA4MGMsIDB4YjE2YywgMHgwMDA1LCAweDA4MDQsIDB4YjE2YywgMHg2MDA0LCAweDkwOGEsCisJMHgwMDUzLCAweDFhMGMsIDB4MGQ4NSwgMHgwODBjLCAweDk5ZWQsIDB4MDgwYywgMHhiMWE3LCAweDAwMDUsCisJMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHhlMDA3LCAweGUwMDcsIDB4ZTAwNywgMHhlMDA3LCAweGUwMDksCisJMHhlMDA3LCAweGUwMDcsIDB4ZTAwNywgMHhlMDA3LCAweGUwMDcsIDB4ZTAwNywgMHhlMDA3LCAweGUwMDcsCisJMHhlMDA3LCAweGUwMDcsIDB4ZTAwNywgMHhlMDA3LCAweGUwMDcsIDB4ZTAwNywgMHhlMDA3LCAweDA4MGMsCisJMHgwZDg1LCAweDAwOTYsIDB4MDBiNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwMDQ2LCAweDAwMjYsCisJMHg2MjEwLCAweDIyNTgsIDB4YjhiYywgMHg5MDA1LCAweDExYjAsIDB4NjAwNywgMHgwMDQ0LCAweDIwNzEsCisJMHgwMjYwLCAweDc0NDQsIDB4OTRhNCwgMHhmZjAwLCAweDA5MDQsIDB4ZTA3MCwgMHgwODBjLCAweGVlNDIsCisJMHgxMTcwLCAweDk0ODYsIDB4MjAwMCwgMHgxMTU4LCAweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAyMDAsCisJMHgwODBjLCAweDhjNDQsIDB4MDAyMCwgMHg5MDI2LCAweDA4MGMsIDB4ZWNjNSwgMHgwYzMwLCAweDA4MGMsCisJMHgxMDU5LCAweDA5MGMsIDB4MGQ4NSwgMHg2MDAzLCAweDAwMDcsIDB4YTg2NywgMHgwMTBkLCAweDkwMDYsCisJMHhhODAyLCAweGE4NmEsIDB4YWM4YSwgMHgyYzAwLCAweGE4OGUsIDB4NjAwOCwgMHhhOGUyLCAweDYwMTAsCisJMHgyMDU4LCAweGI4YTAsIDB4NzEzMCwgMHhhOTdhLCAweDAwMTYsIDB4YTg3NiwgMHhhODdmLCAweDAwMDAsCisJMHhhODgzLCAweDAwMDAsIDB4YTg4NywgMHgwMDM2LCAweDA4MGMsIDB4NzAxMiwgMHgwMDFlLCAweDA4MGMsCisJMHhlZTQyLCAweDE5MDQsIDB4ZTBkMCwgMHg5NDg2LCAweDIwMDAsIDB4MTEzMCwgMHgyMDE5LCAweDAwMTcsCisJMHgwODBjLCAweGU5ZjksIDB4MDgwNCwgMHhlMGQwLCAweDk0ODYsIDB4MDIwMCwgMHgxMTIwLCAweDA4MGMsCisJMHhlOTg0LCAweDA4MDQsIDB4ZTBkMCwgMHg5NDg2LCAweDA0MDAsIDB4MDEyMCwgMHg5NDg2LCAweDEwMDAsCisJMHgxOTA0LCAweGUwZDAsIDB4MjAxOSwgMHgwMDAyLCAweDA4MGMsIDB4ZTlhMywgMHgwODA0LCAweGUwZDAsCisJMHgyMDY5LCAweDFhNzMsIDB4NmEwMCwgMHhkMjg0LCAweDA5MDQsIDB4ZTEzYSwgMHg5Mjg0LCAweDAzMDAsCisJMHgxOTA0LCAweGUxMzMsIDB4NjgwNCwgMHg5MDA1LCAweDA5MDQsIDB4ZTExYiwgMHgyZDc4LCAweDYwMDMsCisJMHgwMDA3LCAweDA4MGMsIDB4MTA3MiwgMHgwOTA0LCAweGUwZGMsIDB4NzgwMCwgMHhkMDhjLCAweDExMTgsCisJMHg3ODA0LCAweDgwMDEsIDB4NzgwNiwgMHg2MDE3LCAweDAwMDAsIDB4MjAwMSwgMHgxODBmLCAweDIwMDQsCisJMHhkMDg0LCAweDE5MDQsIDB4ZTEzZSwgMHg5MDA2LCAweGE4MDIsIDB4YTg2NywgMHgwMTE2LCAweGE4NmEsCisJMHg2MDA4LCAweGE4ZTIsIDB4MmMwMCwgMHhhODdhLCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDcxMzAsCisJMHhhOWI2LCAweGE4NzYsIDB4YjkyOCwgMHhhOWJhLCAweGI5MmMsIDB4YTliZSwgMHhiOTMwLCAweGE5YzIsCisJMHhiOTM0LCAweGE5YzYsIDB4YTg4MywgMHgwMDNkLCAweDcwNDQsIDB4OTA4NCwgMHgwMDAzLCAweDkwODAsCisJMHhlMGQ4LCAweDIwMDUsIDB4YTg3ZSwgMHgyMGE5LCAweDAwMGEsIDB4MjAwMSwgMHgwMjcwLCAweGFhNWMsCisJMHg5MjkwLCAweDAwMjEsIDB4MjAwOSwgMHgwMjA1LCAweDIwMGIsIDB4MDA4MCwgMHgyMGUxLCAweDAwMDAsCisJMHhhYjYwLCAweDIzZTgsIDB4MjA5OCwgMHgyMmEwLCAweDQwMDMsIDB4MjAwYiwgMHgwMDAwLCAweDIwMDEsCisJMHgwMjdhLCAweDIwMGMsIDB4YTliMiwgMHg4MDAwLCAweDIwMGMsIDB4YTlhZSwgMHgwODBjLCAweDcwMTUsCisJMHgwMDJlLCAweDAwNGUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBiZSwgMHgwMDllLCAweDAwMDUsCisJMHgwMDAwLCAweDAwODAsIDB4MDA0MCwgMHgwMDAwLCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwODQsCisJMHgwMTIwLCAweDA4MGMsIDB4MTA1OSwgMHgxOTA0LCAweGUwODUsIDB4NjAxNywgMHhmMTAwLCAweDYwMDMsCisJMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgyMDA5LCAweGEwMjIsIDB4MDgwYywgMHg5NjE3LCAweDBjMDAsCisJMHgyMDY5LCAweDAyNjAsIDB4Njg0OCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHgxMjAwLCAweDExOTgsCisJMHg2ODZjLCAweDkwODQsIDB4MDBmZiwgMHgwMDE2LCAweDYxMTQsIDB4OTE4YywgMHhmNzAwLCAweDkxMGQsCisJMHg2MTE2LCAweDAwMWUsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA0MywgMHgyMDA5LCAweGEwMjUsCisJMHgwODBjLCAweDk2MTcsIDB4MDgyOCwgMHg2ODY4LCAweDYwMmUsIDB4Njg2YywgMHg2MDMyLCAweDYwMTcsCisJMHhmMjAwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwNDEsIDB4MjAwOSwgMHhhMDIyLCAweDA4MGMsCisJMHg5NjE3LCAweDA4MDQsIDB4ZTBkMCwgMHgyMDAxLCAweDE4MGUsIDB4MjAwNCwgMHhkMGVjLCAweDAxMjAsCisJMHgyMDExLCAweDgwNDksIDB4MDgwYywgMHg0Y2ExLCAweDYwMTcsIDB4ZjMwMCwgMHgwMDEwLCAweDYwMTcsCisJMHhmMTAwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwNDEsIDB4MjAwOSwgMHhhMDIyLCAweDA4MGMsCisJMHg5NjE3LCAweDA4MDQsIDB4ZTBkMCwgMHg2MDE3LCAweGY1MDAsIDB4MGM5OCwgMHg2MDE3LCAweGY2MDAsCisJMHgwODA0LCAweGUwZjAsIDB4NjAxNywgMHhmMjAwLCAweDA4MDQsIDB4ZTBmMCwgMHhhODY3LCAweDAxNDYsCisJMHhhODZiLCAweDAwMDAsIDB4NjAwOCwgMHhhODg2LCAweDJjMDAsIDB4YTg3YSwgMHg3MDQ0LCAweDkwODQsCisJMHgwMDAzLCAweDkwODAsIDB4ZTBkOCwgMHgyMDA1LCAweGE4N2UsIDB4MjkyOCwgMHg2MDEwLCAweDIwNTgsCisJMHhiOGEwLCAweGE4NzYsIDB4YjgyOCwgMHhhODhhLCAweGI4MmMsIDB4YTg4ZSwgMHhiODMwLCAweGE4OTIsCisJMHhiODM0LCAweGE4OTYsIDB4YTg4MywgMHgwMDNkLCAweDIwMDksIDB4MDIwNSwgMHgyMTA0LCAweDkwODUsCisJMHgwMDgwLCAweDIwMGEsIDB4MjBlMSwgMHgwMDAwLCAweDIwMTEsIDB4MDIxMCwgMHgyMjE0LCAweDkyOTQsCisJMHgwZmZmLCAweGFhYTIsIDB4OTI4MiwgMHgwMTExLCAweDFhMGMsIDB4MGQ4NSwgMHg4MjEwLCAweDgyMWMsCisJMHgyMDAxLCAweDAyNmMsIDB4MjA5OCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMjksCisJMHgyMGEwLCAweDIwMTEsIDB4ZTFiYSwgMHgyMDQxLCAweDAwMDEsIDB4MjIzZCwgMHg5Nzg0LCAweDAwZmYsCisJMHg5MzIyLCAweDEyMDgsIDB4MjMwMCwgMHgyMGE4LCAweDQwMDMsIDB4OTMxYSwgMHgwNTMwLCAweDgyMTAsCisJMHhkN2ZjLCAweDExMzAsIDB4OGQ2OCwgMHgyZDBhLCAweDIwMDEsIDB4MDI2MCwgMHgyMDk4LCAweDBjNjgsCisJMHgyOTUwLCAweDA4MGMsIDB4MTA3MiwgMHgwMTcwLCAweDI5MDAsIDB4YjAwMiwgMHhhODY3LCAweDAxNDcsCisJMHhhODZiLCAweDAwMDAsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDFiLCAweDIwYTAsCisJMHg4ODQwLCAweDA4ZDgsIDB4MjU0OCwgMHhhODAwLCAweDkwMmQsIDB4MDExOCwgMHgwODBjLCAweDEwOGIsCisJMHgwY2M4LCAweDA4MGMsIDB4MTA4YiwgMHgwODA0LCAweGUwZGMsIDB4MjU0OCwgMHg4ODQ3LCAweDk4ODUsCisJMHgwMDQ2LCAweGE4NjYsIDB4MjAwOSwgMHgwMjA1LCAweDIwMGIsIDB4MDAwMCwgMHgwODBjLCAweGVhMzAsCisJMHgwODA0LCAweGUwZDAsIDB4ODAxMCwgMHgwMDA0LCAweDgwMWEsIDB4MDAwNiwgMHg4MDE4LCAweDAwMDgsCisJMHg4MDE2LCAweDAwMGEsIDB4ODAxNCwgMHg5MTg2LCAweDAwMTMsIDB4MTE2MCwgMHg2MDA0LCAweDkwOGEsCisJMHgwMDU3LCAweDFhMGMsIDB4MGQ4NSwgMHg5MDgyLCAweDAwNDAsIDB4MGEwYywgMHgwZDg1LCAweDIwMDgsCisJMHgwODA0LCAweGUyNDYsIDB4OTE4NiwgMHgwMDUxLCAweDAxMDgsIDB4MDA0MCwgMHgwODBjLCAweGFmNjEsCisJMHgwMWU4LCAweDkwODYsIDB4MDAwMiwgMHgwOTA0LCAweGUyOGUsIDB4MDBjMCwgMHg5MTg2LCAweDAwMjcsCisJMHgwMTgwLCAweDkxODYsIDB4MDA0OCwgMHgwMTI4LCAweDkxODYsIDB4MDAxNCwgMHgwMTUwLCAweDE5MGMsCisJMHgwZDg1LCAweDA4MGMsIDB4YWY2MSwgMHgwMTUwLCAweDkwODYsIDB4MDAwNCwgMHgwOTA0LCAweGUzMmQsCisJMHgwMDI4LCAweDYwMDQsIDB4OTA4MiwgMHgwMDQwLCAweDIwMDgsIDB4MDAxYSwgMHgwODBjLCAweGIyMjcsCisJMHgwMDA1LCAweGUyMGQsIDB4ZTIwZiwgMHhlMjBmLCAweGUyMzYsIDB4ZTIwZCwgMHhlMjBkLCAweGUyMGQsCisJMHhlMjBkLCAweGUyMGQsIDB4ZTIwZCwgMHhlMjBkLCAweGUyMGQsIDB4ZTIwZCwgMHhlMjBkLCAweGUyMGQsCisJMHhlMjBkLCAweGUyMGQsIDB4ZTIwZCwgMHhlMjBkLCAweGUyMGQsIDB4MDgwYywgMHgwZDg1LCAweDA4MGMsCisJMHg5OWVkLCAweDA4MGMsIDB4OWFiMywgMHgwMDM2LCAweDAwOTYsIDB4NjAxNCwgMHg5MDRkLCAweDAxZDgsCisJMHgwODBjLCAweGNmMWIsIDB4MDFjMCwgMHg2MDAzLCAweDAwMDIsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsCisJMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgxMTc4LCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGVhMzAsCisJMHg2MDE3LCAweDAwMDAsIDB4NjAxOCwgMHg5MDA1LCAweDExMjAsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsCisJMHg2MDFhLCAweDYwMDMsIDB4MDAwNywgMHgwMDllLCAweDAwM2UsIDB4MDAwNSwgMHgwMDk2LCAweDA4MGMsCisJMHg5OWVkLCAweDA4MGMsIDB4OWFiMywgMHgwODBjLCAweGNmMWIsIDB4MDEyMCwgMHg2MDE0LCAweDIwNDgsCisJMHgwODBjLCAweDEwOGIsIDB4MDgwYywgMHhiMWE3LCAweDAwOWUsIDB4MDAwNSwgMHgwMDAyLCAweGUyNWIsCisJMHhlMjcwLCAweGUyNWQsIDB4ZTI4NSwgMHhlMjViLCAweGUyNWIsIDB4ZTI1YiwgMHhlMjViLCAweGUyNWIsCisJMHhlMjViLCAweGUyNWIsIDB4ZTI1YiwgMHhlMjViLCAweGUyNWIsIDB4ZTI1YiwgMHhlMjViLCAweGUyNWIsCisJMHhlMjViLCAweGUyNWIsIDB4ZTI1YiwgMHgwODBjLCAweDBkODUsIDB4MDA5NiwgMHg2MDE0LCAweDIwNDgsCisJMHhhODdjLCAweGQwYjQsIDB4MDEzOCwgMHg2MDAzLCAweDAwMDcsIDB4MjAwOSwgMHgwMDQzLCAweDA4MGMsCisJMHhiMjBhLCAweDAwMTAsIDB4NjAwMywgMHgwMDA0LCAweDA4MGMsIDB4OWFiMywgMHgwMDllLCAweDAwMDUsCisJMHgwODBjLCAweGNmMWIsIDB4MDEzOCwgMHg2MTE0LCAweDAwOTYsIDB4MjE0OCwgMHhhOTdjLCAweDAwOWUsCisJMHhkMWVjLCAweDExMzgsIDB4MDgwYywgMHg4YzE5LCAweDA4MGMsIDB4YjE2YywgMHgwODBjLCAweDlhYjMsCisJMHgwMDA1LCAweDA4MGMsIDB4ZWM4OSwgMHgwZGIwLCAweDBjYzgsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCisJMHgwMDQxLCAweDIwMDksIDB4YTAyMiwgMHgwODBjLCAweDk2MTcsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsCisJMHgwMDAyLCAweGUyYTUsIDB4ZTJhNywgMHhlMmE1LCAweGUyYTUsIDB4ZTJhNSwgMHhlMmE1LCAweGUyYTUsCisJMHhlMmE1LCAweGUyYTUsIDB4ZTJhNSwgMHhlMmE1LCAweGUyYTUsIDB4ZTJhNSwgMHhlMmE1LCAweGUyYTUsCisJMHhlMmE1LCAweGUyYTUsIDB4ZTJhOCwgMHhlMmE1LCAweGUyYTUsIDB4MDgwYywgMHgwZDg1LCAweDAwMDUsCisJMHgwMGQ2LCAweDA4MGMsIDB4OGMxOSwgMHgwMGRlLCAweDA4MGMsIDB4ZWNlMSwgMHgwODBjLCAweGIxNmMsCisJMHgwMDA1LCAweDkxODIsIDB4MDA0MCwgMHgwMDAyLCAweGUyYzgsIDB4ZTJjOCwgMHhlMmM4LCAweGUyYzgsCisJMHhlMmM4LCAweGUyYzgsIDB4ZTJjOCwgMHhlMmM4LCAweGUyYzgsIDB4ZTJjYSwgMHhlMmY1LCAweGUyYzgsCisJMHhlMmM4LCAweGUyYzgsIDB4ZTJjOCwgMHhlMmY1LCAweGUyYzgsIDB4ZTJjOCwgMHhlMmM4LCAweGUyYzgsCisJMHgwODBjLCAweDBkODUsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDAxNjgsCisJMHg5MDhjLCAweDAwMDMsIDB4OTE4ZSwgMHgwMDAyLCAweDAxODAsIDB4NjE0NCwgMHhkMWU0LCAweDExNjgsCisJMHgyMDA5LCAweDAwNDEsIDB4MDA5ZSwgMHgwODA0LCAweGUzYjUsIDB4NjAwMywgMHgwMDA3LCAweDYwMWIsCisJMHgwMDAwLCAweDA4MGMsIDB4OGMxOSwgMHgwMDllLCAweDAwMDUsIDB4NjAxNCwgMHgyMDQ4LCAweGE5N2MsCisJMHhkMWVjLCAweDExMzAsIDB4MDgwYywgMHg4YzE5LCAweDA4MGMsIDB4YjE2YywgMHgwMDllLCAweDAwMDUsCisJMHgwODBjLCAweGVjODksIDB4MGRiOCwgMHgwMDllLCAweDAwMDUsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCisJMHhjMWQ0LCAweDIxMDIsIDB4MDAzNiwgMHgwODBjLCAweDlhNDgsIDB4MDgwYywgMHg5YWIzLCAweDYwMTQsCisJMHgwMDk2LCAweDIwNDgsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsCisJMHgwMTg4LCAweGE4N2MsIDB4OTA4NCwgMHgwMDAzLCAweDkwODYsIDB4MDAwMiwgMHgwMTQwLCAweGE4YWMsCisJMHg2MzMwLCAweDkzMWEsIDB4NjMzMiwgMHhhOGIwLCAweDYzMmMsIDB4OTMxYiwgMHg2MzJlLCAweDYwMDMsCisJMHgwMDAyLCAweDAwODAsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4ZWEzMCwgMHg2MDE4LCAweDkwMDUsCisJMHgxMTI4LCAweDIwMDEsIDB4MTk4NywgMHgyMDA0LCAweDgwMDMsIDB4NjAxYSwgMHg2MDE3LCAweDAwMDAsCisJMHg2MDAzLCAweDAwMDcsIDB4MDA5ZSwgMHgwMDNlLCAweDAwMDUsIDB4OTE4MiwgMHgwMDQwLCAweDAwMDIsCisJMHhlMzQ0LCAweGUzNDQsIDB4ZTM0NCwgMHhlMzQ0LCAweGUzNDQsIDB4ZTM0NCwgMHhlMzQ0LCAweGUzNDQsCisJMHhlMzQ2LCAweGUzNDQsIDB4ZTM0NCwgMHhlMzQ0LCAweGUzNDQsIDB4ZTM0NCwgMHhlMzQ0LCAweGUzNDQsCisJMHhlMzQ0LCAweGUzNDQsIDB4ZTM0NCwgMHhlMzkxLCAweDA4MGMsIDB4MGQ4NSwgMHg2MDE0LCAweDAwOTYsCisJMHgyMDQ4LCAweGE4MzQsIDB4YWEzOCwgMHg2MTEwLCAweDAwYjYsIDB4MjE1OCwgMHhiOTAwLCAweDAwYmUsCisJMHhkMWJjLCAweDExOTAsIDB4OTIwZCwgMHgxNTE4LCAweGE4N2MsIDB4ZDBmYywgMHgwMTI4LCAweDIwMDksCisJMHgwMDQxLCAweDAwOWUsIDB4MDgwNCwgMHhlM2I1LCAweDYwMDMsIDB4MDAwNywgMHg2MDFiLCAweDAwMDAsCisJMHgwODBjLCAweDhjMTksIDB4MDA5ZSwgMHgwMDA1LCAweDYxMjQsIDB4ZDFmNCwgMHgxZDU4LCAweDAwMDYsCisJMHgwMDQ2LCAweGFjYWMsIDB4OTQyMiwgMHhhOWIwLCAweDIyMDAsIDB4OTEwYiwgMHg2MDMwLCAweDk0MjAsCisJMHg2NDMyLCAweDYwMmMsIDB4OTEwOSwgMHg2MTJlLCAweDAwNGUsIDB4MDAwZSwgMHgwOGQ4LCAweDYxMTAsCisJMHgwMGI2LCAweDIxNTgsIDB4YjkwMCwgMHgwMGJlLCAweGQxYmMsIDB4MTE3OCwgMHgyMDA5LCAweDE4MGUsCisJMHgyMTBjLCAweGQxOWMsIDB4MDExOCwgMHg2MDAzLCAweDAwMDcsIDB4MDAxMCwgMHg2MDAzLCAweDAwMDYsCisJMHgwMGU5LCAweDA4MGMsIDB4OGMxYiwgMHgwMDllLCAweDAwMDUsIDB4NjAwMywgMHgwMDAyLCAweDAwOWUsCisJMHgwMDA1LCAweDYwMjQsIDB4ZDBmNCwgMHgwMTI4LCAweDA4MGMsIDB4MTZiMCwgMHgxOTA0LCAweGUzNDYsCisJMHgwMDA1LCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4MzQsIDB4YTkzOCwgMHgwMDllLCAweDkxMDUsCisJMHgxMTIwLCAweDA4MGMsIDB4MTZiMCwgMHgxOTA0LCAweGUzNDYsIDB4MDAwNSwgMHhkMmZjLCAweDAxNDAsCisJMHg4MDAyLCAweDgwMDAsIDB4ODIxMiwgMHg5MjkxLCAweDAwMDAsIDB4MjAwOSwgMHgwMDA5LCAweDAwMTAsCisJMHgyMDA5LCAweDAwMTUsIDB4YWE5YSwgMHhhODk2LCAweDAwMDUsIDB4OTE4MiwgMHgwMDQwLCAweDAyMDgsCisJMHgwMDYyLCAweDkxODYsIDB4MDAxMywgMHgwMTIwLCAweDkxODYsIDB4MDAxNCwgMHgxOTBjLCAweDBkODUsCisJMHg2MDI0LCAweGQwZGMsIDB4MDkwYywgMHgwZDg1LCAweDAwMDUsIDB4ZTNkOSwgMHhlM2U1LCAweGUzZjEsCisJMHhlM2ZkLCAweGUzZDksIDB4ZTNkOSwgMHhlM2Q5LCAweGUzZDksIDB4ZTNlMCwgMHhlM2RiLCAweGUzZGIsCisJMHhlM2Q5LCAweGUzZDksIDB4ZTNkOSwgMHhlM2Q5LCAweGUzZGIsIDB4ZTNkOSwgMHhlM2RiLCAweGUzZDksCisJMHhlM2UwLCAweDA4MGMsIDB4MGQ4NSwgMHg2MDI0LCAweGQwZGMsIDB4MDkwYywgMHgwZDg1LCAweDAwMDUsCisJMHg2MDE0LCAweDkwMDUsIDB4MTkwYywgMHgwZDg1LCAweDAwMDUsIDB4NjAwMywgMHgwMDAxLCAweDYxMDYsCisJMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDA5LCAweGEwMjIsIDB4MDgwYywgMHg5NWY5LCAweDAxMmUsCisJMHgwMDA1LCAweDYwMDMsIDB4MDAwNCwgMHg2MTA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDksCisJMHhhMDAxLCAweDA4MGMsIDB4OTYxNywgMHgwMTJlLCAweDAwMDUsIDB4NjAwMywgMHgwMDAzLCAweDYxMDYsCisJMHg2MDQ3LCAweDAwMDAsIDB4MDgwYywgMHgxYzZmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwMTQsCisJMHgwMDk2LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDAxODgsIDB4OTA4NCwgMHgwMDAzLCAweDkwODYsCisJMHgwMDAyLCAweDAxYTAsIDB4NjAyNCwgMHhkMGNjLCAweDExNDgsIDB4ZDBjNCwgMHgxMTM4LCAweGE4YTgsCisJMHg5MDA1LCAweDExMjAsIDB4NjE0NCwgMHg5MThkLCAweGIwMzUsIDB4MDAxOCwgMHg2MTQ0LCAweDkxOGQsCisJMHhhMDM1LCAweDAwOWUsIDB4MDgwYywgMHg5NjVlLCAweDAxMmUsIDB4MDAwNSwgMHg2MTQ0LCAweDkxOGQsCisJMHhhMDMyLCAweDBjYjgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAzNiwgMHgwMDk2LCAweDkxODIsCisJMHgwMDQwLCAweDAwMjMsIDB4MDA5ZSwgMHgwMDNlLCAweDAxMmUsIDB4MDAwNSwgMHhlNDRhLCAweGU0NGMsCisJMHhlNDYxLCAweGU0N2IsIDB4ZTQ0YSwgMHhlNDRhLCAweGU0NGEsIDB4ZTQ0YSwgMHhlNDRhLCAweGU0NGEsCisJMHhlNDRhLCAweGU0NGEsIDB4ZTQ0YSwgMHhlNDRhLCAweGU0NGEsIDB4ZTQ0YSwgMHhlNDRhLCAweGU0NGEsCisJMHhlNDRhLCAweGU0NGEsIDB4MDgwYywgMHgwZDg1LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsCisJMHgwNTEwLCAweDkwOWMsIDB4MDAwMywgMHg5MzllLCAweDAwMDMsIDB4MDFlOCwgMHg2MDAzLCAweDAwMDEsCisJMHg2MTA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDksIDB4YTAyMiwgMHgwODBjLCAweDk2MTcsCisJMHgwNDgwLCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsIDB4MDE2OCwgMHg5MDljLCAweDAwMDMsCisJMHg5MzllLCAweDAwMDMsIDB4MDE0MCwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgyMDA5LCAweGEwMDEsCisJMHgwODBjLCAweDk2MTcsIDB4MDBmMCwgMHg5MDFlLCAweDYzMTYsIDB4NjMxYSwgMHgyMDE5LCAweDAwMDQsCisJMHgwODBjLCAweGVhMzAsIDB4MDBiMCwgMHg2MDE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDBkOTgsCisJMHg5MDljLCAweDAwMDMsIDB4OTM5ZSwgMHgwMDAzLCAweDBkNzAsIDB4NjAwMywgMHgwMDAzLCAweDYxMDYsCisJMHg2MDQ3LCAweDAwMDAsIDB4MDgwYywgMHgxYzZmLCAweDYxNDQsIDB4OTE4ZCwgMHhhMDM1LCAweDA4MGMsCisJMHg5NjVlLCAweDAwMDUsIDB4MDgwYywgMHg5OWVkLCAweDYxMTQsIDB4ODFmZiwgMHgwMTU4LCAweDAwOTYsCisJMHgyMTQ4LCAweDA4MGMsIDB4ZWRkZiwgMHgwMDM2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweGVhMzAsCisJMHgwMDNlLCAweDAwOWUsIDB4MDgwYywgMHhiMWE3LCAweDA4MGMsIDB4OWFiMywgMHgwMDA1LCAweDA4MGMsCisJMHg5YTQ4LCAweDYxMTQsIDB4ODFmZiwgMHgwMTU4LCAweDAwOTYsIDB4MjE0OCwgMHgwODBjLCAweGVkZGYsCisJMHgwMDM2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweGVhMzAsIDB4MDAzZSwgMHgwMDllLCAweDA4MGMsCisJMHhiMWE3LCAweDAwMDUsIDB4OTE4MiwgMHgwMDg1LCAweDAwMDIsIDB4ZTRjYywgMHhlNGNhLCAweGU0Y2EsCisJMHhlNGQ4LCAweGU0Y2EsIDB4ZTRjYSwgMHhlNGNhLCAweGU0Y2EsIDB4ZTRjYSwgMHhlNGNhLCAweGU0Y2EsCisJMHhlNGNhLCAweGU0Y2EsIDB4MDgwYywgMHgwZDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MTA2LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTYxNywgMHgwMTJlLCAweDAwMDUsCisJMHgwMDI2LCAweDAwZTYsIDB4MDgwYywgMHhlYzgwLCAweDAxMTgsIDB4MDgwYywgMHhiMTZjLCAweDA0NDAsCisJMHgyMDcxLCAweDAyNjAsIDB4NzIyNCwgMHg2MjE2LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZTQsCisJMHgwMTUwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGJjYTAsIDB4MDBiZSwgMHgyYzAwLCAweDIwMTEsCisJMHgwMTRlLCAweDA4MGMsIDB4YjQ5NSwgMHg3MjIwLCAweDA4MGMsIDB4ZTg3NSwgMHgwMTE4LCAweDYwMDcsCisJMHgwMDg2LCAweDAwNDAsIDB4NjAwNywgMHgwMDg3LCAweDcyMjQsIDB4OTI5NiwgMHhmZmZmLCAweDExMTAsCisJMHg2MDA3LCAweDAwODYsIDB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk2MTcsCisJMHgwMGVlLCAweDAwMmUsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsIDB4MTE2MCwgMHg2MDA0LCAweDkwOGEsCisJMHgwMDg1LCAweDBhMGMsIDB4MGQ4NSwgMHg5MDhhLCAweDAwOTIsIDB4MWEwYywgMHgwZDg1LCAweDkwODIsCisJMHgwMDg1LCAweDAwYTIsIDB4OTE4NiwgMHgwMDI3LCAweDAxMzAsIDB4OTE4NiwgMHgwMDE0LCAweDAxMTgsCisJMHgwODBjLCAweGIyMjcsIDB4MDA1MCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NzI2LCAweDA4MGMsCisJMHg5OWVkLCAweDA4MGMsIDB4YjFhNywgMHgwODBjLCAweDlhYjMsIDB4MDAwNSwgMHhlNTNiLCAweGU1M2QsCisJMHhlNTNkLCAweGU1M2IsIDB4ZTUzYiwgMHhlNTNiLCAweGU1M2IsIDB4ZTUzYiwgMHhlNTNiLCAweGU1M2IsCisJMHhlNTNiLCAweGU1M2IsIDB4ZTUzYiwgMHgwODBjLCAweDBkODUsIDB4MDgwYywgMHhiMWE3LCAweDA4MGMsCisJMHg5YWIzLCAweDAwMDUsIDB4OTE4MiwgMHgwMDg1LCAweDBhMGMsIDB4MGQ4NSwgMHg5MTgyLCAweDAwOTIsCisJMHgxYTBjLCAweDBkODUsIDB4OTE4MiwgMHgwMDg1LCAweDAwMDIsIDB4ZTU1YSwgMHhlNTVhLCAweGU1NWEsCisJMHhlNTVjLCAweGU1NWEsIDB4ZTU1YSwgMHhlNTVhLCAweGU1NWEsIDB4ZTU1YSwgMHhlNTVhLCAweGU1NWEsCisJMHhlNTVhLCAweGU1NWEsIDB4MDgwYywgMHgwZDg1LCAweDAwMDUsIDB4OTE4NiwgMHgwMDEzLCAweDAxNDgsCisJMHg5MTg2LCAweDAwMTQsIDB4MDEzMCwgMHg5MTg2LCAweDAwMjcsIDB4MDExOCwgMHgwODBjLCAweGIyMjcsCisJMHgwMDIwLCAweDA4MGMsIDB4OTllZCwgMHgwODBjLCAweGIxYTcsIDB4MDAwNSwgMHgwMDM2LCAweDA4MGMsCisJMHhlY2UxLCAweDYwNGIsIDB4MDAwMCwgMHgyMDE5LCAweDAwMGIsIDB4MDAxMSwgMHgwMDNlLCAweDAwMDUsCisJMHg2MDEwLCAweDAwMDYsIDB4MDA1OSwgMHgwMDBlLCAweDYwMTIsIDB4NjAyMywgMHgwMDA2LCAweDYwMDMsCisJMHgwMDA3LCAweDYwMWIsIDB4MDAwMCwgMHg2MDRiLCAweDAwMDAsIDB4MDAwNSwgMHgwMTI2LCAweDAwMzYsCisJMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhhY2ZjLCAweDAxMDYsIDB4MDA4NiwgMHgyYzQwLCAweDAwOTYsCisJMHg5MDRlLCAweDA4MGMsIDB4YTY2NywgMHgwMDllLCAweDAwOGUsIDB4MTU1OCwgMHgwMDc2LCAweDJjMzgsCisJMHgwODBjLCAweGE3MTIsIDB4MDA3ZSwgMHgxNTI4LCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDA1MDgsCiAJMHg2MDIwLCAweDkwODYsIDB4MDAwNywgMHgwMWU4LCAweDAwOTYsIDB4NjAxYywgMHhkMDg0LCAweDAxNDAsCi0JMHgwODBjLCAweGU5ZjAsIDB4MDgwYywgMHhkMzc1LCAweDA4MGMsIDB4MWFmMCwgMHg2MDIzLCAweDAwMDcsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLCAweDAxMTAsIDB4MDgwYywgMHhlNzM4LCAweDAwOWUsCi0JMHg5MDA2LCAweDYwNDYsIDB4NjAxNiwgMHgwODBjLCAweGU5ZjAsIDB4NjAyMywgMHgwMDA3LCAweDA4MGMsCi0JMHhkMzc1LCAweDAxMGUsIDB4MDkwYywgMHhhYjEzLCAweDAwM2UsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsCisJMHgwODBjLCAweGVjZTEsIDB4MDgwYywgMHhkNjVkLCAweDA4MGMsIDB4MWFkMywgMHg2MDIzLCAweDAwMDcsCisJMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhjZjFiLCAweDAxMTAsIDB4MDgwYywgMHhlYTMwLCAweDAwOWUsCisJMHg5MDA2LCAweDYwNDYsIDB4NjAxNiwgMHgwODBjLCAweGVjZTEsIDB4NjAyMywgMHgwMDA3LCAweDA4MGMsCisJMHhkNjVkLCAweDAxMGUsIDB4MDkwYywgMHhhZDE4LCAweDAwM2UsIDB4MDEyZSwgMHgwMDA1LCAweDAwZjYsCiAJMHgwMGM2LCAweDAwYjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwNzksIDB4MDI2MCwgMHg3OTM4LCAweDc4M2MsCi0JMHgwODBjLCAweDI2YTEsIDB4MTkwNCwgMHhlMzI5LCAweDAwMTYsIDB4MDBjNiwgMHgwODBjLCAweDY3ODMsCi0JMHgxOTA0LCAweGUzMjcsIDB4MDAxZSwgMHgwMGM2LCAweDA4MGMsIDB4ZDM1ZCwgMHgxMTMwLCAweGI4ODQsCi0JMHg5MDA1LCAweDAxMTgsIDB4MDgwYywgMHgzNDYzLCAweDAxNDgsIDB4MmIxMCwgMHgyMTYwLCAweDYwMTAsCi0JMHgwMDA2LCAweDYyMTIsIDB4MDgwYywgMHhkMzY0LCAweDAwMGUsIDB4NjAxMiwgMHgwMGNlLCAweDAwMmUsCi0JMHgwMDI2LCAweDAwMTYsIDB4MDgwYywgMHhhYWY3LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweGE1ZGQsCi0JMHgwODBjLCAweDk1YjksIDB4MDA3NiwgMHg5MDNlLCAweDA4MGMsIDB4OTQ3NiwgMHgwMDdlLCAweDAwMWUsCi0JMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHhlNDY1LCAweDAwN2UsIDB4MDgwYywgMHhhYjEzLCAweDAwMjYsCisJMHgwODBjLCAweDI2OGMsIDB4MTkwNCwgMHhlNjIxLCAweDAwMTYsIDB4MDBjNiwgMHgwODBjLCAweDY3YjQsCisJMHgxOTA0LCAweGU2MWYsIDB4MDAxZSwgMHgwMGM2LCAweDA4MGMsIDB4ZDY0NSwgMHgxMTMwLCAweGI4ODQsCisJMHg5MDA1LCAweDAxMTgsIDB4MDgwYywgMHgzNDdkLCAweDAxNDgsIDB4MmIxMCwgMHgyMTYwLCAweDYwMTAsCisJMHgwMDA2LCAweDYyMTIsIDB4MDgwYywgMHhkNjRjLCAweDAwMGUsIDB4NjAxMiwgMHgwMGNlLCAweDAwMmUsCisJMHgwMDI2LCAweDAwMTYsIDB4MDgwYywgMHhhY2ZjLCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweGE3ZTIsCisJMHgwODBjLCAweDk3YjAsIDB4MDA3NiwgMHg5MDNlLCAweDA4MGMsIDB4OTY2ZCwgMHgwMDdlLCAweDAwMWUsCisJMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHhlNzVkLCAweDAwN2UsIDB4MDgwYywgMHhhZDE4LCAweDAwMjYsCiAJMHhiYTA0LCAweDkyOTQsIDB4ZmYwMCwgMHg4MjE3LCAweDkyODYsIDB4MDAwNiwgMHgwMTE4LCAweDkyODYsCi0JMHgwMDA0LCAweDExMTgsIDB4YmFhMCwgMHgwODBjLCAweDMzYzYsIDB4MDAyZSwgMHhiYzg0LCAweDAwMWUsCi0JMHgwODBjLCAweDYxOTIsIDB4YmUxMiwgMHhiZDE2LCAweGJjODYsIDB4OTAwNiwgMHgwMDEwLCAweDAwY2UsCisJMHgwMDA0LCAweDExMTgsIDB4YmFhMCwgMHgwODBjLCAweDMzZTAsIDB4MDAyZSwgMHhiYzg0LCAweDAwMWUsCisJMHgwODBjLCAweDYxYjcsIDB4YmUxMiwgMHhiZDE2LCAweGJjODYsIDB4OTAwNiwgMHgwMDEwLCAweDAwY2UsCiAJMHgwMDFlLCAweDAxNWUsIDB4MDAzZSwgMHgwMGJlLCAweDAwY2UsIDB4MDBmZSwgMHgwMDA1LCAweDAwYzYsCiAJMHgwMGQ2LCAweDAwYjYsIDB4MDAxNiwgMHgyMDA5LCAweDE4MjQsIDB4MjEwNCwgMHg5MDg2LCAweDAwNzQsCi0JMHgxOTA0LCAweGUzODgsIDB4MjA2OSwgMHgwMjYwLCAweDY5NDQsIDB4OTE4MiwgMHgwMTAwLCAweDA2ZTAsCi0JMHg2OTQwLCAweDkxODQsIDB4ODAwMCwgMHgwOTA0LCAweGUzODUsIDB4MjAwMSwgMHgxOTdkLCAweDIwMDQsCisJMHgxOTA0LCAweGU2ODAsIDB4MjA2OSwgMHgwMjYwLCAweDY5NDQsIDB4OTE4MiwgMHgwMTAwLCAweDA2ZTAsCisJMHg2OTQwLCAweDkxODQsIDB4ODAwMCwgMHgwOTA0LCAweGU2N2QsIDB4MjAwMSwgMHgxOTdjLCAweDIwMDQsCiAJMHg5MDA1LCAweDExNDAsIDB4NjAxMCwgMHgyMDU4LCAweGI4ODQsIDB4OTAwNSwgMHgwMTE4LCAweDkxODQsCi0JMHgwODAwLCAweDA1OTgsIDB4Njk0OCwgMHg5MThhLCAweDAwMDEsIDB4MDY0OCwgMHgwODBjLCAweGViNTYsCisJMHgwODAwLCAweDA1OTgsIDB4Njk0OCwgMHg5MThhLCAweDAwMDEsIDB4MDY0OCwgMHgwODBjLCAweGVlNDcsCiAJMHgwMTE4LCAweDY5NzgsIDB4ZDFmYywgMHgxMWI4LCAweDIwMDksIDB4MDIwNSwgMHgyMDBiLCAweDAwMDEsCiAJMHg2OTNjLCAweDgxZmYsIDB4MTE5OCwgMHg2OTQ0LCAweDkxODIsIDB4MDEwMCwgMHgwMmE4LCAweDY5NDAsCiAJMHg4MWZmLCAweDExNzgsIDB4Njk0OCwgMHg5MThhLCAweDAwMDEsIDB4MDI4OCwgMHg2OTUwLCAweDkxOGEsCkBAIC03MDY3LDEyNSArNzE2MiwxMjUgQEAKIAkweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDAwYzYsIDB4MDBiNiwgMHgwMDI2LCAweDAwMzYsIDB4MDE1NiwKIAkweDYyMTAsIDB4MjI1OCwgMHhiYjA0LCAweDkzOTQsIDB4MDBmZiwgMHg5Mjg2LCAweDAwMDYsIDB4MDE4MCwKIAkweDkyODYsIDB4MDAwNCwgMHgwMTY4LCAweDkzOTQsIDB4ZmYwMCwgMHg4MjE3LCAweDkyODYsIDB4MDAwNiwKLQkweDAxMzgsIDB4OTI4NiwgMHgwMDA0LCAweDAxMjAsIDB4MDgwYywgMHg2NzkyLCAweDA4MDQsIDB4ZTNmNCwKKwkweDAxMzgsIDB4OTI4NiwgMHgwMDA0LCAweDAxMjAsIDB4MDgwYywgMHg2N2MzLCAweDA4MDQsIDB4ZTZlYywKIAkweDIwMTEsIDB4MDI3NiwgMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwgMHgyYjQ4LCAweDIwMTksIDB4MDAwYSwKLQkweDA4MGMsIDB4YmY1NCwgMHgwMDllLCAweDE1YzgsIDB4MjAxMSwgMHgwMjdhLCAweDIwYTksIDB4MDAwNCwKLQkweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhiZjU0LCAweDAwOWUsIDB4MTU2OCwKKwkweDA4MGMsIDB4YzIyMiwgMHgwMDllLCAweDE1YzgsIDB4MjAxMSwgMHgwMjdhLCAweDIwYTksIDB4MDAwNCwKKwkweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhjMjIyLCAweDAwOWUsIDB4MTU2OCwKIAkweDAwNDYsIDB4MDAxNiwgMHhiYWEwLCAweDIyMjAsIDB4OTAwNiwgMHgyMDA5LCAweDE4NDgsIDB4MjEwYywKLQkweGQxYTQsIDB4MDEzOCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhlNzk1LCAweGI4MDAsIDB4YzBlNSwKLQkweGI4MDIsIDB4MDgwYywgMHhhYWY3LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDk1YjksIDB4MDA3NiwKLQkweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDk0NzYsIDB4MmMwOCwgMHgwODBjLCAweGU0NjUsIDB4MDA3ZSwKLQkweDA4MGMsIDB4YWIxMywgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NmY1LCAweDIwMDEsIDB4MDAwNywKLQkweDA4MGMsIDB4NjZjOSwgMHgwMDFlLCAweDAwNGUsIDB4OTAwNiwgMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwKKwkweGQxYTQsIDB4MDEzOCwgMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhlYThkLCAweGI4MDAsIDB4YzBlNSwKKwkweGI4MDIsIDB4MDgwYywgMHhhY2ZjLCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDk3YjAsIDB4MDA3NiwKKwkweDIwMzksIDB4MDAwMCwgMHgwODBjLCAweDk2NmQsIDB4MmMwOCwgMHgwODBjLCAweGU3NWQsIDB4MDA3ZSwKKwkweDA4MGMsIDB4YWQxOCwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2NzI2LCAweDIwMDEsIDB4MDAwNywKKwkweDA4MGMsIDB4NjZmYSwgMHgwMDFlLCAweDAwNGUsIDB4OTAwNiwgMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwKIAkweDAwYmUsIDB4MDBjZSwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMjZlLCAweDY4MDAsIDB4OTA4NiwKIAkweDA4MDAsIDB4MDExOCwgMHg2MDE3LCAweDAwMDAsIDB4MDAwOCwgMHg5MDA2LCAweDAwZGUsIDB4MDAwNSwKIAkweDAwYjYsIDB4MDBmNiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwNzksIDB4MDI2YywKLQkweDc5MzAsIDB4NzgzNCwgMHgwODBjLCAweDI2YTEsIDB4MTFkMCwgMHgwODBjLCAweDY3ODMsIDB4MTFiOCwKKwkweDc5MzAsIDB4NzgzNCwgMHgwODBjLCAweDI2OGMsIDB4MTFkMCwgMHgwODBjLCAweDY3YjQsIDB4MTFiOCwKIAkweDIwMTEsIDB4MDI3MCwgMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwgMHgyYjQ4LCAweDIwMTksIDB4MDAwYSwKLQkweDA4MGMsIDB4YmY1NCwgMHgwMDllLCAweDExNTgsIDB4MjAxMSwgMHgwMjc0LCAweDIwYTksIDB4MDAwNCwKLQkweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhiZjU0LCAweDAwOWUsIDB4MDE1ZSwKKwkweDA4MGMsIDB4YzIyMiwgMHgwMDllLCAweDExNTgsIDB4MjAxMSwgMHgwMjc0LCAweDIwYTksIDB4MDAwNCwKKwkweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhjMjIyLCAweDAwOWUsIDB4MDE1ZSwKIAkweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDAwNiwKIAkweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4MjAxMSwgMHgwMjYzLCAweDIyMDQsIDB4ODIxMSwKLQkweDIyMGMsIDB4MDgwYywgMHgyNmExLCAweDExZDAsIDB4MDgwYywgMHg2NzgzLCAweDExYjgsIDB4MjAxMSwKKwkweDIyMGMsIDB4MDgwYywgMHgyNjhjLCAweDExZDAsIDB4MDgwYywgMHg2N2I0LCAweDExYjgsIDB4MjAxMSwKIAkweDAyNzYsIDB4MjBhOSwgMHgwMDA0LCAweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMGEsIDB4MDgwYywKLQkweGJmNTQsIDB4MDA5ZSwgMHgxMTU4LCAweDIwMTEsIDB4MDI3YSwgMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwKLQkweDJiNDgsIDB4MjAxOSwgMHgwMDA2LCAweDA4MGMsIDB4YmY1NCwgMHgwMDllLCAweDAxNWUsIDB4MDAzZSwKKwkweGMyMjIsIDB4MDA5ZSwgMHgxMTU4LCAweDIwMTEsIDB4MDI3YSwgMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwKKwkweDJiNDgsIDB4MjAxOSwgMHgwMDA2LCAweDA4MGMsIDB4YzIyMiwgMHgwMDllLCAweDAxNWUsIDB4MDAzZSwKIAkweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDA4NiwKIAkweDAwNzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAyNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwKLQkweDA4MGMsIDB4YWI1NSwgMHgwMTA2LCAweDE5MGMsIDB4YWFmNywgMHgyNzQwLCAweDIwMjksIDB4MTlmNSwKLQkweDI1MmMsIDB4MjAyMSwgMHgxOWZjLCAweDI0MjQsIDB4MjA2MSwgMHgxZGRjLCAweDIwNzEsIDB4MTgwMCwKLQkweDc2NTQsIDB4NzA3NCwgMHg4MWZmLCAweDAxNTAsIDB4MDAwNiwgMHg5MTg2LCAweDFiM2EsIDB4MDAwZSwKLQkweDAxMjgsIDB4ODAwMSwgMHg5NjAyLCAweDFhMDQsIDB4ZTUwYiwgMHgwMDE4LCAweDk2MDYsIDB4MDkwNCwKLQkweGU1MGIsIDB4MDgwYywgMHg4ZDg3LCAweDA5MDQsIDB4ZTUwMiwgMHgyMTAwLCAweDljMDYsIDB4MDkwNCwKLQkweGU1MDIsIDB4NjcyMCwgMHg5Nzg2LCAweDAwMDcsIDB4MDkwNCwgMHhlNTAyLCAweDA4MGMsIDB4ZTdkNiwKLQkweDE5MDQsIDB4ZTUwMiwgMHgwODBjLCAweGViNzQsIDB4MDkwNCwgMHhlNTAyLCAweDA4MGMsIDB4ZTdjNiwKLQkweDA5MDQsIDB4ZTUwMiwgMHg2NzIwLCAweDk3ODYsIDB4MDAwMSwgMHgxMTQ4LCAweDA4MGMsIDB4MzQ2MywKLQkweDA5MDQsIDB4ZTU0ZCwgMHg2MDA0LCAweDkwODYsIDB4MDAwMCwgMHgxOTA0LCAweGU1NGQsIDB4OTc4NiwKLQkweDAwMDQsIDB4MDkwNCwgMHhlNTRkLCAweDI1MDAsIDB4OWMwNiwgMHgwOTA0LCAweGU1MDIsIDB4MjQwMCwKLQkweDljMDYsIDB4MDkwNCwgMHhlNTAyLCAweDg4ZmYsIDB4MDExOCwgMHg2MDVjLCAweDk5MDYsIDB4MTVkMCwKKwkweDA4MGMsIDB4YWQ1YSwgMHgwMTA2LCAweDE5MGMsIDB4YWNmYywgMHgyNzQwLCAweDIwMjksIDB4MTlmNCwKKwkweDI1MmMsIDB4MjAyMSwgMHgxOWZiLCAweDI0MjQsIDB4MjA2MSwgMHgxZGRjLCAweDIwNzEsIDB4MTgwMCwKKwkweDc2NTQsIDB4NzA3NCwgMHg4MWZmLCAweDAxNTAsIDB4MDAwNiwgMHg5MTg2LCAweDFiMzksIDB4MDAwZSwKKwkweDAxMjgsIDB4ODAwMSwgMHg5NjAyLCAweDFhMDQsIDB4ZTgwMywgMHgwMDE4LCAweDk2MDYsIDB4MDkwNCwKKwkweGU4MDMsIDB4MDgwYywgMHg4ZWVlLCAweDA5MDQsIDB4ZTdmYSwgMHgyMTAwLCAweDljMDYsIDB4MDkwNCwKKwkweGU3ZmEsIDB4NjcyMCwgMHg5Nzg2LCAweDAwMDcsIDB4MDkwNCwgMHhlN2ZhLCAweDA4MGMsIDB4ZWFjZSwKKwkweDE5MDQsIDB4ZTdmYSwgMHgwODBjLCAweGVlNjUsIDB4MDkwNCwgMHhlN2ZhLCAweDA4MGMsIDB4ZWFiZSwKKwkweDA5MDQsIDB4ZTdmYSwgMHg2NzIwLCAweDk3ODYsIDB4MDAwMSwgMHgxMTQ4LCAweDA4MGMsIDB4MzQ3ZCwKKwkweDA5MDQsIDB4ZTg0NSwgMHg2MDA0LCAweDkwODYsIDB4MDAwMCwgMHgxOTA0LCAweGU4NDUsIDB4OTc4NiwKKwkweDAwMDQsIDB4MDkwNCwgMHhlODQ1LCAweDI1MDAsIDB4OWMwNiwgMHgwOTA0LCAweGU3ZmEsIDB4MjQwMCwKKwkweDljMDYsIDB4MDkwNCwgMHhlN2ZhLCAweDg4ZmYsIDB4MDExOCwgMHg2MDVjLCAweDk5MDYsIDB4MTVkMCwKIAkweDAwOTYsIDB4NjA0MywgMHhmZmZmLCAweDYwMDAsIDB4OTA4NiwgMHgwMDA0LCAweDExMjAsIDB4MDAxNiwKLQkweDA4MGMsIDB4MWFmMCwgMHgwMDFlLCAweDk3ODYsIDB4MDAwYSwgMHgwMTQ4LCAweDA4MGMsIDB4Y2U0YSwKLQkweDExMzAsIDB4MDgwYywgMHhiOTNjLCAweDAwOWUsIDB4MDgwYywgMHhhZjg5LCAweDA0MTgsIDB4NjAxNCwKLQkweDIwNDgsIDB4MDgwYywgMHhjYzMzLCAweDAxZDgsIDB4OTc4NiwgMHgwMDAzLCAweDE1ODgsIDB4YTg2NywKKwkweDA4MGMsIDB4MWFkMywgMHgwMDFlLCAweDk3ODYsIDB4MDAwYSwgMHgwMTQ4LCAweDA4MGMsIDB4ZDEzMiwKKwkweDExMzAsIDB4MDgwYywgMHhiYjVjLCAweDAwOWUsIDB4MDgwYywgMHhiMWE3LCAweDA0MTgsIDB4NjAxNCwKKwkweDIwNDgsIDB4MDgwYywgMHhjZjFiLCAweDAxZDgsIDB4OTc4NiwgMHgwMDAzLCAweDE1ODgsIDB4YTg2NywKIAkweDAxMDMsIDB4YTg3YywgMHhkMGNjLCAweDAxMzAsIDB4MDA5NiwgMHhhODc4LCAweDIwNDgsIDB4MDgwYywKLQkweDBmZmYsIDB4MDA5ZSwgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweGVhZWUsIDB4MDAxNiwKLQkweDA4MGMsIDB4Y2YzOCwgMHgwODBjLCAweDZmMDUsIDB4MDAxZSwgMHgwODBjLCAweGNlMjQsIDB4MDA5ZSwKLQkweDA4MGMsIDB4YWY4OSwgMHg5Y2UwLCAweDAwMWMsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwKLQkweDEyMTAsIDB4MDgwNCwgMHhlNDdlLCAweDAxMGUsIDB4MTkwYywgMHhhYjEzLCAweDAxMmUsIDB4MDAyZSwKKwkweDEwMGIsIDB4MDA5ZSwgMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweGVkZGYsIDB4MDAxNiwKKwkweDA4MGMsIDB4ZDIyMCwgMHgwODBjLCAweDcwMDYsIDB4MDAxZSwgMHgwODBjLCAweGQxMGMsIDB4MDA5ZSwKKwkweDA4MGMsIDB4YjFhNywgMHg5Y2UwLCAweDAwMWMsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwKKwkweDEyMTAsIDB4MDgwNCwgMHhlNzc2LCAweDAxMGUsIDB4MTkwYywgMHhhZDE4LCAweDAxMmUsIDB4MDAyZSwKIAkweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsIDB4MDA4ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwKLQkweDk3ODYsIDB4MDAwNiwgMHgxMTUwLCAweDkzODYsIDB4MDAwNSwgMHgwMTI4LCAweDA4MGMsIDB4ZWFlZSwKLQkweDA4MGMsIDB4ZTczOCwgMHgwOGUwLCAweDAwOWUsIDB4MDhlOCwgMHg5Nzg2LCAweDAwMDksIDB4MTFmOCwKKwkweDk3ODYsIDB4MDAwNiwgMHgxMTUwLCAweDkzODYsIDB4MDAwNSwgMHgwMTI4LCAweDA4MGMsIDB4ZWRkZiwKKwkweDA4MGMsIDB4ZWEzMCwgMHgwOGUwLCAweDAwOWUsIDB4MDhlOCwgMHg5Nzg2LCAweDAwMDksIDB4MTFmOCwKIAkweDYwMDAsIDB4OTA4NiwgMHgwMDA0LCAweDAxYzAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDMsIDB4MTFhMCwKLQkweDA4MGMsIDB4OTg1MSwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLCAweGNjMzMsIDB4MDExOCwKLQkweDYwMTAsIDB4MDgwYywgMHg2ZjExLCAweDAwOWUsIDB4MDBjNiwgMHgwODBjLCAweGFmNGUsIDB4MDBjZSwKLQkweDAwMzYsIDB4MDgwYywgMHg5OGJjLCAweDAwM2UsIDB4MDA5ZSwgMHgwODA0LCAweGU1MDIsIDB4OTc4NiwKLQkweDAwMGEsIDB4MDkwNCwgMHhlNGYyLCAweDA4MDQsIDB4ZTRlNywgMHg4MWZmLCAweDA5MDQsIDB4ZTUwMiwKKwkweDA4MGMsIDB4OWE0OCwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLCAweGNmMWIsIDB4MDExOCwKKwkweDYwMTAsIDB4MDgwYywgMHg3MDEyLCAweDAwOWUsIDB4MDBjNiwgMHgwODBjLCAweGIxNmMsIDB4MDBjZSwKKwkweDAwMzYsIDB4MDgwYywgMHg5YWIzLCAweDAwM2UsIDB4MDA5ZSwgMHgwODA0LCAweGU3ZmEsIDB4OTc4NiwKKwkweDAwMGEsIDB4MDkwNCwgMHhlN2VhLCAweDA4MDQsIDB4ZTdkZiwgMHg4MWZmLCAweDA5MDQsIDB4ZTdmYSwKIAkweDkxODAsIDB4MDAwMSwgMHgyMDA0LCAweDkwODYsIDB4MDAxOCwgMHgwMTM4LCAweDkxODAsIDB4MDAwMSwKLQkweDIwMDQsIDB4OTA4NiwgMHgwMDJkLCAweDE5MDQsIDB4ZTUwMiwgMHg2MDAwLCAweDkwODYsIDB4MDAwMiwKLQkweDE5MDQsIDB4ZTUwMiwgMHgwODBjLCAweGNlMzksIDB4MDEzOCwgMHgwODBjLCAweGNlNGEsIDB4MTkwNCwKLQkweGU1MDIsIDB4MDgwYywgMHhiOTNjLCAweDAwMzgsIDB4MDgwYywgMHgzMzJhLCAweDA4MGMsIDB4Y2U0YSwKLQkweDExMTAsIDB4MDgwYywgMHhiOTNjLCAweDA4MGMsIDB4YWY4OSwgMHgwODA0LCAweGU1MDIsIDB4YTg2NCwKKwkweDIwMDQsIDB4OTA4NiwgMHgwMDJkLCAweDE5MDQsIDB4ZTdmYSwgMHg2MDAwLCAweDkwODYsIDB4MDAwMiwKKwkweDE5MDQsIDB4ZTdmYSwgMHgwODBjLCAweGQxMjEsIDB4MDEzOCwgMHgwODBjLCAweGQxMzIsIDB4MTkwNCwKKwkweGU3ZmEsIDB4MDgwYywgMHhiYjVjLCAweDAwMzgsIDB4MDgwYywgMHgzMzQ0LCAweDA4MGMsIDB4ZDEzMiwKKwkweDExMTAsIDB4MDgwYywgMHhiYjVjLCAweDA4MGMsIDB4YjFhNywgMHgwODA0LCAweGU3ZmEsIDB4YTg2NCwKIAkweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzksIDB4MDAwNSwgMHgwMGM2LCAweDAwZTYsIDB4MDAxNiwKLQkweDJjMDgsIDB4MjE3MCwgMHg5MDA2LCAweDA4MGMsIDB4ZTc1ZiwgMHgwMDFlLCAweDAxMjAsIDB4NjAyMCwKLQkweDkwODQsIDB4MDAwZiwgMHgwMDFiLCAweDAwZWUsIDB4MDBjZSwgMHgwMDA1LCAweGU1OWMsIDB4ZTU5YywKLQkweGU1OWMsIDB4ZTU5YywgMHhlNTljLCAweGU1OWMsIDB4ZTU5ZSwgMHhlNTljLCAweGU1OWMsIDB4ZTU5YywKLQkweGU1YzcsIDB4YWY4OSwgMHhhZjg5LCAweGU1OWMsIDB4OTAwNiwgMHgwMDA1LCAweDAwMzYsIDB4MDA0NiwKKwkweDJjMDgsIDB4MjE3MCwgMHg5MDA2LCAweDA4MGMsIDB4ZWE1NywgMHgwMDFlLCAweDAxMjAsIDB4NjAyMCwKKwkweDkwODQsIDB4MDAwZiwgMHgwMDFiLCAweDAwZWUsIDB4MDBjZSwgMHgwMDA1LCAweGU4OTQsIDB4ZTg5NCwKKwkweGU4OTQsIDB4ZTg5NCwgMHhlODk0LCAweGU4OTQsIDB4ZTg5NiwgMHhlODk0LCAweGU4OTQsIDB4ZTg5NCwKKwkweGU4YmYsIDB4YjFhNywgMHhiMWE3LCAweGU4OTQsIDB4OTAwNiwgMHgwMDA1LCAweDAwMzYsIDB4MDA0NiwKIAkweDAwMTYsIDB4NzAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmNhMCwgMHgwMGJlLCAweDJjMDAsIDB4MjAwOSwKLQkweDAwMjAsIDB4MDgwYywgMHhlNzk1LCAweDAwMWUsIDB4MDA0ZSwgMHgyMDE5LCAweDAwMDIsIDB4MDgwYywKLQkweGUyOGUsIDB4MDAzZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDk2LCAweDA4MGMsIDB4Y2MzMywKLQkweDAxNDAsIDB4NjAxNCwgMHg5MDRkLCAweDA4MGMsIDB4YzgxYiwgMHg2ODdiLCAweDAwMDUsIDB4MDgwYywKLQkweDZmMTEsIDB4MDA5ZSwgMHgwODBjLCAweGFmODksIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDAxOSwKLQkweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDYwMDAsIDB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGQ3OSwKLQkweDAwMGIsIDB4MDAwNSwgMHhlNWUyLCAweGU1ZTIsIDB4ZTVmOSwgMHhlNWU5LCAweGU2MDgsIDB4ZTVlMiwKLQkweGU1ZTIsIDB4ZTVlNCwgMHhlNWUyLCAweGU1ZTIsIDB4ZTVlMiwgMHhlNWUyLCAweGU1ZTIsIDB4ZTVlMiwKLQkweGU1ZTIsIDB4ZTVlMiwgMHgwODBjLCAweDBkNzksIDB4MDgwYywgMHhhZjg5LCAweDkwODUsIDB4MDAwMSwKLQkweDAwMDUsIDB4MDAzNiwgMHgwMGU2LCAweDIwNzEsIDB4MTllOSwgMHg3MDRjLCAweDljMDYsIDB4MTEyOCwKLQkweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGEzOTEsIDB4MDAxMCwgMHgwODBjLCAweGE1OWMsIDB4MDBlZSwKKwkweDAwMjAsIDB4MDgwYywgMHhlYThkLCAweDAwMWUsIDB4MDA0ZSwgMHgyMDE5LCAweDAwMDIsIDB4MDgwYywKKwkweGU1ODYsIDB4MDAzZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDk2LCAweDA4MGMsIDB4Y2YxYiwKKwkweDAxNDAsIDB4NjAxNCwgMHg5MDRkLCAweDA4MGMsIDB4Y2FlOSwgMHg2ODdiLCAweDAwMDUsIDB4MDgwYywKKwkweDcwMTIsIDB4MDA5ZSwgMHgwODBjLCAweGIxYTcsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDAxOSwKKwkweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDYwMDAsIDB4OTA4YSwgMHgwMDEwLCAweDFhMGMsIDB4MGQ4NSwKKwkweDAwMGIsIDB4MDAwNSwgMHhlOGRhLCAweGU4ZGEsIDB4ZThmMSwgMHhlOGUxLCAweGU5MDAsIDB4ZThkYSwKKwkweGU4ZGEsIDB4ZThkYywgMHhlOGRhLCAweGU4ZGEsIDB4ZThkYSwgMHhlOGRhLCAweGU4ZGEsIDB4ZThkYSwKKwkweGU4ZGEsIDB4ZThkYSwgMHgwODBjLCAweDBkODUsIDB4MDgwYywgMHhiMWE3LCAweDkwODUsIDB4MDAwMSwKKwkweDAwMDUsIDB4MDAzNiwgMHgwMGU2LCAweDIwNzEsIDB4MTllOCwgMHg3MDRjLCAweDljMDYsIDB4MTEyOCwKKwkweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweGE1OTYsIDB4MDAxMCwgMHgwODBjLCAweGE3YTEsIDB4MDBlZSwKIAkweDAwM2UsIDB4MDA5NiwgMHgwMGQ2LCAweDYwMTQsIDB4MjA0OCwgMHhhODdiLCAweDAwMDUsIDB4MDgwYywKLQkweDZmMTEsIDB4MDgwYywgMHhhZjg5LCAweDAwZGUsIDB4MDA5ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwKLQkweDYwMWMsIDB4ZDA4NCwgMHgxOTBjLCAweDFhZjAsIDB4MGM2MCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywKLQkweDY2YjUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwKLQkweDE4MDUsIDB4MjAxMSwgMHgwMjc2LCAweDA4MGMsIDB4YmY0MCwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKKwkweDcwMTIsIDB4MDgwYywgMHhiMWE3LCAweDAwZGUsIDB4MDA5ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwKKwkweDYwMWMsIDB4ZDA4NCwgMHgxOTBjLCAweDFhZDMsIDB4MGM2MCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywKKwkweDY2ZTYsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgyMGE5LCAweDAwMDQsIDB4MjAxOSwKKwkweDE4MDUsIDB4MjAxMSwgMHgwMjc2LCAweDA4MGMsIDB4YzIwZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwKIAkweDAxNWUsIDB4OTAwNSwgMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgwMGM2LCAweDAwODYsIDB4MDA3NiwKIAkweDAwNjYsIDB4MDBiNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyNzQwLCAweDIwNjEsIDB4MWRkYywKLQkweDIwNzksIDB4MDAwMSwgMHg4ZmZmLCAweDA5MDQsIDB4ZTY3ZiwgMHgyMDcxLCAweDE4MDAsIDB4NzY1NCwKLQkweDcwNzQsIDB4ODAwMSwgMHg5NjAyLCAweDFhMDQsIDB4ZTY3ZiwgMHg4OGZmLCAweDAxMjAsIDB4MjgwMCwKLQkweDljMDYsIDB4MTVhMCwgMHgyMDc4LCAweDA4MGMsIDB4ZTdjNiwgMHgwNTgwLCAweDI0MDAsIDB4OWMwNiwKKwkweDIwNzksIDB4MDAwMSwgMHg4ZmZmLCAweDA5MDQsIDB4ZTk3NywgMHgyMDcxLCAweDE4MDAsIDB4NzY1NCwKKwkweDcwNzQsIDB4ODAwMSwgMHg5NjAyLCAweDFhMDQsIDB4ZTk3NywgMHg4OGZmLCAweDAxMjAsIDB4MjgwMCwKKwkweDljMDYsIDB4MTVhMCwgMHgyMDc4LCAweDA4MGMsIDB4ZWFiZSwgMHgwNTgwLCAweDI0MDAsIDB4OWMwNiwKIAkweDA1NjgsIDB4NjcyMCwgMHg5Nzg2LCAweDAwMDYsIDB4MTU0OCwgMHg5Nzg2LCAweDAwMDcsIDB4MDUzMCwKIAkweDg4ZmYsIDB4MTE1MCwgMHhkNThjLCAweDExMTgsIDB4NjAxMCwgMHg5YjA2LCAweDExZjgsIDB4ZDU4NCwKIAkweDAxMTgsIDB4NjA1YywgMHg5MTA2LCAweDExZDAsIDB4MDA5NiwgMHg2MDFjLCAweGQwODQsIDB4MDE0MCwKLQkweDA4MGMsIDB4ZTlmMCwgMHgwODBjLCAweGQzNzUsIDB4MDgwYywgMHgxYWYwLCAweDYwMjMsIDB4MDAwNywKLQkweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGNjMzMsIDB4MDEyMCwgMHgwMDQ2LCAweDA4MGMsIDB4ZTczOCwKLQkweDAwNGUsIDB4MDA5ZSwgMHgwODBjLCAweGFmODksIDB4ODhmZiwgMHgxMTk4LCAweDljZTAsIDB4MDAxYywKLQkweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDljMDIsIDB4MTIxMCwgMHgwODA0LCAweGU2MzIsIDB4OTAwNiwKKwkweDA4MGMsIDB4ZWNlMSwgMHgwODBjLCAweGQ2NWQsIDB4MDgwYywgMHgxYWQzLCAweDYwMjMsIDB4MDAwNywKKwkweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGNmMWIsIDB4MDEyMCwgMHgwMDQ2LCAweDA4MGMsIDB4ZWEzMCwKKwkweDAwNGUsIDB4MDA5ZSwgMHgwODBjLCAweGIxYTcsIDB4ODhmZiwgMHgxMTk4LCAweDljZTAsIDB4MDAxYywKKwkweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDljMDIsIDB4MTIxMCwgMHgwODA0LCAweGU5MmEsIDB4OTAwNiwKIAkweDAxMmUsIDB4MDBiZSwgMHgwMDZlLCAweDAwN2UsIDB4MDA4ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDBmZSwKLQkweDAwMDUsIDB4OThjNSwgMHgwMDAxLCAweDBjYTAsIDB4MDgwYywgMHhhYWY3LCAweDAwYjYsIDB4MDA3NiwKKwkweDAwMDUsIDB4OThjNSwgMHgwMDAxLCAweDBjYTAsIDB4MDgwYywgMHhhY2ZjLCAweDAwYjYsIDB4MDA3NiwKIAkweDAwNTYsIDB4MDA4NiwgMHg5MDQ2LCAweDIwMjksIDB4MDAwMSwgMHgyYzIwLCAweDIwMTksIDB4MDAwMiwKLQkweDYyMTAsIDB4MjI1OCwgMHgwMDk2LCAweDkwNGUsIDB4MDgwYywgMHhhNDYyLCAweDAwOWUsIDB4MDA4ZSwKLQkweDkwM2UsIDB4MDgwYywgMHhhNTBkLCAweDA4MGMsIDB4ZTYyMywgMHgwMDVlLCAweDAwN2UsIDB4MDBiZSwKLQkweDA4MGMsIDB4YWIxMywgMHgwMDA1LCAweDA4MGMsIDB4YWFmNywgMHgwMGI2LCAweDAwNDYsIDB4MDA1NiwKKwkweDYyMTAsIDB4MjI1OCwgMHgwMDk2LCAweDkwNGUsIDB4MDgwYywgMHhhNjY3LCAweDAwOWUsIDB4MDA4ZSwKKwkweDkwM2UsIDB4MDgwYywgMHhhNzEyLCAweDA4MGMsIDB4ZTkxYiwgMHgwMDVlLCAweDAwN2UsIDB4MDBiZSwKKwkweDA4MGMsIDB4YWQxOCwgMHgwMDA1LCAweDA4MGMsIDB4YWNmYywgMHgwMGI2LCAweDAwNDYsIDB4MDA1NiwKIAkweDAwNzYsIDB4MDBjNiwgMHgwMTU2LCAweDJjMjAsIDB4MjEyOCwgMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwKLQkweDAwMTYsIDB4MDAzNiwgMHgwODBjLCAweDY3ODMsIDB4MTE4MCwgMHgwMDU2LCAweDAwODYsIDB4OTA0NiwKLQkweDI1MDgsIDB4MjAyOSwgMHgwMDAxLCAweDAwOTYsIDB4OTA0ZSwgMHgwODBjLCAweGE0NjIsIDB4MDA5ZSwKLQkweDAwOGUsIDB4OTAzZSwgMHgwODBjLCAweGE1MGQsIDB4MDA1ZSwgMHgwMDNlLCAweDAwMWUsIDB4ODEwOCwKLQkweDFmMDQsIDB4ZTZiOCwgMHgwMDM2LCAweDI1MDgsIDB4MjAyOSwgMHgwMDAzLCAweDA4MGMsIDB4ZTYyMywKKwkweDAwMTYsIDB4MDAzNiwgMHgwODBjLCAweDY3YjQsIDB4MTE4MCwgMHgwMDU2LCAweDAwODYsIDB4OTA0NiwKKwkweDI1MDgsIDB4MjAyOSwgMHgwMDAxLCAweDAwOTYsIDB4OTA0ZSwgMHgwODBjLCAweGE2NjcsIDB4MDA5ZSwKKwkweDAwOGUsIDB4OTAzZSwgMHgwODBjLCAweGE3MTIsIDB4MDA1ZSwgMHgwMDNlLCAweDAwMWUsIDB4ODEwOCwKKwkweDFmMDQsIDB4ZTliMCwgMHgwMDM2LCAweDI1MDgsIDB4MjAyOSwgMHgwMDAzLCAweDA4MGMsIDB4ZTkxYiwKIAkweDAwM2UsIDB4MDE1ZSwgMHgwMGNlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLCAweDAwYmUsIDB4MDgwYywKLQkweGFiMTMsIDB4MDAwNSwgMHgwODBjLCAweGFhZjcsIDB4MDBiNiwgMHgwMDc2LCAweDAwNTYsIDB4NjIxMCwKKwkweGFkMTgsIDB4MDAwNSwgMHgwODBjLCAweGFjZmMsIDB4MDBiNiwgMHgwMDc2LCAweDAwNTYsIDB4NjIxMCwKIAkweDIyNTgsIDB4MDA4NiwgMHg5MDQ2LCAweDIwMjksIDB4MDAwMSwgMHgyMDE5LCAweDAwNDgsIDB4MDA5NiwKLQkweDkwNGUsIDB4MDgwYywgMHhhNDYyLCAweDAwOWUsIDB4MDA4ZSwgMHg5MDNlLCAweDA4MGMsIDB4YTUwZCwKLQkweDJjMjAsIDB4MDgwYywgMHhlNjIzLCAweDAwNWUsIDB4MDA3ZSwgMHgwMGJlLCAweDA4MGMsIDB4YWIxMywKLQkweDAwMDUsIDB4MDgwYywgMHhhYWY3LCAweDAwYjYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDBjNiwKKwkweDkwNGUsIDB4MDgwYywgMHhhNjY3LCAweDAwOWUsIDB4MDA4ZSwgMHg5MDNlLCAweDA4MGMsIDB4YTcxMiwKKwkweDJjMjAsIDB4MDgwYywgMHhlOTFiLCAweDAwNWUsIDB4MDA3ZSwgMHgwMGJlLCAweDA4MGMsIDB4YWQxOCwKKwkweDAwMDUsIDB4MDgwYywgMHhhY2ZjLCAweDAwYjYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDBjNiwKIAkweDAxNTYsIDB4MmMyMCwgMHgyMGE5LCAweDA4MDAsIDB4OTAwZSwgMHgwMDE2LCAweDAwMzYsIDB4MDgwYywKLQkweDY3ODMsIDB4MTE5MCwgMHgwMDg2LCAweDkwNDYsIDB4MjgyOCwgMHgwMDQ2LCAweDIwMjEsIDB4MDAwMSwKLQkweDA4MGMsIDB4ZTlkNCwgMHgwMDRlLCAweDAwOTYsIDB4OTA0ZSwgMHgwODBjLCAweGE0NjIsIDB4MDA5ZSwKLQkweDAwOGUsIDB4OTAzZSwgMHgwODBjLCAweGE1MGQsIDB4MDAzZSwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwKLQkweGU3MGQsIDB4MDAzNiwgMHgyMDI5LCAweDAwMDIsIDB4MDgwYywgMHhlNjIzLCAweDAwM2UsIDB4MDE1ZSwKLQkweDAwY2UsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDBiZSwgMHgwODBjLCAweGFiMTMsIDB4MDAwNSwKLQkweDAwMTYsIDB4MDBmNiwgMHgwODBjLCAweGNjMzEsIDB4MDE5OCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwKKwkweDY3YjQsIDB4MTE5MCwgMHgwMDg2LCAweDkwNDYsIDB4MjgyOCwgMHgwMDQ2LCAweDIwMjEsIDB4MDAwMSwKKwkweDA4MGMsIDB4ZWNjNSwgMHgwMDRlLCAweDAwOTYsIDB4OTA0ZSwgMHgwODBjLCAweGE2NjcsIDB4MDA5ZSwKKwkweDAwOGUsIDB4OTAzZSwgMHgwODBjLCAweGE3MTIsIDB4MDAzZSwgMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwKKwkweGVhMDUsIDB4MDAzNiwgMHgyMDI5LCAweDAwMDIsIDB4MDgwYywgMHhlOTFiLCAweDAwM2UsIDB4MDE1ZSwKKwkweDAwY2UsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDBiZSwgMHgwODBjLCAweGFkMTgsIDB4MDAwNSwKKwkweDAwMTYsIDB4MDBmNiwgMHgwODBjLCAweGNmMTksIDB4MDE5OCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwKIAkweDkwODYsIDB4MDA0NiwgMHgwMTgwLCAweGE4MDAsIDB4OTA3ZCwgMHgwMTM4LCAweGE4MDMsIDB4MDAwMCwKLQkweGFiODIsIDB4MDgwYywgMHg2ZjExLCAweDJmNDgsIDB4MGNiMCwgMHhhYjgyLCAweDA4MGMsIDB4NmYxMSwKKwkweGFiODIsIDB4MDgwYywgMHg3MDEyLCAweDJmNDgsIDB4MGNiMCwgMHhhYjgyLCAweDA4MGMsIDB4NzAxMiwKIAkweDAwZmUsIDB4MDAxZSwgMHgwMDA1LCAweGE4MDAsIDB4OTA3ZCwgMHgwMTMwLCAweGE4MDMsIDB4MDAwMCwKLQkweDA4MGMsIDB4NmYxMSwgMHgyZjQ4LCAweDBjYjgsIDB4MDgwYywgMHg2ZjExLCAweDBjODgsIDB4MDBlNiwKKwkweDA4MGMsIDB4NzAxMiwgMHgyZjQ4LCAweDBjYjgsIDB4MDgwYywgMHg3MDEyLCAweDBjODgsIDB4MDBlNiwKIAkweDAwNDYsIDB4MDAzNiwgMHgyMDYxLCAweDFkZGMsIDB4OTAwNSwgMHgxMTM4LCAweDIwNzEsIDB4MTgwMCwKIAkweDc0NTQsIDB4NzA3NCwgMHg4MDAxLCAweDk0MDIsIDB4MTJmOCwgMHgyMTAwLCAweDljMDYsIDB4MDE4OCwKIAkweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDAxNjgsIDB4NjAwOCwgMHg5MjA2LCAweDExNTAsIDB4NjMyMCwKQEAgLTcxOTMsMTU3ICs3Mjg4LDE1NyBAQAogCTB4MDE0MCwgMHg5Y2UwLCAweDAwMWMsIDB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxMjIwLAogCTB4MGMyMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwOCwgMHg5MDA2LCAweDAwM2UsIDB4MDA0ZSwgMHgwMGVlLAogCTB4MDAwNSwgMHg2MzFjLCAweGQzYzQsIDB4MWQ2OCwgMHgwYzMwLCAweDAwOTYsIDB4MDAwNiwgMHgwODBjLAotCTB4MTA0ZCwgMHgwMDBlLCAweDA5MGMsIDB4MGQ3OSwgMHhhYWUyLCAweGE4NjcsIDB4MDEwZCwgMHhhODhlLAotCTB4MDAyNiwgMHgyMDEwLCAweDA4MGMsIDB4Y2MyMSwgMHgyMDAxLCAweDAwMDAsIDB4MDEyMCwgMHgyMjAwLAorCTB4MTA1OSwgMHgwMDBlLCAweDA5MGMsIDB4MGQ4NSwgMHhhYWUyLCAweGE4NjcsIDB4MDEwZCwgMHhhODhlLAorCTB4MDAyNiwgMHgyMDEwLCAweDA4MGMsIDB4Y2YwOSwgMHgyMDAxLCAweDAwMDAsIDB4MDEyMCwgMHgyMjAwLAogCTB4OTA4MCwgMHgwMDE3LCAweDIwMDQsIDB4MDAyZSwgMHhhODdhLCAweDkxODYsIDB4MDAyMCwgMHgwMTEwLAotCTB4YThlMywgMHhmZmZmLCAweGE5ODYsIDB4YWM3NiwgMHhhODdmLCAweDAwMDAsIDB4MjAwMSwgMHgxOThmLAorCTB4YThlMywgMHhmZmZmLCAweGE5ODYsIDB4YWM3NiwgMHhhODdmLCAweDAwMDAsIDB4MjAwMSwgMHgxOThlLAogCTB4MjAwNCwgMHhhODgyLCAweDkwMDYsIDB4YTgwMiwgMHhhODZhLCAweGE4OGEsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgwODBjLCAweDZmMTEsIDB4MDEyZSwgMHgwMDllLCAweDAwMDUsIDB4NjcwMCwgMHg5Nzg2LAorCTB4ODAwMCwgMHgwODBjLCAweDcwMTIsIDB4MDEyZSwgMHgwMDllLCAweDAwMDUsIDB4NjcwMCwgMHg5Nzg2LAogCTB4MDAwMCwgMHgwMTU4LCAweDk3ODYsIDB4MDAwMSwgMHgwMTQwLCAweDk3ODYsIDB4MDAwYSwgMHgwMTI4LAogCTB4OTc4NiwgMHgwMDA5LCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBlNiwgMHg2MDEwLAogCTB4OTA3NSwgMHgwMTM4LCAweDAwYjYsIDB4MjA1OCwgMHhiOGEwLCAweDAwYmUsIDB4OTIwNiwgMHgwMGVlLAogCTB4MDAwNSwgMHg5MDg1LCAweDAwMDEsIDB4MGNkOCwgMHgwMDE2LCAweDYwMDQsIDB4OTA4ZSwgMHgwMDFlLAogCTB4MTFhMCwgMHg4MDA3LCAweDYxMzQsIDB4OTE4YywgMHgwMGZmLCAweDkxMDUsIDB4NjAzNiwgMHg2MDA3LAotCTB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDA1LCAweDIwMDEsIDB4MTk4OCwgMHgyMDA0LAotCTB4NjAxYSwgMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NDIwLCAweDAwMWUsIDB4MDAwNSwgMHhhMDAxLAorCTB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDA1LCAweDIwMDEsIDB4MTk4NywgMHgyMDA0LAorCTB4NjAxYSwgMHgyMDA5LCAweDgwMjAsIDB4MDgwYywgMHg5NjE3LCAweDAwMWUsIDB4MDAwNSwgMHhhMDAxLAogCTB4YTAwMSwgMHgwMDA1LCAweDYwMjQsIDB4ZDBlNCwgMHgwMTU4LCAweGQwY2MsIDB4MDExOCwgMHgwODBjLAotCTB4Y2Y3ZiwgMHgwMDMwLCAweDA4MGMsIDB4ZTlmMCwgMHgwODBjLCAweDhhYjIsIDB4MDgwYywgMHhhZjRlLAotCTB4MDAwNSwgMHg5MjgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDg0LCAweDAwMGYsIDB4MDAwMiwgMHhlODI1LAotCTB4ZTgyNSwgMHhlODI1LCAweGU4MjcsIDB4ZTgyNSwgMHhlODI3LCAweGU4MjcsIDB4ZTgyNSwgMHhlODI3LAotCTB4ZTgyNSwgMHhlODI1LCAweGU4MjUsIDB4ZTgyNSwgMHhlODI1LCAweDkwMDYsIDB4MDAwNSwgMHg5MDg1LAorCTB4ZDI2NywgMHgwMDMwLCAweDA4MGMsIDB4ZWNlMSwgMHgwODBjLCAweDhjMTksIDB4MDgwYywgMHhiMTZjLAorCTB4MDAwNSwgMHg5MjgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDg0LCAweDAwMGYsIDB4MDAwMiwgMHhlYjFkLAorCTB4ZWIxZCwgMHhlYjFkLCAweGViMWYsIDB4ZWIxZCwgMHhlYjFmLCAweGViMWYsIDB4ZWIxZCwgMHhlYjFmLAorCTB4ZWIxZCwgMHhlYjFkLCAweGViMWQsIDB4ZWIxZCwgMHhlYjFkLCAweDkwMDYsIDB4MDAwNSwgMHg5MDg1LAogCTB4MDAwMSwgMHgwMDA1LCAweDkyODAsIDB4MDAwOCwgMHgyMDA0LCAweDkwODQsIDB4MDAwZiwgMHgwMDAyLAotCTB4ZTgzZSwgMHhlODNlLCAweGU4M2UsIDB4ZTgzZSwgMHhlODNlLCAweGU4M2UsIDB4ZTg0YiwgMHhlODNlLAotCTB4ZTgzZSwgMHhlODNlLCAweGU4M2UsIDB4ZTgzZSwgMHhlODNlLCAweGU4M2UsIDB4NjAwNywgMHgwMDNiLAorCTB4ZWIzNiwgMHhlYjM2LCAweGViMzYsIDB4ZWIzNiwgMHhlYjM2LCAweGViMzYsIDB4ZWI0MywgMHhlYjM2LAorCTB4ZWIzNiwgMHhlYjM2LCAweGViMzYsIDB4ZWIzNiwgMHhlYjM2LCAweGViMzYsIDB4NjAwNywgMHgwMDNiLAogCTB4NjAyZiwgMHgwMDA5LCAweDYwMTcsIDB4MmEwMCwgMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHg4MDIwLAotCTB4MDgwYywgMHg5NDIwLCAweDAwMDUsIDB4MDA5NiwgMHgwMGM2LCAweDIyNjAsIDB4MDgwYywgMHhlOWYwLAorCTB4MDgwYywgMHg5NjE3LCAweDAwMDUsIDB4MDA5NiwgMHgwMGM2LCAweDIyNjAsIDB4MDgwYywgMHhlY2UxLAogCTB4NjA0YiwgMHgwMDAwLCAweDYwMjQsIDB4YzBmNCwgMHhjMGU0LCAweDYwMjYsIDB4NjAzYiwgMHgwMDAwLAotCTB4MDBjZSwgMHgwMGQ2LCAweDIyNjgsIDB4OTE4NiwgMHgwMDA3LCAweDE5MDQsIDB4ZThhNCwgMHg2ODE0LAorCTB4MDBjZSwgMHgwMGQ2LCAweDIyNjgsIDB4OTE4NiwgMHgwMDA3LCAweDE5MDQsIDB4ZWI5YywgMHg2ODE0LAogCTB4OTAwNSwgMHgwMTM4LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDExMTgsIDB4MDBkZSwgMHgwMDllLAogCTB4MDhhOCwgMHg2MDA3LCAweDAwM2EsIDB4NjAwMywgMHgwMDAxLCAweDIwMDksIDB4ODAyMCwgMHgwODBjLAotCTB4OTQyMCwgMHgwMGM2LCAweDJkNjAsIDB4NjEwMCwgMHg5MTg2LCAweDAwMDIsIDB4MTkwNCwgMHhlOTFiLAotCTB4NjAxNCwgMHg5MDA1LCAweDExMzgsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDcsIDB4MTkwYywgMHgwZDc5LAotCTB4MDgwNCwgMHhlOTFiLCAweDIwNDgsIDB4MDgwYywgMHhjYzMzLCAweDExMzAsIDB4MDAyOCwgMHgyMDQ4LAorCTB4OTYxNywgMHgwMGM2LCAweDJkNjAsIDB4NjEwMCwgMHg5MTg2LCAweDAwMDIsIDB4MTkwNCwgMHhlYzBjLAorCTB4NjAxNCwgMHg5MDA1LCAweDExMzgsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDcsIDB4MTkwYywgMHgwZDg1LAorCTB4MDgwNCwgMHhlYzBjLCAweDIwNDgsIDB4MDgwYywgMHhjZjFiLCAweDExMzAsIDB4MDAyOCwgMHgyMDQ4LAogCTB4YTgwMCwgMHg5MDA1LCAweDFkZTAsIDB4MjkwMCwgMHgyMDQ4LCAweGE4N2MsIDB4OTA4NCwgMHgwMDAzLAogCTB4OTA4NiwgMHgwMDAyLCAweDExNjgsIDB4YTg3YywgMHhjMGRjLCAweGMwZjQsIDB4YTg3ZSwgMHhhODgwLAotCTB4YzBmYywgMHhhODgyLCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGUwY2IsIDB4MDgwNCwgMHhlOTFiLAotCTB4MjAwOSwgMHgwMDQxLCAweDA4MDQsIDB4ZTkxNSwgMHg5MTg2LCAweDAwMDUsIDB4MTVhMCwgMHg2ODE0LAotCTB4MjA0OCwgMHhhODdjLCAweGQwYmMsIDB4MTEyMCwgMHgwMGRlLCAweDAwOWUsIDB4MDgwNCwgMHhlODNlLAotCTB4ZDBiNCwgMHgwMTI4LCAweGQwZmMsIDB4MDkwYywgMHgwZDc5LCAweDA4MDQsIDB4ZTg1ZiwgMHg2MDA3LAotCTB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTQyMCwgMHgwMGM2LAorCTB4YzBmYywgMHhhODgyLCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGUzYjUsIDB4MDgwNCwgMHhlYzBjLAorCTB4MjAwOSwgMHgwMDQxLCAweDA4MDQsIDB4ZWMwNiwgMHg5MTg2LCAweDAwMDUsIDB4MTVhMCwgMHg2ODE0LAorCTB4MjA0OCwgMHhhODdjLCAweGQwYmMsIDB4MTEyMCwgMHgwMGRlLCAweDAwOWUsIDB4MDgwNCwgMHhlYjM2LAorCTB4ZDBiNCwgMHgwMTI4LCAweGQwZmMsIDB4MDkwYywgMHgwZDg1LCAweDA4MDQsIDB4ZWI1NywgMHg2MDA3LAorCTB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTYxNywgMHgwMGM2LAogCTB4MmQ2MCwgMHg2MTAwLCAweDkxODYsIDB4MDAwMiwgMHgwMTIwLCAweDkxODYsIDB4MDAwNCwgMHgxOTA0LAotCTB4ZTkxYiwgMHg2ODE0LCAweDIwNDgsIDB4YTk3YywgMHhjMWY0LCAweGMxZGMsIDB4YTk3ZSwgMHhhOTgwLAotCTB4YzFmYywgMHhjMWJjLCAweGE5ODIsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTdhMSwgMHgwMGZlLAotCTB4MjAwOSwgMHgwMDQyLCAweDA0ZDAsIDB4MDAzNiwgMHgwODBjLCAweDEwNGQsIDB4MDkwYywgMHgwZDc5LAorCTB4ZWMwYywgMHg2ODE0LCAweDIwNDgsIDB4YTk3YywgMHhjMWY0LCAweGMxZGMsIDB4YTk3ZSwgMHhhOTgwLAorCTB4YzFmYywgMHhjMWJjLCAweGE5ODIsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTdhZCwgMHgwMGZlLAorCTB4MjAwOSwgMHgwMDQyLCAweDA0OTgsIDB4MDAzNiwgMHgwODBjLCAweDEwNTksIDB4MDkwYywgMHgwZDg1LAogCTB4YTg2NywgMHgwMTBkLCAweDkwMDYsIDB4YTgwMiwgMHhhODZhLCAweGE4OGEsIDB4MmQxOCwgMHhhYjhlLAogCTB4YTg4NywgMHgwMDQ1LCAweDJjMDAsIDB4YTg5MiwgMHg2MDM4LCAweGE4YTIsIDB4MjM2MCwgMHg2MDI0LAogCTB4YzBkZCwgMHg2MDI2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4YTAsIDB4MDBiZSwgMHgyMDA0LAogCTB4NjM1YywgMHhhYjdhLCAweGE4NzYsIDB4OTAwNiwgMHhhODdlLCAweGE4ODIsIDB4YWQ5YSwgMHhhZTk2LAotCTB4YTg5ZiwgMHgwMDAxLCAweDA4MGMsIDB4NmYxMSwgMHgyMDE5LCAweDAwNDUsIDB4NjAwOCwgMHgyMDY4LAotCTB4MDgwYywgMHhlMjhlLCAweDJkMDAsIDB4NjAwYSwgMHg2MDIzLCAweDAwMDYsIDB4NjAwMywgMHgwMDA3LAotCTB4OTAxZSwgMHg2MzFhLCAweDYzNGEsIDB4MDAzZSwgMHgwMDM4LCAweDYwNGIsIDB4MDAwMCwgMHg2MDAzLAotCTB4MDAwNywgMHgwODBjLCAweGUwY2IsIDB4MDBjZSwgMHgwMGRlLCAweDAwOWUsIDB4MDAwNSwgMHg5MTg2LAotCTB4MDAxMywgMHgxMTI4LCAweDYwMDQsIDB4OTA4MiwgMHgwMDg1LCAweDIwMDgsIDB4MDBjMiwgMHg5MTg2LAotCTB4MDAyNywgMHgxMTc4LCAweDA4MGMsIDB4OTdmNiwgMHgwMDM2LCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LAotCTB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4ZTczOCwgMHgwMDllLCAweDAwM2UsIDB4MDgwYywgMHg5OGJjLAotCTB4MDAwNSwgMHg5MTg2LCAweDAwMTQsIDB4MGQ3MCwgMHgwODBjLCAweGIwMDksIDB4MDAwNSwgMHhlOTRlLAotCTB4ZTk0YywgMHhlOTRjLCAweGU5NGMsIDB4ZTk0YywgMHhlOTRjLCAweGU5NGUsIDB4ZTk0YywgMHhlOTRjLAotCTB4ZTk0YywgMHhlOTRjLCAweGU5NGMsIDB4ZTk0YywgMHgwODBjLCAweDBkNzksIDB4NjAwMywgMHgwMDBjLAotCTB4MDgwYywgMHg5OGJjLCAweDAwMDUsIDB4OTE4MiwgMHgwMDkyLCAweDEyMjAsIDB4OTE4MiwgMHgwMDg1LAotCTB4MDIwOCwgMHgwMDFhLCAweDA4MGMsIDB4YjAwOSwgMHgwMDA1LCAweGU5NmEsIDB4ZTk2YSwgMHhlOTZhLAotCTB4ZTk2YSwgMHhlOTZjLCAweGU5OGMsIDB4ZTk2YSwgMHhlOTZhLCAweGU5NmEsIDB4ZTk2YSwgMHhlOTZhLAotCTB4ZTk2YSwgMHhlOTZhLCAweDA4MGMsIDB4MGQ3OSwgMHgwMGQ2LCAweDJjNjgsIDB4MDgwYywgMHhhZWY4LAotCTB4MDFiMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDIwMDksIDB4MDI2ZSwgMHgyMTBjLAotCTB4NjEzYSwgMHgyMDA5LCAweDAyNmYsIDB4MjEwYywgMHg2MTNlLCAweDYwMGIsIDB4ZmZmZiwgMHg2OTEwLAotCTB4NjExMiwgMHg2MDIzLCAweDAwMDQsIDB4MjAwOSwgMHg4MDIwLCAweDA4MGMsIDB4OTQyMCwgMHgyZDYwLAotCTB4MDgwYywgMHhhZjRlLCAweDAwZGUsIDB4MDAwNSwgMHgwODBjLCAweGFmNGUsIDB4MDAwNSwgMHgwMGU2LAotCTB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwZWMsIDB4MDBlZSwgMHgwMDA1LAotCTB4MjAwOSwgMHgxODY3LCAweDIxMGMsIDB4ZDFlYywgMHgwNWIwLCAweDYwMDMsIDB4MDAwMiwgMHg2MDI0LAotCTB4YzBlNSwgMHg2MDI2LCAweGQwY2MsIDB4MDE1MCwgMHgyMDAxLCAweDE5ODksIDB4MjAwNCwgMHg2MDRhLAotCTB4MjAwOSwgMHgxODY3LCAweDIxMGMsIDB4ZDFmNCwgMHgxNTIwLCAweDAwYTAsIDB4MjAwOSwgMHgxODY3LAotCTB4MjEwYywgMHhkMWY0LCAweDAxMjgsIDB4NjAyNCwgMHhjMGU0LCAweDYwMjYsIDB4OTAwNiwgMHgwMGQ4LAotCTB4MjAwMSwgMHgxOTg5LCAweDIwMGMsIDB4MjAwMSwgMHgxOTg3LCAweDIwMDQsIDB4OTEwMCwgMHg5MDgwLAotCTB4MDAwYSwgMHg2MDRhLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4YmMsIDB4MDBiZSwgMHgwMDA4LAotCTB4MjEwNCwgMHg5MDA1LCAweDAxMTgsIDB4OTA4OCwgMHgwMDAzLCAweDBjZDAsIDB4MmMwYSwgMHg2MDBmLAotCTB4MDAwMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDE2LCAweDAwYzYsIDB4MDBlNiwgMHg2MTVjLAotCTB4YjhiYywgMHgyMDYwLCAweDhjZmYsIDB4MDE4MCwgMHg4NGZmLCAweDExMTgsIDB4NjA1YywgMHg5MTA2LAotCTB4MTEzOCwgMHg2MDBjLCAweDIwNzIsIDB4MDgwYywgMHg4YWIyLCAweDA4MGMsIDB4YWY0ZSwgMHgwMDEwLAotCTB4OWNmMCwgMHgwMDAzLCAweDJlNjQsIDB4MGM3MCwgMHgwMGVlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LAotCTB4MDBkNiwgMHgwMGI2LCAweDYwMTAsIDB4MjA1OCwgMHhiOGJjLCAweDkwNmQsIDB4MDEzMCwgMHg5YzA2LAotCTB4MDExMCwgMHg2ODBjLCAweDBjZDAsIDB4NjAwYywgMHg2ODBlLCAweDAwYmUsIDB4MDBkZSwgMHgwMDA1LAotCTB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4MjAxMSwgMHgxODJjLCAweDIyMDQsIDB4OTA4NCwgMHgwMGZmLAotCTB4MjAxOSwgMHgwMjZlLCAweDIzMzQsIDB4OTZiNCwgMHgwMGZmLCAweDk2MzYsIDB4MTUwOCwgMHg4MzE4LAotCTB4MjMzNCwgMHgyMjA0LCAweDkwODQsIDB4ZmYwMCwgMHg5NjM2LCAweDExZDAsIDB4MjAxMSwgMHgwMjcwLAotCTB4MjBhOSwgMHgwMDA0LCAweDYwMTAsIDB4MDA5NiwgMHgyMDQ4LCAweDIwMTksIDB4MDAwYSwgMHgwODBjLAotCTB4YmY1NCwgMHgwMDllLCAweDExNjgsIDB4MjAxMSwgMHgwMjc0LCAweDIwYTksIDB4MDAwNCwgMHg2MDEwLAotCTB4MDA5NiwgMHgyMDQ4LCAweDIwMTksIDB4MDAwNiwgMHgwODBjLCAweGJmNTQsIDB4MDA5ZSwgMHgxMTAwLAotCTB4MDE1ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLAotCTB4NjEwYiwgMHgwODBjLCAweDMwYzgsIDB4MDBlZSwgMHgwMDA1LCAweDAwOTYsIDB4MDAyNiwgMHgwODBjLAotCTB4MTA0ZCwgMHgwOTBjLCAweDBkNzksIDB4YTg1YywgMHg5MDgwLCAweDAwMWEsIDB4MjBhMCwgMHgyMGE5LAotCTB4MDAwYywgMHhhODYwLCAweDIwZTgsIDB4OTAwNiwgMHg0MDA0LCAweDkxODYsIDB4MDA0NiwgMHgxMTE4LAotCTB4YTg2NywgMHgwMTM2LCAweDAwMzgsIDB4YTg2NywgMHgwMTM4LCAweDkxODYsIDB4MDA0MSwgMHgwMTEwLAotCTB4YTg3YiwgMHgwMDAxLCAweDcwMzgsIDB4OTA4NCwgMHhmZjAwLCAweDcyNDAsIDB4OTI5NCwgMHhmZjAwLAotCTB4ODAwNywgMHg5MjE1LCAweGFhOWEsIDB4OTE4NiwgMHgwMDQ2LCAweDExNjgsIDB4NzAzOCwgMHg5MDg0LAotCTB4MDBmZiwgMHg3MjNjLCAweDkyOTQsIDB4ZmYwMCwgMHg5MjE1LCAweGFhOWUsIDB4NzIzYywgMHg5Mjk0LAotCTB4MDBmZiwgMHhhYWEyLCAweDAwNjAsIDB4NzA0MCwgMHg5MDg0LCAweDAwZmYsIDB4NzI0NCwgMHg5Mjk0LAotCTB4ZmYwMCwgMHg5MjE1LCAweGFhOWUsIDB4NzI0NCwgMHg5Mjk0LCAweDAwZmYsIDB4YWFhMiwgMHg5MTg2LAotCTB4MDA0NiwgMHgxMTE4LCAweDllOTAsIDB4MDAxMiwgMHgwMDEwLCAweDllOTAsIDB4MDAxYSwgMHgyMjA0LAotCTB4ODAwNywgMHhhOGE2LCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YWEsIDB4ODIxMCwgMHgyMjA0LAotCTB4ODAwNywgMHhhOGFlLCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YjIsIDB4ODIxMCwgMHg5MTg2LAotCTB4MDA0NiwgMHgxMWI4LCAweDllOTAsIDB4MDAxNiwgMHgyMjA0LCAweDgwMDcsIDB4YThiNiwgMHg4MjEwLAotCTB4MjIwNCwgMHg4MDA3LCAweGE4YmEsIDB4ODIxMCwgMHgyMjA0LCAweDgwMDcsIDB4YThiZSwgMHg4MjEwLAotCTB4MjIwNCwgMHg4MDA3LCAweGE4YzIsIDB4ODIxMCwgMHgyMDExLCAweDAyMDUsIDB4MjAxMywgMHgwMDAxLAotCTB4MDBiMCwgMHg5ZTkwLCAweDAwMWUsIDB4MjIwNCwgMHg4MDA3LCAweGE4YjYsIDB4ODIxMCwgMHgyMjA0LAotCTB4ODAwNywgMHhhOGJhLCAweDIwMTEsIDB4MDIwNSwgMHgyMDEzLCAweDAwMDEsIDB4MjAxMSwgMHgwMjYwLAotCTB4MjIwNCwgMHg4MDA3LCAweGE4YmUsIDB4ODIxMCwgMHgyMjA0LCAweDgwMDcsIDB4YThjMiwgMHg5MTg2LAotCTB4MDA0NiwgMHgxMTE4LCAweDIwMTEsIDB4MDI2MiwgMHgwMDEwLCAweDIwMTEsIDB4MDI2YSwgMHgwMTQ2LAotCTB4MDFkNiwgMHgwMDM2LCAweDIwYTksIDB4MDAwMSwgMHgyMDE5LCAweDAwMDgsIDB4YTg2MCwgMHgyMGU4LAotCTB4YTg1YywgMHg5MDgwLCAweDAwMzEsIDB4MjBhMCwgMHgyMjA0LCAweDgwMDcsIDB4NDAwNCwgMHg4MjEwLAotCTB4ODMxOSwgMHgxZGQwLCAweDAwM2UsIDB4MDFjZSwgMHgwMTNlLCAweDIwMTEsIDB4MDIwNSwgMHgyMDEzLAotCTB4MDAwMCwgMHgwMDJlLCAweDA4MGMsIDB4NmYxMSwgMHgwMDllLCAweDAwMDUsIDB4MDBlNiwgMHg2MDEwLAotCTB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGZjLCAweDAxMDgsIDB4MDAxMSwgMHgwMGVlLAotCTB4MDAwNSwgMHhhODgwLCAweGMwZTUsIDB4YTg4MiwgMHgwMDA1LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LAotCTB4MDA3NiwgMHgwMDY2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDI2LCAweDAwMTYsIDB4MDEyNiwgMHgyMDkxLAotCTB4ODAwMCwgMHgyMDI5LCAweDE5ZjUsIDB4MjUyYywgMHgyMDIxLCAweDE5ZmMsIDB4MjQyNCwgMHgyMDYxLAotCTB4MWRkYywgMHgyMDcxLCAweDE4MDAsIDB4NzY1NCwgMHg3MDc0LCAweDk2MDYsIDB4MDU3OCwgMHg2NzIwLAotCTB4OTc4NiwgMHgwMDAxLCAweDAxMTgsIDB4OTc4NiwgMHgwMDA4LCAweDE1MDAsIDB4MjUwMCwgMHg5YzA2LAotCTB4MDFlOCwgMHgyNDAwLCAweDljMDYsIDB4MDFkMCwgMHgwODBjLCAweGU3YzYsIDB4MDFiOCwgMHgwODBjLAotCTB4ZTdkNiwgMHgxMWEwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDA0LCAweDExMjAsIDB4MDAxNiwgMHgwODBjLAotCTB4MWFmMCwgMHgwMDFlLCAweDA4MGMsIDB4Y2UzOSwgMHgxMTEwLCAweDA4MGMsIDB4MzMyYSwgMHgwODBjLAotCTB4Y2U0YSwgMHgxMTEwLCAweDA4MGMsIDB4YjkzYywgMHgwODBjLCAweGFmODksIDB4OWNlMCwgMHgwMDFjLAotCTB4MjAwMSwgMHgxODFhLCAweDIwMDQsIDB4OWMwMiwgMHgxMjA4LCAweDA4NTgsIDB4MDEyZSwgMHgwMDFlLAotCTB4MDAyZSwgMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLAotCTB4MDAwNSwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMGRjLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLAotCTB4MTgzNywgMHgyMDA0LCAweGQwOWMsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAzNiwgMHgwMDQ2LAotCTB4MDgwYywgMHhkMzVkLCAweDAxNjgsIDB4MjAxOSwgMHhmZmZmLCAweDkwMDUsIDB4MDEyOCwgMHg2MDEwLAotCTB4MDBiNiwgMHgyMDU4LCAweGJiYTAsIDB4MDBiZSwgMHgyMDIxLCAweDAwMDQsIDB4MDgwYywgMHg0ZGRmLAotCTB4MDA0ZSwgMHgwMDNlLCAweDAwMGUsIDB4MDAwNSwgMHg2MDA0LCAweDkwODYsIDB4MDAwMSwgMHgxMTI4LAotCTB4MDgwYywgMHhhNWRkLCAweDA4MGMsIDB4YWY4OSwgMHg5MDA2LCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LAotCTB4MDBiNiwgMHgwMDQ2LCAweDIwNjEsIDB4MWRkYywgMHgyMDcxLCAweDE4MDAsIDB4NzQ1NCwgMHg3MDc0LAotCTB4ODAwMSwgMHg5NDAyLCAweDEyZDgsIDB4MjEwMCwgMHg5YzA2LCAweDAxNjgsIDB4NjAwMCwgMHg5MDg2LAotCTB4MDAwMCwgMHgwMTQ4LCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDkyMDYsIDB4MTEyMCwgMHg2MDA0LAotCTB4OTA4NiwgMHgwMDAyLCAweDAxNDAsIDB4OWNlMCwgMHgwMDFjLCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LAotCTB4OWMwMiwgMHgxMjIwLCAweDBjNDAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMDRlLAotCTB4MDBiZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMGE0LAotCTB4MDE2MCwgMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMGE0LCAweDAxMzgsIDB4MjAwMSwgMHgxODQ4LAotCTB4MjAwNCwgMHhkMGE0LCAweDExMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4OTAwNiwgMHgwY2U4LAotCTB4MDEyNiwgMHgwMDA2LCAweDAwZTYsIDB4MDAxNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxODQwLAotCTB4ZDVhNCwgMHgwMTE4LCAweDcwMDQsIDB4ODAwMCwgMHg3MDA2LCAweGQ1YjQsIDB4MDExOCwgMHg3MDAwLAotCTB4ODAwMCwgMHg3MDAyLCAweGQ1YWMsIDB4MDE3OCwgMHgyNTAwLCAweDkwODQsIDB4MDAwNywgMHg5MDhlLAotCTB4MDAwMywgMHgwMTQ4LCAweDkwOGUsIDB4MDAwNCwgMHgwMTMwLCAweDkwOGUsIDB4MDAwNSwgMHgwMTE4LAotCTB4MjA3MSwgMHhmZmY2LCAweDAwODksIDB4MDAxZSwgMHgwMGVlLCAweDAwMGUsIDB4MDEyZSwgMHgwMDA1LAotCTB4MDEyNiwgMHgwMDA2LCAweDAwZTYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4ZmZlZSwgMHgwMDIxLAotCTB4MDBlZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgyZTA1LCAweDgwMDAsIDB4MjA3NywgMHgxMjIwLAotCTB4OGU3MCwgMHgyZTA1LCAweDgwMDAsIDB4MjA3NywgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhmZmVjLAotCTB4MGM5OSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweGZmZjAsIDB4MGM2OSwgMHgwMGVlLAotCTB4MDAwNSwgMHgwMTI2LCAweDAwMDYsIDB4MDBlNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxODQwLAotCTB4NzAxNCwgMHg4MDAwLCAweDcwMTYsIDB4MDBlZSwgMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgwMDAxLAotCTB4MDAwMiwgMHgwMDA0LCAweDAwMDgsIDB4MDAxMCwgMHgwMDIwLCAweDAwNDAsIDB4MDA4MCwgMHgwMTAwLAotCTB4MDIwMCwgMHgwNDAwLCAweDA4MDAsIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAsIDB4ODAwMCwgMHg3MTYzCisJMHhhODlmLCAweDAwMDEsIDB4MDgwYywgMHg3MDEyLCAweDIwMTksIDB4MDA0NSwgMHg2MDA4LCAweDIwNjgsCisJMHgwODBjLCAweGU1NzgsIDB4MmQwMCwgMHg2MDBhLCAweDAwM2UsIDB4MDAzOCwgMHg2MDRiLCAweDAwMDAsCisJMHg2MDAzLCAweDAwMDcsIDB4MDgwYywgMHhlM2I1LCAweDAwY2UsIDB4MDBkZSwgMHgwMDllLCAweDAwMDUsCisJMHg5MTg2LCAweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweDkwODIsIDB4MDA4NSwgMHgyMDA4LCAweDAwYzIsCisJMHg5MTg2LCAweDAwMjcsIDB4MTE3OCwgMHgwODBjLCAweDk5ZWQsIDB4MDAzNiwgMHgwMDk2LCAweDYwMTQsCisJMHgyMDQ4LCAweDIwMTksIDB4MDAwNCwgMHgwODBjLCAweGVhMzAsIDB4MDA5ZSwgMHgwMDNlLCAweDA4MGMsCisJMHg5YWIzLCAweDAwMDUsIDB4OTE4NiwgMHgwMDE0LCAweDBkNzAsIDB4MDgwYywgMHhiMjI3LCAweDAwMDUsCisJMHhlYzNmLCAweGVjM2QsIDB4ZWMzZCwgMHhlYzNkLCAweGVjM2QsIDB4ZWMzZCwgMHhlYzNmLCAweGVjM2QsCisJMHhlYzNkLCAweGVjM2QsIDB4ZWMzZCwgMHhlYzNkLCAweGVjM2QsIDB4MDgwYywgMHgwZDg1LCAweDYwMDMsCisJMHgwMDBjLCAweDA4MGMsIDB4OWFiMywgMHgwMDA1LCAweDkxODIsIDB4MDA5MiwgMHgxMjIwLCAweDkxODIsCisJMHgwMDg1LCAweDAyMDgsIDB4MDAxYSwgMHgwODBjLCAweGIyMjcsIDB4MDAwNSwgMHhlYzViLCAweGVjNWIsCisJMHhlYzViLCAweGVjNWIsIDB4ZWM1ZCwgMHhlYzdkLCAweGVjNWIsIDB4ZWM1YiwgMHhlYzViLCAweGVjNWIsCisJMHhlYzViLCAweGVjNWIsIDB4ZWM1YiwgMHgwODBjLCAweDBkODUsIDB4MDBkNiwgMHgyYzY4LCAweDA4MGMsCisJMHhiMTE2LCAweDAxYjAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAxZSwgMHgyMDA5LCAweDAyNmUsCisJMHgyMTBjLCAweDYxM2EsIDB4MjAwOSwgMHgwMjZmLCAweDIxMGMsIDB4NjEzZSwgMHg2MDBiLCAweGZmZmYsCisJMHg2OTEwLCAweDYxMTIsIDB4NjAyMywgMHgwMDA0LCAweDIwMDksIDB4ODAyMCwgMHgwODBjLCAweDk2MTcsCisJMHgyZDYwLCAweDA4MGMsIDB4YjE2YywgMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHhiMTZjLCAweDAwMDUsCisJMHgwMGU2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGVjLCAweDAwZWUsCisJMHgwMDA1LCAweDIwMDksIDB4MTg2NywgMHgyMTBjLCAweGQxZWMsIDB4MDViMCwgMHg2MDAzLCAweDAwMDIsCisJMHg2MDI0LCAweGMwZTUsIDB4NjAyNiwgMHhkMGNjLCAweDAxNTAsIDB4MjAwMSwgMHgxOTg4LCAweDIwMDQsCisJMHg2MDRhLCAweDIwMDksIDB4MTg2NywgMHgyMTBjLCAweGQxZjQsIDB4MTUyMCwgMHgwMGEwLCAweDIwMDksCisJMHgxODY3LCAweDIxMGMsIDB4ZDFmNCwgMHgwMTI4LCAweDYwMjQsIDB4YzBlNCwgMHg2MDI2LCAweDkwMDYsCisJMHgwMGQ4LCAweDIwMDEsIDB4MTk4OCwgMHgyMDBjLCAweDIwMDEsIDB4MTk4NiwgMHgyMDA0LCAweDkxMDAsCisJMHg5MDgwLCAweDAwMGEsIDB4NjA0YSwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGJjLCAweDAwYmUsCisJMHgwMDA4LCAweDIxMDQsIDB4OTAwNSwgMHgwMTE4LCAweDkwODgsIDB4MDAwMywgMHgwY2QwLCAweDJjMGEsCisJMHg2MDBmLCAweDAwMDAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAwZTYsCisJMHg2MTVjLCAweGI4YmMsIDB4MjA2MCwgMHg4Y2ZmLCAweDAxODAsIDB4ODRmZiwgMHgxMTE4LCAweDYwNWMsCisJMHg5MTA2LCAweDExMzgsIDB4NjAwYywgMHgyMDcyLCAweDA4MGMsIDB4OGMxOSwgMHgwODBjLCAweGIxNmMsCisJMHgwMDEwLCAweDljZjAsIDB4MDAwMywgMHgyZTY0LCAweDBjNzAsIDB4MDBlZSwgMHgwMGNlLCAweDAwMWUsCisJMHgwMDA1LCAweDAwZDYsIDB4MDBiNiwgMHg2MDEwLCAweDIwNTgsIDB4YjhiYywgMHg5MDZkLCAweDAxMzAsCisJMHg5YzA2LCAweDAxMTAsIDB4NjgwYywgMHgwY2QwLCAweDYwMGMsIDB4NjgwZSwgMHgwMGJlLCAweDAwZGUsCisJMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwMTEsIDB4MTgyYywgMHgyMjA0LCAweDkwODQsCisJMHgwMGZmLCAweDIwMTksIDB4MDI2ZSwgMHgyMzM0LCAweDk2YjQsIDB4MDBmZiwgMHg5NjM2LCAweDE1MDgsCisJMHg4MzE4LCAweDIzMzQsIDB4MjIwNCwgMHg5MDg0LCAweGZmMDAsIDB4OTYzNiwgMHgxMWQwLCAweDIwMTEsCisJMHgwMjcwLCAweDIwYTksIDB4MDAwNCwgMHg2MDEwLCAweDAwOTYsIDB4MjA0OCwgMHgyMDE5LCAweDAwMGEsCisJMHgwODBjLCAweGMyMjIsIDB4MDA5ZSwgMHgxMTY4LCAweDIwMTEsIDB4MDI3NCwgMHgyMGE5LCAweDAwMDQsCisJMHg2MDEwLCAweDAwOTYsIDB4MjA0OCwgMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhjMjIyLCAweDAwOWUsCisJMHgxMTAwLCAweDAxNWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsCisJMHgwODBjLCAweDYxMzAsIDB4MDgwYywgMHgzMGJmLCAweDAwZWUsIDB4MDAwNSwgMHgwMDk2LCAweDAwMjYsCisJMHgwODBjLCAweDEwNTksIDB4MDkwYywgMHgwZDg1LCAweGE4NWMsIDB4OTA4MCwgMHgwMDFhLCAweDIwYTAsCisJMHgyMGE5LCAweDAwMGMsIDB4YTg2MCwgMHgyMGU4LCAweDkwMDYsIDB4NDAwNCwgMHg5MTg2LCAweDAwNDYsCisJMHgxMTE4LCAweGE4NjcsIDB4MDEzNiwgMHgwMDM4LCAweGE4NjcsIDB4MDEzOCwgMHg5MTg2LCAweDAwNDEsCisJMHgwMTEwLCAweGE4N2IsIDB4MDAwMSwgMHg3MDM4LCAweDkwODQsIDB4ZmYwMCwgMHg3MjQwLCAweDkyOTQsCisJMHhmZjAwLCAweDgwMDcsIDB4OTIxNSwgMHhhYTlhLCAweDkxODYsIDB4MDA0NiwgMHgxMTY4LCAweDcwMzgsCisJMHg5MDg0LCAweDAwZmYsIDB4NzIzYywgMHg5Mjk0LCAweGZmMDAsIDB4OTIxNSwgMHhhYTllLCAweDcyM2MsCisJMHg5Mjk0LCAweDAwZmYsIDB4YWFhMiwgMHgwMDYwLCAweDcwNDAsIDB4OTA4NCwgMHgwMGZmLCAweDcyNDQsCisJMHg5Mjk0LCAweGZmMDAsIDB4OTIxNSwgMHhhYTllLCAweDcyNDQsIDB4OTI5NCwgMHgwMGZmLCAweGFhYTIsCisJMHg5MTg2LCAweDAwNDYsIDB4MTExOCwgMHg5ZTkwLCAweDAwMTIsIDB4MDAxMCwgMHg5ZTkwLCAweDAwMWEsCisJMHgyMjA0LCAweDgwMDcsIDB4YThhNiwgMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHhhOGFhLCAweDgyMTAsCisJMHgyMjA0LCAweDgwMDcsIDB4YThhZSwgMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHhhOGIyLCAweDgyMTAsCisJMHg5MTg2LCAweDAwNDYsIDB4MTFiOCwgMHg5ZTkwLCAweDAwMTYsIDB4MjIwNCwgMHg4MDA3LCAweGE4YjYsCisJMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHhhOGJhLCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YmUsCisJMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHhhOGMyLCAweDgyMTAsIDB4MjAxMSwgMHgwMjA1LCAweDIwMTMsCisJMHgwMDAxLCAweDAwYjAsIDB4OWU5MCwgMHgwMDFlLCAweDIyMDQsIDB4ODAwNywgMHhhOGI2LCAweDgyMTAsCisJMHgyMjA0LCAweDgwMDcsIDB4YThiYSwgMHgyMDExLCAweDAyMDUsIDB4MjAxMywgMHgwMDAxLCAweDIwMTEsCisJMHgwMjYwLCAweDIyMDQsIDB4ODAwNywgMHhhOGJlLCAweDgyMTAsIDB4MjIwNCwgMHg4MDA3LCAweGE4YzIsCisJMHg5MTg2LCAweDAwNDYsIDB4MTExOCwgMHgyMDExLCAweDAyNjIsIDB4MDAxMCwgMHgyMDExLCAweDAyNmEsCisJMHgwMTQ2LCAweDAxZDYsIDB4MDAzNiwgMHgyMGE5LCAweDAwMDEsIDB4MjAxOSwgMHgwMDA4LCAweGE4NjAsCisJMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDMxLCAweDIwYTAsIDB4MjIwNCwgMHg4MDA3LCAweDQwMDQsCisJMHg4MjEwLCAweDgzMTksIDB4MWRkMCwgMHgwMDNlLCAweDAxY2UsIDB4MDEzZSwgMHgyMDExLCAweDAyMDUsCisJMHgyMDEzLCAweDAwMDAsIDB4MDAyZSwgMHgwODBjLCAweDcwMTIsIDB4MDA5ZSwgMHgwMDA1LCAweDAwZTYsCisJMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBmYywgMHgwMTA4LCAweDAwMTEsCisJMHgwMGVlLCAweDAwMDUsIDB4YTg4MCwgMHhjMGU1LCAweGE4ODIsIDB4MDAwNSwgMHgwMGU2LCAweDAwZDYsCisJMHgwMGM2LCAweDAwNzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAyNiwgMHgwMDE2LCAweDAxMjYsCisJMHgyMDkxLCAweDgwMDAsIDB4MjAyOSwgMHgxOWY0LCAweDI1MmMsIDB4MjAyMSwgMHgxOWZiLCAweDI0MjQsCisJMHgyMDYxLCAweDFkZGMsIDB4MjA3MSwgMHgxODAwLCAweDc2NTQsIDB4NzA3NCwgMHg5NjA2LCAweDA1NzgsCisJMHg2NzIwLCAweDk3ODYsIDB4MDAwMSwgMHgwMTE4LCAweDk3ODYsIDB4MDAwOCwgMHgxNTAwLCAweDI1MDAsCisJMHg5YzA2LCAweDAxZTgsIDB4MjQwMCwgMHg5YzA2LCAweDAxZDAsIDB4MDgwYywgMHhlYWJlLCAweDAxYjgsCisJMHgwODBjLCAweGVhY2UsIDB4MTFhMCwgMHg2MDAwLCAweDkwODYsIDB4MDAwNCwgMHgxMTIwLCAweDAwMTYsCisJMHgwODBjLCAweDFhZDMsIDB4MDAxZSwgMHgwODBjLCAweGQxMjEsIDB4MTExMCwgMHgwODBjLCAweDMzNDQsCisJMHgwODBjLCAweGQxMzIsIDB4MTExMCwgMHgwODBjLCAweGJiNWMsIDB4MDgwYywgMHhiMWE3LCAweDljZTAsCisJMHgwMDFjLCAweDIwMDEsIDB4MTgxYSwgMHgyMDA0LCAweDljMDIsIDB4MTIwOCwgMHgwODU4LCAweDAxMmUsCisJMHgwMDFlLCAweDAwMmUsIDB4MDA0ZSwgMHgwMDVlLCAweDAwNmUsIDB4MDA3ZSwgMHgwMGNlLCAweDAwZGUsCisJMHgwMGVlLCAweDAwMDUsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsIDB4ZDBkYywgMHgwMDA1LCAweDAwMDYsCisJMHgyMDAxLCAweDE4MzcsIDB4MjAwNCwgMHhkMDljLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMzYsCisJMHgwMDQ2LCAweDA4MGMsIDB4ZDY0NSwgMHgwMTY4LCAweDIwMTksIDB4ZmZmZiwgMHg5MDA1LCAweDAxMjgsCisJMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiYmEwLCAweDAwYmUsIDB4MjAyMSwgMHgwMDA0LCAweDA4MGMsCisJMHg0ZTU4LCAweDAwNGUsIDB4MDAzZSwgMHgwMDBlLCAweDAwMDUsIDB4NjAwNCwgMHg5MDg2LCAweDAwMDEsCisJMHgxMTI4LCAweDA4MGMsIDB4YTdlMiwgMHgwODBjLCAweGIxYTcsIDB4OTAwNiwgMHgwMDA1LCAweDAwZTYsCisJMHgwMGM2LCAweDAwYjYsIDB4MDA0NiwgMHgyMDYxLCAweDFkZGMsIDB4MjA3MSwgMHgxODAwLCAweDc0NTQsCisJMHg3MDc0LCAweDgwMDEsIDB4OTQwMiwgMHgxMmQ4LCAweDIxMDAsIDB4OWMwNiwgMHgwMTY4LCAweDYwMDAsCisJMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwgMHg5MjA2LCAweDExMjAsCisJMHg2MDA0LCAweDkwODYsIDB4MDAwMiwgMHgwMTQwLCAweDljZTAsIDB4MDAxYywgMHgyMDAxLCAweDE4MWEsCisJMHgyMDA0LCAweDljMDIsIDB4MTIyMCwgMHgwYzQwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA4LCAweDkwMDYsCisJMHgwMDRlLCAweDAwYmUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsCisJMHhkMGE0LCAweDAxNjAsIDB4MjAwMSwgMHgxODM3LCAweDIwMDQsIDB4ZDBhNCwgMHgwMTM4LCAweDIwMDEsCisJMHgxODQ4LCAweDIwMDQsIDB4ZDBhNCwgMHgxMTE4LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDkwMDYsCisJMHgwY2U4LCAweDAxMjYsIDB4MDAwNiwgMHgwMGU2LCAweDAwMTYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsCisJMHgxODQwLCAweGQ1YTQsIDB4MDExOCwgMHg3MDA0LCAweDgwMDAsIDB4NzAwNiwgMHhkNWI0LCAweDAxMTgsCisJMHg3MDAwLCAweDgwMDAsIDB4NzAwMiwgMHhkNWFjLCAweDAxNzgsIDB4MjUwMCwgMHg5MDg0LCAweDAwMDcsCisJMHg5MDhlLCAweDAwMDMsIDB4MDE0OCwgMHg5MDhlLCAweDAwMDQsIDB4MDEzMCwgMHg5MDhlLCAweDAwMDUsCisJMHgwMTE4LCAweDIwNzEsIDB4ZmZmNiwgMHgwMDg5LCAweDAwMWUsIDB4MDBlZSwgMHgwMDBlLCAweDAxMmUsCisJMHgwMDA1LCAweDAxMjYsIDB4MDAwNiwgMHgwMGU2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweGZmZWUsCisJMHgwMDIxLCAweDAwZWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4MmUwNSwgMHg4MDAwLCAweDIwNzcsCisJMHgxMjIwLCAweDhlNzAsIDB4MmUwNSwgMHg4MDAwLCAweDIwNzcsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCisJMHhmZmVjLCAweDBjOTksIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHhmZmYwLCAweDBjNjksCisJMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgwMDA2LCAweDAwZTYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsCisJMHgxODQwLCAweDcwMTQsIDB4ODAwMCwgMHg3MDE2LCAweDAwZWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsCisJMHgwMDAxLCAweDAwMDIsIDB4MDAwNCwgMHgwMDA4LCAweDAwMTAsIDB4MDAyMCwgMHgwMDQwLCAweDAwODAsCisJMHgwMTAwLCAweDAyMDAsIDB4MDQwMCwgMHgwODAwLCAweDEwMDAsIDB4MjAwMCwgMHg0MDAwLCAweDgwMDAsCisJMHhhYTZlCiB9OwogI2lmZGVmIFVOSVFVRV9GV19OQU1FCi11bnNpZ25lZCBzaG9ydCBmdzIzMjJpcHhfbGVuZ3RoMDEgPSAweGU0Mjg7Cit1bnNpZ25lZCBzaG9ydCBmdzIzMjJpcHhfbGVuZ3RoMDEgPSAweGU3MTk7CiAjZWxzZQotdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2xlbmd0aDAxID0gMHhlNDI4OwordW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2xlbmd0aDAxID0gMHhlNzE5OwogI2VuZGlmCiAKIC8qCkBAIC03MzUyLDcgKzc0NDcsNyBAQAogCiB1bnNpZ25lZCBsb25nIHJzZXFpcHhfY29kZV9hZGRyMDEgPSAweDAwMDFjMDAwIDsKIHVuc2lnbmVkIHNob3J0IHJzZXFpcHhfY29kZTAxW10gPSB7IAotMHgwMDBiLCAweDAwMDMsIDB4MDAwMCwgMHgwYTRhLCAweDAwMDEsIDB4YzAwMCwgMHgwMDA4LCAweDgwNjQsCisweDAwMGIsIDB4MDAwMywgMHgwMDAwLCAweDBhNGUsIDB4MDAwMSwgMHhjMDAwLCAweDAwMDgsIDB4ODA2NCwKIAkweDAwMDAsIDB4MDAxMCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwOCwgMHgwMTAxLCAweDAwMDMsIDB4YzAwNywKIAkweDAwMDgsIDB4ODBlMCwgMHgwMDA4LCAweGZmMDAsIDB4MDAwMCwgMHg4MGUyLCAweDAwMDgsIDB4ZmYwMCwKIAkweDAwMDgsIDB4MDE2MiwgMHgwMDAwLCAweDgwNjYsIDB4MDAwOCwgMHhhMTAxLCAweDAwMGIsIDB4YzAwZiwKQEAgLTc1NTUsNyArNzY1MCw3IEBACiAJMHgwMDAzLCAweDhiMjMsIDB4MDAwOCwgMHgzYzFlLCAweDAwMGIsIDB4MDM3MiwgMHgwMDA5LCAweGJiZTAsCiAJMHgwMDAwLCAweDAwM2IsIDB4MDAwYiwgMHg4YjI4LCAweDAwMDAsIDB4M2NkYywgMHgwMDBiLCAweDAzNzIsCiAJMHgwMDA5LCAweGJiZTAsIDB4MDAwOCwgMHgwMDM1LCAweDAwMGIsIDB4OGIyZSwgMHgwMDAwLCAweDgwNzIsCi0JMHgwMDAwLCAweDgwMDAsIDB4MDAwYiwgMHgwNGUzLCAweDAwMDksIDB4YmJlMCwgMHgwMDA4LCAweDAwMzYsCisJMHgwMDAwLCAweDgwMDAsIDB4MDAwYiwgMHgwNGU1LCAweDAwMDksIDB4YmJlMCwgMHgwMDA4LCAweDAwMzYsCiAJMHgwMDBiLCAweDBjMDYsIDB4MDAwOSwgMHhiYmUwLCAweDAwMDAsIDB4MDAzNywgMHgwMDBiLCAweDhiNTMsCiAJMHgwMDAwLCAweDE4ZmUsIDB4MDAwOSwgMHgzY2UwLCAweDAwMGIsIDB4OGIxYiwgMHgwMDA4LCAweDgwNzYsCiAJMHgwMDAwLCAweDAwNDAsIDB4MDAwMCwgMHgxYTYwLCAweDAwMDgsIDB4ODA2MiwgMHgwMDAwLCAweDAwMGQsCkBAIC03NjE0LDggKzc3MDksOCBAQAogCTB4MDAwMCwgMHg4MDcyLCAweDAwMDAsIDB4ODAwMCwgMHgwMDAxLCAweDQzZTAsIDB4MDAwYiwgMHg4YzE1LAogCTB4MDAwMCwgMHg0MmZlLCAweDAwMDEsIDB4ZmZjMCwgMHgwMDA4LCAweDAwZmYsIDB4MDAwOSwgMHgwMGUwLAogCTB4MDAwYiwgMHgwYmYxLCAweDAwMDgsIDB4MGQwOCwgMHgwMDAzLCAweDA0NmEsIDB4MDAwMCwgMHg4MDcyLAotCTB4MDAwMCwgMHg4MDAwLCAweDAwMDMsIDB4MDAxMywgMHgwMDA0LCAweDA0ZWMsIDB4MDAwOCwgMHg4MDhjLAotCTB4MDAwMCwgMHgwMDAxLCAweDAwMDAsIDB4MDRmYywgMHgwMDAzLCAweDM0Y2YsIDB4MDAwMCwgMHgwNDYwLAorCTB4MDAwMCwgMHg4MDAwLCAweDAwMDMsIDB4MDAxMywgMHgwMDBjLCAweDA0ZWUsIDB4MDAwOCwgMHg4MDhjLAorCTB4MDAwMCwgMHgwMDAxLCAweDAwMDAsIDB4MDRmYywgMHgwMDAzLCAweDM0ZDEsIDB4MDAwMCwgMHgwNDYwLAogCTB4MDAwOCwgMHg4MDYyLCAweDAwMDAsIDB4MDAwMSwgMHgwMDAwLCAweDgwNjYsIDB4MDAwOCwgMHgwMDA5LAogCTB4MDAwMywgMHhjNDI0LCAweDAwMDAsIDB4MDAwNCwgMHgwMDA5LCAweDgwYzAsIDB4MDAwOCwgMHgwMGZmLAogCTB4MDAwMCwgMHg3ZjAwLCAweDAwMDEsIDB4ODBlMCwgMHgwMDAwLCAweDAwMDQsIDB4MDAwMywgMHgwYzNlLApAQCAtNzYyMyw4ICs3NzE4LDggQEAKIAkweDAwMDgsIDB4MDAwNiwgMHgwMDAzLCAweDBjM2UsIDB4MDAwMSwgMHg4MmMwLCAweDAwMDgsIDB4ZmYwMCwKIAkweDAwMDgsIDB4N2YwNCwgMHgwMDA5LCAweDgyZTAsIDB4MDAwOCwgMHgwNjAwLCAweDAwMDMsIDB4MGMzZSwKIAkweDAwMDksIDB4ODJlMCwgMHgwMDA4LCAweDA1MDAsIDB4MDAwMywgMHgwYzNlLCAweDAwMDksIDB4ODJlMCwKLQkweDAwMDAsIDB4MDQwMCwgMHgwMDAzLCAweDhjY2YsIDB4MDAwOSwgMHhjNGMwLCAweDAwMDAsIDB4NzAwMCwKLQkweDAwMDksIDB4ZmZlMCwgMHgwMDAwLCAweDEwMDAsIDB4MDAwYiwgMHgwYzZhLCAweDAwMGMsIDB4MDRkZCwKKwkweDAwMDAsIDB4MDQwMCwgMHgwMDAzLCAweDhjZDEsIDB4MDAwOSwgMHhjNGMwLCAweDAwMDAsIDB4NzAwMCwKKwkweDAwMDksIDB4ZmZlMCwgMHgwMDAwLCAweDEwMDAsIDB4MDAwYiwgMHgwYzZhLCAweDAwMDQsIDB4MDRkZiwKIAkweDAwMDIsIDB4Mzk0MSwgMHgwMDAzLCAweDBjNDksIDB4MDAwMCwgMHg4MDcyLCAweDAwMDAsIDB4MDQwMCwKIAkweDAwMDMsIDB4MDAxMywgMHgwMDAwLCAweDA0NjAsIDB4MDAwOCwgMHg4MGZlLCAweDAwMDgsIDB4MDAyYiwKIAkweDAwMDgsIDB4N2Y2MiwgMHgwMDAwLCAweDgwNjYsIDB4MDAwOCwgMHgyMjA5LCAweDAwMGIsIDB4YzQ0ZiwKQEAgLTc2MzQsNTYgKzc3MjksNTYgQEAKIAkweDAwMDgsIDB4ZmYwMCwgMHgwMDA5LCAweDAzZTAsIDB4MDAwYiwgMHg4YzYyLCAweDAwMDAsIDB4ODA3MiwKIAkweDAwMDAsIDB4MDQwMCwgMHgwMDBiLCAweDAwNTYsIDB4MDAwMSwgMHg5MTgwLCAweDAwMDgsIDB4MDAwMywKIAkweDAwMGIsIDB4MDQ0YywgMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDgsIDB4ODAxMCwKLQkweDAwMDAsIDB4MDAxMCwgMHgwMDBiLCAweDA0YzIsIDB4MDAwYywgMHgwNGRkLCAweDAwMDIsIDB4Mzk0MSwKKwkweDAwMDAsIDB4MDAxMCwgMHgwMDBiLCAweDA0YzQsIDB4MDAwNCwgMHgwNGRmLCAweDAwMDIsIDB4Mzk0MSwKIAkweDAwMDMsIDB4MGM3MCwgMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDMsIDB4MDAxMywKLQkweDAwMDQsIDB4MDRhNywgMHgwMDA4LCAweDExZmMsIDB4MDAwYiwgMHhiNDc4LCAweDAwMDAsIDB4ODA3MiwKLQkweDAwMDAsIDB4MDQwMCwgMHgwMDA4LCAweDgwMTAsIDB4MDAwMCwgMHgwMDBlLCAweDAwMGIsIDB4MDRjMiwKLQkweDAwMDAsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHgwNGZjLCAweDAwMGIsIDB4YjQ4ZCwKLQkweDAwMDgsIDB4ODA4YywgMHgwMDA4LCAweDAwMDAsIDB4MDAwMSwgMHg5MTgwLCAweDAwMDgsIDB4MDAwNSwKLQkweDAwMDgsIDB4N2Y2MiwgMHgwMDAwLCAweDgwNjYsIDB4MDAwOCwgMHgwMDA5LCAweDAwMGIsIDB4YzQ4MywKLQkweDAwMDgsIDB4MDA2MCwgMHgwMDA4LCAweDgwNjIsIDB4MDAwOCwgMHgwMDFiLCAweDAwMDgsIDB4NDMwNCwKLQkweDAwMDgsIDB4NDIwNiwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwNDEyLCAweDAwMDMsIDB4YzQ4YiwKLQkweDAwMGIsIDB4MDRhNCwgMHgwMDA4LCAweDgwOGMsIDB4MDAwMCwgMHgwMDAxLCAweDAwMDAsIDB4MDQ2MCwKLQkweDAwMDgsIDB4ODA2MiwgMHgwMDA4LCAweDAwMmIsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDgsIDB4MDYwOSwKLQkweDAwMGIsIDB4YzQ5NCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwOCwgMHgyMjBhLCAweDAwMGIsIDB4YzQ5NywKLQkweDAwMDAsIDB4NDJmZSwgMHgwMDAxLCAweGZmYzAsIDB4MDAwOCwgMHhmZjAwLCAweDAwMDgsIDB4N2YwNCwKLQkweDAwMDAsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwMSwgMHg5MTgwLCAweDAwMDAsIDB4MDAwMiwKLQkweDAwMDgsIDB4N2Y2MiwgMHgwMDAwLCAweDgwNjYsIDB4MDAwOCwgMHgwNDFhLCAweDAwMDMsIDB4YzRhMywKLQkweDAwMDAsIDB4ODA3MiwgMHgwMDAwLCAweDA0MDAsIDB4MDAwYiwgMHgwMDU2LCAweDAwMDAsIDB4ODA2MCwKLQkweDAwMDAsIDB4MDQwMCwgMHgwMDA4LCAweDZiNjIsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsIDB4MDQxMSwKLQkweDAwMDMsIDB4YzRhYywgMHgwMDA4LCAweDAyZmUsIDB4MDAwOSwgMHgwM2UwLCAweDAwMDMsIDB4OGNiMiwKLQkweDAwMDAsIDB4MGQyMiwgMHgwMDBmLCAweDQwMDAsIDB4MDAwOSwgMHg4MjgwLCAweDAwMDAsIDB4MDAwMiwKLQkweDAwMDEsIDB4NmI4MCwgMHgwMDA4LCAweDdmNjIsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDgsIDB4MjIwOSwKLQkweDAwMDMsIDB4YzRiOCwgMHgwMDBhLCAweDAyMDAsIDB4MDAwMSwgMHhmZmMwLCAweDAwMDAsIDB4MDAwNywKLQkweDAwMDAsIDB4N2YwNiwgMHgwMDA4LCAweDZiNjIsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDgsIDB4MDYwYSwKLQkweDAwMDMsIDB4YzRjMCwgMHgwMDBmLCAweDQwMDAsIDB4MDAwMiwgMHgzYTQ0LCAweDAwMDMsIDB4ODgxMywKLQkweDAwMGEsIDB4MmY0NCwgMHgwMDBhLCAweDJmNDQsIDB4MDAwMywgMHg4YmQwLCAweDAwMDgsIDB4ODA4YSwKLQkweDAwMDgsIDB4MDAwMywgMHgwMDAwLCAweDgwNzQsIDB4MDAwMCwgMHhmMDgwLCAweDAwMDMsIDB4NWNjYiwKLQkweDAwMDgsIDB4ODA1NCwgMHgwMDAwLCAweDAwMTksIDB4MDAwMywgMHgwMDEzLCAweDAwMDIsIDB4M2E0NCwKLQkweDAwMDMsIDB4ODgxMywgMHgwMDA4LCAweDgwOGMsIDB4MDAwOCwgMHgwMDAwLCAweDAwMDgsIDB4ODAxMCwKLQkweDAwMDgsIDB4MDAxMSwgMHgwMDA0LCAweDAzODcsIDB4MDAwMCwgMHg0MmZlLCAweDAwMDEsIDB4ZmZjMCwKLQkweDAwMDgsIDB4MDBmZiwgMHgwMDA4LCAweDdmMTAsIDB4MDAwNCwgMHgwMzg3LCAweDAwMDgsIDB4NDMxMCwKLQkweDAwMGIsIDB4MDNkZCwgMHgwMDAyLCAweDM5NDEsIDB4MDAwMywgMHgwY2UwLCAweDAwMGYsIDB4NDAwMCwKLQkweDAwMDAsIDB4ODA3MiwgMHgwMDA4LCAweDA0MDQsIDB4MDAwZiwgMHg0MDAwLCAweDAwMDgsIDB4ODAxMCwKLQkweDAwMDgsIDB4MDAxMiwgMHgwMDA0LCAweDAzODcsIDB4MDAwNCwgMHgwNGE3LCAweDAwMDAsIDB4MTExMCwKLQkweDAwMDQsIDB4MDM4NywgMHgwMDA4LCAweDExZmMsIDB4MDAwMywgMHhiNGU2LCAweDAwMDMsIDB4MDAxMywKLQkweDAwMDksIDB4YzJjMCwgMHgwMDA4LCAweDAwZmYsIDB4MDAwMCwgMHg3ZjAwLCAweDAwMDEsIDB4YzNjMCwKLQkweDAwMDgsIDB4ZmYwMCwgMHgwMDA5LCAweDAwZDAsIDB4MDAwMywgMHgwZDExLCAweDAwMDAsIDB4MGQwYSwKLQkweDAwMDEsIDB4ODU4MCwgMHgwMDAwLCAweDEwMDAsIDB4MDAwOCwgMHg3ZjYyLCAweDAwMDAsIDB4ODA2MCwKLQkweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwODA5LCAweDAwMGIsIDB4YzRmYiwKLQkweDAwMDAsIDB4MDRmYywgMHgwMDBiLCAweDM1MGEsIDB4MDAwMCwgMHgwNDYwLCAweDAwMDgsIDB4ODA2MiwKLQkweDAwMDAsIDB4MDAwNCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwMjExLCAweDAwMGIsIDB4YzUwMywKLQkweDAwMDgsIDB4MDFmZSwgMHgwMDA5LCAweDAwZTAsIDB4MDAwYiwgMHg4ZDBhLCAweDAwMDgsIDB4MDJmZSwKLQkweDAwMDEsIDB4NDNlMCwgMHgwMDBiLCAweDBkMTAsIDB4MDAwMiwgMHgwNTAwLCAweDAwMDAsIDB4N2YwYSwKLQkweDAwMDksIDB4ZmZlMCwgMHgwMDAwLCAweDA4MDAsIDB4MDAwYiwgMHg4Y2Y0LCAweDAwMDgsIDB4MGQwOCwKLQkweDAwMGYsIDB4NDAwMCwgMHgwMDA4LCAweDQzZmUsIDB4MDAwMSwgMHgzZTgwLCAweDAwMDAsIDB4MGQ2MCwKLQkweDAwMDgsIDB4N2Y2MiwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwODA5LCAweDAwMGIsIDB4YzUxNywKLQkweDAwMDAsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwMSwgMHg4NGMwLCAweDAwMDgsIDB4ZmYwMCwKLQkweDAwMDIsIDB4N2Y3MCwgMHgwMDA5LCAweGZmODAsIDB4MDAwMCwgMHgxMDAwLCAweDAwMDgsIDB4N2Y2MiwKLQkweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDA4MDksIDB4MDAwYiwgMHhjNTIyLCAweDAwMGYsIDB4NDAwMCwKLQkweGU0YWUsIDB4MWViOAorCTB4MDAwYSwgMHg2ZTQyLCAweDAwMDMsIDB4MGM3NSwgMHgwMDBjLCAweDA0YTksIDB4MDAwOCwgMHgxMWZjLAorCTB4MDAwMywgMHhiNDdhLCAweDAwMDAsIDB4ODA3MiwgMHgwMDAwLCAweDA0MDAsIDB4MDAwOCwgMHg4MDEwLAorCTB4MDAwMCwgMHgwMDBlLCAweDAwMGIsIDB4MDRjNCwgMHgwMDAwLCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLAorCTB4MDAwMCwgMHgwNGZjLCAweDAwMDMsIDB4YjQ4ZiwgMHgwMDA4LCAweDgwOGMsIDB4MDAwOCwgMHgwMDAwLAorCTB4MDAwMSwgMHg5MTgwLCAweDAwMDgsIDB4MDAwNSwgMHgwMDA4LCAweDdmNjIsIDB4MDAwMCwgMHg4MDY2LAorCTB4MDAwOCwgMHgwMDA5LCAweDAwMGIsIDB4YzQ4NSwgMHgwMDA4LCAweDAwNjAsIDB4MDAwOCwgMHg4MDYyLAorCTB4MDAwOCwgMHgwMDFiLCAweDAwMDgsIDB4NDMwNCwgMHgwMDA4LCAweDQyMDYsIDB4MDAwMCwgMHg4MDY2LAorCTB4MDAwMCwgMHgwNDEyLCAweDAwMDMsIDB4YzQ4ZCwgMHgwMDAzLCAweDA0YTYsIDB4MDAwOCwgMHg4MDhjLAorCTB4MDAwMCwgMHgwMDAxLCAweDAwMDAsIDB4MDQ2MCwgMHgwMDA4LCAweDgwNjIsIDB4MDAwOCwgMHgwMDJiLAorCTB4MDAwMCwgMHg4MDY2LCAweDAwMDgsIDB4MDYwOSwgMHgwMDAzLCAweGM0OTYsIDB4MDAwMCwgMHg4MDY2LAorCTB4MDAwOCwgMHgyMjBhLCAweDAwMDMsIDB4YzQ5OSwgMHgwMDAwLCAweDQyZmUsIDB4MDAwMSwgMHhmZmMwLAorCTB4MDAwOCwgMHhmZjAwLCAweDAwMDgsIDB4N2YwNCwgMHgwMDAwLCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLAorCTB4MDAwMSwgMHg5MTgwLCAweDAwMDAsIDB4MDAwMiwgMHgwMDA4LCAweDdmNjIsIDB4MDAwMCwgMHg4MDY2LAorCTB4MDAwOCwgMHgwNDFhLCAweDAwMDMsIDB4YzRhNSwgMHgwMDAwLCAweDgwNzIsIDB4MDAwMCwgMHgwNDAwLAorCTB4MDAwYiwgMHgwMDU2LCAweDAwMDAsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwOCwgMHg2YjYyLAorCTB4MDAwMCwgMHg4MDY2LCAweDAwMDAsIDB4MDQxMSwgMHgwMDBiLCAweGM0YWUsIDB4MDAwOCwgMHgwMmZlLAorCTB4MDAwOSwgMHgwM2UwLCAweDAwMDMsIDB4OGNiNCwgMHgwMDAwLCAweDBkMjIsIDB4MDAwZiwgMHg0MDAwLAorCTB4MDAwOSwgMHg4MjgwLCAweDAwMDAsIDB4MDAwMiwgMHgwMDAxLCAweDZiODAsIDB4MDAwOCwgMHg3ZjYyLAorCTB4MDAwMCwgMHg4MDY2LCAweDAwMDgsIDB4MjIwOSwgMHgwMDBiLCAweGM0YmEsIDB4MDAwYSwgMHgwMjAwLAorCTB4MDAwMSwgMHhmZmMwLCAweDAwMDAsIDB4MDAwNywgMHgwMDAwLCAweDdmMDYsIDB4MDAwOCwgMHg2YjYyLAorCTB4MDAwMCwgMHg4MDY2LCAweDAwMDgsIDB4MDYwYSwgMHgwMDBiLCAweGM0YzIsIDB4MDAwZiwgMHg0MDAwLAorCTB4MDAwMiwgMHgzYTQ0LCAweDAwMDMsIDB4ODgxMywgMHgwMDBhLCAweDJmNDQsIDB4MDAwYSwgMHgyZjQ0LAorCTB4MDAwMywgMHg4YmQwLCAweDAwMDgsIDB4ODA4YSwgMHgwMDA4LCAweDAwMDMsIDB4MDAwMCwgMHg4MDc0LAorCTB4MDAwMCwgMHhmMDgwLCAweDAwMDMsIDB4NWNjZCwgMHgwMDA4LCAweDgwNTQsIDB4MDAwMCwgMHgwMDE5LAorCTB4MDAwMywgMHgwMDEzLCAweDAwMDIsIDB4M2E0NCwgMHgwMDAzLCAweDg4MTMsIDB4MDAwOCwgMHg4MDhjLAorCTB4MDAwOCwgMHgwMDAwLCAweDAwMDgsIDB4ODAxMCwgMHgwMDA4LCAweDAwMTEsIDB4MDAwNCwgMHgwMzg3LAorCTB4MDAwMCwgMHg0MmZlLCAweDAwMDEsIDB4ZmZjMCwgMHgwMDA4LCAweDAwZmYsIDB4MDAwOCwgMHg3ZjEwLAorCTB4MDAwNCwgMHgwMzg3LCAweDAwMDgsIDB4NDMxMCwgMHgwMDBiLCAweDAzZGQsIDB4MDAwMiwgMHgzOTQxLAorCTB4MDAwYiwgMHgwY2UyLCAweDAwMGYsIDB4NDAwMCwgMHgwMDAwLCAweDgwNzIsIDB4MDAwOCwgMHgwNDA0LAorCTB4MDAwZiwgMHg0MDAwLCAweDAwMDgsIDB4ODAxMCwgMHgwMDA4LCAweDAwMTIsIDB4MDAwNCwgMHgwMzg3LAorCTB4MDAwYywgMHgwNGE5LCAweDAwMDAsIDB4MTExMCwgMHgwMDA0LCAweDAzODcsIDB4MDAwOCwgMHgxMWZjLAorCTB4MDAwYiwgMHhiNGU4LCAweDAwMDMsIDB4MDAxMywgMHgwMDA5LCAweGMyYzAsIDB4MDAwOCwgMHgwMGZmLAorCTB4MDAwMCwgMHg3ZjAwLCAweDAwMDEsIDB4YzNjMCwgMHgwMDA4LCAweGZmMDAsIDB4MDAwOSwgMHgwMGQwLAorCTB4MDAwYiwgMHgwZDEzLCAweDAwMDAsIDB4MGQwYSwgMHgwMDAxLCAweDg1ODAsIDB4MDAwMCwgMHgxMDAwLAorCTB4MDAwOCwgMHg3ZjYyLCAweDAwMDAsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHg4MDY2LAorCTB4MDAwMCwgMHgwODA5LCAweDAwMGIsIDB4YzRmZCwgMHgwMDAwLCAweDA0ZmMsIDB4MDAwYiwgMHgzNTBjLAorCTB4MDAwMCwgMHgwNDYwLCAweDAwMDgsIDB4ODA2MiwgMHgwMDAwLCAweDAwMDQsIDB4MDAwMCwgMHg4MDY2LAorCTB4MDAwMCwgMHgwMjExLCAweDAwMGIsIDB4YzUwNSwgMHgwMDA4LCAweDAxZmUsIDB4MDAwOSwgMHgwMGUwLAorCTB4MDAwYiwgMHg4ZDBjLCAweDAwMDgsIDB4MDJmZSwgMHgwMDAxLCAweDQzZTAsIDB4MDAwMywgMHgwZDEyLAorCTB4MDAwMiwgMHgwNTAwLCAweDAwMDAsIDB4N2YwYSwgMHgwMDA5LCAweGZmZTAsIDB4MDAwMCwgMHgwODAwLAorCTB4MDAwMywgMHg4Y2Y2LCAweDAwMDgsIDB4MGQwOCwgMHgwMDBmLCAweDQwMDAsIDB4MDAwOCwgMHg0M2ZlLAorCTB4MDAwMSwgMHgzZTgwLCAweDAwMDAsIDB4MGQ2MCwgMHgwMDA4LCAweDdmNjIsIDB4MDAwMCwgMHg4MDY2LAorCTB4MDAwMCwgMHgwODA5LCAweDAwMDMsIDB4YzUxOSwgMHgwMDAwLCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLAorCTB4MDAwMSwgMHg4NGMwLCAweDAwMDgsIDB4ZmYwMCwgMHgwMDAyLCAweDdmNzAsIDB4MDAwOSwgMHhmZjgwLAorCTB4MDAwMCwgMHgxMDAwLCAweDAwMDgsIDB4N2Y2MiwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwODA5LAorCTB4MDAwYiwgMHhjNTI0LCAweDAwMGYsIDB4NDAwMCwgMHhlNGE4LCAweGEzYjkKIH07Ci11bnNpZ25lZCBzaG9ydCByc2VxaXB4X2NvZGVfbGVuZ3RoMDEgPSAweDBhNGE7Cit1bnNpZ25lZCBzaG9ydCByc2VxaXB4X2NvZGVfbGVuZ3RoMDEgPSAweDBhNGU7CiAvKgogICoKICAqLwpAQCAtNzkwMiwxMCArNzk5NywxMCBAQAogCTB4MDAxMCwgMHhjMDBhLCAweDAwMGIsIDB4ODM0NSwgMHgwMDEzLCAweDAzYTYsIDB4MDAwMSwgMHgwZmU4LAogCTB4MDAxMCwgMHgwMDAwLCAweDAwMDMsIDB4MTM0ZSwgMHgwMDA1LCAweDAwY2UsIDB4MDAwMCwgMHgwMDA3LAogCTB4MDAxMCwgMHgwZmNmLCAweDAwMDMsIDB4MDhlMSwgMHgwMDAyLCAweGQxNDIsIDB4MDAxMywgMHgxMzY3LAotCTB4MDAxNSwgMHgwMGQxLCAweDAwMDAsIDB4MDQwMCwgMHgwMDExLCAweDEzZTgsIDB4MDAwMSwgMHgxYjU2LAotCTB4MDAwYiwgMHgxMzY3LCAweDAwMDUsIDB4MDAzMSwgMHgwMDExLCAweDFiNmUsIDB4MDAxNSwgMHgwMDMzLAorCTB4MDAxNSwgMHgwMGQxLCAweDAwMDAsIDB4MDQwMCwgMHgwMDExLCAweDEzZTgsIDB4MDAwMSwgMHgxYjU1LAorCTB4MDAwYiwgMHgxMzY3LCAweDAwMDUsIDB4MDAzMSwgMHgwMDExLCAweDFiNmQsIDB4MDAxNSwgMHgwMDMzLAogCTB4MDAxMCwgMHhiNDA5LCAweDAwMWIsIDB4ODM1OSwgMHgwMDAyLCAweGI0MDAsIDB4MDAxMCwgMHhmZmI0LAotCTB4MDAwNSwgMHgwMDMxLCAweDAwMTEsIDB4MWI2ZSwgMHgwMDE1LCAweDAwMzMsIDB4MDAxMCwgMHhiNDBhLAorCTB4MDAwNSwgMHgwMDMxLCAweDAwMTEsIDB4MWI2ZCwgMHgwMDE1LCAweDAwMzMsIDB4MDAxMCwgMHhiNDBhLAogCTB4MDAxYiwgMHg4MzYwLCAweDAwMTIsIDB4ZDA0MiwgMHgwMDAzLCAweDEzNzEsIDB4MDAxNSwgMHgwMGI4LAogCTB4MDAwMCwgMHgwMDBkLCAweDAwMTQsIDB4MDkyNSwgMHgwMDAzLCAweDAwNTQsIDB4MDAwMCwgMHgxM2I4LAogCTB4MDAwMiwgMHgxMDQ1LCAweDAwMDMsIDB4MTM2ZiwgMHgwMDEyLCAweDEwM2YsIDB4MDAwMiwgMHhmZjI3LApAQCAtNzk4MCw3ICs4MDc1LDcgQEAKIAkweDAwMDEsIDB4MGZlOCwgMHgwMDAwLCAweDAwMDIsIDB4MDAxMywgMHgxNDgyLCAweDAwMTUsIDB4MDAzYSwKIAkweDAwMTAsIDB4ODA4MCwgMHgwMDAzLCAweDA0ODQsIDB4MDAxNSwgMHgwMDNhLCAweDAwMTAsIDB4NDA0MCwKIAkweDAwMTcsIDB4NDAwMCwgMHgwMDAwLCAweDEyZmUsIDB4MDAxYiwgMHg2MDRmLCAweDAwMTUsIDB4MDAxMiwKLQkweDAwMDEsIDB4MWI1NiwgMHgwMDE1LCAweDAwMTEsIDB4MDAwMSwgMHgxYjU2LCAweDAwMDEsIDB4MTI4OCwKKwkweDAwMDEsIDB4MWI1NSwgMHgwMDE1LCAweDAwMTEsIDB4MDAwMSwgMHgxYjU1LCAweDAwMDEsIDB4MTI4OCwKIAkweDAwMTAsIDB4MDAwMywgMHgwMDAwLCAweGZmMzEsIDB4MDAxNSwgMHgwMDMzLCAweDAwMTAsIDB4YzAwYSwKIAkweDAwMGIsIDB4ODQ5MCwgMHgwMDA1LCAweDAwYjAsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDEsIDB4MTI4OCwKIAkweDAwMTAsIDB4MDAxMSwgMHgwMDAwLCAweGZmMzEsIDB4MDAxNSwgMHgwMDMzLCAweDAwMDAsIDB4YjAwYSwKQEAgLTgwMTksNyArODExNCw3IEBACiAJMHgwMDAwLCAweGIwMTIsIDB4MDAwYiwgMHg4NTE5LCAweDAwMTMsIDB4MDQ2YiwgMHgwMDAwLCAweGJhMzAsCiAJMHgwMDA1LCAweDAwMzEsIDB4MDAxMCwgMHgwMDM1LCAweDAwMTUsIDB4MDAzMywgMHgwMDAwLCAweGIwMDksCiAJMHgwMDBiLCAweDg1MjAsIDB4MDAwMiwgMHhiMDQwLCAweDAwMDMsIDB4MTUzYywgMHgwMDE1LCAweDAwMzAsCi0JMHgwMDAwLCAweDA0MDAsIDB4MDAwNSwgMHgwMDMxLCAweDAwMDEsIDB4MWI3MiwgMHgwMDE1LCAweDAwMzMsCisJMHgwMDAwLCAweDA0MDAsIDB4MDAwNSwgMHgwMDMxLCAweDAwMDEsIDB4MWI3MSwgMHgwMDE1LCAweDAwMzMsCiAJMHgwMDAwLCAweGIwMTEsIDB4MDAwYiwgMHg4NTI5LCAweDAwMDIsIDB4YjEwMCwgMHgwMDEwLCAweGZmYjEsCiAJMHgwMDFiLCAweDI1MzAsIDB4MDAxMiwgMHhiMDAwLCAweDAwMDAsIDB4ZmZiMCwgMHgwMDEzLCAweDI1MmEsCiAJMHgwMDE1LCAweDAwMzMsIDB4MDAwMCwgMHhiMDEyLCAweDAwMGIsIDB4ODUzMiwgMHgwMDE1LCAweDAwMzAsCkBAIC04MTExLDcgKzgyMDYsNyBAQAogCTB4MDAwMCwgMHg5NTc1LCAweDAwMDQsIDB4MDhhOCwgMHgwMDAwLCAweGIwOTYsIDB4MDAxMiwgMHhiMjcwLAogCTB4MDAxMCwgMHhmZjU2LCAweDAwMTQsIDB4MDhjYSwgMHgwMDEwLCAweGIwNTIsIDB4MDAxMCwgMHhiMTUzLAogCTB4MDAwMCwgMHhiNmZmLCAweDAwMTEsIDB4YjJkMCwgMHgwMDEwLCAweGZmNTAsIDB4MDAxMCwgMHhiMzUxLAotCTB4MDAxNywgMHg0MDAwLCAweDAwMDEsIDB4MTJlOCwgMHgwMDAxLCAweDFiNTYsIDB4MDAwMywgMHgxODQ1LAorCTB4MDAxNywgMHg0MDAwLCAweDAwMDEsIDB4MTJlOCwgMHgwMDAxLCAweDFiNTUsIDB4MDAwMywgMHgxODQ1LAogCTB4MDAxNSwgMHgwMGQxLCAweDAwMDAsIDB4MDQwMCwgMHgwMDE1LCAweDAwMzAsIDB4MDAwMCwgMHgwNDAwLAogCTB4MDAwMSwgMHgxMjg4LCAweDAwMTAsIDB4MDAxMSwgMHgwMDAwLCAweGZmMzEsIDB4MDAxNSwgMHgwMDMzLAogCTB4MDAwMCwgMHgxMDA5LCAweDAwMGIsIDB4ODZhMSwgMHgwMDE1LCAweDAwMGYsIDB4MDAwMCwgMHgwMDAxLApAQCAtODIyMSwxNSArODMxNiwxNSBAQAogCTB4MDAwMCwgMHhmZjMxLCAweDAwMTUsIDB4MDAzMywgMHgwMDAwLCAweGIwMTIsIDB4MDAxYiwgMHg4ODQzLAogCTB4MDAwMywgMHgwNzAzLCAweDAwMTUsIDB4MDAzMCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHhhNGZmLAogCTB4MDAwMywgMHg2ODkzLCAweDAwMTEsIDB4ZmZhOCwgMHgwMDEwLCAweDAwMDUsIDB4MDAwYiwgMHgyODkzLAotCTB4MDAwNSwgMHgwMDMxLCAweDAwMTEsIDB4MWI2ZCwgMHgwMDE1LCAweDAwMzMsIDB4MDAxMCwgMHhiMjExLAorCTB4MDAwNSwgMHgwMDMxLCAweDAwMDEsIDB4MWI2YywgMHgwMDE1LCAweDAwMzMsIDB4MDAxMCwgMHhiMjExLAogCTB4MDAwYiwgMHg4ODUwLCAweDAwMDIsIDB4YjIwMCwgMHgwMDEwLCAweGZmYjIsIDB4MDAwNSwgMHgwMDMxLAotCTB4MDAxMSwgMHgxYjZkLCAweDAwMTUsIDB4MDAzMywgMHgwMDEwLCAweGIyMGEsIDB4MDAxYiwgMHg4ODU3LAorCTB4MDAwMSwgMHgxYjZjLCAweDAwMTUsIDB4MDAzMywgMHgwMDEwLCAweGIyMGEsIDB4MDAxYiwgMHg4ODU3LAogCTB4MDAxNSwgMHgwMDBmLCAweDAwMDAsIDB4MDAwMSwgMHgwMDAwLCAweDEyMTMsIDB4MDAwNSwgMHgwMDEwLAogCTB4MDAwMCwgMHg4MDAwLCAweDAwMTUsIDB4MDBhMywgMHgwMDAwLCAweDAyMDAsIDB4MDAwMCwgMHhjNjk3LAogCTB4MDAwNSwgMHgwMDQ2LCAweDAwMDAsIDB4MDAwMiwgMHgwMDE1LCAweDAwYTUsIDB4MDAwMCwgMHgwMDEwLAogCTB4MDAxMSwgMHhjNGQ4LCAweDAwMDAsIDB4MzIwMCwgMHgwMDEwLCAweGZmODgsIDB4MDAwMCwgMHhjNTg5LAogCTB4MDAxMCwgMHhjNDhhLCAweDAwMTAsIDB4YzU4YiwgMHgwMDEwLCAweGMwOGUsIDB4MDAwNSwgMHgwMDhjLAotCTB4MDAxMCwgMHhlMTA5LCAweDAwMTAsIDB4YzA4ZCwgMHgwMDE1LCAweDAwOTAsIDB4MDAwMSwgMHgxYjU2LAorCTB4MDAxMCwgMHhlMTA5LCAweDAwMTAsIDB4YzA4ZCwgMHgwMDE1LCAweDAwOTAsIDB4MDAwMSwgMHgxYjU1LAogCTB4MDAwNSwgMHgwMDkxLCAweDAwMTAsIDB4ZmZmZiwgMHgwMDAwLCAweGIyOTIsIDB4MDAwMCwgMHhiMzkzLAogCTB4MDAxNSwgMHgwMDlhLCAweDAwMTAsIDB4MDA1NiwgMHgwMDA1LCAweDAwOWIsIDB4MDAxMCwgMHg5NWY1LAogCTB4MDAxMiwgMHhkMDQyLCAweDAwMDMsIDB4MTg4NiwgMHgwMDA1LCAweDAwYjAsIDB4MDAxMCwgMHg4MDgwLApAQCAtODI3Niw2ICs4MzcxLDYgQEAKIAkweDAwMTAsIDB4ZmZiMiwgMHgwMDExLCAweDEzODgsIDB4MDAxMCwgMHgwMDExLCAweDAwMDAsIDB4ZmYzMSwKIAkweDAwMTUsIDB4MDAzMywgMHgwMDEwLCAweGIyMGEsIDB4MDAxYiwgMHg4OTIyLCAweDAwMTUsIDB4MDBiOCwKIAkweDAwMDAsIDB4MDAwNywgMHgwMDEzLCAweDQ5MjUsIDB4MDAwMCwgMHhiODM4LCAweDAwMTcsIDB4NDAwMCwKLQkweDlhNmMsIDB4YWYzMworCTB4OWE4YywgMHhhZjNkCiB9OwogdW5zaWduZWQgc2hvcnQgeHNlcWlweF9jb2RlX2xlbmd0aDAxID0gMHgxMjUyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWwyNDAwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDI0MDAuYwppbmRleCA2YzcxNjVmLi43NzkxNGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDI0MDAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDI0MDAuYwpAQCAtNDksNiArNDksMTggQEAKIAkJLmZ3X2luZm8JPSBxbGFfZndfdGJsLAogCQkuZndfZm5hbWUJPSAicWwyNDAwX2Z3LmJpbiIsCiAJfSwKKwl7CisJCS5kcnZfbmFtZQk9IHFsYV9kcml2ZXJfbmFtZSwKKwkJLmlzcF9uYW1lCT0gIklTUDU0MjIiLAorCQkuZndfaW5mbwk9IHFsYV9md190YmwsCisJCS5md19mbmFtZQk9ICJxbDI0MDBfZncuYmluIiwKKwl9LAorCXsKKwkJLmRydl9uYW1lCT0gcWxhX2RyaXZlcl9uYW1lLAorCQkuaXNwX25hbWUJPSAiSVNQNTQzMiIsCisJCS5md19pbmZvCT0gcWxhX2Z3X3RibCwKKwkJLmZ3X2ZuYW1lCT0gInFsMjQwMF9mdy5iaW4iLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcWxhMjR4eF9wY2lfdGJsW10gPSB7CkBAIC02Niw2ICs3OCwyMSBAQAogCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKIAkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJnFsYV9ib2FyZF90YmxbMV0sCiAJfSwKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9RTE9HSUMsCisJCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNTQyMiwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmcWxhX2JvYXJkX3RibFsyXSwKKwl9LAorCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1FMT0dJQywKKwkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDMyLAorCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZxbGFfYm9hcmRfdGJsWzNdLAorCX0sCisKIAl7MCwgMH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsYTI0eHhfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDI0MDBfZncuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjQwMF9mdy5jCmluZGV4IDU5Nzc3OTUuLjI4MmIyZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjQwMF9mdy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsMjQwMF9mdy5jCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qCi0gKglGaXJtd2FyZSBWZXJzaW9uIDQuMDAuMTYgKDA4OjA5IE9jdCAyNiwgMjAwNSkKKyAqCUZpcm13YXJlIFZlcnNpb24gNC4wMC4xOCAoMTQ6NTMgSmFuIDMwLCAyMDA2KQogICovCiAKICNpZmRlZiBVTklRVUVfRldfTkFNRQpAQCAtMTcsMTUgKzE3LDE1IEBACiAjZW5kaWYKIAogI2lmZGVmIFVOSVFVRV9GV19OQU1FCi11aW50MzJfdCBmdzI0MDBfdmVyc2lvbl9zdHJbXSA9IHs0LCAwLDE2fTsKK3VpbnQzMl90IGZ3MjQwMF92ZXJzaW9uX3N0cltdID0gezQsIDAsMTh9OwogI2Vsc2UKLXVpbnQzMl90IGZpcm13YXJlX3ZlcnNpb25bXSA9IHs0LCAwLDE2fTsKK3VpbnQzMl90IGZpcm13YXJlX3ZlcnNpb25bXSA9IHs0LCAwLDE4fTsKICNlbmRpZgogCiAjaWZkZWYgVU5JUVVFX0ZXX05BTUUKLSNkZWZpbmUgZncyNDAwX1ZFUlNJT05fU1RSSU5HICI0LjAwLjE2IgorI2RlZmluZSBmdzI0MDBfVkVSU0lPTl9TVFJJTkcgIjQuMDAuMTgiCiAjZWxzZQotI2RlZmluZSBGV19WRVJTSU9OX1NUUklORyAiNC4wMC4xNiIKKyNkZWZpbmUgRldfVkVSU0lPTl9TVFJJTkcgIjQuMDAuMTgiCiAjZW5kaWYKIAogI2lmZGVmIFVOSVFVRV9GV19OQU1FCkBAIC0zOSwxOSArMzksMTkgQEAKICNlbHNlCiB1aW50MzJfdCByaXNjX2NvZGUwMVtdID0gewogI2VuZGlmCi0JMHgwNDAxZjE3YywgMHgwMDEwZTAwMCwgMHgwMDEwMDAwMCwgMHgwMDAwYWI0YSwKLQkweDAwMDAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDAyLAorCTB4MDQwMWYxN2MsIDB4MDAxMGQwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMGE5NzEsCisJMHgwMDAwMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMiwgMHgwMDAwMDAwMiwKIAkweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDIwNDM0ZjUwLCAweDU5NTI0OTQ3LAogCTB4NDg1NDIwMzIsIDB4MzAzMDM1MjAsIDB4NTE0YzRmNDcsIDB4NDk0MzIwNDMsCiAJMHg0ZjUyNTA0ZiwgMHg1MjQxNTQ0OSwgMHg0ZjRlMjAyMCwgMHgyMDQ5NTM1MCwKIAkweDMyMzQ3ODc4LCAweDIwNDY2OTcyLCAweDZkNzc2MTcyLCAweDY1MjAyMDIwLAotCTB4NTY2NTcyNzMsIDB4Njk2ZjZlMjAsIDB4MzQyZTMwMmUsIDB4MzEzNjIwMjAsCisJMHg1NjY1NzI3MywgMHg2OTZmNmUyMCwgMHgzNDJlMzAyZSwgMHgzMTM4MjAyMCwKIAkweDIwMjAyMDI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHg0MjAwMTgwMCwgMHgwMDEwMDE0ZiwgMHg0MjAwMjAwMCwgMHgwMDEwYjhmZSwKKwkweDQyMDAxODAwLCAweDAwMTAwMTRmLCAweDQyMDAyMDAwLCAweDAwMTBiNmZkLAogCTB4NTAwYzA4MDAsIDB4ODAwYzE4MDAsIDB4NTAwYzEwMDAsIDB4ODAwYzE4MDAsCiAJMHg1NDA0MjAwMCwgMHg4MDEwMjAwMCwgMHg4MDA0MDgwMCwgMHg4MDA4MTA0MCwKIAkweDA0MDIwN2ZjLCAweDUwMGMwODAwLCAweDgwMDQwOWMwLCAweDA0MDIwN2Y2LApAQCAtMTM4LDcgKzEzOCw3IEBACiAJMHg0MjAwMDgwMCwgMHgwMDAyMWYwMCwgMHg0NTc4MDgwMCwgMHg4MDA0MDgwMCwKIAkweDgwMDAwMDQwLCAweDA0MDIwN2ZkLCAweDQyMDNmMDAwLCAweDAwMDIxZmZmLAogCTB4NDAwMDAwMDAsIDB4NDIwM2UwMDAsIDB4OTAwMDAxMDAsIDB4NDAwMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDZmZCwgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAwNzQzLCAweDQyMDAwMDAwLCAweDAwMDAxMDAwLAogCTB4NTAwMDAwMDAsIDB4ODIwMDA0ODAsIDB4MjQzMjAwMDIsIDB4MDQwMjAwMTUsCiAJMHg0MjAwMDgwMCwgMHgwMDAwMDA2NCwgMHg4MDA0MDg0MCwgMHgwNDAwMDAwNywKIAkweDRhMDMwMDAwLCAweDAwMDAwMDAxLCAweDQwMDAwMDAwLCAweDU5ODAwMDAwLApAQCAtMTQ5LDc0MiArMTQ5LDc1OSBAQAogCTB4NTllMDAwMjMsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMzksIDB4NDIwMDAwMDAsCiAJMHgwMDEwMDAwMSwgMHg1MDAwMDgwMCwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwNCwKIAkweDU4MDQyMDAzLCAweDQyMDAxMDAwLCAweGZmZmZmZmZmLCAweDAyMDFmODAwLAotCTB4MDAxMDA2ZjQsIDB4MDQwMjAwNGUsIDB4NTgwNDIwMDMsIDB4NDIwMDEwMDAsCi0JMHhmZmZmZmZmZiwgMHgwMjAxZjgwMCwgMHgwMDEwMDZmNCwgMHgwNDAyMDA0OCwKKwkweDAwMTAwNzNhLCAweDA0MDIwMDRlLCAweDU4MDQyMDAzLCAweDQyMDAxMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDIwMWY4MDAsIDB4MDAxMDA3M2EsIDB4MDQwMjAwNDgsCiAJMHg1ODA0MjAwMywgMHg0MjAwMTAwMCwgMHgwMGZmZmZmZiwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNmY0LCAweDA0MDIwMDQyLCAweDU4MDQyMDAzLCAweDQyMDAxMDAwLAotCTB4MDBmZmZmZmYsIDB4MDIwMWY4MDAsIDB4MDAxMDA2ZjQsIDB4MDQwMjAwM2MsCisJMHgwMDEwMDczYSwgMHgwNDAyMDA0MiwgMHg1ODA0MjAwMywgMHg0MjAwMTAwMCwKKwkweDAwZmZmZmZmLCAweDAyMDFmODAwLCAweDAwMTAwNzNhLCAweDA0MDIwMDNjLAogCTB4NDIwMDAwMDAsIDB4MDAxMDAwMDEsIDB4NTAwMGEwMDAsIDB4ODI1MGE0MDAsCiAJMHgwMDAwMDAwNCwgMHg0MjAwYTgwMCwgMHgwMDAyMDAwMCwgMHg1ODUwYjAwMywKLQkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDgyNTBhNDAwLCAweDAwMDAwMDA1LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4ODI1MGE0MDAsIDB4MDAwMDAwMDUsCiAJMHg0YTAzNzBlOCwgMHgwMDAwMDAwMywgMHg0MjAwYTgwMCwgMHgwMDAwYzAwMCwKLQkweDU4NTBiMDAzLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDRhMDM3OGU4LAorCTB4NTg1MGIwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4NGEwMzc4ZTgsCiAJMHgwMDAwMDAwMywgMHg0MjAwYTgwMCwgMHgwMDAwODAwMCwgMHg1ODUwYjAwMywKLQkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDA0MDFmMDJiLCAweDQyMDAwODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4MDQwMWYwMmIsIDB4NDIwMDA4MDAsCiAJMHgwMDAyMDAwMCwgMHg1ODA0MjAwMywgMHg0MjAwMTAwMCwgMHhmZmZmZmZmZiwKLQkweDAyMDFmODAwLCAweDAwMTAwNmY0LCAweDA0MDIwMDE5LCAweDRhMDM3MGU4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA3M2EsIDB4MDQwMjAwMTksIDB4NGEwMzcwZTgsCiAJMHgwMDAwMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwYzAwMCwgMHg1ODA0MjAwMywKIAkweDgyMTAyNTAwLCAweDAwZmZmZmZmLCAweDQyMDAxMDAwLCAweDAwZmZmZmZmLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA2ZjQsIDB4MDQwMjAwMGQsIDB4NGEwMzc4ZTgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDczYSwgMHgwNDAyMDAwZCwgMHg0YTAzNzhlOCwKIAkweDAwMDAwMDAzLCAweDQyMDAwODAwLCAweDAwMDA4MDAwLCAweDU4MDQyMDAzLAogCTB4ODIxMDI1MDAsIDB4MDBmZmZmZmYsIDB4NDIwMDEwMDAsIDB4MDBmZmZmZmYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDZmNCwgMHgwNDAwMDAwYiwgMHg0YTAzYzAyMCwKKwkweDAyMDFmODAwLCAweDAwMTAwNzNhLCAweDA0MDAwMDBiLCAweDRhMDNjMDIwLAogCTB4MDAwMDQwMTAsIDB4NGEwM2MwMTEsIDB4NDAxMDAwMTEsIDB4MDQwMDYwMDAsCiAJMHg0MjAzZTAwMCwgMHg0MDAwMDAwMCwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwKLQkweDA0MDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTAwNzkxLCAweDQyMDAxMDAwLAotCTB4MDAxMGFiNGEsIDB4NDAwODAwMDAsIDB4ODAxNDA0ODAsIDB4ODIwMDFkMDAsCisJMHgwNDAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkNywgMHg0MjAwMTAwMCwKKwkweDAwMTBhOTcxLCAweDQwMDgwMDAwLCAweDgwMTQwNDgwLCAweDgyMDAxZDAwLAogCTB4ZmZmZmZmMDAsIDB4MDQwMjAwMDMsIDB4NDAwMDE4MDAsIDB4MDQwMWYwMDMsCiAJMHg0MjAwMTgwMCwgMHgwMDAwMDBmZiwgMHg0ODBiYzg0MCwgMHg0ODBmYzg0MiwKIAkweDA0MDExMDAwLCAweDQwMGMwMDAwLCAweDgwMDgxNDAwLCAweDQwMTQwMDAwLAogCTB4ODAwODA1ODAsIDB4MDQwMjA3ZjAsIDB4NDgxNzUwMGQsIDB4NDU3ODI4MDAsCiAJMHg1OWM0MDAwMCwgMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwgMHg4MDAwMDEyMCwKLQkweDgyMDAwNTgwLCAweDAwMDAyNDIyLCAweDA0MDIwMDA1LCAweDU5YTgwMDA1LAotCTB4ODQwMDA1NGUsIDB4NDgwMzUwMDUsIDB4MDQwMWYwMDgsIDB4NTllMDAwMDMsCi0JMHg4MjAwMDUwMCwgMHgwMDAzMDAwMCwgMHgwNDAwMDAwNCwgMHg1OWE4MDAwNSwKLQkweDg0MDAwNTU0LCAweDQ4MDM1MDA1LCAweDQyMDAwODAwLCAweDAwMDAwMDQwLAotCTB4NTlhODAwMDUsIDB4OGMwMDA1MTQsIDB4MDQwMjAwMGUsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMTAwMCwgMHg4MjE0MTQ4MCwgMHgwMDE3ZmZmZiwgMHgwNDAyMTAwOSwKLQkweDgwMDQwOTAyLCAweDgyMTQxNDgwLCAweDAwMTNmZmZmLCAweDA0MDIxMDA1LAotCTB4ODAwNDA5MDIsIDB4ODIxNDE0ODAsIDB4MDAxMWZmZmYsIDB4MDQwMDFiOGQsCi0JMHg0ODA3NTAwZSwgMHg0MjAwMTAwMCwgMHgwMDAwMDAyNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2NjgxLCAweDgyMDQwYzAwLCAweDAwMTBkMWMwLCAweDQ4MDc1MDBiLAotCTB4NGEwM2M4MTAsIDB4MDAxMDAwMDAsIDB4NGEwM2M4MTEsIDB4MDAxMGFiNGEsCi0JMHg0YTAzYzgyOSwgMHgwMDAwMDAwNCwgMHg1OWU0MDAwMSwgMHg4MjAwMDU0MCwKLQkweDAwMDMwMDFkLCAweDQ4MDNjODAxLCAweDRhMDNjMDE0LCAweDAwMWMwMDFjLAotCTB4NDIwMDEwMDAsIDB4MDAwMDAwMWMsIDB4MDIwMWY4MDAsIDB4MDAxMDA2ZTIsCi0JMHg0MjAyYzAwMCwgMHgwMDEwZDFjMCwgMHg1OWFhYjAwYiwgMHg1OWFhYTAwYiwKLQkweDU5YWFhODBiLCAweDU5YWFjODBlLCAweDQ5Njc1MDY5LCAweDU5YTgwMDBiLAotCTB4NDgwMzUwMGMsIDB4MDQwMWZiZjUsIDB4MDIwMWY4MDAsIDB4MDAxMDc5MDMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDdiZSwgMHgwMjAxZjgwMCwgMHgwMDEwMDgwNywKLQkweDAyMDFmODAwLCAweDAwMTAxYTA1LCAweDAyMDFmODAwLCAweDAwMTAxMzU0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDA5NjksIDB4MDIwMWY4MDAsIDB4MDAxMDEzNTQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMGY0YywgMHgwMjAxZjgwMCwgMHgwMDEwNjZjMSwKLQkweDA0MDFmYjFhLCAweDAyMDFmODAwLCAweDAwMTAyMjBlLCAweDAyMDFmODAwLAotCTB4MDAxMDUzYmIsIDB4MDIwMWY4MDAsIDB4MDAxMDRjOTAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjE5NCwgMHgwMjAxZjgwMCwgMHgwMDEwNWYyOCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxM2VkLCAweDAyMDFmODAwLCAweDAwMTAxMjZmLCAweDQyMDNlMDAwLAotCTB4ZjAwMDAwMDEsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsIDB4NTAwMDAwMDAsCi0JMHg4MjAwMDQ4MCwgMHgyNDIyMDAwMSwgMHgwNDAwMDAxNiwgMHg1OWUwMDAwMiwKLQkweDhjMDAwNTFlLCAweDQyMDAwMDAwLCAweDdmZmUwMGZlLCAweDA0MDIwMDAzLAotCTB4NDIwMDAwMDAsIDB4N2ZmZTAxZmUsIDB4NTAwMDA4MDAsIDB4NDgwNzUwNTgsCi0JMHg4MDA0MDkyMCwgMHg4MjA0MDU4MCwgMHgwMDAwMDEzYSwgMHgwNDAwMDAwNCwKLQkweDgyMDQwNTgwLCAweDAwMDAwMTNiLCAweDA0MDIwMDA2LCAweDU5YTgwMDA1LAotCTB4ODQwMDA1NTIsIDB4NDgwMzUwMDUsIDB4NGEwMzc4ZTQsIDB4MDAwYzAwMDAsCi0JMHg0YTAzYzAxOCwgMHgwMDAwMDAwZiwgMHg0MjAzZTAwMCwgMHgyMDAwMDUxMSwKLQkweDQyMDNlMDAwLCAweDUwMDEwMDAwLCAweDRhMDNjMDIwLCAweDAwMDAwMDAwLAotCTB4MDQwMjcwMTMsIDB4NTllMDAwMjAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDIsCi0JMHgwNDAyMDAwZiwgMHg0YTAzYzAyMCwgMHgwMDAwNDAwMCwgMHg0YTAzYzAxMSwKLQkweDQwMDAwMDEwLCAweDA0MDA2MDAwLCAweDQyMDNlMDAwLCAweDQwMDAwMDAwLAotCTB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsIDB4NGEwM2MwMTcsCi0JMHgwMDAwMDAwMCwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg0MjAyZDgwMCwKLQkweDAwMDAwMDAwLCAweDQyMDNlMDAwLCAweGIwNjAwMDAwLCAweDU5YTgwMDA1LAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsIDB4OGMwMDA1MTIsIDB4MDQwMjAwMDcsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwZiwgMHg4YzAwMDUxNCwgMHgwNDAyMDAwMywKLQkweDQyMDAwODAwLCAweDAwMDAwMDAxLCAweDQwMDdmODAwLCAweDU5YTgwMDA1LAotCTB4OGMwMDA1MTQsIDB4MDIwMjAwMDAsIDB4MDAwMjAwMDQsIDB4NTllMDAwMDMsCi0JMHg4MjAwMDUwMCwgMHgwMDAzMDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMCwKLQkweDA0MDIwYWY4LCAweDAyMDFmMDAwLCAweDAwMDIwMDA0LCAweDRkZjAwMDAwLAotCTB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsIDB4NDE2YzAwMDAsIDB4ODIwMDBjODAsCi0JMHgwMDAwMDAwOCwgMHgwNDAyMWFlZiwgMHgwYzAxZjgwNCwgMHg1YzAzZTAwMCwKLQkweDAyMDFmMDAwLCAweDAwMDIwMDA4LCAweDAwMTAwMmY3LCAweDAwMTAwMzBhLAotCTB4MDAxMDAzZDcsIDB4MDAxMDAyZjYsIDB4MDAxMDA0NTIsIDB4MDAxMDAyZjYsCi0JMHgwMDEwMDJmNiwgMHgwMDEwMDU5MywgMHgwNDAxZmFlMiwgMHg0MjAwMDgwMCwKLQkweDAwMTBiNGE0LCAweDU4MDQwMDFkLCAweDQ4MDNjODU3LCAweDhjMDAwNTAwLAotCTB4MDQwMDAwMGQsIDB4ODQwMDA1MDAsIDB4NDgwMDA4MWQsIDB4NDIwMmQ4MDAsCi0JMHgwMDAwMDAwNCwgMHgwNDAxZmJkMywgMHg0OWYzYzg1NywgMHg1YzAwMDgwMCwKLQkweDVjMDAwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAzZTAwLCAweDRjMDAwMDAwLAotCTB4NGMwNDAwMDAsIDB4MWMwMWYwMDAsIDB4MDQwMWZiYmQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTEzYiwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwKKwkweDgyMDAwNTgwLCAweDAwMDAyNDIyLCAweDA0MDIwMDA1LCAweDU5YTgwMDZmLAorCTB4ODQwMDA1NDAsIDB4NDgwMzUwNmYsIDB4MDQwMWYwMGEsIDB4NTllMDAwMDMsCisJMHg4MjAwMDUwMCwgMHgwMDAzMDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAxMDAwMCwKKwkweDA0MDIwMDA0LCAweDU5YTgwMDZmLCAweDg0MDAwNTQyLCAweDQ4MDM1MDZmLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwNDAsIDB4NTlhODAwNmYsIDB4OGMwMDA1MDIsCisJMHgwNDAyMDAwZSwgMHg0MjAwMDgwMCwgMHgwMDAwMTAwMCwgMHg4MjE0MTQ4MCwKKwkweDAwMTdmZmZmLCAweDA0MDIxMDA5LCAweDgwMDQwOTAyLCAweDgyMTQxNDgwLAorCTB4MDAxM2ZmZmYsIDB4MDQwMjEwMDUsIDB4ODAwNDA5MDIsIDB4ODIxNDE0ODAsCisJMHgwMDExZmZmZiwgMHgwNDAwMWJjOCwgMHg0ODA3NTAwZSwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDI0LCAweDAyMDFmODAwLCAweDAwMTA2M2NmLCAweDgyMDQwYzAwLAorCTB4MDAxMGNmYzAsIDB4NDgwNzUwMGIsIDB4NGEwM2M4MTAsIDB4MDAxMDAwMDAsCisJMHg0YTAzYzgxMSwgMHgwMDEwYTk3MSwgMHg0YTAzYzgyOSwgMHgwMDAwMDAwNCwKKwkweDU5ZTQwMDAxLCAweDgyMDAwNTQwLCAweDAwMDMwMDFkLCAweDQ4MDNjODAxLAorCTB4NGEwM2MwMTQsIDB4MDAxYzAwMWMsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMWMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDcyOCwgMHg0MjAyYzAwMCwgMHgwMDEwY2ZjMCwKKwkweDU5YWFiMDBiLCAweDU5YWFhMDBiLCAweDU5YWFhODBiLCAweDU5YWFjODBlLAorCTB4NDk2NzUwNjksIDB4NTlhODAwMGIsIDB4NDgwMzUwMGMsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDZhMywgMHgwMjAxZjgwMCwgMHgwMDEwNzY4YSwgMHgwMjAxZjgwMCwKKwkweDAwMTAwODA0LCAweDAyMDFmODAwLCAweDAwMTAwODRkLCAweDAyMDFmODAwLAorCTB4MDAxMDFhNjAsIDB4MDIwMWY4MDAsIDB4MDAxMDEzYTQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDliNiwgMHgwMjAxZjgwMCwgMHgwMDEwMTNhNCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwZjlhLCAweDAyMDFmODAwLCAweDAwMTA2NDBmLCAweDA0MDFmYjU0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDFmYjUsIDB4MDIwMWY4MDAsIDB4MDAxMDUwOGIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGIzNiwgMHgwMjAxZjgwMCwgMHgwMDEwNWVjZCwKKwkweDAyMDFmODAwLCAweDAwMTA1YzYxLCAweDAyMDFmODAwLCAweDAwMTAxNDNkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDEyYmYsIDB4NDIwM2UwMDAsIDB4ZjAwMDAwMDEsCisJMHg0YTAzNTA3MCwgMHgwMDAwMDAxNCwgMHg0YTAzNTA3MSwgMHgwMDAwMDAwYiwKKwkweDRhMDM1MDcyLCAweDAwMDAwMDAxLCAweDRhMDM1MDczLCAweDAwMDAwMDAwLAorCTB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsIDB4NTAwMDAwMDAsIDB4ODIwMDA0ODAsCisJMHgyNDIyMDAwMSwgMHgwNDAwMDA0YSwgMHg1OWUwMDAwMiwgMHg4YzAwMDUxZSwKKwkweDQyMDAwMDAwLCAweDdmZmUwMGZlLCAweDA0MDAwMDAzLCAweDQyMDAwMDAwLAorCTB4N2ZmZTAxZmUsIDB4NTAwMDA4MDAsIDB4NDgwNzUwNTgsIDB4ODAwNDA5MjAsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDEzZSwgMHgwNDAyMDAwYiwgMHg1OWE4MDA2ZiwKKwkweDg0MDAwNTQ4LCAweDQ4MDM1MDZmLCAweDRhMDM1MDcwLCAweDAwMDAwMDU1LAorCTB4NGEwMzUwNzEsIDB4MDAwMDAwNTEsIDB4NGEwMzUwNzMsIDB4MDAwMDAwMGYsCisJMHgwNDAxZjAzMywgMHg4MjA0MDU4MCwgMHgwMDAwMDEzZiwgMHgwNDAyMDAwYiwKKwkweDU5YTgwMDZmLCAweDg0MDAwNTRhLCAweDQ4MDM1MDZmLCAweDRhMDM1MDcwLAorCTB4MDAwMDAwNTUsIDB4NGEwMzUwNzEsIDB4MDAwMDAwNTEsIDB4NGEwMzUwNzMsCisJMHgwMDAwMDAwZiwgMHgwNDAxZjAyNiwgMHg1OWUwMDAwMywgMHg4MjAwMDUwMCwKKwkweDAwMDMwMDAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLCAweDA0MDIwMDIwLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAxNDcsIDB4MDQwMDAwMTAsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDE0NSwgMHgwNDAyMDAxYSwgMHg1OWE4MDA2ZiwgMHg4NDAwMDU0NiwKKwkweDQ4MDM1MDZmLCAweDRhMDM1MDcwLCAweDAwMDAwMDMzLCAweDRhMDM1MDcxLAorCTB4MDAwMDAwMzAsIDB4NGEwMzUwNzIsIDB4MDAwMDAwMjAsIDB4NGEwMzUwNzMsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjAwYywgMHg1OWE4MDA2ZiwgMHg4NDAwMDU0NCwKKwkweDQ4MDM1MDZmLCAweDRhMDM1MDcwLCAweDAwMDAwMDMzLCAweDRhMDM1MDcxLAorCTB4MDAwMDAwMzAsIDB4NGEwMzUwNzIsIDB4MDAwMDAwMjAsIDB4NGEwMzUwNzMsCisJMHgwMDAwMDAwMSwgMHg0YTAzNzhlNCwgMHgwMDBjMDAwMCwgMHg1OWE4MDA2ZiwKKwkweDhjMDAwNTAyLCAweDA0MDAwMDA0LCAweDgyMDAwNTAwLCAweDAwMDAwMDMwLAorCTB4MDQwMDBiMjUsIDB4NGEwM2MwMTgsIDB4MDAwMDAwMGYsIDB4NDIwM2UwMDAsCisJMHgyMDAwMDUxMSwgMHg0MjAzZTAwMCwgMHg1MDAxMDAwMCwgMHg0YTAzYzAyMCwKKwkweDAwMDAwMDAwLCAweDA0MDI3MDEzLCAweDU5ZTAwMDIwLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDIsIDB4MDQwMjAwMGYsIDB4NGEwM2MwMjAsIDB4MDAwMDQwMDAsCisJMHg0YTAzYzAxMSwgMHg0MDAwMDAxMCwgMHgwNDAwNjAwMCwgMHg0MjAzZTAwMCwKKwkweDQwMDAwMDAwLCAweDU5ZTAwMDE3LCAweDhjMDAwNTA4LCAweDA0MDAwMDAzLAorCTB4NGEwM2MwMTcsIDB4MDAwMDAwMDAsIDB4NDIwM2UwMDAsIDB4MzAwMDAwMDEsCisJMHg0MjAyZDgwMCwgMHgwMDAwMDAwMCwgMHg0MjAzZTAwMCwgMHhiMDYwMDAwMCwKKwkweDU5YTgwODczLCAweDQwMDdmODAwLCAweDAyMDFmMDAwLCAweDAwMDIwMDA0LAorCTB4NGRmMDAwMDAsIDB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsIDB4NDE2YzAwMDAsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDAwOCwgMHgwNDAyMWFmYiwgMHgwYzAxZjgwNCwKKwkweDVjMDNlMDAwLCAweDAyMDFmMDAwLCAweDAwMDIwMDA4LCAweDAwMTAwMzI4LAorCTB4MDAxMDAzM2IsIDB4MDAxMDA0MTEsIDB4MDAxMDAzMjcsIDB4MDAxMDA0OGMsCisJMHgwMDEwMDMyNywgMHgwMDEwMDMyNywgMHgwMDEwMDVkMCwgMHgwNDAxZmFlZSwKKwkweDQyMDAwODAwLCAweDAwMTBiMmEwLCAweDU4MDQwMDFkLCAweDQ4MDNjODU3LAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwMGQsIDB4ODQwMDA1MDAsIDB4NDgwMDA4MWQsCisJMHg0MjAyZDgwMCwgMHgwMDAwMDAwNCwgMHgwNDAxZmJlOCwgMHg0OWYzYzg1NywKKwkweDVjMDAwODAwLCAweDVjMDAwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAzZTAwLAorCTB4NGMwMDAwMDAsIDB4NGMwNDAwMDAsIDB4MWMwMWYwMDAsIDB4MDQwMWZiZDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwgMHgwNDAwMDAxMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZTIzLCAweDA0MDIwMDM1LCAweDU5OTQwMDIzLCAweDgyMDAwNTgwLAorCTB4MDAxMDQwMWIsIDB4MDQwMjAwMDQsIDB4NTk5NDAwMjIsIDB4ODAwMDAxYzAsCiAJMHgwNDAyMDAyZSwgMHg1OWM0MDAwNiwgMHg4MjAwMDU0MCwgMHgwMDAwMDBjMCwKLQkweDQ4MDM4ODA2LCAweDA0MDFmMDI5LCAweDAyMDFmODAwLCAweDAwMTA1MGEyLAotCTB4ODM2YzA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwYmMsIDB4NTlhODAwMTcsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAyMDBiOCwgMHg0OTdiNTAxMCwKKwkweDQ4MDM4ODA2LCAweDA0MDFmMDI5LCAweDAyMDFmODAwLCAweDAwMTA0ZDc2LAorCTB4ODM2YzA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwYmUsIDB4NTlhODAwMTcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAyMDBiYSwgMHg0OTdiNTAxMCwKIAkweDRhMDM4ODkzLCAweDAwMDAwMDAxLCAweDQyMDAxMDAwLCAweDAwMDAwMGYwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE5M2QsIDB4MDIwMWY4MDAsIDB4MDAxMDUxNDksCisJMHgwMjAxZjgwMCwgMHgwMDEwMTlhYSwgMHgwMjAxZjgwMCwgMHgwMDEwNGUxYiwKIAkweDU5YzQxMDA2LCAweDA0MDIwMDA2LCAweDgyMDgxNTQwLCAweDAwMDAwMGYxLAogCTB4ODIwODE1MDAsIDB4YmJmZmZmZmYsIDB4MDQwMWYwMDMsIDB4ODIwODE1NDAsCi0JMHg0NDAwMDBmMSwgMHg0ODBiODgwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNjA5ZSwKLQkweDRhMDM3OGU0LCAweDAwMDAyMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODNhLAotCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDIwMDEwMDAsIDB4MDAwMDgwMzAsCi0JMHg0OTdiNTAxMywgMHgwNDAxZjAzNSwgMHgwMjAxZjgwMCwgMHgwMDEwM2IzOCwKKwkweDQ0MDAwMGYxLCAweDQ4MGI4ODA2LCAweDAyMDFmODAwLCAweDAwMTA1ZGUyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDY5YjgsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MzgsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg0MjAwMTAwMCwgMHgwMDAwODAzMCwKKwkweDQ5N2I1MDEzLCAweDA0MDFmMDM3LCAweDAyMDFmODAwLCAweDAwMTAzOTUxLAogCTB4NTljNDAwYTQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA0ODAsCi0JMHgwMDAwMDAwNywgMHgwNDAyMTA5MSwgMHgwMjAxZjgwMCwgMHgwMDEwNjA5ZSwKKwkweDAwMDAwMDA3LCAweDA0MDIxMDkzLCAweDAyMDFmODAwLCAweDAwMTA1ZGUyLAogCTB4NTljNDAwYTMsIDB4ODIwMDA1MDAsIDB4ZmZlZmZmZmYsIDB4NDgwMzg4YTMsCiAJMHg1OWE4MDA0YiwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MTM5LCAweDA0MDFmMDg1LCAweDU5YTgwMDE1LCAweDg0MDAwNTQ2LAotCTB4NDgwMzUwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDUxNDEsIDB4NTljNDEwMDYsCisJMHgwMDEwM2Y1MywgMHgwNDAxZjA4NywgMHg1OWE4MDAxNSwgMHg4NDAwMDU0NiwKKwkweDQ4MDM1MDE1LCAweDAyMDFmODAwLCAweDAwMTA0ZTEzLCAweDU5YzQxMDA2LAogCTB4MDQwMjAwMDYsIDB4ODIwODE1NDAsIDB4NDQwMDAwMDEsIDB4ODIwODE1MDAsCiAJMHhmZmZmZmYwZiwgMHgwNDAxZjAwMywgMHg4MjA4MTU0MCwgMHg0NDAwMDBmMSwKIAkweDQ4MGI4ODA2LCAweDQ5N2I5MDA1LCAweDRhMDM4ODAyLCAweDAwMDBmZmZmLAotCTB4NGEwMzc4ZTQsIDB4MDAwMDMwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MGMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OWE4MTAxMCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA2Yzc4LCAweDQyMDAxMDAwLAotCTB4MDAwMDgwMTAsIDB4NTlhODE4MGEsIDB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTgxNSwgMHg1OWE4MDgwNSwgMHg4MjA0MGQwMCwKLQkweGZmZmZmZmRmLCAweDQ4MDc1MDA1LCAweDAyMDFmODAwLCAweDAwMTA0ODNkLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMDAwMGEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDEzZSwgMHgwNDAwMDAwNywgMHg0YTAzNTAxMywgMHgwMDAwMDAwMSwKLQkweDQ5N2I1MDIxLCAweDAyMDFmODAwLCAweDAwMTAzYzgwLCAweDA0MDFmMDRmLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ4ZWMsIDB4MDQwMDAwMDUsIDB4NTljNDEwMDIsCi0JMHg4NDA4MTUwYywgMHg0ODBiODgwMiwgMHgwNDAxZjAxMiwgMHgwMjAxZjgwMCwKLQkweDAwMTA1MTNiLCAweDA0MDIwMDA2LCAweDU5YTgwMDFkLCAweDgwMDAwNTQwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDkzMGYsIDB4MDQwMWYwMGEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTMwZiwgMHg1OWE4MDAyNiwgMHg4YzAwMDUwNiwgMHgwNDAyMDAwNSwKLQkweDU5YTgwMDFkLCAweDgwMDAwNTQwLCAweDAyMDIwODAwLCAweDAwMTA0MjQ1LAotCTB4NDk3YjUwMjgsIDB4NDk3YjUwMjcsIDB4NDk3YjUwMTgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTEzYiwgMHg1OWE4MTAyNiwgMHgwNDAyMDAwYSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNjJhLCAweDgwMDAxNTgwLCAweDU5YTgwMDJhLCAweDgyMDAwNTAwLAotCTB4ZmZmZjAwMDAsIDB4ODAwNDBkNDAsIDB4NDgwNzUwMmEsIDB4MDQwMWYwMDUsCi0JMHg1OWE4MDAyYSwgMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwgMHg0ODAzNTAyYSwKLQkweDU5OWMwMDE3LCAweDhjMDAwNTBhLCAweDA0MDAwMDAyLCAweDg0MDgxNTQ0LAotCTB4NDgwYjUwMjYsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMDAwMDQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTYyYSwgMHg0ODA3ODg4MCwgMHg0MjAwMTAwMCwKLQkweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA3MGIwLCAweDQ5N2I1MDI4LAotCTB4NDk3YjUwMWIsIDB4NGEwMzUwMWMsIDB4MDAwMGZmZmYsIDB4NGEwMzc4ZTQsCi0JMHgwMDAwMDBjMCwgMHg0MjAyZDgwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwKLQkweDAwMTA1MTNiLCAweDA0MDAwMDA3LCAweDU5YTgwMDI2LCAweDgyMDAwNTAwLAotCTB4MDAwMDAwMGMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMDMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMWU0NSwgMHgxYzAxZjAwMCwgMHg1OWE4MDAxYywKLQkweDgyMDAwNTgwLCAweDAwMDBmZmZmLCAweDA0MDAwMDA0LCAweDAyMDFmODAwLAotCTB4MDAxMDFlNDUsIDB4MDQwMWYwNzQsIDB4NTlhODAwMjYsIDB4OGMwMDA1MGEsCi0JMHgwNDAyMDAwMywgMHg4YzAwMDUwNiwgMHgwNDAwMDAxYywgMHg4YzAwMDUwMCwKLQkweDA0MDAwMDFhLCAweDRhMDM4ODAyLCAweDAwMDBmZmJmLCAweDhjMDAwNTAyLAotCTB4MDQwMDAwMTYsIDB4NTk5YzAwMTgsIDB4OGMwMDA1MTYsIDB4MDQwMjAwMTAsCi0JMHg1OWE4MDAyNywgMHg4MjAwMDU4MCwgMHgwMDAwZmZmZiwgMHgwNDAwMDAwYywKLQkweDAyMDFmODAwLCAweDAwMTAxZjlhLCAweDU5YTgwMDI2LCAweDhjMDAwNTA0LAotCTB4MDQwMjAwNWQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDMsIDB4NDE3YTU4MDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMWZiZiwgMHgwNDAxZjA1NywgMHg1OWE4MDAyOCwKLQkweDgwMDAwNTQwLCAweDA0MDIwMDU0LCAweDU5YTgwMDI2LCAweDhjMDAwNTA4LAotCTB4MDQwMjAwMDUsIDB4NTlhODAwMWIsIDB4ODAwMDA1NDAsIDB4MDQwMjAwNGUsCi0JMHgwNDAxZjAwMywgMHg4YzAwMDUxNiwgMHgwNDAwMDA0YiwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OGVjLCAweDA0MDIwMDQ4LCAweDU5OWMwMDE4LCAweDhjMDAwNTE2LAotCTB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDRjNTEsIDB4MDQwMjAwNDIsCi0JMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAwMDAwZCwgMHg0MjAwYjAwMCwKLQkweDAwMDAwN2YwLCAweDQxN2E4ODAwLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LAotCTB4MDQwMjAwMDQsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MWEsIDB4MDQwMjAwMzYsCi0JMHg4MTQ2ODgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmOCwgMHg0YTAzODgwMiwKLQkweDAwMDBmZmZmLCAweDQyMDAxODAwLCAweDAwMTBiNGViLCAweDA0MDFmYjhjLAotCTB4NDIwMDE4MDAsIDB4MDAxMGI0ZjgsIDB4MDQwMWZiODksIDB4NTlhODAwMDUsCi0JMHg4NDAwMDUwMiwgMHg0ODAzNTAwNSwgMHg0YTAzNzhlNCwgMHgwMDAwMDA4MCwKLQkweDQyMDJkODAwLCAweDAwMDAwMDAzLCAweDRhMDM1MDFjLCAweDAwMDBmZmZmLAotCTB4MDQwMWZhN2YsIDB4ODAwMDA1ODAsIDB4MDIwMWY4MDAsIDB4MDAxMDE1OTAsCi0JMHg1OTljMDAxOCwgMHg4YzAwMDUxNiwgMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTAzYjEwLCAweDA0MDFmMDA5LCAweDQyMDAxODAwLCAweDAwMDBmZmZmLAotCTB4NDIwMDIwMDAsIDB4MDAwMDAwMDYsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwM2FhZSwgMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwKLQkweDA0MDAwMDBiLCAweDU5YzQwMDA2LCAweDAyMDFmODAwLCAweDAwMTA1MTNiLAotCTB4MDQwMDAwMDQsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmMGYsIDB4MDQwMWYwMDMsCi0JMHg4MjAwMDUwMCwgMHhmYmZmZmZmZiwgMHg0ODAzODgwNiwgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZjM2LCAweDFjMDFmMDAwLCAweDRjMDQwMDAwLCAweDRjMDgwMDAwLAotCTB4NGMxMDAwMDAsIDB4NTlhODAwM2UsIDB4ODIwMDBjODAsIDB4MDAwMDAwMDQsCi0JMHgwNDAyMTk4MCwgMHgwYzAxZjgwNSwgMHg1YzAwMjAwMCwgMHg1YzAwMTAwMCwKLQkweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDAwMTAwNDYyLCAweDAwMTAwNGVhLAotCTB4MDAxMDA1MTYsIDB4MDAxMDA1NzcsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTU5MCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA5ZSwKLQkweDU5YzQwOGEzLCAweDgyMDQwZDAwLCAweGZmZmZmZmY3LCAweDQ4MDc4OGEzLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUxNDEsIDB4MDQwMDAwMGUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTE1MSwgMHgwNDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwNTE0OSwKLQkweDA0MDIwOTY0LCAweDU5YzQwMGEzLCAweDg0MDAwNTMyLCAweDg0MDAwNTcwLAotCTB4NDgwMzg4YTMsIDB4NGEwMzg4MDgsIDB4MDAwMDAwMDgsIDB4MDQwMWYwMTAsCi0JMHg1OWM0MDBhMywgMHg4NDAwMDUzMCwgMHg4MjAwMDUwMCwgMHhiZjdmZmZmZiwKLQkweDQ4MDM4OGEzLCAweDQyMDAwODAwLCAweDAwMDAwMGY4LCAweDAyMDFmODAwLAotCTB4MDAxMDQyMDAsIDB4NTljNDAwYTMsIDB4ODIwMDA1NDAsIDB4MDAwMTgwMDAsCi0JMHg4NDAwMDUxYywgMHg0ODAzODhhMywgMHg0OTdiODgwOCwgMHg1OWM0MDAwNiwKLQkweDgyMDAwNTAwLCAweGZiZmZmZjBlLCAweDQ4MDM4ODA2LCAweDQ5N2IyODIyLAotCTB4NDk3YjI4MjMsIDB4NDIwMDA4MDAsIDB4MDAwMDAxZjQsIDB4NDIwMDEwMDAsCi0JMHgwMDEwMDU5MSwgMHgwMjAxZjgwMCwgMHgwMDEwNWY4MywgMHg1OWM0MDgwNSwKLQkweDQyMDAxMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxOTNkLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE2M2IsIDB4MDQwMjAwMGEsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMTg4YywgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxODIxLCAweDA0MDFmMDIyLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE2NDIsIDB4MDQwMjAwMDgsIDB4NDE3ODAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTg4YywgMHg0MTc4MDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxODIxLCAweDA0MDFmMDE4LCAweDAyMDFmODAwLCAweDAwMTAxNjQ5LAotCTB4MDQwMjAwMGEsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTg4YywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwKLQkweDAwMTAxODIxLCAweDA0MDFmMDBjLCAweDAyMDFmODAwLCAweDAwMTAxNjUwLAotCTB4MDQwMjA5MTgsIDB4NTlhODAwNDksIDB4ODAwMDAxYzAsIDB4MDQwMDAwMDYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTY1NiwgMHg0YTAzNTAzZSwgMHgwMDAwMDAwMSwKLQkweDA0MDFmMDIxLCAweDAyMDFmODAwLCAweDAwMTAxOTI3LCAweDRhMDM1MDNlLAotCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDUxNDEsIDB4MDQwMDAwMGMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwKLQkweDAwMTA1MTQ5LCAweDA0MDIwOTAzLCAweDRhMDM1MDMzLCAweDAwMDAwMDAxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUwYTIsIDB4MDQwMWYwMGYsIDB4NTljNDAwYTQsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwKLQkweDA0MDAwMDAzLCAweDRhMDM4ODA1LCAweDA0MDAwMDAwLCAweDU5YzQwMGEzLAotCTB4ODIwMDA1NDAsIDB4MDAwMWMwMDAsIDB4NDgwMzg4YTMsIDB4ODQwMDA1MjAsCi0JMHg0ODAzODhhMywgMHgxYzAxZjAwMCwgMHgwNDAxZjhhMywgMHgwNDAyMDAwNCwKLQkweDRhMDM1MDNlLCAweDAwMDAwMDAzLCAweDA0MDFmMDI3LCAweDAyMDFmODAwLAotCTB4MDAxMDE2NTAsIDB4MDQwMjAwMTEsIDB4NTlhODAwNDksIDB4ODAwMDAxYzAsCi0JMHgwNDAwMDAwZSwgMHgwMjAxZjgwMCwgMHgwMDEwMTY1NiwgMHg1OWE4MDA0OCwKLQkweDhjMDAwNTFlLCAweDA0MDAwMDFjLCAweDAyMDFmODAwLCAweDAwMTA1MTQ5LAotCTB4MDQwMjAwMDksIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTBhMiwgMHgwNDAxZjAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwMThkMywKLQkweDA0MDIwMDExLCAweDAyMDFmODAwLCAweDAwMTAxODE1LCAweDRhMDM1MDNlLAotCTB4MDAwMDAwMDIsIDB4NDk3YjUwNDksIDB4NTljNDAwYTMsIDB4ODQwMDA1MjAsCi0JMHg0ODAzODhhMywgMHg0OTdiMjgyMiwgMHg0OTdiMjgyMywgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDJkLCAweDQyMDAxMDAwLCAweDAwMTAwNTkxLCAweDAyMDFmODAwLAotCTB4MDAxMDVmODMsIDB4MWMwMWYwMDAsIDB4MDQwMWY4NzcsIDB4MDQwMjAwMDQsCi0JMHg0YTAzNTAzZSwgMHgwMDAwMDAwMywgMHgwNDAxZjA1YiwgMHg0YTAzODgwNSwKLQkweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTAxOGQzLCAweDA0MDIwMDUwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUxNDksIDB4MDQwMDAwNDQsIDB4NTljNDAwYTQsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwKLQkweDA0MDAwMDIwLCAweDU5YzQwMDA1LCAweDhjMDAwNTM0LCAweDA0MDIwMDFkLAotCTB4NTk5NDAwMjIsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwNDYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwgMHgwNDAyMDA0MywgMHg0YTAzODgwNSwKLQkweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTA1MTk2LCAweDRhMDM1MDMyLAotCTB4MDAwMGFhYWEsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDAsIDB4NTljNDA4YTMsCi0JMHg4MjA0MGQ0MCwgMHgwMDAwMDAwOCwgMHg0ODA3ODhhMywgMHg0MjAyZDgwMCwKLQkweDAwMDAwMDAxLCAweDRhMDM1MDNlLCAweDAwMDAwMDAwLCAweDRhMDM4ODA1LAotCTB4MDAwMDAwMDEsIDB4NDk3YjI4MjIsIDB4NDk3YjI4MjMsIDB4MDQwMWYwMWYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwgMHgwNDAyMDAwNywgMHg1OWE4MDAzMiwKLQkweDgyMDAwNTgwLCAweDAwMDBhYWFhLCAweDA0MDIwMDAzLCAweDRhMDM1MDEwLAotCTB4MDBmZmZmZmYsIDB4NDk3YjUwMzIsIDB4NTljNDAwMDYsIDB4ODIwMDA1NDAsCi0JMHgwNDAwMDAwMSwgMHg0ODAzODgwNiwgMHg1OWE4MDgwNSwgMHg4YzA0MGQwNiwKLQkweDA0MDIwMDA1LCAweDU5YzQwOGEzLCAweDgyMDQwZDQwLCAweDAwMDAwMDA4LAotCTB4NDgwNzg4YTMsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsIDB4NGEwMzUwM2UsCi0JMHgwMDAwMDAwMCwgMHg0YTAzODgwNSwgMHgwMDAwMDAwMSwgMHg0OTdiMjgyMiwKLQkweDQ5N2IyODIzLCAweDA0MDFmMDEwLCAweDU5YzQwMDA1LCAweDgyMDAwNTAwLAotCTB4MDAwMDAwYzAsIDB4MDQwMDAwMGMsIDB4NTljNDAwMDYsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDBmMSwgMHg0ODAzODgwNiwgMHgwNDAxZjdlZiwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNjUwLCAweDA0MDIwMDA0LCAweDU5YTgwMDQ5LCAweDgwMDAwMWMwLAotCTB4MDQwMjA3YTQsIDB4NDk3Yjg4ODUsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMTU5MCwKLQkweDRhMDM1MDNlLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNjUwLAotCTB4MDQwMjAwMGIsIDB4NTlhODAwNTIsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMDQsCi0JMHg4MDAwMDA0MCwgMHg0ODAzNTA1MiwgMHgwNDAyMDAwNSwgMHg0YTAzNTA1MiwKLQkweDAwMDAwMDBhLCAweDRhMDM1MDQ5LCAweDAwMDAwMDAxLCAweDQ5N2I4ODg1LAotCTB4MDQwMWYwZWQsIDB4NTk5NDAwMjIsIDB4NTk5NDA4MjMsIDB4ODAwNDA1NDAsCi0JMHgxYzAxZjAwMCwgMHg0OTdiMjgyMywgMHgxYzAxZjAwMCwgMHg0YzA4MDAwMCwKLQkweDQyMDAxMDAwLCAweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTAxOTNkLAotCTB4NWMwMDEwMDAsIDB4MWMwMWYwMDAsIDB4NGEwMzUwNWMsIDB4MDAwMDAwMDQsCi0JMHg0YTAzNTA1ZCwgMHgwMDAwMDAwMCwgMHg0YTAzNTA1ZSwgMHgwMDAwMDAxMCwKLQkweDRhMDM1MDVmLCAweDAwMDAwMDAyLCAweDRhMDM1MDEwLCAweDAwZmZmZmZmLAotCTB4MDIwMWY4MDAsIDB4MDAxMDkzMGYsIDB4NGEwMzUwMmEsIDB4MjAyMDAwMDAsCi0JMHg0YTAzNTAyYiwgMHg4ODAwMDIwMCwgMHg0YTAzNTAyYywgMHgwMGZmMDAxZiwKLQkweDRhMDM1MDJkLCAweDAwMDAwN2QwLCAweDRhMDM1MDJlLCAweDgwMDAwMDAwLAotCTB4NGEwMzUwMmYsIDB4MDAwMDAyMDAsIDB4NGEwMzUwMzAsIDB4MDBmZjAwMDAsCi0JMHg0YTAzNTAzMSwgMHgwMDAxMDAwMCwgMHg0YTAzNTAzYSwgMHg1MTRjNGY0NywKLQkweDRhMDM1MDNiLCAweDQ5NDMyMDIwLCAweDFjMDFmMDAwLCAweDRkNDQwMDAwLAotCTB4NDE3YTg4MDAsIDB4NDE3ODA4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsCi0JMHgwNDAyMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAyMDAwMiwKLQkweDgwMDQwODAwLCAweDgxNDY4ODAwLCAweDgzNDQwNTgwLCAweDAwMDAwN2YwLAotCTB4MDQwMjA3ZjYsIDB4NWMwMjg4MDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsCi0JMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywgMHgwNDAxZjgwOSwKLQkweDQ4NWZjODU3LCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDVjMDAwMDAwLAotCTB4NGQ3ODAwMDAsIDB4NDIwMGI4MDAsIDB4MDAwMDgwMDIsIDB4MDQwMWYwMDYsCi0JMHg0ODVmYzg1NywgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg0MjAwYjgwMCwKLQkweDAwMDA4MDAyLCAweDA0MDA2MDAwLCAweDRjMDAwMDAwLCAweDRjMDQwMDAwLAotCTB4NTliYzAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwMSwgMHgwNDAyMDAwNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA2YzZjLCAweDVjMDAwODAwLCAweDQ4MDdjMDI1LAotCTB4ODAwNDA5MjAsIDB4NDgwN2MwMjYsIDB4NWMwMDAwMDAsIDB4NDgwM2MwMjMsCi0JMHg4MDAwMDEyMCwgMHg0ODAzYzAyNCwgMHg1YzAwMDAwMCwgMHg0ODAzYzg1NywKLQkweDQ4MDNjMDIxLCAweDgwMDAwMTIwLCAweDQ4MDNjMDIyLCAweDQxZjgwMDAwLAotCTB4NDgwM2MwMjcsIDB4ODAwMDAxMjAsIDB4NDgwM2MwMjgsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMTAwMCwgMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwgMHgyNDMyMDAwMSwKLQkweDQ4MDNjODU3LCAweDA0MDAxMDRmLCAweDQyMDAwODAwLCAweDAwMDAwMDY0LAotCTB4ODAwNDA4NDAsIDB4MDQwMDAwMDcsIDB4NGEwMzAwMDAsIDB4MDAwMDAwMDEsCi0JMHg0MDAwMDAwMCwgMHg1OTgwMDAwMCwgMHg4YzAwMDUwMCwgMHgwNDAwMDdmOSwKLQkweDA0MDAwMDQyLCAweDQyMDAwODAwLCAweDAwMTBjMWEzLCAweDQ2MDAwODAwLAotCTB4ZmFjZWZhY2UsIDB4ODAwNDA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDdhMDAsCi0JMHg1ODA4MDAxMywgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg1ODA4MDAxOSwKLQkweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDU4MDgwMDFhLCAweDQ0MDAwODAwLAotCTB4ODAwNDA4MDAsIDB4NTgwODAwMWIsIDB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsCi0JMHg1ODA4MDAxYywgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg1ODA4MDAxZiwKLQkweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDQyMDAxMDAwLCAweDAwMDA3YTQwLAotCTB4NDIwMDE4MDAsIDB4MDAwMDAwMGIsIDB4NTAwODAwMDAsIDB4NDQwMDA4MDAsCi0JMHg4MDA4MTAwMCwgMHg4MDA0MDgwMCwgMHg4MDBjMTg0MCwgMHgwNDAyMDdmYiwKLQkweDQyMDAxODAwLCAweDAwMDAwMDAzLCAweDQyMDAxMDAwLCAweDAwMDA3YjAwLAotCTB4NDgwYzEwMDMsIDB4NTgwODAwMDUsIDB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsCi0JMHg4MDBjMTg0MCwgMHgwNDAyMTdmYiwgMHg0MjAwMTAwMCwgMHgwMDAwN2MwMCwKLQkweDU4MDgwMDAyLCAweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDU4MDgwMDAzLAotCTB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NTgwODAwMjAsIDB4NDQwMDA4MDAsCi0JMHg4MDA0MDgwMCwgMHg1ODA4MDAyMSwgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwKLQkweDU4MDgwMDIyLCAweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDU4MDgwMDIzLAotCTB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NGEwMzAwMDAsIDB4MDAwMDAwMDAsCi0JMHg0ODVmYzAyMCwgMHg5MDVjYjljMCwgMHg4MjVjYmQ0MCwgMHgwMDAwMDAxMiwKLQkweDQ4NWZjMDExLCAweDQyMDNlMDAwLCAweDQwMDAwMDAwLCAweDQyMDJkODAwLAotCTB4MDAwMDAwMDUsIDB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsCi0JMHg0YTAzYzAxNywgMHgwMDAwMDAwMiwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwKLQkweDA0MDFmODFhLCAweDA0MDFmN2ZmLCAweDRhMDNjODUwLCAweDAwMTBjMWJmLAotCTB4NGEwM2M4NTEsIDB4MDAxMGQxYmUsIDB4NGEwM2M4NTMsIDB4MDAwMDA4MDAsCi0JMHg0YTAzYzg1NSwgMHgwMDAxZWI1YSwgMHg1OWU0MDAwMSwgMHg4MjAwMDU0MCwKLQkweDAwMDAzZjAwLCAweDQ4MDNjODAxLCAweDRhMDNiMTA0LCAweDcwMDAwMDAyLAotCTB4NGEwM2E4MDQsIDB4NzAwMDAwMDIsIDB4NGEwM2IwMDQsIDB4NzAwMDAwMDIsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjhlYywgMHg0OTc4MDAwMSwgMHg0OTc4MDAwMiwKLQkweDFjMDFmMDAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDZiLCAweDhjMDAwNTMwLAotCTB4MDQwMjA3ZmUsIDB4NGMwODAwMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsCi0JMHgwNDAxZjg2MiwgMHg1YzAwMTAwMCwgMHg0MjAxZDAwMCwgMHgwMDAyOGIwYSwKLQkweDAyMDFmODAwLCAweDAwMTA2MDhlLCAweDRjMDgwMDAwLCAweDQyMDAxMDAwLAotCTB4MDAwMDAwMDgsIDB4MDQwMWY4NTksIDB4NWMwMDEwMDAsIDB4NDIwMWQwMDAsCi0JMHgwMDAyOGIwYSwgMHgwMjAxZjgwMCwgMHgwMDEwNjA4ZSwgMHg0YzA4MDAwMCwKLQkweDQyMDAxMDAwLCAweDAwMDAwMDEwLCAweDA0MDFmODUwLCAweDVjMDAxMDAwLAotCTB4NDIwMWQwMDAsIDB4MDAwMjhiMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsCi0JMHgwNDAxZjdlMiwgMHg4YzAwMDUwYywgMHg1OWE4MDg2YiwgMHgwNDAyMDAwMywKLQkweDg0MDQwZDMwLCAweDA0MDFmMDA2LCAweDg0MDQwZDcwLCAweDQ4MDc1MDZiLAotCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDAsIDB4MDQwMWYwNDAsIDB4NDgwNzUwNmIsCi0JMHg4MzZjMDUwMCwgMHgwMDAwMDAwNywgMHgwYzAxZjAwMSwgMHgwMDEwMDZlMSwKLQkweDAwMTAwNmM3LCAweDAwMTAwNmM3LCAweDAwMTAwNmFmLCAweDAwMTAwNmQ0LAotCTB4MDAxMDA2YzcsIDB4MDAxMDA2YzcsIDB4MDAxMDA2ZDQsIDB4NTlhODAwMDUsCi0JMHg4YzAwMDUxNCwgMHgwNDAyMDAxMywgMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwKLQkweDAwMDE4MDAwLCAweDgyMDQwNTgwLCAweDAwMDEwMDAwLCAweDA0MDAwMDBhLAotCTB4ODIwNDA1ODAsIDB4MDAwMDgwMDAsIDB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsCi0JMHg0MjAwNDAwMCwgMHgwNDAxZjAwNiwgMHg0MjAwMTAwMCwgMHgyMjAwMjAwMCwKLQkweDA0MDFmMDAzLCAweDQyMDAxMDAwLCAweDEyMDAxMDAwLCAweDA0MDFmMDI1LAotCTB4NDIwMDEwMDAsIDB4MDAwMDEwMDQsIDB4MDQwMWYwMjIsIDB4NTlhODAwMDUsCi0JMHg4YzAwMDUxNCwgMHgwNDAyMDAwOCwgMHg1OWE4MDA2YiwgMHg4YzAwMDUzNCwKLQkweDA0MDIwMDA0LCAweDQyMDAxMDAwLCAweDc0MDU3MDA1LCAweDA0MDFmODE5LAotCTB4MWMwMWYwMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDIwMDgsIDB4MDQwMWY3ZmMsCi0JMHg1OWE4MDA2YiwgMHg4YzAwMDUzNCwgMHgwNDAyMDAwYSwgMHg1OWE4MDAwNSwKLQkweDhjMDAwNTE0LCAweDA0MDAwMDA0LCAweDQyMDAxMDAwLCAweDI0MDUyMDA1LAotCTB4MDQwMWYwMGMsIDB4NDIwMDEwMDAsIDB4NzQwNTcwMDUsIDB4MDQwMWYwMDksCi0JMHgxYzAxZjAwMCwgMHgxYzAxZjAwMCwgMHg4MjA4MTUwMCwgMHgwMDAwMDAxYywKLQkweDgyMDgxNTQwLCAweDAwMWMwMDAwLCAweDQ4MGJjMDEzLCAweDFjMDFmMDAwLAotCTB4NTlhODAwNmIsIDB4OGMwMDA1MzAsIDB4MDQwMDAwMDIsIDB4ODQwODE1NzAsCi0JMHg0ODBiNTA2YiwgMHg4YzAwMDUzMCwgMHgwNDAyMDAwNSwgMHg4MjA4MTUwMCwKLQkweDAwMDA3MDAwLCAweDgwMDgxMTE0LCAweDA0MDFmZmYwLCAweDFjMDFmMDAwLAotCTB4NDE3ODAwMDAsIDB4NTAwNDE4MDAsIDB4ODAwYzA0MDAsIDB4ODAwNDA4MDAsCi0JMHg4MDEwMjA0MCwgMHgwNDAyMDdmYywgMHg4MDA4MDUwMCwgMHg4MDAwMDU0MCwKLQkweDFjMDFmMDAwLCAweDQyMDJmMDAwLCAweDAwMDAwMDAwLCAweDQxNzgwMDAwLAotCTB4NDE3ODA4MDAsIDB4NDE3ODEwMDAsIDB4NDE3ODE4MDAsIDB4NDE3ODIwMDAsCi0JMHg0MTc4MjgwMCwgMHg0MTc4MzAwMCwgMHg0MTc4MzgwMCwgMHg0MTc4NDAwMCwKLQkweDQxNzg0ODAwLCAweDQxNzg1MDAwLCAweDQxNzg1ODAwLCAweDQxNzg2MDAwLAotCTB4NDE3ODY4MDAsIDB4NDE3ODcwMDAsIDB4NDE3ODc4MDAsIDB4NDE3ODgwMDAsCi0JMHg0MTc4ODgwMCwgMHg0MTc4OTAwMCwgMHg0MTc4OTgwMCwgMHg0MTc4YTAwMCwKLQkweDQxNzhhODAwLCAweDQxNzhiMDAwLCAweDQxNzhiODAwLCAweDQxNzhjMDAwLAotCTB4NDE3OGM4MDAsIDB4NDE3OGQwMDAsIDB4NDE3OGQ4MDAsIDB4NDE3OGUwMDAsCi0JMHg0MTc4ZTgwMCwgMHg0MTc4ZjAwMCwgMHg0MTc4ZjgwMCwgMHg0MTc5MDAwMCwKLQkweDQxNzkwODAwLCAweDQxNzkxMDAwLCAweDQxNzkxODAwLCAweDQxNzkyMDAwLAotCTB4NDE3OTI4MDAsIDB4NDE3OTMwMDAsIDB4NDE3OTM4MDAsIDB4NDE3OTQwMDAsCi0JMHg0MTc5NDgwMCwgMHg0MTc5NTAwMCwgMHg0MTc5NTgwMCwgMHg0MTc5NjAwMCwKLQkweDQxNzk2ODAwLCAweDQxNzk3MDAwLCAweDQxNzk3ODAwLCAweDQxNzk4MDAwLAotCTB4NDE3OTg4MDAsIDB4NDIwMTkwMDAsIDB4MDAxMGI1MzcsIDB4NDIwMTk4MDAsCi0JMHgwMDEwYjUwZSwgMHg0MTc5YTAwMCwgMHg0MTc5YjAwMCwgMHg0MTc5YTgwMCwKLQkweDQxNzliODAwLCAweDQxNzljODAwLCAweDQxNzljMDAwLCAweDQxNzlkMDAwLAotCTB4NDE3OWQ4MDAsIDB4NDE3OWUwMDAsIDB4NDE3OWU4MDAsIDB4NDE3OWYwMDAsCi0JMHg0MTc5ZjgwMCwgMHg0MTdhMDAwMCwgMHg0MTdhMDgwMCwgMHg0MTdhMTAwMCwKLQkweDQxN2ExODAwLCAweDQxN2EyMDAwLCAweDQyMDIyODAwLCAweDAwMDA2MTAwLAotCTB4NDE3YTMwMDAsIDB4NDE3YTM4MDAsIDB4NDE3YTQwMDAsIDB4NDE3YTQ4MDAsCi0JMHg0MTdhNTAwMCwgMHg0MTdhNTgwMCwgMHg0MTdhNjAwMCwgMHg0MTdhNjgwMCwKLQkweDQxN2E3MDAwLCAweDQxN2E3ODAwLCAweDQxN2E4MDAwLCAweDQxN2E4ODAwLAotCTB4NDE3YTkwMDAsIDB4NDE3YTk4MDAsIDB4NDE3YWU4MDAsIDB4NDE3YWY4MDAsCi0JMHg0MjAzMDAwMCwgMHgwMDAwN2MwMCwgMHg0MjAzMTAwMCwgMHgwMDEwYjgwNiwKLQkweDQyMDMxODAwLCAweDAwMDBiZjFkLCAweDQyMDMyMDAwLCAweDAwMDBiZjMyLAotCTB4NDIwMzI4MDAsIDB4MDAxMGI3Y2UsIDB4NDIwMzMwMDAsIDB4MDAxMGI0NmUsCi0JMHg0MjAzNDAwMCwgMHgwMDEwYjRhNCwgMHg0MjAzMzgwMCwgMHgwMDEwYjRjMywKLQkweDQyMDM0ODAwLCAweDAwMTBiNTQ0LCAweDQyMDM1MDAwLCAweDAwMTBiNDAwLAotCTB4NDIwMzU4MDAsIDB4MDAxMGFjMDAsIDB4NDIwMzA4MDAsIDB4MDAxMGI1MDUsCi0JMHg0MTdiNjAwMCwgMHg0MjAzNjgwMCwgMHgwMDAwNmYwMCwgMHg0MjAzYzgwMCwKLQkweDAwMDAzMDAwLCAweDQyMDM3MDAwLCAweDAwMDBmZjAwLCAweDQyMDM3ODAwLAotCTB4MDAwMGJmMDAsIDB4NDIwMzgwMDAsIDB4MDAwMDc3MDAsIDB4NDIwMzg4MDAsCi0JMHgwMDAwNDAwMCwgMHg0MjAzOTAwMCwgMHgwMDAwNjAwMCwgMHg0MjAzOTgwMCwKLQkweDAwMTBiZWRiLCAweDQyMDNhMDAwLCAweDAwMDA3NjAwLCAweDQyMDNhODAwLAotCTB4MDAwMDc0MDAsIDB4NDIwM2IwMDAsIDB4MDAwMDcyMDAsIDB4NDIwM2I4MDAsCi0JMHgwMDAwNzEwMCwgMHg0MjAzYzAwMCwgMHgwMDAwNzAwMCwgMHg0MjAzZDAwMCwKLQkweDAwMDAwMDAwLCAweDQyMDNlODAwLCAweDAwMTAxYjk1LCAweDQxN2JkODAwLAotCTB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsIDB4MDAxMDAwMDAsIDB4NTAwNDAwMDAsCi0JMHg0YzAwMDAwMCwgMHg0MjAwMDAwMCwgMHgwMDAwYWFhYSwgMHg0NDAwMDgwMCwKLQkweDQyMDAxODAwLCAweDAwMDA1NTU1LCAweDQxNzgyMDAwLCAweDgyMTAyNDAwLAotCTB4MDAwMTAwMDAsIDB4NDAxMDAwMDAsIDB4ODAwNDJjMDAsIDB4NDQwYzI4MDAsCi0JMHg0MjAwMzAwMCwgMHgwMDAwMDAwYSwgMHg4MDE4MzA0MCwgMHgwNDAyMDdmZiwKLQkweDUwMTQwMDAwLCAweDgwMGMwNTgwLCAweDA0MDIwMDA0LCAweDUwMDQwMDAwLAotCTB4ODAwYzA1ODAsIDB4MDQwMjA3ZjIsIDB4NWMwMDAwMDAsIDB4NDQwMDA4MDAsCi0JMHg4MDE0Mjg0MCwgMHg0ODE3Yzg2MSwgMHgxYzAxZjAwMCwgMHg1OWE4MDgxZiwKLQkweDgwMDQwOWMwLCAweDA0MDIwMDA5LCAweDQ5NzgxYzBjLCAweDRhMDAxYTBjLAotCTB4MDAwMDAyMDAsIDB4NGEwMDE4MDQsIDB4MDcwMDAwMDAsIDB4NTlhODAwMTAsCi0JMHg5YzAwMDFjMCwgMHg0ODAwMTgwNSwgMHgwNDAxZmUwMSwgMHg5YzA0MDljMCwKLQkweDQ4MDQxODA2LCAweDFjMDFmMDAwLCAweDU5YTgwODBjLCAweDQwMDZkMDAwLAotCTB4NDIwMmI4MDAsIDB4MDAwMDAwMDEsIDB4NTlhODE4MGQsIDB4NDgwZmM4NTcsCi0JMHg4MjA0MTQwMCwgMHgwMDAwMDAxNCwgMHg4MjA4MjQwMCwgMHgwMDAwMDAxNCwKLQkweDQwMTAwMDAwLCAweDgwMGMwNDgwLCAweDA0MDAxMDA2LCAweDQ0MDgwODAwLAotCTB4NDAwODA4MDAsIDB4NDAxMDEwMDAsIDB4ODE1ZWI4MDAsIDB4MDQwMWY3ZjcsCi0JMHg0NTc4MDgwMCwgMHg0OTVmNTAyMCwgMHgxYzAxZjAwMCwgMHg4MzVjMDQ4MCwKLQkweDAwMDAwMDIwLCAweDA0MDAxMDA5LCAweDQ5NmJjODU3LCAweDgxNWViODQwLAotCTB4NDE2YTU4MDAsIDB4NTkyZWQwMDAsIDB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsCi0JMHg4MTJlNTljMCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg1MywKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQxN2E1ODAwLCAweDA0MDFmN2Y5LAotCTB4ODE1ZWI4NDAsIDB4MDQwMDEwMDgsIDB4NDE2YTU4MDAsIDB4NDkyZmM4NTcsCi0JMHg1OTJlZDAwMCwgMHg0OTdhNTgwMCwgMHg0OTdhNTgwMSwgMHg4MTJlNTljMCwKLQkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODUzLCAweDAyMDFmODAwLAotCTB4MDAxMGFhNDcsIDB4NDE3YWI4MDAsIDB4NDE3YTU4MDAsIDB4MDQwMWY3ZjgsCi0JMHg0OTJmYzg1NywgMHg0OTZhNTgwMCwgMHg0MTJlZDAwMCwgMHg4MTVlYjgwMCwKLQkweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLAotCTB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsIDB4ODEyZTU5YzAsIDB4MDQwMDAwMDcsCi0JMHg1OTJjMDAwMSwgMHg0OTdhNTgwMSwgMHg0YzAwMDAwMCwgMHgwNDAxZmZmMSwKLQkweDVjMDI1ODAwLCAweDA0MDFmN2Y5LCAweDFjMDFmMDAwLCAweDQ4MDdjODU2LAotCTB4NDIwMDcwMDAsIDB4MDAxMGI3ZjgsIDB4NGEwMDcwMDEsIDB4MDAwMDAwMDAsCi0JMHg1OWUwMDAwMywgMHg4MjAwMDU0MCwgMHgwMDAwODA4MCwgMHg0ODAzYzAwMywKLQkweDRhMDNiODA1LCAweDkwMDAwMDAxLCAweDU5ZGMwMDA2LCAweDRhMDNiODA1LAotCTB4NzAwMDAwMDAsIDB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsIDB4MzAwMDAwMDAsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg0OTdiYjgwNywgMHg4MDU4YjA0MCwKLQkweDA0MDIwN2ZlLCAweDRhMDNiODA1LCAweDMwMDAwMDAwLCAweDU5ZGMwMDA2LAotCTB4NGEwM2I4MDUsIDB4NjAwMDAwMDEsIDB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsCi0JMHg3MDAwMDAwMSwgMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwgMHgzMDAwMDAwMiwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDIwLCAweDQ5N2JiODA3LCAweDgwNThiMDQwLAotCTB4MDQwMjA3ZmUsIDB4NGEwM2I4MDUsIDB4MzAwMDAwMDAsIDB4NTlkYzAwMDYsCi0JMHg0YTAzYjgwNSwgMHg2MDAwMDAwMSwgMHgwNDAxZmZhMSwgMHgwNDAwMGRhNSwKLQkweDQyMDAxMDAwLCAweDAwMTBiN2Y2LCAweDQ1MmMxMDAwLCAweDRhMDI1ODAxLAotCTB4MDAwMDAwMDEsIDB4NGEwMjU4MDIsIDB4MDAwMDAxMDAsIDB4NGEwMjU4MDksCi0JMHgwMDEwNzE0OSwgMHg0OTdhNTgwYSwgMHg0OTdhNTgwYiwgMHg0OTdhNTgwYywKLQkweDA0MDFmZjkzLCAweDA0MDAwZDk3LCAweDQyMDAxMDAwLCAweDAwMTBiN2Y3LAotCTB4NDUyYzEwMDAsIDB4NGEwMjU4MDEsIDB4MDAwMDAwMDAsIDB4NGEwMjU4MDIsCi0JMHgwMDAwMDEwMCwgMHg0YTAyNTgwOSwgMHgwMDEwMTFiYywgMHg0OTdhNTgwMywKLQkweDQ5N2E1ODA3LCAweDQ5N2E1ODA4LCAweDQ5N2E1ODBhLCAweDU5YTgwMDA1LAotCTB4OGMwMDA1MGUsIDB4MDQwMDAwMDYsIDB4NGEwM2I4MDUsIDB4ZTAwMDAwMDEsCi0JMHg1OWRjMDAwNiwgMHg4YzAwMDUyMiwgMHgwNDAwMDdmYywgMHgxYzAxZjAwMCwKLQkweDRkZjAwMDAwLCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDRjMzgwMDAwLAotCTB4NDAwODcwMDAsIDB4NDgwYmM4NTcsIDB4NGEwMDcwMDIsIDB4MDAwMDAwMDAsCi0JMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwgMHg4MjA4MDQwMCwgMHgwMDAwMDAwMCwKKwkweDRhMDM3OGU0LCAweDAwMDAzMDAwLCAweDRhMDM3OGU0LCAweDAwMGMwMDAwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2MGEsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg1OWE4MTAxMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwKKwkweDAwMTA2OWFmLCAweDQyMDAxMDAwLCAweDAwMDA4MDEwLCAweDU5YTgxODBhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDE4ODYsCisJMHg1OWE4MDgwNSwgMHg4MjA0MGQwMCwgMHhmZmZmZmZkZiwgMHg0ODA3NTAwNSwKKwkweDAyMDFmODAwLCAweDAwMTA0NjhiLCAweDAyMDFmODAwLCAweDAwMTA0ZTBkLAorCTB4MDQwMDAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDNmNTgsIDB4MDQwMDAwMDcsCisJMHg0YTAzNTAxMywgMHgwMDAwMDAwMSwgMHg0OTdiNTAyMSwgMHgwMjAxZjgwMCwKKwkweDAwMTAzYTlmLCAweDA0MDFmMDRmLCAweDAyMDFmODAwLCAweDAwMTA0NzNiLAorCTB4MDQwMDAwMDUsIDB4NTljNDEwMDIsIDB4ODQwODE1MGMsIDB4NDgwYjg4MDIsCisJMHgwNDAxZjAxMiwgMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwgMHgwNDAyMDAwNiwKKwkweDU5YTgwMDFkLCAweDgwMDAwNTQwLCAweDAyMDAwODAwLCAweDAwMTA5MGQ1LAorCTB4MDQwMWYwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDkwZDUsIDB4NTlhODAwMjYsCisJMHg4YzAwMDUwNiwgMHgwNDAyMDAwNSwgMHg1OWE4MDAxZCwgMHg4MDAwMDU0MCwKKwkweDAyMDIwODAwLCAweDAwMTA0MDc1LCAweDQ5N2I1MDI4LCAweDQ5N2I1MDI3LAorCTB4NDk3YjUwMTgsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4NTlhODEwMjYsCisJMHgwNDAyMDAwYSwgMHgwMjAxZjgwMCwgMHgwMDEwMTY5NCwgMHg4MDAwMTU4MCwKKwkweDU5YTgwMDJhLCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDgwMDQwZDQwLAorCTB4NDgwNzUwMmEsIDB4MDQwMWYwMDUsIDB4NTlhODAwMmEsIDB4ODIwMDA1MDAsCisJMHhmZmZmMDAwMCwgMHg0ODAzNTAyYSwgMHg1OTljMDAxNywgMHg4YzAwMDUwYSwKKwkweDA0MDAwMDAyLCAweDg0MDgxNTQ0LCAweDQ4MGI1MDI2LCAweDAyMDFmODAwLAorCTB4MDAxMDRlMGQsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDE2OTQsCisJMHg0ODA3ODg4MCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZTA3LCAweDQ5N2I1MDI4LCAweDQ5N2I1MDFiLCAweDRhMDM1MDFjLAorCTB4MDAwMGZmZmYsIDB4NGEwMzc4ZTQsIDB4MDAwMDAwYzAsIDB4NDIwMmQ4MDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwgMHgwNDAwMDAwNywKKwkweDU5YTgwMDI2LCAweDgyMDAwNTAwLCAweDAwMDAwMDBjLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDQsIDB4MDQwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDFiZjAsCisJMHgxYzAxZjAwMCwgMHg1OWE4MDAxYywgMHg4MjAwMDU4MCwgMHgwMDAwZmZmZiwKKwkweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTAxYmYwLCAweDA0MDFmMDc0LAorCTB4NTlhODAwMjYsIDB4OGMwMDA1MGEsIDB4MDQwMjAwMDMsIDB4OGMwMDA1MDYsCisJMHgwNDAwMDAxYywgMHg4YzAwMDUwMCwgMHgwNDAwMDAxYSwgMHg0YTAzODgwMiwKKwkweDAwMDBmZmJmLCAweDhjMDAwNTAyLCAweDA0MDAwMDE2LCAweDU5OWMwMDE4LAorCTB4OGMwMDA1MTYsIDB4MDQwMjAwMTAsIDB4NTlhODAwMjcsIDB4ODIwMDA1ODAsCisJMHgwMDAwZmZmZiwgMHgwNDAwMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwMWQ0NSwKKwkweDU5YTgwMDI2LCAweDhjMDAwNTA0LCAweDA0MDIwMDVkLCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMDMsIDB4NDE3YTU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDFkNmEsCisJMHgwNDAxZjA1NywgMHg1OWE4MDAyOCwgMHg4MDAwMDU0MCwgMHgwNDAyMDA1NCwKKwkweDU5YTgwMDI2LCAweDhjMDAwNTA4LCAweDA0MDIwMDA1LCAweDU5YTgwMDFiLAorCTB4ODAwMDA1NDAsIDB4MDQwMjAwNGUsIDB4MDQwMWYwMDMsIDB4OGMwMDA1MTYsCisJMHgwNDAwMDA0YiwgMHgwMjAxZjgwMCwgMHgwMDEwNDczYiwgMHgwNDAyMDA0OCwKKwkweDU5OWMwMDE4LCAweDhjMDAwNTE2LCAweDA0MDIwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDRhYmUsIDB4MDQwMjAwNDIsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MGEsCisJMHgwNDAwMDAwZCwgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwgMHg0MTdhODgwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDIwMDA0LCAweDU5MzQwMjAwLAorCTB4OGMwMDA1MWEsIDB4MDQwMjAwMzYsIDB4ODE0Njg4MDAsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmOCwgMHg0YTAzODgwMiwgMHgwMDAwZmZmZiwgMHg0MjAwMTgwMCwKKwkweDAwMTBiMmU3LCAweDA0MDFmYjk4LCAweDQyMDAxODAwLCAweDAwMTBiMmY0LAorCTB4MDQwMWZiOTUsIDB4NTlhODAwMDUsIDB4ODQwMDA1MDIsIDB4NDgwMzUwMDUsCisJMHg0YTAzNzhlNCwgMHgwMDAwMDA4MCwgMHg0MjAyZDgwMCwgMHgwMDAwMDAwMywKKwkweDRhMDM1MDFjLCAweDAwMDBmZmZmLCAweDA0MDFmYThiLCAweDgwMDAwNTgwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE1ZmEsIDB4NTk5YzAwMTgsIDB4OGMwMDA1MTYsCisJMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwMzkyOSwgMHgwNDAxZjAwOSwKKwkweDQyMDAxODAwLCAweDAwMDBmZmZmLCAweDQyMDAyMDAwLCAweDAwMDAwMDA2LAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDM4YzcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGUyMywgMHgwNDAwMDAwYiwgMHg1OWM0MDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTA0ZTBkLCAweDA0MDAwMDA0LCAweDgyMDAwNTAwLAorCTB4ZmZmZmZmMGYsIDB4MDQwMWYwMDMsIDB4ODIwMDA1MDAsIDB4ZmJmZmZmZmYsCisJMHg0ODAzODgwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNmM4YSwgMHgxYzAxZjAwMCwKKwkweDRjMDQwMDAwLCAweDRjMDgwMDAwLCAweDRjMTAwMDAwLCAweDU5YTgwMDNlLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMDQsIDB4MDQwMjE5ODMsIDB4MGMwMWY4MDUsCisJMHg1YzAwMjAwMCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKKwkweDAwMTAwNDljLCAweDAwMTAwNTI3LCAweDAwMTAwNTUzLCAweDAwMTAwNWI0LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE1ZmEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNWRlMiwgMHg1OWM0MDhhMywgMHg4MjA0MGQwMCwKKwkweGZmZmZmZmY3LCAweDQ4MDc4OGEzLCAweDAyMDFmODAwLCAweDAwMTA0ZTEzLAorCTB4MDQwMDAwMGUsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMjMsIDB4MDQwMDAwMGIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGUxYiwgMHgwNDAyMDk2NywgMHg1OWM0MDBhMywKKwkweDg0MDAwNTMyLCAweDg0MDAwNTcwLCAweDQ4MDM4OGEzLCAweDRhMDM4ODA4LAorCTB4MDAwMDAwMDgsIDB4MDQwMWYwMTMsIDB4NTljNDAwYTMsIDB4ODQwMDA1MzAsCisJMHg4MjAwMDUwMCwgMHhiZjdmZmZmZiwgMHg0ODAzODhhMywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGY4LCAweDAyMDFmODAwLCAweDAwMTA0MDMwLCAweDU5YzQwMGEzLAorCTB4ODIwMDA1NDAsIDB4MDAwMTgwMDAsIDB4ODQwMDA1MWMsIDB4NDgwMzg4YTMsCisJMHg4MjAwMDUwMCwgMHhmZmZlZmZmZiwgMHg0ODAzODhhMywgMHg0OTdiODgwOCwKKwkweDU5YzQwMDA2LCAweDgyMDAwNTAwLCAweGZiZmZmZjBlLCAweDQ4MDM4ODA2LAorCTB4NDk3YjI4MjIsIDB4NDk3YjI4MjMsIDB4NDIwMDA4MDAsIDB4MDAwMDAxZjQsCisJMHg0MjAwMTAwMCwgMHgwMDEwMDVjZSwgMHgwMjAxZjgwMCwgMHgwMDEwNWNiYywKKwkweDU5YzQwODA1LCAweDQyMDAxMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDE5YWEsIDB4MDIwMWY4MDAsIDB4MDAxMDE2YWMsIDB4MDQwMjAwMGEsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMThmYSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxODkyLAorCTB4MDQwMWYwMjIsIDB4MDIwMWY4MDAsIDB4MDAxMDE2YjMsIDB4MDQwMjAwMDgsCisJMHg0MTc4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMThmYSwgMHg0MTc4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxODkyLCAweDA0MDFmMDE4LCAweDAyMDFmODAwLAorCTB4MDAxMDE2YmEsIDB4MDQwMjAwMGEsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwMThmYSwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwKKwkweDAyMDFmODAwLCAweDAwMTAxODkyLCAweDA0MDFmMDBjLCAweDAyMDFmODAwLAorCTB4MDAxMDE2YzEsIDB4MDQwMjA5MTgsIDB4NTlhODAwNDksIDB4ODAwMDAxYzAsCisJMHgwNDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwMTZjNywgMHg0YTAzNTAzZSwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDIxLCAweDAyMDFmODAwLCAweDAwMTAxOTk0LAorCTB4NGEwMzUwM2UsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMTMsCisJMHgwNDAwMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwNGUyMywgMHgwNDAwMDAwOSwKKwkweDAyMDFmODAwLCAweDAwMTA0ZTFiLCAweDA0MDIwOTAzLCAweDRhMDM1MDMzLAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDRkNzYsIDB4MDQwMWYwMGYsCisJMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA4LCAweDA0MDAwMDAzLCAweDRhMDM4ODA1LCAweDA0MDAwMDAwLAorCTB4NTljNDAwYTMsIDB4ODIwMDA1NDAsIDB4MDAwMWMwMDAsIDB4NDgwMzg4YTMsCisJMHg4NDAwMDUyMCwgMHg0ODAzODhhMywgMHgxYzAxZjAwMCwgMHgwNDAxZjhhMywKKwkweDA0MDIwMDA0LCAweDRhMDM1MDNlLCAweDAwMDAwMDAzLCAweDA0MDFmMDI3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDE2YzEsIDB4MDQwMjAwMTEsIDB4NTlhODAwNDksCisJMHg4MDAwMDFjMCwgMHgwNDAwMDAwZSwgMHgwMjAxZjgwMCwgMHgwMDEwMTZjNywKKwkweDU5YTgwMDQ4LCAweDhjMDAwNTFlLCAweDA0MDAwMDFjLCAweDAyMDFmODAwLAorCTB4MDAxMDRlMWIsIDB4MDQwMjAwMDksIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGQ3NiwgMHgwNDAxZjAwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxOTQxLCAweDA0MDIwMDExLCAweDAyMDFmODAwLCAweDAwMTAxODg2LAorCTB4NGEwMzUwM2UsIDB4MDAwMDAwMDIsIDB4NDk3YjUwNDksIDB4NTljNDAwYTMsCisJMHg4NDAwMDUyMCwgMHg0ODAzODhhMywgMHg0OTdiMjgyMiwgMHg0OTdiMjgyMywKKwkweDQyMDAwODAwLCAweDAwMDAwMDJkLCAweDQyMDAxMDAwLCAweDAwMTAwNWNlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVjYmMsIDB4MWMwMWYwMDAsIDB4MDQwMWY4NzcsCisJMHgwNDAyMDAwNCwgMHg0YTAzNTAzZSwgMHgwMDAwMDAwMywgMHgwNDAxZjA1YiwKKwkweDRhMDM4ODA1LCAweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTAxOTQxLAorCTB4MDQwMjAwNTAsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMWIsIDB4MDQwMDAwNDQsCisJMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA4LCAweDA0MDAwMDIwLCAweDU5YzQwMDA1LCAweDhjMDAwNTM0LAorCTB4MDQwMjAwMWQsIDB4NTk5NDAwMjIsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsCisJMHgwNDAyMDA0NiwgMHgwMjAxZjgwMCwgMHgwMDEwNGUyMywgMHgwNDAyMDA0MywKKwkweDRhMDM4ODA1LCAweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTA0ZTY3LAorCTB4NGEwMzUwMzIsIDB4MDAwMGFhYWEsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDAsCisJMHg1OWM0MDhhMywgMHg4MjA0MGQ0MCwgMHgwMDAwMDAwOCwgMHg0ODA3ODhhMywKKwkweDQyMDJkODAwLCAweDAwMDAwMDAxLCAweDRhMDM1MDNlLCAweDAwMDAwMDAwLAorCTB4NGEwMzg4MDUsIDB4MDAwMDAwMDEsIDB4NDk3YjI4MjIsIDB4NDk3YjI4MjMsCisJMHgwNDAxZjAxZiwgMHgwMjAxZjgwMCwgMHgwMDEwNGUyMywgMHgwNDAyMDAwNywKKwkweDU5YTgwMDMyLCAweDgyMDAwNTgwLCAweDAwMDBhYWFhLCAweDA0MDIwMDAzLAorCTB4NGEwMzUwMTAsIDB4MDBmZmZmZmYsIDB4NDk3YjUwMzIsIDB4NTljNDAwMDYsCisJMHg4MjAwMDU0MCwgMHgwNDAwMDAwMSwgMHg0ODAzODgwNiwgMHg1OWE4MDgwNSwKKwkweDhjMDQwZDA2LCAweDA0MDIwMDA1LCAweDU5YzQwOGEzLCAweDgyMDQwZDQwLAorCTB4MDAwMDAwMDgsIDB4NDgwNzg4YTMsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsCisJMHg0YTAzNTAzZSwgMHgwMDAwMDAwMCwgMHg0YTAzODgwNSwgMHgwMDAwMDAwMSwKKwkweDQ5N2IyODIyLCAweDQ5N2IyODIzLCAweDA0MDFmMDEwLCAweDU5YzQwMDA1LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwYzAsIDB4MDQwMDAwMGMsIDB4NTljNDAwMDYsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDBmMSwgMHg0ODAzODgwNiwgMHgwNDAxZjdlZiwKKwkweDAyMDFmODAwLCAweDAwMTAxNmMxLCAweDA0MDIwMDA0LCAweDU5YTgwMDQ5LAorCTB4ODAwMDAxYzAsIDB4MDQwMjA3YTQsIDB4NDk3Yjg4ODUsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NiwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNWZhLCAweDRhMDM1MDNlLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE2YzEsIDB4MDQwMjAwMGIsIDB4NTlhODAwNTIsIDB4ODAwMDAxYzAsCisJMHgwNDAwMDAwNCwgMHg4MDAwMDA0MCwgMHg0ODAzNTA1MiwgMHgwNDAyMDAwNSwKKwkweDRhMDM1MDUyLCAweDAwMDAwMDBhLCAweDRhMDM1MDQ5LCAweDAwMDAwMDAxLAorCTB4NDk3Yjg4ODUsIDB4MDQwMWYwZjYsIDB4NTk5NDAwMjIsIDB4NTk5NDA4MjMsCisJMHg4MDA0MDU0MCwgMHgxYzAxZjAwMCwgMHg0OTdiMjgyMywgMHgxYzAxZjAwMCwKKwkweDRjMDgwMDAwLCAweDQyMDAxMDAwLCAweDAwMDAwMGYwLCAweDAyMDFmODAwLAorCTB4MDAxMDE5YWEsIDB4NWMwMDEwMDAsIDB4MWMwMWYwMDAsIDB4NGEwMzUwNWMsCisJMHgwMDAwMDAwNCwgMHg0YTAzNTA1ZCwgMHgwMDAwMDAwMCwgMHg0YTAzNTA1ZSwKKwkweDAwMDAwMDEyLCAweDRhMDM1MDVmLCAweDAwMDAwMDAyLCAweDRhMDM1MDEwLAorCTB4MDBmZmZmZmYsIDB4MDIwMWY4MDAsIDB4MDAxMDkwZDUsIDB4NGEwMzUwMmEsCisJMHgyMDIwMDAwMCwgMHg0YTAzNTAyYiwgMHg4ODAwMDIwMCwgMHg0YTAzNTAyYywKKwkweDAwZmYwMDFmLCAweDRhMDM1MDJkLCAweDAwMDAwN2QwLCAweDRhMDM1MDJlLAorCTB4ODAwMDAwMDAsIDB4NGEwMzUwMmYsIDB4MDAwMDAyMDAsIDB4NGEwMzUwMzAsCisJMHgwMGZmMDAwMCwgMHg0YTAzNTAzMSwgMHgwMDAxMDAwMCwgMHg0YTAzNTAzYSwKKwkweDUxNGM0ZjQ3LCAweDRhMDM1MDNiLCAweDQ5NDMyMDIwLCAweDFjMDFmMDAwLAorCTB4NGQ0NDAwMDAsIDB4NDE3YTg4MDAsIDB4NDE3ODA4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI2NywgMHgwNDAyMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwKKwkweDA0MDIwMDAyLCAweDgwMDQwODAwLCAweDgxNDY4ODAwLCAweDgzNDQwNTgwLAorCTB4MDAwMDA3ZjAsIDB4MDQwMjA3ZjYsIDB4NWMwMjg4MDAsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NywgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywKKwkweDA0MDFmODA5LCAweDQ4NWZjODU3LCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLAorCTB4NWMwMDAwMDAsIDB4NGQ3ODAwMDAsIDB4NDIwMGI4MDAsIDB4MDAwMDgwMDIsCisJMHgwNDAxZjAwNiwgMHg0ODVmYzg1NywgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwKKwkweDQyMDBiODAwLCAweDAwMDA4MDAyLCAweDA0MDA2MDAwLCAweDRjMDAwMDAwLAorCTB4NGMwNDAwMDAsIDB4NTliYzAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAyMDAwNSwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2OWEzLCAweDVjMDAwODAwLAorCTB4NDgwN2MwMjUsIDB4ODAwNDA5MjAsIDB4NDgwN2MwMjYsIDB4NWMwMDAwMDAsCisJMHg0ODAzYzAyMywgMHg4MDAwMDEyMCwgMHg0ODAzYzAyNCwgMHg1YzAwMDAwMCwKKwkweDQ4MDNjODU3LCAweDQ4MDNjMDIxLCAweDgwMDAwMTIwLCAweDQ4MDNjMDIyLAorCTB4NDFmODAwMDAsIDB4NDgwM2MwMjcsIDB4ODAwMDAxMjAsIDB4NDgwM2MwMjgsCisJMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwgMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwKKwkweDI0MzIwMDAxLCAweDQ4MDNjODU3LCAweDA0MDAxMDUzLCAweDQyMDAwODAwLAorCTB4MDAwMDAwNjQsIDB4ODAwNDA4NDAsIDB4MDQwMDAwMDcsIDB4NGEwMzAwMDAsCisJMHgwMDAwMDAwMSwgMHg0MDAwMDAwMCwgMHg1OTgwMDAwMCwgMHg4YzAwMDUwMCwKKwkweDA0MDAwN2Y5LCAweDA0MDAwMDQ2LCAweDQyMDAwODAwLCAweDAwMTBiZmEyLAorCTB4NDYwMDA4MDAsIDB4ZmFjZWZhY2UsIDB4ODAwNDA4MDAsIDB4NGMwODAwMDAsCisJMHg0YzBjMDAwMCwgMHg0MjAwMTAwMCwgMHgwMDAwN2EwMCwgMHg1ODA4MDAxMywKKwkweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDU4MDgwMDE5LCAweDQ0MDAwODAwLAorCTB4ODAwNDA4MDAsIDB4NTgwODAwMWEsIDB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsCisJMHg1ODA4MDAxYiwgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg1ODA4MDAxYywKKwkweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDU4MDgwMDFmLCAweDQ0MDAwODAwLAorCTB4ODAwNDA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDdhNDAsIDB4NDIwMDE4MDAsCisJMHgwMDAwMDAwYiwgMHg1MDA4MDAwMCwgMHg0NDAwMDgwMCwgMHg4MDA4MTAwMCwKKwkweDgwMDQwODAwLCAweDgwMGMxODQwLCAweDA0MDIwN2ZiLCAweDQyMDAxODAwLAorCTB4MDAwMDAwMDMsIDB4NDIwMDEwMDAsIDB4MDAwMDdiMDAsIDB4NDgwYzEwMDMsCisJMHg1ODA4MDAwNSwgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg4MDBjMTg0MCwKKwkweDA0MDIxN2ZiLCAweDQyMDAxMDAwLCAweDAwMDA3YzAwLCAweDU4MDgwMDAyLAorCTB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NTgwODAwMDMsIDB4NDQwMDA4MDAsCisJMHg4MDA0MDgwMCwgMHg1ODA4MDAyMCwgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwKKwkweDU4MDgwMDIxLCAweDQ0MDAwODAwLCAweDgwMDQwODAwLCAweDU4MDgwMDIyLAorCTB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NTgwODAwMjMsIDB4NDQwMDA4MDAsCisJMHg4MDA0MDgwMCwgMHg1YzAwMTgwMCwgMHg1YzAwMTAwMCwgMHg0YTAzMDAwMCwKKwkweDAwMDAwMDAwLCAweDQ4NWZjMDIwLCAweDkwNWNiOWMwLCAweDgyNWNiZDQwLAorCTB4MDAwMDAwMTIsIDB4NDg1ZmMwMTEsIDB4NDIwM2UwMDAsIDB4NDAwMDAwMDAsCisJMHg0MjAyZDgwMCwgMHgwMDAwMDAwNSwgMHg1OWUwMDAxNywgMHg4YzAwMDUwOCwKKwkweDA0MDAwMDAzLCAweDRhMDNjMDE3LCAweDAwMDAwMDAyLCAweDQyMDNlMDAwLAorCTB4MzAwMDAwMDEsIDB4MDQwMWY4MWYsIDB4MDQwMWY3ZmYsIDB4NGEwM2M4NTAsCisJMHgwMDEwYmZiZSwgMHg0YTAzYzg1MSwgMHgwMDEwY2ZiZCwgMHg0YTAzYzg1MywKKwkweDAwMDAwODAwLCAweDRhMDNjODU1LCAweDAwMDFlYjVhLCAweDU5ZTQwMDAxLAorCTB4ODIwMDA1NDAsIDB4MDAwMDNmMDAsIDB4NDgwM2M4MDEsIDB4NGEwM2IxMDQsCisJMHg3MDAwMDAwMiwgMHg0YTAzYTgwNCwgMHg3MDAwMDAwMiwgMHg0YTAzYjAwNCwKKwkweDcwMDAwMDAyLCAweDQyMDAwMDAwLCAweDAwMTBiNmViLCAweDQ5NzgwMDAxLAorCTB4NDk3ODAwMDIsIDB4MWMwMWYwMDAsIDB4NWMwMzYwMDAsIDB4NGRiMDAwMDAsCisJMHg0OWIzYzg1NywgMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwgMHgxYzAxZjAwMCwKKwkweDU5YTgwMDZiLCAweDhjMDAwNTMwLCAweDA0MDIwN2ZlLCAweDRjMDgwMDAwLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsIDB4MDQwMWY4NjIsIDB4NWMwMDEwMDAsCisJMHg0MjAxZDAwMCwgMHgwMDAyOGIwYSwgMHgwMjAxZjgwMCwgMHgwMDEwNWRkMiwKKwkweDRjMDgwMDAwLCAweDQyMDAxMDAwLCAweDAwMDAwMDA4LCAweDA0MDFmODU5LAorCTB4NWMwMDEwMDAsIDB4NDIwMWQwMDAsIDB4MDAwMjhiMGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWRkMiwgMHg0YzA4MDAwMCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwKKwkweDA0MDFmODUwLCAweDVjMDAxMDAwLCAweDQyMDFkMDAwLCAweDAwMDI4YjBhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVkZDIsIDB4MDQwMWY3ZTIsIDB4OGMwMDA1MGMsCisJMHg1OWE4MDg2YiwgMHgwNDAyMDAwMywgMHg4NDA0MGQzMCwgMHgwNDAxZjAwNiwKKwkweDg0MDQwZDcwLCAweDQ4MDc1MDZiLCAweDQyMDAxMDAwLCAweDAwMDAwMDAwLAorCTB4MDQwMWYwNDAsIDB4NDgwNzUwNmIsIDB4ODM2YzA1MDAsIDB4MDAwMDAwMDcsCisJMHgwYzAxZjAwMSwgMHgwMDEwMDcyNywgMHgwMDEwMDcwZCwgMHgwMDEwMDcwZCwKKwkweDAwMTAwNmY1LCAweDAwMTAwNzFhLCAweDAwMTAwNzBkLCAweDAwMTAwNzBkLAorCTB4MDAxMDA3MWEsIDB4NTlhODAwNmYsIDB4OGMwMDA1MDIsIDB4MDQwMjAwMTMsCisJMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwgMHgwMDAxODAwMCwgMHg4MjA0MDU4MCwKKwkweDAwMDEwMDAwLCAweDA0MDAwMDBhLCAweDgyMDQwNTgwLCAweDAwMDA4MDAwLAorCTB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsIDB4NDIwMDQwMDAsIDB4MDQwMWYwMDYsCisJMHg0MjAwMTAwMCwgMHgyMjAwMjAwMCwgMHgwNDAxZjAwMywgMHg0MjAwMTAwMCwKKwkweDEyMDAxMDAwLCAweDA0MDFmMDI1LCAweDQyMDAxMDAwLCAweDAwMDAxMDA0LAorCTB4MDQwMWYwMjIsIDB4NTlhODAwNmYsIDB4OGMwMDA1MDIsIDB4MDQwMjAwMDgsCisJMHg1OWE4MDA2YiwgMHg4YzAwMDUzNCwgMHgwNDAyMDAwNCwgMHg0MjAwMTAwMCwKKwkweDc0MDU3MDA1LCAweDA0MDFmODE5LCAweDFjMDFmMDAwLCAweDQyMDAxMDAwLAorCTB4MDAwMDIwMDgsIDB4MDQwMWY3ZmMsIDB4NTlhODAwNmIsIDB4OGMwMDA1MzQsCisJMHgwNDAyMDAwYSwgMHg1OWE4MDA2ZiwgMHg4YzAwMDUwMiwgMHgwNDAwMDAwNCwKKwkweDQyMDAxMDAwLCAweDI0MDUyMDA1LCAweDA0MDFmMDBjLCAweDQyMDAxMDAwLAorCTB4NzQwNTcwMDUsIDB4MDQwMWYwMDksIDB4MWMwMWYwMDAsIDB4MWMwMWYwMDAsCisJMHg4MjA4MTUwMCwgMHgwMDAwMDAxYywgMHg4MjA4MTU0MCwgMHgwMDFjMDAwMCwKKwkweDQ4MGJjMDEzLCAweDFjMDFmMDAwLCAweDU5YTgwMDZiLCAweDhjMDAwNTMwLAorCTB4MDQwMDAwMDIsIDB4ODQwODE1NzAsIDB4NDgwYjUwNmIsIDB4OGMwMDA1MzAsCisJMHgwNDAyMDAwNSwgMHg4MjA4MTUwMCwgMHgwMDAwNzAwMCwgMHg4MDA4MTExNCwKKwkweDA0MDFmZmYwLCAweDFjMDFmMDAwLCAweDQxNzgwMDAwLCAweDUwMDQxODAwLAorCTB4ODAwYzA0MDAsIDB4ODAwNDA4MDAsIDB4ODAxMDIwNDAsIDB4MDQwMjA3ZmMsCisJMHg4MDA4MDUwMCwgMHg4MDAwMDU0MCwgMHgxYzAxZjAwMCwgMHg0MjAyZjAwMCwKKwkweDAwMDAwMDAwLCAweDQxNzgwMDAwLCAweDQxNzgwODAwLCAweDQxNzgxMDAwLAorCTB4NDE3ODE4MDAsIDB4NDE3ODIwMDAsIDB4NDE3ODI4MDAsIDB4NDE3ODMwMDAsCisJMHg0MTc4MzgwMCwgMHg0MTc4NDAwMCwgMHg0MTc4NDgwMCwgMHg0MTc4NTAwMCwKKwkweDQxNzg1ODAwLCAweDQxNzg2MDAwLCAweDQxNzg2ODAwLCAweDQxNzg3MDAwLAorCTB4NDE3ODc4MDAsIDB4NDE3ODgwMDAsIDB4NDE3ODg4MDAsIDB4NDE3ODkwMDAsCisJMHg0MTc4OTgwMCwgMHg0MTc4YTAwMCwgMHg0MTc4YTgwMCwgMHg0MTc4YjAwMCwKKwkweDQxNzhiODAwLCAweDQxNzhjMDAwLCAweDQxNzhjODAwLCAweDQxNzhkMDAwLAorCTB4NDE3OGQ4MDAsIDB4NDE3OGUwMDAsIDB4NDE3OGU4MDAsIDB4NDE3OGYwMDAsCisJMHg0MTc4ZjgwMCwgMHg0MTc5MDAwMCwgMHg0MTc5MDgwMCwgMHg0MTc5MTAwMCwKKwkweDQxNzkxODAwLCAweDQxNzkyMDAwLCAweDQxNzkyODAwLCAweDQxNzkzMDAwLAorCTB4NDE3OTM4MDAsIDB4NDE3OTQwMDAsIDB4NDE3OTQ4MDAsIDB4NDE3OTUwMDAsCisJMHg0MTc5NTgwMCwgMHg0MTc5NjAwMCwgMHg0MTc5NjgwMCwgMHg0MTc5NzAwMCwKKwkweDQxNzk3ODAwLCAweDQxNzk4MDAwLCAweDQxNzk4ODAwLCAweDQyMDE5MDAwLAorCTB4MDAxMGIzMzMsIDB4NDIwMTk4MDAsIDB4MDAxMGIzMGEsIDB4NDE3OWEwMDAsCisJMHg0MTc5YTgwMCwgMHg0MTc5YjAwMCwgMHg0MTc5YjgwMCwgMHg0MTc5YzgwMCwKKwkweDQxNzljMDAwLCAweDQxNzlkMDAwLCAweDQxNzlkODAwLCAweDQxNzllMDAwLAorCTB4NDE3OWU4MDAsIDB4NDE3OWYwMDAsIDB4NDE3OWY4MDAsIDB4NDE3YTAwMDAsCisJMHg0MTdhMDgwMCwgMHg0MTdhMTAwMCwgMHg0MTdhMTgwMCwgMHg0MTdhMjAwMCwKKwkweDQyMDIyODAwLCAweDAwMDA2MTAwLCAweDQxN2EzMDAwLCAweDQxN2EzODAwLAorCTB4NDE3YTQwMDAsIDB4NDE3YTQ4MDAsIDB4NDE3YTUwMDAsIDB4NDE3YTU4MDAsCisJMHg0MTdhNjAwMCwgMHg0MTdhNjgwMCwgMHg0MTdhNzAwMCwgMHg0MTdhNzgwMCwKKwkweDQxN2E4MDAwLCAweDQxN2E4ODAwLCAweDQxN2E5MDAwLCAweDQxN2E5ODAwLAorCTB4NDE3YWU4MDAsIDB4NDE3YWY4MDAsIDB4NDIwMzAwMDAsIDB4MDAwMDdjMDAsCisJMHg0MjAzMTAwMCwgMHgwMDEwYjYwNCwgMHg0MjAzMTgwMCwgMHgwMDAwYmYxZCwKKwkweDQyMDMyMDAwLCAweDAwMDBiZjMyLCAweDQyMDMyODAwLCAweDAwMTBiNWNjLAorCTB4NDIwMzMwMDAsIDB4MDAxMGIyNzQsIDB4NDIwMzQwMDAsIDB4MDAxMGIyYTAsCisJMHg0MjAzMzgwMCwgMHgwMDEwYjJiZiwgMHg0MjAzNDgwMCwgMHgwMDEwYjM0MiwKKwkweDQyMDM1MDAwLCAweDAwMTBiMjAwLCAweDQyMDM1ODAwLCAweDAwMTBhYTAwLAorCTB4NDIwMzA4MDAsIDB4MDAxMGIzMDEsIDB4NDE3YjYwMDAsIDB4NDIwMzY4MDAsCisJMHgwMDAwNmYwMCwgMHg0MjAzYzgwMCwgMHgwMDAwMzAwMCwgMHg0MjAzNzAwMCwKKwkweDAwMDBmZjAwLCAweDQyMDM3ODAwLCAweDAwMDBiZjAwLCAweDQyMDM4MDAwLAorCTB4MDAwMDc3MDAsIDB4NDIwMzg4MDAsIDB4MDAwMDQwMDAsIDB4NDIwMzkwMDAsCisJMHgwMDAwNjAwMCwgMHg0MjAzOTgwMCwgMHgwMDEwYmNkYSwgMHg0MjAzYTAwMCwKKwkweDAwMDA3NjAwLCAweDQyMDNhODAwLCAweDAwMDA3NDAwLCAweDQyMDNiMDAwLAorCTB4MDAwMDcyMDAsIDB4NDIwM2I4MDAsIDB4MDAwMDcxMDAsIDB4NDIwM2MwMDAsCisJMHgwMDAwNzAwMCwgMHg0MjAzZDAwMCwgMHgwMDAwMDAwMCwgMHg0MjAzZTgwMCwKKwkweDAwMDIwMGY5LCAweDQxN2JkODAwLCAweDFjMDFmMDAwLCAweDQyMDAwODAwLAorCTB4MDAxMDAwMDAsIDB4NTAwNDAwMDAsIDB4NGMwMDAwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDAwYWFhYSwgMHg0NDAwMDgwMCwgMHg0MjAwMTgwMCwgMHgwMDAwNTU1NSwKKwkweDQxNzgyMDAwLCAweDgyMTAyNDAwLCAweDAwMDEwMDAwLCAweDQwMTAwMDAwLAorCTB4ODAwNDJjMDAsIDB4NDQwYzI4MDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMGEsCisJMHg4MDE4MzA0MCwgMHgwNDAyMDdmZiwgMHg1MDE0MDAwMCwgMHg4MDBjMDU4MCwKKwkweDA0MDIwMDA0LCAweDUwMDQwMDAwLCAweDgwMGMwNTgwLCAweDA0MDIwN2YyLAorCTB4NWMwMDAwMDAsIDB4NDQwMDA4MDAsIDB4ODAxNDI4NDAsIDB4NDgxN2M4NjEsCisJMHgxYzAxZjAwMCwgMHg1OWE4MDgxZiwgMHg4MDA0MDljMCwgMHgwNDAyMDAwOSwKKwkweDQ5NzgxYzBjLCAweDRhMDAxYTBjLCAweDAwMDAwMjAwLCAweDRhMDAxODA0LAorCTB4MDcwMDAwMDAsIDB4NTlhODAwMTAsIDB4OWMwMDAxYzAsIDB4NDgwMDE4MDUsCisJMHgwNDAxZmRmOCwgMHg5YzA0MDljMCwgMHg0ODA0MTgwNiwgMHgxYzAxZjAwMCwKKwkweDU5YTgwODBjLCAweDQwMDZkMDAwLCAweDQyMDJiODAwLCAweDAwMDAwMDAxLAorCTB4NTlhODE4MGQsIDB4NDgwZmM4NTcsIDB4ODIwNDE0MDAsIDB4MDAwMDAwMTQsCisJMHg4MjA4MjQwMCwgMHgwMDAwMDAxNCwgMHg0MDEwMDAwMCwgMHg4MDBjMDQ4MCwKKwkweDA0MDAxMDA2LCAweDQ0MDgwODAwLCAweDQwMDgwODAwLCAweDQwMTAxMDAwLAorCTB4ODE1ZWI4MDAsIDB4MDQwMWY3ZjcsIDB4NDU3ODA4MDAsIDB4NDk1ZjUwMjAsCisJMHgxYzAxZjAwMCwgMHg4MzVjMDQ4MCwgMHgwMDAwMDAyMCwgMHgwNDAwMTAwOSwKKwkweDQ5NmJjODU3LCAweDgxNWViODQwLCAweDQxNmE1ODAwLCAweDU5MmVkMDAwLAorCTB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsIDB4ODEyZTU5YzAsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjY1MiwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwKKwkweDQxN2E1ODAwLCAweDA0MDFmN2Y5LCAweDgxNWViODQwLCAweDA0MDAxMDA4LAorCTB4NDE2YTU4MDAsIDB4NDkyZmM4NTcsIDB4NTkyZWQwMDAsIDB4NDk3YTU4MDAsCisJMHg0OTdhNTgwMSwgMHg4MTJlNTljMCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjUyLCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDQxN2FiODAwLAorCTB4NDE3YTU4MDAsIDB4MDQwMWY3ZjgsIDB4NDkyZmM4NTcsIDB4NDk2YTU4MDAsCisJMHg0MTJlZDAwMCwgMHg4MTVlYjgwMCwgMHg1OWM4MDAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDFjMDFmMDAwLCAweDQ5MmZjODU3LAorCTB4ODEyZTU5YzAsIDB4MDQwMDAwMDcsIDB4NTkyYzAwMDEsIDB4NDk3YTU4MDEsCisJMHg0YzAwMDAwMCwgMHgwNDAxZmZmMSwgMHg1YzAyNTgwMCwgMHgwNDAxZjdmOSwKKwkweDFjMDFmMDAwLCAweDQ4MDdjODU2LCAweDQyMDA3MDAwLCAweDAwMTBiNWY2LAorCTB4NGEwMDcwMDEsIDB4MDAwMDAwMDAsIDB4NTllMDAwMDMsIDB4ODIwMDA1NDAsCisJMHgwMDAwODA4MCwgMHg0ODAzYzAwMywgMHg0YTAzYjgwNSwgMHg5MDAwMDAwMSwKKwkweDU5ZGMwMDA2LCAweDRhMDNiODA1LCAweDcwMDAwMDAwLCAweDU5ZGMwMDA2LAorCTB4NGEwM2I4MDUsIDB4MzAwMDAwMDAsIDB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsCisJMHg4MDAwMDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg0OTdiYjgwNywKKwkweDgwNThiMDQwLCAweDA0MDIwN2ZlLCAweDRhMDNiODA1LCAweDMwMDAwMDAwLAorCTB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsIDB4NjAwMDAwMDEsIDB4NTlkYzAwMDYsCisJMHg0YTAzYjgwNSwgMHg3MDAwMDAwMSwgMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwKKwkweDMwMDAwMDAyLCAweDQyMDBiMDAwLCAweDAwMDAwMDIwLCAweDQ5N2JiODA3LAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZmUsIDB4NGEwM2I4MDUsIDB4MzAwMDAwMDAsCisJMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwgMHg2MDAwMDAwMSwgMHgwNDAxZmY5ZSwKKwkweDA0MDAwZDk5LCAweDQyMDAxMDAwLCAweDAwMTBiNWY0LCAweDQ1MmMxMDAwLAorCTB4NGEwMjU4MDEsIDB4MDAwMDAwMDEsIDB4NGEwMjU4MDIsIDB4MDAwMDAxMDAsCisJMHg0YTAyNTgwOSwgMHgwMDEwNmVhYywgMHg0OTdhNTgwYSwgMHg0OTdhNTgwYiwKKwkweDQ5N2E1ODBjLCAweDA0MDFmZjkwLCAweDA0MDAwZDhiLCAweDQyMDAxMDAwLAorCTB4MDAxMGI1ZjUsIDB4NDUyYzEwMDAsIDB4NGEwMjU4MDEsIDB4MDAwMDAwMDAsCisJMHg0YTAyNTgwMiwgMHgwMDAwMDEwMCwgMHg0YTAyNTgwOSwgMHgwMDEwMTIwYywKKwkweDQ5N2E1ODAzLCAweDQ5N2E1ODA3LCAweDQ5N2E1ODA4LCAweDQ5N2E1ODBhLAorCTB4NTlhODAwNmYsIDB4OGMwMDA1MDAsIDB4MDQwMDAwMDYsIDB4NGEwM2I4MDUsCisJMHhlMDAwMDAwMSwgMHg1OWRjMDAwNiwgMHg4YzAwMDUyMiwgMHgwNDAwMDdmYywKKwkweDFjMDFmMDAwLCAweDRkZjAwMDAwLCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLAorCTB4NGMzODAwMDAsIDB4NDAwODcwMDAsIDB4NGEwMDcwMDIsIDB4MDAwMDAwMDAsCisJMHg0MjAwNzAwMCwgMHgwMDEwYjVmNiwgMHg4MjA4MDQwMCwgMHgwMDAwMDAwMCwKIAkweDQ1NzgwMDAwLCAweDU4MzgwMDA1LCAweDQ4MDg3MDA1LCAweDgwMDAwNTQwLAotCTB4MDQwMDAwMDUsIDB4ODIwMDA0MDAsIDB4MDAwMDAwMDAsIDB4NDQwODAwMDAsCi0JMHgwNDAxZjAwMywgMHg0ODBiYzg1NywgMHg0ODA4NzAwNiwgMHg1ODM4MDAwMSwKLQkweDgwMDAwNTQwLCAweDA0MDAwODBjLCAweDVjMDA3MDAwLCAweDVjMDNlMDAwLAotCTB4MWMwMWYwMDAsIDB4NGMzODAwMDAsIDB4NDIwMDcwMDAsIDB4MDAxMGI3ZjgsCi0JMHg1ODM4MDAwMSwgMHg4MDAwMDU0MCwgMHgwNDAwMDgwMywgMHg1YzAwNzAwMCwKLQkweDFjMDFmMDAwLCAweDQyMDA3MDAwLCAweDAwMTBiN2Y4LCAweDU4MzgwMDAxLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMjAwMTIsIDB4NTgzODAwMDAsCi0JMHgwYzAxZjAwMSwgMHgwMDEwMDg4ZSwgMHgwMDEwMDg4ZCwgMHgwMDEwMDg4ZCwKLQkweDAwMTAwODhkLCAweDAwMTAwODhkLCAweDAwMTAwODhkLCAweDAwMTAwODhkLAotCTB4MDAxMDA4OGQsIDB4MDQwMWZkNGIsIDB4NTgzODA4MDgsIDB4ODAwNDA5YzAsCi0JMHgwNDAyMDAyNCwgMHg1ODM4MDAwNiwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwKLQkweDFjMDFmMDAwLCAweDQ4MDNjODU3LCAweDQ4MDA3MDAyLCAweDQwMDA2ODAwLAotCTB4NTgzNDAwMDAsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDIsIDB4NDgwMDcwMDUsCi0JMHg0ODAwNzAwNiwgMHg0YTAzYjgwNSwgMHgyMDAwMDAwMCwgMHg1OWRjMDAwNiwKLQkweDRhMDNiODA1LCAweDMwMDAwMDAwLCAweDU4MzQwMDA3LCAweDQ4MDNiODAwLAotCTB4NTgzNDAwMDgsIDB4NDgwM2I4MDEsIDB4NTgzNDAwMDQsIDB4NDgwMDcwMDMsCi0JMHg1ODM0MDAwMywgMHg0ODAwNzAwNCwgMHg0ODAzYjgwMywgMHg1ODM0MDAwMSwKKwkweDA0MDAwMDA2LCAweDQ4MGJjODU3LCAweDgyMDAwNDAwLCAweDAwMDAwMDAwLAorCTB4NDQwODAwMDAsIDB4MDQwMWYwMDMsIDB4NDgwYmM4NTcsIDB4NDgwODcwMDYsCisJMHg1ODM4MDAwMSwgMHg4MDAwMDU0MCwgMHgwNDAwMDgwYywgMHg1YzAwNzAwMCwKKwkweDVjMDNlMDAwLCAweDFjMDFmMDAwLCAweDRjMzgwMDAwLCAweDQyMDA3MDAwLAorCTB4MDAxMGI1ZjYsIDB4NTgzODAwMDEsIDB4ODAwMDA1NDAsIDB4MDQwMDA4MDMsCisJMHg1YzAwNzAwMCwgMHgxYzAxZjAwMCwgMHg0MjAwNzAwMCwgMHgwMDEwYjVmNiwKKwkweDU4MzgwMDAxLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLCAweDA0MDIwMDEyLAorCTB4NTgzODAwMDAsIDB4MGMwMWYwMDEsIDB4MDAxMDA4ZDcsIDB4MDAxMDA4ZDYsCisJMHgwMDEwMDhkNiwgMHgwMDEwMDhkNiwgMHgwMDEwMDhkNiwgMHgwMDEwMDhkNiwKKwkweDAwMTAwOGQ2LCAweDAwMTAwOGQ2LCAweDA0MDFmZDNmLCAweDU4MzgwODA4LAorCTB4ODAwNDA5YzAsIDB4MDQwMjAwMjcsIDB4NTgzODAwMDYsIDB4ODAwMDA1NDAsCisJMHgwNDAyMDAwMiwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NywgMHg0ODAwNzAwMiwKKwkweDQwMDA2ODAwLCAweDU4MzQwMDAwLCAweDgwMDAwNTQwLCAweDA0MDIwMDAyLAorCTB4NDgwMDcwMDUsIDB4NDgwMDcwMDYsIDB4NGEwM2I4MDUsIDB4MjAwMDAwMDAsCisJMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwgMHgzMDAwMDAwMCwgMHg1ODM0MDAwNywKKwkweDQ4MDNiODAwLCAweDQ4MDNjODU3LCAweDU4MzQwMDA4LCAweDQ4MDNiODAxLAorCTB4NDgwM2M4NTcsIDB4NTgzNDAwMDQsIDB4NDgwMDcwMDMsIDB4NTgzNDAwMDMsCisJMHg0ODAwNzAwNCwgMHg0ODAzYjgwMywgMHg0ODAzYzg1NywgMHg1ODM0MDAwMSwKIAkweDhjMDAwNTAwLCAweDA0MDAwMDA0LCAweDRhMDA3MDAxLCAweDAwMDAwMDAxLAotCTB4MDQwMWYwMjgsIDB4NGEwMDcwMDEsIDB4MDAwMDAwMDIsIDB4MDQwMWYwM2QsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTNlYSwgMHgwMjAxZjgwMCwgMHgwMDEwYTY5ZCwKKwkweDA0MDFmMDI4LCAweDRhMDA3MDAxLCAweDAwMDAwMDAyLCAweDA0MDFmMDNlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkxYjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE0YjgsCiAJMHgwNDAwMDAxNywgMHg0YTAzYjgwNSwgMHgyMDAwMDAwMCwgMHg1OWRjMDAwNiwKIAkweDRhMDNiODA1LCAweDMwMDAwMDAwLCAweDQ4MDdiODAwLCAweDQ4MGJiODAxLAogCTB4NGEwMDcwMDMsIDB4MDAwMDAwMTAsIDB4NDgwYzcwMDksIDB4NDIwMDEwMDAsCi0JMHgwMDEwMDg3NSwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5YSwgMHg1ODM4MDAwOCwKKwkweDAwMTAwOGJlLCAweDAyMDFmODAwLCAweDAwMTA1Y2QzLCAweDU4MzgwMDA4LAogCTB4ODIwMDA0MDAsIDB4MDAwMDAwMDQsIDB4NDgwMDcwMDQsIDB4NDgwM2I4MDMsCi0JMHg0YTAwNzAwMSwgMHgwMDAwMDAwNywgMHgwNDAxZjAyMiwgMHgwMjAxZjgwMCwKLQkweDAwMTA5NDAyLCAweDQyMDAwODAwLCAweDAwMDAwMDAxLCAweDQyMDAxMDAwLAotCTB4MDAxMDA4NzUsIDB4MDIwMWY4MDAsIDB4MDAxMDVmNzYsIDB4MDQwMWY3YmEsCisJMHg0YTAwNzAwMSwgMHgwMDAwMDAwNywgMHgwNDAxZjAyMywgMHgwMjAxZjgwMCwKKwkweDAwMTA5MWNiLCAweDQyMDAwODAwLCAweDAwMDAwMDAxLCAweDQyMDAxMDAwLAorCTB4MDAxMDA4YmUsIDB4MDIwMWY4MDAsIDB4MDAxMDVjYWYsIDB4MDQwMWY3YjcsCiAJMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwgMHg1ODM4MDgwMywgMHg0MjAwMTAwMCwKIAkweDAwMDAzZmZmLCAweDgyMDQwNDgwLCAweDAwMDAzZmZmLCAweDA0MDIxMDAzLAotCTB4NDAwNDEwMDAsIDB4ODAwMDA1ODAsIDB4NDgwMDcwMDMsIDB4ODAwODAwYzQsCi0JMHg0ODAzYjgwMiwgMHg0YTAzYjgwNSwgMHgzMDAwMDAwMiwgMHg1OWRjMDAwNiwKLQkweDRhMDNiODA1LCAweDcwMDAwMDAxLCAweDU5ZGMwMDA2LCAweDRhMDNiODA1LAotCTB4MTAwMDAwMDAsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsCi0JMHg0ODNiYzg1NywgMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwgMHg1ODM4MDgwMywKLQkweDQyMDAxMDAwLCAweDAwMDAzZmZmLCAweDgyMDQwNDgwLCAweDAwMDAzZmZmLAotCTB4MDQwMjEwMDMsIDB4NDAwNDEwMDAsIDB4ODAwMDA1ODAsIDB4NDgwMDcwMDMsCi0JMHg4MDA4MDBjNCwgMHg0ODAzYjgwMiwgMHg0YTAzYjgwNSwgMHgxMDAwMDAwMiwKLQkweDVjMDAxMDAwLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDRjMDQwMDAwLAotCTB4NGMzODAwMDAsIDB4NDIwMDcwMDAsIDB4MDAxMGI3ZjgsIDB4NTlkYzA4MDYsCi0JMHg0ODA3Yzg1NywgMHg0YTAzYjgwNSwgMHgyMDAwMDAwMCwgMHg4YzA0MGQzZSwKLQkweDA0MDAwMDA3LCAweDhjMDQwZDA4LCAweDA0MDIwY2NhLCAweDU4MzgwMDAxLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4MGMwMWY4MDQsIDB4NWMwMDcwMDAsCi0JMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHgwMDEwMDg3ZCwgMHgwMDEwMDkxZSwKLQkweDAwMTAwOTJlLCAweDAwMTAwNWQ4LCAweDAwMTAwNWQ4LCAweDAwMTAwNWQ4LAotCTB4MDAxMDA1ZDgsIDB4MDAxMDExZWEsIDB4NDgwN2M4NTYsIDB4ODIwNDBkMDAsCi0JMHg0MzAwMGY4MCwgMHgwNDAyMDAwOSwgMHg1ODM4MDAwMywgMHg4MDAwMDU0MCwKLQkweDA0MDAwMDFjLCAweDU5ZGMwMDAwLCAweDQ4MDNiODAwLCAweDU5ZGMwMDAxLAotCTB4NDgwM2I4MDEsIDB4MDQwMWY3YWYsIDB4NTgzODA4MDIsIDB4NGEwMDA4MDIsCi0JMHgwMDAwMDIwMCwgMHgwNDAxZjAxZSwgMHg0ODA3Yzg1NiwgMHg4MjA0MGQwMCwKLQkweDQzMDAwZjgwLCAweDA0MDIwMDA5LCAweDU4MzgwMDAzLCAweDgwMDAwNTQwLAotCTB4MDQwMDAwMGMsIDB4NTlkYzAwMDAsIDB4NDgwM2I4MDAsIDB4NTlkYzAwMDEsCi0JMHg0ODAzYjgwMSwgMHgwNDAxZjdiNywgMHg1ODM4MDAwMiwgMHg4MjAwMDQwMCwKLQkweDAwMDAwMDAyLCAweDQ2MDAwMDAwLCAweDAwMDAwMjAwLCAweDA0MDFmMDBjLAotCTB4NGMzNDAwMDAsIDB4NTgzODY4MDIsIDB4NTlkYzAwMDAsIDB4NDgwM2M4NTcsCi0JMHg0ODAwNjgwNywgMHg1OWRjMDAwMSwgMHg0ODAzYzg1NywgMHg0ODAwNjgwOCwKLQkweDRhMDA2ODAyLCAweDAwMDAwMTAwLCAweDVjMDA2ODAwLCAweDRhMDA3MDAxLAotCTB4MDAwMDAwMDAsIDB4NGMzMDAwMDAsIDB4NTgzODYwMDIsIDB4MDQwMWY4MGMsCi0JMHgwNDAwMDAwOSwgMHg1ODMwMDAwOSwgMHg4MjAwMGM4MCwgMHgwMDEwYWI0YSwKLQkweDA0MDIxYzg0LCAweDgyMDAwYzgwLCAweDAwMDIwMDAwLCAweDA0MDAxYzgxLAotCTB4MDgwMWY4MDAsIDB4NWMwMDYwMDAsIDB4MDQwMWY3MjMsIDB4NDgzM2M4NTcsCi0JMHg4MDMwNjFjMCwgMHgwNDAwMDAwOSwgMHg1OWE4MDAwYywgMHg4MDMwMDQ4MCwKLQkweDA0MDAxMDA3LCAweDU5YTgwMDBkLCAweDgwMzAwNDgwLCAweDA0MDIxMDA0LAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsCi0JMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0ZGMwMDAwMCwgMHg0MjAwNzAwMCwKLQkweDAwMTBiODAzLCAweDRhMDA3NDAwLCAweDAwMDAwMDAwLCAweDQ5Nzg3MDAxLAotCTB4NDIwMzgwMDAsIDB4MDAwMDc3MjAsIDB4NGEwMzgwMDYsIDB4NjAwMDAwMDEsCi0JMHg0YTAzODAwOSwgMHhmNGY2MDAwMCwgMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwKLQkweDRhMDM4MDA2LCAweDYwMDAwMDAxLCAweDRhMDM4MDA5LCAweGY0ZjYwMDAwLAotCTB4NGEwM2M4MjIsIDB4MDAwMDAwMTAsIDB4NGEwMzcwZTgsIDB4MDAwMDAwMDAsCi0JMHgwNDAxZjgwOSwgMHg0YTAzNzBlOSwgMHgwMDAwM2EwZiwgMHg0YTAzNzBlOCwKLQkweDAwMDAwMDAwLCAweDRhMDM3MGU4LCAweDAwMDAwMDAxLCAweDVjMDM4MDAwLAotCTB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NDE3OGI4MDAsIDB4MDQwMWY4MGEsCi0JMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YzVjMDAwMCwKLQkweDgyNWNiZDQwLCAweDAwMDAwMDAxLCAweDA0MDFmODAzLCAweDVjMDBiODAwLAotCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGRjMDAwMDAsIDB4NGM1MDAwMDAsCi0JMHg0YzU4MDAwMCwgMHg0YzU0MDAwMCwgMHg0YTAzNzBlOCwgMHgwMDAwMDAwMCwKLQkweDgwNWNiOWMwLCAweDA0MDAwMDA5LCAweDRhMDM4ODA3LCAweDAwMDAwMDA0LAotCTB4NTliODAwZWEsIDB4OGMwMDA1MTAsIDB4MDQwMDAwMDQsIDB4NTliODAwZTAsCi0JMHgwNDAxZjg3YiwgMHgwNDAxZjdmYiwgMHg0MjAzODAwMCwgMHgwMDAwNzcyMCwKLQkweDAyMDFmODAwLCAweDAwMTAwZWMxLCAweDU5YzAwMDA3LCAweDRhMDM4MDA2LAotCTB4MjAwMDAwMDAsIDB4NTljMDAwMDcsIDB4NGEwMzgwMDYsIDB4ODAwMDAwMGEsCi0JMHg1OWMwMDAwNywgMHg0YTAzODAwNiwgMHg4MDAwMDAwYiwgMHg1OWMwMDAwNywKLQkweDRhMDM4MDA2LCAweDQwMDAwMDAxLCAweDgzYzAwNTgwLCAweDAwMDA3NzAwLAotCTB4MDQwMDAwMDQsIDB4NDIwMzgwMDAsIDB4MDAwMDc3MDAsIDB4MDQwMWY3ZWQsCi0JMHg0MjAzODAwMCwgMHgwMDAwNzcyMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDgwMCwKLQkweDU5YzAwMDA3LCAweDhjMDAwNTFlLCAweDA0MDAwMDA2LCAweDRhMDM4MDA2LAotCTB4OTAwMDAwMDEsIDB4ODAwNDA4NDAsIDB4MDQwMjA3ZmEsIDB4MDQwMWZjMTEsCi0JMHg4M2MwMDU4MCwgMHgwMDAwNzcwMCwgMHgwNDAwMDAwNCwgMHg0MjAzODAwMCwKLQkweDAwMDA3NzAwLCAweDA0MDFmN2YxLCAweDgwNWNiOWMwLCAweDA0MDIwMDFkLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMjAsIDB4ODNiOGFjMDAsIDB4MDAwMDAwMjAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWIyMCwgMHg0YTAzNzBmYiwgMHgwMDAwMDAwMSwKLQkweDRhMDM3MDIwLCAweDAwMTAxMGJkLCAweDU5YTgwMDM5LCAweDgyMDAwNTAwLAotCTB4MDAwMGZmZmYsIDB4NDgwMzcwMjEsIDB4NGEwMzcwMzUsIDB4MDAxMGJkZGIsCi0JMHg0YTAzNzAzMCwgMHgwMDEwYjQxMCwgMHg0YTAzNzAzMSwgMHgwMDEwYWMwMCwKLQkweDRhMDM3MDMyLCAweDAwMTBiNTE5LCAweDRhMDM3MDM2LCAweDAwMTBiNTI0LAotCTB4NTk4NDAwMDIsIDB4NDgwMzcwMzQsIDB4NGEwMzcwMzgsIDB4MDAxMDEwYjQsCi0JMHg0YTAzNzBmYiwgMHgwMDAwMDAwMSwgMHg0MTc4YTAwMCwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDIwLCAweDgzYjhhYzAwLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMGFiMjAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwNDAsIDB4ODNiOGFjMDAsCi0JMHgwMDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDEwYWIyMCwgMHg4MDVjYjljMCwKLQkweDA0MDIwMDA0LCAweDRhMDM3MGU0LCAweGFhYWFhYWFhLCAweDA0MDFmMDAzLAotCTB4NGEwMzcwZTQsIDB4YTJhYWFhODIsIDB4NGEwMzcwZTUsIDB4YWFhYWFhYWEsCi0JMHg0YTAzNzBlNiwgMHhhYWFhYWFhYSwgMHg0YTAzNzBmYiwgMHgwMDAwMDAwMCwKLQkweDRhMDM3MGU2LCAweGFhYWFhYWFhLCAweDQyMDM4MDAwLCAweDAwMDA3NzIwLAotCTB4NGEwMzgwMDYsIDB4OTAwMDAwMDAsIDB4NTljMDAwMDcsIDB4OGMwMDA1MWUsCi0JMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwKLQkweDRhMDM4MDA2LCAweDkwMDAwMDAwLCAweDU5YzAwMDA3LCAweDhjMDAwNTFlLAotCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NWMwMGE4MDAsIDB4NWMwMGIwMDAsCi0JMHg1YzAwYTAwMCwgMHg1YzAzODAwMCwgMHgxYzAxZjAwMCwgMHg0ZDMwMDAwMCwKLQkweDRkMzgwMDAwLCAweDQwMDI2MDAwLCAweDgyMDAwNTAwLCAweDdmMDAwMDAwLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMGYsIDB4ODMzMjY1MDAsCi0JMHgwMGZmZmZmZiwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwKLQkweDA0MDIwMDA5LCAweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDA5LAotCTB4MDQwMjAwMDUsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDcsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwKLQkweDRkMzAwMDAwLCAweDRkMmMwMDAwLCAweDRkMzQwMDAwLCAweDRkNDAwMDAwLAotCTB4NGNmYzAwMDAsIDB4NGQzODAwMDAsIDB4NGQzYzAwMDAsIDB4NGQ0NDAwMDAsCi0JMHg0ZDRjMDAwMCwgMHg0ZDQ4MDAwMCwgMHg0YzVjMDAwMCwgMHg0YzYwMDAwMCwKLQkweDRjNjQwMDAwLCAweDRjYzgwMDAwLCAweDRjY2MwMDAwLCAweDRjZjAwMDAwLAotCTB4NGNmNDAwMDAsIDB4NGNmODAwMDAsIDB4NGNmYzAwMDAsIDB4NGQwMDAwMDAsCi0JMHg0ZDA0MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHg1YzAyMDgwMCwKLQkweDVjMDIwMDAwLCAweDVjMDFmODAwLCAweDVjMDFmMDAwLCAweDVjMDFlODAwLAotCTB4NWMwMWUwMDAsIDB4NWMwMTk4MDAsIDB4NWMwMTkwMDAsIDB4NWMwMGM4MDAsCi0JMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHg1YzAyOTAwMCwgMHg1YzAyOTgwMCwKLQkweDVjMDI4ODAwLCAweDVjMDI3ODAwLCAweDVjMDI3MDAwLCAweDVjMDFmODAwLAotCTB4NWMwMjgwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsCi0JMHgxYzAxZjAwMCwgMHg0OTNiYzg1NywgMHgwMjAxZjAwMCwgMHgwMDAyMDA0NCwKLQkweDgzMzAwNTAwLCAweDFmMDAwMDAwLCAweDA0MDAwMDA4LCAweDgxMzI2NTgwLAotCTB4ODAwMDAxMzAsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTQsIDB4MDIwMjE4MDAsCi0JMHgwMDEwMDVkOCwgMHgwYzAxZjAxMywgMHg4MzMwMDUwMCwgMHgwMDAwMDBmZiwKLQkweDgyMDAwYzgwLCAweDAwMDAwMDA3LCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4MGMwMWYwMjUsIDB4MWMwMWYwMDAsIDB4ODIwMDBkMDAsIDB4YzAwMDAwMzgsCi0JMHgwMjAyMDgwMCwgMHgwMDEwMDVkMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDQ4LCAweDAwMDAwMDU0LCAweDAwMDAwMDUzLAotCTB4MDAxMDBhOWIsIDB4MDAxMDBhYmYsIDB4MDAxMDBhYmEsIDB4MDAxMDBhZGYsCi0JMHgwMDEwMGFhNiwgMHgwMDEwMGFiMiwgMHgwMDEwMGE5YiwgMHgwMDEwMGFkYSwKLQkweDAwMTAwYjFhLCAweDAwMTAwYTliLCAweDAwMTAwYTliLCAweDAwMTAwYTliLAotCTB4MDAxMDBhOWIsIDB4MDAxMDBiMWQsIDB4MDAxMDBiMjMsIDB4MDAxMDBiMzQsCi0JMHgwMDEwMGI0NSwgMHgwMDEwMGE5YiwgMHgwMDEwMGI0ZSwgMHgwMDEwMGI1YSwKLQkweDAwMTAwYTliLCAweDAwMTAwYTliLCAweDAwMTAwYTliLCAweDAyMDFmODAwLAotCTB4MDAxMDA1ZDgsIDB4MDAxMDBhYTQsIDB4MDAxMDBiZmYsIDB4MDAxMDBhZWMsCi0JMHgwMDEwMGIwZiwgMHgwMDEwMGFhNCwgMHgwMDEwMGFhNCwgMHgwMDEwMGFhNCwKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQ4MDNjODU2LCAweDU5MzAwMDA0LAotCTB4OGMwMDA1M2UsIDB4MDQwMjAwMDUsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNTUsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHgwMjAxZjgwMCwgMHgwMDEwNmY2MCwKLQkweDA0MDAwN2ZhLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDA0MDFmOGE5LAotCTB4NDAwMDI4MDAsIDB4NDE3ODIwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNTYsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg0ODAzYzg1NiwgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDU3LCAweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDQ4MDNjODU2LAotCTB4NTkzMDAwMDcsIDB4OGMwMDA1MWEsIDB4MDQwMjAwMTAsIDB4NTkzMjU4MDgsCi0JMHg4MTJlNTljMCwgMHgwNDAwMDAxNCwgMHg1OTJjMDQwOCwgMHg4YzAwMDUxYywKLQkweDA0MDIwMDAzLCAweDRhMDI2MDExLCAweGZmZmZmZmZmLCAweDU5MzAwMDA0LAotCTB4OGMwMDA1M2UsIDB4MDQwMjAwMDksIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDgsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg1OTMyNTgwOCwgMHg0YTAyNWEwNiwKLQkweDAwMDAwMDA3LCAweDA0MDFmN2Y0LCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAotCTB4MDQwMDA3ZjYsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4ODMzMDA1MDAsCi0JMHgwMGZmZmZmZiwgMHgwMjAxZjAwMCwgMHgwMDEwNjRkNywgMHgxYzAxZjAwMCwKLQkweDRjMDQwMDAwLCAweDU5YjgwOGVhLCAweDgyMDQwZDAwLCAweDAwMDAwMDA3LAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDQsIDB4NDIwMDAwMDAsCi0JMHg2MDAwMDAwMCwgMHgwNDAxZjhhYiwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKLQkweDA0MDFmOGY5LCAweDU5MzI1ODA4LCAweDgxMmU1OWMwLCAweDA0MDAwMDE4LAotCTB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDBkODAsCi0JMHgwMDAwMDAyOSwgMHgwNDAyMDAxMiwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDAzLCAweDA0MDAwMDBiLCAweDU5MzAwODA3LCAweDg0MDQwZDI2LAotCTB4NDgwNjYwMDcsIDB4MDIwMWY4MDAsIDB4MDAwMjAwODYsIDB4NGEwMzkwMGQsCi0JMHgwMDAwMDA0MCwgMHg0YTAzNzBlNSwgMHgwMDAwMDAwOCwgMHgxYzAxZjAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA2ZjYwLCAweDA0MDAwN2Y0LCAweDU5ODgwMDUyLAotCTB4ODAwMDAwMDAsIDB4NDgwMzEwNTIsIDB4NGEwMzkwMGQsIDB4MDAwMDAwNDAsCi0JMHg0MjAwMDAwMCwgMHhjMDAwMDAwMCwgMHgwNDAxZjA1YSwgMHg0MjAwNzgwMCwKLQkweDAwMTBiZGUyLCAweDQyMDAyMDAwLCAweDAwMDAzMDAwLCAweDQyMDAzMDAwLAotCTB4MDAwMDAxMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDVlMDQsIDB4NGEwMzcwZTQsCi0JMHgwMjAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzdkLCAweDQxMzAwODAwLCAweDgwMDQwOWMwLCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDAsIDB4NDkzM2M4NTcsCi0JMHg4MTMyNjFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZjgzNSwKLQkweDQwMDAyODAwLCAweDAyMDFmODAwLCAweDAwMTBhOTljLCAweDA0MDFmOGFlLAotCTB4MDQwMDAwMDcsIDB4NTkzMjY4MDksIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsCi0JMHg1OTMwMDQxNCwgMHgwMjAyMDgwMCwgMHgwMDEwOTJjZSwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDgxMzI2MWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAotCTB4MDQwMWY4YTEsIDB4MDQwMDAwMGIsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTAzNywgMHgwNDAwMDAwNywgMHg1OTJjMDIwOCwgMHg4NDAwMDU0ZSwKLQkweDQ4MDI1YTA4LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA4YmUzLAotCTB4MWMwMWYwMDAsIDB4NDg1ZmM4NTcsIDB4NWMwMDAwMDAsIDB4NGQ3ODAwMDAsCi0JMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg0MjAwYjgwMCwgMHgwMDAwODAwNSwKLQkweDAyMDFmMDAwLCAweDAwMTAwNWRkLCAweDQ5MzNjODU3LCAweDgzMzAwNDgwLAotCTB4MDAwMDAwMjAsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODMzMDBjMDAsCi0JMHgwMDEwYjhjYywgMHg1MDA0MDAwMCwgMHg4MDAwMDAwMCwgMHgwNDAwMTAwMiwKLQkweDQ0MDAwODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDA0MDFmN2Y0LAotCTB4NDgwN2M4NTYsIDB4NTliODAwZWEsIDB4OGMwMDA1MTAsIDB4MDQwMDA3ZmQsCi0JMHg1OWI4MDBlMCwgMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKLQkweDQyMDAwMDAwLCAweDEwMDAwMDAwLCAweDQxMzAwODAwLCAweDA0MDFmMDJkLAotCTB4ODIwMDA1MDAsIDB4ZjAwMDAwMDAsIDB4ODIwNDBkMDAsIDB4MGZmZmZmZmYsCi0JMHg4MDA0MGQ0MCwgMHg0ODA3Yzg1NywgMHg1OWI4MDBlYSwgMHg4YzAwMDUxNiwKLQkweDA0MDIwMDAzLCAweDQ4MDc3MGUxLCAweDFjMDFmMDAwLCAweDhjMDAwNTEwLAotCTB4MDQwMDA3ZmEsIDB4NGMwNDAwMDAsIDB4MDQwMWY4MDksIDB4NWMwMDA4MDAsCi0JMHg4MjEwMDQ4MCwgMHgwMDAwMDAwOCwgMHgwNDAwMTdmNCwgMHg0YzA0MDAwMCwKLQkweDA0MDFmZWJjLCAweDVjMDAwODAwLCAweDA0MDFmN2YwLCAweDU5YjgwMGUyLAotCTB4NTliODIwZTIsIDB4ODAxMDA1ODAsIDB4MDQwMjA3ZmQsIDB4ODAxMDIxMTQsCi0JMHgwNDAxZjAwNiwgMHg1OWI4MDBlMiwgMHg1OWI4MjBlMiwgMHg4MDEwMDU4MCwKLQkweDA0MDIwN2ZkLCAweDA0MDFmMDAxLCAweDQwMTAxODAwLCAweDgwMGMxOTBhLAotCTB4ODIxMDA1MDAsIDB4MDAwMDAwMWYsIDB4ODIwYzFkMDAsIDB4MDAwMDAwMWYsCi0JMHg4MDBjMjQ4MCwgMHg4MjEwMjUwMCwgMHgwMDAwMDAxZiwgMHgxYzAxZjAwMCwKLQkweDgyMDAwNTAwLCAweGYwMDAwMDAwLCAweDgyMDQwZDAwLCAweDBmZmZmZmZmLAotCTB4ODAwNDBkNDAsIDB4NDgwN2M4NTcsIDB4NDIwMDEwMDAsIDB4MDAxMGI4MDQsCi0JMHg1MDA4MDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwNSwgMHg0YTAzNzBlNSwKLQkweDAwMDAwMDAzLCAweDRhMDM3MGU0LCAweDAwMDAwMzAwLCAweDgwMDAwMDAwLAotCTB4NDQwMDEwMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDA0MDAsIDB4NTliODAwZWEsCi0JMHg4YzAwMDUxMCwgMHgwNDAwMDAwYywgMHgwNDAxZmZkNSwgMHg4MjEwMDQ4MCwKLQkweDAwMDAwMDA4LCAweDA0MDAxMDA3LCAweDRjMDQwMDAwLCAweDRjMDgwMDAwLAotCTB4MDQwMWZlODgsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4MDQwMWYwMjAsCi0JMHg1OWI4MDBlYSwgMHg4YzAwMDUxNiwgMHgwNDAyMDAxZCwgMHg0YTAzNzBlNCwKLQkweDAwMzAwMDAwLCAweDQ4MDc3MGUxLCAweDQyMDAxMDAwLCAweDAwMDBmZjAwLAotCTB4ODAwODEwNDAsIDB4MDQwMDAwMTIsIDB4NTliODA4ZTQsIDB4OGMwNDBkMjgsCi0JMHgwNDAyMDdmYywgMHg0MjAwMTAwMCwgMHgwMDEwYjgwNCwgMHg1MDA4MDAwMCwKLQkweDgwMDAwMDQwLCAweDA0MDIwMDA1LCAweDRhMDM3MGU1LCAweDAwMDAwMDAyLAotCTB4NGEwMzcwZTQsIDB4MDAwMDAyMDAsIDB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0NDAwMTAwMCwgMHg4YzA0MGQyYywgMHgxYzAxZjAwMCwgMHg0MWY4MDAwMCwKLQkweDUwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDgwMDgxMDQwLAotCTB4MDQwMjA3ZDMsIDB4NDFmODAwMDAsIDB4NTAwMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDVkOCwgMHg0ZDM4MDAwMCwgMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDA5LCAweDA0MDIwMDA2LCAweDQyMDI3MDAwLCAweDAwMDAwMDQ3LAotCTB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODAwMDA1ODAsIDB4NWMwMjcwMDAsCi0JMHgxYzAxZjAwMCwgMHg0YzUwMDAwMCwgMHg0YTAzOTAwZCwgMHgwMDAwMDAwMSwKLQkweDU5YzhhMDIwLCAweDRhMDM5MDBkLCAweDAwMDAwMDAyLCAweDU5YzgwODIwLAotCTB4OGM1MGE1MmUsIDB4MDQwMDAwMDIsIDB4OTAwNDA5YzAsIDB4ODIwNDBkMDAsCi0JMHgwMDAwZmZmZiwgMHgwMjAxZjgwMCwgMHgwMDEwNWRkNywgMHgwMjAwMDgwMCwKLQkweDAwMTAwNWQ4LCAweDQ5MzNjODU3LCAweDgyNTBhNTAwLCAweGZmMDAwMDAwLAotCTB4ODI1MDA1ODAsIDB4MDUwMDAwMDAsIDB4MDQwMDAwMDMsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHg1YzAwYTAwMCwgMHgxYzAxZjAwMCwgMHgwNDAxZmZlNiwKLQkweDQ5MzNjODU3LCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLAotCTB4MDQwMDAwNDAsIDB4NTljODIwMjEsIDB4NGEwMzkwMGQsIDB4MDAwMDAwMDEsCi0JMHg1OWM4MjgyMSwgMHg4MjE0MmQwMCwgMHgwMDAwZmZmZiwgMHg1OTMyNTgwOCwKLQkweDgxMmU1OWMwLCAweDA0MDAwMDM3LCAweDU5MzI2ODA5LCAweDAyMDFmODAwLAotCTB4MDAxMDQ4ZDksIDB4MDIwMjA4MDAsIDB4MDAxMDkyYjYsIDB4NTk5YzAwMTksCi0JMHg4YzAwMDUwYywgMHgwNDAyMDAxOCwgMHgwMjAxZjgwMCwgMHgwMDEwNDhkOSwKLQkweDA0MDIwMDE1LCAweDU5MzAwODExLCAweDQ4MDdjODU3LCAweDU5MmMwNDA4LAotCTB4OGMwMDA1MWMsIDB4MDQwMjAwMGUsIDB4ODQwMDA1NWMsIDB4NDgwMjVjMDgsCi0JMHg1OTJjMGEwNCwgMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDQ4LCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLCAweDAwMDAwMDE4LAotCTB4MDQwMjAwMDMsIDB4NTkzMDA4MTEsIDB4NDgwNjU4MDMsIDB4NGEwMjYwMTEsCi0JMHg3ZmZmZmZmZiwgMHg0ODE2NjAxMywgMHgwMjAxZjgwMCwgMHgwMDEwMTBkZCwKLQkweDA0MDIwMDE0LCAweDA0MDFmOWZkLCAweDQwMjgwMDAwLCAweDQ4MDI2MDBkLAotCTB4MDQwMDAwMDUsIDB4NDgzMjYwMGIsIDB4NTAyMDAwMDAsIDB4NDgwMjYwMGEsCi0JMHg0ODIyNjAwYywgMHg1OTMwMDQxNCwgMHg4YzAwMDUxYywgMHgwNDAyMDAwNCwKLQkweDU5OWMwMDE5LCAweDhjMDAwNTBjLCAweDA0MDIwODZlLCAweDRhMDM5MDBkLAotCTB4MDAwMDAwNDAsIDB4NGEwMzcwZTUsIDB4MDAwMDAwMDgsIDB4MWMwMWYwMDAsCi0JMHg1OTg4MDA1MiwgMHg4MDAwMDAwMCwgMHg0ODAzMTA1MiwgMHg0YTAzOTAwZCwKLQkweDAwMDAwMDQwLCAweDQyMDAwMDAwLCAweGMwMDAwMDAwLCAweDA0MDFmNzFkLAotCTB4NGNmODAwMDAsIDB4NThmNDAwMDAsIDB4ODAwMWY1NDAsIDB4MDQwMWY4MjAsCi0JMHg0MTc4MTgwMCwgMHgwNDAxZjhlNCwgMHgwNDAyMDAxNCwgMHg0NDE0MDgwMCwKLQkweDA0MDFmODJhLCAweDA0MDAwMDExLCAweDQwMDQzODAwLCAweDQyMDAxODAwLAotCTB4MDAwMDAwMDEsIDB4NDAxNDIwMDAsIDB4MDQwMWY4ZGIsIDB4MDQwMjAwMGIsCi0JMHg4MDFjMzgwMCwgMHg1MDFjMDAwMCwgMHg0NDAwMDgwMCwgMHgwNDAxZjgxMCwKLQkweDgwMWMwNTgwLCAweDA0MDAwMDA0LCAweDQ0MTAzODAwLCAweDgwMWMzODQwLAotCTB4NDQxNDM4MDAsIDB4MDQwMWY4MTksIDB4NWMwMWYwMDAsIDB4MWMwMWYwMDAsCi0JMHg4MGY5ZjFjMCwgMHgwNDAyMDAwMywgMHg1OGY0MTIwMiwgMHgwNDAxZjAwMywKLQkweDQyMDAxMDAwLCAweDAwMDAwMDA3LCAweDFjMDFmMDAwLCAweDgwZjlmMWMwLAotCTB4MDQwMjAwMDYsIDB4NThmNDA0MDEsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMDIsCi0JMHg4MGY0MDQwMCwgMHgwNDAxZjAwNSwgMHg1OGY4MDQwMSwgMHg4MjAwMDQ4MCwKLQkweDAwMDAwMDAyLCAweDgwZjgwNDAwLCAweDUwMDAyODAwLCAweDgwMDAwMDAwLAotCTB4NTAwMDIwMDAsIDB4MWMwMWYwMDAsIDB4ODBmOWYxYzAsIDB4MDQwMjAwMDgsCi0JMHg1OGY0MDQwMSwgMHg4MjAwMDQ4MCwgMHgwMDAwMDAwMiwgMHgwMjAwMTgwMCwKLQkweDAwMTAwNWQ4LCAweDQ4MDFlYzAxLCAweDA0MDFmMDBiLCAweDU4ZjgwNDAxLAotCTB4ODIwMDA0ODAsIDB4MDAwMDAwMDIsIDB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0ODAxZjQwMSwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwMiwKLQkweDA0MDFmODA5LCAweDU4ZjQwMjAyLCAweDgwMDAwMDQwLCAweDQ4MDFlYTAyLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsCi0JMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwgMHg0MGZhNTgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAwN2Y0LCAweDQ5NzllODAwLCAweDQxNzlmMDAwLCAweDVjMDI1ODAwLAotCTB4MWMwMWYwMDAsIDB4ODBmNWU5YzAsIDB4MDQwMDAwMDksIDB4ODBmOWYxYzAsCi0JMHgwNDAyMGZmNSwgMHg0ZDJjMDAwMCwgMHg0MGY2NTgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAwN2Y0LCAweDQxNzllODAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAotCTB4NGNmNDAwMDAsIDB4NTkzMDA4MDcsIDB4ODIwNDA1MDAsIDB4MDAwMDMxMDAsCisJMHg0MDA0MTAwMCwgMHg4MDAwMDU4MCwgMHg0ODAwNzAwMywgMHg0ODAzYzg1NywKKwkweDgwMDgwMGM0LCAweDQ4MDNiODAyLCAweDRhMDNiODA1LCAweDMwMDAwMDAyLAorCTB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsIDB4NzAwMDAwMDEsIDB4NTlkYzAwMDYsCisJMHg0YTAzYjgwNSwgMHgxMDAwMDAwMCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwKKwkweDFjMDFmMDAwLCAweDQ4M2JjODU3LCAweDRjMDQwMDAwLCAweDRjMDgwMDAwLAorCTB4NTgzODA4MDMsIDB4NDIwMDEwMDAsIDB4MDAwMDNmZmYsIDB4ODIwNDA0ODAsCisJMHgwMDAwM2ZmZiwgMHgwNDAyMTAwMywgMHg0MDA0MTAwMCwgMHg4MDAwMDU4MCwKKwkweDQ4MDA3MDAzLCAweDgwMDgwMGM0LCAweDQ4MDNiODAyLCAweDQ4MDNjODU3LAorCTB4NGEwM2I4MDUsIDB4MTAwMDAwMDIsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsCisJMHgxYzAxZjAwMCwgMHg0YzA0MDAwMCwgMHg0YzM4MDAwMCwgMHg0MjAwNzAwMCwKKwkweDAwMTBiNWY2LCAweDU5ZGMwODA2LCAweDQ4MDdjODU3LCAweDRhMDNiODA1LAorCTB4MjAwMDAwMDAsIDB4OGMwNDBkM2UsIDB4MDQwMDAwMDcsIDB4OGMwNDBkMDgsCisJMHgwNDAyMGNiOSwgMHg1ODM4MDAwMSwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwNywKKwkweDBjMDFmODA0LCAweDVjMDA3MDAwLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLAorCTB4MDAxMDA4YzYsIDB4MDAxMDA5NmMsIDB4MDAxMDA5N2MsIDB4MDAxMDA2MTUsCisJMHgwMDEwMDYxNSwgMHgwMDEwMDYxNSwgMHgwMDEwMDYxNSwgMHgwMDEwMTIzYSwKKwkweDQ4MDdjODU2LCAweDgyMDQwZDAwLCAweDQzMDAwZjgwLCAweDA0MDIwMDA5LAorCTB4NTgzODAwMDMsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMWMsIDB4NTlkYzAwMDAsCisJMHg0ODAzYjgwMCwgMHg1OWRjMDAwMSwgMHg0ODAzYjgwMSwgMHgwNDAxZjdhZCwKKwkweDU4MzgwODAyLCAweDRhMDAwODAyLCAweDAwMDAwMjAwLCAweDA0MDFmMDFkLAorCTB4NDgwN2M4NTYsIDB4ODIwNDBkMDAsIDB4NDMwMDBmODAsIDB4MDQwMjAwMDksCisJMHg1ODM4MDAwMywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwYywgMHg1OWRjMDAwMCwKKwkweDQ4MDNiODAwLCAweDU5ZGMwMDAxLCAweDQ4MDNiODAxLCAweDA0MDFmN2I2LAorCTB4NTgzODAwMDIsIDB4ODIwMDA0MDAsIDB4MDAwMDAwMDIsIDB4NDYwMDAwMDAsCisJMHgwMDAwMDIwMCwgMHgwNDAxZjAwYiwgMHg0YzM0MDAwMCwgMHg1ODM4NjgwMiwKKwkweDU5ZGMwMDAwLCAweDQ4MDNjODU3LCAweDQ4MDA2ODA3LCAweDU5ZGMwMDAxLAorCTB4NDgwMDY4MDgsIDB4NGEwMDY4MDIsIDB4MDAwMDAxMDAsIDB4NWMwMDY4MDAsCisJMHg0YTAwNzAwMSwgMHgwMDAwMDAwMCwgMHg0YzMwMDAwMCwgMHg1ODM4NjAwMiwKKwkweDQ4MzNjODU3LCAweDA0MDFmODBjLCAweDA0MDAwMDA5LCAweDU4MzAwMDA5LAorCTB4ODIwMDBjODAsIDB4MDAxMGE5NzEsIDB4MDQwMjFjNzMsIDB4ODIwMDBjODAsCisJMHgwMDAyMDAwMCwgMHgwNDAwMWM3MCwgMHgwODAxZjgwMCwgMHg1YzAwNjAwMCwKKwkweDA0MDFmNzFlLCAweDgwMzA2MWMwLCAweDA0MDAwMDA5LCAweDU5YTgwMDBjLAorCTB4ODAzMDA0ODAsIDB4MDQwMDEwMDcsIDB4NTlhODAwMGQsIDB4ODAzMDA0ODAsCisJMHgwNDAyMTAwNCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKKwkweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkYzAwMDAwLAorCTB4NDIwMDcwMDAsIDB4MDAxMGI2MDEsIDB4NGEwMDc0MDAsIDB4MDAwMDAwMDAsCisJMHg0OTc4NzAwMSwgMHg0MjAzODAwMCwgMHgwMDAwNzcyMCwgMHg0YTAzODAwNiwKKwkweDYwMDAwMDAxLCAweDRhMDM4MDA5LCAweGY0ZjYwMDAwLCAweDQyMDM4MDAwLAorCTB4MDAwMDc3MDAsIDB4NGEwMzgwMDYsIDB4NjAwMDAwMDEsIDB4NGEwMzgwMDksCisJMHhmNGY2MDAwMCwgMHg0YTAzYzgyMiwgMHgwMDAwMDAxMCwgMHg0YTAzNzBlOCwKKwkweDAwMDAwMDAwLCAweDA0MDFmODA5LCAweDRhMDM3MGU5LCAweDAwMDAzYTBmLAorCTB4NGEwMzcwZTgsIDB4MDAwMDAwMDAsIDB4NGEwMzcwZTgsIDB4MDAwMDAwMDEsCisJMHg1YzAzODAwMCwgMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwgMHg0MTc4YjgwMCwKKwkweDA0MDFmODBhLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NGM1YzAwMDAsIDB4ODI1Y2JkNDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY4MDMsCisJMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0ZGMwMDAwMCwKKwkweDRjNTAwMDAwLCAweDRjNTgwMDAwLCAweDRjNTQwMDAwLCAweDRhMDM3MGU4LAorCTB4MDAwMDAwMDAsIDB4ODA1Y2I5YzAsIDB4MDQwMDAwMDksIDB4NGEwMzg4MDcsCisJMHgwMDAwMDAwNCwgMHg1OWI4MDBlYSwgMHg4YzAwMDUxMCwgMHgwNDAwMDAwNCwKKwkweDU5YjgwMGUwLCAweDA0MDFmODdiLCAweDA0MDFmN2ZiLCAweDQyMDM4MDAwLAorCTB4MDAwMDc3MjAsIDB4MDIwMWY4MDAsIDB4MDAxMDBmMGYsIDB4NTljMDAwMDcsCisJMHg0YTAzODAwNiwgMHgyMDAwMDAwMCwgMHg1OWMwMDAwNywgMHg0YTAzODAwNiwKKwkweDgwMDAwMDBhLCAweDU5YzAwMDA3LCAweDRhMDM4MDA2LCAweDgwMDAwMDBiLAorCTB4NTljMDAwMDcsIDB4NGEwMzgwMDYsIDB4NDAwMDAwMDEsIDB4ODNjMDA1ODAsCisJMHgwMDAwNzcwMCwgMHgwNDAwMDAwNCwgMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwKKwkweDA0MDFmN2VkLCAweDQyMDM4MDAwLCAweDAwMDA3NzIwLCAweDQyMDAwODAwLAorCTB4MDAwMDA4MDAsIDB4NTljMDAwMDcsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMDYsCisJMHg0YTAzODAwNiwgMHg5MDAwMDAwMSwgMHg4MDA0MDg0MCwgMHgwNDAyMDdmYSwKKwkweDA0MDFmYzAxLCAweDgzYzAwNTgwLCAweDAwMDA3NzAwLCAweDA0MDAwMDA0LAorCTB4NDIwMzgwMDAsIDB4MDAwMDc3MDAsIDB4MDQwMWY3ZjEsIDB4ODA1Y2I5YzAsCisJMHgwNDAyMDAxZCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg4M2I4YWMwMCwKKwkweDAwMDAwMDIwLCAweDAyMDFmODAwLCAweDAwMTBhOTQ3LCAweDRhMDM3MGZiLAorCTB4MDAwMDAwMDEsIDB4NGEwMzcwMjAsIDB4MDAxMDExMGQsIDB4NTlhODAwMzksCisJMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwgMHg0ODAzNzAyMSwgMHg0YTAzNzAzNSwKKwkweDAwMTBiYmRhLCAweDRhMDM3MDMwLCAweDAwMTBiMjEwLCAweDRhMDM3MDMxLAorCTB4MDAxMGFhMDAsIDB4NGEwMzcwMzIsIDB4MDAxMGIzMTUsIDB4NGEwMzcwMzYsCisJMHgwMDEwYjMyMCwgMHg1OTg0MDAwMiwgMHg0ODAzNzAzNCwgMHg0YTAzNzAzOCwKKwkweDAwMTAxMTA0LCAweDRhMDM3MGZiLCAweDAwMDAwMDAxLCAweDQxNzhhMDAwLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMjAsIDB4ODNiOGFjMDAsIDB4MDAwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTk0NywgMHg0MjAwYjAwMCwgMHgwMDAwMDA0MCwKKwkweDgzYjhhYzAwLCAweDAwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMTBhOTQ3LAorCTB4ODA1Y2I5YzAsIDB4MDQwMjAwMDQsIDB4NGEwMzcwZTQsIDB4YWFhYWFhYWEsCisJMHgwNDAxZjAwMywgMHg0YTAzNzBlNCwgMHhhMmFhYWE4MiwgMHg0YTAzNzBlNSwKKwkweGFhYWFhYWFhLCAweDRhMDM3MGU2LCAweGFhYWFhYWFhLCAweDRhMDM3MGZiLAorCTB4MDAwMDAwMDAsIDB4NGEwMzcwZTYsIDB4YWFhYWFhYWEsIDB4NDIwMzgwMDAsCisJMHgwMDAwNzcyMCwgMHg0YTAzODAwNiwgMHg5MDAwMDAwMCwgMHg1OWMwMDAwNywKKwkweDhjMDAwNTFlLCAweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDQyMDM4MDAwLAorCTB4MDAwMDc3MDAsIDB4NGEwMzgwMDYsIDB4OTAwMDAwMDAsIDB4NTljMDAwMDcsCisJMHg4YzAwMDUxZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1YzAwYTgwMCwKKwkweDVjMDBiMDAwLCAweDVjMDBhMDAwLCAweDVjMDM4MDAwLCAweDFjMDFmMDAwLAorCTB4NGQzMDAwMDAsIDB4NGQzODAwMDAsIDB4NDAwMjYwMDAsIDB4ODIwMDA1MDAsCisJMHg3ZjAwMDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAwZiwKKwkweDgzMzI2NTAwLCAweDAwZmZmZmZmLCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDQsIDB4MDQwMjAwMDksIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwOSwgMHgwNDAyMDAwNSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0NywKKwkweDAyMDFmODAwLCAweDAwMDIwOGQ4LCAweDVjMDI3MDAwLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4NGQzMDAwMDAsIDB4NGQyYzAwMDAsIDB4NGQzNDAwMDAsCisJMHg0ZDQwMDAwMCwgMHg0Y2ZjMDAwMCwgMHg0ZDM4MDAwMCwgMHg0ZDNjMDAwMCwKKwkweDRkNDQwMDAwLCAweDRkNGMwMDAwLCAweDRkNDgwMDAwLCAweDRjNWMwMDAwLAorCTB4NGM2MDAwMDAsIDB4NGM2NDAwMDAsIDB4NGQwNDAwMDAsIDB4NGNjODAwMDAsCisJMHg0Y2NjMDAwMCwgMHg0Y2Y0MDAwMCwgMHg0Y2Y4MDAwMCwgMHg0Y2ZjMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwMDE2LCAweDVjMDFmODAwLCAweDVjMDFmMDAwLAorCTB4NWMwMWU4MDAsIDB4NWMwMTk4MDAsIDB4NWMwMTkwMDAsIDB4NWMwMjA4MDAsCisJMHg1YzAwYzgwMCwgMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHg1YzAyOTAwMCwKKwkweDVjMDI5ODAwLCAweDVjMDI4ODAwLCAweDVjMDI3ODAwLCAweDVjMDI3MDAwLAorCTB4NWMwMWY4MDAsIDB4NWMwMjgwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsCisJMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg0OTNiYzg1NywgMHgwMjAxZjAwMCwKKwkweDAwMDIwMDQ1LCAweDgzMzAwNTAwLCAweDFmMDAwMDAwLCAweDA0MDAwMDA4LAorCTB4ODEzMjY1ODAsIDB4ODAwMDAxMzAsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTQsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHgwYzAxZjAxMywgMHg4MzMwMDUwMCwKKwkweDAwMDAwMGZmLCAweDgyMDAwYzgwLCAweDAwMDAwMDA3LCAweDAyMDIxODAwLAorCTB4MDAxMDA2MTUsIDB4MGMwMWYwMjUsIDB4MWMwMWYwMDAsIDB4ODIwMDBkMDAsCisJMHhjMDAwMDAzOCwgMHgwMjAyMDgwMCwgMHgwMDEwMDYwZCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDAwMDAwMDAwLCAweDAwMDAwMDQ4LCAweDAwMDAwMDU0LAorCTB4MDAwMDAwNTMsIDB4MDAxMDBhZTQsIDB4MDAxMDBiMDgsIDB4MDAxMDBiMDMsCisJMHgwMDEwMGIyOCwgMHgwMDEwMGFlZiwgMHgwMDEwMGFmYiwgMHgwMDEwMGFlNCwKKwkweDAwMTAwYjIzLCAweDAwMTAwYjY0LCAweDAwMTAwYWU0LCAweDAwMTAwYWU0LAorCTB4MDAxMDBhZTQsIDB4MDAxMDBhZTQsIDB4MDAxMDBiNjcsIDB4MDAxMDBiNmQsCisJMHgwMDEwMGI3ZSwgMHgwMDEwMGI4ZiwgMHgwMDEwMGFlNCwgMHgwMDEwMGI5OCwKKwkweDAwMTAwYmE0LCAweDAwMTAwYWU0LCAweDAwMTAwYWU0LCAweDAwMTAwYWU0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4MDAxMDBhZWQsIDB4MDAxMDBjM2YsCisJMHgwMDEwMGIzNSwgMHgwMDEwMGI1OSwgMHgwMDEwMGFlZCwgMHgwMDEwMGFlZCwKKwkweDAwMTAwYWVkLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDQ4MDNjODU2LAorCTB4NTkzMDAwMDQsIDB4OGMwMDA1M2UsIDB4MDQwMjAwMDUsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA1NSwgMHgwMjAxZjAwMCwgMHgwMDAyMDhkOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2Y2I0LCAweDA0MDAwN2ZhLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4MDQwMWY4YWEsIDB4NDAwMDI4MDAsIDB4NDE3ODIwMDAsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA1NiwgMHgwMjAxZjAwMCwgMHgwMDAyMDhkOCwgMHg0ODAzYzg1NiwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDU3LCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LAorCTB4NDgwM2M4NTYsIDB4NTkzMDAwMDcsIDB4OGMwMDA1MWEsIDB4MDQwMjAwMTAsCisJMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwgMHgwNDAwMDAxNCwgMHg1OTJjMDQwOCwKKwkweDhjMDAwNTFjLCAweDA0MDIwMDAzLCAweDRhMDI2MDExLCAweGZmZmZmZmZmLAorCTB4NTkzMDAwMDQsIDB4OGMwMDA1M2UsIDB4MDQwMjAwMDksIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA0OCwgMHgwMjAxZjAwMCwgMHgwMDAyMDhkOCwgMHg1OTMyNTgwOCwKKwkweDRhMDI1YTA2LCAweDAwMDAwMDA3LCAweDA0MDFmN2Y0LCAweDAyMDFmODAwLAorCTB4MDAxMDZjYjQsIDB4MDQwMDA3ZjYsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg4MzMwMDUwMCwgMHgwMGZmZmZmZiwgMHgwMjAxZjAwMCwgMHgwMDEwNjIwZiwKKwkweDFjMDFmMDAwLCAweDRjMDQwMDAwLCAweDU5YjgwOGVhLCAweDgyMDQwZDAwLAorCTB4MDAwMDAwMDcsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDQsCisJMHg0MjAwMDAwMCwgMHg2MDAwMDAwMCwgMHgwNDAxZjhhYywgMHg1YzAwMDgwMCwKKwkweDFjMDFmMDAwLCAweDA0MDFmOGZhLCAweDA0MDAwMDFiLCAweDU5MzI1ODA4LAorCTB4ODEyZTU5YzAsIDB4MDQwMDAwMTgsIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBmZiwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAyOSwgMHgwNDAyMDAxMiwKKwkweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDBiLAorCTB4NTkzMDA4MDcsIDB4ODQwNDBkMjYsIDB4NDgwNjYwMDcsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDA4NywgMHg0YTAzOTAwZCwgMHgwMDAwMDA0MCwgMHg0YTAzNzBlNSwKKwkweDAwMDAwMDA4LCAweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTA2Y2I0LAorCTB4MDQwMDA3ZjQsIDB4NTk4ODAwNTMsIDB4ODAwMDAwMDAsIDB4NDgwMzEwNTMsCisJMHg0YTAzOTAwZCwgMHgwMDAwMDA0MCwgMHg0MjAwMDAwMCwgMHhjMDAwMDAwMCwKKwkweDA0MDFmMDVhLCAweDQyMDA3ODAwLCAweDAwMTBiYmUxLCAweDQyMDAyMDAwLAorCTB4MDAwMDMwMDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAxMDUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWIzZCwgMHg0YTAzNzBlNCwgMHgwMjAwMDAwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDQxMzAwODAwLAorCTB4ODAwNDA5YzAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYwZCwgMHg0OTMzYzg1NywgMHg4MTMyNjFjMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDA0MDFmODM1LCAweDQwMDAyODAwLCAweDAyMDFmODAwLAorCTB4MDAxMGE3YzMsIDB4MDQwMWY4YWUsIDB4MDQwMDAwMDcsIDB4NTkzMjY4MDksCisJMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHg1OTMwMDQxNCwgMHgwMjAyMDgwMCwKKwkweDAwMTA5MDk0LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDgxMzI2MWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4MDQwMWY4YTEsIDB4MDQwMDAwMGIsCisJMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwNDAwMDAwNywKKwkweDU5MmMwMjA4LCAweDg0MDAwNTRlLCAweDQ4MDI1YTA4LCAweDQxN2E3ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDg5OTcsIDB4MWMwMWYwMDAsIDB4NDg1ZmM4NTcsCisJMHg1YzAwMDAwMCwgMHg0ZDc4MDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwKKwkweDQyMDBiODAwLCAweDAwMDA4MDA1LCAweDAyMDFmMDAwLCAweDAwMTAwNjFhLAorCTB4NDkzM2M4NTcsIDB4ODMzMDA0ODAsIDB4MDAwMDAwMjAsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDYxNSwgMHg4MzMwMGMwMCwgMHgwMDEwYjZjYiwgMHg1MDA0MDAwMCwKKwkweDgwMDAwMDAwLCAweDA0MDAxMDAyLCAweDQ0MDAwODAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4MDQwMWY3ZjQsIDB4NDgwN2M4NTYsIDB4NTliODAwZWEsCisJMHg4YzAwMDUxMCwgMHgwNDAwMDdmZCwgMHg1OWI4MDBlMCwgMHg0ODAzYzg1NywKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDQyMDAwMDAwLCAweDEwMDAwMDAwLAorCTB4NDEzMDA4MDAsIDB4MDQwMWYwMmQsIDB4ODIwMDA1MDAsIDB4ZjAwMDAwMDAsCisJMHg4MjA0MGQwMCwgMHgwZmZmZmZmZiwgMHg4MDA0MGQ0MCwgMHg0ODA3Yzg1NywKKwkweDU5YjgwMGVhLCAweDhjMDAwNTE2LCAweDA0MDIwMDAzLCAweDQ4MDc3MGUxLAorCTB4MWMwMWYwMDAsIDB4OGMwMDA1MTAsIDB4MDQwMDA3ZmEsIDB4NGMwNDAwMDAsCisJMHgwNDAxZjgwOSwgMHg1YzAwMDgwMCwgMHg4MjEwMDQ4MCwgMHgwMDAwMDAwOCwKKwkweDA0MDAxN2Y0LCAweDRjMDQwMDAwLCAweDA0MDFmZWJmLCAweDVjMDAwODAwLAorCTB4MDQwMWY3ZjAsIDB4NTliODAwZTIsIDB4NTliODIwZTIsIDB4ODAxMDA1ODAsCisJMHgwNDAyMDdmZCwgMHg4MDEwMjExNCwgMHgwNDAxZjAwNiwgMHg1OWI4MDBlMiwKKwkweDU5YjgyMGUyLCAweDgwMTAwNTgwLCAweDA0MDIwN2ZkLCAweDA0MDFmMDAxLAorCTB4NDAxMDE4MDAsIDB4ODAwYzE5MGEsIDB4ODIxMDA1MDAsIDB4MDAwMDAwMWYsCisJMHg4MjBjMWQwMCwgMHgwMDAwMDAxZiwgMHg4MDBjMjQ4MCwgMHg4MjEwMjUwMCwKKwkweDAwMDAwMDFmLCAweDFjMDFmMDAwLCAweDgyMDAwNTAwLCAweGYwMDAwMDAwLAorCTB4ODIwNDBkMDAsIDB4MGZmZmZmZmYsIDB4ODAwNDBkNDAsIDB4NDgwN2M4NTcsCisJMHg0MjAwMTAwMCwgMHgwMDEwYjYwMiwgMHg1MDA4MDAwMCwgMHg4MDAwMDU0MCwKKwkweDA0MDIwMDA1LCAweDRhMDM3MGU1LCAweDAwMDAwMDAzLCAweDRhMDM3MGU0LAorCTB4MDAwMDAzMDAsIDB4ODAwMDAwMDAsIDB4NDQwMDEwMDAsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDQwMCwgMHg1OWI4MDBlYSwgMHg4YzAwMDUxMCwgMHgwNDAwMDAwYywKKwkweDA0MDFmZmQ1LCAweDgyMTAwNDgwLCAweDAwMDAwMDA4LCAweDA0MDAxMDA3LAorCTB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4MDQwMWZlOGIsIDB4NWMwMDEwMDAsCisJMHg1YzAwMDgwMCwgMHgwNDAxZjAyMCwgMHg1OWI4MDBlYSwgMHg4YzAwMDUxNiwKKwkweDA0MDIwMDFkLCAweDRhMDM3MGU0LCAweDAwMzAwMDAwLCAweDQ4MDc3MGUxLAorCTB4NDIwMDEwMDAsIDB4MDAwMGZmMDAsIDB4ODAwODEwNDAsIDB4MDQwMDAwMTIsCisJMHg1OWI4MDhlNCwgMHg4YzA0MGQyOCwgMHgwNDAyMDdmYywgMHg0MjAwMTAwMCwKKwkweDAwMTBiNjAyLCAweDUwMDgwMDAwLCAweDgwMDAwMDQwLCAweDA0MDIwMDA1LAorCTB4NGEwMzcwZTUsIDB4MDAwMDAwMDIsIDB4NGEwMzcwZTQsIDB4MDAwMDAyMDAsCisJMHgwMjAwMTgwMCwgMHgwMDEwMDYxNSwgMHg0NDAwMTAwMCwgMHg4YzA0MGQyYywKKwkweDFjMDFmMDAwLCAweDQxZjgwMDAwLCAweDUwMDAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4ODAwODEwNDAsIDB4MDQwMjA3ZDMsIDB4NDFmODAwMDAsCisJMHg1MDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0ZDM4MDAwMCwKKwkweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDA5LCAweDA0MDIwMDA2LAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNDcsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsCisJMHg4MDAwMDU4MCwgMHg1YzAyNzAwMCwgMHgxYzAxZjAwMCwgMHg0YzUwMDAwMCwKKwkweDRhMDM5MDBkLCAweDAwMDAwMDAxLCAweDU5YzhhMDIwLCAweDRhMDM5MDBkLAorCTB4MDAwMDAwMDIsIDB4NTljODA4MjAsIDB4OGM1MGE1MmUsIDB4MDQwMDAwMDIsCisJMHg5MDA0MDljMCwgMHg4MjA0MGQwMCwgMHgwMDAwZmZmZiwgMHgwMjAxZjgwMCwKKwkweDAwMTA1YjBmLCAweDVjMDBhMDAwLCAweDFjMDFmMDAwLCAweDA0MDFmZmYwLAorCTB4MDQwMDAwNDUsIDB4NDkzM2M4NTcsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMCwgMHgwNDAwMDA0MCwgMHg1OWM4MjAyMSwgMHg0YTAzOTAwZCwKKwkweDAwMDAwMDAxLCAweDU5YzgyODIxLCAweDgyMTQyZDAwLCAweDAwMDBmZmZmLAorCTB4NTkzMjU4MDgsIDB4ODEyZTU5YzAsIDB4MDQwMDAwMzcsIDB4NTkzMjY4MDksCisJMHgwMjAxZjgwMCwgMHgwMDEwNDcyOCwgMHgwMjAyMDgwMCwgMHgwMDEwOTA3YywKKwkweDU5OWMwMDE5LCAweDhjMDAwNTBjLCAweDA0MDIwMDE4LCAweDAyMDFmODAwLAorCTB4MDAxMDQ3MjgsIDB4MDQwMjAwMTUsIDB4NTkzMDA4MTEsIDB4NDgwN2M4NTcsCisJMHg1OTJjMDQwOCwgMHg4YzAwMDUxYywgMHgwNDAyMDAwZSwgMHg4NDAwMDU1YywKKwkweDQ4MDI1YzA4LCAweDU5MmMwYTA0LCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwNDgsIDB4MDQwMDAwMDQsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAxOCwgMHgwNDAyMDAwMywgMHg1OTMwMDgxMSwgMHg0ODA2NTgwMywKKwkweDRhMDI2MDExLCAweDdmZmZmZmZmLCAweDQ4MTY2MDEzLCAweDAyMDFmODAwLAorCTB4MDAxMDExMmQsIDB4MDQwMjAwMTQsIDB4MDQwMWZhMDcsIDB4NDAyODAwMDAsCisJMHg0ODAyNjAwZCwgMHgwNDAwMDAwNSwgMHg0ODMyNjAwYiwgMHg1MDIwMDAwMCwKKwkweDQ4MDI2MDBhLCAweDQ4MjI2MDBjLCAweDU5MzAwNDE0LCAweDhjMDAwNTFjLAorCTB4MDQwMjAwMDQsIDB4NTk5YzAwMTksIDB4OGMwMDA1MGMsIDB4MDQwMjA4NmUsCisJMHg0YTAzOTAwZCwgMHgwMDAwMDA0MCwgMHg0YTAzNzBlNSwgMHgwMDAwMDAwOCwKKwkweDFjMDFmMDAwLCAweDU5ODgwMDUzLCAweDgwMDAwMDAwLCAweDQ4MDMxMDUzLAorCTB4NGEwMzkwMGQsIDB4MDAwMDAwNDAsIDB4NDIwMDAwMDAsIDB4YzAwMDAwMDAsCisJMHgwNDAxZjcyNiwgMHg0Y2Y4MDAwMCwgMHg1OGY0MDAwMCwgMHg4MDAxZjU0MCwKKwkweDA0MDFmODIwLCAweDQxNzgxODAwLCAweDA0MDFmOGU3LCAweDA0MDIwMDE0LAorCTB4NDQxNDA4MDAsIDB4MDQwMWY4MmEsIDB4MDQwMDAwMTEsIDB4NDAwNDM4MDAsCisJMHg0MjAwMTgwMCwgMHgwMDAwMDAwMSwgMHg0MDE0MjAwMCwgMHgwNDAxZjhkZSwKKwkweDA0MDIwMDBiLCAweDgwMWMzODAwLCAweDUwMWMwMDAwLCAweDQ0MDAwODAwLAorCTB4MDQwMWY4MTAsIDB4ODAxYzA1ODAsIDB4MDQwMDAwMDQsIDB4NDQxMDM4MDAsCisJMHg4MDFjMzg0MCwgMHg0NDE0MzgwMCwgMHgwNDAxZjgxOSwgMHg1YzAxZjAwMCwKKwkweDFjMDFmMDAwLCAweDgwZjlmMWMwLCAweDA0MDIwMDAzLCAweDU4ZjQxMjAyLAorCTB4MDQwMWYwMDMsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDcsIDB4MWMwMWYwMDAsCisJMHg4MGY5ZjFjMCwgMHgwNDAyMDAwNiwgMHg1OGY0MDQwMSwgMHg4MjAwMDQ4MCwKKwkweDAwMDAwMDAyLCAweDgwZjQwNDAwLCAweDA0MDFmMDA1LCAweDU4ZjgwNDAxLAorCTB4ODIwMDA0ODAsIDB4MDAwMDAwMDIsIDB4ODBmODA0MDAsIDB4NTAwMDI4MDAsCisJMHg4MDAwMDAwMCwgMHg1MDAwMjAwMCwgMHgxYzAxZjAwMCwgMHg4MGY5ZjFjMCwKKwkweDA0MDIwMDA4LCAweDU4ZjQwNDAxLCAweDgyMDAwNDgwLCAweDAwMDAwMDAyLAorCTB4MDIwMDE4MDAsIDB4MDAxMDA2MTUsIDB4NDgwMWVjMDEsIDB4MDQwMWYwMGIsCisJMHg1OGY4MDQwMSwgMHg4MjAwMDQ4MCwgMHgwMDAwMDAwMiwgMHgwMjAwMTgwMCwKKwkweDAwMTAwNjE1LCAweDQ4MDFmNDAxLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLAorCTB4MDQwMjAwMDIsIDB4MDQwMWY4MDksIDB4NThmNDAyMDIsIDB4ODAwMDAwNDAsCisJMHg0ODAxZWEwMiwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDRkMmMwMDAwLCAweDQwZmE1ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsIDB4NDk3OWU4MDAsIDB4NDE3OWYwMDAsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg4MGY1ZTljMCwgMHgwNDAwMDAwOSwKKwkweDgwZjlmMWMwLCAweDA0MDIwZmY1LCAweDRkMmMwMDAwLCAweDQwZjY1ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsIDB4NDE3OWU4MDAsIDB4NWMwMjU4MDAsCisJMHgxYzAxZjAwMCwgMHg0Y2Y0MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDcyOCwKKwkweDA0MDIwMDM2LCAweDU5MzAwODA3LCAweDgyMDQwNTAwLCAweDAwMDAzMTAwLAogCTB4MDQwMjAwMzIsIDB4OGMwNDBkMjIsIDB4MDQwMDAwMzIsIDB4NTkzMDAwMWYsCi0JMHg4MDAxZWQ0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMDU4MCwKKwkweDgwMDFlZDQwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDgyMDAwNTgwLAogCTB4ZmZmZmZmZmYsIDB4MDQwMDAwMjksIDB4NThmNDAyMDEsIDB4ODIwMDA1ODAsCi0JMHgwMDAwZGNiMywgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OGY0MGEwMiwKLQkweDgyMDQwNTAwLCAweDAwMDBmZmZlLCAweDA0MDAwMDAzLCAweDA0MDFmZjg5LAorCTB4MDAwMGRjYjMsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4NThmNDBhMDIsCisJMHg4MjA0MDUwMCwgMHgwMDAwZmZmZSwgMHgwNDAwMDAwMywgMHgwNDAxZmY4NiwKIAkweDU4ZjQwYTAyLCAweDgyMDQwNDgwLCAweDAwMDAwMDBmLCAweDA0MDIxMDU5LAogCTB4ODAwNDA4MDAsIDB4NDgwNWVhMDIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDgsCiAJMHgwNDAwMDA1ZCwgMHg4MjA0MDQ4MCwgMHgwMDAwMDAwOCwgMHgwNDAwMTAwYSwKLQkweDU4ZjQwMDAwLCAweDgwMDFlZDQwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAorCTB4NThmNDAwMDAsIDB4ODAwMWVkNDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCiAJMHg1OGY0MDIwMSwgMHg4MjAwMDU4MCwgMHgwMDAwZGRiOSwgMHgwMjAyMDgwMCwKLQkweDAwMTAwNWQ4LCAweDU4ZjQwNDAxLCAweDgyMDAwYzAwLCAweDAwMDAwMDAyLAorCTB4MDAxMDA2MTUsIDB4NThmNDA0MDEsIDB4ODIwMDBjMDAsIDB4MDAwMDAwMDIsCiAJMHg0ODA1ZWMwMSwgMHg4MGY0MDQwMCwgMHg1OTMwMDgxMiwgMHg0NDA0MDAwMCwKIAkweDgwMDAwMDAwLCAweDQ1NzgwMDAwLCAweDVjMDFlODAwLCAweDFjMDFmMDAwLAogCTB4NDIwMDEwMDAsIDB4MDAwMDA0MDAsIDB4NTliODAwZTQsIDB4OGMwMDA1MjQsCiAJMHgwNDAyMDAyMywgMHg0YTAzNzBlNCwgMHgwMDAzMDAwMCwgMHg0MDAwMDAwMCwKIAkweDU5YjgwMGU0LCAweDhjMDAwNTI0LCAweDA0MDIwMDFiLCAweDU5MzAwODA3LAogCTB4ODQwNDBkNjIsIDB4NDgwNjYwMDcsIDB4NGEwMzcwZTQsIDB4MDAwMjAwMDAsCi0JMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHgwNDAwMDAyNSwKKwkweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwODE5LCAweDA0MDAwMDI1LAogCTB4NDkyZTYwMWYsIDB4NGEwMjVhMDEsIDB4MDAwMGRjYjMsIDB4NTkzMDAwMDgsCi0JMHg4MDAwMWQ0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1ODBjMDgwZiwKKwkweDgwMDAxZDQwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDU4MGMwODBmLAogCTB4NDgwNjU4MDMsIDB4NTkzMDE4MTEsIDB4NDAwNDAwMDAsIDB4ODAwYzA1ODAsCiAJMHgwNDAyMDAwZCwgMHg0OTdhNWEwMiwgMHg0YTAyNWMwMSwgMHgwMDAwMDAwNCwKIAkweDA0MDFmMDExLCAweDRhMDM3MGU0LCAweDAwMDIwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4ODAwODEwNDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHg0MDAwMDAwMCwgMHg4MDA4MTA0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKIAkweDA0MDFmN2Q2LCAweDRhMDI1YTAyLCAweDAwMDAwMDAxLCAweDRhMDI1YzAxLAogCTB4MDAwMDAwMDYsIDB4NDk3YTU4MDQsIDB4NDAwYzAwMDAsIDB4ODAwNDA0ODAsCiAJMHg0ODAyNTgwNSwgMHg0MTJkZTgwMCwgMHg1YzAyNTgwMCwgMHgwNDAxZjdhOSwKIAkweDVjMDI1ODAwLCAweDRhMDI2MDFmLCAweGZmZmZmZmZmLCAweDA0MDFmN2MzLAotCTB4NGQyYzAwMDAsIDB4NThmNjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZjQsCi0JMHg0MGY2NTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmNCwgMHg1YzAyNTgwMCwKLQkweDA0MDFmN2Y1LCAweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2QzLAorCTB4NGQyYzAwMDAsIDB4NThmNjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsCisJMHg0MGY2NTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDgzYSwgMHg1YzAyNTgwMCwKKwkweDA0MDFmN2Y1LCAweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwODE5LAogCTB4MDQwMDA3ZjgsIDB4NGEwMjVhMDEsIDB4MDAwMGRkYjksIDB4NGEwMjVjMDEsCiAJMHgwMDAwMDAwMiwgMHg0OTJkZTgwMCwgMHg0MTJkZTgwMCwgMHg1YzAyNTgwMCwKLQkweDA0MDFmN2E1LCAweDA0MDFmZjMzLCAweDgyZjQwNDAwLCAweDAwMDAwMDA0LAorCTB4MDQwMWY3YTUsIDB4MDQwMWZmMzAsIDB4ODJmNDA0MDAsIDB4MDAwMDAwMDQsCiAJMHg4MDBjMDQwMCwgMHg0MDAwMDgwMCwgMHg1MDA0MDAwMCwgMHg4MDEwMDU4MCwKIAkweDA0MDAwMDE2LCAweDgyMDQwYzAwLCAweDAwMDAwMDAyLCAweDgwMDgxMDQwLAogCTB4MDQwMjA3ZmEsIDB4ODBmOWYxYzAsIDB4MDQwMDAwMTEsIDB4NThmNDEyMDIsCkBAIC04OTMsMjAyICs5MTAsMjA1IEBACiAJMHgwNDAwMDAwNiwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwMiwgMHg4MDA4MTA0MCwKIAkweDA0MDIwN2ZhLCAweDA0MDFmMDAyLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLAogCTB4MDAwMDAwMDEsIDB4MDQwMWY3ZmQsIDB4NGNmNDAwMDAsIDB4NGNmODAwMDAsCi0JMHg0MDAxZTgwMCwgMHg1OTJjMGEwNiwgMHg4MDA0MDljMCwgMHgwNDAyMDAxZCwKLQkweDgyZjQwNTgwLCAweGZmZmZmZmZmLCAweDA0MDAwMDE3LCAweDU4ZjQwMjAxLAotCTB4ODIwMDA1ODAsIDB4MDAwMGRjYjMsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCisJMHg0MDAxZTgwMCwgMHg1OTJjMGEwNiwgMHg4MDA0MDljMCwgMHgwNDAyMDAyMSwKKwkweDgyZjQwNTgwLCAweGZmZmZmZmZmLCAweDA0MDAwMDFiLCAweDU4ZjQwMjAxLAorCTB4ODIwMDA1ODAsIDB4MDAwMGRjYjMsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCiAJMHg1OGY0MDAwMCwgMHg4MDAxZjU0MCwgMHgwNDAwMDAwNiwgMHg1OGY4MDIwMSwKLQkweDgyMDAwNTgwLCAweDAwMDBkZGI5LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAotCTB4NDE3ODM4MDAsIDB4MDQwMWY4MzksIDB4MDQwMjAwMDYsIDB4MDQwMWZmMzIsCi0JMHg0OTdhNjAxZiwgMHg1YzAxZjAwMCwgMHg1YzAxZTgwMCwgMHgxYzAxZjAwMCwKLQkweDA0MDFmZjJkLCAweDRhMDI1YTA2LCAweDAwMDAwMDExLCAweDA0MDFmN2Y5LAotCTB4ODJmNDA1ODAsIDB4ZmZmZmZmZmYsIDB4MDQwMjBmMjcsIDB4MDQwMWY3ZjUsCisJMHg4MjAwMDU4MCwgMHgwMDAwZGRiOSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwKKwkweDQxNzgzODAwLCAweDU4ZjQ0MDAzLCAweDA0MDFmODNkLCAweDA0MDIwMDA5LAorCTB4MDQwMWZmMmUsIDB4NDk3YTYwMWYsIDB4NTkzMDA4MDcsIDB4ODQwNDBkMjIsCisJMHg0ODA2NjAwNywgMHg1YzAxZjAwMCwgMHg1YzAxZTgwMCwgMHgxYzAxZjAwMCwKKwkweDA0MDFmZjI2LCAweDRhMDI1YTA2LCAweDAwMDAwMDExLCAweDA0MDFmN2Y2LAorCTB4ODJmNDA1ODAsIDB4ZmZmZmZmZmYsIDB4MDQwMjBmMjAsIDB4MDQwMWY3ZjIsCiAJMHg0Y2Y0MDAwMCwgMHg0Y2Y4MDAwMCwgMHg0MDAxZTgwMCwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDAxLCAweDA0MDIwMDFmLCAweDgyZjQwNTgwLCAweGZmZmZmZmZmLAotCTB4MDQwMDAwMTksIDB4NThmNDAyMDEsIDB4ODIwMDA1ODAsIDB4MDAwMGRjYjMsCi0JMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OGY0MDAwMCwgMHg4MDAxZjU0MCwKKwkweDAwMDAwMDAxLCAweDA0MDIwMDIwLCAweDgyZjQwNTgwLCAweGZmZmZmZmZmLAorCTB4MDQwMDAwMWEsIDB4NThmNDAyMDEsIDB4ODIwMDA1ODAsIDB4MDAwMGRjYjMsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OGY0MDAwMCwgMHg4MDAxZjU0MCwKIAkweDA0MDAwMDA2LCAweDU4ZjgwMjAxLCAweDgyMDAwNTgwLCAweDAwMDBkZGI5LAotCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NDE3ODM4MDAsIDB4MDQwMWY4MTMsCi0JMHgwNDAyMDAwOCwgMHgwNDAxZmYwYywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwKLQkweDQ5N2E2MDFmLCAweDVjMDFmMDAwLCAweDVjMDFlODAwLCAweDFjMDFmMDAwLAotCTB4MDQwMWZmMDUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTEsIDB4MDQwMWY3ZjksCi0JMHg0YzA0MDAwMCwgMHg4MmY0MDU4MCwgMHhmZmZmZmZmZiwgMHgwNDAyMGVmZSwKLQkweDVjMDAwODAwLCAweDA0MDFmN2YzLCAweDQ4MDNjODU2LCAweDQwMWMyMDAwLAotCTB4NDE3ODE4MDAsIDB4MDQwMWZmOGMsIDB4MDQwMjAwMmMsIDB4NThmNDIwMDMsCi0JMHg0MjAwMTgwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZmY4NywgMHgwNDAyMDAyNywKLQkweDA0MDFmZWI4LCAweDQwMDgyODAwLCAweDgyZjQwNDAwLCAweDAwMDAwMDA0LAotCTB4NDAwMDMwMDAsIDB4NTAxODIwMDAsIDB4NDAxMDAwMDAsIDB4ODAxYzA1ODAsCi0JMHgwNDAwMDAwNSwgMHg0MjAwMTgwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZmY3YSwKLQkweDA0MDIwMDFhLCAweDgyMTgzNDAwLCAweDAwMDAwMDAyLCAweDgwMTQyODQwLAotCTB4MDQwMjA3ZjUsIDB4ODBmOWYxYzAsIDB4MDQwMDAwMTMsIDB4NThmNDJhMDIsCi0JMHg4MjE0MmM4MCwgMHgwMDAwMDAwNywgMHg4MmY4MDQwMCwgMHgwMDAwMDAwMywKLQkweDQwMDAzMDAwLCAweDUwMTgyMDAwLCAweDQwMTAwMDAwLCAweDgwMWMwNTgwLAotCTB4MDQwMDAwMDUsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZmNjYsCi0JMHgwNDAyMDAwNiwgMHg4MjE4MzQwMCwgMHgwMDAwMDAwMiwgMHg4MDE0Mjg0MCwKLQkweDA0MDIwN2Y1LCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4MDQwMWY3ZmQsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTgzODAyMDcsCi0JMHg4YzAwMDUwMiwgMHgwNDAwMDdmYywgMHg1MDIwMDAwMCwgMHg4MDM4N2MwMCwKLQkweDU4M2MyODAwLCAweDU4M2MyMDAxLCAweDU4MzgwNDA0LCAweDgwMDAxNTQwLAotCTB4MDQwMjAwMDIsIDB4NTgzODE0MDcsIDB4NThjODM0MDEsIDB4NTgzODBjMDgsCi0JMHg1OTMwMzgwNywgMHg0OTdhNjAxMiwgMHg0OTdhNjAxMywgMHgwMjAxZjAwMCwKLQkweDAwMDIwMGJlLCAweDU5MmMwNDA4LCAweDhjMDAwNTAyLCAweDA0MDAwN2VhLAotCTB4NTkyYzA0MDksIDB4ODAwMDA1NDAsIDB4MDQwMDA3ZTcsIDB4ODIwMDBjODAsCi0JMHgwMDAwMDAwMiwgMHgwNDAwMTAxMSwgMHg1ODM4MDAwMSwgMHg4MDAwNzU0MCwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU4MzgwMjA0LCAweDgyMDAwNTAwLAotCTB4MDAwMDAwMGYsIDB4ODIwMDA0MDAsIDB4MDAxMDEwYmQsIDB4NTAwMDQwMDAsCi0JMHg0MDA0MDAwMCwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwgMHg4MjA0MGM4MCwKLQkweDAwMDAwMDA1LCAweDA0MDIxN2YxLCAweDgwMjA0NDAwLCAweDUwMjAwMDAwLAotCTB4ODAzODdjMDAsIDB4NTgzYzI4MDAsIDB4NTgzYzIwMDEsIDB4NTgzYzEwMDIsCi0JMHg1OTJjMGEwNywgMHg1OTJjNGMwOCwgMHg1OTJjMzAwZCwgMHg1OTMwMzgwNywKLQkweDQ5N2E2MDEyLCAweDQ5N2E2MDEzLCAweDQ4MTY2MDBlLCAweDQ4MTI2MDBmLAotCTB4NDgwYTYwMTAsIDB4NDgxYTYwMTEsIDB4ODAwNDA4NDAsIDB4NDgwNjYwMGQsCi0JMHgwMjAwMDAwMCwgMHgwMDAyMDBjNiwgMHg4MDIwNDAwMCwgMHg1MDIwMTgwMCwKLQkweDgwMGMxOWMwLCAweDA0MDIwMDBjLCAweDU4MzgwMDAxLCAweDgwMDA3NTQwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTgzODAyMDQsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAwZiwgMHg4MjAwMDQwMCwgMHgwMDEwMTBiZCwgMHg1MDAwNDAwMCwKLQkweDUwMjAxODAwLCAweDQ4M2E2MDBiLCAweDQ4MGU2MDBhLCAweDQ4MjI2MDBjLAotCTB4MDIwMWYwMDAsIDB4MDAwMjAwYzYsIDB4NDgwM2M4NTYsIDB4NTkyYzAyMDgsCi0JMHg4YzAwMDUxZSwgMHgwNDAyMDAxNywgMHg1MDIwMDAwMCwgMHg4MDMwNmMwMCwKLQkweDQwMjQwMDAwLCAweDBjMDFmMDAxLCAweDAwMTAwZTQ2LCAweDAwMTAwZTQ2LAotCTB4MDAxMDBlNGYsIDB4MDAxMDBlNDYsIDB4MDAxMDBlNDYsIDB4MDAxMDBlNDYsCi0JMHgwMDEwMGU0NiwgMHgwMDEwMGU0NiwgMHgwMDEwMGU0ZiwgMHgwMDEwMGU0NiwKLQkweDAwMTAwZTRmLCAweDAwMTAwZTQ2LCAweDAwMTAwZTQ2LCAweDAwMTAwZTRmLAotCTB4MDAxMDBlNDYsIDB4MDAxMDBlNDYsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCi0JMHg4NDAwMDUxZSwgMHg0ODAyNWEwOCwgMHg1MDIwMDAwMCwgMHg4MDMwNmMwMCwKLQkweDU4MzQzODAxLCAweDQ4MWU2MDBmLCAweDA0MDFmMDA3LCAweDU4MzQxODAyLAotCTB4NTgzNDI4MDAsIDB4NTgzNDM4MDEsIDB4NDgwZTYwMTAsIDB4NDgxNjYwMGUsCi0JMHg0ODFlNjAwZiwgMHgwNDAxZjI0NiwgMHg0OTMzYzg1NywgMHg1OTMxZjgwOCwKLQkweDU5MzAwYTA2LCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDgwMDQwOTA2LAotCTB4MDQwMjAwMDIsIDB4ODAwNDA4MDAsIDB4NDgwNWZjMDYsIDB4NGEwMjYyMDYsCi0JMHgwMDAwMDAwMiwgMHg1OTJjMDQwOSwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwOCwKLQkweDA0MDAwMDBiLCAweDA0MDFmODM0LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDQsIDB4MDQwMjAwMDUsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDgsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHgxYzAxZjAwMCwgMHg0Y2ZjMDAwMCwKLQkweDU4ZmMwMjA0LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwNDgsIDB4MDQwMjAwMGMsIDB4NThmYzAwMGIsIDB4ODAwMDAxYzAsCi0JMHgwNDAwMDAwOSwgMHg1OGZjMDQwNywgMHg4MDAwMDFjMCwgMHgwNDAwMDAwNiwKLQkweDU4ZmMwODBiLCAweDhjMDQwZDE2LCAweDA0MDAwMDE3LCAweDU4ZmMwMDA3LAotCTB4MDQwMWYwMGEsIDB4NThmYzA0MDgsIDB4OGMwMDA1MTIsIDB4MDQwMjAwMTQsCi0JMHg1OGZjMGMwOSwgMHg4YzA0MGQxNiwgMHgwNDAyMDAwMywgMHg1YzAxZjgwMCwKLQkweDFjMDFmMDAwLCAweDU4ZmMwMDBhLCAweDU5MzAwODExLCAweDgwMDQwNTgwLAotCTB4MDQwMjAwMDksIDB4NTkzMDAwMDcsIDB4ODQwMDA1MDAsIDB4NDgwMjYwMDcsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDA0OCwgMHg1YzAxZjgwMCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwN2ExLCAweDVjMDFmODAwLCAweDFjMDFmMDAwLCAweDU4ZmRmODA5LAotCTB4MDQwMWY3ZWMsIDB4NDkzM2M4NTcsIDB4NTliODA4ZWEsIDB4ODIwNDBkMDAsCi0JMHgwMDAwMDAwNywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAxZSwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDFiLCAweDU5MzAwNDA2LAotCTB4NGMwMDAwMDAsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDAsIDB4NDIwMDMwMDAsCi0JMHgwMDAwMDA0MSwgMHg0MjAwMDAwMCwgMHg1MDAwMDAwMCwgMHg0MTMwMDgwMCwKLQkweDRjMTgwMDAwLCAweDA0MDFmY2U3LCAweDVjMDAzMDAwLCAweDA0MDAwMDBiLAotCTB4NDIwMDAwMDAsIDB4MDAwMDAwMWUsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsCi0JMHg4MDE4MzA0MCwgMHgwNDAyMDdmNCwgMHg0MjAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQxMzAwODAwLCAweDA0MDFmY2RiLCAweDVjMDAwMDAwLCAweDQ4MDI2NDA2LAotCTB4MWMwMWYwMDAsIDB4NTkzMDAwMDcsIDB4ODQwMDA1MDAsIDB4NDgwMjYwMDcsCi0JMHgwNDAxZjdmYywgMHg1OWMwMDAwNywgMHg0YTAzODAwNiwgMHgzMDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDU5YzAwMDA3LCAweDhjMDAwNTBhLCAweDA0MDIwN2ZlLAorCTB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4NDE3ODM4MDAsIDB4NThmNDQwMDMsCisJMHgwNDAxZjgxMywgMHgwNDAyMDAwOCwgMHgwNDAxZmYwNCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAxLCAweDQ5N2E2MDFmLCAweDVjMDFmMDAwLCAweDVjMDFlODAwLAorCTB4MWMwMWYwMDAsIDB4MDQwMWZlZmQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTEsCisJMHgwNDAxZjdmOSwgMHg0YzA0MDAwMCwgMHg4MmY0MDU4MCwgMHhmZmZmZmZmZiwKKwkweDA0MDIwZWY2LCAweDVjMDAwODAwLCAweDA0MDFmN2YzLCAweDQ4MDNjODU2LAorCTB4NDAxYzIwMDAsIDB4NDE3ODE4MDAsIDB4NGMyMDAwMDAsIDB4MDQwMWZmODYsCisJMHg1YzAwNDAwMCwgMHgwNDAyMDAyYywgMHg0MDIwMjAwMCwgMHg0MjAwMTgwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmZjgwLCAweDA0MDIwMDI3LCAweDA0MDFmZWFlLAorCTB4NDAwODI4MDAsIDB4ODJmNDA0MDAsIDB4MDAwMDAwMDQsIDB4NDAwMDMwMDAsCisJMHg1MDE4MjAwMCwgMHg0MDEwMDAwMCwgMHg4MDFjMDU4MCwgMHgwNDAwMDAwNSwKKwkweDQyMDAxODAwLCAweDAwMDAwMDAxLCAweDA0MDFmZjczLCAweDA0MDIwMDFhLAorCTB4ODIxODM0MDAsIDB4MDAwMDAwMDIsIDB4ODAxNDI4NDAsIDB4MDQwMjA3ZjUsCisJMHg4MGY5ZjFjMCwgMHgwNDAwMDAxMywgMHg1OGY0MmEwMiwgMHg4MjE0MmM4MCwKKwkweDAwMDAwMDA3LCAweDgyZjgwNDAwLCAweDAwMDAwMDAzLCAweDQwMDAzMDAwLAorCTB4NTAxODIwMDAsIDB4NDAxMDAwMDAsIDB4ODAxYzA1ODAsIDB4MDQwMDAwMDUsCisJMHg0MjAwMTgwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZmY1ZiwgMHgwNDAyMDAwNiwKKwkweDgyMTgzNDAwLCAweDAwMDAwMDAyLCAweDgwMTQyODQwLCAweDA0MDIwN2Y1LAorCTB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZmQsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg1ODM4MDIwNywgMHg4YzAwMDUwMiwKKwkweDA0MDAwN2ZjLCAweDUwMjAwMDAwLCAweDgwMzg3YzAwLCAweDU4M2MyODAwLAorCTB4NTgzYzIwMDEsIDB4NTgzODA0MDQsIDB4ODAwMDE1NDAsIDB4MDQwMjAwMDIsCisJMHg1ODM4MTQwNywgMHg1OGM4MzQwMSwgMHg1ODM4MGMwOCwgMHg1OTMwMzgwNywKKwkweDQ5N2E2MDEyLCAweDQ5N2E2MDEzLCAweDAyMDFmMDAwLCAweDAwMDIwMGJmLAorCTB4NTkyYzA0MDgsIDB4OGMwMDA1MDIsIDB4MDQwMDA3ZWEsIDB4NTkyYzA0MDksCisJMHg4MDAwMDU0MCwgMHgwNDAwMDdlNywgMHg4MjAwMGM4MCwgMHgwMDAwMDAwMiwKKwkweDA0MDAxMDExLCAweDU4MzgwMDAxLCAweDgwMDA3NTQwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NTgzODAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsCisJMHg4MjAwMDQwMCwgMHgwMDEwMTEwZCwgMHg1MDAwNDAwMCwgMHg0MDA0MDAwMCwKKwkweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDgyMDQwYzgwLCAweDAwMDAwMDA1LAorCTB4MDQwMjE3ZjEsIDB4ODAyMDQ0MDAsIDB4NTAyMDAwMDAsIDB4ODAzODdjMDAsCisJMHg1ODNjMjgwMCwgMHg1ODNjMjAwMSwgMHg1ODNjMTAwMiwgMHg1OTJjMGEwNywKKwkweDU5MmM0YzA4LCAweDU5MmMzMDBkLCAweDU5MzAzODA3LCAweDQ5N2E2MDEyLAorCTB4NDk3YTYwMTMsIDB4NDgxNjYwMGUsIDB4NDgxMjYwMGYsIDB4NDgwYTYwMTAsCisJMHg0ODFhNjAxMSwgMHg4MDA0MDg0MCwgMHg0ODA2NjAwZCwgMHgwMjAwMDAwMCwKKwkweDAwMDIwMGM3LCAweDgwMjA0MDAwLCAweDUwMjAxODAwLCAweDgwMGMxOWMwLAorCTB4MDQwMjAwMGMsIDB4NTgzODAwMDEsIDB4ODAwMDc1NDAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg1ODM4MDIwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwKKwkweDgyMDAwNDAwLCAweDAwMTAxMTBkLCAweDUwMDA0MDAwLCAweDUwMjAxODAwLAorCTB4NDgzYTYwMGIsIDB4NDgwZTYwMGEsIDB4NDgyMjYwMGMsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDBjNywgMHg0ODAzYzg1NiwgMHg1OTJjMDIwOCwgMHg4YzAwMDUxZSwKKwkweDA0MDIwMDE3LCAweDUwMjAwMDAwLCAweDgwMzA2YzAwLCAweDQwMjQwMDAwLAorCTB4MGMwMWYwMDEsIDB4MDAxMDBlOTEsIDB4MDAxMDBlOTEsIDB4MDAxMDBlOWEsCisJMHgwMDEwMGU5MSwgMHgwMDEwMGU5MSwgMHgwMDEwMGU5MSwgMHgwMDEwMGU5MSwKKwkweDAwMTAwZTkxLCAweDAwMTAwZTlhLCAweDAwMTAwZTkxLCAweDAwMTAwZTlhLAorCTB4MDAxMDBlOTEsIDB4MDAxMDBlOTEsIDB4MDAxMDBlOWEsIDB4MDAxMDBlOTEsCisJMHgwMDEwMGU5MSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg4NDAwMDUxZSwKKwkweDQ4MDI1YTA4LCAweDUwMjAwMDAwLCAweDgwMzA2YzAwLCAweDU4MzQzODAxLAorCTB4NDgxZTYwMGYsIDB4MDQwMWYwMDcsIDB4NTgzNDE4MDIsIDB4NTgzNDI4MDAsCisJMHg1ODM0MzgwMSwgMHg0ODBlNjAxMCwgMHg0ODE2NjAwZSwgMHg0ODFlNjAwZiwKKwkweDA0MDFmMjRiLCAweDQ5MzNjODU3LCAweDU5MzFmODA4LCAweDU5MzAwYTA2LAorCTB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsIDB4ODAwNDA5MDYsIDB4MDQwMjAwMDIsCisJMHg4MDA0MDgwMCwgMHg0ODA1ZmMwNiwgMHg0YTAyNjIwNiwgMHgwMDAwMDAwMiwKKwkweDU5MmMwNDA5LCAweDgyMDAwNTAwLCAweDAwMDAwMDA4LCAweDA0MDAwMDBiLAorCTB4MDQwMWY4MzQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsCisJMHgwNDAyMDAwNSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0OCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwOGQ4LCAweDFjMDFmMDAwLCAweDRjZmMwMDAwLCAweDU4ZmMwMjA0LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDgsCisJMHgwNDAyMDAwYywgMHg1OGZjMDAwYiwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwOSwKKwkweDU4ZmMwNDA3LCAweDgwMDAwMWMwLCAweDA0MDAwMDA2LCAweDU4ZmMwODBiLAorCTB4OGMwNDBkMTYsIDB4MDQwMDAwMTcsIDB4NThmYzAwMDcsIDB4MDQwMWYwMGEsCisJMHg1OGZjMDQwOCwgMHg4YzAwMDUxMiwgMHgwNDAyMDAxNCwgMHg1OGZjMGMwOSwKKwkweDhjMDQwZDE2LCAweDA0MDIwMDAzLCAweDVjMDFmODAwLCAweDFjMDFmMDAwLAorCTB4NThmYzAwMGEsIDB4NTkzMDA4MTEsIDB4ODAwNDA1ODAsIDB4MDQwMjAwMDksCisJMHg1OTMwMDAwNywgMHg4NDAwMDUwMCwgMHg0ODAyNjAwNywgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDQ4LCAweDVjMDFmODAwLCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LAorCTB4NWMwMWY4MDAsIDB4MWMwMWYwMDAsIDB4NThmZGY4MDksIDB4MDQwMWY3ZWMsCisJMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywgMHg0OTMzYzg1NywKKwkweDU5YjgwOGVhLCAweDgyMDQwZDAwLCAweDAwMDAwMDA3LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwMWUsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAxYiwgMHg1OTMwMDQwNiwgMHg0YzAwMDAwMCwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDQxLCAweDQyMDAwMDAwLAorCTB4NTAwMDAwMDAsIDB4NDEzMDA4MDAsIDB4NGMxODAwMDAsIDB4MDQwMWZjZTMsCisJMHg1YzAwMzAwMCwgMHgwNDAwMDAwYiwgMHg0MjAwMDAwMCwgMHgwMDAwMDAxZSwKKwkweDgwMDAwMDQwLCAweDA0MDIwN2ZmLCAweDgwMTgzMDQwLCAweDA0MDIwN2Y0LAorCTB4NDIwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDEzMDA4MDAsIDB4MDQwMWZjZDcsCisJMHg1YzAwMDAwMCwgMHg0ODAyNjQwNiwgMHgxYzAxZjAwMCwgMHg1OTMwMDAwNywKKwkweDg0MDAwNTAwLCAweDQ4MDI2MDA3LCAweDA0MDFmN2ZjLCAweDU5YzAwMDA3LAorCTB4NGEwMzgwMDYsIDB4MzAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NTljMDAwMDcsCisJMHg4YzAwMDUwYSwgMHgwNDAyMDdmZSwgMHgxYzAxZjAwMCwgMHg1YzAwMDAwMCwKKwkweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDRkYzAwMDAwLCAweDRhMDM3MGU4LAorCTB4MDAwMDAwMDAsIDB4NDIwMzgwMDAsIDB4MDAwMDc3MjAsIDB4MDQwMWZmZjAsCisJMHg0MjAzODAwMCwgMHgwMDAwNzcwMCwgMHgwNDAxZmZlZCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZTBkLCAweDA0MDIwMDEzLCAweDRhMDM4ODkxLCAweDAwMDBmZmZmLAorCTB4NDk3Yjg4ODAsIDB4NDk3Yjg4OTIsIDB4NDIwMDEwMDAsIDB4MDAwMDAxOTAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDA4MTA0MCwgMHgwNDAyMDdmZCwKKwkweDQyMDAwMDAwLCAweDAwMTBiNmE1LCAweDAyMDFmODAwLCAweDAwMTBhODZlLAorCTB4MDQwMWY4MGUsIDB4NWMwMzgwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDRmMjksCisJMHgwNDAxZjgyZCwgMHg0MjAwMDAwMCwgMHgwMDEwYjZhNiwgMHgwMjAxZjgwMCwKKwkweDAwMTBhODZlLCAweDA0MDFmODA1LCAweDQ4MTc4ODkyLCAweDQ4MGI4ODgwLAorCTB4NWMwMzgwMDAsIDB4MWMwMWYwMDAsIDB4NDk2ZmM4NTcsIDB4ODM2YzA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAyMDAwYiwgMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwKKwkweDQyMDAxMDAwLCAweDAwMDA4MDQ4LCAweDQyMDAxODAwLCAweDAwMDBmZmZmLAorCTB4MDIwMWY4MDAsIDB4MDAxMDM4NTcsIDB4NWMwMDE4MDAsIDB4NWMwMDEwMDAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAzYywgMHgwMjAxZjgwMCwgMHgwMDEwMTM5NSwKKwkweDU5YTgwMDZjLCAweDgwMDAwNTQwLCAweDA0MDAwMDA2LCAweDU5YTgxMDZkLAorCTB4ODAwODExYzAsIDB4MDQwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDFiMGEsCisJMHg0YTAzODg5MSwgMHgwMDAwZmZmZiwgMHg0YTAzOTAwZCwgMHgwMDAwMDA0MCwKKwkweDAyMDFmODAwLCAweDAwMTAwOWRiLCAweDRhMDM3MGU4LCAweDAwMDAwMDAxLAogCTB4MWMwMWYwMDAsIDB4NWMwMDAwMDAsIDB4NGMwMDAwMDAsIDB4NDgwM2M4NTcsCi0JMHg0ZGMwMDAwMCwgMHg0YTAzNzBlOCwgMHgwMDAwMDAwMCwgMHg0MjAzODAwMCwKLQkweDAwMDA3NzIwLCAweDA0MDFmZmYwLCAweDQyMDM4MDAwLCAweDAwMDA3NzAwLAotCTB4MDQwMWZmZWQsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMjAwMTMsCi0JMHg0YTAzODg5MSwgMHgwMDAwZmZmZiwgMHg0OTdiODg4MCwgMHg0OTdiODg5MiwKLQkweDQyMDAxMDAwLCAweDAwMDAwMTkwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4ODAwODEwNDAsIDB4MDQwMjA3ZmQsIDB4NDIwMDAwMDAsIDB4MDAxMGI4YTYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwNDAxZjgwZSwgMHg1YzAzODAwMCwKLQkweDAyMDFmMDAwLCAweDAwMTA1MjU4LCAweDA0MDFmODJkLCAweDQyMDAwMDAwLAotCTB4MDAxMGI4YTcsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4MDQwMWY4MDUsCi0JMHg0ODE3ODg5MiwgMHg0ODBiODg4MCwgMHg1YzAzODAwMCwgMHgxYzAxZjAwMCwKLQkweDQ5NmZjODU3LCAweDgzNmMwNTgwLCAweDAwMDAwMDAzLCAweDA0MDIwMDBiLAotCTB4NGMwODAwMDAsIDB4NGMwYzAwMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDgwNDgsCi0JMHg0MjAwMTgwMCwgMHgwMDAwZmZmZiwgMHgwMjAxZjgwMCwgMHgwMDEwM2EzZSwKLQkweDVjMDAxODAwLCAweDVjMDAxMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDNjLAotCTB4MDIwMWY4MDAsIDB4MDAxMDEzNDUsIDB4NTlhODAwNmMsIDB4ODAwMDA1NDAsCi0JMHgwNDAwMDAwNiwgMHg1OWE4MTA2ZCwgMHg4MDA4MTFjMCwgMHgwNDAwMDAwMywKLQkweDAyMDFmODAwLCAweDAwMTAxYWFmLCAweDRhMDM4ODkxLCAweDAwMDBmZmZmLAotCTB4NGEwMzkwMGQsIDB4MDAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA5OGUsCi0JMHg0YTAzNzBlOCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg1YzAwMDAwMCwKLQkweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDU5YzQxMDgwLCAweDQ5N2I4ODgwLAotCTB4NTljNDI4OTIsIDB4NDk3Yjg4OTIsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsCi0JMHgwNDAyMDAwMiwgMHgxYzAxZjAwMCwgMHg0MjAwMjAwMCwgMHgwMDAwMDI2MCwKLQkweDU5YzQxOGE0LCAweDgyMGMxZDAwLCAweDAwMDAwMDBmLCAweDgyMGMwNTgwLAotCTB4MDAwMDAwMDAsIDB4MDQwMDAwMTAsIDB4NTljNDE4MDUsIDB4ODIwYzFkMDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAyMDAwZSwgMHg1OWM0MThhNCwgMHg4MjBjMWQwMCwKLQkweDAwMDAwMDBmLCAweDgyMGMwNDgwLCAweDAwMDAwMDA3LCAweDA0MDAxMDA0LAotCTB4ODIwYzA0ODAsIDB4MDAwMDAwMGMsIDB4MDQwMDEwMDMsIDB4ODAxMDIwNDAsCi0JMHgwNDAyMDdlYywgMHg0OTdiODg5MSwgMHgxYzAxZjAwMCwgMHg0YzEwMDAwMCwKLQkweDQyMDAyMDAwLCAweDAwMDAwMDE5LCAweDQ2MDAwMDAwLCAweDAwMDAwMDAxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE5MzcsIDB4NTAwMDE4MDAsIDB4ODIwYzFkMDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAwMDAwNSwgMHg4MDEwMjA0MCwgMHgwNDAyMDdmNywKLQkweDVjMDAyMDAwLCAweDA0MDFmN2YwLCAweDVjMDAyMDAwLCAweDA0MDFmN2VjLAotCTB4NDgwM2M4NTYsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCi0JMHg1OTJjMGEwNCwgMHg0ODA3Yzg1NywgMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwKLQkweDgyMDQwNTAwLCAweDAwMDAwMDBmLCAweDBjMDFmMDAxLCAweDAwMTAwZjY3LAotCTB4MDAxMDBmNjcsIDB4MDAxMDBmNjcsIDB4MDAxMDBmN2YsIDB4MDAxMDBmNjcsCi0JMHgwMDEwMGY2NywgMHgwMDEwMGY2NywgMHgwMDEwMGY2NywgMHgwMDEwMGY2NywKLQkweDAwMTAwZjdmLCAweDAwMTAwZjY3LCAweDAwMTAwZjY5LCAweDAwMTAwZjY3LAotCTB4MDAxMDBmNjcsIDB4MDAxMDBmNjcsIDB4MDAxMDBmNjcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDVkOCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAzYiwgMHgwMjAyMDgwMCwKLQkweDAwMTAwNWQ4LCAweDU5MmMwMjBhLCAweDhjMDAwNTAwLCAweDA0MDAwMDVmLAotCTB4NTkyYzFhMDcsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA0MDAsCi0JMHgwMDEwMTBiZCwgMHg1MDAwMTAwMCwgMHg1MDA4MDAwMCwgMHg1OTMwMjAxMywKKwkweDU5YzQxMDgwLCAweDQ5N2I4ODgwLCAweDU5YzQyODkyLCAweDQ5N2I4ODkyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4MDQwMjAwMDIsIDB4MWMwMWYwMDAsCisJMHg0MjAwMjAwMCwgMHgwMDAwMDI2MCwgMHg1OWM0MThhNCwgMHg4MjBjMWQwMCwKKwkweDAwMDAwMDBmLCAweDgyMGMwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDEwLAorCTB4NTljNDE4MDUsIDB4ODIwYzFkMDAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMGUsCisJMHg1OWM0MThhNCwgMHg4MjBjMWQwMCwgMHgwMDAwMDAwZiwgMHg4MjBjMDQ4MCwKKwkweDAwMDAwMDA3LCAweDA0MDAxMDA0LCAweDgyMGMwNDgwLCAweDAwMDAwMDBjLAorCTB4MDQwMDEwMDMsIDB4ODAxMDIwNDAsIDB4MDQwMjA3ZWMsIDB4NDk3Yjg4OTEsCisJMHgxYzAxZjAwMCwgMHg0YzEwMDAwMCwgMHg0MjAwMjAwMCwgMHgwMDAwMDAxOSwKKwkweDQ2MDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxOWE0LAorCTB4NTAwMDE4MDAsIDB4ODIwYzFkMDAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDUsCisJMHg4MDEwMjA0MCwgMHgwNDAyMDdmNywgMHg1YzAwMjAwMCwgMHgwNDAxZjdmMCwKKwkweDVjMDAyMDAwLCAweDA0MDFmN2VjLCAweDQ4MDNjODU2LCAweDFjMDFmMDAwLAorCTB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4NTkyYzBhMDQsIDB4NDgwN2M4NTcsCisJMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwKKwkweDBjMDFmMDAxLCAweDAwMTAwZmI1LCAweDAwMTAwZmI1LCAweDAwMTAwZmI1LAorCTB4MDAxMDBmY2QsIDB4MDAxMDBmYjUsIDB4MDAxMDBmYjUsIDB4MDAxMDBmYjUsCisJMHgwMDEwMGZiNSwgMHgwMDEwMGZiNSwgMHgwMDEwMGZjZCwgMHgwMDEwMGZiNSwKKwkweDAwMTAwZmI3LCAweDAwMTAwZmI1LCAweDAwMTAwZmI1LCAweDAwMTAwZmI1LAorCTB4MDAxMDBmYjUsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAzYiwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OTJjMDIwYSwKKwkweDhjMDAwNTAwLCAweDA0MDAwMDVmLCAweDU5MmMxYTA3LCAweDgyMDQwNTAwLAorCTB4MDAwMDAwMGYsIDB4ODIwMDA0MDAsIDB4MDAxMDExMGQsIDB4NTAwMDEwMDAsCisJMHg1MDA4MDAwMCwgMHg1OTMwMjAxMywgMHg0ODAyNjAwYSwgMHg0OTJlNjAwYiwKKwkweDQ4MGE2MDBjLCAweDQ4MGU2MDBkLCAweDQ4MTI2MDEyLCAweDVjMDI1ODAwLAorCTB4MWMwMWYwMDAsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA0MDAsCisJMHgwMDEwMTEwZCwgMHg1MDAwMTAwMCwgMHg1MDA4MDAwMCwgMHg1OTJjMWEwNywKIAkweDQ4MDI2MDBhLCAweDQ5MmU2MDBiLCAweDQ4MGE2MDBjLCAweDQ4MGU2MDBkLAotCTB4NDgxMjYwMTIsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4ODIwNDA1MDAsCi0JMHgwMDAwMDAwZiwgMHg4MjAwMDQwMCwgMHgwMDEwMTBiZCwgMHg1MDAwMTAwMCwKLQkweDUwMDgwMDAwLCAweDU5MmMxYTA3LCAweDQ4MDI2MDBhLCAweDQ5MmU2MDBiLAotCTB4NDgwYTYwMGMsIDB4NDgwZTYwMGQsIDB4NDk3YTYwMTIsIDB4MDQwMWY3ZjIsCi0JMHg4YzA0MGQwMCwgMHgwNDAyMDA0MSwgMHg4MjA0MGQwMCwgMHgwMDAwMDA4MCwKLQkweDA0MDAwMDNlLCAweDAyMDFmMDAwLCAweDAwMDIwMGNmLCAweDU5MzAwMDEzLAotCTB4NTkzMDEwMTIsIDB4ODAwODA1ODAsIDB4MDQwMjAwMGMsIDB4NDIwMDc4MDAsCi0JMHg4MDAwMDAwNSwgMHg1OTJjMTIwOCwgMHg4MjA4MDUwMCwgMHhmZmZmN2ZmZiwKLQkweDQ4MDI1YTA4LCAweDhjMDgxNTFlLCAweDA0MDIwMDJkLCAweDgyM2M3ZDQwLAotCTB4MDAwMDAwMjAsIDB4MDQwMWYwMmEsIDB4NDgwYmM4NTcsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjg1MSwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OTMwMDQxNCwKLQkweDQ4MDNjODU3LCAweDhjMDAwNTE0LCAweDA0MDIwMDA3LCAweDU5OWMxODE5LAotCTB4OGMwYzFkMTIsIDB4MDQwMjAwMDQsIDB4ODIwYzFkNDAsIDB4MDAwMDAwMDEsCi0JMHgwNDAxZjAxZCwgMHg1OTMwMjAxMywgMHgwNDAxZjkyYiwgMHgwNDAyMDAxYSwKLQkweDQyMDA3ODAwLCAweDgwMDAwMDA1LCAweDU5MzA1MDBkLCAweDU5MmMwMjA4LAotCTB4NDgwM2M4NTcsIDB4OGMwMDA1MWUsIDB4MDQwMjAwMDUsIDB4ODIzYzdkNDAsCi0JMHgwMDAwMDAyMCwgMHg1OTMwNDAwYywgMHgwNDAxZjAwNCwgMHg4NDAwMDUxZSwKLQkweDQ4MDI1YTA4LCAweDA0MDFmOGRhLCAweDUwMjAxODAwLCAweDQ4MGU2MDBhLAotCTB4NDgzMjYwMGIsIDB4NDgyMjYwMGMsIDB4NDgyYTYwMGQsIDB4NDgwZmM4NTcsCi0JMHg0ODMzYzg1NywgMHg0ODIzYzg1NywgMHg0ODJiYzg1NywgMHg4MDAwMDU4MCwKLQkweDQ4M2U2MDA0LCAweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4NDk3YTYwMTIsIDB4MDQwMWY3ZjIsIDB4OGMwNDBkMDAsIDB4MDQwMjAwNDEsCisJMHg4MjA0MGQwMCwgMHgwMDAwMDA4MCwgMHgwNDAwMDAzZSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMGQwLCAweDU5MzAwMDEzLCAweDU5MzAxMDEyLCAweDgwMDgwNTgwLAorCTB4MDQwMjAwMGMsIDB4NDIwMDc4MDAsIDB4ODAwMDAwMDUsIDB4NTkyYzEyMDgsCisJMHg4MjA4MDUwMCwgMHhmZmZmN2ZmZiwgMHg0ODAyNWEwOCwgMHg4YzA4MTUxZSwKKwkweDA0MDIwMDJkLCAweDgyM2M3ZDQwLCAweDAwMDAwMDIwLCAweDA0MDFmMDJhLAorCTB4NDgwYmM4NTcsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NGYsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHg1OTMwMDQxNCwgMHg0ODAzYzg1NywgMHg4YzAwMDUxNCwKKwkweDA0MDIwMDA3LCAweDU5OWMxODE5LCAweDhjMGMxZDEyLCAweDA0MDIwMDA0LAorCTB4ODIwYzFkNDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMWQsIDB4NTkzMDIwMTMsCisJMHgwNDAxZjkyZCwgMHgwNDAyMDAxYSwgMHg0MjAwNzgwMCwgMHg4MDAwMDAwNSwKKwkweDU5MzA1MDBkLCAweDU5MmMwMjA4LCAweDQ4MDNjODU3LCAweDhjMDAwNTFlLAorCTB4MDQwMjAwMDUsIDB4ODIzYzdkNDAsIDB4MDAwMDAwMjAsIDB4NTkzMDQwMGMsCisJMHgwNDAxZjAwNCwgMHg4NDAwMDUxZSwgMHg0ODAyNWEwOCwgMHgwNDAxZjhkYywKKwkweDUwMjAxODAwLCAweDQ4MGU2MDBhLCAweDQ4MzI2MDBiLCAweDQ4MjI2MDBjLAorCTB4NDgyYTYwMGQsIDB4NDgwZmM4NTcsIDB4NDgzM2M4NTcsIDB4NDgyM2M4NTcsCisJMHg0ODJiYzg1NywgMHg4MDAwMDU4MCwgMHg0ODNlNjAwNCwgMHgxYzAxZjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDQ5MzNjODU3LCAweDRkMmMwMDAwLAorCTB4NTk5MDAwMDQsIDB4ODEzMDA1ODAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCisJMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKKwkweDU5MzI1ODA4LCAweDRkM2MwMDAwLCAweDRkNDAwMDAwLCAweDU5MzAwMDA0LAorCTB4NDgwM2M4NTcsIDB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZiMTMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjhjMSwgMHg1YzAwMDAwMCwgMHg4YzAwMDUxNiwKKwkweDA0MDAwMDEwLCAweDU5MmMwMDBmLCAweDQ4MDNjODU3LCAweDQ4MDI1ODA3LAorCTB4NDE3ODA4MDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNGJlZSwgMHg0YTAyNWMwNiwgMHgwMDAwZmZmZiwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA3Njk4LCAweDA0MDFmMDE1LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDIsIDB4NTkyYzAyMDgsIDB4ODQwMDA1NGUsCisJMHg0ODAyNWEwOCwgMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNiwKKwkweDA0MDIwMDA5LCAweDgxMTgwMGNhLCAweDgxYzgwYzAwLCAweDU4MDQwOTM5LAorCTB4NTkyYzAwMGQsIDB4ODAwNDA0ODAsIDB4NTkyYzA4MGYsIDB4ODAwNDA0ODAsCisJMHg0ODAyNTgwYiwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwODk5NywKKwkweDVjMDI4MDAwLCAweDVjMDI3ODAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAogCTB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NTk5MDAwMDQsIDB4ODEzMDA1ODAsCi0JMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU5MzI1ODA4LCAweDRkM2MwMDAwLAotCTB4NGQ0MDAwMDAsIDB4NTkzMDAwMDQsIDB4NDgwM2M4NTcsIDB4NGMwMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmRjMywgMHgwMjAxZjgwMCwgMHgwMDEwNmI4YSwKLQkweDVjMDAwMDAwLCAweDhjMDAwNTE2LCAweDA0MDAwMDEwLCAweDU5MmMwMDBmLAotCTB4NDgwM2M4NTcsIDB4NDgwMjU4MDcsIDB4NDE3ODA4MDAsIDB4NDIwMjgwMDAsCi0JMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwNGU3MCwgMHg0YTAyNWMwNiwKLQkweDAwMDBmZmZmLCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmODAwLAotCTB4MDAxMDc5MTEsIDB4MDQwMWYwMTUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDIsCi0JMHg1OTJjMDIwOCwgMHg4NDAwMDU0ZSwgMHg0ODAyNWEwOCwgMHg1OTMwMDQwNiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDA2LCAweDA0MDIwMDA5LCAweDgxMTgwMGNhLAotCTB4ODFjODBjMDAsIDB4NTgwNDA5MzksIDB4NTkyYzAwMGQsIDB4ODAwNDA0ODAsCi0JMHg1OTJjMDgwZiwgMHg4MDA0MDQ4MCwgMHg0ODAyNTgwYiwgMHg0MTdhNzgwMCwKLQkweDAyMDFmODAwLCAweDAwMTA4YmUzLCAweDVjMDI4MDAwLCAweDVjMDI3ODAwLAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsCi0JMHg1OTkwMDAwNCwgMHg4MTMwMDU4MCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKLQkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAotCTB4NTkzMjU4MDgsIDB4NTkyYzAyMDgsIDB4ODQwMDA1NDAsIDB4NDgwMjVhMDgsCi0JMHgwNDAxZjdiZiwgMHg0OTFiYzg1NywgMHg0OWQzYzg1NywgMHg0ZGQwMDAwMCwKLQkweDQxNzgwODAwLCAweDgwMDdhMGNhLCAweDgzZDNhNDAwLCAweDAwMDA3NjAwLAotCTB4NGEwM2EwMDUsIDB4ODAwMDAwMDIsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsCi0JMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwgMHgyNDIyMDAwMSwgMHgwNDAyMDAyOSwKKwkweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMjU4MDgsIDB4NTkyYzAyMDgsCisJMHg4NDAwMDU0MCwgMHg0ODAyNWEwOCwgMHgwNDAxZjdiZiwgMHg0OTFiYzg1NywKKwkweDQ5ZDNjODU3LCAweDRkZDAwMDAwLCAweDQxNzgwODAwLCAweDgwMDdhMGNhLAorCTB4ODNkM2E0MDAsIDB4MDAwMDc2MDAsIDB4NGEwM2EwMDUsIDB4ODAwMDAwMDIsCisJMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwgMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwKKwkweDI0MjIwMDAxLCAweDA0MDIwMDI5LCAweDU5ZDAxMDA2LCAweDgyMDgwNTAwLAorCTB4MDAwMDYwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDYwMDAsIDB4MDQwMDAwMzEsCisJMHg4MjA4MDUwMCwgMHg0MDAwODAwMCwgMHgwNDAwMDdmOCwgMHg4MDA0MDljMCwKKwkweDA0MDIwMDJjLCAweDgxMWEzMWMwLCAweDA0MDAwMDJhLCAweDQyMDAwMDAwLAorCTB4MDAwMDEwMDIsIDB4NTAwMDEwMDAsIDB4NDYwMDAwMDAsIDB4MDAwMDA1MTIsCisJMHg0MjAwMTgwMCwgMHgwMDAwMDAwYSwgMHg1OWUwMDAwMCwgMHg4YzAwMDUxYSwKKwkweDA0MDIwN2ZjLCAweDgwMGMxODQwLCAweDA0MDIwN2ZjLCAweDQyMDAwMDAwLAorCTB4MDAwMDEwMDIsIDB4NDYwMDAwMDAsIDB4MDAwMDA1MTQsIDB4NDIwMDE4MDAsCisJMHgwMDAwMDAwYSwgMHg1OWUwMDAwMCwgMHg4YzAwMDUzYSwgMHgwNDAyMDdmYywKKwkweDgwMGMxODQwLCAweDA0MDIwN2ZjLCAweDQyMDAwMDAwLCAweDAwMDAxMDAyLAorCTB4NDQwODAwMDAsIDB4MDQwMWYwMGYsIDB4MDIwMDQ4MDAsIDB4MDAwMjA3YzgsCiAJMHg1OWQwMTAwNiwgMHg4MjA4MDUwMCwgMHgwMDAwNjAwMCwgMHg4MjAwMDU4MCwKLQkweDAwMDA2MDAwLCAweDA0MDAwMDJmLCAweDgyMDgwNTAwLCAweDQwMDA4MDAwLAotCTB4MDQwMDA3ZjgsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMmEsIDB4ODExYTMxYzAsCi0JMHgwNDAwMDAyOCwgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMiwgMHg1MDAwMTAwMCwKLQkweDQ2MDAwMDAwLCAweDAwMDAwNTEyLCAweDQyMDAxODAwLCAweDAwMDAwMDBhLAotCTB4NTllMDAwMDAsIDB4OGMwMDA1MWEsIDB4MDQwMjA3ZmMsIDB4ODAwYzE4NDAsCi0JMHgwNDAyMDdmYywgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMiwgMHg0NjAwMDAwMCwKLQkweDAwMDAwNTE0LCAweDQyMDAxODAwLCAweDAwMDAwMDBhLCAweDU5ZTAwMDAwLAotCTB4OGMwMDA1M2EsIDB4MDQwMjA3ZmMsIDB4ODAwYzE4NDAsIDB4MDQwMjA3ZmMsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMTAwMiwgMHg0NDA4MDAwMCwgMHgwNDAxZjAwZCwKLQkweDU5ZDAxMDA2LCAweDgyMDgwNTAwLCAweDAwMDA2MDAwLCAweDgyMDAwNTgwLAotCTB4MDAwMDYwMDAsIDB4MDQwMDAwMDcsIDB4OGMwODE1MWUsIDB4MDQwMDA3ZjksCi0JMHg1OWQwMTAwNiwgMHg4MjA4MDUwMCwgMHgwMDAwNjAwMCwgMHgwNDAyMDdmNSwKKwkweDAwMDA2MDAwLCAweDA0MDAwMDA3LCAweDhjMDgxNTFlLCAweDA0MDAwN2Y3LAorCTB4NTlkMDEwMDYsIDB4ODIwODA1MDAsIDB4MDAwMDYwMDAsIDB4MDQwMjA3ZjMsCiAJMHg4M2QzYTQwMCwgMHgwMDAwMDAyMCwgMHg4MDA0MDgwMCwgMHg4MjA0MDQ4MCwKLQkweDAwMDAwMDA1LCAweDA0MDAxN2JmLCAweDVjMDNhMDAwLCAweDFjMDFmMDAwLAorCTB4MDAwMDAwMDUsIDB4MDQwMDE3YmQsIDB4NWMwM2EwMDAsIDB4MWMwMWYwMDAsCiAJMHg0OTFiYzg1NywgMHg0OWQzYzg1NywgMHg0ZGQwMDAwMCwgMHg0MTc4MDgwMCwKIAkweDgwMDdhMGNhLCAweDgzZDNhNDAwLCAweDAwMDA3NjAwLCAweDRhMDNhMDA1LAogCTB4ODAwMDAwMDEsIDB4NTlkMDAwMDYsIDB4ODNkM2E0MDAsIDB4MDAwMDAwMjAsCkBAIC0xMTA1LDE5ICsxMTI1LDE5IEBACiAJMHg4MDIwNDAwMCwgMHg1MDIwMDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwMywKIAkweDgwMjg1MDQwLCAweDFjMDFmMDAwLCAweDU4MzAwMDAxLCAweDgwMDAwNTQwLAogCTB4MDQwMDAwMGUsIDB4NDgwMjYwMGIsIDB4NDAwMDYwMDAsIDB4NTgzMDAyMDQsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDQwMCwgMHgwMDEwMTBiZCwKLQkweDUwMDA0MDAwLCAweDgwMjA0MWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA0MDAsIDB4MDAxMDExMGQsCisJMHg1MDAwNDAwMCwgMHg4MDIwNDFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKIAkweDgwMjg1MDQwLCAweDFjMDFmMDAwLCAweDQwMDA1MDAwLCAweDFjMDFmMDAwLAogCTB4MDAwMDAwMDUsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGUsCiAJMHgwMDAwMDAxMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwYiwKLQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMTAxMGI4LAotCTB4MDAxMDEwYjcsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDEwMTBiOCwgMHgwMDEwMTBiNywgMHgwMDEwMTBiNCwKLQkweDAwMTAxMGI4LCAweDAwMTAxMGI3LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAxMDEwYjgsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDEwMTEwOCwKKwkweDAwMTAxMTA3LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAxMDExMDgsIDB4MDAxMDExMDcsIDB4MDAxMDExMDQsCisJMHgwMDEwMTEwOCwgMHgwMDEwMTEwNywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMTAxMTA4LAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDEwMTBiOCwgMHgwMDEwMTBiOCwgMHgwMDEwMTBiOCwKLQkweDAwMDAwMDAwLCAweDAwMTAxMGI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAxMDExMDgsIDB4MDAxMDExMDgsIDB4MDAxMDExMDgsCisJMHgwMDAwMDAwMCwgMHgwMDEwMTEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLCAweDQ4MTNjODU3LCAweDQ5MmZjODU3LCAweDQ5MzNjODU3LAogCTB4NDgxMjYwMTIsIDB4NTkyYzUyMDcsIDB4ODAyODUxYzAsIDB4MDQwMDAwNGEsCiAJMHg0MTJjNjAwMCwgMHgwNDAxZjg0YiwgMHgwNDAwMDAwOSwgMHg4MjI0MDU4MCwKQEAgLTExMzAsMzQgKzExNTAsMzQgQEAKIAkweDgwMjg1MDQwLCAweDA0MDAwMDJjLCAweDgwMjA0MDAwLCAweDUwMjAwMDAwLAogCTB4ODAwMDA1NDAsIDB4MDQwMjAwMGEsIDB4NTgzMDAwMDEsIDB4ODAwMDY1NDAsCiAJMHgwNDAwMDAyNSwgMHg1ODMwMDIwNCwgMHg4MjAwNGQwMCwgMHgwMDAwMDAwZiwKLQkweDgyMjQ0NDAwLCAweDAwMTAxMGJkLCAweDUwMjA0MDAwLCAweDU5MmMwMjA4LAorCTB4ODIyNDQ0MDAsIDB4MDAxMDExMGQsIDB4NTAyMDQwMDAsIDB4NTkyYzAyMDgsCiAJMHg4NDAwMDUxZSwgMHg0ODAyNWEwOCwgMHgwNDAxZjAxMywgMHg4MDEwMjA4MCwKIAkweDgwMTAyMDAwLCAweDQ4MTI2MDEwLCAweDQ4MTNjODU3LCAweDU4MDgwODAyLAotCTB4NDAxMDAwMDAsIDB4ODAwNDI0ODAsIDB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsCisJMHg0MDEwMDAwMCwgMHg4MDA0MjQ4MCwgMHgwMjAwMTgwMCwgMHgwMDEwMDYxNSwKIAkweDU4MDgwMDAwLCAweDU4MDgxODAxLCAweDgwMTAyNDAwLCAweDQ4MTI2MDBlLAogCTB4NDgwZTYwMGYsIDB4NDgxM2M4NTcsIDB4NTkyYzAyMDgsIDB4ODQwMDA1NWUsCiAJMHg0ODAyNWEwOCwgMHg0ODMzYzg1NywgMHg0ODIzYzg1NywgMHg0ODJiYzg1NywKIAkweDQ4MzI2MDBiLCAweDQ4MjI2MDBjLCAweDQ4MmE2MDBkLCAweDgwMDAwNTgwLAogCTB4MDQwMWYwMDMsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCiAJMHg1ODMwMDIwNCwgMHg4MjAwNGQwMCwgMHgwMDAwMDAwZiwgMHg4MjI0NDQwMCwKLQkweDAwMTAxMGJkLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwNTgwLAorCTB4MDAxMDExMGQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsCiAJMHgwMDAwMDAyOSwgMHgwNDAyMDAxYiwgMHg1MDIwNDAwMCwgMHg1OTJjMDQwOSwKLQkweDgwMDAwNTQwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDgyMDAwYzgwLAorCTB4ODAwMDA1NDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4ODIwMDBjODAsCiAJMHgwMDAwMDAwMiwgMHgwNDAwMTAxMSwgMHg1ODMwMDAwMSwgMHg4MDAwNjU0MCwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU4MzAwMjA0LCAweDgyMDAwNTAwLAotCTB4MDAwMDAwMGYsIDB4ODIwMDA0MDAsIDB4MDAxMDEwYmQsIDB4NTAwMDQwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg1ODMwMDIwNCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDBmLCAweDgyMDAwNDAwLCAweDAwMTAxMTBkLCAweDUwMDA0MDAwLAogCTB4NDAwNDAwMDAsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDYsIDB4ODIwNDBjODAsCiAJMHgwMDAwMDAwNSwgMHgwNDAyMTdmMSwgMHg4MDIwNDQwMCwgMHg4MDAwMDU4MCwKIAkweDFjMDFmMDAwLCAweDU5ZTAwMDA0LCAweDhjMDAwNTBlLCAweDAyMDIwMDAwLAotCTB4MDAxMDA5MDMsIDB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NTllNGI4MDAsCisJMHgwMDEwMDk1MSwgMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwgMHg1OWU0YjgwMCwKIAkweDQ4NWZjODU3LCAweDgyNWMwNTAwLCAweDAwMDAwMDFmLCAweDA0MDAwMDA0LAotCTB4NTllNDA4NjIsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4ODI1YzA1MDAsCi0JMHgwMDAwMDBlMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg4YzVjYmQwZSwKKwkweDU5ZTQwODYyLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDgyNWMwNTAwLAorCTB4MDAwMDAwZTAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4OGM1Y2JkMGUsCiAJMHgwNDAyMDgwNywgMHg4YzVjYmQwYywgMHgwNDAyMDgwOSwgMHg4YzVjYmQwYSwKIAkweDA0MDIwODc4LCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAogCTB4NGEwM2M4MDAsIDB4MDAwMDAwODAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsCi0JMHg0MjAwNzgwMCwgMHgwMDEwYjhlYywgMHg1ODNjMDAwMSwgMHg1ODNjMDgwMiwKLQkweDgwMDQwNTQwLCAweDA0MDAwMDNmLCAweDQyMDAwODAwLCAweDAwMTBiN2Y3LAorCTB4NDIwMDc4MDAsIDB4MDAxMGI2ZWIsIDB4NTgzYzAwMDEsIDB4NTgzYzA4MDIsCisJMHg4MDA0MDU0MCwgMHgwNDAwMDAzZiwgMHg0MjAwMDgwMCwgMHgwMDEwYjVmNSwKIAkweDUwMDY1ODAwLCAweDU5MmMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLAogCTB4MDQwMDAwMGUsIDB4NTllNDA4NTAsIDB4NTllNDE4NTMsIDB4NDAwYzAwMDAsCiAJMHg4MDA0MDQwMCwgMHg1OWU0MDg1MiwgMHg0ODA3Yzg1NywgMHg4MDA0MTQ4MCwKQEAgLTExNzAsMTIgKzExOTAsMTIgQEAKIAkweDA0MDAwMDA3LCAweDU5MmMxMDA3LCAweDQ4MGJjODU3LCAweDU4M2MwMDAzLAogCTB4NDgwM2M4NTcsIDB4ODAwODA0ODAsIDB4MDQwMDEwMDMsIDB4NTgzYzEwMDEsCiAJMHg0ODBiYzg1NywgMHg1ODNjMDgwMiwgMHg0ODBiYzg1NywgMHg0ODA3Yzg1NywKLQkweDRhMDI1ODAxLCAweDAwMDAwMDAwLCAweDRhMDI1ODA5LCAweDAwMTAxMWJjLAorCTB4NGEwMjU4MDEsIDB4MDAwMDAwMDAsIDB4NGEwMjU4MDksIDB4MDAxMDEyMGMsCiAJMHg0ODBhNTgwNywgMHg0ODA2NTgwOCwgMHg1OWU0MDA1MywgMHg0ODAyNTgwNCwKLQkweDQxMmMxMDAwLCAweDQ5MmZjODU3LCAweDAyMDFmODAwLCAweDAwMTAwODU4LAorCTB4NDEyYzEwMDAsIDB4NDkyZmM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDA4YTEsCiAJMHg1YzAyNTgwMCwgMHg0YTAzYzgwMCwgMHgwMDAwMDA0MCwgMHgxYzAxZjAwMCwKLQkweDQyMDA3ODAwLCAweDAwMTBiN2Y3LCAweDUwM2M3ODAwLCAweDRhMDA3ODAyLAotCTB4MDAwMDAxMDAsIDB4NDIwMDc4MDAsIDB4MDAxMGI4ZWMsIDB4NTgzYzAwMDAsCisJMHg0MjAwNzgwMCwgMHgwMDEwYjVmNSwgMHg1MDNjNzgwMCwgMHg0YTAwNzgwMiwKKwkweDAwMDAwMTAwLCAweDQyMDA3ODAwLCAweDAwMTBiNmViLCAweDU4M2MwMDAwLAogCTB4NDgwM2M4NTcsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDQsCiAJMHg4MDAwMDAwMCwgMHg0ODAwNzgwMCwgMHgwNDAxZjAxOSwgMHg0OTc4NzgwMCwKIAkweDU4M2MxODA2LCAweDU4M2MwMDA1LCAweDgwMGMxODAwLCAweDQ4MGM3ODA2LApAQCAtMTE4Myw3MyArMTIwMyw3MyBAQAogCTB4ODAwNDA5YzAsIDB4MDQwMDAwMGUsIDB4NTgzYzAwMDgsIDB4ODAwMDAwMDAsCiAJMHg0ODAwNzgwOCwgMHg4MDA0MDU4MCwgMHgwNDAyMDAwOSwgMHg0OTc4NzgwOCwKIAkweDU4M2MyMDA2LCAweDQyMDAxODAwLCAweDAwMDAwMDAxLCAweDQyMDAxMDAwLAotCTB4MDAwMDgwMjgsIDB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsIDB4MWMwMWYwMDAsCi0JMHg0YTAzYzgwMCwgMHgwMDAwMDAyMCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0MCwKKwkweDAwMDA4MDI4LCAweDAyMDFmODAwLCAweDAwMTAzODU3LCAweDFjMDFmMDAwLAorCTB4NGEwM2M4MDAsIDB4MDAwMDAwMjAsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NjcsCiAJMHg1OWU0MDAwMCwgMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwgMHg0YTAwNzAwMSwKIAkweDAwMDAwMDAwLCAweDgyMDQwZDAwLCAweDQzMDAwZjgwLCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4NTgzODAwMDksIDB4NDgwM2MwMGYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTQwMiwgMHg1ODNhNTgwOCwgMHg1OTJjMDAwMCwgMHg0ODAwNzAwOCwKKwkweDAwMTAwNjE1LCAweDU4MzgwMDA5LCAweDQ4MDNjMDBmLCAweDAyMDFmODAwLAorCTB4MDAxMDkxY2IsIDB4NTgzYTU4MDgsIDB4NTkyYzAwMDAsIDB4NDgwMDcwMDgsCiAJMHg4MDAwMDFjMCwgMHgwNDAyMDAwMiwgMHg0OTc4NzAwNywgMHgwMjAxZjgwMCwKLQkweDAwMTAwN2Y0LCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLCAweDAwMTAwODdkLAorCTB4MDAxMDA4M2EsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsIDB4MDAxMDA4YzYsCiAJMHg0ODAzYzg1NiwgMHg0YzNjMDAwMCwgMHg0ZDJjMDAwMCwgMHg0ZDMwMDAwMCwKLQkweDU4MzAwMDBhLCAweDgwMDI1ZDQwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAotCTB4NTkyZTYwMDgsIDB4NGMzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk0MWEsCi0JMHg1YzAwNjAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1ODMwMDAwMiwKKwkweDU4MzAwMDBhLCAweDgwMDI1ZDQwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LAorCTB4NTkyZTYwMDgsIDB4NGMzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDkxZTMsCisJMHg1YzAwNjAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg1ODMwMDAwMiwKIAkweDgyMDAwNTgwLCAweDAwMDAwMTAwLCAweDA0MDIwMDEwLCAweDU5MzA3ODBiLAogCTB4NTgzYzAwMDEsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMGUsIDB4NDgwMjYwMGIsCiAJMHg0MDAwNzgwMCwgMHg4MjAwMDQwMCwgMHgwMDAwMDAwMiwgMHg0ODAwNjAwMywKIAkweDU4M2MwMDAwLCAweDQ4MDA2MDA0LCAweDQwMzAxMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDA4NTgsIDB4MDQwMWYwMGMsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDIsCi0JMHg0YzMwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHg1YzAwNjAwMCwKLQkweDQwMzI1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwN2Y0LCAweDAyMDFmODAwLAotCTB4MDAwMjA3N2QsIDB4NWMwMjYwMDAsIDB4NWMwMjU4MDAsIDB4NWMwMDc4MDAsCisJMHgwMDEwMDhhMSwgMHgwNDAxZjAwYywgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMiwKKwkweDRjMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDVjMDA2MDAwLAorCTB4NDAzMjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDhiNCwgMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwgMHg1YzAwNzgwMCwKIAkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMmMwMDAwLCAweDRkMzAwMDAwLAotCTB4NDIwMDcwMDAsIDB4MDAxMGI3ZjgsIDB4NTgzODA4MDEsIDB4ODIwNDA1ODAsCisJMHg0MjAwNzAwMCwgMHgwMDEwYjVmNiwgMHg1ODM4MDgwMSwgMHg4MjA0MDU4MCwKIAkweDAwMDAwMDAyLCAweDA0MDIwMDExLCAweDU4Mzg2MDAyLCAweDU4MzAwMDBhLAogCTB4ODEyYzA1ODAsIDB4MDQwMjAwMGQsIDB4NTllMDAwMDQsIDB4OGMwMDA1MGUsCiAJMHgwNDAwMDdmZSwgMHg1OWRjMDAwNiwgMHg0ODAzYzg1NywgMHg0YTAzYjgwNSwKIAkweDIwMDAwMDAwLCAweDhjMDAwNTNlLCAweDA0MDAwN2Y4LCAweDRhMDA3MDAxLAogCTB4MDAwMDAwMDAsIDB4MDQwMWYwMTksIDB4NTgzODYwMDYsIDB4NDAzMDUwMDAsCi0JMHg4MDMwNjFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1ODMwMDAwYSwKKwkweDgwMzA2MWMwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDU4MzAwMDBhLAogCTB4ODEyYzA1ODAsIDB4MDQwMDAwMDQsIDB4NDAzMDUwMDAsIDB4NTgzMDYwMDAsCiAJMHgwNDAxZjdmOCwgMHg0MDI4MDAwMCwgMHg4MDMwMDU4MCwgMHg1ODMwMDAwMCwKIAkweDA0MDAwMDA2LCAweDQ4MDA1MDAwLCAweDgwMDAwMWMwLCAweDA0MDIwMDA3LAogCTB4NDgyODcwMDUsIDB4MDQwMWYwMDUsIDB4ODAwMDAxYzAsIDB4MDQwMjAwMDIsCiAJMHg0ODAwNzAwNSwgMHg0ODAwNzAwNiwgMHg0MDMyNTgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAwN2Y0LCAweDQyMDA3MDAwLCAweDAwMTBiN2Y4LCAweDU4MzgwMDAxLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA4N2QsCisJMHgwMDEwMDgzYSwgMHg0MjAwNzAwMCwgMHgwMDEwYjVmNiwgMHg1ODM4MDAwMSwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDAwLCAweDAyMDAwODAwLCAweDAwMTAwOGM2LAogCTB4NWMwMjYwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCiAJMHg0MjAwMDgwMCwgMHgwMDAwMDAzYywgMHg0ODA3OTAwMCwgMHg1OWM4MDAwMCwKIAkweDgwMDQwNTAwLCAweDA0MDIwN2ZlLCAweDQ5N2I5MDA1LCAweDRhMDM5MDM1LAogCTB4MDA4ODAyMDAsIDB4NTlhODAwMGUsIDB4ODAwMDAwZTAsIDB4NDgwMzkwMGUsCi0JMHg0YTAzOTAxMSwgMHgwMDAwMDAyNCwgMHg0YTAzOTAwZiwgMHgwMDEwZDFjMCwKLQkweDRhMDM5MDEwLCAweDAwMTBkMWMwLCAweDRhMDM5MDE1LCAweDAwMDAwMDdmLAorCTB4NGEwMzkwMTEsIDB4MDAwMDAwMjQsIDB4NGEwMzkwMGYsIDB4MDAxMGNmYzAsCisJMHg0YTAzOTAxMCwgMHgwMDEwY2ZjMCwgMHg0YTAzOTAxNSwgMHgwMDAwMDA3ZiwKIAkweDRhMDM5MDBkLCAweDAwMDAwMDQwLCAweDRhMDM5MDAwLCAweDAwMDAxNjAwLAogCTB4MWMwMWYwMDAsIDB4NTljODAwMDcsIDB4OGMwMDA1MDgsIDB4MDQwMjA4YjcsCiAJMHg1OWM4MDgwMCwgMHg4YzA0MGQxNiwgMHgwNDAyMDAwNCwgMHg4MjAwMDUwMCwKIAkweDAwMDAwMDA2LCAweDBjMDFmMDA1LCAweDQ4MDdjODU3LCAweDgyMDAwNTAwLAotCTB4MDAwMDAwMGUsIDB4MGMwMWYwMDEsIDB4MDAxMDEyYTgsIDB4MDAxMDEyYTYsCi0JMHgwMDEwNTk5OSwgMHgwMDEwMTJhNiwgMHgwMDEwMTJhYSwgMHgwMDEwMTJhNiwKLQkweDAwMTAxMmFhLCAweDAwMTAxMmFhLCAweDAwMTAxMmE2LCAweDAwMTAxMmE2LAotCTB4MDAxMDEyYTYsIDB4MDAxMDEyYTYsIDB4MDAxMDEyYWEsIDB4MDAxMDEyYTYsCi0JMHgwMDEwMTJhYSwgMHgwMDEwMTJhNiwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDAwMDAwMDBlLCAweDBjMDFmMDAxLCAweDAwMTAxMmY4LCAweDAwMTAxMmY2LAorCTB4MDAxMDU2N2QsIDB4MDAxMDEyZjYsIDB4MDAxMDEyZmEsIDB4MDAxMDEyZjYsCisJMHgwMDEwMTJmYSwgMHgwMDEwMTJmYSwgMHgwMDEwMTJmNiwgMHgwMDEwMTJmNiwKKwkweDAwMTAxMmY2LCAweDAwMTAxMmY2LCAweDAwMTAxMmZhLCAweDAwMTAxMmY2LAorCTB4MDAxMDEyZmEsIDB4MDAxMDEyZjYsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsCiAJMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwgMHg1OWM4MDgwYywgMHg0ODA3Yzg1NywKIAkweDgyMDQwNTAwLCAweDAwMDA2MDAwLCAweDA0MDAwMDA0LCAweDAyMDFmODAwLAotCTB4MDAxMGFhMDMsIDB4MDQwMWYwMDYsIDB4ODIwNDA1MDAsIDB4MDA3ZjAwMDAsCi0JMHgwNDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwYTlkNSwgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZWIzLCAweDA0MDFmMDJiLCAweDgyMDQwNTAwLCAweDAwMDAwMDE0LAotCTB4MDQwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhMzIsIDB4ODM2YzA1ODAsCi0JMHgwMDAwMDAwMywgMHgwNDAwMDAwZCwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwKLQkweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA0MTFkLCAweDA0MDFmMDA3LAorCTB4MDAxMGE4MmEsIDB4MDQwMWYwMDYsIDB4ODIwNDA1MDAsIDB4MDA3ZjAwMDAsCisJMHgwNDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwYTdmYywgMHgwMjAxZjgwMCwKKwkweDAwMTA2YzA3LCAweDA0MDFmMDJiLCAweDgyMDQwNTAwLCAweDAwMDAwMDE0LAorCTB4MDQwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NTksIDB4ODM2YzA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAwMDAwZCwgMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwKKwkweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTAzZjM3LCAweDA0MDFmMDA3LAogCTB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTBhMiwgMHgwNDAxZjgxNywgMHgwNDAxZjAxNSwKKwkweDAyMDFmODAwLCAweDAwMTA0ZDc2LCAweDA0MDFmODE3LCAweDA0MDFmMDE1LAogCTB4ODIwNDA1MDAsIDB4MDAwMDFjMDAsIDB4MDQwMDAwMDUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWExMSwgMHgwNDAxZjgxMCwgMHgwNDAxZjAwZSwgMHg4MjA0MDUwMCwKLQkweDAwMDAwMTQwLCAweDA0MDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhYTI0LAorCTB4MDAxMGE4MzgsIDB4MDQwMWY4MTAsIDB4MDQwMWYwMGUsIDB4ODIwNDA1MDAsCisJMHgwMDAwMDE0MCwgMHgwNDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYTg0YiwKIAkweDA0MDFmODA5LCAweDA0MDFmMDA3LCAweDgyMDQwNTAwLCAweDAwMDA4MDAwLAotCTB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMGE5ZmMsIDB4MDQwMWY4MDIsCisJMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwYTgyMywgMHgwNDAxZjgwMiwKIAkweDFjMDFmMDAwLCAweDRjMGMwMDAwLCAweDRjMTAwMDAwLCAweDRjMTQwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDBlYzksIDB4NWMwMDI4MDAsIDB4NWMwMDIwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGYxNywgMHg1YzAwMjgwMCwgMHg1YzAwMjAwMCwKIAkweDVjMDAxODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDU5YTgwODA0LAogCTB4NTlhODAwMmIsIDB4ODIwMDA1MDAsIDB4ZmZmZmYwMDAsIDB4ODAwNDA1NDAsCiAJMHg0ODAzNTAyYiwgMHg1OWE4MDAyZiwgMHg4MjAwMDUwMCwgMHhmZmZmZjAwMCwKQEAgLTEyNzIsMzUgKzEyOTIsMzUgQEAKIAkweDgwMTAyMGMyLCAweDgyMTAwNDgwLCAweDAwMDAwMTEwLCAweDgwMDAwMDgwLAogCTB4ODAwMDIwMDAsIDB4ODAwODAwZDAsIDB4ODAxNDA1NDAsIDB4ODAxMDA1NDAsCiAJMHg0ODAzOTAzNSwgMHgxYzAxZjAwMCwgMHg1OWM4MDgxNSwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQwLCAweDgyMDQwZDAwLCAweDAwMDAwMDdjLCAweDQ4MDc5MDAwLAorCTB4MDAxMDA2MGQsIDB4ODIwNDBkMDAsIDB4MDAwMDAwN2MsIDB4NDgwNzkwMDAsCiAJMHg1OWM4MDAwMCwgMHg4MDA0MDUwMCwgMHgwNDAyMDdmZSwgMHg4YzA0MGQwNCwKIAkweDA0MDAwMDAzLCAweDU5YzgwMDM1LCAweDQ4MDM5MDM1LCAweDU5YzgwMDAwLAogCTB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsIDB4MWMwMWYwMDAsCiAJMHg0ODAzYzg1NiwgMHg0OTdiODhhOSwgMHg0YTAzODgwNywgMHgwMDAwMDAwMSwKIAkweDQ5N2I4ODA3LCAweDU5YzQwMDA1LCAweDQ4MDM4ODA1LCAweDAyMDFmODAwLAotCTB4MDAxMDE4MTUsIDB4NDIwMWQwMDAsIDB4MDAwMDAxZjQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjA4ZSwgMHg0OTdiODgwZSwgMHg0MjAwYjAwMCwgMHgwMDAwMDFmNCwKKwkweDAwMTAxODg2LCAweDQyMDFkMDAwLCAweDAwMDAwMWY0LCAweDAyMDFmODAwLAorCTB4MDAxMDVkZDIsIDB4NDk3Yjg4MGUsIDB4NDIwMGIwMDAsIDB4MDAwMDAxZjQsCiAJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxNCwKLQkweDAyMDFmODAwLCAweDAwMTAxOTQ0LCAweDQyMDAwODAwLCAweDAwMDAwMDE0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsIDB4OGMwNDBkMDAsIDB4MDQwMDAwMDUsCi0JMHg4MDU4YjA0MCwgMHgwNDAyMDdmMywgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDAyMDFmODAwLCAweDAwMTAxOWIxLCAweDQyMDAwODAwLCAweDAwMDAwMDE0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5YWMsIDB4OGMwNDBkMDAsIDB4MDQwMDAwMDUsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmMywgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwKIAkweDQyMDBiMDAwLCAweDAwMDAwMDMyLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwYjQsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDBiNCwgMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwKKwkweDQyMDAwODAwLCAweDAwMDAwMGI0LCAweDAyMDFmODAwLCAweDAwMTAxOWIxLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwYjQsIDB4MDIwMWY4MDAsIDB4MDAxMDE5YWMsCiAJMHg4YzA0MGQwMCwgMHgwNDAwMDAwNSwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmMywKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDU5YzQwMDA1LCAweDQ4MDM4ODA1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NTljNDAwMDUsIDB4NDgwMzg4MDUsCiAJMHg0MjAwMDAwMCwgMHgwMDAwMDA4OSwgMHg4MDAwMDhkMCwgMHg0ODA3NTA1NCwKIAkweDQ4MDc1MDU1LCAweDQ4MDc1MDU2LCAweDQyMDAwODAwLCAweDAwMDAwMGUwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwZjQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwgMHg4MjA0MDUwMCwgMHhmZmZmZmZkMSwKKwkweDAyMDFmODAwLCAweDAwMTAxOWIxLCAweDQyMDAwODAwLCAweDAwMDAwMGY0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5YWMsIDB4ODIwNDA1MDAsIDB4ZmZmZmZmZDEsCiAJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwgMHgwMDAwMDBmNCwKLQkweDAyMDFmODAwLCAweDAwMTAxOTQ0LCAweDQyMDAwODAwLCAweDAwMDAwMGEwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMDEsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDBhMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwKLQkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOTNmLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5YjEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTlhYywgMHg4MjA0MDU0MCwgMHgwMDAwMDAwMSwKKwkweDQyMDAwODAwLCAweDAwMDAwMGEwLCAweDAyMDFmODAwLCAweDAwMTAxOWIxLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5YWMsCiAJMHg4MjA0MDU0MCwgMHgwMDAwMDAwMSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAxOTQ0LCAweDQyMDFkMDAwLCAweDAwMDFkNGMwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsIDB4MDQwMWZhMmIsIDB4NGEwMzg4YTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTliMSwgMHg0MjAxZDAwMCwgMHgwMDAxZDRjMCwKKwkweDAyMDFmODAwLCAweDAwMTA1ZGQyLCAweDA0MDFmYTQ1LCAweDRhMDM4OGE3LAogCTB4MDAwMGY3ZjcsIDB4NGEwMzg4YTMsIDB4ODAwMDQwM2MsIDB4NGEwMzg4YWUsCiAJMHgwMDAwNjFhOCwgMHg0YTAzODgwMSwgMHgwMDAzMjA2MywgMHg0YTAzODgxMCwKIAkweDAwNDEwMTA4LCAweDRhMDM4ODExLCAweDAwNTIwNjA4LCAweDRhMDM4ODEyLApAQCAtMTMxNSwyMjQ2ICsxMzM1LDIxMDEgQEAKIAkweDRhMDM4OGE2LCAweDAwMDAwMDFlLCAweDRhMDM4OGIwLCAweDAwMDA3NTMwLAogCTB4NGEwMzg4MDIsIDB4MDAwMGZmZmYsIDB4NGEwMzg4MDYsIDB4YzBlMDA4MDAsCiAJMHgxYzAxZjAwMCwgMHg0OTdiNTAyMiwgMHg0YTAzNTAyMSwgMHgwMDAwMDAwMSwKLQkweDQyMDAwODAwLCAweDAwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMTAxOTNmLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5YWMsCiAJMHg4MjA0MDUwMCwgMHhmZmZmZmZhZiwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMCwKLQkweDQyMDAwODAwLCAweDAwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMTAxOTQ0LAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwZjQsIDB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDEwMTliMSwKKwkweDQyMDAwODAwLCAweDAwMDAwMGY0LCAweDAyMDFmODAwLCAweDAwMTAxOWFjLAogCTB4NGMwNDAwMDAsIDB4NDAwNDAwMDAsIDB4ODQwMDA1NDgsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDBmNCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOTNmLCAweDgyMDQwNTAwLAorCTB4MDAwMDAwZjQsIDB4MDIwMWY4MDAsIDB4MDAxMDE5YjEsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTlhYywgMHg4MjA0MDUwMCwKIAkweGZmZmZmZmMxLCAweDgyMDAwNTQwLCAweDAwMDAwMDM4LCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDQsIDB4NWMwMDAwMDAsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDBmNCwgMHgwMjAxZjAwMCwgMHgwMDEwMTk0NCwKLQkweDU5YzQwODA1LCAweDQ4MDdjODU3LCAweDU5YzQwMDA2LCAweDgwMDQwZDAwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwNDA1MDAsIDB4MDBlMDA4MDAsCi0JMHgwNDAyMDAwNCwgMHg4YzA0MGQzZSwgMHgwNDAyMDhjNCwgMHgwNDAxZjAwNywKLQkweDgyMDQwNTAwLCAweDAwODAwODAwLCAweDAyMDIwODAwLCAweDAwMTAwNWQwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsCi0JMHg1OWM0YjgwNSwgMHg0ODVmYzg1NywgMHg1OWM0MDAwNiwgMHg4YzAwMDUwMCwKLQkweDA0MDAwMDAzLCAweDhjNWNiZDAwLCAweDA0MDIwMDc5LCAweDAyMDFmODAwLAotCTB4MDAxMDUxM2IsIDB4MDQwMDAwMTQsIDB4NTljNDAwMDUsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDBjMCwgMHgwNDAwMDAzNiwgMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwKLQkweDA0MDIwMDMzLCAweDRhMDM4ODA1LCAweDA0MDAwMDAwLCAweDU5YzQwMGEzLAotCTB4ODIwMDA1MDAsIDB4YmYyMDNmZmYsIDB4NDgwMzg4YTMsIDB4NDk3YjUwNDksCi0JMHg0YTAzODgwNSwgMHgwMDAwMDBjMCwgMHgwMjAxZjgwMCwgMHgwMDEwNTA2NSwKLQkweDA0MDFmMDYzLCAweDhjNWNiZDM0LCAweDA0MDIwMDI1LCAweDU5YzQwMDA1LAotCTB4OGMwMDA1MGMsIDB4MDQwMjAwMTIsIDB4OGMwMDA1MGUsIDB4MDQwMjAwMTMsCi0JMHg4YzAwMDUwYSwgMHgwNDAyMDAxNCwgMHg4YzAwMDUwOCwgMHgwNDAwMDAwYiwKLQkweDU5YTgwMDE3LCAweDgyMDAwNTgwLCAweDAwMDAwMDA5LCAweDA0MDIwMDA3LAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4NDQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTMxOCwgMHgwNDAxZjA0YiwgMHg0YTAzNTAzMywKKwkweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOWIxLCAweDVjMDAwMDAwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwZjQsIDB4MDIwMWYwMDAsIDB4MDAxMDE5YjEsCisJMHg1OWM0MDgwNSwgMHg1OWM0MDAwNiwgMHg4MDA0MGQwMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDgyMDQwNTAwLCAweDAwZTAwODAwLCAweDA0MDIwMDA0LAorCTB4OGMwNDBkM2UsIDB4MDQwMjA4ZGYsIDB4MDQwMWYwMDcsIDB4ODIwNDA1MDAsCisJMHgwMDgwMDgwMCwgMHgwMjAyMDgwMCwgMHgwMDEwMDYwZCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDRjNWMwMDAwLCAweDRjNjAwMDAwLCAweDU5YzRiODA1LAorCTB4NTljNDAwMDYsIDB4OGMwMDA1MDAsIDB4MDQwMDAwMDMsIDB4OGM1Y2JkMDAsCisJMHgwNDAyMDA5NSwgMHg0ODVmYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwKKwkweDA0MDAwMDFlLCAweDU5YzQwMDA1LCAweDgyMDAwNTAwLCAweDAwMDAwMGMwLAorCTB4MDQwMDAwNGIsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMjMsIDB4MDQwMjAwNDgsCisJMHg1OWM0MDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmMCwgMHgwNDAyMDAwNCwKKwkweDRhMDM4ODA1LCAweDAwMDAwMGMwLCAweDA0MDFmMDQxLCAweDU5YTgwMDE1LAorCTB4ODQwMDA1MDYsIDB4NDgwMzUwMTUsIDB4NDIwMDYwMDAsIDB4ZmYyMDNmZmYsCisJMHg0MjAwNjgwMCwgMHg0MDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDBhZCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDEwLCAweDQyMDAxMDAwLCAweDAwMTA0MDIwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVkYzcsIDB4OGM1Y2JkMzQsIDB4MDQwMjAwMzAsCisJMHg0YTAzNTAzMiwgMHgwMDAwYWFhYSwgMHg1OWM0MDAwNSwgMHg4YzAwMDUwYywKKwkweDA0MDIwMDEyLCAweDhjMDAwNTBlLCAweDA0MDIwMDFjLCAweDhjMDAwNTBhLAorCTB4MDQwMjAwMWQsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMGIsIDB4NTlhODAwMTcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwOSwgMHgwNDAyMDAwNywgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjQyLCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDAyMDFmODAwLAorCTB4MDAxMDRmZTksIDB4MDQwMWYwNWEsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMjMsCisJMHgwNDAyMDAwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwZiwgMHg0MjAwMTAwMCwKKwkweDAwMTAzZjM3LCAweDAyMDFmODAwLCAweDAwMTA1ZGE3LCAweDRhMDM1MDMzLAogCTB4MDAwMDAwMDAsIDB4MDQwMWYwMGIsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDIsCi0JMHgwNDAxZjAwOCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg0NiwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDAyMDFmODAwLCAweDAwMTA1MmMyLCAweDA0MDFmMDNlLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUzNzgsIDB4MDQwMWYwM2IsIDB4OGM1Y2JkMzQsCi0JMHgwNDAwMDAzNywgMHg1OWM0MDAwNSwgMHg4YzAwMDUzYSwgMHgwNDAyMDAwNSwKLQkweDQyMDAwMDAwLCAweDAwMTBiODE4LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4NGEwMzg4MDUsIDB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsCisJMHgwNDAxZjAwOCwgMHg0MjAwMDAwMCwgMHgwMDEwYjY0NCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhODZlLCAweDAyMDFmODAwLCAweDAwMTA0ZjkzLCAweDA0MDFmMDQ0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDUwNDksIDB4MDQwMWYwNDEsIDB4OGM1Y2JkMzQsCisJMHgwNDAwMDAzZCwgMHg1OWM0MDAwNSwgMHg4YzAwMDUzYSwgMHgwNDAyMDAwNSwKKwkweDQyMDAwMDAwLCAweDAwMTBiNjE2LCAweDAyMDFmODAwLCAweDAwMTBhODZlLAorCTB4NGEwMzg4MDUsIDB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsCiAJMHgwNDAyMDAxMCwgMHg0YTAzODgwNSwgMHgwNDAwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA1MTQ5LCAweDA0MDIwMDA4LCAweDRhMDM1MDMzLCAweDAwMDAwMDAxLAotCTB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDUwYTIsCi0JMHgwNDAxZjA1YiwgMHg0MTc4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNTExMywKLQkweDAyMDFmODAwLCAweDAwMTAxOWZlLCAweDQwMDBjMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDE5NjMsIDB4ODM2YzE1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMGQsCi0JMHg4YzVjYmQwMCwgMHgwNDAyMDAxMiwgMHg1OWE4MTAwNSwgMHg4YzA4MTUwNiwKKwkweDAwMTA0ZTFiLCAweDA0MDIwMDA4LCAweDRhMDM1MDMzLCAweDAwMDAwMDAxLAorCTB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDRkNzYsCisJMHgwNDAxZjA2MSwgMHg0MTc4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNGRlNSwKKwkweDAyMDFmODAwLCAweDAwMTAxYTU5LCAweDQwMDBjMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE5ZDAsIDB4ODM2YzE1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMGQsCisJMHg4YzVjYmQwMCwgMHgwNDAyMDAxOCwgMHg1OWE4MTAwNSwgMHg4YzA4MTUwNiwKIAkweDA0MDIwMDA1LCAweDU5YzQxMGEzLCAweDgyMDgxNTQwLCAweDAwMDAwMDA4LAogCTB4NDgwYjg4YTMsIDB4NTljNDEwMDYsIDB4ODQwODE1NDAsIDB4NDgwYjg4MDYsCiAJMHg0YTAzODgwNSwgMHgwNDAwMDAwMCwgMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwKLQkweDQ5N2I1MDE0LCAweDAyMDFmODAwLCAweDAwMTAzYjM4LCAweDhjNWNiZDNjLAotCTB4MDQwMjA4NTgsIDB4OGM1Y2JkMDAsIDB4MDQwMDAwMzYsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjhjYSwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0YTAzODgwNSwKLQkweDAwMDAwMDAxLCAweDQyMDBiMDAwLCAweDAwMDAwM2U4LCAweDQyMDFkMDAwLAotCTB4MDAwMDAwNjQsIDB4NGM1ODAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMThkMywgMHg1YzAwYjAwMCwgMHgwNDAwMDAwNCwKLQkweDgwNThiMDQwLCAweDA0MDIwN2Y2LCAweDA0MDFmMDA0LCAweDRhMDM4ODA1LAotCTB4MDAwMDAwMDEsIDB4MDQwMWYwMWYsIDB4NTljNDAwMDYsIDB4ODQwMDA1MDAsCi0JMHg0ODAzODgwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNmVkZSwgMHg0OTdiODg4MCwKLQkweDAyMDFmODAwLCAweDAwMTBhOWMwLCAweDU5YzQwMDBkLCAweDhjMDAwNTAwLAotCTB4MDIwMjA4MDAsIDB4MDAxMGE5Y2UsIDB4NTljNDAwYTMsIDB4ODIwMDA1MDAsCi0JMHhmY2Y4ZmZmZiwgMHg0ODAzODhhMywgMHg0YTAzNTA0YywgMHgwMDAwMDAwMiwKLQkweDQyMDJkODAwLCAweDAwMDAwMDA0LCAweDRhMDM4ODA1LCAweDAwMDAwMDAxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA2ZDQsIDB4MDQwMWZiM2IsIDB4NDk3YjUwNTIsCi0JMHg0YTAzNTA0OSwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMDQ1MiwKLQkweDgyNWNiZDAwLCAweGJiZmZmZmZlLCAweDQ4NWY4ODA1LCAweDVjMDBjMDAwLAotCTB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4NTljNDEwMDQsIDB4NDgwYmM4NTcsCi0JMHg4YzA4MTUwMCwgMHgwNDAwMDAwNiwgMHg0ODAzYzg1NiwgMHg0OTdiMjgwNywKLQkweDAyMDFmODAwLCAweDAwMTA2ZmE0LCAweDA0MDFmMDBhLCAweDgyMDgwNTAwLAotCTB4MDAwMDAxZjAsIDB4MDQwMDAwMDcsIDB4NDgwM2M4NTYsIDB4NDE3YTMwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjA2MiwgMHgwMjAxZjgwMCwgMHgwMDEwNmZjNiwKLQkweDRhMDM4ODA1LCAweDgwMDAwMDAwLCAweDFjMDFmMDAwLCAweDU5YzQwOGEzLAotCTB4NDgwN2M4NTcsIDB4ODQwNDBkNDAsIDB4NDgwNzg4YTMsIDB4MWMwMWYwMDAsCi0JMHg0ZDkwMDAwMCwgMHg0ZGQwMDAwMCwgMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwKLQkweDRhMDM4ODA1LCAweDQwMDAwMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiOGM2LAotCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsCi0JMHg1OWM0MTAwNCwgMHg4YzA4MTUwMCwgMHgwNDAwMDA1NCwgMHg1OThlNjAwZCwKLQkweDQ5N2IyODA3LCAweDgxMzI2MWMwLCAweDA0MDAwMDMyLCAweDU5MzAwNDAzLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMzIsIDB4MDQwMjAwMmUsIDB4NTkzMDAwMWMsCi0JMHg0ODAzODgzMywgMHg0YTAzODgwNywgMHgwMDAxODAwMCwgMHg0MjAxZDAwMCwKLQkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTA2MDhlLCAweDQ5N2I4ODA3LAotCTB4NDIwMWQwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmUyMSwgMHg0MjAxZDAwMCwgMHgwMDAwNzUzMCwKLQkweDAyMDFmODAwLCAweDAwMTA2MDhlLCAweDU5YzQwOGE0LCAweDgyMDQwZDAwLAotCTB4MDAwMDAwMGYsIDB4ODIwNDBkODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDUsCi0JMHg0MjAwMDAwMCwgMHgwMDIwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0OSwKLQkweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDU5MzAwMDA4LCAweDgwMDAwNTQwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NDAwMjU4MDAsIDB4NGEwMjVhMDQsCi0JMHgwMDAwMDEwMywgMHg1OTMxZDgyMSwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwOSwKLQkweDA4MDFmODAwLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDA0MDFmMDQ3LAotCTB4NTk4YzAwMGYsIDB4ODIwMDFjODAsIDB4MDAwMDAwYzgsIDB4MDQwMjEwMGYsCi0JMHg4MDAwMDAwMCwgMHg0ODAzMTgwZiwgMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDA0LAotCTB4NDIwMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDQwMWZiZjcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjA0ZCwgMHgwNDAxZjAzNSwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZTIxLCAweDgxMzI2MWMwLCAweDA0MDAwMDMwLCAweDRhMDI2MjAzLAotCTB4MDAwMDAwMDEsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMjcsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDdhMSwgMHgwNDAxZjAyOSwgMHg4YzA4MTUwOCwgMHgwNDAwMDAyNywKLQkweDQxN2EzMDAwLCAweDAyMDFmODAwLCAweDAwMTA3MGQ4LCAweDQyMDMyMDAwLAotCTB4MDAwMGJmMzIsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNjIsIDB4NTk5MjYwMDQsCi0JMHg4MTMyNjFjMCwgMHgwNDAwMDAxMiwgMHg0MjAwMTgwMCwgMHgwMDAwMDBjOCwKLQkweDAyMDFmODAwLCAweDAwMTA3MGE0LCAweDA0MDIwMDBkLCAweDU5YzQwMGE0LAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDIsCi0JMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDIwMDAwMCwgMHgwNDAxZmJjZSwKLQkweDAyMDFmODAwLCAweDAwMTA2MDUyLCAweDA0MDFmMDBjLCAweDQ5MzNjODU3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDZkYzMsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMDcsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDA0ZiwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMywKLQkweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDVjMDIyODAwLCAweDVjMDM0ODAwLAotCTB4NWMwM2EwMDAsIDB4NWMwMzIwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDZjNGIsCi0JMHg0ODAzYzg1NywgMHg1OWE4MDgyMSwgMHg0ODAzNTAyMSwgMHg4MDA0MTU4MCwKLQkweDA0MDAwMDQ1LCAweDgwMDQwOWMwLCAweDA0MDAwMDIzLCAweDQ5N2I1MDRjLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MGQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWFmOSwgMHg0MjAwMTAwMCwgMHgwMDAwODAxMSwKLQkweDU5YzQwMDAxLCAweDgyMDAwNTAwLCAweDAwMDE4MDAwLCAweDgyMDAxZDgwLAotCTB4MDAwMDAwMDAsIDB4MDQwMDAwMDksIDB4ODIwMDFkODAsIDB4MDAwMDgwMDAsCi0JMHgwNDAwMDAwOSwgMHg4MjAwMWQ4MCwgMHgwMDAxMDAwMCwgMHgwNDAwMDAwOSwKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQyMDAxODAwLCAweDAwMDAwMDAwLAotCTB4MDQwMWYwMDYsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDMsCi0JMHg0MjAwMTgwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwM2EzZSwKLQkweDA0MDFmMDIxLCAweDU5YTgwODRjLCAweDgwMDQwOWMwLCAweDA0MDIwMDA3LAotCTB4NTljNDAwMGQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMDQsIDB4NDIwMDE4MDAsCi0JMHgwMDAwMDAwMywgMHgwNDAxZjAwMiwgMHg0MDA0MTgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYWRkLCAweDQyMDAxMDAwLCAweDAwMDA4MDEyLCAweDAyMDFmODAwLAotCTB4MDAxMDNhM2UsIDB4MDIwMWY4MDAsIDB4MDAxMDA2ZDQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWIzMywgMHgwNDAyMDAwYywgMHgwNDAxZjg1MywgMHg0ZDQwMDAwMCwKLQkweDRkM2MwMDAwLCAweDQyMDI4MDAwLCAweDAwMDAwMDI4LCAweDQyMDI3ODAwLAotCTB4MDAwMDA0MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDFmZTUsIDB4NWMwMjc4MDAsCi0JMHg1YzAyODAwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NywgMHg4MjAwMDQwMCwKLQkweDAwMTAyMTBlLCAweDUwMDAwODAwLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLAotCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAxMCwgMHg0OTdiODhhYywgMHg0OTdiODhhZCwgMHg4MDU4YjA0MCwKLQkweDA0MDIwN2ZlLCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LAotCTB4NDgwNzUwMTAsIDB4ODAwNDExMDgsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsCi0JMHg0OTdiODhhYywgMHg4MDAwMDU4MCwgMHg4MDA4MTFjMCwgMHgwNDAyMDAwNiwKLQkweDgyMDQwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNDAwLCAweDAwMTBhYjM4LAotCTB4NTAwMDAwMDAsIDB4NDgwMzg4YWQsIDB4ODAwODEwNDAsIDB4ODA1OGIwNDAsCi0JMHgwNDAyMDdmNSwgMHgxYzAxZjAwMCwgMHg1OWE4MDAwNSwgMHgwNDAwMDAwMywKLQkweDg0MDAwNTQ2LCAweDA0MDFmMDAyLCAweDg0MDAwNTA2LCAweDQ4MDM1MDA1LAotCTB4NDgwM2M4NTcsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4NGMwODAwMDAsCi0JMHg0YzA0MDAwMCwgMHg0YzAwMDAwMCwgMHg1OWM0MDg5MiwgMHg0ODA3Yzg1NywKLQkweDgwMDQxNTgwLCAweDA0MDAwMDEwLCAweDgwMDQxNDgwLCAweDA0MDIxMDA3LAotCTB4ODAwODEwODAsIDB4ODAwODEwMDAsIDB4NDAwOGIwMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDIwMSwgMHgwNDAxZjAwNCwgMHg0MDA4YjAwMCwgMHg0MjAwMDAwMCwKLQkweDAwMDAwMjEwLCAweDQ4MDM4ODg2LCAweDgwNThiMDQwLCAweDA0MDIwN2ZlLAotCTB4NDk3Yjg4ODYsIDB4NWMwMDAwMDAsIDB4NWMwMDA4MDAsIDB4NWMwMDEwMDAsCi0JMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwKLQkweDA0MDAwMDA1LCAweDQyMDI4MDAwLCAweDAwMDAwMDJlLCAweDAyMDFmMDAwLAotCTB4MDAxMGE0NDksIDB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsCi0JMHg1OWE4MDAwNSwgMHg4YzAwMDUxNCwgMHgwNDAyMDAwYiwgMHg1OWM4MDgzNSwKLQkweDgyMDQwZDAwLCAweDAwMDAxZjAwLCAweDgwMDQwOTEwLCAweDgwMDQwODAwLAotCTB4NTlhODAwNmMsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDMsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDI1YSwgMHg0ODA3Yzg1NywgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwKLQkweDU5YTgwMDUzLCAweDQ4MDNjODU3LCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLAorCTB4NDk3YjUwMTQsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTgsIDB4MDQwMjAwMDQsCisJMHgwNDAxZjk1YywgMHgwMjAxZjgwMCwgMHgwMDEwM2Y1YywgMHgwMjAxZjgwMCwKKwkweDAwMTAzOTUxLCAweDhjNWNiZDNjLCAweDA0MDIwODU4LCAweDhjNWNiZDAwLAorCTB4MDQwMDAwMzYsIDB4NDIwMDAwMDAsIDB4MDAxMGI2YzksIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHg0YTAzODgwNSwgMHgwMDAwMDAwMSwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMzUyLCAweDQyMDFkMDAwLCAweDAwMDAwMDY0LCAweDRjNTgwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVkZDIsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDEsCisJMHg1YzAwYjAwMCwgMHgwNDAwMDAwNCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmNiwKKwkweDA0MDFmMDA0LCAweDRhMDM4ODA1LCAweDAwMDAwMDAxLCAweDA0MDFmMDFmLAorCTB4NTljNDAwMDYsIDB4ODQwMDA1MDAsIDB4NDgwMzg4MDYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmMzMiwgMHg0OTdiODg4MCwgMHgwMjAxZjgwMCwgMHgwMDEwYTdlNywKKwkweDU5YzQwMDBkLCAweDhjMDAwNTAwLCAweDAyMDIwODAwLCAweDAwMTBhN2Y1LAorCTB4NTljNDAwYTMsIDB4ODIwMDA1MDAsIDB4ZmNmOGZmZmYsIDB4NDgwMzg4YTMsCisJMHg0YTAzNTA0YywgMHgwMDAwMDAwMiwgMHg0MjAyZDgwMCwgMHgwMDAwMDAwNCwKKwkweDRhMDM4ODA1LCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAwNzFhLAorCTB4MDQwMWZiNDIsIDB4NDk3YjUwNTIsIDB4NGEwMzUwNDksIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDQ4YywgMHg4MjVjYmQwMCwgMHhiYmZmZmZmZSwKKwkweDQ4NWY4ODA1LCAweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLAorCTB4NTljNDEwMDQsIDB4NDgwYmM4NTcsIDB4OGMwODE1MDAsIDB4MDQwMDAwMDYsCisJMHg0ODAzYzg1NiwgMHg0OTdiMjgwNywgMHgwMjAxZjgwMCwgMHgwMDEwNmNmOSwKKwkweDA0MDFmMDBhLCAweDgyMDgwNTAwLCAweDAwMDAwMWYwLCAweDA0MDAwMDA3LAorCTB4NDgwM2M4NTYsIDB4NDE3YTMwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDVkOWIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmQxYiwgMHg0YTAzODgwNSwgMHg4MDAwMDAwMCwKKwkweDFjMDFmMDAwLCAweDU5YzQwOGEzLCAweDQ4MDdjODU3LCAweDg0MDQwZDQwLAorCTB4NDgwNzg4YTMsIDB4MWMwMWYwMDAsIDB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsCisJMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwgMHg0YTAzODgwNSwgMHg0MDAwMDAwMCwKKwkweDQyMDAwMDAwLCAweDAwMTBiNmM1LCAweDAyMDFmODAwLCAweDAwMTBhODZlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDY5OGMsIDB4NTljNDEwMDQsIDB4OGMwODE1MDAsCisJMHgwNDAwMDA1NCwgMHg1OThlNjAwZCwgMHg0OTdiMjgwNywgMHg4MTMyNjFjMCwKKwkweDA0MDAwMDMyLCAweDU5MzAwNDAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDMyLAorCTB4MDQwMjAwMmUsIDB4NTkzMDAwMWMsIDB4NDgwMzg4MzMsIDB4NGEwMzg4MDcsCisJMHgwMDAxODAwMCwgMHg0MjAxZDAwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTA1ZGQyLCAweDQ5N2I4ODA3LCAweDQyMDFkMDAwLCAweDAwMDAwMDAyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVkZDIsIDB4MDIwMWY4MDAsIDB4MDAxMDZiNzEsCisJMHg0MjAxZDAwMCwgMHgwMDAwNzUzMCwgMHgwMjAxZjgwMCwgMHgwMDEwNWRkMiwKKwkweDU5YzQwOGE0LCAweDgyMDQwZDAwLCAweDAwMDAwMDBmLCAweDgyMDQwZDgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwMDUsIDB4NDIwMDAwMDAsIDB4MDAyMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTliNiwgMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwKKwkweDU5MzAwMDA4LCAweDgwMDAwNTQwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LAorCTB4NDAwMjU4MDAsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4NTkzMWQ4MjEsCisJMHg1OGVmNDAwYiwgMHg1OGVjMDAwOSwgMHgwODAxZjgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwOGI0LCAweDA0MDFmMDQ3LCAweDU5OGMwMDBmLCAweDgyMDAxYzgwLAorCTB4MDAwMDAwYzgsIDB4MDQwMjEwMGYsIDB4ODAwMDAwMDAsIDB4NDgwMzE4MGYsCisJMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDIwMDA0LCAweDQyMDAwMDAwLCAweDAwMjAwMDAwLAorCTB4MDQwMWZiZmEsIDB4MDIwMWY4MDAsIDB4MDAxMDVkODYsIDB4MDQwMWYwMzUsCisJMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNmI3MSwgMHg4MTMyNjFjMCwKKwkweDA0MDAwMDMwLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMjcsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4MDQwMWYwMjksCisJMHg4YzA4MTUwOCwgMHgwNDAwMDAyNywgMHg0MTdhMzAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZTJmLCAweDQyMDMyMDAwLCAweDAwMDBiZjMyLCAweDAyMDFmODAwLAorCTB4MDAxMDVkOWIsIDB4NTk5MjYwMDQsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMTIsCisJMHg0MjAwMTgwMCwgMHgwMDAwMDBjOCwgMHgwMjAxZjgwMCwgMHgwMDEwNmRmYiwKKwkweDA0MDIwMDBkLCAweDU5YzQwMGE0LCAweDgyMDAwNTAwLCAweDAwMDAwMDBmLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsCisJMHgwMDIwMDAwMCwgMHgwNDAxZmJkMSwgMHgwMjAxZjgwMCwgMHgwMDEwNWQ4YiwKKwkweDA0MDFmMDBjLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2YjEzLAorCTB4ODEzMjYxYzAsIDB4MDQwMDAwMDcsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGYsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwKKwkweDVjMDIyODAwLCAweDVjMDM0ODAwLCAweDVjMDNhMDAwLCAweDVjMDMyMDAwLAorCTB4MDIwMWYwMDAsIDB4MDAxMDY5ODIsIDB4NDgwM2M4NTcsIDB4NTlhODA4MjEsCisJMHg0ODAzNTAyMSwgMHg4MDA0MTU4MCwgMHgwNDAwMDA0NSwgMHg4MDA0MDljMCwKKwkweDA0MDAwMDIzLCAweDQ5N2I1MDRjLCAweDQyMDAwMDAwLCAweDAwMTBiNjBiLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsIDB4MDAxMGE5MjAsCisJMHg0MjAwMTAwMCwgMHgwMDAwODAxMSwgMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwKKwkweDAwMDE4MDAwLCAweDgyMDAxZDgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDA5LAorCTB4ODIwMDFkODAsIDB4MDAwMDgwMDAsIDB4MDQwMDAwMDksIDB4ODIwMDFkODAsCisJMHgwMDAxMDAwMCwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwKKwkweDQyMDAxODAwLCAweDAwMDAwMDAwLCAweDA0MDFmMDA2LCAweDQyMDAxODAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDMsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzg1NywgMHgwNDAxZjAyMSwgMHg1OWE4MDg0YywKKwkweDgwMDQwOWMwLCAweDA0MDIwMDA3LCAweDU5YzQwMDBkLCAweDhjMDAwNTIwLAorCTB4MDQwMDAwMDQsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDMsIDB4MDQwMWYwMDIsCisJMHg0MDA0MTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTkwNCwgMHg0MjAwMTAwMCwKKwkweDAwMDA4MDEyLCAweDAyMDFmODAwLCAweDAwMTAzODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDA3MWEsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NWEsIDB4MDQwMjAwMGMsCisJMHgwNDAxZjg1MywgMHg0ZDQwMDAwMCwgMHg0ZDNjMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDI4LCAweDQyMDI3ODAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLAorCTB4MDAxMDFkOTAsIDB4NWMwMjc4MDAsIDB4NWMwMjgwMDAsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NywgMHg4MjAwMDQwMCwgMHgwMDEwMWViNSwgMHg1MDAwMDgwMCwKKwkweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsIDB4NDk3Yjg4YWMsCisJMHg0OTdiODhhZCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmZSwgMHg1YzAwYjAwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDdjODU3LCAweDQ4MDc1MDEwLCAweDgwMDQxMTA4LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsIDB4NDk3Yjg4YWMsIDB4ODAwMDA1ODAsCisJMHg4MDA4MTFjMCwgMHgwNDAyMDAwNiwgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwKKwkweDgyMDAwNDAwLCAweDAwMTBhOTVmLCAweDUwMDAwMDAwLCAweDQ4MDM4OGFkLAorCTB4ODAwODEwNDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjUsIDB4MWMwMWYwMDAsCisJMHg1OWE4MDAwNSwgMHgwNDAwMDAwMywgMHg4NDAwMDU0NiwgMHgwNDAxZjAwMiwKKwkweDg0MDAwNTA2LCAweDQ4MDM1MDA1LCAweDQ4MDNjODU3LCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTcsIDB4NGMwODAwMDAsIDB4NGMwNDAwMDAsIDB4NGMwMDAwMDAsCisJMHg1OWM0MDg5MiwgMHg0ODA3Yzg1NywgMHg4MDA0MTU4MCwgMHgwNDAwMDAxMCwKKwkweDgwMDQxNDgwLCAweDA0MDIxMDA3LCAweDgwMDgxMDgwLCAweDgwMDgxMDAwLAorCTB4NDAwOGIwMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAyMDEsIDB4MDQwMWYwMDQsCisJMHg0MDA4YjAwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDIxMCwgMHg0ODAzODg4NiwKKwkweDgwNThiMDQwLCAweDA0MDIwN2ZlLCAweDQ5N2I4ODg2LCAweDVjMDAwMDAwLAorCTB4NWMwMDA4MDAsIDB4NWMwMDEwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzkzZSwgMHgwNDAwMDAwNSwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDJlLCAweDAyMDFmMDAwLCAweDAwMTBhMjViLCAweDFjMDFmMDAwLAorCTB4NTlhODA4NmYsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMTAsIDB4MDQwMDAwMDQsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAxMCwgMHg4MjA0MDUwMCwKKwkweDAwMDAwMDIwLCAweDQyMDAwODAwLCAweDAwMDAwMDAyLCAweDA0MDIwMDBiLAorCTB4NTljODA4MzUsIDB4ODIwNDBkMDAsIDB4MDAwMDFmMDAsIDB4ODAwNDA5MTAsCisJMHg4MDA0MDgwMCwgMHg1OWE4MDA2YywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwMywKKwkweDQyMDAwODAwLCAweDAwMDAwMjVhLCAweDQ4MDdjODU3LCAweDFjMDFmMDAwLAorCTB4NGMwMDAwMDAsIDB4NTlhODAwNTMsIDB4NDgwM2M4NTcsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMCwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwKKwkweDU5YTgwMDUzLCAweDQ4MDNjODU3LCAweDgyMDAwNTgwLCAweDAwMDAwMDAxLAogCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsIDB4NTlhODAwNTMsCi0JMHg0ODAzYzg1NywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMSwgMHg1YzAwMDAwMCwKLQkweDFjMDFmMDAwLCAweDRjMDAwMDAwLCAweDU5YTgwMDUzLCAweDQ4MDNjODU3LAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsCi0JMHg0YzAwMDAwMCwgMHg1OWE4MDA1MywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwKLQkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDRjMDAwMDAwLCAweDRjMDQwMDAwLAotCTB4NGMwODAwMDAsIDB4NGMzODAwMDAsIDB4NTlhODAwNDAsIDB4ODIwMDBjODAsCi0JMHgwMDAwMDAwNywgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjgwNiwKLQkweDVjMDA3MDAwLCAweDVjMDAxMDAwLCAweDVjMDAwODAwLCAweDVjMDAwMDAwLAotCTB4MWMwMWYwMDAsIDB4MDAxMDE2NmMsIDB4MDAxMDE2N2YsIDB4MDAxMDE2OTMsCi0JMHgwMDEwMTY5NSwgMHgwMDEwMTZiYywgMHgwMDEwMTZiZSwgMHgwMDEwMTZjMCwKLQkweDQ4MDNjODU2LCAweDRhMDM1MDQyLCAweDAwMDAwMDAwLCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMDIsIDB4MDQwMWZhMWIsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsCi0JMHgwNDAxZjlhZCwgMHgwNDAxZmFiMiwgMHg0ODAzYzg1NiwgMHg0YTAzNTA0MCwKLQkweDAwMDAwMDA2LCAweDQyMDAwODAwLCAweDAwMDAwMDFlLCAweDQyMDAxMDAwLAotCTB4MDAxMDE2YzEsIDB4MDIwMWYwMDAsIDB4MDAxMDYwNmUsIDB4NDk3YjUwNDUsCi0JMHg0YTAzNTA1MCwgMHgwMDAwMDAzNiwgMHg0YTAzNTA0ZiwgMHgwMDAwMDAyYSwKLQkweDQ4MDNjODU2LCAweDRhMDM1MDQyLCAweDAwMDAwMDAxLCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMDIsIDB4MDQwMWY5OTgsIDB4NDgwM2M4NTYsIDB4NGEwMzUwNDAsCi0JMHgwMDAwMDAwNiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxZSwgMHg0MjAwMTAwMCwKLQkweDAwMTAxNmMxLCAweDAyMDFmMDAwLCAweDAwMTA2MDZlLCAweDAyMDFmODAwLAotCTB4MDAxMDA1ZDgsIDB4NGEwMzUwNTAsIDB4MDAwMDAwMzYsIDB4NDgwM2M4NTYsCi0JMHg0YTAzNTA0MiwgMHgwMDAwMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKLQkweDA0MDFmYWEzLCAweDgyMDQwZDAwLCAweDAwMDAwMDkwLCAweDgyMDQwNTgwLAotCTB4MDAwMDAwOTAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMDAwMTAsCi0JMHgwNDAwMDAwOSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwOCwKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAotCTB4MDQwMWYwMDUsIDB4NDE3ODAwMDAsIDB4MDQwMWYwMDMsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAwMiwgMHgwNDAxZjk3MCwgMHg0OTdiNTA0NiwgMHg0ODAzYzg1NiwKKwkweDQ4MDNjODU3LCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDVjMDAwMDAwLAorCTB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsIDB4NTlhODAwNTMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMiwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwKKwkweDRjMDQwMDAwLCAweDRjMDgwMDAwLCAweDRjMzgwMDAwLCAweDU5YTgwMDQwLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMDcsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHgwYzAxZjgwNiwgMHg1YzAwNzAwMCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwKKwkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDAwMTAxNmRkLCAweDAwMTAxNmYwLAorCTB4MDAxMDE3MDQsIDB4MDAxMDE3MDYsIDB4MDAxMDE3MmQsIDB4MDAxMDE3MmYsCisJMHgwMDEwMTczMSwgMHg0ODAzYzg1NiwgMHg0YTAzNTA0MiwgMHgwMDAwMDAwMCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmYTE4LCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDIsIDB4MDQwMWY5YWQsIDB4MDQwMWZhYWUsIDB4NDgwM2M4NTYsCiAJMHg0YTAzNTA0MCwgMHgwMDAwMDAwNiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxZSwKLQkweDQyMDAxMDAwLCAweDAwMTAxNmMxLCAweDAyMDFmMDAwLCAweDAwMTA2MDZlLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCi0JMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwKLQkweDRjMzgwMDAwLCAweDU5YTgwMDQyLCAweDgyMDAwYzgwLCAweDAwMDAwMDA3LAotCTB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWY4MDYsIDB4NWMwMDcwMDAsCi0JMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwKLQkweDAwMTAxNmQ3LCAweDAwMTAxNmY2LCAweDAwMTAxNzRhLCAweDAwMTAxNzYxLAotCTB4MDAxMDE3NzgsIDB4MDAxMDE3ODEsIDB4MDAxMDE3ODMsIDB4MDQwMWY5ZmMsCi0JMHgwNDAyMDAxYiwgMHg1OWE4MTA0OCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKLQkweDA0MDFmYTYzLCAweDgyMDQwZDAwLCAweDAwMDAwMDkwLCAweDgyMDQwNTgwLAotCTB4MDAwMDAwOTAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMDAwMTAsCi0JMHgwNDAwMDAwOCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwNywKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDg0MDgxNTQwLCAweDA0MDFmMDA0LAotCTB4ODQwODE1NDIsIDB4MDQwMWYwMDIsIDB4ODQwODE1NDQsIDB4NDgwYjUwNDgsCi0JMHg0YTAzNTA0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMywgMHgwNDAxZjhjYiwKLQkweDA0MDFmZjgyLCAweDFjMDFmMDAwLCAweDA0MDFmODhmLCAweDA0MDAwMDUyLAotCTB4MDQwMWY5ZGIsIDB4MDQwMjAwMmEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsCi0JMHgwNDAxZmE0MywgMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDAwLCAweDA0MDAwMDQ0LCAweDgyMDQwNTgwLCAweDAwMDAwMDEwLAotCTB4MDQwMDAwMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwOTAsIDB4MDQwMDAwMDksCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwKLQkweDAwMDE4MDAwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDM2LAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWZhMmQsIDB4ODIwNDBkMDAsCi0JMHgwMDAwMDA5MCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAwNiwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDkwLCAweDA0MDAwMDA2LCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4NTlhODAwNDgsIDB4ODQwMDA1NDIsIDB4MDQwMWYwMDMsCi0JMHg1OWE4MDA0OCwgMHg4NDAwMDU0MCwgMHg0ODAzNTA0OCwgMHg1OWE4MDA0NSwKLQkweDgwMDAwMDAwLCAweDQ4MDM1MDQ1LCAweDgyMDAwNTgwLCAweDAwMDAwMDA1LAotCTB4MDQwMDAwMDMsIDB4MDQwMWY4NjEsIDB4MDQwMWYwMWUsIDB4NDk3YjUwNDUsCi0JMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwgMHgwMDAxODAwMCwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDAwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLCAweDAwMDA4MDAwLAotCTB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMTAwMDAsIDB4MDQwMDAwMDgsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKLQkweDA0MDFmMDA1LCAweDQxNzgwMDAwLCAweDA0MDFmMDAzLCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMDIsIDB4MDQwMWY5NGIsIDB4NGEwMzUwNDIsIDB4MDAwMDAwMDIsCi0JMHgwNDAxZjAwNCwgMHg0YTAzNTA0MCwgMHgwMDAwMDAwMywgMHgwNDAxZjAwMiwKLQkweDA0MDFmZjQyLCAweDFjMDFmMDAwLCAweDA0MDFmODNiLCAweDA0MDAwMDE1LAotCTB4NTlhODAwNGYsIDB4ODAwMDAwNDAsIDB4NDgwMzUwNGYsIDB4MDQwMWY5ODQsCi0JMHgwNDAyMDAwNSwgMHg0YTAzNTA0MCwgMHgwMDAwMDAwMywgMHg0OTdiNTA0MSwKLQkweDA0MDFmMDBjLCAweDU5YTgwMDRmLCAweDgwMDAwNTQwLCAweDA0MDIwMDAzLAotCTB4MDQwMWY4OWUsIDB4MDQwMWYwMDIsIDB4MDQwMWY4NGIsIDB4MDQwMWY4MmYsCi0JMHg0OTdiNTA0NSwgMHg0YTAzNTA0MiwgMHgwMDAwMDAwMSwgMHgwNDAxZmYyYiwKLQkweDFjMDFmMDAwLCAweDA0MDFmODI0LCAweDA0MDAwMDE1LCAweDA0MDFmOTcwLAotCTB4MDQwMjAwMGYsIDB4NTlhODAwNDYsIDB4ODAwMDAwMDAsIDB4NDgwMzUwNDYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywgMHgwNDAyMDAwYywgMHg0YTAzNTA1MiwKLQkweDAwMDAwMDBhLCAweDQ5N2I1MDQ5LCAweDU5YTgwMDQ4LCAweDg0MDAwNTVlLAotCTB4NDgwMzUwNDgsIDB4NDgwM2M4NTcsIDB4MDQwMWYwMDUsIDB4MDQwMWY4MTcsCi0JMHg0YTAzNTA0MiwgMHgwMDAwMDAwNCwgMHgwNDAxZmYzZCwgMHgxYzAxZjAwMCwKLQkweDA0MDFmODBkLCAweDA0MDAwMDA3LCAweDA0MDFmOTU5LCAweDA0MDIwMDAzLAotCTB4MDQwMWZmMWIsIDB4MDQwMWYwMDMsIDB4MDQwMWY4MGMsIDB4MDQwMWZmMzQsCi0JMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDU5YTgwMDUwLCAweDgwMDAwMDQwLCAweDQ4MDM1MDUwLAotCTB4MDQwMDA4OGQsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwMCwgMHgwNDAxZjliMiwgMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwKKwkweDQyMDAxMDAwLCAweDAwMTAxNzMyLCAweDAyMDFmMDAwLCAweDAwMTA1ZGE3LAorCTB4NDk3YjUwNDUsIDB4NGEwMzUwNTAsIDB4MDAwMDAwMzYsIDB4NGEwMzUwNGYsCisJMHgwMDAwMDAyYSwgMHg0ODAzYzg1NiwgMHg0YTAzNTA0MiwgMHgwMDAwMDAwMSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmOTk4LCAweDQ4MDNjODU2LAorCTB4NGEwMzUwNDAsIDB4MDAwMDAwMDYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMWUsCisJMHg0MjAwMTAwMCwgMHgwMDEwMTczMiwgMHgwMjAxZjAwMCwgMHgwMDEwNWRhNywKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDRhMDM1MDUwLCAweDAwMDAwMDM2LAorCTB4NDgwM2M4NTYsIDB4NGEwMzUwNDIsIDB4MDAwMDAwMDMsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZmE5ZiwgMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwKIAkweDgyMDQwNTgwLCAweDAwMDAwMDkwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLAogCTB4MDAwMDAwMTAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsCi0JMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDAyLCAweDA0MDFmMDA1LCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAotCTB4MDQwMWYwMDIsIDB4NDE3ODAwMDAsIDB4MDQwMWY4ZWEsIDB4NWMwMDA4MDAsCi0JMHgxYzAxZjAwMCwgMHg0YzA0MDAwMCwgMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwKLQkweDAwMDE4MDAwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDA5LAotCTB4ODIwNDA1ODAsIDB4MDAwMDgwMDAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsCi0JMHgwMDAxMDAwMCwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKLQkweDQyMDAwMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDA1LCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDIsIDB4NDE3ODAwMDAsIDB4MDQwMWY4NjYsCi0JMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg0YzA0MDAwMCwgMHg1OWE4MDA0NSwKLQkweDgwMDAwMDAwLCAweDQ4MDM1MDQ1LCAweDgyMDAwNTgwLCAweDAwMDAwMDA1LAotCTB4MDQwMjAwMTgsIDB4NDk3YjUwNDUsIDB4NTljNDA4MDEsIDB4ODIwNDBkMDAsCi0JMHgwMDAxODAwMCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwOSwKLQkweDgyMDQwNTgwLCAweDAwMDA4MDAwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLAotCTB4MDAwMTAwMDAsIDB4MDQwMDAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAwNSwgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDQxNzgwMDAwLCAweDA0MDFmODQ2LAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWY5NjEsIDB4ODIwNDBkMDAsCisJMHgwNDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDA1LCAweDQxNzgwMDAwLCAweDA0MDFmMDAzLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWY5NzAsIDB4NDk3YjUwNDYsCisJMHg0ODAzYzg1NiwgMHg0YTAzNTA0MCwgMHgwMDAwMDAwNiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDFlLCAweDQyMDAxMDAwLCAweDAwMTAxNzMyLCAweDAyMDFmMDAwLAorCTB4MDAxMDVkYTcsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg0YzA0MDAwMCwKKwkweDRjMDgwMDAwLCAweDRjMzgwMDAwLCAweDU5YTgwMDQyLCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMDcsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWY4MDYsCisJMHg1YzAwNzAwMCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHg1YzAwMDAwMCwKKwkweDFjMDFmMDAwLCAweDAwMTAxNzQ4LCAweDAwMTAxNzY3LCAweDAwMTAxN2JiLAorCTB4MDAxMDE3ZDIsIDB4MDAxMDE3ZTksIDB4MDAxMDE3ZjIsIDB4MDAxMDE3ZjQsCisJMHgwNDAxZjlmOSwgMHgwNDAyMDAxYiwgMHg1OWE4MTA0OCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAwLCAweDA0MDFmYTVmLCAweDgyMDQwZDAwLCAweDAwMDAwMDkwLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwOTAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAxMCwgMHgwNDAwMDAwOCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDg0MDgxNTQwLAorCTB4MDQwMWYwMDQsIDB4ODQwODE1NDIsIDB4MDQwMWYwMDIsIDB4ODQwODE1NDQsCisJMHg0ODBiNTA0OCwgMHg0YTAzNTA0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMywKKwkweDA0MDFmOGNiLCAweDA0MDFmZjgyLCAweDFjMDFmMDAwLCAweDA0MDFmODhmLAorCTB4MDQwMDAwNTIsIDB4MDQwMWY5ZDgsIDB4MDQwMjAwMmEsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZmEzZiwgMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDQ0LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMTAsIDB4MDQwMDAwMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwOTAsCisJMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg1OWM0MDgwMSwKKwkweDgyMDQwZDAwLCAweDAwMDE4MDAwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLAorCTB4MDQwMDAwMzYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWZhMjksCisJMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwKKwkweDA0MDAwMDA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDkwLCAweDA0MDAwMDA2LAorCTB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4NTlhODAwNDgsIDB4ODQwMDA1NDIsCisJMHgwNDAxZjAwMywgMHg1OWE4MDA0OCwgMHg4NDAwMDU0MCwgMHg0ODAzNTA0OCwKKwkweDU5YTgwMDQ1LCAweDgwMDAwMDAwLCAweDQ4MDM1MDQ1LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDUsIDB4MDQwMDAwMDMsIDB4MDQwMWY4NjEsIDB4MDQwMWYwMWUsCisJMHg0OTdiNTA0NSwgMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwgMHgwMDAxODAwMCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLAorCTB4MDAwMDgwMDAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMTAwMDAsCisJMHgwNDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDA1LCAweDQxNzgwMDAwLCAweDA0MDFmMDAzLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWY5NDgsIDB4NGEwMzUwNDIsCisJMHgwMDAwMDAwMiwgMHgwNDAxZjAwNCwgMHg0YTAzNTA0MCwgMHgwMDAwMDAwMywKKwkweDA0MDFmMDAyLCAweDA0MDFmZjQyLCAweDFjMDFmMDAwLCAweDA0MDFmODNiLAorCTB4MDQwMDAwMTUsIDB4NTlhODAwNGYsIDB4ODAwMDAwNDAsIDB4NDgwMzUwNGYsCisJMHgwNDAxZjk4MSwgMHgwNDAyMDAwNSwgMHg0YTAzNTA0MCwgMHgwMDAwMDAwMywKKwkweDQ5N2I1MDQxLCAweDA0MDFmMDBjLCAweDU5YTgwMDRmLCAweDgwMDAwNTQwLAorCTB4MDQwMjAwMDMsIDB4MDQwMWY4OWUsIDB4MDQwMWYwMDIsIDB4MDQwMWY4NGIsCisJMHgwNDAxZjgyZiwgMHg0OTdiNTA0NSwgMHg0YTAzNTA0MiwgMHgwMDAwMDAwMSwKKwkweDA0MDFmZjJiLCAweDFjMDFmMDAwLCAweDA0MDFmODI0LCAweDA0MDAwMDE1LAorCTB4MDQwMWY5NmQsIDB4MDQwMjAwMGYsIDB4NTlhODAwNDYsIDB4ODAwMDAwMDAsCisJMHg0ODAzNTA0NiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywgMHgwNDAyMDAwYywKKwkweDRhMDM1MDUyLCAweDAwMDAwMDBhLCAweDQ5N2I1MDQ5LCAweDU5YTgwMDQ4LAorCTB4ODQwMDA1NWUsIDB4NDgwMzUwNDgsIDB4NDgwM2M4NTcsIDB4MDQwMWYwMDUsCisJMHgwNDAxZjgxNywgMHg0YTAzNTA0MiwgMHgwMDAwMDAwNCwgMHgwNDAxZmYzZCwKKwkweDFjMDFmMDAwLCAweDA0MDFmODBkLCAweDA0MDAwMDA3LCAweDA0MDFmOTU2LAorCTB4MDQwMjAwMDMsIDB4MDQwMWZmMWIsIDB4MDQwMWYwMDMsIDB4MDQwMWY4MGMsCisJMHgwNDAxZmYzNCwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDU5YTgwMDUwLCAweDgwMDAwMDQwLAorCTB4NDgwMzUwNTAsIDB4MDQwMDA4OGQsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjlhZSwgMHg4MjA0MGQwMCwKIAkweDAwMDAwMDkwLCAweDgyMDQwNTgwLCAweDAwMDAwMDkwLCAweDA0MDAwMDA5LAogCTB4ODIwNDA1ODAsIDB4MDAwMDAwMTAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsCi0JMHgwMDAwMDAwMCwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDAwMDAwMDAwLCAweDA0MDAwMDA5LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAogCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWYwMDUsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwgMHg0MTc4MDAwMCwgMHgwNDAxZjg5OSwKLQkweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDRjMjAwMDAwLCAweDU5YTgwMDQ4LAotCTB4ODIwMDA1MDAsIDB4MDAwMDdmZmYsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCi0JMHg1OWE4NDA0NywgMHg4MDIwNDEwMiwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwKLQkweDQ4MjM1MDQ3LCAweDgwMjA0NTAwLCAweDA0MDAwN2ZhLCAweDhjMDAwNTA0LAotCTB4MDQwMjAwMDcsIDB4OGMwMDA1MDIsIDB4MDQwMjAwMDgsIDB4OGMwMDA1MDAsCi0JMHgwNDAyMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDAyLCAweDA0MDFmMDA1LCAweDQxNzgwMDAwLCAweDA0MDFmMDAzLAotCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY4MGYsIDB4NWMwMDQwMDAsCi0JMHgxYzAxZjAwMCwgMHgwNDAxMTAwMCwgMHg0YTAzYzg0MCwgMHgwMDEwYjQ0MCwKLQkweDRhMDNjODQyLCAweDAwMDAwMDA5LCAweDQwMDAwMDAwLCAweDA0MDExN2ZmLAotCTB4NGEwMzUwNDcsIDB4MDAwMDAwMDQsIDB4NGEwMzUwM2UsIDB4MDAwMDAwMDAsCi0JMHgxYzAxZjAwMCwgMHg1OWE4MDg1OCwgMHg4MjA0MGQ4MCwgMHgwMTM5MTA3NywKLQkweDA0MDIwMDA4LCAweDU5ZTAwODEzLCAweDhjMDQwZDAwLCAweDA0MDAwMDA1LAotCTB4ODIwMDBkODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDIsIDB4NDE3ODAwMDAsCi0JMHg0YzAwMDAwMCwgMHgwNDAxZjliMSwgMHg1YzAwMDAwMCwgMHg4MDAwMDFjMCwKLQkweDA0MDAwMDQwLCAweDgyMDAwZDgwLCAweDAwMDAwMDAxLCAweDA0MDIwMDFkLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsIDB4MDQwMWY5MDksIDB4ODIwNDA1NDAsCi0JMHgwMDAwMDAwNCwgMHg0MjAwMDgwMCwgMHgwMDAwMDBhMCwgMHgwNDAxZjkwOSwKLQkweDQyMDAwODAwLCAweDAwMDAwMGMwLCAweDA0MDFmOTAxLCAweDgyMDQwNTQwLAotCTB4MDAwMDAwMjAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsIDB4MDQwMWY5MDEsCi0JMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwgMHhmZmZlN2ZmZiwgMHg4MjAwMDU0MCwKLQkweDAwMDAwMDAwLCAweDQ4MDM4ODAxLCAweDU5YTgwMDU0LCAweDgwMDAwMTEwLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwZTAsIDB4MDQwMWY4ZjYsIDB4MDQwMWYwM2MsCi0JMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKLQkweDQyMDAwODAwLCAweDAwMDAwMGEwLCAweDA0MDFmOGU5LCAweDgyMDQwNTAwLAotCTB4ZmZmZmZmZmIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsIDB4MDQwMWY4ZTksCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDBjMCwgMHgwNDAxZjhlMSwgMHg4MjA0MDUwMCwKLQkweGZmZmZmZmRmLCAweDQyMDAwODAwLCAweDAwMDAwMGMwLCAweDA0MDFmOGUxLAotCTB4NTljNDAwMDEsIDB4ODIwMDA1MDAsIDB4ZmZmZTdmZmYsIDB4ODIwMDA1NDAsCi0JMHgwMDAxMDAwMCwgMHg0ODAzODgwMSwgMHg1OWE4MDA1NiwgMHg4MDAwMDExMCwKLQkweDQyMDAwODAwLCAweDAwMDAwMGUwLCAweDA0MDFmOGQ2LCAweDA0MDFmMDFjLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsIDB4MDQwMWY4Y2QsIDB4ODIwNDA1NDAsCi0JMHgwMDAwMDAwNCwgMHg0MjAwMDgwMCwgMHgwMDAwMDBhMCwgMHgwNDAxZjhjZCwKLQkweDQyMDAwODAwLCAweDAwMDAwMGMwLCAweDA0MDFmOGM1LCAweDgyMDQwNTAwLAotCTB4ZmZmZmZmZGYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsIDB4MDQwMWY4YzUsCi0JMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwgMHhmZmZlN2ZmZiwgMHg4MjAwMDU0MCwKLQkweDAwMDA4MDAwLCAweDQ4MDM4ODAxLCAweDU5YTgwMDU1LCAweDgwMDAwMTEwLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwZTAsIDB4MDQwMWY4YmEsIDB4MDQwMWYxNjMsCi0JMHg0ODAzYzg1NywgMHg1OWE4MDg1OCwgMHg4MjA0MGQ4MCwgMHgwMTM5MTA3NywKLQkweDA0MDIwMDA4LCAweDU5ZTAwODEzLCAweDhjMDQwZDAwLCAweDA0MDAwMDA1LAotCTB4ODIwMDBkODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDIsIDB4NDE3ODAwMDAsCi0JMHg0YzAwMDAwMCwgMHgwNDAxZjk0ZCwgMHg1YzAwMDAwMCwgMHg4MDAwMDFjMCwKLQkweDA0MDAwMDI2LCAweDgyMDAwZDgwLCAweDAwMDAwMDAxLCAweDA0MDIwMDEwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDIsIDB4NDE3ODAwMDAsIDB4MDQwMWY4ZTcsCisJMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg0YzA0MDAwMCwgMHg1OWM0MDgwMSwKKwkweDgyMDQwZDAwLCAweDAwMDE4MDAwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLAorCTB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMDgwMDAsIDB4MDQwMDAwMDksCisJMHg4MjA0MDU4MCwgMHgwMDAxMDAwMCwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDQyMDAwMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDA1LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDIsIDB4NDE3ODAwMDAsCisJMHgwNDAxZjg2NiwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg0YzA0MDAwMCwKKwkweDU5YTgwMDQ1LCAweDgwMDAwMDAwLCAweDQ4MDM1MDQ1LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDUsIDB4MDQwMjAwMTgsIDB4NDk3YjUwNDUsIDB4NTljNDA4MDEsCisJMHg4MjA0MGQwMCwgMHgwMDAxODAwMCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDAwMDA5LCAweDgyMDQwNTgwLCAweDAwMDA4MDAwLCAweDA0MDAwMDA5LAorCTB4ODIwNDA1ODAsIDB4MDAwMTAwMDAsIDB4MDQwMDAwMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAwNSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDQxNzgwMDAwLAorCTB4MDQwMWY4NDYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWY5NWQsCisJMHg4MjA0MGQwMCwgMHgwMDAwMDA5MCwgMHg4MjA0MDU4MCwgMHgwMDAwMDA5MCwKKwkweDA0MDAwMDA5LCAweDgyMDQwNTgwLCAweDAwMDAwMDEwLCAweDA0MDAwMDA5LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAwNSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDQxNzgwMDAwLAorCTB4MDQwMWY4OTYsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NGMyMDAwMDAsCisJMHg1OWE4MDA0OCwgMHg4MjAwMDUwMCwgMHgwMDAwN2ZmZiwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDU5YTg0MDQ3LCAweDgwMjA0MTAyLCAweDAyMDAxODAwLAorCTB4MDAxMDA2MTUsIDB4NDgyMzUwNDcsIDB4ODAyMDQ1MDAsIDB4MDQwMDA3ZmEsCisJMHg4YzAwMDUwNCwgMHgwNDAyMDAwNywgMHg4YzAwMDUwMiwgMHgwNDAyMDAwOCwKKwkweDhjMDAwNTAwLCAweDA0MDIwMDA4LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWYwMDUsIDB4NDE3ODAwMDAsCisJMHgwNDAxZjAwMywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjgwZiwKKwkweDVjMDA0MDAwLCAweDFjMDFmMDAwLCAweDA0MDExMDAwLCAweDRhMDNjODQwLAorCTB4MDAxMGIyNDAsIDB4NGEwM2M4NDIsIDB4MDAwMDAwMDksIDB4NDAwMDAwMDAsCisJMHgwNDAxMTdmZiwgMHg0YTAzNTA0NywgMHgwMDAwMDAwNCwgMHg0YTAzNTAzZSwKKwkweDAwMDAwMDAwLCAweDFjMDFmMDAwLCAweDU5YTgwODU4LCAweDgyMDQwZDgwLAorCTB4MDEzOTEwNzcsIDB4MDQwMjAwMDgsIDB4NTllMDA4MTMsIDB4OGMwNDBkMDAsCisJMHgwNDAwMDAwNSwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwMiwKKwkweDQxNzgwMDAwLCAweDgwMDAwMWMwLCAweDA0MDAwMDQwLCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDEsIDB4MDQwMjAwMWQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsCisJMHgwNDAxZjkwOCwgMHg4MjA0MDU0MCwgMHgwMDAwMDAwNCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGEwLCAweDA0MDFmOTA4LCAweDQyMDAwODAwLCAweDAwMDAwMGMwLAorCTB4MDQwMWY5MDAsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMjAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDBjMCwgMHgwNDAxZjkwMCwgMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwKKwkweGZmZmU3ZmZmLCAweDgyMDAwNTQwLCAweDAwMDAwMDAwLCAweDQ4MDM4ODAxLAorCTB4NTlhODAwNTQsIDB4ODAwMDAxMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwZTAsCisJMHgwNDAxZjhmNSwgMHgwNDAxZjAzYywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwKKwkweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDQyMDAwODAwLCAweDAwMDAwMGEwLAorCTB4MDQwMWY4ZTgsIDB4ODIwNDA1MDAsIDB4ZmZmZmZmZmIsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDBhMCwgMHgwNDAxZjhlOCwgMHg0MjAwMDgwMCwgMHgwMDAwMDBjMCwKKwkweDA0MDFmOGUwLCAweDgyMDQwNTAwLCAweGZmZmZmZmRmLCAweDQyMDAwODAwLAorCTB4MDAwMDAwYzAsIDB4MDQwMWY4ZTAsIDB4NTljNDAwMDEsIDB4ODIwMDA1MDAsCisJMHhmZmZlN2ZmZiwgMHg4MjAwMDU0MCwgMHgwMDAxMDAwMCwgMHg0ODAzODgwMSwKKwkweDU5YTgwMDU2LCAweDgwMDAwMTEwLCAweDQyMDAwODAwLCAweDAwMDAwMGUwLAorCTB4MDQwMWY4ZDUsIDB4MDQwMWYwMWMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsCisJMHgwNDAxZjhjYywgMHg4MjA0MDU0MCwgMHgwMDAwMDAwNCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGEwLCAweDA0MDFmOGNjLCAweDQyMDAwODAwLCAweDAwMDAwMGMwLAorCTB4MDQwMWY4YzQsIDB4ODIwNDA1MDAsIDB4ZmZmZmZmZGYsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDBjMCwgMHgwNDAxZjhjNCwgMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwKKwkweGZmZmU3ZmZmLCAweDgyMDAwNTQwLCAweDAwMDA4MDAwLCAweDQ4MDM4ODAxLAorCTB4NTlhODAwNTUsIDB4ODAwMDAxMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwZTAsCisJMHgwNDAxZjhiOSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NywgMHg1OWE4MDg1OCwKKwkweDgyMDQwZDgwLCAweDAxMzkxMDc3LCAweDA0MDIwMDA4LCAweDU5ZTAwODEzLAorCTB4OGMwNDBkMDAsIDB4MDQwMDAwMDUsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDIsCisJMHgwNDAyMDAwMiwgMHg0MTc4MDAwMCwgMHg0YzAwMDAwMCwgMHgwNDAxZjk0MiwKKwkweDVjMDAwMDAwLCAweDgwMDAwMWMwLCAweDA0MDAwMDI2LCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDEsIDB4MDQwMjAwMTAsIDB4NTlhODAwNmMsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjlmNywKKwkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDFmODk2LCAweDgyMDQwNTQwLAorCTB4MDAwMDAwOTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWY4OTYsCisJMHgwNDAxZjAyNCwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNjE1LCAweDU5YTgwMDZjLCAweDgwMDAwNTQwLCAweDA0MDAwMDA0LAorCTB4NDIwMDEwMDAsIDB4MDAwMTAwMDAsIDB4MDQwMWY5ZTQsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjg4MywgMHg4MjA0MDUwMCwgMHhmZmZmZmY2ZiwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDFmODgzLCAweDA0MDFmMDExLAogCTB4NTlhODAwNmMsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsCi0JMHgwMDAwMDAwMCwgMHgwNDAxZmEwYSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKLQkweDA0MDFmODk3LCAweDgyMDQwNTQwLCAweDAwMDAwMDkwLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDAsIDB4MDQwMWY4OTcsIDB4MDQwMWYwMjQsIDB4ODIwMDBkODAsCi0JMHgwMDAwMDAwMiwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg1OWE4MDA2YywKLQkweDgwMDAwNTQwLCAweDA0MDAwMDA0LCAweDQyMDAxMDAwLCAweDAwMDEwMDAwLAotCTB4MDQwMWY5ZjcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWY4ODQsCi0JMHg4MjA0MDUwMCwgMHhmZmZmZmY2ZiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKLQkweDA0MDFmODg0LCAweDA0MDFmMDExLCAweDU5YTgwMDZjLCAweDgwMDAwNTQwLAotCTB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMDgwMDAsIDB4MDQwMWY5ZTgsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjg3NSwgMHg4MjA0MDUwMCwKLQkweGZmZmZmZjZmLCAweDgyMDAwNTQwLCAweDAwMDAwMDEwLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDAsIDB4MDQwMWY4NzMsIDB4MDQwMWYxMjQsIDB4NGM1ODAwMDAsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAxNCwgMHg4MDU4YjA0MCwgMHgwNDAwMDA0MywKLQkweDU5YzQwMDBkLCAweDhjMDAwNTIwLCAweDA0MDIwN2ZjLCAweDA0MDFmODVjLAotCTB4NTljNDAwMGQsIDB4OGMwMDA1MjAsIDB4MDQwMjA3ZjgsIDB4NTljNDA4MDgsCi0JMHg4NDA0MGQ1MCwgMHg0ODA3ODgwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDBjOCwKLQkweDgwNThiMDQwLCAweDA0MDIwN2ZmLCAweDQyMDBiMDAwLCAweDAwMDAwMDE0LAotCTB4ODA1OGIwNDAsIDB4MDQwMDAwMzEsIDB4NTljNDAwMGQsIDB4OGMwMDA1MjAsCi0JMHgwNDAyMDAyZSwgMHg0MjAwMDgwMCwgMHgwMDAwMTAwMCwgMHg1MDA0MDgwMCwKLQkweDgyMDQwYzgwLCAweDI0MjIwMDAxLCAweDA0MDIwMDAzLCAweDhjMDAwNTA0LAotCTB4MDQwMDA3ZjQsIDB4MDQwMWY4NDIsIDB4NTljNDAwMGQsIDB4OGMwMDA1MjAsCi0JMHgwNDAyMDAyMiwgMHg0MjAwMDgwMCwgMHgwMDAwMTAwMCwgMHg1MDA0MDgwMCwKLQkweDgyMDQwYzgwLCAweDI0MjIwMDAxLCAweDA0MDIwMDAzLCAweDhjMDAwNTA0LAotCTB4MDQwMDA3ZTgsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGEsIDB4ODA1OGIwNDAsCi0JMHgwNDAwMDAwMywgMHgwNDAxZjgzMiwgMHgwNDAxZjdmZCwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDY0LCAweDU5YzQwMDBkLCAweDhjMDAwNTFlLCAweDA0MDAwMDBmLAotCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsCi0JMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwgMHgyNDIyMDAwMSwgMHgwNDAyMDAwNCwKLQkweDU5YzQwODA4LCAweDg0MDQwZDEwLCAweDQ4MDc4ODA4LCAweDgwMDAwNTgwLAotCTB4NDgwM2M4NTcsIDB4MDQwMWYwMGMsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsCi0JMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwgMHgyNDIyMDAwMSwgMHgwNDAyMDAwNCwKLQkweDU5YzQwODA4LCAweDg0MDQwZDEwLCAweDQ4MDc4ODA4LCAweDgyMDAwNTQwLAotCTB4MDAwMDAwMDEsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDBhMCwgMHgwNDAxZjgxNiwgMHg4MjA0MDUwMCwgMHhmZmZmZmZmZSwKLQkweDQyMDAwODAwLCAweDAwMDAwMGEwLCAweDA0MDFmODE2LCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDAsIDB4MDQwMWY4MGUsIDB4ODIwNDA1MDAsIDB4ZmZmZmZmZmUsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjAwZSwgMHg0MDAwMDAwMCwKKwkweDAwMDA4MDAwLCAweDA0MDFmOWQ1LCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAorCTB4MDQwMWY4NzQsIDB4ODIwNDA1MDAsIDB4ZmZmZmZmNmYsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAxMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjg3MiwKKwkweDA0MDFmMTExLCAweDRjNTgwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDE0LAorCTB4ODA1OGIwNDAsIDB4MDQwMDAwNDIsIDB4NTljNDAwMGQsIDB4OGMwMDA1MjAsCisJMHgwNDAyMDdmYywgMHgwNDAxZjg1YiwgMHg1OWM0MDAwZCwgMHg4YzAwMDUyMCwKKwkweDA0MDIwN2Y4LCAweDU5YzQwODA4LCAweDg0MDQwZDUwLCAweDQ4MDc4ODA4LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwYzgsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmYsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAxNCwgMHg4MDU4YjA0MCwgMHgwNDAwMDAzMCwKKwkweDU5YzQwMDBkLCAweDhjMDAwNTIwLCAweDA0MDIwMDJkLCAweDQyMDAwODAwLAorCTB4MDAwMDEwMDAsIDB4NTAwNDA4MDAsIDB4ODIwNDBjODAsIDB4MjQyMjAwMDEsCisJMHgwNDAyMDAwMywgMHg4YzAwMDUwNCwgMHgwNDAwMDdmNCwgMHgwNDAxZjg0MSwKKwkweDU5YzQwMDBkLCAweDhjMDAwNTIwLCAweDA0MDIwMDIxLCAweDQyMDAwODAwLAorCTB4MDAwMDEwMDAsIDB4NTAwNDA4MDAsIDB4ODIwNDBjODAsIDB4MjQyMjAwMDEsCisJMHgwNDAyMDAwMywgMHg4YzAwMDUwNCwgMHgwNDAwMDdlOCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDBhLCAweDgwNThiMDQwLCAweDA0MDAwMDAzLCAweDA0MDFmODMxLAorCTB4MDQwMWY3ZmQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwNjQsIDB4NTljNDAwMGQsCisJMHg4YzAwMDUxZSwgMHgwNDAwMDAwZSwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywKKwkweDQyMDAwMDAwLCAweDAwMDAxMDAwLCAweDUwMDAwMDAwLCAweDgyMDAwNDgwLAorCTB4MjQyMjAwMDEsIDB4MDQwMjAwMDQsIDB4NTljNDA4MDgsIDB4ODQwNDBkMTAsCisJMHg0ODA3ODgwOCwgMHg4MDAwMDU4MCwgMHgwNDAxZjAwYywgMHg0MjAwMDAwMCwKKwkweDAwMDAxMDAwLCAweDUwMDAwMDAwLCAweDgyMDAwNDgwLCAweDI0MjIwMDAxLAorCTB4MDQwMjAwMDQsIDB4NTljNDA4MDgsIDB4ODQwNDBkMTAsIDB4NDgwNzg4MDgsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMGEwLCAweDA0MDFmODE2LCAweDgyMDQwNTAwLAorCTB4ZmZmZmZmZmUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsIDB4MDQwMWY4MTYsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjgwZSwgMHg4MjA0MDUwMCwKKwkweGZmZmZmZmZlLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDFmMDBlLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHgxYzAxZjAwMCwgMHg0ODBiODgwNSwgMHgxYzAxZjAwMCwgMHg0ODA3ODgwZSwKLQkweDU5YzQwODBmLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDFjMDFmMDAwLAotCTB4OTAwMDAxYzAsIDB4ODAwNDBkNDAsIDB4ODQwNDBkNDAsIDB4NDgwNzg4MGUsCi0JMHgxYzAxZjAwMCwgMHg4MjAwMGQ4MCwgMHgwMDIwMDAwMCwgMHgwNDAwMDAwOSwKLQkweDgyMDAwZDgwLCAweDAyMDAwMDAwLCAweDA0MDAwMDA2LCAweDgyMDAwZDgwLAotCTB4MDEwMDAwMDAsIDB4MDQwMDAwMDYsIDB4NTljNDA4YTMsIDB4MDQwMWYwMDYsCi0JMHg1OWM0MDhhMywgMHg4NDA0MGQzMCwgMHgwNDAxZjAwMywgMHg1OWM0MDhhMywKLQkweDg0MDQwZDMyLCAweDgwMDQwNTQwLCAweDQ4MDM4OGEzLCAweDQ4MDc4OGEzLAotCTB4MWMwMWYwMDAsIDB4NTljNDAwYTMsIDB4ODQwMDA1NTYsIDB4NDgwMzg4YTMsCi0JMHg4NDAwMDUxNiwgMHg0ODAzODhhMywgMHgxYzAxZjAwMCwgMHg0ODVmYzg1NywKLQkweDQ4NjNjODU3LCAweDRjNjQwMDAwLCAweDRkM2MwMDAwLCAweDRkNDAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDZlZGUsIDB4NDg2MzUwMGEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWIzMywgMHgwNDAyMDA2YywgMHg4MjYwMGQwMCwgMHgwMDAwZmYwMCwKLQkweDgwMDQwOWMwLCAweDA0MDAwMDBjLCAweDQyMDBjODAwLCAweDAwMDAwMDAxLAotCTB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODAwNDExMTAsCi0JMHg4MDA4MTU4MCwgMHgwNDAwMDAyMSwgMHg4MjA0MTU4MCwgMHgwMDAwZmYwMCwKLQkweDA0MDAwMDBhLCAweDU5YzQxMGEzLCAweDgyMDgxNTAwLCAweDAwMDA4MDAwLAotCTB4MDQwMDAwMDksIDB4NTljNDEwYTcsIDB4ODIwODE1MDAsIDB4MDAwMGZmMDAsCi0JMHg4MjA4MTU4MCwgMHgwMDAwZmYwMCwgMHg0MjAwYzgwMCwgMHgwMDAwMDAwMCwKLQkweDA0MDAwMDEyLCAweDU5YTgwMDA1LCAweDhjMDAwNTAyLCAweDA0MDIwMDA4LAotCTB4OGMwMDA1MDAsIDB4MDQwMjAwMGQsIDB4NTk5YzEwMTcsIDB4OGMwODE1MWEsCi0JMHgwNDAwMDAzZSwgMHg4NDAwMDU0MiwgMHg0ODAzNTAwNSwgMHg0MjAwYzgwMCwKLQkweDAwMDAwMDAyLCAweDQyMDI4MDAwLCAweDAwMDAwMDA0LCAweDQyMDI3ODAwLAotCTB4MDAwMDAwMDgsIDB4MDQwMWYwMDgsIDB4NTlhODA4MDUsIDB4ODQwNDBkNDAsCi0JMHg0ODA3NTAwNSwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwgMHg0MjAyNzgwMCwKLQkweDAwMDAwNDAwLCAweDU5YTgwMDA2LCAweDhjMDAwNTAyLCAweDA0MDIwMDA2LAotCTB4NTlhODA4MDUsIDB4OGMwNDBkMGEsIDB4MDQwMjAwMzMsIDB4ODQwNDBkNGEsCi0JMHg0ODA3NTAwNSwgMHg0MjAwMDAwMCwgMHgwMDEwYjgxMiwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDU5YTgxODBhLCAweDQyMDAxMDAwLCAweDAwMDA4MDEzLAotCTB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsCisJMHg0MDAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0ODBiODgwNSwgMHgxYzAxZjAwMCwKKwkweDQ4MDc4ODBlLCAweDU5YzQwODBmLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLAorCTB4MWMwMWYwMDAsIDB4OTAwMDAxYzAsIDB4ODAwNDBkNDAsIDB4ODQwNDBkNDAsCisJMHg0ODA3ODgwZSwgMHgxYzAxZjAwMCwgMHg4MjAwMGQ4MCwgMHgwMDIwMDAwMCwKKwkweDA0MDAwMDA5LCAweDgyMDAwZDgwLCAweDAyMDAwMDAwLCAweDA0MDAwMDA2LAorCTB4ODIwMDBkODAsIDB4MDEwMDAwMDAsIDB4MDQwMDAwMDYsIDB4NTljNDA4YTMsCisJMHgwNDAxZjAwNiwgMHg1OWM0MDhhMywgMHg4NDA0MGQzMCwgMHgwNDAxZjAwMywKKwkweDU5YzQwOGEzLCAweDg0MDQwZDMyLCAweDgwMDQwNTQwLCAweDQ4MDM4OGEzLAorCTB4NDgwNzg4YTMsIDB4MWMwMWYwMDAsIDB4NTljNDAwYTMsIDB4ODQwMDA1NTYsCisJMHg0ODAzODhhMywgMHg4NDAwMDUxNiwgMHg0ODAzODhhMywgMHgxYzAxZjAwMCwKKwkweDQ4NWZjODU3LCAweDQ4NjNjODU3LCAweDRjNjQwMDAwLCAweDRkM2MwMDAwLAorCTB4NGQ0MDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZjMzIsIDB4NDg2MzUwMGEsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTk1YSwgMHgwNDAyMDA2YSwgMHg4MjYwMGQwMCwKKwkweDAwMDBmZjAwLCAweDgwMDQwOWMwLCAweDA0MDAwMDBjLCAweDQyMDBjODAwLAorCTB4MDAwMDAwMDEsIDB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MDA0MTExMCwgMHg4MDA4MTU4MCwgMHgwNDAwMDAyMSwgMHg4MjA0MTU4MCwKKwkweDAwMDBmZjAwLCAweDA0MDAwMDBhLCAweDU5YzQxMGEzLCAweDgyMDgxNTAwLAorCTB4MDAwMDgwMDAsIDB4MDQwMDAwMDksIDB4NTljNDEwYTcsIDB4ODIwODE1MDAsCisJMHgwMDAwZmYwMCwgMHg4MjA4MTU4MCwgMHgwMDAwZmYwMCwgMHg0MjAwYzgwMCwKKwkweDAwMDAwMDAwLCAweDA0MDAwMDEyLCAweDU5YTgwMDA1LCAweDhjMDAwNTAyLAorCTB4MDQwMjAwMDgsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMGQsIDB4NTk5YzEwMTcsCisJMHg4YzA4MTUxYSwgMHgwNDAwMDAzYywgMHg4NDAwMDU0MiwgMHg0ODAzNTAwNSwKKwkweDQyMDBjODAwLCAweDAwMDAwMDAyLCAweDQyMDI4MDAwLCAweDAwMDAwMDA0LAorCTB4NDIwMjc4MDAsIDB4MDAwMDAwMDgsIDB4MDQwMWYwMDcsIDB4NTlhODA4MDUsCisJMHg4NDA0MGQ0MCwgMHg0ODA3NTAwNSwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwKKwkweDQxN2E3ODAwLCAweDU5YTgwMDA2LCAweDhjMDAwNTAyLCAweDA0MDIwMDA2LAorCTB4NTlhODA4MDUsIDB4OGMwNDBkMGEsIDB4MDQwMjAwMzIsIDB4ODQwNDBkNGEsCisJMHg0ODA3NTAwNSwgMHg0MjAwMDAwMCwgMHgwMDEwYjYxMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhODZlLCAweDU5YTgxODBhLCAweDQyMDAxMDAwLCAweDAwMDA4MDEzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDM5M2UsCiAJMHgwNDAwMDAxNSwgMHg0ZDQwMDAwMCwgMHg4MjYwMDUwMCwgMHgwMDAwMDBmZiwKIAkweDQyMDI4ODAwLCAweDAwMDBmZmZmLCAweDQwNjQzMDAwLCAweDQyMDI4MDAwLAotCTB4MDAwMDAwMGUsIDB4MDIwMWY4MDAsIDB4MDAxMGE0NDYsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwZSwgMHgwMjAxZjgwMCwgMHgwMDEwYTI1OCwgMHg0MjAwMDgwMCwKIAkweDAwMDAwMDAxLCAweDQyMDAxMDAwLCAweDAwMDAwMTAwLCAweDAyMDFmODAwLAotCTB4MDAxMDYxOGIsIDB4NWMwMjgwMDAsIDB4NTk5YzA4MTcsIDB4OGMwNDBkMGEsCi0JMHgwNDAyMDAxMSwgMHg0OTNmYzg1NywgMHg0OTQzYzg1NywgMHgwMjAxZjgwMCwKLQkweDAwMTAxZmU1LCAweDA0MDFmMDBjLCAweDAyMDFmODAwLCAweDAwMTAzYjI1LAotCTB4MDQwMDAwMDksIDB4NDIwMjgwMDAsIDB4MDAwMDAwMGYsIDB4NDIwMjg4MDAsCi0JMHgwMDAwZmZmZiwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhNDQ5LCAweDQ5N2I4ODgwLCAweDVjMDI4MDAwLCAweDVjMDI3ODAwLAotCTB4NWMwMGM4MDAsIDB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYTAsCi0JMHgwNDAxZmY1ZiwgMHg4MjA0MDU0MCwgMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMGEwLCAweDA0MDFmNzVmLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAotCTB4MDQwMWZmNTcsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwMCwgMHgwNDAxZjc1NywgMHg0MjAwMDgwMCwgMHgwMDAwMDBhMCwKLQkweDA0MDFmZjRmLCAweDgyMDQwNTAwLCAweGZmZmZmZmZkLCAweDQyMDAwODAwLAotCTB4MDAwMDAwYTAsIDB4MDQwMWY3NGYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsCi0JMHgwNDAxZmY0NywgMHg4MjA0MDUwMCwgMHhmZmZmZmZmZCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDAwLCAweDA0MDFmNzQ3LCAweDU5YzQwOGE4LCAweDA0MDFmZjM4LAotCTB4MDQwMWZmMzcsIDB4NTljNDAwYTgsIDB4ODAwNDBkODAsIDB4MDQwMjA3ZmIsCi0JMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzODgwNywgMHgwMDAwMDAwMSwKLQkweDQ5N2I4ODA3LCAweDU5YzQwMDA1LCAweDQ4MDM4ODA1LCAweDQ5N2I1MDZjLAotCTB4NDk3YjUwNmQsIDB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsIDB4MDAwMDAwMDEsCi0JMHg0MjAwNjgwMCwgMHgwMDAwMDAwMywgMHgwNDAxZjgyNCwgMHgwNDAxZjgyZiwKLQkweDQwNDAwMDAwLCAweDQ4MDNjODU3LCAweDgyNDA4NTgwLCAweDAwMDAwMDAwLAotCTB4MDQwMjAwMWQsIDB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsIDB4MDAwMDAwMWUsCi0JMHg0MjAwNjgwMCwgMHgwMDAwMDAxNCwgMHgwNDAxZjgxOCwgMHgwNDAxZjgyMywKLQkweDQwNDAwMDAwLCAweDQ4MDNjODU3LCAweDgyNDA4NTgwLCAweDAwMDAwODAwLAotCTB4MDQwMjAwMTEsIDB4NDIwMDU4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMDYwMDAsCi0JMHgwMDAwMDAxZSwgMHg0MjAwNjgwMCwgMHgwMDAwMDAxNCwgMHgwNDAxZjgwYiwKLQkweDA0MDFmODE2LCAweDQwNDAwMDAwLCAweDQ4MDNjODU3LCAweDgyNDA4NTgwLAotCTB4MDAwMGZmZmYsIDB4MDQwMjAwMDQsIDB4NGEwMzUwNmMsIDB4MDAwMDAwMDEsCi0JMHg0ODAzYzg1NiwgMHgxYzAxZjAwMCwgMHg0MTc4NTAwMCwgMHgwNDAxZjgxMiwKLQkweDA0MDFmODM4LCAweDQwMzQ3MDAwLCAweDQwMzQwODAwLCAweDA0MDFmMDNkLAotCTB4NDIwMDUwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY4MGIsIDB4MDQwMWY4MzEsCi0JMHg0MDM0MDgwMCwgMHgwNDAxZjAzNywgMHg0MjAwNTAwMCwgMHgwMDAwMDAwMiwKLQkweDA0MDFmODA1LCAweDA0MDFmODFkLCAweDA0MDFmODM1LCAweDQwMDQ4MDAwLAotCTB4MWMwMWYwMDAsIDB4MDQwMWY4MDgsIDB4MDQwMWY4MTQsIDB4NDAyODA4MDAsCi0JMHgwNDAxZjgyNiwgMHg0MDJjMDgwMCwgMHgwNDAxZjgyNywgMHg0MDMwMDgwMCwKLQkweDA0MDFmMDI1LCAweDQyMDAwODAwLCAweDAwMDBmZmZmLCAweDQyMDAxMDAwLAotCTB4MDAwMDAwMDEsIDB4MDQwMWY4MjksIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsCi0JMHgwNDAxZjgyNiwgMHg0MjAwMDgwMCwgMHgwMDAwZmZmZiwgMHg0MjAwMTAwMCwKLQkweDAwMDAwMDEwLCAweDA0MDFmMDIxLCAweDQxNzgwODAwLCAweDQyMDAxMDAwLAotCTB4MDAwMDAwMDIsIDB4MDQwMWYwMWQsIDB4MDQwMWY5MmUsIDB4NGEwM2QwMDAsCi0JMHgwMDA1MDAwNCwgMHgwNDAxZjkyYiwgMHg0YTAzZDAwMCwgMHgwMDA1MDAwNSwKLQkweDA0MDFmOTI4LCAweDRhMDNkMDAwLCAweDAwMDUwMDA0LCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDEsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMGYsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwMiwKLQkweDA0MDFmMDBhLCAweDQyMDAxMDAwLCAweDAwMDAwMDA1LCAweDA0MDFmMDA3LAotCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMWYwMDQsIDB4NDIwMDEwMDAsCi0JMHgwMDAwMDAxMCwgMHgwNDAxZjAxYiwgMHgwNDAxZjkxMiwgMHg4MjA4MmMwMCwKLQkweDAwMTBhYjM4LCAweDUwMTQyODAwLCAweDgyMDgxNTAwLCAweGZmZmZmZmZmLAotCTB4MDQwMDAwMTMsIDB4MDQwMWY5MGIsIDB4ODAwODEwNDAsIDB4ODAxNDI5MDIsCi0JMHg0MDA0MDAwMCwgMHg4MDE0MDUwMCwgMHgwNDAwMDAwNywgMHg0YTAzZDAwMCwKLQkweDAwMDcwMDA2LCAweDA0MDFmOTAzLCAweDRhMDNkMDAwLCAweDAwMDcwMDA3LAotCTB4MDQwMWYwMDYsIDB4NGEwM2QwMDAsIDB4MDAwNzAwMDQsIDB4MDQwMWY4ZmQsCi0JMHg0YTAzZDAwMCwgMHgwMDA3MDAwNSwgMHgwNDAxZjdlYywgMHgxYzAxZjAwMCwKLQkweDQxNzgwODAwLCAweDgyMDgyYzAwLCAweDAwMTBhYjM4LCAweDUwMTQyODAwLAotCTB4ODIwODE1MDAsIDB4ZmZmZmZmZmYsIDB4MDQwMDAwMTAsIDB4MDQwMWY4ZjEsCi0JMHg0YTAzZDAwMCwgMHgwMDA1MDAwMSwgMHgwNDAxZjhlZSwgMHg1OWU4MTgwMCwKLQkweDgwMDgxMDQwLCAweDgwMTQyOTAyLCAweDhjMGMxZDA2LCAweDA0MDAwMDA0LAotCTB4NDAxNDAwMDAsIDB4ODAwNDBkNDAsIDB4MDQwMWY4ZTYsIDB4NGEwM2QwMDAsCi0JMHgwMDA3MDAwMCwgMHgwNDAxZjdlZiwgMHgxYzAxZjAwMCwgMHg0ODBiYzg1NywKLQkweDQ4MGI1MDZkLCAweDU5YzQwMDAxLCAweDgyMDAwNTAwLCAweGZmZmZlZmZmLAotCTB4NDgwMzg4MDEsIDB4NDE3ODE4MDAsIDB4MDQwMWY4YzQsIDB4NDE3ODU4MDAsCi0JMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwgMHg0MjAwNjgwMCwgMHgwMDAwMDAwNCwKLQkweDA0MDFmZjdhLCAweDQyMDA2ODAwLCAweDAwMDAwMDNjLCAweDA0MDFmZjdkLAorCTB4MDAxMDVlYzQsIDB4NWMwMjgwMDAsIDB4NTk5YzA4MTcsIDB4OGMwNDBkMGEsCisJMHgwNDAyMDAxMCwgMHg0OTNmYzg1NywgMHg0OTQzYzg1NywgMHgwNDAxZmI1OSwKKwkweDA0MDFmMDBjLCAweDAyMDFmODAwLCAweDAwMTAzOTNlLCAweDA0MDAwMDA5LAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMGYsIDB4NDIwMjg4MDAsIDB4MDAwMGZmZmYsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTI1YiwKKwkweDQ5N2I4ODgwLCAweDVjMDI4MDAwLCAweDVjMDI3ODAwLCAweDVjMDBjODAwLAorCTB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDQwMWZmNjEsCisJMHg4MjA0MDU0MCwgMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKKwkweDA0MDFmNzYxLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDFmZjU5LAorCTB4ODIwNDA1MDAsIDB4ZmZmZmZmZmQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsCisJMHgwNDAxZjc1OSwgMHg1OWM0MDhhOCwgMHgwNDAxZmY0YSwgMHgwNDAxZmY0OSwKKwkweDU5YzQwMGE4LCAweDgwMDQwZDgwLCAweDA0MDIwN2ZiLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NGEwMzg4MDcsIDB4MDAwMDAwMDEsIDB4NDk3Yjg4MDcsCisJMHg1OWM0MDAwNSwgMHg0ODAzODgwNSwgMHg0OTdiNTA2YywgMHg0OTdiNTA2ZCwKKwkweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDAxLCAweDQyMDA2ODAwLAorCTB4MDAwMDAwMDMsIDB4MDQwMWY4MjQsIDB4MDQwMWY4MmYsIDB4NDA0MDAwMDAsCisJMHg0ODAzYzg1NywgMHg4MjQwODU4MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAxZCwKIAkweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLCAweDQyMDA2ODAwLAotCTB4MDAwMDAwMDQsIDB4MDQwMWZmNzEsIDB4NDE3ODY4MDAsIDB4MDQwMWZmNzUsCi0JMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwgMHg0MTc4NjgwMCwKLQkweDA0MDFmZjZhLCAweDQyMDA2ODAwLCAweDAwMDAwMDAyLCAweDA0MDFmZjZkLAotCTB4NDIwMDY4MDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZmNjQsIDB4NDIwMDY4MDAsCi0JMHgwMDAwMDBmNSwgMHgwNDAxZmY2NywgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwKLQkweDAwMDAwMDFlLCAweDQyMDA2ODAwLCAweDAwMDAwMDA0LCAweDA0MDFmZjViLAotCTB4NDIwMDY4MDAsIDB4MDAwMDAwMjAsIDB4MDQwMWZmNWUsIDB4NTlhODEwNmQsCi0JMHgwNDAxZjg2NSwgMHg0MjAwMTgwMCwgMHgwMDAyMDBmNSwgMHgwNDAxZjg5NywKLQkweDU5YTgxMDZkLCAweDA0MDFmODc5LCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLAotCTB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsIDB4MDAwMDAwMDQsIDB4MDQwMWZmNGIsCi0JMHg0MTc4NjgwMCwgMHgwNDAxZmY0ZiwgMHg1OWM0MDAwMSwgMHg4MjAwMDU0MCwKLQkweDAwMDAxMDAwLCAweDQ4MDM4ODAxLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLAotCTB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsIDB4MDAwMDAwMTUsIDB4MDQwMWZmM2YsCi0JMHgwNDAxZmY0YSwgMHg0MDQwMDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMiwKLQkweDRjMDAwMDAwLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLAotCTB4NDIwMDY4MDAsIDB4MDAwMDAwMTUsIDB4MDQwMWZmMzQsIDB4NWMwMDAwMDAsCi0JMHg0MDAwNjgwMCwgMHgwNDAxZmYzNywgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwKLQkweDAwMDAwMDFlLCAweDQyMDA2ODAwLCAweDAwMDAwMDE1LCAweDA0MDFmZjJiLAotCTB4MDQwMWZmMzYsIDB4NDA0MDAwMDAsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmQsCi0JMHg0YzAwMDAwMCwgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwKLQkweDQyMDA2ODAwLCAweDAwMDAwMDE1LCAweDA0MDFmZjIwLCAweDVjMDAwMDAwLAotCTB4NDAwMDY4MDAsIDB4MDQwMWZmMjMsIDB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsCi0JMHgwMDAwMDAxZSwgMHg0MjAwNjgwMCwgMHgwMDAwMDAxNCwgMHgwNDAxZmYxNywKLQkweDA0MDFmZjIyLCAweDQwNDAwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDQwLAotCTB4NGMwMDAwMDAsIDB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsIDB4MDAwMDAwMWUsCi0JMHg0MjAwNjgwMCwgMHgwMDAwMDAxNCwgMHgwNDAxZmYwYywgMHg1YzAwMDAwMCwKLQkweDQwMDA2ODAwLCAweDA0MDFmZjBmLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLAotCTB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsIDB4MDAwMDAwMTQsIDB4MDQwMWZmMDMsCi0JMHgwNDAxZmYwZSwgMHg0MDQwMDAwMCwgMHg4MjAwMDUwMCwgMHgwMDAwZmZiZiwKLQkweDRjMDAwMDAwLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLAotCTB4NDIwMDY4MDAsIDB4MDAwMDAwMTQsIDB4MDQwMWZlZjgsIDB4NWMwMDAwMDAsCi0JMHg0MDAwNjgwMCwgMHgwNDAxZmVmYiwgMHg0YTAzODg4NiwgMHgwMDAwMjAyMCwKLQkweDA0MDFmMDRjLCAweDQ4MGJjODU3LCAweDgyMDgwNTgwLCAweDAwMDEwMDAwLAotCTB4MDQwMjAwMDcsIDB4ODIwNDBkNDAsIDB4MDAwMTAwMDAsIDB4NDIwMDE4MDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjgyZCwgMHgwNDAxZjAwZiwgMHg4MjA4MDU4MCwKLQkweDAwMDA4MDAwLCAweDA0MDAwMDA3LCAweDgyMDQwZDQwLCAweDAwMDAwMDAwLAotCTB4NDIwMDE4MDAsIDB4MDA5MDAwMDEsIDB4MDQwMWY4MjQsIDB4MDQwMWYwMDYsCi0JMHg4MjA0MGQ0MCwgMHgwMDAwODAwMCwgMHg0MjAwMTgwMCwgMHgwMDEwMDAwMSwKLQkweDA0MDFmODFlLCAweDFjMDFmMDAwLCAweDQ4MGJjODU3LCAweDgyMDgwNTgwLAotCTB4MDAwMTAwMDAsIDB4MDQwMjAwMDgsIDB4NDIwMDE4MDAsIDB4MDAwMDAwYTEsCi0JMHgwNDAxZjgxNiwgMHg0MjAwMTgwMCwgMHgwMDAwMDBjMSwgMHgwNDAxZjgxMywKLQkweDA0MDFmMDExLCAweDgyMDgwNTgwLCAweDAwMDA4MDAwLCAweDA0MDAwMDA4LAotCTB4NDIwMDE4MDAsIDB4MDAwNDAwYTEsIDB4MDQwMWY4MGMsIDB4NDIwMDE4MDAsCi0JMHgwMDIwMDBjMSwgMHgwNDAxZjgwOSwgMHgwNDAxZjAwNywgMHg0MjAwMTgwMCwKLQkweDAwMDQwMGExLCAweDA0MDFmODA1LCAweDQyMDAxODAwLCAweDAwMDAwMGMxLAotCTB4MDQwMWY4MDIsIDB4MWMwMWYwMDAsIDB4NDgwZmM4NTcsIDB4NDE3ODU4MDAsCi0JMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwgMHg0MTc4NjgwMCwgMHgwNDAxZmViNywKLQkweDQwMGM2ODAwLCAweDgwMzQ2OTYwLCAweDA0MDFmZWJhLCAweDQyMDA2ODAwLAotCTB4MDAwMDAwMDEsIDB4MDQwMWZlYjEsIDB4NDAwYzY4MDAsIDB4MDQwMWZlYjUsCi0JMHg0MjAwNjgwMCwgMHgwMDAwMDAwMywgMHgwNDAxZmVhYywgMHgwNDAxZmViNywKLQkweDQwNDAwMDAwLCAweDhjMDAwNTA0LCAweDA0MDIwN2ZjLCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsCi0JMHgxYzAxZjAwMCwgMHgwMDAyMDEwMywgMHgwMDEwMWJkNSwgMHgwMDEwMWJkYiwKLQkweDAwMTAxYmUxLCAweDAwMTAxYmU5LCAweDAwMTAxYmVmLCAweDAwMTAxYmY3LAotCTB4MDAxMDFiZmYsIDB4MDAxMDFjMDksIDB4MDAxMDFjMGYsIDB4MDAxMDFjMTcsCi0JMHgwMDEwMWMxZiwgMHgwMDEwMWMyOSwgMHgwMDEwMWMzMSwgMHgwMDEwMWMzYiwKLQkweDAwMTAxYzQ1LCAweDAwMDIwMGY4LCAweDAwMTAxYzUxLCAweDAwMTAxYzU5LAotCTB4MDAxMDFjNjEsIDB4MDAxMDFjNmIsIDB4MDAxMDFjNzMsIDB4MDAxMDFjN2QsCi0JMHgwMDEwMWM4NywgMHgwMDEwMWM5MywgMHgwMDEwMWM5YiwgMHgwMDEwMWNhNSwKLQkweDAwMTAxY2FmLCAweDAwMTAxY2JiLCAweDAwMTAxY2M1LCAweDAwMTAxY2QxLAotCTB4MDAxMDFjZGQsIDB4MDAwMjAwZmQsIDB4MDAxMDFjZWIsIDB4MDAxMDFjZjMsCi0JMHgwMDEwMWNmYiwgMHgwMDEwMWQwNSwgMHgwMDEwMWQwZCwgMHgwMDEwMWQxNywKLQkweDAwMTAxZDIxLCAweDAwMTAxZDJkLCAweDAwMTAxZDM1LCAweDAwMTAxZDNmLAotCTB4MDAxMDFkNDksIDB4MDAxMDFkNTUsIDB4MDAxMDFkNWYsIDB4MDAxMDFkNmIsCi0JMHgwMDEwMWQ3NywgMHgwMDEwMWQ4NSwgMHgwMDEwMWQ4ZCwgMHgwMDEwMWQ5NywKLQkweDAwMTAxZGExLCAweDAwMTAxZGFkLCAweDAwMTAxZGI3LCAweDAwMTAxZGMzLAotCTB4MDAxMDFkY2YsIDB4MDAxMDFkZGQsIDB4MDAxMDFkZTcsIDB4MDAxMDFkZjMsCi0JMHgwMDEwMWRmZiwgMHgwMDEwMWUwZCwgMHgwMDEwMWUxOSwgMHgwMDEwMWUyNywKLQkweDAwMTAxZTM1LCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsIDB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMTU1LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDExNTUsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxMTU1LCAweDAyMDFmODAwLAotCTB4MDAxMDE0MTgsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTI4OSwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmODAwLAotCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMjg5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMTU1LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmODAwLAotCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMjg5LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMDIwNzI5LCAweDAyMDFmODAwLAotCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzI5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDExNTUsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxMTU1LCAweDAyMDFmODAwLAotCTB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzI5LCAweDAyMDFmODAwLAotCTB4MDAxMDEyODksIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMjg5LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMjg5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDExNTUsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAotCTB4MDAwMjAwMTUsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAotCTB4MDAxMDExNTUsIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMTAxMTU1LCAweDAyMDFmODAwLAotCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTE1NSwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMDE1LCAweDAyMDFmODAwLAotCTB4MDAxMDEyODksIDB4MDIwMWY4MDAsIDB4MDAxMDExNTUsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAotCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTE1NSwgMHgwMjAxZjAwMCwgMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAotCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAwMjA3MjksIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzI5LCAweDAyMDFmODAwLCAweDAwMDIwMDE1LCAweDAyMDFmODAwLAotCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzI5LCAweDAyMDFmODAwLCAweDAwMDIwMDE1LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTQxOCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMTU1LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMTU1LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMTU1LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMjg5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3MjksIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMTA0LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMjg5LCAweDAyMDFmMDAwLCAweDAwMDIwMTAxLCAweDRjMDAwMDAwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE0MTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDAxNSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMjg5LCAweDAyMDFmODAwLCAweDAwMDIwMTA0LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmMDAwLAotCTB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyOSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMDE1LCAweDAyMDFmODAwLCAweDAwMTAxMjg5LCAweDAyMDFmODAwLAotCTB4MDAwMjAxMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAxMDEsIDB4NGMwMDAwMDAsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTE1NSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNDE4LCAweDAyMDFmODAwLCAweDAwMDIwNzI5LCAweDAyMDFmODAwLAotCTB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsIDB4MDAxMDEyODksIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDEwMSwgMHg0YzAwMDAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMTU1LCAweDAyMDFmODAwLCAweDAwMTAxNDE4LCAweDAyMDFmODAwLAotCTB4MDAwMjA3MjksIDB4MDIwMWY4MDAsIDB4MDAwMjAwMTUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTI4OSwgMHgwMjAxZjgwMCwgMHgwMDAyMDEwNCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMTAxLCAweDRjNWMwMDAwLCAweDRjNjAwMDAwLCAweDQxNzhiODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ4ZWMsIDB4MDQwMjAwZmQsIDB4NTlhOGMwMjYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAwMDAwMywgMHg4YzYwYzUwNiwKLQkweDA0MDAwMDBlLCAweDhjNjBjNTAwLCAweDA0MDIwMDA0LCAweDhjNjBjNTBlLAotCTB4MDQwMDA4ZjYsIDB4MDQwMWYwZjIsIDB4MDQwMWZhYjQsIDB4MDQwMjAwZjAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAyMDAwNCwgMHg0YTAzNTAxYywKLQkweDAwMDBmZmZmLCAweDA0MDFmMGVhLCAweDhjNjBjNTA0LCAweDA0MDAwMDA0LAotCTB4NGEwMzUwMWMsIDB4MDAwMGZmZmYsIDB4MDQwMWYwZTUsIDB4NTlhOGMwMTAsCi0JMHg4MjYwYzUwMCwgMHgwMDAwMDBmZiwgMHg1OWE4MTAxMywgMHg4YzA4MTUwMCwKLQkweDA0MDAwMDVkLCAweDhjMDgxNTAyLCAweDA0MDIwMDViLCAweDU5YThiODFjLAotCTB4ODI1YzBkODAsIDB4MDAwMGZmZmYsIDB4MDQwMjAwMDMsIDB4NDIwMGI4MDAsCi0JMHgwMDAwMDAwMSwgMHg4MDVjMTEwNCwgMHg4MjA4NjQwMCwgMHgwMDEwYmUyMSwKLQkweDUwMzAwODAwLCAweDgyNWMwNTAwLCAweDAwMDAwMDAzLCAweDBjMDFmMDAxLAotCTB4MDAxMDFlODEsIDB4MDAxMDFlN2MsIDB4MDAxMDFlODAsIDB4MDAxMDFlN2UsCi0JMHg4MDA0MDkxMCwgMHgwNDAxZjAwNCwgMHg4MDA0MDkzMCwgMHgwNDAxZjAwMiwKLQkweDgwMDQwOTIwLCAweDgyMDQwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwZDgwLAotCTB4MDAwMDAwZmYsIDB4MDQwMDAwMGYsIDB4NGMwMDAwMDAsIDB4ODIwMDA0MDAsCi0JMHgwMDEwMjEwZSwgMHg1MDAwMDgwMCwgMHg4MDA0MDkxMCwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDgwLCAweDVjMDAwMDAwLCAweDA0MDAwMDMwLCAweDgwNjAwZDgwLAotCTB4MDQwMDAwMmUsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMmMsIDB4MDQwMWYwMGIsCi0JMHg1OWE4MTAwNSwgMHg4MjA4MTUwMCwgMHgwMDAwMDAwMywgMHgwNDAyMDAyYiwKLQkweDU5YTgxMDEzLCAweDg0MDgxNTQyLCAweDQ4MGI1MDEzLCAweDRhMDM1MDFjLAotCTB4MDAwMGZmZmYsIDB4MDQwMWYwMjgsIDB4NGMwMDAwMDAsIDB4NTlhODAwMDUsCi0JMHg4YzAwMDUxNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwgMHgwMjAyMDgwMCwKLQkweDAwMTA0YzZkLCAweDVjMDAwMDAwLCAweDA0MDIwMDFjLCAweDQxN2E4ODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDVjOWEsIDB4MDQwMjAwMTYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDVlNSwgMHgwNDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNGM2MiwKLQkweDA0MDFmOGIxLCAweDA0MDAwMDBmLCAweDA0MDFmMDBjLCAweDU5OWMwMDE5LAotCTB4OGMwMDA1MGUsIDB4MDQwMjAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDQ1YTYsCi0JMHgwNDAyMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNGM2MiwgMHgwNDAxZjllMSwKLQkweDA0MDFmOGJlLCAweDA0MDAwMDAzLCAweDgwNWNiODAwLCAweDA0MDFmN2IyLAotCTB4NDg1ZjUwMWMsIDB4MDQwMWYwODYsIDB4NGEwMzUwMWMsIDB4MDAwMGZmZmYsCi0JMHgwNDAxZjA4MywgMHg0MjAwMzAwMCwgMHgwMDAwMDA3ZSwgMHg1OWE4MDAxYywKLQkweDgyMDAxNTgwLCAweDAwMDBmZmZmLCAweDA0MDIwMDA1LCAweDgwMDAwZDgwLAotCTB4NDAxOGIwMDAsIDB4NDgwM2M4NTYsIDB4MDQwMWYwMDksIDB4ODAxOGI0ODAsCi0JMHgwNDAwMTAwNCwgMHg0MDAwMDgwMCwgMHg0ODAzYzg1NiwgMHgwNDAxZjAwNCwKLQkweDRhMDM1MDFjLCAweDAwMDBmZmZmLCAweDA0MDFmMDcxLCAweDRjMDQwMDAwLAotCTB4NGM1ODAwMDAsIDB4ODIwNDA0MDAsIDB4MDAxMDIxMGUsIDB4NTAwMDAwMDAsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MDYwNDU4MCwgMHgwNDAwMDA1YywKLQkweDAyMDFmODAwLCAweDAwMTA1YzliLCAweDA0MDIwMDYxLCAweDU5YTgwMDA1LAotCTB4OGMwMDA1MTQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDIwMjA4MDAsCi0JMHgwMDEwNGM2ZCwgMHg1YzAwYjAwMCwgMHg1YzAwMDgwMCwgMHgwNDAyMDdkNywKLQkweDRjMDQwMDAwLCAweDRjNTgwMDAwLCAweDg0NWNiZDAwLCAweDAyMDFmODAwLAotCTB4MDAwMjAyNDUsIDB4MDQwMDAwMDgsIDB4NTk5YzAwMTksIDB4OGMwMDA1MGUsCi0JMHgwNDAyMDA0NywgMHgwMjAxZjgwMCwgMHgwMDEwNDVhYiwgMHgwNDAyMDA0YywKLQkweDA0MDFmMDAyLCAweDg0NWNiZDQwLCAweDAyMDFmODAwLCAweDAwMTA0YzYyLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsIDB4MDQwMjAwMDcsIDB4NTlhODAwMDUsCi0JMHg4YzAwMDUwMiwgMHgwNDAwMDAzMywgMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwKLQkweDA0MDIwMDMwLCAweDU5YTgxMDEzLCAweDhjMDgxNTAyLCAweDA0MDAwMDI1LAotCTB4MDIwMWY4MDAsIDB4MDAxMDRhMDksIDB4MDQwMDAwMzEsIDB4OGM1Y2JkMDAsCi0JMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDVmZiwgMHgwNDAxZjAyYywKLQkweDA0MDFmOWNkLCAweDA0MDAwMDJhLCAweDQyMDI2MDAwLCAweDAwMTBiZGU5LAotCTB4NDkzNjYwMDksIDB4NDk3YTYwMDgsIDB4NDE3YTc4MDAsIDB4MDQwMWY5MjUsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKLQkweDAyMDFmODAwLCAweDAwMTAzYjI1LCAweDA0MDAwMDFkLCAweDQxNzgyODAwLAotCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDgsIDB4NGQ0MDAwMDAsIDB4NGQ0NDAwMDAsCi0JMHg1OTM2OGMwMywgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhNDQ2LCAweDVjMDI4ODAwLCAweDVjMDI4MDAwLCAweDA0MDFmMDEwLAotCTB4NDkzN2M4NTcsIDB4NTk5YzAwMTksIDB4OGMwMDA1MGUsIDB4MDQwMjAwMGMsCi0JMHgwNDAxZjk2YywgMHgwNDAxZjg0OSwgMHgwNDAwMDAxMSwgMHgwNDAxZjAwOCwKLQkweDU5YTgwMDEzLCAweDhjMDAwNTAwLCAweDA0MDAwMDAzLCAweDA0MDFmOWE2LAotCTB4MDQwMDAwMDMsIDB4MDQwMWY4MjgsIDB4MDQwMDAwMDksIDB4NWMwMGIwMDAsCi0JMHg1YzAwMDgwMCwgMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDc5OCwKLQkweDRhMDM1MDFjLCAweDAwMDBmZmZmLCAweDA0MDFmMDA1LCAweDQ5MzdjODU3LAotCTB4NWMwMGIwMDAsIDB4NWMwMDA4MDAsIDB4NDgwNzUwMWMsIDB4NWMwMGMwMDAsCi0JMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNTAxYywKLQkweDAwMDAwMDAxLCAweDQyMDI4ODAwLCAweDAwMDAwN2ZlLCAweDQyMDAzMDAwLAotCTB4MDBmZmZmZmUsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1YTYsIDB4MDQwMjAwMGMsCi0JMHgwNDAxZjk0OCwgMHgwNDAxZjgyNSwgMHgwNDAwMDAwOSwgMHg1OWE4MDAyNiwKLQkweDg0MDAwNTRlLCAweDQ4MDM1MDI2LCAweDAyMDFmODAwLCAweDAwMTA5MzBmLAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsCi0JMHgwNDAxZjdmZSwgMHg0OTM3Yzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwKLQkweDA0MDAwMDE1LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAotCTB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NjcsIDB4NTlhODAwMWIsCi0JMHg4MDAwMDAwMCwgMHg0ODAzNTAxYiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAwNCwKLQkweDU5OWMwMDE5LCAweDhjMDAwNTBlLCAweDA0MDAwMDAzLCAweDQyMDI3MDAwLAotCTB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywgMHgwMjAxZjgwMCwKLQkweDAwMTA3OTQyLCAweDA0MDAwMDFjLCAweDQ5MzY2MDA5LCAweDU5MzQwNDAzLAotCTB4ODIwMDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMDAwMDUsIDB4NGQzYzAwMDAsCi0JMHg0MTdhNzgwMCwgMHgwNDAxZjhiNywgMHg1YzAyNzgwMCwgMHg0YTAyNjQwNiwKLQkweDAwMDAwMDAxLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA0NTY3LAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCi0JMHg1OWE4MDAxYiwgMHg4MDAwMDAwMCwgMHg0ODAzNTAxYiwgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDgyMDAwNTQwLAotCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NDIwMjg4MDAsCi0JMHgwMDAwMDdmYywgMHg0MjAwMzAwMCwgMHgwMGZmZmZmYywgMHgwMjAxZjgwMCwKLQkweDAwMTA0NWE2LCAweDA0MDIwMDA1LCAweDA0MDFmODA1LCAweDA0MDAwMDAzLAotCTB4NGEwMzUwMjcsIDB4MDAwMGZmZmYsIDB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwgMHgwNDAwMDAxNCwgMHg0OTM2NjAwOSwKLQkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDQ1NjcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHg1OWE4MDAyOCwgMHg4MDAwMDAwMCwgMHg0ODAzNTAyOCwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDgwYmM4NTcsCi0JMHg0OTJmYzg1NywgMHg0YzVjMDAwMCwgMHg0MDA4YjgwMCwgMHg0MjAyODgwMCwKLQkweDAwMDAwN2ZkLCAweDQyMDAzMDAwLCAweDAwZmZmZmZkLCAweDAyMDFmODAwLAotCTB4MDAxMDQ1YTYsIDB4MDQwMjAwMWEsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCi0JMHgwNDAwMDAxNywgMHg0OTM2NjAwOSwgMHg1OTM0MDAwYSwgMHg4NDAwMDU0NCwKLQkweDQ4MDI2ODBhLCAweDgxMmU1OWMwLCAweDA0MDAwMDA1LCAweDU5MmMwNDA0LAotCTB4OGMwMDA1MWUsIDB4MDQwMDAwMDIsIDB4NDhlZTYwMjEsIDB4NDkyZTYwMDgsCi0JMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0ODVlNjAxYywgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDIyLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDgyMDAwNTQwLAotCTB4MDAwMDAwMDEsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsCi0JMHgwNDAxZjdmZCwgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywKLQkweDQ5NDNjODU3LCAweDQ5M2ZjODU3LCAweDRkMzQwMDAwLCAweDRkNDQwMDAwLAotCTB4NGM1ODAwMDAsIDB4NGQyYzAwMDAsIDB4NGM1YzAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjlmMSwKLQkweDAyMDFmODAwLCAweDAwMTA2YWFjLCAweDAyMDFmODAwLCAweDAwMTA2NzM3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDg0OGEsIDB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsCi0JMHgwMDEwNmM0YiwgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwgMHg0MTdhODgwMCwKLQkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDFmLCAweDhkM2U3ZDE0LAotCTB4MDQwMDAwMDUsIDB4NTkzNDAyMTIsIDB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsCi0JMHgwNDAwMDAxOSwgMHg4ZDNlN2QwNiwgMHgwNDAwMDAwNCwgMHg1OTM0MDIwMCwKLQkweDhjMDAwNTBlLCAweDA0MDIwMDE0LCAweDhkM2U3ZDE4LCAweDA0MDAwMDBmLAotCTB4NTkzNGI4MGYsIDB4ODA1Y2I5YzAsIDB4MDQwMDAwMDksIDB4NDk0MjVhMDYsCi0JMHg1OTJjYjgwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJjZSwgMHg4MDVjYjljMCwKLQkweDA0MDIwN2ZiLCAweDQ5N2E2ODBmLCAweDQ5N2E2ODEwLCAweDRhMDI2YzAwLAotCTB4MDAwMDA3MDcsIDB4MDQwMWYwMDQsIDB4NDkzN2M4NTcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDJiNCwgMHg4MTQ2ODgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdkZCwKLQkweDhkM2U3ZDAyLCAweDA0MDAwMDExLCAweDQ5N2I1MDFkLCAweDQyMDI4ODAwLAotCTB4MDAwMDA3ZjAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDI0NSwgMHgwNDAyMDAwNiwgMHg0OTM3Yzg1NywgMHg0YTAyNmMwMCwKLQkweDAwMDAwNzA3LCAweDAyMDFmODAwLCAweDAwMTA0MmI0LCAweDgxNDY4ODAwLAotCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZjYsIDB4NWMwMGI4MDAsIDB4NWMwMjU4MDAsCi0JMHg1YzAwYjAwMCwgMHg1YzAyODgwMCwgMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwKLQkweDVjMDAwMDAwLCAweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDQ5MzNjODU3LAotCTB4NDkzZmM4NTcsIDB4NGQzNDAwMDAsIDB4NGQ0MDAwMDAsIDB4NGQ0NDAwMDAsCi0JMHg0ZDJjMDAwMCwgMHg0YzVjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwKLQkweDRkZjAwMDAwLCAweDU5MzI2ODA5LCAweDgxMzY2OWMwLCAweDA0MDAwMDIwLAotCTB4NTkzNjhjMDMsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmE1MCwgMHgwMjAxZjgwMCwgMHgwMDEwNmFiNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2N2ZkLCAweDAyMDFmODAwLCAweDAwMTBhMmZmLCAweDQ5MzdjODU3LAotCTB4OGQzZTdkMTgsIDB4MDQwMDAwMTAsIDB4NTkzNGI4MGYsIDB4ODA1Y2I5YzAsCi0JMHgwNDAwMDAwYSwgMHg0MDVlNTgwMCwgMHg0OTQyNWEwNiwgMHg1OTJjYjgwMCwKLQkweDAyMDFmODAwLCAweDAwMDIwMmNlLCAweDgwNWNiOWMwLCAweDA0MDIwN2ZhLAotCTB4NDk3YTY4MGYsIDB4NDk3YTY4MTAsIDB4NGEwMjZjMDAsIDB4MDAwMDA3MDcsCi0JMHgwNDAxZjAwMywgMHgwMjAxZjgwMCwgMHgwMDEwNDJiNCwgMHg1YzAzZTAwMCwKLQkweDAyMDAwODAwLCAweDAwMTA2YzRiLCAweDVjMDBiODAwLCAweDVjMDI1ODAwLAotCTB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsIDB4NWMwMjY4MDAsIDB4MWMwMWYwMDAsCi0JMHg0OTMzYzg1NywgMHg1OWE4MDAyNiwgMHg4YzAwMDUwOCwgMHgwNDAyMDAxMiwKLQkweDU5MzA1MDA5LCAweDQ4MmJjODU3LCAweDgzNmMwNTgwLCAweDAwMDAwMDAyLAotCTB4MDQwMjAwMGQsIDB4MDQwMWY4MTMsIDB4MDQwMjAwMGIsIDB4NTgyODA0MDMsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDdmYywgMHgwNDAwMDAwOCwgMHg1OWE4MDAxYiwKLQkweDgwMDAwMDQwLCAweDQ4MDNjODU3LCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LAotCTB4NDgwMzUwMWIsIDB4MWMwMWYwMDAsIDB4NTlhODAwMjgsIDB4ODAwMDAwNDAsCi0JMHg0ODAzYzg1NywgMHgwNDAwMTdmYywgMHg0ODAzNTAyOCwgMHgxYzAxZjAwMCwKLQkweDU5MzAwMDA4LCAweDgwMDAwMWMwLCAweDA0MDIwMDA5LCAweDU5MzAwNDAzLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMDQsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKLQkweDQ5MzdjODU3LCAweDU5MzQwMjAwLCAweDg0MDAwNTAyLCAweDQ4MDI2YTAwLAotCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NDkzZmM4NTcsIDB4NDk0N2M4NTcsCi0JMHg0ZDNjMDAwMCwgMHg0ZDQwMDAwMCwgMHg0ZDM0MDAwMCwgMHg0ZDQ0MDAwMCwKLQkweDRjNTgwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDRkZjAwMDAwLAotCTB4ODEzZTc5YzAsIDB4MDQwMjAwMDQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsCi0JMHgwNDAxZjAwNCwgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwgMHg0MTdhODgwMCwKLQkweDQxNDQwMDAwLCAweDgxYWMwNDAwLCAweDUwMDAwMDAwLCAweDgwMDI2ZDQwLAotCTB4MDQwMDAwMTksIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDhmNiwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHg0MTdhNzgwMCwKLQkweDAyMDFmODAwLCAweDAwMTA2YTUwLCAweDAyMDFmODAwLCAweDAwMTA2YWI0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDY3ZmQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsCi0JMHgwNDAyMDAwNSwgMHg0OTM3Yzg1NywgMHg0YTAyNmMwMCwgMHgwMDAwMDQwNCwKLQkweDA0MDFmMDAzLCAweDAyMDFmODAwLCAweDAwMTA0YTE0LCAweDAyMDFmODAwLAotCTB4MDAxMGEyZmYsIDB4ODE0Njg4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZTEsCi0JMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHg1YzAwYjAwMCwKLQkweDVjMDI4ODAwLCAweDVjMDI2ODAwLCAweDVjMDI4MDAwLCAweDVjMDI3ODAwLAotCTB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4NDk0N2M4NTcsIDB4NGM1YzAwMDAsCi0JMHg0YzYwMDAwMCwgMHg0YzY0MDAwMCwgMHg1OWE4MDAxMywgMHg4YzAwMDUwMCwKLQkweDA0MDAwMDFmLCAweDU5OWMwMDE3LCAweDhjMDAwNTBhLCAweDA0MDIwMDFjLAotCTB4NTkzNGJhMDIsIDB4ODI1Y2JkMDAsIDB4MDAwMDAwZmYsIDB4NDg1ZmM4NTcsCi0JMHg0MTc4YzAwMCwgMHg0MTc4YzgwMCwgMHg4MjYwMDQwMCwgMHgwMDEwYmUyMSwKLQkweDUwMDAyMDAwLCAweDgwNjBjMWMwLCAweDA0MDAwMDA4LCAweDgyMTAwNTAwLAotCTB4MDAwMDAwZmYsIDB4ODIwMDJkODAsIDB4MDAwMDAwZmYsIDB4MDQwMDAwMGMsCi0JMHg4MDVjMDU4MCwgMHgwNDAwMDAwZCwgMHg4MDEwMjExMCwgMHg4MDY0YzgwMCwKLQkweDgyNjQwNTgwLCAweDAwMDAwMDA0LCAweDA0MDIwN2Y1LCAweDgwNjBjMDAwLAotCTB4ODI2MDA1ODAsIDB4MDAwMDAwMjAsIDB4MDQwMjA3ZWIsIDB4NDgxM2M4NTcsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAwYzgwMCwgMHg1YzAwYzAwMCwKLQkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDI2LCAweDQ4MDNjODU3LAotCTB4OGMwMDA1MTIsIDB4MWMwMWYwMDAsIDB4MDAwMDdlZWYsIDB4MDAwMDdkZTgsCi0JMHgwMDAwN2NlNCwgMHgwMDAwODBlMiwgMHgwMDAwN2JlMSwgMHgwMDAwODBlMCwKLQkweDAwMDA4MGRjLCAweDAwMDA4MGRhLCAweDAwMDA3YWQ5LCAweDAwMDA4MGQ2LAotCTB4MDAwMDgwZDUsIDB4MDAwMDgwZDQsIDB4MDAwMDgwZDMsIDB4MDAwMDgwZDIsCi0JMHgwMDAwODBkMSwgMHgwMDAwNzljZSwgMHgwMDAwNzhjZCwgMHgwMDAwODBjYywKLQkweDAwMDA4MGNiLCAweDAwMDA4MGNhLCAweDAwMDA4MGM5LCAweDAwMDA4MGM3LAotCTB4MDAwMDgwYzYsIDB4MDAwMDc3YzUsIDB4MDAwMDc2YzMsIDB4MDAwMDgwYmMsCi0JMHgwMDAwODBiYSwgMHgwMDAwNzViOSwgMHgwMDAwODBiNiwgMHgwMDAwNzRiNSwKLQkweDAwMDA3M2I0LCAweDAwMDA3MmIzLCAweDAwMDA4MGIyLCAweDAwMDA4MGIxLAotCTB4MDAwMDgwYWUsIDB4MDAwMDcxYWQsIDB4MDAwMDgwYWMsIDB4MDAwMDcwYWIsCi0JMHgwMDAwNmZhYSwgMHgwMDAwNmVhOSwgMHgwMDAwODBhNywgMHgwMDAwNmRhNiwKLQkweDAwMDA2Y2E1LCAweDAwMDA2YmEzLCAweDAwMDA2YTlmLCAweDAwMDA2OTllLAotCTB4MDAwMDY4OWQsIDB4MDAwMDgwOWIsIDB4MDAwMDgwOTgsIDB4MDAwMDY3OTcsCi0JMHgwMDAwNjY5MCwgMHgwMDAwNjU4ZiwgMHgwMDAwNjQ4OCwgMHgwMDAwNjM4NCwKLQkweDAwMDA2MjgyLCAweDAwMDA4MDgxLCAweDAwMDA4MDgwLCAweDAwMDA2MTdjLAotCTB4MDAwMDYwN2EsIDB4MDAwMDgwNzksIDB4MDAwMDVmNzYsIDB4MDAwMDgwNzUsCi0JMHgwMDAwODA3NCwgMHgwMDAwODA3MywgMHgwMDAwODA3MiwgMHgwMDAwODA3MSwKLQkweDAwMDA4MDZlLCAweDAwMDA1ZTZkLCAweDAwMDA4MDZjLCAweDAwMDA1ZDZiLAotCTB4MDAwMDVjNmEsIDB4MDAwMDViNjksIDB4MDAwMDgwNjcsIDB4MDAwMDVhNjYsCi0JMHgwMDAwNTk2NSwgMHgwMDAwNTg2MywgMHgwMDAwNTc1YywgMHgwMDAwNTY1YSwKLQkweDAwMDA1NTU5LCAweDAwMDA4MDU2LCAweDAwMDA4MDU1LCAweDAwMDA1NDU0LAotCTB4MDAwMDUzNTMsIDB4MDAwMDUyNTIsIDB4MDAwMDUxNTEsIDB4MDAwMDUwNGUsCi0JMHgwMDAwNGY0ZCwgMHgwMDAwODA0YywgMHgwMDAwODA0YiwgMHgwMDAwNGU0YSwKLQkweDAwMDA0ZDQ5LCAweDAwMDA4MDQ3LCAweDAwMDA0YzQ2LCAweDAwMDA4MDQ1LAotCTB4MDAwMDgwNDMsIDB4MDAwMDgwM2MsIDB4MDAwMDgwM2EsIDB4MDAwMDgwMzksCi0JMHgwMDAwODAzNiwgMHgwMDAwNGIzNSwgMHgwMDAwODAzNCwgMHgwMDAwNGEzMywKLQkweDAwMDA0OTMyLCAweDAwMDA0ODMxLCAweDAwMDA4MDJlLCAweDAwMDA0NzJkLAotCTB4MDAwMDQ2MmMsIDB4MDAwMDQ1MmIsIDB4MDAwMDQ0MmEsIDB4MDAwMDQzMjksCi0JMHgwMDAwNDIyNywgMHgwMDAwODAyNiwgMHgwMDAwODAyNSwgMHgwMDAwNDEyMywKLQkweDAwMDA0MDFmLCAweDAwMDAzZjFlLCAweDAwMDAzZTFkLCAweDAwMDAzZDFiLAotCTB4MDAwMDNjMTgsIDB4MDAwMDgwMTcsIDB4MDAwMDgwMTAsIDB4MDAwMDNiMGYsCi0JMHgwMDAwM2EwOCwgMHgwMDAwODAwNCwgMHgwMDAwMzkwMiwgMHgwMDAwODAwMSwKLQkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDAzODAwLCAweDAwMDAzNzAwLAotCTB4MDAwMDM2MDAsIDB4MDAwMDgwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDgwMDAsCi0JMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwMzQwMCwgMHgwMDAwODAwMCwKKwkweDAwMDAwMDE0LCAweDA0MDFmODE4LCAweDA0MDFmODIzLCAweDQwNDAwMDAwLAorCTB4NDgwM2M4NTcsIDB4ODI0MDg1ODAsIDB4MDAwMDA4MDAsIDB4MDQwMjAwMTEsCisJMHg0MjAwNTgwMCwgMHgwMDAwMDAwMSwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwKKwkweDQyMDA2ODAwLCAweDAwMDAwMDE0LCAweDA0MDFmODBiLCAweDA0MDFmODE2LAorCTB4NDA0MDAwMDAsIDB4NDgwM2M4NTcsIDB4ODI0MDg1ODAsIDB4MDAwMGZmZmYsCisJMHgwNDAyMDAwNCwgMHg0YTAzNTA2YywgMHgwMDAwMDAwMSwgMHg0ODAzYzg1NiwKKwkweDFjMDFmMDAwLCAweDQxNzg1MDAwLCAweDA0MDFmODEyLCAweDA0MDFmODM4LAorCTB4NDAzNDcwMDAsIDB4NDAzNDA4MDAsIDB4MDQwMWYwM2QsIDB4NDIwMDUwMDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjgwYiwgMHgwNDAxZjgzMSwgMHg0MDM0MDgwMCwKKwkweDA0MDFmMDM3LCAweDQyMDA1MDAwLCAweDAwMDAwMDAyLCAweDA0MDFmODA1LAorCTB4MDQwMWY4MWQsIDB4MDQwMWY4MzUsIDB4NDAwNDgwMDAsIDB4MWMwMWYwMDAsCisJMHgwNDAxZjgwOCwgMHgwNDAxZjgxNCwgMHg0MDI4MDgwMCwgMHgwNDAxZjgyNiwKKwkweDQwMmMwODAwLCAweDA0MDFmODI3LCAweDQwMzAwODAwLCAweDA0MDFmMDI1LAorCTB4NDIwMDA4MDAsIDB4MDAwMGZmZmYsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjgyOSwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwgMHgwNDAxZjgyNiwKKwkweDQyMDAwODAwLCAweDAwMDBmZmZmLCAweDQyMDAxMDAwLCAweDAwMDAwMDEwLAorCTB4MDQwMWYwMjEsIDB4NDE3ODA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDIsCisJMHgwNDAxZjAxZCwgMHgwNDAxZjkyZSwgMHg0YTAzZDAwMCwgMHgwMDA1MDAwNCwKKwkweDA0MDFmOTJiLCAweDRhMDNkMDAwLCAweDAwMDUwMDA1LCAweDA0MDFmOTI4LAorCTB4NGEwM2QwMDAsIDB4MDAwNTAwMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwZiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAyLCAweDQyMDAxMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDBhLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDUsIDB4MDQwMWYwMDcsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAxMCwgMHgwNDAxZjAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwKKwkweDA0MDFmMDFiLCAweDA0MDFmOTEyLCAweDgyMDgyYzAwLCAweDAwMTBhOTVmLAorCTB4NTAxNDI4MDAsIDB4ODIwODE1MDAsIDB4ZmZmZmZmZmYsIDB4MDQwMDAwMTMsCisJMHgwNDAxZjkwYiwgMHg4MDA4MTA0MCwgMHg4MDE0MjkwMiwgMHg0MDA0MDAwMCwKKwkweDgwMTQwNTAwLCAweDA0MDAwMDA3LCAweDRhMDNkMDAwLCAweDAwMDcwMDA2LAorCTB4MDQwMWY5MDMsIDB4NGEwM2QwMDAsIDB4MDAwNzAwMDcsIDB4MDQwMWYwMDYsCisJMHg0YTAzZDAwMCwgMHgwMDA3MDAwNCwgMHgwNDAxZjhmZCwgMHg0YTAzZDAwMCwKKwkweDAwMDcwMDA1LCAweDA0MDFmN2VjLCAweDFjMDFmMDAwLCAweDQxNzgwODAwLAorCTB4ODIwODJjMDAsIDB4MDAxMGE5NWYsIDB4NTAxNDI4MDAsIDB4ODIwODE1MDAsCisJMHhmZmZmZmZmZiwgMHgwNDAwMDAxMCwgMHgwNDAxZjhmMSwgMHg0YTAzZDAwMCwKKwkweDAwMDUwMDAxLCAweDA0MDFmOGVlLCAweDU5ZTgxODAwLCAweDgwMDgxMDQwLAorCTB4ODAxNDI5MDIsIDB4OGMwYzFkMDYsIDB4MDQwMDAwMDQsIDB4NDAxNDAwMDAsCisJMHg4MDA0MGQ0MCwgMHgwNDAxZjhlNiwgMHg0YTAzZDAwMCwgMHgwMDA3MDAwMCwKKwkweDA0MDFmN2VmLCAweDFjMDFmMDAwLCAweDQ4MGJjODU3LCAweDQ4MGI1MDZkLAorCTB4NTljNDAwMDEsIDB4ODIwMDA1MDAsIDB4ZmZmZmVmZmYsIDB4NDgwMzg4MDEsCisJMHg0MTc4MTgwMCwgMHgwNDAxZjhjNCwgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwKKwkweDAwMDAwMDFlLCAweDQyMDA2ODAwLCAweDAwMDAwMDA0LCAweDA0MDFmZjdhLAorCTB4NDIwMDY4MDAsIDB4MDAwMDAwM2MsIDB4MDQwMWZmN2QsIDB4NDE3ODU4MDAsCisJMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwgMHg0MjAwNjgwMCwgMHgwMDAwMDAwNCwKKwkweDA0MDFmZjcxLCAweDQxNzg2ODAwLCAweDA0MDFmZjc1LCAweDQxNzg1ODAwLAorCTB4NDIwMDYwMDAsIDB4MDAwMDAwMWUsIDB4NDE3ODY4MDAsIDB4MDQwMWZmNmEsCisJMHg0MjAwNjgwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZmY2ZCwgMHg0MjAwNjgwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmZjY0LCAweDQyMDA2ODAwLCAweDAwMDAwMGY1LAorCTB4MDQwMWZmNjcsIDB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsIDB4MDAwMDAwMWUsCisJMHg0MjAwNjgwMCwgMHgwMDAwMDAwNCwgMHgwNDAxZmY1YiwgMHg0MjAwNjgwMCwKKwkweDAwMDAwMDIwLCAweDA0MDFmZjVlLCAweDU5YTgxMDZkLCAweDA0MDFmODY1LAorCTB4NDIwMDE4MDAsIDB4MDAwMjAwZjUsIDB4MDQwMWY4OTcsIDB4NTlhODEwNmQsCisJMHgwNDAxZjg3OSwgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwKKwkweDQyMDA2ODAwLCAweDAwMDAwMDA0LCAweDA0MDFmZjRiLCAweDQxNzg2ODAwLAorCTB4MDQwMWZmNGYsIDB4NTljNDAwMDEsIDB4ODIwMDA1NDAsIDB4MDAwMDEwMDAsCisJMHg0ODAzODgwMSwgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwKKwkweDQyMDA2ODAwLCAweDAwMDAwMDE1LCAweDA0MDFmZjNmLCAweDA0MDFmZjRhLAorCTB4NDA0MDAwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDIsIDB4NGMwMDAwMDAsCisJMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwgMHg0MjAwNjgwMCwKKwkweDAwMDAwMDE1LCAweDA0MDFmZjM0LCAweDVjMDAwMDAwLCAweDQwMDA2ODAwLAorCTB4MDQwMWZmMzcsIDB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsIDB4MDAwMDAwMWUsCisJMHg0MjAwNjgwMCwgMHgwMDAwMDAxNSwgMHgwNDAxZmYyYiwgMHgwNDAxZmYzNiwKKwkweDQwNDAwMDAwLCAweDgyMDAwNTAwLCAweDAwMDBmZmZkLCAweDRjMDAwMDAwLAorCTB4NDE3ODU4MDAsIDB4NDIwMDYwMDAsIDB4MDAwMDAwMWUsIDB4NDIwMDY4MDAsCisJMHgwMDAwMDAxNSwgMHgwNDAxZmYyMCwgMHg1YzAwMDAwMCwgMHg0MDAwNjgwMCwKKwkweDA0MDFmZjIzLCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLAorCTB4NDIwMDY4MDAsIDB4MDAwMDAwMTQsIDB4MDQwMWZmMTcsIDB4MDQwMWZmMjIsCisJMHg0MDQwMDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDA0MCwgMHg0YzAwMDAwMCwKKwkweDQxNzg1ODAwLCAweDQyMDA2MDAwLCAweDAwMDAwMDFlLCAweDQyMDA2ODAwLAorCTB4MDAwMDAwMTQsIDB4MDQwMWZmMGMsIDB4NWMwMDAwMDAsIDB4NDAwMDY4MDAsCisJMHgwNDAxZmYwZiwgMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwKKwkweDQyMDA2ODAwLCAweDAwMDAwMDE0LCAweDA0MDFmZjAzLCAweDA0MDFmZjBlLAorCTB4NDA0MDAwMDAsIDB4ODIwMDA1MDAsIDB4MDAwMGZmYmYsIDB4NGMwMDAwMDAsCisJMHg0MTc4NTgwMCwgMHg0MjAwNjAwMCwgMHgwMDAwMDAxZSwgMHg0MjAwNjgwMCwKKwkweDAwMDAwMDE0LCAweDA0MDFmZWY4LCAweDVjMDAwMDAwLCAweDQwMDA2ODAwLAorCTB4MDQwMWZlZmIsIDB4NGEwMzg4ODYsIDB4MDAwMDIwMjAsIDB4MDQwMWYwNGMsCisJMHg0ODBiYzg1NywgMHg4MjA4MDU4MCwgMHgwMDAxMDAwMCwgMHgwNDAyMDAwNywKKwkweDgyMDQwZDQwLCAweDAwMDEwMDAwLCAweDQyMDAxODAwLCAweDAwMDAwMDAxLAorCTB4MDQwMWY4MmQsIDB4MDQwMWYwMGYsIDB4ODIwODA1ODAsIDB4MDAwMDgwMDAsCisJMHgwNDAwMDAwNywgMHg4MjA0MGQ0MCwgMHgwMDAwMDAwMCwgMHg0MjAwMTgwMCwKKwkweDAwOTAwMDAxLCAweDA0MDFmODI0LCAweDA0MDFmMDA2LCAweDgyMDQwZDQwLAorCTB4MDAwMDgwMDAsIDB4NDIwMDE4MDAsIDB4MDAxMDAwMDEsIDB4MDQwMWY4MWUsCisJMHgxYzAxZjAwMCwgMHg0ODBiYzg1NywgMHg4MjA4MDU4MCwgMHgwMDAxMDAwMCwKKwkweDA0MDIwMDA4LCAweDQyMDAxODAwLCAweDAwMDAwMGExLCAweDA0MDFmODE2LAorCTB4NDIwMDE4MDAsIDB4MDAwMDAwYzEsIDB4MDQwMWY4MTMsIDB4MDQwMWYwMTEsCisJMHg4MjA4MDU4MCwgMHgwMDAwODAwMCwgMHgwNDAwMDAwOCwgMHg0MjAwMTgwMCwKKwkweDAwMDQwMGExLCAweDA0MDFmODBjLCAweDQyMDAxODAwLCAweDAwMjAwMGMxLAorCTB4MDQwMWY4MDksIDB4MDQwMWYwMDcsIDB4NDIwMDE4MDAsIDB4MDAwNDAwYTEsCisJMHgwNDAxZjgwNSwgMHg0MjAwMTgwMCwgMHgwMDAwMDBjMSwgMHgwNDAxZjgwMiwKKwkweDFjMDFmMDAwLCAweDQ4MGZjODU3LCAweDQxNzg1ODAwLCAweDQyMDA2MDAwLAorCTB4MDAwMDAwMWUsIDB4NDE3ODY4MDAsIDB4MDQwMWZlYjcsIDB4NDAwYzY4MDAsCisJMHg4MDM0Njk2MCwgMHgwNDAxZmViYSwgMHg0MjAwNjgwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmZWIxLCAweDQwMGM2ODAwLCAweDA0MDFmZWI1LCAweDQyMDA2ODAwLAorCTB4MDAwMDAwMDMsIDB4MDQwMWZlYWMsIDB4MDQwMWZlYjcsIDB4NDA0MDAwMDAsCisJMHg4YzAwMDUwNCwgMHgwNDAyMDdmYywgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDY0LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLCAweDFjMDFmMDAwLAorCTB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsIDB4NDE3OGI4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDczYiwgMHgwNDAyMDBmZCwgMHg1OWE4YzAyNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZTBkLCAweDA0MDAwMDAzLCAweDhjNjBjNTA2LCAweDA0MDAwMDBlLAorCTB4OGM2MGM1MDAsIDB4MDQwMjAwMDQsIDB4OGM2MGM1MGUsIDB4MDQwMDA4ZjYsCisJMHgwNDAxZjBmMiwgMHgwNDAxZmFhZiwgMHgwNDAyMDBmMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZTBkLCAweDA0MDIwMDA0LCAweDRhMDM1MDFjLCAweDAwMDBmZmZmLAorCTB4MDQwMWYwZWEsIDB4OGM2MGM1MDQsIDB4MDQwMDAwMDQsIDB4NGEwMzUwMWMsCisJMHgwMDAwZmZmZiwgMHgwNDAxZjBlNSwgMHg1OWE4YzAxMCwgMHg4MjYwYzUwMCwKKwkweDAwMDAwMGZmLCAweDU5YTgxMDEzLCAweDhjMDgxNTAwLCAweDA0MDAwMDVkLAorCTB4OGMwODE1MDIsIDB4MDQwMjAwNWIsIDB4NTlhOGI4MWMsIDB4ODI1YzBkODAsCisJMHgwMDAwZmZmZiwgMHgwNDAyMDAwMywgMHg0MjAwYjgwMCwgMHgwMDAwMDAwMSwKKwkweDgwNWMxMTA0LCAweDgyMDg2NDAwLCAweDAwMTBiYzIwLCAweDUwMzAwODAwLAorCTB4ODI1YzA1MDAsIDB4MDAwMDAwMDMsIDB4MGMwMWYwMDEsIDB4MDAxMDFjMmMsCisJMHgwMDEwMWMyNywgMHgwMDEwMWMyYiwgMHgwMDEwMWMyOSwgMHg4MDA0MDkxMCwKKwkweDA0MDFmMDA0LCAweDgwMDQwOTMwLCAweDA0MDFmMDAyLCAweDgwMDQwOTIwLAorCTB4ODIwNDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDBkODAsIDB4MDAwMDAwZmYsCisJMHgwNDAwMDAwZiwgMHg0YzAwMDAwMCwgMHg4MjAwMDQwMCwgMHgwMDEwMWViNSwKKwkweDUwMDAwODAwLCAweDgwMDQwOTEwLCAweDgyMDQwNTgwLCAweDAwMDAwMDgwLAorCTB4NWMwMDAwMDAsIDB4MDQwMDAwMzAsIDB4ODA2MDBkODAsIDB4MDQwMDAwMmUsCisJMHg4MDAwMDU0MCwgMHgwNDAwMDAyYywgMHgwNDAxZjAwYiwgMHg1OWE4MTAwNSwKKwkweDgyMDgxNTAwLCAweDAwMDAwMDAzLCAweDA0MDIwMDJiLCAweDU5YTgxMDEzLAorCTB4ODQwODE1NDIsIDB4NDgwYjUwMTMsIDB4NGEwMzUwMWMsIDB4MDAwMGZmZmYsCisJMHgwNDAxZjAyOCwgMHg0YzAwMDAwMCwgMHg1OWE4MDA2ZiwgMHg4YzAwMDUwMiwKKwkweDQyMDAxMDAwLCAweDAwMDAwMDEwLCAweDAyMDIwODAwLCAweDAwMTA0YWRhLAorCTB4NWMwMDAwMDAsIDB4MDQwMjAwMWMsIDB4NDE3YTg4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNTliOSwgMHgwNDAyMDAxNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDQzYiwKKwkweDA0MDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA0YWNmLCAweDA0MDFmOGIxLAorCTB4MDQwMDAwMGYsIDB4MDQwMWYwMGMsIDB4NTk5YzAwMTksIDB4OGMwMDA1MGUsCisJMHgwNDAyMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNDNmYywgMHgwNDAyMDAwOCwKKwkweDAyMDFmODAwLCAweDAwMTA0YWNmLCAweDA0MDFmOWRkLCAweDA0MDFmOGJlLAorCTB4MDQwMDAwMDMsIDB4ODA1Y2I4MDAsIDB4MDQwMWY3YjIsIDB4NDg1ZjUwMWMsCisJMHgwNDAxZjA4NiwgMHg0YTAzNTAxYywgMHgwMDAwZmZmZiwgMHgwNDAxZjA4MywKKwkweDQyMDAzMDAwLCAweDAwMDAwMDdlLCAweDU5YTgwMDFjLCAweDgyMDAxNTgwLAorCTB4MDAwMGZmZmYsIDB4MDQwMjAwMDUsIDB4ODAwMDBkODAsIDB4NDAxOGIwMDAsCisJMHg0ODAzYzg1NiwgMHgwNDAxZjAwOSwgMHg4MDE4YjQ4MCwgMHgwNDAwMTAwNCwKKwkweDQwMDAwODAwLCAweDQ4MDNjODU2LCAweDA0MDFmMDA0LCAweDRhMDM1MDFjLAorCTB4MDAwMGZmZmYsIDB4MDQwMWYwNzEsIDB4NGMwNDAwMDAsIDB4NGM1ODAwMDAsCisJMHg4MjA0MDQwMCwgMHgwMDEwMWViNSwgMHg1MDAwMDAwMCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMGZmLCAweDgwNjA0NTgwLCAweDA0MDAwMDVjLCAweDAyMDFmODAwLAorCTB4MDAxMDU5YmEsIDB4MDQwMjAwNjEsIDB4NTlhODAwNmYsIDB4OGMwMDA1MDIsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwgMHgwMjAyMDgwMCwgMHgwMDEwNGFkYSwKKwkweDVjMDBiMDAwLCAweDVjMDAwODAwLCAweDA0MDIwN2Q3LCAweDRjMDQwMDAwLAorCTB4NGM1ODAwMDAsIDB4ODQ1Y2JkMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsCisJMHgwNDAwMDAwOCwgMHg1OTljMDAxOSwgMHg4YzAwMDUwZSwgMHgwNDAyMDA0NywKKwkweDAyMDFmODAwLCAweDAwMTA0NDAxLCAweDA0MDIwMDRjLCAweDA0MDFmMDAyLAorCTB4ODQ1Y2JkNDAsIDB4MDIwMWY4MDAsIDB4MDAxMDRhY2YsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDgzNiwgMHgwNDAyMDAwNywgMHg1OWE4MDAwNSwgMHg4YzAwMDUwMiwKKwkweDA0MDAwMDMzLCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDIwMDMwLAorCTB4NTlhODEwMTMsIDB4OGMwODE1MDIsIDB4MDQwMDAwMjUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDg1OCwgMHgwNDAwMDAzMSwgMHg4YzVjYmQwMCwgMHgwNDAyMDAwNCwKKwkweDAyMDFmODAwLCAweDAwMTA0NDU1LCAweDA0MDFmMDJjLCAweDA0MDFmOWM4LAorCTB4MDQwMDAwMmEsIDB4NDIwMjYwMDAsIDB4MDAxMGJiZTgsIDB4NDkzNjYwMDksCisJMHg0OTdhNjAwOCwgMHg0MTdhNzgwMCwgMHgwNDAxZjkyMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjYzLCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDAyMDFmODAwLAorCTB4MDAxMDM5M2UsIDB4MDQwMDAwMWQsIDB4NDE3ODI4MDAsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAwOCwgMHg0ZDQwMDAwMCwgMHg0ZDQ0MDAwMCwgMHg1OTM2OGMwMywKKwkweDQyMDI4MDAwLCAweDAwMDAwMDI5LCAweDAyMDFmODAwLCAweDAwMTBhMjU4LAorCTB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsIDB4MDQwMWYwMTAsIDB4NDkzN2M4NTcsCisJMHg1OTljMDAxOSwgMHg4YzAwMDUwZSwgMHgwNDAyMDAwYywgMHgwNDAxZjk2OCwKKwkweDA0MDFmODQ5LCAweDA0MDAwMDExLCAweDA0MDFmMDA4LCAweDU5YTgwMDEzLAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwMDMsIDB4MDQwMWY5YTEsIDB4MDQwMDAwMDMsCisJMHgwNDAxZjgyOCwgMHgwNDAwMDAwOSwgMHg1YzAwYjAwMCwgMHg1YzAwMDgwMCwKKwkweDgwMDQwODAwLCAweDgwNThiMDQwLCAweDA0MDIwNzk4LCAweDRhMDM1MDFjLAorCTB4MDAwMGZmZmYsIDB4MDQwMWYwMDUsIDB4NDkzN2M4NTcsIDB4NWMwMGIwMDAsCisJMHg1YzAwMDgwMCwgMHg0ODA3NTAxYywgMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRhMDM1MDFjLCAweDAwMDAwMDAxLAorCTB4NDIwMjg4MDAsIDB4MDAwMDA3ZmUsIDB4NDIwMDMwMDAsIDB4MDBmZmZmZmUsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDNmYywgMHgwNDAyMDAwYywgMHgwNDAxZjk0NCwKKwkweDA0MDFmODI1LCAweDA0MDAwMDA5LCAweDU5YTgwMDI2LCAweDg0MDAwNTRlLAorCTB4NDgwMzUwMjYsIDB4MDIwMWY4MDAsIDB4MDAxMDkwZDUsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg4MDAwMDU4MCwgMHgwNDAxZjdmZSwKKwkweDQ5MzdjODU3LCAweDAyMDFmODAwLCAweDAwMTA3NmM5LCAweDA0MDAwMDE1LAorCTB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NDE3YTc4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDNiZCwgMHg1OWE4MDAxYiwgMHg4MDAwMDAwMCwKKwkweDQ4MDM1MDFiLCAweDQyMDI3MDAwLCAweDAwMDAwMDA0LCAweDU5OWMwMDE5LAorCTB4OGMwMDA1MGUsIDB4MDQwMDAwMDMsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDQ5MzdjODU3LCAweDAyMDFmODAwLCAweDAwMTA3NmM5LAorCTB4MDQwMDAwMWMsIDB4NDkzNjYwMDksIDB4NTkzNDA0MDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDdmZSwgMHgwNDAwMDAwNSwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKKwkweDA0MDFmOGIyLCAweDVjMDI3ODAwLCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAorCTB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYmQsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHg1OWE4MDAxYiwKKwkweDgwMDAwMDAwLCAweDQ4MDM1MDFiLCAweDQyMDI3MDAwLCAweDAwMDAwMDAyLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0MjAyODgwMCwgMHgwMDAwMDdmYywKKwkweDQyMDAzMDAwLCAweDAwZmZmZmZjLCAweDAyMDFmODAwLCAweDAwMTA0M2ZjLAorCTB4MDQwMjAwMDUsIDB4MDQwMWY4MDUsIDB4MDQwMDAwMDMsIDB4NGEwMzUwMjcsCisJMHgwMDAwZmZmZiwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA3NmM5LCAweDA0MDAwMDE0LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDEsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYmQsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywKKwkweDU5YTgwMDI4LCAweDgwMDAwMDAwLCAweDQ4MDM1MDI4LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ODBiYzg1NywgMHg0OTJmYzg1NywKKwkweDRjNWMwMDAwLCAweDQwMDhiODAwLCAweDQyMDI4ODAwLCAweDAwMDAwN2ZkLAorCTB4NDIwMDMwMDAsIDB4MDBmZmZmZmQsIDB4MDIwMWY4MDAsIDB4MDAxMDQzZmMsCisJMHgwNDAyMDAxYSwgMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwNDAwMDAxNywKKwkweDQ5MzY2MDA5LCAweDU5MzQwMDBhLCAweDg0MDAwNTQ0LCAweDQ4MDI2ODBhLAorCTB4ODEyZTU5YzAsIDB4MDQwMDAwMDUsIDB4NTkyYzA0MDQsIDB4OGMwMDA1MWUsCisJMHgwNDAwMDAwMiwgMHg0OGVlNjAyMSwgMHg0OTJlNjAwOCwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAxLCAweDQ4NWU2MDFjLCAweDQyMDI3MDAwLCAweDAwMDAwMDIyLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg4MDAwMDU4MCwgMHgwNDAxZjdmZCwKKwkweDVjMDAwMDAwLCAweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDQ5NDNjODU3LAorCTB4NDkzZmM4NTcsIDB4NGQzNDAwMDAsIDB4NGQ0NDAwMDAsIDB4NGM1ODAwMDAsCisJMHg0ZDJjMDAwMCwgMHg0YzVjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywKKwkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2NzNhLCAweDAyMDFmODAwLAorCTB4MDAxMDY3ZWUsIDB4MDIwMWY4MDAsIDB4MDAxMDY0N2YsIDB4MDIwMWY4MDAsCisJMHgwMDEwODIyYiwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwKKwkweDQyMDBiMDAwLCAweDAwMDAwN2YwLCAweDQxN2E4ODAwLCAweDAyMDFmODAwLAorCTB4MDAwMjAyNjcsIDB4MDQwMjAwMWEsIDB4OGQzZTdkMDYsIDB4MDQwMDAwMDQsCisJMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHgwNDAyMDAxNSwgMHg4ZDNlN2QxOCwKKwkweDA0MDAwMDEwLCAweDU5MzRiODBmLCAweDgwNWNiOWMwLCAweDA0MDAwMDA5LAorCTB4NDk0MjVhMDYsIDB4NTkyY2I4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsCisJMHg4MDVjYjljMCwgMHgwNDAyMDdmYiwgMHg0OTdhNjgwZiwgMHg0OTdhNjgxMCwKKwkweDQ5MzdjODU3LCAweDRhMDI2YzAwLCAweDAwMDAwNzA3LCAweDA0MDFmMDA0LAorCTB4NDkzN2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQwZTQsIDB4ODE0Njg4MDAsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdlMiwgMHg4ZDNlN2QwMiwgMHgwNDAwMDAxMSwKKwkweDQ5N2I1MDFkLCAweDQyMDI4ODAwLCAweDAwMDAwN2YwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMTAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDQwMjAwMDYsCisJMHg0OTM3Yzg1NywgMHg0YTAyNmMwMCwgMHgwMDAwMDcwNywgMHgwMjAxZjgwMCwKKwkweDAwMTA0MGU0LCAweDgxNDY4ODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2Y2LAorCTB4NWMwMGI4MDAsIDB4NWMwMjU4MDAsIDB4NWMwMGIwMDAsIDB4NWMwMjg4MDAsCisJMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwKKwkweDQ4MDNjODU3LCAweDQ5MzNjODU3LCAweDQ5M2ZjODU3LCAweDRkMzQwMDAwLAorCTB4NGQ0MDAwMDAsIDB4NGQ0NDAwMDAsIDB4NGQyYzAwMDAsIDB4NGM1YzAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywgMHg0ZGYwMDAwMCwgMHg1OTMyNjgwOSwKKwkweDgxMzY2OWMwLCAweDA0MDAwMDIxLCAweDU5MzY4YzAzLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDY3OWIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjdmNiwgMHgwMjAxZjgwMCwgMHgwMDEwNjU0MywgMHgwMjAxZjgwMCwKKwkweDAwMTBhMGRhLCAweDQ5MzdjODU3LCAweDhkM2U3ZDE4LCAweDA0MDAwMDExLAorCTB4NTkzNGI4MGYsIDB4ODA1Y2I5YzAsIDB4MDQwMDAwMGEsIDB4NDA1ZTU4MDAsCisJMHg0OTQyNWEwNiwgMHg1OTJjYjgwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwKKwkweDgwNWNiOWMwLCAweDA0MDIwN2ZhLCAweDQ5N2E2ODBmLCAweDQ5N2E2ODEwLAorCTB4NDkzN2M4NTcsIDB4NGEwMjZjMDAsIDB4MDAwMDA3MDcsIDB4MDQwMWYwMDMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDBlNCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwKKwkweDAwMTA2OTgyLCAweDVjMDBiODAwLCAweDVjMDI1ODAwLCAweDVjMDI4ODAwLAorCTB4NWMwMjgwMDAsIDB4NWMwMjY4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg1OWE4MDAyNiwgMHg4YzAwMDUwOCwgMHgwNDAyMDAxMiwgMHg1OTMwNTAwOSwKKwkweDQ4MmJjODU3LCAweDgzNmMwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDBkLAorCTB4MDQwMWY4MTMsIDB4MDQwMjAwMGIsIDB4NTgyODA0MDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDdmYywgMHgwNDAwMDAwOCwgMHg1OWE4MDAxYiwgMHg4MDAwMDA0MCwKKwkweDQ4MDNjODU3LCAweDAyMDAxODAwLCAweDAwMTAwNjE1LCAweDQ4MDM1MDFiLAorCTB4MWMwMWYwMDAsIDB4NTlhODAwMjgsIDB4ODAwMDAwNDAsIDB4NDgwM2M4NTcsCisJMHgwNDAwMTdmYywgMHg0ODAzNTAyOCwgMHgxYzAxZjAwMCwgMHg1OTMwMDAwOCwKKwkweDgwMDAwMWMwLCAweDA0MDIwMDA5LCAweDU5MzAwNDAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDEsIDB4MDQwMjAwMDQsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAwMiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywKKwkweDU5MzQwMjAwLCAweDg0MDAwNTAyLCAweDQ4MDI2YTAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NDkzZmM4NTcsIDB4NDk0N2M4NTcsIDB4NGQ0MDAwMDAsCisJMHg0ZDM0MDAwMCwgMHg0ZDQ0MDAwMCwgMHg0YzU4MDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2OThjLCAweDRkZjAwMDAwLCAweDgwNjBjMWMwLCAweDA0MDIwMDA0LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDQsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDdmMCwgMHg0MTdhODgwMCwgMHg0MTQ0MDAwMCwgMHg4MWFjMDQwMCwKKwkweDUwMDAwMDAwLCAweDgwMDI2ZDQwLCAweDA0MDAwMDFhLCAweDRkM2MwMDAwLAorCTB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDQ3NDUsCisJMHg1YzAyNzgwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2NzliLCAweDAyMDFmODAwLCAweDAwMTA2N2Y2LCAweDAyMDFmODAwLAorCTB4MDAxMDY1NDMsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4MzYsIDB4MDQwMjAwMDUsCisJMHg0OTM3Yzg1NywgMHg0YTAyNmMwMCwgMHgwMDAwMDQwNCwgMHgwNDAxZjAwMywKKwkweDAyMDFmODAwLCAweDAwMTA0ODYzLCAweDAyMDFmODAwLCAweDAwMTBhMGRhLAorCTB4ODE0Njg4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZTAsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHg1YzAwYjAwMCwgMHg1YzAyODgwMCwKKwkweDVjMDI2ODAwLCAweDVjMDI4MDAwLCAweDFjMDFmMDAwLCAweDQ5MzdjODU3LAorCTB4NDk0N2M4NTcsIDB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsIDB4NGM2NDAwMDAsCisJMHg1OWE4MDAxMywgMHg4YzAwMDUwMCwgMHgwNDAwMDAxZiwgMHg1OTljMDAxNywKKwkweDhjMDAwNTBhLCAweDA0MDIwMDFjLCAweDU5MzRiYTAyLCAweDgyNWNiZDAwLAorCTB4MDAwMDAwZmYsIDB4NDg1ZmM4NTcsIDB4NDE3OGMwMDAsIDB4NDE3OGM4MDAsCisJMHg4MjYwMDQwMCwgMHgwMDEwYmMyMCwgMHg1MDAwMjAwMCwgMHg4MDYwYzFjMCwKKwkweDA0MDAwMDA4LCAweDgyMTAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAyZDgwLAorCTB4MDAwMDAwZmYsIDB4MDQwMDAwMGMsIDB4ODA1YzA1ODAsIDB4MDQwMDAwMGQsCisJMHg4MDEwMjExMCwgMHg4MDY0YzgwMCwgMHg4MjY0MDU4MCwgMHgwMDAwMDAwNCwKKwkweDA0MDIwN2Y1LCAweDgwNjBjMDAwLCAweDgyNjAwNTgwLCAweDAwMDAwMDIwLAorCTB4MDQwMjA3ZWIsIDB4NDgxM2M4NTcsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg1YzAwYzgwMCwgMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwKKwkweDU5YTgwMDI2LCAweDhjMDAwNTEyLCAweDAyMDIwODAwLCAweDAwMTAwNmJhLAorCTB4MWMwMWYwMDAsIDB4MDAwMDdlZWYsIDB4MDAwMDdkZTgsIDB4MDAwMDdjZTQsCisJMHgwMDAwODBlMiwgMHgwMDAwN2JlMSwgMHgwMDAwODBlMCwgMHgwMDAwODBkYywKKwkweDAwMDA4MGRhLCAweDAwMDA3YWQ5LCAweDAwMDA4MGQ2LCAweDAwMDA4MGQ1LAorCTB4MDAwMDgwZDQsIDB4MDAwMDgwZDMsIDB4MDAwMDgwZDIsIDB4MDAwMDgwZDEsCisJMHgwMDAwNzljZSwgMHgwMDAwNzhjZCwgMHgwMDAwODBjYywgMHgwMDAwODBjYiwKKwkweDAwMDA4MGNhLCAweDAwMDA4MGM5LCAweDAwMDA4MGM3LCAweDAwMDA4MGM2LAorCTB4MDAwMDc3YzUsIDB4MDAwMDc2YzMsIDB4MDAwMDgwYmMsIDB4MDAwMDgwYmEsCisJMHgwMDAwNzViOSwgMHgwMDAwODBiNiwgMHgwMDAwNzRiNSwgMHgwMDAwNzNiNCwKKwkweDAwMDA3MmIzLCAweDAwMDA4MGIyLCAweDAwMDA4MGIxLCAweDAwMDA4MGFlLAorCTB4MDAwMDcxYWQsIDB4MDAwMDgwYWMsIDB4MDAwMDcwYWIsIDB4MDAwMDZmYWEsCisJMHgwMDAwNmVhOSwgMHgwMDAwODBhNywgMHgwMDAwNmRhNiwgMHgwMDAwNmNhNSwKKwkweDAwMDA2YmEzLCAweDAwMDA2YTlmLCAweDAwMDA2OTllLCAweDAwMDA2ODlkLAorCTB4MDAwMDgwOWIsIDB4MDAwMDgwOTgsIDB4MDAwMDY3OTcsIDB4MDAwMDY2OTAsCisJMHgwMDAwNjU4ZiwgMHgwMDAwNjQ4OCwgMHgwMDAwNjM4NCwgMHgwMDAwNjI4MiwKKwkweDAwMDA4MDgxLCAweDAwMDA4MDgwLCAweDAwMDA2MTdjLCAweDAwMDA2MDdhLAorCTB4MDAwMDgwNzksIDB4MDAwMDVmNzYsIDB4MDAwMDgwNzUsIDB4MDAwMDgwNzQsCisJMHgwMDAwODA3MywgMHgwMDAwODA3MiwgMHgwMDAwODA3MSwgMHgwMDAwODA2ZSwKKwkweDAwMDA1ZTZkLCAweDAwMDA4MDZjLCAweDAwMDA1ZDZiLCAweDAwMDA1YzZhLAorCTB4MDAwMDViNjksIDB4MDAwMDgwNjcsIDB4MDAwMDVhNjYsIDB4MDAwMDU5NjUsCisJMHgwMDAwNTg2MywgMHgwMDAwNTc1YywgMHgwMDAwNTY1YSwgMHgwMDAwNTU1OSwKKwkweDAwMDA4MDU2LCAweDAwMDA4MDU1LCAweDAwMDA1NDU0LCAweDAwMDA1MzUzLAorCTB4MDAwMDUyNTIsIDB4MDAwMDUxNTEsIDB4MDAwMDUwNGUsIDB4MDAwMDRmNGQsCisJMHgwMDAwODA0YywgMHgwMDAwODA0YiwgMHgwMDAwNGU0YSwgMHgwMDAwNGQ0OSwKKwkweDAwMDA4MDQ3LCAweDAwMDA0YzQ2LCAweDAwMDA4MDQ1LCAweDAwMDA4MDQzLAorCTB4MDAwMDgwM2MsIDB4MDAwMDgwM2EsIDB4MDAwMDgwMzksIDB4MDAwMDgwMzYsCisJMHgwMDAwNGIzNSwgMHgwMDAwODAzNCwgMHgwMDAwNGEzMywgMHgwMDAwNDkzMiwKKwkweDAwMDA0ODMxLCAweDAwMDA4MDJlLCAweDAwMDA0NzJkLCAweDAwMDA0NjJjLAorCTB4MDAwMDQ1MmIsIDB4MDAwMDQ0MmEsIDB4MDAwMDQzMjksIDB4MDAwMDQyMjcsCisJMHgwMDAwODAyNiwgMHgwMDAwODAyNSwgMHgwMDAwNDEyMywgMHgwMDAwNDAxZiwKKwkweDAwMDAzZjFlLCAweDAwMDAzZTFkLCAweDAwMDAzZDFiLCAweDAwMDAzYzE4LAorCTB4MDAwMDgwMTcsIDB4MDAwMDgwMTAsIDB4MDAwMDNiMGYsIDB4MDAwMDNhMDgsCisJMHgwMDAwODAwNCwgMHgwMDAwMzkwMiwgMHgwMDAwODAwMSwgMHgwMDAwODAwMCwKKwkweDAwMDA4MDAwLCAweDAwMDAzODAwLCAweDAwMDAzNzAwLCAweDAwMDAzNjAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwMzQwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKIAkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAotCTB4MDAwMDgwMDAsIDB4MDAwMDMzMDAsIDB4MDAwMDMyMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwMzMwMCwgMHgwMDAwMzIwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKIAkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAotCTB4MDAwMDgwMDAsIDB4MDAwMDMxMDAsIDB4MDAwMDMwMDAsIDB4MDAwMDgwMDAsCi0JMHgwMDAwODAwMCwgMHgwMDAwMmYwMCwgMHgwMDAwODAwMCwgMHgwMDAwMmUwMCwKLQkweDAwMDAyZDAwLCAweDAwMDAyYzAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAotCTB4MDAwMDgwMDAsIDB4MDAwMDJiMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDJhMDAsCi0JMHgwMDAwMjkwMCwgMHgwMDAwMjgwMCwgMHgwMDAwODAwMCwgMHgwMDAwMjcwMCwKLQkweDAwMDAyNjAwLCAweDAwMDAyNTAwLCAweDAwMDAyNDAwLCAweDAwMDAyMzAwLAotCTB4MDAwMDIyMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDIxMDAsCi0JMHgwMDAwMjAwMCwgMHgwMDAwMWYwMCwgMHgwMDAwMWUwMCwgMHgwMDAwMWQwMCwKLQkweDAwMDAxYzAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDAxYjAwLAotCTB4MDAwMDFhMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDE5MDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwMzEwMCwgMHgwMDAwMzAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKKwkweDAwMDAyZjAwLCAweDAwMDA4MDAwLCAweDAwMDAyZTAwLCAweDAwMDAyZDAwLAorCTB4MDAwMDJjMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwMmIwMCwgMHgwMDAwODAwMCwgMHgwMDAwMmEwMCwgMHgwMDAwMjkwMCwKKwkweDAwMDAyODAwLCAweDAwMDA4MDAwLCAweDAwMDAyNzAwLCAweDAwMDAyNjAwLAorCTB4MDAwMDI1MDAsIDB4MDAwMDI0MDAsIDB4MDAwMDIzMDAsIDB4MDAwMDIyMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwMjEwMCwgMHgwMDAwMjAwMCwKKwkweDAwMDAxZjAwLCAweDAwMDAxZTAwLCAweDAwMDAxZDAwLCAweDAwMDAxYzAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDFiMDAsIDB4MDAwMDFhMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwMTkwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKIAkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAotCTB4MDAwMDgwMDAsIDB4MDAwMDE4MDAsIDB4MDAwMDgwMDAsIDB4MDAwMDE3MDAsCi0JMHgwMDAwMTYwMCwgMHgwMDAwMTUwMCwgMHgwMDAwODAwMCwgMHgwMDAwMTQwMCwKLQkweDAwMDAxMzAwLCAweDAwMDAxMjAwLCAweDAwMDAxMTAwLCAweDAwMDAxMDAwLAotCTB4MDAwMDBmMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDBlMDAsCi0JMHgwMDAwMGQwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGIwMCwgMHgwMDAwMGEwMCwKLQkweDAwMDAwOTAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDAwODAwLAotCTB4MDAwMDA3MDAsIDB4MDAwMDgwMDAsIDB4MDAwMDA2MDAsIDB4MDAwMDgwMDAsCi0JMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwMDUwMCwgMHgwMDAwMDQwMCwKLQkweDAwMDAwMzAwLCAweDAwMDA4MDAwLCAweDAwMDAwMjAwLCAweDAwMDA4MDAwLAotCTB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwMTgwMCwgMHgwMDAwODAwMCwgMHgwMDAwMTcwMCwgMHgwMDAwMTYwMCwKKwkweDAwMDAxNTAwLCAweDAwMDA4MDAwLCAweDAwMDAxNDAwLCAweDAwMDAxMzAwLAorCTB4MDAwMDEyMDAsIDB4MDAwMDExMDAsIDB4MDAwMDEwMDAsIDB4MDAwMDBmMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGQwMCwKKwkweDAwMDAwYzAwLCAweDAwMDAwYjAwLCAweDAwMDAwYTAwLCAweDAwMDAwOTAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA3MDAsCisJMHgwMDAwODAwMCwgMHgwMDAwMDYwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKKwkweDAwMDA4MDAwLCAweDAwMDAwNTAwLCAweDAwMDAwNDAwLCAweDAwMDAwMzAwLAorCTB4MDAwMDgwMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwODAwMCwgMHgwMDAwMDEwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKIAkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAotCTB4MDAwMDgwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKIAkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAwMDA4MDAwLAogCTB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDgwMDAsCiAJMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwgMHgwMDAwODAwMCwKLQkweDAwMDA4MDAwLCAweDAwMDA4MDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2QzLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NDkyZjQwMTYsIDB4MWMwMWYwMDAsCi0JMHg4M2EwYWMwMCwgMHgwMDAwMDAwNiwgMHg4M2EwMDU4MCwgMHgwMDEwYjRhNCwKLQkweDA0MDAwMDBjLCAweDQ5MmZjODU3LCAweDgxMmU1OWMwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4ODMyY2E0MDAsIDB4MDAwMDAwMDYsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwZCwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHgwNDAxZjAwZiwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDEwLCAweDgzZTBhNDAwLCAweDAwMDAwMDIwLAotCTB4NTA1MDAwMDAsIDB4ODA1MGEwMDAsIDB4NTA1MDA4MDAsIDB4OTAwNDA5YzAsCi0JMHg4MDA0MDU0MCwgMHg0NDAwYTgwMCwgMHg4MDUwYTAwMCwgMHg4MDU0YTgwMCwKLQkweDgwNThiMDQwLCAweDA0MDIwN2Y3LCAweDFjMDFmMDAwLCAweDU5YTAwMjA2LAotCTB4NDgwM2M4NTcsIDB4ODIwMDBjODAsIDB4MDAwMDAwN2YsIDB4MDQwMjEwYzksCi0JMHg1OWE4MDgyMSwgMHgwYzAxZjAwMSwgMHgwMDEwMjJjMCwgMHgwMDEwMjMwMCwKLQkweDAwMTAyMzAwLCAweDAwMTAyMzRiLCAweDAwMTAyMzZkLCAweDAwMTAyMzAwLAotCTB4MDAxMDIyYzAsIDB4MDAxMDIzOGYsIDB4MDAxMDIzYTAsIDB4MDAxMDIzMDAsCi0JMHgwMDEwMjMwMCwgMHgwMDEwMjNhZCwgMHgwMDEwMjNjNSwgMHgwMDEwMjNkZCwKLQkweDAwMTAyMzAwLCAweDAwMTAyM2U3LCAweDAwMTAyM2Y0LCAweDAwMTAyMzAwLAotCTB4MDAxMDI0MWQsIDB4MDAxMDIzMDAsIDB4MDAxMDI0N2EsIDB4MDAxMDIzMDAsCi0JMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwKLQkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLAotCTB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDI0OTEsIDB4MDAxMDIzMDAsCi0JMHgwMDEwMjRlMywgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwKLQkweDAwMTAyMzAwLCAweDAwMTAyNGU4LCAweDAwMTAyNTYwLCAweDAwMTAyMzAwLAotCTB4MDAxMDI1NjcsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsCi0JMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjU2OSwgMHgwMDEwMjVlYSwKLQkweDAwMTAyNzI3LCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLAotCTB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDI3MzYsIDB4MDAxMDIzMDAsCi0JMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwKLQkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyNzUzLCAweDAwMTAyN2E2LAotCTB4MDAxMDI4MDIsIDB4MDAxMDI4MTYsIDB4MDAxMDI4MzUsIDB4MDAxMDJhNzAsCi0JMHgwMDEwMmRmZiwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwgMHgwMDEwMjMwMCwKLQkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAyMzAwLAotCTB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsCi0JMHgwMDEwMjMwMCwgMHgwMDEwMmZiNCwgMHgwMDEwMzAyOCwgMHgwMDEwMjMwMCwKLQkweDAwMTAyMzAwLCAweDAwMTAzMDk0LCAweDAwMTAyMzAwLCAweDAwMTAzMTI2LAotCTB4MDAxMDMxZDgsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDMyMGYsCi0JMHgwMDEwMzI2YiwgMHgwMDEwMjMwMCwgMHgwMDEwMzJiZCwgMHgwMDEwMzQxOSwKLQkweDAwMTAyMzAwLCAweDAwMTAzNDJkLCAweDAwMTAzNGI4LCAweDAwMTAyMzAwLAotCTB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDM1MjIsCi0JMHgwMDEwMzUyNiwgMHgwMDEwMzU0NSwgMHgwMDEwMjMwMCwgMHgwMDEwMzVlNywKLQkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAzNjE1LCAweDAwMTAyMzAwLAotCTB4MDAxMDM2NDMsIDB4MDAxMDIzMDAsIDB4MDAxMDIzMDAsIDB4MDAxMDM2YWEsCi0JMHgwMDEwMzdiNywgMHgwMDEwMzgxNCwgMHgwMDEwMjMwMCwgMHgwMDEwMzg3YSwKLQkweDAwMTAyMzAwLCAweDAwMTAyMzAwLCAweDAwMTAzOGQzLCAweDAwMTAzOTM2LAotCTB4MDAxMDIzMDAsIDB4NDhlZmM4NTcsIDB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsCi0JMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwgMHgwNDAwMDA0NSwKLQkweDQ4ZWZjODU3LCAweDRhMDM0MjA2LCAweDAwMDA0MDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDNhMTUsIDB4ODNhMDA1ODAsIDB4MDAxMGI0YTQsIDB4MDQwMDAwMGQsCi0JMHg1OGVlNTgwYSwgMHg0ZDJjMDAwMCwgMHgwNDAxZjg1NiwgMHg0MWEyNTgwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwN2Y0LCAweDQwZWU1ODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDA3ZjQsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsCi0JMHgwNDAyNjAwNywgMHg1OWEwMDAxZCwgMHg4NDAwMDU0MiwgMHg0ODAzNDAxZCwKLQkweDRhMDFkODA5LCAweDAwMTAyMmQ0LCAweDFjMDFmMDAwLCAweDU5YTAwMjA2LAotCTB4ODIwMDBkODAsIDB4MDAwMDQwMDAsIDB4MDQwMDAwMDYsIDB4OTAwMDAxYzAsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAxMSwgMHg0ODAzYzAxMSwgMHgwNDAxZjAwNSwKLQkweDkwMDAwMWMwLCAweDgyMDAwNTQwLCAweDAwMDAwMDEwLCAweDQ4MDNjMDExLAotCTB4MDQwMWY4NDUsIDB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMjAwMGMsCi0JMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg0MjAzZTAwMCwgMHg0MDAwMDAwMCwKLQkweDQwZWU1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwN2Y0LCAweDU5YTAwMDFkLAotCTB4ODQwMDA1MDQsIDB4NDgwMzQwMWQsIDB4MWMwMWYwMDAsIDB4NGEwM2MwMTcsCi0JMHgwMDAwMDAwMCwgMHg1OWEwMDIwNiwgMHg4MjAwMGQ4MCwgMHgwMDAwNDAwMCwKLQkweDA0MDAwN2YwLCAweDRhMDNjMDE3LCAweDAwMDAwMDAxLCAweDA0MDFmN2VkLAotCTB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsIDB4MDAwMDQwMDEsIDB4MDQwMWY3YzAsCi0JMHg0ODAzYzg1NiwgMHg0YTAzNDIwNiwgMHgwMDAwNDAwMiwgMHgwNDAxZjdiYywKLQkweDQ4MDNjODU2LCAweDRhMDM0MjA2LCAweDAwMDA0MDAzLCAweDA0MDFmN2I4LAotCTB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsIDB4MDAwMDQwMDUsIDB4MDQwMWY3YjQsCi0JMHg0ODAzYzg1NiwgMHg0YTAzNDIwNiwgMHgwMDAwNDAwNiwgMHgwNDAxZjdiMCwKLQkweDQ4MDNjODU2LCAweDRhMDM0MjA2LCAweDAwMDA0MDBiLCAweDA0MDFmN2FjLAotCTB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsIDB4MDAwMDQwMGMsIDB4MDQwMWY3YTgsCi0JMHg0ODAzYzg1NiwgMHg0YTAzNDIwNiwgMHgwMDAwNDAwYywgMHgwNDAxZjdhNCwKLQkweDQ4ZWZjODU3LCAweDU4ZWNhODBhLCAweDgwNTRhOWMwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4ODNhMGE0MDAsIDB4MDAwMDAwMDYsIDB4ODI1NGFjMDAsCi0JMHgwMDAwMDAwNiwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwZCwgMHgwMjAxZjAwMCwKLQkweDAwMTBhYjE3LCAweDU5YTAwMjA2LCAweDQ4MDNjODU3LCAweDU5YTAwNDA2LAotCTB4NDgwM2M4NTcsIDB4NTlhMDAyMDcsIDB4NDgwM2M4NTcsIDB4NTlhMDA0MDcsCi0JMHg0ODAzYzg1NywgMHg1OWEwMDIwOCwgMHg0ODAzYzg1NywgMHg1OWEwMDQwOCwKLQkweDQ4MDNjODU3LCAweDU5YTAwMjA5LCAweDQ4MDNjODU3LCAweDgzZTBhYzAwLAotCTB4MDAwMDAwMjAsIDB4ODNhMGE0MDAsIDB4MDAwMDAwMDYsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAxMCwgMHg1MDUwMDAwMCwgMHg0NDAwYTgwMCwgMHg4MDU0YTgwMCwKLQkweDkwMDAwMWMwLCAweDQ0MDBhODAwLCAweDgwNTRhODAwLCAweDgwNTBhMDAwLAotCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZjgsIDB4MWMwMWYwMDAsIDB4NTlhMDA0MDYsCi0JMHg4MDAwMDBjMiwgMHg1OWEwMGEwNywgMHg5MDA0MDljMCwgMHg4MDA0MDU0MCwKLQkweDg0MDAwNTQwLCAweDU5YTAwYzA3LCAweDhjMDQwZDAwLCAweDA0MDAwMDE4LAotCTB4NTlhODA4MDUsIDB4OGMwNDBkMGUsIDB4MDQwMjA3YmEsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDA2NCwgMHg4MDA0MDg0MCwgMHgwNDAwMDAwNywgMHg0YTAzMDAwMCwKLQkweDAwMDAwMDAxLCAweDQwMDAwMDAwLCAweDU5ODAxMDAwLCAweDhjMDgxNTAwLAotCTB4MDQwMDA3ZjksIDB4MDQwMDAwMDUsIDB4NDgwMzAwMDQsIDB4NGEwMzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwNDAxZjc1YiwgMHg0YTAzMDAwMCwgMHgwMDAwMDAwMCwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDA0LCAweDA0MDAwN2EyLCAweDQ4MDM4ODBlLAotCTB4MDQwMWY3NTQsIDB4NTlhMDA0MDYsIDB4ODAwMDAwYzIsIDB4NTlhMDBjMDcsCi0JMHg4YzA0MGQwMCwgMHgwNDAwMDAxYSwgMHg1OWE4MDgwNSwgMHg4YzA0MGQwZSwKLQkweDA0MDIwNzljLCAweDQyMDAwODAwLCAweDAwMDAwMDY0LCAweDgwMDQwODQwLAorCTB4MDAwMDgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4MTksIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg0OTJmNDAxNiwgMHgxYzAxZjAwMCwgMHg4M2EwYWMwMCwKKwkweDAwMDAwMDA2LCAweDgzYTAwNTgwLCAweDAwMTBiMmEwLCAweDA0MDAwMDBjLAorCTB4NDkyZmM4NTcsIDB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCisJMHg4MzJjYTQwMCwgMHgwMDAwMDAwNiwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwZCwKKwkweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDA0MDFmMDBmLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMTAsIDB4ODNlMGE0MDAsIDB4MDAwMDAwMjAsIDB4NTA1MDAwMDAsCisJMHg4MDUwYTAwMCwgMHg1MDUwMDgwMCwgMHg5MDA0MDljMCwgMHg4MDA0MDU0MCwKKwkweDQ0MDBhODAwLCAweDgwNTBhMDAwLCAweDgwNTRhODAwLCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZjcsIDB4MWMwMWYwMDAsIDB4NTlhMDAyMDYsIDB4ODIwMDBjODAsCisJMHgwMDAwMDA3ZiwgMHgwNDAyMTBjOSwgMHg1OWE4MDgyMSwgMHgwYzAxZjAwMSwKKwkweDAwMTAyMDY2LCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LCAweDAwMTAyMGYwLAorCTB4MDAxMDIxMTIsIDB4MDAxMDIwYTYsIDB4MDAxMDIwNjYsIDB4MDAxMDIxMzQsCisJMHgwMDEwMjE0NSwgMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwgMHgwMDEwMjE1MiwKKwkweDAwMTAyMTZhLCAweDAwMTAyMTgyLCAweDAwMTAyMGE2LCAweDAwMTAyMWIxLAorCTB4MDAxMDIxZTMsIDB4MDAxMDIwYTYsIDB4MDAxMDIyMGMsIDB4MDAxMDIwYTYsCisJMHgwMDEwMjI2OSwgMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwKKwkweDAwMTAyMGE2LCAweDAwMTAyMjgwLCAweDAwMTAyMmI5LCAweDAwMTAyMGE2LAorCTB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsCisJMHgwMDEwMjJlZSwgMHgwMDEwMjBhNiwgMHgwMDEwMjM0MCwgMHgwMDEwMjBhNiwKKwkweDAwMTAyMGE2LCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LCAweDAwMTAyMzQ1LAorCTB4MDAxMDIzYmUsIDB4MDAxMDIwYTYsIDB4MDAxMDIzYzUsIDB4MDAxMDIwYTYsCisJMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwKKwkweDAwMTAyM2M3LCAweDAwMTAyNDQ1LCAweDAwMTAyNTg1LCAweDAwMTAyMGE2LAorCTB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsCisJMHgwMDEwMjU5NCwgMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwKKwkweDAwMTAyMGE2LCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LAorCTB4MDAxMDI1YjEsIDB4MDAxMDI2MDQsIDB4MDAxMDI2NjAsIDB4MDAxMDI2NzQsCisJMHgwMDEwMjY5NiwgMHgwMDEwMjhkMSwgMHgwMDEwMmM2MCwgMHgwMDEwMjBhNiwKKwkweDAwMTAyMGE2LCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LAorCTB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsCisJMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwgMHgwMDEwMjBhNiwgMHgwMDEwMmQ5ZiwKKwkweDAwMTAyZTEzLCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LCAweDAwMTAyZTgxLAorCTB4MDAxMDIwYTYsIDB4MDAxMDJmMWYsIDB4MDAxMDJmZDEsIDB4MDAxMDIwYTYsCisJMHgwMDEwMjBhNiwgMHgwMDEwMzAwOCwgMHgwMDEwMzA2NCwgMHgwMDEwMjBhNiwKKwkweDAwMTAzMGJjLCAweDAwMTAzMjIwLCAweDAwMTAyMGE2LCAweDAwMTAzMjM0LAorCTB4MDAxMDMyYmYsIDB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsIDB4MDAxMDIwYTYsCisJMHgwMDEwMjBhNiwgMHgwMDEwMzMyZiwgMHgwMDEwMzMzMywgMHgwMDEwMzM1MiwKKwkweDAwMTAyMGE2LCAweDAwMTAzM2Y0LCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LAorCTB4MDAxMDM0MjEsIDB4MDAxMDIwYTYsIDB4MDAxMDM0NGYsIDB4MDAxMDIwYTYsCisJMHgwMDEwMjBhNiwgMHgwMDEwMzRiNiwgMHgwMDEwMzVjMywgMHgwMDEwMzYyMCwKKwkweDAwMTAyMGE2LCAweDAwMTAzNjg2LCAweDAwMTAyMGE2LCAweDAwMTAyMGE2LAorCTB4MDAxMDM2ZGIsIDB4MDAxMDM3M2UsIDB4MDAxMDIwYTYsIDB4NDhlZmM4NTcsCisJMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMjAwLCAweDA0MDAwMDQ1LCAweDQ4ZWZjODU3LCAweDRhMDM0MjA2LAorCTB4MDAwMDQwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDM4MmYsIDB4ODNhMDA1ODAsCisJMHgwMDEwYjJhMCwgMHgwNDAwMDAwZCwgMHg1OGVlNTgwYSwgMHg0ZDJjMDAwMCwKKwkweDA0MDFmODU2LCAweDQxYTI1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwODNhLAorCTB4NDBlZTU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsIDB4NWMwMjU4MDAsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDM4MSwgMHgwNDAyNjAwNywgMHg1OWEwMDAxZCwKKwkweDg0MDAwNTQyLCAweDQ4MDM0MDFkLCAweDRhMDFkODA5LCAweDAwMTAyMDdhLAorCTB4MWMwMWYwMDAsIDB4NTlhMDAyMDYsIDB4ODIwMDBkODAsIDB4MDAwMDQwMDAsCisJMHgwNDAwMDAwNiwgMHg5MDAwMDFjMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAxMSwKKwkweDQ4MDNjMDExLCAweDA0MDFmMDA1LCAweDkwMDAwMWMwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMTAsIDB4NDgwM2MwMTEsIDB4MDQwMWY4NDQsIDB4NTllMDAwMTcsCisJMHg4YzAwMDUwOCwgMHgwNDAyMDAwYywgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwKKwkweDQyMDNlMDAwLCAweDQwMDAwMDAwLCAweDQwZWU1ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA4M2EsIDB4NTlhMDAwMWQsIDB4ODQwMDA1MDQsIDB4NDgwMzQwMWQsCisJMHgxYzAxZjAwMCwgMHg0YTAzYzAxNywgMHgwMDAwMDAwMCwgMHg1OWEwMDIwNiwKKwkweDgyMDAwZDgwLCAweDAwMDA0MDAwLCAweDA0MDAwN2YwLCAweDRhMDNjMDE3LAorCTB4MDAwMDAwMDEsIDB4MDQwMWY3ZWQsIDB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsCisJMHgwMDAwNDAwMSwgMHgwNDAxZjdjMCwgMHg0ODAzYzg1NiwgMHg0YTAzNDIwNiwKKwkweDAwMDA0MDAyLCAweDA0MDFmN2JjLCAweDQ4MDNjODU2LCAweDRhMDM0MjA2LAorCTB4MDAwMDQwMDMsIDB4MDQwMWY3YjgsIDB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsCisJMHgwMDAwNDAwNSwgMHgwNDAxZjdiNCwgMHg0ODAzYzg1NiwgMHg0YTAzNDIwNiwKKwkweDAwMDA0MDA2LCAweDA0MDFmN2IwLCAweDQ4MDNjODU2LCAweDRhMDM0MjA2LAorCTB4MDAwMDQwMGIsIDB4MDQwMWY3YWMsIDB4NDgwM2M4NTYsIDB4NGEwMzQyMDYsCisJMHgwMDAwNDAwYywgMHgwNDAxZjdhOCwgMHg0ODAzYzg1NiwgMHg0YTAzNDIwNiwKKwkweDAwMDA0MDBjLCAweDA0MDFmN2E0LCAweDU4ZWNhODBhLCAweDgwNTRhOWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4ODNhMGE0MDAsIDB4MDAwMDAwMDYsCisJMHg4MjU0YWMwMCwgMHgwMDAwMDAwNiwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwZCwKKwkweDAyMDFmMDAwLCAweDAwMTBhOTNlLCAweDU5YTAwMjA2LCAweDQ4MDNjODU3LAorCTB4NTlhMDA0MDYsIDB4NDgwM2M4NTcsIDB4NTlhMDAyMDcsIDB4NDgwM2M4NTcsCisJMHg1OWEwMDQwNywgMHg0ODAzYzg1NywgMHg1OWEwMDIwOCwgMHg0ODAzYzg1NywKKwkweDU5YTAwNDA4LCAweDQ4MDNjODU3LCAweDU5YTAwMjA5LCAweDQ4MDNjODU3LAorCTB4ODNlMGFjMDAsIDB4MDAwMDAwMjAsIDB4ODNhMGE0MDAsIDB4MDAwMDAwMDYsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwgMHg1MDUwMDAwMCwgMHg0NDAwYTgwMCwKKwkweDgwNTRhODAwLCAweDkwMDAwMWMwLCAweDQ0MDBhODAwLCAweDgwNTRhODAwLAorCTB4ODA1MGEwMDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjgsIDB4MWMwMWYwMDAsCisJMHg1OWEwMDQwNiwgMHg4MDAwMDBjMiwgMHg1OWEwMGEwNywgMHg5MDA0MDljMCwKKwkweDgwMDQwNTQwLCAweDg0MDAwNTQwLCAweDU5YTAwYzA3LCAweDhjMDQwZDAwLAorCTB4MDQwMDAwMTgsIDB4NTlhODA4NmYsIDB4OGMwNDBkMDAsIDB4MDQwMjA3YmIsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDA2NCwgMHg4MDA0MDg0MCwgMHgwNDAwMDAwNywKKwkweDRhMDMwMDAwLCAweDAwMDAwMDAxLCAweDQwMDAwMDAwLCAweDU5ODAxMDAwLAorCTB4OGMwODE1MDAsIDB4MDQwMDA3ZjksIDB4MDQwMDAwMDUsIDB4NDgwMzAwMDQsCisJMHg0YTAzMDAwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjc1YywgMHg0YTAzMDAwMCwKKwkweDAwMDAwMDAwLCAweDRhMDM0NDA2LCAweDAwMDAwMDA0LCAweDA0MDAwN2EzLAorCTB4NDgwMzg4MGUsIDB4MDQwMWY3NTUsIDB4NTlhMDA0MDYsIDB4ODAwMDAwYzIsCisJMHg1OWEwMGMwNywgMHg4YzA0MGQwMCwgMHgwNDAwMDAxYSwgMHg1OWE4MDg2ZiwKKwkweDhjMDQwZDAwLCAweDA0MDIwNzlkLCAweDQyMDAwODAwLCAweDAwMDAwMDY0LAorCTB4ODAwNDA4NDAsIDB4MDQwMDAwMDcsIDB4NGEwMzAwMDAsIDB4MDAwMDAwMDEsCisJMHg0MDAwMDAwMCwgMHg1OTgwMTAwMCwgMHg4YzA4MTUwMCwgMHgwNDAwMDdmOSwKKwkweDA0MDAwMDA3LCAweDQ4MDMwMDA0LCAweDU5ODAwODA1LCAweDQ4MDc0NDA2LAorCTB4NGEwMzAwMDAsIDB4MDAwMDAwMDAsIDB4MDQwMWY3M2MsIDB4NGEwMzAwMDAsCisJMHgwMDAwMDAwMCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwgMHgwNDAwMDc4MywKKwkweDQ4MDM4ODBlLCAweDU5YzQwODBmLCAweDQ4MDc0NDA2LCAweDA0MDFmNzMzLAorCTB4NTlhMDFjMDYsIDB4NTlhMDAyMDcsIDB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsCisJMHg1ODBjMDgwMywgMHg4MDAwMDU4MCwgMHg1MDBjMTAwMCwgMHg4MDA4MDQwMCwKKwkweDgwMGMxODAwLCAweDgwMDQwODQwLCAweDA0MDIwN2ZjLCAweDQ4MDM0NDA2LAorCTB4OTAwMDAxYzAsIDB4NDgwMzQyMDcsIDB4ODAwMDAxYzAsIDB4MDQwMDA3MjMsCisJMHgwNDAxZjc2YSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwgMHg0YTAzNDIwNywKKwkweDAwMDAwMDAwLCAweDRhMDM0NDA3LCAweDAwMDAwMDEyLCAweDU5YTgwMDBkLAorCTB4NDgwMzQyMDgsIDB4OTAwMDAxYzAsIDB4NDgwMzQ0MDgsIDB4NGEwMzQyMDksCisJMHgwMDAwMDAwMiwgMHgwNDAxZjcxNSwgMHg1OWEwMDQwNywgMHg1OWEwMTIwNywKKwkweDkwMDgxMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwNDA5LCAweDU5YTAxYTA5LAorCTB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NTlhMDBhMDgsIDB4NTlhMDA0MDgsCisJMHg5MDA0MDljMCwgMHg4MDA0MGQ0MCwgMHg1OWEwMDIwYSwgMHg4MjAwMjQ4MCwKKwkweDAwMDAwMDEwLCAweDA0MDAxNzU1LCAweDU5YTAyNDA2LCAweDkwMDAwMWMwLAorCTB4ODAxMDA1NDAsIDB4NTlhODI4MGQsIDB4ODAxNDI0ODAsIDB4MDQwMDE3NGYsCisJMHgwMjAxZjAwMCwgMHgwMDEwMzgzZSwgMHg1OWEwMDQwNywgMHg1OWEwMTIwNywKKwkweDkwMDgxMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwNDA5LCAweDU5YTAxYTA5LAorCTB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NTlhMDBhMDgsIDB4NTlhMDA0MDgsCisJMHg5MDA0MDljMCwgMHg4MDA0MGQ0MCwgMHg1OWEwMDIwYSwgMHg4MjAwMjQ4MCwKKwkweDAwMDAwMDEwLCAweDA0MDAxNzNkLCAweDU5YTAyNDA2LCAweDkwMDAwMWMwLAorCTB4ODAxMDA1NDAsIDB4NTlhODI4MGQsIDB4ODAxNDI0ODAsIDB4MDQwMDE3MzcsCisJMHgwMjAxZjAwMCwgMHgwMDEwMzg0MSwgMHg1OWEwMjQwNywgMHg1OWEwMDIwNywKKwkweDkwMTAyMWMwLCAweDgwMTAyNTQwLCAweDU5YTAxYTBhLCAweDU5YTAwNDA2LAorCTB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NDE3ODEwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDAwMTAwMCwgMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwgMHgyNDMyMDAwMSwKKwkweDA0MDAxMDE2LCAweDgyMGMwNTgwLCAweDAwMDA3YzAwLCAweDA0MDAwMDEzLAorCTB4ODIwYzA0ODAsIDB4MDAwMDdhMDAsIDB4MDQwMDEwMTAsIDB4ODIwYzA0ODAsCisJMHgwMDAwN2NmZiwgMHgwNDAyMTAwZCwgMHg0MjAwMDgwMCwgMHgwMDAwMDA2NCwKKwkweDgwMDQwODQwLCAweDA0MDAwMDA3LCAweDRhMDMwMDAwLCAweDAwMDAwMDAxLAorCTB4NDAwMDAwMDAsIDB4NTk4MDAwMDAsIDB4OGMwMDA1MDAsIDB4MDQwMDA3ZjksCisJMHgwNDAwMDAwOCwgMHg4MDA4MTAwMCwgMHg0NDEwMTgwMCwgMHg4MDA4MTFjMCwKKwkweDA0MDAwNmJlLCAweDRhMDMwMDAwLCAweDAwMDAwMDAwLCAweDA0MDFmNmJiLAorCTB4NGEwMzAwMDAsIDB4MDAwMDAwMDAsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDQsCisJMHgwNDAxZjcwMiwgMHg1OWEwMWEwYSwgMHg1OWEwMDQwNiwgMHg5MDBjMTljMCwKKwkweDgwMGMxZDQwLCAweDQxNzgxMDAwLCAweDQyMDAwMDAwLCAweDAwMDAxMDAwLAorCTB4NTAwMDAwMDAsIDB4ODIwMDA0ODAsIDB4MjQzMjAwMDEsIDB4MDQwMDEwMTYsCisJMHg4MjBjMDU4MCwgMHgwMDAwN2MwMCwgMHgwNDAwMDAxMywgMHg4MjBjMDQ4MCwKKwkweDAwMDA3YTAwLCAweDA0MDAxMDEwLCAweDgyMGMwNDgwLCAweDAwMDA3Y2ZmLAorCTB4MDQwMjEwMGQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwNjQsIDB4ODAwNDA4NDAsCiAJMHgwNDAwMDAwNywgMHg0YTAzMDAwMCwgMHgwMDAwMDAwMSwgMHg0MDAwMDAwMCwKLQkweDU5ODAxMDAwLCAweDhjMDgxNTAwLCAweDA0MDAwN2Y5LCAweDA0MDAwMDA3LAotCTB4NDgwMzAwMDQsIDB4NTk4MDA4MDUsIDB4NDgwNzQ0MDYsIDB4NGEwMzAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwNDAxZjczYiwgMHg0YTAzMDAwMCwgMHgwMDAwMDAwMCwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDA0LCAweDA0MDAwNzgyLCAweDQ4MDM4ODBlLAotCTB4NTljNDA4MGYsIDB4NDgwNzQ0MDYsIDB4MDQwMWY3MzIsIDB4NTlhMDFjMDYsCi0JMHg1OWEwMDIwNywgMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg1ODBjMDgwMywKLQkweDgwMDAwNTgwLCAweDUwMGMxMDAwLCAweDgwMDgwNDAwLCAweDgwMGMxODAwLAotCTB4ODAwNDA4NDAsIDB4MDQwMjA3ZmMsIDB4NDgwMzQ0MDYsIDB4OTAwMDAxYzAsCi0JMHg0ODAzNDIwNywgMHg4MDAwMDFjMCwgMHgwNDAwMDcyMiwgMHgwNDAxZjc2OSwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDA0LCAweDRhMDM0MjA3LCAweDAwMDAwMDAwLAotCTB4NGEwMzQ0MDcsIDB4MDAwMDAwMTAsIDB4NTlhODAwMGQsIDB4NDgwMzQyMDgsCi0JMHg5MDAwMDFjMCwgMHg0ODAzNDQwOCwgMHg0YTAzNDIwOSwgMHgwMDAwMDAwMiwKLQkweDA0MDFmNzE0LCAweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDgxMWMwLAorCTB4NTk4MDAwMDAsIDB4OGMwMDA1MDAsIDB4MDQwMDA3ZjksIDB4MDQwMDAwMGYsCisJMHg4MDA4MTAwMCwgMHg1MDBjMDAwMCwgMHg4MjAwMGQwMCwgMHgwMDAwZmZmZiwKKwkweDQ4MDc0MjA3LCAweDgyMDAwZDAwLCAweGZmZmYwMDAwLCAweDkwMDQwOWMwLAorCTB4NDgwNzQ0MDcsIDB4ODAwODExYzAsIDB4MDQwMDA2OGMsIDB4NGEwMzAwMDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjY4OSwgMHg0YTAzMDAwMCwgMHgwMDAwMDAwMCwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDA0LCAweDA0MDFmNmQwLCAweDU5YTAwNDA2LAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwMjAsIDB4NTlhMDEyMDcsIDB4NTlhMDFjMDcsCisJMHg1OWEwMjIwOCwgMHg0ODBiNTA1NCwgMHg0ODBmNTA1NSwgMHg0ODEzNTA1NiwKKwkweDU5YzQwODAxLCAweDgyMDQwZDAwLCAweDAwMDE4MDAwLCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsIDB4MDAwMDgwMDAsCisJMHgwNDAwMDAwOCwgMHg4MjA0MDU4MCwgMHgwMDAxMDAwMCwgMHgwNDAwMDAwNywKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDQwMDgwMDAwLCAweDA0MDFmMDA0LAorCTB4NDAwYzAwMDAsIDB4MDQwMWYwMDIsIDB4NDAxMDAwMDAsIDB4ODAwMDAxMTAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBlMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTliMSwKKwkweDA0MDFmMDA3LCAweDU5YTgxMDU0LCAweDU5YTgxODU1LCAweDU5YTgyMDU2LAorCTB4NDgwYjQyMDcsIDB4NDgwZjQ0MDcsIDB4NDgxMzQyMDgsIDB4MDQwMWY2NWIsCisJMHg0ZDJjMDAwMCwgMHg0ZDM0MDAwMCwgMHg0ZDMwMDAwMCwgMHg0ZDQ0MDAwMCwKKwkweDU5YTI4YzA2LCAweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDAwMDA2LAorCTB4NWMwMjg4MDAsIDB4NWMwMjYwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsCisJMHgwNDAxZjY5ZSwgMHg1OWEwNDQwNywgMHg1OWEwMDIwNywgMHg5MDAwMDFjMCwKKwkweDgwMjA0NTQwLCAweDA0MDFmODFlLCAweDA0MDAwMDA5LCAweDRhMDM0MjA4LAorCTB4MDAwMDAwMDEsIDB4NGEwMzQ0MDYsIDB4MDAwMGZmZmYsIDB4NGEwMzQyMDcsCisJMHgwMDAwZmZmZiwgMHg0OTdiNDQwNywgMHgwNDAxZjAwYiwgMHgwNDAxZjgyMiwKKwkweDA0MDAwMDBlLCAweDRhMDM0MjA4LCAweDAwMDAwMDAyLCAweDU5MzAwNDAyLAorCTB4NDgwMzQ0MDYsIDB4NTkzMDAyMDIsIDB4NDgwMzQyMDcsIDB4NTkzMDAyMDYsCisJMHg0ODAzNDQwNywgMHg1YzAyODgwMCwgMHg1YzAyNjAwMCwgMHg1YzAyNjgwMCwKKwkweDVjMDI1ODAwLCAweDA0MDFmNjMxLCAweDVjMDI4ODAwLCAweDVjMDI2MDAwLAorCTB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4MDQwMWY2NzgsIDB4NDkzN2M4NTYsCisJMHg0ODIzYzg1NiwgMHg0ZDJjMDAwMCwgMHg1OTM0MDAwZiwgMHg4MDAyNWQ0MCwKKwkweDA0MDAwMDA3LCAweDU5MmMwMDA1LCAweDgwMjAwNTgwLCAweDU5MmMwMDAwLAorCTB4MDQwMjA3ZmIsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMjU4MDAsCisJMHgxYzAxZjAwMCwgMHg0ODIzYzg1NywgMHg0ZDJjMDAwMCwgMHg0ZDMwMDAwMCwKKwkweDQyMDI2MDAwLCAweDAwMTBjZmMwLCAweDU5MzAwNDA2LCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMDAwMDQsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDYsCisJMHgwNDAyMDAwNywgMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwgMHgwNDAwMDAwNCwKKwkweDU5MmMwMDA1LCAweDgwMjAwNTgwLCAweDA0MDAwMDBhLCAweDgzMzI2NDAwLAorCTB4MDAwMDAwMjQsIDB4NDE1ODAwMDAsIDB4ODEzMDA0ODAsIDB4MDQwMDE3ZWYsCisJMHg4MDAwMDU4MCwgMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLCAweDVjMDI1ODAwLAorCTB4MWMwMWYwMDAsIDB4ODNhMDA1ODAsIDB4MDAxMGIyYTAsIDB4MDQwMjA2M2IsCisJMHg1OWE4MDA2ZiwgMHg4YzAwMDUwMCwgMHgwNDAyMDAwMywgMHg0YTAzMDAwMCwKKwkweDAwMDAwMDAwLCAweDRhMDM0MjA2LCAweDAwMDA0MDAwLCAweDRhMDNjMDExLAorCTB4NDAwMDAwMTAsIDB4MDQwMWZlNWQsIDB4NTllMDAwMTcsIDB4OGMwMDA1MDgsCisJMHgwNDAwMDAwMywgMHg0YTAzYzAxNywgMHgwMDAwMDAwMCwgMHg0MjAzZTAwMCwKKwkweDMwMDAwMDAxLCAweDQyMDNlMDAwLCAweDQwMDAwMDAwLCAweDA0MDFmMDAwLAorCTB4NTlhMDBjMDYsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDcsIDB4ODM2YzA1ODAsCisJMHgwMDAwMDAwMCwgMHgwNDAwMDAwNCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAxYSwKKwkweDA0MDFmNjJhLCAweDQyMDA3MDAwLCAweDAwMTBiMzNmLCAweDU4MzgxYzAxLAorCTB4NTgzODIyMDIsIDB4OGMwNDBkMDAsIDB4MDQwMDAwMGIsIDB4NTlhMDEyMDcsCisJMHg4MjA4MDUwMCwgMHgwMDAwZjAwMywgMHgwNDAyMDYyNCwgMHg4MjA4MDQ4MCwKKwkweDAwMDAwODQxLCAweDA0MDIxNjIxLCAweDgyMDgwNDgwLCAweDAwMDAwMTAwLAorCTB4MDQwMDE2MWUsIDB4OGMwNDBkMDYsIDB4MDQwMDAwMDMsIDB4NGEwMzc4ZTQsCisJMHgwMDBjMDAwMCwgMHg4YzA0MGQwNCwgMHgwNDAwMDAwYywgMHg0MjAwMDAwMCwKKwkweDAwMDAxMDAwLCAweDUwMDAwMDAwLCAweDgyMDAwNDgwLCAweDI0MjIwMDAxLAorCTB4MDQwMjAwMDMsIDB4ODQwNDBkMDQsIDB4MDQwMWYwMDQsIDB4NTllMDAwMDIsCisJMHg4NDAwMDU0OCwgMHg0ODAzYzAwMiwgMHg4YzA0MGQwMiwgMHgwNDAwMDAwNSwKKwkweDQyMDAyODAwLCAweDAwMDA3NjAwLCAweDRhMDAyODA1LCAweGQwMDAwMDAwLAorCTB4NDAwNDAwMDAsIDB4ODAwYzA1NDAsIDB4NDgwMDc0MDEsIDB4OGMwNDBkMDAsCisJMHgwNDAwMDAwMiwgMHg0ODA4NzIwMiwgMHg0ODBmNDQwNiwgMHg0ODEzNDIwNywKKwkweDA0MDFmNWFlLCAweDRkNDQwMDAwLCAweDRkMzQwMDAwLCAweDU5YTI4YzA2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDQwMjAwMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwNDg0MiwgMHgwNDAwMDAwOSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwOSwKKwkweDVjMDI2ODAwLCAweDVjMDI4ODAwLCAweDA0MDFmNWVjLCAweDVjMDI2ODAwLAorCTB4NWMwMjg4MDAsIDB4MDQwMWY1ZWQsIDB4NTlhMDEyMDcsIDB4NTlhMDFjMDcsCisJMHg1OTM0NDAwYSwgMHg4MjIwM2QwMCwgMHgwMDAwZTAwMCwgMHg4MDFjMzkxYSwKKwkweDhjMDgxNTAwLCAweDA0MDAwMDE5LCAweDgyMGMwZDAwLCAweDAwMDAwMDA3LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDcsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwMSwgMHgwNDAwMDAwNCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDIwN2ViLCAweDgyMjA0NTAwLCAweGZmZmYxZmZmLCAweDgwMDQwMGRhLAorCTB4ODAyMDA1NDAsIDB4NDgwMjY4MGEsIDB4NGMxYzAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjk4YywgMHgwMjAxZjgwMCwgMHgwMDEwNGFmZCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2OTgyLCAweDVjMDAzODAwLCAweDQ4MWY0NDA3LCAweDVjMDI2ODAwLAorCTB4NWMwMjg4MDAsIDB4MDQwMWY1NzksIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDQsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwgMHgwNDAxZjVjMCwgMHg4MzZjMDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDIwMDEwLCAweDU5YTgwMDEwLCAweDQ5N2I0NDA2LAorCTB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4MDQwMDAwMGYsIDB4ODIwMDBkMDAsCisJMHgwMGZmZmYwMCwgMHgwNDAyMDAwYywgMHg4MjAwMGMwMCwgMHgwMDEwMWViNSwKKwkweDUwMDQwODAwLCAweDgwMDQwOTEwLCAweDgyMDQxNTgwLCAweDAwMDAwMDgwLAorCTB4MDQwMjAwMDQsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDcsIDB4MDQwMWY1YWIsCisJMHg0ODA3NDQwNiwgMHg4MjAwMGQwMCwgMHgwMDAwZmZmZiwgMHg0ODA3NDIwNywKKwkweDgwMDAwMTIwLCAweDQ4MDM0NDA3LCAweDU5YTgwMDI2LCAweDgyMDAxNTAwLAorCTB4MDAwMDAxMDAsIDB4NDgwYjQ0MDksIDB4OGMwMDA1MDIsIDB4MDQwMDAwMWYsCisJMHg4YzAwMDUwNiwgMHgwNDAwMDAwOSwgMHg4MjAwMGQwMCwgMHgwMDAwMDAwYSwKKwkweDgyMDQwZDgwLCAweDAwMDAwMDBhLCAweDA0MDIwMDA0LCAweDRhMDM0MjA5LAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMjIsIDB4OGMwMDA1MGEsIDB4MDQwMDAwMDksCisJMHg4MjAwMGQwMCwgMHgwMDAwMDAyMiwgMHg4MjA0MGQ4MCwgMHgwMDAwMDAyMiwKKwkweDA0MDIwMDA0LCAweDRhMDM0MjA5LCAweDAwMDAwMDAzLCAweDA0MDFmMDE4LAorCTB4OGMwMDA1MDgsIDB4MDQwMDAwMDksIDB4ODIwMDBkMDAsIDB4MDAwMDAwMTIsCisJMHg4MjA0MGQ4MCwgMHgwMDAwMDAxMiwgMHgwNDAyMDAwNCwgMHg0YTAzNDIwOSwKKwkweDAwMDAwMDAyLCAweDA0MDFmMDBlLCAweDAyMDFmODAwLCAweDAwMTA0ZTBkLAorCTB4MDQwMjAwMDQsIDB4NGEwMzQyMDksIDB4MDAwMDAwMDQsIDB4MDQwMWY1MmYsCisJMHg4YzAwMDUwNiwgMHgwNDAwMDAwNCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNSwKKwkweDA0MDFmNTc2LCAweDRhMDM0MjA5LCAweDAwMDAwMDAwLCAweDA0MDFmNTI3LAorCTB4NTlhODAwMzcsIDB4NDgwMzQ0MDcsIDB4NTlhODAwMzgsIDB4NDgwMzQyMDksCisJMHgwNDAxZjUyMiwgMHg0MjAwNzgwMCwgMHgwMDEwYjZlYiwgMHg1OWEwMDQwNiwKKwkweDQ4MDNjODU3LCAweDgyMDAwYzgwLCAweDAwMDAwMDA3LCAweDA0MDIxNTZiLAorCTB4MGMwMWYwMDEsIDB4MDAxMDIzNTQsIDB4MDAxMDIzNTUsIDB4MDAxMDIzNjMsCisJMHgwMDEwMjM3NiwgMHgwMDEwMjM5NywgMHgwMDEwMjM1NCwgMHgwMDEwMjM1NCwKKwkweDA0MDFmNTYyLCAweDgzNmMwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwNTViLAorCTB4NTlhMDBhMDcsIDB4NTlhMDA0MDcsIDB4OTAwMDAxYzAsIDB4ODAwNDBkNDAsCisJMHg0ODA3Yzg1NywgMHg1OWEwMGEwOCwgMHg1OWEwMDQwOCwgMHg5MDAwMDFjMCwKKwkweDgwMDQwZDQwLCAweDQ4MDdjODU3LCAweDA0MDFmMDU2LCAweDgzNmMwNTgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDA1NGQsIDB4NTlhMDA0MDcsIDB4NTlhMDEyMDcsCisJMHg5MDAwMDFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDQwOCwgMHg1OWEwMWEwOCwKKwkweDkwMDAwMWMwLCAweDgwMGMxZDQwLCAweDQyMDAwMDAwLCAweDAwMTBiZmJlLAorCTB4NDgwZmM4NTcsIDB4NDgwYmM4NTcsIDB4NDIwMDA4MDAsIDB4MDAwMDEwMDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwMzg0MSwgMHg1OWEwMGEwNywgMHg1OWEwMDQwNywKKwkweDkwMDAwMWMwLCAweDgwMDQxZDQwLCAweDgyMGMwYzgwLCAweDAwMTBhOTcxLAorCTB4MDQwMjE1M2EsIDB4ODIwYzBjODAsIDB4MDAxMDAwMDAsIDB4MDQwMDE1MzcsCisJMHg0ODBmYzg1NywgMHg4MjNjN2MwMCwgMHgwMDAwMDAwOSwgMHg1MDNjMDgwMCwKKwkweDgwMDQwOWMwLCAweDA0MDAwMDA2LCAweDgyM2MwNTgwLCAweDAwMDAwMDBkLAorCTB4MDQwMDA1MmUsIDB4ODAzYzc4MDAsIDB4MDQwMWY3ZjksIDB4NTllNDEwMDEsCisJMHg4MjA4MGQwMCwgMHhmZmZlZmZjZiwgMHg0ODA3YzgwMSwgMHg0NDBjNzgwMCwKKwkweDQ2MDAxODAwLCAweDAyMDFmODAwLCAweDgwMGMxODAwLCAweDQ2MDAxODAwLAorCTB4MDAxMDA2MDgsIDB4NDgwYmM4MDEsIDB4MDQwMWYwMjIsIDB4NTlhMDFhMDcsCisJMHg1OWEwMDQwNywgMHg5MDAwMDFjMCwgMHg4MDBjMWQ0MCwgMHg0ODBjNzgwMSwKKwkweDU5YTAyMjA4LCAweDU5YTAwNDA4LCAweDkwMDAwMWMwLCAweDgwMTAyNTQwLAorCTB4NDgxMDc4MDIsIDB4NTlhMDAyMDksIDB4ODAwMDAwNDAsIDB4MDQwMDE1MTMsCisJMHg0ODAwNzgwNiwgMHg4MDAwMDAwMCwgMHg0ODAwNzgwNSwgMHg0MjAwMDgwMCwKKwkweDAwMDA0MDAwLCAweDQwMDAxMDAwLCAweDAyMDFmODAwLCAweDAwMTA2M2NmLAorCTB4ODAwMDA1NDAsIDB4MDQwMDAwMDMsIDB4NDk3ODc4MDEsIDB4MDQwMWY1MDcsCisJMHg0MDA0MDAwMCwgMHg4MDBjMWMwMCwgMHgwNDAwMTUwNCwgMHg0ODBjNzgwMywKKwkweDQ4MTA3ODA0LCAweDQ5Nzg3ODA4LCAweDU5YTAwNDA5LCAweDQ4MDA3ODA3LAorCTB4NTllNDAwMDEsIDB4NDgwM2M4NTcsIDB4ODIwMDA1NDAsIDB4MDAwNDAwMDAsCisJMHg0ODAzYzgwMSwgMHgwNDAxZjRhOSwgMHg1OWE4MDAwNiwgMHg0ODAzNDQwNiwKKwkweDU5YTgwMDA3LCAweDQ4MDM0MjA3LCAweDU5YTgwMDA4LCAweDQ4MDM0NDA3LAorCTB4MDQwMWY0YTIsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NDgwM2M4NTYsCisJMHg0YTAzYzAxMywgMHgwMzgwMDMwMCwgMHg0YTAzYzAxNCwgMHgwMzgwMDM4MCwKKwkweDU5YTAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMGEwLCAweDA0MDAwMDA0LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwYTIsIDB4MDQwMjAwMjgsIDB4NTlhMDE0MGEsCisJMHg4MjA4MDQ4MCwgMHgwMDAwMDEwMCwgMHgwNDAyMTAyNCwgMHg1OWEwMDIwYiwKKwkweDhjMDAwNTAwLCAweDA0MDIwMDJiLCAweDU5YTAwYTBhLCAweDgwMDQwOWMwLAorCTB4MDQwMDAwMWUsIDB4ODIwNDA0ODAsIDB4MDAwMDAwNDEsIDB4MDQwMjEwMWIsCisJMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywgMHg4MjA0MGQwMCwgMHgwMDAwMDBmYywKKwkweDgwMDQwOTA0LCAweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDgxMWMwLAogCTB4ODAwODE1NDAsIDB4NTlhMDA0MDksIDB4NTlhMDFhMDksIDB4OTAwYzE5YzAsCi0JMHg4MDBjMWQ0MCwgMHg1OWEwMGEwOCwgMHg1OWEwMDQwOCwgMHg5MDA0MDljMCwKLQkweDgwMDQwZDQwLCAweDU5YTAwMjBhLCAweDgyMDAyNDgwLCAweDAwMDAwMDEwLAotCTB4MDQwMDE3NTQsIDB4NTlhMDI0MDYsIDB4OTAwMDAxYzAsIDB4ODAxMDA1NDAsCi0JMHg1OWE4MjgwZCwgMHg4MDE0MjQ4MCwgMHgwNDAwMTc0ZSwgMHgwMjAxZjAwMCwKLQkweDAwMTAzYTI1LCAweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDgxMWMwLAotCTB4ODAwODE1NDAsIDB4NTlhMDA0MDksIDB4NTlhMDFhMDksIDB4OTAwYzE5YzAsCi0JMHg4MDBjMWQ0MCwgMHg1OWEwMGEwOCwgMHg1OWEwMDQwOCwgMHg5MDA0MDljMCwKLQkweDgwMDQwZDQwLCAweDU5YTAwMjBhLCAweDgyMDAyNDgwLCAweDAwMDAwMDEwLAotCTB4MDQwMDE3M2MsIDB4NTlhMDI0MDYsIDB4OTAwMDAxYzAsIDB4ODAxMDA1NDAsCi0JMHg1OWE4MjgwZCwgMHg4MDE0MjQ4MCwgMHgwNDAwMTczNiwgMHgwMjAxZjAwMCwKLQkweDAwMTAzYTI4LCAweDU5YTAwYTBhLCAweDU5YTAwNDA2LCAweDkwMDQwOWMwLAotCTB4ODAwNDBkNDAsIDB4NTlhMDE0MDcsIDB4NTlhMDAyMDcsIDB4OTAwODExYzAsCi0JMHg4MDA4MTU0MCwgMHg0NDA4MDgwMCwgMHgwNDAxZjZkYSwgMHg1OWEwMGEwYSwKLQkweDU5YTAwNDA2LCAweDkwMDQwOWMwLCAweDgwMDQwZDQwLCAweDUwMDQwMDAwLAotCTB4ODIwMDBkMDAsIDB4MDAwMGZmZmYsIDB4NDgwNzQyMDcsIDB4ODIwMDBkMDAsCi0JMHhmZmZmMDAwMCwgMHg5MDA0MDljMCwgMHg0ODA3NDQwNywgMHgwNDAxZjZjZCwKLQkweDU5YTAwNDA2LCAweDhjMDAwNTAwLCAweDA0MDAwMDIwLCAweDU5YTAxMjA3LAotCTB4NTlhMDFjMDcsIDB4NTlhMDIyMDgsIDB4NDgwYjUwNTQsIDB4NDgwZjUwNTUsCi0JMHg0ODEzNTA1NiwgMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwgMHgwMDAxODAwMCwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDA5LCAweDgyMDQwNTgwLAotCTB4MDAwMDgwMDAsIDB4MDQwMDAwMDgsIDB4ODIwNDA1ODAsIDB4MDAwMTAwMDAsCi0JMHgwNDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0MDA4MDAwMCwKLQkweDA0MDFmMDA0LCAweDQwMGMwMDAwLCAweDA0MDFmMDAyLCAweDQwMTAwMDAwLAotCTB4ODAwMDAxMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwZTAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTk0NCwgMHgwNDAxZjAwNywgMHg1OWE4MTA1NCwgMHg1OWE4MTg1NSwKLQkweDU5YTgyMDU2LCAweDQ4MGI0MjA3LCAweDQ4MGY0NDA3LCAweDQ4MTM0MjA4LAotCTB4MDQwMWY2YTQsIDB4NGQyYzAwMDAsIDB4NGQzNDAwMDAsIDB4NGQzMDAwMDAsCi0JMHg0ZDQ0MDAwMCwgMHg1OWEyOGMwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwKLQkweDA0MDAwMDA2LCAweDVjMDI4ODAwLCAweDVjMDI2MDAwLCAweDVjMDI2ODAwLAotCTB4NWMwMjU4MDAsIDB4MDQwMWY2ZTcsIDB4NTlhMDQ0MDcsIDB4NTlhMDAyMDcsCi0JMHg5MDAwMDFjMCwgMHg4MDIwNDU0MCwgMHgwNDAxZjgxZSwgMHgwNDAwMDAwOSwKLQkweDRhMDM0MjA4LCAweDAwMDAwMDAxLCAweDRhMDM0NDA2LCAweDAwMDBmZmZmLAotCTB4NGEwMzQyMDcsIDB4MDAwMGZmZmYsIDB4NDk3YjQ0MDcsIDB4MDQwMWYwMGIsCi0JMHgwNDAxZjgyMiwgMHgwNDAwMDAwZSwgMHg0YTAzNDIwOCwgMHgwMDAwMDAwMiwKLQkweDU5MzAwNDAyLCAweDQ4MDM0NDA2LCAweDU5MzAwMjAyLCAweDQ4MDM0MjA3LAotCTB4NTkzMDAyMDYsIDB4NDgwMzQ0MDcsIDB4NWMwMjg4MDAsIDB4NWMwMjYwMDAsCi0JMHg1YzAyNjgwMCwgMHg1YzAyNTgwMCwgMHgwNDAxZjY3YSwgMHg1YzAyODgwMCwKLQkweDVjMDI2MDAwLCAweDVjMDI2ODAwLCAweDVjMDI1ODAwLCAweDA0MDFmNmMxLAotCTB4NDkzN2M4NTYsIDB4NDgyM2M4NTYsIDB4NGQyYzAwMDAsIDB4NTkzNDAwMGYsCi0JMHg4MDAyNWQ0MCwgMHgwNDAwMDAwNywgMHg1OTJjMDAwNSwgMHg4MDIwMDU4MCwKLQkweDU5MmMwMDAwLCAweDA0MDIwN2ZiLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDgyM2M4NTcsIDB4NGQyYzAwMDAsCi0JMHg0ZDMwMDAwMCwgMHg0MjAyNjAwMCwgMHgwMDEwZDFjMCwgMHg1OTMwMDQwNiwKLQkweDgyMDAwZDgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA0LCAweDgyMDAwZDgwLAotCTB4MDAwMDAwMDYsIDB4MDQwMjAwMDcsIDB4NTkzMjU4MDgsIDB4ODEyZTU5YzAsCi0JMHgwNDAwMDAwNCwgMHg1OTJjMDAwNSwgMHg4MDIwMDU4MCwgMHgwNDAwMDAwYSwKLQkweDgzMzI2NDAwLCAweDAwMDAwMDI0LCAweDQxNTgwMDAwLCAweDgxMzAwNDgwLAotCTB4MDQwMDE3ZWYsIDB4ODAwMDA1ODAsIDB4NWMwMjYwMDAsIDB4NWMwMjU4MDAsCi0JMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNjAwMCwKLQkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDgzYTAwNTgwLCAweDAwMTBiNGE0LAotCTB4MDQwMjA2ODQsIDB4NTlhODAwMDUsIDB4OGMwMDA1MGUsIDB4MDQwMjAwMDMsCi0JMHg0YTAzMDAwMCwgMHgwMDAwMDAwMCwgMHg0YTAzNDIwNiwgMHgwMDAwNDAwMCwKLQkweDRhMDNjMDExLCAweDQwMDAwMDEwLCAweDA0MDFmZWE3LCAweDU5ZTAwMDE3LAotCTB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsIDB4NGEwM2MwMTcsIDB4MDAwMDAwMDAsCi0JMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg0MjAzZTAwMCwgMHg0MDAwMDAwMCwKLQkweDA0MDFmMDAwLCAweDgwMDQwOWMwLCAweDA0MDAwMDA0LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDEsIDB4MDQwMWY2NzcsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCi0JMHgwNDAyMDAxMCwgMHg1OWE4MDAxMCwgMHg0OTdiNDQwNiwgMHgwMjAxZjgwMCwKLQkweDAwMTA1MTNiLCAweDA0MDAwMDBmLCAweDgyMDAwZDAwLCAweDAwZmZmZjAwLAotCTB4MDQwMjAwMGMsIDB4ODIwMDBjMDAsIDB4MDAxMDIxMGUsIDB4NTAwNDA4MDAsCi0JMHg4MDA0MDkxMCwgMHg4MjA0MTU4MCwgMHgwMDAwMDA4MCwgMHgwNDAyMDAwNCwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDA3LCAweDA0MDFmNjYyLCAweDQ4MDc0NDA2LAotCTB4ODIwMDBkMDAsIDB4MDAwMGZmZmYsIDB4NDgwNzQyMDcsIDB4ODAwMDAxMjAsCi0JMHg0ODAzNDQwNywgMHg1OWE4MDAyNiwgMHg4MjAwMTUwMCwgMHgwMDAwMDEwMCwKLQkweDQ4MGI0NDA5LCAweDhjMDAwNTAyLCAweDA0MDAwMDFmLCAweDhjMDAwNTA2LAotCTB4MDQwMDAwMDksIDB4ODIwMDBkMDAsIDB4MDAwMDAwMGEsIDB4ODIwNDBkODAsCi0JMHgwMDAwMDAwYSwgMHgwNDAyMDAwNCwgMHg0YTAzNDIwOSwgMHgwMDAwMDAwMSwKLQkweDA0MDFmMDIyLCAweDhjMDAwNTBhLCAweDA0MDAwMDA5LCAweDgyMDAwZDAwLAotCTB4MDAwMDAwMjIsIDB4ODIwNDBkODAsIDB4MDAwMDAwMjIsIDB4MDQwMjAwMDQsCi0JMHg0YTAzNDIwOSwgMHgwMDAwMDAwMywgMHgwNDAxZjAxOCwgMHg4YzAwMDUwOCwKLQkweDA0MDAwMDA5LCAweDgyMDAwZDAwLCAweDAwMDAwMDEyLCAweDgyMDQwZDgwLAotCTB4MDAwMDAwMTIsIDB4MDQwMjAwMDQsIDB4NGEwMzQyMDksIDB4MDAwMDAwMDIsCi0JMHgwNDAxZjAwZSwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAyMDAwNCwKLQkweDRhMDM0MjA5LCAweDAwMDAwMDA0LCAweDA0MDFmNWU2LCAweDhjMDAwNTA2LAotCTB4MDQwMDAwMDQsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDUsIDB4MDQwMWY2MmQsCi0JMHg0YTAzNDIwOSwgMHgwMDAwMDAwMCwgMHgwNDAxZjVkZSwgMHg1OWE4MDAzNywKLQkweDQ4MDM0NDA3LCAweDU5YTgwMDM4LCAweDQ4MDM0MjA5LCAweDA0MDFmNWQ5LAotCTB4NDIwMDc4MDAsIDB4MDAxMGI4ZWMsIDB4NTlhMDA0MDYsIDB4NDgwM2M4NTcsCi0JMHg4MjAwMGM4MCwgMHgwMDAwMDAwNiwgMHgwNDAyMTYyMiwgMHgwYzAxZjAwMSwKLQkweDAwMTAyNGY2LCAweDAwMTAyNGY3LCAweDAwMTAyNTA1LCAweDAwMTAyNTE4LAotCTB4MDAxMDI1MzksIDB4MDAxMDI0ZjYsIDB4MDQwMWY2MWEsIDB4ODM2YzA1ODAsCi0JMHgwMDAwMDAwMCwgMHgwNDAwMDYxMywgMHg1OWEwMGEwNywgMHg1OWEwMDQwNywKLQkweDkwMDAwMWMwLCAweDgwMDQwZDQwLCAweDQ4MDdjODU3LCAweDU5YTAwYTA4LAotCTB4NTlhMDA0MDgsIDB4OTAwMDAxYzAsIDB4ODAwNDBkNDAsIDB4NDgwN2M4NTcsCi0JMHgwNDAxZjA1NiwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDYwNSwKLQkweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDAwMWMwLCAweDgwMDgxNTQwLAotCTB4NTlhMDA0MDgsIDB4NTlhMDFhMDgsIDB4OTAwMDAxYzAsIDB4ODAwYzFkNDAsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYzFiZiwgMHg0ODBmYzg1NywgMHg0ODBiYzg1NywKLQkweDQyMDAwODAwLCAweDAwMDAxMDAwLCAweDAyMDFmMDAwLCAweDAwMTAzYTI4LAotCTB4NTlhMDBhMDcsIDB4NTlhMDA0MDcsIDB4OTAwMDAxYzAsIDB4ODAwNDFkNDAsCi0JMHg4MjBjMGM4MCwgMHgwMDEwYWI0YSwgMHgwNDAyMTVmMiwgMHg4MjBjMGM4MCwKLQkweDAwMTAwMDAwLCAweDA0MDAxNWVmLCAweDQ4MGZjODU3LCAweDgyM2M3YzAwLAotCTB4MDAwMDAwMDksIDB4NTAzYzA4MDAsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDYsCi0JMHg4MjNjMDU4MCwgMHgwMDAwMDAwZCwgMHgwNDAwMDVlNiwgMHg4MDNjNzgwMCwKLQkweDA0MDFmN2Y5LCAweDU5ZTQxMDAxLCAweDgyMDgwZDAwLCAweGZmZmVmZmNmLAotCTB4NDgwN2M4MDEsIDB4NDQwYzc4MDAsIDB4NDYwMDE4MDAsIDB4MDIwMWY4MDAsCi0JMHg4MDBjMTgwMCwgMHg0NjAwMTgwMCwgMHgwMDEwMDVjYiwgMHg0ODBiYzgwMSwKLQkweDA0MDFmMDIyLCAweDU5YTAxYTA3LCAweDU5YTAwNDA3LCAweDkwMDAwMWMwLAotCTB4ODAwYzFkNDAsIDB4NDgwYzc4MDEsIDB4NTlhMDIyMDgsIDB4NTlhMDA0MDgsCi0JMHg5MDAwMDFjMCwgMHg4MDEwMjU0MCwgMHg0ODEwNzgwMiwgMHg1OWEwMDIwOSwKLQkweDgwMDAwMDQwLCAweDA0MDAxNWNiLCAweDQ4MDA3ODA2LCAweDgwMDAwMDAwLAotCTB4NDgwMDc4MDUsIDB4NDIwMDA4MDAsIDB4MDAwMDQwMDAsIDB4NDAwMDEwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjY4MSwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwMywKLQkweDQ5Nzg3ODAxLCAweDA0MDFmNWJmLCAweDQwMDQwMDAwLCAweDgwMGMxYzAwLAotCTB4MDQwMDE1YmMsIDB4NDgwYzc4MDMsIDB4NDgxMDc4MDQsIDB4NDk3ODc4MDgsCi0JMHg1OWEwMDQwOSwgMHg0ODAwNzgwNywgMHg1OWU0MDAwMSwgMHg0ODAzYzg1NywKLQkweDgyMDAwNTQwLCAweDAwMDQwMDAwLCAweDQ4MDNjODAxLCAweDA0MDFmNTYxLAotCTB4NTlhODAwMDYsIDB4NDgwMzQ0MDYsIDB4NTlhODAwMDcsIDB4NDgwMzQyMDcsCi0JMHg1OWE4MDAwOCwgMHg0ODAzNDQwNywgMHgwNDAxZjU1YSwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDQ4MDNjODU2LCAweDRhMDNjMDEzLCAweDAzODAwMzAwLAorCTB4ODAwYzFkNDAsIDB4MDIwMWY4MDAsIDB4MDAxMDM4MWEsIDB4MDQwMjAwMDYsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHg0YTAzYzAxNCwgMHgwMzgwMDAwMCwKKwkweDA0MDFmNGJlLCAweDAyMDFmODAwLCAweDAwMTAzODNlLCAweDRhMDFkODA5LAorCTB4MDAxMDIzZmQsIDB4MWMwMWYwMDAsIDB4NGEwM2MwMTQsIDB4MDM4MDAwMDAsCisJMHgwNDAxZjRiYSwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwgMHg1OGVlNTgwZCwKKwkweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDA0MDAwNGE3LAorCTB4NTlhMDBjMDYsIDB4NTlhMDE0MGEsIDB4NTlhMDAyMGIsIDB4OGMwMDA1MDAsCisJMHgwNDAyMDAzMSwgMHg4MzJlNWMwMCwgMHgwMDAwMDAwNCwgMHg0MTc4MzgwMCwKKwkweDU5YTA0YTBhLCAweDQwMWMwMDAwLCAweDgxMmMwNDAwLCAweDUwMDA0MDAwLAorCTB4ODIyMDFkMDAsIDB4MDAwMDAwZmYsIDB4NGMwNDAwMDAsIDB4MDQwMWY4YWYsCisJMHg1YzAwMDgwMCwgMHgwNDAwMDAyZCwgMHg4MDI0NDg0MCwgMHgwNDAwMDAyOCwKKwkweDgwMDgxMDAwLCAweDgyMjAxZDAwLCAweDAwMDBmZjAwLCAweDgwMGMxOTEwLAorCTB4NGMwNDAwMDAsIDB4MDQwMWY4YTUsIDB4NWMwMDA4MDAsIDB4MDQwMDAwMjMsCisJMHg4MDI0NDg0MCwgMHgwNDAwMDAxZSwgMHg4MDA4MTAwMCwgMHg4MjIwMWQwMCwKKwkweDAwZmYwMDAwLCAweDgwMGMxOTIwLCAweDRjMDQwMDAwLCAweDA0MDFmODliLAorCTB4NWMwMDA4MDAsIDB4MDQwMDAwMTksIDB4ODAyNDQ4NDAsIDB4MDQwMDAwMTQsCisJMHg4MDA4MTAwMCwgMHg4MjIwMWQwMCwgMHhmZjAwMDAwMCwgMHg4MDBjMTkzMCwKKwkweDRjMDQwMDAwLCAweDA0MDFmODkxLCAweDVjMDAwODAwLCAweDA0MDAwMDBmLAorCTB4ODAyNDQ4NDAsIDB4MDQwMDAwMGEsIDB4ODAwODEwMDAsIDB4ODAxYzM4MDAsCisJMHgwNDAxZjdkNSwgMHg1OWEwMDIwYSwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDQwMDAxODAwLCAweDA0MDFmODg1LCAweDA0MDAwMDA0LCAweDRhMDNjMDE0LAorCTB4MDM4MDAwMDAsIDB4MDQwMWY0MjUsIDB4NGEwM2MwMTQsIDB4MDM4MDAwMDAsCisJMHgwNDAxZjQ2ZSwgMHg0ODAzYzg1NiwgMHg0YTAzYzAxMywgMHgwMzgwMDMwMCwKIAkweDRhMDNjMDE0LCAweDAzODAwMzgwLCAweDU5YTAwYzA2LCAweDgyMDQwNTgwLAogCTB4MDAwMDAwYTAsIDB4MDQwMDAwMDQsIDB4ODIwNDA1ODAsIDB4MDAwMDAwYTIsCi0JMHgwNDAyMDAyYiwgMHg1OWEwMTQwYSwgMHg4MjA4MDQ4MCwgMHgwMDAwMDEwMCwKLQkweDA0MDIxMDI3LCAweDU5YTAwMjBiLCAweDhjMDAwNTAwLCAweDA0MDIwMDJlLAotCTB4NTlhMDBhMGEsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMjEsIDB4ODIwNDA0ODAsCi0JMHgwMDAwMDA0MSwgMHgwNDAyMTAxZSwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywKLQkweDgyMDQwZDAwLCAweDAwMDAwMGZjLCAweDgwMDQwOTA0LCAweDU5YTAwNDA3LAotCTB4NTlhMDEyMDcsIDB4OTAwODExYzAsIDB4ODAwODE1NDAsIDB4NTlhMDA0MDksCi0JMHg1OWEwMWEwOSwgMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHgwMjAxZjgwMCwKLQkweDAwMTAzYTAwLCAweDA0MDIwMDA2LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLAotCTB4NGEwM2MwMTQsIDB4MDM4MDAwMDAsIDB4MDQwMWY1NzYsIDB4ODMyZTVjMDAsCi0JMHgwMDAwMDAwNCwgMHg0MTJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EyNSwKLQkweDRhMDFkODA5LCAweDAwMTAyNWEyLCAweDFjMDFmMDAwLCAweDRhMDNjMDE0LAotCTB4MDM4MDAwMDAsIDB4MDQwMWY1NmYsIDB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsCi0JMHg1OGVlNTgwZCwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwKLQkweDA0MDAwNTVjLCAweDU5YTAwYzA2LCAweDU5YTAxNDBhLCAweDU5YTAwMjBiLAotCTB4OGMwMDA1MDAsIDB4MDQwMjAwMzEsIDB4ODMyZTVjMDAsIDB4MDAwMDAwMDQsCisJMHgwNDAyMDA2ZSwgMHg1OWEwMTQwYSwgMHg4MjA4MDQ4MCwgMHgwMDAwMDEwMCwKKwkweDA0MDIxMDZhLCAweDU5YTAwMjBiLCAweDhjMDAwNTAwLCAweDA0MDIwMDVjLAorCTB4NTlhMDFhMGEsIDB4ODAwYzE5YzAsIDB4MDQwMDAwNjQsIDB4ODIwYzA0ODAsCisJMHgwMDAwMDA0MSwgMHgwNDAyMTA2MSwgMHgwMjAxZjgwMCwgMHgwMDEwMzgxYSwKKwkweDA0MDIwMDA2LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDRhMDNjMDE0LAorCTB4MDM4MDAwMDAsIDB4MDQwMWY0NGQsIDB4ODMyZTVjMDAsIDB4MDAwMDAwMDQsCiAJMHg0MTc4MzgwMCwgMHg1OWEwNGEwYSwgMHg0MDFjMDAwMCwgMHg4MTJjMDQwMCwKLQkweDUwMDA0MDAwLCAweDgyMjAxZDAwLCAweDAwMDAwMGZmLCAweDRjMDQwMDAwLAotCTB4MDQwMWY4YWMsIDB4NWMwMDA4MDAsIDB4MDQwMDAwMmQsIDB4ODAyNDQ4NDAsCi0JMHgwNDAwMDAyOCwgMHg4MDA4MTAwMCwgMHg4MjIwMWQwMCwgMHgwMDAwZmYwMCwKLQkweDgwMGMxOTEwLCAweDRjMDQwMDAwLCAweDA0MDFmOGEyLCAweDVjMDAwODAwLAotCTB4MDQwMDAwMjMsIDB4ODAyNDQ4NDAsIDB4MDQwMDAwMWUsIDB4ODAwODEwMDAsCi0JMHg4MjIwMWQwMCwgMHgwMGZmMDAwMCwgMHg4MDBjMTkyMCwgMHg0YzA0MDAwMCwKLQkweDA0MDFmODk4LCAweDVjMDAwODAwLCAweDA0MDAwMDE5LCAweDgwMjQ0ODQwLAotCTB4MDQwMDAwMTQsIDB4ODAwODEwMDAsIDB4ODIyMDFkMDAsIDB4ZmYwMDAwMDAsCi0JMHg4MDBjMTkzMCwgMHg0YzA0MDAwMCwgMHgwNDAxZjg4ZSwgMHg1YzAwMDgwMCwKLQkweDA0MDAwMDBmLCAweDgwMjQ0ODQwLCAweDA0MDAwMDBhLCAweDgwMDgxMDAwLAotCTB4ODAxYzM4MDAsIDB4MDQwMWY3ZDUsIDB4NTlhMDAyMGEsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDBmZiwgMHg0MDAwMTgwMCwgMHgwNDAxZjg4MiwgMHgwNDAwMDAwNCwKLQkweDRhMDNjMDE0LCAweDAzODAwMDAwLCAweDA0MDFmNGRhLCAweDRhMDNjMDE0LAotCTB4MDM4MDAwMDAsIDB4MDQwMWY1MjMsIDB4NDgwM2M4NTYsIDB4NGEwM2MwMTMsCi0JMHgwMzgwMDMwMCwgMHg0YTAzYzAxNCwgMHgwMzgwMDM4MCwgMHg1OWEwMGMwNiwKLQkweDgyMDQwNTgwLCAweDAwMDAwMGEwLCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLAotCTB4MDAwMDAwYTIsIDB4MDQwMjAwNmMsIDB4NTlhMDE0MGEsIDB4ODIwODA0ODAsCi0JMHgwMDAwMDEwMCwgMHgwNDAyMTA2OCwgMHg1OWEwMDIwYiwgMHg4YzAwMDUwMCwKLQkweDA0MDIwMDVjLCAweDU5YTAxYTBhLCAweDgwMGMxOWMwLCAweDA0MDAwMDYyLAotCTB4ODIwYzA0ODAsIDB4MDAwMDAwNDEsIDB4MDQwMjEwNWYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2EwMCwgMHgwNDAyMDAwNiwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKLQkweDRhMDNjMDE0LCAweDAzODAwMDAwLCAweDA0MDFmNTAyLCAweDgzMmU1YzAwLAotCTB4MDAwMDAwMDQsIDB4NDE3ODM4MDAsIDB4NTlhMDRhMGEsIDB4NDAxYzAwMDAsCi0JMHg4MTJjMDQwMCwgMHg0MDAwNDAwMCwgMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwKLQkweDA0MDFmODc0LCAweDVjMDAxMDAwLCAweDVjMDAwODAwLCAweDA0MDAwMDQ3LAotCTB4NDQxNDQwMDAsIDB4ODAyNDQ4NDAsIDB4MDQwMDAwMmIsIDB4ODAwODEwMDAsCi0JMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwgMHgwNDAxZjg2YSwgMHg1YzAwMTAwMCwKLQkweDVjMDAwODAwLCAweDA0MDAwMDNkLCAweDUwMjAwMDAwLCAweDgwMTQyOGQwLAotCTB4ODAxNDA1NDAsIDB4NDQwMDQwMDAsIDB4ODAyNDQ4NDAsIDB4MDQwMDAwMWUsCi0JMHg4MDA4MTAwMCwgMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwgMHgwNDAxZjg1ZCwKLQkweDVjMDAxMDAwLCAweDVjMDAwODAwLCAweDA0MDAwMDMwLCAweDUwMjAwMDAwLAotCTB4ODAxNDI4ZTAsIDB4ODAxNDA1NDAsIDB4NDQwMDQwMDAsIDB4ODAyNDQ4NDAsCi0JMHgwNDAwMDAxMSwgMHg4MDA4MTAwMCwgMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwKLQkweDA0MDFmODUwLCAweDVjMDAxMDAwLCAweDVjMDAwODAwLCAweDA0MDAwMDIzLAotCTB4NTAyMDAwMDAsIDB4ODAxNDI4ZjAsIDB4ODAxNDA1NDAsIDB4NDQwMDQwMDAsCi0JMHg4MDI0NDg0MCwgMHgwNDAwMDAwNCwgMHg4MDA4MTAwMCwgMHg4MDFjMzgwMCwKLQkweDA0MDFmN2NiLCAweDU5YTAwYTBhLCAweDgyMDQwYzAwLCAweDAwMDAwMDAzLAotCTB4ODIwNDBkMDAsIDB4MDAwMDAwZmMsIDB4ODAwNDA5MDQsIDB4NTlhMDA0MDcsCi0JMHg1OWEwMTIwNywgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDQwOSwKLQkweDU5YTAxYTA5LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDRhMDNjMDE0LAotCTB4MDM4MDAwMDAsIDB4NDEyYzAwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDNhMjgsCi0JMHgwNDAxZjgzMCwgMHgwNDAwMDAwNSwgMHg0ODE3NDQwNiwgMHg0YTAzYzAxNCwKLQkweDAzODAwMDAwLCAweDA0MDFmNDYzLCAweDRhMDNjMDE0LCAweDAzODAwMDAwLAotCTB4MDQwMWY0YWMsIDB4NGEwM2MwMTQsIDB4MDM4MDAwMDAsIDB4MDQwMWY0YWQsCi0JMHgwNDAxZjgzNiwgMHgwNDAwMDAxMCwgMHgwNDAxZjg2MiwgMHgwNDAyMDAwZiwKLQkweDQwMDgwODAwLCAweDA0MDFmODVmLCAweDA0MDIwMDBjLCAweDQwMGMwODAwLAotCTB4MDQwMWY4NWMsIDB4MDQwMjAwMDksIDB4MDQwMWY4NGIsIDB4NDIwMDAwMDAsCi0JMHgwMDAzMGQ0MCwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwgMHg4MjAwMDU0MCwKLQkweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDA0MDFmODQzLCAweDgwMDAwNTgwLAotCTB4MDQwMWY3ZmQsIDB4MDQwMWY4MjEsIDB4MDQwMDAwMGEsIDB4ODIwNDBkNDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjg0YiwgMHgwNDAyMDAwNywgMHgwNDAxZjg3ZSwKLQkweDA0MDFmODk4LCAweDA0MDFmODM4LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4MWMwMWYwMDAsIDB4MDQwMWY4MzQsIDB4ODAwMDA1ODAsIDB4MDQwMWY3ZmQsCi0JMHg0MDA0MTgwMCwgMHgwNDAxZjgxMSwgMHgwNDAwMDAwYywgMHgwNDAxZjgzZCwKLQkweDA0MDIwMDBiLCAweDQwMDgwODAwLCAweDA0MDFmODNhLCAweDA0MDIwMDA4LAotCTB4NDAwYzA4MDAsIDB4MDQwMWZmZTgsIDB4MDQwMDAwMDQsIDB4MDQwMWY4MjYsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHgwNDAxZjgyMiwKLQkweDgwMDAwNTgwLCAweDA0MDFmN2ZkLCAweDRjMDQwMDAwLCAweDQyMDAwODAwLAotCTB4MDAwMDAwNjQsIDB4NGEwM2MwMTMsIDB4MDM4MDAzMDAsIDB4ODAwNDA4NDAsCi0JMHgwNDAwMDAxNiwgMHg1OWUwMDAxMywgMHg4MjAwMDUwMCwgMHgwMDAwMDMwMCwKLQkweDgyMDAwNTgwLCAweDAwMDAwMzAwLCAweDA0MDIwN2Y3LCAweDQyMDAwMDAwLAorCTB4NDAwMDQwMDAsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4MDQwMWY4NzcsCisJMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgwNDAwMDA0OCwgMHg0NDE0NDAwMCwKKwkweDgwMjQ0ODQwLCAweDA0MDAwMDJiLCAweDgwMDgxMDAwLCAweDRjMDQwMDAwLAorCTB4NGMwODAwMDAsIDB4MDQwMWY4NmQsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsCisJMHgwNDAwMDAzZSwgMHg1MDIwMDAwMCwgMHg4MDE0MjhkMCwgMHg4MDE0MDU0MCwKKwkweDQ0MDA0MDAwLCAweDgwMjQ0ODQwLCAweDA0MDAwMDFlLCAweDgwMDgxMDAwLAorCTB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4MDQwMWY4NjAsIDB4NWMwMDEwMDAsCisJMHg1YzAwMDgwMCwgMHgwNDAwMDAzMSwgMHg1MDIwMDAwMCwgMHg4MDE0MjhlMCwKKwkweDgwMTQwNTQwLCAweDQ0MDA0MDAwLCAweDgwMjQ0ODQwLCAweDA0MDAwMDExLAorCTB4ODAwODEwMDAsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4MDQwMWY4NTMsCisJMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgwNDAwMDAyNCwgMHg1MDIwMDAwMCwKKwkweDgwMTQyOGYwLCAweDgwMTQwNTQwLCAweDQ0MDA0MDAwLCAweDgwMjQ0ODQwLAorCTB4MDQwMDAwMDQsIDB4ODAwODEwMDAsIDB4ODAxYzM4MDAsIDB4MDQwMWY3Y2IsCisJMHg1OWEwMGEwYSwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywgMHg4MjA0MGQwMCwKKwkweDAwMDAwMGZjLCAweDgwMDQwOTA0LCAweDU5YTAwNDA3LCAweDU5YTAxMjA3LAorCTB4OTAwODExYzAsIDB4ODAwODE1NDAsIDB4NTlhMDA0MDksIDB4NTlhMDFhMDksCisJMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg0YTAzYzAxNCwgMHgwMzgwMDAwMCwKKwkweDQxMmMwMDAwLCAweDAyMDFmMDAwLCAweDAwMTAzODQxLCAweDA0MDFmODMzLAorCTB4MDQwMDAwMDYsIDB4NDgxNzQ0MDYsIDB4NGEwM2MwMTQsIDB4MDM4MDAwMDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwgMHg0YTAzYzAxNCwgMHgwMzgwMDAwMCwKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDRhMDNjMDE0LCAweDAzODAwMDAwLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjYsIDB4MDQwMWY4MzYsIDB4MDQwMDAwMTAsCisJMHgwNDAxZjg2MiwgMHgwNDAyMDAwZiwgMHg0MDA4MDgwMCwgMHgwNDAxZjg1ZiwKKwkweDA0MDIwMDBjLCAweDQwMGMwODAwLCAweDA0MDFmODVjLCAweDA0MDIwMDA5LAorCTB4MDQwMWY4NGIsIDB4NDIwMDAwMDAsIDB4MDAwMzBkNDAsIDB4ODAwMDAwNDAsCisJMHgwNDAyMDdmZiwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKKwkweDA0MDFmODQzLCAweDgwMDAwNTgwLCAweDA0MDFmN2ZkLCAweDA0MDFmODIxLAorCTB4MDQwMDAwMGEsIDB4ODIwNDBkNDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY4NGIsCisJMHgwNDAyMDAwNywgMHgwNDAxZjg3ZSwgMHgwNDAxZjg5OCwgMHgwNDAxZjgzOCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDA0MDFmODM0LAorCTB4ODAwMDA1ODAsIDB4MDQwMWY3ZmQsIDB4NDAwNDE4MDAsIDB4MDQwMWY4MTEsCisJMHgwNDAwMDAwYywgMHgwNDAxZjgzZCwgMHgwNDAyMDAwYiwgMHg0MDA4MDgwMCwKKwkweDA0MDFmODNhLCAweDA0MDIwMDA4LCAweDQwMGMwODAwLCAweDA0MDFmZmU4LAorCTB4MDQwMDAwMDQsIDB4MDQwMWY4MjYsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHgwNDAxZjgyMiwgMHg4MDAwMDU4MCwgMHgwNDAxZjdmZCwKKwkweDRjMDQwMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDY0LCAweDRhMDNjMDEzLAorCTB4MDM4MDAzMDAsIDB4ODAwNDA4NDAsIDB4MDQwMDAwMTYsIDB4NTllMDAwMTMsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDMwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDMwMCwKKwkweDA0MDIwN2Y3LCAweDQyMDAwMDAwLCAweDAwMDAwMDY0LCAweDgwMDAwMDQwLAorCTB4MDQwMjA3ZmYsIDB4NGEwM2MwMTMsIDB4MDEwMDAwMDAsIDB4NDIwMDAwMDAsCiAJMHgwMDAwMDA2NCwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwgMHg0YTAzYzAxMywKKwkweDAyMDAwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLAorCTB4ODAwMDA1ODAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NGEwM2MwMTMsCiAJMHgwMTAwMDAwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwgMHg4MDAwMDA0MCwKLQkweDA0MDIwN2ZmLCAweDRhMDNjMDEzLCAweDAyMDAwMDAwLCAweDgyMDAwNTQwLAotCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDIsIDB4ODAwMDA1ODAsIDB4NWMwMDA4MDAsCi0JMHgxYzAxZjAwMCwgMHg0YTAzYzAxMywgMHgwMTAwMDAwMCwgMHg0MjAwMDAwMCwKKwkweDA0MDIwN2ZmLCAweDRhMDNjMDEzLCAweDAyMDAwMjAwLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsIDB4NGEwM2MwMTMsCisJMHgwMTAwMDEwMCwgMHgxYzAxZjAwMCwgMHg0MjAwMjAwMCwgMHgwMDAwMDAwOCwKKwkweDgyMDQwNTAwLCAweDAwMDAwMDgwLCAweDgwMDAwMGMyLCAweDgyMDAwNTQwLAorCTB4MDEwMDAwMDAsIDB4NDgwM2MwMTMsIDB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsCisJMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwgMHg0YTAzYzAxMywgMHgwMjAwMDIwMCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDY0LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLAorCTB4NGEwM2MwMTMsIDB4MDIwMDAwMDAsIDB4ODAwNDA4YzIsIDB4ODAxMDIwNDAsCisJMHgwNDAyMDdlYywgMHg0YTAzYzAxMywgMHgwMTAwMDEwMCwgMHg0MjAwMDAwMCwKIAkweDAwMDAwMDY0LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLCAweDRhMDNjMDEzLAogCTB4MDIwMDAyMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsCi0JMHgwNDAyMDdmZiwgMHg0YTAzYzAxMywgMHgwMTAwMDEwMCwgMHgxYzAxZjAwMCwKLQkweDQyMDAyMDAwLCAweDAwMDAwMDA4LCAweDgyMDQwNTAwLCAweDAwMDAwMDgwLAotCTB4ODAwMDAwYzIsIDB4ODIwMDA1NDAsIDB4MDEwMDAwMDAsIDB4NDgwM2MwMTMsCisJMHgwNDAyMDdmZiwgMHg1OWUwMDAxMywgMHg4MjAwMDUwMCwgMHgwMDAwMDEwMCwKKwkweDRhMDNjMDEzLCAweDAyMDAwMDAwLCAweDRjMDQwMDAwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwNjQsIDB4NTllMDAwMTMsIDB4ODIwMDA1MDAsIDB4MDAwMDAxMDAsCisJMHg4MDA0MDg0MCwgMHgwNDAwMDAwMywgMHg4MDAwMDU0MCwgMHgwNDAyMDdmYSwKKwkweDgwMDAwNTQwLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDRhMDNjMDEzLAorCTB4MDEwMDAxMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDgsIDB4ODAwMDBkODAsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwKKwkweDRhMDNjMDEzLCAweDAyMDAwMjAwLCAweDQyMDAwMDAwLCAweDAwMDAwMDY0LAorCTB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsIDB4NTllMDAwMTMsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDEwMCwgMHg4MDAwMDExMCwgMHg4MDA0MDhjMiwgMHg4MDA0MGQ0MCwKKwkweDRhMDNjMDEzLCAweDAyMDAwMDAwLCAweDgwMDgxMDQwLCAweDA0MDIwN2VkLAorCTB4NDAwNDI4MDAsIDB4MWMwMWYwMDAsIDB4NGEwM2MwMTMsIDB4MDEwMDAxMDAsCiAJMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwKIAkweDRhMDNjMDEzLCAweDAyMDAwMjAwLCAweDQyMDAwMDAwLCAweDAwMDAwMDY0LAogCTB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsIDB4NGEwM2MwMTMsIDB4MDIwMDAwMDAsCi0JMHg4MDA0MDhjMiwgMHg4MDEwMjA0MCwgMHgwNDAyMDdlYywgMHg0YTAzYzAxMywKLQkweDAxMDAwMTAwLCAweDQyMDAwMDAwLCAweDAwMDAwMDY0LCAweDgwMDAwMDQwLAotCTB4MDQwMjA3ZmYsIDB4NGEwM2MwMTMsIDB4MDIwMDAyMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDA2NCwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwgMHg1OWUwMDAxMywKLQkweDgyMDAwNTAwLCAweDAwMDAwMTAwLCAweDRhMDNjMDEzLCAweDAyMDAwMDAwLAotCTB4NGMwNDAwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwNjQsIDB4NTllMDAwMTMsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDEwMCwgMHg4MDA0MDg0MCwgMHgwNDAwMDAwMywKLQkweDgwMDAwNTQwLCAweDA0MDIwN2ZhLCAweDgwMDAwNTQwLCAweDVjMDAwODAwLAotCTB4MWMwMWYwMDAsIDB4NGEwM2MwMTMsIDB4MDEwMDAxMDAsIDB4NDIwMDEwMDAsCi0JMHgwMDAwMDAwOCwgMHg4MDAwMGQ4MCwgMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwKLQkweDgwMDAwMDQwLCAweDA0MDIwN2ZmLCAweDRhMDNjMDEzLCAweDAyMDAwMjAwLAotCTB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsCi0JMHg1OWUwMDAxMywgMHg4MjAwMDUwMCwgMHgwMDAwMDEwMCwgMHg4MDAwMDExMCwKLQkweDgwMDQwOGMyLCAweDgwMDQwZDQwLCAweDRhMDNjMDEzLCAweDAyMDAwMDAwLAotCTB4ODAwODEwNDAsIDB4MDQwMjA3ZWQsIDB4NDAwNDI4MDAsIDB4MWMwMWYwMDAsCi0JMHg0YTAzYzAxMywgMHgwMTAwMDEwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwKLQkweDgwMDAwMDQwLCAweDA0MDIwN2ZmLCAweDRhMDNjMDEzLCAweDAyMDAwMjAwLAotCTB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsCi0JMHg0YTAzYzAxMywgMHgwMjAwMDAwMCwgMHgxYzAxZjAwMCwgMHg1OWEwMDQwNywKLQkweDU5YTgwODM3LCAweDQ4MDM1MDM3LCAweDQ4MDc0NDA3LCAweDU5YTAwYTA5LAotCTB4ODIwNDA0ODAsIDB4MDAwMDAwMTQsIDB4MDQwMjEwMDMsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDdkMCwgMHg1OWE4MDAzOCwgMHg0ODA3NTAzOCwgMHg0ODAzNDIwOSwKLQkweDAyMDFmMDAwLCAweDAwMTAyMmMwLCAweDgzNmMwNTgwLCAweDAwMDAwMDAwLAotCTB4MDQwMDAwMGUsIDB4NTlhODAwMDYsIDB4NTlhMDBjMDYsIDB4ODAwNDE1ODAsCi0JMHg4MjA4MTUwMCwgMHgwMDAwMDA0MCwgMHgwMjAwMDAwMCwgMHgwMDEwMjJjMCwKLQkweDgwMDgwNTgwLCAweDQ4MDM1MDA2LCAweDAyMDFmODAwLCAweDAwMTAwNjk5LAotCTB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsIDB4NTlhMDA0MDYsIDB4NTlhODA4MDYsCi0JMHg0ODAzNTAwNiwgMHg4MDA0MGQ4MCwgMHg4YzA0MGQwYywgMHgwMjAyMDgwMCwKLQkweDAwMTAwNjk5LCAweDU5YTAwMjA3LCAweDQ4MDM1MDA3LCAweDU5YTAwNDA3LAotCTB4NDgwMzUwMDgsIDB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsIDB4ODAwNDA5YzAsCi0JMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDIwMDA1LAotCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMTYsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCi0JMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwKLQkweDAwMDAwMDA3LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU5YTAwYzA2LAotCTB4ODIwNDA1MDAsIDB4ZmZmZmZmMDAsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsCi0JMHg4MjA0MTU4MCwgMHgwMDAwMDBmZiwgMHgwNDAyMDAwNywgMHg1OWE4MDAxMCwKLQkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAxNTQwLCAweDAwMDBmZjAwLAotCTB4MDQwMWYwMTEsIDB4ODIwNDA0MDAsIDB4MDAxMDIxMGUsIDB4NTAwMDAwMDAsCi0JMHg4MDAwMDExMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDA4MCwgMHgwMjAwMDAwMCwKLQkweDAwMTAyMzEwLCAweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAotCTB4ODAwNDE1ODAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsIDB4ODQwNDA5YzAsCi0JMHg4MDA0MTU0MCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAyMDAwNSwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDAzLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAotCTB4NDhlZTYwMjEsIDB4NDgwYTYyMWMsIDB4NGEwMjY0MWMsIDB4MDAwMGJjMDksCi0JMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwKLQkweDA0MDIwMDA3LCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NDk3YTVhMDQsCi0JMHg0OTdhNTgwNSwgMHg0YTAyNWMwNCwgMHgwMDAwODAwMCwgMHg0YTAxZDgwOSwKLQkweDAwMTAyN2Y5LCAweDQ5MmU2MDA4LCAweDQyMDI3MDAwLCAweDAwMDAwMDMyLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsCi0JMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKLQkweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMTYsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4ODM2YzA1ODAsCi0JMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU5YTAwYzA2LCAweDgyMDQwNTAwLAotCTB4ZmZmZmZmMDAsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4ODIwNDE1ODAsCi0JMHgwMDAwMDBmZiwgMHgwNDAyMDAwNywgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMGZmLCAweDgyMDAxNTQwLCAweDAwMDBmZjAwLCAweDA0MDFmMDExLAotCTB4ODIwNDA0MDAsIDB4MDAxMDIxMGUsIDB4NTAwMDAwMDAsIDB4ODAwMDAxMTAsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDA4MCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMxMCwKLQkweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgwMDQxNTgwLAotCTB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsIDB4ODQwNDA5YzAsIDB4ODAwNDE1NDAsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwKLQkweDAwMDAwMDAzLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDQ4ZWU2MDIxLAotCTB4NDgwYTYyMWMsIDB4NGEwMjY0MWMsIDB4MDAwMGJjMDUsIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwgMHgwNDAyMDAwNywKLQkweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NDk3YTVhMDQsIDB4NDk3YTU4MDUsCi0JMHg0YTAyNWMwNCwgMHgwMDAwODAwMCwgMHg0YTAxZDgwOSwgMHgwMDEwMjdmOSwKLQkweDQ5MmU2MDA4LCAweDQyMDI3MDAwLCAweDAwMDAwMDMyLCAweDAyMDFmMDAwLAotCTB4MDAwMjA3YTEsIDB4NTkyYzAwMDUsIDB4ODIwMDA1ODAsIDB4MDEwMDAwMDAsCi0JMHgwMjAyMDAwMCwgMHgwMDEwMjJjMCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDQ5N2I0NDA2LCAweDQ5N2I0MjA3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsIDB4MDQwMDAwMDgsIDB4NTlhODAwNjYsCi0JMHg1OWE4MDg2YSwgMHg4MDA0MDQ4MCwgMHg1OWE4MDg2NywgMHg0ODA3NDQwNiwKLQkweDgwMDQxNDgwLCAweDQ4MGI0MjA3LCAweDQ5Njc0NDA3LCAweDU5YTgwMDBlLAotCTB4NDgwMzQyMDksIDB4NDk1ZjQ0MDksIDB4NTlhODAwMjAsIDB4NDgwMzQyMGIsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAotCTB4NTlhMDA0MDYsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMGYsIDB4NTlhODAwNjksCi0JMHg4MTY0MDQ4MCwgMHgwNDAwMTAwOCwgMHg1OWE4MDAwYiwgMHg4MTUwMDU4MCwKLQkweDA0MDAwMDA5LCAweDU5YTgwMDZhLCAweDU5YTgxMDY2LCAweDgwMDgwNTgwLAotCTB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMTgsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjMwYywgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNWZlLCAweDAyMDFmODAwLCAweDAwMTAzYzgwLCAweDAyMDFmMDAwLAotCTB4MDAxMDIyYzAsIDB4NDgwM2M4NTYsIDB4ODAwNDA5YzAsIDB4MDIwMjAwMDAsCi0JMHgwMDEwMjMxNCwgMHg1OWEwMDQwNiwgMHg4YzAwMDUxZSwgMHgwNDAwMDAwOCwKLQkweDQ4MDNjODU2LCAweDU5YTAwMjBiLCAweDgyMDAwNDgwLCAweDAwMDAwODAwLAotCTB4MDQwMDEwMTUsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMTAsIDB4NDgwM2M4NTYsCi0JMHg1OWEwMDIwYiwgMHg1OTljMGEwMSwgMHg4MDA0MDQ4MCwgMHgwNDAyMTAwMywKLQkweDAyMDFmMDAwLCAweDAwMTAyMzEwLCAweDU5YTgwMDBlLCAweDgxNjQwNTgwLAotCTB4MDQwMDAwMDksIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMTgsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjMwYywgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNSwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDU5YTgwMDI2LCAweDhjMDAwNTBhLCAweDA0MDAwN2ZhLAotCTB4NTlhMDA0MDYsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMzYsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDc1YSwgMHgwNDAwMDdmNCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwKLQkweDA0MDAwN2YxLCAweDQ5N2E1YTA0LCAweDU5YTAwNDA2LCAweDQ4MDI2MjBhLAotCTB4NTlhMDAyMDksIDB4NDgwMjY0MGEsIDB4NTlhMDA0MDksIDB4NDgwMjYyMGIsCi0JMHg1OWEwMDIwZCwgMHg0ODAyNjIwYywgMHg1OWEwMDQwZCwgMHg0ODAyNjQwYywKLQkweDU5YTAwMjBlLCAweDQ4MDI2MjBkLCAweDU5YTAwNDBlLCAweDQ4MDI2NDBkLAotCTB4NTlhMDAyMTAsIDB4NDgwMjYyMGUsIDB4NTlhMDA0MTAsIDB4NDgwMjY0MGUsCi0JMHg1OWEwMDIwYiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmYywgMHg4MDAwMDEwNCwKLQkweDQ4MDI2NDBiLCAweDA0MDFmOWQ5LCAweDA0MDAwN2Q3LCAweDQ4ZWU2MDIxLAotCTB4NThlZTU4MGQsIDB4NTkzMDAyMGUsIDB4NTkzMDFjMGUsIDB4OTAwYzE5YzAsCi0JMHg4MDBjMWQ0MCwgMHg1OTMwMDIwYywgMHg1OTMwMTQwYywgMHg5MDA4MTFjMCwKLQkweDgwMDgxNTQwLCAweDU5MmMwYTA1LCAweDgzMmMwNDAwLCAweDAwMDAwMDA2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDNhMjUsIDB4NGEwMWQ4MDksIDB4MDAxMDI5ZTUsCi0JMHg0YTAzNDAwMCwgMHgwMDAwMDAwMSwgMHg0OTMzNDAwMSwgMHgxYzAxZjAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDAyMDFmODAwLCAweDAwMTAwYWUwLAotCTB4MDQwMWY4NmQsIDB4NDk3YjUwNTcsIDB4NDIwMWQwMDAsIDB4MDAwMDI3MTAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjBjNiwgMHg1OWM0MDg4MCwgMHg0YzA0MDAwMCwKLQkweDU5YzQwOGEzLCAweDRjMDQwMDAwLCAweDQ5N2I0MDAyLCAweDA0MDFmODc2LAotCTB4MDQwMWY4OTMsIDB4NGEwM2EwMDUsIDB4MTAwMDAwMDAsIDB4MDQwMWY4YjQsCi0JMHgwNDAxZjkwMSwgMHgwNDAwMDA0OCwgMHg1OWM4MDAwMSwgMHg4MDAwMDFjMCwKLQkweDA0MDAwN2ZjLCAweDU5YzgwMDE4LCAweDgyMDAwNTAwLCAweGYwMDAwMDAwLAotCTB4NTljMDA4MDgsIDB4ODIwNDBkMDAsIDB4MGZmZmZmZmYsIDB4ODAwNDA1NDAsCi0JMHg0ODAzODAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwMGVjMSwgMHg1OWMwMDAwNiwKLQkweDRhMDM4MDA2LCAweDEwMDAwMDAwLCAweDU5YzAwMDA5LCAweDgyMDAwZDAwLAotCTB4MDBlMDAwMDAsIDB4MDQwMjAwMjQsIDB4NGEwMzkwMGQsIDB4MDAwMDAwMDAsCi0JMHg1OWM4MDAyMCwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwgMHg4MjAwMDU4MCwKLQkweDMyMDAwMDAwLCAweDA0MDIwMDFjLCAweDRhMDM5MDBkLCAweDAwMDAwMDAxLAotCTB4NTljODAwMjAsIDB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsIDB4ODIwMDA1ODAsCi0JMHhlMTAwMDAwMCwgMHgwNDAyMDAxNCwgMHg0YTAzOTAwZCwgMHgwMDAwMDAwMCwKLQkweDU5YzgwMDIwLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDRhMDM5MDBkLAotCTB4MDAwMDAwMDAsIDB4NTljODA4MjEsIDB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsCi0JMHg4MDA0MDU4MCwgMHgwNDAyMDAwOCwgMHg1OWE4MDAxMCwgMHg4MDA0MDU4MCwKLQkweDA0MDIwMDA1LCAweDU5YzQwMDA1LCAweDgyMDAwNTAwLCAweDAwMDAwMGYwLAotCTB4MDQwMDAwMDYsIDB4NDgwM2M4NTYsIDB4MDQwMWY4ZDcsIDB4NGEwMzUwNTcsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwgMHgwNDAxZjhlMSwgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDY0LCAweDgwMDAwMDQwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAotCTB4NTljMDA4MDcsIDB4ODIwNDBkMDAsIDB4MDAwMDAwMGMsIDB4MDQwMDA3ZmEsCi0JMHgwNDAxZjAwMywgMHg0YTAzNTA1NywgMHgwMDAwMDAwMSwgMHgwNDAxZjhkYSwKLQkweDAyMDFmODAwLCAweDAwMTA2ZjM2LCAweDA0MDFmODE4LCAweDQyMDFkMDAwLAotCTB4MDAwMTg2YTAsIDB4MDIwMWY4MDAsIDB4MDAxMDYwYzYsIDB4NWMwMDA4MDAsCi0JMHg0ODA3ODhhMywgMHg1YzAwMDgwMCwgMHg0ODA3ODg4MCwgMHg1OWE4MDA1NywKLQkweDgwMDAwMWMwLCAweDAyMDAwMDAwLCAweDAwMTAyMmMwLCAweDAyMDFmMDAwLAotCTB4MDAxMDIzMTgsIDB4NTk5YzAyMDEsIDB4NDgwMzUwNTksIDB4NDE3ODA4MDAsCi0JMHg0MjAwMTAwMCwgMHgwMDAwM2IxMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjZhMCwKLQkweDQ4MGI1MDVhLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTA2YzRiLAotCTB4NTliODAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwMywgMHgwNDAyMDAwMywgMHg0YTAzNzBlOCwgMHgwMDAwMDAwMSwKLQkweDFjMDFmMDAwLCAweDQyMDM4MDAwLCAweDAwMDA3NzAwLCAweDRhMDM4MDA2LAotCTB4MzAwMDAwMDAsIDB4NTljMDAwMDcsIDB4OGMwMDA1MGEsIDB4MDQwMjA3ZmUsCi0JMHg1OWMwMDAwNiwgMHg1OWEwMDIwOSwgMHg1OWEwMGMwOSwgMHg5MDA0MDljMCwKLQkweDgwMDQwZDQwLCAweDQ4MDc4MDAxLCAweDU5YTAwMjBlLCAweDU5YTAwYzBlLAotCTB4OTAwNDA5YzAsIDB4ODAwNDBkNDAsIDB4NDgwNzgwMDAsIDB4NTlhMDAyMGIsCi0JMHg4MjAwMDUwMCwgMHgwMDAwZmZmYywgMHg0ODAzODAwMiwgMHg0ODAzODAwMywKLQkweDQ4MDM4MDA1LCAweDQ5N2I5MDA5LCAweDU5ZTAwMDAzLCAweDgyMDAwNTQwLAotCTB4MDAwMDgwNjAsIDB4NDgwM2MwMDMsIDB4MWMwMWYwMDAsIDB4NDE3ODA4MDAsCi0JMHg4MDA3YTBjYSwgMHg4M2QzYTQwMCwgMHgwMDAwNzYwMCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMTAxMzQ1LCAweDRhMDNhMDBhLAotCTB4MDAwMDAwMDEsIDB4NGEwM2EwMDUsIDB4MjAwMDAwMDAsIDB4NTlkMDAwMDYsCi0JMHg0YTAzYTAwNSwgMHgzMDAwMDAwMCwgMHg1OWQwMDAwNiwgMHg4YzAwMDUwYSwKLQkweDA0MDIwN2ZlLCAweDU5ZDAwMDA1LCAweDU5YTAwMjEwLCAweDU5YTAwYzEwLAotCTB4OTAwNDA5YzAsIDB4ODAwNDBkNDAsIDB4NDgwN2EwMDEsIDB4NTlhMDAyMGQsCi0JMHg1OWEwMGMwZCwgMHg5MDA0MDljMCwgMHg4MDA0MGQ0MCwgMHg0ODA3YTAwMCwKLQkweDU5YTAwMjBiLCAweDgyMDAwNTAwLCAweDAwMDBmZmZjLCAweDQ4MDNhMDAzLAotCTB4NDgwM2EwMDIsIDB4NDgwM2EwMDgsIDB4MWMwMWYwMDAsIDB4NTlhMDAwMDIsCi0JMHg0ODAzYzg1NywgMHg4MDAwMDFjMCwgMHgwNDAyMDA0YSwgMHg1OWE4MDA1YSwKLQkweDQ4MDM4ODgwLCAweDU5YzQwMGEzLCAweDgyMDAwNTQwLCAweDAwMDAyMDA4LAotCTB4ODQwMDA1M2EsIDB4NDgwMzg4YTMsIDB4NTljNDAwMDgsIDB4ODQwMDA1NGUsCi0JMHg4MjAwMDUwMCwgMHhmZmZmZmZlMSwgMHg0ODAzODgwOCwgMHg1OWM4MDA0MCwKLQkweDg0MDAwNTM0LCAweDQ4MDM5MDQwLCAweDA0MDFmOTAyLCAweDA0MDIwMDEzLAotCTB4NTlhODAwMTAsIDB4ODAwMDAwZDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMTEsCi0JMHg0ODAzOTEyMCwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKLQkweDgyMDAwNTQwLCAweDMyMDAwMDAwLCAweDQ4MDM5MTIxLCAweDRhMDM5MTIzLAotCTB4ZTEyOTAwMDgsIDB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsCi0JMHg0ODAzOTEyMiwgMHgwNDAxZjAxNiwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMGZmLCAweDkwMDAwOWMwLCAweDg0MDAwMWMwLCAweDgwMDQwNTQwLAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDAsIDB4NDgwMzkxMjAsIDB4NTlhODAwMTAsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU0MCwgMHgwMTAwMDAwMCwKLQkweDQ4MDM5MTIxLCAweDRhMDM5MTIzLCAweDA4MjEwMDA4LCAweDU5YTgwMDEwLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4NDgwMzkxMjIsIDB4NDk3YjkxMjQsCi0JMHg1OWE4MGM1YiwgMHg4MDA0MDgwMCwgMHg0ODA3NTQ1YiwgMHg5MDA0MDljMCwKLQkweDgyMDQwNTQwLCAweDAwMDBhYWFhLCAweDQ4MDM5MTI1LCAweDQ5N2I5MTI2LAotCTB4NDk3YjkxMjcsIDB4MDQwMWY4Y2YsIDB4MDQwMjAwMDQsIDB4NGEwMzkxMDAsCi0JMHgwMDAwZTk4MCwgMHgwNDAxZjAwMywgMHg0YTAzOTEwMCwgMHgwMDAwZTlhMCwKLQkweDFjMDFmMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDI1MDBkLAotCTB4NDIwM2UwMDAsIDB4ODAwMDAwMDAsIDB4NDBlODEwMDAsIDB4NDE3ODA4MDAsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwgMHgwMjAxZjgwMCwgMHgwMDEwNjZhMCwKLQkweDU5OTQwMDI0LCAweDgwMDgwNDAwLCAweDQ4MDMyODI0LCAweDgwMDAwNTgwLAotCTB4MWMwMWYwMDAsIDB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsCi0JMHg0ZDE0MDAwMCwgMHg0MTdhMzAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNzBkOCwKLQkweDAyMDFmODAwLCAweDAwMTA2ZGMzLCAweDVjMDIyODAwLCAweDVjMDM0ODAwLAotCTB4NWMwM2EwMDAsIDB4NWMwMzIwMDAsIDB4MWMwMWYwMDAsIDB4NTljODAwMDcsCi0JMHg4YzAwMDUwMCwgMHgwNDAwMDAwMywgMHg0YTAzOTAwZCwgMHgwMDAwMDAzMCwKLQkweDFjMDFmMDAwLCAweDRhMDM4ODA1LCAweDAwMDIwMDAwLCAweDQyMDAwODAwLAotCTB4MDAwMDAwM2MsIDB4MDIwMWY4MDAsIDB4MDAxMDEzNDUsIDB4NGEwMzg4OTEsCi0JMHgwMDAwZmZmZiwgMHg1OWM4MDAzNSwgMHg0ODAzOTAzNSwgMHg0YTAzOTAwZCwKLQkweDAwMDAwMDQwLCAweDQyMDM4MDAwLCAweDAwMDA3NzAwLCAweDAyMDFmODAwLAotCTB4MDAxMDBlYzEsIDB4NDIwMzgwMDAsIDB4MDAwMDc3MjAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMGVjMSwgMHg0YTAzYTAwNSwgMHgyMDAwMDAwMCwgMHg0YTAzYTAwNSwKLQkweDMwMDAwMDAwLCAweDU5ZDAwODA2LCAweDhjMDQwZDBhLCAweDA0MDIwN2ZlLAotCTB4MWMwMWYwMDAsIDB4NGQzMDAwMDAsIDB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsCi0JMHg1OGVlNTgwZCwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwKLQkweDVjMDI2MDAwLCAweDAyMDAwMDAwLCAweDAwMTAyMzA0LCAweDRkMzAwMDAwLAotCTB4NTlhMjYwMDEsIDB4NTlhMDAwMDAsIDB4NDAwMGIwMDAsIDB4ODAwMDAwMDAsCi0JMHg0ODAzNDAwMCwgMHg1OTJjMDAwMSwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxZSwKLQkweDQwMDI1ODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZiLCAweDU4ZWMxMDA3LAotCTB4NThlYzE4MDgsIDB4NTkyYzBhMDUsIDB4NGQyYzAwMDAsIDB4NThlYzAwMGQsCi0JMHg0MDAyNTgwMCwgMHg1OTJjMDIwNCwgMHg1YzAyNTgwMCwgMHg4MjAwMDU4MCwKLQkweDAwMDAwMTAzLCAweDA0MDAwMDA4LCAweDgzMmMwNDAwLCAweDAwMDAwMDA2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDNhMjUsIDB4NGEwMWQ4MDksIDB4MDAxMDI5ZTUsCi0JMHgwNDAxZjAwNywgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwKLQkweDAwMTAzYTI4LCAweDRhMDFkODA5LCAweDAwMTAyOWU1LCAweDVjMDI2MDAwLAotCTB4MWMwMWYwMDAsIDB4NThlYzAwMGQsIDB4NDAwMjU4MDAsIDB4NTkyYzAyMDQsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDEwMywgMHgwNDAyMDAwNiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzdkLCAweDVjMDI2MDAwLCAweDAyMDFmMDAwLCAweDAwMTAyMmMwLAotCTB4NThlYzAwMGQsIDB4NDAwMjU4MDAsIDB4NTkyYzA0MDQsIDB4ODQwMDA1NWUsCi0JMHg0ODAyNWMwNCwgMHg0MjAyODgwMCwgMHgwMDAwMDdmZCwgMHg0MjAwMzAwMCwKLQkweDAwZmZmZmZkLCAweDAyMDFmODAwLCAweDAwMTA0NWE2LCAweDA0MDAwMDAzLAotCTB4ODAwMDA1ODAsIDB4MDQwMWYwMDQsIDB4NTlhMjYwMDEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTM3ZCwgMHg1YzAyNjAwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMwYywKLQkweDRkMzAwMDAwLCAweDRhMDFkODA5LCAweDAwMTAyYTM4LCAweDA0MDFmN2RjLAotCTB4NTkyYzAwMDUsIDB4ODIwMDA1ODAsIDB4MDEwMDAwMDAsIDB4MDIwMDAwMDAsCi0JMHgwMDEwMjMxOCwgMHg0ZDMwMDAwMCwgMHg1OWEyNjAwMSwgMHg1OTMwMDIwYiwKLQkweDU5MzAxYzBhLCAweDkwMDAwMWMwLCAweDgwMGMxZDQwLCAweDU5MzAwNDBkLAotCTB4NTkzMDEyMGQsIDB4OTAwMDAxYzAsIDB4ODAwODE1NDAsIDB4NTkyYzBhMDUsCi0JMHg4MzJjMDQwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwM2EyOCwKLQkweDRhMDFkODA5LCAweDAwMTAyOWU1LCAweDRhMDM0MDAwLCAweDAwMDAwMDAxLAotCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGMzMDAwMDAsCi0JMHg1OTMwMDQwYiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwgMHgwNDAwMTAwNCwKLQkweDRhMDI1YTA1LCAweDAwMDAwMDBlLCAweDA0MDFmMDAzLCAweDQ4MDI1YTA1LAotCTB4MDQwMWYwMGMsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMGEsIDB4NGMwNDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwgMHg1YzAwMDgwMCwgMHgwNDAwMDAwMywKLQkweDQwMDQwMDAwLCAweDA0MDFmN2YwLCAweDgwMDAwNTgwLCAweDA0MDFmMDAzLAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMDYwMDAsIDB4MWMwMWYwMDAsCi0JMHg1OWEwMDIwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA0NCwgMHgxYzAxZjAwMCwKLQkweDQ4MDdjODU3LCAweDgwMDQwOWMwLCAweDA0MDAwMDBjLCAweDAyMDFmODAwLAotCTB4MDAxMDE2NTAsIDB4MDQwMjAwMDksIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTg4YywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwKLQkweDAyMDFmODAwLCAweDAwMTAxODIxLCAweDU5YTAwNDA2LCAweDgyMDAwNTAwLAotCTB4MDAwMDAwMDcsIDB4MGMwMWYwMDEsIDB4MDAxMDJhOGMsIDB4MDAxMDJhYTEsCi0JMHgwMDEwMmFiNywgMHgwMDEwMmE4YSwgMHgwMDEwMmE4YSwgMHgwMDEwMmE4YSwKLQkweDAwMTAyYThhLCAweDAwMTAyYThhLCAweDAyMDFmMDAwLCAweDAwMTAyMzEwLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsCi0JMHg4MjA0MDU0MCwgMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwgMHgwMDAwMDBjMCwKLQkweDAyMDFmODAwLCAweDAwMTAxOTQ0LCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMDgsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwKLQkweDA0MDFmMDBiLCAweDQyMDAwODAwLCAweDAwMDAwMGMwLCAweDAyMDFmODAwLAotCTB4MDAxMDE5M2YsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDBjMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwgMHg1OWM4MDA0MCwKLQkweDRjMDAwMDAwLCAweDU5YTgwMDEwLCAweDRjMDAwMDAwLCAweDU5YzQwMGEzLAotCTB4NGMwMDAwMDAsIDB4NTljNDAwMDgsIDB4NGMwMDAwMDAsIDB4MDQwMWY5MTEsCi0JMHgwNDAwMDAyMSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OWE4MDgyMSwKLQkweDgwMDQwOWMwLCAweDAyMDIwMDAwLCAweDAwMTAyMzE0LCAweDAyMDFmODAwLAotCTB4MDAxMDUxM2IsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMTYsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywKLQkweDAyMDIwMDAwLCAweDAwMTAyMzE0LCAweDU5YzQwOGE0LCAweDgyMDQwZDAwLAotCTB4MDAwMDAwMGYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsIDB4MDIwMjAwMDAsCi0JMHgwMDEwMjMxNCwgMHg1OWM4MDA0MCwgMHg0YzAwMDAwMCwgMHg1OWE4MDAxMCwKLQkweDRjMDAwMDAwLCAweDU5YzQwMGEzLCAweDRjMDAwMDAwLCAweDU5YzQwMDA4LAotCTB4NGMwMDAwMDAsIDB4NTljNDAwODAsIDB4NGMwMDAwMDAsIDB4NTlhMDAyMGYsCi0JMHg1OWEwYmMwZiwgMHg5MDVjYjljMCwgMHg4MDVjYmQ0MCwgMHg0MTc4NDgwMCwKLQkweDQxNzg1MDAwLCAweDQxNzg1ODAwLCAweDQxNzg5MDAwLCAweDQxNzg5ODAwLAotCTB4MDQwMWZlMjEsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMGFlMCwgMHg0MTc4YzAwMCwgMHg0OTdiNDAwMiwgMHgwNDAxZjk1YywKLQkweDA0MDFmOWFhLCAweDU5YTAwMjBjLCAweDU5YTAwYzBjLCAweDgwMDQwZDQwLAotCTB4MDQwMDAwMDIsIDB4MDQwMWY5ZmIsIDB4MDQwMWY5ZmEsIDB4MDQwMWZlNjgsCi0JMHg4MDYwYzFjMCwgMHgwNDAyMDAxNCwgMHgwNDAxZmE5OCwgMHgwNDAxZmViMiwKLQkweDA0MDIwMDBlLCAweDAyMDFmODAwLCAweDAwMTAxOGQzLCAweDA0MDIwMDA4LAotCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMTcsIDB4MDIwMWY4MDAsIDB4MDAxMDIzMGMsCisJMHgxYzAxZjAwMCwgMHg1OWEwMDQwNywgMHg1OWE4MDgzNywgMHg0ODAzNTAzNywKKwkweDQ4MDc0NDA3LCAweDU5YTAwYTA5LCAweDgyMDQwNDgwLCAweDAwMDAwMDE0LAorCTB4MDQwMjEwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDA3ZDAsIDB4NTlhODAwMzgsCisJMHg0ODA3NTAzOCwgMHg0ODAzNDIwOSwgMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwKKwkweDgzNmMwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDBlLCAweDU5YTgwMDA2LAorCTB4NTlhMDBjMDYsIDB4ODAwNDE1ODAsIDB4ODIwODE1MDAsIDB4MDAwMDAwNDAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjA2NiwgMHg4MDA4MDU4MCwgMHg0ODAzNTAwNiwKKwkweDAyMDFmODAwLCAweDAwMTAwNmRmLCAweDAyMDFmMDAwLCAweDAwMTAyMDY2LAorCTB4NTlhMDA0MDYsIDB4NTlhODA4MDYsIDB4NDgwMzUwMDYsIDB4ODAwNDBkODAsCisJMHg4YzA0MGQwYywgMHgwMjAyMDgwMCwgMHgwMDEwMDZkZiwgMHg1OWEwMDIwNywKKwkweDQ4MDM1MDA3LCAweDU5YTAwNDA3LCAweDQ4MDM1MDA4LCAweDAyMDFmMDAwLAorCTB4MDAxMDIwNjYsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZTBkLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDE2LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwKKwkweDAwMTAyMGIyLCAweDU5YTAwYzA2LCAweDgyMDQwNTAwLCAweGZmZmZmZjAwLAorCTB4MDIwMjAwMDAsIDB4MDAxMDIwYjYsIDB4ODIwNDE1ODAsIDB4MDAwMDAwZmYsCisJMHgwNDAyMDAwNywgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDgyMDAxNTQwLCAweDAwMDBmZjAwLCAweDA0MDFmMDExLCAweDgyMDQwNDAwLAorCTB4MDAxMDFlYjUsIDB4NTAwMDAwMDAsIDB4ODAwMDAxMTAsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDA4MCwgMHgwMjAwMDAwMCwgMHgwMDEwMjBiNiwgMHg1OWE4MDAxMCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgwMDQxNTgwLCAweDAyMDAwMDAwLAorCTB4MDAxMDIwYjYsIDB4ODQwNDA5YzAsIDB4ODAwNDE1NDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDg5MiwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDQ4ZWU2MDIxLCAweDQ4MGE2MjFjLAorCTB4NGEwMjY0MWMsIDB4MDAwMGJjMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzgxYSwgMHgwNDAyMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMDIwOGI0LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLAorCTB4MDAxMDIwYjIsIDB4NDk3YTVhMDQsIDB4NDk3YTU4MDUsIDB4NGEwMjVjMDQsCisJMHgwMDAwODAwMCwgMHg0YTAxZDgwOSwgMHgwMDEwMjY1NywgMHg0OTJlNjAwOCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDMyLCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LAorCTB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwKKwkweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDE2LCAweDAyMDFmMDAwLAorCTB4MDAxMDIwYjIsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDUsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwKKwkweDU5YTAwYzA2LCAweDgyMDQwNTAwLCAweGZmZmZmZjAwLCAweDAyMDIwMDAwLAorCTB4MDAxMDIwYjYsIDB4ODIwNDE1ODAsIDB4MDAwMDAwZmYsIDB4MDQwMjAwMDcsCisJMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMTU0MCwKKwkweDAwMDBmZjAwLCAweDA0MDFmMDExLCAweDgyMDQwNDAwLCAweDAwMTAxZWI1LAorCTB4NTAwMDAwMDAsIDB4ODAwMDAxMTAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwODAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjBiNiwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMGZmLCAweDgwMDQxNTgwLCAweDAyMDAwMDAwLCAweDAwMTAyMGI2LAorCTB4ODQwNDA5YzAsIDB4ODAwNDE1NDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwKKwkweDAwMTAyMGIyLCAweDQ4ZWU2MDIxLCAweDQ4MGE2MjFjLCAweDRhMDI2NDFjLAorCTB4MDAwMGJjMDUsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwMzgxYSwgMHgwNDAyMDAwNywgMHgwMjAxZjgwMCwgMHgwMDAyMDhiNCwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4NDk3YTVhMDQsIDB4NDk3YTU4MDUsIDB4NGEwMjVjMDQsIDB4MDAwMDgwMDAsCisJMHg0YTAxZDgwOSwgMHgwMDEwMjY1NywgMHg0OTJlNjAwOCwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDMyLCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LCAweDU5MmMwMDA1LAorCTB4ODIwMDA1ODAsIDB4MDEwMDAwMDAsIDB4MDIwMjAwMDAsIDB4MDAxMDIwNjYsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwKKwkweDQ5N2I0NDA2LCAweDQ5N2I0MjA3LCAweDAyMDFmODAwLCAweDAwMTAzOTNlLAorCTB4MDQwMDAwMDgsIDB4NTlhODAwNjYsIDB4NTlhODA4NmEsIDB4ODAwNDA0ODAsCisJMHg1OWE4MDg2NywgMHg0ODA3NDQwNiwgMHg4MDA0MTQ4MCwgMHg0ODBiNDIwNywKKwkweDQ5Njc0NDA3LCAweDU5YTgwMDBlLCAweDQ4MDM0MjA5LCAweDQ5NWY0NDA5LAorCTB4NTlhODAwMjAsIDB4NDgwMzQyMGIsIDB4MDIwMWYwMDAsIDB4MDAxMDIwNjYsCisJMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDU5YTAwNDA2LCAweDhjMDAwNTAwLAorCTB4MDQwMjAwMGYsIDB4NTlhODAwNjksIDB4ODE2NDA0ODAsIDB4MDQwMDEwMDgsCisJMHg1OWE4MDAwYiwgMHg4MTUwMDU4MCwgMHgwNDAwMDAwOSwgMHg1OWE4MDA2YSwKKwkweDU5YTgxMDY2LCAweDgwMDgwNTgwLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMTgsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NTlhODAwMDUsCisJMHg4NDAwMDU1OCwgMHg0ODAzNTAwNSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTAxNjY4LCAweDAyMDFmODAwLCAweDAwMTAzYTlmLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwNjYsIDB4NDgwM2M4NTYsIDB4ODAwNDA5YzAsCisJMHgwMjAyMDAwMCwgMHgwMDEwMjBiYSwgMHg1OWEwMDQwNiwgMHg4YzAwMDUxZSwKKwkweDA0MDAwMDA4LCAweDQ4MDNjODU2LCAweDU5YTAwMjBiLCAweDgyMDAwNDgwLAorCTB4MDAwMDA4MDAsIDB4MDQwMDEwMTUsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjYsCisJMHg0ODAzYzg1NiwgMHg1OWEwMDIwYiwgMHg1OTljMGEwMSwgMHg4MDA0MDQ4MCwKKwkweDA0MDIxMDAzLCAweDAyMDFmMDAwLCAweDAwMTAyMGI2LCAweDU5YTgwMDBlLAorCTB4ODE2NDA1ODAsIDB4MDQwMDAwMDksIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMTgsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNSwKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDU5YTgwMDI2LCAweDhjMDAwNTBhLAorCTB4MDQwMDA3ZmEsIDB4NTlhMDA0MDYsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMzYsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwNDAwMDdmNCwgMHgwMjAxZjgwMCwKKwkweDAwMTAzODFhLCAweDA0MDAwN2YxLCAweDQ5N2E1YTA0LCAweDU5YTAwNDA2LAorCTB4NDgwMjYyMGEsIDB4NTlhMDAyMDksIDB4NDgwMjY0MGEsIDB4NTlhMDA0MDksCisJMHg0ODAyNjIwYiwgMHg1OWEwMDIwZCwgMHg0ODAyNjIwYywgMHg1OWEwMDQwZCwKKwkweDQ4MDI2NDBjLCAweDU5YTAwMjBlLCAweDQ4MDI2MjBkLCAweDU5YTAwNDBlLAorCTB4NDgwMjY0MGQsIDB4NTlhMDAyMTAsIDB4NDgwMjYyMGUsIDB4NTlhMDA0MTAsCisJMHg0ODAyNjQwZSwgMHg1OWEwMDIwYiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmYywKKwkweDgwMDAwMTA0LCAweDQ4MDI2NDBiLCAweDA0MDFmOWQ5LCAweDA0MDAwN2Q3LAorCTB4NDhlZTYwMjEsIDB4NThlZTU4MGQsIDB4NTkzMDAyMGUsIDB4NTkzMDFjMGUsCisJMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg1OTMwMDIwYywgMHg1OTMwMTQwYywKKwkweDkwMDgxMWMwLCAweDgwMDgxNTQwLCAweDU5MmMwYTA1LCAweDgzMmMwNDAwLAorCTB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDM4M2UsIDB4NGEwMWQ4MDksCisJMHgwMDEwMjg0NiwgMHg0YTAzNDAwMCwgMHgwMDAwMDAwMSwgMHg0OTMzNDAwMSwKKwkweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTA2OThjLCAweDAyMDFmODAwLAorCTB4MDAxMDBiMjksIDB4MDQwMWY4NmQsIDB4NDk3YjUwNTcsIDB4NDIwMWQwMDAsCisJMHgwMDAwMjcxMCwgMHgwMjAxZjgwMCwgMHgwMDEwNWUwNiwgMHg1OWM0MDg4MCwKKwkweDRjMDQwMDAwLCAweDU5YzQwOGEzLCAweDRjMDQwMDAwLCAweDQ5N2I0MDAyLAorCTB4MDQwMWY4NzYsIDB4MDQwMWY4OTMsIDB4NGEwM2EwMDUsIDB4MTAwMDAwMDAsCisJMHgwNDAxZjhiNCwgMHgwNDAxZjkwMSwgMHgwNDAwMDA0OCwgMHg1OWM4MDAwMSwKKwkweDgwMDAwMWMwLCAweDA0MDAwN2ZjLCAweDU5YzgwMDE4LCAweDgyMDAwNTAwLAorCTB4ZjAwMDAwMDAsIDB4NTljMDA4MDgsIDB4ODIwNDBkMDAsIDB4MGZmZmZmZmYsCisJMHg4MDA0MDU0MCwgMHg0ODAzODAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwMGYwZiwKKwkweDU5YzAwMDA2LCAweDRhMDM4MDA2LCAweDEwMDAwMDAwLCAweDU5YzAwMDA5LAorCTB4ODIwMDBkMDAsIDB4MDBlMDAwMDAsIDB4MDQwMjAwMjQsIDB4NGEwMzkwMGQsCisJMHgwMDAwMDAwMCwgMHg1OWM4MDAyMCwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwKKwkweDgyMDAwNTgwLCAweDMyMDAwMDAwLCAweDA0MDIwMDFjLCAweDRhMDM5MDBkLAorCTB4MDAwMDAwMDEsIDB4NTljODAwMjAsIDB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsCisJMHg4MjAwMDU4MCwgMHhlMTAwMDAwMCwgMHgwNDAyMDAxNCwgMHg0YTAzOTAwZCwKKwkweDAwMDAwMDAwLCAweDU5YzgwMDIwLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAorCTB4NGEwMzkwMGQsIDB4MDAwMDAwMDAsIDB4NTljODA4MjEsIDB4ODIwNDBkMDAsCisJMHgwMGZmZmZmZiwgMHg4MDA0MDU4MCwgMHgwNDAyMDAwOCwgMHg1OWE4MDAxMCwKKwkweDgwMDQwNTgwLCAweDA0MDIwMDA1LCAweDU5YzQwMDA1LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwZjAsIDB4MDQwMDAwMDYsIDB4NDgwM2M4NTYsIDB4MDQwMWY4ZDcsCisJMHg0YTAzNTA1NywgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwgMHgwNDAxZjhlMSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDY0LCAweDgwMDAwMDQwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NTljMDA4MDcsIDB4ODIwNDBkMDAsIDB4MDAwMDAwMGMsCisJMHgwNDAwMDdmYSwgMHgwNDAxZjAwMywgMHg0YTAzNTA1NywgMHgwMDAwMDAwMSwKKwkweDA0MDFmOGRhLCAweDAyMDFmODAwLCAweDAwMTA2YzhhLCAweDA0MDFmODE4LAorCTB4NDIwMWQwMDAsIDB4MDAwMTg2YTAsIDB4MDIwMWY4MDAsIDB4MDAxMDVlMDYsCisJMHg1YzAwMDgwMCwgMHg0ODA3ODhhMywgMHg1YzAwMDgwMCwgMHg0ODA3ODg4MCwKKwkweDU5YTgwMDU3LCAweDgwMDAwMWMwLCAweDAyMDAwMDAwLCAweDAwMTAyMDY2LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYmUsIDB4NTk5YzAyMDEsIDB4NDgwMzUwNTksCisJMHg0MTc4MDgwMCwgMHg0MjAwMTAwMCwgMHgwMDAwM2IxMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2M2VlLCAweDQ4MGI1MDVhLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDY5ODIsIDB4NTliODAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAwMywgMHg0YTAzNzBlOCwKKwkweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQyMDM4MDAwLCAweDAwMDA3NzAwLAorCTB4NGEwMzgwMDYsIDB4MzAwMDAwMDAsIDB4NTljMDAwMDcsIDB4OGMwMDA1MGEsCisJMHgwNDAyMDdmZSwgMHg1OWMwMDAwNiwgMHg1OWEwMDIwOSwgMHg1OWEwMGMwOSwKKwkweDkwMDQwOWMwLCAweDgwMDQwZDQwLCAweDQ4MDc4MDAxLCAweDU5YTAwMjBlLAorCTB4NTlhMDBjMGUsIDB4OTAwNDA5YzAsIDB4ODAwNDBkNDAsIDB4NDgwNzgwMDAsCisJMHg1OWEwMDIwYiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmYywgMHg0ODAzODAwMiwKKwkweDQ4MDM4MDAzLCAweDQ4MDM4MDA1LCAweDQ5N2I5MDA5LCAweDU5ZTAwMDAzLAorCTB4ODIwMDA1NDAsIDB4MDAwMDgwNjAsIDB4NDgwM2MwMDMsIDB4MWMwMWYwMDAsCisJMHg0MTc4MDgwMCwgMHg4MDA3YTBjYSwgMHg4M2QzYTQwMCwgMHgwMDAwNzYwMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMTAxMzk1LAorCTB4NGEwM2EwMGEsIDB4MDAwMDAwMDEsIDB4NGEwM2EwMDUsIDB4MjAwMDAwMDAsCisJMHg1OWQwMDAwNiwgMHg0YTAzYTAwNSwgMHgzMDAwMDAwMCwgMHg1OWQwMDAwNiwKKwkweDhjMDAwNTBhLCAweDA0MDIwN2ZlLCAweDU5ZDAwMDA1LCAweDU5YTAwMjEwLAorCTB4NTlhMDBjMTAsIDB4OTAwNDA5YzAsIDB4ODAwNDBkNDAsIDB4NDgwN2EwMDEsCisJMHg1OWEwMDIwZCwgMHg1OWEwMGMwZCwgMHg5MDA0MDljMCwgMHg4MDA0MGQ0MCwKKwkweDQ4MDdhMDAwLCAweDU5YTAwMjBiLCAweDgyMDAwNTAwLCAweDAwMDBmZmZjLAorCTB4NDgwM2EwMDMsIDB4NDgwM2EwMDIsIDB4NDgwM2EwMDgsIDB4MWMwMWYwMDAsCisJMHg1OWEwMDAwMiwgMHg0ODAzYzg1NywgMHg4MDAwMDFjMCwgMHgwNDAyMDA0YSwKKwkweDU5YTgwMDVhLCAweDQ4MDM4ODgwLCAweDU5YzQwMGEzLCAweDgyMDAwNTQwLAorCTB4MDAwMDIwMDgsIDB4ODQwMDA1M2EsIDB4NDgwMzg4YTMsIDB4NTljNDAwMDgsCisJMHg4NDAwMDU0ZSwgMHg4MjAwMDUwMCwgMHhmZmZmZmZlMSwgMHg0ODAzODgwOCwKKwkweDU5YzgwMDQwLCAweDg0MDAwNTM0LCAweDQ4MDM5MDQwLCAweDA0MDFmOTAyLAorCTB4MDQwMjAwMTMsIDB4NTlhODAwMTAsIDB4ODAwMDAwZDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAxMSwgMHg0ODAzOTEyMCwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwKKwkweDAwZmZmZmZmLCAweDgyMDAwNTQwLCAweDMyMDAwMDAwLCAweDQ4MDM5MTIxLAorCTB4NGEwMzkxMjMsIDB4ZTEyOTAwMDgsIDB4NTlhODAwMTAsIDB4ODIwMDA1MDAsCisJMHgwMGZmZmZmZiwgMHg0ODAzOTEyMiwgMHgwNDAxZjAxNiwgMHg1OWE4MDAxMCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDkwMDAwOWMwLCAweDg0MDAwMWMwLAorCTB4ODAwNDA1NDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDAsIDB4NDgwMzkxMjAsCisJMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU0MCwKKwkweDAxMDAwMDAwLCAweDQ4MDM5MTIxLCAweDRhMDM5MTIzLCAweDA4MjEwMDA4LAorCTB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4NDgwMzkxMjIsCisJMHg0OTdiOTEyNCwgMHg1OWE4MGM1YiwgMHg4MDA0MDgwMCwgMHg0ODA3NTQ1YiwKKwkweDkwMDQwOWMwLCAweDgyMDQwNTQwLCAweDAwMDBhYWFhLCAweDQ4MDM5MTI1LAorCTB4NDk3YjkxMjYsIDB4NDk3YjkxMjcsIDB4MDQwMWY4Y2YsIDB4MDQwMjAwMDQsCisJMHg0YTAzOTEwMCwgMHgwMDAwZTk4MCwgMHgwNDAxZjAwMywgMHg0YTAzOTEwMCwKKwkweDAwMDBlOWEwLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4MDQwMjUwMGQsIDB4NDIwM2UwMDAsIDB4ODAwMDAwMDAsIDB4NDBlODEwMDAsCisJMHg0MTc4MDgwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDA2NCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2M2VlLCAweDU5OTQwMDI0LCAweDgwMDgwNDAwLCAweDQ4MDMyODI0LAorCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsCisJMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwgMHg0MTdhMzAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZTJmLCAweDAyMDFmODAwLCAweDAwMTA2YjEzLCAweDVjMDIyODAwLAorCTB4NWMwMzQ4MDAsIDB4NWMwM2EwMDAsIDB4NWMwMzIwMDAsIDB4MWMwMWYwMDAsCisJMHg1OWM4MDAwNywgMHg4YzAwMDUwMCwgMHgwNDAwMDAwMywgMHg0YTAzOTAwZCwKKwkweDAwMDAwMDMwLCAweDFjMDFmMDAwLCAweDRhMDM4ODA1LCAweDAwMDIwMDAwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwM2MsIDB4MDIwMWY4MDAsIDB4MDAxMDEzOTUsCisJMHg0YTAzODg5MSwgMHgwMDAwZmZmZiwgMHg1OWM4MDAzNSwgMHg0ODAzOTAzNSwKKwkweDRhMDM5MDBkLCAweDAwMDAwMDQwLCAweDQyMDM4MDAwLCAweDAwMDA3NzAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDBmMGYsIDB4NDIwMzgwMDAsIDB4MDAwMDc3MjAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGYwZiwgMHg0YTAzYTAwNSwgMHgyMDAwMDAwMCwKKwkweDRhMDNhMDA1LCAweDMwMDAwMDAwLCAweDU5ZDAwODA2LCAweDhjMDQwZDBhLAorCTB4MDQwMjA3ZmUsIDB4MWMwMWYwMDAsIDB4NGQzMDAwMDAsIDB4NDAzMWQ4MDAsCisJMHg1OGVmNDAwYiwgMHg1OGVlNTgwZCwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMjAwLCAweDVjMDI2MDAwLCAweDAyMDAwMDAwLCAweDAwMTAyMGFhLAorCTB4NGQzMDAwMDAsIDB4NTlhMjYwMDEsIDB4NTlhMDAwMDAsIDB4NDAwMGIwMDAsCisJMHg4MDAwMDAwMCwgMHg0ODAzNDAwMCwgMHg1OTJjMDAwMSwgMHg4MDAwMDU0MCwKKwkweDA0MDAwMDFlLCAweDQwMDI1ODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZiLAorCTB4NThlYzEwMDcsIDB4NThlYzE4MDgsIDB4NTkyYzBhMDUsIDB4NGQyYzAwMDAsCisJMHg1OGVjMDAwZCwgMHg0MDAyNTgwMCwgMHg1OTJjMDIwNCwgMHg1YzAyNTgwMCwKKwkweDgyMDAwNTgwLCAweDAwMDAwMTAzLCAweDA0MDAwMDA4LCAweDgzMmMwNDAwLAorCTB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDM4M2UsIDB4NGEwMWQ4MDksCisJMHgwMDEwMjg0NiwgMHgwNDAxZjAwNywgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTAzODQxLCAweDRhMDFkODA5LCAweDAwMTAyODQ2LAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NThlYzAwMGQsIDB4NDAwMjU4MDAsCisJMHg1OTJjMDIwNCwgMHg4MjAwMDU4MCwgMHgwMDAwMDEwMywgMHgwNDAyMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMDIwOGI0LCAweDVjMDI2MDAwLCAweDAyMDFmMDAwLAorCTB4MDAxMDIwNjYsIDB4NThlYzAwMGQsIDB4NDAwMjU4MDAsIDB4NTkyYzA0MDQsCisJMHg4NDAwMDU1ZSwgMHg0ODAyNWMwNCwgMHg0MjAyODgwMCwgMHgwMDAwMDdmZCwKKwkweDQyMDAzMDAwLCAweDAwZmZmZmZkLCAweDAyMDFmODAwLCAweDAwMTA0M2ZjLAorCTB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsIDB4MDQwMWYwMDQsIDB4NTlhMjYwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTE0NiwgMHg1YzAyNjAwMCwgMHgwMjAwMDAwMCwKKwkweDAwMTAyMGIyLCAweDRkMzAwMDAwLCAweDRhMDFkODA5LCAweDAwMTAyODk5LAorCTB4MDQwMWY3ZGMsIDB4NTkyYzAwMDUsIDB4ODIwMDA1ODAsIDB4MDEwMDAwMDAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjBiZSwgMHg0ZDMwMDAwMCwgMHg1OWEyNjAwMSwKKwkweDU5MzAwMjBiLCAweDU5MzAxYzBhLCAweDkwMDAwMWMwLCAweDgwMGMxZDQwLAorCTB4NTkzMDA0MGQsIDB4NTkzMDEyMGQsIDB4OTAwMDAxYzAsIDB4ODAwODE1NDAsCisJMHg1OTJjMGEwNSwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTAzODQxLCAweDRhMDFkODA5LCAweDAwMTAyODQ2LCAweDRhMDM0MDAwLAorCTB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg0YzMwMDAwMCwgMHg1OTMwMDQwYiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwKKwkweDA0MDAxMDA0LCAweDRhMDI1YTA1LCAweDAwMDAwMDBlLCAweDA0MDFmMDAzLAorCTB4NDgwMjVhMDUsIDB4MDQwMWYwMGMsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMGEsCisJMHg0YzA0MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMzgxYSwgMHg1YzAwMDgwMCwKKwkweDA0MDAwMDAzLCAweDQwMDQwMDAwLCAweDA0MDFmN2YwLCAweDgwMDAwNTgwLAorCTB4MDQwMWYwMDMsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMDYwMDAsCisJMHgxYzAxZjAwMCwgMHg1OWEwMDIwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA0NCwKKwkweDFjMDFmMDAwLCAweDQ4MDdjODU3LCAweDgwMDQwOWMwLCAweDA0MDAwMDBjLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE2YzEsIDB4MDQwMjAwMDksIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwMThmYSwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTAxODkyLCAweDU5YTAwNDA2LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4MGMwMWYwMDEsIDB4MDAxMDI4ZWQsCisJMHgwMDEwMjkwMiwgMHgwMDEwMjkxOCwgMHgwMDEwMjhlYiwgMHgwMDEwMjhlYiwKKwkweDAwMTAyOGViLCAweDAwMTAyOGViLCAweDAwMTAyOGViLCAweDAyMDFmMDAwLAorCTB4MDAxMDIwYjYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTlhYywgMHg4MjA0MDU0MCwgMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGMwLCAweDAyMDFmODAwLCAweDAwMTAxOWIxLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5YWMsIDB4ODIwNDA1NDAsCisJMHgwMDAwMDAwOCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxOWIxLCAweDA0MDFmMDBiLCAweDQyMDAwODAwLCAweDAwMDAwMGMwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5YWMsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMDEsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBjMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTliMSwKKwkweDU5YzgwMDQwLCAweDRjMDAwMDAwLCAweDU5YTgwMDEwLCAweDRjMDAwMDAwLAorCTB4NTljNDAwYTMsIDB4NGMwMDAwMDAsIDB4NTljNDAwMDgsIDB4NGMwMDAwMDAsCisJMHgwNDAxZjkxMSwgMHgwNDAwMDAyMSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwKKwkweDU5YTgwODIxLCAweDgwMDQwOWMwLCAweDAyMDIwMDAwLCAweDAwMTAyMGJhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAxNiwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg4MzZjMDU4MCwKKwkweDAwMDAwMDAzLCAweDAyMDIwMDAwLCAweDAwMTAyMGJhLCAweDU5YzQwOGE0LAorCTB4ODIwNDBkMDAsIDB4MDAwMDAwMGYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDAsCisJMHgwMjAyMDAwMCwgMHgwMDEwMjBiYSwgMHg1OWM4MDA0MCwgMHg0YzAwMDAwMCwKKwkweDU5YTgwMDEwLCAweDRjMDAwMDAwLCAweDU5YzQwMGEzLCAweDRjMDAwMDAwLAorCTB4NTljNDAwMDgsIDB4NGMwMDAwMDAsIDB4NTljNDAwODAsIDB4NGMwMDAwMDAsCisJMHg1OWEwMDIwZiwgMHg1OWEwYmMwZiwgMHg5MDVjYjljMCwgMHg4MDVjYmQ0MCwKKwkweDQxNzg0ODAwLCAweDQxNzg1MDAwLCAweDQxNzg1ODAwLCAweDQxNzg5MDAwLAorCTB4NDE3ODk4MDAsIDB4MDQwMWZlMjEsIDB4MDIwMWY4MDAsIDB4MDAxMDY5OGMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGIyOSwgMHg0MTc4YzAwMCwgMHg0OTdiNDAwMiwKKwkweDA0MDFmOTVjLCAweDA0MDFmOWFhLCAweDU5YTAwMjBjLCAweDU5YTAwYzBjLAorCTB4ODAwNDBkNDAsIDB4MDQwMDAwMDIsIDB4MDQwMWY5ZmIsIDB4MDQwMWY5ZmEsCisJMHgwNDAxZmU2OCwgMHg4MDYwYzFjMCwgMHgwNDAyMDAxNCwgMHgwNDAxZmE5OCwKKwkweDA0MDFmZWIyLCAweDA0MDIwMDBlLCAweDAyMDFmODAwLCAweDAwMTAxOTQxLAorCTB4MDQwMjAwMDgsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwMjBiMiwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHgwNDAxZjAwMCwKKwkweDQyMDA1ODAwLCAweDAwMDBhYWFhLCAweDA0MDFmMDU4LCAweDU5YzgwMDAxLAorCTB4ODAwMDAxYzAsIDB4MDQwMDA3ZWUsIDB4NTljODA4MDEsIDB4ODAwNDA5YzAsCisJMHgwNDAwMDAwNiwgMHgwNDAxZmE3MCwgMHg0MDI0MDAwMCwgMHg4MDI4MDU0MCwKKwkweDgwMmMwNTQwLCAweDA0MDIwMDRkLCAweDU5YTAwMDAyLCAweDgyMDAwNTgwLAorCTB4ZmVlZGJlZWYsIDB4MDQwMDAwMDQsIDB4NDIwMDg4MDAsIDB4MTAwMDAwMDAsCisJMHgwNDAxZjAwMywgMHg0MjAwODgwMCwgMHgxMDAwMDAwNCwgMHgwNDAxZmExOSwKKwkweDRhMDM0MDAyLCAweGZlZWRiZWVmLCAweDA0MDFmYTcxLCAweDA0MDFmYTk3LAorCTB4MDQwMWZlYTgsIDB4NTljNDAwMDUsIDB4OGMwMDA1MzQsIDB4MDQwMDAwMDQsCisJMHg0MjAwNTgwMCwgMHgwMDAwYmJiYiwgMHgwNDAxZjAzOCwgMHgwNDAxZmU4MywKKwkweDA0MDIwMDA3LCAweDQyMDA1ODAwLCAweDAwMDBjY2NjLCAweDQ4NWY0MjBmLAorCTB4OTA1Y2I5YzAsIDB4NDg1ZjQ0MGYsIDB4MDQwMWYwMzAsIDB4NTlhMDA0MGMsCisJMHg4MDAwMDFjMCwgMHgwNDAwMDAwZSwgMHg1OWEyNjAwMCwgMHg1OTMwMDAwZCwKKwkweDgwMDAwMWMwLCAweDA0MDIwN2JlLCAweDU5YTI2MDAxLCAweDU5MzAwODBkLAorCTB4ODAwNDA5YzAsIDB4MDQwMjA3YmEsIDB4ODA0ODkxYzAsIDB4MDQwMjA3YjgsCisJMHg4MDRjOTljMCwgMHgwNDAyMDdiNiwgMHgwNDAxZjg3YSwgMHg4MDVjYjg0MCwKKwkweDA0MDAwMDA1LCAweDQwMjQwMDAwLCAweDgwMjgwNTQwLCAweDgwMmMwNTQwLAorCTB4MDQwMjAwMWEsIDB4NDIwMDAwMDAsIDB4MDAwMzBkNDAsIDB4ODAwMDAwNDAsCisJMHgwNDAyMDAxMiwgMHg1OWMwMDAwNywgMHg4MjAwMDUwMCwgMHgwMDA1MDFjMCwKKwkweDA0MDIwMDBiLCAweDAyMDFmODAwLCAweDAwMTAxOTQxLCAweDA0MDIwMDA4LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMTcsIDB4MDIwMWY4MDAsIDB4MDAxMDIwYjIsCiAJMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHgwNDAxZjAwMCwgMHg0MjAwNTgwMCwKLQkweDAwMDBhYWFhLCAweDA0MDFmMDU4LCAweDU5YzgwMDAxLCAweDgwMDAwMWMwLAotCTB4MDQwMDA3ZWUsIDB4NTljODA4MDEsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDYsCi0JMHgwNDAxZmE3MCwgMHg0MDI0MDAwMCwgMHg4MDI4MDU0MCwgMHg4MDJjMDU0MCwKLQkweDA0MDIwMDRkLCAweDU5YTAwMDAyLCAweDgyMDAwNTgwLCAweGZlZWRiZWVmLAotCTB4MDQwMDAwMDQsIDB4NDIwMDg4MDAsIDB4MTAwMDAwMDAsIDB4MDQwMWYwMDMsCi0JMHg0MjAwODgwMCwgMHgxMDAwMDAwNCwgMHgwNDAxZmExOSwgMHg0YTAzNDAwMiwKLQkweGZlZWRiZWVmLCAweDA0MDFmYTcxLCAweDA0MDFmYTk3LCAweDA0MDFmZWE4LAotCTB4NTljNDAwMDUsIDB4OGMwMDA1MzQsIDB4MDQwMDAwMDQsIDB4NDIwMDU4MDAsCi0JMHgwMDAwYmJiYiwgMHgwNDAxZjAzOCwgMHgwNDAxZmU4MywgMHgwNDAyMDAwNywKLQkweDQyMDA1ODAwLCAweDAwMDBjY2NjLCAweDQ4NWY0MjBmLCAweDkwNWNiOWMwLAotCTB4NDg1ZjQ0MGYsIDB4MDQwMWYwMzAsIDB4NTlhMDA0MGMsIDB4ODAwMDAxYzAsCi0JMHgwNDAwMDAwZSwgMHg1OWEyNjAwMCwgMHg1OTMwMDAwZCwgMHg4MDAwMDFjMCwKLQkweDA0MDIwN2JlLCAweDU5YTI2MDAxLCAweDU5MzAwODBkLCAweDgwMDQwOWMwLAotCTB4MDQwMjA3YmEsIDB4ODA0ODkxYzAsIDB4MDQwMjA3YjgsIDB4ODA0Yzk5YzAsCi0JMHgwNDAyMDdiNiwgMHgwNDAxZjg3YSwgMHg4MDVjYjg0MCwgMHgwNDAwMDAwNSwKLQkweDQwMjQwMDAwLCAweDgwMjgwNTQwLCAweDgwMmMwNTQwLCAweDA0MDIwMDFhLAotCTB4NDIwMDAwMDAsIDB4MDAwMzBkNDAsIDB4ODAwMDAwNDAsIDB4MDQwMjAwMTIsCi0JMHg1OWMwMDAwNywgMHg4MjAwMDUwMCwgMHgwMDA1MDFjMCwgMHgwNDAyMDAwYiwKLQkweDAyMDFmODAwLCAweDAwMTAxOGQzLCAweDA0MDIwMDA4LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMTcsIDB4MDIwMWY4MDAsIDB4MDAxMDIzMGMsIDB4NDIwM2UwMDAsCi0JMHg1MDAwMDAwMCwgMHgwNDAxZjAwMCwgMHg0MjAwNTgwMCwgMHgwMDAwZGRkZCwKLQkweDA0MDFmMDA1LCAweDU5YzAwODA3LCAweDgyMDQwZDAwLCAweDAwMDAwMDBjLAotCTB4MDQwMDA3ZWEsIDB4MDQwMWZlNWMsIDB4NTlhMDA0MGMsIDB4ODAwMDAxYzAsCi0JMHgwNDAwMDAwMiwgMHgwNDAxZjg1NiwgMHgwNDAxZmU2YiwgMHg0MDI0MDAwMCwKLQkweDgwMjgwNTQwLCAweDgwMmMwNTQwLCAweDA0MDIwMDAzLCAweDgwNWNiOWMwLAotCTB4MDQwMjA3ODEsIDB4MDIwMWY4MDAsIDB4MDAxMDZmMzYsIDB4MDQwMWZkYTMsCi0JMHg0MjAxZDAwMCwgMHgwMDAxODZhMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjBjNiwKLQkweDVjMDAwODAwLCAweDQ4MDc4ODgwLCAweDVjMDAwODAwLCAweDQ4MDc4ODA4LAotCTB4NWMwMDA4MDAsIDB4NDgwNzg4YTMsIDB4NWMwMDA4MDAsIDB4NDgwNzUwMTAsCi0JMHg1YzAwMDgwMCwgMHg0ODA3OTA0MCwgMHgwMjAxZjgwMCwgMHgwMDEwMDk2OSwKLQkweDU5YTAwNDA2LCAweDgyMDAwNTAwLCAweDAwMDAwMDAzLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDIsIDB4MDQwMDAwMmMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwgMHg4MjA0MDUwMCwgMHhmZmZmZmZmYywKLQkweDQyMDAwODAwLCAweDAwMDAwMGMwLCAweDAyMDFmODAwLCAweDAwMTAxOTQ0LAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsCi0JMHg4MjA0MDUwMCwgMHhmZmZmZmZmNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAxOTQ0LCAweDQyMDAwODAwLCAweDAwMDAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE5M2YsIDB4ODIwNDA1MDAsIDB4ZmZmZmZmZmIsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwKLQkweDRhMDM4OGE3LCAweDAwMDBmN2Y3LCAweDQyMDA2MDAwLCAweGJlZmZmZmZmLAotCTB4NDIwMDY4MDAsIDB4ODAwMTgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsCi0JMHg0MjAwNjAwMCwgMHhmZmZlZmZmZiwgMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MjdkLCAweDQwMmMwMDAwLCAweDgwMjgwNTQwLCAweDgwMjQwNTQwLAotCTB4MDIwMDAwMDAsIDB4MDAxMDIyYzAsIDB4NDgyNzQ0MDYsIDB4NDgyYjQyMDcsCi0JMHg0ODJmNDQwNywgMHgwMjAxZjAwMCwgMHgwMDEwMjMxYywgMHg1OWEyNjAwMCwKLQkweDgxMzI2MWMwLCAweDA0MDAwMDBlLCAweDU5MzI1ODA4LCAweDgxMmU1OWMwLAotCTB4MDQwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDdmZCwgMHg1OWEyNjAwMSwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzdkLCAweDAyMDFmODAwLCAweDAwMTAwN2ZkLCAweDFjMDFmMDAwLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwZWYsIDB4MDIwMWY4MDAsIDB4MDAxMDE1ZWIsCi0JMHg1OWM0MDBhMywgMHg4NDAwMDU1YSwgMHg4NDAwMDUzYSwgMHg0ODAzODhhMywKLQkweDAyMDFmODAwLCAweDAwMTAxNjNiLCAweDA0MDIwMDBhLCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE4OGMsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMTgyMSwgMHgwNDAxZjAxMywKLQkweDAyMDFmODAwLCAweDAwMTAxNjQyLCAweDA0MDIwMDA4LCAweDQxNzgwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE4OGMsIDB4NDE3ODAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTgyMSwgMHgwNDAxZjAwOSwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwKLQkweDAyMDFmODAwLCAweDAwMTAxODhjLCAweDQyMDAwMDAwLCAweDAwMDAwMDAyLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE4MjEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTkzZiwgMHg4MjA0MDU0MCwgMHgwMDAwMDAwNCwKLQkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOTQ0LAotCTB4NDIwMWQwMDAsIDB4MDAwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsCi0JMHg1OWM0MDAwOCwgMHg4NDAwMDU0ZSwgMHg4MjAwMDUwMCwgMHhmZmZmZmZlMSwKLQkweDQ4MDM4ODA4LCAweDRhMDM4OGE3LCAweDAwMDBmN2Y3LCAweDQyMDAxMDAwLAotCTB4MDQwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE5M2QsIDB4NDIwMDYwMDAsCi0JMHhiZTIwYmZmZiwgMHg0MjAwNjgwMCwgMHg4MDAxODAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MjdkLCAweDQyMDA2MDAwLCAweGZmZmVmZmZmLCAweDQxNzg2ODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsIDB4NDIwMGIwMDAsIDB4MDAwMDEzODgsCi0JMHg0MjAxZDAwMCwgMHgwMDAwMDAxNCwgMHg0YzU4MDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2MDhlLCAweDAyMDFmODAwLCAweDAwMTAxOGQzLCAweDVjMDBiMDAwLAotCTB4MDQwMDAwMDQsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjYsIDB4MDQwMWYwMjUsCi0JMHg1OWM0MDAwNSwgMHg4YzAwMDUzNCwgMHgwNDAyMDAwNywgMHg1OWM0MDBhNCwKLQkweDgyMDAwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDA4LAotCTB4MDQwMjAwMWMsIDB4NDIwMDYwMDAsIDB4MDAwMjAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDI4MiwgMHg0MjAxZDAwMCwgMHgwMDAwMDA2NCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2MDhlLCAweDQyMDA2MDAwLCAweGZlZmZmZmZmLCAweDQyMDA2ODAwLAotCTB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsIDB4NDIwMDYwMDAsCi0JMHhmZGZmZmZmZiwgMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwKLQkweDRhMDM4ODA1LCAweDA0MDAwMDAxLCAweDU5YzQwMGE0LCAweDgyMDAwNTAwLAotCTB4MDAwMDAwMGYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDMsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKLQkweDQyMDM4MDAwLCAweDAwMDA3NzAwLCAweDAyMDFmODAwLCAweDAwMTAwZWMxLAotCTB4NTljMDAwMDYsIDB4NTlhMDA0MGMsIDB4ODAwMDAxYzAsIDB4MDQwMDAwM2YsCi0JMHg1OWEwM2MwYywgMHg1OWEwMDIwOSwgMHg1OWEwMWMwOSwgMHg5MDBjMTljMCwKLQkweDgwMGMxZDQwLCAweDU5YTAwMjBlLCAweDU5YTAyNDBlLCAweDkwMTAyMWMwLAotCTB4ODAxMDI1NDAsIDB4NTlhMDAyMGIsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmMsCi0JMHg1OWEwMTQwYiwgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg0ODBiODAwMywKLQkweDAyMDFmODAwLCAweDAwMDIwNzVhLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAotCTB4NDkzMzQwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZTQsIDB4NGEwMjVhMDQsCi0JMHgwMDAwMDAxOCwgMHg0YTAyNTgwNSwgMHgwMGFiY2RlZiwgMHg0OTJlNjAwOCwKLQkweDQ5MmU2MDBiLCAweDQ4MWU2MDBkLCAweDRhMDI2MDBjLCAweDAwMDAwMDA0LAotCTB4ODMyYzA0MDAsIDB4MDAwMDAwMTEsIDB4NDgwMjYwMGEsIDB4NDIwMDEwMDAsCi0JMHgwMDAwMDAwYywgMHg4MjFjMGQ4MCwgMHgwMDAwMDAwMSwgMHgwNDAwMDAwNCwKLQkweDgwMWMzODQwLCAweDA0MDFmOTYzLCAweDA0MDFmMDA0LCAweDQxNzgzODAwLAotCTB4MDQwMWY5NjAsIDB4MDQwMWYwMTEsIDB4ODIxYzBjODAsIDB4MDAwMDAwMDUsCi0JMHgwNDAwMTAwNSwgMHg0MDA0MzgwMCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAzYywKLQkweDA0MDFmMDA2LCAweDgwMDAxNTgwLCAweDgyMDgxNDAwLCAweDAwMDAwMDBjLAotCTB4ODAxYzM4NDAsIDB4MDQwMjA3ZmQsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsCi0JMHgwNDAxZjk1MCwgMHgwNDAyMDdmMSwgMHg0OTdiOTAwOSwgMHg1OWUwMDAwMywKLQkweDgyMDAwNTQwLCAweDAwMDA4MDYwLCAweDQ4MDNjMDAzLCAweDRhMDM4MDA5LAotCTB4MDBlMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NDE3ODA4MDAsCi0JMHg4MDA3YTBjYSwgMHg4M2QzYTQwMCwgMHgwMDAwNzYwMCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMTAxMzQ1LCAweDRhMDNhMDBhLAotCTB4MDAwMDAwMDEsIDB4NGEwM2EwMDUsIDB4MjAwMDAwMDAsIDB4NTlkMDAwMDYsCi0JMHg0YTAzYTAwNSwgMHgzMDAwMDAwMCwgMHg1OWQwMDAwNiwgMHg4YzAwMDUwYSwKLQkweDA0MDIwN2ZlLCAweDU5ZDAwMDA1LCAweDU5YTAwMjBjLCAweDgwMDAwMWMwLAotCTB4MDQwMDAwM2YsIDB4NTlhMDNhMGMsIDB4NTlhMDAyMTAsIDB4NTlhMDFjMTAsCi0JMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg1OWEwMDIwZCwgMHg1OWEwMjQwZCwKLQkweDkwMTAyMWMwLCAweDgwMTAyNTQwLCAweDU5YTAxMjBiLCAweDgyMDgxNTAwLAotCTB4MDAwMGZmZmMsIDB4NTlhMDA0MGIsIDB4OTAwMDAxYzAsIDB4ODAwODE1NDAsCi0JMHg0ODBiYTAwMywgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwMjAwMDgwMCwKLQkweDAwMTAwNWQ4LCAweDQ5MzM0MDAxLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LAorCTB4MDAwMGRkZGQsIDB4MDQwMWYwMDUsIDB4NTljMDA4MDcsIDB4ODIwNDBkMDAsCisJMHgwMDAwMDAwYywgMHgwNDAwMDdlYSwgMHgwNDAxZmU1YywgMHg1OWEwMDQwYywKKwkweDgwMDAwMWMwLCAweDA0MDAwMDAyLCAweDA0MDFmODU2LCAweDA0MDFmZTZiLAorCTB4NDAyNDAwMDAsIDB4ODAyODA1NDAsIDB4ODAyYzA1NDAsIDB4MDQwMjAwMDMsCisJMHg4MDVjYjljMCwgMHgwNDAyMDc4MSwgMHgwMjAxZjgwMCwgMHgwMDEwNmM4YSwKKwkweDA0MDFmZGEzLCAweDQyMDFkMDAwLCAweDAwMDE4NmEwLCAweDAyMDFmODAwLAorCTB4MDAxMDVlMDYsIDB4NWMwMDA4MDAsIDB4NDgwNzg4ODAsIDB4NWMwMDA4MDAsCisJMHg0ODA3ODgwOCwgMHg1YzAwMDgwMCwgMHg0ODA3ODhhMywgMHg1YzAwMDgwMCwKKwkweDQ4MDc1MDEwLCAweDVjMDAwODAwLCAweDQ4MDc5MDQwLCAweDAyMDFmODAwLAorCTB4MDAxMDA5YjYsIDB4NTlhMDA0MDYsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDAyYywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGMwLCAweDAyMDFmODAwLCAweDAwMTAxOWFjLCAweDgyMDQwNTAwLAorCTB4ZmZmZmZmZmMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTliMSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxOWFjLCAweDgyMDQwNTAwLCAweGZmZmZmZmY3LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5YjEsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTlhYywgMHg4MjA0MDUwMCwKKwkweGZmZmZmZmZiLCAweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDE5YjEsIDB4NGEwMzg4YTcsIDB4MDAwMGY3ZjcsIDB4NDIwMDYwMDAsCisJMHhiZWZmZmZmZiwgMHg0MjAwNjgwMCwgMHg4MDAxODAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MGFkLCAweDQyMDA2MDAwLCAweGZmZmVmZmZmLCAweDQxNzg2ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQwYWQsIDB4NDAyYzAwMDAsIDB4ODAyODA1NDAsCisJMHg4MDI0MDU0MCwgMHgwMjAwMDAwMCwgMHgwMDEwMjA2NiwgMHg0ODI3NDQwNiwKKwkweDQ4MmI0MjA3LCAweDQ4MmY0NDA3LCAweDAyMDFmMDAwLCAweDAwMTAyMGMyLAorCTB4NTlhMjYwMDAsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMGUsIDB4NTkzMjU4MDgsCisJMHg4MTJlNTljMCwgMHgwNDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDAyMDhiNCwKKwkweDAyMDFmODAwLCAweDAwMTAwODQzLCAweDU5YTI2MDAxLCAweDU5MzI1ODA4LAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsIDB4MDIwMWY4MDAsIDB4MDAxMDA4NDMsCisJMHgxYzAxZjAwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDBlZiwgMHgwMjAxZjgwMCwKKwkweDAwMTAxNjU1LCAweDU5YzQwMGEzLCAweDg0MDAwNTVhLCAweDg0MDAwNTNhLAorCTB4NDgwMzg4YTMsIDB4MDIwMWY4MDAsIDB4MDAxMDE2YWMsIDB4MDQwMjAwMGEsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMThmYSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxODkyLAorCTB4MDQwMWYwMTMsIDB4MDIwMWY4MDAsIDB4MDAxMDE2YjMsIDB4MDQwMjAwMDgsCisJMHg0MTc4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMThmYSwgMHg0MTc4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxODkyLCAweDA0MDFmMDA5LCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMDE4ZmEsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwMTg5MiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOWFjLCAweDgyMDQwNTQwLAorCTB4MDAwMDAwMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTliMSwgMHg0MjAxZDAwMCwgMHgwMDAwMDAxNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA1ZGQyLCAweDU5YzQwMDA4LCAweDg0MDAwNTRlLCAweDgyMDAwNTAwLAorCTB4ZmZmZmZmZTEsIDB4NDgwMzg4MDgsIDB4NGEwMzg4YTcsIDB4MDAwMGY3ZjcsCisJMHg0MjAwMTAwMCwgMHgwNDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMTlhYSwKKwkweDQyMDA2MDAwLCAweGJlMjBiZmZmLCAweDQyMDA2ODAwLCAweDgwMDE4MDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQwYWQsIDB4NDIwMDYwMDAsIDB4ZmZmZWZmZmYsCisJMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDBhZCwgMHg0MjAwYjAwMCwKKwkweDAwMDAxMzg4LCAweDQyMDFkMDAwLCAweDAwMDAwMDE0LCAweDRjNTgwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVkZDIsIDB4MDIwMWY4MDAsIDB4MDAxMDE5NDEsCisJMHg1YzAwYjAwMCwgMHgwNDAwMDAwNCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmNiwKKwkweDA0MDFmMDI1LCAweDU5YzQwMDA1LCAweDhjMDAwNTM0LCAweDA0MDIwMDA3LAorCTB4NTljNDAwYTQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwOCwgMHgwNDAyMDAxYywgMHg0MjAwNjAwMCwgMHgwMDAyMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0MGIyLCAweDQyMDFkMDAwLCAweDAwMDAwMDY0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDVkZDIsIDB4NDIwMDYwMDAsIDB4ZmVmZmZmZmYsCisJMHg0MjAwNjgwMCwgMHgwMjAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDBhZCwKKwkweDQyMDA2MDAwLCAweGZkZmZmZmZmLCAweDQxNzg2ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQwYWQsIDB4NGEwMzg4MDUsIDB4MDQwMDAwMDEsIDB4NTljNDAwYTQsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDAwMDAzLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NDIwMzgwMDAsIDB4MDAwMDc3MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMGYwZiwgMHg1OWMwMDAwNiwgMHg1OWEwMDQwYywgMHg4MDAwMDFjMCwKKwkweDA0MDAwMDNmLCAweDU5YTAzYzBjLCAweDU5YTAwMjA5LCAweDU5YTAxYzA5LAorCTB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NTlhMDAyMGUsIDB4NTlhMDI0MGUsCisJMHg5MDEwMjFjMCwgMHg4MDEwMjU0MCwgMHg1OWEwMDIwYiwgMHg4MjAwMDUwMCwKKwkweDAwMDBmZmZjLCAweDU5YTAxNDBiLCAweDkwMDgxMWMwLCAweDgwMDgxNTQwLAorCTB4NDgwYjgwMDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg0OTMzNDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDgyYSwKIAkweDRhMDI1YTA0LCAweDAwMDAwMDE4LCAweDRhMDI1ODA1LCAweDAwYWJjZGVmLAogCTB4NDkyZTYwMDgsIDB4NDkyZTYwMGIsIDB4NDgxZTYwMGQsIDB4NGEwMjYwMGMsCiAJMHgwMDAwMDAwNCwgMHg4MzJjMDQwMCwgMHgwMDAwMDAxMSwgMHg0ODAyNjAwYSwKIAkweDQyMDAxMDAwLCAweDAwMDAwMDBjLCAweDgyMWMwZDgwLCAweDAwMDAwMDAxLAotCTB4MDQwMDAwMDQsIDB4ODAxYzM4NDAsIDB4MDQwMWY5MDYsIDB4MDQwMWYwMDQsCi0JMHg0MTc4MzgwMCwgMHgwNDAxZjkwMywgMHgwNDAxZjAxMSwgMHg4MjFjMGM4MCwKKwkweDA0MDAwMDA0LCAweDgwMWMzODQwLCAweDA0MDFmOTYzLCAweDA0MDFmMDA0LAorCTB4NDE3ODM4MDAsIDB4MDQwMWY5NjAsIDB4MDQwMWYwMTEsIDB4ODIxYzBjODAsCiAJMHgwMDAwMDAwNSwgMHgwNDAwMTAwNSwgMHg0MDA0MzgwMCwgMHg0MjAwMTAwMCwKIAkweDAwMDAwMDNjLCAweDA0MDFmMDA2LCAweDgwMDAxNTgwLCAweDgyMDgxNDAwLAogCTB4MDAwMDAwMGMsIDB4ODAxYzM4NDAsIDB4MDQwMjA3ZmQsIDB4ODMyYzA0MDAsCi0JMHgwMDAwMDAwNSwgMHgwNDAxZjhmMywgMHgwNDAyMDdmMSwgMHgxYzAxZjAwMCwKLQkweDQ4MDNjODU2LCAweDU5YTAwMjBjLCAweDgwMDAwMWMwLCAweDA0MDAwMDI0LAotCTB4ODI0YzA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwNDAsIDB4NTlhMjYwMDEsCi0JMHg1OTMwMzgwZCwgMHg4MDFjMzljMCwgMHgwNDAwMDAzYywgMHg4MDFjMzg0MCwKKwkweDAwMDAwMDA1LCAweDA0MDFmOTUwLCAweDA0MDIwN2YxLCAweDQ5N2I5MDA5LAorCTB4NTllMDAwMDMsIDB4ODIwMDA1NDAsIDB4MDAwMDgwNjAsIDB4NDgwM2MwMDMsCisJMHg0YTAzODAwOSwgMHgwMGUwMDAwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDQxNzgwODAwLCAweDgwMDdhMGNhLCAweDgzZDNhNDAwLCAweDAwMDA3NjAwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAxMDEzOTUsCisJMHg0YTAzYTAwYSwgMHgwMDAwMDAwMSwgMHg0YTAzYTAwNSwgMHgyMDAwMDAwMCwKKwkweDU5ZDAwMDA2LCAweDRhMDNhMDA1LCAweDMwMDAwMDAwLCAweDU5ZDAwMDA2LAorCTB4OGMwMDA1MGEsIDB4MDQwMjA3ZmUsIDB4NTlkMDAwMDUsIDB4NTlhMDAyMGMsCisJMHg4MDAwMDFjMCwgMHgwNDAwMDAzZiwgMHg1OWEwM2EwYywgMHg1OWEwMDIxMCwKKwkweDU5YTAxYzEwLCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDU5YTAwMjBkLAorCTB4NTlhMDI0MGQsIDB4OTAxMDIxYzAsIDB4ODAxMDI1NDAsIDB4NTlhMDEyMGIsCisJMHg4MjA4MTUwMCwgMHgwMDAwZmZmYywgMHg1OWEwMDQwYiwgMHg5MDAwMDFjMCwKKwkweDgwMDgxNTQwLCAweDQ4MGJhMDAzLCAweDAyMDFmODAwLCAweDAwMDIwODkyLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NDkzMzQwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDgyYSwgMHg0YTAyNWEwNCwgMHgwMDAwMDAxOCwgMHg0YTAyNTgwNSwKKwkweDAwYWJjZGVmLCAweDQ5MmU2MDA4LCAweDQ5MmU2MDBiLCAweDQ4MWU2MDBkLAorCTB4NGEwMjYwMGMsIDB4MDAwMDAwMDQsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMTEsCisJMHg0ODAyNjAwYSwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwYywgMHg4MjFjMGQ4MCwKKwkweDAwMDAwMDAxLCAweDA0MDAwMDA0LCAweDgwMWMzODQwLCAweDA0MDFmOTA2LAorCTB4MDQwMWYwMDQsIDB4NDE3ODM4MDAsIDB4MDQwMWY5MDMsIDB4MDQwMWYwMTEsCisJMHg4MjFjMGM4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMTAwNSwgMHg0MDA0MzgwMCwKKwkweDQyMDAxMDAwLCAweDAwMDAwMDNjLCAweDA0MDFmMDA2LCAweDgwMDAxNTgwLAorCTB4ODIwODE0MDAsIDB4MDAwMDAwMGMsIDB4ODAxYzM4NDAsIDB4MDQwMjA3ZmQsCisJMHg4MzJjMDQwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjhmMywgMHgwNDAyMDdmMSwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDU5YTAwMjBjLCAweDgwMDAwMWMwLAorCTB4MDQwMDAwMjQsIDB4ODI0YzA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwNDAsCisJMHg1OWEyNjAwMSwgMHg1OTMwMzgwZCwgMHg4MDFjMzljMCwgMHgwNDAwMDAzYywKKwkweDgwMWMzODQwLCAweDQ4MWU2MDBkLCAweDU5MzI1ODBiLCAweDU5MzAwODBhLAorCTB4NTAwNDIwMDAsIDB4NTgwNDE4MDEsIDB4NTgwNDEwMDIsIDB4ODIwODE1MDAsCisJMHhmZmZmZmZmYywgMHg1OTMwMDAwYywgMHg4MDAwMDAwMCwgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDA1LCAweDA0MDIwMDA5LCAweDQ5N2E2MDBjLCAweDU5MmU1ODAxLAorCTB4ODEyZTU5YzAsIDB4MDQwMDAwMWEsIDB4NDkyZTYwMGIsIDB4ODMyYzBjMDAsCisJMHgwMDAwMDAwNSwgMHgwNDAxZjAwNSwgMHg0ODAyNjAwYywgMHg1OTMwMDgwYSwKKwkweDgyMDQwYzAwLCAweDAwMDAwMDAzLCAweDQ4MDY2MDBhLCAweDA0MDFmMDEwLAorCTB4NTlhMDEyMGIsIDB4ODIwODE1MDAsIDB4MDAwMGZmZmMsIDB4NTlhMDA0MGIsCisJMHg5MDAwMDFjMCwgMHg4MDA4MTU0MCwgMHg0ODBiYTAwMywgMHg1OWEwMDIwZCwKKwkweDU5YTAyNDBkLCAweDkwMTAyMWMwLCAweDgwMTAyNTQwLCAweDU5YTAwMjEwLAorCTB4NTlhMDFjMTAsIDB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NDIwMWQwMDAsCisJMHgwMDAwM2E5OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWUwNiwgMHg0ODBiYTAwMiwKKwkweDU5YTgwMDU5LCAweDQ4MDNhMDA4LCAweDQ4MTNhMDAwLCAweDQ4MGZhMDAxLAorCTB4NGEwM2EwMDUsIDB4MTAwMDAwMDAsIDB4MDIwMDU4MDAsIDB4MDAxMDA2MTUsCisJMHg4MDRjOTgwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKKwkweDQ4NDdjODU3LCAweDU5YTAwNDBjLCAweDgwMDAwMWMwLCAweDA0MDAwMDI0LAorCTB4ODI0ODA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwNDIsIDB4NTlhMjYwMDAsCisJMHg1OTMwMzgwZCwgMHg4MDFjMzljMCwgMHgwNDAwMDAzZSwgMHg4MDFjMzg0MCwKIAkweDQ4MWU2MDBkLCAweDU5MzI1ODBiLCAweDU5MzAwODBhLCAweDUwMDQyMDAwLAogCTB4NTgwNDE4MDEsIDB4NTgwNDEwMDIsIDB4ODIwODE1MDAsIDB4ZmZmZmZmZmMsCiAJMHg1OTMwMDAwYywgMHg4MDAwMDAwMCwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwNSwKIAkweDA0MDIwMDA5LCAweDQ5N2E2MDBjLCAweDU5MmU1ODAxLCAweDgxMmU1OWMwLAotCTB4MDQwMDAwMWEsIDB4NDkyZTYwMGIsIDB4ODMyYzBjMDAsIDB4MDAwMDAwMDUsCisJMHgwNDAwMDAxZCwgMHg0OTJlNjAwYiwgMHg4MzJjMGMwMCwgMHgwMDAwMDAwNSwKIAkweDA0MDFmMDA1LCAweDQ4MDI2MDBjLCAweDU5MzAwODBhLCAweDgyMDQwYzAwLAotCTB4MDAwMDAwMDMsIDB4NDgwNjYwMGEsIDB4MDQwMWYwMTAsIDB4NTlhMDEyMGIsCi0JMHg4MjA4MTUwMCwgMHgwMDAwZmZmYywgMHg1OWEwMDQwYiwgMHg5MDAwMDFjMCwKLQkweDgwMDgxNTQwLCAweDQ4MGJhMDAzLCAweDU5YTAwMjBkLCAweDU5YTAyNDBkLAotCTB4OTAxMDIxYzAsIDB4ODAxMDI1NDAsIDB4NTlhMDAyMTAsIDB4NTlhMDFjMTAsCi0JMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg0MjAxZDAwMCwgMHgwMDAwM2E5OCwKLQkweDAyMDFmODAwLCAweDAwMTA2MGM2LCAweDQ4MGJhMDAyLCAweDU5YTgwMDU5LAotCTB4NDgwM2EwMDgsIDB4NDgxM2EwMDAsIDB4NDgwZmEwMDEsIDB4NGEwM2EwMDUsCi0JMHgxMDAwMDAwMCwgMHgwMjAwNTgwMCwgMHgwMDEwMDVkOCwgMHg4MDRjOTgwMCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ4NDdjODU3LAotCTB4NTlhMDA0MGMsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMjQsIDB4ODI0ODA1ODAsCi0JMHgwMDAwMDAwMiwgMHgwNDAwMDA0MiwgMHg1OWEyNjAwMCwgMHg1OTMwMzgwZCwKLQkweDgwMWMzOWMwLCAweDA0MDAwMDNlLCAweDgwMWMzODQwLCAweDQ4MWU2MDBkLAotCTB4NTkzMjU4MGIsIDB4NTkzMDA4MGEsIDB4NTAwNDIwMDAsIDB4NTgwNDE4MDEsCi0JMHg1ODA0MTAwMiwgMHg4MjA4MTUwMCwgMHhmZmZmZmZmYywgMHg1OTMwMDAwYywKLQkweDgwMDAwMDAwLCAweDgyMDAwZDgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDA5LAotCTB4NDk3YTYwMGMsIDB4NTkyZTU4MDEsIDB4ODEyZTU5YzAsIDB4MDQwMDAwMWQsCi0JMHg0OTJlNjAwYiwgMHg4MzJjMGMwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjAwNSwKLQkweDQ4MDI2MDBjLCAweDU5MzAwODBhLCAweDgyMDQwYzAwLCAweDAwMDAwMDAzLAotCTB4NDgwNjYwMGEsIDB4MDQwMWYwMTMsIDB4ODI0NDA1ODAsIDB4MTAwMDAwMDAsCi0JMHgwNDAyMDAxZiwgMHg1OWEwMDIwZSwgMHg1OWEwMjQwZSwgMHg5MDEwMjFjMCwKLQkweDgwMTAyNTQwLCAweDU5YTAwMjA5LCAweDU5YTAxYzA5LCAweDkwMGMxOWMwLAotCTB4ODAwYzFkNDAsIDB4NTlhMDAyMGIsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmMsCi0JMHg1OWEwMTQwYiwgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg0ODBiODAwMywKLQkweDQ4MTM4MDAwLCAweDQ4MGY4MDAxLCAweDQ4MGI4MDAyLCAweDU5YzgwMDE4LAotCTB4ODIwMDA1MDAsIDB4ZjAwMDAwMDAsIDB4NTljMDIwMDgsIDB4ODIxMDI1MDAsCi0JMHgwZmZmZmZmZiwgMHg4MDEwMDU0MCwgMHg0ODAzODAwOCwgMHg0ODQ3ODAwNiwKLQkweDgwNDg5MDAwLCAweDgyNjBjNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAotCTB4NTljMDAwMDksIDB4NDgwM2M4NTcsIDB4ODIwMDBkMDAsIDB4MDBlMDAwMDAsCi0JMHgwNDAwMDAwZCwgMHg0ODVmNDIwZiwgMHg5MDVjYjljMCwgMHg0ODVmNDQwZiwKLQkweDhjMDAwNTJlLCAweDA0MDAwMDAyLCAweDgwMjg1MDAwLCAweDhjMDAwNTJjLAotCTB4MDQwMDAwMDIsIDB4ODAyNDQ4MDAsIDB4OGMwMDA1MmEsIDB4MDQwMDAwMDIsCi0JMHg4MDJjNTgwMCwgMHgxYzAxZjAwMCwgMHg1OWEwMDIwYywgMHg4MDAwMDFjMCwKLQkweDA0MDAwMDI0LCAweDU5ZDAwODA2LCAweDQ4MDdjODU3LCAweDhjMDQwZDNlLAotCTB4MDQwMDAwMjAsIDB4NGEwM2EwMDUsIDB4MjAwMDAwMDAsIDB4NGEwM2EwMDUsCi0JMHgzMDAwMDAwMCwgMHg1OWQwMDgwNiwgMHg4YzA0MGQwYSwgMHgwNDAyMDdmZSwKLQkweDgyNGMwNDgwLCAweDAwMDAwMDAzLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4NDA0YzAwMDAsIDB4MGMwMWYwMDEsIDB4MDAxMDJkYTEsIDB4MDAxMDJkYTMsCi0JMHgwMDEwMmRhOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg4MDAwMDA0MCwKLQkweDQwMDA5ODAwLCAweDA0MDFmZjQzLCAweDA0MDAwMDBhLCAweDA0MDFmZjQxLAotCTB4MDQwMWYwMDgsIDB4ODAwMDAwNDAsIDB4NDAwMDk4MDAsIDB4NTlkMDA4MDYsCi0JMHg0ODA3Yzg1NywgMHg4YzA0MGQzZSwgMHgwNDAyMDdlMywgMHgwNDAxZmYzOSwKLQkweDFjMDFmMDAwLCAweDU5YTAwNDBjLCAweDgwMDAwMWMwLCAweDA0MDAwMDI0LAotCTB4NTljMDA4MDcsIDB4NDgwN2M4NTcsIDB4OGMwNDBkM2UsIDB4MDQwMDAwMjAsCi0JMHg1OWMwMDgwNywgMHg0YTAzODAwNiwgMHgyMDAwMDAwMCwgMHg4MjQ4MDQ4MCwKLQkweDAwMDAwMDAzLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDQwNDgwMDAwLAotCTB4MGMwMWYwMDEsIDB4MDAxMDJkYzQsIDB4MDAxMDJkYzYsIDB4MDAxMDJkY2UsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg4MDAwMDA0MCwgMHg0MDAwOTAwMCwKLQkweDQyMDA4ODAwLCAweDEwMDAwMDA0LCAweDA0MDFmZjY1LCAweDA0MDAwMDBjLAotCTB4MDQwMWZmNjMsIDB4MDQwMWYwMGEsIDB4ODAwMDAwNDAsIDB4NDAwMDkwMDAsCi0JMHg1OWMwMDgwNywgMHg0ODA3Yzg1NywgMHg4YzA0MGQzZSwgMHgwNDAyMDdlNSwKLQkweDQyMDA4ODAwLCAweDEwMDAwMDA0LCAweDA0MDFmZjU5LCAweDFjMDFmMDAwLAotCTB4NDkyZmM4NTcsIDB4NDAwMGE4MDAsIDB4NGEwM2I4MDUsIDB4MjAwMDAwMDAsCi0JMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwgMHgzMDAwMDAwMCwgMHg0ODEzYjgwMCwKLQkweDQ4MGZiODAxLCAweDQ4MGJiODAyLCAweDQ4NTdiODAzLCAweDRhMDNiODA1LAotCTB4MzAwMDAwMDIsIDB4NTlkYzAwMDYsIDB4NGEwM2I4MDUsIDB4NzAwMDAwMDEsCi0JMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwgMHgxMDAwMDAwMCwgMHg1OWRjMDAwNiwKLQkweDhjMDAwNTNlLCAweDA0MDAwN2ZlLCAweDRhMDNiODA1LCAweDIwMDAwMDAwLAotCTB4NTlkYzAwMDYsIDB4NTlkYzIwMDAsIDB4NTlkYzE4MDEsIDB4ODAxYzM5YzAsCi0JMHgwNDAwMDAwYSwgMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwKLQkweDVjMDAwODAwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDRhMDI1YTA0LAotCTB4MDAwMDAwMGEsIDB4NDkyYzA4MDEsIDB4MWMwMWYwMDAsIDB4NDIwMDYwMDAsCi0JMHgwMDEwMmZiMiwgMHgwMjAxZjgwMCwgMHgwMDEwMTM0NSwgMHg0YTAzOTAyYywKLQkweDAwMjAwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMWY0LCAweDU5YzgwMDJjLAotCTB4OGMwMDA1MmMsIDB4MDQwMDAwMDcsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsCi0JMHg0MjAwMDAwMCwgMHgwMDAwNDAwMywgMHg0MTc4MTAwMCwgMHgwNDAxZjE5NiwKLQkweDUwMzAxMDAwLCAweDQxNzg0ODAwLCAweDRhMDM5MDJkLCAweDAwMDA4MDAwLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAxZjQsIDB4NTljODAwMmMsIDB4OGMwMDA1MzQsCisJMHgwMDAwMDAwMywgMHg0ODA2NjAwYSwgMHgwNDAxZjAxMywgMHg4MjQ0MDU4MCwKKwkweDEwMDAwMDAwLCAweDA0MDIwMDFmLCAweDU5YTAwMjBlLCAweDU5YTAyNDBlLAorCTB4OTAxMDIxYzAsIDB4ODAxMDI1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDksCisJMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg1OWEwMDIwYiwgMHg4MjAwMDUwMCwKKwkweDAwMDBmZmZjLCAweDU5YTAxNDBiLCAweDkwMDgxMWMwLCAweDgwMDgxNTQwLAorCTB4NDgwYjgwMDMsIDB4NDgxMzgwMDAsIDB4NDgwZjgwMDEsIDB4NDgwYjgwMDIsCisJMHg1OWM4MDAxOCwgMHg4MjAwMDUwMCwgMHhmMDAwMDAwMCwgMHg1OWMwMjAwOCwKKwkweDgyMTAyNTAwLCAweDBmZmZmZmZmLCAweDgwMTAwNTQwLCAweDQ4MDM4MDA4LAorCTB4NDg0NzgwMDYsIDB4ODA0ODkwMDAsIDB4ODI2MGM1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg1OWMwMDAwOSwgMHg0ODAzYzg1NywgMHg4MjAwMGQwMCwKKwkweDAwZTAwMDAwLCAweDA0MDAwMDBkLCAweDQ4NWY0MjBmLCAweDkwNWNiOWMwLAorCTB4NDg1ZjQ0MGYsIDB4OGMwMDA1MmUsIDB4MDQwMDAwMDIsIDB4ODAyODUwMDAsCisJMHg4YzAwMDUyYywgMHgwNDAwMDAwMiwgMHg4MDI0NDgwMCwgMHg4YzAwMDUyYSwKKwkweDA0MDAwMDAyLCAweDgwMmM1ODAwLCAweDFjMDFmMDAwLCAweDU5YTAwMjBjLAorCTB4ODAwMDAxYzAsIDB4MDQwMDAwMjQsIDB4NTlkMDA4MDYsIDB4NDgwN2M4NTcsCisJMHg4YzA0MGQzZSwgMHgwNDAwMDAyMCwgMHg0YTAzYTAwNSwgMHgyMDAwMDAwMCwKKwkweDRhMDNhMDA1LCAweDMwMDAwMDAwLCAweDU5ZDAwODA2LCAweDhjMDQwZDBhLAorCTB4MDQwMjA3ZmUsIDB4ODI0YzA0ODAsIDB4MDAwMDAwMDMsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDYxNSwgMHg0MDRjMDAwMCwgMHgwYzAxZjAwMSwgMHgwMDEwMmMwMiwKKwkweDAwMTAyYzA0LCAweDAwMTAyYzBhLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAorCTB4ODAwMDAwNDAsIDB4NDAwMDk4MDAsIDB4MDQwMWZmNDMsIDB4MDQwMDAwMGEsCisJMHgwNDAxZmY0MSwgMHgwNDAxZjAwOCwgMHg4MDAwMDA0MCwgMHg0MDAwOTgwMCwKKwkweDU5ZDAwODA2LCAweDQ4MDdjODU3LCAweDhjMDQwZDNlLCAweDA0MDIwN2UzLAorCTB4MDQwMWZmMzksIDB4MWMwMWYwMDAsIDB4NTlhMDA0MGMsIDB4ODAwMDAxYzAsCisJMHgwNDAwMDAyNCwgMHg1OWMwMDgwNywgMHg0ODA3Yzg1NywgMHg4YzA0MGQzZSwKKwkweDA0MDAwMDIwLCAweDU5YzAwODA3LCAweDRhMDM4MDA2LCAweDIwMDAwMDAwLAorCTB4ODI0ODA0ODAsIDB4MDAwMDAwMDMsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHg0MDQ4MDAwMCwgMHgwYzAxZjAwMSwgMHgwMDEwMmMyNSwgMHgwMDEwMmMyNywKKwkweDAwMTAyYzJmLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDgwMDAwMDQwLAorCTB4NDAwMDkwMDAsIDB4NDIwMDg4MDAsIDB4MTAwMDAwMDQsIDB4MDQwMWZmNjUsCisJMHgwNDAwMDAwYywgMHgwNDAxZmY2MywgMHgwNDAxZjAwYSwgMHg4MDAwMDA0MCwKKwkweDQwMDA5MDAwLCAweDU5YzAwODA3LCAweDQ4MDdjODU3LCAweDhjMDQwZDNlLAorCTB4MDQwMjA3ZTUsIDB4NDIwMDg4MDAsIDB4MTAwMDAwMDQsIDB4MDQwMWZmNTksCisJMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywgMHg0MDAwYTgwMCwgMHg0YTAzYjgwNSwKKwkweDIwMDAwMDAwLCAweDU5ZGMwMDA2LCAweDRhMDNiODA1LCAweDMwMDAwMDAwLAorCTB4NDgxM2I4MDAsIDB4NDgwZmI4MDEsIDB4NDgwYmI4MDIsIDB4NDg1N2I4MDMsCisJMHg0YTAzYjgwNSwgMHgzMDAwMDAwMiwgMHg1OWRjMDAwNiwgMHg0YTAzYjgwNSwKKwkweDcwMDAwMDAxLCAweDU5ZGMwMDA2LCAweDRhMDNiODA1LCAweDEwMDAwMDAwLAorCTB4NTlkYzAwMDYsIDB4OGMwMDA1M2UsIDB4MDQwMDA3ZmUsIDB4NGEwM2I4MDUsCisJMHgyMDAwMDAwMCwgMHg1OWRjMDAwNiwgMHg1OWRjMjAwMCwgMHg1OWRjMTgwMSwKKwkweDgwMWMzOWMwLCAweDA0MDAwMDBhLCAweDRkMmMwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA4MmEsIDB4NWMwMDA4MDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCisJMHg0YTAyNWEwNCwgMHgwMDAwMDAwYSwgMHg0OTJjMDgwMSwgMHgxYzAxZjAwMCwKKwkweDQyMDA2MDAwLCAweDAwMTAyZDlkLCAweDQyMDAwODAwLCAweDAwMDAwMDdjLAorCTB4MDIwMWY4MDAsIDB4MDAxMDEzOTUsIDB4NGEwMzkwMmMsIDB4MDAyMDAwMDAsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDFmNCwgMHg1OWM4MDAyYywgMHg4YzAwMDUyYywKIAkweDA0MDAwMDA3LCAweDgwNThiMDQwLCAweDA0MDIwN2ZjLCAweDQyMDAwMDAwLAotCTB4MDAwMDQwMDMsIDB4NDE3ODEwMDAsIDB4MDQwMWYxODcsIDB4MDQwMWY4ZjgsCi0JMHg4MDI0NDgwMCwgMHg0MDI0MDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDNiMSwKLQkweDA0MDIwN2ZiLCAweDA0MDFmOTg4LCAweDQxNzg0ODAwLCAweDA0MDFmOTIwLAotCTB4ODAyNDQ4MDAsIDB4NDAyNDAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAzYjEsCi0JMHgwNDAyMDdmYiwgMHg4MDMwNjAwMCwgMHg4MjMwMDU4MCwgMHgwMDEwMmZiNCwKLQkweDA0MDIwN2UwLCAweDU5YTgwODYzLCAweDgwMDQwOWMwLCAweDA0MDAwMDA3LAotCTB4NDIwMDAwMDAsIDB4MDAwMDQwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDIsCi0JMHg1OWE4MTg2MiwgMHgwNDAxZjE2YywgMHg0MjAwNjAwMCwgMHgwMDEwMmZiMiwKLQkweDRhMDM1MDY0LCAweDAwMDAwMDA0LCAweDUwMzAxMDAwLCAweDQxNzg0ODAwLAotCTB4NGEwMzkwMmQsIDB4MDAwMDQwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAxZjQsCi0JMHg1OWM4MDAyYywgMHg4YzAwMDUzMiwgMHgwNDAwMDAwNywgMHg4MDU4YjA0MCwKLQkweDA0MDIwN2ZjLCAweDQyMDAwMDAwLCAweDAwMDA0MDAzLCAweDQxNzgxMDAwLAotCTB4MDQwMWYxNTksIDB4MDQwMWY4Y2EsIDB4ODAyNDQ4MDAsIDB4NDAyNDAwMDAsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDE1NCwgMHgwNDAyMDdmYiwgMHgwNDAxZjk1YSwKLQkweDQxNzg0ODAwLCAweDA0MDFmOGYyLCAweDgwMjQ0ODAwLCAweDQwMjQwMDAwLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAxNTQsIDB4MDQwMjA3ZmIsIDB4ODAzMDYwMDAsCi0JMHg4MjMwMDU4MCwgMHgwMDEwMmZiNCwgMHgwNDAyMDdlMCwgMHg1OWE4MDg2MywKLQkweDgwMDQwOWMwLCAweDA0MDAwMDA3LCAweDQyMDAwMDAwLCAweDAwMDA0MDA0LAotCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsIDB4NTlhODE4NjIsIDB4MDQwMWYxM2UsCi0JMHg0MjAwNjAwMCwgMHgwMDEwMmZiMiwgMHg0OTdiNTA2NCwgMHg1MDMwMTAwMCwKLQkweDQxNzg0ODAwLCAweDRhMDM5MDJkLCAweDAwMDAxMDAwLCAweDQyMDBiMDAwLAotCTB4MDAwMDAxZjQsIDB4NTljODAwMmMsIDB4OGMwMDA1MmUsIDB4MDQwMDAwMDcsCisJMHgwMDAwNDAwMywgMHg0MTc4MTAwMCwgMHgwNDAxZjExZSwgMHg1MDMwMTAwMCwKKwkweDQxNzg0ODAwLCAweDRhMDM5MDJkLCAweDAwMDA4MDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAxZjQsIDB4NTljODAwMmMsIDB4OGMwMDA1MzQsIDB4MDQwMDAwMDcsCiAJMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg0MjAwMDAwMCwgMHgwMDAwNDAwMywKLQkweDQxNzgxMDAwLCAweDA0MDFmMTJjLCAweDA0MDFmODlkLCAweDgwMjQ0ODAwLAotCTB4NDAyNDAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwODgsIDB4MDQwMjA3ZmIsCi0JMHgwNDAxZjkyZCwgMHg0MTc4NDgwMCwgMHgwNDAxZjhjNSwgMHg4MDI0NDgwMCwKLQkweDQwMjQwMDAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDg4LCAweDA0MDIwN2ZiLAotCTB4ODAzMDYwMDAsIDB4ODIzMDA1ODAsIDB4MDAxMDJmYjQsIDB4MDQwMjA3ZTAsCi0JMHg1OWE4MDg2MywgMHg4MDA0MDljMCwgMHgwNDAwMDAwNywgMHg0MjAwMDAwMCwKLQkweDAwMDA0MDA0LCAweDQyMDAxMDAwLCAweDAwMDAwMDAxLCAweDU5YTgxODYyLAotCTB4MDQwMWYxMTEsIDB4NDIwMDYwMDAsIDB4MDAxMDJmYjIsIDB4NTAzMDEwMDAsCi0JMHg0MTc4NDgwMCwgMHg0YTAzOTAyZCwgMHgwMDAwMDgwMCwgMHgwNDAxZjg3YywKLQkweDgwMjQ0ODAwLCAweDQwMjQwMDAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDE4LAotCTB4MDQwMjA3ZmIsIDB4MDQwMWY5MGMsIDB4NDE3ODQ4MDAsIDB4MDQwMWY4YTQsCi0JMHg4MDI0NDgwMCwgMHg0MDI0MDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxOCwKLQkweDA0MDIwN2ZiLCAweDgwMzA2MDAwLCAweDgyMzAwNTgwLCAweDAwMTAyZmI0LAotCTB4MDQwMjA3ZWIsIDB4NTlhODA4NjMsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDcsCi0JMHg0MjAwMDAwMCwgMHgwMDAwNDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwKLQkweDU5YTgxODYyLCAweDA0MDFmMGYwLCAweDQyMDA2MDAwLCAweDAwMTAyZmIyLAotCTB4NTAzMDEwMDAsIDB4NDE3ODQ4MDAsIDB4NGEwMzkwMmQsIDB4MDAwMDA0MDAsCi0JMHgwNDAxZjg1YiwgMHg4MDI0NDgwMCwgMHg0MDI0MDAwMCwgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDg4LCAweDA0MDIwN2ZiLCAweDA0MDFmOGViLCAweDQxNzg0ODAwLAotCTB4MDQwMWY4ODMsIDB4ODAyNDQ4MDAsIDB4NDAyNDAwMDAsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDA4OCwgMHgwNDAyMDdmYiwgMHg4MDMwNjAwMCwgMHg4MjMwMDU4MCwKLQkweDAwMTAyZmI0LCAweDA0MDIwN2ViLCAweDU5YTgwODYzLCAweDgwMDQwOWMwLAorCTB4NDE3ODEwMDAsIDB4MDQwMWYxMGYsIDB4MDQwMWY4OTUsIDB4ODAyNDQ4MDAsCisJMHg4MjI0MDU4MCwgMHgwMDAwMDNiMSwgMHgwNDAyMDdmYywgMHgwNDAxZjkxMSwKKwkweDQxNzg0ODAwLCAweDA0MDFmOGJiLCAweDgwMjQ0ODAwLCAweDgyMjQwNTgwLAorCTB4MDAwMDAzYjEsIDB4MDQwMjA3ZmMsIDB4ODAzMDYwMDAsIDB4ODIzMDA1ODAsCisJMHgwMDEwMmQ5ZiwgMHgwNDAyMDdlMiwgMHg1OWE4MDg2MywgMHg4MDA0MDljMCwKIAkweDA0MDAwMDA3LCAweDQyMDAwMDAwLCAweDAwMDA0MDA0LCAweDQyMDAxMDAwLAotCTB4MDAwMDAwMDgsIDB4NTlhODE4NjIsIDB4MDQwMWYwY2YsIDB4NDIwMDYwMDAsCi0JMHgwMDEwMmZiMiwgMHg1MDMwMTAwMCwgMHg0MTc4NDgwMCwgMHg0YTAzOTAyZCwKLQkweDAwMDAyMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMWY0LCAweDU5YzgwMDJjLAotCTB4OGMwMDA1MzAsIDB4MDQwMDAwMDcsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsCi0JMHg0MjAwMDAwMCwgMHgwMDAwNDAwMywgMHg0MTc4MTAwMCwgMHgwNDAxZjBiZSwKLQkweDU5YzgwMDJjLCAweDgyMDAwNTAwLCAweGZmZTBmZmZmLCAweDgyMDgwZDAwLAotCTB4MDAxZjAwMDAsIDB4ODAwNDA1NDAsIDB4NDgwMzkwMmMsIDB4MDQwMWY4MjgsCi0JMHg4MDI0NDgwMCwgMHg0MDI0MDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDExMCwKLQkweDA0MDIwN2ZiLCAweDA0MDFmOGI4LCAweDQxNzg0ODAwLCAweDA0MDFmODUwLAotCTB4NTljODAwMzQsIDB4ODIwODBkMDAsIDB4MDAxZjAwMDAsIDB4ODIwMDA1MDAsCi0JMHgwMDFmMDAwMCwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwNiwgMHg1OWE4MDA2MywKLQkweDgwMDAwMDAwLCAweDQ4MDM1MDYzLCAweDQwMjQwMDAwLCAweDQ4MDM1MDYyLAotCTB4ODAyNDQ4MDAsIDB4NDAyNDAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMTAsCi0JMHgwNDAyMDdlZiwgMHg4MDMwNjAwMCwgMHg4MjMwMDU4MCwgMHgwMDEwMmZiNCwKLQkweDA0MDIwN2NkLCAweDU5YTgwODYzLCAweDgwMDQwOWMwLCAweDA0MDAwMDA2LAorCTB4MDAwMDAwMDIsIDB4NTlhODE4NjIsIDB4MDQwMWYwZjYsIDB4NDIwMDYwMDAsCisJMHgwMDEwMmQ5ZCwgMHg1MDMwMTAwMCwgMHg0MTc4NDgwMCwgMHg0YTAzOTAyZCwKKwkweDAwMDAwODAwLCAweDA0MDFmODc2LCAweDgwMjQ0ODAwLCAweDgyMjQwNTgwLAorCTB4MDAwMDAwMTgsIDB4MDQwMjA3ZmMsIDB4MDQwMWY4ZjIsIDB4NDE3ODQ4MDAsCisJMHgwNDAxZjg5YywgMHg4MDI0NDgwMCwgMHg4MjI0MDU4MCwgMHgwMDAwMDAxOCwKKwkweDA0MDIwN2ZjLCAweDgwMzA2MDAwLCAweDgyMzAwNTgwLCAweDAwMTAyZDlmLAorCTB4MDQwMjA3ZWQsIDB4NTlhODA4NjMsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDcsCisJMHg0MjAwMDAwMCwgMHgwMDAwNDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwKKwkweDU5YTgxODYyLCAweDA0MDFmMGQ3LCAweDQyMDA2MDAwLCAweDAwMTAyZDlkLAorCTB4NTAzMDEwMDAsIDB4NDE3ODQ4MDAsIDB4NGEwMzkwMmQsIDB4MDAwMDA0MDAsCisJMHgwNDAxZjg1NywgMHg4MDI0NDgwMCwgMHg4MjI0MDU4MCwgMHgwMDAwMDA4OCwKKwkweDA0MDIwN2ZjLCAweDA0MDFmOGQzLCAweDQxNzg0ODAwLCAweDA0MDFmODdkLAorCTB4ODAyNDQ4MDAsIDB4ODIyNDA1ODAsIDB4MDAwMDAwODgsIDB4MDQwMjA3ZmMsCisJMHg4MDMwNjAwMCwgMHg4MjMwMDU4MCwgMHgwMDEwMmQ5ZiwgMHgwNDAyMDdlZCwKKwkweDU5YTgwODYzLCAweDgwMDQwOWMwLCAweDA0MDAwMDA3LCAweDQyMDAwMDAwLAorCTB4MDAwMDQwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDgsIDB4NTlhODE4NjIsCisJMHgwNDAxZjBiOCwgMHg0MjAwNjAwMCwgMHgwMDEwMmQ5ZCwgMHg1MDMwMTAwMCwKKwkweDQxNzg0ODAwLCAweDRhMDM5MDJkLCAweDAwMDAyMDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAxZjQsIDB4NTljODAwMmMsIDB4OGMwMDA1MzAsIDB4MDQwMDAwMDcsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg0MjAwMDAwMCwgMHgwMDAwNDAwMywKKwkweDQxNzgxMDAwLCAweDA0MDFmMGE3LCAweDU5YzgwMDJjLCAweDgyMDAwNTAwLAorCTB4ZmZlMGZmZmYsIDB4ODIwODBkMDAsIDB4MDAxZjAwMDAsIDB4ODAwNDA1NDAsCisJMHg0ODAzOTAyYywgMHgwNDAxZjgyNiwgMHg4MDI0NDgwMCwgMHg4MjI0MDU4MCwKKwkweDAwMDAwMTEwLCAweDA0MDIwN2ZjLCAweDA0MDFmOGEyLCAweDQxNzg0ODAwLAorCTB4MDQwMWY4NGMsIDB4NTljODAwMzQsIDB4ODIwODBkMDAsIDB4MDAxZjAwMDAsCisJMHg4MjAwMDUwMCwgMHgwMDFmMDAwMCwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwNiwKKwkweDU5YTgwMDYzLCAweDgwMDAwMDAwLCAweDQ4MDM1MDYzLCAweDQwMjQwMDAwLAorCTB4NDgwMzUwNjIsIDB4ODAyNDQ4MDAsIDB4ODIyNDA1ODAsIDB4MDAwMDAxMTAsCisJMHgwNDAyMDdmMCwgMHg4MDMwNjAwMCwgMHg4MjMwMDU4MCwgMHgwMDEwMmQ5ZiwKKwkweDA0MDIwN2NmLCAweDU5YTgwODYzLCAweDgwMDQwOWMwLCAweDA0MDAwMDA2LAogCTB4NDIwMDAwMDAsIDB4MDAwMDQwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMjAsCi0JMHg1OWE4MTg2MiwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg1OWM4MDAyYywKKwkweDU5YTgxODYyLCAweDAyMDFmMDAwLCAweDAwMTAyMDY2LCAweDU5YzgwMDJjLAogCTB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODIwODBkMDAsIDB4MDAwMGZmZmYsCi0JMHg4MDA0MDU0MCwgMHg0ODAzOTAyYywgMHg0MDA4MDAwMCwgMHg0ODAzOTAyOCwKLQkweDQ4MDM5MDI5LCAweDU5YTgwMDY0LCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LAotCTB4MDQwMDAwMDQsIDB4NDAwODAwMDAsIDB4NDgwMzkwMmEsIDB4NDgwMzkwMmIsCi0JMHg1OWM4MDgyZCwgMHg4MjA0MGQwMCwgMHhmZmZmZmMwMCwgMHg0MDI0MDAwMCwKLQkweDgwMDQwZDQwLCAweDQ4MDc5MDJkLCAweDQyMDBiMDAwLCAweDAwMDAwMWY0LAorCTB4ODAwNDA1NDAsIDB4NDgwMzkwMmMsIDB4NDgwYjkwMjgsIDB4NDgwYjkwMjksCisJMHg1OWE4MDA2NCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAwMDAwMywKKwkweDQ4MGI5MDJhLCAweDQ4MGI5MDJiLCAweDU5YzgwMDJkLCAweDgyMDAwNTAwLAorCTB4ZmZmZmZjMDAsIDB4ODAyNDA1NDAsIDB4NDgwMzkwMmQsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDFmNCwgMHg1OWM4MDAyYywgMHg4MjAwMDUwMCwgMHgxODAwMDAwMCwKKwkweDA0MDAwMDA3LCAweDgwNThiMDQwLCAweDA0MDIwN2ZiLCAweDQyMDAwMDAwLAorCTB4MDAwMDQwMDMsIDB4NDE3ODEwMDAsIDB4MDQwMWYwNWEsIDB4NGEwMzkwMmUsCisJMHgwMDAwMDAwMSwgMHg0MjAwYjAwMCwgMHgwMDAwMDFmNCwgMHg1OWM4MDAyZSwKKwkweDhjMDAwNTAwLCAweDA0MDAwMDA2LCAweDgwNThiMDQwLCAweDA0MDIwN2ZjLAorCTB4NDIwMDAwMDAsIDB4MDAwMDQwMDMsIDB4MDQwMWYwNGUsIDB4MWMwMWYwMDAsCisJMHg0MTc4MzgwMCwgMHg1OWM4MDAyZCwgMHg4MjAwMDUwMCwgMHhmZmZmZmMwMCwKKwkweDgwMjQwZDQwLCAweDQ4MDc5MDJkLCAweDQyMDBiMDAwLCAweDAwMDAwMWY0LAogCTB4NTljODAwMmMsIDB4ODIwMDA1MDAsIDB4MTgwMDAwMDAsIDB4MDQwMDAwMDcsCiAJMHg4MDU4YjA0MCwgMHgwNDAyMDdmYiwgMHg0MjAwMDAwMCwgMHgwMDAwNDAwMywKLQkweDQxNzgxMDAwLCAweDA0MDFmMDZjLCAweDRhMDM5MDJlLCAweDAwMDAwMDAxLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAxZjQsIDB4NTljODAwMmUsIDB4OGMwMDA1MDAsCi0JMHgwNDAwMDAwNiwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg0MjAwMDAwMCwKLQkweDAwMDA0MDAzLCAweDA0MDFmMDYwLCAweDFjMDFmMDAwLCAweDQxNzgzODAwLAotCTB4NTljODA4MmQsIDB4ODIwNDBkMDAsIDB4ZmZmZmZjMDAsIDB4NDAyNDAwMDAsCi0JMHg4MDA0MGQ0MCwgMHg0ODA3OTAyZCwgMHg0MjAwYjAwMCwgMHgwMDAwMDFmNCwKLQkweDU5YzgwMDJjLCAweDgyMDAwNTAwLCAweDE4MDAwMDAwLCAweDA0MDAwMDA3LAotCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZmIsIDB4NDIwMDAwMDAsIDB4MDAwMDQwMDMsCi0JMHg0MTc4MTAwMCwgMHgwNDAxZjA0YywgMHg1OWM4MDAzMCwgMHg1OWM4MDgzMCwKLQkweDgwMDQwNTgwLCAweDA0MDIwN2ZkLCAweDQwMDQxODAwLCAweDU5YzgwMDMxLAotCTB4NTljODA4MzEsIDB4ODAwNDA1ODAsIDB4MDQwMjA3ZmQsIDB4NDAwNDIwMDAsCi0JMHg1OWM4MDAzMiwgMHg1OWM4MDgzMiwgMHg4MDA0MDU4MCwgMHgwNDAyMDdmZCwKLQkweDQwMDQyODAwLCAweDU5YzgwMDMzLCAweDU5YzgwODMzLCAweDgwMDQwNTgwLAotCTB4MDQwMjA3ZmQsIDB4NDAwNDMwMDAsIDB4NDAwYzAwMDAsIDB4ODAwODA1ODAsCi0JMHgwNDAwMDAwMiwgMHg4MDFjMzgwMCwgMHg0MDEwMDAwMCwgMHg4MDA4MDU4MCwKLQkweDA0MDAwMDAyLCAweDgwMWMzODAwLCAweDU5YTgwMDY0LCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDQsIDB4MDQwMDAwMDksIDB4NDAxNDAwMDAsIDB4ODAwODA1ODAsCi0JMHgwNDAwMDAwMiwgMHg4MDFjMzgwMCwgMHg0MDE4MDAwMCwgMHg4MDA4MDU4MCwKLQkweDA0MDAwMDAyLCAweDgwMWMzODAwLCAweDU5YTgwMDY0LCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDQsIDB4MDQwMDAwMGQsIDB4NTljODAwMzQsIDB4NTljODA4MzQsCi0JMHg4MDA0MDU4MCwgMHgwNDAyMDdmZCwgMHg4MjA0MDUwMCwgMHgwMDAwZmZmZiwKLQkweDgyMDgwZDAwLCAweDAwMDBmZmZmLCAweDgwMDQwNTgwLCAweDA0MDAwMDBlLAotCTB4ODAxYzM4MDAsIDB4MDQwMWYwMGMsIDB4NTljODAwMzQsIDB4NTljODA4MzQsCi0JMHg4MDA0MDU4MCwgMHgwNDAyMDdmZCwgMHg4MjA0MDUwMCwgMHgwMDAwMDBmZiwKLQkweDgyMDgwZDAwLCAweDAwMDAwMGZmLCAweDgwMDQwNTgwLCAweDA0MDAwMDAyLAotCTB4ODAxYzM4MDAsIDB4ODAxYzM5YzAsIDB4MDQwMDAwMDYsIDB4NTlhODAwNjMsCi0JMHg4MDFjMDQwMCwgMHg0ODAzNTA2MywgMHg0MDI0MDAwMCwgMHg0ODAzNTA2MiwKLQkweDFjMDFmMDAwLCAweDQ4MDM0MjA2LCAweDQ4MDc0NDA2LCAweDQ4MGI0MjA3LAotCTB4NDgwZjQ0MDcsIDB4NDgxMzQyMDgsIDB4NDgxNzQ0MDgsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjJjMywgMHg0MjAwMDAwMCwgMHgwMDYwMDAwMCwgMHg4MDAwMDA0MCwKLQkweDA0MDIwN2ZmLCAweDFjMDFmMDAwLCAweDVhNWE1YTVhLCAweGE1YTVhNWE1LAotCTB4NTlhMDBjMGEsIDB4ODAwNDA5YzAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsCi0JMHg4MjA0MDQ4MCwgMHgwMDAwMDAyMSwgMHgwMjAyMTAwMCwgMHgwMDEwMjMxMCwKKwkweDQxNzgxMDAwLCAweDA0MDFmMDNiLCAweDU5YzgxODMwLCAweDU5YzgwMDMwLAorCTB4ODAwYzBkODAsIDB4MDQwMjA3ZmQsIDB4ODAwODBkODAsIDB4MDQwMDAwMDIsCisJMHg4MDFjMzgwMCwgMHg1OWM4MjAzMSwgMHg1OWM4MDAzMSwgMHg4MDEwMGQ4MCwKKwkweDA0MDIwN2ZkLCAweDgwMDgwZDgwLCAweDA0MDAwMDAyLCAweDgwMWMzODAwLAorCTB4NTlhODAwNjQsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMTksCisJMHg1OWM4MjgzMiwgMHg1OWM4MDAzMiwgMHg4MDE0MGQ4MCwgMHgwNDAyMDdmZCwKKwkweDgwMDgwZDgwLCAweDA0MDAwMDAyLCAweDgwMWMzODAwLCAweDU5YzgzMDMzLAorCTB4NTljODAwMzMsIDB4ODAxODBkODAsIDB4MDQwMjA3ZmQsIDB4ODAwODBkODAsCisJMHgwNDAwMDAwMiwgMHg4MDFjMzgwMCwgMHg1OWM4MDAzNCwgMHg1OWM4MDgzNCwKKwkweDgwMDQwZDgwLCAweDA0MDIwN2ZkLCAweDgwMDgwZDgwLCAweDgyMDQwZDAwLAorCTB4MDAwMGZmZmYsIDB4MDQwMDAwMGMsIDB4ODAxYzM4MDAsIDB4MDQwMWYwMGEsCisJMHg1OWM4MDAzNCwgMHg1OWM4MDgzNCwgMHg4MDA0MGQ4MCwgMHgwNDAyMDdmZCwKKwkweDgwMDgwZDgwLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDA0MDAwMDAyLAorCTB4ODAxYzM4MDAsIDB4ODAxYzM5YzAsIDB4MDQwMDAwMDUsIDB4NTlhODAwNjMsCisJMHg4MDFjMDQwMCwgMHg0ODAzNTA2MywgMHg0ODI3NTA2MiwgMHgxYzAxZjAwMCwKKwkweDQ4MDM0MjA2LCAweDQ4MDc0NDA2LCAweDQ4MGI0MjA3LCAweDQ4MGY0NDA3LAorCTB4NDgxMzQyMDgsIDB4NDgxNzQ0MDgsIDB4MDIwMWYwMDAsIDB4MDAxMDIwNjksCisJMHg0MjAwMDAwMCwgMHgwMDYwMDAwMCwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZiwKKwkweDFjMDFmMDAwLCAweDVhNWE1YTVhLCAweGE1YTVhNWE1LCAweDU5YTAwYzBhLAorCTB4ODAwNDA5YzAsIDB4MDIwMDAwMDAsIDB4MDAxMDIwYjYsIDB4ODIwNDA0ODAsCisJMHgwMDAwMDAyMSwgMHgwMjAyMTAwMCwgMHgwMDEwMjBiNiwgMHg4MjA0MDQ4MCwKKwkweDAwMDAwMDExLCAweDA0MDAxMDAzLCAweDQyMDAwODAwLCAweDAwMDAwMDEwLAorCTB4NTlhMDAyMDgsIDB4NTlhMDE0MDcsIDB4OTAwODExYzAsIDB4ODAwODE1NDAsCisJMHg1OWEwMDIwNywgMHg1OWEwMWMwNiwgMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwKKwkweDAyMDFmODAwLCAweDAwMTAzODFhLCAweDA0MDAwMDA2LCAweDAyMDFmODAwLAorCTB4MDAxMDM4M2UsIDB4NGEwMWQ4MDksIDB4MDAxMDJkYzAsIDB4MWMwMWYwMDAsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwKKwkweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIwYWEsIDB4NTlhMDBjMGEsCiAJMHg4MjA0MDQ4MCwgMHgwMDAwMDAxMSwgMHgwNDAwMTAwMywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDEwLCAweDU5YTAwNDBiLCAweDU5YTAxMjBiLCAweDkwMDgxMWMwLAorCTB4ODAwODE1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDgsIDB4OTAwYzE5YzAsCisJMHg4MDBjMWQ0MCwgMHg1OGVjMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwMzg0MSwKKwkweDRhMDFkODA5LCAweDAwMTAyZGRiLCAweDFjMDFmMDAwLCAweDQwMzFkODAwLAorCTB4NThlZjQwMGIsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjBhYSwgMHg1OWEwMGMwYSwgMHg4MjA0MDQ4MCwKKwkweDAwMDAwMDExLCAweDAyMDAxMDAwLCAweDAwMTAyMDY2LCAweDgyMDQwYzgwLAogCTB4MDAwMDAwMTAsIDB4NTlhMDAyMDgsIDB4NTlhMDE0MDcsIDB4OTAwODExYzAsCiAJMHg4MDA4MTU0MCwgMHg1OWEwMDIwNywgMHg1OWEwMWMwNiwgMHg5MDBjMTljMCwKLQkweDgwMGMxZDQwLCAweDAyMDFmODAwLCAweDAwMTAzYTAwLCAweDA0MDAwMDA2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDNhMjUsIDB4NGEwMWQ4MDksIDB4MDAxMDJmZDUsCi0JMHgxYzAxZjAwMCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsCi0JMHg1OWEwMGMwYSwgMHg4MjA0MDQ4MCwgMHgwMDAwMDAxMSwgMHgwNDAwMTAwMywKLQkweDQyMDAwODAwLCAweDAwMDAwMDEwLCAweDU5YTAwNDBiLCAweDU5YTAxMjBiLAotCTB4OTAwODExYzAsIDB4ODAwODE1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDgsCi0JMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg1OGVjMDAwMywgMHgwMjAxZjgwMCwKLQkweDAwMTAzYTI4LCAweDRhMDFkODA5LCAweDAwMTAyZmYwLCAweDFjMDFmMDAwLAotCTB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMwNCwgMHg1OWEwMGMwYSwKLQkweDgyMDQwNDgwLCAweDAwMDAwMDExLCAweDAyMDAxMDAwLCAweDAwMTAyMmMwLAotCTB4ODIwNDBjODAsIDB4MDAwMDAwMTAsIDB4NTlhMDAyMDgsIDB4NTlhMDE0MDcsCi0JMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDIwNywgMHg1OWEwMWMwNiwKLQkweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDgyMDgxNDAwLCAweDAwMDAwMDQwLAotCTB4NThlYzAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMjUsIDB4NGEwMWQ4MDksCi0JMHgwMDEwMzAwZSwgMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwKKwkweDgwMGMxZDQwLCAweDgyMDgxNDAwLCAweDAwMDAwMDQwLCAweDU4ZWMwMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDM4M2UsIDB4NGEwMWQ4MDksIDB4MDAxMDJkZjksCisJMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwMiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLCAweDAwMTAyMGFhLAorCTB4NTlhMDA0MGEsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTAsIDB4NTlhMDA0MGIsCisJMHg1OWEwMTIwYiwgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDIwOSwKKwkweDU5YTAxYzA4LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDgyMDgxNDAwLAorCTB4MDAwMDAwNDAsIDB4NThlYzAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDM4NDEsCisJMHg0YTAxZDgwOSwgMHgwMDEwMjA1ZiwgMHgxYzAxZjAwMCwgMHg0OGVmYzg1NywKKwkweDU5YTAwMjA3LCAweDU5YTAxNDA3LCAweDkwMDAwMWMwLCAweDgwMDgxNTQwLAorCTB4NTlhMDAyMDksIDB4NTlhMDFjMDksIDB4OTAwMDAxYzAsIDB4ODAwYzFkNDAsCisJMHg1OWEwMDQwNiwgMHg0ODAzNDAwMCwgMHg0ODBiNDAwMSwgMHg0ODBmNDAwMiwKKwkweDAyMDFmODAwLCAweDAwMTAzODFhLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAxMCwgMHgwMjAxZjgwMCwgMHgwMDEwMzgzZSwgMHg0YTAxZDgwOSwKKwkweDAwMTAyZTJlLCAweDFjMDFmMDAwLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLAorCTB4NThlZTU4MGQsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjBhYSwgMHg0OGVmYzg1NywgMHg0OWEzYzg1NywKKwkweDQ5MmZjODU3LCAweDU5MmMwYTA0LCAweDgwMDQwOTEwLCAweDA0MDIwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMTksIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsCisJMHg0ODA1ZDgwYywgMHgwNDAxZjAwYSwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwKIAkweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLAotCTB4MDAxMDIzMDQsIDB4NTlhMDA0MGEsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTAsCi0JMHg1OWEwMDQwYiwgMHg1OWEwMTIwYiwgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwKLQkweDU5YTAwMjA5LCAweDU5YTAxYzA4LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLAotCTB4ODIwODE0MDAsIDB4MDAwMDAwNDAsIDB4NThlYzAwMDMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2EyOCwgMHg0YTAxZDgwOSwgMHgwMDEwMjJiOSwgMHgxYzAxZjAwMCwKLQkweDQ4ZWZjODU3LCAweDU5YTAwMjA3LCAweDU5YTAxNDA3LCAweDkwMDAwMWMwLAotCTB4ODAwODE1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDksIDB4OTAwMDAxYzAsCi0JMHg4MDBjMWQ0MCwgMHg1OWEwMDQwNiwgMHg0ODAzNDAwMCwgMHg0ODBiNDAwMSwKLQkweDQ4MGY0MDAyLCAweDAyMDFmODAwLCAweDAwMTAzYTAwLCAweDA0MDIwMDA1LAotCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAxMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EyNSwKLQkweDRhMDFkODA5LCAweDAwMTAzMDQzLCAweDFjMDFmMDAwLCAweDQwMzFkODAwLAotCTB4NThlZjQwMGIsIDB4NThlZTU4MGQsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMwNCwgMHg0OGVmYzg1NywKLQkweDQ5YTNjODU3LCAweDQ5MmZjODU3LCAweDU5MmMwYTA0LCAweDgwMDQwOTEwLAotCTB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMTksIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjMwYywgMHg0ODA1ZDgwYywgMHgwNDAxZjAwYSwgMHg0MDMxZDgwMCwKLQkweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLAotCTB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4NDhlZmM4NTcsIDB4NDlhM2M4NTcsCi0JMHg0OGVmYzg1NywgMHg0OWEzYzg1NywgMHg1OGVjMDAwYywgMHg4MDAwMDA0MCwKLQkweDA0MDAwMDEyLCAweDQ4MDFkODBjLCAweDAyMDFmODAwLCAweDAwMTAzYTAwLAotCTB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjMwYywgMHg0MjAwMDgwMCwgMHgwMDAwMDAxMCwgMHg1OGVjMTAwNywKLQkweDU4ZWMxODA4LCAweDAyMDFmODAwLCAweDAwMTAzYTI1LCAweDRhMDFkODA5LAotCTB4MDAxMDMwNTcsIDB4MWMwMWYwMDAsIDB4NThlZTU4MGQsIDB4NDhlZmM4NTcsCi0JMHg0OWEzYzg1NywgMHg0OTJmYzg1NywgMHg0OTJmMzAwNiwgMHg1OTJjMDQwNCwKLQkweDg0MDAwNTVlLCAweDQ4MDI1YzA0LCAweDRhMDFkODA5LCAweDAwMTAzMDgxLAorCTB4MDAxMDIwYWEsIDB4NDhlZmM4NTcsIDB4NDlhM2M4NTcsIDB4NDhlZmM4NTcsCisJMHg0OWEzYzg1NywgMHg1OGVjMDAwYywgMHg4MDAwMDA0MCwgMHgwNDAwMDAxMiwKKwkweDQ4MDFkODBjLCAweDAyMDFmODAwLCAweDAwMTAzODFhLCAweDA0MDIwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAxMCwgMHg1OGVjMTAwNywgMHg1OGVjMTgwOCwKKwkweDAyMDFmODAwLCAweDAwMTAzODNlLCAweDRhMDFkODA5LCAweDAwMTAyZTQyLAogCTB4MWMwMWYwMDAsIDB4NThlZTU4MGQsIDB4NDhlZmM4NTcsIDB4NDlhM2M4NTcsCisJMHg0OTJmYzg1NywgMHg0OTJmMzAwNiwgMHg1OTJjMDQwNCwgMHg4NDAwMDU1ZSwKKwkweDQ4MDI1YzA0LCAweDRhMDFkODA5LCAweDAwMTAyZTZjLCAweDFjMDFmMDAwLAorCTB4NGQyYzAwMDAsIDB4NThlZTU4MGQsIDB4NDhlZmM4NTcsIDB4NDlhM2M4NTcsCiAJMHg0OTJmYzg1NywgMHg1OTJjMDQwNCwgMHg4NDAwMDUxZSwgMHg0ODAyNWMwNCwKIAkweDU5YTAwMDAwLCAweDU5YTAxMDAxLCAweDU5YTAxODAyLCAweDgwMDgxNDAwLAogCTB4ODIwYzFjNDAsIDB4MDAwMDAwMDAsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDQsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAxMCwgMHgwMjAxZjAwMCwgMHgwMDEwM2EyOCwKLQkweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAxLAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCi0JMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDU5YTAzMjBiLCAweDgyMTgzNTAwLCAweDAwMDAwMGZmLAotCTB4NTlhMjhjMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDIwMjAwMDAsCi0JMHgwMDEwMjMxMCwgMHg4MzQ0MDU4MCwgMHgwMDAwMDdmZCwgMHgwNDAwMDAwOCwKLQkweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDksIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2EwMCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDgwMTgzMWMwLCAweDA0MDAwMDBhLAotCTB4NDEyYzA4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMDAsIDB4MDQwMjAwMDUsCi0JMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKLQkweDQwMDY1ODAwLCAweDRhMDI1YzA0LCAweDAwMDA4MDAwLCAweDQ5N2E1YTA0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDkxMDAsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCi0JMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg0YTAxZDgwOSwKLQkweDAwMTAzMGQyLCAweDFjMDFmMDAwLCAweDU5MmMwMDA1LCAweDgyMDAwNTgwLAotCTB4MDEwMDAwMDAsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDQsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg1OTJjMDQwNiwgMHg4MjAwMmQwMCwKLQkweDAwMDBmZjAwLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgwMDAwOTA0LAotCTB4ODAwNDA4MDAsIDB4ODIwNDA0ODAsIDB4MDAwMDAwMDYsIDB4MDQwMDEwMDMsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwgMHg4MzJjYTQwMCwgMHgwMDAwMDAwNiwKLQkweDQwNTBhODAwLCAweDQwMDRiMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjI4LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMTAsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsCisJMHgwMDEwMzg0MSwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDgzNmMwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDcsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg1OWEwMzIwYiwgMHg4MjE4MzUwMCwKKwkweDAwMDAwMGZmLCAweDU5YTI4YzA2LCAweDAyMDFmODAwLCAweDAwMDIwMjY3LAorCTB4MDIwMjAwMDAsIDB4MDAxMDIwYjYsIDB4ODM0NDA1ODAsIDB4MDAwMDA3ZmQsCisJMHgwNDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwgMHgwNDAwMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDA5LCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDM4MWEsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg4MDE4MzFjMCwKKwkweDA0MDAwMDBhLCAweDQxMmMwODAwLCAweDAyMDFmODAwLCAweDAwMTAzODFhLAorCTB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjBiMiwgMHg0MDA2NTgwMCwgMHg0YTAyNWMwNCwgMHgwMDAwODAwMCwKKwkweDQ5N2E1YTA0LCAweDAyMDFmODAwLCAweDAwMTA4ZWJkLCAweDA0MDIwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDMsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsCisJMHg0YTAxZDgwOSwgMHgwMDEwMmViZiwgMHgxYzAxZjAwMCwgMHg1OTJjMDAwNSwKKwkweDgyMDAwNTgwLCAweDAxMDAwMDAwLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDQsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NTkyYzA0MDYsCisJMHg4MjAwMmQwMCwgMHgwMDAwZmYwMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDgwMDAwOTA0LCAweDgwMDQwODAwLCAweDgyMDQwNDgwLCAweDAwMDAwMDA2LAorCTB4MDQwMDEwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4NGM1MDAwMDAsCisJMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwgMHg4MzJjYTQwMCwgMHgwMDAwMDAwNiwKKwkweDQwNTBhODAwLCAweDQwMDRiMDAwLCAweDAyMDFmODAwLCAweDAwMTBhOTRmLAogCTB4NTlhMDA0MDcsIDB4NTlhMDEyMDcsIDB4OTAwODExYzAsIDB4ODAwODE1NDAsCiAJMHg1OWEwMDQwOSwgMHg1OWEwMWEwOSwgMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwKIAkweDgzMmMwNDAwLCAweDAwMDAwMDA2LCAweDRjMTQwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDNhMjgsIDB4NWMwMDI4MDAsIDB4ODAxNDI5YzAsIDB4MDQwMDAwMDMsCi0JMHg0YTAxZDgwOSwgMHgwMDEwMzBmZiwgMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwKLQkweDU4ZWY0MDBiLCAweDU4ZWU1ODBkLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAotCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4ODEyZTU5YzAsCi0JMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1OTJjMDAwNiwgMHg4MjAwMDUwMCwKLQkweGZmMDAwMDAwLCAweDgwMDAwOTA0LCAweDgwMDQwOWMwLCAweDAyMDAwMDAwLAotCTB4MDAxMDIzMDQsIDB4ODIwNDA0ODAsIDB4MDAwMDAwMGUsIDB4MDQwMDEwMDMsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwZCwgMHg1OTJlNTgwMSwgMHg4MTJlNTljMCwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDgzMmNhNDAwLCAweDAwMDAwMDA1LAotCTB4NDA1MGE4MDAsIDB4NDAwNGIwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMjgsCi0JMHg1OGVjMTAwNywgMHg1OGVjMTgwOCwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNSwKLQkweDAyMDFmMDAwLCAweDAwMTAzYTI4LCAweDAyMDFmODAwLCAweDAwMTAzYTAwLAotCTB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjMwYywgMHg1OWEwMGMwNiwgMHg4MjA0MDUwMCwgMHgwMDAwZmYwMCwKLQkweDg0MDAwMWMwLCAweDgyMDAxNDgwLCAweDAwMDAwMDA3LCAweDAyMDIxMDAwLAotCTB4MDAxMDIzMTAsIDB4MGMwMWYwMDEsIDB4MDAxMDMxM2QsIDB4MDAxMDMxNDQsCi0JMHgwMDEwMzE0YiwgMHgwMDEwMzE0YiwgMHgwMDEwMzE0YiwgMHgwMDEwMzE0ZCwKLQkweDAwMTAzMTUyLCAweDQyMDAwODAwLCAweDAwMDAwMDBkLCAweDQyMDAzODAwLAotCTB4MDAxMDMxNjYsIDB4NGEwMzQwMDAsIDB4MDAxMGI0ZWIsIDB4MDQwMWYwMTMsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwZCwgMHg0MjAwMzgwMCwgMHgwMDEwMzE2NiwKLQkweDRhMDM0MDAwLCAweDAwMTBiNGY4LCAweDA0MDFmMDBjLCAweDAyMDFmMDAwLAotCTB4MDAxMDIzMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDgsIDB4NDIwMDM4MDAsCi0JMHgwMDEwMzE3OSwgMHgwNDAxZjAwNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwKLQkweDQyMDAzODAwLCAweDAwMTAzMWMzLCAweDU5YTAwMjA3LCAweDU5YTAxNDA3LAotCTB4OTAwMDAxYzAsIDB4ODAwODE1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDksCi0JMHg5MDAwMDFjMCwgMHg4MDBjMWQ0MCwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNSwKLQkweDRjMWMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAzYTI1LCAweDVjMDAzODAwLAotCTB4NDgxZGQ4MDksIDB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsCisJMHgwMDEwMzg0MSwgMHg1YzAwMjgwMCwgMHg4MDE0MjljMCwgMHgwNDAwMDAwMywKKwkweDRhMDFkODA5LCAweDAwMTAyZWYyLCAweDVjMDBiMDAwLCAweDVjMDBhODAwLAorCTB4NWMwMGEwMDAsIDB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsCiAJMHg1OGVlNTgwZCwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwKLQkweDAyMDAwMDAwLCAweDAwMTAyMzA0LCAweDRhMDM1MDFmLCAweDAwMDAwMDAxLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMGQsIDB4NTlhMGE4MDAsIDB4ODMyY2E0MDAsCi0JMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHgwMjAxZjAwMCwKLQkweDAwMTAyMmMwLCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWU1ODBkLAotCTB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsCi0JMHgwMDEwMjMwNCwgMHg4MzJjYTQwMCwgMHgwMDAwMDAwNSwgMHg1MDUwMDAwMCwKLQkweDgyMDAxNTAwLCAweDAwMGMwMDE2LCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLAotCTB4ODI1MDBjMDAsIDB4MDAwMDAwMDMsIDB4NTAwNDAwMDAsIDB4ODIwMDE1MDAsCi0JMHgwMDAwMDAwMSwgMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHg1MDUwMDAwMCwKLQkweDgyMDAxNTAwLCAweDAwMDAwMDI4LCAweDA0MDAwMDFkLCAweDgyMDgxNTgwLAotCTB4MDAwMDAwMjgsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4ODA1MDA4MDAsCi0JMHg1MDA0MDAwMCwgMHg4MjAwMTUwMCwgMHgwMDAwMDAxMywgMHg4MjA4MTU4MCwKLQkweDAwMDAwMDEzLCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDgwMDQwODAwLAotCTB4NTAwNDAwMDAsIDB4ODIwMDE1MDAsIDB4MDAwMTAwMDAsIDB4ODIwODE1ODAsCi0JMHgwMDAxMDAwMCwgMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHg4MzZjMDU4MCwKLQkweDAwMDAwMDAwLCAweDA0MDAwMDEyLCAweDU5OWMwMDE5LCAweDhjMDAwNTBlLAotCTB4MDQwMjAwMGYsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMTAsIDB4ODA1MDA4MDAsCi0JMHg1MDA0MDAwMCwgMHg4MjAwMTUwMCwgMHgwMDAwMDAxMywgMHgwMjAyMDAwMCwKLQkweDAwMTAyMzEwLCAweDgwMDQwODAwLCAweDUwMDQwMDAwLCAweDgyMDAxNTAwLAotCTB4MDAwMTAwMDAsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwOCwgMHg0MjAwYTgwMCwgMHgwMDEwYjRlMywgMHgwMjAxZjgwMCwKLQkweDAwMTBhYjE3LCAweDAyMDFmMDAwLCAweDAwMTAyMmMwLCAweDQwMzFkODAwLAotCTB4NThlZjQwMGIsIDB4NThlZTU4MGQsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMwNCwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDA0LCAweDQyMDBhODAwLCAweDAwMTBiOGZhLCAweDgzMmNhNDAwLAotCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NTlhODAwMDUsCi0JMHg4NDAwMDU1MCwgMHg0ODAzNTAwNSwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwKLQkweDAyMDFmODAwLCAweDAwMTAzYTAwLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NTlhMDBjMDYsCi0JMHg4MjA0MDUwMCwgMHgwMDAwZmYwMCwgMHg4NDAwMDFjMCwgMHg4MjAwMTQ4MCwKLQkweDAwMDAwMDA2LCAweDAyMDIxMDAwLCAweDAwMTAyMzEwLCAweDBjMDFmMDAxLAotCTB4MDAxMDMxZWUsIDB4MDAxMDMxZjMsIDB4MDAxMDMxZjgsIDB4MDAxMDMxZjgsCi0JMHgwMDEwMzFmOCwgMHgwMDEwMzFmYSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwZCwKLQkweDQyMDBhMDAwLCAweDAwMTBiNGViLCAweDA0MDFmMDBjLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMGQsIDB4NDIwMGEwMDAsIDB4MDAxMGI0ZjgsIDB4MDQwMWYwMDcsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMjMxMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwOCwKLQkweDQyMDBhMDAwLCAweDAwMTBiNGUzLCAweDQwMDRiMDAwLCAweDgzMmNhYzAwLAotCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NTlhMDAyMDcsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjBhYSwgMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDU5MmMwMDA2LCAweDgyMDAwNTAwLCAweGZmMDAwMDAwLAorCTB4ODAwMDA5MDQsIDB4ODAwNDA5YzAsIDB4MDIwMDAwMDAsIDB4MDAxMDIwYWEsCisJMHg4MjA0MDQ4MCwgMHgwMDAwMDAwZSwgMHgwNDAwMTAwMywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDBkLCAweDU5MmU1ODAxLCAweDgxMmU1OWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsCisJMHg4MzJjYTQwMCwgMHgwMDAwMDAwNSwgMHg0MDUwYTgwMCwgMHg0MDA0YjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTBhOTRmLCAweDVjMDBiMDAwLCAweDVjMDBhODAwLAorCTB4NWMwMGEwMDAsIDB4NThlYzEwMDcsIDB4NThlYzE4MDgsIDB4ODMyYzA0MDAsCisJMHgwMDAwMDAwNSwgMHgwMjAxZjAwMCwgMHgwMDEwMzg0MSwgMHgwMjAxZjgwMCwKKwkweDAwMTAzODFhLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NTlhMDBjMDYsIDB4ODIwNDA1MDAsCisJMHgwMDAwZmYwMCwgMHg4NDAwMDFjMCwgMHg4MjAwMTQ4MCwgMHgwMDAwMDAwNywKKwkweDAyMDIxMDAwLCAweDAwMTAyMGI2LCAweDBjMDFmMDAxLCAweDAwMTAyZjM2LAorCTB4MDAxMDJmM2QsIDB4MDAxMDJmNDQsIDB4MDAxMDJmNDQsIDB4MDAxMDJmNDQsCisJMHgwMDEwMmY0NiwgMHgwMDEwMmY0YiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwZCwKKwkweDQyMDAzODAwLCAweDAwMTAyZjVmLCAweDRhMDM0MDAwLCAweDAwMTBiMmU3LAorCTB4MDQwMWYwMTMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGQsIDB4NDIwMDM4MDAsCisJMHgwMDEwMmY1ZiwgMHg0YTAzNDAwMCwgMHgwMDEwYjJmNCwgMHgwNDAxZjAwYywKKwkweDAyMDFmMDAwLCAweDAwMTAyMGI2LCAweDQyMDAwODAwLCAweDAwMDAwMDA4LAorCTB4NDIwMDM4MDAsIDB4MDAxMDJmNzIsIDB4MDQwMWYwMDUsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNCwgMHg0MjAwMzgwMCwgMHgwMDEwMmZiYywgMHg1OWEwMDIwNywKIAkweDU5YTAxNDA3LCAweDkwMDAwMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwMjA5LAogCTB4NTlhMDFjMDksIDB4OTAwMDAxYzAsIDB4ODAwYzFkNDAsIDB4ODMyYzA0MDAsCi0JMHgwMDAwMDAwNSwgMHgwMjAxZjAwMCwgMHgwMDEwM2EyOCwgMHg4MzZjMDU4MCwKLQkweDAwMDAwMDAwLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDA3LAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NTlhMDA0MDYsIDB4ODAwMDAxYzAsCi0JMHgwNDAwMDAxYSwgMHg1OWE4MDAwNSwgMHg4YzAwMDUxNCwgMHgwNDAwMDAwNSwKLQkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDQwMDAwODAwLCAweDA0MDFmMDAzLAotCTB4NTlhMDAyMDcsIDB4NTlhODA4NTMsIDB4NDgwMzUwNTMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTYzYiwgMHgwNDAwMDAyMiwgMHgwMjAxZjgwMCwgMHgwMDEwMTY0MiwKLQkweDA0MDAwMDFmLCAweDAyMDFmODAwLCAweDAwMTAxNjQ5LCAweDA0MDAwMDFjLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE2NTAsIDB4MDQwMDAwMTksIDB4NDgwNzUwNTMsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMjMxMCwgMHg1OWM0MDgwMSwgMHg4MjA0MGQwMCwKLQkweDAwMDE4MDAwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDIwMDA0LAotCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDAsIDB4MDQwMWYwMGQsIDB4ODIwNDA1ODAsCi0JMHgwMDAwODAwMCwgMHgwNDAyMDAwNCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwKLQkweDA0MDFmMDA3LCAweDgyMDQwNTgwLCAweDAwMDEwMDAwLCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDMsIDB4NTlhMDA0MDYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAxZiwgMHg1OWM0MDAwNiwKLQkweDg0MDAwNTAwLCAweDQ4MDM4ODA2LCAweDAyMDFmODAwLCAweDAwMTA2ZWRlLAotCTB4NDk3Yjg4ODAsIDB4MDIwMWY4MDAsIDB4MDAxMGE5YzAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYTljZSwgMHg0MjAwMDAwMCwgMHgwMDEwYjhjYSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAotCTB4MDAxMDUxOGMsIDB4NGEwMzg4MDgsIDB4MDAwMDAwMDAsIDB4NDIwMmQ4MDAsCi0JMHgwMDAwMDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxOTNkLCAweDRhMDM1MDQ5LCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAotCTB4MDAxMDA2ZDQsIDB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsIDB4ODAwNDA5YzAsCi0JMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDgzNmMwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA1LAotCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDcsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCi0JMHg1OWEyOGMwNiwgMHg1OWEwMzIwYiwgMHg4MjE4MzUwMCwgMHgwMDAwMDBmZiwKLQkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLAotCTB4ODM0NDA1ODAsIDB4MDAwMDA3ZmQsIDB4MDQwMDAwMDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDllNywgMHgwNDAwMDAwNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwOSwKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDAyMDFmODAwLCAweDAwMTAzYTAwLAotCTB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjMwYywgMHg0OTdhNWEwNCwgMHg0YTAyNWMwNCwgMHgwMDAwODAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA5MTE1LCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDMsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NGEwMWQ4MDksCi0JMHgwMDEwMzI5ZSwgMHgxYzAxZjAwMCwgMHg1OTJjMDAwNSwgMHg4MjAwMGQwMCwKLQkweDAwMDBmZmZmLCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDgyMDAwNTgwLAotCTB4MDEwMDAwMDAsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDQsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg4MDA0MDkwNCwgMHg4MzJjYTQwMCwKLQkweDAwMDAwMDA1LCAweDQwNTBhODAwLCAweDQwMDRiMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMGFiMjgsIDB4NTlhMDAyMDcsIDB4NTlhMDE0MDcsIDB4OTAwMDAxYzAsCi0JMHg4MDA4MTU0MCwgMHg1OWEwMDIwOSwgMHg1OWEwMWMwOSwgMHg5MDAwMDFjMCwKLQkweDgwMGMxZDQwLCAweDgzMmMwNDAwLCAweDAwMDAwMDA1LCAweDAyMDFmMDAwLAotCTB4MDAxMDNhMjgsIDB4NDk2ZmM4NTcsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDAsCi0JMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAxYSwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDAyMDIwODAwLAotCTB4MDAxMDQxNDIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMjAsIDB4NTlhMDA0MDcsCi0JMHg1OWEwMTIwNywgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDQwOSwKLQkweDU5YTAxYTA5LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDQxOWMwMDAwLAotCTB4NDlhM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMjUsIDB4NGEwMWQ4MDksCi0JMHgwMDEwMzJkYSwgMHgxYzAxZjAwMCwgMHg0ODMzYzg1NywgMHg0MDMxZDgwMCwKLQkweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLAotCTB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4NTk5YzAyMDAsIDB4ODAwMDAxYzAsCi0JMHgwMjAwMDAwMCwgMHgwMDEwMjMxMCwgMHg1OWE4MDAwNSwgMHg4YzAwMDUxMiwKLQkweDA0MDAwMDA0LCAweDU5OWMwMDE5LCAweDg0MDAwNTBjLCAweDQ4MDMzODE5LAotCTB4MDIwMWY4MDAsIDB4MDAxMDk3ZDcsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsCi0JMHgwNDAwMDAwNCwgMHg1OTljMDAxNywgMHg4NDAwMDUwOCwgMHg0ODAzMzgxNywKLQkweDAyMDFmODAwLCAweDAwMTAzYjI1LCAweDA0MDIwMDA0LCAweDhjMDAwNTBhLAotCTB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4NDgwM2M4NTcsIDB4OGMwMDA1MDQsCi0JMHgwNDAyMDAwNCwgMHg1OWM0MDhhMywgMHg4NDA0MGQ3YSwgMHg0ODA3ODhhMywKLQkweDhjMDAwNTAyLCAweDA0MDIwMDA0LCAweDU5YzQwOGEzLCAweDg0MDQwZDA4LAotCTB4NDgwNzg4YTMsIDB4NTk5YzBjMDIsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMDQsCi0JMHg4YzAwMDUxNiwgMHgwNDAwMDAxMiwgMHgwNDAxZjAwMSwgMHg4MjA0MTQ4MCwKLQkweDAwMDAwMDdmLCAweDAyMDIxMDAwLCAweDAwMTAyMzEwLCAweDgyMDQxNDAwLAotCTB4MDAxMDIxMGUsIDB4NTAwODEwMDAsIDB4ODIwODE1MDAsIDB4MDAwMDAwZmYsCi0JMHg4YzAwMDUwMCwgMHgwNDAyMDAwNiwgMHg0ODBiNTAxMCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA2Yzc4LCAweDU5OWMwMDE5LAotCTB4OGMwMDA1MGUsIDB4MDQwMjAwMGIsIDB4NTlhODA4MDYsIDB4OGMwNDBkMTQsCi0JMHgwNDAwMDAwOCwgMHg0MjAwMDgwMCwgMHgwMDEwYjRlMywgMHg1MDA0MDgwMCwKLQkweDgyMDQwZDAwLCAweDAwMDAwMDI4LCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMzAsIDB4MDQwMDAwMDMsIDB4ODAwMDAxMDgsCi0JMHgwNDAxZjAwMywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMiwgMHg0ODAzOTA0MCwKLQkweDQyMDAwODAwLCAweDAwMDAwMDAyLCAweDgyMDAwNDAwLCAweDAwMTAzNDE1LAotCTB4NTAwMDEwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNzgsIDB4NTk5YzAyMDEsCi0JMHg4MjAwMGM4MCwgMHgwMDAwMDEwMCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwKLQkweDgyMDAwYzgwLCAweDAwMDAwODQxLCAweDAyMDIxMDAwLCAweDAwMTAyMzEwLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsCi0JMHg1OTljMDQwMSwgMHg4MDAwMDU0MCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMxMCwKLQkweDU5OWMwNDA5LCAweDU5OWMwYzA3LCAweDgwMDQwYzgwLCAweDAyMDIxMDAwLAotCTB4MDAxMDIzMTAsIDB4ODAwMDAwNDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsCi0JMHg1OTljMDIwOSwgMHg1OTljMGEwNywgMHg4MDA0MGM4MCwgMHgwMjAyMTAwMCwKLQkweDAwMTAyMzEwLCAweDgwMDAwMDQwLCAweDAyMDAwMDAwLCAweDAwMTAyMzEwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUzY2QsIDB4MDIwMWY4MDAsIDB4MDAxMDRjYjYsCi0JMHg1OTljMDIwMSwgMHg0ODAzNTAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwMTJlZSwKLQkweDU5OWMwMjBhLCAweDgwMDAwMWMwLCAweDA0MDAwMDAzLCAweDQ4MDM1MDRkLAotCTB4MDQwMWYwMDMsIDB4NGEwMzUwNGQsIDB4MDAwMDAwYzgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2IyNSwgMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNjBkZiwKLQkweDQxN2E1MDAwLCAweDgzNmMwNTgwLCAweDAwMDAwMDAwLCAweDA0MDIwMDk4LAotCTB4NTk5YzAwMDMsIDB4NTk5YzA4MDQsIDB4OWMwMDAxYzAsIDB4OWMwNDA5YzAsCi0JMHg0ODAzNTAwMiwgMHg0ODA3NTAwMywgMHg1OTljMTAxNywgMHg4YzA4MTUxYywKLQkweDA0MDAwMDA2LCAweDU5OWMwMDA1LCAweDU5OWMwODA2LCAweDljMDAwMWMwLAotCTB4OWMwNDA5YzAsIDB4MDQwMWYwMDMsIDB4ODIwMDA1MDAsIDB4ZjBmZmZmZmYsCi0JMHg0ODAzNTAwMCwgMHg0ODA3NTAwMSwgMHg0MjAwMTAwMCwgMHgwMDEwYjRlYiwKLQkweDQ4MDAxMDAwLCAweDQ4MDQxMDAxLCAweDQyMDAxMDAwLCAweDAwMTBiNGY4LAotCTB4NDgwMDEwMDAsIDB4NDgwNDEwMDEsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsCi0JMHgwNDAyMDAxNSwgMHg1OTljMTAxOSwgMHg4MjA4MTUwMCwgMHgwMDAwZTAwMCwKLQkweDgyMDgwNTgwLCAweDAwMDAwMDAwLCAweDA0MDIwMDBjLCAweDRhMDM1MDUzLAotCTB4MDAwMDAwMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTg4YywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxODIxLCAweDA0MDFmMDJiLCAweDgyMDgwNTgwLCAweDAwMDAyMDAwLAotCTB4MDQwMjAwMGEsIDB4NGEwMzUwNTMsIDB4MDAwMDAwMDEsIDB4NDE3ODAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTg4YywgMHg0MTc4MDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxODIxLCAweDA0MDFmMDFmLCAweDgyMDgwNTgwLCAweDAwMDA0MDAwLAotCTB4MDQwMjAwMDYsIDB4NGEwMzUwNTMsIDB4MDAwMDAwMDIsIDB4NGEwMzUwNDksCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjAxNywgMHg4MjA4MDU4MCwgMHgwMDAwNjAwMCwKLQkweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDU5YTgwODU4LCAweDgyMDQwZDgwLAotCTB4MDEzOTEwNzcsIDB4MDQwMjAwMDUsIDB4NTllMDA4MTMsIDB4OGMwNDBkMDAsCi0JMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHg0YTAzNTA1MywgMHgwMDAwMDAwMywKLQkweDQyMDAwMDAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTAxODhjLAotCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMDE4MjEsCi0JMHg1OTljMDAxOSwgMHg4YzAwMDUyMCwgMHgwNDAwMDAwZCwgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDA0LCAweDQyMDAwODAwLCAweDAwMDAwMDQwLCAweDAyMDFmODAwLAotCTB4MDAxMDE5NDQsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMTAsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDBjMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk0NCwgMHg0YTAzNTAzMiwKLQkweDAwMDBhYWFhLCAweDU5OWMxMDE4LCAweDgyMDgxNTAwLCAweDAwMDAwMDMwLAotCTB4NTlhODAwNmMsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMGMsIDB4ODIwODA1ODAsCi0JMHgwMDAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMxMCwgMHg1OTljMTAxOCwKLQkweDgyMDgxNTAwLCAweGZmZmZmZmNmLCAweDgyMDgxNTQwLCAweDAwMDAwMDEwLAotCTB4NDgwYjM4MTgsIDB4MDQwMWYwMTAsIDB4ODIwODBkODAsIDB4MDAwMDAwMDAsCi0JMHgwNDAwMDAwNywgMHg4MjA4MGQ4MCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAwYSwKLQkweDgyMDgwZDgwLCAweDAwMDAwMDIwLCAweDA0MDIwMDAyLCAweDQ4MDc1MDMyLAotCTB4MDIwMWY4MDAsIDB4MDAxMDNhYmEsIDB4MDQwMDAwMDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTVmZSwgMHgwMjAxZjgwMCwgMHgwMDEwMTYyYSwgMHg1OWE4MDAyYSwKLQkweDgwMDQwNTQwLCAweDQ4MDM1MDJhLCAweDQ5ZjNjODU3LCAweDQyMDAxMDAwLAotCTB4MDAxMDUwNjUsIDB4MDIwMWY4MDAsIDB4MDAxMDVmOTAsIDB4NDIwMDEwMDAsCi0JMHgwMDEwNTA1OCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA4NCwgMHg0YTAzODgwNSwKLQkweGZmZmZmZmZmLCAweDRhMDNjMDE0LCAweDAwNDAwMDQwLCAweDRhMDNjMDEzLAotCTB4MDA0MDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4YzcsIDB4NTlhMDAwMWQsCi0JMHg4NDAwMDU0MCwgMHg0ODAzNDAxZCwgMHg0OWYzYzg1NywgMHgwMjAxZjAwMCwKLQkweDAwMTAyMmMwLCAweDAwMDAwMDE4LCAweDAwMDAwMDBjLCAweDAwMDAwMDE4LAotCTB4MDAwMDAwMjAsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMjAwMDUsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKLQkweDQyMDAwODAwLCAweDAwMDAwMDIwLCAweDU5YTAwNDA3LCAweDU5YTAxMjA3LAotCTB4OTAwODExYzAsIDB4ODAwODE1NDAsIDB4NTlhMDA0MDksIDB4NTlhMDFhMDksCi0JMHg5MDBjMTljMCwgMHg4MDBjMWQ0MCwgMHg0MTljMDAwMCwgMHgwMjAxZjAwMCwKLQkweDAwMTAzYTI4LCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTEzYiwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAxNiwKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU5YTgwMDEzLCAweDhjMDAwNTAwLAotCTB4MDQwMDAwMTEsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDAsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAyMCwgMHg1OWEwMDQwNywgMHg1OWEwMTIwNywgMHg5MDA4MTFjMCwKLQkweDgwMDgxNTQwLCAweDU5YTAwNDA5LCAweDU5YTAxYTA5LCAweDkwMGMxOWMwLAotCTB4ODAwYzFkNDAsIDB4NDIwMDAwMDAsIDB4MDAxMGJlMjEsIDB4MDIwMWYwMDAsCi0JMHgwMDEwM2EyOCwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDIwLCAweDQyMDBhODAwLCAweDAwMTBiZTIxLCAweDQyMDBhMDAwLAotCTB4ZmZmZmZmZmYsIDB4NDQ1MGE4MDAsIDB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsCi0JMHgwNDAyMDdmZCwgMHg0ZDQ0MDAwMCwgMHg0ZDM0MDAwMCwgMHg0MjAyODgwMCwKLQkweGZmZmZmZmZmLCAweDQyMDAyMDAwLCAweGZmZmZmZmZmLCAweDQyMDAzMDAwLAotCTB4MDAwMDAwMDEsIDB4NDIwMDM4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMDE4MDAsCi0JMHgwMDEwYmUyMSwgMHg1OWE4MTAxMCwgMHg4MjA4MTUwMCwgMHgwMDAwMDBmZiwKLQkweDQwMTgwMDAwLCAweDBjMDFmMDAxLCAweDAwMTAzNDZlLCAweDAwMTAzNDcxLAotCTB4MDAxMDM0NzUsIDB4MDAxMDM0NzksIDB4ODIxMDI1MDAsIDB4ZmZmZmZmMDAsCi0JMHgwNDAxZjAxNCwgMHg4MjEwMjUwMCwgMHhmZmZmMDBmZiwgMHg4NDA4MTFjMCwKLQkweDA0MDFmMDEwLCAweDgyMTAyNTAwLCAweGZmMDBmZmZmLCAweDkwMDgxMWMwLAotCTB4MDQwMWYwMGMsIDB4ODIxMDI1MDAsIDB4MDBmZmZmZmYsIDB4OWMwODAxYzAsCi0JMHg4MDEwMjU0MCwgMHg0NDEwMTgwMCwgMHg0MjAwMzAwMCwgMHhmZmZmZmZmZiwKLQkweDQyMDAyMDAwLCAweGZmZmZmZmZmLCAweDgwMGMxODAwLCAweDA0MDFmMDAzLAotCTB4NDAwODAwMDAsIDB4ODAxMDI1NDAsIDB4ODE0Njg4MDAsIDB4ODM0NDJjODAsCi0JMHgwMDAwMDA3ZiwgMHgwNDAyMTAxNCwgMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwKLQkweDRjMTgwMDAwLCAweDRjMWMwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LAotCTB4NWMwMDM4MDAsIDB4NWMwMDMwMDAsIDB4NWMwMDE4MDAsIDB4NWMwMDEwMDAsCi0JMHgwNDAyMDdmMiwgMHgwMjAxZjgwMCwgMHgwMDEwNDlmMywgMHgwNDAyMDdlZiwKLQkweDgwMTgzMDAwLCAweDgwMWMzODAwLCAweDU5MzQxMjAyLCAweDQwMTgwMDAwLAotCTB4MGMwMWY3Y2UsIDB4ODIxMDA1ODAsIDB4ZmZmZmZmZmYsIDB4MDQwMDAwMDIsCi0JMHg0NDEwMTgwMCwgMHg0MjAwMTgwMCwgMHgwMDEwYmUyMSwgMHg1MDBjMDAwMCwKLQkweDgyMDAwNTAwLCAweGZmZmZmZjAwLCAweDgwMWMwNTQwLCAweDQ0MDAxODAwLAotCTB4NWMwMjY4MDAsIDB4NWMwMjg4MDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMjAsCi0JMHg1OWEwMDQwNywgMHg1OWEwMTIwNywgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwKLQkweDU5YTAwNDA5LCAweDU5YTAxYTA5LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGJlMjEsIDB4MDIwMWYwMDAsIDB4MDAxMDNhMjgsCi0JMHg1OWEyOGMwNiwgMHg1OWEwMDIwYiwgMHg4YzAwMDUwMCwgMHgwNDAwMDAwZSwKLQkweDU5YTAxMjA4LCAweDU5YTAwNDA4LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAotCTB4OTAwMDAxYzAsIDB4ODAwODE1NDAsIDB4NDE3ODQwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDkxOSwgMHgwNDAwMDAwOCwgMHg0ODAzNDQwNiwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzEwLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDAyMDIwMDAwLAotCTB4MDAxMDIzMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDNhMDAsIDB4MDQwMjAwMDUsCi0JMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKLQkweDU5YTAwMjBiLCAweDhjMDAwNTAwLCAweDA0MDAwMDA1LCAweDAyMDFmODAwLAotCTB4MDAxMDQ5ZjMsIDB4MDIwMjAwMDAsIDB4MDAxMDNhYzQsIDB4NTlhMDAyMGIsCi0JMHg4YzAwMDUwMiwgMHgwNDAwMDAxOSwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDdmMCwKLQkweDA0MDIxMDE2LCAweDAyMDFmODAwLCAweDAwMTA0OWZjLCAweDA0MDIwMDEzLAotCTB4NDk3YTVhMDQsIDB4NGEwMjVjMDQsIDB4MDAwMDgwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTBlNiwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDRhMDFkODA5LCAweDAwMTAzNGYxLAotCTB4MWMwMWYwMDAsIDB4NTlhMjhjMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsCi0JMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwYSwKLQkweDQxMzRhMDAwLCAweDgzMmU1YzAwLCAweDAwMDAwMDAyLCAweDQxMmNhODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDYsCi0JMHg0MDU0YTAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYjI4LCAweDU5MmMwODAyLCAweDgyMDQwNTAwLCAweDAwZmYwMGZmLAotCTB4OTAwMDAxYzAsIDB4ODIwNDE1MDAsIDB4ZmYwMGZmMDAsIDB4ODAwODA1NDAsCi0JMHg0ODAyNTgwMiwgMHg1OTJjMDgwMSwgMHg4MjA0MDUwMCwgMHgwMGZmMDBmZiwKLQkweDkwMDAwMWMwLCAweDgyMDQxNTAwLCAweGZmMDBmZjAwLCAweDgwMDgwNTQwLAotCTB4NDgwMjU4MDEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGEsIDB4NTlhMDA0MDcsCi0JMHg1OWEwMTIwNywgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDQwOSwKLQkweDU5YTAxYTA5LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDQxMmMwMDAwLAotCTB4MDIwMWYwMDAsIDB4MDAxMDNhMjgsIDB4NDk2ZmM4NTcsIDB4NDk2ZjQ0MDYsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg1OWEyOGMwNiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMjQ1LCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDgzNmMwNTgwLAotCTB4MDAwMDAwMDMsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDcsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg4MzM0MGMwMCwgMHgwMDAwMDAwNiwKLQkweDU5YTAwMjBiLCAweDhjMDAwNTAwLCAweDA0MDAwMDAzLCAweDgzMzQwYzAwLAotCTB4MDAwMDAwMDgsIDB4NTgwNDAwMDEsIDB4NDgwMzQ0MDksIDB4OTAwMDAxYzAsCi0JMHg0ODAzNDIwOSwgMHg1MDA0MDAwMCwgMHg0ODAzNDQwNywgMHg5MDAwMDFjMCwKLQkweDQ4MDM0MjA3LCAweDU5MzQwMjAwLCAweDQ4MDM0NDA2LCAweDAyMDFmMDAwLAotCTB4MDAxMDIyYzAsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg1OWEwMjIwYiwKLQkweDhjMTAyNTAwLCAweDA0MDIwMDJlLCAweDhjMTAyNTA2LCAweDA0MDIwMDA2LAotCTB4NTlhMDMyMDgsIDB4ODIxODA0ODAsIDB4MDAwMDAwMDMsIDB4MDIwMjEwMDAsCi0JMHgwMDEwMjMxMCwgMHg1OWEyOGMwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwKLQkweDAyMDIwMDAwLCAweDAwMTAyMzEwLCAweDAyMDFmODAwLCAweDAwMTA0OWU3LAotCTB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDksIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjMwYywgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwgMHgwNDAyMDAwNSwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAotCTB4NTlhMDIyMGIsIDB4OGMxMDI1MDYsIDB4MDQwMDAwMDQsIDB4NTkzNDMwMDIsCi0JMHg4MjE4MzUwMCwgMHgwMGZmZmZmZiwgMHg0OTdhNWEwNCwgMHg0YTAyNWMwNCwKLQkweDAwMDA4MDAwLCAweDAyMDFmODAwLCAweDAwMTA5MGE4LCAweDA0MDIwMDA1LAotCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDMsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCi0JMHg0YTAxZDgwOSwgMHgwMDEwMzVkMSwgMHgxYzAxZjAwMCwgMHg1OWEyOGMwNiwKLQkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDAyMDIwMDAwLCAweDAwMTAyMzEwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsCi0JMHgwMDAwMDAwOSwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHgwMjAxZjgwMCwKLQkweDAwMTAzYTAwLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NDk3YTVhMDQsIDB4NGEwMjVjMDQsCi0JMHgwMDAwODAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2EwMCwgMHgwNDAyMDAwNSwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAotCTB4NTkyZTU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDkwYmQsIDB4MDQwMjAwMDUsCi0JMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKLQkweDRhMDFkODA5LCAweDAwMTAzNWEzLCAweDFjMDFmMDAwLCAweDU5MmMyODA1LAotCTB4ODIxNDBkODAsIDB4MDEwMDAwMDAsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCi0JMHgwMDAwMDAwNCwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDA4LCAweDU5YTAwMjA3LCAweDU5YTAxNDA3LCAweDkwMDAwMWMwLAotCTB4ODAwODE1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDksIDB4OTAwMDAxYzAsCi0JMHg4MDBjMWQ0MCwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKLQkweDAwMTAzYTI4LCAweDhjMTQyZDAwLCAweDA0MDAwMDAzLCAweDRhMDFkODA5LAotCTB4MDAxMDM1YmUsIDB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsCi0JMHg1OGVlNTgwZSwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwKLQkweDAyMDAwMDAwLCAweDAwMTAyMzA0LCAweDgxMmU1OWMwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDgsIDB4ODMyYzA0MDAsCi0JMHgwMDAwMDAwNSwgMHg1OGVjMTAwNywgMHg1OGVjMTgwOCwgMHgwMjAxZjAwMCwKLQkweDAwMTAzYTI4LCAweDU5MmMwMDA1LCAweDgyMDAwNTgwLCAweDAxMDAwMDAwLAotCTB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDQsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjMwYywgMHg1OWEwMDIwNywgMHg1OWEwMTQwNywgMHg5MDAwMDFjMCwKLQkweDgwMDgxNTQwLCAweDU5YTAwMjA5LCAweDU5YTAxYzA5LCAweDkwMDAwMWMwLAotCTB4ODAwYzFkNDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsIDB4ODMyYzA0MDAsCi0JMHgwMDAwMDAwNiwgMHgwMjAxZjAwMCwgMHgwMDEwM2EyOCwgMHg1OWEwMGEwYSwKLQkweDgwMDQwOWMwLCAweDAyMDAwMDAwLCAweDAwMTAyMzEwLCAweDgyMDQwNDgwLAotCTB4MDAwMDAwZTcsIDB4MDQwMDEwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwZTYsCisJMHgwMDAwMDAwNSwgMHg0YzFjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMzgzZSwKKwkweDVjMDAzODAwLCAweDQ4MWRkODA5LCAweDFjMDFmMDAwLCAweDQwMzFkODAwLAorCTB4NThlZjQwMGIsIDB4NThlZTU4MGQsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjBhYSwgMHg0YTAzNTAxZiwKKwkweDAwMDAwMDAxLCAweDQyMDBiMDAwLCAweDAwMDAwMDBkLCAweDU5YTBhODAwLAorCTB4ODMyY2E0MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwKKwkweDU4ZWU1ODBkLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLAorCTB4MDIwMDAwMDAsIDB4MDAxMDIwYWEsIDB4ODMyY2E0MDAsIDB4MDAwMDAwMDUsCisJMHg1MDUwMDAwMCwgMHg4MjAwMTUwMCwgMHgwMDBjMDAxNiwgMHgwMjAyMDAwMCwKKwkweDAwMTAyMGI2LCAweDgyNTAwYzAwLCAweDAwMDAwMDAzLCAweDUwMDQwMDAwLAorCTB4ODIwMDE1MDAsIDB4MDAwMDAwMDEsIDB4MDIwMjAwMDAsIDB4MDAxMDIwYjYsCisJMHg1MDUwMDAwMCwgMHg4MjAwMTUwMCwgMHgwMDAwMDAyOCwgMHgwNDAwMDAxZCwKKwkweDgyMDgxNTgwLCAweDAwMDAwMDI4LCAweDAyMDIwMDAwLCAweDAwMTAyMGI2LAorCTB4ODA1MDA4MDAsIDB4NTAwNDAwMDAsIDB4ODIwMDE1MDAsIDB4MDAwMDAwMTMsCisJMHg4MjA4MTU4MCwgMHgwMDAwMDAxMywgMHgwMjAyMDAwMCwgMHgwMDEwMjBiNiwKKwkweDgwMDQwODAwLCAweDUwMDQwMDAwLCAweDgyMDAxNTAwLCAweDAwMDEwMDAwLAorCTB4ODIwODE1ODAsIDB4MDAwMTAwMDAsIDB4MDIwMjAwMDAsIDB4MDAxMDIwYjYsCisJMHg4MzZjMDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAxMiwgMHg1OTljMDAxOSwKKwkweDhjMDAwNTBlLCAweDA0MDIwMDBmLCAweDAyMDFmMDAwLCAweDAwMTAyMGI2LAorCTB4ODA1MDA4MDAsIDB4NTAwNDAwMDAsIDB4ODIwMDE1MDAsIDB4MDAwMDAwMTMsCisJMHgwMjAyMDAwMCwgMHgwMDEwMjBiNiwgMHg4MDA0MDgwMCwgMHg1MDA0MDAwMCwKKwkweDgyMDAxNTAwLCAweDAwMDEwMDAwLCAweDAyMDIwMDAwLCAweDAwMTAyMGI2LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDgsIDB4NDIwMGE4MDAsIDB4MDAxMGIyZGYsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTkzZSwgMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwKKwkweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWU1ODBkLCAweDU4ZWMwMDAyLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIwYWEsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwNCwgMHg0MjAwYTgwMCwgMHgwMDEwYjZmOSwKKwkweDgzMmNhNDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhOTNlLAorCTB4NTlhODAwMDUsIDB4ODQwMDA1NTAsIDB4NDgwMzUwMDUsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjA2NiwgMHgwMjAxZjgwMCwgMHgwMDEwMzgxYSwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4NTlhMDBjMDYsIDB4ODIwNDA1MDAsIDB4MDAwMGZmMDAsIDB4ODQwMDAxYzAsCisJMHg4MjAwMTQ4MCwgMHgwMDAwMDAwNiwgMHgwMjAyMTAwMCwgMHgwMDEwMjBiNiwKKwkweDBjMDFmMDAxLCAweDAwMTAyZmU3LCAweDAwMTAyZmVjLCAweDAwMTAyZmYxLAorCTB4MDAxMDJmZjEsIDB4MDAxMDJmZjEsIDB4MDAxMDJmZjMsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwZCwgMHg0MjAwYTAwMCwgMHgwMDEwYjJlNywgMHgwNDAxZjAwYywKKwkweDQyMDAwODAwLCAweDAwMDAwMDBkLCAweDQyMDBhMDAwLCAweDAwMTBiMmY0LAorCTB4MDQwMWYwMDcsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjYsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwOCwgMHg0MjAwYTAwMCwgMHgwMDEwYjJkZiwgMHg0MDA0YjAwMCwKKwkweDgzMmNhYzAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhOTNlLAogCTB4NTlhMDAyMDcsIDB4NTlhMDE0MDcsIDB4OTAwMDAxYzAsIDB4ODAwODE1NDAsCiAJMHg1OWEwMDIwOSwgMHg1OWEwMWMwOSwgMHg5MDAwMDFjMCwgMHg4MDBjMWQ0MCwKLQkweDgzODgwNDAwLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAzYTI4LAotCTB4NGEwMWQ4MDksIDB4MDAxMDM1ZmYsIDB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsCi0JMHg1OGVmNDAwYiwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwKLQkweDAyMDAwMDAwLCAweDAwMTAyMzA0LCAweDU4ZWY0MDBiLCAweDU5YTAwMjBiLAorCTB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWYwMDAsIDB4MDAxMDM4NDEsCisJMHg4MzZjMDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDA3LCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDU5YTAxNDA2LAorCTB4ODAwODExYzAsIDB4MDQwMjAwMTcsIDB4NTljNDA4MDEsIDB4ODIwNDBkMDAsCisJMHgwMDAxODAwMCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAwNCwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAwLCAweDA0MDFmMDQ4LCAweDgyMDQwNTgwLAorCTB4MDAwMDgwMDAsIDB4MDQwMjAwMDQsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjA0MiwgMHg4MjA0MDU4MCwgMHgwMDAxMDAwMCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNjE1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAzLCAweDA0MDFmMDNiLAorCTB4NTlhODAwNmYsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDUsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMSwgMHg0MDAwMDgwMCwgMHgwNDAxZjAwMywgMHg1OWEwMDIwNywKKwkweDU5YTgwODUzLCAweDQ4MDM1MDUzLCAweDAyMDFmODAwLCAweDAwMTAxNmFjLAorCTB4MDQwMDAwMGQsIDB4MDIwMWY4MDAsIDB4MDAxMDE2YjMsIDB4MDQwMDAwMGEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTZiYSwgMHgwNDAwMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMTAxNmMxLCAweDA0MDAwMDA0LCAweDQ4MDc1MDUzLCAweDAyMDFmMDAwLAorCTB4MDAxMDIwYjYsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMWYsCisJMHg1OWM0MDAwNiwgMHg4NDAwMDUwMCwgMHg0ODAzODgwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YzMyLCAweDQ5N2I4ODgwLCAweDAyMDFmODAwLCAweDAwMTBhN2U3LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE3ZjUsIDB4NDIwMDAwMDAsIDB4MDAxMGI2YzksCisJMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTA0ZTVkLCAweDRhMDM4ODA4LCAweDAwMDAwMDAwLAorCTB4NDIwMmQ4MDAsIDB4MDAwMDAwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTlhYSwgMHg0YTAzNTA0OSwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTAwNzFhLCAweDAyMDFmMDAwLCAweDAwMTAyMDY2LAorCTB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDA3LCAweDAyMDFmMDAwLAorCTB4MDAxMDIwYjIsIDB4NTlhMjhjMDYsIDB4NTlhMDMyMGIsIDB4ODIxODM1MDAsCisJMHgwMDAwMDBmZiwgMHgwMjAxZjgwMCwgMHgwMDAyMDI2NywgMHgwMjAyMDAwMCwKKwkweDAwMTAyMGI2LCAweDgzNDQwNTgwLCAweDAwMDAwN2ZkLCAweDA0MDAwMDA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4MzYsIDB4MDQwMDAwMDUsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwOSwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHgwMjAxZjgwMCwKKwkweDAwMTAzODFhLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NDk3YTVhMDQsIDB4NGEwMjVjMDQsCisJMHgwMDAwODAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOGVkMiwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAzLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4NGEwMWQ4MDksIDB4MDAxMDMwOTcsIDB4MWMwMWYwMDAsIDB4NTkyYzAwMDUsCisJMHg4MjAwMGQwMCwgMHgwMDAwZmZmZiwgMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwKKwkweDgyMDAwNTgwLCAweDAxMDAwMDAwLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDQsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4ODAwNDA5MDQsCisJMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwgMHg4MzJjYTQwMCwKKwkweDAwMDAwMDA1LCAweDQwNTBhODAwLCAweDQwMDRiMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMGE5NGYsIDB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsCisJMHg1OWEwMDIwNywgMHg1OWEwMTQwNywgMHg5MDAwMDFjMCwgMHg4MDA4MTU0MCwKKwkweDU5YTAwMjA5LCAweDU5YTAxYzA5LCAweDkwMDAwMWMwLCAweDgwMGMxZDQwLAorCTB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWYwMDAsIDB4MDAxMDM4NDEsCisJMHg0OTZmYzg1NywgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDFhLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4MDIwMjA4MDAsIDB4MDAxMDNmNWMsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAyMCwgMHg1OWEwMDQwNywgMHg1OWEwMTIwNywKKwkweDkwMDgxMWMwLCAweDgwMDgxNTQwLCAweDU5YTAwNDA5LCAweDU5YTAxYTA5LAorCTB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsIDB4NDE5YzAwMDAsIDB4NDlhM2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzgzZSwgMHg0YTAxZDgwOSwgMHgwMDEwMzBkOSwKKwkweDFjMDFmMDAwLCAweDQ4MzNjODU3LCAweDQwMzFkODAwLCAweDU4ZWY0MDBiLAorCTB4NThlYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsCisJMHgwMDEwMjBhYSwgMHg1OTljMDIwMCwgMHg4MDAwMDFjMCwgMHgwMjAwMDAwMCwKKwkweDAwMTAyMGI2LCAweDU5YTgwMDZmLCAweDhjMDAwNTA0LCAweDA0MDIwMDAzLAorCTB4OGMwMDA1MDYsIDB4MDQwMDAwMDQsIDB4NTk5YzAwMTksIDB4ODQwMDA1MGMsCisJMHg0ODAzMzgxOSwgMHgwMjAxZjgwMCwgMHgwMDEwOTVhMywgMHg1OWE4MDA2ZiwKKwkweDhjMDAwNTAyLCAweDA0MDAwMDA0LCAweDU5OWMwMDE3LCAweDg0MDAwNTA4LAorCTB4NDgwMzM4MTcsIDB4MDIwMWY4MDAsIDB4MDAxMDM5M2UsIDB4MDQwMjAwMDQsCisJMHg4YzAwMDUwYSwgMHgwMjAyMDAwMCwgMHgwMDEwMjBiNiwgMHg0ODAzYzg1NywKKwkweDhjMDAwNTA0LCAweDA0MDIwMDA0LCAweDU5YzQwOGEzLCAweDg0MDQwZDdhLAorCTB4NDgwNzg4YTMsIDB4OGMwMDA1MDIsIDB4MDQwMjAwMDQsIDB4NTljNDA4YTMsCisJMHg4NDA0MGQwOCwgMHg0ODA3ODhhMywgMHg1OTljMGMwMiwgMHg4YzAwMDUwMCwKKwkweDA0MDIwMDA0LCAweDhjMDAwNTE2LCAweDA0MDAwMDEyLCAweDA0MDFmMDAxLAorCTB4ODIwNDE0ODAsIDB4MDAwMDAwN2YsIDB4MDIwMjEwMDAsIDB4MDAxMDIwYjYsCisJMHg4MjA0MTQwMCwgMHgwMDEwMWViNSwgMHg1MDA4MTAwMCwgMHg4MjA4MTUwMCwKKwkweDAwMDAwMGZmLCAweDhjMDAwNTAwLCAweDA0MDIwMDA2LCAweDQ4MGI1MDEwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDY5YWYsCisJMHg1OTljMDAxOSwgMHg4YzAwMDUwNiwgMHgwNDAwMDAwMywgMHg0YTAzYjgwNSwKKwkweDkwMDAwMDAwLCAweDhjMDAwNTBlLCAweDA0MDIwMDBiLCAweDU5YTgwODA2LAorCTB4OGMwNDBkMTQsIDB4MDQwMDAwMDgsIDB4NDIwMDA4MDAsIDB4MDAxMGIyZGYsCisJMHg1MDA0MDgwMCwgMHg4MjA0MGQwMCwgMHgwMDAwMDAyOCwgMHgwMjAyMDAwMCwKKwkweDAwMTAyMGI2LCAweDgyMDAwNTAwLCAweDAwMDAwMDMwLCAweDA0MDAwMDAzLAorCTB4ODAwMDAxMDgsIDB4MDQwMWYwMDMsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHg0ODAzOTA0MCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwgMHg4MjAwMDQwMCwKKwkweDAwMTAzMjFjLCAweDUwMDAxMDAwLCAweDAyMDFmODAwLCAweDAwMTA2OWFmLAorCTB4NTk5YzAyMDEsIDB4ODIwMDBjODAsIDB4MDAwMDAxMDAsIDB4MDIwMDEwMDAsCisJMHgwMDEwMjBiNiwgMHg4MjAwMGM4MCwgMHgwMDAwMDg0MSwgMHgwMjAyMTAwMCwKKwkweDAwMTAyMGI2LCAweDgyMDAwNTAwLCAweDAwMDAwMDA3LCAweDAyMDIwMDAwLAorCTB4MDAxMDIwYjYsIDB4NTk5YzA0MDEsIDB4ODAwMDA1NDAsIDB4MDIwMDAwMDAsCisJMHgwMDEwMjBiNiwgMHg1OTljMDQwOSwgMHg1OTljMGMwNywgMHg4MDA0MGM4MCwKKwkweDAyMDIxMDAwLCAweDAwMTAyMGI2LCAweDgwMDAwMDQwLCAweDAyMDAwMDAwLAorCTB4MDAxMDIwYjYsIDB4NTk5YzAyMDksIDB4NTk5YzBhMDcsIDB4ODAwNDBjODAsCisJMHgwMjAyMTAwMCwgMHgwMDEwMjBiNiwgMHg4MDAwMDA0MCwgMHgwMjAwMDAwMCwKKwkweDAwMTAyMGI2LCAweDAyMDFmODAwLCAweDAwMTA1MDlkLCAweDAyMDFmODAwLAorCTB4MDAxMDRiNTMsIDB4NTk5YzAyMDEsIDB4NDgwMzUwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTMzZSwgMHg1OTljMDIwYSwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwMywKKwkweDQ4MDM1MDRkLCAweDA0MDFmMDAzLCAweDRhMDM1MDRkLCAweDAwMDAwMGM4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDM5M2UsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWUxOCwgMHg0MTdhNTAwMCwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMCwKKwkweDA0MDIwMDlhLCAweDU5OWMwMDAzLCAweDU5OWMwODA0LCAweDljMDAwMWMwLAorCTB4OWMwNDA5YzAsIDB4NDgwMzUwMDIsIDB4NDgwNzUwMDMsIDB4NTk5YzEwMTcsCisJMHg4YzA4MTUxYywgMHgwNDAwMDAwNiwgMHg1OTljMDAwNSwgMHg1OTljMDgwNiwKKwkweDljMDAwMWMwLCAweDljMDQwOWMwLCAweDA0MDFmMDAzLCAweDgyMDAwNTAwLAorCTB4ZjBmZmZmZmYsIDB4NDgwMzUwMDAsIDB4NDgwNzUwMDEsIDB4NDIwMDEwMDAsCisJMHgwMDEwYjJlNywgMHg0ODAwMTAwMCwgMHg0ODA0MTAwMSwgMHg0MjAwMTAwMCwKKwkweDAwMTBiMmY0LCAweDQ4MDAxMDAwLCAweDQ4MDQxMDAxLCAweDU5YTgwMDZmLAorCTB4OGMwMDA1MDgsIDB4MDQwMjAwMTcsIDB4OGMwMDA1MGEsIDB4MDQwMjAwMjEsCisJMHg1OTljMTAxOSwgMHg4MjA4MTUwMCwgMHgwMDAwZTAwMCwgMHg4MjA4MDU4MCwKKwkweDAwMDAwMDAwLCAweDA0MDIwMDBjLCAweDRhMDM1MDUzLCAweDAwMDAwMDAwLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE4ZmEsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMTg5MiwKKwkweDA0MDFmMDJiLCAweDgyMDgwNTgwLCAweDAwMDAyMDAwLCAweDA0MDIwMDBhLAorCTB4NGEwMzUwNTMsIDB4MDAwMDAwMDEsIDB4NDE3ODAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMThmYSwgMHg0MTc4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTg5MiwKKwkweDA0MDFmMDFmLCAweDgyMDgwNTgwLCAweDAwMDA0MDAwLCAweDA0MDIwMDA2LAorCTB4NGEwMzUwNTMsIDB4MDAwMDAwMDIsIDB4NGEwMzUwNDksIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAxNywgMHg4MjA4MDU4MCwgMHgwMDAwNjAwMCwgMHgwMjAyMDAwMCwKKwkweDAwMTAyMGI2LCAweDU5YTgwODU4LCAweDgyMDQwZDgwLCAweDAxMzkxMDc3LAorCTB4MDQwMjAwMDUsIDB4NTllMDA4MTMsIDB4OGMwNDBkMDAsIDB4MDIwMjAwMDAsCisJMHgwMDEwMjBiNiwgMHg0YTAzNTA1MywgMHgwMDAwMDAwMywgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTAxOGZhLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMDE4OTIsIDB4NTk5YzAwMTksCisJMHg4YzAwMDUyMCwgMHgwNDAwMDAwZCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwNCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMTAxOWIxLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwYzAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTliMSwgMHg0YTAzNTAzMiwgMHgwMDAwYWFhYSwKKwkweDU5OWMxMDE4LCAweDgyMDgxNTAwLCAweDAwMDAwMDMwLCAweDU5YTgwMDZjLAorCTB4ODAwMDA1NDAsIDB4MDQwMDAwMGMsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMjBiNiwgMHg1OTljMTAxOCwgMHg4MjA4MTUwMCwKKwkweGZmZmZmZmNmLCAweDgyMDgxNTQwLCAweDAwMDAwMDEwLCAweDQ4MGIzODE4LAorCTB4MDQwMWYwMTAsIDB4ODIwODBkODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDcsCisJMHg4MjA4MGQ4MCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAwYSwgMHg4MjA4MGQ4MCwKKwkweDAwMDAwMDIwLCAweDA0MDIwMDAyLCAweDQ4MDc1MDMyLCAweDAyMDFmODAwLAorCTB4MDAxMDM4ZDMsIDB4MDQwMDAwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDE2NjgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTY5NCwgMHg1OWE4MDAyYSwgMHg4MDA0MDU0MCwKKwkweDQ4MDM1MDJhLCAweDQ5ZjNjODU3LCAweDQyMDAxMDAwLCAweDAwMTA0ZDM5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDVjYzksIDB4NDIwMDEwMDAsIDB4MDAxMDRkMmMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNWRiZCwgMHg0YTAzODgwNSwgMHhmZmZmZmZmZiwKKwkweDRhMDNjMDE0LCAweDAwNDAwMDQwLCAweDRhMDNjMDEzLCAweDAwNDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ3MTcsIDB4NTlhMDAwMWQsIDB4ODQwMDA1NDAsCisJMHg0ODAzNDAxZCwgMHg0OWYzYzg1NywgMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwKKwkweDAwMDAwMDE4LCAweDAwMDAwMDBjLCAweDAwMDAwMDE4LCAweDAwMDAwMDIwLAorCTB4ODM2YzA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMjAwMDUsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDIwLCAweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDgxMWMwLAorCTB4ODAwODE1NDAsIDB4NTlhMDA0MDksIDB4NTlhMDFhMDksIDB4OTAwYzE5YzAsCisJMHg4MDBjMWQ0MCwgMHg0MTljMDAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwMzg0MSwKKwkweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAxLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAxNiwgMHgwMjAxZjAwMCwKKwkweDAwMTAyMGIyLCAweDU5YTgwMDEzLCAweDhjMDAwNTAwLCAweDA0MDAwMDExLAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMjAsCisJMHg1OWEwMDQwNywgMHg1OWEwMTIwNywgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwKKwkweDU5YTAwNDA5LCAweDU5YTAxYTA5LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGJjMjAsIDB4MDIwMWYwMDAsIDB4MDAxMDM4NDEsCisJMHg0YTAzNDQwNiwgMHgwMDAwMDAwMSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwKKwkweDQyMDBhODAwLCAweDAwMTBiYzIwLCAweDQyMDBhMDAwLCAweGZmZmZmZmZmLAorCTB4NDQ1MGE4MDAsIDB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmQsCisJMHg0ZDQ0MDAwMCwgMHg0ZDM0MDAwMCwgMHg0MjAyODgwMCwgMHhmZmZmZmZmZiwKKwkweDQyMDAyMDAwLCAweGZmZmZmZmZmLCAweDQyMDAzMDAwLCAweDAwMDAwMDAxLAorCTB4NDIwMDM4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMDE4MDAsIDB4MDAxMGJjMjAsCisJMHg1OWE4MTAxMCwgMHg4MjA4MTUwMCwgMHgwMDAwMDBmZiwgMHg0MDE4MDAwMCwKKwkweDBjMDFmMDAxLCAweDAwMTAzMjc1LCAweDAwMTAzMjc4LCAweDAwMTAzMjdjLAorCTB4MDAxMDMyODAsIDB4ODIxMDI1MDAsIDB4ZmZmZmZmMDAsIDB4MDQwMWYwMTQsCisJMHg4MjEwMjUwMCwgMHhmZmZmMDBmZiwgMHg4NDA4MTFjMCwgMHgwNDAxZjAxMCwKKwkweDgyMTAyNTAwLCAweGZmMDBmZmZmLCAweDkwMDgxMWMwLCAweDA0MDFmMDBjLAorCTB4ODIxMDI1MDAsIDB4MDBmZmZmZmYsIDB4OWMwODAxYzAsIDB4ODAxMDI1NDAsCisJMHg0NDEwMTgwMCwgMHg0MjAwMzAwMCwgMHhmZmZmZmZmZiwgMHg0MjAwMjAwMCwKKwkweGZmZmZmZmZmLCAweDgwMGMxODAwLCAweDA0MDFmMDAzLCAweDQwMDgwMDAwLAorCTB4ODAxMDI1NDAsIDB4ODE0Njg4MDAsIDB4ODM0NDJjODAsIDB4MDAwMDAwN2YsCisJMHgwNDAyMTAxNCwgMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwgMHg0YzE4MDAwMCwKKwkweDRjMWMwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDVjMDAzODAwLAorCTB4NWMwMDMwMDAsIDB4NWMwMDE4MDAsIDB4NWMwMDEwMDAsIDB4MDQwMjA3ZjIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDg0MiwgMHgwNDAyMDdlZiwgMHg4MDE4MzAwMCwKKwkweDgwMWMzODAwLCAweDU5MzQxMjAyLCAweDQwMTgwMDAwLCAweDBjMDFmN2NlLAorCTB4ODIxMDA1ODAsIDB4ZmZmZmZmZmYsIDB4MDQwMDAwMDIsIDB4NDQxMDE4MDAsCisJMHg0MjAwMTgwMCwgMHgwMDEwYmMyMCwgMHg1MDBjMDAwMCwgMHg4MjAwMDUwMCwKKwkweGZmZmZmZjAwLCAweDgwMWMwNTQwLCAweDQ0MDAxODAwLCAweDVjMDI2ODAwLAorCTB4NWMwMjg4MDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMjAsIDB4NTlhMDA0MDcsCisJMHg1OWEwMTIwNywgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDQwOSwKKwkweDU5YTAxYTA5LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLCAweDQyMDAwMDAwLAorCTB4MDAxMGJjMjAsIDB4MDIwMWYwMDAsIDB4MDAxMDM4NDEsIDB4NTlhMjhjMDYsCisJMHg1OWEwMDIwYiwgMHg4YzAwMDUwMCwgMHgwNDAwMDAwZSwgMHg1OWEwMTIwOCwKKwkweDU5YTAwNDA4LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDkwMDAwMWMwLAorCTB4ODAwODE1NDAsIDB4NDE3ODQwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ3NjgsCisJMHgwNDAwMDAwOCwgMHg0ODAzNDQwNiwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiNiwKKwkweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDAyMDIwMDAwLCAweDAwMTAyMGI2LAorCTB4MDIwMWY4MDAsIDB4MDAxMDM4MWEsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg1OWEwMDIwYiwKKwkweDhjMDAwNTAwLCAweDA0MDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA0ODQyLAorCTB4MDIwMjAwMDAsIDB4MDAxMDM4ZGQsIDB4NTlhMDAyMGIsIDB4OGMwMDA1MDIsCisJMHgwNDAwMDAxOSwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDdmMCwgMHgwNDAyMTAxNiwKKwkweDAyMDFmODAwLCAweDAwMTA0ODRiLCAweDA0MDIwMDEzLCAweDQ5N2E1YTA0LAorCTB4NGEwMjVjMDQsIDB4MDAwMDgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDhlYTMsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwKKwkweDAwMTAyMGIyLCAweDRhMDFkODA5LCAweDAwMTAzMmY4LCAweDFjMDFmMDAwLAorCTB4NTlhMjhjMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDIwMjAwMDAsCisJMHgwMDEwMjBiNiwgMHg0YzU4MDAwMCwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDBhLCAweDQxMzRhMDAwLCAweDgzMmU1YzAwLAorCTB4MDAwMDAwMDIsIDB4NDEyY2E4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsCisJMHg4MzJjYWMwMCwgMHgwMDAwMDAwNiwgMHg0MDU0YTAwMCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTBhOTRmLCAweDVjMDBhODAwLAorCTB4NWMwMGEwMDAsIDB4NWMwMGIwMDAsIDB4NTkyYzA4MDIsIDB4ODIwNDA1MDAsCisJMHgwMGZmMDBmZiwgMHg5MDAwMDFjMCwgMHg4MjA0MTUwMCwgMHhmZjAwZmYwMCwKKwkweDgwMDgwNTQwLCAweDQ4MDI1ODAyLCAweDU5MmMwODAxLCAweDgyMDQwNTAwLAorCTB4MDBmZjAwZmYsIDB4OTAwMDAxYzAsIDB4ODIwNDE1MDAsIDB4ZmYwMGZmMDAsCisJMHg4MDA4MDU0MCwgMHg0ODAyNTgwMSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwYSwKKwkweDU5YTAwNDA3LCAweDU5YTAxMjA3LCAweDkwMDgxMWMwLCAweDgwMDgxNTQwLAorCTB4NTlhMDA0MDksIDB4NTlhMDFhMDksIDB4OTAwYzE5YzAsIDB4ODAwYzFkNDAsCisJMHg0MTJjMDAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwMzg0MSwgMHg0OTZmYzg1NywKKwkweDQ5NmY0NDA2LCAweDAyMDFmMDAwLCAweDAwMTAyMDY2LCAweDU5YTI4YzA2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDIwMjAwMDAsIDB4MDAxMDIwYjYsCisJMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDA3LCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDgzMzQwYzAwLAorCTB4MDAwMDAwMDYsIDB4NTlhMDAyMGIsIDB4OGMwMDA1MDAsIDB4MDQwMDAwMDMsCisJMHg4MzM0MGMwMCwgMHgwMDAwMDAwOCwgMHg1ODA0MDAwMSwgMHg0ODAzNDQwOSwKKwkweDkwMDAwMWMwLCAweDQ4MDM0MjA5LCAweDUwMDQwMDAwLCAweDQ4MDM0NDA3LAorCTB4OTAwMDAxYzAsIDB4NDgwMzQyMDcsIDB4NTkzNDAyMDAsIDB4NDgwMzQ0MDYsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4NTlhMDIyMGIsIDB4OGMxMDI1MDAsIDB4MDQwMjAwMmUsIDB4OGMxMDI1MDYsCisJMHgwNDAyMDAwNiwgMHg1OWEwMzIwOCwgMHg4MjE4MDQ4MCwgMHgwMDAwMDAwMywKKwkweDAyMDIxMDAwLCAweDAwMTAyMGI2LCAweDU5YTI4YzA2LCAweDAyMDFmODAwLAorCTB4MDAwMjAyNjcsIDB4MDIwMjAwMDAsIDB4MDAxMDIwYjYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDgzNiwgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwOSwKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDAyMDFmODAwLCAweDAwMTAzODFhLAorCTB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjBiMiwgMHg1OWEwMjIwYiwgMHg4YzEwMjUwNiwgMHgwNDAwMDAwNCwKKwkweDU5MzQzMDAyLCAweDgyMTgzNTAwLCAweDAwZmZmZmZmLCAweDQ5N2E1YTA0LAorCTB4NGEwMjVjMDQsIDB4MDAwMDgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDhlNjUsCisJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwKKwkweDAwMTAyMGIyLCAweDRhMDFkODA5LCAweDAwMTAzM2RlLCAweDFjMDFmMDAwLAorCTB4NTlhMjhjMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDIwMjAwMDAsCisJMHgwMDEwMjBiNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwgMHgwNDAwMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDA5LCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDM4MWEsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg0OTdhNWEwNCwKKwkweDRhMDI1YzA0LCAweDAwMDA4MDAwLCAweDAyMDFmODAwLCAweDAwMTAzODFhLAorCTB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjBiMiwgMHg1OTJlNTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOGU3YSwKKwkweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAzLCAweDAyMDFmMDAwLAorCTB4MDAxMDIwYjIsIDB4NGEwMWQ4MDksIDB4MDAxMDMzYjAsIDB4MWMwMWYwMDAsCisJMHg1OTJjMjgwNSwgMHg4MjE0MGQ4MCwgMHgwMTAwMDAwMCwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDA0LCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDgsIDB4NTlhMDAyMDcsIDB4NTlhMDE0MDcsCisJMHg5MDAwMDFjMCwgMHg4MDA4MTU0MCwgMHg1OWEwMDIwOSwgMHg1OWEwMWMwOSwKKwkweDkwMDAwMWMwLCAweDgwMGMxZDQwLCAweDgzMmMwNDAwLCAweDAwMDAwMDA1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDM4NDEsIDB4OGMxNDJkMDAsIDB4MDQwMDAwMDMsCisJMHg0YTAxZDgwOSwgMHgwMDEwMzNjYiwgMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwKKwkweDU4ZWY0MDBiLCAweDU4ZWU1ODBlLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAorCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIwYWEsIDB4ODEyZTU5YzAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwOCwKKwkweDgzMmMwNDAwLCAweDAwMDAwMDA1LCAweDU4ZWMxMDA3LCAweDU4ZWMxODA4LAorCTB4MDIwMWYwMDAsIDB4MDAxMDM4NDEsIDB4NTkyYzAwMDUsIDB4ODIwMDA1ODAsCisJMHgwMTAwMDAwMCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDU5YTAwMjA3LCAweDU5YTAxNDA3LAorCTB4OTAwMDAxYzAsIDB4ODAwODE1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDksCisJMHg5MDAwMDFjMCwgMHg4MDBjMWQ0MCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwKKwkweDgzMmMwNDAwLCAweDAwMDAwMDA2LCAweDAyMDFmMDAwLCAweDAwMTAzODQxLAorCTB4NTlhMDBhMGEsIDB4ODAwNDA5YzAsIDB4MDIwMDAwMDAsIDB4MDAxMDIwYjYsCisJMHg4MjA0MDQ4MCwgMHgwMDAwMDBlOCwgMHgwNDAwMTAwMywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMGU3LCAweDU5YTAwMjA3LCAweDU5YTAxNDA3LCAweDkwMDAwMWMwLAorCTB4ODAwODE1NDAsIDB4NTlhMDAyMDksIDB4NTlhMDFjMDksIDB4OTAwMDAxYzAsCisJMHg4MDBjMWQ0MCwgMHg4Mzg4MDQwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAzODQxLCAweDRhMDFkODA5LCAweDAwMTAzNDBjLCAweDFjMDFmMDAwLAorCTB4NDAzMWQ4MDAsIDB4NThlZjQwMGIsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjBhYSwgMHg1OWEwMDIwYiwKIAkweDhjMDAwNTAwLCAweDA0MDAwMDA4LCAweDgzODgwNDAwLCAweDAwMDAwMDAwLAogCTB4NDgwM2M4NDAsIDB4NGEwM2M4NDIsIDB4MDAwMDAwMDYsIDB4MDQwMTEwMDAsCi0JMHg0OTdiODg4NSwgMHg0YTAzNDIwNywgMHgwMDAwMDBlNiwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMmMwLCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4MDQwMWZiZTUsCisJMHg0OTdiODg4NSwgMHg0YTAzNDIwNywgMHgwMDAwMDBlNywgMHgwMjAxZjAwMCwKKwkweDAwMTAyMDY2LCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4MDQwMWZiZjMsCiAJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDQ5N2E1YTA0LCAweDRhMDI1YzA0LCAweDAwMDA4MDAwLAotCTB4NTlhMDA0MDYsIDB4ODAwMDAxYzAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMTAsCisJMHgwMDEwMjBiMiwgMHg0OTdhNWEwNCwgMHg0YTAyNWMwNCwgMHgwMDAwODAwMCwKKwkweDU5YTAwNDA2LCAweDgwMDAwMWMwLCAweDAyMDAwMDAwLCAweDAwMTAyMGI2LAogCTB4ODIwMDE1ODAsIDB4MDAwMDAwZmYsIDB4MDQwMDAwMDUsIDB4ODIwMDE0ODAsCi0JMHgwMDAwMDAwNCwgMHgwMjAyMTAwMCwgMHgwMDEwMjMxMCwgMHg0MDAwMTAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAxZmJmLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDMsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NGEwMWQ4MDksCi0JMHgwMDEwMzYzYSwgMHgxYzAxZjAwMCwgMHg1OTJjMDAwNSwgMHg4MjAwMDU4MCwKLQkweDAxMDAwMDAwLCAweDAyMDIwMDAwLCAweDAwMTAyMmMwLCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDQsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NTlhMDE0MDYsCisJMHgwMDAwMDAwNCwgMHgwMjAyMTAwMCwgMHgwMDEwMjBiNiwgMHg0MDAwMTAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxZDZhLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDMsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NGEwMWQ4MDksCisJMHgwMDEwMzQ0NiwgMHgxYzAxZjAwMCwgMHg1OTJjMDAwNSwgMHg4MjAwMDU4MCwKKwkweDAxMDAwMDAwLCAweDAyMDIwMDAwLCAweDAwMTAyMDY2LCAweDRhMDM0NDA2LAorCTB4MDAwMDAwMDQsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NTlhMDE0MDYsCiAJMHg4YzA4MTUwOCwgMHgwNDAyMDAwNywgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwKLQkweDRhMDM0NDA2LCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsCiAJMHg1OWEwMWMwNywgMHg4MjBjMDQ4MCwgMHgwMDAwMTAwMCwgMHgwMjAyMTAwMCwKLQkweDAwMTAyMzEwLCAweDQ5N2IyODA0LCAweDQ5N2IyODA1LCAweDQ5N2IyODFjLAorCTB4MDAxMDIwYjYsIDB4NDk3YjI4MDQsIDB4NDk3YjI4MDUsIDB4NDk3YjI4MWMsCiAJMHg0OTdiMjgxZCwgMHg0OTdiMjgxZiwgMHg0OTdiMjgyMCwgMHg0OTdiMjgyMiwKLQkweDQ5N2IyODIzLCAweDgwMDAwNTgwLCAweDAyMDFmODAwLCAweDAwMTAxNWZlLAorCTB4NDk3YjI4MjMsIDB4ODAwMDA1ODAsIDB4MDIwMWY4MDAsIDB4MDAxMDE2NjgsCiAJMHg1OWE4MDgwNSwgMHg4YzA4MTUwMCwgMHgwNDAwMDAwNCwgMHg4MjA0MGQ0MCwKIAkweDAwMDAwMDExLCAweDA0MDFmMDA0LCAweDhjMDgxNTA2LCAweDA0MDAwMDAyLAogCTB4ODQwNDBkNDIsIDB4ODQwNDBkMGEsIDB4NDgwNzUwMDUsIDB4NDIwMmQ4MDAsCiAJMHgwMDAwMDAwMSwgMHg4MjA4MTUwMCwgMHgwMDAwMDBlMCwgMHg4MDA4MDEwYSwKLQkweDBjMDIwMDM2LCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDIwMDA5LAotCTB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDUwYTIsCisJMHgwYzAyMDAzNiwgMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwgMHgwNDAyMDAwOSwKKwkweDRhMDM1MDMzLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA0ZDc2LAogCTB4MDQwMWYwMWYsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDAsIDB4MDQwMWY3ZmIsCi0JMHg0OTdiNTAzMiwgMHgwMjAxZjgwMCwgMHgwMDEwNDE0MiwgMHgwMjAxZjgwMCwKLQkweDAwMTA2YzU1LCAweDAyMDFmODAwLCAweDAwMTA2ZWRlLCAweDAyMDFmODAwLAotCTB4MDAxMDZjNGIsIDB4NTlhMDBhMDcsIDB4NDgwNzg4YTcsIDB4NTljNDAwYTMsCisJMHg0OTdiNTAzMiwgMHgwMjAxZjgwMCwgMHgwMDEwM2Y1YywgMHgwMjAxZjgwMCwKKwkweDAwMTA2OThjLCAweDAyMDFmODAwLCAweDAwMTA2YzMyLCAweDAyMDFmODAwLAorCTB4MDAxMDY5ODIsIDB4NTlhMDBhMDcsIDB4NDgwNzg4YTcsIDB4NTljNDAwYTMsCiAJMHg4MjAwMDUwMCwgMHhmZWZmZmZmZiwgMHg4MjAwMDU0MCwgMHg4MDAxODAwMCwKIAkweDQwMDAwODAwLCAweDg0MDQwZDIwLCAweDQ4MDM4OGEzLCAweDQ4MDc4OGEzLAogCTB4NDk3YjUwNGUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMmQsIDB4NDIwMDEwMDAsCi0JMHgwMDEwNDFiYywgMHgwMjAxZjgwMCwgMHgwMDEwNWY2OSwgMHg1OWEwMDQwNywKKwkweDAwMTAzZmU0LCAweDAyMDFmODAwLCAweDAwMTA1Y2EyLCAweDU5YTAwNDA3LAogCTB4ODAwMDAwYzIsIDB4ODAwMDA4YzQsIDB4ODAwNWQ0MDAsIDB4NDIwMDAwMDAsCi0JMHgwMDAwZmZmZiwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAwMDAwMywKLQkweDU5YTAwMjA3LCAweDgwMDAwMTEwLCAweDAyMDFmODAwLCAweDAwMTAzYWZjLAotCTB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsIDB4MDAxMDM2NmQsIDB4MDAxMDM2NzAsCi0JMHgwMDEwMzY3OCwgMHgwMDEwMjMxMCwgMHgwMDEwMzY3NSwgMHgwMDEwMjMxMCwKLQkweDAwMTAyMzEwLCAweDAwMTAyMzEwLCAweDgzNmMwNTgwLCAweDAwMDAwMDAzLAorCTB4MDAwMGZmZmYsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4MDQwMDAwMDMsCisJMHg1OWEwMDIwNywgMHg4MDAwMDExMCwgMHgwMjAxZjgwMCwgMHgwMDEwMzkxNSwKKwkweDAyMDFmMDAwLCAweDAwMTAyMDY2LCAweDAwMTAzNDc5LCAweDAwMTAzNDdjLAorCTB4MDAxMDM0ODQsIDB4MDAxMDIwYjYsIDB4MDAxMDM0ODEsIDB4MDAxMDIwYjYsCisJMHgwMDEwMjBiNiwgMHgwMDEwMjBiNiwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywKIAkweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDA3LCAweDAyMDFmMDAwLAotCTB4MDAxMDIzMGMsIDB4NTlhMDNjMDYsIDB4NTlhMDA0MDcsIDB4NTlhMDRhMDcsCisJMHgwMDEwMjBiMiwgMHg1OWEwM2MwNiwgMHg1OWEwMDQwNywgMHg1OWEwNGEwNywKIAkweDkwMjQ0OWMwLCAweDgwMjQ0ZDQwLCAweDU5YTAwNDA5LCAweDU5YTA1MjA5LAotCTB4OTAyODUxYzAsIDB4ODAyODU1NDAsIDB4MDQwMWZiNDYsIDB4MDQwMjAwMDUsCi0JMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywKKwkweDkwMjg1MWMwLCAweDgwMjg1NTQwLCAweDA0MDFmYjU0LCAweDA0MDIwMDA1LAorCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsCiAJMHg0MTdhODgwMCwgMHg0MTc4MzAwMCwgMHg0OTdiNDAwMSwgMHg0OTdiNDAwNCwKIAkweDgzMmM0NDAwLCAweDAwMDAwMDA1LCAweDQ4MjM0MDAyLCAweDhjMWMzZDA0LAotCTB4MDQwMjAwNzgsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwMmEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OGUzLCAweDA0MDIwMDI0LCAweDhjMWMzZDAwLCAweDA0MDAwMDA4LAorCTB4MDQwMjAwNzgsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDQwMjAwMmEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwgMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0NzMyLCAweDA0MDIwMDI0LCAweDhjMWMzZDAwLCAweDA0MDAwMDA4LAogCTB4NTkzNDAwMDksIDB4NDQwMDQwMDAsIDB4NTkzNDAwMDgsIDB4ODAyMDQwMDAsCiAJMHg0NDAwNDAwMCwgMHg4MDIwNDAwMCwgMHgwNDAxZjAwNywgMHg1OTM0MDAwNywKIAkweDQ0MDA0MDAwLCAweDU5MzQwMDA2LCAweDgwMjA0MDAwLCAweDQ0MDA0MDAwLAogCTB4ODAyMDQwMDAsIDB4ODM0NDA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMDAwMGQsCiAJMHg4MzQ0MDU4MCwgMHgwMDAwMDdmYywgMHgwNDAwMDAwYSwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OWYzLCAweDA0MDAwMDAzLCAweDg1NDY4ZDVlLCAweDA0MDFmMDA1LAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ4MzgsIDB4MDQwMjAwMDIsIDB4ODU0NjhkNWUsCisJMHgwMDEwNDg0MiwgMHgwNDAwMDAwMywgMHg4NTQ2OGQ1ZSwgMHgwNDAxZjAwNSwKKwkweDAyMDFmODAwLCAweDAwMTA0Njg2LCAweDA0MDIwMDAyLCAweDg1NDY4ZDVlLAogCTB4NDU0NDQwMDAsIDB4ODU0NjhkMWUsIDB4ODAyMDQwMDAsIDB4ODIxODM0MDAsCiAJMHgwMDAwMDAwMywgMHg4MTQ2ODgwMCwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDdmMCwKIAkweDA0MDAxMDBlLCAweDhjMWMzZDA2LCAweDA0MDAwMDEwLCAweDgzNDQwNTgwLApAQCAtMzU2MywyNyArMzQzOCwyNyBAQAogCTB4NDIwMjg4MDAsIDB4MDAwMDA3ZmMsIDB4ODIxODA1ODAsIDB4MDAwMDAwMGYsCiAJMHgwNDAwMDAwYiwgMHgwNDAxZjdjMCwgMHg4MDE4MzFjMCwgMHgwNDAyMDAwNiwKIAkweDU5YTAwODAxLCAweDgwMDQwOGM0LCAweDQ4MDc0NDA2LCAweDAyMDFmMDAwLAotCTB4MDAxMDIyYzAsIDB4NGEwMzQwMDQsIDB4MDAwMDAwMDEsIDB4NDk0NzQwMDAsCisJMHgwMDEwMjA2NiwgMHg0YTAzNDAwNCwgMHgwMDAwMDAwMSwgMHg0OTQ3NDAwMCwKIAkweDU5YTAwMDAxLCAweDgwMTgwNDAwLCAweDQ4MDM0MDAxLCAweDQ4MWY0MDAzLAogCTB4NGEwMWQ4MDEsIDB4MDAwMDAwMDAsIDB4NDgxOWQ4MDQsIDB4NTlhMDAwMDIsCiAJMHg0ODAxZDgwMywgMHg0ODI1ZDgwNywgMHg0ODI5ZDgwOCwgMHg0MDAwYTgwMCwKLQkweDQwMDBhMDAwLCAweDQwMThiMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LAotCTB4NDBlYzEwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4NTgsIDB4NGEwMWQ4MDksCi0JMHgwMDEwMzcyYSwgMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwKKwkweDQwMDBhMDAwLCAweDQwMThiMDAwLCAweDAyMDFmODAwLCAweDAwMTBhOTNlLAorCTB4NDBlYzEwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4YTEsIDB4NGEwMWQ4MDksCisJMHgwMDEwMzUzNiwgMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwKIAkweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLAotCTB4MDAxMDIzMDQsIDB4NTlhMDAwMDQsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDgsCisJMHgwMDEwMjBhYSwgMHg1OWEwMDAwNCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwOCwKIAkweDU5YTI4ODAwLCAweDU5YTA0MDAyLCAweDU5YTAzODAzLCAweDQxNzgzMDAwLAogCTB4NThlYzQ4MDcsIDB4NThlYzUwMDgsIDB4MDQwMWY3OGYsIDB4NTlhMDA4MDEsCi0JMHg4MDA0MDhjNCwgMHg0ODA3NDQwNiwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwKLQkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDJmLCAweDAyMDFmODAwLAotCTB4MDAxMDQ5ZTcsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4ZTMsCisJMHg4MDA0MDhjNCwgMHg0ODA3NDQwNiwgMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwKKwkweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDIwMDJmLCAweDAyMDFmODAwLAorCTB4MDAxMDQ4MzYsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ3MzIsCiAJMHgwNDAyMDAyOSwgMHg4MzQ0MDU4MCwgMHgwMDAwMDdmZSwgMHgwNDAwMDAxMSwKIAkweDgzNDQwNTgwLCAweDAwMDAwN2ZjLCAweDA0MDAwMDBlLCAweDAyMDFmODAwLAotCTB4MDAxMDQ5ZjMsIDB4MDQwMDAwMDUsIDB4NTkzNDA0MDMsIDB4ODQwMDA1NWUsCi0JMHg0ODAyNmMwMywgMHgwNDAxZjAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNDgzOCwKKwkweDAwMTA0ODQyLCAweDA0MDAwMDA1LCAweDU5MzQwNDAzLCAweDg0MDAwNTVlLAorCTB4NDgwMjZjMDMsIDB4MDQwMWYwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ2ODYsCiAJMHgwNDAyMDAwNCwgMHg1OTM0MDQwMywgMHg4NDAwMDU1ZSwgMHg0ODAyNmMwMywKIAkweDQxMzRhMDAwLCAweDQwMjBhODAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDA2LAotCTB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NTkzNDAwMDcsIDB4NDQwMGE4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTkzZSwgMHg1OTM0MDAwNywgMHg0NDAwYTgwMCwKIAkweDU5MzQwMDA2LCAweDQ4MDBhODAxLCAweDU5MzQwMDA5LCAweDQ4MDBhODAyLAogCTB4NTkzNDAwMDgsIDB4NDgwMGE4MDMsIDB4NTkzNDA0MDMsIDB4ODQwMDA1MWUsCiAJMHg0ODAyNmMwMywgMHg4MjIwNDQwMCwgMHgwMDAwMDAwYSwgMHg4MjE4MzQwMCwKQEAgLTM1OTQsNjUwICszNDY5LDY1NyBAQAogCTB4NDIwMjg4MDAsIDB4MDAwMDA3ZmMsIDB4ODIxODA1ODAsIDB4MDAwMDAwMGEsCiAJMHgwNDAwMDAwYiwgMHgwNDAxZjdiYiwgMHg4MDE4MzFjMCwgMHgwNDAyMDAwNiwKIAkweDU5YTAwODAxLCAweDgwMDQwOGM0LCAweDQ4MDc0NDA2LCAweDAyMDFmMDAwLAotCTB4MDAxMDIyYzAsIDB4NGEwMzQwMDQsIDB4MDAwMDAwMDEsIDB4NDk0NzQwMDAsCisJMHgwMDEwMjA2NiwgMHg0YTAzNDAwNCwgMHgwMDAwMDAwMSwgMHg0OTQ3NDAwMCwKIAkweDU5YTAwMDAxLCAweDgwMTgwNDAwLCAweDQ4MDM0MDAxLCAweDQ4MWY0MDAzLAogCTB4NGEwMWQ4MDEsIDB4MDAwMDAwMDAsIDB4NDgxOWQ4MDQsIDB4NTlhMDAwMDIsCiAJMHg0ODAxZDgwMywgMHg0ODI1ZDgwNywgMHg0ODI5ZDgwOCwgMHg0MGVjMTAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwODU4LCAweDRhMDFkODA5LCAweDAwMTAzN2ExLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4YTEsIDB4NGEwMWQ4MDksIDB4MDAxMDM1YWQsCiAJMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwMiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLCAweDAwMTAyMzA0LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIwYWEsCiAJMHg1OWEwMDAwNCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwOCwgMHg1OWEyODgwMCwKIAkweDU5YTA0MDAyLCAweDU5YTAzODAzLCAweDQxNzgzMDAwLCAweDU4ZWM0ODA3LAogCTB4NThlYzUwMDgsIDB4MDQwMWY3OGYsIDB4NTlhMDA4MDEsIDB4ODAwNDA4YzQsCi0JMHg0ODA3NDQwNiwgMHgwMjAxZjAwMCwgMHgwMDEwMjJjMCwgMHg0MjAwMjgwMCwKKwkweDQ4MDc0NDA2LCAweDAyMDFmMDAwLCAweDAwMTAyMDY2LCAweDQyMDAyODAwLAogCTB4MDAwMDAwN2UsIDB4NTlhMDBjMDYsIDB4NTlhMDEyMDcsIDB4NTlhMDFjMDcsCiAJMHg1OWEwMjIwOSwgMHg4MjA0MDUwMCwgMHgwMDAwZmYwMCwgMHg4NDAwMDFjMCwKLQkweDgyMDAzNDgwLCAweDAwMDAwMDIwLCAweDAyMDAxMDAwLCAweDAwMTAyMzEwLAotCTB4ODAxNDA0ODAsIDB4MDIwMDEwMDAsIDB4MDAxMDIzMTAsIDB4ODIwNDA1MDAsCisJMHg4MjAwMzQ4MCwgMHgwMDAwMDAyMCwgMHgwMjAwMTAwMCwgMHgwMDEwMjBiNiwKKwkweDgwMTQwNDgwLCAweDAyMDAxMDAwLCAweDAwMTAyMGI2LCAweDgyMDQwNTAwLAogCTB4MDAwMDAwZmYsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMjAsIDB4MDIwMDEwMDAsCi0JMHgwMDEwMjMxMCwgMHg4MDE0MDQ4MCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwKKwkweDAwMTAyMGI2LCAweDgwMTQwNDgwLCAweDAyMDAxMDAwLCAweDAwMTAyMGI2LAogCTB4ODIwODA1MDAsIDB4MDAwMGZmMDAsIDB4ODQwMDAxYzAsIDB4ODIwMDM0ODAsCi0JMHgwMDAwMDAyMCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwgMHg4MDE0MDQ4MCwKLQkweDAyMDAxMDAwLCAweDAwMTAyMzEwLCAweDgyMDgwNTAwLCAweDAwMDAwMGZmLAotCTB4ODIwMDM0ODAsIDB4MDAwMDAwMjAsIDB4MDIwMDEwMDAsIDB4MDAxMDIzMTAsCi0JMHg4MDE0MDQ4MCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwgMHg4MjBjMDUwMCwKKwkweDAwMDAwMDIwLCAweDAyMDAxMDAwLCAweDAwMTAyMGI2LCAweDgwMTQwNDgwLAorCTB4MDIwMDEwMDAsIDB4MDAxMDIwYjYsIDB4ODIwODA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMzQ4MCwgMHgwMDAwMDAyMCwgMHgwMjAwMTAwMCwgMHgwMDEwMjBiNiwKKwkweDgwMTQwNDgwLCAweDAyMDAxMDAwLCAweDAwMTAyMGI2LCAweDgyMGMwNTAwLAogCTB4MDAwMGZmMDAsIDB4ODQwMDAxYzAsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMjAsCi0JMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwgMHg4MDE0MDQ4MCwgMHgwMjAwMTAwMCwKLQkweDAwMTAyMzEwLCAweDgyMGMwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAzNDgwLAotCTB4MDAwMDAwMjAsIDB4MDIwMDEwMDAsIDB4MDAxMDIzMTAsIDB4ODAxNDA0ODAsCi0JMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwgMHg4MjEwMDUwMCwgMHgwMDAwZmYwMCwKKwkweDAyMDAxMDAwLCAweDAwMTAyMGI2LCAweDgwMTQwNDgwLCAweDAyMDAxMDAwLAorCTB4MDAxMDIwYjYsIDB4ODIwYzA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDM0ODAsCisJMHgwMDAwMDAyMCwgMHgwMjAwMTAwMCwgMHgwMDEwMjBiNiwgMHg4MDE0MDQ4MCwKKwkweDAyMDAxMDAwLCAweDAwMTAyMGI2LCAweDgyMTAwNTAwLCAweDAwMDBmZjAwLAogCTB4ODQwMDAxYzAsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMjAsIDB4MDIwMDEwMDAsCi0JMHgwMDEwMjMxMCwgMHg4MDE0MDQ4MCwgMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwKKwkweDAwMTAyMGI2LCAweDgwMTQwNDgwLCAweDAyMDAxMDAwLCAweDAwMTAyMGI2LAogCTB4ODIxMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMjAsCi0JMHgwMjAwMTAwMCwgMHgwMDEwMjMxMCwgMHg4MDE0MDQ4MCwgMHgwMjAwMTAwMCwKLQkweDAwMTAyMzEwLCAweDkwMDQwMWMwLCAweDgwMDgwZDQwLCAweDkwMGMwMWMwLAorCTB4MDIwMDEwMDAsIDB4MDAxMDIwYjYsIDB4ODAxNDA0ODAsIDB4MDIwMDEwMDAsCisJMHgwMDEwMjBiNiwgMHg5MDA0MDFjMCwgMHg4MDA4MGQ0MCwgMHg5MDBjMDFjMCwKIAkweDgwMTAxZDQwLCAweDgzYTgzNDAwLCAweDAwMDAwMDNhLCAweDQ0MDQzMDAwLAotCTB4ODAxODMwMDAsIDB4NDQwYzMwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsCi0JMHgwNDAxZjllYywgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDQyMDAwODAwLCAweDAwMDAwMDBjLAotCTB4MDQwMWY4NTMsIDB4NGEwMWQ4MDksIDB4MDAxMDM4MjAsIDB4MWMwMWYwMDAsCisJMHg4MDE4MzAwMCwgMHg0NDBjMzAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwKKwkweDA0MDFmOWZhLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGMsCisJMHgwNDAxZjg1MywgMHg0YTAxZDgwOSwgMHgwMDEwMzYyYywgMHgxYzAxZjAwMCwKIAkweDQwMzFkODAwLCAweDU4ZWU1ODBkLCAweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjBhYSwKIAkweDgzMmNhNDAwLCAweDAwMDAwMDA0LCAweDQyMDBiMDAwLCAweDAwMDAwMDBjLAotCTB4NDBjOGE4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NThjODAyMDAsCisJMHg0MGM4YTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTkzZSwgMHg1OGM4MDIwMCwKIAkweDgwMDAwNTQwLCAweDA0MDAwMDM0LCAweDU4YzgwNDAwLCAweDgyMDAwNTAwLAogCTB4ZmZmZmZmZmIsIDB4MDQwMjAwMzAsIDB4NThjODA0MDEsIDB4ODAwMDA1NDAsCiAJMHgwNDAwMDAyZCwgMHg4MjAwMDQ4MCwgMHgwMDAwZmYwMSwgMHgwNDAyMTAyYSwKIAkweDU4YzgwMjAyLCAweDgyMDAwNDgwLCAweDAwMDAwMDVjLCAweDA0MDAxMDI2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDYzYTMsIDB4NThjODBjMDgsIDB4NThjODAyMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjBkYiwgMHg1OGM4MGMwOCwgMHg1OGM4MDIwNCwKIAkweDgwMDQwNDgwLCAweDA0MDAxMDIwLCAweDU4YzgwMjA0LCAweDgyMDAwNDgwLAogCTB4MDAwMDAwMDUsIDB4MDQwMjEwMWMsIDB4NThjODAyMDUsIDB4NThjODBjMDgsCiAJMHg4MDA0MDkwMiwgMHg4MDA0MDQ4MCwgMHgwNDAwMTAxNywgMHg1OGM4MGMwOCwKLQkweDAyMDFmODAwLCAweDAwMTA2MmYxLCAweDA0MDAwMDFiLCAweDAyMDFmODAwLAotCTB4MDAxMDYxYjksIDB4MDQwMjAwMTIsIDB4NDk3OTk0MGIsIDB4NTljNDA4YTMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjAyYSwgMHgwNDAwMDAxYiwgMHgwMjAxZjgwMCwKKwkweDAwMTA1ZWYyLCAweDA0MDIwMDEyLCAweDQ5Nzk5NDBiLCAweDU5YzQwOGEzLAogCTB4ODIwNDBkNDAsIDB4MDAwMDAwMDIsIDB4NDgwNzg4YTMsIDB4NGEwMzg4MzAsCiAJMHgwMDAwMDAwMSwgMHg0YTAzODgzMiwgMHgwMWZmZmZmZiwgMHg1OGM4MDIwMiwKLQkweDQ4MDMwODA0LCAweDAyMDFmODAwLCAweDAwMTA2MTliLCAweDAyMDFmMDAwLAotCTB4MDAxMDIyYzAsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMTAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjNmNSwgMHgwMjAxZjgwMCwgMHgwMDEwNjQwMiwgMHgwMjAxZjgwMCwKLQkweDAwMTA2MmU0LCAweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDRjMDAwMDAwLAorCTB4NDgwMzA4MDQsIDB4MDIwMWY4MDAsIDB4MDAxMDVlZDQsIDB4MDIwMWYwMDAsCisJMHgwMDEwMjA2NiwgMHgwMjAxZjAwMCwgMHgwMDEwMjBiNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MTJkLCAweDAyMDFmODAwLCAweDAwMTA2MTNhLCAweDAyMDFmODAwLAorCTB4MDAxMDYwMWQsIDB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NGMwMDAwMDAsCiAJMHg1OWEwMTIwNywgMHg1OWEwMDQwNywgMHg5MDA4MTFjMCwgMHg4MDA4MTU0MCwKIAkweDU5YTAxYTA5LCAweDU5YTAwNDA5LCAweDkwMGMxOWMwLCAweDgwMGMxZDQwLAotCTB4NWMwMDAwMDAsIDB4MDQwMWYxYWMsIDB4NTk4NDAwMDAsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwMCwgMHgwNDAwMDA1NCwgMHg1OTg0MDAwMiwgMHg4YzAwMDUwNCwKLQkweDA0MDAwMDUxLCAweDg0MDAwNTQ2LCAweDQ4MDMwODAyLCAweDAyMDFmODAwLAotCTB4MDAxMDYyZTQsIDB4NTljNDA4YTMsIDB4ODIwNDBkMDAsIDB4ZmZmZmZmZmQsCi0JMHg0ODA3ODhhMywgMHg0YzVjMDAwMCwgMHg0MjAwYjgwMCwgMHgwMDEwYWMwMCwKKwkweDVjMDAwMDAwLCAweDA0MDFmMWI5LCAweDU5ODQwMDAwLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwNTAsIDB4NTk4NDAwMDIsIDB4OGMwMDA1MDQsCisJMHgwNDAwMDA0ZCwgMHg4NDAwMDU0NiwgMHg0ODAzMDgwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MDFkLCAweDU5YzQwOGEzLCAweDgyMDQwZDAwLCAweGZmZmZmZmZkLAorCTB4NDgwNzg4YTMsIDB4NGM1YzAwMDAsIDB4NDIwMGI4MDAsIDB4MDAxMGFhMDAsCiAJMHg1MDVlNjgwMCwgMHg4MTM2NjljMCwgMHgwNDAwMDAwOCwgMHg1OTM2NjAwZSwKLQkweDgxMzI2MWMwLCAweDA0MDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA2MmQ1LAotCTB4MDIwMDA4MDAsIDB4MDAxMDY0YWQsIDB4ODA1Y2I4MDAsIDB4ODI1YzA1ODAsCi0JMHgwMDEwYjNmMCwgMHgwNDAyMDdmMywgMHg1OTg2NjAwMywgMHg4MTMyNjFjMCwKKwkweDgxMzI2MWMwLCAweDA0MDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA2MDBlLAorCTB4MDIwMDA4MDAsIDB4MDAxMDYxZTUsIDB4ODA1Y2I4MDAsIDB4ODI1YzA1ODAsCisJMHgwMDEwYjFmMCwgMHgwNDAyMDdmMywgMHg1OTg2NjAwMywgMHg4MTMyNjFjMCwKIAkweDA0MDAwMDBiLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDA5LAotCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMGI4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjJjMSwgMHg0MDVlNjAwMCwgMHgwNDAxZjdmNSwgMHg0OTdiMDgwMywKLQkweDQyMDBiODAwLCAweDAwMTBiNTFiLCAweDUwNWU2MDAwLCAweDgxMzI2MWMwLAorCTB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMGI4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWZmYSwgMHg0MDVlNjAwMCwgMHgwNDAxZjdmNSwgMHg0OTdiMDgwMywKKwkweDQyMDBiODAwLCAweDAwMTBiMzE3LCAweDUwNWU2MDAwLCAweDgxMzI2MWMwLAogCTB4MDQwMDAwMTEsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDksCiAJMHgwNDAyMDAwZCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwKIAkweDA0MDIwMDA5LCAweDU5MzI2ODA5LCAweDgxMzY2OWMwLCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDBlOTksIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjJjMSwgMHg0NTc4YjgwMCwgMHg4MDVjYjgwMCwgMHg4MjVjMDU4MCwKLQkweDAwMTBiNTIzLCAweDA0MDIwN2U5LCAweDQyMDAwODAwLCAweDAwMTBiNTE5LAotCTB4NDk3ODA4MDEsIDB4NDk3ODA4MDAsIDB4NTlhODAwNjksIDB4ODIwMDA0MDAsCi0JMHgwMDAwMDAwNywgMHg0ODAzNTA2OSwgMHgwMjAxZjgwMCwgMHgwMDEwNjNmNSwKLQkweDAyMDFmODAwLCAweDAwMTA2NDAyLCAweDVjMDBiODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDYxYjQsIDB4MDIwMWYwMDAsIDB4MDAxMDIyYzAsIDB4ODM2YzA1ODAsCisJMHgwMDEwMDYxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMGVlNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA1ZmZhLCAweDQ1NzhiODAwLCAweDgwNWNiODAwLCAweDgyNWMwNTgwLAorCTB4MDAxMGIzMWYsIDB4MDQwMjA3ZTksIDB4NDIwMDA4MDAsIDB4MDAxMGIzMTUsCisJMHg0OTc4MDgwMSwgMHg0OTc4MDgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjEyZCwKKwkweDAyMDFmODAwLCAweDAwMTA2MTNhLCAweDVjMDBiODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDVlZWQsIDB4MDIwMWYwMDAsIDB4MDAxMDIwNjYsIDB4ODM2YzA1ODAsCiAJMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNywKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDU5YTAwNDA3LCAweDU5YTAyMjA3LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NTlhMDA0MDcsIDB4NTlhMDIyMDcsCiAJMHg5MDEwMjFjMCwgMHg4MDEwMjU0MCwgMHg1OWEwMDQwOSwgMHg1OWEwMmEwOSwKLQkweDkwMTQyOWMwLCAweDgwMTQyZDQwLCAweDA0MDFmOTFlLCAweDA0MDIwMDA1LAotCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCisJMHg5MDE0MjljMCwgMHg4MDE0MmQ0MCwgMHgwNDAxZjkzMCwgMHgwNDAyMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAogCTB4NDE3YTg4MDAsIDB4NDE3ODE4MDAsIDB4NDk3YjQwMDEsIDB4NDk3YjQwMDMsCiAJMHg4MzJjMzQwMCwgMHgwMDAwMDAwNCwgMHg0ODFiNDAwMiwgMHg0MTQ0MDAwMCwKIAkweDgxYWMwNDAwLCAweDUwMDI2ODAwLCAweDgxMzY2OWMwLCAweDA0MDAwMDBiLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsIDB4MDQwMjAwMDgsIDB4NTkzNDAwMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwgMHgwNDAyMDAwOCwgMHg1OTM0MDAwMiwKIAkweDQ4MDAzMDAwLCAweDQ5NDQzMDAxLCAweDgyMTgzNDAwLCAweDAwMDAwMDAyLAogCTB4ODIwYzFjMDAsIDB4MDAwMDAwMDIsIDB4ODE0Njg4MDAsIDB4ODM0NDA0ODAsCiAJMHgwMDAwMDgwMCwgMHgwNDAwMDAwNSwgMHg4MjBjMDQ4MCwgMHgwMDAwMDAxMCwKIAkweDA0MDIxMDBiLCAweDA0MDFmN2VhLCAweDgwMGMxOWMwLCAweDA0MDIwMDA2LAogCTB4NTlhMDA4MDEsIDB4ODAwNDA5MDIsIDB4NDgwNzQ0MDYsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMjJjMCwgMHg0YTAzNDAwMywgMHgwMDAwMDAwMSwgMHg0OTQ3NDAwMCwKKwkweDAwMTAyMDY2LCAweDRhMDM0MDAzLCAweDAwMDAwMDAxLCAweDQ5NDc0MDAwLAogCTB4NTlhMDAwMDEsIDB4ODAwYzA0MDAsIDB4NDgwMzQwMDEsIDB4NDBlYzEwMDAsCiAJMHg0YTAwMTAwMSwgMHgwMDAwMDAwMCwgMHg0ODBjMTAwNCwgMHg1OWEwMDAwMiwKIAkweDQ4MDAxMDAzLCAweDQ4MTAxMDA3LCAweDQ4MTQxMDA4LCAweDAyMDFmODAwLAotCTB4MDAxMDA4NTgsIDB4NGEwMWQ4MDksIDB4MDAxMDM5MjAsIDB4MWMwMWYwMDAsCisJMHgwMDEwMDhhMSwgMHg0YTAxZDgwOSwgMHgwMDEwMzcyOCwgMHgxYzAxZjAwMCwKIAkweDQwMzFkODAwLCAweDU4ZWY0MDBiLCAweDU4ZWMwMDAyLCAweDgyMDAwNTgwLAotCTB4MDAwMDAyMDAsIDB4MDIwMDAwMDAsIDB4MDAxMDIzMDQsIDB4NTlhMDAwMDMsCisJMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjBhYSwgMHg1OWEwMDAwMywKIAkweDgwMDAwNTQwLCAweDA0MDIwMDA4LCAweDU5YTI4ODAwLCAweDU5YTAzMDAyLAogCTB4NDE3ODE4MDAsIDB4NDBlYzEwMDAsIDB4NTgwODIwMDcsIDB4NTgwODI4MDgsCiAJMHgwNDAxZjdiZiwgMHg1OWEwMDgwMSwgMHg4MDA0MDkwMiwgMHg0ODA3NDQwNiwKLQkweDAyMDFmMDAwLCAweDAwMTAyMmMwLCAweDgwMDQwOWMwLCAweDA0MDAwMDA1LAotCTB4NGEwMzQ0MDYsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjA2NiwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAogCTB4NTlhODAwMjYsIDB4OGMwMDA1MGEsIDB4MDQwMjAwMDcsIDB4OGMwMDA1MDYsCiAJMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAxNiwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDA0MDFmOGJiLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LAotCTB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NTlhMDBjMDYsCisJMHgwMDEwMjBiMiwgMHgwNDAxZjhjZCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwKKwkweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDU5YTAwYzA2LAogCTB4ODAwNDA5MDIsIDB4NTlhMDA0MDcsIDB4NTlhMDEyMDcsIDB4OTAwODExYzAsCiAJMHg4MDA4MTU0MCwgMHg1OWEwMDQwOSwgMHg1OWEwMWEwOSwgMHg5MDBjMTljMCwKLQkweDgwMGMxZDQwLCAweDgzMmMwNDAwLCAweDAwMDAwMDA1LCAweDA0MDFmOGNlLAotCTB4NGEwMWQ4MDksIDB4MDAxMDM5NWIsIDB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsCisJMHg4MDBjMWQ0MCwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjhkZiwKKwkweDRhMDFkODA5LCAweDAwMTAzNzYzLCAweDFjMDFmMDAwLCAweDQwMzFkODAwLAogCTB4NThlZjQwMGIsIDB4NThlZTU4MGQsIDB4NThlYzAwMDIsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjMwNCwgMHg1OTJjMDAwOSwKLQkweDAyMDFmODAwLCAweDAwMTA1YzlhLCAweDAyMDAwODAwLCAweDAwMTA0NWE2LAotCTB4MDIwMjAwMDAsIDB4MDAxMDIzMTAsIDB4NDk0NzQwMDEsIDB4NDgxYTY4MDIsCisJMHgwMDAwMDIwMCwgMHgwMjAwMDAwMCwgMHgwMDEwMjBhYSwgMHg1OTJjMDAwOSwKKwkweDAyMDFmODAwLCAweDAwMTA1OWI5LCAweDAyMDAwODAwLCAweDAwMTA0M2ZjLAorCTB4MDIwMjAwMDAsIDB4MDAxMDIwYjYsIDB4NDk0NzQwMDEsIDB4NDgxYTY4MDIsCiAJMHg1OTJjMDAwYSwgMHg4MjAwMWQ4MCwgMHg3MDAwMDAwMCwgMHgwNDAyMDAwNywKLQkweDA0MDFmODkwLCAweDA0MDIwMDExLCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4ODIwMDFkODAsIDB4NzIwMDAwMDAsCi0JMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHgwNDAxZjg4NiwgMHgwNDAyMDg4NSwKLQkweDA0MDIwODg0LCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAyLAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NThlZTU4MGQsIDB4NGEwMjVjMDQsCisJMHgwNDAxZjhhMiwgMHgwNDAyMDAxMSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDgyMDAxZDgwLCAweDcyMDAwMDAwLAorCTB4MDIwMjAwMDAsIDB4MDAxMDIwYjYsIDB4MDQwMWY4OTgsIDB4MDQwMjA4OTcsCisJMHgwNDAyMDg5NiwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMiwKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDU4ZWU1ODBkLCAweDRhMDI1YzA0LAogCTB4MDAwMDgwMDAsIDB4NDk3YTVhMDQsIDB4NTkyYzMyMDgsIDB4ODAxODMxMDIsCiAJMHg1OTJjMTgwMSwgMHg0YTAwMTgwNSwgMHgwMTAwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA5MGQxLCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAzLAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NGEwMWQ4MDksIDB4MDAxMDM5OTUsCisJMHgwMDEwOGU4ZSwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwMywKKwkweDAyMDFmMDAwLCAweDAwMTAyMGIyLCAweDRhMDFkODA5LCAweDAwMTAzNzlkLAogCTB4MWMwMWYwMDAsIDB4NTkyYzQwMDAsIDB4NTkyYzAwMDUsIDB4ODIwMDA1ODAsCiAJMHgwMTAwMDAwMCwgMHgwNDAyMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwNCwKLQkweDAyMDFmMDAwLCAweDAwMTAyMzBjLCAweDgzMmMzYzAwLCAweDAwMDAwMDA1LAotCTB4NDAxY2EwMDAsIDB4NDAxY2E4MDAsIDB4NTgyMDI4MGEsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwMiwgMHg4MjE0MzU4MCwgMHg3MDAwMDAwMCwgMHgwNDAwMDAwMywKLQkweDQyMDBiMDAwLCAweDAwMDAwMDBmLCAweDAyMDFmODAwLCAweDAwMTBhYjI4LAotCTB4NDAxYzAwMDAsIDB4NTgyMDEwMDYsIDB4NTgyMDE4MDcsIDB4NTgyMDIyMDUsCi0JMHg4MDEwMjEwMiwgMHg4MjE0MzU4MCwgMHg3MDAwMDAwMCwgMHgwNDAyMDAwOCwKLQkweDgyMTAzNDgwLCAweDAwMDAwMDAyLCAweDAyMDAxMDAwLCAweDAwMTAyMzEwLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsIDB4MDQwMWYwNmUsIDB4ODIxNDM1ODAsCi0JMHg3MjAwMDAwMCwgMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHg4MjEwMzQ4MCwKLQkweDAwMDAwMDJhLCAweDAyMDAxMDAwLCAweDAwMTAyMzEwLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMGYsIDB4MDQwMWY4NjMsIDB4NGEwMWQ4MDksIDB4MDAxMDM5YzksCi0JMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwgMHg1OGVlNTgwZSwKLQkweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLAotCTB4MDAxMDIzMDQsIDB4NTkyZTU4MDAsIDB4ODMyYzBjMDAsIDB4MDAwMDAwMDUsCi0JMHg0MDA0YTAwMCwgMHg0MDA0YTgwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwZiwKLQkweDAyMDFmODAwLCAweDAwMTBhYjI4LCAweDQwZWMxMDAwLCAweDRhMDAxMDAxLAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NGM1ODAwMDAsIDB4NGM1MDAwMDAsCisJMHg0YzU0MDAwMCwgMHg4MzJjM2MwMCwgMHgwMDAwMDAwNSwgMHg0MDFjYTAwMCwKKwkweDQwMWNhODAwLCAweDU4MjAyODBhLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4ODIxNDM1ODAsIDB4NzAwMDAwMDAsIDB4MDQwMDAwMDMsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwZiwgMHgwMjAxZjgwMCwgMHgwMDEwYTk0ZiwgMHg1YzAwYTgwMCwKKwkweDVjMDBhMDAwLCAweDVjMDBiMDAwLCAweDQwMWMwMDAwLCAweDU4MjAxMDA2LAorCTB4NTgyMDE4MDcsIDB4NTgyMDIyMDUsIDB4ODAxMDIxMDIsIDB4ODIxNDM1ODAsCisJMHg3MDAwMDAwMCwgMHgwNDAyMDAwOCwgMHg4MjEwMzQ4MCwgMHgwMDAwMDAwMiwKKwkweDAyMDAxMDAwLCAweDAwMTAyMGI2LCAweDQyMDAwODAwLCAweDAwMDAwMDAyLAorCTB4MDQwMWYwNzksIDB4ODIxNDM1ODAsIDB4NzIwMDAwMDAsIDB4MDIwMjAwMDAsCisJMHgwMDEwMjBiNiwgMHg4MjEwMzQ4MCwgMHgwMDAwMDAyYSwgMHgwMjAwMTAwMCwKKwkweDAwMTAyMGI2LCAweDQyMDAwODAwLCAweDAwMDAwMDBmLCAweDA0MDFmODZlLAorCTB4NGEwMWQ4MDksIDB4MDAxMDM3ZDcsIDB4MWMwMWYwMDAsIDB4NDAzMWQ4MDAsCisJMHg1OGVmNDAwYiwgMHg1OGVlNTgwZSwgMHg1OGVjMDAwMiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMjAwLCAweDAyMDAwMDAwLCAweDAwMTAyMGFhLCAweDU5MmU1ODAwLAorCTB4ODMyYzBjMDAsIDB4MDAwMDAwMDUsIDB4NGM1ODAwMDAsIDB4NGM1MDAwMDAsCisJMHg0YzU0MDAwMCwgMHg0MDA0YTAwMCwgMHg0MDA0YTgwMCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDBmLCAweDAyMDFmODAwLCAweDAwMTBhOTRmLCAweDVjMDBhODAwLAorCTB4NWMwMGEwMDAsIDB4NWMwMGIwMDAsIDB4NDBlYzEwMDAsIDB4NGEwMDEwMDEsCiAJMHgwMDAwMDAwMCwgMHg0YTAwMTAwNCwgMHgwMDAwMDAwZiwgMHg0ODA0MTAwMywKLQkweDAyMDFmODAwLCAweDAwMTAwODU4LCAweDRhMDFkODA5LCAweDAwMTAzOWU1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4YTEsIDB4NGEwMWQ4MDksIDB4MDAxMDM3ZjksCiAJMHgxYzAxZjAwMCwgMHg0MDMxZDgwMCwgMHg1OGVmNDAwYiwgMHg1OGVlNTgwZSwKIAkweDU4ZWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMjAwLCAweDAyMDAwMDAwLAotCTB4MDAxMDIzMDQsIDB4ODMyYzBjMDAsIDB4MDAwMDAwMDUsIDB4NDAwNGEwMDAsCi0JMHg0MDA0YTgwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwYywgMHgwMjAxZjgwMCwKLQkweDAwMTBhYjI4LCAweDQwZWMxMDAwLCAweDRhMDAxMDAxLCAweDAwMDAwMDAwLAotCTB4NGEwMDEwMDQsIDB4MDAwMDAwMGMsIDB4NDgwNDEwMDMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDg1OCwgMHg0YTAxZDgwOSwgMHgwMDEwMjJiOSwgMHgxYzAxZjAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwN2U0LCAweDA0MDAwMDEwLCAweDQ5N2E1ODAwLAotCTB4NThlYzAwMGQsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDQsIDB4NDkyZGQ4MGQsCi0JMHg0OTJkZDgwZSwgMHgwNDAxZjAwNywgMHg1OGVjMDAwZSwgMHg0ODAyNTgwMCwKLQkweDgyMDAwNDAwLCAweDAwMDAwMDAxLCAweDQ1MmMwMDAwLCAweDQ5MmRkODBlLAotCTB4ODMyYzA0MDAsIDB4MDAwMDAwMDQsIDB4NDkyZmM4NTcsIDB4NDgwM2M4NTcsCi0JMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwgMHg0OGVmYzg1NywgMHg1OGVjNDAwZCwKLQkweDQ4MjNjODU3LCAweDgwMjA0MWMwLCAweDA0MDAwMDA3LCAweDQwMjI1ODAwLAotCTB4NTkyYzQwMDEsIDB4NDk3YTU4MDEsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZjQsCi0JMHgwNDAxZjdmOCwgMHg0OTc5ZDgwZCwgMHg0OTc5ZDgwZSwgMHg1YzAyNTgwMCwKLQkweDFjMDFmMDAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAzLAotCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NDgwN2M4NTcsCi0JMHg0ODBiYzg1NywgMHg0ODBmYzg1NywgMHg0ODFiYzg1NywgMHg0OGVmYzg1NywKLQkweDQ4MTlkODAxLCAweDgwMDQwOWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAotCTB4NDgwNWQ4MDQsIDB4NDgwMWQ4MDMsIDB4NDgwOWQ4MDcsIDB4NDgwZGQ4MDgsCi0JMHg0MGVjMTAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDg1OCwgMHg0YTAxZDgwOSwKLQkweDAwMTAyMmI5LCAweDFjMDFmMDAwLCAweDgwMDAyZDgwLCAweDQ4MGJjODU3LAotCTB4NDgwZmM4NTcsIDB4NDgxM2M4NTcsIDB4NDgxN2M4NTcsIDB4NGQyYzAwMDAsCi0JMHg0ZGEwMDAwMCwgMHg0MjAzNDAwMCwgMHgwMDEwYjRhNCwgMHg1OWEwMDAxNywKLQkweDgwMDAwMWMwLCAweDA0MDIwMDEzLCAweDA0MDA2MDEyLCAweDQ4MGJjMDIwLAotCTB4NDgwZmMwMjEsIDB4NDgxM2MwMjIsIDB4NDgxN2MwMjMsIDB4OTAwODExYzAsCi0JMHg4MjA4MTU0MCwgMHgwMDAwMDAxMiwgMHg0ODBiYzAxMSwgMHg1OWUwMDAxNywKLQkweDhjMDAwNTA4LCAweDA0MDIwMDA0LCAweDQyMDNlMDAwLCAweDMwMDAwMDAxLAotCTB4MDQwMWYwNTMsIDB4NGEwM2MwMTcsIDB4MDAwMDAwMDIsIDB4MDQwMWY3ZmIsCi0JMHg0YzA0MDAwMCwgMHg0YzFjMDAwMCwgMHg4MDAwMDgwMCwgMHg0ODA3NDAxNywKLQkweDU5YTAzODFhLCAweDQ4MWZjODU3LCAweDgwMWMzOWMwLCAweDA0MDIwMDI3LAotCTB4ODIwMDA0ODAsIDB4MDAwMDAwMGEsIDB4MDQwMjEwMTAsIDB4NTlhMDAwMTgsCi0JMHg4MDAwMDAwMCwgMHg0ODAzNDAxOCwgMHg1OWEwMDIxOSwgMHg4MjAwMDQwMCwKLQkweDAwMDAwMDAyLCAweDgyMDAwYzgwLCAweDAwMDAwMDEzLCAweDQ4MDM0MjE5LAotCTB4MDQwMDEwMDMsIDB4NDk3YjQyMTksIDB4NDE3ODAwMDAsIDB4NTlhMDM4MTYsCi0JMHg4MDFjM2MwMCwgMHgwNDAxZjAzMCwgMHg0ODAzYzg1NiwgMHgwMjAxZjgwMCwKLQkweDAwMTAwN2U0LCAweDA0MDAwMDA3LCAweDQ5MmY0MDFhLCAweDQ5MmY0MDFiLAotCTB4NDEyYzM4MDAsIDB4NDk3YjQyMWMsIDB4NDk3YTU4MTMsIDB4MDQwMWYwMjYsCi0JMHg1OTg4MDA1MSwgMHg4MDAwMDAwMCwgMHg0ODAzMTA1MSwgMHg1OWEwMDAxNywKLQkweDgwMDAwMDQwLCAweDQ4MDM0MDE3LCAweDU5YTAwMjE5LCAweDU5YTAzODE2LAotCTB4ODAxYzNjMDAsIDB4MDQwMWYwMWMsIDB4NTlhMDAyMWMsIDB4ODIwMDA0MDAsCi0JMHgwMDAwMDAwMiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAxMiwgMHgwNDAyMTAwNCwKLQkweDQ4MDM0MjFjLCAweDgwMWMzYzAwLCAweDA0MDFmMDEzLCAweDAyMDFmODAwLAotCTB4MDAxMDA3ZTQsIDB4MDQwMjAwMGIsIDB4NTk4ODAwNTEsIDB4ODAwMDAwMDAsCi0JMHg0ODAzMTA1MSwgMHg1OWEwMDAxNywgMHg4MDAwMDA0MCwgMHg0ODAzNDAxNywKLQkweDQ4MDNjODU2LCAweDU5YTAwMjFjLCAweDgwMWMzYzAwLCAweDA0MDFmMDA2LAotCTB4NDkyZjQwMWEsIDB4NDkyYzM4MTMsIDB4NDEyYzM4MDAsIDB4NDk3YjQyMWMsCi0JMHg0OTdhNTgxMywgMHg0ODA4M2MwMCwgMHg0ODBjM2EwMCwgMHg0ODEwM2MwMSwKLQkweDQ4MTQzYTAxLCAweDVjMDAzODAwLCAweDVjMDAwODAwLCAweDVjMDM0MDAwLAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDgwZmM4NTcsIDB4NDgxM2M4NTcsCi0JMHg0ODFiYzg1NywgMHg0MjAwMDAwMCwgMHgwMDEwYjgxMywgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDgwMTgwMGQwLCAweDQwMDAyODAwLCAweDQyMDAxMDAwLAotCTB4MDAwMDgwMTQsIDB4MDQwMWY3ODYsIDB4NGMwMDAwMDAsIDB4NTk5YzAwMTcsCi0JMHg4YzAwMDUxMiwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwKLQkweDU5OWMwMDE4LCAweDhjMDAwNTBlLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAotCTB4NTlhODA4MjEsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwMjMwYywgMHg4MzZjMDU4MCwKLQkweDAwMDAwMDAzLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDA3LAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MGEsCi0JMHgwNDAwMDAwNSwgMHg0YTAzNDQwNiwgMHgwMDAwMDAwOCwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMzBjLCAweDU5MzQwNDA1LCAweDhjMDAwNTA4LCAweDA0MDIwMDA0LAotCTB4OGMwMDA1MGEsIDB4MDIwMjAwMDAsIDB4MDAxMDM0ZGIsIDB4NDk3YTVhMDQsCi0JMHg0OTdhNTgwNSwgMHg0YTAyNWMwNCwgMHgwMDAwODAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA5MTc2LCAweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDAzLAotCTB4MDIwMWYwMDAsIDB4MDAxMDIzMGMsIDB4NGEwMWQ4MDksIDB4MDAxMDNhZWQsCi0JMHgxYzAxZjAwMCwgMHg1OTJjMDAwNSwgMHg4MjAwMDU4MCwgMHgwMTAwMDAwMCwKLQkweDA0MDIwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDA0LCAweDAyMDFmMDAwLAotCTB4MDAxMDIzMGMsIDB4NTlhMjhjMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsCi0JMHgwMjAyMDAwMCwgMHgwMDEwMjMxMCwgMHgwMjAxZjAwMCwgMHgwMDEwMzRkYiwKLQkweDgyMDAxNTgwLCAweDAwMDBmZmZmLCAweDA0MDAwMDA5LCAweDAyMDFmODAwLAotCTB4MDAxMDVjOWEsIDB4MDIwMDA4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwMGMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNWZhZSwgMHgwNDAxZjAwOSwgMHg0MjAyODgwMCwKLQkweDAwMDAwN2VmLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDAyMDAwODAwLAotCTB4MDAxMDVmYWUsIDB4ODE0Njg4NDAsIDB4MDQwMjE3ZmIsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg0YzBjMDAwMCwgMHg0ZDM0MDAwMCwgMHg0ZDQ0MDAwMCwKLQkweDQyMDI4ODAwLCAweDAwMDAwN2ZlLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LAotCTB4MDQwMjAwMDksIDB4NTkzNDE4MGEsIDB4ODIwYzFkMDAsIDB4MDAwMDAwMDEsCi0JMHg4MjBjMWQ4MCwgMHgwMDAwMDAwMSwgMHg0MjAwMTAwMCwgMHgwMDAwODAxYiwKLQkweDA0MDFmZjFlLCAweDVjMDI4ODAwLCAweDVjMDI2ODAwLCAweDVjMDAxODAwLAotCTB4MWMwMWYwMDAsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MDgsIDB4MWMwMWYwMDAsCi0JMHg0OGVmYzg1NywgMHgwNDAxMTAwMCwgMHg0OGVmYzg0MCwgMHg0YTAzYzg0MiwKLQkweDAwMDAwMDExLCAweDQwMDAwMDAwLCAweDA0MDExN2ZmLCAweDRhMDFkODBmLAotCTB4YmVlZmJlZWYsIDB4MWMwMWYwMDAsIDB4NDk3YjQwMDAsIDB4NDk3YjQwMDEsCi0JMHg0OTdiNDAwMiwgMHg0OTdiNDAwMywgMHg0OTdiNDAwNCwgMHgxYzAxZjAwMCwKLQkweDU5YzQwMGE0LCAweDRjNTgwMDAwLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMDcsCi0JMHgwNDAwMTAwYSwgMHg4MjAwNmM4MCwgMHgwMDAwMDAwNiwgMHgwMjAyMTgwMCwKLQkweDAwMTAwNWQ4LCAweDBjMDFmODA3LCAweDVjMDBhODAwLCAweDVjMDBhMDAwLAotCTB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4MDQwMWY5MDYsIDB4MDQwMWY3ZmIsCi0JMHgwMDEwM2I1MSwgMHgwMDEwM2I1NywgMHgwMDEwM2I3YywgMHgwMDEwM2I5ZSwKLQkweDAwMTAzYzU5LCAweDU5YzQwODA2LCAweDhjMDQwZDAwLCAweDA0MDIwMDAzLAotCTB4ODQwNDBkNDAsIDB4NDgwNzg4MDYsIDB4MWMwMWYwMDAsIDB4NTljNDAwMDUsCi0JMHg4YzAwMDUzNCwgMHgwMjAyMDAwMCwgMHgwMDEwNDI5ZSwgMHg0YTAzODgwNSwKLQkweGZmZmZmZmZmLCAweDQyMDA2MDAwLCAweDAwMDIwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDQyODIsIDB4NTlhODAwMTUsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmZmEsCi0JMHg4NDAwMDU0MiwgMHg0ODAzNTAxNSwgMHg0OTdiNTAyNiwgMHg0MjAwMDgwMCwKLQkweDAwMTBiZTIxLCAweDQ1NzgwODAwLCAweDQ5N2I1MDEzLCAweDQyMDA2MDAwLAotCTB4ZmZlZmZmZmYsIDB4NDIwMDY4MDAsIDB4NDAwMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDI3ZCwgMHg1OWM0MDAwNiwgMHg4MjAwMDUwMCwgMHhmZmZmZmYwZiwKLQkweDQ4MDM4ODA2LCAweDQyMDAwODAwLCAweDAwMDAwMDEwLCAweDQyMDAxMDAwLAotCTB4MDAxMDQxZjMsIDB4MDIwMWY4MDAsIDB4MDAxMDVmODMsIDB4MDQwMWYwMDEsCi0JMHg0MjAwNjAwMCwgMHhmZmZmZmZmZiwgMHg0MjAwNjgwMCwgMHgwMDgwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDQyMDBiMDAwLCAweDAwMDAwMGM4LAotCTB4NTljNDAwYTQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwYSwgMHgwNDAwMDAwZiwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmOSwKLQkweDQ5N2I1MDE0LCAweDQyMDA2MDAwLCAweGJmN2ZmZmZmLCAweDQyMDA2ODAwLAotCTB4MDAwMTgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsIDB4NDIwMDYwMDAsCi0JMHhmZmZlZmZmZiwgMHg0MTc4NjgwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNDI3ZCwKLQkweDQ5N2I1MDE0LCAweDRhMDM1MDEyLCAweDAwMDAwMDAwLCAweDgwMDAwNTgwLAotCTB4MDIwMWYwMDAsIDB4MDAxMDQyODksIDB4NGEwMzg4MDUsIDB4ZmZmZmZmZmYsCi0JMHg1OWE4MDAxMiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwNCwgMHgwMjAyMTgwMCwKLQkweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTAzYmE5LCAweDAwMTAzYmQ2LAotCTB4MDAxMDNjNGYsIDB4NDgwM2M4NTYsIDB4NTljNDAwYTMsIDB4ODQwMDA1MWUsCi0JMHg0ODAzODhhMywgMHg0YTAzNTAxMiwgMHgwMDAwMDAwMSwgMHg1OWM0MDAwOCwKLQkweDg0MDAwNTRlLCAweDQ4MDM4ODA4LCAweDAyMDFmODAwLCAweDAwMTA0MjYzLAotCTB4NDIwMDc4MDAsIDB4MDAxMGI1NGMsIDB4NGEwMDc4MDYsIDB4MTEwMTAwMDAsCi0JMHg0MjAwYTAwMCwgMHgwMDEwYjQwMiwgMHg0MjAwYTgwMCwgMHgwMDEwYjU1MywKLQkweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LAotCTB4NDk3Yjg4MDIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4NDk3YjUwNGEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDE2ZSwgMHg0YTAzNTA0YSwgMHgwMDAwMDAwMSwKLQkweDQ5N2I1MDE2LCAweDAyMDFmODAwLCAweDAwMTA0MjkwLCAweDQyMDA2MDAwLAotCTB4ZmZmZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDAwODAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDI3ZCwgMHg0MjAwNjAwMCwgMHhmZmY3ZmZmZiwgMHg0MTc4NjgwMCwKLQkweDAyMDFmMDAwLCAweDAwMTA0MjdkLCAweDU5YTgwMDE2LCAweDQ5N2I1MDE2LAotCTB4ODAwMDI1NDAsIDB4MDQwMDAwNjYsIDB4NTljNDAwMDQsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAwMywgMHgwNDAyMDA3MSwgMHg1OWE4MDgxNSwgMHg4YzA0MGQwMiwKLQkweDA0MDAwMDRiLCAweDgyMTAwNTgwLCAweDAwMDAwMDBjLCAweDA0MDIwMDRmLAotCTB4ODIxMDA0MDAsIDB4MDAwMDAwMTgsIDB4ODAwMGIxMDQsIDB4NDFjYzEwMDAsCi0JMHg0MjAwMTgwMCwgMHgwMDEwYjU0YywgMHg1MDA4MDgwMCwgMHg1MDBjMDAwMCwKLQkweDgwMDQwNTgwLCAweDA0MDIwMDFhLCAweDgwMDgxMDAwLCAweDgwMGMxODAwLAotCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZjksIDB4MDIwMWY4MDAsIDB4MDAxMDQyOTAsCi0JMHg0MjAwNjAwMCwgMHhmZmZmZmZmZiwgMHg0MjAwNjgwMCwgMHgwMDUwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDRhMDM1MDEyLCAweDAwMDAwMDAyLAotCTB4NGEwMzUwMTQsIDB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsIDB4MDAwMDA3ZDAsCi0JMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA2ZSwKLQkweDAyMDFmODAwLCAweDAwMTA0MjYzLCAweDA0MDFmMDQ4LCAweDU5Y2MwODA2LAotCTB4ODIwNDBkODAsIDB4MTEwMTAwMDAsIDB4MDQwMjAwMjgsIDB4NTljYzA4MDAsCi0JMHg4MjA0MDUwMCwgMHgwMGZmZmZmZiwgMHgwNDAwMDAxYSwgMHg4MjAwMDU4MCwKLQkweDAwMDAwMGVmLCAweDA0MDIwMDE3LCAweDU5Y2MwODAxLCAweDgyMDQwNTAwLAotCTB4MDBmZmZmZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwZWYsIDB4MDQwMjAwMTEsCi0JMHg4M2NjYTQwMCwgMHgwMDAwMDAwNywgMHg0MjAwYTgwMCwgMHgwMDEwYjQwMiwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDUwNTAwODAwLCAweDUwNTQwMDAwLAotCTB4ODAwNDA0ODAsIDB4MDQwMDEwMDcsIDB4MDQwMjAwMTAsIDB4ODA1MGEwMDAsCi0JMHg4MDU0YTgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmOCwgMHgwNDAxZjAwYiwKLQkweDU5YTgwMDE1LCAweDg0MDAwNTAyLCAweDQ4MDM1MDE1LCAweDQxY2NhMDAwLAotCTB4NDIwMGE4MDAsIDB4MDAxMGI1NGMsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDksCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHgwMjAxZjgwMCwgMHgwMDEwNDI5MCwKLQkweDQyMDA2MDAwLCAweGZmZmZmZmZmLCAweDQyMDA2ODAwLCAweDAwMDgwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsIDB4NDIwMDYwMDAsIDB4ZmZmN2ZmZmYsCi0JMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHg0MjAwNjAwMCwKLQkweGZmZmZmZmZmLCAweDQyMDA2ODAwLCAweDAwMDA0MDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDQyN2QsIDB4NTljNDAwMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsCi0JMHgwNDAyMDAwNiwgMHg0OTdiNTAxNiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywKLQkweDAyMDFmMDAwLCAweDAwMTA0MTZlLCAweDFjMDFmMDAwLCAweDFjMDFmMDAwLAotCTB4NTlhODAwMTQsIDB4ODIwMDZkODAsIDB4MDAwMDAwMGYsIDB4MDQwMDAwMDUsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAxYiwgMHgwMjAyMDgwMCwgMHgwMDEwNDEzOSwKLQkweDFjMDFmMDAwLCAweDU5YTgwMDE1LCAweDg0MDAwNTA2LCAweDQ4MDM1MDE1LAotCTB4NDk3YjUwNGEsIDB4NTlhODAwMTQsIDB4ODIwMDBjODAsIDB4MDAwMDAwMWUsCi0JMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwM2M5NywKLQkweDAwMTAzY2FjLCAweDAwMTAzY2Q1LCAweDAwMTAzY2YwLCAweDAwMTAzZDE0LAotCTB4MDAxMDNkNDUsIDB4MDAxMDNkNjgsIDB4MDAxMDNkOWIsIDB4MDAxMDNkYmUsCi0JMHgwMDEwM2RlNCwgMHgwMDEwM2UyMSwgMHgwMDEwM2U0OCwgMHgwMDEwM2U1ZiwKLQkweDAwMTAzZTcxLCAweDAwMTAzZThhLCAweDAwMTAzZWEwLCAweDAwMTAzZWE1LAotCTB4MDAxMDNlY2QsIDB4MDAxMDNlZjAsIDB4MDAxMDNmMTYsIDB4MDAxMDNmMzksCi0JMHgwMDEwM2Y2YywgMHgwMDEwM2ZhZSwgMHgwMDEwM2ZkOCwgMHgwMDEwM2ZmMCwKLQkweDAwMTA0MDMwLCAweDAwMTA0MDQ5LCAweDAwMTA0MDVjLCAweDAwMTA0MDVkLAotCTB4NDgwM2M4NTYsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTEzYiwgMHgwNDAwMDAwNywgMHg0MjAwNjAwMCwgMHhmZmZmZmZkNywKLQkweDQxNzg2ODAwLCAweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDA0MDFmMDBiLAorCTB4MDAxMDIwYWEsIDB4ODMyYzBjMDAsIDB4MDAwMDAwMDUsIDB4NGM1ODAwMDAsCisJMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0MDA0YTAwMCwgMHg0MDA0YTgwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDBjLCAweDAyMDFmODAwLCAweDAwMTBhOTRmLAorCTB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMGIwMDAsIDB4NDBlYzEwMDAsCisJMHg0YTAwMTAwMSwgMHgwMDAwMDAwMCwgMHg0YTAwMTAwNCwgMHgwMDAwMDAwYywKKwkweDQ4MDQxMDAzLCAweDAyMDFmODAwLCAweDAwMTAwOGExLCAweDRhMDFkODA5LAorCTB4MDAxMDIwNWYsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4MmEsCisJMHgwNDAwMDAxMCwgMHg0OTdhNTgwMCwgMHg1OGVjMDAwZCwgMHg4MDAwMDU0MCwKKwkweDA0MDIwMDA0LCAweDQ5MmRkODBkLCAweDQ5MmRkODBlLCAweDA0MDFmMDA3LAorCTB4NThlYzAwMGUsIDB4NDgwMjU4MDAsIDB4ODIwMDA0MDAsIDB4MDAwMDAwMDEsCisJMHg0NTJjMDAwMCwgMHg0OTJkZDgwZSwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNCwKKwkweDQ5MmZjODU3LCAweDQ4MDNjODU3LCAweDFjMDFmMDAwLCAweDRkMmMwMDAwLAorCTB4NThlYzQwMGQsIDB4ODAyMDQxYzAsIDB4MDQwMDAwMDgsIDB4NDgyM2M4NTcsCisJMHg0MDIyNTgwMCwgMHg1OTJjNDAwMSwgMHg0OTdhNTgwMSwgMHgwMjAxZjgwMCwKKwkweDAwMTAwODNhLCAweDA0MDFmN2Y4LCAweDQ5NzlkODBkLCAweDQ5NzlkODBlLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAwMywgMHg0MjAwMzAwMCwgMHgwMDAwMDAwMCwgMHg0ODAzYzg1NywKKwkweDQ4MDdjODU3LCAweDQ4MGJjODU3LCAweDQ4MGZjODU3LCAweDQ4MWJjODU3LAorCTB4NDhlZmM4NTcsIDB4NDgxOWQ4MDEsIDB4ODAwNDA5YzAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg0ODA1ZDgwNCwgMHg0ODAxZDgwMywgMHg0ODA5ZDgwNywKKwkweDQ4MGRkODA4LCAweDQwZWMxMDAwLCAweDAyMDFmODAwLCAweDAwMTAwOGExLAorCTB4NGEwMWQ4MDksIDB4MDAxMDIwNWYsIDB4MWMwMWYwMDAsIDB4ODAwMDJkODAsCisJMHg0ODBiYzg1NywgMHg0ODBmYzg1NywgMHg0ODEzYzg1NywgMHg0ODE3Yzg1NywKKwkweDRkMmMwMDAwLCAweDRkYTAwMDAwLCAweDQyMDM0MDAwLCAweDAwMTBiMmEwLAorCTB4NTlhMDAwMTcsIDB4ODAwMDAxYzAsIDB4MDQwMjAwMTMsIDB4MDQwMDYwMTIsCisJMHg0ODBiYzAyMCwgMHg0ODBmYzAyMSwgMHg0ODEzYzAyMiwgMHg0ODE3YzAyMywKKwkweDkwMDgxMWMwLCAweDgyMDgxNTQwLCAweDAwMDAwMDEyLCAweDQ4MGJjMDExLAorCTB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMjAwMDQsIDB4NDIwM2UwMDAsCisJMHgzMDAwMDAwMSwgMHgwNDAxZjA1MywgMHg0YTAzYzAxNywgMHgwMDAwMDAwMiwKKwkweDA0MDFmN2ZiLCAweDRjMDQwMDAwLCAweDRjMWMwMDAwLCAweDgwMDAwODAwLAorCTB4NDgwNzQwMTcsIDB4NTlhMDM4MWEsIDB4NDgxZmM4NTcsIDB4ODAxYzM5YzAsCisJMHgwNDAyMDAyNywgMHg4MjAwMDQ4MCwgMHgwMDAwMDAwYSwgMHgwNDAyMTAxMCwKKwkweDU5YTAwMDE4LCAweDgwMDAwMDAwLCAweDQ4MDM0MDE4LCAweDU5YTAwMjE5LAorCTB4ODIwMDA0MDAsIDB4MDAwMDAwMDIsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTMsCisJMHg0ODAzNDIxOSwgMHgwNDAwMTAwMywgMHg0OTdiNDIxOSwgMHg0MTc4MDAwMCwKKwkweDU5YTAzODE2LCAweDgwMWMzYzAwLCAweDA0MDFmMDMwLCAweDQ4MDNjODU2LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4MmEsIDB4MDQwMDAwMDcsIDB4NDkyZjQwMWEsCisJMHg0OTJmNDAxYiwgMHg0MTJjMzgwMCwgMHg0OTdiNDIxYywgMHg0OTdhNTgxMywKKwkweDA0MDFmMDI2LCAweDU5ODgwMDUyLCAweDgwMDAwMDAwLCAweDQ4MDMxMDUyLAorCTB4NTlhMDAwMTcsIDB4ODAwMDAwNDAsIDB4NDgwMzQwMTcsIDB4NTlhMDAyMTksCisJMHg1OWEwMzgxNiwgMHg4MDFjM2MwMCwgMHgwNDAxZjAxYywgMHg1OWEwMDIxYywKKwkweDgyMDAwNDAwLCAweDAwMDAwMDAyLCAweDgyMDAwYzgwLCAweDAwMDAwMDEyLAorCTB4MDQwMjEwMDQsIDB4NDgwMzQyMWMsIDB4ODAxYzNjMDAsIDB4MDQwMWYwMTMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDgyYSwgMHgwNDAyMDAwYiwgMHg1OTg4MDA1MiwKKwkweDgwMDAwMDAwLCAweDQ4MDMxMDUyLCAweDU5YTAwMDE3LCAweDgwMDAwMDQwLAorCTB4NDgwMzQwMTcsIDB4NDgwM2M4NTYsIDB4NTlhMDAyMWMsIDB4ODAxYzNjMDAsCisJMHgwNDAxZjAwNiwgMHg0OTJmNDAxYSwgMHg0OTJjMzgxMywgMHg0MTJjMzgwMCwKKwkweDQ5N2I0MjFjLCAweDQ5N2E1ODEzLCAweDQ4MDgzYzAwLCAweDQ4MGMzYTAwLAorCTB4NDgxMDNjMDEsIDB4NDgxNDNhMDEsIDB4NWMwMDM4MDAsIDB4NWMwMDA4MDAsCisJMHg1YzAzNDAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0ODBmYzg1NywKKwkweDQ4MTNjODU3LCAweDQ4MWJjODU3LCAweDQyMDAwMDAwLCAweDAwMTBiNjExLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4ODAxODAwZDAsIDB4NDAwMDI4MDAsCisJMHg0MjAwMTAwMCwgMHgwMDAwODAxNCwgMHgwNDAxZjc4NiwgMHg0YzAwMDAwMCwKKwkweDU5OWMwMDE3LCAweDhjMDAwNTEyLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAorCTB4NGMwMDAwMDAsIDB4NTk5YzAwMTgsIDB4OGMwMDA1MGUsIDB4NWMwMDAwMDAsCisJMHgxYzAxZjAwMCwgMHg1OWE4MDgyMSwgMHg4MDA0MDljMCwgMHgwNDAwMDAwNSwKKwkweDRhMDM0NDA2LCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAyMGIyLAorCTB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwNywgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg1OTljMDAxNywKKwkweDhjMDAwNTBhLCAweDA0MDAwMDA1LCAweDRhMDM0NDA2LCAweDAwMDAwMDA4LAorCTB4MDIwMWYwMDAsIDB4MDAxMDIwYjIsIDB4NTkzNDA0MDUsIDB4OGMwMDA1MDgsCisJMHgwNDAyMDAwNCwgMHg4YzAwMDUwYSwgMHgwMjAyMDAwMCwgMHgwMDEwMzJlMiwKKwkweDQ5N2E1YTA0LCAweDQ5N2E1ODA1LCAweDRhMDI1YzA0LCAweDAwMDA4MDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDhmMmQsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsCisJMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg0YTAxZDgwOSwKKwkweDAwMTAzOTA2LCAweDFjMDFmMDAwLCAweDU5MmMwMDA1LCAweDgyMDAwNTgwLAorCTB4MDEwMDAwMDAsIDB4MDQwMjAwMDUsIDB4NGEwMzQ0MDYsIDB4MDAwMDAwMDQsCisJMHgwMjAxZjAwMCwgMHgwMDEwMjBiMiwgMHg1OWEyOGMwNiwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMjY3LCAweDAyMDIwMDAwLCAweDAwMTAyMGI2LCAweDAyMDFmMDAwLAorCTB4MDAxMDMyZTIsIDB4ODIwMDE1ODAsIDB4MDAwMGZmZmYsIDB4MDQwMDAwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwNTliOSwgMHgwMjAwMDgwMCwgMHgwMDAyMDI2NywKKwkweDA0MDIwMDBjLCAweDAyMDFmODAwLCAweDAwMTA1Y2U3LCAweDA0MDFmMDA5LAorCTB4NDIwMjg4MDAsIDB4MDAwMDA3ZWYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsCisJMHgwMjAwMDgwMCwgMHgwMDEwNWNlNywgMHg4MTQ2ODg0MCwgMHgwNDAyMTdmYiwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjMGMwMDAwLCAweDRkMzQwMDAwLAorCTB4NGQ0NDAwMDAsIDB4NDIwMjg4MDAsIDB4MDAwMDA3ZmUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI2NywgMHgwNDAyMDAwOSwgMHg1OTM0MTgwYSwgMHg4MjBjMWQwMCwKKwkweDAwMDAwMDAxLCAweDgyMGMxZDgwLCAweDAwMDAwMDAxLCAweDQyMDAxMDAwLAorCTB4MDAwMDgwMWIsIDB4MDQwMWZmMWUsIDB4NWMwMjg4MDAsIDB4NWMwMjY4MDAsCisJMHg1YzAwMTgwMCwgMHgxYzAxZjAwMCwgMHg1OTljMDAxNywgMHg4YzAwMDUwOCwKKwkweDFjMDFmMDAwLCAweDQ4ZWZjODU3LCAweDA0MDExMDAwLCAweDQ4ZWZjODQwLAorCTB4NGEwM2M4NDIsIDB4MDAwMDAwMTEsIDB4NDAwMDAwMDAsIDB4MDQwMTE3ZmYsCisJMHg0YTAxZDgwZiwgMHhiZWVmYmVlZiwgMHgxYzAxZjAwMCwgMHg0OTdiNDAwMCwKKwkweDQ5N2I0MDAxLCAweDQ5N2I0MDAyLCAweDQ5N2I0MDAzLCAweDQ5N2I0MDA0LAorCTB4MWMwMWYwMDAsIDB4NTljNDAwYTQsIDB4NGM1ODAwMDAsIDB4NGM1MDAwMDAsCisJMHg0YzU0MDAwMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMDQ4MCwKKwkweDAwMDAwMDA3LCAweDA0MDAxMDBhLCAweDgyMDA2YzgwLCAweDAwMDAwMDA3LAorCTB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWY4MDcsIDB4NWMwMGE4MDAsCisJMHg1YzAwYTAwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHgwNDAxZjkwYywKKwkweDA0MDFmN2ZiLCAweDAwMTAzOTZjLCAweDAwMTAzOTcyLCAweDAwMTAzOTk3LAorCTB4MDAxMDM5YjksIDB4MDAxMDNhNzgsIDB4MDAxMDM5NmIsIDB4MWMwMWYwMDAsCisJMHg1OWM0MDgwNiwgMHg4YzA0MGQwMCwgMHgwNDAyMDAwMywgMHg4NDA0MGQ0MCwKKwkweDQ4MDc4ODA2LCAweDFjMDFmMDAwLCAweDU5YzQwMDA1LCAweDhjMDAwNTM0LAorCTB4MDIwMjAwMDAsIDB4MDAxMDQwY2UsIDB4NGEwMzg4MDUsIDB4ZmZmZmZmZmYsCisJMHg0MjAwNjAwMCwgMHgwMDAyMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDBiMiwKKwkweDU5YTgwMDE1LCAweDgyMDAwNTAwLCAweGZmZmZmZmZhLCAweDg0MDAwNTQyLAorCTB4NDgwMzUwMTUsIDB4NDk3YjUwMjYsIDB4NDIwMDA4MDAsIDB4MDAxMGJjMjAsCisJMHg0NTc4MDgwMCwgMHg0OTdiNTAxMywgMHg0MjAwNjAwMCwgMHhmZmVmZmZmZiwKKwkweDQyMDA2ODAwLCAweDQwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA0MGFkLAogCTB4NTljNDAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmMGYsIDB4NDgwMzg4MDYsCi0JMHg0MjAwMTAwMCwgMHgwMDAwMDBmMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTkzZCwKLQkweDAyMDFmODAwLCAweDAwMTA1MDk4LCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAotCTB4NDIwMDYwMDAsIDB4YmY3ZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDA0MDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwMSwKLQkweDQyMDAxMDAwLCAweDAwMTA0MWYzLCAweDAyMDFmODAwLCAweDAwMTA1ZmE0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDQxZjgsIDB4NDIwMDA4MDAsIDB4MDAwMDA3ZDAsCi0JMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjAwMCwgMHgwMDEwNjA2ZSwKLQkweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDI1LAotCTB4NDgwM2M4NTcsIDB4NDIwMDYwMDAsIDB4ZmZiZmZmZmYsIDB4NDE3ODY4MDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHg1OWM0MDAwNCwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMDAzLCAweDA0MDIwMDFiLCAweDU5Y2MxMDA2LCAweDgyMDgxNTgwLAotCTB4MTEwMjAwMDAsIDB4MDQwMjAwMTYsIDB4NTljYzEwMDcsIDB4OGMwODE1M2UsCi0JMHgwNDAwMDAwYiwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwNCwgMHgwNDAyMDAwOCwKLQkweDQyMDAwMDAwLCAweDAwMTBiODNmLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4NTlhODAwMTUsIDB4ODQwMDA1NDQsIDB4NDgwMzUwMTUsIDB4NDIwMDEwMDAsCi0JMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwgMHg0YTAzNTAxNCwKLQkweDAwMDAwMDEwLCAweDA0MDFmOWQ0LCAweDA0MDFmMDAyLCAweDQ5N2I1MDE2LAotCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMDMsCi0JMHg0MjAwNjAwMCwgMHhiZjNmZmZmZiwgMHg0MjAwNjgwMCwgMHgwMDEwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDQyMDAxMDAwLCAweDAwMTA0MWYzLAotCTB4MDIwMWY4MDAsIDB4MDAxMDVmYTQsIDB4MDIwMWY4MDAsIDB4MDAxMDQxZjgsCi0JMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwKLQkweDQyMDA3ODAwLCAweDAwMTBiNTUyLCAweDQ2MDA3ODAwLCAweDExMDIwMDAwLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWYwMDAsIDB4MDAxMDQxNmUsCi0JMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAyMSwgMHg0ODAzYzg1NywKLQkweDQyMDAxMDAwLCAweDAwMTA0MTQ4LCAweDAyMDFmODAwLCAweDAwMTA1ZjkwLAotCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMjAwMTYsCi0JMHg1OWNjMTAwNiwgMHg4MjA4MTU4MCwgMHgxMTAyMDAwMCwgMHgwNDAyMDAxMiwKLQkweDU5Y2MxMDA3LCAweDhjMDgxNTNlLCAweDA0MDAwMDBiLCAweDU5YTgwMDE1LAotCTB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsIDB4MDAxMGI4M2YsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OWE4MDAxNSwgMHg4NDAwMDU0NCwKLQkweDQ4MDM1MDE1LCAweDRhMDM1MDE0LCAweDAwMDAwMDA0LCAweDA0MDFmODA1LAotCTB4MDQwMWYwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDQxMzksIDB4MWMwMWYwMDAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAxMCwgMHg0MjAwMTAwMCwgMHgwMDEwNDAxYiwKKwkweDAyMDFmODAwLCAweDAwMTA1Y2JjLCAweDA0MDFmMDAxLCAweDQyMDA2MDAwLAorCTB4ZmZmZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDA4MDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDBhZCwgMHg0MjAwYjAwMCwgMHgwMDAwMDBjOCwgMHg1OWM0MDBhNCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDBhLAorCTB4MDQwMDAwMGYsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjksIDB4NDk3YjUwMTQsCisJMHg0MjAwNjAwMCwgMHhiZjdmZmZmZiwgMHg0MjAwNjgwMCwgMHgwMDAxODAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0MGFkLCAweDQyMDA2MDAwLCAweGZmZmVmZmZmLAorCTB4NDE3ODY4MDAsIDB4MDIwMWYwMDAsIDB4MDAxMDQwYWQsIDB4NDk3YjUwMTQsCisJMHg0YTAzNTAxMiwgMHgwMDAwMDAwMCwgMHg4MDAwMDU4MCwgMHgwMjAxZjAwMCwKKwkweDAwMTA0MGI5LCAweDRhMDM4ODA1LCAweGZmZmZmZmZmLCAweDU5YTgwMDEyLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMDQsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHgwYzAxZjAwMSwgMHgwMDEwMzljNCwgMHgwMDEwMzlmMSwgMHgwMDEwM2E2ZSwKKwkweDQ4MDNjODU2LCAweDU5YzQwMGEzLCAweDg0MDAwNTFlLCAweDQ4MDM4OGEzLAorCTB4NGEwMzUwMTIsIDB4MDAwMDAwMDEsIDB4NTljNDAwMDgsIDB4ODQwMDA1NGUsCisJMHg0ODAzODgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNDA5MywgMHg0MjAwNzgwMCwKKwkweDAwMTBiMzRhLCAweDRhMDA3ODA2LCAweDExMDEwMDAwLCAweDQyMDBhMDAwLAorCTB4MDAxMGIyMDIsIDB4NDIwMGE4MDAsIDB4MDAxMGIzNTEsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwYTkzZSwgMHg0OTdiODgwMiwKKwkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDQ5N2I1MDRhLCAweDAyMDFmODAwLAorCTB4MDAxMDNmOGUsIDB4NGEwMzUwNGEsIDB4MDAwMDAwMDEsIDB4NDk3YjUwMTYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDBjMCwgMHg0MjAwNjAwMCwgMHhmZmZmZmZmZiwKKwkweDQyMDA2ODAwLCAweDAwMDgwMDAwLCAweDAyMDFmODAwLCAweDAwMTA0MGFkLAorCTB4NDIwMDYwMDAsIDB4ZmZmN2ZmZmYsIDB4NDE3ODY4MDAsIDB4MDIwMWYwMDAsCisJMHgwMDEwNDBhZCwgMHg1OWE4MDAxNiwgMHg0OTdiNTAxNiwgMHg4MDAwMjU0MCwKKwkweDA0MDAwMDZhLCAweDU5YzQwMDA0LCAweDgyMDAwNTAwLCAweDAwMDAwMDAzLAorCTB4MDQwMjAwNzUsIDB4NTlhODA4MTUsIDB4OGMwNDBkMDIsIDB4MDQwMDAwNGYsCisJMHg4MjEwMDU4MCwgMHgwMDAwMDAwYywgMHgwNDAyMDA1MywgMHg4MjEwMDQwMCwKKwkweDAwMDAwMDE4LCAweDgwMDBiMTA0LCAweDQxY2MxMDAwLCAweDQyMDAxODAwLAorCTB4MDAxMGIzNGEsIDB4NTAwODA4MDAsIDB4NTAwYzAwMDAsIDB4ODAwNDA1ODAsCisJMHgwNDAyMDAxZSwgMHg4MDA4MTAwMCwgMHg4MDBjMTgwMCwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2Y5LCAweDAyMDFmODAwLCAweDAwMTA0MGMwLCAweDQyMDA2MDAwLAorCTB4ZmZmZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDA1MDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDBhZCwgMHg0YTAzNTAxMiwgMHgwMDAwMDAwMiwgMHg0YTAzNTAxNCwKKwkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTAxNjRiLCAweDQyMDAwODAwLAorCTB4MDAwMDA3ZDAsIDB4NDIwMDEwMDAsIDB4MDAxMDNmNjIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWRhNywgMHg1OWE4MDAxNSwgMHg4NDAwMDUwNiwgMHg0ODAzNTAxNSwKKwkweDAyMDFmMDAwLCAweDAwMTA0MDkzLCAweDU5Y2MwODA2LCAweDgyMDQwZDgwLAorCTB4MTEwMTAwMDAsIDB4MDQwMjAwMjgsIDB4NTljYzA4MDAsIDB4ODIwNDA1MDAsCisJMHgwMGZmZmZmZiwgMHgwNDAwMDAxYSwgMHg4MjAwMDU4MCwgMHgwMDAwMDBlZiwKKwkweDA0MDIwMDE3LCAweDU5Y2MwODAxLCAweDgyMDQwNTAwLCAweDAwZmZmZmZmLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwZWYsIDB4MDQwMjAwMTEsIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNywgMHg0MjAwYTgwMCwgMHgwMDEwYjIwMiwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAyLCAweDUwNTAwODAwLCAweDUwNTQwMDAwLCAweDgwMDQwNDgwLAorCTB4MDQwMDEwMDcsIDB4MDQwMjAwMTAsIDB4ODA1MGEwMDAsIDB4ODA1NGE4MDAsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmOCwgMHgwNDAxZjAwYiwgMHg1OWE4MDAxNSwKKwkweDg0MDAwNTAyLCAweDQ4MDM1MDE1LCAweDQxY2NhMDAwLCAweDQyMDBhODAwLAorCTB4MDAxMGIzNGEsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwYTkzZSwgMHgwMjAxZjgwMCwgMHgwMDEwNDBjMCwgMHg0MjAwNjAwMCwKKwkweGZmZmZmZmZmLCAweDQyMDA2ODAwLCAweDAwMDgwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDQwYWQsIDB4NDIwMDYwMDAsIDB4ZmZmN2ZmZmYsIDB4NDE3ODY4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDBhZCwgMHg0MjAwNjAwMCwgMHhmZmZmZmZmZiwKKwkweDQyMDA2ODAwLCAweDAwMDA0MDAwLCAweDAyMDFmODAwLCAweDAwMTA0MGFkLAorCTB4NTljNDAwMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMDYsCisJMHg0OTdiNTAxNiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwKKwkweDAwMTAzZjhlLCAweDFjMDFmMDAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDE0LAorCTB4ODIwMDZkODAsIDB4MDAwMDAwMGYsIDB4MDQwMDAwMDUsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAxYiwgMHgwMjAyMDgwMCwgMHgwMDEwM2Y1MywgMHgxYzAxZjAwMCwKKwkweDU5YTgwMDE1LCAweDg0MDAwNTA2LCAweDQ4MDM1MDE1LCAweDQ5N2I1MDRhLAorCTB4NTlhODAwMTQsIDB4ODIwMDBjODAsIDB4MDAwMDAwMWUsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDYxNSwgMHgwYzAxZjAwMSwgMHgwMDEwM2FiNiwgMHgwMDEwM2FjZCwKKwkweDAwMTAzYWY2LCAweDAwMTAzYjExLCAweDAwMTAzYjM0LCAweDAwMTAzYjY1LAorCTB4MDAxMDNiODcsIDB4MDAxMDNiYmEsIDB4MDAxMDNiZGMsIDB4MDAxMDNjMDAsCisJMHgwMDEwM2MzYywgMHgwMDEwM2M2MywgMHgwMDEwM2M3OSwgMHgwMDEwM2M4YiwKKwkweDAwMTAzY2EzLCAweDAwMTAzY2JhLCAweDAwMTAzY2JmLCAweDAwMTAzY2U3LAorCTB4MDAxMDNkMGEsIDB4MDAxMDNkMzAsIDB4MDAxMDNkNTMsIDB4MDAxMDNkODYsCisJMHgwMDEwM2RjOCwgMHgwMDEwM2RmMiwgMHgwMDEwM2UwYSwgMHgwMDEwM2U0YSwKKwkweDAwMTAzZTYzLCAweDAwMTAzZTc2LCAweDAwMTAzZTc3LCAweDQ4MDNjODU2LAorCTB4NDIwMmQ4MDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsCisJMHgwNDAwMDAwNywgMHg0MjAwNjAwMCwgMHhmZmZmZmZkNywgMHg0MTc4NjgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0MGFkLCAweDA0MDFmMDBiLCAweDU5YzQwMDA2LAorCTB4ODIwMDA1MDAsIDB4ZmZmZmZmMGYsIDB4NDgwMzg4MDYsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDBmMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTlhYSwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZDZjLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDQyMDA2MDAwLAorCTB4YmY3ZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDA0MDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDBhZCwgMHgwMjAxZjgwMCwgMHgwMDEwMTY0YiwgMHg0YTAzNTAxNCwKKwkweDAwMDAwMDAxLCAweDQyMDAxMDAwLCAweDAwMTA0MDFiLCAweDAyMDFmODAwLAorCTB4MDAxMDVjZGQsIDB4MDIwMWY4MDAsIDB4MDAxMDQwMjQsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDdkMCwgMHg0MjAwMTAwMCwgMHgwMDEwM2Y2MiwgMHgwMjAxZjAwMCwKKwkweDAwMTA1ZGE3LCAweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LAorCTB4MDQwMjAwMjMsIDB4NDgwM2M4NTcsIDB4NDIwMDYwMDAsIDB4ZmZiZmZmZmYsCisJMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDBhZCwgMHg1OWM0MDAwNCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMDAzLCAweDA0MDIwMDE5LCAweDQyMDAxMDAwLAorCTB4MDAxMDNmNjIsIDB4MDIwMWY4MDAsIDB4MDAxMDVjYzksIDB4NTljYzEwMDYsCisJMHg4MjA4MTU4MCwgMHgxMTAyMDAwMCwgMHgwNDAyMDAxMiwgMHg1OWNjMTAwNywKKwkweDhjMDgxNTNlLCAweDA0MDAwMDBiLCAweDU5YTgwMDE1LCAweDhjMDAwNTA0LAorCTB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsIDB4MDAxMGI2M2QsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHg1OWE4MDAxNSwgMHg4NDAwMDU0NCwgMHg0ODAzNTAxNSwKKwkweDRhMDM1MDE0LCAweDAwMDAwMDEwLCAweDA0MDFmMWNkLCAweDFjMDFmMDAwLAorCTB4MDIwMWYwMDAsIDB4MDAxMDNmNTMsIDB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsCisJMHgwMDAwMDAwMywgMHg0MjAwNjAwMCwgMHhiZjNmZmZmZiwgMHg0MjAwNjgwMCwKKwkweDAwMTAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA0MGFkLCAweDQyMDAxMDAwLAorCTB4MDAxMDQwMWIsIDB4MDIwMWY4MDAsIDB4MDAxMDVjZGQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDAyNCwgMHg0MjAwMTAwMCwgMHgwMDEwM2Y2MiwgMHgwMjAxZjgwMCwKKwkweDAwMTA1Y2M5LCAweDQyMDA3ODAwLCAweDAwMTBiMzUwLCAweDQ2MDA3ODAwLAorCTB4MTEwMjAwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWYwMDAsCisJMHgwMDEwM2Y4ZSwgMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxZSwKKwkweDQ4MDNjODU3LCAweDQyMDAxMDAwLCAweDAwMTAzZjYyLCAweDAyMDFmODAwLAorCTB4MDAxMDVjYzksIDB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsCisJMHgwNDAyMDAxNiwgMHg1OWNjMTAwNiwgMHg4MjA4MTU4MCwgMHgxMTAyMDAwMCwKKwkweDA0MDIwMDEyLCAweDU5Y2MxMDA3LCAweDhjMDgxNTNlLCAweDA0MDAwMDBiLAorCTB4NTlhODAwMTUsIDB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjYzZCwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg1OWE4MDAxNSwKKwkweDg0MDAwNTQ0LCAweDQ4MDM1MDE1LCAweDRhMDM1MDE0LCAweDAwMDAwMDA0LAorCTB4MDQwMWYwMDQsIDB4MWMwMWYwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDNmNTMsCiAJMHg0ODAzYzg1NiwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwNSwgMHg4M2NjYTQwMCwKLQkweDAwMDAwMDA2LCAweDQyMDBhODAwLCAweDAwMTBiNTUyLCAweDQyMDBiMDAwLAotCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NDIwMDc4MDAsCi0JMHgwMDEwYjU1MiwgMHg0NjAwNzgwMCwgMHgxMTAzMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MTNlLCAweDA0MDIwMDE0LCAweDU5YTgwMDE1LCAweDhjMDAwNTAwLAorCTB4MDAwMDAwMDYsIDB4NDIwMGE4MDAsIDB4MDAxMGIzNTAsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYTkzZSwgMHg0MjAwNzgwMCwKKwkweDAwMTBiMzUwLCAweDQ2MDA3ODAwLCAweDExMDMwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDNmNTgsIDB4MDQwMjAwMTQsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDAsCiAJMHgwNDAyMDAxMSwgMHg1OWE4MDgxMCwgMHg4MjA0MDU4MCwgMHgwMGZmZmZmZiwKIAkweDA0MDAwMDBkLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgyMDQwNDAwLAotCTB4MDAxMDIxMGUsIDB4NTAwMDA4MDAsIDB4ODAwNDA5MTAsIDB4NDIwMDEwMDAsCi0JMHgwMDAwMDAwNCwgMHgwNDAxZmI5YiwgMHgwNDAwMDAwYiwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MjBkLCAweDQyMDBiMDAwLCAweDAwMDAwMDA0LCAweDgzY2NhNDAwLAotCTB4MDAwMDAwMDcsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWIxNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjAwMCwKLQkweDAwMTA0MTZlLCAweDU5YTgwMDE2LCAweDgwMDAwNTQwLCAweDA0MDAwMDIwLAotCTB4NDgwM2M4NTcsIDB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNWY5MCwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwKKwkweDAwMTAxZWI1LCAweDUwMDAwODAwLCAweDgwMDQwOTEwLCAweDQyMDAxMDAwLAorCTB4MDAwMDAwMDQsIDB4MDQwMWZiOTUsIDB4MDQwMDAwMGIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDAzZCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNCwgMHg4M2NjYTQwMCwKKwkweDAwMDAwMDA3LCAweDQyMDBhODAwLCAweDAwMTBiMzUxLCAweDAyMDFmODAwLAorCTB4MDAxMGE5M2UsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWYwMDAsCisJMHgwMDEwM2Y4ZSwgMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxZSwKKwkweDQ4MDNjODU3LCAweDQyMDAxMDAwLCAweDAwMTAzZjYyLCAweDAyMDFmODAwLAorCTB4MDAxMDVjYzksIDB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsCiAJMHgwNDAyMDAxNiwgMHg1OWNjMTAwNiwgMHg4MjA4MTU4MCwgMHgxMTAzMDAwMCwKIAkweDA0MDIwMDEyLCAweDU5Y2MxMDA3LCAweDhjMDgxNTNlLCAweDA0MDAwMDBiLAogCTB4NTlhODAwMTUsIDB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgzZiwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OWE4MDAxNSwKKwkweDAwMTBiNjNkLCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDU5YTgwMDE1LAogCTB4ODQwMDA1NDQsIDB4NDgwMzUwMTUsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMDYsCi0JMHgwNDAxZjgwNCwgMHgwNDAxZjAwMiwgMHgwNDAxZmJkMywgMHgxYzAxZjAwMCwKLQkweDQ4MDNjODU2LCAweDRhMDM1MDE0LCAweDAwMDAwMDA3LCAweDgzY2NhNDAwLAotCTB4MDAwMDAwMDYsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg0MjAwNzgwMCwKLQkweDAwMTBiNTUyLCAweDQ2MDA3ODAwLCAweDExMDQwMDAwLCAweDA0MDFmYmM3LAotCTB4MDQwMjAwMjAsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMWQsCi0JMHg1OTljMDAxNywgMHg4YzAwMDUwMCwgMHgwNDAwMDAxYSwgMHg1OTljMTQwMiwKLQkweDgyMDgwNDgwLCAweDAwMDAwMDdmLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4NGMwODAwMDAsIDB4ODIwODE0MDAsIDB4MDAxMDIxMGUsIDB4NTAwODEwMDAsCi0JMHg4MjA4MTUwMCwgMHgwMDAwMDBmZiwgMHg0ODBiNTAxMCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA2Yzc4LCAweDVjMDAwODAwLAotCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsIDB4MDQwMWZiM2UsIDB4MDQwMDAwMDUsCi0JMHgwNDAxZmQyYiwgMHgwNDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwMTVmZSwKLQkweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDA0MDFmM2Q0LCAweDU5YTgwMDE2LAotCTB4ODAwMDA1NDAsIDB4MDQwMDAwMjAsIDB4NDgwM2M4NTcsIDB4NDIwMDEwMDAsCi0JMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwgMHg1OWE4MDAxNiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDE2LCAweDU5Y2MxMDA2LAotCTB4ODIwODE1ODAsIDB4MTEwNDAwMDAsIDB4MDQwMjAwMTIsIDB4NTljYzEwMDcsCi0JMHg4YzA4MTUzZSwgMHgwNDAwMDAwYiwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwNCwKLQkweDA0MDIwMDA4LCAweDQyMDAwMDAwLCAweDAwMTBiODNmLCAweDAyMDFmODAwLAotCTB4MDAxMGFhNDcsIDB4NTlhODAwMTUsIDB4ODQwMDA1NDQsIDB4NDgwMzUwMTUsCi0JMHg0YTAzNTAxNCwgMHgwMDAwMDAwOCwgMHgwNDAxZjgwNCwgMHgwNDAxZjAwMiwKLQkweDA0MDFmYjdkLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRhMDM1MDE0LAotCTB4MDAwMDAwMDksIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsIDB4NDIwMGE4MDAsCi0JMHgwMDEwYjU1MiwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYjE3LCAweDQyMDA3ODAwLCAweDAwMTBiNTUyLCAweDQ2MDA3ODAwLAotCTB4MTEwNTAxMDAsIDB4MDQwMWZiNzEsIDB4MDQwMjAwMGEsIDB4NTlhODAwMTUsCi0JMHg4YzAwMDUwMCwgMHgwNDAyMDAwNywgMHgwNDAxZmE4YywgMHgwNDAyMDAwNSwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTAxNWZlLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWZiOTQsIDB4MDQwMWZiNjMsCi0JMHgwNDAyMGVhNCwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwKLQkweDAyMDFmODAwLCAweDAwMTA5ODc0LCAweDVjMDI3ODAwLCAweDFjMDFmMDAwLAotCTB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwM2EsIDB4NDgwM2M4NTcsCi0JMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwKKwkweDA0MDFmMDAzLCAweDFjMDFmMDAwLCAweDA0MDFmM2NkLCAweDQ4MDNjODU2LAorCTB4NGEwMzUwMTQsIDB4MDAwMDAwMDcsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsCisJMHg0MjAwYTgwMCwgMHgwMDEwYjM1MCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNSwKKwkweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDQyMDA3ODAwLCAweDAwMTBiMzUwLAorCTB4NDYwMDc4MDAsIDB4MTEwNDAwMDAsIDB4MDQwMWZiYzIsIDB4MDQwMjAwMjAsCisJMHg1OWE4MDAxNSwgMHg4YzAwMDUwMCwgMHgwNDAyMDAxZCwgMHg1OTljMDAxNywKKwkweDhjMDAwNTAwLCAweDA0MDAwMDFhLCAweDU5OWMxNDAyLCAweDgyMDgwNDgwLAorCTB4MDAwMDAwN2YsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4NGMwODAwMDAsCisJMHg4MjA4MTQwMCwgMHgwMDEwMWViNSwgMHg1MDA4MTAwMCwgMHg4MjA4MTUwMCwKKwkweDAwMDAwMGZmLCAweDQ4MGI1MDEwLCAweDQyMDAwODAwLCAweDAwMDAwMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDY5YWYsIDB4NWMwMDA4MDAsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAwNCwgMHgwNDAxZmIzOSwgMHgwNDAwMDAwNSwgMHgwNDAxZmQyNSwKKwkweDA0MDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTAxNjY4LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDUsIDB4MDQwMWYzZDUsIDB4NTlhODAwMTYsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAxZSwgMHg0ODAzYzg1NywgMHg0MjAwMTAwMCwgMHgwMDEwM2Y2MiwKKwkweDAyMDFmODAwLCAweDAwMTA1Y2M5LCAweDU5YTgwMDE2LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMTQsIDB4MDQwMjAwMTYsIDB4NTljYzEwMDYsIDB4ODIwODE1ODAsCisJMHgxMTA0MDAwMCwgMHgwNDAyMDAxMiwgMHg1OWNjMTAwNywgMHg4YzA4MTUzZSwKKwkweDA0MDAwMDBiLCAweDU5YTgwMDE1LCAweDhjMDAwNTA0LCAweDA0MDIwMDA4LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2M2QsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg1OWE4MDAxNSwgMHg4NDAwMDU0NCwgMHg0ODAzNTAxNSwgMHg0YTAzNTAxNCwKKwkweDAwMDAwMDA4LCAweDA0MDFmMDAzLCAweDFjMDFmMDAwLCAweDA0MDFmMzc4LAorCTB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMDksIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNiwgMHg0MjAwYTgwMCwgMHgwMDEwYjM1MCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDQyMDA3ODAwLAorCTB4MDAxMGIzNTAsIDB4NDYwMDc4MDAsIDB4MTEwNTAxMDAsIDB4MDQwMWZiNmQsCisJMHgwNDAyMDAwYSwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwMCwgMHgwNDAyMDAwNywKKwkweDA0MDFmYTg4LCAweDA0MDIwMDA1LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE2NjgsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsCisJMHgwNDAxZmI5NiwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTA5NjQwLCAweDVjMDI3ODAwLCAweDFjMDFmMDAwLAorCTB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMzgsIDB4NDgwM2M4NTcsCisJMHg0MjAwMTAwMCwgMHgwMDEwM2Y2MiwgMHgwMjAxZjgwMCwgMHgwMDEwNWNjOSwKIAkweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDMwLAogCTB4NTljYzEwMDYsIDB4ODIwODA1MDAsIDB4MTEwNTAwMDAsIDB4ODIwMDA1ODAsCiAJMHgxMTA1MDAwMCwgMHgwNDAyMDAyYSwgMHg4YzA4MTUxMCwgMHgwNDAwMDAxNCwKIAkweDU5Y2MxMDA3LCAweDhjMDgxNTNlLCAweDA0MDAwMDBiLCAweDU5YTgwMDE1LAotCTB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsIDB4MDAxMGI4M2YsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OWE4MDAxNSwgMHg4NDAwMDU0NCwKKwkweDhjMDAwNTA0LCAweDA0MDIwMDA4LCAweDQyMDAwMDAwLCAweDAwMTBiNjNkLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NTlhODAwMTUsIDB4ODQwMDA1NDQsCiAJMHg0ODAzNTAxNSwgMHg0YTAzNTAxMywgMHgwMDAwMDAwMSwgMHg0YTAzNTAxNCwKLQkweDAwMDAwMDBhLCAweDA0MDFmODE4LCAweDA0MDFmMDE2LCAweDgwMDAwNTQwLAorCTB4MDAwMDAwMGEsIDB4MDQwMWY4MTcsIDB4MDQwMWYwMTQsIDB4ODAwMDA1NDAsCiAJMHgwNDAyMDAxMywgMHg1OWNjMTAwNywgMHg4YzA4MTUzZSwgMHgwNDAwMDAwYiwKIAkweDU5YTgwMDE1LCAweDhjMDAwNTA0LCAweDA0MDIwMDA4LCAweDQyMDAwMDAwLAotCTB4MDAxMGI4M2YsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NTlhODAwMTUsCisJMHgwMDEwYjYzZCwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg1OWE4MDAxNSwKIAkweDg0MDAwNTQ0LCAweDQ4MDM1MDE1LCAweDQ5N2I1MDEzLCAweDRhMDM1MDE0LAotCTB4MDAwMDAwMGUsIDB4MDQwMWY4NmQsIDB4MDQwMWYwMDIsIDB4MDQwMWZiMWEsCi0JMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwYiwKLQkweDQyMDAxMDAwLCAweDAwMTBiNTUzLCAweDQwMDhhODAwLCAweDQyMDBiMDAwLAotCTB4MDAwMDAwMjAsIDB4NDYwMGE4MDAsIDB4ZmZmZmZmZmYsIDB4ODA1NGE4MDAsCi0JMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg0MjAwNzgwMCwgMHgwMDEwYjU1MiwKLQkweDQ2MDA3ODAwLCAweDExMDYwMDAwLCAweDQyMDAxMDAwLCAweDAwMTBiNTUzLAotCTB4MDQwMWZiMGEsIDB4MDQwMDAwMDUsIDB4NTAwODAwMDAsIDB4NDYwMDEwMDAsCi0JMHgwMGZmZmZmZiwgMHgwNDAxZjAwYywgMHg1MDA4MDgwMCwgMHg4MjA0MGQwMCwKLQkweDAwMDBmZmZmLCAweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAotCTB4ODIwMDA1NDAsIDB4MDAwMDAxMDAsIDB4ODAwMDAwZTAsIDB4ODAwNDBkNDAsCi0JMHg0NDA0MTAwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAyMSwgMHgwNDAxZjMyNywKLQkweDU5YTgwMDE2LCAweDgwMDAwNTQwLCAweDA0MDAwMDE0LCAweDQ4MDNjODU3LAotCTB4NTlhODAwMTYsIDB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNWY5MCwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA4NCwKLQkweDA0MDIwMDA5LCAweDU5Y2MxMDA2LCAweDgyMDgxNTgwLCAweDExMDYwMDAwLAotCTB4MDQwMjAwMDUsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMGMsIDB4MDQwMWY4MDQsCi0JMHgwNDAxZjAwMiwgMHgwNDAxZmFkYywgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKLQkweDRhMDM1MDE0LCAweDAwMDAwMDBkLCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LAotCTB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMjEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg0MjAwNzgwMCwgMHgwMDEwYjU1MiwKLQkweDQ2MDA3ODAwLCAweDExMDcwMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDIxLAotCTB4MDQwMWYyZmUsIDB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMTYsCi0JMHg0ODAzYzg1NywgMHg1OWE4MDAxNiwgMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwKLQkweDAyMDFmODAwLCAweDAwMTA1ZjkwLCAweDgyMDAwNTgwLCAweDAwMDAwMDg0LAotCTB4MDQwMjAwMGMsIDB4NTljYzEwMDYsIDB4ODIwODE1ODAsIDB4MTEwNzAwMDAsCi0JMHgwNDAyMDAwOCwgMHg0YTAzNTAxMywgMHgwMDAwMDAwMSwgMHgwNDAxZmE5MSwKLQkweDRhMDM1MDE0LCAweDAwMDAwMDBlLCAweDA0MDFmODA0LCAweDA0MDFmMDAyLAotCTB4MDQwMWZhYjEsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4ODIwNDBkNDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZmJmYywgMHg0YTAzNTAxNCwgMHgwMDAwMDAwZiwKLQkweDQ5N2I1MDE2LCAweDQyMDA2MDAwLCAweGZmZmZmZmZmLCAweDQyMDA2ODAwLAotCTB4MDAzMDAwMDAsIDB4MDQwMWZiZTgsIDB4NDIwMDYwMDAsIDB4ZmZkZmZmZmYsCi0JMHg0MTc4NjgwMCwgMHgwNDAxZmJlNCwgMHg0MjAwMDgwMCwgMHgwMDAwMDdkMCwKLQkweDQyMDAxMDAwLCAweDAwMTA0MTQ4LCAweDAyMDFmMDAwLCAweDAwMTA1ZjY5LAotCTB4NDgwM2M4NTYsIDB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMjAyOTYsCi0JMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNTAxNCwgMHgwMDAwMDAxMSwKLQkweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDQyMDBhODAwLCAweDAwMTBiNTUyLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsCi0JMHg0MjAwYTgwMCwgMHgwMDEwYjU1MiwgMHg0NjAwYTgwMCwgMHgxMTAyMDAwMCwKLQkweDA0MDFmYThhLCAweDA0MDIwMDE1LCAweDU5YTgwMDEwLCAweDgyMDAwZDAwLAotCTB4ZmZmZjAwMDAsIDB4MDQwMDAwMTEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCi0JMHgwNDAwMDAwZSwgMHg4MjAwMGMwMCwgMHgwMDEwMjEwZSwgMHg1MDA0MDgwMCwKLQkweDgwMDQwOTEwLCAweDgyMDQwNTgwLCAweDAwMDAwMDdlLCAweDA0MDAwMDA3LAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwODAsIDB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsCi0JMHgwMDAwMDAwNCwgMHgwNDAxZmEwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwKLQkweDA0MDFmMmEyLCAweDU5YTgwMDE2LCAweDgwMDAwNTQwLCAweDA0MDAwMDIwLAotCTB4NDgwM2M4NTcsIDB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNWY5MCwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwKLQkweDA0MDIwMDE2LCAweDU5Y2MxMDA2LCAweDgyMDgxNTgwLCAweDExMDMwMDAwLAotCTB4MDQwMjAwMTIsIDB4NTljYzEwMDcsIDB4OGMwODE1M2UsIDB4MDQwMDAwMGIsCi0JMHg1OWE4MDAxNSwgMHg4YzAwMDUwNCwgMHgwNDAyMDAwOCwgMHg0MjAwMDAwMCwKLQkweDAwMTBiODNmLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5YTgwMDE1LAotCTB4ODQwMDA1NDQsIDB4NDgwMzUwMTUsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMTIsCi0JMHgwNDAxZjgwNCwgMHgwNDAxZjAwMiwgMHgwNDAxZmE0YiwgMHgxYzAxZjAwMCwKLQkweDQ4MDNjODU2LCAweDRhMDM1MDE0LCAweDAwMDAwMDEzLCAweDgzY2NhNDAwLAotCTB4MDAwMDAwMDYsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg0MjAwYTgwMCwKLQkweDAwMTBiNTUyLCAweDQ2MDBhODAwLCAweDExMDMwMDAwLCAweDA0MDFmYTNmLAotCTB4MDQwMjAwMTMsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMTAsCi0JMHg1OWE4MDgxMCwgMHg4MjA0MDU4MCwgMHgwMGZmZmZmZiwgMHgwNDAwMDAwYywKLQkweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgyMDQwNDAwLCAweDAwMTAyMTBlLAotCTB4NTAwMDA4MDAsIDB4ODAwNDA5MTAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsCi0JMHgwNDAxZjljMCwgMHgwNDAwMDAwMiwgMHgwNDAxZmFmYiwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDA1LCAweDA0MDFmMjU5LCAweDU5YTgwMDE2LCAweDgwMDAwNTQwLAotCTB4MDQwMDAwMjAsIDB4NDgwM2M4NTcsIDB4NDIwMDEwMDAsIDB4MDAxMDQxNDgsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDE0LCAweDA0MDIwMDE2LCAweDU5Y2MxMDA2LCAweDgyMDgxNTgwLAotCTB4MTEwNDAwMDAsIDB4MDQwMjAwMTIsIDB4NTljYzEwMDcsIDB4OGMwODE1M2UsCi0JMHgwNDAwMDAwYiwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwNCwgMHgwNDAyMDAwOCwKLQkweDQyMDAwMDAwLCAweDAwMTBiODNmLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4NTlhODAwMTUsIDB4ODQwMDA1NDQsIDB4NDgwMzUwMTUsIDB4NGEwMzUwMTQsCi0JMHgwMDAwMDAxNCwgMHgwNDAxZjgwNCwgMHgwNDAxZjAwMiwgMHgwNDAxZmEwMiwKLQkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRhMDM1MDE0LCAweDAwMDAwMDE1LAotCTB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywKLQkweDQyMDBhODAwLCAweDAwMTBiNTUyLCAweDQ2MDBhODAwLCAweDExMDQwMDAwLAotCTB4MDQwMWY5ZjYsIDB4MDQwMjAwMjAsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDAsCi0JMHgwNDAyMDAxZCwgMHg1OTljMDAxNywgMHg4YzAwMDUwMCwgMHgwNDAwMDAxYSwKLQkweDU5OWMxNDAyLCAweDgyMDgwNDgwLCAweDAwMDAwMDdmLCAweDAyMDIxODAwLAotCTB4MDAxMDA1ZDgsIDB4NGMwODAwMDAsIDB4ODIwODE0MDAsIDB4MDAxMDIxMGUsCi0JMHg1MDA4MTAwMCwgMHg4MjA4MTUwMCwgMHgwMDAwMDBmZiwgMHg0ODBiNTAxMCwKLQkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA2Yzc4LAotCTB4NWMwMDA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsIDB4MDQwMWY5NmQsCi0JMHgwNDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwM2FiZiwgMHgwMjAyMDgwMCwKLQkweDAwMTAxNWZlLCAweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDA0MDFmMjAzLAotCTB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwM2YsIDB4NDgwM2M4NTcsCi0JMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwKLQkweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDM1LAotCTB4NTljYzEwMDYsIDB4ODIwODA1MDAsIDB4MTEwNTAwMDAsIDB4ODIwMDA1ODAsCi0JMHgxMTA1MDAwMCwgMHgwNDAyMDAyZiwgMHg4YzA4MTUxMCwgMHgwNDAwMDAxMCwKLQkweDA0MDFmYjA5LCAweDU5Y2MxMDA3LCAweDhjMDgxNTNlLCAweDA0MDAwMDBiLAotCTB4NTlhODAwMTUsIDB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgzZiwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OWE4MDAxNSwKLQkweDg0MDAwNTQ0LCAweDQ4MDM1MDE1LCAweDA0MDFmMDEzLCAweDU5Y2MxMDA3LAorCTB4MDAwMDAwMGUsIDB4MDQwMWYwNmEsIDB4MWMwMWYwMDAsIDB4MDQwMWYzMTgsCisJMHg0ODAzYzg1NiwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwYiwgMHg0MjAwMTAwMCwKKwkweDAwMTBiMzUxLCAweDQwMDhhODAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDIwLAorCTB4NDYwMGE4MDAsIDB4ZmZmZmZmZmYsIDB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmYywgMHg0MjAwNzgwMCwgMHgwMDEwYjM1MCwgMHg0NjAwNzgwMCwKKwkweDExMDYwMDAwLCAweDQyMDAxMDAwLCAweDAwMTBiMzUxLCAweDA0MDFmYjA5LAorCTB4MDQwMDAwMDUsIDB4NTAwODAwMDAsIDB4NDYwMDEwMDAsIDB4MDBmZmZmZmYsCisJMHgwNDAxZjAwYywgMHg1MDA4MDgwMCwgMHg4MjA0MGQwMCwgMHgwMDAwZmZmZiwKKwkweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwNTQwLAorCTB4MDAwMDAxMDAsIDB4ODAwMDAwZTAsIDB4ODAwNDBkNDAsIDB4NDQwNDEwMDAsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAyMSwgMHgwNDAxZjMyYywgMHg1OWE4MDAxNiwKKwkweDgwMDAwNTQwLCAweDA0MDAwMDEyLCAweDQ4MDNjODU3LCAweDU5YTgwMDE2LAorCTB4NDIwMDEwMDAsIDB4MDAxMDNmNjIsIDB4MDIwMWY4MDAsIDB4MDAxMDVjYzksCisJMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA4NCwgMHgwNDAyMDAwOSwKKwkweDU5Y2MxMDA2LCAweDgyMDgxNTgwLCAweDExMDYwMDAwLCAweDA0MDIwMDA1LAorCTB4NGEwMzUwMTQsIDB4MDAwMDAwMGMsIDB4MDQwMWYwMDMsIDB4MWMwMWYwMDAsCisJMHgwNDAxZjJkYiwgMHg0ODAzYzg1NiwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwZCwKKwkweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDQyMDBhODAwLCAweDAwMTBiMzUwLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMjEsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsCisJMHg0MjAwNzgwMCwgMHgwMDEwYjM1MCwgMHg0NjAwNzgwMCwgMHgxMTA3MDAwMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDIxLCAweDA0MDFmMzA0LCAweDU5YTgwMDE2LAorCTB4ODAwMDA1NDAsIDB4MDQwMDAwMTQsIDB4NDgwM2M4NTcsIDB4NTlhODAwMTYsCisJMHg0MjAwMTAwMCwgMHgwMDEwM2Y2MiwgMHgwMjAxZjgwMCwgMHgwMDEwNWNjOSwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDg0LCAweDA0MDIwMDBjLCAweDU5Y2MxMDA2LAorCTB4ODIwODE1ODAsIDB4MTEwNzAwMDAsIDB4MDQwMjAwMDgsIDB4NGEwMzUwMTMsCisJMHgwMDAwMDAwMSwgMHgwNDAxZmE5MSwgMHg0YTAzNTAxNCwgMHgwMDAwMDAwZSwKKwkweDA0MDFmMDAzLCAweDFjMDFmMDAwLCAweDA0MDFmMmIxLCAweDQ4MDNjODU2LAorCTB4ODIwNDBkNDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDQwYjksCisJMHg0YTAzNTAxNCwgMHgwMDAwMDAwZiwgMHg0OTdiNTAxNiwgMHg0MjAwNjAwMCwKKwkweGZmZmZmZmZmLCAweDQyMDA2ODAwLCAweDAwMzAwMDAwLCAweDA0MDFmYmZlLAorCTB4NDIwMDYwMDAsIDB4ZmZkZmZmZmYsIDB4NDE3ODY4MDAsIDB4MDQwMWZiZmEsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDdkMCwgMHg0MjAwMTAwMCwgMHgwMDEwM2Y2MiwKKwkweDAyMDFmMDAwLCAweDAwMTA1Y2EyLCAweDQ4MDNjODU2LCAweDU5YTgwMDE2LAorCTB4ODAwMDA1NDAsIDB4MDQwMjAyOTYsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg0YTAzNTAxNCwgMHgwMDAwMDAxMSwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwKKwkweDQyMDBhODAwLCAweDAwMTBiMzUwLCAweDQyMDBiMDAwLCAweDAwMDAwMDA1LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4NDIwMGE4MDAsIDB4MDAxMGIzNTAsCisJMHg0NjAwYTgwMCwgMHgxMTAyMDAwMCwgMHgwNDAxZmE4YSwgMHgwNDAyMDAxNSwKKwkweDU5YTgwMDEwLCAweDgyMDAwZDAwLCAweGZmZmYwMDAwLCAweDA0MDAwMDExLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4MDQwMDAwMGUsIDB4ODIwMDBjMDAsCisJMHgwMDEwMWViNSwgMHg1MDA0MDgwMCwgMHg4MDA0MDkxMCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDdlLCAweDA0MDAwMDA3LCAweDgyMDQwNTgwLCAweDAwMDAwMDgwLAorCTB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDQsIDB4MDQwMWZhMDcsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjJhOCwgMHg1OWE4MDAxNiwKKwkweDgwMDAwNTQwLCAweDA0MDAwMDIwLCAweDQ4MDNjODU3LCAweDQyMDAxMDAwLAorCTB4MDAxMDNmNjIsIDB4MDIwMWY4MDAsIDB4MDAxMDVjYzksIDB4NTlhODAwMTYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwgMHgwNDAyMDAxNiwgMHg1OWNjMTAwNiwKKwkweDgyMDgxNTgwLCAweDExMDMwMDAwLCAweDA0MDIwMDEyLCAweDU5Y2MxMDA3LAogCTB4OGMwODE1M2UsIDB4MDQwMDAwMGIsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDQsCi0JMHgwNDAyMDAwOCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgzZiwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDU5YTgwMDE1LCAweDg0MDAwNTQ0LCAweDQ4MDM1MDE1LAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZhZWIsIDB4NDk3YjUwMTMsCi0JMHgwNDAxZjAwMywgMHg0YTAzNTAxMywgMHgwMDAwMDAwMSwgMHg1OWNjMTAwNywKLQkweDhjMDgxNTNjLCAweDA0MDAwMDAzLCAweDRhMDM1MDI2LCAweDAwMDAwMDA4LAotCTB4NGEwMzUwMTQsIDB4MDAwMDAwMTYsIDB4MDQwMWY4MDQsIDB4MDQwMWYwMDIsCi0JMHgwNDAxZjk4ZCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg4M2NjYTQwMCwKLQkweDAwMDAwMDA2LCAweDQyMDBhODAwLCAweDAwMTBiNTUyLCAweDQyMDBiMDAwLAotCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NGEwMzUwMTQsCi0JMHgwMDAwMDAxNywgMHg1OWE4MDAxMywgMHg4YzAwMDUwMCwgMHgwNDAwMDAwNiwKLQkweDQyMDAxMDAwLCAweDAwMTBiNTUyLCAweDQ2MDAxMDAwLCAweDExMDUwMTAwLAotCTB4MDQwMWYwMDMsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMWIsIDB4MDQwMWY5N2IsCi0JMHgwNDAyMDAwYSwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwMCwgMHgwNDAyMDAwNywKLQkweDA0MDFmODk2LCAweDA0MDIwMDA1LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE1ZmUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsCi0JMHgwNDAxZjk5ZSwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwKLQkweDAyMDFmODAwLCAweDAwMTA5ODc0LCAweDVjMDI3ODAwLCAweDFjMDFmMDAwLAotCTB4NTlhODAwMTYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMTUsIDB4NDgwM2M4NTcsCi0JMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwKLQkweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDg0LCAweDA0MDIwMDBiLAotCTB4NTljYzEwMDYsIDB4ODIwODE1ODAsIDB4MTEwNjAwMDAsIDB4MDQwMjAwMDcsCi0JMHg4MDAwMDU4MCwgMHgwNDAxZmFhMCwgMHg0YTAzNTAxNCwgMHgwMDAwMDAxOCwKLQkweDA0MDFmODA0LCAweDA0MDFmMDAyLCAweDA0MDFmOTRiLCAweDFjMDFmMDAwLAotCTB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMTksIDB4ODNjY2E0MDAsCi0JMHgwMDAwMDAwNiwgMHg0MjAwYTgwMCwgMHgwMDEwYjU1MiwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDIxLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDQyMDAzODAwLAotCTB4MDAxMGI1NTMsIDB4MDQwMWY5NDEsIDB4MDQwMjAwMTgsIDB4NDAxYzI4MDAsCi0JMHg1MDE0MTAwMCwgMHg4MDA4MDEzMCwgMHg4MDAwMDAwMCwgMHg0MDAwMTgwMCwKLQkweDgyMDgxNTAwLCAweDAwZmZmZmZmLCAweDgwMDAwMGYwLCAweDgwMDgwNTQwLAotCTB4NDQwMDI4MDAsIDB4NTlhODA4MTAsIDB4ODIwNDBkMDAsIDB4MDAwMDAwZmYsCi0JMHg0MDBjMTAwMCwgMHg4MDA4MTEwNCwgMHg4MjA4MjQwMCwgMHgwMDEwYjU1MywKLQkweDUwMTAxMDAwLCAweDgyMGMwNTAwLCAweDAwMDAwMDAzLCAweDBjMDFmODA2LAotCTB4ODAwODE1NDAsIDB4NDQwODIwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMjEsCi0JMHgwNDAxZjE1NiwgMHgwMDEwNDAxZCwgMHgwMDEwNDAyMiwgMHgwMDEwNDAyNywKLQkweDAwMTA0MDJjLCAweDgwMDQwOGYwLCAweDQwMDQwMDAwLCAweDgyMDgxNTAwLAotCTB4MDBmZmZmZmYsIDB4MWMwMWYwMDAsIDB4ODAwNDA4ZTAsIDB4NDAwNDAwMDAsCi0JMHg4MjA4MTUwMCwgMHhmZjAwZmZmZiwgMHgxYzAxZjAwMCwgMHg4MDA0MDhkMCwKLQkweDQwMDQwMDAwLCAweDgyMDgxNTAwLCAweGZmZmYwMGZmLCAweDFjMDFmMDAwLAotCTB4NDAwNDAwMDAsIDB4ODIwODE1MDAsIDB4ZmZmZmZmMDAsIDB4MWMwMWYwMDAsCi0JMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxNiwgMHg0ODAzYzg1NywKLQkweDQyMDAxMDAwLCAweDAwMTA0MTQ4LCAweDAyMDFmODAwLCAweDAwMTA1ZjkwLAotCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwODQsIDB4MDQwMjAwMGMsCi0JMHg1OWNjMTAwNiwgMHg4MjA4MTU4MCwgMHgxMTA3MDAwMCwgMHgwNDAyMDAwOCwKLQkweDRhMDM1MDEzLCAweDAwMDAwMDAxLCAweDA0MDFmOGQyLCAweDRhMDM1MDE0LAotCTB4MDAwMDAwMWEsIDB4MDQwMWY4MDQsIDB4MDQwMWYwMDIsIDB4MDQwMWY4ZjIsCi0JMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZmEzZSwKLQkweDRhMDM1MDE0LCAweDAwMDAwMDFiLCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LAotCTB4NDIwMGE4MDAsIDB4MDAxMGI1NTIsIDB4NTlhODIwMTYsIDB4NDAxMDAwMDAsCi0JMHg4MDAwYjEwNCwgMHg0MDU4MDgwMCwgMHg1NDUwYTgwMCwgMHg4MDUwYTAwMCwKLQkweDgwNTRhODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZjLCAweDA0MDFmMTEzLAotCTB4MWMwMWYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NDIwMDMwMDAsCi0JMHgwMDAwMDAwNCwgMHg0MjAwNDAwMCwgMHgwMDEwYjU1MywgMHg1OTljMjgxNywKLQkweDhjMTQyZDE0LCAweDA0MDIwMDFmLCAweDQyMDAxMDAwLCAweDAwMDAwMDAzLAotCTB4NDAyMDAwMDAsIDB4ODAwODA0MDAsIDB4NTAwMDA4MDAsIDB4ODIwNDI1ODAsCi0JMHhmZmZmZmZmZiwgMHgwNDAyMDAwNSwgMHg4MDA4MTA0MCwgMHg4MDE4MzA0MCwKLQkweDA0MDIwN2Y4LCAweDA0MDFmMDVlLCAweDgwMDgxMWMwLCAweDA0MDIwMDA2LAotCTB4ODIwNDI1ODAsIDB4M2ZmZmZmZmYsIDB4MDQwMDAwNTgsIDB4ODIwNDBkNDAsCi0JMHhjMDAwMDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg0MjAwMTgwMCwKLQkweDAwMDAwMDAxLCAweDQwMDQyMDAwLCAweDgwMTAyMTAyLCAweDA0MDIxMDIxLAotCTB4ODAwYzE4YzIsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsIDB4MDQwMWYwNGIsCi0JMHg0MTc4MTAwMCwgMHg0MDIwMDAwMCwgMHg4MDA4MDQwMCwgMHg1MDAwMDgwMCwKLQkweDgyMDQyNTgwLCAweGZmZmZmZmZmLCAweDA0MDIwMDA1LCAweDgwMDgxMDAwLAotCTB4ODAxODMwNDAsIDB4MDQwMjA3ZjgsIDB4MDQwMWYwNDAsIDB4ODAwODExYzAsCi0JMHgwNDAyMDAwMywgMHg4MjA0MGQ0MCwgMHhjMDAwMDAwMCwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDAxLCAweDQyMDAxODAwLCAweDgwMDAwMDAwLCAweDQwMDQyMDAwLAotCTB4ODAxMDIwYzIsIDB4MDQwMjEwMDcsIDB4ODAwYzE5MDIsIDB4ODA1OGIwMDAsCi0JMHg4MjU4MDQ4MCwgMHgwMDAwMDAyMSwgMHgwNDAwMTdmYSwgMHgwNDAxZjAyZiwKLQkweDQwMjAwMDAwLCAweDgwMDgyNDAwLCAweDUwMTAwMDAwLCAweDgwMGMwNTQwLAotCTB4NDQwMDIwMDAsIDB4NTlhODAwMTUsIDB4ODQwMDA1NDAsIDB4NDgwMzUwMTUsCi0JMHg0MDU4MDAwMCwgMHg0MjAwMjgwMCwgMHgwMDAwMDAyMCwgMHg4MDE0MmM4MCwKLQkweDQwMDgwMDAwLCAweDQyMDAzODAwLCAweDAwMDAwMDAzLCAweDgwMWMwNDgwLAotCTB4ODAwMDAwY2EsIDB4ODAxNDJkNDAsIDB4ODIxNDRjMDAsIDB4MDAxMDIxMGUsCi0JMHg1MDI0MjgwMCwgMHg4MjE0MmQwMCwgMHgwMDAwMDBmZiwgMHg0ODE3NTAxMCwKLQkweDRjMDQwMDAwLCAweDQwMTQwODAwLCAweDAyMDFmODAwLCAweDAwMTAxNWViLAotCTB4NWMwMDA4MDAsIDB4NDAwMDE4MDAsIDB4NTAwYzAwMDAsIDB4ODAxMDA1NDAsCi0JMHg0NDAwMTgwMCwgMHg1OWE4MDAxNSwgMHg4NDAwMDU0MCwgMHg0ODAzNTAxNSwKLQkweDQyMDBhODAwLCAweDAwMTBiNTUzLCAweDQwMjBhMDAwLCAweDQyMDBiMDAwLAotCTB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKLQkweDQ4MDdjODU3LCAweDQ4MGJjODU3LCAweDQwMDhiMDAwLCAweDgzY2NhNDAwLAotCTB4MDAwMDAwMDcsIDB4NDIwMGE4MDAsIDB4MDAxMGI1NTMsIDB4NDA1NDEwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg0MDA0MTgwMCwgMHg0MTc4MjAwMCwKLQkweDQyMDAwMDAwLCAweDAwMDAwMDAzLCAweDgyMGMxYzgwLCAweDAwMDAwMDIwLAotCTB4MDQwMDEwMDQsIDB4ODAxMDIwMDAsIDB4ODAwMDAwNDAsIDB4MDQwMWY3ZmIsCi0JMHg0MDA0MTgwMCwgMHg4MDEwMjFjMCwgMHgwNDAwMDAwNSwgMHg4MjBjMWM4MCwKLQkweDAwMDAwMDIwLCAweDgwMTAyMDQwLCAweDA0MDIwN2ZkLCAweDQyMDAyMDAwLAotCTB4MDAwMDAwMDEsIDB4ODAwYzE5YzAsIDB4MDQwMDAwMDQsIDB4ODAxMDIwYzIsCi0JMHg4MDBjMTg0MCwgMHgwNDAyMDdmZSwgMHg4MDA4M2MwMCwgMHg4M2NjMmMwMCwKLQkweDAwMDAwMDA3LCAweDgwMTQyYzAwLCAweDUwMTQwMDAwLCAweDgwMTAyZDAwLAotCTB4MDQwMjAwMTIsIDB4ODAxMDA1NDAsIDB4NDQwMDM4MDAsIDB4ODIwNDI0MDAsCi0JMHgwMDEwMjEwZSwgMHg1MDEwMjgwMCwgMHg4MjE0MmQwMCwgMHgwMDAwMDBmZiwKLQkweDQ4MTc1MDEwLCAweDRjMDQwMDAwLCAweDQwMTQwODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDE1ZWIsIDB4NWMwMDA4MDAsIDB4NTlhODAwMTUsIDB4ODQwMDA1NDAsCi0JMHg0ODAzNTAxNSwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NiwKLQkweDQyMDAxMDAwLCAweDAwMDA4MDE3LCAweDU5YTgxODRlLCAweDAyMDFmODAwLAotCTB4MDAxMGFhNGYsIDB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsIDB4MWMwMWYwMDAsCi0JMHg0ODA3Yzg1NiwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg4M2NjYTQwMCwKLQkweDAwMDAwMDA3LCAweDQyMDBhODAwLCAweDAwMTBiZTIxLCAweDAyMDFmMDAwLAotCTB4MDAxMGFiMjgsIDB4NDgwN2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDZlZGUsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDBmNywgMHgwNDAxZjhkZSwgMHg0OTdiMjgwNCwKLQkweDQ5N2IyODA1LCAweDQ5N2IyODFjLCAweDQ5N2IyODFkLCAweDQyMDJkODAwLAotCTB4MDAwMDAwMDEsIDB4NDIwMDYwMDAsIDB4YmY3ZmZmZmYsIDB4NDIwMDY4MDAsCi0JMHgwMDAxODAwMCwgMHgwNDAxZjk1MCwgMHg0MjAwNjAwMCwgMHhmZmZlZmZmZiwKLQkweDQxNzg2ODAwLCAweDA0MDFmOTRjLCAweDQ5N2I1MDRlLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMmQsIDB4NDIwMDEwMDAsIDB4MDAxMDQxYmMsIDB4MDIwMWYwMDAsCi0JMHgwMDEwNWY2OSwgMHg0ODA3Yzg1NiwgMHgwNDAxZmZlMywgMHg0OTdiNTAxNCwKLQkweDQ5N2I1MDE2LCAweDFjMDFmMDAwLCAweDQ4MDdjODU2LCAweDU5YTgwMDA1LAotCTB4OGMwMDA1MDYsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsIDB4NDIwMDYwMDAsCi0JMHhmZmZmZmZmZiwgMHg0MjAwNjgwMCwgMHgwMDAwMDAyOCwgMHgwNDAxZjEzNiwKLQkweDQ4MDdjODU2LCAweDA0MDFmZmMyLCAweDAyMDFmODAwLCAweDAwMTA2YzU1LAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZlMjEsIDB4NWMwM2UwMDAsCi0JMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDBhLAotCTB4NDIwMDYwMDAsIDB4ZmZmZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDAyMDAwMDAsCi0JMHgwNDAxZjkyMSwgMHg0MjAwNjAwMCwgMHhmZmRmZmZmZiwgMHg0MTc4NjgwMCwKLQkweDA0MDFmOTFkLCAweDQ5N2I1MDE0LCAweDQyMDAwODAwLCAweDAwMDAwMGY3LAotCTB4MDQwMWY4OWMsIDB4NTljNDAwYTMsIDB4ODIwMDA1MDAsIDB4YmYyMGJmZmYsCi0JMHg4MjAwMDU0MCwgMHgwMDAxYzAwMCwgMHg0ODAzODhhMywgMHg4NDAwMDUyMCwKLQkweDQ4MDM4OGEzLCAweDFjMDFmMDAwLCAweDQ5N2I1MDE2LCAweDU5YjQwMGY1LAorCTB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsIDB4MDAxMGI2M2QsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHg1OWE4MDAxNSwgMHg4NDAwMDU0NCwgMHg0ODAzNTAxNSwKKwkweDRhMDM1MDE0LCAweDAwMDAwMDEyLCAweDA0MDFmODA0LCAweDA0MDFmMDAyLAorCTB4MDQwMWZhNGIsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGEwMzUwMTQsCisJMHgwMDAwMDAxMywgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwgMHg0MjAwYTgwMCwKKwkweDAwMTBiMzUwLCAweDQyMDBiMDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLAorCTB4MDAxMGE5M2UsIDB4NDIwMGE4MDAsIDB4MDAxMGIzNTAsIDB4NDYwMGE4MDAsCisJMHgxMTAzMDAwMCwgMHgwNDAxZmEzZiwgMHgwNDAyMDAxMywgMHg1OWE4MDAxNSwKKwkweDhjMDAwNTAwLCAweDA0MDIwMDEwLCAweDU5YTgwODEwLCAweDgyMDQwNTgwLAorCTB4MDBmZmZmZmYsIDB4MDQwMDAwMGMsIDB4ODIwNDBkMDAsIDB4MDAwMDAwZmYsCisJMHg4MjA0MDQwMCwgMHgwMDEwMWViNSwgMHg1MDAwMDgwMCwgMHg4MDA0MDkxMCwKKwkweDQyMDAxMDAwLCAweDAwMDAwMDA0LCAweDA0MDFmOWMwLCAweDA0MDAwMDAyLAorCTB4MDQwMWZiMTEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWYyNWYsCisJMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAyMCwgMHg0ODAzYzg1NywKKwkweDQyMDAxMDAwLCAweDAwMTAzZjYyLCAweDAyMDFmODAwLCAweDAwMTA1Y2M5LAorCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMjAwMTYsCisJMHg1OWNjMTAwNiwgMHg4MjA4MTU4MCwgMHgxMTA0MDAwMCwgMHgwNDAyMDAxMiwKKwkweDU5Y2MxMDA3LCAweDhjMDgxNTNlLCAweDA0MDAwMDBiLCAweDU5YTgwMDE1LAorCTB4OGMwMDA1MDQsIDB4MDQwMjAwMDgsIDB4NDIwMDAwMDAsIDB4MDAxMGI2M2QsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg1OWE4MDAxNSwgMHg4NDAwMDU0NCwKKwkweDQ4MDM1MDE1LCAweDRhMDM1MDE0LCAweDAwMDAwMDE0LCAweDA0MDFmODA0LAorCTB4MDQwMWYwMDIsIDB4MDQwMWZhMDIsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg0YTAzNTAxNCwgMHgwMDAwMDAxNSwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwKKwkweDQyMDBhODAwLCAweDAwMTBiMzUwLCAweDQyMDBiMDAwLCAweDAwMDAwMDA1LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4NDIwMGE4MDAsIDB4MDAxMGIzNTAsCisJMHg0NjAwYTgwMCwgMHgxMTA0MDAwMCwgMHgwNDAxZjlmNiwgMHgwNDAyMDAyMCwKKwkweDU5YTgwMDE1LCAweDhjMDAwNTAwLCAweDA0MDIwMDFkLCAweDU5OWMwMDE3LAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwMWEsIDB4NTk5YzE0MDIsIDB4ODIwODA0ODAsCisJMHgwMDAwMDA3ZiwgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHg0YzA4MDAwMCwKKwkweDgyMDgxNDAwLCAweDAwMTAxZWI1LCAweDUwMDgxMDAwLCAweDgyMDgxNTAwLAorCTB4MDAwMDAwZmYsIDB4NDgwYjUwMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjlhZiwgMHg1YzAwMDgwMCwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDA0LCAweDA0MDFmOTZkLCAweDA0MDAwMDA1LCAweDAyMDFmODAwLAorCTB4MDAxMDM4ZDgsIDB4MDIwMjA4MDAsIDB4MDAxMDE2NjgsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNSwgMHgwNDAxZjIwOSwgMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwKKwkweDA0MDAwMDNmLCAweDQ4MDNjODU3LCAweDQyMDAxMDAwLCAweDAwMTAzZjYyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVjYzksIDB4NTlhODAwMTYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAxNCwgMHgwNDAyMDAzNSwgMHg1OWNjMTAwNiwgMHg4MjA4MDUwMCwKKwkweDExMDUwMDAwLCAweDgyMDAwNTgwLCAweDExMDUwMDAwLCAweDA0MDIwMDJmLAorCTB4OGMwODE1MTAsIDB4MDQwMDAwMTAsIDB4MDQwMWZiMWYsIDB4NTljYzEwMDcsCisJMHg4YzA4MTUzZSwgMHgwNDAwMDAwYiwgMHg1OWE4MDAxNSwgMHg4YzAwMDUwNCwKKwkweDA0MDIwMDA4LCAweDQyMDAwMDAwLCAweDAwMTBiNjNkLCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4NTlhODAwMTUsIDB4ODQwMDA1NDQsIDB4NDgwMzUwMTUsCisJMHgwNDAxZjAxMywgMHg1OWNjMTAwNywgMHg4YzA4MTUzZSwgMHgwNDAwMDAwYiwKKwkweDU5YTgwMDE1LCAweDhjMDAwNTA0LCAweDA0MDIwMDA4LCAweDQyMDAwMDAwLAorCTB4MDAxMGI2M2QsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NTlhODAwMTUsCisJMHg4NDAwMDU0NCwgMHg0ODAzNTAxNSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmYjAxLCAweDQ5N2I1MDEzLCAweDA0MDFmMDAzLCAweDRhMDM1MDEzLAorCTB4MDAwMDAwMDEsIDB4NTljYzEwMDcsIDB4OGMwODE1M2MsIDB4MDQwMDAwMDMsCisJMHg0YTAzNTAyNiwgMHgwMDAwMDAwOCwgMHg0YTAzNTAxNCwgMHgwMDAwMDAxNiwKKwkweDA0MDFmODA0LCAweDA0MDFmMDAyLCAweDA0MDFmOThkLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsIDB4NDIwMGE4MDAsCisJMHgwMDEwYjM1MCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhOTNlLCAweDRhMDM1MDE0LCAweDAwMDAwMDE3LCAweDU5YTgwMDEzLAorCTB4OGMwMDA1MDAsIDB4MDQwMDAwMDYsIDB4NDIwMDEwMDAsIDB4MDAxMGIzNTAsCisJMHg0NjAwMTAwMCwgMHgxMTA1MDEwMCwgMHgwNDAxZjAwMywgMHg0YTAzNTAxNCwKKwkweDAwMDAwMDFiLCAweDA0MDFmOTdiLCAweDA0MDIwMDBhLCAweDU5YTgwMDE1LAorCTB4OGMwMDA1MDAsIDB4MDQwMjAwMDcsIDB4MDQwMWY4OTYsIDB4MDQwMjAwMDUsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMTY2OCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDA0MDFmOWE0LCAweDRkM2MwMDAwLAorCTB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDk2NDAsCisJMHg1YzAyNzgwMCwgMHgxYzAxZjAwMCwgMHg1OWE4MDAxNiwgMHg4MDAwMDU0MCwKKwkweDA0MDAwMDE1LCAweDQ4MDNjODU3LCAweDQyMDAxMDAwLCAweDAwMTAzZjYyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVjYzksIDB4NTlhODAwMTYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDA4NCwgMHgwNDAyMDAwYiwgMHg1OWNjMTAwNiwgMHg4MjA4MTU4MCwKKwkweDExMDYwMDAwLCAweDA0MDIwMDA3LCAweDgwMDAwNTgwLCAweDA0MDFmYWI2LAorCTB4NGEwMzUwMTQsIDB4MDAwMDAwMTgsIDB4MDQwMWY4MDQsIDB4MDQwMWYwMDIsCisJMHgwNDAxZjk0YiwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNTAxNCwKKwkweDAwMDAwMDE5LCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDQyMDBhODAwLAorCTB4MDAxMGIzNTAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMjEsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTkzZSwgMHg0MjAwMzgwMCwgMHgwMDEwYjM1MSwgMHgwNDAxZjk0MSwKKwkweDA0MDIwMDE4LCAweDQwMWMyODAwLCAweDUwMTQxMDAwLCAweDgwMDgwMTMwLAorCTB4ODAwMDAwMDAsIDB4NDAwMDE4MDAsIDB4ODIwODE1MDAsIDB4MDBmZmZmZmYsCisJMHg4MDAwMDBmMCwgMHg4MDA4MDU0MCwgMHg0NDAwMjgwMCwgMHg1OWE4MDgxMCwKKwkweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDQwMGMxMDAwLCAweDgwMDgxMTA0LAorCTB4ODIwODI0MDAsIDB4MDAxMGIzNTEsIDB4NTAxMDEwMDAsIDB4ODIwYzA1MDAsCisJMHgwMDAwMDAwMywgMHgwYzAxZjgwNiwgMHg4MDA4MTU0MCwgMHg0NDA4MjAwMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDIxLCAweDA0MDFmMTVjLCAweDAwMTAzZTM3LAorCTB4MDAxMDNlM2MsIDB4MDAxMDNlNDEsIDB4MDAxMDNlNDYsIDB4ODAwNDA4ZjAsCisJMHg0MDA0MDAwMCwgMHg4MjA4MTUwMCwgMHgwMGZmZmZmZiwgMHgxYzAxZjAwMCwKKwkweDgwMDQwOGUwLCAweDQwMDQwMDAwLCAweDgyMDgxNTAwLCAweGZmMDBmZmZmLAorCTB4MWMwMWYwMDAsIDB4ODAwNDA4ZDAsIDB4NDAwNDAwMDAsIDB4ODIwODE1MDAsCisJMHhmZmZmMDBmZiwgMHgxYzAxZjAwMCwgMHg0MDA0MDAwMCwgMHg4MjA4MTUwMCwKKwkweGZmZmZmZjAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDE2LCAweDgwMDAwNTQwLAorCTB4MDQwMDAwMTYsIDB4NDgwM2M4NTcsIDB4NDIwMDEwMDAsIDB4MDAxMDNmNjIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNWNjOSwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDg0LCAweDA0MDIwMDBjLCAweDU5Y2MxMDA2LCAweDgyMDgxNTgwLAorCTB4MTEwNzAwMDAsIDB4MDQwMjAwMDgsIDB4NGEwMzUwMTMsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjhkMiwgMHg0YTAzNTAxNCwgMHgwMDAwMDAxYSwgMHgwNDAxZjgwNCwKKwkweDA0MDFmMDAyLCAweDA0MDFmOGYyLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWZhNTQsIDB4NGEwMzUwMTQsIDB4MDAwMDAwMWIsCisJMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwgMHg0MjAwYTgwMCwgMHgwMDEwYjM1MCwKKwkweDU5YTgyMDE2LCAweDQwMTAwMDAwLCAweDgwMDBiMTA0LCAweDQwNTgwODAwLAorCTB4NTQ1MGE4MDAsIDB4ODA1MGEwMDAsIDB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmYywgMHgwNDAxZjExOSwgMHgxYzAxZjAwMCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDQyMDAzMDAwLCAweDAwMDAwMDA0LCAweDQyMDA0MDAwLAorCTB4MDAxMGIzNTEsIDB4NTk5YzI4MTcsIDB4OGMxNDJkMTQsIDB4MDQwMjAwMWYsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwMywgMHg0MDIwMDAwMCwgMHg4MDA4MDQwMCwKKwkweDUwMDAwODAwLCAweDgyMDQyNTgwLCAweGZmZmZmZmZmLCAweDA0MDIwMDA1LAorCTB4ODAwODEwNDAsIDB4ODAxODMwNDAsIDB4MDQwMjA3ZjgsIDB4MDQwMWYwNWUsCisJMHg4MDA4MTFjMCwgMHgwNDAyMDAwNiwgMHg4MjA0MjU4MCwgMHgzZmZmZmZmZiwKKwkweDA0MDAwMDU4LCAweDgyMDQwZDQwLCAweGMwMDAwMDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMjAsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDEsIDB4NDAwNDIwMDAsCisJMHg4MDEwMjEwMiwgMHgwNDAyMTAyMSwgMHg4MDBjMThjMiwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2ZjLCAweDA0MDFmMDRiLCAweDQxNzgxMDAwLCAweDQwMjAwMDAwLAorCTB4ODAwODA0MDAsIDB4NTAwMDA4MDAsIDB4ODIwNDI1ODAsIDB4ZmZmZmZmZmYsCisJMHgwNDAyMDAwNSwgMHg4MDA4MTAwMCwgMHg4MDE4MzA0MCwgMHgwNDAyMDdmOCwKKwkweDA0MDFmMDQwLCAweDgwMDgxMWMwLCAweDA0MDIwMDAzLCAweDgyMDQwZDQwLAorCTB4YzAwMDAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsIDB4NDIwMDE4MDAsCisJMHg4MDAwMDAwMCwgMHg0MDA0MjAwMCwgMHg4MDEwMjBjMiwgMHgwNDAyMTAwNywKKwkweDgwMGMxOTAyLCAweDgwNThiMDAwLCAweDgyNTgwNDgwLCAweDAwMDAwMDIxLAorCTB4MDQwMDE3ZmEsIDB4MDQwMWYwMmYsIDB4NDAyMDAwMDAsIDB4ODAwODI0MDAsCisJMHg1MDEwMDAwMCwgMHg4MDBjMDU0MCwgMHg0NDAwMjAwMCwgMHg1OWE4MDAxNSwKKwkweDg0MDAwNTQwLCAweDQ4MDM1MDE1LCAweDQwNTgwMDAwLCAweDQyMDAyODAwLAorCTB4MDAwMDAwMjAsIDB4ODAxNDJjODAsIDB4NDAwODAwMDAsIDB4NDIwMDM4MDAsCisJMHgwMDAwMDAwMywgMHg4MDFjMDQ4MCwgMHg4MDAwMDBjYSwgMHg4MDE0MmQ0MCwKKwkweDgyMTQ0YzAwLCAweDAwMTAxZWI1LCAweDUwMjQyODAwLCAweDgyMTQyZDAwLAorCTB4MDAwMDAwZmYsIDB4NDgxNzUwMTAsIDB4NGMwNDAwMDAsIDB4NDAxNDA4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTY1NSwgMHg1YzAwMDgwMCwgMHg0MDAwMTgwMCwKKwkweDUwMGMwMDAwLCAweDgwMTAwNTQwLCAweDQ0MDAxODAwLCAweDU5YTgwMDE1LAorCTB4ODQwMDA1NDAsIDB4NDgwMzUwMTUsIDB4NDIwMGE4MDAsIDB4MDAxMGIzNTEsCisJMHg0MDIwYTAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhOTNlLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLAorCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTcsIDB4NDgwYmM4NTcsCisJMHg0MDA4YjAwMCwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNywgMHg0MjAwYTgwMCwKKwkweDAwMTBiMzUxLCAweDQwNTQxMDAwLCAweDAyMDFmODAwLCAweDAwMTBhOTNlLAorCTB4NDAwNDE4MDAsIDB4NDE3ODIwMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDMsCisJMHg4MjBjMWM4MCwgMHgwMDAwMDAyMCwgMHgwNDAwMTAwNCwgMHg4MDEwMjAwMCwKKwkweDgwMDAwMDQwLCAweDA0MDFmN2ZiLCAweDQwMDQxODAwLCAweDgwMTAyMWMwLAorCTB4MDQwMDAwMDUsIDB4ODIwYzFjODAsIDB4MDAwMDAwMjAsIDB4ODAxMDIwNDAsCisJMHgwNDAyMDdmZCwgMHg0MjAwMjAwMCwgMHgwMDAwMDAwMSwgMHg4MDBjMTljMCwKKwkweDA0MDAwMDA0LCAweDgwMTAyMGMyLCAweDgwMGMxODQwLCAweDA0MDIwN2ZlLAorCTB4ODAwODNjMDAsIDB4ODNjYzJjMDAsIDB4MDAwMDAwMDcsIDB4ODAxNDJjMDAsCisJMHg1MDE0MDAwMCwgMHg4MDEwMmQwMCwgMHgwNDAyMDAxMiwgMHg4MDEwMDU0MCwKKwkweDQ0MDAzODAwLCAweDgyMDQyNDAwLCAweDAwMTAxZWI1LCAweDUwMTAyODAwLAorCTB4ODIxNDJkMDAsIDB4MDAwMDAwZmYsIDB4NDgxNzUwMTAsIDB4NGMwNDAwMDAsCisJMHg0MDE0MDgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTY1NSwgMHg1YzAwMDgwMCwKKwkweDU5YTgwMDE1LCAweDg0MDAwNTQwLCAweDQ4MDM1MDE1LCAweDgwMDAwNTgwLAorCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsIDB4NDIwMDEwMDAsIDB4MDAwMDgwMTcsCisJMHg1OWE4MTg0ZSwgMHgwMjAxZjgwMCwgMHgwMDEwYTg3NiwgMHgwMjAxZjgwMCwKKwkweDAwMTAzODU3LCAweDFjMDFmMDAwLCAweDQ4MDdjODU2LCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMjAsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDcsIDB4NDIwMGE4MDAsCisJMHgwMDEwYmMyMCwgMHgwMjAxZjAwMCwgMHgwMDEwYTk0ZiwgMHg0ODA3Yzg1NiwKKwkweDAyMDFmODAwLCAweDAwMTA2YzMyLCAweDQyMDAwODAwLCAweDAwMDAwMGY3LAorCTB4MDQwMWY4ZjQsIDB4NDk3YjI4MDQsIDB4NDk3YjI4MDUsIDB4NDk3YjI4MWMsCisJMHg0OTdiMjgxZCwgMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwgMHg0MjAwNjAwMCwKKwkweGJmN2ZmZmZmLCAweDQyMDA2ODAwLCAweDAwMDE4MDAwLCAweDA0MDFmOTY2LAorCTB4NDIwMDYwMDAsIDB4ZmZmZWZmZmYsIDB4NDE3ODY4MDAsIDB4MDQwMWY5NjIsCisJMHg0OTdiNTA0ZSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAyZCwgMHg0MjAwMTAwMCwKKwkweDAwMTAzZmU0LCAweDAyMDFmMDAwLCAweDAwMTA1Y2EyLCAweDQ4MDdjODU2LAorCTB4MDQwMWZmZTMsIDB4NDk3YjUwMTQsIDB4NDk3YjUwMTYsIDB4MWMwMWYwMDAsCisJMHg0ODA3Yzg1NiwgMHg1OWE4MDAwNSwgMHg4YzAwMDUwNiwgMHgxYzAxZjAwMCwKKwkweDQ4MDdjODU2LCAweDQyMDA2MDAwLCAweGZmZmZmZmZmLCAweDQyMDA2ODAwLAorCTB4MDAwMDAwMjgsIDB4MDQwMWYxNGMsIDB4NDgwN2M4NTYsIDB4MDQwMWZmYzIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2YjcxLCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2OTgyLAorCTB4NTljNDAwYTQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMiwgMHgwNDAyMDAwYSwgMHg0MjAwNjAwMCwgMHhmZmZmZmZmZiwKKwkweDQyMDA2ODAwLCAweDAwMjAwMDAwLCAweDA0MDFmOTM3LCAweDQyMDA2MDAwLAorCTB4ZmZkZmZmZmYsIDB4NDE3ODY4MDAsIDB4MDQwMWY5MzMsIDB4NDk3YjUwMTQsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDBmNywgMHgwNDAxZjhiMiwgMHg1OWM0MDBhMywKKwkweDgyMDAwNTAwLCAweGJmMjBiZmZmLCAweDgyMDAwNTQwLCAweDAwMDFjMDAwLAorCTB4NDgwMzg4YTMsIDB4ODQwMDA1MjAsIDB4NDgwMzg4YTMsIDB4NDk3YjUwNGUsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAyZCwgMHg0MjAwMTAwMCwgMHgwMDEwM2ZlNCwKKwkweDAyMDFmMDAwLCAweDAwMTA1Y2EyLCAweDQ5N2I1MDE2LCAweDU5YjQwMGY1LAogCTB4OGMwMDA1MDAsIDB4MDQwMjAwMDQsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCiAJMHg0ODAzNjhmNSwgMHg4MDA0MDBjNCwgMHg4MjAwMDQwMCwgMHgwMDAwMjAwMCwKIAkweDQ4MDM5MTBhLCAweDU5YjQwMGY2LCAweDgyMDAwNTAwLCAweDAwMDAwMDE4LAotCTB4MDQwMjA3ZmQsIDB4NGEwMzY4ZjAsIDB4MDAxMGI1NGIsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjU1MiwgMHg0ODAzNjhmMSwgMHg4MjA0MDQwMCwgMHgwMDAwZGMwMCwKKwkweDA0MDIwN2ZkLCAweDRhMDM2OGYwLCAweDAwMTBiMzQ5LCAweDQyMDAwMDAwLAorCTB4MDAxMGIzNTAsIDB4NGMwNDAwMDAsIDB4NTAwMDA4MDAsIDB4ODIwNDBkODAsCisJMHgxMTAxMDAwMCwgMHgwNDAwMDAwMywgMHg1MDAwMDgwMCwgMHg0ODA3Yzg1NywKKwkweDVjMDAwODAwLCAweDQ4MDM2OGYxLCAweDgyMDQwNDAwLCAweDAwMDBkYzAwLAogCTB4NDgwMzY4ZjMsIDB4NTljNDAwYTQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsCiAJMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwgMHgwNDAyMDAxNywgMHg0YzVjMDAwMCwKIAkweDRjNjAwMDAwLCAweDU5YzRiODA1LCAweDhjNWNiZDNhLCAweDA0MDIwMDA1LAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MTgsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHg0YTAzODgwNSwgMHgwMjAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTlmZSwKLQkweDQwMDBjMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOTYzLCAweDQyMDJkODAwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2MTYsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg0YTAzODgwNSwgMHgwMjAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWE1OSwKKwkweDQwMDBjMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOWQwLCAweDQyMDJkODAwLAogCTB4MDAwMDAwMDEsIDB4NDk3YjUwMTQsIDB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsCiAJMHgxYzAxZjAwMCwgMHg1OWM4MDEwYiwgMHg4YzAwMDUwMiwgMHgwNDAwMDdlMiwKIAkweDU5YzQwOGE0LCAweDgyMDQwZDAwLCAweDAwMDAwMDBmLCAweDgyMDQwZDgwLApAQCAtNDI0NSw1MiArNDEyNyw1NCBAQAogCTB4MDAwMDIwMDAsIDB4MDQwMWYwMDQsIDB4NTlhODA4MTIsIDB4ODIwNDBkNDAsCiAJMHgwMDAwMTAwMCwgMHg0ODA3NTA0ZSwgMHg1OWE4MDg0YSwgMHg4MDA0MDljMCwKIAkweDA0MDIwMDA3LCAweDQyMDAwODAwLCAweDAwMDAwN2QwLCAweDQyMDAxMDAwLAotCTB4MDAxMDQxNDgsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNmUsIDB4MWMwMWYwMDAsCi0JMHg0ODA3Yzg1NiwgMHgwNDAxZmY0ZSwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2ZTIxLCAweDVjMDNlMDAwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4NTljNDAwYTQsIDB4ODIwMDA1MDAsCisJMHgwMDEwM2Y2MiwgMHgwMjAxZjgwMCwgMHgwMDEwNWRhNywgMHgxYzAxZjAwMCwKKwkweDQ4MDdjODU2LCAweDA0MDFmZjQwLCAweDAyMDFmODAwLCAweDAwMTA2OThjLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZiNzEsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHg1OWM0MDBhNCwgMHg4MjAwMDUwMCwKIAkweDAwMDAwMDBmLCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDBhLAogCTB4NDIwMDYwMDAsIDB4ZmZmZmZmZmYsIDB4NDIwMDY4MDAsIDB4MDAyMDAwMDAsCi0JMHgwNDAxZjhhZCwgMHg0MjAwNjAwMCwgMHhmZmRmZmZmZiwgMHg0MTc4NjgwMCwKLQkweDA0MDFmOGE5LCAweDAyMDFmODAwLCAweDAwMTA1MTQxLCAweDA0MDAwMDE0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDUxNTEsIDB4MDQwMjAwMTEsIDB4NGEwMzUwMzIsCi0JMHgwMDAwYWFhYSwgMHg0YzA0MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTYyYSwKKwkweDA0MDFmOGI1LCAweDQyMDA2MDAwLCAweGZmZGZmZmZmLCAweDQxNzg2ODAwLAorCTB4MDQwMWY4YjEsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMTMsIDB4MDQwMDAwMTQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGUyMywgMHgwNDAyMDAxMSwgMHg0YTAzNTAzMiwKKwkweDAwMDBhYWFhLCAweDRjMDQwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNjk0LAogCTB4NTlhODAwMmEsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODAwNDA1NDAsCiAJMHg0ODAzNTAyYSwgMHg1YzAwMDgwMCwgMHg0YTAzNTAzMywgMHgwMDAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA1MGEyLCAweDA0MDFmMDA4LCAweDRhMDM1MDRjLAorCTB4MDIwMWY4MDAsIDB4MDAxMDRkNzYsIDB4MDQwMWYwMDgsIDB4NGEwMzUwNGMsCiAJMHgwMDAwMDAwNSwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNTkwLCAweDA0MDFmZjJjLCAweDFjMDFmMDAwLCAweDA0MDFmODA1LAotCTB4NDIwMDYwMDAsIDB4YmY3ZjdmZmYsIDB4NDE3ODY4MDAsIDB4MDQwMWYwODYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTE1MSwgMHgwNDAyMDAwNSwgMHg1OWM0MDAwNiwKLQkweDgyMDAwNTQwLCAweDAwMDAwMGYwLCAweDQ4MDM4ODA2LCAweDFjMDFmMDAwLAorCTB4MDAxMDE1ZmEsIDB4MDQwMWZmMWUsIDB4MWMwMWYwMDAsIDB4MDQwMWY4MDksCisJMHg0MjAwNjAwMCwgMHhiZjdmN2ZmZiwgMHg0MTc4NjgwMCwgMHgwNDAxZjA4ZSwKKwkweDQyMDA2MDAwLCAweGJmN2Y3ZmZmLCAweDQxNzg2ODAwLCAweDA0MDFmMDhhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDRlMjMsIDB4MDQwMjAwMDksIDB4NTljNDAwMDYsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDBmMCwgMHg0ODAzODgwNiwgMHg0MjAwNjAwMCwKKwkweGJmZmZmZmZmLCAweDQxNzg2ODAwLCAweDA0MDFmODdmLCAweDFjMDFmMDAwLAogCTB4ODAwNDA4ZDAsIDB4NTlhODAwMTUsIDB4OGMwMDA1MDYsIDB4MDQwMDAwMDYsCiAJMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MDA0MDU0MCwKIAkweDA0MDFmMDAzLCAweDgyMDQwNTQwLCAweDAwMDAwMGY3LCAweDQ4MDM4OGE3LAotCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsIDB4NDIwMDAwMDAsIDB4MDAxMGI4M2IsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0MjAwMzAwMCwgMHgwMDAwMDAwNSwKKwkweDFjMDFmMDAwLCAweDQ4MDdjODU2LCAweDQyMDAwMDAwLCAweDAwMTBiNjM5LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDUsCiAJMHg0ZDNjMDAwMCwgMHg0YzE4MDAwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwZCwKIAkweDQyMDI3ODAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDM4LCAweDQ4MDdjODU2LAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4NmIsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjY2YSwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwKIAkweDQyMDAzMDAwLCAweDAwMDAwMDAwLCAweDRkM2MwMDAwLCAweDRjMTgwMDAwLAogCTB4NDIwMDMwMDAsIDB4MDAwMDAwMGYsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDIsCi0JMHgwNDAxZjAyYSwgMHg0ODA3Yzg1NiwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2YSwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQyMDAzMDAwLCAweDAwMDAwMDAzLAorCTB4MDQwMWYwMmEsIDB4NDgwN2M4NTYsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NjksCisJMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwMywKIAkweDRkM2MwMDAwLCAweDRjMTgwMDAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDBlLAogCTB4NDIwMjc4MDAsIDB4MDAwMDAyMDIsIDB4MDQwMWYwMWMsIDB4NDgwN2M4NTYsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjg2OSwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKKwkweDQyMDAwMDAwLCAweDAwMTBiNjY4LCAweDAyMDFmODAwLCAweDAwMTBhODZlLAogCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDQsIDB4NGQzYzAwMDAsIDB4NGMxODAwMDAsCiAJMHg0MjAwMzAwMCwgMHgwMDAwMDAxMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDIwMiwKLQkweDA0MDFmMDBlLCAweDQ4MDdjODU2LCAweDQyMDAwMDAwLCAweDAwMTBiODNlLAotCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAwZSwgMHg0ODA3Yzg1NiwgMHg0MjAwMDAwMCwgMHgwMDEwYjYzYywKKwkweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDQyMDAzMDAwLCAweDAwMDAwMDAxLAogCTB4NGQzYzAwMDAsIDB4NGMxODAwMDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMGMsCiAJMHg0MjAyNzgwMCwgMHgwMDAwMDIwMiwgMHg0MjAwMTgwMCwgMHgwMDAwZmZmZiwKLQkweDQyMDAyMDAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTAzYWFlLAotCTB4NWMwMDMwMDAsIDB4NGQ0MDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NWQsCi0JMHg0MjAyODAwMCwgMHgwMDAwMDAyYSwgMHgwMjAxZjgwMCwgMHgwMDEwMWZlNSwKKwkweDQyMDAyMDAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTAzOGM3LAorCTB4NWMwMDMwMDAsIDB4NGQ0MDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE3ODQsCisJMHg0MjAyODAwMCwgMHgwMDAwMDAyYSwgMHgwMjAxZjgwMCwgMHgwMDEwMWQ5MCwKIAkweDVjMDI4MDAwLCAweDVjMDI3ODAwLCAweDFjMDFmMDAwLCAweDQ4MDdjODU2LAotCTB4MDQwMTEwMDAsIDB4NGEwM2M4NDAsIDB4MDAxMGI1NGIsIDB4NGEwM2M4NDIsCisJMHgwNDAxMTAwMCwgMHg0YTAzYzg0MCwgMHgwMDEwYjM0OSwgMHg0YTAzYzg0MiwKIAkweDAwMDAwMDQwLCAweDQwMDAwMDAwLCAweDA0MDExN2ZmLCAweDQyMDA3ODAwLAotCTB4MDAxMGI1NGIsIDB4NDYwMDc4MDAsIDB4MDAwMDAwMTEsIDB4ODAzYzc4MDAsCisJMHgwMDEwYjM0OSwgMHg0NjAwNzgwMCwgMHgwMDAwMDAxMSwgMHg4MDNjNzgwMCwKIAkweDRhMDA3ODAwLCAweDIyMDAwMGVmLCAweDRhMDA3ODAxLCAweDAwMDAwMGVmLAogCTB4NGEwMDc4MDIsIDB4MDEzODAwMDAsIDB4NGEwMDc4MDMsIDB4MDAwMDAwMDAsCiAJMHg0YTAwNzgwNCwgMHhmZmZmZmZmZiwgMHg0YTAwNzgwNSwgMHgwMDAwMDAwMCwKQEAgLTQzMDQsMjcgKzQxODgsMjcgQEAKIAkweDQyMDAwMDAwLCAweDAwMDAwMDA2LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZmLAogCTB4MDQwMWY3ZjQsIDB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsCiAJMHg1OWM0YjgwNSwgMHg0ODVmYzg1NiwgMHg4YzVjYmQzYSwgMHgwNDAyMDAwNSwKLQkweDQyMDAwMDAwLCAweDAwMTBiODE4LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4NGEwMzg4MDUsIDB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5ZmUsCi0JMHg0MDAwYzAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTk2MywgMHg0YTAzODgwNSwKKwkweDQyMDAwMDAwLCAweDAwMTBiNjE2LCAweDAyMDFmODAwLCAweDAwMTBhODZlLAorCTB4NGEwMzg4MDUsIDB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDFhNTksCisJMHg0MDAwYzAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTlkMCwgMHg0YTAzODgwNSwKIAkweDA0MDAwMDAwLCAweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLAotCTB4NDk3YTZhMDAsIDB4NDkzN2M4NTcsIDB4NGEwMjZjMDAsIDB4MDAwMDA3MDcsCi0JMHg0OTdhNjgwMSwgMHg0OTdhNjgwOCwgMHg0OTdhNjgwOSwgMHg0OTdhNjgwNiwKLQkweDQ5N2E2ODA3LCAweDQ5N2E2YzBiLCAweDQ5N2E2ODBjLCAweDAyMDFmODAwLAotCTB4MDAxMDNiMjUsIDB4MDQwMjAwMDYsIDB4NTkzNDA4MGYsIDB4NTkzNDAwMTAsCi0JMHg4MDA0MDU0MCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg0YTAyNmEwNCwKLQkweDAwMDAwMTAwLCAweDQ5N2E2YTAzLCAweDU5MzQwNDAyLCAweDgyMDAwNTAwLAotCTB4MDAwMDAwZmYsIDB4NDgwMjZjMDIsIDB4NDk3YTZjMDQsIDB4NDk3YTZhMDUsCi0JMHg0OTdhNmMwNSwgMHg0OTdhNjgxMSwgMHg0ZDJjMDAwMCwgMHg1OTM0MDAwZCwKLQkweDQ5NDY2YzAzLCAweDgwMDI1ZDQwLCAweDA0MDAwMDA0LCAweDAyMDFmODAwLAotCTB4MDAxMDA3ZmQsIDB4NDk3YTY4MGQsIDB4NWMwMjU4MDAsIDB4NTk5YzA0MDEsCi0JMHg0ODAyNmEwYiwgMHg1OTljMDIwOCwgMHg0ODAyNmMxMiwgMHg0OTdhNjgwYSwKLQkweDAyMDFmMDAwLCAweDAwMTA0YzYyLCAweDQyMDAwMDAwLCAweDAwMDAwMDA1LAotCTB4ODAwMDBkODAsIDB4MDQwMWYwMmQsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMDksCisJMHg0OTdhNmEwMCwgMHg0YTAyNmMwMCwgMHgwMDAwMDcwNywgMHg0OTdhNjgwMSwKKwkweDQ5N2E2ODA4LCAweDQ5N2E2ODA5LCAweDQ5N2E2ODA2LCAweDQ5N2E2ODA3LAorCTB4NDk3YTZjMGIsIDB4NDk3YTY4MGMsIDB4MDIwMWY4MDAsIDB4MDAxMDM5M2UsCisJMHgwNDAyMDAwNiwgMHg1OTM0MDgwZiwgMHg1OTM0MDAxMCwgMHg4MDA0MDU0MCwKKwkweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDRhMDI2YTA0LCAweDAwMDAwMTAwLAorCTB4NDk3YTZhMDMsIDB4NTkzNDA0MDIsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg0ODAyNmMwMiwgMHg0OTdhNmMwNCwgMHg0OTdhNmEwNSwgMHg0OTdhNmMwNSwKKwkweDQ5N2E2ODExLCAweDRkMmMwMDAwLCAweDU5MzQwMDBkLCAweDQ5NDY2YzAzLAorCTB4ODAwMjVkNDAsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDA4NDMsCisJMHg0OTdhNjgwZCwgMHg1YzAyNTgwMCwgMHg1OTljMDQwMSwgMHg0ODAyNmEwYiwKKwkweDU5OWMwMjA4LCAweDQ4MDI2YzEyLCAweDRhMDI2ODBhLCAweDAwMDA2MDAwLAorCTB4MDIwMWYwMDAsIDB4MDAxMDRhY2YsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDUsCisJMHg4MDAwMGQ4MCwgMHgwNDAxZjAyZCwgMHgwMjAxZjgwMCwgMHgwMDEwNDg1OCwKIAkweDA0MDIwMDE3LCAweDU5YTgwMDI2LCAweDhjMDAwNTBhLCAweDA0MDIwMDEwLAogCTB4NTkzNDAyMTIsIDB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsIDB4NDgwM2M4NTcsCiAJMHgwNDAwMDAwYiwgMHg1OTM0MGEwMCwgMHg4YzA0MGQxZSwgMHgwMjAwMDAwMCwKLQkweDAwMDIwMWM0LCAweDQyMDAwMDAwLCAweDAwMDAwMDI5LCAweDQyMDAwODAwLAorCTB4MDAwMjAxZjgsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMjksIDB4NDIwMDA4MDAsCiAJMHgwMDAwMTAwMCwgMHg0OTJmYzg1NywgMHgwNDAxZjAxOCwgMHg0OTJmYzg1NywKIAkweDQyMDAwMDAwLCAweDAwMDAwMDI4LCAweDA0MDFmMDEyLCAweDU5YTgwODA1LAogCTB4OGMwNDBkMDIsIDB4MDQwMjAwMDMsIDB4OGMwNDBkMDAsIDB4MDQwMDAwMDQsCkBAIC00MzMzLDI1ICs0MjE3LDI1IEBACiAJMHg0OTJmYzg1NywgMHg0MjAwMDgwMCwgMHgwMDAwMTAwMCwgMHgwNDAxZjAwMywKIAkweDQ5MmZjODU3LCAweDgwMDAwZDgwLCAweDQ4MDNjODU3LCAweDgwMDI4NTQwLAogCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4NTlhODAwMDUsIDB4OGMwMDA1MDAsCi0JMHgwNDAyMDdlYywgMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAyMDdlNCwKKwkweDA0MDIwN2VjLCAweDAyMDFmODAwLCAweDAwMTA0ODM2LCAweDA0MDIwN2U0LAogCTB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsIDB4MDQwMDA3ZTEsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDFjNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDdlYiwgMHgwNDAwMDdiZiwKLQkweDAyMDFmMDAwLCAweDAwMDIwMWM4LCAweDU5MmMwMjA2LCAweDQ5MmZjODU3LAorCTB4MDAwMjAxZjgsIDB4MDIwMWY4MDAsIDB4MDAxMDQ2MzksIDB4MDQwMDA3YmYsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDFmYywgMHg1OTJjMDIwNiwgMHg0OTJmYzg1NywKIAkweDgyMDAwZDgwLCAweDAwMDAwN2ZmLCAweDA0MDIwMDA2LCAweDRhMDI1YzBhLAotCTB4MDAwMDAwMzAsIDB4NDIwMjY4MDAsIDB4MDAxMGI1MjQsIDB4MDQwMWYwMjEsCisJMHgwMDAwMDAzMCwgMHg0MjAyNjgwMCwgMHgwMDEwYjMyMCwgMHgwNDAxZjAyMSwKIAkweDgyMDAwYzgwLCAweDAwMDAwN2YwLCAweDA0MDIxMDQ2LCAweDgxYWMwNDAwLAogCTB4NTAwMDAwMDAsIDB4ODAwMjZkNDAsIDB4MDQwMDAwMzgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDhlMywgMHgwNDAyMDAzOCwgMHg1OTJjMDQwYSwgMHg4YzAwMDUwYSwKLQkweDA0MDIwMDE0LCAweDU5MmU2MDA5LCAweDgzMzAwNDgwLCAweDAwMTBkMWMwLAorCTB4MDAxMDQ3MzIsIDB4MDQwMjAwMzgsIDB4NTkyYzA0MGEsIDB4OGMwMDA1MGEsCisJMHgwNDAyMDAxNCwgMHg1OTJlNjAwOSwgMHg4MzMwMDQ4MCwgMHgwMDEwY2ZjMCwKIAkweDA0MDAxMDNiLCAweDQxNTgwMDAwLCAweDgxMzAwNDgwLCAweDA0MDIxMDM4LAogCTB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMjAwMzcsCiAJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg0OTdhNTgwMCwgMHg1OTMwMDAwOCwKIAkweDgwMDAwNTQwLCAweDA0MDIwMDE4LCAweDQ5MmU2MDA4LCAweDA0MDFmMDEwLAotCTB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsIDB4MDQwMDAwMTksIDB4NTkyYzAyMDYsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwNDAwMDAxOSwgMHg1OTJjMDIwNiwKIAkweDQ5MzY2MDA5LCAweDQ5MmU2MDA4LCAweDRhMDI2NDA2LCAweDAwMDAwMDA5LAogCTB4NDk3YTYwMTUsIDB4NDkzMjU4MDksIDB4ODIwMDBkODAsIDB4MDAwMDA3ZmYsCiAJMHgwNDAyMDAwMywgMHg0YTAyNjAxNSwgMHgwMDAwODAwMCwgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDQzLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDgwMDAwNTgwLAorCTB4MDAwMDAwNDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4ODAwMDA1ODAsCiAJMHgwNDAxZjAyMCwgMHg0MDAwMDgwMCwgMHg1ODA0MDAwMCwgMHg4MDAwMGQ0MCwKIAkweDA0MDIwN2ZkLCAweDQ5MmMwODAwLCAweDA0MDFmMDFhLCAweDQyMDAwMDAwLAogCTB4MDAwMDAwMmMsIDB4MDQwMWYwMTYsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMjgsCkBAIC00MzYyLDE5OCArNDI0NiwyMDcgQEAKIAkweDA0MDIwN2ZiLCAweDQyMDAwMDAwLCAweDAwMDAwMDA1LCAweDgwMDAwNTQwLAogCTB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsIDB4NTkyZThjMDYsIDB4ODM0NDBkODAsCiAJMHgwMDAwMDdmYywgMHgwNDAwMDAwNCwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDdmMCwKLQkweDA0MDIxMDE0LCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDExLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZjMsIDB4MDQwMjAwMTEsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDc1YSwgMHgwNDAwMDAxYywgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwKKwkweDA0MDIxMDE0LCAweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDIwMDExLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4NDIsIDB4MDQwMjAwMTEsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDg5MiwgMHgwNDAwMDAxYywgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwKIAkweDRhMDI2NDA2LCAweDAwMDAwMDBhLCAweDQyMDI3MDAwLCAweDAwMDAwMDQwLAotCTB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODAwMDA1ODAsIDB4MDQwMWYwMTEsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg4MDAwMDU4MCwgMHgwNDAxZjAxMSwKIAkweDQyMDAwMDAwLCAweDAwMDAwMDI4LCAweDA0MDFmMDBkLCAweDAyMDFmODAwLAotCTB4MDAxMDRhMDksIDB4MDQwMDA3ZmIsIDB4NTlhODA4MDUsIDB4ODIwNDBkMDAsCisJMHgwMDEwNDg1OCwgMHgwNDAwMDdmYiwgMHg1OWE4MDgwNSwgMHg4MjA0MGQwMCwKIAkweDAwMDAwMDAzLCAweDA0MDAwMDA0LCAweDQyMDAwMDAwLCAweDAwMDAwMDA0LAogCTB4MDQwMWYwMDMsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMjksIDB4ODAwMDA1NDAsCiAJMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAyYywgMHgwNDAxZjdmYywKIAkweDQ5MmZjODU3LCAweDU5MmU4YzA2LCAweDQ5NDdjODU3LCAweDgzNDQwYzgwLAotCTB4MDAwMDA4MDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMGEsIDB4MDQwMjExNzYsCisJMHgwMDAwMDgwMCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwYSwgMHgwNDAyMTE5YywKIAkweDU5MmM0MjA3LCAweDQ4MjNjODU3LCAweDgyMjAwNTAwLCAweDAwMDAwMDBmLAotCTB4MGMwMWYwMDEsIDB4MDAxMDQzZDUsIDB4MDAxMDQ0NWQsIDB4MDAxMDQ0YTksCi0JMHgwMDEwNDRiNCwgMHgwMDEwNDRiZiwgMHgwMDEwNDNkMSwgMHgwMDEwNDNkMSwKLQkweDAwMTA0M2QxLCAweDAwMTA0NGNmLCAweDAwMTA0NTEzLCAweDAwMTA0NTMwLAotCTB4MDAxMDQzZDEsIDB4MDAxMDQzZDEsIDB4MDAxMDQzZDEsIDB4MDAxMDQzZDEsCi0JMHgwMDEwNDNkMSwgMHg0ODAzYzg1NywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwYywKLQkweDA0MDFmMTVkLCAweDU5MmMxMDA4LCAweDgyMDgxNTAwLCAweDAwZmZmZmZmLAorCTB4MGMwMWYwMDEsIDB4MDAxMDQyMDUsIDB4MDAxMDQyOGQsIDB4MDAxMDQyZGQsCisJMHgwMDEwNDJlOCwgMHgwMDEwNDJmMywgMHgwMDEwNDIwMSwgMHgwMDEwNDIwMSwKKwkweDAwMTA0MjAxLCAweDAwMTA0MzAzLCAweDAwMTA0MzYxLCAweDAwMTA0Mzg2LAorCTB4MDAxMDQyMDEsIDB4MDAxMDQyMDEsIDB4MDAxMDQyMDEsIDB4MDAxMDQyMDEsCisJMHgwMDEwNDIwMSwgMHg0ODAzYzg1NywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwYywKKwkweDA0MDFmMTgzLCAweDU5MmMxMDA4LCAweDgyMDgxNTAwLCAweDAwZmZmZmZmLAogCTB4NTlhODAwMTAsIDB4ODAwODRkODAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMTAsCi0JMHgwNDAwMDE1NSwgMHgwMjAxZjgwMCwgMHgwMDEwNDkxOSwgMHgwNDAwMDAzNiwKKwkweDA0MDAwMTdiLCAweDAyMDFmODAwLCAweDAwMTA0NzY4LCAweDA0MDAwMDM2LAogCTB4NDgwM2M4NTcsIDB4ODIwMDRkODAsIDB4MDAwMDAwMWQsIDB4MDQwMjAwMWEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNTc1NSwgMHg1OTM0MDQwNSwgMHg0YzAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDVjMDAwMDAwLCAweDA0MDAwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDU0MzksIDB4NTkzNDA0MDUsIDB4NGMwMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwgMHg1YzAwMDAwMCwgMHgwNDAwMDAwNCwKIAkweDhjMjA0NTBhLCAweDA0MDAwMDI4LCAweDgwMDAwNTgwLCAweDQ0MDAyODAwLAogCTB4NTkzNDAwMDgsIDB4NDgwMDI4MDIsIDB4NTkzNDAwMDksIDB4NDgwMDI4MDEsCiAJMHg1OTM0MDAwNiwgMHg0ODAwMjgwNCwgMHg1OTM0MDAwNywgMHg0ODAwMjgwMywKLQkweDQyMDBiMDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA5NTVmLAotCTB4MDQwMWYxNjYsIDB4NDgwM2M4NTcsIDB4ODIwMDRkODAsIDB4MDAwMDAwMWEsCi0JMHgwNDAyMDAwMywgMHg0MDEwMTAwMCwgMHgwNDAxZjEzNiwgMHg0ODAzYzg1NywKKwkweDQyMDBiMDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA5MzI4LAorCTB4MDQwMWYxOGMsIDB4NDgwM2M4NTcsIDB4ODIwMDRkODAsIDB4MDAwMDAwMWEsCisJMHgwNDAyMDAwMywgMHg0MDEwMTAwMCwgMHgwNDAxZjE1YywgMHg0ODAzYzg1NywKIAkweDgyMDA0ZDgwLCAweDAwMDAwMDFiLCAweDA0MDIwMDAzLCAweDQwMTgxMDAwLAotCTB4MDQwMWYxMzAsIDB4NDgwM2M4NTcsIDB4ODIwMDRkODAsIDB4MDAwMDAwMWMsCi0JMHgwNDAwMDEzMSwgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxOSwgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDBhLCAweDA0MDAwMTIwLCAweDQyMDAwMDAwLCAweDAwMDAwMDBhLAotCTB4MDQwMjAxMzcsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsIDB4MDQwMDAwMWIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAwMDAxOCwgMHg1OTM0MDIxMiwKKwkweDA0MDFmMTU2LCAweDQ4MDNjODU3LCAweDgyMDA0ZDgwLCAweDAwMDAwMDFjLAorCTB4MDQwMDAxNTcsIDB4ODIwMDRkODAsIDB4MDAwMDAwMTksIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwYSwgMHgwNDAwMDE0NiwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwYSwKKwkweDA0MDIwMTVkLCAweDU5YTgwMDZmLCAweDhjMDAwNTAyLCAweDA0MDAwMDFiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4MzYsIDB4MDQwMDAwMTgsIDB4NTkzNDAyMTIsCiAJMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwKIAkweDA0MDIwMDBjLCAweDQyMDAxMDAwLCAweDAwMDAwMDA4LCAweDU5YTgwMDI2LAogCTB4OGMwMDA1MDYsIDB4MDQwMjAwMDksIDB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsCiAJMHgwMGZmMDAwMCwgMHg4MjAwMDU4MCwgMHgwMGZmMDAwMCwgMHgwNDAwMDAwNywKLQkweDAyMDFmODAwLCAweDAwMTA0YzZkLCAweDQyMDAwMDAwLCAweDAwMDAwMDFjLAotCTB4NDAxODEwMDAsIDB4MDQwMjAxMDcsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCi0JMHgwNDAwMDExMSwgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwgMHg0YTAyNjQwNiwKKwkweDAyMDFmODAwLCAweDAwMTA0YWRhLCAweDQyMDAwMDAwLCAweDAwMDAwMDFjLAorCTB4NDAxODEwMDAsIDB4MDQwMjAxMmQsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsCisJMHgwNDAwMDEzNywgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwgMHg0YTAyNjQwNiwKIAkweDAwMDAwMDAxLCAweDhjMjA0NTBhLCAweDA0MDAwMDA0LCAweDU5MmMwNDA0LAogCTB4ODQwMDA1NWMsIDB4NDgwMjVjMDQsIDB4NGMyMDAwMDAsIDB4NGQzYzAwMDAsCi0JMHg0MjAyNzgwMCwgMHgwMDAwMTAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywKKwkweDQyMDI3ODAwLCAweDAwMDAxODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLAogCTB4NWMwMjc4MDAsIDB4NWMwMDQwMDAsIDB4OGMyMDQ1MTIsIDB4MDQwMDAwMGIsCiAJMHg1OTljMDAxOCwgMHg4YzAwMDUxOCwgMHgwNDAwMDAwOCwgMHg1OTJjMDAwOSwKIAkweDgyMDAwNTAwLCAweDAwMDAwMzgwLCAweDU5MzQwODBhLCAweDgwMDQwZDQwLAotCTB4ODQwNDBkNTQsIDB4NDgwNjY4MGEsIDB4NDE3YTc4MDAsIDB4MDQwMWY5MTQsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwNDAxZjkxYiwgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDgwMDAwNTgwLAotCTB4MDQwMWYxMGEsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwZWMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDllZCwgMHgwNDAwMDAwOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OWU3LCAweDA0MDIwMGVjLCAweDQxN2E3ODAwLCAweDQxN2E2MDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDIwYTEsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsCi0JMHgwNDAwMDAxYiwgMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAwMDAxOCwKKwkweDg0MDQwZDU0LCAweDQ4MDY2ODBhLCAweDQxN2E3ODAwLCAweDA0MDFmOTNhLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDQwMWY5NDEsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg4MDAwMDU4MCwKKwkweDA0MDFmMTMwLCAweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDIwMTEyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4M2MsIDB4MDQwMDAwMGMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDgzNiwgMHgwNDAyMDExMiwgMHg0YzYwMDAwMCwgMHg0MTc4YzAwMCwKKwkweDQyMDI3ODAwLCAweDAwMDAxODAwLCAweDQxN2E2MDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDFlNDgsIDB4NWMwMGMwMDAsIDB4NTlhODAwNmYsIDB4OGMwMDA1MDIsCisJMHgwNDAwMDAxYiwgMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwgMHgwNDAwMDAxOCwKIAkweDU5MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDQyMDAxMDAwLAogCTB4MDAwMDAwMTAsIDB4MDQwMjAwMGMsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDgsCiAJMHg1OWE4MDAyNiwgMHg4YzAwMDUwNiwgMHgwNDAyMDAwOSwgMHg1OTM0MDAwMiwKIAkweDgyMDAwNTAwLCAweDAwZmYwMDAwLCAweDgyMDAwNTgwLCAweDAwZmYwMDAwLAotCTB4MDQwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDRjNmQsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAxYywgMHg0MDE4MTAwMCwgMHgwNDAyMDBiMiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzVhLCAweDA0MDAwMGJjLCAweDU5MzQwODBhLCAweDhjMjA0NTEyLAorCTB4MDQwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDRhZGEsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAxYywgMHg0MDE4MTAwMCwgMHgwNDAyMDBkNCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwODkyLCAweDA0MDAwMGRlLCAweDU5MzQwODBhLCAweDhjMjA0NTEyLAogCTB4MDQwMDAwMGMsIDB4NTk5YzAwMTgsIDB4OGMwMDA1MTgsIDB4MDQwMDAwMDksCiAJMHg1OTJjMDAwOSwgMHg4MjAwMDUwMCwgMHgwMDAwMDM4MCwgMHg4MjA0MTUwMCwKIAkweGZmZmZmYzdmLCAweDgwMDgwZDQwLCAweDg0MDQwZDU0LCAweDA0MDFmMDAyLAogCTB4ODQwNDBkMTQsIDB4NDgwNjY4MGEsIDB4NDkzNjYwMDksIDB4NDkyZTYwMDgsCi0JMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0MTdhNzgwMCwgMHgwNDAxZjhjOCwKLQkweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDA0MDFmOGNmLCAweDQyMDI3MDAwLAotCTB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODAwMDA1ODAsCi0JMHgwNDAxZjBiZSwgMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwgMHgwNDAyMDBhMCwKLQkweDAyMDFmODAwLCAweDAwMTA0OWZjLCAweDA0MDIwMGEzLCAweDAyMDFmODAwLAotCTB4MDAxMDk1MTcsIDB4MDQwMDAwOTQsIDB4ODAwMDA1ODAsIDB4MDQwMWYwYjMsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwgMHgwNDAyMDA5NSwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OWZjLCAweDA0MDIwMDk4LCAweDAyMDFmODAwLCAweDAwMTA5MGU2LAotCTB4MDQwMDAwODksIDB4ODAwMDA1ODAsIDB4MDQwMWYwYTgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDI0NSwgMHgwNDAyMDA4YSwgMHg4MzQ0NGQ4MCwgMHgwMDAwMDdmZSwKLQkweDQyMDAwMDAwLCAweDAwMDAwMDBhLCAweDA0MDIwMDZiLCAweDAyMDFmODAwLAotCTB4MDAxMDQ5ZTcsIDB4MDQwMjAwODgsIDB4MDIwMWY4MDAsIDB4MDAxMDk1MmYsCi0JMHgwNDAwMDA3OSwgMHg4MDAwMDU4MCwgMHgwNDAxZjA5OCwgMHg4MjIwMDUwMCwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQxN2E3ODAwLCAweDA0MDFmOGVhLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWY4ZjEsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg4MDAwMDU4MCwKKwkweDA0MDFmMGUwLCAweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDIwMGMyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4NGIsIDB4MDQwMjAwYzUsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTJlMCwgMHgwNDAwMDBiNiwgMHg4MDAwMDU4MCwgMHgwNDAxZjBkNSwKKwkweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDIwMGI3LCAweDAyMDFmODAwLAorCTB4MDAxMDQ4NGIsIDB4MDQwMjAwYmEsIDB4MDIwMWY4MDAsIDB4MDAxMDhlYTMsCisJMHgwNDAwMDBhYiwgMHg4MDAwMDU4MCwgMHgwNDAxZjBjYSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMjY3LCAweDA0MDIwMGFjLCAweDgzNDQ0ZDgwLCAweDAwMDAwN2ZlLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMGEsIDB4MDQwMjAwOGQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDgzNiwgMHgwNDAyMDBhYSwgMHgwMjAxZjgwMCwgMHgwMDEwOTJmOCwKKwkweDA0MDAwMDliLCAweDgwMDAwNTgwLCAweDA0MDFmMGJhLCAweDgyMjAwNTAwLAogCTB4MDAwMDAwNzAsIDB4MDQwMjAwMDUsIDB4OGMyMDQ1MGUsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAwYywgMHgwNDAyMDA1YywgMHg4YzIwNDUwYSwgMHgwNDAwMDAwZCwKKwkweDAwMDAwMDBjLCAweDA0MDIwMDdlLCAweDhjMjA0NTBhLCAweDA0MDAwMDBkLAogCTB4NGQzYzAwMDAsIDB4NDIwMjc4MDAsIDB4MDAwMDEwMDAsIDB4OGMyMDQ1MGUsCiAJMHgwNDAyMDAwMiwgMHg4NTNlN2Q1NiwgMHg4MjIwMDUwMCwgMHgwMDAwMDBhMCwKLQkweDAyMDFmODAwLCAweDAwMTA0OWQzLCAweDVjMDI3ODAwLCAweDA0MDFmMDdmLAotCTB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwNjUsIDB4OGMyMDQ1MDgsCi0JMHgwNDAwMDAxMCwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMTAwMCwKLQkweDhjMjA0NTBlLCAweDA0MDIwMDAyLCAweDg1M2U3ZDU2LCAweDgyMjAwNTAwLAotCTB4MDAwMDAwOTAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5YmIsIDB4NWMwMjc4MDAsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMDAwYSwgMHgwNDAyMDAzYiwgMHgwNDAxZjA2YiwKLQkweDgzNmMwNTgwLCAweDAwMDAwMDAzLCAweDQyMDAwODAwLCAweDAwMDAwMDA3LAotCTB4MDQwMjAwMGYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZjMsIDB4MDQwMDAwMDcsCi0JMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNGExZiwgMHg1YzAwMDAwMCwKLQkweDA0MDAwMDRkLCAweDA0MDFmMDVkLCAweDAyMDFmODAwLCAweDAwMTA5NGM1LAotCTB4MDQwMDAwMDcsIDB4ODAwMDA1ODAsIDB4MDQwMWYwNWMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNGExZiwgMHgwNDAwMDA1MSwgMHgwNDAxZjA1NCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0YTFmLCAweDA0MDAwMDM0LCAweDA0MDFmMDUwLCAweDAyMDFmODAwLAotCTB4MDAwMjAyNDUsIDB4MDQwMjAwMzYsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCi0JMHgwNDAyMDA0MCwgMHg4YzIwNDUwOCwgMHgwNDAwMDAwNiwgMHg0MTdhNzgwMCwKLQkweDQxN2E2MDAwLCAweDAyMDFmODAwLCAweDAwMTAyMGExLCAweDA0MDFmMDQzLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ5ZWQsIDB4MDQwMDAwMDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDllNywgMHgwNDAyMDAyYywgMHg0MTdhNzgwMCwgMHg0MTdhNjAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAyMGExLCAweDQ4MGJjODU2LCAweDAyMDFmODAwLAotCTB4MDAxMDkzMzIsIDB4MDQwMDAwMTgsIDB4ODAwMDA1ODAsIDB4MDQwMWYwMzcsCi0JMHgwNDAxZjdlMywgMHg0ODBiYzg1NywgMHg0MjAwMDgwMCwgMHgwMDAwMDAxOSwKLQkweDQwMDAxMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDBhLAotCTB4NDgwYmM4NTcsIDB4NDAwMDA4MDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCi0JMHgwNDAxZjAwNSwgMHg0ODBiYzg1NywgMHg0MDAwMDgwMCwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDAxLCAweDQ4MGJjODU3LCAweDQyMDI4MDAwLCAweDAwMDAwMDMxLAotCTB4MDQwMWYwMjAsIDB4NDgwYmM4NTcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmNywgMHg0ODBiYzg1NywKLQkweDQyMDAwODAwLCAweDAwMDAwMDBhLCAweDQyMDBiMDAwLCAweDAwMDAwMDAxLAotCTB4MDQwMWY3ZjEsIDB4NDgwYmM4NTcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDksCi0JMHg0MDAwMTAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjdlYSwKLQkweDQ4MGJjODU3LCAweDQyMDAwODAwLCAweDAwMDAwMDA3LCAweDQyMDBiMDAwLAotCTB4MDAwMDAwMDEsIDB4MDQwMWY3ZTQsIDB4NDgwYmM4NTcsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjdlMCwgMHg4MDAyODU4MCwgMHg0MTc4YjAwMCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ5MzdjODU3LAotCTB4NTkzMjY4MDksIDB4NTkzNDEyMDAsIDB4ODEzZTc5YzAsIDB4MDQwMDAwMDMsCi0JMHg4NDA4MTU0MCwgMHgwNDAxZjAwMiwgMHg4NDA4MTUwMCwgMHg0ODBhNmEwMCwKLQkweDFjMDFmMDAwLCAweDU5MzI2ODA5LCAweDVjMDAwMDAwLCAweDRjMDAwMDAwLAotCTB4NDgwM2M4NTcsIDB4NDkzN2M4NTcsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDYsCi0JMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDAwMDYwNiwgMHgwNDAxZjAyMSwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDA0LCAweDA0MDIwMDA0LCAweDQyMDAwMDAwLAotCTB4MDAwMDA0MDQsIDB4MDQwMWYwMWIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDcsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMDcwNywgMHgwNDAwMDAxNiwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDAzLCAweDQyMDAwMDAwLCAweDAwMDAwNzAzLCAweDA0MDAwMDExLAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsIDB4NDIwMDAwMDAsIDB4MDAwMDA0MDUsCi0JMHgwNDAwMDAwYywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwOSwgMHg0MjAwMDAwMCwKLQkweDAwMDAwNDA5LCAweDA0MDAwMDA3LCAweDgyMDQwNTgwLCAweDAwMDAwMDBiLAotCTB4NDIwMDAwMDAsIDB4MDAwMDA3MGIsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0ODAzYzg1NywgMHg0ODAyNmMwMCwgMHg4MjA0MGQ4MCwgMHgwMDAwMDAwNiwKLQkweDA0MDIwMDA1LCAweDU5MzQxNDA0LCAweDgwMDgxMWMwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4MWMwMWYwMDAsIDB4NWMwMDAwMDAsIDB4NGMwMDAwMDAsCi0JMHg0ODAzYzg1NywgMHg0OTQ3Yzg1NywgMHg0ODFiYzg1NywgMHg4MzQ0MDQ4MCwKLQkweDAwMDAwODAwLCAweDA0MDIxMDM0LCAweDgzNDQxNDAwLCAweDAwMTBhYzAwLAotCTB4NTAwODAwMDAsIDB4ODAwMjZkNDAsIDB4MDQwMjAwMTEsIDB4NGMxODAwMDAsCi0JMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywgMHg0MTJlNjgwMCwKLQkweDVjMDI1ODAwLCAweDVjMDAzMDAwLCAweDA0MDAwMDI3LCAweDQ1MzQxMDAwLAotCTB4NDk3YTY4MGQsIDB4NDk3YTY4MTAsIDB4NDk3YTY4MGYsIDB4NDk3YTY4MGUsCi0JMHg0YzE4MDAwMCwgMHgwNDAxZmNmMywgMHg1YzAwMzAwMCwgMHg1OTM0MGExMiwKLQkweDRjMDQwMDAwLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDVjMDAwODAwLAotCTB4MDQwMDAwMDksIDB4ODIxODA1MDAsIDB4MDBmZmZmMDAsIDB4MDQwMDAwMDgsCi0JMHg1OWE4MTAxMCwgMHg4MjA4MTUwMCwgMHgwMGZmZmYwMCwgMHg4MDA4MDU4MCwKLQkweDA0MDAwMDAzLCAweDgwMDAwNTgwLCAweDA0MDFmMDA0LCAweDgyMTgwNTAwLAotCTB4MDAwMDAwZmYsIDB4ODAwMDAwZDAsIDB4ODAwNDBkODAsIDB4MDQwMDAwMDMsCi0JMHg0ODAzYzg1NywgMHg0ODAyNmExMiwgMHg1OTM0MDAwMiwgMHg4MDE4MDU4MCwKLQkweDA0MDAwMDAzLCAweDQ4MWJjODU3LCAweDQ4MWE2ODAyLCAweDgwMDAwNTgwLAotCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCi0JMHgwNDAxZjdmYywgMHg0OTQ3Yzg1NywgMHg4MzQ0MDQ4MCwgMHgwMDAwMDgwMCwKLQkweDA0MDIxMDExLCAweDgzNDQxNDAwLCAweDAwMTBhYzAwLCAweDUwMDgwMDAwLAotCTB4ODAwMjZkNDAsIDB4MDQwMDAwMGIsIDB4MDQwMWZiZjksIDB4MDQwMjAwMGEsCi0JMHg1OWE4MDAwNSwgMHg4YzAwMDUwMiwgMHgwNDAwMDAwNCwgMHg1OTM0MDIwMCwKLQkweDhjMDAwNTBlLCAweDA0MDAwMDA0LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsIDB4MDQwMWY3ZmUsIDB4NWMwMDAwMDAsCi0JMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywgMHg0OTQ3Yzg1NywgMHg0ZDJjMDAwMCwKLQkweDRkMzAwMDAwLCAweDgzNDQwNDgwLCAweDAwMDAwODAwLCAweDA0MDIxMDI0LAotCTB4ODM0NDE0MDAsIDB4MDAxMGFjMDAsIDB4NTAwODAwMDAsIDB4ODAwMjZkNDAsCi0JMHgwNDAwMDAxYiwgMHg0NTc4MTAwMCwgMHg1OTM0MDAwZCwgMHg4MDAyNWQ0MCwKLQkweDAyMDIwODAwLCAweDAwMTAwN2ZkLCAweDU5MzY2MDExLCAweDgxMzI2MWMwLAotCTB4MDQwMDAwMGUsIDB4NGM2NDAwMDAsIDB4NTkzMGM4MDAsIDB4NTkzMjU4MDgsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwMjAyMDgwMCwgMHgwMDEwMDdmZCwKLQkweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDgyNjY2NTQwLCAweDAwMDAwMDAwLAotCTB4MDQwMjA3ZjYsIDB4NWMwMGM4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDRjNjIsCi0JMHg0MTM2NTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmNSwgMHg4MDAwMDU4MCwKLQkweDVjMDI2MDAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLAotCTB4MDAwMDAwMDEsIDB4MDQwMWY3ZmIsIDB4NDkzN2M4NTcsIDB4NGM1ODAwMDAsCi0JMHg1OWNjMDAwMSwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg0ODAyNjgwMiwKLQkweDQ5N2E2YzAxLCAweDQ5N2E2YTAxLCAweDU5MzQwMjAwLCAweDg0MDAwNTAyLAotCTB4NDgwMjZhMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMjAwMTcsCi0JMHg1OTM0MDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDdmZSwgMHgwNDAwMDAwNSwKLQkweDU5YTgwMDI2LCAweDhjMDAwNTBhLCAweDA0MDIwMDEwLCAweDA0MDFmMDA4LAotCTB4NTljYzA0MDgsIDB4OGMwMDA1MTgsIDB4MDQwMDAwMGMsIDB4NTljYzAwMDksCi0JMHg0ODAzNTAzNSwgMHg1OWNjMDAwYSwgMHg0ODAzNTAzNiwgMHg1OWNjMDIwNywKLQkweDgwMDAwNTQwLCAweDA0MDIwMDAzLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAotCTB4NDgwMzg4OTMsIDB4NDgwMzUwMWUsIDB4NTljYzBhMDksIDB4ODIwNDBkMDAsCi0JMHgwMDAwMDAxMCwgMHg1OWNjMDQwOCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAyMCwKLQkweDA0MDAwMDAyLCAweDg0MDQwZDQwLCAweDU5MzQwMDBhLCAweDgyMDAwNTAwLAotCTB4ZmZmZmZmZWUsIDB4ODAwNDA1NDAsIDB4NDgwMjY4MGEsIDB4ODNjY2E0MDAsCi0JMHgwMDAwMDAwYiwgMHg4MzM0YWMwMCwgMHgwMDAwMDAwNiwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDAyLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDgzY2NhNDAwLAotCTB4MDAwMDAwMGQsIDB4ODMzNGFjMDAsIDB4MDAwMDAwMDgsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg1OWNjMGExOCwKLQkweDgyMDQwNDgwLCAweDAwMDAwODAwLCAweDA0MDIxMDBjLCAweDgyMDQwNDgwLAotCTB4MDAwMDA0MDAsIDB4MDQwMDEwMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDA0MDAsCi0JMHgwNDAxZjAwNiwgMHg4MjA0MDQ4MCwgMHgwMDAwMDIwMCwgMHgwNDAwMTAwMywKLQkweDQyMDAwODAwLCAweDAwMDAwMjAwLCAweDQ4MDY2YTA0LCAweDU5MzQwNDAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4MjIsIDB4NWMwMjc4MDAsIDB4MDQwMWYwYTEsCisJMHg4YzIwNDUwOCwgMHgwNDAyMDAyNCwgMHg1OTJjMTAwOCwgMHg4MjA4MTUwMCwKKwkweDAwZmZmZmZmLCAweDU5YTgwMDEwLCAweDgwMDg0ZDgwLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMTAsIDB4MDQwMDAwNjYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ3NjgsCisJMHgwNDAwMDAyYiwgMHg0ODAzYzg1NywgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxYSwKKwkweDA0MDIwMDAzLCAweDQwMTAxMDAwLCAweDA0MDFmMDY0LCAweDQ4MDNjODU3LAorCTB4ODIwMDRkODAsIDB4MDAwMDAwMWIsIDB4MDQwMjAwMDMsIDB4NDAxODEwMDAsCisJMHgwNDAxZjA1ZSwgMHg0ODAzYzg1NywgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxYywKKwkweDA0MDAwMDVmLCAweDgyMDA0ZDgwLCAweDAwMDAwMDE5LCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMGEsIDB4MDQwMDAwNGUsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMGEsCisJMHgwNDAxZjA2NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDI2NywgMHgwNDAyMDA2MiwKKwkweDRkM2MwMDAwLCAweDQyMDI3ODAwLCAweDAwMDAxMDAwLCAweDhjMjA0NTBlLAorCTB4MDQwMjAwMDIsIDB4ODUzZTdkNTYsIDB4ODIyMDA1MDAsIDB4MDAwMDAwOTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDgwYSwgMHg1YzAyNzgwMCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDBhLCAweDA0MDIwMDNhLCAweDA0MDFmMDZhLCAweDgzNmMwNTgwLAorCTB4MDAwMDAwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsIDB4MDQwMjAwMDYsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTI4ZSwgMHgwNDAwMDAwNywgMHg4MDAwMDU4MCwKKwkweDA0MDFmMDY0LCAweDAyMDFmODAwLCAweDAwMTA0ODcxLCAweDA0MDAwMDU5LAorCTB4MDQwMWYwNWMsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4NzEsIDB4MDQwMDAwM2MsCisJMHgwNDAxZjA1OCwgMHgwMjAxZjgwMCwgMHgwMDAyMDI2NywgMHgwNDAyMDAzZSwKKwkweDgzNmMwNTgwLCAweDAwMDAwMDAzLCAweDA0MDIwMDQ4LCAweDhjMjA0NTA4LAorCTB4MDQwMDAwMGEsIDB4NGM2MDAwMDAsIDB4NDE3OGMwMDAsIDB4NDIwMjc4MDAsCisJMHgwMDAwMTgwMCwgMHg0MTdhNjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWU0OCwKKwkweDVjMDBjMDAwLCAweDA0MDFmMDQ3LCAweDAyMDFmODAwLCAweDAwMTA0ODNjLAorCTB4MDQwMDAwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4MzYsIDB4MDQwMjAwMzAsCisJMHg0YzYwMDAwMCwgMHg0MTc4YzAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMTgwMCwKKwkweDQxN2E2MDAwLCAweDAyMDFmODAwLCAweDAwMTAxZTQ4LCAweDVjMDBjMDAwLAorCTB4NDgwYmM4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDkwZjgsIDB4MDQwMDAwMTgsCisJMHg4MDAwMDU4MCwgMHgwNDAxZjAzNywgMHgwNDAxZjdkYiwgMHg0ODBiYzg1NywKKwkweDQyMDAwODAwLCAweDAwMDAwMDE5LCAweDQwMDAxMDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDIsIDB4MDQwMWYwMGEsIDB4NDgwYmM4NTcsIDB4NDAwMDA4MDAsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAwNSwgMHg0ODBiYzg1NywKKwkweDQwMDAwODAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDAxLCAweDQ4MGJjODU3LAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMzEsIDB4MDQwMWYwMjAsIDB4NDgwYmM4NTcsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmN2Y3LCAweDQ4MGJjODU3LCAweDQyMDAwODAwLCAweDAwMDAwMDBhLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZjEsIDB4NDgwYmM4NTcsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwOSwgMHg0MDAwMTAwMCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAyLCAweDA0MDFmN2VhLCAweDQ4MGJjODU3LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDcsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZTQsCisJMHg0ODBiYzg1NywgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdlMCwKKwkweDgwMDI4NTgwLCAweDQxNzhiMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4NTkzMjY4MDksIDB4NTkzNDEyMDAsCisJMHg4MTNlNzljMCwgMHgwNDAwMDAwMywgMHg4NDA4MTU0MCwgMHgwNDAxZjAwMiwKKwkweDg0MDgxNTAwLCAweDQ4MGE2YTAwLCAweDFjMDFmMDAwLCAweDU5MzI2ODA5LAorCTB4NWMwMDAwMDAsIDB4NGMwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NDkzN2M4NTcsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwNiwgMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwNjA2LCAweDA0MDFmMDIxLCAweDgyMDQwNTgwLCAweDAwMDAwMDA0LAorCTB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAwMDA0MDQsIDB4MDQwMWYwMWIsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwNywgMHg0MjAwMDAwMCwgMHgwMDAwMDcwNywKKwkweDA0MDAwMDE2LCAweDgyMDQwNTgwLCAweDAwMDAwMDAzLCAweDQyMDAwMDAwLAorCTB4MDAwMDA3MDMsIDB4MDQwMDAwMTEsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDQwNSwgMHgwNDAwMDAwYywgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDA5LCAweDQyMDAwMDAwLCAweDAwMDAwNDA5LCAweDA0MDAwMDA3LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMGIsIDB4NDIwMDAwMDAsIDB4MDAwMDA3MGIsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg0ODAzYzg1NywgMHg0ODAyNmMwMCwKKwkweDgyMDQwZDgwLCAweDAwMDAwMDA2LCAweDA0MDIwMDA1LCAweDU5MzQxNDA0LAorCTB4ODAwODExYzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4MWMwMWYwMDAsCisJMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywgMHg0OTQ3Yzg1NywKKwkweDQ4MWJjODU3LCAweDgzNDQwNDgwLCAweDAwMDAwODAwLCAweDA0MDIxMDM0LAorCTB4ODM0NDE0MDAsIDB4MDAxMGFhMDAsIDB4NTAwODAwMDAsIDB4ODAwMjZkNDAsCisJMHgwNDAyMDAxMSwgMHg0YzE4MDAwMCwgMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwODE5LCAweDQxMmU2ODAwLCAweDVjMDI1ODAwLCAweDVjMDAzMDAwLAorCTB4MDQwMDAwMjcsIDB4NDUzNDEwMDAsIDB4NDk3YTY4MGQsIDB4NDk3YTY4MTAsCisJMHg0OTdhNjgwZiwgMHg0OTdhNjgwZSwgMHg0YzE4MDAwMCwgMHgwNDAxZmNjZCwKKwkweDVjMDAzMDAwLCAweDU5MzQwYTEyLCAweDRjMDQwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDRlMGQsIDB4NWMwMDA4MDAsIDB4MDQwMDAwMDksIDB4ODIxODA1MDAsCisJMHgwMGZmZmYwMCwgMHgwNDAwMDAwOCwgMHg1OWE4MTAxMCwgMHg4MjA4MTUwMCwKKwkweDAwZmZmZjAwLCAweDgwMDgwNTgwLCAweDA0MDAwMDAzLCAweDgwMDAwNTgwLAorCTB4MDQwMWYwMDQsIDB4ODIxODA1MDAsIDB4MDAwMDAwZmYsIDB4ODAwMDAwZDAsCisJMHg4MDA0MGQ4MCwgMHgwNDAwMDAwMywgMHg0ODAzYzg1NywgMHg0ODAyNmExMiwKKwkweDU5MzQwMDAyLCAweDgwMTgwNTgwLCAweDA0MDAwMDAzLCAweDQ4MWJjODU3LAorCTB4NDgxYTY4MDIsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmYywgMHg0OTQ3Yzg1NywKKwkweDgzNDQwNDgwLCAweDAwMDAwODAwLCAweDA0MDIxMDExLCAweDgzNDQxNDAwLAorCTB4MDAxMGFhMDAsIDB4NTAwODAwMDAsIDB4ODAwMjZkNDAsIDB4MDQwMDAwMGIsCisJMHgwNDAxZmJmMiwgMHgwNDAyMDAwYSwgMHg1OWE4MDAwNSwgMHg4YzAwMDUwMiwKKwkweDA0MDAwMDA0LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDAwMDA0LAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsCisJMHgwNDAxZjdmZSwgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywKKwkweDQ5NDdjODU3LCAweDRkMmMwMDAwLCAweDRkMzAwMDAwLCAweDgzNDQwNDgwLAorCTB4MDAwMDA4MDAsIDB4MDQwMjEwMjQsIDB4ODM0NDE0MDAsIDB4MDAxMGFhMDAsCisJMHg1MDA4MDAwMCwgMHg4MDAyNmQ0MCwgMHgwNDAwMDAxYiwgMHg0NTc4MTAwMCwKKwkweDU5MzQwMDBkLCAweDgwMDI1ZDQwLCAweDAyMDIwODAwLCAweDAwMTAwODQzLAorCTB4NTkzNjYwMTEsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMGUsIDB4NGM2NDAwMDAsCisJMHg1OTMwYzgwMCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwKKwkweDAyMDIwODAwLCAweDAwMTAwODQzLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LAorCTB4ODI2NjY1NDAsIDB4MDAwMDAwMDAsIDB4MDQwMjA3ZjYsIDB4NWMwMGM4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGFjZiwgMHg0MTM2NTgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwODNiLCAweDgwMDAwNTgwLCAweDVjMDI2MDAwLCAweDVjMDI1ODAwLAorCTB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZmIsCisJMHg0OTM3Yzg1NywgMHg0YzU4MDAwMCwgMHg1OWNjMDAwMSwgMHg4MjAwMDUwMCwKKwkweDAwZmZmZmZmLCAweDQ4MDI2ODAyLCAweDQ5N2E2YzAxLCAweDQ5N2E2YTAxLAorCTB4NTkzNDAyMDAsIDB4ODQwMDA1MDIsIDB4NDgwMjZhMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNGUwZCwgMHgwNDAyMDAxNywgMHg1OTM0MDQwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwN2ZlLCAweDA0MDAwMDA1LCAweDU5YTgwMDI2LCAweDhjMDAwNTBhLAorCTB4MDQwMjAwMTAsIDB4MDQwMWYwMDgsIDB4NTljYzA0MDgsIDB4OGMwMDA1MTgsCisJMHgwNDAwMDAwYywgMHg1OWNjMDAwOSwgMHg0ODAzNTAzNSwgMHg1OWNjMDAwYSwKKwkweDQ4MDM1MDM2LCAweDU5Y2MwMjA3LCAweDgwMDAwNTQwLCAweDA0MDIwMDAzLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4NDgwMzg4OTMsIDB4NDgwMzUwMWUsCisJMHg1OWNjMGEwOSwgMHg4MjA0MGQwMCwgMHgwMDAwMDAxMCwgMHg1OWNjMDQwOCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMDIwLCAweDA0MDAwMDAyLCAweDg0MDQwZDQwLAorCTB4NTkzNDAwMGEsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmZWUsIDB4ODAwNDA1NDAsCisJMHg0ODAyNjgwYSwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwYiwgMHg4MzM0YWMwMCwKKwkweDAwMDAwMDA2LCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLAorCTB4MDAxMGE5M2UsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMGQsIDB4ODMzNGFjMDAsCisJMHgwMDAwMDAwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTBhOTNlLCAweDU5Y2MwYTE4LCAweDgyMDQwNDgwLCAweDAwMDAwODAwLAorCTB4MDQwMjEwMGMsIDB4ODIwNDA0ODAsIDB4MDAwMDA0MDAsIDB4MDQwMDEwMDQsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDQwMCwgMHgwNDAxZjAwNiwgMHg4MjA0MDQ4MCwKKwkweDAwMDAwMjAwLCAweDA0MDAxMDAzLCAweDQyMDAwODAwLCAweDAwMDAwMjAwLAorCTB4NDIwMDEwMDAsIDB4MDAxMGIzM2YsIDB4NTgwODAyMDIsIDB4ODAwNDE0ODAsCisJMHgwNDAwMTAwMiwgMHg0MDAwMDgwMCwgMHg0ODA2NmEwNCwgMHg1OTM0MDQwMywKIAkweDgyMDAwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwMDAzLCAweDU5Y2MwYTA4LAotCTB4NDgwNjZhMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4NTljYzEyMDcsCi0JMHg4MDA4MTFjMCwgMHgwNDAwMDAwNSwgMHg4MjA4MDQ4MCwgMHgwMDAwMDAwNCwKLQkweDA0MDIxMDAyLCAweDQwMDgwODAwLCAweDQ4MDY2YzA0LCAweDVjMDBiMDAwLAorCTB4NDgwNjZhMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDRhZmQsIDB4NWMwMGIwMDAsCiAJMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywgMHg1OWE4MDAyNiwgMHg4YzAwMDUwOCwKIAkweDA0MDAwMDA0LCAweDg0MDAwNTU2LCAweDQ4MDNjODU3LCAweDQ4MDM1MDI2LAogCTB4NTljYzAyMDcsIDB4NDgwM2M4NTcsIDB4NDgwMjZhMDUsIDB4NTljYzAyMGEsCkBAIC00NTczLDE1ICs0NDY2LDE1IEBACiAJMHg0YzU4MDAwMCwgMHg1OTM0MDAwZCwgMHg4MDAyNWQ0MCwgMHgwNDAwMDAyOSwKIAkweDU5MmMwMDAzLCAweDgyMDAwNDgwLCAweDAwMDAwMDA4LCAweDA0MDAxMDBiLAogCTB4NDEyY2I4MDAsIDB4NTkyYzAwMDEsIDB4ODAwMjVkNDAsIDB4MDQwMjA3ZjksCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAzNywgMHg0OTJmYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTAwODJhLCAweDA0MDAwMDM3LCAweDQ5MmZjODU3LAogCTB4NDkyY2I4MDEsIDB4MDQwMWYwMjAsIDB4ODMyYzBjMDAsIDB4MDAwMDAwMDQsCiAJMHg0MjAwYjAwMCwgMHgwMDAwMDAwOCwgMHg1MDA0MDAwMCwgMHg4MjAwMDU4MCwKIAkweGZmZmZmZmZmLCAweDA0MDIwMDA2LCAweDgwMDQxMDAwLCAweDUwMDgwMDAwLAogCTB4ODIwMDA1ODAsIDB4ZmZmZmZmZmYsIDB4MDQwMDAwMDcsIDB4ODIwNDBjMDAsCiAJMHgwMDAwMDAwMiwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmNCwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDQ1NDgwODAwLCAweDQ1NGMxMDAwLCAweDU5MmMxODAzLAorCTB4MDAxMDA2MTUsIDB4NDU0ODA4MDAsIDB4NDU0YzEwMDAsIDB4NTkyYzE4MDMsCiAJMHg4MDBjMTgwMCwgMHg0ODBlNTgwMywgMHg0ODBmYzg1NywgMHgwNDAxZjAxNCwKLQkweDAyMDFmODAwLCAweDAwMTAwN2U0LCAweDA0MDAwMDE3LCAweDQ5MmZjODU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4MmEsIDB4MDQwMDAwMTcsIDB4NDkyZmM4NTcsCiAJMHg0OTJlNjgwZCwgMHg0OTdhNTgwMiwgMHg0YTAyNTgwMywgMHgwMDAwMDAwMSwKIAkweDQ5NGE1ODA0LCAweDQ5NGU1ODA1LCAweDgzMmMwYzAwLCAweDAwMDAwMDA2LAogCTB4NDIwMGIwMDAsIDB4MDAwMDAwMGUsIDB4NDYwMDA4MDAsIDB4ZmZmZmZmZmYsCkBAIC00NTkwLDMwNyArNDQ4MywzMTEgQEAKIAkweDFjMDFmMDAwLCAweDgwMDAwNTgwLCAweDA0MDFmN2ZiLCAweDQ4MDNjODU2LAogCTB4NGQzYzAwMDAsIDB4NGQyYzAwMDAsIDB4NTkzNDAwMGQsIDB4ODAwMjVkNDAsCiAJMHgwNDAwMDAxZiwgMHg1OTJjMDAwMiwgMHg4MDAwMDU0MCwgMHgwNDAyMDAxZiwKLQkweDQxMmU3ODAwLCAweDA0MDFmOGNlLCAweDA0MDIwMDFjLCAweDQ2MDAwODAwLAorCTB4NDEyZTc4MDAsIDB4MDQwMWY4YzgsIDB4MDQwMjAwMWMsIDB4NDYwMDA4MDAsCiAJMHhmZmZmZmZmZiwgMHg0NjAwMTAwMCwgMHhmZmZmZmZmZiwgMHg0ODEzYzg1NywKIAkweDQ4MGZjODU3LCAweDU4MGMwMDAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDAyLAogCTB4MDQwMjEwMTQsIDB4NDgwZmM4NTcsIDB4NDAwYzAwMDAsIDB4ODEyYzA1ODAsCiAJMHgwNDAyMDAwNCwgMHg1ODBjMDAwMSwgMHg0ODAyNjgwZCwgMHgwNDAxZjAwMywKIAkweDU4MGMwMDAxLCAweDQ4MDAyMDAxLCAweDQwMGU1ODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDA3ZjQsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMjU4MDAsCisJMHgwMDEwMDgzYSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNTgwMCwKIAkweDVjMDI3ODAwLCAweDFjMDFmMDAwLCAweDgwMDAwNTgwLCAweDA0MDFmN2ZjLAogCTB4ODAwMDAwNDAsIDB4NDgwMDE4MDMsIDB4NDgwM2M4NTcsIDB4MDQwMWY3ZjYsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDA4NiwgMHg1OTMwMDAwNywgMHg4NDAwMDU0ZSwKKwkweDAyMDFmODAwLCAweDAwMDIwMDg3LCAweDU5MzAwMDA3LCAweDg0MDAwNTRlLAogCTB4NDgwMjYwMDcsIDB4NTkyYzFhMDQsIDB4ODIwYzFkMDAsIDB4MDAwMDAwZmYsCiAJMHg4MjBjMDU4MCwgMHgwMDAwMDA0OCwgMHgwNDAwMDAxMywgMHgwMjAxZjAwMCwKLQkweDAwMDIwMjhlLCAweDhjMDAwNTAwLCAweDAyMDIwODAwLCAweDAwMDIwMGU1LAorCTB4MDAwMjAyYjAsIDB4OGMwMDA1MDAsIDB4MDIwMjA4MDAsIDB4MDAwMjAwZTYsCiAJMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwgMHg1OTJjMWEwNCwgMHg4MjBjMWQwMCwKIAkweDAwMDAwMGZmLCAweDgyMGMwNTgwLCAweDAwMDAwMDE4LCAweDAyMDAwMDAwLAotCTB4MDAwMjAyOGUsIDB4ODIwYzA1ODAsIDB4MDAwMDAwNDgsIDB4MDIwMjAwMDAsCi0JMHgwMDAyMDI4ZSwgMHg0MjAwMDgwMCwgMHg4MDAwMDgwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2NzIxLCAweDAyMDFmMDAwLCAweDAwMDIwMjk3LCAweDRhMDI1YTA2LAotCTB4MDAwMDAwMDgsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NGEwMjVhMDYsCi0JMHgwMDAwMDAyOSwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg0YTAyNWEwNiwKLQkweDAwMDAwMDJhLCAweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDRhMDI1YTA2LAotCTB4MDAwMDAwMjgsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NDk0M2M4NTcsCisJMHgwMDAyMDJiMCwgMHg4MjBjMDU4MCwgMHgwMDAwMDA0OCwgMHgwMjAyMDAwMCwKKwkweDAwMDIwMmIwLCAweDQyMDAwODAwLCAweDgwMDAwODA0LCAweDAyMDFmODAwLAorCTB4MDAxMDY0NjYsIDB4MDIwMWYwMDAsIDB4MDAwMjAyYjksIDB4NGEwMjVhMDYsCisJMHgwMDAwMDAwOCwgMHgwMjAxZjAwMCwgMHgwMDAyMDM4MSwgMHg0YTAyNWEwNiwKKwkweDAwMDAwMDI5LCAweDAyMDFmMDAwLCAweDAwMDIwMzgxLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMmEsIDB4MDIwMWYwMDAsIDB4MDAwMjAzODEsIDB4NGEwMjVhMDYsCisJMHgwMDAwMDAyOCwgMHgwMjAxZjAwMCwgMHgwMDAyMDM4MSwgMHg0OTQzYzg1NywKIAkweDRkNDQwMDAwLCAweDRkMzQwMDAwLCAweDRkMmMwMDAwLCAweDRjNTgwMDAwLAogCTB4NDIwMGIwMDAsIDB4MDAwMDA3ZjAsIDB4NDE3YTg4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDI0NSwgMHgwNDAyMDAwZCwgMHg4ZDNlN2QxNCwgMHgwNDAwMDAwNSwKLQkweDU5MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDA0MDAwMDA3LAotCTB4OGQzZTdkMDYsIDB4MDQwMDAwMDQsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsCi0JMHgwNDAyMDAwMiwgMHgwNDAxZjgxMywgMHg4MTQ2ODgwMCwgMHg4MDU4YjA0MCwKLQkweDA0MDIwN2VmLCAweDgzNDQwNDgwLCAweDAwMDAwODAwLCAweDA0MDIxMDA4LAotCTB4OGQzZTdkMDIsIDB4MDQwMDAwMDYsIDB4NDIwMjg4MDAsIDB4MDAwMDA3ZjAsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwgMHgwNDAxZjdlNSwgMHg1YzAwYjAwMCwKLQkweDVjMDI1ODAwLCAweDVjMDI2ODAwLCAweDVjMDI4ODAwLCAweDFjMDFmMDAwLAotCTB4NGQyYzAwMDAsIDB4NDE3ODMwMDAsIDB4NTkzNjU4MGYsIDB4ODEyZTU5YzAsCi0JMHgwNDAwMDAyOSwgMHg1OTJjMDIwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDEyLCAweDA0MDAwMDIwLCAweDhkM2U3ZDAwLAotCTB4MDQwMDAwMDMsIDB4MDQwMWY4M2MsIDB4MDQwMjAwMWMsIDB4NTkyYzIwMDAsCi0JMHg0OTdhNTgwMCwgMHg4MDE4MzFjMCwgMHgwNDAyMDAwOSwgMHg1OTM0MDAxMCwKLQkweDgxMmMwNTgwLCAweDA0MDIwMDA0LCAweDQ5N2E2ODBmLCAweDQ5N2E2ODEwLAotCTB4MDQwMWYwMDgsIDB4NDgxMjY4MGYsIDB4MDQwMWYwMDYsIDB4NDgxMDMwMDAsCi0JMHg1OTM0MDAxMCwgMHg4MTJjMDU4MCwgMHgwNDAyMDAwMiwgMHg0ODFhNjgxMCwKLQkweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDQ5NDI1YTA2LCAweDQ5N2E1YzA5LAotCTB4MDIwMWY4MDAsIDB4MDAxMDkxYzYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCi0JMHg0MDEyNTgwMCwgMHgwNDAxZjdkYSwgMHg0MTJjMzAwMCwgMHg1OTJlNTgwMCwKLQkweDA0MDFmN2Q3LCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAotCTB4NDE3ODE4MDAsIDB4NTkzNDAwMGYsIDB4ODAwMjVkNDAsIDB4MDQwMDAwMTAsCi0JMHg1OTJjMDAwNSwgMHg4MDIwMDU4MCwgMHg1OTJjMDAwMCwgMHgwNDAwMDAwMywKLQkweDQxMmMxODAwLCAweDA0MDFmN2Y5LCAweDQ5N2E1ODAwLCAweDgwMGMxOWMwLAotCTB4MDQwMDAwMDgsIDB4NDgwMDE4MDAsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDQsCi0JMHg0ODBlNjgxMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKLQkweDQ4MDI2ODBmLCAweDgwMDAwNTQwLCAweDA0MDIwN2ZkLCAweDQ5N2E2ODEwLAotCTB4MDQwMWY3ZjksIDB4NTkyYzAwMDgsIDB4ODE0ODA1ODAsIDB4MDQwMjAwMDMsCi0JMHg1OTJjMDAwOSwgMHg4MTRjMDU4MCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKLQkweDRjNTgwMDAwLCAweDQxM2MxODAwLCAweDQwMGMyMDAwLCAweDU5M2MwMDAyLAotCTB4ODAwMDA1NDAsIDB4MDQwMjAwMTgsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDgsCi0JMHg4MjBjMGMwMCwgMHgwMDAwMDAwNCwgMHg1MDA0MDAwMCwgMHg4MTQ4MDU4MCwKLQkweDA0MDIwMDA1LCAweDgwMDQxMDAwLCAweDUwMDgwMDAwLCAweDgxNGMwNTgwLAotCTB4MDQwMDAwMGQsIDB4ODIwNDBjMDAsIDB4MDAwMDAwMDIsIDB4ODA1OGIwNDAsCi0JMHgwNDAyMDdmNiwgMHg0MDBjMjAwMCwgMHg1ODBjMDAwMSwgMHg4MDAwMWQ0MCwKLQkweDA0MDIwN2VlLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDBiMDAwLAotCTB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsIDB4MDQwMWY3ZmQsIDB4NDkzN2M4NTcsCi0JMHg0YzU4MDAwMCwgMHg0ZDJjMDAwMCwgMHg1OTM0MDAwZCwgMHg4MDAyNWQ0MCwKLQkweDA0MDIwMDE2LCAweDAyMDFmODAwLCAweDAwMTAwN2U0LCAweDA0MDAwMDEwLAotCTB4NDkyZTY4MGQsIDB4NGEwMjU4MDIsIDB4MDAwMDAwMDEsIDB4NDk3YTU4MDMsCi0JMHg4MzJjMGMwMCwgMHgwMDAwMDAwNCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwKLQkweDQ2MDAwODAwLCAweGZmZmZmZmZmLCAweDgwMDQwODAwLCAweDgwNThiMDQwLAotCTB4MDQwMjA3ZmMsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMjU4MDAsCi0JMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwgMHg1OTJlNTgwMSwKLQkweDAyMDFmODAwLCAweDAwMTAwN2ZkLCAweDVjMDI1ODAwLCAweDA0MDFmN2VhLAotCTB4NGQyYzAwMDAsIDB4NTkzNjU4MGQsIDB4ODEyZTU5YzAsIDB4MDQwMDAwMDcsCi0JMHg0OTM3Yzg1NywgMHg0OTdhNjgwZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAotCTB4NTkzNDA0MDUsIDB4NDkzN2M4NTcsIDB4NDgwM2M4NTcsIDB4OGMwMDA1MDgsCi0JMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwKLQkweDA0MDAwMDExLCAweDU5YTgwODE1LCAweDhjMDQwZDA0LCAweDA0MDIwMDBlLAotCTB4NTlhODA4MjYsIDB4OGMwNDBkMDYsIDB4MDQwMDAwMGIsIDB4ODNhYzA0MDAsCi0JMHgwMDAwMDdmZSwgMHg1MDAwMDAwMCwgMHg4MDAyNmQ0MCwgMHgwNDAwMDAwNiwKLQkweDA0MDFmOWE3LCAweDA0MDIwMDA0LCAweDU5MzQwMjAwLCAweDg0MDAwNTVhLAotCTB4NDgwMjZhMDAsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMTUsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwgMHg0MTdhODgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMjQ1LCAweDA0MDIwMDBjLCAweDA0MDFmOTk5LCAweDA0MDIwMDBhLAotCTB4NTlhODAwMTAsIDB4NTkzNDA4MDIsIDB4ODAwNDA1ODAsIDB4ODIwMDA1MDAsCi0JMHgwMGZmZmYwMCwgMHgwNDAyMDAwNCwgMHg1OTM0MDIwMCwgMHg4NDAwMDU1YSwKLQkweDQ4MDI2YTAwLCAweDgxNDY4ODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2YwLAotCTB4MDQwMWY4ODQsIDB4MDQwMDAwMDMsIDB4NTlhODA4MzYsIDB4MDQwMWYwMDYsCi0JMHg1OTljMDAxNywgMHg4YzAwMDUwOCwgMHgwNDAwMDAwNywgMHg0MjAwMDgwMCwKLQkweDAwMDAwN2QwLCAweDQyMDAxMDAwLCAweDAwMTA0ODc2LCAweDAyMDFmODAwLAotCTB4MDAxMDYwNmUsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzNDAwMDAsCi0JMHg0ZDQ0MDAwMCwgMHg0ZDNjMDAwMCwgMHg0YzU4MDAwMCwgMHg0MjAwMTAwMCwKLQkweDAwMTA0ODc2LCAweDAyMDFmODAwLCAweDAwMTA1ZjkwLCAweDU5YTgwODI2LAotCTB4OGMwNDBkMDYsIDB4MDQwMDAwMTUsIDB4MDQwMWY4NmEsIDB4MDQwMDAwMTMsCi0JMHg4M2FlNmMwMCwgMHgwMDAwMDdmZSwgMHg1MTM2NjgwMCwgMHg1OTM0MDIwMCwKLQkweDg0MDAwNTFhLCAweDQ4MDI2YTAwLCAweDU5OWMwMDE3LCAweDhjMDAwNTA4LAorCTB4MDAwMjAyNjcsIDB4MDQwMjAwMDcsIDB4OGQzZTdkMDYsIDB4MDQwMDAwMDQsCisJMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHgwNDAyMDAwMiwgMHgwNDAxZjgxMywKKwkweDgxNDY4ODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2Y1LCAweDgzNDQwNDgwLAorCTB4MDAwMDA4MDAsIDB4MDQwMjEwMDgsIDB4OGQzZTdkMDIsIDB4MDQwMDAwMDYsCisJMHg0MjAyODgwMCwgMHgwMDAwMDdmMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwKKwkweDA0MDFmN2ViLCAweDVjMDBiMDAwLCAweDVjMDI1ODAwLCAweDVjMDI2ODAwLAorCTB4NWMwMjg4MDAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NDE3ODMwMDAsCisJMHg1OTM2NTgwZiwgMHg4MTJlNTljMCwgMHgwNDAwMDAyOSwgMHg1OTJjMDIwNCwKKwkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwNTgwLCAweDAwMDAwMDEyLAorCTB4MDQwMDAwMjAsIDB4OGQzZTdkMDAsIDB4MDQwMDAwMDMsIDB4MDQwMWY4M2MsCisJMHgwNDAyMDAxYywgMHg1OTJjMjAwMCwgMHg0OTdhNTgwMCwgMHg4MDE4MzFjMCwKKwkweDA0MDIwMDA5LCAweDU5MzQwMDEwLCAweDgxMmMwNTgwLCAweDA0MDIwMDA0LAorCTB4NDk3YTY4MGYsIDB4NDk3YTY4MTAsIDB4MDQwMWYwMDgsIDB4NDgxMjY4MGYsCisJMHgwNDAxZjAwNiwgMHg0ODEwMzAwMCwgMHg1OTM0MDAxMCwgMHg4MTJjMDU4MCwKKwkweDA0MDIwMDAyLCAweDQ4MWE2ODEwLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAorCTB4NDk0MjVhMDYsIDB4NDk3YTVjMDksIDB4MDIwMWY4MDAsIDB4MDAxMDhmN2QsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHg0MDEyNTgwMCwgMHgwNDAxZjdkYSwKKwkweDQxMmMzMDAwLCAweDU5MmU1ODAwLCAweDA0MDFmN2Q3LCAweDVjMDI1ODAwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NDE3ODE4MDAsIDB4NTkzNDAwMGYsCisJMHg4MDAyNWQ0MCwgMHgwNDAwMDAxMCwgMHg1OTJjMDAwNSwgMHg4MDIwMDU4MCwKKwkweDU5MmMwMDAwLCAweDA0MDAwMDAzLCAweDQxMmMxODAwLCAweDA0MDFmN2Y5LAorCTB4NDk3YTU4MDAsIDB4ODAwYzE5YzAsIDB4MDQwMDAwMDgsIDB4NDgwMDE4MDAsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDAwNCwgMHg0ODBlNjgxMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ4MDI2ODBmLCAweDgwMDAwNTQwLAorCTB4MDQwMjA3ZmQsIDB4NDk3YTY4MTAsIDB4MDQwMWY3ZjksIDB4NTkyYzAwMDgsCisJMHg4MTQ4MDU4MCwgMHgwNDAyMDAwMywgMHg1OTJjMDAwOSwgMHg4MTRjMDU4MCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjNTgwMDAwLCAweDQxM2MxODAwLAorCTB4NDAwYzIwMDAsIDB4NTkzYzAwMDIsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMTgsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAwOCwgMHg4MjBjMGMwMCwgMHgwMDAwMDAwNCwKKwkweDUwMDQwMDAwLCAweDgxNDgwNTgwLCAweDA0MDIwMDA1LCAweDgwMDQxMDAwLAorCTB4NTAwODAwMDAsIDB4ODE0YzA1ODAsIDB4MDQwMDAwMGQsIDB4ODIwNDBjMDAsCisJMHgwMDAwMDAwMiwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmNiwgMHg0MDBjMjAwMCwKKwkweDU4MGMwMDAxLCAweDgwMDAxZDQwLCAweDA0MDIwN2VlLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsCisJMHgwNDAxZjdmZCwgMHg0OTM3Yzg1NywgMHg0YzU4MDAwMCwgMHg0ZDJjMDAwMCwKKwkweDU5MzQwMDBkLCAweDgwMDI1ZDQwLCAweDA0MDIwMDE2LCAweDAyMDFmODAwLAorCTB4MDAxMDA4MmEsIDB4MDQwMDAwMTAsIDB4NDkyZTY4MGQsIDB4NGEwMjU4MDIsCisJMHgwMDAwMDAwMSwgMHg0OTdhNTgwMywgMHg4MzJjMGMwMCwgMHgwMDAwMDAwNCwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDEwLCAweDQ2MDAwODAwLCAweGZmZmZmZmZmLAorCTB4ODAwNDA4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHg1YzAyNTgwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwKKwkweDRkMmMwMDAwLCAweDU5MmU1ODAxLCAweDAyMDFmODAwLCAweDAwMTAwODQzLAorCTB4NWMwMjU4MDAsIDB4MDQwMWY3ZWEsIDB4NGQyYzAwMDAsIDB4NTkzNjU4MGQsCisJMHg4MTJlNTljMCwgMHgwNDAwMDAwNywgMHg0OTM3Yzg1NywgMHg0OTdhNjgwZCwKKwkweDAyMDFmODAwLCAweDAwMTAwODQzLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NTkzNDA0MDUsIDB4NDkzN2M4NTcsCisJMHg0ODAzYzg1NywgMHg4YzAwMDUwOCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDAyMDFmODAwLCAweDAwMTA0ZTBkLCAweDA0MDAwMDExLCAweDU5YTgwODE1LAorCTB4OGMwNDBkMDQsIDB4MDQwMjAwMGUsIDB4NTlhODA4MjYsIDB4OGMwNDBkMDYsCisJMHgwNDAwMDAwYiwgMHg4M2FjMDQwMCwgMHgwMDAwMDdmZSwgMHg1MDAwMDAwMCwKKwkweDgwMDI2ZDQwLCAweDA0MDAwMDA2LCAweDA0MDFmOWE4LCAweDA0MDIwMDA0LAorCTB4NTkzNDAyMDAsIDB4ODQwMDA1NWEsIDB4NDgwMjZhMDAsIDB4NTk5YzAwMTcsCisJMHg4YzAwMDUwOCwgMHgwNDAwMDAxNSwgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwKKwkweDQxN2E4ODAwLCAweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDIwMDBjLAorCTB4MDQwMWY5OWEsIDB4MDQwMjAwMGEsIDB4NTlhODAwMTAsIDB4NTkzNDA4MDIsCisJMHg4MDA0MDU4MCwgMHg4MjAwMDUwMCwgMHgwMGZmZmYwMCwgMHgwNDAyMDAwNCwKKwkweDU5MzQwMjAwLCAweDg0MDAwNTVhLCAweDQ4MDI2YTAwLCAweDgxNDY4ODAwLAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZjAsIDB4MDQwMWY4ODUsIDB4MDQwMDAwMDMsCisJMHg1OWE4MDgzNiwgMHgwNDAxZjAwNiwgMHg1OTljMDAxNywgMHg4YzAwMDUwOCwKIAkweDA0MDAwMDA3LCAweDQyMDAwODAwLCAweDAwMDAwN2QwLCAweDQyMDAxMDAwLAotCTB4MDAxMDQ4NzYsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNmUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMWU0NSwgMHgwNDAxZjAyNywgMHg0MjAwYjAwMCwgMHgwMDAwMDdmMCwKLQkweDgwMDI4ZDgwLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDFlLAotCTB4NTkzNDAyMDAsIDB4OGMwMDA1MWEsIDB4MDQwMDAwMWIsIDB4NTkzNjhjMDMsCi0JMHg0MTdhNzgwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHg0MTc4MzAwMCwKLQkweDAyMDFmODAwLCAweDAwMTBhNDQ2LCAweDU5MzQwMjAwLCAweDg0MDAwNTU4LAotCTB4ODQwMDA1MWEsIDB4NDgwMjZhMDAsIDB4NDkzN2M4NTcsIDB4NGEwMjZjMDAsCi0JMHgwMDAwMDcwNywgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwKLQkweDAwMTA2YWI0LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA2N2ZkLAotCTB4ODAwMDBkODAsIDB4MDIwMWY4MDAsIDB4MDAxMGEyZmYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmM0YiwgMHg4MTQ2ODgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdkZSwKLQkweDVjMDBiMDAwLCAweDVjMDI3ODAwLCAweDVjMDI4ODAwLCAweDVjMDI2ODAwLAorCTB4MDAxMDQ2YzQsIDB4MDIwMWY4MDAsIDB4MDAxMDVkYTcsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwgMHg0ZDM0MDAwMCwgMHg0ZDQ0MDAwMCwKKwkweDRkM2MwMDAwLCAweDRjNTgwMDAwLCAweDQyMDAxMDAwLCAweDAwMTA0NmM0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDVjYzksIDB4NTlhODA4MjYsIDB4OGMwNDBkMDYsCisJMHgwNDAwMDAxNSwgMHgwNDAxZjg2YSwgMHgwNDAwMDAxMywgMHg4M2FlNmMwMCwKKwkweDAwMDAwN2ZlLCAweDUxMzY2ODAwLCAweDU5MzQwMjAwLCAweDg0MDAwNTFhLAorCTB4NDgwMjZhMDAsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDcsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDdkMCwgMHg0MjAwMTAwMCwgMHgwMDEwNDZjNCwKKwkweDAyMDFmODAwLCAweDAwMTA1ZGE3LCAweDAyMDFmODAwLCAweDAwMTAxYmYwLAorCTB4MDQwMWYwMjcsIDB4NDIwMGIwMDAsIDB4MDAwMDA3ZjAsIDB4ODAwMjhkODAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDI2NywgMHgwNDAyMDAxZSwgMHg1OTM0MDIwMCwKKwkweDhjMDAwNTFhLCAweDA0MDAwMDFiLCAweDU5MzY4YzAzLCAweDQxN2E3ODAwLAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4NDE3ODMwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTI1OCwgMHg1OTM0MDIwMCwgMHg4NDAwMDU1OCwgMHg4NDAwMDUxYSwKKwkweDQ4MDI2YTAwLCAweDQ5MzdjODU3LCAweDRhMDI2YzAwLCAweDAwMDAwNzA3LAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDY3ZjYsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjU0MywgMHg0MTdhNjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTBhMGRhLCAweDAyMDFmODAwLCAweDAwMTA2OTgyLAorCTB4ODE0Njg4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZGUsIDB4NWMwMGIwMDAsCisJMHg1YzAyNzgwMCwgMHg1YzAyODgwMCwgMHg1YzAyNjgwMCwgMHg1YzAyNjAwMCwKIAkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAzODA5LCAweDU4MWMwMjAwLAotCTB4ODQwMDA1MWEsIDB4NDgwMDNhMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCi0JMHg0MjAyNjgwMCwgMHgwMDEwYjUyNCwgMHg0OTdhNjgwZSwgMHg0MjAyODgwMCwKLQkweDAwMDAwN2ZmLCAweDAyMDFmODAwLCAweDAwMTA0MmI0LCAweDQ5MzdjODU3LAotCTB4NGEwMjZjMDAsIDB4MDAwMDA2MDYsIDB4NGEwMjY4MDIsIDB4MDBmZmZmZmYsCi0JMHg0YTAyNmEwNCwgMHgwMDAwMDIwMCwgMHg0YTAyNmMwNCwgMHgwMDAwMDAwMiwKLQkweDFjMDFmMDAwLCAweDU5MzAwMDA5LCAweDUwMDAwMDAwLCAweDQ5MzNjODU3LAotCTB4NDgwM2M4NTcsIDB4OGMwMDA1MGUsIDB4MWMwMWYwMDAsIDB4NTkzMDAwMDksCi0JMHg1MDAwMDAwMCwgMHg4YzAwMDUwYSwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NiwKLQkweDA0MDFmOTBmLCAweDA0MDAwMDA2LCAweDU5MzQwNDAwLCAweDgyMDAwZDAwLAotCTB4MDAwMDAwZmYsIDB4ODIwNDE1ODAsIDB4MDAwMDAwMDUsIDB4MWMwMWYwMDAsCi0JMHg0ZDM0MDAwMCwgMHg4M2FjMDQwMCwgMHgwMDAwMDdmZSwgMHg1MDAwMDAwMCwKLQkweDgwMDI2ZDQwLCAweDA0MDAwMDAzLCAweDU5MzQwMjAwLCAweDhjMDAwNTFhLAotCTB4NWMwMjY4MDAsIDB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4NDkzZmM4NTcsCi0JMHg1OTM0MDQwMywgMHg4MWFjMDQwMCwgMHg1MDAwMDAwMCwgMHg4MTM0MDU4MCwKLQkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU5MzQxMjAwLCAweDgxM2U3OWMwLAotCTB4MDQwMDAwMDMsIDB4ODQwODE1NWUsIDB4MDQwMWYwMDIsIDB4ODQwODE1MWUsCi0JMHg0ODBhNmEwMCwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywgMHgwMjAxZjgwMCwKLQkweDAwMTAyMTBhLCAweDA0MDAwMDA2LCAweDU5YTgwODM1LCAweDQyMDAxMDAwLAotCTB4MDAxMDQ5MTAsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNmUsIDB4MWMwMWYwMDAsCi0JMHg0OTM3Yzg1NywgMHg0MjAwMTAwMCwgMHgwMDEwNDkxMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA1ZjkwLCAweDU5YTgxMDI2LCAweDg0MDgxNTEyLCAweDQ4MGI1MDI2LAotCTB4MWMwMWYwMDAsIDB4NGMzODAwMDAsIDB4NGMzNDAwMDAsIDB4NGMyNDAwMDAsCi0JMHg0YzYwMDAwMCwgMHg0MDA4YzAwMCwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDgwMCwKLQkweDA0MDIxMDQ1LCAweDgwMDAyZDgwLCAweDQxNDQyMDAwLCAweDgzNDQ3NDAwLAotCTB4MDAxMGFjMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDA3ZjAsIDB4ODM0NDRjODAsCi0JMHgwMDAwMDdmMCwgMHgwNDAwMTAwMywgMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwKLQkweDUwMzgwMDAwLCAweDgwMDAwNTQwLCAweDA0MDIwMDFlLCAweDQxNDQwMDAwLAotCTB4ODAxMDA1ODAsIDB4MDQwMjAwNDMsIDB4NDAxMDI4MDAsIDB4ODIxMDRjODAsCi0JMHgwMDAwMDdmMCwgMHgwNDAwMTAxNSwgMHg4MjEwNGQ4MCwgMHgwMDAwMDdmYywKLQkweDA0MDIwMDA1LCAweDgyNjA0ZDgwLCAweDAwZmZmZmZjLCAweDA0MDIwMDJhLAotCTB4MDQwMWYwMGUsIDB4ODIxMDRkODAsIDB4MDAwMDA3ZmQsIDB4MDQwMjAwMDUsCi0JMHg4MjYwNGQ4MCwgMHgwMGZmZmZmZCwgMHgwNDAyMDAyMywgMHgwNDAxZjAwNywKLQkweDgyMTA0ZDgwLCAweDAwMDAwN2ZmLCAweDA0MDIwMDFmLCAweDgyNjA0ZDgwLAotCTB4MDBmZmZmZmYsIDB4MDQwMjAwMWMsIDB4ODQxNDJkNWUsIDB4MDQwMWYwMjksCi0JMHg0MDAwNjgwMCwgMHg1ODM0MzAwMiwgMHg4MjE4MzUwMCwgMHgwMGZmZmZmZiwKLQkweDQwMTgwMDAwLCAweDgwNjAwNTgwLCAweDA0MDIwMDE5LCAweDQwMTAwMDAwLAotCTB4ODE0NDA1ODAsIDB4MDQwMjAwMGEsIDB4NDAzNjY4MDAsIDB4OGMyMDQ1MDgsCi0JMHgwNDAwMDA1MywgMHgwNDAxZmY4YSwgMHgwNDAyMDA1MSwgMHg0OTQ3Yzg1NywKLQkweDQyMDAwMDAwLCAweDAwMDAwMDFkLCAweDA0MDFmMDRlLCAweDQ5NDdjODU3LAotCTB4NDgwYmM4NTcsIDB4NDgyM2M4NTcsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMWEsCi0JMHgwNDAxZjA0OCwgMHg0OTQ3Yzg1NywgMHg0ODYzYzg1NywgMHg0ODEzYzg1NywKLQkweDQyMDAwMDAwLCAweDAwMDAwMDE5LCAweDA0MDFmMDQyLCAweDQwMTAwMDAwLAotCTB4ODE0NDA1ODAsIDB4MDQwMjAwMDcsIDB4NTgzNDMwMDIsIDB4NDk0N2M4NTcsCi0JMHg0ODFiYzg1NywgMHg0MjAwMDAwMCwgMHgwMDAwMDAxYiwgMHgwNDAxZjAzOSwKLQkweDgwMTAyMDAwLCAweDgwMzg3MDAwLCAweDgzNDQ0YzgwLCAweDAwMDAwN2YwLAotCTB4MDQwMDEwMDksIDB4ODIxMDRkODAsIDB4MDAwMDA4MDAsIDB4MDQwMjAwMGMsCi0JMHg0MjAwMjAwMCwgMHgwMDAwMDdmMCwgMHg0MjAwNzAwMCwgMHgwMDEwYjNmMCwKLQkweDA0MDFmMDA3LCAweDgyMTA0ZDgwLCAweDAwMDAwN2YwLCAweDA0MDIwMDA0LAotCTB4NDE3ODIwMDAsIDB4NDIwMDcwMDAsIDB4MDAxMGFjMDAsIDB4ODA1OGIwNDAsCi0JMHgwNDAyMDdhNCwgMHg4MDE0MjljMCwgMHgwNDAyMDAwNywgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDQ5NDdjODU3LCAweDQyMDAwMDAwLCAweDAwMDAwMDBhLAotCTB4MDQwMWYwMWMsIDB4NGQyYzAwMDAsIDB4NGMxODAwMDAsIDB4NDA2MDMwMDAsCi0JMHgwNDAxZmMxMiwgMHg0OTQ3Yzg1NywgMHg0OTM3Yzg1NywgMHg1YzAwMzAwMCwKLQkweDVjMDI1ODAwLCAweDA0MDIwN2Y0LCAweDQ5N2E2YTEyLCAweDU5YTgwMDI2LAotCTB4OGMwMDA1MGEsIDB4MDQwMjAwMGQsIDB4ODI2MDA1MDAsIDB4MDBmZmZmMDAsCi0JMHgwNDAwMDAwNiwgMHg1OWE4NDgxMCwgMHg4MjI0NGQwMCwgMHgwMGZmZmYwMCwKLQkweDgwMjQwNTgwLCAweDA0MDIwMDA1LCAweDgyNjAwNTAwLCAweDAwMDAwMGZmLAotCTB4ODAwMDAwZDAsIDB4NDgwMjZhMTIsIDB4NDg2MjY4MDIsIDB4ODAwMDA1ODAsCi0JMHg4MDAwMDU0MCwgMHg1YzAwYzAwMCwgMHg1YzAwNDgwMCwgMHg1YzAwNjgwMCwKLQkweDVjMDA3MDAwLCAweDFjMDFmMDAwLCAweDU5MzQwMDBmLCAweDU5MzQxNDBiLAotCTB4ODAwODEwNDAsIDB4MDQwMDEwMDIsIDB4NDgwYTZjMGIsIDB4ODAwMDA1NDAsCi0JMHgwMjAyMDgwMCwgMHgwMDAyMDI1MywgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NywKLQkweDQ5NDdjODU3LCAweDRjMzAwMDAwLCAweDgyMDA2NTAwLCAweDAwMDAwMDMwLAotCTB4MDQwMDAwMDYsIDB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk0MmEsCi0JMHg1YzAwMDAwMCwgMHgwNDAyMDAwYiwgMHg4YzAwMDUwZSwgMHgwNDAwMDAwNiwKLQkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDA2LCAweDQ5MzdjODU3LAotCTB4MDQwMWZjMmYsIDB4ODAwMDA1ODAsIDB4NWMwMDYwMDAsIDB4MWMwMWYwMDAsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmYywgMHg0ODAzYzg1NywKLQkweDRjNTgwMDAwLCAweDRkNDQwMDAwLCAweDQwMDAxMDAwLCAweDgwMDAwZDgwLAotCTB4NDIwMGIwMDAsIDB4MDAwMDA3ZjAsIDB4NGMwNDAwMDAsIDB4NDAwNjg4MDAsCi0JMHg0YzA4MDAwMCwgMHg0MDA4MDAwMCwgMHgwNDAxZmZkZCwgMHg1YzAwMTAwMCwKLQkweDVjMDAwODAwLCAweDgwMDQwODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2Y3LAotCTB4NWMwMjg4MDAsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsCi0JMHg1OTM0MDQwMCwgMHg4MjAwYmQ4MCwgMHgwMDAwMDYwNiwgMHg1YzAwYjgwMCwKLQkweDFjMDFmMDAwLCAweDRjNWMwMDAwLCAweDU5MzQwNDAwLCAweDgyMDBiZDgwLAotCTB4MDAwMDA0MDQsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsCi0JMHg1OTM0MDQwMCwgMHg4MjAwYmQ4MCwgMHgwMDAwMDQwNCwgMHgwNDAwMDAwMywKKwkweDg0MDAwNTFhLCAweDQ4MDAzYTAwLCAweDFjMDFmMDAwLCAweDQyMDI2ODAwLAorCTB4MDAxMGIzMjAsIDB4NDk3YTY4MGUsIDB4NDIwMjg4MDAsIDB4MDAwMDA3ZmYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDBlNCwgMHg0OTM3Yzg1NywgMHg0YTAyNmMwMCwKKwkweDAwMDAwNjA2LCAweDRhMDI2ODAyLCAweDAwZmZmZmZmLCAweDRhMDI2YTA0LAorCTB4MDAwMDAyMDAsIDB4NGEwMjZjMDQsIDB4MDAwMDAwMDIsIDB4MWMwMWYwMDAsCisJMHg1OTMwMDAwOSwgMHg1MDAwMDAwMCwgMHg0OTMzYzg1NywgMHg0ODAzYzg1NywKKwkweDhjMDAwNTBlLCAweDFjMDFmMDAwLCAweDU5MzAwMDA5LCAweDUwMDAwMDAwLAorCTB4OGMwMDA1MGEsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTYsIDB4MDQwMWY5MGYsCisJMHgwNDAwMDAwNiwgMHg1OTM0MDQwMCwgMHg4MjAwMGQwMCwgMHgwMDAwMDBmZiwKKwkweDgyMDQxNTgwLCAweDAwMDAwMDA1LCAweDFjMDFmMDAwLCAweDRkMzQwMDAwLAorCTB4ODNhYzA0MDAsIDB4MDAwMDA3ZmUsIDB4NTAwMDAwMDAsIDB4ODAwMjZkNDAsCisJMHgwNDAwMDAwMywgMHg1OTM0MDIwMCwgMHg4YzAwMDUxYSwgMHg1YzAyNjgwMCwKKwkweDFjMDFmMDAwLCAweDQ5MzdjODU3LCAweDQ5M2ZjODU3LCAweDU5MzQwNDAzLAorCTB4ODFhYzA0MDAsIDB4NTAwMDAwMDAsIDB4ODEzNDA1ODAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDYxNSwgMHg1OTM0MTIwMCwgMHg4MTNlNzljMCwgMHgwNDAwMDAwMywKKwkweDg0MDgxNTVlLCAweDA0MDFmMDAyLCAweDg0MDgxNTFlLCAweDQ4MGE2YTAwLAorCTB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDFlYjAsCisJMHgwNDAwMDAwNiwgMHg1OWE4MDgzNSwgMHg0MjAwMTAwMCwgMHgwMDEwNDc1ZiwKKwkweDAyMDFmODAwLCAweDAwMTA1ZGE3LCAweDFjMDFmMDAwLCAweDQ5MzdjODU3LAorCTB4NDIwMDEwMDAsIDB4MDAxMDQ3NWYsIDB4MDIwMWY4MDAsIDB4MDAxMDVjYzksCisJMHg1OWE4MTAyNiwgMHg4NDA4MTUxMiwgMHg0ODBiNTAyNiwgMHgxYzAxZjAwMCwKKwkweDRjMzgwMDAwLCAweDRjMzQwMDAwLCAweDRjMjQwMDAwLCAweDRjNjAwMDAwLAorCTB4NDAwOGMwMDAsIDB4ODM0NDA0ODAsIDB4MDAwMDA4MDAsIDB4MDQwMjEwNDUsCisJMHg4MDAwMmQ4MCwgMHg0MTQ0MjAwMCwgMHg4MzQ0NzQwMCwgMHgwMDEwYWEwMCwKKwkweDQyMDBiMDAwLCAweDAwMDAwN2YwLCAweDgzNDQ0YzgwLCAweDAwMDAwN2YwLAorCTB4MDQwMDEwMDMsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsIDB4NTAzODAwMDAsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDAxZSwgMHg0MTQ0MDAwMCwgMHg4MDEwMDU4MCwKKwkweDA0MDIwMDQzLCAweDQwMTAyODAwLCAweDgyMTA0YzgwLCAweDAwMDAwN2YwLAorCTB4MDQwMDEwMTUsIDB4ODIxMDRkODAsIDB4MDAwMDA3ZmMsIDB4MDQwMjAwMDUsCisJMHg4MjYwNGQ4MCwgMHgwMGZmZmZmYywgMHgwNDAyMDAyYSwgMHgwNDAxZjAwZSwKKwkweDgyMTA0ZDgwLCAweDAwMDAwN2ZkLCAweDA0MDIwMDA1LCAweDgyNjA0ZDgwLAorCTB4MDBmZmZmZmQsIDB4MDQwMjAwMjMsIDB4MDQwMWYwMDcsIDB4ODIxMDRkODAsCisJMHgwMDAwMDdmZiwgMHgwNDAyMDAxZiwgMHg4MjYwNGQ4MCwgMHgwMGZmZmZmZiwKKwkweDA0MDIwMDFjLCAweDg0MTQyZDVlLCAweDA0MDFmMDI5LCAweDQwMDA2ODAwLAorCTB4NTgzNDMwMDIsIDB4ODIxODM1MDAsIDB4MDBmZmZmZmYsIDB4NDAxODAwMDAsCisJMHg4MDYwMDU4MCwgMHgwNDAyMDAxOSwgMHg0MDEwMDAwMCwgMHg4MTQ0MDU4MCwKKwkweDA0MDIwMDBhLCAweDQwMzY2ODAwLCAweDhjMjA0NTA4LCAweDA0MDAwMDUzLAorCTB4MDQwMWZmOGEsIDB4MDQwMjAwNTEsIDB4NDk0N2M4NTcsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAxZCwgMHgwNDAxZjA0ZSwgMHg0OTQ3Yzg1NywgMHg0ODBiYzg1NywKKwkweDQ4MjNjODU3LCAweDQyMDAwMDAwLCAweDAwMDAwMDFhLCAweDA0MDFmMDQ4LAorCTB4NDk0N2M4NTcsIDB4NDg2M2M4NTcsIDB4NDgxM2M4NTcsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAxOSwgMHgwNDAxZjA0MiwgMHg0MDEwMDAwMCwgMHg4MTQ0MDU4MCwKKwkweDA0MDIwMDA3LCAweDU4MzQzMDAyLCAweDQ5NDdjODU3LCAweDQ4MWJjODU3LAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMWIsIDB4MDQwMWYwMzksIDB4ODAxMDIwMDAsCisJMHg4MDM4NzAwMCwgMHg4MzQ0NGM4MCwgMHgwMDAwMDdmMCwgMHgwNDAwMTAwOSwKKwkweDgyMTA0ZDgwLCAweDAwMDAwODAwLCAweDA0MDIwMDBjLCAweDQyMDAyMDAwLAorCTB4MDAwMDA3ZjAsIDB4NDIwMDcwMDAsIDB4MDAxMGIxZjAsIDB4MDQwMWYwMDcsCisJMHg4MjEwNGQ4MCwgMHgwMDAwMDdmMCwgMHgwNDAyMDAwNCwgMHg0MTc4MjAwMCwKKwkweDQyMDA3MDAwLCAweDAwMTBhYTAwLCAweDgwNThiMDQwLCAweDA0MDIwN2E0LAorCTB4ODAxNDI5YzAsIDB4MDQwMjAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsCisJMHg0OTQ3Yzg1NywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwYSwgMHgwNDAxZjAxYywKKwkweDRkMmMwMDAwLCAweDRjMTgwMDAwLCAweDQwNjAzMDAwLCAweDA0MDFmYzE5LAorCTB4NDk0N2M4NTcsIDB4NDkzN2M4NTcsIDB4NWMwMDMwMDAsIDB4NWMwMjU4MDAsCisJMHgwNDAyMDdmNCwgMHg0OTdhNmExMiwgMHg1OWE4MDAyNiwgMHg4YzAwMDUwYSwKKwkweDA0MDIwMDBkLCAweDgyNjAwNTAwLCAweDAwZmZmZjAwLCAweDA0MDAwMDA2LAorCTB4NTlhODQ4MTAsIDB4ODIyNDRkMDAsIDB4MDBmZmZmMDAsIDB4ODAyNDA1ODAsCisJMHgwNDAyMDAwNSwgMHg4MjYwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MDAwMDBkMCwKKwkweDQ4MDI2YTEyLCAweDQ4NjI2ODAyLCAweDgwMDAwNTgwLCAweDgwMDAwNTQwLAorCTB4NWMwMGMwMDAsIDB4NWMwMDQ4MDAsIDB4NWMwMDY4MDAsIDB4NWMwMDcwMDAsCisJMHgxYzAxZjAwMCwgMHg1OTM0MDAwZiwgMHg1OTM0MTQwYiwgMHg4MDA4MTA0MCwKKwkweDA0MDAxMDAyLCAweDQ4MGE2YzBiLCAweDgwMDAwNTQwLCAweDAyMDIwODAwLAorCTB4MDAwMjAyNzUsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4NDk0N2M4NTcsCisJMHg0YzMwMDAwMCwgMHg4MjAwNjUwMCwgMHgwMDAwMDAzMCwgMHgwNDAwMDAwNiwKKwkweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA5MWYzLCAweDVjMDAwMDAwLAorCTB4MDQwMjAwMGIsIDB4OGMwMDA1MGUsIDB4MDQwMDAwMDYsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI2NywgMHgwNDAyMDAwNiwgMHg0OTM3Yzg1NywgMHgwNDAxZmMzNiwKKwkweDgwMDAwNTgwLCAweDVjMDA2MDAwLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWY3ZmMsIDB4NDgwM2M4NTcsIDB4NGM1ODAwMDAsCisJMHg0ZDQ0MDAwMCwgMHg0MDAwMTAwMCwgMHg4MDAwMGQ4MCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwN2YwLCAweDRjMDQwMDAwLCAweDQwMDY4ODAwLCAweDRjMDgwMDAwLAorCTB4NDAwODAwMDAsIDB4MDQwMWZmZGQsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsCisJMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmNywgMHg1YzAyODgwMCwKKwkweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDRjNWMwMDAwLCAweDU5MzQwNDAwLAogCTB4ODIwMGJkODAsIDB4MDAwMDA2MDYsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsCi0JMHg0YzVjMDAwMCwgMHg0YzYwMDAwMCwgMHg1OTM0MDQwMCwgMHg4MjAwYmQwMCwKLQkweDAwMDBmZjAwLCAweDgyNWNjNTgwLCAweDAwMDAwNDAwLCAweDA0MDAwMDAzLAotCTB4ODI1Y2M1ODAsIDB4MDAwMDA2MDAsIDB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsCi0JMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwgMHg1OTM0MDQwMCwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMGZmLCAweDgyMDBiZDgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDAzLAotCTB4ODIwMGJkODAsIDB4MDAwMDAwMDUsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsCi0JMHg0YzVjMDAwMCwgMHg1OTM0MDQwMCwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwKLQkweDg0MDBiOWMwLCAweDgwNWMwNTgwLCAweDQ5MzdjODU3LCAweDQ4MDNjODU3LAotCTB4NDgwMjZjMDAsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsCi0JMHg0YzA4MDAwMCwgMHg1OTJjMDIwNywgMHg4YzAwMDUwYywgMHgwNDAwMDAwZiwKLQkweDU5MmU4YzA2LCAweDgyMDAwNTAwLCAweDAwMDAwMDgwLCAweDg0MDAwNTQ4LAotCTB4NGQzYzAwMDAsIDB4NDIwMjc4MDAsIDB4MDAwMDEwMDAsIDB4MDQwMWZmOTAsCi0JMHg1YzAyNzgwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAwMTAwMCwKLQkweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDgwMDAwNTgwLCAweDA0MDFmN2ZjLAotCTB4NTkyYzA0MGIsIDB4ODIwMDA1MDAsIDB4MDAwMGUwMDAsIDB4ODIwMDA1ODAsCi0JMHgwMDAwNjAwMCwgMHgwNDAwMDAxOSwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywKLQkweDA0MDAwMDE2LCAweDgzNmMwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMGZmLAotCTB4NTlhODAwMjYsIDB4ODIwMDBkMDAsIDB4MDAwMDAwMzgsIDB4MDQwMjAwMDUsCi0JMHg1OWE4MDgzMiwgMHg4MDA0MDljMCwgMHgwNDAwMDAwYywgMHgwNDAxZjBmNywKLQkweDgyMDAwZDAwLCAweDAwMDAwMDAzLCAweDgyMDQwZDgwLCAweDAwMDAwMDAzLAotCTB4MDQwMjAwZjIsIDB4ODIwMDBkMDAsIDB4MDAwMDAwMjgsIDB4MDQwMjAwMDMsCi0JMHg4YzAwMDUwYywgMHgwNDAwMDBlZCwgMHg1OTJjMTAwYSwgMHg4MjA4MDUwMCwKLQkweGZmMDAwMDAwLCAweDA0MDIwMGNlLCAweDU5YTgwMDEwLCAweDgwMDgwNTgwLAotCTB4MDQwMDAwYzgsIDB4NTkyYzBjMGIsIDB4ODIwNDBkMDAsIDB4MDAwMGUwMDAsCi0JMHg4MjA0MDQ4MCwgMHgwMDAwODAwMCwgMHgwNDAyMTBjOCwgMHg1OTJlOGMwNiwKLQkweDgzNDQwNDgwLCAweDAwMDAwODAwLCAweDA0MDAxMDA3LCAweDgzNDQwNTgwLAotCTB4MDAwMGZmZmYsIDB4MDQwMjAwYWYsIDB4ODAwNDA5YzAsIDB4MDQwMjAwZjcsCi0JMHgwNDAxZjBhYywgMHg4MDA0MDljMCwgMHgwNDAyMDBmNCwgMHg0MTc4NDAwMCwKLQkweDA0MDFmZWFkLCAweDA0MDIwMGRiLCAweDQyMDI3MDAwLCAweDAwMDAwMDUzLAotCTB4NTkyYzI0MDksIDB4ODIxMDA1MDAsIDB4ZmZmZmZmMDAsIDB4MDQwMjAwYWEsCi0JMHg0ODEzYzg1NywgMHg1OTJjMDAwYywgMHg4MDAwMDFjMCwgMHgwNDAwMDA4MywKLQkweDgyMTAwNTgwLCAweDAwMDAwMDA0LCAweDA0MDAwMGEwLCAweDgyMTAwNTgwLAotCTB4MDAwMDAwNTEsIDB4MDQwMDAwOWQsIDB4ODIxMDA1ODAsIDB4MDAwMDAwMDMsCi0JMHgwNDAwMDAxNiwgMHg4MjEwMDU4MCwgMHgwMDAwMDAyMCwgMHgwNDAwMDA0YiwKLQkweDgyMTAwNTgwLCAweDAwMDAwMDI0LCAweDA0MDAwMDQyLCAweDgyMTAwNTgwLAotCTB4MDAwMDAwMjEsIDB4MDQwMDAwNDIsIDB4ODIxMDA1ODAsIDB4MDAwMDAwNTAsCi0JMHgwNDAwMDAzNywgMHg4MjEwMDU4MCwgMHgwMDAwMDA1MiwgMHgwNDAwMDAzMSwKLQkweDgyMTAwNTgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDZiLCAweDQyMDI3MDAwLAotCTB4MDAwMDAwMDEsIDB4MDQwMWYwMWIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMDIsCi0JMHg1OWE4MDAwNSwgMHg4YzAwMDUxNCwgMHgwNDAwMDAxNiwgMHgwNDAxZmY0YywKLQkweDA0MDAwMDE0LCAweDU5MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLAotCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMjAwMGMsIDB4NTlhODAwMjYsCi0JMHg4YzAwMDUwNiwgMHgwNDAyMDA2ZiwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwOCwKLQkweDU5MzQwMDAyLCAweDgyMDAwNTAwLCAweDAwZmYwMDAwLCAweDgyMDAwNTgwLAotCTB4MDBmZjAwMDAsIDB4MDQwMDAwMDMsIDB4MDQwMWY5YmYsIDB4MDQwMjAwNjUsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDA3ZSwgMHg0YTAyNjQwNiwKLQkweDAwMDAwMDEwLCAweDQ5MzY2MDA5LCAweDQyMDAwODAwLCAweDAwMDAwMDAzLAotCTB4ODMzODA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMDMsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwNDAxZjA0NCwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDAwLCAweDA0MDFmMDAzLCAweDQyMDI3MDAwLAotCTB4MDAwMDAwMDQsIDB4MDQwMWZmMzcsIDB4MDQwMjAwNzEsIDB4MDQwMWYwMzYsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAzMywgMHgwNDAxZjAwNiwgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDA1LCAweDA0MDFmMDAzLCAweDQyMDI3MDAwLCAweDAwMDAwMDAzLAotCTB4MDQwMWZmMjMsIDB4MDQwMjAwNjYsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsCi0JMHgwNDAwMDAxNiwgMHgwNDAxZmYxMiwgMHgwNDAwMDAxNCwgMHg1OTM0MDIxMiwKKwkweDRjNWMwMDAwLCAweDU5MzQwNDAwLCAweDgyMDBiZDgwLCAweDAwMDAwNDA0LAorCTB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NTkzNDA0MDAsCisJMHg4MjAwYmQ4MCwgMHgwMDAwMDQwNCwgMHgwNDAwMDAwMywgMHg4MjAwYmQ4MCwKKwkweDAwMDAwNjA2LCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDRjNWMwMDAwLAorCTB4NGM2MDAwMDAsIDB4NTkzNDA0MDAsIDB4ODIwMGJkMDAsIDB4MDAwMGZmMDAsCisJMHg4MjVjYzU4MCwgMHgwMDAwMDQwMCwgMHgwNDAwMDAwMywgMHg4MjVjYzU4MCwKKwkweDAwMDAwNjAwLCAweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLAorCTB4NGM1YzAwMDAsIDB4NTkzNDA0MDAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwYmQ4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwMywgMHg4MjAwYmQ4MCwKKwkweDAwMDAwMDA1LCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDVjMDAwMDAwLAorCTB4NGMwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NGM1YzAwMDAsIDB4NTkzNDA0MDAsCisJMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHg4NDAwYjljMCwgMHg4MDVjMDU4MCwKKwkweDQ5MzdjODU3LCAweDQ4MDNjODU3LCAweDQ4MDI2YzAwLCAweDVjMDBiODAwLAorCTB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4NTkyYzAyMDcsCisJMHg4YzAwMDUwYywgMHgwNDAwMDAwZiwgMHg1OTJlOGMwNiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDgwLCAweDg0MDAwNTQ4LCAweDRkM2MwMDAwLCAweDQyMDI3ODAwLAorCTB4MDAwMDEwMDAsIDB4MDQwMWZmOGQsIDB4NWMwMjc4MDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKKwkweDgwMDAwNTgwLCAweDA0MDFmN2ZjLCAweDU5MmMwNDBiLCAweDgyMDAwNTAwLAorCTB4MDAwMGUwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDYwMDAsIDB4MDQwMDAwMTksCisJMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAxNiwgMHg4MzZjMDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDIwMTA2LCAweDU5YTgwMDI2LCAweDgyMDAwZDAwLAorCTB4MDAwMDAwMzgsIDB4MDQwMjAwMDUsIDB4NTlhODA4MzIsIDB4ODAwNDA5YzAsCisJMHgwNDAwMDAwYywgMHgwNDAxZjBmZSwgMHg4MjAwMGQwMCwgMHgwMDAwMDAwMywKKwkweDgyMDQwZDgwLCAweDAwMDAwMDAzLCAweDA0MDIwMGY5LCAweDgyMDAwZDAwLAorCTB4MDAwMDAwMjgsIDB4MDQwMjAwMDMsIDB4OGMwMDA1MGMsIDB4MDQwMDAwZjQsCisJMHg1OTJjMTAwYSwgMHg4MjA4MDUwMCwgMHhmZjAwMDAwMCwgMHgwNDAyMDBkMiwKKwkweDU5YTgwMDEwLCAweDgwMDgwNTgwLCAweDA0MDAwMGNjLCAweDU5MmMwYzBiLAorCTB4ODIwNDBkMDAsIDB4MDAwMGUwMDAsIDB4ODIwNDA0ODAsIDB4MDAwMDgwMDAsCisJMHgwNDAyMTBjYywgMHg1OTJlOGMwNiwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDgwMCwKKwkweDA0MDAxMDA3LCAweDgzNDQwNTgwLCAweDAwMDBmZmZmLCAweDA0MDIwMGIzLAorCTB4ODAwNDA5YzAsIDB4MDQwMjAwZmUsIDB4MDQwMWYwYjAsIDB4ODAwNDA5YzAsCisJMHgwNDAyMDBmYiwgMHg0MTc4NDAwMCwgMHgwNDAxZmVhYSwgMHgwNDAyMDBlMiwKKwkweDU5MzQyMjA0LCAweDU5MmMwMDBkLCAweDgwMTAwNDgwLCAweDA0MDAxMGJjLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNTMsIDB4NTkyYzI0MDksIDB4ODIxMDA1MDAsCisJMHhmZmZmZmYwMCwgMHgwNDAyMDBhYSwgMHg0ODEzYzg1NywgMHg1OTJjMDAwYywKKwkweDgwMDAwMWMwLCAweDA0MDAwMDgzLCAweDgyMTAwNTgwLCAweDAwMDAwMDA0LAorCTB4MDQwMDAwYTAsIDB4ODIxMDA1ODAsIDB4MDAwMDAwNTEsIDB4MDQwMDAwOWQsCisJMHg4MjEwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAxNiwgMHg4MjEwMDU4MCwKKwkweDAwMDAwMDIwLCAweDA0MDAwMDRiLCAweDgyMTAwNTgwLCAweDAwMDAwMDI0LAorCTB4MDQwMDAwNDIsIDB4ODIxMDA1ODAsIDB4MDAwMDAwMjEsIDB4MDQwMDAwNDIsCisJMHg4MjEwMDU4MCwgMHgwMDAwMDA1MCwgMHgwNDAwMDAzNywgMHg4MjEwMDU4MCwKKwkweDAwMDAwMDUyLCAweDA0MDAwMDMxLCAweDgyMTAwNTgwLCAweDAwMDAwMDA1LAorCTB4MDQwMjAwNmIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMWIsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDAwMiwgMHg1OWE4MDA2ZiwgMHg4YzAwMDUwMiwKKwkweDA0MDAwMDE2LCAweDA0MDFmZjQ1LCAweDA0MDAwMDE0LCAweDU5MzQwMjEyLAogCTB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsCi0JMHgwNDAyMDAwYywgMHg1OWE4MDAyNiwgMHg4YzAwMDUwNiwgMHgwNDAyMDAzNSwKKwkweDA0MDIwMDBjLCAweDU5YTgwMDI2LCAweDhjMDAwNTA2LCAweDA0MDIwMDZmLAogCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDgsIDB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsCiAJMHgwMGZmMDAwMCwgMHg4MjAwMDU4MCwgMHgwMGZmMDAwMCwgMHgwNDAwMDAwMywKLQkweDA0MDFmOTg1LCAweDA0MDIwMDJiLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAotCTB4MDQwMDAwNDQsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMTAsIDB4NDkzNjYwMDksCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDAwMywKLQkweDA0MDAwMDAzLCAweDQyMDAwODAwLCAweDAwMDAwMDA5LCAweDAyMDFmODAwLAotCTB4MDAxMDQ1NzEsIDB4MDQwMWYwMGEsIDB4ODIxMDI1ODAsIDB4MDAwMDAwMTEsCi0JMHgwNDAyMDAyZCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAzMSwKLQkweDRhMDI2NDA2LCAweDAwMDAwMDEwLCAweDQ5MzY2MDA5LCAweDQ5MmU2MDA4LAotCTB4NDkzMjU4MDgsIDB4ODEzNjY5YzAsIDB4MDQwMDAwMDcsIDB4NTkyYzBjMGIsCi0JMHg4YzA0MGQxOCwgMHgwNDAwMDAwNCwgMHg1OTM0MDIwMCwgMHg4NDAwMDUxNCwKLQkweDQ4MDI2YTAwLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDgwMDAwNTgwLAotCTB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZmQsCi0JMHg0MjAwMTAwMCwgMHgwMDAwMDAwYSwgMHgwNDAxZjAxNSwgMHg0MjAwMTAwMCwKLQkweDAwMDAwMDEwLCAweDA0MDFmMDEyLCAweDQyMDAxMDAwLCAweDAwMDAwMDE2LAotCTB4MDQwMWYwMGYsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTcsIDB4MDQwMWYwMGMsCi0JMHg0MjAwMTAwMCwgMHgwMDAwMDAxOCwgMHgwNDAxZjAwOSwgMHg0MjAwMTAwMCwKLQkweDAwMDAwMDFiLCAweDA0MDFmMDA2LCAweDQyMDAxMDAwLCAweDAwMDAwMDFlLAotCTB4MDQwMWYwMDMsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMjAsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAxOSwgMHg0MjAyODAwMCwgMHgwMDAwMDAzMSwgMHgwNDAxZjdlMiwKLQkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDA0MDFmMDAzLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMGEsIDB4NDE3ODEwMDAsIDB4MDQwMWY3ZjcsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwOSwgMHg1OTM0MTQwMCwgMHgwNDAxZjdmMywgMHg0MjAyODAwMCwKLQkweDAwMDAwMDA4LCAweDA0MDFmMDA1LCAweDQyMDAwODAwLCAweDAwMDAwMDA3LAotCTB4NDE2YzEwMDAsIDB4MDQwMWY3ZWMsIDB4NDE3ODA4MDAsIDB4NDE3ODEwMDAsCi0JMHgwNDAxZjdjZCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjdmYiwKLQkweDgyMDA0ZDgwLCAweDAwMDAwMDFkLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAotCTB4ODIwMDRkODAsIDB4MDAwMDAwMWEsIDB4MDQwMjAwMDQsIDB4NDAxMDEwMDAsCi0JMHg0MDAwMDgwMCwgMHgwNDAxZjdkYywgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxYiwKLQkweDA0MDIwMDAzLCAweDQwMTgxMDAwLCAweDA0MDFmN2ZhLCAweDgyMDA0ZDgwLAotCTB4MDAwMDAwMWMsIDB4MDQwMDA3ZjcsIDB4ODIwMDRkODAsIDB4MDAwMDAwMTksCi0JMHgwNDAwMDdiOCwgMHgwNDAxZjdkNiwgMHg1OTJlNjAwOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA5NDFhLCAweDA0MDAwN2I2LCAweDU5MzAwYzA2LCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMTEsIDB4MDQwMjA3ZDYsIDB4ODM0NDA1ODAsIDB4MDAwMGZmZmYsCi0JMHgwNDAyMDAwNSwgMHg1OTMyNjgwOSwgMHg4MTM2NjljMCwgMHgwNDAwMDAwZSwKLQkweDA0MDFmN2NmLCAweDU5MmMxMDBhLCAweDgyMDgxNTAwLCAweDAwZmZmZmZmLAotCTB4NDE3ODQwMDAsIDB4MDQwMWZkYTgsIDB4MDQwMjA3ZDYsIDB4NTkzMDAwMDksCi0JMHg4MDAwMDFjMCwgMHgwNDAwMDAwMywgMHg4MTM0MDU4MCwgMHgwNDAyMDdjNCwKLQkweDQ5MzY2MDA5LCAweDU5MmMwYzBiLCAweDgyMDQxNTAwLCAweDAwMDBlMDAwLAotCTB4ODIwODA1ODAsIDB4MDAwMDYwMDAsIDB4MDQwMDAwMDksIDB4NTkzMDBhMDMsCi0JMHg4MjA0MDU4MCwgMHgwMDAwMDAwNywgMHgwNDAyMDdiOSwgMHg0OTJlNjAwOCwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDU0LCAweDA0MDFmNzdmLCAweDAyMDFmODAwLAotCTB4MDAxMGE4ZDQsIDB4MDQwMDA3YmMsIDB4MDQwMWY3YjEsIDB4NDkyZmM4NTcsCi0JMHg1OWE4MDAyMSwgMHg4MDAwMDFjMCwgMHgwNDAyMDA3MywgMHg1OTJlNjAwOCwKLQkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA5NDFhLCAweDA0MDAwMDQxLAotCTB4NTkzMDE0MDYsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMjAwNWIsCisJMHgwNDAxZjlkNiwgMHgwNDAyMDA2NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwKKwkweDA0MDAwMDgxLCAweDRhMDI2NDA2LCAweDAwMDAwMDEwLCAweDQ5MzY2MDA5LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4ODMzODA1ODAsIDB4MDAwMDAwMDIsCisJMHgwNDAwMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2M3LCAweDA0MDFmMDQ0LCAweDQyMDI3MDAwLCAweDAwMDAwMDAwLAorCTB4MDQwMWYwMDMsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMDQsIDB4MDQwMWZmMzAsCisJMHgwNDAyMDA3NCwgMHgwNDAxZjAzNiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzMywKKwkweDA0MDFmMDA2LCAweDQyMDI3MDAwLCAweDAwMDAwMDA1LCAweDA0MDFmMDAzLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMDMsIDB4MDQwMWZmMWMsIDB4MDQwMjAwNjksCisJMHg1OWE4MDA2ZiwgMHg4YzAwMDUwMiwgMHgwNDAwMDAxNiwgMHgwNDAxZmYwYiwKKwkweDA0MDAwMDE0LCAweDU5MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMjAwMGMsIDB4NTlhODAwMjYsCisJMHg4YzAwMDUwNiwgMHgwNDAyMDAzNSwgMHg0MjAwMTAwMCwgMHgwMDAwMDAwOCwKKwkweDU5MzQwMDAyLCAweDgyMDAwNTAwLCAweDAwZmYwMDAwLCAweDgyMDAwNTgwLAorCTB4MDBmZjAwMDAsIDB4MDQwMDAwMDMsIDB4MDQwMWY5OWMsIDB4MDQwMjAwMmIsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwNDAwMDA0NywgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDEwLCAweDQ5MzY2MDA5LCAweDQyMDAwODAwLCAweDAwMDAwMDA1LAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDMsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHgwNDAxZjAwYSwKKwkweDgyMTAyNTgwLCAweDAwMDAwMDExLCAweDA0MDIwMDMwLCAweDAyMDFmODAwLAorCTB4MDAwMjA4OTIsIDB4MDQwMDAwMzQsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMTAsCisJMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwgMHg0OTMyNTgwOCwgMHg4MTM2NjljMCwKKwkweDA0MDAwMDA3LCAweDU5MmMwYzBiLCAweDhjMDQwZDE4LCAweDA0MDAwMDA0LAorCTB4NTkzNDAyMDAsIDB4ODQwMDA1MTQsIDB4NDgwMjZhMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDhkOCwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDA0MDFmN2ZkLCAweDQyMDAxMDAwLCAweDAwMDAwMDBhLAorCTB4MDQwMWYwMTgsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMWYwMTUsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAxNiwgMHgwNDAxZjAxMiwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDE3LCAweDA0MDFmMDBmLCAweDQyMDAxMDAwLCAweDAwMDAwMDE4LAorCTB4MDQwMWYwMGMsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMWIsIDB4MDQwMWYwMDksCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAxZSwgMHgwNDAxZjAwNiwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDI0LCAweDA0MDFmMDAzLCAweDQyMDAxMDAwLCAweDAwMDAwMDIwLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMTksIDB4NDIwMjgwMDAsIDB4MDAwMDAwMzEsCisJMHgwNDAxZjdkZiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwNDAxZjAwMywKKwkweDQyMDAwODAwLCAweDAwMDAwMDBhLCAweDQxNzgxMDAwLCAweDA0MDFmN2Y3LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDksIDB4NTkzNDE0MDAsIDB4MDQwMWY3ZjMsCisJMHg0MjAyODAwMCwgMHgwMDAwMDAwOCwgMHgwNDAxZjAwNSwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA3LCAweDQxNmMxMDAwLCAweDA0MDFmN2VjLCAweDQxNzgwODAwLAorCTB4NDE3ODEwMDAsIDB4MDQwMWY3Y2EsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDAsCisJMHgwNDAxZjdmYiwgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxZCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDgyMDA0ZDgwLCAweDAwMDAwMDFhLCAweDA0MDIwMDA0LAorCTB4NDAxMDEwMDAsIDB4NDAwMDA4MDAsIDB4MDQwMWY3ZGMsIDB4ODIwMDRkODAsCisJMHgwMDAwMDAxYiwgMHgwNDAyMDAwMywgMHg0MDE4MTAwMCwgMHgwNDAxZjdmYSwKKwkweDgyMDA0ZDgwLCAweDAwMDAwMDFjLCAweDA0MDAwN2Y3LCAweDgyMDA0ZDgwLAorCTB4MDAwMDAwMTksIDB4MDQwMDA3YjUsIDB4MDQwMWY3ZDYsIDB4NTkyZTYwMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTFlMywgMHgwNDAwMDdiMywgMHg1OTMwMGMwNiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDExLCAweDA0MDIwN2Q2LCAweDgzNDQwNTgwLAorCTB4MDAwMGZmZmYsIDB4MDQwMjAwMDUsIDB4NTkzMjY4MDksIDB4ODEzNjY5YzAsCisJMHgwNDAwMDAwZSwgMHgwNDAxZjdjZiwgMHg1OTJjMTAwYSwgMHg4MjA4MTUwMCwKKwkweDAwZmZmZmZmLCAweDQxNzg0MDAwLCAweDA0MDFmZDllLCAweDA0MDIwN2Q2LAorCTB4NTkzMDAwMDksIDB4ODAwMDAxYzAsIDB4MDQwMDAwMDMsIDB4ODEzNDA1ODAsCisJMHgwNDAyMDdjNCwgMHg0OTM2NjAwOSwgMHg1OTJjMGMwYiwgMHg4MjA0MTUwMCwKKwkweDAwMDBlMDAwLCAweDgyMDgwNTgwLCAweDAwMDA2MDAwLCAweDA0MDAwMDExLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAxMDAsIDB4ODEzNjY5YzAsIDB4MDQwMDAwMDIsCisJMHg1OTM0MGEwNCwgMHg1OTJjMDAwZCwgMHg4MDA0MDQ4MCwgMHgwNDAwMTdhMCwKKwkweDU5MzAwYTAzLCAweDgyMDQwNTgwLCAweDAwMDAwMDA3LCAweDA0MDIwN2IxLAorCTB4NDkyZTYwMDgsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNTQsIDB4MDQwMWY3NzQsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTZlNiwgMHgwNDAwMDdiNCwgMHgwNDAxZjdhOSwKKwkweDQ5MmZjODU3LCAweDU5MmU2MDA4LCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDkxZTMsIDB4MDQwMDAwNDcsIDB4NTkzMDE0MDYsIDB4ODIwODA1ODAsCisJMHgwMDAwMDAwNSwgMHgwNDAyMDA2MSwgMHg1OTJjMDIwNywgMHg4YzAwMDUwMCwKKwkweDA0MDIwMDg1LCAweDU5YTgwMDIxLCAweDgwMDAwMWMwLCAweDA0MDIwMDZhLAogCTB4NTkzMDEyMDMsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDcsIDB4MDQwMjAwNTcsCiAJMHg1OTJlOGMwNiwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMTAzMiwKIAkweDQxNzg0MDAwLCAweDU5MmMxMDA5LCAweDgyMDgxNTAwLCAweDAwZmZmZmZmLAotCTB4MDQwMWZkNzUsIDB4MDQwMjAwNWYsIDB4NTkzMDAwMDksIDB4ODAwMDAxYzAsCisJMHgwNDAxZmQ2MCwgMHgwNDAyMDA1ZiwgMHg1OTMwMDAwOSwgMHg4MDAwMDFjMCwKIAkweDA0MDAwMDAzLCAweDgxMzQwNTgwLCAweDA0MDIwMDQ4LCAweDRkMzAwMDAwLAogCTB4NTkyZTYwMTMsIDB4NDkzM2M4NTcsIDB4ODMzMDA1ODAsIDB4ZmZmZmZmZmYsCi0JMHgwNDAwMDAwZCwgMHgwMjAxZjgwMCwgMHgwMDEwOTQxYSwgMHg1YzAyNjAwMCwKKwkweDA0MDAwMDBkLCAweDAyMDFmODAwLCAweDAwMTA5MWUzLCAweDVjMDI2MDAwLAogCTB4MDQwMDAwMjksIDB4NTkxYzE0MDYsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDYsCiAJMHgwNDAwMDA0NiwgMHg4MjA4MDU4MCwgMHgwMDAwMDAxMSwgMHgwNDAwMDA0MywKIAkweDA0MDFmMDAyLCAweDVjMDI2MDAwLCAweDU5YTgwMDEwLCAweDU5MmMxMDBhLAogCTB4ODIwODE1MDAsIDB4MDBmZmZmZmYsIDB4ODAwODE1ODAsIDB4MDQwMjAwMTcsCiAJMHg1OTJjMTAwOSwgMHg4MjA4MTUwMCwgMHgwMGZmZmZmZiwgMHg4MDA4MTU4MCwKIAkweDA0MDAwMDBmLCAweDQ5MzY2MDA5LCAweDQ5MmU2MDA4LCAweDQyMDI3MDAwLAotCTB4MDAwMDAwOTIsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4ODAwMDA1ODAsCisJMHgwMDAwMDA5MiwgMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg4MDAwMDU4MCwKIAkweDFjMDFmMDAwLCAweDQyMDAxMDAwLCAweDAwMDAwMDBhLCAweDA0MDFmMDBjLAogCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMWYwMDksIDB4NDIwMDEwMDAsCiAJMHgwMDAwMDAxNCwgMHgwNDAxZjAwNiwgMHg0MjAwMTAwMCwgMHgwMDAwMDAxOCwKQEAgLTQ5MDQsMjMxICs0ODAxLDEzMSBAQAogCTB4NDgwM2M4NTcsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDgsIDB4NDE3ODA4MDAsCiAJMHg0MTc4MTAwMCwgMHgwNDAxZjdlOCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxZSwKIAkweDA0MDFmN2YwLCAweDQyMDAwODAwLCAweDAwMDAwMDAxLCAweDA0MDFmN2VkLAotCTB4ODIwMDRkODAsIDB4MDAwMDAwMWQsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHg4MjAwNGQ4MCwgMHgwMDAwMDAxZCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKIAkweDgyMDA0ZDgwLCAweDAwMDAwMDFhLCAweDA0MDIwMDAzLCAweDQwMTAxMDAwLAogCTB4MDQwMWY3ZGMsIDB4ODIwMDRkODAsIDB4MDAwMDAwMWIsIDB4MDQwMjAwMDMsCiAJMHg0MDE4MTAwMCwgMHgwNDAxZjdkNywgMHg4MjAwNGQ4MCwgMHgwMDAwMDAxYywKIAkweDA0MDAwN2Q0LCAweDgyMDA0ZDgwLCAweDAwMDAwMDE5LCAweDA0MDAwN2QxLAotCTB4MDQwMWY3ZDUsIDB4NTkzMDIwMDksIDB4ODAxMDIxYzAsIDB4MDQwMDAwMzUsCi0JMHg1ODEwMTQwMCwgMHg4MjA4MWQwMCwgMHgwMDAwMDBmZiwgMHg1OTMwMGMwMywKLQkweDgyMDQwNTgwLCAweDAwMDAwMDA4LCAweDA0MDAwMDIyLCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMGEsIDB4MDQwMDAwMTcsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGMsCi0JMHgwNDAwMDAxMCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDAxOSwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDAxLCAweDA0MDAwMDEyLCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMDMsIDB4MDQwMDAwMGIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsCi0JMHgwNDAwMDAwNCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAzMywgMHgwNDAyMDAxOSwKLQkweDgyMGMwNTgwLCAweDAwMDAwMDA5LCAweDA0MDAwMDBkLCAweDA0MDFmMDE1LAotCTB4ODIwYzA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMDksIDB4MDQwMWYwMTEsCi0JMHg4MjBjMDU4MCwgMHgwMDAwMDAwYiwgMHgwNDAwMDAwNSwgMHgwNDAxZjAwZCwKLQkweDgyMGMwNTgwLCAweDAwMDAwMDAzLCAweDA0MDIwMDBhLCAweDgyMDgxZDAwLAotCTB4ZmZmZmZmMDAsIDB4ODQwYzAxYzAsIDB4ODAwYzA1NDAsIDB4NDgxM2M4NTcsCi0JMHg0ODBiYzg1NywgMHg0ODA3Yzg1NywgMHg0ODAzYzg1NywgMHg0ODAwMjQwMCwKLQkweDFjMDFmMDAwLCAweDU5OWMwMDE3LCAweDhjMDAwNTBhLCAweDA0MDAwMDAzLAotCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NTlhODAwMjYsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAyOCwgMHgwNDAwMDAwOCwgMHg0MjAyODgwMCwgMHgwMDAwMDdmZCwKLQkweDAyMDFmODAwLCAweDAwMDIwMjQ1LCAweDA0MDIwMDAzLCAweDU5MzQwMDBhLAotCTB4OGMwMDA1MDQsIDB4MWMwMWYwMDAsIDB4NGQzMDAwMDAsIDB4NTkzNDAwMGUsCi0JMHg4MDAyNjU0MCwgMHgwNDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNjJkNSwKLQkweDAyMDAwODAwLCAweDAwMTA2NGFkLCAweDQ5N2E2ODBlLCAweDVjMDI2MDAwLAotCTB4MWMwMWYwMDAsIDB4NGQ0NDAwMDAsIDB4NGQzNDAwMDAsIDB4ODAwMDA1ODAsCi0JMHg0MDAwMTgwMCwgMHg0MDAyODgwMCwgMHg4MjA4MDU4MCwgMHgwMDAwMDAwOCwKLQkweDA0MDIwMDAzLCAweDQyMDAxODAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAotCTB4MDAwMjAyNDUsIDB4MDQwMjAwMGEsIDB4MDQwMWZkNmQsIDB4MDQwMjAwMDgsCi0JMHg4MDBjMTljMCwgMHgwNDAwMDAwNCwgMHg1OTM0MDQwNSwgMHg4YzAwMDUwOCwKLQkweDA0MDAwMDAzLCAweDgwMDgxMDQwLCAweDA0MDAwMDA5LCAweDgxNDY4ODAwLAotCTB4ODM0NDA0ODAsIDB4MDAwMDA4MDAsIDB4MDQwMDE3ZjEsIDB4ODAwMDA1ODAsCi0JMHg1YzAyNjgwMCwgMHg1YzAyODgwMCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwKLQkweDAwMDAwMDAxLCAweDVjMDI2ODAwLCAweDVjMDI4ODAwLCAweDFjMDFmMDAwLAotCTB4NGEwMzMwMjAsIDB4MDAwMDAwMDAsIDB4NDk3YjMwMjYsIDB4NDk3YjMwMjcsCisJMHgwNDAxZjdkNSwgMHgwMjAxZjgwMCwgMHgwMDEwYTZlNiwgMHgwNDAyMDdkNywKKwkweDQyMDI4MDAwLCAweDAwMDAwMDAwLCAweDA0MDFmN2RkLCAweDVjMDAwMDAwLAorCTB4NGMwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NTkzMDIwMDksIDB4ODAxMDIxYzAsCisJMHgwNDAwMDAzNSwgMHg1ODEwMTQwMCwgMHg0ODEzYzg1NywgMHg0ODBiYzg1NywKKwkweDgyMDgxZDAwLCAweDAwMDAwMGZmLCAweDU5MzAwYzAzLCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDgsIDB4MDQwMDAwMjIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGEsCisJMHgwNDAwMDAxNywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYywgMHgwNDAwMDAxMCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDE5LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDEsIDB4MDQwMDAwMTIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAwYiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDAwNCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDMzLCAweDA0MDIwMDE3LCAweDgyMGMwNTgwLAorCTB4MDAwMDAwMDksIDB4MDQwMDAwMGQsIDB4MDQwMWYwMTMsIDB4ODIwYzA1ODAsCisJMHgwMDAwMDAwNSwgMHgwNDAwMDAwOSwgMHgwNDAxZjAwZiwgMHg4MjBjMDU4MCwKKwkweDAwMDAwMDBiLCAweDA0MDAwMDA1LCAweDA0MDFmMDBiLCAweDgyMGMwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMjAwMDgsIDB4ODIwODFkMDAsIDB4ZmZmZmZmMDAsCisJMHg4NDBjMDFjMCwgMHg4MDBjMDU0MCwgMHg0ODA3Yzg1NywgMHg0ODAzYzg1NywKKwkweDQ4MDAyNDAwLCAweDFjMDFmMDAwLCAweDU5OWMwMDE3LCAweDhjMDAwNTBhLAorCTB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NTlhODAwMjYsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAyOCwgMHgwNDAwMDAwOCwgMHg0MjAyODgwMCwKKwkweDAwMDAwN2ZkLCAweDAyMDFmODAwLCAweDAwMDIwMjY3LCAweDA0MDIwMDAzLAorCTB4NTkzNDAwMGEsIDB4OGMwMDA1MDQsIDB4MWMwMWYwMDAsIDB4NGQzMDAwMDAsCisJMHg1OTM0MDAwZSwgMHg4MDAyNjU0MCwgMHgwNDAwMDAwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2MDBlLCAweDAyMDAwODAwLCAweDAwMTA2MWU1LCAweDQ5N2E2ODBlLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NGQ0NDAwMDAsIDB4NGQzNDAwMDAsCisJMHg4MDAwMDU4MCwgMHg0MDAwMTgwMCwgMHg0MDAyODgwMCwgMHg4MjA4MDU4MCwKKwkweDAwMDAwMDA4LCAweDA0MDIwMDAzLCAweDQyMDAxODAwLCAweDAwMDAwMDAxLAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDQwMjAwMGEsIDB4MDQwMWZkNGYsCisJMHgwNDAyMDAwOCwgMHg4MDBjMTljMCwgMHgwNDAwMDAwNCwgMHg1OTM0MDQwNSwKKwkweDhjMDAwNTA4LCAweDA0MDAwMDAzLCAweDgwMDgxMDQwLCAweDA0MDAwMDA5LAorCTB4ODE0Njg4MDAsIDB4ODM0NDA0ODAsIDB4MDAwMDA4MDAsIDB4MDQwMDE3ZjEsCisJMHg4MDAwMDU4MCwgMHg1YzAyNjgwMCwgMHg1YzAyODgwMCwgMHgxYzAxZjAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2ODAwLCAweDVjMDI4ODAwLAorCTB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZiMGUsCisJMHgwNDAyMDAzNCwgMHg1OWE4MDAyNiwgMHg4YzAwMDUwOCwgMHgwNDAyMDAzMSwKKwkweDU5MzQxMDBhLCAweDgyMDgxNTAwLCAweDAwMDBlMDAwLCAweDQyMDA3MDAwLAorCTB4MDAxMGIzM2YsIDB4NTgzODA0MDEsIDB4OGMwMDA1MDQsIDB4MDQwMjAwMWMsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwgMHg4MjA4MDU4MCwgMHgwMDAwNjAwMCwKKwkweDA0MDAwMDI0LCAweDU5MzQxYTA0LCAweDgyMGMwNDgwLCAweDAwMDAwODAwLAorCTB4MDQwMDEwMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDBhMDAsIDB4MDQwMWYwMDksCisJMHg4MjBjMDQ4MCwgMHgwMDAwMDQwMCwgMHgwNDAwMTAwNCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwNTAwLCAweDA0MDFmMDAzLCAweDQyMDAwODAwLCAweDAwMDAwMjAwLAorCTB4ODIwODA1ODAsIDB4MDAwMDIwMDAsIDB4MDQwMDAwMDIsIDB4ODAwNDA4YzIsCisJMHg4MjA0MGQ0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwZSwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA4LCAweDgyMDgwNTgwLCAweDAwMDAyMDAwLCAweDA0MDIwMDA0LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4MDQwMWYwMDYsIDB4ODIwODA1ODAsCisJMHgwMDAwMDAwMCwgMHgwNDAyMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwKKwkweDQ4MDY2YzA0LCAweDFjMDFmMDAwLCAweDRhMDMzMDIwLCAweDAwMDAwMDAwLAorCTB4NGEwM2IxMDQsIDB4ODAwMDAwMDAsIDB4NDk3YjMwMjYsIDB4NDk3YjMwMjcsCiAJMHg0OTdiMzAyOCwgMHg0OTdiMzAyOSwgMHg0OTdiMzAyYiwgMHg0OTdiMzAyMSwKLQkweDRhMDNiMTA0LCAweDYwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAotCTB4NTk5YzAwMTgsIDB4NDk3YjMwMjQsIDB4NDk3YjMwMjUsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAwZiwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDAwNiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwMDBkLCAweDQ5N2IzMDIyLAotCTB4MWMwMWYwMDAsIDB4NGEwMzMwMjIsIDB4MDAwMDAwMDUsIDB4NTk5YzAyMTYsCisJMHg0YTAzYjEwNCwgMHg2MDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg1OTljMDAxOCwKKwkweDQ4MDNjODU2LCAweDQ5N2IzMDI0LCAweDQ5N2IzMDI1LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMGYsIDB4NDgwMzMwMjIsIDB4MDQwMDAwMDgsIDB4NTk5YzAyMTYsCiAJMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwgMHgwNDAyMDAwMywgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDAyLCAweDQ4MDMzMDIzLCAweDFjMDFmMDAwLCAweDRhMDMzMDIyLAotCTB4MDAwMDAwMDYsIDB4MDQwMWY3ZjYsIDB4MDQwMWZmZTUsIDB4NGEwM2M4MjYsCi0JMHgwMDAwMDAwNCwgMHg1OTljMDIwOSwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxZiwKLQkweDU5OWMwMjA3LCAweDgwMDAwNTQwLCAweDA0MDAwMDA3LCAweDgwMDAwMGNjLAotCTB4NTk5YzA4MGQsIDB4ODAwNDA0MDAsIDB4NDgwM2IxMDAsIDB4NDk3YmIxMDIsCi0JMHg1OWQ4MDEwMSwgMHg1OTljMDAwZCwgMHg0ODAzYjEwMCwgMHg1OTljMDAwZSwKLQkweDQ4MDNiMTAxLCAweDU5OWMwMjA3LCAweDgwMDAwNTQwLCAweDA0MDIwMDAyLAotCTB4NDk3YmIxMDIsIDB4NTk5YzBhMDksIDB4ODIwNDA1NDAsIDB4MDA0MDAwMDAsCi0JMHg1OTk4MDgyMiwgMHg0ODAzYjEwMywgMHg0YTAzYjEwOSwgMHgwMDAwMDAwNCwKLQkweDRhMDNiMTA0LCAweDEwMDAwMDAxLCAweDgwMDQwOWMwLCAweDA0MDIwMDA0LAotCTB4NGEwMzMwMjAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NGEwMzMwMjAsCi0JMHgwMDAwMDAwMiwgMHgwNDAxZjdmZCwgMHg1OTk4MDAyMiwgMHg0ODAzYzg1NiwKLQkweDgwMDAwNTQwLCAweDAyMDAwMDAwLCAweDAwMDIwMmRlLCAweDA0MDFmMDE3LAotCTB4NDIwMzQwMDAsIDB4MDAxMGI0YTQsIDB4NTlhMWQ4MWUsIDB4ODBlZGQ5YzAsCi0JMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1OGVjMDAwOSwgMHg0OGVmYzg1NywKLQkweDQ5YTNjODU3LCAweDQ5MmZjODU3LCAweDQ4MDNjODU3LCAweDgwMDAwMWMwLAotCTB4MDgwMjAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMWQ4MjEsCi0JMHg1OGVmNDAwYiwgMHg1OGVjMDAwOSwgMHg4MDAwMDFjMCwgMHgwODAyMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQ5N2E1ODAwLCAweDU5OTgwMDI2LAotCTB4ODAwMDA1NDAsIDB4MDQwMjAwOGMsIDB4NTlkODAxMDUsIDB4ODIwMDBkMDAsCi0JMHgwMDAxODc4MCwgMHgwNDAyMDFkYSwgMHg4MDAwMDEwNiwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMDAzLCAweDBjMDFmMDAxLCAweDAwMTA0ZDBhLCAweDAwMTA0ZDg5LAotCTB4MDAxMDRkMjIsIDB4MDAxMDRkNTAsIDB4NTkyYzAwMDEsIDB4NDkyZmM4NTcsCi0JMHg0OTJmYjEwNywgMHg4MDAwMGQ0MCwgMHgwNDAyMDAwNywgMHg1OTk0MDAxOSwKLQkweDgwMDAwNTQwLCAweDA0MDIyMDAzLCAweDU5OTgwMDIzLCAweDQ4MDMyODE5LAotCTB4MWMwMWYwMDAsIDB4NDk3YTU4MDEsIDB4NDAwNjU4MDAsIDB4NTkyYzAwMDEsCi0JMHg0OTZhNTgwMCwgMHg4MTVlYjgwMCwgMHg0MTJlZDAwMCwgMHg4MDAwMGQ0MCwKLQkweDA0MDIwN2Y5LCAweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLAotCTB4NDgwMzkwMDAsIDB4MDQwMWY3ZWUsIDB4NDkyZmM4NTcsIDB4NDkyZmIxMDcsCi0JMHg1OTJjMDAwMSwgMHg4MDAwMGQ0MCwgMHgwNDAyMDAxMiwgMHg1OWRhNTkwOCwKLQkweDgzNWMwNDgwLCAweDAwMDAwMDIwLCAweDA0MDAxMDFjLCAweDA0MDJiMDFhLAotCTB4NDkyZmIwMDcsIDB4MDQwMGU3ZmEsIDB4NTlkODAxMDUsIDB4ODIwMDA1MDAsCi0JMHgwMDAxODc4MCwgMHgwNDAyMDFhYSwgMHg1OTk0MDAxOSwgMHg4MDAwMDU0MCwKLQkweDA0MDIyMDAzLCAweDU5OTgwMDIzLCAweDQ4MDMyODE5LCAweDFjMDFmMDAwLAotCTB4NDk3YTU4MDEsIDB4NDAwNjU4MDAsIDB4NTkyYzAwMDEsIDB4NDk2YTU4MDAsCi0JMHg4MTVlYjgwMCwgMHg0MTJlZDAwMCwgMHg4MDAwMGQ0MCwgMHgwNDAyMDdmOSwKLQkweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLAotCTB4MDQwMWY3ZTMsIDB4MDQwMGYwMDksIDB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsCi0JMHg4MTVlYjgwMCwgMHg1OWM4MDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwKLQkweDQ4MDM5MDAwLCAweDA0MDFmN2UwLCAweDQ5MmZhODA3LCAweDA0MDFmN2RlLAotCTB4NDkyZmM4NTcsIDB4NTlkODExMDgsIDB4NDU2ODEwMDAsIDB4NDAwYWQwMDAsCi0JMHg4MTVlYjgwMCwgMHgwNDAwZTdmYywgMHg1OWM4MDAwMCwgMHg4MjAwMDU0MCwKLQkweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDA0MDJkMDBjLCAweDU5MmMwMDAxLAotCTB4NDkyZmM4NTcsIDB4NDkyZmIxMDcsIDB4ODAwMDBkNDAsIDB4MDQwMjAwMWQsCi0JMHg1OTk0MDAxOSwgMHg4MDAwMDU0MCwgMHgwNDAyMjAwMywgMHg1OTk4MDAyMywKLQkweDQ4MDMyODE5LCAweDFjMDFmMDAwLCAweDU5ZDgwMTA1LCAweDgyMDAwNTAwLAotCTB4MDAwMTg3ODAsIDB4MDQwMjAxNzIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NTUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OTk4MDAyNiwgMHg1OTk4MDgyOCwKKwkweDAwMDAwMDAyLCAweDQ4MDMzMDIzLCAweDFjMDFmMDAwLCAweDA0MDFmZmYwLAorCTB4NGEwM2M4MjYsIDB4MDAwMDAwMDQsIDB4NTk5YzAyMDksIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAxZiwgMHg1OTljMDIwNywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNywKKwkweDgwMDAwMGNjLCAweDU5OWMwODBkLCAweDgwMDQwNDAwLCAweDQ4MDNiMTAwLAorCTB4NDk3YmIxMDIsIDB4NTlkODAxMDEsIDB4NTk5YzAwMGQsIDB4NDgwM2IxMDAsCisJMHg1OTljMDAwZSwgMHg0ODAzYjEwMSwgMHg1OTljMDIwNywgMHg4MDAwMDU0MCwKKwkweDA0MDIwMDAyLCAweDQ5N2JiMTAyLCAweDU5OWMwYTA5LCAweDgyMDQwNTQwLAorCTB4MDA0MDAwMDAsIDB4NTk5ODA4MjIsIDB4NDgwM2IxMDMsIDB4NGEwM2IxMDksCisJMHgwMDAwMDAwNCwgMHg0YTAzYjEwNCwgMHgxMDAwMDAwMSwgMHg4MDA0MDljMCwKKwkweDA0MDIwMDA0LCAweDRhMDMzMDIwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NGEwMzMwMjAsIDB4MDAwMDAwMDIsIDB4MDQwMWY3ZmQsIDB4NTkyYzAyMDQsCisJMHg0OTJmYzg1NywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwOCwgMHg0MjAzNDAwMCwKKwkweDAwMTBiMmEwLCAweDU5YTFkODFlLCAweDgwZWRkOWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4MDQwMWYwMDMsIDB4NTkzMWQ4MjEsIDB4NThlZjQwMGIsCisJMHg1OGVjMDAwOSwgMHg4MDAwMDFjMCwgMHgwODAyMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDU5OTgwMDJiLCAweDg0MDAwNTQwLCAweDQ4MDMzMDJiLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA0MDMsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NTQsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg0OTJmYzg1NywgMHg1OTk4MDAyNiwKKwkweDU5OTgwODI4LCAweDgwMDAwMDAwLCAweDQ4MDMzMDI2LCAweDgwMDQwOWMwLAorCTB4NDkyZjMwMjgsIDB4MDQwMDAwMDMsIDB4NDkyYzA4MDAsIDB4MDQwMWYwMDIsCisJMHg0OTJmMzAyOSwgMHg1OTJjMDAwMSwgMHg4MDAwMGQ0MCwgMHgwMjAyMDAwMCwKKwkweDAwMDIwMmZiLCAweDFjMDFmMDAwLCAweDU5OTgwMDI2LCAweDU5OTgwODI4LAogCTB4ODAwMDAwMDAsIDB4NDgwMzMwMjYsIDB4NDkyZmM4NTcsIDB4ODAwNDA5YzAsCiAJMHg0OTJmMzAyOCwgMHgwNDAwMDAwMywgMHg0OTJjMDgwMCwgMHgwNDAxZjAwMiwKLQkweDQ5MmYzMDI5LCAweDU5MmMwMDAxLCAweDgwMDAwZDQwLCAweDA0MDAwN2U1LAotCTB4NDk3YTU4MDEsIDB4NDAwNjU4MDAsIDB4NTkyYzAwMDEsIDB4NDk2YTU4MDAsCi0JMHg4MTVlYjgwMCwgMHg0MTJlZDAwMCwgMHg4MDAwMGQ0MCwgMHgwNDAyMDdmOSwKLQkweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLAotCTB4MDQwMWY3ZDgsIDB4NTk5ODAwMjYsIDB4NTk5ODA4MjgsIDB4ODAwMDAwMDAsCi0JMHg0ODAzMzAyNiwgMHg0OTJmYzg1NywgMHg4MDA0MDljMCwgMHg0OTJmMzAyOCwKLQkweDA0MDAwMDAzLCAweDQ5MmMwODAwLCAweDA0MDFmMDAyLCAweDQ5MmYzMDI5LAotCTB4NTkyYzAwMDEsIDB4ODAwMDBkNDAsIDB4MDQwMjAwMjcsIDB4MDQwMmQwMGUsCi0JMHg1OTk4MDAyOSwgMHg4MDAyNWQ0MCwgMHgwNDAwMDAwZiwgMHg1OTk4MDAyNiwKLQkweDgwMDAwMDQwLCAweDQ4MDMzMDI2LCAweDA0MDIwMDAyLCAweDQ4MDMzMDI4LAotCTB4NTkyYzAwMDAsIDB4NDgwMzMwMjksIDB4NDkyZmM4NTcsIDB4NDkyZmIxMDcsCi0JMHgwNDAwZDdmNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg1NSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDA0MDJlMDBhLCAweDU5ZGE1OTA4LCAweDQ5NmE1ODAwLAotCTB4NDEyZWQwMDAsIDB4ODE1ZWI4MDAsIDB4MDQwMGU3ZmMsIDB4NTljODAwMDAsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwgMHg0ODAzOTAwMCwgMHg1OWQ4MDEwNSwKLQkweDgyMDAwNTAwLCAweDAwMDE4NzgwLCAweDA0MDIwMTI1LCAweDU5OTQwMDE5LAotCTB4ODAwMDA1NDAsIDB4MDQwMjIwMDMsIDB4NTk5ODAwMjMsIDB4NDgwMzI4MTksCi0JMHgxYzAxZjAwMCwgMHg0OTdhNTgwMSwgMHg0MDA2NTgwMCwgMHg1OTJjMDAwMSwKLQkweDQ5NmE1ODAwLCAweDgxNWViODAwLCAweDQxMmVkMDAwLCAweDgwMDAwZDQwLAotCTB4MDQwMjA3ZjksIDB4NTljODAwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsCi0JMHg0ODAzOTAwMCwgMHgwNDAxZjdjZSwgMHg1OTJjMDIwNCwgMHg0ODAzYzg1NiwKLQkweDA0MDAwMDA4LCAweDQyMDM0MDAwLCAweDAwMTBiNGE0LCAweDU5YTFkODFlLAotCTB4ODBlZGQ5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4MDQwMWYwMDMsCi0JMHg1OTMxZDgyMSwgMHg1OGVmNDAwYiwgMHg1OGVjMDAwOSwgMHg4MDAwMDFjMCwKLQkweDA4MDIwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQ5N2E1ODAxLAotCTB4NDAwNjU4MDAsIDB4NTkyYzAwMDEsIDB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsCi0JMHg4MTVlYjgwMCwgMHg4MDAwMGQ0MCwgMHgwNDAyMDdmOSwgMHg1OWM4MDAwMCwKLQkweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDFjMDFmMDAwLAotCTB4NDk3YTU4MDEsIDB4NDAwNjU4MDAsIDB4NTkyYzAwMDEsIDB4NDk2YTU4MDAsCi0JMHg0MTJlZDAwMCwgMHg4MTVlYjgwMCwgMHg4MDAwMGQ0MCwgMHgwNDAyMDdmOSwKLQkweDU5YzgwMDAwLCAweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLAotCTB4MDIwMGUwMDAsIDB4MDAwMjAyZmIsIDB4MDIwMWYwMDAsIDB4MDAwMjAzMDIsCi0JMHg1OTk4MDAyYiwgMHg4NDAwMDU0MCwgMHg0ODAzMzAyYiwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMzVlLCAweDQyMDAwMDAwLCAweDAwMTBiODU1LCAweDAyMDFmODAwLAotCTB4MDAxMGFhNDcsIDB4NDkyZmM4NTcsIDB4NTk5ODAwMjYsIDB4NTk5ODA4MjgsCi0JMHg4MDAwMDAwMCwgMHg0ODAzMzAyNiwgMHg4MDA0MDljMCwgMHg0OTJmMzAyOCwKLQkweDA0MDAwMDAzLCAweDQ5MmMwODAwLCAweDA0MDFmMDAyLCAweDQ5MmYzMDI5LAotCTB4NTkyYzAwMDEsIDB4ODAwMDBkNDAsIDB4MDQwMjAwMDIsIDB4MWMwMWYwMDAsCi0JMHg0OTdhNTgwMSwgMHg0MDA2NTgwMCwgMHg1OTJjMDAwMSwgMHg0OTZhNTgwMCwKLQkweDQxMmVkMDAwLCAweDgxNWViODAwLCAweDgwMDAwZDQwLCAweDA0MDIwN2Y5LAotCTB4NTljODAwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsCi0JMHgxYzAxZjAwMCwgMHg1OTk4MDAyNiwgMHg1OTk4MDgyOCwgMHg4MDAwMDAwMCwKLQkweDQ4MDMzMDI2LCAweDQ5MmZjODU3LCAweDgwMDQwOWMwLCAweDQ5MmYzMDI4LAotCTB4MDQwMDAwMDMsIDB4NDkyYzA4MDAsIDB4MDQwMWYwMDIsIDB4NDkyZjMwMjksCi0JMHg1OTJjMDAwMSwgMHg4MDAwMGQ0MCwgMHgwNDAyMDAzOSwgMHgwNDAyZDAwZSwKLQkweDU5OTgwMDI5LCAweDgwMDI1ZDQwLCAweDA0MDAwMDBmLCAweDU5OTgwMDI2LAotCTB4ODAwMDAwNDAsIDB4NDgwMzMwMjYsIDB4MDQwMjAwMDIsIDB4NDgwMzMwMjgsCi0JMHg1OTJjMDAwMCwgMHg0ODAzMzAyOSwgMHg0OTJmYzg1NywgMHg0OTJmYjEwNywKLQkweDA0MDBkN2Y0LCAweDQyMDAwMDAwLCAweDAwMTBiODU1LCAweDAyMDFmODAwLAotCTB4MDAxMGFhNDcsIDB4MDQwMmUwMWQsIDB4NTlkYTU5MDgsIDB4NDk2YTU4MDAsCi0JMHg0MTJlZDAwMCwgMHg4MTVlYjgwMCwgMHgwNDAwZTdmYywgMHg1OWM4MDAwMCwKLQkweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDA0MDA2MDE4LAotCTB4NTlkODAxMGEsIDB4NTlkODA5MGEsIDB4ODAwNDBkODAsIDB4MDQwMjA3ZmQsCi0JMHg5MDAwMDFjMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAxMywgMHg0ODAzYzAxMSwKLQkweDU5OTgwMDJiLCAweDg0MDAwNTAwLCAweDQ4MDMzMDJiLCAweDU5ZTAwMDE3LAotCTB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsIDB4NGEwM2MwMTcsIDB4MDAwMDAwMDMsCi0JMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwKLQkweDAwMDE4NzgwLCAweDA0MDIwMDdlLCAweDFjMDFmMDAwLCAweDU5OTgwMDJiLAotCTB4ODQwMDA1NDAsIDB4NDgwMzMwMmIsIDB4MDQwMWY3ZjgsIDB4NDk3YTU4MDEsCi0JMHg0MDA2NTgwMCwgMHg1OTJjMDAwMSwgMHg0OTZhNTgwMCwgMHg0MTJlZDAwMCwKLQkweDgxNWViODAwLCAweDgwMDAwZDQwLCAweDA0MDIwN2Y5LCAweDU5YzgwMDAwLAotCTB4ODIwMDA1NDAsIDB4MDAwMDEyMDAsIDB4NDgwMzkwMDAsIDB4MDQwMWY3YmMsCi0JMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywgMHg0OTJmYzg1NywKLQkweDQ5NDNjODU3LCAweDQ4MDdjODU3LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAotCTB4NDk0MjVhMDYsIDB4NDgwNjVhMDgsIDB4NGEwMjVjMDYsIDB4MDAwMGZmZmYsCi0JMHg4MTMyNjFjMCwgMHgwNDAwMDAwMywgMHg1OTMwMDQwMiwgMHg0ODAyNWMwNiwKLQkweDgzMmMwNDAwLCAweDAwMDAwMDA5LCAweDA0MDExMDAwLCAweDQ4MDNjODQwLAotCTB4NGEwM2M4NDIsIDB4MDAwMDAwMGIsIDB4MDQwMTEwMDAsIDB4MWMwMWYwMDAsCi0JMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg1OTljYjgxNywKLQkweDU5OTQwMDE5LCAweDgwMDAwNTQwLCAweDA0MDAyMDIzLCAweDA0MDAwMDBlLAotCTB4NTk5ODAwMjIsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMWUsCi0JMHg1OWE4MDA2OSwgMHg4MTY0MDU4MCwgMHgwNDAyMDAxYiwgMHg4YzVjYmQwOCwKLQkweDA0MDAwMDA1LCAweDU5YTgwMDZhLCAweDU5YTgwODY2LCAweDgwMDQwNTgwLAotCTB4MDQwMjAwMTUsIDB4OGM1Y2JkMDgsIDB4MDQwMjAwMzAsIDB4NTlkODA5MGIsCi0JMHg1OWQ4MDEwYSwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwZCwgMHgwNDAwNjAwZSwKLQkweDRhMDNjMDExLCAweDgwNDAwMDEyLCAweDRhMDNjMDIwLCAweDAwMDA4MDQwLAotCTB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsIDB4NGEwM2MwMTcsCi0JMHgwMDAwMDAwMiwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg0YTAzMjgxOSwKLQkweGZmZmYwMDAwLCAweDA0MDI2ODM1LCAweDA0MDA2MDAzLCAweDhjNWNiZDA4LAotCTB4MDQwMjA4NjAsIDB4NTk5ODAwMjksIDB4ODAwMjVkNDAsIDB4MDQwMDAwMTAsCi0JMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwgMHgwMDAxODc4MCwgMHgwNDAyMDAyMCwKLQkweDA0MDJkMDBkLCAweDU5OTgwMDI2LCAweDQ5MmZjODU3LCAweDgwMDAwMDQwLAotCTB4NDgwMzMwMjYsIDB4NTkyYzAwMDAsIDB4NDkyZmIxMDcsIDB4NDgwMzMwMjksCi0JMHgwNDAyMDAwMywgMHg0ODAzYzg1NiwgMHg0ODAzMzAyOCwgMHg1YzAzZTAwMCwKLQkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODU1LCAweDAyMDFmODAwLAotCTB4MDAxMGFhNDcsIDB4MDQwMWY3ZmEsIDB4NTllMDAwMGYsIDB4NTllMDA4MGYsCi0JMHg4MDA0MDU4MCwgMHgwNDAyMDdmZCwgMHg1OWUwMDAxMCwgMHg1OWUwMTAxMCwKLQkweDgwMDgxNTgwLCAweDA0MDIwN2ZkLCAweDQwMDY1MDAwLCAweDgwMDQxNTgwLAotCTB4MDQwMDA3YzcsIDB4MDQwMDY3ZGMsIDB4MDQwMWY3Y2EsIDB4NDgwM2M4NTcsCi0JMHg0ODVmYzg1NywgMHg4YzAwMDUwZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkMCwKLQkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDQyMDBiODAwLCAweDAwMDA4MDA0LAotCTB4MDIwMWYwMDAsIDB4MDAxMDA1ZGQsIDB4NTk5ODAwMmIsIDB4OGMwMDA1MDAsCi0JMHgwNDAwMDAxMywgMHg4NDAwMDUwMCwgMHg0ODAzMzAyYiwgMHg1OWQ4MDEwYSwKLQkweDU5ZDgwOTBhLCAweDgwMDQwNTgwLCAweDA0MDIwN2ZkLCAweDgwMDQwOGUwLAotCTB4ODIwNDBkNDAsIDB4MDAwMDAwMTMsIDB4NDgwN2MwMTEsIDB4NTllMDAwMTcsCi0JMHg4YzAwMDUwOCwgMHgwNDAwMDAwMywgMHg0YTAzYzAxNywgMHgwMDAwMDAwMywKLQkweDQyMDNlMDAwLCAweDMwMDAwMDAxLCAweDFjMDFmMDAwLCAweDA0MDJlMDE0LAorCTB4NDkyZjMwMjksIDB4NTkyYzAwMDEsIDB4ODAwMDBkNDAsIDB4MDIwMjA4MDAsCisJMHgwMDAyMDJmYiwgMHgwNDAyZDAwZSwgMHg1OTk4MDAyOSwgMHg4MDAyNWQ0MCwKKwkweDA0MDAwMDBmLCAweDU5OTgwMDI2LCAweDgwMDAwMDQwLCAweDQ4MDMzMDI2LAorCTB4MDQwMjAwMDIsIDB4NDgwMzMwMjgsIDB4NTkyYzAwMDAsIDB4NDgwMzMwMjksCisJMHg0OTJmYzg1NywgMHg0OTJmYjEwNywgMHgwNDAwZDdmNCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjU0LCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDA0MDJlMDFkLAogCTB4NTlkYTU5MDgsIDB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsIDB4ODE1ZWI4MDAsCiAJMHgwNDAwZTdmYywgMHg1OWM4MDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwKLQkweDQ4MDM5MDAwLCAweDU5ZDgwOTBiLCAweDU5OTgwMDI0LCAweDQ4MDczMDI0LAotCTB4ODAwNDA0ODAsIDB4MDQwMjAwMDQsIDB4NTk5NDAwMTksIDB4ODAwMDA1NDAsCi0JMHgwNDAyMjAwMywgMHg1OTk4MDgyMywgMHg0ODA3MjgxOSwgMHg1OWQ4MDEwNSwKLQkweDgyMDAwNTAwLCAweDAwMDE4NzgwLCAweDA0MDIwN2M5LCAweDFjMDFmMDAwLAotCTB4NTk5ODEwMjUsIDB4NTllMDAwMTAsIDB4NTllMDA4MTAsIDB4ODAwNDFkODAsCi0JMHgwNDAyMDdmZCwgMHg4MDA4MDU4MCwgMHgwNDAwMDAxMywgMHg0ODA3MzAyNSwKLQkweDU5ZTAwMDBmLCAweDU5ZTAxMDBmLCAweDgwMDgxZDgwLCAweDA0MDIwN2ZkLAotCTB4ODEyODA1ODAsIDB4MDQwMDAwMDgsIDB4NDAwYTUwMDAsIDB4NDAwODAwMDAsCi0JMHg4MDA0MDU4MCwgMHgwNDAwMDAwMywgMHg1OTk4MDgyMywgMHg0ODA3MjgxOSwKLQkweDFjMDFmMDAwLCAweDU5OTQwMDE5LCAweDgwMDAwNTQwLCAweDA0MDIyN2Y4LAotCTB4MDQwMWY3ZmMsIDB4NTllMDAwMGYsIDB4NTllMDEwMGYsIDB4ODAwODFkODAsCi0JMHgwNDAyMDdmZCwgMHg4MTI4MDU4MCwgMHgwNDAwMDdmNiwgMHg0MDBhNTAwMCwKLQkweDU5OTQwMDE5LCAweDgwMDAwNTQwLCAweDA0MDAyN2VkLCAweDA0MDFmN2YxLAorCTB4NDgwMzkwMDAsIDB4MDQwMDYwMTksIDB4NTlkODAxMGEsIDB4NTlkODA5MGEsCisJMHg4MDA0MGQ4MCwgMHgwNDAyMDdmZCwgMHg5MDAwMDFjMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDEzLCAweDQ4MDNjMDExLCAweDU5OTgwMDJiLCAweDg0MDAwNTAwLAorCTB4NDgwMzMwMmIsIDB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsCisJMHg0YTAzYzAxNywgMHgwMDAwMDAwMywgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwKKwkweDU5ZDgwMTA1LCAweDgyMDAwNTAwLCAweDAwMDE4NzgwLCAweDAyMDIwMDAwLAorCTB4MDAwMjA0ODIsIDB4MWMwMWYwMDAsIDB4NTk5ODAwMmIsIDB4ODQwMDA1NDAsCisJMHg0ODAzMzAyYiwgMHgwNDAxZjdmNywgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwKKwkweDQ4MDNjODU3LCAweDQ5MmZjODU3LCAweDQ5NDNjODU3LCAweDQ4MDdjODU3LAorCTB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4NDk0MjVhMDYsIDB4NDgwNjVhMDgsCisJMHg0YTAyNWMwNiwgMHgwMDAwZmZmZiwgMHg4MTMyNjFjMCwgMHgwNDAwMDAwMywKKwkweDU5MzAwNDAyLCAweDQ4MDI1YzA2LCAweDgzMmMwNDAwLCAweDAwMDAwMDA5LAorCTB4MDQwMTEwMDAsIDB4NDgwM2M4NDAsIDB4NGEwM2M4NDIsIDB4MDAwMDAwMGIsCisJMHgwNDAxMTAwMCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjY1NCwKKwkweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDAyMDFmMDAwLCAweDAwMDIwNDY0LAogCTB4NTlhODAwMTcsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGEsIDB4MDIwMjE4MDAsCi0JMHgwMDEwMDVkOCwgMHgwYzAxZjgwOSwgMHg0YTAzODgwNSwgMHgwMDAwMDBmMCwKKwkweDAwMTAwNjE1LCAweDBjMDFmODA5LCAweDRhMDM4ODA1LCAweDAwMDAwMGYwLAogCTB4NTljNDAwYTMsIDB4ODIwMDA1MDAsIDB4MDI4NzAwMDAsIDB4MDIwMjA4MDAsCi0JMHgwMDEwMDVkOCwgMHgxYzAxZjAwMCwgMHgwMDEwNGZjNSwgMHgwMDEwNGY1MSwKLQkweDAwMTA0ZjZjLCAweDAwMTA0Zjk1LCAweDAwMTA0ZmI4LCAweDAwMTA0ZmYyLAotCTB4MDAxMDUwMDQsIDB4MDAxMDRmNmMsIDB4MDAxMDRmZDYsIDB4MDAxMDRmNTAsCisJMHgwMDEwMDYxNSwgMHgxYzAxZjAwMCwgMHgwMDEwNGM5OSwgMHgwMDEwNGMyNSwKKwkweDAwMTA0YzQwLCAweDAwMTA0YzY5LCAweDAwMTA0YzhjLCAweDAwMTA0Y2M2LAorCTB4MDAxMDRjZDgsIDB4MDAxMDRjNDAsIDB4MDAxMDRjYWEsIDB4MDAxMDRjMjQsCiAJMHgxYzAxZjAwMCwgMHg0YTAzODgwOCwgMHgwMDAwMDAwNCwgMHgwNDAxZjhmOSwKLQkweDAyMDFmODAwLCAweDAwMTA1M2FiLCAweDU5YzQwODA1LCAweDhjMDQwZDBlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDUwN2IsIDB4NTljNDA4MDUsIDB4OGMwNDBkMGUsCiAJMHgwNDAyMDAxMywgMHg4YzA0MGQwYSwgMHgwNDAyMDAwYiwgMHg4YzA0MGQwYywKIAkweDA0MDIwMDA2LCAweDhjMDQwZDA4LCAweDA0MDAwMDBkLCAweDRhMDM1MDE3LAogCTB4MDAwMDAwMDMsIDB4MDQwMWYwMGEsIDB4NGEwMzUwMTcsIDB4MDAwMDAwMDAsCi0JMHgwNDAxZjAwNywgMHg0MjAwMDAwMCwgMHgwMDEwYjg0NCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDRhMDM1MDE3LCAweDAwMDAwMDAyLCAweDFjMDFmMDAwLAorCTB4MDQwMWYwMDcsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NDIsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHg0YTAzNTAxNywgMHgwMDAwMDAwMiwgMHgxYzAxZjAwMCwKIAkweDRhMDM4ODA4LCAweDAwMDAwMDAyLCAweDA0MDFmOGRlLCAweDU5YzQwODA1LAogCTB4OGMwNDBkMDgsIDB4MDQwMjAwMjEsIDB4OGMwNDBkMGMsIDB4MDQwMjAwMWMsCiAJMHg4YzA0MGQwZSwgMHgwNDAyMDAxNywgMHg4MjA0MDUwMCwgMHgwMDAwMDBmMCwKLQkweDA0MDIwMDFjLCAweDAyMDFmODAwLCAweDAwMTA1M2FiLCAweDRhMDM4ODA4LAorCTB4MDQwMjAwMWMsIDB4MDIwMWY4MDAsIDB4MDAxMDUwN2IsIDB4NGEwMzg4MDgsCiAJMHgwMDAwMDA4MCwgMHg1OWM0MDAwMiwgMHg4NDAwMDUwYywgMHg0ODAzODgwMiwKLQkweDA0MDFmOWQ5LCAweDRkM2MwMDAwLCAweDQyMDI3ODAwLCAweDAwMDAwMDAxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDk4NzQsIDB4NWMwMjc4MDAsIDB4NGEwMzg4MDgsCisJMHgwNDAxZjlkNywgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwKKwkweDAyMDFmODAwLCAweDAwMTA5NjQwLCAweDVjMDI3ODAwLCAweDRhMDM4ODA4LAogCTB4MDAwMDAwODAsIDB4NGEwMzUwMTcsIDB4MDAwMDAwMDksIDB4MDQwMWYwMDksCiAJMHg0YTAzNTAxNywgMHgwMDAwMDAwMSwgMHgwNDAxZjAwNiwgMHg0YTAzNTAxNywKIAkweDAwMDAwMDAwLCAweDA0MDFmMDAzLCAweDRhMDM1MDE3LCAweDAwMDAwMDAzLApAQCAtNTEzNiw4ICs0OTMzLDggQEAKIAkweDU5YzQwODA1LCAweDhjMDQwZDBhLCAweDA0MDIwMDFiLCAweDhjMDQwZDBjLAogCTB4MDQwMjAwMTYsIDB4OGMwNDBkMGUsIDB4MDQwMjAwMTEsIDB4ODIwNDA1MDAsCiAJMHgwMDAwMDBmMCwgMHgwNDAyMDAxNiwgMHg1OWM0MDAwMiwgMHg4NDAwMDUwYywKLQkweDQ4MDM4ODAyLCAweDA0MDFmOWI0LCAweDRkM2MwMDAwLCAweDQyMDI3ODAwLAotCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDk4NzQsIDB4NWMwMjc4MDAsCisJMHg0ODAzODgwMiwgMHgwNDAxZjliMiwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwKKwkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA5NjQwLCAweDVjMDI3ODAwLAogCTB4NGEwMzUwMTcsIDB4MDAwMDAwMDksIDB4MDQwMWYwMDksIDB4NGEwMzUwMTcsCiAJMHgwMDAwMDAwMSwgMHgwNDAxZjAwNiwgMHg0YTAzNTAxNywgMHgwMDAwMDAwMCwKIAkweDA0MDFmMDAzLCAweDRhMDM1MDE3LCAweDAwMDAwMDAyLCAweDFjMDFmMDAwLApAQCAtNTE0OSwxMiArNDk0NiwxMiBAQAogCTB4OGMwNDBkMGEsIDB4MDQwMjAwMDYsIDB4OGMwNDBkMGUsIDB4MDQwMDAwMDYsCiAJMHg0YTAzNTAxNywgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMywgMHg0YTAzNTAxNywKIAkweDAwMDAwMDAyLCAweDFjMDFmMDAwLCAweDRhMDM4ODA4LCAweDAwMDAwMDA4LAotCTB4NDIwMDEwMDAsIDB4MDAxMDUwNTgsIDB4MDIwMWY4MDAsIDB4MDAxMDYwODQsCisJMHg0MjAwMTAwMCwgMHgwMDEwNGQyYywgMHgwMjAxZjgwMCwgMHgwMDEwNWRiZCwKIAkweDU5YzQwODA1LCAweDhjMDQwZDBhLCAweDA0MDIwMDBkLCAweDhjMDQwZDA4LAogCTB4MDQwMjAwMGIsIDB4OGMwNDBkMGMsIDB4MDQwMjAwMDYsIDB4OGMwNDBkMGUsCiAJMHgwNDAwMDAwZCwgMHg0YTAzNTAxNywgMHgwMDAwMDAwMSwgMHgwNDAxZjAwYSwKIAkweDRhMDM1MDE3LCAweDAwMDAwMDAwLCAweDA0MDFmMDA3LCAweDQyMDAwMDAwLAotCTB4MDAxMGI4NDQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NGEwMzUwMTcsCisJMHgwMDEwYjY0MiwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg0YTAzNTAxNywKIAkweDAwMDAwMDA0LCAweDFjMDFmMDAwLCAweDA0MDFmOGE2LCAweDA0MDFmODU5LAogCTB4NTljNDA4MDUsIDB4OGMwNDBkMGEsIDB4MDQwMjAwMGIsIDB4OGMwNDBkMGMsCiAJMHgwNDAyMDAwNiwgMHg4YzA0MGQwZSwgMHgwNDAwMDAwOSwgMHg0YTAzNTAxNywKQEAgLTUxNjYsMjQzICs0OTYzLDI0MiBAQAogCTB4NGEwMzUwMTcsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDksIDB4NGEwMzUwMTcsCiAJMHgwMDAwMDAwMCwgMHgwNDAxZjAwNiwgMHg0YTAzNTAxNywgMHgwMDAwMDAwMywKIAkweDA0MDFmMDAzLCAweDRhMDM1MDE3LCAweDAwMDAwMDAyLCAweDFjMDFmMDAwLAotCTB4MDQwMWY5MWYsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NTlhODA4MDUsCisJMHgwNDAxZjkxZCwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OWE4MDgwNSwKIAkweDhjMDQwZDBjLCAweDA0MDAwMDE1LCAweDg0MDQwZDBjLCAweDQ4MDc1MDA1LAotCTB4NGEwMzg4MDUsIDB4MDAwMDAwMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5MzcsCisJMHg0YTAzODgwNSwgMHgwMDAwMDAxMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTlhNCwKIAkweDU5YzQwMDA1LCAweDhjMDAwNTA4LCAweDA0MDAwMDA4LCAweDRhMDM4ODA4LAogCTB4MDAwMDAwMDgsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsIDB4NDIwMmQ4MDAsCiAJMHgwMDAwMDAwMSwgMHgwNDAxZjAxYSwgMHg1OWM0MDAwNiwgMHg4NDAwMDU0OCwKIAkweDQ4MDM4ODA2LCAweDA0MDFmMDE2LCAweDU5YTgwMDE3LCAweDgyMDAwNTgwLAogCTB4MDAwMDAwMDEsIDB4MDQwMDAwMGMsIDB4NTlhODAwMTcsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwNSwgMHgwNDAyMDAwYywgMHg0MjAwMDAwMCwgMHgwMDEwYjg0NCwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDRhMDM1MDE3LCAweDAwMDAwMDA4LAotCTB4MDQwMWYwMDcsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NDQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWE0NywgMHg0YTAzNTAxNywgMHgwMDAwMDAwNCwgMHgxYzAxZjAwMCwKKwkweDAwMDAwMDA1LCAweDA0MDIwMDBjLCAweDQyMDAwMDAwLCAweDAwMTBiNjQyLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NGEwMzUwMTcsIDB4MDAwMDAwMDgsCisJMHgwNDAxZjAwNywgMHg0MjAwMDAwMCwgMHgwMDEwYjY0MiwgMHgwMjAxZjgwMCwKKwkweDAwMTBhODZlLCAweDRhMDM1MDE3LCAweDAwMDAwMDA0LCAweDFjMDFmMDAwLAogCTB4NDgwM2M4NTYsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDA2NCwgMHg0MjAwMTAwMCwgMHgwMDEwNTA1OCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2MDc5LCAweDVjMDAxMDAwLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLAotCTB4NDgwM2M4NTYsIDB4NGMwNDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsCi0JMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmUyMSwgMHg1YzAzZTAwMCwKLQkweDAyMDAwODAwLCAweDAwMTA2YzRiLCAweDA0MDFmZmJhLCAweDVjMDAwODAwLAorCTB4MDAwMDAwNjQsIDB4NDIwMDEwMDAsIDB4MDAxMDRkMmMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWRiMiwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDRjMDQwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2OThjLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZiNzEsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHgwNDAxZmZiYSwgMHg1YzAwMDgwMCwKIAkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjMDQwMDAwLCAweDRjMDgwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmUyMSwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwKKwkweDAyMDFmODAwLCAweDAwMTA2OThjLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDZiNzEsIDB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDY5ODIsCiAJMHg1OWM0MDAwNiwgMHg4NDAwMDUwMCwgMHg0ODAzODgwNiwgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZWRlLCAweDQ5N2I4ODgwLCAweDAyMDFmODAwLCAweDAwMTBhOWMwLAotCTB4MDIwMWY4MDAsIDB4MDAxMGE5Y2UsIDB4MDIwMWY4MDAsIDB4MDAxMDE4MTUsCisJMHgwMDEwNmMzMiwgMHg0OTdiODg4MCwgMHgwMjAxZjgwMCwgMHgwMDEwYTdlNywKKwkweDAyMDFmODAwLCAweDAwMTBhN2Y1LCAweDAyMDFmODAwLCAweDAwMTAxODg2LAogCTB4NGEwMzUwNGMsIDB4MDAwMDAwMDQsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDQsCi0JMHg0YTAzODgwNSwgMHgwMDAwMDAwMSwgMHg0MjAwMTAwMCwgMHgwMDEwNTA1OCwKLQkweDAyMDFmODAwLCAweDAwMTA2MDg0LCAweDAyMDFmODAwLCAweDAwMTAwNmQ0LAotCTB4MDQwMWY4YzEsIDB4MDQwMDAwMDYsIDB4NDIwMDYwMDAsIDB4ZmVmZmZmZmYsCi0JMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNDUyLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAotCTB4MDAxMDE1OTAsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsCisJMHg0YTAzODgwNSwgMHgwMDAwMDAwMSwgMHg0MjAwMTAwMCwgMHgwMDEwNGQyYywKKwkweDAyMDFmODAwLCAweDAwMTA1ZGJkLCAweDAyMDFmODAwLCAweDAwMTAwNzFhLAorCTB4MDQwMWY4YmYsIDB4MDQwMDAwMDYsIDB4NDIwMDYwMDAsIDB4ZmVmZmZmZmYsCisJMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDBhZCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNDhjLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDE1ZmEsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsCiAJMHg1OWM0MDAwOCwgMHg4YzAwMDUwOCwgMHgwNDAyMDAwNywgMHg0YTAzODgwOCwKIAkweDAwMDAwMDEwLCAweDQyMDFkMDAwLCAweDAwMDAxMzg4LCAweDAyMDFmODAwLAotCTB4MDAxMDYwOGUsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsIDB4NTlhODA4MzMsCisJMHgwMDEwNWRkMiwgMHgxYzAxZjAwMCwgMHg0YzA0MDAwMCwgMHg1OWE4MDgzMywKIAkweDgyMDQwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDBiLCAweDgyMDQwNTgwLAogCTB4MDAwMDAwMDEsIDB4MDQwMDAwMGIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDIsCiAJMHgwNDAwMDAwYiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwYiwKLQkweDA0MDFmMDU3LCAweDRhMDM1MDE3LCAweDAwMDAwMDAwLCAweDA0MDFmMDA5LAorCTB4MDQwMWYwNTUsIDB4NGEwMzUwMTcsIDB4MDAwMDAwMDAsIDB4MDQwMWYwMDksCiAJMHg0YTAzNTAxNywgMHgwMDAwMDAwNCwgMHgwNDAxZjAwNiwgMHg0YTAzNTAxNywKIAkweDAwMDAwMDAxLCAweDA0MDFmMDAzLCAweDRhMDM1MDE3LCAweDAwMDAwMDA3LAogCTB4NDk3Yjg4ODAsIDB4NGEwMzg4OTMsIDB4MDAwMDAwMDEsIDB4NDE3ODAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTYwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNmVkZSwKKwkweDAyMDFmODAwLCAweDAwMTAxNjcwLCAweDAyMDFmODAwLCAweDAwMTA2YzMyLAogCTB4ODM2YzBkODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMDgsIDB4NTljNDAwMDYsCiAJMHg4MjAwMDUwMCwgMHhmZmZmZmYwZiwgMHg4MjAwMDU0MCwgMHgwNDAwMDAwMSwKIAkweDQ4MDM4ODA2LCAweDA0MDFmMDA3LCAweDU5YzQwMDA2LCAweDgyMDAwNTAwLAogCTB4ZmZmZmZmMGYsIDB4ODIwMDA1NDAsIDB4MDQwMDAwMDAsIDB4NDgwMzg4MDYsCi0JMHgwNDAxZjg3NSwgMHgwNDAyMDAwNSwgMHg1OWM0MDgwNiwgMHg4MjA0MGQwMCwKLQkweGZiZmZmZjBmLCAweDQ4MDc4ODA2LCAweDQyMDBiMDAwLCAweDAwMDAwMDA1LAotCTB4NTljNDAwMDUsIDB4OGMwMDA1MzQsIDB4MDQwMjAwMzMsIDB4NDIwMDYwMDAsCi0JMHhmYzE4ZmZmZiwgMHg0MjAwNjgwMCwgMHgwMTAwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MjdkLCAweDAyMDFmODAwLCAweDAwMTAxOTM3LCAweDU5YzQwOGE0LAotCTB4ODIwNDBkMDAsIDB4MDAwMDAwMGYsIDB4ODIwNDBkODAsIDB4MDAwMDAwMGMsCi0JMHgwNDAwMDAwYSwgMHg0MjAwNjAwMCwgMHhmZWZmZmZmZiwgMHg0MjAwNjgwMCwKLQkweDAyMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA0MjdkLCAweDgwNThiMDQwLAotCTB4MDQwMjA3ZTgsIDB4MDQwMWY4YTEsIDB4MDQwMWY4NTMsIDB4MDQwMDAwMDYsCi0JMHg0MjAwNjAwMCwgMHhmZWZmZmZmZiwgMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MjdkLCAweDgzNmMwZDgwLCAweDAwMDAwMDA0LCAweDA0MDAwMDA2LAotCTB4NTlhODA4NGQsIDB4NDIwMDEwMDAsIDB4MDAxMDUwNjUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjA2ZSwgMHg0YTAzNTAzMywgMHgwMDAwMDAwNCwgMHgwNDAxZmUzMSwKLQkweDA0MDFmODQxLCAweDA0MDIwMDA4LCAweDU5YzQwOGE0LCAweDgyMDQwZDAwLAotCTB4MDAwMDAwMGYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGMsIDB4MDIwMjA4MDAsCi0JMHgwMDEwMDVkOCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKLQkweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2MDllLCAweDRhMDM1MDEwLAotCTB4MDBmZmZmZmYsIDB4NDk3YjUwMzIsIDB4NTlhODAwMmEsIDB4ODIwMDA1MDAsCi0JMHhmZmZmMDAwMCwgMHg0ODAzNTAyYSwgMHg0OTdiODg4MCwgMHg0OTdiODg5MywKLQkweDQxNzgwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNjA2LCAweDU5YzQwMDAxLAotCTB4ODIwMDA1MDAsIDB4ZmZmZmZjZmYsIDB4NDgwMzg4MDEsIDB4NDIwMDYwMDAsCi0JMHhmYzE4ZmZmZiwgMHg0MTc4NjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDI3ZCwKLQkweDRhMDM4ODA4LCAweDAwMDAwMDAwLCAweDVjMDAwMDAwLCAweDgwMDAwMWMwLAotCTB4MDIwMjA4MDAsIDB4MDAxMDQxMWQsIDB4NGEwMzg4MDUsIDB4MDQwMDAwZjAsCi0JMHg1OWM0MDAwNiwgMHg4MjAwMDUwMCwgMHhmZmZmZmZjZiwgMHg4MjAwMDU0MCwKLQkweDQ0MDAwMGMxLCAweDQ4MDM4ODA2LCAweDFjMDFmMDAwLCAweDRjNWMwMDAwLAotCTB4NTlhOGI4MzIsIDB4ODI1Y2JkODAsIDB4MDAwMGFhYWEsIDB4NWMwMGI4MDAsCi0JMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwgMHg1OTljYjgxOCwgMHg4MjVjYmQwMCwKLQkweDAwMDAwMDMwLCAweDgyNWNiZDgwLCAweDAwMDAwMDAwLCAweDVjMDBiODAwLAotCTB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsIDB4NTk5Y2I4MTgsIDB4ODI1Y2JkMDAsCi0JMHgwMDAwMDAzMCwgMHg4MjVjYmQ4MCwgMHgwMDAwMDAxMCwgMHg1YzAwYjgwMCwKLQkweDFjMDFmMDAwLCAweDRjNWMwMDAwLCAweDU5OWNiODE4LCAweDgyNWNiZDAwLAotCTB4MDAwMDAwMzAsIDB4ODI1Y2JkODAsIDB4MDAwMDAwMjAsIDB4NWMwMGI4MDAsCi0JMHgxYzAxZjAwMCwgMHg1OWE4MDAwNSwgMHg0ODAzYzg1NywgMHg4MjAwMGQwMCwKLQkweDAwMDAwMDEzLCAweDA0MDAwMDI1LCAweDU5OWMxMDE3LCAweDRkM2MwMDAwLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMTEsIDB4MDQwMDAwMDcsIDB4NDIwMjc4MDAsCi0JMHgwMDAwMDQwMCwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAyMDAwYSwKLQkweDA0MDFmMDEyLCAweDQyMDI3ODAwLCAweDAwMDAwNDA4LCAweDAyMDFmODAwLAotCTB4MDAxMDNiMjUsIDB4MDQwMDAwMGQsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDMsCi0JMHgwNDAxZjAwMywgMHg0MjAwMzAwMCwgMHgwMDAwMDAwNCwgMHg0MjAyODAwMCwKLQkweDAwMDAwMDBlLCAweDAyMDFmODAwLCAweDAwMTBhNDQ5LCAweDU5OWMxMDE3LAotCTB4OGMwODE1MGEsIDB4MDQwMjAwMDcsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMWZlNSwgMHg4MDAwMDU4MCwgMHgwNDAxZjgwZCwKLQkweDVjMDI3ODAwLCAweDA0MDFmMDBhLCAweDAyMDFmODAwLCAweDAwMTAzYjI1LAotCTB4MDQwMDAwMDcsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMGYsIDB4NDIwMDMwMDAsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwYTQ0OSwgMHgxYzAxZjAwMCwKLQkweDU5YTgwMDA1LCAweDA0MDAwMDA0LCAweDgyMDAwNTQwLCAweDAwMDAwMDEwLAotCTB4MDQwMWYwMDMsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmZWYsIDB4NDgwMzUwMDUsCi0JMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YzU4MDAwMCwKLQkweDQyMDAwMDAwLCAweDAwMTBiOGNiLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4NDIwMDA4MDAsIDB4MDAxMGMwZjEsIDB4NTljNDAwMDMsIDB4NDQwMDA4MDAsCi0JMHg1OWM0MDAwNCwgMHg0ODAwMDgwMSwgMHg1OWM0MDAwYiwgMHg0ODAwMDgwMiwKLQkweDU5YzQwMDhlLCAweDQ4MDAwODAzLCAweDU5YzQwMDhmLCAweDQ4MDAwODA0LAotCTB4NTljNDAwOTAsIDB4NDgwMDA4MDUsIDB4NTljNDAwOTEsIDB4NDgwMDA4MDYsCi0JMHg1OWM0MDA5MiwgMHg0ODAwMDgwNywgMHg1OWM0MDA5MywgMHg0ODAwMDgwOCwKLQkweDU5YzQwMDk5LCAweDQ4MDAwODA5LCAweDU5YzQwMDllLCAweDQ4MDAwODBhLAotCTB4NTljNDAwYWEsIDB4NDgwMDA4MGIsIDB4NTljNDAwYWYsIDB4NDgwMDA4MGMsCi0JMHg1OWM0MDBiMiwgMHg0ODAwMDgwZCwgMHg1OWM0MDBiMSwgMHg0ODAwMDgwZSwKLQkweDgyMDQwYzAwLCAweDAwMDAwMDBmLCAweDQxYzQxODAwLCAweDQyMDBiMDAwLAotCTB4MDAwMDAwMzAsIDB4NTgwYzAwNTAsIDB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsCi0JMHg4MDBjMTgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYiwgMHg0MWM0MTgwMCwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDIwLCAweDU4MGMwMDEwLCAweDQ0MDAwODAwLAorCTB4MDQwMWY4NzMsIDB4MDQwMjAwMDUsIDB4NTljNDA4MDYsIDB4ODIwNDBkMDAsCisJMHhmYmZmZmYwZiwgMHg0ODA3ODgwNiwgMHg1OWM0MDAwNSwgMHg4YzAwMDUzNCwKKwkweDA0MDIwMDMzLCAweDQyMDA2MDAwLCAweGZjMThmZmZmLCAweDQyMDA2ODAwLAorCTB4MDEwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQwYWQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTlhNCwgMHg1OWM0MDhhNCwgMHg4MjA0MGQwMCwgMHgwMDAwMDAwZiwKKwkweDgyMDQwZDgwLCAweDAwMDAwMDBjLCAweDA0MDIwOGE5LCAweDA0MDFmODVjLAorCTB4MDQwMDAwMDYsIDB4NDIwMDYwMDAsIDB4ZmVmZmZmZmYsIDB4NDE3ODY4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDBhZCwgMHg4MzZjMGQ4MCwgMHgwMDAwMDAwNCwKKwkweDA0MDAwMDBmLCAweDA0MDFmODVhLCAweDA0MDIwMDA4LCAweDU5OTQwMDA1LAorCTB4ODIwMDA1ODAsIDB4MDAxMDNmMzcsIDB4MDQwMjAwMDQsIDB4NTk5NDAwMDQsCisJMHg4MDAwMDFjMCwgMHgwNDAyMDAwNiwgMHg1OWE4MDg0ZCwgMHg0MjAwMTAwMCwKKwkweDAwMTA0ZDM5LCAweDAyMDFmODAwLCAweDAwMTA1ZGE3LCAweDRhMDM1MDMzLAorCTB4MDAwMDAwMDQsIDB4MDQwMWZlMzMsIDB4MDQwMWY4NDEsIDB4MDQwMjAwMDgsCisJMHg1OWM0MDhhNCwgMHg4MjA0MGQwMCwgMHgwMDAwMDAwZiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDBjLCAweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDVjMDAwODAwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWRlMiwgMHg0YTAzNTAxMCwgMHgwMGZmZmZmZiwgMHg0OTdiNTAzMiwKKwkweDU5YTgwMDJhLCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDQ4MDM1MDJhLAorCTB4NDk3Yjg4ODAsIDB4NDk3Yjg4OTMsIDB4NDE3ODAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTY3MCwgMHg1OWM0MDAwMSwgMHg4MjAwMDUwMCwgMHhmZmZmZmNmZiwKKwkweDQ4MDM4ODAxLCAweDQyMDA2MDAwLCAweGZjMThmZmZmLCAweDQxNzg2ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQwYWQsIDB4NGEwMzg4MDgsIDB4MDAwMDAwMDAsCisJMHg1YzAwMDAwMCwgMHg4MDAwMDFjMCwgMHgwMjAyMDgwMCwgMHgwMDEwM2YzNywKKwkweDRhMDM4ODA1LCAweDA0MDAwMGYwLCAweDU5YzQwMDA2LCAweDgyMDAwNTAwLAorCTB4ZmZmZmZmY2YsIDB4ODIwMDA1NDAsIDB4NDQwMDAwYzEsIDB4NDgwMzg4MDYsCisJMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwgMHg1OWE4YjgzMiwgMHg4MjVjYmQ4MCwKKwkweDAwMDBhYWFhLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDRjNWMwMDAwLAorCTB4NTk5Y2I4MTgsIDB4ODI1Y2JkMDAsIDB4MDAwMDAwMzAsIDB4ODI1Y2JkODAsCisJMHgwMDAwMDAwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0YzVjMDAwMCwKKwkweDU5OWNiODE4LCAweDgyNWNiZDAwLCAweDAwMDAwMDMwLCAweDgyNWNiZDgwLAorCTB4MDAwMDAwMTAsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4NGM1YzAwMDAsCisJMHg1OTljYjgxOCwgMHg4MjVjYmQwMCwgMHgwMDAwMDAzMCwgMHg4MjVjYmQ4MCwKKwkweDAwMDAwMDIwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDA1LAorCTB4NDgwM2M4NTcsIDB4ODIwMDBkMDAsIDB4MDAwMDAwMTMsIDB4MDQwMDAwMjQsCisJMHg1OTljMTAxNywgMHg0ZDNjMDAwMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAxMSwKKwkweDA0MDAwMDA2LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAzOTNlLAorCTB4MDQwMjAwMGEsIDB4MDQwMWYwMTIsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzkzZSwgMHgwNDAwMDAwZCwgMHg0MjAwMzAwMCwKKwkweDAwMDAwMDAzLCAweDA0MDFmMDAzLCAweDQyMDAzMDAwLCAweDAwMDAwMDA0LAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMGUsIDB4MDIwMWY4MDAsIDB4MDAxMGEyNWIsCisJMHg1OTljMTAxNywgMHg4YzA4MTUwYSwgMHgwNDAyMDAwNywgMHg0MjAyODAwMCwKKwkweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTAxZDkwLCAweDgwMDAwNTgwLAorCTB4MDQwMWY4MGQsIDB4NWMwMjc4MDAsIDB4MDQwMWYwMGEsIDB4MDIwMWY4MDAsCisJMHgwMDEwMzkzZSwgMHgwNDAwMDAwNywgMHg0MjAyODAwMCwgMHgwMDAwMDAwZiwKKwkweDQyMDAzMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTBhMjViLAorCTB4MWMwMWYwMDAsIDB4NTlhODAwMDUsIDB4MDQwMDAwMDQsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAxMCwgMHgwNDAxZjAwMywgMHg4MjAwMDUwMCwgMHhmZmZmZmZlZiwKKwkweDQ4MDM1MDA1LCAweDQ4MDNjODU3LCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NGM1ODAwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2Y2EsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHg0MjAwMDgwMCwgMHgwMDEwYmVmMCwgMHg1OWM0MDAwMywKKwkweDQ0MDAwODAwLCAweDU5YzQwMDA0LCAweDQ4MDAwODAxLCAweDU5YzQwMDBiLAorCTB4NDgwMDA4MDIsIDB4NTljNDAwOGUsIDB4NDgwMDA4MDMsIDB4NTljNDAwOGYsCisJMHg0ODAwMDgwNCwgMHg1OWM0MDA5MCwgMHg0ODAwMDgwNSwgMHg1OWM0MDA5MSwKKwkweDQ4MDAwODA2LCAweDU5YzQwMDkyLCAweDQ4MDAwODA3LCAweDU5YzQwMDkzLAorCTB4NDgwMDA4MDgsIDB4NTljNDAwOTksIDB4NDgwMDA4MDksIDB4NTljNDAwOWUsCisJMHg0ODAwMDgwYSwgMHg1OWM0MDBhYSwgMHg0ODAwMDgwYiwgMHg1OWM0MDBhZiwKKwkweDQ4MDAwODBjLCAweDU5YzQwMGIyLCAweDQ4MDAwODBkLCAweDU5YzQwMGIxLAorCTB4NDgwMDA4MGUsIDB4ODIwNDBjMDAsIDB4MDAwMDAwMGYsIDB4NDFjNDE4MDAsCisJMHg0MjAwYjAwMCwgMHgwMDAwMDAzMCwgMHg1ODBjMDA1MCwgMHg0NDAwMDgwMCwKIAkweDgwMDQwODAwLCAweDgwMGMxODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZiLAotCTB4NDk3Yjg4MzAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwNDAsIDB4NTljNDAwMzEsCi0JMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywKLQkweDQ5N2I4OGFjLCAweDQyMDBiMDAwLCAweDAwMDAwMDEwLCAweDU5YzQwMGFkLAotCTB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsCi0JMHg1OWM0MTAwMSwgMHg0YzA4MDAwMCwgMHg4NDA4MTUwYywgMHg0ODBiODgwMSwKLQkweDRhMDM3MGU0LCAweDAwMDAwMzAwLCAweDRhMDM3MGU1LCAweGIwMDAwMDAwLAotCTB4NDIwMDA4MDAsIDB4MDAwMDA4MDAsIDB4ODAwNDA4NDAsIDB4MDIwMDA4MDAsCi0JMHgwMDEwMDVkOCwgMHg1OWI4MDBlNSwgMHg4YzAwMDUzOCwgMHgwNDAyMDdmYiwKLQkweDRhMDM3MGU0LCAweDAwMDAwMjAwLCAweDQyMDA2MDAwLCAweGZmZmZmZmZmLAotCTB4NDIwMDY4MDAsIDB4ODAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsCi0JMHg0YTAzODgwNywgMHgwMDAwMDAwMSwgMHg0OTdiODgwNywgMHg0YTAzODgwOCwKLQkweDAwMDAwMDEwLCAweDQyMDA2MDAwLCAweGZjZjhmZmZmLCAweDQyMDA2ODAwLAotCTB4MDEwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQyN2QsIDB4NWMwMDEwMDAsCi0JMHg0ODBiODgwMSwgMHg0MjAwMDgwMCwgMHgwMDEwYzBmMSwgMHg1MDA0MDAwMCwKLQkweDQ4MDM4ODAzLCAweDU4MDQwMDAxLCAweDQ4MDM4ODA0LCAweDU4MDQwMDAyLAotCTB4NDgwMzg4MGIsIDB4NTgwNDAwMDMsIDB4NDgwMzg4OGUsIDB4NTgwNDAwMDQsCi0JMHg0ODAzODg4ZiwgMHg1ODA0MDAwNSwgMHg0ODAzODg5MCwgMHg1ODA0MDAwNiwKLQkweDQ4MDM4ODkxLCAweDU4MDQwMDA3LCAweDQ4MDM4ODkyLCAweDU4MDQwMDA4LAotCTB4NDgwMzg4OTMsIDB4NTgwNDAwMDksIDB4NDgwMzg4OTksIDB4NTgwNDAwMGEsCi0JMHg0ODAzODg5ZSwgMHg1ODA0MDAwYiwgMHg0ODAzODhhYSwgMHg1ODA0MDAwYywKLQkweDQ4MDM4OGFmLCAweDU4MDQwMDBkLCAweDQ4MDM4OGIyLCAweDU4MDQwMDBlLAotCTB4NDgwMzg4YjEsIDB4ODIwNDBjMDAsIDB4MDAwMDAwMGYsIDB4NDFjNDE4MDAsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAzMCwgMHg1MDA0MDAwMCwgMHg0ODAwMTg1MCwKLQkweDgwMDQwODAwLCAweDgwMGMxODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZiLAotCTB4NDFjNDE4MDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMjAsIDB4NTAwNDAwMDAsCi0JMHg0ODAwMTgxMCwgMHg4MDA0MDgwMCwgMHg4MDBjMTgwMCwgMHg4MDU4YjA0MCwKKwkweDQxYzQxODAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDIwLCAweDU4MGMwMDEwLAorCTB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4ODAwYzE4MDAsIDB4ODA1OGIwNDAsCiAJMHgwNDAyMDdmYiwgMHg0OTdiODgzMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDA0MCwKLQkweDUwMDQwMDAwLCAweDQ4MDM4ODMxLCAweDgwMDQwODAwLCAweDgwNThiMDQwLAorCTB4NTljNDAwMzEsIDB4NDQwMDA4MDAsIDB4ODAwNDA4MDAsIDB4ODA1OGIwNDAsCiAJMHgwNDAyMDdmYywgMHg0OTdiODhhYywgMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwKLQkweDUwMDQwMDAwLCAweDQ4MDM4OGFkLCAweDgwMDQwODAwLCAweDgwNThiMDQwLAotCTB4MDQwMjA3ZmMsIDB4NDk3Yjg4ODAsIDB4NDE3ODAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTYwNiwgMHg1OWM0MDhhNCwgMHg4MjA0MGQwMCwgMHgwMDAwMDAwZiwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDBjLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAotCTB4NGEwMzg4MDUsIDB4MDQwMDAwMDAsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg0YzU4MDAwMCwgMHg0Y2U4MDAwMCwgMHg0MjAwMDAwMCwKLQkweDAwMTBiODQ1LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5YzQxMDA4LAotCTB4NGMwODAwMDAsIDB4ODIwODA1MDAsIDB4ZmZmZmZmN2YsIDB4NDgwMzg4MDgsCi0JMHg1OWM0MDAwNCwgMHg4MjAwMDUwMCwgMHgwMDAwM2UwMiwgMHgwNDAwMDAwNSwKLQkweDQyMDFkMDAwLCAweDAwMDAwMDE0LCAweDAyMDFmODAwLCAweDAwMTA2MDhlLAotCTB4NTljNDAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmMGYsIDB4NDgwMzg4MDYsCi0JMHg0YTAzODgwNSwgMHgwMDAwMDAxMCwgMHg0YTAzODgwOCwgMHgwMDAwMDAwNCwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDY1LCAweDU5YzQwMDA1LCAweDhjMDAwNTA4LAotCTB4MDQwMjAwMTIsIDB4NDIwMWQwMDAsIDB4MDAwMDAzZTgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjA4ZSwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZWRlLCAweDRhMDM4ODA4LCAweDAwMDAwMDA4LCAweDRhMDM1MDMzLAotCTB4MDAwMDAwMDEsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjAzMCwgMHgwMjAxZjgwMCwgMHgwMDEwMGFlMCwKLQkweDQyMDAwMDAwLCAweDAwMTBiOGE4LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDBlZjQsIDB4NDk3Yjg4ODAsIDB4NTlhODAwMmEsCisJMHg1OWM0MDBhZCwgMHg0NDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg4MDU4YjA0MCwKKwkweDA0MDIwN2ZjLCAweDU5YzQxMDAxLCAweDRjMDgwMDAwLCAweDg0MDgxNTBjLAorCTB4NDgwYjg4MDEsIDB4NGEwMzcwZTQsIDB4MDAwMDAzMDAsIDB4NGEwMzcwZTUsCisJMHhiMDAwMDAwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDgwMCwgMHg4MDA0MDg0MCwKKwkweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDU5YjgwMGU1LCAweDhjMDAwNTM4LAorCTB4MDQwMjA3ZmIsIDB4NGEwMzcwZTQsIDB4MDAwMDAyMDAsIDB4NDIwMDYwMDAsCisJMHhmZmZmZmZmZiwgMHg0MjAwNjgwMCwgMHg4MDAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MGFkLCAweDRhMDM4ODA3LCAweDAwMDAwMDAxLCAweDQ5N2I4ODA3LAorCTB4NGEwMzg4MDgsIDB4MDAwMDAwMTAsIDB4NDIwMDYwMDAsIDB4ZmNmOGZmZmYsCisJMHg0MjAwNjgwMCwgMHgwMTAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDBhZCwKKwkweDVjMDAxMDAwLCAweDQ4MGI4ODAxLCAweDQyMDAwODAwLCAweDAwMTBiZWYwLAorCTB4NTAwNDAwMDAsIDB4NDgwMzg4MDMsIDB4NTgwNDAwMDEsIDB4NDgwMzg4MDQsCisJMHg1ODA0MDAwMiwgMHg0ODAzODgwYiwgMHg1ODA0MDAwMywgMHg0ODAzODg4ZSwKKwkweDU4MDQwMDA0LCAweDQ4MDM4ODhmLCAweDU4MDQwMDA1LCAweDQ4MDM4ODkwLAorCTB4NTgwNDAwMDYsIDB4NDgwMzg4OTEsIDB4NTgwNDAwMDcsIDB4NDgwMzg4OTIsCisJMHg1ODA0MDAwOCwgMHg0ODAzODg5MywgMHg1ODA0MDAwOSwgMHg0ODAzODg5OSwKKwkweDU4MDQwMDBhLCAweDQ4MDM4ODllLCAweDU4MDQwMDBiLCAweDQ4MDM4OGFhLAorCTB4NTgwNDAwMGMsIDB4NDgwMzg4YWYsIDB4NTgwNDAwMGQsIDB4NDgwMzg4YjIsCisJMHg1ODA0MDAwZSwgMHg0ODAzODhiMSwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwZiwKKwkweDQxYzQxODAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDMwLCAweDUwMDQwMDAwLAorCTB4NDgwMDE4NTAsIDB4ODAwNDA4MDAsIDB4ODAwYzE4MDAsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmYiwgMHg0MWM0MTgwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwKKwkweDUwMDQwMDAwLCAweDQ4MDAxODEwLCAweDgwMDQwODAwLCAweDgwMGMxODAwLAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZmIsIDB4NDk3Yjg4MzAsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDA0MCwgMHg1MDA0MDAwMCwgMHg0ODAzODgzMSwgMHg4MDA0MDgwMCwKKwkweDgwNThiMDQwLCAweDA0MDIwN2ZjLCAweDQ5N2I4OGFjLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMTAsIDB4NTAwNDAwMDAsIDB4NDgwMzg4YWQsIDB4ODAwNDA4MDAsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywgMHg0OTdiODg4MCwgMHg0MTc4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxNjcwLCAweDU5YzQwOGE0LCAweDgyMDQwZDAwLAorCTB4MDAwMDAwMGYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGMsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDYxNSwgMHg0YTAzODgwNSwgMHgwNDAwMDAwMCwgMHg1YzAwYjAwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjNTgwMDAwLCAweDRjZTgwMDAwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2NDMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg1OWM0MTAwOCwgMHg0YzA4MDAwMCwgMHg4MjA4MDUwMCwgMHhmZmZmZmY3ZiwKKwkweDQ4MDM4ODA4LCAweDU5YzQwMDA0LCAweDgyMDAwNTAwLCAweDAwMDAzZTAyLAorCTB4MDQwMDAwMDUsIDB4NDIwMWQwMDAsIDB4MDAwMDAwMTQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWRkMiwgMHg1OWM0MDAwNiwgMHg4MjAwMDUwMCwgMHhmZmZmZmYwZiwKKwkweDQ4MDM4ODA2LCAweDRhMDM4ODA1LCAweDAwMDAwMDEwLCAweDRhMDM4ODA4LAorCTB4MDAwMDAwMDQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwNjUsIDB4NTljNDAwMDUsCisJMHg4YzAwMDUwOCwgMHgwNDAyMDAxMiwgMHg0MjAxZDAwMCwgMHgwMDAwMDNlOCwKKwkweDAyMDFmODAwLCAweDAwMTA1ZGQyLCAweDgwNThiMDQwLCAweDA0MDIwN2Y4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDZjMzIsIDB4NGEwMzg4MDgsIDB4MDAwMDAwMDgsCisJMHg0YTAzNTAzMywgMHgwMDAwMDAwMSwgMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDMwLCAweDAyMDFmODAwLAorCTB4MDAxMDBiMjksIDB4NDIwMDAwMDAsIDB4MDAxMGI2YTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHgwMjAxZjgwMCwgMHgwMDEwMGY0MiwgMHg0OTdiODg4MCwKKwkweDU5YTgwMDJhLCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDRjMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE2NzAsIDB4NWMwMDAwMDAsIDB4NDgwMzg4ODAsCisJMHg0YTAzODgwOCwgMHgwMDAwMDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDA2NSwKKwkweDRhMDM4ODA1LCAweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTAxOWE0LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwZjAsIDB4NTljNDAwMDUsIDB4ODAwNDBkMDAsCisJMHgwNDAwMDAwOCwgMHg0MjAxZDAwMCwgMHgwMDAwMDNlOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA1ZGQyLCAweDgwNThiMDQwLCAweDA0MDIwN2YyLCAweDA0MDFmN2QxLAorCTB4NTljNDAwMDYsIDB4ODIwMDA1NDAsIDB4MDAwMDAwZjAsIDB4NDgwMzg4MDYsCisJMHg1OWE4MDAxZSwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwgMHg4MDAwMDAwMCwKKwkweDQ4MDM4ODkzLCAweDgwMDAwNTgwLCAweDVjMDAxMDAwLCAweDRkZjAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE5Y2EsIDB4NWMwM2UwMDAsIDB4NDgwYjg4MDgsCisJMHg1YzAxZDAwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDRjNTgwMDAwLCAweDRjZTgwMDAwLCAweDU5YzQxMDA4LCAweDgyMDgwNTAwLAorCTB4ZmZmZmZmN2YsIDB4NDgwMzg4MDgsIDB4NGMwODAwMDAsIDB4NTljNDAwMDQsCisJMHg4MjAwMDUwMCwgMHgwMDAwM2UwMiwgMHgwNDAwMDAwNSwgMHg0MjAxZDAwMCwKKwkweDAwMDAwMDE0LCAweDAyMDFmODAwLCAweDAwMTA1ZGQyLCAweDAyMDFmODAwLAorCTB4MDAxMDBiMjksIDB4NDIwMDAwMDAsIDB4MDAxMGI2YTgsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHgwMjAxZjgwMCwgMHgwMDEwMGY0MiwgMHg0YTAzODgwOCwKKwkweDAwMDAwMDAyLCAweDgwMDAwNTgwLCAweDQ4MDM4ODgwLCAweDQ4MDM4ODkzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDE2NzAsIDB4NDIwMGIwMDAsIDB4MDAwMDAzODQsCisJMHg0YTAzODgwNSwgMHgwMDAwMDBmMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTlhNCwKKwkweDQyMDAwODAwLCAweDAwMDAwMGYwLCAweDU5YzQwMDA1LCAweDgwMDQwZDAwLAorCTB4MDQwMDAwMTUsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZDAsIDB4MDQwMjAwMTIsCisJMHg0MjAxZDAwMCwgMHgwMDAwMDA2NywgMHgwMjAxZjgwMCwgMHgwMDEwNWRkMiwKKwkweDgwNThiMDQwLCAweDA0MDIwN2VmLCAweDAyMDFmODAwLCAweDAwMTA2YzMyLAorCTB4NGEwMzg4MDgsIDB4MDAwMDAwMDgsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsCisJMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmMDEwLCAweDQ5N2I4ODgwLCAweDU5YTgwMDFlLCAweDgwMDAwNTQwLAorCTB4MDQwMjAwMDIsIDB4ODAwMDAwMDAsIDB4NDgwMzg4OTMsIDB4NTlhODAwMmEsCiAJMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwgMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxNjA2LCAweDVjMDAwMDAwLCAweDQ4MDM4ODgwLCAweDRhMDM4ODA4LAotCTB4MDAwMDAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwNjUsIDB4NGEwMzg4MDUsCi0JMHgwMDAwMDBmMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTkzNywgMHg0MjAwMDgwMCwKLQkweDAwMDAwMGYwLCAweDU5YzQwMDA1LCAweDgwMDQwZDAwLCAweDA0MDAwMDA4LAotCTB4NDIwMWQwMDAsIDB4MDAwMDAzZTgsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsCi0JMHg4MDU4YjA0MCwgMHgwNDAyMDdmMiwgMHgwNDAxZjdkMSwgMHg1OWM0MDAwNiwKLQkweDgyMDAwNTQwLCAweDAwMDAwMGYwLCAweDQ4MDM4ODA2LCAweDU5YTgwMDFlLAotCTB4ODAwMDA1NDAsIDB4MDQwMjAwMDIsIDB4ODAwMDAwMDAsIDB4NDgwMzg4OTMsCi0JMHg4MDAwMDU4MCwgMHg1YzAwMTAwMCwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxOTVkLCAweDVjMDNlMDAwLCAweDQ4MGI4ODA4LCAweDVjMDFkMDAwLAotCTB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGM1ODAwMDAsCi0JMHg0Y2U4MDAwMCwgMHg1OWM0MTAwOCwgMHg4MjA4MDUwMCwgMHhmZmZmZmY3ZiwKLQkweDQ4MDM4ODA4LCAweDRjMDgwMDAwLCAweDU5YzQwMDA0LCAweDgyMDAwNTAwLAotCTB4MDAwMDNlMDIsIDB4MDQwMDAwMDUsIDB4NDIwMWQwMDAsIDB4MDAwMDAwMTQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjA4ZSwgMHgwMjAxZjgwMCwgMHgwMDEwMGFlMCwKLQkweDQyMDAwMDAwLCAweDAwMTBiOGE5LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDBlZjQsIDB4NGEwMzg4MDgsIDB4MDAwMDAwMDIsCi0JMHg4MDAwMDU4MCwgMHg0ODAzODg4MCwgMHg0ODAzODg5MywgMHgwMjAxZjgwMCwKLQkweDAwMTAxNjA2LCAweDQyMDBiMDAwLCAweDAwMDAwMzg0LCAweDRhMDM4ODA1LAotCTB4MDAwMDAwZjAsIDB4MDIwMWY4MDAsIDB4MDAxMDE5MzcsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDBmMCwgMHg1OWM0MDAwNSwgMHg4MDA0MGQwMCwgMHgwNDAwMDAxNSwKLQkweDgyMDAwNTAwLCAweDAwMDAwMGQwLCAweDA0MDIwMDEyLCAweDQyMDFkMDAwLAotCTB4MDAwMDAwNjcsIDB4MDIwMWY4MDAsIDB4MDAxMDYwOGUsIDB4ODA1OGIwNDAsCi0JMHgwNDAyMDdlZiwgMHgwMjAxZjgwMCwgMHgwMDEwNmVkZSwgMHg0YTAzODgwOCwKLQkweDAwMDAwMDA4LCAweDRhMDM1MDMzLCAweDAwMDAwMDAxLCAweDQyMDJkODAwLAotCTB4MDAwMDAwMDEsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMTAsCisJMHgwMDEwMTY3MCwgMHg1YzAwMDAwMCwgMHg0ODAzODg4MCwgMHg4MDAwMDU4MCwKKwkweDVjMDAxMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOWNhLAorCTB4NWMwM2UwMDAsIDB4NDgwYjg4MDgsIDB4NWMwMWQwMDAsIDB4NWMwMGIwMDAsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg1OWM0MDAwNCwgMHg4MjAwMDUwMCwKKwkweDAwMDAzZTAyLCAweDA0MDAwMDBhLCAweDAyMDFmODAwLCAweDAwMTA2YzMyLAorCTB4NGEwMzg4MDgsIDB4MDAwMDAwMDgsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsCisJMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjA1MiwgMHgwMjAxZjgwMCwKKwkweDAwMTAwYjI5LCAweDQyMDAwMDAwLCAweDAwMTBiNmE5LCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsIDB4MDAxMDBmNDIsIDB4NTljNDAwMDYsCisJMHg4NDAwMDUwOCwgMHg0ODAzODgwNiwgMHg0YTAzODgwNSwgMHgwMDAwMDAxMCwKKwkweDU5YTgwODA1LCAweDg0MDQwZDRjLCAweDQ4MDc1MDA1LCAweDQyMDAwODAwLAorCTB4MDAwMDAwNjQsIDB4NDIwMDEwMDAsIDB4MDAxMDRkMmMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWRhNywgMHg0YTAzODgwOCwgMHgwMDAwMDAwMCwgMHg0OTdiODg4MCwKKwkweDRhMDM4ODA1LCAweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTAxOWE0LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwZjAsIDB4NTljNDAwMDUsIDB4ODAwNDBkMDAsCisJMHgwNDAwMDAwZSwgMHg4MjAwMDUwMCwgMHgwMDAwMDBlMCwgMHgwNDAyMDAwYiwKKwkweDQyMDFkMDAwLCAweDAwMDAwM2U4LCAweDAyMDFmODAwLCAweDAwMTA1ZGQyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVjODEsIDB4NTk5NDAwMDQsIDB4ODAwMDA1NDAsCisJMHgwNDAyMDdlYywgMHgwNDAxZjAyMywgMHg0YzA4MDAwMCwgMHg0MjAwMTAwMCwKKwkweDAwMTA0ZDM5LCAweDAyMDFmODAwLCAweDAwMTA1Y2M5LCAweDQyMDAxMDAwLAorCTB4MDAxMDRkMmMsIDB4MDIwMWY4MDAsIDB4MDAxMDVkYmQsIDB4NWMwMDEwMDAsCiAJMHg0OTdiODg4MCwgMHg1OWE4MDAxZSwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwKIAkweDgwMDAwMDAwLCAweDQ4MDM4ODkzLCAweDU5YTgwMDJhLCAweDgyMDAwNTAwLAotCTB4MDAwMGZmZmYsIDB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE2MDYsCi0JMHg1YzAwMDAwMCwgMHg0ODAzODg4MCwgMHg4MDAwMDU4MCwgMHg1YzAwMTAwMCwKLQkweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxOTVkLCAweDVjMDNlMDAwLAotCTB4NDgwYjg4MDgsIDB4NWMwMWQwMDAsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg1OWM0MDAwNCwgMHg4MjAwMDUwMCwgMHgwMDAwM2UwMiwKLQkweDA0MDAwMDBhLCAweDAyMDFmODAwLCAweDAwMTA2ZWRlLCAweDRhMDM4ODA4LAotCTB4MDAwMDAwMDgsIDB4NGEwMzUwMzMsIDB4MDAwMDAwMDEsIDB4NDIwMmQ4MDAsCi0JMHgwMDAwMDAwMSwgMHgwNDAxZjA1MiwgMHgwMjAxZjgwMCwgMHgwMDEwMGFlMCwKLQkweDQyMDAwMDAwLCAweDAwMTBiOGFhLCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDBlZjQsIDB4NTljNDAwMDYsIDB4ODQwMDA1MDgsCi0JMHg0ODAzODgwNiwgMHg0YTAzODgwNSwgMHgwMDAwMDAxMCwgMHg1OWE4MDgwNSwKLQkweDg0MDQwZDRjLCAweDQ4MDc1MDA1LCAweDQyMDAwODAwLCAweDAwMDAwMDY0LAotCTB4NDIwMDEwMDAsIDB4MDAxMDUwNTgsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNmUsCi0JMHg0YTAzODgwOCwgMHgwMDAwMDAwMCwgMHg0OTdiODg4MCwgMHg0YTAzODgwNSwKLQkweDAwMDAwMGYwLCAweDAyMDFmODAwLCAweDAwMTAxOTM3LCAweDQyMDAwODAwLAotCTB4MDAwMDAwZjAsIDB4NTljNDAwMDUsIDB4ODAwNDBkMDAsIDB4MDQwMDAwMGUsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDBlMCwgMHgwNDAyMDAwYiwgMHg0MjAxZDAwMCwKLQkweDAwMDAwM2U4LCAweDAyMDFmODAwLCAweDAwMTA2MDhlLCAweDAyMDFmODAwLAotCTB4MDAxMDVmNDgsIDB4NTk5NDAwMDQsIDB4ODAwMDA1NDAsIDB4MDQwMjA3ZWMsCi0JMHgwNDAxZjAyMywgMHg0YzA4MDAwMCwgMHg0MjAwMTAwMCwgMHgwMDEwNTA2NSwKLQkweDAyMDFmODAwLCAweDAwMTA1ZjkwLCAweDQyMDAxMDAwLCAweDAwMTA1MDU4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDYwODQsIDB4NWMwMDEwMDAsIDB4NDk3Yjg4ODAsCi0JMHg1OWE4MDAxZSwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwgMHg4MDAwMDAwMCwKLQkweDQ4MDM4ODkzLCAweDU5YTgwMDJhLCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLAotCTB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDE2MDYsIDB4NWMwMDAwMDAsCi0JMHg0ODAzODg4MCwgMHg1OWE4MDgwNSwgMHg4NDA0MGQwYywgMHg0ODA3NTAwNSwKLQkweDU5YzQwMDA2LCAweDg0MDAwNTQ4LCAweDQ4MDM4ODA2LCAweDAyMDFmODAwLAotCTB4MDAxMDE5NWQsIDB4NGEwMzg4MDgsIDB4MDAwMDAwODAsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg0ZDQwMDAwMCwgMHg0ZDNjMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZWRlLCAweDAyMDFmODAwLCAweDAwMTBhYjMzLCAweDA0MDIwMDI1LAotCTB4NTk5YzEwMTcsIDB4NTlhODA4MDUsIDB4OGMwNDBkMDAsIDB4MDQwMjAwMGMsCi0JMHg4YzA4MTUxYSwgMHgwNDAwMDAxZiwgMHg4NDA0MGQ0MiwgMHg0ODA3NTAwNSwKLQkweDQyMDI4MDAwLCAweDAwMDAwMDA0LCAweDQyMDI3ODAwLCAweDAwMDAwMDBjLAotCTB4OGMwODE1MDgsIDB4MDQwMjAwMDgsIDB4MDQwMWYwMTIsIDB4NDIwMjgwMDAsCi0JMHgwMDAwMDAwNCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwNCwgMHg4YzA4MTUwOCwKKwkweDAwMDBmZmZmLCAweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNjcwLAorCTB4NWMwMDAwMDAsIDB4NDgwMzg4ODAsIDB4NTlhODA4MDUsIDB4ODQwNDBkMGMsCisJMHg0ODA3NTAwNSwgMHg1OWM0MDAwNiwgMHg4NDAwMDU0OCwgMHg0ODAzODgwNiwKKwkweDAyMDFmODAwLCAweDAwMTAxOWNhLCAweDRhMDM4ODA4LCAweDAwMDAwMDgwLAorCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQ0MDAwMDAsIDB4NGQzYzAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNmMzMiwgMHgwMjAxZjgwMCwgMHgwMDEwYTk1YSwKKwkweDA0MDIwMDI0LCAweDU5OWMxMDE3LCAweDU5YTgwODA1LCAweDhjMDQwZDAwLAorCTB4MDQwMjAwMGMsIDB4OGMwODE1MWEsIDB4MDQwMDAwMWUsIDB4ODQwNDBkNDIsCisJMHg0ODA3NTAwNSwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwgMHg0MjAyNzgwMCwKKwkweDAwMDAwMDA4LCAweDhjMDgxNTA4LCAweDA0MDIwMDA3LCAweDA0MDFmMDExLAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMDQsIDB4NDE3YTc4MDAsIDB4OGMwODE1MDgsCiAJMHgwNDAwMDAwYywgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwZSwKLQkweDQyMDI4ODAwLCAweDAwMDBmZmZmLCAweDAyMDFmODAwLCAweDAwMTBhNDQ2LAorCTB4NDIwMjg4MDAsIDB4MDAwMGZmZmYsIDB4MDIwMWY4MDAsIDB4MDAxMGEyNTgsCiAJMHg1YzAyODAwMCwgMHg1OTljMDgxNywgMHg4YzA0MGQwYSwgMHgwNDAyMDAwNSwKLQkweDQ5NDNjODU3LCAweDQ5M2ZjODU3LCAweDAyMDFmODAwLCAweDAwMTAxZmU1LAotCTB4NDk3Yjg4ODAsIDB4NDIwMmQ4MDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZjZmIsCisJMHg0OTQzYzg1NywgMHg0OTNmYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMWQ5MCwKKwkweDQ5N2I4ODgwLCAweDQyMDJkODAwLCAweDAwMDAwMDAxLCAweDA0MDFmY2ZmLAogCTB4NWMwMjc4MDAsIDB4NWMwMjgwMDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMGFlMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjhhYiwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDAyMDFmODAwLCAweDAwMTAwZWY0LCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDE2MDYsIDB4NGEwMzg4ODAsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwMTk1ZCwgMHg0MjAyZTAwMCwKKwkweDAwMTAwYjI5LCAweDQyMDAwMDAwLCAweDAwMTBiNmFhLCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsIDB4MDAxMDBmNDIsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMTY3MCwgMHg0YTAzODg4MCwKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTAxOWNhLCAweDQyMDJlMDAwLAogCTB4MDAwMDAwMDAsIDB4NGEwMzMwMTUsIDB4MDAwMDAwMDEsIDB4NDk3YjMwMWQsCiAJMHg0OTdiMzAwNiwgMHg0YTAzYjAwNCwgMHg2MDAwMDAwMSwgMHg1OWQ4MDAwNSwKIAkweDRhMDNiMDA0LCAweDkwMDAwMDAxLCAweDRhMDNhODA0LCAweDYwMDAwMDAxLAogCTB4NTlkNDAwMDUsIDB4NGEwM2E4MDQsIDB4OTAwMDAwMDEsIDB4MDIwMWYwMDAsCi0JMHgwMDEwNTk4MywgMHg0YTAzYzgyNSwgMHgwMDAwMDAwNCwgMHg0YTAzYzgyNywKKwkweDAwMTA1NjY3LCAweDRhMDNjODI1LCAweDAwMDAwMDA0LCAweDRhMDNjODI3LAogCTB4MDAwMDAwMDQsIDB4NTk5YzA0MDksIDB4ODAwMDBkNDAsIDB4MDQwMDAwMjAsCiAJMHg1OTljMDQwNywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNywgMHg4MDAwMDBjYywKIAkweDU5OWMxMDBiLCAweDgwMDgwNDAwLCAweDQ4MDNiMDAwLCAweDQ5N2JiMDAyLApAQCAtNTQyMSw3MSArNTIxNyw3NSBAQAogCTB4MDAwMDAwMDQsIDB4NGEwM2E4MDQsIDB4MTAwMDAwMDEsIDB4NTllMDA4MDMsCiAJMHg4MjA0MGQwMCwgMHhmZmZmZmJmZiwgMHg4MjA0MGQ0MCwgMHgwMDAwODAwMCwKIAkweDQ4MDdjMDAzLCAweDgwMDQwOWMwLCAweDA0MDAwMDA3LCAweDQyMDJlMDAwLAotCTB4MDAwMDAwMDEsIDB4MDIwMGI4MDAsIDB4MDAwMjA1NTEsIDB4MDIwMGYwMDAsCi0JMHgwMDAyMDU2NiwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDAwMDAwMDAxLCAweDAyMDBiODAwLCAweDAwMDIwNjg1LCAweDAyMDBmMDAwLAorCTB4MDAwMjA2OWEsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsCiAJMHgxYzAxZjAwMCwgMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwKIAkweDU5OTgxMDA1LCAweDgwMDgxMWMwLCAweDA0MDAwMDFlLCAweDU4MDgwMDA1LAotCTB4ODIwMDBkMDAsIDB4NDMwMTg3ODAsIDB4MDIwMjAwMDAsIDB4MDAxMDU4NDYsCisJMHg4MjAwMGQwMCwgMHg0MzAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNTUyYSwKIAkweDhjMDAwNTA4LCAweDA0MDAwMDE1LCAweDU4MGE1ODA4LCAweDU5MmMwMjA0LAogCTB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCiAJMHg4MjAwMGM4MCwgMHgwMDAwMDA0YiwgMHgwNDAyMTAwYiwgMHgwYzAxZjgwZiwKIAkweDVjMDNlMDAwLCAweDgzNzAwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwN2U2LAotCTB4MDIwMGY4MDAsIDB4MDAwMjA1NjYsIDB4MDIwMGIwMDAsIDB4MDAwMjA1NTEsCisJMHgwMjAwZjgwMCwgMHgwMDAyMDY5YSwgMHgwMjAwYjAwMCwgMHgwMDAyMDY4NSwKIAkweDFjMDFmMDAwLCAweDA0MDFmODUwLCAweDVjMDNlMDAwLCAweDA0MDFmN2Y5LAotCTB4MDQwMWY4ZGUsIDB4MDQwMWY3ZmQsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTRhMSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU1MTksIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0YTEsCi0JMHgwMDEwNTRhMSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHg0OTJmYzg1NywgMHg0MjAwMDAwMCwgMHgwMDEwYjg1ZSwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQyMDAwMDAwLCAweDAwMDAwNDAwLAotCTB4MDQwMWYwMTksIDB4NDkyZmM4NTcsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NWQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwKLQkweDA0MDFmMDExLCAweDQ5MmZjODU3LCAweDQyMDAwMDAwLCAweDAwMTBiODVjLAotCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDIwMDAwMDAsIDB4MDAwMDIwMDAsCi0JMHgwNDAxZjAwOSwgMHg0OTJmYzg1NywgMHg0MjAwMDAwMCwgMHgwMDEwYjg1ZiwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQyMDAwMDAwLCAweDAwMDAwODAwLAorCTB4MDQwMWY4ZWUsIDB4MDQwMWY3ZmQsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE3MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxZjksIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNzEsCisJMHgwMDEwNTE3MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHg0OTJmYzg1NywgMHg0MjAwMDAwMCwgMHgwMDEwYjY1ZCwKKwkweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDQyMDAwMDAwLCAweDAwMDAwNDAwLAorCTB4MDQwMWYwMTksIDB4NDkyZmM4NTcsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NWMsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg0MjAwMDAwMCwgMHgwMDAwMTAwMCwKKwkweDA0MDFmMDExLCAweDQ5MmZjODU3LCAweDQyMDAwMDAwLCAweDAwMTBiNjViLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NDIwMDAwMDAsIDB4MDAwMDIwMDAsCisJMHgwNDAxZjAwOSwgMHg0OTJmYzg1NywgMHg0MjAwMDAwMCwgMHgwMDEwYjY1ZSwKKwkweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDQyMDAwMDAwLCAweDAwMDAwODAwLAogCTB4MDQwMWYwMDEsIDB4NDgwM2M4NTcsIDB4NDIwMmUwMDAsIDB4MDAwMDAwMDEsCiAJMHg1OTJjMGMwNCwgMHg4MjA0MGQwMCwgMHhmZmZmODBmZiwgMHg4MDA0MDU0MCwKLQkweDQ4MDI1YzA0LCAweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDU5MmMwMjA0LAorCTB4NDgwMjVjMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjAzODEsIDB4NTkyYzAyMDQsCiAJMHg0OTJmYzg1NywgMHg4MDAwMDExMCwgMHgwNDAwMDdkYiwgMHg4MDAwMDA0MCwKLQkweDA0MDAwMDI1LCAweDQ4MDMzMDAyLCAweDQ5MmYzMDAzLCAweDQ5MmYzMDA0LAotCTB4NGEwMzMwMDgsIDB4MDAxMDU0ZTUsIDB4NDIwMmUwMDAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAzNSwgMHg0ODAzMzAwMiwgMHg0OTJmMzAwMywgMHg0OTJmMzAwNCwKKwkweDRhMDMzMDA4LCAweDAwMTA1MWM1LCAweDQyMDJlMDAwLCAweDAwMDAwMDAzLAogCTB4MWMwMWYwMDAsIDB4NTkyYzAyMDQsIDB4NDkyZmM4NTcsIDB4ODAwMDAxMTAsCi0JMHgwNDAwMDdjZCwgMHg4MDAwMDA0MCwgMHgwNDAwMDAzMywgMHg0ODAzMzAwMiwKLQkweDQ5MmYzMDAzLCAweDQ5MmYzMDA0LCAweDRhMDMzMDA4LCAweDAwMTA1NTAxLAotCTB4NDIwMmUwMDAsIDB4MDAwMDAwMDMsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWIzMywgMHgwMjAyMDAwMCwgMHgwMDAyMDRkOSwgMHg0MjAyODAwMCwKKwkweDA0MDAwN2NkLCAweDgwMDAwMDQwLCAweDA0MDAwMDQzLCAweDQ4MDMzMDAyLAorCTB4NDkyZjMwMDMsIDB4NDkyZjMwMDQsIDB4NGEwMzMwMDgsIDB4MDAxMDUxZTEsCisJMHg0MjAyZTAwMCwgMHgwMDAwMDAwMywgMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywKKwkweDAyMDFmODAwLCAweDAwMTBhOTVhLCAweDAyMDIwMDAwLCAweDAwMDIwNjBjLAorCTB4NDkyZmM4NTcsIDB4NTkyZThhMDYsIDB4ODM0NDBjODAsIDB4MDAwMDA3ZjAsCisJMHgwNDAyMTAwYiwgMHg4MzQ0MDQwMCwgMHgwMDEwYWEwMCwgMHg1MDAwMDAwMCwKKwkweDgwMDI2ZDQwLCAweDA0MDAwMDA2LCAweDQ5MzdjODU3LCAweDU5MzQwMjAwLAorCTB4OGMwMDA1MGUsIDB4MDIwMjAwMDAsIDB4MDAwMjA2MGMsIDB4NDIwMjgwMDAsCiAJMHgwMDAwMDAyOCwgMHg0MTc4MDgwMCwgMHg0MTdhNjAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0ZTcwLCAweDAyMDFmODAwLCAweDAwMTA5MWM2LCAweDAyMDFmMDAwLAotCTB4MDAwMjAyZGEsIDB4NTkyYzBhMGEsIDB4OGMwNDBkMDIsIDB4MDQwMjAwMTYsCisJMHgwMDEwNGJlZSwgMHgwMjAxZjgwMCwgMHgwMDEwOGY3ZCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwMzgxLCAweDU5MmMwYTBhLCAweDhjMDQwZDAyLCAweDA0MDIwMDE2LAogCTB4NTlhODAwMjEsIDB4NDkyZmM4NTcsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMGYsCiAJMHg1OTJjMDIwNywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNSwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MzI2LCAweDA0MDIwMDA0LCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLAorCTB4MDAxMDQxNTYsIDB4MDQwMjAwMDQsIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHg1OTJjMGEwNiwgMHg0ODA2NWMwNiwgMHg0ODAyNWEwNiwKLQkweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDQyMDAwMDAwLCAweDAwMDAwMDI4LAorCTB4MDIwMWYwMDAsIDB4MDAwMjAzODEsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMjgsCiAJMHgwNDAxZjdmOSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwOSwgMHgwMjAxZjAwMCwKLQkweDAwMTA2NjViLCAweDU5MmMwMjA4LCAweDQ5MmZjODU3LCAweDgyMDAwYzgwLAotCTB4MDAwMDE5OWEsIDB4MDQwMjE3YTQsIDB4NTkyYzA0MDgsIDB4ODAwMDA1NDAsCi0JMHgwNDAyMDdhMSwgMHg1OWE4MDgyMSwgMHg4MDA0MDljMCwgMHgwNDAyMDAwOSwKLQkweDU5MmMwMjA3LCAweDgwMDAwNTQwLCAweDA0MDAwNzliLCAweDQ5N2E1YTA2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDQzODUsIDB4MDQwMjAwMDQsIDB4MWMwMWYwMDAsCisJMHgwMDEwNjNhOSwgMHg1OTJjMDIwOCwgMHg0OTJmYzg1NywgMHg4MjAwMGM4MCwKKwkweDAwMDAxOTlhLCAweDA0MDIxNzk0LCAweDU5MmMwNDA4LCAweDgwMDAwNTQwLAorCTB4MDQwMjA3OTEsIDB4NTlhODA4MjEsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMDksCisJMHg1OTJjMDIwNywgMHg4MDAwMDU0MCwgMHgwNDAwMDc4YiwgMHg0OTdhNWEwNiwKKwkweDAyMDFmODAwLCAweDAwMTA0MWI1LCAweDA0MDIwMDA0LCAweDFjMDFmMDAwLAogCTB4NDIwMDAwMDAsIDB4MDAwMDAwMjgsIDB4NDgwMjVhMDYsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDJkYSwgMHg1OTk4MDgwNCwgMHg1OTk4MDAwMiwgMHg0ODA2NTgwMCwKKwkweDAwMDIwMzgxLCAweDU5OTgwODA0LCAweDU5OTgwMDAyLCAweDQ4MDY1ODAwLAogCTB4NDkyYzA4MDEsIDB4NDkyZjMwMDQsIDB4ODAwMDAwNDAsIDB4NDgwMzMwMDIsCiAJMHgwNDAwMDAwMiwgMHgxYzAxZjAwMCwgMHg1OTlhNTgwMywgMHg1OTk4MDAwOCwKIAkweDQyMDJlMDAwLCAweDAwMDAwMDAxLCAweDA4MDFmMDAwLCAweDU5MmU4YTA2LApAQCAtNTQ5Myw2OSArNTI5Myw3MCBAQAogCTB4NDIwMGI4MDAsIDB4MDAwMDAwMDEsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDEsCiAJMHgwNDAwMDAxNSwgMHg0MTdhODgwMCwgMHg0MjAwYjgwMCwgMHgwMDAwMDdmMCwKIAkweDgyMDAwZDgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDBmLCAweDgwMDAwNTQwLAotCTB4MDIwMjAwMDAsIDB4MDAwMjAyZGEsIDB4NTkyZThhMDYsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDI0NSwgMHgwMjAyMDAwMCwgMHgwMDAyMDJkYSwgMHg1OTJlOTAwOCwKLQkweDU5MmU5ODA5LCAweDAyMDFmODAwLCAweDAwMTA0NzEzLCAweDAyMDFmMDAwLAotCTB4MDAwMjAyZGEsIDB4NTlhODA4MDUsIDB4ODQwNDBkMDAsIDB4NDgwNzUwMDUsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDI0NSwgMHgwMjAwMDgwMCwgMHgwMDEwNDgyYywKKwkweDAyMDIwMDAwLCAweDAwMDIwMzgxLCAweDU5MmU4YTA2LCAweDAyMDFmODAwLAorCTB4MDAwMjAyNjcsIDB4MDIwMjAwMDAsIDB4MDAwMjAzODEsIDB4NTkyZTkwMDgsCisJMHg1OTJlOTgwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywgMHgwMjAxZjAwMCwKKwkweDAwMDIwMzgxLCAweDU5YTgwODA1LCAweDg0MDQwZDAwLCAweDQ4MDc1MDA1LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDIwMDA4MDAsIDB4MDAxMDQ2N2EsCiAJMHg4MTQ2ODgwMCwgMHg4MDVjYjg0MCwgMHgwNDAyMDdmYSwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMmRhLCAweDU5MmMwYTA4LCAweDQ4MDdjODU3LCAweDgyMDQwNTgwLAorCTB4MDAwMjAzODEsIDB4NTkyYzBhMDgsIDB4NDgwN2M4NTcsIDB4ODIwNDA1ODAsCiAJMHgwMDAwMDAwZSwgMHgwNDAwMDA0NSwgMHg4MjA0MDU4MCwgMHgwMDAwMDA0NiwKIAkweDA0MDAwMDQ2LCAweDgyMDQwNTgwLCAweDAwMDAwMDQ1LCAweDA0MDAwMDIwLAogCTB4ODIwNDA1ODAsIDB4MDAwMDAwMjksIDB4MDQwMDAwMTAsIDB4ODIwNDA1ODAsCiAJMHgwMDAwMDAyYSwgMHgwNDAwMDAwOSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwZiwKLQkweDA0MDAwMWZjLCAweDgyMDQwNTgwLCAweDAwMDAwMDJlLCAweDA0MDAwMWY5LAotCTB4NDgwN2M4NTYsIDB4MDQwMWYxZjIsIDB4NTlhODA4MDUsIDB4ODQwNDBkMDQsCi0JMHg0ODA3NTAwNSwgMHgwNDAxZjFmMywgMHg1OTJlOGEwNiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMjQ1LCAweDA0MDIwMWVmLCAweDU5MzQwMjAwLCAweDg0MDAwNTE4LAorCTB4MDQwMDAyMDAsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMmUsIDB4MDQwMDAxZmQsCisJMHg0ODA3Yzg1NiwgMHgwNDAxZjFmNiwgMHg1OWE4MDgwNSwgMHg4NDA0MGQwNCwKKwkweDQ4MDc1MDA1LCAweDA0MDFmMWY3LCAweDU5MmU4YTA2LCAweDAyMDFmODAwLAorCTB4MDAwMjAyNjcsIDB4MDQwMjAxZjMsIDB4NTkzNDAyMDAsIDB4ODQwMDA1MTgsCiAJMHg0ODAyNmEwMCwgMHg1OTJlNjAwOSwgMHg0OTMzYzg1NywgMHg4MzMwMDU4MCwKLQkweGZmZmZmZmZmLCAweDA0MDIwMDJhLCAweDA0MDFmMWU2LCAweDU5MmMxNDA3LAotCTB4NDgwYmM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDk0MTAsIDB4NDExZTYwMDAsCi0JMHgwNDAyMDAwMywgMHg0ODAzYzg1NiwgMHgwNDAxZjFkOSwgMHg1OTJlMzgwOSwKKwkweGZmZmZmZmZmLCAweDA0MDIwMDJhLCAweDA0MDFmMWVhLCAweDU5MmMxNDA3LAorCTB4NDgwYmM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDkxZDksIDB4NDExZTYwMDAsCisJMHgwNDAyMDAwMywgMHg0ODAzYzg1NiwgMHgwNDAxZjFkZCwgMHg1OTJlMzgwOSwKIAkweDU5MWMxNDE0LCAweDg0MDgxNTE2LCAweDg0MDgxNTU0LCAweDQ4MGEzYzE0LAogCTB4NGEwMjY0MDMsIDB4MDAwMDAwM2EsIDB4NTkyYzA0MGIsIDB4ODAwMDA1NDAsCiAJMHgwNDAwMDAwNywgMHg0YTAyNjQwMywgMHgwMDAwMDAzYiwgMHg1OTJjMDIwYywKIAkweDQ4MDI2NDFhLCAweDU5MmMwNDBjLCAweDQ4MDI2MjFhLCAweDRhMDI2MjAzLAogCTB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDcyMSwgMHgwNDAxZjFjNywgMHg1OWE4MDA2OCwgMHg4NDAwMDUxMCwKLQkweDQ4MDM1MDY4LCAweDA0MDFmMWMzLCAweDU5MmMxMjA3LCAweDhjMDgxNTAwLAotCTB4MDQwMjAxYzAsIDB4NTkyZThhMDYsIDB4NTkyZTYwMDksIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTQxYSwgMHgwNDAyMDAwMywgMHg0ODAzYzg1NiwgMHgwNDAxZjFiNCwKKwkweDAwMDIwODU1LCAweDA0MDFmMWNiLCAweDU5YTgwMDY4LCAweDg0MDAwNTEwLAorCTB4NDgwMzUwNjgsIDB4MDQwMWYxYzcsIDB4NTkyYzEyMDcsIDB4OGMwODE1MDAsCisJMHgwNDAyMDFjNCwgMHg1OTJlOGEwNiwgMHg1OTJlNjAwOSwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MWUzLCAweDA0MDIwMDAzLCAweDQ4MDNjODU2LCAweDA0MDFmMWI4LAogCTB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMDMsCi0JMHg0ODAzYzg1NiwgMHgwNDAxZjFhZSwgMHg1OTMwMGEwMywgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDA3LCAweDA0MDAwMDAzLCAweDQ4MDNjODU2LCAweDA0MDFmMWE4LAotCTB4NTkzMDBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMjEsCi0JMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAxNiwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDA2LCAweDA0MDAwMDIwLCAweDgyMDQwNTgwLCAweDAwMDAwMDA4LAotCTB4MDQwMDAwMTUsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGEsIDB4MDQwMDAwMGEsCisJMHg0ODAzYzg1NiwgMHgwNDAxZjFiMiwgMHg1OTMwMGEwMywgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDA3LCAweDA0MDAwMDAzLCAweDQ4MDNjODU2LCAweDA0MDFmMWFjLAorCTB4NTkzMDBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMjUsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAxYSwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDA2LCAweDA0MDAwMDI0LCAweDgyMDQwNTgwLCAweDAwMDAwMDA4LAorCTB4MDQwMDAwMTksIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGEsIDB4MDQwMDAwMGEsCiAJMHg4MjA0MDU4MCwgMHgwMDAwMDAwYywgMHgwNDAwMDAwNCwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDJlLCAweDA0MDIwMDE4LCAweDQyMDAwODAwLCAweDAwMDAwMDA5LAotCTB4MDQwMWYwMTMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWYwMTAsCi0JMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDJlLCAweDA0MDIwMDFjLCAweDQyMDAwODAwLCAweDAwMDAwMDA5LAorCTB4MDQwMWYwMTcsIDB4NTkzMjY4MDksIDB4MDIwMWY4MDAsIDB4MDAxMDQ4NGIsCisJMHgwNDAyMDAxNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjAxMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDRhMDI2NDA2LAogCTB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDQwMWYwMDgsCi0JMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywgMHg0YTAyNjQwNiwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDRhMDI2NDA2LAogCTB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwKLQkweDAwMTA2NzJiLCAweDA0MDFmMTdiLCAweDQwMDAwODAwLCAweDU4MDQwMDAwLAorCTB4MDAxMDQzYzcsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjQ3MCwgMHgwNDAxZjE3YiwgMHg0MDAwMDgwMCwgMHg1ODA0MDAwMCwKIAkweDgwMDAwNTQwLCAweDA0MDIwN2ZkLCAweDQ5MmMwODAwLCAweDFjMDFmMDAwLAogCTB4NDkyZmM4NTcsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDYsCi0JMHgwNDAyMDA5NCwgMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAyMDAwNSwKLQkweDU5MzQwMjAwLCAweDhjMDAwNTFhLCAweDAyMDAwMDAwLCAweDAwMDIwNTMzLAorCTB4MDQwMjAwOTQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4MzYsIDB4MDQwMjAwMDUsCisJMHg1OTM0MDIwMCwgMHg4YzAwMDUxYSwgMHgwMjAwMDAwMCwgMHgwMDAyMDY2NywKIAkweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDAwMDhhLCAweDU5MzAwMjAzLAogCTB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDcsCi0JMHgwMjAyMDAwMCwgMHgwMDAyMDUzMywgMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwKLQkweDAyMDFmMDAwLCAweDAwMDIwNTMzLCAweDQyMDI4MDAwLCAweDAwMDAwMDAyLAorCTB4MDIwMjAwMDAsIDB4MDAwMjA2NjcsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDY2NywgMHg0MjAyODAwMCwgMHgwMDAwMDAwMiwKIAkweDRhMDI2MjA2LCAweDAwMDAwMDE0LCAweDRkMmMwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMGExZDEsIDB4NWMwMjU4MDAsIDB4NTkzMDBjMDYsIDB4NDgwN2M4NTcsCisJMHgwMDEwOWZjMCwgMHg1YzAyNTgwMCwgMHg1OTMwMGMwNiwgMHg0ODA3Yzg1NywKIAkweDgyMDQwNTgwLCAweDAwMDAwMDA3LCAweDA0MDIwMDYzLCAweDQ5MmZjODU3LAotCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDAyMDM4MSwKIAkweDU5MmMyNDBhLCAweDQ5MmZjODU3LCAweDQ4MTNjODU3LCAweDhjMTAyNTFjLAogCTB4MDQwMjAwMTYsIDB4OGMxMDI1MWEsIDB4MDQwMDAwMDMsIDB4OGMxMDI1MGEsCiAJMHgwNDAwMDA2OSwgMHg1OTM0MGEwMCwgMHg4YzA0MGQwZSwgMHgwNDAwMDAwMywKLQkweDhjMTAyNTFlLCAweDA0MDAwMDY0LCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4OGMxMDI1MWUsIDB4MDQwMDAwNjQsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsCiAJMHgwNDAwMDA2YiwgMHg1OTJjMjQwYSwgMHg0OTM2NjAwOSwgMHg0OTMyNTgwOSwKIAkweDRhMDI2NDA2LCAweDAwMDAwMDA2LCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LAotCTB4MDIwMWYwMDAsIDB4MDAwMjA1MmYsIDB4NTkyYzBhMGMsIDB4NTkzNDAwMGYsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDY2MywgMHg1OTJjMGEwYywgMHg1OTM0MDAwZiwKIAkweDQxNzg0MDAwLCAweDgwMDAxNTQwLCAweDA0MDAwMDZkLCAweDU4MDgwMjA0LAogCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTIsCiAJMHgwNDAyMDAwNCwgMHg1ODA4MDIwYywgMHg4MDA0MDU4MCwgMHgwNDAwMDAwNCwKQEAgLTU1NjQsMTA0ICs1MzY1LDEwNCBAQAogCTB4ODAwMDA1NDAsIDB4MDQwMjAwMDcsIDB4NDgyMjY4MTAsIDB4MDQwMWYwMDUsCiAJMHg0ODAyNjgwZiwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwgMHg0OTdhNjgxMCwKIAkweDRkMmMwMDAwLCAweDQwMGE1ODAwLCAweDRhMDI1YTA2LCAweDAwMDAwMDAyLAotCTB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsIDB4MDQwMWY3YmMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHg1YzAyNTgwMCwgMHgwNDAxZjdiYywKIAkweDU5MmMwNDBhLCAweDhjMDAwNTFjLCAweDA0MDAwMDE2LCAweDU5MmMwMjA2LAogCTB4ODIwMDA1ODAsIDB4MDAwMGZmZmYsIDB4MDQwMjAwMTIsIDB4NTkyZTYwMDksCiAJMHg4MzMwMDU4MCwgMHhmZmZmZmZmZiwgMHgwNDAwMDdiMSwgMHg4MzMwMDQ4MCwKLQkweDAwMTBkMWMwLCAweDA0MDAxMDEwLCAweDU5YTgwMDBiLCAweDgxMzAwNDgwLAorCTB4MDAxMGNmYzAsIDB4MDQwMDEwMTAsIDB4NTlhODAwMGIsIDB4ODEzMDA0ODAsCiAJMHgwNDAyMTAwZCwgMHg1OTMwMDAwOCwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwNSwKIAkweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA3LCAweDA0MDAwNzk3LAogCTB4NDkyZmM4NTcsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMjksIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDJkYSwgMHg0OTJmYzg1NywgMHg0YTAyNWEwNiwgMHgwMDAwMDAwOCwKLQkweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDQ5MmZjODU3LCAweDRhMDI1YTA2LAotCTB4MDAwMDAwNDUsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NDkyZmM4NTcsCi0JMHg0YTAyNWEwNiwgMHgwMDAwMDAyYSwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwKKwkweDAwMDIwMzgxLCAweDQ5MmZjODU3LCAweDRhMDI1YTA2LCAweDAwMDAwMDA4LAorCTB4MDIwMWYwMDAsIDB4MDAwMjAzODEsIDB4NDkyZmM4NTcsIDB4NGEwMjVhMDYsCisJMHgwMDAwMDA0NSwgMHgwMjAxZjAwMCwgMHgwMDAyMDM4MSwgMHg0OTJmYzg1NywKKwkweDRhMDI1YTA2LCAweDAwMDAwMDJhLCAweDAyMDFmMDAwLCAweDAwMDIwMzgxLAogCTB4NDkyZmM4NTcsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMjgsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDJkYSwgMHg0OTJmYzg1NywgMHg0YTAyNWEwNiwgMHgwMDAwMDAwNiwKLQkweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDQ5MmZjODU3LCAweDRhMDI1YTA2LAotCTB4MDAwMDAwMGUsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NTkzNDAwMTAsCisJMHgwMDAyMDM4MSwgMHg0OTJmYzg1NywgMHg0YTAyNWEwNiwgMHgwMDAwMDAwNiwKKwkweDAyMDFmMDAwLCAweDAwMDIwMzgxLCAweDQ5MmZjODU3LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMGUsIDB4MDIwMWYwMDAsIDB4MDAwMjAzODEsIDB4NTkzNDAwMTAsCiAJMHg0OTJlNjgxMCwgMHg0OTJmYzg1NywgMHg4MDAwMGQ0MCwgMHgwNDAwMDAwMywKIAkweDQ5MmMwODAwLCAweDFjMDFmMDAwLCAweDU5MzQwNDBiLCAweDQ5MmU2ODBmLAogCTB4NDkyZmM4NTcsIDB4NDgwM2M4NTcsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDMsCiAJMHg0YTAyNmEwMywgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg1OWE4MDAwZSwKLQkweDgxNjQwNDgwLCAweDA0MDIxNzZlLCAweDQyMDI2MDAwLCAweDAwMTBkMWMwLAorCTB4ODE2NDA0ODAsIDB4MDQwMjE3NmUsIDB4NDIwMjYwMDAsIDB4MDAxMGNmYzAsCiAJMHg1OTMwMDAwOSwgMHg4MTM0MDU4MCwgMHgwNDAyMDAwNCwgMHg1OTMwMDIwMiwKIAkweDgwMDQwNTgwLCAweDA0MDAwNzU5LCAweDgzMzI2NDAwLCAweDAwMDAwMDI0LAogCTB4NDE1ODAwMDAsIDB4ODEzMDA0ODAsIDB4MDQwMDE3ZjYsIDB4MDQwMWY3NjAsCiAJMHg0OTJmYzg1NywgMHg1OTJjMDQwNywgMHg4MjAwMGM4MCwgMHgwMDAwMTk5YSwKLQkweDA0MDIxNWYxLCAweDU5MmMwMjA0LCAweDgwMDAwMTEyLCAweDA0MDIwNWRlLAotCTB4NTkyZThhMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwNTksCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDllNywgMHgwNDAyMDA1OSwgMHg1OTJlNzgwYSwKKwkweDA0MDIxNWRkLCAweDU5MmMwMjA0LCAweDgwMDAwMTEyLCAweDA0MDIwNWNhLAorCTB4NTkyZThhMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDQwMjAwNTksCisJMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwgMHgwNDAyMDA1OSwgMHg1OTJlNzgwYSwKIAkweDQ5M2ZjODU3LCAweDhkM2U3ZDNlLCAweDA0MDIwMDA3LCAweDU5YTgwMDIxLAotCTB4ODAwMDA1NDAsIDB4MDQwMjAwNGYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4MzgsCi0JMHgwNDAwMDVkZCwgMHg4MzNjMWQwMCwgMHgwMDAwMDAxZiwgMHgwNDAwMDVkYSwKLQkweDU5MmMwMjA3LCAweDgyMDAwYzgwLCAweDAwMDAxMDAwLCAweDA0MDIxNWQ2LAorCTB4ODAwMDA1NDAsIDB4MDQwMjAwNGYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ2ODYsCisJMHgwNDAwMDVjOSwgMHg4MzNjMWQwMCwgMHgwMDAwMDAxZiwgMHgwNDAwMDVjNiwKKwkweDU5MmMwMjA3LCAweDgyMDAwYzgwLCAweDAwMDAxMDAwLCAweDA0MDIxNWMyLAogCTB4ODAwMDAwYzIsIDB4ODAwMDA4YzQsIDB4ODAwNWQ0MDAsIDB4NTkyZTkwMDgsCiAJMHg1OTJlOTgwOSwgMHg1OTM0MDgwZCwgMHg4MDA0MDljMCwgMHgwNDAyMDAyZSwKIAkweDgzM2MxZDAwLCAweDAwMDAwMDFmLCAweDgxNzgwMDQwLCAweDgwMDAwMDAwLAotCTB4ODAwYzE5MDIsIDB4MDQwMjE3ZmUsIDB4MDQwMjA1YzcsIDB4MGMwMWYwMDEsCi0JMHgwMDEwNTZlOSwgMHgwMDEwNTZlYywgMHgwMDEwNTZmOSwgMHgwMDEwNTZmYywKLQkweDAwMTA1NmZmLCAweDAyMDFmODAwLCAweDAwMTA5MDNlLCAweDA0MDFmMDFhLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ4MGIsIDB4MDQwMDAwMjcsIDB4ODBlOWQxYzAsCi0JMHgwMjAyMDgwMCwgMHgwMDEwNWZhZSwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNSwKLQkweDQxN2E5MDAwLCAweDQxN2E5ODAwLCAweDAyMDFmODAwLCAweDAwMTA5MDRlLAorCTB4ODAwYzE5MDIsIDB4MDQwMjE3ZmUsIDB4MDQwMjA1YjMsIDB4MGMwMWYwMDEsCisJMHgwMDEwNTNjZCwgMHgwMDEwNTNkMCwgMHgwMDEwNTNkZCwgMHgwMDEwNTNlMCwKKwkweDAwMTA1M2UzLCAweDAyMDFmODAwLCAweDAwMTA4ZGZiLCAweDA0MDFmMDFhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ2NTksIDB4MDQwMDAwMjcsIDB4ODBlOWQxYzAsCisJMHgwMjAyMDgwMCwgMHgwMDEwNWNlNywgMHg0MjAyODAwMCwgMHgwMDAwMDAwNSwKKwkweDQxN2E5MDAwLCAweDQxN2E5ODAwLCAweDAyMDFmODAwLCAweDAwMTA4ZTBiLAogCTB4MDQwMWYwMGQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGQsIDB4MDQwMWYwMDYsCiAJMHg0MjAyNzAwMCwgMHgwMDAwMDA0ZSwgMHgwNDAxZjAwMywgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDUyLCAweDAyMDFmODAwLCAweDAwMTA0NmM5LCAweDAyMDIwODAwLAotCTB4MDAxMDkwN2UsIDB4MDQwMDAwMTAsIDB4OGQzZTdkM2UsIDB4MDQwMjAwMTcsCisJMHgwMDAwMDA1MiwgMHgwMjAxZjgwMCwgMHgwMDEwNDUxZCwgMHgwMjAyMDgwMCwKKwkweDAwMTA4ZTNiLCAweDA0MDAwMDEwLCAweDhkM2U3ZDNlLCAweDA0MDIwMDE3LAogCTB4MWMwMWYwMDAsIDB4NTgwNDAwMDIsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDcsCi0JMHg0ZDNjMDAwMCwgMHg0MDA2NzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDdlYiwKKwkweDRkM2MwMDAwLCAweDQwMDY3ODAwLCAweDAyMDFmODAwLCAweDAwMTA0NjM5LAogCTB4NWMwMjc4MDAsIDB4MDQwMjA3Y2IsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMzAsCiAJMHgwNDAxZjAwZCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAyYywgMHgwNDAxZjAwYSwKIAkweDRhMDI1YTA2LCAweDAwMDAwMDI4LCAweDA0MDFmMDA3LCAweDRhMDI1YTA2LAogCTB4MDAwMDAwMjksIDB4MDQwMWYwMDQsIDB4NDk3YTVjMDksIDB4NGEwMjVhMDYsCiAJMHgwMDAwMDAwMCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHgwMjAxZjAwMCwKLQkweDAwMDIwMmRhLCAweDQ5MmZjODU3LCAweDU5MmMwMjA0LCAweDgwMDAwMTEwLAotCTB4ODAwMDAwNDAsIDB4MDQwMDAwMDIsIDB4MDQwMWY1NmYsIDB4NTkyYzAyMDcsCisJMHgwMDAyMDM4MSwgMHg0OTJmYzg1NywgMHg1OTJjMDIwNCwgMHg4MDAwMDExMCwKKwkweDgwMDAwMDQwLCAweDA0MDAwMDAyLCAweDA0MDFmNTViLCAweDU5MmMwMjA3LAogCTB4ODIwMDA1MDAsIDB4MDAwMDAzZmYsIDB4NDgwMjVhMDcsIDB4OGMwMDA1MDYsCiAJMHgwNDAwMDAwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDA3MCwgMHgwNDAyMDAwNCwKIAkweDU5YTgwODIxLCAweDgwMDQwOWMwLCAweDA0MDIwMDE4LCAweDRhMDI1YTA2LAogCTB4MDAwMGRlYWQsIDB4NTkyYzA0MDgsIDB4ODIwMDA1MDAsIDB4MDAwMGYwZmYsCi0JMHg0ODAyNWMwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNDNiNCwgMHgwNDAyMDAwMiwKKwkweDQ4MDI1YzA4LCAweDAyMDFmODAwLCAweDAwMTA0MWU0LCAweDA0MDIwMDAyLAogCTB4MWMwMWYwMDAsIDB4NDk0MjVhMDYsIDB4ODA1OGIxYzAsIDB4MDQwMDAwMDksCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTU1ZiwgMHgwNDAxZjgwZiwgMHg0NDA0MjgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA5MzI4LCAweDA0MDFmODBmLCAweDQ0MDQyODAwLAogCTB4ODI1ODA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDIsIDB4NDgwODI4MDEsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg0MjAyODAwMCwgMHgwMDAwMDAzMSwKKwkweDAyMDFmMDAwLCAweDAwMDIwMzgxLCAweDQyMDI4MDAwLCAweDAwMDAwMDMxLAogCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsCiAJMHgwNDAxZjdlZCwgMHg1OTJjMDQwOCwgMHg4MDAwMDExOCwgMHg4MzJjMmMwMCwKIAkweDAwMDAwMDA5LCAweDgwMTQyYzAwLCAweDFjMDFmMDAwLCAweDQ5MmZjODU3LAotCTB4NGEwMjVhMDgsIDB4MDAwMDAwMDYsIDB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsCisJMHg0YTAyNWEwOCwgMHgwMDAwMDAwNiwgMHgwMjAxZjAwMCwgMHgwMDAyMDM4MSwKIAkweDQ5MmZjODU3LCAweDRhMDI1YTA4LCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLAotCTB4MDAwMjAyZGEsIDB4NDkyZmM4NTcsIDB4NTkyYzA0MGEsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAwMywgMHgwNDAwMDAyMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwKKwkweDAwMDIwMzgxLCAweDQ5MmZjODU3LCAweDU5MmMwNDBhLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDMsIDB4MDQwMDAwMjAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsCiAJMHgwNDAwMDAyMSwgMHg1OTJjMDIwNCwgMHg0OTJlNjAwOCwgMHg4MjAwMDUwMCwKIAkweDAwMDAwMGZmLCAweDgyMDAwNTgwLCAweDAwMDAwMDQ1LCAweDA0MDAwMDBlLAotCTB4NTkyYzAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDVjOWEsIDB4MDIwMDA4MDAsCi0JMHgwMDAyMDI0NSwgMHgwNDAyMDAxOCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0MSwKKwkweDU5MmMwMDBiLCAweDAyMDFmODAwLCAweDAwMTA1OWI5LCAweDAyMDAwODAwLAorCTB4MDAwMjAyNjcsIDB4MDQwMjAwMTgsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDEsCiAJMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwKLQkweDAwMDIwN2ExLCAweDU5MzAwMDE1LCAweDg0MDAwNTVlLCAweDQ4MDI2MDE1LAotCTB4NDIwMjY4MDAsIDB4MDAxMGI1MjQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDAsCisJMHgwMDAyMDhkOCwgMHg1OTMwMDAxNSwgMHg4NDAwMDU1ZSwgMHg0ODAyNjAxNSwKKwkweDQyMDI2ODAwLCAweDAwMTBiMzIwLCAweDQyMDI3MDAwLCAweDAwMDAwMDQwLAogCTB4MDQwMWY3ZjQsIDB4NGEwMjVhMDYsIDB4MDAwMDAxMDEsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDJkYSwgMHg0YTAyNWEwNiwgMHgwMDAwMDAyYywgMHgwMjAxZjAwMCwKLQkweDAwMDIwMmRhLCAweDRhMDI1YTA2LCAweDAwMDAwMDI4LCAweDAyMDFmODAwLAotCTB4MDAwMjAyZGEsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NDkyZmM4NTcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjJlMSwgMHgwNDAwMDAwYiwgMHg1OTJjMDIwNCwKLQkweDgwMDAwMTEwLCAweDgwMDAwMDQwLCAweDA0MDIwNGZiLCAweDU5MmMwYzA2LAorCTB4MDAwMjAzODEsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMmMsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDM4MSwgMHg0YTAyNWEwNiwgMHgwMDAwMDAyOCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDQ5MmZjODU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDYwMWEsIDB4MDQwMDAwMGIsIDB4NTkyYzAyMDQsCisJMHg4MDAwMDExMCwgMHg4MDAwMDA0MCwgMHgwNDAyMDRlNywgMHg1OTJjMGMwNiwKIAkweDgwMDQwOWMwLCAweDA0MDAwMDA5LCAweDQyMDAwMDAwLCAweDAwMDAwMTAyLAogCTB4MDQwMWYwMDMsIDB4NDIwMDAwMDAsIDB4MDAwMDAxMDQsIDB4NDgwMjVhMDYsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg1OTJjMGMwNywgMHg4MDA0MDljMCwKKwkweDAyMDFmMDAwLCAweDAwMDIwMzgxLCAweDU5MmMwYzA3LCAweDgwMDQwOWMwLAogCTB4MDQwMDAwMjQsIDB4ODIwNDA0ODAsIDB4MDAwMDAwMDUsIDB4MDQwMjEwMjEsCi0JMHg0YzA0MDAwMCwgMHg4MDA0MDgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjMwNiwKKwkweDRjMDQwMDAwLCAweDgwMDQwODAwLCAweDAyMDFmODAwLCAweDAwMTA2MDNmLAogCTB4NWMwMDEwMDAsIDB4MDQwMjAwMTgsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDgsCi0JMHg0MDAwYTAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjMyZiwgMHgwNDAyMDAxMiwKLQkweDU5MmMxMjA3LCAweDgyY2MwNTgwLCAweDAwMTBiNTBlLCAweDA0MDIwMDA5LAorCTB4NDAwMGEwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNjgsIDB4MDQwMjAwMTIsCisJMHg1OTJjMTIwNywgMHg4MmNjMDU4MCwgMHgwMDEwYjMwYSwgMHgwNDAyMDAwOSwKIAkweDU4YzgwYzBiLCAweDg0MDQwZDAwLCAweDg0MDQwZDAyLCAweDhjMDgxNTAwLAogCTB4MDQwMDAwMDIsIDB4ODQwNDBkNWUsIDB4NDgwNTk0MGIsIDB4MDQwMWYwMDEsCiAJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMCwgMHg0ODAyNWEwNiwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMmRhLCAweDQyMDAwMDAwLCAweDAwMDAwMTAzLCAweDA0MDFmN2ZiLAorCTB4MDAwMjAzODEsIDB4NDIwMDAwMDAsIDB4MDAwMDAxMDMsIDB4MDQwMWY3ZmIsCiAJMHg0MjAwMDAwMCwgMHgwMDAwMDEwMiwgMHgwNDAxZjdmOCwgMHg0OTJmYzg1NywKIAkweDU5MmU3YzA2LCAweDgzM2MwNTAwLCAweGZmZmZmZmZlLCAweDA0MDIwMDQzLAotCTB4NTkyYzQwMDcsIDB4NDIwMjYwMDAsIDB4MDAxMGQxYzAsIDB4NDE1ODE4MDAsCisJMHg1OTJjNDAwNywgMHg0MjAyNjAwMCwgMHgwMDEwY2ZjMCwgMHg0MTU4MTgwMCwKIAkweDQwMGMwMDAwLCAweDgxMzAwNDgwLCAweDA0MDIxMDIzLCAweDU5MzAwMjAzLAogCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDcsIDB4NTkzMDAwMDgsCiAJMHg4MDAwMGQ0MCwgMHgwNDAwMDAwNCwgMHg1ODA0MDAwNSwgMHg4MDIwMDU4MCwKQEAgLTU2NjksNzkgKzU0NzAsNzkgQEAKIAkweDU4MDQwMjA0LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwZDgwLAogCTB4MDAwMDAwNTMsIDB4MDQwMDAwMDcsIDB4ODIwMDBkODAsIDB4MDAwMDAwNDgsCiAJMHgwNDAwMDAwNCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxOCwgMHgwNDAyMDAyMywKLQkweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTA4YmUzLCAweDVjMDI1ODAwLAorCTB4NGQyYzAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDg5OTcsIDB4NWMwMjU4MDAsCiAJMHgwNDAwMDAxZSwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMmRhLCAweDU5MmU4YTA2LCAweDgzNDQwNDgwLCAweDAwMDAwN2YwLAotCTB4MDQwMjEwMTYsIDB4ODM0NDA0MDAsIDB4MDAxMGFjMDAsIDB4NTAwMDAwMDAsCisJMHgwMDAyMDM4MSwgMHg1OTJlOGEwNiwgMHg4MzQ0MDQ4MCwgMHgwMDAwMDdmMCwKKwkweDA0MDIxMDE2LCAweDgzNDQwNDAwLCAweDAwMTBhYTAwLCAweDUwMDAwMDAwLAogCTB4ODAwMjZkNDAsIDB4MDQwMDAwMTEsIDB4NGQyYzAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDdjYiwgMHgwNDAwMDAwYywgMHg0MjAyODAwMCwgMHgwMDAwMDAwNSwKLQkweDU5MmMwYTA4LCAweDAyMDFmODAwLCAweDAwMTA0ZTcwLCAweDAyMDFmODAwLAotCTB4MDAxMDkxY2MsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsCisJMHgwMDEwNDYxOSwgMHgwNDAwMDAwYywgMHg0MjAyODAwMCwgMHgwMDAwMDAwNSwKKwkweDU5MmMwYTA4LCAweDAyMDFmODAwLCAweDAwMTA0YmVlLCAweDAyMDFmODAwLAorCTB4MDAxMDhmODMsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4NWMwMjU4MDAsCiAJMHgwNDAxZjdlNSwgMHg1YzAyNTgwMCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAzMSwKLQkweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDQ5MmZjODU3LCAweDRkMmMwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZTQsIDB4MDQwMDAwMTYsIDB4NDkyZmM4NTcsCi0JMHg0MTJmNDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAwZSwKLQkweDQ5MmZjODU3LCAweDQxMmRkODAwLCAweDAyMDFmODAwLCAweDAwMTAzYjI4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDNiMzIsIDB4NDlhMWQ4MGIsIDB4NWMwMjU4MDAsCi0JMHg0OTJkZDgwYSwgMHgwMjAxZjgwMCwgMHgwMDEwMjIxNCwgMHgwMjAxZjAwMCwKLQkweDAwMTAyMjMzLCAweDQxYTI1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwN2Y0LAorCTB4MDIwMWYwMDAsIDB4MDAwMjAzODEsIDB4NDkyZmM4NTcsIDB4NGQyYzAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDgyYSwgMHgwNDAwMDAxNiwgMHg0OTJmYzg1NywKKwkweDQxMmY0MDAwLCAweDAyMDFmODAwLCAweDAwMTAwODJhLCAweDA0MDAwMDBlLAorCTB4NDkyZmM4NTcsIDB4NDEyZGQ4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDM5NDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzk0YiwgMHg0OWExZDgwYiwgMHg1YzAyNTgwMCwKKwkweDQ5MmRkODBhLCAweDAyMDFmODAwLCAweDAwMTAxZmJiLCAweDAyMDFmMDAwLAorCTB4MDAxMDFmZGEsIDB4NDFhMjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsCiAJMHg1YzAyNTgwMCwgMHg0YTAyNWEwNiwgMHgwMDAwNDAwNSwgMHg0YTAyNWMwNiwKLQkweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMDIwMmRhLCAweDQ4MDdjODU3LAorCTB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAwMjAzODEsIDB4NDgwN2M4NTcsCiAJMHg0ODVmYzg1NywgMHg0MjAwYjgwMCwgMHgwMDAwMDAwMSwgMHg1YzAwMDgwMCwKIAkweDRjNWMwMDAwLCAweDA0MDFmMDA1LCAweDQ4MDdjODU3LCAweDQ4NWZjODU3LAogCTB4NWMwMDA4MDAsIDB4NGQ3ODAwMDAsIDB4NDgwM2M4NTcsIDB4NDkyZmM4NTcsCi0JMHg4YzAwMDUwZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkMCwgMHg0MjAzZTAwMCwKKwkweDhjMDAwNTBlLCAweDAyMDIwODAwLCAweDAwMTAwNjBkLCAweDQyMDNlMDAwLAogCTB4NTAwMDAwMDAsIDB4NDIwMGI4MDAsIDB4MDAwMDgwMDMsIDB4MDIwMWYwMDAsCi0JMHgwMDEwMDVkZCwgMHg1OTJjMDIwNCwgMHg4MDAwMDExMCwgMHg4MDAwMDA0MCwKLQkweDA0MDIwNDQxLCAweDAyMDFmODAwLCAweDAwMTA0YTM0LCAweDA0MDIwMDAyLAorCTB4MDAxMDA2MWEsIDB4NTkyYzAyMDQsIDB4ODAwMDAxMTAsIDB4ODAwMDAwNDAsCisJMHgwNDAyMDQyZCwgMHgwMjAxZjgwMCwgMHgwMDEwNDg4NiwgMHgwNDAyMDAwMiwKIAkweDFjMDFmMDAwLCAweDQ5NDI1YTA2LCAweDQ4MDY1ODBkLCAweDQ4MGE1ODBlLAogCTB4NDk0M2M4NTcsIDB4NDgwN2M4NTcsIDB4NDgwYmM4NTcsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDJkYSwgMHg1OTJjMDIwNCwgMHg4MDAwMDExMCwgMHg4MDAwMDA0MCwKLQkweDA0MDIwNDMxLCAweDAyMDFmODAwLCAweDAwMTA0YjhiLCAweDA0MDIwMDAyLAorCTB4MDAwMjAzODEsIDB4NTkyYzAyMDQsIDB4ODAwMDAxMTAsIDB4ODAwMDAwNDAsCisJMHgwNDAyMDQxZCwgMHgwMjAxZjgwMCwgMHgwMDEwNDllYywgMHgwNDAyMDAwMiwKIAkweDFjMDFmMDAwLCAweDQ5NDI1YTA2LCAweDQ4MDY1ODExLCAweDQ4MGE1ODEyLAotCTB4MDIwMWYwMDAsIDB4MDAwMjAyZGEsIDB4NTkyYzAyMDQsIDB4ODAwMDAxMTAsCi0JMHgwNDAwMDQyNSwgMHg4MDAwMDA0MCwgMHgwNDAyMDAwYywgMHg0MjAyZTAwMCwKKwkweDAyMDFmMDAwLCAweDAwMDIwMzgxLCAweDU5MmMwMjA0LCAweDgwMDAwMTEwLAorCTB4MDQwMDA0MTEsIDB4ODAwMDAwNDAsIDB4MDQwMjAwMGMsIDB4NDIwMmUwMDAsCiAJMHgwMDAwMDAwMSwgMHg1OTJjMDIwYSwgMHg4YzAwMDUwNCwgMHgwMjAwMDAwMCwKLQkweDAwMDIwNGQwLCAweDU5MmMwMjA3LCAweDgyMDAwYzgwLCAweDAwMDAxMDAxLAotCTB4MDQwMjE0MjksIDB4MDQwMWYwMDksIDB4NDIwMmUwMDAsIDB4MDAwMDAwMDMsCisJMHgwMDAyMDYwMywgMHg1OTJjMDIwNywgMHg4MjAwMGM4MCwgMHgwMDAwMTAwMSwKKwkweDA0MDIxNDE1LCAweDA0MDFmMDA5LCAweDQyMDJlMDAwLCAweDAwMDAwMDAzLAogCTB4NDgwMzMwMDIsIDB4NDkyZjMwMDMsIDB4NDkyZjMwMDQsIDB4NGEwMzMwMDgsCi0JMHgwMDAyMDRkMCwgMHgxYzAxZjAwMCwgMHg0MjAyZTAwMCwgMHgwMDAwMDAwMiwKLQkweDQyMDAwMDAwLCAweDAwMTBiZWRhLCAweDUwMDA3MDAwLCAweDQ5MmM3MDBiLAorCTB4MDAwMjA2MDMsIDB4MWMwMWYwMDAsIDB4NDIwMmUwMDAsIDB4MDAwMDAwMDIsCisJMHg0MjAwMDAwMCwgMHgwMDEwYmNkOSwgMHg1MDAwNzAwMCwgMHg0OTJjNzAwYiwKIAkweDQ5Nzg3MDBlLCAweDQ5Nzg3MDBjLCAweDU5MmMwMDExLCAweDU5MmMwODEyLAogCTB4NDgwMDcwMDcsIDB4NDgwNDcwMDgsIDB4NTkyYzEwMTMsIDB4ODIwODA1MDAsCi0JMHhmZmZmMDAwMCwgMHgwNDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweGZmZmYwMDAwLCAweDA0MDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAogCTB4NDk3ODcwMGQsIDB4ODIwODA0ODAsIDB4MDAwMDAxODAsIDB4NDgwM2M4NTcsCiAJMHgwNDAwMTAwNywgMHg0ODAwNzAwZiwgMHg0YTAwNzAwNSwgMHgwMDAwMDE4MCwKIAkweDRhMDA3MDA0LCAweDAwMDAwMDYwLCAweDA0MDFmMDA1LCAweDQ5Nzg3MDBmLAogCTB4NDgwODcwMDUsIDB4ODAwODExMDQsIDB4NDgwODcwMDQsIDB4NTgzODAwMGEsCi0JMHg0ODAwNzAwMywgMHg0MDM4MTAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwMDg1OCwKLQkweDAyMDFmODAwLCAweDAwMTAwN2QzLCAweDA0MDAwMDAzLCAweDU5OTgwMDA3LAorCTB4NDgwMDcwMDMsIDB4NDAzODEwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDA4YTEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDgxOSwgMHgwNDAwMDAwMywgMHg1OTk4MDAwNywKIAkweDA4MDFmMDAwLCAweDFjMDFmMDAwLCAweDQwMzA3MDAwLCAweDU4MzgwMDBiLAogCTB4ODAwMjVkNDAsIDB4MDQwMDAwMWIsIDB4NTgzODAwMDIsIDB4ODIwMDA1ODAsCiAJMHgwMDAwMDEwMCwgMHgwNDAwMDAxZCwgMHg0YzM4MDAwMCwgMHg1OTJjMDIwNCwKIAkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwNTgwLCAweDAwMDAwMDEyLAogCTB4MDQwMDAwMGIsIDB4NTkyYzAyMDgsIDB4ODQwMDA1NGUsIDB4NDgwMjVhMDgsCiAJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMiwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywKLQkweDAyMDFmODAwLCAweDAwMDIwMmMxLCAweDA0MDFmMDA1LCAweDRhMDI1YTA2LAotCTB4MDAwMDAwMTAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NWMwMDcwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwNDAxZjAwNSwgMHg0YTAyNWEwNiwKKwkweDAwMDAwMDEwLCAweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDVjMDA3MDAwLAogCTB4NDIwMmUwMDAsIDB4MDAwMDAwMDEsIDB4NGEwMDcwMDIsIDB4MDAwMDAxMDAsCiAJMHg0OTc4NzAxMCwgMHgxYzAxZjAwMCwgMHg1ODM4MDAwNCwgMHg4MjAwMDQ4MCwKIAkweDAwMDAwMDAzLCAweDA0MDAwMDg3LCAweDU4MzgwMDEwLCAweDhjMDAwNTAwLAogCTB4MDQwMjAwMTksIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDMsIDB4ODMyY2FjMDAsCiAJMHgwMDAwMDAxMSwgMHg1ODM4MDAwYSwgMHg1ODM4MTAwZCwgMHg4MDA4YTQwMCwKLQkweDRjMzgwMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDVjMDA3MDAwLAorCTB4NGMzODAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4NWMwMDcwMDAsCiAJMHg1ODM4MDAwZCwgMHg4MjAwMDQwMCwgMHgwMDAwMDAwMywgMHg0ODAwNzAwZCwKIAkweDRhMDA3MDEwLCAweDAwMDAwMDAxLCAweDU4MzgwMDA0LCAweDgyMDAwNDgwLAogCTB4MDAwMDAwMDMsIDB4NDgwMDcwMDQsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsCiAJMHgwNDAwMDA2YywgMHg1ODM4MDAwZSwgMHg4MDAwMWQ0MCwgMHgwNDAyMDAyMCwKLQkweDRjMzgwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2QzLCAweDVjMDA3MDAwLAorCTB4NGMzODAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4MTksIDB4NWMwMDcwMDAsCiAJMHgwNDAwMDAxMCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwYSwgMHg0MjAwMTgwMCwKIAkweDAwMDAwMDA1LCAweDQ4MGM3MDBlLCAweDU4MzgwMDBjLCAweDgwMDAwNTQwLAogCTB4MDQwMjAwMDIsIDB4NTgzODAwMGIsIDB4NDAwMDA4MDAsIDB4NDkyYzA4MDEsCiAJMHg0OTJjNzAwYywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwZiwgMHgwNDAxZjAxMSwKLQkweDQyMDJlMDAwLCAweDAwMDAwMDA4LCAweDRhMDMzMDA3LCAweDAwMTA1OTE1LAorCTB4NDIwMmUwMDAsIDB4MDAwMDAwMDgsIDB4NGEwMzMwMDcsIDB4MDAxMDU1ZjksCiAJMHgxYzAxZjAwMCwgMHg0MjAyZTAwMCwgMHgwMDAwMDAwMiwgMHg0MjAwMDAwMCwKLQkweDAwMTBiZWRhLCAweDUwMDA3MDAwLCAweDA0MDFmN2U3LCAweDU4M2E1ODBjLAorCTB4MDAxMGJjZDksIDB4NTAwMDcwMDAsIDB4MDQwMWY3ZTcsIDB4NTgzYTU4MGMsCiAJMHg0MDBjMDAwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxNCwgMHg4MDA0MGM4MCwKIAkweDU4MzgxMDA0LCAweDU4MzgwMDBmLCAweDQxNzgzMDAwLCAweDgwMDAwNTQwLAogCTB4MDQwMjAwMDUsIDB4ODQxODM1NDAsIDB4ODIwODE0ODAsIDB4MDAwMDAwMDMsCkBAIC01NzQ5LDcgKzU1NTAsNyBAQAogCTB4NDAwODA4MDAsIDB4NDAwNGIwMDAsIDB4NDEyYzAwMDAsIDB4ODAwYzA0MDAsCiAJMHg0MDAwYTgwMCwgMHg1ODM4MDAwYSwgMHg1ODM4MTAwZCwgMHg4MDA4YTQwMCwKIAkweDRjMDgwMDAwLCAweDRjMDQwMDAwLCAweDRjMGMwMDAwLCAweDRjMzgwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NWMwMDcwMDAsIDB4NWMwMDE4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTkzZSwgMHg1YzAwNzAwMCwgMHg1YzAwMTgwMCwKIAkweDVjMDAwODAwLCAweDQwMDQwMDAwLCAweDU4MzgxMDA0LCAweDgwMDgwNDgwLAogCTB4NDgwMDcwMDQsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDIsCiAJMHg4NDE4MzUwMCwgMHg1YzAwMDAwMCwgMHg4MDA0MTQwMCwgMHg4MjA4MDQ4MCwKQEAgLTU3NTcsNjU5ICs1NTU4LDY4MCBAQAogCTB4NDAwYzAwMDAsIDB4ODAwNDFjMDAsIDB4ODIwYzA0ODAsIDB4MDAwMDAwMTQsCiAJMHgwNDAyMDAwMywgMHg4NDE4MzU0NCwgMHg0MDAwMTgwMCwgMHg0MDA4MDgwMCwKIAkweDQ4MDQ3MDBkLCAweDQ4MGM3MDBlLCAweDQwMTgwMDAwLCAweDBjMDFmMDAxLAotCTB4MDAxMDU5NjAsIDB4MDAxMDU5NjQsIDB4MDAxMDU5NjIsIDB4MDAxMDU5NjAsCi0JMHgwMDEwNThmYywgMHgwMDEwNTk2NCwgMHgwMDEwNTk2MiwgMHgwMDEwNTk2MCwKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDU4MzgxMDBmLCAweDA0MDFmNzM5LAorCTB4MDAxMDU2NDQsIDB4MDAxMDU2NDgsIDB4MDAxMDU2NDYsIDB4MDAxMDU2NDQsCisJMHgwMDEwNTVlMCwgMHgwMDEwNTY0OCwgMHgwMDEwNTY0NiwgMHgwMDEwNTY0NCwKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDU4MzgxMDBmLCAweDA0MDFmNzM5LAogCTB4NTgzODA4MGQsIDB4ODIwNDA0MDAsIDB4MDAwMDAwMDIsIDB4NTgzODEwMGEsCiAJMHg4MDA4MDQwMCwgMHg1MDAwMTAwMCwgMHg4MDA4MTFjMCwgMHgwNDAyMDAwZiwKIAkweDQyMDJlMDAwLCAweDAwMDAwMDAxLCAweDU4M2E1ODBiLCAweDQ5Nzg3MDBiLAogCTB4NDk3ODcwMTAsIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAxMiwgMHgwMjAwMDAwMCwgMHgwMDAyMDUwNywKLQkweDAyMDFmMDAwLCAweDAwMDIwNGQwLCAweDU4MzgwMDBhLCAweDgwMDQwYzAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMTIsIDB4MDIwMDAwMDAsIDB4MDAwMjA2M2IsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDYwMywgMHg1ODM4MDAwYSwgMHg4MDA0MGMwMCwKIAkweDgyMzgxYzAwLCAweDAwMDAwMDA3LCAweDU0MDQxODAwLCAweDgwMDQwODAwLAogCTB4ODAwYzE4MDAsIDB4NTQwNDE4MDAsIDB4MDQwMWY3MWEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDdkMywgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0YTAyNTgwYSwKLQkweDAwMTBiZTc5LCAweDQyMDAwODAwLCAweDAwMTBiZWRhLCAweDQ1MmMwODAwLAorCTB4MDAxMDA4MTksIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NGEwMjU4MGEsCisJMHgwMDEwYmM3OCwgMHg0MjAwMDgwMCwgMHgwMDEwYmNkOSwgMHg0NTJjMDgwMCwKIAkweDQ5N2E1ODBiLCAweDQ5N2E1ODBjLCAweDQ5N2E1ODBkLCAweDQ5N2E1ODBlLAotCTB4NDk3YTU4MGYsIDB4NGEwMjU4MDksIDB4MDAxMDU4YjYsIDB4NDk3YTU4MTAsCisJMHg0OTdhNTgwZiwgMHg0YTAyNTgwOSwgMHgwMDEwNTU5YSwgMHg0OTdhNTgxMCwKIAkweDRhMDI1ODAyLCAweDAwMDAwMTAwLCAweDRhMDI1ODAxLCAweDAwMDAwMDAxLAotCTB4MWMwMWYwMDAsIDB4NTljODAwMDcsIDB4OGMwMDA1MDIsIDB4MDQwMDAwNzAsCi0JMHg4MzVjMmM4MCwgMHgwMDAwMDAwNSwgMHgwMjAwMTAwMCwgMHgwMDEwNWYyMywKLQkweDU5YzgyODE3LCAweDQ5N2I5MDA1LCAweDgyMTQwNTAwLCAweDAwZTAwMDAwLAotCTB4MDQwMjAwNGYsIDB4ODIxNDA1MDAsIDB4MDAwMDAzZmYsIDB4ODIwMDFjMDAsCi0JMHgwMDAwMDAwNiwgMHg0MWNjMjAwMCwgMHg0MjAwMzAwMCwgMHgwMDAwNjA4MCwKLQkweDgyMGMwNDgwLCAweDAwMDAwMDQwLCAweDA0MDAxMDA2LCAweDQyMDAxMDAwLAotCTB4MDAwMDAwNDAsIDB4ODIwYzFjODAsIDB4MDAwMDAwNDAsIDB4MDQwMWYwMDMsCi0JMHg0MDBjMTAwMCwgMHg0MTc4MTgwMCwgMHg1NDE4MjAwMCwgMHg4MDEwMjAwMCwKLQkweDgwMTgzMDAwLCAweDgwMDgxMDQwLCAweDA0MDIwN2ZjLCAweDgwMGMxOWMwLAotCTB4MDQwMDAwMDUsIDB4NTljODAwMDUsIDB4ODAwMDAwMDAsIDB4NDgwMzkwMDUsCi0JMHgwNDAxZjdlYSwgMHg4MjE0MDUwMCwgMHgwMWY2MDAwMCwgMHgwNDAyMDAyOSwKLQkweDgyMTQwNTAwLCAweDAwMDBmMDAwLCAweDA0MDAwMDBiLCAweDgyMDAwYzgwLAotCTB4MDAwMDIwMDAsIDB4MDQwMjEwMGYsIDB4ODIxNDA1MDAsIDB4MGUwMDAwMDAsCi0JMHg4MDAwMDEzMiwgMHgwYzAxZjg0MCwgMHg0YTAzOTAwNSwgMHgwMDAwMDE0MCwKLQkweDFjMDFmMDAwLCAweDU5Y2MwNDAwLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLAotCTB4ODIwMDA1ODAsIDB4MDAwMDgxMDAsIDB4MDQwMDA3ZjQsIDB4MDQwMWYwMWMsCi0JMHg0ODE3Yzg1NywgMHg4MjE0MDUwMCwgMHgwMDAwMDNmZiwgMHgwNDAyMDAwNywKLQkweDU5Y2MwNDAwLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDgyMDAwNTgwLAotCTB4MDAwMDgxMDAsIDB4MDQwMjAwMTIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4YmQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwNWRmYSwKLQkweDQ4MDNjODU2LCAweDRhMDM5MDA1LCAweDAwMDAwMTQwLCAweDA0MDFmMDIwLAotCTB4NDgxN2M4NTcsIDB4ODIxNDA1MDAsIDB4MDBmNjAwMDAsIDB4MDQwMjAwMDQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNWUzNSwgMHgwNDAyMDdkMiwgMHgwMjAxZjgwMCwKLQkweDAwMTA1MTNiLCAweDA0MDAwMDEwLCAweDU5YzQwMGE0LCAweDQ4MDNjODU3LAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMGEsCi0JMHgwNDAyMDAwOSwgMHg0OTdiNTAxNiwgMHg1OWM0MDBhMywgMHg4MjAwMDU0MCwKLQkweDAwMDgwMDAwLCAweDQ4MDM4OGEzLCAweDgyMDAwNTAwLCAweGZmZjdmZmZmLAotCTB4NDgwMzg4YTMsIDB4NDgxN2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NzgsCi0JMHg0YTAzOTAwNSwgMHgwMDAwMDE0MCwgMHgwNDAxZjg0MiwgMHg0ODAzYzg1NiwKLQkweDFjMDFmMDAwLCAweDAwMTA1YTFkLCAweDAwMTA1Y2Y0LCAweDAwMTA1YTE1LAotCTB4MDAxMDVhMTUsIDB4MDAxMDVhMTUsIDB4MDAxMDVhMTUsIDB4MDAxMDVhMTUsCi0JMHgwMDEwNWExNSwgMHg0ODAzYzg1NywgMHg0MjAwMDAwMCwgMHgwMDEwYjg1YSwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDRhMDM5MDA1LCAweDAwMDAwMTQwLAotCTB4MWMwMWYwMDAsIDB4NDgxN2M4NTcsIDB4NTljYzA0MDAsIDB4NDgwM2M4NTcsCi0JMHg4MjAwMGQwMCwgMHgwMDAwZmYwMCwgMHg4MjA0MTUwMCwgMHgwMDAwZjAwMCwKLQkweDg0MDQwOWMwLCAweDgyMTQwNTAwLCAweDAwMDAwM2ZmLCAweDgwMDAxOGM0LAotCTB4OGMxNDJkMTQsIDB4MDQwMDAwMDUsIDB4NTljYzAwMDIsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAwMywgMHg4MDBjMWM4MCwgMHg0ODBmNTAxNiwgMHg4MjA4MDU4MCwKLQkweDAwMDAyMDAwLCAweDA0MDIwMDExLCAweDgzNmMwNTgwLCAweDAwMDAwMDAxLAotCTB4MDQwMjAwMGMsIDB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsCi0JMHg4MjAwMDU4MCwgMHgxMTAwMDAwMCwgMHgwNDAyMDAxMSwgMHgwMjAxZjgwMCwKLQkweDAwMTAzYjM4LCAweDAyMDFmODAwLCAweDAwMTA1ZjQ4LCAweDA0MDFmMDBjLAotCTB4MDQwMWY4MWYsIDB4MDQwMWYwMGEsIDB4ODIwODA1ODAsIDB4MDAwMDMwMDAsCi0JMHgwNDAyMDAwMywgMHgwNDAxZmEwNiwgMHgwNDAxZjAwNSwgMHg4MjA4MDU4MCwKLQkweDAwMDA4MDAwLCAweDA0MDIwMDAyLCAweDA0MDFmYWZjLCAweDFjMDFmMDAwLAotCTB4NDgxN2M4NTcsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NTksIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWE0NywgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAwYiwKLQkweDRjMDgwMDAwLCAweDRjMGMwMDAwLCAweDQyMDAxMDAwLCAweDAwMDA4MDQ4LAotCTB4NDAxNDE4MDAsIDB4ODAxNDIxMjAsIDB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsCi0JMHg1YzAwMTgwMCwgMHg1YzAwMTAwMCwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywKKwkweDFjMDFmMDAwLCAweDU5YzgwMDA3LCAweDhjMDAwNTAyLCAweDA0MDAwMDcxLAorCTB4ODM1YzJjODAsIDB4MDAwMDAwMDUsIDB4MDIwMDEwMDAsIDB4MDAxMDVjNWMsCisJMHg1OWM4MjgxNywgMHg0ODE3NTA2ZSwgMHg0OTdiOTAwNSwgMHg4MjE0MDUwMCwKKwkweDAwZTAwMDAwLCAweDA0MDIwMDRmLCAweDgyMTQwNTAwLCAweDAwMDAwM2ZmLAorCTB4ODIwMDFjMDAsIDB4MDAwMDAwMDYsIDB4NDFjYzIwMDAsIDB4NDIwMDMwMDAsCisJMHgwMDAwNjA4MCwgMHg4MjBjMDQ4MCwgMHgwMDAwMDA0MCwgMHgwNDAwMTAwNiwKKwkweDQyMDAxMDAwLCAweDAwMDAwMDQwLCAweDgyMGMxYzgwLCAweDAwMDAwMDQwLAorCTB4MDQwMWYwMDMsIDB4NDAwYzEwMDAsIDB4NDE3ODE4MDAsIDB4NTQxODIwMDAsCisJMHg4MDEwMjAwMCwgMHg4MDE4MzAwMCwgMHg4MDA4MTA0MCwgMHgwNDAyMDdmYywKKwkweDgwMGMxOWMwLCAweDA0MDAwMDA1LCAweDU5YzgwMDA1LCAweDgwMDAwMDAwLAorCTB4NDgwMzkwMDUsIDB4MDQwMWY3ZWEsIDB4ODIxNDA1MDAsIDB4MDFmNjAwMDAsCisJMHgwNDAyMDAyOSwgMHg4MjE0MDUwMCwgMHgwMDAwZjAwMCwgMHgwNDAwMDAwYiwKKwkweDgyMDAwYzgwLCAweDAwMDAyMDAwLCAweDA0MDIxMDBmLCAweDRhMDM5MDA1LAorCTB4MDAwMDAxNDAsIDB4ODIxNDA1MDAsIDB4MGUwMDAwMDAsIDB4ODAwMDAxMzIsCisJMHgwYzAxZjgzZSwgMHgxYzAxZjAwMCwgMHg1OWNjMDQwMCwgMHg4MjAwMDUwMCwKKwkweDAwMDBmZjAwLCAweDgyMDAwNTgwLCAweDAwMDA4MTAwLCAweDA0MDAwN2Y0LAorCTB4MDQwMWYwMWMsIDB4NDgxN2M4NTcsIDB4ODIxNDA1MDAsIDB4MDAwMDAzZmYsCisJMHgwNDAyMDAwNywgMHg1OWNjMDQwMCwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwKKwkweDgyMDAwNTgwLCAweDAwMDA4MTAwLCAweDA0MDIwMDEyLCAweDQyMDAwMDAwLAorCTB4MDAxMGI2YmMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNWIzMiwgMHg0ODAzYzg1NiwgMHg0YTAzOTAwNSwgMHgwMDAwMDE0MCwKKwkweDA0MDFmMDIwLCAweDQ4MTdjODU3LCAweDgyMTQwNTAwLCAweDAwZjYwMDAwLAorCTB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDViNmUsIDB4MDQwMjA3ZDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwgMHgwNDAwMDAxMCwgMHg1OWM0MDBhNCwKKwkweDQ4MDNjODU3LCAweDgyMDAwNTAwLCAweDAwMDAwMDBmLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMGEsIDB4MDQwMjAwMDksIDB4NDk3YjUwMTYsIDB4NTljNDAwYTMsCisJMHg4MjAwMDU0MCwgMHgwMDA4MDAwMCwgMHg0ODAzODhhMywgMHg4MjAwMDUwMCwKKwkweGZmZjdmZmZmLCAweDQ4MDM4OGEzLCAweDQ4MTdjODU2LCAweDAyMDFmODAwLAorCTB4MDAxMGE3OWYsIDB4NGEwMzkwMDUsIDB4MDAwMDAxNDAsIDB4MDQwMWY4NDIsCisJMHg0ODAzYzg1NiwgMHgxYzAxZjAwMCwgMHgwMDEwNTcwMiwgMHgwMDEwNWExMywKKwkweDAwMTA1NmZhLCAweDAwMTA1NmZhLCAweDAwMTA1NmZhLCAweDAwMTA1NmZhLAorCTB4MDAxMDU2ZmEsIDB4MDAxMDU2ZmEsIDB4NDgwM2M4NTcsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjY1OSwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg0YTAzOTAwNSwKKwkweDAwMDAwMTQwLCAweDFjMDFmMDAwLCAweDU5Y2MwNDAwLCAweDgyMDAwZDAwLAorCTB4MDAwMGZmMDAsIDB4ODIwNDE1MDAsIDB4MDAwMGYwMDAsIDB4ODQwNDA5YzAsCisJMHg4MjE0MDUwMCwgMHgwMDAwMDNmZiwgMHg4MDAwMThjNCwgMHg4YzE0MmQxNCwKKwkweDA0MDAwMDA1LCAweDU5Y2MwMDAyLCAweDgyMDAwNTAwLCAweDAwMDAwMDAzLAorCTB4ODAwYzFjODAsIDB4NDgwZjUwMTYsIDB4ODIwODA1ODAsIDB4MDAwMDIwMDAsCisJMHgwNDAyMDAxMywgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAyMDAwZSwKKwkweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweGZmMDAwMDAwLCAweDgyMDAwNTgwLAorCTB4MTEwMDAwMDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2YmEsIDB4MDQwMjAwMTEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzk1MSwgMHgwMjAxZjgwMCwgMHgwMDEwNWM4MSwKKwkweDA0MDFmMDBjLCAweDA0MDFmODFmLCAweDA0MDFmMDBhLCAweDgyMDgwNTgwLAorCTB4MDAwMDMwMDAsIDB4MDQwMjAwMDMsIDB4MDQwMWZhNDAsIDB4MDQwMWYwMDUsCisJMHg4MjA4MDU4MCwgMHgwMDAwODAwMCwgMHgwNDAyMDAwMiwgMHgwNDAxZmIzNiwKKwkweDFjMDFmMDAwLCAweDQ4MTdjODU3LCAweDQyMDAwMDAwLCAweDAwMTBiNjU4LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAyMDAwYiwgMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwgMHg0MjAwMTAwMCwKKwkweDAwMDA4MDQ4LCAweDQwMTQxODAwLCAweDgwMTQyMTIwLCAweDAyMDFmODAwLAorCTB4MDAxMDM4NTcsIDB4NWMwMDE4MDAsIDB4NWMwMDEwMDAsIDB4MWMwMWYwMDAsCiAJMHg1OWNjMDAwMiwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwgMHg4MjAwMTU4MCwKLQkweDAxMDAwMDAwLCAweDA0MDAwMDA0LCAweDgyMDAxNTgwLCAweDIzMDAwMDAwLAotCTB4MDQwMjAxOTIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMjMsIDB4MDQwMjAwM2YsCi0JMHgwNDAxZmI2YSwgMHgwNDAwMDE4ZCwgMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDEwLCAweDA0MDAwMDEzLCAweDgyMDQwNTgwLCAweDAwMDAwMDExLAotCTB4MDQwMDAwMTAsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMGQsCi0JMHg4MjA0MDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAwMDAwYSwgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDA4LCAweDA0MDAwMDA3LCAweDgyMDQwNTgwLCAweDAwMDAwMDBhLAotCTB4MDQwMDAwMDQsIDB4NDkzM2M4NTcsIDB4NDgwN2M4NTcsIDB4MDQwMWYxNzcsCi0JMHg1OTMwMDAwNCwgMHg4MjAwMDUwMCwgMHg4MDAxMDAwMCwgMHgwNDAwMDAwNCwKLQkweDAyMDFmODAwLCAweDAwMTA2ZjYwLCAweDA0MDIwMTcwLCAweDU5Y2MwYTA0LAotCTB4NDgwNjYyMDIsIDB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsCisJMHgwMTAwMDAwMCwgMHgwNDAwMDAwNiwgMHg4MjAwMTU4MCwgMHgyMzAwMDAwMCwKKwkweDAyMDIwODAwLCAweDAwMTAwNmJhLCAweDA0MDIwMWM5LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMjMsIDB4MDQwMjAwNTUsIDB4NTljYzAwMDQsIDB4NDgwM2M4NTcsCisJMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwgMHg1OWNjMDgwMSwKKwkweDgyMDQwZDAwLCAweDAwZmZmZmZmLCAweDgwMDQwNTQwLCAweDQ4MDNjODU3LAorCTB4MDQwMWZiYjIsIDB4MDIwMDA4MDAsIDB4MDAxMDA2YmEsIDB4MDQwMDAxYjgsCisJMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAxMiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDExLCAweDA0MDAwMDBmLCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDEsIDB4MDQwMDAwMGMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDQsCisJMHgwNDAwMDAwOSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwOCwgMHgwNDAwMDAwNiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDBhLCAweDAyMDIwODAwLCAweDAwMTAwNmJhLAorCTB4MDQwMjAxYTMsIDB4NTkzMDAwMDQsIDB4ODIwMDA1MDAsIDB4ODAwMTAwMDAsCisJMHgwNDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNmNiNCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNmJhLCAweDA0MDIwMTlhLCAweDU5Y2MwYTA0LCAweDQ4MDY2MjAyLAorCTB4NTlhODAwMTYsIDB4ODAwMDAxYzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2YmEsCisJMHgwNDAwMDE5MywgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwKIAkweDgyMDAwZDgwLCAweDAyMDAwMDAwLCAweDA0MDIwMDA1LCAweDQyMDI3MDAwLAotCTB4MDAwMDAwMTUsIDB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAxNSwgMHgwMjAxZjAwMCwgMHgwMDAyMDhkOCwgMHg4MjAwMGQ4MCwKIAkweDAyMTQwMDAwLCAweDA0MDAwN2ZhLCAweDgyMDAwZDgwLCAweDAyMTAwMDAwLAogCTB4MDQwMDA3ZjcsIDB4ODIwMDBkODAsIDB4MDIxMDAwMDAsIDB4MDQwMDA3ZjQsCi0JMHg4MjAwMGQ4MCwgMHgwMTAwMDAwMCwgMHgwNDAyMDE1OCwgMHg1OWNjMDAwNiwKLQkweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDA0MDIwMTU0LCAweDQyMDI3MDAwLAotCTB4MDAwMDAwMTYsIDB4MDQwMWY3ZWMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMjIsCi0JMHgwNDAyMDE0ZSwgMHg1OWE4MDgwNiwgMHg4YzA0MGQxNCwgMHgwNDAwMDAxMSwKLQkweDA0MDFmOTY3LCAweDA0MDIwMDBmLCAweDA0MDFmOTdkLCAweDA0MDAwMDBkLAotCTB4NDIwMjcwMDAsIDB4MDAwMDAwNGMsIDB4NTljYzAwMDEsIDB4ODIwMDA1MDAsCi0JMHgwMGZmZmZmZiwgMHgwMjAxZjgwMCwgMHgwMDEwNWVlYywgMHgwNDAwMDEyYSwKLQkweDQyMDI4ODAwLCAweDAwMDBmZmZmLCAweDQxN2E2ODAwLCAweDA0MDFmMTI2LAorCTB4ODIwMDBkODAsIDB4MDEwMDAwMDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2YmEsCisJMHgwNDAyMDE3YiwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwKKwkweDAyMDIwODAwLCAweDAwMTAwNmJhLCAweDA0MDIwMTc1LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMTYsIDB4MDQwMWY3ZTgsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMjIsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDZiYSwgMHgwNDAyMDE2ZCwgMHg1OWNjMDAwNCwKKwkweDQ4MDNjODU3LCAweDU5Y2MwMDA2LCAweDQ4MDNjODU3LCAweDU5Y2MwMDAxLAorCTB4NDgwM2M4NTcsIDB4NTlhODAwMTYsIDB4ODAwMDAxYzAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDZiYSwgMHgwNDAwMDE2MiwgMHg1OWE4MDgwNiwgMHg4YzA0MGQxNCwKKwkweDA0MDAwMDExLCAweDA0MDFmOTdkLCAweDA0MDIwMDBmLCAweDA0MDFmOTkzLAorCTB4MDQwMDAwMGQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGMsIDB4NTljYzAwMDEsCisJMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHgwMjAxZjgwMCwgMHgwMDEwNWMyNSwKKwkweDA0MDAwMTNlLCAweDQyMDI4ODAwLCAweDAwMDBmZmZmLCAweDQxN2E2ODAwLAorCTB4MDQwMWYxM2EsIDB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsCisJMHg4MjAwMGQ4MCwgMHgwMzAwMDAwMCwgMHgwNDAyMDAyMywgMHg1OWE4MDAyNiwKKwkweDhjMDAwNTA4LCAweDA0MDAwMDE3LCAweDg0MDAwNTRjLCAweDQ4MDM1MDI2LAorCTB4NTljYzA4MDAsIDB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsIDB4NDgwNzUwMTAsCisJMHg0OTdiODgzMCwgMHg4NDA0MGQ3MCwgMHg0ODA3ODgzMiwgMHg1OWM0MDgwMiwKKwkweDg0MDQwZDRjLCAweDQ4MDc4ODAyLCAweDU5Y2MwMDA3LCAweDgyMDAwNTAwLAorCTB4MDAwMGZmZmYsIDB4NDgwMzg4OTMsIDB4NDgwMzUwMWUsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwMywgMHg1OWE4MTAxMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjlhZiwKKwkweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDAyMDIwODAwLAorCTB4MDAxMDA2YmEsIDB4MDQwMjAxMmEsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMTcsCisJMHgwNDAxZjBlNSwgMHg4MjAwMGQ4MCwgMHgwNDAwMDAwMCwgMHgwNDAyMDAxMywKKwkweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLCAweDAyMDIwODAwLAorCTB4MDAxMDA2YmEsIDB4MDQwMjAxMWUsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsCisJMHgwNDAwMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxZCwgMHgwNDAxZjBkNiwKKwkweDU5YTgwMDI2LCAweDg0MDAwNTQ4LCAweDQ4MDM1MDI2LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMzAsIDB4MDQwMWYwZDAsIDB4ODIwMDBkODAsIDB4MDUwMDAwMDAsCisJMHgwNDAyMDAwYSwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwKKwkweDAyMDIwODAwLCAweDAwMTAwNmJhLCAweDA0MDIwMTA5LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMTgsIDB4MDQwMWYwYzQsIDB4ODIwMDBkODAsIDB4MjAxMDAwMDAsCisJMHgwNDAyMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxOSwgMHgwNDAxZjBiZSwKKwkweDgyMDAwZDgwLCAweDIxMTAwMDAwLCAweDA0MDIwMDA0LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMWEsIDB4MDQwMWYwYjgsIDB4ODIwMDBkODAsIDB4NTIwMDAwMDAsCisJMHgwNDAyMDAwYSwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwKKwkweDAyMDIwODAwLCAweDAwMTAwNmJhLCAweDA0MDIwMGYxLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMWIsIDB4MDQwMWYwYWMsIDB4ODIwMDBkODAsIDB4NTAwMDAwMDAsCisJMHgwNDAyMDAwYSwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwKKwkweDAyMDIwODAwLCAweDAwMTAwNmJhLCAweDA0MDIwMGU1LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMWMsIDB4MDQwMWYwYTAsIDB4ODIwMDBkODAsIDB4MTMwMDAwMDAsCisJMHgwNDAyMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzNCwgMHgwNDAxZjA5YSwKKwkweDgyMDAwZDgwLCAweDEyMDAwMDAwLCAweDA0MDIwMDBhLCAweDU5Y2MwMDA2LAorCTB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsIDB4MDIwMjA4MDAsIDB4MDAxMDA2YmEsCisJMHgwNDAyMDBkMywgMHg0MjAyNzAwMCwgMHgwMDAwMDAyNCwgMHgwNDAxZjA4ZSwKKwkweDgyMDAwZDAwLCAweGZmMDAwMDAwLCAweDgyMDQwZDgwLCAweDI0MDAwMDAwLAorCTB4MDQwMjAwMDQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMmQsIDB4MDQwMWYwODYsCisJMHg4MjAwMGQwMCwgMHhmZjAwMDAwMCwgMHg4MjA0MGQ4MCwgMHg1MzAwMDAwMCwKKwkweDA0MDIwMDA0LCAweDQyMDI3MDAwLCAweDAwMDAwMDJhLCAweDA0MDFmMDdlLAorCTB4ODIwMDBkODAsIDB4MGYwMDAwMDAsIDB4MDQwMjAwMDQsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAyMCwgMHgwNDAxZjA3OCwgMHg4MjAwMGQ4MCwgMHg2MTA0MDAwMCwKKwkweDA0MDIwMDM2LCAweDgzY2MxNDAwLCAweDAwMDAwMDA2LCAweDgwMDgwODAwLAorCTB4NTAwODAwMDAsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsIDB4ODIwMDA0ODAsCisJMHgwMDAwMDAwNCwgMHg0YzU4MDAwMCwgMHg4MDAwYjEwNCwgMHg4MDU4YjFjMCwKKwkweDA0MDAwMDI2LCAweDRjMTAwMDAwLCAweDUwMDQxODAwLCAweDgyMGMxNTAwLAorCTB4MDMwMDAwMDAsIDB4ODAwODExMzAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MTUsCisJMHg4MjA4MjU4MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjEyLCAweDA0MDFmMDBjLCAweDgyMDgyNTgwLCAweDAwMDAwMDAxLAorCTB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MTMsIDB4MDQwMWYwMDYsCisJMHg4MjA4MjU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwMywgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjE0LCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDQyMDAxMDAwLAorCTB4MDAwMDgwMTUsIDB4ODIwYzI1MDAsIDB4MDAwMGZmZmYsIDB4ODAwYzE5MjAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzg1NywgMHg1YzAwMjAwMCwgMHg4MDA0MDgwMCwKKwkweDgwNThiMDQwLCAweDA0MDIwN2RhLCAweDVjMDBiMDAwLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMjMsIDB4MDQwMWYwNDAsIDB4ODIwMDBkODAsIDB4NjAwMDAwMDAsCisJMHgwNDAyMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzZiwgMHgwNDAxZjAzYSwKKwkweDgyMDAwZDgwLCAweDU0MDAwMDAwLCAweDA0MDIwMDA4LCAweDA0MDFmYjM2LAorCTB4MDIwMjA4MDAsIDB4MDAxMDA2YmEsIDB4MDQwMjAwNzUsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA0NiwgMHgwNDAxZjAzMCwgMHg4MjAwMGQ4MCwgMHg1NTAwMDAwMCwKKwkweDA0MDIwMDA5LCAweDA0MDFmYjU0LCAweDA0MDIwMDA0LCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNDEsIDB4MDQwMWYwMjgsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDIsCisJMHgwNDAxZjAyNSwgMHg4MjAwMGQ4MCwgMHg3ODAwMDAwMCwgMHgwNDAyMDAwNCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDQ1LCAweDA0MDFmMDFmLCAweDgyMDAwZDgwLAorCTB4MTAwMDAwMDAsIDB4MDQwMjAwMDQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGUsCisJMHgwNDAxZjAxOSwgMHg4MjAwMGQ4MCwgMHg2MzAwMDAwMCwgMHgwNDAyMDAwNCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDRhLCAweDA0MDFmMDEzLCAweDgyMDAwZDAwLAorCTB4ZmYwMDAwMDAsIDB4ODIwNDBkODAsIDB4NTYwMDAwMDAsIDB4MDQwMjAwMDQsCisJMHg0MjAyNzAwMCwgMHgwMDAwMDA0ZiwgMHgwNDAxZjAwYiwgMHg4MjAwMGQwMCwKKwkweGZmMDAwMDAwLCAweDgyMDQwZDgwLCAweDU3MDAwMDAwLCAweDA0MDIwMDA0LAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNTAsIDB4MDQwMWYwMDMsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAxZCwgMHg1OWNjMzgwMCwgMHg4MjFjM2QwMCwgMHgwMGZmZmZmZiwKKwkweDgyMWMwNTgwLCAweDAwZmZmZmZlLCAweDU5Y2MwMDAxLCAweDA0MDIwMDA1LAorCTB4NDAwMDMwMDAsIDB4NDIwMjg4MDAsIDB4MDAwMDA3ZmUsIDB4MDQwMWYwMDUsCisJMHgwNDAxZjhkYSwgMHgwMjAyMDgwMCwgMHgwMDEwMDZiYSwgMHgwNDAyMDAzNCwKKwkweDAyMDFmODAwLCAweDAwMTA0NDAxLCAweDAyMDIwODAwLCAweDAwMTAwNmJhLAorCTB4MDQwMjAwMmYsIDB4ODMzODA1ODAsIDB4MDAwMDAwNDYsIDB4MDQwMjAwMDYsCisJMHg1OWE4MDAxMCwgMHg4MDE4MDU4MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDZiYSwKKwkweDA0MDAwMDI3LCAweDU5MzQwMjAwLCAweDhjMDAwNTE0LCAweDA0MDAwMDBmLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMzAsIDB4MDQwMDAwMGMsIDB4ODMzODA1ODAsCisJMHgwMDAwMDAzZiwgMHgwNDAwMDAwOSwgMHg4MzM4MDU4MCwgMHgwMDAwMDAzNCwKKwkweDA0MDAwMDA2LCAweDgzMzgwNTgwLCAweDAwMDAwMDI0LCAweDA0MDAwMDAzLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNGMsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsCisJMHgwNDAwMDAxOCwgMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwNCwKKwkweDU5Y2MwYzA0LCAweDQ4MDY2MjAyLCAweDgzMzgwNTgwLCAweDAwMDAwMDRjLAorCTB4MDQwMjAwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMTEsIDB4ODEzNjY5YzAsCisJMHgwNDAyMDAwNSwgMHg1OWNjMDAwMSwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKKwkweDQ4MDI2MDFlLCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LCAweDU5ODgwMDUzLAorCTB4NDgwM2M4NTcsIDB4ODAwMDAwMDAsIDB4NDgwMzEwNTMsIDB4MWMwMWYwMDAsCisJMHg0MjAwMTAwMCwgMHgwMDAwODA0OSwgMHg1OWNjMTgwNiwgMHg4MDBjMTkzMCwKKwkweDAyMDFmODAwLCAweDAwMTAzODU3LCAweDAyMDFmODAwLCAweDAwMTA3NmM5LAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2YmEsIDB4MDQwMDA3ZjEsIDB4NDkzNjYwMDksCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwNCwgMHg1OWNjMGMwNCwgMHg0ODA2NjIwMiwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDFhLCAweDAwMDAwMDA5LAorCTB4NGEwMjYyMWEsIDB4MDAwMDI5MDAsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjAwMCwgMHgwMDEwNjQ3MCwgMHg1OWE4MDAyNiwgMHg0ODAzYzg1NywKKwkweDhjMDAwNTA4LCAweDA0MDAwMDEwLCAweDU5Y2MwMDA2LCAweDgyMDAwNTAwLAorCTB4ZmYwMDAwMDAsIDB4ODIwMDBkODAsIDB4MDMwMDAwMDAsIDB4MDQwMDAwMGMsCisJMHg4MjAwMGQ4MCwgMHgyMDAwMDAwMCwgMHgwNDAwMDAwOSwgMHg4MjAwMGQ4MCwKKwkweDA1MDAwMDAwLCAweDA0MDAwMDA2LCAweDgyMDAwZDgwLCAweDIxMDAwMDAwLAorCTB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwgMHg1OWNjMjAwNiwgMHg4MjEwMjUwMCwKKwkweGZmMDAwMDAwLCAweDljMTAyMWMwLCAweDA0MDFmODA3LCAweDgyMGMxYzAwLAorCTB4MDAxMGIyZGYsIDB4NTAwYzE4MDAsIDB4ODAwYzA1MDAsIDB4NDgwM2M4NTcsCisJMHgxYzAxZjAwMCwgMHg0MDEwMDgwMCwgMHg0MTc4MTgwMCwgMHg4MjA0MDQ4MCwKKwkweDAwMDAwMDIwLCAweDA0MDAxMDA0LCAweDgwMGMxODAwLCAweDQwMDAwODAwLAorCTB4MDQwMWY3ZmIsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDA0MDAsCisJMHgwMDEwYTk1ZiwgMHg1MDAwMDAwMCwgMHg4YzA0MGQwOCwgMHgwNDAwMDAwMiwKKwkweDkwMDAwMWMwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDA0MDFmYWRkLAorCTB4MDQwMjAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDFlYjAsIDB4MDQwMjAwMDcsCisJMHg1OWNjMDAwMiwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwgMHg4MjAwMGQ4MCwKKwkweDA4MDAwMDAwLCAweDA0MDAwODAyLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NTljYzA0MDAsIDB4ODIwMDBkMDAsIDB4MDAwMGZmMDAsIDB4ODQwNDA5YzAsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAzMywgMHgwNDAyMDAxZiwgMHgwNDAxZjk4ZiwKKwkweDA0MDAwMDM4LCAweDU5Y2MwYTA0LCAweDQ4MDY2MjAyLCAweDU5Y2MwMDA2LAorCTB4NDgwM2M4NTcsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODIwMDBkODAsCisJMHgwMjAwMDAwMCwgMHgwNDAyMDAwOSwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwKKwkweDAwMDBmZmZmLCAweDA0MDIwMDJiLCAweDQyMDI3MDAwLCAweDAwMDAwMDE1LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4ZDgsIDB4ODIwMDBkODAsIDB4MDEwMDAwMDAsCisJMHgwNDAyMDAyNCwgMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwKKwkweDA0MDIwMDIwLCAweDQyMDI3MDAwLCAweDAwMDAwMDE2LCAweDAyMDFmMDAwLAorCTB4MDAwMjA4ZDgsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMzIsIDB4MDQwMjAwMTksCiAJMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwgMHg4MjAwMGQ4MCwKLQkweDAzMDAwMDAwLCAweDA0MDIwMDIxLCAweDU5YTgwMDI2LCAweDhjMDAwNTA4LAotCTB4MDQwMDAwMTcsIDB4ODQwMDA1NGMsIDB4NDgwMzUwMjYsIDB4NTljYzA4MDAsCi0JMHg4MjA0MGQwMCwgMHgwMGZmZmZmZiwgMHg0ODA3NTAxMCwgMHg0OTdiODgzMCwKLQkweDg0MDQwZDcwLCAweDQ4MDc4ODMyLCAweDU5YzQwODAyLCAweDg0MDQwZDRjLAotCTB4NDgwNzg4MDIsIDB4NTljYzAwMDcsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsCi0JMHg0ODAzODg5MywgMHg0ODAzNTAxZSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywKLQkweDU5YTgxMDEwLCAweDAyMDFmODAwLCAweDAwMTA2Yzc4LCAweDU5Y2MwMDA2LAotCTB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsIDB4MDQwMjAxMTgsIDB4NDIwMjcwMDAsCi0JMHgwMDAwMDAxNywgMHgwNDAxZjBkOSwgMHg4MjAwMGQ4MCwgMHgwNDAwMDAwMCwKLQkweDA0MDIwMDExLCAweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLAotCTB4MDQwMjAxMGUsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4MDQwMDAwMDQsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAxZCwgMHgwNDAxZjBjYywgMHg1OWE4MDAyNiwKLQkweDg0MDAwNTQ4LCAweDQ4MDM1MDI2LCAweDQyMDI3MDAwLCAweDAwMDAwMDMwLAotCTB4MDQwMWYwYzYsIDB4ODIwMDBkODAsIDB4MDUwMDAwMDAsIDB4MDQwMjAwMDgsCi0JMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwgMHgwNDAyMDBmYiwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDE4LCAweDA0MDFmMGJjLCAweDgyMDAwZDgwLAotCTB4MjAxMDAwMDAsIDB4MDQwMjAwMDQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMTksCi0JMHgwNDAxZjBiNiwgMHg4MjAwMGQ4MCwgMHgyMTEwMDAwMCwgMHgwNDAyMDAwNCwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDFhLCAweDA0MDFmMGIwLCAweDgyMDAwZDgwLAotCTB4NTIwMDAwMDAsIDB4MDQwMjAwMDgsIDB4NTljYzAwMDYsIDB4ODIwMDA1MDAsCi0JMHgwMDAwZmZmZiwgMHgwNDAyMDBlNSwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxYiwKLQkweDA0MDFmMGE2LCAweDgyMDAwZDgwLCAweDUwMDAwMDAwLCAweDA0MDIwMDA4LAotCTB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsIDB4MDQwMjAwZGIsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAxYywgMHgwNDAxZjA5YywgMHg4MjAwMGQ4MCwKLQkweDEzMDAwMDAwLCAweDA0MDIwMDA0LCAweDQyMDI3MDAwLCAweDAwMDAwMDM0LAotCTB4MDQwMWYwOTYsIDB4ODIwMDBkODAsIDB4MTIwMDAwMDAsIDB4MDQwMjAwMDgsCi0JMHg1OWNjMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwgMHgwNDAyMDBjYiwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDI0LCAweDA0MDFmMDhjLCAweDgyMDAwZDAwLAotCTB4ZmYwMDAwMDAsIDB4ODIwNDBkODAsIDB4MjQwMDAwMDAsIDB4MDQwMjAwMDQsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAyZCwgMHgwNDAxZjA4NCwgMHg4MjAwMGQwMCwKLQkweGZmMDAwMDAwLCAweDgyMDQwZDgwLCAweDUzMDAwMDAwLCAweDA0MDIwMDA0LAotCTB4NDIwMjcwMDAsIDB4MDAwMDAwMmEsIDB4MDQwMWYwN2MsIDB4ODIwMDBkODAsCi0JMHgwZjAwMDAwMCwgMHgwNDAyMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAyMCwKLQkweDA0MDFmMDc2LCAweDgyMDAwZDgwLCAweDYxMDQwMDAwLCAweDA0MDIwMDM2LAotCTB4ODNjYzE0MDAsIDB4MDAwMDAwMDYsIDB4ODAwODA4MDAsIDB4NTAwODAwMDAsCi0JMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwgMHg4MjAwMDQ4MCwgMHgwMDAwMDAwNCwKLQkweDRjNTgwMDAwLCAweDgwMDBiMTA0LCAweDgwNThiMWMwLCAweDA0MDAwMDI2LAotCTB4NGMxMDAwMDAsIDB4NTAwNDE4MDAsIDB4ODIwYzE1MDAsIDB4MDMwMDAwMDAsCi0JMHg4MDA4MTEzMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgxNywgMHg4MjA4MjU4MCwKLQkweDAwMDAwMDAwLCAweDA0MDIwMDA0LCAweDQyMDAwMDAwLCAweDAwMTBiODE0LAotCTB4MDQwMWYwMGMsIDB4ODIwODI1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMDQsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjgxNSwgMHgwNDAxZjAwNiwgMHg4MjA4MjU4MCwKLQkweDAwMDAwMDAyLCAweDA0MDIwMDAzLCAweDQyMDAwMDAwLCAweDAwMTBiODE2LAotCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDIwMDEwMDAsIDB4MDAwMDgwMTUsCi0JMHg4MjBjMjUwMCwgMHgwMDAwZmZmZiwgMHg4MDBjMTkyMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAzYTNlLCAweDVjMDAyMDAwLCAweDgwMDQwODAwLCAweDgwNThiMDQwLAotCTB4MDQwMjA3ZGEsIDB4NWMwMGIwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMjMsCi0JMHgwNDAxZjAzZSwgMHg4MjAwMGQ4MCwgMHg2MDAwMDAwMCwgMHgwNDAyMDAwNCwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDNmLCAweDA0MDFmMDM4LCAweDgyMDAwZDgwLAotCTB4NTQwMDAwMDAsIDB4MDQwMjAwMDYsIDB4MDQwMWZiMTIsIDB4MDQwMjAwNmYsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDA0NiwgMHgwNDAxZjAzMCwgMHg4MjAwMGQ4MCwKLQkweDU1MDAwMDAwLCAweDA0MDIwMDA5LCAweDA0MDFmYjMyLCAweDA0MDIwMDA0LAotCTB4NDIwMjcwMDAsIDB4MDAwMDAwNDEsIDB4MDQwMWYwMjgsIDB4NDIwMjcwMDAsCi0JMHgwMDAwMDA0MiwgMHgwNDAxZjAyNSwgMHg4MjAwMGQ4MCwgMHg3ODAwMDAwMCwKLQkweDA0MDIwMDA0LCAweDQyMDI3MDAwLCAweDAwMDAwMDQ1LCAweDA0MDFmMDFmLAotCTB4ODIwMDBkODAsIDB4MTAwMDAwMDAsIDB4MDQwMjAwMDQsIDB4NDIwMjcwMDAsCi0JMHgwMDAwMDA0ZSwgMHgwNDAxZjAxOSwgMHg4MjAwMGQ4MCwgMHg2MzAwMDAwMCwKLQkweDA0MDIwMDA0LCAweDQyMDI3MDAwLCAweDAwMDAwMDRhLCAweDA0MDFmMDEzLAotCTB4ODIwMDBkMDAsIDB4ZmYwMDAwMDAsIDB4ODIwNDBkODAsIDB4NTYwMDAwMDAsCi0JMHgwNDAyMDAwNCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0ZiwgMHgwNDAxZjAwYiwKLQkweDgyMDAwZDAwLCAweGZmMDAwMDAwLCAweDgyMDQwZDgwLCAweDU3MDAwMDAwLAotCTB4MDQwMjAwMDQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNTAsIDB4MDQwMWYwMDMsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAxZCwgMHg1OWNjMzgwMCwgMHg4MjFjM2QwMCwKLQkweDAwZmZmZmZmLCAweDgyMWMwNTgwLCAweDAwZmZmZmZlLCAweDU5Y2MwMDAxLAotCTB4MDQwMjAwMDUsIDB4NDAwMDMwMDAsIDB4NDIwMjg4MDAsIDB4MDAwMDA3ZmUsCi0JMHgwNDAxZjAwMywgMHgwNDAxZjhkMSwgMHgwNDAyMDAzMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0NWE2LCAweDA0MDIwMDJkLCAweDgzMzgwNTgwLCAweDAwMDAwMDQ2LAotCTB4MDQwMjAwMDQsIDB4NTlhODAwMTAsIDB4ODAxODA1ODAsIDB4MDQwMDAwMjcsCi0JMHg1OTM0MDIwMCwgMHg4YzAwMDUxNCwgMHgwNDAwMDAwZiwgMHg4MzM4MDU4MCwKLQkweDAwMDAwMDMwLCAweDA0MDAwMDBjLCAweDgzMzgwNTgwLCAweDAwMDAwMDNmLAotCTB4MDQwMDAwMDksIDB4ODMzODA1ODAsIDB4MDAwMDAwMzQsIDB4MDQwMDAwMDYsCi0JMHg4MzM4MDU4MCwgMHgwMDAwMDAyNCwgMHgwNDAwMDAwMywgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDRjLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLCAweDA0MDAwMDE4LAotCTB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDQsIDB4NTljYzBjMDQsCi0JMHg0ODA2NjIwMiwgMHg4MzM4MDU4MCwgMHgwMDAwMDA0YywgMHgwNDAyMDAwOSwKLQkweDRhMDI2NDA2LCAweDAwMDAwMDExLCAweDgxMzY2OWMwLCAweDA0MDIwMDA1LAotCTB4NTljYzAwMDEsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4NDgwMjYwMWUsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg1OTg4MDA1MiwgMHg0ODAzYzg1NywKLQkweDgwMDAwMDAwLCAweDQ4MDMxMDUyLCAweDFjMDFmMDAwLCAweDQyMDAxMDAwLAotCTB4MDAwMDgwNDksIDB4NTljYzE4MDYsIDB4ODAwYzE5MzAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2EzZSwgMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwgMHgwNDAwMDdmMywKLQkweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDA0LCAweDU5Y2MwYzA0LAotCTB4NDgwNjYyMDIsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MWEsCi0JMHgwMDAwMDAwOSwgMHg0YTAyNjIxYSwgMHgwMDAwMjkwMCwgMHg0YTAyNjIwMywKLQkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDU5YTgwMDI2LAotCTB4NDgwM2M4NTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMTAsIDB4NTljYzAwMDYsCi0JMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwgMHg4MjAwMGQ4MCwgMHgwMzAwMDAwMCwKLQkweDA0MDAwMDBjLCAweDgyMDAwZDgwLCAweDIwMDAwMDAwLCAweDA0MDAwMDA5LAotCTB4ODIwMDBkODAsIDB4MDUwMDAwMDAsIDB4MDQwMDAwMDYsIDB4ODIwMDBkODAsCi0JMHgyMTAwMDAwMCwgMHgwNDAwMDAwMywgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmN2ZkLCAweDU5Y2MyMDA2LAotCTB4ODIxMDI1MDAsIDB4ZmYwMDAwMDAsIDB4OWMxMDIxYzAsIDB4MDQwMWY4MDcsCi0JMHg4MjBjMWMwMCwgMHgwMDEwYjRlMywgMHg1MDBjMTgwMCwgMHg4MDBjMDUwMCwKLQkweDQ4MDNjODU3LCAweDFjMDFmMDAwLCAweDQwMTAwODAwLCAweDQxNzgxODAwLAotCTB4ODIwNDA0ODAsIDB4MDAwMDAwMjAsIDB4MDQwMDEwMDQsIDB4ODAwYzE4MDAsCi0JMHg0MDAwMDgwMCwgMHgwNDAxZjdmYiwgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwKLQkweDgyMDAwNDAwLCAweDAwMTBhYjM4LCAweDUwMDAwMDAwLCAweDhjMDQwZDA4LAotCTB4MDQwMDAwMDIsIDB4OTAwMDAxYzAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCi0JMHgwNDAxZmFjMywgMHgwNDAyMDAwYSwgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwKLQkweDA0MDIwMDA3LCAweDU5Y2MwMDAyLCAweDgyMDAwNTAwLCAweGZmMDAwMDAwLAotCTB4ODIwMDBkODAsIDB4MDgwMDAwMDAsIDB4MDQwMDA4MDIsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg1OWNjMDQwMCwgMHg4MjAwMGQwMCwgMHgwMDAwZmYwMCwKLQkweDg0MDQwOWMwLCAweDgyMDQwNTgwLCAweDAwMDAwMDMzLCAweDA0MDIwMDFmLAotCTB4MDQwMWY5NzYsIDB4MDQwMDAwMzgsIDB4NTljYzBhMDQsIDB4NDgwNjYyMDIsCi0JMHg1OWNjMDAwNiwgMHg0ODAzYzg1NywgMHg4MjAwMDUwMCwgMHhmZmZmMDAwMCwKLQkweDgyMDAwZDgwLCAweDAyMDAwMDAwLCAweDA0MDIwMDA5LCAweDU5Y2MwMDA2LAotCTB4ODIwMDA1MDAsIDB4MDAwMGZmZmYsIDB4MDQwMjAwMmIsIDB4NDIwMjcwMDAsCi0JMHgwMDAwMDAxNSwgMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg4MjAwMGQ4MCwKLQkweDAxMDAwMDAwLCAweDA0MDIwMDI0LCAweDU5Y2MwMDA2LCAweDgyMDAwNTAwLAotCTB4MDAwMGZmZmYsIDB4MDQwMjAwMjAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMTYsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAzMiwKLQkweDA0MDIwMDE5LCAweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLAotCTB4ODIwMDBkODAsIDB4MTQwMDAwMDAsIDB4MDQwMjAwMTMsIDB4NDIwMjcwMDAsCi0JMHgwMDAwMDAzOCwgMHg1OWNjMDAwMSwgMHgwNDAxZjgxMCwgMHgwNDAyMDAwZSwKLQkweDAyMDFmODAwLCAweDAwMTA0NWE2LCAweDA0MDIwMDBiLCAweDAyMDFmODAwLAotCTB4MDAwMjA3NWEsIDB4MDQwMDAwMDgsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwNCwgMHg1OWNjMGMwNCwgMHg0ODA2NjIwMiwgMHgwMjAxZjAwMCwKLQkweDAwMDIwN2ExLCAweDFjMDFmMDAwLCAweDQ4MDNjODU3LCAweDRjNTgwMDAwLAotCTB4NGMxMDAwMDAsIDB4NGMzODAwMDAsIDB4NGMzNDAwMDAsIDB4ODIwMDM1MDAsCi0JMHgwMGZmZmZmZiwgMHg4MjE4MTUwMCwgMHgwMGZmMDAwMCwgMHg4MjA4MTU4MCwKLQkweDAwZmYwMDAwLCAweDA0MDIwMDE2LCAweDgyMTgxNDgwLCAweDAwZmZmZmZjLAotCTB4MDQwMDEwMTMsIDB4ODIxODE1ODAsIDB4MDBmZmZmZmQsIDB4MDQwMjAwMDQsCi0JMHg0MjAyODgwMCwgMHgwMDAwMDdmZCwgMHgwNDAxZjA0MCwgMHg4MjE4MTU4MCwKLQkweDAwZmZmZmZlLCAweDA0MDIwMDA0LCAweDQyMDI4ODAwLCAweDAwMDAwN2ZlLAotCTB4MDQwMWYwM2EsIDB4ODIxODE1ODAsIDB4MDBmZmZmZmMsIDB4MDQwMjAwMDQsCi0JMHg0MjAyODgwMCwgMHgwMDAwMDdmYywgMHgwNDAxZjAzNCwgMHg0MTc4MTAwMCwKLQkweDQyMDAyMDAwLCAweDAwMDAwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwN2YwLAotCTB4NDFhYzcwMDAsIDB4NTAzODAwMDAsIDB4ODAwMDZkNDAsIDB4MDQwMjAwMDUsCi0JMHg4MDA4MTFjMCwgMHgwNDAyMDAxZSwgMHg4NDEwMTU1ZSwgMHgwNDAxZjAxYywKLQkweDU4MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDA0MDAwMDExLAotCTB4NTlhODQwMTAsIDB4ODIyMDQ1MDAsIDB4MDBmZmZmMDAsIDB4ODIxODA1MDAsCi0JMHgwMGZmZmYwMCwgMHgwNDAwMDAwMiwgMHg4MDIwMDU4MCwgMHg1ODM0MDAwMiwKLQkweDA0MDIwMDBmLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMTg0NTAwLAotCTB4MDAwMDAwZmYsIDB4ODAyMDQ1ODAsIDB4MDQwMjAwMDksIDB4MDQwMWYwMDYsCi0JMHg1ODM0MDAwMiwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg4MDE4NDU4MCwKLQkweDA0MDIwMDAzLCAweDQwMTI4ODAwLCAweDA0MDFmMDBjLCAweDgwMTAyMDAwLAotCTB4ODAzODcwMDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZGIsIDB4ODAwODExYzAsCi0JMHgwNDAyMDAwNSwgMHg0ODFiYzg1NywgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDA0MDFmMDAzLCAweDg0MGE4ZDFlLCAweDgwMDAwNTgwLCAweDVjMDA2ODAwLAotCTB4NWMwMDcwMDAsIDB4NWMwMDIwMDAsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsCi0JMHg1OWE4MDAyNiwgMHg4YzAwMDUwZSwgMHgwNDAwMDAwMywgMHg4YzAwMDUwMiwKLQkweDA0MDAwMDA2LCAweDU5Y2MwYzAwLCAweDgwMDQwOTEwLCAweDgyMDQwNTAwLAotCTB4MDAwMDAwMGYsIDB4MGMwMWYwMDIsIDB4MWMwMWYwMDAsIDB4MDAxMDVkMGYsCi0JMHgwMDEwNWQwZiwgMHgwMDEwNWQwZiwgMHgwMDEwNWRlNSwgMHgwMDEwNWQwZiwKLQkweDAwMTA1ZDExLCAweDAwMTA1ZDI5LCAweDAwMTA1ZDJjLCAweDAwMTA1ZDBmLAotCTB4MDAxMDVkMGYsIDB4MDAxMDVkMGYsIDB4MDAxMDVkMGYsIDB4MDAxMDVkMGYsCi0JMHgwMDEwNWQwZiwgMHgwMDEwNWQwZiwgMHgwMDEwNWQwZiwgMHg0ODAzYzg1NiwKLQkweDFjMDFmMDAwLCAweDA0MDFmOGM1LCAweDA0MDAwMDE0LCAweDgyMTQwNTAwLAotCTB4MDAwMDAzZmYsIDB4ODAwMDAwYzQsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMDgsCi0JMHgwNDAwMTAwZSwgMHg1OWNjMDAwMSwgMHg1OTMyNjgwOSwgMHg1OTM0MDgwMiwKLQkweDgwMDQwNTgwLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDA0MDIwMDA3LAotCTB4NTljYzBhMDQsIDB4NDgwNjYyMDIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDYsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg1OWNjMDAwNCwgMHg0ODAzYzg1NywKLQkweDFjMDFmMDAwLCAweDU5Y2MwMDA0LCAweDQ4MDNjODU3LCAweDFjMDFmMDAwLAotCTB4MDQwMWY4YWEsIDB4MDQwMDAwMTYsIDB4ODIxNDA1MDAsIDB4MDAwMDAzZmYsCi0JMHg4MDAwMDBjNCwgMHg4MjAwMDQ4MCwgMHgwMDAwMDAwYywgMHgwNDAwMTAxMCwKLQkweDU5Y2MwMDAxLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDU5MzI2ODA5LAotCTB4NTkzNDA4MDIsIDB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsIDB4ODAwNDA1ODAsCi0JMHgwNDAyMDAwNywgMHg1OWNjMGEwNCwgMHg0ODA2NjIwMiwgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDQ1LCAweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDU5Y2MwMDA0LAotCTB4NDgwM2M4NTcsIDB4MWMwMWYwMDAsIDB4NDgxN2M4NTcsIDB4MDQwMWY5YzgsCi0JMHgwNDAyMDAxMSwgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwNDAyMDAwZSwKLQkweDU5Y2MwMDAyLCAweDgyMDAwNTAwLCAweGZmMDAwMDAwLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDAsIDB4MDQwMjAwMDgsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMGYsCi0JMHg4MjAwMGM4MCwgMHgwMDAwMDAwNiwgMHgwNDAyMTAwMywgMHg0ODAzYzg1NywKLQkweDBjMDFmMDAyLCAweDFjMDFmMDAwLCAweDAwMTA1ZDYwLCAweDAwMTA1ZDY0LAotCTB4MDAxMDVkNjAsIDB4MDAxMDVkNjAsIDB4MDAxMDVkYjIsIDB4MDAxMDVkYzMsCi0JMHg0ODAzYzg1NywgMHg1OWNjMDAwNCwgMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwKLQkweDU5Y2MwMDA0LCAweDQ4MDNjODU3LCAweDU5YTgwMDE2LCAweDgwMDAwMWMwLAotCTB4MDQwMjA3ZjgsIDB4NTljYzA4MDIsIDB4OGMwNDBkMmUsIDB4MDQwMjAwMWQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKLQkweDU5Y2MwMDAxLCAweDQ4MDNjODU3LCAweDA0MDFmZjI4LCAweDA0MDIwMDBkLAotCTB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwMGEsIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwNSwgMHg0OTM2NjAwOSwgMHg1OWNjMGMwNCwgMHg0ODA2NjIwMiwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDg4LCAweDAyMDFmMDAwLCAweDAwMDIwN2ExLAorCTB4MTQwMDAwMDAsIDB4MDQwMjAwMTMsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMzgsCisJMHg1OWNjMDAwMSwgMHgwNDAxZjgxMCwgMHgwNDAyMDAwZSwgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2ZjLCAweDA0MDIwMDBiLCAweDAyMDFmODAwLCAweDAwMDIwODkyLAorCTB4MDQwMDAwMDgsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDQsCisJMHg1OWNjMGMwNCwgMHg0ODA2NjIwMiwgMHgwMjAxZjAwMCwgMHgwMDAyMDhkOCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU3LCAweDRjNTgwMDAwLCAweDRjMTAwMDAwLAorCTB4NGMzODAwMDAsIDB4NGMzNDAwMDAsIDB4ODIwMDM1MDAsIDB4MDBmZmZmZmYsCisJMHg4MjE4MTUwMCwgMHgwMGZmMDAwMCwgMHg4MjA4MTU4MCwgMHgwMGZmMDAwMCwKKwkweDA0MDIwMDE2LCAweDgyMTgxNDgwLCAweDAwZmZmZmZjLCAweDA0MDAxMDEzLAorCTB4ODIxODE1ODAsIDB4MDBmZmZmZmQsIDB4MDQwMjAwMDQsIDB4NDIwMjg4MDAsCisJMHgwMDAwMDdmZCwgMHgwNDAxZjA0MCwgMHg4MjE4MTU4MCwgMHgwMGZmZmZmZSwKKwkweDA0MDIwMDA0LCAweDQyMDI4ODAwLCAweDAwMDAwN2ZlLCAweDA0MDFmMDNhLAorCTB4ODIxODE1ODAsIDB4MDBmZmZmZmMsIDB4MDQwMjAwMDQsIDB4NDIwMjg4MDAsCisJMHgwMDAwMDdmYywgMHgwNDAxZjAzNCwgMHg0MTc4MTAwMCwgMHg0MjAwMjAwMCwKKwkweDAwMDAwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwN2YwLCAweDQxYWM3MDAwLAorCTB4NTAzODAwMDAsIDB4ODAwMDZkNDAsIDB4MDQwMjAwMDUsIDB4ODAwODExYzAsCisJMHgwNDAyMDAxZSwgMHg4NDEwMTU1ZSwgMHgwNDAxZjAxYywgMHg1ODM0MDIxMiwKKwkweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDA0MDAwMDExLCAweDU5YTg0MDEwLAorCTB4ODIyMDQ1MDAsIDB4MDBmZmZmMDAsIDB4ODIxODA1MDAsIDB4MDBmZmZmMDAsCisJMHgwNDAwMDAwMiwgMHg4MDIwMDU4MCwgMHg1ODM0MDAwMiwgMHgwNDAyMDAwZiwKKwkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMTg0NTAwLCAweDAwMDAwMGZmLAorCTB4ODAyMDQ1ODAsIDB4MDQwMjAwMDksIDB4MDQwMWYwMDYsIDB4NTgzNDAwMDIsCisJMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg4MDE4NDU4MCwgMHgwNDAyMDAwMywKKwkweDQwMTI4ODAwLCAweDA0MDFmMDBjLCAweDgwMTAyMDAwLCAweDgwMzg3MDAwLAorCTB4ODA1OGIwNDAsIDB4MDQwMjA3ZGIsIDB4ODAwODExYzAsIDB4MDQwMjAwMDUsCisJMHg0ODFiYzg1NywgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMywKKwkweDg0MGE4ZDFlLCAweDgwMDAwNTgwLCAweDVjMDA2ODAwLCAweDVjMDA3MDAwLAorCTB4NWMwMDIwMDAsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NTlhODAwMjYsCisJMHg4YzAwMDUwZSwgMHgwNDAwMDAwMywgMHg4YzAwMDUwMiwgMHgwNDAwMDAwNiwKKwkweDU5Y2MwYzAwLCAweDgwMDQwOTEwLCAweDgyMDQwNTAwLCAweDAwMDAwMDBmLAorCTB4MGMwMWYwMDIsIDB4MWMwMWYwMDAsIDB4MDAxMDVhMmUsIDB4MDAxMDVhMmUsCisJMHgwMDEwNWEyZSwgMHgwMDEwNWIxZCwgMHgwMDEwNWEyZSwgMHgwMDEwNWEzMCwKKwkweDAwMTA1YTQ4LCAweDAwMTA1YTRiLCAweDAwMTA1YTJlLCAweDAwMTA1YTJlLAorCTB4MDAxMDVhMmUsIDB4MDAxMDVhMmUsIDB4MDAxMDVhMmUsIDB4MDAxMDVhMmUsCisJMHgwMDEwNWEyZSwgMHgwMDEwNWEyZSwgMHg0ODAzYzg1NiwgMHgxYzAxZjAwMCwKKwkweDA0MDFmOGRlLCAweDA0MDAwMDE0LCAweDgyMTQwNTAwLCAweDAwMDAwM2ZmLAorCTB4ODAwMDAwYzQsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDEwMGUsCisJMHg1OWNjMDAwMSwgMHg1OTMyNjgwOSwgMHg1OTM0MDgwMiwgMHg4MDA0MDU4MCwKKwkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDA0MDIwMDA3LCAweDU5Y2MwYTA0LAorCTB4NDgwNjYyMDIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDYsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDhkOCwgMHg1OWNjMDAwNCwgMHg0ODAzYzg1NywgMHgxYzAxZjAwMCwKKwkweDU5Y2MwMDA0LCAweDQ4MDNjODU3LCAweDFjMDFmMDAwLCAweDA0MDFmOGMzLAorCTB4MDQwMDAwMTYsIDB4ODIxNDA1MDAsIDB4MDAwMDAzZmYsIDB4ODAwMDAwYzQsCisJMHg4MjAwMDQ4MCwgMHgwMDAwMDAwYywgMHgwNDAwMTAxMCwgMHg1OWNjMDAwMSwKKwkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDU5MzI2ODA5LCAweDU5MzQwODAyLAorCTB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsIDB4ODAwNDA1ODAsIDB4MDQwMjAwMDcsCisJMHg1OWNjMGEwNCwgMHg0ODA2NjIwMiwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0NSwKKwkweDAyMDFmMDAwLCAweDAwMDIwOGQ4LCAweDU5Y2MwMDA0LCAweDQ4MDNjODU3LAorCTB4MWMwMWYwMDAsIDB4NTljYzAwMDQsIDB4NDgwM2M4NTcsIDB4NTljYzAwMDAsCisJMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwgMHg1OWNjMTAwMSwgMHg4MjA4MTUwMCwKKwkweDAwZmZmZmZmLCAweDgwMDgwNTQwLCAweDQ4MDNjODU3LCAweDQ4MTdjODU3LAorCTB4MDQwMWY5ZDgsIDB4MDIwMjA4MDAsIDB4MDAxMDA2YmEsIDB4MDQwMjAwMTYsCisJMHgwMjAxZjgwMCwgMHgwMDEwMWViMCwgMHgwMjAyMDgwMCwgMHgwMDEwMDZiYSwKKwkweDA0MDIwMDExLCAweDU5Y2MwMDAyLCAweDgyMDAwNTAwLCAweGZmMDAwMDAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2YmEsCisJMHgwNDAyMDAwOSwgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMGM4MCwKKwkweDAwMDAwMDA2LCAweDAyMDIxODAwLCAweDAwMTAwNmJhLCAweDA0MDIxMDAyLAorCTB4MGMwMWYwMDMsIDB4NDgwM2M4NTYsIDB4MWMwMWYwMDAsIDB4MDAxMDVhOTEsCisJMHgwMDEwNWE5MywgMHgwMDEwNWE5MSwgMHgwMDEwNWE5MSwgMHgwMDEwNWFlYywKKwkweDAwMTA1YWZiLCAweDQ4MDNjODU2LCAweDFjMDFmMDAwLCAweDU5YTgwMDE2LAorCTB4ODAwMDAxYzAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2YmEsIDB4MDQwMjA3ZmEsCisJMHg1OWNjMDgwMiwgMHg0ODA3Yzg1NiwgMHg4YzA0MGQyZSwgMHgwNDAyMDAxZCwKKwkweDAyMDFmODAwLCAweDAwMTA3NmM5LCAweDAyMDAwODAwLCAweDAwMTAwNjE1LAorCTB4NTljYzAwMDEsIDB4MDQwMWZmMTgsIDB4MDQwMjAwMGQsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDI2NywgMHgwNDAyMDAwYSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwNSwKKwkweDQ5MzY2MDA5LCAweDU5Y2MwODA0LCAweDQ4MDY2MDFjLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwODgsIDB4MDIwMWYwMDAsIDB4MDAwMjA4ZDgsIDB4NDgwM2M4NTcsCiAJMHg0MjAyODgwMCwgMHgwMDAwZmZmZiwgMHg0MTdhNjgwMCwgMHg1OWNjMDAwMSwKLQkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDQ4MDI2MDFlLCAweDA0MDFmN2YwLAotCTB4NTljYzAwMDEsIDB4NDgwM2M4NTcsIDB4MDQwMWZmMTAsIDB4MDQwMjA3ZDUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDVhNiwgMHgwNDAyMDdkMiwgMHg1OWNjMDAwNSwKLQkweDhjMDAwNTAwLCAweDA0MDIwMDA0LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAotCTB4MDQwMjA3Y2MsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZjMsIDB4MDQwMjAwMGYsCi0JMHgwNDAxZjgzZSwgMHgwNDAwMDdjNywgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwKLQkweDA0MDAwN2M0LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAyLAotCTB4NTljYzBjMDQsIDB4NDgwNjYyMDIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwODgsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwKLQkweDA0MDAwN2I4LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDA0LAotCTB4NTljYzBjMDQsIDB4NDgwNjYyMDIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMDEsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg1OWNjMDAwNCwgMHg0ODAzYzg1NywKKwkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDQ4MDI2MDFlLCAweDA0MDFmN2VmLAorCTB4NTljYzAwMDEsIDB4NDgwM2M4NTcsIDB4MDQwMWZlZmYsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDZiYSwgMHgwNDAyMDdkNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDNmYywKKwkweDAyMDIwODAwLCAweDAwMTAwNmJhLCAweDA0MDIwN2NmLCAweDU5Y2MwMDA1LAorCTB4OGMwMDA1MDAsIDB4MDQwMjAwMDYsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDZiYSwgMHgwNDAyMDdjNywgMHgwMjAxZjgwMCwKKwkweDAwMTA0ODQyLCAweDA0MDIwMDEzLCAweDA0MDFmODQwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2YmEsIDB4MDQwMDA3YzAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDZiYSwgMHgwNDAwMDdiYiwgMHg0OTM2NjAwOSwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAyLCAweDU5Y2MwODA0LCAweDQ4MDY2MDFjLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwODgsIDB4MDIwMWYwMDAsIDB4MDAwMjA4ZDgsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwNDAwMDdhZiwgMHg0OTM2NjAwOSwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDA0LCAweDU5Y2MwYzA0LCAweDQ4MDY2MjAyLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAwMjA4ZDgsCiAJMHg1OWNjMDgwMiwgMHg4YzA0MGQyZSwgMHgwNDAwMDAwYiwgMHgwNDAxZjgxZiwKLQkweDA0MDAwMDA5LCAweDA0MDFmOTYwLCAweDA0MDIwMDA3LCAweDU5Y2MwYTA0LAorCTB4MDQwMDAwMDksIDB4MDQwMWY5NjEsIDB4MDQwMjAwMDcsIDB4NTljYzBhMDQsCiAJMHg0ODA2NjIwMiwgMHg0MjAyNzAwMCwgMHgwMDAwMDA4OSwgMHgwMjAxZjAwMCwKLQkweDAwMDIwN2ExLCAweDQ5MzNjODU3LCAweDFjMDFmMDAwLCAweDU5Y2MwMDA0LAorCTB4MDAwMjA4ZDgsIDB4NDkzM2M4NTcsIDB4MWMwMWYwMDAsIDB4NTljYzAwMDQsCiAJMHg0ODAzYzg1NywgMHg1OWNjMDgwMiwgMHg4YzA0MGQyZSwgMHgwNDAwMDAwYiwKLQkweDA0MDFmODBlLCAweDA0MDAwMDA5LCAweDA0MDFmOTRmLCAweDA0MDIwMDA3LAorCTB4MDQwMWY4MGUsIDB4MDQwMDAwMDksIDB4MDQwMWY5NTAsIDB4MDQwMjAwMDcsCiAJMHg1OWNjMGEwNCwgMHg0ODA2NjIwMiwgMHg0MjAyNzAwMCwgMHgwMDAwMDA4YSwKLQkweDAyMDFmMDAwLCAweDAwMDIwN2ExLCAweDQ5MzNjODU3LCAweDFjMDFmMDAwLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4ZDgsIDB4NDkzM2M4NTcsIDB4MWMwMWYwMDAsCiAJMHg1OWNjMGEwNCwgMHgwNDAxZjAwMiwgMHg1OWNjMGMwNCwgMHg1OWE4MDAwZSwKIAkweDU5YTgxMDY3LCAweDgwMDgwNDAwLCAweDgwMDQwNDgwLCAweDA0MDIxMDA4LAogCTB4NDAwNDAwMDAsIDB4ODAwMDAwYzQsIDB4ODAwNDA4Y2EsIDB4ODAwNDBjMDAsCi0JMHg4MjA2NjQwMCwgMHgwMDEwZDFjMCwgMHgxYzAxZjAwMCwgMHg4MDAwMDU4MCwKKwkweDgyMDY2NDAwLCAweDAwMTBjZmMwLCAweDFjMDFmMDAwLCAweDgwMDAwNTgwLAogCTB4MDQwMWY3ZmUsIDB4NTljYzA4MDIsIDB4OGMwNDBkMmUsIDB4MDQwMjAwMTAsCiAJMHgwNDAxZmZlYywgMHgwNDAwMDAwZSwgMHg1OWNjMDAwMSwgMHg4MjAwMDUwMCwKIAkweDAwZmZmZmZmLCAweDU5MzI2ODA5LCAweDU5MzQwODAyLCAweDgyMDQwZDAwLAogCTB4MDBmZmZmZmYsIDB4ODAwNDA1ODAsIDB4MDQwMjAwMDUsIDB4NDIwMjcwMDAsCi0JMHgwMDAwMDA1MSwgMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwgMHg1OWNjMDAwNCwKKwkweDAwMDAwMDUxLCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LCAweDU5Y2MwMDA0LAogCTB4NDgwM2M4NTcsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NDIwMDMwMDAsCiAJMHgwMDAwMDEwNSwgMHgwNDAxZjAwMSwgMHg0ODAzYzg1NiwgMHg0YzNjMDAwMCwKLQkweDQxY2M3ODAwLCAweDA0MDFmODAzLCAweDVjMDA3ODAwLCAweDFjMDFmMDAwLAotCTB4NDgwM2M4NTYsIDB4NGM1ODAwMDAsIDB4NTgzYzA0MDAsIDB4ODIwMDA1MDAsCi0JMHgwMDAwZjAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwYzAwMCwgMHgwNDAwMDAyNCwKLQkweDAyMDFmODAwLCAweDAwMDIwNzVhLCAweDA0MDAwMDIxLCAweDRjMTgwMDAwLAotCTB4NTgzYzAwMDEsIDB4MDQwMWZlODksIDB4MDQwMjAwMWYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDVhNiwgMHgwNDAyMDAxYywgMHg0OTM2NjAwOSwgMHgwMjAxZjgwMCwKLQkweDAwMTAwN2U0LCAweDA0MDAwMDE4LCAweDQ5MmU2MDE3LCAweDQ5N2E1ODAwLAotCTB4NDk3YTVhMDQsIDB4NDgxMjVjMDQsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAwNywgMHg0MDNjYTAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYjE3LCAweDVjMDAzMDAwLCAweDQ4MWE2NDFhLCAweDRhMDI2NDAzLAotCTB4MDAwMDAwM2UsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNjcyYiwgMHg1YzAwYjAwMCwKLQkweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDVjMDAzMDAwLAotCTB4MDQwMWY3ZmIsIDB4NDgwM2M4NTYsIDB4NTljYzA0MDAsIDB4ODIwMDBkMDAsCi0JMHgwMDAwZmYwMCwgMHg4MjA0MDUwMCwgMHgwMDAwZjAwMCwgMHg4NDA0MDljMCwKLQkweDgyMDAwNTgwLCAweDAwMDAyMDAwLCAweDA0MDIwMDQ5LCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMjIsIDB4MDQwMjAwM2EsIDB4NTljNDAwYTQsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAwZiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwNywgMHgwNDAwMTAwNCwKLQkweDgyMDAwNDgwLCAweDAwMDAwMDBjLCAweDA0MDAxMDNmLCAweDU5Y2MwMDA2LAotCTB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODIwMDBkODAsIDB4MDQwMDAwMDAsCi0JMHgwNDAwMDAzOSwgMHg4MjAwMGQ4MCwgMHg2MDAwMDAwMCwgMHgwNDAwMDAzNiwKLQkweDgyMDAwZDgwLCAweDU0MDAwMDAwLCAweDA0MDAwMDMzLCAweDgyMDAwZDgwLAotCTB4MDMwMDAwMDAsIDB4MDQwMjAwMTUsIDB4NTlhODA4MjYsIDB4OGMwNDBkMDIsCi0JMHgwNDAyMDAyZCwgMHg4YzA0MGQwOCwgMHgwNDAyMDAyYiwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OGVjLCAweDA0MDAwMDJiLCAweDU5YTgwMDFkLCAweDgwMDAwMGQwLAotCTB4NTlhODA4MTAsIDB4ODIwNDBkMDAsIDB4MDAwMDAwZmYsIDB4ODAwNDA1NDAsCi0JMHg1OWNjMDgwMCwgMHg4MjA0MGQwMCwgMHgwMGZmZmZmZiwgMHg4MDA0MDU4MCwKLQkweDA0MDIwMDFiLCAweDA0MDFmMDFjLCAweDU5YzQwODAyLCAweDhjMDQwZDBjLAotCTB4MDQwMjAwMTcsIDB4ODIwMDBkODAsIDB4NTIwMDAwMDAsIDB4MDQwMDA3ZWMsCi0JMHg4MjAwMGQ4MCwgMHgwNTAwMDAwMCwgMHgwNDAwMDdlOSwgMHg4MjAwMGQ4MCwKLQkweDUwMDAwMDAwLCAweDA0MDAwN2U2LCAweDA0MDFmMDBkLCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMjMsIDB4MDQwMjAwMGEsIDB4MDQwMWZmNTgsIDB4MDQwMDAwMDgsCi0JMHg1OTMwMGMwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDAwNiwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDUxLCAweDA0MDAwMDAzLCAweDgwMDAwNTgwLAotCTB4MDQwMWYwMDMsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg0MWNjNzgwMCwgMHg0MDE0MjAwMCwgMHgwNDAxZjgwMywgMHg1YzAwNzgwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjNTgwMDAwLCAweDU4M2MwNDAwLAorCTB4ODIwMDA1MDAsIDB4MDAwMGYwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMGMwMDAsCisJMHgwNDAwMDAyNCwgMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwNDAwMDAyMSwKKwkweDRjMTgwMDAwLCAweDU4M2MwMDAxLCAweDA0MDFmZTZmLCAweDA0MDIwMDFmLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQzZmMsIDB4MDQwMjAwMWMsIDB4NDkzNjYwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwMDgyYSwgMHgwNDAwMDAxOCwgMHg0OTJlNjAxNywKKwkweDQ5N2E1ODAwLCAweDQ5N2E1YTA0LCAweDQ4MTI1YzA0LCAweDgzMmNhYzAwLAorCTB4MDAwMDAwMDUsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDcsIDB4NDAzY2EwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTkzZSwgMHg1YzAwMzAwMCwgMHg0ODFhNjQxYSwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDNlLCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDY0NzAsCisJMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDhiNCwKKwkweDVjMDAzMDAwLCAweDA0MDFmN2ZiLCAweDQ4MDNjODU2LCAweDU5Y2MwNDAwLAorCTB4ODIwMDBkMDAsIDB4MDAwMGZmMDAsIDB4ODIwNDA1MDAsIDB4MDAwMGYwMDAsCisJMHg4NDA0MDljMCwgMHg4MjAwMDU4MCwgMHgwMDAwMjAwMCwgMHgwNDAyMDA0OSwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDIyLCAweDA0MDIwMDNhLCAweDU5YzQwMGE0LAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMGYsIDB4ODIwMDBjODAsIDB4MDAwMDAwMDcsCisJMHgwNDAwMTAwNCwgMHg4MjAwMDQ4MCwgMHgwMDAwMDAwYywgMHgwNDAwMTAzZiwKIAkweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDgyMDAwZDgwLAotCTB4MDMwMDAwMDAsIDB4MDQwMDAwMDQsIDB4ODIwMDBkODAsIDB4NTIwMDAwMDAsCi0JMHgwNDAyMDdmMywgMHg1OWE4MDAyNiwgMHg4MjAwMDUwMCwgMHgwMDAwMDAwOSwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDA4LCAweDA0MDAwN2VmLCAweDA0MDFmN2VjLAotCTB4NDgwM2M4NTYsIDB4NGM1YzAwMDAsIDB4NGM1ODAwMDAsIDB4NTlhODAwMTYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDA0YywgMHgwNDAyMDAxZiwgMHg1OWNjYjgwNywKLQkweDljNWNiOWMwLCAweDgyNWNiZDAwLCAweDAwMDAwMDA3LCAweDhjNWNiZDAwLAorCTB4MDQwMDAwMDAsIDB4MDQwMDAwMzksIDB4ODIwMDBkODAsIDB4NjAwMDAwMDAsCisJMHgwNDAwMDAzNiwgMHg4MjAwMGQ4MCwgMHg1NDAwMDAwMCwgMHgwNDAwMDAzMywKKwkweDgyMDAwZDgwLCAweDAzMDAwMDAwLCAweDA0MDIwMDE1LCAweDU5YTgwODI2LAorCTB4OGMwNDBkMDIsIDB4MDQwMjAwMmQsIDB4OGMwNDBkMDgsIDB4MDQwMjAwMmIsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDczYiwgMHgwNDAwMDAyYiwgMHg1OWE4MDAxZCwKKwkweDgwMDAwMGQwLCAweDU5YTgwODEwLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLAorCTB4ODAwNDA1NDAsIDB4NTljYzA4MDAsIDB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDAxYiwgMHgwNDAxZjAxYywgMHg1OWM0MDgwMiwKKwkweDhjMDQwZDBjLCAweDA0MDIwMDE3LCAweDgyMDAwZDgwLCAweDUyMDAwMDAwLAorCTB4MDQwMDA3ZWMsIDB4ODIwMDBkODAsIDB4MDUwMDAwMDAsIDB4MDQwMDA3ZTksCisJMHg4MjAwMGQ4MCwgMHg1MDAwMDAwMCwgMHgwNDAwMDdlNiwgMHgwNDAxZjAwZCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDIzLCAweDA0MDIwMDBhLCAweDA0MDFmZjU3LAorCTB4MDQwMDAwMDgsIDB4NTkzMDBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDIsCisJMHgwNDAwMDAwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDA1MSwgMHgwNDAwMDAwMywKKwkweDgwMDAwNTgwLCAweDA0MDFmMDAzLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4MWMwMWYwMDAsIDB4NTljYzAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsCisJMHg4MjAwMGQ4MCwgMHgwMzAwMDAwMCwgMHgwNDAwMDAwNCwgMHg4MjAwMGQ4MCwKKwkweDUyMDAwMDAwLCAweDA0MDIwN2YzLCAweDU5YTgwMDI2LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDksIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDA3ZWYsCisJMHgwNDAxZjdlYywgMHg0ODAzYzg1NiwgMHg0YzVjMDAwMCwgMHg0YzU4MDAwMCwKKwkweDU5YTgwMDE2LCAweDgyMDAwNTgwLCAweDAwMDAwMDRjLCAweDA0MDIwMDFmLAorCTB4NTljY2I4MDcsIDB4OWM1Y2I5YzAsIDB4ODI1Y2JkMDAsIDB4MDAwMDAwMDcsCisJMHg4YzVjYmQwMCwgMHgwNDAwMDAwYSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKKwkweDgzYTgxYzAwLCAweDAwMDAwMDAyLCAweDgzY2MxNDAwLCAweDAwMDAwMDBkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDgyZmYsIDB4MDQwMjAwMTAsIDB4OGM1Y2JkMDIsCiAJMHgwNDAwMDAwYSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg4M2E4MWMwMCwKLQkweDAwMDAwMDAyLCAweDgzY2MxNDAwLCAweDAwMDAwMDBkLCAweDAyMDFmODAwLAotCTB4MDAxMDg1NWEsIDB4MDQwMjAwMTAsIDB4OGM1Y2JkMDIsIDB4MDQwMDAwMGEsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg4M2E4MWMwMCwgMHgwMDAwMDAwMCwKLQkweDgzY2MxNDAwLCAweDAwMDAwMDBmLCAweDAyMDFmODAwLCAweDAwMTA4NTVhLAotCTB4MDQwMjAwMDUsIDB4OGM1Y2JkMDQsIDB4MDQwMDAwMDMsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHg1YzAwYjAwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwKLQkweDQ4MDNjODU2LCAweDRjNWMwMDAwLCAweDRjNTgwMDAwLCAweDU5YTgwMDE2LAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwNGMsIDB4MDQwMjAwMWYsIDB4NTljY2I4MDcsCi0JMHg5YzVjYjljMCwgMHg4MjVjYmQwMCwgMHgwMDAwMDAwNywgMHg4YzVjYmQwMCwKKwkweDAwMDAwMDAwLCAweDgzY2MxNDAwLCAweDAwMDAwMDBmLCAweDAyMDFmODAwLAorCTB4MDAxMDgyZmYsIDB4MDQwMjAwMDUsIDB4OGM1Y2JkMDQsIDB4MDQwMDAwMDMsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAwYjAwMCwgMHg1YzAwYjgwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRjNWMwMDAwLCAweDRjNTgwMDAwLAorCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNGMsIDB4MDQwMjAwMWYsCisJMHg1OWNjYjgwNywgMHg5YzVjYjljMCwgMHg4MjVjYmQwMCwgMHgwMDAwMDAwNywKKwkweDhjNWNiZDAwLCAweDA0MDAwMDBhLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4ODNhODFjMDAsIDB4MDAwMDAwMDIsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMDksCisJMHgwMjAxZjgwMCwgMHgwMDEwODJmZiwgMHgwNDAyMDAxMCwgMHg4YzVjYmQwMiwKIAkweDA0MDAwMDBhLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDgzYTgxYzAwLAotCTB4MDAwMDAwMDIsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMDksIDB4MDIwMWY4MDAsCi0JMHgwMDEwODU1YSwgMHgwNDAyMDAxMCwgMHg4YzVjYmQwMiwgMHgwNDAwMDAwYSwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDgzYTgxYzAwLCAweDAwMDAwMDAwLAotCTB4ODNjYzE0MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsCi0JMHgwNDAyMDAwNSwgMHg4YzVjYmQwNCwgMHgwNDAwMDAwMywgMHg4MjAwMDU0MCwKLQkweDAwMDAwMDAxLCAweDVjMDBiMDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLAotCTB4NDgwM2M4NTcsIDB4NGM1ODAwMDAsIDB4NDAwMDMwMDAsIDB4NDIwMDIwMDAsCi0JMHgwMDAwMDdmMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAxMCwgMHg4M2FjNzQwMCwKLQkweDAwMDAwN2YwLCAweDUwMzgwMDAwLCAweDgwMDI2ZDQwLCAweDA0MDAwMDA2LAotCTB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4ODAxODA1ODAsCi0JMHgwNDAwMDAxMCwgMHg4MDEwMjAwMCwgMHg4MDM4NzAwMCwgMHg4MDU4YjA0MCwKLQkweDA0MDIwN2Y1LCAweDgyMTAwNDgwLCAweDAwMDAwODAwLCAweDQyMDAyMDAwLAotCTB4MDAwMDAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDA3ZjAsIDB4NDFhYzcwMDAsCi0JMHgwNDAyMTdlZCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwKLQkweDQwMTI4ODAwLCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDI2LAotCTB4OGMwMDA1MGUsIDB4MDQwMDAwMDQsIDB4OGMwMDA1MDIsIDB4MDQwMDAwMDMsCi0JMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDA0MDFmN2ZkLCAweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDAyLAotCTB4MDQwMDAwMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMDMsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg1OWM4MDAwMCwKLQkweDg0MDAwNTU4LCAweDg0MDAwNTEyLCAweDQ4MDM5MDAwLCAweDFjMDFmMDAwLAotCTB4NGEwMzI4MWEsIDB4MDAwMDAzZTgsIDB4NGEwMzI4MDIsIDB4MDAxMGQxYzAsCi0JMHg0YTAzMjgwMCwgMHgwMDAwMDAwMCwgMHg0YTAzMjgwOCwgMHgwMDEwNzA0OSwKLQkweDQyMDAwMDAwLCAweDAwMDAwMDA1LCAweDgzOTQ3YzAwLCAweDAwMDAwMDA5LAotCTB4NDk3ODc4MDEsIDB4NGEwMDc4MDIsIDB4MDAxMDZmZmYsIDB4ODIzYzdjMDAsCi0JMHgwMDAwMDAwMywgMHg4MDAwMDA0MCwgMHgwNDAyMDdmYSwgMHg0YTAzMjgxOSwKLQkweGZmZmYwMDAwLCAweDQyMDFkMDAwLCAweDAwMDAwMDY0LCAweDA0MDFmOTZlLAotCTB4NDIwMWQwMDAsIDB4MDAwMTg2YTAsIDB4MDQwMWYxODQsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMywgMHgwMDAwMDAwNiwgMHgwMDAwMDAwOSwgMHgwMDAwMDAwYywKLQkweDRkMzAwMDAwLCAweDRkMmMwMDAwLCAweDRkMzQwMDAwLCAweDRkNDAwMDAwLAotCTB4NGNmYzAwMDAsIDB4NGQzODAwMDAsIDB4NGQzYzAwMDAsIDB4NGQ0NDAwMDAsCi0JMHg0ZDRjMDAwMCwgMHg0ZDQ4MDAwMCwgMHg0YzVjMDAwMCwgMHg0YzYwMDAwMCwKLQkweDRjNjQwMDAwLCAweDRjYzgwMDAwLCAweDRjY2MwMDAwLCAweDAyMDFmODAwLAotCTB4MDAwMjA1N2IsIDB4NWMwMTk4MDAsIDB4NWMwMTkwMDAsIDB4NWMwMGM4MDAsCi0JMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHg1YzAyOTAwMCwgMHg1YzAyOTgwMCwKLQkweDVjMDI4ODAwLCAweDVjMDI3ODAwLCAweDVjMDI3MDAwLCAweDVjMDFmODAwLAotCTB4NWMwMjgwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsCi0JMHgxYzAxZjAwMCwgMHg1OTk0MDAwNCwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwYSwKLQkweDU5OTQwMDI1LCAweDgwMDQwNDAwLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LAotCTB4NDgwMzI4MDQsIDB4NDgwYjI4MDUsIDB4NGEwMzI4MDMsIDB4MDAwMDAwMGEsCi0JMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg1OTk0MDAxZiwgMHg4MDAwMDU0MCwKKwkweDAwMDAwMDAwLCAweDgzY2MxNDAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLAorCTB4MDAxMDgyZmYsIDB4MDQwMjAwMDUsIDB4OGM1Y2JkMDQsIDB4MDQwMDAwMDMsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAwYjAwMCwgMHg1YzAwYjgwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU3LCAweDRjNTgwMDAwLCAweDQwMDAzMDAwLAorCTB4NDIwMDIwMDAsIDB4MDAwMDA3ZjAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTAsCisJMHg4M2FjNzQwMCwgMHgwMDAwMDdmMCwgMHg1MDM4MDAwMCwgMHg4MDAyNmQ0MCwKKwkweDA0MDAwMDA2LCAweDU5MzQwMDAyLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAorCTB4ODAxODA1ODAsIDB4MDQwMDAwMTAsIDB4ODAxMDIwMDAsIDB4ODAzODcwMDAsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmNSwgMHg4MjEwMDQ4MCwgMHgwMDAwMDgwMCwKKwkweDQyMDAyMDAwLCAweDAwMDAwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwN2YwLAorCTB4NDFhYzcwMDAsIDB4MDQwMjE3ZWQsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjAwMiwgMHg0MDEyODgwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwKKwkweDU5YTgwMDI2LCAweDhjMDAwNTBlLCAweDA0MDAwMDA0LCAweDhjMDAwNTAyLAorCTB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwgMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDAwMDA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LAorCTB4MDQwMDAwMDMsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg1OWM4MDAwMCwgMHg4NDAwMDU1OCwgMHg4NDAwMDUxMiwgMHg0ODAzOTAwMCwKKwkweDFjMDFmMDAwLCAweDRhMDMyODFhLCAweDAwMDAwM2U4LCAweDRhMDMyODAyLAorCTB4MDAxMGNmYzAsIDB4NGEwMzI4MDAsIDB4MDAwMDAwMDAsIDB4NGEwMzI4MDgsCisJMHgwMDEwNmQ5ZiwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwNSwgMHg4Mzk0N2MwMCwKKwkweDAwMDAwMDA5LCAweDQ5Nzg3ODAxLCAweDRhMDA3ODAyLCAweDAwMTA2ZDU0LAorCTB4ODIzYzdjMDAsIDB4MDAwMDAwMDMsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmEsCisJMHg0YTAzMjgxOSwgMHhmZmZmMDAwMCwgMHg0MjAxZDAwMCwgMHgwMDAwMDA2NCwKKwkweDA0MDFmOTdjLCAweDQyMDFkMDAwLCAweDAwMDE4NmEwLCAweDA0MDFmMThiLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDYsIDB4MDAwMDAwMDksCisJMHgwMDAwMDAwYywgMHg0ZDMwMDAwMCwgMHg0ZDJjMDAwMCwgMHg0ZDM0MDAwMCwKKwkweDRkNDAwMDAwLCAweDRjZmMwMDAwLCAweDRkMzgwMDAwLCAweDRkM2MwMDAwLAorCTB4NGQ0NDAwMDAsIDB4NGQ0YzAwMDAsIDB4NGQ0ODAwMDAsIDB4NGM1YzAwMDAsCisJMHg0YzYwMDAwMCwgMHg0YzY0MDAwMCwgMHg0Y2M4MDAwMCwgMHg0Y2NjMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwNmFmLCAweDVjMDE5ODAwLCAweDVjMDE5MDAwLAorCTB4NWMwMGM4MDAsIDB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsIDB4NWMwMjkwMDAsCisJMHg1YzAyOTgwMCwgMHg1YzAyODgwMCwgMHg1YzAyNzgwMCwgMHg1YzAyNzAwMCwKKwkweDVjMDFmODAwLCAweDVjMDI4MDAwLCAweDVjMDI2ODAwLCAweDVjMDI1ODAwLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NTk5NDAwMDQsIDB4ODAwMDA1NDAsCiAJMHgwNDAyMDAwYSwgMHg1OTk0MDAyNSwgMHg4MDA0MDQwMCwgMHgwMjAwMTgwMCwKLQkweDAwMTAwNWQ4LCAweDQ4MDMyODFmLCAweDQ4MGIyODIwLCAweDRhMDMyODFlLAotCTB4MDAwMDAwMDEsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NTk5NDAwMjIsCisJMHgwMDEwMDYxNSwgMHg0ODAzMjgwNCwgMHg0ODBiMjgwNSwgMHg0YTAzMjgwMywKKwkweDAwMDAwMDBhLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDU5OTQwMDFmLAogCTB4ODAwMDA1NDAsIDB4MDQwMjAwMGEsIDB4NTk5NDAwMjUsIDB4ODAwNDA0MDAsCi0JMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzMjgyMiwgMHg0ODBiMjgyMywKLQkweDRhMDMyODIxLCAweDAwMDAwMDBhLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLAotCTB4NGMwMDAwMDAsIDB4NTk5NDAwMDUsIDB4NDgwM2M4NTcsIDB4NDgwYmM4NTcsCi0JMHg4MDA4MDU4MCwgMHgwNDAyMDAwMywgMHg0OTdiMjgwNCwgMHg0OTdiMjgwNSwKLQkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDRjMDAwMDAwLCAweDU5OTQwMDIwLAotCTB4NDgwM2M4NTcsIDB4NDgwYmM4NTcsIDB4ODAwODA1ODAsIDB4MDQwMjAwMDMsCi0JMHg0OTdiMjgxZiwgMHg0OTdiMjgyMCwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwKLQkweDRjMDAwMDAwLCAweDU5OTQwMDIzLCAweDQ4MDNjODU3LCAweDQ4MGJjODU3LAotCTB4ODAwODA1ODAsIDB4MDQwMjAwMDMsIDB4NDk3YjI4MjIsIDB4NDk3YjI4MjMsCi0JMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0OTM3Yzg1NywgMHg0OGViYzg1NywKLQkweDU5MzQwMjAzLCAweDgwZTgwNDgwLCAweDA0MDAxMDAyLCAweDQ4ZWE2YTAzLAotCTB4MWMwMWYwMDAsIDB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsIDB4NGQ0NDAwMDAsCi0JMHg0MjAwNzgwMCwgMHgwMDAwMDAxMCwgMHg1OTk2ODgwMSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMjQ1LCAweDA0MDIwMDEyLCAweDU5MzQxYTAzLCAweDgwMGMxODQwLAotCTB4MDQwMDEwMGYsIDB4NTk5NDAwMjcsIDB4ODAwYzA0ODAsIDB4MDQwMDAwMDMsCi0JMHg0ODAyNmEwMywgMHgwNDAyMTAwYSwgMHg1OTM0MDAwZiwgMHg0OTdhNmEwMywKLQkweDgwMDAwNTQwLCAweDA0MDAwMDA2LCAweDRjM2MwMDAwLCAweDU5MzQxNDBiLAotCTB4MDIwMWY4MDAsIDB4MDAwMjAyNTMsIDB4NWMwMDc4MDAsIDB4ODE0Njg4MDAsCi0JMHg4MzQ0MDQ4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMTAwNywgMHg4MDNjNzg0MCwKLQkweDA0MDIwN2U3LCAweDQ5NDcyODAxLCAweDVjMDI4ODAwLCAweDVjMDNlMDAwLAotCTB4MWMwMWYwMDAsIDB4NGEwMzI4MDAsIDB4MDAwMDAwMDIsIDB4NDk3YjI4MDEsCi0JMHgwNDAxZjdmYSwgMHg0MjAwNzgwMCwgMHgwMDAwMDAxMCwgMHg1OTk2NjAwMiwKLQkweDU5MzAwMjA1LCAweDgwMDAwZDQwLCAweDA0MDAwMDA2LCAweDU5OTQwMDI3LAotCTB4ODAwNDA0ODAsIDB4NDgwMjYyMDUsIDB4MDQwMDEwMmQsIDB4MDQwMDAwMmMsCi0JMHg1OTMwMDIwNiwgMHg4MDAwMGQ0MCwgMHgwNDAwMDAxNCwgMHg1OWI4MDBlNCwKLQkweDhjMDAwNTI0LCAweDA0MDIwMDExLCAweDRhMDM3MGU0LCAweDAwMDMwMDAwLAotCTB4NDAwMDAwMDAsIDB4NTliODAwZTQsIDB4OGMwMDA1MjQsIDB4MDQwMDAwMDQsCi0JMHg0YTAzNzBlNCwgMHgwMDAyMDAwMCwgMHgwNDAxZjAwOCwgMHg1OTk0MDAyNywKLQkweDgwMDQwNDgwLCAweDQ4MDI2MjA2LCAweDRhMDM3MGU0LCAweDAwMDIwMDAwLAotCTB4MDQwMDEwMWMsIDB4MDQwMDAwMWIsIDB4ODMzMjY0MDAsIDB4MDAwMDAwMjQsCi0JMHg0OTMzMjgwMiwgMHg0MTU0MDAwMCwgMHg4MTMwMDQ4MCwgMHgwNDAyMTAwNSwKLQkweDgwM2M3ODQwLCAweDA0MDIwN2RiLCAweDVjMDNlMDAwLCAweDFjMDFmMDAwLAotCTB4NTk5NDAwMjYsIDB4NDgwMzI4MjcsIDB4NGEwMzI4MDIsIDB4MDAxMGQxYzAsCi0JMHg0OTdiMjgyNiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwZiwgMHg0YTAzMjgwMCwKLQkweDAwMDAwMDAxLCAweDVjMDNlMDAwLCAweDFjMDFmMDAwLCAweDRjM2MwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDkxZGIsIDB4NWMwMDc4MDAsIDB4MDQwMWY3ZDEsCi0JMHg0YzNjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOGQ1ZCwgMHg1YzAwNzgwMCwKLQkweDA0MDFmN2UyLCAweDRhMDMyODAwLCAweDAwMDAwMDAwLCAweDVjMDNlMDAwLAotCTB4MWMwMWYwMDAsIDB4NTlhODA4NmIsIDB4OGMwNDBkMzAsIDB4MDQwMjAwMjksCi0JMHg4YzA0MGQzMiwgMHgwNDAwMDAwZiwgMHg1OWE4MDA2OSwgMHg4MTY0MDQ4MCwKLQkweDA0MDAxMDE5LCAweDU5YTgwMDBiLCAweDgxNTAwNTgwLCAweDA0MDAwMDA1LAotCTB4NTlhODAwNmEsIDB4NTlhODEwNjYsIDB4ODAwODA1ODAsIDB4MDQwMjAwMTIsCi0JMHg5MDA0MTFjMCwgMHg4MjA4MTUwMCwgMHgwMDAwNzAwMCwgMHgwNDAxZjAxMiwKLQkweDgyMDQwNTAwLCAweDAwMDAwMDFmLCAweDA0MDAwMDE2LCAweDgwMDQwODQwLAotCTB4ODIwNDA1MDAsIDB4MDAwMDAwMWYsIDB4MDQwMDAwMDMsIDB4NDgwNzUwNmIsCi0JMHgwNDAxZjAxMCwgMHg5MDA0MDFjMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDAxZiwKLQkweDgwMDQwZDQwLCAweDkwMDQwMWMwLCAweDgwMDQwNTgwLCAweDgyMDAxNTAwLAotCTB4MDAwMDcwMDAsIDB4ODIwNDA1MDAsIDB4ZmZmZjhmZmYsIDB4ODAwODA1NDAsCi0JMHg0ODAzNTA2YiwgMHg4MDA4MTExNCwgMHgwMjAxZjgwMCwgMHgwMDEwMDZlMiwKLQkweDFjMDFmMDAwLCAweDRhMDMyODA3LCAweDAwMDAwN2QwLCAweDRhMDMyODA2LAotCTB4MDAwMDAwMGEsIDB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDA3ZDAsCi0JMHg4MzE4MDQ4MCwgMHgwMDAwMDAwNSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwKLQkweDgzOTQ3YzAwLCAweDAwMDAwMDA5LCAweDgzMTgwNDAwLCAweDAwMTA1ZjQzLAotCTB4NTAwMDAwMDAsIDB4ODAzYzdjMDAsIDB4NDgwNDc4MDEsIDB4NGEwMDc4MDAsCi0JMHgwMDAwMDAwYSwgMHgxYzAxZjAwMCwgMHg4MzE4MDQ4MCwgMHgwMDAwMDAwNSwKLQkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDgzOTQ3YzAwLCAweDAwMDAwMDA5LAotCTB4ODMxODA0MDAsIDB4MDAxMDVmNDMsIDB4NTAwMDAwMDAsIDB4ODAzYzdjMDAsCi0JMHg0OTc4NzgwMSwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywgMHg0ODBiYzg1NywKLQkweDU5OTQwMDI1LCAweDgwMDQwNDAwLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LAotCTB4NDgwMzI4MDQsIDB4NDgwYjI4MDUsIDB4NGEwMzI4MDMsIDB4MDAwMDAwMGEsCi0JMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywgMHg0ODBiYzg1NywgMHg1OTk0MDAyNSwKLQkweDgwMDQwNDAwLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDQ4MDMyODFjLAotCTB4NDgwYjI4MWQsIDB4NGEwMzI4MWIsIDB4MDAwMDAwMGEsIDB4MWMwMWYwMDAsCi0JMHg0YzAwMDAwMCwgMHg1OTk0MDAxZCwgMHg0ODAzYzg1NywgMHg0ODBiYzg1NywKLQkweDgwMDgwNTgwLCAweDA0MDIwMDAzLCAweDQ4MDMyODFjLCAweDQ4MDMyODFkLAotCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4ODBlOWQxYzAsIDB4MDQwMDAwMGUsCi0JMHgwNDAxZjgzNiwgMHgwNDAyNTAwMCwgMHg0MjAzZTAwMCwgMHg4MDAwMDAwMCwKKwkweDAyMDAxODAwLCAweDAwMTAwNjE1LCAweDQ4MDMyODFmLCAweDQ4MGIyODIwLAorCTB4NGEwMzI4MWUsIDB4MDAwMDAwMDEsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsCisJMHg1OTk0MDAyMiwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwYSwgMHg1OTk0MDAyNSwKKwkweDgwMDQwNDAwLCAweDAyMDAxODAwLCAweDAwMTAwNjE1LCAweDQ4MDMyODIyLAorCTB4NDgwYjI4MjMsIDB4NGEwMzI4MjEsIDB4MDAwMDAwMGEsIDB4ODAwMDA1ODAsCisJMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg1OTk0MDAwNSwgMHg0ODAzYzg1NywKKwkweDQ4MGJjODU3LCAweDgwMDgwNTgwLCAweDA0MDIwMDAzLCAweDQ5N2IyODA0LAorCTB4NDk3YjI4MDUsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsCisJMHg1OTk0MDAyMCwgMHg0ODAzYzg1NywgMHg0ODBiYzg1NywgMHg4MDA4MDU4MCwKKwkweDA0MDIwMDAzLCAweDQ5N2IyODFmLCAweDQ5N2IyODIwLCAweDVjMDAwMDAwLAorCTB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsIDB4NTk5NDAwMjMsIDB4NDgwM2M4NTcsCisJMHg0ODBiYzg1NywgMHg4MDA4MDU4MCwgMHgwNDAyMDAwMywgMHg0OTdiMjgyMiwKKwkweDQ5N2IyODIzLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ5MzdjODU3LAorCTB4NDhlYmM4NTcsIDB4NTkzNDAyMDMsIDB4ODBlODA0ODAsIDB4MDQwMDEwMDIsCisJMHg0OGVhNmEwMywgMHgxYzAxZjAwMCwgMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwKKwkweDRkNDQwMDAwLCAweDQyMDA3ODAwLCAweDAwMDAwMDEwLCAweDU5OTY4ODAxLAorCTB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDQwMjAwMTIsIDB4NTkzNDFhMDMsCisJMHg4MDBjMTg0MCwgMHgwNDAwMTAwZiwgMHg1OTk0MDAyNywgMHg4MDBjMDQ4MCwKKwkweDA0MDAwMDAzLCAweDQ4MDI2YTAzLCAweDA0MDIxMDBhLCAweDU5MzQwMDBmLAorCTB4NDk3YTZhMDMsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDYsIDB4NGMzYzAwMDAsCisJMHg1OTM0MTQwYiwgMHgwMjAxZjgwMCwgMHgwMDAyMDI3NSwgMHg1YzAwNzgwMCwKKwkweDgxNDY4ODAwLCAweDgzNDQwNDgwLCAweDAwMDAwODAwLCAweDA0MDIxMDA3LAorCTB4ODAzYzc4NDAsIDB4MDQwMjA3ZTcsIDB4NDk0NzI4MDEsIDB4NWMwMjg4MDAsCisJMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwgMHg0YTAzMjgwMCwgMHgwMDAwMDAwMiwKKwkweDQ5N2IyODAxLCAweDA0MDFmN2ZhLCAweDQyMDA3ODAwLCAweDAwMDAwMDEwLAorCTB4NTk5NjYwMDIsIDB4NTkzMDAyMDUsIDB4ODAwMDBkNDAsIDB4MDQwMDAwMDYsCisJMHg1OTk0MDAyNywgMHg4MDA0MDQ4MCwgMHg0ODAyNjIwNSwgMHgwNDAwMTAyZCwKKwkweDA0MDAwMDJjLCAweDU5MzAwMjA2LCAweDgwMDAwZDQwLCAweDA0MDAwMDE0LAorCTB4NTliODAwZTQsIDB4OGMwMDA1MjQsIDB4MDQwMjAwMTEsIDB4NGEwMzcwZTQsCisJMHgwMDAzMDAwMCwgMHg0MDAwMDAwMCwgMHg1OWI4MDBlNCwgMHg4YzAwMDUyNCwKKwkweDA0MDAwMDA0LCAweDRhMDM3MGU0LCAweDAwMDIwMDAwLCAweDA0MDFmMDA4LAorCTB4NTk5NDAwMjcsIDB4ODAwNDA0ODAsIDB4NDgwMjYyMDYsIDB4NGEwMzcwZTQsCisJMHgwMDAyMDAwMCwgMHgwNDAwMTAxYywgMHgwNDAwMDAxYiwgMHg4MzMyNjQwMCwKKwkweDAwMDAwMDI0LCAweDQ5MzMyODAyLCAweDQxNTQwMDAwLCAweDgxMzAwNDgwLAorCTB4MDQwMjEwMDUsIDB4ODAzYzc4NDAsIDB4MDQwMjA3ZGIsIDB4NWMwM2UwMDAsCisJMHgxYzAxZjAwMCwgMHg1OTk0MDAyNiwgMHg0ODAzMjgyNywgMHg0YTAzMjgwMiwKKwkweDAwMTBjZmMwLCAweDQ5N2IyODI2LCAweDgwMDAwNTQwLCAweDA0MDAwMDBmLAorCTB4NGEwMzI4MDAsIDB4MDAwMDAwMDEsIDB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsCisJMHg0YzNjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOGY5MiwgMHg1YzAwNzgwMCwKKwkweDA0MDFmN2QxLCAweDRjM2MwMDAwLCAweDAyMDFmODAwLCAweDAwMTA4YjExLAorCTB4NWMwMDc4MDAsIDB4MDQwMWY3ZTIsIDB4NGEwMzI4MDAsIDB4MDAwMDAwMDAsCisJMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwgMHg1OWE4MDg2YiwgMHg4YzA0MGQzMCwKKwkweDA0MDIwMDI5LCAweDhjMDQwZDMyLCAweDA0MDAwMDBmLCAweDU5YTgwMDY5LAorCTB4ODE2NDA0ODAsIDB4MDQwMDEwMTksIDB4NTlhODAwMGIsIDB4ODE1MDA1ODAsCisJMHgwNDAwMDAwNSwgMHg1OWE4MDA2YSwgMHg1OWE4MTA2NiwgMHg4MDA4MDU4MCwKKwkweDA0MDIwMDEyLCAweDkwMDQxMWMwLCAweDgyMDgxNTAwLCAweDAwMDA3MDAwLAorCTB4MDQwMWYwMTIsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMWYsIDB4MDQwMDAwMTYsCisJMHg4MDA0MDg0MCwgMHg4MjA0MDUwMCwgMHgwMDAwMDAxZiwgMHgwNDAwMDAwMywKKwkweDQ4MDc1MDZiLCAweDA0MDFmMDEwLCAweDkwMDQwMWMwLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMWYsIDB4ODAwNDBkNDAsIDB4OTAwNDAxYzAsIDB4ODAwNDA1ODAsCisJMHg4MjAwMTUwMCwgMHgwMDAwNzAwMCwgMHg4MjA0MDUwMCwgMHhmZmZmOGZmZiwKKwkweDgwMDgwNTQwLCAweDQ4MDM1MDZiLCAweDgwMDgxMTE0LCAweDAyMDFmODAwLAorCTB4MDAxMDA3MjgsIDB4MWMwMWYwMDAsIDB4NGEwMzI4MDcsIDB4MDAwMDA3ZDAsCisJMHg0YTAzMjgwNiwgMHgwMDAwMDAwYSwgMHgxYzAxZjAwMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwN2QwLCAweDgzMTgwNDgwLCAweDAwMDAwMDA1LCAweDAyMDIxODAwLAorCTB4MDAxMDA2MTUsIDB4ODM5NDdjMDAsIDB4MDAwMDAwMDksIDB4ODMxODA0MDAsCisJMHgwMDEwNWM3YywgMHg1MDAwMDAwMCwgMHg4MDNjN2MwMCwgMHg0ODA0NzgwMSwKKwkweDRhMDA3ODAwLCAweDAwMDAwMDBhLCAweDFjMDFmMDAwLCAweDgzMTgwNDgwLAorCTB4MDAwMDAwMDUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4ODM5NDdjMDAsCisJMHgwMDAwMDAwOSwgMHg4MzE4MDQwMCwgMHgwMDEwNWM3YywgMHg1MDAwMDAwMCwKKwkweDgwM2M3YzAwLCAweDQ5Nzg3ODAxLCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LAorCTB4NDgwYmM4NTcsIDB4NTk5NDAwMjUsIDB4ODAwNDA0MDAsIDB4MDIwMDE4MDAsCisJMHgwMDEwMDYxNSwgMHg0ODAzMjgwNCwgMHg0ODBiMjgwNSwgMHg0YTAzMjgwMywKKwkweDAwMDAwMDBhLCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LCAweDQ4MGJjODU3LAorCTB4NTk5NDAwMjUsIDB4ODAwNDA0MDAsIDB4MDIwMDE4MDAsIDB4MDAxMDA2MTUsCisJMHg0ODAzMjgxYywgMHg0ODBiMjgxZCwgMHg0YTAzMjgxYiwgMHgwMDAwMDAwYSwKKwkweDFjMDFmMDAwLCAweDRjMDAwMDAwLCAweDU5OTQwMDFkLCAweDQ4MDNjODU3LAorCTB4NDgwYmM4NTcsIDB4ODAwODA1ODAsIDB4MDQwMjAwMDMsIDB4NDgwMzI4MWMsCisJMHg0ODAzMjgxZCwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywKKwkweDQ4MGJjODU3LCAweDU5OTQwMDI1LCAweDgwMDQwNDAwLCAweDAyMDAxODAwLAorCTB4MDAxMDA2MTUsIDB4NDgwMzI4MjIsIDB4NDgwYjI4MjMsIDB4NGEwMzI4MjEsCisJMHgwMDAwMDAwYSwgMHgxYzAxZjAwMCwgMHg4MGU5ZDFjMCwgMHgwNDAwMDAwZSwKKwkweDA0MDFmODMyLCAweDA0MDI1MDAwLCAweDQyMDNlMDAwLCAweDgwMDAwMDAwLAogCTB4NDBlODEwMDAsIDB4NDE3ODA4MDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwNjQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjZhMCwgMHg1OTk0MDAyNCwgMHg4MDA4MDQwMCwKLQkweDQ4MDMyODI0LCAweDFjMDFmMDAwLCAweDQyMDAxMDAwLCAweDAwMTA1MDY1LAotCTB4MDQwMWZlZjAsIDB4NDIwMDEwMDAsIDB4MDAxMDUwNTgsIDB4MDQwMWZmZTEsCi0JMHg0MjAwMTAwMCwgMHgwMDEwNDE0OCwgMHgwNDAxZmVlYSwgMHg0MjAwMTAwMCwKLQkweDAwMTA0MWJjLCAweDA0MDFmZWU3LCAweDQyMDAxMDAwLCAweDAwMTA0MWYzLAotCTB4MDQwMWY2ZjgsIDB4NDIwM2UwMDAsIDB4NzAwMDAwMDAsIDB4NDIwM2UwMDAsCi0JMHhiMDMwMDAwMCwgMHg0MWZjMDAwMCwgMHg0MGViZjgwMCwgMHg4MGU4MDQ4MCwKLQkweDA0MDAxMDExLCAweDA0MDAwMDA0LCAweDgyMDAwNDgwLCAweDAwMDAwMDAzLAotCTB4MDQwMjEwMGQsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMGYsIDB4MDQwMDQwMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjNlZSwgMHg1OTk0MDAyNCwgMHg4MDA4MDQwMCwKKwkweDQ4MDMyODI0LCAweDFjMDFmMDAwLCAweDQyMDAxMDAwLCAweDAwMTA0ZDM5LAorCTB4MDQwMWZlZTUsIDB4NDIwMDEwMDAsIDB4MDAxMDRkMmMsIDB4MDQwMWZmZDYsCisJMHg0MjAwMTAwMCwgMHgwMDEwM2Y2MiwgMHgwNDAxZmVkZiwgMHg0MjAwMTAwMCwKKwkweDAwMTAzZmU0LCAweDA0MDFmZWRjLCAweDQyMDAxMDAwLCAweDAwMTAzZjM3LAorCTB4MDQwMWZlZDksIDB4NDIwMDEwMDAsIDB4MDAxMDQwMWIsIDB4MDQwMWY2ZWEsCisJMHg0MjAzZTAwMCwgMHg3MDAwMDAwMCwgMHg0MjAzZTAwMCwgMHhiMDMwMDAwMCwKKwkweDQwZWJmODAwLCAweDQyMDAwMDAwLCAweDAwMDAwMDNjLCAweDA0MDA0MDA0LAogCTB4ODAwMDAwNDAsIDB4MDQwMjA3ZmUsIDB4MDQwMWYwMDcsIDB4NDIwM2UwMDAsCi0JMHg3MDAwMDAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg3ZSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDFjMDFmMDAwLCAweDQyMDNlMDAwLCAweDgwMDAwMDAwLAotCTB4NDIwM2UwMDAsIDB4YjA0MDAwMDAsIDB4NDFmYzAwMDAsIDB4NDBlYmY4MDAsCi0JMHg4MGU4MDQ4MCwgMHgwNDAwMTAxMSwgMHgwNDAwMDAwNCwgMHg4MjAwMDQ4MCwKLQkweDAwMDAwMDAzLCAweDA0MDIxMDBkLCAweDQyMDAwMDAwLCAweDAwMDAwMDBmLAotCTB4MDQwMDUwMDQsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmUsIDB4MDQwMWYwMDcsCi0JMHg0MjAzZTAwMCwgMHg4MDAwMDAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg3ZiwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDFjMDFmMDAwLCAweDU5YTgwMDBlLAotCTB4ODIwMDA0ODAsIDB4MDAwMDAxMDAsIDB4NTk5YzBhMDIsIDB4ODAwNDA5YzAsCi0JMHgwNDAyMDAwMiwgMHg4MDA0MDgwMCwgMHg4MDA0MTQ4MCwgMHgwNDAwMTAwMiwKLQkweDQwMDAwODAwLCAweDQ4MDc1MDY3LCAweDU5YTgxMDBlLCAweDQwMDQwMDAwLAotCTB4ODAwYWNjODAsIDB4NDk2NzUwMGUsIDB4NDk2NzUwNjksIDB4NTlhYWE4MGIsCi0JMHg0MTY0MDgwMCwgMHg0MjAwMTAwMCwgMHgwMDAwMDAyNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2NjgxLCAweDgyMDZhNDAwLCAweDAwMTBkMWMwLCAweDQ5NTM1MDY1LAotCTB4NDE1MmIwMDAsIDB4NDIwMDYwMDAsIDB4MDAxMGJlNjUsIDB4NGEwMDYwMDQsCi0JMHgwMDAwMDEyYywgMHg0YTAwNjAwNSwgMHhkYTEwZGExMCwgMHg0YTAwNjAwOCwKLQkweDAwMDAwMDExLCAweDRhMDA2MDA5LCAweDAwMTBiZTY1LCAweDRhMDA2MDBhLAotCTB4MDAxMDEwYjgsIDB4NTk5YzAwMTQsIDB4NDgwMDYwMTEsIDB4NTk5YzAwMTUsCi0JMHg0ODAwNjAxMiwgMHg0MjAwNjAwMCwgMHgwMDEwYmU0MSwgMHg0YTAwNjIwMywKLQkweDAwMDAwMDA4LCAweDRhMDA2NDA2LCAweDAwMDAwMDA2LCAweDRhMDA2MDAyLAotCTB4ZmZmZjAwMDAsIDB4NGEwMDYwMDgsIDB4MDAxMGJlNjUsIDB4NGEwMDYwMTQsCi0JMHgwMDEwYmU2NSwgMHg1OTljMDAxNCwgMHg0ODAwNjAxNSwgMHg1OTljMDAxNSwKLQkweDQ4MDA2MDE2LCAweDU5OWMwNDEzLCAweDQ4MDA2MDE3LCAweDQ5NTA2MDE4LAotCTB4NDk1NDYwMTksIDB4NTlhODAwNjcsIDB4NDgwMDYwMWEsIDB4NGEwMDYwMWIsCi0JMHgwMDEwYjQ2NSwgMHg0YTAwNjAxYywgMHgwMDEwYjQ2NiwgMHg0YTAwNjAxZCwKLQkweDAwMTBiNDZhLCAweDQyMDAwMDAwLCAweGIwMDAwMDAwLCAweDQyMDAwODAwLAotCTB4MDAxMGJlNDEsIDB4MDIwMWY4MDAsIDB4MDAxMDBiNjgsIDB4MWMwMWYwMDAsCi0JMHg4MjAwMGQwMCwgMHgwMDAwMDBjMCwgMHgwNDAwMDAwNCwgMHg4MjA0MGQ4MCwKLQkweDAwMDAwMGMwLCAweDA0MDIwMDU1LCAweDgyMDAwZDAwLCAweDAwMDAyMDIwLAotCTB4NTkzMDA0MTQsIDB4ODQwMDA1MTIsIDB4ODIwNDBkODAsIDB4MDAwMDIwMjAsCi0JMHgwNDAwMDAwYiwgMHg4YzAwMDUxNCwgMHgwNDAyMDAwZiwgMHg0ODAyNjQxNCwKLQkweDgxM2U3OWMwLCAweDAyMDIwMDAwLCAweDAwMDIwNmQwLCAweDQyMDI3MDAwLAotCTB4MDAwMDAwNDMsIDB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4NTkzMjY4MDksCi0JMHg1OTM0MGEwMCwgMHg4YzA0MGQwYSwgMHgwNDAwMDdmMywgMHg4NDAwMDU1MiwKLQkweDA0MDFmN2YxLCAweDg0MDAwNTE0LCAweDU5MmMwODBkLCAweDQ4MDY2MDE1LAotCTB4MDQwMWY3ZWYsIDB4NTkzMjY4MDksIDB4NTkzNDBhMDAsIDB4OGMwNDBkMGEsCi0JMHgwMjAwMDAwMCwgMHgwMDAyMDZlMywgMHg1OTMwMGMxNCwgMHg4NDA0MGQ1MiwKLQkweDQ4MDY2NDE0LCAweDAyMDFmMDAwLCAweDAwMDIwNmUzLCAweDAyMDFmODAwLAotCTB4MDAwMjAwODYsIDB4ODEzZTc5YzAsIDB4MDIwMjAwMDAsIDB4MDAwMjA2ZDAsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDZmMSwgMHg4YzAwMDUxZSwgMHgwMjAwMDAwMCwKLQkweDAwMDIwNmZkLCAweDgyMDAwZDAwLCAweDAwMDAyMDIwLCAweDgyMDQwZDgwLAotCTB4MDAwMDIwMjAsIDB4MDQwMDAwMTQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwYzAsCi0JMHg4MjAwMGQ4MCwgMHgwMDAwMDA4MCwgMHgwNDAwMDAwOCwgMHg4MTNlNzljMCwKLQkweDAyMDIwMDAwLCAweDAwMDIwNmQwLCAweDQyMDI3MDAwLCAweDAwMDAwMDQxLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4ODEzZTc5YzAsIDB4MDIwMjAwMDAsCi0JMHgwMDAyMDZkMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0MywgMHgwMjAxZjAwMCwKLQkweDAwMDIwN2ExLCAweDU5MzI2ODA5LCAweDU5MzQwYTAwLCAweDhjMDQwZDBhLAotCTB4MDQwMDA3ZWEsIDB4NTkzMDBjMTQsIDB4ODQwNDBkNTIsIDB4NDgwNjY0MTQsCi0JMHgwNDAxZjdlNiwgMHg0OTJmYzg1NywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwKLQkweDAyMDFmMDAwLCAweDAwMDIwNmY4LCAweDQ5MmZjODU3LCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDQsIDB4MDIwMWYwMDAsIDB4MDAwMjA2ZjgsIDB4NDgwN2M4NTYsCi0JMHg1OWE4MDA2OCwgMHg4MDA0MDljMCwgMHgwNDAwMDAwMywgMHg4MDA4MDU0MCwKLQkweDA0MDFmMDAyLCAweDgwMDgwNTAwLCAweDQ4MDM1MDY4LCAweDFjMDFmMDAwLAotCTB4NGEwMzA4MDAsIDB4MDAwMDAwMDAsIDB4NGEwMzA4MDIsIDB4MDAwMDAwMDEsCi0JMHg0OTdiMDgwMywgMHg0OTdiMDgwNCwgMHgxYzAxZjAwMCwgMHg1OTg0MDAwMiwKLQkweDhjMDAwNTAwLCAweDA0MDAwMDA0LCAweDg0MDAwNTAwLCAweDRhMDMwODAwLAotCTB4MDAwMDAwMDEsIDB4ODQwMDA1NDQsIDB4ODQwMDA1MDYsIDB4NDgwMzA4MDIsCi0JMHg4MjAwMGQwMCwgMHgwZmZmZmZmZiwgMHg0MjAwMDAwMCwgMHg5MDAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwYjk0LCAweDU5YTgwMDY5LCAweDgyMDAwNDgwLAotCTB4MDAwMDAwMDcsIDB4NDgwMzUwNjksIDB4ODAwMDA1ODAsIDB4NDIwMDA4MDAsCi0JMHgwMDEwYjUxOSwgMHg0ODAwMDgwMCwgMHg0ODAwMDgwMSwgMHgxYzAxZjAwMCwKLQkweDU5YTgwMDY5LCAweDgyMDAwNDgwLCAweDAwMDAwMDA3LCAweDQ4MDM1MDY5LAotCTB4MWMwMWYwMDAsIDB4ODM2NDA0ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDEwMWIsCi0JMHg1OGM4MGEwMywgMHg4MDAwMDU4MCwgMHg4MjAwMDQwMCwgMHgwMDAwMDAwOCwKLQkweDgwMDQwODQwLCAweDA0MDIwN2ZkLCAweDgxNWMwNDgwLCAweDA0MDAxMDEzLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwNCwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwOSwKLQkweDRhMDI2MjAzLCAweDAwMDAwMDA0LCAweDRhMDI2MDA3LCAweDAwMDAwMTAxLAotCTB4MDQwMWY4MDksIDB4MDQwMWY4ODAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZjMsCi0JMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDA0MDFmN2ZkLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LCAweDQ5MmU2MDA4LAotCTB4NThjODBhMDMsIDB4NGEwMjVhMDQsIDB4MDAwMDAwMmMsIDB4NDk3YTU4MDAsCi0JMHg0OTdhNTgwMSwgMHg0OTdhNWMwNCwgMHg0OTdhNWMwNiwgMHg0OTdhNTgwNSwKLQkweDRhMDI1YTA4LCAweDAwMDAwMDA1LCAweDRhMDI1YTA3LCAweDAwMDAwMDAyLAotCTB4NThjODAyMDEsIDB4NDgwMjVjMDQsIDB4NThjODAyMDIsIDB4NDgwMjVjMDcsCi0JMHg1OGM4MDIwNCwgMHg0ODAyNWMwOCwgMHg0YTAyNTgwZCwgMHgwMDAwZmZmZiwKLQkweDgwMDQwODQwLCAweDA0MDAwMDBjLCAweDQxMmMyMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDA3ZTQsIDB4NGEwMjVhMDQsIDB4MDAwMDAwMGEsIDB4NDk3YTVjMDQsCi0JMHg0ODEyNTgwMCwgMHg0OTJjMjAwMSwgMHg0MTJjMjAwMCwgMHg4MDA0MDg0MCwKLQkweDA0MDIwN2Y3LCAweDFjMDFmMDAwLCAweDRkN2MwMDAwLCAweDQyMDJmODAwLAotCTB4MDAwMDAwMTAsIDB4NGRmMDAwMDAsIDB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsCi0JMHg1OTg0NzgwMywgMHg4MDNjNzljMCwgMHgwNDAwMDAxZSwgMHg0YzVjMDAwMCwKLQkweDU4M2NiODA4LCAweDU4NWMzNDA4LCAweDgwMTgzMWMwLCAweDA0MDAwMDBiLAotCTB4MDQwMWY4NGEsIDB4MDQwMDAwMTYsIDB4NDIwMDEwMDAsIDB4MDAxMGI1MTksCi0JMHgwNDAxZjg3ZiwgMHgwNDAwMDAxMiwgMHgwMjAxZjgwMCwgMHgwMDEwMDdkMywKLQkweDA0MDAwMDBmLCAweDQ5MmNiODA1LCAweDU4NWMwMDA1LCAweDgwMDAwNTQwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4MDQwMWY4MzAsIDB4NTg1YzU0MDgsCi0JMHgwNDAxZjgwYiwgMHg1YzAwYjgwMCwgMHg1YzAzZTAwMCwgMHg4MTdlZjg0MCwKLQkweDA0MDIwN2UxLCAweDVjMDJmODAwLCAweDFjMDFmMDAwLCAweDVjMDBiODAwLAotCTB4NWMwM2UwMDAsIDB4NWMwMmY4MDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCi0JMHg0MDVjNjAwMCwgMHg4MDI4NTFjMCwgMHgwNDAwMDAxOCwgMHg1ODVjMDIwNCwKLQkweDgyMDAwZDAwLCAweDAwMDAwMDBmLCAweDgyMDQwYzAwLCAweDAwMTAxMGJkLAotCTB4NTAwNDQwMDAsIDB4NGNmMDAwMDAsIDB4NGQwMDAwMDAsIDB4NGQwNDAwMDAsCi0JMHg0MDIxZTAwMCwgMHg0MDMyMDgwMCwgMHg1OTg2MDAwNCwgMHg0YzI4MDAwMCwKLQkweDA0MDFmOTM0LCAweDVjMDA1MDAwLCAweDQwZjA0MDAwLCAweDQxMDQ2MDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDEwOWIsIDB4MDQwMjA3ZjYsIDB4NWMwMjA4MDAsCi0JMHg1YzAyMDAwMCwgMHg1YzAxZTAwMCwgMHg1OGM4MDIwNCwgMHg0ODAwYmMwOCwKLQkweDAyMDFmODAwLCAweDAwMDIwMDg2LCAweDRhMDI2MDA3LCAweDAwMDAwMTAxLAotCTB4NDk3YTYwMDksIDB4MDQwMWYwNTUsIDB4NDgwM2M4NTYsIDB4NTk4NDAwMDMsCi0JMHg4MDAyNjU0MCwgMHgwNDAwMDAwMywgMHg1OTMwMDAwMCwgMHg0ODAzMDgwMywKLQkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDU5ODQwMDAzLCAweDQ4MDI2MDAwLAotCTB4NDkzMzA4MDMsIDB4MWMwMWYwMDAsIDB4NThjYzA4MDUsIDB4NDAxODAwMDAsCi0JMHg4MDA0MDQ4MCwgMHgwNDAwMTAwZCwgMHg4MmNjMDU4MCwgMHgwMDEwYjUwZSwKLQkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU4YzgwMjA1LCAweDgwMDQwNDgwLAotCTB4MDQwMDEwMWQsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCi0JMHg4MDAwMzU4MCwgMHgwNDAxZjdmZSwgMHg4MmNjMDU4MCwgMHgwMDEwYjUwZSwKLQkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU4YzgwNDAwLCAweDhjMDAwNTA0LAotCTB4MDQwMDA3ZjgsIDB4NThjODA0MGIsIDB4OGMwMDA1MWUsIDB4MDQwMDA3ZjUsCi0JMHg4YzAwMDUwMCwgMHgwNDAyMDdmMywgMHg4NDAwMDU0MCwgMHg0ODAxOTQwYiwKLQkweDQyMDAwMDAwLCAweDAwMTBiODM5LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4NDIwMDEwMDAsIDB4MDAwMDgwMjYsIDB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsCi0JMHgwNDAxZjdlOCwgMHg1OGM4MDQwYiwgMHg4YzAwMDUxZSwgMHgwNDAwMDdlMiwKLQkweDhjMDAwNTAyLCAweDA0MDIwN2UwLCAweDg0MDAwNTQyLCAweDQ4MDE5NDBiLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MzgsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHg0MjAwMTAwMCwgMHgwMDAwODAyNSwgMHg0MjAwMTgwMCwgMHgwMDAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAzYTNlLCAweDA0MDFmN2QzLCAweDQ4MDNjODU2LAotCTB4NTgwODAwMDAsIDB4NDIwMDE4MDAsIDB4MDAwMDAwMDcsIDB4NTgwODA4MDEsCi0JMHg4MDA0MDQ4MCwgMHgwNDAyMDAwNCwgMHg0MDBjMDAwMCwgMHg4MDAwMDU0MCwKLQkweDA0MDFmMDA1LCAweDA0MDAxMDAzLCAweDgwMGMwNDgwLCAweDA0MDFmMDAyLAotCTB4ODAwMDAwODAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NTkzMDAwMDgsCi0JMHg4MDAwMGQ0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1ODA0MDAwNSwKLQkweDgwMDAwNTQwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU5MzAwMDA3LAotCTB4ODIwMDA1MDAsIDB4MDAwMDAxMDEsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMDEsCi0JMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMTAwMCwgMHgwMDEwYjUxOSwKLQkweDU4MDgwODAxLCAweDgyMDQwNDAwLCAweDAwMTBiNTFiLCAweDQ5N2E2NDE0LAotCTB4NGEwMjYwMTUsIDB4MDAwMGZmZmYsIDB4NDUzMDAwMDAsIDB4ODAwNDA4MDAsCi0JMHg4MjA0MDQ4MCwgMHgwMDAwMDAwOCwgMHgwNDAwMTAwMiwgMHg4MDAwMGQ4MCwKLQkweDQ4MDQxMDAxLCAweDgyMDQwNDAwLCAweDAwMTBiNTFiLCAweDQ1NzgwMDAwLAotCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTkzMDA4MDgsIDB4ODAwNDA5YzAsCi0JMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0ZDJjMDAwMCwgMHg1ODA2NTgwNSwKLQkweDgxMmU1OWMwLCAweDAyMDIwODAwLCAweDAwMTAwN2Y0LCAweDQ5NzgwODA1LAotCTB4NDAwNjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4NWMwMjU4MDAsCi0JMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHg1YzAyNjAwMCwKLQkweDFjMDFmMDAwLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDA5LAotCTB4MDQwMjAwMDYsIDB4NTkzMDAwMDcsIDB4OGMwMDA1MTAsIDB4MDQwMDAwMDMsCi0JMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDFjMDFmMDAwLCAweDU5ODQwODAyLCAweDhjMDQwZDA0LCAweDFjMDFmMDAwLAotCTB4NDgwM2M4NTYsIDB4NTk4NDA4MDIsIDB4ODQwNDBkMDQsIDB4ODQwNDBkNDAsCi0JMHg0YTAzMDgwMCwgMHgwMDAwMDAwMCwgMHg0ODA3MDgwMiwgMHg4MjA0MGQwMCwKLQkweDBmZmZmZmZmLCAweDQyMDAwMDAwLCAweDkwMDAwMDAwLCAweDAyMDFmMDAwLAotCTB4MDAxMDBiOTQsIDB4NDgwN2M4NTcsIDB4NDgwNTk4MGEsIDB4NDk3OTk4MDEsCi0JMHg0OTc5OTgwMywgMHg0OTc5OTgwNiwgMHg0OTc5OTgwNywgMHg0OTc5OTgwOCwKLQkweDQ5Nzk5ODA1LCAweDQ5Nzk5ODA5LCAweDA0MDFmOGM5LCAweDA0MDAwMDBhLAotCTB4MDQwMWY4ZWIsIDB4MDQwMDAwMDgsIDB4NDgzNTk4MDAsIDB4NDgzNTk4MDIsCi0JMHg0ODM1OTgwNiwgMHg0YTAxOTgwNCwgMHgwMDAwMDAwMSwgMHg0YTAxOTgwNywKLQkweDAwMDAwMDA1LCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LCAweDU4Y2MxMDA3LAotCTB4NDAwNDAwMDAsIDB4ODAwODA0ODAsIDB4MDQwMjEwMjAsIDB4NGMwNDAwMDAsCi0JMHg0YzA4MDAwMCwgMHgwNDAxZjhkYSwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwKLQkweDA0MDAwMDFjLCAweDU4Y2MwMDA2LCAweDgwMDA2NTQwLCAweDA0MDIwMDBiLAotCTB4NDgzNTk4MDAsIDB4NDgzNTk4MDIsIDB4NDgzNTk4MDYsIDB4NDk3OTk4MDEsCi0JMHg0OTc5OTgwMywgMHg0OTc4NjgwMSwgMHg0OTc4NjgwMCwgMHg0OTc5OTgwNCwKLQkweDQ5Nzk5ODA3LCAweDA0MDFmMDA1LCAweDQ4MzA2ODAxLCAweDQ4MzQ2MDAwLAotCTB4NDgzNTk4MDYsIDB4NDk3ODY4MDAsIDB4NThjYzAwMDQsIDB4NThjYzEwMDcsCi0JMHg4MDAwMDAwMCwgMHg4MjA4MTQwMCwgMHgwMDAwMDAwNSwgMHg0ODAxOTgwNCwKLQkweDQ4MDk5ODA3LCAweDA0MDFmN2RmLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDgwYmM4NTcsCi0JMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwgMHg0MDA4MzAwMCwKLQkweDU4Y2MwODAxLCAweDgyMDQwNDgwLCAweDAwMDAwMDA1LCAweDAyMDIxODAwLAotCTB4MDAxMDA1ZDgsIDB4ODIwNDA0MDAsIDB4MDAxMDY0MTgsIDB4NTAwMDAwMDAsCi0JMHg1OGNjYTgwMCwgMHg4MDU0YWMwMCwgMHg0MjAwMTgwMCwgMHgwMDAwMDAwNSwKLQkweDQwMDQwMDAwLCAweDgwMGMwNDgwLCAweDgwMDgyNDgwLCAweDA0MDIxMDAyLAotCTB4NDAwODAwMDAsIDB4ODAwMGIwYzIsIDB4ODA1OGI0MDAsIDB4NTQ1MGE4MDAsCi0JMHg4MDUwYTAwMCwgMHg4MDU0YTgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmYywKLQkweDQwMDAxMDAwLCAweDU4Y2MyODA1LCAweDU4Y2MwODA3LCAweDU4Y2MyMDAxLAotCTB4ODAxNDJjMDAsIDB4ODAwNDBjODAsIDB4ODAxMDI0MDAsIDB4NDgxNTk4MDUsCi0JMHg0ODA1OTgwNywgMHg0ODExOTgwMSwgMHg4MjEwMDU4MCwgMHgwMDAwMDAwNSwKLQkweDA0MDAwMDBjLCAweDQ4MTE5ODAxLCAweDQwMDgwMDAwLCAweDgwMTgxNDgwLAotCTB4NDAwODMwMDAsIDB4MDQwMDAwMDMsIDB4MDQwMjE3ZDYsIDB4ODAwMDA1ODAsCi0JMHg1YzAwYjAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHgxYzAxZjAwMCwKLQkweDU4Y2MwODAwLCAweDgwMDQwOWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LAotCTB4NTgwNDA4MDAsIDB4NDgwNTk4MDAsIDB4NDE3ODIwMDAsIDB4MDQwMWY3ZWUsCi0JMHgwNDAxZjgxMywgMHg1MGYwMDAwMCwgMHg4MTA0MDQwMCwgMHg0MDAwMTgwMCwKKwkweDcwMDAwMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjdkLCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4MWMwMWYwMDAsIDB4NDIwM2UwMDAsIDB4ODAwMDAwMDAsCisJMHg0MjAzZTAwMCwgMHhiMDQwMDAwMCwgMHg0MGViZjgwMCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDNjLCAweDA0MDA1MDA0LCAweDgwMDAwMDQwLCAweDA0MDIwN2ZlLAorCTB4MDQwMWYwMDcsIDB4NDIwM2UwMDAsIDB4ODAwMDAwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjY3ZSwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHgxYzAxZjAwMCwKKwkweDU5YTgwMDBlLCAweDgyMDAwNDgwLCAweDAwMDAwMTAwLCAweDU5OWMwYTAyLAorCTB4ODAwNDA5YzAsIDB4MDQwMjAwMDIsIDB4ODAwNDA4MDAsIDB4ODAwNDE0ODAsCisJMHgwNDAwMTAwMiwgMHg0MDAwMDgwMCwgMHg0ODA3NTA2NywgMHg1OWE4MTAwZSwKKwkweDQwMDQwMDAwLCAweDgwMGFjYzgwLCAweDQ5Njc1MDBlLCAweDQ5Njc1MDY5LAorCTB4NTlhYWE4MGIsIDB4NDE2NDA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMjQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjNjZiwgMHg4MjA2YTQwMCwgMHgwMDEwY2ZjMCwKKwkweDQ5NTM1MDY1LCAweDQxNTJiMDAwLCAweDQyMDA2MDAwLCAweDAwMTBiYzY0LAorCTB4NGEwMDYwMDQsIDB4MDAwMDAxMmMsIDB4NGEwMDYwMDUsIDB4ZGExMGRhMTAsCisJMHg0YTAwNjAwOCwgMHgwMDAwMDAxMSwgMHg0YTAwNjAwOSwgMHgwMDEwYmM2NCwKKwkweDRhMDA2MDBhLCAweDAwMTAxMTA4LCAweDU5OWMwMDE0LCAweDQ4MDA2MDExLAorCTB4NTk5YzAwMTUsIDB4NDgwMDYwMTIsIDB4NDIwMDYwMDAsIDB4MDAxMGJjNDAsCisJMHg0YTAwNjIwMywgMHgwMDAwMDAwOCwgMHg0YTAwNjQwNiwgMHgwMDAwMDAwNiwKKwkweDRhMDA2MDAyLCAweGZmZmYwMDAwLCAweDRhMDA2MDA4LCAweDAwMTBiYzY0LAorCTB4NGEwMDYwMTQsIDB4MDAxMGJjNjQsIDB4NTk5YzAwMTQsIDB4NDgwMDYwMTUsCisJMHg1OTljMDAxNSwgMHg0ODAwNjAxNiwgMHg1OTljMDQxMywgMHg0ODAwNjAxNywKKwkweDQ5NTA2MDE4LCAweDQ5NTQ2MDE5LCAweDU5YTgwMDY3LCAweDQ4MDA2MDFhLAorCTB4NGEwMDYwMWIsIDB4MDAxMGIyNjUsIDB4NGEwMDYwMWMsIDB4MDAxMGIyNjYsCisJMHg0YTAwNjAxZCwgMHgwMDEwYjI2YSwgMHg0MjAwMDAwMCwgMHhiMDAwMDAwMCwKKwkweDQyMDAwODAwLCAweDAwMTBiYzQwLCAweDAyMDFmODAwLCAweDAwMTAwYmIyLAorCTB4MWMwMWYwMDAsIDB4ODIwMDBkMDAsIDB4MDAwMDAwYzAsIDB4MDQwMDAwMDQsCisJMHg4MjA0MGQ4MCwgMHgwMDAwMDBjMCwgMHgwNDAyMDA1NSwgMHg4MjAwMGQwMCwKKwkweDAwMDAyMDIwLCAweDU5MzAwNDE0LCAweDg0MDAwNTEyLCAweDgyMDQwZDgwLAorCTB4MDAwMDIwMjAsIDB4MDQwMDAwMGIsIDB4OGMwMDA1MTQsIDB4MDQwMjAwMGYsCisJMHg0ODAyNjQxNCwgMHg4MTNlNzljMCwgMHgwMjAyMDAwMCwgMHgwMDAyMDgwNCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDQzLCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LAorCTB4NTkzMjY4MDksIDB4NTkzNDBhMDAsIDB4OGMwNDBkMGEsIDB4MDQwMDA3ZjMsCisJMHg4NDAwMDU1MiwgMHgwNDAxZjdmMSwgMHg4NDAwMDUxNCwgMHg1OTJjMDgwZCwKKwkweDQ4MDY2MDE1LCAweDA0MDFmN2VmLCAweDU5MzI2ODA5LCAweDU5MzQwYTAwLAorCTB4OGMwNDBkMGEsIDB4MDIwMDAwMDAsIDB4MDAwMjA4MTcsIDB4NTkzMDBjMTQsCisJMHg4NDA0MGQ1MiwgMHg0ODA2NjQxNCwgMHgwMjAxZjAwMCwgMHgwMDAyMDgxNywKKwkweDAyMDFmODAwLCAweDAwMDIwMDg3LCAweDgxM2U3OWMwLCAweDAyMDIwMDAwLAorCTB4MDAwMjA4MDQsIDB4MDIwMWYwMDAsIDB4MDAwMjA4MjUsIDB4OGMwMDA1MWUsCisJMHgwMjAwMDAwMCwgMHgwMDAyMDgzMSwgMHg4MjAwMGQwMCwgMHgwMDAwMjAyMCwKKwkweDgyMDQwZDgwLCAweDAwMDAyMDIwLCAweDA0MDAwMDE0LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwYzAsIDB4ODIwMDBkODAsIDB4MDAwMDAwODAsIDB4MDQwMDAwMDgsCisJMHg4MTNlNzljMCwgMHgwMjAyMDAwMCwgMHgwMDAyMDgwNCwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDQxLCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LCAweDgxM2U3OWMwLAorCTB4MDIwMjAwMDAsIDB4MDAwMjA4MDQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDMsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhkOCwgMHg1OTMyNjgwOSwgMHg1OTM0MGEwMCwKKwkweDhjMDQwZDBhLCAweDA0MDAwN2VhLCAweDU5MzAwYzE0LCAweDg0MDQwZDUyLAorCTB4NDgwNjY0MTQsIDB4MDQwMWY3ZTYsIDB4NDkyZmM4NTcsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNiwgMHgwMjAxZjAwMCwgMHgwMDAyMDgyYywgMHg0OTJmYzg1NywKKwkweDQyMDAwODAwLCAweDAwMDAwMDA0LCAweDAyMDFmMDAwLCAweDAwMDIwODJjLAorCTB4NDgwN2M4NTYsIDB4NTlhODAwNjgsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDMsCisJMHg4MDA4MDU0MCwgMHgwNDAxZjAwMiwgMHg4MDA4MDUwMCwgMHg0ODAzNTA2OCwKKwkweDFjMDFmMDAwLCAweDRhMDMwODAwLCAweDAwMDAwMDAwLCAweDRhMDMwODAyLAorCTB4MDAwMDAwMDEsIDB4NDk3YjA4MDMsIDB4NDk3YjA4MDQsIDB4MWMwMWYwMDAsCisJMHg1OTg0MDAwMiwgMHg4YzAwMDUwMCwgMHgwNDAwMDAwNCwgMHg4NDAwMDUwMCwKKwkweDRhMDMwODAwLCAweDAwMDAwMDAxLCAweDg0MDAwNTQ0LCAweDg0MDAwNTA2LAorCTB4NDgwMzA4MDIsIDB4ODIwMDBkMDAsIDB4MGZmZmZmZmYsIDB4NDIwMDAwMDAsCisJMHg5MDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMGJkZSwgMHg1OWE4MDA2OSwKKwkweDgyMDAwNDgwLCAweDAwMDAwMDA3LCAweDQ4MDM1MDY5LCAweDgwMDAwNTgwLAorCTB4NDIwMDA4MDAsIDB4MDAxMGIzMTUsIDB4NDgwMDA4MDAsIDB4NDgwMDA4MDEsCisJMHgxYzAxZjAwMCwgMHg1OWE4MDA2OSwgMHg4MjAwMDQwMCwgMHgwMDAwMDAwNywKKwkweDQ4MDM1MDY5LCAweDFjMDFmMDAwLCAweDgzNjQwNDgwLCAweDAwMDAwMDA4LAorCTB4MDQwMDEwMWIsIDB4NThjODBhMDMsIDB4ODAwMDA1ODAsIDB4ODIwMDA0MDAsCisJMHgwMDAwMDAwOCwgMHg4MDA0MDg0MCwgMHgwNDAyMDdmZCwgMHg4MTVjMDQ4MCwKKwkweDA0MDAxMDEzLCAweDQyMDBiMDAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLAorCTB4MDAwMjA4OTIsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwOSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNCwgMHg0YTAyNjAwNywKKwkweDAwMDAwMTAxLCAweDA0MDFmODA5LCAweDA0MDFmODgwLCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZjMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDgyYSwKKwkweDQ5MmU2MDA4LCAweDU4YzgwYTAzLCAweDRhMDI1YTA0LCAweDAwMDAwMDJjLAorCTB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsIDB4NDk3YTVjMDQsIDB4NDk3YTVjMDYsCisJMHg0OTdhNTgwNSwgMHg0YTAyNWEwOCwgMHgwMDAwMDAwNSwgMHg0YTAyNWEwNywKKwkweDAwMDAwMDAyLCAweDU4YzgwMjAxLCAweDQ4MDI1YzA0LCAweDU4YzgwMjAyLAorCTB4NDgwMjVjMDcsIDB4NThjODAyMDQsIDB4NDgwMjVjMDgsIDB4NGEwMjU4MGQsCisJMHgwMDAwZmZmZiwgMHg4MDA0MDg0MCwgMHgwNDAwMDAwYywgMHg0MTJjMjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAwODJhLCAweDRhMDI1YTA0LCAweDAwMDAwMDBhLAorCTB4NDk3YTVjMDQsIDB4NDgxMjU4MDAsIDB4NDkyYzIwMDEsIDB4NDEyYzIwMDAsCisJMHg4MDA0MDg0MCwgMHgwNDAyMDdmNywgMHgxYzAxZjAwMCwgMHg0ZDdjMDAwMCwKKwkweDQyMDJmODAwLCAweDAwMDAwMDEwLCAweDRkZjAwMDAwLCAweDQyMDNlMDAwLAorCTB4NTAwMDAwMDAsIDB4NTk4NDc4MDMsIDB4ODAzYzc5YzAsIDB4MDQwMDAwMWUsCisJMHg0YzVjMDAwMCwgMHg1ODNjYjgwOCwgMHg1ODVjMzQwOCwgMHg4MDE4MzFjMCwKKwkweDA0MDAwMDBiLCAweDA0MDFmODRhLCAweDA0MDAwMDE2LCAweDQyMDAxMDAwLAorCTB4MDAxMGIzMTUsIDB4MDQwMWY4N2YsIDB4MDQwMDAwMTIsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDgxOSwgMHgwNDAwMDAwZiwgMHg0OTJjYjgwNSwgMHg1ODVjMDAwNSwKKwkweDgwMDAwNTQwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDA0MDFmODMwLAorCTB4NTg1YzU0MDgsIDB4MDQwMWY4MGIsIDB4NWMwMGI4MDAsIDB4NWMwM2UwMDAsCisJMHg4MTdlZjg0MCwgMHgwNDAyMDdlMSwgMHg1YzAyZjgwMCwgMHgxYzAxZjAwMCwKKwkweDVjMDBiODAwLCAweDVjMDNlMDAwLCAweDVjMDJmODAwLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4NDA1YzYwMDAsIDB4ODAyODUxYzAsIDB4MDQwMDAwMTgsCisJMHg1ODVjMDIwNCwgMHg4MjAwMGQwMCwgMHgwMDAwMDAwZiwgMHg4MjA0MGMwMCwKKwkweDAwMTAxMTBkLCAweDUwMDQ0MDAwLCAweDRjNjAwMDAwLCAweDRjNjQwMDAwLAorCTB4NGQwNDAwMDAsIDB4NDAyMGMwMDAsIDB4NDAzMjA4MDAsIDB4NTk4NGM4MDQsCisJMHg0YzI4MDAwMCwgMHgwNDAxZjkzNCwgMHg1YzAwNTAwMCwgMHg0MDYwNDAwMCwKKwkweDQxMDQ2MDAwLCAweDAyMDFmODAwLCAweDAwMTAxMGViLCAweDA0MDIwN2Y2LAorCTB4NWMwMjA4MDAsIDB4NWMwMGM4MDAsIDB4NWMwMGMwMDAsIDB4NThjODAyMDQsCisJMHg0ODAwYmMwOCwgMHgwMjAxZjgwMCwgMHgwMDAyMDA4NywgMHg0YTAyNjAwNywKKwkweDAwMDAwMTAxLCAweDQ5N2E2MDA5LCAweDA0MDFmMDU1LCAweDQ4MDNjODU2LAorCTB4NTk4NDAwMDMsIDB4ODAwMjY1NDAsIDB4MDQwMDAwMDMsIDB4NTkzMDAwMDAsCisJMHg0ODAzMDgwMywgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg1OTg0MDAwMywKKwkweDQ4MDI2MDAwLCAweDQ5MzMwODAzLCAweDFjMDFmMDAwLCAweDU4Y2MwODA1LAorCTB4NDAxODAwMDAsIDB4ODAwNDA0ODAsIDB4MDQwMDEwMGQsIDB4ODJjYzA1ODAsCisJMHgwMDEwYjMwYSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OGM4MDIwNSwKKwkweDgwMDQwNDgwLCAweDA0MDAxMDFkLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4MWMwMWYwMDAsIDB4ODAwMDM1ODAsIDB4MDQwMWY3ZmUsIDB4ODJjYzA1ODAsCisJMHgwMDEwYjMwYSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OGM4MDQwMCwKKwkweDhjMDAwNTA0LCAweDA0MDAwN2Y4LCAweDU4YzgwNDBiLCAweDhjMDAwNTFlLAorCTB4MDQwMDA3ZjUsIDB4OGMwMDA1MDAsIDB4MDQwMjA3ZjMsIDB4ODQwMDA1NDAsCisJMHg0ODAxOTQwYiwgMHg0MjAwMDAwMCwgMHgwMDEwYjYzNywgMHgwMjAxZjgwMCwKKwkweDAwMTBhODZlLCAweDQyMDAxMDAwLCAweDAwMDA4MDI2LCAweDAyMDFmODAwLAorCTB4MDAxMDM4NTcsIDB4MDQwMWY3ZTgsIDB4NThjODA0MGIsIDB4OGMwMDA1MWUsCisJMHgwNDAwMDdlMiwgMHg4YzAwMDUwMiwgMHgwNDAyMDdlMCwgMHg4NDAwMDU0MiwKKwkweDQ4MDE5NDBiLCAweDQyMDAwMDAwLCAweDAwMTBiNjM2LCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4NDIwMDEwMDAsIDB4MDAwMDgwMjUsIDB4NDIwMDE4MDAsCisJMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMzg1NywgMHgwNDAxZjdkMywKKwkweDQ4MDNjODU2LCAweDU4MDgwMDAwLCAweDQyMDAxODAwLCAweDAwMDAwMDA3LAorCTB4NTgwODA4MDEsIDB4ODAwNDA0ODAsIDB4MDQwMjAwMDQsIDB4NDAwYzAwMDAsCisJMHg4MDAwMDU0MCwgMHgwNDAxZjAwNSwgMHgwNDAwMTAwMywgMHg4MDBjMDQ4MCwKKwkweDA0MDFmMDAyLCAweDgwMDAwMDgwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NTkzMDAwMDgsIDB4ODAwMDBkNDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCisJMHg1ODA0MDAwNSwgMHg4MDAwMDU0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKKwkweDU5MzAwMDA3LCAweDgyMDAwNTAwLCAweDAwMDAwMTAxLCAweDgyMDAwNTgwLAorCTB4MDAwMDAxMDEsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4NDIwMDEwMDAsCisJMHgwMDEwYjMxNSwgMHg1ODA4MDgwMSwgMHg4MjA0MDQwMCwgMHgwMDEwYjMxNywKKwkweDQ5N2E2NDE0LCAweDRhMDI2MDE1LCAweDAwMDBmZmZmLCAweDQ1MzAwMDAwLAorCTB4ODAwNDA4MDAsIDB4ODIwNDA0ODAsIDB4MDAwMDAwMDgsIDB4MDQwMDEwMDIsCisJMHg4MDAwMGQ4MCwgMHg0ODA0MTAwMSwgMHg4MjA0MDQwMCwgMHgwMDEwYjMxNywKKwkweDQ1NzgwMDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwODA4LAorCTB4ODAwNDA5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NGQyYzAwMDAsCisJMHg1ODA2NTgwNSwgMHg4MTJlNTljMCwgMHgwMjAyMDgwMCwgMHgwMDEwMDgzYSwKKwkweDQ5NzgwODA1LCAweDQwMDY1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwODQzLAorCTB4NWMwMjU4MDAsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsCisJMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA5LCAweDA0MDIwMDA2LCAweDU5MzAwMDA3LCAweDhjMDAwNTEwLAorCTB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg1OTg0MDgwMiwgMHg4YzA0MGQwNCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDU5ODQwODAyLCAweDg0MDQwZDA0LAorCTB4ODQwNDBkNDAsIDB4NGEwMzA4MDAsIDB4MDAwMDAwMDAsIDB4NDgwNzA4MDIsCisJMHg4MjA0MGQwMCwgMHgwZmZmZmZmZiwgMHg0MjAwMDAwMCwgMHg5MDAwMDAwMCwKKwkweDAyMDFmMDAwLCAweDAwMTAwYmRlLCAweDQ4MDdjODU3LCAweDQ4MDU5ODBhLAorCTB4NDk3OTk4MDEsIDB4NDk3OTk4MDMsIDB4NDk3OTk4MDYsIDB4NDk3OTk4MDcsCisJMHg0OTc5OTgwOCwgMHg0OTc5OTgwNSwgMHg0OTc5OTgwOSwgMHgwNDAxZjhjOCwKKwkweDA0MDAwMDBhLCAweDA0MDFmOGVhLCAweDA0MDAwMDA4LCAweDQ4MzU5ODAwLAorCTB4NDgzNTk4MDIsIDB4NDgzNTk4MDYsIDB4NGEwMTk4MDQsIDB4MDAwMDAwMDEsCisJMHg0YTAxOTgwNywgMHgwMDAwMDAwNSwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywKKwkweDU4Y2MxMDA3LCAweDQwMDQwMDAwLCAweDgwMDgwNDgwLCAweDA0MDIxMDIwLAorCTB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4MDQwMWY4ZDksIDB4NWMwMDEwMDAsCisJMHg1YzAwMDgwMCwgMHgwNDAwMDAxYywgMHg1OGNjMDAwNiwgMHg4MDAwNjU0MCwKKwkweDA0MDIwMDBiLCAweDQ4MzU5ODAwLCAweDQ4MzU5ODAyLCAweDQ4MzU5ODA2LAorCTB4NDk3OTk4MDEsIDB4NDk3OTk4MDMsIDB4NDk3ODY4MDEsIDB4NDk3ODY4MDAsCisJMHg0OTc5OTgwNCwgMHg0OTc5OTgwNywgMHgwNDAxZjAwNSwgMHg0ODMwNjgwMSwKKwkweDQ4MzQ2MDAwLCAweDQ4MzU5ODA2LCAweDQ5Nzg2ODAwLCAweDU4Y2MwMDA0LAorCTB4NThjYzEwMDcsIDB4ODAwMDAwMDAsIDB4ODIwODE0MDAsIDB4MDAwMDAwMDUsCisJMHg0ODAxOTgwNCwgMHg0ODA5OTgwNywgMHgwNDAxZjdkZiwgMHg4MDAwMDU4MCwKKwkweDFjMDFmMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NDgwYmM4NTcsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsCisJMHg0MDA4MzAwMCwgMHg1OGNjMDgwMSwgMHg4MjA0MDQ4MCwgMHgwMDAwMDAwNSwKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDgyMDQwNDAwLCAweDAwMTA2MTUwLAorCTB4NTAwMDAwMDAsIDB4NThjY2E4MDAsIDB4ODA1NGFjMDAsIDB4NDIwMDE4MDAsCisJMHgwMDAwMDAwNSwgMHg0MDA0MDAwMCwgMHg4MDBjMDQ4MCwgMHg4MDA4MjQ4MCwKKwkweDA0MDIxMDAyLCAweDQwMDgwMDAwLCAweDgwMDBiMGMyLCAweDgwNThiNDAwLAorCTB4NTQ1MGE4MDAsIDB4ODA1MGEwMDAsIDB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmYywgMHg0MDAwMTAwMCwgMHg1OGNjMjgwNSwgMHg1OGNjMDgwNywKKwkweDU4Y2MyMDAxLCAweDgwMTQyYzAwLCAweDgwMDQwYzgwLCAweDgwMTAyNDAwLAorCTB4NDgxNTk4MDUsIDB4NDgwNTk4MDcsIDB4NDgxMTk4MDEsIDB4ODIxMDA1ODAsCisJMHgwMDAwMDAwNSwgMHgwNDAwMDAwYywgMHg0ODExOTgwMSwgMHg0MDA4MDAwMCwKKwkweDgwMTgxNDgwLCAweDQwMDgzMDAwLCAweDA0MDAwMDAzLCAweDA0MDIxN2Q2LAorCTB4ODAwMDA1ODAsIDB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsCisJMHgxYzAxZjAwMCwgMHg1OGNjMDgwMCwgMHg4MDA0MDljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDU4MDQwODAwLCAweDQ4MDU5ODAwLCAweDQxNzgyMDAwLAorCTB4MDQwMWY3ZWUsIDB4MDQwMWY4MTIsIDB4NTA2MDAwMDAsIDB4ODEwNDFjMDAsCiAJMHg1ODVjMDIwNCwgMHg0ODAzYzg1NywgMHg4MjAwMDU4MCwgMHgwMDAwMDAyYywKLQkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU4MDQwMjAyLCAweDgwMDAwMGUwLAotCTB4ODEwMDA1NDAsIDB4NDgwMDE4MDIsIDB4NTgwNDAwMDAsIDB4NDgwMDE4MDAsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1ODA0MDIwMiwgMHg4MDAwMDBlMCwKKwkweDgwNjQwNTQwLCAweDQ4MDAxODAyLCAweDU4MDQwMDAwLCAweDQ4MDAxODAwLAogCTB4NTgwNDAwMDEsIDB4NDgwMDE4MDEsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsCi0JMHg1OGNjMDAwNSwgMHg4MDAwMDA0MCwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwKKwkweDU4Y2MwMDA1LCAweDgwMDAwMDQwLCAweDAyMDAxODAwLCAweDAwMTAwNjE1LAogCTB4NDgwMTk4MDUsIDB4NThjYzEwMDMsIDB4ODIwODA0ODAsIDB4MDAwMDAwMDUsCi0JMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjA4MDQwMCwgMHgwMDEwNjQxOCwKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDgyMDgwNDAwLCAweDAwMTA2MTUwLAogCTB4NTAwMDAwMDAsIDB4NThjYzA4MDIsIDB4ODAwNDBjMDAsIDB4ODAwODEwMDAsCiAJMHg4MjA4MDQ4MCwgMHgwMDAwMDAwNSwgMHgwNDAyMDAwZiwgMHg1OGNjMjAwMiwKIAkweDU4MTAwMDAwLCAweDgwMDA2ZDQwLCAweDA0MDAwMDA5LCAweDRjMzQwMDAwLApAQCAtNjQyNSwzMCArNjI0NywzMCBAQAogCTB4ODAxMDIwMDAsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMDIsCiAJMHgwNDAyMTdmYywgMHg0ODExOTIwMywgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NiwKIAkweDRkMmMwMDAwLCAweDU4Y2MwMDBhLCAweDgwMDAwNTQwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4ODIwMDI0MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDdkMywgMHgwNDAwMDAxMiwgMHg0OTJkOTgwOSwgMHg0OTdhNTgwMCwKLQkweDQ5N2E1ODAxLCAweDAyMDFmODAwLCAweDAwMTAwN2QzLCAweDA0MDAwMDBjLAorCTB4MDAxMDA2MTUsIDB4ODIwMDI0MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDgxOSwgMHgwNDAwMDAxMiwgMHg0OTJkOTgwOSwgMHg0OTdhNTgwMCwKKwkweDQ5N2E1ODAxLCAweDAyMDFmODAwLCAweDAwMTAwODE5LCAweDA0MDAwMDBjLAogCTB4NThjYzAwMDksIDB4NDgwMjU4MDAsIDB4NDk3YTU4MDEsIDB4NDkyZDk4MDksCiAJMHg4MjEwMjQ4MCwgMHgwMDAwMDAwNSwgMHgwNDAyMTdmNywgMHg4MjAwMDU0MCwKIAkweDAwMDAwMDAxLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDU4Y2MwMDA5LAogCTB4ODAwMjVkNDAsIDB4MDQwMDA3ZmMsIDB4NTkyYzIwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDdmNCwgMHg0MDEwMDAwMCwgMHgwNDAxZjdmYSwgMHg1OGNjMDAwOSwKKwkweDAwMTAwODNhLCAweDQwMTAwMDAwLCAweDA0MDFmN2ZhLCAweDU4Y2MwMDA5LAogCTB4NDhjZmM4NTcsIDB4ODAwMDZkNDAsIDB4MDQwMDAwMDUsIDB4NTAzNDAwMDAsCiAJMHg0ODAxOTgwOSwgMHg0OTc4NjgwMCwgMHg0OTc4NjgwMSwgMHgxYzAxZjAwMCwKIAkweDQ4MTNjODU3LCAweDU4Y2MwMDA5LCAweDQ4MDAyMDAwLCAweDQ4MTE5ODA5LAogCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsIDB4NGQyYzAwMDAsIDB4NThjYzAwMDksCiAJMHg4MDAyNWQ0MCwgMHgwNDAwMDAwNywgMHg1OTJjMDAwMCwgMHg0YzAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwN2Y0LCAweDVjMDAwMDAwLCAweDA0MDFmN2Y5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsIDB4NWMwMDAwMDAsIDB4MDQwMWY3ZjksCiAJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NiwgMHg0ZDJjMDAwMCwKIAkweDU4Y2MwMDAyLCAweDgwMDI1ZDQwLCAweDA0MDAwMDA3LCAweDU5MmMwMDAwLAotCTB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZjQsIDB4NWMwMDAwMDAsCisJMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDgzYSwgMHg1YzAwMDAwMCwKIAkweDA0MDFmN2Y5LCAweDQ5Nzk5ODAwLCAweDQ5Nzk5ODAyLCAweDQ5Nzk5ODAxLAogCTB4NDk3OTk4MDMsIDB4NDk3OTk4MDYsIDB4NDk3OTk4MDcsIDB4NDk3OTk4MDgsCiAJMHg0OTc5OTgwOSwgMHg0OTc5OTgwYSwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKIAkweDAwMDAwMDAzLCAweDAwMDAwMDA2LCAweDAwMDAwMDA5LCAweDAwMDAwMDBjLAogCTB4MDAwMDAwMGYsIDB4MDAwMDAwMTIsIDB4NDgwM2M4NTYsIDB4MDQwMWY4NTcsCiAJMHg0YTAwYzIwNCwgMHgwMDAwMDAzYywgMHg1OTMwMTAwOSwgMHg4MjA4MDU4MCwKLQkweDAwMTBiNTI0LCAweDA0MDAwMDEzLCAweDU4MDgwODAyLCAweDgyMDQwZDAwLAorCTB4MDAxMGIzMjAsIDB4MDQwMDAwMTMsIDB4NTgwODA4MDIsIDB4ODIwNDBkMDAsCiAJMHgwMGZmZmZmZiwgMHg1ODA4MDQwMywgMHg0ODA0YzAwNSwgMHg0ODAwYzQwNiwKIAkweDRhMDBjMjA3LCAweDAwMDAwMDAzLCAweDU5MzAwODExLCAweDU4NWMwNDA0LAogCTB4NDk3OGMyMDYsIDB4NDgwNGM0MDcsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMGQsCkBAIC02NDU3LDE3ICs2Mjc5LDE3IEBACiAJMHg0YTAwYzQwNiwgMHgwMDAwMDdmZiwgMHg0OTc4YzIwNywgMHgwNDAxZjdlZiwKIAkweDgyNjAzYzAwLCAweDAwMDAwMDA4LCAweDU4NjA1NDA0LCAweDQwMjgyMDAwLAogCTB4NDA1YzYwMDAsIDB4NTg1YzBhMDQsIDB4ODIwNDBkMDAsIDB4MDAwMDAwMGYsCi0JMHg4MjA0MGMwMCwgMHgwMDEwMTBiZCwgMHg1MDA0NDAwMCwgMHg4MDAwNGQ4MCwKKwkweDgyMDQwYzAwLCAweDAwMTAxMTBkLCAweDUwMDQ0MDAwLCAweDgwMDA0ZDgwLAogCTB4NTAyMDAwMDAsIDB4ODAzMDc0MDAsIDB4NTgzODA0MDIsIDB4OGMyNDRkMDAsCiAJMHgwNDAyMDAwMywgMHg0ODAwM2EwMCwgMHgwNDAxZjAwMywgMHg0ODAwM2MwMCwKIAkweDgwMWMzODAwLCAweDgwMjQ0ODAwLCAweDgwMTAyMDQwLCAweDA0MDAwMDA2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDEwOWIsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTBlYiwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKIAkweDA0MDFmN2YwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzQwMDAwLAotCTB4NTkzMDAwMDksIDB4ODAwMjZkNDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCisJMHg1OTMwMDAwOSwgMHg4MDAyNmQ0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKIAkweDU5MzQwNDAxLCAweDgwMDAwNTQwLCAweDA0MDAwMDBlLCAweDU5ODQwMDAwLAogCTB4ODAwMDA1NDAsIDB4MDQwMDAwMGIsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCiAJMHgwNDAyMDAwOCwgMHg1OTM0MWMwMywgMHg0MjAwMjAwMCwgMHgwMDAwMDAwNCwKLQkweDQyMDAzMDAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTAzYWFlLAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDM4YzcsCiAJMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg4MDAwMTU4MCwKIAkweDU4YzgwYzAxLCAweDU5MzAwMDExLCAweDgwMDQwYzgwLCAweDQ4MDY2MDExLAogCTB4NThjODAyMDEsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDUsIDB4ODAwODEwMDAsCkBAIC02NDgwLDE3MiArNjMwMiwxNzYgQEAKIAkweDU5MzQwMDBlLCAweDgwMDA2ZDQwLCAweDA0MDAwMDEwLCAweDgxMzAwNTgwLAogCTB4MDQwMjAwMDQsIDB4NTgzNDAwMDAsIDB4NDgwMjY4MGUsIDB4MDQwMWYwMGEsCiAJMHg0MDM0NzgwMCwgMHg1ODM0MDAwMCwgMHg4MDAwNmQ0MCwgMHgwMjAwMDgwMCwKLQkweDAwMTAwNWQ4LCAweDgxMzAwNTgwLCAweDA0MDIwN2ZhLCAweDU4MzQwMDAwLAorCTB4MDAxMDA2MTUsIDB4ODEzMDA1ODAsIDB4MDQwMjA3ZmEsIDB4NTgzNDAwMDAsCiAJMHg0ODAwNzgwMCwgMHg0OTdhNjAwMCwgMHg0YTAzNzBlNSwgMHgwMDAyMDAwMCwKIAkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLCAweDRkMmMwMDAwLAogCTB4NDIwMDA4MDAsIDB4MDAwMDAzZmYsIDB4NGEwMzcwZTUsIDB4MDAwMjAwMDAsCiAJMHg1OWI4MDBlNSwgMHg4YzAwMDUyNCwgMHgwNDAwMDAwNSwgMHg4MDA0MDg0MCwKLQkweDA0MDIwN2ZhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRhMDM3MGU1LAorCTB4MDQwMjA3ZmEsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NGEwMzcwZTUsCiAJMHgwMDAzMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg1OWI4MDBlNSwKIAkweDhjMDAwNTI0LCAweDA0MDIwN2YxLCAweDU5MzQwMDBlLCAweDgwMDI2NTQwLAogCTB4MDQwMDAwMGUsIDB4NDkzM2M4NTcsIDB4NTkzMDAwMDAsIDB4NDgwMjY4MGUsCiAJMHg0YTAyNjIwMywgMHgwMDAwMDAwNCwgMHg0OTdhNjIwNiwgMHg0OTdhNjAwOSwKIAkweDRhMDI2MDA3LCAweDAwMDAwMTAxLCAweDU5MzI1ODA4LCAweDQ5N2E1YzA4LAotCTB4MDQwMWZkODEsIDB4MDQwMWY3ZjEsIDB4NGEwMzcwZTUsIDB4MDAwMjAwMDAsCisJMHgwNDAxZmQ4MiwgMHgwNDAxZjdmMSwgMHg0YTAzNzBlNSwgMHgwMDAyMDAwMCwKIAkweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAotCTB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDVjOWEsIDB4MDQwMjAwMTEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDVhNiwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKLQkweDVjMDAwMDAwLCAweDQ4MDI2ODAyLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDU5YjksIDB4MDQwMjAwMTEsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDNmYywgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwKKwkweDVjMDAwMDAwLCAweDQ4MDI2ODAyLCAweDAyMDFmODAwLCAweDAwMDIwODkyLAogCTB4MDQwMDAwMDksIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDAyMDdhMSwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMDIwOGQ4LAogCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsCi0JMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzYzg1NywKLQkweDBjMDFmMDAxLCAweDAwMTA2NTAzLCAweDAwMTA2NTAzLCAweDAwMTA2NTAzLAotCTB4MDAxMDY1MDUsIDB4MDAxMDY1NjUsIDB4MDAxMDY1MDMsIDB4MDAxMDY1MDMsCi0JMHgwMDEwNjViNywgMHgwMDEwNjViOCwgMHgwMDEwNjUwMywgMHgwMDEwNjUwMywKLQkweDAwMTA2NTAzLCAweDAwMTA2NTAzLCAweDAwMTA2NTAzLCAweDAyMDFmODAwLAotCTB4MDAxMDA1ZDgsIDB4NDkzYmM4NTcsIDB4ODMzODA0ODAsIDB4MDAwMDAwNTAsCi0JMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0OSwKLQkweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA2NTE4LAotCTB4MDAxMDY1M2EsIDB4MDAxMDY1MTYsIDB4MDAxMDY1MTYsIDB4MDAxMDY1MTYsCi0JMHgwMDEwNjUxNiwgMHgwMDEwNjU0OSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDAwMDAwMDBlLCAweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDQ4MDNjODU3LAorCTB4MGMwMWYwMDEsIDB4MDAxMDYyM2IsIDB4MDAxMDYyM2IsIDB4MDAxMDYyM2IsCisJMHgwMDEwNjIzZCwgMHgwMDEwNjI5ZCwgMHgwMDEwNjIzYiwgMHgwMDEwNjIzYiwKKwkweDAwMTA2MmVmLCAweDAwMTA2MmYwLCAweDAwMTA2MjNiLCAweDAwMTA2MjNiLAorCTB4MDAxMDYyM2IsIDB4MDAxMDYyM2IsIDB4MDAxMDYyM2IsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHg0OTNiYzg1NywgMHg4MzM4MDQ4MCwgMHgwMDAwMDA1MCwKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDgzMzgwNDgwLCAweDAwMDAwMDQ5LAorCTB4MDIwMDE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWYwMDEsIDB4MDAxMDYyNTAsCisJMHgwMDEwNjI3MiwgMHgwMDEwNjI0ZSwgMHgwMDEwNjI0ZSwgMHgwMDEwNjI0ZSwKKwkweDAwMTA2MjRlLCAweDAwMTA2MjgxLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAogCTB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4NTkyYzAyMDYsIDB4NDgwMjVjMDYsCiAJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg0YzVjMDAwMCwgMHg1OTJjYmMwYSwKLQkweDU5MmMwMDAwLCAweDQ4MDI2MDA4LCAweDAyMDFmODAwLCAweDAwMTA0Y2RlLAorCTB4NTkyYzAwMDAsIDB4NDgwMjYwMDgsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODUsCiAJMHg1OTMwMDAwOCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwOCwgMHg0YTAyNjIwMywKIAkweDAwMDAwMDA3LCAweDQyMDI3MDAwLCAweDAwMDAwMDQzLCAweDVjMDBiODAwLAogCTB4NWMwMjU4MDAsIDB4MDQwMWYwOGEsIDB4OGM1Y2JkMDgsIDB4MDQwMjAwMDYsCiAJMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHg0OTdhNjIwNiwgMHg0OTdhNjAwOCwKLQkweDA0MDFmMDAzLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDVjMDBiODAwLAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZiOGEsCi0JMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywKKwkweDA0MDFmMDAzLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LCAweDVjMDBiODAwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDY4YzEsCisJMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwKIAkweDA0MDAwMDA2LCAweDRkNDAwMDAwLCAweDQyMDI4MDAwLCAweDAwMDAwMDAxLAotCTB4MDQwMWY4ZjgsIDB4NWMwMjgwMDAsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwgMHgwMDEwNmI4YSwgMHg0ZDNjMDAwMCwKLQkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLCAweDVjMDI3ODAwLAotCTB4NDIwMDMwMDAsIDB4MDAwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NDIsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKLQkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAorCTB4MDQwMWY5MGUsIDB4NWMwMjgwMDAsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDhiNCwgMHgwMjAxZjgwMCwgMHgwMDEwNjhjMSwgMHg0ZDNjMDAwMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDVjMDI3ODAwLAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMGE3NjYsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjY2MywgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwKKwkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LAogCTB4MDQwMDAwMDYsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMjksCi0JMHgwNDAxZjhkYywgMHg1YzAyODAwMCwgMHg1YzAyNTgwMCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzdkLCAweDQ5M2JjODU3LCAweDQ5N2E2MjA2LCAweDgzMzgwNDgwLAotCTB4MDAwMDAwNTQsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODMzODA0ODAsCi0JMHgwMDAwMDA0NywgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwKLQkweDAwMTA2NWI2LCAweDAwMTA2NTdmLCAweDAwMTA2NTdkLCAweDAwMTA2NTdkLAotCTB4MDAxMDY1N2QsIDB4MDAxMDY1N2QsIDB4MDAxMDY1N2QsIDB4MDAxMDY1N2QsCi0JMHgwMDEwNjU3ZCwgMHgwMDEwNjU3ZCwgMHgwMDEwNjU3ZCwgMHgwMDEwNjU3ZCwKLQkweDAwMTA2NTgzLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDU5MzAwMDExLAorCTB4MDQwMWY4ZjIsIDB4NWMwMjgwMDAsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDhiNCwgMHg0OTNiYzg1NywgMHg0OTdhNjIwNiwgMHg4MzM4MDQ4MCwKKwkweDAwMDAwMDU0LCAweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDgzMzgwNDgwLAorCTB4MDAwMDAwNDcsIDB4MDIwMDE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWYwMDEsCisJMHgwMDEwNjJlZSwgMHgwMDEwNjJiNywgMHgwMDEwNjJiNSwgMHgwMDEwNjJiNSwKKwkweDAwMTA2MmI1LCAweDAwMTA2MmI1LCAweDAwMTA2MmI1LCAweDAwMTA2MmI1LAorCTB4MDAxMDYyYjUsIDB4MDAxMDYyYjUsIDB4MDAxMDYyYjUsIDB4MDAxMDYyYjUsCisJMHgwMDEwNjJiYiwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg1OTMwMDAxMSwKIAkweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDA0MDIwMDM0LCAweDU5ODQwODAyLAogCTB4OGMwNDBkMDQsIDB4MDQwMDAwMjUsIDB4NTkzMDAwMDksIDB4ODAwMjZkNDAsCiAJMHgwNDAwMDAxZiwgMHg0YzVjMDAwMCwgMHg0YzYwMDAwMCwgMHg0OTdhNjIwNiwKIAkweDU5MzBiODA4LCAweDU4NWMwMDA1LCAweDgwMDBjNTQwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4MDQwMWZlOGQsIDB4NDA2MjU4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNGNkZSwgMHg0OTc4YjgwNSwgMHgwNDAxZmVmNSwgMHg0OTdhNjAwOSwKLQkweDU4NWMzNDA4LCAweDA0MDFmY2JkLCAweDA0MDAwMDBlLCAweDQyMDAxMDAwLAotCTB4MDAxMGI1MTksIDB4MDQwMWZjZjIsIDB4MDQwMDAwMGEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDdlNCwgMHgwNDAwMDAwNywgMHg0OTJjYjgwNSwgMHg1ODVjNTQwOCwKLQkweDA0MDFmYzgzLCAweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLAotCTB4MDQwMWZjYTksIDB4MDQwMWY3ZmMsIDB4OGMwNDBkMDYsIDB4MDQwMjA3ZmMsCisJMHgwMDEwMDYxNSwgMHgwNDAxZmU4ZCwgMHg0MDYyNTgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzg1LCAweDQ5NzhiODA1LCAweDA0MDFmZWY1LCAweDQ5N2E2MDA5LAorCTB4NTg1YzM0MDgsIDB4MDQwMWZjYmUsIDB4MDQwMDAwMGUsIDB4NDIwMDEwMDAsCisJMHgwMDEwYjMxNSwgMHgwNDAxZmNmMywgMHgwNDAwMDAwYSwgMHgwMjAxZjgwMCwKKwkweDAwMTAwODJhLCAweDA0MDAwMDA3LCAweDQ5MmNiODA1LCAweDU4NWM1NDA4LAorCTB4MDQwMWZjODQsIDB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsCisJMHgwNDAxZmNhYSwgMHgwNDAxZjdmYywgMHg4YzA0MGQwNiwgMHgwNDAyMDdmYywKIAkweDU5MzAwMDA5LCAweDgwMDI2ZDQwLCAweDA0MDAwMDA2LCAweDU5MzQwMDBlLAotCTB4ODAwMDA1NDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NDk3YTYwMDksCi0JMHgwNDAxZmQwZCwgMHgwNDAxZjdmMiwgMHgwNDAxZjA2ZiwgMHg0ODAzYzg1NiwKKwkweDgwMDAwNTQwLCAweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDQ5N2E2MDA5LAorCTB4MDQwMWZkMGUsIDB4MDQwMWY3ZjIsIDB4MDQwMWYwODUsIDB4NDgwM2M4NTYsCiAJMHg0ODAzYzg1NiwgMHg4MzM4MDU4MCwgMHgwMDAwMDA0MywgMHgwMjAyMDgwMCwKLQkweDAwMTAwNWQ4LCAweDRhMDI2MjAzLCAweDAwMDAwMDAzLCAweDQ5M2E2NDAzLAorCTB4MDAxMDA2MTUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsIDB4NDkzYTY0MDMsCiAJMHg1OTMyNTgwOCwgMHg1OTJjMDAwZiwgMHg0ODAyNjAxMSwgMHg0OTdhNjAxMywKIAkweDU5MmMwNDA2LCAweDgwMDAwMGMyLCAweDgwMDAxMGM0LCAweDgwMDgxNDAwLAotCTB4NDgwYTYyMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDBmNGUsIDB4NDIwMDA4MDAsCi0JMHg4MDAwMDA2MCwgMHgwNDAxZjE1NCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg3NSwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5MzAwMjAzLCAweDgyMDAwYzgwLAotCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwM2M4NTcsCisJMHg0ODBhNjIwNiwgMHgwMjAxZjgwMCwgMHgwMDEwMGY5YywgMHg0MjAwMDgwMCwKKwkweDgwMDAwMDYwLCAweDA0MDFmMTYxLCAweDQyMDAwMDAwLCAweDAwMTBiNjc0LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsCisJMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHg0ODAzYzg1NywKIAkweDgyMDAwZDgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA2LCAweDgyMDAwZDgwLAotCTB4MDAwMDAwMDQsIDB4MDQwMDAwNDUsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwKLQkweDA0MDIwMDA3LCAweDAyMDFmODAwLCAweDAwMTA2YjZjLCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4MDIwMWYwMDAsIDB4MDAxMDZjNGIsIDB4MDQwMWY5YzMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwgMHg1OTMyNTgwOCwgMHg0MjAyODAwMCwKLQkweDAwMDAwMDA2LCAweDA0MDFmODRiLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAorCTB4MDAwMDAwMDQsIDB4MDQwMDAwNWIsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywgMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwKKwkweDA0MDIwMDA3LCAweDAyMDFmODAwLCAweDAwMTA2OGEzLCAweDAyMDIwODAwLAorCTB4MDAxMDA2MTUsIDB4MDIwMWYwMDAsIDB4MDAxMDY5ODIsIDB4MDQwMWY5ZDMsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjk4MiwgMHg1OTMyNTgwOCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDA2LCAweDA0MDFmODYxLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LAogCTB4NDgwM2M4NTYsIDB4NTkzMDAyMDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsCi0JMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMywKLQkweDA0MDAwMDA2LCAweDgyMDAwZDgwLCAweDAwMDAwMDA0LCAweDA0MDAwMDIzLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwgMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwKLQkweDA0MDIwMDA2LCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4MDQwMWYwMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDhjZDYsCi0JMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmU2MiwgMHgwNDAyMDAwYSwKLQkweDA0MDFmOTlhLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDVjMDNlMDAwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCi0JMHgxYzAxZjAwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwKLQkweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAotCTB4MDAxMDBlOTksIDB4NDkzM2M4NTcsIDB4NGM1YzAwMDAsIDB4NGQzNDAwMDAsCi0JMHg0OTdhNjIwNiwgMHg1OTMwYjgwOCwgMHg1OTMwMDAwOSwgMHg4MDAyNmQ0MCwKLQkweDA0MDIwZTVmLCAweDQyMDAxMDAwLCAweDAwMTBiNTE5LCAweDA0MDFmYzYwLAotCTB4MDQwMDAwMDksIDB4NThjODAyMDQsIDB4NDgwMGJjMDgsIDB4NDE3ODUwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjIyNywgMHg1YzAyNjgwMCwgMHg1YzAwYjgwMCwKLQkweDFjMDFmMDAwLCAweDQ5NzhiYzA4LCAweDA0MDFmYzE3LCAweDA0MDFmN2ZiLAotCTB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMGYsCi0JMHg1OTJjMDAwMCwgMHg4MDAwMGQ0MCwgMHgwNDAwMDAwOSwgMHg0OTdhNTgwMCwKLQkweDQ5NDI1YTA2LCAweDRjMDQwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAotCTB4NWMwMDA4MDAsIDB4NDAwNjU4MDAsIDB4MDQwMWY3ZjYsIDB4NDk0MjVhMDYsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKLQkweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDBlLCAweDA0MDAwMDA0LAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMjAwMDQsIDB4MDQwMWZmZTUsCi0JMHg0OTdhNjAwOCwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg1OTJlNjAwOSwKLQkweDgzMzAwNDgwLCAweDAwMTBkMWMwLCAweDA0MDAxMDE2LCAweDQxNTgwMDAwLAotCTB4ODEzMDA0ODAsIDB4MDQwMjEwMTMsIDB4NDAwNDAwMDAsIDB4NTkzMDBjMDYsCi0JMHg4MDA0MDU4MCwgMHgwNDAyMDAxMiwgMHg1OTMwMGEwMywgMHg4MjA0MDU4MCwKLQkweDAwMDAwMDA3LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU5MzAwMDA4LAotCTB4ODAwMDA1NDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDc3ZCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNDAxZjAwOSwKLQkweDQyMDAwMDAwLCAweDAwMDAwMDA4LCAweDA0MDFmMDA2LCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMDcsIDB4MDQwMjA3ZmIsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDUsCi0JMHg1OTJjMGEwNiwgMHg0ODA2NWMwNiwgMHg0ODAyNWEwNiwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMmRhLCAweDRjMGMwMDAwLCAweDRjMTAwMDAwLCAweDRjMTQwMDAwLAotCTB4NGMxODAwMDAsIDB4ODAwMDFkODAsIDB4ODAwMDI1ODAsIDB4NDIwMDMwMDAsCi0JMHgwMDAwMDAyMCwgMHg4MjA0MDUwMCwgMHgwMDAwMDAwMSwgMHgwNDAwMDAwMywKLQkweDQwMDgwMDAwLCAweDgwMGMxYzAwLCAweDQwMGMyODAwLCAweDgwMGMxOTAyLAotCTB4ODAxMDIxMDIsIDB4ODIxNDA1MDAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDMsCi0JMHg4MjEwMjU0MCwgMHg4MDAwMDAwMCwgMHg4MDA0MDkwMiwgMHg4MDE4MzA0MCwKLQkweDA0MDIwN2YxLCAweDQwMTAwODAwLCAweDQwMGMwMDAwLCAweDVjMDAzMDAwLAotCTB4NWMwMDI4MDAsIDB4NWMwMDIwMDAsIDB4NWMwMDE4MDAsIDB4MWMwMWYwMDAsCi0JMHg0YzU4MDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAyMCwgMHg4MDAwMDU0MCwKLQkweDA0MDAwMDE4LCAweDgwMDQxYzgwLCAweDA0MDIxMDE2LCAweDgwMDgxMGMyLAotCTB4ODAwNDA5ODIsIDB4MDQwMDEwMDYsIDB4ODAwNDFjODAsIDB4MDQwMjEwMDUsCi0JMHg4MDU4YjA0MCwgMHgwNDAyMDdmYSwgMHgwNDAxZjAwNiwgMHg4MDA0MWM4MCwKLQkweDQwMGMwODAwLCAweDgwMDgxMDAwLCAweDgwNThiMDQwLCAweDA0MDIwN2Y0LAotCTB4NGMwMDAwMDAsIDB4NDFmMDAwMDAsIDB4ODIwMDA1MDAsIDB4ZjdmZmZmZmYsCi0JMHg0MDAzZTAwMCwgMHg1YzAwMDAwMCwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwKLQkweDRjMDAwMDAwLCAweDQxZjAwMDAwLCAweDgyMDAwNTQwLCAweDA4MDAwMDAwLAotCTB4MDQwMWY3ZjgsIDB4NGEwMzc4ZTgsIDB4MDAwMDAwMDAsIDB4NGEwM2M4MjEsCi0JMHgwMDAwMDAxMCwgMHg0YTAzYzgyMywgMHgwMDAwMDAwNCwgMHgwNDAxZjgyYywKLQkweDRhMDM3OGU5LCAweDAwMDAzYTBkLCAweDRhMDM3OGU4LCAweDAwMDAwMDAxLAotCTB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsIDB4NTAwMDAwMDAsIDB4ODIwMDA0ODAsCi0JMHgyNDIyMDAwMSwgMHgwNDAwMDAwNCwgMHg1OWUwMDAwMiwgMHg4NDAwMDU0OCwKLQkweDQ4MDNjMDAyLCAweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDQyMDNhMDAwLAotCTB4MDAwMDc2MDAsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsIDB4NTAwMDAwMDAsCi0JMHg4MjAwMDQ4MCwgMHgyNDMyMDAwMSwgMHgwNDAyMTAwMywgMHg0YTAzYTAwNSwKLQkweGQwMDAwMDAxLCAweDU5ZDAwMDA2LCAweDRhMDNhMDA1LCAweDkwMDAwMDAxLAotCTB4ODNkM2E0MDAsIDB4MDAwMDAwMjAsIDB4ODAwNDA4NDAsIDB4MDQwMjA3ZmEsCi0JMHg1OWUwMDAwMywgMHg4MjAwMDUwMCwgMHhmZmZmZmZlMCwgMHg4MjAwMDU0MCwKLQkweDAwMDA4MDAwLCAweDQ4MDNjMDAzLCAweDU5YzQwMDA2LCAweDgyMDAwNTAwLAotCTB4ZmZmY2ZmZmYsIDB4NDgwMzg4MDYsIDB4MWMwMWYwMDAsIDB4NGQ5MDAwMDAsCi0JMHg0ZDE4MDAwMCwgMHg0YTAzNzhlNywgMHhhYWFhYWFhYSwgMHg0YTAzNzhlNiwKLQkweGFhYWFhYWFhLCAweDRhMDM3OGU1LCAweGFhYWFhYWFhLCAweDRhMDM3OGU0LAotCTB4YWFhYWFhYWEsIDB4NDIwMDA4MDAsIDB4MDAwMGJmMDAsIDB4NGEwMDA4MWEsCi0JMHgwMDEwYjdkNCwgMHg0YTAwMDgxYiwgMHgwMDEwMTBiZCwgMHg0YTAwMDgxYywKLQkweDAwMTAxMGNkLCAweDRhMDMxODAwLCAweDAwMDAwMDAwLCAweDRhMDMxODAxLAotCTB4MDAxMGI1NDQsIDB4NGEwMzE4MDIsIDB4MDAxMGI1NGIsIDB4NDIwMDA4MDAsCi0JMHgwMDEwYjdkNywgMHg0MTdhMzAwMCwgMHg4MTFiMjBjOCwgMHg4MzkzMjQwMCwKLQkweDAwMDBiZjMyLCAweDQ4MDcyMDAwLCAweDRhMDMyMDAxLCAweDAwMDAwMDAwLAotCTB4ODMxODA0MDAsIDB4MDAxMDcwZWEsIDB4NTAwMDAwMDAsIDB4NDgwMzIwMDIsCi0JMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywgMHg4MTFhMzAwMCwgMHg4MzE4MDQ4MCwKLQkweDAwMDAwMDA1LCAweDA0MDAxN2YxLCAweDVjMDIzMDAwLCAweDVjMDMyMDAwLAotCTB4MWMwMWYwMDAsIDB4NDgwNjYwMDQsIDB4NDk3YTYwMDAsIDB4NDk3YTYwMDEsCi0JMHg1OWJjMDBlYSwgMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwgMHg4MzMwMDQwMCwKLQkweGEwMDAwMDAwLCAweDQ4MDM3OGUxLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAotCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4NDgwNjYwMDQsIDB4NDk3YTYwMDAsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwKKwkweDA0MDAwMDA5LCAweDgyMDAwZDgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDE5LAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMzYsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwKKwkweDgxMmU1OWMwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDU5MmMxYTA4LAorCTB4OGMwYzFkMGUsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NGQ0MDAwMDAsCisJMHg0MjAyODAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjg0MCwgMHgwMjAxZjgwMCwKKwkweDAwMTA3Njk4LCAweDVjMDI4MDAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDY5OGMsIDB4NGRmMDAwMDAsCisJMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwgMHgwNDAyMDAwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA2Y2I0LCAweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDA0MDFmMDEwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDhhOGEsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmJiMiwgMHgwNDAyMDAwYSwgMHgwNDAxZjk5NCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNjE1LCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2OTgyLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTAwZWU0LCAweDQ5MzNjODU3LAorCTB4NGM1YzAwMDAsIDB4NGQzNDAwMDAsIDB4NDk3YTYyMDYsIDB4NTkzMGI4MDgsCisJMHg1OTMwMDAwOSwgMHg4MDAyNmQ0MCwgMHgwNDAyMGU0OSwgMHg0MjAwMTAwMCwKKwkweDAwMTBiMzE1LCAweDA0MDFmYzRiLCAweDA0MDAwMDA5LCAweDU4YzgwMjA0LAorCTB4NDgwMGJjMDgsIDB4NDE3ODUwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDVmNjAsCisJMHg1YzAyNjgwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0OTc4YmMwOCwKKwkweDA0MDFmYzAyLCAweDA0MDFmN2ZiLCAweDQ4MDNjODU2LCAweDAyMDFmODAwLAorCTB4MDAxMDhkZjQsIDB4MDQwMDAwMGYsIDB4NTkyYzAwMDAsIDB4ODAwMDBkNDAsCisJMHgwNDAwMDAwOSwgMHg0OTdhNTgwMCwgMHg0OTQyNWEwNiwgMHg0YzA0MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDVjMDAwODAwLCAweDQwMDY1ODAwLAorCTB4MDQwMWY3ZjYsIDB4NDk0MjVhMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDBlLCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLCAweDAwMDAwMDA5LAorCTB4MDQwMjAwMDQsIDB4MDQwMWZmZTUsIDB4NDk3YTYwMDgsIDB4ODAwMDA1ODAsCisJMHgxYzAxZjAwMCwgMHg1OTJlNjAwOSwgMHg4MzMwMDQ4MCwgMHgwMDEwY2ZjMCwKKwkweDA0MDAxMDE2LCAweDQxNTgwMDAwLCAweDgxMzAwNDgwLCAweDA0MDIxMDEzLAorCTB4NDAwNDAwMDAsIDB4NTkzMDBjMDYsIDB4ODAwNDA1ODAsIDB4MDQwMjAwMTIsCisJMHg1OTMwMGEwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwNywgMHgwMjAyMDgwMCwKKwkweDAwMTAwNjE1LCAweDU5MzAwMDA4LCAweDgwMDAwNTQwLCAweDAyMDIwODAwLAorCTB4MDAxMDA2MTUsIDB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwNDAxZjAwOSwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwOCwKKwkweDA0MDFmMDA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDA3LCAweDA0MDIwN2ZiLAorCTB4NDIwMDAwMDAsIDB4MDAwMDAwMDUsIDB4NTkyYzBhMDYsIDB4NDgwNjVjMDYsCisJMHg0ODAyNWEwNiwgMHgwMjAxZjAwMCwgMHgwMDAyMDM4MSwgMHg0YzBjMDAwMCwKKwkweDRjMTAwMDAwLCAweDRjMTQwMDAwLCAweDRjMTgwMDAwLCAweDgwMDAxZDgwLAorCTB4ODAwMDI1ODAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMjAsIDB4ODIwNDA1MDAsCisJMHgwMDAwMDAwMSwgMHgwNDAwMDAwMywgMHg0MDA4MDAwMCwgMHg4MDBjMWMwMCwKKwkweDQwMGMyODAwLCAweDgwMGMxOTAyLCAweDgwMTAyMTAyLCAweDgyMTQwNTAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMDAwMDMsIDB4ODIxMDI1NDAsIDB4ODAwMDAwMDAsCisJMHg4MDA0MDkwMiwgMHg4MDE4MzA0MCwgMHgwNDAyMDdmMSwgMHg0MDEwMDgwMCwKKwkweDQwMGMwMDAwLCAweDVjMDAzMDAwLCAweDVjMDAyODAwLCAweDVjMDAyMDAwLAorCTB4NWMwMDE4MDAsIDB4MWMwMWYwMDAsIDB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAyMCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxOCwgMHg4MDA0MWM4MCwKKwkweDA0MDIxMDE2LCAweDgwMDgxMGMyLCAweDgwMDQwOTgyLCAweDA0MDAxMDA2LAorCTB4ODAwNDFjODAsIDB4MDQwMjEwMDUsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmEsCisJMHgwNDAxZjAwNiwgMHg4MDA0MWM4MCwgMHg0MDBjMDgwMCwgMHg4MDA4MTAwMCwKKwkweDgwNThiMDQwLCAweDA0MDIwN2Y0LCAweDRjMDAwMDAwLCAweDQxZjAwMDAwLAorCTB4ODIwMDA1MDAsIDB4ZjdmZmZmZmYsIDB4NDAwM2UwMDAsIDB4NWMwMDAwMDAsCisJMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg0MWYwMDAwMCwKKwkweDgyMDAwNTQwLCAweDA4MDAwMDAwLCAweDA0MDFmN2Y4LCAweDQyMDA3MDAwLAorCTB4MDAxMGIzM2YsIDB4NGEwMDcwMDAsIDB4MDAwMDAwMDUsIDB4NGEwMDc0MDEsCisJMHgwMDAwMDAwMCwgMHg0YTAwNzIwMiwgMHgwMDAwMDg0MCwgMHg0YTAzNzhlOCwKKwkweDAwMDAwMDAwLCAweDRhMDNjODIxLCAweDAwMDAwMDEwLCAweDRhMDNjODIzLAorCTB4MDAwMDAwMDQsIDB4MDQwMWY4MWQsIDB4NGEwMzc4ZTksIDB4MDAwMDNhMGQsCisJMHg0YTAzNzhlOCwgMHgwMDAwMDAwMSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwKKwkweDQyMDNhMDAwLCAweDAwMDA3NjAwLCAweDRhMDNhMDA1LCAweGQwMDAwMDAxLAorCTB4NTlkMDAwMDYsIDB4NGEwM2EwMDUsIDB4OTAwMDAwMDEsIDB4ODNkM2E0MDAsCisJMHgwMDAwMDAyMCwgMHg4MDA0MDg0MCwgMHgwNDAyMDdmYSwgMHg1OWUwMDAwMywKKwkweDgyMDAwNTAwLCAweGZmZmZmZmUwLCAweDgyMDAwNTQwLCAweDAwMDA4MDAwLAorCTB4NDgwM2MwMDMsIDB4NTljNDAwMDYsIDB4ODIwMDA1MDAsIDB4ZmZmY2ZmZmYsCisJMHg0ODAzODgwNiwgMHgxYzAxZjAwMCwgMHg0ZDkwMDAwMCwgMHg0ZDE4MDAwMCwKKwkweDRhMDM3OGU3LCAweGFhYWFhYWFhLCAweDRhMDM3OGU2LCAweGFhYWFhYWFhLAorCTB4NGEwMzc4ZTUsIDB4YWFhYWFhYWEsIDB4NGEwMzc4ZTQsIDB4YWFhYWFhYWEsCisJMHg0YTAzNzgxYSwgMHgwMDEwYjVkMiwgMHg0YTAzNzgxYiwgMHgwMDEwMTEwZCwKKwkweDRhMDM3ODFjLCAweDAwMTAxMTFkLCAweDRhMDMxODAwLCAweDAwMDAwMDAwLAorCTB4NGEwMzE4MDEsIDB4MDAxMGIzNDIsIDB4NGEwMzE4MDIsIDB4MDAxMGIzNDksCisJMHg0MjAwMDgwMCwgMHgwMDEwYjVkNSwgMHg0MTdhMzAwMCwgMHg4MTFiMjBjOCwKKwkweDgzOTMyNDAwLCAweDAwMDBiZjMyLCAweDQ4MDcyMDAwLCAweDRhMDMyMDAxLAorCTB4MDAwMDAwMDAsIDB4ODMxODA0MDAsIDB4MDAxMDZlNDEsIDB4NTAwMDAwMDAsCisJMHg0ODAzMjAwMiwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywgMHg4MTFhMzAwMCwKKwkweDgzMTgwNDgwLCAweDAwMDAwMDA1LCAweDA0MDAxN2YxLCAweDVjMDIzMDAwLAorCTB4NWMwMzIwMDAsIDB4MWMwMWYwMDAsIDB4NDgwNjYwMDQsIDB4NDk3YTYwMDAsCisJMHg0OTdhNjAwMSwgMHg1OWJjMDBlYSwgMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwKKwkweDgzMzAwNDAwLCAweGEwMDAwMDAwLCAweDQ4MDM3OGUxLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NTkzMDA4MDQsIDB4ODIwNDBkMDAsIDB4MDAwMDAxMDAsCisJMHg4MjA0MGQ0MCwgMHg4MDAwMDA0MCwgMHg0ODA2NjAwNCwgMHg0OTdhNjAwMCwKIAkweDU5YmMwMGVhLCAweDhjMDAwNTE2LCAweDA0MDIwN2ZlLCAweDgzMzAwNDAwLAogCTB4NjAwMDAwMDAsIDB4NDgwMzc4ZTEsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwgMHg0ZDMwMDAwMCwgMHg0ZDM0MDAwMCwKKwkweDAwMTA2OThjLCAweDRkZjAwMDAwLCAweDRkMzAwMDAwLCAweDRkMzQwMDAwLAogCTB4NGQyYzAwMDAsIDB4NGQxODAwMDAsIDB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsCiAJMHg0ZDkwMDAwMCwgMHg0ZGQwMDAwMCwgMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwKIAkweDQyMDAzMDAwLCAweDAwMDBiZjJlLCAweDU4MWE2MDAxLCAweDgxMzI2MWMwLApAQCAtNjY1NCw0MzggKzY0ODAsNDQwIEBACiAJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwNiwgMHgwNDAyMDAwMywgMHg4ZDNlN2QxOCwKIAkweDA0MDAwMDEwLCAweDhkM2U3ZDA2LCAweDA0MDAwMDA3LCAweDgyMDAwNTgwLAogCTB4MDAwMDAwMDMsIDB4MDQwMjAwMDQsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsCi0JMHgwNDAyMDAwOCwgMHgwNDAxZjkyZiwgMHg0YzBjMDAwMCwgMHg0YzE0MDAwMCwKLQkweDA0MDFmYjVmLCAweDVjMDAyODAwLCAweDVjMDAxODAwLCAweDA0MDFmMDA1LAorCTB4MDQwMjAwMDgsIDB4MDQwMWY5MmQsIDB4NGMwYzAwMDAsIDB4NGMxNDAwMDAsCisJMHgwNDAxZmI1OSwgMHg1YzAwMjgwMCwgMHg1YzAwMTgwMCwgMHgwNDAxZjAwNSwKIAkweDQxMzAxODAwLCAweDgwNjBjMWMwLCAweDA0MDIwMDAyLCAweDQwMGNjMDAwLAogCTB4ODA1Y2I5YzAsIDB4MDQwMDAwMDMsIDB4NDA1ZTYwMDAsIDB4MDQwMWY3ZTMsCiAJMHg1YzAyNjAwMCwgMHg4MTMyNjFjMCwgMHgwNDAwMDAwNiwgMHg4MDYwYzFjMCwKIAkweDA0MDAwMDAyLCAweDQwNjAyODAwLCAweDQxNzhjMDAwLCAweDA0MDFmN2Q4LAotCTB4NDE3YTMwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDcwZDgsIDB4NTk5MjYwMDQsCisJMHg0MTdhMzAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmUyZiwgMHg1OTkyNjAwNCwKIAkweDgxMzI2MWMwLCAweDA0MDAwMDIzLCAweDU5MzI2ODA5LCAweDQxMzBjMDAwLAogCTB4NTkzMDAwMDEsIDB4ODAwMGJkNDAsIDB4MDQwMDAwMTYsIDB4NDAwMjYwMDAsCiAJMHg0MDYwMjgwMCwgMHg1OTMwYjgwMSwgMHg1OTMwMDQwNiwgMHg4MjAwMGQ4MCwKIAkweDAwMDAwMDA2LCAweDA0MDAwMDBlLCAweDhkM2U3ZDA2LCAweDA0MDAwMDA3LAogCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMDQsIDB4NTkzNDAyMDAsCi0JMHg4YzAwMDUwZSwgMHgwNDAyMDAwNiwgMHgwNDAxZjhkYywgMHg0YzE0MDAwMCwKLQkweDA0MDFmYjJmLCAweDVjMDAyODAwLCAweDA0MDFmMDAyLCAweDQxMzAyODAwLAorCTB4OGMwMDA1MGUsIDB4MDQwMjAwMDYsIDB4MDQwMWY4ZGEsIDB4NGMxNDAwMDAsCisJMHgwNDAxZmIyOSwgMHg1YzAwMjgwMCwgMHgwNDAxZjAwMiwgMHg0MTMwMjgwMCwKIAkweDQwNWU2MDAwLCAweDgxMzI2MWMwLCAweDA0MDIwN2ViLCAweDgwNjBjMWMwLAogCTB4MDQwMDAwMDQsIDB4NDA2MjYwMDAsIDB4NDE3OGMwMDAsIDB4MDQwMWY3ZTcsCiAJMHg4MTFhMzAwMCwgMHg4MzE4MDQ4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMTdkNiwKIAkweDVjMDIyODAwLCAweDVjMDM0ODAwLCAweDVjMDNhMDAwLCAweDVjMDMyMDAwLAogCTB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsIDB4NWMwMjMwMDAsIDB4NWMwMjU4MDAsCiAJMHg1YzAyNjgwMCwgMHg1YzAyNjAwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwKLQkweDAwMTA2YzRiLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAotCTB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsIDB4NGQzNDAwMDAsIDB4NGQxODAwMDAsCisJMHgwMDEwNjk4MiwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA2OThjLCAweDRkZjAwMDAwLCAweDRkMzQwMDAwLCAweDRkMTgwMDAwLAogCTB4NGQ5MDAwMDAsIDB4NDIwMDMwMDAsIDB4MDAwMGJmMmUsIDB4NTkzMjY4MDksCiAJMHg1ODE4MjAwMSwgMHg0MDEwMjgwMCwgMHg4MDEwMjFjMCwgMHgwNDAwMDAxNiwKIAkweDQxMzAwMDAwLCAweDgwMTAwNTgwLCAweDA0MDAwMDExLCAweDU4MTAwMDA5LAogCTB4ODEzNDA1ODAsIDB4MDQwMjAwMGIsIDB4NDAxMDE4MDAsIDB4NTgxMDIwMDEsCiAJMHg0MTMwMDAwMCwgMHg4MDEwMjFjMCwgMHgwNDAwMDAwYiwgMHg4MDEwMGQ4MCwKIAkweDA0MDAwMDA3LCAweDQwMTAxODAwLCAweDU4MTAyMDAxLCAweDA0MDFmN2ZhLAotCTB4NDAxMDI4MDAsIDB4NTgxMDIwMDAsIDB4MDQwMWY3ZWMsIDB4MDQwMWY4YmQsCisJMHg0MDEwMjgwMCwgMHg1ODEwMjAwMCwgMHgwNDAxZjdlYywgMHgwNDAxZjhiYiwKIAkweDA0MDFmMDFhLCAweDQyMDMyMDAwLCAweDAwMDBiZjMyLCAweDQxN2EzMDAwLAogCTB4NTk5MDIwMDQsIDB4NDAxMDI4MDAsIDB4ODAxMDIxYzAsIDB4MDQwMDAwMGIsCiAJMHg1ODEwMDAwOSwgMHg4MTM0MDU4MCwgMHgwNDAyMDAwOCwgMHg0MTMwMDAwMCwKIAkweDgwMTAwNTgwLCAweDA0MDAwMDBjLCAweDQwMTAyODAwLCAweDU4MTAyMDAxLAogCTB4ODAxMDIxYzAsIDB4MDQwMjA3ZmEsIDB4ODExYTMwMDAsIDB4ODMxODA0ODAsCiAJMHgwMDAwMDAwNSwgMHgwNDAyMTAwZCwgMHg4MzkzMjQwMCwgMHgwMDAwMDAxMCwKLQkweDA0MDFmN2VjLCAweDA0MDFmODgxLCAweDVjMDMyMDAwLCAweDVjMDIzMDAwLAotCTB4NWMwMjY4MDAsIDB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsCi0JMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHgwNDAxZmI2ZiwgMHgwNDAwMDdmNywKLQkweDVjMDMyMDAwLCAweDVjMDIzMDAwLCAweDVjMDI2ODAwLCAweDVjMDNlMDAwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCi0JMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwKLQkweDRkMzAwMDAwLCAweDRkMzQwMDAwLCAweDRkMTgwMDAwLCAweDRkMmMwMDAwLAotCTB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsIDB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsCi0JMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwgMHg0MjAwMzAwMCwgMHgwMDAwYmYyZSwKLQkweDU4MWE2MDAxLCAweDgxMzI2MWMwLCAweDA0MDAwMDIzLCAweDQxMzAyODAwLAotCTB4NTkzMGI4MDAsIDB4NTkzMjY4MDksIDB4NTkzNDA0MDMsIDB4ODE0NDA1ODAsCi0JMHgwNDAwMDAwNiwgMHg4MDVjYjljMCwgMHgwNDAwMDAxYiwgMHg0MTMwMjgwMCwKLQkweDQwNWU2MDAwLCAweDA0MDFmN2Y3LCAweDU5MzBiODAxLCAweDhkM2U3ZDAwLAotCTB4MDQwMDAwMDMsIDB4MDQwMWZiNjcsIDB4MDQwMjAwMGUsIDB4NTkzMDA0MDYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwNiwgMHgwNDAyMDAwMywgMHg4ZDNlN2QxOCwKLQkweDA0MDAwMDA4LCAweDA0MDFmODY3LCAweDRjMGMwMDAwLCAweDRjMTQwMDAwLAotCTB4MDQwMWZhOTcsIDB4NWMwMDI4MDAsIDB4NWMwMDE4MDAsIDB4MDQwMWYwMDIsCi0JMHg0MTMwMTgwMCwgMHg0MDVlNjAwMCwgMHg4MTMyNjFjMCwgMHgwNDAyMDdlYiwKLQkweDA0MDFmMDJkLCAweDQxN2EzMDAwLCAweDAyMDFmODAwLCAweDAwMTA3MGQ4LAotCTB4NTk5MjYwMDQsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMDUsIDB4NTkzMjY4MDksCi0JMHg1OTM0MDQwMywgMHg4MTQ0MDU4MCwgMHgwNDAwMDAwNiwgMHg4MTFhMzAwMCwKLQkweDgzMTgwNDgwLCAweDAwMDAwMDA1LCAweDA0MDAxN2Y0LCAweDA0MDFmMDFlLAotCTB4NDEzMGMwMDAsIDB4NTkzMDAwMDEsIDB4ODAwMGJkNDAsIDB4MDQwMDAwMTIsCi0JMHg0MDAyNjAwMCwgMHg0MDYwMjgwMCwgMHg1OTMwYjgwMSwgMHg4ZDNlN2QwMCwKLQkweDA0MDAwMDAzLCAweDA0MDFmYjNiLCAweDA0MDIwMDBhLCAweDU5MzAwNDA2LAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDYsIDB4MDQwMDAwMDYsIDB4MDQwMWY4MWIsCi0JMHg0YzE0MDAwMCwgMHgwNDAxZmE2ZSwgMHg1YzAwMjgwMCwgMHgwNDAxZjAwMiwKLQkweDQxMzAyODAwLCAweDQwNWU2MDAwLCAweDgxMzI2MWMwLCAweDA0MDIwN2VmLAotCTB4ODA2MGMxYzAsIDB4MDQwMDAwMDQsIDB4NDA2MjYwMDAsIDB4NDE3OGMwMDAsCi0JMHgwNDAxZjdlYiwgMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwKLQkweDVjMDMyMDAwLCAweDVjMDBjMDAwLCAweDVjMDBiODAwLCAweDVjMDI1ODAwLAotCTB4NWMwMjMwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjYwMDAsIDB4NWMwM2UwMDAsCi0JMHgwNDAwMGJlMywgMHgxYzAxZjAwMCwgMHgwNDAxZmJjOCwgMHg1OTkwMDAwNCwKLQkweDgxMzAwNTgwLCAweDA0MDIwMDE4LCAweDRjMTQwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDZkYzMsIDB4MDQwMWZiYjgsIDB4NWMwMDI4MDAsIDB4NTkzMDAwMDEsCi0JMHg4MDAwMDFjMCwgMHgwNDAyMDAwMywgMHg0OTdhNjgwYywgMHgxYzAxZjAwMCwKLQkweDQyMDAzMDAwLCAweDAwMDBiZjJlLCAweDQ5N2E2MDAxLCAweDU4MTgwODAxLAotCTB4ODAwNDA5YzAsIDB4MDQwMjAwMDQsIDB4NDgwMDMwMDAsIDB4NDgwMDMwMDEsCi0JMHgxYzAxZjAwMCwgMHg1ODE4MDgwMCwgMHg0ODAwMDgwMCwgMHg0ODAwMzAwMCwKLQkweDFjMDFmMDAwLCAweDU5MzAwMDAxLCAweDQ4MDAyODAxLCAweDgwMDAwMWMwLAotCTB4MDQwMjAwMDIsIDB4NDgxNjY4MGMsIDB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsCi0JMHgwNDAxZmJhNiwgMHg0MjAwMzAwMCwgMHgwMDAwYmYyZSwgMHg1ODE4MDAwMSwKLQkweDgxMzAwNTgwLCAweDA0MDIwMDFjLCAweDU5MzAwODAxLCAweDgwMDQwOWMwLAotCTB4MDQwMDAwMGUsIDB4NTkzMDAwMDAsIDB4ODAwMDAxYzAsIDB4MDQwMjAwMDUsCi0JMHg0ODA0MzAwMSwgMHg0ODA0MzAwMCwgMHg0OTdhNjAwMSwgMHgxYzAxZjAwMCwKLQkweDU5MzAwMDAwLCAweDQ4MDAwODAwLCAweDQ4MDQzMDAxLCAweDQ5N2E2MDAwLAotCTB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDAsIDB4ODAwNDA5YzAsCi0JMHgwNDAyMDAwNSwgMHg0OTc4MzAwMSwgMHg0OTc4MzAwMCwgMHg0OTdhNjgwYywKLQkweDFjMDFmMDAwLCAweDQ4MDQzMDAxLCAweDQ5N2E2MDAwLCAweDQ5N2E2ODBjLAotCTB4MWMwMWYwMDAsIDB4NTgxODAwMDAsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMGMsCi0JMHg1OTMwMDAwMSwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwNSwgMHg0ODE0MzAwMCwKLQkweDQ5NzgyODAwLCAweDQ5N2E2ODBjLCAweDFjMDFmMDAwLCAweDQ4MDAzMDAwLAotCTB4NDgwMDI4MDAsIDB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsIDB4NTkzMDAwMDAsCi0JMHg4MDAwMDFjMCwgMHgwNDAyMDAwOCwgMHg1OTMwMDAwMSwgMHg0ODAwMTgwMSwKLQkweDgwMDAwMWMwLCAweDA0MDIwMDAyLCAweDQ4MGU2ODBjLCAweDQ5N2E2MDAxLAotCTB4MWMwMWYwMDAsIDB4NTkzMDA4MDEsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMDYsCi0JMHg1OTMwMDgwMCwgMHg0ODA0MjgwMCwgMHg0OTdhNjAwMCwgMHg0OTdhNjgwYywKLQkweDFjMDFmMDAwLCAweDU5MzAwMDAwLCAweDQ4MDAwODAwLCAweDQ4MDQyODAwLAotCTB4NDk3YTYwMDAsIDB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsIDB4MDQwMWZiODIsCi0JMHg0ZGYwMDAwMCwgMHgwNDAxZjgzOSwgMHgwNDAyMDhjNCwgMHgwNDAyMDk0NSwKLQkweDA0MDIwYTg5LCAweDA0MDIwMDA1LCAweDVjMDNlMDAwLCAweDA0MDAwYjcwLAotCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NWMwM2UwMDAsIDB4MDQwMDBiNmMsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwKLQkweDRkMzQwMDAwLCAweDRkMzAwMDAwLCAweDQxNzgzMDAwLCAweDU5OGU2MDA5LAotCTB4ODEzMjYxYzAsIDB4MDQwMDAwMjEsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwNiwgMHgwNDAyMDAwNCwgMHg4ZDNlN2QxOCwgMHgwNDAyMDAwYSwKLQkweDA0MDFmMDE3LCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDA2LAotCTB4OGQzZTdkMTYsIDB4MDQwMDAwMDQsIDB4NTkzMDA0MjAsIDB4OGMwMDA1MDAsCi0JMHgwNDAyMDAwZiwgMHgwNDAxZmE0ZSwgMHg1OTMwMDAwMCwgMHg0YzAwMDAwMCwKLQkweDhkM2U3ZDA2LCAweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA5MmQ3LAotCTB4MDQwMDAwMDUsIDB4MDQwMWY4NjcsIDB4NGMxODAwMDAsIDB4MDQwMWY5YmMsCi0JMHg1YzAwMzAwMCwgMHg1YzAyNjAwMCwgMHgwNDAxZjdlMiwgMHg0MTMwMzAwMCwKLQkweDU5MzI2MDAwLCAweDA0MDFmN2RmLCAweDVjMDI2MDAwLCAweDVjMDI2ODAwLAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGM1YzAwMDAsCi0JMHg4MTMyNjFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0MTMwMDAwMCwKLQkweDU5OGNiODA5LCAweDQxNzgzMDAwLCAweDgwNWNiOWMwLCAweDA0MDAwMDEzLAotCTB4ODA1YzBkODAsIDB4MDQwMDAwMDQsIDB4NDA1YzMwMDAsIDB4NTgxOGI4MDAsCi0JMHgwNDAxZjdmYSwgMHgwNDAxZjg0YiwgMHg1OThjMDAwZCwgMHg4MTMwMDU4MCwKLQkweDAyMDAwODAwLCAweDAwMTA3MGI5LCAweDU5MzAwNDAzLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwNDIsIDB4MDQwMjAwMDIsIDB4NDk3YTYwMDcsIDB4ODAwMDA1ODAsCi0JMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDA0MDFmYjI3LCAweDRkZjAwMDAwLAorCTB4MDQwMWY3ZWMsIDB4MDQwMWY4N2YsIDB4NWMwMzIwMDAsIDB4NWMwMjMwMDAsCisJMHg1YzAyNjgwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwKKwkweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDVjMDMyMDAwLCAweDVjMDIzMDAwLAorCTB4NWMwMjY4MDAsIDB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDY5ODIsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2OThjLCAweDRkZjAwMDAwLCAweDRkMzAwMDAwLCAweDRkMzQwMDAwLAorCTB4NGQxODAwMDAsIDB4NGQyYzAwMDAsIDB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsCisJMHg0ZDkwMDAwMCwgMHg0ZGQwMDAwMCwgMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwKKwkweDQyMDAzMDAwLCAweDAwMDBiZjJlLCAweDU4MWE2MDAxLCAweDgxMzI2MWMwLAorCTB4MDQwMDAwMjMsIDB4NDEzMDI4MDAsIDB4NTkzMGI4MDAsIDB4NTkzMjY4MDksCisJMHg1OTM0MDQwMywgMHg4MTQ0MDU4MCwgMHgwNDAwMDAwNiwgMHg4MDVjYjljMCwKKwkweDA0MDAwMDFiLCAweDQxMzAyODAwLCAweDQwNWU2MDAwLCAweDA0MDFmN2Y3LAorCTB4NTkzMGI4MDEsIDB4OGQzZTdkMDAsIDB4MDQwMDAwMDMsIDB4MDQwMWZiNTgsCisJMHgwNDAyMDAwZSwgMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNiwKKwkweDA0MDIwMDAzLCAweDhkM2U3ZDE4LCAweDA0MDAwMDA4LCAweDA0MDFmODY3LAorCTB4NGMwYzAwMDAsIDB4NGMxNDAwMDAsIDB4MDQwMWZhOTMsIDB4NWMwMDI4MDAsCisJMHg1YzAwMTgwMCwgMHgwNDAxZjAwMiwgMHg0MTMwMTgwMCwgMHg0MDVlNjAwMCwKKwkweDgxMzI2MWMwLCAweDA0MDIwN2ViLCAweDA0MDFmMDJkLCAweDQxN2EzMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZlMmYsIDB4NTk5MjYwMDQsIDB4ODEzMjYxYzAsCisJMHgwNDAwMDAwNSwgMHg1OTMyNjgwOSwgMHg1OTM0MDQwMywgMHg4MTQ0MDU4MCwKKwkweDA0MDAwMDA2LCAweDgxMWEzMDAwLCAweDgzMTgwNDgwLCAweDAwMDAwMDA1LAorCTB4MDQwMDE3ZjQsIDB4MDQwMWYwMWUsIDB4NDEzMGMwMDAsIDB4NTkzMDAwMDEsCisJMHg4MDAwYmQ0MCwgMHgwNDAwMDAxMiwgMHg0MDAyNjAwMCwgMHg0MDYwMjgwMCwKKwkweDU5MzBiODAxLCAweDhkM2U3ZDAwLCAweDA0MDAwMDAzLCAweDA0MDFmYjJjLAorCTB4MDQwMjAwMGEsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDYsCisJMHgwNDAwMDAwNiwgMHgwNDAxZjgxYiwgMHg0YzE0MDAwMCwgMHgwNDAxZmE2YSwKKwkweDVjMDAyODAwLCAweDA0MDFmMDAyLCAweDQxMzAyODAwLCAweDQwNWU2MDAwLAorCTB4ODEzMjYxYzAsIDB4MDQwMjA3ZWYsIDB4ODA2MGMxYzAsIDB4MDQwMDAwMDQsCisJMHg0MDYyNjAwMCwgMHg0MTc4YzAwMCwgMHgwNDAxZjdlYiwgMHg1YzAyMjgwMCwKKwkweDVjMDM0ODAwLCAweDVjMDNhMDAwLCAweDVjMDMyMDAwLCAweDVjMDBjMDAwLAorCTB4NWMwMGI4MDAsIDB4NWMwMjU4MDAsIDB4NWMwMjMwMDAsIDB4NWMwMjY4MDAsCisJMHg1YzAyNjAwMCwgMHg1YzAzZTAwMCwgMHgwNDAwMGJkNCwgMHgxYzAxZjAwMCwKKwkweDA0MDFmYmI5LCAweDU5OTAwMDA0LCAweDgxMzAwNTgwLCAweDA0MDIwMDE4LAorCTB4NGMxNDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZiMTMsIDB4MDQwMWZiYTksCisJMHg1YzAwMjgwMCwgMHg1OTMwMDAwMSwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwMywKKwkweDQ5N2E2ODBjLCAweDFjMDFmMDAwLCAweDQyMDAzMDAwLCAweDAwMDBiZjJlLAorCTB4NDk3YTYwMDEsIDB4NTgxODA4MDEsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMDQsCisJMHg0ODAwMzAwMCwgMHg0ODAwMzAwMSwgMHgxYzAxZjAwMCwgMHg1ODE4MDgwMCwKKwkweDQ4MDAwODAwLCAweDQ4MDAzMDAwLCAweDFjMDFmMDAwLCAweDU5MzAwMDAxLAorCTB4NDgwMDI4MDEsIDB4ODAwMDAxYzAsIDB4MDQwMjAwMDIsIDB4NDgxNjY4MGMsCisJMHg0OTdhNjAwMSwgMHgxYzAxZjAwMCwgMHgwNDAxZmI5NywgMHg0MjAwMzAwMCwKKwkweDAwMDBiZjJlLCAweDU4MTgwMDAxLCAweDgxMzAwNTgwLCAweDA0MDIwMDFjLAorCTB4NTkzMDA4MDEsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMGUsIDB4NTkzMDAwMDAsCisJMHg4MDAwMDFjMCwgMHgwNDAyMDAwNSwgMHg0ODA0MzAwMSwgMHg0ODA0MzAwMCwKKwkweDQ5N2E2MDAxLCAweDFjMDFmMDAwLCAweDU5MzAwMDAwLCAweDQ4MDAwODAwLAorCTB4NDgwNDMwMDEsIDB4NDk3YTYwMDAsIDB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsCisJMHg1OTMwMDgwMCwgMHg4MDA0MDljMCwgMHgwNDAyMDAwNSwgMHg0OTc4MzAwMSwKKwkweDQ5NzgzMDAwLCAweDQ5N2E2ODBjLCAweDFjMDFmMDAwLCAweDQ4MDQzMDAxLAorCTB4NDk3YTYwMDAsIDB4NDk3YTY4MGMsIDB4MWMwMWYwMDAsIDB4NTgxODAwMDAsCisJMHg4MTMwMDU4MCwgMHgwNDAyMDAwYywgMHg1OTMwMDAwMSwgMHg4MDAwMDFjMCwKKwkweDA0MDIwMDA1LCAweDQ4MTQzMDAwLCAweDQ5NzgyODAwLCAweDQ5N2E2ODBjLAorCTB4MWMwMWYwMDAsIDB4NDgwMDMwMDAsIDB4NDgwMDI4MDAsIDB4NDk3YTYwMDEsCisJMHgxYzAxZjAwMCwgMHg1OTMwMDAwMCwgMHg4MDAwMDFjMCwgMHgwNDAyMDAwOCwKKwkweDU5MzAwMDAxLCAweDQ4MDAxODAxLCAweDgwMDAwMWMwLCAweDA0MDIwMDAyLAorCTB4NDgwZTY4MGMsIDB4NDk3YTYwMDEsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDEsCisJMHg4MDA0MDljMCwgMHgwNDAyMDAwNiwgMHg1OTMwMDgwMCwgMHg0ODA0MjgwMCwKKwkweDQ5N2E2MDAwLCAweDQ5N2E2ODBjLCAweDFjMDFmMDAwLCAweDU5MzAwMDAwLAorCTB4NDgwMDA4MDAsIDB4NDgwNDI4MDAsIDB4NDk3YTYwMDAsIDB4NDk3YTYwMDEsCisJMHgxYzAxZjAwMCwgMHgwNDAxZmI3MywgMHg0ZGYwMDAwMCwgMHgwNDAxZjgzYSwKKwkweDA0MDIwOGM3LCAweDA0MDIwOTRhLCAweDA0MDIwMDA1LCAweDVjMDNlMDAwLAorCTB4MDQwMDBiNjIsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NWMwM2UwMDAsCisJMHgwNDAwMGI1ZSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKIAkweDRkMmMwMDAwLCAweDRkMzQwMDAwLCAweDRkMzAwMDAwLCAweDQxNzgzMDAwLAotCTB4NTk4ZTYwMDksIDB4ODEzMjYxYzAsIDB4MDQwMDAwMmMsIDB4NTkzMDBjMDYsCi0JMHg4MjA0MDU4MCwgMHgwMDAwMDAwNiwgMHgwNDAyMDAwNCwgMHg4ZDNlN2QxOCwKLQkweDA0MDIwMDBhLCAweDA0MDFmMDIyLCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LAotCTB4MDQwMjAwMDYsIDB4OGQzZTdkMTgsIDB4MDQwMDAwMDQsIDB4NTkzMDA0MjAsCi0JMHg4YzAwMDUwMCwgMHgwNDAyMDAxYSwgMHg1OTMyNjgwOSwgMHg1OTM0MDQwMywKLQkweDgxNDQwNTgwLCAweDA0MDIwMDE2LCAweDhkM2U3ZDAwLCAweDA0MDAwMDA2LAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMTEsIDB4MDQwMWZhMzUsCi0JMHgwNDAyMDAwZiwgMHgwNDAxZjlmNiwgMHg1OTMwMDAwMCwgMHg0YzAwMDAwMCwKLQkweDhkM2U3ZDA2LCAweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA5MmQ3LAotCTB4MDQwMDAwMDUsIDB4MDQwMWY4MGYsIDB4NGMxODAwMDAsIDB4MDQwMWY5NjQsCi0JMHg1YzAwMzAwMCwgMHg1YzAyNjAwMCwgMHgwNDAxZjdkNywgMHg0MTMwMzAwMCwKLQkweDU5MzI2MDAwLCAweDA0MDFmN2Q0LCAweDVjMDI2MDAwLCAweDVjMDI2ODAwLAotCTB4NWMwMjU4MDAsIDB4NWMwM2UwMDAsIDB4MDQwMDBhZTUsIDB4MWMwMWYwMDAsCi0JMHg1OTMwMDgwMCwgMHg0OTdhNjAwMCwgMHgwNDAxZmFjOCwgMHg4MDE4MzFjMCwKLQkweDA0MDIwMDA5LCAweDU5OGMwMDA4LCAweDgxMzAwNTgwLCAweDA0MDIwMDA0LAotCTB4NDgwMzE4MDgsIDB4NDgwMzE4MDksIDB4MDQwMWYwMDgsIDB4NDgwNzE4MDksCi0JMHgwNDAxZjAwNiwgMHg0ODA0MzAwMCwgMHg1OThjMDAwOCwgMHg4MTMwMDU4MCwKLQkweDA0MDIwMDAyLCAweDQ4MWIxODA4LCAweDA0MDFmMmNhLCAweDRkMmMwMDAwLAotCTB4NGQzMDAwMDAsIDB4NGQzNDAwMDAsIDB4NDE3ODMwMDAsIDB4NTk4ZTYwMGIsCi0JMHg4MTMyNjFjMCwgMHgwNDAwMDAxMywgMHg4ZDNlN2QwNiwgMHgwNDAwMDAwNSwKLQkweDU5MzI2ODA5LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDIwMDBhLAotCTB4MDQwMWY5YmYsIDB4NTkzMDAwMDAsIDB4NGMwMDAwMDAsIDB4MDQwMWY4NTMsCi0JMHg0YzE4MDAwMCwgMHgwNDAxZjkzMiwgMHg1YzAwMzAwMCwgMHg1YzAyNjAwMCwKLQkweDA0MDFmN2YwLCAweDQxMzAzMDAwLCAweDU5MzI2MDAwLCAweDA0MDFmN2VkLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ3NzMsIDB4NWMwMjY4MDAsIDB4NWMwMjYwMDAsCi0JMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0YzVjMDAwMCwKLQkweDgxMzI2MWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDQxMzAwMDAwLAotCTB4NTk4Y2I4MGIsIDB4NDE3ODMwMDAsIDB4ODA1Y2I5YzAsIDB4MDQwMDAwMGYsCi0JMHg4MDVjMGQ4MCwgMHgwNDAwMDAwNCwgMHg0MDVjMzAwMCwgMHg1ODE4YjgwMCwKLQkweDA0MDFmN2ZhLCAweDA0MDFmODM1LCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDcwYjksIDB4NDk3YTYwMDcsIDB4ODAwMDA1ODAsCisJMHg1OThlNjAwOSwgMHg4MTMyNjFjMCwgMHgwNDAwMDAyMywgMHg1OTMwMDQwNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDA2LCAweDA0MDIwMDA0LCAweDhkM2U3ZDE4LAorCTB4MDQwMjAwMGMsIDB4MDQwMWYwMTksIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsCisJMHgwNDAyMDAwOCwgMHg4ZDNlN2QxOCwgMHgwNDAwMDAwMywgMHg4ZDNlN2QxNiwKKwkweDA0MDAwMDA0LCAweDU5MzAwNDIwLCAweDhjMDAwNTAwLCAweDA0MDIwMDBmLAorCTB4MDQwMWZhNDksIDB4NTkzMDAwMDAsIDB4NGMwMDAwMDAsIDB4OGQzZTdkMDYsCisJMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwOTA5ZCwgMHgwNDAwMDAwNSwKKwkweDA0MDFmODY5LCAweDRjMTgwMDAwLCAweDA0MDFmOWI3LCAweDVjMDAzMDAwLAorCTB4NWMwMjYwMDAsIDB4MDQwMWY3ZTAsIDB4NDEzMDMwMDAsIDB4NTkzMjYwMDAsCisJMHgwNDAxZjdkZCwgMHg1YzAyNjAwMCwgMHg1YzAyNjgwMCwgMHg1YzAyNTgwMCwKKwkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjNWMwMDAwLCAweDgxMzI2MWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NDEzMDAwMDAsIDB4NTk4Y2I4MDksCisJMHg0MTc4MzAwMCwgMHg4MDVjYjljMCwgMHgwNDAwMDAxMywgMHg4MDVjMGQ4MCwKKwkweDA0MDAwMDA0LCAweDQwNWMzMDAwLCAweDU4MThiODAwLCAweDA0MDFmN2ZhLAorCTB4MDQwMWY4NGQsIDB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsIDB4MDIwMDA4MDAsCisJMHgwMDEwNmUxMCwgMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA0MiwKKwkweDA0MDIwMDAyLCAweDQ5N2E2MDA3LCAweDgwMDAwNTgwLCAweDVjMDBiODAwLAorCTB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMGI4MDAsCisJMHgxYzAxZjAwMCwgMHgwNDAxZmIxNywgMHg0ZGYwMDAwMCwgMHg0ZDJjMDAwMCwKKwkweDRkMzQwMDAwLCAweDRkMzAwMDAwLCAweDQxNzgzMDAwLCAweDU5OGU2MDA5LAorCTB4ODEzMjYxYzAsIDB4MDQwMDAwMmUsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwNiwgMHgwNDAyMDAwNCwgMHg4ZDNlN2QxOCwgMHgwNDAyMDAwYywKKwkweDA0MDFmMDI0LCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDA4LAorCTB4OGQzZTdkMTgsIDB4MDQwMDAwMDMsIDB4OGQzZTdkMTYsIDB4MDQwMDAwMDQsCisJMHg1OTMwMDQyMCwgMHg4YzAwMDUwMCwgMHgwNDAyMDAxYSwgMHg1OTMyNjgwOSwKKwkweDU5MzQwNDAzLCAweDgxNDQwNTgwLCAweDA0MDIwMDE2LCAweDhkM2U3ZDAwLAorCTB4MDQwMDAwMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMTEsCisJMHgwNDAxZmEyMywgMHgwNDAyMDAwZiwgMHgwNDAxZjllZiwgMHg1OTMwMDAwMCwKKwkweDRjMDAwMDAwLCAweDhkM2U3ZDA2LCAweDA0MDAwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDkwOWQsIDB4MDQwMDAwMDUsIDB4MDQwMWY4MGYsIDB4NGMxODAwMDAsCisJMHgwNDAxZjk1ZCwgMHg1YzAwMzAwMCwgMHg1YzAyNjAwMCwgMHgwNDAxZjdkNSwKKwkweDQxMzAzMDAwLCAweDU5MzI2MDAwLCAweDA0MDFmN2QyLCAweDVjMDI2MDAwLAorCTB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4NWMwM2UwMDAsIDB4MDQwMDBhZDMsCisJMHgxYzAxZjAwMCwgMHg1OTMwMDgwMCwgMHg0OTdhNjAwMCwgMHgwNDAxZmFiNiwKKwkweDgwMTgzMWMwLCAweDA0MDIwMDA5LCAweDU5OGMwMDA4LCAweDgxMzAwNTgwLAorCTB4MDQwMjAwMDQsIDB4NDgwMzE4MDgsIDB4NDgwMzE4MDksIDB4MDQwMWYwMDgsCisJMHg0ODA3MTgwOSwgMHgwNDAxZjAwNiwgMHg0ODA0MzAwMCwgMHg1OThjMDAwOCwKKwkweDgxMzAwNTgwLCAweDA0MDIwMDAyLCAweDQ4MWIxODA4LCAweDA0MDFmMmI4LAorCTB4NGQyYzAwMDAsIDB4NGQzMDAwMDAsIDB4NGQzNDAwMDAsIDB4NDE3ODMwMDAsCisJMHg1OThlNjAwYiwgMHg4MTMyNjFjMCwgMHgwNDAwMDAxMywgMHg4ZDNlN2QwNiwKKwkweDA0MDAwMDA1LCAweDU5MzI2ODA5LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAorCTB4MDQwMjAwMGEsIDB4MDQwMWY5YjgsIDB4NTkzMDAwMDAsIDB4NGMwMDAwMDAsCisJMHgwNDAxZjg1MywgMHg0YzE4MDAwMCwgMHgwNDAxZjkyYiwgMHg1YzAwMzAwMCwKKwkweDVjMDI2MDAwLCAweDA0MDFmN2YwLCAweDQxMzAzMDAwLCAweDU5MzI2MDAwLAorCTB4MDQwMWY3ZWQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1YzcsIDB4NWMwMjY4MDAsCisJMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDRjNWMwMDAwLCAweDgxMzI2MWMwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LAorCTB4NDEzMDAwMDAsIDB4NTk4Y2I4MGIsIDB4NDE3ODMwMDAsIDB4ODA1Y2I5YzAsCisJMHgwNDAwMDAwZiwgMHg4MDVjMGQ4MCwgMHgwNDAwMDAwNCwgMHg0MDVjMzAwMCwKKwkweDU4MThiODAwLCAweDA0MDFmN2ZhLCAweDA0MDFmODM1LCAweDU5OGMwMDBkLAorCTB4ODEzMDA1ODAsIDB4MDIwMDA4MDAsIDB4MDAxMDZlMTAsIDB4NDk3YTYwMDcsCisJMHg4MDAwMDU4MCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDA0MDFmYThkLAorCTB4NGRmMDAwMDAsIDB4NGQzNDAwMDAsIDB4NGQzMDAwMDAsIDB4NGQyYzAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDI2NywgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwKKwkweDQxNzgzMDAwLCAweDU5OGU2MDBiLCAweDgxMzI2MWMwLCAweDA0MDAwMDE0LAorCTB4NTkzMDAwMDksIDB4ODEzNDA1ODAsIDB4MDQwMjAwMGUsIDB4OGQzZTdkMDAsCisJMHgwNDAwMDAwMywgMHgwNDAxZjlhYSwgMHgwNDAyMDAwYSwgMHgwNDAxZjk3NiwKKwkweDU5MzAwMDAwLCAweDRjMDAwMDAwLCAweDA0MDFmODExLCAweDRjMTgwMDAwLAorCTB4MDQwMWY4ZTksIDB4NWMwMDMwMDAsIDB4NWMwMjYwMDAsIDB4MDQwMWY3ZWYsCisJMHg0MTMwMzAwMCwgMHg1OTMyNjAwMCwgMHgwNDAxZjdlYywgMHgwMjAxZjgwMCwKKwkweDAwMTA0NWVhLCAweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDVjMDI2ODAwLAorCTB4NWMwM2UwMDAsIDB4MDQwMDBhNWQsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDAsCisJMHg0OTdhNjAwMCwgMHgwNDAxZmE0MCwgMHg4MDE4MzFjMCwgMHgwNDAyMDAwOSwKKwkweDU5OGMwMDBhLCAweDgxMzAwNTgwLCAweDA0MDIwMDA0LCAweDQ4MDMxODBhLAorCTB4NDgwMzE4MGIsIDB4MDQwMWYwMDgsIDB4NDgwNzE4MGIsIDB4MDQwMWYwMDYsCisJMHg0ODA0MzAwMCwgMHg1OThjMDAwYSwgMHg4MTMwMDU4MCwgMHgwNDAyMDAwMiwKKwkweDQ4MWIxODBhLCAweDA0MDFmMjQyLCAweDA0MDFmYTUyLCAweDRkZjAwMDAwLAorCTB4NGQzMDAwMDAsIDB4NGM1YzAwMDAsIDB4NDE3OGI4MDAsIDB4OGQzZTdkMTgsCisJMHgwNDAwMDAwNCwgMHg4ZDNlN2QxNiwgMHgwNDAyMDAwMiwgMHg4MDVjYjgwMCwKKwkweDU5OGU2MDA1LCAweDgxMzI2MWMwLCAweDA0MDAwMDFhLCAweDU5MzAwMDAwLAorCTB4NGMwMDAwMDAsIDB4ODA1Y2I5YzAsIDB4MDQwMjAwMGIsIDB4NTkzMDBjMDYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAxMSwgMHgwNDAwMDAxMCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDA0LCAweDA0MDIwMDA0LCAweDU5MzAwNDIwLCAweDhjMDAwNTAwLAorCTB4MDQwMjAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDhmMDUsIDB4MDIwMDA4MDAsCisJMHgwMDEwN2RhNiwgMHgwMjAxZjgwMCwgMHgwMDEwOTBlYywgMHgwMjAxZjgwMCwKKwkweDAwMDIwOGI0LCAweDA0MDFmYTFlLCAweDVjMDI2MDAwLCAweDA0MDFmN2U2LAorCTB4NDk3YjE4MDUsIDB4NDk3YjE4MDQsIDB4NWMwMGI4MDAsIDB4NWMwMjYwMDAsCisJMHg1YzAzZTAwMCwgMHgwNDAwMGExZCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDRjNWMwMDAwLCAweDRjNjAwMDAwLCAweDgxMzI2MWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NDEzMDAwMDAsIDB4NTk4Y2I4MDUsIDB4NDA1Y2MwMDAsCisJMHg4MDVjYjljMCwgMHgwNDAwMDAyNSwgMHg4MDVjMGQ4MCwgMHgwNDAwMDAwNCwKKwkweDQwNWNjMDAwLCAweDU4NjBiODAwLCAweDA0MDFmN2ZhLCAweDU5OGMwMDBkLAorCTB4ODEzMDA1ODAsIDB4MDIwMDA4MDAsIDB4MDAxMDZlMTAsIDB4MDQwMWY5ZWUsCisJMHg1OThjMDAwNSwgMHg4MDVjMDU4MCwgMHgwNDAyMDAwOSwgMHg1ODVjMDAwMCwKKwkweDQ4MDMxODA1LCAweDQ5NzhiODAwLCAweDU5OGMwMDA0LCAweDgwNWMwNTgwLAorCTB4MDQwMjAwMGQsIDB4NDk3YjE4MDQsIDB4MDQwMWYwMGIsIDB4NTk4YzAwMDQsCisJMHg4MDVjMDU4MCwgMHgwNDAyMDAwNSwgMHg0ODYzMTgwNCwgMHg0OTc4YjgwMCwKKwkweDQ5NzhjMDAwLCAweDA0MDFmMDA0LCAweDU4NWMwMDAwLCAweDQ4MDBjMDAwLAorCTB4NDk3OGI4MDAsIDB4MDQwMWY5ZWEsIDB4ODAwMDA1ODAsIDB4NWMwMGMwMDAsCiAJMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDA0MDFmYTlmLCAweDRkZjAwMDAwLAotCTB4NGQzNDAwMDAsIDB4NGQzMDAwMDAsIDB4NGQyYzAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDI0NSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHg0MTc4MzAwMCwKLQkweDU5OGU2MDBiLCAweDgxMzI2MWMwLCAweDA0MDAwMDE0LCAweDU5MzAwMDA5LAotCTB4ODEzNDA1ODAsIDB4MDQwMjAwMGUsIDB4OGQzZTdkMDAsIDB4MDQwMDAwMDMsCi0JMHgwNDAxZjliYywgMHgwNDAyMDAwYSwgMHgwNDAxZjk3ZCwgMHg1OTMwMDAwMCwKLQkweDRjMDAwMDAwLCAweDA0MDFmODExLCAweDRjMTgwMDAwLCAweDA0MDFmOGYwLAotCTB4NWMwMDMwMDAsIDB4NWMwMjYwMDAsIDB4MDQwMWY3ZWYsIDB4NDEzMDMwMDAsCi0JMHg1OTMyNjAwMCwgMHgwNDAxZjdlYywgMHgwMjAxZjgwMCwgMHgwMDEwNDc5YywKLQkweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDVjMDI2ODAwLCAweDVjMDNlMDAwLAotCTB4MDQwMDBhNmYsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDAsIDB4NDk3YTYwMDAsCi0JMHgwNDAxZmE1MiwgMHg4MDE4MzFjMCwgMHgwNDAyMDAwOSwgMHg1OThjMDAwYSwKLQkweDgxMzAwNTgwLCAweDA0MDIwMDA0LCAweDQ4MDMxODBhLCAweDQ4MDMxODBiLAotCTB4MDQwMWYwMDgsIDB4NDgwNzE4MGIsIDB4MDQwMWYwMDYsIDB4NDgwNDMwMDAsCi0JMHg1OThjMDAwYSwgMHg4MTMwMDU4MCwgMHgwNDAyMDAwMiwgMHg0ODFiMTgwYSwKLQkweDA0MDFmMjU0LCAweDA0MDFmYTY0LCAweDRkZjAwMDAwLCAweDRkMzAwMDAwLAotCTB4NTk4ZTYwMDUsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMjAsIDB4NTkzMDAwMDAsCi0JMHg0YzAwMDAwMCwgMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMSwKLQkweDA0MDIwMDA3LCAweDgzM2MwNTAwLCAweDAwMDAxODAwLCAweDA0MDAwMDE1LAotCTB4OGQzZTdkMTYsIDB4MDQwMjAwMTMsIDB4MDQwMWYwMDksIDB4ODIwNDA1ODAsCi0JMHgwMDAwMDAwNCwgMHgwNDAyMDAwNiwgMHg4ZDNlN2QxNiwgMHgwNDAwMDAwNCwKLQkweDU5MzAwNDIwLCAweDhjMDAwNTAwLCAweDA0MDIwMDBhLCAweDAyMDFmODAwLAotCTB4MDAxMDkxNGUsIDB4MDIwMDA4MDAsIDB4MDAxMDgwMWMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTMyNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHgwNDAxZmEzMSwKLQkweDVjMDI2MDAwLCAweDA0MDFmN2UwLCAweDQ5N2IxODA1LCAweDQ5N2IxODA0LAotCTB4NWMwMjYwMDAsIDB4NWMwM2UwMDAsIDB4MDQwMDBhMzEsIDB4MWMwMWYwMDAsCi0JMHg0OTMzYzg1NywgMHg0YzVjMDAwMCwgMHg0YzYwMDAwMCwgMHg4MTMyNjFjMCwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDQxMzAwMDAwLCAweDU5OGNiODA1LAotCTB4NDA1Y2MwMDAsIDB4ODA1Y2I5YzAsIDB4MDQwMDAwMjUsIDB4ODA1YzBkODAsCi0JMHgwNDAwMDAwNCwgMHg0MDVjYzAwMCwgMHg1ODYwYjgwMCwgMHgwNDAxZjdmYSwKLQkweDU5OGMwMDBkLCAweDgxMzAwNTgwLCAweDAyMDAwODAwLCAweDAwMTA3MGI5LAotCTB4MDQwMWZhMDIsIDB4NTk4YzAwMDUsIDB4ODA1YzA1ODAsIDB4MDQwMjAwMDksCi0JMHg1ODVjMDAwMCwgMHg0ODAzMTgwNSwgMHg0OTc4YjgwMCwgMHg1OThjMDAwNCwKLQkweDgwNWMwNTgwLCAweDA0MDIwMDBkLCAweDQ5N2IxODA0LCAweDA0MDFmMDBiLAotCTB4NTk4YzAwMDQsIDB4ODA1YzA1ODAsIDB4MDQwMjAwMDUsIDB4NDg2MzE4MDQsCi0JMHg0OTc4YjgwMCwgMHg0OTc4YzAwMCwgMHgwNDAxZjAwNCwgMHg1ODVjMDAwMCwKLQkweDQ4MDBjMDAwLCAweDQ5NzhiODAwLCAweDA0MDFmOWZlLCAweDgwMDAwNTgwLAotCTB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDA0MDFmYTA0LCAweDRkZjAwMDAwLCAweDRkMmMwMDAwLAotCTB4NGQzNDAwMDAsIDB4NGQzMDAwMDAsIDB4NGM1YzAwMDAsIDB4NDE3OGI4MDAsCi0JMHg4ZDNlN2QxOCwgMHgwNDAwMDAwZCwgMHg4ZDNlN2QxNiwgMHgwNDAyMDAwYiwKLQkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDA4LCAweDAyMDFmODAwLAotCTB4MDAxMDk1OTcsIDB4MDQwMjAwMDUsIDB4NTkyYzAyMDcsIDB4NDkyZmM4NTcsCi0JMHg4MjAwYmQwMCwgMHgwMDAwMDAwZiwgMHg0MTc4MzAwMCwgMHg1OThlNjAwNSwKLQkweDgxMzI2MWMwLCAweDA0MDAwMDI5LCAweDU5MzI2ODA5LCAweDgxMzY2OWMwLAotCTB4MDQwMDAwMjMsIDB4NTkzNDA0MDMsIDB4ODE0NDA1ODAsIDB4MDQwMjAwMjAsCisJMHg1YzAwYzAwMCwgMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDA0MDFmOWYwLCAweDRkZjAwMDAwLCAweDRkMmMwMDAwLCAweDRkMzQwMDAwLAorCTB4NGQzMDAwMDAsIDB4NGM1YzAwMDAsIDB4NDE3OGI4MDAsIDB4OGQzZTdkMTgsCisJMHgwNDAwMDAwNCwgMHg4ZDNlN2QxNiwgMHgwNDAyMDAwMiwgMHg4MDVjYjgwMCwKKwkweDQxNzgzMDAwLCAweDU5OGU2MDA1LCAweDgxMzI2MWMwLCAweDA0MDAwMDI5LAorCTB4NTkzMjY4MDksIDB4ODEzNjY5YzAsIDB4MDQwMDAwMjMsIDB4NTkzNDA0MDMsCisJMHg4MTQ0MDU4MCwgMHgwNDAyMDAyMCwgMHg4MDVjYjljMCwgMHgwNDAyMDAwYiwKIAkweDU5MzAwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDExLCAweDA0MDAwMDFhLAogCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMDQsIDB4NTkzMDA0MjAsCi0JMHg4YzAwMDUwMCwgMHgwNDAyMDAxNiwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywKLQkweDA0MDAwMDA4LCAweDAyMDFmODAwLCAweDAwMTA5NTk3LCAweDA0MDIwMDA1LAotCTB4NTkzMDA0MDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDMsIDB4MDQwMDAwMGMsCi0JMHgwNDAxZjhjMywgMHg1OTMwMDAwMCwgMHg0YzAwMDAwMCwgMHgwNDAxZjgxMiwKLQkweDRjMTgwMDAwLCAweDA0MDFmODM2LCAweDVjMDAzMDAwLCAweDVjMDI2MDAwLAotCTB4MDQwMWY3ZGMsIDB4ODA1Y2I5YzAsIDB4MDQwMjA3ZWMsIDB4NDEzMDMwMDAsCi0JMHg1OTMyNjAwMCwgMHgwNDAxZjdkNywgMHg1YzAwYjgwMCwgMHg1YzAyNjAwMCwKLQkweDVjMDI2ODAwLCAweDVjMDI1ODAwLCAweDVjMDNlMDAwLCAweDA0MDAwOWI0LAotCTB4MWMwMWYwMDAsIDB4NTkzMDA4MDAsIDB4NDk3YTYwMDAsIDB4MDQwMWY5OTcsCi0JMHg4MDE4MzFjMCwgMHgwNDAyMDAwOSwgMHg1OThjMDAwNCwgMHg4MTMwMDU4MCwKLQkweDA0MDIwMDA0LCAweDQ4MDMxODA0LCAweDQ4MDMxODA1LCAweDA0MDFmMDA4LAotCTB4NDgwNzE4MDUsIDB4MDQwMWYwMDYsIDB4NDgwNDMwMDAsIDB4NTk4YzAwMDQsCi0JMHg4MTMwMDU4MCwgMHgwNDAyMDAwMiwgMHg0ODFiMTgwNCwgMHgwNDAxZjE5OSwKLQkweDQ5NDNjODU3LCAweDA0MDFmOWE4LCAweDRkZjAwMDAwLCAweDA0MDFmZTM0LAotCTB4MDQwMWZlY2IsIDB4NWMwM2UwMDAsIDB4MDQwMDA5OTksIDB4MWMwMWYwMDAsCi0JMHg0OTQ3Yzg1NywgMHgwNDAxZjlhMCwgMHg0ZGYwMDAwMCwgMHg0ZDNjMDAwMCwKLQkweDg1M2U3ZDAwLCAweDA0MDFmZTc1LCAweDA0MDFmZWZjLCAweDVjMDI3ODAwLAotCTB4NWMwM2UwMDAsIDB4MDQwMDA5OGUsIDB4MWMwMWYwMDAsIDB4NWMwMDAwMDAsCi0JMHg0YzAwMDAwMCwgMHg0ODAzYzg1NywgMHg0ZDM0MDAwMCwgMHg0ZDJjMDAwMCwKLQkweDU5MzI2ODA5LCAweDU5MzI1ODA4LCAweDU5MzAwNDA2LCAweDgyMDAwYzgwLAotCTB4MDAwMDAwMTIsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4NDkzM2M4NTcsCi0JMHg0OTQzYzg1NywgMHg0OTNmYzg1NywgMHg0ODAzYzg1NywgMHgwYzAxZjgwNCwKLQkweDVjMDI1ODAwLCAweDVjMDI2ODAwLCAweDFjMDFmMDAwLCAweDAwMTA2YWU1LAotCTB4MDAxMDZhZTcsIDB4MDAxMDZhZjEsIDB4MDAxMDZiMGIsIDB4MDAxMDZhZTcsCi0JMHgwMDEwNmFmYiwgMHgwMDEwNmIyMywgMHgwMDEwNmFlNSwgMHgwMDEwNmFlNSwKLQkweDAwMTA2YjM2LCAweDAwMTA2YjJkLCAweDAwMTA2YWU1LCAweDAwMTA2YWU1LAotCTB4MDAxMDZhZTUsIDB4MDAxMDZhZTUsIDB4MDAxMDZhZTUsIDB4MDAxMDZiM2MsCi0JMHgwMDEwNmIzYywgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA5MTM0LCAweDAyMDAwODAwLCAweDAwMTAyMDc0LCAweDAyMDFmODAwLAotCTB4MDAxMDkzMjYsIDB4MDIwMWY4MDAsIDB4MDAxMDgwMWMsIDB4MDIwMWYwMDAsCi0JMHgwMDEwNzkxMSwgMHg4MTJlNTljMCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKLQkweDU5MzAwMjFkLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDAyMDAwODAwLAotCTB4MDAxMDkxMmEsIDB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTAzNywgMHgwMjAwMDAwMCwgMHgwMDEwNzkxMSwgMHg1OTJjMTIwNCwKLQkweDgyMDgxNTAwLCAweDAwMDAwMGZmLCAweDgyMDgwNTgwLCAweDAwMDAwMDU1LAotCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NDk0MjVhMDYsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDJkYSwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OTMwMDAwNCwKLQkweDg0MDAwNTVjLCAweDQ4MDI2MDA0LCAweDU5MzAwMDA3LCAweDhjMDAwNTAwLAotCTB4MDIwMjA4MDAsIDB4MDAxMDBlOTksIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCi0JMHgwNDAwMDAwZCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg0OTQyNWEwNiwKLQkweDQ5N2E1YzA5LCAweDAyMDFmODAwLCAweDAwMTA5MWM2LCAweDAyMDFmODAwLAotCTB4MDAxMGE2OTMsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTEyYSwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OTMwMDAwNywKLQkweDhjMDAwNTAwLCAweDAyMDIwODAwLCAweDAwMTAwZTk5LCAweDAyMDFmODAwLAotCTB4MDAxMDkwMzcsIDB4MDIwMjA4MDAsIDB4MDAxMGEzZWYsIDB4MDIwMWYwMDAsCi0JMHgwMDEwNzkxMSwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAwNSwKLQkweDQ5NDI1YTA2LCAweDQ5N2E1YzA5LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAotCTB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCi0JMHgwMjAyMDgwMCwgMHgwMDEwNjY0ZiwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwKLQkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDA0LCAweDQ5NDI1YTA2LAotCTB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NTkzMjU4MTcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDdmZCwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OThjMDAwZCwKLQkweDgxMzAwNTgwLCAweDA0MDAwMDAzLCAweDQ5N2E2MDA3LCAweDFjMDFmMDAwLAotCTB4NTljNDAwMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMGMsIDB4MDQwMDAwMDUsCi0JMHg0YTAzODgwNCwgMHgwMDAwMDAwYywgMHg0OTdiMjgwNywgMHgwNDAxZjAwYSwKLQkweDA0MDFmYWNkLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDQwLAotCTB4MDQwMDAwMDQsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDIsIDB4MDQwMjAwMDIsCi0JMHg0OTdhNjAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNzBiOSwgMHg4MDAwMDU4MCwKLQkweDFjMDFmMDAwLCAweDU5MzAwODA0LCAweDhjMDQwZDNlLCAweDA0MDIwMDA0LAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDUsIDB4NDkzM2M4NTcsCi0JMHg4NDA0MGQzZSwgMHg0ODA2NjAwNCwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKLQkweDU5MzAwODA0LCAweDhjMDQwZDIwLCAweDA0MDIwMDA0LCAweDgyMDAwNTQwLAotCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQzODAwMDAsCi0JMHg1OTMwMDgwNCwgMHg4NDA0MGQyMCwgMHg0ODA2NjAwNCwgMHg0MjAyNzAwMCwKLQkweDAwMDAwMDQ5LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLAotCTB4MDQwMDAwMDMsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMTMsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDdhMSwgMHg4MDAwMDU4MCwgMHg1YzAyNzAwMCwgMHgxYzAxZjAwMCwKLQkweDU5MzAwMDE3LCAweDgxNDgwNTgwLCAweDA0MDIwMDAzLCAweDU5MzAwMDE4LAotCTB4ODE0YzA1ODAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NGQzMDAwMDAsCi0JMHgwNDAxZjhjOSwgMHg0ZGYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA2MiwKLQkweDU5OTAwMDAxLCAweDgyMDAwNTAwLCAweDAwMDAwMDAzLCAweDBjMDFmMDAxLAotCTB4MDAxMDZiYmEsIDB4MDAxMDZiOWEsIDB4MDAxMDZiOTgsIDB4MDAxMDZiOTgsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OTkyNjAwNCwgMHgwNDAxZjg4ZSwKLQkweDgxMzI2MWMwLCAweDA0MDAwMDFkLCAweDU5MzAwMDA0LCAweDhjMDAwNTE2LAotCTB4MDQwMDAwMDQsIDB4NTkzMjU4MDgsIDB4NDk3YTU4MDgsIDB4NDk3YTU4MDksCi0JMHgwNDAxZjg4ZSwgMHg1OTMwMDAwMSwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwZSwKLQkweDQ5N2E2MDAxLCAweDQyMDAzMDAwLCAweDAwMDBiZjJlLCAweDU4MTgwODAxLAotCTB4ODAwNDA5YzAsIDB4MDQwMjAwMDQsIDB4NDgwMDMwMDEsIDB4NDgwMDMwMDAsCi0JMHgwNDAxZjAwYSwgMHg1ODE4MDgwMCwgMHg0ODAwMDgwMCwgMHg0ODAwMzAwMCwKLQkweDA0MDFmMDA2LCAweDU5MzAwODA5LCAweDgwMDQwOWMwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4NDk3ODA4MGMsIDB4NWMwM2UwMDAsIDB4MDQwMDA4OTAsCi0JMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0ZDMwMDAwMCwKLQkweDQ5N2IyODA3LCAweDA0MDFmODk0LCAweDRkZjAwMDAwLCAweDU5OGMwMDAwLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4NDgwM2M4NTcsIDB4MGMwMWYwMDEsCi0JMHgwMDEwNmJlZiwgMHgwMDEwNmJkMiwgMHgwMDEwNmJkYiwgMHgwMDEwNmJkZiwKLQkweDAwMTA2YmVhLCAweDAwMTA2YmVmLCAweDAwMTA2YmQwLCAweDAwMTA2YmQwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTk4YzAwMGQsIDB4ODAwMjY1NDAsCi0JMHgwNDAwMDAwNCwgMHgwNDAxZjgxZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKLQkweDAyMDFmODAwLCAweDAwMTA3MGI5LCAweDA0MDFmMDE1LCAweDA0MDFmODI3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDcwYjksIDB4MDQwMWYwMTEsIDB4NTk4YzAwMGQsCi0JMHg4MDAyNjU0MCwgMHgwNDAwMDAwZSwgMHgwNDAxZjgzOCwgMHgwNDAwMDAwNCwKLQkweDA0MDFmODBmLCAweDA0MDAwMDAyLCAweDA0MDFmODFjLCAweDAyMDFmODAwLAotCTB4MDAxMDcwYjksIDB4MDQwMWYwMDYsIDB4MDQwMWY4MzAsIDB4MDIwMjA4MDAsCi0JMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwgMHgwMDEwNzBiOSwgMHg1YzAzZTAwMCwKLQkweDA0MDAwODViLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDU5OGMwMDA5LAotCTB4ODEzMDA1ODAsIDB4MDQwMjAwMGMsIDB4MDQwMWY4NGUsIDB4MDQwMWY4M2IsCi0JMHg1OTMwMDAwMCwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwNCwgMHg0ODAzMTgwOSwKLQkweDQ5N2E2MDAwLCAweDA0MDFmMDAzLCAweDQ5N2IxODA5LCAweDQ5N2IxODA4LAotCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMDA0MDYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAxMiwgMHg1OThjMDAwYiwKLQkweDgxMzAwNTgwLCAweDA0MDIwMDBmLCAweDA0MDFmODNhLCAweDU5MzI1ODA4LAotCTB4NDk3YTU4MDgsIDB4NDk3YTU4MDksIDB4MDQwMWY4MjQsIDB4NTkzMDAwMDAsCi0JMHg4MDAwMDFjMCwgMHgwNDAwMDAwNCwgMHg0ODAzMTgwYiwgMHg0OTdhNjAwMCwKLQkweDA0MDFmMDAzLCAweDQ5N2IxODBhLCAweDQ5N2IxODBiLCAweDgwMDAwNTgwLAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NTk4YzAwMDUsIDB4ODEzMDA1ODAsCi0JMHgwNDAyMDAwYywgMHgwNDAxZjgyNywgMHgwNDAxZjgxNCwgMHg1OTMwMDAwMCwKLQkweDgwMDAwMWMwLCAweDA0MDAwMDA0LCAweDQ4MDMxODA1LCAweDQ5N2E2MDAwLAotCTB4MDQwMWYwMDMsIDB4NDk3YjE4MDUsIDB4NDk3YjE4MDQsIDB4ODAwMDA1ODAsCi0JMHgxYzAxZjAwMCwgMHg0YTAzMjAwMSwgMHgwMDAwMDAwMCwgMHg0OTdiMjAwNCwKLQkweDQ5N2IyMDA1LCAweDU5OTAwMDA2LCAweDgyMDAwNTAwLCAweDAwMDBmZmZmLAotCTB4NDgwMzIwMDYsIDB4MWMwMWYwMDAsIDB4NGMwNDAwMDAsIDB4NTkzMDAwMDQsCi0JMHg4MjAwMDUwMCwgMHg3ZmZlZmZmZiwgMHg0ODAyNjAwNCwgMHg1OWJjMDBlNCwKLQkweDhjMDAwNTE0LCAweDA0MDAwMDA5LCAweDQyMDAwODAwLCAweDAwMDBiZjAwLAotCTB4NTgwNDAwMTIsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsIDB4NDk3ODA4MTIsCi0JMHg0YTAzNzhlNCwgMHgwMDAwMDgwMCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKLQkweDQ4MDNjODU2LCAweDU5OGMwMDBjLCAweDgwMDAwNTQwLCAweDA0MDAwMDAzLAotCTB4ODAwMDAwNDAsIDB4NDgwMzE4MGMsIDB4MWMwMWYwMDAsIDB4NTliYzAwZWEsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDAwNywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywKLQkweDA0MDIwMDA0LCAweDQ4MDNjODU2LCAweDRhMDM3OGU4LCAweDAwMDAwMDAxLAotCTB4MWMwMWYwMDAsIDB4NTliYzAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAyMDAxMSwgMHg0ODAzYzg1NiwKLQkweDQyMDAwODAwLCAweDAwMDAwMDAwLCAweDA0MDFmODBlLCAweDQyMDAwODAwLAotCTB4MDAwMDEwMDAsIDB4NTliYzAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg4MDA0MDg0MCwKLQkweDA0MDIwN2Y5LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDFjMDFmMDAwLAorCTB4OGMwMDA1MDAsIDB4MDQwMjAwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMDhkZjQsCisJMHgwNDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOTM2MCwgMHgwNDAyMDAwNSwKKwkweDU5MzAwNDAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDQzLCAweDA0MDAwMDBhLAorCTB4MDQwMWY4YzEsIDB4NTkzMDAwMDAsIDB4NGMwMDAwMDAsIDB4MDQwMWY4MTAsCisJMHg0YzE4MDAwMCwgMHgwNDAxZjgzNCwgMHg1YzAwMzAwMCwgMHg1YzAyNjAwMCwKKwkweDA0MDFmN2RhLCAweDQxMzAzMDAwLCAweDU5MzI2MDAwLCAweDA0MDFmN2Q3LAorCTB4NWMwMGI4MDAsIDB4NWMwMjYwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsCisJMHg1YzAzZTAwMCwgMHgwNDAwMDlhOSwgMHgxYzAxZjAwMCwgMHg1OTMwMDgwMCwKKwkweDQ5N2E2MDAwLCAweDA0MDFmOThjLCAweDgwMTgzMWMwLCAweDA0MDIwMDA5LAorCTB4NTk4YzAwMDQsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsIDB4NDgwMzE4MDQsCisJMHg0ODAzMTgwNSwgMHgwNDAxZjAwOCwgMHg0ODA3MTgwNSwgMHgwNDAxZjAwNiwKKwkweDQ4MDQzMDAwLCAweDU5OGMwMDA0LCAweDgxMzAwNTgwLCAweDA0MDIwMDAyLAorCTB4NDgxYjE4MDQsIDB4MDQwMWYxOGUsIDB4NDk0M2M4NTcsIDB4MDQwMWY5OWQsCisJMHg0ZGYwMDAwMCwgMHgwNDAxZmUzNywgMHgwNDAxZmVkMiwgMHg1YzAzZTAwMCwKKwkweDA0MDAwOThlLCAweDFjMDFmMDAwLCAweDQ5NDdjODU3LCAweDA0MDFmOTk1LAorCTB4NGRmMDAwMDAsIDB4NGQzYzAwMDAsIDB4ODUzZTdkMDAsIDB4MDQwMWZlN2EsCisJMHgwNDAxZmYwMywgMHg1YzAyNzgwMCwgMHg1YzAzZTAwMCwgMHgwNDAwMDk4MywKKwkweDFjMDFmMDAwLCAweDVjMDAwMDAwLCAweDRjMDAwMDAwLCAweDQ4MDNjODU3LAorCTB4NGQzNDAwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMjY4MDksIDB4NTkzMjU4MDgsCisJMHg1OTMwMDQwNiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAxMiwgMHgwMjAyMTgwMCwKKwkweDAwMTAwNjE1LCAweDQ5MzNjODU3LCAweDQ5NDNjODU3LCAweDQ5M2ZjODU3LAorCTB4NDgwM2M4NTcsIDB4MGMwMWY4MDQsIDB4NWMwMjU4MDAsIDB4NWMwMjY4MDAsCisJMHgxYzAxZjAwMCwgMHgwMDEwNjgyNywgMHgwMDEwNjgyOSwgMHgwMDEwNjgzMywKKwkweDAwMTA2ODRkLCAweDAwMTA2ODI5LCAweDAwMTA2ODNkLCAweDAwMTA2ODY1LAorCTB4MDAxMDY4MjcsIDB4MDAxMDY4MjcsIDB4MDAxMDY4NzgsIDB4MDAxMDY4NmYsCisJMHgwMDEwNjgyNywgMHgwMDEwNjgyNywgMHgwMDEwNjgyNywgMHgwMDEwNjgyNywKKwkweDAwMTA2ODI3LCAweDAwMTA2ODdlLCAweDAwMTA2ODdlLCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4MDIwMWY4MDAsIDB4MDAxMDhlZjEsIDB4MDIwMDA4MDAsCisJMHgwMDEwMWUxYiwgMHgwMjAxZjgwMCwgMHgwMDEwOTBlYywgMHgwMjAxZjgwMCwKKwkweDAwMTA3ZGE2LCAweDAyMDFmMDAwLCAweDAwMTA3Njk4LCAweDgxMmU1OWMwLAorCTB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMDAyMWQsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMywgMHgwMjAwMDgwMCwgMHgwMDEwOGVlNywgMHgwMjAxZjAwMCwKKwkweDAwMTA3Njk4LCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDAyMDAwMDAwLAorCTB4MDAxMDc2OTgsIDB4NTkyYzEyMDQsIDB4ODIwODE1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjA4MDU4MCwgMHgwMDAwMDA1NSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwKKwkweDQ5NDI1YTA2LCAweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDAyMDFmMDAwLAorCTB4MDAxMDc2OTgsIDB4NTkzMDAwMDQsIDB4ODQwMDA1NWMsIDB4NDgwMjYwMDQsCisJMHg1OTMwMDAwNywgMHg4YzAwMDUwMCwgMHgwMjAyMDgwMCwgMHgwMDEwMGVlNCwKKwkweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDBkLCAweDRhMDI1YTA0LAorCTB4MDAwMDAxMDMsIDB4NDk0MjVhMDYsIDB4NDk3YTVjMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwOGY3ZCwgMHgwMjAxZjgwMCwgMHgwMDEwYTRhZSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA4ZWU3LCAweDAyMDFmMDAwLAorCTB4MDAxMDc2OTgsIDB4NTkzMDAwMDcsIDB4OGMwMDA1MDAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMGVlNCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwMjAyMDgwMCwKKwkweDAwMTBhMjAxLCAweDAyMDFmMDAwLCAweDAwMTA3Njk4LCAweDAyMDFmODAwLAorCTB4MDAxMDhkZjQsIDB4MDQwMDAwMDUsIDB4NDk0MjVhMDYsIDB4NDk3YTVjMDksCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwMjAxZjAwMCwgMHgwMDEwNzY5OCwKKwkweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDAyMDIwODAwLCAweDAwMTA2MzlkLAorCTB4MDIwMWYwMDAsIDB4MDAxMDc2OTgsIDB4MDIwMWY4MDAsIDB4MDAxMDhkZjQsCisJMHgwNDAwMDAwNCwgMHg0OTQyNWEwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwKKwkweDU5MzI1ODE3LCAweDAyMDFmODAwLCAweDAwMTAwODQzLCAweDAyMDFmMDAwLAorCTB4MDAxMDc2OTgsIDB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsIDB4MDQwMDAwMDMsCisJMHg0OTdhNjAwNywgMHgxYzAxZjAwMCwgMHg1OWM0MDAwNCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDBjLCAweDA0MDAwMDA1LCAweDRhMDM4ODA0LCAweDAwMDAwMDBjLAorCTB4NDk3YjI4MDcsIDB4MDQwMWYwMGEsIDB4MDQwMWZhZGIsIDB4NTkzMDA0MDMsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDA0MCwgMHgwNDAwMDAwNCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDQyLCAweDA0MDIwMDAyLCAweDQ5N2E2MDA3LCAweDAyMDFmODAwLAorCTB4MDAxMDZlMTAsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDQsCisJMHg4YzA0MGQyMCwgMHgwNDAyMDAwNCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRkMzgwMDAwLCAweDU5MzAwODA0LAorCTB4ODQwNDBkMjAsIDB4NDgwNjYwMDQsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDksCisJMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwMywKKwkweDQyMDI3MDAwLCAweDAwMDAwMDEzLCAweDAyMDFmODAwLCAweDAwMDIwOGQ4LAorCTB4ODAwMDA1ODAsIDB4NWMwMjcwMDAsIDB4MWMwMWYwMDAsIDB4NTkzMDAwMTcsCisJMHg4MTQ4MDU4MCwgMHgwNDAyMDAwMywgMHg1OTMwMDAxOCwgMHg4MTRjMDU4MCwKKwkweDFjMDFmMDAwLCAweDRkMmMwMDAwLCAweDRkMzAwMDAwLCAweDA0MDFmOGM5LAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDVkOWIsIDB4NTk5MDAwMDEsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDAwMywgMHgwYzAxZjAwMSwgMHgwMDEwNjhmMSwKKwkweDAwMTA2OGQxLCAweDAwMTA2OGNmLCAweDAwMTA2OGNmLCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4NTk5MjYwMDQsIDB4MDQwMWY4OGUsIDB4ODEzMjYxYzAsCisJMHgwNDAwMDAxZCwgMHg1OTMwMDAwNCwgMHg4YzAwMDUxNiwgMHgwNDAwMDAwNCwKKwkweDU5MzI1ODA4LCAweDQ5N2E1ODA4LCAweDQ5N2E1ODA5LCAweDA0MDFmODhlLAorCTB4NTkzMDAwMDEsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMGUsIDB4NDk3YTYwMDEsCisJMHg0MjAwMzAwMCwgMHgwMDAwYmYyZSwgMHg1ODE4MDgwMSwgMHg4MDA0MDljMCwKKwkweDA0MDIwMDA0LCAweDQ4MDAzMDAxLCAweDQ4MDAzMDAwLCAweDA0MDFmMDBhLAorCTB4NTgxODA4MDAsIDB4NDgwMDA4MDAsIDB4NDgwMDMwMDAsIDB4MDQwMWYwMDYsCisJMHg1OTMwMDgwOSwgMHg4MDA0MDljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKKwkweDQ5NzgwODBjLCAweDVjMDNlMDAwLCAweDA0MDAwODkwLCAweDVjMDI2MDAwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NGQzMDAwMDAsIDB4NDk3YjI4MDcsCisJMHgwNDAxZjg5NCwgMHg0ZGYwMDAwMCwgMHg1OThjMDAwMCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDA3LCAweDQ4MDNjODU3LCAweDBjMDFmMDAxLCAweDAwMTA2OTI2LAorCTB4MDAxMDY5MDksIDB4MDAxMDY5MTIsIDB4MDAxMDY5MTYsIDB4MDAxMDY5MjEsCisJMHgwMDEwNjkyNiwgMHgwMDEwNjkwNywgMHgwMDEwNjkwNywgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDU5OGMwMDBkLCAweDgwMDI2NTQwLCAweDA0MDAwMDA0LAorCTB4MDQwMWY4MWUsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNmUxMCwgMHgwNDAxZjAxNSwgMHgwNDAxZjgyNywgMHgwMjAxZjgwMCwKKwkweDAwMTA2ZTEwLCAweDA0MDFmMDExLCAweDU5OGMwMDBkLCAweDgwMDI2NTQwLAorCTB4MDQwMDAwMGUsIDB4MDQwMWY4MzgsIDB4MDQwMDAwMDQsIDB4MDQwMWY4MGYsCisJMHgwNDAwMDAwMiwgMHgwNDAxZjgxYywgMHgwMjAxZjgwMCwgMHgwMDEwNmUxMCwKKwkweDA0MDFmMDA2LCAweDA0MDFmODMwLCAweDAyMDIwODAwLCAweDAwMTAwNjE1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDZlMTAsIDB4NWMwM2UwMDAsIDB4MDQwMDA4NWIsCisJMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg1OThjMDAwOSwgMHg4MTMwMDU4MCwKKwkweDA0MDIwMDBjLCAweDA0MDFmODRlLCAweDA0MDFmODNiLCAweDU5MzAwMDAwLAorCTB4ODAwMDAxYzAsIDB4MDQwMDAwMDQsIDB4NDgwMzE4MDksIDB4NDk3YTYwMDAsCisJMHgwNDAxZjAwMywgMHg0OTdiMTgwOSwgMHg0OTdiMTgwOCwgMHg4MDAwMDU4MCwKKwkweDFjMDFmMDAwLCAweDRkMmMwMDAwLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMDMsIDB4MDQwMjAwMTIsIDB4NTk4YzAwMGIsIDB4ODEzMDA1ODAsCisJMHgwNDAyMDAwZiwgMHgwNDAxZjgzYSwgMHg1OTMyNTgwOCwgMHg0OTdhNTgwOCwKKwkweDQ5N2E1ODA5LCAweDA0MDFmODI0LCAweDU5MzAwMDAwLCAweDgwMDAwMWMwLAorCTB4MDQwMDAwMDQsIDB4NDgwMzE4MGIsIDB4NDk3YTYwMDAsIDB4MDQwMWYwMDMsCisJMHg0OTdiMTgwYSwgMHg0OTdiMTgwYiwgMHg4MDAwMDU4MCwgMHg1YzAyNTgwMCwKKwkweDFjMDFmMDAwLCAweDU5OGMwMDA1LCAweDgxMzAwNTgwLCAweDA0MDIwMDBjLAorCTB4MDQwMWY4MjcsIDB4MDQwMWY4MTQsIDB4NTkzMDAwMDAsIDB4ODAwMDAxYzAsCisJMHgwNDAwMDAwNCwgMHg0ODAzMTgwNSwgMHg0OTdhNjAwMCwgMHgwNDAxZjAwMywKKwkweDQ5N2IxODA1LCAweDQ5N2IxODA0LCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLAorCTB4NGEwMzIwMDEsIDB4MDAwMDAwMDAsIDB4NDk3YjIwMDQsIDB4NDk3YjIwMDUsCisJMHg1OTkwMDAwNiwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwgMHg0ODAzMjAwNiwKKwkweDFjMDFmMDAwLCAweDRjMDQwMDAwLCAweDU5MzAwMDA0LCAweDgyMDAwNTAwLAorCTB4N2ZmZWZmZmYsIDB4NDgwMjYwMDQsIDB4NTliYzAwZTQsIDB4OGMwMDA1MTQsCisJMHgwNDAwMDAwOSwgMHg0MjAwMDgwMCwgMHgwMDAwYmYwMCwgMHg1ODA0MDAxMiwKKwkweDgxMzAwNTgwLCAweDA0MDIwMDA0LCAweDQ5NzgwODEyLCAweDRhMDM3OGU0LAorCTB4MDAwMDA4MDAsIDB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg1OThjMDAwYywgMHg4MDAwMDU0MCwgMHgwNDAwMDAwMywgMHg4MDAwMDA0MCwKKwkweDQ4MDMxODBjLCAweDFjMDFmMDAwLCAweDU5YmMwMGVhLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDcsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMDQsCisJMHg0ODAzYzg1NiwgMHg0YTAzNzhlOCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKIAkweDU5YmMwMGVhLCAweDgyMDAwNTAwLCAweDAwMDAwMDA3LCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDEsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NTliYzAwZWEsCi0JMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwgMHg0ODA3NzhlMSwgMHgxYzAxZjAwMCwKLQkweDU5YmMwMGVhLCAweDhjMDAwNTE2LCAweDA0MDIwN2ZlLCAweDQ4MDc3OGUxLAotCTB4NTliYzAwZWEsIDB4OGMwMDA1MTYsIDB4MDQwMjA3ZmUsIDB4NDgwYjc4ZTEsCi0JMHgxYzAxZjAwMCwgMHg4MjAwMGQwMCwgMHg4MDAwMDAxOCwgMHgwMjAyMDgwMCwKLQkweDAwMTAwNWQwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDAwMTA2Yzk3LAotCTB4MDAxMDZkM2IsIDB4MDAxMDZkNTUsIDB4MDAxMDZjOTcsIDB4MDAxMDZjOTksCi0JMHgwMDEwNmNiYSwgMHgwMDEwNmNkOSwgMHgwMDEwNmQwZCwgMHgwMDEwNmM5NywKLQkweDAwMTA2ZDM5LCAweDAwMTA2Yzk3LCAweDAwMTA2Yzk3LCAweDAwMTA2Yzk3LAotCTB4MDAxMDZjOTcsIDB4MDAxMDZjOTcsIDB4MDAxMDZjOTcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDVkOCwgMHg0ZDMwMDAwMCwgMHg0ZDkwMDAwMCwgMHg0ZGQwMDAwMCwKLQkweDRkYTQwMDAwLCAweDRkMTQwMDAwLCAweDAyMDFmODAwLCAweDAwMTA3MGQ4LAotCTB4NTliYzAwZWEsIDB4OGMwMDA1MTAsIDB4MDQwMDA3ZmUsIDB4NTliZTYwZTAsCi0JMHg1OTMwMDAwNCwgMHg4YzAwMDUyMCwgMHgwNDAwMDAxMSwgMHg4MjAwMDUwMCwKLQkweGZmZmVmZWZmLCAweDQ4MDI2MDA0LCAweDRhMDI2MjAzLCAweDAwMDAwMDAzLAotCTB4MDQwMWZmYTksIDB4MDIwMWY4MDAsIDB4MDAxMDBmZDAsIDB4NWMwMjI4MDAsCi0JMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwgMHg1YzAyNjAwMCwKLQkweDRhMDM3OGU0LCAweDAwMDAwMDA4LCAweDA0MDFmNzk1LCAweDg0MDAwNTEwLAotCTB4NDgwMjYwMDQsIDB4MDQwMWY3ZjYsIDB4NGQzMDAwMDAsIDB4NGQ5MDAwMDAsCisJMHgwMDAwMDAwMSwgMHgwNDAyMDAxMSwgMHg0ODAzYzg1NiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAwLCAweDA0MDFmODBlLCAweDQyMDAwODAwLCAweDAwMDAxMDAwLAorCTB4NTliYzAwZWEsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAwMDAwNSwgMHg4MDA0MDg0MCwgMHgwNDAyMDdmOSwKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDFjMDFmMDAwLCAweDU5YmMwMGVhLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDcsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OWJjMDBlYSwgMHg4YzAwMDUxNiwKKwkweDA0MDIwN2ZlLCAweDQ4MDc3OGUxLCAweDFjMDFmMDAwLCAweDU5YmMwMGVhLAorCTB4OGMwMDA1MTYsIDB4MDQwMjA3ZmUsIDB4NDgwNzc4ZTEsIDB4NTliYzAwZWEsCisJMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwgMHg0ODBiNzhlMSwgMHgxYzAxZjAwMCwKKwkweDRhMDM3OGU0LCAweDAwMDAyMDAwLCAweDU5YTgwMDZmLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMGMsIDB4MDQwMjAwMDgsIDB4NDIwMDcwMDAsIDB4MDAxMGIzM2YsCisJMHg1ODM4MDQwMSwgMHg4YzAwMDUwNiwgMHgwNDAyMDAwMywgMHg0YTAzNzhlNCwKKwkweDAwMDgwMDAwLCAweDFjMDFmMDAwLCAweDgyMDAwZDAwLCAweDgwMDAwMDE4LAorCTB4MDIwMjA4MDAsIDB4MDAxMDA2MGQsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsCisJMHgwMDEwNjlkYywgMHgwMDEwNmE4MSwgMHgwMDEwNmE5YiwgMHgwMDEwNjlkYywKKwkweDAwMTA2OWRlLCAweDAwMTA2OWZmLCAweDAwMTA2YTFlLCAweDAwMTA2YTUzLAorCTB4MDAxMDY5ZGMsIDB4MDAxMDZhN2YsIDB4MDAxMDY5ZGMsIDB4MDAxMDY5ZGMsCisJMHgwMDEwNjlkYywgMHgwMDEwNjlkYywgMHgwMDEwNjlkYywgMHgwMDEwNjlkYywKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDRkMzAwMDAwLCAweDRkOTAwMDAwLAogCTB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsIDB4NGQxNDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNzBkOCwgMHg1OWJjMDBlYSwgMHg4YzAwMDUxMCwgMHgwNDAwMDdmZSwKLQkweDU5YmU2MGUwLCAweDU5MzAwMDA0LCAweDhjMDAwNTIwLCAweDA0MDAwMDBmLAotCTB4ODIwMDA1MDAsIDB4ZmZmZWZlZmYsIDB4NDgwMjYwMDQsIDB4MDQwMWZmOGEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMTAwZSwgMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwKLQkweDVjMDNhMDAwLCAweDVjMDMyMDAwLCAweDVjMDI2MDAwLCAweDRhMDM3OGU0LAotCTB4MDAwMDAwMDgsIDB4MDQwMWY3NzYsIDB4ODQwMDA1MTAsIDB4NDgwMjYwMDQsCi0JMHgwNDAxZjdmNiwgMHg0ZDMwMDAwMCwgMHg0ZDJjMDAwMCwgMHg0ZDM0MDAwMCwKLQkweDRkYTQwMDAwLCAweDRjZDAwMDAwLCAweDU5YmMwMGVhLCAweDhjMDAwNTEwLAotCTB4MDQwMDA3ZmUsIDB4NTliZTYwZTAsIDB4ODEzMjYxYzAsIDB4MDIwMDA4MDAsCi0JMHgwMDEwMDVkOCwgMHg1OTMwMDAwNCwgMHg4YzAwMDUyMCwgMHgwNDAwMDAxZCwKLQkweDgyMDAwNTAwLCAweGZmZmVmZWZmLCAweDQ4MDI2MDA0LCAweDU5MzI2ODA5LAotCTB4NDIwMzQ4MDAsIDB4MDAxMGI1NDQsIDB4MDQwMTEwMDAsIDB4NGEwM2M4NDAsCi0JMHgwMDEwYjU0YiwgMHg0YTAzYzg0MiwgMHgwMDAwMDAxMiwgMHgwNDAxMTAwMCwKLQkweDRhMDNjODQwLCAweDAwMTBiNTVkLCAweDRhMDNjODQyLCAweDAwMDAwMGZmLAotCTB4MDQwMTEwMDAsIDB4NGEwM2M4NDAsIDB4MDAxMGI2NWMsIDB4NGEwM2M4NDIsCi0JMHgwMDAwMDBmZiwgMHgwNDAxZmJmMiwgMHg1YzAxYTAwMCwgMHg1YzAzNDgwMCwKLQkweDVjMDI2ODAwLCAweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLAotCTB4ODQwMDA1MTAsIDB4NDgwMjYwMDQsIDB4NWMwMWEwMDAsIDB4NWMwMzQ4MDAsCi0JMHg1YzAyNjgwMCwgMHg1YzAyNTgwMCwgMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwKLQkweDFjMDFmMDAwLCAweDRkMzAwMDAwLCAweDRkMmMwMDAwLCAweDRkMzQwMDAwLAotCTB4NGNkMDAwMDAsIDB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsCi0JMHg0ZDE0MDAwMCwgMHgwNDAxZmJjMywgMHg1OWJjMDBlYSwgMHg4YzAwMDUxMCwKLQkweDA0MDAwN2ZlLCAweDU5YmU2MGUwLCAweDgxMzI2MWMwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMGYsCi0JMHg4MjAwMDUwMCwgMHhmZmZlZmVmZiwgMHg0ODAyNjAwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA3ODNhLCAweDVjMDIyODAwLCAweDVjMDM0ODAwLCAweDVjMDNhMDAwLAotCTB4NWMwMzIwMDAsIDB4NWMwMWEwMDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsCi0JMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg4NDAwMDUxMCwgMHg0ODAyNjAwNCwKKwkweDAwMTA2ZTJmLCAweDU5YmMwMGVhLCAweDhjMDAwNTEwLCAweDA0MDAwN2ZlLAorCTB4NTliZTYwZTAsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMTEsCisJMHg4MjAwMDUwMCwgMHhmZmZlZmVmZiwgMHg0ODAyNjAwNCwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAzLCAweDA0MDFmZjliLCAweDAyMDFmODAwLCAweDAwMTAxMDFlLAogCTB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsIDB4NWMwM2EwMDAsIDB4NWMwMzIwMDAsCi0JMHg1YzAxYTAwMCwgMHg1YzAyNjgwMCwgMHg1YzAyNTgwMCwgMHg1YzAyNjAwMCwKLQkweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRkMzAwMDAwLAotCTB4NGQzODAwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4YzQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWE0NywgMHgwNDAxZmYxNCwgMHg1OThlNjAwZCwgMHg1OWM0MDAwNCwKLQkweDhjMDAwNTA2LCAweDA0MDAwMDA0LCAweDA0MDFmOGRiLCAweDRhMDM4ODA0LAotCTB4MDAwMDAwMDgsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMDYsIDB4MDQwMWZiODcsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAxNCwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKLQkweDRhMDM3OGU0LCAweDAwMDAwMDAyLCAweDVjMDI3MDAwLCAweDVjMDI2MDAwLAotCTB4MDQwMWY2ZjcsIDB4NGQxODAwMDAsIDB4NGQzMDAwMDAsIDB4NGQzODAwMDAsCisJMHg1YzAyNjAwMCwgMHg0YTAzNzhlNCwgMHgwMDAwMDAwOCwgMHgwNDAxZjc4NywKKwkweDg0MDAwNTEwLCAweDQ4MDI2MDA0LCAweDA0MDFmN2Y2LCAweDRkMzAwMDAwLAogCTB4NGQ5MDAwMDAsIDB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsIDB4NGQxNDAwMDAsCi0JMHgwNDAxZmVmOSwgMHg0MTdhMzAwMCwgMHg1OWM0MDgwNCwgMHg4MzE4MDQwMCwKLQkweDAwMTA3MDlmLCAweDUwMDAwMDAwLCAweDgwMDQwNTAwLCAweDA0MDAwMDFiLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4YzUsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHgwNDAxZmI3MCwgMHg1OTkyNjAwNCwgMHgwNDAxZjg1OSwgMHg4MzE4MDQwMCwKLQkweDAwMTA3MDlmLCAweDUwMDAwMDAwLCAweDQ4MDM4ODA0LCAweDgxMzI2MWMwLAotCTB4MDQwMDAwMGEsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MGMsIDB4MDQwMjAwMDMsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwMywgMHg0MjAyNzAwMCwgMHgwMDAwMDA0YSwKLQkweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDU5YzQwMDA0LCAweDgyMDAwNTAwLAotCTB4MDBmODAwMDAsIDB4MDQwMDAwMDUsIDB4ODExYTMwMDAsIDB4ODMxODA0ODAsCi0JMHgwMDAwMDAwNSwgMHgwNDAwMTdkZCwgMHg0YTAzNzhlNCwgMHgwMDAwMDAwOCwKLQkweDVjMDIyODAwLCAweDVjMDM0ODAwLCAweDVjMDNhMDAwLCAweDVjMDMyMDAwLAotCTB4NWMwMjcwMDAsIDB4NWMwMjYwMDAsIDB4NWMwMjMwMDAsIDB4MDQwMWY2YzAsCi0JMHg0ZDJjMDAwMCwgMHg0ZDM0MDAwMCwgMHg1OTMyNjgwOSwgMHg1OThjMDgwMCwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDA0LCAweDA0MDIwMDA0LCAweDgzOGMxNDAwLAotCTB4MDAwMDAwMDUsIDB4MDQwMWYwMGMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsCi0JMHgwNDAyMDAwNCwgMHg4MzhjMTQwMCwgMHgwMDAwMDAwOSwgMHgwNDAxZjAwNiwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDIyLCAweDgzOGMxNDAwLAotCTB4MDAwMDAwMGIsIDB4NDEzMDY4MDAsIDB4NTgzNDAwMDAsIDB4ODAwMDdkNDAsCi0JMHgwNDAwMDAxYywgMHg1ODNjMDAwOSwgMHg4MTM0MDU4MCwgMHgwNDAyMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTA2ZTJmLCAweDU5YmMwMGVhLCAweDhjMDAwNTEwLAorCTB4MDQwMDA3ZmUsIDB4NTliZTYwZTAsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsCisJMHgwNDAwMDAwZiwgMHg4MjAwMDUwMCwgMHhmZmZlZmVmZiwgMHg0ODAyNjAwNCwKKwkweDA0MDFmZjdjLCAweDAyMDFmODAwLCAweDAwMTAxMDVjLCAweDVjMDIyODAwLAorCTB4NWMwMzQ4MDAsIDB4NWMwM2EwMDAsIDB4NWMwMzIwMDAsIDB4NWMwMjYwMDAsCisJMHg0YTAzNzhlNCwgMHgwMDAwMDAwOCwgMHgwNDAxZjc2OCwgMHg4NDAwMDUxMCwKKwkweDQ4MDI2MDA0LCAweDA0MDFmN2Y2LCAweDRkMzAwMDAwLCAweDRkMmMwMDAwLAorCTB4NGQzNDAwMDAsIDB4NGRhNDAwMDAsIDB4NGNkMDAwMDAsIDB4NTliYzAwZWEsCisJMHg4YzAwMDUxMCwgMHgwNDAwMDdmZSwgMHg1OWJlNjBlMCwgMHg4MTMyNjFjMCwKKwkweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDU5MzAwMDA0LCAweDhjMDAwNTIwLAorCTB4MDQwMDAwMWUsIDB4ODIwMDA1MDAsIDB4ZmZmZWZlZmYsIDB4NDgwMjYwMDQsCisJMHg1OTMyNjgwOSwgMHg0MjAzNDgwMCwgMHgwMDEwYjM0MiwgMHgwNDAxMTAwMCwKKwkweDRhMDNjODQwLCAweDAwMTBiMzQ5LCAweDRhMDNjODQyLCAweDAwMDAwMDEyLAorCTB4MDQwMTEwMDAsIDB4NGEwM2M4NDAsIDB4MDAxMGIzNWIsIDB4NGEwM2M4NDIsCisJMHgwMDAwMDBmZiwgMHgwNDAxMTAwMCwgMHg0YTAzYzg0MCwgMHgwMDEwYjQ1YSwKKwkweDRhMDNjODQyLCAweDAwMDAwMGZmLCAweDAyMDFmODAwLCAweDAwMTA2ZTQ2LAorCTB4NWMwMWEwMDAsIDB4NWMwMzQ4MDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsCisJMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg4NDAwMDUxMCwgMHg0ODAyNjAwNCwKKwkweDVjMDFhMDAwLCAweDVjMDM0ODAwLCAweDVjMDI2ODAwLCAweDVjMDI1ODAwLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4MWMwMWYwMDAsIDB4NGQzMDAwMDAsCisJMHg0ZDJjMDAwMCwgMHg0ZDM0MDAwMCwgMHg0Y2QwMDAwMCwgMHg0ZDkwMDAwMCwKKwkweDRkZDAwMDAwLCAweDRkYTQwMDAwLCAweDRkMTQwMDAwLCAweDA0MDFmYmQ0LAorCTB4NTliYzAwZWEsIDB4OGMwMDA1MTAsIDB4MDQwMDA3ZmUsIDB4NTliZTYwZTAsCisJMHg4MTMyNjFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg1OTMwMDAwNCwKKwkweDhjMDAwNTIwLCAweDA0MDAwMDBmLCAweDgyMDAwNTAwLCAweGZmZmVmZWZmLAorCTB4NDgwMjYwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDc1YjksIDB4NWMwMjI4MDAsCisJMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwgMHg1YzAxYTAwMCwKKwkweDVjMDI2ODAwLCAweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLAorCTB4ODQwMDA1MTAsIDB4NDgwMjYwMDQsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsCisJMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwgMHg1YzAxYTAwMCwgMHg1YzAyNjgwMCwKKwkweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4NGQzMDAwMDAsIDB4NGQzODAwMDAsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjZjMywgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHgwNDAxZmYwNSwKKwkweDU5OGU2MDBkLCAweDU5YzQwMDA0LCAweDhjMDAwNTA2LCAweDA0MDAwMDA0LAorCTB4MDQwMWY4ZTUsIDB4NGEwMzg4MDQsIDB4MDAwMDAwMDgsIDB4ODEzMjYxYzAsCisJMHgwNDAwMDAwNiwgMHgwNDAxZmI5OCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxNCwKKwkweDAyMDFmODAwLCAweDAwMDIwOGQ4LCAweDRhMDM3OGU0LCAweDAwMDAwMDAyLAorCTB4NWMwMjcwMDAsIDB4NWMwMjYwMDAsIDB4MDQwMWY2ZTgsIDB4NGQxODAwMDAsCisJMHg0ZDMwMDAwMCwgMHg0ZDM4MDAwMCwgMHg0ZDkwMDAwMCwgMHg0ZGQwMDAwMCwKKwkweDRkYTQwMDAwLCAweDRkMTQwMDAwLCAweDA0MDFmZWVhLCAweDQxN2EzMDAwLAorCTB4NTljNDA4MDQsIDB4ODMxODA0MDAsIDB4MDAxMDZkZjYsIDB4NTAwMDAwMDAsCisJMHg4MDA0MDUwMCwgMHgwNDAwMDAxYiwgMHg0MjAwMDAwMCwgMHgwMDEwYjZjNCwKKwkweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDA0MDFmYjgxLCAweDU5OTI2MDA0LAorCTB4MDQwMWY4NjMsIDB4ODMxODA0MDAsIDB4MDAxMDZkZjYsIDB4NTAwMDAwMDAsCisJMHg0ODAzODgwNCwgMHg4MTMyNjFjMCwgMHgwNDAwMDAwYSwgMHg1OTMwMDAwNCwKKwkweDhjMDAwNTBjLCAweDA0MDIwMDAzLCAweDRhMDI2MjAzLCAweDAwMDAwMDAzLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNGEsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsCisJMHg1OWM0MDAwNCwgMHg4MjAwMDUwMCwgMHgwMGY4MDAwMCwgMHgwNDAwMDAwNSwKKwkweDgxMWEzMDAwLCAweDgzMTgwNDgwLCAweDAwMDAwMDA1LCAweDA0MDAxN2RkLAorCTB4NGEwMzc4ZTQsIDB4MDAwMDAwMDgsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsCisJMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwgMHg1YzAyNzAwMCwgMHg1YzAyNjAwMCwKKwkweDVjMDIzMDAwLCAweDA0MDFmNmIxLCAweDRkMmMwMDAwLCAweDRkMzQwMDAwLAorCTB4NTkzMjY4MDksIDB4NTk4YzA4MDAsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDQsCisJMHgwNDAyMDAwNiwgMHg4MzhjMTQwMCwgMHgwMDAwMDAwNSwgMHg4MzhjMWMwMCwKKwkweDAwMDAwMDA0LCAweDA0MDFmMDEwLCAweDgyMDQwNTgwLCAweDAwMDAwMDAxLAorCTB4MDQwMjAwMDYsIDB4ODM4YzE0MDAsIDB4MDAwMDAwMDksIDB4ODM4YzFjMDAsCisJMHgwMDAwMDAwOCwgMHgwNDAxZjAwOCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMiwKKwkweDA0MDIwMDI4LCAweDgzOGMxNDAwLCAweDAwMDAwMDBiLCAweDgzOGMxYzAwLAorCTB4MDAwMDAwMGEsIDB4NDEzMDY4MDAsIDB4NTgzNDAwMDAsIDB4ODAwMDdkNDAsCisJMHgwNDAwMDAyMCwgMHg1ODNjMDAwOSwgMHg4MTM0MDU4MCwgMHgwNDAyMDAwNiwKIAkweDQwM2M2ODAwLCAweDU4M2MwMDAwLCAweDgwMDA3ZDQwLCAweDA0MDIwN2ZhLAotCTB4MDQwMWYwMTQsIDB4NDkzM2M4NTcsIDB4NDgzZmM4NTcsIDB4NTgzYzAwMDAsCi0JMHg0ODAwNjgwMCwgMHg0OTMwNzgwMCwgMHg0NDNjMTAwMCwgMHg4MDAwMDU4MCwKKwkweDA0MDFmMDE4LCAweDQ5MzNjODU3LCAweDQ4M2ZjODU3LCAweDU4M2MwMDAwLAorCTB4NDgwMDY4MDAsIDB4NDkzMDc4MDAsIDB4NDQzYzEwMDAsIDB4NTAwYzAwMDAsCisJMHg4MDNjMDU4MCwgMHgwNDAyMDAwMiwgMHg0NDM0MTgwMCwgMHg4MDAwMDU4MCwKIAkweDQ4MDMxODBkLCAweDQ4MDMxODBmLCAweDU5OGMwMDAwLCAweDgyMDAwNTgwLAogCTB4MDAwMDAwMDMsIDB4MDQwMDAwMDMsIDB4NGEwMzE4MDAsIDB4MDAwMDAwMDAsCiAJMHg4MDAwMDU4MCwgMHg1YzAyNjgwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKIAkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmN2ZiLCAweDQ5MWJjODU3LAogCTB4NTljODA4NDAsIDB4ODIwNDA1NDAsIDB4MDAwMDAwMTAsIDB4NDgwMzkwNDAsCiAJMHg1OWM0MTAwOCwgMHg4MjA4MDUwMCwgMHhmZmZmZmY3ZiwgMHg0ODAzODgwOCwKLQkweDRjMDQwMDAwLCAweDRjMDgwMDAwLCAweDA0MDFmYWJiLCAweDA0MDIwMDA3LAotCTB4MDQwMWZhYmYsIDB4MDQwMDAwMjIsIDB4NDgwMzg4MDQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTA3YSwgMHgwNDAxZjA0MiwgMHg0YTAzODgwMywgMHgwMDAwMDAwOCwKKwkweDRjMDQwMDAwLCAweDRjMDgwMDAwLCAweDA0MDFmYWMyLCAweDA0MDIwMDA3LAorCTB4MDQwMWZhYzYsIDB4MDQwMDAwMjIsIDB4NDgwMzg4MDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTBjYSwgMHgwNDAxZjA0MiwgMHg0YTAzODgwMywgMHgwMDAwMDAwOCwKIAkweDU5YzQwMDAzLCAweDgyMDAwNTAwLCAweDAwMDAwMDAzLCAweDA0MDAwN2ZkLAotCTB4OGMwMDA1MDIsIDB4MDQwMjAwMDcsIDB4MDQwMWZhYjEsIDB4MDQwMDAwMTQsCi0JMHg0ODAzODgwNCwgMHgwMjAxZjgwMCwgMHgwMDEwMTA3YSwgMHgwNDAxZjAzNCwKKwkweDhjMDAwNTAyLCAweDA0MDIwMDA3LCAweDA0MDFmYWI4LCAweDA0MDAwMDE0LAorCTB4NDgwMzg4MDQsIDB4MDIwMWY4MDAsIDB4MDAxMDEwY2EsIDB4MDQwMWYwMzQsCiAJMHg1OWM4MDA0MCwgMHg4NDAwMDU2YSwgMHg0ODAzOTA0MCwgMHg1OWM4MDA0MCwKIAkweDhjMDAwNTJhLCAweDA0MDIwN2ZlLCAweDU5YzQwMDA1LCAweDgyMDAwNTAwLAogCTB4YzAwMDAwMDAsIDB4MDQwMDAwMDYsIDB4NTljNDAwYTMsIDB4ODQwMDA1NDAsCiAJMHg0ODAzODhhMywgMHg0YTAzODgwNSwgMHhjMDAwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxMDFkLCAweDRhMDNhMDA1LCAweDMwMDAwMDAwLCAweDU5ZDAwMDA2LAorCTB4MDAxMDEwNmIsIDB4NGEwM2EwMDUsIDB4MzAwMDAwMDAsIDB4NTlkMDAwMDYsCiAJMHg0YTAzYTAwNSwgMHgzMDAwMDAwMCwgMHg1OTkwMDAwNiwgMHg4MjAwMDUwMCwKIAkweGZmZmYwMDAwLCAweDQ4MDMyMDA2LCAweDU5ZDAwMDA1LCAweDhjMDAwNTA0LAogCTB4MDQwMjA3ZmUsIDB4NDIwMDA4MDAsIDB4MDAwMDc2MDAsIDB4ODMxODA1NDAsCiAJMHg2MDAwMDAwMCwgMHg0ODAwMDhhMSwgMHg4MTE4MDBkYywgMHg1OWM4MDg0MCwKIAkweDgwMDQwNTQwLCAweDQ4MDM5MDQwLCAweDgyMDAwNTQwLCAweDAwMDAzMDAwLAogCTB4NDgwMzkwNDAsIDB4NTljODAwNDAsIDB4ODIwMDA1MDAsIDB4MDAwMDMwMDAsCi0JMHgwNDAyMDdmZCwgMHgwMjAxZjgwMCwgMHgwMDEwMTA2OCwgMHg4MzE4MDQwMCwKLQkweDAwMTA3MDlmLCAweDUwMDAwMDAwLCAweDQ4MDM4ODA0LCAweDgwMDAwNTgwLAotCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDYwNjIsIDB4NWMwM2UwMDAsCisJMHgwNDAyMDdmZCwgMHgwMjAxZjgwMCwgMHgwMDEwMTBiOCwgMHg4MzE4MDQwMCwKKwkweDAwMTA2ZGY2LCAweDUwMDAwMDAwLCAweDQ4MDM4ODA0LCAweDgwMDAwNTgwLAorCTB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDVkOWIsIDB4NWMwM2UwMDAsCiAJMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHg0ODBiODgwOCwgMHg0ODA3OTA0MCwKIAkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDU5YzgwODQwLCAweDgyMDQwNTQwLAogCTB4MDAwMDAwMTAsIDB4NDgwMzkwNDAsIDB4NTljNDEwMDgsIDB4ODIwODA1MDAsCkBAIC03MTAzLDI4NyArNjkzMSwyOTcgQEAKIAkweGMwMDAwMDAwLCAweDA0MDAwMDA3LCAweDU5YzQwMGEzLCAweDg0MDAwNTQwLAogCTB4NDgwMzg4YTMsIDB4NGEwMzg4MDUsIDB4YzAwMDAwMDAsIDB4ODAwMDA1ODAsCiAJMHg0OTdiMjgwNywgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHg0ODBiODgwOCwKLQkweDQ4MDc5MDQwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRkOTAwMDAwLAotCTB4NGRkMDAwMDAsIDB4NGRhNDAwMDAsIDB4NGQxNDAwMDAsIDB4MDQwMWZkZWUsCi0JMHg0ZGYwMDAwMCwgMHgwNDAxZmE2ZiwgMHg1OTkwMDAwNCwgMHg4MDAwMDFjMCwKKwkweDQ4MDc5MDQwLCAweDFjMDFmMDAwLCAweDVjMDAwMDAwLCAweDRjMDAwMDAwLAorCTB4NDgwM2M4NTcsIDB4NDkxYmM4NTcsIDB4NDkzM2M4NTcsIDB4NGQ5MDAwMDAsCisJMHg0ZGQwMDAwMCwgMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwgMHgwNDAxZmRkMSwKKwkweDRkZjAwMDAwLCAweDA0MDFmYTcyLCAweDU5OTAwMDA0LCAweDgwMDAwMWMwLAogCTB4MDQwMDAwMTEsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMGYsIDB4NTkzMDAwMDQsCi0JMHg4NDAwMDUyMCwgMHg0ODAyNjAwNCwgMHgwNDAxZmY1MSwgMHgwNDAyMDAwOSwKLQkweDVjMDNlMDAwLCAweDA0MDAwZGQ2LCAweDgwMDAwNTgwLCAweDVjMDIyODAwLAorCTB4ODQwMDA1MjAsIDB4NDgwMjYwMDQsIDB4MDQwMWZmNGQsIDB4MDQwMjAwMDksCisJMHg1YzAzZTAwMCwgMHgwNDAwMGRiOSwgMHg4MDAwMDU4MCwgMHg1YzAyMjgwMCwKIAkweDVjMDM0ODAwLCAweDVjMDNhMDAwLCAweDVjMDMyMDAwLCAweDFjMDFmMDAwLAotCTB4MDQwMWZkMGUsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDksIDB4NTkzMDAwMDQsCisJMHgwNDAxZmNmMSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0OSwgMHg1OTMwMDAwNCwKIAkweDg0MDAwNTIwLCAweDQ4MDI2MDA0LCAweDhjMDAwNTBjLCAweDAyMDIwODAwLAotCTB4MDAwMjA3YTEsIDB4NWMwM2UwMDAsIDB4MDQwMDBkYzUsIDB4ODIwMDA1NDAsCisJMHgwMDAyMDhkOCwgMHg1YzAzZTAwMCwgMHgwNDAwMGRhOCwgMHg4MjAwMDU0MCwKIAkweDAwMDAwMDAxLCAweDVjMDIyODAwLCAweDVjMDM0ODAwLCAweDVjMDNhMDAwLAotCTB4NWMwMzIwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4MDQwMWZkYzYsCisJMHg1YzAzMjAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHgwNDAxZmRhOSwKIAkweDRkZjAwMDAwLCAweDU5OGMwMDBkLCAweDgwMDI2NTQwLCAweDA0MDAwMDEyLAotCTB4NTkzMDAwMDQsIDB4ODQwMDA1MjAsIDB4NDgwMjYwMDQsIDB4MDQwMWZmOGEsCi0JMHgwNDAwMDAxNywgMHgwNDAxZmQyNiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxMywKLQkweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDAyMDIwODAwLCAweDAwMDIwN2ExLAotCTB4NWMwM2UwMDAsIDB4MDQwMDBkYWEsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg1OTMwMDAwNCwgMHg4NDAwMDUyMCwgMHg0ODAyNjAwNCwgMHgwNDAxZmY4NiwKKwkweDA0MDAwMDE3LCAweDA0MDFmZDA5LCAweDQyMDI3MDAwLCAweDAwMDAwMDEzLAorCTB4NTkzMDAwMDQsIDB4OGMwMDA1MGMsIDB4MDIwMjA4MDAsIDB4MDAwMjA4ZDgsCisJMHg1YzAzZTAwMCwgMHgwNDAwMGQ4ZCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKIAkweDFjMDFmMDAwLCAweDgzNmMxNTgwLCAweDAwMDAwMDAxLCAweDA0MDAwN2Y5LAogCTB4ODM2YzE1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMDA3ZjYsIDB4NDIwMDEwMDAsCi0JMHgwMDEwNDE0OCwgMHgwMjAxZjgwMCwgMHgwMDEwNWY5MCwgMHg1YzAzZTAwMCwKLQkweDA0MDAwZDliLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDRkMzAwMDAwLAotCTB4NGQxODAwMDAsIDB4NGQzYzAwMDAsIDB4MDQwMWZkOWYsIDB4NGRmMDAwMDAsCi0JMHg0YTAzNzhlNCwgMHgwMDAwMDAwZiwgMHgwNDAxZjlmZiwgMHg0MTdhMzAwMCwKKwkweDAwMTAzZjYyLCAweDAyMDFmODAwLCAweDAwMTA1Y2M5LCAweDVjMDNlMDAwLAorCTB4MDQwMDBkN2UsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NGQzMDAwMDAsCisJMHg0ZDE4MDAwMCwgMHg0ZDNjMDAwMCwgMHgwNDAxZmQ4MiwgMHg0ZGYwMDAwMCwKKwkweDRhMDM3OGU0LCAweDAwMDAwMDBmLCAweDA0MDFmYTAyLCAweDQxN2EzMDAwLAogCTB4NTk5MjYwMDQsIDB4ODEzMjYxYzAsIDB4MDQwMDAwMTAsIDB4NDE3YTc4MDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDhkOSwgMHgwNDAwMDAwYSwgMHg1OTMwMGMwNiwKKwkweDAyMDFmODAwLCAweDAwMTA0NzI4LCAweDA0MDAwMDBhLCAweDU5MzAwYzA2LAogCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDQsIDB4ODIwNDA1ODAsCiAJMHgwMDAwMDAwNiwgMHgwNDAyMDAwMywgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMiwKLQkweDAyMDFmODAwLCAweDAwMTA4YmUzLCAweDgxMWEzMDAwLCAweDgzMTgwNDgwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDg5OTcsIDB4ODExYTMwMDAsIDB4ODMxODA0ODAsCiAJMHgwMDAwMDAwNSwgMHgwNDAwMTdlYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDA0MCwKLQkweDAyMDFmODAwLCAweDAwMTAxMzQ1LCAweDRhMDM3OGU0LCAweDAwMDAwMDBhLAotCTB4NWMwM2UwMDAsIDB4MDQwMDBkNzIsIDB4NWMwMjc4MDAsIDB4NWMwMjMwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTM5NSwgMHg0YTAzNzhlNCwgMHgwMDAwMDAwYSwKKwkweDVjMDNlMDAwLCAweDA0MDAwZDU1LCAweDVjMDI3ODAwLCAweDVjMDIzMDAwLAogCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsCi0JMHgwNDAxZmQ3NSwgMHg0ZGYwMDAwMCwgMHg1OWM4MDg0MCwgMHg4MjA0MDU0MCwKKwkweDA0MDFmZDU4LCAweDRkZjAwMDAwLCAweDU5YzgwODQwLCAweDgyMDQwNTQwLAogCTB4MDAwMDAwMTAsIDB4NDgwMzkwNDAsIDB4NTljNDEwMDgsIDB4ODIwODA1MDAsCiAJMHhmZmZmZmY3ZiwgMHg0ODAzODgwOCwgMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwKLQkweDQyMDAxMDAwLCAweDAwMDAwMDAzLCAweDA0MDFmOWMyLCAweDU5OGU2MDBkLAotCTB4ODEzMjYxYzAsIDB4MDQwMjBmOWQsIDB4MDQwMDA5YzcsIDB4NDk3YjI4MDcsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwMywgMHgwNDAxZjljNSwgMHg1OThlNjAwZCwKKwkweDgxMzI2MWMwLCAweDA0MDIwZjlkLCAweDA0MDAwOWNhLCAweDQ5N2IyODA3LAogCTB4MDQwMWY4MGEsIDB4NWMwMDEwMDAsIDB4NWMwMDA4MDAsIDB4NDgwYjg4MDgsCi0JMHg4NDA0MGQ3NCwgMHg0ODA3OTA0MCwgMHg1YzAzZTAwMCwgMHgwNDAwMGQ1MCwKKwkweDg0MDQwZDc0LCAweDQ4MDc5MDQwLCAweDVjMDNlMDAwLCAweDA0MDAwZDMzLAogCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NGQzODAwMDAsIDB4NGQxODAwMDAsCiAJMHg0ZDMwMDAwMCwgMHg0ZDkwMDAwMCwgMHg0ZGQwMDAwMCwgMHg0ZGE0MDAwMCwKIAkweDRkMTQwMDAwLCAweDU5YzQxMDA0LCAweDQ4MGJjODU3LCAweDgyMDgwNTAwLAogCTB4MDAwMDNmZjAsIDB4MDQwMDAwMjUsIDB4NDE3YTMwMDAsIDB4NGMwODAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjA2MiwgMHg1YzAwMTAwMCwgMHg4MjA4MDUwMCwKKwkweDAyMDFmODAwLCAweDAwMTA1ZDliLCAweDVjMDAxMDAwLCAweDgyMDgwNTAwLAogCTB4MDAwMDAyMTAsIDB4MDQwMjAwMDQsIDB4ODExYTMwMDAsIDB4ODAwODExMDIsCi0JMHgwNDAxZjdmNywgMHgwNDAxZjljMywgMHg1OTkyNjAwNCwgMHg0OTMzYzg1NywKKwkweDA0MDFmN2Y3LCAweDA0MDFmOWM2LCAweDU5OTI2MDA0LCAweDQ5MzNjODU3LAogCTB4ODEzMjYxYzAsIDB4MDQwMjAwMDUsIDB4NTljNDAwYTMsIDB4OGMwMDA1MWEsCi0JMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZmVhNSwgMHgwNDAwMDAwOSwKLQkweDA0MDFmYzZhLCAweDQyMDI3MDAwLCAweDAwMDAwMDQ5LCAweDU5MzAwMDA0LAotCTB4OGMwMDA1MGMsIDB4MDIwMjA4MDAsIDB4MDAwMjA3YTEsIDB4MDQwMWYwMDcsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHgwNDAxZmVhMSwgMHgwNDAwMDAwOSwKKwkweDA0MDFmYzRkLCAweDQyMDI3MDAwLCAweDAwMDAwMDQ5LCAweDU5MzAwMDA0LAorCTB4OGMwMDA1MGMsIDB4MDIwMjA4MDAsIDB4MDAwMjA4ZDgsIDB4MDQwMWYwMDcsCiAJMHg0MjAyNzAwMCwgMHgwMDAwMDA0YSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMywKLQkweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDVjMDIyODAwLCAweDVjMDM0ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsCiAJMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwgMHg1YzAyNjAwMCwgMHg1YzAyMzAwMCwKIAkweDVjMDI3MDAwLCAweDFjMDFmMDAwLCAweDRkMzAwMDAwLCAweDRkMTgwMDAwLAotCTB4NGQ5MDAwMDAsIDB4MDQwMWZkMWMsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDAsCi0JMHg1OThjMDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDk3MSwKKwkweDRkOTAwMDAwLCAweDA0MDFmY2ZmLCAweDQyMDAxMDAwLCAweDAwMDAwMDAwLAorCTB4NTk4YzAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDA5NzQsCiAJMHg0MTdhMzAwMCwgMHg4MTFiMjBjOCwgMHg4MzkzMjQwMCwgMHgwMDAwYmYzMiwKIAkweDU5OTAwMDAxLCAweDgyMDAwNTgwLCAweDAwMDAwMDAxLCAweDA0MDIwMDBkLAogCTB4NDIwMDA4MDAsIDB4MDAwMDA3ZDAsIDB4NTk5MjYwMDQsIDB4NTkzMDAwMTEsCiAJMHg4MjAwMDUwMCwgMHhmZmYwMDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwMywKLQkweDQyMDAwODAwLCAweDAwMDAxYjU4LCAweDAyMDFmODAwLCAweDAwMTA2MDU0LAorCTB4NDIwMDA4MDAsIDB4MDAwMDFiNTgsIDB4MDIwMWY4MDAsIDB4MDAxMDVkOGQsCiAJMHg4MTFhMzAwMCwgMHg4MzE4MDQ4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMTdlYSwKLQkweDU5YzgxMDQwLCAweDg0MDgxNTM0LCAweDQ4MGI5MDQwLCAweDA0MDFmY2YwLAorCTB4NTljODEwNDAsIDB4ODQwODE1MzQsIDB4NDgwYjkwNDAsIDB4MDQwMWZjZDMsCiAJMHg1YzAzMjAwMCwgMHg1YzAyMzAwMCwgMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwKIAkweDQ5MzNjODU3LCAweDRkOTAwMDAwLCAweDRkZDAwMDAwLCAweDRkYTQwMDAwLAotCTB4NGQxNDAwMDAsIDB4NGQzODAwMDAsIDB4MDQwMWZjZWYsIDB4NGRmMDAwMDAsCisJMHg0ZDE0MDAwMCwgMHg0ZDM4MDAwMCwgMHgwNDAxZmNkMiwgMHg0ZGYwMDAwMCwKIAkweDU5MzAwMDA0LCAweDhjMDAwNTNlLCAweDA0MDIwMDA3LCAweDhjMDAwNTIwLAotCTB4MDQwMDAwMjUsIDB4MDIwMWY4MDAsIDB4MDAxMDZiNmMsIDB4MDQwMDAwMjIsCi0JMHgwNDAxZjAyYSwgMHg1OThjMDAwZCwgMHg4MTMwMDU4MCwgMHgwNDAwMDAxMSwKLQkweDAyMDFmODAwLCAweDAwMTA4Y2Q2LCAweDA0MDIwMDI0LCAweDA0MDFmOTE4LAotCTB4MDQwMDAwMjIsIDB4NDgwMzg4MDQsIDB4MDQwMWY5NWUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTA3YSwgMHgwNDAxZmMwZCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0OSwKLQkweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDIwMDBkLCAweDA0MDFmMDBlLAotCTB4NTljNDAwMDQsIDB4OGMwMDA1MDQsIDB4MDQwMDAwMTQsIDB4NGEwMzg4MDQsCi0JMHgwMDAwMDAwNCwgMHgwNDAxZmMzNiwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxMywKLQkweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDAwMDAzLCAweDAyMDFmODAwLAotCTB4MDAwMjA3YTEsIDB4NWMwM2UwMDAsIDB4MDQwMDBjYjksIDB4NWMwMjcwMDAsCi0JMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwKLQkweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDVjMDNlMDAwLCAweDA0MDAwY2IwLAorCTB4MDQwMDAwMjYsIDB4MDIwMWY4MDAsIDB4MDAxMDY4YTMsIDB4MDQwMDAwMjMsCisJMHgwNDAxZjAyYiwgMHg1OThjMDAwZCwgMHg4MTMwMDU4MCwgMHgwNDAwMDAxMiwKKwkweDAyMDFmODAwLCAweDAwMTA4YThhLCAweDA0MDIwMDI1LCAweDA0MDFmOTFiLAorCTB4MDQwMDAwMjMsIDB4NDgwMzg4MDQsIDB4MDQwMWY5NjEsIDB4MDIwMWY4MDAsCisJMHgwMDEwMTBjYSwgMHgwMjAxZjgwMCwgMHgwMDEwNjhjMSwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDQ5LCAweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDIwMDBkLAorCTB4MDQwMWYwMGUsIDB4NTljNDAwMDQsIDB4OGMwMDA1MDQsIDB4MDQwMDAwMTQsCisJMHg0YTAzODgwNCwgMHgwMDAwMDAwNCwgMHgwNDAxZmMxOCwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDEzLCAweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDAwMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4NWMwM2UwMDAsIDB4MDQwMDBjOWIsCiAJMHg1YzAyNzAwMCwgMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwKLQkweDVjMDMyMDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAotCTB4NDk3YjI4MDcsIDB4MDQwMWZjYjAsIDB4NTljNDAwYWYsIDB4ODAwMDAxYzAsCi0JMHgwNDAyMDAwNCwgMHgwNDAxZmNhMiwgMHgwMjAxZjAwMCwgMHgwMDEwMTRmYiwKLQkweDU5OGMwMDBmLCAweDgyMDAxNDgwLCAweDAwMDAwMDAyLCAweDA0MDIxMDA3LAotCTB4ODAwMDAwMDAsIDB4NDgwMzE4MGYsIDB4ODAwMDA1ODAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjA0ZCwgMHgwNDAwMDAwZSwgMHgwNDAxZmVkOCwgMHgwNDAyMDAwYywKLQkweDA0MDFmZGQ0LCAweDA0MDAwMDBhLCAweDAyMDFmODAwLCAweDAwMTBhOWM3LAotCTB4MDQwMWY5MTYsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMTQsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHgwNDAxZmM4OCwKLQkweDAyMDFmMDAwLCAweDAwMTAxNGZiLCAweDRkOTAwMDAwLCAweDRkZDAwMDAwLAotCTB4NGRhNDAwMDAsIDB4NGQxNDAwMDAsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjA2MiwgMHgwNDAxZmM4OCwgMHg1OWM0MDBhZiwgMHg4MDAwMDFjMCwKLQkweDA0MDAwMDI3LCAweDA0MDFmOTA3LCAweDU5OTI2MDA0LCAweDQ5MzNjODU3LAotCTB4NTkzMDAwMDQsIDB4OGMwMDA1MTYsIDB4MDQwMDAwMGIsIDB4MDQwMWZlOGIsCi0JMHgwNDAyMDAxZiwgMHgwMjAxZjgwMCwgMHgwMDEwNmI4YSwgMHgwNDAxZmM3MCwKLQkweDQyMDAwODAwLCAweDgwMDAwODA0LCAweDAyMDFmODAwLCAweDAwMTA2NzIxLAotCTB4MDQwMWYwMTcsIDB4NDIwMDE4MDAsIDB4MDAwMDc1MzAsIDB4MDQwMWY4YzEsCi0JMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNjA1MiwgMHgwNDAxZjAxMCwKLQkweDA0MDFmZTdhLCAweDA0MDIwMDBlLCAweDAyMDFmODAwLCAweDAwMTBhOWM3LAotCTB4NTkzMDAwMDQsIDB4OGMwMDA1MGMsIDB4MDQwMjAwMDMsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMywgMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0YSwKLQkweDAyMDFmODAwLCAweDAwMDIwN2ExLCAweDVjMDI3MDAwLCAweDA0MDFmYzU0LAotCTB4NWMwMjYwMDAsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsIDB4NWMwM2EwMDAsCi0JMHg1YzAzMjAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwMTRmYiwgMHg0ZDkwMDAwMCwKKwkweDVjMDMyMDAwLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDVjMDNlMDAwLAorCTB4MDQwMDBjOTIsIDB4NWMwMjcwMDAsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsCisJMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDQ5N2IyODA3LCAweDA0MDFmYzkyLCAweDU5YzQwMGFmLAorCTB4ODAwMDAxYzAsIDB4MDQwMjAwMDQsIDB4MDQwMWZjODQsIDB4MDIwMWYwMDAsCisJMHgwMDEwMTU2NSwgMHg1OThjMDAwZiwgMHg4MjAwMTQ4MCwgMHgwMDAwMDAwMiwKKwkweDA0MDIxMDA3LCAweDgwMDAwMDAwLCAweDQ4MDMxODBmLCAweDgwMDAwNTgwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVkODYsIDB4MDQwMDAwMGUsIDB4MDQwMWZlZDcsCisJMHgwNDAyMDAwYywgMHgwNDAxZmRjNSwgMHgwNDAwMDAwYSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhN2VlLCAweDA0MDFmOTE4LCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4NWMwMjcwMDAsCisJMHgwNDAxZmM2YSwgMHgwMjAxZjAwMCwgMHgwMDEwMTU2NSwgMHg0ZDkwMDAwMCwKIAkweDRkZDAwMDAwLCAweDRkYTQwMDAwLCAweDRkMTQwMDAwLCAweDRkMzAwMDAwLAotCTB4NGQyYzAwMDAsIDB4MDQwMWZjNTAsIDB4MDQwMWY4ZDIsIDB4NTk5MjYwMDQsCi0JMHg0OTMzYzg1NywgMHgwNDAxZjg4MCwgMHgwNDAwMDAxNiwgMHgwMjAxZjgwMCwKLQkweDAwMTA2MDYyLCAweDgxMzI2MWMwLCAweDA0MDAwMDM0LCAweDU5MzI1ODA4LAotCTB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTEzYiwgMHgwNDAyMDAxZCwgMHg1OTJjMDIwOCwgMHg4NDAwMDU1MCwKLQkweDQ4MDI1YTA4LCAweDAyMDFmODAwLCAweDAwMTA1MjU4LCAweDA0MDIwMDI3LAotCTB4NTkyYzAyMDgsIDB4ODQwMDA1MTAsIDB4NDgwMjVhMDgsIDB4MDQwMWYwMjMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjA1MiwgMHgwNDAxZjAyMCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhOWM3LCAweDA0MDFmZDllLCAweDU5MmMwMjA4LCAweDg0MDAwNTUwLAotCTB4NDgwMjVhMDgsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGEsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKLQkweDVjMDI3MDAwLCAweDA0MDFmMDExLCAweDU5OTAwMDA2LCAweDgyMDAwNTAwLAotCTB4ZmZmZjAwMDAsIDB4MDQwMjA3ZWUsIDB4NTljNDA4YWYsIDB4ODIwNDA0ODAsCi0JMHgwMDAwMDNlOCwgMHgwNDAyMTdlYSwgMHg1OTkwMDAwNiwgMHg4MjAwMDQwMCwKLQkweDAwMDEwMDAwLCAweDQ4MDMyMDA2LCAweDAyMDFmODAwLCAweDAwMTA2MDUyLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQxMWQsIDB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsCi0JMHg1YzAyMjgwMCwgMHg1YzAzNDgwMCwgMHg1YzAzYTAwMCwgMHg1YzAzMjAwMCwKLQkweDA0MDFmNDAzLCAweDRkMzAwMDAwLCAweDRkMmMwMDAwLCAweDA0MDFmYzBhLAotCTB4NTk4ZTYwMGQsIDB4NDkzM2M4NTcsIDB4NTljNDEwMDQsIDB4OGMwODE1MDAsCi0JMHgwNDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAyMDAwNywKLQkweDAyMDFmODAwLCAweDAwMTA1MjU4LCAweDA0MDIwMDJmLCAweDAyMDFmODAwLAotCTB4MDAxMDYwNGQsIDB4MDQwMWYwMmMsIDB4NTk4YzAwMGYsIDB4ODAwMDA1NDAsCi0JMHgwNDAyMDAxMSwgMHg1OWM0MDhhZiwgMHg4MjA0MDQ4MCwgMHgwMDAwMDNlOCwKLQkweDA0MDIxMDBkLCAweDU5OGMwODBmLCAweDgwMDQwODAwLCAweDQ4MDcxODBmLAotCTB4MDIwMWY4MDAsIDB4MDAxMDYwNGQsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NTIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwNDExZCwKLQkweDA0MDFmMDE5LCAweDA0MDFmZGI0LCAweDgxMzI2MWMwLCAweDA0MDIwMDAzLAotCTB4MDQwMWY4NDksIDB4MDQwMWYwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMGE5YzcsCi0JMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAwNywKLQkweDU5MzI1ODA4LCAweDgxMmU1OWMwLCAweDA0MDAwMDA0LCAweDU5MmMwMjA4LAotCTB4ODQwMDA1NTAsIDB4NDgwMjVhMDgsIDB4MDQwMWY4NTQsIDB4NGQzODAwMDAsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAxNCwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKLQkweDVjMDI3MDAwLCAweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDAyMDFmMDAwLAotCTB4MDAxMDZjNGIsIDB4NTljNDA4MDQsIDB4ODMxODA0MDAsIDB4MDAxMDcwOTUsCi0JMHg1MDAwMDAwMCwgMHg4MDA0MDUwMCwgMHgxYzAxZjAwMCwgMHg1OWM0MDgwNCwKLQkweDgzMTgwNDAwLCAweDAwMTA3MDlhLCAweDUwMDAwMDAwLCAweDgwMDQwNTAwLAotCTB4MWMwMWYwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDA0MjAsIDB4MDAwMDA4NDAsCi0JMHgwMDAwMTA4MCwgMHgwMDAwMjEwMCwgMHgwMDAwNDAwMCwgMHgwMDAwODAwMCwKLQkweDAwMDEwMDAwLCAweDAwMDIwMDAwLCAweDAwMDQwMDAwLCAweDAwMDgwMDAwLAotCTB4MDAxMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA4MDAwMDAsCi0JMHg1OTkwMDgwNiwgMHg4MDA0MDEyMCwgMHg4MDBjMDQ4MCwgMHgwNDAyMTAwNCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDA1LCAweDgyMDQwYzAwLAotCTB4MDAwMTAwMDAsIDB4NDgwNzIwMDYsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsCi0JMHg0ODBiYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwKLQkweDQ4MGIxODAwLCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2YzRiLAotCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsCi0JMHg0ZGYwMDAwMCwgMHg0OTdiMTgwZCwgMHg0OTdiMTgwMywgMHg0OTdiMTgwZSwKLQkweDQ5N2IxODBmLCAweDQ5N2IxODEwLCAweDU5OGMwMDAwLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDMsIDB4MDQwMDAwMDksIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDIsCi0JMHgwNDAyMDAwNCwgMHg0YTAzMTgwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjAwMywKLQkweDRhMDMxODAwLCAweDAwMDAwMDAwLCAweDVjMDNlMDAwLCAweDAyMDAwODAwLAotCTB4MDAxMDZjNGIsIDB4MWMwMWYwMDAsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MGMsCi0JMHgwNDAyMDAwMywgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKLQkweDgzMTgwNDgwLCAweDAwMDAwMDA1LCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4NDkxYmM4NTcsIDB4ODExYjIwYzgsIDB4ODM5MzI0MDAsIDB4MDAwMGJmMzIsCi0JMHg4MTFiYTBjYSwgMHg4M2QzYTQwMCwgMHgwMDAwNzYwMCwgMHg4MzE4MDQwMCwKLQkweDAwMTA3MGVhLCAweDUwMDM0ODAwLCAweDgxMWEyOGMyLCAweDgzMTYyYzAwLAotCTB4MDAwMDYxMDAsIDB4MWMwMWYwMDAsIDB4MDAxMGI3NWIsIDB4MDAxMGI3NzIsCi0JMHgwMDEwYjc4OSwgMHgwMDEwYjdhMCwgMHgwMDEwYjdiNywgMHg0OTMzYzg1NywKLQkweDU5MzAwNDA2LCAweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDA0MDIxMDE2LAotCTB4NDgwM2M4NTcsIDB4MDQwMTEwMDAsIDB4MGMwMWYwMDEsIDB4MDAxMDcxMDksCi0JMHgwMDEwNzE5OCwgMHgwMDEwNzRkMSwgMHgwMDEwNzU1NiwgMHgwMDEwNzE5OCwKLQkweDAwMTA3NGQxLCAweDAwMTA3NTU2LCAweDAwMTA3MTA5LCAweDAwMTA3MTk4LAotCTB4MDAxMDcxMDksIDB4MDAxMDcxMDksIDB4MDAxMDcxMDksIDB4MDAxMDcxMDksCi0JMHgwMDEwNzEwOSwgMHgwMDEwNzEwOSwgMHgwMDEwNzEwOSwgMHgwMDEwNzEwZiwKLQkweDAwMTA3MTBmLCAweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDAyMDFmODAwLAotCTB4MDAxMDZiYmYsIDB4MDIwMWYwMDAsIDB4MDAxMDZjNGIsIDB4NDIwMDEwMDAsCi0JMHgwMDEwYjdmNiwgMHg1MDA4MTAwMCwgMHg0OTMwMTAwYywgMHg1ODA4MDAwMiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMTAwLCAweDA0MDIwMDMyLCAweDU5MzI1ODA4LAotCTB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMjY4MDksCi0JMHg4MTM2NjljMCwgMHgwNDAwMDAxOSwgMHg1OTJjMDQwYiwgMHg4MjAwMDUwMCwKLQkweDAwMDBlMDAwLCAweDA0MDAwMDAzLCAweDA0MDFmYmE4LCAweDA0MDFmMDAyLAotCTB4MDQwMWZiOTgsIDB4NDIwMDEwMDAsIDB4MDAxMGI3ZjYsIDB4NTAwODEwMDAsCi0JMHg0OTMwMTAwYiwgMHg0OTJjMTAwYSwgMHg4MmQwMDQwMCwgMHgwMDAwMDAwNiwKLQkweDQ4MDAxMDAzLCAweDU5MmMwMDBkLCAweDgwMDAwMTA0LCAweDQ4MDAxMDA0LAotCTB4NTkyYzAwMGUsIDB4NDgwMDEwMDcsIDB4NTkyYzAwMGYsIDB4NDgwMDEwMDgsCi0JMHgwMjAxZjAwMCwgMHgwMDEwMDg1OCwgMHg0MjAyNjgwMCwgMHgwMDEwYmUwZCwKLQkweDU5MmMwODBhLCAweDQ4MDY2ODAyLCAweDgyMDQwNTAwLCAweDAwZmZmZjAwLAotCTB4MDQwMDAwMDcsIDB4NDk3YTZhMTIsIDB4NTlhODEwMTAsIDB4ODIwODE1MDAsCi0JMHgwMGZmZmYwMCwgMHg4MDA4MDU4MCwgMHgwNDAyMDdkYywgMHg4MjA0MGQwMCwKLQkweDAwMDAwMGZmLCAweDgwMDQwOGQwLCAweDQ4MDY2YTEyLCAweDA0MDFmN2Q3LAotCTB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NGQzMDAwMDAsIDB4NGM1ODAwMDAsCi0JMHg0YzU0MDAwMCwgMHg0YzUwMDAwMCwgMHg1ODMyNTgwYSwgMHg4MTJlNTljMCwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU4MzAwMDAyLCAweDRhMDA2MDAyLAotCTB4MDAwMDAxMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMDAsIDB4MDQwMjAwMWMsCi0JMHg1ODMwMDAwYiwgMHg1ODMyNjAwYywgMHg4MTMwMDU4MCwgMHgwNDAyMDAxMCwKLQkweDA0MDFmODI4LCAweDA0MDIwMDEwLCAweDU5MmMwODBkLCAweDgwMDQwOTA0LAotCTB4NDAwNGIwMDAsIDB4NDIwMGEwMDAsIDB4MDAxMGI1NGIsIDB4NDA1MGE4MDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWIyOCwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwKLQkweDAyMDFmODAwLCAweDAwMTA3OGJjLCAweDA0MDFmMDAzLCAweDA0MDFmODE5LAotCTB4MDQwMDBmYTMsIDB4NWMwMGEwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGIwMDAsCi0JMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg1ODMwMDAwYiwKLQkweDU4MzI2MDBjLCAweDgxMzAwNTgwLCAweDA0MDIwN2Y1LCAweDA0MDFmODBkLAotCTB4MDQwMjA3ZjUsIDB4MDIwMWY4MDAsIDB4MDAxMDY4ZDMsIDB4MDIwMjA4MDAsCi0JMHgwMDEwMDVkOCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMmRhLCAweDAyMDFmODAwLCAweDAwMTA3OTExLCAweDA0MDFmN2VhLAotCTB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsIDB4NTk4YzAwMGQsCi0JMHg4MTMwMDU4MCwgMHgwNDAyMDAwOSwgMHg1OThjMDAwNSwgMHg4MTMwMDU4MCwKLQkweDA0MDIwMDA2LCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2YzRiLAotCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsCi0JMHgwMDEwNmM0YiwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKLQkweDU5MzAwNDAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDU2LCAweDAyMDIxODAwLAotCTB4MDAxMDA1ZDgsIDB4NDgwM2M4NTcsIDB4MGMwMWYwMDEsIDB4MDAxMDczMDIsCi0JMHgwMDEwNzMxZCwgMHgwMDEwNzMyZSwgMHgwMDEwNzQzMSwgMHgwMDEwNzNmMSwKLQkweDAwMTA3M2Y1LCAweDAwMTA3NDA2LCAweDAwMTA3NDFhLCAweDAwMTA3NDBmLAotCTB4MDAxMDc0MWEsIDB4MDAxMDc0NTUsIDB4MDAxMDc0MWEsIDB4MDAxMDc0OTcsCi0JMHgwMDEwNzQxYSwgMHgwMDEwNzRhNSwgMHgwMDEwNzQxYSwgMHgwMDEwNzQwZiwKLQkweDAwMTA3NDFhLCAweDAwMTA3NGE5LCAweDAwMTA3MWY1LCAweDAwMTA3MWY1LAotCTB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsCi0JMHgwMDEwNzFmNSwgMHgwMDEwNzFmNSwgMHgwMDEwNzFmNSwgMHgwMDEwNzFmNSwKLQkweDAwMTA3MWY1LCAweDAwMTA3NTc0LCAweDAwMTA3NTkzLCAweDAwMTA3NTlkLAotCTB4MDAxMDcxZjUsIDB4MDAxMDc1YjMsIDB4MDAxMDc0MDYsIDB4MDAxMDcxZjUsCi0JMHgwMDEwNzQwNiwgMHgwMDEwNzQxYSwgMHgwMDEwNzFmNSwgMHgwMDEwNzMyZSwKLQkweDAwMTA3NDMxLCAweDAwMTA3MWY1LCAweDAwMTA3NjAzLCAweDAwMTA3NDFhLAotCTB4MDAxMDcxZjUsIDB4MDAxMDc2MTMsIDB4MDAxMDc0MWEsIDB4MDAxMDcxZjUsCi0JMHgwMDEwNzQwZiwgMHgwMDEwNzJmMywgMHgwMDEwNzFmNywgMHgwMDEwNzFmNSwKLQkweDAwMTA3NjJhLCAweDAwMTA3NjVkLCAweDAwMTA3NmQ3LCAweDAwMTA3MWY1LAotCTB4MDAxMDc2ZTcsIDB4MDAxMDc0MDQsIDB4MDAxMDc2ZGEsIDB4MDAxMDcxZjUsCi0JMHgwMDEwNzViZiwgMHgwMDEwNzcwMCwgMHgwMDEwNzFmNSwgMHgwMDEwNzczNSwKLQkweDAwMTA3Nzg4LCAweDAwMTA3MWY1LCAweDAwMTA3MjBjLCAweDAwMTA3MjY1LAotCTB4MDAxMDcyNzIsIDB4MDAxMDcxZjUsIDB4MDAxMDc0MDYsIDB4MDAxMDcxZjUsCi0JMHgwMDEwNzJiOSwgMHgwMDEwNzJjNCwgMHgwMDEwNzFmNSwgMHgwMDEwNzFmNSwKLQkweDAwMTA3MjIwLCAweDAwMTA3MjQ1LCAweDAwMTA3N2M3LCAweDAwMTA3ODA4LAotCTB4MDAxMDc4MmUsIDB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsIDB4MDAxMDcxZjUsCi0JMHgwMDEwNzdmYywgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZmFjNSwKLQkweDU5MzI1ODA4LCAweDU5MmMwMDA5LCAweDQ4MDFhMDA2LCAweDU5MmMwMDBhLAotCTB4NDgwMWEwMDcsIDB4NTkyYzAwMGIsIDB4NDgwMWEwMDgsIDB4NTkyYzAwMGMsCi0JMHg0ODAxYTAwOSwgMHg1OTJjMDAwZCwgMHg0ODAxYTAwYSwgMHg0OTc5YTAwYiwKLQkweDU5MmMwODA5LCAweDgyMDQwZDAwLCAweDAwMDAwZmZmLCAweDgwMDQwOTA0LAotCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDc4YmMsCi0JMHg0YTAyNjIwMiwgMHgwMDAwZmZmZiwgMHgwNDAxZmFhZSwgMHg0ZDJjMDAwMCwKLQkweDRhMDFhMDA2LCAweDA1MDAwMDAwLCAweDU5MzI1ODA4LCAweDU5MmMwMDA5LAotCTB4NDgwMWEwMDcsIDB4NTkyYzAwMGEsIDB4NDgwMWEwMDgsIDB4NTkyYzAwMGIsCi0JMHg0ODAxYTAwOSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwgMHg0MjAwMTAwMCwKLQkweDAwMDBkYzAwLCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLCAweDAwMTA3OGJjLAorCTB4MDIwMWY4MDAsIDB4MDAxMDVkOWIsIDB4MDQwMWZjNmEsIDB4NTljNDAwYWYsCisJMHg4MDAwMDFjMCwgMHgwNDAwMDAyNywgMHgwNDAxZjkwOSwgMHg1OTkyNjAwNCwKKwkweDQ5MzNjODU3LCAweDU5MzAwMDA0LCAweDhjMDAwNTE2LCAweDA0MDAwMDBiLAorCTB4MDQwMWZlODYsIDB4MDQwMjAwMWYsIDB4MDIwMWY4MDAsIDB4MDAxMDY4YzEsCisJMHgwNDAxZmM1MiwgMHg0MjAwMDgwMCwgMHg4MDAwMDgwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2NDY2LCAweDA0MDFmMDE3LCAweDQyMDAxODAwLCAweDAwMDA3NTMwLAorCTB4MDQwMWY4YzMsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDVkOGIsCisJMHgwNDAxZjAxMCwgMHgwNDAxZmU3NSwgMHgwNDAyMDAwZSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhN2VlLCAweDU5MzAwMDA0LCAweDhjMDAwNTBjLCAweDA0MDIwMDAzLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA0YSwgMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg1YzAyNzAwMCwKKwkweDA0MDFmYzM2LCAweDVjMDI2MDAwLCAweDVjMDIyODAwLCAweDVjMDM0ODAwLAorCTB4NWMwM2EwMDAsIDB4NWMwMzIwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDE1NjUsCisJMHg0ZDkwMDAwMCwgMHg0ZGQwMDAwMCwgMHg0ZGE0MDAwMCwgMHg0ZDE0MDAwMCwKKwkweDRkMzAwMDAwLCAweDRkMmMwMDAwLCAweDA0MDFmYzMyLCAweDA0MDFmOGQ0LAorCTB4NTk5MjYwMDQsIDB4NDkzM2M4NTcsIDB4MDQwMWY4ODIsIDB4MDQwMDAwMTYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNWQ5YiwgMHg4MTMyNjFjMCwgMHgwNDAwMDAzNCwKKwkweDU5MzI1ODA4LCAweDgxMmU1OWMwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4MDQwMjAwMWQsIDB4NTkyYzAyMDgsCisJMHg4NDAwMDU1MCwgMHg0ODAyNWEwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNGYyOSwKKwkweDA0MDIwMDI3LCAweDU5MmMwMjA4LCAweDg0MDAwNTEwLCAweDQ4MDI1YTA4LAorCTB4MDQwMWYwMjMsIDB4MDIwMWY4MDAsIDB4MDAxMDVkOGIsIDB4MDQwMWYwMjAsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTdlZSwgMHgwNDAxZmQ5OSwgMHg1OTJjMDIwOCwKKwkweDg0MDAwNTUwLCAweDQ4MDI1YTA4LCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLAorCTB4MDAwMDAwNGEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDhkOCwgMHg1YzAyNzAwMCwgMHgwNDAxZjAxMSwgMHg1OTkwMDAwNiwKKwkweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDA0MDIwN2VlLCAweDU5YzQwOGFmLAorCTB4ODIwNDA0ODAsIDB4MDAwMDAzZTgsIDB4MDQwMjE3ZWEsIDB4NTk5MDAwMDYsCisJMHg4MjAwMDQwMCwgMHgwMDAxMDAwMCwgMHg0ODAzMjAwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA1ZDhiLCAweDAyMDFmODAwLCAweDAwMTAzZjM3LCAweDVjMDI1ODAwLAorCTB4NWMwMjYwMDAsIDB4NWMwMjI4MDAsIDB4NWMwMzQ4MDAsIDB4NWMwM2EwMDAsCisJMHg1YzAzMjAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNjk4MiwgMHg0ZDMwMDAwMCwKKwkweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2OThjLCAweDU5OGU2MDBkLAorCTB4NDkzM2M4NTcsIDB4NTljNDEwMDQsIDB4OGMwODE1MDAsIDB4MDQwMDAwMDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwgMHgwNDAyMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZjI5LCAweDA0MDIwMDJmLCAweDAyMDFmODAwLCAweDAwMTA1ZDg2LAorCTB4MDQwMWYwMmMsIDB4NTk4YzAwMGYsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMTEsCisJMHg1OWM0MDhhZiwgMHg4MjA0MDQ4MCwgMHgwMDAwMDNlOCwgMHgwNDAyMTAwZCwKKwkweDU5OGMwODBmLCAweDgwMDQwODAwLCAweDQ4MDcxODBmLCAweDAyMDFmODAwLAorCTB4MDAxMDVkODYsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NTAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHgwMjAxZjgwMCwgMHgwMDEwM2YzNywgMHgwNDAxZjAxOSwKKwkweDA0MDFmZGFkLCAweDgxMzI2MWMwLCAweDA0MDIwMDAzLCAweDA0MDFmODQ5LAorCTB4MDQwMWYwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMGE3ZWUsIDB4NTkzMDA0MDYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAwNywgMHg1OTMyNTgwOCwKKwkweDgxMmU1OWMwLCAweDA0MDAwMDA0LCAweDU5MmMwMjA4LCAweDg0MDAwNTUwLAorCTB4NDgwMjVhMDgsIDB4MDQwMWY4NTQsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAxNCwgMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg1YzAyNzAwMCwKKwkweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDAyMDFmMDAwLCAweDAwMTA2OTgyLAorCTB4NTljNDA4MDQsIDB4ODMxODA0MDAsIDB4MDAxMDZkZWMsIDB4NTAwMDAwMDAsCisJMHg4MDA0MDUwMCwgMHgxYzAxZjAwMCwgMHg1OWM0MDgwNCwgMHg4MzE4MDQwMCwKKwkweDAwMTA2ZGYxLCAweDUwMDAwMDAwLCAweDgwMDQwNTAwLCAweDFjMDFmMDAwLAorCTB4MDAwMDAyMTAsIDB4MDAwMDA0MjAsIDB4MDAwMDA4NDAsIDB4MDAwMDEwODAsCisJMHgwMDAwMjEwMCwgMHgwMDAwNDAwMCwgMHgwMDAwODAwMCwgMHgwMDAxMDAwMCwKKwkweDAwMDIwMDAwLCAweDAwMDQwMDAwLCAweDAwMDgwMDAwLCAweDAwMTAwMDAwLAorCTB4MDAyMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA4MDAwMDAsIDB4NTk5MDA4MDYsCisJMHg4MDA0MDEyMCwgMHg4MDBjMDQ4MCwgMHgwNDAyMTAwNCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDA1LCAweDgyMDQwYzAwLCAweDAwMDEwMDAwLAorCTB4NDgwNzIwMDYsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NDgwYmM4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywgMHg0ZGYwMDAwMCwgMHg0ODBiMTgwMCwKKwkweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2OTgyLCAweDFjMDFmMDAwLAorCTB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDY5OGMsIDB4NGRmMDAwMDAsCisJMHg0OTdiMTgwZCwgMHg0OTdiMTgwMywgMHg0OTdiMTgwZSwgMHg0OTdiMTgwZiwKKwkweDQ5N2IxODEwLCAweDU5OGMwMDAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLAorCTB4MDQwMDAwMDksIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDQsCisJMHg0YTAzMTgwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZjAwMywgMHg0YTAzMTgwMCwKKwkweDAwMDAwMDAwLCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2OTgyLAorCTB4MWMwMWYwMDAsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MGMsIDB4MDQwMjAwMDMsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg4MzE4MDQ4MCwKKwkweDAwMDAwMDA1LCAweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDQ5MWJjODU3LAorCTB4ODExYjIwYzgsIDB4ODM5MzI0MDAsIDB4MDAwMGJmMzIsIDB4ODExYmEwY2EsCisJMHg4M2QzYTQwMCwgMHgwMDAwNzYwMCwgMHg4MzE4MDQwMCwgMHgwMDEwNmU0MSwKKwkweDUwMDM0ODAwLCAweDgxMWEyOGMyLCAweDgzMTYyYzAwLCAweDAwMDA2MTAwLAorCTB4MWMwMWYwMDAsIDB4MDAxMGI1NTksIDB4MDAxMGI1NzAsIDB4MDAxMGI1ODcsCisJMHgwMDEwYjU5ZSwgMHgwMDEwYjViNSwgMHg0OTMzYzg1NywgMHg1OTMwMDQwNiwKKwkweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDA0MDIxMDE2LCAweDQ4MDNjODU3LAorCTB4MDQwMTEwMDAsIDB4MGMwMWYwMDEsIDB4MDAxMDZlNjAsIDB4MDAxMDZmMDMsCisJMHgwMDEwNzI0OSwgMHgwMDEwNzJjZiwgMHgwMDEwNmYwMywgMHgwMDEwNzI0OSwKKwkweDAwMTA3MmNmLCAweDAwMTA2ZTYwLCAweDAwMTA2ZjAzLCAweDAwMTA2ZTYwLAorCTB4MDAxMDZlNjAsIDB4MDAxMDZlNjAsIDB4MDAxMDZlNjAsIDB4MDAxMDZlNjAsCisJMHgwMDEwNmU2MCwgMHgwMDEwNmU2MCwgMHgwMDEwNmU2NiwgMHgwMDEwNmU2NiwKKwkweDAyMDFmODAwLCAweDAwMTA2OThjLCAweDAyMDFmODAwLCAweDAwMTA2OGY2LAorCTB4MDIwMWYwMDAsIDB4MDAxMDY5ODIsIDB4NDIwMDEwMDAsIDB4MDAxMGI1ZjQsCisJMHg1MDA4MTAwMCwgMHg0OTMwMTAwYywgMHg1ODA4MDAwMiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMTAwLCAweDA0MDIwMDNlLCAweDU5MzI1ODA4LCAweDgxMmU1OWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMjY4MDksIDB4ODEzNjY5YzAsCisJMHgwNDAwMDAyNSwgMHg1OTJjMDQwYiwgMHg4MjAwMDUwMCwgMHgwMDAwZTAwMCwKKwkweDA0MDAwMDAzLCAweDA0MDFmYmM5LCAweDA0MDFmMDAyLCAweDA0MDFmYmI5LAorCTB4NTkyYzAwMGQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHg4MDAwMDAwMCwgMHg1OGQwMDgwMiwKKwkweDgwMDQwNTQwLCAweDQ4MDFhMDAyLCAweDQyMDAxMDAwLCAweDAwMTBiNWY0LAorCTB4NTAwODEwMDAsIDB4NDkzMDEwMGIsIDB4NDkyYzEwMGEsIDB4ODJkMDA0MDAsCisJMHgwMDAwMDAwNiwgMHg0ODAwMTAwMywgMHg1OTJjMDAwZCwgMHg4MjAwMDQwMCwKKwkweDAwMDAwMDAzLCAweDgwMDAwMTA0LCAweDQ4MDAxMDA0LCAweDU5MmMwMDBlLAorCTB4NDgwMDEwMDcsIDB4NTkyYzAwMGYsIDB4NDgwMDEwMDgsIDB4MDIwMWYwMDAsCisJMHgwMDEwMDhhMSwgMHg0MjAyNjgwMCwgMHgwMDEwYmMwYywgMHg1OTJjMDgwYSwKKwkweDQ4MDY2ODAyLCAweDgyMDQwNTAwLCAweDAwZmZmZjAwLCAweDA0MDAwMDA3LAorCTB4NDk3YTZhMTIsIDB4NTlhODEwMTAsIDB4ODIwODE1MDAsIDB4MDBmZmZmMDAsCisJMHg4MDA4MDU4MCwgMHgwNDAyMDdkMCwgMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwKKwkweDgwMDQwOGQwLCAweDQ4MDY2YTEyLCAweDA0MDFmN2NiLCAweDFjMDFmMDAwLAorCTB4NGQyYzAwMDAsIDB4NGQzMDAwMDAsIDB4NGM1ODAwMDAsIDB4NGM1NDAwMDAsCisJMHg0YzUwMDAwMCwgMHg1ODMyNTgwYSwgMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDU4MzAwMDAyLCAweDRhMDA2MDAyLCAweDAwMDAwMTAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAxMDAsIDB4MDQwMjAwMjAsIDB4NTgzMDAwMGIsCisJMHg1ODMyNjAwYywgMHg4MTMwMDU4MCwgMHgwNDAyMDAxMiwgMHgwNDAxZjgyZiwKKwkweDA0MDIwMDE0LCAweDU5MmMwODBkLCAweDgyMDQwYzAwLCAweDAwMDAwMDAzLAorCTB4ODAwNDA5MDQsIDB4NDAwNGIwMDAsIDB4NDIwMGEwMDAsIDB4MDAxMGIzNDksCisJMHg0MDUwYTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTk0ZiwgMHg0MjAwMTAwMCwKKwkweDAwMDBkYzAwLCAweDAyMDFmODAwLCAweDAwMTA3NjNiLCAweDA0MDFmMDA1LAorCTB4NDgwM2M4NTcsIDB4NDkzM2M4NTcsIDB4MDQwMWY4MWMsIDB4MDQwMDBmOTMsCisJMHg1YzAwYTAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYjAwMCwgMHg1YzAyNjAwMCwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDU4MzAwMDBiLCAweDU4MzI2MDBjLAorCTB4NDgwM2M4NTcsIDB4NDkzM2M4NTcsIDB4ODEzMDA1ODAsIDB4MDQwMjA3ZjEsCisJMHgwNDAxZjgwZSwgMHgwNDAyMDdmMywgMHg0ODAzYzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA2NjE5LCAweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzY5OCwgMHgwNDAxZjdlNywgMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywKKwkweDRkZjAwMDAwLCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLCAweDA0MDIwMDA5LAorCTB4NTk4YzAwMDUsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMDYsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU3LCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2OTgyLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NTkzMDA0MDMsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDA1NiwgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwKKwkweDQ4MDNjODU3LCAweDBjMDFmMDAxLCAweDAwMTA3MDdhLCAweDAwMTA3MDk1LAorCTB4MDAxMDcwYTYsIDB4MDAxMDcxYTksIDB4MDAxMDcxNjksIDB4MDAxMDcxNmQsCisJMHgwMDEwNzE3ZSwgMHgwMDEwNzE5MiwgMHgwMDEwNzE4NywgMHgwMDEwNzE5MiwKKwkweDAwMTA3MWNkLCAweDAwMTA3MTkyLCAweDAwMTA3MjBmLCAweDAwMTA3MTkyLAorCTB4MDAxMDcyMWQsIDB4MDAxMDcxOTIsIDB4MDAxMDcxODcsIDB4MDAxMDcxOTIsCisJMHgwMDEwNzIyMSwgMHgwMDEwNmY2MCwgMHgwMDEwNmY2MCwgMHgwMDEwNmY2MCwKKwkweDAwMTA2ZjYwLCAweDAwMTA2ZjYwLCAweDAwMTA2ZjYwLCAweDAwMTA2ZjYwLAorCTB4MDAxMDZmNjAsIDB4MDAxMDZmNjAsIDB4MDAxMDZmNjAsIDB4MDAxMDZmNjAsCisJMHgwMDEwNzJlZCwgMHgwMDEwNzMwYywgMHgwMDEwNzMxNiwgMHgwMDEwNmY2MCwKKwkweDAwMTA3MzJjLCAweDAwMTA3MTdlLCAweDAwMTA2ZjYwLCAweDAwMTA3MTdlLAorCTB4MDAxMDcxOTIsIDB4MDAxMDZmNjAsIDB4MDAxMDcwYTYsIDB4MDAxMDcxYTksCisJMHgwMDEwNmY2MCwgMHgwMDEwNzM3YywgMHgwMDEwNzE5MiwgMHgwMDEwNmY2MCwKKwkweDAwMTA3MzhjLCAweDAwMTA3MTkyLCAweDAwMTA2ZjYwLCAweDAwMTA3MTg3LAorCTB4MDAxMDcwNmIsIDB4MDAxMDZmNjIsIDB4MDAxMDZmNjAsIDB4MDAxMDczYTMsCisJMHgwMDEwNzNkYywgMHgwMDEwNzQ1NiwgMHgwMDEwNmY2MCwgMHgwMDEwNzQ2NiwKKwkweDAwMTA3MTdjLCAweDAwMTA3NDU5LCAweDAwMTA2ZjYwLCAweDAwMTA3MzM4LAorCTB4MDAxMDc0N2YsIDB4MDAxMDZmNjAsIDB4MDAxMDc0YjQsIDB4MDAxMDc1MDcsCisJMHgwMDEwNmY2MCwgMHgwMDEwNmY3NywgMHgwMDEwNmZkZCwgMHgwMDEwNmZlYSwKKwkweDAwMTA2ZjYwLCAweDAwMTA3MTdlLCAweDAwMTA2ZjYwLCAweDAwMTA3MDMxLAorCTB4MDAxMDcwM2MsIDB4MDAxMDZmNjAsIDB4MDAxMDZmNjAsIDB4MDAxMDZmOGIsCisJMHgwMDEwNmZiMCwgMHgwMDEwNzU0NiwgMHgwMDEwNzU4NywgMHgwMDEwNzVhZCwKKwkweDAwMTA2ZjYwLCAweDAwMTA2ZjYwLCAweDAwMTA2ZjYwLCAweDAwMTA3NTdiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4MDQwMWZhZDIsIDB4NTkzMjU4MDgsCisJMHg1OTJjMDAwOSwgMHg0ODAxYTAwNiwgMHg1OTJjMDAwYSwgMHg0ODAxYTAwNywKKwkweDU5MmMwMDBiLCAweDQ4MDFhMDA4LCAweDU5MmMwMDBjLCAweDQ4MDFhMDA5LAorCTB4NTkyYzAwMGQsIDB4NDgwMWEwMGEsIDB4NDk3OWEwMGIsIDB4NTkyYzA4MDksCisJMHg4MjA0MGQwMCwgMHgwMDAwMGZmZiwgMHg4MDA0MDkwNCwgMHg0MjAwMTAwMCwKKwkweDAwMDBkYzAwLCAweDAyMDFmMDAwLCAweDAwMTA3NjNiLCAweDRhMDI2MjAyLAorCTB4MDAwMGZmZmYsIDB4MDQwMWZhYmIsIDB4NGQyYzAwMDAsIDB4NGEwMWEwMDYsCisJMHgwNTAwMDAwMCwgMHg1OTMyNTgwOCwgMHg1OTJjMDAwOSwgMHg0ODAxYTAwNywKKwkweDU5MmMwMDBhLCAweDQ4MDFhMDA4LCAweDU5MmMwMDBiLCAweDQ4MDFhMDA5LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsCisJMHg1YzAyNTgwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzYzYiwgMHg0YzU4MDAwMCwKKwkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRkMmMwMDAwLCAweDA0MDFmYWE1LAorCTB4NTkzMjU4MDgsIDB4NTkzMDA0MGIsIDB4ODAwMDAwYzIsIDB4NDIwMGE4MDAsCisJMHgwMDEwYjM0OSwgMHg1OTJjYjIwNSwgMHg4MzJjYTQwMCwgMHgwMDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDQwNTgwMDAwLCAweDgwNTRhYzAwLAorCTB4NTkyYzAwMDEsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDMsIDB4NDAwMjU4MDAsCisJMHgwNDAxZjdmNSwgMHg0MjAwYTAwMCwgMHgwMDEwYjM0OSwgMHg0MDUwYTgwMCwKKwkweDU5MzBiNDBiLCAweDAyMDFmODAwLCAweDAwMTBhOTRmLCAweDU5MzAwYzBiLAorCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4NWMwMjU4MDAsIDB4NWMwMGE4MDAsCisJMHg1YzAwYjAwMCwgMHg1YzAwYTAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzYzYiwKIAkweDRjNTgwMDAwLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRkMmMwMDAwLAotCTB4MDQwMWZhOTgsIDB4NTkzMjU4MDgsIDB4NTkzMDA0MGIsIDB4ODAwMDAwYzIsCi0JMHg0MjAwYTgwMCwgMHgwMDEwYjU0YiwgMHg1OTJjYjIwNSwgMHg4MzJjYTQwMCwKLQkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDQwNTgwMDAwLAotCTB4ODA1NGFjMDAsIDB4NTkyYzAwMDEsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDMsCi0JMHg0MDAyNTgwMCwgMHgwNDAxZjdmNSwgMHg0MjAwYTAwMCwgMHgwMDEwYjU0YiwKLQkweDQwNTBhODAwLCAweDU5MzBiNDBiLCAweDAyMDFmODAwLCAweDAwMTBhYjI4LAotCTB4NTkzMDBjMGIsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4NWMwMjU4MDAsCi0JMHg1YzAwYTgwMCwgMHg1YzAwYjAwMCwgMHg1YzAwYTAwMCwgMHgwMjAxZjAwMCwKLQkweDAwMTA3OGJjLCAweDRjNTgwMDAwLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLAotCTB4NGQyYzAwMDAsIDB4NDIwMzQ4MDAsIDB4MDAxMGI1NDQsIDB4MDQwMWZhN2YsCi0JMHg1OTMyNTgwOCwgMHg0YTAyNTgwNSwgMHgwMjAwMDAwMCwgMHg1OTJjMDgwMiwKKwkweDQyMDM0ODAwLCAweDAwMTBiMzQyLCAweDA0MDFmYThjLCAweDU5MzI1ODA4LAorCTB4NTkyYzA4MDIsIDB4NDgwN2M4NTcsIDB4NDAwNDEwMDAsIDB4ODAwNDA5MDQsCisJMHg4MjA4MTUwMCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwOCwgMHg4MDA0MDgwMCwKKwkweDgyMDgxNTgwLCAweDAwMDAwMDAzLCAweDgwMDgxMDAwLCAweDU4ZDAwMDAyLAorCTB4ODAwODA1NDAsIDB4NDgwMWEwMDIsIDB4NGEwMjU4MDUsIDB4MDIwMDAwMDAsCiAJMHg4MmQwYWMwMCwgMHgwMDAwMDAwNiwgMHg1OTJjYjAxMSwgMHg4MzJjYTQwMCwKLQkweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDQwNTgwMDAwLAorCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4NDA1ODAwMDAsCiAJMHg4MDU0YWMwMCwgMHg1OTJlNTgwMSwgMHg0MTc4MDAwMCwgMHg4MTJlNWQ0MCwKIAkweDA0MDIwN2Y2LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDVjMDI1ODAwLAogCTB4NWMwMGE4MDAsIDB4NWMwMGIwMDAsIDB4NWMwMGEwMDAsIDB4MDIwMWYwMDAsCi0JMHgwMDEwNzhiYywgMHgwNDAxZmE1NywgMHg0YTAxYTAwNiwgMHg3ODAwMDAwMCwKKwkweDAwMTA3NjNiLCAweDA0MDFmYTU3LCAweDRhMDFhMDA2LCAweDc4MDAwMDAwLAogCTB4NTkzMDAwMWMsIDB4ODQwMDAxYzAsIDB4NDgwMWE0MDcsIDB4NDk3OWEyMDcsCiAJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwKLQkweDAyMDFmMDAwLCAweDAwMTA3OGJjLCAweDRjNTgwMDAwLCAweDRjNTQwMDAwLAorCTB4MDIwMWYwMDAsIDB4MDAxMDc2M2IsIDB4NGM1ODAwMDAsIDB4NGM1NDAwMDAsCiAJMHg0YzUwMDAwMCwgMHgwNDAxZmE1NSwgMHg0YTAxYTAwNiwgMHgwMjAwMDAwMCwKIAkweDU5YTgwMDAyLCAweDQ4MDFhMDA4LCAweDU5YTgwMDAzLCAweDQ4MDFhMDA5LAogCTB4NTlhODAwMDAsIDB4NDgwMWEwMGEsIDB4NTlhODAwMDEsIDB4NDgwMWEwMGIsCiAJMHg1OTMwMDAxYywgMHg4MjAwMGQ4MCwgMHgwMDAwZTAwMCwgMHgwNDAwMDAxNiwKIAkweDgyMDAwZDgwLCAweDAwMDBkZjAwLCAweDA0MDAwMDA2LCAweDRhMDFhNDA3LAogCTB4MDAwMDAwMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsIDB4MDQwMWYwMjcsCi0JMHg0YTAzYzg0MCwgMHgwMDEwYjRlYiwgMHg0YTAzYzg0MiwgMHgwMDAwMDAwZCwKLQkweDQyMDAxODAwLCAweDAwMTBiNGViLCAweDAyMDFmODAwLCAweDAwMTAwN2FmLAotCTB4NDIwMDAwMDAsIDB4MDAwMGRmMDAsIDB4NDIwMGEwMDAsIDB4MDAxMGI0ZWIsCi0JMHgwNDAxZjAwZCwgMHg0YTAzYzg0MCwgMHgwMDEwYjRmOCwgMHg0YTAzYzg0MiwKLQkweDAwMDAwMDBkLCAweDQyMDAxODAwLCAweDAwMTBiNGY4LCAweDAyMDFmODAwLAotCTB4MDAxMDA3YWYsIDB4NDIwMDAwMDAsIDB4MDAwMGUwMDAsIDB4NDIwMGEwMDAsCi0JMHgwMDEwYjRmOCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAxMCwgMHg0ODAxYTQwNywKKwkweDRhMDNjODQwLCAweDAwMTBiMmU3LCAweDRhMDNjODQyLCAweDAwMDAwMDBkLAorCTB4NDIwMDE4MDAsIDB4MDAxMGIyZTcsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZjUsCisJMHg0MjAwMDAwMCwgMHgwMDAwZGYwMCwgMHg0MjAwYTAwMCwgMHgwMDEwYjJlNywKKwkweDA0MDFmMDBkLCAweDRhMDNjODQwLCAweDAwMTBiMmY0LCAweDRhMDNjODQyLAorCTB4MDAwMDAwMGQsIDB4NDIwMDE4MDAsIDB4MDAxMGIyZjQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDdmNSwgMHg0MjAwMDAwMCwgMHgwMDAwZTAwMCwgMHg0MjAwYTAwMCwKKwkweDAwMTBiMmY0LCAweDgyMDAwNTQwLCAweDAwMDAwMDEwLCAweDQ4MDFhNDA3LAogCTB4NGEwMWEyMDcsIDB4MDAwMDAwMzQsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGQsCi0JMHg4MmQwYWMwMCwgMHgwMDAwMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywKKwkweDgyZDBhYzAwLCAweDAwMDAwMDBjLCAweDAyMDFmODAwLCAweDAwMTBhOTNlLAogCTB4NDIwMDA4MDAsIDB4MDAwMDAwMTMsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsCiAJMHg1YzAwYTAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYjAwMCwgMHgwMjAxZjAwMCwKLQkweDAwMTA3OGJjLCAweDA0MDFmYTAzLCAweDRhMDFhMDA2LCAweDYzMDAwMDI4LAorCTB4MDAxMDc2M2IsIDB4MDQwMWZhMDMsIDB4NGEwMWEwMDYsIDB4NjMwMDAwMjgsCiAJMHg1OTMwMDAxYywgMHg0ODAxYTAwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwKLQkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDAyMDFmMDAwLCAweDAwMTA3OGJjLAorCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDc2M2IsCiAJMHgwNDAxZmEwNiwgMHg0MTc4MDAwMCwgMHg0MTc4MDgwMCwgMHg0MjAwMjAwMCwKIAkweDAwMDgwMDAwLCAweDBjMDFmODFiLCAweDgwMDAwMDAwLCAweDgwMDQwODAwLAogCTB4NDIwMDEwMDAsIDB4MDAwMDAwMGMsIDB4NTk4NDE4MDIsIDB4OGMwYzFkMDAsCkBAIC03MzkxLDI4ICs3MjI5LDI4IEBACiAJMHg4MDAwMDAwMCwgMHg4MDA0MDgwMCwgMHg4MjA4MTQwMCwgMHgwMDAwMDAwNCwKIAkweDgyMDgwNTQwLCAweDAyMDAwMDAwLCAweDQ4MDFhMDA2LCAweDgwMDQwOGUwLAogCTB4NTkzMDAwMWMsIDB4ODAwNDA1NDAsIDB4NDgwMWEwMDcsIDB4ODAwODA5MDQsCi0JMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzhiYywKLQkweDAwMTA3MmU5LCAweDAwMTA3MmViLCAweDAwMTA3MmVkLCAweDAwMTA3MmVmLAotCTB4MDAxMDcyZjEsIDB4NDgxMWEwMDgsIDB4MWMwMWYwMDAsIDB4NDgxMWEwMDksCisJMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzYzYiwKKwkweDAwMTA3MDYxLCAweDAwMTA3MDYzLCAweDAwMTA3MDY1LCAweDAwMTA3MDY3LAorCTB4MDAxMDcwNjksIDB4NDgxMWEwMDgsIDB4MWMwMWYwMDAsIDB4NDgxMWEwMDksCiAJMHgxYzAxZjAwMCwgMHg0ODExYTAwYSwgMHgxYzAxZjAwMCwgMHg0ODExYTAwYiwKIAkweDFjMDFmMDAwLCAweDQ4MTFhMDBjLCAweDFjMDFmMDAwLCAweDRhMDI2MDA5LAotCTB4MDAxMGJlMGQsIDB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCi0JMHg4MDAwMDBkMCwgMHg0MjAyNjgwMCwgMHgwMDEwYmUwZCwgMHg0ODAyNmExMiwKLQkweDA0MDFmYTNiLCAweDQxNzgwODAwLCAweDQyMDAxMDAwLCAweDAwMDA1YzAwLAotCTB4MDIwMWYwMDAsIDB4MDAxMDc4YmMsIDB4MDQwMWY5YmEsIDB4NGEwMWEwMDYsCisJMHgwMDEwYmMwYywgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDgwMDAwMGQwLCAweDQyMDI2ODAwLCAweDAwMTBiYzBjLCAweDQ4MDI2YTEyLAorCTB4MDQwMWZhM2MsIDB4NDE3ODA4MDAsIDB4NDIwMDEwMDAsIDB4MDAwMDVjMDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwNzYzYiwgMHgwNDAxZjliYSwgMHg0YTAxYTAwNiwKIAkweDUyMDAwMDAwLCAweDQ5NzlhMDA3LCAweDU5OWMwMDE3LCAweDhjMDAwNTAwLAotCTB4MDQwMDAwMDUsIDB4NTk5YzA0MDIsIDB4MDIwMWY4MDAsIDB4MDAxMDE1ZGEsCisJMHgwNDAwMDAwNSwgMHg1OTljMDQwMiwgMHgwMjAxZjgwMCwgMHgwMDEwMTY0NCwKIAkweDQ4MDVhMDA3LCAweDU5YTgwMDAyLCAweDQ4MDFhMDA4LCAweDU5YTgwMDAzLAogCTB4NDgwMWEwMDksIDB4NTlhODAwMDAsIDB4NDgwMWEwMGEsIDB4NTlhODAwMDEsCiAJMHg0ODAxYTAwYiwgMHg1OWE4MDAxMCwgMHg0ODAxYTAwYywgMHg0MjAwMDgwMCwKIAkweDAwMDAwMDA3LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDAyMDFmMDAwLAotCTB4MDAxMDc4YmMsIDB4NGEwMjYyMDIsIDB4MDAwMGZmZmYsIDB4MDQwMWY5OWQsCisJMHgwMDEwNzYzYiwgMHg0YTAyNjIwMiwgMHgwMDAwZmZmZiwgMHgwNDAxZjk5ZCwKIAkweDRhMDFhMDA2LCAweDA1MDAwMDAwLCAweDU5YTgwMDEwLCAweDQ4MDFhMDA3LAogCTB4NTlhODAwMDIsIDB4NTlhODA4MDMsIDB4NDgwMWEwMDgsIDB4NDgwNWEwMDksCiAJMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwKLQkweDAyMDFmMDAwLCAweDAwMTA3OGJjLCAweDRhMDI2MjAyLCAweDAwMDBmZmZmLAorCTB4MDIwMWYwMDAsIDB4MDAxMDc2M2IsIDB4NGEwMjYyMDIsIDB4MDAwMGZmZmYsCiAJMHgwNDAxZjk4YywgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OGY2LCAweDVjMDI3ODAwLCAweDRhMDFhMDA2LCAweDAzMDAwMDAwLAorCTB4MDAxMDQ3NDUsIDB4NWMwMjc4MDAsIDB4NGEwMWEwMDYsIDB4MDMwMDAwMDAsCiAJMHg1OTM0MDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDdmZSwgMHgwNDAyMDA2ZSwKIAkweDRhMDFhMDA2LCAweDA0MDAwMDAwLCAweDgxYTQwODAwLCAweDRhMDAwODAwLAogCTB4MjJmZmZmZmUsIDB4NTkzNDAwMGEsIDB4ODQwMDA1MDAsIDB4NDgwMjY4MGEsCkBAIC03NDIyLDE4ICs3MjYwLDE4IEBACiAJMHg4YzA0MGQxNiwgMHgwNDAwMDAwMiwgMHg4NDAwMDU2YSwgMHg0ODAxYTAwOCwKIAkweDRhMDFhMDA5LCAweDAwMDAyNzEwLCAweDU5YTgwMDJkLCAweDQ4MDFhMDBhLAogCTB4MDQwMWYwMzksIDB4NTlhODAwMmEsIDB4NDgwMWEwMDcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTEzYiwgMHgwNDAyMDAwOSwgMHg0OTdiODg4MCwgMHg4MjAwMDUwMCwKLQkweDAwMDBmZmZmLCAweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAxNjA2LAorCTB4MDAxMDRlMGQsIDB4MDQwMjAwMDksIDB4NDk3Yjg4ODAsIDB4ODIwMDA1MDAsCisJMHgwMDAwZmZmZiwgMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMTY3MCwKIAkweDVjMDAwMDAwLCAweDQ4MDM4ODgwLCAweDU5YTgwMDJiLCAweDAyMDFmODAwLAotCTB4MDAxMDUxM2IsIDB4MDQwMjAwMDQsIDB4ODIwMDA1MDAsIDB4MzdmZmZmZmYsCisJMHgwMDEwNGUwZCwgMHgwNDAyMDAwNCwgMHg4MjAwMDUwMCwgMHgzN2ZmZmZmZiwKIAkweDA0MDFmMDAzLCAweDgyMDAwNTAwLCAweDNmZmZmZmZmLCAweDU5OWMwODE4LAogCTB4OGMwNDBkMTYsIDB4MDQwMDAwMDIsIDB4ODQwMDA1NmEsIDB4NTlhODA4MDUsCiAJMHg4YzA0MGQxMCwgMHgwNDAwMDAxOSwgMHg1OTMwMGMwMywgMHg4MjA0MTU4MCwKIAkweDAwMDAwMDUxLCAweDA0MDAwMDE1LCAweDgyMDQxNTgwLCAweDAwMDAwMDMxLAogCTB4MDQwMDAwMTIsIDB4NGM1ODAwMDAsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAwNCwgMHg0MjAwYTAwMCwgMHgwMDEwYjhmYSwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDA0LCAweDQyMDBhMDAwLCAweDAwMTBiNmY5LAogCTB4ODJkMGFjMDAsIDB4MDAwMDAwMWYsIDB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWIxNywgMHg1YzAwMDAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwKKwkweDAwMTBhOTNlLCAweDVjMDAwMDAwLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLAogCTB4NWMwMGIwMDAsIDB4ODQwMDA1N2EsIDB4NDgwMWEwMDgsIDB4NDk3OWEwMDksCiAJMHg0OTc5YTAwYSwgMHg1OWE4MDAwMiwgMHg1OWE4MDgwMywgMHg0ODAxYTAwYiwKIAkweDQ4MDVhMDBjLCAweDU5YTgwMDAwLCAweDU5YTgwODAxLCAweDQ4MDFhMDBkLApAQCAtNzQ0NCwxMCArNzI4MiwxMCBAQAogCTB4MDQwMWYwNDMsIDB4NTlhODAwMjYsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMGQsCiAJMHg1OWE4MDAyYSwgMHg4MjAwMDUwMCwgMHgwMDAwZmZmZiwgMHg1OWM0MDg4MCwKIAkweDgwMDQwZDgwLCAweDA0MDAwMDA3LCAweDQ5N2I4ODgwLCAweDRjMDAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDE2MDYsIDB4NWMwMDAwMDAsIDB4NDgwMzg4ODAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTY3MCwgMHg1YzAwMDAwMCwgMHg0ODAzODg4MCwKIAkweDU5YTgwMDJhLCAweDQ4MDFhMDA3LCAweDRjNjQwMDAwLCAweDRkMmMwMDAwLAotCTB4NTlhOGM4MmIsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMGQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywgMHgwNDAyMDAwYSwgMHg1OTJjMDIwNywKKwkweDU5YThjODJiLCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDBkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkzNjAsIDB4MDQwMjAwMGEsIDB4NTkyYzAyMDcsCiAJMHg4YzAwMDUwZSwgMHgwNDAwMDAwNywgMHg4MjY0Y2QwMCwgMHgwMDAwZmZmZiwKIAkweDU5MmMwMDA5LCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDgwNjRjZDQwLAogCTB4NDg2NWEwMDgsIDB4NWMwMjU4MDAsIDB4NWMwMGM4MDAsIDB4NTlhODAwMmMsCkBAIC03NDU5LDE0ICs3Mjk3LDE0IEBACiAJMHg0ODAxYTAxNywgMHg1OWE4MDAyZiwgMHg0ODAxYTAxOCwgMHg1OWE4MDAzMCwKIAkweDQ4MDFhMDE5LCAweDU5YTgwMDMxLCAweDQ4MDFhMDFhLCAweDQyMDAwODAwLAogCTB4MDAwMDAwMWQsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsCi0JMHgwMDEwNzhiYywgMHgwNDAxZjhjYiwgMHg0YTAxYTAwNiwgMHg1MDAwMDAwMCwKKwkweDAwMTA3NjNiLCAweDA0MDFmOGNiLCAweDRhMDFhMDA2LCAweDUwMDAwMDAwLAogCTB4MDQwMWY3YjUsIDB4MDQwMWY4YzcsIDB4NGEwMWE0MDYsIDB4MjEwMDAwMTAsCiAJMHg0YTAxYTIwNiwgMHgwMDAwMDAxNCwgMHg0OTc5YTAwNywgMHg0OTc5YTAwOCwKIAkweDQ5NzlhMDA5LCAweDQ5NzlhMDBhLCAweDQyMDAwODAwLCAweDAwMDAwMDA1LAotCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDc4YmMsCisJMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzYzYiwKIAkweDA0MDFmOGJmLCAweDA0MDFmMDAyLCAweDA0MDFmOGM0LCAweDRhMDFhMDA2LAogCTB4MDIwMDAwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMDEwMDAsCi0JMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzhiYywgMHgwNDAxZjhiYiwKKwkweDAwMDBkYzAwLCAweDAyMDFmMDAwLCAweDAwMTA3NjNiLCAweDA0MDFmOGJiLAogCTB4NGEwMWEwMDYsIDB4MDIwMDAwMDAsIDB4NTkzMDA0MDMsIDB4ODIwMDA1ODAsCiAJMHgwMDAwMDAzMSwgMHgwNDAyMDc5NCwgMHg4MWE0MDgwMCwgMHg0YTAwMDgwMSwKIAkweDAwZmZmZmZlLCAweDA0MDFmNzJiLCAweDA0MDFmOGIwLCAweDRhMDFhMDA2LApAQCAtNzQ3NSw3ICs3MzEzLDcgQEAKIAkweDU5MzAwMjFhLCAweDgwMDAwNTQwLCAweDA0MDAwMDAzLCAweDQ4MDFhMjA3LAogCTB4MDQwMWYwMDMsIDB4NGEwMWEyMDcsIDB4MDAwMDJhMDAsIDB4NDIwMDA4MDAsCiAJMHgwMDAwMDAwMiwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwKLQkweDAwMTA3OGJjLCAweDRhMDI2MjAyLCAweDAwMDBmZmZmLCAweDA0MDFmODg5LAorCTB4MDAxMDc2M2IsIDB4NGEwMjYyMDIsIDB4MDAwMGZmZmYsIDB4MDQwMWY4ODksCiAJMHg0YTAxYTQwNiwgMHgwMDAwMjAxMCwgMHg0YTAxYTIwNiwgMHgwMDAwMDAxNCwKIAkweDRhMDFhNDA3LCAweDAwMDAwODAwLCAweDRhMDFhMjA3LCAweDAwMDAyMDAwLAogCTB4ODAwMDA1ODAsIDB4NTk5YzA4MTcsIDB4OGMwNDBkMGEsIDB4MDQwMjAwMDMsCkBAIC03NTAwLDE0NDcgKzczMzgsMTQ2MiBAQAogCTB4OGMwODE1MGEsIDB4MDQwMjAwMDQsIDB4OGMwNDBkMGEsIDB4MDQwMDAwMDIsCiAJMHg4NDAwMDU0ZSwgMHg4YzA0MGQxYywgMHgwNDAwMDAwMiwgMHg4NDAwMDU1MiwKIAkweDQ4MDFhMjBhLCAweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDQyMDAxMDAwLAotCTB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDc4YmMsIDB4MDQwMWY4MzMsCisJMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzYzYiwgMHgwNDAxZjgzMywKIAkweDRhMDFhMDA2LCAweDAyMTAwMDE0LCAweDRhMDFhMDA3LCAweDAxMDAwMDAwLAogCTB4NDk3OWEwMDgsIDB4NDk3OWEwMDksIDB4NDk3OWEwMGEsIDB4NDIwMDA4MDAsCiAJMHgwMDAwMDAwNSwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwMjAxZjAwMCwKLQkweDAwMTA3OGJjLCAweDA0MDFmODI1LCAweDRhMDFhMDA2LCAweDAyMDAwMDAwLAorCTB4MDAxMDc2M2IsIDB4MDQwMWY4MjUsIDB4NGEwMWEwMDYsIDB4MDIwMDAwMDAsCiAJMHgwNDAxZjY1ZCwgMHg0OTMzYzg1NywgMHgwNDAxZjgyMCwgMHg0YTAxYTAwNiwKIAkweDAxMDAwMDAwLCAweDRhMDFhNDA3LCAweDAwMDAwMDBiLCAweDQyMDAwODAwLAogCTB4MDAwMDAwMDIsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDIwMWYwMDAsCi0JMHgwMDEwNzhiYywgMHg0MjAwNTAwMCwgMHgzMjAwMDAwMCwgMHg0MjAwNjAwMCwKLQkweDA4MjkwMDAwLCAweDQxNzg2ODAwLCAweDQxNzg3ODAwLCAweDA0MDFmM2RmLAorCTB4MDAxMDc2M2IsIDB4NDIwMDUwMDAsIDB4MzIwMDAwMDAsIDB4NDIwMDYwMDAsCisJMHgwODI5MDAwMCwgMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwgMHgwNDAxZjNlNiwKIAkweDQyMDA1MDAwLCAweDIyMDAwMDAwLCAweDQyMDA2MDAwLCAweDAxMjkwMDAwLAotCTB4NDE3ODY4MDAsIDB4NDE3ODc4MDAsIDB4MDQwMWYzZDgsIDB4NDIwMDUwMDAsCisJMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwgMHgwNDAxZjNkZiwgMHg0MjAwNTAwMCwKIAkweDMzMDAwMDAwLCAweDQyMDA2MDAwLCAweDA4OTgwMDAwLCAweDQxNzg2ODAwLAotCTB4NDE3ODc4MDAsIDB4MDQwMWYzZDEsIDB4NDIwMDUwMDAsIDB4MjMwMDAwMDAsCisJMHg0MTc4NzgwMCwgMHgwNDAxZjNkOCwgMHg0MjAwNTAwMCwgMHgyMzAwMDAwMCwKIAkweDQyMDA2MDAwLCAweDAxOTgwMDAwLCAweDQxNzg2ODAwLCAweDQxNzg3ODAwLAotCTB4MDQwMWYzY2EsIDB4NTkzMDA0MDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwODUsCi0JMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMGM4MCwgMHgwMDAwMDA5MywKLQkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDgyMDAwNDgwLCAweDAwMDAwMDg1LAotCTB4MGMwMWYwMDEsIDB4MDAxMDc0ZWIsIDB4MDAxMDc0ZWQsIDB4MDAxMDc0ZmIsCi0JMHgwMDEwNzRlYiwgMHgwMDEwNzRlYiwgMHgwMDEwNzRlYiwgMHgwMDEwNzRlYiwKLQkweDAwMTA3NGViLCAweDAwMTA3NGViLCAweDAwMTA3NGViLCAweDAwMTA3NGViLAotCTB4MDAxMDc0ZWIsIDB4MDAxMDc0ZWIsIDB4MDAxMDc1MDYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywgMHgwNDAxZjg1MCwgMHg1OTMwMDQwMiwKLQkweDQ4MDFhNDA3LCAweDU5MzAwMDFjLCAweDQ4MDFhMjA3LCAweDQ5NzlhNDA4LAotCTB4NGEwMWEyMDgsIDB4MDAwMGZmZmYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsCi0JMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjNjMiwgMHg0OTMzYzg1NywKLQkweDA0MDFmODRlLCAweDRhMDFhNDA2LCAweDAwMDAwMDAzLCAweDRhMDFhMjA2LAotCTB4MDAwMDAzMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4NDIwMDEwMDAsCi0JMHgwMDAwZGMwMCwgMHgwNDAxZjNiNywgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwKLQkweDQ5MzNjODU3LCAweDQ5MmZjODU3LCAweDgxMmU1OWMwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4NTkzNDBhMTIsIDB4ODIwNDBkMDAsIDB4MDAwMGZmMDAsCi0JMHg1OTJjMDAwYSwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg5MDAwMDFjMCwKLQkweDgwMDQwNTQwLCAweDgyMDAwNTQwLCAweDAwMDAwMDExLCAweDQ0MDM0ODAwLAotCTB4ODFhNWEwMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDksIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwMywgMHg1OTJjMDAwOSwgMHg4MjAwMDUwMCwgMHhmZjAwMDAwMCwKLQkweDgyMDAxZDgwLCAweDg0MDAwMDAwLCAweDA0MDAwMDA5LCAweDgyMDAxZDgwLAotCTB4ODUwMDAwMDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NDIwMDEwMDAsCi0JMHgwMDAwMDAwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwgMHg4MzJjMWMwMCwKLQkweDAwMDAwMDA5LCAweDUwMGMwMDAwLCAweDQ0MDFhMDAwLCAweDgwMGMxODAwLAotCTB4ODBkMWEwMDAsIDB4ODAwODEwNDAsIDB4MDQwMjA3ZmIsIDB4NDIwMDEwMDAsCi0JMHgwMDAwZGMwMCwgMHg1YzAyNTgwMCwgMHgwNDAxZjM4NiwgMHg0MjAwNTAwMCwKLQkweDgxMDAwMDAwLCAweDQyMDA2MDAwLCAweDAwMDkwMDAwLCAweDQxNzg2ODAwLAotCTB4NDE3ODc4MDAsIDB4MDQwMWYzNWQsIDB4NDIwMDUwMDAsIDB4ODQwMDAwMDAsCi0JMHg0MjAwNjAwMCwgMHgwMDk5MDAwMCwgMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDA1LCAweDA0MDAwMDAyLCAweDg0MzA2NTJlLCAweDQxNzg2ODAwLAotCTB4NDE3ODc4MDAsIDB4MDQwMWYzNTEsIDB4NDIwMDUwMDAsIDB4ODUwMDAwMDAsCi0JMHg0MjAwNjAwMCwgMHgwMDk5MDAwMCwgMHg1OTMwMDQwNiwgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDA1LCAweDA0MDAwMDAyLCAweDg0MzA2NTJlLCAweDQxNzg2ODAwLAotCTB4NDE3ODc4MDAsIDB4MDQwMWYzNDUsIDB4NTkzMDA0MDMsIDB4ODIwMDBjODAsCi0JMHgwMDAwMDA1MywgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMDQ4MCwKLQkweDAwMDAwMDRiLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDU5MzI2ODA5LAotCTB4NTkzNjhjMDMsIDB4NDgwM2M4NTcsIDB4MGMwMWYwMDEsIDB4MDAxMDc1ZGEsCi0JMHgwMDEwNzVlMiwgMHgwMDEwNzVlYSwgMHgwMDEwNzVmMiwgMHgwMDEwNzU2YiwKLQkweDAwMTA3NTZiLCAweDAwMTA3NTZiLCAweDAwMTA3NWQyLCAweDAyMDFmODAwLAotCTB4MDAxMDA1ZDgsIDB4NDIwMDUwMDAsIDB4MDYwMDAwMDAsIDB4NDIwMDYwMDAsCi0JMHgwODI5MDAwMCwgMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwgMHgwNDAxZjMyNywKLQkweDQ5MzNjODU3LCAweDA0MDFmZjQ3LCAweDRhMDFhMDA2LCAweDEyMDAwMDAwLAotCTB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMDMsCi0JMHg1OTM0MDAwMiwgMHgwNDAxZjAwMiwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwKLQkweDAwZmZmZmZmLCAweDQ4MDFhMDA3LCAweDU5MzAwNDE5LCAweDQ4MDFhNDA4LAotCTB4NTkzMDAyMTksIDB4NDgwMWEyMDgsIDB4NDk3OWEwMDksIDB4NDk3OWEwMGEsCi0JMHg0OTc5YTAwYiwgMHg0OTc5YTAwYywgMHg0OTc5YTAwZCwgMHg0OTc5YTAwZSwKLQkweDQ5NzlhMDBmLCAweDQ5NzlhMDEwLCAweDQyMDAwODAwLCAweDAwMDAwMDBiLAotCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDQwMWYzMmEsIDB4MDQwMWZmMjksCi0JMHg0YTAxYTAwNiwgMHgwZjAwMDAwMCwgMHg1OTMwMDAxYywgMHg0ODAxYTAwNywKLQkweDQyMDAwODAwLCAweDAwMDAwMDAyLCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLAotCTB4MDQwMWYzMjAsIDB4MDQwMWZmMmQsIDB4NGEwMWEwMDYsIDB4MDIwMDAwMDAsCi0JMHg1OWM0MDA4NSwgMHg0ODAzMTAwNCwgMHg1OTg4MDAwMCwgMHg0ODAxYTAwNywKLQkweDU5ODgwMDAxLCAweDQ4MDFhMDA4LCAweDU5ODgwMDAyLCAweDQ4MDFhMDA5LAotCTB4NTk4ODAwMDMsIDB4NDgwMWEwMGEsIDB4NTk4ODAwMDQsIDB4NDgwMWEwMGIsCi0JMHg1OTg4MDAwNSwgMHg0ODAxYTAwYywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywKLQkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMzBhLCAweDRhMDI2MjAyLAotCTB4MDAwMGZmZmYsIDB4MDQwMWZmMDcsIDB4NGEwMWEwMDYsIDB4NjIwMDAwMDAsCi0JMHg1OTMwMDAxYywgMHg0ODAxYTAwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMiwKLQkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMmZlLCAweDA0MDFmZWZkLAotCTB4NTkzMDA4MDgsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsCi0JMHg4MjA0YTQwMCwgMHgwMDAwMDAwYSwgMHg1OTMwYjAxYywgMHg4MmQwYWMwMCwKLQkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDU5MzAwODFjLAotCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsCi0JMHg1YzAwYTAwMCwgMHgwNDAxZjJlYiwgMHgwNDAxZmY5YiwgMHg1OTMwMDAxNywKLQkweDQ4MDFhMDA2LCAweDU5MzAwMDE4LCAweDQ4MDFhMDA3LCAweDRhMDFhMDA4LAotCTB4MDAwMDEwMDAsIDB4MDQwMWYwMjAsIDB4MDQwMWZmOTMsIDB4NTkzMDAwMTcsCi0JMHg0ODAxYTAwNiwgMHg1OTMwMDAxOCwgMHg0ODAxYTAwNywgMHg0YTAxYTAwOCwKLQkweDAwMDA0MDAwLCAweDA0MDFmMDE4LCAweDA0MDFmZjhiLCAweDU5MzAwMDE3LAotCTB4NDgwMWEwMDYsIDB4NTkzMDAwMTgsIDB4NDgwMWEwMDcsIDB4NGEwMWEwMDgsCi0JMHgwMDAwMjAwMCwgMHgwNDAxZjAxMCwgMHgwNDAxZmY4MywgMHg1OTMwMDAxNywKLQkweDQ4MDFhMDA2LCAweDU5MzAwMDE4LCAweDQ4MDFhMDA3LCAweDRhMDFhMDA4LAotCTB4MDAwMDA0MDAsIDB4MDQwMWYwMDgsIDB4MDQwMWZmN2IsIDB4NTkzMDAwMTcsCi0JMHg0ODAxYTAwNiwgMHg1OTMwMDAxOCwgMHg0ODAxYTAwNywgMHg0YTAxYTAwOCwKLQkweDAwMDAwMjAwLCAweDQ5NzlhMDA5LCAweDQ5NzlhMDBhLCAweDQ5NzlhMDBiLAotCTB4NDk3OWEwMGMsIDB4NDk3OWEwMGQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDgsCi0JMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjJiYSwgMHgwNDAxZmVjNywKLQkweDRhMDFhMDA2LCAweDAyMDAwMDE0LCAweDQ5NzlhNDA3LCAweDQ5NzlhMjA3LAotCTB4NTlhODAwM2EsIDB4NDgwMWEwMDgsIDB4NTlhODAwM2IsIDB4NDgwMWEwMDksCi0JMHg0YTAxYTAwYSwgMHgwMDA0Nzg3OCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNSwKLQkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMmFhLCAweDA0MDFmZWI3LAotCTB4NGEwMWEwMDYsIDB4MDIxNDAwMTgsIDB4NGEwMWE0MDcsIDB4MDAwMDA4MDAsCi0JMHg1OTMwMDAxYywgMHg4MjAwMGQwMCwgMHhmZjAwMDAwMCwgMHg5MDA0MDljMCwKLQkweDQ4MDVhMjA3LCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDQ4MDFhMDBhLAotCTB4NDk3OWE0MDgsIDB4NDk3OWEyMDgsIDB4NDk3OWE0MDksIDB4NDk3OWEyMDksCi0JMHg0OTc5YTAwYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwgMHg0MjAwMTAwMCwKLQkweDAwMDBkYzAwLCAweDA0MDFmMjkzLCAweDQ4MDNjODU2LCAweDRkMzgwMDAwLAotCTB4NGQxYzAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMzUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTNiYSwgMHgwNDAyMDAxZSwgMHgwNDAxZmU4YSwgMHg0YTAxYTAwNiwKLQkweDEzMDAwMDAwLCAweDU5MzIzODFlLCAweDU5MWMwMDE5LCAweDQ4MDFhMDA1LAotCTB4NTkxYzA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDcsCi0JMHg1OTMwMDgwOSwgMHg1ODA0MDAwMiwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKLQkweDQ4MDFhMDA3LCAweDA0MDFmMDAzLCAweDU5YTgwMDEwLCAweDQ4MDFhMDA3LAotCTB4NTkzMDA0MTksIDB4NDgwMWE0MDgsIDB4NTkzMDAyMTksIDB4NDgwMWEyMDgsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwKLQkweDVjMDIzODAwLCAweDVjMDI3MDAwLCAweDA0MDFmMjZlLCAweDAyMDFmODAwLAotCTB4MDAxMDZjNTUsIDB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsIDB4MDIwMjA4MDAsCi0JMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzdkLCAweDVjMDIzODAwLCAweDVjMDI3MDAwLCAweDAyMDFmMDAwLAotCTB4MDAxMDZjNGIsIDB4NDgwM2M4NTYsIDB4NGQyYzAwMDAsIDB4NGQxYzAwMDAsCi0JMHg1OTMyMzgxZSwgMHg4MTFlMzljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKLQkweDU5MWMwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwMDBkLAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMzYsIDB4NGEwMjY0MDMsCi0JMHgwMDAwMDAzNywgMHg0YTAyNjQxYSwgMHgwMDAwMDAwMywgMHg0YTAyNjIxYSwKLQkweDAwMDAxNzAwLCAweDVjMDIzODAwLCAweDVjMDI1ODAwLCAweDA0MDFmMDY0LAotCTB4MDQwMWY4NGIsIDB4NDIwMDEwMDAsIDB4NDAwMDAwMDAsIDB4NTkxYzAyMDMsCi0JMHg1OTFjMDgwNCwgMHg4YzA0MGQzZSwgMHgwNDAyMDAyMywgMHg4MjAwMGM4MCwKLQkweDAwMDAwMDBlLCAweDBjMDAxMDAzLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAotCTB4MDAxMDc2OTEsIDB4MDAxMDc2OWQsIDB4MDAxMDc2OTMsIDB4MDAxMDc2OWQsCi0JMHgwMDEwNzY5OSwgMHgwMDEwNzY5MSwgMHgwMDEwNzY5MSwgMHgwMDEwNzY5ZCwKLQkweDAwMTA3NjlkLCAweDAwMTA3NjkxLCAweDAwMTA3NjkxLCAweDAwMTA3NjkxLAotCTB4MDAxMDc2OTEsIDB4MDAxMDc2OTEsIDB4MDAxMDc2OWQsIDB4MDAxMDc2OTEsCi0JMHgwMDEwNzY5ZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OTFjMDQxNCwKLQkweDQ4MDNjODU3LCAweDhjMDAwNTE4LCAweDA0MDAwMDAzLCAweDhjMDAwNTEyLAotCTB4MDQwMDAwMDMsIDB4ODAwMDE1ODAsIDB4MDQwMWYwMDMsIDB4NDIwMDEwMDAsCi0JMHgyMDAwMDAwMCwgMHg1OTFjMDAxNSwgMHg0ODAxYTAwYSwgMHgwNDAxZjAxOCwKLQkweDA0MDFmODFmLCAweDU5MWU1ODA4LCAweDgxMmU1OWMwLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4NTkyYzEwMGYsIDB4NTkxYzAwMTEsIDB4ODAwODA0ODAsCi0JMHg0ODAxYTAwYSwgMHg1OTFjMDIwMywgMHg1OTFjMDgwNCwgMHg4YzA0MGQzZSwKLQkweDA0MDIwMDA3LCAweDgyMDAwZDgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDA3LAotCTB4ODIwMDBkODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMDQsIDB4NDIwMDEwMDAsCi0JMHg0MDAwMDAwMCwgMHgwNDAxZjAwMiwgMHg4MDAwMTU4MCwgMHg0ODA5YTAwYiwKLQkweDQyMDAwODAwLCAweDAwMDAwMDA2LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLAotCTB4NWMwMjM4MDAsIDB4NWMwMjU4MDAsIDB4MDQwMWYxZmUsIDB4NDgwM2M4NTYsCi0JMHgwNDAxZmUwYSwgMHg0YTAxYTAwNiwgMHgwMjAwMDAwMCwgMHg1OTMwMGMxOSwKLQkweDQ4MDVhNDA3LCAweDU5MzAwYTE5LCAweDQ4MDVhMjA3LCAweDU5YTgxMDEwLAotCTB4NTkzMDA4MDksIDB4NTgwNDE4MDIsIDB4ODIwYzFkMDAsIDB4MDBmZmZmZmYsCi0JMHg1OTMwMDgxZSwgMHg1ODA0MDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywKLQkweDA0MDIwMDA0LCAweDQ4MDlhMDA4LCAweDQ4MGRhMDA5LCAweDA0MDFmMDAzLAotCTB4NDgwZGEwMDgsIDB4NDgwOWEwMDksIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCi0JMHgwNDAxZmRmMiwgMHgwNDAxZjAwMywgMHg0ODAzYzg1NiwgMHgwNDAxZmRlOCwKLQkweDRhMDFhMDA2LCAweDAxMDAwMDAwLCAweDU5MzAwNDFhLCAweDQ4MDFhNDA3LAotCTB4NTkzMDAyMWEsIDB4NDgwMWEyMDcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsCi0JMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjFkNiwgMHg0ODAzYzg1NiwKLQkweDRkMWMwMDAwLCAweDA0MDFmZGNjLCAweDRhMDFhMDA2LCAweDE0MDAwMDAwLAotCTB4NTkzMjM4MWUsIDB4NTkxYzAwMTksIDB4NDgwMWEwMDUsIDB4NTkzMDA0MTksCi0JMHg0ODAxYTQwNywgMHg1OTMwMDIxOSwgMHg0ODAxYTIwNywgMHg1OTMwMDAxNSwKLQkweDQ4MDFhMDA4LCAweDU5MzAwMjE2LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAotCTB4ODQwMDAxYzAsIDB4NDgwMWE0MDksIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsCi0JMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHg1YzAyMzgwMCwgMHgwNDAxZjFiZCwKLQkweDQ4MDNjODU2LCAweDA0MDFmODBiLCAweDU5MzAwNDFhLCAweDkwMDAwMWMwLAotCTB4NDgwMWEwMDUsIDB4MDQwMWY5ZWMsIDB4NDE3ODA4MDAsIDB4NDIwMDEwMDAsCi0JMHgwMDAwNWMwMCwgMHgwNDAxZjliMywgMHgwMjAxZjAwMCwgMHgwMDEwNjA0ZCwKLQkweDQ4MDNjODU2LCAweDU5MzAwODE3LCAweDgyMDQxYzAwLCAweDAwMDAwMDA1LAotCTB4NDYwMzQ4MDAsIDB4MDAwMDAwMjEsIDB4NTgwNDA0MDQsIDB4ODIwMDA1MDAsCi0JMHgwMDAwZjAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMzAwMCwgMHgwNDAwMDAwMywKLQkweDQ2MDM0ODAwLCAweDAwMDAwMDQxLCAweDgxYTVhMDAwLCAweDU4MGMwMDAxLAotCTB4ODIwMDBkMDAsIDB4MDBmZmZmZmYsIDB4ODIwNDBkNDAsIDB4YzIwMDAwMDAsCi0JMHg0ODA1YTAwMCwgMHg1ODBjMDgwMCwgMHg4MjA0MTUwMCwgMHgwMGZmZmZmZiwKLQkweDgyMDAwNTAwLCAweGZmMDAwMDAwLCAweDgwMDgwNTQwLCAweDQ4MDFhMDAxLAotCTB4NTgwYzAwMDIsIDB4ODIwMDA1ODAsIDB4MDBjMDAwMDAsIDB4ODIwMDA1MDAsCi0JMHgwMGZkMDMwMCwgMHg0ODAxYTAwMiwgMHg1ODBjMDAwMywgMHg0ODAxYTAwMywKLQkweDU4MGMwNDA0LCAweDQ4MDFhNDA0LCAweDU4MGMwMjA0LCAweDQ4MDFhMjA0LAotCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NTlhODAwMjYsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAyOCwgMHgwNDAyMDAwOSwgMHg1OWE4MDAyNiwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMDI4LCAweDA0MDAwMDAzLCAweDQ5N2E2YTEyLCAweDA0MDFmMDAzLAotCTB4NGEwMjZhMTIsIDB4MDAwMGZmMDAsIDB4NDIwMDUwMDAsIDB4MjIwMDAwMDAsCi0JMHg0MjAwNjAwMCwgMHgwMTM4MDAwMCwgMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwKLQkweDA0MDFmOTUyLCAweDU5MzAxMDA4LCAweDRhMDFhMDA2LCAweDU0MDAwMDAwLAotCTB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4NTgwODBjMGEsCi0JMHg4MDA0MDhmMCwgMHg4MDA0MDU0MCwgMHg0ODAxYTAwNywgMHg1ODA4MDAwYSwKLQkweDgyMDAwNTAwLCAweGZmMDAwMDAwLCAweDQ4MDFhMDA4LCAweDU5YTgwMDAyLAotCTB4NDgwMWEwMDksIDB4NTlhODAwMDMsIDB4NDgwMWEwMGEsIDB4NTlhODAwMDAsCi0JMHg0ODAxYTAwYiwgMHg1OWE4MDAwMSwgMHg0ODAxYTAwYywgMHg1ODA4MDAwYywKLQkweDljMDAwMWMwLCAweDQ4MDFhMDBkLCAweDU4MDgwMDBkLCAweDljMDAwMWMwLAotCTB4NDgwMWEwMGUsIDB4NTgwODAwMGUsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMGYsCi0JMHg1ODA4MDAwZiwgMHg5YzAwMDFjMCwgMHg0ODAxYTAxMCwgMHg1ODA4MDAxMCwKLQkweDljMDAwMWMwLCAweDQ4MDFhMDExLCAweDU4MDgwMDExLCAweDljMDAwMWMwLAotCTB4NDgwMWEwMTIsIDB4NTgwODAwMTIsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMTMsCi0JMHg1ODA4MDAxMywgMHg5YzAwMDFjMCwgMHg0ODAxYTAxNCwgMHg1ODA4MDAxMCwKLQkweDljMDAwMWMwLCAweDQ4MDFhMDE1LCAweDU4MDgwMDExLCAweDljMDAwMWMwLAotCTB4NDgwMWEwMTYsIDB4NTgwODAwMTIsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMTcsCi0JMHg1ODA4MDAxMywgMHg5YzAwMDFjMCwgMHg0ODAxYTAxOCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDEzLCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMTM1LAotCTB4NDgwM2M4NTYsIDB4NDIwMDUwMDAsIDB4MjIwMDAwMDAsIDB4NDIwMDYwMDAsCi0JMHgwMTI5MDAwMCwgMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwgMHgwNDAxZjkwYiwKLQkweDU5MzAxMDA4LCAweDRhMDFhMDA2LCAweDU1MDAwMDAwLCAweDU4MDgwMDBiLAorCTB4MDQwMWYzZDEsIDB4NTkzMDA0MDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwODUsCisJMHgwMjAwMTgwMCwgMHgwMDEwMDYxNSwgMHg4MjAwMGM4MCwgMHgwMDAwMDA5MywKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDgyMDAwNDgwLCAweDAwMDAwMDg1LAorCTB4MGMwMWYwMDEsIDB4MDAxMDcyNjMsIDB4MDAxMDcyNjUsIDB4MDAxMDcyNzIsCisJMHgwMDEwNzI2MywgMHgwMDEwNzI2MywgMHgwMDEwNzI2MywgMHgwMDEwNzI2MywKKwkweDAwMTA3MjYzLCAweDAwMTA3MjYzLCAweDAwMTA3MjYzLCAweDAwMTA3MjYzLAorCTB4MDAxMDcyNjMsIDB4MDAxMDcyNjMsIDB4MDAxMDcyN2YsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHg0OTMzYzg1NywgMHgwNDAxZjg1MSwgMHg1OTMwMDAxYywKKwkweDQ4MDFhMDA0LCAweDQ4MDFhMDA3LCAweDQ5NzlhNDA4LCAweDRhMDFhMjA4LAorCTB4MDAwMGZmZmYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4NDIwMDEwMDAsCisJMHgwMDAwZGMwMCwgMHgwNDAxZjNjYSwgMHg0OTMzYzg1NywgMHgwNDAxZjg1MCwKKwkweDU5MzAwMDFjLCAweDQ4MDFhMDA0LCAweDRhMDFhNDA2LCAweDAwMDAwMDAzLAorCTB4NGEwMWEyMDYsIDB4MDAwMDAzMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsCisJMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjNiZCwgMHg0ZDJjMDAwMCwKKwkweDU5MzI1ODA4LCAweDQ5MzNjODU3LCAweDQ5MmZjODU3LCAweDgxMmU1OWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NTkzNDBhMTIsIDB4ODIwNDBkMDAsCisJMHgwMDAwZmYwMCwgMHg1OTJjMDAwYSwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDkwMDAwMWMwLCAweDgwMDQwNTQwLCAweDgyMDAwNTQwLCAweDAwMDAwMDExLAorCTB4NDQwMzQ4MDAsIDB4ODFhNWEwMDAsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMDksCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHg1OTJjMDAwOSwgMHg4MjAwMDUwMCwKKwkweGZmMDAwMDAwLCAweDgyMDAxZDgwLCAweDg0MDAwMDAwLCAweDA0MDAwMDA5LAorCTB4ODIwMDFkODAsIDB4ODUwMDAwMDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCisJMHg0MjAwMTAwMCwgMHgwMDAwMDAwNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwKKwkweDgzMmMxYzAwLCAweDAwMDAwMDA5LCAweDUwMGMwMDAwLCAweDQ0MDFhMDAwLAorCTB4ODAwYzE4MDAsIDB4ODBkMWEwMDAsIDB4ODAwODEwNDAsIDB4MDQwMjA3ZmIsCisJMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHg1YzAyNTgwMCwgMHgwNDAxZjM4YywKKwkweDQyMDA1MDAwLCAweDgxMDAwMDAwLCAweDQyMDA2MDAwLCAweDAwMDkwMDAwLAorCTB4NDE3ODY4MDAsIDB4NDE3ODc4MDAsIDB4MDQwMWYzNjMsIDB4NDIwMDUwMDAsCisJMHg4NDAwMDAwMCwgMHg0MjAwNjAwMCwgMHgwMDk5MDAwMCwgMHg1OTMwMDQwNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDA1LCAweDA0MDAwMDAyLCAweDg0MzA2NTJlLAorCTB4NDE3ODY4MDAsIDB4NDE3ODc4MDAsIDB4MDQwMWYzNTcsIDB4NDIwMDUwMDAsCisJMHg4NTAwMDAwMCwgMHg0MjAwNjAwMCwgMHgwMDk5MDAwMCwgMHg1OTMwMDQwNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDA1LCAweDA0MDAwMDAyLCAweDg0MzA2NTJlLAorCTB4NDE3ODY4MDAsIDB4NDE3ODc4MDAsIDB4MDQwMWYzNGIsIDB4NTkzMDA0MDMsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDA1MywgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwKKwkweDgyMDAwNDgwLCAweDAwMDAwMDRiLCAweDAyMDAxODAwLCAweDAwMTAwNjE1LAorCTB4NTkzMjY4MDksIDB4NTkzNjhjMDMsIDB4NDgwM2M4NTcsIDB4MGMwMWYwMDEsCisJMHgwMDEwNzM1MywgMHgwMDEwNzM1YiwgMHgwMDEwNzM2MywgMHgwMDEwNzM2YiwKKwkweDAwMTA3MmU0LCAweDAwMTA3MmU0LCAweDAwMTA3MmU0LCAweDAwMTA3MzRiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NDIwMDUwMDAsIDB4MDYwMDAwMDAsCisJMHg0MjAwNjAwMCwgMHgwODI5MDAwMCwgMHg0MTc4NjgwMCwgMHg0MTc4NzgwMCwKKwkweDA0MDFmMzJkLCAweDQ5MzNjODU3LCAweDA0MDFmZjQ2LCAweDRhMDFhMDA2LAorCTB4MTIwMDAwMDAsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsCisJMHgwNDAyMDAwMywgMHg1OTM0MDAwMiwgMHgwNDAxZjAwMiwgMHg1OWE4MDAxMCwKKwkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDQ4MDFhMDA3LCAweDU5MzAwNDE5LAorCTB4NDgwMWE0MDgsIDB4NTkzMDAyMTksIDB4NDgwMWEyMDgsIDB4NDk3OWEwMDksCisJMHg0OTc5YTAwYSwgMHg0OTc5YTAwYiwgMHg0OTc5YTAwYywgMHg0OTc5YTAwZCwKKwkweDQ5NzlhMDBlLCAweDQ5NzlhMDBmLCAweDQ5NzlhMDEwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMGIsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDQwMWYzMzAsCisJMHgwNDAxZmYyOCwgMHg0YTAxYTAwNiwgMHgwZjAwMDAwMCwgMHg1OTMwMDAxYywKKwkweDQ4MDFhMDA3LCAweDQyMDAwODAwLCAweDAwMDAwMDAyLCAweDQyMDAxMDAwLAorCTB4MDAwMGRjMDAsIDB4MDQwMWYzMjYsIDB4MDQwMWZmMmMsIDB4NGEwMWEwMDYsCisJMHgwMjAwMDAwMCwgMHg1OWM0MDA4NSwgMHg0ODAzMTAwNCwgMHg1OTg4MDAwMCwKKwkweDQ4MDFhMDA3LCAweDU5ODgwMDAxLCAweDQ4MDFhMDA4LCAweDU5ODgwMDAyLAorCTB4NDgwMWEwMDksIDB4NTk4ODAwMDMsIDB4NDgwMWEwMGEsIDB4NTk4ODAwMDQsCisJMHg0ODAxYTAwYiwgMHg1OTg4MDAwNSwgMHg0ODAxYTAwYywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA3LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMzEwLAorCTB4NGEwMjYyMDIsIDB4MDAwMGZmZmYsIDB4MDQwMWZmMDYsIDB4NGEwMWEwMDYsCisJMHg2MjAwMDAwMCwgMHg1OTMwMDAxYywgMHg0ODAxYTAwNywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAyLCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMzA0LAorCTB4MDQwMWZlZmMsIDB4NTkzMDA4MDgsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsCisJMHg0YzU4MDAwMCwgMHg4MjA0YTQwMCwgMHgwMDAwMDAwYSwgMHg1OTMwYjAxYywKKwkweDgyZDBhYzAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTBhOTNlLAorCTB4NTkzMDA4MWMsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4NWMwMGIwMDAsCisJMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHgwNDAxZjJmMSwgMHgwNDAxZmY5YiwKKwkweDU5MzAwMDE3LCAweDQ4MDFhMDA2LCAweDU5MzAwMDE4LCAweDQ4MDFhMDA3LAorCTB4NGEwMWEwMDgsIDB4MDAwMDEwMDAsIDB4MDQwMWYwMjAsIDB4MDQwMWZmOTMsCisJMHg1OTMwMDAxNywgMHg0ODAxYTAwNiwgMHg1OTMwMDAxOCwgMHg0ODAxYTAwNywKKwkweDRhMDFhMDA4LCAweDAwMDA0MDAwLCAweDA0MDFmMDE4LCAweDA0MDFmZjhiLAorCTB4NTkzMDAwMTcsIDB4NDgwMWEwMDYsIDB4NTkzMDAwMTgsIDB4NDgwMWEwMDcsCisJMHg0YTAxYTAwOCwgMHgwMDAwMjAwMCwgMHgwNDAxZjAxMCwgMHgwNDAxZmY4MywKKwkweDU5MzAwMDE3LCAweDQ4MDFhMDA2LCAweDU5MzAwMDE4LCAweDQ4MDFhMDA3LAorCTB4NGEwMWEwMDgsIDB4MDAwMDA0MDAsIDB4MDQwMWYwMDgsIDB4MDQwMWZmN2IsCisJMHg1OTMwMDAxNywgMHg0ODAxYTAwNiwgMHg1OTMwMDAxOCwgMHg0ODAxYTAwNywKKwkweDRhMDFhMDA4LCAweDAwMDAwMjAwLCAweDQ5NzlhMDA5LCAweDQ5NzlhMDBhLAorCTB4NDk3OWEwMGIsIDB4NDk3OWEwMGMsIDB4NDk3OWEwMGQsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwOCwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHgwNDAxZjJjMCwKKwkweDA0MDFmZWM2LCAweDRhMDFhMDA2LCAweDAyMDAwMDE0LCAweDQ5NzlhNDA3LAorCTB4NDk3OWEyMDcsIDB4NTlhODAwM2EsIDB4NDgwMWEwMDgsIDB4NTlhODAwM2IsCisJMHg0ODAxYTAwOSwgMHg0YTAxYTAwYSwgMHgwMDA0Nzg3OCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA1LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMmIwLAorCTB4MDQwMWZlYjYsIDB4NGEwMWEwMDYsIDB4MDIxNDAwMTgsIDB4NGEwMWE0MDcsCisJMHgwMDAwMDgwMCwgMHg1OTMwMDAxYywgMHg4MjAwMGQwMCwgMHhmZjAwMDAwMCwKKwkweDkwMDQwOWMwLCAweDQ4MDVhMjA3LCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAorCTB4NDgwMWEwMGEsIDB4NDk3OWE0MDgsIDB4NDk3OWEyMDgsIDB4NDk3OWE0MDksCisJMHg0OTc5YTIwOSwgMHg0OTc5YTAwYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMjk5LCAweDQ5MzNjODU3LAorCTB4NDkzN2M4NTcsIDB4NGQzODAwMDAsIDB4NGQxYzAwMDAsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAzNSwgMHgwMjAxZjgwMCwgMHgwMDEwOTE4MywgMHgwNDAyMDAyMiwKKwkweDA0MDFmZTg4LCAweDRhMDFhMDA2LCAweDEzMDAwMDAwLCAweDU5MzIzODFlLAorCTB4NTkxYzA0MTQsIDB4OGMwMDA1MDIsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCisJMHg1OTFjMDAxOSwgMHg0ODAxYTAwNSwgMHg1OTFjMDQwNiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDAwMDA3LCAweDU5MzAwODA5LCAweDU4MDQwMDAyLAorCTB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4NDgwMWEwMDcsIDB4MDQwMWYwMDMsCisJMHg1OWE4MDAxMCwgMHg0ODAxYTAwNywgMHg1OTMwMDQxOSwgMHg0ODAxYTQwOCwKKwkweDU5MzAwMjE5LCAweDQ4MDFhMjA4LCAweDQyMDAwODAwLCAweDAwMDAwMDAzLAorCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4NWMwMjM4MDAsIDB4NWMwMjcwMDAsCisJMHgwNDAxZjI2ZiwgMHg0ODAzYzg1NiwgMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywKKwkweDU5OGMwMDBkLCAweDgxMzAwNTgwLCAweDAyMDIwODAwLCAweDAwMTAwNjE1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDY4ZjYsIDB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsCisJMHg1YzAyMzgwMCwgMHg1YzAyNzAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNjk4MiwKKwkweDQ4MDNjODU2LCAweDRkMmMwMDAwLCAweDRkMWMwMDAwLCAweDU5MzIzODFlLAorCTB4ODExZTM5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NTkxYzBjMDYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwNiwgMHgwNDAwMDAwZCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDAwMDM2LCAweDRhMDI2NDAzLCAweDAwMDAwMDM3LAorCTB4NGEwMjY0MWEsIDB4MDAwMDAwMDMsIDB4NGEwMjYyMWEsIDB4MDAwMDE3MDAsCisJMHg1YzAyMzgwMCwgMHg1YzAyNTgwMCwgMHgwNDAxZjA2NCwgMHgwNDAxZjg0YiwKKwkweDQyMDAxMDAwLCAweDQwMDAwMDAwLCAweDU5MWMwMjAzLCAweDU5MWMwODA0LAorCTB4OGMwNDBkM2UsIDB4MDQwMjAwMjMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsCisJMHgwYzAwMTAwMywgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHgwMDEwNzQxMCwKKwkweDAwMTA3NDFjLCAweDAwMTA3NDEyLCAweDAwMTA3NDFjLCAweDAwMTA3NDE4LAorCTB4MDAxMDc0MTAsIDB4MDAxMDc0MTAsIDB4MDAxMDc0MWMsIDB4MDAxMDc0MWMsCisJMHgwMDEwNzQxMCwgMHgwMDEwNzQxMCwgMHgwMDEwNzQxMCwgMHgwMDEwNzQxMCwKKwkweDAwMTA3NDEwLCAweDAwMTA3NDFjLCAweDAwMTA3NDEwLCAweDAwMTA3NDFjLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NTkxYzA0MTQsIDB4NDgwM2M4NTcsCisJMHg4YzAwMDUxOCwgMHgwNDAwMDAwMywgMHg4YzAwMDUxMiwgMHgwNDAwMDAwMywKKwkweDgwMDAxNTgwLCAweDA0MDFmMDAzLCAweDQyMDAxMDAwLCAweDIwMDAwMDAwLAorCTB4NTkxYzAwMTUsIDB4NDgwMWEwMGEsIDB4MDQwMWYwMTgsIDB4MDQwMWY4MWYsCisJMHg1OTFlNTgwOCwgMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKKwkweDU5MmMxMDBmLCAweDU5MWMwMDExLCAweDgwMDgwNDgwLCAweDQ4MDFhMDBhLAorCTB4NTkxYzAyMDMsIDB4NTkxYzA4MDQsIDB4OGMwNDBkM2UsIDB4MDQwMjAwMDcsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDAwNywgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDA0LCAweDA0MDAwMDA0LCAweDQyMDAxMDAwLCAweDQwMDAwMDAwLAorCTB4MDQwMWYwMDIsIDB4ODAwMDE1ODAsIDB4NDgwOWEwMGIsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNiwgMHg0MjAwMTAwMCwgMHgwMDAwZGMwMCwgMHg1YzAyMzgwMCwKKwkweDVjMDI1ODAwLCAweDA0MDFmMWZlLCAweDQ4MDNjODU2LCAweDA0MDFmZTAzLAorCTB4NGEwMWEwMDYsIDB4MDIwMDAwMDAsIDB4NTkzMDBjMTksIDB4NDgwNWE0MDcsCisJMHg1OTMwMGExOSwgMHg0ODA1YTIwNywgMHg1OWE4MTAxMCwgMHg1OTMwMDgwOSwKKwkweDU4MDQxODAyLCAweDgyMGMxZDAwLCAweDAwZmZmZmZmLCAweDU5MzAwODFlLAorCTB4NTgwNDA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMDQsCisJMHg0ODA5YTAwOCwgMHg0ODBkYTAwOSwgMHgwNDAxZjAwMywgMHg0ODBkYTAwOCwKKwkweDQ4MDlhMDA5LCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDA0MDFmZGViLAorCTB4MDQwMWYwMDMsIDB4NDgwM2M4NTYsIDB4MDQwMWZkZTEsIDB4NGEwMWEwMDYsCisJMHgwMTAwMDAwMCwgMHg1OTMwMDQxYSwgMHg0ODAxYTQwNywgMHg1OTMwMDIxYSwKKwkweDQ4MDFhMjA3LCAweDQyMDAwODAwLCAweDAwMDAwMDAyLCAweDQyMDAxMDAwLAorCTB4MDAwMGRjMDAsIDB4MDQwMWYxZDYsIDB4NDgwM2M4NTYsIDB4NGQxYzAwMDAsCisJMHgwNDAxZmRjNSwgMHg0YTAxYTAwNiwgMHgxNDAwMDAwMCwgMHg1OTMyMzgxZSwKKwkweDU5MWMwMDE5LCAweDQ4MDFhMDA1LCAweDU5MzAwNDE5LCAweDQ4MDFhNDA3LAorCTB4NTkzMDAyMTksIDB4NDgwMWEyMDcsIDB4NTkzMDAwMTUsIDB4NDgwMWEwMDgsCisJMHg1OTMwMDIxNiwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4NDAwMDFjMCwKKwkweDQ4MDFhNDA5LCAweDQyMDAwODAwLCAweDAwMDAwMDA0LCAweDQyMDAxMDAwLAorCTB4MDAwMGRjMDAsIDB4NWMwMjM4MDAsIDB4MDQwMWYxYmQsIDB4NDgwM2M4NTYsCisJMHgwNDAxZjgwYiwgMHg1OTMwMDQxYSwgMHg5MDAwMDFjMCwgMHg0ODAxYTAwNSwKKwkweDA0MDFmOWY0LCAweDQxNzgwODAwLCAweDQyMDAxMDAwLCAweDAwMDA1YzAwLAorCTB4MDQwMWY5YjMsIDB4MDIwMWYwMDAsIDB4MDAxMDVkODYsIDB4NDgwM2M4NTYsCisJMHg1OTMwMDgxNywgMHg4MjA0MWMwMCwgMHgwMDAwMDAwNSwgMHg0NjAzNDgwMCwKKwkweDAwMDAwMDIxLCAweDU4MDQwNDA0LCAweDgyMDAwNTAwLCAweDAwMDBmMDAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDMwMDAsIDB4MDQwMDAwMDMsIDB4NDYwMzQ4MDAsCisJMHgwMDAwMDA0MSwgMHg4MWE1YTAwMCwgMHg1ODBjMDAwMSwgMHg4MjAwMGQwMCwKKwkweDAwZmZmZmZmLCAweDgyMDQwZDQwLCAweGMyMDAwMDAwLCAweDQ4MDVhMDAwLAorCTB4NTgwYzA4MDAsIDB4ODIwNDE1MDAsIDB4MDBmZmZmZmYsIDB4ODIwMDA1MDAsCisJMHhmZjAwMDAwMCwgMHg4MDA4MDU0MCwgMHg0ODAxYTAwMSwgMHg1ODBjMDAwMiwKKwkweDgyMDAwNTgwLCAweDAwYzAwMDAwLCAweDgyMDAwNTAwLCAweDAwZmQwMzAwLAorCTB4NDgwMWEwMDIsIDB4NTgwYzAwMDMsIDB4NDgwMWEwMDMsIDB4NTgwYzA0MDQsCisJMHg0ODAxYTQwNCwgMHg1ODBjMDIwNCwgMHg0ODAxYTIwNCwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDU5YTgwMDI2LCAweDgyMDAwNTAwLCAweDAwMDAwMDI4LAorCTB4MDQwMjAwMDksIDB4NTlhODAwMjYsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMjgsCisJMHgwNDAwMDAwMywgMHg0OTdhNmExMiwgMHgwNDAxZjAwMywgMHg0YTAyNmExMiwKKwkweDAwMDBmZjAwLCAweDQyMDA1MDAwLCAweDIyMDAwMDAwLCAweDQyMDA2MDAwLAorCTB4MDEzODAwMDAsIDB4NDE3ODY4MDAsIDB4NDE3ODc4MDAsIDB4MDQwMWY5NTIsCisJMHg1OTMwMTAwOCwgMHg0YTAxYTAwNiwgMHg1NDAwMDAwMCwgMHg1OWE4MDAxMCwKIAkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDU4MDgwYzBhLCAweDgwMDQwOGYwLAotCTB4ODAwNDA1NDAsIDB4NDgwMWEwMDcsIDB4NTgwODA4MGEsIDB4ODIwNDBkMDAsCi0JMHhmZjAwMDAwMCwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKLQkweDgwMDQwNTQwLCAweDQ4MDFhMDA4LCAweDU4MDgwMDBjLCAweDljMDAwMWMwLAotCTB4NDgwMWEwMDksIDB4NTgwODAwMGQsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMGEsCi0JMHg1ODA4MDAwZSwgMHg5YzAwMDFjMCwgMHg0ODAxYTAwYiwgMHg1ODA4MDAwZiwKLQkweDljMDAwMWMwLCAweDQ4MDFhMDBjLCAweDU5YTgwMDAyLCAweDQ4MDFhMDBkLAotCTB4NTlhODAwMDMsIDB4NDgwMWEwMGUsIDB4NTlhODAwMDAsIDB4NDgwMWEwMGYsCi0JMHg1OWE4MDAwMSwgMHg0ODAxYTAxMCwgMHg1ODA4MDAxMCwgMHg0ODAxYTAxMSwKLQkweDU4MDgwMDExLCAweDQ4MDFhMDEyLCAweDU4MDgwMDEyLCAweDQ4MDFhMDEzLAotCTB4NTgwODAwMTMsIDB4NDgwMWEwMTQsIDB4NDk3OWEwMTUsIDB4NDk3OWEwMTYsCi0JMHg0OTc5YTAxNywgMHg0OTc5YTAxOCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxMywKLQkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMGY2LCAweDA0MDFmZDAzLAotCTB4NTkzMDAwMWMsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMDgsIDB4NGEwMWEwMDYsCi0JMHgwMTAwMDAwMCwgMHg0YTAxYTQwNywgMHgwMDAwMDAwMywgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDAyLCAweDA0MDFmMDI4LCAweDRhMDFhMDA2LCAweDAyMDAwMDAwLAotCTB4NDE3ODA4MDAsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMDMsCi0JMHg4NDA0MGQ0MiwgMHgwNDAxZjAwZCwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwKLQkweDA0MDIwMDAzLCAweDg0MDQwZDRhLCAweDA0MDFmMDAyLCAweDg0MDQwZDQ4LAotCTB4NTlhODAwMjYsIDB4OGMwMDA1MDYsIDB4MDQwMjAwMDMsIDB4OGMwMDA1MGEsCi0JMHgwNDAwMDAwMiwgMHg4NDA0MGQ0NiwgMHg0ODA1YTIwNywgMHg1OWM0MDA4NSwKLQkweDQ4MDMxMDA0LCAweDRjNTgwMDAwLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDYsIDB4ODM4OGE0MDAsIDB4MDAwMDAwMDAsCi0JMHg4MmQwYWMwMCwgMHgwMDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywKLQkweDVjMDBhODAwLCAweDVjMDBhMDAwLCAweDVjMDBiMDAwLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDgsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDQwMWYwYzEsCi0JMHgwNDAxZmNjMCwgMHg0YTAxYTAwNiwgMHg1NjAwMDAwMCwgMHg1OTM0MDAwNiwKLQkweDQ4MDFhMDA3LCAweDU5MzQwMDA3LCAweDQ4MDFhMDA4LCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDMsIDB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDQwMWYwYjUsCi0JMHg0ODAzYzg1NiwgMHgwNDAxZmNjMSwgMHg1OTMwMDgxYywgMHg4MDA0MDljMCwKLQkweDA0MDAwMDBlLCAweDgyMDQwNTgwLCAweDAwMDBmZmZmLCAweDA0MDAwMDA0LAotCTB4ODIwNDA0ODAsIDB4MDAwMDAwMDcsIDB4MDQwMjEwMDgsIDB4NGEwMWEwMDYsCi0JMHgwMTAwMDAwMCwgMHg0YTAxYTQwNywgMHgwMDAwMDAwMywgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDAyLCAweDA0MDFmMDEyLCAweDRhMDFhMDA2LCAweDAyMDAwMDFjLAotCTB4NGEwMWEwMDcsIDB4MDAwMDAwMDEsIDB4NDIwMDEwMDAsIDB4MDAxMGI0ZjAsCi0JMHg1MDA4MDAwMCwgMHg5YzAwMDFjMCwgMHg0ODAxYTAwOSwgMHg1OWE4MDAxMCwKLQkweDQ4MDFhMDBhLCAweDU5YTgwMDAyLCAweDU5YTgwODAzLCAweDQ4MDFhMDBiLAotCTB4NDgwNWEwMGMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsIDB4NDIwMDEwMDAsCi0JMHgwMDAwZGMwMCwgMHgwNDAxZjA4ZiwgMHg0ZDJjMDAwMCwgMHgwNDAxZmM4ZCwKLQkweDU5MzI1ODA4LCAweDU5MmMwMDA4LCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAotCTB4NDgwMWEwMDEsIDB4NGEwMWEwMDYsIDB4NTEwMDAwMDAsIDB4NWMwMjU4MDAsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNzM0NCwgMHg0ODAzYzg1NiwgMHg1OWE4MDgxMCwKLQkweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDU5MzI1ODA4LCAweDU5MzI2ODA5LAotCTB4NTlhODMwMjYsIDB4OGMxODM1MGEsIDB4MDQwMjAwMDgsIDB4OGMwMDA1MGUsCi0JMHgwNDAyMDAwNiwgMHg4MDAwMWQ4MCwgMHg1OWE4MjAxMCwgMHg4MjEwMjUwMCwKLQkweDAwMDAwMGZmLCAweDA0MDFmMDAxLCAweDU5MzAwNDA2LCAweDQ4MDNjODU3LAotCTB4ODIwMDBkODAsIDB4MDAwMDAwMDksIDB4MDQwMDAwMDYsIDB4ODIwMDBkODAsCi0JMHgwMDAwMDAwYSwgMHgwNDAwMDAyZSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKLQkweDU5MzAwMDE1LCAweDhjMDAwNTFlLCAweDA0MDIwMDIwLCAweDQyMDA1MDAwLAotCTB4MDQwMDAwMDAsIDB4NDIwMDYwMDAsIDB4MDUwMDAwMDAsIDB4NTkyYzA0MGEsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDAzMCwgMHg4MDAwMDBlMCwgMHg4MDMwNjU0MCwKLQkweDU5MzQwMDBhLCAweDhjMDAwNTA4LCAweDA0MDAwMDAyLCAweDg0MzA2NTQ2LAotCTB4NDE3ODY4MDAsIDB4NDE3ODc4MDAsIDB4MDQwMWY4MzEsIDB4NTkzMDBjMTQsCi0JMHg4MDA0MDAwMCwgMHg0ODAyNjQxNCwgMHg0MDA0MDAwMCwgMHg4MDAwMDBkMCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDIwLCAweDQ4MDFhNDAzLCAweDgzMTgwZDQwLAotCTB4MDAwMDAwMzgsIDB4NDIwMDEwMDAsIDB4MDAwMGM5MjAsIDB4MDQwMWY4NjAsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNjA1MiwgMHg1OWE4MDAyNiwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMDI4LCAweDA0MDAwMDAzLCAweDQ5N2E2YTEyLCAweDA0MDFmN2RjLAotCTB4NGEwMjZhMTIsIDB4MDAwMGZmMDAsIDB4MDQwMWY3ZDksIDB4NDIwMDUwMDAsCi0JMHgwMjAwMDAwMCwgMHg0MjAwNjAwMCwgMHgyMDI5MDAwMCwgMHg0MTc4NjgwMCwKLQkweDQxNzg3ODAwLCAweDA0MDFmODEyLCAweDgzMTgwZDQwLCAweDAwMDAwMDM4LAotCTB4NDIwMDEwMDAsIDB4MDAwMGM5YTAsIDB4MDQwMWY4NDksIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDdkMCwgMHg1OTMwMDAxMSwgMHg4MjAwMDUwMCwgMHhmZmYwMDAwMCwKLQkweDgwMDAwNTQwLCAweDA0MDAwMDAzLCAweDQyMDAwODAwLCAweDAwMDAxYjU4LAotCTB4NDE3ODEwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDYwNTQsIDB4NDIwMWEwMDAsCi0JMHgwMDAwMDAwMCwgMHgwNDAxZjAwMywgMHg0MjAxYTAwMCwgMHgwMDAwMDAxMSwKLQkweDU5MzQwYTEyLCAweDgyMDQwZDAwLCAweDAwMDBmZjAwLCAweDU5YTgwMDEwLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4OTAwMDAxYzAsIDB4ODAwNDA1NDAsCi0JMHg4MGQwMDU0MCwgMHg0NDAzNDgwMCwgMHg4MWE1YTAwMCwgMHg1OTM0MDAwMiwKLQkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDgwMjgwNTQwLCAweDQ4MDFhMDAwLAotCTB4NTlhODAwMTAsIDB4NDgwMWEwMDEsIDB4NDgzMWEwMDIsIDB4ODIzNDA1NDAsCi0JMHgwMDAwMDAwMCwgMHg0ODAxYTAwMywgMHg1OTMwMDQwMiwgMHg0ODAxYTQwNCwKLQkweDU5MzAwYTAyLCAweDQ4MDVhMjA0LCAweDhjMzA2NTJlLCAweDA0MDAwMDAzLAotCTB4NDgwNWE0MDQsIDB4NDgwMWEyMDQsIDB4NDgzZGEwMDUsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg0YzA0MDAwMCwgMHgwNDAxZjgyMiwgMHg1YzAwMDgwMCwKLQkweDQwMDQwMDAwLCAweDgwMDgxNTQwLCAweDgwMDAwMGM0LCAweDgyMDAwNTQwLAotCTB4MDAwMDIwMDAsIDB4NDgwMzkxMGEsIDB4NTliNDAwZjYsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAxOCwgMHgwNDAyMDdmZCwgMHg0YTAzNjhmMCwgMHgwMDEwYjU0NCwKLQkweDRhMDM2OGYxLCAweDAwMTBiNTRiLCAweDQ4MGI2OGYzLCAweDRhMDM3OGU0LAotCTB4MDAwMDgwMDAsIDB4MDIwMWYwMDAsIDB4MDAxMDYwNGQsIDB4NDgwN2M4NTcsCi0JMHg0ODBhMjgwMCwgMHg0YzA0MDAwMCwgMHgwNDAxZjgwYSwgMHg1YzAwMDgwMCwKLQkweDU5YjQwMGY2LCAweDhjMDAwNTBhLCAweDA0MDIwN2ZlLCAweDQ5YTc2OGYyLAotCTB4NDgwNzY4ZjQsIDB4NGEwMzc4ZTQsIDB4MDAwMDgwMDAsIDB4MWMwMWYwMDAsCi0JMHg0YTAzNzhlNCwgMHgwMDAwYzAwMCwgMHg1OWJjMDBlNCwgMHg4YzAwMDUyMCwKLQkweDA0MDAwMDBjLCAweDRhMDM3OGU0LCAweDAwMDA4MDAwLCAweDQyMDA3MDAwLAotCTB4MDAwMDAzZTgsIDB4NTliYzAwZTQsIDB4OGMwMDA1MjAsIDB4MDQwMDA3ZjUsCi0JMHg4MDM4NzA0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZjdmYSwKLQkweDFjMDFmMDAwLCAweDgyMDAwNTAwLCAweGZmZmYwMDAwLCAweDgyMDAwNTgwLAotCTB4MDEwNTAwMDAsIDB4MDQwMjAwMGQsIDB4NTk5YzA4MTgsIDB4OGMwNDBkMTAsCi0JMHgwNDAwMDAwYSwgMHg1OWE4MDgwNywgMHg4YzA0MGQwYSwgMHgwNDAwMDAwNywKLQkweDQyMDAxMDAwLCAweDAwMDA4MDRmLCAweDQxNzgxODAwLCAweDQxNzgyMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDNhM2UsIDB4MWMwMWYwMDAsIDB4NDE3ODEwMDAsCi0JMHg0MjAyNjAwMCwgMHgwMDEwZDFjMCwgMHg1OWE4MTgwZSwgMHg0ODBhNjQwMiwKLQkweDRhMDI2MjAyLCAweDAwMDBmZmZmLCAweDgwMDgxMDAwLCAweDgwMGMxODQwLAotCTB4MDQwMDAwMDQsIDB4ODMzMjY0MDAsIDB4MDAwMDAwMjQsIDB4MDQwMWY3ZjgsCi0JMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDAwLCAweDA0MDAwMDJjLCAweDU5MzAwNDA2LCAweDQ4MDNjODU3LAotCTB4ODIwMDBkODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMTEsIDB4ODIwMDBkODAsCi0JMHgwMDAwMDAwMSwgMHgwNDAwMDAwZSwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMywKLQkweDA0MDAwMDA2LCAweDgyMDAwZDgwLCAweDAwMDAwMDA2LCAweDA0MDIwMDExLAotCTB4MDIwMWY4MDAsIDB4MDAxMGE1ZGYsIDB4NTkzMDAwMWMsIDB4ODAwMDAxYzAsCi0JMHgwMjAyMDgwMCwgMHgwMDEwOTg0ZSwgMHgwNDAxZjAwYSwgMHg1OTMwMDgxZSwKLQkweDQ4MDdjODU3LCAweDgwMDQwOWMwLCAweDA0MDAwMDA2LCAweDU4MDQwMDFjLAotCTB4NDgwM2M4NTcsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMDIsIDB4NDk3ODA4MWMsCi0JMHg0OTdhNjAwOCwgMHg0YTAyNjAwNCwgMHgwMDAwNDAwMCwgMHg1OWE4MDAzNywKLQkweDgyMDAwYzgwLCAweDAwMDAwMDUxLCAweDA0MDAxMDAyLCAweDgwMDAwMTAyLAotCTB4NDgwMjYyMDYsIDB4NDk3YTYyMDUsIDB4NDk3YTYwMDksIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwNywgMHgxYzAxZjAwMCwgMHg4MTY2YzljMCwgMHgwNDAwMDAxYywKLQkweDQxNjI2MDAwLCAweDQxNTgwMDAwLCAweDU5MzAwYTAzLCAweDgyMDQwZDgwLAotCTB4MDAwMDAwMDAsIDB4MDQwMDAwMDgsIDB4ODMzMjY0MDAsIDB4MDAwMDAwMjQsCi0JMHg4MTMwMGM4MCwgMHgwNDAwMTdmOSwgMHg0MjAyNjAwMCwgMHgwMDEwZDFjMCwKLQkweDA0MDFmN2Y2LCAweDQ5MzNjODU3LCAweDgxNjZjODQwLCAweDgzMzAwYzAwLAotCTB4MDAwMDAwMjQsIDB4ODAwNDA0ODAsIDB4MDQwMjEwMDYsIDB4NDAwNmMwMDAsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwOCwgMHg4MTMyNjFjMCwgMHgxYzAxZjAwMCwKLQkweDQyMDJjMDAwLCAweDAwMTBkMWMwLCAweDA0MDFmN2ZhLCAweDQyMDAwMDAwLAotCTB4MDAxMGI4NTQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDkzM2M4NTYsCi0JMHg0MTdhNjAwMCwgMHgwNDAxZjdmNSwgMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwKLQkweDAwMDAwMDEzLCAweDA0MDIwMDBiLCAweDU5MzAwMDA0LCAweDhjMDAwNTNlLAotCTB4MDQwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmJiZiwgMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDU5ODgwMDUyLCAweDgwMDAwMDAwLCAweDQ4MDMxMDUyLAotCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTkzMDAyMDMsIDB4ODIwMDM0ODAsCi0JMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0ZDJjMDAwMCwKLQkweDBjMDFmODAzLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDAwMTA3OTkxLAotCTB4MDAxMDdlZmQsIDB4MDAxMDgwNGEsIDB4MDAxMDc5OTEsIDB4MDAxMDgwYjAsCi0JMHgwMDEwN2FmNSwgMHgwMDEwNzk5MSwgMHgwMDEwNzk5MSwgMHgwMDEwN2U5MywKLQkweDAwMTA3OTkxLCAweDAwMTA3OTkxLCAweDAwMTA3OTkxLCAweDAwMTA3OTkxLAotCTB4MDAxMDc5OTEsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NDkzM2M4NTcsCi0JMHg1OTMwMDIwMywgMHg4MjAwMzQ4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwKLQkweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA3OWE4LCAweDAwMTA4YTNkLAotCTB4MDAxMDc5YTgsIDB4MDAxMDc5YTgsIDB4MDAxMDc5YTgsIDB4MDAxMDc5YTgsCi0JMHgwMDEwNzlhOCwgMHgwMDEwNzlhOCwgMHgwMDEwODllNSwgMHgwMDEwOGE1OCwKLQkweDAwMTA4YWM2LCAweDAwMTA4YTU4LCAweDAwMTA4YWM2LCAweDAwMTA3OWE4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHg1OTMwMDIwMywKLQkweDgyMDAzNDgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4MGMwMWY4MDMsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDc5YzUsCi0JMHgwMDEwNzljNSwgMHgwMDEwNzljNSwgMHgwMDEwNzllMSwgMHgwMDEwN2EyZCwKLQkweDAwMTA3OWM1LCAweDAwMTA3OWM1LCAweDAwMTA3OWM1LCAweDAwMTA3OWM3LAotCTB4MDAxMDc5YzUsIDB4MDAxMDc5YzUsIDB4MDAxMDc5YzUsIDB4MDAxMDc5YzUsCi0JMHgwMDEwNzljNSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywKLQkweDgzMzgwNTgwLCAweDAwMDAwMDQwLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAotCTB4NGEwMjYwMDcsIDB4MDAwODIwMDAsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsCi0JMHg0OTNhNjQwMywgMHg0YTAyNWMwOCwgMHgwMDAwMDAwMSwgMHg1OTJjMDAwZCwKLQkweDQ4MDI2MDExLCAweDQ5N2E2MDEzLCAweDU5MmMwMjA4LCAweDgwMDAwMGMyLAotCTB4ODAwMDEwYzQsIDB4ODAwODE0MDAsIDB4NDgwYTYyMDYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMGY0ZSwgMHg0MjAwMDgwMCwgMHg4MDAwMDA2MCwgMHgwMjAxZjAwMCwKLQkweDAwMTA2NzIxLCAweDQ5MzNjODU3LCAweDgzMzgwNDgwLCAweDAwMDAwMDUwLAotCTB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODMzODA0ODAsIDB4MDAwMDAwNDksCi0JMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwNzlmNCwKLQkweDAwMTA3OWZmLCAweDAwMTA3OWYyLCAweDAwMTA3OWYyLCAweDAwMTA3OWYyLAotCTB4MDAxMDc5ZjIsIDB4MDAxMDdhMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwNCwgMHg0YTAyNWMwOCwgMHgwMDAwMDAwMiwKLQkweDU5MmMwMjA3LCAweDQ4MDI1YzA5LCAweDU5MmMwMjA5LCAweDQ4MDI1YTA3LAotCTB4NTkyYzAwMGMsIDB4NDgwMjU4MGQsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmI4YSwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAwNSwKLQkweDRhMDI1YTA2LCAweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4MDIwMWY4MDAsIDB4MDAxMDZiOGEsCi0JMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywKLQkweDVjMDI3ODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDE0LCAweDQxNzgyODAwLAotCTB4NDIwMDIwMDAsIDB4MDAwMDAwMDIsIDB4NGQ0MDAwMDAsIDB4NGQ0NDAwMDAsCi0JMHg1OTM2OGMwMywgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwKLQkweDAwMTA5ODVlLCAweDVjMDI4ODAwLCAweDVjMDI4MDAwLCAweDQyMDAwMDAwLAotCTB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTAzNywgMHgwMjAwMDAwMCwgMHgwMDAyMDc3ZCwgMHg0YTAyNWEwNiwKLQkweDAwMDAwMDI5LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmMDAwLAotCTB4MDAwMjA3N2QsIDB4NDkzM2M4NTcsIDB4ODMzODA1ODAsIDB4MDAwMDAwNDgsCi0JMHgwNDAwMDAwNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDA1MywgMHgwMjAyMDgwMCwKLQkweDAwMTAwNWQ4LCAweDU5MmMwMjA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDA3LAotCTB4MDQwMDAwMDksIDB4NTkzMDAwMTEsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDYsCi0JMHg1OTJjMDgwYywgMHg4MDA0MDQ4MCwgMHg0ODAyNTgwYywgMHg0YTAyNWEwNiwKLQkweDAwMDAwMDE1LCAweDU5MmMwMjA2LCAweDgwMDAwNTQwLCAweDA0MDIwMDAzLAotCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwKLQkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDA3ZTQsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NDk3YTVhMDYsCi0JMHg1OWM4MDAxNywgMHg4MjAwMDUwMCwgMHgwMDAwZjAwMCwgMHg0ODAyNWMwNywKLQkweDU5YTgwODE2LCAweDgyMDQwYzAwLCAweDAwMDAwMDE4LCAweDQ4MDY1YTA3LAotCTB4NDEyYzc4MDAsIDB4NGQyYzAwMDAsIDB4NDFjY2EwMDAsIDB4NDIwMDI4MDAsCi0JMHgwMDAwMDAwMSwgMHg0MjAwMTAwMCwgMHgwMDAwMDAyYywgMHg4MjA0MDQ4MCwKLQkweDAwMDAwMDJkLCAweDA0MDIxMDA2LCAweDgzMmNhYzAwLCAweDAwMDAwMDA5LAotCTB4MDIwMWY4MDAsIDB4MDAxMDhiOTYsIDB4MDQwMWYwMmUsIDB4NDAwNDMwMDAsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAyYywgMHg4MzJjYWMwMCwgMHgwMDAwMDAwOSwKLQkweDAyMDFmODAwLCAweDAwMTA4Yjk2LCAweDgyMTgzNDgwLCAweDAwMDAwMDJjLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZTQsIDB4MDQwMDAwMWEsIDB4ODAxNDI4MDAsCi0JMHg0YTAyNTgwNCwgMHgwMDAwMDExMCwgMHg0OTJjNzgwMSwgMHg4MjE4MGM4MCwKLQkweDAwMDAwMDNkLCAweDA0MDIxMDA3LCAweDQwMTgwODAwLCAweDgzMmNhYzAwLAotCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDhiOTYsIDB4MDQwMWYwMTUsCi0JMHg4MjA4MTQwMCwgMHgwMDAwMDAzYywgMHg4MjE4MzQ4MCwgMHgwMDAwMDAzYywKLQkweDQyMDAwODAwLCAweDAwMDAwMDNjLCAweDQxMmM3ODAwLCAweDgzMmNhYzAwLAotCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDhiOTYsIDB4MDQwMWY3ZTUsCi0JMHg1YzAyNTgwMCwgMHg1OTJjMDIwNiwgMHg4NDAwMDU1ZSwgMHg0ODAyNWEwNiwKLQkweDU5MmMwNDA3LCAweDgwMDgwNTQwLCAweDQ4MDI1YzA3LCAweDA0MDFmMDAyLAotCTB4NWMwMjU4MDAsIDB4ODEzNjY5YzAsIDB4MDQwMDAwMDMsIDB4NTkzNDM0MDMsCi0JMHgwNDAxZjAwMywgMHg0MjAwMzAwMCwgMHgwMDAwZmZmZiwgMHg0OTMyNTgwOCwKLQkweDQ4MWE1YzA2LCAweDgyMTAwNTgwLCAweDAwMDAwMDU0LCAweDA0MDIwMDAyLAotCTB4NDkxZTU4MTMsIDB4ODQxNDAxYzAsIDB4ODAxMDA1NDAsIDB4NDgwMjU4MDQsCi0JMHg1OTJjMDAwMSwgMHg0OTdhNTgwMSwgMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMmRhLCAweDVjMDI1ODAwLCAweDgxMmU1OWMwLCAweDA0MDIwN2Y5LAotCTB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMjU4MDAsCi0JMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YzVjMDAwMCwgMHg0ZDJjMDAwMCwKLQkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDQxMmNiODAwLAotCTB4NTkyYzA0MGIsIDB4OGMwMDA1MTYsIDB4MDQwMDAwMDMsIDB4NDFjY2EwMDAsCi0JMHgwNDAxZjAwMywgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwgMHg0MDA4YjAwMCwKLQkweDQxNzgxMDAwLCAweDgyNTgwNDgwLCAweDAwMDAwMDEyLCAweDA0MDAxMDA0LAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMTIsIDB4NDAwMDEwMDAsIDB4NGMwODAwMDAsCi0JMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAyMywKLQkweDVjMDAxODAwLCAweDQ5MmMxODAxLCAweDQ4NWE1ODAwLCAweDgzMmNhYzAwLAotCTB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMjgsIDB4NTg1YzA0MGIsCi0JMHg4YzAwMDUwMCwgMHgwNDAwMDAwZSwgMHg4MzJjMTQwMCwgMHgwMDAwMDAwMiwKLQkweDhjMDAwNTE2LCAweDA0MDAwMDAzLCAweDgyMDgxNDAwLCAweDAwMDAwMDA2LAotCTB4NDYwMDEwMDAsIDB4MDAwMDAwMDEsIDB4ODAwODEwMDAsIDB4NDYwMDEwMDAsCi0JMHgwMDAwMDkwMCwgMHg4NDAwMDUwMCwgMHg0ODAwYmMwYiwgMHg1YzAwMTAwMCwKLQkweDgwMDgxMWMwLCAweDA0MDIwN2RhLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMjU4MDAsCi0JMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg1YzAyNTgwMCwgMHg1YzAwMTAwMCwKLQkweDA0MDFmN2Y4LCAweDQ5MzNjODU3LCAweDgzMzgwZDgwLCAweDAwMDAwMDE1LAotCTB4MDQwMjAwMDMsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4ODMzODBkODAsCi0JMHgwMDAwMDAxNiwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzdkLCAweDQ5MzNjODU3LCAweDRkMmMwMDAwLCAweDRjNTAwMDAwLAotCTB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsIDB4NTkzMjU4MDgsIDB4ODNjY2E0MDAsCi0JMHgwMDAwMDAwNiwgMHg1OWNjMTgwNiwgMHg4MjBjMDU4MCwgMHgwMTAwMDAwMCwKLQkweDA0MDIwMDA0LCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDBmLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDgsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg4YzBjMWQwMCwgMHgwNDAwMDAwYiwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDA4LCAweDU5MmU1ODAxLCAweDgxMmU1OWMwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHgwNDAxZjgxNiwgMHg1YzAwYjAwMCwKKwkweDgwMDQwNTQwLCAweDQ4MDFhMDA3LCAweDU4MDgwMDBhLCAweDgyMDAwNTAwLAorCTB4ZmYwMDAwMDAsIDB4NDgwMWEwMDgsIDB4NTlhODAwMDIsIDB4NDgwMWEwMDksCisJMHg1OWE4MDAwMywgMHg0ODAxYTAwYSwgMHg1OWE4MDAwMCwgMHg0ODAxYTAwYiwKKwkweDU5YTgwMDAxLCAweDQ4MDFhMDBjLCAweDU4MDgwMDBjLCAweDljMDAwMWMwLAorCTB4NDgwMWEwMGQsIDB4NTgwODAwMGQsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMGUsCisJMHg1ODA4MDAwZSwgMHg5YzAwMDFjMCwgMHg0ODAxYTAwZiwgMHg1ODA4MDAwZiwKKwkweDljMDAwMWMwLCAweDQ4MDFhMDEwLCAweDU4MDgwMDEwLCAweDljMDAwMWMwLAorCTB4NDgwMWEwMTEsIDB4NTgwODAwMTEsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMTIsCisJMHg1ODA4MDAxMiwgMHg5YzAwMDFjMCwgMHg0ODAxYTAxMywgMHg1ODA4MDAxMywKKwkweDljMDAwMWMwLCAweDQ4MDFhMDE0LCAweDU4MDgwMDEwLCAweDljMDAwMWMwLAorCTB4NDgwMWEwMTUsIDB4NTgwODAwMTEsIDB4OWMwMDAxYzAsIDB4NDgwMWEwMTYsCisJMHg1ODA4MDAxMiwgMHg5YzAwMDFjMCwgMHg0ODAxYTAxNywgMHg1ODA4MDAxMywKKwkweDljMDAwMWMwLCAweDQ4MDFhMDE4LCAweDQyMDAwODAwLCAweDAwMDAwMDEzLAorCTB4NDIwMDEwMDAsIDB4MDAwMGRjMDAsIDB4MDQwMWYxMzUsIDB4NDgwM2M4NTYsCisJMHg0MjAwNTAwMCwgMHgyMjAwMDAwMCwgMHg0MjAwNjAwMCwgMHgwMTI5MDAwMCwKKwkweDQxNzg2ODAwLCAweDQxNzg3ODAwLCAweDA0MDFmOTBiLCAweDU5MzAxMDA4LAorCTB4NGEwMWEwMDYsIDB4NTUwMDAwMDAsIDB4NTgwODAwMGIsIDB4ODIwMDA1MDAsCisJMHgwMGZmZmZmZiwgMHg1ODA4MGMwYSwgMHg4MDA0MDhmMCwgMHg4MDA0MDU0MCwKKwkweDQ4MDFhMDA3LCAweDU4MDgwODBhLCAweDgyMDQwZDAwLCAweGZmMDAwMDAwLAorCTB4NTlhODAwMTAsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4ODAwNDA1NDAsCisJMHg0ODAxYTAwOCwgMHg1ODA4MDAwYywgMHg5YzAwMDFjMCwgMHg0ODAxYTAwOSwKKwkweDU4MDgwMDBkLCAweDljMDAwMWMwLCAweDQ4MDFhMDBhLCAweDU4MDgwMDBlLAorCTB4OWMwMDAxYzAsIDB4NDgwMWEwMGIsIDB4NTgwODAwMGYsIDB4OWMwMDAxYzAsCisJMHg0ODAxYTAwYywgMHg1OWE4MDAwMiwgMHg0ODAxYTAwZCwgMHg1OWE4MDAwMywKKwkweDQ4MDFhMDBlLCAweDU5YTgwMDAwLCAweDQ4MDFhMDBmLCAweDU5YTgwMDAxLAorCTB4NDgwMWEwMTAsIDB4NTgwODAwMTAsIDB4NDgwMWEwMTEsIDB4NTgwODAwMTEsCisJMHg0ODAxYTAxMiwgMHg1ODA4MDAxMiwgMHg0ODAxYTAxMywgMHg1ODA4MDAxMywKKwkweDQ4MDFhMDE0LCAweDQ5NzlhMDE1LCAweDQ5NzlhMDE2LCAweDQ5NzlhMDE3LAorCTB4NDk3OWEwMTgsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTMsIDB4NDIwMDEwMDAsCisJMHgwMDAwZGMwMCwgMHgwNDAxZjBmNiwgMHgwNDAxZmNmYywgMHg1OTMwMDAxYywKKwkweDgwMDAwMWMwLCAweDA0MDAwMDA4LCAweDRhMDFhMDA2LCAweDAxMDAwMDAwLAorCTB4NGEwMWE0MDcsIDB4MDAwMDAwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsCisJMHgwNDAxZjAyOCwgMHg0YTAxYTAwNiwgMHgwMjAwMDAwMCwgMHg0MTc4MDgwMCwKKwkweDgzNmMwNTgwLCAweDAwMDAwMDA0LCAweDA0MDIwMDAzLCAweDg0MDQwZDQyLAorCTB4MDQwMWYwMGQsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4MDQwMjAwMDMsCisJMHg4NDA0MGQ0YSwgMHgwNDAxZjAwMiwgMHg4NDA0MGQ0OCwgMHg1OWE4MDAyNiwKKwkweDhjMDAwNTA2LCAweDA0MDIwMDAzLCAweDhjMDAwNTBhLCAweDA0MDAwMDAyLAorCTB4ODQwNDBkNDYsIDB4NDgwNWEyMDcsIDB4NTljNDAwODUsIDB4NDgwMzEwMDQsCisJMHg0YzU4MDAwMCwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDA2LCAweDgzODhhNDAwLCAweDAwMDAwMDAwLCAweDgyZDBhYzAwLAorCTB4MDAwMDAwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4NWMwMGE4MDAsCisJMHg1YzAwYTAwMCwgMHg1YzAwYjAwMCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwOCwKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMGMxLCAweDA0MDFmY2I5LAorCTB4NGEwMWEwMDYsIDB4NTYwMDAwMDAsIDB4NTkzNDAwMDYsIDB4NDgwMWEwMDcsCisJMHg1OTM0MDAwNywgMHg0ODAxYTAwOCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywKKwkweDQyMDAxMDAwLCAweDAwMDBkYzAwLCAweDA0MDFmMGI1LCAweDQ4MDNjODU2LAorCTB4MDQwMWZjYmEsIDB4NTkzMDA4MWMsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMGUsCisJMHg4MjA0MDU4MCwgMHgwMDAwZmZmZiwgMHgwNDAwMDAwNCwgMHg4MjA0MDQ4MCwKKwkweDAwMDAwMDA3LCAweDA0MDIxMDA4LCAweDRhMDFhMDA2LCAweDAxMDAwMDAwLAorCTB4NGEwMWE0MDcsIDB4MDAwMDAwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDIsCisJMHgwNDAxZjAxMiwgMHg0YTAxYTAwNiwgMHgwMjAwMDAxYywgMHg0YTAxYTAwNywKKwkweDAwMDAwMDAxLCAweDQyMDAxMDAwLCAweDAwMTBiMmVjLCAweDUwMDgwMDAwLAorCTB4OWMwMDAxYzAsIDB4NDgwMWEwMDksIDB4NTlhODAwMTAsIDB4NDgwMWEwMGEsCisJMHg1OWE4MDAwMiwgMHg1OWE4MDgwMywgMHg0ODAxYTAwYiwgMHg0ODA1YTAwYywKKwkweDQyMDAwODAwLCAweDAwMDAwMDA3LCAweDQyMDAxMDAwLCAweDAwMDBkYzAwLAorCTB4MDQwMWYwOGYsIDB4NGQyYzAwMDAsIDB4MDQwMWZjODYsIDB4NTkzMjU4MDgsCisJMHg1OTJjMDAwOCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg0ODAxYTAwMSwKKwkweDRhMDFhMDA2LCAweDUxMDAwMDAwLCAweDVjMDI1ODAwLCAweDAyMDFmMDAwLAorCTB4MDAxMDcwYmMsIDB4NDgwM2M4NTYsIDB4NTlhODA4MTAsIDB4ODIwNDBkMDAsCisJMHgwMDAwMDBmZiwgMHg1OTMyNTgwOCwgMHg1OTMyNjgwOSwgMHg1OWE4MzAyNiwKKwkweDhjMTgzNTBhLCAweDA0MDIwMDA4LCAweDhjMDAwNTBlLCAweDA0MDIwMDA2LAorCTB4ODAwMDFkODAsIDB4NTlhODIwMTAsIDB4ODIxMDI1MDAsIDB4MDAwMDAwZmYsCisJMHgwNDAxZjAwMSwgMHg1OTMwMDQwNiwgMHg0ODAzYzg1NywgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDA5LCAweDA0MDAwMDA2LCAweDgyMDAwZDgwLCAweDAwMDAwMDBhLAorCTB4MDQwMDAwMmUsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMDAwMTUsCisJMHg4YzAwMDUxZSwgMHgwNDAyMDAyMCwgMHg0MjAwNTAwMCwgMHgwNDAwMDAwMCwKKwkweDQyMDA2MDAwLCAweDA1MDAwMDAwLCAweDU5MmMwNDBhLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMzAsIDB4ODAwMDAwZTAsIDB4ODAzMDY1NDAsIDB4NTkzNDAwMGEsCisJMHg4YzAwMDUwOCwgMHgwNDAwMDAwMiwgMHg4NDMwNjU0NiwgMHg0MTc4NjgwMCwKKwkweDQxNzg3ODAwLCAweDA0MDFmODMxLCAweDU5MzAwYzE0LCAweDgwMDQwMDAwLAorCTB4NDgwMjY0MTQsIDB4NDAwNDAwMDAsIDB4ODAwMDAwZDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMDAyMCwgMHg0ODAxYTQwMywgMHg4MzE4MGQ0MCwgMHgwMDAwMDAzOCwKKwkweDQyMDAxMDAwLCAweDAwMDBjOTIwLCAweDA0MDFmODY4LCAweDAyMDFmMDAwLAorCTB4MDAxMDVkOGIsIDB4NTlhODAwMjYsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMjgsCisJMHgwNDAwMDAwMywgMHg0OTdhNmExMiwgMHgwNDAxZjdkYywgMHg0YTAyNmExMiwKKwkweDAwMDBmZjAwLCAweDA0MDFmN2Q5LCAweDQyMDA1MDAwLCAweDAyMDAwMDAwLAorCTB4NDIwMDYwMDAsIDB4MjAyOTAwMDAsIDB4NDE3ODY4MDAsIDB4NDE3ODc4MDAsCisJMHgwNDAxZjgxMiwgMHg4MzE4MGQ0MCwgMHgwMDAwMDAzOCwgMHg0MjAwMTAwMCwKKwkweDAwMDBjOWEwLCAweDA0MDFmODUxLCAweDQyMDAwODAwLCAweDAwMDAwN2QwLAorCTB4NTkzMDAwMTEsIDB4ODIwMDA1MDAsIDB4ZmZmMDAwMDAsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwMWI1OCwgMHg0MTc4MTAwMCwKKwkweDAyMDFmMDAwLCAweDAwMTA1ZDhkLCAweDQyMDFhMDAwLCAweDAwMDAwMDAwLAorCTB4MDQwMWYwMDMsIDB4NDIwMWEwMDAsIDB4MDAwMDAwMTEsIDB4NTkzNDBhMTIsCisJMHg4MjA0MGQwMCwgMHgwMDAwZmYwMCwgMHg1OWE4MDAxMCwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMGZmLCAweDkwMDAwMWMwLCAweDgwMDQwNTQwLCAweDgwZDAwNTQwLAorCTB4NDQwMzQ4MDAsIDB4ODFhNWEwMDAsIDB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsCisJMHgwMGZmZmZmZiwgMHg4MDI4MDU0MCwgMHg0ODAxYTAwMCwgMHg1OWE4MDAxMCwKKwkweDQ4MDFhMDAxLCAweDQ4MzFhMDAyLCAweDgyMzQwNTQwLCAweDAwMDAwMDAwLAorCTB4NDgwMWEwMDMsIDB4NTkzMDA0MDIsIDB4NDgwMWE0MDQsIDB4NTkzMDBhMDIsCisJMHg0ODA1YTIwNCwgMHg4YzMwNjUyZSwgMHgwNDAwMDAwMywgMHg0ODA1YTQwNCwKKwkweDQ4MDFhMjA0LCAweDQ4M2RhMDA1LCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LAorCTB4NGMwNDAwMDAsIDB4MDQwMWY4MmEsIDB4NWMwMDA4MDAsIDB4NDAwNDAwMDAsCisJMHg4MDA4MTU0MCwgMHg4MDAwMDBjNCwgMHg4MjAwMDU0MCwgMHgwMDAwMjAwMCwKKwkweDQ4MDM5MTBhLCAweDU5YjQwMGY2LCAweDgyMDAwNTAwLCAweDAwMDAwMDE4LAorCTB4MDQwMjA3ZmQsIDB4NGEwMzY4ZjAsIDB4MDAxMGIzNDIsIDB4NDIwMDE4MDAsCisJMHgwMDEwYjM0MywgMHg1ODBjMDAwMCwgMHg0ODAzYzg1NywgMHg1ODBjMDAwMiwKKwkweDQ4MDNjODU3LCAweDU4MGMwMDA0LCAweDQ4MDNjODU3LCAweDRhMDM2OGYxLAorCTB4MDAxMGIzNDksIDB4NDgwYjY4ZjMsIDB4NGEwMzc4ZTQsIDB4MDAwMDgwMDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwNWQ4NiwgMHg0ODA3Yzg1NywgMHg0ODBhMjgwMCwKKwkweDRjMDQwMDAwLCAweDA0MDFmODBhLCAweDVjMDAwODAwLCAweDU5YjQwMGY2LAorCTB4OGMwMDA1MGEsIDB4MDQwMjA3ZmUsIDB4NDlhNzY4ZjIsIDB4NDgwNzY4ZjQsCisJMHg0YTAzNzhlNCwgMHgwMDAwODAwMCwgMHgxYzAxZjAwMCwgMHg0YTAzNzhlNCwKKwkweDAwMDBjMDAwLCAweDU5YmMwMGU0LCAweDhjMDAwNTIwLCAweDA0MDAwMDBjLAorCTB4NGEwMzc4ZTQsIDB4MDAwMDgwMDAsIDB4NDIwMDcwMDAsIDB4MDAwMDAzZTgsCisJMHg1OWJjMDBlNCwgMHg4YzAwMDUyMCwgMHgwNDAwMDdmNSwgMHg4MDM4NzA0MCwKKwkweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDA0MDFmN2ZhLCAweDFjMDFmMDAwLAorCTB4ODIwMDA1MDAsIDB4ZmZmZjAwMDAsIDB4ODIwMDA1ODAsIDB4MDEwNTAwMDAsCisJMHgwNDAyMDAwZCwgMHg1OTljMDgxOCwgMHg4YzA0MGQxMCwgMHgwNDAwMDAwYSwKKwkweDU5YTgwODA3LCAweDhjMDQwZDBhLCAweDA0MDAwMDA3LCAweDQyMDAxMDAwLAorCTB4MDAwMDgwNGYsIDB4NDE3ODE4MDAsIDB4NDE3ODIwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMzg1NywgMHgxYzAxZjAwMCwgMHg0MTc4MTAwMCwgMHg0MjAyNjAwMCwKKwkweDAwMTBjZmMwLCAweDU5YTgxODBlLCAweDQ4MGE2NDAyLCAweDRhMDI2MjAyLAorCTB4MDAwMGZmZmYsIDB4ODAwODEwMDAsIDB4ODAwYzE4NDAsIDB4MDQwMDAwMDQsCisJMHg4MzMyNjQwMCwgMHgwMDAwMDAyNCwgMHgwNDAxZjdmOCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLAorCTB4MDQwMDAwMmMsIDB4NTkzMDA0MDYsIDB4NDgwM2M4NTcsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAwNCwgMHgwNDAwMDAxMSwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMSwKKwkweDA0MDAwMDBlLCAweDgyMDAwZDgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA2LAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDYsIDB4MDQwMjAwMTEsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTNmYSwgMHg1OTMwMDAxYywgMHg4MDAwMDFjMCwgMHgwMjAyMDgwMCwKKwkweDAwMTA5NjFhLCAweDA0MDFmMDBhLCAweDU5MzAwODFlLCAweDQ4MDdjODU3LAorCTB4ODAwNDA5YzAsIDB4MDQwMDAwMDYsIDB4NTgwNDAwMWMsIDB4NDgwM2M4NTcsCisJMHg4MTMwMDU4MCwgMHgwNDAyMDAwMiwgMHg0OTc4MDgxYywgMHg0OTdhNjAwOCwKKwkweDRhMDI2MDA0LCAweDAwMDA0MDAwLCAweDU5YTgwMDM3LCAweDgyMDAwYzgwLAorCTB4MDAwMDAwNTEsIDB4MDQwMDEwMDIsIDB4ODAwMDAxMDIsIDB4NDgwMjYyMDYsCisJMHg0OTdhNjIwNSwgMHg0OTdhNjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwNywKKwkweDFjMDFmMDAwLCAweDgxNjZjOWMwLCAweDA0MDAwMDFjLCAweDQxNjI2MDAwLAorCTB4NDE1ODAwMDAsIDB4NTkzMDBhMDMsIDB4ODIwNDBkODAsIDB4MDAwMDAwMDAsCisJMHgwNDAwMDAwOCwgMHg4MzMyNjQwMCwgMHgwMDAwMDAyNCwgMHg4MTMwMGM4MCwKKwkweDA0MDAxN2Y5LCAweDQyMDI2MDAwLCAweDAwMTBjZmMwLCAweDA0MDFmN2Y2LAorCTB4NDkzM2M4NTcsIDB4ODE2NmM4NDAsIDB4ODMzMDBjMDAsIDB4MDAwMDAwMjQsCisJMHg4MDA0MDQ4MCwgMHgwNDAyMTAwNiwgMHg0MDA2YzAwMCwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDA4LCAweDgxMzI2MWMwLCAweDFjMDFmMDAwLCAweDQyMDJjMDAwLAorCTB4MDAxMGNmYzAsIDB4MDQwMWY3ZmEsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NTMsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg0OTMzYzg1NiwgMHg0MTdhNjAwMCwKKwkweDA0MDFmN2Y1LCAweDQ5MzNjODU3LCAweDgzMzgwNTgwLCAweDAwMDAwMDEzLAorCTB4MDQwMjAwMGIsIDB4NTkzMDAwMDQsIDB4OGMwMDA1M2UsIDB4MDQwMDAwMDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywgMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwKKwkweDAyMDFmODAwLCAweDAwMTA2OTgyLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NTk4ODAwNTMsIDB4ODAwMDAwMDAsIDB4NDgwMzEwNTMsIDB4MWMwMWYwMDAsCisJMHg0OTMzYzg1NywgMHg1OTMwMDIwMywgMHg4MjAwMzQ4MCwgMHgwMDAwMDAwZSwKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDRkMmMwMDAwLCAweDBjMDFmODAzLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDc3MTgsIDB4MDAxMDdjODQsCisJMHgwMDEwN2RkNCwgMHgwMDEwNzcxOCwgMHgwMDEwN2UzYSwgMHgwMDEwNzg3YywKKwkweDAwMTA3NzE4LCAweDAwMTA3NzE4LCAweDAwMTA3YzFhLCAweDAwMTA3NzE4LAorCTB4MDAxMDc3MTgsIDB4MDAxMDc3MTgsIDB4MDAxMDc3MTgsIDB4MDAxMDc3MTgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0OTMzYzg1NywgMHg1OTMwMDIwMywKKwkweDgyMDAzNDgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLCAweDAwMTAwNjE1LAorCTB4MGMwMWYwMDEsIDB4MDAxMDc3MmYsIDB4MDAxMDg3ZjAsIDB4MDAxMDc3MmYsCisJMHgwMDEwNzcyZiwgMHgwMDEwNzcyZiwgMHgwMDEwNzcyZiwgMHgwMDEwNzcyZiwKKwkweDAwMTA3NzJmLCAweDAwMTA4NzlhLCAweDAwMTA4ODBjLCAweDAwMTA4ODdhLAorCTB4MDAxMDg4MGMsIDB4MDAxMDg4N2EsIDB4MDAxMDc3MmYsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0OTMzYzg1NywKKwkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDU5MzAwMjAzLCAweDgyMDAzNDgwLAorCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWY4MDMsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHgwMDEwNzc0YywgMHgwMDEwNzc0YywKKwkweDAwMTA3NzRjLCAweDAwMTA3NzY4LCAweDAwMTA3N2I0LCAweDAwMTA3NzRjLAorCTB4MDAxMDc3NGMsIDB4MDAxMDc3NGMsIDB4MDAxMDc3NGUsIDB4MDAxMDc3NGMsCisJMHgwMDEwNzc0YywgMHgwMDEwNzc0YywgMHgwMDEwNzc0YywgMHgwMDEwNzc0YywKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDQ5MzNjODU3LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwNDAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4NGEwMjYwMDcsCisJMHgwMDA4MjAwMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMywgMHg0OTNhNjQwMywKKwkweDRhMDI1YzA4LCAweDAwMDAwMDAxLCAweDU5MmMwMDBkLCAweDQ4MDI2MDExLAorCTB4NDk3YTYwMTMsIDB4NTkyYzAyMDgsIDB4ODAwMDAwYzIsIDB4ODAwMDEwYzQsCisJMHg4MDA4MTQwMCwgMHg0ODBhNjIwNiwgMHgwMjAxZjgwMCwgMHgwMDEwMGY5YywKKwkweDQyMDAwODAwLCAweDgwMDAwMDYwLCAweDAyMDFmMDAwLCAweDAwMTA2NDY2LAorCTB4NDkzM2M4NTcsIDB4ODMzODA0ODAsIDB4MDAwMDAwNTAsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDYxNSwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0OSwgMHgwMjAwMTgwMCwKKwkweDAwMTAwNjE1LCAweDBjMDFmMDAxLCAweDAwMTA3NzdiLCAweDAwMTA3Nzg2LAorCTB4MDAxMDc3NzksIDB4MDAxMDc3NzksIDB4MDAxMDc3NzksIDB4MDAxMDc3NzksCisJMHgwMDEwNzc5MSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDA0LCAweDRhMDI1YzA4LCAweDAwMDAwMDAyLCAweDU5MmMwMjA3LAorCTB4NDgwMjVjMDksIDB4NTkyYzAyMDksIDB4NDgwMjVhMDcsIDB4NTkyYzAwMGMsCisJMHg0ODAyNTgwZCwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjhjMSwKKwkweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDA1LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDhiNCwgMHgwMjAxZjgwMCwgMHgwMDEwNjhjMSwgMHg0ZDNjMDAwMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDVjMDI3ODAwLAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMTQsIDB4NDE3ODI4MDAsIDB4NDIwMDIwMDAsCisJMHgwMDAwMDAwMiwgMHg0ZDQwMDAwMCwgMHg0ZDQ0MDAwMCwgMHg1OTM2OGMwMywKKwkweDQyMDI4MDAwLCAweDAwMDAwMDI5LCAweDAyMDFmODAwLCAweDAwMTA5NjJhLAorCTB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NjMsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwKKwkweDAyMDAwMDAwLCAweDAwMDIwOGI0LCAweDRhMDI1YTA2LCAweDAwMDAwMDI5LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsCisJMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwgMHgwMDAwMDA0OCwgMHgwNDAwMDAwNSwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDUzLCAweDAyMDIwODAwLCAweDAwMTAwNjE1LAorCTB4NTkyYzAyMDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDcsIDB4MDQwMDAwMDksCisJMHg1OTMwMDAxMSwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNiwgMHg1OTJjMDgwYywKKwkweDgwMDQwNDgwLCAweDQ4MDI1ODBjLCAweDRhMDI1YTA2LCAweDAwMDAwMDE1LAorCTB4NTkyYzAyMDYsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDMsIDB4NGEwMjVhMDYsCisJMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwMjAxZjAwMCwKKwkweDAwMDIwOGI0LCAweDQ5MzNjODU3LCAweDRkMmMwMDAwLCAweDRjNTAwMDAwLAorCTB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4MmEsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg0OTdhNWEwNiwgMHg1OWE4MDA2ZSwKKwkweDgyMDAwNTAwLCAweDAwMDBmMDAwLCAweDQ4MDI1YzA3LCAweDU5YTgwODE2LAorCTB4ODIwNDBjMDAsIDB4MDAwMDAwMTgsIDB4NDgwNjVhMDcsIDB4NDEyYzc4MDAsCisJMHg0ZDJjMDAwMCwgMHg0MWNjYTAwMCwgMHg0MjAwMjgwMCwgMHgwMDAwMDAwMSwKKwkweDQyMDAxMDAwLCAweDAwMDAwMDJjLCAweDgyMDQwNDgwLCAweDAwMDAwMDJkLAorCTB4MDQwMjEwMDYsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDksIDB4MDIwMWY4MDAsCisJMHgwMDEwODk0YSwgMHgwNDAxZjAyZSwgMHg0MDA0MzAwMCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDJjLCAweDgzMmNhYzAwLCAweDAwMDAwMDA5LCAweDAyMDFmODAwLAorCTB4MDAxMDg5NGEsIDB4ODIxODM0ODAsIDB4MDAwMDAwMmMsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDgyYSwgMHgwNDAwMDAxYSwgMHg4MDE0MjgwMCwgMHg0YTAyNTgwNCwKKwkweDAwMDAwMTEwLCAweDQ5MmM3ODAxLCAweDgyMTgwYzgwLCAweDAwMDAwMDNkLAorCTB4MDQwMjEwMDcsIDB4NDAxODA4MDAsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsCisJMHgwMjAxZjgwMCwgMHgwMDEwODk0YSwgMHgwNDAxZjAxNSwgMHg4MjA4MTQwMCwKKwkweDAwMDAwMDNjLCAweDgyMTgzNDgwLCAweDAwMDAwMDNjLCAweDQyMDAwODAwLAorCTB4MDAwMDAwM2MsIDB4NDEyYzc4MDAsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsCisJMHgwMjAxZjgwMCwgMHgwMDEwODk0YSwgMHgwNDAxZjdlNSwgMHg1YzAyNTgwMCwKKwkweDU5MmMwMjA2LCAweDg0MDAwNTVlLCAweDQ4MDI1YTA2LCAweDU5MmMwNDA3LAorCTB4ODAwODA1NDAsIDB4NDgwMjVjMDcsIDB4MDQwMWYwMDIsIDB4NWMwMjU4MDAsCisJMHg4MTM2NjljMCwgMHgwNDAwMDAwMywgMHg1OTM0MzQwMywgMHgwNDAxZjAwMywKKwkweDQyMDAzMDAwLCAweDAwMDBmZmZmLCAweDQ5MzI1ODA4LCAweDQ4MWE1YzA2LAorCTB4ODIxMDA1ODAsIDB4MDAwMDAwNTQsIDB4MDQwMjAwMDIsIDB4NDkxZTU4MTMsCisJMHg4NDE0MDFjMCwgMHg4MDEwMDU0MCwgMHg0ODAyNTgwNCwgMHg1OTJjMDAwMSwKKwkweDQ5N2E1ODAxLCAweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMzgxLAorCTB4NWMwMjU4MDAsIDB4ODEyZTU5YzAsIDB4MDQwMjA3ZjksIDB4NWMwMGIwMDAsCiAJMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRjNTgwMDAwLAotCTB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsIDB4NTkzMGE4MDgsIDB4ODI1NGFjMDAsCi0JMHgwMDAwMDAwNSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwKLQkweDAwMTBhYjE3LCAweDVjMDBiMDAwLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLAotCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDIwMDAwMDAsCi0JMHgwMDAyMDc3ZCwgMHg0ZDJjMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywKLQkweDA0MDIwMDBiLCAweDQxNzgwODAwLCAweDRkNDAwMDAwLCAweDQyMDI4MDAwLAotCTB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk0M2IsIDB4NWMwMjgwMDAsCi0JMHg1YzAyNTgwMCwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg1OTMxZDgyMSwKLQkweDU4ZWY0MDBiLCAweDU4ZWU1ODBkLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAotCTB4NThlYzAwMDksIDB4MDgwMWY4MDAsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHg0OTMzYzg1NywgMHg1OWNjMTgwNiwgMHg4MjBjMDU4MCwKLQkweDAyMDAwMDAwLCAweDA0MDIwMDE0LCAweDRhMDI2ODAyLCAweDAwZmZmZmZkLAotCTB4NTkzNDAwMGEsIDB4ODQwMDA1MDQsIDB4NDgwMjY4MGEsIDB4NTkzMDA4MDgsCi0JMHg4MDA0MDljMCwgMHgwMjAwMDAwMCwgMHgwMDAyMDc3ZCwgMHg0YTAwMGEwNCwKLQkweDAwMDAwMTAzLCAweDQ4MGMwODA1LCAweDU5MzFkODIxLCAweDU4ZWY0MDBiLAotCTB4NThlZTU4MGQsIDB4NThlYzAwMDksIDB4MDgwMWY4MDAsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2YywgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDRjMGMwMDAwLCAweDA0MDFmODA0LCAweDVjMDAxODAwLAotCTB4MDQwMjA3ZWIsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsCi0JMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwgMHgwNDAyMDAwOSwgMHg0OTdhNjIwNiwKLQkweDQ5N2E2MjA1LCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLCAweDAwMDAwMDIyLAotCTB4MDQwMWZiNzcsIDB4NWMwMjcwMDAsIDB4ODAwMDA1ODAsIDB4NWMwMjU4MDAsCi0JMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwgMHg0YzUwMDAwMCwKLQkweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDU5MzI1ODA4LCAweDU5MmU1ODAxLAotCTB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsCi0JMHg1OWM4MDgxNywgMHg4MjA0MGQwMCwgMHgwMDAwMDNmZiwgMHg4MjA0MTQ4MCwKLQkweDAwMDAwMDBmLCAweDA0MDAxMDFiLCAweDQyMDBiMDAwLCAweDAwMDAwMDBmLAotCTB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NTkyZTU4MDEsIDB4ODMyY2FjMDAsCi0JMHgwMDAwMDAwNSwgMHg4MjA4MGM4MCwgMHgwMDAwMDAwZiwgMHgwNDAwMTAwZCwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDBmLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LAotCTB4NTkyZTU4MDEsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsIDB4ODIwNDE0ODAsCi0JMHgwMDAwMDAwZiwgMHgwNDAwMTAwNywgMHg0MjAwMTAwMCwgMHgwMDAwMDAwZiwKLQkweDQwMDhiMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDA0MDFmMDA0LAotCTB4NDAwNGIwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMTcsIDB4NTkzMWQ4MjEsCi0JMHg1OGVmNDAwYiwgMHg1OGVlNTgwZCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywKLQkweDU5MmU1ODAxLCAweDU4ZWMwMDA5LCAweDA4MDFmODAwLCAweDAyMDFmODAwLAotCTB4MDAwMjA3N2QsIDB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsCi0JMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwKLQkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDU5Y2MwMDA2LAotCTB4ODIwMDBkODAsIDB4MDEwMDAwMDAsIDB4MDQwMDAwMmMsIDB4NTljYzAwMDcsCi0JMHg5MDAwYjFjMCwgMHg4MjU4YjUwMCwgMHgwMDAwMDBmZiwgMHg4MDU4YjEwNCwKLQkweDgyNThiNDAwLCAweDAwMDAwMDAyLCAweDgyNTgwYzgwLCAweDAwMDAwMDA3LAotCTB4MDQwMDEwMDMsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDYsIDB4ODNjY2E0MDAsCi0JMHgwMDAwMDAwNiwgMHg1OTMwMTAwOCwgMHg4MDA4MTFjMCwgMHgwMjAwMDgwMCwKLQkweDAwMTAwNWQ4LCAweDgyMDhhYzAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLAotCTB4MDAxMGFiMTcsIDB4ODIwMDBkMDAsIDB4ZmYwMDAwMDAsIDB4ODAwNDA5YzAsCi0JMHgwNDAwMDAxOSwgMHg4MjAwYjUwMCwgMHgwMDAwMDBmZiwgMHg4MDU4YjEwNCwKLQkweDgyNTgwYzgwLCAweDAwMDAwMDBlLCAweDA0MDAxMDAzLCAweDQyMDBiMDAwLAotCTB4MDAwMDAwMGQsIDB4NTgwODEwMDEsIDB4ODAwODExYzAsIDB4MDIwMDA4MDAsCi0JMHgwMDEwMDVkOCwgMHg4MjA4YWMwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYjE3LCAweDA0MDFmMDA4LCAweDU5MzAxMDA4LCAweDgwMDgxMWMwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwMDEwMDUsIDB4NTljYzAwMDcsCi0JMHg0ODAwMTAwNiwgMHgwNDAxZmYzYiwgMHg1YzAwYjAwMCwgMHg1YzAwYTgwMCwKKwkweDQ4MDNjODU2LCAweDRjNWMwMDAwLCAweDRkMmMwMDAwLCAweDRjNTAwMDAwLAorCTB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsIDB4NDEyY2I4MDAsIDB4NTkyYzA0MGIsCisJMHg4YzAwMDUxNiwgMHgwNDAwMDAwMywgMHg0MWNjYTAwMCwgMHgwNDAxZjAwMywKKwkweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDQwMDhiMDAwLCAweDQxNzgxMDAwLAorCTB4ODI1ODA0ODAsIDB4MDAwMDAwMTIsIDB4MDQwMDEwMDQsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAxMiwgMHg0MDAwMTAwMCwgMHg0YzA4MDAwMCwgMHg0ZDJjMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAwODJhLCAweDA0MDAwMDIzLCAweDVjMDAxODAwLAorCTB4NDkyYzE4MDEsIDB4NDg1YTU4MDAsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTk0ZiwgMHg1ODVjMDQwYiwgMHg4YzAwMDUwMCwKKwkweDA0MDAwMDBlLCAweDgzMmMxNDAwLCAweDAwMDAwMDAyLCAweDhjMDAwNTE2LAorCTB4MDQwMDAwMDMsIDB4ODIwODE0MDAsIDB4MDAwMDAwMDYsIDB4NDYwMDEwMDAsCisJMHgwMDAwMDAwMSwgMHg4MDA4MTAwMCwgMHg0NjAwMTAwMCwgMHgwMDAwMDkwMCwKKwkweDg0MDAwNTAwLCAweDQ4MDBiYzBiLCAweDVjMDAxMDAwLCAweDgwMDgxMWMwLAorCTB4MDQwMjA3ZGEsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMGIwMDAsCisJMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHg1YzAyNTgwMCwgMHg1YzAwYjgwMCwKKwkweDFjMDFmMDAwLCAweDVjMDI1ODAwLCAweDVjMDAxMDAwLCAweDA0MDFmN2Y4LAorCTB4NDkzM2M4NTcsIDB4ODMzODBkODAsIDB4MDAwMDAwMTUsIDB4MDQwMjAwMDMsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHg4MzM4MGQ4MCwgMHgwMDAwMDAxNiwKKwkweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LAorCTB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsCisJMHg0YzU4MDAwMCwgMHg1OTMyNTgwOCwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwKKwkweDU5Y2MxODA2LCAweDgyMGMwNTgwLCAweDAxMDAwMDAwLCAweDA0MDIwMDA0LAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWYwMGYsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwOCwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhOTNlLCAweDhjMGMxZDAwLCAweDA0MDAwMDBiLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDgsIDB4NTkyZTU4MDEsIDB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKKwkweDAwMTBhOTNlLCAweDA0MDFmODE2LCAweDVjMDBiMDAwLCAweDVjMDBhODAwLAogCTB4NWMwMGEwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMCwgMHg1OWNjMDAwNiwgMHg4MjAwMDU4MCwKLQkweDAyMDAwMDAwLCAweDA0MDAwMDAzLCAweDQyMDAwODAwLCAweDAwMDAwMDAxLAotCTB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsCi0JMHgwMDEwMDVkOCwgMHg0ODA2NWEwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwKLQkweDVjMDI1ODAwLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ5MzNjODU3LAotCTB4NGQyYzAwMDAsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg1OWNjMDgwNiwgMHg4MjA0MDU4MCwKLQkweDAxMDAwMDAwLCAweDA0MDAwMDA0LCAweDgyMDRiNTAwLCAweDAwMDBmZmZmLAotCTB4ODA1OGIxMDQsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsIDB4NTkzMDAwMDgsCi0JMHg4MjAwYWMwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywKLQkweDA0MDFmZjBjLCAweDVjMDBiMDAwLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NDgwM2M4NTcsCi0JMHg0ODA3Yzg1NywgMHg0ODBiYzg1NywgMHg0ODBmYzg1NywgMHg0ODEzYzg1NywKLQkweDQ4MWJjODU3LCAweDQ5MmZjODU3LCAweDRkMmMwMDAwLCAweDRjMDAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZDMsIDB4NWMwMDAwMDAsIDB4MDQwMDAwMGYsCi0JMHg0ODAyNTgwMywgMHg1YzAwMDAwMCwgMHg0ODAyNTgwYSwgMHg0YzAwMDAwMCwKLQkweDQ4MWE1ODAxLCAweDQ4MTI1ODA5LCAweDQ4MDY1ODA0LCAweDQ4MGE1ODA3LAotCTB4NDgwZTU4MDgsIDB4NDEyYzEwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4NTgsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDRkMWMwMDAwLCAweDU5Y2MwMDAxLCAweDgyMDAwNTAwLAotCTB4MDBmZmZmZmYsIDB4NTkzNDEwMDIsIDB4ODIwODE1MDAsIDB4MDBmZmZmZmYsCi0JMHg4MDA4MDU4MCwgMHgwNDAyMDAxZiwgMHg0OTdhNjIwNSwgMHg0ZDM4MDAwMCwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDM1LCAweDAyMDFmODAwLCAweDAwMTA5M2JhLAotCTB4NWMwMjcwMDAsIDB4MDQwMjAwMTIsIDB4NTkxYzAwMWMsIDB4ODAwMDAxYzAsCi0JMHgwNDAwMDAwZiwgMHg0OTdhMzgxYywgMHg1OTFjMDQxNCwgMHg4YzAwMDUwMiwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDg0MDAwNTAyLCAweDQ4MDIzYzE0LAotCTB4NTkxYzE0MDYsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDYsCi0JMHg4MjA4MDU4MCwgMHgwMDAwMDAwNiwgMHgwNDAwMDAwNSwgMHgwNDAxZmM5ZSwKLQkweDA0MDFmMDA0LCAweDA0MDFmODA1LCAweDA0MDFmMDAyLCAweDA0MDFmOGMwLAotCTB4NWMwMjM4MDAsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NTkxZTU4MDgsCi0JMHg0OTMzYzg1NywgMHg0OTFmYzg1NywgMHg0OTNiYzg1NywgMHg0OTJmYzg1NywKLQkweDgzMzgwNTgwLCAweDAwMDAwMDE1LCAweDA0MDAwMGIzLCAweDgzMzgwNTgwLAotCTB4MDAwMDAwMTYsIDB4MDQwMjAwYWUsIDB4NGQzMDAwMDAsIDB4NDExZTYwMDAsCi0JMHg1OWNjMDIwNywgMHg0ODAzYzg1NywgMHg4MjAwMGQwMCwgMHgwMDAwZmYwMCwKLQkweDgyMDQwNTgwLCAweDAwMDAxNzAwLCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLAotCTB4MDAwMDAzMDAsIDB4MDQwMjAwNWIsIDB4NTkxYzAyMDMsIDB4NDgwM2M4NTcsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwZCwgMHgwNDAwMDAzZiwgMHg4MTJlNTljMCwKLQkweDA0MDAwMDlhLCAweDU5MWMwMjAyLCAweDQ4MDNjODU3LCAweDgyMDAwNTgwLAotCTB4MDAwMGZmZmYsIDB4MDQwMjAwN2UsIDB4NTkyYzAyMGEsIDB4NDgwM2M4NTcsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDAwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwKLQkweDA0MDIwMDA3LCAweDU5MmMwODBmLCAweDU5MWMwMDExLCAweDQ4MDNjODU3LAotCTB4NDgwN2M4NTcsIDB4ODAwNDA1ODAsIDB4MDQwMjAwNzEsIDB4NTkxYzA0MTQsCi0JMHg0ODAzYzg1NywgMHg4YzAwMDUwMCwgMHgwNDAyMDA2ZCwgMHg0MTc4MDgwMCwKLQkweDU5MWMxMjA2LCAweDQyMDAwMDAwLCAweDAwMDAwMDBhLCAweDAyMDFmODAwLAotCTB4MDAxMDY2YTAsIDB4NTkyYzA0MDYsIDB4NDgwM2M4NTcsIDB4ODAwMDAxYzAsCi0JMHgwNDAwMDAwYywgMHg4MDA4MGM4MCwgMHgwNDAwMTAwNCwgMHgwMjAyMDgwMCwKLQkweDAwMTAwNWQ4LCAweDgwMDAxMDQwLCAweDQ4MGE1YzA2LCAweDgwMDgxMWMwLAotCTB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDhkODgsIDB4MDQwMWYwNmIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTEyYSwgMHg1OTFjMDgxNywgMHg1OTFjMDAxOCwKLQkweDQ4MDY1ODA4LCAweDQ4MDI1ODA5LCAweDU5MzAwMDA3LCAweDhjMDAwNTAwLAotCTB4MDIwMjA4MDAsIDB4MDAxMDBlOTksIDB4NDk3YTM4MDgsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDFiYSwgMHgwNDAyMDA0YSwgMHg0MTFlNjAwMCwgMHgwNDAxZmMzZSwKLQkweDA0MDFmMDVhLCAweDA0MDFmYzZkLCAweDA0MDAwMDEzLCAweDQ5MzY2MDA5LAotCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDMsIDB4NDkyZTYwMDgsIDB4NTkxYzA4MTcsCi0JMHg1OTFjMTAxOCwgMHg0ODA2NjAxNywgMHg0ODBhNjAxOCwgMHg0ZDM4MDAwMCwKLQkweDU5MWU3NDAzLCAweDRkMzAwMDAwLCAweDQxMWU2MDAwLCAweDA0MDFmYzJlLAotCTB4NWMwMjYwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsCi0JMHgwNDAxZjA0NiwgMHg1OWE4MDAzOSwgMHg0ODAyM2EwNSwgMHgwNDAxZjA0MywKLQkweDU5Y2MwNDA3LCAweDgyMDAwNTgwLCAweDAwMDAwMDBiLCAweDA0MDIwMDI1LAotCTB4NTkzNDBhMDAsIDB4ODQwNDBkMGUsIDB4NDgwNjZhMDAsIDB4NTkyYzBhMDQsCi0JMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwgMHg4MjA0MGQ4MCwgMHgwMDAwMDAxNCwKLQkweDA0MDAwMDAzLCAweDRhMDI2MjFkLCAweDAwMDAwMDAzLCAweDU5MzAwMDA3LAotCTB4OGMwMDA1MDAsIDB4MDIwMjA4MDAsIDB4MDAxMDBlOTksIDB4NGQ0MDAwMDAsCi0JMHg0MjAyODAwMCwgMHgwMDAwMDAwMywgMHg1OTJjMGEwOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0ZTcwLCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDVjMDI4MDAwLAotCTB4NDk3YTYwMDgsIDB4NGEwMjY0MDMsIDB4MDAwMDAwODUsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwKLQkweDgwMDA0MDRiLCAweDAyMDFmODAwLCAweDAwMDIwNzIxLCAweDA0MDFmMDFiLAotCTB4NTljYzAyMDcsIDB4ODIwMDA1ODAsIDB4MDAwMDJhMDAsIDB4MDQwMjAwMDQsCi0JMHg1OWE4MDAzOSwgMHg0ODAyM2EwNSwgMHgwNDAxZjAxNCwgMHg4MTJlNTljMCwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAotCTB4NTkxYzAwMDcsIDB4OGMwMDA1MDAsIDB4MDIwMjA4MDAsIDB4MDAxMDBlOTksCi0JMHg1OTFjMDQwMiwgMHg0ODAyNWMwNiwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMywKLQkweDAyMDFmODAwLCAweDAwMDIwMmMxLCAweDAyMDFmODAwLCAweDAwMTA3OTExLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ5YjIsIDB4NWMwMjYwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDc3ZCwgMHgwNDAxZjAwMiwgMHg1YzAyNjAwMCwgMHg1YzAyNTgwMCwKLQkweDFjMDFmMDAwLCAweDA0MDFmODE5LCAweDA0MDFmN2ZkLCAweDQ5MzNjODU3LAotCTB4ODMzODA1ODAsIDB4MDAwMDAwMTUsIDB4MDQwMjAwMDQsIDB4NTlhODAwMzksCi0JMHg0ODAyM2EwNSwgMHgwNDAxZjAwZCwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNiwKLQkweDA0MDIwMDBkLCAweDRkMzAwMDAwLCAweDQxMWU2MDAwLCAweDAyMDFmODAwLAotCTB4MDAxMGE1ZGYsIDB4MDIwMWY4MDAsIDB4MDAwMjA2ZmQsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDc3ZCwgMHg1YzAyNjAwMCwgMHg0OTdhMzgxYywgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzdkLCAweDFjMDFmMDAwLCAweDU5MWMwNDE0LCAweDg0MDAwNTQwLAotCTB4NDgwMjNjMTQsIDB4NTljYzEwMGIsIDB4NDkzM2M4NTcsIDB4NDkxZmM4NTcsCi0JMHg0OTJmYzg1NywgMHg0ODAzYzg1NywgMHg0ODBiYzg1NywgMHg4YzA4MTUzYywKLQkweDA0MDAwMDA2LCAweDU5YTgwMDM5LCAweDQ4MDIzYTA1LCAweDQ5N2EzODFjLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NGQzMDAwMDAsIDB4NDExZTYwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOGJkNywgMHg1YzAyNjAwMCwgMHg1OTFjMDQwNiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDAwLCAweDAyMDAwMDAwLCAweDAwMDIwNzdkLAotCTB4NTkxYzA0MDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNTAsIDB4MDQwMjAwMGQsCi0JMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwKLQkweDQyMDAwODAwLCAweDgwMDAwMDQzLCAweDAyMDFmODAwLCAweDAwMDIwNzIxLAotCTB4NWMwMjYwMDAsIDB4NDk3YTM4MWMsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCi0JMHg1OTFjMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwZCwgMHgwNDAwMDAxNCwKLQkweDgxMmU1OWMwLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU5MWMwMjAzLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMTEsIDB4NTkyYzAyMGEsCi0JMHg4YzAwMDUwMiwgMHgwNDAwMDAwZSwgMHg0YTAyMzgxMiwgMHgwZmZmZmZmZiwKLQkweDU5MmMwMjA4LCAweDg0MDAwNTFlLCAweDQ4MDI1YTA4LCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMDEsIDB4NDgwMjNhMTQsIDB4MDQwMWYwMjEsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAwNywgMHg0ODAyM2ExNCwgMHgwNDAxZjAxZCwgMHg1OTJjMDIwYSwKLQkweDQ4MDNjODU3LCAweDhjMDAwNTAwLCAweDA0MDIwMDBiLCAweDhjMDAwNTAyLAotCTB4MDQwMDA3ZjcsIDB4NTkxYzA0MTQsIDB4OGMwMDA1MWMsIDB4MDQwMjA3ZWIsCi0JMHg1OTFjMDAxMSwgMHg0ODAzYzg1NywgMHg4MDAwMDFjMCwgMHgwNDAwMDdmMCwKLQkweDA0MDFmN2U2LCAweDhjMDgxNTNhLCAweDA0MDIwN2VkLCAweDU5Y2MwMDBhLAotCTB4NTkyYzE4MGYsIDB4NDgwM2M4NTcsIDB4NDgwZmM4NTcsIDB4ODAwYzA1ODAsCi0JMHgwNDAwMDdlNywgMHg1OWNjMDAwYSwgMHg0ODAzYzg1NywgMHg0ODAyMzgxNiwKLQkweDQyMDAwMDAwLCAweDAwMDAwMDA1LCAweDQ4MDIzYTE0LCAweDAyMDFmMDAwLAotCTB4MDAxMDkyNTksIDB4NDkzM2M4NTcsIDB4NGQxYzAwMDAsIDB4NTljYzAwMDEsCi0JMHg1OTM0MTAwMiwgMHg4MDA4MDU4MCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKLQkweDA0MDIwMDQxLCAweDU5MzAxNDE5LCAweDAyMDFmODAwLCAweDAwMTA5NDEwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkxYzE0MDYsIDB4ODIwODA1ODAsCi0JMHgwMDAwMDAwNywgMHgwNDAwMDAzOCwgMHg4MjA4MDU4MCwgMHgwMDAwMDAwMiwKLQkweDA0MDAwMDM1LCAweDgyMDgwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDMyLAotCTB4NTkxYzAyMDIsIDB4ODIwMDBkODAsIDB4MDAwMGZmZmYsIDB4MDQwMDAwMDQsCi0JMHg1OTMwMWExOSwgMHg4MDBjMDU4MCwgMHgwNDAyMDAyYiwgMHg4MzM4MDU4MCwKLQkweDAwMDAwMDE1LCAweDA0MDAwMDI2LCAweDRkMzAwMDAwLCAweDRkMmMwMDAwLAotCTB4NDExZTYwMDAsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCi0JMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1OTJjMDIwNCwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMGZmLCAweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDAwMDAzLAotCTB4NGEwMjYyMWQsIDB4MDAwMDAwMDMsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDMsCi0JMHg1OTJjMGEwOCwgMHgwMjAxZjgwMCwgMHgwMDEwNGU3MCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMmRhLCAweDVjMDI1ODAwLCAweDQ5N2E2MDA4LCAweDRhMDI2NDAzLAotCTB4MDAwMDAwODUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwgMHg4MDAwNDA0YiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzIxLCAweDVjMDI2MDAwLCAweDA0MDFmMDAzLCAweDU5YTgwMDM5LAotCTB4NDgwMjNhMDUsIDB4NDk3YTM4MWMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsCi0JMHg1YzAyMzgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0YzU4MDAwMCwKLQkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDgzMzgzNTgwLCAweDAwMDAwMDE1LAotCTB4MDQwMDAwMTAsIDB4NTkzNDIyMDAsIDB4ODQxMDI1MDIsIDB4NDgxMjZhMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDA2NiwgMHgwMjAxZjgwMCwKLQkweDAwMTA5NTk3LCAweDA0MDIwMDA1LCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAotCTB4MDIwMWY4MDAsIDB4MDAxMDk1N2QsIDB4MDQwMWZhMGEsIDB4MDQwMWYwNzksCi0JMHg4M2NjMTQwMCwgMHgwMDAwMDAwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKLQkweDgzMzQxYzAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA4NTVhLAotCTB4MDQwMjAwMTUsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMGEsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwMiwgMHg4MzM0MWMwMCwgMHgwMDAwMDAwOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA4NTVhLCAweDA0MDIwMDBjLCAweDAyMDFmODAwLCAweDAwMTAyMDc0LAotCTB4NTkzNDIyMDAsIDB4NTljYzEwMDcsIDB4ODAwODExYzAsIDB4MDQwMDAwMDMsCi0JMHg0ODBhNjgwMSwgMHg4NDEwMjU0MiwgMHg4NDEwMjUxYSwgMHg0ODEyNmEwMCwKLQkweDA0MDFmMDVmLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg1OTM0MDIwMCwgMHg4NDAwMDU1OCwKLQkweDQ4MDI2YTAwLCAweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NDkzNjYwMDksIDB4NDk3YTYwMDgsCi0JMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMSwKLQkweDQyMDAzMDAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTBhOTQyLAotCTB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsIDB4MDQwMDAwMTEsIDB4NDE3ODI4MDAsCi0JMHg0MjAwMzAwMCwgMHgwMDAwMDAwMSwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKLQkweDAwMDAwMDI5LCAweDAyMDFmODAwLCAweDAwMTBhNDNlLCAweDVjMDI4MDAwLAotCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDQsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsCi0JMHg0YTAyNjQyMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwOSwgMHg0YTAyNjIwMywKLQkweDAwMDAwMDAxLCAweDQyMDAwODAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLAotCTB4MDAxMDQ1NzEsIDB4MDIwMWY4MDAsIDB4MDAxMDY3MmIsIDB4NWMwMjYwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAyMiwgMHgwMjAxZjgwMCwKLQkweDAwMTA5NTk3LCAweDA0MDIwMDIyLCAweDA0MDFmOWFlLCAweDA0MDFmMDFkLAotCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKLQkweDU5MzQwMjAwLCAweDg0MDAwNTU4LCAweDQ4MDI2YTAwLCAweDQyMDAzMDAwLAotCTB4MDAwMDAwMDMsIDB4NDE3ODI4MDAsIDB4NDIwMDIwMDAsIDB4MDAwMDAwMDUsCi0JMHg0ZDQwMDAwMCwgMHg0ZDQ0MDAwMCwgMHg1OTM2OGMwMywgMHg0MjAyODAwMCwKLQkweDAwMDAwMDI5LCAweDAyMDFmODAwLCAweDAwMTA5ODVlLCAweDVjMDI4ODAwLAotCTB4NWMwMjgwMDAsIDB4NWMwMjc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHgwNDAxZjAwMiwgMHgwNDAxZmNhOSwKLQkweDVjMDI1ODAwLCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAotCTB4NDEzODAwMDAsIDB4ODMzODM0ODAsIDB4MDAwMDAwNTYsIDB4MDIwMjE4MDAsCi0JMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwN2VmNywgMHgwMDEwN2VmMiwKLQkweDAwMTA3ZWY3LCAweDAwMTA3ZWY3LCAweDAwMTA3ZWY3LCAweDAwMTA3ZWY3LAotCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsCi0JMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwKLQkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLAotCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsCi0JMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwKLQkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLAotCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjcsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjcsCi0JMHgwMDEwN2VmNywgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwKLQkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWY3LCAweDAwMTA3ZWYwLAotCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsCi0JMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwKLQkweDAwMTA3ZWY3LCAweDAwMTA3ZWY3LCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLAotCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsCi0JMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmNywKLQkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWY3LCAweDAwMTA3ZWY3LAotCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjcsIDB4MDAxMDdlZjcsIDB4MDAxMDdlZjAsCi0JMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmNywKLQkweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWYwLCAweDAwMTA3ZWY3LAotCTB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjAsIDB4MDAxMDdlZjcsCi0JMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmMCwgMHgwMDEwN2VmNywKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAotCTB4NDkzYTY0MDMsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4NDkzM2M4NTcsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0OTNhNjQwMywgMHgwMjAxZjAwMCwKLQkweDAwMTA2NzJiLCAweDQ5MzNjODU3LCAweDU5MzAwNDAzLCAweDgyMDAzNDgwLAotCTB4MDAwMDAwNTYsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODMzODM1ODAsCi0JMHgwMDAwMDAxMywgMHgwNDAwMDA5MywgMHg4MzM4MzU4MCwgMHgwMDAwMDAyNywKLQkweDA0MDIwMDRiLCAweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDAyMDFmODAwLAotCTB4MDAxMDkxMzQsIDB4MDQwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDkxNGUsCi0JMHgwNDAwMDA0MSwgMHg1OTMwMDQwMywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAyMiwKLQkweDA0MDIwMDM4LCAweDA0MDFmYzYxLCAweDA0MDAwMDNhLCAweDA0MDFmMDNhLAotCTB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwNDAxZjhmZSwgMHg0ZDQ0MDAwMCwKLQkweDU5MzY4YzAzLCAweDgzNDQwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwMDA4LAotCTB4NTlhODEwMjYsIDB4ODQwODE1NDAsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsCi0JMHgwNDAyMDAwMiwgMHg4NDA4MTU0YSwgMHg0ODBiNTAyNiwgMHg0MjAyODAwMCwKLQkweDAwMDAwMDI5LCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCi0JMHgwNDAwMDAwYywgMHg1OTMyNjgwOSwgMHg1OTM0MDAwOCwgMHg4MDAwMDFjMCwKLQkweDA0MDIwMDA4LCAweDU5MzY4YzAzLCAweDQ5MzNjODU3LCAweDQ5MzdjODU3LAotCTB4NDk0N2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1ZmIsIDB4MDQwMWYwMGMsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKLQkweDQyMDAzMDAwLCAweDAwMDAwMDE1LCAweDQxNzgyODAwLCAweDQyMDAyMDAwLAotCTB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTMyNiwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwKLQkweDFjMDFmMDAwLCAweDA0MDFmOGNiLCAweDA0MDFmN2ZhLCAweDgzMzgwNTgwLAotCTB4MDAwMDAwMTQsIDB4MDQwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDZmNjAsCi0JMHgwMjAyMDAwMCwgMHgwMDEwNzk3NCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDAyLCAweDA0MDAwMGVkLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0MjAwMzAwMCwKLQkweDAwMDAwMDE2LCAweDQxNzgyODAwLCAweDRkNDAwMDAwLCAweDRkNDQwMDAwLAotCTB4NTkzNjhjMDMsIDB4NDIwMDIwMDAsIDB4MDAwMDAwMDksIDB4NDIwMjgwMDAsCi0JMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwgMHgwMDEwOTg1ZSwgMHg1YzAyODgwMCwKLQkweDVjMDI4MDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODY0LCAweDAyMDFmODAwLAotCTB4MDAxMGFhNDcsIDB4MDIwMWY4MDAsIDB4MDAxMDkxMzQsIDB4MDQwMjAwMGMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMjA3NCwgMHgwNDAxZjg5ZSwgMHg1OTM0MGMwMywKLQkweDgyMDQwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwN2NhLCAweDU5YTgwODI2LAotCTB4ODQwNDBkNDAsIDB4NDgwNzUwMjYsIDB4MDQwMWY3YzYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTE0ZSwgMHgwNDAyMDAwMywgMHgwNDAxZjg5MiwgMHgwNDAxZjdjMSwKLQkweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDMyLCAweDA0MDIwMDA0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDIzMGMsIDB4MDQwMWY3YmEsIDB4NTkzMDA0MDMsCi0JMHg4MjAwMGQ4MCwgMHgwMDAwMDAyMiwgMHgwNDAwMDg4NiwgMHgwNDAxZjdiNSwKLQkweDQ4MDNjODU3LCAweDBjMDFmMDAxLCAweDAwMTA4MDE2LCAweDAwMTA4MDE2LAotCTB4MDAxMDgwMTYsIDB4MDAxMDgwMTYsIDB4MDAxMDgwMTYsIDB4MDAxMDgwMTYsCi0JMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwKLQkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLAotCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsCi0JMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwKLQkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLAotCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsCi0JMHgwMDEwN2ZmOSwgMHgwMDEwODAxNiwgMHgwMDEwN2ZmMCwgMHgwMDEwODAxNiwKLQkweDAwMTA4MDE2LCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLAotCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDgwMTYsIDB4MDAxMDgwMTYsCi0JMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwKLQkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLAotCTB4MDAxMDgwMDcsIDB4MDAxMDgwMTYsIDB4MDAxMDdmZjAsIDB4MDAxMDgwMDAsCi0JMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwODAwMCwKLQkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA4MDE2LAotCTB4MDAxMDgwMDMsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjIsIDB4MDAxMDgwMTYsCi0JMHgwMDEwN2ZmMCwgMHgwMDEwODAxNiwgMHgwMDEwODAxNiwgMHgwMDEwN2ZmMCwKLQkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA4MDE2LAotCTB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDdmZjAsIDB4MDAxMDgwMTYsCi0JMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwN2ZmMCwgMHgwMDEwODAxNiwKLQkweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA3ZmYwLCAweDAwMTA4MDE2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHg1YzAyNTgwMCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzdkLCAweDRhMDI2MjAzLCAweDAwMDAwMDA1LCAweDU5YTgwMDM5LAotCTB4NDgwMjYyMDUsIDB4NTlhODAwMzcsIDB4NDgwMjYyMDYsIDB4MWMwMWYwMDAsCi0JMHg1OTMwMDgxZSwgMHg0OTc4MGEwNSwgMHgwNDAxZjAxNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA5MzI2LCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDAyMDFmODAwLAotCTB4MDAxMDIzMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4MDQwMDAwMDUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwKLQkweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLAotCTB4MDIwMWYwMDAsIDB4MDAxMDZjNGIsIDB4NDkzM2M4NTcsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMiwgMHg1OWE4MDAzNywgMHg0ODAyNjIwNiwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDJhLAotCTB4NGQyYzAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OTcsIDB4MDQwMjAwMGEsCi0JMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAzMSwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA5NDNiLCAweDVjMDI4MDAwLAotCTB4MDQwMWYwMWMsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMTAsCi0JMHgwNDAwMDAwNCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMSwgMHgwNDAyMDAwYSwKLQkweDRhMDI1YTA2LCAweDAwMDAwMDMxLCAweDRhMDI1ODBkLCAweDAwMDAwMDA0LAotCTB4NGEwMjU4MGUsIDB4MDAwMDAwZmYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCi0JMHgwNDAxZjAwYywgMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwgMHgwNDAwMDAwOSwKLQkweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDRhMDI1ODA1LCAweDAxMDAwMDAwLAotCTB4NTkzMWQ4MjEsIDB4NThlZjQwMGIsIDB4NThlYzAwMDksIDB4MDgwMWY4MDAsCi0JMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg1OTM0MDQwMCwKLQkweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAzNDgwLCAweDAwMDAwMDBjLAotCTB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMDM0MDMsIDB4ODIxODBkODAsCi0JMHgwMDAwMDA0ZCwgMHgwMjAwMDAwMCwgMHgwMDEwOTM4YiwgMHg4MjE4MGQ4MCwKLQkweDAwMDAwMDMzLCAweDAyMDAwMDAwLCAweDAwMTA5MzQ5LCAweDgyMTgwZDgwLAotCTB4MDAwMDAwMjgsIDB4MDIwMDAwMDAsIDB4MDAxMDkxOGYsIDB4ODIxODBkODAsCi0JMHgwMDAwMDAyOSwgMHgwMjAwMDAwMCwgMHgwMDEwOTFhMywgMHg4MjE4MGQ4MCwKLQkweDAwMDAwMDFmLCAweDAyMDAwMDAwLCAweDAwMTA3YjI4LCAweDgyMTgwZDgwLAotCTB4MDAwMDAwNTUsIDB4MDIwMDAwMDAsIDB4MDAxMDdiMDEsIDB4ODIxODBkODAsCi0JMHgwMDAwMDAwMCwgMHgwNDAwMDU5MSwgMHg4MjE4MGQ4MCwgMHgwMDAwMDAyMiwKLQkweDAyMDAwMDAwLCAweDAwMTA3YjU1LCAweDgyMTgwZDgwLCAweDAwMDAwMDM1LAotCTB4MDIwMDAwMDAsIDB4MDAxMDdjNTAsIDB4ODIxODBkODAsIDB4MDAwMDAwMzksCi0JMHgwNDAwMDUzOSwgMHg4MjE4MGQ4MCwgMHgwMDAwMDAzZCwgMHgwMjAwMDAwMCwKLQkweDAwMTA3Yjg1LCAweDgyMTgwZDgwLCAweDAwMDAwMDQ0LCAweDAyMDAwMDAwLAotCTB4MDAxMDdiYzIsIDB4ODIxODBkODAsIDB4MDAwMDAwNDksIDB4MDIwMDAwMDAsCi0JMHgwMDEwN2MxNywgMHg4MjE4MGQ4MCwgMHgwMDAwMDA0MSwgMHgwMjAwMDAwMCwKLQkweDAwMTA3YzAzLCAweDgyMTgwZDgwLCAweDAwMDAwMDQzLCAweDAyMDAwMDAwLAotCTB4MDAxMDk0ZGMsIDB4ODIxODBkODAsIDB4MDAwMDAwNTEsIDB4MDIwMDAwMDAsCi0JMHgwMDEwOTU0MiwgMHg4MjE4MGQ4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAwMywKLQkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDgzMzgwZDgwLCAweDAwMDAwMDE1LAotCTB4MDQwMDAwMDYsIDB4ODMzODBkODAsIDB4MDAwMDAwMTYsIDB4MDIwMjAwMDAsCi0JMHgwMDEwNzk3NCwgMHgwNDAxZjIwZiwgMHg0ZDJjMDAwMCwgMHg0ZDNjMDAwMCwKLQkweDBjMDFmODA0LCAweDVjMDI3ODAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAotCTB4MDAxMDgwYjgsIDB4MDAxMDgwYmMsIDB4MDAxMDgwYjgsIDB4MDAxMDgxMzEsCi0JMHgwMDEwODBiOCwgMHgwMDEwODIyNiwgMHgwMDEwODJiZiwgMHgwMDEwODBiOCwKLQkweDAwMTA4MGI4LCAweDAwMTA4Mjg4LCAweDAwMTA4MGI4LCAweDAwMTA4MjlhLAotCTB4NDkzM2M4NTcsIDB4NDk3YTYwMDcsIDB4NTkzMDA4MDgsIDB4NTgwNDAwMDAsCi0JMHg0YTAwMGEwNCwgMHgwMDAwMDEwMywgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwKLQkweDQ5MzNjODU3LCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDFjMDFmMDAwLAotCTB4NDkzM2M4NTcsIDB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNzQsCi0JMHgwNDAyMDA1YywgMHgwMjAxZjgwMCwgMHgwMDEwYTJjOCwgMHgwNDAyMDAxNiwKLQkweDA0MDFmODVjLCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDBjLAotCTB4MDIwMWY4MDAsIDB4MDAxMDk1OTcsIDB4MDQwMjAwMDksIDB4NDE3ODA4MDAsCi0JMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA5NDNiLCAweDVjMDI4MDAwLCAweDA0MDFmMDAzLCAweDAyMDFmODAwLAotCTB4MDAxMDIwNzQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4YzEsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAwNywKLQkweDAyMDFmODAwLCAweDAwMTA5NTk3LCAweDA0MDIwMDA0LCAweDA0MDFmZjNkLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMjAzYywgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDU5MzQwMjAwLCAweDg0MDAwNTU4LCAweDQ4MDI2YTAwLAotCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NDIsCi0JMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwMjAwMDgwMCwKLQkweDAwMTAwNWQ4LCAweDQ5MzY2MDA5LCAweDQ5N2E2MDA4LCAweDRhMDI2NDA2LAotCTB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2IyNSwgMHgwNDAwMDAxMSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwNCwKLQkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDRhMDI2NDIwLCAweDAwMDAwMDAxLAotCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDEsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsCi0JMHgwMDAwMDAyOSwgMHg0MTc4MjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTQzZSwKLQkweDVjMDI4MDAwLCAweDA0MDFmMDA5LCAweDQyMDAwODAwLCAweDAwMDAwMDBiLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjcyYiwgMHg1YzAyNjAwMCwgMHgwNDAxZmYwNSwKLQkweDAyMDFmODAwLCAweDAwMTAyMDc0LCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAotCTB4MDQwMWZmMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwYzcsCi0JMHg0OTMzYzg1NywgMHg1OTM0MDIwMCwgMHg4YzAwMDUwMCwgMHgwNDAwMDAwZCwKLQkweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA0NTY3LAotCTB4NWMwMjc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsIDB4MDQwMDAwMDUsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwKLQkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5YTgwODE2LCAweDgyMDQwNTgwLAotCTB4MDAwMDAwNzQsIDB4MDQwMDAwMGUsIDB4NDgwN2M4NTcsIDB4ODIwNDA1ODAsCi0JMHgwMDAwMDEwMCwgMHgwNDAyMDBhMCwgMHg1OWNjMDQwOCwgMHg0ODAzYzg1NywKLQkweDhjMDAwNTAwLCAweDA0MDAwMDljLCAweDU5MzQxNDAzLCAweDgyMDgwNTgwLAotCTB4MDAwMDA3ZmUsIDB4MDQwMDAwMDYsIDB4MDQwMWYwOTcsIDB4NTkzNDE0MDMsCi0JMHg4MjA4MDU4MCwgMHgwMDAwMDdmZSwgMHgwNDAyMDAwMywgMHgwNDAxZmE5YywKLQkweDA0MDFmMDRjLCAweDAyMDFmODAwLCAweDAwMTA0NjJhLCAweDU5MzQxNDAzLAotCTB4ODIwODA1ODAsIDB4MDAwMDA3ZmMsIDB4MDQwMjAwMWYsIDB4NGEwMjY4MDIsCi0JMHgwMGZmZmZmYywgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAxMiwKLQkweDAyMDFmODAwLCAweDAwMTA5NTk3LCAweDA0MDIwMDBmLCAweDA0MDFmOGE5LAorCTB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NGM1ODAwMDAsIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNiwgMHg1OTMwYTgwOCwgMHg4MjU0YWMwMCwgMHgwMDAwMDAwNSwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTBhOTNlLAorCTB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NDkzM2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwMjAwMDAwMCwgMHgwMDAyMDhiNCwKKwkweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTA5MzYwLCAweDA0MDIwMDBiLAogCTB4NDE3ODA4MDAsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTQzYiwgMHg1YzAyODAwMCwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDAyMDFmMDAwLAotCTB4MDAwMjA3N2QsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwgMHgwMDEwMjA3NCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzdkLCAweDU5YTgwMDA1LCAweDhjMDAwNTE0LCAweDA0MDAwMDExLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsCi0JMHgwNDAyMDAwOSwgMHg1OTM0MDAwMiwgMHg4MjAwMDUwMCwgMHgwMGZmMDAwMCwKLQkweDgyMDAwNTgwLCAweDAwZmYwMDAwLCAweDA0MDAwMDA2LCAweDQyMDAxMDAwLAotCTB4MDAwMDAwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDRjNmQsIDB4MDQwMjAwNWEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDA1YiwgMHgwMjAxZjgwMCwKLQkweDAwMTA5NTk3LCAweDA0MDIwMDA1LCAweDU5MmMwNDA0LCAweDhjMDAwNTFjLAotCTB4MDQwMjA3YzksIDB4MDQwMWY4NzcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwKLQkweDRhMDI2NDAzLCAweDAwMDAwMDAzLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLAotCTB4NTljYzA0MDgsIDB4OGMwMDA1MTgsIDB4MDQwMDAwMTAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTJlNSwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwgMHgwNDAwMDAwNCwKLQkweDU5Y2MwNDA4LCAweDhjMDAwNTE2LCAweDA0MDIwN2IzLCAweDU5YTgwMDI2LAotCTB4ODQwMDA1NGEsIDB4NDgwMzUwMjYsIDB4NTlhODAwMTAsIDB4ODQwMDA1NzAsCi0JMHg0ODAzODgzMiwgMHgwNDAxZjdhYywgMHg0MjAwMTAwMCwgMHgwMDAwMDBlZiwKLQkweDQ4MGI1MDEwLCAweDQ5N2I4ODMwLCAweDg0MDgxNTcwLCAweDQ4MGI4ODMyLAotCTB4NTljNDA4MDIsIDB4ODQwNDBkNGMsIDB4NDgwNzg4MDIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTMwZiwgMHg1OWE4MDAyNiwgMHg4NDAwMDU0OCwgMHg0ODAzNTAyNiwKLQkweDAyMDFmODAwLCAweDAwMTBhM2RhLCAweDA0MDIwNzliLCAweDU5YTgwMDI2LAotCTB4ODQwMDA1NGMsIDB4NDgwMzUwMjYsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0NTY3LCAweDQyMDAwMDAwLCAweDAwMDAwMGU4LCAweDAyMDFmODAwLAotCTB4MDAxMDVjOWEsIDB4MDIwMDA4MDAsIDB4MDAxMDQ1YTYsIDB4MDIwMjA4MDAsCi0JMHgwMDEwMDVkOCwgMHg0OTM2NjAwOSwgMHg1OTM0MDIwMCwgMHg4NDAwMDUxYSwKLQkweDQ4MDI2YTAwLCAweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAotCTB4MDAxMDQ1NzEsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwKLQkweDAwMTA2NzJiLCAweDA0MDFmZTQzLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAotCTB4MDQwMWYwMGEsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MGEsIDB4MDQwMDA3YWIsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwKLQkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ5MzNjODU3LCAweDgwMDAzNTQwLAotCTB4MDQwMDAwMDUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHg4MDE4MzFjMCwgMHgwNDAyMDAwZSwgMHg1OTMwMjAwOCwKLQkweDgwMTAyMWMwLCAweDA0MDAwMDA0LCAweDU4MTAwNDA0LCAweDhjMDAwNTFlLAotCTB4MDQwMjAwMDgsIDB4NTkzNDFjMDMsIDB4NDIwMDIwMDAsIDB4MDAwMDAwMDQsCi0JMHg0MjAwMzAwMCwgMHgwMDAwMDAxMiwgMHgwMjAxZjgwMCwgMHgwMDEwM2FhZSwKLQkweDAyMDFmODAwLCAweDAwMTAyMDc0LCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAotCTB4NGM1YzAwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTc1NSwgMHg1YzAyNTgwMCwgMHg1OWNjMDAwOCwgMHg0ODAwMjgwNSwKLQkweDU5Y2MwMDA5LCAweDQ4MDAyODA2LCAweDQ5NzgyODA3LCAweDQ5NzgyODA4LAotCTB4NDk3ODI4MDksIDB4NDk3ODI4MGEsIDB4NTljYzAwMTMsIDB4OGMwMDA1M2UsCi0JMHgwNDAwMDAwOSwgMHg1OWNjMDQxNCwgMHg5MDAwMDFjMCwgMHg1OWNjYmMxNSwKLQkweDgwNWMwNTQwLCAweDQ4MDAyODA3LCAweDU5Y2MwNDE2LCAweDkwMDAwMWMwLAotCTB4NDgwMDI4MDgsIDB4NTljYzAwMTcsIDB4OGMwMDA1M2UsIDB4MDQwMDAwMDksCi0JMHg1OWNjMDQxOCwgMHg5MDAwMDFjMCwgMHg1OWNjYmMxOSwgMHg4MDVjMDU0MCwKLQkweDQ4MDAyODA5LCAweDU5Y2MwNDFhLCAweDkwMDAwMWMwLCAweDQ4MDAyODBhLAotCTB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTlhODAwMTYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwgMHgwNDAyMDA0OCwgMHg1OWE4MDAwNSwKLQkweDhjMDAwNTE0LCAweDA0MDAwMDE1LCAweDAyMDFmODAwLCAweDAwMTA1MTNiLAotCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMjAwMDksIDB4NTkzNDAwMDIsCi0JMHg4MjAwMDUwMCwgMHgwMGZmMDAwMCwgMHg4MjAwMDU4MCwgMHgwMGZmMDAwMCwKLQkweDA0MDAwMDBhLCAweDQyMDAxMDAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLAotCTB4MDAxMDRjNmQsIDB4MDQwMDAwMDUsIDB4NTlhODAwMDUsIDB4ODQwMDA1NTYsCi0JMHg0ODAzNTAwNSwgMHgwNDAxZjAzMSwgMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywKLQkweDA0MDIwMDBiLCAweDU5MzAwMDA4LCAweDgwMDAwNTQwLCAweDA0MDIwMDA4LAotCTB4NTkzNDFjMDMsIDB4NDIwMDIwMDAsIDB4MDAwMDAwMDYsIDB4NDIwMDMwMDAsCi0JMHgwMDAwMDAxMywgMHgwMjAxZjgwMCwgMHgwMDEwM2FhZSwgMHgwMjAxZjgwMCwKLQkweDAwMTA0NjhkLCAweDA0MDFmZWNmLCAweDA0MDFmYTFkLCAweDA0MDIwMDFmLAotCTB4NTkzNDA0MDQsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMWMsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwKLQkweDAwMTA5MDM3LCAweDA0MDAwMDExLCAweDAyMDFmODAwLCAweDAwMTA5NTk3LAotCTB4MDQwMjAwMGEsIDB4NDE3ODA4MDAsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTQzYiwgMHg1YzAyODAwMCwKLQkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAotCTB4NGEwMjU4MDUsIDB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwgMHgwMDEwNGMxOSwKLQkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDA3LCAweDAyMDFmODAwLAotCTB4MDAxMDk1OTcsIDB4MDQwMjAwMDQsIDB4MDQwMWZkYTIsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHgwNDAxZmQ5ZiwgMHg4MDAwMDU4MCwgMHg1OWE4MDAwNSwKLQkweDhjMDAwNTE2LCAweDA0MDAwMDA1LCAweDg0MDAwNTE2LCAweDQ4MDM1MDA1LAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZmNjAsIDB4MWMwMWYwMDAsCi0JMHg0OTMzYzg1NywgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwKLQkweDA0MDIwMDBiLCAweDQyMDAwODAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLAotCTB4MDAxMDQ1NzEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg0MjAwMDAwMCwKLQkweDAwMDAwMDAxLCAweDA0MDFmNzRkLCAweDQ5MzNjODU3LCAweDQwMDAzMDAwLAotCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMGEsCi0JMHg4MjE4MzU4MCwgMHgwMDAwMDAwYiwgMHgwNDAyMDAwNSwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDAyMDFmMDAwLAotCTB4MDAwMjA3N2QsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3M2IsCi0JMHg0ODAzYzg1NywgMHg0ZDJjMDAwMCwgMHg0ZDNjMDAwMCwgMHgwYzAxZjgwNCwKLQkweDVjMDI3ODAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDAwMTA4MGI4LAotCTB4MDAxMDgyY2UsIDB4MDAxMDgwYjgsIDB4MDAxMDgzMjMsIDB4MDAxMDgwYjgsCi0JMHgwMDEwODM5MSwgMHgwMDEwODJiZiwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwKLQkweDAwMTA4M2IxLCAweDAwMTA4MGI4LCAweDAwMTA4M2MxLCAweDQ5MzNjODU3LAotCTB4NGQxYzAwMDAsIDB4NTkzMDE0MDMsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDMsCi0JMHgwNDAwMDAwOCwgMHg4MjA4MTU4MCwgMHgwMDAwMDAxZSwgMHgwNDAyMDAwMywKLQkweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDVjMDIzODAwLCAweDFjMDFmMDAwLAotCTB4MDQwMWZmNWEsIDB4MDQwMWY3ZmQsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTAzNywgMHgwNDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywKLQkweDA0MDIwMDA4LCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDAyMDFmODAwLAotCTB4MDAxMDk1N2QsIDB4MDQwMWZkNDMsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCi0JMHgwNDAxZjhmNSwgMHgwNDAyMDAzMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0NTY3LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHg1OTM0MDIwMCwgMHg4NDAwMDU1OCwgMHg0ODAyNmEwMCwgMHg0YTAyNjQwMywKLQkweDAwMDAwMDAyLCAweDQyMDAzMDAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAotCTB4MDAxMGE5NDIsIDB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsIDB4MDQwMDAwMTEsCi0JMHg0ZDQwMDAwMCwgMHg0MTc4MjgwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwNSwKLQkweDQyMDI4MDAwLCAweDAwMDAwMDI5LCAweDAyMDFmODAwLCAweDAwMTBhNDNlLAotCTB4NWMwMjgwMDAsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwNCwgMHg0YTAyNjQyMCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKLQkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAotCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDY3MmIsCi0JMHgwNDAxZjdmNywgMHg1OWNjMDQwNywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOSwKLQkweDA0MDIwMDBhLCAweDU5MzQwNDEyLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAotCTB4MDQwMDAwMGMsIDB4ODAwMDAwNDAsIDB4NDgwMjZjMTIsIDB4NGEwMjYyMDYsCi0JMHgwMDAwMDAwYSwgMHgwNDAxZjdlYSwgMHg1OWNjMDIwNywgMHg4MjAwMDUwMCwKLQkweDAwMDBmZjAwLCAweDgyMDAwNTgwLCAweDAwMDAxOTAwLCAweDA0MDAwN2MyLAotCTB4MDQwMWZjZmMsIDB4ODAwMDA1ODAsIDB4MDQwMWY2YzQsIDB4NDkzM2M4NTcsCi0JMHg1OWE4MDAzMiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxNSwgMHg1OTM0MDQwMywKLQkweDgyMDAwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwMDExLCAweDU5YTgwMDEwLAotCTB4ODAwMDAwMDAsIDB4NDgwMzUwMTAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU2NywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwKLQkweDAwMTA0NTcxLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLAotCTB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTAzNywgMHgwNDAwMDAxMSwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywKLQkweDA0MDIwMDBlLCAweDRjNTgwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAotCTB4MDIwMWY4MDAsIDB4MDAxMDk1N2QsIDB4NWMwMGIwMDAsIDB4MDQwMWZjZDUsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwKLQkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDA0MDFmY2NlLCAweDU5Y2MzNDA3LAotCTB4ODIxODM1MDAsIDB4MDAwMDAwZmYsIDB4ODIxODA1ODAsIDB4MDAwMDAwMDUsCi0JMHgwNDAwMDAxYywgMHg4MjE4MDU4MCwgMHgwMDAwMDAwYiwgMHgwNDAwMDAxNiwKLQkweDU5Y2MwMjA3LCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDA0MDIwMDA0LAotCTB4ODIxODA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMDAwMTIsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMTkwMCwgMHgwNDAyMDAwYywgMHg4MjE4MDU4MCwgMHgwMDAwMDAwOSwKLQkweDA0MDAwMDBjLCAweDQyMDAwODAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLAotCTB4MDAxMDQ1NzEsIDB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwNDAxZjY3NywKLQkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDU5MzI1ODA4LCAweDA0MDAwMDA4LAotCTB4NTkyYzAyMDQsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMzksIDB4MDQwMDA3ZjYsCi0JMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwgMHgwNDAyMDdmMywgMHg1OTM0MDQwMywKLQkweDgyMDAwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwMDA3LCAweDU5YTgwMDI2LAotCTB4ODQwMDA1NDAsIDB4NDgwMzUwMjYsIDB4MDIwMWY4MDAsIDB4MDAxMDQyMjksCi0JMHgwNDAxZjdlOSwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywKLQkweDQyMDAzMDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhOTQyLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHgwNDAxZjdkZCwgMHg0OTMzYzg1NywgMHgwNDAxZjg0ZCwgMHgwNDAyMDAwYiwKLQkweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAotCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDMsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwKLQkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDAyMDFmODAwLCAweDAwMTA5NTk3LAotCTB4MDQwMjAwMGEsIDB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTU3ZCwgMHg1YzAwYjAwMCwgMHgwNDAxZmM3MSwKLQkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDA0MDFmYzZlLCAweDgwMDAwNTgwLAotCTB4MDQwMWY2MzYsIDB4NDkzM2M4NTcsIDB4MDQwMWY4MmQsIDB4MDQwMjAwMGIsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwKLQkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDA1LAotCTB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsCi0JMHgwNDAxZjYyNiwgMHg0OTMzYzg1NywgMHgwNDAxZjgxZCwgMHgwNDAyMDAwYiwKLQkweDQyMDAwODAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTA0NTcxLAotCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDEsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKLQkweDA0MDFmNjE2LCAweDQ5MzNjODU3LCAweDU5Y2MwNDA3LCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDMsIDB4MDQwMjAwMDksIDB4NTljYzAyMDcsIDB4ODIwMDA1MDAsCi0JMHgwMDAwZmYwMCwgMHg4MjAwMGQ4MCwgMHgwMDAwMmEwMCwgMHgwNDAwMDAwMywKLQkweDgyMDAwZDgwLCAweDAwMDAxZTAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCi0JMHg0ZDQwMDAwMCwgMHg0YzU4MDAwMCwgMHg1OWE4MDAyNiwgMHg4MjAwMDU0MCwKLQkweDAwMDAwMDAzLCAweDQ4MDM1MDI2LCAweDA0MDFmODVjLCAweDA0MDAwMDM4LAotCTB4NGQzNDAwMDAsIDB4NGQ0NDAwMDAsIDB4NTlhODAwMjYsIDB4ODQwMDA1NTIsCi0JMHg0ODAzNTAyNiwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDAwYywKLQkweDQyMDI4MDAwLCAweDAwMDAwMDJhLCAweDQyMDI4ODAwLCAweDAwMDBmZmZmLAotCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMGE0NDYsCi0JMHg1OWE4MDgwNSwgMHg4NDA0MGQ0NCwgMHg0ODA3NTAwNSwgMHg0MjAyODAwMCwKLQkweDAwMDAwMDJhLCAweDRkM2MwMDAwLCAweDQyMDI3ODAwLCAweDAwMDAwMjA0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDFmZTUsIDB4NWMwMjc4MDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwKLQkweDAwMTAxZTQ1LCAweDQyMDBiMDAwLCAweDAwMDAwMDEwLCAweDQyMDI4ODAwLAotCTB4MDAwMDA3ZjAsIDB4NGQyYzAwMDAsIDB4ODM0NDA1ODAsIDB4MDAwMDA3ZmUsCi0JMHgwNDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwNDVmYiwgMHg4MTQ2ODgwMCwKLQkweDgwNThiMDQwLCAweDA0MDIwN2Y5LCAweDVjMDI1ODAwLCAweDU5Y2MwNDA4LAotCTB4OGMwMDA1MWUsIDB4MDQwMDAwMDQsIDB4NTlhODAwMjYsIDB4ODQwMDA1MTIsCi0JMHg0ODAzNTAyNiwgMHg1YzAyODgwMCwgMHg1YzAyNjgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0NjJhLCAweDRhMDI2ODAyLCAweDAwZmZmZmZlLCAweDU5YTgwODI2LAotCTB4ODQwNDBkNTAsIDB4NTljYzAwMTMsIDB4OGMwMDA1M2UsIDB4MDQwMDAwMDMsCi0JMHg4YzAwMDUzNiwgMHgwNDAwMDAwNCwgMHg1OWNjMDAxNywgMHg4YzAwMDUzNiwKLQkweDA0MDIwMDAyLCAweDg0MDQwZDEwLCAweDQ4MDc1MDI2LCAweDU5Y2MwODAwLAotCTB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsIDB4NDgwNzUwMTAsIDB4ODAwNDAxMTAsCi0JMHg0ODAzNTAxZCwgMHg0ODAzODg4MSwgMHgwMjAxZjgwMCwgMHgwMDEwNTEzYiwKLQkweDA0MDAwMDA3LCAweDU5Y2MwMDA5LCAweDQ4MDM1MDM1LCAweDU5Y2MwMDBhLAotCTB4NDgwMzUwMzYsIDB4MDIwMWY4MDAsIDB4MDAxMDkyZTUsIDB4NWMwMGIwMDAsCi0JMHg1YzAyODAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0YzU4MDAwMCwKLQkweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwZmZmZjAwLCAweDA0MDAwMDIyLAotCTB4NTljYzEwMDAsIDB4ODIwODE1MDAsIDB4MDBmZmZmMDAsIDB4ODAwODA1ODAsCi0JMHgwNDAwMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgzYiwgMHgwNDAxZjAxNiwKLQkweDgzY2MxNDAwLCAweDAwMDAwMDBiLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAotCTB4ODMzNDFjMDAsIDB4MDAwMDAwMDYsIDB4MDQwMWY5MDAsIDB4MDQwMDAwMDQsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjgzYywgMHgwNDAxZjAwYiwgMHg4M2NjMTQwMCwKLQkweDAwMDAwMDBkLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDgzMzQxYzAwLAotCTB4MDAwMDAwMDgsIDB4MDQwMWY4ZjUsIDB4MDQwMDAwMDcsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgzZCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg4MjAwMDU0MCwKLQkweDAwMDAwMDAxLCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAotCTB4NTljYzAyMDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMjAwMTYsCi0JMHg1OWNjMDQwNywgMHg4MjAwMDU4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMDAxMiwKLQkweDU5Y2MwMjA3LCAweDhjMDAwNTFhLCAweDA0MDAwMDBkLCAweDgyMDAwNTAwLAotCTB4MDAwMDBmMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMDAsIDB4MDQwMjAwMDgsCi0JMHg1OWNjMDIwYSwgMHg4YzAwMDUwOCwgMHgwNDAyMDAwMywgMHg4YzAwMDUwYSwKLQkweDA0MDAwMDAzLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLAotCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NDk0M2M4NTcsCi0JMHg0OTNmYzg1NywgMHg0YzVjMDAwMCwgMHg0ZDMwMDAwMCwgMHg0ZDM0MDAwMCwKLQkweDRkMmMwMDAwLCAweDRkMzgwMDAwLCAweDQxMzBiODAwLCAweDQyMDI2MDAwLAotCTB4MDAxMGQxYzAsIDB4NTlhODAwMGUsIDB4ODE2NDA0ODAsIDB4MDQwMjEwYmQsCi0JMHg4ZDNlN2QxMiwgMHgwNDAwMDAwNCwgMHg0MDVjMDAwMCwgMHg4MTMwMDU4MCwKLQkweDA0MDAwMGIzLCAweDU5MzAwNDA2LCAweDgyMDAwYzgwLCAweDAwMDAwMDEyLAotCTB4MDQwMjEwMTUsIDB4NTkzMjY4MDksIDB4MGMwMWYwMDEsIDB4MDAxMDg1NGYsCi0JMHgwMDEwODRiYywgMHgwMDEwODRkMywgMHgwMDEwODRkZSwgMHgwMDEwODRiNywKLQkweDAwMTA4NGNlLCAweDAwMTA4NTA3LCAweDAwMTA4NTRmLCAweDAwMTA4NGI1LAotCTB4MDAxMDg1MWIsIDB4MDAxMDg1MmEsIDB4MDAxMDg0YjUsIDB4MDAxMDg0YjUsCi0JMHgwMDEwODRiNSwgMHgwMDEwODRiNSwgMHgwMDEwODU0ZiwgMHgwMDEwODU0MCwKLQkweDAwMTA4NTM4LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDhkM2U3ZDE4LAotCTB4MDQwMDAwMDQsIDB4NTkzMDA0MjAsIDB4OGMwMDA1MDAsIDB4MDQwMjAwOTQsCi0JMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA0MywgMHgwNDAwMDA5MCwKLQkweDAyMDFmODAwLCAweDAwMTA5MTM0LCAweDAyMDAwODAwLCAweDAwMTAyMDc0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDkxNGUsIDB4MDIwMDA4MDAsIDB4MDAxMDgwMWMsCi0JMHg4ZDNlN2QwNiwgMHgwNDAwMDA4NCwgMHgwMjAxZjgwMCwgMHgwMDEwOTJkNywKLQkweDA0MDAwMDgzLCAweDA0MDFmMDgwLCAweDhkM2U3ZDE2LCAweDA0MDAwMDA0LAotCTB4NTkzMDA0MjAsIDB4OGMwMDA1MDAsIDB4MDQwMjAwN2QsIDB4NTkzMjU4MDgsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDA3NywgMHg0OTQyNWEwNiwKLQkweDQ5N2E1YzA5LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmODAwLAotCTB4MDAxMDkxMmEsIDB4MDQwMWYwNzAsIDB4ODEzNjY5YzAsIDB4MDIwMDA4MDAsCi0JMHgwMDEwMDVkOCwgMHg4ZDNlN2QwNiwgMHgwNDAwMDAwNCwgMHg1OTM0MDIwMCwKLQkweDhjMDAwNTBlLCAweDA0MDIwMDZhLCAweDU5MzAwMDA0LCAweDg0MDAwNTVjLAotCTB4NDgwMjYwMDQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsCi0JMHgwMjAwMDgwMCwgMHgwMDEwMGU5OSwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA5MDM3LCAweDA0MDAwMDVjLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAotCTB4NTkzMDA0MDIsIDB4NDgwMjVjMDYsIDB4NTkyYzA0MDgsIDB4OGMwMDA1MTIsCi0JMHgwNDAwMDAwNiwgMHg0ZDJjMDAwMCwgMHg1OTJlNTgwOSwgMHgwMjAxZjgwMCwKLQkweDAwMTAwN2ZkLCAweDVjMDI1ODAwLCAweDQ5NDI1YTA2LCAweDQ5N2E1YzA5LAotCTB4MDIwMWY4MDAsIDB4MDAxMDk1OWMsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTEyYSwgMHgwNDAxZjA0NywgMHg4YzAwMDUxOCwKLQkweDA0MDAwMDQ3LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LAotCTB4MDIwMDA4MDAsIDB4MDAxMDBlOTksIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTAzNywgMHgwNDAwMDAzYywgMHg0OTQyNWEwNiwgMHg0OTdhNWMwOSwKLQkweDAyMDFmODAwLCAweDAwMTBhNjkzLCAweDAyMDFmODAwLCAweDAwMTA5NTljLAotCTB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDQwMWYwMzMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjJkNSwgMHgwNDAwMDAzMiwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDA0LCAweDA0MDIwMDA0LCAweDAyMDFmODAwLCAweDAwMTAwZTk5LAotCTB4MDQwMWYwMmIsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDcsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDdhMSwgMHgwNDAxZjAyNiwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDA0LCAweDAyMDAwODAwLCAweDAwMTAwZTk5LCAweDU5MzI1ODA4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMWIsIDB4NDk0MjVhMDYsCi0JMHg0OTdhNWMwOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwNDAxZjAxNiwKLQkweDgzM2MwNTAwLCAweDAwMDAxODAwLCAweDA0MDAwMDE1LCAweDhkM2U3ZDE2LAotCTB4MDQwMjAwMTMsIDB4NTkzMjU4MTcsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsCi0JMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwMjAwMDgwMCwKLQkweDAwMTAwZTk5LCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAotCTB4MDQwMDAwMDUsIDB4NDk0MjVhMDYsIDB4NDk3YTVjMDksIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDJkYSwgMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwgMHg4MzMyNjQwMCwKLQkweDAwMDAwMDI0LCAweDQxNTgwMDAwLCAweDgxMzAwNDgwLCAweDA0MDAxNzQyLAotCTB4NWMwMjcwMDAsIDB4NWMwMjU4MDAsIDB4NWMwMjY4MDAsIDB4NWMwMjYwMDAsCi0JMHg1YzAwYjgwMCwgMHgxYzAxZjAwMCwgMHg1YzAwMDAwMCwgMHg0YzAwMDAwMCwKLQkweDQ4MDNjODU3LCAweDQ4MGJjODU3LCAweDQ4MGZjODU3LCAweDQ4NWJjODU3LAotCTB4NTAwODA4MDAsIDB4NTAwYzAwMDAsIDB4ODAwNDI1ODAsIDB4MDQwMjAwMDcsCi0JMHg4MDA4MTAwMCwgMHg4MDBjMTgwMCwgMHg4MDU4YjA0MCwgMHgwNDAyMDdmOSwKLQkweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU3LCAweDQ4MDdjODU3LAotCTB4NDgwYmM4NTcsIDB4NDgwZmM4NTcsIDB4ODAwNDA0ODAsIDB4MDQwMDEwMDYsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHg4MjA0MGQ0MCwgMHgwMDAwMDAwMSwKLQkweDFjMDFmMDAwLCAweDQxNzgwMDAwLCAweDA0MDFmN2ZjLCAweDgzMzgwNDgwLAotCTB4MDAwMDAwNTMsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODMzODA0ODAsCi0JMHgwMDAwMDA0YiwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwKLQkweDAwMTA4NThhLCAweDAwMTA4NThhLCAweDAwMTA4NThhLCAweDAwMTA4NThhLAotCTB4MDAxMDg1ODgsIDB4MDAxMDg1ODgsIDB4MDAxMDg1ODgsIDB4MDAxMDg1OGEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0OTNiYzg1NywgMHg0YTAyNjIwMywKLQkweDAwMDAwMDBkLCAweDQ5M2E2NDAzLCAweDQyMDAwODAwLCAweDgwMDAwMDAwLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3MjEsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTMsCi0JMHgwNDAyMDAwOCwgMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA1MCwKLQkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAotCTB4NDkzM2M4NTcsIDB4ODMzODA1ODAsIDB4MDAwMDAwMjcsIDB4MDQwMjAwMzAsCi0JMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHg0ZDNjMDAwMCwKLQkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLCAweDVjMDI3ODAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywKLQkweDQ5MmZjODU3LCAweDA0MDAwMDBkLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAotCTB4NTkzMDBjMDIsIDB4NDgwNjVjMDYsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMjksCi0JMHg0OTdhNWMwOSwgMHg1OTJjMGMwOCwgMHg4NDA0MGQ1MCwgMHg0ODA2NWMwOCwKLQkweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDVjMDI1ODAwLCAweDQyMDAzMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkyMDQsIDB4NWMwMjgwMDAsIDB4NWMwMjU4MDAsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHg1OTMxZDgyMSwgMHg1OGVmNDAwYiwKKwkweDU4ZWU1ODBkLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDU4ZWMwMDA5LAorCTB4MDgwMWY4MDAsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsCisJMHg0OTMzYzg1NywgMHg1OWNjMTgwNiwgMHg4MjBjMDU4MCwgMHgwMjAwMDAwMCwKKwkweDA0MDIwMDE0LCAweDRhMDI2ODAyLCAweDAwZmZmZmZkLCAweDU5MzQwMDBhLAorCTB4ODQwMDA1MDQsIDB4NDgwMjY4MGEsIDB4NTkzMDA4MDgsIDB4ODAwNDA5YzAsCisJMHgwMjAwMDAwMCwgMHgwMDAyMDhiNCwgMHg0YTAwMGEwNCwgMHgwMDAwMDEwMywKKwkweDQ4MGMwODA1LCAweDU5MzFkODIxLCAweDU4ZWY0MDBiLCAweDU4ZWU1ODBkLAorCTB4NThlYzAwMDksIDB4MDgwMWY4MDAsIDB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjY2YiwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwKKwkweDRjMGMwMDAwLCAweDA0MDFmODA0LCAweDVjMDAxODAwLCAweDA0MDIwN2ViLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCisJMHg4MTJlNTljMCwgMHgwNDAyMDAwOSwgMHg0OTdhNjIwNiwgMHg0OTdhNjIwNSwKKwkweDRkMzgwMDAwLCAweDQyMDI3MDAwLCAweDAwMDAwMDIyLCAweDA0MDFmYjc3LAorCTB4NWMwMjcwMDAsIDB4ODAwMDA1ODAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwKKwkweDRjNTgwMDAwLCAweDU5MzI1ODA4LCAweDU5MmU1ODAxLCAweDgzMmNhYzAwLAorCTB4MDAwMDAwMDUsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsIDB4NTlhODA4NmUsCisJMHg4MjA0MGQwMCwgMHgwMDAwMDNmZiwgMHg4MjA0MTQ4MCwgMHgwMDAwMDAwZiwKKwkweDA0MDAxMDFiLCAweDQyMDBiMDAwLCAweDAwMDAwMDBmLCAweDAyMDFmODAwLAorCTB4MDAxMGE5M2UsIDB4NTkyZTU4MDEsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsCisJMHg4MjA4MGM4MCwgMHgwMDAwMDAwZiwgMHgwNDAwMTAwZCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDBmLCAweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDU5MmU1ODAxLAorCTB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsIDB4ODIwNDE0ODAsIDB4MDAwMDAwMGYsCisJMHgwNDAwMTAwNywgMHg0MjAwMTAwMCwgMHgwMDAwMDAwZiwgMHg0MDA4YjAwMCwKKwkweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDA0MDFmMDA0LCAweDQwMDRiMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4NTkzMWQ4MjEsIDB4NThlZjQwMGIsCisJMHg1OGVlNTgwZCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OTJlNTgwMSwKKwkweDU4ZWMwMDA5LCAweDA4MDFmODAwLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LAorCTB4NWMwMGIwMDAsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMjU4MDAsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwgMHg0YzUwMDAwMCwKKwkweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDU5Y2MwMDA2LCAweDgyMDAwZDgwLAorCTB4MDEwMDAwMDAsIDB4MDQwMDAwMmMsIDB4NTljYzAwMDcsIDB4OTAwMGIxYzAsCisJMHg4MjU4YjUwMCwgMHgwMDAwMDBmZiwgMHg4MDU4YjEwNCwgMHg4MjU4YjQwMCwKKwkweDAwMDAwMDAyLCAweDgyNTgwYzgwLCAweDAwMDAwMDA3LCAweDA0MDAxMDAzLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDYsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDYsCisJMHg1OTMwMTAwOCwgMHg4MDA4MTFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKKwkweDgyMDhhYzAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTBhOTNlLAorCTB4ODIwMDBkMDAsIDB4ZmYwMDAwMDAsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMTksCisJMHg4MjAwYjUwMCwgMHgwMDAwMDBmZiwgMHg4MDU4YjEwNCwgMHg4MjU4MGM4MCwKKwkweDAwMDAwMDBlLCAweDA0MDAxMDAzLCAweDQyMDBiMDAwLCAweDAwMDAwMDBkLAorCTB4NTgwODEwMDEsIDB4ODAwODExYzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCisJMHg4MjA4YWMwMCwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwYTkzZSwKKwkweDA0MDFmMDA4LCAweDU5MzAxMDA4LCAweDgwMDgxMWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NDgwMDEwMDUsIDB4NTljYzAwMDcsIDB4NDgwMDEwMDYsCisJMHgwNDAxZmYzYiwgMHg1YzAwYjAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwKKwkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDAsIDB4NTljYzAwMDYsIDB4ODIwMDA1ODAsIDB4MDIwMDAwMDAsCisJMHgwNDAwMDAwMywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMSwgMHg0ZDJjMDAwMCwKKwkweDU5MzI1ODA4LCAweDgxMmU1OWMwLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LAorCTB4NDgwNjVhMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4NWMwMjU4MDAsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHg0OTMzYzg1NywgMHg0ZDJjMDAwMCwKKwkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDIsIDB4NTljYzA4MDYsIDB4ODIwNDA1ODAsIDB4MDEwMDAwMDAsCisJMHgwNDAwMDAwNCwgMHg4MjA0YjUwMCwgMHgwMDAwZmZmZiwgMHg4MDU4YjEwNCwKKwkweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDU5MzAwMDA4LCAweDgyMDBhYzAwLAorCTB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4MDQwMWZmMGMsCisJMHg1YzAwYjAwMCwgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHg1YzAyNTgwMCwKKwkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDQ4MDNjODU3LCAweDQ4MDdjODU3LAorCTB4NDgwYmM4NTcsIDB4NDgwZmM4NTcsIDB4NDgxM2M4NTcsIDB4NDgxYmM4NTcsCisJMHg0OTJmYzg1NywgMHg0ZDJjMDAwMCwgMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAwODE5LCAweDVjMDAwMDAwLCAweDA0MDAwMDBmLCAweDQ4MDI1ODAzLAorCTB4NWMwMDAwMDAsIDB4NDgwMjU4MGEsIDB4NGMwMDAwMDAsIDB4NDgxYTU4MDEsCisJMHg0ODEyNTgwOSwgMHg0ODA2NTgwNCwgMHg0ODBhNTgwNywgMHg0ODBlNTgwOCwKKwkweDQxMmMxMDAwLCAweDAyMDFmODAwLCAweDAwMTAwOGExLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg0ZDFjMDAwMCwgMHg1OWNjMDAwMSwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKKwkweDU5MzQxMDAyLCAweDgyMDgxNTAwLCAweDAwZmZmZmZmLCAweDgwMDgwNTgwLAorCTB4MDQwMjAwMWYsIDB4NDk3YTYyMDUsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDAzNSwgMHgwMjAxZjgwMCwgMHgwMDEwOTE4MywgMHg1YzAyNzAwMCwKKwkweDA0MDIwMDEyLCAweDU5MWMwMDFjLCAweDgwMDAwMWMwLCAweDA0MDAwMDBmLAorCTB4NDk3YTM4MWMsIDB4NTkxYzA0MTQsIDB4OGMwMDA1MDIsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg4NDAwMDUwMiwgMHg0ODAyM2MxNCwgMHg1OTFjMTQwNiwKKwkweDgyMDgwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA2LCAweDgyMDgwNTgwLAorCTB4MDAwMDAwMDYsIDB4MDQwMDAwMDUsIDB4MDQwMWZjOWUsIDB4MDQwMWYwMDQsCisJMHgwNDAxZjgwNSwgMHgwNDAxZjAwMiwgMHgwNDAxZjhjMCwgMHg1YzAyMzgwMCwKKwkweDFjMDFmMDAwLCAweDRkMmMwMDAwLCAweDU5MWU1ODA4LCAweDQ5MzNjODU3LAorCTB4NDkxZmM4NTcsIDB4NDkzYmM4NTcsIDB4NDkyZmM4NTcsIDB4ODMzODA1ODAsCisJMHgwMDAwMDAxNSwgMHgwNDAwMDBiMywgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNiwKKwkweDA0MDIwMGFlLCAweDRkMzAwMDAwLCAweDQxMWU2MDAwLCAweDU5Y2MwMjA3LAorCTB4NDgwM2M4NTcsIDB4ODIwMDBkMDAsIDB4MDAwMGZmMDAsIDB4ODIwNDA1ODAsCisJMHgwMDAwMTcwMCwgMHgwNDAwMDAwNCwgMHg4MjA0MDU4MCwgMHgwMDAwMDMwMCwKKwkweDA0MDIwMDViLCAweDU5MWMwMjAzLCAweDQ4MDNjODU3LCAweDgyMDAwNTgwLAorCTB4MDAwMDAwMGQsIDB4MDQwMDAwM2YsIDB4ODEyZTU5YzAsIDB4MDQwMDAwOWEsCisJMHg1OTFjMDIwMiwgMHg0ODAzYzg1NywgMHg4MjAwMDU4MCwgMHgwMDAwZmZmZiwKKwkweDA0MDIwMDdlLCAweDU5MmMwMjBhLCAweDQ4MDNjODU3LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDcsCisJMHg1OTJjMDgwZiwgMHg1OTFjMDAxMSwgMHg0ODAzYzg1NywgMHg0ODA3Yzg1NywKKwkweDgwMDQwNTgwLCAweDA0MDIwMDcxLCAweDU5MWMwNDE0LCAweDQ4MDNjODU3LAorCTB4OGMwMDA1MDAsIDB4MDQwMjAwNmQsIDB4NDE3ODA4MDAsIDB4NTkxYzEyMDYsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwYSwgMHgwMjAxZjgwMCwgMHgwMDEwNjNlZSwKKwkweDU5MmMwNDA2LCAweDQ4MDNjODU3LCAweDgwMDAwMWMwLCAweDA0MDAwMDBjLAorCTB4ODAwODBjODAsIDB4MDQwMDEwMDQsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCisJMHg4MDAwMTA0MCwgMHg0ODBhNWMwNiwgMHg4MDA4MTFjMCwgMHgwNDAyMDAwNCwKKwkweDAyMDFmODAwLCAweDAwMTA4YjNjLCAweDA0MDFmMDZiLCAweDAyMDFmODAwLAorCTB4MDAxMDhlZTcsIDB4NTkxYzA4MTcsIDB4NTkxYzAwMTgsIDB4NDgwNjU4MDgsCisJMHg0ODAyNTgwOSwgMHg1OTMwMDAwNywgMHg4YzAwMDUwMCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwZWU0LCAweDQ5N2EzODA4LCAweDAyMDFmODAwLCAweDAwMDIwMWVlLAorCTB4MDQwMjAwNGEsIDB4NDExZTYwMDAsIDB4MDQwMWZjM2UsIDB4MDQwMWYwNWEsCisJMHgwNDAxZmM2ZCwgMHgwNDAwMDAxMywgMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAzLCAweDQ5MmU2MDA4LCAweDU5MWMwODE3LCAweDU5MWMxMDE4LAorCTB4NDgwNjYwMTcsIDB4NDgwYTYwMTgsIDB4NGQzODAwMDAsIDB4NTkxZTc0MDMsCisJMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwgMHgwNDAxZmMyZSwgMHg1YzAyNjAwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwOGQ4LCAweDVjMDI3MDAwLCAweDA0MDFmMDQ2LAorCTB4NTlhODAwMzksIDB4NDgwMjNhMDUsIDB4MDQwMWYwNDMsIDB4NTljYzA0MDcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwYiwgMHgwNDAyMDAyNSwgMHg1OTM0MGEwMCwKKwkweDg0MDQwZDBlLCAweDQ4MDY2YTAwLCAweDU5MmMwYTA0LCAweDgyMDQwZDAwLAorCTB4MDAwMDAwZmYsIDB4ODIwNDBkODAsIDB4MDAwMDAwMTQsIDB4MDQwMDAwMDMsCisJMHg0YTAyNjIxZCwgMHgwMDAwMDAwMywgMHg1OTMwMDAwNywgMHg4YzAwMDUwMCwKKwkweDAyMDIwODAwLCAweDAwMTAwZWU0LCAweDRkNDAwMDAwLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMDMsIDB4NTkyYzBhMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDRiZWUsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHg1YzAyODAwMCwgMHg0OTdhNjAwOCwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDg1LCAweDRhMDI2MjAzLCAweDAwMDAwMDA5LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsIDB4ODAwMDQwNGIsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDg1NSwgMHgwNDAxZjAxYiwgMHg1OWNjMDIwNywKKwkweDgyMDAwNTgwLCAweDAwMDAyYTAwLCAweDA0MDIwMDA0LCAweDU5YTgwMDM5LAorCTB4NDgwMjNhMDUsIDB4MDQwMWYwMTQsIDB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OTFjMDAwNywKKwkweDhjMDAwNTAwLCAweDAyMDIwODAwLCAweDAwMTAwZWU0LCAweDU5MWMwNDAyLAorCTB4NDgwMjVjMDYsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDM4MSwgMHgwMjAxZjgwMCwgMHgwMDEwNzY5OCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ODAxLCAweDVjMDI2MDAwLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LAorCTB4MDQwMWYwMDIsIDB4NWMwMjYwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHgwNDAxZjgxOSwgMHgwNDAxZjdmZCwgMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDE1LCAweDA0MDIwMDA0LCAweDU5YTgwMDM5LCAweDQ4MDIzYTA1LAorCTB4MDQwMWYwMGQsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTYsIDB4MDQwMjAwMGQsCisJMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTNmYSwKKwkweDAyMDFmODAwLCAweDAwMDIwODMxLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LAorCTB4NWMwMjYwMDAsIDB4NDk3YTM4MWMsIDB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsCisJMHgxYzAxZjAwMCwgMHg1OTFjMDQxNCwgMHg4NDAwMDU0MCwgMHg0ODAyM2MxNCwKKwkweDU5Y2MxMDBiLCAweDQ5MzNjODU3LCAweDQ5MWZjODU3LCAweDQ5MmZjODU3LAorCTB4NDgwM2M4NTcsIDB4NDgwYmM4NTcsIDB4OGMwODE1M2MsIDB4MDQwMDAwMDYsCisJMHg1OWE4MDAzOSwgMHg0ODAyM2EwNSwgMHg0OTdhMzgxYywgMHgwMjAxZjAwMCwKKwkweDAwMDIwOGI0LCAweDRkMzAwMDAwLCAweDQxMWU2MDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDg5OGIsIDB4NWMwMjYwMDAsIDB4NTkxYzA0MDYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwMDAyMDhiNCwgMHg1OTFjMDQwMywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDUwLCAweDA0MDIwMDBkLCAweDRkMzAwMDAwLAorCTB4NDExZTYwMDAsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsCisJMHg4MDAwMDA0MywgMHgwMjAxZjgwMCwgMHgwMDAyMDg1NSwgMHg1YzAyNjAwMCwKKwkweDQ5N2EzODFjLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDU5MWMwMjAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMGQsIDB4MDQwMDAwMTQsIDB4ODEyZTU5YzAsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg1OTFjMDIwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA0LCAweDA0MDIwMDExLCAweDU5MmMwMjBhLCAweDhjMDAwNTAyLAorCTB4MDQwMDAwMGUsIDB4NGEwMjM4MTIsIDB4MGZmZmZmZmYsIDB4NTkyYzAyMDgsCisJMHg4NDAwMDUxZSwgMHg0ODAyNWEwOCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKKwkweDQ4MDIzYTE0LCAweDA0MDFmMDIxLCAweDQyMDAwMDAwLCAweDAwMDAwMDA3LAorCTB4NDgwMjNhMTQsIDB4MDQwMWYwMWQsIDB4NTkyYzAyMGEsIDB4NDgwM2M4NTcsCisJMHg4YzAwMDUwMCwgMHgwNDAyMDAwYiwgMHg4YzAwMDUwMiwgMHgwNDAwMDdmNywKKwkweDU5MWMwNDE0LCAweDhjMDAwNTFjLCAweDA0MDIwN2ViLCAweDU5MWMwMDExLAorCTB4NDgwM2M4NTcsIDB4ODAwMDAxYzAsIDB4MDQwMDA3ZjAsIDB4MDQwMWY3ZTYsCisJMHg4YzA4MTUzYSwgMHgwNDAyMDdlZCwgMHg1OWNjMDAwYSwgMHg1OTJjMTgwZiwKKwkweDQ4MDNjODU3LCAweDQ4MGZjODU3LCAweDgwMGMwNTgwLCAweDA0MDAwN2U3LAorCTB4NTljYzAwMGEsIDB4NDgwM2M4NTcsIDB4NDgwMjM4MTYsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwNSwgMHg0ODAyM2ExNCwgMHgwMjAxZjAwMCwgMHgwMDEwOTAxYiwKKwkweDQ5MzNjODU3LCAweDRkMWMwMDAwLCAweDU5Y2MwMDAxLCAweDU5MzQxMDAyLAorCTB4ODAwODA1ODAsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4MDQwMjAwNDEsCisJMHg1OTMwMTQxOSwgMHgwMjAxZjgwMCwgMHgwMDEwOTFkOSwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDU5MWMxNDA2LCAweDgyMDgwNTgwLCAweDAwMDAwMDA3LAorCTB4MDQwMDAwMzgsIDB4ODIwODA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMzUsCisJMHg4MjA4MDU4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAzMiwgMHg1OTFjMDIwMiwKKwkweDgyMDAwZDgwLCAweDAwMDBmZmZmLCAweDA0MDAwMDA0LCAweDU5MzAxYTE5LAorCTB4ODAwYzA1ODAsIDB4MDQwMjAwMmIsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTUsCisJMHgwNDAwMDAyNiwgMHg0ZDMwMDAwMCwgMHg0ZDJjMDAwMCwgMHg0MTFlNjAwMCwKKwkweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwgMHgwNDAwMDAwMywgMHg0YTAyNjIxZCwKKwkweDAwMDAwMDAzLCAweDQyMDI4MDAwLCAweDAwMDAwMDAzLCAweDU5MmMwYTA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDRiZWUsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsCisJMHg1YzAyNTgwMCwgMHg0OTdhNjAwOCwgMHg0YTAyNjQwMywgMHgwMDAwMDA4NSwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAyLAorCTB4NDIwMDA4MDAsIDB4ODAwMDQwNGIsIDB4MDIwMWY4MDAsIDB4MDAwMjA4NTUsCisJMHg1YzAyNjAwMCwgMHgwNDAxZjAwMywgMHg1OWE4MDAzOSwgMHg0ODAyM2EwNSwKKwkweDQ5N2EzODFjLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LCAweDVjMDIzODAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGM1ODAwMDAsIDB4NGQyYzAwMDAsCisJMHg1OTMyNTgwOCwgMHg4MzM4MzU4MCwgMHgwMDAwMDAxNSwgMHgwNDAwMDAxMCwKKwkweDU5MzQyMjAwLCAweDg0MTAyNTAyLCAweDQ4MTI2YTAwLCAweDAyMDFmODAwLAorCTB4MDAxMDhkZjQsIDB4MDQwMDAwNjYsIDB4MDIwMWY4MDAsIDB4MDAxMDkzNjAsCisJMHgwNDAyMDAwNSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MzQ2LCAweDA0MDFmYTBkLCAweDA0MDFmMDc5LCAweDgzY2MxNDAwLAorCTB4MDAwMDAwMDgsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODMzNDFjMDAsCisJMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwODJmZiwgMHgwNDAyMDAxNSwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDBhLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4ODMzNDFjMDAsIDB4MDAwMDAwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDgyZmYsCisJMHgwNDAyMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwMWUxYiwgMHg1OTM0MjIwMCwKKwkweDU5Y2MxMDA3LCAweDgwMDgxMWMwLCAweDA0MDAwMDAzLCAweDQ4MGE2ODAxLAorCTB4ODQxMDI1NDIsIDB4ODQxMDI1MWEsIDB4NDgxMjZhMDAsIDB4MDQwMWYwNWYsCisJMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwKKwkweDVjMDI3ODAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjYzLCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4NTkzNDAyMDAsIDB4ODQwMDA1NTgsIDB4NDgwMjZhMDAsCisJMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDQ5MzY2MDA5LCAweDQ5N2E2MDA4LCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDEsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwYTc2NiwgMHgwMjAxZjgwMCwKKwkweDAwMTAzOTNlLCAweDA0MDAwMDExLCAweDQxNzgyODAwLCAweDQyMDAzMDAwLAorCTB4MDAwMDAwMDEsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMjksCisJMHgwMjAxZjgwMCwgMHgwMDEwYTI1MCwgMHg1YzAyODAwMCwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDA0LCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDRhMDI2NDIwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDksIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywKKwkweDAyMDFmODAwLCAweDAwMTA2NDcwLCAweDVjMDI2MDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDhkZjQsIDB4MDQwMDAwMjIsIDB4MDIwMWY4MDAsIDB4MDAxMDkzNjAsCisJMHgwNDAyMDAyMiwgMHgwNDAxZjliMSwgMHgwNDAxZjAxZCwgMHg0ZDNjMDAwMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDQyMDAwMDAwLAorCTB4MDAxMGI2NjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NTkzNDAyMDAsCisJMHg4NDAwMDU1OCwgMHg0ODAyNmEwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwMywKKwkweDQxNzgyODAwLCAweDQyMDAyMDAwLCAweDAwMDAwMDA1LCAweDRkNDAwMDAwLAorCTB4NGQ0NDAwMDAsIDB4NTkzNjhjMDMsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMjksCisJMHgwMjAxZjgwMCwgMHgwMDEwOTYyYSwgMHg1YzAyODgwMCwgMHg1YzAyODAwMCwKKwkweDVjMDI3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZTFiLCAweDAyMDFmODAwLAorCTB4MDAwMjA4YjQsIDB4MDQwMWYwMDIsIDB4MDQwMWZjYTksIDB4NWMwMjU4MDAsCisJMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0MTM4MDAwMCwKKwkweDgzMzgzNDgwLCAweDAwMDAwMDU2LCAweDAyMDIxODAwLCAweDAwMTAwNjE1LAorCTB4MGMwMWYwMDEsIDB4MDAxMDdjN2UsIDB4MDAxMDdjNzksIDB4MDAxMDdjN2UsCisJMHgwMDEwN2M3ZSwgMHgwMDEwN2M3ZSwgMHgwMDEwN2M3ZSwgMHgwMDEwN2M3NywKKwkweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LAorCTB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsCisJMHgwMDEwN2M3NywgMHgwMDEwN2M3NywgMHgwMDEwN2M3NywgMHgwMDEwN2M3NywKKwkweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LAorCTB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsCisJMHgwMDEwN2M3NywgMHgwMDEwN2M3NywgMHgwMDEwN2M3NywgMHgwMDEwN2M3NywKKwkweDAwMTA3YzdlLCAweDAwMTA3Yzc3LCAweDAwMTA3YzdlLCAweDAwMTA3YzdlLAorCTB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsCisJMHgwMDEwN2M3NywgMHgwMDEwN2M3ZSwgMHgwMDEwN2M3NywgMHgwMDEwN2M3NywKKwkweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LAorCTB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjN2UsCisJMHgwMDEwN2M3ZSwgMHgwMDEwN2M3NywgMHgwMDEwN2M3NywgMHgwMDEwN2M3NywKKwkweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LAorCTB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjN2UsIDB4MDAxMDdjNzcsCisJMHgwMDEwN2M3NywgMHgwMDEwN2M3ZSwgMHgwMDEwN2M3ZSwgMHgwMDEwN2M3NywKKwkweDAwMTA3YzdlLCAweDAwMTA3YzdlLCAweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LAorCTB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjN2UsIDB4MDAxMDdjNzcsCisJMHgwMDEwN2M3NywgMHgwMDEwN2M3NywgMHgwMDEwN2M3ZSwgMHgwMDEwN2M3NywKKwkweDAwMTA3Yzc3LCAweDAwMTA3Yzc3LCAweDAwMTA3YzdlLCAweDAwMTA3Yzc3LAorCTB4MDAxMDdjNzcsIDB4MDAxMDdjNzcsIDB4MDAxMDdjN2UsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0OTNhNjQwMywKKwkweDAyMDFmMDAwLCAweDAwMTA2NDcwLCAweDQ5MzNjODU3LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDEsIDB4NDkzYTY0MDMsIDB4MDIwMWYwMDAsIDB4MDAxMDY0NzAsCisJMHg1OTMwMDQwMywgMHg4MjAwMzQ4MCwgMHgwMDAwMDA1NiwgMHgwMjAyMTgwMCwKKwkweDAwMTAwNjE1LCAweDgzMzgzNTgwLCAweDAwMDAwMDEzLCAweDA0MDAwMDk2LAorCTB4ODMzODM1ODAsIDB4MDAwMDAwMjcsIDB4MDQwMjAwNGMsIDB4NDkzM2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwgMHgwMjAxZjgwMCwgMHgwMDEwOGVmMSwKKwkweDA0MDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTA4ZjA1LCAweDA0MDAwMDQxLAorCTB4NTkzMDA0MDMsIDB4ODIwMDBkODAsIDB4MDAwMDAwMjIsIDB4MDQwMjAwMzgsCisJMHgwNDAxZmM2MSwgMHgwNDAwMDAzYSwgMHgwNDAxZjAzYSwgMHgwMjAxZjgwMCwKKwkweDAwMTAxZTFiLCAweDQyMDAwODAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLAorCTB4MDAxMDQzYzcsIDB4MDQwMWY5MDEsIDB4NGQ0NDAwMDAsIDB4NTkzNjhjMDMsCisJMHg4MzQ0MDU4MCwgMHgwMDAwMDdmZSwgMHgwNDAyMDAwOCwgMHg1OWE4MTAyNiwKKwkweDg0MDgxNTQwLCAweDAyMDFmODAwLCAweDAwMTA0ZTBkLCAweDA0MDIwMDAyLAorCTB4ODQwODE1NGEsIDB4NDgwYjUwMjYsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMjksCisJMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwKKwkweDVjMDI3ODAwLCAweDgzNmMwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDBjLAorCTB4NTkzMjY4MDksIDB4NTkzNDAwMDgsIDB4ODAwMDAxYzAsIDB4MDQwMjAwMDgsCisJMHg1OTM2OGMwMywgMHg0OTMzYzg1NywgMHg0OTM3Yzg1NywgMHg0OTQ3Yzg1NywKKwkweDAyMDFmODAwLCAweDAwMTA0NDUxLCAweDA0MDFmMDBjLCAweDQyMDAwMDAwLAorCTB4MDAxMGI2NjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NDIwMDMwMDAsCiAJMHgwMDAwMDAxNSwgMHg0MTc4MjgwMCwgMHg0MjAwMjAwMCwgMHgwMDAwMDAwMywKLQkweDRkNDAwMDAwLCAweDRkNDQwMDAwLCAweDU5MzY4YzAzLCAweDQyMDI4MDAwLAotCTB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsCi0JMHg1YzAyODAwMCwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg4MzM4MDU4MCwKLQkweDAwMDAwMDE0LCAweDA0MDIwMDBjLCAweDU5MzAwNDAzLCAweDgyMDAwYzgwLAotCTB4MDAwMDAwNTMsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4ODIwMDA0ODAsCi0JMHgwMDAwMDA0MCwgMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODAzYzg1NywKLQkweDBjMDFmMDBlLCAweDgzMzgwNTgwLCAweDAwMDAwMDUzLCAweDA0MDAwMDBhLAotCTB4ODMzODA1ODAsIDB4MDAwMDAwNDgsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCi0JMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA1MCwgMHgwMjAyMDgwMCwKLQkweDAwMTAwNWQ4LCAweDFjMDFmMDAwLCAweDAwMTA4NWZmLCAweDAwMTA4NWZkLAotCTB4MDAxMDg1ZmQsIDB4MDAxMDg1ZmQsIDB4MDAxMDg1ZmQsIDB4MDAxMDg1ZmQsCi0JMHgwMDEwODVmZCwgMHgwMDEwODVmZCwgMHgwMDEwODVmZCwgMHgwMDEwODVmZCwKLQkweDAwMTA4NWZkLCAweDAwMTA4NjE2LCAweDAwMTA4NjE2LCAweDAwMTA4NjE2LAotCTB4MDAxMDg2MTYsIDB4MDAxMDg1ZmQsIDB4MDAxMDg2MTYsIDB4MDAxMDg1ZmQsCi0JMHgwMDEwODYxNiwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywKLQkweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAotCTB4MDIwMDAwMDAsIDB4MDAwMjA3N2QsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCi0JMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OTMwMDQwMiwgMHg0ODAyNWMwNiwKLQkweDRhMDI1YTA2LCAweDAwMDAwMDA2LCAweDQ5N2E1YzA5LCAweDAyMDFmODAwLAotCTB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDkxMmEsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKLQkweDAwMTA2YmJmLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDAyMDFmODAwLAotCTB4MDAxMDA1ZDgsIDB4NTkzMDAwMWMsIDB4ODAwMDAxYzAsIDB4MDIwMjA4MDAsCi0JMHgwMDEwOTg0ZSwgMHg1OTMwMDAwNCwgMHg4YzAwMDUzZSwgMHgwNDAyMDAyOSwKLQkweDU5MzI1ODA4LCAweDU5MmMwYzA4LCAweDU5Y2MyYTA4LCAweDgyMTQxZDAwLAotCTB4MDAwMDBjMDAsIDB4MDQwMDAwMDIsIDB4NTljYzE4MDksIDB4ODQwNDBkNTgsCi0JMHg0ODA2NWMwOCwgMHg4MjE0MzUwMCwgMHgwMDAwMGZmZiwgMHgwNDAyMDAyNywKLQkweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDIwMDgwLCAweDAyMDFmODAwLAotCTB4MDAwMjA4MmIsIDB4MDQwMjAwMDYsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsCi0JMHg1OTMwMDgxMSwgMHg4MDA0MDljMCwgMHgwNDAyMDk0YiwgMHg0YTAyNWEwNCwKLQkweDAwMDAwMTAzLCAweDQ4MDY1ODA3LCAweDQ4MGU1ODBhLCAweDQ4MTY1YzA5LAotCTB4NTkzMDBjMDIsIDB4NDgwNjVjMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyYzEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDliMiwgMHg1OWNjMDIwOCwgMHg4YzAwMDUxOCwKLQkweDAyMDIwMDAwLCAweDAwMTA5MWQxLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAotCTB4MDIwMWY4MDAsIDB4MDAxMDZmNjAsIDB4MDQwMDA3ZDYsIDB4NGQzYzAwMDAsCi0JMHg0MjAyNzgwMCwgMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwOGJlMywKLQkweDVjMDI3ODAwLCAweDA0MDFmN2NmLCAweDQ4MTdjODU3LCAweDQ4MGZjODU3LAotCTB4ODIxODA1MDAsIDB4MDAwMDAwZmYsIDB4MDQwMDAwMGUsIDB4NTkyYzAyMDQsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA0OCwKLQkweDA0MDIwMDA4LCAweDU5MmMwNDA3LCAweDgwMDAwMWMwLCAweDA0MDAwMDA1LAotCTB4MDIwMWY4MDAsIDB4MDAxMDk3M2YsIDB4MDIwMWYwMDAsIDB4MDAxMDk3ODcsCi0JMHg4MjE4MGQwMCwgMHgwMDAwMGMwMCwgMHgwNDAwMDAwNCwgMHg1OTM0MDIwMCwKLQkweDhjMDAwNTBlLCAweDA0MDIwMDMyLCAweDRhMDI1YTA2LCAweDAwMDAwMDAwLAotCTB4NDE3ODIwMDAsIDB4OGMxODM1MTAsIDB4MDQwMDAwMDcsIDB4NTljYzAwMGMsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHgwNDAwMDAwMiwgMHg0ODAzYzg1NywKLQkweDU5Y2MyMDBiLCAweDQ4MTI1ODBjLCAweDQxNzgwMDAwLCAweDhjMTgzNTEyLAotCTB4MDQwMDAwMDIsIDB4NTljYzAwMGEsIDB4NDgwMjU4MGIsIDB4ODAxMDBjMDAsCi0JMHgwNDAwMDdiOCwgMHg4MjA0MTQ4MCwgMHgwMDAwMDAxZCwgMHgwNDAwMTAwNiwKLQkweDU5MmMwNDA0LCAweDhjMDAwNTFlLCAweDA0MDAwMDBlLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMWMsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4ODNjY2E0MDAsCi0JMHgwMDAwMDAwYywgMHg4MzJjYWMwMCwgMHgwMDAwMDAwZCwgMHgwMjAxZjgwMCwKLQkweDAwMTA4YjlmLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLCAweDA0MDFmN2E1LAotCTB4NTkzMDAwMTEsIDB4NTkzMDE0MDIsIDB4NDgwYTVjMDYsIDB4NDgwMjU4MDcsCi0JMHg0ODBlNTgwYSwgMHg0ODE2NWMwOSwgMHgwMjAxZjgwMCwgMHgwMDEwOGI0OCwKLQkweDAyMDFmODAwLCAweDAwMTA4Yjg0LCAweDA0MDFmN2E2LCAweDU5MmMwMjBhLAotCTB4OGMwMDA1MDIsIDB4MDQwMDA3Y2QsIDB4NTkyYzAyMDgsIDB4OGMwMDA1MGUsCi0JMHgwNDAyMDdjYSwgMHg1OTMwMDAxMSwgMHg4MDBjMGQ4MCwgMHgwNDAwMDdjNywKLQkweDQ4MDNjODU3LCAweDQ4MGZjODU3LCAweDhjMTgzNTE0LCAweDAyMDAwMDAwLAotCTB4MDAxMDkyMGYsIDB4ODAwMDA1NDAsIDB4MDQwMDA3YzAsIDB4NDgwN2M4NTYsCi0JMHgwMjAxZjAwMCwgMHgwMDEwOTIwZiwgMHg1OTJjMDIwYSwgMHg4YzAwMDUwMiwKLQkweDA0MDAwNzgyLCAweDU5MzAwMDExLCAweDgwMDAwMWMwLCAweDA0MDAwNzdmLAotCTB4NTkyYzAyMDgsIDB4OGMwMDA1MGUsIDB4MDQwMjA3N2MsIDB4MDIwMWYwMDAsCi0JMHgwMDEwOTIwZiwgMHg1OWNjMjAwNiwgMHg1OWNjMjgwNywgMHgwNDAxZjAzNSwKLQkweDA0MDFmMDM0LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwMDFjLAotCTB4ODAwMDAxYzAsIDB4MDIwMjA4MDAsIDB4MDAxMDk4NGUsIDB4NTkzMjU4MDgsCi0JMHg1OTJjMGMwOCwgMHg0MTc4MjgwMCwgMHg0MTc4MTgwMCwgMHg4NDA0MGQ1OCwKLQkweDQ4MDY1YzA4LCAweDQxNzgzMDAwLCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAotCTB4MDQwMjAwMTgsIDB4MDIwMWY4MDAsIDB4MDAwMjA4MmIsIDB4MDQwMjAwMDcsCi0JMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg1OTMwMDgxMSwgMHg0ODA3Yzg1NywKLQkweDgwMDQwOWMwLCAweDA0MDIwOGFjLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAotCTB4NDgwNjU4MDcsIDB4NDgwZTU4MGEsIDB4NDgxNjVjMDksIDB4NDkzM2M4NTcsCi0JMHg1OTMwMGMwMiwgMHg0ODA2NWMwNiwgMHgwMjAxZjgwMCwgMHgwMDAyMDJjMSwKLQkweDAyMDFmODAwLCAweDAwMTA0OWIyLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLAotCTB4NTkyYzAyMGEsIDB4OGMwMDA1MDIsIDB4MDQwMDA3ZWEsIDB4NTkzMDAwMTEsCi0JMHg0ODAzYzg1NywgMHg4MDAwMDFjMCwgMHgwNDAwMDdlNiwgMHg1OTJjMDIwOCwKLQkweDhjMDAwNTBlLCAweDA0MDIwN2UzLCAweDAyMDFmMDAwLCAweDAwMTA5MjBmLAorCTB4MDIwMWY4MDAsIDB4MDAxMDk2MmEsIDB4NWMwMjg4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTBlYywgMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHgxYzAxZjAwMCwKKwkweDA0MDFmOGNlLCAweDA0MDFmN2ZhLCAweDgzMzgwNTgwLCAweDAwMDAwMDE0LAorCTB4MDQwMDAwMGMsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDZjYjQsCisJMHgwMjAyMDAwMCwgMHgwMDEwNzZmYiwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDAwMGVmLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAorCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDY4ZjYsIDB4NGQzYzAwMDAsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwgMHg1YzAyNzgwMCwKKwkweDQyMDAzMDAwLCAweDAwMDAwMDE2LCAweDQxNzgyODAwLCAweDRkNDAwMDAwLAorCTB4NGQ0NDAwMDAsIDB4NTkzNjhjMDMsIDB4NDIwMDIwMDAsIDB4MDAwMDAwMDksCisJMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHgwMjAxZjgwMCwgMHgwMDEwOTYyYSwKKwkweDVjMDI4ODAwLCAweDVjMDI4MDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjYzLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsIDB4MDAxMDhlZjEsCisJMHgwNDAyMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwMWUxYiwgMHgwNDAxZjg5ZiwKKwkweDU5MzQwYzAzLCAweDgyMDQwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwN2M4LAorCTB4NTlhODA4MjYsIDB4ODQwNDBkNDAsIDB4NDgwNzUwMjYsIDB4MDQwMWY3YzQsCisJMHgwMjAxZjgwMCwgMHgwMDEwOGYwNSwgMHgwNDAyMDAwMywgMHgwNDAxZjg5MywKKwkweDA0MDFmN2JmLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDMyLAorCTB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDIwYjIsIDB4MDQwMWY3YjgsCisJMHg1OTMwMDQwMywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAyMiwgMHgwNDAwMDg4NywKKwkweDA0MDFmN2IzLCAweDQ5MzNjODU3LCAweDQ4MDNjODU3LCAweDBjMDFmMDAxLAorCTB4MDAxMDdkYTAsIDB4MDAxMDdkYTAsIDB4MDAxMDdkYTAsIDB4MDAxMDdkYTAsCisJMHgwMDEwN2RhMCwgMHgwMDEwN2RhMCwgMHgwMDEwN2Q3YSwgMHgwMDEwN2Q3YSwKKwkweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLAorCTB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsCisJMHgwMDEwN2Q3YSwgMHgwMDEwN2Q3YSwgMHgwMDEwN2Q3YSwgMHgwMDEwN2Q3YSwKKwkweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLAorCTB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsCisJMHgwMDEwN2Q3YSwgMHgwMDEwN2Q3YSwgMHgwMDEwN2Q4MywgMHgwMDEwN2RhMCwKKwkweDAwMTA3ZDdhLCAweDAwMTA3ZGEwLCAweDAwMTA3ZGEwLCAweDAwMTA3ZDdhLAorCTB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsCisJMHgwMDEwN2RhMCwgMHgwMDEwN2RhMCwgMHgwMDEwN2Q3YSwgMHgwMDEwN2Q3YSwKKwkweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLAorCTB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsIDB4MDAxMDdkOTEsIDB4MDAxMDdkYTAsCisJMHgwMDEwN2Q3YSwgMHgwMDEwN2Q4YSwgMHgwMDEwN2Q3YSwgMHgwMDEwN2Q3YSwKKwkweDAwMTA3ZDdhLCAweDAwMTA3ZDhhLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLAorCTB4MDAxMDdkN2EsIDB4MDAxMDdkYTAsIDB4MDAxMDdkOGQsIDB4MDAxMDdkN2EsCisJMHgwMDEwN2Q3YywgMHgwMDEwN2RhMCwgMHgwMDEwN2Q3YSwgMHgwMDEwN2RhMCwKKwkweDAwMTA3ZGEwLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLAorCTB4MDAxMDdkN2EsIDB4MDAxMDdkYTAsIDB4MDAxMDdkN2EsIDB4MDAxMDdkN2EsCisJMHgwMDEwN2Q3YSwgMHgwMDEwN2RhMCwgMHgwMDEwN2Q3YSwgMHgwMDEwN2Q3YSwKKwkweDAwMTA3ZDdhLCAweDAwMTA3ZGEwLCAweDAwMTA3ZDdhLCAweDAwMTA3ZDdhLAorCTB4MDAxMDdkN2EsIDB4MDAxMDdkYTAsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsCisJMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwKKwkweDVjMDI1ODAwLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDUsIDB4NTlhODAwMzksIDB4NDgwMjYyMDUsIDB4NTlhODAwMzcsCisJMHg0ODAyNjIwNiwgMHgxYzAxZjAwMCwgMHg1OTMwMDgxZSwgMHg0OTc4MGEwNSwKKwkweDA0MDFmMDE0LCAweDAyMDFmODAwLCAweDAwMTA5MGVjLCAweDAyMDFmMDAwLAorCTB4MDAwMjA4YjQsIDB4MDIwMWY4MDAsIDB4MDAxMDIwYjIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjk4YywgMHgwNDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwKKwkweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDAyMDFmODAwLCAweDAwMTA2OGY2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsIDB4MDIwMWYwMDAsIDB4MDAxMDY5ODIsCisJMHg0OTMzYzg1NywgMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwgMHg1OWE4MDAzNywKKwkweDQ4MDI2MjA2LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDhkZjQsIDB4MDQwMDAwMmEsIDB4NGQyYzAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTM2MCwgMHgwNDAyMDAwYSwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDMxLCAweDQyMDAwODAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDkyMDQsIDB4NWMwMjgwMDAsIDB4MDQwMWYwMWMsIDB4NTkzMDBjMDYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAwNCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDExLCAweDA0MDIwMDBhLCAweDRhMDI1YTA2LCAweDAwMDAwMDMxLAorCTB4NGEwMjU4MGQsIDB4MDAwMDAwMDQsIDB4NGEwMjU4MGUsIDB4MDAwMDAwZmYsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwNDAxZjAwYywgMHg1OTJjMDQwNCwKKwkweDhjMDAwNTFlLCAweDA0MDAwMDA5LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAorCTB4NGEwMjU4MDUsIDB4MDEwMDAwMDAsIDB4NTkzMWQ4MjEsIDB4NThlZjQwMGIsCisJMHg1OGVjMDAwOSwgMHgwODAxZjgwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDU5MzQwNDAwLCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLAorCTB4ODIwMDM0ODAsIDB4MDAwMDAwMGMsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHg1OTMwMzQwMywgMHg4MjE4MGQ4MCwgMHgwMDAwMDA0ZCwgMHgwMjAwMDAwMCwKKwkweDAwMTA5MTU0LCAweDgyMTgwZDgwLCAweDAwMDAwMDMzLCAweDAyMDAwMDAwLAorCTB4MDAxMDkxMGYsIDB4ODIxODBkODAsIDB4MDAwMDAwMjgsIDB4MDIwMDAwMDAsCisJMHgwMDEwOGY0NiwgMHg4MjE4MGQ4MCwgMHgwMDAwMDAyOSwgMHgwMjAwMDAwMCwKKwkweDAwMTA4ZjVhLCAweDgyMTgwZDgwLCAweDAwMDAwMDFmLCAweDAyMDAwMDAwLAorCTB4MDAxMDc4YWYsIDB4ODIxODBkODAsIDB4MDAwMDAwNTUsIDB4MDIwMDAwMDAsCisJMHgwMDEwNzg4OCwgMHg4MjE4MGQ4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDU4ZSwKKwkweDgyMTgwZDgwLCAweDAwMDAwMDIyLCAweDAyMDAwMDAwLCAweDAwMTA3OGRjLAorCTB4ODIxODBkODAsIDB4MDAwMDAwMzUsIDB4MDIwMDAwMDAsIDB4MDAxMDc5ZDcsCisJMHg4MjE4MGQ4MCwgMHgwMDAwMDAzOSwgMHgwNDAwMDUzNiwgMHg4MjE4MGQ4MCwKKwkweDAwMDAwMDNkLCAweDAyMDAwMDAwLCAweDAwMTA3OTBjLCAweDgyMTgwZDgwLAorCTB4MDAwMDAwNDQsIDB4MDIwMDAwMDAsIDB4MDAxMDc5NDksIDB4ODIxODBkODAsCisJMHgwMDAwMDA0OSwgMHgwMjAwMDAwMCwgMHgwMDEwNzk5ZSwgMHg4MjE4MGQ4MCwKKwkweDAwMDAwMDQxLCAweDAyMDAwMDAwLCAweDAwMTA3OThhLCAweDgyMTgwZDgwLAorCTB4MDAwMDAwNDMsIDB4MDIwMDAwMDAsIDB4MDAxMDkyYTUsIDB4ODIxODBkODAsCisJMHgwMDAwMDA1MSwgMHgwMjAwMDAwMCwgMHgwMDEwOTMwYiwgMHg4MjE4MGQ4MCwKKwkweDAwMDAwMDA0LCAweDA0MDIwMDAzLCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAorCTB4ODMzODBkODAsIDB4MDAwMDAwMTUsIDB4MDQwMDAwMDYsIDB4ODMzODBkODAsCisJMHgwMDAwMDAxNiwgMHgwMjAyMDAwMCwgMHgwMDEwNzZmYiwgMHgwNDAxZjIyNiwKKwkweDRkMmMwMDAwLCAweDRkM2MwMDAwLCAweDBjMDFmODA0LCAweDVjMDI3ODAwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDdlNDIsIDB4MDAxMDdlNDYsCisJMHgwMDEwN2U0MiwgMHgwMDEwN2ViYiwgMHgwMDEwN2U0MiwgMHgwMDEwN2ZjNywKKwkweDAwMTA4MDYwLCAweDAwMTA3ZTQyLCAweDAwMTA3ZTQyLCAweDAwMTA4MDI5LAorCTB4MDAxMDdlNDIsIDB4MDAxMDgwM2IsIDB4NDkzM2M4NTcsIDB4NDk3YTYwMDcsCisJMHg1OTMwMDgwOCwgMHg1ODA0MDAwMCwgMHg0YTAwMGEwNCwgMHgwMDAwMDEwMywKKwkweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDQ5MzNjODU3LCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTlhODAwMTYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDA3NCwgMHgwNDAyMDA1YywgMHgwMjAxZjgwMCwKKwkweDAwMTBhMGIxLCAweDA0MDIwMDE2LCAweDA0MDFmODVjLCAweDAyMDFmODAwLAorCTB4MDAxMDhkZjQsIDB4MDQwMDAwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDkzNjAsCisJMHgwNDAyMDAwOSwgMHg0MTc4MDgwMCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA5MjA0LCAweDVjMDI4MDAwLAorCTB4MDQwMWYwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDFlMWIsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDcxMSwgMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA4ZGY0LCAweDA0MDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTA5MzYwLAorCTB4MDQwMjAwMDQsIDB4MDQwMWZmM2QsIDB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjYzLCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDU5MzQwMjAwLAorCTB4ODQwMDA1NTgsIDB4NDgwMjZhMDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDMsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTc2NiwgMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwODkyLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDQ5MzY2MDA5LAorCTB4NDk3YTYwMDgsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwMzkzZSwgMHgwNDAwMDAxMSwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDA0LCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LAorCTB4NGEwMjY0MjAsIDB4MDAwMDAwMDEsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDEsCisJMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHg0MTc4MjgwMCwKKwkweDAyMDFmODAwLCAweDAwMTBhMjUwLCAweDVjMDI4MDAwLCAweDA0MDFmMDA5LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYzcsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNjQ3MCwKKwkweDVjMDI2MDAwLCAweDA0MDFmZjA1LCAweDAyMDFmODAwLCAweDAwMTAxZTFiLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsIDB4MDQwMWZmMDAsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjBkZSwgMHg0OTMzYzg1NywgMHg1OTM0MDIwMCwKKwkweDhjMDAwNTAwLCAweDA0MDAwMDBkLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQzYmQsIDB4NWMwMjc4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMzkzZSwgMHgwNDAwMDAwNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTA0M2M3LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NTlhODA4MTYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwNzQsIDB4MDQwMDAwMGUsCisJMHg0ODA3Yzg1NywgMHg4MjA0MDU4MCwgMHgwMDAwMDEwMCwgMHgwNDAyMDBiNywKKwkweDU5Y2MwNDA4LCAweDQ4MDNjODU3LCAweDhjMDAwNTAwLCAweDA0MDAwMGIzLAorCTB4NTkzNDE0MDMsIDB4ODIwODA1ODAsIDB4MDAwMDA3ZmUsIDB4MDQwMDAwMDYsCisJMHgwNDAxZjBhZSwgMHg1OTM0MTQwMywgMHg4MjA4MDU4MCwgMHgwMDAwMDdmZSwKKwkweDA0MDIwMDFhLCAweDU5YTgwMDI2LCAweDhjMDAwNTA2LCAweDA0MDAwMDE1LAorCTB4NTljYzAwMDAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4NTlhODA4MTAsCisJMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwZCwKKwkweDAyMDFmODAwLCAweDAwMTAxZTFiLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2NTEsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg0MjAyZDgwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwM2YzNywKKwkweDA0MDFmYTljLCAweDA0MDFmMDRjLCAweDAyMDFmODAwLCAweDAwMTA0NDgwLAorCTB4NTkzNDE0MDMsIDB4ODIwODA1ODAsIDB4MDAwMDA3ZmMsIDB4MDQwMjAwMWYsCisJMHg0YTAyNjgwMiwgMHgwMGZmZmZmYywgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwKKwkweDA0MDAwMDEyLCAweDAyMDFmODAwLCAweDAwMTA5MzYwLCAweDA0MDIwMDBmLAorCTB4MDQwMWY4YTksIDB4NDE3ODA4MDAsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsCisJMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTIwNCwgMHg1YzAyODAwMCwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA0M2M3LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHgwMjAxZjgwMCwgMHgwMDEwMWUxYiwKKwkweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDU5YTgwMDZmLCAweDhjMDAwNTAyLAorCTB4MDQwMDAwMTEsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMGQsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAxMCwgMHgwNDAyMDAwOSwgMHg1OTM0MDAwMiwgMHg4MjAwMDUwMCwKKwkweDAwZmYwMDAwLCAweDgyMDAwNTgwLCAweDAwZmYwMDAwLCAweDA0MDAwMDA2LAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDRhZGEsCisJMHgwNDAyMDA1YSwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwNDAwMDA1YiwKKwkweDAyMDFmODAwLCAweDAwMTA5MzYwLCAweDA0MDIwMDA1LCAweDU5MmMwNDA0LAorCTB4OGMwMDA1MWMsIDB4MDQwMjA3YzksIDB4MDQwMWY4NzcsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDAzLCAweDAyMDFmMDAwLAorCTB4MDAxMDY0NzAsIDB4NTljYzA0MDgsIDB4OGMwMDA1MTgsIDB4MDQwMDAwMTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTBhYiwgMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwKKwkweDA0MDAwMDA0LCAweDU5Y2MwNDA4LCAweDhjMDAwNTE2LCAweDA0MDIwN2IzLAorCTB4NTlhODAwMjYsIDB4ODQwMDA1NGEsIDB4NDgwMzUwMjYsIDB4NTlhODAwMTAsCisJMHg4NDAwMDU3MCwgMHg0ODAzODgzMiwgMHgwNDAxZjdhYywgMHg0MjAwMTAwMCwKKwkweDAwMDAwMGVmLCAweDQ4MGI1MDEwLCAweDQ5N2I4ODMwLCAweDg0MDgxNTcwLAorCTB4NDgwYjg4MzIsIDB4NTljNDA4MDIsIDB4ODQwNDBkNGMsIDB4NDgwNzg4MDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTBkNSwgMHg1OWE4MDAyNiwgMHg4NDAwMDU0OCwKKwkweDQ4MDM1MDI2LCAweDAyMDFmODAwLCAweDAwMTBhMWVjLCAweDA0MDIwNzliLAorCTB4NTlhODAwMjYsIDB4ODQwMDA1NGMsIDB4NDgwMzUwMjYsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0M2JkLCAweDQyMDAwMDAwLCAweDAwMDAwMGU4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDU5YjksIDB4MDIwMDA4MDAsIDB4MDAxMDQzZmMsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg0OTM2NjAwOSwgMHg1OTM0MDIwMCwKKwkweDg0MDAwNTFhLCAweDQ4MDI2YTAwLCAweDQyMDAwODAwLCAweDAwMDAwMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQzYzcsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMiwKKwkweDAyMDFmMDAwLCAweDAwMTA2NDcwLCAweDA0MDFmZTJjLCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMGEsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MGEsCisJMHgwNDAwMDdhYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2M3LCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDQ5MzNjODU3LAorCTB4ODAwMDM1NDAsIDB4MDQwMDAwMDUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHg4MDE4MzFjMCwgMHgwNDAyMDAwZSwKKwkweDU5MzAyMDA4LCAweDgwMTAyMWMwLCAweDA0MDAwMDA0LCAweDU4MTAwNDA0LAorCTB4OGMwMDA1MWUsIDB4MDQwMjAwMDgsIDB4NTkzNDFjMDMsIDB4NDIwMDIwMDAsCisJMHgwMDAwMDAwNCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAxMiwgMHgwMjAxZjgwMCwKKwkweDAwMTAzOGM3LCAweDAyMDFmODAwLCAweDAwMTAxZTFiLCAweDAyMDFmMDAwLAorCTB4MDAwMjA4YjQsIDB4NGM1YzAwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTQzOSwgMHg1YzAyNTgwMCwgMHg1OWNjMDAwOCwKKwkweDQ4MDAyODA1LCAweDU5Y2MwMDA5LCAweDQ4MDAyODA2LCAweDQ5NzgyODA3LAorCTB4NDk3ODI4MDgsIDB4NDk3ODI4MDksIDB4NDk3ODI4MGEsIDB4NTljYzAwMTMsCisJMHg4YzAwMDUzZSwgMHgwNDAwMDAwOSwgMHg1OWNjMDQxNCwgMHg5MDAwMDFjMCwKKwkweDU5Y2NiYzE1LCAweDgwNWMwNTQwLCAweDQ4MDAyODA3LCAweDU5Y2MwNDE2LAorCTB4OTAwMDAxYzAsIDB4NDgwMDI4MDgsIDB4NTljYzAwMTcsIDB4OGMwMDA1M2UsCisJMHgwNDAwMDAwOSwgMHg1OWNjMDQxOCwgMHg5MDAwMDFjMCwgMHg1OWNjYmMxOSwKKwkweDgwNWMwNTQwLCAweDQ4MDAyODA5LCAweDU5Y2MwNDFhLCAweDkwMDAwMWMwLAorCTB4NDgwMDI4MGEsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwgMHgwNDAyMDA0OCwKKwkweDU5YTgwMDZmLCAweDhjMDAwNTAyLCAweDA0MDAwMDE1LCAweDAyMDFmODAwLAorCTB4MDAxMDRlMGQsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMjAwMDksCisJMHg1OTM0MDAwMiwgMHg4MjAwMDUwMCwgMHgwMGZmMDAwMCwgMHg4MjAwMDU4MCwKKwkweDAwZmYwMDAwLCAweDA0MDAwMDBhLCAweDQyMDAxMDAwLCAweDAwMDAwMDA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDRhZGEsIDB4MDQwMDAwMDUsIDB4NTlhODAwNmYsCisJMHg4NDAwMDU0YywgMHg0ODAzNTA2ZiwgMHgwNDAxZjAzMSwgMHg4MzZjMDU4MCwKKwkweDAwMDAwMDAzLCAweDA0MDIwMDBiLCAweDU5MzAwMDA4LCAweDgwMDAwNTQwLAorCTB4MDQwMjAwMDgsIDB4NTkzNDFjMDMsIDB4NDIwMDIwMDAsIDB4MDAwMDAwMDYsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAxMywgMHgwMjAxZjgwMCwgMHgwMDEwMzhjNywKKwkweDAyMDFmODAwLCAweDAwMTA0NGUxLCAweDA0MDFmZWI4LCAweDA0MDFmYTFkLAorCTB4MDQwMjAwMWYsIDB4NTkzNDA0MDQsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMWMsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywKKwkweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDExLCAweDAyMDFmODAwLAorCTB4MDAxMDkzNjAsIDB4MDQwMjAwMGEsIDB4NDE3ODA4MDAsIDB4NGQ0MDAwMDAsCisJMHg0MjAyODAwMCwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTIwNCwKKwkweDVjMDI4MDAwLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDRhMDI1YTA0LAorCTB4MDAwMDAxMDMsIDB4NGEwMjU4MDUsIDB4MDIwMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMWUxYiwgMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0YTgzLCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDA3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDkzNjAsIDB4MDQwMjAwMDQsIDB4MDQwMWZkOGIsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHgwNDAxZmQ4OCwgMHg4MDAwMDU4MCwKKwkweDU5YTgwMDZmLCAweDhjMDAwNTBjLCAweDA0MDAwMDA1LCAweDg0MDAwNTBjLAorCTB4NDgwMzUwNmYsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZmNjAsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDE0LCAweDA0MDIwMDBiLCAweDQyMDAwODAwLCAweDAwMDAwMDBiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQzYzcsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCisJMHg0YTAyNjQwMywgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwNjQ3MCwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDA0MDFmNzRkLCAweDQ5MzNjODU3LAorCTB4NDAwMDMwMDAsIDB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsCisJMHgwNDAyMDAwYSwgMHg4MjE4MzU4MCwgMHgwMDAwMDAwYiwgMHgwNDAyMDAwNSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTA0M2M3LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDEsCisJMHgwNDAxZjczYiwgMHg0ODAzYzg1NywgMHg0ZDJjMDAwMCwgMHg0ZDNjMDAwMCwKKwkweDBjMDFmODA0LCAweDVjMDI3ODAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAorCTB4MDAxMDdlNDIsIDB4MDAxMDgwNmYsIDB4MDAxMDdlNDIsIDB4MDAxMDgwYzQsCisJMHgwMDEwN2U0MiwgMHgwMDEwODEzMiwgMHgwMDEwODA2MCwgMHgwMDEwN2U0MiwKKwkweDAwMTA3ZTQyLCAweDAwMTA4MTUyLCAweDAwMTA3ZTQyLCAweDAwMTA4MTYyLAorCTB4NDkzM2M4NTcsIDB4NGQxYzAwMDAsIDB4NTkzMDE0MDMsIDB4ODIwODA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAwMDAwOCwgMHg4MjA4MTU4MCwgMHgwMDAwMDAxZSwKKwkweDA0MDIwMDAzLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LCAweDVjMDIzODAwLAorCTB4MWMwMWYwMDAsIDB4MDQwMWZmNWEsIDB4MDQwMWY3ZmQsIDB4NDkzM2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwNDAwMDAwYiwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MzYwLCAweDA0MDIwMDA4LCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkzNDYsIDB4MDQwMWZkMmMsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDhiNCwgMHgwNDAxZjhmNSwgMHgwNDAyMDAzMCwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0M2JkLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDFkZTIsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NjMsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHg1OTM0MDIwMCwgMHg4NDAwMDU1OCwgMHg0ODAyNmEwMCwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDAyLCAweDQyMDAzMDAwLCAweDAwMDAwMDAzLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE3NjYsIDB4MDIwMWY4MDAsIDB4MDAxMDM5M2UsCisJMHgwNDAwMDAxMSwgMHg0ZDQwMDAwMCwgMHg0MTc4MjgwMCwgMHg0MjAwMzAwMCwKKwkweDAwMDAwMDA1LCAweDQyMDI4MDAwLCAweDAwMDAwMDI5LCAweDAyMDFmODAwLAorCTB4MDAxMGEyNTAsIDB4NWMwMjgwMDAsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwNCwgMHg0YTAyNjQyMCwgMHgwMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAorCTB4MDAxMDQzYzcsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjQ3MCwgMHgwNDAxZjdmNywgMHg1OWNjMDQwNywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA5LCAweDA0MDIwMDBhLCAweDU5MzQwNDEyLCAweDgyMDAwNTAwLAorCTB4MDAwMDAwZmYsIDB4MDQwMDAwMGMsIDB4ODAwMDAwNDAsIDB4NDgwMjZjMTIsCisJMHg0YTAyNjIwNiwgMHgwMDAwMDAwYSwgMHgwNDAxZjdlYSwgMHg1OWNjMDIwNywKKwkweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDgyMDAwNTgwLCAweDAwMDAxOTAwLAorCTB4MDQwMDA3YzIsIDB4MDQwMWZjZTUsIDB4ODAwMDA1ODAsIDB4MDQwMWY2YzQsCisJMHg0OTMzYzg1NywgMHg1OWE4MDAzMiwgMHg4MDAwMDU0MCwgMHgwNDAwMDAxNSwKKwkweDU5MzQwNDAzLCAweDgyMDAwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwMDExLAorCTB4NTlhODAwMTAsIDB4ODAwMDAwMDAsIDB4NDgwMzUwMTAsIDB4NDE3YTc4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDNiZCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywKKwkweDAyMDFmODAwLCAweDAwMTA0M2M3LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDY0NzAsCisJMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwNDAwMDAxMSwgMHgwMjAxZjgwMCwKKwkweDAwMTA5MzYwLCAweDA0MDIwMDBlLCAweDRjNTgwMDAwLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsIDB4MDAxMDkzNDYsIDB4NWMwMGIwMDAsCisJMHgwNDAxZmNiZSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2M3LCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDA0MDFmY2I3LAorCTB4NTljYzM0MDcsIDB4ODIxODM1MDAsIDB4MDAwMDAwZmYsIDB4ODIxODA1ODAsCisJMHgwMDAwMDAwNSwgMHgwNDAwMDAxYywgMHg4MjE4MDU4MCwgMHgwMDAwMDAwYiwKKwkweDA0MDAwMDE2LCAweDU5Y2MwMjA3LCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLAorCTB4MDQwMjAwMDQsIDB4ODIxODA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMDAwMTIsCisJMHg4MjAwMDU4MCwgMHgwMDAwMTkwMCwgMHgwNDAyMDAwYywgMHg4MjE4MDU4MCwKKwkweDAwMDAwMDA5LCAweDA0MDAwMDBjLCAweDQyMDAwODAwLCAweDAwMDAwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDQzYzcsIDB4MDIwMWY4MDAsIDB4MDAxMDFlMWIsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmNjc3LCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDU5MzI1ODA4LAorCTB4MDQwMDAwMDgsIDB4NTkyYzAyMDQsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMzksCisJMHgwNDAwMDdmNiwgMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwgMHgwNDAyMDdmMywKKwkweDU5MzQwNDAzLCAweDgyMDAwNTgwLCAweDAwMDAwN2ZlLCAweDA0MDIwMDA3LAorCTB4NTlhODAwMjYsIDB4ODQwMDA1NDAsIDB4NDgwMzUwMjYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDA1OSwgMHgwNDAxZjdlOSwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxZGUyLCAweDQyMDAzMDAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLAorCTB4MDAxMGE3NjYsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NjMsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHgwNDAxZjdkZCwgMHg0OTMzYzg1NywgMHgwNDAxZjg0ZCwKKwkweDA0MDIwMDBiLCAweDQyMDAwODAwLCAweDAwMDAwMDA1LCAweDAyMDFmODAwLAorCTB4MDAxMDQzYzcsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwMywgMHgwMjAxZjAwMCwgMHgwMDEwNjQ3MCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA0M2M3LCAweDAyMDFmODAwLAorCTB4MDAxMDkzNjAsIDB4MDQwMjAwMGEsIDB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwOTM0NiwgMHg1YzAwYjAwMCwKKwkweDA0MDFmYzVhLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDA0MDFmYzU3LAorCTB4ODAwMDA1ODAsIDB4MDQwMWY2MzYsIDB4NDkzM2M4NTcsIDB4MDQwMWY4MmQsCisJMHgwNDAyMDAwYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwOSwgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2M3LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLAorCTB4MDAwMDAwMDUsIDB4MDIwMWYwMDAsIDB4MDAxMDY0NzAsIDB4NDIwMDAwMDAsCisJMHgwMDAwMDAwMSwgMHgwNDAxZjYyNiwgMHg0OTMzYzg1NywgMHgwNDAxZjgxZCwKKwkweDA0MDIwMDBiLCAweDQyMDAwODAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLAorCTB4MDAxMDQzYzcsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwNjQ3MCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmNjE2LCAweDQ5MzNjODU3LCAweDU5Y2MwNDA3LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMDksIDB4NTljYzAyMDcsCisJMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHg4MjAwMGQ4MCwgMHgwMDAwMmEwMCwKKwkweDA0MDAwMDAzLCAweDgyMDAwZDgwLCAweDAwMDAxZTAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg0OTMzYzg1NywgMHg0ZDQwMDAwMCwgMHg0YzU4MDAwMCwgMHg1OWE4MDAyNiwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAzLCAweDQ4MDM1MDI2LCAweDA0MDFmODVjLAorCTB4MDQwMDAwMzgsIDB4NGQzNDAwMDAsIDB4NGQ0NDAwMDAsIDB4NTlhODAwMjYsCisJMHg4NDAwMDU1MiwgMHg0ODAzNTAyNiwgMHgwMjAxZjgwMCwgMHgwMDEwMzkzZSwKKwkweDA0MDAwMDBjLCAweDQyMDI4MDAwLCAweDAwMDAwMDJhLCAweDQyMDI4ODAwLAorCTB4MDAwMGZmZmYsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDIsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTI1OCwgMHg1OWE4MDgwNSwgMHg4NDA0MGQ0NCwgMHg0ODA3NTAwNSwKKwkweDQyMDI4MDAwLCAweDAwMDAwMDJhLCAweDRkM2MwMDAwLCAweDQyMDI3ODAwLAorCTB4MDAwMDAyMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDFkOTAsIDB4NWMwMjc4MDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjY2MywgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwKKwkweDAyMDFmODAwLCAweDAwMTAxYmYwLCAweDQyMDBiMDAwLCAweDAwMDAwMDEwLAorCTB4NDIwMjg4MDAsIDB4MDAwMDA3ZjAsIDB4NGQyYzAwMDAsIDB4ODM0NDA1ODAsCisJMHgwMDAwMDdmZSwgMHgwNDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwNDQ1MSwKKwkweDgxNDY4ODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2Y5LCAweDVjMDI1ODAwLAorCTB4NTljYzA0MDgsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMDQsIDB4NTlhODAwMjYsCisJMHg4NDAwMDUxMiwgMHg0ODAzNTAyNiwgMHg1YzAyODgwMCwgMHg1YzAyNjgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0NDgwLCAweDRhMDI2ODAyLCAweDAwZmZmZmZlLAorCTB4NTlhODA4MjYsIDB4ODQwNDBkNTAsIDB4NTljYzAwMTMsIDB4OGMwMDA1M2UsCisJMHgwNDAwMDAwMywgMHg4YzAwMDUzNiwgMHgwNDAwMDAwNCwgMHg1OWNjMDAxNywKKwkweDhjMDAwNTM2LCAweDA0MDIwMDAyLCAweDg0MDQwZDEwLCAweDQ4MDc1MDI2LAorCTB4NTljYzA4MDAsIDB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsIDB4NDgwNzUwMTAsCisJMHg4MDA0MDExMCwgMHg0ODAzNTAxZCwgMHg0ODAzODg4MSwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZTBkLCAweDA0MDAwMDA3LCAweDU5Y2MwMDA5LCAweDQ4MDM1MDM1LAorCTB4NTljYzAwMGEsIDB4NDgwMzUwMzYsIDB4MDIwMWY4MDAsIDB4MDAxMDkwYWIsCisJMHg1YzAwYjAwMCwgMHg1YzAyODAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDRjNTgwMDAwLCAweDU5YTgwMDEwLCAweDgyMDAwNTAwLCAweDAwZmZmZjAwLAorCTB4MDQwMDAwMjIsIDB4NTljYzEwMDAsIDB4ODIwODE1MDAsIDB4MDBmZmZmMDAsCisJMHg4MDA4MDU4MCwgMHgwNDAwMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjYzOSwKKwkweDA0MDFmMDE2LCAweDgzY2MxNDAwLCAweDAwMDAwMDBiLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMDIsIDB4ODMzNDFjMDAsIDB4MDAwMDAwMDYsIDB4MDQwMWY5MDQsCisJMHgwNDAwMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjYzYSwgMHgwNDAxZjAwYiwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDBkLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4ODMzNDFjMDAsIDB4MDAwMDAwMDgsIDB4MDQwMWY4ZjksIDB4MDQwMDAwMDcsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjYzYiwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NTljYzAyMDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsCisJMHgwNDAyMDAxNiwgMHg1OWNjMDQwNywgMHg4MjAwMDU4MCwgMHgwMDAwMDgwMCwKKwkweDA0MDIwMDEyLCAweDU5Y2MwMjA3LCAweDhjMDAwNTFhLCAweDA0MDAwMDBkLAorCTB4ODIwMDA1MDAsIDB4MDAwMDBmMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMDAsCisJMHgwNDAyMDAwOCwgMHg1OWNjMDIwYSwgMHg4YzAwMDUwOCwgMHgwNDAyMDAwMywKKwkweDhjMDAwNTBhLCAweDA0MDAwMDAzLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg0OTQzYzg1NywgMHg0OTNmYzg1NywgMHg0YzVjMDAwMCwgMHg0ZDMwMDAwMCwKKwkweDRkMzQwMDAwLCAweDRkMmMwMDAwLCAweDRkMzgwMDAwLCAweDQxMzBiODAwLAorCTB4NDIwMjYwMDAsIDB4MDAxMGNmYzAsIDB4NTlhODAwMGUsIDB4ODE2NDA0ODAsCisJMHgwNDAyMTBjMSwgMHg4ZDNlN2QxMiwgMHgwNDAwMDAwNCwgMHg0MDVjMDAwMCwKKwkweDgxMzAwNTgwLCAweDA0MDAwMGI3LCAweDU5MzAwNDA2LCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMTIsIDB4MDQwMjEwMTUsIDB4NTkzMjY4MDksIDB4MGMwMWYwMDEsCisJMHgwMDEwODJmNCwgMHgwMDEwODI1ZiwgMHgwMDEwODI3OCwgMHgwMDEwODI4MywKKwkweDAwMTA4MjU4LCAweDAwMTA4MjcxLCAweDAwMTA4MmFjLCAweDAwMTA4MmY0LAorCTB4MDAxMDgyNTYsIDB4MDAxMDgyYzAsIDB4MDAxMDgyY2YsIDB4MDAxMDgyNTYsCisJMHgwMDEwODI1NiwgMHgwMDEwODI1NiwgMHgwMDEwODI1NiwgMHgwMDEwODJmNCwKKwkweDAwMTA4MmU1LCAweDAwMTA4MmRkLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAorCTB4OGQzZTdkMTgsIDB4MDQwMDAwMDMsIDB4OGQzZTdkMTYsIDB4MDQwMDAwMDQsCisJMHg1OTMwMDQyMCwgMHg4YzAwMDUwMCwgMHgwNDAyMDA5NiwgMHg1OTMwMDQwMywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDQzLCAweDA0MDAwMDkyLCAweDAyMDFmODAwLAorCTB4MDAxMDhlZjEsIDB4MDIwMDA4MDAsIDB4MDAxMDFlMWIsIDB4MDIwMWY4MDAsCisJMHgwMDEwOGYwNSwgMHgwMjAwMDgwMCwgMHgwMDEwN2RhNiwgMHg4ZDNlN2QwNiwKKwkweDA0MDAwMDg2LCAweDAyMDFmODAwLCAweDAwMTA5MDlkLCAweDA0MDAwMDg1LAorCTB4MDQwMWYwODIsIDB4OGQzZTdkMTgsIDB4MDQwMDAwMDMsIDB4OGQzZTdkMTYsCisJMHgwNDAwMDAwNCwgMHg1OTMwMDQyMCwgMHg4YzAwMDUwMCwgMHgwNDAyMDA3ZCwKKwkweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDc3LAorCTB4NDk0MjVhMDYsIDB4NDk3YTVjMDksIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsCisJMHgwMjAxZjgwMCwgMHgwMDEwOGVlNywgMHgwNDAxZjA3MCwgMHg4MTM2NjljMCwKKwkweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDhkM2U3ZDA2LCAweDA0MDAwMDA0LAorCTB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsIDB4MDQwMjAwNmEsIDB4NTkzMDAwMDQsCisJMHg4NDAwMDU1YywgMHg0ODAyNjAwNCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA0LCAweDAyMDAwODAwLCAweDAwMTAwZWU0LCAweDU5MzI1ODA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDhkZjQsIDB4MDQwMDAwNWMsIDB4NGEwMjVhMDQsCisJMHgwMDAwMDEwMywgMHg1OTMwMDQwMiwgMHg0ODAyNWMwNiwgMHg1OTJjMDQwOCwKKwkweDhjMDAwNTEyLCAweDA0MDAwMDA2LCAweDRkMmMwMDAwLCAweDU5MmU1ODA5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4NDMsIDB4NWMwMjU4MDAsIDB4NDk0MjVhMDYsCisJMHg0OTdhNWMwOSwgMHgwMjAxZjgwMCwgMHgwMDEwOTM2NSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA4ZWU3LCAweDA0MDFmMDQ3LAorCTB4OGMwMDA1MTgsIDB4MDQwMDAwNDcsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwNCwgMHgwMjAwMDgwMCwgMHgwMDEwMGVlNCwgMHg1OTMyNTgwOCwKKwkweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDNjLCAweDQ5NDI1YTA2LAorCTB4NDk3YTVjMDksIDB4MDIwMWY4MDAsIDB4MDAxMGE0YWUsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTM2NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwNDAxZjAzMywKKwkweDAyMDFmODAwLCAweDAwMTA2MDBlLCAweDA0MDAwMDMyLCAweDU5MzAwMjAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMGVlNCwgMHgwNDAxZjAyYiwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0NywKKwkweDAyMDFmODAwLCAweDAwMDIwOGQ4LCAweDA0MDFmMDI2LCAweDU5MzAwMjAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDIwMDA4MDAsIDB4MDAxMDBlZTQsCisJMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwNDAwMDAxYiwKKwkweDQ5NDI1YTA2LCAweDQ5N2E1YzA5LCAweDAyMDFmODAwLCAweDAwMDIwMzgxLAorCTB4MDQwMWYwMTYsIDB4ODMzYzA1MDAsIDB4MDAwMDE4MDAsIDB4MDQwMDAwMTUsCisJMHg4ZDNlN2QxNiwgMHgwNDAyMDAxMywgMHg1OTMyNTgxNywgMHgwMjAxZjgwMCwKKwkweDAwMTAwODQzLCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LAorCTB4MDIwMDA4MDAsIDB4MDAxMDBlZTQsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwOGRmNCwgMHgwNDAwMDAwNSwgMHg0OTQyNWEwNiwgMHg0OTdhNWMwOSwKKwkweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA3Njk4LAorCTB4ODMzMjY0MDAsIDB4MDAwMDAwMjQsIDB4NDE1ODAwMDAsIDB4ODEzMDA0ODAsCisJMHgwNDAwMTczZSwgMHg1YzAyNzAwMCwgMHg1YzAyNTgwMCwgMHg1YzAyNjgwMCwKKwkweDVjMDI2MDAwLCAweDVjMDBiODAwLCAweDFjMDFmMDAwLCAweDVjMDAwMDAwLAorCTB4NGMwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NDgwYmM4NTcsIDB4NDgwZmM4NTcsCisJMHg0ODViYzg1NywgMHg1MDA4MDgwMCwgMHg1MDBjMDAwMCwgMHg4MDA0MjU4MCwKKwkweDA0MDIwMDA3LCAweDgwMDgxMDAwLCAweDgwMGMxODAwLCAweDgwNThiMDQwLAorCTB4MDQwMjA3ZjksIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsCisJMHg0ODA3Yzg1NywgMHg0ODBiYzg1NywgMHg0ODBmYzg1NywgMHg4MDA0MDQ4MCwKKwkweDA0MDAxMDA2LCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDgyMDQwZDQwLAorCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NDE3ODAwMDAsIDB4MDQwMWY3ZmMsCisJMHg4MzM4MDQ4MCwgMHgwMDAwMDA1MywgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwKKwkweDgzMzgwNDgwLCAweDAwMDAwMDRiLCAweDAyMDAxODAwLCAweDAwMTAwNjE1LAorCTB4MGMwMWYwMDEsIDB4MDAxMDgzMmYsIDB4MDAxMDgzMmYsIDB4MDAxMDgzMmYsCisJMHgwMDEwODMyZiwgMHgwMDEwODMyZCwgMHgwMDEwODMyZCwgMHgwMDEwODMyZCwKKwkweDAwMTA4MzJmLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDQ5M2JjODU3LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMGQsIDB4NDkzYTY0MDMsIDB4NDIwMDA4MDAsCisJMHg4MDAwMDAwMCwgMHgwMjAxZjAwMCwgMHgwMDAyMDg1NSwgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDEzLCAweDA0MDIwMDA4LCAweDU5MzAwNDAzLCAweDgyMDAwNTgwLAorCTB4MDAwMDAwNTAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDhiNCwgMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwgMHgwMDAwMDAyNywKKwkweDA0MDIwMDMwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2OGY2LAorCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDFkZTIsCisJMHg1YzAyNzgwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjY2MywgMHgwMjAxZjgwMCwKKwkweDAwMTBhODZlLCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLAorCTB4MDAxMDhkZjQsIDB4NDkyZmM4NTcsIDB4MDQwMDAwMGQsIDB4NGEwMjVhMDQsCisJMHgwMDAwMDEwMywgMHg1OTMwMGMwMiwgMHg0ODA2NWMwNiwgMHg0YTAyNWEwNiwKKwkweDAwMDAwMDI5LCAweDQ5N2E1YzA5LCAweDU5MmMwYzA4LCAweDg0MDQwZDUwLAorCTB4NDgwNjVjMDgsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4NWMwMjU4MDAsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAxNSwgMHg0MTc4MjgwMCwgMHg0MjAwMjAwMCwKKwkweDAwMDAwMDAzLCAweDRkNDAwMDAwLCAweDRkNDQwMDAwLCAweDU5MzY4YzAzLAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDk2MmEsCisJMHg1YzAyODgwMCwgMHg1YzAyODAwMCwgMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDBkLCAweDU5MzAwNDAzLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwNTMsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHg4MjAwMDQ4MCwgMHgwMDAwMDA0MCwgMHgwMjAwMTgwMCwgMHgwMDEwMDYxNSwKKwkweDQ5MzNjODU3LCAweDQ4MDNjODU3LCAweDBjMDFmMDBlLCAweDgzMzgwNTgwLAorCTB4MDAwMDAwNTMsIDB4MDQwMDAwMGEsIDB4ODMzODA1ODAsIDB4MDAwMDAwNDgsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDUwLCAweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDFjMDFmMDAwLAorCTB4MDAxMDgzYTUsIDB4MDAxMDgzYTMsIDB4MDAxMDgzYTMsIDB4MDAxMDgzYTMsCisJMHgwMDEwODNhMywgMHgwMDEwODNhMywgMHgwMDEwODNhMywgMHgwMDEwODNhMywKKwkweDAwMTA4M2EzLCAweDAwMTA4M2EzLCAweDAwMTA4M2EzLCAweDAwMTA4M2JjLAorCTB4MDAxMDgzYmMsIDB4MDAxMDgzYmMsIDB4MDAxMDgzYmMsIDB4MDAxMDgzYTMsCisJMHgwMDEwODNiYywgMHgwMDEwODNhMywgMHgwMDEwODNiYywgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2OGY2LAorCTB4MDIwMWY4MDAsIDB4MDAxMDhkZjQsIDB4MDIwMDAwMDAsIDB4MDAwMjA4YjQsCisJMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywKKwkweDU5MzAwNDAyLCAweDQ4MDI1YzA2LCAweDRhMDI1YTA2LCAweDAwMDAwMDA2LAorCTB4NDk3YTVjMDksIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4NWMwMjU4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwOGVlNywgMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwKKwkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2OGY2LCAweDAyMDFmMDAwLAorCTB4MDAwMjA4YjQsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMDAwMWMsCisJMHg4MDAwMDFjMCwgMHgwMjAyMDgwMCwgMHgwMDEwOTYxYSwgMHg1OTMwMDAwNCwKKwkweDhjMDAwNTNlLCAweDA0MDIwMDI5LCAweDU5MzI1ODA4LCAweDU5MmMwYzA4LAorCTB4NTljYzJhMDgsIDB4ODIxNDFkMDAsIDB4MDAwMDBjMDAsIDB4MDQwMDAwMDIsCisJMHg1OWNjMTgwOSwgMHg4NDA0MGQ1OCwgMHg0ODA2NWMwOCwgMHg4MjE0MzUwMCwKKwkweDAwMDAwZmZmLCAweDA0MDIwMDI3LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAorCTB4MDQwMjAwODAsIDB4MDIwMWY4MDAsIDB4MDAwMjA5NjIsIDB4MDQwMjAwMDYsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg1OTMwMDgxMSwgMHg4MDA0MDljMCwKKwkweDA0MDIwOTUxLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDQ4MDY1ODA3LAorCTB4NDgwZTU4MGEsIDB4NDgxNjVjMDksIDB4NTkzMDBjMDIsIDB4NDgwNjVjMDYsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwMjAxZjgwMCwgMHgwMDEwNDgwMSwKKwkweDU5Y2MwMjA4LCAweDhjMDAwNTE4LCAweDAyMDIwMDAwLCAweDAwMTA4Zjg4LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsIDB4MDIwMWY4MDAsIDB4MDAxMDZjYjQsCisJMHgwNDAwMDdkNiwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMiwKKwkweDAyMDFmODAwLCAweDAwMTA4OTk3LCAweDVjMDI3ODAwLCAweDA0MDFmN2NmLAorCTB4NDgxN2M4NTcsIDB4NDgwZmM4NTcsIDB4ODIxODA1MDAsIDB4MDAwMDAwZmYsCisJMHgwNDAwMDAwZSwgMHg1OTJjMDIwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDQ4LCAweDA0MDIwMDA4LCAweDU5MmMwNDA3LAorCTB4ODAwMDAxYzAsIDB4MDQwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDk1MGIsCisJMHgwMjAxZjAwMCwgMHgwMDEwOTU1MywgMHg4MjE4MGQwMCwgMHgwMDAwMGMwMCwKKwkweDA0MDAwMDA0LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDIwMDMyLAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsIDB4NDE3ODIwMDAsIDB4OGMxODM1MTAsCisJMHgwNDAwMDAwNywgMHg1OWNjMDAwYywgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDA0MDAwMDAyLCAweDQ4MDNjODU3LCAweDU5Y2MyMDBiLCAweDQ4MTI1ODBjLAorCTB4NDE3ODAwMDAsIDB4OGMxODM1MTIsIDB4MDQwMDAwMDIsIDB4NTljYzAwMGEsCisJMHg0ODAyNTgwYiwgMHg4MDEwMGMwMCwgMHgwNDAwMDdiOCwgMHg4MjA0MTQ4MCwKKwkweDAwMDAwMDFkLCAweDA0MDAxMDA2LCAweDU5MmMwNDA0LCAweDhjMDAwNTFlLAorCTB4MDQwMDAwMGUsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMWMsIDB4NGM1MDAwMDAsCisJMHg0YzU0MDAwMCwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwYywgMHg4MzJjYWMwMCwKKwkweDAwMDAwMDBkLCAweDAyMDFmODAwLCAweDAwMTA4OTUzLCAweDVjMDBhODAwLAorCTB4NWMwMGEwMDAsIDB4MDQwMWY3YTUsIDB4NTkzMDAwMTEsIDB4NTkzMDE0MDIsCisJMHg0ODBhNWMwNiwgMHg0ODAyNTgwNywgMHg0ODBlNTgwYSwgMHg0ODE2NWMwOSwKKwkweDAyMDFmODAwLCAweDAwMTA4OGZjLCAweDAyMDFmODAwLCAweDAwMTA4OTM4LAorCTB4MDQwMWY3YTYsIDB4NTkyYzAyMGEsIDB4OGMwMDA1MDIsIDB4MDQwMDA3Y2QsCisJMHg1OTJjMDIwOCwgMHg4YzAwMDUwZSwgMHgwNDAyMDdjYSwgMHg1OTMwMDAxMSwKKwkweDgwMGMwZDgwLCAweDA0MDAwN2M3LCAweDQ4MDNjODU3LCAweDQ4MGZjODU3LAorCTB4OGMxODM1MTQsIDB4MDIwMDAwMDAsIDB4MDAxMDhmYzYsIDB4ODAwMDA1NDAsCisJMHgwNDAwMDdjMCwgMHg0ODA3Yzg1NiwgMHgwMjAxZjAwMCwgMHgwMDEwOGZjNiwKKwkweDU5MmMwMjBhLCAweDhjMDAwNTAyLCAweDA0MDAwNzgyLCAweDU5MzAwMDExLAorCTB4ODAwMDAxYzAsIDB4MDQwMDA3N2YsIDB4NTkyYzAyMDgsIDB4OGMwMDA1MGUsCisJMHgwNDAyMDc3YywgMHgwMjAxZjAwMCwgMHgwMDEwOGZjNiwgMHg1OWNjMjAwNiwKKwkweDU5Y2MyODA3LCAweDA0MDFmMDM3LCAweDA0MDFmMDM2LCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NTkzMDAwMWMsIDB4ODAwMDAxYzAsIDB4MDIwMjA4MDAsCisJMHgwMDEwOTYxYSwgMHg1OTMyNTgwOCwgMHg1OTJjMGMwOCwgMHg0MTc4MjgwMCwKKwkweDQxNzgxODAwLCAweDg0MDQwZDU4LCAweDQ4MDY1YzA4LCAweDQxNzgzMDAwLAorCTB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsIDB4MDQwMjAwMWEsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDk2MiwgMHgwNDAyMDAwNywgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwKKwkweDU5MzAwODExLCAweDQ4MDdjODU3LCAweDgwMDQwOWMwLCAweDA0MDIwOGIyLAorCTB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4NDgwNjU4MDcsIDB4NDgwZTU4MGEsCisJMHg0ODE2NWMwOSwgMHg0OTMzYzg1NywgMHg1OTMwMGMwMiwgMHg0ODA2NWMwNiwKKwkweDAyMDFmODAwLCAweDAwMTA5MzY1LCAweDAyMDFmODAwLCAweDAwMDIwMzgxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4MDEsIDB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsCisJMHg1OTJjMDIwYSwgMHg4YzAwMDUwMiwgMHgwNDAwMDdlOCwgMHg1OTMwMDAxMSwKKwkweDQ4MDNjODU3LCAweDgwMDAwMWMwLCAweDA0MDAwN2U0LCAweDU5MmMwMjA4LAorCTB4OGMwMDA1MGUsIDB4MDQwMjA3ZTEsIDB4MDIwMWYwMDAsIDB4MDAxMDhmYzYsCiAJMHg1OTMwMDAxYywgMHg4MDAwMDFjMCwgMHg0YzEwMDAwMCwgMHg0YzE0MDAwMCwKLQkweDAyMDIwODAwLCAweDAwMTA5ODRlLCAweDVjMDAyODAwLCAweDVjMDAyMDAwLAorCTB4MDIwMjA4MDAsIDB4MDAxMDk2MWEsIDB4NWMwMDI4MDAsIDB4NWMwMDIwMDAsCiAJMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwgMHg0YTAyNjQwMywgMHgwMDAwMDA0MywKLQkweDU5MzI1ODA4LCAweDU5MmMwMjBhLCAweDhjMDAwNTAyLCAweDA0MDIwMDE4LAorCTB4NTkzMjU4MDgsIDB4NTkyYzAyMGEsIDB4OGMwMDA1MDIsIDB4MDQwMjAwMWMsCiAJMHg0MDEwMDAwMCwgMHg1OTJjMDgwZiwgMHg4MDA0MGM4MCwgMHg0MDE0MDAwMCwKLQkweDgwMDQwNDgwLCAweDA0MDAxMDE0LCAweDQ4MTI2MDEzLCAweDQ4MTY2MDExLAotCTB4NTkzMDAwMDQsIDB4OGMwMDA1M2UsIDB4MDQwMjAwMDgsIDB4NDk3YTYyMDUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMGY5MywgMHgwNDAyMDAwOSwgMHg1OTMwMDgwNCwKLQkweDAyMDFmMDAwLCAweDAwMTA2NzIxLCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAotCTB4MDQwMDA3ZjcsIDB4MDIwMWYwMDAsIDB4MDAxMDc5NzQsIDB4NDkzM2M4NTcsCi0JMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywgMHg0MDA0MjgwMCwgMHgwNDAxZjdlYiwKKwkweDgwMDQwNDgwLCAweDA0MDAxMDE4LCAweDU5MzAwMDA0LCAweDhjMDAwNTNlLAorCTB4MDQwMjAwMGEsIDB4NDgxMjYwMTMsIDB4NDgxNjYwMTEsIDB4NDk3YTYyMDUsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGZlMSwgMHgwNDAyMDAwZCwgMHg1OTMwMDgwNCwKKwkweDAyMDFmMDAwLCAweDAwMTA2NDY2LCAweDRjMTAwMDAwLCAweDRjMTQwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZjYjQsIDB4NWMwMDI4MDAsIDB4NWMwMDIwMDAsCisJMHgwNDAwMDdmMSwgMHgwMjAxZjAwMCwgMHgwMDEwNzZmYiwgMHg0OTMzYzg1NywKKwkweDFjMDFmMDAwLCAweDQ4MDdjODU3LCAweDQwMDQyODAwLCAweDA0MDFmN2U3LAogCTB4ODMzODA0ODAsIDB4MDAwMDAwNTgsIDB4MDQwMjEwMDUsIDB4ODMzODA0ODAsCiAJMHgwMDAwMDA0MCwgMHgwNDAwMTAwMiwgMHgwYzAxZjAwMiwgMHgxYzAxZjAwMCwKLQkweDAwMTA4NzQwLCAweDAwMTA4NzQwLCAweDAwMTA4NzQwLCAweDAwMTA4NzQwLAotCTB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsCi0JMHgwMDEwODc0MCwgMHgwMDEwODc0MCwgMHgwMDEwODc0MiwgMHgwMDEwODc0MCwKLQkweDAwMTA4NzQwLCAweDAwMTA4NzQwLCAweDAwMTA4NzQwLCAweDAwMTA4NzRmLAotCTB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsIDB4MDAxMDg3NDAsCi0JMHgwMDEwODc3ZCwgMHgwMDEwODc0MCwgMHgwMDEwODc0MCwgMHgwMDEwODc0MCwKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAotCTB4MDAxMDZkYzMsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDIsIDB4NTlhODAwMzksCisJMHgwMDEwODRlYywgMHgwMDEwODRlYywgMHgwMDEwODRlYywgMHgwMDEwODRlYywKKwkweDAwMTA4NGVjLCAweDAwMTA4NGVjLCAweDAwMTA4NGVjLCAweDAwMTA4NGVjLAorCTB4MDAxMDg0ZWMsIDB4MDAxMDg0ZWMsIDB4MDAxMDg0ZWUsIDB4MDAxMDg0ZWMsCisJMHgwMDEwODRlYywgMHgwMDEwODRlYywgMHgwMDEwODRlYywgMHgwMDEwODRmYiwKKwkweDAwMTA4NGVjLCAweDAwMTA4NGVjLCAweDAwMTA4NGVjLCAweDAwMTA4NGVjLAorCTB4MDAxMDg1MjksIDB4MDAxMDg0ZWMsIDB4MDAxMDg0ZWMsIDB4MDAxMDg0ZWMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTA2YjEzLCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDU5YTgwMDM5LAogCTB4NDgwMjYyMDUsIDB4NTkzMDAwMTEsIDB4NTkzMDA4MTUsIDB4ODAwNDBjODAsCi0JMHg0ODA2NjAxNSwgMHgwMjAxZjAwMCwgMHgwMDEwNmI4YSwgMHg0OTMzYzg1NywKLQkweDAyMDFmODAwLCAweDAwMTA2YjhhLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwKLQkweDAwMTA5MDM3LCAweDA0MDAwMDEwLCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LAorCTB4NDgwNjYwMTUsIDB4MDIwMWYwMDAsIDB4MDAxMDY4YzEsIDB4NDkzM2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjhjMSwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDVjMDI3ODAwLCAweDQyMDAwMDAwLAorCTB4MDAxMGI2NjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsCisJMHgwMDEwOGRmNCwgMHgwNDAwMDAxMCwgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwKIAkweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDU5MzAwNDAyLCAweDQ4MDI1YzA2LAogCTB4NGEwMjVhMDYsIDB4MDAwMDAwMjksIDB4NDk3YTVjMDksIDB4NTkyYzBjMDgsCi0JMHg4NDA0MGQ1MCwgMHg0ODA2NWMwOCwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwKKwkweDg0MDQwZDUwLCAweDQ4MDY1YzA4LCAweDAyMDFmODAwLCAweDAwMDIwMzgxLAogCTB4NWMwMjU4MDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMTQsIDB4NDE3ODI4MDAsCiAJMHg0ZDQwMDAwMCwgMHg0ZDQ0MDAwMCwgMHg1OTM2OGMwMywgMHg0MjAwMjAwMCwKIAkweDAwMDAwMDAyLCAweDQyMDI4MDAwLCAweDAwMDAwMDI5LCAweDAyMDFmODAwLAotCTB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHg0OTMzYzg1NywgMHg1OTMwMDgwOCwgMHg0OTc4MGMwOSwKKwkweDAwMTA5NjJhLCAweDVjMDI4ODAwLCAweDVjMDI4MDAwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA4YjQsIDB4NDkzM2M4NTcsIDB4NTkzMDA4MDgsIDB4NDk3ODBjMDksCiAJMHg0OTc4MDgwYSwgMHg1ODA0MTQwOCwgMHg4NDA4MTU1OCwgMHg0ODA4MGMwOCwKLQkweDFjMDFmMDAwLCAweDQ4MDdjODU3LCAweDhjMDQwZDNlLCAweDA0MDIwMDIzLAotCTB4NDk3YTVhMDYsIDB4NTkzMDAwMWYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMTcsCisJMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywgMHg4YzA0MGQzZSwgMHgwNDAyMDAyNCwKKwkweDQ5N2E1YTA2LCAweDU5MzAwMDFmLCAweDgwMDAwNTQwLCAweDA0MDAwMDE4LAogCTB4NDk3YTVhMDYsIDB4NGMwNDAwMDAsIDB4NGMwODAwMDAsIDB4NGMwYzAwMDAsCi0JMHg0YzEwMDAwMCwgMHg0YzE0MDAwMCwgMHg1OGY0MTAwMywgMHg0MDA0MDAwMCwKLQkweDgwMDgxNDgwLCAweDU5MzAwMDFmLCAweDQ4MDllODAzLCAweDAyMDFmODAwLAotCTB4MDAxMDBkNTYsIDB4NWMwMDI4MDAsIDB4NWMwMDIwMDAsIDB4NWMwMDE4MDAsCi0JMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHg1OTJjMDIwNiwgMHg4MDAwMDU0MCwKLQkweDA0MDIwMDA5LCAweDA0MDFmMDA1LCAweDU5MmMwNDA4LCAweDhjMDAwNTFjLAotCTB4MDQwMDAwMDIsIDB4NTkyYzA4MDMsIDB4NDgwN2M4NTcsIDB4NGEwMjVhMDYsCi0JMHgwMDAwMDAxNSwgMHgxYzAxZjAwMCwgMHg1OTMwMDAxZiwgMHg4MDAwMDU0MCwKLQkweDA0MDAwMDA5LCAweDRhMDI1YTA2LCAweDAwMDAwMDExLCAweDU5MzAwMDFmLAotCTB4NGMwNDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDBkNTYsIDB4NWMwMDA4MDAsCi0JMHgwNDAxZjdmNSwgMHg0ODA3Yzg1NiwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwNywKLQkweDFjMDFmMDAwLCAweDgzMzgwNDgwLCAweDAwMDAwMDU4LCAweDA0MDIxMDA3LAotCTB4ODMzODA0ODAsIDB4MDAwMDAwNDAsIDB4MDQwMDEwMDQsIDB4NGQyYzAwMDAsCi0JMHgwYzAxZjgwMywgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHgwMDEwODdkYiwKLQkweDAwMTA4N2RiLCAweDAwMTA4N2RiLCAweDAwMTA4N2RiLCAweDAwMTA4N2RiLAotCTB4MDAxMDg3ZGQsIDB4MDAxMDg3ZGIsIDB4MDAxMDg3ZGIsIDB4MDAxMDg4NjAsCi0JMHgwMDEwODdkYiwgMHgwMDEwODdkYiwgMHgwMDEwODdkYiwgMHgwMDEwODdkYiwKLQkweDAwMTA4N2RiLCAweDAwMTA4N2RiLCAweDAwMTA4N2RiLCAweDAwMTA4N2RiLAotCTB4MDAxMDg3ZGIsIDB4MDAxMDg3ZGIsIDB4MDAxMDg5MTAsIDB4MDAxMDg5MzksCi0JMHgwMDEwODkxOCwgMHgwMDEwODdkYiwgMHgwMDEwODk0NSwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDU5MzAwMDFjLCAweDgwMDAwMWMwLCAweDAyMDIwODAwLAotCTB4MDAxMDk4NGUsIDB4NTkzMDAwMDcsIDB4OGMwMDA1MGUsIDB4MDQwMDAwN2MsCi0JMHg4YzAwMDUwMCwgMHgwNDAwMDA2ZSwgMHg4YzAwMDUxYywgMHgwNDAwMDAwOSwKLQkweDg0MDAwNTAwLCAweDQ4MDI2MDA3LCAweDU5MzI1ODA4LCAweDU5MmMzYzA4LAotCTB4ODQxYzNkNTgsIDB4NDgxZTVjMDgsIDB4MDIwMWYwMDAsIDB4MDAwMjA3ZGQsCi0JMHg1OTMyNTgwOCwgMHg1OTJjM2MwOCwgMHg4NDFjM2Q1OCwgMHg1OTMwMDAwNywKLQkweDhjMDAwNTFjLCAweDA0MDIwN2YzLCAweDQ4MWU1YzA4LCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMDUsIDB4NDAwMDAwMDAsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmUsCi0JMHg1OTMwMDAwNywgMHg4YzAwMDUxYywgMHgwNDAyMDdlYSwgMHg1OWNjMGEwOCwKLQkweDU5MmMwMjA0LCAweDgyMDAwNTAwLCAweDAwMDAwMGZmLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwNDgsIDB4MDQwMjAwMGMsIDB4NDk3YTU4MGIsIDB4ODIwNDA1MDAsCi0JMHgwMDAwMDBmZiwgMHgwNDAwMDAwOCwgMHg1OTJjMDQwNywgMHg4MDAwMDFjMCwKLQkweDA0MDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA5NzNmLCAweDAyMDFmMDAwLAotCTB4MDAxMDBlNTYsIDB4NDgwNjVjMDksIDB4NDE3ODIwMDAsIDB4ODIwNDA1MDAsCi0JMHgwMDAwMGMwMCwgMHgwNDAwMDAwMiwgMHg1OWNjMjAwOSwgMHg4MjA0MzUwMCwKLQkweDAwMDAwZmZmLCAweDA0MDIwMDI3LCAweDQ4MWU1YzA4LCAweDRhMDI1YTA2LAotCTB4MDAwMDAwMDAsIDB4ODAxODMxYzAsIDB4MDIwMDAwMDAsIDB4MDAxMDBlNTYsCi0JMHg0MTc4MjAwMCwgMHg4YzE4MzUxMCwgMHgwNDAwMDAwMiwgMHg1OWNjMjAwYiwKLQkweDQ4MTI1ODBjLCAweDQxNzgwMDAwLCAweDhjMTgzNTEyLCAweDA0MDAwMDAyLAotCTB4NTljYzAwMGEsIDB4NDgwMjU4MGIsIDB4ODAxMDBjMDAsIDB4MDIwMDE4MDAsCi0JMHgwMDEwMDVkOCwgMHgwMjAwMDAwMCwgMHgwMDEwMGU1NiwgMHg4MjA0MTQ4MCwKLQkweDAwMDAwMDFkLCAweDA0MDIxMDBjLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLAotCTB4ODNjY2E0MDAsIDB4MDAwMDAwMGMsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMGQsCi0JMHgwNDAxZmI2NywgMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHgwMjAxZjAwMCwKLQkweDAwMTAwZTU2LCAweDA0MDFmYjBiLCAweDAyMDFmMDAwLCAweDAwMTAwZTU2LAotCTB4NDEyYzc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZTQsIDB4MDIwMDA4MDAsCi0JMHgwMDEwMDVkOCwgMHg0OTJjNzgwOSwgMHg4NDFjM2Q1MiwgMHg0ODFjN2MwOCwKLQkweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDQ4MTI1ODBhLCAweDQ4MDY1YzA5LAotCTB4NTgzYzA0MDQsIDB4NTgzYzEwMDUsIDB4NTgzYzIyMDgsIDB4NDgwMjVjMDQsCi0JMHg0ODBhNTgwNSwgMHg0ODEyNWEwOCwgMHgwNDAxZjdjOCwgMHg4YzAwMDUyNCwKLQkweDA0MDAwNzk0LCAweDU5MzI1ODA4LCAweDRjMDAwMDAwLCAweDU5MmMwNDA4LAotCTB4OGMwMDA1MWMsIDB4NWMwMDAwMDAsIDB4MDQwMjAwMDMsIDB4NGEwMjYwMTEsCi0JMHhmZmZmZmZmZiwgMHg4NDAwMDUyNCwgMHgwNDAxZjc4YSwgMHgxYzAxZjAwMCwKLQkweDU5YTgwMDM5LCAweDQ4MDI2MjA1LCAweDU5MzI1ODA4LCAweDRhMDI2MjAzLAotCTB4MDAwMDAwMDIsIDB4NTkyYzI0MDgsIDB4NTkzMDA4MDcsIDB4NDkzM2M4NTcsCi0JMHg0ODA3Yzg1NywgMHg1OTJjMDIwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDQ4LCAweDA0MDIwMDA0LCAweDhjMTAyNTAwLAotCTB4MDIwMjAwMDAsIDB4MDAxMDk3ODcsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsCi0JMHg4YzA0MGQxZSwgMHgwNDAwMDAyNywgMHg0MTc4MDgwMCwgMHg0OTdhNWMwOSwKLQkweDU5MmMxYzA5LCAweDU5MzAwMDExLCAweDU5MzQxMjAwLCAweDQ5N2E2MjA1LAotCTB4OGMwODE1MGUsIDB4MDQwMjAwNmUsIDB4NDgwN2M4NTcsIDB4NDgwNjU4MGEsCi0JMHg4MDAwMGQ0MCwgMHgwNDAyMGYwNCwgMHg1OTMwMDQwMiwgMHg0ODAyNWMwNiwKLQkweDQ4MDY1ODA3LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDRjMDQwMDAwLAotCTB4NGMwYzAwMDAsIDB4NGMxMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OWMsCi0JMHg1YzAwMjAwMCwgMHg1YzAwMTgwMCwgMHg1YzAwMDgwMCwgMHg4YzEwMjUxMiwKLQkweDA0MDIwMDFhLCAweDRjMGMwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwMmMxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ5YjIsIDB4NWMwMDE4MDAsIDB4OGMwYzFkMTgsCi0JMHgwMjAwMDAwMCwgMHgwMDAyMDc3ZCwgMHgwMjAxZjAwMCwgMHgwMDEwOTFkMSwKLQkweDQ4MTNjODU3LCAweDhjMTAyNTE4LCAweDA0MDAwMDRiLCAweDQxNzgwODAwLAotCTB4NTkyYzFjMDksIDB4ODIwYzA1ODAsIDB4MDAwMDEwMDAsIDB4MDQwMDA3ZDYsCi0JMHg4YzEwMjUxMiwgMHgwNDAwMDdkNCwgMHg1OTJjNzgwOSwgMHg1ODNjMDgwYSwKLQkweDU4M2MxYzA5LCAweDA0MDFmN2QwLCAweDQ4MDdjODU3LCAweDU5MmM3ODA5LAotCTB4NTkzMDA0MDIsIDB4NTkyYzE0MDQsIDB4OGMwODE1MWUsIDB4MDQwMjAwMGQsCi0JMHg1OTJjMTIwNiwgMHg0ODAwN2MwNiwgMHg0ODA0NzgwNywgMHg0ODA4N2EwNiwKLQkweDg0MTAyNTEyLCAweDQ4MTA3YzA4LCAweDRjMGMwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDA3ZmQsIDB4NDAzZTU4MDAsIDB4MDQwMWZhY2EsIDB4MDQwMWY3ZDksCi0JMHg0ODAyNWMwNiwgMHg0ODA2NTgwNywgMHg1ODNjMDgwYywgMHg1ODNjMDAwYiwKLQkweDgwMDQwYzAwLCAweDgyMDQxNDgwLCAweDAwMDAwMDFkLCAweDA0MDAxMDA2LAotCTB4NTgzYzEwMDEsIDB4NDgwYTU4MDEsIDB4NDk3ODc4MDEsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAxYywgMHg4MjA0MGMwMCwgMHgwMDAwMDAxNCwgMHg0YzBjMDAwMCwKLQkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDgyM2NhNDAwLCAweDAwMDAwMDA4LAotCTB4ODMyY2FjMDAsIDB4MDAwMDAwMDgsIDB4NGMxMDAwMDAsIDB4NGMzYzAwMDAsCi0JMHgwNDAxZmFjYiwgMHg1YzAwNzgwMCwgMHg1YzAwMjAwMCwgMHg1YzAwYTgwMCwKLQkweDVjMDBhMDAwLCAweDg0MTAyNTEyLCAweDQ4MTI1YzA4LCAweDQwM2U1ODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4NDIwMzQwMDAsIDB4MDAxMGI0YTQsCi0JMHg1OWExZDgxZSwgMHg4MGVkZDljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKLQkweDQ4ZWZjODU3LCAweDU4ZWMwMDA5LCAweDQ4MDNjODU3LCAweDA4MDFmODAwLAotCTB4MDQwMWY3YWMsIDB4NDkzM2M4NTcsIDB4MWMwMWYwMDAsIDB4NTkzMDE0MTQsCi0JMHg0ODBiYzg1NywgMHg4YzA4MTUxYywgMHgwNDAyMDAwZSwgMHg4MDAwMDU0MCwKLQkweDQ4MDNjODU3LCAweDA0MDAwNzhkLCAweDgwMDQyYzgwLCAweDA0MDIxNzhiLAotCTB4OGMwODE1MTQsIDB4MDQwMjAwMDUsIDB4NTkyYzA4MGYsIDB4NDgwN2M4NTcsCi0JMHg4MDA0MDQ4MCwgMHg0ODAyNjAxNiwgMHg4NDA4MTU1YywgMHg0ODBhNjQxNCwKLQkweDU5MzAxMDA3LCAweDg0MDgxNTFlLCAweDQ4MGE2MDA3LCAweDRhMDI1YzA5LAotCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OWMsIDB4NDk3YTVjMDksCi0JMHg4YzEwMjUxMiwgMHgwNDAwMDAwNiwgMHg0ZDJjMDAwMCwgMHg0MDNlNTgwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwN2ZkLCAweDVjMDI1ODAwLCAweDgyMTAyNTAwLAotCTB4ZmZmZmVkZmYsIDB4NDgxMjVjMDgsIDB4MDIwMWYwMDAsIDB4MDAxMDkyMGYsCi0JMHg1OTMyNTgwOCwgMHg1OTJjMDQwOCwgMHg4YzAwMDUxOCwgMHgwNDAwMDAwNCwKLQkweDQxMmRmODAwLCAweDAyMDFmMDAwLCAweDAwMTAwZTZmLCAweDFjMDFmMDAwLAotCTB4NDkzM2M4NTcsIDB4NTkzMjU4MDgsIDB4NDk3YTVjMDksIDB4NGEwMjVhMDYsCi0JMHgwMDAwMDAwMCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OTMwMDgxMSwKLQkweDQ4MDdjODU3LCAweDgwMDQwOWMwLCAweDA0MDIwMDBhLCAweDQ4MDY1ODA3LAotCTB4NTkzMDBjMDIsIDB4NDgwNjVjMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyYzEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDliMiwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwKLQkweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDIwMDA1LCAweDU5MzAwODExLAotCTB4MDQwMWZlNTUsIDB4NDgwNjU4MDcsIDB4MDQwMWY3ZjIsIDB4NTkyYzAyMDgsCi0JMHg4YzAwMDUwZSwgMHgwNDAyMDdmYSwgMHg0OTMzYzg1NywgMHgwMjAxZjAwMCwKLQkweDAwMTA5MjBmLCAweDQ5MzNjODU3LCAweDU5MzI1ODA4LCAweDgxMmU1OWMwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkyYzAyMGEsIDB4OGMwMDA1MDIsCi0JMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0YTAyNjIwNiwgMHgwMDAwMDAwMiwKLQkweDFjMDFmMDAwLCAweDU5MzAwMDFjLCAweDgwMDAwMWMwLCAweDAyMDIwODAwLAotCTB4MDAxMDk4NGUsIDB4NTkzMDAwMDcsIDB4NDkzM2M4NTcsIDB4NDgwM2M4NTcsCi0JMHg4YzAwMDUwZSwgMHgwNDAwMDAzNywgMHg4YzAwMDUwMCwgMHgwNDAwMDAyOSwKLQkweDhjMDAwNTFjLCAweDA0MDAwMDBhLCAweDg0MDAwNTAwLCAweDQ4MDI2MDA3LAotCTB4NTkzMjU4MDgsIDB4NTkyYzNjMDgsIDB4NDgxZmM4NTcsIDB4ODQxYzNkNTgsCi0JMHg0ODFlNWMwOCwgMHgwMjAxZjAwMCwgMHgwMDAyMDdkZCwgMHg1OTMyNTgwOCwKLQkweDU5MmMzYzA4LCAweDg0MWMzZDU4LCAweDU5MzAwMDA3LCAweDhjMDAwNTFjLAotCTB4MDQwMjA3ZjIsIDB4NDgxZTVjMDgsIDB4NDIwMDAwMDAsIDB4MDAwMDAwMDUsCi0JMHg0MDAwMDAwMCwgMHg4MDAwMDA0MCwgMHgwNDAyMDdmZSwgMHg1OTMwMDAwNywKLQkweDhjMDAwNTFjLCAweDA0MDIwN2U5LCAweDU5MmMwMjA0LCAweDgyMDAwNTAwLAotCTB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDgsIDB4MDQwMjAwMDMsCi0JMHg0OTdhNTgwYiwgMHgwNDAxZjAwMiwgMHg0OTdhNWMwOSwgMHg0ODFlNWMwOCwKLQkweDRhMDI1YTA2LCAweDAwMDAwMDAwLCAweDAyMDFmMDAwLCAweDAwMTAwZTU2LAotCTB4OGMwMDA1MjQsIDB4MDQwMDA3ZDksIDB4NTkzMjU4MDgsIDB4NGMwMDAwMDAsCi0JMHg1OTJjMDQwOCwgMHg4YzAwMDUxYywgMHg1YzAwMDAwMCwgMHgwNDAyMDAwMywKLQkweDRhMDI2MDExLCAweGZmZmZmZmZmLCAweDg0MDAwNTI0LCAweDA0MDFmN2NmLAotCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NDE3ODA4MDAsIDB4ODMzODA0ODAsCi0JMHgwMDAwMDA1OCwgMHgwNDAyMTAwYiwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0MCwKLQkweDA0MDAxMDA4LCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDgxMmU1OWMwLAotCTB4MGMwMjA4MDYsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCi0JMHg0OTNiYzg1NywgMHgxYzAxZjAwMCwgMHgwMDEwODlhZSwgMHgwMDEwODlhZSwKLQkweDAwMTA4OWFlLCAweDAwMTA4OWFlLCAweDAwMTA4OWFlLCAweDAwMTA4OWIwLAotCTB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsCi0JMHgwMDEwODlhZSwgMHgwMDEwODlhZSwgMHgwMDEwODlhZSwgMHgwMDEwODlhZSwKLQkweDAwMTA4OWFlLCAweDAwMTA4OWFlLCAweDAwMTA4OWFlLCAweDAwMTA4OWFlLAotCTB4MDAxMDg5YWUsIDB4MDAxMDg5YWUsIDB4MDAxMDg5YjUsIDB4MDAxMDg5YWUsCi0JMHgwMDEwODlhZSwgMHgwMDEwODlhZSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKLQkweDU5Y2MwYTA4LCAweDQ5N2E1ODA3LCAweDQ4MDdjODU3LCAweDgyMDQwZDAwLAotCTB4MDAwMDBmZmYsIDB4NTkzMDA0MDIsIDB4NDgwMjVjMDYsIDB4NGEwMjVhMDQsCi0JMHgwMDAwMDEwMywgMHg0ODA2NWMwOSwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwKLQkweDgwMDQwOWMwLCAweDAyMDAwMDAwLCAweDAwMDIwMmMxLCAweDU5Y2MwMDA5LAotCTB4NDgwMjU4MGEsIDB4ODIwNDI1MDAsIDB4MDAwMDAxMDAsIDB4MDQwMDAwMDIsCi0JMHg1OWNjMjAwYiwgMHg0ODEyNTgwYywgMHg4MjA0MDUwMCwgMHgwMDAwMDIwMCwKKwkweDRjMTAwMDAwLCAweDRjMTQwMDAwLCAweDQwMDAyODAwLCAweDU4MTQxMDAzLAorCTB4NDAwNDAwMDAsIDB4ODAwODE0ODAsIDB4NDgwODI4MDMsIDB4NDAxNDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGQ5YSwgMHg1YzAwMjgwMCwgMHg1YzAwMjAwMCwKKwkweDVjMDAxODAwLCAweDVjMDAxMDAwLCAweDVjMDAwODAwLCAweDU5MmMwMjA2LAorCTB4ODAwMDA1NDAsIDB4MDQwMjAwMDksIDB4MDQwMWYwMDUsIDB4NTkyYzA0MDgsCisJMHg4YzAwMDUxYywgMHgwNDAwMDAwMiwgMHg1OTJjMDgwMywgMHg0ODA3Yzg1NywKKwkweDRhMDI1YTA2LCAweDAwMDAwMDE1LCAweDFjMDFmMDAwLCAweDU5MzAwMDFmLAorCTB4ODAwMDA1NDAsIDB4MDQwMDAwMDksIDB4NGEwMjVhMDYsIDB4MDAwMDAwMTEsCisJMHg1OTMwMDAxZiwgMHg0YzA0MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMGQ5YSwKKwkweDVjMDAwODAwLCAweDA0MDFmN2Y1LCAweDQ4MDdjODU2LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDcsIDB4MWMwMWYwMDAsIDB4ODMzODA0ODAsIDB4MDAwMDAwNTgsCisJMHgwNDAyMTAwNywgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0MCwgMHgwNDAwMTAwNCwKKwkweDRkMmMwMDAwLCAweDBjMDFmODAzLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAorCTB4MDAxMDg1ODgsIDB4MDAxMDg1ODgsIDB4MDAxMDg1ODgsIDB4MDAxMDg1ODgsCisJMHgwMDEwODU4OCwgMHgwMDEwODU4YSwgMHgwMDEwODU4OCwgMHgwMDEwODU4OCwKKwkweDAwMTA4NjBkLCAweDAwMTA4NTg4LCAweDAwMTA4NTg4LCAweDAwMTA4NTg4LAorCTB4MDAxMDg1ODgsIDB4MDAxMDg1ODgsIDB4MDAxMDg1ODgsIDB4MDAxMDg1ODgsCisJMHgwMDEwODU4OCwgMHgwMDEwODU4OCwgMHgwMDEwODU4OCwgMHgwMDEwODZjNSwKKwkweDAwMTA4NmVlLCAweDAwMTA4NmNkLCAweDAwMTA4NTg4LCAweDAwMTA4NmZhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMDAwMWMsIDB4ODAwMDAxYzAsCisJMHgwMjAyMDgwMCwgMHgwMDEwOTYxYSwgMHg1OTMwMDAwNywgMHg4YzAwMDUwZSwKKwkweDA0MDAwMDdjLCAweDhjMDAwNTAwLCAweDA0MDAwMDZlLCAweDhjMDAwNTFjLAorCTB4MDQwMDAwMDksIDB4ODQwMDA1MDAsIDB4NDgwMjYwMDcsIDB4NTkzMjU4MDgsCisJMHg1OTJjM2MwOCwgMHg4NDFjM2Q1OCwgMHg0ODFlNWMwOCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwOTE0LCAweDU5MzI1ODA4LCAweDU5MmMzYzA4LCAweDg0MWMzZDU4LAorCTB4NTkzMDAwMDcsIDB4OGMwMDA1MWMsIDB4MDQwMjA3ZjMsIDB4NDgxZTVjMDgsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwNSwgMHg0MDAwMDAwMCwgMHg4MDAwMDA0MCwKKwkweDA0MDIwN2ZlLCAweDU5MzAwMDA3LCAweDhjMDAwNTFjLCAweDA0MDIwN2VhLAorCTB4NTljYzBhMDgsIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDA0OCwgMHgwNDAyMDAwYywgMHg0OTdhNTgwYiwKKwkweDgyMDQwNTAwLCAweDAwMDAwMGZmLCAweDA0MDAwMDA4LCAweDU5MmMwNDA3LAorCTB4ODAwMDAxYzAsIDB4MDQwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDk1MGIsCisJMHgwMjAxZjAwMCwgMHgwMDEwMGVhMSwgMHg0ODA2NWMwOSwgMHg0MTc4MjAwMCwKKwkweDgyMDQwNTAwLCAweDAwMDAwYzAwLCAweDA0MDAwMDAyLCAweDU5Y2MyMDA5LAorCTB4ODIwNDM1MDAsIDB4MDAwMDBmZmYsIDB4MDQwMjAwMjcsIDB4NDgxZTVjMDgsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg4MDE4MzFjMCwgMHgwMjAwMDAwMCwKKwkweDAwMTAwZWExLCAweDQxNzgyMDAwLCAweDhjMTgzNTEwLCAweDA0MDAwMDAyLAorCTB4NTljYzIwMGIsIDB4NDgxMjU4MGMsIDB4NDE3ODAwMDAsIDB4OGMxODM1MTIsCiAJMHgwNDAwMDAwMiwgMHg1OWNjMDAwYSwgMHg0ODAyNTgwYiwgMHg4MDEwMGMwMCwKLQkweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDAyMDAwMDAwLCAweDAwMDIwMmRhLAotCTB4ODIwNDE0ODAsIDB4MDAwMDAwMWQsIDB4MDQwMDEwMDYsIDB4NTkyYzA0MDQsCi0JMHg4YzAwMDUxZSwgMHgwNDAwMDAwZSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAxYywKLQkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDgzY2NhNDAwLCAweDAwMDAwMDBjLAotCTB4ODMyY2FjMDAsIDB4MDAwMDAwMGQsIDB4MDQwMWY5YzEsIDB4NWMwMGE4MDAsCi0JMHg1YzAwYTAwMCwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHgwNDAxZjk2NSwKLQkweDA0MDFmMWEwLCAweDgzMzgwNDgwLCAweDAwMDAwMDkzLCAweDAyMDIxODAwLAotCTB4MDAxMDA1ZDgsIDB4ODMzODA0ODAsIDB4MDAwMDAwODUsIDB4MDIwMDE4MDAsCi0JMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwODlmZCwgMHgwMDEwODlmYiwKLQkweDAwMTA4OWZiLCAweDAwMTA4YTA0LCAweDAwMTA4OWZiLCAweDAwMTA4OWZiLAotCTB4MDAxMDg5ZmIsIDB4MDAxMDg5ZmIsIDB4MDAxMDg5ZmIsIDB4MDAxMDg5ZmIsCi0JMHgwMDEwODlmYiwgMHgwMDEwODlmYiwgMHgwMDEwODlmYiwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDQ5M2E2NDAzLAotCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4MDIwMWYwMDAsIDB4MDAwMjA3MjEsCi0JMHg0OTMzYzg1NywgMHg1OWNjMTIwNCwgMHg0ODBhNjAxYywgMHg1OWNjMTQwNCwKLQkweDAyMDFmODAwLCAweDAwMTA5NDEwLCAweDA0MDAwMDFiLCAweDU5MWMwMjAzLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMTcsIDB4NTkxYzAwMDksCi0JMHg4MTM0MDU4MCwgMHgwNDAyMDAxNCwgMHg0ZDMwMDAwMCwgMHg0ZDFjMDAwMCwKLQkweDQxMWU2MDAwLCAweDA0MDFmOWMyLCAweDVjMDIzODAwLCAweDVjMDI2MDAwLAotCTB4MDQwMDAwMGIsIDB4NTljYzAwMDUsIDB4OGMwMDA1MDAsIDB4MDQwMjAwMDMsCi0JMHgwNDAxZjk4YywgMHgwNDAxZjAwMywgMHg0YTAyM2EwMywgMHgwMDAwMDAwMiwKLQkweDRhMDI2NDAzLCAweDAwMDAwMDg2LCAweDA0MDFmMDA1LCAweDA0MDFmOWE2LAotCTB4MDQwMDA3ZjUsIDB4NGEwMjY0MDMsIDB4MDAwMDAwODcsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMSwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzIxLCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLCAweDA0MDAwMDBkLAotCTB4NTljYzE0MDQsIDB4MDIwMWY4MDAsIDB4MDAxMDk0MTAsIDB4MDQwMDAwMDksCi0JMHg1OTFjMDQxNCwgMHg4YzAwMDUxYSwgMHgwNDAwMDAwNiwgMHg0ZDMwMDAwMCwKLQkweDQxMWU2MDAwLCAweDAyMDFmODAwLCAweDAwMTA5MjFlLCAweDVjMDI2MDAwLAotCTB4MWMwMWYwMDAsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTMsIDB4MDQwMjAwMGEsCi0JMHg1OTMwMDQwMywgMHg4MjAwMGQ4MCwgMHgwMDAwMDA4NiwgMHgwNDAwMDAxMiwKLQkweDgyMDAwZDgwLCAweDAwMDAwMDg3LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAorCTB4MDIwMDE4MDAsIDB4MDAxMDA2MTUsIDB4MDIwMDAwMDAsIDB4MDAxMDBlYTEsCisJMHg4MjA0MTQ4MCwgMHgwMDAwMDAxZCwgMHgwNDAyMTAwYywgMHg0YzUwMDAwMCwKKwkweDRjNTQwMDAwLCAweDgzY2NhNDAwLCAweDAwMDAwMDBjLCAweDgzMmNhYzAwLAorCTB4MDAwMDAwMGQsIDB4MDQwMWZiNmUsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsCisJMHgwMjAxZjAwMCwgMHgwMDEwMGVhMSwgMHgwNDAxZmIxMiwgMHgwMjAxZjAwMCwKKwkweDAwMTAwZWExLCAweDQxMmM3ODAwLCAweDAyMDFmODAwLCAweDAwMTAwODJhLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NDkyYzc4MDksIDB4ODQxYzNkNTIsCisJMHg0ODFjN2MwOCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg0ODEyNTgwYSwKKwkweDQ4MDY1YzA5LCAweDU4M2MwNDA0LCAweDU4M2MxMDA1LCAweDU4M2MyMjA4LAorCTB4NDgwMjVjMDQsIDB4NDgwYTU4MDUsIDB4NDgxMjVhMDgsIDB4MDQwMWY3YzgsCisJMHg4YzAwMDUyNCwgMHgwNDAwMDc5NCwgMHg1OTMyNTgwOCwgMHg0YzAwMDAwMCwKKwkweDU5MmMwNDA4LCAweDhjMDAwNTFjLCAweDVjMDAwMDAwLCAweDA0MDIwMDAzLAorCTB4NGEwMjYwMTEsIDB4ZmZmZmZmZmYsIDB4ODQwMDA1MjQsIDB4MDQwMWY3OGEsCisJMHgxYzAxZjAwMCwgMHg1OWE4MDAzOSwgMHg0ODAyNjIwNSwgMHg1OTMyNTgwOCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDU5MmMyNDA4LCAweDU5MzAwODA3LAorCTB4NDkzM2M4NTcsIDB4NDgwN2M4NTcsIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA0OCwgMHgwNDAyMDAwNCwKKwkweDhjMTAyNTAwLCAweDAyMDIwMDAwLCAweDAwMTA5NTUzLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDAsIDB4OGMwNDBkMWUsIDB4MDQwMDAwMjcsIDB4NDE3ODA4MDAsCisJMHg0OTdhNWMwOSwgMHg1OTJjMWMwOSwgMHg1OTMwMDAxMSwgMHg1OTM0MTIwMCwKKwkweDQ5N2E2MjA1LCAweDhjMDgxNTBlLCAweDA0MDIwMDZlLCAweDQ4MDdjODU3LAorCTB4NDgwNjU4MGEsIDB4ODAwMDBkNDAsIDB4MDQwMjBmMDMsIDB4NTkzMDA0MDIsCisJMHg0ODAyNWMwNiwgMHg0ODA2NTgwNywgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywKKwkweDRjMDQwMDAwLCAweDRjMGMwMDAwLCAweDRjMTAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDkzNjUsIDB4NWMwMDIwMDAsIDB4NWMwMDE4MDAsIDB4NWMwMDA4MDAsCisJMHg4YzEwMjUxMiwgMHgwNDAyMDAxYSwgMHg0YzBjMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA0ODAxLCAweDVjMDAxODAwLAorCTB4OGMwYzFkMTgsIDB4MDIwMDAwMDAsIDB4MDAwMjA4YjQsIDB4MDIwMWYwMDAsCisJMHgwMDEwOGY4OCwgMHg0ODEzYzg1NywgMHg4YzEwMjUxOCwgMHgwNDAwMDA0YiwKKwkweDQxNzgwODAwLCAweDU5MmMxYzA5LCAweDgyMGMwNTgwLCAweDAwMDAxMDAwLAorCTB4MDQwMDA3ZDYsIDB4OGMxMDI1MTIsIDB4MDQwMDA3ZDQsIDB4NTkyYzc4MDksCisJMHg1ODNjMDgwYSwgMHg1ODNjMWMwOSwgMHgwNDAxZjdkMCwgMHg0ODA3Yzg1NywKKwkweDU5MmM3ODA5LCAweDU5MzAwNDAyLCAweDU5MmMxNDA0LCAweDhjMDgxNTFlLAorCTB4MDQwMjAwMGQsIDB4NTkyYzEyMDYsIDB4NDgwMDdjMDYsIDB4NDgwNDc4MDcsCisJMHg0ODA4N2EwNiwgMHg4NDEwMjUxMiwgMHg0ODEwN2MwOCwgMHg0YzBjMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTAwODQzLCAweDQwM2U1ODAwLCAweDA0MDFmYWQxLAorCTB4MDQwMWY3ZDksIDB4NDgwMjVjMDYsIDB4NDgwNjU4MDcsIDB4NTgzYzA4MGMsCisJMHg1ODNjMDAwYiwgMHg4MDA0MGMwMCwgMHg4MjA0MTQ4MCwgMHgwMDAwMDAxZCwKKwkweDA0MDAxMDA2LCAweDU4M2MxMDAxLCAweDQ4MGE1ODAxLCAweDQ5Nzg3ODAxLAorCTB4NDIwMDA4MDAsIDB4MDAwMDAwMWMsIDB4ODIwNDBjMDAsIDB4MDAwMDAwMTQsCisJMHg0YzBjMDAwMCwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg4MjNjYTQwMCwKKwkweDAwMDAwMDA4LCAweDgzMmNhYzAwLCAweDAwMDAwMDA4LCAweDRjMTAwMDAwLAorCTB4NGMzYzAwMDAsIDB4MDQwMWZhZDIsIDB4NWMwMDc4MDAsIDB4NWMwMDIwMDAsCisJMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHg4NDEwMjUxMiwgMHg0ODEyNWMwOCwKKwkweDQwM2U1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwODQzLCAweDQyMDM0MDAwLAorCTB4MDAxMGIyYTAsIDB4NTlhMWQ4MWUsIDB4ODBlZGQ5YzAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg0OGVmYzg1NywgMHg1OGVjMDAwOSwgMHg0ODAzYzg1NywKKwkweDA4MDFmODAwLCAweDA0MDFmN2FjLCAweDQ5MzNjODU3LCAweDFjMDFmMDAwLAorCTB4NTkzMDE0MTQsIDB4NDgwYmM4NTcsIDB4OGMwODE1MWMsIDB4MDQwMjAwMGUsCisJMHg4MDAwMDU0MCwgMHg0ODAzYzg1NywgMHgwNDAwMDc4ZCwgMHg4MDA0MmM4MCwKKwkweDA0MDIxNzhiLCAweDhjMDgxNTE0LCAweDA0MDIwMDA1LCAweDU5MmMwODBmLAorCTB4NDgwN2M4NTcsIDB4ODAwNDA0ODAsIDB4NDgwMjYwMTYsIDB4ODQwODE1NWMsCisJMHg0ODBhNjQxNCwgMHg1OTMwMTAwNywgMHg4NDA4MTUxZSwgMHg0ODBhNjAwNywKKwkweDRjMTAwMDAwLCAweDRjM2MwMDAwLCAweDRkNDAwMDAwLCAweDU5MmU4MjA2LAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDkzNjUsCisJMHg0OTQyNWEwNiwgMHg1YzAyODAwMCwgMHg1YzAwNzgwMCwgMHg1YzAwMjAwMCwKKwkweDQ5N2E1YzA5LCAweDhjMTAyNTEyLCAweDA0MDAwMDA2LCAweDRkMmMwMDAwLAorCTB4NDAzZTU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4NDMsIDB4NWMwMjU4MDAsCisJMHg4MjEwMjUwMCwgMHhmZmZmZWRmZiwgMHg0ODEyNWMwOCwgMHgwMjAxZjAwMCwKKwkweDAwMTA4ZmM2LCAweDU5MzI1ODA4LCAweDU5MmMwNDA4LCAweDhjMDAwNTE4LAorCTB4MDQwMDAwMDQsIDB4NDEyZGY4MDAsIDB4MDIwMWYwMDAsIDB4MDAxMDBlYmEsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg1OTMyNTgwOCwgMHg0OTdhNWMwOSwKKwkweDRhMDI1YTA2LCAweDAwMDAwMDAwLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAorCTB4NTkzMDA4MTEsIDB4NDgwN2M4NTcsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMGEsCisJMHg0ODA2NTgwNywgMHg1OTMwMGMwMiwgMHg0ODA2NWMwNiwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA0ODAxLCAweDAyMDFmMDAwLAorCTB4MDAwMjA4YjQsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsIDB4MDQwMjAwMDUsCisJMHg1OTMwMDgxMSwgMHgwNDAxZmU0YywgMHg0ODA2NTgwNywgMHgwNDAxZjdmMiwKKwkweDU5MmMwMjA4LCAweDhjMDAwNTBlLCAweDA0MDIwN2ZhLCAweDQ5MzNjODU3LAorCTB4MDIwMWYwMDAsIDB4MDAxMDhmYzYsIDB4NDkzM2M4NTcsIDB4NTkzMjU4MDgsCisJMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg1OTJjMDIwYSwKKwkweDhjMDAwNTAyLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDRhMDI2MjA2LAorCTB4MDAwMDAwMDIsIDB4MWMwMWYwMDAsIDB4NTkzMDAwMWMsIDB4ODAwMDAxYzAsCisJMHgwMjAyMDgwMCwgMHgwMDEwOTYxYSwgMHg1OTMwMDAwNywgMHg0OTMzYzg1NywKKwkweDQ4MDNjODU3LCAweDhjMDAwNTBlLCAweDA0MDAwMDM3LCAweDhjMDAwNTAwLAorCTB4MDQwMDAwMjksIDB4OGMwMDA1MWMsIDB4MDQwMDAwMGEsIDB4ODQwMDA1MDAsCisJMHg0ODAyNjAwNywgMHg1OTMyNTgwOCwgMHg1OTJjM2MwOCwgMHg0ODFmYzg1NywKKwkweDg0MWMzZDU4LCAweDQ4MWU1YzA4LCAweDAyMDFmMDAwLCAweDAwMDIwOTE0LAorCTB4NTkzMjU4MDgsIDB4NTkyYzNjMDgsIDB4ODQxYzNkNTgsIDB4NTkzMDAwMDcsCisJMHg4YzAwMDUxYywgMHgwNDAyMDdmMiwgMHg0ODFlNWMwOCwgMHg0MjAwMDAwMCwKKwkweDAwMDAwMDA1LCAweDQwMDAwMDAwLCAweDgwMDAwMDQwLCAweDA0MDIwN2ZlLAorCTB4NTkzMDAwMDcsIDB4OGMwMDA1MWMsIDB4MDQwMjA3ZTksIDB4NTkyYzAyMDQsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA0OCwKKwkweDA0MDIwMDAzLCAweDQ5N2E1ODBiLCAweDA0MDFmMDAyLCAweDQ5N2E1YzA5LAorCTB4NDgxZTVjMDgsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsIDB4MDIwMWYwMDAsCisJMHgwMDEwMGVhMSwgMHg4YzAwMDUyNCwgMHgwNDAwMDdkOSwgMHg1OTMyNTgwOCwKKwkweDRjMDAwMDAwLCAweDU5MmMwNDA4LCAweDhjMDAwNTFjLCAweDVjMDAwMDAwLAorCTB4MDQwMjAwMDMsIDB4NGEwMjYwMTEsIDB4ZmZmZmZmZmYsIDB4ODQwMDA1MjQsCisJMHgwNDAxZjdjZiwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0MTc4MDgwMCwKKwkweDgzMzgwNDgwLCAweDAwMDAwMDU4LCAweDA0MDIxMDBiLCAweDgzMzgwNDgwLAorCTB4MDAwMDAwNDAsIDB4MDQwMDEwMDgsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCisJMHg4MTJlNTljMCwgMHgwYzAyMDgwNiwgMHg1YzAyNTgwMCwgMHgwMjAxZjAwMCwKKwkweDAwMDIwOGI0LCAweDQ5M2JjODU3LCAweDFjMDFmMDAwLCAweDAwMTA4NzYzLAorCTB4MDAxMDg3NjMsIDB4MDAxMDg3NjMsIDB4MDAxMDg3NjMsIDB4MDAxMDg3NjMsCisJMHgwMDEwODc2NSwgMHgwMDEwODc2MywgMHgwMDEwODc2MywgMHgwMDEwODc2MywKKwkweDAwMTA4NzYzLCAweDAwMTA4NzYzLCAweDAwMTA4NzYzLCAweDAwMTA4NzYzLAorCTB4MDAxMDg3NjMsIDB4MDAxMDg3NjMsIDB4MDAxMDg3NjMsIDB4MDAxMDg3NjMsCisJMHgwMDEwODc2MywgMHgwMDEwODc2MywgMHgwMDEwODc2MywgMHgwMDEwODc2YSwKKwkweDAwMTA4NzYzLCAweDAwMTA4NzYzLCAweDAwMTA4NzYzLCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4NTljYzBhMDgsIDB4NDk3YTU4MDcsIDB4NDgwN2M4NTcsCisJMHg4MjA0MGQwMCwgMHgwMDAwMGZmZiwgMHg1OTMwMDQwMiwgMHg0ODAyNWMwNiwKKwkweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDQ4MDY1YzA5LCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMDAsIDB4ODAwNDA5YzAsIDB4MDIwMDAwMDAsIDB4MDAwMjAzODEsCisJMHg1OWNjMDAwOSwgMHg0ODAyNTgwYSwgMHg4MjA0MjUwMCwgMHgwMDAwMDEwMCwKKwkweDA0MDAwMDAyLCAweDU5Y2MyMDBiLCAweDQ4MTI1ODBjLCAweDgyMDQwNTAwLAorCTB4MDAwMDAyMDAsIDB4MDQwMDAwMDIsIDB4NTljYzAwMGEsIDB4NDgwMjU4MGIsCisJMHg4MDEwMGMwMCwgMHgwMjAwMTgwMCwgMHgwMDEwMDYxNSwgMHgwMjAwMDAwMCwKKwkweDAwMDIwMzgxLCAweDgyMDQxNDgwLCAweDAwMDAwMDFkLCAweDA0MDAxMDA2LAorCTB4NTkyYzA0MDQsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMGUsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAxYywgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg4M2NjYTQwMCwKKwkweDAwMDAwMDBjLCAweDgzMmNhYzAwLCAweDAwMDAwMDBkLCAweDA0MDFmOWMwLAorCTB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4MDIwMWYwMDAsIDB4MDAwMjAzODEsCisJMHgwNDAxZjk2NCwgMHgwNDAxZjE5ZiwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA5MywKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDgzMzgwNDgwLCAweDAwMDAwMDg1LAorCTB4MDIwMDE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWYwMDEsIDB4MDAxMDg3YjIsCisJMHgwMDEwODdiMCwgMHgwMDEwODdiMCwgMHgwMDEwODdiOSwgMHgwMDEwODdiMCwKKwkweDAwMTA4N2IwLCAweDAwMTA4N2IwLCAweDAwMTA4N2IwLCAweDAwMTA4N2IwLAorCTB4MDAxMDg3YjAsIDB4MDAxMDg3YjAsIDB4MDAxMDg3YjAsIDB4MDAxMDg3YjAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwKKwkweDQ5M2E2NDAzLCAweDQyMDAwODAwLCAweDgwMDAwMDQwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA4NTUsIDB4NDkzM2M4NTcsIDB4NTljYzE0MDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTFkOSwgMHgwNDAwMDAxYiwgMHg1OTFjMDIwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAwLCAweDA0MDAwMDE3LCAweDU5MWMwMDA5LCAweDgxMzQwNTgwLAorCTB4MDQwMjAwMTQsIDB4NGQzMDAwMDAsIDB4NGQxYzAwMDAsIDB4NDExZTYwMDAsCisJMHgwNDAxZjljMywgMHg1YzAyMzgwMCwgMHg1YzAyNjAwMCwgMHgwNDAwMDAwYiwKKwkweDU5Y2MwMDA1LCAweDhjMDAwNTAwLCAweDA0MDIwMDAzLCAweDA0MDFmOThkLAorCTB4MDQwMWYwMDMsIDB4NGEwMjNhMDMsIDB4MDAwMDAwMDIsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDA4NiwgMHgwNDAxZjAwNSwgMHgwNDAxZjlhNywgMHgwNDAwMDdmNSwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDg3LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAorCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4NTUsCisJMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHgwNDAwMDAwZCwgMHg1OWNjMTQwNCwKKwkweDAyMDFmODAwLCAweDAwMTA5MWQ5LCAweDA0MDAwMDA5LCAweDU5MWMwNDE0LAorCTB4OGMwMDA1MWEsIDB4MDQwMDAwMDYsIDB4NGQzMDAwMDAsIDB4NDExZTYwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwOGZkYiwgMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDEzLCAweDA0MDIwMDBiLCAweDU5MzAwNDAzLAorCTB4NDgwM2M4NTcsIDB4ODIwMDBkODAsIDB4MDAwMDAwODYsIDB4MDQwMDAwMTIsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDA4NywgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwKIAkweDA0MDFmMDBkLCAweDgzMzgwNTgwLCAweDAwMDAwMDI3LCAweDA0MDAwMDA1LAotCTB4ODMzODA1ODAsIDB4MDAwMDAwMTQsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0OTNiYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHgwMjAxZjAwMCwKLQkweDAwMTA3OTExLCAweDQ5MzNjODU3LCAweDAyMDFmMDAwLCAweDAwMTA3OTExLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMTQsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCisJMHg0OTNiYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwgMHgwMjAxZjAwMCwKKwkweDAwMTA3Njk4LCAweDQ5MzNjODU3LCAweDAyMDFmMDAwLCAweDAwMTA3Njk4LAogCTB4ODMzODA1ODAsIDB4MDAwMDAwMTMsIDB4MDQwMjAwMDUsIDB4NTkzMDA0MDMsCiAJMHg4MjAwMDQ4MCwgMHgwMDAwMDA4NSwgMHgwYzAxZjA0ZCwgMHg4MzM4MDU4MCwKIAkweDAwMDAwMDI3LCAweDA0MDIwMDQxLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAotCTB4MDAxMDZiYmYsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAxNSwKKwkweDAwMTA2OGY2LCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDFkZTIsIDB4NWMwMjc4MDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMTUsCiAJMHg0MTc4MjgwMCwgMHg0MjAwMjAwMCwgMHgwMDAwMDAwMywgMHg0MjAyODAwMCwKIAkweDAwMDAwMDI5LCAweDRkNDAwMDAwLCAweDRkNDQwMDAwLCAweDU5MzY4YzAzLAotCTB4MDIwMWY4MDAsIDB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKLQkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDBjLCAweDRkMmMwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDk2MmEsIDB4NWMwMjg4MDAsIDB4NWMwMjgwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjY2MywgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwKKwkweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDBjLCAweDRkMmMwMDAwLAogCTB4NTkzMjU4MDgsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4NTkzMDA0MDIsCiAJMHg0ODAyNWMwNiwgMHg0OTdhNWMwOSwgMHg0OTQyNWEwNiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMmRhLCAweDVjMDI1ODAwLCAweDAyMDFmODAwLCAweDAwMTA5MTJhLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4ODMzODA1ODAsIDB4MDAwMDAwODksCisJMHgwMDAyMDM4MSwgMHg1YzAyNTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOGVlNywKKwkweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDgzMzgwNTgwLCAweDAwMDAwMDg5LAogCTB4MDQwMDAwMDUsIDB4ODMzODA1ODAsIDB4MDAwMDAwOGEsIDB4MDIwMjAwMDAsCi0JMHgwMDEwNzk3NCwgMHgwMjAxZjgwMCwgMHgwMDEwNmY2MCwgMHgwMjAyMDAwMCwKLQkweDAwMTA3OTc0LCAweDU5MzAwYTAzLCAweDgyMDQwNTgwLCAweDAwMDAwMDBhLAorCTB4MDAxMDc2ZmIsIDB4MDIwMWY4MDAsIDB4MDAxMDZjYjQsIDB4MDIwMjAwMDAsCisJMHgwMDEwNzZmYiwgMHg1OTMwMGEwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYSwKIAkweDA0MDAwMDJhLCAweDgyMDQwNTgwLCAweDAwMDAwMDBjLCAweDA0MDAwMDI3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTQsCi0JMHgwNDAyMDdlYSwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwKLQkweDQyMDI4MDAwLCAweDAwMDAwMDA2LCAweDA0MDFmN2QyLCAweDAwMTA4YWJhLAotCTB4MDAxMDhhYjgsIDB4MDAxMDhhYjgsIDB4MDAxMDhhYjgsIDB4MDAxMDhhYjgsCi0JMHgwMDEwOGFiOCwgMHgwMDEwOGFjMCwgMHgwMDEwOGFiOCwgMHgwMDEwOGFiOCwKLQkweDAwMTA4YWI4LCAweDAwMTA4YWI4LCAweDAwMTA4YWI4LCAweDAwMTA4YWI4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NDkzM2M4NTcsIDB4NTlhODAwMzcsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNCwKKwkweDA0MDIwN2VhLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2OGY2LAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMDYsIDB4MDQwMWY3ZDIsIDB4MDAxMDg4NmUsCisJMHgwMDEwODg2YywgMHgwMDEwODg2YywgMHgwMDEwODg2YywgMHgwMDEwODg2YywKKwkweDAwMTA4ODZjLCAweDAwMTA4ODc0LCAweDAwMTA4ODZjLCAweDAwMTA4ODZjLAorCTB4MDAxMDg4NmMsIDB4MDAxMDg4NmMsIDB4MDAxMDg4NmMsIDB4MDAxMDg4NmMsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0OTMzYzg1NywgMHg1OWE4MDAzNywKIAkweDQ4MDI2MjA2LCAweDRhMDI2MjAzLCAweDAwMDAwMDBhLCAweDFjMDFmMDAwLAogCTB4NDkzM2M4NTcsIDB4NTlhODAwMzcsIDB4NDgwMjYyMDYsIDB4NGEwMjYyMDMsCiAJMHgwMDAwMDAwYywgMHgxYzAxZjAwMCwgMHg4MzM4MDU4MCwgMHgwMDAwMDA4OSwKIAkweDA0MDAwMDA4LCAweDgzMzgwNTgwLCAweDAwMDAwMDhhLCAweDA0MDAwMDMyLAotCTB4NDkzM2M4NTcsIDB4NDkzYmM4NTcsIDB4MDIwMWYwMDAsIDB4MDAxMDc5NzQsCisJMHg0OTMzYzg1NywgMHg0OTNiYzg1NywgMHgwMjAxZjAwMCwgMHgwMDEwNzZmYiwKIAkweDQ5MzNjODU3LCAweDU5MzI1ODA4LCAweDU5MzAwYTFkLCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMDMsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5YjIsCisJMHgwMDAwMDAwMywgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDgwMSwKIAkweDA0MDFmMDBjLCAweDU5MzAwMjFkLCAweDgyMDAwNTgwLCAweDAwMDAwMDAxLAogCTB4MDQwMjAwMDgsIDB4NTkzMDBjMTYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMzksCiAJMHgwNDAwMDAyYywgMHg4MjA0MDU4MCwgMHgwMDAwMDAzNSwgMHgwNDAwMDAyOSwKLQkweDRjMzQwMDAwLCAweDQxMzA2ODAwLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAorCTB4NGM1YzAwMDAsIDB4NDEzMGI4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsCiAJMHgwNDAwMDAxMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywKIAkweDAwMDAwMDFlLCAweDU5Y2MwYzA3LCAweDQ4MDY2NDE5LCAweDU5Y2MwYTA3LAogCTB4NDgwNjYyMTksIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsCi0JMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyMSwKLQkweDQwMzY2MDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDVjMDA2ODAwLAorCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4NTUsCisJMHg0MDVlNjAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDhiNCwgMHg1YzAwYjgwMCwKIAkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwMjFkLCAweDgyMDAwNTgwLAogCTB4MDAwMDAwMDEsIDB4MDQwMjAwNDAsIDB4NTkzMDBjMTYsIDB4ODIwNDA1ODAsCiAJMHgwMDAwMDAzNSwgMHgwNDAwMDAwNywgMHg4MjA0MDU4MCwgMHgwMDAwMDAxZSwKIAkweDA0MDAwMDA0LCAweDgyMDQwNTgwLCAweDAwMDAwMDM5LCAweDA0MDIwMDM2LAogCTB4NDkzM2M4NTcsIDB4NGM1MDAwMDAsIDB4NGQxYzAwMDAsIDB4NDEzMGEwMDAsCi0JMHg0MDA2NzAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTNiYSwgMHgwNDAyMDAyOSwKLQkweDAyMDFmODAwLCAweDAwMDIwNzVhLCAweDA0MDAwMDI2LCAweDQ5MWZjODU3LAorCTB4NDAwNjcwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDkxODMsIDB4MDQwMjAwMjksCisJMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwNDAwMDAyNiwgMHg0OTFmYzg1NywKIAkweDQ5MzNjODU3LCAweDgzMzgwNTgwLCAweDAwMDAwMDM1LCAweDA0MDAwMDA0LAogCTB4ODMzODA1ODAsIDB4MDAwMDAwMzksIDB4MDQwMjAwMDIsIDB4NDkzMjM4MWMsCiAJMHg0OTNhNjQwMywgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwNiwKQEAgLTg5NDksMTcgKzg4MDIsMTcgQEAKIAkweDQ4MDdjODU3LCAweDQ4MDY2MjE1LCAweDU4NTAwYTE2LCAweDQ4MDdjODU3LAogCTB4NDgwNjYyMTYsIDB4NTg1MDBjMTksIDB4NDgwN2M4NTcsIDB4NDgwNjY0MTksCiAJMHg1ODUwMGExOSwgMHg0ODA3Yzg1NywgMHg0ODA2NjIxOSwgMHg0OTFlNjAxZSwKLQkweDQyMDAwODAwLCAweDgwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMDIwNzIxLAorCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4NTUsCiAJMHg0MDUyNjAwMCwgMHg1YzAyMzgwMCwgMHg1YzAwYTAwMCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzdkLCAweDU5MzAwMjFkLCAweDgyMDAwNTgwLCAweDAwMDAwMDAzLAotCTB4MDIwMDA4MDAsIDB4MDAxMDQ5YjIsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsCisJMHgwMDAyMDhiNCwgMHg1OTMwMDIxZCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywKKwkweDAyMDAwODAwLCAweDAwMTA0ODAxLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LAogCTB4NDgwM2M4NTYsIDB4NGM1MDAwMDAsIDB4NGM1NDAwMDAsIDB4NDEyYzc4MDAsCiAJMHg0YzNjMDAwMCwgMHg0MjAwMjgwMCwgMHgwMDAwMDAwMSwgMHg4MjA0MDQ4MCwKIAkweDAwMDAwMTAxLCAweDA0MDAxMDAzLCAweDQyMDAwODAwLCAweDAwMDAwMTAwLAogCTB4NDAwNDMwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMWMsIDB4ODNjY2E0MDAsCiAJMHgwMDAwMDAwYywgMHg4MzJjYWMwMCwgMHgwMDAwMDAwZCwgMHgwNDAxZjg0NCwKIAkweDgyMTgzNDgwLCAweDAwMDAwMDFjLCAweDU5MmU1ODAxLCAweDgxMmU1OWMwLAotCTB4MDIwMjA4MDAsIDB4MDAxMDA3ZmQsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZTQsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDg0MywgMHgwMjAxZjgwMCwgMHgwMDEwMDgyYSwKIAkweDA0MDAwMDE3LCAweDgwMTQyODAwLCAweDRhMDI1YTA0LCAweDAwMDAwMTEwLAogCTB4NDk3YTVjMDQsIDB4NDkyYzc4MDEsIDB4ODIxODBjODAsIDB4MDAwMDAwM2QsCiAJMHgwNDAyMTAwNiwgMHg0MDE4MDgwMCwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNSwKQEAgLTg5NzAsODkgKzg4MjMsODkgQEAKIAkweDQwM2U1ODAwLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLCAweDFjMDFmMDAwLAogCTB4NDkyZmM4NTcsIDB4ODEyZTU5YzAsIDB4MDQwMDAwMGYsIDB4NGQyYzAwMDAsCiAJMHg0YzNjMDAwMCwgMHg1OTJjNzgwMSwgMHg4MDNjNzljMCwgMHgwNDAwMDAwNiwKLQkweDQ5N2E1ODAxLCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDQwM2U1ODAwLAotCTB4MDQwMWY3ZjksIDB4NWMwMDc4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCisJMHg0OTdhNTgwMSwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHg0MDNlNTgwMCwKKwkweDA0MDFmN2Y5LCAweDVjMDA3ODAwLCAweDAyMDFmODAwLCAweDAwMDIwMzgxLAogCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGM1ODAwMDAsCiAJMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywgMHg4MDA0YjEwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYjE3LCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4MDAxMGE5M2UsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCiAJMHg0YzU4MDAwMCwgMHg4MjA0MGMwMCwgMHgwMDAwMDAwMywgMHg4MDA0YjEwNCwKLQkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsCiAJMHg1OTFjMGMwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAwNCwKIAkweDgyMDQwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDFhLCAweDRkMzAwMDAwLAogCTB4NGQyYzAwMDAsIDB4NDExZTYwMDAsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTAzNywgMHgwNDAwMDAwZiwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwKKwkweDAwMTA4ZGY0LCAweDA0MDAwMDBmLCAweDRkNDAwMDAwLCAweDQyMDI4MDAwLAogCTB4MDAwMDAwMTMsIDB4NTkyYzBhMDgsIDB4ODQwNDBkNTQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNGU3MCwgMHg1YzAyODAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5YywKLQkweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmODAwLCAweDAwMTA5MTJhLAotCTB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsIDB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsCisJMHgwMDEwNGJlZSwgMHg1YzAyODAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwOTM2NSwKKwkweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA4ZWU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDc2OTgsIDB4NWMwMjU4MDAsIDB4NWMwMjYwMDAsCiAJMHgxYzAxZjAwMCwgMHg1OWNjMDAwNSwgMHg4YzAwMDUwMCwgMHgwNDAyMDAwYiwKIAkweDU5MWMwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDA3LAogCTB4NTkxYzBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwODUsIDB4MDQwMDAwMDMsCiAJMHg4MjA0MDU4MCwgMHgwMDAwMDA4YiwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKIAkweDRkM2MwMDAwLCAweDQyMDI3ODAwLCAweDAwMDAwMDAyLCAweDU5MzAwNDA2LAotCTB4ODIwMDBjODAsIDB4MDAwMDAwMTIsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDAxMiwgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwKIAkweDBjMDFmODBhLCAweDVjMDI3ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAogCTB4NTkzMDA0MDYsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTIsIDB4MDIwMjE4MDAsCi0JMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwgMHgwMDEwOGMwMSwgMHgwMDEwOGJmZSwKLQkweDAwMTA4YmZlLCAweDAwMTA4YzI5LCAweDAwMTA4YmZjLCAweDAwMTA4YmZlLAotCTB4MDAxMDhjMWEsIDB4MDAxMDhiZmUsIDB4MDAxMDhiZmMsIDB4MDAxMDY1ZjQsCi0JMHgwMDEwOGJmZSwgMHgwMDEwOGJmZSwgMHgwMDEwOGJmZSwgMHgwMDEwOGJmYywKLQkweDAwMTA4YmZjLCAweDAwMTA4YmZjLCAweDAwMTA4Y2Y5LCAweDAwMTA4YmZlLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwM2M4NTYsIDB4ODAwMDA1ODAsCisJMHgwMDEwMDYxNSwgMHgwYzAxZjAwMSwgMHgwMDEwODliNSwgMHgwMDEwODliMiwKKwkweDAwMTA4OWIyLCAweDAwMTA4OWRkLCAweDAwMTA4OWIwLCAweDAwMTA4OWIyLAorCTB4MDAxMDg5Y2UsIDB4MDAxMDg5YjIsIDB4MDAxMDg5YjAsIDB4MDAxMDYzMmMsCisJMHgwMDEwODliMiwgMHgwMDEwODliMiwgMHgwMDEwODliMiwgMHgwMDEwODliMCwKKwkweDAwMTA4OWIwLCAweDAwMTA4OWIwLCAweDAwMTA4YWFkLCAweDAwMTA4OWIyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NDgwM2M4NTYsIDB4ODAwMDA1ODAsCiAJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg4ZDNlN2QwMiwgMHgwNDAyMDAxNiwKLQkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDBmLCAweDU5MzI1ODA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDhkZjQsIDB4MDQwMDAwMGYsIDB4NTkzMjU4MDgsCiAJMHg0MTc4MDgwMCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNSwKLQkweDAyMDFmODAwLCAweDAwMTA0ZTcwLCAweDVjMDI4MDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDk1OWMsIDB4MDIwMWY4MDAsIDB4MDAxMDkxY2MsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDJkYSwgMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwgMHg4MjAwMDU0MCwKKwkweDAyMDFmODAwLCAweDAwMTA0YmVlLCAweDVjMDI4MDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDkzNjUsIDB4MDIwMWY4MDAsIDB4MDAxMDhmODMsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDM4MSwgMHgwMjAxZjgwMCwgMHgwMDEwNzY5OCwgMHg4MjAwMDU0MCwKIAkweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAotCTB4MDAxMDQ4ZDksIDB4MDQwMjAwMGMsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsCi0JMHgwMDAwMDAxMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTFkMSwgMHg0YTAyNjQwNiwKKwkweDAwMTA0NzI4LCAweDA0MDIwMDBjLCAweDRkNDAwMDAwLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDlmYzAsIDB4NGEwMjY0MDYsCiAJMHgwMDAwMDAwNiwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHg1YzAyODAwMCwKLQkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2YzU1LAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDY5OGMsCiAJMHg0ZGYwMDAwMCwgMHgwNDAxZjhiOCwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwKLQkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA4YzQzLAotCTB4MDAxMDhjYjAsIDB4MDAxMDhjNWEsIDB4MDAxMDhjYzMsIDB4MDAxMDhjYWIsCi0JMHgwMDEwOGM0MSwgMHgwMDEwOGM0MywgMHgwMDEwOGM0MywgMHgwMDEwOGM0NywKLQkweDAwMTA4YzQzLCAweDAwMTA4YzQzLCAweDAwMTA4YzQzLCAweDAwMTA4YzQzLAotCTB4MDAxMDhjNWEsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NWMwM2UwMDAsCi0JMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHgwNDAxZjdiOCwgMHg1YzAzZTAwMCwKLQkweDAyMDAwODAwLCAweDAwMTA2YzRiLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLAorCTB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWYwMDEsIDB4MDAxMDg5ZjcsCisJMHgwMDEwOGE2NCwgMHgwMDEwOGEwZSwgMHgwMDEwOGE3NywgMHgwMDEwOGE1ZiwKKwkweDAwMTA4OWY1LCAweDAwMTA4OWY3LCAweDAwMTA4OWY3LCAweDAwMTA4OWZiLAorCTB4MDAxMDg5ZjcsIDB4MDAxMDg5ZjcsIDB4MDAxMDg5ZjcsIDB4MDAxMDg5ZjcsCisJMHgwMDEwOGEwZSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg1YzAzZTAwMCwKKwkweDAyMDAwODAwLCAweDAwMTA2OTgyLCAweDA0MDFmN2I4LCAweDVjMDNlMDAwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDY5ODIsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsCiAJMHgwMDAwMDAwMywgMHgwNDAyMDdiNCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKIAkweDAwMDAwMDBkLCAweDA0MDAwN2IwLCAweDhkM2U3ZDAyLCAweDA0MDIwN2FlLAotCTB4NGQzNDAwMDAsIDB4NTkzMjY4MDksIDB4MDIwMWY4MDAsIDB4MDAxMDQ5YjIsCisJMHg0ZDM0MDAwMCwgMHg1OTMyNjgwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNDgwMSwKIAkweDVjMDI2ODAwLCAweDA0MDFmN2E4LCAweDU5MzAwMDA0LCAweDg0MDAwNTVjLAotCTB4NDgwMjYwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNGIsIDB4NTkzMDA0MDYsCisJMHg0ODAyNjAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNjk4MiwgMHg1OTMwMDQwNiwKIAkweDgyMDAwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwMDQzLCAweDhkM2U3ZDAyLAogCTB4MDQwMjAwNDEsIDB4NDk3YTYyMWQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCiAJMHgwMDAwMDAwZCwgMHgwNDAwMDAwMywgMHg0YTAyNjIxZCwgMHgwMDAwMDAwMywKLQkweDA0MDFmYmNiLCAweDA0MDAwMDI0LCAweDRkMmMwMDAwLCAweDRkNDAwMDAwLAotCTB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkxY2MsIDB4NTkyYzA0MDgsCisJMHgwNDAxZmJkNCwgMHgwNDAwMDAyNCwgMHg0ZDJjMDAwMCwgMHg0ZDQwMDAwMCwKKwkweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA4ZjgzLCAweDU5MmMwNDA4LAogCTB4OGMwMDA1MTIsIDB4MDQwMDAwMDksIDB4NGQyYzAwMDAsIDB4ODQwMDA1MTIsCiAJMHg0ODAyNWMwOCwgMHg1OTJjMDgwOSwgMHg0MDA2NTgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAwN2ZkLCAweDVjMDI1ODAwLCAweDRkNDAwMDAwLCAweDQyMDI4MDAwLAorCTB4MDAxMDA4NDMsIDB4NWMwMjU4MDAsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsCiAJMHgwMDAwMDAwNSwgMHg1OTJjMGEwOCwgMHg4YzA0MGQwZSwgMHgwNDAwMDAwNCwKIAkweDQyMDI4MDAwLCAweDAwMDAwMDAyLCAweDA0MDFmMDAxLCAweDAyMDFmODAwLAotCTB4MDAxMDRlNzAsIDB4NWMwMjgwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OWMsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHg0OTdhNjAwOCwgMHg1YzAyODAwMCwKKwkweDAwMTA0YmVlLCAweDVjMDI4MDAwLCAweDAyMDFmODAwLCAweDAwMTA5MzY1LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4NDk3YTYwMDgsIDB4NWMwMjgwMDAsCiAJMHg1YzAyNTgwMCwgMHg4ZDNlN2QwMCwgMHgwNDAwMDAwOSwgMHg0ZDM0MDAwMCwKLQkweDU5MzI2ODA5LCAweDAyMDFmODAwLCAweDAwMTA0OWIyLCAweDVjMDI2ODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsIDB4MDQwMWYwMGIsIDB4NGEwMjY0MDMsCisJMHg1OTMyNjgwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNDgwMSwgMHg1YzAyNjgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA3Njk4LCAweDA0MDFmMDBiLCAweDRhMDI2NDAzLAogCTB4MDAwMDAwODUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MDYsCiAJMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwgMHg4MDAwNDA0YiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzIxLCAweDVjMDNlMDAwLCAweDAyMDIwODAwLCAweDAwMTA2YzU1LAorCTB4MDAwMjA4NTUsIDB4NWMwM2UwMDAsIDB4MDIwMjA4MDAsIDB4MDAxMDY5OGMsCiAJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2YzRiLCAweDAyMDFmODAwLCAweDAwMTAwZTk5LCAweDA0MDFmN2FiLAorCTB4MDAxMDY5ODIsIDB4MDIwMWY4MDAsIDB4MDAxMDBlZTQsIDB4MDQwMWY3YWIsCiAJMHg1OThjMDAwZCwgMHg4MTMwMDU4MCwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZThlLCAweDA0MDIwMDFiLCAweDAyMDFmODAwLCAweDAwMTA2OGQzLAorCTB4MDAxMDZiZTIsIDB4MDQwMjAwMWIsIDB4MDIwMWY4MDAsIDB4MDAxMDY2MTksCiAJMHgwNDAyMDAwNiwgMHg1OTMwMGMwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDA0MCwKLQkweDA0MDAwNzhiLCAweDA0MDFmNzlkLCAweDAyMDFmODAwLCAweDAwMTA2YjZjLAotCTB4MDQwMDAwMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDQwMWY4MTMsCi0JMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmU2MiwgMHgwNDAyMDAwOSwKLQkweDAyMDFmODAwLCAweDAwMTA2N2FlLCAweDA0MDIwN2Y0LCAweDU5MzAwYzAzLAorCTB4MDQwMDA3OGIsIDB4MDQwMWY3OWQsIDB4MDIwMWY4MDAsIDB4MDAxMDY4YTMsCisJMHgwNDAwMDAxMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHgwNDAxZjgxMywKKwkweDA0MDIwMDA0LCAweDAyMDFmODAwLCAweDAwMTA2YmIyLCAweDA0MDIwMDA5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDY0ZjYsIDB4MDQwMjA3ZjQsIDB4NTkzMDBjMDMsCiAJMHg4MjA0MDU4MCwgMHgwMDAwMDA0MCwgMHgwNDAwMDc3OSwgMHgwNDAxZjc4YiwKIAkweDU5MzAwMjAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLAotCTB4MDAxMDA1ZDgsIDB4MGMwMWY3NWUsIDB4NDE3YTMwMDAsIDB4NDIwMzIwMDAsCisJMHgwMDEwMDYxNSwgMHgwYzAxZjc1ZSwgMHg0MTdhMzAwMCwgMHg0MjAzMjAwMCwKIAkweDAwMDBiZjMyLCAweDU5OTAwMDA0LCAweDgxMzAwNTgwLCAweDA0MDAwMDA5LAogCTB4ODM5MzI0MDAsIDB4MDAwMDAwMTAsIDB4ODExYTMwMDAsIDB4ODMxODA0ODAsCiAJMHgwMDAwMDAwNSwgMHgwNDAwMTdmOCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKQEAgLTkwNjEsNTg1ICs4OTE0LDU5MSBAQAogCTB4ODIwMDBkMDAsIDB4MDAwMDAwMWYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsCiAJMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMywgMHgwNDAxZjAwNSwKIAkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDU5MzAwMjAzLAotCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsCisJMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywKIAkweDRkZjAwMDAwLCAweDU5MzAwMjAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDBlLAotCTB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMDEsIDB4MDAxMDhkMTMsCi0JMHgwMDEwOGQzMCwgMHgwMDEwOGQxNywgMHgwMDEwOGQxMSwgMHgwMDEwOGQxMSwKLQkweDAwMTA4ZDExLCAweDAwMTA4ZDExLCAweDAwMTA4ZDExLCAweDAwMTA4ZDExLAotCTB4MDAxMDhkMTEsIDB4MDAxMDhkMTEsIDB4MDAxMDhkMTEsIDB4MDAxMDhkMTEsCi0JMHgwMDEwOGQxMSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1YzAzZTAwMCwKLQkweDAyMDAwODAwLCAweDAwMTA2YzRiLCAweDA0MDFmNmU4LCAweDVjMDNlMDAwLAotCTB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHgwYzAxZjAwMSwgMHgwMDEwOGFjNywKKwkweDAwMTA4YWU0LCAweDAwMTA4YWNiLCAweDAwMTA4YWM1LCAweDAwMTA4YWM1LAorCTB4MDAxMDhhYzUsIDB4MDAxMDhhYzUsIDB4MDAxMDhhYzUsIDB4MDAxMDhhYzUsCisJMHgwMDEwOGFjNSwgMHgwMDEwOGFjNSwgMHgwMDEwOGFjNSwgMHgwMDEwOGFjNSwKKwkweDAwMTA4YWM1LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDVjMDNlMDAwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDY5ODIsIDB4MDQwMWY2ZTgsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwKIAkweDU5MzAwNDAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDUyLCAweDAyMDAwODAwLAotCTB4MDAxMDEyMzEsIDB4MDQwMWZiMTYsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0YTAyNWEwNiwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwKLQkweDAyMDFmODAwLCAweDAwMTA0YzE5LCAweDAyMDFmODAwLCAweDAwMTA3OTExLAorCTB4MDAxMDEyODEsIDB4MDQwMWZiMWYsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwKKwkweDAyMDFmODAwLCAweDAwMTA0YTgzLCAweDAyMDFmODAwLCAweDAwMTA3Njk4LAogCTB4NWMwMjU4MDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCiAJMHg1OThjMDAwZCwgMHg4MTMwMDU4MCwgMHgwNDAyMDAxYSwgMHg1OTMwMDAwNCwKIAkweDhjMDAwNTIwLCAweDA0MDAwMDA0LCAweDg0MDAwNTIwLCAweDQ4MDI2MDA0LAotCTB4MDQwMWYwMWEsIDB4NDIwMDEwMDAsIDB4MDAxMGI3ZjYsIDB4NTAwODEwMDAsCisJMHgwNDAxZjAxYSwgMHg0MjAwMTAwMCwgMHgwMDEwYjVmNCwgMHg1MDA4MTAwMCwKIAkweDU4MDgwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMTAwLCAweDA0MDAwMDBhLAotCTB4NTgwODAwMGMsIDB4ODEzMDA1ODAsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjhkMywgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKLQkweDA0MDFmN2NmLCAweDAyMDFmODAwLCAweDAwMTA2ZThlLCAweDA0MDIwMDBjLAorCTB4NTgwODAwMGMsIDB4ODEzMDA1ODAsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjYxOSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwKKwkweDA0MDFmN2NmLCAweDAyMDFmODAwLCAweDAwMTA2YmUyLCAweDA0MDIwMDBjLAogCTB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMDQsIDB4ODQwMDA1MjAsCi0JMHg0ODAyNjAwNCwgMHgwNDAxZjdjNiwgMHgwMjAxZjgwMCwgMHgwMDEwNjhkMywKLQkweDA0MDAwN2MzLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDU5MzAwMjAzLAotCTB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsCisJMHg0ODAyNjAwNCwgMHgwNDAxZjdjNiwgMHgwMjAxZjgwMCwgMHgwMDEwNjYxOSwKKwkweDA0MDAwN2MzLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDU5MzAwMjAzLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCiAJMHgwYzAxZjdhNywgMHg1OTMwMDQwNiwgMHg0OTMzYzg1NywgMHg0ODAzYzg1NywKLQkweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4MGMwMWYwMDEsIDB4MDAxMDhkN2MsIDB4MDAxMDhlNDEsIDB4MDAxMDhmNzksCi0JMHgwMDEwOGQ4OCwgMHgwMDEwNzkxMSwgMHgwMDEwOGQ3YywgMHgwMDEwYTFjMCwKLQkweDAwMDIwNzdkLCAweDAwMTA4ZTQxLCAweDAwMTA2NWNlLCAweDAwMTA4ZmRhLAotCTB4MDAxMDhkNzcsIDB4MDAxMDhkNzcsIDB4MDAxMDhkNzcsIDB4MDAxMDhkNzcsCi0JMHgwMDEwOGQ3NywgMHgwMDEwOTZlYiwgMHgwMDEwOTZlYiwgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDA0MDFmYmQ1LCAweDAyMDAwMDAwLCAweDAwMTA4MDFjLAotCTB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmJiZiwgMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzdkLCAweDRhMDI2MjA2LCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4NzIsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHg0ZDJjMDAwMCwgMHg0ZDQwMDAwMCwgMHg0MTdhNTgwMCwgMHgwNDAxZmFhOCwKKwkweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDAyMDIxODAwLCAweDAwMTAwNjE1LAorCTB4MGMwMWYwMDEsIDB4MDAxMDhiMzAsIDB4MDAxMDhiZmUsIDB4MDAxMDhkMzYsCisJMHgwMDEwOGIzYywgMHgwMDEwNzY5OCwgMHgwMDEwOGIzMCwgMHgwMDEwOWZhZiwKKwkweDAwMDIwOGI0LCAweDAwMTA4YmZlLCAweDAwMTA2MzA2LCAweDAwMTA4ZDk3LAorCTB4MDAxMDhiMmIsIDB4MDAxMDhiMmIsIDB4MDAxMDhiMmIsIDB4MDAxMDhiMmIsCisJMHgwMDEwOGIyYiwgMHgwMDEwOTRiNywgMHgwMDEwOTRiNywgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDA0MDFmYmQ4LCAweDAyMDAwMDAwLCAweDAwMTA3ZGE2LAorCTB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDY5OGMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjhmNiwgMHgwMjAxZjgwMCwgMHgwMDEwNjk4MiwgMHgwMjAxZjAwMCwKKwkweDAwMDIwOGI0LCAweDRhMDI2MjA2LCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2NzEsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg0ZDJjMDAwMCwgMHg0ZDQwMDAwMCwgMHg0MTdhNTgwMCwgMHgwNDAxZmFiMSwKIAkweDA0MDAwMDA3LCAweDU5MzI1ODA4LCAweDU5MmMwMjA4LCAweDg0MDAwNTRjLAogCTB4NDgwMjVhMDgsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmM1NSwgMHgwNDAxZmY0YywgMHg0ODAzYzg1NywgMHg4MjAwMGM4MCwKLQkweDAwMDAwMDBlLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmODA2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDZjNGIsIDB4NWMwMjgwMDAsIDB4NWMwMjU4MDAsCi0JMHgxYzAxZjAwMCwgMHgwMDEwOGU0MCwgMHgwMDEwOGRiNSwgMHgwMDEwOGRjMywKLQkweDAwMTA4ZGU1LCAweDAwMTA4ZTExLCAweDAwMTA4ZGIzLCAweDAwMTA4ZDdjLAotCTB4MDAxMDhkN2MsIDB4MDAxMDhkN2MsIDB4MDAxMDhkYjMsIDB4MDAxMDhkYjMsCi0JMHgwMDEwOGRiMywgMHgwMDEwOGRiMywgMHgwMDEwOGRjMywgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLCAweDA0MDIwMDA0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDZlOGUsIDB4MDQwMjAwMzgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjhkMywgMHgwNDAwMDAzYiwgMHgwMjAxZjgwMCwgMHgwMDEwNmI2YywKLQkweDA0MDAwMDMyLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDQ5N2E2MjFkLAotCTB4ODEyZTU5YzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkyYzAyMDQsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwKLQkweDA0MDAwMDAzLCAweDRhMDI2MjFkLCAweDAwMDAwMDAzLCAweDU5MmMwYTA4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDRlNzAsIDB4MDIwMWY4MDAsIDB4MDAxMDk1OWMsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHg0OTdhNjAwOCwgMHg0YTAyNjQwMywKLQkweDAwMDAwMDg1LCAweDRhMDI2MjAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDA2LAotCTB4MDAwMDAwMDIsIDB4NGEwMjYwMDQsIDB4ODAwMDQwNGIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmM0YiwgMHg0MjAwMDgwMCwgMHg4MDAwNDA0YiwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzIxLCAweDA0MDFmZWYxLCAweDA0MDIwMDA0LCAweDAyMDFmODAwLAotCTB4MDAxMDZlNjIsIDB4MDQwMjAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDY3YWUsCi0JMHgwNDAyMDdkMiwgMHg1OTMwMGMwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDA0MCwKLQkweDA0MDAwMDA4LCAweDA0MDFmN2QyLCAweDU5MzAwMjAzLCAweDgyMDAwYzgwLAotCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWY3YWUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwgMHg4MTJlNTljMCwgMHgwNDAwMDAxMywKLQkweDU5MmMwYTA4LCAweDAyMDFmODAwLCAweDAwMTA0ZTcwLCAweDAyMDFmODAwLAotCTB4MDAxMDk1OWMsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NTkzMDAyMDMsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAwZCwgMHgwNDAwMDAwOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2YzRiLCAweDRkMzQwMDAwLCAweDU5MzI2ODA5LCAweDAyMDFmODAwLAotCTB4MDAxMDQ5YjIsIDB4NWMwMjY4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsCi0JMHgwNDAxZjAzMCwgMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKLQkweDAyMDFmODAwLCAweDAwMTA5NDBhLCAweDA0MDIwMDA0LCAweDAyMDFmODAwLAotCTB4MDAxMDBlOTksIDB4MDQwMWY3YWEsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNGIsCi0JMHg1OTJjMDIwOCwgMHg4NDAwMDUwYywgMHg0ODAyNWEwOCwgMHg1OTJjMDQwNiwKLQkweDgwMDAwMGMyLCAweDgwMDAwOGM0LCAweDgwMDQwYzAwLCAweDQ4MDY2MjA2LAotCTB4NDIwMDAwMDAsIDB4MTAwMDAwMDAsIDB4NDEzMDA4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMGI5NCwgMHgwNDAwMDAwZCwgMHg1OTJjMDIwOCwgMHg4YzAwMDUxYywKLQkweDA0MDIwMDA2LCAweDg0MDAwNTVjLCAweDQ4MDI1YTA4LCAweDRhMDI2MjA2LAotCTB4MDAwMDAwMDIsIDB4MDQwMWYwMGYsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMTJlNSwgMHg1YzAyNjAwMCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDA0LCAweDA0MDIwMDA3LCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLAotCTB4MDAwMDAwNDgsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsCi0JMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2ZSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDU5MzAwMjAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDBlLAotCTB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwM2M4NTcsIDB4MGMwMWYwMDEsCi0JMHgwMDEwOGU1YSwgMHgwMDEwOGQ4NSwgMHgwMDEwOGU1YywgMHgwMDEwOGU1YSwKLQkweDAwMTA4ZTVjLCAweDAwMTA4ZTVjLCAweDAwMTA4ZDdkLCAweDAwMTA4ZTVhLAotCTB4MDAxMDhkNzksIDB4MDAxMDhlNWEsIDB4MDAxMDhlNWEsIDB4MDAxMDhlNWEsCi0JMHgwMDEwOGU1YSwgMHgwMDEwOGU1YSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKLQkweDRkMzQwMDAwLCAweDRkMmMwMDAwLCAweDU5MzI2ODA5LCAweDU5MzQwNDAwLAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGMsCi0JMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg1OTMwMzQwMywgMHg4MjE4MGQ4MCwKLQkweDAwMDAwMDA0LCAweDA0MDIwMDA0LCAweDQyMDAwMDAwLCAweDAwMDAwMDAxLAotCTB4MDQwMWYwMDYsIDB4ODIxODBkODAsIDB4MDAwMDAwMDAsIDB4MDQwMjAwMDMsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHg0ODAzYzg1NywgMHgwYzAxZjgwNCwKLQkweDVjMDI1ODAwLCAweDVjMDI2ODAwLCAweDFjMDFmMDAwLCAweDAwMTA4ZTgzLAotCTB4MDAxMDhmMjIsIDB4MDAxMDhlODUsIDB4MDAxMDhlYmEsIDB4MDAxMDhlODUsCi0JMHgwMDEwOGYzZiwgMHgwMDEwOGU4NSwgMHgwMDEwOGU4ZiwgMHgwMDEwOGU4MywKLQkweDAwMTA4ZjNmLCAweDAwMTA4ZTgzLCAweDAwMTA4ZTllLCAweDAyMDFmODAwLAotCTB4MDAxMDA1ZDgsIDB4NTkzMDA0MDMsIDB4ODIwMDBkODAsIDB4MDAwMDAwMTYsCi0JMHgwNDAwMDAyZSwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwNCwgMHgwNDAwMDAyYiwKLQkweDgyMDAwZDgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDI4LCAweDA0MDFmYWJmLAotCTB4MDQwMDAwNzksIDB4NTkzMDA0MDMsIDB4ODIwMDBkODAsIDB4MDAwMDAwMjIsCi0JMHgwNDAwMDBhZSwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAzOSwgMHgwNDAwMDBiMywKLQkweDgyMDAwZDgwLCAweDAwMDAwMDM1LCAweDA0MDAwMGIwLCAweDgyMDAwZDgwLAotCTB4MDAwMDAwMWUsIDB4MDQwMDAwMWIsIDB4MDQwMWY5OTksIDB4MDQwMDAwMDcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0YTE0LCAweDA0MDFmMDExLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLAotCTB4MDAwMDAwMDEsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZTcsCi0JMHgwNDAwMDAwYSwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAyMDNjLCAweDVjMDI3ODAwLCAweDQyMDAwMDAwLCAweDAwMTBiODY0LAotCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4MDIwMWY4MDAsIDB4MDAxMDgwMWMsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHgwNDAxZjk3ZCwgMHgwNDAwMDAwNCwKLQkweDAyMDFmODAwLCAweDAwMTA5NTk3LCAweDA0MDAwMGE5LCAweDU5MzAwYzAzLAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMTYsIDB4MDQwMDAwNTYsIDB4ODIwNDA1ODAsCi0JMHgwMDAwMDAwMiwgMHgwNDAyMDAzNCwgMHg1OWE4MDAyNiwgMHg4YzAwMDUwMiwKLQkweDA0MDIwMDEzLCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDIwMDEwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUxNTEsIDB4MDQwMjAwMDYsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNTExMywgMHgwNDAxZjA5NCwKLQkweDRhMDM1MDMzLCAweDAwMDAwMDAxLCAweDQyMDJkODAwLCAweDAwMDAwMDAxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDUwYTIsIDB4MDQwMWYwOGQsIDB4NTkzNDA0MDMsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDdmYywgMHgwNDAwMDAwOCwgMHg1OWE4MDAyNiwKLQkweDhjMDAwNTBhLCAweDA0MDIwMDg0LCAweDU5MzQwMjEyLCAweDgyMDAwNTAwLAotCTB4MDAwMGZmMDAsIDB4MDQwMDAwODIsIDB4NTkzNDA0MTIsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDBmZiwgMHgwNDAwMDAxMCwgMHg4MDAwMDA0MCwgMHg0ODAyNmMxMiwKLQkweDQ5N2E2MDA4LCAweDRhMDI2NDA2LCAweDAwMDAwMDA3LCAweDRhMDI2MjA2LAotCTB4MDAwMDAzOTgsIDB4NDk3YTYyMDUsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCi0JMHgwNDAwMDAwNSwgMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwKLQkweDA0MDFmMDIwLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDAyLAotCTB4MDQwMjAwMGQsIDB4NTkzNDA0MDMsIDB4ODIwMDA1ODAsIDB4MDAwMDA3ZmUsCi0JMHgwNDAyMDAwOSwgMHg1OWE4MDAyNiwgMHg4NDAwMDU0MCwgMHg0ODAzNTAyNiwKLQkweDAyMDFmODAwLCAweDAwMTA0MjM3LCAweDAyMDFmODAwLCAweDAwMTA4MDFjLAotCTB4MDQwMWYwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDgwMWMsIDB4NGQzYzAwMDAsCi0JMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwKLQkweDQyMDAwMDAwLCAweDAwMTBiODY0LCAweDAyMDFmODAwLCAweDAwMTBhYTQ3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsIDB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwKLQkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDAyLAotCTB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4MDQwMWY5MTUsIDB4MDQwMjA3OTMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMjA3NCwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKLQkweDAyMDFmODAwLCAweDAwMTAyMDNjLCAweDVjMDI3ODAwLCAweDQyMDAwMDAwLAotCTB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDIwMDMwMDAsCi0JMHgwMDAwMDAxOCwgMHg0MTc4MjgwMCwgMHg0MjAwMjAwMCwgMHgwMDAwMDAwMCwKLQkweDRkNDAwMDAwLCAweDRkNDQwMDAwLCAweDU5MzY4YzAzLCAweDQyMDI4MDAwLAotCTB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDk4NWUsIDB4NWMwMjg4MDAsCi0JMHg1YzAyODAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHgwMjAxZjgwMCwKLQkweDAwMTA0YTE0LCAweDA0MDFmN2M4LCAweDQyMDAwMDAwLCAweDAwMTBiODZkLAotCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4MDIwMWY4MDAsIDB4MDAxMDdiNzYsCi0JMHgwNDAyMDdjMSwgMHgxYzAxZjAwMCwgMHg0ZDM4MDAwMCwgMHg1OTMyNzQwMywKLQkweDAyMDFmODAwLCAweDAwMTA5M2JhLCAweDVjMDI3MDAwLCAweDAyMDIwMDAwLAotCTB4MDAwMjA3N2QsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDAwMDQsCi0JMHg0YTAyNjIwNiwgMHgwMDAwMDAwMiwgMHgxYzAxZjAwMCwgMHg1OTMwMDQwMywKLQkweDQ4MDI2NDE2LCAweDRhMDI2MjFkLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLAotCTB4MDAwMDAwODUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0YiwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzIxLCAweDAyMDFmODAwLCAweDAwMTAyMDc0LCAweDAyMDFmODAwLAotCTB4MDAxMDgwMWMsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQ5N2E2MDA4LCAweDRhMDI2NDA2LAotCTB4MDAwMDAwMDcsIDB4NGEwMjYyMDYsIDB4MDAwMDAzOTgsIDB4NDk3YTYyMDUsCi0JMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg3MCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDRkMzQwMDAwLCAweDU5MzI2ODA5LCAweDU5MzAwMjAzLAotCTB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0ODAzYzg1NywgMHgwYzAxZjgwMywgMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwKLQkweDAwMTA4Zjk2LCAweDAwMTA4ZDg1LCAweDAwMTA4Zjk2LCAweDAwMTA4Zjk2LAotCTB4MDAxMDhmOTYsIDB4MDAxMDhmOTYsIDB4MDAxMDhmOTYsIDB4MDAxMDhmOTYsCi0JMHgwMDEwOGY5NiwgMHgwMDEwOGQ4NSwgMHgwMDEwOGY5OCwgMHgwMDEwOGQ4NSwKLQkweDAwMTA4ZmEwLCAweDAwMTA4Zjk2LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAotCTB4NGEwMjY0MDMsIDB4MDAwMDAwOGIsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMGIsCi0JMHg0MjAwMDgwMCwgMHg4MDAwNDA0YiwgMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwKLQkweDU5MzAwYTFkLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMTEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYTk0MiwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDQxMzA2ODAwLCAweDAyMDFmODAwLAotCTB4MDAwMjA3NWEsIDB4MDQwMDAwMDgsIDB4NDkzNjYwMDksIDB4NGQzMDAwMDAsCi0JMHg0MDM2NjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwgMHg1YzAyNjAwMCwKLQkweDA0MDFmMDAyLCAweDQwMzY2MDAwLCAweDQ5N2E2MDA4LCAweDRhMDI2NDA2LAotCTB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2IyNSwgMHgwNDAwMDAxMSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwNCwKLQkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDRhMDI2NDIwLCAweDAwMDAwMDAxLAotCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDQsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsCi0JMHgwMDAwMDAyOSwgMHg0MTc4MjgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTQzZSwKLQkweDVjMDI4MDAwLCAweDFjMDFmMDAwLCAweDQyMDAwODAwLCAweDAwMDAwMDBiLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg0MjAwMDAwMCwgMHgwMDEwYjg3NiwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5MzAwMjAzLCAweDgyMDAwYzgwLAotCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4NDgwM2M4NTcsCi0JMHgwYzAxZjAwMSwgMHgwMDEwOTAwYiwgMHgwMDEwOGZmMywgMHgwMDEwOGZmNywKLQkweDAwMTA5MDBjLCAweDAwMTA4ZmY1LCAweDAwMTA4ZmYzLCAweDAwMTA4ZmYzLAotCTB4MDAxMDhmZjMsIDB4MDAxMDhmZjMsIDB4MDAxMDhmZjMsIDB4MDAxMDhmZjMsCi0JMHgwMDEwOGZmMywgMHgwMDEwOGZmMywgMHgwMDEwOGZmMywgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDAyMDFmODAwLCAweDAwMTAwZTk5LCAweDRkMmMwMDAwLAotCTB4NTkzMjU4MDgsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDJkYSwgMHg1YzAyNTgwMCwgMHg0OTdhNjAwOCwgMHg0YTAyNjIxZCwKLQkweDAwMDAwMDBhLCAweDRhMDI2NDAzLCAweDAwMDAwMDg1LCAweDRhMDI2MjAzLAotCTB4MDAwMDAwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsCi0JMHg4MDAwNDA0YiwgMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHgxYzAxZjAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDRkZjAwMDAwLCAweDA0MDFmY2M3LAotCTB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDZlNjIsIDB4MDQwMjAwMGMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjdhZSwgMHgwNDAyMDAwNSwgMHg1YzAzZTAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA2YzRiLCAweDA0MDFmN2RkLCAweDAyMDFmODAwLAotCTB4MDAxMDZiNmMsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NWMwM2UwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmM0YiwgMHg1OTMwMDIwMywgMHg4MjAwMGQ4MCwKLQkweDAwMDAwMDAzLCAweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDgyMDAwYzgwLAotCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWY3YmEsCi0JMHg0ODAzYzg1NiwgMHg1OWE4MDAwZSwgMHg1OWE4MDg2NywgMHg4MDA0MDQwMCwKLQkweDgwMDgwNDgwLCAweDA0MDIxMDA0LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCi0JMHg0YzA4MDAwMCwgMHg1OTMwMTAwOCwgMHg4MjA4MTUwMCwgMHhmZmYwMDAwMCwKLQkweDVjMDAxMDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsIDB4MDQwMDAwMGEsIDB4MDQwMWY4MmYsCi0JMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0YiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwN2ExLCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNzk0MiwgMHgwNDAwMDAxYiwgMHgwNDAxZjgxZiwKLQkweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2YzU1LCAweDRkM2MwMDAwLAotCTB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDZhYjQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjdmZCwgMHg1YzAyNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTJmZiwKLQkweDAyMDFmODAwLCAweDAwMTA2YzRiLCAweDVjMDI2MDAwLCAweDhkM2U3ZDNlLAotCTB4MDQwMjAwMGIsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNGMsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwKLQkweDAwMDAwMDAxLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAotCTB4MDAwMjA3N2QsIDB4MDQwMWY3ZmEsIDB4NTkyYzA0MDcsIDB4NDk0YTYwMTcsCi0JMHg0OTRlNjAxOCwgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwgMHg0YTAyNjQwNiwKLQkweDAwMDAwMDAzLCAweDgwMDAwMGMyLCAweDgwMDAwOGM0LCAweDgwMDQwNDAwLAotCTB4NDgwMjYyMDYsIDB4MWMwMWYwMDAsIDB4NDkzYmM4NTcsIDB4NGQzMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAwZCwgMHgwNDAxZmZlZiwKLQkweDRkNDAwMDAwLCAweDQyMDI4MDAwLCAweDAwMDAwMDA1LCAweDA0MDFmODBkLAotCTB4NWMwMjgwMDAsIDB4OGQzZTdkM2UsIDB4MDQwMjAwMDcsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDdhMSwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNjAwMCwKLQkweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzdkLCAweDA0MDFmN2ZhLAotCTB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4NGQzYzAwMDAsCi0JMHg0ZDQ0MDAwMCwgMHg1OTM2OGMwMywgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwKLQkweDAyMDFmODAwLCAweDAwMTA2OWI2LCAweDAyMDFmODAwLCAweDAwMTA2OTJlLAotCTB4MDIwMWY4MDAsIDB4MDAxMDY3ZmQsIDB4MDIwMWY4MDAsIDB4MDAxMGEyZmYsCi0JMHg1YzAyODgwMCwgMHg1YzAyNzgwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNmM0YiwKLQkweDQ4MDNjODU2LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzVhLAotCTB4MDQwMDAwMGYsIDB4NDgxYTYwMWMsIDB4NDhlZTYwMjEsIDB4NDkzNjYwMDksCi0JMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwgMHg0ZDM4MDAwMCwKLQkweDQyMDI3MDAwLCAweDAwMDAwMDFmLCAweDAyMDFmODAwLCAweDAwMDIwN2ExLAotCTB4NWMwMjcwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsCi0JMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzVhLCAweDA0MDAwMDBlLCAweDQ4ZWU2MDIxLCAweDQ5MzY2MDA5LAotCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NDkyZTYwMDgsIDB4NGQzODAwMDAsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDA1NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKLQkweDVjMDI3MDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLAotCTB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDc1YSwgMHgwNDAwMDAwZiwgMHg0ODFhNjAxYywgMHg0OGVlNjAyMSwKLQkweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LAotCTB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwM2QsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDc5NDIsIDB4MDQwMDAwMTQsIDB4NDkzNjYwMDksCi0JMHg0OTJmYzg1NywgMHg0OTMzYzg1NywgMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwKLQkweDA0MDAwMDAzLCAweDQ4ZWZjODU3LCAweDQ4ZWU2MDIxLCAweDRhMDI2NDA2LAotCTB4MDAwMDAwMDEsIDB4NDkyZTYwMDgsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLAotCTB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsCi0JMHgwNDAwMDAwZiwgMHg0OGVlNjAyMSwgMHg0ODFhNjAxYywgMHg0OTM2NjAwOSwKLQkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LCAweDRkMzgwMDAwLAotCTB4NDIwMjcwMDAsIDB4MDAwMDAwNDQsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsCi0JMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNjAwMCwKLQkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAwMjA3NWEsIDB4MDQwMDAwMGYsIDB4NDgxYTYwMWMsIDB4NDhlZTYwMjEsCi0JMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwKLQkweDRkMzgwMDAwLCAweDQyMDI3MDAwLCAweDAwMDAwMDQ5LCAweDAyMDFmODAwLAotCTB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCi0JMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg1OTMwMDAwOSwgMHg4MDAwMTU0MCwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU4MDgwNDBiLCAweDQ4MDNjODU2LAotCTB4ODAwMDAwNDAsIDB4MDQwMDEwMDIsIDB4NDgwMDE0MGIsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg1OTMwMDQwMywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwKLQkweDA0MDAwMDE1LCAweDgyMDAwZDgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDEyLAotCTB4ODIwMDBkODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMGYsIDB4ODIwMDBkODAsCi0JMHgwMDAwMDAwOCwgMHgwNDAwMDAwYywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwYSwKLQkweDA0MDAwMDA5LCAweDU5OWMwODE5LCAweDhjMDQwZDBlLCAweDA0MDAwMDA0LAotCTB4ODIwMDBkODAsIDB4MDAwMDAwMDAsIDB4MDQwMDAwMDMsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YzAwMDAwMCwKLQkweDRkMmMwMDAwLCAweDU5MzAwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LAotCTB4MDQwMDAwMWQsIDB4NTkzMDAwMDgsIDB4ODAwMjVkNDAsIDB4ODAwMDAxYzAsCi0JMHgwNDAwMDAxOSwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5NywgMHgwNDAwMDAxNCwKLQkweDU5MzAwNDA2LCAweDgyMDA0NTgwLCAweDAwMDAwMDEwLCAweDA0MDAwMDEwLAotCTB4ODIwMDQ1ODAsIDB4MDAwMDAwMTEsIDB4MDQwMDAwMGQsIDB4ODIwMDQ1ODAsCi0JMHgwMDAwMDAwMywgMHgwNDAwMDAwYywgMHg4MjAwNDU4MCwgMHgwMDAwMDAwMiwKLQkweDA0MDAwMDA5LCAweDgyMDA0NTgwLCAweDAwMDAwMDBhLCAweDA0MDAwMDA2LAotCTB4NTkyYzA0MDQsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsCi0JMHgwNDAxZjAwMywgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNTgwMCwKLQkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDc5NDIsIDB4MDQwMDAwMTMsIDB4NDkzNjYwMDksCi0JMHg0OGVlNjAyMSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwKLQkweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAyMDNjLAotCTB4NWMwMjc4MDAsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMjgsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMTA2OThjLCAweDA0MDFmZjRjLCAweDQ4MDNjODU3LCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWY4MDYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjk4MiwgMHg1YzAyODAwMCwgMHg1YzAyNTgwMCwKKwkweDFjMDFmMDAwLCAweDAwMTA4YmZkLCAweDAwMTA4YjY5LCAweDAwMTA4Yjc5LAorCTB4MDAxMDhiYTAsIDB4MDAxMDhiY2UsIDB4MDAxMDhiNjcsIDB4MDAxMDhiMzAsCisJMHgwMDEwOGIzMCwgMHgwMDEwOGIzMCwgMHgwMDEwOGI2NywgMHgwMDEwOGI2NywKKwkweDAwMTA4YjY3LCAweDAwMTA4YjY3LCAweDAwMTA4Yjc5LCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4NTk4YzAwMGQsIDB4NDgwM2M4NTcsIDB4ODEzMDA1ODAsCisJMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmJlMiwgMHgwNDAyMDAzZiwKKwkweDAyMDFmODAwLCAweDAwMTA2NjE5LCAweDA0MDAwMDQzLCAweDQ4MDNjODU2LAorCTB4MDIwMWY4MDAsIDB4MDAxMDY4YTMsIDB4MDQwMDAwMzgsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDYxNSwgMHg0OTdhNjIxZCwgMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDU5MmMwMjA0LCAweDQ4MDNjODU3LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMDAwMDMsCisJMHg0YTAyNjIxZCwgMHgwMDAwMDAwMywgMHg1OTJjMGEwOCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0YmVlLCAweDAyMDFmODAwLCAweDAwMTA5MzY1LCAweDAyMDFmODAwLAorCTB4MDAwMjAzODEsIDB4NDk3YTYwMDgsIDB4NGEwMjY0MDMsIDB4MDAwMDAwODUsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMiwKKwkweDU5MzAwODA0LCAweDgyMDQwZDAwLCAweDAwMDAwMTAwLCAweDgyMDQwZDQwLAorCTB4ODAwMDQwNGIsIDB4NDgwNjYwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDY5ODIsCisJMHg0MjAwMDgwMCwgMHg4MDAwNDA0YiwgMHgwMjAxZjAwMCwgMHgwMDAyMDg1NSwKKwkweDA0MDFmZWVhLCAweDA0MDIwMDA0LCAweDAyMDFmODAwLCAweDAwMTA2YmIyLAorCTB4MDQwMjAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDY0ZjYsIDB4MDQwMjA3Y2MsCisJMHg1OTMwMGMwMywgMHg0ODA3Yzg1NywgMHg4MjA0MDU4MCwgMHgwMDAwMDA0MCwKKwkweDA0MDAwMDA5LCAweDA0MDFmN2NjLCAweDU5MzAwMjAzLCAweDQ4MDNjODU3LAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHgwYzAxZjdhNSwgMHgwMjAxZjgwMCwgMHgwMDEwNjk4MiwgMHg4MTJlNTljMCwKKwkweDA0MDAwMDEzLCAweDU5MmMwYTA4LCAweDAyMDFmODAwLCAweDAwMTA0YmVlLAorCTB4MDIwMWY4MDAsIDB4MDAxMDkzNjUsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsCisJMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwZCwgMHgwNDAwMDAwOCwKKwkweDAyMDFmODAwLCAweDAwMTA2OTgyLCAweDRkMzQwMDAwLCAweDU5MzI2ODA5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4MDEsIDB4NWMwMjY4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzY5OCwgMHgwNDAxZjAzMCwgMHg4MTJlNTljMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDAyMDFmODAwLCAweDAwMTA5MWQzLCAweDA0MDIwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDBlZTQsIDB4MDQwMWY3YTMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjk4MiwgMHg1OTJjMDIwOCwgMHg4NDAwMDUwYywgMHg0ODAyNWEwOCwKKwkweDU5MmMwNDA2LCAweDgwMDAwMGMyLCAweDgwMDAwOGM0LCAweDgwMDQwYzAwLAorCTB4NDgwNjYyMDYsIDB4NDIwMDAwMDAsIDB4MTAwMDAwMDAsIDB4NDEzMDA4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGJkZSwgMHgwNDAwMDAwZCwgMHg1OTJjMDIwOCwKKwkweDhjMDAwNTFjLCAweDA0MDIwMDA2LCAweDg0MDAwNTVjLCAweDQ4MDI1YTA4LAorCTB4NGEwMjYyMDYsIDB4MDAwMDAwMDIsIDB4MDQwMWYwMGYsIDB4NGQzMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMTMzNSwgMHg1YzAyNjAwMCwgMHg1OTMwMDIwMywKKwkweDgyMDAwNTgwLCAweDAwMDAwMDA0LCAweDA0MDIwMDA3LCAweDRkMzgwMDAwLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNDgsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsCisJMHg1YzAyNzAwMCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjY2ZCwKKwkweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDU5MzAwMjAzLCAweDgyMDAwYzgwLAorCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4NDgwM2M4NTcsCisJMHgwYzAxZjAwMSwgMHgwMDEwOGMxNywgMHgwMDEwOGIzOSwgMHgwMDEwOGMxOSwKKwkweDAwMTA4YzE3LCAweDAwMTA4YzE5LCAweDAwMTA4YzE5LCAweDAwMTA4YjMxLAorCTB4MDAxMDhjMTcsIDB4MDAxMDhiMmQsIDB4MDAxMDhjMTcsIDB4MDAxMDhjMTcsCisJMHgwMDEwOGMxNywgMHgwMDEwOGMxNywgMHgwMDEwOGMxNywgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDRkMzQwMDAwLCAweDRkMmMwMDAwLCAweDU5MzI2ODA5LAorCTB4NTkzNDA0MDAsIDB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDBjODAsCisJMHgwMDAwMDAwYywgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHg1OTMwMzQwMywKKwkweDgyMTgwZDgwLCAweDAwMDAwMDA0LCAweDA0MDIwMDA0LCAweDQyMDAwMDAwLAorCTB4MDAwMDAwMDEsIDB4MDQwMWYwMDYsIDB4ODIxODBkODAsIDB4MDAwMDAwMDAsCisJMHgwNDAyMDAwMywgMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHg0ODAzYzg1NywKKwkweDBjMDFmODA0LCAweDVjMDI1ODAwLCAweDVjMDI2ODAwLCAweDFjMDFmMDAwLAorCTB4MDAxMDhjNDAsIDB4MDAxMDhjZGYsIDB4MDAxMDhjNDIsIDB4MDAxMDhjNzcsCisJMHgwMDEwOGM0MiwgMHgwMDEwOGNmYywgMHgwMDEwOGM0MiwgMHgwMDEwOGM0YywKKwkweDAwMTA4YzQwLCAweDAwMTA4Y2ZjLCAweDAwMTA4YzQwLCAweDAwMTA4YzViLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMDA0MDMsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAxNiwgMHgwNDAwMDAyZSwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwNCwKKwkweDA0MDAwMDJiLCAweDgyMDAwZDgwLCAweDAwMDAwMDAyLCAweDA0MDAwMDI4LAorCTB4MDQwMWZhYjksIDB4MDQwMDAwNzksIDB4NTkzMDA0MDMsIDB4ODIwMDBkODAsCisJMHgwMDAwMDAyMiwgMHgwNDAwMDBhZSwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAzOSwKKwkweDA0MDAwMGIzLCAweDgyMDAwZDgwLCAweDAwMDAwMDM1LCAweDA0MDAwMGIwLAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMWUsIDB4MDQwMDAwMWIsIDB4MDQwMWY5OTksCisJMHgwNDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwOTM2MCwgMHgwNDAyMDAwNCwKKwkweDAyMDFmODAwLCAweDAwMTA0ODYzLCAweDA0MDFmMDExLCAweDU5MzAwNDAzLAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDgzNiwgMHgwNDAwMDAwYSwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDVjMDI3ODAwLCAweDQyMDAwMDAwLAorCTB4MDAxMGI2NjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsCisJMHgwMDEwN2RhNiwgMHgwMjAxZjAwMCwgMHgwMDEwNzY5OCwgMHgwNDAxZjk3ZCwKKwkweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA5MzYwLCAweDA0MDAwMGE5LAorCTB4NTkzMDBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMTYsIDB4MDQwMDAwNTYsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAzNCwgMHg1OWE4MDAyNiwKKwkweDhjMDAwNTAyLCAweDA0MDIwMDEzLCAweDAyMDFmODAwLCAweDAwMTA0ZTBkLAorCTB4MDQwMjAwMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDRlMjMsIDB4MDQwMjAwMDYsCisJMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNGRlNSwKKwkweDA0MDFmMDk0LCAweDRhMDM1MDMzLCAweDAwMDAwMDAxLCAweDQyMDJkODAwLAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDRkNzYsIDB4MDQwMWYwOGQsCisJMHg1OTM0MDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDdmYywgMHgwNDAwMDAwOCwKKwkweDU5YTgwMDI2LCAweDhjMDAwNTBhLCAweDA0MDIwMDg0LCAweDU5MzQwMjEyLAorCTB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsIDB4MDQwMDAwODIsIDB4NTkzNDA0MTIsCisJMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHgwNDAwMDAxMCwgMHg4MDAwMDA0MCwKKwkweDQ4MDI2YzEyLCAweDQ5N2E2MDA4LCAweDRhMDI2NDA2LCAweDAwMDAwMDA3LAorCTB4NGEwMjYyMDYsIDB4MDAwMDAzOTgsIDB4NDk3YTYyMDUsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDg5MiwgMHgwNDAwMDAwNSwgMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAxLCAweDA0MDFmMDIwLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDIsIDB4MDQwMjAwMGQsIDB4NTkzNDA0MDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDdmZSwgMHgwNDAyMDAwOSwgMHg1OWE4MDAyNiwgMHg4NDAwMDU0MCwKKwkweDQ4MDM1MDI2LCAweDAyMDFmODAwLCAweDAwMTA0MDY3LCAweDAyMDFmODAwLAorCTB4MDAxMDdkYTYsIDB4MDQwMWYwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDdkYTYsCisJMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwKKwkweDVjMDI3ODAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjYzLCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsIDB4MDAxMDFlMWIsIDB4MDIwMWYwMDAsCisJMHgwMDEwNzY5OCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2M3LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLAorCTB4MDAwMDAwMDIsIDB4MDIwMWYwMDAsIDB4MDAxMDY0NzAsIDB4MDQwMWY5MTUsCisJMHgwNDAyMDc5MywgMHgwMjAxZjgwMCwgMHgwMDEwMWUxYiwgMHg0ZDNjMDAwMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDVjMDI3ODAwLAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2NjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAxOCwgMHg0MTc4MjgwMCwgMHg0MjAwMjAwMCwKKwkweDAwMDAwMDAwLCAweDRkNDAwMDAwLCAweDRkNDQwMDAwLCAweDU5MzY4YzAzLAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4MDIwMWY4MDAsIDB4MDAxMDk2MmEsCisJMHg1YzAyODgwMCwgMHg1YzAyODAwMCwgMHgwMjAxZjAwMCwgMHgwMDEwNzY5OCwKKwkweDAyMDFmODAwLCAweDAwMTA0ODYzLCAweDA0MDFmN2M4LCAweDQyMDAwMDAwLAorCTB4MDAxMGI2NmMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzhmZCwgMHgwNDAyMDdjMSwgMHgxYzAxZjAwMCwgMHg0ZDM4MDAwMCwKKwkweDU5MzI3NDAzLCAweDAyMDFmODAwLCAweDAwMTA5MTgzLCAweDVjMDI3MDAwLAorCTB4MDIwMjAwMDAsIDB4MDAwMjA4YjQsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAwNCwgMHg0YTAyNjIwNiwgMHgwMDAwMDAwMiwgMHgxYzAxZjAwMCwKKwkweDU5MzAwNDAzLCAweDQ4MDI2NDE2LCAweDRhMDI2MjFkLCAweDAwMDAwMDAxLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwODUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDksCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwMiwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0YiwKKwkweDAyMDFmMDAwLCAweDAwMDIwODU1LCAweDAyMDFmODAwLCAweDAwMTAxZTFiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDdkYTYsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwgMHg1YzAyNzgwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjYzLCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDQ5N2E2MDA4LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDcsIDB4NGEwMjYyMDYsIDB4MDAwMDAzOTgsCisJMHg0OTdhNjIwNSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjY2ZiwKKwkweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDRkMzQwMDAwLCAweDU5MzI2ODA5LAorCTB4NTkzMDAyMDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDYxNSwgMHg0ODAzYzg1NywgMHgwYzAxZjgwMywgMHg1YzAyNjgwMCwKKwkweDFjMDFmMDAwLCAweDAwMTA4ZDUzLCAweDAwMTA4YjM5LCAweDAwMTA4ZDUzLAorCTB4MDAxMDhkNTMsIDB4MDAxMDhkNTMsIDB4MDAxMDhkNTMsIDB4MDAxMDhkNTMsCisJMHgwMDEwOGQ1MywgMHgwMDEwOGQ1MywgMHgwMDEwOGIzOSwgMHgwMDEwOGQ1NSwKKwkweDAwMTA4YjM5LCAweDAwMTA4ZDVkLCAweDAwMTA4ZDUzLCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4NGEwMjY0MDMsIDB4MDAwMDAwOGIsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwYiwgMHg0MjAwMDgwMCwgMHg4MDAwNDA0YiwgMHgwMjAxZjAwMCwKKwkweDAwMDIwODU1LCAweDU5MzAwYTFkLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDFkZTIsIDB4NWMwMjc4MDAsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAxMSwgMHgwMjAxZjgwMCwgMHgwMDEwYTc2NiwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjYzLCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDQxMzA2ODAwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsIDB4MDQwMDAwMDgsIDB4NDkzNjYwMDksCisJMHg0ZDMwMDAwMCwgMHg0MDM2NjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNzY5OCwKKwkweDVjMDI2MDAwLCAweDA0MDFmMDAyLCAweDQwMzY2MDAwLCAweDQ5N2E2MDA4LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMzkzZSwgMHgwNDAwMDAxMSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDA0LCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDRhMDI2NDIwLAorCTB4MDAwMDAwMDEsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDQsIDB4NGQ0MDAwMDAsCisJMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHg0MTc4MjgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhMjUwLCAweDVjMDI4MDAwLCAweDFjMDFmMDAwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYzcsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwNjQ3MCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjc1LCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDU5MzAwMjAzLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHg0ODAzYzg1NywgMHgwYzAxZjAwMSwgMHgwMDEwOGRjOCwgMHgwMDEwOGRiMCwKKwkweDAwMTA4ZGI0LCAweDAwMTA4ZGM5LCAweDAwMTA4ZGIyLCAweDAwMTA4ZGIwLAorCTB4MDAxMDhkYjAsIDB4MDAxMDhkYjAsIDB4MDAxMDhkYjAsIDB4MDAxMDhkYjAsCisJMHgwMDEwOGRiMCwgMHgwMDEwOGRiMCwgMHgwMDEwOGRiMCwgMHgwMDEwOGRiMCwKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDAyMDFmODAwLCAweDAwMTAwZWU0LAorCTB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDYsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHg1YzAyNTgwMCwgMHg0OTdhNjAwOCwKKwkweDRhMDI2MjFkLCAweDAwMDAwMDBhLCAweDRhMDI2NDAzLCAweDAwMDAwMDg1LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDIsCisJMHg0MjAwMDgwMCwgMHg4MDAwNDA0YiwgMHgwMjAxZjAwMCwgMHgwMDAyMDg1NSwKKwkweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTA2OThjLCAweDRkZjAwMDAwLAorCTB4MDQwMWZjYmUsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDZiYjIsCisJMHgwNDAyMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwNjRmNiwgMHgwNDAyMDAwNSwKKwkweDVjMDNlMDAwLCAweDAyMDFmODAwLCAweDAwMTA2OTgyLCAweDA0MDFmN2RkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDY4YTMsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCisJMHg1YzAzZTAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjk4MiwgMHg1OTMwMDIwMywKKwkweDgyMDAwZDgwLCAweDAwMDAwMDAzLCAweDAyMDAwODAwLCAweDAwMTAwNjE1LAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHgwYzAxZjdiYSwgMHg0ODAzYzg1NiwgMHg1OWE4MDAwZSwgMHg1OWE4MDg2NywKKwkweDgwMDQwNDAwLCAweDgwMDgwNDgwLCAweDA0MDIxMDA0LCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsCisJMHg0ODAzYzg1NiwgMHg0YzA4MDAwMCwgMHg1OTMwMTAwOCwgMHg4MjA4MTUwMCwKKwkweGZmZjAwMDAwLCAweDVjMDAxMDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsIDB4MDQwMDAwMGEsCisJMHgwNDAxZjgyZiwgMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0YiwKKwkweDAyMDFmODAwLCAweDAwMDIwOGQ4LCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLAogCTB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCi0JMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwgMHgwNDAyMDAwZCwgMHg1OWE4MDAxNiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDc0LCAweDA0MDIwMDA5LCAweDAyMDFmODAwLAotCTB4MDAxMDQ2MmEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCi0JMHgwMDAwMDAyOSwgMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHgwMjAxZjgwMCwKLQkweDAwMTA4MDFjLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ4MDNjODU2LAotCTB4ODMzODA1ODAsIDB4MDAwMDAwMTYsIDB4MDQwMjAwMDcsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwMjAxZjAwMCwKLQkweDAwMTA3YjM4LCAweDgzMzgwNTgwLCAweDAwMDAwMDE1LCAweDA0MDIwMDEzLAotCTB4NTlhODAwMTYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMjAwMGYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDY4ZCwgMHgwMjAxZjgwMCwgMHgwMDEwODQ2ZiwKLQkweDA0MDIwMDBhLCAweDU5MzQwNDA0LCAweDgwMDAwNTQwLCAweDA0MDAwMDA3LAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCi0JMHgwMjAxZjAwMCwgMHgwMDEwN2IzOCwgMHgwMjAxZjgwMCwgMHgwMDEwODAxYywKLQkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ4MDNjODU2LCAweDU5MmMwMjA2LAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMDIsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg1OTJjMDIwOCwgMHg4NDAwMDU0YSwgMHg0ODAyNWEwOCwKLQkweDFjMDFmMDAwLCAweDQ5N2E2MjA1LCAweDQ5N2E2MDA4LCAweDRhMDI2MjAzLAotCTB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwNTAsIDB4NDIwMDA4MDAsCi0JMHg4MDAwMDA0MywgMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg0OTMzYzg1NywKLQkweDRkMzQwMDAwLCAweDU5MzI2ODA5LCAweDU5MzQwMjAwLCAweDhjMDAwNTBlLAotCTB4MDQwMDAwMDYsIDB4NTkzMDA0MDYsIDB4ODIwMDBjODAsIDB4MDAwMDAwMTIsCi0JMHgwNDAyMTAwNCwgMHgwYzAxZjgwNiwgMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA4ZDdjLCAweDA0MDFmN2ZjLCAweDAwMTA4ZDdjLAotCTB4MDAxMDkxZmQsIDB4MDAxMDkyMDEsIDB4MDAxMDkyMDQsIDB4MDAxMGE0OWIsCi0JMHgwMDEwYTRiOCwgMHgwMDEwYTRiYywgMHgwMDEwOGQ3YywgMHgwMDEwOGQ3YywKLQkweDAwMTA4ZDdjLCAweDAwMTA4ZDdjLCAweDAwMTA4ZDdjLCAweDAwMTA4ZDdjLAotCTB4MDAxMDhkN2MsIDB4MDAxMDhkN2MsIDB4MDAxMDhkN2MsIDB4MDAxMDhkN2MsCi0JMHgwMDEwOGQ3YywgMHg0ODAzYzg1NiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDFjMDFmMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDFjMDFmMDAwLAotCTB4NTkzMDAwMWMsIDB4NDgwM2M4NTcsIDB4NTkzMDA0MTQsIDB4NDkzM2M4NTcsCi0JMHg0ODAzYzg1NywgMHg4YzAwMDUwMiwgMHgwNDAwMDAwNSwgMHg4NDAwMDUwMiwKLQkweDg0MDAwNTQwLCAweDQ4MDI2NDE0LCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLAotCTB4ZDAwMDAwMDAsIDB4NDEzMDA4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDBiOTQsCi0JMHgwNDAxZjgwYSwgMHgwNDAyMDAwOCwgMHg1OWE4MDAzNywgMHg4MjAwMDQwMCwKLQkweDAwMDAwMDBhLCAweDQ4MDI2MjA1LCAweDU5MzAwNDE0LCAweDg0MDAwNTQyLAotCTB4NDgwMjY0MTQsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQzNDAwMDAsCi0JMHg1OTMyNjgwOSwgMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHgwMjAwMDgwMCwKLQkweDAwMTAwNWQ4LCAweDU5MzAwMDFjLCAweDgwMDAwNTQwLCAweDA0MDIwMDJmLAotCTB4NTlhODAwMjEsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMmEsIDB4NGQxYzAwMDAsCi0JMHg0MTMyMzgwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAyMywKLQkweDQ5MzIzODFjLCAweDU5MWMwNDE0LCAweDg0MDAwNTQyLCAweDQ4MDIzYzE0LAotCTB4NDkzNjYwMDksIDB4NTkxYzA0MDYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsCi0JMHgwNDAwMDAwNiwgMHg1OTFjMDIwMiwgMHg0ODAyNjQxOSwgMHg1OTFjMDQwMiwKLQkweDQ4MDI2MjE5LCAweDA0MDFmMDA1LCAweDU5MWMwMjAyLCAweDQ4MDI2MjE5LAotCTB4NTkxYzA0MDIsIDB4NDgwMjY0MTksIDB4NDkxZTYwMWUsIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAzNSwgMHg0YTAyNjIwMywKLQkweDAwMDAwMDAxLCAweDQyMDAwODAwLCAweDgwMDAwMDQwLCAweDAyMDFmODAwLAotCTB4MDAwMjA3MjEsIDB4NDExZTYwMDAsIDB4NWMwMjM4MDAsIDB4ODAwMDA1ODAsCi0JMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwgMHg0MTFlNjAwMCwgMHg1YzAyMzgwMCwKLQkweDU5YTgwMDM5LCAweDQ4MDI2MjA1LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAotCTB4MDQwMWY3ZjgsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NDkzMjM4MWMsCi0JMHg0YTAyNjIwMiwgMHgwMDAwZmZmZiwgMHg1OTFlNTgwOCwgMHg1OTFjMDAwNywKLQkweDhjMDAwNTFlLCAweDA0MDAwMDA1LCAweDg0MDAwNTFlLCAweDQ4MDIzODA3LAotCTB4NDk3YTVjMDksIDB4MDQwMWYwMTQsIDB4NTkyYzA0MDgsIDB4OGMwMDA1MTgsCi0JMHgwNDAwMDAxMSwgMHg4NDAwMDUxOCwgMHg0ODAyNWMwOCwgMHg0YTAyNWMwOSwKLQkweDAwMDAwMDAxLCAweDA0MDFmYjJmLCAweDQ5N2E1YzA5LCAweDU5MmMwNDA4LAotCTB4OGMwMDA1MTIsIDB4MDQwMDAwMDgsIDB4NGQyYzAwMDAsIDB4ODQwMDA1MTIsCi0JMHg0ODAyNWMwOCwgMHg1OTJlNTgwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwKLQkweDVjMDI1ODAwLCAweDU5YTgwMDM5LCAweDQ4MDI2MjA1LCAweDU5MWMwMjE0LAotCTB4NDgwMjYyMTYsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDgsCi0JMHg0YTAyM2EwMywgMHgwMDAwMDAwMiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNSwKLQkweDA0MDAwMDA4LCAweDQ5N2E2MDE1LCAweDA0MDFmMDFlLCAweDU5MWMwMDA3LAotCTB4ODQwMDA1NDAsIDB4NDgwMjM4MDcsIDB4NGEwMjNhMDMsIDB4MDAwMDAwMDQsCi0JMHg1OTFjMDQxNCwgMHg0ODAzYzg1NywgMHg4NDAwMDUxYywgMHg4NDAwMDU1NCwKLQkweDQ4MDIzYzE0LCAweDU5MmMwMDBmLCAweDQwMDAxMDAwLCAweDU5MWMwODE2LAotCTB4ODAwNDA0ODAsIDB4MDQwMjE3ZjAsIDB4NTkxYzAwMTYsIDB4ODIwMDA1MDAsCi0JMHhmZmZmZmZmYywgMHg0ODAyNjAxNSwgMHg0ODAyMzgxNiwgMHg1OTFjMGExNCwKLQkweDQ4MDdjODU3LCAweDgyMDQwZDgwLCAweDAwMDAwMDA1LCAweDA0MDIwMDA1LAotCTB4NDgwYmM4NTcsIDB4NDgwM2M4NTcsIDB4NGEwMjM4MTIsIDB4ZmZmZmZmZmYsCi0JMHg1OTFjMDQwMiwgMHg0ODAyNjQxOSwgMHg1OTFjMDIwMiwgMHg0ODAyNjIxOSwKLQkweDU5MWU2ODA5LCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAotCTB4NGEwMjY0MDMsIDB4MDAwMDAwMzksIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCi0JMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDAyMDcyMSwKLQkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDU5MzAwNDE0LAotCTB4OGMwMDA1MTQsIDB4MDQwMDAwMTUsIDB4OGMwMDA1MWMsIDB4MDQwMjAwMTIsCi0JMHg1OTMwMDAxNiwgMHg4MDEwMDQ4MCwgMHgwNDAwMTAwNiwgMHgwNDAwMDAwNSwKLQkweDU5MzAwNDE0LCAweDg0MDAwNTE0LCAweDg0MDAwNTVjLCAweDA0MDFmMDA5LAotCTB4NDgxMjYwMTYsIDB4NDgxMjYwMTIsIDB4NDAxMDAwMDAsIDB4NTkyYzE4MGYsCi0JMHg4MDBjMDQ4MCwgMHg0ODAyNjAxMSwgMHg1OTMwMDQxNCwgMHg4NDAwMDUxNCwKLQkweDQ4MDI2NDE0LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDhjMDAwNTFjLAotCTB4MDQwMjAwMDYsIDB4NTkzMDAwMTIsIDB4NDgwMjYwMTYsIDB4NTkzMDA0MTQsCi0JMHg4NDAwMDU1YywgMHg0ODAyNjQxNCwgMHgxYzAxZjAwMCwgMHg1OTMwMGMwMywKLQkweDQ5MzNjODU3LCAweDQ4MDdjODU3LCAweDgyMDQwNDgwLCAweDAwMDAwMDM0LAotCTB4MDQwMDEwMDYsIDB4ODIwNDA0ODAsIDB4MDAwMDAwM2MsIDB4MDQwMjEwMDMsCi0JMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDA0MDFmN2ZkLCAweDQxNzgwODAwLCAweDU5YTgxMDM1LCAweDQyMDAwMDAwLAotCTB4MDAwMDAwMzIsIDB4MDIwMWY4MDAsIDB4MDAxMDY2YTAsIDB4ODAwODExYzAsCi0JMHgwNDAyMDAwMywgMHg0MjAwMTAwMCwgMHgwMDAwMDAxNCwgMHg0ODBiNTAzNywKLQkweDU5YTgxMDM2LCAweDQ4MGI1MDJkLCAweDQxNzgwODAwLCAweDQyMDAwMDAwLAotCTB4MDAwMDAwNjQsIDB4MDIwMWY4MDAsIDB4MDAxMDY2YTAsIDB4ODAwODExYzAsCi0JMHgwNDAyMDAwMywgMHg0MjAwMTAwMCwgMHgwMDAwMDAxNCwgMHg0ODBiNTAzOCwKLQkweDgyMDgxNDAwLCAweDAwMDAwMDBhLCAweDQ4MGI1MDM5LCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNzgsIDB4NDIwMDAwMDAsCi0JMHgzMDAwMDAwMCwgMHg0MDA4MDgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMGI2OCwKLQkweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDU5YTgxMDEwLCAweDAyMDFmODAwLAotCTB4MDAxMDZjNzgsIDB4MDIwMWYwMDAsIDB4MDAxMDQ5MDYsIDB4NGEwMzUwMzcsCi0JMHgwMDAwMDAyOCwgMHg0YTAzNTAzOCwgMHgwMDAwMDAxNCwgMHg0YTAzNTAyZCwKLQkweDAwMDAwN2QwLCAweDQyMDAxMDAwLCAweDAwMDAwMDFlLCAweDQ4MGI1MDM5LAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDZjNzgsCi0JMHg0MjAwMDAwMCwgMHgzMDAwMDAwMCwgMHg0MDA4MDgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTAwYjY4LCAweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDU5YTgxMDEwLAotCTB4MDIwMWYwMDAsIDB4MDAxMDZjNzgsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsCi0JMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAzZSwgMHgwNDAyMDAwNSwKLQkweDU5MzI1ODE3LCAweDgxMmU1OWMwLCAweDAyMDIwODAwLCAweDAwMTAwN2Y0LAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NDkzN2M4NTcsIDB4NGQzMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDc1YSwgMHgwNDAwMDAxMSwgMHg0OTM2NjAwOSwKLQkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDksIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4NGQzODAwMDAsCi0JMHg0MjAyNzAwMCwgMHgwMDAwMDAzMywgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKLQkweDVjMDI3MDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLAotCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NGM1ODAwMDAsCi0JMHg0ZDNjMDAwMCwgMHg1OTMyNTgwOCwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwKLQkweDA0MDIwMDIyLCAweDU5YThiMDE2LCAweDgyNTgwYzgwLCAweDAwMDAwMDE5LAotCTB4MDQwMDEwMDMsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMTgsIDB4ODA1OGIxMDQsCi0JMHgwNDAxZmEwNywgMHg4MDAwMDU4MCwgMHgwNDAxZmExNywgMHg4MzJjYWMwMCwKLQkweDAwMDAwMDA5LCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLAotCTB4MDAxMGFiMTcsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4NTkyYzEwMGEsCi0JMHg4YzA4MTUxOCwgMHgwNDAyMDAwNiwgMHg1OWE4MDAxMCwgMHg1OTJjMTAwZCwKLQkweDgwMDgwNTgwLCAweDA0MDIwMDA2LCAweDQxN2E3ODAwLCAweDU5MzAxMDA5LAotCTB4NTgwODE0MDMsIDB4MDIwMWY4MDAsIDB4MDAxMDIwYTEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwN2IzOCwgMHgwNDAxZjAwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKLQkweDA0MDFmYTA5LCAweDAyMDFmODAwLCAweDAwMTA4MDFjLCAweDAyMDFmODAwLAotCTB4MDAwMjA3N2QsIDB4NWMwMjc4MDAsIDB4NWMwMGIwMDAsIDB4NWMwMjU4MDAsCi0JMHgxYzAxZjAwMCwgMHg0OTMzYzg1NiwgMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwKLQkweDAwMDAwMDAxLCAweDQ5MmU2MDA4LCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLAotCTB4MDAwMDAwNGQsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKLQkweDRkMmMwMDAwLCAweDgzMzgwNTgwLCAweDAwMDAwMDE1LCAweDA0MDIwMDI3LAotCTB4NTlhODA4MTYsIDB4NTkzMjU4MDgsIDB4NTkzMDA0MGIsIDB4ODAwMDAwYzQsCi0JMHg4MDA0MDU4MCwgMHgwNDAyMDAyMSwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwKLQkweDRjNTgwMDAwLCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDQwNTBhODAwLAotCTB4NTkzMGI0MGIsIDB4MDIwMWY4MDAsIDB4MDAxMGFiMjgsIDB4ODNjY2E0MDAsCi0JMHgwMDAwMDAwNiwgMHg1OTJjYjIwNSwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNiwKLQkweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDU5MmU1ODAxLCAweDgxMmU1OWMwLAotCTB4MDQwMjA3ZjksIDB4NTkzMWQ4MjEsIDB4NThlZjQwMGIsIDB4NThlZTU4MGQsCi0JMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OGVjMDAwOSwgMHgwODAxZjgwMCwKLQkweDU5MzAwNDAyLCAweDVjMDBiMDAwLCAweDVjMDBhODAwLCAweDVjMDBhMDAwLAotCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDgwMWMsCi0JMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg4MzM4MDU4MCwKLQkweDAwMDAwMDM1LCAweDA0MDAwMDA1LCAweDU5MzAxNDE5LCAweDA0MDFmODUxLAotCTB4MDQwMDAwMjcsIDB4MDQwMWYwMDYsIDB4NGQzMDAwMDAsIDB4NTkzMjYwMWUsCi0JMHgwNDAxZjg1NiwgMHg1YzAyNjAwMCwgMHgwNDAwMDAyMCwgMHg1OTFjMGMwNiwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMDYsIDB4MDQwMjAwMWMsIDB4NTkxYzBjMDIsIDB4NTkzMDA0MTksCi0JMHg4MDA0MDU4MCwgMHgwNDAwMDAwOSwgMHg1OTMwMDIxOSwgMHg4MDA0MDU4MCwKLQkweDA0MDIwMDE1LCAweDU5MWMwYTAyLCAweDU5MzAwNDE5LCAweDgwMDQwNTgwLAotCTB4MDQwMjAwMTEsIDB4MDQwMWYwMDksIDB4NTkzMDBhMTksIDB4ODIwNDA1ODAsCi0JMHgwMDAwZmZmZiwgMHgwNDAwMDAwNSwgMHg1OTFjMDIwMiwgMHg1OTMwMGExOSwKLQkweDgwMDQwNTgwLCAweDA0MDIwMDA4LCAweDU5MWMwMDA5LCAweDU5MzAwODA5LAotCTB4ODAwNDA1ODAsIDB4MWMwMWYwMDAsIDB4NDE3YTM4MDAsIDB4ODIwMDA1NDAsCi0JMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg1OWI4MDBlNCwKLQkweDhjMDAwNTM4LCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDQyMDAwODAwLAotCTB4MDAwMDAxMmMsIDB4NGEwMzcwZTQsIDB4MjAwMDAwMDAsIDB4NTliODAwZTQsCi0JMHg4MDA0MDg0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg4YzAwMDUzYywKLQkweDA0MDIwN2Y5LCAweDRhMDM3MGU0LCAweDMwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NTliODAwZTQsIDB4OGMwMDA1M2MsCi0JMHgwNDAyMDdmMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YTAzNzBlNCwKLQkweDIwMDAwMDAwLCAweDQwMDAwMDAwLCAweDU5YjgwMGU0LCAweDhjMDAwNTM4LAotCTB4MDQwMjA3ZmIsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDcsIDB4OGMwNDBkMWUsCi0JMHg1OTJjMGMwOCwgMHgwNDAyMDAwMiwgMHg4YzA0MGQxOCwgMHgxYzAxZjAwMCwKLQkweDA0MDFmYzFjLCAweDA0MDAwMDA4LCAweDQyMDAwODAwLCAweDAwMDAwMDI0LAotCTB4MDIwMWY4MDAsIDB4MDAxMDY2ODEsIDB4ODIwNjNjMDAsIDB4MDAxMGQxYzAsCi0JMHg0OTFmYzg1NywgMHgxYzAxZjAwMCwgMHg4MzMwMDQ4MCwgMHgwMDEwZDFjMCwKLQkweDA0MDAxMDBhLCAweDU5YTgwMDBiLCAweDgxMzAwNDgwLCAweDA0MDIxMDA3LAotCTB4NTkzMDE0MDIsIDB4MDQwMWZmZWYsIDB4MDQwMDAwMDcsIDB4NDExYzAwMDAsCi0JMHg4MTMwMDU4MCwgMHgwNDAwMDAwMywgMHg4MTc4MDUwMCwgMHgwNDAxZjAwMiwKLQkweDgxMzAwNTQwLCAweDFjMDFmMDAwLCAweDQ5NDdjODU3LCAweDRkMzAwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDQwMjAwMGEsIDB4NDIwMjYwMDAsCi0JMHgwMDEwYmRlOSwgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwgMHgwMjAxZjgwMCwKLQkweDAwMTAyMDNjLCAweDgwMDAwNTgwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZmMsIDB4NDkzM2M4NTcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKLQkweDRkMmMwMDAwLCAweDRkMzQwMDAwLCAweDRkNDQwMDAwLCAweDRjNTgwMDAwLAotCTB4NTkzMjU4MDgsIDB4NTkzMjY4MDksIDB4NDk0MjVhMDYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNTc1NSwgMHg1OTJlOGMwNiwgMHg1OTJjNDIwNywgMHg4MjIwMDUwMCwKLQkweDAwMDAwMDBmLCAweDBjMDFmODA2LCAweDVjMDBiMDAwLCAweDVjMDI4ODAwLAotCTB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDk0NjYsCi0JMHgwMDEwOTQ4OCwgMHgwMDEwOTQ4ZiwgMHgwMDEwOTQ5MywgMHgwMDEwOTQ5YywKLQkweDAwMTA5NDYzLCAweDAwMTA5NDYzLCAweDAwMTA5NDYzLCAweDAwMTA5NGEwLAotCTB4MDAxMDk0YWMsIDB4MDAxMDk0YWMsIDB4MDAxMDk0NjMsIDB4MDAxMDk0NjMsCi0JMHgwMDEwOTQ2MywgMHgwMDEwOTQ2MywgMHgwMDEwOTQ2MywgMHg0ODAzYzg1NywKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDgxNDI4MWMwLCAweDA0MDIwMDEyLAotCTB4NDE3ODU4MDAsIDB4NTkyYzA0MDQsIDB4OGMwMDA1MWMsIDB4MDQwMjAwMDIsCi0JMHg1OTM0NWMwNSwgMHg0NDJjMjgwMCwgMHg1OTM0MDAwOCwgMHg0ODAwMjgwMiwKLQkweDU5MzQwMDA5LCAweDQ4MDAyODAxLCAweDU5MzQwMDA2LCAweDQ4MDAyODA0LAotCTB4NTkzNDAwMDcsIDB4NDgwMDI4MDMsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGIsCi0JMHgwNDAxZjAzNywgMHg1OTJjMDIwNywgMHg4YzAwMDUxZSwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDAyLCAweDA0MDIwMDMyLCAweDgyMDRiNTQwLCAweDAwMDAwMDAwLAotCTB4MDQwMDAwMmYsIDB4NDQwNDI4MDAsIDB4NTkzMjY4MDksIDB4NTkzNDA0MDAsCi0JMHg0ODAwMjgwMSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHgwNDAxZjAyOCwKLQkweDgxNDI4MWMwLCAweDA0MDIwMDMwLCAweDU5MzQ1YzA1LCAweDQ0MmMyODAwLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMjEsIDB4ODM0MGI1NDAsCi0JMHgwMDAwMDAwMCwgMHgwNDAwMDAxZSwgMHgwNDAxZjAyNywgMHg4MTQyODFjMCwKLQkweDA0MDIwMDI1LCAweDU5MzQwMjAwLCAweDQ0MDAyODAwLCAweDU5MzQwMDAxLAotCTB4NDgwMDI4MDEsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWYwMTQsCi0JMHg4MzQwYjU0MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAxYiwgMHgwNDAxZjAxMCwKLQkweDgzNDBiNTQwLCAweDAwMDAwMDAwLCAweDA0MDAwMDBkLCAweDAyMDFmODAwLAotCTB4MDAxMDRhMWYsIDB4MDQwMDAwMTQsIDB4OGMyMDQ1MGUsIDB4MDQwMDAwMDIsCi0JMHg0OTdhNjAwOSwgMHg0MTc4YjAwMCwgMHg0OTdhNWEwNiwgMHgwNDAxZjAwNCwKLQkweDgzNDBiNTQwLCAweDAwMDAwMDAwLCAweDA0MDIwMDBiLCAweDU5MmMwNDA0LAotCTB4ODQwMDA1MWMsIDB4NDgwMjVjMDQsIDB4NTkyYzAyMDcsIDB4ODQwMDA1MWUsCi0JMHg0ODAyNWEwNywgMHgwNDAxZjhhYSwgMHg0OTdhNjAwOCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwMmRhLCAweDU5MmMwMjA3LCAweDhjMDAwNTFlLCAweDQyMDBiMDAwLAotCTB4MDAwMDAwMDIsIDB4MDQwMjA3ZjIsIDB4ODIwNGI1NDAsIDB4MDAwMDAwMDAsCi0JMHgwNDAwMDdlZiwgMHg0NDA0MjgwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMSwKLQkweDA0MDFmN2ViLCAweDQ5MzdjODU3LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAwMjA3NWEsIDB4MDQwMDAwMTEsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwYiwKLQkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDRkMzgwMDAwLCAweDQyMDI3MDAwLAotCTB4MDAwMDAwNDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA3YTEsIDB4NWMwMjcwMDAsCisJMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNzZjOSwgMHgwNDAwMDAxYiwKKwkweDA0MDFmODFmLCAweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA2OThjLAorCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDY3ZjYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjU0MywgMHg1YzAyNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhMGRhLCAweDAyMDFmODAwLCAweDAwMTA2OTgyLCAweDVjMDI2MDAwLAorCTB4OGQzZTdkM2UsIDB4MDQwMjAwMGIsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsCisJMHgwMDAwMDA0YywgMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg1YzAyNzAwMCwKIAkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLAotCTB4NDkzN2M4NTcsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4ODMzODA1ODAsCi0JMHgwMDAwMDAxNSwgMHgwNDAyMDAyNSwgMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDA0LCAweDA0MDIwMDIxLCAweDU5YTgwMDEwLCAweDU5MmMxMDA5LAotCTB4ODAwODA1ODAsIDB4MDQwMjAwMTAsIDB4NGQ0NDAwMDAsIDB4NTkyZThjMDYsCi0JMHg1OTJjMDIwNywgMHg0ODAzYzg1NiwgMHg4MjAwMDUwMCwgMHgwMDAwMDA4MCwKLQkweDg0MDAwNTQ4LCAweDRkM2MwMDAwLCAweDQyMDI3ODAwLCAweDAwMDAxMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ5YmIsIDB4NWMwMjc4MDAsIDB4NWMwMjg4MDAsCi0JMHgwNDAxZjAwNCwgMHg0ODAzYzg1NiwgMHgwMjAxZjgwMCwgMHgwMDEwNGExZiwKLQkweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDE3LCAweDRkNDAwMDAwLAotCTB4NDIwMjgwMDAsIDB4MDAwMDAwMDAsIDB4NDE3ODA4MDAsIDB4MDQwMWZmMzgsCi0JMHg1YzAyODAwMCwgMHgwNDAxZjAwZSwgMHgwMjAxZjgwMCwgMHgwMDEwNGExZiwKLQkweDA0MDIwN2Y0LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDA0MDAwMDBhLAotCTB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWY4NmUsCi0JMHg1YzAwYjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwODAxYywgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzdkLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ5MzdjODU3LAotCTB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3NWEsIDB4MDQwMDAwMTIsCi0JMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0ZDNjMDAwMCwKLQkweDRkMzgwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA0NTY3LAotCTB4NDkyZTYwMDgsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHg1YzAyNzgwMCwgMHg4MjAwMDU0MCwKLQkweDAwMDAwMDAxLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ5MzdjODU3LAotCTB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDc5NDIsIDB4MDQwMDAwMGQsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDhiNCwgMHgwNDAxZjdmYSwgMHg1OTJjMDQwNywKKwkweDQ5NGE2MDE3LCAweDQ5NGU2MDE4LCAweDQ5MzY2MDA5LCAweDQ5MmU2MDA4LAorCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDMsIDB4ODAwMDAwYzIsIDB4ODAwMDA4YzQsCisJMHg4MDA0MDQwMCwgMHg0ODAyNjIwNiwgMHgxYzAxZjAwMCwgMHg0OTNiYzg1NywKKwkweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwODkyLCAweDA0MDAwMDBkLAorCTB4MDQwMWZmZWYsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDUsCisJMHgwNDAxZjgwZCwgMHg1YzAyODAwMCwgMHg4ZDNlN2QzZSwgMHgwNDAyMDAwNywKKwkweDAyMDFmODAwLCAweDAwMDIwOGQ4LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsCisJMHgwNDAxZjdmYSwgMHg0ODAzYzg1NiwgMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywKKwkweDRkM2MwMDAwLCAweDRkNDQwMDAwLCAweDU5MzY4YzAzLCAweDQyMDI3ODAwLAorCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDY2ZmYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjY3NSwgMHgwMjAxZjgwMCwgMHgwMDEwNjU0MywgMHgwMjAxZjgwMCwKKwkweDAwMTBhMGRhLCAweDVjMDI4ODAwLCAweDVjMDI3ODAwLCAweDAyMDFmMDAwLAorCTB4MDAxMDY5ODIsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDg5MiwgMHgwNDAwMDAwZiwgMHg0ODFhNjAxYywgMHg0OGVlNjAyMSwKIAkweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LAotCTB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNTEsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDdhMSwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjNTgwMDAwLAotCTB4NTkzMjU4MDgsIDB4ODMzODM1ODAsIDB4MDAwMDAwMTUsIDB4MDQwMjAwMTEsCi0JMHg1OTJjMDAwOCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHgwNDAyMDAwYSwKLQkweDAyMDFmODAwLCAweDAwMTA1NzU1LCAweDU5Y2MwMDAwLCAweDgyMDAwNTAwLAotCTB4MDBmZmZmZmYsIDB4NDQwMDI4MDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsCi0JMHgwNDAxZjgwYiwgMHgwMjAxZjgwMCwgMHgwMDEwN2IzOCwgMHgwNDAxZjAwNiwKLQkweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDA0MDFmODIzLCAweDAyMDFmODAwLAotCTB4MDAxMDgwMWMsIDB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsCi0JMHg0YzU4MDAwMCwgMHg0YzAwMDAwMCwgMHg4MDU4YjFjMCwgMHgwNDAwMDAwYiwKLQkweDgyNTgwNTAwLCAweGZmZmZmZmYwLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAotCTB4ODA1OGIwZDAsIDB4NTkyYzA0MDgsIDB4ODIwMDA1MDAsIDB4ZmZmZmYwZmYsCi0JMHg4MDU4MDU0MCwgMHg0ODAyNWMwOCwgMHg1YzAwMDAwMCwgMHg1YzAwYjAwMCwKLQkweDFjMDFmMDAwLCAweDQ5MmZjODU3LCAweDRjMDAwMDAwLCAweDRjMDQwMDAwLAotCTB4ODAwMDAwZDgsIDB4NTkyYzBjMDgsIDB4ODIwNDBkMDAsIDB4ZmZmZjBmZmYsCi0JMHg4MDA0MDU0MCwgMHg0ODAyNWMwOCwgMHg1YzAwMDgwMCwgMHg1YzAwMDAwMCwKLQkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LAotCTB4NTkyYzAyMDcsIDB4ODQwMDA1NWUsIDB4NDgwMjVhMDcsIDB4NGM1MDAwMDAsCi0JMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwgMHgwNDAxZmZkOSwgMHgwMjAxZjgwMCwKLQkweDAwMTA1NzU1LCAweDQ2MDAyODAwLCAweDAwMDAwMDE4LCAweDgwMTQyODAwLAotCTB4ODA1OGIwNDAsIDB4ODNjY2E0MDAsIDB4MDAwMDAwMDcsIDB4NDAxNGE4MDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg1YzAwYjAwMCwgMHg1YzAwYTgwMCwKLQkweDVjMDBhMDAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDU5MzI1ODA4LAotCTB4NTkyYzAyMDQsIDB4ODIwMDA1ODAsIDB4MDAwMDAxNTIsIDB4MWMwMWYwMDAsCi0JMHg1OTMwMDAxZiwgMHg4MDAwMDU0MCwgMHgwMjAyMDgwMCwgMHgwMDEwMGQ1NiwKLQkweDFjMDFmMDAwLCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDU5MzAwMjAzLAotCTB4NDkzM2M4NTcsIDB4NDkyZmM4NTcsIDB4NDkzYmM4NTcsIDB4NDgwM2M4NTcsCi0JMHg4MjAwMzQ4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwKLQkweDBjMDFmODAzLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDAwMTA5NWJkLAotCTB4MDAxMDk1YzgsIDB4MDAxMDk2MDMsIDB4MDAxMDk1YmQsIDB4MDAxMDk1YmQsCi0JMHgwMDEwOTViZCwgMHgwMDEwOTViZCwgMHgwMDEwOTViZCwgMHgwMDEwOTViZiwKLQkweDAwMTA5NWJkLCAweDAwMTA5NWJkLCAweDAwMTA5NWJkLCAweDAwMTA5NWJkLAotCTB4MDAxMDk1YmQsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4ODMzODM0ODAsCi0JMHgwMDAwMDA1NiwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0OTNhNjQwMywKLQkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLAotCTB4ODMzODA1ODAsIDB4MDAwMDAwMTMsIDB4MDQwMjAwMGYsIDB4NTkyYzAwMGMsCi0JMHg4MDAwMDFjMCwgMHgwNDAwMDAwNiwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwKLQkweDU5YTgwMDM3LCAweDQ4MDI2MjA2LCAweDFjMDFmMDAwLCAweDRhMDI1YTA2LAotCTB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHg4MzM4MDU4MCwgMHgwMDAwMDAyNywgMHgwNDAwMDAxYSwKLQkweDgzMzgwNTgwLCAweDAwMDAwMDE0LCAweDA0MDAwMDEyLCAweDgzMzgwNTgwLAotCTB4MDAwMDAwMTUsIDB4MDQwMDAwMDUsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTYsCi0JMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwgMHgwMDEwNmY2MCwKLQkweDAyMDIwMDAwLCAweDAwMTA3OTc0LCAweDU5MzAwMjAzLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDIsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4MDQwMWYwMTQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHg0YTAyNTgwZSwgMHgwMDAwMDAxMSwKLQkweDA0MDFmMDA1LCAweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDRhMDI1ODBlLAorCTB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMWYsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDhkOCwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsIDB4MDQwMDAwMGUsIDB4NDhlZTYwMjEsCisJMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwKKwkweDRkMzgwMDAwLCAweDQyMDI3MDAwLCAweDAwMDAwMDU1LCAweDAyMDFmODAwLAorCTB4MDAwMjA4ZDgsIDB4NWMwMjcwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwKKwkweDAyMDFmODAwLCAweDAwMDIwODkyLCAweDA0MDAwMDBmLCAweDQ4MWE2MDFjLAorCTB4NDhlZTYwMjEsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsCisJMHg0OTJlNjAwOCwgMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDAzZCwKKwkweDAyMDFmODAwLCAweDAwMDIwOGQ4LCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsCisJMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNzZjOSwgMHgwNDAwMDAxNCwKKwkweDQ5MzY2MDA5LCAweDQ5MmZjODU3LCAweDQ5MzNjODU3LCAweDU5MmMwNDA0LAorCTB4OGMwMDA1MWUsIDB4MDQwMDAwMDMsIDB4NDhlZmM4NTcsIDB4NDhlZTYwMjEsCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwgMHg0ZDM4MDAwMCwKKwkweDQyMDI3MDAwLCAweDAwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwOGQ4LAorCTB4NWMwMjcwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwODkyLCAweDA0MDAwMDBmLCAweDQ4ZWU2MDIxLCAweDQ4MWE2MDFjLAorCTB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NDkyZTYwMDgsCisJMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0NCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwOGQ4LCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLAorCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTYsIDB4NGQzMDAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDg5MiwgMHgwNDAwMDAwZiwgMHg0ODFhNjAxYywKKwkweDQ4ZWU2MDIxLCAweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAorCTB4NDkyZTYwMDgsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNDksCisJMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDU5MzAwMDA5LAorCTB4ODAwMDE1NDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NTgwODA0MGIsCisJMHg0ODAzYzg1NiwgMHg4MDAwMDA0MCwgMHgwNDAwMTAwMiwgMHg0ODAwMTQwYiwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDIsIDB4MDQwMDAwMGYsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAwYywgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwNCwgMHgwNDAwMDAwOSwKKwkweDU5OWMwODE5LCAweDhjMDQwZDBlLCAweDA0MDAwMDA0LCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwMDMsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwgMHg0YzAwMDAwMCwgMHg0ZDJjMDAwMCwKKwkweDU5MzAwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDA0LCAweDA0MDAwMDFkLAorCTB4NTkzMDAwMDgsIDB4ODAwMjVkNDAsIDB4ODAwMDAxYzAsIDB4MDQwMDAwMTksCisJMHgwMjAxZjgwMCwgMHgwMDEwOTM2MCwgMHgwNDAwMDAxNCwgMHg1OTMwMDQwNiwKKwkweDgyMDA0NTgwLCAweDAwMDAwMDEwLCAweDA0MDAwMDEwLCAweDgyMDA0NTgwLAorCTB4MDAwMDAwMTEsIDB4MDQwMDAwMGQsIDB4ODIwMDQ1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAwMDAwYywgMHg4MjAwNDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDAwOSwKKwkweDgyMDA0NTgwLCAweDAwMDAwMDBhLCAweDA0MDAwMDA2LCAweDU5MmMwNDA0LAorCTB4OGMwMDA1MWUsIDB4MDQwMDAwMDMsIDB4ODAwMDA1ODAsIDB4MDQwMWYwMDMsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNTgwMCwgMHg1YzAwMDAwMCwKKwkweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDc2YzksIDB4MDQwMDAwMTMsIDB4NDkzNjYwMDksIDB4NDhlZTYwMjEsCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwgMHg0ZDNjMDAwMCwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDVjMDI3ODAwLAorCTB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMjgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDhkOCwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTUsIDB4MDQwMjAwMGQsIDB4NTlhODAwMTYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDA3NCwgMHgwNDAyMDAwOSwgMHgwMjAxZjgwMCwgMHgwMDEwNDQ4MCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDI5LAorCTB4MDIwMWYwMDAsIDB4MDAxMDY0NzAsIDB4MDIwMWY4MDAsIDB4MDAxMDdkYTYsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHg0ODAzYzg1NiwgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDE2LCAweDA0MDIwMDA3LCAweDQyMDAwODAwLCAweDAwMDAwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAxMDQzYzcsIDB4MDIwMWYwMDAsIDB4MDAxMDc4YmYsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwgMHgwNDAyMDAxMywgMHg1OWE4MDAxNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDBmLCAweDAyMDFmODAwLAorCTB4MDAxMDQ0ZTEsIDB4MDIwMWY4MDAsIDB4MDAxMDgyMTAsIDB4MDQwMjAwMGEsCisJMHg1OTM0MDQwNCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNywgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA0M2M3LCAweDAyMDFmMDAwLAorCTB4MDAxMDc4YmYsIDB4MDIwMWY4MDAsIDB4MDAxMDdkYTYsIDB4MDIwMWYwMDAsCisJMHgwMDAyMDhiNCwgMHg0ODAzYzg1NiwgMHg1OTJjMDIwNiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA1LCAweDA0MDAwMDAyLCAweDFjMDFmMDAwLCAweDQ4MDNjODU2LAorCTB4NTkyYzAyMDgsIDB4ODQwMDA1NGEsIDB4NDgwMjVhMDgsIDB4MWMwMWYwMDAsCisJMHg0OTdhNjIwNSwgMHg0OTdhNjAwOCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDUwLCAweDQyMDAwODAwLCAweDgwMDAwMDQzLAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4NTUsIDB4NDkzM2M4NTcsIDB4NGQzNDAwMDAsCisJMHg1OTMyNjgwOSwgMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHgwNDAwMDAwNiwKKwkweDU5MzAwNDA2LCAweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDA0MDIxMDA0LAorCTB4MGMwMWY4MDYsIDB4NWMwMjY4MDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwOGIzMCwgMHgwNDAxZjdmYywgMHgwMDEwOGIzMCwgMHgwMDEwOGZiNCwKKwkweDAwMTA4ZmI4LCAweDAwMTA4ZmJiLCAweDAwMTBhMmI5LCAweDAwMTBhMmQ2LAorCTB4MDAxMGEyZGEsIDB4MDAxMDhiMzAsIDB4MDAxMDhiMzAsIDB4MDAxMDhiMzAsCisJMHgwMDEwOGIzMCwgMHgwMDEwOGIzMCwgMHgwMDEwOGIzMCwgMHgwMDEwOGIzMCwKKwkweDAwMTA4YjMwLCAweDAwMTA4YjMwLCAweDAwMTA4YjMwLCAweDAwMTA4YjMwLAorCTB4NDgwM2M4NTYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MWMwMWYwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHgxYzAxZjAwMCwgMHg1OTMwMDAxYywKKwkweDQ4MDNjODU3LCAweDU5MzAwNDE0LCAweDQ5MzNjODU3LCAweDQ4MDNjODU3LAorCTB4OGMwMDA1MDIsIDB4MDQwMDAwMDUsIDB4NDgwM2M4NTcsIDB4ODQwMDA1NDAsCisJMHg0ODAyNjQxNCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHhkMDAwMDAwMCwKKwkweDQxMzAwODAwLCAweDAyMDFmODAwLCAweDAwMTAwYmRlLCAweDA0MDFmODEwLAorCTB4MDQwMjAwMGUsIDB4NTkzMDBjMTQsIDB4NTkzMDA0MDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDA0MCwgMHgwNDAwMDAwMywgMHg4NDA0MGQ0MCwgMHgwNDAxZjAwNSwKKwkweDU5YTgwMDM3LCAweDgyMDAwNDAwLCAweDAwMDAwMDBhLCAweDQ4MDI2MjA1LAorCTB4ODQwNDBkNDIsIDB4NDgwNjY0MTQsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg0ZDM0MDAwMCwgMHg1OTMyNjgwOSwgMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwKKwkweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDU5MzAwMDFjLCAweDgwMDAwNTQwLAorCTB4MDQwMjAwMzQsIDB4NTkzMDA0MDMsIDB4NDgwM2M4NTcsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDA0MCwgMHgwNDAwMDAwNCwgMHg1OWE4MDAyMSwgMHg4MDAwMDU0MCwKKwkweDA0MDIwMDJhLCAweDRkMWMwMDAwLCAweDQxMzIzODAwLCAweDAyMDFmODAwLAorCTB4MDAwMjA4OTIsIDB4MDQwMDAwMjMsIDB4NDkzMjM4MWMsIDB4NTkxYzA0MTQsCisJMHg4NDAwMDU0MiwgMHg0ODAyM2MxNCwgMHg0OTM2NjAwOSwgMHg1OTFjMDQwNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA2LCAweDU5MWMwMjAyLAorCTB4NDgwMjY0MTksIDB4NTkxYzA0MDIsIDB4NDgwMjYyMTksIDB4MDQwMWYwMDUsCisJMHg1OTFjMDIwMiwgMHg0ODAyNjIxOSwgMHg1OTFjMDQwMiwgMHg0ODAyNjQxOSwKKwkweDQ5MWU2MDFlLCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLAorCTB4MDAwMDAwMzUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsCisJMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDAyMDg1NSwgMHg0MTFlNjAwMCwKKwkweDVjMDIzODAwLCAweDgwMDAwNTgwLCAweDVjMDI2ODAwLCAweDFjMDFmMDAwLAorCTB4NDExZTYwMDAsIDB4NWMwMjM4MDAsIDB4NTlhODAwMzksIDB4NDgwMjYyMDUsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmOCwgMHg0OTMzYzg1NywKKwkweDRkMmMwMDAwLCAweDQ5MzIzODFjLCAweDRhMDI2MjAyLCAweDAwMDBmZmZmLAorCTB4NTkxZTU4MDgsIDB4NTkxYzAwMDcsIDB4OGMwMDA1MWUsIDB4MDQwMDAwMDUsCisJMHg4NDAwMDUxZSwgMHg0ODAyMzgwNywgMHg0OTdhNWMwOSwgMHgwNDAxZjAxOCwKKwkweDU5MmMwNDA4LCAweDhjMDAwNTE4LCAweDA0MDAwMDE1LCAweDg0MDAwNTE4LAorCTB4NDgwMjVjMDgsIDB4NGQ0MDAwMDAsIDB4NTkyZTgyMDYsIDB4NGEwMjVhMDYsCisJMHgwMDAwMDAwMSwgMHgwNDAxZmIzNCwgMHg0OTQyNWEwNiwgMHg1YzAyODAwMCwKKwkweDQ5N2E1YzA5LCAweDU5MmMwNDA4LCAweDhjMDAwNTEyLCAweDA0MDAwMDA4LAorCTB4NGQyYzAwMDAsIDB4ODQwMDA1MTIsIDB4NDgwMjVjMDgsIDB4NTkyZTU4MDksCisJMHgwMjAxZjgwMCwgMHgwMDEwMDg0MywgMHg1YzAyNTgwMCwgMHg1OWE4MDAzOSwKKwkweDQ4MDI2MjA1LCAweDU5MWMwMjE0LCAweDQ4MDI2MjE2LCAweDgyMDAwZDgwLAorCTB4MDAwMDAwMDEsIDB4MDQwMDAwMDgsIDB4NGEwMjNhMDMsIDB4MDAwMDAwMDIsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDAwOCwgMHg0OTdhNjAxNSwKKwkweDA0MDFmMDFlLCAweDU5MWMwMDA3LCAweDg0MDAwNTQwLCAweDQ4MDIzODA3LAorCTB4NGEwMjNhMDMsIDB4MDAwMDAwMDQsIDB4NTkxYzA0MTQsIDB4NDgwM2M4NTcsCisJMHg4NDAwMDUxYywgMHg4NDAwMDU1NCwgMHg0ODAyM2MxNCwgMHg1OTJjMDAwZiwKKwkweDQwMDAxMDAwLCAweDU5MWMwODE2LCAweDgwMDQwNDgwLCAweDA0MDIxN2YwLAorCTB4NTkxYzAwMTYsIDB4ODIwMDA1MDAsIDB4ZmZmZmZmZmMsIDB4NDgwMjYwMTUsCisJMHg0ODAyMzgxNiwgMHg1OTFjMGExNCwgMHg0ODA3Yzg1NywgMHg4MjA0MGQ4MCwKKwkweDAwMDAwMDA1LCAweDA0MDIwMDA1LCAweDQ4MGJjODU3LCAweDQ4MDNjODU3LAorCTB4NGEwMjM4MTIsIDB4ZmZmZmZmZmYsIDB4NTkxYzA0MDIsIDB4NDgwMjY0MTksCisJMHg1OTFjMDIwMiwgMHg0ODAyNjIxOSwgMHg1OTFlNjgwOSwgMHg0OTM2NjAwOSwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDM5LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDg1NSwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDU5MzAwNDE0LCAweDhjMDAwNTE0LCAweDA0MDAwMDE1LAorCTB4OGMwMDA1MWMsIDB4MDQwMjAwMTIsIDB4NTkzMDAwMTYsIDB4ODAxMDA0ODAsCisJMHgwNDAwMTAwNiwgMHgwNDAwMDAwNSwgMHg1OTMwMDQxNCwgMHg4NDAwMDUxNCwKKwkweDg0MDAwNTVjLCAweDA0MDFmMDA5LCAweDQ4MTI2MDE2LCAweDQ4MTI2MDEyLAorCTB4NDAxMDAwMDAsIDB4NTkyYzE4MGYsIDB4ODAwYzA0ODAsIDB4NDgwMjYwMTEsCisJMHg1OTMwMDQxNCwgMHg4NDAwMDUxNCwgMHg0ODAyNjQxNCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDhjMDAwNTFjLCAweDA0MDIwMDA2LCAweDU5MzAwMDEyLAorCTB4NDgwMjYwMTYsIDB4NTkzMDA0MTQsIDB4ODQwMDA1NWMsIDB4NDgwMjY0MTQsCisJMHgxYzAxZjAwMCwgMHg1OTMwMGMwMywgMHg0OTMzYzg1NywgMHg0ODA3Yzg1NywKKwkweDgyMDQwNDgwLCAweDAwMDAwMDM0LCAweDA0MDAxMDA2LCAweDgyMDQwNDgwLAorCTB4MDAwMDAwM2MsIDB4MDQwMjEwMDMsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwgMHg0MTc4MDgwMCwKKwkweDU5YTgxMDM1LCAweDQyMDAwMDAwLCAweDAwMDAwMDMyLCAweDAyMDFmODAwLAorCTB4MDAxMDYzZWUsIDB4ODAwODExYzAsIDB4MDQwMjAwMDMsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAxNCwgMHg0ODBiNTAzNywgMHg1OWE4MTAzNiwgMHg0ODBiNTAyZCwKKwkweDQxNzgwODAwLCAweDQyMDAwMDAwLCAweDAwMDAwMDY0LCAweDAyMDFmODAwLAorCTB4MDAxMDYzZWUsIDB4ODAwODExYzAsIDB4MDQwMjAwMDMsIDB4NDIwMDEwMDAsCisJMHgwMDAwMDAxNCwgMHg0ODBiNTAzOCwgMHg4MjA4MTQwMCwgMHgwMDAwMDAwYSwKKwkweDQ4MGI1MDM5LCAweDQyMDAwODAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLAorCTB4MDAxMDY5YWYsIDB4NDIwMDAwMDAsIDB4MzAwMDAwMDAsIDB4NDAwODA4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMGJiMiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywKKwkweDU5YTgxMDEwLCAweDAyMDFmODAwLCAweDAwMTA2OWFmLCAweDAyMDFmMDAwLAorCTB4MDAxMDQ3NTUsIDB4NGEwMzUwMzcsIDB4MDAwMDAwMjgsIDB4NGEwMzUwMzgsCisJMHgwMDAwMDAxNCwgMHg0YTAzNTAyZCwgMHgwMDAwMDdkMCwgMHg0MjAwMTAwMCwKKwkweDAwMDAwMDFlLCAweDQ4MGI1MDM5LCAweDQyMDAwODAwLCAweDAwMDAwMDAxLAorCTB4MDIwMWY4MDAsIDB4MDAxMDY5YWYsIDB4NDIwMDAwMDAsIDB4MzAwMDAwMDAsCisJMHg0MDA4MDgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMGJiMiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAzLCAweDU5YTgxMDEwLCAweDAyMDFmMDAwLCAweDAwMTA2OWFmLAorCTB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsIDB4NTkzMDA0MDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAzZSwgMHgwNDAyMDAwNSwgMHg1OTMyNTgxNywgMHg4MTJlNTljMCwKKwkweDAyMDIwODAwLCAweDAwMTAwODNhLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAorCTB4NDkzN2M4NTcsIDB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsCisJMHgwNDAwMDAxMSwgMHg0OTM2NjAwOSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwKKwkweDQ5MmU2MDA4LCAweDQyMDAwODAwLCAweDAwMDAwMDA5LCAweDAyMDFmODAwLAorCTB4MDAxMDQzYzcsIDB4NGQzODAwMDAsIDB4NDIwMjcwMDAsIDB4MDAwMDAwMzMsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDhkOCwgMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwKKwkweDAwMDAwMDAxLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NGQyYzAwMDAsIDB4NGM1ODAwMDAsIDB4NGQzYzAwMDAsIDB4NTkzMjU4MDgsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwgMHgwNDAyMDAyNSwgMHg1OWE4YjAxNiwKKwkweDgyNTgwYzgwLCAweDAwMDAwMDE5LCAweDA0MDAxMDAzLCAweDQyMDBiMDAwLAorCTB4MDAwMDAwMTgsIDB4ODA1OGIxMDQsIDB4MDQwMWZhMGEsIDB4ODAwMDA1ODAsCisJMHgwNDAxZmExYSwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwOSwgMHg4M2NjYTQwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDRjNjAwMDAwLAorCTB4NDIwMGMwMDAsIDB4MDAwMDAwMDEsIDB4NTkyYzEwMGEsIDB4OGMwODE1MTgsCisJMHgwNDAyMDAwNiwgMHg1OWE4MDAxMCwgMHg1OTJjMTAwZCwgMHg4MDA4MDU4MCwKKwkweDA0MDIwMDA3LCAweDQxNzhjMDAwLCAweDU5MzAxMDA5LCAweDU4MDgxNDAzLAorCTB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDFlNDgsIDB4NWMwMGMwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNzhiZiwgMHgwNDAxZjAwOCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAyLCAweDA0MDFmYTA5LCAweDAyMDFmODAwLCAweDAwMTA3ZGE2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsIDB4NWMwMjc4MDAsIDB4NWMwMGIwMDAsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NiwgMHg0OTM2NjAwOSwKKwkweDRhMDI2NDA2LCAweDAwMDAwMDAxLCAweDQ5MmU2MDA4LCAweDRkMzgwMDAwLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNGQsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsCisJMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKKwkweDQ4MDNjODU2LCAweDRkMmMwMDAwLCAweDgzMzgwNTgwLCAweDAwMDAwMDE1LAorCTB4MDQwMjAwMjcsIDB4NTlhODA4MTYsIDB4NTkzMjU4MDgsIDB4NTkzMDA0MGIsCisJMHg4MDAwMDBjNCwgMHg4MDA0MDU4MCwgMHgwNDAyMDAyMSwgMHg0YzUwMDAwMCwKKwkweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LAorCTB4NDA1MGE4MDAsIDB4NTkzMGI0MGIsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NGYsCisJMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwgMHg1OTJjYjIwNSwgMHg4MzJjYWMwMCwKKwkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDU5MmU1ODAxLAorCTB4ODEyZTU5YzAsIDB4MDQwMjA3ZjksIDB4NTkzMWQ4MjEsIDB4NThlZjQwMGIsCisJMHg1OGVlNTgwZCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwMywgMHg1OGVjMDAwOSwKKwkweDA4MDFmODAwLCAweDU5MzAwNDAyLCAweDVjMDBiMDAwLCAweDVjMDBhODAwLAorCTB4NWMwMGEwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwN2RhNiwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDgzMzgwNTgwLCAweDAwMDAwMDM1LCAweDA0MDAwMDA1LCAweDU5MzAxNDE5LAorCTB4MDQwMWY4NTEsIDB4MDQwMDAwMjcsIDB4MDQwMWYwMDYsIDB4NGQzMDAwMDAsCisJMHg1OTMyNjAxZSwgMHgwNDAxZjg1NiwgMHg1YzAyNjAwMCwgMHgwNDAwMDAyMCwKKwkweDU5MWMwYzA2LCAweDgyMDQwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA0LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDYsIDB4MDQwMjAwMWMsIDB4NTkxYzBjMDIsCisJMHg1OTMwMDQxOSwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwOSwgMHg1OTMwMDIxOSwKKwkweDgwMDQwNTgwLCAweDA0MDIwMDE1LCAweDU5MWMwYTAyLCAweDU5MzAwNDE5LAorCTB4ODAwNDA1ODAsIDB4MDQwMjAwMTEsIDB4MDQwMWYwMDksIDB4NTkzMDBhMTksCisJMHg4MjA0MDU4MCwgMHgwMDAwZmZmZiwgMHgwNDAwMDAwNSwgMHg1OTFjMDIwMiwKKwkweDU5MzAwYTE5LCAweDgwMDQwNTgwLCAweDA0MDIwMDA4LCAweDU5MWMwMDA5LAorCTB4NTkzMDA4MDksIDB4ODAwNDA1ODAsIDB4MWMwMWYwMDAsIDB4NDE3YTM4MDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDU5YjgwMGU0LCAweDhjMDAwNTM4LCAweDAyMDIwODAwLCAweDAwMTAwNjE1LAorCTB4NDIwMDA4MDAsIDB4MDAwMDAxMmMsIDB4NGEwMzcwZTQsIDB4MjAwMDAwMDAsCisJMHg1OWI4MDBlNCwgMHg4MDA0MDg0MCwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKKwkweDhjMDAwNTNjLCAweDA0MDIwN2Y5LCAweDRhMDM3MGU0LCAweDMwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NTliODAwZTQsCisJMHg4YzAwMDUzYywgMHgwNDAyMDdmMSwgMHgxYzAxZjAwMCwgMHg0ODAzYzg1NiwKKwkweDRhMDM3MGU0LCAweDIwMDAwMDAwLCAweDQwMDAwMDAwLCAweDU5YjgwMGU0LAorCTB4OGMwMDA1MzgsIDB4MDQwMjA3ZmIsIDB4MWMwMWYwMDAsIDB4NTkzMDA4MDcsCisJMHg4YzA0MGQxZSwgMHg1OTJjMGMwOCwgMHgwNDAyMDAwMiwgMHg4YzA0MGQxOCwKKwkweDFjMDFmMDAwLCAweDA0MDFmYzEwLCAweDA0MDAwMDA4LCAweDQyMDAwODAwLAorCTB4MDAwMDAwMjQsIDB4MDIwMWY4MDAsIDB4MDAxMDYzY2YsIDB4ODIwNjNjMDAsCisJMHgwMDEwY2ZjMCwgMHg0OTFmYzg1NywgMHgxYzAxZjAwMCwgMHg4MzMwMDQ4MCwKKwkweDAwMTBjZmMwLCAweDA0MDAxMDBhLCAweDU5YTgwMDBiLCAweDgxMzAwNDgwLAorCTB4MDQwMjEwMDcsIDB4NTkzMDE0MDIsIDB4MDQwMWZmZWYsIDB4MDQwMDAwMDcsCisJMHg0MTFjMDAwMCwgMHg4MTMwMDU4MCwgMHgwNDAwMDAwMywgMHg4MTc4MDUwMCwKKwkweDA0MDFmMDAyLCAweDgxMzAwNTQwLCAweDFjMDFmMDAwLCAweDQ5NDdjODU3LAorCTB4NGQzMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsIDB4MDQwMjAwMGEsCisJMHg0MjAyNjAwMCwgMHgwMDEwYmJlOCwgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwKKwkweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDgwMDAwNTgwLCAweDVjMDI2MDAwLAorCTB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWY3ZmMsCisJMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDRkMmMwMDAwLCAweDRkMzQwMDAwLCAweDRkNDQwMDAwLAorCTB4NGM1ODAwMDAsIDB4NTkzMjU4MDgsIDB4NTkzMjY4MDksIDB4NDk0MjVhMDYsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTQzOSwgMHg1OTJlOGMwNiwgMHg1OTJjNDIwNywKKwkweDgyMjAwNTAwLCAweDAwMDAwMDBmLCAweDBjMDFmODA2LCAweDVjMDBiMDAwLAorCTB4NWMwMjg4MDAsIDB4NWMwMjY4MDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHgwMDEwOTIyZiwgMHgwMDEwOTI1MSwgMHgwMDEwOTI1OCwgMHgwMDEwOTI1YywKKwkweDAwMTA5MjY1LCAweDAwMTA5MjJjLCAweDAwMTA5MjJjLCAweDAwMTA5MjJjLAorCTB4MDAxMDkyNjksIDB4MDAxMDkyNzUsIDB4MDAxMDkyNzUsIDB4MDAxMDkyMmMsCisJMHgwMDEwOTIyYywgMHgwMDEwOTIyYywgMHgwMDEwOTIyYywgMHgwMDEwOTIyYywKKwkweDQ4MDNjODU3LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDgxNDI4MWMwLAorCTB4MDQwMjAwMTIsIDB4NDE3ODU4MDAsIDB4NTkyYzA0MDQsIDB4OGMwMDA1MWMsCisJMHgwNDAyMDAwMiwgMHg1OTM0NWMwNSwgMHg0NDJjMjgwMCwgMHg1OTM0MDAwOCwKKwkweDQ4MDAyODAyLCAweDU5MzQwMDA5LCAweDQ4MDAyODAxLCAweDU5MzQwMDA2LAorCTB4NDgwMDI4MDQsIDB4NTkzNDAwMDcsIDB4NDgwMDI4MDMsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwYiwgMHgwNDAxZjAzNywgMHg1OTJjMDIwNywgMHg4YzAwMDUxZSwKKwkweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDA0MDIwMDMyLCAweDgyMDRiNTQwLAorCTB4MDAwMDAwMDAsIDB4MDQwMDAwMmYsIDB4NDQwNDI4MDAsIDB4NTkzMjY4MDksCisJMHg1OTM0MDQwMCwgMHg0ODAwMjgwMSwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKKwkweDA0MDFmMDI4LCAweDgxNDI4MWMwLCAweDA0MDIwMDMwLCAweDU5MzQ1YzA1LAorCTB4NDQyYzI4MDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMjEsCisJMHg4MzQwYjU0MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAxZSwgMHgwNDAxZjAyNywKKwkweDgxNDI4MWMwLCAweDA0MDIwMDI1LCAweDU5MzQwMjAwLCAweDQ0MDAyODAwLAorCTB4NTkzNDAwMDEsIDB4NDgwMDI4MDEsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCisJMHgwNDAxZjAxNCwgMHg4MzQwYjU0MCwgMHgwMDAwMDAwMCwgMHgwNDAyMDAxYiwKKwkweDA0MDFmMDEwLCAweDgzNDBiNTQwLCAweDAwMDAwMDAwLCAweDA0MDAwMDBkLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4NzEsIDB4MDQwMDAwMTQsIDB4OGMyMDQ1MGUsCisJMHgwNDAwMDAwMiwgMHg0OTdhNjAwOSwgMHg0MTc4YjAwMCwgMHg0OTdhNWEwNiwKKwkweDA0MDFmMDA0LCAweDgzNDBiNTQwLCAweDAwMDAwMDAwLCAweDA0MDIwMDBiLAorCTB4NTkyYzA0MDQsIDB4ODQwMDA1MWMsIDB4NDgwMjVjMDQsIDB4NTkyYzAyMDcsCisJMHg4NDAwMDUxZSwgMHg0ODAyNWEwNywgMHgwNDAxZjhhYSwgMHg0OTdhNjAwOCwKKwkweDAyMDFmMDAwLCAweDAwMDIwMzgxLCAweDU5MmMwMjA3LCAweDhjMDAwNTFlLAorCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMjA3ZjIsIDB4ODIwNGI1NDAsCisJMHgwMDAwMDAwMCwgMHgwNDAwMDdlZiwgMHg0NDA0MjgwMCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmN2ViLCAweDQ5MzdjODU3LCAweDRkMzAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsIDB4MDQwMDAwMTEsIDB4NDkzNjYwMDksCisJMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0OTJlNjAwOCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTA0M2M3LCAweDRkMzgwMDAwLAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNDMsIDB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsCisJMHg1YzAyNzAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNjAwMCwKKwkweDFjMDFmMDAwLCAweDQ5MzdjODU3LCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMTUsIDB4MDQwMjAwMjUsIDB4NTlhODAwMTYsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAyMSwgMHg1OWE4MDAxMCwKKwkweDU5MmMxMDA5LCAweDgwMDgwNTgwLCAweDA0MDIwMDEwLCAweDRkNDQwMDAwLAorCTB4NTkyZThjMDYsIDB4NTkyYzAyMDcsIDB4NDgwM2M4NTYsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDA4MCwgMHg4NDAwMDU0OCwgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwKKwkweDAwMDAxMDAwLCAweDAyMDFmODAwLCAweDAwMTA0ODBhLCAweDVjMDI3ODAwLAorCTB4NWMwMjg4MDAsIDB4MDQwMWYwMDQsIDB4NDgwM2M4NTYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDg3MSwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwNDAwMDAxNywKKwkweDRkNDAwMDAwLCAweDQyMDI4MDAwLCAweDAwMDAwMDAwLCAweDQxNzgwODAwLAorCTB4MDQwMWZmMzgsIDB4NWMwMjgwMDAsIDB4MDQwMWYwMGUsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDg3MSwgMHgwNDAyMDdmNCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwKKwkweDA0MDAwMDBhLCAweDRjNTgwMDAwLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4MDQwMWY4NmUsIDB4NWMwMGIwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDdkYTYsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDhiNCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzdjODU3LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwODkyLAorCTB4MDQwMDAwMTIsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsCisJMHg0ZDNjMDAwMCwgMHg0ZDM4MDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2JkLCAweDQ5MmU2MDA4LCAweDQyMDI3MDAwLCAweDAwMDAwMDA0LAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4ZDgsIDB4NWMwMjcwMDAsIDB4NWMwMjc4MDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHg1YzAyNjAwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzdjODU3LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA3NmM5LAorCTB4MDQwMDAwMGQsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsCisJMHg0OTJlNjAwOCwgMHg0ZDM4MDAwMCwgMHg0MjAyNzAwMCwgMHgwMDAwMDA1MSwKKwkweDAyMDFmODAwLCAweDAwMDIwOGQ4LCAweDVjMDI3MDAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCisJMHg0YzU4MDAwMCwgMHg1OTMyNTgwOCwgMHg4MzM4MzU4MCwgMHgwMDAwMDAxNSwKKwkweDA0MDIwMDExLCAweDU5MmMwMDA4LCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAorCTB4MDQwMjAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDU0MzksIDB4NTljYzAwMDAsCisJMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg0NDAwMjgwMCwgMHg0MjAwYjAwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmODBiLCAweDAyMDFmODAwLCAweDAwMTA3OGJmLAorCTB4MDQwMWYwMDYsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4MDQwMWY4MjMsCisJMHgwMjAxZjgwMCwgMHgwMDEwN2RhNiwgMHg1YzAwYjAwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MmZjODU3LCAweDRjNTgwMDAwLCAweDRjMDAwMDAwLCAweDgwNThiMWMwLAorCTB4MDQwMDAwMGIsIDB4ODI1ODA1MDAsIDB4ZmZmZmZmZjAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDYxNSwgMHg4MDU4YjBkMCwgMHg1OTJjMDQwOCwgMHg4MjAwMDUwMCwKKwkweGZmZmZmMGZmLCAweDgwNTgwNTQwLCAweDQ4MDI1YzA4LCAweDVjMDAwMDAwLAorCTB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsIDB4NGMwMDAwMDAsCisJMHg0YzA0MDAwMCwgMHg4MDAwMDBkOCwgMHg1OTJjMGMwOCwgMHg4MjA0MGQwMCwKKwkweGZmZmYwZmZmLCAweDgwMDQwNTQwLCAweDQ4MDI1YzA4LCAweDVjMDAwODAwLAorCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGQyYzAwMDAsCisJMHg1OTMyNTgwOCwgMHg1OTJjMDIwNywgMHg4NDAwMDU1ZSwgMHg0ODAyNWEwNywKKwkweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDRjNTgwMDAwLCAweDA0MDFmZmQ5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDU0MzksIDB4NDYwMDI4MDAsIDB4MDAwMDAwMTgsCisJMHg4MDE0MjgwMCwgMHg4MDU4YjA0MCwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNywKKwkweDQwMTRhODAwLCAweDAyMDFmODAwLCAweDAwMTBhOTNlLCAweDVjMDBiMDAwLAorCTB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHg1OTMyNTgwOCwgMHg1OTJjMDIwNCwgMHg4MjAwMDU4MCwgMHgwMDAwMDE1MiwKKwkweDFjMDFmMDAwLCAweDU5MzAwMDFmLCAweDgwMDAwNTQwLCAweDAyMDIwODAwLAorCTB4MDAxMDBkOWEsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsCisJMHg1OTMwMDIwMywgMHg0OTMzYzg1NywgMHg0OTJmYzg1NywgMHg0OTNiYzg1NywKKwkweDQ4MDNjODU3LCAweDgyMDAzNDgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLAorCTB4MDAxMDA2MTUsIDB4MGMwMWY4MDMsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCisJMHgwMDEwOTM4NiwgMHgwMDEwOTM5MSwgMHgwMDEwOTNjZiwgMHgwMDEwOTM4NiwKKwkweDAwMTA5Mzg2LCAweDAwMTA5Mzg2LCAweDAwMTA5Mzg2LCAweDAwMTA5Mzg2LAorCTB4MDAxMDkzODgsIDB4MDAxMDkzODYsIDB4MDAxMDkzODYsIDB4MDAxMDkzODYsCisJMHgwMDEwOTM4NiwgMHgwMDEwOTM4NiwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwKKwkweDgzMzgzNDgwLCAweDAwMDAwMDU2LCAweDAyMDIxODAwLCAweDAwMTAwNjE1LAorCTB4NDkzYTY0MDMsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsCisJMHgwMDEwNjQ3MCwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxMywgMHgwNDAyMDAxMCwKKwkweDQ5MzdjODU3LCAweDU5MmMwMDBjLCAweDgwMDAwMWMwLCAweDA0MDAwMDA2LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDIsIDB4NTlhODAwMzcsIDB4NDgwMjYyMDYsCisJMHgxYzAxZjAwMCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMjcsIDB4MDQwMDAwMWIsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTQsCisJMHgwNDAwMDAxMiwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwgMHgwNDAwMDAwNSwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDE2LCAweDAyMDIwODAwLCAweDAwMTAwNjE1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDZjYjQsIDB4MDIwMjAwMDAsIDB4MDAxMDc2ZmIsCisJMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNjE1LCAweDA0MDFmMDE2LCAweDQ5MzdjODU3LCAweDAyMDFmODAwLAorCTB4MDAxMDY4ZjYsIDB4NGEwMjU4MGUsIDB4MDAwMDAwMTEsIDB4MDQwMWYwMDYsCisJMHg0OTM3Yzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwgMHg0YTAyNTgwZSwKIAkweDAwMDAwMDEwLCAweDRhMDI1YTA2LCAweDAwMDAwMDMxLCAweDRhMDI1ODBkLAotCTB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNGMxOSwgMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OTM0MTQwMCwKKwkweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDAyMDFmODAwLAorCTB4MDAxMDRhODMsIDB4MDIwMWYwMDAsIDB4MDAxMDc2OTgsIDB4NTkzNDE0MDAsCiAJMHg4MjA4MWQwMCwgMHgwMDAwMDBmZiwgMHg1OTMwMGMwMywgMHg0ODBiYzg1NywKIAkweDQ4MDdjODU3LCAweDgyMDQwNTgwLCAweDAwMDAwMDUzLCAweDA0MDAwMDJlLAogCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMTYsIDB4ODIwNDA1ODAsCkBAIC05NjQ3LDEwICs5NTA2LDEwIEBACiAJMHgwNDAwMDAxYywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDAxZCwKIAkweDgyMDQwNTgwLCAweDAwMDAwMDMzLCAweDA0MDAwMDFhLCAweDgyMDQwNTgwLAogCTB4MDAwMDAwMDAsIDB4MDQwMDAwMWIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDQsCi0JMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZjhhMSwgMHgwNDAxZjAxNiwKKwkweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDA0MDFmOGExLCAweDA0MDFmMDE2LAogCTB4ODIwYzA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMDA4NGMsIDB4MDQwMWYwMTIsCiAJMHg4MjBjMDU4MCwgMHgwMDAwMDAwYiwgMHgwNDAyMDAwZiwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDA3LCAweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDA0MDFmMDBhLAorCTB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYzcsIDB4MDQwMWYwMGEsCiAJMHg4MjBjMDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDg2NCwgMHgwNDAxZjAwNiwKIAkweDgyMGMwNTgwLCAweDAwMDAwMDA5LCAweDA0MDAwODg5LCAweDA0MDFmMDAyLAogCTB4MDQwMWY4OTMsIDB4NGEwMjY0MDMsIDB4MDAwMDAwNTIsIDB4NTlhODEwMTYsCkBAIC05NjYxLDgwICs5NTIwLDgwIEBACiAJMHg0YTAyNWEwNiwgMHgwMDAwMDAwNywgMHg0MDAwMTAwMCwgMHgwNDAxZjAwNiwKIAkweDRhMDI1YTA2LCAweDAwMDAwMDE1LCAweDA0MDFmMDAzLCAweDRhMDI1YTA2LAogCTB4MDAwMDAwMDAsIDB4NDgwYTU4MGMsIDB4ODIwODE0MDAsIDB4MDAwMDAwMDMsCi0JMHg4MDA4MTEwNCwgMHgwMjAxZjgwMCwgMHgwMDEwN2FiNSwgMHgwNDAwMDAxMCwKKwkweDgwMDgxMTA0LCAweDAyMDFmODAwLCAweDAwMTA3ODNjLCAweDA0MDAwMDEwLAogCTB4NTkyYzEwMDEsIDB4NDgwYTYwMGIsIDB4NTgwODA4MDAsIDB4ODIwODA0MDAsCiAJMHgwMDAwMDAwMiwgMHg1OTJjMTAxMSwgMHg1OTJjMTgxMiwgMHg0MjAwMzAwMCwKLQkweDAwMDAwMDAwLCAweDQyMDAyMDAwLCAweDAwMTAxMjAwLCAweDAyMDFmODAwLAotCTB4MDAxMDdjMzIsIDB4MDQwMDAwMDIsIDB4MWMwMWYwMDAsIDB4NGEwMjVhMDYsCi0JMHgwMDAwMDAyYywgMHg0OTdhNTgwYywgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwKLQkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDgzMzgwNTgwLCAweDAwMDAwMDE1LAotCTB4MDQwMjAwMGEsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsIDB4MDQwMjAwMGIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDYyYSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwKLQkweDAyMDFmMDAwLCAweDAwMTA0NTcxLCAweDQyMDAwODAwLCAweDAwMDAwMDA3LAotCTB4MDIwMWYwMDAsIDB4MDAxMDQ1NzEsIDB4MDIwMWY4MDAsIDB4MDAxMDUxM2IsCisJMHgwMDAwMDAwMCwgMHg0MjAwMjAwMCwgMHgwMDEwMTI1MCwgMHgwMjAxZjgwMCwKKwkweDAwMTA3OWI5LCAweDA0MDAwMDAyLCAweDFjMDFmMDAwLCAweDRhMDI1YTA2LAorCTB4MDAwMDAwMmMsIDB4NDk3YTU4MGMsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNSwKKwkweDA0MDIwMDBhLCAweDU5YTgwMDZmLCAweDhjMDAwNTAyLCAweDA0MDIwMDBiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ0ODAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsCisJMHgwMjAxZjAwMCwgMHgwMDEwNDNjNywgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywKKwkweDAyMDFmMDAwLCAweDAwMTA0M2M3LCAweDAyMDFmODAwLCAweDAwMTA0ZTBkLAogCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4MDQwMjAwMDksIDB4NTkzNDAwMDIsCiAJMHg4MjAwMDUwMCwgMHgwMGZmMDAwMCwgMHg4MjAwMDU4MCwgMHgwMGZmMDAwMCwKIAkweDA0MDAwN2VjLCAweDQyMDAxMDAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLAotCTB4MDAxMDRjNmQsIDB4MDQwMDA3ZTcsIDB4NTkyYzA0MGIsIDB4ODQwMDA1NDAsCisJMHgwMDEwNGFkYSwgMHgwNDAwMDdlNywgMHg1OTJjMDQwYiwgMHg4NDAwMDU0MCwKIAkweDQ4MDI1YzBiLCAweDA0MDFmN2U5LCAweDgzMzgwNTgwLCAweDAwMDAwMDE1LAotCTB4MDQwMjAwMGYsIDB4NTlhODAwMDUsIDB4OGMwMDA1MTQsIDB4MDQwMjAwMTAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDY4ZCwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKLQkweDAyMDFmODAwLCAweDAwMTA0NTY3LCAweDVjMDI3ODAwLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDYsIDB4MDIwMWYwMDAsIDB4MDAxMDQ1NzEsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwNCwgMHgwMjAxZjAwMCwgMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwKLQkweDAwMTA1MTNiLCAweDQyMDAxMDAwLCAweDAwMDAwMDEwLCAweDA0MDIwMDA5LAorCTB4MDQwMjAwMGYsIDB4NTlhODAwNmYsIDB4OGMwMDA1MDIsIDB4MDQwMjAwMTAsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDRlMSwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0M2JkLCAweDVjMDI3ODAwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDYsIDB4MDIwMWYwMDAsIDB4MDAxMDQzYzcsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwNCwgMHgwMjAxZjAwMCwgMHgwMDEwNDNjNywgMHgwMjAxZjgwMCwKKwkweDAwMTA0ZTBkLCAweDQyMDAxMDAwLCAweDAwMDAwMDEwLCAweDA0MDIwMDA5LAogCTB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsIDB4MDBmZjAwMDAsIDB4ODIwMDA1ODAsCiAJMHgwMGZmMDAwMCwgMHgwNDAwMDdlNywgMHg0MjAwMTAwMCwgMHgwMDAwMDAwOCwKLQkweDAyMDFmODAwLCAweDAwMTA0YzZkLCAweDA0MDAwN2UyLCAweDU5MmMwNDBiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDRhZGEsIDB4MDQwMDA3ZTIsIDB4NTkyYzA0MGIsCiAJMHg4NDAwMDU0MCwgMHg0ODAyNWMwYiwgMHgwNDAxZjdlOSwgMHg0MjAwMDgwMCwKLQkweDAwMDAwMDA0LCAweDAyMDFmMDAwLCAweDAwMTA0NTcxLCAweDgzMzgwNTgwLAotCTB4MDAwMDAwMTUsIDB4MDQwMjAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGEyYzgsCi0JMHgwMjAwMDgwMCwgMHgwMDEwNDhjMSwgMHgxYzAxZjAwMCwgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDA0LCAweDAyMDFmMDAwLCAweDAwMTA0M2M3LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTUsIDB4MDQwMjAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMGEwYjEsCisJMHgwMjAwMDgwMCwgMHgwMDEwNDcxMSwgMHgxYzAxZjAwMCwgMHg4MzM4MDU4MCwKIAkweDAwMDAwMDE1LCAweDA0MDIwMDFkLCAweDRjNTgwMDAwLCAweDgzY2MxNDAwLAogCTB4MDAwMDAwMDgsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODMzNDFjMDAsCi0JMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwODU1YSwgMHgwNDAyMDAxMiwKKwkweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA4MmZmLCAweDA0MDIwMDEyLAogCTB4ODNjYzE0MDAsIDB4MDAwMDAwMGEsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCi0JMHg4MzM0MWMwMCwgMHgwMDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwODU1YSwKKwkweDgzMzQxYzAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLCAweDAwMTA4MmZmLAogCTB4MDQwMjAwMDksIDB4NTkzNDIyMDAsIDB4NTljYzEwMDcsIDB4ODAwODExYzAsCiAJMHgwNDAwMDAwMywgMHg0ODBhNjgwMSwgMHg4NDEwMjU0MiwgMHg4NDEwMjUxYSwKIAkweDQ4MTI2YTAwLCAweDVjMDBiMDAwLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLAotCTB4MDAxMGI4N2IsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmM1NSwgMHg1OTMwMDIwMywgMHg0OTMzYzg1NywgMHg0ODAzYzg1NywKLQkweDgyMDAwYzgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4MGMwMWY4MDMsIDB4MDIwMWYwMDAsIDB4MDAxMDZjNGIsIDB4MDAxMDk3MGIsCi0JMHgwMDEwOTcxYSwgMHgwMDEwOTcwYywgMHgwMDEwOTcwOSwgMHgwMDEwOTcwOSwKLQkweDAwMTA5NzA5LCAweDAwMTA5NzA5LCAweDAwMTA5NzA5LCAweDAwMTA5NzA5LAotCTB4MDAxMDk3MDksIDB4MDAxMDk3MDksIDB4MDAxMDk3MDksIDB4MDAxMDk3MDksCi0JMHgwMDEwOTcwOSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHgxYzAxZjAwMCwKKwkweDAwMTBiNjdhLCAweDAyMDFmODAwLCAweDAwMTBhODZlLCAweDAyMDFmODAwLAorCTB4MDAxMDY5OGMsIDB4NTkzMDAyMDMsIDB4NDkzM2M4NTcsIDB4NDgwM2M4NTcsCisJMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwKKwkweDBjMDFmODAzLCAweDAyMDFmMDAwLCAweDAwMTA2OTgyLCAweDAwMTA5NGQ3LAorCTB4MDAxMDk0ZTYsIDB4MDAxMDk0ZDgsIDB4MDAxMDk0ZDUsIDB4MDAxMDk0ZDUsCisJMHgwMDEwOTRkNSwgMHgwMDEwOTRkNSwgMHgwMDEwOTRkNSwgMHgwMDEwOTRkNSwKKwkweDAwMTA5NGQ1LCAweDAwMTA5NGQ1LCAweDAwMTA5NGQ1LCAweDAwMTA5NGQ1LAorCTB4MDAxMDk0ZDUsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4MWMwMWYwMDAsCiAJMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA1MiwgMHgwMjAwMDAwMCwKLQkweDAwMTA4ZDg1LCAweDAyMDFmODAwLCAweDAwMTA0YzE5LCAweDU5MzI1ODA4LAotCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNzkxMSwgMHg1OTMwMTgwNCwgMHg4NDBjMDUyMCwKKwkweDAwMTA4YjM5LCAweDAyMDFmODAwLCAweDAwMTA0YTgzLCAweDU5MzI1ODA4LAorCTB4NGEwMjVhMDYsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsCisJMHgwMjAxZjAwMCwgMHgwMDEwNzY5OCwgMHg1OTMwMTgwNCwgMHg4NDBjMDUyMCwKIAkweDQ4MDI2MDA0LCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLCAweDA0MDIwMDEwLAotCTB4OGMwYzFkMjAsIDB4MDQwMjAwMTAsIDB4NDIwMDEwMDAsIDB4MDAxMGI3ZjYsCisJMHg4YzBjMWQyMCwgMHgwNDAyMDAxMCwgMHg0MjAwMTAwMCwgMHgwMDEwYjVmNCwKIAkweDUwMDgxMDAwLCAweDU4MDgwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMTAwLAogCTB4MDQwMDAwMGUsIDB4NTgwODAwMGMsIDB4ODEzMDA1ODAsIDB4MDIwMjA4MDAsCi0JMHgwMDEwMDVkOCwgMHg0OTc4MTAwYywgMHgwNDAxZjAwMywgMHg4YzBjMWQyMCwKLQkweDA0MDIwN2RjLCAweDAyMDFmODAwLCAweDAwMTA2OGQzLCAweDA0MDAwN2Q5LAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDZlOGUsCisJMHgwMDEwMDYxNSwgMHg0OTc4MTAwYywgMHgwNDAxZjAwMywgMHg4YzBjMWQyMCwKKwkweDA0MDIwN2RjLCAweDAyMDFmODAwLCAweDAwMTA2NjE5LCAweDA0MDAwN2Q5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4MDIwMWY4MDAsIDB4MDAxMDZiZTIsCiAJMHgwNDAwMDdmOSwgMHg1OTMwMDIwMywgMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwKLQkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmN2JkLCAweDQ5MzNjODU3LAorCTB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWY3YmQsIDB4NDkzM2M4NTcsCiAJMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0YzU4MDAwMCwgMHg1OTJjMGMwNywKIAkweDQ4MDY1ODBhLCAweDU5Y2MwODA5LCAweDQ4MDY1ODA3LCAweDU5Y2MwYTA4LAotCTB4NDgwNjU4MGIsIDB4NTljODA4MTcsIDB4ODIwNDA1MDAsIDB4MDAwMDAzZmYsCisJMHg0ODA2NTgwYiwgMHg1OWE4MDg2ZSwgMHg4MjA0MDUwMCwgMHgwMDAwMDNmZiwKIAkweDgwMDAxMGM0LCAweDhjMDQwZDE0LCAweDA0MDAwMDA1LCAweDU5Y2MwMDAyLAogCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsIDB4ODAwODE0ODAsIDB4ODIwODA0ODAsCi0JMHgwMDAwMDBmMSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg0ODBhNjIxYSwKLQkweDQxMmMwODAwLCAweDAyMDFmODAwLCAweDAwMTAwN2QzLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4NDkyYzA4MDksIDB4NTgwNDA0MDgsIDB4ODQwMDA1NTIsCisJMHgwMDAwMDBmMSwgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHg0ODBhNjIxYSwKKwkweDQxMmMwODAwLCAweDAyMDFmODAwLCAweDAwMTAwODE5LCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NDkyYzA4MDksIDB4NTgwNDA0MDgsIDB4ODQwMDA1NTIsCiAJMHg4NDAwMDU0MCwgMHg0ODAwMGMwOCwgMHg4MjA4MTQwMCwgMHgwMDAwMDAwMywKIAkweDgwMDgxMTA0LCAweDgzY2NhNDAwLCAweDAwMDAwMDA2LCAweDgzMmNhYzAwLAogCTB4MDAwMDAwMDQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMTAsIDB4ODIwODA0ODAsCiAJMHgwMDAwMDAxMCwgMHgwNDAyMTAwMywgMHg0MDA4MDgwMCwgMHg4MDAwMDU4MCwKLQkweDQwMDRiMDAwLCAweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTBhYjI4LAorCTB4NDAwNGIwMDAsIDB4NGMwMDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE5NGYsCiAJMHg1YzAwMDAwMCwgMHg4MDAwMDFjMCwgMHgwNDAwMDAwZCwgMHg0MTJjMTAwMCwKLQkweDRjMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2QzLCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4NDkyYzEwMDEsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDQsCisJMHg0YzAwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDgxOSwgMHgwMjAwMDgwMCwKKwkweDAwMTAwNjE1LCAweDQ5MmMxMDAxLCAweDgzMmNhYzAwLCAweDAwMDAwMDA0LAogCTB4NWMwMDAwMDAsIDB4NDAwMDEwMDAsIDB4MDQwMWY3ZTksIDB4NWMwMGIwMDAsCiAJMHg1YzAwYTgwMCwgMHg1YzAwYTAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKIAkweDRkMmMwMDAwLCAweDRjMzgwMDAwLCAweDU5MzI1ODA4LCAweDU5MzAwMjFhLApAQCAtOTc0Myw3ICs5NjAyLDcgQEAKIAkweDAwMDAwYzAwLCAweDA0MDAwMDBiLCAweDA0MDFmMDBiLCAweDhjMDgxNTNlLAogCTB4MDQwMDAwMDYsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDcsIDB4ODAwODEwODAsCiAJMHg4MDA4MTAwMCwgMHgwNDAxZjAwMywgMHg0YTAyNWEwNiwgMHgwMDAwMDAxNSwKLQkweDQ4MGE1ODA3LCAweDQyMDAwMDAwLCAweDAwMTBiZWQ5LCAweDUwMDA3MDAwLAorCTB4NDgwYTU4MDcsIDB4NDIwMDAwMDAsIDB4MDAxMGJjZDgsIDB4NTAwMDcwMDAsCiAJMHg1ODM4MDAwYiwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwOCwgMHg0OTMwNzAwYywKIAkweDQ5MzA3MDBiLCAweDU4MzgwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLAogCTB4MDQwMjA4MDksIDB4MDQwMWYwMDUsIDB4ODIwMDE0MDAsIDB4MDAwMDAwMDAsCkBAIC05NzU2LDYxMyArOTYxNSw2MjIgQEAKIAkweDgyMDgwNDgwLCAweDAwMDAwMDEwLCAweDA0MDIxMDAzLCAweDgwMDAwNTgwLAogCTB4MDQwMWYwMDMsIDB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4NDgwMDcwMGQsCiAJMHg0ODA4NzAwNCwgMHg4MDA4MTBjNCwgMHg0ODA4NzAwNSwgMHg0MDM4MTAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwODU4LCAweDFjMDFmMDAwLCAweDRkMmMwMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZDMsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0MjAwMDgwMCwgMHgwMDEwYmVkOSwgMHg0NTJjMDgwMCwgMHg0OTdhNTgwYiwKLQkweDQ5N2E1ODBjLCAweDQ5N2E1ODBkLCAweDRhMDI1ODA5LCAweDAwMTA5N2VhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4YTEsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDgxOSwgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKKwkweDQyMDAwODAwLCAweDAwMTBiY2Q4LCAweDQ1MmMwODAwLCAweDQ5N2E1ODBiLAorCTB4NDk3YTU4MGMsIDB4NDk3YTU4MGQsIDB4NGEwMjU4MDksIDB4MDAxMDk1YjYsCiAJMHg0YTAyNTgwMiwgMHgwMDAwMDEwMCwgMHg0YTAyNTgwMSwgMHgwMDAwMDAwMCwKIAkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDQ4MzNjODU3LCAweDRkMzAwMDAwLAogCTB4NGQyYzAwMDAsIDB4NGM1YzAwMDAsIDB4NDAzMGI4MDAsIDB4NTg1YzAwMGEsCiAJMHg4MDAyNWQ0MCwgMHgwNDAyMDAwNCwgMHg1ODVjMDAwYywgMHg0YzAwMDAwMCwKIAkweDA0MDFmMDQ0LCAweDU4NWMwMDAyLCAweDgyMDAwNTgwLCAweDAwMDAwMTAwLAogCTB4MDQwMjAwMjIsIDB4NTkyYzA4MDEsIDB4NGMwNDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDdmNCwgMHg1YzAwMDgwMCwgMHg4MDA0MDljMCwgMHgwNDAwMDAxYywKKwkweDAwMTAwODNhLCAweDVjMDAwODAwLCAweDgwMDQwOWMwLCAweDA0MDAwMDFjLAogCTB4NDgwNGI4MGEsIDB4NTg1YzEwMGQsIDB4ODAwODExYzAsIDB4MDQwMjAwMDUsCi0JMHg0MDA2NTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHgwNDAxZjAxNCwKKwkweDQwMDY1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwODQzLCAweDA0MDFmMDE0LAogCTB4ODIwODA0ODAsIDB4MDAwMDAwMTAsIDB4MDQwMjEwMDMsIDB4ODAwMDA1ODAsCiAJMHgwNDAxZjAwMywgMHg0MjAwMTAwMCwgMHgwMDAwMDAxMCwgMHg0ODAwYjgwZCwKIAkweDQ4MDhiODA0LCAweDgwMDgxMGM0LCAweDQ4MDhiODA1LCAweDgyMDQwNDAwLAogCTB4MDAwMDAwMDQsIDB4NDgwMGI4MDMsIDB4NDA1YzEwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDg1OCwgMHgwNDAxZjAyNSwgMHgwNDAxZjgyOCwgMHg1ODVjMDAwYywKKwkweDAwMTAwOGExLCAweDA0MDFmMDI1LCAweDA0MDFmODI4LCAweDU4NWMwMDBjLAogCTB4ODAwMjY1NDAsIDB4NTkzMDAwMDAsIDB4ODAwMDBkNDAsIDB4MDQwMjAwMDIsCiAJMHg0ODAwYjgwYiwgMHg0ODAwYjgwYywgMHg0OTdhNjAwMCwgMHg0YzAwMDAwMCwKIAkweDQ5NzhiODBhLCAweDU5MzI1ODA4LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAogCTB4NTkzMDA0MDIsIDB4NDgwMjVjMDYsIDB4NTkyYzEwMGIsIDB4NGMwODAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDJjMSwgMHgwMjAxZjgwMCwgMHgwMDEwOTEyYSwKKwkweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA4ZWU3LAogCTB4NWMwMDEwMDAsIDB4OGMwODE1MTgsIDB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTFkMSwgMHgwNDAxZjAwMywgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwKKwkweDAwMTA4Zjg4LCAweDA0MDFmMDAzLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LAogCTB4NDA1YzcwMDAsIDB4NWMwMDAwMDAsIDB4ODAwMjY1NDAsIDB4MDQwMDAwMDMsCiAJMHg1OTMyNTgwOCwgMHgwNDAxZmY3OCwgMHg1YzAwYjgwMCwgMHg1YzAyNTgwMCwKIAkweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ4M2JjODU3LCAweDU4MzgwMDBhLAotCTB4NDAwMjU4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4NTgzODAwMGMsCisJMHg0MDAyNTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMDg0MywgMHg1ODM4MDAwYywKIAkweDgwMDI2NTQwLCAweDU5MzAwMDA4LCAweDgwMDI1ZDQwLCAweDRhMDI1YTA2LAogCTB4MDAwMDAwMDIsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsIDB4NGQxYzAwMDAsCiAJMHg0OTdhNjAxYywgMHg0MTMyMzgwMCwgMHg0MDAyNjAwMCwgMHg0ZDNjMDAwMCwKLQkweDQyMDI3ODAwLCAweDAwMDAwMDA1LCAweDA0MDFmODNjLCAweDVjMDI3ODAwLAorCTB4NDIwMjc4MDAsIDB4MDAwMDAwMDUsIDB4MDQwMWY4NDAsIDB4NWMwMjc4MDAsCiAJMHg0MTFlNjAwMCwgMHg1OTMwMDQxNCwgMHg4NDAwMDUwMiwgMHg0ODAyNjQxNCwKIAkweDVjMDIzODAwLCAweDFjMDFmMDAwLCAweDQ4MWJjODU3LCAweDQ5MzNjODU3LAogCTB4NGM1YzAwMDAsIDB4NGM2MDAwMDAsIDB4NDAxMGI4MDAsIDB4NDAxNGMwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYTk0MiwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwKKwkweDAyMDFmODAwLCAweDAwMTBhNzY2LCAweDAyMDFmODAwLCAweDAwMTAzOTNlLAogCTB4MDQwMDAwMDgsIDB4NDA2MDI4MDAsIDB4NDA1YzMwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYTQ0NiwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjAwMiwKKwkweDAwMTBhMjU4LCAweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLAogCTB4ODAwMDA1ODAsIDB4NWMwMGMwMDAsIDB4NWMwMGI4MDAsIDB4MWMwMWYwMDAsCi0JMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwgMHg0MjAyNjAwMCwgMHgwMDEwZDFjMCwKLQkweDU5YTgwMDBlLCAweDgxNjQwNTgwLCAweDA0MDAwMDE2LCAweDU5MzAwYzA2LAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMDksIDB4ODIwNDA1ODAsCisJMHg0ODAzYzg1NiwgMHg0ZDMwMDAwMCwgMHg0MjAyNjAwMCwgMHgwMDEwY2ZjMCwKKwkweDU5YTgwMDBlLCAweDgxNjQwNTgwLCAweDA0MDAwMDFhLCAweDU5MzAwYzA2LAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDAwMGQsIDB4ODIwNDA1ODAsCiAJMHgwMDAwMDAwNCwgMHgwNDAwMDAwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwKLQkweDAyMDAwODAwLCAweDAwMTA4Y2Y5LCAweDA0MDFmMDA1LCAweDQ4MDdjODU3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDkyZDcsIDB4MDQwMjA4MDgsIDB4ODMzMjY0MDAsCi0JMHgwMDAwMDAyNCwgMHg0MTU4MDAwMCwgMHg4MTMwMDQ4MCwgMHgwNDAwMTdlOSwKKwkweDAyMDAwODAwLCAweDAwMTA4YWFkLCAweDA0MDFmMDA5LCAweDU5MzAwMjAzLAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMDcsIDB4MDQwMDAwMDUsIDB4NDgwN2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTA5ZCwgMHgwNDAyMDgwOCwgMHg4MzMyNjQwMCwKKwkweDAwMDAwMDI0LCAweDQxNTgwMDAwLCAweDgxMzAwNDgwLCAweDA0MDAxN2U1LAogCTB4NWMwMjYwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTkzMDA0MDMsCi0JMHg0ODAzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNmM1NSwgMHg0ZGYwMDAwMCwKKwkweDQ4MDNjODU3LCAweDAyMDFmODAwLCAweDAwMTA2OThjLCAweDRkZjAwMDAwLAogCTB4NTkzMDA0MDYsIDB4NDgwM2M4NTcsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDIsCiAJMHgwNDAwMDAxOCwgMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMSwgMHgwNDAwMDAwOSwKIAkweDgyMDAwZDgwLCAweDAwMDAwMDA0LCAweDA0MDAwMDA2LCAweDQ5MzNjODU2LAotCTB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDZjNGIsIDB4MDQwMWYwM2MsCisJMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHgwNDAxZjAzYywKIAkweDU5MzAwMjAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDAxLCAweDA0MDAwMDE4LAogCTB4ODIwMDBkODAsIDB4MDAwMDAwMDIsIDB4MDQwMDAwMjYsIDB4ODIwMDBkODAsCi0JMHgwMDAwMDAwNSwgMHgwNDAwMDAyMywgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKKwkweDAwMDAwMDA1LCAweDA0MDAwMDIzLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAogCTB4NTkzMDAyMDMsIDB4ODIwMDBkODAsIDB4MDAwMDAwMDksIDB4MDQwMDAwMGMsCiAJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwYiwgMHgwNDAwMDAwOSwgMHg4MjAwMGQ4MCwKIAkweDAwMDAwMDBhLCAweDA0MDAwMDE3LCAweDgyMDAwZDgwLCAweDAwMDAwMDBjLAotCTB4MDQwMDAwMTQsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTk4YzAwMGQsCi0JMHg4MTMwMDU4MCwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmU4ZSwKKwkweDA0MDAwMDE0LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDU5OGMwMDBkLAorCTB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDZiZTIsCiAJMHgwNDAyMDAwYywgMHg1OTMwMDAwNCwgMHg0ODAzYzg1NywgMHg4YzAwMDUyMCwKIAkweDA0MDAwMDA0LCAweDg0MDAwNTIwLCAweDQ4MDI2MDA0LCAweDA0MDFmMDA1LAotCTB4MDIwMWY4MDAsIDB4MDAxMDY4ZDMsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCi0JMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwgMHg1OTMwMDQwNiwKKwkweDAyMDFmODAwLCAweDAwMTA2NjE5LCAweDAyMDIwODAwLCAweDAwMTAwNjE1LAorCTB4NWMwM2UwMDAsIDB4MDIwMDA4MDAsIDB4MDAxMDY5ODIsIDB4NTkzMDA0MDYsCiAJMHg4MjAwMGQ4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDAwOSwgMHgwMjAxZjgwMCwKLQkweDAwMTA0YzE5LCAweDAyMDFmODAwLCAweDAwMTA5MTRlLCAweDAyMDAwODAwLAotCTB4MDAxMDgwMWMsIDB4OGQzZTdkMDAsIDB4MDQwMDAwMDMsIDB4MDIwMWYwMDAsCi0JMHgwMDEwNzkxMSwgMHg0YTAyNjIxZCwgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywKKwkweDAwMTA0YTgzLCAweDAyMDFmODAwLCAweDAwMTA4ZjA1LCAweDAyMDAwODAwLAorCTB4MDAxMDdkYTYsIDB4OGQzZTdkMDAsIDB4MDQwMDAwMDMsIDB4MDIwMWYwMDAsCisJMHgwMDEwNzY5OCwgMHg0YTAyNjIxZCwgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywKIAkweDAwMDAwMDg1LCAweDRhMDI2MjAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDA2LAogCTB4MDAwMDAwMDIsIDB4NDIwMDA4MDAsIDB4ODAwMDAwNGIsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDcyMSwgMHg0OTMzYzg1NywgMHg1OTM2OGMwMywgMHg0YzE4MDAwMCwKKwkweDAwMDIwODU1LCAweDQ5MzNjODU3LCAweDU5MzY4YzAzLCAweDRjMTgwMDAwLAogCTB4NTkzMDAyMDMsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsCi0JMHgwMDEwMDVkOCwgMHgwYzAxZjgwMywgMHg1YzAwMzAwMCwgMHgxYzAxZjAwMCwKLQkweDAwMTA5OTBhLCAweDAwMTA5ZGNmLCAweDAwMTA5ZWRiLCAweDAwMTA5OTBhLAotCTB4MDAxMDk5MGEsIDB4MDAxMDk5MGEsIDB4MDAxMDk5MGEsIDB4MDAxMDk5MGEsCi0JMHgwMDEwOTkyZCwgMHgwMDEwOTkwYSwgMHgwMDEwOTkwYSwgMHgwMDEwOTkwYSwKLQkweDAwMTA5OTBhLCAweDAwMTA5OTBhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAorCTB4MDAxMDA2MTUsIDB4MGMwMWY4MDMsIDB4NWMwMDMwMDAsIDB4MWMwMWYwMDAsCisJMHgwMDEwOTZkYSwgMHgwMDEwOWJiOSwgMHgwMDEwOWNiZCwgMHgwMDEwOTZkYSwKKwkweDAwMTA5NmRhLCAweDAwMTA5NmRhLCAweDAwMTA5NmRhLCAweDAwMTA5NmRhLAorCTB4MDAxMDk2ZmQsIDB4MDAxMDk2ZGEsIDB4MDAxMDk2ZGEsIDB4MDAxMDk2ZGEsCisJMHgwMDEwOTZkYSwgMHgwMDEwOTZkYSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwKIAkweDQ5MzNjODU3LCAweDQyMDI4ODAwLCAweDAwMDBmZmZmLCAweDgxMzY2OWMwLAogCTB4MDQwMDAwMDIsIDB4NTkzNjhjMDMsIDB4NGMxODAwMDAsIDB4NTkzMDAyMDMsCi0JMHg4MjAwMzQ4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwKLQkweDBjMDFmODAzLCAweDVjMDAzMDAwLCAweDFjMDFmMDAwLCAweDAwMTA5OTI5LAotCTB4MDAxMGExODAsIDB4MDAxMDk5MjksIDB4MDAxMDk5MjksIDB4MDAxMDk5MjksCi0JMHgwMDEwOTkyOSwgMHgwMDEwOTkyOSwgMHgwMDEwYTk1MiwgMHgwMDEwYTBlZCwKLQkweDAwMTBhNTJjLCAweDAwMTBhNTYyLCAweDAwMTBhNTJjLCAweDAwMTBhNTYyLAotCTB4MDAxMDk5MjksIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDVkOCwgMHg4MzM4MzQ4MCwgMHgwMDAwMDA1MSwgMHgwMjAyMTgwMCwKLQkweDAwMTAwNWQ4LCAweDQxMzgwMDAwLCAweDQ5M2JjODU3LCAweDRkMWMwMDAwLAorCTB4ODIwMDM0ODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHgwYzAxZjgwMywgMHg1YzAwMzAwMCwgMHgxYzAxZjAwMCwgMHgwMDEwOTZmOSwKKwkweDAwMTA5ZjcwLCAweDAwMTA5NmY5LCAweDAwMTA5NmY5LCAweDAwMTA5NmY5LAorCTB4MDAxMDk2ZjksIDB4MDAxMDk2ZjksIDB4MDAxMGE3NzksIDB4MDAxMDllZGQsCisJMHgwMDEwYTM0YSwgMHgwMDEwYTM4MCwgMHgwMDEwYTM0YSwgMHgwMDEwYTM4MCwKKwkweDAwMTA5NmY5LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4ODMzODM0ODAsIDB4MDAwMDAwNTEsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDYxNSwgMHg0MTM4MDAwMCwgMHg0OTNiYzg1NywgMHg0ZDFjMDAwMCwKIAkweDRkNDAwMDAwLCAweDBjMDFmODA0LCAweDVjMDI4MDAwLCAweDVjMDIzODAwLAotCTB4MWMwMWYwMDAsIDB4MDAxMDk5OGEsIDB4MDAxMDliNjksIDB4MDAxMDk5OGEsCi0JMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOWI3NCwgMHgwMDEwOTk4YSwKLQkweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLAotCTB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsCi0JMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwKLQkweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThhLAotCTB4MDAxMDk5YWMsIDB4MDAxMDk5ZjUsIDB4MDAxMDlhMGMsIDB4MDAxMDlhNjIsCi0JMHgwMDEwOWFjNiwgMHgwMDEwOWIwNCwgMHgwMDEwOWIzNCwgMHgwMDEwOTk4YSwKLQkweDAwMTA5OThhLCAweDAwMTA5YjdjLCAweDAwMTA5OThhLCAweDAwMTA5OThhLAotCTB4MDAxMDliOGEsIDB4MDAxMDliOTMsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsCi0JMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOWMxNSwKLQkweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5YTlhLCAweDAwMTA5OThhLAotCTB4MDAxMDk5OGEsIDB4MDAxMDliZWMsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsCi0JMHgwMDEwOTk4YSwgMHgwMDEwOWMyMywgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwKLQkweDAwMTA5OThhLCAweDAwMTA5YzZjLCAweDAwMTA5OThhLCAweDAwMTA5OThhLAotCTB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsCi0JMHgwMDEwOWNiOSwgMHgwMDEwOTk4YSwgMHgwMDEwOWNlNSwgMHgwMDEwOWNmMCwKLQkweDAwMTA5OThhLCAweDAwMTA5OThhLCAweDAwMTA5OThjLCAweDAwMTA5Y2ZiLAotCTB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OGEsIDB4MDAxMDk5OWIsCi0JMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOTk4YSwgMHgwMDEwOWQwMiwKLQkweDAwMTA5ZDBhLCAweDAwMTA5ZDI4LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAotCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMGE1OTIsIDB4MDQwMjAzYTQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwNDAyMDNhMSwgMHg1OWNjMDQwNywKKwkweDFjMDFmMDAwLCAweDAwMTA5NzVhLCAweDAwMTA5OTNkLCAweDAwMTA5NzVhLAorCTB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsIDB4MDAxMDk5NDgsIDB4MDAxMDk3NWEsCisJMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwKKwkweDAwMTA5NzVhLCAweDAwMTA5NzVhLCAweDAwMTA5NzVhLCAweDAwMTA5NzVhLAorCTB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsCisJMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwKKwkweDAwMTA5NzdjLCAweDAwMTA5N2JhLCAweDAwMTA5N2QxLCAweDAwMTA5ODJkLAorCTB4MDAxMDk4OTQsIDB4MDAxMDk4ZDIsIDB4MDAxMDk5MDIsIDB4MDAxMDk3NWEsCisJMHgwMDEwOTc1YSwgMHgwMDEwOTk1MCwgMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwKKwkweDAwMTA5OTVlLCAweDAwMTA5OTY3LCAweDAwMTA5NzVhLCAweDAwMTA5NzVhLAorCTB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsIDB4MDAxMDk5ZTksCisJMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwgMHgwMDEwOTg2OCwgMHgwMDEwOTc1YSwKKwkweDAwMTA5NzVhLCAweDAwMTA5OWMwLCAweDAwMTA5NzVhLCAweDAwMTA5NzVhLAorCTB4MDAxMDk3NWEsIDB4MDAxMDk5ZjcsIDB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsCisJMHgwMDEwOTc1YSwgMHgwMDEwOWE0MCwgMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwKKwkweDAwMTA5NzVhLCAweDAwMTA5NzVhLCAweDAwMTA5NzVhLCAweDAwMTA5NzVhLAorCTB4MDAxMDlhOGQsIDB4MDAxMDk3NWEsIDB4MDAxMDlhYjksIDB4MDAxMDlhYzQsCisJMHgwMDEwOTc1YSwgMHgwMDEwOTc1YSwgMHgwMDEwOTc1YywgMHgwMDEwOWFjZiwKKwkweDAwMTA5NzVhLCAweDAwMTA5NzVhLCAweDAwMTA5NzVhLCAweDAwMTA5NzZiLAorCTB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsIDB4MDAxMDk3NWEsIDB4MDAxMDlhZDYsCisJMHgwMDEwOWFkZSwgMHgwMDEwOWFmYywgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwKKwkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTBhM2IwLCAweDA0MDIwM2E4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDFlYjAsIDB4MDQwMjAzYTUsIDB4NTljYzA0MDcsCiAJMHg0ODAyNjAxYywgMHg0YTAyNjQwMywgMHgwMDAwMDA0NSwgMHg0YTAyNjIwMywKLQkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDQ5MzNjODU3LAotCTB4MDIwMWY4MDAsIDB4MDAxMGE1OTIsIDB4MDQwMjAzOTUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMjEwYSwgMHgwNDAyMDM5MiwgMHgwNDAxZmJjZSwgMHgwNDAyMDFhMCwKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NDcwLCAweDQ5MzNjODU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMGEzYjAsIDB4MDQwMjAzOTksIDB4MDIwMWY4MDAsCisJMHgwMDEwMWViMCwgMHgwNDAyMDM5NiwgMHgwNDAxZmJkNiwgMHgwNDAyMDE5ZSwKIAkweDU5Y2MwMDA3LCAweDQ4MDI2MDFjLCAweDRhMDI2NDAzLCAweDAwMDAwMDRhLAotCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsCi0JMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwNDAyMDAwOSwKLQkweDAyMDFmODAwLCAweDAwMTA0OGVjLCAweDA0MDIwMDA2LCAweDgyMDAwNTAwLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDY0NzAsCisJMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMWViMCwgMHgwNDAyMDAwOSwKKwkweDAyMDFmODAwLCAweDAwMTA0NzNiLCAweDA0MDIwMDA2LCAweDgyMDAwNTAwLAogCTB4MDAwMDAwMDksIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDgsIDB4MDQwMjAwMDgsCiAJMHg0YTAyNjQwMywgMHgwMDAwMDAwOSwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwOSwKLQkweDRhMDI2MjFhLCAweDAwMDAwMDAwLCAweDA0MDFmMWIyLCAweDAyMDFmODAwLAotCTB4MDAxMDQ4YzEsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMDksIDB4MDQwMDAwMjEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDllZCwgMHgwNDAwMDAxZSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhMjUyLCAweDA0MDIwMDI1LCAweDQyMDI4MDAwLCAweDAwMDAwMDI5LAotCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsCi0JMHg1YzAyNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDYyYSwgMHg4MzZjMDU4MCwKLQkweDAwMDAwMDAyLCAweDA0MDIwMDA0LCAweDU5YTgwMDFiLCAweDgwMDAwMDAwLAotCTB4NDgwMzUwMWIsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDgsIDB4NDIwMDMwMDAsCi0JMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDE5MSwKLQkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQxNzgyODAwLCAweDA0MDFmMTgwLAotCTB4MDIwMWY4MDAsIDB4MDAxMGEzZGEsIDB4MDQwMjA3ZTEsIDB4NGEwMjY0MDMsCi0JMHgwMDAwMDAwOSwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwZSwgMHg0YTAyNjIxYSwKLQkweDAwMDAxOTAwLCAweDA0MDFmMTgzLCAweDRhMDI2NDAzLCAweDAwMDAwMDA5LAotCTB4NGEwMjY0MWEsIDB4MDAwMDAwMDMsIDB4NGEwMjYyMWEsIDB4MDAwMDBmMDAsCi0JMHgwNDAxZjE3YywgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwKLQkweDA0MDIwMzNiLCAweDAyMDFmODAwLCAweDAwMTA0OGVjLCAweDA0MDIwMzM4LAotCTB4NDkzYTY0MDMsIDB4MDIwMWY4MDAsIDB4MDAxMGEyMmQsIDB4MDQwMjAwMDYsCi0JMHg0MjAwMzAwMCwgMHgwMDAwMDAwNSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwNiwKLQkweDA0MDFmN2Q5LCAweDRhMDI2NDAzLCAweDAwMDAwMDA3LCAweDRhMDI2NDFhLAotCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsIDB4MDQwMWYxNjUsCi0JMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNDhlYywgMHgwNDAyMDMyNCwKLQkweDAyMDFmODAwLCAweDAwMTBhNTkyLCAweDAyMDAwODAwLCAweDAwMTAyMTBhLAotCTB4MDQwMjAzMWYsIDB4MDIwMWY4MDAsIDB4MDAxMDRhMDksIDB4MDQwMjAwMDUsCi0JMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywKLQkweDAyMDFmODAwLCAweDAwMTA0OWZjLCAweDA0MDIwMDJiLCAweDU5Y2MwMjA2LAotCTB4ODIwMDM1MDAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMmUsIDB4ODIwMDM0ODAsCi0JMHgwMDAwMDAxNCwgMHgwNDAwMTAyYiwgMHg1OTM0MzAwYSwgMHg4NDE4MzUxNiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDE0LCAweDA0MDIwMDAyLCAweDg0MTgzNTU2LAotCTB4NDgxYTY4MGEsIDB4NTljYzA0MDYsIDB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsCi0JMHgwNDAyMDAyMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTI5ZiwgMHgwNDAyMDAyOCwKLQkweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDA0MDIwMDBjLCAweDQxN2E3ODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDIwYTEsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYTkzYSwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NSwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDAyMDFmODAwLCAweDAwMTA0NjhkLAotCTB4NGEwMjY0MDMsIDB4MDAwMDAwMGEsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMjAsCi0JMHgwNDAxZjc5NSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwYiwgMHg0YTAyNjQxYSwKLQkweDAwMDAwMDA5LCAweDRhMDI2MjFhLCAweDAwMDAxZTAwLCAweDA0MDFmMTIxLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4NjAsIDB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsCi0JMHg0YTAyNjQwMywgMHgwMDAwMDAwYiwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwNywKLQkweDRhMDI2MjFhLCAweDAwMDAwMDAwLCAweDA0MDFmMTE2LCAweDRhMDI2NDAzLAotCTB4MDAwMDAwMGIsIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDMsIDB4NGEwMjYyMWEsCi0JMHgwMDAwMDAwMCwgMHgwNDAxZjEwZiwgMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwKLQkweDAwMTA0OGVjLCAweDA0MDIwMmNlLCAweDAyMDFmODAwLCAweDAwMTBhNTkyLAotCTB4MDQwMjAyY2IsIDB4MDIwMWY4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAyYzgsCi0JMHg1OWNjMDIwNiwgMHg4MjAwMzUwMCwgMHgwMDAwMDAwMywgMHgwNDAyMDAxZCwKLQkweDgyMDAzNDgwLCAweDAwMDAwMDE0LCAweDA0MDAxMDFhLCAweDU5Y2MwNDA2LAotCTB4ODIwMDA1MDAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMTYsIDB4NTkzNDA0MDAsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDcwNywgMHgwNDAwMDAxOSwgMHg0MTdhNzgwMCwKLQkweDAyMDFmODAwLCAweDAwMTAyMGExLCAweDQyMDAzMDAwLCAweDAwMDAwMDBhLAotCTB4MDIwMWY4MDAsIDB4MDAxMGE5M2EsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0YTAyNjQwMywgMHgwMDAwMDAwYywKLQkweDQxNzgyODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDIxLCAweDA0MDFmNzUyLAotCTB4NGEwMjY0MDMsIDB4MDAwMDAwMGQsIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDcsCi0JMHg0YTAyNjIxYSwgMHgwMDAwMDAwMCwgMHgwNDAxZjBkZSwgMHg0YTAyNjQwMywKLQkweDAwMDAwMDBkLCAweDRhMDI2NDFhLCAweDAwMDAwMDA5LCAweDRhMDI2MjFhLAotCTB4MDAwMDFlMDAsIDB4MDQwMWYwZDcsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDhlYywgMHgwNDAyMDI5NiwgMHgwMjAxZjgwMCwgMHgwMDEwYTU5MiwKLQkweDA0MDIwMjkzLCAweDAyMDFmODAwLCAweDAwMTAyMTBhLCAweDA0MDIwMjkwLAotCTB4MDQwMWZhY2MsIDB4MDQwMjAwMWEsIDB4NDkzYTY0MDMsIDB4NGM1YzAwMDAsCi0JMHgwNDAxZmFkMiwgMHgwNDAyMDAwZSwgMHg0YTAyNjQwMywgMHgwMDAwMDAyZSwKLQkweDQwNWMyODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDI0LCAweDAyMDFmODAwLAotCTB4MDAxMDNiMjUsIDB4MDQwMDAwMGMsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsCi0JMHg0MDVjMjgwMCwgMHg1YzAwYjgwMCwgMHgwNDAxZjBhZCwgMHg0YTAyNjQwMywKLQkweDAwMDAwMDBkLCAweDRhMDI2NDFhLCAweDAwMDAwMDA3LCAweDRhMDI2MjFhLAotCTB4MDAwMDAwMDAsIDB4NWMwMGI4MDAsIDB4MDQwMWYwYjIsIDB4NGEwMjY0MDMsCi0JMHgwMDAwMDAwZCwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwOSwgMHg0YTAyNjIxYSwKLQkweDAwMDAxZTAwLCAweDA0MDFmMGFiLCAweDQ5MzNjODU3LCAweDAyMDFmODAwLAotCTB4MDAxMDQ4ZWMsIDB4MDQwMjA2ZWYsIDB4NTlhODAwMjYsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAwOSwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwgMHgwNDAwMDZlOSwKLQkweDAyMDFmODAwLCAweDAwMTA0OWZjLCAweDA0MDIwMDJkLCAweDAyMDFmODAwLAotCTB4MDAxMGEyYTcsIDB4MDQwMjAwMDcsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMGUsCi0JMHg0MTc4MjgwMCwgMHg0MjAwMzAwMCwgMHgwMDAwMDA1MiwgMHgwNDAxZjcwMiwKLQkweDQ5MzNjODU3LCAweDQyMDAzMDAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAotCTB4MDAxMGE5NDIsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDU5MzQwMjAwLCAweDg0MDAwNTU4LAotCTB4NDgwMjZhMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwgMHgwNDAwMDA3NiwKLQkweDQyMDAzMDAwLCAweDAwMDAwMDA3LCAweDA0MDFmMDYyLCAweDQ5MzNjODU3LAotCTB4NGEwMjY0MDMsIDB4MDAwMDAwMGYsIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDMsCi0JMHg0YTAyNjIxYSwgMHgwMDAwMWUwMCwgMHgwNDAxZjA3MiwgMHg1OTM0MDQwMCwKLQkweDgyMDAwNTgwLCAweDAwMDAwNzAzLCAweDA0MDAwN2Y1LCAweDA0MDFmMDQwLAotCTB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4ZWMsIDB4MDQwMjAyMmMsCisJMHg0YTAyNjIxYSwgMHgwMDAwMDAwMCwgMHgwNDAxZjFiNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA0ODU4LCAweDA0MDAwMDE4LCAweDAyMDFmODAwLCAweDAwMTBhMDQxLAorCTB4MDQwMjAwMWYsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4NGQzYzAwMDAsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwgMHg1YzAyNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0NDgwLCAweDRhMDI2NDAzLCAweDAwMDAwMDA4LAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDM5M2UsCisJMHgwNDAwMDFhMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHg0MTc4MjgwMCwKKwkweDA0MDFmMThiLCAweDAyMDFmODAwLCAweDAwMTBhMWVjLCAweDA0MDIwN2U3LAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MWEsIDB4MDAwMDAwMGUsCisJMHg0YTAyNjIxYSwgMHgwMDAwMTkwMCwgMHgwNDAxZjE5MiwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDA5LCAweDRhMDI2NDFhLCAweDAwMDAwMDAzLCAweDRhMDI2MjFhLAorCTB4MDAwMDBmMDAsIDB4MDQwMWYxOGIsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwMWViMCwgMHgwNDAyMDM0YSwgMHgwMjAxZjgwMCwgMHgwMDEwNDczYiwKKwkweDA0MDIwMzQ3LCAweDQ5M2E2NDAzLCAweDAyMDFmODAwLCAweDAwMTBhMDFjLAorCTB4MDQwMjAwMDYsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDUsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwNiwgMHgwNDAxZjdkOSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwNywKKwkweDRhMDI2NDFhLCAweDAwMDAwMDA5LCAweDRhMDI2MjFhLCAweDAwMDAwMDAwLAorCTB4MDQwMWYxNzQsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ3M2IsCisJMHgwNDAyMDMzMywgMHgwMjAxZjgwMCwgMHgwMDEwYTNiMCwgMHgwMjAwMDgwMCwKKwkweDAwMTAxZWIwLCAweDA0MDIwMzJlLCAweDAyMDFmODAwLCAweDAwMTA0ODU4LAorCTB4MDQwMjAwMDUsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDNiZCwgMHgwMjAxZjgwMCwgMHgwMDEwNDg0YiwgMHgwNDAyMDAzMSwKKwkweDU5Y2MwMjA2LCAweDgyMDAzNTAwLCAweDAwMDAwMDAzLCAweDA0MDIwMDM0LAorCTB4ODIwMDM0ODAsIDB4MDAwMDAwMTQsIDB4MDQwMDEwMzEsIDB4NTkzNDMwMGEsCisJMHg4NDE4MzUxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxNCwgMHgwNDAyMDAwMiwKKwkweDg0MTgzNTU2LCAweDQ4MWE2ODBhLCAweDU5Y2MwNDA2LCAweDgyMDAwNTAwLAorCTB4MDAwMDAwMDMsIDB4MDQwMjAwMjYsIDB4MDIwMWY4MDAsIDB4MDAxMGEwOGUsCisJMHgwNDAyMDAyZSwgMHgwMjAxZjgwMCwgMHgwMDEwNDgzNiwgMHgwNDAyMDAwNywKKwkweDRjNjAwMDAwLCAweDQxNzhjMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAorCTB4MDAxMDFlNDgsIDB4NWMwMGMwMDAsIDB4ODM2YzA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAyMDAwOSwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwKKwkweDAwMTBhNzVlLCAweDQyMDAwMDAwLCAweDAwMTBiNjY0LCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4MDIwMWY4MDAsIDB4MDAxMDQ0ZTEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwYSwgMHg0MjAwMzAwMCwgMHgwMDAwMDAyMCwgMHgwNDAxZjc4ZiwKKwkweDRhMDI2NDAzLCAweDAwMDAwMDBiLCAweDRhMDI2NDFhLCAweDAwMDAwMDA5LAorCTB4NGEwMjYyMWEsIDB4MDAwMDFlMDAsIDB4MDQwMWYxMmEsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjY1ZiwgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDBiLCAweDRhMDI2NDFhLCAweDAwMDAwMDA3LCAweDRhMDI2MjFhLAorCTB4MDAwMDAwMDAsIDB4MDQwMWYxMWYsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMGIsCisJMHg0YTAyNjQxYSwgMHgwMDAwMDAwMywgMHg0YTAyNjIxYSwgMHgwMDAwMDAwMCwKKwkweDA0MDFmMTE4LCAweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA0NzNiLAorCTB4MDQwMjAyZDcsIDB4MDIwMWY4MDAsIDB4MDAxMGEzYjAsIDB4MDQwMjAyZDQsCisJMHgwMjAxZjgwMCwgMHgwMDEwMWViMCwgMHgwNDAyMDJkMSwgMHg1OWNjMDIwNiwKKwkweDgyMDAzNTAwLCAweDAwMDAwMDAzLCAweDA0MDIwMDIwLCAweDgyMDAzNDgwLAorCTB4MDAwMDAwMTQsIDB4MDQwMDEwMWQsIDB4NTljYzA0MDYsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDAwMywgMHgwNDAyMDAxOSwgMHg1OTM0MDQwMCwgMHg4MjAwMDU4MCwKKwkweDAwMDAwNzA3LCAweDA0MDAwMDFjLCAweDQxN2E3ODAwLCAweDRjNjAwMDAwLAorCTB4NDE3OGMwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDFlNDgsIDB4NWMwMGMwMDAsCisJMHg0MjAwMzAwMCwgMHgwMDAwMDAwYSwgMHgwMjAxZjgwMCwgMHgwMDEwYTc1ZSwKKwkweDQyMDAwMDAwLCAweDAwMTBiNjYxLCAweDAyMDFmODAwLCAweDAwMTBhODZlLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMGMsIDB4NDE3ODI4MDAsIDB4NDIwMDMwMDAsCisJMHgwMDAwMDAyMSwgMHgwNDAxZjc0OSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwZCwKKwkweDRhMDI2NDFhLCAweDAwMDAwMDA3LCAweDRhMDI2MjFhLCAweDAwMDAwMDAwLAorCTB4MDQwMWYwZTQsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMGQsIDB4NGEwMjY0MWEsCisJMHgwMDAwMDAwOSwgMHg0YTAyNjIxYSwgMHgwMDAwMWUwMCwgMHgwNDAxZjBkZCwKKwkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA0NzNiLCAweDA0MDIwMjljLAorCTB4MDIwMWY4MDAsIDB4MDAxMGEzYjAsIDB4MDQwMjAyOTksIDB4MDIwMWY4MDAsCisJMHgwMDEwMWViMCwgMHgwNDAyMDI5NiwgMHgwNDAxZmFkNiwgMHgwNDAyMDAxYSwKKwkweDQ5M2E2NDAzLCAweDRjNWMwMDAwLCAweDA0MDFmYWRjLCAweDA0MDIwMDBlLAorCTB4NGEwMjY0MDMsIDB4MDAwMDAwMmUsIDB4NDAxNGI4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwMzkzZSwgMHgwNDAwMDAwZSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywKKwkweDQwNWMyODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDI0LCAweDVjMDBiODAwLAorCTB4MDQwMWYwYWYsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMGQsIDB4NGEwMjY0MWEsCisJMHgwMDAwMDAwNywgMHg0YTAyNjIxYSwgMHgwMDAwMDAwMCwgMHg1YzAwYjgwMCwKKwkweDA0MDFmMGI4LCAweDRhMDI2NDAzLCAweDAwMDAwMDBkLCAweDRhMDI2NDFhLAorCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDFlMDAsIDB4MDQwMWYwYjEsCisJMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNDczYiwgMHgwNDAyMDZmMSwKIAkweDU5YTgwMDI2LCAweDgyMDAwNTAwLCAweDAwMDAwMDA5LCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDgsIDB4MDQwMDAyMjYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZjMsCi0JMHgwNDAyMDAyZiwgMHgwMjAxZjgwMCwgMHgwMDEwYTJjOCwgMHgwMjAwMDgwMCwKLQkweDAwMTBhMjUyLCAweDA0MDIwMDA3LCAweDRhMDI2NDAzLCAweDAwMDAwMDEwLAotCTB4NDE3ODI4MDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwNTAsIDB4MDQwMWY2YzIsCi0JMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywKLQkweDVjMDI3ODAwLCAweDQyMDAzMDAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAotCTB4MDAxMGE5NDIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWE0NywgMHg1OTM0MDIwMCwgMHg4NDAwMDU1OCwgMHg0ODAyNmEwMCwKLQkweDA0MDFmN2M1LCAweDRhMDI2NDAzLCAweDAwMDAwMDExLCAweDRhMDI2NDFhLAotCTB4MDAwMDAwMDMsIDB4NGEwMjYyMWEsIDB4MDAwMDFlMDAsIDB4MDQwMWYwM2QsCi0JMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwMjAwMDgwMCwKLQkweDAwMTBhNTkyLCAweDA0MDIwMWZhLCAweDA0MDFmYTM2LCAweDA0MDIwMDA4LAotCTB4NGEwMjY0MDMsIDB4MDAwMDAwMTIsIDB4MDQwMWYwMzIsIDB4NTkzNDA0MDAsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDcwMywgMHgwNDAwMDdlYiwgMHg0ZDNjMDAwMCwKLQkweDQxN2E3ODAwLCAweDQyMDI4MDAwLCAweDAwMDAwMDI5LCAweDAyMDFmODAwLAotCTB4MDAxMDIwM2MsIDB4NWMwMjc4MDAsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMTcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYTk0MiwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2NCwKLQkweDAyMDFmODAwLCAweDAwMTBhYTQ3LCAweDAyMDFmODAwLCAweDAwMTAzYjI1LAotCTB4MDQwMDAwMTUsIDB4NDIwMDMwMDAsIDB4MDAwMDAwMDYsIDB4NDE3ODI4MDAsCi0JMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwgMHg0OTMzYzg1NywgMHg0YTAyNjQwMywKLQkweDAwMDAwMDAxLCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDAyMDFmODAwLAotCTB4MDAxMGE5NzQsIDB4MDIwMWYwMDAsIDB4MDAxMGE0M2UsIDB4NDIwMjgwMDAsCi0JMHgwMDAwMDA0NiwgMHgwMjAxZjgwMCwgMHgwMDEwYTk3NCwgMHgwMjAxZjAwMCwKLQkweDAwMTBhNDNlLCAweDQ5MzNjODU3LCAweDRhMDI2NDAzLCAweDAwMDAwMDAxLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwKKwkweDAwMDAwMDA4LCAweDA0MDAwNmViLCAweDAyMDFmODAwLCAweDAwMTA0ODRiLAorCTB4MDQwMjAwMmQsIDB4MDIwMWY4MDAsIDB4MDAxMGEwOTYsIDB4MDQwMjAwMDcsCisJMHg0YTAyNjQwMywgMHgwMDAwMDAwZSwgMHg0MTc4MjgwMCwgMHg0MjAwMzAwMCwKKwkweDAwMDAwMDUyLCAweDA0MDFmNmY5LCAweDQ5MzNjODU3LCAweDQyMDAzMDAwLAorCTB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMGE3NjYsIDB4NGQzYzAwMDAsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwgMHg1YzAyNzgwMCwKKwkweDQyMDAwMDAwLCAweDAwMTBiNjYzLCAweDAyMDFmODAwLCAweDAwMTBhODZlLAorCTB4NTkzNDAyMDAsIDB4ODQwMDA1NTgsIDB4NDgwMjZhMDAsIDB4NDIwMDA4MDAsCisJMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHgwMjAxZjgwMCwKKwkweDAwMTAzOTNlLCAweDA0MDAwMDdjLCAweDQyMDAzMDAwLCAweDAwMDAwMDA3LAorCTB4MDQwMWYwNjEsIDB4NDkzM2M4NTcsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMGYsCisJMHg0YTAyNjQxYSwgMHgwMDAwMDAwMywgMHg0YTAyNjIxYSwgMHgwMDAwMWUwMCwKKwkweDA0MDFmMDc4LCAweDU5MzQwNDAwLCAweDgyMDAwNTgwLCAweDAwMDAwNzAzLAorCTB4MDQwMDA3ZjUsIDB4MDQwMWYwNDAsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDczYiwgMHgwNDAyMDIzMiwgMHg1OWE4MDAyNiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDA5LCAweDgyMDAwNTgwLCAweDAwMDAwMDA4LCAweDA0MDAwMjJjLAorCTB4MDIwMWY4MDAsIDB4MDAxMDQ4NDIsIDB4MDQwMjAwMmYsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTBiMSwgMHgwMjAwMDgwMCwgMHgwMDEwYTA0MSwgMHgwNDAyMDAwNywKKwkweDRhMDI2NDAzLCAweDAwMDAwMDEwLCAweDQxNzgyODAwLCAweDQyMDAzMDAwLAorCTB4MDAwMDAwNTAsIDB4MDQwMWY2YjksIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwMWRlMiwgMHg1YzAyNzgwMCwgMHg0MjAwMzAwMCwKKwkweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTBhNzY2LCAweDQyMDAwMDAwLAorCTB4MDAxMGI2NjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NTkzNDAyMDAsCisJMHg4NDAwMDU1OCwgMHg0ODAyNmEwMCwgMHgwNDAxZjdjNSwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDExLCAweDRhMDI2NDFhLCAweDAwMDAwMDAzLCAweDRhMDI2MjFhLAorCTB4MDAwMDFlMDAsIDB4MDQwMWYwNDMsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwMWViMCwgMHgwMjAwMDgwMCwgMHgwMDEwYTNiMCwgMHgwNDAyMDIwMCwKKwkweDA0MDFmYTQwLCAweDA0MDIwMDA4LCAweDRhMDI2NDAzLCAweDAwMDAwMDEyLAorCTB4MDQwMWYwMzgsIDB4NTkzNDA0MDAsIDB4ODIwMDA1ODAsIDB4MDAwMDA3MDMsCisJMHgwNDAwMDdlYiwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDI5LCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDVjMDI3ODAwLAorCTB4NDIwMDMwMDAsIDB4MDAwMDAwMTcsIDB4MDIwMWY4MDAsIDB4MDAxMGE3NjYsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjY2MywgMHgwMjAxZjgwMCwgMHgwMDEwYTg2ZSwKKwkweDAyMDFmODAwLCAweDAwMTAzOTNlLCAweDA0MDAwMDFiLCAweDQyMDAzMDAwLAorCTB4MDAwMDAwMDYsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMjksIDB4NDkzM2M4NTcsCisJMHg0YTAyNjQwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywKKwkweDRjMTgwMDAwLCAweDAyMDFmODAwLCAweDAwMTBhNzliLCAweDVjMDAzMDAwLAorCTB4NDE3ODI4MDAsIDB4MDIwMWYwMDAsIDB4MDAxMGEyNTAsIDB4NDIwMjgwMDAsCisJMHgwMDAwMDA0NiwgMHg0YzE0MDAwMCwgMHg0YzE4MDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhNzliLCAweDVjMDAzMDAwLCAweDVjMDAyODAwLCAweDAyMDFmMDAwLAorCTB4MDAxMGEyNTAsIDB4NDkzM2M4NTcsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDEsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NDcwLAogCTB4NDkzM2M4NTcsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDksIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwNSwgMHgwNDAxZjdmNSwKLQkweDAyMDFmODAwLCAweDAwMTBhNTkyLCAweDA0MDIwMWI1LCAweDAyMDFmODAwLAotCTB4MDAxMDIxMGEsIDB4MDQwMjAxYjIsIDB4MDQwMWY5ZWUsIDB4MDQwMjA3YzAsCisJMHgwMDEwNDNjNywgMHg0YTAyNjQwMywgMHgwMDAwMDAwNSwgMHgwNDAxZjdmNSwKKwkweDAyMDFmODAwLCAweDAwMTBhM2IwLCAweDA0MDIwMWI1LCAweDAyMDFmODAwLAorCTB4MDAxMDFlYjAsIDB4MDQwMjAxYjIsIDB4MDQwMWY5ZjIsIDB4MDQwMjA3YmEsCiAJMHg0YTAyNjQwMywgMHgwMDAwMDAyMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwKLQkweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDAyMDFmODAwLCAweDAwMTAyMTBhLAorCTB4MDIwMWYwMDAsIDB4MDAxMDY0NzAsIDB4MDIwMWY4MDAsIDB4MDAxMDFlYjAsCiAJMHgwNDAyMDFhNywgMHg0YTAyNjQwMywgMHgwMDAwMDAyMywgMHg0YTAyNjIwMywKLQkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NzJiLCAweDAyMDFmODAwLAotCTB4MDAxMGE1OTIsIDB4MDIwMDA4MDAsIDB4MDAxMDIxMGEsIDB4MDQwMjAxOWMsCi0JMHgwNDAxZjlkOCwgMHgwNDAyMDdhYSwgMHg0MDMwMDgwMCwgMHg1OWE4MTAxMCwKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NDcwLCAweDAyMDFmODAwLAorCTB4MDAxMGEzYjAsIDB4MDIwMDA4MDAsIDB4MDAxMDFlYjAsIDB4MDQwMjAxOWMsCisJMHgwNDAxZjlkYywgMHgwNDAyMDdhNCwgMHg0MDMwMDgwMCwgMHg1OWE4MTAxMCwKIAkweDU5Y2MwMDA3LCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDgwMDgwNTgwLAotCTB4MDQwMDAwMTksIDB4NTljYzE0MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMmMsCisJMHgwNDAwMDAxOSwgMHg1OWNjMTQwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRlOSwKIAkweDA0MDAwMDJkLCAweDU5Y2MwYzA4LCAweDRkMzAwMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDVkZDcsIDB4NDEzMjM4MDAsIDB4NWMwMjYwMDAsIDB4MDQwMDAwMjYsCisJMHgwMDEwNWIwZiwgMHg0MTMyMzgwMCwgMHg1YzAyNjAwMCwgMHgwNDAwMDAyNiwKIAkweDU5MWMwMjAyLCAweDgyMDAwNTgwLCAweDAwMDBmZmZmLCAweDA0MDAwMDA1LAogCTB4NTljYzEyMDgsIDB4NTkxYzAyMDIsIDB4ODAwODA1ODAsIDB4MDQwMjAwMWUsCiAJMHg1OTFjMDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywgMHgwNDAyMDAxYSwKIAkweDA0MDFmMDJjLCAweDU5Y2MxMjA4LCAweDgyMDgwNTgwLCAweDAwMDBmZmZmLAotCTB4MDQwMDAwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDk0MTAsIDB4MDQwMDAwMTIsCisJMHgwNDAwMDAwYywgMHgwMjAxZjgwMCwgMHgwMDEwOTFkOSwgMHgwNDAwMDAxMiwKIAkweDU5Y2MxNDA4LCAweDU5MWMwMjAyLCAweDgwMDgwNTgwLCAweDA0MDIwMDBlLAogCTB4NTkxYzAwMDksIDB4ODEzNDA1ODAsIDB4MDQwMDAwMTYsIDB4MDQwMWYwMGEsCi0JMHg1OWNjMTQwOCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTQwNSwKKwkweDU5Y2MxNDA4LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTBhMjE3LAogCTB4MDQwMjAwMTAsIDB4NTljYzEyMDgsIDB4ODIwODA1ODAsIDB4MDAwMGZmZmYsCiAJMHgwNDAwMDAxOSwgMHg0YTAyNjQwMywgMHgwMDAwMDAyNiwgMHg0YTAyNjIxYSwKIAkweDAwMDAxNzAwLCAweDU5Y2MxMjA0LCAweDgyMDgxNTgwLCAweDAwMDBmZmZmLAogCTB4MDQwMjA3OTgsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMjUsIDB4MDQwMWY3OTUsCiAJMHg1OTFjMDQwNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywgMHgwNDAyMDdmMiwKIAkweDU5MWMwNDAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDI0LCAweDA0MDIwMDA2LAotCTB4NGQzMDAwMDAsIDB4NDExZTYwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA3N2QsCisJMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwgMHgwMjAxZjgwMCwgMHgwMDAyMDhiNCwKIAkweDVjMDI2MDAwLCAweDRhMDI2NDAzLCAweDAwMDAwMDI1LCAweDA0MDFmNzg1LAogCTB4NDkzM2M4NTcsIDB4NGQzYzAwMDAsIDB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywgMHg1YzAyNzgwMCwgMHg0YzU4MDAwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0M2JkLCAweDVjMDI3ODAwLCAweDRjNTgwMDAwLAogCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODNhODFjMDAsIDB4MDAwMDAwMDIsCi0JMHg4M2NjMTQwMCwgMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwODU1YSwKKwkweDgzY2MxNDAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTA4MmZmLAogCTB4NWMwMGIwMDAsIDB4MDQwMDAwMDQsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMzEsCi0JMHgwNDAxZjc3MCwgMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwgMHgwMjAxZjgwMCwKLQkweDAwMTA1MTNiLCAweDA0MDIwMDBmLCAweDAyMDFmODAwLCAweDAwMTA1MTQ5LAorCTB4MDQwMWY3NzAsIDB4MDIwMWY4MDAsIDB4MDAxMDc2OTgsIDB4MDIwMWY4MDAsCisJMHgwMDEwNGUwZCwgMHgwNDAyMDAwZiwgMHgwMjAxZjgwMCwgMHgwMDEwNGUxYiwKIAkweDA0MDIwMDA4LCAweDRhMDM1MDMzLCAweDAwMDAwMDAxLCAweDQyMDJkODAwLAotCTB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDUwYTIsIDB4MDQwMWYwMDUsCi0JMHg0MjAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNTExMywKLQkweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTAyMTBhLCAweDA0MDIwMTFjLAotCTB4MDQwMWY5NTgsIDB4MDQwMjA3MmEsIDB4NDkzYTY0MDMsIDB4MDQwMWY5OTYsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNGQ3NiwgMHgwNDAxZjAwNSwKKwkweDQyMDAwMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA0ZGU1LAorCTB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDFlYjAsIDB4MDQwMjAxMWMsCisJMHgwNDAxZjk1YywgMHgwNDAyMDcyNCwgMHg0OTNhNjQwMywgMHgwNDAxZjlhYywKIAkweDA0MDIwMDA0LCAweDRhMDI2NDAzLCAweDAwMDAwMDJiLCAweDA0MDFmNzUxLAogCTB4NGEwMjY0MDMsIDB4MDAwMDAwMmMsIDB4MDQwMWY3NGUsIDB4NDkzM2M4NTcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwNDAyMDEwZCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OWU3LCAweDA0MDIwNzQwLCAweDAyMDFmODAwLCAweDAwMTA0OGQ5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDFlYjAsIDB4MDQwMjAxMGQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDgzNiwgMHgwNDAyMDc0MCwgMHgwMjAxZjgwMCwgMHgwMDEwNDcyOCwKIAkweDA0MDAwMDNjLCAweDU5Y2MwNDA4LCAweDQ4MDI2NDE5LCAweDU5Y2MwMjA4LAogCTB4NDgwMjYyMTksIDB4NTljYzA4MDcsIDB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsCiAJMHgwMGZmZmZmZiwgMHg4MDA0MDU4MCwgMHgwNDAwMDAxMiwgMHg1OWE4MDAxMCwKIAkweDgwMDQwNTgwLCAweDA0MDIwMDIxLCAweDU5Y2MxNDA4LCAweDAyMDFmODAwLAotCTB4MDAxMDk0MTAsIDB4MDQwMDAwMjMsIDB4MDIwMWY4MDAsIDB4MDAxMGE0Y2EsCi0JMHgwNDAwMDAyMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTkyMSwgMHgwNDAwMDAxZCwKKwkweDAwMTA5MWQ5LCAweDA0MDAwMDIzLCAweDAyMDFmODAwLCAweDAwMTBhMmU4LAorCTB4MDQwMDAwMjAsIDB4MDIwMWY4MDAsIDB4MDAxMGE3NDUsIDB4MDQwMDAwMWQsCiAJMHg0OTFlNjAxZSwgMHg0YTAyNjQwMywgMHgwMDAwMDAzNiwgMHgwNDAxZjBlNiwKIAkweDU5Y2MxMjA4LCAweDgyMDgwNTgwLCAweDAwMDBmZmZmLCAweDA0MDAwMDA5LAotCTB4MDIwMWY4MDAsIDB4MDAxMDk0MTAsIDB4MDQwMDAwMTIsIDB4NTkxYzAyMDIsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTFkOSwgMHgwNDAwMDAxMiwgMHg1OTFjMDIwMiwKIAkweDU5Y2MwYzA4LCAweDgwMDQwNTgwLCAweDA0MDIwMDBlLCAweDA0MDFmN2ViLAotCTB4NTljYzE0MDgsIDB4NDEzMjc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE0MDUsCisJMHg1OWNjMTQwOCwgMHg0MTMyNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTIxNywKIAkweDA0MDAwMDA4LCAweDA0MDFmN2U1LCAweDQ4MDNjODU2LCAweDRhMDI2NDFhLAogCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDE1MDAsIDB4MDQwMWYwMDYsCiAJMHg0ODAzYzg1NiwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwMywgMHg0YTAyNjIxYSwKIAkweDAwMDAxNzAwLCAweDRhMDI2NDAzLCAweDAwMDAwMDM3LCAweDA0MDFmMGM2LAogCTB4NDgwM2M4NTYsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMTIsIDB4MDQwMWYwYzIsCi0JMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwNDAyMDBjNCwKLQkweDAyMDFmODAwLCAweDAwMTA0OWU3LCAweDA0MDIwNmY3LCAweDAyMDFmODAwLAotCTB4MDAxMDQ4ZDksIDB4MDQwMDAwM2UsIDB4NTljYzA0MDcsIDB4NDgwMjY0MTksCisJMHg0OTMzYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMWViMCwgMHgwNDAyMDBjNCwKKwkweDAyMDFmODAwLCAweDAwMTA0ODM2LCAweDA0MDIwNmY3LCAweDAyMDFmODAwLAorCTB4MDAxMDQ3MjgsIDB4MDQwMDAwM2UsIDB4NTljYzA0MDcsIDB4NDgwMjY0MTksCiAJMHg1OWNjMTIwNywgMHg0ODBhNjIxOSwgMHg4MjA4MDU4MCwgMHgwMDAwZmZmZiwKLQkweDA0MDAwMDA1LCAweDAyMDFmODAwLCAweDAwMTA5NDEwLCAweDA0MDAwMDJjLAorCTB4MDQwMDAwMDUsIDB4MDIwMWY4MDAsIDB4MDAxMDkxZDksIDB4MDQwMDAwMmMsCiAJMHgwNDAxZjAwNiwgMHg1OWNjMTQwNywgMHg0MTMyNzgwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhNDA1LCAweDA0MDAwMDI2LCAweDU5Y2MwYzA3LCAweDU5MWMwMjAyLAorCTB4MDAxMGEyMTcsIDB4MDQwMDAwMjYsIDB4NTljYzBjMDcsIDB4NTkxYzAyMDIsCiAJMHg4MDA0MDU4MCwgMHgwNDAyMDAyMiwgMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwKLQkweDAyMDFmODAwLCAweDAwMTA4YmQ3LCAweDVjMDI2MDAwLCAweDU5Y2MwYzA5LAorCTB4MDIwMWY4MDAsIDB4MDAxMDg5OGIsIDB4NWMwMjYwMDAsIDB4NTljYzBjMDksCiAJMHg4MjA0MGQwMCwgMHgwMDAwZmYwMCwgMHg4NDA0MDljMCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhOTIxLCAweDA0MDAwMDE2LCAweDgyMDQwNTgwLCAweDAwMDAwMDAxLAorCTB4MDAxMGE3NDUsIDB4MDQwMDAwMTYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsCiAJMHgwNDAwMDAwYSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDAwNCwKIAkweDgyMDQwNTgwLCAweDAwMDAwMDA3LCAweDA0MDIwMDA3LCAweDU5MWMwMDA4LAogCTB4ODAwMDA1NDAsIDB4MDQwMDAwMDQsIDB4NTljYzI4MDgsIDB4MDIwMWYwMDAsCi0JMHgwMDEwYTRkZSwgMHg0ODAzYzg1NiwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwOSwKKwkweDAwMTBhMmZjLCAweDQ4MDNjODU2LCAweDRhMDI2NDFhLCAweDAwMDAwMDA5LAogCTB4NGEwMjYyMWEsIDB4MDAwMDJhMDAsIDB4MDQwMWYwMDYsIDB4NDgwM2M4NTYsCiAJMHg0YTAyNjQxYSwgMHgwMDAwMDAwMywgMHg0YTAyNjIxYSwgMHgwMDAwMDMwMCwKIAkweDRhMDI2NDAzLCAweDAwMDAwMDNiLCAweDA0MDFmMDdiLCAweDQ4MDNjODU2LAogCTB4NGEwMjY0MWEsIDB4MDAwMDAwMGIsIDB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsCi0JMHgwNDAxZjdmOCwgMHg0YzA4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDhlYywKLQkweDA0MDAwMDI2LCAweDAyMDFmODAwLCAweDAwMTA0OGMxLCAweDAyMDFmODAwLAotCTB4MDAxMGE2MDEsIDB4MDQwMjAwMWUsIDB4NTlhODAwMjYsIDB4ODIwMDA1NDAsCisJMHgwNDAxZjdmOCwgMHg0YzA4MDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDczYiwKKwkweDA0MDAwMDI2LCAweDAyMDFmODAwLCAweDAwMTA0NzExLCAweDAyMDFmODAwLAorCTB4MDAxMGE0MWMsIDB4MDQwMjAwMWUsIDB4NTlhODAwMjYsIDB4ODIwMDA1NDAsCiAJMHgwMDAwMDAwMywgMHg0ODAzNTAyNiwgMHg1OWE4MDAxZCwgMHg4MDAwMDBkMCwKIAkweDU5YTgwODEwLCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgwMDQxNTQwLAogCTB4NDgwYjUwMTAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmM3OCwgMHg0OTdiNTAyOCwgMHgwMjAxZjgwMCwgMHgwMDEwM2IyNSwKKwkweDAwMTA2OWFmLCAweDQ5N2I1MDI4LCAweDAyMDFmODAwLCAweDAwMTAzOTNlLAogCTB4MDQwMDAwMDMsIDB4NGEwMzI4MDQsIDB4MDAwMDA3ZDAsIDB4OGMwMDA1MGEsCi0JMHgwNDAyMDAwYSwgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwKLQkweDAwMTAxZTQ1LCAweDVjMDAxMDAwLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMGE2MjMsIDB4MDQwMWY3ZmMsIDB4NWMwMDEwMDAsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwNDAyMDA0YywKLQkweDAyMDFmODAwLCAweDAwMTBhNjI4LCAweDRhMDI2NDAzLCAweDAwMDAwMDQ3LAotCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMjEwYSwgMHgwNDAyMDA0MSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhNjI4LCAweDRhMDI2NDAzLCAweDAwMDAwMDQ3LCAweDRhMDI2MjAzLAotCTB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMjEwYSwgMHgwNDAyMDAzNiwgMHgwMjAxZjgwMCwgMHgwMDEwYTYyOCwKLQkweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDA0MDFmODM0LCAweDA0MDAwMDMwLAorCTB4MDQwMjAwMGEsIDB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsIDB4MDIwMWY4MDAsCisJMHgwMDEwMWJmMCwgMHg1YzAwMTAwMCwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhNDNlLCAweDA0MDFmN2ZjLCAweDVjMDAxMDAwLCAweDAyMDFmMDAwLAorCTB4MDAwMjA4YjQsIDB4MDIwMWY4MDAsIDB4MDAxMDFlYjAsIDB4MDQwMjAwNGMsCisJMHgwMjAxZjgwMCwgMHgwMDEwYTQ0MywgMHg0YTAyNjQwMywgMHgwMDAwMDA0NywKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NDcwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDFlYjAsIDB4MDQwMjAwNDEsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTQ0MywgMHg0YTAyNjQwMywgMHgwMDAwMDA0NywgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDAyMDFmMDAwLCAweDAwMTA2NDcwLCAweDAyMDFmODAwLAorCTB4MDAxMDFlYjAsIDB4MDQwMjAwMzYsIDB4MDIwMWY4MDAsIDB4MDAxMGE0NDMsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHgwNDAxZjgzNCwgMHgwNDAwMDAzMCwKIAkweDRhMDI2NDAzLCAweDAwMDAwMDRlLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAotCTB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4NGEwMjY0MDMsIDB4MDAwMDAwNGYsCisJMHgwMjAxZjAwMCwgMHgwMDEwNjQ3MCwgMHg0YTAyNjQwMywgMHgwMDAwMDA0ZiwKIAkweDQ5N2E2MDFjLCAweDU5Y2MwYTA2LCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLAogCTB4ODAwNDA5YzAsIDB4MDQwMDA2NWYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsCiAJMHgwNDAyMDAwNSwgMHg1OWNjMDgwOCwgMHg1OWE4MDAwNSwgMHg4MDA0MDU4MCwKIAkweDA0MDAwNjU4LCAweDgyMDQwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDBhLAogCTB4ODNjYzE0MDAsIDB4MDAwMDAwMGIsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCi0JMHg4MzM0MWMwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwODU1YSwKKwkweDgzMzQxYzAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA4MmZmLAogCTB4MDQwMDA2NGMsIDB4NGEwMjYwMWMsIDB4MDAwMDAwMDEsIDB4MDQwMWY2NDksCiAJMHg0YTAyNjQwMywgMHgwMDAwMDA1MCwgMHg1OWNjMDIwNywgMHg0ODAyNjAxYywKIAkweDA0MDFmNjQ0LCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDQyMDAwODAwLAotCTB4ODAwMDAwNDAsIDB4MDIwMWYwMDAsIDB4MDAwMjA3MjEsIDB4NDgwM2M4NTcsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHg0ZDJjMDAwMCwgMHg0YzUwMDAwMCwKKwkweDgwMDAwMDQwLCAweDAyMDFmMDAwLCAweDAwMDIwODU1LCAweDQ4MDNjODU3LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsIDB4NGQyYzAwMDAsIDB4NGM1MDAwMDAsCiAJMHg0YzU4MDAwMCwgMHg0YzU0MDAwMCwgMHg1OWE4MDAxNiwgMHg4MjAwMGM4MCwKLQkweDAwMDAwODI5LCAweDA0MDIxMDI5LCAweDAyMDFmODAwLCAweDAwMTAwN2QzLAotCTB4MDQwMDAwMjYsIDB4NDkyZTYwMDgsIDB4NTlhODAwMTYsIDB4ODAwMDAxMDQsCi0JMHg0ODAyNTgwMiwgMHg4M2NjYTQwMCwgMHgwMDAwMDAwNiwgMHg4MjAwMGM4MCwKLQkweDAwMDAwMDBiLCAweDA0MDAxMDEzLCAweDRhMDI1ODExLCAweDAwMDAwMDBiLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMGIsIDB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsCi0JMHg0MDAwYTgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYWIxNywgMHg0MTJjNzAwMCwKLQkweDAyMDFmODAwLCAweDAwMTAwN2QzLCAweDA0MDAwMDEwLCAweDQ5MmM3MDAxLAotCTB4NDAwNDAwMDAsIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDksIDB4MDQwMWY3ZWMsCisJMHgwMDAwMDg0MSwgMHgwNDAyMTAyZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDgxOSwKKwkweDA0MDAwMDJhLCAweDQ5MmU2MDA4LCAweDU5YTgwMDE2LCAweDQ4MDI1ODAyLAorCTB4ODIwMDA0MDAsIDB4MDAwMDAwMDMsIDB4ODAwMDAxMDQsIDB4ODNjY2E0MDAsCisJMHgwMDAwMDAwNiwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwYiwgMHgwNDAwMTAxNSwKKwkweDRhMDI1ODExLCAweDAwMDAwMDBiLCAweDQyMDBiMDAwLCAweDAwMDAwMDBiLAorCTB4ODMyYzA0MDAsIDB4MDAwMDAwMDUsIDB4NDAwMGE4MDAsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTkzZSwgMHg0MTJjNzAwMCwgMHg4MDA0MDljMCwgMHgwNDAyMDAwMywKKwkweDQ5Nzg3MDAxLCAweDA0MDFmMDBlLCAweDAyMDFmODAwLCAweDAwMTAwODE5LAorCTB4MDQwMDAwMGUsIDB4NDkyYzcwMDEsIDB4NDAwNDAwMDAsIDB4MDQwMWY3ZWEsCiAJMHg0ODAyNTgxMSwgMHg0MDAwYjAwMCwgMHg4MzJjMDQwMCwgMHgwMDAwMDAwNSwKLQkweDQwMDBhODAwLCAweDAyMDFmODAwLCAweDAwMTBhYjE3LCAweDgyMDAwNTQwLAorCTB4NDAwMGE4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMGE5M2UsIDB4ODIwMDA1NDAsCiAJMHgwMDAwMDAwMSwgMHgwNDAxZjAwNiwgMHg0OTdiNTAxNiwgMHg1OTMyNTgwOCwKLQkweDAyMDFmODAwLCAweDAwMTAwN2ZkLCAweDgwMDAwNTgwLCAweDVjMDBhODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4NDMsIDB4ODAwMDA1ODAsIDB4NWMwMGE4MDAsCiAJMHg1YzAwYjAwMCwgMHg1YzAwYTAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKIAkweDRkMzQwMDAwLCAweDU5MzI2ODA5LCAweDU5MzQzNDAwLCAweDQ5MzNjODU3LAotCTB4NDkzN2M4NTcsIDB4NDgxYmM4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZjMsCi0JMHg1YzAyNjgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0YzVjMDAwMCwKLQkweDRkM2MwMDAwLCAweDA0MDFmODQwLCAweDA0MDIwMDJjLCAweDU5Y2MwMjA3LAotCTB4ODIwMDBkMDAsIDB4MDAwMGZmMDAsIDB4OTAwNDExYzAsIDB4NTljYzAwMGEsCi0JMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg4MDA4MTU0MCwgMHg0ODBhNjAxYywKLQkweDhjMDQwZDE4LCAweDA0MDAwMDBlLCAweDQyMDAzMDAwLCAweDAwMDAwMDA4LAotCTB4MDIwMWY4MDAsIDB4MDAxMGE5MzIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NjMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0MjAwYjgwMCwgMHgwMDAwMDAwMiwKLQkweDQyMDI3ODAwLCAweDAwMDAwMDAxLCAweDA0MDFmMDExLCAweDQxNzhiODAwLAotCTB4OGMwNDBkMWEsIDB4MDQwMDAwMTEsIDB4NTljYzAwMGEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNWM5YSwgMHgwNDAyMDAwZCwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwOSwKLQkweDAyMDFmODAwLCAweDAwMTBhOTNhLCAweDQyMDAwMDAwLCAweDAwMTBiODYzLAotCTB4MDIwMWY4MDAsIDB4MDAxMGFhNDcsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMjBhMSwgMHgwNDAxZjAwNCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKLQkweDA0MDFmMDAyLCAweDgwMDAwNTgwLCAweDVjMDI3ODAwLCAweDVjMDBiODAwLAotCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTljYzAyMDYsIDB4ODIwMDA0ODAsCi0JMHgwMDAwMDAxMCwgMHgwNDAyMTAwNiwgMHg0YTAyNjIxYSwgMHgwMDAwMDAwMCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDgwMDAwNTgwLAotCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsCi0JMHg1OWNjMDQwNywgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHg4MjAwMDU4MCwKLQkweDAwMDAwODAwLCAweDA0MDIwMDA5LCAweDU5Y2MwMDA2LCAweDgyMDAwNTAwLAotCTB4MDBmZjAwMDAsIDB4ODIwMDBkODAsIDB4MDAxNDAwMDAsIDB4MDQwMDAwMDMsCi0JMHg4MjAwMGQ4MCwgMHgwMDEwMDAwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKLQkweDU5MzAwNDAzLCAweDgyMDAzNDgwLCAweDAwMDAwMDUxLCAweDAyMDIxODAwLAotCTB4MDAxMDA1ZDgsIDB4ODMzODM1ODAsIDB4MDAwMDAwMTMsIDB4MDQwMjAwMDMsCi0JMHg0ODAzYzg1NywgMHgwYzAxZjAxMiwgMHg4MzM4MzU4MCwgMHgwMDAwMDAyNywKLQkweDA0MDAwMDA1LCAweDgzMzgzNTgwLCAweDAwMDAwMDE0LCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4YzEsIDB4NDIwMDA4MDAsCi0JMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwgMHgwMjAxZjgwMCwKLQkweDAwMTA2YmJmLCAweDAyMDFmMDAwLCAweDAwMTA3OTExLCAweDAwMTA5ZTNjLAotCTB4MDAxMDllNDUsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCi0JMHgwMDEwOWU0NSwgMHgwMDEwOWU1MCwgMHgwMDEwOWVjZCwgMHgwMDEwOWU5NSwKLQkweDAwMTA5ZWNkLCAweDAwMTA5ZWFkLCAweDAwMTA5ZWNkLCAweDAwMTA5ZWJlLAotCTB4MDAxMDllY2QsIDB4MDAxMDllYzYsIDB4MDAxMDllY2QsIDB4MDAxMDllYzYsCi0JMHgwMDEwOWVjZCwgMHgwMDEwOWVjZCwgMHgwMDEwOWUzYywgMHgwMDEwOWUzYywKLQkweDAwMTA5ZTNjLCAweDAwMTA5ZTNjLCAweDAwMTA5ZTNjLCAweDAwMTA5ZTNjLAotCTB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCi0JMHgwMDEwOWUzYywgMHgwMDEwOWU0NSwgMHgwMDEwOWUzYywgMHgwMDEwOWVjZCwKLQkweDAwMTA5ZTNjLCAweDAwMTA5ZTNjLCAweDAwMTA5ZWNkLCAweDAwMTA5ZTNjLAotCTB4MDAxMDllY2EsIDB4MDAxMDllY2QsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCi0JMHgwMDEwOWUzYywgMHgwMDEwOWUzYywgMHgwMDEwOWVjZCwgMHgwMDEwOWVjZCwKLQkweDAwMTA5ZTNjLCAweDAwMTA5ZWMzLCAweDAwMTA5ZWNkLCAweDAwMTA5ZTNjLAotCTB4MDAxMDllNGEsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCi0JMHgwMDEwOWUzYywgMHgwMDEwOWVjOSwgMHgwMDEwOWVjZCwgMHgwMDEwOWUzYywKLQkweDAwMTA5ZTNjLCAweDAwMTA5ZWNkLCAweDAwMTA5ZWNkLCAweDAwMTA5ZTNjLAotCTB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCi0JMHgwMDEwOWUzYywgMHgwMDEwOWUzYywgMHgwMDEwOWUzYywgMHgwMDEwOWUzYywKLQkweDAwMTA5ZTNlLCAweDAwMTA5ZTNjLCAweDAwMTA5ZTNlLCAweDAwMTA5ZTNjLAotCTB4MDAxMDllM2MsIDB4MDAxMDllM2UsIDB4MDAxMDllM2MsIDB4MDAxMDllM2MsCi0JMHgwMDEwOWUzYywgMHgwMDEwOWUzZSwgMHgwMDEwOWUzZSwgMHgwMDEwOWUzZSwKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRkMmMwMDAwLCAweDU5MzI1ODA4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4NWMwMjU4MDAsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDc3ZCwgMHg1OWE4MDAzNywgMHg0ODAyNjIwNiwgMHg0YTAyNjIwMywKLQkweDAwMDAwMDAyLCAweDFjMDFmMDAwLCAweDRkM2MwMDAwLCAweDQxN2E3ODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ1NjcsIDB4NWMwMjc4MDAsIDB4MDQwMWYwN2UsCi0JMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNDU3MSwKLQkweDU5YTgwMDI2LCAweDhjMDAwNTA4LCAweDA0MDAwMDEyLCAweDU5MzI2ODA5LAotCTB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODNhODFjMDAsCi0JMHgwMDAwMDAwMiwgMHg4MzM0MTQwMCwgMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwKLQkweDAwMTA4NTVhLCAweDgwMDAwNTQwLCAweDVjMDBiMDAwLCAweDA0MDIwMDZhLAotCTB4NTkzNDAyMDAsIDB4ODQwMDA1MWEsIDB4NDgwMjZhMDAsIDB4MDQwMWYwMWIsCi0JMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDA2MywgMHg0ZDNjMDAwMCwKLQkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA0NTY3LCAweDVjMDI3ODAwLAotCTB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsCi0JMHg1OTM0MDIxMiwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHgwNDAwMDA1NiwKLQkweDU5OWMwMDE5LCAweDhjMDAwNTBlLCAweDA0MDIwMDUzLCAweDQxNmMwMDAwLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDQsIDB4NTlhODAwMWIsCi0JMHg4MDAwMDAwMCwgMHg0ODAzNTAxYiwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywKLQkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDRhMDI2NDA2LCAweDAwMDAwMDAxLAotCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjcyYiwgMHg0Y2U4MDAwMCwgMHg0MjAxZDAwMCwKLQkweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA1ZmFlLCAweDVjMDFkMDAwLAotCTB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ5ZjMsIDB4MDQwMDAwMzYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjQ1ZSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwKLQkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDAyMDFmODAwLCAweDAwMTBhOTZhLAotCTB4MDQwMjAwMmQsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwgMHg0YTAyNjIwMywKLQkweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDAzLCAweDAyMDFmMDAwLAotCTB4MDAxMDY3MmIsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsIDB4MDQwMWY4MjAsCi0JMHg1OTMwMzAwOSwgMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDAxYSwKLQkweDU5YTgwMDI2LCAweDhjMDAwNTA4LCAweDA0MDAwMDE3LCAweDAyMDFmODAwLAotCTB4MDAxMDQ5ZTcsIDB4MDQwMDAwMTQsIDB4NTlhODAwMWIsIDB4ODAwMDAwMDAsCi0JMHg0ODAzNTAxYiwgMHgwNDAxZjdjNSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwKLQkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDA0MDFmNzkyLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDQsIDB4MDQwMWYwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4YzEsCi0JMHgwNDAxZjAwNSwgMHgwNDAxZjAwNCwgMHgwNDAxZjAwMywgMHgwMjAxZjgwMCwKLQkweDAwMTA0NTcxLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDQ5MzNjODU3LAotCTB4NDgwN2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4NGQzYzAwMDAsCi0JMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywgMHg1YzAyNzgwMCwKLQkweDAyMDFmODAwLCAweDAwMTAyMDc0LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAotCTB4NTkzNDA0MDAsIDB4ODAwMDAxMTAsIDB4ODIwMDM0ODAsIDB4MDAwMDAwMGMsCi0JMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MzU4MCwgMHgwMDAwMDAxNSwKLQkweDA0MDIwMDAyLCAweDBjMDFmMDA2LCAweDgzMzgzNTgwLCAweDAwMDAwMDE2LAotCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMGQsIDB4MDAxMDgwYjgsCi0JMHgwMDEwODBiOCwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwKLQkweDAwMTA4MGI4LCAweDAwMTA5ZjMwLCAweDAwMTA5ZjAzLCAweDAwMTA4MGI4LAotCTB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsCi0JMHgwMDEwODBiOCwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwgMHgwMDEwODBiOCwKLQkweDAwMTA4MGI4LCAweDAwMTA5ZjMwLCAweDAwMTA5ZjM3LCAweDAwMTA4MGI4LAotCTB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsIDB4MDAxMDgwYjgsIDB4NDkzM2M4NTcsCi0JMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDAxYiwgMHg4MTM2NjljMCwKLQkweDA0MDAwMDE5LCAweDU5MzQwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLAotCTB4MDQwMDAwMTUsIDB4NTk5YzAwMTksIDB4OGMwMDA1MGUsIDB4MDQwMjAwMTIsCi0JMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNDU2NywKLQkweDVjMDI3ODAwLCAweDQyMDAwODAwLCAweDAwMDAwMDAzLCAweDAyMDFmODAwLAotCTB4MDAxMDQ1NzEsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDEsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMiwgMHgwMjAxZjAwMCwKLQkweDAwMTA2NzJiLCAweDU5Y2MwMDAxLCAweDAyMDFmODAwLCAweDAwMTA1YzlhLAotCTB4MDQwMjAwMGIsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNDUsIDB4MDIwMjAwMDAsCi0JMHgwMDAyMDc3ZCwgMHg1OTM0NTAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwNDJiNCwKLQkweDQ4MmE2ODAyLCAweDAyMDFmMDAwLCAweDAwMDIwNzdkLCAweDFjMDFmMDAwLAotCTB4NDkzM2M4NTcsIDB4NTkzMDM0MDMsIDB4ODIxODM1ODAsIDB4MDAwMDAwMWUsCi0JMHgwMjAwMDAwMCwgMHgwMDAyMDc3ZCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKLQkweDAyMDFmODAwLCAweDAwMTA4M2RmLCAweDAyMDIwMDAwLCAweDAwMDIwNzdkLAotCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDEsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNjcyYiwgMHg0OTNiYzg1NywgMHg4MzM4MDU4MCwKLQkweDAwMDAwMDUxLCAweDA0MDIwMDBiLCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAotCTB4MDIwMjAwMDAsIDB4MDAxMDc5NzQsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwMiwgMHgwNDAwMDA2ZCwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKLQkweDgzMzgwNTgwLCAweDAwMDAwMDI3LCAweDA0MDAwMDE0LCAweDgzMzgwNTgwLAotCTB4MDAwMDAwNDgsIDB4MDQwMDAwMDYsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTQsCi0JMHgwNDAwMDAwZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZjYwLCAweDAyMDIwMDAwLCAweDAwMTA3OTc0LCAweDU5MzAwMjAzLAotCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDIwMDAwMDAsIDB4MDAwMjA4NmUsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwgMHg1OTMwMDQwMywgMHg4MjAwMGM4MCwKLQkweDAwMDAwMDQ0LCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDgyMDAwNDgwLAotCTB4MDAwMDAwNDAsIDB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsIDB4NDAwMjcwMDAsCi0JMHg0ODAzYzg1NywgMHgwYzAxZjAwMSwgMHgwMDEwOWY3NiwgMHgwMDEwOWY3OCwKLQkweDAwMTA5Zjc4LCAweDAwMTA5ZjkzLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4NTkzMjU4MDgsIDB4ODEyZTU5YzAsCi0JMHgwNDAwMDAxNiwgMHg4MzJjMDUwMCwgMHgwMGZmMDAwMCwgMHgwNDAwMDAxMywKLQkweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDU5MzI2ODA5LCAweDU5MzQwMjAwLAotCTB4OGMwMDA1MGUsIDB4MDQwMjAwMGQsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMDQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYTNlZiwgMHg0OTdhNjAwOCwgMHg1OTMwMDIwNiwKLQkweDgwMDAwNTQwLCAweDA0MDIwMDAzLCAweDU5YTgwMDM4LCAweDQ4MDI2MjA2LAotCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNmJiZiwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwMjAwMDAwMCwKLQkweDAwMTA3OTExLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTAwN2Y0LAotCTB4MDIwMWYwMDAsIDB4MDAxMDc5MTEsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCi0JMHg1OTMyNTgwOCwgMHg1OTJjMDQwYSwgMHg4YzAwMDUwMiwgMHgwNDAwMDAwNywKLQkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQyMDI3MDAwLCAweDAwMDAwMDQzLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3YTEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsCi0JMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwYTU5NywgMHgwMjAwMDAwMCwKLQkweDAwMDIwODZjLCAweDFjMDFmMDAwLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLAotCTB4NGEwMjY0MDMsIDB4MDAwMDAwNDEsIDB4NDIwMjc4MDAsIDB4ODAwMDIwNDIsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg4MzM4MDU4MCwgMHgwMDAwMDA1MSwKLQkweDA0MDAwMDA2LCAweDgzMzgwNTgwLCAweDAwMDAwMDQxLCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA2ZmQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYTVkZiwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwKLQkweDgzMzgwNDgwLCAweDAwMDAwMDUwLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4ODMzODA0ODAsIDB4MDAwMDAwNDksIDB4MDIwMDE4MDAsIDB4MDAxMDA1ZDgsCi0JMHgwYzAxZjAwMSwgMHgwMDEwOWZkYSwgMHgwMDEwOWZmYiwgMHgwMDEwOWZkOCwKLQkweDAwMTA5ZmQ4LCAweDAwMTA5ZmQ4LCAweDAwMTA5ZmQ4LCAweDAwMTA5ZmZiLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzMjU4MDgsIDB4NTkyYzA0MGEsCisJMHg0OTM3Yzg1NywgMHg0ODFiYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNDg0MiwKKwkweDVjMDI2ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjNjAwMDAwLAorCTB4NGM1YzAwMDAsIDB4NGQzYzAwMDAsIDB4NGQ0NDAwMDAsIDB4NGQzNDAwMDAsCisJMHgwNDAxZjg0ZiwgMHgwNDAyMDAzNywgMHg1OWNjMDIwNywgMHg4MjAwMGQwMCwKKwkweDAwMDBmZjAwLCAweDkwMDQxMWMwLCAweDU5Y2MwMDBhLCAweDgyMDAwNTAwLAorCTB4MDBmZmZmZmYsIDB4ODAwODE1NDAsIDB4NDgwYTYwMWMsIDB4OGMwNDBkMTgsCisJMHgwNDAwMDAxMSwgMHg0MjAwMzAwMCwgMHgwMDAwMDAwOCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhNzU2LCAweDQyMDAwMDAwLCAweDAwMTBiNjYyLCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4NDIwMGI4MDAsIDB4MDAwMDAwMDIsIDB4NDIwMGMwMDAsCisJMHgwMDAwMDAwMSwgMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMWU0OCwKKwkweDA0MDFmMDFmLCAweDQxNzhiODAwLCAweDhjMDQwZDFhLCAweDA0MDAwMDE5LAorCTB4NTljYzAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDU5YjksIDB4MDIwMDA4MDAsCisJMHgwMDAyMDI2NywgMHgwNDAyMDAxMywgMHg1OTMwMDAwOSwgMHg0YzAwMDAwMCwKKwkweDQ5MzY2MDA5LCAweDQyMDAzMDAwLCAweDAwMDAwMDA5LCAweDAyMDFmODAwLAorCTB4MDAxMGE3NWUsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NjIsIDB4MDIwMWY4MDAsCisJMHgwMDEwYTg2ZSwgMHg0MTdhNzgwMCwgMHg0MTc4YzAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTAxZTQ4LCAweDVjMDAwMDAwLCAweDQ4MDI2MDA5LCAweDA0MDFmMDA0LAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDMsIDB4NDA1YzI4MDAsCisJMHg4MDAwMDU4MCwgMHg1YzAyNjgwMCwgMHg1YzAyODgwMCwgMHg1YzAyNzgwMCwKKwkweDVjMDBiODAwLCAweDVjMDBjMDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NTljYzAyMDYsIDB4ODIwMDA0ODAsIDB4MDAwMDAwMTAsIDB4MDQwMjEwMDYsCisJMHg0YTAyNjIxYSwgMHgwMDAwMDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmMDAyLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAorCTB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsIDB4NTljYzA0MDcsIDB4ODIwMDA1MDAsCisJMHgwMDAwZmYwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDgwMCwgMHgwNDAyMDAwOSwKKwkweDU5Y2MwMDA2LCAweDgyMDAwNTAwLCAweDAwZmYwMDAwLCAweDgyMDAwZDgwLAorCTB4MDAxNDAwMDAsIDB4MDQwMDAwMDMsIDB4ODIwMDBkODAsIDB4MDAxMDAwMDAsCisJMHgxYzAxZjAwMCwgMHg1OTMwMDQwMywgMHg4MjAwMzQ4MCwgMHgwMDAwMDA1MSwKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDgzMzgzNTgwLCAweDAwMDAwMDEzLAorCTB4MDQwMjAwMDMsIDB4NDgwM2M4NTcsIDB4MGMwMWYwMTYsIDB4NDkzM2M4NTcsCisJMHg0OTNiYzg1NywgMHg4MzM4MzU4MCwgMHgwMDAwMDAyNywgMHgwNDAwMDAwNSwKKwkweDgzMzgzNTgwLCAweDAwMDAwMDE0LCAweDAyMDIwODAwLCAweDAwMTAwNjE1LAorCTB4NDkzYmM4NTcsIDB4NDkzN2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDQ3MTEsCisJMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywKKwkweDAyMDFmODAwLCAweDAwMTA2OGY2LCAweDAyMDFmMDAwLCAweDAwMTA3Njk4LAorCTB4MDAxMDljMjksIDB4MDAxMDljMzIsIDB4MDAxMDljMjksIDB4MDAxMDljMjksCisJMHgwMDEwOWMyOSwgMHgwMDEwOWMzMiwgMHgwMDEwOWMzZCwgMHgwMDEwOWNiMCwKKwkweDAwMTA5YzgyLCAweDAwMTA5Y2IwLCAweDAwMTA5YzlhLCAweDAwMTA5Y2IwLAorCTB4MDAxMDljYTEsIDB4MDAxMDljYjAsIDB4MDAxMDljYTksIDB4MDAxMDljYjAsCisJMHgwMDEwOWNhOSwgMHgwMDEwOWNiMCwgMHgwMDEwOWNiMCwgMHgwMDEwOWMyOSwKKwkweDAwMTA5YzI5LCAweDAwMTA5YzI5LCAweDAwMTA5YzI5LCAweDAwMTA5YzI5LAorCTB4MDAxMDljMjksIDB4MDAxMDljMjksIDB4MDAxMDljMjksIDB4MDAxMDljMjksCisJMHgwMDEwOWMyOSwgMHgwMDEwOWMyOSwgMHgwMDEwOWMzMiwgMHgwMDEwOWMyOSwKKwkweDAwMTA5Y2IwLCAweDAwMTA5YzI5LCAweDAwMTA5YzI5LCAweDAwMTA5Y2IwLAorCTB4MDAxMDljMjksIDB4MDAxMDljYWQsIDB4MDAxMDljYjAsIDB4MDAxMDljMjksCisJMHgwMDEwOWMyOSwgMHgwMDEwOWMyOSwgMHgwMDEwOWMyOSwgMHgwMDEwOWNiMCwKKwkweDAwMTA5Y2IwLCAweDAwMTA5YzI5LCAweDAwMTA5Y2E2LCAweDAwMTA5Y2IwLAorCTB4MDAxMDljMjksIDB4MDAxMDljMzcsIDB4MDAxMDljMjksIDB4MDAxMDljMjksCisJMHgwMDEwOWMyOSwgMHgwMDEwOWMyOSwgMHgwMDEwOWNhYywgMHgwMDEwOWNiMCwKKwkweDAwMTA5YzI5LCAweDAwMTA5YzI5LCAweDAwMTA5Y2IwLCAweDAwMTA5Y2IwLAorCTB4MDAxMDljMjksIDB4MDAxMDljMjksIDB4MDAxMDljMjksIDB4MDAxMDljMjksCisJMHgwMDEwOWMyOSwgMHgwMDEwOWMyOSwgMHgwMDEwOWMyOSwgMHgwMDEwOWMyOSwKKwkweDAwMTA5YzI5LCAweDAwMTA5YzJiLCAweDAwMTA5YzI5LCAweDAwMTA5YzJiLAorCTB4MDAxMDljMjksIDB4MDAxMDljMjksIDB4MDAxMDljMmIsIDB4MDAxMDljMjksCisJMHgwMDEwOWMyOSwgMHgwMDEwOWMyOSwgMHgwMDEwOWMyYiwgMHgwMDEwOWMyYiwKKwkweDAwMTA5YzJiLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDRkMmMwMDAwLAorCTB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDA4NDMsIDB4NWMwMjU4MDAsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHg1OWE4MDAzNywgMHg0ODAyNjIwNiwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDFjMDFmMDAwLCAweDRkM2MwMDAwLAorCTB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYmQsIDB4NWMwMjc4MDAsCisJMHgwNDAxZjA3NCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNywgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2M3LCAweDU5YTgwMDI2LCAweDhjMDAwNTA4LCAweDA0MDAwMDEyLAorCTB4NTkzMjY4MDksIDB4NGM1ODAwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsCisJMHg4M2E4MWMwMCwgMHgwMDAwMDAwMiwgMHg4MzM0MTQwMCwgMHgwMDAwMDAwNiwKKwkweDAyMDFmODAwLCAweDAwMTA4MmZmLCAweDgwMDAwNTQwLCAweDVjMDBiMDAwLAorCTB4MDQwMjAwNjAsIDB4NTkzNDAyMDAsIDB4ODQwMDA1MWEsIDB4NDgwMjZhMDAsCisJMHgwNDAxZjAxYiwgMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDA1OSwKKwkweDRkM2MwMDAwLCAweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTA0M2JkLAorCTB4NWMwMjc4MDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDcsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDNjNywgMHg1OTM0MDIxMiwgMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwKKwkweDA0MDAwMDRjLCAweDU5OWMwMDE5LCAweDhjMDAwNTBlLCAweDA0MDIwMDQ5LAorCTB4NDE2YzAwMDAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDQsCisJMHg1OWE4MDAxYiwgMHg4MDAwMDAwMCwgMHg0ODAzNTAxYiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDAzLCAweDAyMDFmODAwLCAweDAwMTA0M2M3LCAweDRhMDI2NDA2LAorCTB4MDAwMDAwMDEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwMiwgMHgwMjAxZjgwMCwgMHgwMDEwNjQ3MCwgMHg0Y2U4MDAwMCwKKwkweDQyMDFkMDAwLCAweDAwMDAwMDAxLCAweDAyMDFmODAwLCAweDAwMTA1Y2U3LAorCTB4NWMwMWQwMDAsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4NDIsCisJMHgwNDAwMDAyYywgMHgwMjAxZjgwMCwgMHgwMDEwNjE5NiwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTA0M2M3LCAweDAyMDFmODAwLAorCTB4MDAxMGE3OTEsIDB4MDQwMjAwMjMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDUsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHg0YTAyNjQwNiwgMHgwMDAwMDAwMSwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDRhMDI2NDAzLCAweDAwMDAwMDAzLAorCTB4MDIwMWYwMDAsIDB4MDAxMDY0NzAsIDB4MDIwMWY4MDAsIDB4MDAxMDQ4NGIsCisJMHgwNDAyMDAxNCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNiwgMHgwNDAxZjgxMywKKwkweDA0MDFmMDEwLCAweDQyMDAwODAwLCAweDAwMDAwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDQzYzcsIDB4MDQwMWY3OWMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsCisJMHgwNDAxZjAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwNDcxMSwgMHgwNDAxZjAwNSwKKwkweDA0MDFmMDA0LCAweDA0MDFmMDAzLCAweDAyMDFmODAwLCAweDAwMTA0M2M3LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsIDB4NDkzM2M4NTcsIDB4NDgwN2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDNjNywgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0M2JkLCAweDVjMDI3ODAwLCAweDAyMDFmMDAwLAorCTB4MDAxMDQ3MTEsIDB4NTkzNDA0MDAsIDB4NDgwM2M4NTcsIDB4ODAwMDAxMTAsCisJMHg4MjAwMzQ4MCwgMHgwMDAwMDAwYywgMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwKKwkweDgzMzgzNTgwLCAweDAwMDAwMDE1LCAweDA0MDIwMDAyLCAweDBjMDFmMDA2LAorCTB4ODMzODM1ODAsIDB4MDAwMDAwMTYsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCisJMHgwYzAxZjAwZCwgMHgwMDEwN2U0MiwgMHgwMDEwN2U0MiwgMHgwMDEwN2U0MiwKKwkweDAwMTA3ZTQyLCAweDAwMTA3ZTQyLCAweDAwMTA3ZTQyLCAweDAwMTA5ZDExLAorCTB4MDAxMDljZTUsIDB4MDAxMDdlNDIsIDB4MDAxMDdlNDIsIDB4MDAxMDdlNDIsCisJMHgwMDEwN2U0MiwgMHgwMDEwN2U0MiwgMHgwMDEwN2U0MiwgMHgwMDEwN2U0MiwKKwkweDAwMTA3ZTQyLCAweDAwMTA3ZTQyLCAweDAwMTA3ZTQyLCAweDAwMTA5ZDExLAorCTB4MDAxMDlkMTgsIDB4MDAxMDdlNDIsIDB4MDAxMDdlNDIsIDB4MDAxMDdlNDIsCisJMHgwMDEwN2U0MiwgMHg0OTMzYzg1NywgMHg1OTljMDAxNywgMHg4YzAwMDUwYSwKKwkweDA0MDIwMDFiLCAweDgxMzY2OWMwLCAweDA0MDAwMDE5LCAweDU5MzQwMjEyLAorCTB4ODIwMDA1MDAsIDB4MDAwMGZmMDAsIDB4MDQwMDAwMTUsIDB4NTk5YzAwMTksCisJMHg4YzAwMDUwZSwgMHgwNDAyMDAxMiwgMHg0ZDNjMDAwMCwgMHg0MTdhNzgwMCwKKwkweDAyMDFmODAwLCAweDAwMTA0M2JkLCAweDVjMDI3ODAwLCAweDQyMDAwODAwLAorCTB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYzcsIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwMSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywKKwkweDAwMDAwMDAyLCAweDAyMDFmMDAwLCAweDAwMTA2NDcwLCAweDU5Y2MwMDAxLAorCTB4NTkzNDA4MDIsIDB4ODAwNDA1ODAsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsCisJMHgwMjAyMDAwMCwgMHgwMDAyMDhiNCwgMHg1OTM0NTAwMiwgMHgwMjAxZjgwMCwKKwkweDAwMTA0MGU0LCAweDQ4MmE2ODAyLCAweDAyMDFmMDAwLCAweDAwMDIwOGI0LAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NTkzMDM0MDMsIDB4ODIxODM1ODAsCisJMHgwMDAwMDAxZSwgMHgwMjAwMDAwMCwgMHgwMDAyMDhiNCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDAyMDFmODAwLCAweDAwMTA4MTgwLCAweDAyMDIwMDAwLAorCTB4MDAwMjA4YjQsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsCisJMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwgMHgwMDEwNjQ3MCwgMHg0OTNiYzg1NywKKwkweDgzMzgwNTgwLCAweDAwMDAwMDUxLCAweDA0MDIwMDBiLCAweDAyMDFmODAwLAorCTB4MDAxMDZjYjQsIDB4MDIwMjAwMDAsIDB4MDAxMDc2ZmIsIDB4NTkzMDAyMDMsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDA2ZSwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDgzMzgwNTgwLCAweDAwMDAwMDI3LCAweDA0MDAwMDE0LAorCTB4ODMzODA1ODAsIDB4MDAwMDAwNDgsIDB4MDQwMDAwMDYsIDB4ODMzODA1ODAsCisJMHgwMDAwMDAxNCwgMHgwNDAwMDAwZSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwKKwkweDAyMDFmODAwLCAweDAwMTA2Y2I0LCAweDAyMDIwMDAwLCAweDAwMTA3NmZiLAorCTB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDIwMDAwMDAsCisJMHgwMDAyMDlhNSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0OTMzYzg1NywKKwkweDU5MzAwNDAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDQ0LCAweDAyMDIxODAwLAorCTB4MDAxMDA2MTUsIDB4ODIwMDA0ODAsIDB4MDAwMDAwNDAsIDB4MDIwMDE4MDAsCisJMHgwMDEwMDYxNSwgMHg0MDAyNzAwMCwgMHg0ODAzYzg1NywgMHgwYzAxZjAwMSwKKwkweDAwMTA5ZDU4LCAweDAwMTA5ZDVhLCAweDAwMTA5ZDVhLCAweDAwMTA5ZDc1LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4MDIwMWY4MDAsIDB4MDAxMDY4ZjYsCisJMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwgMHgwNDAwMDAxNiwgMHg4MzJjMDUwMCwKKwkweDAwZmYwMDAwLCAweDA0MDAwMDEzLCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLAorCTB4NTkzMjY4MDksIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsIDB4MDQwMjAwMGQsCisJMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwYTIwMSwKKwkweDQ5N2E2MDA4LCAweDU5MzAwMjA2LCAweDgwMDAwNTQwLCAweDA0MDIwMDAzLAorCTB4NTlhODAwMzgsIDB4NDgwMjYyMDYsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsCisJMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwgMHgwMjAxZjgwMCwKKwkweDAwMTA4ZGY0LCAweDAyMDAwMDAwLCAweDAwMTA3Njk4LCAweDU5MzI1ODA4LAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsIDB4MDIwMWYwMDAsIDB4MDAxMDc2OTgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg1OTMyNTgwOCwgMHg1OTJjMDQwYSwKKwkweDhjMDAwNTAyLCAweDA0MDAwMDA3LCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LAorCTB4NDIwMjcwMDAsIDB4MDAwMDAwNDMsIDB4MDIwMWYwMDAsIDB4MDAwMjA4ZDgsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwNCwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhM2I2LCAweDAyMDAwMDAwLCAweDAwMDIwOWEzLCAweDFjMDFmMDAwLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsIDB4NGEwMjY0MDMsIDB4MDAwMDAwNDEsCisJMHg0MjAyNzgwMCwgMHg4MDAwMjA0MiwgMHgwMjAxZjAwMCwgMHgwMDAyMDg1NSwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDUxLCAweDA0MDAwMDA2LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwNDEsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsIDB4MWMwMWYwMDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDgzMSwgMHgwMjAxZjgwMCwgMHgwMDEwYTNmYSwKKwkweDAyMDFmMDAwLCAweDAwMDIwOGI0LCAweDgzMzgwNDgwLCAweDAwMDAwMDUyLAorCTB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4ODMzODA0ODAsIDB4MDAwMDAwNDksCisJMHgwMjAwMTgwMCwgMHgwMDEwMDYxNSwgMHgwYzAxZjAwMSwgMHgwMDEwOWRiZSwKKwkweDAwMTA5ZGRmLCAweDAwMTA5ZGJjLCAweDAwMTA5ZGJjLCAweDAwMTA5ZGJjLAorCTB4MDAxMDlkYmMsIDB4MDAxMDlkZGYsIDB4MDAxMDlkYmMsIDB4MDAxMDllMDEsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg1OTMyNTgwOCwgMHg1OTJjMDQwYSwKIAkweDhjMDAwNTFlLCAweDA0MDAwMDBkLCAweDgyMDAwZDAwLCAweDAwMDAwMGMwLAogCTB4ODIwNDBkODAsIDB4MDAwMDAwODAsIDB4MDQwMDAwMGQsIDB4NTkzMDA4MDQsCiAJMHg4YzA0MGQxOCwgMHgwNDAyMDAwYSwgMHg0MjAyNzAwMCwgMHgwMDAwMDA0MSwKLQkweDAyMDFmMDAwLCAweDAwMDIwODhkLCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LAotCTB4NDk3YTYyMDYsIDB4MDIwMWYwMDAsIDB4MDAwMjA2ZmQsIDB4NTkzMjU4MDgsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDljNCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywKKwkweDQ5N2E2MjA2LCAweDAyMDFmMDAwLCAweDAwMDIwODMxLCAweDU5MzI1ODA4LAogCTB4NTkyYzBjMGEsIDB4OGMwNDBkMWEsIDB4MDQwMjAwMDUsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDZmZCwgMHgwMjAxZjAwMCwgMHgwMDAyMDc3ZCwgMHgwMjAxZjgwMCwKLQkweDAwMTBhNTk3LCAweDA0MDAwN2ZhLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDZiOGEsIDB4NTkzMjU4MDgsIDB4NTkzMjY4MDksIDB4NTkzNDAyMDAsCisJMHgwMDAyMDgzMSwgMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHgwMjAxZjgwMCwKKwkweDAwMTBhM2I2LCAweDA0MDAwN2ZhLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDY4YzEsIDB4NTkzMjU4MDgsIDB4NTkzMjY4MDksIDB4NTkzNDAyMDAsCiAJMHg4YzAwMDUwZSwgMHgwNDAwMDAwZSwgMHg1OTJjMDQwYSwgMHg4MjAwMDUwMCwKIAkweDAwMDAwMGMwLCAweDgyMDAwNTgwLCAweDAwMDAwMDgwLCAweDA0MDAwMDA1LAogCTB4NTkyYzAwMGYsIDB4NTkzMDE4MTUsIDB4ODAwYzFjODAsIDB4NDgwZTYwMTUsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwMiwgMHgwNDAxZjAwZCwgMHg0MjAyODAwMCwKLQkweDAwMDAwMDA0LCAweDA0MDFmYmRlLCAweDU5MzAwMjA2LCAweDgwMDAwNTQwLAotCTB4MDQwMjAwMDQsIDB4NTlhODAwMzgsIDB4ODAwMDAwYzIsIDB4NDgwMjYyMDYsCi0JMHg0OTdhNjAwOCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHgxYzAxZjAwMCwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDA0MDFmMDBlLCAweDQyMDI4MDAwLAorCTB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMGEyMDEsIDB4NTkzMDAyMDYsCisJMHg4MDAwMDU0MCwgMHgwNDAyMDAwNCwgMHg1OWE4MDAzOCwgMHg4MDAwMDBjMiwKKwkweDQ4MDI2MjA2LCAweDQ5N2E2MDA4LCAweDRhMDI2MjAzLCAweDAwMDAwMDA3LAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4MDIwMWY4MDAsIDB4MDAxMDZjYjQsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDAyLCAweDA0MDAwNzkzLCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAogCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4NDk3YTYyMDYsIDB4MDIwMWYwMDAsCi0JMHgwMDAyMDZmZCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHg0OTdhNjIwNiwKLQkweDAyMDFmMDAwLCAweDAwMDIwNmY4LCAweDU5MzAwNDE0LCAweDhjMDAwNTFjLAotCTB4MDIwMjAwMDAsIDB4MDAwMjA4N2UsIDB4NTkzMjU4MDgsIDB4NTkyYzIwMGYsCisJMHgwMDAyMDgzMSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHg0OTdhNjIwNiwKKwkweDAyMDFmMDAwLCAweDAwMDIwODJjLCAweDU5MzAwNDE0LCAweDhjMDAwNTFjLAorCTB4MDIwMjAwMDAsIDB4MDAwMjA5YjUsIDB4NTkzMjU4MDgsIDB4NTkyYzIwMGYsCiAJMHg0MDA4MDAwMCwgMHg4MDEwMjQ4MCwgMHg1OTMwMDAxNSwgMHg4MDEwMjQwMCwKLQkweDQ4MTI2MDE1LCAweDAyMDFmMDAwLCAweDAwMDIwODdlLCAweDhjMDQwZDBlLAorCTB4NDgxMjYwMTUsIDB4MDIwMWYwMDAsIDB4MDAwMjA5YjUsIDB4OGMwNDBkMGUsCiAJMHgwNDAyMDAwYSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNiwgMHgwNDAxZjgyMywKLQkweDU5MzAwMDFmLCAweDgwMDAwNTQwLCAweDAyMDIwODAwLCAweDAwMTAwZDdjLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA2ZjgsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDIsCisJMHg1OTMwMDAxZiwgMHg4MDAwMDU0MCwgMHgwMjAyMDgwMCwgMHgwMDEwMGRjNCwKKwkweDAyMDFmMDAwLCAweDAwMDIwODJjLCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLAogCTB4MWMwMWYwMDAsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMGQ3YywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMSwgMHgwMjAwMDAwMCwKLQkweDAwMDIwODg1LCAweDA0MDFmN2Q4LCAweDU5MzAwNDE0LCAweDhjMDAwNTFjLAotCTB4MDQwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDBiNjMsIDB4MDIwMDAwMDAsCi0JMHgwMDAyMDg3NywgMHgxYzAxZjAwMCwgMHg1OTMwMDAxMSwgMHg4MDAwMDU0MCwKLQkweDA0MDIwMDA1LCAweDAyMDFmODAwLCAweDAwMTAwYjYzLCAweDAyMDAwMDAwLAotCTB4MDAwMjA4NzcsIDB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsIDB4NDgwYmM4NTcsCisJMHgwMDEwMGRjNCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMSwgMHgwMjAwMDAwMCwKKwkweDAwMDIwOWJjLCAweDA0MDFmN2Q4LCAweDU5MzAwNDE0LCAweDhjMDAwNTFjLAorCTB4MDQwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDBiYWQsIDB4MDIwMDAwMDAsCisJMHgwMDAyMDlhZSwgMHgxYzAxZjAwMCwgMHg1OTMwMDAxMSwgMHg4MDAwMDU0MCwKKwkweDA0MDIwMDA1LCAweDAyMDFmODAwLCAweDAwMTAwYmFkLCAweDAyMDAwMDAwLAorCTB4MDAwMjA5YWUsIDB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsIDB4NDgwYmM4NTcsCiAJMHg4YzA4MTUzZSwgMHgwNDAwMDAwNiwgMHg4MDA4MTA4MCwgMHg4MDA4MTAwMCwKIAkweDQyMDAwODAwLCAweDAwMDAwMDA5LCAweDA0MDFmMDAzLCAweDQyMDAwODAwLAogCTB4MDAwMDAwMTUsIDB4NDgwYTU4MGIsIDB4MWMwMWYwMDAsIDB4ODMzODA1ODAsCiAJMHgwMDAwMDAxMywgMHgwNDAwMDAwNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNCwKLQkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU5MzAwNDE0LCAweDhjMDAwNTE2LAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4MWMwMWYwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDVkOCwgMHg1OTMwMDAwOCwgMHg4MDAwMDU0MCwgMHgwMjAyMDgwMCwKLQkweDAwMTAwNWQ4LCAweDFjMDFmMDAwLCAweDU5MzAwNDE0LCAweDhjMDAwNTE2LAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4MWMwMWYwMDAsIDB4NGEwMjYyMDMsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OTMwMDQxNCwgMHg4YzAwMDUxNiwKKwkweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDFjMDFmMDAwLCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4NTkzMDAwMDgsIDB4ODAwMDA1NDAsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDYxNSwgMHgxYzAxZjAwMCwgMHg1OTMwMDQxNCwgMHg4YzAwMDUxNiwKKwkweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDFjMDFmMDAwLCAweDRhMDI2MjAzLAogCTB4MDAwMDAwMDQsIDB4NDkzYTY0MDMsIDB4NDIwMDA4MDAsIDB4ODAwMDIwMDEsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMywKLQkweDQ5M2E2NDAzLCAweDAyMDFmODAwLCAweDAwMDIwMGM5LCAweDU5MzI1ODA4LAorCTB4MDIwMWYwMDAsIDB4MDAwMjA4NTUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsCisJMHg0OTNhNjQwMywgMHgwMjAxZjgwMCwgMHgwMDAyMDBjYSwgMHg1OTMyNTgwOCwKIAkweDU5MmMwNDBhLCAweDhjMDAwNTFlLCAweDA0MDAwMDEyLCAweDgyMDAwNTAwLAogCTB4MDAwMDAwYzAsIDB4ODIwMDA1ODAsIDB4MDAwMDAwODAsIDB4MDQwMDAwMTEsCiAJMHg1OTMwMDQxNCwgMHg4YzAwMDUxMiwgMHgwNDAyMDAwYSwgMHg4YzAwMDUxMCwKIAkweDA0MDIwMDA4LCAweDU5MmMwNDBjLCAweDgwMDAwNTQwLCAweDA0MDIwMDA1LAotCTB4ODIwODBkNDAsIDB4ODAwMDMwNjUsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MjEsCi0JMHg4MjA4MGQ0MCwgMHg4MDAwMjA2NSwgMHgwMjAxZjAwMCwgMHgwMDEwNjcyMSwKLQkweDgyMDgwZDQwLCAweDgwMDAyMDQyLCAweDAyMDFmMDAwLCAweDAwMTA2NzIxLAorCTB4ODIwODBkNDAsIDB4ODAwMDMwNjUsIDB4MDIwMWYwMDAsIDB4MDAxMDY0NjYsCisJMHg4MjA4MGQ0MCwgMHg4MDAwMjA2NSwgMHgwMjAxZjAwMCwgMHgwMDEwNjQ2NiwKKwkweDgyMDgwZDQwLCAweDgwMDAyMDQyLCAweDAyMDFmMDAwLCAweDAwMTA2NDY2LAogCTB4NDkzM2M4NTcsIDB4NDkzYmM4NTcsIDB4ODMzODA0ODAsIDB4MDAwMDAwNDQsCi0JMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0MSwKLQkweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTBhMGI2LAotCTB4MDAxMGEwYzYsIDB4MDAxMGEwZGIsIDB4NTkzMjU4MDgsIDB4NTkyYzA0MGEsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHg4MzM4MDQ4MCwgMHgwMDAwMDA0MSwKKwkweDAyMDAxODAwLCAweDAwMTAwNjE1LCAweDBjMDFmMDAxLCAweDAwMTA5ZWE2LAorCTB4MDAxMDllYjYsIDB4MDAxMDllY2IsIDB4NTkzMjU4MDgsIDB4NTkyYzA0MGEsCiAJMHg4YzAwMDUxZSwgMHgwNDAwMDAxZCwgMHg4MjAwMWQwMCwgMHgwMDAwMDBjMCwKIAkweDgyMGMxZDgwLCAweDAwMDAwMGMwLCAweDA0MDAwMDE4LCAweDRhMDI2MjAzLAogCTB4MDAwMDAwMDEsIDB4NDkzYTY0MDMsIDB4NDIwMDA4MDAsIDB4ODAwMDIwNDIsCi0JMHgwMjAxZjAwMCwgMHgwMDAyMDcyMSwgMHg1OTMyNTgwOCwgMHg1OTJjMDQwYSwKKwkweDAyMDFmMDAwLCAweDAwMDIwODU1LCAweDU5MzI1ODA4LCAweDU5MmMwNDBhLAogCTB4OGMwMDA1MWUsIDB4MDQwMDAwMGQsIDB4ODIwMDFkMDAsIDB4MDAwMDAwYzAsCiAJMHg4MjBjMWQ4MCwgMHgwMDAwMDBjMCwgMHgwNDAwMDAwOCwgMHg0YTAyNjIwMywKIAkweDAwMDAwMDAxLCAweDQ5M2E2NDAzLCAweDQyMDAwODAwLCAweDgwMDAyMDAxLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3MjEsIDB4NDk3YTYwMDgsIDB4NDk3YTYyMDYsCi0JMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwgMHgwNDAxZjMxNSwgMHg1OTMyNTgwOCwKKwkweDAyMDFmMDAwLCAweDAwMDIwODU1LCAweDQ5N2E2MDA4LCAweDQ5N2E2MjA2LAorCTB4NDIwMjgwMDAsIDB4MDAwMDAwMDQsIDB4MDQwMWYzMzcsIDB4NTkzMjU4MDgsCiAJMHg1OTJjMDQwYSwgMHg4YzAwMDUxZSwgMHgwNDAwMDdmOCwgMHg4MjAwMWQwMCwKIAkweDAwMDAwMGMwLCAweDgyMGMxZDgwLCAweDAwMDAwMGMwLCAweDA0MDAwN2YzLAogCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDMsIDB4NDkzYTY0MDMsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDBjOSwgMHg4MjA4MGQ0MCwgMHg4MDAwMjA2NSwgMHgwMjAxZjAwMCwKLQkweDAwMTA2NzIxLCAweDQ5MzNjODU3LCAweDQ5M2JjODU3LCAweDgzMzgwNTgwLAorCTB4MDAwMjAwY2EsIDB4ODIwODBkNDAsIDB4ODAwMDIwNjUsIDB4MDIwMWYwMDAsCisJMHgwMDEwNjQ2NiwgMHg0OTMzYzg1NywgMHg0OTNiYzg1NywgMHg4MzM4MDU4MCwKIAkweDAwMDAwMDg1LCAweDA0MDAwMDA2LCAweDgzMzgwNTgwLCAweDAwMDAwMDg4LAotCTB4MDQwMDAwMGEsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4NGEwMjYyMDMsCisJMHgwNDAwMDAwYSwgMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0YTAyNjIwMywKIAkweDAwMDAwMDA5LCAweDQ5M2E2NDAzLCAweDQyMDAwODAwLCAweDgwMDAwMDRiLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3MjEsIDB4NGQxYzAwMDAsIDB4ODEzNjY5YzAsCi0JMHgwNDAwMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwYTU5MiwgMHgwNDAyMDA0NCwKKwkweDAyMDFmMDAwLCAweDAwMDIwODU1LCAweDRkMWMwMDAwLCAweDgxMzY2OWMwLAorCTB4MDQwMDAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMGEzYjAsIDB4MDQwMjAwNDQsCiAJMHg1OWNjMTQwNCwgMHgwNDAxZjg0NiwgMHgwNDAwMDAxOCwgMHg1OTFjMDQwNiwKIAkweDgyMDAwNTAwLCAweDAwMDAwMDFmLCAweDgyMDAyNTgwLCAweDAwMDAwMDA2LAogCTB4MDQwMDAwMDcsIDB4ODIwMDI1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMmUsCiAJMHg4MjAwMjU4MCwgMHgwMDAwMDAxMSwgMHgwNDAyMDAwYywgMHg0OTdhM2EwNSwKLQkweDQyMDAyMDAwLCAweDAwMDAwMDU0LCAweDAyMDFmODAwLCAweDAwMTA3YTRhLAorCTB4NDIwMDIwMDAsIDB4MDAwMDAwNTQsIDB4MDIwMWY4MDAsIDB4MDAxMDc3ZDEsCiAJMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHg0OTNhNjQwMywgMHgwMjAxZjgwMCwKLQkweDAwMTBhOTc0LCAweDA0MDFmMDJjLCAweDAyMDFmODAwLCAweDAwMTAzYjI1LAorCTB4MDAxMGE3OWIsIDB4MDQwMWYwMmMsIDB4MDIwMWY4MDAsIDB4MDAxMDM5M2UsCiAJMHgwNDAwMDAwNCwgMHg0MjAyMzgwMCwgMHhmZmZmZmZmZiwgMHgwNDAxZjdmMSwKIAkweDgxMzY2OWMwLCAweDA0MDIwMDA5LCAweDU5Y2MwMDAxLCAweDAyMDFmODAwLAotCTB4MDAxMDVjOWEsIDB4MDQwMjAwMWUsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1YTYsCisJMHgwMDEwNTliOSwgMHgwNDAyMDAxZSwgMHgwMjAxZjgwMCwgMHgwMDEwNDNmYywKIAkweDA0MDIwMDFiLCAweDQ5MzY2MDA5LCAweDRhMDI2NDAzLCAweDAwMDAwMDg3LAogCTB4NTljYzEyMDQsIDB4ODIwODE1ODAsIDB4MDAwMGZmZmYsIDB4MDQwMjAwMDMsCiAJMHg0YTAyNjQwMywgMHgwMDAwMDA4NiwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwKLQkweDQyMDAwODAwLCAweDgwMDAwMDQwLCAweDAyMDFmODAwLCAweDAwMDIwNzIxLAorCTB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4NTUsCiAJMHgwNDAxZjAwZCwgMHg1OTFjMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywKIAkweDA0MDIwN2RlLCAweDRkMzAwMDAwLCAweDQxMWU2MDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDc5MTEsIDB4NWMwMjYwMDAsIDB4MDQwMWY3ZDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNzkxMSwgMHg1YzAyMzgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKLQkweDQ4MGJjODU3LCAweDQyMDAyODAwLCAweDAwMTBkMWMwLCAweDQxMzAwMDAwLAorCTB4MDAxMDc2OTgsIDB4NWMwMjYwMDAsIDB4MDQwMWY3ZDgsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzY5OCwgMHg1YzAyMzgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKKwkweDQ4MGJjODU3LCAweDQyMDAyODAwLCAweDAwMTBjZmMwLCAweDQxMzAwMDAwLAogCTB4ODAxNDA1ODAsIDB4MDQwMDAwMTcsIDB4NTgxNDAyMDMsIDB4ODIwMDA1ODAsCiAJMHgwMDAwMDAwMCwgMHgwNDAwMDAxMywgMHg1ODE0MDIwMiwgMHg4MDA4MDU4MCwKIAkweDA0MDIwMDEwLCAweDU4MTQxYzA2LCAweDgyMGMwNTgwLCAweDAwMDAwMDA1LApAQCAtMTAzNzUsNjQ2ICsxMDI0Myw2NjAgQEAKIAkweDA0MDFmN2YyLCAweDU4MTAyMDFlLCAweDA0MDFmN2YwLCAweDQwMTYzODAwLAogCTB4ODEzMDA1NDAsIDB4MDQwMWYwMDIsIDB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsCiAJMHg1ODE0MTgwNywgMHg4YzBjMWQxMCwgMHgwNDAyMDdlYSwgMHgwNDAxZjdlMSwKLQkweDQ5MzNjODU3LCAweDQ5M2JjODU3LCAweDgzMzgwNTgwLCAweDAwMDAwMDEzLAotCTB4MDQwMjAwMGUsIDB4NTkzMDA0MDMsIDB4ODIwMDBjODAsIDB4MDAwMDAwODUsCi0JMHgwMjAwMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMGM4MCwgMHgwMDAwMDA5MywKLQkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDgyMDAwNDgwLCAweDAwMDAwMDg1LAotCTB4NDgwM2M4NTcsIDB4MGMwMWYwMTgsIDB4ODMzODA1ODAsIDB4MDAwMDAwMjcsCi0JMHgwNDAwMDAwNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDAxNCwgMHgwMjAyMDAwMCwKLQkweDAwMTA3OTc0LCAweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDU5MzI1ODA4LAotCTB4ODEyZTU5YzAsIDB4MDIwMDAwMDAsIDB4MDAxMDc5MTEsIDB4NGEwMjVhMDYsCi0JMHgwMDAwMDAzMSwgMHg0YTAyNTgxMSwgMHgwMDAwMDAwNCwgMHg0YTAyNTgxMiwKLQkweDAwMDAwMGZmLCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmMDAwLAotCTB4MDAxMDc5MTEsIDB4MDAxMGExYjcsIDB4MDAxMGExYmUsIDB4MDAxMGExYmUsCi0JMHgwMDEwYTFiNywgMHgwMDEwYTFiNywgMHgwMDEwYTFiNywgMHgwMDEwYTFiNywKLQkweDAwMTBhMWI3LCAweDAwMTBhMWI3LCAweDAwMTBhMWI3LCAweDAwMTBhMWI3LAotCTB4MDAxMGExYjcsIDB4MDAxMGExYjcsIDB4MDAxMGExYjksIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDVkOCwgMHg1OTMyNTgwOCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwKLQkweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmMDAwLCAweDAwMTA3OTExLAotCTB4NDkzM2M4NTcsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NzMsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYWE0NywgMHgwMjAxZjgwMCwgMHgwMDEwYTVkZiwgMHg0OTdhNjIwNSwKLQkweDQyMDI4MDAwLCAweDAwMDAwMDBiLCAweDA0MDFmODA3LCAweDRhMDI2NDA2LAotCTB4MDAwMDAwMDYsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4NDk3YTYyMDYsCi0JMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0OTQzYzg1NywgMHg1OTMwMDQwNiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDA3LCAweDA0MDIwMDAyLCAweDFjMDFmMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDZjNTUsIDB4NGRmMDAwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOGNlNSwgMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwKLQkweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTBhMjA1LCAweDAwMTBhMjA5LAotCTB4MDAxMGExZjAsIDB4MDAxMGEyMTcsIDB4MDAxMGEyMmEsIDB4MDAxMGExZjAsCi0JMHgwMDEwYTFmMCwgMHgwMDEwYTFmMCwgMHgwMDEwYTFmMCwgMHgwMDEwYTFmMCwKLQkweDAwMTBhMWYwLCAweDAwMTBhMWYwLCAweDAwMTBhMWYwLCAweDAwMTBhMWYwLAotCTB4NGQ0MDAwMDAsIDB4NTkzMDAwMWYsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDUsCi0JMHg0MTQwMDgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwMGQ3YywgMHg0MDA2ODAwMCwKLQkweDRkMmMwMDAwLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAotCTB4MDQwMjA5ZjMsIDB4NGM1YzAwMDAsIDB4NTkzMGI4MDksIDB4MDIwMWY4MDAsCi0JMHgwMDEwNzkxMSwgMHg0ODVlNjAwOSwgMHg1YzAwYjgwMCwgMHg1YzAyNTgwMCwKLQkweDVjMDI4MDAwLCAweDVjMDNlMDAwLCAweDAyMDAwMDAwLCAweDAwMTA2YzRiLAotCTB4MWMwMWYwMDAsIDB4NTk4YzAwMGQsIDB4ODEzMDA1ODAsIDB4MDQwMjAwMDQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmU4ZSwgMHgwNDAyMDAxNiwgMHgwMjAxZjgwMCwKLQkweDAwMTA2OGQzLCAweDA0MDAwN2RmLCAweDAyMDFmODAwLCAweDAwMTA2YjZjLAotCTB4MDQwMDAwMTAsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOGNkNiwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmU2MiwKLQkweDA0MDIwMDA4LCAweDAyMDFmODAwLCAweDAwMTA2N2FlLCAweDA0MDAwN2QxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDZiNmMsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCi0JMHg1OTMwMDIwMywgMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwKLQkweDAwMTAwNWQ4LCAweDBjMDFmN2I5LCAweDAyMDFmODAwLCAweDAwMTAwZTk5LAotCTB4MDQwMWY3YzQsIDB4NDkzM2M4NTcsIDB4NGQ0NDAwMDAsIDB4NGQzNDAwMDAsCi0JMHg1OWNjMDAwNywgMHgwMjAxZjgwMCwgMHgwMDEwNWM5YSwgMHgwMjAwMDgwMCwKLQkweDAwMDIwMjQ1LCAweDA0MDIwMDFhLCAweDU5MzAwMDA5LCAweDRjMDAwMDAwLAotCTB4NDkzNjYwMDksIDB4NDIwMDMwMDAsIDB4MDAwMDAwMGIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwYTk0MiwgMHg0MjAwMDAwMCwgMHgwMDEwYjg2MSwgMHgwMjAxZjgwMCwKLQkweDAwMTBhYTQ3LCAweDRkM2MwMDAwLCAweDRkNDAwMDAwLCAweDQyMDI4MDAwLAotCTB4MDAwMDAwMjksIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDIwM2MsCi0JMHg1YzAyODAwMCwgMHg1YzAyNzgwMCwgMHg1YzAwMDAwMCwgMHg0ODAyNjAwOSwKLQkweDU5Y2MwMDA3LCAweDQ4MDI2ODAyLCAweDgwMDAwNTgwLCAweDVjMDI2ODAwLAotCTB4NWMwMjg4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NGMwNDAwMDAsCi0JMHg1OWE4MDAxNiwgMHg4MjAwMDU4MCwgMHgwMDAwMDA3NCwgMHgwNDAyMDA0MCwKLQkweDU5Y2MwYTA4LCAweDgyMDQwNDgwLCAweDAwMDAwMTAwLCAweDA0MDAxMDMzLAotCTB4NTljYzBjMDgsIDB4ODIwNDA1MDAsIDB4MDAwMDgwMDAsIDB4MDQwMDAwMzUsCi0JMHg1OWE4MDAzMiwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwOSwgMHg1OTMwMTAwOSwKLQkweDU4MDgwMjEyLCAweDgyMDAwNTAwLCAweDAwMDBmZjAwLCAweDA0MDAwMDA0LAotCTB4ODIwNDA1MDAsIDB4MDAwMDA4MDAsIDB4MDQwMDAwMmEsIDB4NTljYzBjMDksCi0JMHg4MDA0MDg0MCwgMHgwNDAwMTAyNCwgMHg1OWE4MDgyNiwgMHg4YzA0MGQwNiwKLQkweDA0MDAwMDA0LCAweDU5Y2MwYzBmLCAweDhjMDQwZDFlLCAweDA0MDIwMDEyLAotCTB4NTljYzBhMTcsIDB4ODAwNDA5YzAsIDB4MDQwMjAwMTIsIDB4NTljYzBhMTgsCi0JMHg4MjA0MDQ4MCwgMHgwMDAwMDEwMCwgMHgwNDAwMTAxNCwgMHg1OWNjMGMxOCwKLQkweDgwMDQwOWMwLCAweDA0MDIwMDBlLCAweDU5Y2MwYzE5LCAweDgwMDQwODQwLAotCTB4MDQwMDEwMTEsIDB4NTljYzBjMWEsIDB4ODAwNDA4NDAsIDB4MDQwMDEwMTEsCi0JMHgwNDAxZjAxOCwgMHg0YTAyNjIxYSwgMHgwMDAwMDEwMCwgMHgwNDAxZjAxMiwKLQkweDRhMDI2MjFhLCAweDAwMDAwMzAwLCAweDA0MDFmMDBmLCAweDRhMDI2MjFhLAotCTB4MDAwMDA1MDAsIDB4MDQwMWYwMGMsIDB4NGEwMjYyMWEsIDB4MDAwMDA3MDAsCi0JMHgwNDAxZjAwOSwgMHg0YTAyNjIxYSwgMHgwMDAwMDkwMCwgMHgwNDAxZjAwNiwKLQkweDRhMDI2MjFhLCAweDAwMDAwZjAwLCAweDA0MDFmMDAzLCAweDRhMDI2MjFhLAotCTB4MDAwMDJkMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MDQwMWYwMDIsCi0JMHg4MDAwMDU4MCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg1OWNjMDQwNywKLQkweDQ4MDNjODU3LCAweDgyMDAwNTgwLCAweDAwMDAwODAwLCAweDA0MDAwMDAzLAotCTB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCi0JMHg0YzA0MDAwMCwgMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwgMHg0YzU4MDAwMCwKLQkweDU5Y2MwMDBjLCAweDAyMDFmODAwLCAweDAwMTA1YzlhLCAweDAyMDAwODAwLAotCTB4MDAwMjAyNDUsIDB4MDQwMjAwMTIsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMDgsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAxMywgMHgwNDAyMDAwZSwgMHg1OTMwMDQwMywKKwkweDQ4MDNjODU3LCAweDgyMDAwYzgwLCAweDAwMDAwMDg1LCAweDAyMDAxODAwLAorCTB4MDAxMDA2MTUsIDB4ODIwMDBjODAsIDB4MDAwMDAwOTMsIDB4MDIwMjE4MDAsCisJMHgwMDEwMDYxNSwgMHg4MjAwMDQ4MCwgMHgwMDAwMDA4NSwgMHgwYzAxZjAxOSwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDI3LCAweDA0MDAwMDA1LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTQsIDB4MDIwMjAwMDAsIDB4MDAxMDc2ZmIsIDB4NDkzYmM4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwgMHg1OTMyNTgwOCwgMHg4MTJlNTljMCwKKwkweDAyMDAwMDAwLCAweDAwMTA3Njk4LCAweDRhMDI1YTA2LCAweDAwMDAwMDMxLAorCTB4NGEwMjU4MTEsIDB4MDAwMDAwMDQsIDB4NGEwMjU4MTIsIDB4MDAwMDAwZmYsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwMjAxZjAwMCwgMHgwMDEwNzY5OCwKKwkweDAwMTA5ZmE2LCAweDAwMTA5ZmFkLCAweDAwMTA5ZmFkLCAweDAwMTA5ZmE2LAorCTB4MDAxMDlmYTYsIDB4MDAxMDlmYTYsIDB4MDAxMDlmYTYsIDB4MDAxMDlmYTYsCisJMHgwMDEwOWZhNiwgMHgwMDEwOWZhNiwgMHgwMDEwOWZhNiwgMHgwMDEwOWZhNiwKKwkweDAwMTA5ZmE2LCAweDAwMTA5ZmE4LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAorCTB4NTkzMjU4MDgsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDM4MSwgMHgwMjAxZjAwMCwgMHgwMDAyMDhiNCwgMHg0OTMzYzg1NywKKwkweDQyMDAwMDAwLCAweDAwMTBiNjcyLCAweDAyMDFmODAwLCAweDAwMTBhODZlLAorCTB4MDIwMWY4MDAsIDB4MDAxMGEzZmEsIDB4NDk3YTYyMDUsIDB4NDIwMjgwMDAsCisJMHgwMDAwMDAwYiwgMHgwNDAxZjgwNywgMHg0YTAyNjQwNiwgMHgwMDAwMDAwNiwKKwkweDRhMDI2MjAzLCAweDAwMDAwMDA3LCAweDQ5N2E2MjA2LCAweDFjMDFmMDAwLAorCTB4NDkzM2M4NTcsIDB4NDk0M2M4NTcsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwNywgMHgwNDAyMDAwMiwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMTA2OThjLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMTA4YTk5LAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHgwYzAxZjAwMSwgMHgwMDEwOWZmNCwgMHgwMDEwOWZmOCwgMHgwMDEwOWZkZiwKKwkweDAwMTBhMDA2LCAweDAwMTBhMDE5LCAweDAwMTA5ZmRmLCAweDAwMTA5ZmRmLAorCTB4MDAxMDlmZGYsIDB4MDAxMDlmZGYsIDB4MDAxMDlmZGYsIDB4MDAxMDlmZGYsCisJMHgwMDEwOWZkZiwgMHgwMDEwOWZkZiwgMHgwMDEwOWZkZiwgMHg0ZDQwMDAwMCwKKwkweDU5MzAwMDFmLCAweDgwMDAwNTQwLCAweDA0MDAwMDA1LCAweDQxNDAwODAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDBkYzQsIDB4NDAwNjgwMDAsIDB4NGQyYzAwMDAsCisJMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwgMHgwNDAyMGExNiwKKwkweDRjNWMwMDAwLCAweDU5MzBiODA5LCAweDAyMDFmODAwLCAweDAwMTA3Njk4LAorCTB4NDg1ZTYwMDksIDB4NWMwMGI4MDAsIDB4NWMwMjU4MDAsIDB4NWMwMjgwMDAsCisJMHg1YzAzZTAwMCwgMHgwMjAwMDAwMCwgMHgwMDEwNjk4MiwgMHgxYzAxZjAwMCwKKwkweDU5OGMwMDBkLCAweDgxMzAwNTgwLCAweDA0MDIwMDA0LCAweDAyMDFmODAwLAorCTB4MDAxMDZiZTIsIDB4MDQwMjAwMTYsIDB4MDIwMWY4MDAsIDB4MDAxMDY2MTksCisJMHgwNDAwMDdkZiwgMHgwMjAxZjgwMCwgMHgwMDEwNjhhMywgMHgwNDAwMDAxMCwKKwkweDAyMDFmODAwLCAweDAwMTAwNjE1LCAweDAyMDFmODAwLCAweDAwMTA4YThhLAorCTB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsIDB4MDAxMDZiYjIsIDB4MDQwMjAwMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNjRmNiwgMHgwNDAwMDdkMSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2OGEzLCAweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDU5MzAwMjAzLAorCTB4ODIwMDBjODAsIDB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHgwYzAxZjdiOSwgMHgwMjAxZjgwMCwgMHgwMDEwMGVlNCwgMHgwNDAxZjdjNCwKKwkweDQ5MzNjODU3LCAweDRkNDQwMDAwLCAweDRkMzQwMDAwLCAweDU5Y2MwMDA3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDU5YjksIDB4MDIwMDA4MDAsIDB4MDAwMjAyNjcsCisJMHgwNDAyMDAxYSwgMHg1OTMwMDAwOSwgMHg0YzAwMDAwMCwgMHg0OTM2NjAwOSwKKwkweDQyMDAzMDAwLCAweDAwMDAwMDBiLCAweDAyMDFmODAwLCAweDAwMTBhNzY2LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2NjAsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg0ZDNjMDAwMCwgMHg0ZDQwMDAwMCwgMHg0MjAyODAwMCwgMHgwMDAwMDAyOSwKKwkweDQxN2E3ODAwLCAweDAyMDFmODAwLCAweDAwMTAxZGUyLCAweDVjMDI4MDAwLAorCTB4NWMwMjc4MDAsIDB4NWMwMDAwMDAsIDB4NDgwMjYwMDksIDB4NTljYzAwMDcsCisJMHg0ODAyNjgwMiwgMHg4MDAwMDU4MCwgMHg1YzAyNjgwMCwgMHg1YzAyODgwMCwKKwkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjMDQwMDAwLCAweDU5YTgwMDE2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwNzQsIDB4MDQwMjAwNDAsIDB4NTljYzBhMDgsCisJMHg4MjA0MDQ4MCwgMHgwMDAwMDEwMCwgMHgwNDAwMTAzMywgMHg1OWNjMGMwOCwKKwkweDgyMDQwNTAwLCAweDAwMDA4MDAwLCAweDA0MDAwMDM1LCAweDU5YTgwMDMyLAorCTB4ODAwMDA1NDAsIDB4MDQwMjAwMDksIDB4NTkzMDEwMDksIDB4NTgwODAyMTIsCisJMHg4MjAwMDUwMCwgMHgwMDAwZmYwMCwgMHgwNDAwMDAwNCwgMHg4MjA0MDUwMCwKKwkweDAwMDAwODAwLCAweDA0MDAwMDJhLCAweDU5Y2MwYzA5LCAweDgwMDQwODQwLAorCTB4MDQwMDEwMjQsIDB4NTlhODA4MjYsIDB4OGMwNDBkMDYsIDB4MDQwMDAwMDQsCisJMHg1OWNjMGMwZiwgMHg4YzA0MGQxZSwgMHgwNDAyMDAxMiwgMHg1OWNjMGExNywKKwkweDgwMDQwOWMwLCAweDA0MDIwMDEyLCAweDU5Y2MwYTE4LCAweDgyMDQwNDgwLAorCTB4MDAwMDAxMDAsIDB4MDQwMDEwMTQsIDB4NTljYzBjMTgsIDB4ODAwNDA5YzAsCisJMHgwNDAyMDAwZSwgMHg1OWNjMGMxOSwgMHg4MDA0MDg0MCwgMHgwNDAwMTAxMSwKKwkweDU5Y2MwYzFhLCAweDgwMDQwODQwLCAweDA0MDAxMDExLCAweDA0MDFmMDE4LAorCTB4NGEwMjYyMWEsIDB4MDAwMDAxMDAsIDB4MDQwMWYwMTIsIDB4NGEwMjYyMWEsCisJMHgwMDAwMDMwMCwgMHgwNDAxZjAwZiwgMHg0YTAyNjIxYSwgMHgwMDAwMDUwMCwKKwkweDA0MDFmMDBjLCAweDRhMDI2MjFhLCAweDAwMDAwNzAwLCAweDA0MDFmMDA5LAorCTB4NGEwMjYyMWEsIDB4MDAwMDA5MDAsIDB4MDQwMWYwMDYsIDB4NGEwMjYyMWEsCisJMHgwMDAwMGYwMCwgMHgwNDAxZjAwMywgMHg0YTAyNjIxYSwgMHgwMDAwMmQwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDA0MDFmMDAyLCAweDgwMDAwNTgwLAorCTB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NTljYzA0MDcsIDB4NDgwM2M4NTcsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDgwMCwgMHgwNDAwMDAwMywgMHg0YTAyNjIxYSwKKwkweDAwMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjNTgwMDAwLAorCTB4NTljYzAwMGMsIDB4NTkzNDA4MDIsIDB4ODIwNDBkMDAsIDB4MDBmZmZmZmYsCisJMHg4MDA0MDU4MCwgMHgwNDAyMDAxMiwgMHg4M2NjMTQwMCwgMHgwMDAwMDAwOCwKIAkweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDgzMzQxYzAwLCAweDAwMDAwMDA2LAotCTB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsIDB4MDQwMjAwMDksIDB4ODNjYzE0MDAsCisJMHgwMjAxZjgwMCwgMHgwMDEwODJmZiwgMHgwNDAyMDAwOSwgMHg4M2NjMTQwMCwKIAkweDAwMDAwMDBhLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLCAweDgzMzQxYzAwLAotCTB4MDAwMDAwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsIDB4NWMwMGIwMDAsCi0JMHg1YzAwMTgwMCwgMHg1YzAwMTAwMCwgMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDRjMDAwMDAwLCAweDRjMDQwMDAwLCAweDRjMDgwMDAwLAotCTB4NGMwYzAwMDAsIDB4NGM1ODAwMDAsIDB4NTljYzAwMDEsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNWM5YSwgMHgwMjAwMDgwMCwgMHgwMDAyMDI0NSwgMHgwNDAyMDAxNCwKLQkweDgzY2MxNDAwLCAweDAwMDAwMDBiLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAotCTB4ODMzNDFjMDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsIDB4MDAxMDg1NWEsCi0JMHgwNDAyMDAwYywgMHg4M2NjMTQwMCwgMHgwMDAwMDAwZCwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDAyLCAweDgzMzQxYzAwLCAweDAwMDAwMDA4LCAweDAyMDFmODAwLAotCTB4MDAxMDg1NWEsIDB4MDQwMDAwMTQsIDB4NDkzM2M4NTYsIDB4NDkzM2M4NTYsCi0JMHg0OTMzYzg1NywgMHg1OTM0MDAwOSwgMHg0ODAzYzg1NywgMHg1OTM0MDAwZSwKLQkweDQ4MDNjODU3LCAweDU5MzQwMDA4LCAweDQ4MDNjODU3LCAweDU5MzQwMDBkLAotCTB4NDgwM2M4NTcsIDB4NTkzNDAwMDcsIDB4NDgwM2M4NTcsIDB4NTkzNDAwMGMsCi0JMHg0ODAzYzg1NywgMHg1OTM0MDAwNiwgMHg0ODAzYzg1NywgMHg1OTM0MDAwYiwKLQkweDQ4MDNjODU3LCAweDVjMDBiMDAwLCAweDVjMDAxODAwLCAweDVjMDAxMDAwLAotCTB4NWMwMDA4MDAsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsCi0JMHg0OTQ3Yzg1NywgMHg0OTQzYzg1NywgMHg0YzYwMDAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2YzU1LCAweDRkZjAwMDAwLCAweDRkMmMwMDAwLCAweDRkMzAwMDAwLAotCTB4NGQzNDAwMDAsIDB4NDEzMGMwMDAsIDB4NDIwMjYwMDAsIDB4MDAxMGQxYzAsCisJMHgwMDAwMDAwOCwgMHgwMjAxZjgwMCwgMHgwMDEwODJmZiwgMHg1YzAwYjAwMCwKKwkweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDRjNTgwMDAwLCAweDgzY2MxNDAwLAorCTB4MDAwMDAwMGIsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODMzNDFjMDAsCisJMHgwMDAwMDAwNiwgMHgwMjAxZjgwMCwgMHgwMDEwODJmZiwgMHgwNDAyMDAwYywKKwkweDgzY2MxNDAwLCAweDAwMDAwMDBkLCAweDQyMDBiMDAwLCAweDAwMDAwMDAyLAorCTB4ODMzNDFjMDAsIDB4MDAwMDAwMDgsIDB4MDIwMWY4MDAsIDB4MDAxMDgyZmYsCisJMHgwNDAwMDAxNCwgMHg0OTMzYzg1NiwgMHg0OTMzYzg1NiwgMHg0OTMzYzg1NywKKwkweDU5MzQwMDA5LCAweDQ4MDNjODU3LCAweDU5MzQwMDBlLCAweDQ4MDNjODU3LAorCTB4NTkzNDAwMDgsIDB4NDgwM2M4NTcsIDB4NTkzNDAwMGQsIDB4NDgwM2M4NTcsCisJMHg1OTM0MDAwNywgMHg0ODAzYzg1NywgMHg1OTM0MDAwYywgMHg0ODAzYzg1NywKKwkweDU5MzQwMDA2LCAweDQ4MDNjODU3LCAweDU5MzQwMDBiLCAweDQ4MDNjODU3LAorCTB4NWMwMGIwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NDk0N2M4NTcsCisJMHg0OTQzYzg1NywgMHg0YzYwMDAwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjk4YywKKwkweDRkZjAwMDAwLCAweDRkMmMwMDAwLCAweDRkMzAwMDAwLCAweDRkMzQwMDAwLAorCTB4MDQwMWY4ZDgsIDB4NDEzMGMwMDAsIDB4NDIwMjYwMDAsIDB4MDAxMGNmYzAsCiAJMHg1OWE4MDAwZSwgMHg4MDYwYzFjMCwgMHgwNDAwMDAwNSwgMHg4MjYwMTU4MCwKLQkweDAwMTBiZGU5LCAweDA0MDAwMDAyLCAweDgwMDAwMDQwLCAweDgxNjQwNDgwLAotCTB4MDQwMjEwYmUsIDB4NDA2MDAwMDAsIDB4ODEzMDA1ODAsIDB4MDQwMDAwYjYsCi0JMHgwNDAxZjk3YSwgMHgwNDAyMDBiNCwgMHg1OTMyNjgwOSwgMHg1OTMwMDQwNiwKLQkweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LAotCTB4MGMwMWYwMDEsIDB4MDAxMGEzY2QsIDB4MDAxMGEzMzgsIDB4MDAxMGEzNTEsCi0JMHgwMDEwYTM1YywgMHgwMDEwYTMzNSwgMHgwMDEwYTM0YywgMHgwMDEwYTM4NywKLQkweDAwMTBhM2NkLCAweDAwMTBhMzMzLCAweDAwMTBhMzlhLCAweDAwMTBhM2FlLAotCTB4MDAxMGEzMzMsIDB4MDAxMGEzMzMsIDB4MDAxMGEzMzMsIDB4MDAxMGEzMzMsCi0JMHgwMDEwYTNjZCwgMHgwMDEwYTNjNCwgMHgwMDEwYTNiYywgMHgwMjAxZjgwMCwKLQkweDAwMTAwNWQ4LCAweDU5MzAwNDIwLCAweDhjMDAwNTAwLCAweDA0MDIwMDk2LAotCTB4NTkzMDA0MDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwNDMsIDB4MDQwMDAwOTIsCi0JMHgwMjAxZjgwMCwgMHgwMDEwOTEzNCwgMHgwNDAwMDAwNywgMHgwMjAxZjgwMCwKLQkweDAwMTA5MTRlLCAweDA0MDIwMDhhLCAweDAyMDFmODAwLCAweDAwMTA4MDFjLAotCTB4MDQwMWYwODcsIDB4MDIwMWY4MDAsIDB4MDAxMDIwNzQsIDB4MDIwMWY4MDAsCi0JMHgwMDEwOTE0ZSwgMHgwMjAwMDgwMCwgMHgwMDEwODAxYywgMHgwNDAxZjA4MCwKLQkweDhkM2U3ZDE4LCAweDA0MDAwMDA0LCAweDU5MzAwNDIwLCAweDhjMDAwNTAwLAotCTB4MDQwMjAwN2QsIDB4NTkzMjU4MDgsIDB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsCi0JMHgwNDAwMDA3NywgMHg0OTQyNWEwNiwgMHg0OTdhNWMwOSwgMHgwMjAxZjgwMCwKLQkweDAwMDIwMmRhLCAweDAyMDFmODAwLCAweDAwMTA5MTJhLCAweDA0MDFmMDcwLAotCTB4OGQzZTdkMDAsIDB4MDQwMDAwMDcsIDB4NTkzMDAwMTcsIDB4ODE0ODA1ODAsCi0JMHgwNDAyMDA2ZCwgMHg1OTMwMDAxOCwgMHg4MTRjMDU4MCwgMHgwNDAyMDA2YSwKKwkweDAwMTBiYmU4LCAweDA0MDAwMDAyLCAweDgwMDAwMDQwLCAweDgxNjQwNDgwLAorCTB4MDQwMjEwYzQsIDB4NDA2MDAwMDAsIDB4ODEzMDA1ODAsIDB4MDQwMDAwYmMsCisJMHgwNDAxZjliYywgMHgwNDAyMDBiYSwgMHg1OTMyNjgwOSwgMHg1OTMwMDQwNiwKKwkweDgyMDAwYzgwLCAweDAwMDAwMDEyLCAweDAyMDIxODAwLCAweDAwMTAwNjE1LAorCTB4MGMwMWYwMDEsIDB4MDAxMGExYWYsIDB4MDAxMGExMTgsIDB4MDAxMGExMzMsCisJMHgwMDEwYTEzZSwgMHgwMDEwYTExMSwgMHgwMDEwYTEyYywgMHgwMDEwYTE2OSwKKwkweDAwMTBhMWFmLCAweDAwMTBhMTBmLCAweDAwMTBhMTdjLCAweDAwMTBhMTkwLAorCTB4MDAxMGExMGYsIDB4MDAxMGExMGYsIDB4MDAxMGExMGYsIDB4MDAxMGExMGYsCisJMHgwMDEwYTFhZiwgMHgwMDEwYTFhNiwgMHgwMDEwYTE5ZSwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDhkM2U3ZDE4LCAweDA0MDAwMDAzLCAweDhkM2U3ZDE2LAorCTB4MDQwMDAwMDQsIDB4NTkzMDA0MjAsIDB4OGMwMDA1MDAsIDB4MDQwMjAwOTgsCisJMHg1OTMwMDQwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDA0MywgMHgwNDAwMDA5NCwKKwkweDAyMDFmODAwLCAweDAwMTA4ZWYxLCAweDA0MDAwMDA3LCAweDAyMDFmODAwLAorCTB4MDAxMDhmMDUsIDB4MDQwMjAwOGMsIDB4MDIwMWY4MDAsIDB4MDAxMDdkYTYsCisJMHgwNDAxZjA4OSwgMHgwMjAxZjgwMCwgMHgwMDEwMWUxYiwgMHgwMjAxZjgwMCwKKwkweDAwMTA4ZjA1LCAweDAyMDAwODAwLCAweDAwMTA3ZGE2LCAweDA0MDFmMDgyLAorCTB4OGQzZTdkMTgsIDB4MDQwMDAwMDMsIDB4OGQzZTdkMTYsIDB4MDQwMDAwMDQsCisJMHg1OTMwMDQyMCwgMHg4YzAwMDUwMCwgMHgwNDAyMDA3ZCwgMHg1OTMyNTgwOCwKKwkweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDc3LCAweDQ5NDI1YTA2LAorCTB4NDk3YTVjMDksIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4MDIwMWY4MDAsCisJMHgwMDEwOGVlNywgMHgwNDAxZjA3MCwgMHg4ZDNlN2QwMCwgMHgwNDAwMDAwNywKKwkweDU5MzAwMDE3LCAweDgxNDgwNTgwLCAweDA0MDIwMDZkLCAweDU5MzAwMDE4LAorCTB4ODE0YzA1ODAsIDB4MDQwMjAwNmEsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDAwNCwgMHgwMjAwMDgwMCwgMHgwMDEwMGVlNCwgMHg1OTMyNTgwOCwKKwkweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDVmLCAweDRhMDI1YTA0LAorCTB4MDAwMDAxMDMsIDB4NTkzMDAwMDQsIDB4ODQwMDA1NWMsIDB4NDgwMjYwMDQsCisJMHg1OTJjMDQwOCwgMHg4YzAwMDUxMiwgMHgwNDAwMDAwNywgMHg0ZDJjMDAwMCwKKwkweDU5MmMwMDA5LCAweDQwMDI1ODAwLCAweDAyMDFmODAwLCAweDAwMTAwODQzLAorCTB4NWMwMjU4MDAsIDB4NDk0MjVhMDYsIDB4NDk3YTVjMDksIDB4MDQwMWZiNGYsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTM2NSwgMHgwMjAxZjgwMCwgMHgwMDEwOGY3ZCwKKwkweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA4ZWU3LAorCTB4MDQwMWYwNDUsIDB4OGQzZTdkMTgsIDB4MDQwMDAwNDUsIDB4NTkzMDAyMDMsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwMjAwMDgwMCwgMHgwMDEwMGVlNCwKKwkweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LCAweDA0MDAwMDNhLAorCTB4NDk0MjVhMDYsIDB4NDk3YTVjMDksIDB4MDQwMWZiMzgsIDB4MDIwMWY4MDAsCisJMHgwMDEwOTM2NSwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwNDAxZjAzMiwKKwkweDAyMDFmODAwLCAweDAwMTA2MDBlLCAweDA0MDAwMDMxLCAweDU5MzAwMjAzLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMDAwMmQsIDB4NTkzMDAyMDMsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywgMHgwNDAyMDAyOSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2OGMxLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA4ZGY0LAorCTB4MDQwMDAwMjEsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4MDQwMWYwMWUsCiAJMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwMjAwMDgwMCwKLQkweDAwMTAwZTk5LCAweDU5MzI1ODA4LCAweDAyMDFmODAwLCAweDAwMTA5MDM3LAotCTB4MDQwMDAwNWYsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4NTkzMDAwMDQsCi0JMHg4NDAwMDU1YywgMHg0ODAyNjAwNCwgMHg1OTJjMDQwOCwgMHg4YzAwMDUxMiwKLQkweDA0MDAwMDA3LCAweDRkMmMwMDAwLCAweDU5MmMwMDA5LCAweDQwMDI1ODAwLAotCTB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsIDB4NWMwMjU4MDAsIDB4NDk0MjVhMDYsCi0JMHg0OTdhNWMwOSwgMHgwNDAxZmIxNiwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5YywKLQkweDAyMDFmODAwLCAweDAwMTA5MWM2LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLAotCTB4MDIwMWY4MDAsIDB4MDAxMDkxMmEsIDB4MDQwMWYwNDUsIDB4OGQzZTdkMTgsCi0JMHgwNDAwMDA0NSwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwKLQkweDAyMDAwODAwLCAweDAwMTAwZTk5LCAweDU5MzI1ODA4LCAweDAyMDFmODAwLAotCTB4MDAxMDkwMzcsIDB4MDQwMDAwM2EsIDB4NDk0MjVhMDYsIDB4NDk3YTVjMDksCi0JMHgwNDAxZmFmZiwgMHgwMjAxZjgwMCwgMHgwMDEwOTU5YywgMHgwMjAxZjgwMCwKLQkweDAwMDIwMmRhLCAweDA0MDFmMDMyLCAweDAyMDFmODAwLCAweDAwMTA2MmQ1LAotCTB4MDQwMDAwMzEsIDB4NTkzMDAyMDMsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDQsCi0JMHgwNDAwMDAyZCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMywKLQkweDA0MDIwMDI5LCAweDAyMDFmODAwLCAweDAwMTA2YjhhLCAweDU5MzI1ODA4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMjEsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDJkYSwgMHgwNDAxZjAxZSwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDA0LCAweDAyMDAwODAwLCAweDAwMTAwZTk5LCAweDU5MzI1ODA4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDkwMzcsIDB4MDQwMDAwMTUsIDB4NDk0MjVhMDYsCi0JMHg0OTdhNWMwOSwgMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwNDAxZjAxMCwKLQkweDgzM2MwNTAwLCAweDAwMDAxODAwLCAweDA0MDAwMDBmLCAweDhkM2U3ZDE2LAotCTB4MDQwMjAwMGQsIDB4NTkzMjU4MTcsIDB4MDIwMWY4MDAsIDB4MDAxMDA3ZmQsCi0JMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOTAzNywgMHgwNDAwMDAwNCwKLQkweDQ5NDI1YTA2LCAweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmODAwLAotCTB4MDAxMDc5MTEsIDB4ODMzMjY0MDAsIDB4MDAwMDAwMjQsIDB4NDE1ODAwMDAsCi0JMHg4MTMwMDQ4MCwgMHgwNDAwMTczYiwgMHg1YzAyNjgwMCwgMHg1YzAyNjAwMCwKLQkweDVjMDI1ODAwLCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2YzRiLAotCTB4NWMwMGMwMDAsIDB4MWMwMWYwMDAsIDB4NWMwMDAwMDAsIDB4NGMwMDAwMDAsCi0JMHg0ODAzYzg1NywgMHg0ZDNjMDAwMCwgMHg0MjAyNzgwMCwgMHgwMDAwMDAwMSwKLQkweDAyMDFmODAwLCAweDAwMTA0NTY3LCAweDVjMDI3ODAwLCAweDRjNTgwMDAwLAotCTB4NDIwMGIwMDAsIDB4MDAwMDAwMDIsIDB4ODNhODFjMDAsIDB4MDAwMDAwMDIsCi0JMHg4M2NjMTQwMCwgMHgwMDAwMDAwYiwgMHgwMjAxZjgwMCwgMHgwMDEwODU1YSwKLQkweDVjMDBiMDAwLCAweDgwMDAwNTQwLCAweDFjMDFmMDAwLCAweDQ5MmZjODU3LAotCTB4NDk0M2M4NTcsIDB4NTlhODAwMGMsIDB4ODEyYzA0ODAsIDB4MDQwMDEwMTEsCi0JMHg1OWE4MDAwZCwgMHg4MTJjMDQ4MCwgMHgwNDAyMTAwZSwgMHg1OTJjMDAwMCwKLQkweDgwMDA1ZDQwLCAweDA0MDAwMDA4LCAweDQ5N2E1ODAwLCAweDQ5NDI1YTA2LAotCTB4NGMyYzAwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsIDB4NWMwMjU4MDAsCi0JMHgwNDAxZjdmNywgMHg0OTQyNWEwNiwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwKLQkweDFjMDFmMDAwLCAweDQ5M2ZjODU3LCAweDQ5MzNjODU3LCAweDQ4MGJjODU3LAotCTB4MDIwMWY4MDAsIDB4MDAxMDNiMjUsIDB4MDQwMDAwMmUsIDB4NDE1MDI4MDAsCi0JMHg4MTNlNzljMCwgMHgwNDAyMDAwNiwgMHg1OWE4MDA2NiwgMHg4MDAwMDAwMCwKLQkweDU5YTgwODZhLCAweDgwMDQwNTgwLCAweDA0MDAwMDI2LCAweDQxMzAwMDAwLAotCTB4ODAxNDA1ODAsIDB4MDQwMDAwMWEsIDB4NTgxNDAyMDMsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwMCwgMHgwNDAwMDAxNiwgMHg1ODE0MDIwMiwgMHg4MDA4MDU4MCwKLQkweDA0MDIwMDEzLCAweDU4MTQxYzA2LCAweDgyMGMwNTgwLCAweDAwMDAwMDA1LAotCTB4MDQwMDAwMGYsIDB4ODIwYzA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMDAwMTcsCi0JMHg1OTMwMDAwOSwgMHg1ODE0MjAwOSwgMHg4MDEwMjFjMCwgMHgwNDAyMDAwNiwKLQkweDU4MTQyMDFlLCAweDU5MzAxODA5LCAweDU4MGMwMDAyLCAweDgyMDAwNTAwLAotCTB4MDBmZmZmZmYsIDB4ODAxMDA1ODAsIDB4MDQwMDAwMDcsIDB4ODIxNDJjMDAsCi0JMHgwMDAwMDAyNCwgMHg0MTU0MDAwMCwgMHg4MDE0MDQ4MCwgMHgwNDAyMTAwNSwKLQkweDA0MDFmN2RmLCAweDQwMTYzODAwLCAweDgxMzAwNTQwLCAweDA0MDFmMDAyLAotCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4NTgxNDE4MDcsIDB4OGMwYzFkMTAsCi0JMHgwNDAyMDdmMywgMHgwNDAxZjdlNywgMHg0MjAwMjAwMCwgMHgwMDAwZmZmZiwKLQkweDU5MzAxMDA5LCAweDgwMDgxMWMwLCAweDA0MDAwMDAyLCAweDU4MDgyNDAzLAotCTB4NDEzMDEwMDAsIDB4MDQwMWYwMDcsIDB4NDE3ODEwMDAsIDB4NDE0NDIwMDAsCi0JMHgwNDAxZjAwNCwgMHg0MTc4MTAwMCwgMHg0MjAwMjAwMCwgMHgwMDAwZmZmZiwKLQkweDVjMDAwMDAwLCAweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDQ4MGJjODU3LAotCTB4NDgxM2M4NTcsIDB4NDkyZmM4NTcsIDB4NDk0M2M4NTcsIDB4NGQyYzAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwKLQkweDRhMDI1YTA0LCAweDAwMDAwMTBkLCAweDgwMDgxMWMwLCAweDA0MDAwMDE3LAotCTB4ODM0MDA1ODAsIDB4MDAwMDAwMjksIDB4MDQwMjAwMTAsIDB4ODIxODA1ODAsCi0JMHgwMDAwMDAwMiwgMHgwNDAwMDAwYSwgMHg4MjE4MDU4MCwgMHgwMDAwMDAwMywKLQkweDA0MDAwMDA3LCAweDgyMTgwNTgwLCAweDAwMDAwMDA4LCAweDA0MDAwMDA0LAotCTB4ODIxODA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMjAwMDQsIDB4NGEwMjU4MDksCi0JMHhmZmZmZmZmZiwgMHgwNDAxZjAwMiwgMHg0ODBhNTgwOSwgMHg1ODA4MDIwMiwKLQkweDQ4MDI1YzEzLCAweDA0MDFmMDA1LCAweDRhMDI1ODA5LCAweGZmZmZmZmZmLAotCTB4NGEwMjVjMTMsIDB4MDAwMGZmZmYsIDB4NDk0MjVhMDgsIDB4NDgxMjVhMDYsCi0JMHg4MjEwMDU4MCwgMHgwMDAwZmZmZiwgMHgwNDAwMDAwZSwgMHg0ZDQ0MDAwMCwKLQkweDRkMzQwMDAwLCAweDQwMTI4ODAwLCAweDAyMDFmODAwLCAweDAwMDIwMjQ1LAotCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NTkzNDAwMDIsIDB4ODIwMDA1MDAsCisJMHgwMDEwMGVlNCwgMHg1OTMyNTgwOCwgMHgwMjAxZjgwMCwgMHgwMDEwOGRmNCwKKwkweDA0MDAwMDE1LCAweDQ5NDI1YTA2LCAweDQ5N2E1YzA5LCAweDAyMDFmODAwLAorCTB4MDAwMjAzODEsIDB4MDQwMWYwMTAsIDB4ODMzYzA1MDAsIDB4MDAwMDE4MDAsCisJMHgwNDAwMDAwZiwgMHg4ZDNlN2QxNiwgMHgwNDAyMDAwZCwgMHg1OTMyNTgxNywKKwkweDAyMDFmODAwLCAweDAwMTAwODQzLCAweDU5MzI1ODA4LCAweDAyMDFmODAwLAorCTB4MDAxMDhkZjQsIDB4MDQwMDAwMDQsIDB4NDk0MjVhMDYsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDM4MSwgMHgwMjAxZjgwMCwgMHgwMDEwNzY5OCwgMHg4MzMyNjQwMCwKKwkweDAwMDAwMDI0LCAweDQxNTgwMDAwLCAweDgxMzAwNDgwLCAweDA0MDAxNzM1LAorCTB4NWMwMjY4MDAsIDB4NWMwMjYwMDAsIDB4NWMwMjU4MDAsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHg1YzAwYzAwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MzNjODU3LCAweDgxMzI2MWMwLCAweDA0MDAwMDJkLCAweDgzMzAwZDgwLAorCTB4MDAxMGJiZTgsIDB4MDQwMDAwMmEsIDB4OGQzZTdkMDYsIDB4MDQwMjAwMjgsCisJMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAwMDAwYSwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDAyLCAweDA0MDIwMDIxLCAweDU5MzAwMjFkLAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMWQsIDB4NTkzMDBjMTYsCisJMHgwNDAxZjAwMiwgMHg1OTMwMGMwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDAzOSwKKwkweDA0MDAwMDA0LCAweDgyMDQwNTgwLCAweDAwMDAwMDM1LCAweDA0MDIwMDE0LAorCTB4NGQzMDAwMDAsIDB4NGQxYzAwMDAsIDB4NTkzMjYwMWUsIDB4NDkzM2M4NTcsCisJMHgwMjAxZjgwMCwgMHgwMDEwOTFlMywgMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwKKwkweDU5MWMwMDFjLCAweDQ5N2EzODFjLCAweDU5MWMwYzE0LCAweDg0MDQwZDAyLAorCTB4NDgwNjNjMTQsIDB4NWMwMjM4MDAsIDB4NWMwMjYwMDAsIDB4ODEzMDA1ODAsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg0OTdhNjAxZSwgMHgxYzAxZjAwMCwKKwkweDVjMDAwMDAwLCAweDRjMDAwMDAwLCAweDQ4MDNjODU3LCAweDRkM2MwMDAwLAorCTB4NDIwMjc4MDAsIDB4MDAwMDAwMDEsIDB4MDIwMWY4MDAsIDB4MDAxMDQzYmQsCisJMHg1YzAyNzgwMCwgMHg0YzU4MDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKKwkweDgzYTgxYzAwLCAweDAwMDAwMDAyLCAweDgzY2MxNDAwLCAweDAwMDAwMDBiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDgyZmYsIDB4NWMwMGIwMDAsIDB4ODAwMDA1NDAsCisJMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywgMHg0OTQzYzg1NywgMHg1OWE4MDAwYywKKwkweDgxMmMwNDgwLCAweDA0MDAxMDExLCAweDU5YTgwMDBkLCAweDgxMmMwNDgwLAorCTB4MDQwMjEwMGUsIDB4NTkyYzAwMDAsIDB4ODAwMDVkNDAsIDB4MDQwMDAwMDgsCisJMHg0OTdhNTgwMCwgMHg0OTQyNWEwNiwgMHg0YzJjMDAwMCwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDVjMDI1ODAwLCAweDA0MDFmN2Y3LCAweDQ5NDI1YTA2LAorCTB4MDIwMWYwMDAsIDB4MDAwMjAzODEsIDB4MWMwMWYwMDAsIDB4NDkzZmM4NTcsCisJMHg0OTMzYzg1NywgMHg0ODBiYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMzkzZSwKKwkweDA0MDAwMDJlLCAweDQxNTAyODAwLCAweDgxM2U3OWMwLCAweDA0MDIwMDA2LAorCTB4NTlhODAwNjYsIDB4ODAwMDAwMDAsIDB4NTlhODA4NmEsIDB4ODAwNDA1ODAsCisJMHgwNDAwMDAyNiwgMHg0MTMwMDAwMCwgMHg4MDE0MDU4MCwgMHgwNDAwMDAxYSwKKwkweDU4MTQwMjAzLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLCAweDA0MDAwMDE2LAorCTB4NTgxNDAyMDIsIDB4ODAwODA1ODAsIDB4MDQwMjAwMTMsIDB4NTgxNDFjMDYsCisJMHg4MjBjMDU4MCwgMHgwMDAwMDAwNSwgMHgwNDAwMDAwZiwgMHg4MjBjMDU4MCwKKwkweDAwMDAwMDA5LCAweDA0MDAwMDE3LCAweDU5MzAwMDA5LCAweDU4MTQyMDA5LAorCTB4ODAxMDIxYzAsIDB4MDQwMjAwMDYsIDB4NTgxNDIwMWUsIDB4NTkzMDE4MDksCisJMHg1ODBjMDAwMiwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHg4MDEwMDU4MCwKKwkweDA0MDAwMDA3LCAweDgyMTQyYzAwLCAweDAwMDAwMDI0LCAweDQxNTQwMDAwLAorCTB4ODAxNDA0ODAsIDB4MDQwMjEwMDUsIDB4MDQwMWY3ZGYsIDB4NDAxNjM4MDAsCisJMHg4MTMwMDU0MCwgMHgwNDAxZjAwMiwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKKwkweDU4MTQxODA3LCAweDhjMGMxZDEwLCAweDA0MDIwN2YzLCAweDA0MDFmN2U3LAorCTB4NDIwMDIwMDAsIDB4MDAwMGZmZmYsIDB4NTkzMDEwMDksIDB4ODAwODExYzAsCisJMHgwNDAwMDAwMiwgMHg1ODA4MjQwMywgMHg0MTMwMTAwMCwgMHgwNDAxZjAwNywKKwkweDQxNzgxMDAwLCAweDQxNDQyMDAwLCAweDA0MDFmMDA0LCAweDQxNzgxMDAwLAorCTB4NDIwMDIwMDAsIDB4MDAwMGZmZmYsIDB4NWMwMDAwMDAsIDB4NGMwMDAwMDAsCisJMHg0ODAzYzg1NywgMHg0ODBiYzg1NywgMHg0ODEzYzg1NywgMHg0OTJmYzg1NywKKwkweDQ5NDNjODU3LCAweDRkMmMwMDAwLCAweDRjMDgwMDAwLCAweDRjMTAwMDAwLAorCTB4NGMxNDAwMDAsIDB4NGMxODAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4MmEsCisJMHgwMjAwMDgwMCwgMHgwMDEwMDYxNSwgMHg1YzAwMzAwMCwgMHg1YzAwMjgwMCwKKwkweDVjMDAyMDAwLCAweDVjMDAxMDAwLCAweDRhMDI1YTA0LCAweDAwMDAwMTBkLAorCTB4ODAwODExYzAsIDB4MDQwMDAwMTcsIDB4ODM0MDA1ODAsIDB4MDAwMDAwMjksCisJMHgwNDAyMDAxMCwgMHg4MjE4MDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAwMDAwYSwKKwkweDgyMTgwNTgwLCAweDAwMDAwMDAzLCAweDA0MDAwMDA3LCAweDgyMTgwNTgwLAorCTB4MDAwMDAwMDgsIDB4MDQwMDAwMDQsIDB4ODIxODA1ODAsIDB4MDAwMDAwMDksCisJMHgwNDAyMDAwNCwgMHg0YTAyNTgwOSwgMHhmZmZmZmZmZiwgMHgwNDAxZjAwMiwKKwkweDQ4MGE1ODA5LCAweDU4MDgwMjAyLCAweDQ4MDI1YzEzLCAweDA0MDFmMDA1LAorCTB4NGEwMjU4MDksIDB4ZmZmZmZmZmYsIDB4NGEwMjVjMTMsIDB4MDAwMGZmZmYsCisJMHg0OTQyNWEwOCwgMHg0ODEyNWEwNiwgMHg4MjEwMDU4MCwgMHgwMDAwZmZmZiwKKwkweDA0MDAwMDEyLCAweDRjMTQwMDAwLCAweDRjMTgwMDAwLCAweDRkNDQwMDAwLAorCTB4NGQzNDAwMDAsIDB4NDAxMjg4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAyNjcsCisJMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHg1OTM0MDAwMiwgMHg4MjAwMDUwMCwKIAkweDAwZmZmZmZmLCAweDQ4MDI1ODEyLCAweDVjMDI2ODAwLCAweDVjMDI4ODAwLAotCTB4NDk3YTU4MDAsIDB4NDk3YTVjMDQsIDB4ODM0MDA1ODAsIDB4MDAwMDAwNDYsCi0JMHgwNDAyMDAwMiwgMHg0ODE2NWEwNywgMHg0ODFhNWMwOCwgMHgwNDAxZmJlZCwKLQkweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDU5MzAwODA5LCAweDgwMDQwOWMwLAotCTB4MDQwMDAwMDQsIDB4NTgwNDA0MDMsIDB4ODE0NDA1ODAsIDB4MWMwMWYwMDAsCi0JMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgwNDAxZjdmZCwgMHg0OTMzYzg1NywKLQkweDRjMDQwMDAwLCAweDU5MzAwNDAzLCAweDgyMDAwZDgwLCAweDAwMDAwMDFlLAotCTB4MDQwMjAwMTYsIDB4ODAwMDAwZDAsIDB4NTkzMDBhMTYsIDB4ODIwNDBkMDAsCi0JMHgwMDAwMDBmZiwgMHg4MDA0MDU0MCwgMHg0ODAzYzg1NywgMHg0ODAyNjQxNiwKLQkweDRhMDI2NDAzLCAweDAwMDAwMDg1LCAweDRhMDI2MjAzLCAweDAwMDAwMDA5LAotCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDUsIDB4NGEwMjYyMWQsIDB4MDAwMDAwMDQsCi0JMHg1OWE4MDAzOCwgMHg0ODAyNjIwNiwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0YiwKLQkweDAyMDFmODAwLCAweDAwMDIwNzIxLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLAotCTB4NDkzM2M4NTcsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MWMwMWYwMDAsCi0JMHg1OTMwMDQxNCwgMHg0OTMzYzg1NywgMHg0ODAzYzg1NywgMHg4YzAwMDUxOCwKLQkweDA0MDAwMDA5LCAweDhjMDAwNTEyLCAweDAyMDIwMDAwLCAweDAwMTA5MjFlLAotCTB4MDQwMWY5MWIsIDB4MDIwMWY4MDAsIDB4MDAwMjA2ZmQsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDc3ZCwgMHgxYzAxZjAwMCwgMHg1OTFjMDQwNiwgMHg0ODAzYzg1NywKLQkweDgyMDAwYzgwLCAweDAwMDAwMDA5LCAweDA0MDIxMDBiLCAweDBjMDFmMDAxLAotCTB4MDAxMGE0ZDksIDB4MDAxMGE0ZDksIDB4MDAxMGE0ZDksIDB4MDAxMGE0ZGIsCi0JMHgwMDEwYTRkOSwgMHgwMDEwYTRkYiwgMHgwMDEwYTRkYiwgMHgwMDEwYTRkOSwKLQkweDAwMTBhNGRiLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDgyMDAwNTQwLAotCTB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsIDB4NTkxYzA0MDYsIDB4ODIwMDA1MDAsCi0JMHgwMDAwMDAxZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNiwgMHgwNDAwMDAwZSwKLQkweDQ4MDNjODU3LCAweDRhMDI2NDAzLCAweDAwMDAwMDNiLCAweDRhMDI2NDFhLAotCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDJhMDAsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMSwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzIxLCAweDQ4MDNjODU2LCAweDRjMDQwMDAwLCAweDRjMTQwMDAwLAotCTB4NGQzMDAwMDAsIDB4NDExZTYwMDAsIDB4MDQwMWY4ZTksIDB4NDk3YTYyMDUsCi0JMHg1OTMwMDQxNCwgMHg0ODAzYzg1NywgMHg4MjAwMDUwMCwgMHhmZmZmYWRmZiwKLQkweDQ4MDI2NDE0LCAweDQ5N2E2NDA1LCAweDVjMDI2MDAwLCAweDAyMDFmODAwLAotCTB4MDAxMDA3ZTQsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NWMwMDI4MDAsCi0JMHg1YzAwMDgwMCwgMHg0YTAyNWEwNCwgMHgwMDAwMDEwZCwgMHg0OTdhNTgwMCwKLQkweDQ5N2E1YzA0LCAweDRhMDI1YTA4LCAweDAwMDAwMDQ1LCAweDQ5MWU1ODA5LAotCTB4NTkzMDA0MDIsIDB4NDgwMjVjMDcsIDB4NTkzMDA0MTksIDB4NDgwMjVjMGIsCi0JMHg1OTFjMDQxNCwgMHg4NDAwMDU1NiwgMHg0ODAyM2MxNCwgMHg1OTFjMTgwOSwKLQkweDU4MGMwNDAzLCAweDQ4MDI1YTA2LCAweDQ4MTY1ODBhLCAweDQ4MDY1YTBiLAotCTB4MDQwMWY5OWQsIDB4NGQ0MDAwMDAsIDB4NDIwMjgwMDAsIDB4MDAwMDAwNDUsCi0JMHg1OTFjMDIwMiwgMHg0YzAwMDAwMCwgMHg0ZDMwMDAwMCwgMHg0MTFlNjAwMCwKLQkweDA0MDFmY2IxLCAweDVjMDI2MDAwLCAweDVjMDAwMDAwLCAweDQ4MDIzYTAyLAotCTB4NWMwMjgwMDAsIDB4NGEwMjNjMDYsIDB4MDAwMDAwMDYsIDB4NGEwMjNhMDMsCi0JMHgwMDAwMDAwNywgMHg0OTdhM2EwNiwgMHg0OTdhM2EwNSwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDgzMzgwNTgwLCAweDAwMDAwMDEzLCAweDA0MDIwMDBiLAotCTB4NTkzMDA0MDMsIDB4NDgwM2M4NTcsIDB4ODIwMDBkODAsIDB4MDAwMDAwODUsCi0JMHgwNDAwMDAyYiwgMHg4MjAwMGQ4MCwgMHgwMDAwMDA4YiwgMHgwNDAwMDAyOCwKLQkweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDgzMzgwNTgwLCAweDAwMDAwMDI3LAotCTB4MDQwMjAwMGMsIDB4MDIwMWY4MDAsIDB4MDAxMDZiYmYsIDB4NGQyYzAwMDAsCi0JMHg0ZDQwMDAwMCwgMHg1OTMyNTgwOCwgMHg0MjAyODAwMCwgMHgwMDAwMDAwNCwKLQkweDA0MDFmZWFiLCAweDVjMDI4MDAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAotCTB4ODMzODA1ODAsIDB4MDAwMDAwMTQsIDB4MDQwMDA3ZjMsIDB4ODMzODA1ODAsCi0JMHgwMDAwMDA4OSwgMHgwNDAwMDAwNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDA4YSwKLQkweDAyMDIwMDAwLCAweDAwMTA3OTc0LCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLAotCTB4MDIwMjAwMDAsIDB4MDAxMDc5NzQsIDB4NTkzMDBhMDMsIDB4ODIwNDA1ODAsCi0JMHgwMDAwMDAwYSwgMHgwNDAwMDAwOSwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYywKLQkweDA0MDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDRhMDI2MjAzLAotCTB4MDAwMDAwMGEsIDB4MWMwMWYwMDAsIDB4ODMzODA0ODAsIDB4MDAwMDAwOTMsCi0JMHgwNDAyMTAwYywgMHg4MzM4MDQ4MCwgMHgwMDAwMDA4NSwgMHgwNDAwMTAwOSwKLQkweDgzMzgwNTgwLCAweDAwMDAwMDg5LCAweDA0MDAwMDBhLCAweDgzMzgwNTgwLAotCTB4MDAwMDAwOGEsIDB4MDQwMDAwMjIsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsCi0JMHg0OTNiYzg1NywgMHg0OTMzYzg1NywgMHgwMjAxZjAwMCwgMHgwMDEwNzk3NCwKLQkweDQ5MzNjODU3LCAweDRjMzQwMDAwLCAweDQxMzA2ODAwLCAweDAyMDFmODAwLAotCTB4MDAwMjA3NWEsIDB4MDQwMDAwMTEsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCi0JMHg0YTAyNjQwMywgMHgwMDAwMDAxZSwgMHg1OWNjMGMwNywgMHg0ODA2NjQxOSwKLQkweDU5Y2MwYTA3LCAweDQ4MDY2MjE5LCAweDU4MzQwODA5LCAweDQ4MDY2MDA5LAotCTB4NGEwMjY0MDYsIDB4MDAwMDAwMDQsIDB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDcyMSwgMHg0MDM2NjAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzdkLCAweDVjMDA2ODAwLCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NDkzM2M4NTcsIDB4NTkzMDA4MDksCi0JMHg1ODA0MDIwMCwgMHg4YzAwMDUxYSwgMHgxYzAxZjAwMCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0OGRmLCAweDA0MDAwMDFlLCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLAotCTB4NTkzMDA0MTQsIDB4ODQwMDA1NTgsIDB4NDgwMjY0MTQsIDB4OGMwMDA1MTIsCi0JMHgwNDAwMDAwNCwgMHg1OWE4MDAzOSwgMHg0ODAyNjIwNSwgMHgwNDAxZjAwNywKLQkweDU5YTgwODM5LCAweDU5YTgwMDM3LCAweDgwMDQwNDAwLCAweDgyMDAwNDAwLAotCTB4MDAwMDAwMGEsIDB4NDgwMjYyMDUsIDB4NTkzMDAwMDksIDB4ODIwMDBjMDAsCi0JMHgwMDAwMDAxMSwgMHg1MDA0MDAwMCwgMHg4MDAwMDU0MCwgMHgwNDAwMDAwNCwKLQkweDgyMDAwYzAwLCAweDAwMDAwMDAwLCAweDA0MDFmN2ZiLCAweDQ1MzAwODAwLAotCTB4NDk3YTYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCi0JMHg4MjEwMDUwMCwgMHhmZmZmZmVlZiwgMHgwNDAyMDAyMCwgMHg0ZDJjMDAwMCwKLQkweDQ5MzdjODU3LCAweDU5MzQwODExLCAweDgzMzQxNDAwLCAweDAwMDAwMDExLAotCTB4ODAwNDA5YzAsIDB4MDQwMDAwMGUsIDB4NDAwNDAwMDAsIDB4ODEzMDA1ODAsCi0JMHgwNDAwMDAwNSwgMHg1ODA0MDgwMCwgMHg4MjA0MTQwMCwgMHgwMDAwMDAwMCwKLQkweDA0MDFmN2Y4LCAweDU5MzAwODAwLCAweDQ5N2E2MDAwLCAweDQ0MDQxMDAwLAotCTB4MDIwMWY4MDAsIDB4MDAwMjA2ZmQsIDB4MDQwMWYwMDIsIDB4NDkzM2M4NTcsCi0JMHg1OTJjMDAwMCwgMHg4MDAwMDU0MCwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwKLQkweDVjMDI1ODAwLCAweDQ5MmU2MDA4LCAweDAyMDFmODAwLCAweDAwMDIwNmZkLAotCTB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4NDkyZmM4NTcsIDB4NGEwMjVhMDYsCi0JMHgwMDAwMDAwNiwgMHgwMjAxZjAwMCwgMHgwMDAyMDJkYSwgMHg0YzM0MDAwMCwKLQkweDU5MzAwMDA5LCAweDgwMDAwMWMwLCAweDA0MDAwMDEwLCAweDgyMDA2YzAwLAotCTB4MDAwMDAwMTEsIDB4NTAzNDAwMDAsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDksCi0JMHg4MTMwMDU4MCwgMHgwNDAwMDAwNSwgMHg1MDM0MDAwMCwgMHg4MjAwNmMwMCwKLQkweDAwMDAwMDAwLCAweDA0MDFmN2Y4LCAweDU5MzAwMDAwLCAweDQ0MDA2ODAwLAotCTB4NWMwMDY4MDAsIDB4MWMwMWYwMDAsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsCi0JMHgwMDAwMDAwNSwgMHgwNDAwMDdmYiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMSwKLQkweDA0MDAwN2Y4LCAweDgyMDQwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwN2Y1LAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMDA3ZjIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwMDVkOCwgMHg0OTMzYzg1NywgMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwKLQkweDRjNTgwMDAwLCAweDU5YTgxMDFkLCAweDU5Y2MxODA3LCAweDgyMGMxZDAwLAotCTB4MDBmZmZmZmYsIDB4ODAwYzAxMTAsIDB4ODAwODM1ODAsIDB4MDQwMjAwMTQsCi0JMHg4M2NjMTQwMCwgMHgwMDAwMDAwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwKLQkweDU5MzAwMDA5LCAweDgyMDAxYzAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLAotCTB4MDAxMDg1NWEsIDB4MDQwMjAwMGEsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMGEsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg1OTMwMDAwOSwgMHg4MjAwMWMwMCwKLQkweDAwMDAwMDA4LCAweDAyMDFmODAwLCAweDAwMTA4NTVhLCAweDVjMDBiMDAwLAotCTB4NWMwMDE4MDAsIDB4NWMwMDEwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTYsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDIxYiwgMHgwMjAxZjAwMCwgMHgwMDEwMWU0NSwKLQkweDQ5M2JjODU3LCAweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LAotCTB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsCi0JMHg0YzU4MDAwMCwgMHg0YzU0MDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNiwKLQkweDQ1NzhhODAwLCAweDgwNTRhODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZkLAotCTB4ODMzODA1ODAsIDB4MDAwMDAwNDYsIDB4MDQwMjAwMDQsIDB4NGEwMjVhMDQsCi0JMHgwMDAwMDE0NCwgMHgwNDAxZjAwOCwgMHg0YTAyNWEwNCwgMHgwMDAwMDE0NiwKLQkweDgzMzgwNTgwLCAweDAwMDAwMDQxLCAweDA0MDAwMDAzLCAweDRhMDI1YTA2LAotCTB4MDAwMDAwMDEsIDB4NTljYzAwMDcsIDB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsCi0JMHg4MDAwMDExMCwgMHg1OWNjMTAwOCwgMHg4MjA4MTUwMCwgMHhmZjAwMDAwMCwKLQkweDgwMDgxNTQwLCAweDQ4MGE1ODBhLCAweDgzMzgwNTgwLCAweDAwMDAwMDQ2LAotCTB4MDQwMjAwMDYsIDB4NTljYzAwMDcsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsCi0JMHg0ODAyNTgwYiwgMHgwNDAxZjAwNSwgMHg1OWNjMDAwOCwgMHg4MjAwMDUwMCwKLQkweDAwZmZmZmZmLCAweDQ4MDI1ODBiLCAweDgzMzgwNTgwLCAweDAwMDAwMDQ2LAotCTB4MDQwMjAwMDQsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMDksIDB4MDQwMWYwMDMsCi0JMHg4M2NjMTQwMCwgMHgwMDAwMDAwZCwgMHg1MDA4MDAwMCwgMHg5YzAwMDFjMCwKLQkweDQ4MDI1ODBjLCAweDgwMDgxMDAwLCAweDUwMDgwMDAwLCAweDljMDAwMWMwLAotCTB4NDgwMjU4MGQsIDB4ODMzODA1ODAsIDB4MDAwMDAwNDYsIDB4MDQwMjAwMDgsCi0JMHg1OWNjMDAwYiwgMHg5YzAwMDFjMCwgMHg0ODAyNTgwZSwgMHg1OWNjMDAwYywKLQkweDljMDAwMWMwLCAweDQ4MDI1ODBmLCAweDA0MDFmMDA3LCAweDU5Y2MwMDBmLAotCTB4OWMwMDAxYzAsIDB4NDgwMjU4MGUsIDB4NTljYzAwMTAsIDB4OWMwMDAxYzAsCi0JMHg0ODAyNTgwZiwgMHg4MzM4MDU4MCwgMHgwMDAwMDA0NiwgMHgwNDAyMDAwNCwKLQkweDgzY2MxNDAwLCAweDAwMDAwMDExLCAweDA0MDFmMDAzLCAweDgzY2MxNDAwLAotCTB4MDAwMDAwMTUsIDB4NDEyYzMwMDAsIDB4ODIxODM0MDAsIDB4MDAwMDAwMTAsCi0JMHg0MjAwYjAwMCwgMHgwMDAwMDAwNCwgMHg1MDA4MDAwMCwgMHg5YzAwMDFjMCwKLQkweDQ0MDAzMDAwLCAweDgwMDgxMDAwLCAweDgwMTgzMDAwLCAweDgwNThiMDQwLAotCTB4MDQwMjA3ZmEsIDB4NWMwMGE4MDAsIDB4NWMwMGIwMDAsIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDJkYSwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywKLQkweDQ5MmZjODU3LCAweDU5MzAwODA5LCAweDU4MDQwMjAwLCAweDhjMDAwNTFlLAotCTB4MDQwMDAwMDQsIDB4NTkyYzAyMDgsIDB4ODQwMDA1NTgsIDB4NDgwMjVhMDgsCi0JMHgxYzAxZjAwMCwgMHg1OWUwMTgwZiwgMHg1OTljMDQxMywgMHg4MDBjMTAwMCwKLQkweDgwMDgwNTgwLCAweDA0MDIwMDAyLCAweDQxNzgxMDAwLCAweDU5ZTAwMDEwLAotCTB4NTllMDA4MTAsIDB4ODAwNDBkODAsIDB4MDQwMjA3ZmQsIDB4ODAwODA1ODAsCi0JMHgwNDAwMDAwYiwgMHg0YzA4MDAwMCwgMHg1OTljMDgxNCwgMHg1OTljMTAxNSwKLQkweDgwMGMwMGNjLCAweDgwMDQwYzAwLCAweDgyMDgxNDQwLCAweDAwMDAwMDAwLAotCTB4NWMwMDE4MDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NDgwM2M4NTcsCi0JMHgxYzAxZjAwMCwgMHg0OTJmYzg1NywgMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwKLQkweDU4MzgwODA3LCAweDgwMDQwOWMwLCAweDA0MDIwMDA1LCAweDQ5MmM3MDA4LAotCTB4NDkyYzcwMDcsIDB4MDIwMWYwMDAsIDB4MDAxMDA4NzUsIDB4NDkyYzA4MDAsCi0JMHg0OTJjNzAwNywgMHgxYzAxZjAwMCwgMHg1OTMwMDIwMywgMHg0OTMzYzg1NywKLQkweDQ5MzdjODU3LCAweDQ5M2JjODU3LCAweDQ4MDNjODU3LCAweDgyMDAzNDgwLAotCTB4MDAwMDAwMGUsIDB4MDIwMjE4MDAsIDB4MDAxMDA1ZDgsIDB4MGMwMWYwMDEsCi0JMHgwMDEwYTZkYSwgMHgwMDEwYTgyYywgMHgwMDEwYTZkYSwgMHgwMDEwYTZkYSwKLQkweDAwMTBhNmRhLCAweDAwMTBhNmRhLCAweDAwMTBhNmRhLCAweDAwMTBhNzkxLAotCTB4MDAxMGE2ZGMsIDB4MDAxMGE2ZGEsIDB4MDAxMGE2ZGEsIDB4MDAxMGE2ZGEsCi0JMHgwMDEwYTZkYSwgMHgwMDEwYTZkYSwgMHgwMjAxZjgwMCwgMHgwMDEwMDVkOCwKLQkweDgzMzgwNTgwLCAweDAwMDAwMDRjLCAweDAyMDIwODAwLCAweDAwMTAwNWQ4LAotCTB4MDIwMWY4MDAsIDB4MDAxMDQ4ZWMsIDB4MDQwMjAwMjAsIDB4NTlhODA4MjYsCi0JMHg4MjA0MDUwMCwgMHgwMDAwMDAwOSwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwKLQkweDA0MDAwMDFhLCAweDhjMDQwZDEyLCAweDA0MDAwMDNkLCAweDU5Y2MwODA2LAotCTB4ODIwNDBkMDAsIDB4ZmYwMDAwMDAsIDB4ODIwNDA1ODAsIDB4MDMwMDAwMDAsCi0JMHgwNDAwMDAxZiwgMHg4MjA0MDU4MCwgMHg1MDAwMDAwMCwgMHgwNDAwMDAwNSwKLQkweDgyMDQwNTgwLCAweDUyMDAwMDAwLCAweDAyMDIwMDAwLCAweDAwMDIwNzdkLAotCTB4ODEzNjY5YzAsIDB4MDQwMDAwMDYsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMjAzYywgMHg1YzAyNzgwMCwgMHg0YTAyNjQwMywKLQkweDAwMDAwMDAxLCAweDA0MDFmMDE0LCAweDU5Y2MwODA2LCAweDgyMDQwZDAwLAotCTB4ZmYwMDAwMDAsIDB4ODIwNDA1ODAsIDB4MDMwMDAwMDAsIDB4MDQwMDAwMDgsCi0JMHg4MjA0MDU4MCwgMHg1MDAwMDAwMCwgMHgwNDAwMDAwNSwgMHg4MjA0MDU4MCwKLQkweDUyMDAwMDAwLCAweDAyMDIwMDAwLCAweDAwMDIwNzdkLCAweDRhMDI2NDAzLAorCTB4NWMwMDMwMDAsIDB4NWMwMDI4MDAsIDB4NDk3YTU4MDAsIDB4NDk3YTVjMDQsCisJMHg4MzQwMDU4MCwgMHgwMDAwMDA0NiwgMHgwNDAyMDAwMiwgMHg0ODE2NWEwNywKKwkweDQ4MWE1YzA4LCAweDA0MDFmYmUwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAorCTB4NTkzMDA4MDksIDB4ODAwNDA5YzAsIDB4MDQwMDAwMDQsIDB4NTgwNDA0MDMsCisJMHg4MTQ0MDU4MCwgMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKKwkweDA0MDFmN2ZkLCAweDQ5MzNjODU3LCAweDRjMDQwMDAwLCAweDU5MzAwNDAzLAorCTB4ODIwMDBkODAsIDB4MDAwMDAwMWUsIDB4MDQwMjAwMTYsIDB4ODAwMDAwZDAsCisJMHg1OTMwMGExNiwgMHg4MjA0MGQwMCwgMHgwMDAwMDBmZiwgMHg4MDA0MDU0MCwKKwkweDQ4MDNjODU3LCAweDQ4MDI2NDE2LCAweDRhMDI2NDAzLCAweDAwMDAwMDg1LAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDUsCisJMHg0YTAyNjIxZCwgMHgwMDAwMDAwNCwgMHg1OWE4MDAzOCwgMHg0ODAyNjIwNiwKKwkweDQyMDAwODAwLCAweDgwMDAwMDRiLCAweDAyMDFmODAwLCAweDAwMDIwODU1LAorCTB4NWMwMDA4MDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHgxYzAxZjAwMCwgMHg1OTMwMDQxNCwgMHg0OTMzYzg1NywKKwkweDQ4MDNjODU3LCAweDhjMDAwNTE4LCAweDA0MDAwMDA5LCAweDhjMDAwNTEyLAorCTB4MDIwMjAwMDAsIDB4MDAxMDhmZGIsIDB4MDQwMWY5MTgsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDgzMSwgMHgwMjAxZjgwMCwgMHgwMDAyMDhiNCwgMHgxYzAxZjAwMCwKKwkweDU5MWMwNDA2LCAweDQ4MDNjODU3LCAweDgyMDAwYzgwLCAweDAwMDAwMDA5LAorCTB4MDQwMjEwMGIsIDB4MGMwMWYwMDEsIDB4MDAxMGEyZjcsIDB4MDAxMGEyZjcsCisJMHgwMDEwYTJmNywgMHgwMDEwYTJmOSwgMHgwMDEwYTJmNywgMHgwMDEwYTJmOSwKKwkweDAwMTBhMmY5LCAweDAwMTBhMmY3LCAweDAwMTBhMmY5LCAweDgwMDAwNTgwLAorCTB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg1OTFjMDQwNiwgMHg4MjAwMDUwMCwgMHgwMDAwMDAxZiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA2LCAweDA0MDAwMDBlLCAweDQ4MDNjODU3LCAweDRhMDI2NDAzLAorCTB4MDAwMDAwM2IsIDB4NGEwMjY0MWEsIDB4MDAwMDAwMDksIDB4NGEwMjYyMWEsCisJMHgwMDAwMmEwMCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0MjAwMDgwMCwKKwkweDgwMDAwMDQwLCAweDAyMDFmMDAwLCAweDAwMDIwODU1LCAweDQ4MDNjODU2LAorCTB4NGMwNDAwMDAsIDB4NGMxNDAwMDAsIDB4NGQzMDAwMDAsIDB4NDExZTYwMDAsCisJMHgwNDAxZjhlNiwgMHg0OTdhNjIwNSwgMHg1OTMwMDQxNCwgMHg0ODAzYzg1NywKKwkweDgyMDAwNTAwLCAweGZmZmZhZGZmLCAweDQ4MDI2NDE0LCAweDQ5N2E2NDA1LAorCTB4NWMwMjYwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDA4MmEsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg1YzAwMjgwMCwgMHg1YzAwMDgwMCwgMHg0YTAyNWEwNCwKKwkweDAwMDAwMTBkLCAweDQ5N2E1ODAwLCAweDQ5N2E1YzA0LCAweDRhMDI1YTA4LAorCTB4MDAwMDAwNDUsIDB4NDkxZTU4MDksIDB4NTkzMDA0MDIsIDB4NDgwMjVjMDcsCisJMHg1OTMwMDQxOSwgMHg0ODAyNWMwYiwgMHg1OTFjMDQxNCwgMHg4NDAwMDU1NiwKKwkweDQ4MDIzYzE0LCAweDU5MWMxODA5LCAweDU4MGMwNDAzLCAweDQ4MDI1YTA2LAorCTB4NDgxNjU4MGEsIDB4NDgwNjVhMGIsIDB4MDQwMWZiNTcsIDB4NGQ0MDAwMDAsCisJMHg0MjAyODAwMCwgMHgwMDAwMDA0NSwgMHg1OTFjMDIwMiwgMHg0YzAwMDAwMCwKKwkweDRkMzAwMDAwLCAweDQxMWU2MDAwLCAweDA0MDFmYzgyLCAweDVjMDI2MDAwLAorCTB4NWMwMDAwMDAsIDB4NDgwMjNhMDIsIDB4NWMwMjgwMDAsIDB4NGEwMjNjMDYsCisJMHgwMDAwMDAwNiwgMHg0YTAyM2EwMywgMHgwMDAwMDAwNywgMHg0OTdhM2EwNiwKKwkweDQ5N2EzYTA1LCAweDFjMDFmMDAwLCAweDQ5MzNjODU3LCAweDgzMzgwNTgwLAorCTB4MDAwMDAwMTMsIDB4MDQwMjAwMGIsIDB4NTkzMDA0MDMsIDB4NDgwM2M4NTcsCisJMHg4MjAwMGQ4MCwgMHgwMDAwMDA4NSwgMHgwNDAwMDAyYiwgMHg4MjAwMGQ4MCwKKwkweDAwMDAwMDhiLCAweDA0MDAwMDI4LCAweDAyMDFmODAwLCAweDAwMTAwNjE1LAorCTB4ODMzODA1ODAsIDB4MDAwMDAwMjcsIDB4MDQwMjAwMGMsIDB4MDIwMWY4MDAsCisJMHgwMDEwNjhmNiwgMHg0ZDJjMDAwMCwgMHg0ZDQwMDAwMCwgMHg1OTMyNTgwOCwKKwkweDQyMDI4MDAwLCAweDAwMDAwMDA0LCAweDA0MDFmZTlmLCAweDVjMDI4MDAwLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTQsCisJMHgwNDAwMDdmMywgMHg4MzM4MDU4MCwgMHgwMDAwMDA4OSwgMHgwNDAwMDAwNSwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDhhLCAweDAyMDIwMDAwLCAweDAwMTA3NmZiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDZjYjQsIDB4MDIwMjAwMDAsIDB4MDAxMDc2ZmIsCisJMHg1OTMwMGEwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYSwgMHgwNDAwMDAwOSwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDBjLCAweDA0MDAwMDA2LCAweDAyMDFmODAwLAorCTB4MDAxMDA2MTUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMGEsIDB4MWMwMWYwMDAsCisJMHg4MzM4MDQ4MCwgMHgwMDAwMDA5MywgMHgwNDAyMTAwYywgMHg4MzM4MDQ4MCwKKwkweDAwMDAwMDg1LCAweDA0MDAxMDA5LCAweDgzMzgwNTgwLCAweDAwMDAwMDg5LAorCTB4MDQwMDAwMGEsIDB4ODMzODA1ODAsIDB4MDAwMDAwOGEsIDB4MDQwMDAwMjIsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg0OTNiYzg1NywgMHg0OTMzYzg1NywKKwkweDAyMDFmMDAwLCAweDAwMTA3NmZiLCAweDQ5MzNjODU3LCAweDRjMzQwMDAwLAorCTB4NDEzMDY4MDAsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsIDB4MDQwMDAwMTEsCisJMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0YTAyNjQwMywgMHgwMDAwMDAxZSwKKwkweDU5Y2MwYzA3LCAweDQ4MDY2NDE5LCAweDU5Y2MwYTA3LCAweDQ4MDY2MjE5LAorCTB4NTgzNDA4MDksIDB4NDgwNjYwMDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDQsCisJMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHgwMjAxZjgwMCwgMHgwMDAyMDg1NSwKKwkweDQwMzY2MDAwLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LCAweDVjMDA2ODAwLAorCTB4MWMwMWYwMDAsIDB4NDkzM2M4NTcsIDB4MDIwMWYwMDAsIDB4MDAwMjA4YjQsCisJMHg1OTMwMDgwOSwgMHg1ODA0MDIwMCwgMHg4YzAwMDUxYSwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNmJhLCAweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTA0NzJlLAorCTB4MDQwMDAwMWUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDIsIDB4NTkzMDA0MTQsCisJMHg4NDAwMDU1OCwgMHg0ODAyNjQxNCwgMHg4YzAwMDUxMiwgMHgwNDAwMDAwNCwKKwkweDU5YTgwMDM5LCAweDQ4MDI2MjA1LCAweDA0MDFmMDA3LCAweDU5YTgwODM5LAorCTB4NTlhODAwMzcsIDB4ODAwNDA0MDAsIDB4ODIwMDA0MDAsIDB4MDAwMDAwMWUsCisJMHg0ODAyNjIwNSwgMHg1OTMwMDAwOSwgMHg4MjAwMGMwMCwgMHgwMDAwMDAxMSwKKwkweDUwMDQwMDAwLCAweDgwMDAwNTQwLCAweDA0MDAwMDA0LCAweDgyMDAwYzAwLAorCTB4MDAwMDAwMDAsIDB4MDQwMWY3ZmIsIDB4NDUzMDA4MDAsIDB4NDk3YTYwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwgMHg4MjEwMDUwMCwKKwkweGZmZmZmZWVmLCAweDA0MDIwMDFjLCAweDRkMmMwMDAwLCAweDQ5MzdjODU3LAorCTB4NTkzNDA4MTEsIDB4ODMzNDE0MDAsIDB4MDAwMDAwMTEsIDB4ODAwNDA5YzAsCisJMHgwNDAwMDAwZSwgMHg0MDA0MDAwMCwgMHg4MTMwMDU4MCwgMHgwNDAwMDAwNSwKKwkweDU4MDQwODAwLCAweDgyMDQxNDAwLCAweDAwMDAwMDAwLCAweDA0MDFmN2Y4LAorCTB4NTkzMDA4MDAsIDB4NDk3YTYwMDAsIDB4NDQwNDEwMDAsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDgzMSwgMHgwNDAxZjAwMiwgMHg0OTMzYzg1NywgMHg1YzAyNTgwMCwKKwkweDQ5MmU2MDA4LCAweDAyMDFmODAwLCAweDAwMDIwODMxLCAweDAyMDFmMDAwLAorCTB4MDAwMjA4YjQsIDB4NDkyZmM4NTcsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDYsCisJMHgwMjAxZjAwMCwgMHgwMDAyMDM4MSwgMHg0YzM0MDAwMCwgMHg1OTMwMDAwOSwKKwkweDgwMDAwMWMwLCAweDA0MDAwMDEwLCAweDgyMDA2YzAwLCAweDAwMDAwMDExLAorCTB4NTAzNDAwMDAsIDB4ODAwMDA1NDAsIDB4MDQwMDAwMDksIDB4ODEzMDA1ODAsCisJMHgwNDAwMDAwNSwgMHg1MDM0MDAwMCwgMHg4MjAwNmMwMCwgMHgwMDAwMDAwMCwKKwkweDA0MDFmN2Y4LCAweDU5MzAwMDAwLCAweDQ0MDA2ODAwLCAweDVjMDA2ODAwLAorCTB4MWMwMWYwMDAsIDB4NTkzMDBjMDYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsCisJMHgwNDAwMDdmYiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAxMSwgMHgwNDAwMDdmOCwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDA2LCAweDA0MDAwN2Y1LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMDEsIDB4MDQwMDA3ZjIsIDB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsCisJMHg0OTMzYzg1NywgMHg0YzA4MDAwMCwgMHg0YzBjMDAwMCwgMHg0YzU4MDAwMCwKKwkweDU5YTgxMDFkLCAweDU5Y2MxODA3LCAweDgyMGMxZDAwLCAweDAwZmZmZmZmLAorCTB4ODAwYzAxMTAsIDB4ODAwODM1ODAsIDB4MDQwMjAwMTQsIDB4ODNjYzE0MDAsCisJMHgwMDAwMDAwOCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwMiwgMHg1OTMwMDAwOSwKKwkweDgyMDAxYzAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA4MmZmLAorCTB4MDQwMjAwMGEsIDB4ODNjYzE0MDAsIDB4MDAwMDAwMGEsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwMiwgMHg1OTMwMDAwOSwgMHg4MjAwMWMwMCwgMHgwMDAwMDAwOCwKKwkweDAyMDFmODAwLCAweDAwMTA4MmZmLCAweDVjMDBiMDAwLCAweDVjMDAxODAwLAorCTB4NWMwMDEwMDAsIDB4MWMwMWYwMDAsIDB4NDkzM2M4NTYsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDA0YiwgMHgwMjAxZjAwMCwgMHgwMDEwMWJmMCwgMHg0OTNiYzg1NywKKwkweDRkMmMwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwODJhLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4ODMyY2FjMDAsIDB4MDAwMDAwMDUsIDB4NGM1ODAwMDAsCisJMHg0YzU0MDAwMCwgMHg0MjAwYjAwMCwgMHgwMDAwMDAwNiwgMHg0NTc4YTgwMCwKKwkweDgwNTRhODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZkLCAweDgzMzgwNTgwLAorCTB4MDAwMDAwNDYsIDB4MDQwMjAwMDQsIDB4NGEwMjVhMDQsIDB4MDAwMDAxNDQsCisJMHgwNDAxZjAwOCwgMHg0YTAyNWEwNCwgMHgwMDAwMDE0NiwgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDQxLCAweDA0MDAwMDAzLCAweDRhMDI1YTA2LCAweDAwMDAwMDAxLAorCTB4NTljYzAwMDcsIDB4ODIwMDA1MDAsIDB4ZmYwMDAwMDAsIDB4ODAwMDAxMTAsCisJMHg1OWNjMTAwOCwgMHg4MjA4MTUwMCwgMHhmZjAwMDAwMCwgMHg4MDA4MTU0MCwKKwkweDQ4MGE1ODBhLCAweDgzMzgwNTgwLCAweDAwMDAwMDQ2LCAweDA0MDIwMDA2LAorCTB4NTljYzAwMDcsIDB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4NDgwMjU4MGIsCisJMHgwNDAxZjAwNSwgMHg1OWNjMDAwOCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKKwkweDQ4MDI1ODBiLCAweDgzMzgwNTgwLCAweDAwMDAwMDQ2LCAweDA0MDIwMDA0LAorCTB4ODNjYzE0MDAsIDB4MDAwMDAwMDksIDB4MDQwMWYwMDMsIDB4ODNjYzE0MDAsCisJMHgwMDAwMDAwZCwgMHg1MDA4MDAwMCwgMHg5YzAwMDFjMCwgMHg0ODAyNTgwYywKKwkweDgwMDgxMDAwLCAweDUwMDgwMDAwLCAweDljMDAwMWMwLCAweDQ4MDI1ODBkLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwNDYsIDB4MDQwMjAwMDgsIDB4NTljYzAwMGIsCisJMHg5YzAwMDFjMCwgMHg0ODAyNTgwZSwgMHg1OWNjMDAwYywgMHg5YzAwMDFjMCwKKwkweDQ4MDI1ODBmLCAweDA0MDFmMDA3LCAweDU5Y2MwMDBmLCAweDljMDAwMWMwLAorCTB4NDgwMjU4MGUsIDB4NTljYzAwMTAsIDB4OWMwMDAxYzAsIDB4NDgwMjU4MGYsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDA0NiwgMHgwNDAyMDAwNCwgMHg4M2NjMTQwMCwKKwkweDAwMDAwMDExLCAweDA0MDFmMDAzLCAweDgzY2MxNDAwLCAweDAwMDAwMDE1LAorCTB4NDEyYzMwMDAsIDB4ODIxODM0MDAsIDB4MDAwMDAwMTAsIDB4NDIwMGIwMDAsCisJMHgwMDAwMDAwNCwgMHg1MDA4MDAwMCwgMHg5YzAwMDFjMCwgMHg0NDAwMzAwMCwKKwkweDgwMDgxMDAwLCAweDgwMTgzMDAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZhLAorCTB4NWMwMGE4MDAsIDB4NWMwMGIwMDAsIDB4MDIwMWY4MDAsIDB4MDAwMjAzODEsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0OTJmYzg1NywKKwkweDU5MzAwODA5LCAweDU4MDQwMjAwLCAweDhjMDAwNTFlLCAweDA0MDAwMDA0LAorCTB4NTkyYzAyMDgsIDB4ODQwMDA1NTgsIDB4NDgwMjVhMDgsIDB4MWMwMWYwMDAsCisJMHg1OWUwMTgwZiwgMHg1OTljMDQxMywgMHg4MDBjMTAwMCwgMHg4MDA4MDU4MCwKKwkweDA0MDIwMDAyLCAweDQxNzgxMDAwLCAweDU5ZTAwMDEwLCAweDU5ZTAwODEwLAorCTB4ODAwNDBkODAsIDB4MDQwMjA3ZmQsIDB4ODAwODA1ODAsIDB4MDQwMDAwMGIsCisJMHg0YzA4MDAwMCwgMHg1OTljMDgxNCwgMHg1OTljMTAxNSwgMHg4MDBjMDBjYywKKwkweDgwMDQwYzAwLCAweDgyMDgxNDQwLCAweDAwMDAwMDAwLCAweDVjMDAxODAwLAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NDgwM2M4NTcsIDB4MWMwMWYwMDAsCisJMHg1OTMwMDIwMywgMHg0OTMzYzg1NywgMHg0OTM3Yzg1NywgMHg0OTNiYzg1NywKKwkweDQ4MDNjODU3LCAweDgyMDAzNDgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLAorCTB4MDAxMDA2MTUsIDB4MGMwMWYwMDEsIDB4MDAxMGE0ZTgsIDB4MDAxMGE2M2EsCisJMHgwMDEwYTRlOCwgMHgwMDEwYTRlOCwgMHgwMDEwYTRlOCwgMHgwMDEwYTRlOCwKKwkweDAwMTBhNGU4LCAweDAwMTBhNTlmLCAweDAwMTBhNGVhLCAweDAwMTBhNGU4LAorCTB4MDAxMGE0ZTgsIDB4MDAxMGE0ZTgsIDB4MDAxMGE0ZTgsIDB4MDAxMGE0ZTgsCisJMHgwMjAxZjgwMCwgMHgwMDEwMDYxNSwgMHg4MzM4MDU4MCwgMHgwMDAwMDA0YywKKwkweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDAyMDFmODAwLCAweDAwMTA0NzNiLAorCTB4MDQwMjAwMjAsIDB4NTlhODA4MjYsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMDksCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwOCwgMHgwNDAwMDAxYSwgMHg4YzA0MGQxMiwKKwkweDA0MDAwMDNkLCAweDU5Y2MwODA2LCAweDgyMDQwZDAwLCAweGZmMDAwMDAwLAorCTB4ODIwNDA1ODAsIDB4MDMwMDAwMDAsIDB4MDQwMDAwMWYsIDB4ODIwNDA1ODAsCisJMHg1MDAwMDAwMCwgMHgwNDAwMDAwNSwgMHg4MjA0MDU4MCwgMHg1MjAwMDAwMCwKKwkweDAyMDIwMDAwLCAweDAwMDIwOGI0LCAweDgxMzY2OWMwLCAweDA0MDAwMDA2LAorCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDIwMWY4MDAsIDB4MDAxMDFkZTIsCisJMHg1YzAyNzgwMCwgMHg0YTAyNjQwMywgMHgwMDAwMDAwMSwgMHgwNDAxZjAxNCwKKwkweDU5Y2MwODA2LCAweDgyMDQwZDAwLCAweGZmMDAwMDAwLCAweDgyMDQwNTgwLAorCTB4MDMwMDAwMDAsIDB4MDQwMDAwMDgsIDB4ODIwNDA1ODAsIDB4NTAwMDAwMDAsCisJMHgwNDAwMDAwNSwgMHg4MjA0MDU4MCwgMHg1MjAwMDAwMCwgMHgwMjAyMDAwMCwKKwkweDAwMDIwOGI0LCAweDRhMDI2NDAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDFhLAorCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDAwMDAsIDB4ODEzNjY5YzAsCisJMHgwNDAyMDAwYiwgMHg1OWNjMDAwMSwgMHgwMjAxZjgwMCwgMHgwMDEwNTliOSwKKwkweDAyMDIwMDAwLCAweDAwMDIwOGI0LCAweDAyMDFmODAwLCAweDAwMTA0M2ZjLAorCTB4MDIwMjAwMDAsIDB4MDAwMjA4YjQsIDB4NDkzNjYwMDksIDB4NGEwMjY0MDYsCisJMHgwMDAwMDAwNCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHgwMjAxZjAwMCwKKwkweDAwMTA2NDcwLCAweDAyMDFmODAwLCAweDAwMTAzOTNlLCAweDA0MDAwMDIzLAorCTB4NTljYzA4MDYsIDB4NDgwN2M4NTcsIDB4ODIwNDBkMDAsIDB4ZmYwMDAwMDAsCisJMHg4MjA0MDU4MCwgMHgwMzAwMDAwMCwgMHgwNDAwMDAzMywgMHg4MjA0MDU4MCwKKwkweDIwMDAwMDAwLCAweDA0MDAwMDQxLCAweDgyMDQwNTgwLCAweDIxMDAwMDAwLAorCTB4MDQwMDAwNTIsIDB4ODIwNDA1ODAsIDB4MjQwMDAwMDAsIDB4MDQwMDAwNGYsCisJMHg4MjA0MDU4MCwgMHg1MDAwMDAwMCwgMHgwNDAwMDA0YywgMHg4MjA0MDU4MCwKKwkweDUyMDAwMDAwLCAweDA0MDAwMDQ5LCAweDgyMDQwNTgwLCAweDA1MDAwMDAwLAorCTB4MDQwMjAwMGQsIDB4NTljYzA4MDYsIDB4ODIwNDBkMDAsIDB4ZmYwMDAwMDAsCisJMHg5YzA0MzFjMCwgMHg0MjAyODAwMCwgMHgwMDAwMDA0NiwgMHg0MjAwMjgwMCwKKwkweDAwMDAwMDAxLCAweDA0MDFmY2Y3LCAweDA0MDFmOTQwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NDIwMDIwMDAsIDB4MDAwMDAwNTEsIDB4MDIwMWY4MDAsCisJMHgwMDEwNzdkMSwgMHg1OWNjMDAwMCwgMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwKKwkweDgyMDAwNTgwLCAweDAwZmZmZmZmLCAweDA0MDAwMDA1LCAweDRhMDI2MjAzLAorCTB4MDAwMDAwMDcsIDB4NDkzYTY0MDMsIDB4MWMwMWYwMDAsIDB4NTkzMjU4MTcsCisJMHg4MTJlNTljMCwgMHgwMjAyMDgwMCwgMHgwMDEwMDg0MywgMHgwMjAxZjAwMCwKKwkweDAwMDIwOGI0LCAweDgxMzY2OWMwLCAweDA0MDAwN2RmLCAweDU5MzQwNDAwLAorCTB4ODIwMDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsCisJMHgwNDAyMDdkOSwgMHgwNDAxZmM3MywgMHgwNDAyMDdkNywgMHg0YTAyNjQwMywKKwkweDAwMDAwMDA5LCAweDRhMDI2NDFhLCAweDAwMDAwMDBlLCAweDRhMDI2MjFhLAorCTB4MDAwMDE5MDAsIDB4MDQwMWY3YTIsIDB4ODEzNjY5YzAsIDB4MDQwMDAwMGMsCisJMHg1OTM0MGMwMCwgMHg4MjA0MDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwKKwkweDAwMDAwMDA5LCAweDA0MDAwNzk0LCAweDgyMDQwNTAwLCAweDAwMDBmZjAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDA3MDAsIDB4MDQwMjA3YzMsIDB4NGEwMjY0MDMsCiAJMHgwMDAwMDAwOSwgMHg0YTAyNjQxYSwgMHgwMDAwMDAwOSwgMHg0YTAyNjIxYSwKLQkweDAwMDAwMDAwLCAweDgxMzY2OWMwLCAweDA0MDIwMDBiLCAweDU5Y2MwMDAxLAotCTB4MDIwMWY4MDAsIDB4MDAxMDVjOWEsIDB4MDIwMjAwMDAsIDB4MDAwMjA3N2QsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNDVhNiwgMHgwMjAyMDAwMCwgMHgwMDAyMDc3ZCwKLQkweDQ5MzY2MDA5LCAweDRhMDI2NDA2LCAweDAwMDAwMDA0LCAweDRhMDI2MjAzLAotCTB4MDAwMDAwMDEsIDB4MDIwMWYwMDAsIDB4MDAxMDY3MmIsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2IyNSwgMHgwNDAwMDAyMywgMHg1OWNjMDgwNiwgMHg0ODA3Yzg1NywKLQkweDgyMDQwZDAwLCAweGZmMDAwMDAwLCAweDgyMDQwNTgwLCAweDAzMDAwMDAwLAotCTB4MDQwMDAwMzMsIDB4ODIwNDA1ODAsIDB4MjAwMDAwMDAsIDB4MDQwMDAwNDEsCi0JMHg4MjA0MDU4MCwgMHgyMTAwMDAwMCwgMHgwNDAwMDA1MiwgMHg4MjA0MDU4MCwKLQkweDI0MDAwMDAwLCAweDA0MDAwMDRmLCAweDgyMDQwNTgwLCAweDUwMDAwMDAwLAotCTB4MDQwMDAwNGMsIDB4ODIwNDA1ODAsIDB4NTIwMDAwMDAsIDB4MDQwMDAwNDksCi0JMHg4MjA0MDU4MCwgMHgwNTAwMDAwMCwgMHgwNDAyMDAwZCwgMHg1OWNjMDgwNiwKLQkweDgyMDQwZDAwLCAweGZmMDAwMDAwLCAweDljMDQzMWMwLCAweDQyMDI4MDAwLAotCTB4MDAwMDAwNDYsIDB4NDIwMDI4MDAsIDB4MDAwMDAwMDEsIDB4MDQwMWZjZjMsCi0JMHgwNDAxZjkzYywgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0MjAwMjAwMCwKLQkweDAwMDAwMDUxLCAweDAyMDFmODAwLCAweDAwMTA3YTRhLCAweDU5Y2MwMDAwLAotCTB4ODIwMDA1MDAsIDB4MDBmZmZmZmYsIDB4ODIwMDA1ODAsIDB4MDBmZmZmZmYsCi0JMHgwNDAwMDAwNSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNywgMHg0OTNhNjQwMywKLQkweDFjMDFmMDAwLCAweDU5MzI1ODE3LCAweDgxMmU1OWMwLCAweDAyMDIwODAwLAotCTB4MDAxMDA3ZmQsIDB4MDIwMWYwMDAsIDB4MDAwMjA3N2QsIDB4ODEzNjY5YzAsCi0JMHgwNDAwMDdkZiwgMHg1OTM0MDQwMCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDA0MDIwN2Q5LCAweDA0MDFmYzZmLAotCTB4MDQwMjA3ZDcsIDB4NGEwMjY0MDMsIDB4MDAwMDAwMDksIDB4NGEwMjY0MWEsCi0JMHgwMDAwMDAwZSwgMHg0YTAyNjIxYSwgMHgwMDAwMTkwMCwgMHgwNDAxZjdhMiwKLQkweDgxMzY2OWMwLCAweDA0MDAwMDBjLCAweDU5MzQwYzAwLCAweDgyMDQwNTAwLAotCTB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDksIDB4MDQwMDA3OTQsCi0JMHg4MjA0MDUwMCwgMHgwMDAwZmYwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDcwMCwKLQkweDA0MDIwN2MzLCAweDRhMDI2NDAzLCAweDAwMDAwMDA5LCAweDRhMDI2NDFhLAotCTB4MDAwMDAwMDksIDB4NGEwMjYyMWEsIDB4MDAwMDFlMDAsIDB4MDQwMWY3OGUsCi0JMHg4MTM2NjljMCwgMHgwNDAwMDdmOCwgMHg1OTM0MGMwMCwgMHg4MjA0MDUwMCwKLQkweDAwMDBmZjAwLCAweDgyMDAwNTgwLCAweDAwMDAwNzAwLCAweDA0MDAwN2YyLAotCTB4MDQwMWY3YjMsIDB4NGQyYzAwMDAsIDB4NGM1ODAwMDAsIDB4NGM1MDAwMDAsCi0JMHg0YzU0MDAwMCwgMHg0MTM4NTAwMCwgMHg4MzM4MDU4MCwgMHgwMDAwMDA1NCwKLQkweDAyMDIwODAwLCAweDAwMTAwNWQ4LCAweDU5MzI1ODA4LCAweDU5MmMwYzBiLAotCTB4ODIwNDBkMDAsIDB4MDAwMGUwMDAsIDB4ODIwNDA1ODAsIDB4MDAwMDIwMDAsCi0JMHgwNDAyMDA3NiwgMHg1OTMwMDgxNywgMHg4MDA0MDljMCwgMHgwNDAwMDAxNCwKLQkweDU4MDQxNDA0LCAweDQxY2NhODAwLCAweDgyMDRhNDAwLCAweDAwMDAwMDA1LAotCTB4ODIwODA0ODAsIDB4MDAwMDAwMTAsIDB4MDQwMjEwMDQsIDB4NDAwOGIwMDAsCi0JMHgwNDAxZmI2YiwgMHgwNDAxZjAwYSwgMHg0MDAwMTAwMCwgMHg0MjAwYjAwMCwKLQkweDAwMDAwMDBmLCAweDA0MDFmYjY2LCAweDU4MDQwODAxLCAweDgwMDQwOWMwLAotCTB4MDQwMjA3ZjIsIDB4MDIwMWY4MDAsIDB4MDAxMDA1ZDgsIDB4ODEzNjY5YzAsCi0JMHgwNDAwMDA1ZSwgMHg1OTM0NGMwMCwgMHg1OTJjMGMwOSwgMHg0ODA3Yzg1NywKLQkweDQ4MjdjODU3LCAweDgyMDQwZDAwLCAweDAwMDAwMGZmLCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMDMsIDB4MDQwMDAwMmEsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDUsCi0JMHgwNDAwMDAzMiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAyMCwgMHgwNDAwMDAzNiwKLQkweDgyMDQwNTgwLCAweDAwMDAwMDUyLCAweDA0MDAwMDQyLCAweDgyMDQwNTgwLAotCTB4MDAwMDAwNTAsIDB4MDQwMDAwNDIsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMjEsCi0JMHgwNDAwMDAwNCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAyNCwgMHgwNDAyMDA0MywKLQkweDgyMjQwNTAwLCAweDAwMDBmZjAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDA3LAotCTB4MDQwMDAwMDgsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDksIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHg0MjAwNTAwMCwgMHgwMDAwMDAwYywgMHgwNDAxZjAzNywKLQkweDRhMDI1YTA2LCAweDAwMDAwMDMxLCAweDRhMDI1ODBkLCAweDAwMDAwMDA5LAotCTB4NTkzNDA0MDAsIDB4NDgwMjU4MGUsIDB4MDIwMWY4MDAsIDB4MDAwMjAyZGEsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNzkxMSwgMHgwNDAxZjAzZCwgMHgwMjAxZjgwMCwKLQkweDAwMTA0MmI0LCAweDAyMDFmODAwLCAweDAwMTA0NjJhLCAweDQyMDAwODAwLAotCTB4MDAwMDAwMDMsIDB4MDIwMWY4MDAsIDB4MDAxMDQ1NzEsIDB4NDIwMDUwMDAsCi0JMHgwMDAwMDAwOCwgMHgwNDAxZjAyMSwgMHg1OWNjMDAwNywgMHgwMjAxZjgwMCwKLQkweDAwMTA1ZWVjLCAweDA0MDIwMDFkLCAweDAyMDFmODAwLCAweDAwMTA0MmI0LAotCTB4MDQwMWYwMWEsIDB4ODIyNDA1MDAsIDB4MDAwMGZmMDAsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwNywgMHgwNDAwMDdkZiwgMHg4MjI0MDUwMCwgMHgwMDAwMDBmZiwKLQkweDgyMDAwNTgwLCAweDAwMDAwMDA5LCAweDA0MDAwN2RhLCAweDAyMDFmODAwLAotCTB4MDAxMDQ2OGQsIDB4NDIwMDUwMDAsIDB4MDAwMDAwMGEsIDB4MDQwMWYwMGIsCi0JMHg0MjAwNTAwMCwgMHgwMDAwMDAwZSwgMHgwNDAxZjAwMywgMHg0MjAwNTAwMCwKLQkweDAwMDAwMDEwLCAweDgyMjQwNTAwLCAweDAwMDBmZjAwLCAweDgyMDAwNTgwLAotCTB4MDAwMDAwMDcsIDB4MDQwMDA3Y2IsIDB4NDgyYTY0MDMsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMSwgMHg1OTJjMDAwZCwgMHg0ODAyNjAxMSwgMHg0OTdhNjAxMywKLQkweDU5YTgwMDM4LCAweDQ4MDI2MjA2LCAweDQxN2E3ODAwLCAweDAyMDFmODAwLAotCTB4MDAxMDY3MmIsIDB4NTkzMjU4MTcsIDB4ODEyZTU5YzAsIDB4MDQwMDAwMDQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHg0OTdhNjAxNywgMHg1YzAwYTgwMCwKLQkweDVjMDBhMDAwLCAweDVjMDBiMDAwLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLAotCTB4NGQyYzAwMDAsIDB4NTkzMjU4MDgsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTMsCi0JMHgwNDAyMDAyOSwgMHg1OTMwMGMwMywgMHg4MjA0MDU4MCwgMHgwMDAwMDA1NCwKLQkweDA0MDAwMDFlLCAweDgyMDQwNTgwLCAweDAwMDAwMDEwLCAweDA0MDAwMDE4LAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMGUsIDB4MDQwMDAwMTUsIDB4ODIwNDA1ODAsCi0JMHgwMDAwMDAwOCwgMHgwNDAwMDAwZCwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwYywKLQkweDA0MDAwMDBhLCAweDgyMDQwNTgwLCAweDAwMDAwMDBhLCAweDAyMDIwODAwLAotCTB4MDAxMDA1ZDgsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNDU3MSwgMHgwNDAxZjAwOSwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwKLQkweDAyMDFmODAwLCAweDAwMTA0NTcxLCAweDA0MDFmMDA0LCAweDU5MzQwMjAwLAotCTB4ODQwMDA1MWEsIDB4NDgwMjZhMDAsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwKLQkweDA0MDFmMDIyLCAweDgzMzgwNTgwLCAweDAwMDAwMDI3LCAweDA0MDAwMDBlLAotCTB4ODMzODA1ODAsIDB4MDAwMDAwMTQsIDB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmJiZiwgMHg0MjAyODAwMCwgMHgwMDAwMDAzMSwKKwkweDAwMDAxZTAwLCAweDA0MDFmNzhlLCAweDgxMzY2OWMwLCAweDA0MDAwN2Y4LAorCTB4NTkzNDBjMDAsIDB4ODIwNDA1MDAsIDB4MDAwMGZmMDAsIDB4ODIwMDA1ODAsCisJMHgwMDAwMDcwMCwgMHgwNDAwMDdmMiwgMHgwNDAxZjdiMywgMHg0ZDJjMDAwMCwKKwkweDRjNTgwMDAwLCAweDRjNTAwMDAwLCAweDRjNTQwMDAwLCAweDQxMzg1MDAwLAorCTB4ODMzODA1ODAsIDB4MDAwMDAwNTQsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MTUsCisJMHg1OTMyNTgwOCwgMHg1OTJjMGMwYiwgMHg4MjA0MGQwMCwgMHgwMDAwZTAwMCwKKwkweDgyMDQwNTgwLCAweDAwMDAyMDAwLCAweDA0MDIwMDc2LCAweDU5MzAwODE3LAorCTB4ODAwNDA5YzAsIDB4MDQwMDAwMTQsIDB4NTgwNDE0MDQsIDB4NDFjY2E4MDAsCisJMHg4MjA0YTQwMCwgMHgwMDAwMDAwNSwgMHg4MjA4MDQ4MCwgMHgwMDAwMDAxMCwKKwkweDA0MDIxMDA0LCAweDQwMDhiMDAwLCAweDA0MDFmYjg0LCAweDA0MDFmMDBhLAorCTB4NDAwMDEwMDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGYsIDB4MDQwMWZiN2YsCisJMHg1ODA0MDgwMSwgMHg4MDA0MDljMCwgMHgwNDAyMDdmMiwgMHgwMjAxZjgwMCwKKwkweDAwMTAwNjE1LCAweDgxMzY2OWMwLCAweDA0MDAwMDVlLCAweDU5MzQ0YzAwLAorCTB4NTkyYzBjMDksIDB4NDgwN2M4NTcsIDB4NDgyN2M4NTcsIDB4ODIwNDBkMDAsCisJMHgwMDAwMDBmZiwgMHg4MjA0MDU4MCwgMHgwMDAwMDAwMywgMHgwNDAwMDAyYSwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDA1LCAweDA0MDAwMDMyLCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMjAsIDB4MDQwMDAwMzYsIDB4ODIwNDA1ODAsIDB4MDAwMDAwNTIsCisJMHgwNDAwMDA0MiwgMHg4MjA0MDU4MCwgMHgwMDAwMDA1MCwgMHgwNDAwMDA0MiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDIxLCAweDA0MDAwMDA0LCAweDgyMDQwNTgwLAorCTB4MDAwMDAwMjQsIDB4MDQwMjAwNDMsIDB4ODIyNDA1MDAsIDB4MDAwMGZmMDAsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywgMHgwNDAwMDAwOCwgMHg0MjAwMDgwMCwKKwkweDAwMDAwMDA5LCAweDAyMDFmODAwLCAweDAwMTA0M2M3LCAweDQyMDA1MDAwLAorCTB4MDAwMDAwMGMsIDB4MDQwMWYwMzcsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMzEsCisJMHg0YTAyNTgwZCwgMHgwMDAwMDAwOSwgMHg1OTM0MDQwMCwgMHg0ODAyNTgwZSwKKwkweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDAyMDFmODAwLCAweDAwMTA3Njk4LAorCTB4MDQwMWYwM2QsIDB4MDIwMWY4MDAsIDB4MDAxMDQwZTQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDQ4MCwgMHg0MjAwMDgwMCwgMHgwMDAwMDAwMywgMHgwMjAxZjgwMCwKKwkweDAwMTA0M2M3LCAweDQyMDA1MDAwLCAweDAwMDAwMDA4LCAweDA0MDFmMDIxLAorCTB4NTljYzAwMDcsIDB4MDIwMWY4MDAsIDB4MDAxMDVjMjUsIDB4MDQwMjAwMWQsCisJMHgwMjAxZjgwMCwgMHgwMDEwNDBlNCwgMHgwNDAxZjAxYSwgMHg4MjI0MDUwMCwKKwkweDAwMDBmZjAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDA3LCAweDA0MDAwN2RmLAorCTB4ODIyNDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDksCisJMHgwNDAwMDdkYSwgMHgwMjAxZjgwMCwgMHgwMDEwNDRlMSwgMHg0MjAwNTAwMCwKKwkweDAwMDAwMDBhLCAweDA0MDFmMDBiLCAweDQyMDA1MDAwLCAweDAwMDAwMDBlLAorCTB4MDQwMWYwMDMsIDB4NDIwMDUwMDAsIDB4MDAwMDAwMTAsIDB4ODIyNDA1MDAsCisJMHgwMDAwZmYwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwNywgMHgwNDAwMDdjYiwKKwkweDQ4MmE2NDAzLCAweDRhMDI2MjAzLCAweDAwMDAwMDAxLCAweDU5MmMwMDBkLAorCTB4NDgwMjYwMTEsIDB4NDk3YTYwMTMsIDB4NTlhODAwMzgsIDB4NDgwMjYyMDYsCisJMHg0MTdhNzgwMCwgMHgwMjAxZjgwMCwgMHgwMDEwNjQ3MCwgMHg1OTMyNTgxNywKKwkweDgxMmU1OWMwLCAweDA0MDAwMDA0LCAweDAyMDFmODAwLCAweDAwMTAwODQzLAorCTB4NDk3YTYwMTcsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMGIwMDAsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0ZDJjMDAwMCwgMHg1OTMyNTgwOCwKKwkweDgzMzgwNTgwLCAweDAwMDAwMDEzLCAweDA0MDIwMDJhLCAweDQ5MmZjODU3LAorCTB4NTkzMDBjMDMsIDB4ODIwNDA1ODAsIDB4MDAwMDAwNTQsIDB4MDQwMDAwMWUsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAxMCwgMHgwNDAwMDAxOCwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDBlLCAweDA0MDAwMDE1LCAweDgyMDQwNTgwLCAweDAwMDAwMDA4LAorCTB4MDQwMDAwMGQsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMGMsIDB4MDQwMDAwMGEsCisJMHg4MjA0MDU4MCwgMHgwMDAwMDAwYSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwKKwkweDQyMDAwODAwLCAweDAwMDAwMDA2LCAweDAyMDFmODAwLCAweDAwMTA0M2M3LAorCTB4MDQwMWYwMDksIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDEwNDNjNywgMHgwNDAxZjAwNCwgMHg1OTM0MDIwMCwgMHg4NDAwMDUxYSwKKwkweDQ4MDI2YTAwLCAweDRhMDI1YTA2LCAweDAwMDAwMDAwLCAweDAyMDFmODAwLAorCTB4MDAwMjAzODEsIDB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsIDB4MDQwMWYwMjQsCisJMHg4MzM4MDU4MCwgMHgwMDAwMDAyNywgMHgwNDAwMDAwZiwgMHg4MzM4MDU4MCwKKwkweDAwMDAwMDE0LCAweDAyMDIwODAwLCAweDAwMTAwNjE1LCAweDQ5MmZjODU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDY4ZjYsIDB4NDIwMjgwMDAsIDB4MDAwMDAwMzEsCiAJMHg0MjAwMDgwMCwgMHgwMDAwMDAwNCwgMHg0MjAwMTAwMCwgMHgwMDAwMDBmZiwKLQkweDA0MDFmMDA5LCAweDAyMDFmODAwLCAweDAwMTA2YmJmLCAweDQyMDI4MDAwLAotCTB4MDAwMDAwMzEsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDQsIDB4NDIwMDEwMDAsCi0JMHgwMDAwMDAxMCwgMHg0OTQyNWEwNiwgMHg0ODA2NTgwZCwgMHg0ODBhNTgwZSwKLQkweDAyMDFmODAwLCAweDAwMDIwMmRhLCAweDAyMDFmODAwLCAweDAwMTA0YzE5LAotCTB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsCi0JMHg0MjAwNzAwMCwgMHgwMDEwYjdmOCwgMHg1ODM4MDgwNywgMHg4MDA0MDljMCwKLQkweDA0MDIwMDA1LCAweDQ5MmM3MDA4LCAweDQ5MmM3MDA3LCAweDAyMDFmMDAwLAotCTB4MDAxMDA4NzUsIDB4NDkyYzA4MDAsIDB4NDkyYzcwMDcsIDB4MWMwMWYwMDAsCi0JMHg0ZDJjMDAwMCwgMHg0YzU4MDAwMCwgMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwKLQkweDQ5MzNjODU3LCAweDQ5MzdjODU3LCAweDU5Y2MwODA2LCAweDQ4MDdjODU3LAotCTB4ODIwNDBkMDAsIDB4ZmYwMDAwMDAsIDB4ODIwNDA1ODAsIDB4MDMwMDAwMDAsCi0JMHgwNDAwMDAwZCwgMHg4MjA0MDU4MCwgMHgwNTAwMDAwMCwgMHgwNDAwMDAwYSwKLQkweDgyMDQwNTgwLCAweDIxMDAwMDAwLCAweDA0MDAwMDMwLCAweDgyMDQwNTgwLAotCTB4MjQwMDAwMDAsIDB4MDQwMDAwMmQsIDB4ODIwNDA1ODAsIDB4MjAwMDAwMDAsCi0JMHgwNDAyMDAyZiwgMHgwMjAxZjgwMCwgMHgwMDEwMDdlNCwgMHgwNDAwMDAyYywKLQkweDQ5MmZjODU3LCAweDQ5MmU2MDE3LCAweDU5YThiMDE2LCAweDgyNThiNDAwLAotCTB4MDAwMDAwMWIsIDB4ODI1OGI1MDAsIDB4ZmZmZmZmZmMsIDB4ODA1OGIxMDQsCi0JMHg0ODVhNWMwNCwgMHg0MTJjNzgwMCwgMHg0MWNjYTAwMCwgMHg4MjU4MDQ4MCwKLQkweDAwMDAwMDEwLCAweDA0MDIxMDA1LCAweDgzMmNhYzAwLCAweDAwMDAwMDA1LAotCTB4MDQwMWZhNjMsIDB4MDQwMWYwMTUsIDB4NDA1ODA4MDAsIDB4NDIwMGIwMDAsCi0JMHgwMDAwMDAwZiwgMHg4MzJjYWMwMCwgMHgwMDAwMDAwNSwgMHgwNDAxZmE1YywKLQkweDgyMDRiNDgwLCAweDAwMDAwMDBmLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LAotCTB4MDQwMDAwMDQsIDB4NDkyYzc4MDEsIDB4NDEyYzc4MDAsIDB4MDQwMWY3ZWMsCi0JMHg1OTMyNTgxNywgMHgwMjAxZjgwMCwgMHgwMDEwMDdmZCwgMHg0OTdhNjAxNywKLQkweDgwMDAwNTgwLCAweDA0MDFmMDA2LCAweDU5MzQwMjAwLCAweDg0MDAwNTU0LAotCTB4NDgwMjZhMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsIDB4NWMwMGE4MDAsCi0JMHg1YzAwYTAwMCwgMHg1YzAwYjAwMCwgMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwKLQkweDQ5MzNjODU3LCAweDQ5MmZjODU3LCAweDRkMmMwMDAwLCAweDU5MzAwYTAzLAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDcsIDB4MDQwMDAwMzYsIDB4ODIwNDA1ODAsCi0JMHgwMDAwMDAwMSwgMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwMjAxZjgwMCwKLQkweDAwMTA2YzU1LCAweDRkZjAwMDAwLCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLAotCTB4MDQwMjAwMTYsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMDQsCi0JMHg4NDAwMDUyMCwgMHg0ODAyNjAwNCwgMHgwNDAxZjAxNiwgMHg0MjAwMTAwMCwKLQkweDAwMTBiN2Y2LCAweDUwMDgxMDAwLCAweDU4MDgwMDAyLCAweDgyMDAwNTgwLAotCTB4MDAwMDAxMDAsIDB4MDQwMDAwMDYsIDB4NTgwODAwMGMsIDB4ODEzMDA1ODAsCi0JMHgwMjAyMDgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxZjAwYSwgMHgwMjAxZjgwMCwKLQkweDAwMTA2ZThlLCAweDA0MDIwMDIwLCAweDU5MzAwMDA0LCAweDhjMDAwNTIwLAotCTB4MDQwMDAwMDQsIDB4ODQwMDA1MjAsIDB4NDgwMjYwMDQsIDB4MDQwMWYwMDMsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNjhkMywgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwKLQkweDAwMTA2YzRiLCAweDAyMDFmODAwLCAweDAwMTA5MDM3LCAweDAyMDAwODAwLAotCTB4MDAxMDA1ZDgsIDB4NTkzMjU4MDgsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDUsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDJkYSwgMHgwMjAxZjgwMCwgMHgwMDEwNGMxOSwKLQkweDU5MzI1ODE3LCAweDgxMmU1OWMwLCAweDAyMDIwODAwLCAweDAwMTAwN2ZkLAotCTB4MDIwMWY4MDAsIDB4MDAxMDc5MTEsIDB4ODAwMDA1ODAsIDB4NWMwMjU4MDAsCi0JMHgxYzAxZjAwMCwgMHg1YzAzZTAwMCwgMHgwMjAwMDgwMCwgMHgwMDEwNmM0YiwKLQkweDU5MzAwNDA2LCAweDgyMDAwNTgwLCAweDAwMDAwMDExLCAweDA0MDAwN2I4LAotCTB4MDQwMWY3ZjcsIDB4NGMwNDAwMDAsIDB4NTkzNDAyMDAsIDB4NDgwM2M4NTcsCisJMHgwNDAxZjAwYSwgMHg0OTJmYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwNjhmNiwKKwkweDQyMDI4MDAwLCAweDAwMDAwMDMxLCAweDQyMDAwODAwLCAweDAwMDAwMDA0LAorCTB4NDIwMDEwMDAsIDB4MDAwMDAwMTAsIDB4NDk0MjVhMDYsIDB4NDgwNjU4MGQsCisJMHg0ODBhNTgwZSwgMHgwMjAxZjgwMCwgMHgwMDAyMDM4MSwgMHgwMjAxZjgwMCwKKwkweDAwMTA0YTgzLCAweDAyMDFmODAwLCAweDAwMTA3Njk4LCAweDVjMDI1ODAwLAorCTB4MWMwMWYwMDAsIDB4NDkyZmM4NTcsIDB4NDIwMDcwMDAsIDB4MDAxMGI1ZjYsCisJMHg1ODM4MDgwNywgMHg4MDA0MDljMCwgMHgwNDAyMDAwNSwgMHg0OTJjNzAwOCwKKwkweDQ5MmM3MDA3LCAweDAyMDFmMDAwLCAweDAwMTAwOGJlLCAweDQ5MmMwODAwLAorCTB4NDkyYzcwMDcsIDB4MWMwMWYwMDAsIDB4NGQyYzAwMDAsIDB4NGM1ODAwMDAsCisJMHg0YzUwMDAwMCwgMHg0YzU0MDAwMCwgMHg0OTMzYzg1NywgMHg0OTM3Yzg1NywKKwkweDU5Y2MwODA2LCAweDQ4MDdjODU3LCAweDgyMDQwZDAwLCAweGZmMDAwMDAwLAorCTB4ODIwNDA1ODAsIDB4MDMwMDAwMDAsIDB4MDQwMDAwMGQsIDB4ODIwNDA1ODAsCisJMHgwNTAwMDAwMCwgMHgwNDAwMDAwYSwgMHg4MjA0MDU4MCwgMHgyMTAwMDAwMCwKKwkweDA0MDAwMDMwLCAweDgyMDQwNTgwLCAweDI0MDAwMDAwLCAweDA0MDAwMDJkLAorCTB4ODIwNDA1ODAsIDB4MjAwMDAwMDAsIDB4MDQwMjAwMmYsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDgyYSwgMHgwNDAwMDAyYywgMHg0OTJmYzg1NywgMHg0OTJlNjAxNywKKwkweDU5YThiMDE2LCAweDgyNThiNDAwLCAweDAwMDAwMDFiLCAweDgyNThiNTAwLAorCTB4ZmZmZmZmZmMsIDB4ODA1OGIxMDQsIDB4NDg1YTVjMDQsIDB4NDEyYzc4MDAsCisJMHg0MWNjYTAwMCwgMHg4MjU4MDQ4MCwgMHgwMDAwMDAxMCwgMHgwNDAyMTAwNSwKKwkweDgzMmNhYzAwLCAweDAwMDAwMDA1LCAweDA0MDFmYTc4LCAweDA0MDFmMDE1LAorCTB4NDA1ODA4MDAsIDB4NDIwMGIwMDAsIDB4MDAwMDAwMGYsIDB4ODMyY2FjMDAsCisJMHgwMDAwMDAwNSwgMHgwNDAxZmE3MSwgMHg4MjA0YjQ4MCwgMHgwMDAwMDAwZiwKKwkweDAyMDFmODAwLCAweDAwMTAwODJhLCAweDA0MDAwMDA0LCAweDQ5MmM3ODAxLAorCTB4NDEyYzc4MDAsIDB4MDQwMWY3ZWMsIDB4NTkzMjU4MTcsIDB4MDIwMWY4MDAsCisJMHgwMDEwMDg0MywgMHg0OTdhNjAxNywgMHg4MDAwMDU4MCwgMHgwNDAxZjAwNiwKKwkweDU5MzQwMjAwLCAweDg0MDAwNTU0LCAweDQ4MDI2YTAwLCAweDgyMDAwNTQwLAorCTB4MDAwMDAwMDEsIDB4NWMwMGE4MDAsIDB4NWMwMGEwMDAsIDB4NWMwMGIwMDAsCisJMHg1YzAyNTgwMCwgMHgxYzAxZjAwMCwgMHg0OTMzYzg1NywgMHg0OTJmYzg1NywKKwkweDRkMmMwMDAwLCAweDRjNWMwMDAwLCAweDU5MzBiYzA2LCAweDU5MzAwYTAzLAorCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDcsIDB4MDQwMDAwM2MsIDB4ODIwNDA1ODAsCisJMHgwMDAwMDAwMSwgMHgwMjAyMDgwMCwgMHgwMDEwMDYxNSwgMHgwMjAxZjgwMCwKKwkweDAwMTA2OThjLCAweDRkZjAwMDAwLCAweDU5OGMwMDBkLCAweDgxMzAwNTgwLAorCTB4MDQwMjAwMTksIDB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMDQsCisJMHg4NDAwMDUyMCwgMHg0ODAyNjAwNCwgMHgwNDAxZjAxOSwgMHg4MjVjMDU4MCwKKwkweDAwMDAwMDExLCAweDA0MDIwMDBkLCAweDQyMDAxMDAwLCAweDAwMTBiNWY0LAorCTB4NTAwODEwMDAsIDB4NTgwODAwMDIsIDB4ODIwMDA1ODAsIDB4MDAwMDAxMDAsCisJMHgwNDAwMDAwNiwgMHg1ODA4MDAwYywgMHg4MTMwMDU4MCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwNjE1LCAweDA0MDFmMDBhLCAweDAyMDFmODAwLCAweDAwMTA2YmUyLAorCTB4MDQwMjAwMjcsIDB4NTkzMDAwMDQsIDB4OGMwMDA1MjAsIDB4MDQwMDAwMDQsCisJMHg4NDAwMDUyMCwgMHg0ODAyNjAwNCwgMHgwNDAxZjAwMywgMHgwMjAxZjgwMCwKKwkweDAwMTA2NjE5LCAweDVjMDNlMDAwLCAweDAyMDAwODAwLCAweDAwMTA2OTgyLAorCTB4MDIwMWY4MDAsIDB4MDAxMDhkZjQsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCisJMHg1OTMyNTgwOCwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwNSwgMHgwMjAxZjgwMCwKKwkweDAwMDIwMzgxLCAweDgyNWMwNTgwLCAweDAwMDAwMDA1LCAweDA0MDAwMDFiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDRhODMsIDB4ODI1YzA1ODAsIDB4MDAwMDAwMDUsCisJMHgwNDAwMDAxNiwgMHg1OTMyNTgxNywgMHg4MTJlNTljMCwgMHgwMjAyMDgwMCwKKwkweDAwMTAwODQzLCAweDAyMDFmODAwLCAweDAwMTA3Njk4LCAweDgwMDAwNTgwLAorCTB4NWMwMGI4MDAsIDB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4NWMwM2UwMDAsCisJMHgwMjAwMDgwMCwgMHgwMDEwNjk4MiwgMHg1OTMwMGMwNiwgMHg4MjA0MDU4MCwKKwkweDAwMDAwMDExLCAweDA0MDAwN2FlLCAweDgyMDQwNTgwLCAweDAwMDAwMDA1LAorCTB4MDQwMDA3YWIsIDB4MDQwMWY3ZjMsIDB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsCisJMHgwNDAxZjdlZiwgMHg0YzA0MDAwMCwgMHg1OTM0MDIwMCwgMHg0ODAzYzg1NywKIAkweDhjMDAwNTFjLCAweDA0MDAwMDA5LCAweDU5Y2MwODA1LCAweDU5MWMwMDE5LAogCTB4NDgwM2M4NTcsIDB4ODAwNDA1ODAsIDB4MDQwMDAwMDQsIDB4ODAwMDA1ODAsCiAJMHg0ODAzYzg1NiwgMHgwNDAxZjAwMywgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwKIAkweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDRjMDAwMDAwLCAweDRjMGMwMDAwLAogCTB4NGMxMDAwMDAsIDB4NDIwMDE4MDAsIDB4MDAwMGZmZmYsIDB4NDIwMDIwMDAsCi0JMHgwMDAwMDAwNCwgMHgwNDAxZjAxMCwgMHg0YzAwMDAwMCwgMHg0YzBjMDAwMCwKKwkweDAwMDAwMDA0LCAweDA0MDFmMDEzLCAweDRjMDAwMDAwLCAweDRjMGMwMDAwLAogCTB4NGMxMDAwMDAsIDB4NTkzMDIwMDksIDB4NTgxMDFjMDMsIDB4NDIwMDIwMDAsCi0JMHgwMDAwMDAwNCwgMHgwNDAxZjAwOCwgMHg0YzAwMDAwMCwgMHg0YzBjMDAwMCwKLQkweDRjMTAwMDAwLCAweDU5MzAyMDA5LCAweDU4MTAxYzAzLCAweDQyMDAyMDAwLAotCTB4MDAwMDAwMDcsIDB4NDgwZmM4NTcsIDB4NDgxM2M4NTcsIDB4NDgxYmM4NTcsCi0JMHgwMjAxZjgwMCwgMHgwMDEwM2FhZSwgMHg1YzAwMjAwMCwgMHg1YzAwMTgwMCwKLQkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDgzMzgwNTgwLCAweDAwMDAwMDkyLAotCTB4MDIwMjA4MDAsIDB4MDAxMDA1ZDgsIDB4NDIwMDA4MDAsIDB4ODAwMDAwNDAsCi0JMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0OTNhNjQwMywgMHgwMjAxZjAwMCwKLQkweDAwMDIwNzIxLCAweDRkNDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAzYjI1LAotCTB4MDQwMDAwMDgsIDB4NTlhODAwMDUsIDB4ODQwMDA1NDQsIDB4NDgwMzUwMDUsCi0JMHg0MjAyODAwMCwgMHgwMDAwMDAyYSwgMHgwMjAxZjgwMCwgMHgwMDEwYTQ0OSwKLQkweDVjMDI4MDAwLCAweDFjMDFmMDAwLCAweDU5YTgwMDI2LCAweDhjMDAwNTA4LAotCTB4MDQwMDAwMDUsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MGEsIDB4MDQwMjAwMDIsCi0JMHgxYzAxZjAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAwMSwgMHgxYzAxZjAwMCwKLQkweDU5MzAwNDIwLCAweDg0MDAwNTQwLCAweDQ4MDI2NDIwLCAweDFjMDFmMDAwLAotCTB4NDgxN2M4NTcsIDB4NGMwMDAwMDAsIDB4NGMwNDAwMDAsIDB4OGMxNDJkMmEsCi0JMHgwNDAwMDAwNCwgMHg1OTg4MDBiOCwgMHg4MDAwMDAwMCwgMHg0ODAzMTBiOCwKLQkweDhjMTQyZDJlLCAweDA0MDAwMDA0LCAweDU5ODgwMGI5LCAweDgwMDAwMDAwLAotCTB4NDgwMzEwYjksIDB4OGMxNDJkMmMsIDB4MDQwMDAwMTMsIDB4NDAxNDAwMDAsCi0JMHg4MjAwMDUwMCwgMHgwMDA3MDAwMCwgMHg4MjAwMGQ4MCwgMHgwMDAzMDAwMCwKLQkweDA0MDAwMDBkLCAweDgyMDAwZDgwLCAweDAwMDQwMDAwLCAweDA0MDAwMDBhLAotCTB4ODIwMDBkODAsIDB4MDAwNTAwMDAsIDB4MDQwMDAwMDcsIDB4NTk4ODAwMDUsCi0JMHg4MDAwMDAwMCwgMHg0ODAzMTAwNSwgMHg1OTg4MDBiYSwgMHg4MDAwMDAwMCwKLQkweDQ4MDMxMGJhLCAweDVjMDAwODAwLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAotCTB4NDgxN2M4NTcsIDB4NGMwMDAwMDAsIDB4NGMwNDAwMDAsIDB4OGMxNDJkMmEsCi0JMHgwNDAwMDAwNCwgMHg1OTg4MDBiYiwgMHg4MDAwMDAwMCwgMHg0ODAzMTBiYiwKLQkweDhjMTQyZDJlLCAweDA0MDAwMDA0LCAweDU5ODgwMGJjLCAweDgwMDAwMDAwLAotCTB4NDgwMzEwYmMsIDB4OGMxNDJkMmMsIDB4MDQwMDAwMTMsIDB4NDAxNDAwMDAsCi0JMHg4MjAwMDUwMCwgMHgwMDA3MDAwMCwgMHg4MjAwMGQ4MCwgMHgwMDAzMDAwMCwKLQkweDA0MDAwMDBkLCAweDgyMDAwZDgwLCAweDAwMDQwMDAwLCAweDA0MDAwMDBhLAotCTB4ODIwMDBkODAsIDB4MDAwNTAwMDAsIDB4MDQwMDAwMDcsIDB4NTk4ODAwMDUsCi0JMHg4MDAwMDAwMCwgMHg0ODAzMTAwNSwgMHg1OTg4MDBiZCwgMHg4MDAwMDAwMCwKLQkweDQ4MDMxMGJkLCAweDVjMDAwODAwLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAotCTB4NGMwMDAwMDAsIDB4NTk4ODAwMDEsIDB4ODAwMDAwMDAsIDB4NDgwM2M4NTcsCi0JMHg0ODAzMTAwMSwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwKLQkweDU5ODgwMDAwLCAweDgwMDAwMDAwLCAweDQ4MDNjODU3LCAweDQ4MDMxMDAwLAotCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsIDB4NTk4ODAwMDIsCi0JMHg4MDAwMDAwMCwgMHg0ODAzYzg1NywgMHg0ODAzMTAwMiwgMHg1YzAwMDAwMCwKLQkweDFjMDFmMDAwLCAweDQ4MDdjODU3LCAweDRjMDAwMDAwLCAweDhjMDQwZDJjLAotCTB4MDQwMDAwMDQsIDB4NTk4ODAwYTYsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYTYsCi0JMHg4YzA0MGQyYSwgMHgwNDAwMDAwNCwgMHg1OTg4MDBhNywgMHg4MDAwMDAwMCwKLQkweDQ4MDMxMGE3LCAweDhjMDQwZDI4LCAweDA0MDAwMDA0LCAweDU5ODgwMGE4LAotCTB4ODAwMDAwMDAsIDB4NDgwMzEwYTgsIDB4OGMwNDBkMjYsIDB4MDQwMDAwMDQsCi0JMHg1OTg4MDBhOSwgMHg4MDAwMDAwMCwgMHg0ODAzMTBhOSwgMHg4YzA0MGQyNCwKLQkweDA0MDAwMDA0LCAweDU5ODgwMGFhLCAweDgwMDAwMDAwLCAweDQ4MDMxMGFhLAotCTB4OGMwNDBkMjIsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYWIsIDB4ODAwMDAwMDAsCi0JMHg0ODAzMTBhYiwgMHg4YzA0MGQyMCwgMHgwNDAwMDAwNCwgMHg1OTg4MDBhYywKLQkweDgwMDAwMDAwLCAweDQ4MDMxMGFjLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAotCTB4NDgwN2M4NTcsIDB4NGMwMDAwMDAsIDB4NTk4ODAwYWQsIDB4ODAwMDAwMDAsCisJMHgwMDAwMDAwNCwgMHgwNDAxZjAwYiwgMHg0YzAwMDAwMCwgMHg0YzBjMDAwMCwKKwkweDRjMTAwMDAwLCAweDU5MzAyMDA5LCAweDgwMTAyMWMwLCAweDAyMDAwODAwLAorCTB4MDAxMDA2MTUsIDB4NTgxMDFjMDMsIDB4NDIwMDIwMDAsIDB4MDAwMDAwMDcsCisJMHg0ODBmYzg1NywgMHg0ODEzYzg1NywgMHg0ODFiYzg1NywgMHgwMjAxZjgwMCwKKwkweDAwMTAzOGM3LCAweDVjMDAyMDAwLCAweDVjMDAxODAwLCAweDVjMDAwMDAwLAorCTB4MWMwMWYwMDAsIDB4ODMzODA1ODAsIDB4MDAwMDAwOTIsIDB4MDIwMjA4MDAsCisJMHgwMDEwMDYxNSwgMHg0MjAwMDgwMCwgMHg4MDAwMDA0MCwgMHg0YTAyNjIwMywKKwkweDAwMDAwMDAxLCAweDQ5M2E2NDAzLCAweDAyMDFmMDAwLCAweDAwMDIwODU1LAorCTB4NGQ0MDAwMDAsIDB4MDIwMWY4MDAsIDB4MDAxMDM5M2UsIDB4MDQwMDAwMDgsCisJMHg1OWE4MDAwNSwgMHg4NDAwMDU0NCwgMHg0ODAzNTAwNSwgMHg0MjAyODAwMCwKKwkweDAwMDAwMDJhLCAweDAyMDFmODAwLCAweDAwMTBhMjViLCAweDVjMDI4MDAwLAorCTB4MWMwMWYwMDAsIDB4NTlhODAwMjYsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDUsCisJMHg1OTljMDAxNywgMHg4YzAwMDUwYSwgMHgwNDAyMDAwMiwgMHgxYzAxZjAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDU5MzAwNDIwLAorCTB4ODQwMDA1NDAsIDB4NDgwMjY0MjAsIDB4MWMwMWYwMDAsIDB4NDgxN2M4NTcsCisJMHg0YzAwMDAwMCwgMHg0YzA0MDAwMCwgMHg4YzE0MmQyYSwgMHgwNDAwMDAwNCwKKwkweDU5ODgwMGI5LCAweDgwMDAwMDAwLCAweDQ4MDMxMGI5LCAweDhjMTQyZDJlLAorCTB4MDQwMDAwMDQsIDB4NTk4ODAwYmEsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYmEsCisJMHg4YzE0MmQyYywgMHgwNDAwMDAxMywgMHg0MDE0MDAwMCwgMHg4MjAwMDUwMCwKKwkweDAwMDcwMDAwLCAweDgyMDAwZDgwLCAweDAwMDMwMDAwLCAweDA0MDAwMDBkLAorCTB4ODIwMDBkODAsIDB4MDAwNDAwMDAsIDB4MDQwMDAwMGEsIDB4ODIwMDBkODAsCisJMHgwMDA1MDAwMCwgMHgwNDAwMDAwNywgMHg1OTg4MDAwNSwgMHg4MDAwMDAwMCwKKwkweDQ4MDMxMDA1LCAweDU5ODgwMGJiLCAweDgwMDAwMDAwLCAweDQ4MDMxMGJiLAorCTB4NWMwMDA4MDAsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDgxN2M4NTcsCisJMHg0YzAwMDAwMCwgMHg0YzA0MDAwMCwgMHg4YzE0MmQyYSwgMHgwNDAwMDAwNCwKKwkweDU5ODgwMGJjLCAweDgwMDAwMDAwLCAweDQ4MDMxMGJjLCAweDhjMTQyZDJlLAorCTB4MDQwMDAwMDQsIDB4NTk4ODAwYmQsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYmQsCisJMHg4YzE0MmQyYywgMHgwNDAwMDAxMywgMHg0MDE0MDAwMCwgMHg4MjAwMDUwMCwKKwkweDAwMDcwMDAwLCAweDgyMDAwZDgwLCAweDAwMDMwMDAwLCAweDA0MDAwMDBkLAorCTB4ODIwMDBkODAsIDB4MDAwNDAwMDAsIDB4MDQwMDAwMGEsIDB4ODIwMDBkODAsCisJMHgwMDA1MDAwMCwgMHgwNDAwMDAwNywgMHg1OTg4MDAwNSwgMHg4MDAwMDAwMCwKKwkweDQ4MDMxMDA1LCAweDU5ODgwMGJlLCAweDgwMDAwMDAwLCAweDQ4MDMxMGJlLAorCTB4NWMwMDA4MDAsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsCisJMHg1OTg4MDAwMSwgMHg4MDAwMDAwMCwgMHg0ODAzYzg1NywgMHg0ODAzMTAwMSwKKwkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDRjMDAwMDAwLCAweDU5ODgwMDAwLAorCTB4ODAwMDAwMDAsIDB4NDgwM2M4NTcsIDB4NDgwMzEwMDAsIDB4NWMwMDAwMDAsCisJMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg1OTg4MDAwMiwgMHg4MDAwMDAwMCwKKwkweDQ4MDNjODU3LCAweDQ4MDMxMDAyLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAorCTB4NDgwN2M4NTcsIDB4NGMwMDAwMDAsIDB4OGMwNDBkMmMsIDB4MDQwMDAwMDQsCisJMHg1OTg4MDBhNywgMHg4MDAwMDAwMCwgMHg0ODAzMTBhNywgMHg4YzA0MGQyYSwKKwkweDA0MDAwMDA0LCAweDU5ODgwMGE4LCAweDgwMDAwMDAwLCAweDQ4MDMxMGE4LAorCTB4OGMwNDBkMjgsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYTksIDB4ODAwMDAwMDAsCisJMHg0ODAzMTBhOSwgMHg4YzA0MGQyNiwgMHgwNDAwMDAwNCwgMHg1OTg4MDBhYSwKKwkweDgwMDAwMDAwLCAweDQ4MDMxMGFhLCAweDhjMDQwZDI0LCAweDA0MDAwMDA0LAorCTB4NTk4ODAwYWIsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYWIsIDB4OGMwNDBkMjIsCisJMHgwNDAwMDAwNCwgMHg1OTg4MDBhYywgMHg4MDAwMDAwMCwgMHg0ODAzMTBhYywKKwkweDhjMDQwZDIwLCAweDA0MDAwMDA0LCAweDU5ODgwMGFkLCAweDgwMDAwMDAwLAogCTB4NDgwMzEwYWQsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTcsCi0JMHg0YzAwMDAwMCwgMHg4YzA0MGQxYywgMHgwNDAwMDAwNCwgMHg1OTg4MDBhZSwKLQkweDgwMDAwMDAwLCAweDQ4MDMxMGFlLCAweDhjMDQwZDFhLCAweDA0MDAwMDA0LAotCTB4NTk4ODAwYWYsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYWYsIDB4NWMwMDAwMDAsCi0JMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywgMHg0YzAwMDAwMCwgMHg4YzA0MGQxOCwKLQkweDA0MDAwMDA0LCAweDU5ODgwMGIwLCAweDgwMDAwMDAwLCAweDQ4MDMxMGIwLAotCTB4OGMwNDBkMTYsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYjEsIDB4ODAwMDAwMDAsCi0JMHg0ODAzMTBiMSwgMHg4YzA0MGQxNCwgMHgwNDAwMDAwNCwgMHg1OTg4MDBiMiwKLQkweDgwMDAwMDAwLCAweDQ4MDMxMGIyLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAotCTB4NDgwN2M4NTcsIDB4NGMwMDAwMDAsIDB4OGMwNDBkMTAsIDB4MDQwMDAwMDQsCi0JMHg1OTg4MDBiMywgMHg4MDAwMDAwMCwgMHg0ODAzMTBiMywgMHg4YzA0MGQwYywKLQkweDA0MDAwMDA0LCAweDU5ODgwMGI0LCAweDgwMDAwMDAwLCAweDQ4MDMxMGI0LAorCTB4NGMwMDAwMDAsIDB4NTk4ODAwYWUsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYWUsCiAJMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg0ODA3Yzg1NywgMHg0YzAwMDAwMCwKLQkweDhjMDQwZDA4LCAweDA0MDAwMDA0LCAweDU5ODgwMGI1LCAweDgwMDAwMDAwLAotCTB4NDgwMzEwYjUsIDB4OGMwNDBkMDQsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYjYsCi0JMHg4MDAwMDAwMCwgMHg0ODAzMTBiNiwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwKLQkweDQ4MDdjODU2LCAweDRjMDAwMDAwLCAweDU5ODgwMDdmLCAweDgwMDAwMDAwLAotCTB4NDgwMzEwN2YsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDgwM2M4NTcsCi0JMHg0YzA0MDAwMCwgMHg1MDAwMDgwMCwgMHg4MDA0MDgwMCwgMHg0ODA3Yzg1NywKLQkweDQ0MDQwMDAwLCAweDVjMDAwODAwLCAweDFjMDFmMDAwLCAweDQ4MGZjODU3LAotCTB4NGMwMDAwMDAsIDB4ODIwYzA1ODAsIDB4MDAwMDAwMDAsIDB4MDQwMjAwMDQsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjgxOSwgMHgwNDAxZjAxNCwgMHg4MjBjMDU4MCwKLQkweDAwMDAxMDAxLCAweDA0MDIwMDA0LCAweDQyMDAwMDAwLCAweDAwMTBiODFhLAotCTB4MDQwMWYwMGUsIDB4ODIwYzA1ODAsIDB4MDAwMDEwMDIsIDB4MDQwMjAwMDQsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjgxYiwgMHgwNDAxZjAwOCwgMHg4MjBjMGM4MCwKLQkweDAwMDAyMDFjLCAweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDgyMGMwNTAwLAotCTB4MDAwMDAwMWYsIDB4MGMwMWY4MDQsIDB4MDQwMWZmZGQsIDB4NWMwMDAwMDAsCi0JMHgxYzAxZjAwMCwgMHgwMDEwYWE4OSwgMHgwMDEwYWE4YywgMHgwMDEwYWE4ZiwKLQkweDAwMTBhYTkyLCAweDAwMTBhYTk1LCAweDAwMTBhYTk4LCAweDAwMTBhYTliLAotCTB4MDAxMGFhOWUsIDB4MDAxMGFhYTEsIDB4MDAxMGFhYTQsIDB4MDAxMGFhYTcsCi0JMHgwMDEwYWFhYSwgMHgwMDEwYWFhZCwgMHgwMDEwYWFiMCwgMHgwMDEwYWFiMywKLQkweDAwMTBhYWI2LCAweDAwMTBhYWI5LCAweDAwMTBhYWJjLCAweDAwMTBhYWJmLAotCTB4MDAxMGFhYzIsIDB4MDAxMGFhYzUsIDB4MDAxMGFhYzgsIDB4MDAxMGFhY2IsCi0JMHgwMDEwYWFjZSwgMHgwMDEwYWFkMSwgMHgwMDEwYWFkNCwgMHgwMDEwYWFkNywKLQkweDAwMTBhYWRhLCAweDQyMDAwMDAwLCAweDAwMTBiODFjLCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MWQsIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgxZSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgxZiwKLQkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODIwLCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MjEsIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgyMiwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgyMywKLQkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODI0LCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MjUsIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgyNiwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgyNywKLQkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODI4LCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MjksIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgyYSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgyYiwKLQkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODJjLCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MmQsIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgyZSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgyZiwKLQkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODMwLCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MzEsIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgzMiwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgzMywKLQkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiODM0LCAweDFjMDFmMDAwLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI4MzUsIDB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsCi0JMHgwMDEwYjgzNiwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjgzNywKLQkweDFjMDFmMDAwLCAweDQ4MGZjODU3LCAweDRjMDAwMDAwLCAweDgyMGMwNTgwLAotCTB4MDAwMDAwMDEsIDB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MGUsCi0JMHgwNDAxZjAxMiwgMHg4MjBjMDU4MCwgMHgwMDAwMDAwMiwgMHgwNDAyMDAwNCwKLQkweDQyMDAwMDAwLCAweDAwMTBiODBmLCAweDA0MDFmMDBjLCAweDgyMGMwNTgwLAotCTB4MDAwMDAwMDMsIDB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAxMGI4MTAsCi0JMHgwNDAxZjAwNiwgMHg4MjBjMDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAwNCwKLQkweDQyMDAwMDAwLCAweDAwMTBiODExLCAweDA0MDFmZjUxLCAweDVjMDAwMDAwLAotCTB4MWMwMWYwMDAsIDB4NGMwMDAwMDAsIDB4NTlhODAwMjYsIDB4NDgwM2M4NTcsCi0JMHg4YzAwMDUwMiwgMHgwNDAwMDAxMCwgMHg4YzAwMDUwNiwgMHgwNDAwMDAwNCwKLQkweDQyMDAwMDAwLCAweDAwMTBiODQxLCAweDA0MDFmMDEyLCAweDhjMDAwNTBhLAotCTB4MDQwMDAwMDQsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NDAsIDB4MDQwMWYwMGQsCi0JMHg4YzAwMDUwOCwgMHgwNDAwMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjg0MywKLQkweDA0MDFmMDA4LCAweDAyMDFmODAwLCAweDAwMTA1MTNiLCAweDA0MDAwMDA2LAotCTB4OGMwMDA1MDYsIDB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NDIsCi0JMHgwNDAxZmYzMywgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwgMHg4MDU4YjFjMCwKLQkweDAyMDAwODAwLCAweDAwMTAwNWQ4LCAweDU0NTBhODAwLCAweDgwNTBhMDAwLAotCTB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsIDB4MDQwMjA3ZmMsIDB4MWMwMWYwMDAsCi0JMHg4MDU4YjFjMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg0NDUwYTgwMCwKLQkweDgwNTRhODAwLCAweDgwNThiMDQwLCAweDA0MDIwN2ZkLCAweDFjMDFmMDAwLAotCTB4ODA1OGIxYzAsIDB4MDIwMDA4MDAsIDB4MDAxMDA1ZDgsIDB4NTA1MDAwMDAsCi0JMHg5YzAwMDFjMCwgMHg0NDAwYTgwMCwgMHg4MDUwYTAwMCwgMHg4MDU0YTgwMCwKLQkweDgwNThiMDQwLCAweDA0MDIwN2ZhLCAweDFjMDFmMDAwLCAweDRjMDAwMDAwLAotCTB4NTlhODAwMDgsIDB4OGMwMDA1MWMsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsCi0JMHgwMDAwMDAwMSwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwOCwKLQkweDAwMDAwMDEwLCAweDAwMDAwMDIwLCAweDAwMDAwMDQwLCAweDAwMDAwMDgwLAotCTB4MDAwMDAxMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDA0MDAsIDB4MDAwMDA4MDAsCi0JMHgwMDAwMTAwMCwgMHgwMDAwMjAwMCwgMHgwMDAwNDAwMCwgMHgwMDAwODAwMCwKLQkweDAwMDEwMDAwLCAweGE1ZjJiM2FjCisJMHg4YzA0MGQxYywgMHgwNDAwMDAwNCwgMHg1OTg4MDBhZiwgMHg4MDAwMDAwMCwKKwkweDQ4MDMxMGFmLCAweDhjMDQwZDFhLCAweDA0MDAwMDA0LCAweDU5ODgwMGIwLAorCTB4ODAwMDAwMDAsIDB4NDgwMzEwYjAsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsCisJMHg0ODA3Yzg1NywgMHg0YzAwMDAwMCwgMHg4YzA0MGQxOCwgMHgwNDAwMDAwNCwKKwkweDU5ODgwMGIxLCAweDgwMDAwMDAwLCAweDQ4MDMxMGIxLCAweDhjMDQwZDE2LAorCTB4MDQwMDAwMDQsIDB4NTk4ODAwYjIsIDB4ODAwMDAwMDAsIDB4NDgwMzEwYjIsCisJMHg4YzA0MGQxNCwgMHgwNDAwMDAwNCwgMHg1OTg4MDBiMywgMHg4MDAwMDAwMCwKKwkweDQ4MDMxMGIzLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ4MDdjODU3LAorCTB4NGMwMDAwMDAsIDB4OGMwNDBkMTAsIDB4MDQwMDAwMDQsIDB4NTk4ODAwYjQsCisJMHg4MDAwMDAwMCwgMHg0ODAzMTBiNCwgMHg4YzA0MGQwYywgMHgwNDAwMDAwNCwKKwkweDU5ODgwMGI1LCAweDgwMDAwMDAwLCAweDQ4MDMxMGI1LCAweDVjMDAwMDAwLAorCTB4MWMwMWYwMDAsIDB4NDgwN2M4NTcsIDB4NGMwMDAwMDAsIDB4OGMwNDBkMDgsCisJMHgwNDAwMDAwNCwgMHg1OTg4MDBiNiwgMHg4MDAwMDAwMCwgMHg0ODAzMTBiNiwKKwkweDhjMDQwZDA0LCAweDA0MDAwMDA0LCAweDU5ODgwMGI3LCAweDgwMDAwMDAwLAorCTB4NDgwMzEwYjcsIDB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NDgwN2M4NTYsCisJMHg0YzAwMDAwMCwgMHg1OTg4MDA4MCwgMHg4MDAwMDAwMCwgMHg0ODAzMTA4MCwKKwkweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDQ4MDNjODU3LCAweDRjMDQwMDAwLAorCTB4NTAwMDA4MDAsIDB4ODAwNDA4MDAsIDB4NDgwN2M4NTcsIDB4NDQwNDAwMDAsCisJMHg1YzAwMDgwMCwgMHgxYzAxZjAwMCwgMHg0ODBmYzg1NywgMHg0YzAwMDAwMCwKKwkweDgyMGMwNTgwLCAweDAwMDAwMDAwLCAweDA0MDIwMDA0LCAweDQyMDAwMDAwLAorCTB4MDAxMGI2MTcsIDB4MDQwMWYwMTQsIDB4ODIwYzA1ODAsIDB4MDAwMDEwMDEsCisJMHgwNDAyMDAwNCwgMHg0MjAwMDAwMCwgMHgwMDEwYjYxOCwgMHgwNDAxZjAwZSwKKwkweDgyMGMwNTgwLCAweDAwMDAxMDAyLCAweDA0MDIwMDA0LCAweDQyMDAwMDAwLAorCTB4MDAxMGI2MTksIDB4MDQwMWYwMDgsIDB4ODIwYzBjODAsIDB4MDAwMDIwMWMsCisJMHgwMjAyMTgwMCwgMHgwMDEwMDYxNSwgMHg4MjBjMDUwMCwgMHgwMDAwMDAxZiwKKwkweDBjMDFmODA0LCAweDA0MDFmZmRkLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLAorCTB4MDAxMGE4YjAsIDB4MDAxMGE4YjMsIDB4MDAxMGE4YjYsIDB4MDAxMGE4YjksCisJMHgwMDEwYThiYywgMHgwMDEwYThiZiwgMHgwMDEwYThjMiwgMHgwMDEwYThjNSwKKwkweDAwMTBhOGM4LCAweDAwMTBhOGNiLCAweDAwMTBhOGNlLCAweDAwMTBhOGQxLAorCTB4MDAxMGE4ZDQsIDB4MDAxMGE4ZDcsIDB4MDAxMGE4ZGEsIDB4MDAxMGE4ZGQsCisJMHgwMDEwYThlMCwgMHgwMDEwYThlMywgMHgwMDEwYThlNiwgMHgwMDEwYThlOSwKKwkweDAwMTBhOGVjLCAweDAwMTBhOGVmLCAweDAwMTBhOGYyLCAweDAwMTBhOGY1LAorCTB4MDAxMGE4ZjgsIDB4MDAxMGE4ZmIsIDB4MDAxMGE4ZmUsIDB4MDAxMGE5MDEsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjYxYSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjFiLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjFjLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MWQsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjYxZSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjFmLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjIwLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MjEsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjYyMiwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjIzLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjI0LAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MjUsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjYyNiwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjI3LCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjI4LAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MjksIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjYyYSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjJiLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjJjLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MmQsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjYyZSwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjJmLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjMwLAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MzEsIDB4MWMwMWYwMDAsCisJMHg0MjAwMDAwMCwgMHgwMDEwYjYzMiwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwKKwkweDAwMTBiNjMzLCAweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjM0LAorCTB4MWMwMWYwMDAsIDB4NDIwMDAwMDAsIDB4MDAxMGI2MzUsIDB4MWMwMWYwMDAsCisJMHg0ODBmYzg1NywgMHg0YzAwMDAwMCwgMHg4MjBjMDU4MCwgMHgwMDAwMDAwMSwKKwkweDA0MDIwMDA0LCAweDQyMDAwMDAwLCAweDAwMTBiNjBjLCAweDA0MDFmMDEyLAorCTB4ODIwYzA1ODAsIDB4MDAwMDAwMDIsIDB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjYwZCwgMHgwNDAxZjAwYywgMHg4MjBjMDU4MCwgMHgwMDAwMDAwMywKKwkweDA0MDIwMDA0LCAweDQyMDAwMDAwLCAweDAwMTBiNjBlLCAweDA0MDFmMDA2LAorCTB4ODIwYzA1ODAsIDB4MDAwMDAwMDQsIDB4MDQwMjAwMDQsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjYwZiwgMHgwNDAxZmY1MSwgMHg1YzAwMDAwMCwgMHgxYzAxZjAwMCwKKwkweDRjMDAwMDAwLCAweDU5YTgwMDI2LCAweDQ4MDNjODU3LCAweDhjMDAwNTAyLAorCTB4MDQwMDAwMTAsIDB4OGMwMDA1MDYsIDB4MDQwMDAwMDQsIDB4NDIwMDAwMDAsCisJMHgwMDEwYjYzZiwgMHgwNDAxZjAxMiwgMHg4YzAwMDUwYSwgMHgwNDAwMDAwNCwKKwkweDQyMDAwMDAwLCAweDAwMTBiNjNlLCAweDA0MDFmMDBkLCAweDhjMDAwNTA4LAorCTB4MDQwMDAwMDQsIDB4NDIwMDAwMDAsIDB4MDAxMGI2NDEsIDB4MDQwMWYwMDgsCisJMHgwMjAxZjgwMCwgMHgwMDEwNGUwZCwgMHgwNDAwMDAwNiwgMHg4YzAwMDUwNiwKKwkweDA0MDIwMDA0LCAweDQyMDAwMDAwLCAweDAwMTBiNjQwLCAweDA0MDFmZjMzLAorCTB4NWMwMDAwMDAsIDB4MWMwMWYwMDAsIDB4ODA1OGIxYzAsIDB4MDIwMDA4MDAsCisJMHgwMDEwMDYxNSwgMHg1NDUwYTgwMCwgMHg4MDUwYTAwMCwgMHg4MDU0YTgwMCwKKwkweDgwNThiMDQwLCAweDA0MDIwN2ZjLCAweDFjMDFmMDAwLCAweDgwNThiMWMwLAorCTB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsIDB4NDQ1MGE4MDAsIDB4ODA1NGE4MDAsCisJMHg4MDU4YjA0MCwgMHgwNDAyMDdmZCwgMHgxYzAxZjAwMCwgMHg4MDU4YjFjMCwKKwkweDAyMDAwODAwLCAweDAwMTAwNjE1LCAweDUwNTAwMDAwLCAweDljMDAwMWMwLAorCTB4NDQwMGE4MDAsIDB4ODA1MGEwMDAsIDB4ODA1NGE4MDAsIDB4ODA1OGIwNDAsCisJMHgwNDAyMDdmYSwgMHgxYzAxZjAwMCwgMHg0YzAwMDAwMCwgMHg1OWE4MDAwOCwKKwkweDhjMDAwNTFjLCAweDVjMDAwMDAwLCAweDFjMDFmMDAwLCAweDAwMDAwMDAxLAorCTB4MDAwMDAwMDIsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMTAsCisJMHgwMDAwMDAyMCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDEwMCwKKwkweDAwMDAwMjAwLCAweDAwMDAwNDAwLCAweDAwMDAwODAwLCAweDAwMDAxMDAwLAorCTB4MDAwMDIwMDAsIDB4MDAwMDQwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMTAwMDAsCisJMHhkMjc2NGUxNAogfTsKIAogI2lmZGVmIFVOSVFVRV9GV19OQU1FCi11aW50MzJfdCBmdzI0MDBfbGVuZ3RoMDEgPSAweDAwMDBhYjRhIDsKK3VpbnQzMl90IGZ3MjQwMF9sZW5ndGgwMSA9IDB4MDAwMGE5NzEgOwogI2Vsc2UKLXVpbnQzMl90IHJpc2NfY29kZV9sZW5ndGgwMSA9IDB4MDAwMGFiNGEgOwordWludDMyX3QgcmlzY19jb2RlX2xlbmd0aDAxID0gMHgwMDAwYTk3MSA7CiAjZW5kaWYKIAogCiAjaWZkZWYgVU5JUVVFX0ZXX05BTUUKLXVpbnQzMl90IGZ3MjQwMF9hZGRyMDIgPSAweDAwMTBlMDAwICA7Cit1aW50MzJfdCBmdzI0MDBfYWRkcjAyID0gMHgwMDEwZDAwMCAgOwogI2Vsc2UKLXVpbnQzMl90IHJpc2NfY29kZV9hZGRyMDIgPSAweDAwMTBlMDAwIDsKK3VpbnQzMl90IHJpc2NfY29kZV9hZGRyMDIgPSAweDAwMTBkMDAwIDsKICNlbmRpZgogCiAjaWZkZWYgVU5JUVVFX0ZXX05BTUUKQEAgLTExMDIyLDEwMCArMTA5MDQsMTEzIEBACiAjZWxzZQogdWludDMyX3QgcmlzY19jb2RlMDJbXSA9IHsKICNlbmRpZgotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAxMGUwMDAsIDB4MDAwMDE0ZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAwMDhjMCwKLQkweDgzNmMwNTgwLCAweDAwMDAwMDAzLCAweDAyMDIwMDAwLCAweDAwMTAwMmUzLAotCTB4NDIwMDAwMDAsIDB4MDAxMGI0YmIsIDB4NTAwMDAwMDAsIDB4ODAwMDAxYzAsCi0JMHgwNDAyMDk1NiwgMHgwNDAxZjkyMywgMHgwNDAxZmJlMywgMHgwNDAxZmI1YywKLQkweDAyMDFmODAwLCAweDAwMDIwNzE4LCAweDAyMDFmODAwLCAweDAwMDIwNTdiLAotCTB4MDQwMWY3ZjAsIDB4NTliODAwZWEsIDB4ODIwMDBkMDAsIDB4ZjAwMDAwMzgsCi0JMHgwMjAyMDAwMCwgMHgwMDEwMGE3YSwgMHg4YzAwMDUxMCwgMHgwMjAwMDAwMCwKLQkweDAwMTAwYTc5LCAweDU5YmE2MGUwLCAweDgxMzAwMTgyLCAweDA0MDIxMDRlLAotCTB4MDQwMDIwMzAsIDB4ODUzMjY1M2UsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwMywgMHgwNDAyMDAyOCwgMHg1OTMwMDIwMywgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDA0LCAweDA0MDIwMDI0LCAweDU5MzI1ODA4LCAweDU5MzAwNDAyLAotCTB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsIDB4OTAwMDAxYzAsIDB4NDgwMjU4MDYsCi0JMHg0OTdhNTgwNywgMHg0OTdhNWMwOSwgMHg1OTMwMDAxZiwgMHg4MDAwMDU0MCwKLQkweDAyMDIwODAwLCAweDAwMTAwZDU2LCAweDU5MzAwMDA0LCAweDhjMDAwNTNlLAotCTB4MDQwMjAwMTAsIDB4MDQwMWZhODgsIDB4NTkzMjY4MDksIDB4MDIwMWY4MDAsCi0JMHgwMDAyMDc3ZCwgMHg1OTM0MDAwZiwgMHg1OTM0MTQwYiwgMHg4MDA4MTA0MCwKLQkweDA0MDAxMDAyLCAweDQ4MGE2YzBiLCAweDgwMDAwNTQwLCAweDA0MDIwYTEwLAotCTB4NTliODAwZWEsIDB4OGMwMDA1MTAsIDB4MDQwMjA3ZDcsIDB4MWMwMWYwMDAsCi0JMHgwMjAxZjgwMCwgMHgwMDEwNmY2MCwgMHgwNDAwMDdlZiwgMHgwMjAxZjAwMCwKLQkweDAwMTAwYTY1LCAweDQyMDI3MDAwLCAweDAwMDAwMDU1LCAweDA0MDFmMDI3LAotCTB4ODMzMjY1MDAsIDB4M2ZmZmZmZmYsIDB4NTkzMDA0MDYsIDB4ODIwMDA1ODAsCi0JMHgwMDAwMDAwMywgMHgwNDAyMDAxNSwgMHg1OTMyNTgwOCwgMHg1OTMyNjgwOSwKLQkweDU5MzAxNDAyLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDkwMDgxMWMwLAotCTB4NDgwYTU4MDYsIDB4NDk3YTVjMDksIDB4NDk3YTU4MDcsIDB4MDQwMWZhNjIsCi0JMHgwMjAxZjgwMCwgMHgwMDAyMDc3ZCwgMHg1OTM0MDAwZiwgMHg1OTM0MTQwYiwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMTBkMDAwLCAweDAwMDAxNjVlLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMDA5ZjcsCisJMHg4MzZjMDU4MCwgMHgwMDAwMDAwMywgMHgwMjAyMDAwMCwgMHgwMDEwMDMxNCwKKwkweDQyMDAwMDAwLCAweDAwMTBiMmI3LCAweDUwMDAwMDAwLCAweDgwMDAwMWMwLAorCTB4MDQwMjA5OGEsIDB4MDQwMWY5NGQsIDB4MDIwMWY4MDAsIDB4MDAwMjA1MjQsCisJMHgwNDAxZmJmZSwgMHgwMjAxZjgwMCwgMHgwMDAyMDg0YywgMHgwMjAxZjgwMCwKKwkweDAwMDIwNmFmLCAweDA0MDFmN2VmLCAweDU5YjgwMGVhLCAweDgyMDAwZDAwLAorCTB4ZjAwMDAwMzgsIDB4MDIwMjAwMDAsIDB4MDAxMDBhYzMsIDB4OGMwMDA1MTAsCisJMHgwMjAwMDAwMCwgMHgwMDEwMGFjMiwgMHg1OWJhNjBlMCwgMHg4MTMwMDE4MiwKKwkweDA0MDIxMDRlLCAweDA0MDAyMDMwLCAweDg1MzI2NTNlLCAweDU5MzAwNDA2LAorCTB4ODIwMDA1ODAsIDB4MDAwMDAwMDMsIDB4MDQwMjAwMjgsIDB4NTkzMDAyMDMsCisJMHg4MjAwMDU4MCwgMHgwMDAwMDAwNCwgMHgwNDAyMDAyNCwgMHg1OTMyNTgwOCwKKwkweDU5MzAwNDAyLCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLCAweDkwMDAwMWMwLAorCTB4NDgwMjU4MDYsIDB4NDk3YTU4MDcsIDB4NDk3YTVjMDksIDB4NTkzMDAwMWYsCisJMHg4MDAwMDU0MCwgMHgwMjAyMDgwMCwgMHgwMDEwMGQ5YSwgMHg1OTMwMDAwNCwKKwkweDhjMDAwNTNlLCAweDA0MDIwMDEwLCAweDA0MDFmYjQ3LCAweDU5MzI2ODA5LAorCTB4MDIwMWY4MDAsIDB4MDAwMjA4YjQsIDB4NTkzNDAwMGYsIDB4NTkzNDE0MGIsCiAJMHg4MDA4MTA0MCwgMHgwNDAwMTAwMiwgMHg0ODBhNmMwYiwgMHg4MDAwMDU0MCwKLQkweDA0MDIwOWViLCAweDA0MDFmN2RiLCAweDQyMDI3MDAwLCAweDAwMDAwMDU0LAotCTB4MDQwMWYwMGEsIDB4ODMzMDA1MDAsIDB4NjAwMDAwMDAsIDB4MDIwMDAwMDAsCi0JMHgwMDEwMGE2OCwgMHg4MTMyNjU4MCwgMHg4MDAwMDEzYSwgMHg4MjAwMDQwMCwKLQkweDAwMTAwYTgwLCAweDUwMDI3MDAwLCAweDU5MzAwYzA2LCAweDgyMDQwNTgwLAotCTB4MDAwMDAwMDIsIDB4MDIwMDAwMDAsIDB4MDAxMDBhNjUsIDB4NTkzMDAwMDQsCi0JMHg4YzAwMDUzZSwgMHgwNDAyMDAwNCwgMHgwMjAxZjgwMCwgMHgwMDAyMDdhMSwKLQkweDA0MDFmN2M0LCAweDAyMDFmODAwLCAweDAwMTA2ZjYwLCAweDA0MDAwN2ZiLAotCTB4MDIwMWYwMDAsIDB4MDAxMDBhNjUsIDB4NTkzMjU4MDgsIDB4NDEyYzcwMDAsCi0JMHg1ODM4MGEwNCwgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwgMHg4MjAwMGMwMCwKLQkweDAwMTAxMGJkLCAweDUwMDQ0MDAwLCAweDBjMDFmMDAxLCAweDAwMTAwZGQ5LAotCTB4MDAxMDBkZDksIDB4MDAwMjAwOWYsIDB4MDAxMDBkZDksIDB4MDAxMDBkZDksCi0JMHgwMDEwMGRkOSwgMHgwMDEwMGRkOSwgMHgwMDEwMGRkOSwgMHgwMDAyMDBhZiwKLQkweDAwMTAwZGVkLCAweDAwMTAwZGQ5LCAweDAwMTAwZGQ5LCAweDAwMTAwZGRiLAotCTB4MDAxMDBkZDksIDB4MDAxMDBkZDksIDB4MDAxMDBkZDksIDB4NTgzODA0MGEsCi0JMHg4YzAwMDUwMCwgMHgwMjAwMDgwMCwgMHgwMDEwMDVkOCwgMHg1MDIwMDAwMCwKLQkweDgwMzg3YzAwLCAweDU4M2MxMDAyLCAweDU4M2MyODAwLCAweDU4M2MyMDAxLAotCTB4NTgzODBhMDcsIDB4NTgzODMwMGYsIDB4NTkzMDM4MDcsIDB4NTgzODRjMDgsCi0JMHg1ODM4MDAwZCwgMHg0ODAyNjAxMiwgMHgwNDAxZjAxMCwgMHg1ODM4MDIwYSwKLQkweDhjMDAwNTAyLCAweDAyMDAwMDAwLCAweDAwMTAwZGQ5LCAweDUwMjAwMDAwLAotCTB4ODAzODdjMDAsIDB4NTgzYzI4MDAsIDB4NTgzYzIwMDEsIDB4NTgzYzEwMDIsCi0JMHg1OTJjMGEwNywgMHg1OTJjNGMwOCwgMHg1OTJjMzAwZiwgMHg1OTMwMzgwNywKLQkweDQ5N2E2MDEyLCAweDQ5N2E2MDEzLCAweDQ4MTY2MDBlLCAweDQ4MTI2MDBmLAotCTB4NDgwYTYwMTAsIDB4NDgxYTYwMTEsIDB4ODAwNDA4NDAsIDB4NDgwNjYwMGQsCi0JMHgwMjAyMDAwMCwgMHgwMDEwMGUxYSwgMHg4NDFjM2Q0MCwgMHg0ODFlNjAwNywKLQkweDFjMDFmMDAwLCAweDQxNzg3ODAwLCAweDU5MzI1ODA4LCAweDU5MmMwYzBhLAotCTB4OGMwNDBkMDIsIDB4MDIwMDAwMDAsIDB4MDAxMDBmOGMsIDB4NTkyYzAwMGQsCi0JMHg1OTJjMTAwZiwgMHg1OTJjMGEwNCwgMHg0ODBhNjAxMSwgMHg0ODAyNjAxMiwKLQkweDQ4MDI2MDEzLCAweDQxMmMzMDAwLCAweDgyMDQwNTAwLCAweDAwMDAwMDBmLAotCTB4ODIwMDA0MDAsIDB4MDAxMDEwYmQsIDB4NTAwMDM4MDAsIDB4NTAxYzAwMDAsCi0JMHg0MDFjMTAwMCwgMHg1OTJjMWEwNywgMHg0ODAyNjAwYSwgMHg0ODFhNjAwYiwKLQkweDQ4MGE2MDBjLCAweDQ4MGU2MDBkLCAweDg0M2M3ZDRhLCAweDQwM2MxMDAwLAotCTB4MWMwMWYwMDAsIDB4NDE3ODc4MDAsIDB4NDk3YTYwMTIsIDB4NTkyYzBhMDQsCi0JMHg0MTJjMzAwMCwgMHg1OTJjMWEwNywgMHg4MjA0MDUwMCwgMHgwMDAwMDAwZiwKLQkweDgyMDAwNDAwLCAweDAwMTAxMGJkLCAweDUwMDA0MDAwLCAweDUwMjAwMDAwLAotCTB4NDAyMDEwMDAsIDB4NDgwMjYwMGEsIDB4NDgxYTYwMGIsIDB4NDgwYTYwMGMsCi0JMHg0ODBlNjAwZCwgMHg4MDAwMDU4MCwgMHg0ODNlNjAwNCwgMHgxYzAxZjAwMCwKLQkweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDAyMDFmODAwLCAweDAwMDIwNzI5LAotCTB4MDQwMWYwMDUsIDB4NGMwMDAwMDAsIDB4NGRmMDAwMDAsIDB4MDQwMWZmMTYsCi0JMHgwNDAxZjAwMSwgMHg1YzAzZTAwMCwgMHg1YzAwMDAwMCwgMHgxODAxZjAwMCwKLQkweDQyMDNlMDAwLCAweGIwMTAwMDAwLCAweDQxZmMwMDAwLCAweDgyMDAwNTAwLAotCTB4MDAwMDAwMTEsIDB4MGMwMWYwMDEsIDB4MDAwMjAxMmEsIDB4MDAwMjA2OTcsCi0JMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwKLQkweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAwMDIwMTJhLAotCTB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsCi0JMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDEwMTE1YSwgMHgwMDAyMDEyYywKLQkweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAwMDIwMTJhLAotCTB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsIDB4MDAwMjAxMmEsCi0JMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwgMHgwMDAyMDEyYSwKLQkweDAwMDIwMTJhLCAweDAwMDIwMTJhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LAotCTB4MDIwMWY4MDAsIDB4MDAwMjA2OTcsIDB4MDIwMWYwMDAsIDB4MDAxMDExNWEsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjRjMSwgMHg1MDAwMDAwMCwgMHg4YzAwMDUwNCwKLQkweDA0MDAwMDE0LCAweDQyMDAwMDAwLCAweDAwMTBiNGMxLCAweDUwMDAwMDAwLAotCTB4OGMwMDA1MDIsIDB4MDQwMjAwMDIsIDB4MWMwMWYwMDAsIDB4NGRmMDAwMDAsCi0JMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg0MjAzNDAwMCwgMHgwMDEwYjRhNCwKLQkweDU5YTAwMDFkLCAweDU5YTFkODFlLCAweDg0MDAwNTAyLCAweDQ4MDM0MDFkLAotCTB4NThlYzAwMDksIDB4MDgwMWY4MDAsIDB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsCi0JMHgwNDAyNzAwMiwgMHgwNDAyNjAwMiwgMHgxYzAxZjAwMCwgMHg0ZGYwMDAwMCwKLQkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDAyMDFmODAwLCAweDAwMTAwN2U0LAotCTB4MDQwMDAwMTAsIDB4NDEyZGQ4MDAsIDB4NDhlZmM4NTcsIDB4MDIwMWY4MDAsCi0JMHgwMDEwM2IyOCwgMHg0MjAzNDAwMCwgMHgwMDEwYjRhNCwgMHg0OWExZDgwYiwKLQkweDQ4ZWY0MDFlLCAweDU5YTAwMDFkLCAweDg0MDAwNTQ0LCAweDQ4MDM0MDFkLAotCTB4MDIwMWY4MDAsIDB4MDAxMDIyMTQsIDB4MDIwMWY4MDAsIDB4MDAxMDIyMzMsCisJMHgwNDAyMGEzMSwgMHg1OWI4MDBlYSwgMHg4YzAwMDUxMCwgMHgwNDAyMDdkNywKKwkweDFjMDFmMDAwLCAweDAyMDFmODAwLCAweDAwMTA2Y2I0LCAweDA0MDAwN2VmLAorCTB4MDIwMWYwMDAsIDB4MDAxMDBhYWUsIDB4NDIwMjcwMDAsIDB4MDAwMDAwNTUsCisJMHgwNDAxZjAyNywgMHg4MzMyNjUwMCwgMHgzZmZmZmZmZiwgMHg1OTMwMDQwNiwKKwkweDgyMDAwNTgwLCAweDAwMDAwMDAzLCAweDA0MDIwMDE1LCAweDU5MzI1ODA4LAorCTB4NTkzMjY4MDksIDB4NTkzMDE0MDIsIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsCisJMHg5MDA4MTFjMCwgMHg0ODBhNTgwNiwgMHg0OTdhNWMwOSwgMHg0OTdhNTgwNywKKwkweDA0MDFmYjIxLCAweDAyMDFmODAwLCAweDAwMDIwOGI0LCAweDU5MzQwMDBmLAorCTB4NTkzNDE0MGIsIDB4ODAwODEwNDAsIDB4MDQwMDEwMDIsIDB4NDgwYTZjMGIsCisJMHg4MDAwMDU0MCwgMHgwNDAyMGEwYywgMHgwNDAxZjdkYiwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDU0LCAweDA0MDFmMDBhLCAweDgzMzAwNTAwLCAweDYwMDAwMDAwLAorCTB4MDIwMDAwMDAsIDB4MDAxMDBhYjEsIDB4ODEzMjY1ODAsIDB4ODAwMDAxM2EsCisJMHg4MjAwMDQwMCwgMHgwMDEwMGFjOSwgMHg1MDAyNzAwMCwgMHg1OTMwMGMwNiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDAyLCAweDAyMDAwMDAwLCAweDAwMTAwYWFlLAorCTB4NTkzMDAwMDQsIDB4OGMwMDA1M2UsIDB4MDQwMjAwMDQsIDB4MDIwMWY4MDAsCisJMHgwMDAyMDhkOCwgMHgwNDAxZjdjNCwgMHgwMjAxZjgwMCwgMHgwMDEwNmNiNCwKKwkweDA0MDAwN2ZiLCAweDAyMDFmMDAwLCAweDAwMTAwYWFlLCAweDU5MzI1ODA4LAorCTB4NDEyYzcwMDAsIDB4NTgzODBhMDQsIDB4ODIwNDA1MDAsIDB4MDAwMDAwMGYsCisJMHg4MjAwMGMwMCwgMHgwMDEwMTEwZCwgMHg1MDA0NDAwMCwgMHgwYzAxZjAwMSwKKwkweDAwMTAwZTI0LCAweDAwMTAwZTI0LCAweDAwMDIwMGEwLCAweDAwMTAwZTI0LAorCTB4MDAxMDBlMjQsIDB4MDAxMDBlMjQsIDB4MDAxMDBlMjQsIDB4MDAxMDBlMjQsCisJMHgwMDAyMDBiMCwgMHgwMDEwMGUzOCwgMHgwMDEwMGUyNCwgMHgwMDEwMGUyNCwKKwkweDAwMTAwZTI2LCAweDAwMTAwZTI0LCAweDAwMTAwZTI0LCAweDAwMTAwZTI0LAorCTB4NTgzODA0MGEsIDB4OGMwMDA1MDAsIDB4MDIwMDA4MDAsIDB4MDAxMDA2MTUsCisJMHg1MDIwMDAwMCwgMHg4MDM4N2MwMCwgMHg1ODNjMTAwMiwgMHg1ODNjMjgwMCwKKwkweDU4M2MyMDAxLCAweDU4MzgwYTA3LCAweDU4MzgzMDBmLCAweDU5MzAzODA3LAorCTB4NTgzODRjMDgsIDB4NTgzODAwMGQsIDB4NDgwMjYwMTIsIDB4MDQwMWYwMTAsCisJMHg1ODM4MDIwYSwgMHg4YzAwMDUwMiwgMHgwMjAwMDAwMCwgMHgwMDEwMGUyNCwKKwkweDUwMjAwMDAwLCAweDgwMzg3YzAwLCAweDU4M2MyODAwLCAweDU4M2MyMDAxLAorCTB4NTgzYzEwMDIsIDB4NTkyYzBhMDcsIDB4NTkyYzRjMDgsIDB4NTkyYzMwMGYsCisJMHg1OTMwMzgwNywgMHg0OTdhNjAxMiwgMHg0OTdhNjAxMywgMHg0ODE2NjAwZSwKKwkweDQ4MTI2MDBmLCAweDQ4MGE2MDEwLCAweDQ4MWE2MDExLCAweDgwMDQwODQwLAorCTB4NDgwNjYwMGQsIDB4MDIwMjAwMDAsIDB4MDAxMDBlNjUsIDB4ODQxYzNkNDAsCisJMHg0ODFlNjAwNywgMHgxYzAxZjAwMCwgMHg0MTc4NzgwMCwgMHg1OTMyNTgwOCwKKwkweDU5MmMwYzBhLCAweDhjMDQwZDAyLCAweDAyMDAwMDAwLCAweDAwMTAwZmRhLAorCTB4NTkyYzAwMGQsIDB4NTkyYzEwMGYsIDB4NTkyYzBhMDQsIDB4NDgwYTYwMTEsCisJMHg0ODAyNjAxMiwgMHg0ODAyNjAxMywgMHg0MTJjMzAwMCwgMHg4MjA0MDUwMCwKKwkweDAwMDAwMDBmLCAweDgyMDAwNDAwLCAweDAwMTAxMTBkLCAweDUwMDAzODAwLAorCTB4NTAxYzAwMDAsIDB4NDAxYzEwMDAsIDB4NTkyYzFhMDcsIDB4NDgwMjYwMGEsCisJMHg0ODFhNjAwYiwgMHg0ODBhNjAwYywgMHg0ODBlNjAwZCwgMHg4NDNjN2Q0YSwKKwkweDQwM2MxMDAwLCAweDFjMDFmMDAwLCAweDQxNzg3ODAwLCAweDQ5N2E2MDEyLAorCTB4NTkyYzBhMDQsIDB4NDEyYzMwMDAsIDB4NTkyYzFhMDcsIDB4ODIwNDA1MDAsCisJMHgwMDAwMDAwZiwgMHg4MjAwMDQwMCwgMHgwMDEwMTEwZCwgMHg1MDAwNDAwMCwKKwkweDUwMjAwMDAwLCAweDQwMjAxMDAwLCAweDQ4MDI2MDBhLCAweDQ4MWE2MDBiLAorCTB4NDgwYTYwMGMsIDB4NDgwZTYwMGQsIDB4ODAwMDA1ODAsIDB4NDgzZTYwMDQsCisJMHgxYzAxZjAwMCwgMHgwMDAyMDE0YywgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwKKwkweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LAorCTB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksCisJMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwKKwkweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LAorCTB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksCisJMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwKKwkweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LAorCTB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksCisJMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwKKwkweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LAorCTB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksCisJMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwKKwkweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LCAweDAwMDIwMTM5LAorCTB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksIDB4MDAwMjAxMzksCisJMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwgMHgwMDAyMDEzOSwKKwkweDAwMDIwMTM5LCAweDRjMDAwMDAwLCAweDRkZjAwMDAwLCAweDQyMDNlMDAwLAorCTB4YjAxMDAwMDAsIDB4NDFmMDAwMDAsIDB4ODFmZTE1MDAsIDB4OGQwYTE1MTIsCisJMHgwMjAyMDgwMCwgMHgwMDEwMTQ2OCwgMHg4ZDBhMTUxOCwgMHgwMjAyMDgwMCwKKwkweDAwMDIwODYxLCAweDhkMGExNTFhLCAweDA0MDIwZWQwLCAweDgzMDgwNTAwLAorCTB4MDAwMDBkMDAsIDB4MDQwMjA4MDQsIDB4NWMwM2UwMDAsIDB4NWMwMDAwMDAsCisJMHgxODAxZjAwMCwgMHg4ZDBhMTUxNiwgMHgwMjAyMDgwMCwgMHgwMDEwMTJkOSwKKwkweDhkMGExNTE0LCAweDAyMDIwODAwLCAweDAwMTAxMWE1LCAweDhkMGExNTA4LAorCTB4MDIwMjA4MDAsIDB4MDAxMDExYWEsIDB4OGQwYTE1MDAsIDB4MDIwMjAwMDAsCisJMHgwMDAyMDdjOCwgMHgxYzAxZjAwMCwgMHg0MjAwMDAwMCwgMHgwMDEwYjJiZCwKKwkweDUwMDAwMDAwLCAweDhjMDAwNTA0LCAweDA0MDAwMDE0LCAweDQyMDAwMDAwLAorCTB4MDAxMGIyYmQsIDB4NTAwMDAwMDAsIDB4OGMwMDA1MDIsIDB4MDQwMjAwMDIsCisJMHgxYzAxZjAwMCwgMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwKKwkweDQyMDM0MDAwLCAweDAwMTBiMmEwLCAweDU5YTAwMDFkLCAweDU5YTFkODFlLAorCTB4ODQwMDA1MDIsIDB4NDgwMzQwMWQsIDB4NThlYzAwMDksIDB4MDgwMWY4MDAsCisJMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwgMHgwNDAyNzAwMiwgMHgwNDAyNjAwMiwKKwkweDFjMDFmMDAwLCAweDRkZjAwMDAwLCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4MmEsIDB4MDQwMDAwMWEsIDB4NDEyZGQ4MDAsCisJMHg0OGVmYzg1NywgMHgwMjAxZjgwMCwgMHgwMDEwMzk0MSwgMHg0MjAzNDAwMCwKKwkweDAwMTBiMmEwLCAweDQ5YTFkODBiLCAweDQ4ZWY0MDFlLCAweDU5YTAwMDFkLAorCTB4ODQwMDA1NDQsIDB4NDgwMzQwMWQsIDB4NTllMDAwMjAsIDB4NDgwM2M4NTcsCisJMHg1OWUwMDAyMSwgMHg0ODAzYzg1NywgMHg1OWUwMDAyMiwgMHg0ODAzYzg1NywKKwkweDU5ZTAwMDIzLCAweDQ4MDNjODU3LCAweDU5ZTAwMDI0LCAweDQ4MDNjODU3LAorCTB4MDIwMWY4MDAsIDB4MDAxMDFmYmIsIDB4MDIwMWY4MDAsIDB4MDAxMDFmZGEsCiAJMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwgMHg0ZGEwMDAwMCwgMHg0ZGYwMDAwMCwKLQkweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDA0MDA2MDUxLCAweDQwMDAxMDAwLAotCTB4NDIwMzQwMDAsIDB4MDAxMGI0YTQsIDB4NTlhMDE4MTgsIDB4ODAwYzE5YzAsCisJMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHgwNDAwNjA1MSwgMHg0MjAzNDAwMCwKKwkweDAwMTBiMmEwLCAweDU5YTAxMDE3LCAweDU5YTAxODE4LCAweDgwMGMxOWMwLAogCTB4MDQwMjAwMDgsIDB4NTlhMDM4MWIsIDB4ODAxYzM5YzAsIDB4MDIwMDA4MDAsCi0JMHgwMDEwMDVkOCwgMHg1OWEwMDQxYywgMHg4MDFjM2MwMCwgMHgwNDAxZjAwYywKKwkweDAwMTAwNjE1LCAweDU5YTAwNDFjLCAweDgwMWMzYzAwLCAweDA0MDFmMDBjLAogCTB4NTlhMDA0MTksIDB4ODIwMDA0MDAsIDB4MDAwMDAwMDIsIDB4NDgwMzQ0MTksCiAJMHg4MjAwMGM4MCwgMHgwMDAwMDAxMywgMHgwNDAwMTAwMywgMHg0OTdiNDQxOSwKIAkweDQxNzgwMDAwLCAweDU5YTAzODE2LCAweDgwMWMzYzAwLCAweDgwMDgxMDQwLApAQCAtMTExMjcsMjU1ICsxMTAyMiwzMTkgQEAKIAkweDgwMGMxOWMwLCAweDA0MDAwMDA3LCAweDgwMGMxODQwLCAweDQ4MGY0MDE4LAogCTB4MDQwMjAwMWYsIDB4NDk3YjQ0MTksIDB4NDk3YjQyMTksIDB4MDQwMWYwMWMsCiAJMHg4MDA4MTFjMCwgMHgwNDAyMDAwYiwgMHg0ZDJjMDAwMCwgMHg1OWEyNTgxYiwKLQkweDAyMDFmODAwLCAweDAwMTAwN2Y0LCAweDVjMDI1ODAwLCAweDQ5N2I0MDFiLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsIDB4NWMwMjU4MDAsIDB4NDk3YjQwMWIsCiAJMHg0OTdiNDAxYSwgMHg0OTdiNDQxYywgMHg0OTdiNDIxYywgMHgwNDAxZjAxMCwKIAkweDU5YTAwNDFjLCAweDgyMDAwNDAwLCAweDAwMDAwMDAyLCAweDgyMDAwYzgwLAogCTB4MDAwMDAwMTIsIDB4NDgwMzQ0MWMsIDB4MDQwMDEwMDksIDB4NGQyYzAwMDAsCiAJMHg1OWEyNTgxYiwgMHg1OTJjMzgxMywgMHg0ODFmNDAxYiwgMHg0OTdiNDQxYywKLQkweDAyMDFmODAwLCAweDAwMTAwN2Y0LCAweDVjMDI1ODAwLCAweDVjMDNlMDAwLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA4M2EsIDB4NWMwMjU4MDAsIDB4NWMwM2UwMDAsCiAJMHg1YzAzNDAwMCwgMHgxYzAxZjAwMCwgMHg1OWE4MDAwNSwgMHg4MjAwMDUwMCwKLQkweDAwMDAwMDAzLCAweDAyMDIwMDAwLCAweDAwMTA0MzE1LCAweDU5MzQwNDAwLAotCTB4ODIwMDA1ODAsIDB4MDAwMDA2MDYsIDB4MDIwMjAwMDAsIDB4MDAxMDQyZTYsCi0JMHg1OTM0MDAwZCwgMHg4MDAyN2Q0MCwgMHgwMjAyMDAwMCwgMHgwMDEwNDMyMSwKKwkweDAwMDAwMDAzLCAweDAyMDIwMDAwLCAweDAwMTA0MTQ1LCAweDU5MzQwNDAwLAorCTB4ODIwMDA1ODAsIDB4MDAwMDA2MDYsIDB4MDIwMjAwMDAsIDB4MDAxMDQxMTYsCisJMHg1OTM0MDAwZCwgMHg4MDAyN2Q0MCwgMHgwMjAyMDAwMCwgMHgwMDEwNDE1MSwKIAkweDA0MDFmODAzLCAweDgwMDAwNTgwLCAweDFjMDFmMDAwLCAweDU5MzQwMDBmLAotCTB4NTkzNDEyMDMsIDB4ODAwODA1NDAsIDB4MDQwMjAwNmYsIDB4NTkzNDAyMGIsCi0JMHg1OTM0MTQwYiwgMHg4MDA4MDQ4MCwgMHgwNDAyMTA2YiwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzVhLCAweDA0MDAwMDY0LCAweDgwMDgxMDAwLCAweDU5MmMwNDA2LAotCTB4NDgwYTZjMGIsIDB4NDkzNjYwMDksIDB4NDkyZTYwMDgsIDB4NGEwMjY0MDYsCi0JMHgwMDAwMDAwMywgMHg0YTAyNjQwMywgMHgwMDAwMDA0MCwgMHg4MDAwMDBjMiwKKwkweDU5MzQxMjAzLCAweDgwMDgwNTQwLCAweDA0MDIwMDVkLCAweDU5MzQwMjBiLAorCTB4NTkzNDE0MGIsIDB4ODAwODA0ODAsIDB4MDQwMjEwNTksIDB4MDIwMWY4MDAsCisJMHgwMDAyMDg5MiwgMHgwNDAwMDA1MiwgMHg1OTJjMDQwNiwgMHg0OTM2NjAwOSwKKwkweDQ5MmU2MDA4LCAweDRhMDI2NDA2LCAweDAwMDAwMDAzLCAweDRhMDI2NDAzLAorCTB4MDAwMDAwNDAsIDB4ODAwODEwMDAsIDB4NDgwYTZjMGIsIDB4ODAwMDAwYzIsCiAJMHg4MDAwMThjNCwgMHg4MDBjMDQwMCwgMHg0ODAyNjIwNiwgMHg1OTJjMDgwOCwKIAkweDU5MmMxODA5LCAweDU5MmMwMjBhLCAweDQ4MDY2MDE3LCAweDQ4MGU2MDE4LAotCTB4OGMwMDA1MDIsIDB4MDQwMDAwMzAsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsCi0JMHg1OTJjMDIwNywgMHg4MDAwMDA0MCwgMHgwNDAyMDAyMCwgMHg1OWE4MDAwNSwKLQkweDhjMDAwNTE0LCAweDQyMDAwMDAwLCAweDAwMDAwMDU1LCAweDA0MDIwMDAzLAotCTB4NDIwMDAwMDAsIDB4MDAwMDAwMzMsIDB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsCi0JMHg1OTJjMDIwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwKLQkweDAwMDAwMDE4LCAweDA0MDIwMDExLCAweDU5MmMxODBmLCAweDU5MzAwMDA3LAotCTB4ODIwMDA1NDAsIDB4MDAwMDAwOTEsIDB4NDgwZTYwMTEsIDB4NDgwMjYwMDcsCi0JMHg0MjAwMDAwMCwgMHg4MDAwMDAwNCwgMHg0ODAyNjAwNCwgMHg1OWJjMDBlYSwKLQkweDhjMDAwNTE2LCAweDA0MDIwN2ZlLCAweDgzMzAwNDAwLCAweDIwMDAwMDAwLAotCTB4NDgwMzc4ZTEsIDB4MWMwMWYwMDAsIDB4MDQwMWZlNzgsIDB4NTkzMDAwMDcsCi0JMHg4NDAwMDU0ZSwgMHg0ODAyNjAwNywgMHg1OTJjMWEwNCwgMHg4MjBjMWQwMCwKLQkweDAwMDAwMGZmLCAweDgyMGMwNTgwLCAweDAwMDAwMDQ4LCAweDA0MDAwMDE3LAotCTB4MDQwMWY3ZWMsIDB4OGMwMDA1MDAsIDB4MDQwMjBlY2IsIDB4NGEwMjYyMDMsCi0JMHgwMDAwMDAwMiwgMHg1OWE4MDgwNSwgMHg4MjA0MDUwMCwgMHgwMDAwMDYwMCwKLQkweDA0MDIwMDEyLCAweDQyMDAwMDAwLCAweDAwMDAwMDMwLCAweDgwMDAwMDQwLAotCTB4MDQwMjA3ZmYsIDB4NTkyYzFhMDQsIDB4ODIwYzFkMDAsIDB4MDAwMDAwZmYsCi0JMHg4MjBjMDU4MCwgMHgwMDAwMDAxOCwgMHgwNDAwMDdkYSwgMHg4MjBjMDU4MCwKLQkweDAwMDAwMDQ4LCAweDA0MDIwN2Q3LCAweDQyMDAwODAwLCAweDgwMDAwODA0LAotCTB4MDIwMWYwMDAsIDB4MDAxMDY3MjEsIDB4OGMwNDBkMTIsIDB4NDIwMDAwMDAsCi0JMHgwMDAwMDAxMCwgMHgwNDAyMDdlZSwgMHg0MjAwMDAwMCwgMHgwMDAwMDA1MSwKLQkweDA0MDFmN2ViLCAweDgwMDgxMWMwLCAweDA0MDIwMDAzLCAweDRhMDI2YTAzLAotCTB4MDAwMDAwMDEsIDB4NTkzNDAwMTAsIDB4NDkyZTY4MTAsIDB4ODAwMDBkNDAsCi0JMHgwNDAyMDAwMywgMHg0OTJlNjgwZiwgMHgxYzAxZjAwMCwgMHg0OTJjMDgwMCwKLQkweDFjMDFmMDAwLCAweDgzNDQwYzgwLCAweDAwMDAwODAwLCAweDA0MDIxMDA5LAotCTB4ODM0NDA0MDAsIDB4MDAxMGFjMDAsIDB4NTAwMDAwMDAsIDB4ODAwMDA1NDAsCi0JMHgwNDAwMDAwNCwgMHg0MDAyNjgwMCwgMHg4MDAwMDU4MCwgMHgxYzAxZjAwMCwKLQkweDgyMDAwNTQwLCAweDAwMDAwMDAxLCAweDFjMDFmMDAwLCAweDU5MzQwMjAzLAotCTB4ODAwMDA1NDAsIDB4MDQwMjAwNGIsIDB4NGQzMDAwMDAsIDB4NGQyYzAwMDAsCi0JMHg1OTM0MDAwZiwgMHg4MDAyNWQ0MCwgMHgwNDAwMDA0NCwgMHgwMjAxZjgwMCwKLQkweDAwMDIwNzVhLCAweDA0MDAwMDNmLCAweDU5MmMwMDAwLCAweDQ4MDI2ODBmLAotCTB4ODAwMDA1NDAsIDB4MDQwMjAwMDIsIDB4NDgwMjY4MTAsIDB4NTkyYzJhMDQsCi0JMHg4MDA4MTAwMCwgMHg0ODBhNmMwYiwgMHg0OTM2NjAwOSwgMHg0OTJlNjAwOCwKLQkweDgyMTQyZDAwLCAweDAwMDAwMGZmLCAweDgyMTQwNTgwLCAweDAwMDAwMDEyLAotCTB4MDQwMDAwMzUsIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDMsIDB4NGEwMjY0MDMsCi0JMHgwMDAwMDA0MCwgMHg1OTJjMDQwNiwgMHg4MDAwMDBjMiwgMHg4MDAwMThjNCwKLQkweDgwMGMwNDAwLCAweDQ4MDI2MjA2LCAweDU5MmMwODA4LCAweDU5MmMxODA5LAotCTB4NTkyYzAyMGEsIDB4NDgwNjYwMTcsIDB4NDgwZTYwMTgsIDB4OGMwMDA1MDIsCi0JMHgwMjAwMDAwMCwgMHgwMDEwNDc0ZCwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNCwKLQkweDU5MmMwMjA3LCAweDgwMDAwMDQwLCAweDAyMDIwMDAwLCAweDAwMTA0NzQwLAotCTB4ODIxNDA1ODAsIDB4MDAwMDAwMTgsIDB4MDIwMjAwMDAsIDB4MDAxMDQ3NDAsCisJMHg4YzAwMDUwMiwgMHgwNDAwMDAyYSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwNCwKKwkweDU5MmMwMjA3LCAweDgwMDAwMDQwLCAweDA0MDIwMDFhLCAweDU5YTgwMDcwLAorCTB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsIDB4NTkyYzAyMDQsIDB4ODIwMDA1MDAsCisJMHgwMDAwMDBmZiwgMHg4MjAwMDU4MCwgMHgwMDAwMDAxOCwgMHgwNDAyMDAxMSwKIAkweDU5MmMxODBmLCAweDU5MzAwMDA3LCAweDgyMDAwNTQwLCAweDAwMDAwMDkxLAogCTB4NDgwZTYwMTEsIDB4NDgwMjYwMDcsIDB4NDIwMDAwMDAsIDB4ODAwMDAwMDQsCiAJMHg0ODAyNjAwNCwgMHg1OWJjMDBlYSwgMHg4YzAwMDUxNiwgMHgwNDAyMDdmZSwKLQkweDgzMzAwNDAwLCAweDIwMDAwMDAwLCAweDQ4MDM3OGUxLCAweDU5MzQwMjBiLAotCTB4NTkzNDE0MGIsIDB4ODAwODA0ODAsIDB4MDQwMDE3YmUsIDB4MDQwMWYwMDMsCi0JMHg0YTAyNmEwMywgMHgwMDAwMDAwMSwgMHg1YzAyNTgwMCwgMHg1YzAyNjAwMCwKLQkweDFjMDFmMDAwLCAweDQ5N2E1ODAwLCAweDQ5MzI1ODA5LCAweDRhMDI2NDA2LAotCTB4MDAwMDAwMDYsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDcsIDB4MDQwMWY4MDIsCi0JMHgwNDAxZjdlZiwgMHg1OWE4MDAyMSwgMHg4MDAwMDFjMCwgMHgwMjAyMDAwMCwKLQkweDAwMTA0NzZmLCAweDU5YTgwMDA1LCAweDhjMDAwNTA0LCAweDAyMDIwMDAwLAotCTB4MDAxMDQ3NmIsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MTgsIDB4MDIwMjAwMDAsCi0JMHgwMDEwNDc2NywgMHg1OTJjMGEwYywgMHg0ODA2NjIwMiwgMHg0YTAyNWEwNiwKLQkweDAwMDAwMDAwLCAweDhjMDAwNTA4LCAweDAyMDIwMDAwLCAweDAwMTA0NzYzLAotCTB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsIDB4MDQwMWZiZGYsIDB4NWMwMjc4MDAsCi0JMHgxYzAxZjAwMCwgMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwgMHgwMjAyMDAwMCwKLQkweDAwMTA0Y2U0LCAweDU5OTgwMDIyLCAweDgwMDAwNTQwLCAweDA0MDAwMDE3LAotCTB4NTkyYzBhMDYsIDB4NTkyYzA0MDksIDB4ODAwNDA1NDAsIDB4MDQwMjAwMTMsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNGNmYSwgMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwKLQkweDAyMDIwMDAwLCAweDAwMTA0Y2YzLCAweDU5OTgwMDIyLCAweDgwMDAwNTQwLAotCTB4MDQwMDAwMGEsIDB4ODIwNDA1ODAsIDB4MDAwMDAwMDEsIDB4MDQwMjAwMDcsCi0JMHgwMjAxZjAwMCwgMHgwMDEwNGNmYSwgMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwKLQkweDAyMDIwMDAwLCAweDAwMTA0ZGNhLCAweDU5OTgwMDI2LCAweDQ5N2E1ODAwLAotCTB4ODAwMDA1NDAsIDB4MDIwMjAwMDAsIDB4MDAxMDRlMWQsIDB4NTlkODAxMDUsCi0JMHg4MjAwMGQwMCwgMHgwMDAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNGVkYiwKLQkweDgwMDAwMTA2LCAweDgyMDAwNTAwLCAweDAwMDAwMDAzLCAweDBjMDFmMDAxLAotCTB4MDAwMjAyZjAsIDB4MDAxMDRlMWQsIDB4MDAwMjAyZjYsIDB4MDAwMjAzNDEsCi0JMHg1OTJjMDAwMSwgMHg0OTJmYjEwNywgMHg4MDAwMGQ0MCwgMHgwMjAyMDAwMCwKLQkweDAwMTA0ZGRiLCAweDFjMDFmMDAwLCAweDU5MmMwMDAxLCAweDQ5MmZiMTA3LAotCTB4ODAwMDBkNDAsIDB4MDIwMjAwMDAsIDB4MDAxMDRkZTgsIDB4NTlkYTU5MDgsCi0JMHg4MzVjMDQ4MCwgMHgwMDAwMDAyMCwgMHgwNDAwMTAyYywgMHgwNDAyYjAzNCwKLQkweDQ5MmZiMDA3LCAweDA0MDBlN2ZhLCAweDU5ZDgwMTA1LCAweDgyMDAwNTAwLAotCTB4MDAwMTg3ODAsIDB4MDIwMjAwMDAsIDB4MDAxMDRlZGIsIDB4MDQwMDYwMWYsCi0JMHg1OWQ4MDEwYSwgMHg1OWQ4MDkwYSwgMHg4MDA0MDU4MCwgMHgwNDAyMDdmZCwKLQkweDgwMDQwOGUwLCAweDU5OWMxMDE3LCAweDhjMDgxNTA4LCAweDA0MDIwMDI4LAotCTB4ODIwNDBkNDAsIDB4MDAwMDAwMTMsIDB4NTk5ODAwMmIsIDB4NDgwN2MwMTEsCi0JMHg4NDAwMDUwMCwgMHg0ODAzMzAyYiwgMHg1OWUwMDAxNywgMHg4YzAwMDUwOCwKLQkweDA0MDIwMDA0LCAweDQyMDNlMDAwLCAweDMwMDAwMDAxLCAweDFjMDFmMDAwLAotCTB4NGEwM2MwMTcsIDB4MDAwMDAwMDMsIDB4ODIwNDA1MDAsIDB4MDAwMDAwZmYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAxZCwgMHgwNDAyMDdmNywgMHg0YTAzYzAxNywKLQkweDAwMDAwMDBkLCAweDA0MDFmN2Y0LCAweDU5OTgwODJiLCAweDg0MDQwZDQwLAotCTB4NDgwNzMwMmIsIDB4MWMwMWYwMDAsIDB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsCi0JMHg4MTVlYjgwMCwgMHg1OWM4MDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwKLQkweDQ4MDM5MDAwLCAweDA0MDBlN2NhLCAweDA0MDFmN2QwLCAweDA0MDJmN2Y3LAotCTB4NDkyZmE4MDcsIDB4MDQwMGU3YzYsIDB4MDQwMWY3Y2MsIDB4NTllMDAwMGYsCi0JMHg1OWUwMTAwZiwgMHg4MDA4MTU4MCwgMHgwNDAyMDdmZCwgMHg4MTI4MTU4MCwKLQkweDA0MDAwN2Q0LCAweDQwMDI1MDAwLCAweDgyMDQwZDQwLCAweDAwMDAwMDFkLAotCTB4MDQwMWY3ZDIsIDB4NTlkODA5MDgsIDB4NDU2ODA4MDAsIDB4NDAwNmQwMDAsCisJMHg4MzMwMDQwMCwgMHgyMDAwMDAwMCwgMHg0ODAzNzhlMSwgMHgxYzAxZjAwMCwKKwkweDA0MDFmZTRiLCAweDU5MzAwMDA3LCAweDg0MDAwNTRlLCAweDQ4MDI2MDA3LAorCTB4NTkyYzFhMDQsIDB4ODIwYzFkMDAsIDB4MDAwMDAwZmYsIDB4ODIwYzA1ODAsCisJMHgwMDAwMDA0OCwgMHgwNDAwMDAxMiwgMHgwNDAxZjdlYywgMHg4YzAwMDUwMCwKKwkweDA0MDIwZTllLCAweDRhMDI2MjAzLCAweDAwMDAwMDAyLCAweDU5YTgwMDcxLAorCTB4ODAwMDAwNDAsIDB4MDQwMjA3ZmYsIDB4NTkyYzFhMDQsIDB4ODIwYzFkMDAsCisJMHgwMDAwMDBmZiwgMHg4MjBjMDU4MCwgMHgwMDAwMDAxOCwgMHgwNDAwMDdkZiwKKwkweDgyMGMwNTgwLCAweDAwMDAwMDQ4LCAweDA0MDIwN2RjLCAweDQyMDAwODAwLAorCTB4ODAwMDA4MDQsIDB4MDIwMWYwMDAsIDB4MDAxMDY0NjYsIDB4ODAwODExYzAsCisJMHgwNDAyMDAwMywgMHg0YTAyNmEwMywgMHgwMDAwMDAwMSwgMHg1OTM0MDAxMCwKKwkweDQ5MmU2ODEwLCAweDgwMDAwZDQwLCAweDA0MDIwMDAzLCAweDQ5MmU2ODBmLAorCTB4MWMwMWYwMDAsIDB4NDkyYzA4MDAsIDB4MWMwMWYwMDAsIDB4ODM0NDBjODAsCisJMHgwMDAwMDgwMCwgMHgwNDAyMTAwOSwgMHg4MzQ0MDQwMCwgMHgwMDEwYWEwMCwKKwkweDUwMDAwMDAwLCAweDgwMDAwNTQwLCAweDA0MDAwMDA0LCAweDQwMDI2ODAwLAorCTB4ODAwMDA1ODAsIDB4MWMwMWYwMDAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMDEsCisJMHgxYzAxZjAwMCwgMHg1OTM0MDIwMywgMHg4MDAwMDU0MCwgMHgwNDAyMDA0YiwKKwkweDRkMzAwMDAwLCAweDRkMmMwMDAwLCAweDU5MzQwMDBmLCAweDgwMDI1ZDQwLAorCTB4MDQwMDAwNDQsIDB4MDIwMWY4MDAsIDB4MDAwMjA4OTIsIDB4MDQwMDAwM2YsCisJMHg1OTJjMDAwMCwgMHg0ODAyNjgwZiwgMHg4MDAwMDU0MCwgMHgwNDAyMDAwMiwKKwkweDQ4MDI2ODEwLCAweDU5MmMyYTA0LCAweDgwMDgxMDAwLCAweDQ4MGE2YzBiLAorCTB4NDkzNjYwMDksIDB4NDkyZTYwMDgsIDB4ODIxNDJkMDAsIDB4MDAwMDAwZmYsCisJMHg4MjE0MDU4MCwgMHgwMDAwMDAxMiwgMHgwNDAwMDAzNSwgMHg0YTAyNjQwNiwKKwkweDAwMDAwMDAzLCAweDRhMDI2NDAzLCAweDAwMDAwMDQwLCAweDU5MmMwNDA2LAorCTB4ODAwMDAwYzIsIDB4ODAwMDE4YzQsIDB4ODAwYzA0MDAsIDB4NDgwMjYyMDYsCisJMHg1OTJjMDgwOCwgMHg1OTJjMTgwOSwgMHg1OTJjMDIwYSwgMHg0ODA2NjAxNywKKwkweDQ4MGU2MDE4LCAweDhjMDAwNTAyLCAweDAyMDAwMDAwLCAweDAwMTA0NWExLAorCTB4NGEwMjYyMDMsIDB4MDAwMDAwMDQsIDB4NTkyYzAyMDcsIDB4ODAwMDAwNDAsCisJMHgwMjAyMDAwMCwgMHgwMDEwNDU5NCwgMHg4MjE0MDU4MCwgMHgwMDAwMDAxOCwKKwkweDAyMDIwMDAwLCAweDAwMTA0NTk0LCAweDU5MmMxODBmLCAweDU5MzAwMDA3LAorCTB4ODIwMDA1NDAsIDB4MDAwMDAwOTEsIDB4NDgwZTYwMTEsIDB4NDgwMjYwMDcsCisJMHg0MjAwMDAwMCwgMHg4MDAwMDAwNCwgMHg0ODAyNjAwNCwgMHg1OWJjMDBlYSwKKwkweDhjMDAwNTE2LCAweDA0MDIwN2ZlLCAweDgzMzAwNDAwLCAweDIwMDAwMDAwLAorCTB4NDgwMzc4ZTEsIDB4NTkzNDAyMGIsIDB4NTkzNDE0MGIsIDB4ODAwODA0ODAsCisJMHgwNDAwMTdiZSwgMHgwNDAxZjAwMywgMHg0YTAyNmEwMywgMHgwMDAwMDAwMSwKKwkweDVjMDI1ODAwLCAweDVjMDI2MDAwLCAweDFjMDFmMDAwLCAweDQ5N2E1ODAwLAorCTB4NDkzMjU4MDksIDB4NGEwMjY0MDYsIDB4MDAwMDAwMDYsIDB4NGEwMjYyMDMsCisJMHgwMDAwMDAwNywgMHgwNDAxZjgwMiwgMHgwNDAxZjdlZiwgMHg1OWE4MDAyMSwKKwkweDgwMDAwMWMwLCAweDAyMDIwMDAwLCAweDAwMTA0NWMzLCAweDU5YTgwMDA1LAorCTB4OGMwMDA1MDQsIDB4MDIwMjAwMDAsIDB4MDAxMDQ1YmYsIDB4NTkzNDAyMDAsCisJMHg4YzAwMDUxOCwgMHgwMjAyMDAwMCwgMHgwMDEwNDViYiwgMHg1OTJjMGEwYywKKwkweDQ4MDY2MjAyLCAweDRhMDI1YTA2LCAweDAwMDAwMDAwLCAweDhjMDAwNTA4LAorCTB4MDIwMjAwMDAsIDB4MDAxMDQ1YjcsIDB4NGQzYzAwMDAsIDB4NDE3YTc4MDAsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDdjZSwgMHg1YzAyNzgwMCwgMHgxYzAxZjAwMCwKKwkweDU5OTgwMDI2LCAweDQ5N2E1ODAwLCAweDgwMDAwNTQwLCAweDA0MDIwMDY3LAorCTB4NTlkODAxMDUsIDB4ODIwMDBkMDAsIDB4MDAwMTg3ODAsIDB4MDQwMjAxOTcsCisJMHg4MDAwMDBmNiwgMHg4MDAwMDEzYywgMHgwYzAxZjAwMSwgMHgwMDAyMDJmMywKKwkweDAwMDIwMzRlLCAweDAwMDIwMzA4LCAweDAwMDIwMzI2LCAweDU5MmMwMDAxLAorCTB4NDkyZmIxMDcsIDB4ODAwMDBkNDAsIDB4MDQwMjA4MDUsIDB4NTk5NDAwMTksCisJMHg4MDAwMDU0MCwgMHgwNDAwMjA4NSwgMHgxYzAxZjAwMCwgMHg0OTdhNTgwMSwKKwkweDQwMDY1ODAwLCAweDU5MmMwMDAxLCAweDQ5NmE1ODAwLCAweDgxNWViODAwLAorCTB4NDEyZWQwMDAsIDB4ODAwMDBkNDAsIDB4MDQwMjA3ZjksIDB4NTljODAwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwgMHg0ODAzOTAwMCwgMHgxYzAxZjAwMCwKKwkweDQ5MmZiMTA3LCAweDU5MmMwMDAxLCAweDgwMDAwZDQwLCAweDA0MDIwZmYwLAorCTB4NTlkYTU5MDgsIDB4ODM1YzA0ODAsIDB4MDAwMDAwMjAsIDB4MDQwMDEwMGQsCisJMHgwNDAyYjAwYiwgMHg0OTJmYjAwNywgMHgwNDAwZTdmYSwgMHg1OWQ4MDEwNSwKKwkweDgyMDAwNTAwLCAweDAwMDE4NzgwLCAweDA0MDIwMTZjLCAweDU5OTQwMDE5LAorCTB4ODAwMDA1NDAsIDB4MDQwMDIwNjUsIDB4MWMwMWYwMDAsIDB4MDQwMGYwMDksCisJMHg0OTZhNTgwMCwgMHg0MTJlZDAwMCwgMHg4MTVlYjgwMCwgMHg1OWM4MDAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDA0MDFmN2VmLAorCTB4NDkyZmE4MDcsIDB4MDQwMWY3ZWQsIDB4NTlkODExMDgsIDB4NDU2ODEwMDAsCisJMHg0MDBhZDAwMCwgMHg4MTVlYjgwMCwgMHgwNDAwZTdmYywgMHg1OWM4MDAwMCwKKwkweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDA0MDJkMDA5LAorCTB4NTkyYzAwMDEsIDB4NDkyZmIxMDcsIDB4ODAwMDBkNDAsIDB4MDQwMjBmYzgsCisJMHg1OTk0MDAxOSwgMHg4MDAwMDU0MCwgMHgwNDAwMjA0OCwgMHgxYzAxZjAwMCwKKwkweDU5ZDgwMTA1LCAweDgyMDAwNTAwLCAweDAwMDE4NzgwLCAweDA0MDIwMTQ3LAorCTB4NDIwMDAwMDAsIDB4MDAxMGI2NTQsIDB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsCisJMHg1OTk4MDAyNiwgMHg1OTk4MDgyOCwgMHg4MDAwMDAwMCwgMHg0ODAzMzAyNiwKKwkweDQ5MmYzMDI4LCAweDgwMDQwOWMwLCAweDA0MDAwMDAzLCAweDQ5MmMwODAwLAorCTB4MDQwMWYwMDIsIDB4NDkyZjMwMjksIDB4NTkyYzAwMDEsIDB4ODAwMDBkNDAsCisJMHgwNDAyMGZhZiwgMHgwNDAxZjdlNywgMHg1OTk4MDAyNiwgMHg1OTk4MDgyOCwKKwkweDgwMDAwMDAwLCAweDQ4MDMzMDI2LCAweDQ5MmYzMDI4LCAweDgwMDQwOWMwLAorCTB4MDQwMDAwMDMsIDB4NDkyYzA4MDAsIDB4MDQwMWYwMDIsIDB4NDkyZjMwMjksCisJMHg1OTJjMDAwMSwgMHg4MDAwMGQ0MCwgMHgwNDAyMGZhMSwgMHgwNDAyZDAwZCwKKwkweDU5OTgwMDI5LCAweDgwMDI1ZDQwLCAweDA0MDAwMDBlLCAweDU5OTgwMDI2LAorCTB4ODAwMDAwNDAsIDB4NDgwMzMwMjYsIDB4MDQwMjAwMDIsIDB4NDgwMzMwMjgsCisJMHg1OTJjMDAwMCwgMHg0ODAzMzAyOSwgMHg0OTJmYjEwNywgMHgwNDAwZDdmNSwKKwkweDQyMDAwMDAwLCAweDAwMTBiNjU0LCAweDAyMDFmODAwLCAweDAwMTBhODZlLAorCTB4MDQwMmUwMGEsIDB4NTlkYTU5MDgsIDB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsCiAJMHg4MTVlYjgwMCwgMHgwNDAwZTdmYywgMHg1OWM4MDAwMCwgMHg4MjAwMDU0MCwKLQkweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDAyMDA2MDAwLCAweDAwMTA0ZGY4LAotCTB4NTlkODAxMGEsIDB4NTlkODA5MGEsIDB4ODAwNDBkODAsIDB4MDQwMjA3ZmQsCi0JMHg5MDAwMDFjMCwgMHg4MjAwMDU0MCwgMHgwMDAwMDAxMywgMHg0ODAzYzAxMSwKLQkweDU5OTgwMDJiLCAweDg0MDAwNTAwLCAweDQ4MDMzMDJiLCAweDU5ZTAwMDE3LAotCTB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsIDB4NGEwM2MwMTcsIDB4MDAwMDAwMDMsCi0JMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwKLQkweDAwMDE4NzgwLCAweDAyMDIwMDAwLCAweDAwMTA0ZWRiLCAweDAyMDJkMDAwLAotCTB4MDAxMDRkZmQsIDB4NTkyYzAwMDEsIDB4NDkyZmIxMDcsIDB4ODAwMDBkNDAsCi0JMHgwMjAyMDAwMCwgMHgwMDEwNGUxMCwgMHgxYzAxZjAwMCwgMHg1OTk4MDAyMCwKLQkweDBjMDFmMDAxLCAweDAwMDIwMzcwLCAweDAwMDIwMzcxLCAweDAwMTA0ZTg4LAotCTB4MWMwMWYwMDAsIDB4NGRmMDAwMDAsIDB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsCi0JMHgwNDAyNjgxZSwgMHgwNDAwNjAwNCwgMHg1OTljMDAxNywgMHg4YzAwMDUwOCwKLQkweDA0MDIwODY1LCAweDU5OTgwMDI5LCAweDgwMDI1ZDQwLCAweDA0MDAwMDBhLAotCTB4MDQwMmQwMGIsIDB4NTk5ODAwMjYsIDB4ODAwMDAwNDAsIDB4NDgwMzMwMjYsCi0JMHg1OTJjMDAwMCwgMHg0OTJmYjEwNywgMHg0ODAzMzAyOSwgMHgwNDAyMDAwMiwKLQkweDQ4MDMzMDI4LCAweDVjMDNlMDAwLCAweDFjMDFmMDAwLCAweDU5ZDgwMTA1LAotCTB4ODIwMDA1MDAsIDB4MDAwMTg3ODAsIDB4MDIwMjAwMDAsIDB4MDAxMDRlZGIsCi0JMHg0MjAwMDAwMCwgMHgwMDEwYjg1NSwgMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywKLQkweDVjMDNlMDAwLCAweDFjMDFmMDAwLCAweDU5OTgwMDJiLCAweDhjMDAwNTAwLAotCTB4MDQwMjAwM2IsIDB4MDQwMGUwMDcsIDB4NTlkODAxMDUsIDB4ODIwMDA1MDAsCi0JMHgwMDAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNGVkYiwgMHgxYzAxZjAwMCwKLQkweDU5ZGE1OTA4LCAweDgzNWMwYzgwLCAweDAwMDAwMDIwLCAweDA0MDAxMDAzLAotCTB4MDQwMGIwMjksIDB4MDQwMGYwMmIsIDB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsCi0JMHg4MTVlYjgwMCwgMHg1OWM4MDAwMCwgMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwKLQkweDQ4MDM5MDAwLCAweDA0MDBlN2YzLCAweDU5ZDgwMTBhLCAweDU5ZDgwOTBhLAotCTB4ODAwNDA1ODAsIDB4MDQwMjA3ZmQsIDB4ODAwNDA4ZTAsIDB4NTk5YzEwMTcsCi0JMHg4YzA4MTUwOCwgMHgwNDAyMDAyMiwgMHg4MjA0MGQ0MCwgMHgwMDAwMDAxMywKLQkweDQ4MDdjMDExLCAweDU5ZTAwMDE3LCAweDhjMDAwNTA4LCAweDA0MDAwMDBhLAotCTB4NGEwM2MwMTcsIDB4MDAwMDAwMDMsIDB4ODIwNDA1MDAsIDB4MDAwMDAwZmYsCi0JMHg4MjAwMDU4MCwgMHgwMDAwMDAxZCwgMHgwNDAyMDAwMywgMHg0YTAzYzAxNywKLQkweDAwMDAwMDBkLCAweDQyMDNlMDAwLCAweDMwMDAwMDAxLCAweDU5ZDgwMTA1LAotCTB4ODIwMDA1MDAsIDB4MDAwMTg3ODAsIDB4MDIwMjAwMDAsIDB4MDAxMDRlZGIsCi0JMHgxYzAxZjAwMCwgMHg0OTJmYjAwNywgMHgwNDAwZTdkMiwgMHgwNDAxZjdkZiwKLQkweDQ5MmZhODA3LCAweDA0MDBlN2NmLCAweDA0MDFmN2RjLCAweDg0MDAwNTAwLAotCTB4NDgwMzMwMmIsIDB4MDQwMGU3Y2IsIDB4MDQwMWY3ZDgsIDB4NTllMDAwMGYsCi0JMHg1OWUwMTAwZiwgMHg4MDA4MTU4MCwgMHgwNDAyMDdmZCwgMHg4MTI4MTU4MCwKLQkweDA0MDAwN2RhLCAweDQwMDI1MDAwLCAweDgyMDQwZDQwLCAweDAwMDAwMDFkLAotCTB4MDQwMWY3ZDgsIDB4NTllMDAwMGYsIDB4NTllMDEwMGYsIDB4ODAwODBkODAsCi0JMHgwNDAyMDdmZCwgMHg4MTI4MDU4MCwgMHgwNDAyMDAwMiwgMHgxYzAxZjAwMCwKLQkweDQwMGE1MDAwLCAweDkwMDgxMWMwLCAweDgyMDgxNTQwLCAweDAwMDAwMDFjLAotCTB4NDgwYmMwMTEsIDB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsCi0JMHg0YTAzYzAxNywgMHgwMDAwMDAwYywgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwKLQkweDFjMDFmMDAwLCAweDQxNzAwMDAwLCAweDBjMDFmMDAxLCAweDAwMTA1NDIwLAotCTB4MDAwMjAzZmMsIDB4MDAxMDU0MjAsIDB4MDAxMDU0MjEsIDB4MDAxMDU0MWUsCi0JMHgwMDEwNTQxZSwgMHgwMDEwNTQxZSwgMHgwMDEwNTQxZSwgMHgwMDEwNThiMCwKLQkweDA0MDEwMDM3LCAweDU5OTgwMDA2LCAweDgwMDAwNTQwLCAweDA0MDIwMDNjLAotCTB4MDQwMmMwMWMsIDB4NDIwMmY4MDAsIDB4MDAwMDAwMTAsIDB4NGRmMDAwMDAsCi0JMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg0OWRiMzAwNSwgMHg1OWRhNTgwOCwKLQkweDU5MmMwMjA0LCAweDQ5N2E1ODAwLCAweDQ5N2E1ODAxLCAweDgyMDAwNTAwLAotCTB4MDAwMDAwZmYsIDB4ODIwMDBjODAsIDB4MDAwMDAwNzksIDB4MDQwMjEwMzYsCi0JMHgwYzAxZjgzOSwgMHg1YzAzZTAwMCwgMHg4MTdlZjg0MCwgMHgwNDAwMDAwOSwKLQkweDgzNmMwNTgwLCAweDAwMDAwMDAzLCAweDA0MDIwMDA2LCAweDgzNzAwNTgwLAotCTB4MDAwMDAwMDEsIDB4MDQwMjAwMTAsIDB4MDQwMTAwMWIsIDB4MDQwMGM3ZTgsCi0JMHgwNDAwZjk0YSwgMHgwNDAwYjEzNCwgMHg1OWQ0MDAwNSwgMHg4MjAwMDUwMCwKLQkweDQzMDE4NzgwLCAweDAyMDIwMDAwLCAweDAwMTA1ODNmLCAweDU5ZDgwMDA1LAotCTB4ODIwMDA1MDAsIDB4NDMwMTg3ODAsIDB4MDIwMjAwMDAsIDB4MDAxMDU4NDYsCi0JMHgxYzAxZjAwMCwgMHg4MzcwMDU4MCwgMHgwMDAwMDAwMywgMHgwMjAwMDgwMCwKLQkweDAwMTA1NDIxLCAweDgzNzAwNTgwLCAweDAwMDAwMDAxLCAweDA0MDIwN2VkLAotCTB4MDQwMTAwMDUsIDB4MDQwMGM3ZDIsIDB4MDQwMWY3ZWEsIDB4NDIwMmY4MDAsCi0JMHgwMDAwMDAxMCwgMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwKLQkweDQ5ZDczMDA1LCAweDU5ZDY1ODA4LCAweDA0MDFmN2NlLCAweDRkZjAwMDAwLAotCTB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsIDB4NDAwMjU4MDAsIDB4NTkyYzAyMDQsCi0JMHg0OTdiMzAwNSwgMHg0OTdiMzAwNiwgMHg0MjAyZjgwMCwgMHgwMDAwMDAxMCwKLQkweDA0MDFmN2M3LCAweDAyMDFmODAwLCAweDAwMTA1NDkxLCAweDVjMDNlMDAwLAotCTB4MDQwMWY3ZDQsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTUyNywgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NGExLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU1NTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDAyMDRlZiwKLQkweDAwMTA1NDkxLCAweDAwMTA1NmI0LCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAwMjA0YzIsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTRjOSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTdkMywgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1ODFlLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0YmIsIDB4MDAxMDU0OTEsIDB4MDAxMDU3OTcsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NzY1LCAweDAwMTA1NDkxLAotCTB4MDAxMDU3NjUsIDB4MDAxMDU4NzIsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NzI1LAotCTB4MDAxMDU4NTUsIDB4MDAxMDU0OTEsIDB4MDAxMDU4NjUsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsCi0JMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwgMHgwMDEwNTQ5MSwKLQkweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLCAweDAwMTA1NDkxLAotCTB4MDAxMDU0OTEsIDB4MDAxMDU0OTEsIDB4NTkyYzAyMDQsIDB4ODAwMDAxMTAsCi0JMHgwMjAwMDAwMCwgMHgwMDEwNTQ5OSwgMHg4MDAwMDA0MCwgMHgwNDAwMDAwOSwKLQkweDQ4MDMzMDAyLCAweDQ5MmYzMDAzLCAweDQ5MmYzMDA0LCAweDRhMDMzMDA4LAotCTB4MDAwMjA0ZDAsIDB4NDIwMmUwMDAsIDB4MDAwMDAwMDMsIDB4MWMwMWYwMDAsCi0JMHg1OTJjMDQwNiwgMHg4MjAwMGM4MCwgMHgwMDAwMTk5YSwgMHgwMjAyMTAwMCwKLQkweDAwMTA1NGE5LCAweDU5YTgwMDIxLCAweDgwMDAwNTQwLCAweDAyMDIwMDAwLAotCTB4MDAxMDU0ZDcsIDB4NTkyZThhMDYsIDB4ODM0NDBjODAsIDB4MDAwMDA3ZjAsCi0JMHgwMjAyMTAwMCwgMHgwMDEwNTRhOSwgMHg4MzQ0MDQwMCwgMHgwMDEwYWMwMCwKLQkweDUwMDAwMDAwLCAweDgwMDI2ZDQwLCAweDAyMDAwMDAwLCAweDAwMTA1NGRiLAotCTB4NTkzNDAwMDIsIDB4NTkyYzA4MTAsIDB4ODAwNDA1ODAsIDB4ODIwMDA1MDAsCi0JMHgwMGZmZmZmZiwgMHgwMjAyMDAwMCwgMHgwMDEwNTRhOSwgMHgwNDAxZmNjZiwKLQkweDAyMDIwMDAwLCAweDAwMTA1NGRlLCAweDFjMDFmMDAwLCAweDU5MmMwMjA0LAotCTB4ODAwMDAxMTAsIDB4MDIwMDAwMDAsIDB4MDAxMDU0OTksIDB4ODAwMDAwNDAsCisJMHgwMDAwMTIwMCwgMHg0ODAzOTAwMCwgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwKKwkweDAwMDE4NzgwLCAweDA0MDIwMTA5LCAweDU5OTQwMDE5LCAweDgwMDAwNTQwLAorCTB4MDQwMDIwMDIsIDB4MWMwMWYwMDAsIDB4NTk5ODAwMjMsIDB4NDgwMzI4MTksCisJMHgxYzAxZjAwMCwgMHg1OTJjMDQwNCwgMHg4YzAwMDUxZSwgMHgwMjAyMDAwMCwKKwkweDAwMTA0YjdiLCAweDU5OTgwMDIyLCAweDgwMDAwNTQwLCAweDA0MDIwNzVkLAorCTB4NTk5ODAwMjYsIDB4NDk3YTU4MDAsIDB4ODAwMDA1NDAsIDB4MDIwMjAwMDAsCisJMHgwMDEwNGJhNiwgMHg1OWQ4MDEwNSwgMHg4MjAwMGQwMCwgMHgwMDAxODc4MCwKKwkweDA0MDIwMGYyLCAweDgwMDAwMGY2LCAweDgwMDAwMTNjLCAweDBjMDFmMDAxLAorCTB4MDAwMjAzOTgsIDB4MDAxMDRiYTYsIDB4MDAwMjAzOWQsIDB4MDAwMjAzZTYsCisJMHg1OTJjMDAwMSwgMHg0OTJmYjEwNywgMHg4MDAwMGQ0MCwgMHgwNDAyMDc2MCwKKwkweDFjMDFmMDAwLCAweDU5MmMwMDAxLCAweDQ5MmZiMTA3LCAweDgwMDAwZDQwLAorCTB4MDQwMjBmNWIsIDB4NTlkYTU5MDgsIDB4ODM1YzA0ODAsIDB4MDAwMDAwMjAsCisJMHgwNDAwMTAyYiwgMHgwNDAyYjAzMywgMHg0OTJmYjAwNywgMHgwNDAwZTdmYSwKKwkweDU5ZDgwMTA1LCAweDgyMDAwNTAwLCAweDAwMDE4NzgwLCAweDA0MDIwMGQ3LAorCTB4MDQwMDYwMWYsIDB4NTlkODAxMGEsIDB4NTlkODA5MGEsIDB4ODAwNDA1ODAsCisJMHgwNDAyMDdmZCwgMHg4MDA0MDhlMCwgMHg1OTljMTAxNywgMHg4YzA4MTUwOCwKKwkweDA0MDIwMDI4LCAweDgyMDQwZDQwLCAweDAwMDAwMDEzLCAweDU5OTgwMDJiLAorCTB4NDgwN2MwMTEsIDB4ODQwMDA1MDAsIDB4NDgwMzMwMmIsIDB4NTllMDAwMTcsCisJMHg4YzAwMDUwOCwgMHgwNDAyMDAwNCwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwKKwkweDFjMDFmMDAwLCAweDRhMDNjMDE3LCAweDAwMDAwMDAzLCAweDgyMDQwNTAwLAorCTB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMWQsIDB4MDQwMjA3ZjcsCisJMHg0YTAzYzAxNywgMHgwMDAwMDAwZCwgMHgwNDAxZjdmNCwgMHg1OTk4MDgyYiwKKwkweDg0MDQwZDQwLCAweDQ4MDczMDJiLCAweDFjMDFmMDAwLCAweDQ5NmE1ODAwLAorCTB4NDEyZWQwMDAsIDB4ODE1ZWI4MDAsIDB4NTljODAwMDAsIDB4ODIwMDA1NDAsCisJMHgwMDAwMTIwMCwgMHg0ODAzOTAwMCwgMHgwNDAwZTdjYiwgMHgwNDAxZjdkMSwKKwkweDA0MDJmN2Y3LCAweDQ5MmZhODA3LCAweDA0MDBlN2M3LCAweDA0MDFmN2NkLAorCTB4NTllMDAwMGYsIDB4NTllMDEwMGYsIDB4ODAwODE1ODAsIDB4MDQwMjA3ZmQsCisJMHg4MTI4MTU4MCwgMHgwNDAwMDdkNCwgMHg0MDAyNTAwMCwgMHg4MjA0MGQ0MCwKKwkweDAwMDAwMDFkLCAweDA0MDFmN2QyLCAweDU5ZDgwOTA4LCAweDQ1NjgwODAwLAorCTB4NDAwNmQwMDAsIDB4ODE1ZWI4MDAsIDB4MDQwMGU3ZmMsIDB4NTljODAwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwgMHg0ODAzOTAwMCwgMHgwMjAwNjAwMCwKKwkweDAwMTA0YjhkLCAweDU5ZDgwMTBhLCAweDU5ZDgwOTBhLCAweDgwMDQwZDgwLAorCTB4MDQwMjA3ZmQsIDB4OTAwMDAxYzAsIDB4ODIwMDA1NDAsIDB4MDAwMDAwMTMsCisJMHg0ODAzYzAxMSwgMHg1OTk4MDAyYiwgMHg4NDAwMDUwMCwgMHg0ODAzMzAyYiwKKwkweDU5ZTAwMDE3LCAweDhjMDAwNTA4LCAweDA0MDAwMDAzLCAweDRhMDNjMDE3LAorCTB4MDAwMDAwMDMsIDB4NDIwM2UwMDAsIDB4MzAwMDAwMDEsIDB4NTlkODAxMDUsCisJMHg4MjAwMDUwMCwgMHgwMDAxODc4MCwgMHgwNDAyMDA3YywgMHgwMjAyZDAwMCwKKwkweDAwMTA0YjkyLCAweDU5MmMwMDAxLCAweDQ5MmZiMTA3LCAweDgwMDAwZDQwLAorCTB4MDQwMjA2ZWYsIDB4MWMwMWYwMDAsIDB4NTk5ODAwMjAsIDB4MGMwMWYwMDEsCisJMHgwMDAyMDQxMywgMHgwMDAyMDQxNCwgMHgwMDAyMDQzNCwgMHgxYzAxZjAwMCwKKwkweDRkZjAwMDAwLCAweDQyMDNlMDAwLCAweDUwMDAwMDAwLCAweDA0MDI2ODc2LAorCTB4MDQwMDYwMDQsIDB4NTk5YzAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMjA4ZjUsCisJMHg1OTk4MDAyOSwgMHg4MDAyNWQ0MCwgMHgwNDAwMDAwYSwgMHgwNDAyZDAwYiwKKwkweDU5OTgwMDI2LCAweDgwMDAwMDQwLCAweDQ4MDMzMDI2LCAweDU5MmMwMDAwLAorCTB4NDkyZmIxMDcsIDB4NDgwMzMwMjksIDB4MDQwMjAwMDIsIDB4NDgwMzMwMjgsCisJMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwKKwkweDAwMDE4NzgwLCAweDA0MDIwMDU1LCAweDQyMDAwMDAwLCAweDAwMTBiNjU0LAorCTB4MDIwMWY4MDAsIDB4MDAxMGE4NmUsIDB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsCisJMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg1OTljYjgxNywKKwkweDU5OTQwMDE5LCAweDgwMDAwNTQwLCAweDA0MDAyMDIzLCAweDA0MDAwMDBlLAorCTB4NTk5ODAwMjIsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMDUsIDB4MDQwMDAwMWUsCisJMHg1OWE4MDA2OSwgMHg4MTY0MDU4MCwgMHgwNDAyMDAxYiwgMHg4YzVjYmQwOCwKKwkweDA0MDAwMDA3LCAweDU5YTgwMDZhLCAweDU5YTgwODY2LCAweDgwMDQwNTgwLAorCTB4MDQwMjAwMTUsIDB4OGM1Y2JkMDgsIDB4MDQwMjAwMmIsIDB4NTlkODA5MGIsCisJMHg1OWQ4MDEwYSwgMHg4MDA0MDU4MCwgMHgwNDAwMDAwZCwgMHgwNDAwNjAwZSwKKwkweDRhMDNjMDExLCAweDgwNDAwMDEyLCAweDRhMDNjMDIwLCAweDAwMDA4MDQwLAorCTB4NTllMDAwMTcsIDB4OGMwMDA1MDgsIDB4MDQwMDAwMDMsIDB4NGEwM2MwMTcsCisJMHgwMDAwMDAwMiwgMHg0MjAzZTAwMCwgMHgzMDAwMDAwMSwgMHg0YTAzMjgxOSwKKwkweGZmZmYwMDAwLCAweDA0MDBlODc5LCAweDA0MDA2MDAzLCAweDhjNWNiZDA4LAorCTB4MDQwMjA4OGUsIDB4NTk5ODAwMjksIDB4ODAwMjVkNDAsIDB4MDQwMjAwMDMsCisJMHg1YzAzZTAwMCwgMHgxYzAxZjAwMCwgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwKKwkweDAwMDE4NzgwLCAweDA0MDIwMDE5LCAweDAyMDJkMDAwLCAweDAwMTA0YzA2LAorCTB4NTk5ODA4MjYsIDB4NTkyYzAwMDAsIDB4ODAwNDA4NDAsIDB4NDgwNzMwMjYsCisJMHg0OTJmYjEwNywgMHg0ODAzMzAyOSwgMHgwNDAyMDdmMiwgMHg0ODAzMzAyOCwKKwkweDA0MDFmN2YwLCAweDU5ZTAwMDBmLCAweDU5ZTAwODBmLCAweDgwMDQwNTgwLAorCTB4MDQwMjA3ZmQsIDB4NTllMDAwMTAsIDB4NTllMDEwMTAsIDB4ODAwODE1ODAsCisJMHgwNDAyMDdmZCwgMHg0MDA2NTAwMCwgMHg4MDA0MTU4MCwgMHgwNDAwMDdjYywKKwkweDA0MDA2N2UxLCAweDA0MDFmN2NmLCAweDQ4MDNjODU3LCAweDQ4NWZjODU3LAorCTB4OGMwMDA1MGUsIDB4MDIwMjA4MDAsIDB4MDAxMDA2MGQsIDB4NDIwM2UwMDAsCisJMHg1MDAwMDAwMCwgMHg0MjAwYjgwMCwgMHgwMDAwODAwNCwgMHgwMjAxZjAwMCwKKwkweDAwMTAwNjFhLCAweDU5OTgwMDJiLCAweDhjMDAwNTAwLCAweDA0MDIwMDM5LAorCTB4MDQwMGUwMDYsIDB4NTlkODAxMDUsIDB4ODIwMDA1MDAsIDB4MDAwMTg3ODAsCisJMHgwNDAyMDdlZSwgMHgxYzAxZjAwMCwgMHg1OWRhNTkwOCwgMHg4MzVjMGM4MCwKKwkweDAwMDAwMDIwLCAweDA0MDAxMDAzLCAweDA0MDBiMDI4LCAweDA0MDBmMDJhLAorCTB4NDk2YTU4MDAsIDB4NDEyZWQwMDAsIDB4ODE1ZWI4MDAsIDB4NTljODAwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwgMHg0ODAzOTAwMCwgMHgwNDAwZTdmMywKKwkweDU5ZDgwMTBhLCAweDU5ZDgwOTBhLCAweDgwMDQwNTgwLCAweDA0MDIwN2ZkLAorCTB4ODAwNDA4ZTAsIDB4NTk5YzEwMTcsIDB4OGMwODE1MDgsIDB4MDQwMjAwMjEsCisJMHg4MjA0MGQ0MCwgMHgwMDAwMDAxMywgMHg0ODA3YzAxMSwgMHg1OWUwMDAxNywKKwkweDhjMDAwNTA4LCAweDA0MDAwMDBhLCAweDRhMDNjMDE3LCAweDAwMDAwMDAzLAorCTB4ODIwNDA1MDAsIDB4MDAwMDAwZmYsIDB4ODIwMDA1ODAsIDB4MDAwMDAwMWQsCisJMHgwNDAyMDAwMywgMHg0YTAzYzAxNywgMHgwMDAwMDAwZCwgMHg0MjAzZTAwMCwKKwkweDMwMDAwMDAxLCAweDU5ZDgwMTA1LCAweDgyMDAwNTAwLCAweDAwMDE4NzgwLAorCTB4MDQwMjA3YzIsIDB4MWMwMWYwMDAsIDB4NDkyZmIwMDcsIDB4MDQwMGU3ZDMsCisJMHgwNDAxZjdlMCwgMHg0OTJmYTgwNywgMHgwNDAwZTdkMCwgMHgwNDAxZjdkZCwKKwkweDg0MDAwNTAwLCAweDQ4MDMzMDJiLCAweDA0MDBlN2NjLCAweDA0MDFmN2Q5LAorCTB4NTllMDAwMGYsIDB4NTllMDEwMGYsIDB4ODAwODE1ODAsIDB4MDQwMjA3ZmQsCisJMHg4MTI4MTU4MCwgMHgwNDAwMDdkYiwgMHg0MDAyNTAwMCwgMHg4MjA0MGQ0MCwKKwkweDAwMDAwMDFkLCAweDA0MDFmN2Q5LCAweDU5ZGE1OTA4LCAweDQ5NmE1ODAwLAorCTB4NDEyZWQwMDAsIDB4ODE1ZWI4MDAsIDB4MDQwMGU3ZmMsIDB4NTljODAwMDAsCisJMHg4MjAwMDU0MCwgMHgwMDAwMTIwMCwgMHg0ODAzOTAwMCwgMHg1OWQ4MDkwYiwKKwkweDU5OTgwMDI0LCAweDQ4MDczMDI0LCAweDgwMDQwNDgwLCAweDA0MDIwMDA0LAorCTB4NTk5NDAwMTksIDB4ODAwMDA1NDAsIDB4MDQwMjIwMDMsIDB4NTk5ODA4MjMsCisJMHg0ODA3MjgxOSwgMHg1OWQ4MDEwNSwgMHg4MjAwMDUwMCwgMHgwMDAxODc4MCwKKwkweDA0MDIwNzk2LCAweDFjMDFmMDAwLCAweDU5OTgxMDI1LCAweDU5ZTAwMDEwLAorCTB4NTllMDA4MTAsIDB4ODAwNDFkODAsIDB4MDQwMjA3ZmQsIDB4ODAwODA1ODAsCisJMHgwNDAwMDAxMSwgMHg0ODA3MzAyNSwgMHg1OWUwMDAwZiwgMHg1OWUwMTAwZiwKKwkweDgwMDgxZDgwLCAweDA0MDIwN2ZkLCAweDgxMjgwNTgwLCAweDA0MDAwMDA2LAorCTB4NDAwYTUwMDAsIDB4NDAwODAwMDAsIDB4ODAwNDA1ODAsIDB4MDQwMjA2N2YsCisJMHgxYzAxZjAwMCwgMHg1OTk0MDAxOSwgMHg4MDAwMDU0MCwgMHgwNDAyMjdmYSwKKwkweDFjMDFmMDAwLCAweDU5ZTAwMDBmLCAweDU5ZTAxMDBmLCAweDgwMDgxZDgwLAorCTB4MDQwMjA3ZmQsIDB4ODEyODA1ODAsIDB4MDQwMDA3ZjYsIDB4NDAwYTUwMDAsCisJMHg1OTk0MDAxOSwgMHg4MDAwMDU0MCwgMHgwNDAwMjdlZiwgMHgxYzAxZjAwMCwKKwkweDU5ZTAwMDBmLCAweDU5ZTAxMDBmLCAweDgwMDgwZDgwLCAweDA0MDIwN2ZkLAorCTB4ODEyODA1ODAsIDB4MDQwMjAwMDIsIDB4MWMwMWYwMDAsIDB4NDAwYTUwMDAsCisJMHg5MDA4MTFjMCwgMHg4MjA4MTU0MCwgMHgwMDAwMDAxYywgMHg0ODBiYzAxMSwKKwkweDU5ZTAwMDE3LCAweDhjMDAwNTA4LCAweDA0MDAwMDAzLCAweDRhMDNjMDE3LAorCTB4MDAwMDAwMGMsIDB4NDIwM2UwMDAsIDB4MzAwMDAwMDEsIDB4MWMwMWYwMDAsCisJMHg0MTcwMDAwMCwgMHgwYzAxZjAwMSwgMHgwMDEwNTBmMCwgMHgwMDAyMDUyZiwKKwkweDAwMTA1MGYwLCAweDAwMTA1MGYxLCAweDAwMTA1MGVlLCAweDAwMTA1MGVlLAorCTB4MDAxMDUwZWUsIDB4MDAxMDUwZWUsIDB4MDAxMDU1OTQsIDB4MDQwMTAwMzcsCisJMHg1OTk4MDAwNiwgMHg4MDAwMDU0MCwgMHgwNDAyMDAzYywgMHgwNDAyYzAxYywKKwkweDQyMDJmODAwLCAweDAwMDAwMDEwLCAweDRkZjAwMDAwLCAweDQyMDNlMDAwLAorCTB4NTAwMDAwMDAsIDB4NDlkYjMwMDUsIDB4NTlkYTU4MDgsIDB4NTkyYzAyMDQsCisJMHg0OTdhNTgwMCwgMHg0OTdhNTgwMSwgMHg4MjAwMDUwMCwgMHgwMDAwMDBmZiwKKwkweDgyMDAwYzgwLCAweDAwMDAwMDc5LCAweDA0MDIxMDM2LCAweDBjMDFmODM5LAorCTB4NWMwM2UwMDAsIDB4ODE3ZWY4NDAsIDB4MDQwMDAwMDksIDB4ODM2YzA1ODAsCisJMHgwMDAwMDAwMywgMHgwNDAyMDAwNiwgMHg4MzcwMDU4MCwgMHgwMDAwMDAwMSwKKwkweDA0MDIwMDEwLCAweDA0MDEwMDFiLCAweDA0MDBjN2U4LCAweDA0MDBmOTRiLAorCTB4MDQwMGIxMzUsIDB4NTlkNDAwMDUsIDB4ODIwMDA1MDAsIDB4NDMwMTg3ODAsCisJMHgwMjAyMDAwMCwgMHgwMDEwNTUyMywgMHg1OWQ4MDAwNSwgMHg4MjAwMDUwMCwKKwkweDQzMDE4NzgwLCAweDAyMDIwMDAwLCAweDAwMTA1NTJhLCAweDFjMDFmMDAwLAorCTB4ODM3MDA1ODAsIDB4MDAwMDAwMDMsIDB4MDIwMDA4MDAsIDB4MDAxMDUwZjEsCisJMHg4MzcwMDU4MCwgMHgwMDAwMDAwMSwgMHgwNDAyMDdlZCwgMHgwNDAxMDAwNSwKKwkweDA0MDBjN2QyLCAweDA0MDFmN2VhLCAweDQyMDJmODAwLCAweDAwMDAwMDEwLAorCTB4NGRmMDAwMDAsIDB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsIDB4NDlkNzMwMDUsCisJMHg1OWQ2NTgwOCwgMHgwNDAxZjdjZSwgMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwKKwkweDUwMDAwMDAwLCAweDQwMDI1ODAwLCAweDU5MmMwMjA0LCAweDQ5N2IzMDA1LAorCTB4NDk3YjMwMDYsIDB4NDIwMmY4MDAsIDB4MDAwMDAwMTAsIDB4MDQwMWY3YzcsCisJMHgwMjAxZjgwMCwgMHgwMDEwNTE2MSwgMHg1YzAzZTAwMCwgMHgwNDAxZjdkNCwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUyMDcsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE3MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MjMxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAwMjA2MjMsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTM5OCwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMDIwNWY1LCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxOTksIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1NGI3LAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTUwMiwgMHgwMDEwNTE2MSwgMHgwMDEwNTE4YiwKKwkweDAwMTA1MTYxLCAweDAwMTA1NDdiLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTQ0OSwgMHgwMDEwNTE2MSwgMHgwMDEwNTQ0OSwKKwkweDAwMTA1NTU2LCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTQwOSwgMHgwMDEwNTUzOSwKKwkweDAwMTA1MTYxLCAweDAwMTA1NTQ5LCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLCAweDAwMTA1MTYxLAorCTB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsIDB4MDAxMDUxNjEsCisJMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwgMHgwMDEwNTE2MSwKKwkweDAwMTA1MTYxLCAweDU5MmMwMjA0LCAweDgwMDAwMTEwLCAweDgwMDAwMDQwLAorCTB4MDQwMDAwMGIsIDB4MDIwMDEwMDAsIDB4MDAxMDUxNjksIDB4NDgwMzMwMDIsCisJMHg0OTJmMzAwMywgMHg0OTJmMzAwNCwgMHg0YTAzMzAwOCwgMHgwMDAyMDYwMywKKwkweDQyMDJlMDAwLCAweDAwMDAwMDAzLCAweDFjMDFmMDAwLCAweDU5MmMwNDA2LAorCTB4ODIwMDBjODAsIDB4MDAwMDE5OWEsIDB4MDIwMjEwMDAsIDB4MDAxMDUxNzksCisJMHg1OWE4MDAyMSwgMHg4MDAwMDU0MCwgMHgwMjAyMDAwMCwgMHgwMDEwNTFhNywKKwkweDU5MmU4YTA2LCAweDgzNDQwYzgwLCAweDAwMDAwN2YwLCAweDAyMDIxMDAwLAorCTB4MDAxMDUxNzksIDB4ODM0NDA0MDAsIDB4MDAxMGFhMDAsIDB4NTAwMDAwMDAsCisJMHg4MDAyNmQ0MCwgMHgwMjAwMDAwMCwgMHgwMDEwNTFiYiwgMHg1OTM0MDAwMiwKKwkweDU5MmMwODEwLCAweDgwMDQwNTgwLCAweDgyMDAwNTAwLCAweDAwZmZmZmZmLAorCTB4MDIwMjAwMDAsIDB4MDAxMDUxNzksIDB4MDIwMWY4MDAsIDB4MDAwMjAxZWUsCisJMHgwMjAyMDAwMCwgMHgwMDEwNTFiZSwgMHgxYzAxZjAwMCwgMHg1OTJjMDIwNCwKKwkweDgwMDAwMTEwLCAweDAyMDAwMDAwLCAweDAwMTA1MTY5LCAweDgwMDAwMDQwLAogCTB4MDQwMjAwMGIsIDB4NTkyYzA0MGEsIDB4OGMwMDA1MDQsIDB4MDQwMDAwMTAsCiAJMHg1OTJjMDIwNywgMHg4MjAwMGM4MCwgMHgwMDAwMTAwMSwgMHgwMjAyMTAwMCwKLQkweDAwMTA1NGE5LCAweDAyMDFmMDAwLCAweDAwMTA1ODhhLCAweDQ4MDMzMDAyLAotCTB4NDkyZjMwMDMsIDB4NDkyZjMwMDQsIDB4NGEwMzMwMDgsIDB4MDAwMjA1MDcsCisJMHgwMDEwNTE3OSwgMHgwMjAxZjAwMCwgMHgwMDEwNTU2ZSwgMHg0ODAzMzAwMiwKKwkweDQ5MmYzMDAzLCAweDQ5MmYzMDA0LCAweDRhMDMzMDA4LCAweDAwMDIwNjNiLAogCTB4NDIwMmUwMDAsIDB4MDAwMDAwMDMsIDB4MWMwMWYwMDAsIDB4NTkyYzA0MDYsCi0JMHg4MjAwMGM4MCwgMHgwMDAwMTk5YSwgMHgwMjAyMTAwMCwgMHgwMDEwNTRhOSwKLQkweDU5MmU4YTA2LCAweDQxN2E3ODAwLCAweDA0MDFmZDM3LCAweDAyMDIwMDAwLAotCTB4MDAxMDU2NTgsIDB4NTkzNDAwMDIsIDB4NTkyYzA4MDgsIDB4ODAwNDA1ODAsCi0JMHg4MjAwMDUwMCwgMHgwMGZmZmZmZiwgMHgwMjAyMDAwMCwgMHgwMDEwNTRhOSwKKwkweDgyMDAwYzgwLCAweDAwMDAxOTlhLCAweDAyMDIxMDAwLCAweDAwMTA1MTc5LAorCTB4NTkyZThhMDYsIDB4NDE3YTc4MDAsIDB4MDQwMWZjMjUsIDB4MDIwMjAwMDAsCisJMHgwMDEwNTMzYywgMHg1OTM0MDAwMiwgMHg1OTJjMDgwOCwgMHg4MDA0MDU4MCwKKwkweDgyMDAwNTAwLCAweDAwZmZmZmZmLCAweDAyMDIwMDAwLCAweDAwMTA1MTc5LAogCTB4NDk3YTU4MDgsIDB4NTkyZTYwMDksIDB4ODMzMDA1ODAsIDB4ZmZmZmZmZmYsCi0JMHgwMjAwMDAwMCwgMHgwMDEwNTYxOCwgMHg4MzMwMDQ4MCwgMHgwMDEwZDFjMCwKLQkweDAyMDAxMDAwLCAweDAwMTA1Njc1LCAweDU5YTgwMDBiLCAweDgxMzAwNDgwLAotCTB4MDIwMjEwMDAsIDB4MDAxMDU2NzUsIDB4NTkyYzI0MGEsIDB4NDkzNjYwMDksCi0JMHg4YzEwMjUxYywgMHgwMjAyMDAwMCwgMHgwMDEwNTYwNiwgMHg1OWE4MDA2OCwKLQkweDhjMDAwNTEwLCAweDAyMDIwMDAwLCAweDAwMTA1NjhlLCAweDU5YTgwODIxLAotCTB4ODAwNDA5YzAsIDB4MDIwMjAwMDAsIDB4MDAxMDU1ZWMsIDB4NTlhODA4MDUsCi0JMHg4YzA0MGQwNCwgMHgwMjAyMDAwMCwgMHgwMDEwNTY3ZiwgMHg1OTM0MDIwMCwKLQkweDhjMDAwNTE4LCAweDAyMDIwMDAwLCAweDAwMTA1NjcwLCAweDU5MzAwYzA2LAotCTB4ODIwNDA1ODAsIDB4MDAwMDAwMDYsIDB4MDIwMjAwMDAsIDB4MDAxMDU2MTAsCi0JMHg1OTMwMDQxNCwgMHg4YzAwMDUxNiwgMHgwMjAyMDAwMCwgMHgwMDEwNTY3YSwKLQkweDhjMTAyNTA4LCAweDAyMDIwMDAwLCAweDAwMTBhNWI4LCAweDU5MzAwODA4LAorCTB4MDIwMDAwMDAsIDB4MDAxMDUyZmMsIDB4ODMzMDA0ODAsIDB4MDAxMGNmYzAsCisJMHgwMjAwMTAwMCwgMHgwMDEwNTM1OSwgMHg1OWE4MDAwYiwgMHg4MTMwMDQ4MCwKKwkweDAyMDIxMDAwLCAweDAwMTA1MzU5LCAweDU5MmMyNDBhLCAweDQ5MzY2MDA5LAorCTB4OGMxMDI1MWMsIDB4MDIwMjAwMDAsIDB4MDAxMDUyZWEsIDB4NTlhODAwNjgsCisJMHg4YzAwMDUxMCwgMHgwMjAyMDAwMCwgMHgwMDEwNTM3MiwgMHg1OWE4MDgyMSwKKwkweDgwMDQwOWMwLCAweDAyMDIwMDAwLCAweDAwMTA1MmQwLCAweDU5YTgwODA1LAorCTB4OGMwNDBkMDQsIDB4MDIwMjAwMDAsIDB4MDAxMDUzNjMsIDB4NTkzNDAyMDAsCisJMHg4YzAwMDUxOCwgMHgwMjAyMDAwMCwgMHgwMDEwNTM1NCwgMHg1OTMwMGMwNiwKKwkweDgyMDQwNTgwLCAweDAwMDAwMDA2LCAweDAyMDIwMDAwLCAweDAwMTA1MmY0LAorCTB4NTkzMDA0MTQsIDB4OGMwMDA1MTYsIDB4MDIwMjAwMDAsIDB4MDAxMDUzNWUsCisJMHg4YzEwMjUwOCwgMHgwMjAyMDAwMCwgMHgwMDEwYTNkNywgMHg1OTMwMDgwOCwKIAkweDRhMDI1YTA2LCAweDAwMDAwMDAwLCAweDgwMDQwOWMwLCAweDAyMDIwMDAwLAotCTB4MDAxMDU1ZTcsIDB4NTkyYzBhMGMsIDB4NDgwNjYyMDIsIDB4NDkyZTYwMDgsCi0JMHgwNDAxZjE0ZCwgMHg0ZGYwMDAwMCwgMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwKKwkweDAwMTA1MmNiLCAweDU5MmMwYTBjLCAweDQ4MDY2MjAyLCAweDQ5MmU2MDA4LAorCTB4MDQwMWYxNGEsIDB4NGRmMDAwMDAsIDB4NDIwM2UwMDAsIDB4NTAwMDAwMDAsCiAJMHgwNDAyYjAwYiwgMHg4MzVjMDQ4MCwgMHgwMDAwMDAyMCwgMHgwNDAwMTAwZCwKIAkweDgxNWViODQwLCAweDQxNmE1ODAwLCAweDU5MmVkMDAwLCAweDQ5MmZiMDA3LAogCTB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsIDB4MDQwMGI3ZjcsIDB4NTlkODAwMDUsCi0JMHg4MjAwMDUwMCwgMHg0MzAxODc4MCwgMHgwMjAyMDAwMCwgMHgwMDEwNTg0NiwKKwkweDgyMDAwNTAwLCAweDQzMDE4NzgwLCAweDAyMDIwMDAwLCAweDAwMTA1NTJhLAogCTB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsIDB4NGRmMDAwMDAsIDB4NDIwM2UwMDAsCiAJMHg1MDAwMDAwMCwgMHgwNDAyZjAwYiwgMHg4MzVjMDQ4MCwgMHgwMDAwMDAyMCwKIAkweDA0MDAxMDBkLCAweDgxNWViODQwLCAweDQxNmE1ODAwLCAweDU5MmVkMDAwLAogCTB4NDkyZmE4MDcsIDB4NDk3YTU4MDAsIDB4NDk3YTU4MDEsIDB4MDQwMGY3ZjcsCiAJMHg1OWQ0MDAwNSwgMHg4MjAwMDUwMCwgMHg0MzAxODc4MCwgMHgwMjAyMDAwMCwKLQkweDAwMTA1ODNmLCAweDVjMDNlMDAwLCAweDFjMDFmMDAwLCAweDRkZjAwMDAwLAorCTB4MDAxMDU1MjMsIDB4NWMwM2UwMDAsIDB4MWMwMWYwMDAsIDB4NGRmMDAwMDAsCiAJMHg0MjAzZTAwMCwgMHg1MDAwMDAwMCwgMHg1OTk0MDAyNCwgMHg4MDAwMDU0MCwKLQkweDA0MDAwMTEyLCAweDRjMDAwMDAwLCAweDQyMDAwMDAwLCAweDAwMDAxMDAwLAorCTB4MDQwMDAxMGYsIDB4NGMwMDAwMDAsIDB4NDIwMDAwMDAsIDB4MDAwMDEwMDAsCiAJMHg1MDAwMDAwMCwgMHg4MjAwMDQ4MCwgMHgyNDMyMDAwMSwgMHgwNDAyMDAxNSwKIAkweDQyMDAwODAwLCAweDAwMDAwMDY0LCAweDgwMDQwODQwLCAweDA0MDAwMDA3LAogCTB4NGEwMzAwMDAsIDB4MDAwMDAwMDEsIDB4NDAwMDAwMDAsIDB4NTk4MDAwMDAsCkBAIC0xMTM5Nyw3ICsxMTM1Niw3IEBACiAJMHg0ODNmYzg1NywgMHg1OWU0MDg1MiwgMHg1OWE4MDAyNSwgMHg4MDA0MDU4MCwKIAkweDA0MDAwMDA0LCAweDQ4MGJjODU3LCAweDU5ZTQwMDUyLCAweDQ4MDM1MDI1LAogCTB4NTk5NDAwMjYsIDB4ODAzYzA0MDAsIDB4NDgwMzI4MjYsIDB4MDIwMWY4MDAsCi0JMHgwMDEwNjAyMSwgMHg1OTk0MDAwMCwgMHg4MjAwMDU4MCwgMHgwMDAwMDAwMCwKKwkweDAwMTA1ZDVhLCAweDU5OTQwMDAwLCAweDgyMDAwNTgwLCAweDAwMDAwMDAwLAogCTB4MDQwMjAwMDYsIDB4NTk5NDAwMjYsIDB4NDgwMzI4MjcsIDB4NDk3YjI4MjYsCiAJMHg0YTAzMjgwMCwgMHgwMDAwMDAwMSwgMHg0YzBjMDAwMCwgMHg1OTk0MDAwNywKIAkweDgwMDAwZDQwLCAweDA0MDAwMDFkLCAweDU5OTQxMDA2LCAweDU5OTQwMDI1LApAQCAtMTE0MTgsNTQgKzExMzc3LDU0IEBACiAJMHgwMDAwMDAwYSwgMHg0ODAwNzgwMCwgMHgwNDAwMjdmYSwgMHg4MjA0MDUwMCwKIAkweDAwMDAwMDdmLCAweDA0MDFmN2U4LCAweDU4M2MwMDAyLCAweDRjM2MwMDAwLAogCTB4MDgwMWY4MDAsIDB4NWMwMDc4MDAsIDB4MDQwMWY3ZTMsIDB4NWMwMjMwMDAsCi0JMHg1OTk0MDAxOSwgMHg4MDAwMTU0MCwgMHgwNDAwMDAwOCwgMHgwNDAwMjAwNywKLQkweDU5OTQwMDI1LCAweDgwMDgwNDgwLCAweDQ5N2IyODE5LCAweDA0MDAxMDAzLAotCTB4MDQwMDAwMDIsIDB4NDgwMzI4MTksIDB4NTk5NDAwMDQsIDB4ODAwMDBkNDAsCi0JMHgwNDAwMDAyYSwgMHg0YzA0MDAwMCwgMHg1OTk0MDAxYywgMHg4MDAwMGQ0MCwKLQkweDA0MDAwMDEzLCAweDU5OTQxMDFiLCAweDU5OTQwMDI1LCAweDgwMDgwNDgwLAotCTB4MDQwMDEwMDUsIDB4MDQwMDAwMDQsIDB4NDgwMzI4MWIsIDB4ODAwMDAwNDAsCi0JMHgwNDAyMTAwYiwgMHg4MDA0MDg0MCwgMHg0ODA3MjgxYywgMHgwNDAyMDAwNCwKLQkweDU5OTQwMDFkLCAweDA4MDFmODAwLCAweDA0MDFmMDA1LCAweDgyMDAwNDAwLAotCTB4MDAwMDAwMGEsIDB4NDgwMzI4MWIsIDB4MDQwMDI3ZjcsIDB4NWMwMDA4MDAsCi0JMHg1OTk0MTAwMywgMHg1OTk0MDAyNSwgMHg4MDA4MDQ4MCwgMHgwNDAwMTAwNSwKLQkweDA0MDAwMDA0LCAweDQ4MDMyODAzLCAweDgwMDAwMDQwLCAweDA0MDIxMDBiLAotCTB4ODAwNDA4NDAsIDB4NDgwNzI4MDQsIDB4MDQwMjAwMDQsIDB4NTk5NDAwMDUsCisJMHg1OTk0MDAxOSwgMHg4MDAwMTU0MCwgMHgwNDAwMDAwNywgMHgwNDAwMjAwNiwKKwkweDU5OTQwMDI1LCAweDgwMDgwNDgwLCAweDA0MDIxMDAyLCAweDgwMDAwNTgwLAorCTB4NDgwMzI4MTksIDB4NTk5NDAwMWMsIDB4ODAwMDBkNDAsIDB4MDQwMDAwMTMsCisJMHg1OTk0MTAxYiwgMHg1OTk0MDAyNSwgMHg4MDA4MDQ4MCwgMHgwNDAwMTAwNSwKKwkweDA0MDAwMDA0LCAweDQ4MDMyODFiLCAweDgwMDAwMDQwLCAweDA0MDIxMDBiLAorCTB4ODAwNDA4NDAsIDB4NDgwNzI4MWMsIDB4MDQwMjAwMDQsIDB4NTk5NDAwMWQsCiAJMHgwODAxZjgwMCwgMHgwNDAxZjAwNSwgMHg4MjAwMDQwMCwgMHgwMDAwMDAwYSwKLQkweDQ4MDMyODAzLCAweDA0MDAyN2Y3LCAweDU5OTQwMDFmLCAweDgwMDAwZDQwLAotCTB4MDQwMDAwMTMsIDB4NTk5NDEwMWUsIDB4NTk5NDAwMjUsIDB4ODAwODA0ODAsCi0JMHgwNDAwMTAwNSwgMHgwNDAwMDAwNCwgMHg0ODAzMjgxZSwgMHg4MDAwMDA0MCwKLQkweDA0MDIxMDBiLCAweDgwMDQwODQwLCAweDQ4MDcyODFmLCAweDA0MDIwMDA0LAotCTB4NTk5NDAwMjAsIDB4MDgwMWY4MDAsIDB4MDQwMWYwMDUsIDB4ODIwMDA0MDAsCi0JMHgwMDAwMDAwMSwgMHg0ODAzMjgxZSwgMHgwNDAwMjdmNywgMHg1OTk0MDAyMiwKLQkweDgwMDAwZDQwLCAweDA0MDAwMDEzLCAweDU5OTQxMDIxLCAweDU5OTQwMDI1LAotCTB4ODAwODA0ODAsIDB4MDQwMDEwMDUsIDB4MDQwMDAwMDQsIDB4NDgwMzI4MjEsCi0JMHg4MDAwMDA0MCwgMHgwNDAyMTAwYiwgMHg4MDA0MDg0MCwgMHg0ODA3MjgyMiwKLQkweDA0MDIwMDA0LCAweDU5OTQwMDIzLCAweDA4MDFmODAwLCAweDA0MDFmMDA1LAotCTB4ODIwMDA0MDAsIDB4MDAwMDAwMGEsIDB4NDgwMzI4MjEsIDB4MDQwMDI3ZjcsCi0JMHg1OTk0MDgyNCwgMHg1OTk0MDAyNSwgMHg4MDA0MDQ4MCwgMHgwMjAwMTgwMCwKLQkweDAwMTAwNWQ4LCAweDQ4MDMyODI0LCAweDU5OTQwMDAwLCAweDBjMDFmMDAxLAotCTB4MDAxMDVmYjUsIDB4MDAxMDVmYjcsIDB4MDAxMDVmZGQsIDB4NTk5NDAwMjQsCi0JMHg4MDAwMDAwMCwgMHg0ODAzMjgyNCwgMHg0MjAzZTAwMCwgMHg3MDAwMDAwMCwKLQkweDFjMDFmMDAwLCAweDU5MmMwNDA2LCAweDgwMDAwMGMyLCAweDgwMDAwOGM0LAotCTB4ODAwNDBjMDAsIDB4NTkyYzA0MGEsIDB4NDgwNjYyMDYsIDB4ODIwMDBkMDAsCi0JMHgwMDAwMDAwMywgMHgwMjAwMDAwMCwgMHgwMDEwNjE1ZSwgMHg4YzAwMDUwMCwKLQkweDA0MDIwMDI5LCAweDhjMDAwNTFlLCAweDAyMDAwMDAwLCAweDAwMTA2MTM5LAotCTB4ODIwMDBkMDAsIDB4MDAwMDAwYzAsIDB4MDIwMjAwMDAsIDB4MDAxMDYxMmYsCi0JMHg4MjAwMGQwMCwgMHgwMDAwMjAyMCwgMHgwMjAyMDAwMCwgMHgwMDEwNjEyYywKLQkweDgxM2U3OWMwLCAweDAyMDIwMDAwLCAweDAwMTA2MTJjLCAweDU5MmMwYzBjLAotCTB4ODAwNDA5YzAsIDB4MDIwMjAwMDAsIDB4MDAxMDYxMmMsIDB4NTkzMDBhMDMsCi0JMHg4MjA0MGQ4MCwgMHgwMDAwMDAwNywgMHgwMjAyMDAwMCwgMHgwMDEwNjEyYywKKwkweDQ4MDMyODFiLCAweDA0MDAyN2Y3LCAweDU5OTQwMDA0LCAweDgwMDAwZDQwLAorCTB4MDQwMDAwMTMsIDB4NTk5NDEwMDMsIDB4NTk5NDAwMjUsIDB4ODAwODA0ODAsCisJMHgwNDAwMTAwNSwgMHgwNDAwMDAwNCwgMHg0ODAzMjgwMywgMHg4MDAwMDA0MCwKKwkweDA0MDIxMDBiLCAweDgwMDQwODQwLCAweDQ4MDcyODA0LCAweDA0MDIwMDA0LAorCTB4NTk5NDAwMDUsIDB4MDgwMWY4MDAsIDB4MDQwMWYwMDUsIDB4ODIwMDA0MDAsCisJMHgwMDAwMDAwYSwgMHg0ODAzMjgwMywgMHgwNDAwMjdmNywgMHg1OTk0MDAxZiwKKwkweDgwMDAwZDQwLCAweDA0MDAwMDEzLCAweDU5OTQxMDFlLCAweDU5OTQwMDI1LAorCTB4ODAwODA0ODAsIDB4MDQwMDEwMDUsIDB4MDQwMDAwMDQsIDB4NDgwMzI4MWUsCisJMHg4MDAwMDA0MCwgMHgwNDAyMTAwYiwgMHg4MDA0MDg0MCwgMHg0ODA3MjgxZiwKKwkweDA0MDIwMDA0LCAweDU5OTQwMDIwLCAweDA4MDFmODAwLCAweDA0MDFmMDA1LAorCTB4ODIwMDA0MDAsIDB4MDAwMDAwMDEsIDB4NDgwMzI4MWUsIDB4MDQwMDI3ZjcsCisJMHg1OTk0MDAyMiwgMHg4MDAwMGQ0MCwgMHgwNDAwMDAxMywgMHg1OTk0MTAyMSwKKwkweDU5OTQwMDI1LCAweDgwMDgwNDgwLCAweDA0MDAxMDA1LCAweDA0MDAwMDA0LAorCTB4NDgwMzI4MjEsIDB4ODAwMDAwNDAsIDB4MDQwMjEwMGIsIDB4ODAwNDA4NDAsCisJMHg0ODA3MjgyMiwgMHgwNDAyMDAwNCwgMHg1OTk0MDAyMywgMHgwODAxZjgwMCwKKwkweDA0MDFmMDA1LCAweDgyMDAwNDAwLCAweDAwMDAwMDBhLCAweDQ4MDMyODIxLAorCTB4MDQwMDI3ZjcsIDB4NTk5NDA4MjQsIDB4NTk5NDAwMjUsIDB4ODAwNDA0ODAsCisJMHgwMjAwMTgwMCwgMHgwMDEwMDYxNSwgMHg0ODAzMjgyNCwgMHg1OTk0MDAwMCwKKwkweDBjMDFmMDAxLCAweDAwMTA1Y2VlLCAweDAwMTA1Y2YwLCAweDAwMTA1ZDE2LAorCTB4NTk5NDAwMjQsIDB4ODAwMDAwMDAsIDB4NDgwMzI4MjQsIDB4NDIwM2UwMDAsCisJMHg3MDAwMDAwMCwgMHgxYzAxZjAwMCwgMHg1OTJjMDQwNiwgMHg4MDAwMDBjMiwKKwkweDgwMDAwOGM0LCAweDgwMDQwYzAwLCAweDU5MmMwNDBhLCAweDQ4MDY2MjA2LAorCTB4ODIwMDBkMDAsIDB4MDAwMDAwMDMsIDB4MDIwMDAwMDAsIDB4MDAxMDVlOTcsCisJMHg4YzAwMDUwMCwgMHgwNDAyMDAyYywgMHg1OWE4MDg3MiwgMHg4MDA0MDg0MCwKKwkweDA0MDIwN2ZmLCAweDhjMDAwNTFlLCAweDAyMDAwMDAwLCAweDAwMTA1ZTcyLAorCTB4ODIwMDBkMDAsIDB4MDAwMDAwYzAsIDB4MDIwMjAwMDAsIDB4MDAxMDVlNjgsCisJMHg4MjAwMGQwMCwgMHgwMDAwMjAyMCwgMHgwMjAyMDAwMCwgMHgwMDEwNWU2NSwKKwkweDgxM2U3OWMwLCAweDAyMDIwMDAwLCAweDAwMTA1ZTY1LCAweDU5MmMwYzBjLAorCTB4ODAwNDA5YzAsIDB4MDIwMjAwMDAsIDB4MDAxMDVlNjUsIDB4NTkzMDBhMDMsCisJMHg4MjA0MGQ4MCwgMHgwMDAwMDAwNywgMHgwMjAyMDAwMCwgMHgwMDEwNWU2NSwKIAkweDRhMDI2MjAzLCAweDAwMDAwMDAzLCAweDRhMDI2NDAzLCAweDAwMDAwMDQzLAotCTB4MDIwMWY4MDAsIDB4MDAwMjAwYzksIDB4ODIwODBkNDAsIDB4ODAwMDM0NjUsCisJMHgwMjAxZjgwMCwgMHgwMDAyMDBjYSwgMHg4MjA4MGQ0MCwgMHg4MDAwMzQ2NSwKIAkweDQ4MDY2MDA0LCAweDQ5N2E2MDAwLCAweDU5YmMwMGVhLCAweDhjMDAwNTE2LAogCTB4MDQwMjA3ZmUsIDB4ODMzMDA0MDAsIDB4YTAwMDAwMDAsIDB4NDgwMzc4ZTEsCi0JMHgxYzAxZjAwMCwgMHg4YzAwMDUwMiwgMHgwMjAyMDAwMCwgMHgwMDEwNjE4MSwKKwkweDFjMDFmMDAwLCAweDhjMDAwNTAyLCAweDAyMDIwMDAwLCAweDAwMTA1ZWJhLAogCTB4OGMwMDA1MWUsIDB4MDQwMDAwMGUsIDB4ODIwMDBkMDAsIDB4MDAwMDAwYzAsCiAJMHgwNDAwMDAwNSwgMHg4MjA0MGQ4MCwgMHgwMDAwMDBjMCwgMHgwMjAyMDAwMCwKLQkweDAwMTA2MTg2LCAweDgyMDAwZDAwLCAweDAwMDAyMDIwLCAweDgyMDQwZDgwLAotCTB4MDAwMDIwMjAsIDB4MDIwMDAwMDAsIDB4MDAxMDYxNGQsIDB4NTkyYzAyMDcsCi0JMHg4MDAwMDA0MCwgMHgwMjAyMDAwMCwgMHgwMDEwNjE1NywgMHg1OTJjMTgwZCwKLQkweDgwMGMxOWMwLCAweDAyMDIwMDAwLCAweDAwMTA2MTU3LCAweDU5MmMxODBmLAorCTB4MDAxMDVlYmYsIDB4ODIwMDBkMDAsIDB4MDAwMDIwMjAsIDB4ODIwNDBkODAsCisJMHgwMDAwMjAyMCwgMHgwMjAwMDAwMCwgMHgwMDEwNWU4NiwgMHg1OTJjMDIwNywKKwkweDgwMDAwMDQwLCAweDAyMDIwMDAwLCAweDAwMTA1ZTkwLCAweDU5MmMxODBkLAorCTB4ODAwYzE5YzAsIDB4MDIwMjAwMDAsIDB4MDAxMDVlOTAsIDB4NTkyYzE4MGYsCiAJMHg1OTMwMDAwNywgMHg4MjAwMDU0MCwgMHgwMDAwMDAxMSwgMHg0ODBlNjAxMSwKIAkweDQ4MDI2MDA3LCAweDRhMDI2MjAzLCAweDAwMDAwMDA0LCAweDRhMDI2NDAzLAogCTB4MDAwMDAwNDIsIDB4NDIwMDA4MDAsIDB4ODAwMDIwMDEsIDB4MDQwMWYwMmEsCkBAIC0xMTQ3Myw5MDQgKzExNDMyLDkxNSBAQAogCTB4MDQwMWYwMDMsIDB4NDIwMDA4MDAsIDB4MDAwMDAwMDEsIDB4NTkzMjU4MDgsCiAJMHg4MzJjMDUwMCwgMHgwMGZmMDAwMCwgMHgwNDAwMDAwZCwgMHg1OTJjMDAwMCwKIAkweDQ4MDY1YTA2LCAweDQ4MDI2MDA4LCAweDU5MmMwNDBhLCAweDhjMDAwNTEwLAotCTB4MDQwMjAwMDgsIDB4MDIwMWY4MDAsIDB4MDAwMjAyY2UsIDB4NDE3YTc4MDAsCi0JMHg1OTMwMDAwOCwgMHg4MDAyNWQ0MCwgMHgwNDAyMDc4ZiwgMHgxYzAxZjAwMCwKKwkweDA0MDIwMDA4LCAweDAyMDFmODAwLCAweDAwMDIwMzgxLCAweDQxN2E3ODAwLAorCTB4NTkzMDAwMDgsIDB4ODAwMjVkNDAsIDB4MDQwMjA3OGMsIDB4MWMwMWYwMDAsCiAJMHg0NTZhNTgwMCwgMHg0MTJlZDAwMCwgMHg4MTVlYjgwMCwgMHg1OWM4MDAwMCwKIAkweDgyMDAwNTQwLCAweDAwMDAxMjAwLCAweDQ4MDM5MDAwLCAweDA0MDFmN2Y0LAogCTB4NTk4NDAwMDAsIDB4ODAwMDA1NDAsIDB4MDQwMjAwMDIsIDB4MWMwMWYwMDAsCi0JMHg1OTg0MDAwMywgMHg4MDAwMDU0MCwgMHgwMjAyMDAwMCwgMHgwMDEwNjFmZSwKLQkweDFjMDFmMDAwLCAweDQ4MDY2MDA0LCAweDU5YmMwMGVhLCAweDhjMDAwNTE2LAorCTB4NTk4NDAwMDMsIDB4ODAwMDA1NDAsIDB4MDIwMjAwMDAsIDB4MDAxMDVmMzcsCisJMHgxYzAxZjAwMCwgMHg1OTMwMDAwNCwgMHg4MjAwMDUwMCwgMHgwMDAwMDEwMCwKKwkweDgwMDQwZDQwLCAweDQ4MDY2MDA0LCAweDU5YmMwMGVhLCAweDhjMDAwNTE2LAogCTB4MDQwMjA3ZmUsIDB4ODMzMDA0MDAsIDB4NDAwMDAwMDAsIDB4NDgwMzc4ZTEsCiAJMHgxYzAxZjAwMCwgMHg1OWJjMDBlYSwgMHg4MjAwMTUwMCwgMHhiMDAwMDAxOCwKLQkweDAyMDIwMDAwLCAweDAwMTA2YzgxLCAweDhjMDAwNTEwLCAweDA0MDAwMDJhLAorCTB4MDIwMjAwMDAsIDB4MDAxMDY5YzYsIDB4OGMwMDA1MTAsIDB4MDQwMDAwMmEsCiAJMHg1OWJjMTBlMCwgMHg4MjA4MDUwMCwgMHhmZmZmZjAwMCwgMHgwNDAyMDAwYSwKIAkweDgwMDgwMTA4LCAweDgyMGEzNTAwLCAweDAwMDAwMDBmLCAweDQ4MDNjODU3LAotCTB4MTIwMWYwMDAsIDB4MDAxMDZjODcsIDB4ODQwMDA1MTAsIDB4NDgwMjYwMDQsCisJMHgxMjAxZjAwMCwgMHgwMDEwNjljYywgMHg4NDAwMDUxMCwgMHg0ODAyNjAwNCwKIAkweDA0MDFmMDE2LCAweDg0MGE2NTNlLCAweDU5MzAwMDA0LCAweDhjMDAwNTIwLAogCTB4MDQwMDA3ZmEsIDB4ODIwMDA1MDAsIDB4ZmZmZWZlZmYsIDB4NDgwMjYwMDQsCiAJMHg4YzA4MTUzZSwgMHgwNDAyMDAwNSwgMHg0MjAyNzAwMCwgMHgwMDAwMDAxMywKLQkweDA0MDFmODU5LCAweDA0MDFmMDA5LCAweDU5MzAwMDA0LCAweDhjMDAwNTE0LAotCTB4MDQwMDAwMDMsIDB4MDQwMWZmYjAsIDB4MDQwMWYwMmYsIDB4NDIwMjcwMDAsCi0JMHgwMDAwMDA0OSwgMHgwNDAxZjg1MCwgMHg1OWJjMDBlYSwgMHg4MjAwMTUwMCwKLQkweGIwMDAwMDE4LCAweDAyMDIwMDAwLCAweDAwMTA2YzgxLCAweDhjMDAwNTEwLAorCTB4MDQwMWY4NTgsIDB4MDQwMWYwMDksIDB4NTkzMDAwMDQsIDB4OGMwMDA1MTQsCisJMHgwNDAwMDAwMywgMHgwNDAxZmZhYywgMHgwNDAxZjAyZSwgMHg0MjAyNzAwMCwKKwkweDAwMDAwMDQ5LCAweDA0MDFmODRmLCAweDU5YmMwMGVhLCAweDgyMDAxNTAwLAorCTB4YjAwMDAwMTgsIDB4MDIwMjAwMDAsIDB4MDAxMDY5YzYsIDB4OGMwMDA1MTAsCiAJMHgwNDAyMDdkOCwgMHgxYzAxZjAwMCwgMHg4MzY0MDQ4MCwgMHgwMDAwMDAxMCwKLQkweDA0MDAxMDFhLCAweDQxNjI2MDAwLCAweDQxNTgwMDAwLCAweDU5MzAwYTAzLAorCTB4MDQwMDEwMTksIDB4NDE2MjYwMDAsIDB4NDE1ODAwMDAsIDB4NTkzMDBhMDMsCiAJMHg4MjA0MGQ4MCwgMHgwMDAwMDAwMCwgMHgwNDAwMDAwOCwgMHg4MzMyNjQwMCwKIAkweDAwMDAwMDI0LCAweDgxMzAwYzgwLCAweDA0MDAxN2Y5LCAweDQyMDI2MDAwLAotCTB4MDAxMGQxYzAsIDB4MDQwMWY3ZjYsIDB4ODE2NmM4NDAsIDB4ODMzMDBjMDAsCi0JMHgwMDAwMDAyNCwgMHg4MDA0MDQ4MCwgMHgwNDAyMTAwNSwgMHg0MDA2YzAwMCwKLQkweDRhMDI2MjAzLCAweDAwMDAwMDA4LCAweDFjMDFmMDAwLCAweDgzN2FjNTQwLAotCTB4MDAxMGQxYzAsIDB4MDQwMWY3ZmIsIDB4NDIwMDAwMDAsIDB4MDAxMGI4NTQsCi0JMHgwMjAxZjgwMCwgMHgwMDEwYWE0NywgMHg0OTY3Yzg1NywgMHg4MDAyNjU4MCwKLQkweDFjMDFmMDAwLCAweDgzMzAwNDgwLCAweDAwMTBkMWMwLCAweDAyMDAxODAwLAotCTB4MDAxMDA1ZDgsIDB4NDE1ODAwMDAsIDB4ODEzMDA0ODAsIDB4MDQwMjEwMGMsCi0JMHgwNDAxMTAwMCwgMHg0NTdhNjAwMCwgMHg0YTAyNjIwMiwgMHgwMDAwZmZmZiwKLQkweDgzMzAwNDAwLCAweDAwMDAwMDAzLCAweDQ4MDNjODQwLCAweDRhMDNjODQyLAotCTB4MDAwMDAwMjEsIDB4ODE2NmM4MDAsIDB4MWMwMWYwMDAsIDB4NDE1NDAwMDAsCi0JMHg4MTMwMDQ4MCwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwNDAxMTAwMCwKKwkweDAwMTBjZmMwLCAweDA0MDFmN2Y2LCAweDRhMDI2MjAzLCAweDAwMDAwMDA4LAorCTB4ODE2NmM4NDAsIDB4ODMzMmM0MDAsIDB4MDAwMDAwMjQsIDB4ODE2MDA0ODAsCisJMHgwNDAyMTAwMiwgMHgxYzAxZjAwMCwgMHg4MzdhYzU0MCwgMHgwMDEwY2ZjMCwKKwkweDFjMDFmMDAwLCAweDQyMDAwMDAwLCAweDAwMTBiNjUzLCAweDAyMDFmODAwLAorCTB4MDAxMGE4NmUsIDB4NDk2N2M4NTcsIDB4ODAwMjY1ODAsIDB4MWMwMWYwMDAsCisJMHg4MzMwMDQ4MCwgMHgwMDEwY2ZjMCwgMHgwMjAwMTgwMCwgMHgwMDEwMDYxNSwKKwkweDQxNTgwMDAwLCAweDgxMzAwNDgwLCAweDA0MDIxMDBjLCAweDA0MDExMDAwLAogCTB4NDU3YTYwMDAsIDB4NGEwMjYyMDIsIDB4MDAwMGZmZmYsIDB4ODMzMDA0MDAsCiAJMHgwMDAwMDAwMywgMHg0ODAzYzg0MCwgMHg0YTAzYzg0MiwgMHgwMDAwMDAyMSwKLQkweDU5YTgwMDY2LCAweDQ5MzM1MDY1LCAweDgwMDAwMDAwLCAweDQ4MDM1MDY2LAotCTB4MWMwMWYwMDAsIDB4NGQzNDAwMDAsIDB4NTkzMjY4MDksIDB4NTkzMDA0MDYsCi0JMHg4MjAwMDUwMCwgMHgwMDAwMDAxZiwgMHgwYzAxZjgwMywgMHg1YzAyNjgwMCwKLQkweDFjMDFmMDAwLCAweDAwMTA3OTY2LCAweDAwMTA3OTc5LCAweDAwMTA3OTkzLAotCTB4MDAwMjA3YzksIDB4MDAxMDk4ZjEsIDB4MDAxMDk5MGMsIDB4MDAwMjA4M2UsCi0JMHgwMDEwNzk2NiwgMHgwMDEwNzk3OSwgMHgwMDEwNjRlZSwgMHgwMDEwNzlhYywKLQkweDAwMTA3OTY2LCAweDAwMTA3OTY2LCAweDAwMTA3OTY2LCAweDAwMTA3OTY2LAotCTB4MDAxMDc5NjYsIDB4MDAxMDk1YTEsIDB4MDAxMGE2YzIsIDB4MDAxMDc5NjYsCi0JMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwgMHgwMDEwNzk2NiwKLQkweDAwMTA3OTY2LCAweDAwMTA3OTY2LCAweDAwMTA3OTY2LCAweDAwMTA3OTY2LAotCTB4MDAxMDc5NjYsIDB4MDAxMDc5NjYsIDB4MDAxMDc5NjYsIDB4MDAxMDc5NjYsCi0JMHgwMDEwNzk2NiwgMHg1OTMwMDIwMywgMHg4MjAwMGM4MCwgMHgwMDAwMDAwZSwKLQkweDAyMDIxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLCAweDAwMTA3OWFhLAotCTB4MDAxMDg1OTIsIDB4MDAwMjA3ZGQsIDB4MDAxMDg3MjAsIDB4MDAxMDg3YjksCi0JMHgwMDEwNzlhYSwgMHgwMDEwNzlhYSwgMHgwMDEwNzlhYSwgMHgwMDEwODU3NywKLQkweDAwMTA3OWFhLCAweDAwMTA3OWFhLCAweDAwMTA3OWFhLCAweDAwMTA3OWFhLAotCTB4MDAxMDg5ODUsIDB4ODMzODA0ODAsIDB4MDAwMDAwNTgsIDB4MDQwMjEwMDcsCi0JMHg4MzM4MDQ4MCwgMHgwMDAwMDA0MCwgMHgwNDAwMTAwNCwgMHg0ZDJjMDAwMCwKLQkweDBjMDFmODAzLCAweDVjMDI1ODAwLCAweDFjMDFmMDAwLCAweDAwMTA4NjFiLAotCTB4MDAxMDg2MWIsIDB4MDAxMDg2MWIsIDB4MDAxMDg2MWIsIDB4MDAxMDg2MWIsCi0JMHgwMDEwODYxZCwgMHgwMDEwODZiZCwgMHgwMDEwODYxYiwgMHgwMDEwODYxYiwKLQkweDAwMTA4NjFiLCAweDAwMTA4NjFiLCAweDAwMTA4NjFiLCAweDAwMTA4NjFiLAotCTB4MDAxMDg2MWIsIDB4MDAxMDg2MWIsIDB4MDAxMDg2MWIsIDB4MDAxMDg2MWIsCi0JMHgwMDEwODYxYiwgMHgwMDEwODYxYiwgMHgwMDEwODZjMSwgMHgwMDAyMDdmZiwKLQkweDAwMTA4NjFiLCAweDAwMTA4NmMwLCAweDAwMTA4NmMyLCAweDU5MzI1ODA4LAotCTB4NTkzMDA4MTEsIDB4NTkzMDE0MDIsIDB4NTkzNDAyMDAsIDB4OGMwMDA1MGUsCi0JMHgwNDAyMDAxYywgMHgwNDAxZjgyNiwgMHgwNDAwMDAwNSwgMHg0YTAyNWEwNCwKLQkweDAwMDAwMTAzLCAweDQ5N2E1YzA5LCAweDA0MDFmMDA5LCAweDRhMDI1YTA0LAotCTB4MDAwMDAxMDMsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMDAsIDB4NDk3YTVjMDksCi0JMHg4MDA0MDljMCwgMHgwMjAyMDgwMCwgMHgwMDEwODc4NSwgMHg0ODA2NTgwNywKLQkweDQ4MGE1YzA2LCAweDAyMDFmODAwLCAweDAwMDIwMmMxLCAweDU5MzQwMDBmLAotCTB4NTkzNDE0MGIsIDB4ODAwODEwNDAsIDB4MDQwMDEwMDIsIDB4NDgwYTZjMGIsCi0JMHg4MDAwMDU0MCwgMHgwMjAyMDgwMCwgMHgwMDAyMDI1MywgMHgwNDAxZjc1ZSwKLQkweDU5MmMwMjBhLCAweDhjMDAwNTAyLCAweDA0MDAwN2U5LCAweDgwMDQwOWMwLAotCTB4MDQwMDA3ZTcsIDB4NTkyYzAyMDgsIDB4OGMwMDA1MGUsIDB4MDQwMjA3ZTQsCi0JMHg0OTMzYzg1NywgMHgwMjAxZjAwMCwgMHgwMDEwOTIwZiwgMHg1OTJjMDIwYSwKLQkweDhjMDAwNTAwLCAweDA0MDAwMDEwLCAweDU5MzAwMDE1LCAweDU5MmMzODBmLAotCTB4ODAxYzNjODAsIDB4MDQwMDAwMGMsIDB4NGEwMjVhMDYsIDB4MDAwMDAwMTUsCi0JMHg4YzFjM2QzZSwgMHgwNDAwMDAwNSwgMHg0YTAyNWEwNiwgMHgwMDAwMDAwNywKLQkweDgwMWMzODgwLCAweDgwMWMzODAwLCAweDQ4MWZjODU3LCAweDgyMWMwZDQwLAotCTB4MDAwMDAwMDAsIDB4MWMwMWYwMDAsIDB4NTkzMDAyMDMsIDB4ODIwMDM0ODAsCi0JMHgwMDAwMDAwZSwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHgwYzAxZjAwMSwKLQkweDAwMTA5OTJiLCAweDAwMDIwODUyLCAweDAwMTA5ZmJhLCAweDAwMTA5ZmM4LAotCTB4MDAwMjA4NmUsIDB4MDAxMDk5MmIsIDB4MDAxMGEwYTgsIDB4MDAwMjA4OGQsCi0JMHgwMDEwOTkyYiwgMHgwMDEwOTkyYiwgMHgwMDEwOTkyYiwgMHgwMDEwOTkyYiwKLQkweDAwMTA5OTJiLCAweDAwMTA5OTJiLCAweDgzMzgwNTgwLCAweDAwMDAwMDEzLAotCTB4MDIwMjAwMDAsIDB4MDAxMDlmNDIsIDB4NTkzMDA0MDMsIDB4ODIwMjc0ODAsCi0JMHgwMDAwMDA0NCwgMHgwMjAyMTgwMCwgMHgwMDEwMDVkOCwgMHg4MjAwMDQ4MCwKLQkweDAwMDAwMDQwLCAweDAyMDAxODAwLCAweDAwMTAwNWQ4LCAweDBjMDFmMDAxLAotCTB4MDAxMDlmOWUsIDB4MDAwMjA4NjQsIDB4MDAxMDlmYTAsIDB4MDAxMDlmYjIsCi0JMHg1OTMyNTgwOCwgMHg4MzJjMDUwMCwgMHgwMGZmMDAwMCwgMHgwNDAwMDAwNSwKLQkweDU5MmMwYzBhLCAweDhjMDQwZDFhLCAweDAyMDIwMDAwLCAweDAwMTA5ZmFkLAotCTB4MDQwMWZlOTEsIDB4MDQwMWY3MTAsIDB4ODMzODA1ODAsIDB4MDAwMDAwNDgsCi0JMHgwNDAwMDAwNywgMHg4MzM4MDU4MCwgMHgwMDAwMDA1MywgMHgwMjAwMDAwMCwKLQkweDAwMTBhMDRhLCAweDAyMDFmODAwLCAweDAwMTAwNWQ4LCAweDU5MzAwMDFmLAotCTB4NTkzMDEwMTEsIDB4NTkzMDA4MDksIDB4NTgwNDBhMDAsIDB4OGMwNDBkMGUsCi0JMHgwMjAyMDAwMCwgMHgwMDEwYTAyNiwgMHg4MDA4MTFjMCwgMHgwMjAyMDAwMCwKLQkweDAwMTBhMDMzLCAweDU5MzAwMDFmLCAweDgwMDAwNTQwLCAweDAyMDIwMDAwLAotCTB4MDAxMGEwNDEsIDB4NTkzMjU4MDgsIDB4NTkyYzA0MGEsIDB4OGMwMDA1MWUsCi0JMHgwMjAwMDAwMCwgMHgwMDEwYTAxYywgMHg0MjAyNzAwMCwgMHgwMDAwMDA0MSwKLQkweDA0MDFmMDAxLCAweDgzMzgwNDgwLCAweDAwMDAwMDU0LCAweDAyMDIxODAwLAotCTB4MDAxMDA1ZDgsIDB4ODMzODA0ODAsIDB4MDAwMDAwNDAsIDB4MDIwMDEwMDAsCi0JMHgwMDEwYTA2NywgMHgwYzAxZjAwMSwgMHgwMDEwYTA3MywgMHgwMDAyMDhhYSwKLQkweDAwMTBhMDdmLCAweDAwMTBhMDg2LCAweDAwMTBhMDczLCAweDAwMTBhMDczLAotCTB4MDAxMGEwNzMsIDB4MDAxMGEwNzMsIDB4MDAxMGEwNzUsIDB4MDAxMGEwN2EsCi0JMHgwMDEwYTA3YSwgMHgwMDEwYTA3MywgMHgwMDEwYTA3MywgMHgwMDEwYTA3MywKLQkweDAwMTBhMDczLCAweDAwMTBhMDdhLCAweDAwMTBhMDczLCAweDAwMTBhMDdhLAotCTB4MDAxMGEwNzMsIDB4MDAxMGEwNzUsIDB4NGEwMjYyMDMsIDB4MDAwMDAwMDEsCi0JMHg0OTNhNjQwMywgMHg0MjAwMDgwMCwgMHg4MDAwMjA0MiwgMHgwNDAxZjY3MiwKKwkweDgxNjZjODAwLCAweDFjMDFmMDAwLCAweDQxNTQwMDAwLCAweDgxMzAwNDgwLAorCTB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsIDB4MDQwMTEwMDAsIDB4NDU3YTYwMDAsCisJMHg0YTAyNjIwMiwgMHgwMDAwZmZmZiwgMHg4MzMwMDQwMCwgMHgwMDAwMDAwMywKKwkweDQ4MDNjODQwLCAweDRhMDNjODQyLCAweDAwMDAwMDIxLCAweDU5YTgwMDY2LAorCTB4NDkzMzUwNjUsIDB4ODAwMDAwMDAsIDB4NDgwMzUwNjYsIDB4MWMwMWYwMDAsCisJMHg0ZDM0MDAwMCwgMHg1OTMyNjgwOSwgMHg1OTMwMDQwNiwgMHg4MjAwMDUwMCwKKwkweDAwMDAwMDFmLCAweDBjMDFmODAzLCAweDVjMDI2ODAwLCAweDFjMDFmMDAwLAorCTB4MDAxMDc2ZWQsIDB4MDAxMDc3MDAsIDB4MDAxMDc3MWEsIDB4MDAwMjA5MDAsCisJMHgwMDEwOTZjMSwgMHgwMDEwOTZkYywgMHgwMDAyMDk3NSwgMHgwMDEwNzZlZCwKKwkweDAwMTA3NzAwLCAweDAwMTA2MjI2LCAweDAwMTA3NzMzLCAweDAwMTA3NmVkLAorCTB4MDAxMDc2ZWQsIDB4MDAxMDc2ZWQsIDB4MDAxMDc2ZWQsIDB4MDAxMDc2ZWQsCisJMHgwMDEwOTM2YSwgMHgwMDEwYTRkMCwgMHgwMDEwNzZlZCwgMHgwMDEwNzZlZCwKKwkweDAwMTA3NmVkLCAweDAwMTA3NmVkLCAweDAwMTA3NmVkLCAweDAwMTA3NmVkLAorCTB4MDAxMDc2ZWQsIDB4MDAxMDc2ZWQsIDB4MDAxMDc2ZWQsIDB4MDAxMDc2ZWQsCisJMHgwMDEwNzZlZCwgMHgwMDEwNzZlZCwgMHgwMDEwNzZlZCwgMHgwMDEwNzZlZCwKKwkweDU5MzAwMjAzLCAweDgyMDAwYzgwLCAweDAwMDAwMDBlLCAweDAyMDIxODAwLAorCTB4MDAxMDA2MTUsIDB4MGMwMWYwMDEsIDB4MDAxMDc3MzEsIDB4MDAxMDgzMzcsCisJMHgwMDAyMDkxNCwgMHgwMDEwODRjYywgMHgwMDEwODU2NiwgMHgwMDEwNzczMSwKKwkweDAwMTA3NzMxLCAweDAwMTA3NzMxLCAweDAwMTA4MzFjLCAweDAwMTA3NzMxLAorCTB4MDAxMDc3MzEsIDB4MDAxMDc3MzEsIDB4MDAxMDc3MzEsIDB4MDAxMDg3M2EsCisJMHg4MzM4MDQ4MCwgMHgwMDAwMDA1OCwgMHgwNDAyMTAwNywgMHg4MzM4MDQ4MCwKKwkweDAwMDAwMDQwLCAweDA0MDAxMDA0LCAweDRkMmMwMDAwLCAweDBjMDFmODAzLAorCTB4NWMwMjU4MDAsIDB4MWMwMWYwMDAsIDB4MDAxMDgzYzEsIDB4MDAxMDgzYzEsCisJMHgwMDEwODNjMSwgMHgwMDEwODNjMSwgMHgwMDEwODNjMSwgMHgwMDEwODNjMywKKwkweDAwMTA4NDYzLCAweDAwMTA4M2MxLCAweDAwMTA4M2MxLCAweDAwMTA4M2MxLAorCTB4MDAxMDgzYzEsIDB4MDAxMDgzYzEsIDB4MDAxMDgzYzEsIDB4MDAxMDgzYzEsCisJMHgwMDEwODNjMSwgMHgwMDEwODNjMSwgMHgwMDEwODNjMSwgMHgwMDEwODNjMSwKKwkweDAwMTA4M2MxLCAweDAwMTA4NDY3LCAweDAwMDIwOTM2LCAweDAwMTA4M2MxLAorCTB4MDAxMDg0NjYsIDB4MDAxMDg0NjgsIDB4NTkzMjU4MDgsIDB4NTkzMDA4MTEsCisJMHg1OTMwMTQwMiwgMHg1OTM0MDIwMCwgMHg4YzAwMDUwZSwgMHgwNDAyMDAxYywKKwkweDA0MDFmODI2LCAweDA0MDAwMDA1LCAweDRhMDI1YTA0LCAweDAwMDAwMTAzLAorCTB4NDk3YTVjMDksIDB4MDQwMWYwMDksIDB4NGEwMjVhMDQsIDB4MDAwMDAxMDMsCisJMHg0YTAyNWEwNiwgMHgwMDAwMDAwMCwgMHg0OTdhNWMwOSwgMHg4MDA0MDljMCwKKwkweDAyMDIwODAwLCAweDAwMTA4NTMxLCAweDQ4MDY1ODA3LCAweDQ4MGE1YzA2LAorCTB4MDIwMWY4MDAsIDB4MDAwMjAzODEsIDB4NTkzNDAwMGYsIDB4NTkzNDE0MGIsCisJMHg4MDA4MTA0MCwgMHgwNDAwMTAwMiwgMHg0ODBhNmMwYiwgMHg4MDAwMDU0MCwKKwkweDAyMDIwODAwLCAweDAwMDIwMjc1LCAweDA0MDFmNzVlLCAweDU5MmMwMjBhLAorCTB4OGMwMDA1MDIsIDB4MDQwMDA3ZTksIDB4ODAwNDA5YzAsIDB4MDQwMDA3ZTcsCisJMHg1OTJjMDIwOCwgMHg4YzAwMDUwZSwgMHgwNDAyMDdlNCwgMHg0OTMzYzg1NywKKwkweDAyMDFmMDAwLCAweDAwMTA4ZmM2LCAweDU5MmMwMjBhLCAweDhjMDAwNTAwLAorCTB4MDQwMDAwMTAsIDB4NTkzMDAwMTUsIDB4NTkyYzM4MGYsIDB4ODAxYzNjODAsCisJMHgwNDAwMDAwYywgMHg0YTAyNWEwNiwgMHgwMDAwMDAxNSwgMHg4YzFjM2QzZSwKKwkweDA0MDAwMDA1LCAweDRhMDI1YTA2LCAweDAwMDAwMDA3LCAweDgwMWMzODgwLAorCTB4ODAxYzM4MDAsIDB4NDgxZmM4NTcsIDB4ODIxYzBkNDAsIDB4MDAwMDAwMDAsCisJMHgxYzAxZjAwMCwgMHg1OTMwMDIwMywgMHg4MjAwMzQ4MCwgMHgwMDAwMDAwZSwKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDBjMDFmMDAxLCAweDAwMTA5NmZiLAorCTB4MDAwMjA5ODksIDB4MDAxMDlkOWMsIDB4MDAxMDlkYWEsIDB4MDAwMjA5YTUsCisJMHgwMDEwOTZmYiwgMHgwMDEwOWU5OCwgMHgwMDAyMDljNCwgMHgwMDEwOTZmYiwKKwkweDAwMTA5NmZiLCAweDAwMTA5NmZiLCAweDAwMTA5NmZiLCAweDAwMTA5NmZiLAorCTB4MDAxMDk2ZmIsIDB4ODMzODA1ODAsIDB4MDAwMDAwMTMsIDB4MDIwMjAwMDAsCisJMHgwMDEwOWQyMywgMHg1OTMwMDQwMywgMHg4MjAyNzQ4MCwgMHgwMDAwMDA0NCwKKwkweDAyMDIxODAwLCAweDAwMTAwNjE1LCAweDgyMDAwNDgwLCAweDAwMDAwMDQwLAorCTB4MDIwMDE4MDAsIDB4MDAxMDA2MTUsIDB4MGMwMWYwMDEsIDB4MDAxMDlkODAsCisJMHgwMDAyMDk5YiwgMHgwMDEwOWQ4MiwgMHgwMDEwOWQ5NCwgMHg1OTMyNTgwOCwKKwkweDgzMmMwNTAwLCAweDAwZmYwMDAwLCAweDA0MDAwMDA1LCAweDU5MmMwYzBhLAorCTB4OGMwNDBkMWEsIDB4MDIwMjAwMDAsIDB4MDAxMDlkOGYsIDB4MDQwMWZlOGUsCisJMHgwNDAxZjcxMCwgMHg4MzM4MDU4MCwgMHgwMDAwMDA0OCwgMHgwNDAwMDAwNywKKwkweDgzMzgwNTgwLCAweDAwMDAwMDUzLCAweDAyMDAwMDAwLCAweDAwMTA5ZTNhLAorCTB4MDIwMWY4MDAsIDB4MDAxMDA2MTUsIDB4NTkzMDAwMWYsIDB4NTkzMDEwMTEsCisJMHg1OTMwMDgwOSwgMHg1ODA0MGEwMCwgMHg4YzA0MGQwZSwgMHgwMjAyMDAwMCwKKwkweDAwMTA5ZTE2LCAweDgwMDgxMWMwLCAweDAyMDIwMDAwLCAweDAwMTA5ZTIzLAorCTB4NTkzMDAwMWYsIDB4ODAwMDA1NDAsIDB4MDIwMjAwMDAsIDB4MDAxMDllMzEsCisJMHg1OTMyNTgwOCwgMHg1OTJjMDQwYSwgMHg4YzAwMDUxZSwgMHgwMjAwMDAwMCwKKwkweDAwMTA5ZTBjLCAweDQyMDI3MDAwLCAweDAwMDAwMDQxLCAweDA0MDFmMDAxLAorCTB4ODMzODA0ODAsIDB4MDAwMDAwNTQsIDB4MDIwMjE4MDAsIDB4MDAxMDA2MTUsCisJMHg4MzM4MDQ4MCwgMHgwMDAwMDA0MCwgMHgwMjAwMTAwMCwgMHgwMDEwOWU1NywKKwkweDBjMDFmMDAxLCAweDAwMTA5ZTYzLCAweDAwMDIwOWUxLCAweDAwMTA5ZTZmLAorCTB4MDAxMDllNzYsIDB4MDAxMDllNjMsIDB4MDAxMDllNjMsIDB4MDAxMDllNjMsCisJMHgwMDEwOWU2MywgMHgwMDEwOWU2NSwgMHgwMDEwOWU2YSwgMHgwMDEwOWU2YSwKKwkweDAwMTA5ZTYzLCAweDAwMTA5ZTYzLCAweDAwMTA5ZTYzLCAweDAwMTA5ZTYzLAorCTB4MDAxMDllNmEsIDB4MDAxMDllNjMsIDB4MDAxMDllNmEsIDB4MDAxMDllNjMsCisJMHgwMDEwOWU2NSwgMHg0YTAyNjIwMywgMHgwMDAwMDAwMSwgMHg0OTNhNjQwMywKKwkweDQyMDAwODAwLCAweDgwMDAyMDQyLCAweDA0MDFmNjZmLCAweDAwMDAwMDAwLAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MTRhYTYyYjEsCi0JMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNSwKLQkweGZmZmZmZmZiLCAweDAyODAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDBjMDAwLAotCTB4MDAwMDA3MWQsIDB4MDczZmNhNWEsIDB4MDcwNWE1YTUsIDB4MDE5MjgwMDksCi0JMHgwNzBmZjBlMSwgMHgwMzgwMDAwNiwgMHgwNDk1ODAxMCwgMHgwNTMwODAwMCwKLQkweDA1MDA4MDAwLCAweDA2MDA5MDJmLCAweDA0YTAwNGRjLCAweDAyMDJmMDUxLAotCTB4MDQyZTQwMjAsIDB4MDE4ZjAyMWIsIDB4MDMzZTUwMDAsIDB4MDMwMjAwMDAsCi0JMHgwNzhkMDAxOCwgMHgwNDkzMDQxYSwgMHgwMDkyMDQxYywgMHgwMzhhMDMwNSwKLQkweDA3OGIwMzAzLCAweDA0OGU4MDEwLCAweDA2NzhhYWU1LCAweDA2MDAwMDAxLAotCTB4MDc4MTgxNzQsIDB4MDQwMDEwZTYsIDB4MDQ0OGUwZTYsIDB4MDQ4MTgwMTAsCi0JMHgwMDJmYjAwOCwgMHgwNDQ4ZTBlNiwgMHgwNDgxODAxMCwgMHgwNjBmZjBlNiwKLQkweDAwNTgwNDAxLCAweDA1NDg4MGZmLCAweDA0ODE4MDEwLCAweDAyMmE1MDAxLAotCTB4MDMwNDMwZDQsIDB4MDY3ODAwNDMsIDB4MDMwZTAwMDAsIDB4MDMwNDUwZmYsCi0JMHgwNjc4MDA0MywgMHgwMzAxOTAwMCwgMHgwNTgxODVjNiwgMHgwMjdjMDA0NSwKLQkweDAzMDIwMDAwLCAweDA2ODEwMDM3LCAweDAyN2MwMDQ1LCAweDAzMDQwMDAwLAotCTB4MDY4MTAwYzcsIDB4MDI3YzAwNDUsIDB4MDMwODAwMDAsIDB4MDc4MTA2MWUsCi0JMHgwNDkwODAzNywgMHgwMjkxMDVjNCwgMHgwMTA0MTBhNiwgMHgwMzc5ZmY0MSwKLQkweDAzN2ZmZmZmLCAweDA3MmQ2MDAwLCAweDA3NjAxMjQxLCAweDA1MGY4MGZmLAotCTB4MDMyZmEwMDksIDB4MDU2MDA0MDAsIDB4MDUwZjgwZmYsIDB4MDU2YzA0ZmYsCi0JMHgwNjgxMDVkYywgMHgwNzNmYTAwOSwgMHgwNjAwMDAwMSwgMHgwMjc5ZmYwMiwKLQkweDA3MDBmZmZmLCAweDA3MGZmMGQxLCAweDAxNzlmZWZmLCAweDA3MDBmZmZmLAotCTB4MDQ1YzA0MDIsIDB4MDQ4MTg1ZGMsIDB4MDYwZmYwZDAsIDB4MDE3OWZlZmYsCi0JMHgwNzAwZmZmZiwgMHgwNTdkZmVmZiwgMHgwNzAwZmZmZiwgMHgwNzgxMDViZSwKLQkweDA1NjAwZTQxLCAweDA1MGY4MGZmLCAweDAzMmZhMDY5LCAweDA3NDgwMDAwLAotCTB4MDY4MTA1ZDAsIDB4MDY3ODAwNDMsIDB4MDcwMDAwZjAsIDB4MDc4MTAwNWYsCi0JMHgwMzdjMDBmZiwgMHgwNjAwMDAxMCwgMHgwNzgxMDA1ZiwgMHgwMzgwMDVjYywKLQkweDAzNzlmZjAwLCAweDA3MGZmZmZmLCAweDA2NzgwMDQzLCAweDA3ZjAwMDAwLAotCTB4MDc1YTAwMDAsIDB4MDIwZWYwMDEsIDB4MDI4NjA1Y2UsIDB4MDU0ODQwMDAsCi0JMHgwMmExODE5ZSwgMHgwNjJkNjAwMSwgMHgwMDJmYjAwMSwgMHgwNzBmZjA2OSwKLQkweDAxODY4MDcyLCAweDA2MGZmMDc5LCAweDA1NWMwNDQxLCAweDA2ODEwMDEwLAotCTB4MDEyZmIwMDAsIDB4MDYwNTYwZmIsIDB4MDM4MDAwNzgsIDB4MDYwZmYwNzksCi0JMHgwMjg2ODE5OCwgMHgwNzBmZjA2OSwgMHgwNTVjMDQ0MSwgMHgwNjgxMDAxMCwKLQkweDA2MDU2MGZiLCAweDA0MDBkMGQwLCAweDA2MmQ2MDAyLCAweDA2NDgzMDBkLAotCTB4MDY4MTAwODYsIDB4MDcwZmYwZDEsIDB4MDYyZDYwMDEsIDB4MDQ1YzA0MGIsCi0JMHgwNjgxMDA4OSwgMHgwNTQ4ODAwMCwgMHgwNDgxODA4NiwgMHgwNzJlNTAwYywKLQkweDAwMjA4MDAxLCAweDA1YTAwNGUxLCAweDAyODAwMDEwLCAweDA2MmQ2MDAxLAotCTB4MDdmMDAwMDAsIDB4MDdmMDAwMDAsIDB4MDcwZmYwZDEsIDB4MDE3OWZlZmYsCi0JMHgwNzAwMDBmZiwgMHgwNTVjMDQwYywgMHgwNTgxODBiYiwgMHgwMDA3YjAwMSwKLQkweDAzMDc5MDQxLCAweDAzMDdhMDAwLCAweDA2NjAwYTc5LCAweDA1MGY4MGZmLAotCTB4MDUzZmE4MGEsIDB4MDYwMDAwMTAsIDB4MDcyZDUwMDMsIDB4MDc4ZDAwOTYsCi0JMHgwMzA3YzAwMywgMHgwMDA3ZDAwNCwgMHgwMTA3ZTAwNSwgMHgwMzA3ZjAwNiwKLQkweDAyMDgwMDA3LCAweDAwMDgxMDA4LCAweDAxMDgyMDA5LCAweDAzMDgzMDBhLAotCTB4MDAwODQwMGIsIDB4MDMwODUwMGMsIDB4MDY4ZDAwYTEsIDB4MDY3ODAwN2EsCi0JMHgwN2YwMDAwMCwgMHgwMTA4ODBmZiwgMHgwMzM4NjAwMCwgMHgwMzAxMDAwMCwKLQkweDA3MmU2MzAwLCAweDAyMGVmMDdmLCAweDAyODYwMDEwLCAweDA3MGZmMDdkLAotCTB4MDQ1MDA0N2MsIDB4MDUwZjgwZmYsIDB4MDAyZmE4MTksIDB4MDY4ZDAwYWUsCi0JMHgwMjA4MDAwMSwgMHgwMDA4MTAwMiwgMHgwNDQ4ODA3YSwgMHgwNjgxMDBiNSwKLQkweDAzNzlmZjAzLCAweDA3MDAwMGZmLCAweDAxMDgyMDAzLCAweDA2OGQwMGI2LAotCTB4MDIzODYwMDQsIDB4MDMwMTAwMDAsIDB4MDcyZTZjMDAsIDB4MDI4MDAwMTAsCi0JMHgwNjc4MDA0MywgMHgwNzAwMDBmMCwgMHgwNzgxMDVkNywgMHgwNTAwMjBmZiwKLQkweDAyN2MwMDAyLCAweDA2MDAwMDEwLCAweDA3ODEwMGMzLCAweDAzODAwNWQ3LAotCTB4MDcwMGMwZDEsIDB4MDM3OWZmMGMsIDB4MDcwMDAwZmYsIDB4MDM4MDAwOGUsCi0JMHgwMjA0YTA1MSwgMHgwNjc4MDA0MywgMHgwNzAwMDBmMCwgMHgwMzdjMDBmZiwKLQkweDA2MDAwMDEwLCAweDA3ODE4MTZhLCAweDA3MmQ2MDAwLCAweDAxOTQ4NWMwLAotCTB4MDUwZmIwNTYsIDB4MDQ0ODgwZTYsIDB4MDQ4MTgwMTAsIDB4MDYwZmYwZDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHhhMzZlYzQ0MSwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA1LCAweGZmZmZmZmZiLAorCTB4MDI4MDAwMDQsIDB4MDAwMDAwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMDA3MWIsCisJMHgwNzNmY2E1YSwgMHgwNzA1YTVhNSwgMHgwMTkyODAwOSwgMHgwNzBmZjBlMSwKKwkweDAzODAwMDA2LCAweDA0OTU4MDEwLCAweDA1MzA4MDAwLCAweDA1MDA4MDAwLAorCTB4MDYwMDkwMmYsIDB4MDRhMDA0ZGMsIDB4MDIwMmYwNTEsIDB4MDQyZTQwMjAsCisJMHgwMThmMDIxYiwgMHgwMzNlNTAwMCwgMHgwMzAyMDAwMCwgMHgwNzhkMDAxOCwKKwkweDA0OTMwNDFhLCAweDAwOTIwNDFjLCAweDAzOGEwMzA1LCAweDA3OGIwMzAzLAorCTB4MDQ4ZTgwMTAsIDB4MDY3OGFhZTUsIDB4MDYwMDAwMDEsIDB4MDc4MTgxNzQsCisJMHgwNDAwMTBlNiwgMHgwNDQ4ZTBlNiwgMHgwNDgxODAxMCwgMHgwMDJmYjAwOCwKKwkweDA0NDhlMGU2LCAweDA0ODE4MDEwLCAweDA2MGZmMGU2LCAweDAwNTgwNDAxLAorCTB4MDU0ODgwZmYsIDB4MDQ4MTgwMTAsIDB4MDIyYTUwMDEsIDB4MDMwNDMwZDQsCisJMHgwNjc4MDA0MywgMHgwMzBlMDAwMCwgMHgwMzA0NTBmZiwgMHgwNjc4MDA0MywKKwkweDAzMDE5MDAwLCAweDA0ODE4NWM0LCAweDAyN2MwMDQ1LCAweDAzMDIwMDAwLAorCTB4MDY4MTAwMzcsIDB4MDI3YzAwNDUsIDB4MDMwNDAwMDAsIDB4MDY4MTAwYzcsCisJMHgwMjdjMDA0NSwgMHgwMzA4MDAwMCwgMHgwNjgxMDYxYywgMHgwNDkwODAzNywKKwkweDAyOTEwNWMyLCAweDAxMDQxMGE2LCAweDAzNzlmZjQxLCAweDAzN2ZmZmZmLAorCTB4MDcyZDYwMDAsIDB4MDc2MDEyNDEsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksCisJMHgwNTYwMDQwMCwgMHgwNTBmODBmZiwgMHgwNTZjMDRmZiwgMHgwNjgxMDVkYSwKKwkweDA3M2ZhMDA5LCAweDA2MDAwMDAxLCAweDAyNzlmZjAyLCAweDA3MDBmZmZmLAorCTB4MDcwZmYwZDEsIDB4MDE3OWZlZmYsIDB4MDcwMGZmZmYsIDB4MDQ1YzA0MDIsCisJMHgwNDgxODVkYSwgMHgwNjBmZjBkMCwgMHgwMTc5ZmVmZiwgMHgwNzAwZmZmZiwKKwkweDA1N2RmZWZmLCAweDA3MDBmZmZmLCAweDA2ODEwNWJjLCAweDA1NjAwZTQxLAorCTB4MDUwZjgwZmYsIDB4MDMyZmEwNjksIDB4MDc0ODAwMDAsIDB4MDY4MTA1Y2UsCisJMHgwNjc4MDA0MywgMHgwNzAwMDBmMCwgMHgwNzgxMDA1ZiwgMHgwMzdjMDBmZiwKKwkweDA2MDAwMDEwLCAweDA3ODEwMDVmLCAweDAzODAwNWNhLCAweDAzNzlmZjAwLAorCTB4MDcwZmZmZmYsIDB4MDY3ODAwNDMsIDB4MDdmMDAwMDAsIDB4MDc1YTAwMDAsCisJMHgwMjBlZjAwMSwgMHgwMzg2MDVjYywgMHgwNTQ4NDAwMCwgMHgwMmExODE5ZSwKKwkweDA2MmQ2MDAxLCAweDAwMmZiMDAxLCAweDA3MGZmMDY5LCAweDAxODY4MDcyLAorCTB4MDYwZmYwNzksIDB4MDU1YzA0NDEsIDB4MDY4MTAwMTAsIDB4MDEyZmIwMDAsCisJMHgwNjA1NjBmYiwgMHgwMzgwMDA3OCwgMHgwNjBmZjA3OSwgMHgwMjg2ODE5OCwKKwkweDA3MGZmMDY5LCAweDA1NWMwNDQxLCAweDA2ODEwMDEwLCAweDA2MDU2MGZiLAorCTB4MDQwMGQwZDAsIDB4MDYyZDYwMDIsIDB4MDY0ODMwMGQsIDB4MDY4MTAwODYsCisJMHgwNzBmZjBkMSwgMHgwNjJkNjAwMSwgMHgwNDVjMDQwYiwgMHgwNjgxMDA4OSwKKwkweDA1NDg4MDAwLCAweDA0ODE4MDg2LCAweDA3MmU1MDBjLCAweDAwMjA4MDAxLAorCTB4MDVhMDA0ZTEsIDB4MDI4MDAwMTAsIDB4MDYyZDYwMDEsIDB4MDdmMDAwMDAsCisJMHgwN2YwMDAwMCwgMHgwNzBmZjBkMSwgMHgwMTc5ZmVmZiwgMHgwNzAwMDBmZiwKKwkweDA1NWMwNDBjLCAweDA1ODE4MGJiLCAweDAwMDdiMDAxLCAweDAzMDc5MDQxLAorCTB4MDMwN2EwMDAsIDB4MDY2MDBhNzksIDB4MDUwZjgwZmYsIDB4MDUzZmE4MGEsCisJMHgwNjAwMDAxMCwgMHgwNzJkNTAwMywgMHgwNzhkMDA5NiwgMHgwMzA3YzAwMywKKwkweDAwMDdkMDA0LCAweDAxMDdlMDA1LCAweDAzMDdmMDA2LCAweDAyMDgwMDA3LAorCTB4MDAwODEwMDgsIDB4MDEwODIwMDksIDB4MDMwODMwMGEsIDB4MDAwODQwMGIsCisJMHgwMzA4NTAwYywgMHgwNjhkMDBhMSwgMHgwNjc4MDA3YSwgMHgwN2YwMDAwMCwKKwkweDAxMDg4MGZmLCAweDAzMzg2MDAwLCAweDAzMDEwMDAwLCAweDA3MmU2MzAwLAorCTB4MDIwZWYwN2YsIDB4MDI4NjAwMTAsIDB4MDcwZmYwN2QsIDB4MDQ1MDA0N2MsCisJMHgwNTBmODBmZiwgMHgwMDJmYTgxOSwgMHgwNjhkMDBhZSwgMHgwMjA4MDAwMSwKKwkweDAwMDgxMDAyLCAweDA0NDg4MDdhLCAweDA2ODEwMGI1LCAweDAzNzlmZjAzLAorCTB4MDcwMDAwZmYsIDB4MDEwODIwMDMsIDB4MDY4ZDAwYjYsIDB4MDIzODYwMDQsCisJMHgwMzAxMDAwMCwgMHgwNzJlNmMwMCwgMHgwMjgwMDAxMCwgMHgwNjc4MDA0MywKKwkweDA3MDAwMGYwLCAweDA2ODEwNWQ1LCAweDA1MDAyMGZmLCAweDAyN2MwMDAyLAorCTB4MDYwMDAwMTAsIDB4MDc4MTAwYzMsIDB4MDI4MDA1ZDUsIDB4MDcwMGMwZDEsCisJMHgwMzc5ZmYwYywgMHgwNzAwMDBmZiwgMHgwMzgwMDA4ZSwgMHgwMjA0YTA1MSwKKwkweDA2NzgwMDQzLCAweDA3MDAwMGYwLCAweDAzN2MwMGZmLCAweDA2MDAwMDEwLAorCTB4MDc4MTgxNmEsIDB4MDcyZDYwMDAsIDB4MDE5NDg1YmUsIDB4MDUwZmIwNTYsCisJMHgwNDQ4ODBlNiwgMHgwNDgxODAxMCwgMHgwNjBmZjBkMCwgMHgwMTc5ZmVmZiwKKwkweDA3MDBmZmZmLCAweDA1N2RmZWZmLCAweDA3MDBmZmZmLCAweDA2ODEwNWJjLAorCTB4MDVhMDAyMTIsIDB4MDM0OWMwZTQsIDB4MDc4MTgxMWQsIDB4MDcwZmYwOTMsCisJMHgwNTAwMTBmZiwgMHgwNzBmZjA5MywgMHgwNDVjMDQwMSwgMHgwNTgxODBkYiwKKwkweDAyMDQ2MDkyLCAweDA0MDAyMDQ2LCAweDA0NjAwMjAyLCAweDAwNTQwNDAxLAorCTB4MDQ4MjgwZTYsIDB4MDQ1MDA0MjUsIDB4MDcwMDYwZmYsIDB4MDczMGZmZmYsCisJMHgwNzAwMDAwZiwgMHgwNzQyMDAwZiwgMHgwNTgxMDE5MCwgMHgwNmEwMDVhNCwKKwkweDA2NDhhMDAyLCAweDA0ODE4MGU5LCAweDAwMDQ3MDg5LCAweDA3MGZmMDQ3LAorCTB4MDQ1YzA0NDMsIDB4MDc3ODAwZmYsIDB4MDdmMDAwMDAsIDB4MDc4MTgxOGUsCisJMHgwNzc4MDA0NywgMHgwNTAwZTAwMCwgMHgwNDgxODVhYiwgMHgwNzBmZjAwNiwKKwkweDAxODYwMTE3LCAweDAxNzlmZTQ3LCAweDA3MDAwMDBmLCAweDAxMDQ4MGZmLAorCTB4MDU2YzcwNDgsIDB4MDY4MTgxMDIsIDB4MDA3YTBkNGEsIDB4MDQwMDM4MDEsCisJMHgwMjIwZjAwMSwgMHgwMTgwMDEwZiwgMHgwNzYwOGU0OCwgMHgwMzRhNjBmZiwKKwkweDA3MDBmMGZmLCAweDA3NGI4OGZmLCAweDAzNzAwMGZmLCAweDA3MDAwNjAwLAorCTB4MDU1MDA0NDgsIDB4MDc0ZDAwZmYsIDB4MDQ1YTA0NGEsIDB4MDMwNGEwZmYsCisJMHgwNzBmZjAwZiwgMHgwMTU0MDQwNiwgMHgwNTgyMDExNywgMHgwNDk1MDEyMCwKKwkweDA1YTAwMWJkLCAweDAyODY4MTIzLCAweDAxMzRiZmZmLCAweDA3MGZmZmZmLAorCTB4MDEwNDEwMmUsIDB4MDUwZmQwNDEsIDB4MDA4MDAxMjYsIDB4MDU5NTAxMWQsCisJMHgwNWEwMDFiZCwgMHgwMTg2MDExZCwgMHgwMjAyZjAwZSwgMHgwNTJlNDAzMCwKKwkweDA0MGZkMDJmLCAweDA3MGZjMGZmLCAweDA1YTAwMjE4LCAweDAyODAwMDEwLAorCTB4MDQwMGUwMmYsIDB4MDQyZTQwMjAsIDB4MDIwMmYwNTEsIDB4MDAwNDEwMGUsCisJMHgwMDA0YjAwZSwgMHgwNTBmZDA0MSwgMHgwMjRhNmM0NiwgMHgwNDUwMDQyMywKKwkweDA1MDA3MGZmLCAweDAzNjIwMDI0LCAweDA1MDA4MGZmLCAweDA0MDA0MDQ2LAorCTB4MDcwMDUwMGYsIDB4MDMyMDYwMDAsIDB4MDU2MDEwNDgsIDB4MDcwMGEwZmYsCisJMHgwNzAwOTAwYSwgMHgwNzBmZjAwNSwgMHgwNDUwMDQ0NiwgMHgwMDU0MDQyNSwKKwkweDA0ODIwMTU3LCAweDA1NjAxNjIyLCAweDA1MGY4MGZmLCAweDA2M2ZhMDMyLAorCTB4MDYwMDAwMDIsIDB4MDMyMDMwMDAsIDB4MDEyMDQwMDAsIDB4MDMyMDUwMDAsCisJMHgwMTIwYjAwMCwgMHgwMzIwYzAwMCwgMHgwNzYwMTQ0MSwgMHgwNTBmODBmZiwKKwkweDA0M2ZhODUyLCAweDA2MDAwMDAxLCAweDA3MGZmMDU2LCAweDA1NmMwMmZmLAorCTB4MDUwZmIwZmYsIDB4MDcwNTYwZmYsIDB4MDMwNzkwNDEsIDB4MDU2MDBlNDEsCisJMHgwNTBmODBmZiwgMHgwNzNmYTAxMSwgMHgwNjAwMDAzZCwgMHgwNjc4MDA0MywKKwkweDA3ZjAwMDAwLCAweDA2NWEwMDdhLCAweDAxMDg4MGZmLCAweDA0YTAwMWI2LAorCTB4MDU4ZDAxNTAsIDB4MDIwOGEwNGEsIDB4MDEwOGIwNGIsIDB4MDIzODYwMDEsCisJMHgwMzAxMDAwMCwgMHgwNzJlNjMwMCwgMHgwMjgwMDBhOCwgMHgwNTAwZDAwYSwKKwkweDA1NTAwNDA1LCAweDAxNGE2OGZmLCAweDA3MDA5MGZmLCAweDAxNTQwNDBhLAorCTB4MDcwMGMwZmYsIDB4MDYwMGEwMjMsIDB4MDUwMGIwMjQsIDB4MDIyMDYwMDEsCisJMHgwNTYwMTYyMiwgMHgwNTBmODBmZiwgMHgwNjNmYTA0YSwgMHgwNjAwMDAwMiwKKwkweDA1NjAxMDIyLCAweDA1MGY4MGZmLCAweDA0M2ZhODE5LCAweDA2MDAwMDAxLAorCTB4MDYwMGEwMGQsIDB4MDE4MDAxM2MsIDB4MDY3ODAwNDMsIDB4MDcwMDAwZjAsCisJMHgwNTAwMTBmZiwgMHgwMjdjMDAwMSwgMHgwNzAwMDAzMCwgMHgwNzgxMDViMiwKKwkweDAyN2MwMDAxLCAweDA2MDAwMDIwLCAweDA3ODEwNWIyLCAweDAzODAwNWNhLAorCTB4MDU0ODgwZmYsIDB4MDY4MTAwMTAsIDB4MDcwZmYwNTYsIDB4MDUwZmIwZmYsCisJMHgwNDQ4ODBlNSwgMHgwNTgxMDE3ZCwgMHgwNDQ4ODBlNiwgMHgwNDgxODAxMCwKKwkweDAwODAwMTgzLCAweDA1NmMwMmZmLCAweDA1MGZiMGZmLCAweDA3MDU2MGZmLAorCTB4MDcyZTUzMDAsIDB4MDQ0ODgwZTYsIDB4MDQ4MTgwMTAsIDB4MDcyZDUwMDMsCisJMHgwNjc4MDA0MywgMHgwN2YwMDAwMCwgMHgwMTA4ODBmZiwgMHgwNThkMDE4NywKKwkweDAzMzg2MDA1LCAweDAzMDEwMDAwLCAweDAzM2U2MDAwLCAweDA3MDAwMDBjLAorCTB4MDUyZTUyMDAsIDB4MDI4MDAwMTAsIDB4MDEyMDkxOGUsIDB4MDE4MDA0ZTQsCisJMHgwMTIwOTE5MCwgMHgwMTgwMDRlNCwgMHgwMDIwOTE5MiwgMHgwMTgwMDRlNCwKKwkweDAzMjA5MDAwLCAweDAxODAwNGU0LCAweDAxMjA5MTk2LCAweDAxODAwNGU0LAorCTB4MDAyMDkxOTgsIDB4MDE4MDA0ZTQsIDB4MDI0OTMwNzUsIDB4MDY4MTA1MGIsCisJMHgwMTIwOTE5YSwgMHgwMTgwMDRlNCwgMHgwNjYwMWUwMSwgMHgwNTBmODBmZiwKKwkweDA2M2ZhMDI5LCAweDA2MDAwMDA4LCAweDAyMDE1MDEwLCAweDAyMDE2MDUxLAorCTB4MDAwMTcwNTEsIDB4MDAwMTEwNTEsIDB4MDU2MDFhNDEsIDB4MDUwZjgwZmYsCisJMHgwNTNmYTgzYSwgMHgwNjAwMDAwOCwgMHgwNTYwMGU0MSwgMHgwNTBmODBmZiwKKwkweDAxNDY0MDAwLCAweDAzMmZhMDBhLCAweDA3MDA2MDExLCAweDA1MDA3MDEyLAorCTB4MDQwMDgwMTMsIDB4MDcwMDkwMTQsIDB4MDYwMGEwMTUsIDB4MDQwMGIwMTYsCisJMHgwNzAwYzAxNywgMHgwN2MwMDAwMCwgMHgwNzJkNTAwMywgMHgwNjYwMTQ3OSwKKwkweDA1MGY4MGZmLCAweDA0OGQwMWI5LCAweDA2M2ZhMDUxLCAweDA2MDAwMDNlLAorCTB4MDdjMDAwMDAsIDB4MDYwMDUwNTEsIDB4MDQwMGUwMmMsIDB4MDY2MDA2MGUsCisJMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwMzc5ZmYwMCwgMHgwNzAwMDBmZiwKKwkweDA3NmMwMDAwLCAweDA1ODEwMWRkLCAweDA2NjA0ODBlLCAweDA1MDBlMGZmLAorCTB4MDM0MDAwZmYsIDB4MDE1NDA0MjcsIDB4MDU4MjAyMGEsIDB4MDM0MDAwMDUsCisJMHgwNzBmZjAwNSwgMHgwNTVjMDQyOCwgMHgwNDgxMDIwZSwgMHgwMTY4MGUwNSwKKwkweDA1NmMwNDA1LCAweDA2ODE4MWJmLCAweDA0MGY4MDI5LCAweDA1M2ZhODA5LAorCTB4MDcwMDAwMjQsIDB4MDY2MDA2NDksIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksCisJMHgwMzc5ZmYwMCwgMHgwNzAwMDBmZiwgMHgwNzZjMDAwMCwgMHgwNjgxODFiZiwKKwkweDA0MDBlMDQ5LCAweDAzNDAwMDJkLCAweDA1MGY4MDJiLCAweDA1M2ZhODBhLAorCTB4MDYwMDAwMTYsIDB4MDY2MDQ4MGUsIDB4MDMwMmMwZmYsIDB4MDM0MDAwZmYsCisJMHgwMTU0MDQyNywgMHgwNTgyMDIwYywgMHgwNzJkNjAwMCwgMHgwNDYwMDQwZSwKKwkweDA1MGY4MGZmLCAweDAxMDRlMGQxLCAweDAzNzlmZjRlLCAweDA3MDBmZmZmLAorCTB4MDYyZDYwMDIsIDB4MDMyZmEwMDksIDB4MDAwNGQwZDAsIDB4MDc0YjAwNGQsCisJMHgwNzc4MDAwMCwgMHgwN2ZmZmYwMCwgMHgwNTVhMDQ0ZCwgMHgwNzAwMDBmZiwKKwkweDAwMjAxMDA4LCAweDA0MDAyMDUxLCAweDA2MDAzMDUxLCAweDA1MzA0MDAwLAorCTB4MDcwMDAwNjAsIDB4MDMyMDUwMDksIDB4MDcwMDYwMjIsIDB4MDQ2MDA0MGUsCisJMHgwNTBmODBmZiwgMHgwMzJmYTAzYSwgMHgwNjYwM2MwZSwgMHgwNTBmODBmZiwKKwkweDA3M2ZhMDBhLCAweDA3MDAwMDI3LCAweDA1MDAxMGQxLCAweDA0NjAzMjBlLAorCTB4MDUwZjgwZmYsIDB4MDEyZmE4MGEsIDB4MDYwZmYwMGUsIDB4MDU1YzA0MmUsCisJMHgwNDgxMDIxMCwgMHgwN2MwMDAwMCwgMHgwNDAwZTAyNiwgMHgwMDgwMDFjYiwKKwkweDAyMDJjMDI2LCAweDAwODAwMWU2LCAweDA1MDBlMDJlLCAweDAwODAwMWU2LAorCTB4MDQwMGUwNTEsIDB4MDE4MDAyMDksIDB4MDM0OWMwZTQsIDB4MDQ4MTAyMTUsCisJMHgwN2MwMDAwMCwgMHgwMTNlNDAwMCwgMHgwNzBjMDAwMCwgMHgwN2MwMDAwMCwKKwkweDAxM2U0MDAwLCAweDAzMDgwMDAwLCAweDA3YzAwMDAwLCAweDAwOTcwMmY0LAorCTB4MDIyYTUwMDIsIDB4MDc5MDgyMWQsIDB4MDA5MTAyOTEsIDB4MDMwNDAwYTYsCisJMHgwNjc4YWFlNSwgMHgwNjAwMDAwMSwgMHgwMWExODYwYywgMHgwNjYwMGM0MCwKKwkweDA1MGY4MGZmLCAweDAzMmZhMDIxLCAweDA3NGIwMDAwLCAweDA3NmMwNjAwLAorCTB4MDc4MTgyOTMsIDB4MDU2MDA0MDMsIDB4MDUwZjgwZmYsIDB4MDczZmEwMDksCisJMHgwNjAwMDAwMiwgMHgwMjc5ZmYwNCwgMHgwNzAwZmZmZiwgMHgwMTA0NDBkNywKKwkweDAxNzlmZTQ0LCAweDA3MDBmZmZmLCAweDA0NWMwNDA0LCAweDA3ODE4Mjk1LAorCTB4MDM0OWYwNDQsIDB4MDY4MTgyOWUsIDB4MDI0OTUwMDEsIDB4MDY4MTgyOTcsCisJMHgwNjBmZjA3OSwgMHgwNDVjMDQ0MCwgMHgwNzgxODIzYywgMHgwNjQ0ZjA3YSwKKwkweDAwMmZiMDA4LCAweDA2MGZmMDc5LCAweDA0NWMwNDQwLCAweDA3ODE4MjQxLAorCTB4MDY0NGYwN2EsIDB4MDAyZmIwMDgsIDB4MDY0OGYwMDEsIDB4MDc4MTgyODgsCisJMHgwNDYwMGU0MCwgMHgwNTBmODBmZiwgMHgwNjQ4MDAwMSwgMHgwNDgxMDI1NywKKwkweDA0NDhlMDAxLCAweDA0ODEwMjczLCAweDAyNDYwMDAxLCAweDA2NDRmMDAxLAorCTB4MDEyZmE4MGEsIDB4MDQwMDgwNDAsIDB4MDVhMDA0ZWUsIDB4MDI4NjgyOGMsCisJMHgwNWEwMDRkOCwgMHgwNjJkYTAwMSwgMHgwMTNlNDAwMCwgMHgwNjAwMDA4MCwKKwkweDA2OTMwMDEzLCAweDAyOTIwMDEzLCAweDAyODAwMDEwLCAweDA2NDRmMDAxLAorCTB4MDEyZmE4MGEsIDB4MDIwZWYwMDIsIDB4MDA4NjAyNzUsIDB4MDQ2MDA4NDAsCisJMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNjAwMDAwMiwgMHgwNTc4MDEwNSwKKwkweDAwODAwNDQwLCAweDAxN2MwMTA1LCAweDA1MDAwNDAwLCAweDA2ODE4Mjc1LAorCTB4MDY2MDFlMDIsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDYwMDAwMDIsCisJMHgwNDYwMmE0MCwgMHgwNTBmODBmZiwgMHgwNzBmZjAwNSwgMHgwNTNmYTgwOSwKKwkweDA2MDAwMDAyLCAweDA1NWMwNDA1LCAweDA2ODE4Mjc1LCAweDA0MDA4MDQwLAorCTB4MDA0NWUwMDgsIDB4MDVhMDA0ZDgsIDB4MDA4MDAyNTEsIDB4MDY0NGYwMDEsCisJMHgwMTJmYTgwYSwgMHgwNTAwMjBkOCwgMHgwNDYwMDQ0MCwgMHgwNTBmODBmZiwKKwkweDA3M2ZhMDBhLCAweDA2MDAwMDAxLCAweDA2NDgwMDAxLCAweDA3ODE4MjgxLAorCTB4MDUzMDgwMDAsIDB4MDMwNDAwMDAsIDB4MDYwMDkwNDAsIDB4MDRhMDA0ZGMsCisJMHgwMDgwMDI1MSwgMHgwN2EwMDYwYywgMHgwNTRiMDgwMCwgMHgwNTZhMDcwMCwKKwkweDA2NjAwYzQwLCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLCAweDAwODAwMjUxLAorCTB4MDEzZTQwMDAsIDB4MDYwMDAwODAsIDB4MDEyMDkyODgsIDB4MDE4MDA0ZTQsCisJMHgwNjAwOTAwOCwgMHgwNTMwODAwMCwgMHgwNTAwNDAwMCwgMHgwNGEwMDRkYywKKwkweDAwODAwMjUxLCAweDAyMjA5MDAyLCAweDAwODAwMmU1LCAweDAzMjA5MDAwLAorCTB4MDA4MDAyZTUsIDB4MDIyMDkwMDQsIDB4MDA4MDAyZTUsIDB4MDRhMDAyZmQsCisJMHgwNjJkYTAwMSwgMHgwNTMwODAwMCwgMHgwNTAwMjAwMCwgMHgwNjAwOTA0MCwKKwkweDA0YTAwNGRjLCAweDAwODAwMjUyLCAweDAxM2U0MDAwLCAweDA2MDAwMDgwLAorCTB4MDI0OTUwMDEsIDB4MDc4MTgyZGIsIDB4MDQ2MDA4NDAsIDB4MDUwZjgwZmYsCisJMHgwNTNmYTgwOSwgMHgwNjAwMDAwMSwgMHgwNzIxZjAwMCwgMHgwMzQ5ZjAwMywKKwkweDA1ODEwMmFhLCAweDAyNDVmMDFmLCAweDA2MDAwMDAyLCAweDAxODYwMmRiLAorCTB4MDc2MDE0MDAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksIDB4MDY0ODAwMDEsCisJMHgwNTgxMDJkYiwgMHgwNjYwMjQ0MCwgMHgwNTBmODBmZiwgMHgwMTJmYTgwOSwKKwkweDAyMGVmMDAxLCAweDAzODY4MmRiLCAweDAxOWIwMmRiLCAweDA1MDAyMGQ4LAorCTB4MDYyZGEwMDEsIDB4MDYzMDMwMDIsIDB4MDUwMDA0MzAsIDB4MDQ2MDA0NDAsCisJMHgwNTBmODBmZiwgMHgwNzNmYTAxMiwgMHgwNjAwMDAwMSwgMHgwMjhmODJiZiwKKwkweDA1MDA0MGQ4LCAweDA2MmRhMDAxLCAweDA3NjAxZTAwLCAweDA1MGY4MGZmLAorCTB4MDczZmEwMDksIDB4MDYwMDAwMDEsIDB4MDYwZmYwMDQsIDB4MDA1NDA0MDIsCisJMHgwNDgyMDJkOSwgMHgwNjAwNTA1MSwgMHgwNjAwNjA1MSwgMHgwNjYwMjI0MCwKKwkweDA1MGY4MGZmLCAweDA2M2ZhMDFhLCAweDA2MDAwMDAyLCAweDA2NjAwYTQwLAorCTB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDcwMDAwMDMsIDB4MDYwZmYwNDAsCisJMHgwNDVhMDQxZiwgMHgwMTBlYjBmZiwgMHgwNjkzMDAxMywgMHgwMjkyMDAxMywKKwkweDAyODAwMDEwLCAweDA0MDA0MDAyLCAweDAxODAwMmM5LCAweDA0YTAwMmZkLAorCTB4MDYyZGEwMDEsIDB4MDUzMDgwMDAsIDB4MDcwMDUwMDAsIDB4MDYwMDkwNDAsCisJMHgwNGEwMDRkYywgMHgwNTAwODBkOCwgMHgwNWEwMDRlMSwgMHgwNjJkYTAwMSwKKwkweDAyODAwMDEzLCAweDA1MGZkMDA5LCAweDA1MGZkMDQxLCAweDAxM2U0MDAwLAorCTB4MDYwMDAwODAsIDB4MDUzMDgwMDAsIDB4MDMwMTMwMDAsIDB4MDRhMDA0ZGMsCisJMHgwMTA0NDBkNywgMHgwMzQ5ZjA0NCwgMHgwNDgxMDJmMiwgMHgwNjJkYTAwMSwKKwkweDAwOGYwMmYyLCAweDAzZTAwMDAwLCAweDA2MmRhMDAxLCAweDAyODAwMDEzLAorCTB4MDI0OWMwZTUsIDB4MDY4MTAwMTMsIDB4MDYyZGEwMDEsIDB4MDdmMDAwMDAsCisJMHgwN2YwMDAwMCwgMHgwMzNlNTAwMCwgMHgwNzBjMDAwMCwgMHgwMThmMDJmNiwKKwkweDAzODAwMDExLCAweDA1MDAyMGQ4LCAweDA0NjAwNDQwLCAweDA1MGY4MGZmLAorCTB4MDczZmEwMGEsIDB4MDYwMDAwMDEsIDB4MDdjMDAwMDAsIDB4MDAyZmIwMDEsCisJMHgwMzgwMDMwNiwgMHgwMTJmYjAwMCwgMHgwMzA3NTA4NywgMHgwNjhkMDMwNywKKwkweDAzMzg2MDAwLCAweDAzMDIwMDAwLCAweDA0NDgyMDc1LCAweDA2ODEwMzUyLAorCTB4MDY0OGEwZTYsIDB4MDc4MTAzNDcsIDB4MDY0MjAwN2YsIDB4MDY4MTAzNDUsCisJMHgwMzQwMDA3ZSwgMHgwNjBmZjAzOCwgMHgwMTU0MDQ3ZSwgMHgwMmQwMDMzNCwKKwkweDA1NjAwMjdkLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDAzMGVmMDAwLAorCTB4MDI4NjA1MDQsIDB4MDEwN2QwMDAsIDB4MDU2MDA4MDAsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAwOSwgMHgwMzY4MWUwMCwgMHgwNDUwMDQyMCwgMHgwNTBmODBmZiwKKwkweDA3M2ZhMDA5LCAweDA3MDAwMDNmLCAweDAzODAwMzExLCAweDA3MGZmMDdkLAorCTB4MDQ1MDA0N2MsIDB4MDUwZjgwZmYsIDB4MDAyZmE4MTksIDB4MDc4ZDAzMjcsCisJMHgwMjA4MDAwMSwgMHgwMDA4MTAwMiwgMHgwNDQ4ODA3YSwgMHgwNzgxMDMyZSwKKwkweDAzNzlmZjAzLCAweDA3MDAwMGZmLCAweDAxMDgyMDAzLCAweDA2OGQwMzJmLAorCTB4MDIzODYwMDQsIDB4MDMwMTAwMDAsIDB4MDcyZTZjMDAsIDB4MDI4MDAzNTIsCisJMHgwMzgwMDMzYSwgMHgwMzgwMDMzYywgMHgwMjgwMDMzZSwgMHgwMjgwMDM0MCwKKwkweDAzODAwMzQyLCAweDAzODAwMzQ0LCAweDA3MjdjMDA1LCAweDAyODAwMzIzLAorCTB4MDYyN2MwMDgsIDB4MDI4MDAzMjMsIDB4MDYyN2MwMGIsIDB4MDI4MDAzMjMsCisJMHgwNjI3YzAwZSwgMHgwMjgwMDMyMywgMHgwNzI3YzAxMSwgMHgwMjgwMDMyMywKKwkweDAzODAwMzE0LCAweDA1MmU2ODAwLCAweDAyODAwMzUyLCAweDA0NDg4MGU2LAorCTB4MDY4MTA1MzEsIDB4MDUyZTYyMDAsIDB4MDcwZmYwODgsIDB4MDE3OWZlZmYsCisJMHgwNzBmZmZmZiwgMHgwNDgxODUwMSwgMHgwNjBmZjA4MywgMHgwMDg2ODM2ZCwKKwkweDAzM2U2MDAwLCAweDA3MDAwMDAzLCAweDA2OGQwMzUyLCAweDA3Mjg2MDAwLAorCTB4MDdmMDAwMDAsIDB4MDc4ZDAzNTUsIDB4MDM4YzAzMDYsIDB4MDY0OGMwZTYsCisJMHgwNTgxODM3MiwgMHgwNDQ4ZTBlNiwgMHgwNzgxMDM2YSwgMHgwMDQ5MjBlNiwKKwkweDA3ODEwMzY1LCAweDA2YTAwNTZkLCAweDA1MDAxMDg4LCAweDAwNzAwMTAxLAorCTB4MDMxMDAwMDAsIDB4MDAwODgwMDEsIDB4MDMzZTYwMDAsIDB4MDcwMDAwODgsCisJMHgwMjgwMDU1ZSwgMHgwMjM4NjAwMSwgMHgwNzAzMDAwMCwgMHgwMzNlNjAwMCwKKwkweDA2MDAwMDA4LCAweDAyODAwM2YxLCAweDAyNzk5MDc1LCAweDA1MDAwNDBmLAorCTB4MDY4MTAwMTAsIDB4MDY2MDE0NzksIDB4MDUwMDgwZmYsIDB4MDYzMDkwNTIsCisJMHgwNjAwMDAzZSwgMHgwMjgwMDM3NiwgMHgwNjYwMjI3OSwgMHgwNTAwODBmZiwKKwkweDA1MzA5ODEyLCAweDA3MDAwMDQxLCAweDA2NDgwMDdhLCAweDA3ODEwMzdlLAorCTB4MDQ0ODgwNzUsIDB4MDU4MTgzN2UsIDB4MDQwZjgwMDgsIDB4MDcwZmEwMDksCisJMHgwMDQ5MTA3YSwgMHgwMWExODNmMywgMHgwMDc5ODA3NSwgMHgwNjAwMDUwNywKKwkweDA0ODE4NTFjLCAweDA0NDhiMDc1LCAweDA2ODEwMzg1LCAweDAyNDkzMDc1LAorCTB4MDc4MTA1MDksIDB4MDI0OWMwZTYsIDB4MDQ4MTgzZTAsIDB4MDY0OGMwZTYsCisJMHgwNTgxODM5YSwgMHgwNjhkMDM4OSwgMHgwMjM4NjAwMSwgMHgwNzAzMDAwMCwKKwkweDAwNDkxMDdhLCAweDA3ODEwMzkwLCAweDAyMGVmMDgzLCAweDAzODYwMzlhLAorCTB4MDY0ODMwNzUsIDB4MDY4MTAzZWYsIDB4MDY3ODAwN2EsIDB4MDcwMDAwMzUsCisJMHgwM2ExODRjZiwgMHgwNTMwODAwMCwgMHgwNzA2MDAwMCwgMHgwNjAwOTA3OSwKKwkweDA0YTAwNGRjLCAweDAyODAwM2VmLCAweDA0NDg4MDdhLCAweDA2ODEwMzllLAorCTB4MDY0ODMwNzUsIDB4MDU4MTA0ZjksIDB4MDQ0OGQwN2EsIDB4MDY4MTAzYTIsCisJMHgwNjQ4MzA3NSwgMHgwNTgxMDRmOSwgMHgwNjhkMDNhMiwgMHgwMjM4NjAwMSwKKwkweDA3MDMwMDAwLCAweDA0NDRlMDdhLCAweDA2NDgzMDdhLCAweDA0ODE4M2M3LAorCTB4MDQ0ODcwN2EsIDB4MDY4MTAzZWEsIDB4MDY0OGYwN2EsIDB4MDc4MTAzYjIsCisJMHgwNWEwMDRjZiwgMHgwNDAwODA3OSwgMHgwNWEwMDRlZSwgMHgwMDg2ODNjMiwKKwkweDA1YTAwNGQ4LCAweDAyODAwM2VmLCAweDA1NjAxMDdiLCAweDA1MGY4MGZmLAorCTB4MDMyZmEwMDksIDB4MDM0OWMwMDAsIDB4MDU4MTgzYzAsIDB4MDQ2MDBlNzksCisJMHgwNTBmODBmZiwgMHgwNzNmYTAwYSwgMHgwNjAwMDAzZCwgMHgwNjYwMGE3OSwKKwkweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA2MDAwMDEwLCAweDAyODAwM2VmLAorCTB4MDA0NmUwN2EsIDB4MDI4MDAzZWEsIDB4MDYwMDkwMDgsIDB4MDUzMDgwMDAsCisJMHgwNTAwNDAwMCwgMHgwNGEwMDRkYywgMHgwMjgwMDNlZiwgMHgwNTYwMTY3YiwKKwkweDA1MGY4MGZmLCAweDAzMmZhMDExLCAweDA3MGZmMDAwLCAweDA0NTAwNDAxLAorCTB4MDMwNDYwZmYsIDB4MDYwZmYwMjUsIDB4MDA1NDA0NDYsIDB4MDc4MjAzZDEsCisJMHgwMzA0NjBmZiwgMHgwNDA5MjA0NiwgMHgwNWEwMDIxOCwgMHgwNjYwMDY3OSwKKwkweDA1MGY4MGZmLCAweDAwMjAxMDA3LCAweDAxMmZhODBhLCAweDAwNDYwNDdhLAorCTB4MDM0NjMwZmYsIDB4MDUwMDIwZmYsIDB4MDYwMDMwNTEsIDB4MDQ2MDBlNzksCisJMHgwNTBmODBmZiwgMHgwNzNmYTAxMiwgMHgwNjAwMDAwMSwgMHgwMjgwMDNlZiwKKwkweDAzM2U2YTAwLCAweDAyMDIwMDBlLCAweDAyMDc5MDUxLCAweDA3MDAwMDg4LAorCTB4MDc4ZDAzZTQsIDB4MDc0NGMwMDAsIDB4MDEwODgwMDAsIDB4MDMzODYwMDYsCisJMHgwMzAxMDAwMCwgMHgwMjgwMDAxMCwgMHgwNWEwMDRjZiwgMHgwNTMwODAwMCwKKwkweDAzMDIwMDAwLCAweDA2MDA5MDc5LCAweDA0YTAwNGRjLCAweDAzM2U2YTAwLAorCTB4MDMwMjAwMGEsIDB4MDIwNzkwNTEsIDB4MDI4MDAwMTAsIDB4MDQ2MDNlNzksCisJMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwNzBmZjAwMCwgMHgwMTg2MDQwYywKKwkweDA1N2RmZWZmLCAweDA3ZmZmZmZmLCAweDA1ODEwNDBjLCAweDA1MGY4MDAwLAorCTB4MDEyZmE4MTEsIDB4MDA3OWZlMDIsIDB4MDcwMDAwZmYsIDB4MDc3ZDY2ZmYsCisJMHgwNjAwMDBkYywgMHgwNzgxODQwYywgMHgwNjBmZjAwMSwgMHgwMjg2ODQwZCwKKwkweDA2NGIwMDAyLCAweDA2NDIwMDAyLCAweDA2MGZmMDAyLCAweDA1NTAwNDAwLAorCTB4MDUwZjgwZmYsIDB4MDUwMDQwODQsIDB4MDczZmEwMGEsIDB4MDYwMDAwMDIsCisJMHgwN2MwMDAwMCwgMHgwNDYwMDIwMSwgMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwKKwkweDA2MDAwMDAxLCAweDAwNzlmZTAyLCAweDA3MDAwMGZmLCAweDA3N2Q3MmZmLAorCTB4MDcwMDAwZGQsIDB4MDc4MTg0MGMsIDB4MDY0YjAwMDIsIDB4MDY0MjAwMDIsCisJMHgwNjAwMDAwMSwgMHgwMTgwMDQwNiwgMHgwNjA1MDA0YywgMHgwMTgwMDQxZSwKKwkweDA0OTMwNDFhLCAweDA0YTAwNGQ1LCAweDA1NGJjNDUwLCAweDA1ODEwNDIxLAorCTB4MDFkMDA0MjIsIDB4MDE4MDA0MjEsIDB4MDA4MDA0MzIsIDB4MDA4MDA0MzQsCisJMHgwMDgwMDQzMiwgMHgwMDgwMDRhNywgMHgwMTgwMDQzZiwgMHgwMDgwMDQzNCwKKwkweDAxODAwNDcxLCAweDAwODAwNDMyLCAweDAwODAwNDMyLCAweDAwODAwNGFiLAorCTB4MDA4MDA0MzIsIDB4MDE4MDA0YWYsIDB4MDA4MDA0YzQsIDB4MDE4MDA0ODgsCisJMHgwMDgwMDQzMiwgMHgwMDgwMDQzMiwgMHgwMDIwOTQzMiwgMHgwMTgwMDRlNCwKKwkweDAzNzlmZjUwLCAweDA3MGZmZmZmLCAweDA2MGZmMDc5LCAweDA1NWMwNDUwLAorCTB4MDQ4MTA0YTQsIDB4MDAyZmIwMDgsIDB4MDYwZmYwNzksIDB4MDU1YzA0NTAsCisJMHgwNTgxMDRhMywgMHgwNGEwMDRjNywgMHgwMTgwMDQ5YywgMHgwMTc5ZmU1MCwKKwkweDA3MGZmZmZmLCAweDA3MDA1MGZmLCAweDA2MGZmMDc5LCAweDA1NWMwNDA1LAorCTB4MDQ4MTA0NDksIDB4MDAyZmIwMDgsIDB4MDYwZmYwNzksIDB4MDU1YzA0MDUsCisJMHgwNzgxODRhMCwgMHgwNzBmZjA4NywgMHgwMTc5ODBmZiwgMHgwNjAwMDUwNywKKwkweDA2ODE4NDUxLCAweDAyMjAzMDQwLCAweDA1MDAyMDg3LCAweDAwNDlkMDAyLAorCTB4MDQ4MTA0NmIsIDB4MDQ5MzA0NTgsIDB4MDEyNTcwMDAsIDB4MDczYzNmZmYsCisJMHgwNzAwMDAwZiwgMHgwNTJlNDAwMywgMHgwNzJlNTAzMCwgMHgwMzA0YzA1MCwKKwkweDAyNDAwMDU3LCAweDA2NzQwMDU3LCAweDA2MDAwMDAyLCAweDA2ODIwMDE2LAorCTB4MDQwMDIwODMsIDB4MDcwMDMwODQsIDB4MDQwMDQwODUsIDB4MDY2MDIyNzksCisJMHgwNTBmODBmZiwgMHgwNjNmYTAxYSwgMHgwNjAwMDAwMSwgMHgwNWEwMDRjZiwKKwkweDA2YTAwNTc2LCAweDAzM2U2YTAwLCAweDAzMDIwMDBhLCAweDA2MmU1MDIwLAorCTB4MDAzZTQwMDIsIDB4MDcwMDBhMDAsIDB4MDI4MDAzZjEsIDB4MDc0MjAwMDMsCisJMHgwNzgxODQ0ZSwgMHgwMDc5ODAwMiwgMHgwNjAwMDUwNywgMHgwNjgxODQ1MSwKKwkweDAxODAwNDVjLCAweDA1OTMwNDc4LCAweDAxMjU3MDAwLCAweDA3M2MzZmZmLAorCTB4MDcwMDAwMGYsIDB4MDUyZTQwMDMsIDB4MDcyZTUwMzAsIDB4MDMwNGMwNTAsCisJMHgwNjc4MDBlNiwgMHgwNzAwMDA0MSwgMHgwNTgxMDQ3ZCwgMHgwNmEwMDU3ZiwKKwkweDA0ODE4MDE2LCAweDAwMmZiMDA4LCAweDA2NzgwMGU2LCAweDA3MDAwMDQxLAorCTB4MDQ4MTA0ODMsIDB4MDZhMDA1N2YsIDB4MDQ4MTgwMTYsIDB4MDYyZTUwMjAsCisJMHgwMDNlNDAwMiwgMHgwNzAwMGEwMCwgMHgwM2UwMDAwMCwgMHgwMjgwMDAxMCwKKwkweDAzNzlmZjUwLCAweDA3MGZmZmZmLCAweDA2MGZmMDc5LCAweDA1NWMwNDUwLAorCTB4MDc4MTg0OGUsIDB4MDI0NTUwN2EsIDB4MDAyZmIwMDgsIDB4MDYwZmYwNzksCisJMHgwNTVjMDQ1MCwgMHgwNzgxODQ5MywgMHgwMjQ1NTA3YSwgMHgwMDJmYjAwOCwKKwkweDA1NjAwZTUwLCAweDA1MGY4MGZmLCAweDAxMmZhODA5LCAweDAyNDU1MDAxLAorCTB4MDU2MDBlNTAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MGEsIDB4MDA4MDA0OWQsCisJMHgwMDJmYjAwOCwgMHgwMDNlNDAwMiwgMHgwNzAwMGEwMCwgMHgwMjgwMDAxNiwKKwkweDA3OTM4NGEzLCAweDA2MmU1MDIwLCAweDA0MmU0MDAyLCAweDAwMmZiMDA4LAorCTB4MDEzZTQwMDAsIDB4MDUwMDBlMDAsIDB4MDI4MDAwMTYsIDB4MDE3OWZlNTAsCisJMHgwNzBmZmZmZiwgMHgwMTAyMTBmZiwgMHgwMjgwMDAxNiwgMHgwMTc5ZmU1MCwKKwkweDA3MGZmZmZmLCAweDA1MDM0MGZmLCAweDAwODAwNDlkLCAweDAxNzlmZTUwLAorCTB4MDcwZmZmZmYsIDB4MDEwMmUwZmYsIDB4MDc2MDI4MmUsIDB4MDUwZjgwZmYsCisJMHgwNTIyMjAwMCwgMHgwNzIyMzAwMCwgMHgwNTIyNDAwMCwgMHgwNzIyNTAwMCwKKwkweDA3MjI2MDAwLCAweDA1MjI3MDAwLCAweDA1MjI4MDAwLCAweDA3MjI5MDAwLAorCTB4MDcyMmEwMDAsIDB4MDUyMmIwMDAsIDB4MDYzZmEwNTEsIDB4MDcwMDAwMTEsCisJMHgwMjAyYzAyNiwgMHgwNTIyZDAwMCwgMHgwNTJlNDAwYywgMHgwMjgwMDAxNiwKKwkweDAzMDQzMGQ0LCAweDA2MmU1MDA4LCAweDAwODAwMTc2LCAweDA1NjAwZTUwLAorCTB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDM0NjAwMDAsIDB4MDE4MDA0ZDIsCisJMHgwMjQ2MDA3YSwgMHgwMDQ1MjA3YSwgMHgwMDgwMDRkMCwgMHgwMjQ2MDA3YSwKKwkweDA2MDAwMDdhLCAweDA0NjAwZTc5LCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLAorCTB4MDdjMDAwMDAsIDB4MDI5Mjg0ZDUsIDB4MDcwNTAwZTEsIDB4MDdjMDAwMDAsCisJMHgwMjQ1ZjAwOCwgMHgwNDg0MDRkOSwgMHgwMjBlMDAwOCwgMHgwN2MwMDAwMCwKKwkweDA3MGZmMDA5LCAweDA2NWEwMDA4LCAweDA1ODQwNGRlLCAweDAyMGUwMDA4LAorCTB4MDdjMDAwMDAsIDB4MDU4NDA0ZTEsIDB4MDIwZTAwMDgsIDB4MDdjMDAwMDAsCisJMHgwNTMwODAwMCwgMHgwNTAwZDAwMCwgMHgwNGEwMDRkYywgMHgwNGEwMDRlOSwKKwkweDAyODAwMDEwLCAweDA1MmU0MzAwLCAweDA3MmU1MDBjLCAweDA3M2MzZmZmLAorCTB4MDcwMDAwMGYsIDB4MDdjMDAwMDAsIDB4MDY2MDIyMDgsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAxMSwgMHgwNzZhMDAwMCwgMHgwNjgxODRmNywgMHgwNjZhMDAwMSwKKwkweDA0ODEwNGY3LCAweDA0MDAyMDUxLCAweDA3YzAwMDAwLCAweDAwMjAyMDAxLAorCTB4MDdjMDAwMDAsIDB4MDY0ODMwN2EsIDB4MDFhMTg2MDYsIDB4MDVhMDA0Y2MsCisJMHgwNTMwODAwMCwgMHgwNTAwMTAwMCwgMHgwNjAwOTA3OSwgMHgwNGEwMDRkYywKKwkweDAyODAwNTVlLCAweDAyNDljMGU2LCAweDA1ODEwNGY5LCAweDAyODAwMzZkLAorCTB4MDY0ODMwN2EsIDB4MDc4MTgxOTYsIDB4MDVhMDA0Y2YsIDB4MDIyMDk1MDQsCisJMHgwMTgwMDRlNCwgMHgwMjQ5MDA3NSwgMHgwNjgxMDUxOSwgMHgwNDAwMjA4OSwKKwkweDA0NzgwMTAyLCAweDA3ZjAwMDAwLCAweDA1MDAxMDg4LCAweDA2YTAwNTZkLAorCTB4MDQ3NDAxMDEsIDB4MDMxMDAwMDAsIDB4MDYwZmYwMDIsIDB4MDQ1YzA0MDEsCisJMHgwNDgxODUxYSwgMHgwMDA4ODAwMSwgMHgwMzNlNjAwMCwgMHgwNzAwMDBjMCwKKwkweDAzODAwNTVhLCAweDA3ZjAwMDAwLCAweDAyMjA5NTFhLCAweDAxODAwNGU0LAorCTB4MDQwZmQwNzUsIDB4MDQwZmQwN2EsIDB4MDQwZmQwNzksIDB4MDY0ODMwN2EsCisJMHgwNjgxMDUyNSwgMHgwNjc4MDA3NSwgMHgwNjAwMDAwNywgMHgwNDgxODUyYywKKwkweDA3YTAwNjA2LCAweDA2NDg2MDc1LCAweDA2ODE4MTk0LCAweDAyNDkwMDc1LAorCTB4MDc4MTgxOWEsIDB4MDQ0ODcwNzUsIDB4MDQ4MTg1MzQsIDB4MDI4MDA1M2IsCisJMHgwNTMwODAwMCwgMHgwMzAxMDAwMCwgMHgwNjAwOTA3OSwgMHgwNGEwMDRkYywKKwkweDAyODAwMDEwLCAweDA0NDhlMGU2LCAweDA0ODE4MzUyLCAweDAwODAwMTkyLAorCTB4MDUzMDgwMDAsIDB4MDUwMGUwMDAsIDB4MDYwMDkwNzksIDB4MDRhMDA0ZGMsCisJMHgwNDAwODA4OSwgMHgwNWEwMDRlMSwgMHgwMzgwMDU1YSwgMHgwNWEwMDRjYywKKwkweDA1MzA4MDAwLCAweDA3MDBmMDAwLCAweDA2MDA5MDc5LCAweDA3MDAwMDg4LAorCTB4MDZhMDA1NDMsIDB4MDRhMDA0ZGMsIDB4MDI4MDAwMTAsIDB4MDMzODYwMDAsCisJMHgwNzAzMDAwMCwgMHgwN2YwMDAwMCwgMHgwNjhkMDU0NiwgMHgwMzNlNmEwMCwKKwkweDAyMDIwMDBlLCAweDAyMDc5MDUxLCAweDA0NDhiMDc1LCAweDA2ODEwNTUxLAorCTB4MDI0OTMwNzUsIDB4MDY4MTA1NTEsIDB4MDUzMDEwMDUsIDB4MDMwMTAwMDAsCisJMHgwMzgwMDU1MywgMHgwNTMwMTAwNiwgMHgwMzAxMDAwMCwgMHgwNTAwMjA4NywKKwkweDA2NDg1MDAyLCAweDA1ODE4NTUzLCAweDA3NDRjMDAwLCAweDAxMDg4MDAwLAorCTB4MDIwODYwMDEsIDB4MDdjMDAwMDAsIDB4MDUwMDEwODgsIDB4MDZhMDA1NmQsCisJMHgwNjQ0YzAwMSwgMHgwMDA4ODAwMSwgMHgwMzNlNmEwMCwgMHgwMjAyMDAwZSwKKwkweDAwNDkyMGU2LCAweDA1ODE4NTYzLCAweDAyMDc5MDUxLCAweDA3OGQwNTYzLAorCTB4MDYwZmYwODksIDB4MDM0OTkwZmYsIDB4MDc4MTA1NmEsIDB4MDMzODYwMDUsCisJMHgwMzAxMDAwMCwgMHgwMjgwMDAxMCwgMHgwMzM4NjAwNiwgMHgwMzAxMDAwMCwKKwkweDAyODAwMDEwLCAweDA2OGQwNTZkLCAweDAzMzg2MDAwLCAweDA3MDMwMDAwLAorCTB4MDdmMDAwMDAsIDB4MDc4ZDA1NzEsIDB4MDcwZmYwODcsIDB4MDc0ODUwZmYsCisJMHgwNTgxODU3MiwgMHgwN2MwMDAwMCwgMHgwNjhkMDU3NiwgMHgwMjM4NjAwMSwKKwkweDA3MDMwMDAwLCAweDA3ZjAwMDAwLCAweDA2OGQwNTdhLCAweDA3MGZmMDg3LAorCTB4MDc0ODUwZmYsIDB4MDU4MTg1N2IsIDB4MDdjMDAwMDAsIDB4MDUwMDIwODcsCisJMHgwMDQ5ZDAwMiwgMHgwNTgxODU4ZSwgMHgwMDJmYjAwOCwgMHgwNjc4MDBlNiwKKwkweDA3MDAwMDQxLCAweDAwMmZiMDA4LCAweDA1ODE4NThlLCAweDA2YTAwNWE0LAorCTB4MDQ0OGUwMDIsIDB4MDY4MTA1OTEsIDB4MDY0OGEwMDIsIDB4MDQ4MTg1OWIsCisJMHgwNjQ4NjAwMiwgMHgwNzgxMDU5NSwgMHgwMjQwMDA1NywgMHgwNTZhMDJmZiwKKwkweDA3YzAwMDAwLCAweDA2YTAwNWE0LCAweDA2Nzg4MTAyLCAweDA2MDAwMDA0LAorCTB4MDU4MTg1OGUsIDB4MDQwMDIwODksIDB4MDcwZmYwZDQsIDB4MDQ1YzA0MDIsCisJMHgwNzc4MDBmZiwgMHgwN2YwMDAwMCwgMHgwNTgxODU4ZSwgMHgwMDIwMjAxMCwKKwkweDAzOGMwNThlLCAweDA3ZjAwMDAwLCAweDA2NDIwMDAyLCAweDA1ODE4NTljLAorCTB4MDZhMDA1NzYsIDB4MDMzZTZhMDAsIDB4MDMwMjAwMGEsIDB4MDdjMDAwMDAsCisJMHgwN2YwMDAwMCwgMHgwNjBmZjBhMiwgMHgwNTAwMjBmZiwgMHgwNjBmZjBhMiwKKwkweDA0NWMwNDAyLCAweDA1ODE4NWE1LCAweDA3YzAwMDAwLCAweDA1YTAwMjE4LAorCTB4MDM0OTUwNDcsIDB4MDY4MTA1YjAsIDB4MDMyMDkwMWQsIDB4MDI4MDA2MDIsCisJMHgwMjIwOTAxZiwgMHgwMjgwMDYwMiwgMHgwMTQ5ODBlNCwgMHgwNDgxODAxMCwKKwkweDAxM2U0MDAwLCAweDA3MDAzMDAwLCAweDA1NjAwZTM1LCAweDA1MGY4MGZmLAorCTB4MDdhMDA2ZmEsIDB4MDEyMDgwMDMsIDB4MDVhMDA0ZTEsIDB4MDM4MDA1Y2EsCisJMHgwMzIwOTAwOSwgMHgwMjgwMDYwMiwgMHgwMzIwOTAxMSwgMHgwMjgwMDYwMiwKKwkweDAyMjA5MDA3LCAweDAyODAwNjAyLCAweDAzMjA5MDAzLCAweDAyODAwNjAyLAorCTB4MDA0OTgwNDMsIDB4MDQ4MTg1YmMsIDB4MDA0OTcwNDMsIDB4MDU4MTg1YzAsCisJMHgwMjIwOTAwMSwgMHgwMjgwMDYwMiwgMHgwMjIwOTAwZCwgMHgwMjgwMDYwMiwKKwkweDAzMjA5MDBmLCAweDAyODAwNjAyLCAweDAzNDkzMDAwLCAweDA2ODEwNWQzLAorCTB4MDI3YzAwNDUsIDB4MDcwYTAwMDAsIDB4MDY4MTA1ZGMsIDB4MDIyMDkwMGIsCisJMHgwMjgwMDYwMiwgMHgwMjIwOTAxMywgMHgwNTMwODAwMCwgMHgwMTAxMjAwMCwKKwkweDA0YTAwNGRjLCAweDAwODAwMTgzLCAweDAzMjA5MDA1LCAweDAyODAwNjAyLAorCTB4MDcyZTUwMGMsIDB4MDAyMDgwMDIsIDB4MDVhMDA0ZTEsIDB4MDI4MDAwMTAsCisJMHgwMjIwOTAxNSwgMHgwMjgwMDYwMiwgMHgwNzJkNjAwMCwgMHgwNTMwODAwMCwKKwkweDA1MDA3MDAwLCAweDA3ZjAwMDAwLCAweDA3MDA5MGQxLCAweDAzNzlmZjA5LAorCTB4MDcwMGZmZmYsIDB4MDRhMDA0ZGMsIDB4MDMyMDkwMTcsIDB4MDI4MDA2MDIsCisJMHgwMzNlNTAwMCwgMHgwNjAwMDA4MCwgMHgwMjIwOTAxOSwgMHgwMjgwMDYwMiwKKwkweDA3MmQ2MDAwLCAweDAzM2U1MDAwLCAweDA2MDAwMDgwLCAweDA3ZjAwMDAwLAorCTB4MDYwZmYwZDAsIDB4MDE3OWZlZmYsIDB4MDcwMGZmZmYsIDB4MDU3ZGZlZmYsCisJMHgwNzAwZmZmZiwgMHgwNDgxODAxMCwgMHgwMjQwMDA1OCwgMHgwMDY0MjA1OCwKKwkweDA2ODIwMDEwLCAweDAzM2U1MDAwLCAweDA2MDAwMDgwLCAweDA0MDU4MDUxLAorCTB4MDMyMDkwMWIsIDB4MDI4MDA2MDIsIDB4MDUzMDgwMDAsIDB4MDEwMTIwMDAsCisJMHgwNGEwMDRkYywgMHgwMDgwMDE3NiwgMHgwNWEwMDIxOCwgMHgwNTMwODAwMCwKKwkweDA1MDA4MDAwLCAweDA2MDA5MDc5LCAweDA0YTAwNGRjLCAweDA3YzAwMDAwLAorCTB4MDM0OTAwZTQsIDB4MDQ4MTg2MTYsIDB4MDEzZTQwMDAsIDB4MDcwMDAwYzAsCisJMHgwN2YwMDAwMCwgMHgwMzQ5MDBlNCwgMHgwNTgxODYxNCwgMHgwN2MwMDAwMCwKKwkweDAxM2U0MDAwLCAweDA2MDAwMDgwLCAweDA3ZjAwMDAwLCAweDA3ZjAwMDAwLAorCTB4MDdmMDAwMDAsIDB4MDM0OTAwZTQsIDB4MDY4MTA2MGUsIDB4MDI4MDA2MTYsCisJMHgwNzJkNjAwMCwgMHgwMDQ5ODA0MywgMHgwNzgxMDYzMCwgMHgwNjBmZjBkMCwKIAkweDAxNzlmZWZmLCAweDA3MDBmZmZmLCAweDA1N2RmZWZmLCAweDA3MDBmZmZmLAotCTB4MDc4MTA1YmUsIDB4MDVhMDAyMTIsIDB4MDM0OWMwZTQsIDB4MDc4MTgxMWQsCi0JMHgwNzBmZjA5MywgMHgwNTAwMTBmZiwgMHgwNzBmZjA5MywgMHgwNDVjMDQwMSwKLQkweDA1ODE4MGRiLCAweDAyMDQ2MDkyLCAweDA0MDAyMDQ2LCAweDA0NjAwMjAyLAotCTB4MDA1NDA0MDEsIDB4MDQ4MjgwZTYsIDB4MDQ1MDA0MjUsIDB4MDcwMDYwZmYsCi0JMHgwNzMwZmZmZiwgMHgwNzAwMDAwZiwgMHgwNzQyMDAwZiwgMHgwNTgxMDE5MCwKLQkweDA3YTAwNWE2LCAweDA2NDhhMDAyLCAweDA0ODE4MGU5LCAweDAwMDQ3MDg5LAotCTB4MDcwZmYwNDcsIDB4MDQ1YzA0NDMsIDB4MDc3ODAwZmYsIDB4MDdmMDAwMDAsCi0JMHgwNzgxODE4ZSwgMHgwNzc4MDA0NywgMHgwNTAwZTAwMCwgMHgwNDgxODVhZCwKLQkweDA3MGZmMDA2LCAweDAxODYwMTE3LCAweDAxNzlmZTQ3LCAweDA3MDAwMDBmLAotCTB4MDEwNDgwZmYsIDB4MDU2YzcwNDgsIDB4MDY4MTgxMDIsIDB4MDA3YTBkNGEsCi0JMHgwNDAwMzgwMSwgMHgwMjIwZjAwMSwgMHgwMTgwMDEwZiwgMHgwNzYwOGU0OCwKLQkweDAzNGE2MGZmLCAweDA3MDBmMGZmLCAweDA3NGI4OGZmLCAweDAzNzAwMGZmLAotCTB4MDcwMDA2MDAsIDB4MDU1MDA0NDgsIDB4MDc0ZDAwZmYsIDB4MDQ1YTA0NGEsCi0JMHgwMzA0YTBmZiwgMHgwNzBmZjAwZiwgMHgwMTU0MDQwNiwgMHgwNTgyMDExNywKLQkweDA0OTUwMTIwLCAweDA1YTAwMWJkLCAweDAyODY4MTIzLCAweDAxMzRiZmZmLAotCTB4MDcwZmZmZmYsIDB4MDEwNDEwMmUsIDB4MDUwZmQwNDEsIDB4MDA4MDAxMjYsCi0JMHgwNTk1MDExZCwgMHgwNWEwMDFiZCwgMHgwMTg2MDExZCwgMHgwMjAyZjAwZSwKLQkweDA1MmU0MDMwLCAweDA0MGZkMDJmLCAweDA3MGZjMGZmLCAweDA1YTAwMjE4LAotCTB4MDI4MDAwMTAsIDB4MDQwMGUwMmYsIDB4MDQyZTQwMjAsIDB4MDIwMmYwNTEsCi0JMHgwMDA0MTAwZSwgMHgwMDA0YjAwZSwgMHgwNTBmZDA0MSwgMHgwMjRhNmM0NiwKLQkweDA0NTAwNDIzLCAweDA1MDA3MGZmLCAweDAzNjIwMDI0LCAweDA1MDA4MGZmLAotCTB4MDQwMDQwNDYsIDB4MDcwMDUwMGYsIDB4MDMyMDYwMDAsIDB4MDU2MDEwNDgsCi0JMHgwNzAwYTBmZiwgMHgwNzAwOTAwYSwgMHgwNzBmZjAwNSwgMHgwNDUwMDQ0NiwKLQkweDAwNTQwNDI1LCAweDA0ODIwMTU3LCAweDA1NjAxNjIyLCAweDA1MGY4MGZmLAotCTB4MDYzZmEwMzIsIDB4MDYwMDAwMDIsIDB4MDMyMDMwMDAsIDB4MDEyMDQwMDAsCi0JMHgwMzIwNTAwMCwgMHgwMTIwYjAwMCwgMHgwMzIwYzAwMCwgMHgwNzYwMTQ0MSwKLQkweDA1MGY4MGZmLCAweDA0M2ZhODUyLCAweDA2MDAwMDAxLCAweDA3MGZmMDU2LAotCTB4MDU2YzAyZmYsIDB4MDUwZmIwZmYsIDB4MDcwNTYwZmYsIDB4MDMwNzkwNDEsCi0JMHgwNTYwMGU0MSwgMHgwNTBmODBmZiwgMHgwNzNmYTAxMSwgMHgwNjAwMDAzZCwKLQkweDA2NzgwMDQzLCAweDA3ZjAwMDAwLCAweDA2NWEwMDdhLCAweDAxMDg4MGZmLAotCTB4MDRhMDAxYjYsIDB4MDU4ZDAxNTAsIDB4MDIwOGEwNGEsIDB4MDEwOGIwNGIsCi0JMHgwMjM4NjAwMSwgMHgwMzAxMDAwMCwgMHgwNzJlNjMwMCwgMHgwMjgwMDBhOCwKLQkweDA1MDBkMDBhLCAweDA1NTAwNDA1LCAweDAxNGE2OGZmLCAweDA3MDA5MGZmLAotCTB4MDE1NDA0MGEsIDB4MDcwMGMwZmYsIDB4MDYwMGEwMjMsIDB4MDUwMGIwMjQsCi0JMHgwMjIwNjAwMSwgMHgwNTYwMTYyMiwgMHgwNTBmODBmZiwgMHgwNjNmYTA0YSwKLQkweDA2MDAwMDAyLCAweDA1NjAxMDIyLCAweDA1MGY4MGZmLCAweDA0M2ZhODE5LAotCTB4MDYwMDAwMDEsIDB4MDYwMGEwMGQsIDB4MDE4MDAxM2MsIDB4MDY3ODAwNDMsCi0JMHgwNzAwMDBmMCwgMHgwNTAwMTBmZiwgMHgwMjdjMDAwMSwgMHgwNzAwMDAzMCwKLQkweDA3ODEwNWI0LCAweDAyN2MwMDAxLCAweDA2MDAwMDIwLCAweDA3ODEwNWI0LAotCTB4MDM4MDA1Y2MsIDB4MDU0ODgwZmYsIDB4MDY4MTAwMTAsIDB4MDcwZmYwNTYsCi0JMHgwNTBmYjBmZiwgMHgwNDQ4ODBlNSwgMHgwNTgxMDE3ZCwgMHgwNDQ4ODBlNiwKLQkweDA0ODE4MDEwLCAweDAwODAwMTgzLCAweDA1NmMwMmZmLCAweDA1MGZiMGZmLAotCTB4MDcwNTYwZmYsIDB4MDcyZTUzMDAsIDB4MDQ0ODgwZTYsIDB4MDQ4MTgwMTAsCi0JMHgwNzJkNTAwMywgMHgwNjc4MDA0MywgMHgwN2YwMDAwMCwgMHgwMTA4ODBmZiwKLQkweDA1OGQwMTg3LCAweDAzMzg2MDA1LCAweDAzMDEwMDAwLCAweDAzM2U2MDAwLAotCTB4MDcwMDAwMGMsIDB4MDUyZTUyMDAsIDB4MDI4MDAwMTAsIDB4MDEyMDkxOGUsCi0JMHgwMTgwMDRlNCwgMHgwMTIwOTE5MCwgMHgwMTgwMDRlNCwgMHgwMDIwOTE5MiwKLQkweDAxODAwNGU0LCAweDAzMjA5MDAwLCAweDAxODAwNGU0LCAweDAxMjA5MTk2LAotCTB4MDE4MDA0ZTQsIDB4MDAyMDkxOTgsIDB4MDE4MDA0ZTQsIDB4MDI0OTMwNzUsCi0JMHgwNjgxMDUxMCwgMHgwMTIwOTE5YSwgMHgwMTgwMDRlNCwgMHgwNjYwMWUwMSwKLQkweDA1MGY4MGZmLCAweDA2M2ZhMDI5LCAweDA2MDAwMDA4LCAweDAyMDE1MDEwLAotCTB4MDIwMTYwNTEsIDB4MDAwMTcwNTEsIDB4MDAwMTEwNTEsIDB4MDU2MDFhNDEsCi0JMHgwNTBmODBmZiwgMHgwNTNmYTgzYSwgMHgwNjAwMDAwOCwgMHgwNTYwMGU0MSwKLQkweDA1MGY4MGZmLCAweDAxNDY0MDAwLCAweDAzMmZhMDBhLCAweDA3MDA2MDExLAotCTB4MDUwMDcwMTIsIDB4MDQwMDgwMTMsIDB4MDcwMDkwMTQsIDB4MDYwMGEwMTUsCi0JMHgwNDAwYjAxNiwgMHgwNzAwYzAxNywgMHgwN2MwMDAwMCwgMHgwNzJkNTAwMywKLQkweDA2NjAxNDc5LCAweDA1MGY4MGZmLCAweDA0OGQwMWI5LCAweDA2M2ZhMDUxLAotCTB4MDYwMDAwM2UsIDB4MDdjMDAwMDAsIDB4MDYwMDUwNTEsIDB4MDQwMGUwMmMsCi0JMHgwNjYwMDYwZSwgMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwMzc5ZmYwMCwKLQkweDA3MDAwMGZmLCAweDA3NmMwMDAwLCAweDA1ODEwMWRkLCAweDA2NjA0ODBlLAotCTB4MDUwMGUwZmYsIDB4MDM0MDAwZmYsIDB4MDE1NDA0MjcsIDB4MDU4MjAyMGEsCi0JMHgwMzQwMDAwNSwgMHgwNzBmZjAwNSwgMHgwNTVjMDQyOCwgMHgwNDgxMDIwZSwKLQkweDAxNjgwZTA1LCAweDA1NmMwNDA1LCAweDA2ODE4MWJmLCAweDA0MGY4MDI5LAotCTB4MDUzZmE4MDksIDB4MDcwMDAwMjQsIDB4MDY2MDA2NDksIDB4MDUwZjgwZmYsCi0JMHgwMzJmYTAwOSwgMHgwMzc5ZmYwMCwgMHgwNzAwMDBmZiwgMHgwNzZjMDAwMCwKLQkweDA2ODE4MWJmLCAweDA0MDBlMDQ5LCAweDAzNDAwMDJkLCAweDA1MGY4MDJiLAotCTB4MDUzZmE4MGEsIDB4MDYwMDAwMTYsIDB4MDY2MDQ4MGUsIDB4MDMwMmMwZmYsCi0JMHgwMzQwMDBmZiwgMHgwMTU0MDQyNywgMHgwNTgyMDIwYywgMHgwNzJkNjAwMCwKLQkweDA0NjAwNDBlLCAweDA1MGY4MGZmLCAweDAxMDRlMGQxLCAweDAzNzlmZjRlLAotCTB4MDcwMGZmZmYsIDB4MDYyZDYwMDIsIDB4MDMyZmEwMDksIDB4MDAwNGQwZDAsCi0JMHgwNzRiMDA0ZCwgMHgwNzc4MDAwMCwgMHgwN2ZmZmYwMCwgMHgwNTVhMDQ0ZCwKLQkweDA3MDAwMGZmLCAweDAwMjAxMDA4LCAweDA0MDAyMDUxLCAweDA2MDAzMDUxLAotCTB4MDUzMDQwMDAsIDB4MDcwMDAwNjAsIDB4MDMyMDUwMDksIDB4MDcwMDYwMjIsCi0JMHgwNDYwMDQwZSwgMHgwNTBmODBmZiwgMHgwMzJmYTAzYSwgMHgwNjYwM2MwZSwKLQkweDA1MGY4MGZmLCAweDA3M2ZhMDBhLCAweDA3MDAwMDI3LCAweDA1MDAxMGQxLAotCTB4MDQ2MDMyMGUsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MGEsIDB4MDYwZmYwMGUsCi0JMHgwNTVjMDQyZSwgMHgwNDgxMDIxMCwgMHgwN2MwMDAwMCwgMHgwNDAwZTAyNiwKLQkweDAwODAwMWNiLCAweDAyMDJjMDI2LCAweDAwODAwMWU2LCAweDA1MDBlMDJlLAotCTB4MDA4MDAxZTYsIDB4MDQwMGUwNTEsIDB4MDE4MDAyMDksIDB4MDM0OWMwZTQsCi0JMHgwNDgxMDIxNSwgMHgwN2MwMDAwMCwgMHgwMTNlNDAwMCwgMHgwNzBjMDAwMCwKLQkweDA3YzAwMDAwLCAweDAxM2U0MDAwLCAweDAzMDgwMDAwLCAweDA3YzAwMDAwLAotCTB4MDA5NzAyZjQsIDB4MDIyYTUwMDIsIDB4MDc5MDgyMWQsIDB4MDA5MTAyOTEsCi0JMHgwMzA0MDBhNiwgMHgwNjc4YWFlNSwgMHgwNjAwMDAwMSwgMHgwMGExODYwZSwKLQkweDA2NjAwYzQwLCAweDA1MGY4MGZmLCAweDAzMmZhMDIxLCAweDA3NGIwMDAwLAotCTB4MDc2YzA2MDAsIDB4MDc4MTgyOTMsIDB4MDU2MDA0MDMsIDB4MDUwZjgwZmYsCi0JMHgwNzNmYTAwOSwgMHgwNjAwMDAwMiwgMHgwMjc5ZmYwNCwgMHgwNzAwZmZmZiwKLQkweDAxMDQ0MGQ3LCAweDAxNzlmZTQ0LCAweDA3MDBmZmZmLCAweDA0NWMwNDA0LAotCTB4MDc4MTgyOTUsIDB4MDM0OWYwNDQsIDB4MDY4MTgyOWUsIDB4MDI0OTUwMDEsCi0JMHgwNjgxODI5NywgMHgwNjBmZjA3OSwgMHgwNDVjMDQ0MCwgMHgwNzgxODIzYywKLQkweDA2NDRmMDdhLCAweDAwMmZiMDA4LCAweDA2MGZmMDc5LCAweDA0NWMwNDQwLAotCTB4MDc4MTgyNDEsIDB4MDY0NGYwN2EsIDB4MDAyZmIwMDgsIDB4MDY0OGYwMDEsCi0JMHgwNzgxODI4OCwgMHgwNDYwMGU0MCwgMHgwNTBmODBmZiwgMHgwNjQ4MDAwMSwKLQkweDA0ODEwMjU3LCAweDA0NDhlMDAxLCAweDA0ODEwMjczLCAweDAyNDYwMDAxLAotCTB4MDY0NGYwMDEsIDB4MDEyZmE4MGEsIDB4MDQwMDgwNDAsIDB4MDVhMDA0ZWUsCi0JMHgwMjg2ODI4YywgMHgwNWEwMDRkOCwgMHgwNjJkYTAwMSwgMHgwMTNlNDAwMCwKLQkweDA2MDAwMDgwLCAweDA2OTMwMDEzLCAweDAyOTIwMDEzLCAweDAyODAwMDEwLAotCTB4MDY0NGYwMDEsIDB4MDEyZmE4MGEsIDB4MDIwZWYwMDIsIDB4MDA4NjAyNzUsCi0JMHgwNDYwMDg0MCwgMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNjAwMDAwMiwKLQkweDA1NzgwMTA1LCAweDAwODAwNDQwLCAweDAxN2MwMTA1LCAweDA1MDAwNDAwLAotCTB4MDY4MTgyNzUsIDB4MDY2MDFlMDIsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksCi0JMHgwNjAwMDAwMiwgMHgwNDYwMmE0MCwgMHgwNTBmODBmZiwgMHgwNzBmZjAwNSwKLQkweDA1M2ZhODA5LCAweDA2MDAwMDAyLCAweDA1NWMwNDA1LCAweDA2ODE4Mjc1LAotCTB4MDQwMDgwNDAsIDB4MDA0NWUwMDgsIDB4MDVhMDA0ZDgsIDB4MDA4MDAyNTEsCi0JMHgwNjQ0ZjAwMSwgMHgwMTJmYTgwYSwgMHgwNTAwMjBkOCwgMHgwNDYwMDQ0MCwKLQkweDA1MGY4MGZmLCAweDA3M2ZhMDBhLCAweDA2MDAwMDAxLCAweDA2NDgwMDAxLAotCTB4MDc4MTgyODEsIDB4MDUzMDgwMDAsIDB4MDMwNDAwMDAsIDB4MDYwMDkwNDAsCi0JMHgwNGEwMDRkYywgMHgwMDgwMDI1MSwgMHgwNmEwMDYwZSwgMHgwNTRiMDgwMCwKLQkweDA1NmEwNzAwLCAweDA2NjAwYzQwLCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLAotCTB4MDA4MDAyNTEsIDB4MDEzZTQwMDAsIDB4MDYwMDAwODAsIDB4MDEyMDkyODgsCi0JMHgwMTgwMDRlNCwgMHgwNjAwOTAwOCwgMHgwNTMwODAwMCwgMHgwNTAwNDAwMCwKLQkweDA0YTAwNGRjLCAweDAwODAwMjUxLCAweDAyMjA5MDAyLCAweDAwODAwMmU1LAotCTB4MDMyMDkwMDAsIDB4MDA4MDAyZTUsIDB4MDIyMDkwMDQsIDB4MDA4MDAyZTUsCi0JMHgwNGEwMDJmZCwgMHgwNjJkYTAwMSwgMHgwNTMwODAwMCwgMHgwNTAwMjAwMCwKLQkweDA2MDA5MDQwLCAweDA0YTAwNGRjLCAweDAyODAwMDEzLCAweDAxM2U0MDAwLAotCTB4MDYwMDAwODAsIDB4MDI0OTUwMDEsIDB4MDc4MTgyZGIsIDB4MDQ2MDA4NDAsCi0JMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNjAwMDAwMSwgMHgwNzIxZjAwMCwKLQkweDAzNDlmMDAzLCAweDA1ODEwMmFhLCAweDAyNDVmMDFmLCAweDA2MDAwMDAyLAotCTB4MDE4NjAyZGIsIDB4MDc2MDE0MDAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksCi0JMHgwNjQ4MDAwMSwgMHgwNTgxMDJkYiwgMHgwNjYwMjQ0MCwgMHgwNTBmODBmZiwKLQkweDAxMmZhODA5LCAweDAyMGVmMDAxLCAweDAzODY4MmRiLCAweDAxOWIwMmRiLAotCTB4MDUwMDIwZDgsIDB4MDYyZGEwMDEsIDB4MDYzMDMwMDIsIDB4MDUwMDA0MzAsCi0JMHgwNDYwMDQ0MCwgMHgwNTBmODBmZiwgMHgwNzNmYTAxMiwgMHgwNjAwMDAwMSwKLQkweDAyOGY4MmJmLCAweDA1MDA0MGQ4LCAweDA2MmRhMDAxLCAweDA3NjAxZTAwLAotCTB4MDUwZjgwZmYsIDB4MDczZmEwMDksIDB4MDYwMDAwMDEsIDB4MDYwZmYwMDQsCi0JMHgwMDU0MDQwMiwgMHgwNDgyMDJkOSwgMHgwNjAwNTA1MSwgMHgwNjAwNjA1MSwKLQkweDA2NjAyMjQwLCAweDA1MGY4MGZmLCAweDA2M2ZhMDFhLCAweDA2MDAwMDAyLAotCTB4MDY2MDBhNDAsIDB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDcwMDAwMDMsCi0JMHgwNjBmZjA0MCwgMHgwNDVhMDQxZiwgMHgwMTBlYjBmZiwgMHgwNjkzMDAxMywKLQkweDAyOTIwMDEzLCAweDAyODAwMDEwLCAweDA0MDA0MDAyLCAweDAxODAwMmM5LAotCTB4MDRhMDAyZmQsIDB4MDYyZGEwMDEsIDB4MDUzMDgwMDAsIDB4MDcwMDUwMDAsCi0JMHgwNjAwOTA0MCwgMHgwNGEwMDRkYywgMHgwNTAwODBkOCwgMHgwNWEwMDRlMSwKLQkweDA2MmRhMDAxLCAweDAyODAwMDEzLCAweDA1MGZkMDA5LCAweDA1MGZkMDQxLAotCTB4MDEzZTQwMDAsIDB4MDYwMDAwODAsIDB4MDUzMDgwMDAsIDB4MDMwMTMwMDAsCi0JMHgwNGEwMDRkYywgMHgwMTA0NDBkNywgMHgwMzQ5ZjA0NCwgMHgwNDgxMDJmMiwKLQkweDA2MmRhMDAxLCAweDAwOGYwMmYyLCAweDAzZTAwMDAwLCAweDA2MmRhMDAxLAotCTB4MDI4MDAwMTMsIDB4MDI0OWMwZTUsIDB4MDY4MTAwMTMsIDB4MDYyZGEwMDEsCi0JMHgwN2YwMDAwMCwgMHgwN2YwMDAwMCwgMHgwMzNlNTAwMCwgMHgwNzBjMDAwMCwKLQkweDAxOGYwMmY2LCAweDAzODAwMDExLCAweDA1MDAyMGQ4LCAweDA0NjAwNDQwLAotCTB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDYwMDAwMDEsIDB4MDdjMDAwMDAsCi0JMHgwMDJmYjAwMSwgMHgwMzgwMDMwNiwgMHgwMTJmYjAwMCwgMHgwMzA3NTA4NywKLQkweDA2OGQwMzA3LCAweDAzMzg2MDAwLCAweDAzMDIwMDAwLCAweDA0NDgyMDc1LAotCTB4MDY4MTAzNTIsIDB4MDY0OGEwZTYsIDB4MDc4MTAzNDcsIDB4MDY0MjAwN2YsCi0JMHgwNjgxMDM0NSwgMHgwMzQwMDA3ZSwgMHgwNjBmZjAzOCwgMHgwMTU0MDQ3ZSwKLQkweDAyZDAwMzM0LCAweDA1NjAwMjdkLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LAotCTB4MDMwZWYwMDAsIDB4MDI4NjA1MDQsIDB4MDEwN2QwMDAsIDB4MDU2MDA4MDAsCi0JMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwMzY4MWUwMCwgMHgwNDUwMDQyMCwKLQkweDA1MGY4MGZmLCAweDA3M2ZhMDA5LCAweDA3MDAwMDNmLCAweDAzODAwMzExLAotCTB4MDcwZmYwN2QsIDB4MDQ1MDA0N2MsIDB4MDUwZjgwZmYsIDB4MDAyZmE4MTksCi0JMHgwNzhkMDMyNywgMHgwMjA4MDAwMSwgMHgwMDA4MTAwMiwgMHgwNDQ4ODA3YSwKLQkweDA3ODEwMzJlLCAweDAzNzlmZjAzLCAweDA3MDAwMGZmLCAweDAxMDgyMDAzLAotCTB4MDY4ZDAzMmYsIDB4MDIzODYwMDQsIDB4MDMwMTAwMDAsIDB4MDcyZTZjMDAsCi0JMHgwMjgwMDM1MiwgMHgwMzgwMDMzYSwgMHgwMzgwMDMzYywgMHgwMjgwMDMzZSwKLQkweDAyODAwMzQwLCAweDAzODAwMzQyLCAweDAzODAwMzQ0LCAweDA3MjdjMDA1LAotCTB4MDI4MDAzMjMsIDB4MDYyN2MwMDgsIDB4MDI4MDAzMjMsIDB4MDYyN2MwMGIsCi0JMHgwMjgwMDMyMywgMHgwNjI3YzAwZSwgMHgwMjgwMDMyMywgMHgwNzI3YzAxMSwKLQkweDAyODAwMzIzLCAweDAzODAwMzE0LCAweDA1MmU2ODAwLCAweDAyODAwMzUyLAotCTB4MDQ0ODgwZTYsIDB4MDc4MTA1MzMsIDB4MDUyZTYyMDAsIDB4MDcwZmYwODgsCi0JMHgwMTc5ZmVmZiwgMHgwNzBmZmZmZiwgMHgwNDgxODUwMSwgMHgwNjBmZjA4MywKLQkweDAwODY4MzZkLCAweDAzM2U2MDAwLCAweDA3MDAwMDAzLCAweDA2OGQwMzUyLAotCTB4MDcyODYwMDAsIDB4MDdmMDAwMDAsIDB4MDc4ZDAzNTUsIDB4MDM4YzAzMDYsCi0JMHgwNjQ4YzBlNiwgMHgwNTgxODM3MiwgMHgwNDQ4ZTBlNiwgMHgwNzgxMDM2YSwKLQkweDAwNDkyMGU2LCAweDA3ODEwMzY1LCAweDA3YTAwNTZmLCAweDA1MDAxMDg4LAotCTB4MDA3MDAxMDEsIDB4MDMxMDAwMDAsIDB4MDAwODgwMDEsIDB4MDMzZTYwMDAsCi0JMHgwNzAwMDA4OCwgMHgwMzgwMDU2MCwgMHgwMjM4NjAwMSwgMHgwNzAzMDAwMCwKLQkweDAzM2U2MDAwLCAweDA2MDAwMDA4LCAweDAyODAwM2YxLCAweDAyNzk5MDc1LAotCTB4MDUwMDA0MGYsIDB4MDY4MTAwMTAsIDB4MDY2MDE0NzksIDB4MDUwMDgwZmYsCi0JMHgwNjMwOTA1MiwgMHgwNjAwMDAzZSwgMHgwMjgwMDM3NiwgMHgwNjYwMjI3OSwKLQkweDA1MDA4MGZmLCAweDA1MzA5ODEyLCAweDA3MDAwMDQxLCAweDA2NDgwMDdhLAotCTB4MDc4MTAzN2UsIDB4MDQ0ODgwNzUsIDB4MDU4MTgzN2UsIDB4MDQwZjgwMDgsCi0JMHgwNzBmYTAwOSwgMHgwMDQ5MTA3YSwgMHgwMWExODNmMywgMHgwMDc5ODA3NSwKLQkweDA2MDAwNTA3LCAweDA1ODE4NTIxLCAweDA0NDhiMDc1LCAweDA2ODEwMzg1LAotCTB4MDI0OTMwNzUsIDB4MDY4MTA1MGUsIDB4MDI0OWMwZTYsIDB4MDQ4MTgzZTAsCi0JMHgwNjQ4YzBlNiwgMHgwNTgxODM5YSwgMHgwNjhkMDM4OSwgMHgwMjM4NjAwMSwKLQkweDA3MDMwMDAwLCAweDAwNDkxMDdhLCAweDA3ODEwMzkwLCAweDAyMGVmMDgzLAotCTB4MDM4NjAzOWEsIDB4MDY0ODMwNzUsIDB4MDY4MTAzZWYsIDB4MDY3ODAwN2EsCi0JMHgwNzAwMDAzNSwgMHgwM2ExODRjZiwgMHgwNTMwODAwMCwgMHgwNzA2MDAwMCwKLQkweDA2MDA5MDc5LCAweDA0YTAwNGRjLCAweDAyODAwM2VmLCAweDA0NDg4MDdhLAotCTB4MDY4MTAzOWUsIDB4MDY0ODMwNzUsIDB4MDU4MTA0ZjksIDB4MDQ0OGQwN2EsCi0JMHgwNjgxMDNhMiwgMHgwNjQ4MzA3NSwgMHgwNTgxMDRmOSwgMHgwNjhkMDNhMiwKLQkweDAyMzg2MDAxLCAweDA3MDMwMDAwLCAweDA0NDRlMDdhLCAweDA2NDgzMDdhLAotCTB4MDQ4MTgzYzcsIDB4MDQ0ODcwN2EsIDB4MDY4MTAzZWEsIDB4MDY0OGYwN2EsCi0JMHgwNzgxMDNiMiwgMHgwNWEwMDRjZiwgMHgwNDAwODA3OSwgMHgwNWEwMDRlZSwKLQkweDAwODY4M2MyLCAweDA1YTAwNGQ4LCAweDAyODAwM2VmLCAweDA1NjAxMDdiLAotCTB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDM0OWMwMDAsIDB4MDU4MTgzYzAsCi0JMHgwNDYwMGU3OSwgMHgwNTBmODBmZiwgMHgwNzNmYTAwYSwgMHgwNjAwMDAzZCwKLQkweDA2NjAwYTc5LCAweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA2MDAwMDEwLAotCTB4MDI4MDAzZWYsIDB4MDA0NmUwN2EsIDB4MDI4MDAzZWEsIDB4MDYwMDkwMDgsCi0JMHgwNTMwODAwMCwgMHgwNTAwNDAwMCwgMHgwNGEwMDRkYywgMHgwMjgwMDNlZiwKLQkweDA1NjAxNjdiLCAweDA1MGY4MGZmLCAweDAzMmZhMDExLCAweDA3MGZmMDAwLAotCTB4MDQ1MDA0MDEsIDB4MDMwNDYwZmYsIDB4MDYwZmYwMjUsIDB4MDA1NDA0NDYsCi0JMHgwNzgyMDNkMSwgMHgwMzA0NjBmZiwgMHgwNDA5MjA0NiwgMHgwNWEwMDIxOCwKLQkweDA2NjAwNjc5LCAweDA1MGY4MGZmLCAweDAwMjAxMDA3LCAweDAxMmZhODBhLAotCTB4MDA0NjA0N2EsIDB4MDM0NjMwZmYsIDB4MDUwMDIwZmYsIDB4MDYwMDMwNTEsCi0JMHgwNDYwMGU3OSwgMHgwNTBmODBmZiwgMHgwNzNmYTAxMiwgMHgwNjAwMDAwMSwKLQkweDAyODAwM2VmLCAweDAzM2U2YTAwLCAweDAyMDIwMDBlLCAweDAyMDc5MDUxLAotCTB4MDcwMDAwODgsIDB4MDc4ZDAzZTQsIDB4MDc0NGMwMDAsIDB4MDEwODgwMDAsCi0JMHgwMzM4NjAwNiwgMHgwMzAxMDAwMCwgMHgwMjgwMDAxMCwgMHgwNWEwMDRjZiwKLQkweDA1MzA4MDAwLCAweDAzMDIwMDAwLCAweDA2MDA5MDc5LCAweDA0YTAwNGRjLAotCTB4MDMzZTZhMDAsIDB4MDMwMjAwMGEsIDB4MDIwNzkwNTEsIDB4MDI4MDAwMTAsCi0JMHgwNDYwM2U3OSwgMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwNzBmZjAwMCwKLQkweDAxODYwNDBjLCAweDA1N2RmZWZmLCAweDA3ZmZmZmZmLCAweDA1ODEwNDBjLAotCTB4MDUwZjgwMDAsIDB4MDEyZmE4MTEsIDB4MDA3OWZlMDIsIDB4MDcwMDAwZmYsCi0JMHgwNzdkNjZmZiwgMHgwNjAwMDBkYywgMHgwNzgxODQwYywgMHgwNjBmZjAwMSwKLQkweDAyODY4NDBkLCAweDA2NGIwMDAyLCAweDA2NDIwMDAyLCAweDA2MGZmMDAyLAotCTB4MDU1MDA0MDAsIDB4MDUwZjgwZmYsIDB4MDUwMDQwODQsIDB4MDczZmEwMGEsCi0JMHgwNjAwMDAwMiwgMHgwN2MwMDAwMCwgMHgwNDYwMDIwMSwgMHgwNTBmODBmZiwKLQkweDA3M2ZhMDA5LCAweDA2MDAwMDAxLCAweDAwNzlmZTAyLCAweDA3MDAwMGZmLAotCTB4MDc3ZDcyZmYsIDB4MDcwMDAwZGQsIDB4MDc4MTg0MGMsIDB4MDY0YjAwMDIsCi0JMHgwNjQyMDAwMiwgMHgwNjAwMDAwMSwgMHgwMTgwMDQwNiwgMHgwNjA1MDA0YywKLQkweDAxODAwNDFlLCAweDA0OTMwNDFhLCAweDA0YTAwNGQ1LCAweDA1NGJjNDUwLAotCTB4MDU4MTA0MjEsIDB4MDFkMDA0MjIsIDB4MDE4MDA0MjEsIDB4MDA4MDA0MzIsCi0JMHgwMDgwMDQzNCwgMHgwMDgwMDQzMiwgMHgwMDgwMDRhNywgMHgwMTgwMDQzZiwKLQkweDAwODAwNDM0LCAweDAxODAwNDcxLCAweDAwODAwNDMyLCAweDAwODAwNDMyLAotCTB4MDA4MDA0YWIsIDB4MDA4MDA0MzIsIDB4MDE4MDA0YWYsIDB4MDA4MDA0YzQsCi0JMHgwMTgwMDQ4OCwgMHgwMDgwMDQzMiwgMHgwMDgwMDQzMiwgMHgwMDIwOTQzMiwKLQkweDAxODAwNGU0LCAweDAzNzlmZjUwLCAweDA3MGZmZmZmLCAweDA2MGZmMDc5LAotCTB4MDU1YzA0NTAsIDB4MDQ4MTA0YTQsIDB4MDAyZmIwMDgsIDB4MDYwZmYwNzksCi0JMHgwNTVjMDQ1MCwgMHgwNTgxMDRhMywgMHgwNGEwMDRjNywgMHgwMTgwMDQ5YywKLQkweDAxNzlmZTUwLCAweDA3MGZmZmZmLCAweDA3MDA1MGZmLCAweDA2MGZmMDc5LAotCTB4MDU1YzA0MDUsIDB4MDQ4MTA0NDksIDB4MDAyZmIwMDgsIDB4MDYwZmYwNzksCi0JMHgwNTVjMDQwNSwgMHgwNzgxODRhMCwgMHgwNzBmZjA4NywgMHgwMTc5ODBmZiwKLQkweDA2MDAwNTA3LCAweDA2ODE4NDUxLCAweDAyMjAzMDQwLCAweDA1MDAyMDg3LAotCTB4MDA0OWQwMDIsIDB4MDQ4MTA0NmIsIDB4MDQ5MzA0NTgsIDB4MDEyNTcwMDAsCi0JMHgwNzNjM2ZmZiwgMHgwNzAwMDAwZiwgMHgwNTJlNDAwMywgMHgwNzJlNTAzMCwKLQkweDAzMDRjMDUwLCAweDAyNDAwMDU3LCAweDA2NzQwMDU3LCAweDA2MDAwMDAyLAotCTB4MDY4MjAwMTYsIDB4MDQwMDIwODMsIDB4MDcwMDMwODQsIDB4MDQwMDQwODUsCi0JMHgwNjYwMjI3OSwgMHgwNTBmODBmZiwgMHgwNjNmYTAxYSwgMHgwNjAwMDAwMSwKLQkweDA1YTAwNGNmLCAweDA3YTAwNTc4LCAweDAzM2U2YTAwLCAweDAzMDIwMDBhLAotCTB4MDYyZTUwMjAsIDB4MDAzZTQwMDIsIDB4MDcwMDBhMDAsIDB4MDI4MDAzZjEsCi0JMHgwNzQyMDAwMywgMHgwNzgxODQ0ZSwgMHgwMDc5ODAwMiwgMHgwNjAwMDUwNywKLQkweDA2ODE4NDUxLCAweDAxODAwNDVjLCAweDA1OTMwNDc4LCAweDAxMjU3MDAwLAotCTB4MDczYzNmZmYsIDB4MDcwMDAwMGYsIDB4MDUyZTQwMDMsIDB4MDcyZTUwMzAsCi0JMHgwMzA0YzA1MCwgMHgwNjc4MDBlNiwgMHgwNzAwMDA0MSwgMHgwNTgxMDQ3ZCwKLQkweDA3YTAwNTgxLCAweDA0ODE4MDE2LCAweDAwMmZiMDA4LCAweDA2NzgwMGU2LAotCTB4MDcwMDAwNDEsIDB4MDQ4MTA0ODMsIDB4MDdhMDA1ODEsIDB4MDQ4MTgwMTYsCi0JMHgwNjJlNTAyMCwgMHgwMDNlNDAwMiwgMHgwNzAwMGEwMCwgMHgwM2UwMDAwMCwKLQkweDAyODAwMDEwLCAweDAzNzlmZjUwLCAweDA3MGZmZmZmLCAweDA2MGZmMDc5LAotCTB4MDU1YzA0NTAsIDB4MDc4MTg0OGUsIDB4MDI0NTUwN2EsIDB4MDAyZmIwMDgsCi0JMHgwNjBmZjA3OSwgMHgwNTVjMDQ1MCwgMHgwNzgxODQ5MywgMHgwMjQ1NTA3YSwKLQkweDAwMmZiMDA4LCAweDA1NjAwZTUwLCAweDA1MGY4MGZmLCAweDAxMmZhODA5LAotCTB4MDI0NTUwMDEsIDB4MDU2MDBlNTAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MGEsCi0JMHgwMDgwMDQ5ZCwgMHgwMDJmYjAwOCwgMHgwMDNlNDAwMiwgMHgwNzAwMGEwMCwKLQkweDAyODAwMDE2LCAweDA3OTM4NGEzLCAweDA2MmU1MDIwLCAweDA0MmU0MDAyLAotCTB4MDAyZmIwMDgsIDB4MDEzZTQwMDAsIDB4MDUwMDBlMDAsIDB4MDI4MDAwMTYsCi0JMHgwMTc5ZmU1MCwgMHgwNzBmZmZmZiwgMHgwMTAyMTBmZiwgMHgwMjgwMDAxNiwKLQkweDAxNzlmZTUwLCAweDA3MGZmZmZmLCAweDA1MDM0MGZmLCAweDAwODAwNDlkLAotCTB4MDE3OWZlNTAsIDB4MDcwZmZmZmYsIDB4MDEwMmUwZmYsIDB4MDc2MDI4MmUsCi0JMHgwNTBmODBmZiwgMHgwNTIyMjAwMCwgMHgwNzIyMzAwMCwgMHgwNTIyNDAwMCwKLQkweDA3MjI1MDAwLCAweDA3MjI2MDAwLCAweDA1MjI3MDAwLCAweDA1MjI4MDAwLAotCTB4MDcyMjkwMDAsIDB4MDcyMmEwMDAsIDB4MDUyMmIwMDAsIDB4MDYzZmEwNTEsCi0JMHgwNzAwMDAxMSwgMHgwMjAyYzAyNiwgMHgwNTIyZDAwMCwgMHgwNTJlNDAwYywKLQkweDAyODAwMDE2LCAweDAzMDQzMGQ0LCAweDA2MmU1MDA4LCAweDAwODAwMTc2LAotCTB4MDU2MDBlNTAsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDM0NjAwMDAsCi0JMHgwMTgwMDRkMiwgMHgwMjQ2MDA3YSwgMHgwMDQ1MjA3YSwgMHgwMDgwMDRkMCwKLQkweDAyNDYwMDdhLCAweDA2MDAwMDdhLCAweDA0NjAwZTc5LCAweDA1MGY4MGZmLAotCTB4MDMyZmEwMGEsIDB4MDdjMDAwMDAsIDB4MDI5Mjg0ZDUsIDB4MDcwNTAwZTEsCi0JMHgwN2MwMDAwMCwgMHgwMjQ1ZjAwOCwgMHgwNDg0MDRkOSwgMHgwMjBlMDAwOCwKLQkweDA3YzAwMDAwLCAweDA3MGZmMDA5LCAweDA2NWEwMDA4LCAweDA1ODQwNGRlLAotCTB4MDIwZTAwMDgsIDB4MDdjMDAwMDAsIDB4MDU4NDA0ZTEsIDB4MDIwZTAwMDgsCi0JMHgwN2MwMDAwMCwgMHgwNTMwODAwMCwgMHgwNTAwZDAwMCwgMHgwNGEwMDRkYywKLQkweDA0YTAwNGU5LCAweDAyODAwMDEwLCAweDA1MmU0MzAwLCAweDA3MmU1MDBjLAotCTB4MDczYzNmZmYsIDB4MDcwMDAwMGYsIDB4MDdjMDAwMDAsIDB4MDY2MDIyMDgsCi0JMHgwNTBmODBmZiwgMHgwMzJmYTAxMSwgMHgwNzZhMDAwMCwgMHgwNjgxODRmNywKLQkweDA2NmEwMDAxLCAweDA0ODEwNGY3LCAweDA0MDAyMDUxLCAweDA3YzAwMDAwLAotCTB4MDAyMDIwMDEsIDB4MDdjMDAwMDAsIDB4MDY0ODMwN2EsIDB4MDBhMTg2MDgsCi0JMHgwNWEwMDRjYywgMHgwNTMwODAwMCwgMHgwNTAwMTAwMCwgMHgwNjAwOTA3OSwKLQkweDA0YTAwNGRjLCAweDAzODAwNTYwLCAweDAyNDljMGU2LCAweDA1ODEwNGY5LAotCTB4MDI4MDAzNmQsIDB4MDY0ODMwN2EsIDB4MDc4MTgxOTYsIDB4MDVhMDA0Y2YsCi0JMHgwNTMwODAwMCwgMHgwMzAxMzAwMCwgMHgwMzIwOTAwNiwgMHgwNGEwMDRkYywKLQkweDAzM2U2MDAwLCAweDA3MDMwMDAwLCAweDAyODAwMzQ1LCAweDAyNDkwMDc1LAotCTB4MDc4MTA1MWUsIDB4MDQwMDIwODksIDB4MDQ3ODAxMDIsIDB4MDdmMDAwMDAsCi0JMHgwNTAwMTA4OCwgMHgwN2EwMDU2ZiwgMHgwNDc0MDEwMSwgMHgwMzEwMDAwMCwKLQkweDA2MGZmMDAyLCAweDA0NWMwNDAxLCAweDA0ODE4NTFmLCAweDAwMDg4MDAxLAotCTB4MDMzZTYwMDAsIDB4MDcwMDAwYzAsIDB4MDM4MDA1NWMsIDB4MDdmMDAwMDAsCi0JMHgwMjIwOTUxZiwgMHgwMTgwMDRlNCwgMHgwNjQ4MzA3YSwgMHgwNzgxMDUyNywKLQkweDA2NzgwMDc1LCAweDA2MDAwMDA3LCAweDA1ODE4NTJlLCAweDA2YTAwNjA4LAotCTB4MDY0ODYwNzUsIDB4MDY4MTgxOTQsIDB4MDI0OTAwNzUsIDB4MDc4MTgxOWEsCi0JMHgwNDQ4NzA3NSwgMHgwNTgxODUzNiwgMHgwMjgwMDUzZCwgMHgwNTMwODAwMCwKLQkweDAzMDEwMDAwLCAweDA2MDA5MDc5LCAweDA0YTAwNGRjLCAweDAyODAwMDEwLAotCTB4MDQ0OGUwZTYsIDB4MDQ4MTgzNTIsIDB4MDA4MDAxOTIsIDB4MDUzMDgwMDAsCi0JMHgwNTAwZTAwMCwgMHgwNjAwOTA3OSwgMHgwNGEwMDRkYywgMHgwNDAwODA4OSwKLQkweDA1YTAwNGUxLCAweDAzODAwNTVjLCAweDA1YTAwNGNjLCAweDA1MzA4MDAwLAotCTB4MDcwMGYwMDAsIDB4MDYwMDkwNzksIDB4MDcwMDAwODgsIDB4MDZhMDA1NDUsCi0JMHgwNGEwMDRkYywgMHgwMjgwMDAxMCwgMHgwMzM4NjAwMCwgMHgwNzAzMDAwMCwKLQkweDA3ZjAwMDAwLCAweDA3OGQwNTQ4LCAweDAzM2U2YTAwLCAweDAyMDIwMDBlLAotCTB4MDIwNzkwNTEsIDB4MDQ0OGIwNzUsIDB4MDc4MTA1NTMsIDB4MDI0OTMwNzUsCi0JMHgwNzgxMDU1MywgMHgwNTMwMTAwNSwgMHgwMzAxMDAwMCwgMHgwMzgwMDU1NSwKLQkweDA1MzAxMDA2LCAweDAzMDEwMDAwLCAweDA1MDAyMDg3LCAweDA2NDg1MDAyLAotCTB4MDU4MTg1NTUsIDB4MDc0NGMwMDAsIDB4MDEwODgwMDAsIDB4MDIwODYwMDEsCi0JMHgwN2MwMDAwMCwgMHgwNTAwMTA4OCwgMHgwN2EwMDU2ZiwgMHgwNjQ0YzAwMSwKLQkweDAwMDg4MDAxLCAweDAzM2U2YTAwLCAweDAyMDIwMDBlLCAweDAwNDkyMGU2LAotCTB4MDU4MTg1NjUsIDB4MDIwNzkwNTEsIDB4MDc4ZDA1NjUsIDB4MDYwZmYwODksCi0JMHgwMzQ5OTBmZiwgMHgwNzgxMDU2YywgMHgwMzM4NjAwNSwgMHgwMzAxMDAwMCwKLQkweDAyODAwMDEwLCAweDAzMzg2MDA2LCAweDAzMDEwMDAwLCAweDAyODAwMDEwLAotCTB4MDc4ZDA1NmYsIDB4MDMzODYwMDAsIDB4MDcwMzAwMDAsIDB4MDdmMDAwMDAsCi0JMHgwNjhkMDU3MywgMHgwNzBmZjA4NywgMHgwNzQ4NTBmZiwgMHgwNTgxODU3NCwKLQkweDA3YzAwMDAwLCAweDA3OGQwNTc4LCAweDAyMzg2MDAxLCAweDA3MDMwMDAwLAotCTB4MDdmMDAwMDAsIDB4MDY4ZDA1N2MsIDB4MDcwZmYwODcsIDB4MDc0ODUwZmYsCi0JMHgwNTgxODU3ZCwgMHgwN2MwMDAwMCwgMHgwNTAwMjA4NywgMHgwMDQ5ZDAwMiwKLQkweDA1ODE4NTkwLCAweDAwMmZiMDA4LCAweDA2NzgwMGU2LCAweDA3MDAwMDQxLAotCTB4MDAyZmIwMDgsIDB4MDU4MTg1OTAsIDB4MDdhMDA1YTYsIDB4MDQ0OGUwMDIsCi0JMHgwNzgxMDU5MywgMHgwNjQ4YTAwMiwgMHgwNDgxODU5ZCwgMHgwNjQ4NjAwMiwKLQkweDA2ODEwNTk3LCAweDAyNDAwMDU3LCAweDA1NmEwMmZmLCAweDA3YzAwMDAwLAotCTB4MDdhMDA1YTYsIDB4MDY3ODgxMDIsIDB4MDYwMDAwMDQsIDB4MDU4MTg1OTAsCi0JMHgwNDAwMjA4OSwgMHgwNzBmZjBkNCwgMHgwNDVjMDQwMiwgMHgwNzc4MDBmZiwKLQkweDA3ZjAwMDAwLCAweDA1ODE4NTkwLCAweDAwMjAyMDEwLCAweDAzOGMwNTkwLAotCTB4MDdmMDAwMDAsIDB4MDY0MjAwMDIsIDB4MDQ4MTg1OWUsIDB4MDdhMDA1NzgsCi0JMHgwMzNlNmEwMCwgMHgwMzAyMDAwYSwgMHgwN2MwMDAwMCwgMHgwN2YwMDAwMCwKLQkweDA2MGZmMGEyLCAweDA1MDAyMGZmLCAweDA2MGZmMGEyLCAweDA0NWMwNDAyLAotCTB4MDQ4MTg1YTcsIDB4MDdjMDAwMDAsIDB4MDVhMDAyMTgsIDB4MDM0OTUwNDcsCi0JMHgwNzgxMDViMiwgMHgwMzIwOTAxZCwgMHgwMjgwMDYwNCwgMHgwMjIwOTAxZiwKLQkweDAyODAwNjA0LCAweDAxNDk4MGU0LCAweDA0ODE4MDEwLCAweDAxM2U0MDAwLAotCTB4MDcwMDMwMDAsIDB4MDU2MDBlMzUsIDB4MDUwZjgwZmYsIDB4MDdhMDA2ZmMsCi0JMHgwMTIwODAwMywgMHgwNWEwMDRlMSwgMHgwMzgwMDVjYywgMHgwMzIwOTAwOSwKLQkweDAyODAwNjA0LCAweDAzMjA5MDExLCAweDAyODAwNjA0LCAweDAyMjA5MDA3LAotCTB4MDI4MDA2MDQsIDB4MDMyMDkwMDMsIDB4MDI4MDA2MDQsIDB4MDA0OTgwNDMsCi0JMHgwNTgxODViZSwgMHgwMDQ5NzA0MywgMHgwNDgxODVjMiwgMHgwMjIwOTAwMSwKLQkweDAyODAwNjA0LCAweDAyMjA5MDBkLCAweDAyODAwNjA0LCAweDAzMjA5MDBmLAotCTB4MDI4MDA2MDQsIDB4MDM0OTMwMDAsIDB4MDY4MTA1ZDUsIDB4MDI3YzAwNDUsCi0JMHgwNzBhMDAwMCwgMHgwNzgxMDVkZSwgMHgwMjIwOTAwYiwgMHgwMjgwMDYwNCwKLQkweDAyMjA5MDEzLCAweDA1MzA4MDAwLCAweDAxMDEyMDAwLCAweDA0YTAwNGRjLAotCTB4MDA4MDAxODMsIDB4MDMyMDkwMDUsIDB4MDI4MDA2MDQsIDB4MDcyZTUwMGMsCi0JMHgwMDIwODAwMiwgMHgwNWEwMDRlMSwgMHgwMjgwMDAxMCwgMHgwMjIwOTAxNSwKLQkweDAyODAwNjA0LCAweDA3MmQ2MDAwLCAweDA1MzA4MDAwLCAweDA1MDA3MDAwLAotCTB4MDdmMDAwMDAsIDB4MDcwMDkwZDEsIDB4MDM3OWZmMDksIDB4MDcwMGZmZmYsCi0JMHgwNGEwMDRkYywgMHgwMzIwOTAxNywgMHgwMjgwMDYwNCwgMHgwMzNlNTAwMCwKLQkweDA2MDAwMDgwLCAweDAyMjA5MDE5LCAweDAyODAwNjA0LCAweDA3MmQ2MDAwLAotCTB4MDMzZTUwMDAsIDB4MDYwMDAwODAsIDB4MDdmMDAwMDAsIDB4MDYwZmYwZDAsCi0JMHgwMTc5ZmVmZiwgMHgwNzAwZmZmZiwgMHgwNTdkZmVmZiwgMHgwNzAwZmZmZiwKLQkweDA0ODE4MDEwLCAweDAyNDAwMDU4LCAweDAwNjQyMDU4LCAweDA2ODIwMDEwLAotCTB4MDMzZTUwMDAsIDB4MDYwMDAwODAsIDB4MDQwNTgwNTEsIDB4MDMyMDkwMWIsCi0JMHgwMjgwMDYwNCwgMHgwNTMwODAwMCwgMHgwMTAxMjAwMCwgMHgwNGEwMDRkYywKLQkweDAwODAwMTc2LCAweDA1YTAwMjE4LCAweDA1MzA4MDAwLCAweDA1MDA4MDAwLAotCTB4MDYwMDkwNzksIDB4MDRhMDA0ZGMsIDB4MDdjMDAwMDAsIDB4MDM0OTAwZTQsCi0JMHgwNTgxODYxOCwgMHgwMTNlNDAwMCwgMHgwNzAwMDBjMCwgMHgwN2YwMDAwMCwKLQkweDAzNDkwMGU0LCAweDA0ODE4NjE2LCAweDA3YzAwMDAwLCAweDAxM2U0MDAwLAotCTB4MDYwMDAwODAsIDB4MDdmMDAwMDAsIDB4MDdmMDAwMDAsIDB4MDdmMDAwMDAsCi0JMHgwMzQ5MDBlNCwgMHgwNjgxMDYxMCwgMHgwMzgwMDYxOCwgMHgwNzJkNjAwMCwKLQkweDAwNDk4MDQzLCAweDA2ODEwNjMyLCAweDA2MGZmMGQwLCAweDAxNzlmZWZmLAotCTB4MDcwMGZmZmYsIDB4MDU3ZGZlZmYsIDB4MDcwMGZmZmYsIDB4MDU4MTg1ZTIsCi0JMHgwNTBmODAzMCwgMHgwMzJmYTAwOSwgMHgwMzc5ZmYwMCwgMHgwNzAwZmZmZiwKLQkweDA3MGZmMGQxLCAweDAxNzlmZWZmLCAweDA3MDBmZmZmLCAweDA1NWMwNDAwLAotCTB4MDc4MTA1ZTIsIDB4MDQwMDQwNTEsIDB4MDI4MDA2N2EsIDB4MDZhMDA2ZGMsCi0JMHgwNjJkNjAwMSwgMHgwMjBlZjAwNCwgMHgwMzg2MDVlNCwgMHgwNjYwMDAwNCwKLQkweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDA3NGIwMDAwLCAweDA1MDAyMDAwLAotCTB4MDc2OWZmMDAsIDB4MDE2NDA4MDAsIDB4MDc4MjA1ZTQsIDB4MDE2NDBlMDAsCi0JMHgwNTgyODVlNCwgMHgwNzBmZjAzNiwgMHgwNDVjMDQwNCwgMHgwNTgxODY0ZCwKLQkweDA3MmQ2MDAwLCAweDA1MGY4MDMwLCAweDAzMmZhMDA5LCAweDAzNzlmZjAwLAorCTB4MDQ4MTg1ZTAsIDB4MDUwZjgwMzAsIDB4MDMyZmEwMDksIDB4MDM3OWZmMDAsCiAJMHgwNzAwZmZmZiwgMHgwNzBmZjBkMSwgMHgwMTc5ZmVmZiwgMHgwNzAwZmZmZiwKLQkweDA1NWMwNDAwLCAweDA3ODEwNWUyLCAweDA0NDgyMDM0LCAweDA3ODEwNWZmLAotCTB4MDY0ODMwMzQsIDB4MDU4MTg1ZmYsIDB4MDcwZmYwZDQsIDB4MDc3ODAwZmYsCi0JMHgwNzAwMDBmMCwgMHgwMzdjMDBmZiwgMHgwNjAwMDAxMCwgMHgwNjgxMDY3YSwKLQkweDA2YTAwNmQ2LCAweDAyNDkwMGU1LCAweDA2ODEwNjVkLCAweDAzM2U1MDAwLAotCTB4MDYwMDAwODAsIDB4MDI4MDAwMTAsIDB4MDQ2MDFjMDQsIDB4MDUwZjgwZmYsCi0JMHgwNTNmYTgwOSwgMHgwNjAwMDAyMCwgMHgwMzBlZjA0MSwgMHgwMzg2MDVlZSwKLQkweDA2MmQ2MDAyLCAweDA1NjAyYTQxLCAweDA1MGY4MGZmLCAweDAxMmZhODA5LAotCTB4MDYwZmYwZDAsIDB4MDc0YjAwZmYsIDB4MDQ1YzA0MDEsIDB4MDU4MTg2NzgsCi0JMHgwNjJkNjAwMSwgMHgwNzYwMjg0MSwgMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwKLQkweDA2MDAwMDAxLCAweDA3MGZmMGQxLCAweDA1NGI4MGZmLCAweDA3NGIwMDAzLAotCTB4MDU1YzA0MDMsIDB4MDU4MTg2NzgsIDB4MDMzZTUwMDAsIDB4MDYwMDAwODAsCi0JMHgwMDgwMDcwZSwgMHgwNzYwMDA0MSwgMHgwMjgwMDY1ZSwgMHgwNmEwMDZkNiwKLQkweDAyNDkwMGU1LCAweDA2ODEwNjgwLCAweDAzM2U1MDAwLCAweDA2MDAwMDgwLAotCTB4MDI4MDAwMTAsIDB4MDZhMDA2YzIsIDB4MDMwZWYwNDEsIDB4MDI4NjA1ZjIsCi0JMHgwNDA1ODA1MSwgMHgwNzJkNjAwMCwgMHgwNTYwMTA0MSwgMHgwNTBmODBmZiwKLQkweDAxMmZhODA5LCAweDA2MDBhMGQwLCAweDA1MDBiMGQxLCAweDA2MmQ2MDAxLAotCTB4MDdmMDAwMDAsIDB4MDdmMDAwMDAsIDB4MDYwMGMwZDAsIDB4MDUwMGQwZDEsCi0JMHgwNjJkNjAwMiwgMHgwMjc5ZmYwZCwgMHgwN2ZmMDAwMCwgMHgwNDRkODAwZCwKLQkweDA2MGZmMGQwLCAweDA3NGIwMGZmLCAweDA2NWEwMDBkLCAweDA2NjAxMjAxLAotCTB4MDUwZjgwZmYsIDB4MDczZmEwMjIsIDB4MDcwMDAwMDUsIDB4MDA3OWZlMGQsCi0JMHgwNzAwMDBmZiwgMHgwNTAwMjBmZiwgMHgwNTYwMmE0MSwgMHgwNTBmODBmZiwKLQkweDA3M2ZhMDBhLCAweDA2MDAwMDAxLCAweDAyMGVmMDA0LCAweDAyODYwNmJmLAotCTB4MDQ2MDFjMDQsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDYwMDAwMDEsCi0JMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwgMHgwNjAwMDAyMCwgMHgwNzYwMjg0MSwKLQkweDA1MGY4MGZmLCAweDA3M2ZhMDA5LCAweDA2MDAwMDAxLCAweDAyNzlmZjAyLAotCTB4MDcwMDAwZmYsIDB4MDY3ODAwMGQsIDB4MDcwMGZmMDAsIDB4MDY1YTAwMDIsCi0JMHgwNzYwMjg0MSwgMHgwNTBmODBmZiwgMHgwNzNmYTAwYSwgMHgwNjAwMDAwMSwKLQkweDA3NjAwMDQxLCAweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA2MDAwMDAxLAotCTB4MDc2MDEyNDEsIDB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDYwMDAwMDIsCi0JMHgwMzNlNTAwMCwgMHgwNjAwMDA4MCwgMHgwMDgwMDcwZSwgMHgwNDBmODAzMiwKLQkweDA3M2ZhMDExLCAweDA2MDAwMDAxLCAweDA2MGZmMDAyLCAweDA1NWMwNDAzLAotCTB4MDU4MTg2Y2EsIDB4MDAwNDEwNTEsIDB4MDdjMDAwMDAsIDB4MDQ2MDA0MDIsCi0JMHgwNDUwMDQzMiwgMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNjAwMDAyMCwKLQkweDAwNDAwNDAyLCAweDAxNjgwZWZmLCAweDA3MDAzMGZmLCAweDA0MGY4MDMyLAotCTB4MDUzZmE4MGEsIDB4MDYwMDAwMDEsIDB4MDdjMDAwMDAsIDB4MDI0OTAwZTUsCi0JMHgwNjgxMDZkOSwgMHgwN2MwMDAwMCwgMHgwMzNlNTAwMCwgMHgwNzAwMDBjMCwKLQkweDA3YzAwMDAwLCAweDA1MDA0MDM2LCAweDA2MDAwMGQwLCAweDAxNzlmZTAwLAotCTB4MDcwMGZmZmYsIDB4MDU3ZGZlZmYsIDB4MDcwMGZmZmYsIDB4MDY4MTA2ZmIsCi0JMHgwNzAwMDBkMSwgMHgwMzc5ZmYwMCwgMHgwNzAwZmZmZiwgMHgwNjAwNTA1MSwKLQkweDA2MGZmMDMxLCAweDA1NTAwNDA1LCAweDA1MGY4MGZmLCAweDA3M2ZhMDA5LAotCTB4MDYwMDAwMDIsIDB4MDIwZWYwMDQsIDB4MDM4NjA2ZjUsIDB4MDQ2MDA0MDQsCi0JMHgwNTBmODBmZiwgMHgwMTJmYTgwOSwgMHgwMDc5ZmUwMSwgMHgwNzAwZmZmZiwKLQkweDA1NWMwNDAwLCAweDA2ODEwNmZiLCAweDAxNDAwNDA1LCAweDA3MDA1MGZmLAotCTB4MDU3ZGUwZmYsIDB4MDYwMDAwMDcsIDB4MDU4MTg2ZTcsIDB4MDQwMDQwNTEsCi0JMHgwN2MwMDAwMCwgMHgwNzJkNjAwMCwgMHgwN2YwMDAwMCwgMHgwN2YwMDAwMCwKLQkweDAwMDExMGQwLCAweDAxMDEyMGQxLCAweDA2MmQ2MDAxLCAweDA3ZjAwMDAwLAotCTB4MDdmMDAwMDAsIDB4MDIwMTMwZDAsIDB4MDEwMTQwZDEsIDB4MDYyZDYwMDIsCi0JMHgwMTAxNzBkNCwgMHgwN2YwMDAwMCwgMHgwMjAxNTBkMCwgMHgwMzAxNjBkMSwKLQkweDA1M2ZhODNhLCAweDA2MDAwMDA4LCAweDA3YzAwMDAwLCAweDA3NjAwYzQxLAotCTB4MDUwZjgwZmYsIDB4MDczZmEwMDksIDB4MDYwMDAwMDEsIDB4MDQ3ODAxMDIsCi0JMHgwN2ZmZmYwMCwgMHgwNDZhMDcwMiwgMHgwNTBmODBmZiwgMHgwNzNmYTAwYSwKLQkweDA2MDAwMDAxLCAweDA1NjAwZTQxLCAweDA1MGY4MGZmLCAweDAzMmZhMDY5LAotCTB4MDM4MDAwNTMsIDB4YmE2YjRlMzQsIDB4MDI4MDAwMDQsIDB4MDAwMDAwMDAsCi0JMHgwMDAwODAwMCwgMHgwMDAwMDUxOCwgMHgwNDBmODAxZiwgMHgwMTJmYThjOSwKLQkweDA0MGY4MDFmLCAweDA3M2ZhMDgxLCAweDA2MDAwMDEwLCAweDAzMjAwMDA1LAotCTB4MDc0MjAwMDAsIDB4MDUwZmIwMDAsIDB4MDQwZjgwMWYsIDB4MDczZmEwMTEsCi0JMHgwNjAwMDAzOCwgMHgwNDBmODAxZiwgMHgwNTNmYTg1OSwgMHgwNzAwMDAzYSwKLQkweDA1MGZlMDAwLCAweDA1ODE4MDBhLCAweDA2ODQwMDNkLCAweDA0OTU4MDE5LAotCTB4MDMwZTAwMTEsIDB4MDcyZTQyMDAsIDB4MDM4MDAwMTQsIDB4MDI5MTAwMWYsCi0JMHgwNTAwMTBjMCwgMHgwNDQ4MjAwMSwgMHgwNTgxODBlOCwgMHgwNjQ4MzAwMSwKLQkweDA3ODE4MTRiLCAweDAyOTIwMDI5LCAweDA2OGIwMDI5LCAweDAxOGEwMTUwLAotCTB4MDUwMDEwYzAsIDB4MDY3ODAwMDEsIDB4MDUwMDA3YzAsIDB4MDY4MTgyMjMsCi0JMHgwNjc4MDAwMSwgMHgwNTAwZjgwMCwgMHgwNzgxODI2MywgMHgwMzkxMDAzMCwKLQkweDA0MGZlMDI5LCAweDAzODYwMDMwLCAweDA3NmMwMDFkLCAweDA0ODEwMjk0LAotCTB4MDc2YzBhMWQsIDB4MDQ4MTAyYjksIDB4MDI5MjAwM2QsIDB4MDQwZmUwMmYsCi0JMHgwMjg2MDAzZCwgMHgwNjAwMDAxMywgMHgwNTBmYjAwMCwgMHgwNjZjMDA3MywKLQkweDA2ODEwM2MyLCAweDAyOTcwMDNkLCAweDAxNDkyMGU0LCAweDA0ODE4MDNkLAotCTB4MDM0MDAwMDAsIDB4MDc2YzBhMDAsIDB4MDQ4MTgwMzQsIDB4MDc5NjAwM2YsCi0JMHgwM2I5MDBiOCwgMHgwNTkwODAxNCwgMHgwMTAxNzBlMSwgMHgwNzc4MDAxNywKLQkweDAzZTAwMDAwLCAweDA2ODEwMDkyLCAweDA1MDAxMGZmLCAweDAxNzlmZTE3LAorCTB4MDU1YzA0MDAsIDB4MDY4MTA1ZTAsIDB4MDQwMDQwNTEsIDB4MDM4MDA2NzgsCisJMHgwNmEwMDZkYSwgMHgwNjJkNjAwMSwgMHgwMjBlZjAwNCwgMHgwMzg2MDVlMiwKKwkweDA2NjAwMDA0LCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDA3NGIwMDAwLAorCTB4MDUwMDIwMDAsIDB4MDc2OWZmMDAsIDB4MDE2NDA4MDAsIDB4MDc4MjA1ZTIsCisJMHgwMTY0MGUwMCwgMHgwNTgyODVlMiwgMHgwNzBmZjAzNiwgMHgwNDVjMDQwNCwKKwkweDA1ODE4NjRiLCAweDA3MmQ2MDAwLCAweDA1MGY4MDMwLCAweDAzMmZhMDA5LAorCTB4MDM3OWZmMDAsIDB4MDcwMGZmZmYsIDB4MDcwZmYwZDEsIDB4MDE3OWZlZmYsCisJMHgwNzAwZmZmZiwgMHgwNTVjMDQwMCwgMHgwNjgxMDVlMCwgMHgwNDQ4MjAzNCwKKwkweDA2ODEwNWZkLCAweDA2NDgzMDM0LCAweDA0ODE4NWZkLCAweDA3MGZmMGQ0LAorCTB4MDc3ODAwZmYsIDB4MDcwMDAwZjAsIDB4MDM3YzAwZmYsIDB4MDYwMDAwMTAsCisJMHgwNzgxMDY3OCwgMHgwN2EwMDZkNCwgMHgwMjQ5MDBlNSwgMHgwNjgxMDY1YiwKKwkweDAzM2U1MDAwLCAweDA2MDAwMDgwLCAweDAyODAwMDEwLCAweDA0NjAxYzA0LAorCTB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDYwMDAwMjAsIDB4MDMwZWYwNDEsCisJMHgwMjg2MDVlYywgMHgwNjJkNjAwMiwgMHgwNTYwMmE0MSwgMHgwNTBmODBmZiwKKwkweDAxMmZhODA5LCAweDA2MGZmMGQwLCAweDA3NGIwMGZmLCAweDA0NWMwNDAxLAorCTB4MDQ4MTg2NzYsIDB4MDYyZDYwMDEsIDB4MDc2MDI4NDEsIDB4MDUwZjgwZmYsCisJMHgwNTNmYTgwOSwgMHgwNjAwMDAwMSwgMHgwNzBmZjBkMSwgMHgwNTRiODBmZiwKKwkweDA3NGIwMDAzLCAweDA1NWMwNDAzLCAweDA0ODE4Njc2LCAweDAzM2U1MDAwLAorCTB4MDYwMDAwODAsIDB4MDE4MDA3MGMsIDB4MDc2MDAwNDEsIDB4MDM4MDA2NWMsCisJMHgwN2EwMDZkNCwgMHgwMjQ5MDBlNSwgMHgwNzgxMDY3ZSwgMHgwMzNlNTAwMCwKKwkweDA2MDAwMDgwLCAweDAyODAwMDEwLCAweDA3YTAwNmMwLCAweDAzMGVmMDQxLAorCTB4MDM4NjA1ZjAsIDB4MDQwNTgwNTEsIDB4MDcyZDYwMDAsIDB4MDU2MDEwNDEsCisJMHgwNTBmODBmZiwgMHgwMTJmYTgwOSwgMHgwNjAwYTBkMCwgMHgwNTAwYjBkMSwKKwkweDA2MmQ2MDAxLCAweDA3ZjAwMDAwLCAweDA3ZjAwMDAwLCAweDA2MDBjMGQwLAorCTB4MDUwMGQwZDEsIDB4MDYyZDYwMDIsIDB4MDI3OWZmMGQsIDB4MDdmZjAwMDAsCisJMHgwNDRkODAwZCwgMHgwNjBmZjBkMCwgMHgwNzRiMDBmZiwgMHgwNjVhMDAwZCwKKwkweDA2NjAxMjAxLCAweDA1MGY4MGZmLCAweDA3M2ZhMDIyLCAweDA3MDAwMDA1LAorCTB4MDA3OWZlMGQsIDB4MDcwMDAwZmYsIDB4MDUwMDIwZmYsIDB4MDU2MDJhNDEsCisJMHgwNTBmODBmZiwgMHgwNzNmYTAwYSwgMHgwNjAwMDAwMSwgMHgwMjBlZjAwNCwKKwkweDAzODYwNmJkLCAweDA0NjAxYzA0LCAweDA1MGY4MGZmLCAweDA1M2ZhODA5LAorCTB4MDYwMDAwMDEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MGEsIDB4MDYwMDAwMjAsCisJMHgwNzYwMjg0MSwgMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwgMHgwNjAwMDAwMSwKKwkweDAyNzlmZjAyLCAweDA3MDAwMGZmLCAweDA2NzgwMDBkLCAweDA3MDBmZjAwLAorCTB4MDY1YTAwMDIsIDB4MDc2MDI4NDEsIDB4MDUwZjgwZmYsIDB4MDczZmEwMGEsCisJMHgwNjAwMDAwMSwgMHgwNzYwMDA0MSwgMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwKKwkweDA2MDAwMDAxLCAweDA3NjAxMjQxLCAweDA1MGY4MGZmLCAweDA3M2ZhMDBhLAorCTB4MDYwMDAwMDIsIDB4MDMzZTUwMDAsIDB4MDYwMDAwODAsIDB4MDE4MDA3MGMsCisJMHgwNDBmODAzMiwgMHgwNzNmYTAxMSwgMHgwNjAwMDAwMSwgMHgwNjBmZjAwMiwKKwkweDA1NWMwNDAzLCAweDA0ODE4NmM4LCAweDAwMDQxMDUxLCAweDA3YzAwMDAwLAorCTB4MDQ2MDA0MDIsIDB4MDQ1MDA0MzIsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksCisJMHgwNjAwMDAyMCwgMHgwMDQwMDQwMiwgMHgwMTY4MGVmZiwgMHgwNzAwMzBmZiwKKwkweDA0MGY4MDMyLCAweDA1M2ZhODBhLCAweDA2MDAwMDAxLCAweDA3YzAwMDAwLAorCTB4MDI0OTAwZTUsIDB4MDc4MTA2ZDcsIDB4MDdjMDAwMDAsIDB4MDMzZTUwMDAsCisJMHgwNzAwMDBjMCwgMHgwN2MwMDAwMCwgMHgwNTAwNDAzNiwgMHgwNjAwMDBkMCwKKwkweDAxNzlmZTAwLCAweDA3MDBmZmZmLCAweDA1N2RmZWZmLCAweDA3MDBmZmZmLAorCTB4MDc4MTA2ZjksIDB4MDcwMDAwZDEsIDB4MDM3OWZmMDAsIDB4MDcwMGZmZmYsCisJMHgwNjAwNTA1MSwgMHgwNjBmZjAzMSwgMHgwNTUwMDQwNSwgMHgwNTBmODBmZiwKKwkweDA3M2ZhMDA5LCAweDA2MDAwMDAyLCAweDAyMGVmMDA0LCAweDAzODYwNmYzLAorCTB4MDQ2MDA0MDQsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksIDB4MDA3OWZlMDEsCisJMHgwNzAwZmZmZiwgMHgwNTVjMDQwMCwgMHgwNzgxMDZmOSwgMHgwMTQwMDQwNSwKKwkweDA3MDA1MGZmLCAweDA1N2RlMGZmLCAweDA2MDAwMDA3LCAweDA0ODE4NmU1LAorCTB4MDQwMDQwNTEsIDB4MDdjMDAwMDAsIDB4MDcyZDYwMDAsIDB4MDdmMDAwMDAsCisJMHgwN2YwMDAwMCwgMHgwMDAxMTBkMCwgMHgwMTAxMjBkMSwgMHgwNjJkNjAwMSwKKwkweDA3ZjAwMDAwLCAweDA3ZjAwMDAwLCAweDAyMDEzMGQwLCAweDAxMDE0MGQxLAorCTB4MDYyZDYwMDIsIDB4MDEwMTcwZDQsIDB4MDdmMDAwMDAsIDB4MDIwMTUwZDAsCisJMHgwMzAxNjBkMSwgMHgwNTNmYTgzYSwgMHgwNjAwMDAwOCwgMHgwN2MwMDAwMCwKKwkweDA3NjAwYzQxLCAweDA1MGY4MGZmLCAweDA3M2ZhMDA5LCAweDA2MDAwMDAxLAorCTB4MDQ3ODAxMDIsIDB4MDdmZmZmMDAsIDB4MDQ2YTA3MDIsIDB4MDUwZjgwZmYsCisJMHgwNzNmYTAwYSwgMHgwNjAwMDAwMSwgMHgwNTYwMGU0MSwgMHgwNTBmODBmZiwKKwkweDAzMmZhMDY5LCAweDAzODAwMDUzLCAweGRiNGVlOWUyLCAweDAyODAwMDA0LAorCTB4MDAwMDAwMDAsIDB4MDAwMDgwMDAsIDB4MDAwMDA1NDIsIDB4MDQwZjgwMWYsCisJMHgwMTJmYThjOSwgMHgwNDBmODAxZiwgMHgwNzNmYTA4MSwgMHgwNjAwMDAxMCwKKwkweDAzMjAwMDA1LCAweDA3NDIwMDAwLCAweDA1MGZiMDAwLCAweDA0MGY4MDFmLAorCTB4MDczZmEwMTEsIDB4MDYwMDAwMzgsIDB4MDQwZjgwMWYsIDB4MDUzZmE4NTksCisJMHgwNzAwMDAzYSwgMHgwNTBmZTAwMCwgMHgwNTgxODAwYSwgMHgwNzg0MDAzYywKKwkweDA0OTU4MDE5LCAweDAzMGUwMDExLCAweDA3MmU0MjAwLCAweDAzODAwMDE0LAorCTB4MDI5MTAwMWYsIDB4MDUwMDEwYzAsIDB4MDQ0ODIwMDEsIDB4MDU4MTgwZmEsCisJMHgwNjQ4MzAwMSwgMHgwNjgxODE1ZCwgMHgwMjkyMDAyOSwgMHgwNjhiMDAyOSwKKwkweDAwOGEwMTYyLCAweDA1MDAxMGMwLCAweDA2NzgwMDAxLCAweDA1MDAwN2MwLAorCTB4MDY4MTgyNDAsIDB4MDY3ODAwMDEsIDB4MDUwMGY4MDAsIDB4MDY4MTgyODAsCisJMHgwMzkxMDAzMCwgMHgwNDBmZTAyOSwgMHgwMzg2MDAzMCwgMHgwNzZjMDAxZCwKKwkweDA1ODEwMmIxLCAweDA3NmMwYTFkLCAweDA0ODEwMmRhLCAweDAyOTIwMGFiLAorCTB4MDQwZmUwMmYsIDB4MDM4NjAwM2MsIDB4MDYwMDAwMTMsIDB4MDUwZmIwMDAsCisJMHgwNjZjMDA3MywgMHgwNjgxMDNlYywgMHgwMTQ5MjBlNCwgMHgwNTgxODAzYywKKwkweDAzNDAwMDAwLCAweDA3NmMwYTAwLCAweDA0ODE4MDM0LCAweDA2OTYwMDNlLAorCTB4MDNiOTAwY2EsIDB4MDU5MDgwMTQsIDB4MDEwMTcwZTEsIDB4MDc3ODAwMTcsCisJMHgwM2UwMDAwMCwgMHgwNjgxMDA5MSwgMHgwNTAwMTBmZiwgMHgwMTc5ZmUxNywKIAkweDAzMWZmZmZmLCAweDA3MDAwMGZmLCAweDA1NjAwODAwLCAweDA1MGY4MGZmLAogCTB4MDczZmEwMDksIDB4MDYwMDAwMDEsIDB4MDY3ODAwMDIsIDB4MDI4MDAwNDAsCi0JMHgwMzdjMDBmZiwgMHgwMzgwMDAwMCwgMHgwNjgxMDA1ZSwgMHgwMjQ5ZjAwMiwKLQkweDA2ODEwMGFiLCAweDA0NDhlMDAyLCAweDA2ODEwMDVlLCAweDA3NjAwYzAwLAorCTB4MDM3YzAwZmYsIDB4MDM4MDAwMDAsIDB4MDY4MTAwNWQsIDB4MDI0OWYwMDIsCisJMHgwNzgxMDBhYSwgMHgwNDQ4ZTAwMiwgMHgwNjgxMDA1ZCwgMHgwNzYwMGMwMCwKIAkweDA1MGY4MGZmLCAweDA3M2ZhMDA5LCAweDA2MDAwMDAxLCAweDA2NzgwMDAyLAotCTB4MDdmZmZmMDAsIDB4MDM3YzAwZmYsIDB4MDUwMDAyMDAsIDB4MDQ4MTgwYWIsCi0JMHgwNjRiZDQwMSwgMHgwM2QwMDA2MCwgMHgwMzgwMDBhOSwgMHgwMjgwMDA2OCwKLQkweDAzODAwMDcyLCAweDAyODAwMDdjLCAweDAyODAwMDg2LCAweDAzODAwMDkwLAotCTB4MDM4MDAwYTksIDB4MDM4MDAwYTksIDB4MDUwZmUwMjcsIDB4MDE4NjgwNmMsCi0JMHgwMTAyODAwMCwgMHgwMzgwMDA2ZiwgMHgwNzYwMDAyNywgMHgwNTBmODBmZiwKLQkweDAzMmZhMDBhLCAweDAxMDI3MDAwLCAweDAyNDAwMDI5LCAweDAyODAwMGFiLAotCTB4MDQwZmUwMjUsIDB4MDA4NjgwNzYsIDB4MDMwMjYwMDAsIDB4MDI4MDAwNzksCisJMHgwN2ZmZmYwMCwgMHgwMzdjMDBmZiwgMHgwNTAwMDIwMCwgMHgwNTgxODBhYSwKKwkweDA2NGJkNDAxLCAweDAzZDAwMDVmLCAweDAyODAwMGE4LCAweDAyODAwMDY3LAorCTB4MDM4MDAwNzEsIDB4MDM4MDAwN2IsIDB4MDI4MDAwODUsIDB4MDI4MDAwOGYsCisJMHgwMjgwMDBhOCwgMHgwMjgwMDBhOCwgMHgwNTBmZTAyNywgMHgwMDg2ODA2YiwKKwkweDAxMDI4MDAwLCAweDAyODAwMDZlLCAweDA3NjAwMDI3LCAweDA1MGY4MGZmLAorCTB4MDMyZmEwMGEsIDB4MDEwMjcwMDAsIDB4MDI0MDAwMjksIDB4MDM4MDAwYWEsCisJMHgwNDBmZTAyNSwgMHgwMDg2ODA3NSwgMHgwMzAyNjAwMCwgMHgwMzgwMDA3OCwKIAkweDA2NjAwMDI1LCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLCAweDAzMDI1MDAwLAotCTB4MDI0MDAwMjksIDB4MDI4MDAwYWIsIDB4MDUwZmUwMjEsIDB4MDA4NjgwODAsCi0JMHgwMTAyMjAwMCwgMHgwMjgwMDA4MywgMHgwNzYwMDAyMSwgMHgwNTBmODBmZiwKLQkweDAzMmZhMDBhLCAweDAxMDIxMDAwLCAweDAyNDAwMDI5LCAweDAyODAwMGFiLAotCTB4MDQwZmUwMjMsIDB4MDA4NjgwOGEsIDB4MDEwMjQwMDAsIDB4MDM4MDAwOGQsCisJMHgwMjQwMDAyOSwgMHgwMzgwMDBhYSwgMHgwNTBmZTAyMSwgMHgwMDg2ODA3ZiwKKwkweDAxMDIyMDAwLCAweDAzODAwMDgyLCAweDA3NjAwMDIxLCAweDA1MGY4MGZmLAorCTB4MDMyZmEwMGEsIDB4MDEwMjEwMDAsIDB4MDI0MDAwMjksIDB4MDM4MDAwYWEsCisJMHgwNDBmZTAyMywgMHgwMDg2ODA4OSwgMHgwMTAyNDAwMCwgMHgwMjgwMDA4YywKIAkweDA2NjAwMDIzLCAweDA1MGY4MGZmLCAweDAzMmZhMDBhLCAweDAzMDIzMDAwLAotCTB4MDI0MDAwMjksIDB4MDI4MDAwYWIsIDB4MDZhMDAwYzgsIDB4MDI4MDAwYWIsCi0JMHgwMTY0MDgxNywgMHgwNTgyODBhOSwgMHgwNzBmZjAxNywgMHgwM2QwMDA5NiwKLQkweDAyODAwMDllLCAweDAzODAwMGEwLCAweDAzODAwMGEzLCAweDAzODAwMGE2LAotCTB4MDM4MDAwYTksIDB4MDM4MDAwYTksIDB4MDM4MDAwYTksIDB4MDM4MDAwYTksCi0JMHgwM2UwMDAwMCwgMHgwMzgwMDAxNCwgMHgwNTkwODBhMCwgMHgwMzAxNjBlMSwKLQkweDAyODAwMGFiLCAweDA1OTA4MGEzLCAweDAzMDE1MGUxLCAweDAyODAwMGFiLAotCTB4MDU5MDgwYTYsIDB4MDEwMTQwZTEsIDB4MDI4MDAwYWIsIDB4MDYwZmMwMTMsCi0JMHgwNmEwMDUxMCwgMHgwMzgwMDAxNCwgMHgwNzJlNDgwMCwgMHgwNzAwMDAxMiwKLQkweDAzODAwMGJiLCAweDA3NDdmMDAwLCAweDA1NjAwODAwLCAweDA1MGY4MGZmLAotCTB4MDEyZmE4MDksIDB4MDI0OWYwMDEsIDB4MDc4MTAwYmIsIDB4MDEwMTIwMDAsCi0JMHgwNTJlNGMwMCwgMHgwN2MwMDAwMCwgMHgwNzAwMDBlYiwgMHgwMzQ5ZjAwMCwKLQkweDA1ODE4MGFmLCAweDA1NjAwODAwLCAweDA1MGY4MGZmLCAweDAxMmZhODA5LAotCTB4MDQ0OGUwMDEsIDB4MDY4MTAwYzEsIDB4MDdjMDAwMDAsIDB4MDA3OWMxMDEsCi0JMHgwN2ZmZmZmZiwgMHgwMjdhNGIwMSwgMHgwMzgwMDAwMCwgMHgwNTYwMDgwMCwKLQkweDA1MGY4MGZmLCAweDAxMmZhODBhLCAweDA3NjAwYzAwLCAweDA1MGY4MGZmLAotCTB4MDEyZmE4MjEsIDB4MDY3ODAwMDEsIDB4MDdmZmZmMDAsIDB4MDM3YzAwZmYsCi0JMHgwNTAwMDcwMCwgMHgwNzgxMDBkZCwgMHgwNjYwMTgwNCwgMHgwNzAwMzBmZiwKLQkweDA1MGY4MGZmLCAweDAxMmZhODA5LCAweDA1MDAyMDAwLCAweDA1MGY4MDAzLAotCTB4MDczZmEwMGEsIDB4MDYwMDAwMDEsIDB4MDQwZmUwMDEsIDB4MDM4NjAwZGUsCi0JMHgwNDYwMDIwMSwgMHgwNTBmODBmZiwgMHgwMzJmYTAwYSwgMHgwN2MwMDAwMCwKLQkweDA1MGZlMDJlLCAweDAwODY4MGUzLCAweDAxMDJlMDAwLCAweDAzMDJmMDAwLAotCTB4MDM4MDAwZTcsIDB4MDc2MDAwMmUsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMGEsCi0JMHgwMTAyZTAwMCwgMHgwN2MwMDAwMCwgMHgwMjJjMDAwNCwgMHgwNTZjMDQxZCwKLQkweDA3ODEwMGZjLCAweDA1NmMwMjFkLCAweDA0ODEwMTEzLCAweDA1NmMwODFkLAotCTB4MDQ4MTAxMjUsIDB4MDc2YzA2MWQsIDB4MDU4MTAxM2YsIDB4MDUyMWQwMDAsCi0JMHgwMjAyYzAxMywgMHgwMjAyYTAxMywgMHgwMjAyMDAxMywgMHgwNDYwMDIxYSwKLQkweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA3MDAwMDA5LCAweDAzYjYwMGFjLAotCTB4MDQ4NDgwMWYsIDB4MDI4MDAwM2QsIDB4MDQwZmUwMmEsIDB4MDI4NjAwZjIsCi0JMHgwNjAwMDAxMywgMHgwNDAwMTAxMywgMHgwNTYwMTAyYiwgMHgwNTBmODBmZiwKLQkweDAzMmZhMDEyLCAweDA2NDIwMDI5LCAweDA2NjAwMDJhLCAweDA1MGY4MGZmLAotCTB4MDUzZmE4MDksIDB4MDYwMDAwMDEsIDB4MDUwZmUwMDMsIDB4MDA4NjAxMTAsCi0JMHgwMTAyODAwMywgMHgwNjYwMDAyYSwgMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwKLQkweDA3MDAwMDA5LCAweDAwODAwMTQwLCAweDAwMDI4MDEzLCAweDAwMDI3MDEzLAotCTB4MDA4MDAxNDAsIDB4MDQwZmUwMmEsIDB4MDI4NjAwZjEsIDB4MDY0MjAwMjksCi0JMHgwNjYwMDAyYSwgMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNjAwMDAwMSwKLQkweDA1MGZlMDAzLCAweDAxODYwMTIyLCAweDAzMDI2MDAzLCAweDA2NjAwMDJhLAotCTB4MDUwZjgwZmYsIDB4MDUzZmE4MGEsIDB4MDcwMDAwMDksIDB4MDA4MDAxNDAsCi0JMHgwMjAyNjAxMywgMHgwMjAyNTAxMywgMHgwMDgwMDE0MCwgMHgwNDBmZTAyYSwKLQkweDAyODYwMGYxLCAweDA2NDIwMDI5LCAweDA2NjAwMDJhLCAweDA1MGY4MGZmLAotCTB4MDUzZmE4MDksIDB4MDYwMDAwMDEsIDB4MDUwZmUwMDMsIDB4MDA4NjAxMzQsCi0JMHgwMTAyMjAwMywgMHgwNjYwMDAyYSwgMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwKLQkweDA3MDAwMDA5LCAweDAxODAwMTM2LCAweDAwMDIyMDEzLCAweDAwMDIxMDEzLAotCTB4MDY0N2YwMjAsIDB4MDA3YTAxMjAsIDB4MDQwMDAxMDEsIDB4MDRhMDAyODUsCi0JMHgwNDAwODAyYSwgMHgwNWEwMDRmNSwgMHgwMDk0ODBmMSwgMHgwNTIxZDAwNSwKLQkweDAyODAwMGYyLCAweDAzODAwMGZhLCAweDA2NDdmMDIwLCAweDA2NDg2MDIwLAotCTB4MDY4MTgxNDUsIDB4MDRhMDAyODUsIDB4MDI4MDAwZjEsIDB4MDA3YTAxMjAsCi0JMHgwNDAwMDEwMSwgMHgwNGEwMDI4NSwgMHgwNDAwODAyYSwgMHgwNWEwMDRmNSwKLQkweDAyODAwMGYxLCAweDA0MGZkMDJhLCAweDA1MmU0MDAzLCAweDAwMjA4MDEwLAotCTB4MDVhMDA0ZjUsIDB4MDM4MDAwZmEsIDB4MDAwMTgwOTgsIDB4MDc0ODAwMTgsCi0JMHgwNjgxODE2MSwgMHgwNTQ4MTAxOCwgMHgwNzgxODE1ZiwgMHgwNTQ4MjAxOCwKLQkweDA2ODE4MTVkLCAweDA3NDgzMDE4LCAweDA2ODE4MTViLCAweDAwMmZiMDA0LAotCTB4MDA4MDAxNjIsIDB4MDEyZmIwMDMsIDB4MDA4MDAxNjIsIDB4MDAyZmIwMDIsCi0JMHgwMDgwMDE2MiwgMHgwMDJmYjAwMSwgMHgwMDgwMDE2MiwgMHgwMTJmYjAwMCwKLQkweDAxNzlmZTc4LCAweDA3MDAwMGZmLCAweDAzMDE5MGZmLCAweDAwMDE3MDg2LAotCTB4MDU4YjAxNjYsIDB4MDMzODUwMDAsIDB4MDMwMjAwMDAsIDB4MDc3ODAwMTcsCi0JMHgwMDQzMDQwNywgMHgwNzgxODFlZSwgMHgwNDZjMDQxOSwgMHgwNDgxMDFhMiwKLQkweDA0NmMwMjE5LCAweDA1ODEwMTcyLCAweDA3MjE5MDAwLCAweDAwODAwMTg2LAotCTB4MDcyMTkwMDAsIDB4MDc0ODMwMTcsIDB4MDQ4MTAxOGMsIDB4MDU0ODIwMTcsCi0JMHgwNTgxMDE5MywgMHgwNDQ4YjA3NSwgMHgwNjgxODE4NiwgMHgwNjYwMTQ3NiwKLQkweDA1MGY4MGZmLCAweDA3M2ZhMDIyLCAweDA2MDAwMDNlLCAweDA2MDAwMDgwLAotCTB4MDUwMDEwODEsIDB4MDUwMDIwODIsIDB4MDYwMDMwODMsIDB4MDUwMDQwODQsCi0JMHgwNDYwMWM3NiwgMHgwNTBmODBmZiwgMHgwMjJmYTAyYSwgMHgwNzIxOTAwMCwKLQkweDA3NzgwMDc4LCAweDA3ZmZmZjAwLCAweDA0NWEwNDE5LCAweDAxMDc4MGZmLAotCTB4MDQ4NDgwMWYsIDB4MDI4MDAwM2QsIDB4MDQwZmUwN2YsIDB4MDA4NjAxOWIsCi0JMHgwNWEwMDFiYiwgMHgwMDkyMDE4NiwgMHgwNDBmZTA3ZiwgMHgwN2E2ODFiYiwKLQkweDAwODAwMTg2LCAweDA1NjAxMDdiLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LAotCTB4MDc0NGYwMDAsIDB4MDU2MDEwN2IsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMGEsCi0JMHgwMDgwMDE3OSwgMHgwNTJlNDAwYywgMHgwNDAwODBmYiwgMHgwNDZhYTEwOCwKLQkweDA2MDA5MDc2LCAweDA0MDAyMDc1LCAweDA1YTAwNGZjLCAweDAwODAwMTg2LAotCTB4MDYyMTkwMDEsIDB4MDU0ODIwMTcsIDB4MDU4MTAxYWYsIDB4MDU4YjAxYTUsCi0JMHgwNjBmZjA4NiwgMHgwMzQ5ZjBmZiwgMHgwNzgxODE2NSwgMHgwNzQ4MzAxNywKLQkweDA1ODEwMWFjLCAweDA1MGZkMGZmLCAweDA0MGZlMDdmLCAweDA3YTY4MWJiLAotCTB4MDA4MDAxODYsIDB4MDUwMDQwODQsIDB4MDVhMDAyMDUsIDB4MDA5MjAxODYsCi0JMHgwNzBmZjA3ZCwgMHgwNDUwMDQ3YywgMHgwNTYwMDRmZiwgMHgwNTBmODBmZiwKLQkweDAzMmZhMDA5LCAweDA3MGZmMDAwLCAweDAwNTQwNDc5LCAweDAzMDc5MGZmLAotCTB4MDE4MDAxOTMsIDB4MDYwZmYwNzksIDB4MDA1NDA0N2EsIDB4MDU4MjAxZTcsCi0JMHgwNTgxMDFlNywgMHgwNzBmZjA3ZCwgMHgwNDUwMDQ3YywgMHgwNTBmODBmZiwKLQkweDAwMmZhODE5LCAweDA1OGIwMWMzLCAweDAyMDgwMDAxLCAweDAwMDgxMDAyLAotCTB4MDEwODIwMDMsIDB4MDQ4YjAxYzcsIDB4MDMzODUwMDAsIDB4MDMwMTAwMDAsCi0JMHgwMjQwMDAxOSwgMHgwNzBmZjAwMywgMHgwNDUwMDQ3OSwgMHgwMzA3OTBmZiwKLQkweDAzNDAwMDdlLCAweDA2NDIwMDdmLCAweDA1ODEwMWU3LCAweDA3MGZmMDdlLAotCTB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDUwZmUwMDAsIDB4MDI4NjgxZTYsCi0JMHgwNzBmZjA3ZCwgMHgwNTYwMDJmZiwgMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwKLQkweDAxMDdkMDAwLCAweDAxODYwMWU4LCAweDA1NjAwODdkLCAweDA1MGY4MGZmLAotCTB4MDMyZmEwMDksIDB4MDU2OWZlMDAsIDB4MDU1MDA0MWIsIDB4MDUwZjgwZmYsCi0JMHgwMzJmYTAwOSwgMHgwMTA3ZTAwMCwgMHgwNzBmZjA3ZSwgMHgwMTgwMDFkMiwKLQkweDAzMDdjMDAwLCAweDA3YzAwMDAwLCAweDA1MmU0MDBjLCAweDA0MDA4MGZiLAotCTB4MDQ2YWExMDgsIDB4MDYwMDkwNzYsIDB4MDQwMDIwNzUsIDB4MDE4MDA0ZmMsCi0JMHgwNDBmZDA3NiwgMHgwNTBmZDAxNywgMHgwNjBmZjA4NiwgMHgwNzc4MDBmZiwKLQkweDA3MDAwMDYwLCAweDAzN2MwMGZmLCAweDA3MDAwMDYwLCAweDA3ODE4MWYwLAotCTB4MDc3ODAwNzgsIDB4MDdmZmZmMDAsIDB4MDQ1YTA0MTksIDB4MDEwNzgwZmYsCi0JMHgwNjYwMTQ3NiwgMHgwNTBmODBmZiwgMHgwNzNmYTAyMiwgMHgwNjAwMDAzZSwKLQkweDA1MmU0MDBjLCAweDA0MDA4MGZiLCAweDA2NmE4MTA4LCAweDA2MDA5MDc2LAotCTB4MDQwMDIwNzUsIDB4MDVhMDA0ZmMsIDB4MDI4MDAwMjksIDB4MDI0MDAwN2YsCi0JMHgwNzQyMDA3ZSwgMHgwNTBmODA3ZSwgMHgwMzJmYTAwOSwgMHgwNTBmZTAwMCwKLQkweDAyODY4MjFmLCAweDA3MGZmMDdkLCAweDA1NWMwNDdiLCAweDA1ODEwMjE0LAotCTB4MDc2MDAwN2QsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDUwZmUwMDAsCi0JMHgwMzg2ODIxNCwgMHgwNzBmZjA3YiwgMHgwMTA3ZDBmZiwgMHgwNTYwMDg3ZCwKLQkweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDAzNjgxZTAwLCAweDA0NTAwNDFjLAotCTB4MDEwN2UwZmYsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDUwZmUwMDAsCi0JMHgwMTg2MDIyMSwgMHgwMzA3YzAwMCwgMHgwN2MwMDAwMCwgMHgwNDBmZDA3NiwKLQkweDAyODAwNTEwLCAweDAxMDE4MGMwLCAweDA1NDhlMDE4LCAweDA3ODE4MjNjLAotCTB4MDc0OGYwMTgsIDB4MDY4MTgyMzgsIDB4MDM0OTAwMTgsIDB4MDY4MTgyMzQsCi0JMHgwMTQ5MTAxOCwgMHgwNzgxODIzMCwgMHgwNzNjMDAwMCwgMHgwNjAwMDA0MCwKLQkweDAyMjAwMDA0LCAweDAxODAwMjNmLCAweDA3M2MwMDAwLCAweDA2MDAwMDIwLAotCTB4MDMyMDAwMDMsIDB4MDE4MDAyM2YsIDB4MDczYzAwMDAsIDB4MDYwMDAwMTAsCi0JMHgwMjIwMDAwMiwgMHgwMTgwMDIzZiwgMHgwNzNjMDAwMCwgMHgwNjAwMDAwOCwKLQkweDAyMjAwMDAxLCAweDAxODAwMjNmLCAweDA3M2MwMDAwLCAweDA2MDAwMDA0LAotCTB4MDYwMDAwMTMsIDB4MDUwZmIwMDAsIDB4MDQwZmUwNzYsIDB4MDA4NjAyNTgsCi0JMHgwNDZjMDI3MywgMHgwNDgxMDI2OCwgMHgwNjZjMDA3MywgMHgwNDgxMDI0OSwKLQkweDA0MGZkMDc2LCAweDA2YTAwNTEwLCAweDAzODAwMDE0LCAweDA0MGZkMDc2LAotCTB4MDA4MDAyNGMsIDB4MDA0NTIwNzUsIDB4MDAwNzcwMTMsIDB4MDY0N2YwNzUsCi0JMHgwNjQ4NjA3NSwgMHgwNjgxODI1MiwgMHgwNWEwMDI4YiwgMHgwMDgwMDI1OCwKLQkweDAwN2EwMTc1LCAweDA0MDAwMTAxLCAweDA1YTAwMjhiLCAweDA0MDA4MDc2LAotCTB4MDI0NWYwMDgsIDB4MDVhMDA0ZjUsIDB4MDcyNzMwMDAsIDB4MDU2MDAyNzIsCi0JMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwgMHgwNzAwMDAwOSwgMHgwMzc5ZmY3OCwKLQkweDA3MDAwMGZmLCAweDAyMDc2MDEzLCAweDAyMDc1MDEzLCAweDA0ODQ4MDFmLAotCTB4MDI4MDAwM2QsIDB4MDcwZmMwZmYsIDB4MDUyZTQwMGMsIDB4MDAyMDgwMjAsCi0JMHgwNWEwMDRmNSwgMHgwMDgwMDI2MSwgMHgwNDYwMDI3NiwgMHgwNTAwMTBmZiwKLQkweDA0MGY4MDAxLCAweDAzMmZhMDA5LCAweDA0MGY4MDAxLCAweDA1M2ZhODBhLAotCTB4MDcwMDAwMDksIDB4MDcwZmYwMDAsIDB4MDI4NjgyN2EsIDB4MDY2MDEyNzYsCi0JMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwgMHgwNzAwMDAwYywgMHgwNzYwMTgxOCwKLQkweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA3MDAwMDA5LCAweDAxODAwMjdiLAotCTB4MDdhMDAwZGUsIDB4MDQ0OGIwNzUsIDB4MDU4MTAyNGIsIDB4MDYwMDAwMTMsCi0JMHgwNDAwMTAxMywgMHgwNTYwMTA3YiwgMHgwNTBmODBmZiwgMHgwMzJmYTAxMiwKLQkweDAwNDZiMDc1LCAweDAzYjYwMGFjLCAweDAwODAwMjRjLCAweDA2MDAwMDIwLAotCTB4MDQwMDEwMTYsIDB4MDQ2MDA4MmEsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMTIsCi0JMHgwN2MwMDAwMCwgMHgwNjAwMDA3NSwgMHgwNDAwMTBhMiwgMHgwNDRiMDgwMSwKLQkweDA2MGZmMDE2LCAweDA2NWEwMDAxLCAweDA0NjAwODc2LCAweDA1MGY4MGZmLAotCTB4MDMyZmEwMTIsIDB4MDdjMDAwMDAsIDB4MDUwZmUwMjIsIDB4MDE4NjAyOWEsCi0JMHgwNDIxZDAwNCwgMHgwMzAyYTAyMiwgMHgwNGEwMDJjMSwgMHgwMTgwMDJiMSwKLQkweDA0MGZlMDI2LCAweDAwODYwMmIzLCAweDA0MjFkMDAxLCAweDAyMDJhMDI2LAotCTB4MDRhMDAyYzEsIDB4MDIwMmMwMTMsIDB4MDA2ODNlMjAsIDB4MDcwMDYwZmYsCi0JMHgwNTZjMDIwNiwgMHgwNDgxMDJmNCwgMHgwNTZjMDQwNiwgMHgwNzgxMDMwYSwKLQkweDA3NmMwNjA2LCAweDA2ODEwMzc5LCAweDA1NmMxNjA2LCAweDA3ODE4MmIxLAotCTB4MDQ0ODgwMjAsIDB4MDc4MTAzODcsIDB4MDQwZmQwMmEsIDB4MDUyMWQwMDAsCi0JMHgwMjAyYTAxMywgMHgwMjAyMDAxMywgMHgwMDgwMDJiMywgMHgwNGEwMDRlYywKLQkweDAwODAwMmJmLCAweDA1MGZlMDI4LCAweDAwODYwMmJmLCAweDAzMDJhMDI4LAotCTB4MDQyMWQwMDIsIDB4MDRhMDAyYzEsIDB4MDA4MDAyYzgsIDB4MDUwZmUwMjIsCi0JMHgwMDg2MDJiZiwgMHgwNDIxZDAwNCwgMHgwMzAyYTAyMiwgMHgwNGEwMDJjMSwKLQkweDA0YTAwNGVjLCAweDA1ODQ4MDMwLCAweDAyODAwMDNkLCAweDA0NjAwODJhLAotCTB4MDUwZjgwZmYsIDB4MDIyZmEwMzEsIDB4MDMwMjAwMDAsIDB4MDAwMmIwMDQsCi0JMHgwMTAxODAwNSwgMHgwN2MwMDAwMCwgMHgwNDAwNzAyYSwgMHgwNmEwMDNiYSwKKwkweDAyNDAwMDI5LCAweDAzODAwMGFhLCAweDA2YTAwMGRhLCAweDAzODAwMGFhLAorCTB4MDE2NDA4MTcsIDB4MDQ4MjgwYTgsIDB4MDcwZmYwMTcsIDB4MDNkMDAwOTUsCisJMHgwMjgwMDA5ZCwgMHgwMzgwMDA5ZiwgMHgwMjgwMDBhMiwgMHgwMzgwMDBhNSwKKwkweDAyODAwMGE4LCAweDAyODAwMGE4LCAweDAyODAwMGE4LCAweDAyODAwMGE4LAorCTB4MDNlMDAwMDAsIDB4MDM4MDAwMTQsIDB4MDU5MDgwOWYsIDB4MDMwMTYwZTEsCisJMHgwMzgwMDBhYSwgMHgwNDkwODBhMiwgMHgwMzAxNTBlMSwgMHgwMzgwMDBhYSwKKwkweDA1OTA4MGE1LCAweDAxMDE0MGUxLCAweDAzODAwMGFhLCAweDA2MGZjMDEzLAorCTB4MDdhMDA1M2EsIDB4MDM4MDAwMTQsIDB4MDE0OTQwZTQsIDB4MDBhMTgwYWUsCisJMHgwMzgwMDAzYywgMHgwMjY4MWUwZCwgMHgwNTBmYjBmZiwgMHgwNDYwMDg3NiwKKwkweDA1MGY4MGZmLCAweDA1M2ZhODA5LCAweDA2MDAwMDAxLCAweDA1NDg4MDAzLAorCTB4MDU4MTgwYmQsIDB4MDQwMDgwMGQsIDB4MDEyMGQwMDAsIDB4MDEzZTQwMDAsCisJMHgwNTAwMDIwMCwgMHgwNjAwOTA3NiwgMHgwNDAwMjA3NSwgMHgwNmEwMDUyNiwKKwkweDA3YzAwMDAwLCAweDA3MmU0ODAwLCAweDA3MDAwMDEyLCAweDAyODAwMGNkLAorCTB4MDc0N2YwMDAsIDB4MDU2MDA4MDAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksCisJMHgwMjQ5ZjAwMSwgMHgwNjgxMDBjZCwgMHgwMTAxMjAwMCwgMHgwNTJlNGMwMCwKKwkweDA3YzAwMDAwLCAweDA3MDAwMGViLCAweDAzNDlmMDAwLCAweDA0ODE4MGMxLAorCTB4MDU2MDA4MDAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksIDB4MDQ0OGUwMDEsCisJMHgwNjgxMDBkMywgMHgwN2MwMDAwMCwgMHgwMDc5YzEwMSwgMHgwN2ZmZmZmZiwKKwkweDAyN2E0YjAxLCAweDAzODAwMDAwLCAweDA1NjAwODAwLCAweDA1MGY4MGZmLAorCTB4MDEyZmE4MGEsIDB4MDc2MDBjMDAsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MjEsCisJMHgwNjc4MDAwMSwgMHgwN2ZmZmYwMCwgMHgwMzdjMDBmZiwgMHgwNTAwMDcwMCwKKwkweDA2ODEwMGVmLCAweDA2NjAxODA0LCAweDA3MDAzMGZmLCAweDA1MGY4MGZmLAorCTB4MDEyZmE4MDksIDB4MDUwMDIwMDAsIDB4MDUwZjgwMDMsIDB4MDczZmEwMGEsCisJMHgwNjAwMDAwMSwgMHgwNDBmZTAwMSwgMHgwMzg2MDBmMCwgMHgwNDYwMDIwMSwKKwkweDA1MGY4MGZmLCAweDAzMmZhMDBhLCAweDA3YzAwMDAwLCAweDA1MGZlMDJlLAorCTB4MDE4NjgwZjUsIDB4MDEwMmUwMDAsIDB4MDMwMmYwMDAsIDB4MDM4MDAwZjksCisJMHgwNzYwMDAyZSwgMHgwNTBmODBmZiwgMHgwMzJmYTAwYSwgMHgwMTAyZTAwMCwKKwkweDA3YzAwMDAwLCAweDAyMmMwMDA0LCAweDA1NmMwNDFkLCAweDA0ODEwMTBlLAorCTB4MDU2YzAyMWQsIDB4MDQ4MTAxMjUsIDB4MDU2YzA4MWQsIDB4MDQ4MTAxMzcsCisJMHgwNzZjMDYxZCwgMHgwNDgxMDE1MSwgMHgwNTIxZDAwMCwgMHgwMjAyYzAxMywKKwkweDAyMDJhMDEzLCAweDAyMDIwMDEzLCAweDA0NjAwMjFhLCAweDA1MGY4MGZmLAorCTB4MDUzZmE4MGEsIDB4MDcwMDAwMDksIDB4MDNiNjAwYmUsIDB4MDQ4NDgwMWYsCisJMHgwMzgwMDAzYywgMHgwNDBmZTAyYSwgMHgwMDg2MDEwNCwgMHgwNjAwMDAxMywKKwkweDA0MDAxMDEzLCAweDA1NjAxMDJiLCAweDA1MGY4MGZmLCAweDAzMmZhMDEyLAorCTB4MDY0MjAwMjksIDB4MDY2MDAwMmEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksCisJMHgwNjAwMDAwMSwgMHgwNTBmZTAwMywgMHgwMTg2MDEyMiwgMHgwMTAyODAwMywKKwkweDA2NjAwMDJhLCAweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA3MDAwMDA5LAorCTB4MDA4MDAxNTIsIDB4MDAwMjgwMTMsIDB4MDAwMjcwMTMsIDB4MDA4MDAxNTIsCisJMHgwNDBmZTAyYSwgMHgwMTg2MDEwMywgMHgwNjQyMDAyOSwgMHgwNjYwMDAyYSwKKwkweDA1MGY4MGZmLCAweDA1M2ZhODA5LCAweDA2MDAwMDAxLCAweDA1MGZlMDAzLAorCTB4MDA4NjAxMzQsIDB4MDMwMjYwMDMsIDB4MDY2MDAwMmEsIDB4MDUwZjgwZmYsCisJMHgwNTNmYTgwYSwgMHgwNzAwMDAwOSwgMHgwMDgwMDE1MiwgMHgwMjAyNjAxMywKKwkweDAyMDI1MDEzLCAweDAwODAwMTUyLCAweDA0MGZlMDJhLCAweDAxODYwMTAzLAorCTB4MDY0MjAwMjksIDB4MDY2MDAwMmEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksCisJMHgwNjAwMDAwMSwgMHgwNTBmZTAwMywgMHgwMDg2MDE0NiwgMHgwMTAyMjAwMywKKwkweDA2NjAwMDJhLCAweDA1MGY4MGZmLCAweDA1M2ZhODBhLCAweDA3MDAwMDA5LAorCTB4MDE4MDAxNDgsIDB4MDAwMjIwMTMsIDB4MDAwMjEwMTMsIDB4MDY0N2YwMjAsCisJMHgwMDdhMDEyMCwgMHgwNDAwMDEwMSwgMHgwNGEwMDJhMiwgMHgwNDAwODAyYSwKKwkweDA2YTAwNTFmLCAweDAzOTQ4MTAzLCAweDA1MjFkMDA1LCAweDAwODAwMTA0LAorCTB4MDE4MDAxMGMsIDB4MDY0N2YwMjAsIDB4MDY0ODYwMjAsIDB4MDY4MTgxNTcsCisJMHgwNGEwMDJhMiwgMHgwMTgwMDEwMywgMHgwMDdhMDEyMCwgMHgwNDAwMDEwMSwKKwkweDA0YTAwMmEyLCAweDA0MDA4MDJhLCAweDA2YTAwNTFmLCAweDAxODAwMTAzLAorCTB4MDQwZmQwMmEsIDB4MDUyZTQwMDMsIDB4MDAyMDgwMTAsIDB4MDZhMDA1MWYsCisJMHgwMTgwMDEwYywgMHgwMDAxODA5OCwgMHgwNzQ4MDAxOCwgMHgwNjgxODE3MywKKwkweDA1NDgxMDE4LCAweDA3ODE4MTcxLCAweDA1NDgyMDE4LCAweDA3ODE4MTZmLAorCTB4MDc0ODMwMTgsIDB4MDY4MTgxNmQsIDB4MDAyZmIwMDQsIDB4MDE4MDAxNzQsCisJMHgwMTJmYjAwMywgMHgwMTgwMDE3NCwgMHgwMDJmYjAwMiwgMHgwMTgwMDE3NCwKKwkweDAwMmZiMDAxLCAweDAxODAwMTc0LCAweDAxMmZiMDAwLCAweDAxNzlmZTc4LAorCTB4MDcwMDAwZmYsIDB4MDMwMTkwZmYsIDB4MDAwMTcwODYsIDB4MDU4YjAxNzgsCisJMHgwMzM4NTAwMCwgMHgwMzAyMDAwMCwgMHgwNzc4MDAxNywgMHgwMDQzMDQwNywKKwkweDA3ODE4MjAwLCAweDA0NmMwNDE5LCAweDA1ODEwMWI0LCAweDA0NmMwMjE5LAorCTB4MDU4MTAxODQsIDB4MDcyMTkwMDAsIDB4MDA4MDAxOTgsIDB4MDcyMTkwMDAsCisJMHgwNzQ4MzAxNywgMHgwNDgxMDE5ZSwgMHgwNTQ4MjAxNywgMHgwNTgxMDFhNSwKKwkweDA0NDhiMDc1LCAweDA2ODE4MTk4LCAweDA2NjAxNDc2LCAweDA1MGY4MGZmLAorCTB4MDczZmEwMjIsIDB4MDYwMDAwM2UsIDB4MDYwMDAwODAsIDB4MDUwMDEwODEsCisJMHgwNTAwMjA4MiwgMHgwNjAwMzA4MywgMHgwNTAwNDA4NCwgMHgwNDYwMWM3NiwKKwkweDA1MGY4MGZmLCAweDAyMmZhMDJhLCAweDA3MjE5MDAwLCAweDA3NzgwMDc4LAorCTB4MDdmZmZmMDAsIDB4MDQ1YTA0MTksIDB4MDEwNzgwZmYsIDB4MDQ4NDgwMWYsCisJMHgwMzgwMDAzYywgMHgwNDBmZTA3ZiwgMHgwMDg2MDFhZCwgMHgwNGEwMDFjZCwKKwkweDAwOTIwMTk4LCAweDA0MGZlMDdmLCAweDA2YTY4MWNkLCAweDAwODAwMTk4LAorCTB4MDU2MDEwN2IsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDc0NGYwMDAsCisJMHgwNTYwMTA3YiwgMHgwNTBmODBmZiwgMHgwMzJmYTAwYSwgMHgwMTgwMDE4YiwKKwkweDA1MmU0MDBjLCAweDA0MDA4MGZiLCAweDA0NmFhMTA4LCAweDA2MDA5MDc2LAorCTB4MDQwMDIwNzUsIDB4MDZhMDA1MjYsIDB4MDA4MDAxOTgsIDB4MDYyMTkwMDEsCisJMHgwNTQ4MjAxNywgMHgwNDgxMDFjMSwgMHgwNThiMDFiNywgMHgwNjBmZjA4NiwKKwkweDAzNDlmMGZmLCAweDA3ODE4MTc3LCAweDA3NDgzMDE3LCAweDA1ODEwMWJlLAorCTB4MDUwZmQwZmYsIDB4MDQwZmUwN2YsIDB4MDZhNjgxY2QsIDB4MDA4MDAxOTgsCisJMHgwNTAwNDA4NCwgMHgwNWEwMDIyMiwgMHgwMDkyMDE5OCwgMHgwNzBmZjA3ZCwKKwkweDA0NTAwNDdjLCAweDA1NjAwNGZmLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LAorCTB4MDcwZmYwMDAsIDB4MDA1NDA0NzksIDB4MDMwNzkwZmYsIDB4MDE4MDAxYTUsCisJMHgwNjBmZjA3OSwgMHgwMDU0MDQ3YSwgMHgwNTgyMDFmOSwgMHgwNTgxMDFmOSwKKwkweDA3MGZmMDdkLCAweDA0NTAwNDdjLCAweDA1MGY4MGZmLCAweDAwMmZhODE5LAorCTB4MDQ4YjAxZDUsIDB4MDIwODAwMDEsIDB4MDAwODEwMDIsIDB4MDEwODIwMDMsCisJMHgwNDhiMDFkOSwgMHgwMzM4NTAwMCwgMHgwMzAxMDAwMCwgMHgwMjQwMDAxOSwKKwkweDA3MGZmMDAzLCAweDA0NTAwNDc5LCAweDAzMDc5MGZmLCAweDAzNDAwMDdlLAorCTB4MDY0MjAwN2YsIDB4MDU4MTAxZjksIDB4MDcwZmYwN2UsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAwOSwgMHgwNTBmZTAwMCwgMHgwMjg2ODFmOCwgMHgwNzBmZjA3ZCwKKwkweDA1NjAwMmZmLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LCAweDAxMDdkMDAwLAorCTB4MDE4NjAxZmEsIDB4MDU2MDA4N2QsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksCisJMHgwMzY4MWUwMCwgMHgwNTUwMDQxYiwgMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwKKwkweDAxMDdlMDAwLCAweDA3MGZmMDdlLCAweDAxODAwMWU0LCAweDAzMDdjMDAwLAorCTB4MDdjMDAwMDAsIDB4MDUyZTQwMGMsIDB4MDQwMDgwZmIsIDB4MDQ2YWExMDgsCisJMHgwNjAwOTA3NiwgMHgwNDAwMjA3NSwgMHgwMjgwMDUyNiwgMHgwNDBmZDA3NiwKKwkweDA1MGZkMDE3LCAweDA2MGZmMDg2LCAweDA3NzgwMGZmLCAweDA3MDAwMDYwLAorCTB4MDM3YzAwZmYsIDB4MDcwMDAwNjAsIDB4MDY4MTgyMDIsIDB4MDc3ODAwNzgsCisJMHgwN2ZmZmYwMCwgMHgwNDVhMDQxOSwgMHgwMTA3ODBmZiwgMHgwNjYwMTQ3NiwKKwkweDA1MGY4MGZmLCAweDA3M2ZhMDIyLCAweDA2MDAwMDNlLCAweDA1MmU0MDBjLAorCTB4MDQ2MDA4NzYsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDYwMDAwMDEsCisJMHgwNTQ4ODAwMywgMHgwNDgxMDIxYywgMHgwNDAwZDBmYiwgMHgwNjZhODEwZCwKKwkweDAxM2U0MDAwLCAweDA3MDAwMzAwLCAweDAyODAwMDI5LCAweDA0MDA4MGZiLAorCTB4MDY2YTgxMDgsIDB4MDYwMDkwNzYsIDB4MDQwMDIwNzUsIDB4MDZhMDA1MjYsCisJMHgwMjgwMDAyOSwgMHgwMjQwMDA3ZiwgMHgwNzQyMDA3ZSwgMHgwNTBmODA3ZSwKKwkweDAzMmZhMDA5LCAweDA1MGZlMDAwLCAweDAzODY4MjNjLCAweDA3MGZmMDdkLAorCTB4MDU1YzA0N2IsIDB4MDQ4MTAyMzEsIDB4MDc2MDAwN2QsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAwOSwgMHgwNTBmZTAwMCwgMHgwMjg2ODIzMSwgMHgwNzBmZjA3YiwKKwkweDAxMDdkMGZmLCAweDA1NjAwODdkLCAweDA1MGY4MGZmLCAweDAzMmZhMDA5LAorCTB4MDM2ODFlMDAsIDB4MDQ1MDA0MWMsIDB4MDEwN2UwZmYsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAwOSwgMHgwNTBmZTAwMCwgMHgwMDg2MDIzZSwgMHgwMzA3YzAwMCwKKwkweDA3YzAwMDAwLCAweDA0MGZkMDc2LCAweDAzODAwNTNhLCAweDAxMDE4MGMwLAorCTB4MDU0OGUwMTgsIDB4MDc4MTgyNTksIDB4MDc0OGYwMTgsIDB4MDc4MTgyNTUsCisJMHgwMzQ5MDAxOCwgMHgwNjgxODI1MSwgMHgwMTQ5MTAxOCwgMHgwNzgxODI0ZCwKKwkweDA3M2MwMDAwLCAweDA2MDAwMDQwLCAweDAyMjAwMDA0LCAweDAxODAwMjVjLAorCTB4MDczYzAwMDAsIDB4MDYwMDAwMjAsIDB4MDMyMDAwMDMsIDB4MDE4MDAyNWMsCisJMHgwNzNjMDAwMCwgMHgwNjAwMDAxMCwgMHgwMjIwMDAwMiwgMHgwMTgwMDI1YywKKwkweDA3M2MwMDAwLCAweDA2MDAwMDA4LCAweDAyMjAwMDAxLCAweDAxODAwMjVjLAorCTB4MDczYzAwMDAsIDB4MDYwMDAwMDQsIDB4MDYwMDAwMTMsIDB4MDUwZmIwMDAsCisJMHgwNDBmZTA3NiwgMHgwMDg2MDI3NSwgMHgwNDZjMDI3MywgMHgwNDgxMDI4NSwKKwkweDA2NmMwMDczLCAweDA1ODEwMjY2LCAweDA0MGZkMDc2LCAweDA3YTAwNTNhLAorCTB4MDM4MDAwMTQsIDB4MDQwZmQwNzYsIDB4MDE4MDAyNjksIDB4MDA0NTIwNzUsCisJMHgwMDA3NzAxMywgMHgwNjQ3ZjA3NSwgMHgwNjQ4NjA3NSwgMHgwNzgxODI2ZiwKKwkweDA0YTAwMmE4LCAweDAwODAwMjc1LCAweDAwN2EwMTc1LCAweDA0MDAwMTAxLAorCTB4MDRhMDAyYTgsIDB4MDQwMDgwNzYsIDB4MDI0NWYwMDgsIDB4MDZhMDA1MWYsCisJMHgwNzI3MzAwMCwgMHgwNTYwMDI3MiwgMHgwNTBmODBmZiwgMHgwNTNmYTgwYSwKKwkweDA3MDAwMDA5LCAweDAzNzlmZjc4LCAweDA3MDAwMGZmLCAweDAyMDc2MDEzLAorCTB4MDIwNzUwMTMsIDB4MDQ4NDgwMWYsIDB4MDM4MDAwM2MsIDB4MDcwZmMwZmYsCisJMHgwNTJlNDAwYywgMHgwMDIwODAyMCwgMHgwNmEwMDUxZiwgMHgwMTgwMDI3ZSwKKwkweDA0NjAwMjc2LCAweDA1MDAxMGZmLCAweDA0MGY4MDAxLCAweDAzMmZhMDA5LAorCTB4MDQwZjgwMDEsIDB4MDUzZmE4MGEsIDB4MDcwMDAwMDksIDB4MDcwZmYwMDAsCisJMHgwMjg2ODI5NywgMHgwNjYwMTI3NiwgMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwKKwkweDA3MDAwMDBjLCAweDA3NjAxODE4LCAweDA1MGY4MGZmLCAweDA1M2ZhODBhLAorCTB4MDcwMDAwMDksIDB4MDA4MDAyOTgsIDB4MDdhMDAwZjAsIDB4MDQ0OGIwNzUsCisJMHgwNDgxMDI2OCwgMHgwNjAwMDAxMywgMHgwNDAwMTAxMywgMHgwNTYwMTA3YiwKKwkweDA1MGY4MGZmLCAweDAzMmZhMDEyLCAweDAwNDZiMDc1LCAweDAzYjYwMGJlLAorCTB4MDE4MDAyNjksIDB4MDYwMDAwMjAsIDB4MDQwMDEwMTYsIDB4MDQ2MDA4MmEsCisJMHgwNTBmODBmZiwgMHgwMzJmYTAxMiwgMHgwN2MwMDAwMCwgMHgwNjAwMDA3NSwKKwkweDA0MDAxMGEyLCAweDA0NGIwODAxLCAweDA2MGZmMDE2LCAweDA2NWEwMDAxLAorCTB4MDQ2MDA4NzYsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMTIsIDB4MDdjMDAwMDAsCisJMHgwNTBmZTAyMiwgMHgwMDg2MDJiYywgMHgwNDIxZDAwNCwgMHgwMzAyYTAyMiwKKwkweDA0YTAwMmU5LCAweDA0NDg4MDIwLCAweDA0ODEwMmNlLCAweDA0MGZkMDJhLAorCTB4MDUyMWQwMDAsIDB4MDIwMmEwMTMsIDB4MDIwMjAwMTMsIDB4MDQwZmUwMjYsCisJMHgwMTg2MDJkNCwgMHgwNDIxZDAwMSwgMHgwMjAyYTAyNiwgMHgwNGEwMDJlOSwKKwkweDAyMDJjMDEzLCAweDAwNjgzZTIwLCAweDA3MDA2MGZmLCAweDA1NmMwMjA2LAorCTB4MDY4MTAzMWMsIDB4MDU2YzA0MDYsIDB4MDY4MTAzMzIsIDB4MDc2YzA2MDYsCisJMHgwNzgxMDNhMywgMHgwNDQ4ODAyMCwgMHgwNjgxODJkMCwgMHgwNTZjMTYwNiwKKwkweDA3ODEwM2IxLCAweDA2YTAwNTE2LCAweDAxODAwMmUyLCAweDA0MGZkMDJhLAorCTB4MDUyMWQwMDAsIDB4MDIwMmEwMTMsIDB4MDIwMjAwMTMsIDB4MDUwZmUwMjgsCisJMHgwMTg2MDJlMiwgMHgwMzAyYTAyOCwgMHgwNDIxZDAwMiwgMHgwNGEwMDJlOSwKKwkweDAxODAwMmYwLCAweDA1MGZlMDIyLCAweDAxODYwMmUyLCAweDA0MjFkMDA0LAorCTB4MDMwMmEwMjIsIDB4MDRhMDAyZTksIDB4MDQ0ODgwMjAsIDB4MDc4MTgyZTQsCisJMHgwNmEwMDUxNiwgMHgwNTg0ODAzMCwgMHgwMzgwMDAzYywgMHgwNDBmZDAyYSwKKwkweDA1MjFkMDAwLCAweDAyMDJhMDEzLCAweDAyMDIwMDEzLCAweDAxODAwMmUyLAorCTB4MDQ2MDA4MmEsIDB4MDUwZjgwZmYsIDB4MDIyZmEwMzEsIDB4MDMwMjAwMDAsCisJMHgwMDAyYjAwNCwgMHgwMTAxODAwNSwgMHgwN2MwMDAwMCwgMHgwNDAwNzAyYSwKKwkweDA3YTAwM2U0LCAweDAwN2EwMTAxLCAweDA3MDYwMDAwLCAweDA3MzAzMDAwLAorCTB4MDcwMDgyOTAsIDB4MDc2MDAwMTgsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksCisJMHgwNzAwMDAwMywgMHgwNDQ4ZTAwNywgMHgwNjgxODJmZSwgMHgwNjAwNjAxMywKKwkweDAzODAwMzA1LCAweDAyNDAwMDEwLCAweDA0ODEwMmZlLCAweDA2MDA2MDEwLAorCTB4MDQ2MDMyMmEsIDB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDcwMDAwMDMsCisJMHgwNTBmODAxZSwgMHgwMzJmYTAzYSwgMHgwNjNhYTAyMCwgMHgwNjAwMDAwMiwKKwkweDAxM2U0MDAwLCAweDA3MDAwMDMwLCAweDAyOTgwMzBiLCAweDA3MGZmMGY2LAorCTB4MDM2ODMwZmYsIDB4MDU4MTgzMGMsIDB4MDcwZjAwMWUsIDB4MDU2MDEwMmIsCisJMHgwNTBmMTBmZiwgMHgwNjNmM2MwOCwgMHgwNjAwMDAwZCwgMHgwMTNlNDAwMCwKKwkweDA2MDAwMDIwLCAweDA0MGY4MDFhLCAweDAzMjAwMDBhLCAweDAyMjAxN2QwLAorCTB4MDMyZmEwMTIsIDB4MDIwMmMwMTMsIDB4MDE4MDAyZTIsIDB4MDQwMDcwMTMsCisJMHgwN2EwMDNlNCwgMHgwMDdhMDEwMSwgMHgwNzA1MDAwMCwgMHgwNzMwMzAwMCwKKwkweDA3MDA4ODkwLCAweDA3NGQwMDA1LCAweDA2MDA2MDEzLCAweDA1MGY4MDFlLAorCTB4MDMyZmEwM2EsIDB4MDU2MDFhMmIsIDB4MDUwZjgwZmYsIDB4MDIyZmEwMTksCisJMHgwNDAwMTAwMiwgMHgwNDAwMjAxMywgMHgwNDBmODAxZiwgMHgwMjJmYTAxYSwKKwkweDA3M2FhMDBjLCAweDA2MDAwMDAyLCAweDA3MzAwYzAzLCAweDA2MDAwMDBkLAorCTB4MDM4MDAzZDEsIDB4MDQwMDcwMTMsIDB4MDdhMDAzZTQsIDB4MDA3YTAxMDEsCisJMHgwMzA3MDAwMCwgMHgwNjYwMjgyYSwgMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwKKwkweDA2MDAwMDA0LCAweDAyNDk5MDA4LCAweDA3ODEwMzNmLCAweDA3MzAzMDAwLAorCTB4MDcwMDg4OTAsIDB4MDM4MDAzNDEsIDB4MDczMDMwMDAsIDB4MDQwMDg5ODAsCisJMHgwNTAwNzAwMywgMHgwNzRkMDAwNSwgMHgwNjAwNjAxMywgMHgwNTBmODAxZSwKKwkweDAzMmZhMDNhLCAweDA3NjAxNDJiLCAweDA1MGY4MGZmLCAweDAzMmZhMDIxLAorCTB4MDY0YjAwMDIsIDB4MDI0OTkwMDgsIDB4MDc4MTAzNGQsIDB4MDY0NGMwMDIsCisJMHgwNTRiMDQwMCwgMHgwNTAwNDBmZiwgMHgwNjY5ODEwNCwgMHgwNDgxODM2MiwKKwkweDA2MDAwMDEzLCAweDA0MDAxMDEzLCAweDA0NzgwMTAyLCAweDA2MDAwMDEwLAorCTB4MDYwMDMwMTMsIDB4MDQwMDQwMTMsIDB4MDYwMDUwMTMsIDB4MDYwMDYwMTMsCisJMHgwNDAwNzAxMywgMHgwMDY0NDAxNSwgMHgwNjgyMDM1ZSwgMHgwNDQ0ODAwMiwKKwkweDAyMjA1MDA4LCAweDA0MGY4MDFmLCAweDAzMmZhMDQyLCAweDA0MDA4MDE1LAorCTB4MDI4MDAzOWIsIDB4MDQ2YzgwMDQsIDB4MDQ4MTgzNzAsIDB4MDEyMDgwMTgsCisJMHgwNjc4MDAwMiwgMHgwNzAwMDAwMywgMHgwNDgxODM3MywgMHgwNjAwMzAwMSwKKwkweDA2MDAwMDEzLCAweDA0MDAxMDEzLCAweDA0MDA0MDEzLCAweDA2MDA1MDEzLAorCTB4MDQwZjgwMWYsIDB4MDIyZmEwMzIsIDB4MDI4MDAzOWIsIDB4MDQwZmQwMmEsCisJMHgwN2EwMDUzYSwgMHgwMzgwMDAxNCwgMHgwMzc5ZmYwMywgMHgwNzAwMDBmZiwKKwkweDA0NDg4MDAyLCAweDA2ODEwMzdhLCAweDA3MGZmMDAzLCAweDA0NTAwNDA4LAorCTB4MDUwMDgwZmYsIDB4MDM3OWZmMDAsIDB4MDcwMDAwZmYsIDB4MDY0ODkwMDIsCisJMHgwNzgxMDM4MSwgMHgwNzBmZjAwMCwgMHgwNDUwMDQwOCwgMHgwNTAwODBmZiwKKwkweDA3MDA1MDAzLCAweDA1MDA0MDAwLCAweDA2MDAzMDAxLCAweDA2MDAwMDEzLAorCTB4MDQwMDEwMTMsIDB4MDQwZjgwMWYsIDB4MDIyZmEwMzIsIDB4MDU2MDFjMmIsCisJMHgwNTBmODBmZiwgMHgwMjJmYTAzMSwgMHgwNjYwMGMxZiwgMHgwNTBmODBmZiwKKwkweDAyMmZhMDMyLCAweDAyNjgwNjA4LCAweDA2ODEwMzliLCAweDAxNjQwOGZmLAorCTB4MDU3ZGZlZmYsIDB4MDdmZmZmZmYsIDB4MDM0MDAwZmYsIDB4MDQ1YTA0MDcsCisJMHgwNzAwMDBmZiwgMHgwNzYwMDYxZSwgMHgwNTBmODBmZiwgMHgwMzJmYTAwYSwKKwkweDA2NjAwOTA4LCAweDA2NjlmOTA4LCAweDAyN2EwMDA4LCAweDA2MDAwMDIwLAorCTB4MDcwYWEwZmYsIDB4MDE0YTIwZmYsIDB4MDM3YTAwZmYsIDB4MDYwMDAwZGMsCisJMHgwNzAwMDBmZiwgMHgwMzgwMDNkMSwgMHgwNDAwNzAxMywgMHgwN2EwMDNlNCwKKwkweDAwN2EwMTAxLCAweDA3MDMwMDAwLCAweDA3MzAzMDAwLCAweDA3MDA4MTkwLAorCTB4MDYwMDYwMTMsIDB4MDUwZjgwMWUsIDB4MDMyZmEwM2EsIDB4MDczYWEwMDAsCisJMHgwNjAwMDAwMiwgMHgwNzMwMGMwMCwgMHgwNzAwMDAwNSwgMHgwMzgwMDNkMSwKKwkweDA0MDA3MDEzLCAweDA3YTAwM2U0LCAweDAwN2EwMTAxLCAweDA3ODEwMDAwLAorCTB4MDczMDMwMDAsIDB4MDcwMDAwOTAsIDB4MDYwMDYwMTMsIDB4MDY2MDBjMmEsCisJMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNzAwMDAwMywgMHgwNDc4MDEwNywKKwkweDA3ZmZmZjAwLCAweDAwN2MwMTA3LCAweDA3MDAwNTAwLCAweDA0ODE4M2M0LAorCTB4MDczMDMwMDAsIDB4MDUwMDA4OTAsIDB4MDc0ZDAwMDUsIDB4MDY2MDI4MmEsCisJMHgwNTBmODBmZiwgMHgwNTNmYTgwOSwgMHgwNzAwMDAwMywgMHgwMDQ5ZDAwNywKKwkweDA2ODEwM2NiLCAweDAyMjA2MDAxLCAweDA1MGY4MDFlLCAweDAzMmZhMDNhLAorCTB4MDczYWEwMDAsIDB4MDYwMDAwMDIsIDB4MDczMDBjMDAsIDB4MDcwMDAwMDUsCisJMHgwMTNlNDAwMCwgMHgwNzAwMDAzMCwgMHgwMjk4MDNkMywgMHgwNzBmZjBmNiwKKwkweDAzNjgzMGZmLCAweDA1ODE4M2Q0LCAweDA3MGYwMDFlLCAweDA0MGYxMDFmLAorCTB4MDcwZjMwMDAsIDB4MDEzZTQwMDAsIDB4MDYwMDAwMjAsIDB4MDQwZjgwMWEsCisJMHgwMzIwMDAwYSwgMHgwMjIwMTdkMCwgMHgwMzJmYTAxMiwgMHgwMTgwMDJlMiwKKwkweDAzMjAwMDAwLCAweDA2MDA2MDc2LCAweDAyODAwM2U2LCAweDAzMjAwMDExLAorCTB4MDYwMDYwMmEsIDB4MDRhMDA0NmIsIDB4MDU2MDA0MDYsIDB4MDUwZjgwZmYsCisJMHgwNTNmYTgwOSwgMHgwNjAwMDAwMiwgMHgwN2MwMDAwMCwgMHgwMjA3NjAyZiwKKwkweDA0NjAwODc2LCAweDA1MGY4MGZmLCAweDAyMmZhMDMxLCAweDAzMDc1MDAwLAorCTB4MDAwN2IwMDQsIDB4MDEwMTgwMDUsIDB4MDY2MDAwNzYsIDB4MDUwMDIwZmYsCisJMHgwNTBmODBmZiwgMHgwMTJmYTgwOSwgMHgwMjAyZjAwMSwgMHgwMTg2ODNmYSwKKwkweDAwMDJlMDEzLCAweDA0MGY4MDAyLCAweDA1M2ZhODBhLCAweDA3MDAwMDA5LAorCTB4MDYyNzMwMDEsIDB4MDQ0OGIwNzUsIDB4MDY4MTg0MDQsIDB4MDQ2MDIwNzYsCisJMHgwNTBmODBmZiwgMHgwNTNmYTgxMSwgMHgwNzAwMDAzYywgMHgwMTc5ZmU3OCwKKwkweDA3MDAwMGZmLCAweDAzMDE5MGZmLCAweDAzODY4NDBjLCAweDA0YTAwNDIwLAorCTB4MDAwNzgwMTksIDB4MDA5MjA0MWYsIDB4MDA4MDA0NjQsIDB4MDQwZmQwNzYsCisJMHgwNDBmZDAxOSwgMHgwNDYwMDI3NiwgMHgwNTAwMjBmZiwgMHgwNTBmODBmZiwKKwkweDAzMmZhMDA5LCAweDA0MGY4MDAyLCAweDA1M2ZhODBhLCAweDA3MDAwMDA5LAorCTB4MDUwZmUwMDAsIDB4MDI4Njg0MWMsIDB4MDc2MDE4MTgsIDB4MDUwZjgwZmYsCisJMHgwNTNmYTgwYSwgMHgwNzAwMDAwOSwgMHgwMTgwMDQxZCwgMHgwN2EwMDBmMCwKKwkweDA3MjczMDAwLCAweDAyMDc2MDEzLCAweDAzODAwMDNjLCAweDA0OGIwNDIwLAorCTB4MDMzODUwMDAsIDB4MDcwMzAwMDAsIDB4MDU2MDA4MTgsIDB4MDUwZjgwZmYsCisJMHgwMzJmYTAwOSwgMHgwNTRiMDQwMCwgMHgwMzA4YTBmZiwgMHgwMTc5ZmUwMCwKKwkweDA3MDAwMGZmLCAweDAxMDg4MGZmLCAweDA0NDhiMDc1LCAweDA1ODEwNDNhLAorCTB4MDc2MDE0N2IsIDB4MDUwZjgwZmYsIDB4MDAyZmE4MTksIDB4MDY0YjAwMDEsCisJMHgwMjA4MDAwMiwgMHgwMTA4MTAwMywgMHgwMDA4MjAwMSwgMHgwMjA4MzAwMSwKKwkweDAyMDc5MDAxLCAweDAyMDdhMDAxLCAweDAwMDg0MDEzLCAweDAyMDdmMDEzLAorCTB4MDE4MDA0NWMsIDB4MDY0ODUwNzUsIDB4MDQ4MTA0NTIsIDB4MDI0NjUwNzUsCisJMHgwNjYwMTQ3NiwgMHgwNTBmODBmZiwgMHgwNzNmYTAyMSwgMHgwNjAwMDAzZSwKKwkweDA3MGZmMDdkLCAweDA0NTAwNDdjLCAweDA1MGY4MGZmLCAweDAwMmZhODE5LAorCTB4MDQ4YjA0NDUsIDB4MDIwODAwMDEsIDB4MDAwODEwMDIsIDB4MDEwODIwMDMsCisJMHgwMzA3OTAwMywgMHgwMjA4MzA3YSwgMHgwMzQwMDA3ZSwgMHgwNjQyMDA3ZiwKKwkweDA0ODEwNDU3LCAweDA3MGZmMDdlLCAweDA1YTAwMWU0LCAweDAyOTI4NDU3LAorCTB4MDE4MDA0NjMsIDB4MDQ4YjA0NTIsIDB4MDY2MDE0NzYsIDB4MDUwZjgwZmYsCisJMHgwNzNmYTA0MSwgMHgwNjAwMDAzZSwgMHgwNjYwMjQ3NiwgMHgwNTBmODBmZiwKKwkweDA3M2ZhMDA5LCAweDA2MDAwMDA3LCAweDAwMDg0MDBlLCAweDA1OGIwNDVjLAorCTB4MDMzODUwMDAsIDB4MDMwMTAwMDAsIDB4MDYyMTkwMDEsIDB4MDQwZmUwN2YsCisJMHgwMTg2MDQ2MywgMHgwMDgwMDFjZCwgMHgwN2MwMDAwMCwgMHgwMDY4M2U3NSwKKwkweDA1ODEwNDY5LCAweDA0NDhkMDc1LCAweDA0ODEwNDhmLCAweDAxODAwNGJkLAorCTB4MDZhMDA1MWEsIDB4MDA4MDA0MWYsIDB4MDI5Nzg0NzYsIDB4MDc2MDI0MTgsCisJMHgwNTBmODBmZiwgMHgwMTJmYTgwOSwgMHgwNjc4MDAwMSwgMHgwNzAwMDBmZiwKKwkweDA3NWEwMDAwLCAweDA3MGZmMDE0LCAweDA1NjlmZWZmLCAweDA1NGIwOGZmLAorCTB4MDc1YTAwMDAsIDB4MDU2MDA0MTgsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksCisJMHgwNDBmZTAwNywgMHgwMzg2ODQ3ZCwgMHgwMTIwNDAwMCwgMHgwMTgwMDQ4YiwKKwkweDAwNzAwMTAxLCAweDAzMDEwMDAwLCAweDA2NzgwMDAxLCAweDA3ZmYwMDAwLAorCTB4MDc2YzAwZmYsIDB4MDY4MTg0ODUsIDB4MDA3MDAxMDEsIDB4MDMwMTAwMDAsCisJMHgwNTYwMDQxOCwgMHgwNTBmODBmZiwgMHgwMTJmYTgwYSwgMHgwNjc4MDAwMSwKKwkweDA3ZmYwMDAwLCAweDA1MDA0MGZmLCAweDAyNzlmZjAxLCAweDA3MDBmZmZmLAorCTB4MDUwMDIwMTQsIDB4MDdjMDAwMDAsIDB4MDQwMDcwNzYsIDB4MDQ0OGIwNzUsCisJMHgwNTgxMDRhOSwgMHgwMzIwMDAxMSwgMHgwNjAwNjA3NiwgMHgwNmEwMDNlNiwKIAkweDAwN2EwMTAxLCAweDA3MDYwMDAwLCAweDA3MzAzMDAwLCAweDA3MDA4MjkwLAogCTB4MDc2MDAwMTgsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDcwMDAwMDMsCi0JMHgwNDQ4ZTAwNywgMHgwNjgxODJkNiwgMHgwNjAwNjAxMywgMHgwMTgwMDJkZCwKLQkweDAyNDAwMDEwLCAweDA0ODEwMmQ2LCAweDA2MDA2MDEwLCAweDA0NjAzMjJhLAotCTB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDcwMDAwMDMsIDB4MDUwZjgwMWUsCi0JMHgwMzJmYTAzYSwgMHgwNjNhYTAyMCwgMHgwNjAwMDAwMiwgMHgwMTNlNDAwMCwKLQkweDA3MDAwMDMwLCAweDAwOTgwMmUzLCAweDA3MGZmMGY2LCAweDAzNjgzMGZmLAotCTB4MDc4MTgyZTQsIDB4MDcwZjAwMWUsIDB4MDU2MDEwMmIsIDB4MDUwZjEwZmYsCi0JMHgwNjNmM2MwOCwgMHgwNjAwMDAwZCwgMHgwMTNlNDAwMCwgMHgwNjAwMDAyMCwKLQkweDA0MGY4MDFhLCAweDAzMjAwMDBhLCAweDAyMjAxN2QwLCAweDAzMmZhMDEyLAotCTB4MDIwMmMwMTMsIDB4MDA4MDAyYmYsIDB4MDQwMDcwMTMsIDB4MDZhMDAzYmEsCi0JMHgwMDdhMDEwMSwgMHgwNzA1MDAwMCwgMHgwNzMwMzAwMCwgMHgwNzAwODg5MCwKLQkweDA3NGQwMDA1LCAweDA2MDA2MDEzLCAweDA1MGY4MDFlLCAweDAzMmZhMDNhLAotCTB4MDU2MDFhMmIsIDB4MDUwZjgwZmYsIDB4MDIyZmEwMTksIDB4MDQwMDEwMDIsCi0JMHgwNDAwMjAxMywgMHgwNDBmODAxZiwgMHgwMjJmYTAxYSwgMHgwNzNhYTAwYywKLQkweDA2MDAwMDAyLCAweDA3MzAwYzAzLCAweDA2MDAwMDBkLCAweDAyODAwM2E3LAotCTB4MDQwMDcwMTMsIDB4MDZhMDAzYmEsIDB4MDA3YTAxMDEsIDB4MDMwNzAwMDAsCi0JMHgwNjYwMjgyYSwgMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwgMHgwNjAwMDAwNCwKLQkweDAyNDk5MDA4LCAweDA3ODEwMzE3LCAweDA3MzAzMDAwLCAweDA3MDA4ODkwLAotCTB4MDI4MDAzMTksIDB4MDczMDMwMDAsIDB4MDQwMDg5ODAsIDB4MDUwMDcwMDMsCi0JMHgwNzRkMDAwNSwgMHgwNjAwNjAxMywgMHgwNTBmODAxZSwgMHgwMzJmYTAzYSwKLQkweDA3NjAxNDJiLCAweDA1MGY4MGZmLCAweDAzMmZhMDIxLCAweDA2NGIwMDAyLAotCTB4MDI0OTkwMDgsIDB4MDY4MTAzMjUsIDB4MDY0NGMwMDIsIDB4MDU0YjA0MDAsCi0JMHgwNTAwNDBmZiwgMHgwNjY5ODEwNCwgMHgwNTgxODMzYSwgMHgwNjAwMDAxMywKLQkweDA0MDAxMDEzLCAweDA0NzgwMTAyLCAweDA2MDAwMDEwLCAweDA2MDAzMDEzLAotCTB4MDQwMDQwMTMsIDB4MDYwMDUwMTMsIDB4MDYwMDYwMTMsIDB4MDQwMDcwMTMsCi0JMHgwMDY0NDAxNSwgMHgwNzgyMDMzNiwgMHgwNDQ0ODAwMiwgMHgwMjIwNTAwOCwKLQkweDA0MGY4MDFmLCAweDAzMmZhMDQyLCAweDA0MDA4MDE1LCAweDAzODAwMzcxLAotCTB4MDQ2YzgwMDQsIDB4MDU4MTgzNDgsIDB4MDEyMDgwMTgsIDB4MDY3ODAwMDIsCi0JMHgwNzAwMDAwMywgMHgwNTgxODM0YiwgMHgwNjAwMzAwMSwgMHgwNjAwMDAxMywKLQkweDA0MDAxMDEzLCAweDA0MDA0MDEzLCAweDA2MDA1MDEzLCAweDA0MGY4MDFmLAotCTB4MDIyZmEwMzIsIDB4MDM4MDAzNzEsIDB4MDQwZmQwMmEsIDB4MDZhMDA1MTAsCi0JMHgwMzgwMDAxNCwgMHgwNDQ4ODAwMiwgMHgwNzgxMDM1MCwgMHgwNzBmZjAwMywKLQkweDA0NTAwNDA4LCAweDA1MDA4MGZmLCAweDA2NDg5MDAyLCAweDA2ODEwMzU3LAotCTB4MDM3OWZmMDAsIDB4MDcwMDAwZmYsIDB4MDcwZmYwMDAsIDB4MDQ1MDA0MDgsCi0JMHgwNTAwODBmZiwgMHgwNzAwNTAwMywgMHgwNTAwNDAwMCwgMHgwNjAwMzAwMSwKLQkweDA2MDAwMDEzLCAweDA0MDAxMDEzLCAweDA0MGY4MDFmLCAweDAyMmZhMDMyLAotCTB4MDU2MDFjMmIsIDB4MDUwZjgwZmYsIDB4MDIyZmEwMzEsIDB4MDY2MDBjMWYsCi0JMHgwNTBmODBmZiwgMHgwMjJmYTAzMiwgMHgwMjY4MDYwOCwgMHgwNzgxMDM3MSwKLQkweDAxNjQwOGZmLCAweDA1N2RmZWZmLCAweDA3ZmZmZmZmLCAweDAzNDAwMGZmLAotCTB4MDQ1YTA0MDcsIDB4MDcwMDAwZmYsIDB4MDc2MDA2MWUsIDB4MDUwZjgwZmYsCi0JMHgwMzJmYTAwYSwgMHgwNjYwMDkwOCwgMHgwNjY5ZjkwOCwgMHgwMjdhMDAwOCwKLQkweDA2MDAwMDIwLCAweDA3MGFhMGZmLCAweDAxNGEyMGZmLCAweDAzN2EwMGZmLAotCTB4MDYwMDAwZGMsIDB4MDcwMDAwZmYsIDB4MDI4MDAzYTcsIDB4MDQwMDcwMTMsCi0JMHgwNmEwMDNiYSwgMHgwMDdhMDEwMSwgMHgwNzAzMDAwMCwgMHgwNzMwMzAwMCwKLQkweDA3MDA4MTkwLCAweDA2MDA2MDEzLCAweDA1MGY4MDFlLCAweDAzMmZhMDNhLAotCTB4MDczYWEwMDAsIDB4MDYwMDAwMDIsIDB4MDczMDBjMDAsIDB4MDcwMDAwMDUsCi0JMHgwMjgwMDNhNywgMHgwNDAwNzAxMywgMHgwNmEwMDNiYSwgMHgwMDdhMDEwMSwKLQkweDA3ODEwMDAwLCAweDA3MzAzMDAwLCAweDA3MDAwMDkwLCAweDA2MDA2MDEzLAotCTB4MDY2MDBjMmEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDcwMDAwMDMsCi0JMHgwNDc4MDEwNywgMHgwN2ZmZmYwMCwgMHgwMDdjMDEwNywgMHgwNzAwMDUwMCwKLQkweDA1ODE4MzlhLCAweDA3MzAzMDAwLCAweDA1MDAwODkwLCAweDA3NGQwMDA1LAotCTB4MDY2MDI4MmEsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDcwMDAwMDMsCi0JMHgwMDQ5ZDAwNywgMHgwNjgxMDNhMSwgMHgwMjIwNjAwMSwgMHgwNTBmODAxZSwKLQkweDAzMmZhMDNhLCAweDA3M2FhMDAwLCAweDA2MDAwMDAyLCAweDA3MzAwYzAwLAotCTB4MDcwMDAwMDUsIDB4MDEzZTQwMDAsIDB4MDcwMDAwMzAsIDB4MDM5ODAzYTksCi0JMHgwNzBmZjBmNiwgMHgwMzY4MzBmZiwgMHgwNTgxODNhYSwgMHgwNzBmMDAxZSwKLQkweDA0MGYxMDFmLCAweDA3MGYzMDAwLCAweDAxM2U0MDAwLCAweDA2MDAwMDIwLAotCTB4MDQwZjgwMWEsIDB4MDMyMDAwMGEsIDB4MDIyMDE3ZDAsIDB4MDMyZmEwMTIsCi0JMHgwMDgwMDJiZiwgMHgwMzIwMDAwMCwgMHgwNjAwNjA3NiwgMHgwMjgwMDNiYywKLQkweDAzMjAwMDExLCAweDA2MDA2MDJhLCAweDA1YTAwNDQxLCAweDA1NjAwNDA2LAotCTB4MDUwZjgwZmYsIDB4MDUzZmE4MDksIDB4MDYwMDAwMDIsIDB4MDdjMDAwMDAsCi0JMHgwMjA3NjAyZiwgMHgwNDYwMDg3NiwgMHgwNTBmODBmZiwgMHgwMjJmYTAzMSwKLQkweDAzMDc1MDAwLCAweDAwMDdiMDA0LCAweDAxMDE4MDA1LCAweDA2NjAwMDc2LAotCTB4MDUwMDIwZmYsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksIDB4MDIwMmYwMDEsCi0JMHgwMDg2ODNkMCwgMHgwMDAyZTAxMywgMHgwNDBmODAwMiwgMHgwNTNmYTgwYSwKLQkweDA3MDAwMDA5LCAweDA2MjczMDAxLCAweDA0NDhiMDc1LCAweDA0ODE4M2RhLAotCTB4MDQ2MDIwNzYsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MTEsIDB4MDcwMDAwM2MsCi0JMHgwMTc5ZmU3OCwgMHgwNzAwMDBmZiwgMHgwMzAxOTBmZiwgMHgwMTg2ODNlMiwKLQkweDA3YTAwM2Y2LCAweDAwMDc4MDE5LCAweDAzOTIwM2Y1LCAweDAxODAwNDNhLAotCTB4MDQwZmQwNzYsIDB4MDQwZmQwMTksIDB4MDQ2MDAyNzYsIDB4MDUwMDIwZmYsCi0JMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwNDBmODAwMiwgMHgwNTNmYTgwYSwKLQkweDA3MDAwMDA5LCAweDA1MGZlMDAwLCAweDAwODY4M2YyLCAweDA3NjAxODE4LAotCTB4MDUwZjgwZmYsIDB4MDUzZmE4MGEsIDB4MDcwMDAwMDksIDB4MDM4MDAzZjMsCi0JMHgwN2EwMDBkZSwgMHgwNzI3MzAwMCwgMHgwMjA3NjAxMywgMHgwMjgwMDAzZCwKLQkweDA3OGIwM2Y2LCAweDAzMzg1MDAwLCAweDA3MDMwMDAwLCAweDA1NjAwODE4LAotCTB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDU0YjA0MDAsIDB4MDMwOGEwZmYsCi0JMHgwMTc5ZmUwMCwgMHgwNzAwMDBmZiwgMHgwMTA4ODBmZiwgMHgwNDQ4YjA3NSwKLQkweDA0ODEwNDEwLCAweDA3NjAxNDdiLCAweDA1MGY4MGZmLCAweDAwMmZhODE5LAotCTB4MDY0YjAwMDEsIDB4MDIwODAwMDIsIDB4MDEwODEwMDMsIDB4MDAwODIwMDEsCi0JMHgwMjA4MzAwMSwgMHgwMjA3OTAwMSwgMHgwMjA3YTAwMSwgMHgwMDA4NDAxMywKLQkweDAyMDdmMDEzLCAweDAwODAwNDMyLCAweDA2NDg1MDc1LCAweDA1ODEwNDI4LAotCTB4MDI0NjUwNzUsIDB4MDY2MDE0NzYsIDB4MDUwZjgwZmYsIDB4MDczZmEwMjEsCi0JMHgwNjAwMDAzZSwgMHgwNzBmZjA3ZCwgMHgwNDUwMDQ3YywgMHgwNTBmODBmZiwKLQkweDAwMmZhODE5LCAweDA1OGIwNDFiLCAweDAyMDgwMDAxLCAweDAwMDgxMDAyLAotCTB4MDEwODIwMDMsIDB4MDMwNzkwMDMsIDB4MDIwODMwN2EsIDB4MDM0MDAwN2UsCi0JMHgwNjQyMDA3ZiwgMHgwNTgxMDQyZCwgMHgwNzBmZjA3ZSwgMHgwNWEwMDFkMiwKLQkweDAzOTI4NDJkLCAweDAxODAwNDM5LCAweDA1OGIwNDI4LCAweDA2NjAxNDc2LAotCTB4MDUwZjgwZmYsIDB4MDczZmEwNDEsIDB4MDYwMDAwM2UsIDB4MDY2MDI0NzYsCi0JMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwgMHgwNjAwMDAwNywgMHgwMDA4NDAwZSwKLQkweDA0OGIwNDMyLCAweDAzMzg1MDAwLCAweDAzMDEwMDAwLCAweDA2MjE5MDAxLAotCTB4MDQwZmUwN2YsIDB4MDE4NjA0MzksIDB4MDE4MDAxYmIsIDB4MDdjMDAwMDAsCi0JMHgwMDY4M2U3NSwgMHgwNTgxMDQzZiwgMHgwNDQ4ZDA3NSwgMHgwNTgxMDQ2NSwKLQkweDAxODAwNDkzLCAweDA1YTAwNGYwLCAweDAzODAwM2Y1LCAweDAyOTc4NDRjLAotCTB4MDc2MDI0MTgsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MDksIDB4MDY3ODAwMDEsCi0JMHgwNzAwMDBmZiwgMHgwNzVhMDAwMCwgMHgwNzBmZjAxNCwgMHgwNTY5ZmVmZiwKLQkweDA1NGIwOGZmLCAweDA3NWEwMDAwLCAweDA1NjAwNDE4LCAweDA1MGY4MGZmLAotCTB4MDEyZmE4MDksIDB4MDQwZmUwMDcsIDB4MDM4Njg0NTMsIDB4MDEyMDQwMDAsCi0JMHgwMDgwMDQ2MSwgMHgwMDcwMDEwMSwgMHgwMzAxMDAwMCwgMHgwNjc4MDAwMSwKLQkweDA3ZmYwMDAwLCAweDA3NmMwMGZmLCAweDA2ODE4NDViLCAweDAwNzAwMTAxLAotCTB4MDMwMTAwMDAsIDB4MDU2MDA0MTgsIDB4MDUwZjgwZmYsIDB4MDEyZmE4MGEsCi0JMHgwNjc4MDAwMSwgMHgwN2ZmMDAwMCwgMHgwNTAwNDBmZiwgMHgwMjc5ZmYwMSwKLQkweDA3MDBmZmZmLCAweDA1MDAyMDE0LCAweDA3YzAwMDAwLCAweDA0MDA3MDc2LAotCTB4MDQ0OGIwNzUsIDB4MDQ4MTA0N2YsIDB4MDMyMDAwMTEsIDB4MDYwMDYwNzYsCi0JMHgwNmEwMDNiYywgMHgwMDdhMDEwMSwgMHgwNzA2MDAwMCwgMHgwNzMwMzAwMCwKLQkweDA3MDA4MjkwLCAweDA3NjAwMDE4LCAweDA1MGY4MGZmLCAweDA1M2ZhODA5LAotCTB4MDcwMDAwMDMsIDB4MDQ0OGUwMDcsIDB4MDc4MTg0NzcsIDB4MDYwMDYwMTMsCi0JMHgwMTgwMDQ4ZSwgMHgwMjQwMDAxMCwgMHgwNTgxMDQ3NywgMHgwNjAwNjAxMCwKLQkweDA0NjAzMjc2LCAweDA1MGY4MGZmLCAweDA3M2ZhMDBhLCAweDA3MDAwMDAzLAotCTB4MDE4MDA0OGUsIDB4MDQ2MDJhNzYsIDB4MDUwZjgwZmYsIDB4MDMyZmEwMDksCi0JMHgwNjBmZjA3YSwgMHgwNTUwMDQwMCwgMHgwNzAwMDBmZiwgMHgwNDYwMmE3NiwKLQkweDA1MGY4MGZmLCAweDAzMmZhMDBhLCAweDA3YTAwM2I3LCAweDAwN2EwMTAxLAotCTB4MDMwMTAwMDAsIDB4MDYzMDMwMDgsIDB4MDUwMDgwMDAsIDB4MDYwMDYwMGUsCi0JMHgwNTBmODA3NCwgMHgwMzJmYTAzYSwgMHgwNTMwNzlhMCwgMHgwNzAwMDAwYywKLQkweDAwODAwNGQzLCAweDAwNjgzZTc1LCAweDA3NmMwYWZmLCAweDA1ODEwNGIyLAotCTB4MDQwMDcwMTMsIDB4MDMyMDAwMTEsIDB4MDYwMDYwNzYsIDB4MDZhMDAzYmMsCi0JMHgwMDdhMDEwMSwgMHgwMzA3MDAwMCwgMHgwNjYwMjg3NiwgMHgwNTBmODBmZiwKLQkweDA1M2ZhODA5LCAweDA2MDAwMDAxLCAweDAzNDk5MDAzLCAweDA0ODEwNGE3LAotCTB4MDczMDMwMDAsIDB4MDcwMDg4OTAsIDB4MDUzMDc5YTAsIDB4MDcwMDAwMGMsCi0JMHgwMDgwMDRhYiwgMHgwNzMwMzAwMCwgMHgwNDAwODk4MCwgMHgwNDMwNzkyMCwKLQkweDA3MDAwMDBjLCAweDA3NGQwMDA1LCAweDA2MDA2MDEzLCAweDA1MGY4MDc0LAotCTB4MDMyZmEwM2EsIDB4MDQzMDc5MjAsIDB4MDcwMDAwMGMsIDB4MDA4MDA0ZDMsCisJMHgwNDQ4ZTAwNywgMHgwNjgxODRhMSwgMHgwNjAwNjAxMywgMHgwMTgwMDRiOCwKKwkweDAyNDAwMDEwLCAweDA0ODEwNGExLCAweDA2MDA2MDEwLCAweDA0NjAzMjc2LAorCTB4MDUwZjgwZmYsIDB4MDczZmEwMGEsIDB4MDcwMDAwMDMsIDB4MDE4MDA0YjgsCiAJMHgwNDYwMmE3NiwgMHgwNTBmODBmZiwgMHgwMzJmYTAwOSwgMHgwNjBmZjA3YSwKIAkweDA1NTAwNDAwLCAweDA3MDAwMGZmLCAweDA0NjAyYTc2LCAweDA1MGY4MGZmLAotCTB4MDMyZmEwMGEsIDB4MDQwMDcwNzYsIDB4MDdhMDAzYjcsIDB4MDA3YTAxMDEsCi0JMHgwMzAxMDAwMCwgMHgwNjMwMzAwOCwgMHgwNzAwODgwMCwgMHgwNzRkMDAwNSwKLQkweDA2NjAwYTc2LCAweDA1MGY4MGZmLCAweDA3M2ZhMDA5LCAweDA3MDAwMDAzLAotCTB4MDU0YjA0MDYsIDB4MDQ1YTA0MDQsIDB4MDUwMDQwZmYsIDB4MDYwMDYwMGUsCi0JMHgwNTBmODA3NCwgMHgwMzJmYTAzYSwgMHgwNjQ4YzA3NSwgMHgwNTgxMDRkMSwKLQkweDA2MzA3ZDIwLCAweDA3MDAwMDBjLCAweDAwODAwNGQzLCAweDA0MzA3OTIwLAotCTB4MDcwMDAwMGMsIDB4MDEzZTQwMDAsIDB4MDcwMDAwMzAsIDB4MDA5ODA0ZDUsCi0JMHgwNzBmZjBmNiwgMHgwNzQ4NTBmZiwgMHgwNjgxODRkNiwgMHgwNTBmMjA3NCwKLQkweDA2MGEwMDA3LCAweDA0MDA3MGZiLCAweDA0NmE3MDA3LCAweDA1MGY0MGZmLAotCTB4MDEzZTQwMDAsIDB4MDYwMDAwMjAsIDB4MDY3ODAwN2EsIDB4MDdmZmYwMDAsCi0JMHgwNjgxODRlNiwgMHgwMzIwMDAwYSwgMHgwMjIwMTdkMCwgMHgwMDgwMDRlOSwKLQkweDAzMjAwMDBhLCAweDA2MzAxYjU4LCAweDA2MDAwMDAxLCAweDA1MGY4MDcyLAotCTB4MDMyZmEwMTIsIDB4MDM4MDAzZjUsIDB4MDEyMDgwNjAsIDB4MDYwMDkwMmEsCi0JMHgwNDAwMjAyMCwgMHgwMTgwMDRmYywgMHgwNDAwODBmYiwgMHgwNjZhZTEwOCwKLQkweDA2MDA5MDc2LCAweDA0MDAyMDc1LCAweDAxODAwNGZjLCAweDAzMjAxMTAwLAotCTB4MDc4NDg0ZmEsIDB4MDY0MjAwMDEsIDB4MDc4MTg0ZjYsIDB4MDI4MDA1MTMsCi0JMHgwMjBlMDAwOCwgMHgwN2MwMDAwMCwgMHgwNTBmZDAwOSwgMHgwNDBmZDAwOCwKLQkweDAzMjAxMTAwLCAweDA1ODQ4NTAzLCAweDA2NDIwMDAxLCAweDA3ODE4NGZmLAotCTB4MDI4MDA1MTMsIDB4MDA3YTAxMDIsIDB4MDQwMDAxMDEsIDB4MDU2MDA4MDksCi0JMHgwNTBmODBmZiwgMHgwNzNmYTAwYSwgMHgwNjAwMDAwMSwgMHgwMjBlMDAwOCwKLQkweDA2ODQwNTBkLCAweDAzMGUwMDA5LCAweDA3YzAwMDAwLCAweDAxMDExMDA5LAotCTB4MDUyZTQzMDAsIDB4MDdjMDAwMDAsIDB4MDUyZTQwMGYsIDB4MDEyMDgwOTAsCi0JMHgwMTgwMDRmNSwgMHgwNzBmYzBmZiwgMHgwNDBmODAxMywgMHgwMzJmYTAwOSwKLQkweDAyODAwNTE2LCAweDE1NDE2ZWE5LCAweGZmZWYwYjAxCisJMHgwMzJmYTAwYSwgMHgwN2EwMDNlMSwgMHgwMDdhMDEwMSwgMHgwMzAxMDAwMCwKKwkweDA2MzAzMDA4LCAweDA1MDA4MDAwLCAweDA2MDA2MDBlLCAweDA1MGY4MDc0LAorCTB4MDMyZmEwM2EsIDB4MDUzMDc5YTAsIDB4MDcwMDAwMGMsIDB4MDA4MDA0ZmQsCisJMHgwMDY4M2U3NSwgMHgwNzZjMGFmZiwgMHgwNDgxMDRkYywgMHgwNDAwNzAxMywKKwkweDAzMjAwMDExLCAweDA2MDA2MDc2LCAweDA2YTAwM2U2LCAweDAwN2EwMTAxLAorCTB4MDMwNzAwMDAsIDB4MDY2MDI4NzYsIDB4MDUwZjgwZmYsIDB4MDUzZmE4MDksCisJMHgwNjAwMDAwMSwgMHgwMzQ5OTAwMywgMHgwNTgxMDRkMSwgMHgwNzMwMzAwMCwKKwkweDA3MDA4ODkwLCAweDA1MzA3OWEwLCAweDA3MDAwMDBjLCAweDAwODAwNGQ1LAorCTB4MDczMDMwMDAsIDB4MDQwMDg5ODAsIDB4MDQzMDc5MjAsIDB4MDcwMDAwMGMsCisJMHgwNzRkMDAwNSwgMHgwNjAwNjAxMywgMHgwNTBmODA3NCwgMHgwMzJmYTAzYSwKKwkweDA0MzA3OTIwLCAweDA3MDAwMDBjLCAweDAwODAwNGZkLCAweDA0NjAyYTc2LAorCTB4MDUwZjgwZmYsIDB4MDMyZmEwMDksIDB4MDYwZmYwN2EsIDB4MDU1MDA0MDAsCisJMHgwNzAwMDBmZiwgMHgwNDYwMmE3NiwgMHgwNTBmODBmZiwgMHgwMzJmYTAwYSwKKwkweDA0MDA3MDc2LCAweDA3YTAwM2UxLCAweDAwN2EwMTAxLCAweDAzMDEwMDAwLAorCTB4MDYzMDMwMDgsIDB4MDcwMDg4MDAsIDB4MDc0ZDAwMDUsIDB4MDY2MDBhNzYsCisJMHgwNTBmODBmZiwgMHgwNzNmYTAwOSwgMHgwNzAwMDAwMywgMHgwNTRiMDQwNiwKKwkweDA0NWEwNDA0LCAweDA1MDA0MGZmLCAweDA2MDA2MDBlLCAweDA1MGY4MDc0LAorCTB4MDMyZmEwM2EsIDB4MDY0OGMwNzUsIDB4MDQ4MTA0ZmIsIDB4MDYzMDdkMjAsCisJMHgwNzAwMDAwYywgMHgwMDgwMDRmZCwgMHgwNDMwNzkyMCwgMHgwNzAwMDAwYywKKwkweDAxM2U0MDAwLCAweDA3MDAwMDMwLCAweDAxOTgwNGZmLCAweDA3MGZmMGY2LAorCTB4MDc0ODUwZmYsIDB4MDU4MTg1MDAsIDB4MDUwZjIwNzQsIDB4MDYwYTAwMDcsCisJMHgwNDAwNzBmYiwgMHgwNDZhNzAwNywgMHgwNTBmNDBmZiwgMHgwMTNlNDAwMCwKKwkweDA2MDAwMDIwLCAweDA2NzgwMDdhLCAweDA3ZmZmMDAwLCAweDA0ODE4NTEwLAorCTB4MDMyMDAwMGEsIDB4MDIyMDE3ZDAsIDB4MDI4MDA1MTMsIDB4MDMyMDAwMGEsCisJMHgwNjMwMWI1OCwgMHgwNjAwMDAwMSwgMHgwNTBmODA3MiwgMHgwMzJmYTAxMiwKKwkweDAwODAwNDFmLCAweDAxMjA4MDYwLCAweDA2MDA5MDJhLCAweDA0MDAyMDIwLAorCTB4MDI4MDA1MjYsIDB4MDQwMDgwZmIsIDB4MDY2YWUxMDgsIDB4MDYwMDkwNzYsCisJMHgwNDAwMjA3NSwgMHgwMjgwMDUyNiwgMHgwMzIwMTEwMCwgMHgwNTg0ODUyNCwKKwkweDA2NDIwMDAxLCAweDA0ODE4NTIwLCAweDAyODAwNTNkLCAweDAyMGUwMDA4LAorCTB4MDdjMDAwMDAsIDB4MDUwZmQwMDksIDB4MDQwZmQwMDgsIDB4MDMyMDExMDAsCisJMHgwNTg0ODUyZCwgMHgwNjQyMDAwMSwgMHgwNDgxODUyOSwgMHgwMjgwMDUzZCwKKwkweDAwN2EwMTAyLCAweDA0MDAwMTAxLCAweDA1NjAwODA5LCAweDA1MGY4MGZmLAorCTB4MDczZmEwMGEsIDB4MDYwMDAwMDEsIDB4MDIwZTAwMDgsIDB4MDY4NDA1MzcsCisJMHgwMzBlMDAwOSwgMHgwN2MwMDAwMCwgMHgwMTAxMTAwOSwgMHgwNTJlNDMwMCwKKwkweDA3YzAwMDAwLCAweDA1MmU0MDBmLCAweDAxMjA4MDkwLCAweDAyODAwNTFmLAorCTB4MDcwZmMwZmYsIDB4MDQwZjgwMTMsIDB4MDMyZmEwMDksIDB4MDI4MDA1NDAsCisJMHg2MzIxZDkyZSwgMHhmZmVmMTlhMgogfTsKIAogI2lmZGVmIFVOSVFVRV9GV19OQU1FCi11aW50MzJfdCBmdzI0MDBfbGVuZ3RoMDIgPSAweDAwMDAxNGZmIDsKK3VpbnQzMl90IGZ3MjQwMF9sZW5ndGgwMiA9IDB4MDAwMDE2NWUgOwogI2Vsc2UKLXVpbnQzMl90IHJpc2NfY29kZV9sZW5ndGgwMiA9IDB4MDAwMDE0ZmYgOwordWludDMyX3QgcmlzY19jb2RlX2xlbmd0aDAyID0gMHgwMDAwMTY1ZSA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWw2MzEyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDYzMTIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU1NTM5Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDYzMTIuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA1IFFMb2dpYyBDb3Jwb3JhdGlvbgotICoKLSAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0KLSNpbmNsdWRlICJxbGFfZGVmLmgiCi0KLXN0YXRpYyBjaGFyIHFsYV9kcml2ZXJfbmFtZVtdID0gInFsYTYzMTIiOwotCi1leHRlcm4gdW5zaWduZWQgY2hhciAgZncyMzAwZmx4X3ZlcnNpb25bXTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyICBmdzIzMDBmbHhfdmVyc2lvbl9zdHJbXTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBmdzIzMDBmbHhfYWRkcjAxOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGZ3MjMwMGZseF9jb2RlMDFbXTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBmdzIzMDBmbHhfbGVuZ3RoMDE7Ci0KLXN0YXRpYyBzdHJ1Y3QgcWxhX2Z3X2luZm8gcWxhX2Z3X3RibFtdID0gewotCXsKLQkJLmFkZHJlc3NpbmcJPSBGV19JTkZPX0FERFJfTk9STUFMLAotCQkuZndjb2RlCQk9ICZmdzIzMDBmbHhfY29kZTAxWzBdLAotCQkuZndsZW4JCT0gJmZ3MjMwMGZseF9sZW5ndGgwMSwKLQkJLmZ3c3RhcnQJPSAmZncyMzAwZmx4X2FkZHIwMSwKLQl9LAotCXsgRldfSU5GT19BRERSX05PTU9SRSwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcWxhX2JvYXJkX2luZm8gcWxhX2JvYXJkX3RibFtdID0gewotCXsKLQkJLmRydl9uYW1lCT0gcWxhX2RyaXZlcl9uYW1lLAotCQkuaXNwX25hbWUJPSAiSVNQNjMxMiIsCi0JCS5md19pbmZvCT0gcWxhX2Z3X3RibCwKLQl9LAotCXsKLQkJLmRydl9uYW1lCT0gcWxhX2RyaXZlcl9uYW1lLAotCQkuaXNwX25hbWUJPSAiSVNQNjMyMiIsCi0JCS5md19pbmZvCT0gcWxhX2Z3X3RibCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsYTYzMTJfcGNpX3RibFtdID0gewotCXsKLQkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX1FMT0dJQywKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzEyLAotCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKLQkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCi0JCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZxbGFfYm9hcmRfdGJsWzBdLAotCX0sCi0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUUxPR0lDLAotCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDYzMjIsCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJnFsYV9ib2FyZF90YmxbMV0sCi0JfSwKLQl7MCwgMH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsYTYzMTJfcGNpX3RibCk7Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1xbGE2MzEyX3Byb2JlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCXJldHVybiBxbGEyeDAwX3Byb2JlX29uZShwZGV2LAotCSAgICAoc3RydWN0IHFsYV9ib2FyZF9pbmZvICopaWQtPmRyaXZlcl9kYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0Ci1xbGE2MzEyX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JcWxhMngwMF9yZW1vdmVfb25lKHBkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcWxhNjMxMl9wY2lfZHJpdmVyID0gewotCS5uYW1lCQk9ICJxbGE2MzEyIiwKLQkuaWRfdGFibGUJPSBxbGE2MzEyX3BjaV90YmwsCi0JLnByb2JlCQk9IHFsYTYzMTJfcHJvYmVfb25lLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocWxhNjMxMl9yZW1vdmVfb25lKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1xbGE2MzEyX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZxbGE2MzEyX3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXFsYTYzMTJfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcWxhNjMxMl9wY2lfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocWxhNjMxMl9pbml0KTsKLW1vZHVsZV9leGl0KHFsYTYzMTJfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIlFMb2dpYyBDb3Jwb3JhdGlvbiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJRTG9naWMgSVNQNjN4eCBGQy1TQ1NJIEhvc3QgQnVzIEFkYXB0ZXIgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfVkVSU0lPTihRTEEyWFhYX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWw2MzEyX2Z3LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDYzMTJfZncuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJiODM3MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbDYzMTJfZncuYworKysgL2Rldi9udWxsCkBAIC0xLDcwNzggKzAsMCBAQAotLyoKLSAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNSBRTG9naWMgQ29ycG9yYXRpb24KLSAqCi0gKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgotICovCi0KLS8qCi0gKglGaXJtd2FyZSBWZXJzaW9uIDMuMDMuMTggKDEyOjA3IFNlcCAyMCwgMjAwNSkKLSAqLwotCi0jaWZkZWYgVU5JUVVFX0ZXX05BTUUKLXVuc2lnbmVkIHNob3J0IGZ3MjMwMGZseF92ZXJzaW9uID0gMyoxMDI0KzM7Ci0jZWxzZQotdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX3ZlcnNpb24gPSAzKjEwMjQrMzsKLSNlbmRpZgotCi0jaWZkZWYgVU5JUVVFX0ZXX05BTUUKLXVuc2lnbmVkIGNoYXIgZncyMzAwZmx4X3ZlcnNpb25fc3RyW10gPSB7MywgMywxOH07Ci0jZWxzZQotdW5zaWduZWQgY2hhciBmaXJtd2FyZV92ZXJzaW9uW10gPSB7MywgMywxOH07Ci0jZW5kaWYKLQotI2lmZGVmIFVOSVFVRV9GV19OQU1FCi0jZGVmaW5lIGZ3MjMwMGZseF9WRVJTSU9OX1NUUklORyAiMy4wMy4xOCIKLSNlbHNlCi0jZGVmaW5lIEZXX1ZFUlNJT05fU1RSSU5HICIzLjAzLjE4IgotI2VuZGlmCi0KLSNpZmRlZiBVTklRVUVfRldfTkFNRQotdW5zaWduZWQgc2hvcnQgZncyMzAwZmx4X2FkZHIwMSA9IDB4MDgwMCA7Ci0jZWxzZQotdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2FkZHIwMSA9IDB4MDgwMCA7Ci0jZW5kaWYKLQotI2lmZGVmIFVOSVFVRV9GV19OQU1FCi11bnNpZ25lZCBzaG9ydCBmdzIzMDBmbHhfY29kZTAxW10gPSB7IAotI2Vsc2UKLXVuc2lnbmVkIHNob3J0IHJpc2NfY29kZTAxW10gPSB7IAotI2VuZGlmCi0JMHgwNDcwLCAweDAwMDAsIDB4MDAwMCwgMHhkYmI3LCAweDAwMDAsIDB4MDAwMywgMHgwMDAzLCAweDAwMTIsCi0JMHgwMzE3LCAweDIwNDMsIDB4NGY1MCwgMHg1OTUyLCAweDQ5NDcsIDB4NDg1NCwgMHgyMDMyLCAweDMwMzAsCi0JMHgzMTIwLCAweDUxNGMsIDB4NGY0NywgMHg0OTQzLCAweDIwNDMsIDB4NGY1MiwgMHg1MDRmLCAweDUyNDEsCi0JMHg1NDQ5LCAweDRmNGUsIDB4MjA0OSwgMHg1MzUwLCAweDMyMzMsIDB4MzAzMCwgMHgyMDQ2LCAweDY5NzIsCi0JMHg2ZDc3LCAweDYxNzIsIDB4NjUyMCwgMHgyMDU2LCAweDY1NzIsIDB4NzM2OSwgMHg2ZjZlLCAweDIwMzAsCi0JMHgzMzJlLCAweDMwMzMsIDB4MmUzMSwgMHgzODIwLCAweDIwMjAsIDB4MjAyMCwgMHgyNDAwLCAweDIwYTksCi0JMHgwMDBmLCAweDIwMDEsIDB4MDAwMCwgMHg0MDBmLCAweDIwOTEsIDB4MjIwMCwgMHgyMGE5LCAweDAwMGYsCi0JMHgyMDAxLCAweDAwMDAsIDB4NDAwZiwgMHgyMDkxLCAweDI0MDAsIDB4MjBhOSwgMHgwMDBmLCAweDIwMDEsCi0JMHgwMDAwLCAweDQwMGYsIDB4MjA5MSwgMHgyNjAwLCAweDIwYTksIDB4MDAwZiwgMHgyMDAxLCAweDAwMDAsCi0JMHg0MDBmLCAweDIwOTEsIDB4MjgwMCwgMHgyMGE5LCAweDAwMGYsIDB4MjAwMSwgMHgwMDAwLCAweDQwMGYsCi0JMHgyMDkxLCAweDJhMDAsIDB4MjBhOSwgMHgwMDBmLCAweDIwMDEsIDB4MDAwMCwgMHg0MDBmLCAweDIwOTEsCi0JMHgyYzAwLCAweDIwYTksIDB4MDAwZiwgMHgyMDAxLCAweDAwMDAsIDB4NDAwZiwgMHgyMDkxLCAweDJlMDAsCi0JMHgyMGE5LCAweDAwMGYsIDB4MjAwMSwgMHgwMDAwLCAweDQwMGYsIDB4MjA5MSwgMHgyMDAwLCAweDIwMDEsCi0JMHgwMDAwLCAweDIwYzEsIDB4MDAwNCwgMHgyMGM5LCAweDFiZmYsIDB4MjA1OSwgMHgwMDAwLCAweDJiNzgsCi0JMHg3ODgzLCAweDAwMDQsIDB4MjA4OSwgMHgyYzA2LCAweDIwNTEsIDB4MTgwMCwgMHgyYTcwLCAweDIwZTEsCi0JMHgwMDAxLCAweDIwZTksIDB4MDAwMSwgMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgwZTdiLCAweDIwMjksCi0JMHgyNDgwLCAweDIwMzEsIDB4ZmZmZiwgMHgyMDM5LCAweDI0NTAsIDB4MjAyMSwgMHgwMDUwLCAweDIwZTksCi0JMHgwMDAxLCAweDIwYTEsIDB4MDAwMCwgMHgyMGE5LCAweDA4MDAsIDB4OTAwZSwgMHg0MTA0LCAweDIwZTksCi0JMHgwMDAxLCAweDIwYTEsIDB4MTAwMCwgMHg5MDBlLCAweDIwMDEsIDB4MGNjMCwgMHg5MDg0LCAweDBmZmYsCi0JMHgyMGE4LCAweDQxMDQsIDB4MjAwMSwgMHgwMDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTIwLCAweDIxYTgsCi0JMHg0MTA0LCAweDgwMDEsIDB4MWRlMCwgMHg3NTZhLCAweDc2NmUsIDB4Nzc2NiwgMHg3NDcyLCAweDc0NzYsCi0JMHgwMGU2LCAweDIwNzEsIDB4MWFhMiwgMHgyNDcyLCAweDAwZWUsIDB4MjBhMSwgMHgxY2QwLCAweDcxNmMsCi0JMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwgMHg4MTBkLCAweDkxOGMsIDB4MDAwZiwgMHgyMDAxLCAweDAwMDEsCi0JMHg5MTEyLCAweDkwMGUsIDB4MjFhOCwgMHg0MTA0LCAweDgyMTEsIDB4MWRlMCwgMHg3MTZjLCAweDM0MDAsCi0JMHg4MDAxLCAweDkxMDIsIDB4MDEyMCwgMHgwMjE4LCAweDIwYTgsIDB4OTAwZSwgMHg0MTA0LCAweDIwMDksCi0JMHgxODAwLCAweDgxMGQsIDB4ODEwZCwgMHg4MTBkLCAweDgxMGQsIDB4ODEwZCwgMHg5MThjLCAweDAwMWYsCi0JMHgyMDAxLCAweDAwMDEsIDB4OTExMiwgMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgwODAwLCAweDkwMGUsCi0JMHgyMGE5LCAweDA4MDAsIDB4NDEwNCwgMHg4MjExLCAweDFkZDgsIDB4MDgwYywgMHgwZjRmLCAweDA4MGMsCi0JMHg1ZTNkLCAweDA4MGMsIDB4OWY4MCwgMHgwODBjLCAweDExMDYsIDB4MDgwYywgMHgxMmZlLCAweDA4MGMsCi0JMHgxYTc1LCAweDA4MGMsIDB4MGQ4OCwgMHgwODBjLCAweDEwOGIsIDB4MDgwYywgMHgzMmYzLCAweDA4MGMsCi0JMHg3NDhlLCAweDA4MGMsIDB4Njc4NCwgMHgwODBjLCAweDgxOTQsIDB4MDgwYywgMHgyMmIzLCAweDA4MGMsCi0JMHg4NGE1LCAweDA4MGMsIDB4N2IxOCwgMHgwODBjLCAweDIwZGYsIDB4MDgwYywgMHgyMjEzLCAweDA4MGMsCi0JMHgyMmE4LCAweDIwOTEsIDB4MzAwOSwgMHg3ODgzLCAweDAwMDAsIDB4MTAwNCwgMHgwOTFkLCAweDc4ODAsCi0JMHg5MDg2LCAweDAwMDIsIDB4MTE5MCwgMHg3ODgzLCAweDQwMDAsIDB4NzgzNywgMHg0MDAwLCAweDc4MzMsCi0JMHgwMDEwLCAweDBlMDQsIDB4MDkxMSwgMHgyMDkxLCAweDUwMDAsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsCi0JMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDExZTYsIDB4MjA3MSwgMHgxODAwLCAweDcwMDMsCi0JMHgwMDAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MDAwLCAweDkwOGUsIDB4MDAwMywgMHgxMTY4LCAweDA4MGMsCi0JMHg0YWRjLCAweDA4MGMsIDB4MzMxYSwgMHgwODBjLCAweDc0ZjYsIDB4MDgwYywgMHg2YzgyLCAweDA4MGMsCi0JMHg4MWJkLCAweDA4MGMsIDB4MmIxMywgMHgwYzY4LCAweDAwMGIsIDB4MGM4OCwgMHgwOTQwLCAweDA5NDEsCi0JMHgwYWQ4LCAweDA5M2UsIDB4MGI4ZiwgMHgwZDg3LCAweDBkODcsIDB4MGQ4NywgMHgwODBjLCAweDBkZjYsCi0JMHgwMDA1LCAweDAxMjYsIDB4MDBmNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwMCwgMHg5MDg2LCAweDAwMDEsCi0JMHgxOTA0LCAweDBhYWIsIDB4MDgwYywgMHgwZWJkLCAweDA4MGMsIDB4NzE3ZSwgMHgwMTUwLCAweDA4MGMsCi0JMHg3MWExLCAweDE1YTAsIDB4MjA3OSwgMHgwMTAwLCAweDc4MjgsIDB4OTA4NSwgMHgxODAwLCAweDc4MmEsCi0JMHgwNDY4LCAweDA4MGMsIDB4NzA5ZSwgMHg3MDAwLCAweDkwODYsIDB4MDAwMSwgMHgxOTA0LCAweDBhYWIsCi0JMHg3MDk0LCAweDkwODYsIDB4MDAyOSwgMHgxOTA0LCAweDBhYWIsIDB4MDgwYywgMHg4MTdkLCAweDA4MGMsCi0JMHg4MTZmLCAweDIwMDEsIDB4MDE2MSwgMHgyMDAzLCAweDAwMDEsIDB4MjA3OSwgMHgwMTAwLCAweDc4MjcsCi0JMHhmZmZmLCAweDdhMjgsIDB4OTI5NSwgMHg1ZTJmLCAweDdhMmEsIDB4MjAxMSwgMHg2ZmVkLCAweDA4MGMsCi0JMHg4MjU5LCAweDIwMTEsIDB4NmZlMCwgMHgwODBjLCAweDgzMmQsIDB4MjAxMSwgMHg1Yzk4LCAweDA4MGMsCi0JMHg4MjU5LCAweDIwMTEsIDB4ODAzMCwgMHg5MDFlLCAweDczOTIsIDB4MDRkMCwgMHgwODBjLCAweDU1NDUsCi0JMHgyMDc5LCAweDAxMDAsIDB4Nzg0NCwgMHg5MDA1LCAweDE5MDQsIDB4MGFhYiwgMHgyMDExLCAweDVjOTgsCi0JMHgwODBjLCAweDgyNTksIDB4MjAxMSwgMHg2ZmVkLCAweDA4MGMsIDB4ODI1OSwgMHgyMDExLCAweDZmZTAsCi0JMHgwODBjLCAweDgzMmQsIDB4MjAwMSwgMHgwMjY1LCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDAsCi0JMHg3ODQwLCAweDkwODQsIDB4ZmZmYiwgMHg3ODQyLCAweDIwMDEsIDB4MTk4MSwgMHgyMDA0LCAweDkwMDUsCi0JMHgxMTQwLCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDA4MGMsIDB4NWRlNSwgMHgwMGNlLCAweDA4MDQsCi0JMHgwYWFiLCAweDc4MGYsIDB4MDA2YiwgMHg3YTI4LCAweDA4MGMsIDB4NzE4NiwgMHgwMTE4LCAweDkyOTUsCi0JMHg1ZTJmLCAweDAwMTAsIDB4OTI5NSwgMHg0MDJmLCAweDdhMmEsIDB4MjAxMSwgMHg4MDEwLCAweDczZDQsCi0JMHgyMDAxLCAweDE5ODIsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsIDB4Mjk3NCwgMHgwODBjLCAweDRhMTcsCi0JMHg3MjQ0LCAweGMyODQsIDB4NzI0NiwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMWFjLCAweGMxY2MsCi0JMHgyMTAyLCAweDA4MGMsIDB4OTgxOCwgMHgyMDExLCAweDAwMDQsIDB4MDgwYywgMHhiZDVlLCAweDA4MGMsCi0JMHg2NWM2LCAweDA4MGMsIDB4NzE3ZSwgMHgxMTIwLCAweDA4MGMsIDB4MjllMSwgMHgwMmUwLCAweDA0MDAsCi0JMHgwODBjLCAweDVkZWMsIDB4MDE0MCwgMHg3MDkzLCAweDAwMDEsIDB4NzBjZiwgMHgwMDAwLCAweDA4MGMsCi0JMHg1NzEyLCAweDA4MDQsIDB4MGFhYiwgMHgwODBjLCAweDU0ZGIsIDB4ZDA5NCwgMHgwMTg4LCAweDIwMTEsCi0JMHgxODBjLCAweDIyMDQsIDB4YzBjZCwgMHgyMDEyLCAweDA4MGMsIDB4NTRkZiwgMHhkMGQ0LCAweDExMTgsCi0JMHgwODBjLCAweDI5ZTEsIDB4MTI3MCwgMHgyMDExLCAweDE4MGMsIDB4MjIwNCwgMHhjMGJjLCAweDAwODgsCi0JMHgwODBjLCAweDU0ZGYsIDB4ZDBkNCwgMHgxZGI4LCAweDIwMTEsIDB4MTgwYywgMHgyMjA0LCAweGMwYmQsCi0JMHgwMDQwLCAweDIwMTEsIDB4MTgwYywgMHgyMjA0LCAweGMwYmQsIDB4MjAxMiwgMHgwODBjLCAweDY2YzEsCi0JMHgwMDA4LCAweDIwMTIsIDB4MDgwYywgMHg2Njg3LCAweDAxMjAsIDB4N2EwYywgMHhjMmI0LCAweDdhMGUsCi0JMHgwMGE4LCAweDcwN2IsIDB4MDAwMCwgMHgwODBjLCAweDcxN2UsIDB4MTEzMCwgMHg3MGFjLCAweDkwMDUsCi0JMHgxMTY4LCAweDA4MGMsIDB4YzFhMSwgMHgwMDUwLCAweDA4MGMsIDB4YzFhMSwgMHg3MGQ4LCAweGQwOWMsCi0JMHgxMTI4LCAweDcwYWMsIDB4OTAwNSwgMHgwMTEwLCAweDA4MGMsIDB4NWRjMiwgMHg3MGUzLCAweDAwMDAsCi0JMHg3MGRmLCAweDAwMDAsIDB4NzBhMywgMHgwMDAwLCAweDA4MGMsIDB4MjllOSwgMHgwMjI4LCAweDIwMTEsCi0JMHgwMTAxLCAweDIyMDQsIDB4YzBjNCwgMHgyMDEyLCAweDcyZDgsIDB4MDgwYywgMHg3MTdlLCAweDExNzgsCi0JMHg5MDE2LCAweDAwMTYsIDB4MjAwOSwgMHgwMDAyLCAweDIwMTksIDB4MTk0NywgMHgyMTFhLCAweDAwMWUsCi0JMHg3MDViLCAweGZmZmYsIDB4NzA1ZiwgMHgwMGVmLCAweDcwN2YsIDB4MDAwMCwgMHgwMDIwLCAweDIwMTksCi0JMHgxOTQ3LCAweDIwMWIsIDB4MDAwMCwgMHgyMDc5LCAweDE4NWIsIDB4NzgwNCwgMHhkMGFjLCAweDAxMDgsCi0JMHhjMjk1LCAweDcyZGEsIDB4MDgwYywgMHg3MTdlLCAweDAxMTgsIDB4OTI5NiwgMHgwMDA0LCAweDA1NDgsCi0JMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHhiZDVlLCAweDcwYTcsIDB4MDAwMCwgMHg3MGFiLCAweGZmZmYsCi0JMHg3MDAzLCAweDAwMDIsIDB4MjA3OSwgMHgwMTAwLCAweDc4MjcsIDB4MDAwMywgMHg3ODI4LCAweDkwODUsCi0JMHgwMDAzLCAweDc4MmEsIDB4MDBmZSwgMHgwODBjLCAweDJlNzMsIDB4MjAxMSwgMHgwMDA1LCAweDA4MGMsCi0JMHg5OTIzLCAweDA4MGMsIDB4OGI4ZiwgMHgwODBjLCAweDcxN2UsIDB4MDE0OCwgMHgwMGM2LCAweDIwNjEsCi0JMHgwMTAwLCAweDAwMTYsIDB4MjAwOSwgMHgwMDAyLCAweDYxZTIsIDB4MDAxZSwgMHgwMGNlLCAweDAxMmUsCi0JMHgwNDIwLCAweDcwYTcsIDB4MDAwMCwgMHg3MGFiLCAweGZmZmYsIDB4NzAwMywgMHgwMDAyLCAweDAwZjYsCi0JMHgyMDc5LCAweDAxMDAsIDB4NzgyNywgMHgwMDAzLCAweDc4MjgsIDB4OTA4NSwgMHgwMDAzLCAweDc4MmEsCi0JMHgwMGZlLCAweDIwMTEsIDB4MDAwNSwgMHgwODBjLCAweDk5MjMsIDB4MDgwYywgMHg4YjhmLCAweDA4MGMsCi0JMHg3MTdlLCAweDAxNDgsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsIDB4MDAxNiwgMHgyMDA5LCAweDAwMDIsCi0JMHg2MWUyLCAweDAwMWUsIDB4MDBjZSwgMHgwMGZlLCAweDAxMmUsIDB4MDAwNSwgMHgwMGM2LCAweDAwYjYsCi0JMHgwODBjLCAweDcxN2UsIDB4MTExOCwgMHgyMGE5LCAweDA4MDAsIDB4MDAxMCwgMHgyMGE5LCAweDA3ODIsCi0JMHgwODBjLCAweDcxN2UsIDB4MTExMCwgMHg5MDBlLCAweDAwMTAsIDB4MjAwOSwgMHgwMDdlLCAweDg2ZmYsCi0JMHgwMTM4LCAweDkxODAsIDB4MTAwMCwgMHgyMDA0LCAweDkwNWQsIDB4MDExMCwgMHhiODAwLCAweGQwYmMsCi0JMHgwOTBjLCAweDMxOTAsIDB4ODEwOCwgMHgxZjA0LCAweDBhYmYsIDB4NzA3YiwgMHgwMDAwLCAweDcwN2MsCi0JMHg5MDg0LCAweDAwZmYsIDB4NzA3ZSwgMHg3MGFmLCAweDAwMDAsIDB4MDBiZSwgMHgwMGNlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAyLCAweDE5MDQsCi0JMHgwYjhjLCAweDcwYTgsIDB4OTA4NiwgMHhmZmZmLCAweDAxMzAsIDB4MDgwYywgMHgyZTczLCAweDA4MGMsCi0JMHg4YjhmLCAweDA4MDQsIDB4MGI4YywgMHg3MGQ4LCAweGQwYWMsIDB4MTExMCwgMHhkMDljLCAweDA1NDAsCi0JMHhkMDg0LCAweDA1MzAsIDB4MDAwNiwgMHgyMDAxLCAweDAxMDMsIDB4MjAwMywgMHgwMDJiLCAweDAwMGUsCi0JMHhkMDhjLCAweDAxZjAsIDB4NzBkYywgMHg5MDg2LCAweGZmZmYsIDB4MDFiMCwgMHgwODBjLCAweDMwMDEsCi0JMHgwODBjLCAweDhiOGYsIDB4NzBkOCwgMHhkMDk0LCAweDE5MDQsIDB4MGI4YywgMHgyMDExLCAweDAwMDEsCi0JMHgwODBjLCAweGM0NTksIDB4MDExMCwgMHgyMDExLCAweDAwMDMsIDB4OTAxZSwgMHgwODBjLCAweDMwM2IsCi0JMHgwODBjLCAweDhiOGYsIDB4MDgwNCwgMHgwYjhjLCAweDcwZTAsIDB4OTAwNSwgMHgxOTA0LCAweDBiOGMsCi0JMHg3MGE0LCAweDkwMDUsIDB4MTkwNCwgMHgwYjhjLCAweDcwZDgsIDB4ZDBhNCwgMHgwMTE4LCAweGQwYjQsCi0JMHgwOTA0LCAweDBiOGMsIDB4MDgwYywgMHg2Njg3LCAweDE5MDQsIDB4MGI4YywgMHgwODBjLCAweDY2ZGEsCi0JMHgxOTA0LCAweDBiOGMsIDB4MDgwYywgMHg2NmMxLCAweDAxYzAsIDB4MDE1NiwgMHgwMGM2LCAweDIwYTksCi0JMHgwMDdmLCAweDkwMGUsIDB4MDAxNiwgMHgwODBjLCAweDYzYTMsIDB4MTExOCwgMHhiODAwLCAweGQwZWMsCi0JMHgxMTM4LCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDBiMzIsIDB4MDBjZSwgMHgwMTVlLCAweDAwMjgsCi0JMHgwMDFlLCAweDAwY2UsIDB4MDE1ZSwgMHgwODA0LCAweDBiOGMsIDB4MDAwNiwgMHgyMDAxLCAweDAxMDMsCi0JMHgyMDAzLCAweDAwNmIsIDB4MDAwZSwgMHgyMDExLCAweDE5OGUsIDB4MDgwYywgMHgwZmJmLCAweDIwMTEsCi0JMHgxOWE4LCAweDA4MGMsIDB4MGZiZiwgMHg3MDMwLCAweGMwOGMsIDB4NzAzMiwgMHg3MDAzLCAweDAwMDMsCi0JMHg3MGFiLCAweGZmZmYsIDB4MDgwYywgMHgwZTlmLCAweDkwMDYsIDB4MDgwYywgMHgyNjE2LCAweDAwMzYsCi0JMHgwMDQ2LCAweDIwMTksIDB4ZmZmZiwgMHgyMDIxLCAweDAwMDYsIDB4MDgwYywgMHg0YmI0LCAweDAwNGUsCi0JMHgwMDNlLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDA4MGMsIDB4NzFhMSwgMHgwMTUwLCAweDA4MGMsCi0JMHg3MTdlLCAweDc4MjgsIDB4MDExOCwgMHg5MDg0LCAweGUxZmYsIDB4MDAxMCwgMHg5MDg0LCAweGZmZGYsCi0JMHg3ODJhLCAweDAwZmUsIDB4MjAwMSwgMHgxOWMzLCAweDIwMDQsIDB4OTA4NiwgMHgwMDA1LCAweDExMjAsCi0JMHgyMDExLCAweDAwMDAsIDB4MDgwYywgMHg5OTIzLCAweDIwMTEsIDB4MDAwMCwgMHgwODBjLCAweDk5MmQsCi0JMHgwODBjLCAweDhiOGYsIDB4MDgwYywgMHg4YzZjLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwMTYsCi0JMHgwMDQ2LCAweDAwZjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3OSwgMHgwMTAwLCAweDc5MDQsCi0JMHg5MThjLCAweGZmZmQsIDB4NzkwNiwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg1ZGFiLCAweDc5NDAsCi0JMHg5MThjLCAweDAwMTAsIDB4Nzk0MiwgMHg3OTI0LCAweGQxYjQsIDB4MDExMCwgMHg3ODI3LCAweDAwNDAsCi0JMHhkMTljLCAweDAxMTAsIDB4NzgyNywgMHgwMDA4LCAweDAwMDYsIDB4MDAzNiwgMHgwMTU2LCAweDIwMDEsCi0JMHgwMTAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDBhLCAweDE5MDQsIDB4MGMyMywgMHg3OTU0LCAweGQxYWMsCi0JMHgxOTA0LCAweDBjMjMsIDB4MjAwMSwgMHgxOTgyLCAweDIwMDQsIDB4OTAwNSwgMHgxNTE4LCAweDA4MGMsCi0JMHgyYTdmLCAweDExNDgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4MjlhMywgMHgyMDAxLCAweDAwMDEsCi0JMHgwODBjLCAweDI5ODYsIDB4MDBiOCwgMHgwODBjLCAweDJhODcsIDB4MTEzOCwgMHg5MDA2LCAweDA4MGMsCi0JMHgyOWEzLCAweDkwMDYsIDB4MDgwYywgMHgyOTg2LCAweDAwNjgsIDB4MDgwYywgMHgyYThmLCAweDFkNTAsCi0JMHgyMDAxLCAweDE5NzIsIDB4MjAwNCwgMHhkMGZjLCAweDAxMDgsIDB4MDAyMCwgMHgwODBjLCAweDI3YjEsCi0JMHgwODA0LCAweDBkMmYsIDB4MDgwYywgMHg3MThmLCAweDAxNDgsIDB4MDgwYywgMHg3MWExLCAweDExMTgsCi0JMHgwODBjLCAweDc0ODksIDB4MDA1MCwgMHgwODBjLCAweDcxODYsIDB4MGRkMCwgMHgwODBjLCAweDc0ODQsCi0JMHgwODBjLCAweDc0N2EsIDB4MDgwYywgMHg3MDllLCAweDAwNTgsIDB4MDgwYywgMHg3MTdlLCAweDAxNDAsCi0JMHgyMDA5LCAweDAwZjgsIDB4MDgwYywgMHg1ZGFiLCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsCi0JMHgyMGE5LCAweDA5YzQsIDB4NzgyMCwgMHhkMDljLCAweDExMzgsIDB4MDgwYywgMHg3MTdlLCAweDAxMzgsCi0JMHg3ODI0LCAweGQwYWMsIDB4MTkwNCwgMHgwZDM0LCAweDFmMDQsIDB4MGMwMiwgMHgwMDcwLCAweDc4MjQsCi0JMHgwODBjLCAweDcxOTgsIDB4MDExOCwgMHhkMGFjLCAweDE5MDQsIDB4MGQzNCwgMHg5MDg0LCAweDE4MDAsCi0JMHgwZDk4LCAweDcwMDMsIDB4MDAwMSwgMHgwODA0LCAweDBkMzQsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCi0JMHgyNjE2LCAweDA4MDQsIDB4MGQ1NiwgMHgyMDAxLCAweDE5ODIsIDB4MjAwNCwgMHg5MDA1LCAweDE1MTgsCi0JMHgwODBjLCAweDJhN2YsIDB4MTE0OCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyOWEzLCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4Mjk4NiwgMHgwMGI4LCAweDA4MGMsIDB4MmE4NywgMHgxMTM4LCAweDkwMDYsCi0JMHgwODBjLCAweDI5YTMsIDB4OTAwNiwgMHgwODBjLCAweDI5ODYsIDB4MDA2OCwgMHgwODBjLCAweDJhOGYsCi0JMHgxZDUwLCAweDIwMDEsIDB4MTk3MiwgMHgyMDA0LCAweGQwZmMsIDB4MDEwOCwgMHgwMDIwLCAweDA4MGMsCi0JMHgyN2IxLCAweDA4MDQsIDB4MGQyZiwgMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMGEsCi0JMHgwMWY4LCAweDc4NTAsIDB4OTA4NSwgMHgwMDQwLCAweDc4NTIsIDB4NzkzOCwgMHg3ODUwLCAweDkwODQsCi0JMHhmYmNmLCAweDc4NTIsIDB4MDgwYywgMHgyYTk3LCAweDkwODUsIDB4MjAwMCwgMHg3ODUyLCAweDc5M2EsCi0JMHgyMGE5LCAweDAwNDYsIDB4MWQwNCwgMHgwYzYyLCAweDA4MGMsIDB4ODMwZCwgMHgxZjA0LCAweDBjNjIsCi0JMHg3ODUwLCAweDkwODUsIDB4MDQwMCwgMHg5MDg0LCAweGRmYmYsIDB4Nzg1MiwgMHg3OTNhLCAweDAwNDAsCi0JMHgyMGE5LCAweDAwM2EsIDB4MWQwNCwgMHgwYzcyLCAweDA4MGMsIDB4ODMwZCwgMHgxZjA0LCAweDBjNzIsCi0JMHgwODBjLCAweDcxOGYsIDB4MDE0OCwgMHgwODBjLCAweDcxYTEsIDB4MTExOCwgMHgwODBjLCAweDc0ODksCi0JMHgwMDUwLCAweDA4MGMsIDB4NzE4NiwgMHgwZGQwLCAweDA4MGMsIDB4NzQ4NCwgMHgwODBjLCAweDc0N2EsCi0JMHgwODBjLCAweDcwOWUsIDB4MDAyMCwgMHgyMDA5LCAweDAwZjgsIDB4MDgwYywgMHg1ZGFiLCAweDIwMDEsCi0JMHgwMTAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDBhLCAweDAxNjgsIDB4MjBhOSwgMHgwMDI4LCAweGEwMDEsCi0JMHgxZjA0LCAweDBjOTcsIDB4Nzg1MCwgMHg5MDg1LCAweDE0MDAsIDB4Nzg1MiwgMHgwODBjLCAweDcxN2UsCi0JMHgwMTU4LCAweDAwMzAsIDB4Nzg1MCwgMHhjMGU1LCAweDc4NTIsIDB4MDgwYywgMHg3MTdlLCAweDAxMjAsCi0JMHg3ODQzLCAweDAwOTAsIDB4Nzg0MywgMHgwMDEwLCAweDIwMjEsIDB4ZTY3OCwgMHgyMDE5LCAweGVhNjAsCi0JMHgwZDBjLCAweDgzMGQsIDB4NzgyMCwgMHhkMDljLCAweDE1OTAsIDB4MDgwYywgMHg3MTdlLCAweDA5MDQsCi0JMHgwZDEzLCAweDc4MjQsIDB4ZDBhYywgMHgxOTA0LCAweDBkMzQsIDB4MDgwYywgMHg3MWExLCAweDE1MzgsCi0JMHgwMDQ2LCAweDIwMjEsIDB4MDMyMCwgMHg4NDIxLCAweDFkZjAsIDB4MDA0ZSwgMHg3ODI3LCAweDE4MDAsCi0JMHgwODBjLCAweDJhOTcsIDB4NzgyNCwgMHg5MDg0LCAweDE4MDAsIDB4MTE2OCwgMHg5NDg0LCAweDBmZmYsCi0JMHgxMTQwLCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweDkwODQsIDB4OTAwMCwgMHgwMTEwLCAweDA4MGMsCi0JMHgwZDY0LCAweDg0MjEsIDB4MTE2MCwgMHgxZDA0LCAweDBjZGYsIDB4MDgwYywgMHg4MzBkLCAweDA4MGMsCi0JMHg3NDg0LCAweDA4MGMsIDB4NzQ3YSwgMHg3MDAzLCAweDAwMDEsIDB4MDgwNCwgMHgwZDM0LCAweDgzMTksCi0JMHgxOTM4LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwYSwgMHgxMTQwLCAweDIwMDEsCi0JMHgxODEwLCAweDIwMDQsIDB4OTA4NCwgMHg5MDAwLCAweDAxMTAsIDB4MDgwYywgMHgwZDY0LCAweDFkMDQsCi0JMHgwY2ZiLCAweDA4MGMsIDB4ODMwZCwgMHgyMDA5LCAweDE5NzUsIDB4MjEwNCwgMHg5MDA1LCAweDAxMTgsCi0JMHg4MDAxLCAweDIwMGEsIDB4MTE3OCwgMHgyMDBiLCAweDAwMGEsIDB4NzgyNywgMHgwMDQ4LCAweDIwYTksCi0JMHgwMDAyLCAweDA4MGMsIDB4MmE3OCwgMHg3OTI0LCAweDA4MGMsIDB4MmE5NywgMHhkMTljLCAweDAxMTAsCi0JMHgwODBjLCAweDI5NzQsIDB4MDBlMCwgMHgwODBjLCAweDcxOGYsIDB4MTE0MCwgMHg5NGEyLCAweDAzZTgsCi0JMHgxMTI4LCAweDA4MGMsIDB4NzE1NiwgMHg3MDAzLCAweDAwMDEsIDB4MDBiMCwgMHg3ODI3LCAweDE4MDAsCi0JMHgwODBjLCAweDJhOTcsIDB4NzgyNCwgMHgwODBjLCAweDcxOTgsIDB4MDExMCwgMHhkMGFjLCAweDExNjAsCi0JMHg5MDg0LCAweDE4MDAsIDB4MDkwNCwgMHgwY2U3LCAweDcwMDMsIDB4MDAwMSwgMHgwMDI4LCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4MjYxNiwgMHgwMGMwLCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsCi0JMHgwMDBhLCAweDExMTgsIDB4Nzg1MCwgMHhjMGU0LCAweDc4NTIsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsCi0JMHhkMTljLCAweDExMjAsIDB4NzkwNCwgMHg5MThkLCAweDAwMDIsIDB4NzkwNiwgMHg3ODI3LCAweDAwNDgsCi0JMHg3ODI4LCAweDkwODUsIDB4MDAyOCwgMHg3ODJhLCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsCi0JMHgwMDBhLCAweDAxMjAsIDB4Nzg1MCwgMHg5MDg1LCAweDA0MDAsIDB4Nzg1MiwgMHgyMDAxLCAweDE5ODIsCi0JMHgyMDAzLCAweDAwMDAsIDB4OTAwNiwgMHg3OGYyLCAweDAxNWUsIDB4MDAzZSwgMHgwMDBlLCAweDAxMmUsCi0JMHgwMGZlLCAweDAwNGUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDM2LCAweDAwNDYsCi0JMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MDE1NiwgMHgwMDY5LCAweDBkMGMsCi0JMHg4MzBkLCAweDAxNWUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDAwNGUsCi0JMHgwMDNlLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODljLCAweDcwMDQsCi0JMHg5MDg2LCAweDAwMDEsIDB4MTExMCwgMHgwODBjLCAweDMzMWEsIDB4MDBlZSwgMHgwMDA1LCAweDAwMDUsCi0JMHgyYTcwLCAweDIwNjEsIDB4MTk4NiwgMHgyMDYzLCAweDAwMDMsIDB4NjAwNywgMHgwMDAzLCAweDYwMGIsCi0JMHgwMDEyLCAweDYwMGYsIDB4MDMxNywgMHgyMDAxLCAweDE5NTYsIDB4OTAwZSwgMHgyMTAyLCAweDcxOTIsCi0JMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHg5MDgyLCAweDAwMDIsIDB4MDIxOCwgMHg3MDViLCAweGZmZmYsCi0JMHgwMDA4LCAweDcxNWEsIDB4NzA2MywgMHhmZmZmLCAweDcxN2EsIDB4NzE3ZSwgMHgwODBjLCAweGMxYTEsCi0JMHg3MGU3LCAweDAwYzAsIDB4MjA2MSwgMHgxOTQ2LCAweDYwMDMsIDB4MDkwOSwgMHg2MTA2LCAweDYwMGIsCi0JMHg4ODAwLCAweDYwMGYsIDB4MDIwMCwgMHg2MDEzLCAweDAwZmYsIDB4NjAxNywgMHgwMDBmLCAweDYxMWEsCi0JMHg2MDFmLCAweDA3ZDAsIDB4MjA2MSwgMHgxOTRlLCAweDYwMDMsIDB4ODAwMCwgMHg2MTA2LCAweDYxMGEsCi0JMHg2MDBmLCAweDAyMDAsIDB4NjAxMywgMHgwMGZmLCAweDYxMTYsIDB4NjAxYiwgMHgwMDAxLCAweDYxMWUsCi0JMHgyMDYxLCAweDE5NjMsIDB4NjAwMywgMHg1MTRjLCAweDYwMDcsIDB4NGY0NywgMHg2MDBiLCAweDQ5NDMsCi0JMHg2MDBmLCAweDIwMjAsIDB4MjAwMSwgMHgxODJiLCAweDIxMDIsIDB4MDAwNSwgMHg5MDE2LCAweDA4MGMsCi0JMHg2M2EzLCAweDExNzgsIDB4YjgwNCwgMHg5MGM0LCAweDAwZmYsIDB4OThjNiwgMHgwMDA2LCAweDAxMjgsCi0JMHg5MGM0LCAweGZmMDAsIDB4OThjNiwgMHgwNjAwLCAweDExMjAsIDB4OTE4NiwgMHgwMDgwLCAweDAxMDgsCi0JMHg4MjEwLCAweDgxMDgsIDB4OTE4NiwgMHgwODAwLCAweDFkNTAsIDB4MjIwOCwgMHgwMDA1LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNzksIDB4MDAwMCwgMHgwMDBlLCAweDAwZjYsIDB4MDAxMCwgMHgyMDkxLCAweDgwMDAsCi0JMHgwZTA0LCAweDBkZjgsIDB4MDAwNiwgMHgwMDE2LCAweDIwMDEsIDB4ODAwMiwgMHgwMDA2LCAweDIwNzksCi0JMHgwMDAwLCAweDAwMGUsIDB4Nzg4MiwgMHg3ODM2LCAweDAwMWUsIDB4Nzk4ZSwgMHgwMDBlLCAweDc4OGEsCi0JMHgwMDBlLCAweDc4ODYsIDB4MzkwMCwgMHg3ODlhLCAweDAwZDYsIDB4MjA2OSwgMHgwMzAwLCAweDY4MTgsCi0JMHg3OGFlLCAweDY4MWMsIDB4NzhiMiwgMHg2ODA4LCAweDc4YmUsIDB4MDBkZSwgMHg3ODMzLCAweDAwMTIsCi0JMHgyMDkxLCAweDUwMDAsIDB4MDE1NiwgMHgwMGQ2LCAweDAwMzYsIDB4MDAyNiwgMHgyMDc5LCAweDAzMDAsCi0JMHgyMDY5LCAweDFhN2EsIDB4N2EwOCwgMHgyMjZhLCAweDIwNjksIDB4MWE3YiwgMHg3YTE4LCAweDIyNmEsCi0JMHg4ZDY4LCAweDdhMWMsIDB4MjI2YSwgMHg3ODJjLCAweDIwMTksIDB4MWE4OCwgMHgyMDFhLCAweDIwMTksCi0JMHgxYThiLCAweDkwMTYsIDB4NzgwOCwgMHhkMDljLCAweDAxNjgsIDB4NzgyMCwgMHgyMDFhLCAweDgyMTAsCi0JMHg4MzE4LCAweDkzODYsIDB4MWFhMCwgMHgwMTA4LCAweDBjYTgsIDB4NzgwOCwgMHhkMDljLCAweDAxMTAsCi0JMHgyMDExLCAweGRlYWQsIDB4MjAxOSwgMHgxYTg5LCAweDc4MmMsIDB4MjAxYSwgMHg4MzE4LCAweDIyMWEsCi0JMHg3ODAzLCAweDAwMDAsIDB4MjA2OSwgMHgxYTVhLCAweDkwMWUsIDB4MjBhOSwgMHgwMDIwLCAweDdiMjYsCi0JMHg3YTI4LCAweDIyNmEsIDB4OGQ2OCwgMHg4MzE4LCAweDFmMDQsIDB4MGU0ZiwgMHgwMDJlLCAweDAwM2UsCi0JMHgwMGRlLCAweDAxNWUsIDB4MjA3OSwgMHgxODAwLCAweDc4MDMsIDB4MDAwNSwgMHgyMDkxLCAweDQwODAsCi0JMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDAxODAsIDB4MjAwMSwgMHgxOWY2LCAweDIwMDQsCi0JMHg5MDA1LCAweDAxMjgsIDB4MjAwMSwgMHgwMDhiLCAweDIwMDQsIDB4ZDBmYywgMHgwZGQ4LCAweDIwMDEsCi0JMHgwMDhhLCAweDIwMDMsIDB4MDAwMiwgMHgyMDAzLCAweDEwMDEsIDB4MDgwYywgMHg1NGVhLCAweDExMDgsCi0JMHgwMDk5LCAweDBjZDgsIDB4MDAwNSwgMHg5MThjLCAweDAzZmYsIDB4MjAwMSwgMHgwMDAzLCAweDIwMDQsCi0JMHg5MDg0LCAweDA2MDAsIDB4MTExOCwgMHg5MThkLCAweDZjMDAsIDB4MDAxMCwgMHg5MThkLCAweDY0MDAsCi0JMHgyMDAxLCAweDAxN2YsIDB4MjEwMiwgMHgwMDA1LCAweDAwMjYsIDB4MDEyNiwgMHgyMDExLCAweDAwODAsCi0JMHgwODBjLCAweDBmMTcsIDB4MjBhOSwgMHgwOTAwLCAweDA4MGMsIDB4MGYzOCwgMHgyMDExLCAweDAwNDAsCi0JMHgwODBjLCAweDBmMTcsIDB4MjBhOSwgMHgwOTAwLCAweDA4MGMsIDB4MGYzOCwgMHgwYzc4LCAweDAwMjYsCi0JMHgwODBjLCAweDBmMjQsIDB4MTExOCwgMHgyMDExLCAweDAwNDAsIDB4MDA5OCwgMHgyMDExLCAweDAxMGUsCi0JMHgyMjE0LCAweDkyOTQsIDB4MDAwNywgMHg5Mjk2LCAweDAwMDcsIDB4MDExOCwgMHgyMDExLCAweGE4ODAsCi0JMHgwMDEwLCAweDIwMTEsIDB4Njg0MCwgMHhkMGU0LCAweDcwZWIsIDB4MDAwMCwgMHgxMTIwLCAweDcwZWIsCi0JMHgwZmEwLCAweDA4MGMsIDB4MGYyOSwgMHgwMDJlLCAweDAwMDUsIDB4MDAyNiwgMHgwODBjLCAweDBmMjQsCi0JMHgwMTI4LCAweGQwYTQsIDB4MTEzOCwgMHgyMDExLCAweGNkZDUsIDB4MDAxMCwgMHgyMDExLCAweDAwODAsCi0JMHgwODBjLCAweDBmMjksIDB4MDAyZSwgMHgwMDA1LCAweDAwMjYsIDB4NzBlYiwgMHgwMDAwLCAweDA4MGMsCi0JMHgwZjI0LCAweDExNDgsIDB4MDgwYywgMHgyYThmLCAweDExMTgsIDB4MjAxMSwgMHg4NDg0LCAweDAwNTgsCi0JMHgyMDExLCAweDgyODIsIDB4MDA0MCwgMHgwODBjLCAweDJhOGYsIDB4MTExOCwgMHgyMDExLCAweGNkYzUsCi0JMHgwMDEwLCAweDIwMTEsIDB4Y2FjMiwgMHgwODBjLCAweDBmMjksIDB4MDAyZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgwMDA2LCAweDIwNzEsIDB4MTgwMCwgMHhkMGI0LCAweDcwZTQsIDB4MTExMCwgMHhjMGU0LCAweDAwNDgsCi0JMHgwMDA2LCAweDNiMDAsIDB4OTA4NCwgMHhmZjNmLCAweDIwZDgsIDB4MDAwZSwgMHg3MGViLCAweDAwMDAsCi0JMHhjMGU1LCAweDAwNzksIDB4MDAwZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsCi0JMHhkMGU0LCAweDcwZTQsIDB4MTExMCwgMHhjMGRjLCAweDAwMDgsIDB4YzBkZCwgMHgwMDExLCAweDAwZWUsCi0JMHgwMDA1LCAweDcwZTYsIDB4NzAwMCwgMHg5MDg0LCAweDAwMDcsIDB4MDAwYiwgMHgwMDA1LCAweDBlZTYsCi0JMHgwZWJkLCAweDBlYmQsIDB4MGU5ZiwgMHgwZWNjLCAweDBlYmQsIDB4MGViZCwgMHgwZWNjLCAweDAwMTYsCi0JMHgzYjA4LCAweDNhMDAsIDB4OTEwNCwgMHg5MThkLCAweDAwYzAsIDB4MjFkOCwgMHg5MDg0LCAweGZmM2YsCi0JMHg5MjA1LCAweDIwZDAsIDB4MDAxZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgzOSwgMHgyMDA0LCAweGQwZGMsCi0JMHgwMDA1LCAweDllODYsIDB4MTgwMCwgMHgxOTBjLCAweDBkZjYsIDB4NzBlNCwgMHhkMGU0LCAweDAxMDgsCi0JMHhjMmU1LCAweDcyZTYsIDB4ZDBlNCwgMHgxMTE4LCAweDkyOTQsIDB4MDBjMCwgMHgwYzAxLCAweDAwMDUsCi0JMHgxZDA0LCAweDBmMzgsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsIDB4MGYzOCwgMHgwMDA1LCAweDg5MGUsCi0JMHg4MTBlLCAweDgxMGYsIDB4OTE5NCwgMHgwMDNmLCAweDkxOGMsIDB4ZmZjMCwgMHgwMDA1LCAweDAwMDYsCi0JMHgyMjAwLCAweDkxNGQsIDB4ODk0ZiwgMHg4OTRkLCAweDg5NGQsIDB4MDAwZSwgMHgwMDA1LCAweDAxZDYsCi0JMHgwMTQ2LCAweDAwMzYsIDB4MDA5NiwgMHgyMDYxLCAweDE4OGIsIDB4NjAwYiwgMHgwMDAwLCAweDYwMGYsCi0JMHgwMDAwLCAweDYwMDMsIDB4MDAwMCwgMHg2MDA3LCAweDAwMDAsIDB4MjAwOSwgMHhmZmMwLCAweDIxMDUsCi0JMHgwMDA2LCAweDIwMDEsIDB4YWFhYSwgMHgyMDBmLCAweDIwMTksIDB4NTU1NSwgMHg5MDE2LCAweDIwNDksCi0JMHgwYmZmLCAweGFiMDIsIDB4YTAwMSwgMHhhMDAxLCAweGE4MDAsIDB4OTMwNiwgMHgxMTM4LCAweDIxMDUsCi0JMHg5MzA2LCAweDAxMjAsIDB4ODIxMCwgMHg5OWM4LCAweDA0MDAsIDB4MGM5OCwgMHgwMDBlLCAweDIwMGYsCi0JMHgyMDAxLCAweDE4OWIsIDB4OTI4YSwgMHgwMDBlLCAweDE2MzgsIDB4OTI4YSwgMHgwMDA2LCAweDIwMTEsCi0JMHgwMDA2LCAweDEyMTAsIDB4MjAxMSwgMHgwMDAwLCAweDIyMDIsIDB4OTAwNiwgMHgyMDA4LCAweDgyZmYsCi0JMHgwMWIwLCAweDgyMDAsIDB4NjAwYSwgMHg2MDBmLCAweGZmZmYsIDB4NjAwMywgMHgwMDAyLCAweDYwMDcsCi0JMHgwMDAwLCAweDAwMjYsIDB4MjAxOSwgMHgwMDEwLCAweDkyODAsIDB4MDAwMSwgMHgyMGU4LCAweDIxYTAsCi0JMHgyMWE4LCAweDQxMDQsIDB4ODMxOSwgMHgxZGUwLCAweDgyMTEsIDB4MWRhMCwgMHgwMDJlLCAweDAwOWUsCi0JMHgwMDNlLCAweDAxNGUsIDB4MDFkZSwgMHgwMDA1LCAweDIwMTEsIDB4MDAwZSwgMHgwOGU4LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwOTYsIDB4MzM0OCwgMHgwODBjLCAweDBmM2YsIDB4MjEwMCwgMHg5MzAwLCAweDIwOTgsCi0JMHgyMmUwLCAweDAwOWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMzYsIDB4MzUxOCwgMHgyMGE5LCAweDAwMDEsCi0JMHg0MDAyLCAweDgwMDcsIDB4NDAwNCwgMHg4MzE5LCAweDFkZDgsIDB4MDAzZSwgMHgwMDA1LCAweDIwZTksCi0JMHgwMDAxLCAweDcxYjQsIDB4ODFmZiwgMHgxMWMwLCAweDkwMDYsIDB4MjAwOSwgMHgwMjAwLCAweDIwYTksCi0JMHgwMDAyLCAweDkyOTgsIDB4MDAxOCwgMHgyM2EwLCAweDQwMDEsIDB4MjAwOSwgMHgwNzAwLCAweDIwYTksCi0JMHgwMDAyLCAweDkyOTgsIDB4MDAwOCwgMHgyM2EwLCAweDQwMDEsIDB4NzA3OCwgMHg4MDA3LCAweDcxN2MsCi0JMHg4MTBmLCAweDIwYTksIDB4MDAwMiwgMHg0MDAxLCAweDkyOTgsIDB4MDAwYywgMHgyM2EwLCAweDkwMGUsCi0JMHgwODBjLCAweDBkZDYsIDB4MjAwMSwgMHgwMDAwLCAweDgxMGYsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDEsCi0JMHgwMDA1LCAweDg5ZmYsIDB4MDE0MCwgMHhhODA0LCAweGE4MDcsIDB4MDAwMCwgMHgwMDA2LCAweDA4MGMsCi0JMHgxMDY5LCAweDAwOWUsIDB4MGNiMCwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsCi0JMHgxMGUyLCAweDA5MGMsIDB4MGRmNiwgMHgwMGVlLCAweDAwMDUsIDB4MDA4NiwgMHgwMGU2LCAweDAwMDYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBjOSwgMHgyMDcxLCAweDE4MDAsCi0JMHg3M2JjLCAweDcwMmMsIDB4OTAxNiwgMHg5MDQ1LCAweDAxNTgsIDB4ODIxMCwgMHg5OTA2LCAweDA5MGMsCi0JMHgwZGY2LCAweDIzMDAsIDB4OTIwMiwgMHgwMTIwLCAweDFhMGMsIDB4MGRmNiwgMHhhMDAwLCAweDBjOTgsCi0JMHgwMTJlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDA4ZSwgMHgwMDA1LCAweDAwODYsCi0JMHgwMGU2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOTBlLCAweDcwMTAsCi0JMHg5MDA1LCAweDAxNDAsIDB4NzAxOCwgMHg5MDQ1LCAweDAxMjgsIDB4OTkwNiwgMHgwOTBjLCAweDBkZjYsCi0JMHhhMDAwLCAweDBjYzgsIDB4MDEyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDA4ZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweDE4MDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NzBiYywgMHg4MDAxLCAweDAyNzAsCi0JMHg3MGJlLCAweDcwMmMsIDB4MjA0OCwgMHg5MDg1LCAweDAwMDEsIDB4YTgwMCwgMHg3MDJlLCAweGE4MDMsCi0JMHgwMDAwLCAweGE4MDcsIDB4MDAwMCwgMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHg5MDRlLCAweDBjZDgsCi0JMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsIDB4MTgwMCwgMHg3MGJjLCAweDkwY2EsCi0JMHgwMDQwLCAweDAyNjgsIDB4ODAwMSwgMHg3MGJlLCAweDcwMmMsIDB4MjA0OCwgMHhhODAwLCAweDcwMmUsCi0JMHhhODAzLCAweDAwMDAsIDB4YTgwNywgMHgwMDAwLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDkwNGUsCi0JMHgwY2Q4LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAxNiwgMHg4OTBlLCAweDgxMGUsCi0JMHg4MTBmLCAweDkxODQsIDB4MDAzZiwgMHhhODYyLCAweDkxODQsIDB4ZmZjMCwgMHhhODVlLCAweDAwMWUsCi0JMHgwMDIwLCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxODAwLCAweDcwMmMsCi0JMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGJjLCAweDgwMDAsIDB4NzBiZSwgMHgwODBjLCAweDgxNmYsCi0JMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDcxLCAweDE4MDAsIDB4OTAyNiwgMHgyMDA5LCAweDAwMDAsCi0JMHgyMDQ5LCAweDA0MDAsIDB4MjkwMCwgMHg3MDJlLCAweDg5NDAsIDB4MjgwMCwgMHhhODAyLCAweGE5NWUsCi0JMHhhODYzLCAweDAwMDEsIDB4ODQyMCwgMHg5ODg2LCAweDA0NDAsIDB4MDEyMCwgMHgyODQ4LCAweDkxODgsCi0JMHgwMDQwLCAweDBjOTAsIDB4MjA3MSwgMHgxODhiLCAweDcwMDAsIDB4OTAwNSwgMHgxMWEwLCAweDIwMDEsCi0JMHgwNDkyLCAweGE4MDIsIDB4MjA0OCwgMHgyMDA5LCAweDI0ODAsIDB4ODk0MCwgMHgyODAwLCAweGE4MDIsCi0JMHhhOTVlLCAweGE4NjMsIDB4MDAwMSwgMHg4NDIwLCAweDk4ODYsIDB4MDgwMCwgMHgwMTIwLCAweDI4NDgsCi0JMHg5MTg4LCAweDAwNDAsIDB4MGM5MCwgMHgyMDcxLCAweDE4OGIsIDB4NzEwNCwgMHg3MjAwLCAweDgyZmYsCi0JMHgwMWQwLCAweDczMDgsIDB4ODMxOCwgMHg4MzFmLCAweDgzMWIsIDB4ODMxYiwgMHg3MzEyLCAweDgzMTksCi0JMHgyMDAxLCAweDA4MDAsIDB4YTgwMiwgMHgyMDQ4LCAweDg5MDAsIDB4YTgwMiwgMHgyMDQwLCAweGE5NWUsCi0JMHhhYTYyLCAweDg0MjAsIDB4MjMwMCwgMHg5OTA2LCAweDAxMzAsIDB4Mjg0OCwgMHg5MTg4LCAweDAwNDAsCi0JMHg5MjkxLCAweDAwMDAsIDB4MGM4OCwgMHhhODAzLCAweDAwMDAsIDB4MjA3MSwgMHgxODAwLCAweDc0YmEsCi0JMHg3NGJlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDE2LCAweDk5ODQsIDB4ZmMwMCwgMHgwMWU4LCAweDkwOGMsCi0JMHhmODAwLCAweDExNjgsIDB4OTk4MiwgMHgwNDAwLCAweDAyYjgsIDB4OTk4MiwgMHgwNDQwLCAweDAyNzgsCi0JMHg5OTgyLCAweDA0OTIsIDB4MDI4OCwgMHg5OTgyLCAweDA4MDAsIDB4MTI3MCwgMHgwMDQwLCAweDk5ODIsCi0JMHgwODAwLCAweDAyNTAsIDB4MjA3MSwgMHgxODhiLCAweDcwMTAsIDB4OTkwMiwgMHgxMjI4LCAweDkwODUsCi0JMHgwMDAxLCAweDAwMWUsIDB4MDBlZSwgMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMGU2LCAweDIwNzEsCi0JMHgxOWY1LCAweDcwMDcsIDB4MDAwMCwgMHg5MDA2LCAweDcwMWUsIDB4NzAyMiwgMHg3MDAyLCAweDIwNzEsCi0JMHgwMDAwLCAweDcwMTAsIDB4OTA4NSwgMHg4MDQ0LCAweDcwMTIsIDB4MjA3MSwgMHgwMDgwLCAweDkwMDYsCi0JMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwYSwgMHgwMDBlLCAweDExNTgsCi0JMHg3MDJiLCAweDAwNjAsIDB4MjBhOSwgMHgwMDQwLCAweDcwMjIsIDB4MWYwNCwgMHgxMTI0LCAweDcwMmIsCi0JMHgwMDYwLCAweDcwMmIsIDB4MDAyMCwgMHgyMGE5LCAweDAwNDAsIDB4NzAyMiwgMHgxZjA0LCAweDExMmQsCi0JMHg3MDJiLCAweDAwMjAsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwZTYsCi0JMHhhMDZmLCAweDAwMDAsIDB4MjA3MSwgMHgxOWY1LCAweDcwMWMsIDB4OTA4OCwgMHgxOWZmLCAweDI4MGEsCi0JMHg4MDAwLCAweDkwODQsIDB4MDAzZiwgMHg3MDFlLCAweDcxMjAsIDB4OTEwNiwgMHgwOTBjLCAweDBkZjYsCi0JMHg3MDA0LCAweDkwMDUsIDB4MTEyOCwgMHgwMGY2LCAweDIwNzksIDB4MDA4MCwgMHgwMGE5LCAweDAwZmUsCi0JMHgwMGVlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMGU2LCAweDIwNzEsCi0JMHgxOWY1LCAweDcwMDQsIDB4OTAwNSwgMHgxMTI4LCAweDAwZjYsIDB4MjA3OSwgMHgwMDgwLCAweDAwMjEsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDEyZSwgMHgwMDA1LCAweDcwMDQsIDB4OTA4NiwgMHgwMDAwLCAweDExMTAsCi0JMHg3MDA3LCAweDAwMDYsIDB4NzAwMCwgMHgwMDAyLCAweDExNzYsIDB4MTE3NCwgMHgxMTc0LCAweDExNzQsCi0JMHgxMmVkLCAweDEyZWQsIDB4MTJlZCwgMHgxMmVkLCAweDA4MGMsIDB4MGRmNiwgMHg3MDFjLCAweDcxMjAsCi0JMHg5MTA2LCAweDExNDgsIDB4NzkyYywgMHg5MTg0LCAweDAwMDEsIDB4MTEyMCwgMHhkMWZjLCAweDExMTAsCi0JMHg3MDA3LCAweDAwMDAsIDB4MDAwNSwgMHgwMDk2LCAweDkxODAsIDB4MTlmZiwgMHgyMDA0LCAweDcwMGEsCi0JMHgyMDQ4LCAweDgxMDgsIDB4OTE4YywgMHgwMDNmLCAweDcxMjIsIDB4NzgyYiwgMHgwMDI2LCAweGE4OGMsCi0JMHg3ODAyLCAweGE4OTAsIDB4NzgwNiwgMHhhODk0LCAweDc4MGEsIDB4YTg5OCwgMHg3ODBlLCAweGE4NzgsCi0JMHg3MDBlLCAweGE4NzAsIDB4NzAxNiwgMHhhODc0LCAweDcwMWEsIDB4YTg2OCwgMHgwMDllLCAweGQwODQsCi0JMHgwMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwMDI5LCAweDAwMDUsIDB4NzAwNywgMHgwMDAyLCAweDAwYjEsCi0JMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHg3MTBjLCAweDIwMTEsIDB4MDA0MCwgMHg5MTgyLCAweDAwNDAsCi0JMHgxMjEwLCAweDIxMTAsIDB4OTAwNiwgMHg3MDBlLCAweDcyMTIsIDB4ODIwMywgMHg3ODEyLCAweDc4MmIsCi0JMHgwMDIwLCAweDc4MmIsIDB4MDA0MSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHg3MDE0LCAweDIwZTAsIDB4NzAxOCwgMHgyMDk4LCAweDIwZTksCi0JMHgwMDAwLCAweDIwYTEsIDB4MDA4OCwgMHg3ODJiLCAweDAwMjYsIDB4NzEwYywgMHgyMDExLCAweDAwNDAsCi0JMHg5MTgyLCAweDAwNDAsIDB4MTIxMCwgMHgyMTEwLCAweDkwMDYsIDB4NzAwZSwgMHgyMmE4LCAweDQwMDYsCi0JMHg4MjAzLCAweDc4MTIsIDB4NzgyYiwgMHgwMDIwLCAweDMzMDAsIDB4NzAxYSwgMHg3ODJiLCAweDAwMDEsCi0JMHgwMTVlLCAweDAxNGUsIDB4MDEzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgyMDA5LCAweDE5ZjUsCi0JMHgyMTA0LCAweGMwOTUsIDB4MjAwYSwgMHgwODBjLCAweDExNTMsIDB4MDAwNSwgMHgwMDE2LCAweDAwZTYsCi0JMHgyMDcxLCAweDE5ZjUsIDB4MDBmNiwgMHgyMDc5LCAweDAwODAsIDB4NzkyYywgMHhkMWJjLCAweDE5MGMsCi0JMHgwZGVmLCAweDc4MmIsIDB4MDAwMiwgMHhkMWZjLCAweDAxMjAsIDB4OTE4YywgMHgwNzAwLCAweDcwMDQsCi0JMHgwMDIzLCAweDAwZmUsIDB4MDBlZSwgMHgwMDFlLCAweDAwMDUsIDB4MTE2NCwgMHgxMjBjLCAweDEyNDAsCi0JMHgwZGY2LCAweDBkZjYsIDB4MTJmOSwgMHgwZGY2LCAweDkxOGMsIDB4MDcwMCwgMHgxNTUwLCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4NzAxNCwgMHgyMGU4LCAweDcwMTgsIDB4MjBhMCwgMHgyMGUxLCAweDAwMDAsCi0JMHgyMDk5LCAweDAwODgsIDB4NzgyYiwgMHgwMDQwLCAweDcwMTAsIDB4MjBhOCwgMHg0MDA1LCAweDM0MDAsCi0JMHg3MDFhLCAweDAxNWUsIDB4MDE0ZSwgMHgwMTNlLCAweDcwMGMsIDB4OTAwNSwgMHgwNTc4LCAweDc4MDAsCi0JMHg3ODAyLCAweDc4MDQsIDB4NzgwNiwgMHgwODBjLCAweDExYTksIDB4MDAwNSwgMHg3MDA4LCAweDAwOTYsCi0JMHgyMDQ4LCAweGE4NmYsIDB4MDEwMCwgMHgwMDllLCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLCAweDExNjQsCi0JMHgwMDA1LCAweDcwMDgsIDB4MDA5NiwgMHgyMDQ4LCAweGE4NmYsIDB4MDIwMCwgMHgwMDllLCAweDBjYTAsCi0JMHg5MThjLCAweDA3MDAsIDB4MTE1MCwgMHg3MDBjLCAweDkwMDUsIDB4MDE4MCwgMHg3ODAwLCAweDc4MDIsCi0JMHg3ODA0LCAweDc4MDYsIDB4MDgwYywgMHgxMWJlLCAweDAwMDUsIDB4NzAwOCwgMHgwMDk2LCAweDIwNDgsCi0JMHhhODZmLCAweDAyMDAsIDB4MDA5ZSwgMHg3MDA3LCAweDAwMDAsIDB4MDA4MCwgMHgwMDk2LCAweDcwMDgsCi0JMHgyMDQ4LCAweDc4MDAsIDB4YTg4ZSwgMHg3ODA0LCAweGE4OTIsIDB4NzgwOCwgMHhhODk2LCAweDc4MGMsCi0JMHhhODlhLCAweGE4NmYsIDB4MDEwMCwgMHgwMDllLCAweDcwMDcsIDB4MDAwMCwgMHgwMDk2LCAweDAwZDYsCi0JMHg3MDA4LCAweDIwNDgsIDB4MjAwMSwgMHgxOGI3LCAweDIwMDQsIDB4OTkwNiwgMHgxMTI4LCAweGE4OWMsCi0JMHgwODBmLCAweDAwZGUsIDB4MDA5ZSwgMHgwMGEwLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDk2LCAweDAwZDYsCi0JMHg3MDA4LCAweDIwNDgsIDB4MDA4MSwgMHgwMTUwLCAweGE4OWMsIDB4MDA4NiwgMHgyOTQwLCAweDA4MGYsCi0JMHgwMDhlLCAweDAwZGUsIDB4MDA5ZSwgMHgwODBjLCAweDExNTMsIDB4MDAwNSwgMHgwMGRlLCAweDAwOWUsCi0JMHgwODBjLCAweDExNTMsIDB4MDAwNSwgMHhhOGE4LCAweGQwOGMsIDB4MDAwNSwgMHgwMDk2LCAweGEwYTAsCi0JMHg5MDRkLCAweDA5MGMsIDB4MGRmNiwgMHhhMDZjLCAweDkwOGUsIDB4MDEwMCwgMHgwMTMwLCAweGE4N2IsCi0JMHgwMDMwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDIsIDB4MDgwYywgMHg2YTE1LCAweGEwOWYsCi0JMHgwMDAwLCAweGEwYTMsIDB4MDAwMCwgMHgyODQ4LCAweDA4MGMsIDB4MTA2OSwgMHgwMDllLCAweDAwMDUsCi0JMHgwMGE2LCAweGEwYTAsIDB4OTA0ZCwgMHgwOTBjLCAweDBkZjYsIDB4YTA2YywgMHg5MDhlLCAweDAxMDAsCi0JMHgwMTI4LCAweGE4N2IsIDB4MDAwMSwgMHhhODgzLCAweDAwMDAsIDB4MDBjMCwgMHhhODBjLCAweDIwNTAsCi0JMHhiMDA0LCAweDkwMDUsIDB4MDE5OCwgMHhhODBlLCAweDIwNTAsIDB4ODAwNiwgMHg4MDA2LCAweDgwMDcsCi0JMHg5MDhjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwMiwgMHhhMDc2LCAweGExNzIsCi0JMHhiMDAwLCAweGEwN2EsIDB4MjgxMCwgMHgwODBjLCAweDExMzQsIDB4MDBlOCwgMHhhOTdjLCAweGE4OTQsCi0JMHgwMDE2LCAweDAwMDYsIDB4MDgwYywgMHg2YTE1LCAweDAwMGUsIDB4MDAxZSwgMHhkMWZjLCAweDExMzgsCi0JMHhkMWY0LCAweDAxMjgsIDB4MDBjNiwgMHgyMDYwLCAweDA4MGMsIDB4OWZlYSwgMHgwMGNlLCAweDcwMDgsCi0JMHgyMDQ4LCAweGE4OWYsIDB4MDAwMCwgMHhhOGEzLCAweDAwMDAsIDB4MDgwYywgMHgxMDY5LCAweDcwMDcsCi0JMHgwMDAwLCAweDA4MGMsIDB4MTE1MywgMHgwMGFlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg3ODJiLCAweDEwMDEsIDB4NzAwNywgMHgwMDA1LCAweDcwMDAsIDB4YzA5NCwgMHg3MDAyLCAweDAxMmUsCi0JMHgwMDA1LCAweDcwMDcsIDB4MDAwMCwgMHgwODBjLCAweDExNjQsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsCi0JMHgyMjAwLCAweDIwNzksIDB4MDMwMCwgMHgyMDcxLCAweDFhM2YsIDB4NzAwMywgMHgwMDAwLCAweDc4YmYsCi0JMHgwMGY2LCAweDA0MTksIDB4NzgwMywgMHgwMDAzLCAweDc4MGYsIDB4MDAwMCwgMHgyMDAxLCAweDAxMDAsCi0JMHgyMDA0LCAweDkwODYsIDB4MDAwYSwgMHgwMTI4LCAweDIwYTksIDB4MDFlOCwgMHgyMDYxLCAweGRjMGEsCi0JMHgwMDIwLCAweDIwYTksIDB4MDFlOCwgMHgyMDYxLCAweGRmZDgsIDB4MmMwZCwgMHg3OTEyLCAweGUxMDQsCi0JMHg5Y2UwLCAweDAwMDIsIDB4NzkxNiwgMHgxZjA0LCAweDEzMWQsIDB4NzgwNywgMHgwMDA3LCAweDc4MDMsCi0JMHgwMDAwLCAweDc4MDMsIDB4MDAwMSwgMHgwMTJlLCAweDAwMDUsIDB4MDBjNiwgMHg3ODAzLCAweDAwMDAsCi0JMHg3ODA4LCAweGQwOWMsIDB4MDExMCwgMHg3ODIwLCAweDBjZDgsIDB4MjAwMSwgMHgxYTQwLCAweDIwMDMsCi0JMHgwMDAwLCAweDc4YWIsIDB4MDAwNCwgMHg3OGFjLCAweGQwYWMsIDB4MWRlOCwgMHg3OGFiLCAweDAwMDIsCi0JMHg3ODA3LCAweDAwMDcsIDB4NzgyNywgMHgwMDMwLCAweDc4MmIsIDB4MDQwMCwgMHg3ODI3LCAweDAwMzEsCi0JMHg3ODJiLCAweDFhNWEsIDB4NzgxZiwgMHhmZjAwLCAweDc4MWIsIDB4ZmYwMCwgMHgyMDAxLCAweDAyMDAsCi0JMHgyMDA0LCAweGQwZGMsIDB4MDExMCwgMHg3ODFmLCAweDAzMDMsIDB4MjA2MSwgMHgxYTVhLCAweDYwMmYsCi0JMHgxY2QwLCAweDIwMDEsIDB4MTgxOSwgMHgyMDA0LCAweDkwODIsIDB4MWNkMCwgMHg2MDMyLCAweDYwM2IsCi0JMHgxZWJlLCAweDc4M2YsIDB4MzFmMywgMHgwMGNlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDIyMDAsCi0JMHg3OTA4LCAweDkxODQsIDB4MDA3MCwgMHgxOTBjLCAweDBkZWYsIDB4ZDE5YywgMHgwMTU4LCAweDc4MjAsCi0JMHg5MDhjLCAweGYwMDAsIDB4MTVlOCwgMHg5MDhhLCAweDAwMjQsIDB4MWEwYywgMHgwZGY2LCAweDAwMjMsCi0JMHgwMTJlLCAweDAwMDUsIDB4MDEyZSwgMHgwMDA1LCAweDEzYTAsIDB4MTNhMCwgMHgxM2I3LCAweDEzYmMsCi0JMHgxM2MwLCAweDEzYzUsIDB4MTNlZCwgMHgxM2YxLCAweDEzZmYsIDB4MTQwMywgMHgxM2EwLCAweDE0OGYsCi0JMHgxNDkzLCAweDE1MDMsIDB4MTNhMCwgMHgxM2EwLCAweDEzYTAsIDB4MTNhMCwgMHgxM2EwLCAweDEzYTAsCi0JMHgxM2EwLCAweDEzYTAsIDB4MTNhMCwgMHgxM2EwLCAweDEzYTAsIDB4MTNhMCwgMHgxM2EwLCAweDEzYzcsCi0JMHgxM2EwLCAweDEzYTAsIDB4MTNhMCwgMHgxM2EwLCAweDEzYTAsIDB4MTNhMCwgMHgxM2E0LCAweDEzYTIsCi0JMHgwODBjLCAweDBkZjYsIDB4MDgwYywgMHgwZGVmLCAweDA4MGMsIDB4MTUwYSwgMHgyMDA5LCAweDFhNTYsCi0JMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwgMHgwODBjLCAweDdiZWMsIDB4MDgwYywgMHgxOTc3LCAweDAwMDUsCi0JMHgyMDA5LCAweDAwNDgsIDB4MjA2MCwgMHgwODBjLCAweGEwNjgsIDB4MDEyZSwgMHgwMDA1LCAweDcwMDQsCi0JMHhjMDg1LCAweGMwYjUsIDB4NzAwNiwgMHgwMDA1LCAweDcwMDQsIDB4YzA4NSwgMHg3MDA2LCAweDAwMDUsCi0JMHgwODBjLCAweDE1MGEsIDB4MDgwYywgMHgxNWU0LCAweDAwMDUsIDB4MDgwYywgMHgwZGY2LCAweDA4MGMsCi0JMHgxNTBhLCAweDIwNjAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YTgzYiwgMHhmZmZmLCAweDAwOWUsCi0JMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHhhMDY4LCAweDIwMDEsIDB4MDE1ZCwgMHgyMDAzLCAweDAwMDAsCi0JMHgyMDA5LCAweDAzZTgsIDB4ODEwOSwgMHgwMTYwLCAweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweDkwMDUsCi0JMHgwZGM4LCAweDIwMDEsIDB4MDIxOCwgMHgyMDA0LCAweGQwZWMsIDB4MTExMCwgMHgwODBjLCAweDE1MGYsCi0JMHgyMDAxLCAweDAzMDcsIDB4MjAwMywgMHg4MDAwLCAweDAwMDUsIDB4NzAwNCwgMHhjMDk1LCAweDcwMDYsCi0JMHgwMDA1LCAweDA4MGMsIDB4MTUwYSwgMHgyMDYwLCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4M2IsCi0JMHhmZmZmLCAweDAwOWUsIDB4MjAwOSwgMHgwMDQ4LCAweDA4MGMsIDB4YTA2OCwgMHgwMDA1LCAweDA4MGMsCi0JMHgxNTBhLCAweDA4MGMsIDB4MGRmNiwgMHgwODBjLCAweDE1MGEsIDB4MDgwYywgMHgxNDdhLCAweDc4MjcsCi0JMHgwMDE4LCAweDc5YWMsIDB4ZDFkYywgMHgwNTQwLCAweDc4MjcsIDB4MDAxNSwgMHg3ODI4LCAweDc4MmIsCi0JMHgwMDAwLCAweDkwNjUsIDB4MDEzOCwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDUwLCAweDIwMDMsCi0JMHgwMDIwLCAweDA0MDAsIDB4NzAwNCwgMHg5MDA1LCAweDExODAsIDB4NzhhYiwgMHgwMDA0LCAweDc4MjcsCi0JMHgwMDE4LCAweDc4MmIsIDB4MDAwMCwgMHhkMWJjLCAweDA5MGMsIDB4MGRmNiwgMHgyMDAxLCAweDAyMGQsCi0JMHgyMDAzLCAweDAwNTAsIDB4MjAwMywgMHgwMDIwLCAweDA0OTAsIDB4NzhhYiwgMHgwMDA0LCAweDc4MDMsCi0JMHgwMDAxLCAweDA4MGMsIDB4MTQ5MywgMHgwMDA1LCAweDc4MjgsIDB4NzgyYiwgMHgwMDAwLCAweDkwNjUsCi0JMHgwOTBjLCAweDBkZjYsIDB4NjAxNCwgMHgyMDQ4LCAweDc4YWIsIDB4MDAwNCwgMHg5MThjLCAweDA3MDAsCi0JMHgwMWE4LCAweDA4MGMsIDB4N2JlYywgMHgwODBjLCAweDE5NzcsIDB4MDgwYywgMHhiZDRlLCAweDAxNTgsCi0JMHhhOWFjLCAweGE5MzYsIDB4YTliMCwgMHhhOTNhLCAweGE4M2YsIDB4ZmZmZiwgMHhhODQzLCAweGZmZmYsCi0JMHhhODgwLCAweGMwYmQsIDB4YTg4MiwgMHgwODBjLCAweGI5ODMsIDB4MDAwNSwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDYwMjQsIDB4MTkwYywgMHhjMTNhLCAweDIwMjksCi0JMHgwMGM4LCAweDg1MjksIDB4MDEyOCwgMHgyMDAxLCAweDAyMDEsIDB4MjAwNCwgMHg5MDA1LCAweDBkYzgsCi0JMHg3ZGJjLCAweDA4MGMsIDB4ZGJiMywgMHhkNWE0LCAweDExMTgsIDB4MDgwYywgMHgxNTBmLCAweDAwMDUsCi0JMHgwODBjLCAweDdiZWMsIDB4MDgwYywgMHgxOTc3LCAweDAwMDUsIDB4NzgxZiwgMHgwMzAwLCAweDc4MDMsCi0JMHgwMDAxLCAweDAwMDUsIDB4MDAxNiwgMHgwMDY2LCAweDAwNzYsIDB4MDBmNiwgMHgyMDc5LCAweDAzMDAsCi0JMHg3OTA4LCAweDkxOGMsIDB4MDAwNywgMHg5MTg2LCAweDAwMDMsIDB4MDEyMCwgMHgyMDAxLCAweDAwMTYsCi0JMHgwODBjLCAweDE1ODAsIDB4MDBmZSwgMHgwMDdlLCAweDAwNmUsIDB4MDAxZSwgMHgwMDA1LCAweDcwMDQsCi0JMHhjMDlkLCAweDcwMDYsIDB4MDAwNSwgMHg3MTA0LCAweDkxODQsIDB4MDAwNCwgMHgxOTBjLCAweDBkZjYsCi0JMHhkMTg0LCAweDExYjEsIDB4ZDE5YywgMHgwMTgwLCAweGMxOWMsIDB4NzEwNiwgMHgwMDE2LCAweDA4MGMsCi0JMHgxNWM3LCAweDAwMWUsIDB4MDE0OCwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDUwLCAweDIwMDMsCi0JMHgwMDIwLCAweDA4MGMsIDB4MTUwZiwgMHgwMDA1LCAweDgxZmYsIDB4MTkwYywgMHgwZGY2LCAweDAwMDUsCi0JMHgyMTAwLCAweGMxODQsIDB4YzFiNCwgMHg3MTA2LCAweGQwYjQsIDB4MDAxNiwgMHgwMGU2LCAweDE5MDQsCi0JMHgxNGY4LCAweDIwNzEsIDB4MDIwMCwgMHgwODBjLCAweDE1YmIsIDB4MDgwYywgMHgxNWM3LCAweDA1YTgsCi0JMHg2MDE0LCAweDkwMDUsIDB4MDVhOCwgMHgwMDk2LCAweDIwNDgsIDB4YTg2NCwgMHgwMDllLCAweDkwODQsCi0JMHgwMGZmLCAweDkwOGUsIDB4MDAyOSwgMHgwMTYwLCAweDkwOGUsIDB4MDA0OCwgMHgxNTQ4LCAweDYwMWMsCi0JMHhkMDg0LCAweDExZDgsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTY1MSwgMHgwMGZlLCAweDAwYTgsCi0JMHgwMGY2LCAweDJjNzgsIDB4MDgwYywgMHgxNzliLCAweDAwZmUsIDB4MjAwOSwgMHgwMWY0LCAweDgxMDksCi0JMHgwMTYwLCAweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweDkwMDUsIDB4MGRjOCwgMHgyMDAxLCAweDAyMTgsCi0JMHgyMDA0LCAweGQwZWMsIDB4MTExMCwgMHgwNDE5LCAweDAwNDAsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsCi0JMHgwMDIwLCAweDA4MGMsIDB4MTMyZCwgMHg3ODAzLCAweDAwMDEsIDB4MDBlZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwODBjLCAweDE1YzcsIDB4MGRkMCwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDUwLCAweDIwMDMsCi0JMHgwMDIwLCAweDAwNjksIDB4MGM5MCwgMHgwMDMxLCAweDIwNjAsIDB4MjAwOSwgMHgwMDUzLCAweDA4MGMsCi0JMHhhMDY4LCAweDAwMDUsIDB4NzgwOCwgMHhkMDljLCAweDBkZTgsIDB4NzgyMCwgMHgwMDA1LCAweDA4MGMsCi0JMHgxNDdhLCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDIwMDksIDB4MDFmNCwgMHg4MTA5LCAweDA1MTAsCi0JMHg2ODA0LCAweDkwMDUsIDB4MGRkOCwgMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLCAweDc5YmMsCi0JMHhkMWE0LCAweDE1MjgsIDB4NzliOCwgMHg5MThjLCAweDBmZmYsIDB4MDE4MCwgMHg5MTgyLCAweDA4NDEsCi0JMHgxMjY4LCAweDkxODgsIDB4MDAwNywgMHg5MThjLCAweDBmZjgsIDB4ODEwYywgMHg4MTBjLCAweDgxMGMsCi0JMHgwODBjLCAweDE1NzIsIDB4NjgyNywgMHgwMDAxLCAweDgxMDksIDB4MWRkMCwgMHgwNGQ5LCAweDY4MjcsCi0JMHgwMDAyLCAweDA0YzEsIDB4NjgwNCwgMHg5MDA1LCAweDExMzAsIDB4NjgyYywgMHhkMGU0LCAweDE1MDAsCi0JMHg2ODA0LCAweDkwMDUsIDB4MGRlOCwgMHg3OWI4LCAweGQxZWMsIDB4MTEzMCwgMHgwOGMwLCAweDA4MGMsCi0JMHg3YmVjLCAweDA4MGMsIDB4MTk3NywgMHgwMDkwLCAweDc4MjcsIDB4MDAxNSwgMHg3ODJiLCAweDAwMDAsCi0JMHg3ODI3LCAweDAwMTgsIDB4NzgyYiwgMHgwMDAwLCAweDIwMDEsIDB4MDIwZCwgMHgyMDAzLCAweDAwMjAsCi0JMHgyMDAxLCAweDAzMDcsIDB4MjAwMywgMHgwMzAwLCAweDc4MDMsIDB4MDAwMSwgMHgwMGRlLCAweDAwMDUsCi0JMHg2ODJjLCAweDkwODQsIDB4NTQwMCwgMHg5MDg2LCAweDU0MDAsIDB4MGQzMCwgMHg3ODI3LCAweDAwMTUsCi0JMHg3ODJiLCAweDAwMDAsIDB4NzgwMywgMHgwMDAxLCAweDY4MDAsIDB4OTA4NSwgMHgxODAwLCAweDY4MDIsCi0JMHgwMGRlLCAweDAwMDUsIDB4NjgyNCwgMHg5MDg0LCAweDAwMDMsIDB4MWRlMCwgMHgwMDA1LCAweDIwMDEsCi0JMHgwMDMwLCAweDJjMDgsIDB4NjIxYywgMHgwMDIxLCAweDc4MzAsIDB4OTA4NiwgMHgwMDQxLCAweDAwMDUsCi0JMHgwMGY2LCAweDIwNzksIDB4MDMwMCwgMHgwMDA2LCAweDc4MDgsIDB4ZDA5YywgMHgwMTQwLCAweDAwMTYsCi0JMHgwMDI2LCAweDAwYzYsIDB4MDgwYywgMHgxMzY1LCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCi0JMHgwMDA2LCAweDc4MzIsIDB4NzkzNiwgMHg3YTNhLCAweDc4MWIsIDB4ODA4MCwgMHgwMDU5LCAweDExMTgsCi0JMHgwMDBlLCAweDAwZmUsIDB4MDAwNSwgMHgwMDBlLCAweDc5MmMsIDB4MzkwMCwgMHg4MDAwLCAweDIwMDQsCi0JMHgwODBjLCAweDBkZjYsIDB4MjAwOSwgMHhmZjAwLCAweDgxMDksIDB4MDEyMCwgMHg3ODE4LCAweGQwYmMsCi0JMHgxZGQ4LCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4NzgzMiwgMHg3OTM2LCAweDdhM2EsCi0JMHg3ODFiLCAweDgwODAsIDB4MGM3OSwgMHgxMTA4LCAweDAwMDUsIDB4NzkyYywgMHgzOTAwLCAweDgwMDAsCi0JMHgyMDA0LCAweDA4MGMsIDB4MGRmNiwgMHg3MDM3LCAweDAwMDEsIDB4NzE1MCwgMHg3MDM3LCAweDAwMDIsCi0JMHg3MDUwLCAweDIwNjAsIDB4ZDFiYywgMHgxMTEwLCAweDcwNTQsIDB4MjA2MCwgMHgwMDA1LCAweDAwMDYsCi0JMHgwMDQ2LCAweDAwZTYsIDB4MjA3MSwgMHgwMjAwLCAweDcwMzcsIDB4MDAwMiwgMHg3MDU4LCAweDkwODQsCi0JMHhmZjAwLCAweDgwMDcsIDB4OTA4NiwgMHgwMGJjLCAweDExNTgsIDB4MjAyMSwgMHgxYTU3LCAweDI0MDQsCi0JMHg4MDAwLCAweDAyMDgsIDB4MjAyMiwgMHgwODBjLCAweDdiZWMsIDB4MDgwYywgMHgxOTc3LCAweDkwMDYsCi0JMHgwMGVlLCAweDAwNGUsIDB4MDAwZSwgMHgwMDA1LCAweDBjMTEsIDB4MTEwOCwgMHgwMDA1LCAweDAwZTYsCi0JMHgwMDE2LCAweDIwNzEsIDB4MDIwMCwgMHgwODc5LCAweDYxMjQsIDB4ZDFkYywgMHgwMWY4LCAweDcwMWMsCi0JMHhkMDhjLCAweDA5MDQsIDB4MTY0NiwgMHg3MDE3LCAweDAwMDAsIDB4MjAwMSwgMHgwMjY0LCAweDIwMDQsCi0JMHhkMGJjLCAweDA5MDQsIDB4MTY0NiwgMHgyMDAxLCAweDAyNjgsIDB4MDBjNiwgMHgyMDY0LCAweDYxMDQsCi0JMHg2MDM4LCAweDAwY2UsIDB4OTE4ZSwgMHgwMDM5LCAweDE5MDQsIDB4MTY0NiwgMHg5YzA2LCAweDE1ZjAsCi0JMHgwMTI2LCAweDIwOTEsIDB4MjYwMCwgMHgwODBjLCAweDdiMzMsIDB4MDEyZSwgMHg3MzU4LCAweDc0NWMsCi0JMHg2MDE0LCAweDkwNWQsIDB4MDU5OCwgMHgyYjQ4LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsCi0JMHgwMGJlLCAweGQwYmMsIDB4MTkwYywgMHhjMTE1LCAweGFiNDIsIDB4YWMzZSwgMHgyMDAxLCAweDE4N2QsCi0JMHgyMDA0LCAweGQwYjQsIDB4MTE3MCwgMHg2MDFjLCAweGQwZTQsIDB4MTE1OCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDExMjAsIDB4YTgzYiwgMHg3ZmZmLCAweGE4MzcsCi0JMHhmZmZmLCAweDA4MGMsIDB4MWVkZSwgMHgxMTkwLCAweDA4MGMsIDB4MTdmOCwgMHgyYTAwLCAweGE4MTYsCi0JMHgwMTMwLCAweDI4MDAsIDB4YTgwZSwgMHgyYzA1LCAweGE4MGEsIDB4MmMwMCwgMHhhODEyLCAweDcwMzcsCi0JMHgwMDIwLCAweDc4MWYsIDB4MDMwMCwgMHgwMDFlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDM3LCAweDAwNTAsCi0JMHg3MDM3LCAweDAwMjAsIDB4MDAxZSwgMHgwMGVlLCAweDA4MGMsIDB4MTUwZiwgMHgwMDA1LCAweDA4MGMsCi0JMHgwZGY2LCAweDAwMTYsIDB4MjAwOSwgMHgwMGEwLCAweDgxMDksIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsCi0JMHgxZGQ4LCAweDAwMWUsIDB4MmZmMCwgMHgwMTI2LCAweDIwOTEsIDB4MjIwMCwgMHgwMDE2LCAweDAwYzYsCi0JMHgzZTYwLCAweDYwMTQsIDB4MjA0OCwgMHgyOTQwLCAweDkwM2UsIDB4MjczMCwgMHhhODY0LCAweDIwNjgsCi0JMHhhODFhLCAweDlkODQsIDB4MDAwZiwgMHg5MDg4LCAweDFlYmUsIDB4MjE2NSwgMHgwMDAyLCAweDE2ODYsCi0JMHgxNmQzLCAweDE2ODYsIDB4MTY4NiwgMHgxNjg2LCAweDE2YjUsIDB4MTY4NiwgMHgxNjhhLCAweDE2N2YsCi0JMHgxNmNhLCAweDE2ODYsIDB4MTY4NiwgMHgxNjg2LCAweDE3OTAsIDB4MTY5ZSwgMHgxNjk0LCAweGE5NjQsCi0JMHg5MThjLCAweDAwZmYsIDB4OTE4ZSwgMHgwMDQ4LCAweDA5MDQsIDB4MTZjYSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwODA0LCAweDE3ODYsIDB4YTg3YywgMHhkMGJjLCAweDBkYzgsIDB4YTg5MCwgMHhhODQyLCAweGE4OGMsCi0JMHhhODNlLCAweGE4ODgsIDB4MDgwNCwgMHgxNmRhLCAweGE4N2MsIDB4ZDBiYywgMHgwZDc4LCAweGE4OTAsCi0JMHhhODQyLCAweGE4OGMsIDB4YTgzZSwgMHhhODg4LCAweDA4MDQsIDB4MTcyOSwgMHhhODdjLCAweGQwYmMsCi0JMHgwZDI4LCAweGE4OTAsIDB4YTg0MiwgMHhhODhjLCAweGE4M2UsIDB4YTgwNCwgMHg5MDQ1LCAweDA5MGMsCi0JMHgwZGY2LCAweGExNjQsIDB4YTkxYSwgMHg5MWVjLCAweDAwMGYsIDB4OWQ4MCwgMHgxZWJlLCAweDIwNjUsCi0JMHhhODg4LCAweGQxOWMsIDB4MTkwNCwgMHgxNzI5LCAweDA0MjgsIDB4YTg3YywgMHhkMGFjLCAweDA5NzAsCi0JMHhhODA0LCAweDkwNDUsIDB4MDkwYywgMHgwZGY2LCAweGExNjQsIDB4YTkxYSwgMHg5MWVjLCAweDAwMGYsCi0JMHg5ZDgwLCAweDFlYmUsIDB4MjA2NSwgMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHhkMTljLCAweDE5MDQsCi0JMHgxNzI5LCAweDAwODAsIDB4YTg3YywgMHhkMGFjLCAweDA5MDQsIDB4MTY4NiwgMHg5MDA2LCAweGE4NDIsCi0JMHhhODNlLCAweDA4MDQsIDB4MTcyOSwgMHhhODdjLCAweGQwYWMsIDB4MDkwNCwgMHgxNjg2LCAweDkwMDYsCi0JMHhhODQyLCAweGE4M2UsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGY2LCAweDkwODIsCi0JMHgwMDFiLCAweDAwMDIsIDB4MTZmZCwgMHgxNmZkLCAweDE2ZmYsIDB4MTZmZCwgMHgxNmZkLCAweDE2ZmQsCi0JMHgxNzA1LCAweDE2ZmQsIDB4MTZmZCwgMHgxNmZkLCAweDE3MGIsIDB4MTZmZCwgMHgxNmZkLCAweDE2ZmQsCi0JMHgxNzExLCAweDE2ZmQsIDB4MTZmZCwgMHgxNmZkLCAweDE3MTcsIDB4MTZmZCwgMHgxNmZkLCAweDE2ZmQsCi0JMHgxNzFkLCAweDE2ZmQsIDB4MTZmZCwgMHgxNmZkLCAweDE3MjMsIDB4MDgwYywgMHgwZGY2LCAweGE1NzQsCi0JMHhhNDc4LCAweGEzN2MsIDB4YTI4MCwgMHgwODA0LCAweDE3NmUsIDB4YTU4NCwgMHhhNDg4LCAweGEzOGMsCi0JMHhhMjkwLCAweDA4MDQsIDB4MTc2ZSwgMHhhNTk0LCAweGE0OTgsIDB4YTM5YywgMHhhMmEwLCAweDA4MDQsCi0JMHgxNzZlLCAweGE1YTQsIDB4YTRhOCwgMHhhM2FjLCAweGEyYjAsIDB4MDgwNCwgMHgxNzZlLCAweGE1YjQsCi0JMHhhNGI4LCAweGEzYmMsIDB4YTJjMCwgMHgwODA0LCAweDE3NmUsIDB4YTVjNCwgMHhhNGM4LCAweGEzY2MsCi0JMHhhMmQwLCAweDA4MDQsIDB4MTc2ZSwgMHhhNWQ0LCAweGE0ZDgsIDB4YTNkYywgMHhhMmUwLCAweDA4MDQsCi0JMHgxNzZlLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM0LCAweDFhMGMsIDB4MGRmNiwgMHg5MDgyLCAweDAwMWIsCi0JMHgwMDAyLCAweDE3NGMsIDB4MTc0YSwgMHgxNzRhLCAweDE3NGEsIDB4MTc0YSwgMHgxNzRhLCAweDE3NTMsCi0JMHgxNzRhLCAweDE3NGEsIDB4MTc0YSwgMHgxNzRhLCAweDE3NGEsIDB4MTc1YSwgMHgxNzRhLCAweDE3NGEsCi0JMHgxNzRhLCAweDE3NGEsIDB4MTc0YSwgMHgxNzYxLCAweDE3NGEsIDB4MTc0YSwgMHgxNzRhLCAweDE3NGEsCi0JMHgxNzRhLCAweDE3NjgsIDB4MDgwYywgMHgwZGY2LCAweGE1NmMsIDB4YTQ3MCwgMHhhNzc0LCAweGE2NzgsCi0JMHhhMzdjLCAweGEyODAsIDB4MDBkOCwgMHhhNTg0LCAweGE0ODgsIDB4YTc4YywgMHhhNjkwLCAweGEzOTQsCi0JMHhhMjk4LCAweDAwYTAsIDB4YTU5YywgMHhhNGEwLCAweGE3YTQsIDB4YTZhOCwgMHhhM2FjLCAweGEyYjAsCi0JMHgwMDY4LCAweGE1YjQsIDB4YTRiOCwgMHhhN2JjLCAweGE2YzAsIDB4YTNjNCwgMHhhMmM4LCAweDAwMzAsCi0JMHhhNWNjLCAweGE0ZDAsIDB4YTdkNCwgMHhhNmQ4LCAweGEzZGMsIDB4YTJlMCwgMHhhYjJlLCAweGFhMzIsCi0JMHhhZDFlLCAweGFjMjIsIDB4YWYyNiwgMHhhZTJhLCAweGE5ODgsIDB4OGM2MCwgMHgyYzFkLCAweGE4YWMsCi0JMHhhYWIwLCAweGE4MzYsIDB4YWEzYSwgMHg4MTA5LCAweGE5MTYsIDB4MTE2MCwgMHgzZTYwLCAweDYwMWMsCi0JMHhjMDg1LCAweDYwMWUsIDB4YTg3YywgMHhjMGRkLCAweGE4N2UsIDB4OTAwNiwgMHgwMGNlLCAweDAwMWUsCi0JMHgwMTJlLCAweDAwMDUsIDB4MjgwMCwgMHhhODBlLCAweGFiMGEsIDB4MmMwMCwgMHhhODEyLCAweDBjNzAsCi0JMHgwODA0LCAweDE2ODYsIDB4MDAxNiwgMHgyMDA5LCAweDAwYTAsIDB4ODEwOSwgMHhhMDAxLCAweGEwMDEsCi0JMHhhMDAxLCAweDFkZDgsIDB4MDAxZSwgMHgyZmYwLCAweDAxMjYsIDB4MjA5MSwgMHgyMjAwLCAweDAwMTYsCi0JMHgwMGM2LCAweDNlNjAsIDB4NjAxNCwgMHgyMDQ4LCAweDI5NDAsIDB4YTgwZSwgMHgyMDYxLCAweDFlYjksCi0JMHhhODEzLCAweDFlYjksIDB4MmMwNSwgMHhhODBhLCAweGE5NjQsIDB4YTkxYSwgMHhhODdjLCAweGQwYWMsCi0JMHgwOTBjLCAweDBkZjYsIDB4OTAwNiwgMHhhODQyLCAweGE4M2UsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzQsCi0JMHgxYTBjLCAweDBkZjYsIDB4YWRjYywgMHhhY2QwLCAweGFmZDQsIDB4YWVkOCwgMHhhYmRjLCAweGFhZTAsCi0JMHhhYjJlLCAweGFhMzIsIDB4YWQxZSwgMHhhYzIyLCAweGFmMjYsIDB4YWUyYSwgMHhhOGFjLCAweGFhYjAsCi0JMHhhODM2LCAweGFhM2EsIDB4YTk4OCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDgsCi0JMHgxMTIwLCAweDgxMDksIDB4YTkxNiwgMHgwMTI4LCAweDAwODAsIDB4OTE4YSwgMHgwMDAyLCAweGE5MTYsCi0JMHgxMTYwLCAweDNlNjAsIDB4NjAxYywgMHhjMDg1LCAweDYwMWUsIDB4YTg3YywgMHhjMGRkLCAweGE4N2UsCi0JMHg5MDA2LCAweDAwY2UsIDB4MDAxZSwgMHgwMTJlLCAweDAwMDUsIDB4YTgwNCwgMHg5MDQ1LCAweDA5MGMsCi0JMHgwZGY2LCAweGE4MGUsIDB4YTA2NCwgMHhhODFhLCAweDkwODQsIDB4MDAwZiwgMHg5MDgwLCAweDFlYmUsCi0JMHgyMDE1LCAweDgyZmYsIDB4MDkwYywgMHgwZGY2LCAweGFhMTIsIDB4MjIwNSwgMHhhODBhLCAweDBjMDgsCi0JMHg5MDNlLCAweDI3MzAsIDB4YTg4MCwgMHhkMGZjLCAweDExOTAsIDB4MmQwMCwgMHgwMDAyLCAweDE4ZWQsCi0JMHgxODRmLCAweDE4NGYsIDB4MThlZCwgMHgxOGVkLCAweDE4ZTcsIDB4MThlZCwgMHgxODRmLCAweDE4OWUsCi0JMHgxODllLCAweDE4OWUsIDB4MThlZCwgMHgxOGVkLCAweDE4ZWQsIDB4MThlNCwgMHgxODllLCAweGMwZmMsCi0JMHhhODgyLCAweGFiMmMsIDB4YWEzMCwgMHhhZDFjLCAweGFjMjAsIDB4ZGQ5YywgMHgwOTA0LCAweDE4ZWYsCi0JMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkZjYsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsCi0JMHgxODNiLCAweDE4MzksIDB4MTgzOSwgMHgxODM5LCAweDE4MzksIDB4MTgzOSwgMHgxODNmLCAweDE4MzksCi0JMHgxODM5LCAweDE4MzksIDB4MTgzOSwgMHgxODM5LCAweDE4NDMsIDB4MTgzOSwgMHgxODM5LCAweDE4MzksCi0JMHgxODM5LCAweDE4MzksIDB4MTg0NywgMHgxODM5LCAweDE4MzksIDB4MTgzOSwgMHgxODM5LCAweDE4MzksCi0JMHgxODRiLCAweDA4MGMsIDB4MGRmNiwgMHhhNzc0LCAweGE2NzgsIDB4MDgwNCwgMHgxOGVmLCAweGE3OGMsCi0JMHhhNjkwLCAweDA4MDQsIDB4MThlZiwgMHhhN2E0LCAweGE2YTgsIDB4MDgwNCwgMHgxOGVmLCAweGE3YmMsCi0JMHhhNmMwLCAweDA4MDQsIDB4MThlZiwgMHhhN2Q0LCAweGE2ZDgsIDB4MDgwNCwgMHgxOGVmLCAweDJjMDUsCi0JMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGY2LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDE4NzIsCi0JMHgxODcyLCAweDE4NzQsIDB4MTg3MiwgMHgxODcyLCAweDE4NzIsIDB4MTg3YSwgMHgxODcyLCAweDE4NzIsCi0JMHgxODcyLCAweDE4ODAsIDB4MTg3MiwgMHgxODcyLCAweDE4NzIsIDB4MTg4NiwgMHgxODcyLCAweDE4NzIsCi0JMHgxODcyLCAweDE4OGMsIDB4MTg3MiwgMHgxODcyLCAweDE4NzIsIDB4MTg5MiwgMHgxODcyLCAweDE4NzIsCi0JMHgxODcyLCAweDE4OTgsIDB4MDgwYywgMHgwZGY2LCAweGE1NzQsIDB4YTQ3OCwgMHhhMzdjLCAweGEyODAsCi0JMHgwODA0LCAweDE4ZWYsIDB4YTU4NCwgMHhhNDg4LCAweGEzOGMsIDB4YTI5MCwgMHgwODA0LCAweDE4ZWYsCi0JMHhhNTk0LCAweGE0OTgsIDB4YTM5YywgMHhhMmEwLCAweDA4MDQsIDB4MThlZiwgMHhhNWE0LCAweGE0YTgsCi0JMHhhM2FjLCAweGEyYjAsIDB4MDgwNCwgMHgxOGVmLCAweGE1YjQsIDB4YTRiOCwgMHhhM2JjLCAweGEyYzAsCi0JMHgwODA0LCAweDE4ZWYsIDB4YTVjNCwgMHhhNGM4LCAweGEzY2MsIDB4YTJkMCwgMHgwODA0LCAweDE4ZWYsCi0JMHhhNWQ0LCAweGE0ZDgsIDB4YTNkYywgMHhhMmUwLCAweDA4MDQsIDB4MThlZiwgMHgyYzA1LCAweDkwOGEsCi0JMHgwMDM0LCAweDFhMGMsIDB4MGRmNiwgMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxOGMxLCAweDE4YmYsCi0JMHgxOGJmLCAweDE4YmYsIDB4MThiZiwgMHgxOGJmLCAweDE4YzgsIDB4MThiZiwgMHgxOGJmLCAweDE4YmYsCi0JMHgxOGJmLCAweDE4YmYsIDB4MThjZiwgMHgxOGJmLCAweDE4YmYsIDB4MThiZiwgMHgxOGJmLCAweDE4YmYsCi0JMHgxOGQ2LCAweDE4YmYsIDB4MThiZiwgMHgxOGJmLCAweDE4YmYsIDB4MThiZiwgMHgxOGRkLCAweDA4MGMsCi0JMHgwZGY2LCAweGE1NmMsIDB4YTQ3MCwgMHhhNzc0LCAweGE2NzgsIDB4YTM3YywgMHhhMjgwLCAweDA0MzgsCi0JMHhhNTg0LCAweGE0ODgsIDB4YTc4YywgMHhhNjkwLCAweGEzOTQsIDB4YTI5OCwgMHgwNDAwLCAweGE1OWMsCi0JMHhhNGEwLCAweGE3YTQsIDB4YTZhOCwgMHhhM2FjLCAweGEyYjAsIDB4MDBjOCwgMHhhNWI0LCAweGE0YjgsCi0JMHhhN2JjLCAweGE2YzAsIDB4YTNjNCwgMHhhMmM4LCAweDAwOTAsIDB4YTVjYywgMHhhNGQwLCAweGE3ZDQsCi0JMHhhNmQ4LCAweGEzZGMsIDB4YTJlMCwgMHgwMDU4LCAweDlkODYsIDB4MDAwZSwgMHgxMTMwLCAweDA4MGMsCi0JMHgxZTdjLCAweDE5MDQsIDB4MTdmOCwgMHg5MDBlLCAweDAwNTAsIDB4MDgwYywgMHgwZGY2LCAweGFiMmUsCi0JMHhhYTMyLCAweGFkMWUsIDB4YWMyMiwgMHhhZjI2LCAweGFlMmEsIDB4MDgwYywgMHgxZTdjLCAweDAwMDUsCi0JMHg2MDE0LCAweDIwNDgsIDB4NjExOCwgMHg4MWZmLCAweDAxNDgsIDB4ODEwYywgMHg4MTBjLCAweDgxMGMsCi0JMHg4MWZmLCAweDExMTgsIDB4YTg4NywgMHgwMDAxLCAweDAwMDgsIDB4YTk4NiwgMHg2MDFiLCAweDAwMDIsCi0JMHhhODc0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg0LCAweDAwMDgsIDB4MDE1MCwgMHgwMGU5LCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHhhMDY4LCAweDAwMDUsCi0JMHhhOTc0LCAweGQxZGMsIDB4MTEwOCwgMHgwMDA1LCAweGE5MzQsIDB4YTg4YywgMHg5MTA2LCAweDExNTgsCi0JMHhhOTM4LCAweGE4OTAsIDB4OTEwNiwgMHgxMTM4LCAweDYwMWMsIDB4YzA4NCwgMHg2MDFlLCAweDIwMDksCi0JMHgwMDQ4LCAweDA4MDQsIDB4YTA2OCwgMHgwMDA1LCAweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDIyMDAsCi0JMHgwMGNlLCAweDc5MDgsIDB4OTE4YywgMHgwMDA3LCAweDkxODYsIDB4MDAwMCwgMHgwNWIwLCAweDkxODYsCi0JMHgwMDAzLCAweDA1OTgsIDB4NjAyMCwgMHg2MDIzLCAweDAwMDAsIDB4MDAwNiwgMHgyMDMxLCAweDAwMDgsCi0JMHgwMGM2LCAweDc4MWYsIDB4MDgwOCwgMHg3ODA4LCAweGQwOWMsIDB4MDEyMCwgMHgwODBjLCAweDEzNjUsCi0JMHg4NjMxLCAweDFkYjgsIDB4MDBjZSwgMHg3ODFmLCAweDA4MDAsIDB4MjAzMSwgMHgwMTY4LCAweDAwYzYsCi0JMHg3ODA4LCAweGQwOWMsIDB4MTkwYywgMHgxMzY1LCAweDAwY2UsIDB4MjAwMSwgMHgwMDM4LCAweDA4MGMsCi0JMHgxYTA3LCAweDc5MzAsIDB4OTE4NiwgMHgwMDQwLCAweDAxNjAsIDB4OTE4NiwgMHgwMDQyLCAweDE5MGMsCi0JMHgwZGY2LCAweDIwMDEsIDB4MDAxZSwgMHg4MDAxLCAweDFkZjAsIDB4ODYzMSwgMHgxZDQwLCAweDA4MGMsCi0JMHgxYTE2LCAweDAwMGUsIDB4NjAyMiwgMHgwMTJlLCAweDAwMDUsIDB4MDgwYywgMHgxYTAzLCAweDc4MjcsCi0JMHgwMDE1LCAweDc4MjgsIDB4OWMwNiwgMHgxZGI4LCAweDc4MmIsIDB4MDAwMCwgMHgwY2EwLCAweDAwZjYsCi0JMHgyMDc5LCAweDAzMDAsIDB4NzgwMywgMHgwMDAwLCAweDc4YWIsIDB4MDAwNCwgMHgyMDAxLCAweGYwMDAsCi0JMHg4MDAxLCAweDA5MGMsIDB4MGRmNiwgMHg3YWFjLCAweGQyYWMsIDB4MWRkMCwgMHgwMGZlLCAweDA4MGMsCi0JMHg3MTdlLCAweDExODgsIDB4MjAwMSwgMHgwMTM4LCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAxNjAsCi0JMHgyMDAzLCAweDAwMDAsIDB4MjAxMSwgMHgwMTJjLCAweGEwMDEsIDB4YTAwMSwgMHg4MjExLCAweDFkZTAsCi0JMHgwMDU5LCAweDA4MDQsIDB4NzI0NiwgMHgwNDc5LCAweDAwMzksIDB4MjAwMSwgMHgwMTYwLCAweDI1MDIsCi0JMHgyMDAxLCAweDAxMzgsIDB4MjIwMiwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgwMjAwLCAweDA4MGMsCi0JMHgyYWEzLCAweDIwMDksIDB4MDAzYywgMHgwODBjLCAweDIyMDAsIDB4MjAwMSwgMHgwMTVkLCAweDIwMDMsCi0JMHgwMDAwLCAweDcwMDAsIDB4OTA4NCwgMHgwMDNjLCAweDFkZTAsIDB4MDgwYywgMHg4MTZmLCAweDcwYTAsCi0JMHg3MGEyLCAweDcwOTgsIDB4NzA5YSwgMHg3MDljLCAweDcwOWUsIDB4MjAwMSwgMHgwMjBkLCAweDIwMDMsCi0JMHgwMDIwLCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLCAweDA4MGMsIDB4MTMyZCwgMHg3ODAzLCAweDAwMDEsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDAxMzgsIDB4MjAxNCwgMHgyMDAzLCAweDAwMDAsCi0JMHgyMDAxLCAweDAxNjAsIDB4MjAyYywgMHgyMDAzLCAweDAwMDAsIDB4MDgwYywgMHg3MTdlLCAweDExMDgsCi0JMHgwMDA1LCAweDIwMjEsIDB4MDI2MCwgMHgyMDAxLCAweDAxNDEsIDB4MjAxYywgMHhkM2RjLCAweDExNjgsCi0JMHgyMDAxLCAweDAxMDksIDB4MjAxYywgMHg5MzljLCAweDAwNDgsIDB4MTE2MCwgMHgyMDAxLCAweDAxMTEsCi0JMHgyMDFjLCAweDgzZmYsIDB4MTExMCwgMHg4NDIxLCAweDFkNzAsIDB4MjAwMSwgMHgwMTVkLCAweDIwMDMsCi0JMHgwMDAwLCAweDAwMDUsIDB4MDA0NiwgMHgyMDIxLCAweDAwMTksIDB4MjAwMywgMHgwMDQ4LCAweGEwMDEsCi0JMHhhMDAxLCAweDIwMWMsIDB4OTM5YywgMHgwMDQ4LCAweDAxMjAsIDB4ODQyMSwgMHgxZGIwLCAweDAwNGUsCi0JMHgwYzYwLCAweDAwNGUsIDB4MGM0MCwgMHg2MDFjLCAweGMwODQsIDB4NjAxZSwgMHgwMDA1LCAweDJjMDgsCi0JMHg2MjFjLCAweDA4MGMsIDB4MTU4MCwgMHg3OTMwLCAweDAwMDUsIDB4MmMwOCwgMHg2MjFjLCAweDA4MGMsCi0JMHgxNWFkLCAweDc5MzAsIDB4MDAwNSwgMHg4MDAxLCAweDFkZjAsIDB4MDAwNSwgMHgyMDMxLCAweDAwNjQsCi0JMHg3ODFjLCAweDkwODQsIDB4MDAwNywgMHgwMTcwLCAweDIwMDEsIDB4MDAzOCwgMHgwYzQxLCAweDkxODYsCi0JMHgwMDQwLCAweDA5MDQsIDB4MWE3NCwgMHgyMDAxLCAweDAwMWUsIDB4MGM2OSwgMHg4NjMxLCAweDFkODAsCi0JMHgwODBjLCAweDBkZjYsIDB4NzgxZiwgMHgwMjAyLCAweDIwMDEsIDB4MDE1ZCwgMHgyMDAzLCAweDAwMDAsCi0JMHgyMDAxLCAweDBkYWMsIDB4MGMwMSwgMHg3ODFjLCAweGQwODQsIDB4MDExMCwgMHgwODYxLCAweDA0ZTAsCi0JMHgyMDAxLCAweDAwMzAsIDB4MDg5MSwgMHg5MTg2LCAweDAwNDAsIDB4MDU2OCwgMHg3ODFjLCAweGQwODQsCi0JMHgxZGE4LCAweDc4MWYsIDB4MDEwMSwgMHgyMDAxLCAweDAwMTQsIDB4MDg2OSwgMHgyMDAxLCAweDAwMzcsCi0JMHgwODIxLCAweDkxODYsIDB4MDA0MCwgMHgwMTQwLCAweDIwMDEsIDB4MDAzMCwgMHgwODBjLCAweDFhMGQsCi0JMHg5MTg2LCAweDAwNDAsIDB4MTkwYywgMHgwZGY2LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDY5MmMsCi0JMHhkMWY0LCAweDExNzAsIDB4ZDFjNCwgMHgwMTYwLCAweGQxOWMsIDB4MDEzMCwgMHg2ODAwLCAweDkwODUsCi0JMHgxODAwLCAweDY4MDIsIDB4MDBkZSwgMHgwMDgwLCAweDY5MDgsIDB4OTE4NCwgMHgwMDA3LCAweDFkYjAsCi0JMHgwMGRlLCAweDc4MWYsIDB4MDEwMCwgMHg3OTFjLCAweDkxODQsIDB4MDAwNywgMHgwOTBjLCAweDBkZjYsCi0JMHhhMDAxLCAweGEwMDEsIDB4NzgxZiwgMHgwMjAwLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDI0MDAsCi0JMHgyMDcxLCAweDFhNDIsIDB4MjA3OSwgMHgwMDkwLCAweDAxMmUsIDB4MDAwNSwgMHg5MjgwLCAweDAwMDUsCi0JMHgyMDA0LCAweDIwNDgsIDB4YTk3YywgMHhkMWRjLCAweDE5MDQsIDB4MWIwOSwgMHhhOTY0LCAweDkxODQsCi0JMHgwMDA3LCAweDAwMDIsIDB4MWE5MiwgMHgxYWY0LCAweDFhYTksIDB4MWFhOSwgMHgxYWE5LCAweDFhZGMsCi0JMHgxYWJjLCAweDFhYWIsIDB4OTE4YywgMHgwMGZmLCAweDkxODYsIDB4MDAwOCwgMHgxMTcwLCAweGE4N2MsCi0JMHhkMGI0LCAweDA5MDQsIDB4MWNiZiwgMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHhhOTg4LCAweDI5MDAsCi0JMHhhODVhLCAweGE4MTMsIDB4MWViOSwgMHgwODA0LCAweDFiMDUsIDB4OTE4NiwgMHgwMDQ4LCAweDA5MDQsCi0JMHgxYWY0LCAweDA4MGMsIDB4MGRmNiwgMHhhODdjLCAweGQwYjQsIDB4MDkwNCwgMHgxY2JmLCAweGE4OTAsCi0JMHhhODQyLCAweGE4M2EsIDB4YTg4YywgMHhhODNlLCAweGE4MzYsIDB4YThhYywgMHhhODQ2LCAweGE4YjAsCi0JMHhhODRhLCAweGE5ODgsIDB4MDgwNCwgMHgxYWZjLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDFlLCAweDFkMzgsIDB4YTg3YywgMHhkMGI0LCAweDA5MDQsIDB4MWNiZiwgMHhhODkwLCAweGE4NDIsCi0JMHhhODNhLCAweGE4OGMsIDB4YTgzZSwgMHhhODM2LCAweGE4YWMsIDB4YTg0NiwgMHhhOGIwLCAweGE4NGEsCi0JMHhhODA0LCAweGE4NWEsIDB4MjA0MCwgMHhhMDY0LCAweDkwODQsIDB4MDAwZiwgMHg5MDgwLCAweDFlYmUsCi0JMHgyMDA1LCAweGE4MTIsIDB4YTk4OCwgMHgwNDQ4LCAweDkxOGMsIDB4MDBmZiwgMHg5MTg2LCAweDAwMTUsCi0JMHgxNTQwLCAweGE4N2MsIDB4ZDBiNCwgMHgwOTA0LCAweDFjYmYsIDB4YTgwNCwgMHhhODVhLCAweDIwNDAsCi0JMHhhMDY0LCAweDkwODQsIDB4MDAwZiwgMHg5MDgwLCAweDFlYmUsIDB4MjAwNSwgMHhhODEyLCAweGE5ODgsCi0JMHg5MDA2LCAweGE4NDIsIDB4YTgzZSwgMHgwMDg4LCAweGE4N2MsIDB4ZDBiNCwgMHgwOTA0LCAweDFjYmYsCi0JMHhhOTg4LCAweDkwMDYsIDB4YTg0MiwgMHhhODNlLCAweDI5MDAsIDB4YTg1YSwgMHhhODY0LCAweDkwODQsCi0JMHgwMDBmLCAweDkwODAsIDB4MWViZSwgMHgyMDA1LCAweGE4MTIsIDB4YTkxNiwgMHhhODdjLCAweGMwZGQsCi0JMHhhODdlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAwOTAsIDB4NzgyYywgMHhkMGZjLCAweDE5MGMsCi0JMHgxZDAwLCAweDAwZTYsIDB4MjA3MSwgMHgxYTQyLCAweDcwMDAsIDB4OTAwNSwgMHgxOTA0LCAweDFiNjEsCi0JMHg3MjA2LCAweDkyODAsIDB4MDAwNSwgMHgyMDRjLCAweDkyODAsIDB4MDAwNCwgMHgyMDA0LCAweDc4MmIsCi0JMHgwMDA0LCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLCAweDc4MDMsIDB4MDA0MCwgMHgwMGZlLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4NmMsIDB4NzgzNiwgMHhiODkwLCAweDAwYmUsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsCi0JMHg3ODAzLCAweDAwNDAsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsCi0JMHg3ODFhLCAweDc4ZDcsIDB4MDAwMCwgMHgwMGZlLCAweGE4MTQsIDB4MjA1MCwgMHhhODU4LCAweDIwNDAsCi0JMHhhODEwLCAweDIwNjAsIDB4YTA2NCwgMHg5MGVjLCAweDAwMGYsIDB4YTk0NCwgMHg3OTFhLCAweDcxMTYsCi0JMHhhODQ4LCAweDc4MWUsIDB4NzAxYSwgMHg5MDA2LCAweDcwMGUsIDB4NzAxMiwgMHg3MDA0LCAweGE5NDAsCi0JMHhhODM4LCAweDkxMDYsIDB4MTE4OCwgMHhhOTNjLCAweGE4MzQsIDB4OTEwNiwgMHgxMTY4LCAweDhhZmYsCi0JMHgwMWE4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYTEsIDB4MDEwOCwgMHgwMDkxLCAweDAxMmUsCi0JMHg5MDA2LCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDAwMzYsIDB4MDA0NiwgMHhhYjM4LCAweGFjMzQsCi0JMHgwODBjLCAweDFlZGUsIDB4MDA0ZSwgMHgwMDNlLCAweDBkNTAsIDB4MGM5OCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwYzgwLCAweDAwNzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAzNiwgMHgwMDI2LCAweDhhZmYsCi0JMHgwOTA0LCAweDFjYjgsIDB4NzAwYywgMHg3MjE0LCAweDkyM2EsIDB4NzAxMCwgMHg3MjE4LCAweDkyMDMsCi0JMHgwYTA0LCAweDFjYjcsIDB4OTcwNSwgMHgwOTA0LCAweDFjYjcsIDB4OTAzZSwgMHgyNzMwLCAweGE4ODAsCi0JMHhkMGZjLCAweDExOTAsIDB4MmQwMCwgMHgwMDAyLCAweDFjOWIsIDB4MWJkYywgMHgxYmRjLCAweDFjOWIsCi0JMHgxYzliLCAweDFjNzksIDB4MWM5YiwgMHgxYmRjLCAweDFjN2YsIDB4MWMyYiwgMHgxYzJiLCAweDFjOWIsCi0JMHgxYzliLCAweDFjOWIsIDB4MWM3MywgMHgxYzJiLCAweGMwZmMsIDB4YTg4MiwgMHhhYjJjLCAweGFhMzAsCi0JMHhhZDFjLCAweGFjMjAsIDB4ZGQ5YywgMHgwOTA0LCAweDFjOWQsIDB4MmMwNSwgMHg5MDhhLCAweDAwMzQsCi0JMHgxYTBjLCAweDBkZjYsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsIDB4MWJjOCwgMHgxYmM2LCAweDFiYzYsCi0JMHgxYmM2LCAweDFiYzYsIDB4MWJjNiwgMHgxYmNjLCAweDFiYzYsIDB4MWJjNiwgMHgxYmM2LCAweDFiYzYsCi0JMHgxYmM2LCAweDFiZDAsIDB4MWJjNiwgMHgxYmM2LCAweDFiYzYsIDB4MWJjNiwgMHgxYmM2LCAweDFiZDQsCi0JMHgxYmM2LCAweDFiYzYsIDB4MWJjNiwgMHgxYmM2LCAweDFiYzYsIDB4MWJkOCwgMHgwODBjLCAweDBkZjYsCi0JMHhhNzc0LCAweGE2NzgsIDB4MDgwNCwgMHgxYzlkLCAweGE3OGMsIDB4YTY5MCwgMHgwODA0LCAweDFjOWQsCi0JMHhhN2E0LCAweGE2YTgsIDB4MDgwNCwgMHgxYzlkLCAweGE3YmMsIDB4YTZjMCwgMHgwODA0LCAweDFjOWQsCi0JMHhhN2Q0LCAweGE2ZDgsIDB4MDgwNCwgMHgxYzlkLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM2LCAweDFhMGMsCi0JMHgwZGY2LCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDFiZmYsIDB4MWJmZiwgMHgxYzAxLCAweDFiZmYsCi0JMHgxYmZmLCAweDFiZmYsIDB4MWMwNywgMHgxYmZmLCAweDFiZmYsIDB4MWJmZiwgMHgxYzBkLCAweDFiZmYsCi0JMHgxYmZmLCAweDFiZmYsIDB4MWMxMywgMHgxYmZmLCAweDFiZmYsIDB4MWJmZiwgMHgxYzE5LCAweDFiZmYsCi0JMHgxYmZmLCAweDFiZmYsIDB4MWMxZiwgMHgxYmZmLCAweDFiZmYsIDB4MWJmZiwgMHgxYzI1LCAweDA4MGMsCi0JMHgwZGY2LCAweGE1NzQsIDB4YTQ3OCwgMHhhMzdjLCAweGEyODAsIDB4MDgwNCwgMHgxYzlkLCAweGE1ODQsCi0JMHhhNDg4LCAweGEzOGMsIDB4YTI5MCwgMHgwODA0LCAweDFjOWQsIDB4YTU5NCwgMHhhNDk4LCAweGEzOWMsCi0JMHhhMmEwLCAweDA4MDQsIDB4MWM5ZCwgMHhhNWE0LCAweGE0YTgsIDB4YTNhYywgMHhhMmIwLCAweDA4MDQsCi0JMHgxYzlkLCAweGE1YjQsIDB4YTRiOCwgMHhhM2JjLCAweGEyYzAsIDB4MDgwNCwgMHgxYzlkLCAweGE1YzQsCi0JMHhhNGM4LCAweGEzY2MsIDB4YTJkMCwgMHgwODA0LCAweDFjOWQsIDB4YTVkNCwgMHhhNGQ4LCAweGEzZGMsCi0JMHhhMmUwLCAweDA4MDQsIDB4MWM5ZCwgMHgyYzA1LCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkZjYsCi0JMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxYzRlLCAweDFjNGMsIDB4MWM0YywgMHgxYzRjLCAweDFjNGMsCi0JMHgxYzRjLCAweDFjNTYsIDB4MWM0YywgMHgxYzRjLCAweDFjNGMsIDB4MWM0YywgMHgxYzRjLCAweDFjNWUsCi0JMHgxYzRjLCAweDFjNGMsIDB4MWM0YywgMHgxYzRjLCAweDFjNGMsIDB4MWM2NSwgMHgxYzRjLCAweDFjNGMsCi0JMHgxYzRjLCAweDFjNGMsIDB4MWM0YywgMHgxYzZjLCAweDA4MGMsIDB4MGRmNiwgMHhhNTZjLCAweGE0NzAsCi0JMHhhNzc0LCAweGE2NzgsIDB4YTM3YywgMHhhMjgwLCAweDA4MDQsIDB4MWM5ZCwgMHhhNTg0LCAweGE0ODgsCi0JMHhhNzhjLCAweGE2OTAsIDB4YTM5NCwgMHhhMjk4LCAweDA4MDQsIDB4MWM5ZCwgMHhhNTljLCAweGE0YTAsCi0JMHhhN2E0LCAweGE2YTgsIDB4YTNhYywgMHhhMmIwLCAweDA0YzAsIDB4YTViNCwgMHhhNGI4LCAweGE3YmMsCi0JMHhhNmMwLCAweGEzYzQsIDB4YTJjOCwgMHgwNDg4LCAweGE1Y2MsIDB4YTRkMCwgMHhhN2Q0LCAweGE2ZDgsCi0JMHhhM2RjLCAweGEyZTAsIDB4MDQ1MCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMWUsCi0JMHgxNTEwLCAweDA4MGMsIDB4MWU3YywgMHgxOTA0LCAweDFiNzcsIDB4OTAwZSwgMHgwNGM4LCAweGFiNjQsCi0JMHg5MzljLCAweDAwZmYsIDB4OTM4NiwgMHgwMDQ4LCAweDExODAsIDB4MDBjNiwgMHg3MDA0LCAweDIwNjAsCi0JMHg2MDA0LCAweDkwODYsIDB4MDA0MywgMHgwMGNlLCAweDA5MDQsIDB4MWMyYiwgMHhhYjljLCAweDkwMTYsCi0JMHhhZDhjLCAweGFjOTAsIDB4YWY5NCwgMHhhZTk4LCAweDAwNDAsIDB4OTM4NiwgMHgwMDA4LCAweDA5MDQsCi0JMHgxYzJiLCAweDA4MGMsIDB4MGRmNiwgMHgwODBjLCAweDBkZjYsIDB4N2IxMiwgMHg3YTE2LCAweDdkMDIsCi0JMHg3YzA2LCAweDdmMGEsIDB4N2UwZSwgMHg3ODJiLCAweDAwMDEsIDB4NzAwMCwgMHg4MDAwLCAweDcwMDIsCi0JMHhhODNjLCAweDkzMDAsIDB4YTgzZSwgMHhhODQwLCAweDkyMDEsIDB4YTg0MiwgMHg3MDBjLCAweDkzMDAsCi0JMHg3MDBlLCAweDcwMTAsIDB4OTIwMSwgMHg3MDEyLCAweDA4MGMsIDB4MWU3YywgMHgwMDA4LCAweDkwMDYsCi0JMHgwMDJlLCAweDAwM2UsIDB4MDA0ZSwgMHgwMDVlLCAweDAwNmUsIDB4MDA3ZSwgMHgwMDA1LCAweDA4MGMsCi0JMHgwZGY2LCAweDAwMjYsIDB4MjAwMSwgMHgwMTA1LCAweDIwMDMsIDB4MDAxMCwgMHg3ODJiLCAweDAwMDQsCi0JMHg3MDAzLCAweDAwMDAsIDB4NzAwNCwgMHgyMDYwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGJkNGUsCi0JMHgwMTE4LCAweGE4ODAsIDB4YzBiZCwgMHhhODgyLCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LCAweDExODAsCi0JMHgyMDYxLCAweDAxMDAsIDB4NjJjOCwgMHgyMDAxLCAweDAwZmEsIDB4ODAwMSwgMHgxZGYwLCAweDYwYzgsCi0JMHg5MjA2LCAweDFkYzAsIDB4NjBjNCwgMHhhODlhLCAweDYwYzgsIDB4YTg5NiwgMHg3MDA0LCAweDIwNjAsCi0JMHgwMGM2LCAweDA4MGMsIDB4Yjk4MywgMHgwMGNlLCAweDIwMDEsIDB4MTlkMSwgMHgyMDA0LCAweDljMDYsCi0JMHgxMTYwLCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDIyMDAsIDB4MDgwYywgMHg5YThmLCAweDIwMTEsCi0JMHgwMDAwLCAweDA4MGMsIDB4OTkyZCwgMHgwODBjLCAweDhjNmMsIDB4MDAyZSwgMHgwODA0LCAweDFlMmUsCi0JMHgwMTI2LCAweDIwOTEsIDB4MjQwMCwgMHhhODU4LCAweDIwNDAsIDB4NzkyYywgMHg3ODJiLCAweDAwMDIsCi0JMHg5MTg0LCAweDA3MDAsIDB4MTkwNCwgMHgxY2MxLCAweDcwMDAsIDB4MDAwMiwgMHgxZTJlLCAweDFkMTIsCi0JMHgxZDdmLCAweDFlMmMsIDB4ODAwMSwgMHg3MDAyLCAweGQxOWMsIDB4MTE1MCwgMHg4YWZmLCAweDA1YjAsCi0JMHgwODBjLCAweDFiNzEsIDB4MDkwNCwgMHgxZTJlLCAweDA4MGMsIDB4MWI3MSwgMHgwODA0LCAweDFlMmUsCi0JMHg3ODJiLCAweDAwMDQsIDB4ZDE5NCwgMHgwMTQ4LCAweGE4ODAsIDB4YzBmYywgMHhhODgyLCAweDhhZmYsCi0JMHgxMWQ4LCAweGE4N2MsIDB4YzBmNSwgMHhhODdlLCAweDAwYjgsIDB4MDAyNiwgMHgwMDM2LCAweGFiM2MsCi0JMHhhYTQwLCAweDc4MTAsIDB4YTgyZSwgMHg5MzFhLCAweDc4MTQsIDB4YTgzMiwgMHg5MjEzLCAweDc4MDAsCi0JMHhhODFlLCAweDc4MDQsIDB4YTgyMiwgMHhhYjNlLCAweGFhNDIsIDB4MDAzZSwgMHgwMDJlLCAweDA4MGMsCi0JMHgxZTk0LCAweGE4ODAsIDB4YzBmZCwgMHhhODgyLCAweDJhMDAsIDB4YTgxNiwgMHgyODAwLCAweGE4NWEsCi0JMHgyYzAwLCAweGE4MTIsIDB4NzAwMywgMHgwMDAwLCAweDA4MDQsIDB4MWUyZSwgMHgwMGY2LCAweDAwMjYsCi0JMHg3ODFjLCAweDAwMDYsIDB4NzgxOCwgMHgwMDA2LCAweDIwNzksIDB4MDEwMCwgMHg3YTE0LCAweDkyODQsCi0JMHgxOTg0LCAweDkwODUsIDB4MDAxMiwgMHg3ODE2LCAweDAwMzYsIDB4MjAxOSwgMHgxMDAwLCAweDgzMTksCi0JMHgwOTBjLCAweDBkZjYsIDB4NzgyMCwgMHhkMGJjLCAweDFkZDAsIDB4MDAzZSwgMHg3OWM4LCAweDAwMGUsCi0JMHg5MTAyLCAweDAwMWUsIDB4MDAwNiwgMHgwMDE2LCAweDc5YzQsIDB4MDAwZSwgMHg5MTAzLCAweDc4YzYsCi0JMHgwMDBlLCAweDc4Y2EsIDB4OTI4NCwgMHgxOTg0LCAweDkwODUsIDB4MDAxMiwgMHg3ODE2LCAweDAwMmUsCi0JMHgwMGZlLCAweDc4MmIsIDB4MDAwOCwgMHg3MDAzLCAweDAwMDAsIDB4MDgwNCwgMHgxZTJlLCAweDgwMDEsCi0JMHg3MDAyLCAweGQxOTQsIDB4MDE3MCwgMHg3ODJjLCAweGQwZmMsIDB4MTkwNCwgMHgxZDA1LCAweGQxOWMsCi0JMHgxOTA0LCAweDFlMmEsIDB4OGFmZiwgMHgwOTA0LCAweDFlMmUsIDB4MDgwYywgMHgxYjcxLCAweDA4MDQsCi0JMHgxZTJlLCAweDAwMjYsIDB4MDAzNiwgMHhhYjNjLCAweGFhNDAsIDB4MDgwYywgMHgxZTk0LCAweGRkOWMsCi0JMHgxOTA0LCAweDFkZTksIDB4MmMwNSwgMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGY2LCAweDkwODIsCi0JMHgwMDFiLCAweDAwMDIsIDB4MWRiZCwgMHgxZGJkLCAweDFkYmYsIDB4MWRiZCwgMHgxZGJkLCAweDFkYmQsCi0JMHgxZGM1LCAweDFkYmQsIDB4MWRiZCwgMHgxZGJkLCAweDFkY2IsIDB4MWRiZCwgMHgxZGJkLCAweDFkYmQsCi0JMHgxZGQxLCAweDFkYmQsIDB4MWRiZCwgMHgxZGJkLCAweDFkZDcsIDB4MWRiZCwgMHgxZGJkLCAweDFkYmQsCi0JMHgxZGRkLCAweDFkYmQsIDB4MWRiZCwgMHgxZGJkLCAweDFkZTMsIDB4MDgwYywgMHgwZGY2LCAweGEwN2MsCi0JMHg5MzFhLCAweGEwODAsIDB4OTIxMywgMHgwODA0LCAweDFkMzEsIDB4YTA4YywgMHg5MzFhLCAweGEwOTAsCi0JMHg5MjEzLCAweDA4MDQsIDB4MWQzMSwgMHhhMDljLCAweDkzMWEsIDB4YTBhMCwgMHg5MjEzLCAweDA4MDQsCi0JMHgxZDMxLCAweGEwYWMsIDB4OTMxYSwgMHhhMGIwLCAweDkyMTMsIDB4MDgwNCwgMHgxZDMxLCAweGEwYmMsCi0JMHg5MzFhLCAweGEwYzAsIDB4OTIxMywgMHgwODA0LCAweDFkMzEsIDB4YTBjYywgMHg5MzFhLCAweGEwZDAsCi0JMHg5MjEzLCAweDA4MDQsIDB4MWQzMSwgMHhhMGRjLCAweDkzMWEsIDB4YTBlMCwgMHg5MjEzLCAweDA4MDQsCi0JMHgxZDMxLCAweDJjMDUsIDB4OTA4YSwgMHgwMDM0LCAweDFhMGMsIDB4MGRmNiwgMHg5MDgyLCAweDAwMWIsCi0JMHgwMDAyLCAweDFlMGMsIDB4MWUwYSwgMHgxZTBhLCAweDFlMGEsIDB4MWUwYSwgMHgxZTBhLCAweDFlMTIsCi0JMHgxZTBhLCAweDFlMGEsIDB4MWUwYSwgMHgxZTBhLCAweDFlMGEsIDB4MWUxOCwgMHgxZTBhLCAweDFlMGEsCi0JMHgxZTBhLCAweDFlMGEsIDB4MWUwYSwgMHgxZTFlLCAweDFlMGEsIDB4MWUwYSwgMHgxZTBhLCAweDFlMGEsCi0JMHgxZTBhLCAweDFlMjQsIDB4MDgwYywgMHgwZGY2LCAweGEwN2MsIDB4OTMxYSwgMHhhMDgwLCAweDkyMTMsCi0JMHgwODA0LCAweDFkMzEsIDB4YTA5NCwgMHg5MzFhLCAweGEwOTgsIDB4OTIxMywgMHgwODA0LCAweDFkMzEsCi0JMHhhMGFjLCAweDkzMWEsIDB4YTBiMCwgMHg5MjEzLCAweDA4MDQsIDB4MWQzMSwgMHhhMGM0LCAweDkzMWEsCi0JMHhhMGM4LCAweDkyMTMsIDB4MDgwNCwgMHgxZDMxLCAweGEwZGMsIDB4OTMxYSwgMHhhMGUwLCAweDkyMTMsCi0JMHgwODA0LCAweDFkMzEsIDB4MDgwNCwgMHgxZDJkLCAweDA4MGMsIDB4MGRmNiwgMHgwMTJlLCAweDAwMDUsCi0JMHgwMGY2LCAweDAwZTYsIDB4MjA3MSwgMHgxYTQyLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDA5MDQsCi0JMHgxZTc5LCAweDIwNzksIDB4MDA5MCwgMHgyMDA5LCAweDAyMDcsIDB4MjEwYywgMHhkMTk0LCAweDAxYjgsCi0JMHgyMDA5LCAweDAyMGMsIDB4MjEwYywgMHg5MTg0LCAweDAwMDMsIDB4MDE4OCwgMHgwODBjLCAweGRiZmMsCi0JMHgyMDAxLCAweDAxMzMsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsIDB4MGRmNiwgMHgwMDE2LCAweDIwMDksCi0JMHgwMDQwLCAweDA4MGMsIDB4MjIwMCwgMHgwMDFlLCAweDIwMDEsIDB4MDIwYywgMHgyMTAyLCAweDIwMDksCi0JMHgwMjA2LCAweDIxMDQsIDB4MjAwOSwgMHgwMjAzLCAweDIxMGMsIDB4OTEwNiwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDQwLCAweDA4MGMsIDB4MjIwMCwgMHg3ODJjLCAweGQwZmMsIDB4MDlhOCwgMHgwODBjLCAweDFkMDAsCi0JMHg3MDAwLCAweDkwODYsIDB4MDAwMCwgMHgxOTc4LCAweDc4MmIsIDB4MDAwNCwgMHg3ODJjLCAweGQwYWMsCi0JMHgxZGU4LCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDIyMDAsIDB4NzgyYiwgMHgwMDAyLCAweDcwMDMsCi0JMHgwMDAwLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDhjNjAsIDB4MmMwNSwgMHg5MDA1LCAweDAxMTAsCi0JMHg4YTUxLCAweDAwMDUsIDB4YTAwNCwgMHg5MDA1LCAweDAxNjgsIDB4YTg1YSwgMHgyMDQwLCAweGEwNjQsCi0JMHg5MDg0LCAweDAwMGYsIDB4OTA4MCwgMHgxZWJlLCAweDIwNjUsIDB4OGNmZiwgMHgwOTBjLCAweDBkZjYsCi0JMHg4YTUxLCAweDAwMDUsIDB4MjA1MCwgMHgwMDA1LCAweDhhNTAsIDB4OGM2MSwgMHgyYzA1LCAweDkwMDUsCi0JMHgxMTkwLCAweDI4MDAsIDB4OTkwNiwgMHgwMTIwLCAweGEwMDAsIDB4OTAwNSwgMHgxMTA4LCAweDI5MDAsCi0JMHgyMDQwLCAweGE4NWEsIDB4YTA2NCwgMHg5MDg0LCAweDAwMGYsIDB4OTA4MCwgMHgxZWNlLCAweDIwNjUsCi0JMHg4Y2ZmLCAweDA5MGMsIDB4MGRmNiwgMHgwMDA1LCAweDAwMDAsIDB4MDAxZCwgMHgwMDIxLCAweDAwMjUsCi0JMHgwMDI5LCAweDAwMmQsIDB4MDAzMSwgMHgwMDM1LCAweDAwMDAsIDB4MDAxYiwgMHgwMDIxLCAweDAwMjcsCi0JMHgwMDJkLCAweDAwMzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMjMsIDB4MDAwMCwgMHgwMDAwLCAweDFlYjEsCi0JMHgxZWFkLCAweDAwMDAsIDB4MDAwMCwgMHgxZWJiLCAweDAwMDAsIDB4MWViMSwgMHgxZWI4LCAweDFlYjgsCi0JMHgxZWI1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDFlYmIsIDB4MWViOCwgMHgwMDAwLCAweDFlYjMsCi0JMHgxZWIzLCAweDAwMDAsIDB4MDAwMCwgMHgxZWJiLCAweDAwMDAsIDB4MWViMywgMHgxZWI5LCAweDFlYjksCi0JMHgxZWI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDFlYmIsIDB4MWViOSwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMDg2LCAweGFiNDIsIDB4YWMzZSwgMHhhODg4LCAweDkwNTUsIDB4MDkwNCwgMHgyMGJkLCAweDI5NDAsCi0JMHhhMDY0LCAweDkwZWMsIDB4MDAwZiwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA4LCAweDExMTgsCi0JMHgyMDYxLCAweDFlYjksIDB4MDBkMCwgMHg5ZGUwLCAweDFlYmUsIDB4OWQ4NiwgMHgwMDA3LCAweDAxMzAsCi0JMHg5ZDg2LCAweDAwMGUsIDB4MDExOCwgMHg5ZDg2LCAweDAwMGYsIDB4MTEyMCwgMHhhMDhjLCAweDk0MjIsCi0JMHhhMDkwLCAweDkzMWIsIDB4MmMwNSwgMHg5MDY1LCAweDExNDAsIDB4MDMxMCwgMHgwODA0LCAweDIwYmQsCi0JMHhhMDA0LCAweDkwNDUsIDB4MDkwNCwgMHgyMGJkLCAweDA4ZDgsIDB4MmMwNSwgMHg5MDA1LCAweDA5MDQsCi0JMHgxZmE1LCAweGRkOWMsIDB4MTkwNCwgMHgxZjYxLCAweDkwOGEsIDB4MDAzNiwgMHgxYTBjLCAweDBkZjYsCi0JMHg5MDgyLCAweDAwMWIsIDB4MDAwMiwgMHgxZjM2LCAweDFmMzYsIDB4MWYzOCwgMHgxZjM2LCAweDFmMzYsCi0JMHgxZjM2LCAweDFmM2UsIDB4MWYzNiwgMHgxZjM2LCAweDFmMzYsIDB4MWY0NCwgMHgxZjM2LCAweDFmMzYsCi0JMHgxZjM2LCAweDFmNGEsIDB4MWYzNiwgMHgxZjM2LCAweDFmMzYsIDB4MWY1MCwgMHgxZjM2LCAweDFmMzYsCi0JMHgxZjM2LCAweDFmNTYsIDB4MWYzNiwgMHgxZjM2LCAweDFmMzYsIDB4MWY1YywgMHgwODBjLCAweDBkZjYsCi0JMHhhMDdjLCAweDk0MjIsIDB4YTA4MCwgMHg5MzFiLCAweDA4MDQsIDB4MWY5YiwgMHhhMDhjLCAweDk0MjIsCi0JMHhhMDkwLCAweDkzMWIsIDB4MDgwNCwgMHgxZjliLCAweGEwOWMsIDB4OTQyMiwgMHhhMGEwLCAweDkzMWIsCi0JMHgwODA0LCAweDFmOWIsIDB4YTBhYywgMHg5NDIyLCAweGEwYjAsIDB4OTMxYiwgMHgwODA0LCAweDFmOWIsCi0JMHhhMGJjLCAweDk0MjIsIDB4YTBjMCwgMHg5MzFiLCAweDA4MDQsIDB4MWY5YiwgMHhhMGNjLCAweDk0MjIsCi0JMHhhMGQwLCAweDkzMWIsIDB4MDgwNCwgMHgxZjliLCAweGEwZGMsIDB4OTQyMiwgMHhhMGUwLCAweDkzMWIsCi0JMHgwNGQwLCAweDkwOGEsIDB4MDAzNCwgMHgxYTBjLCAweDBkZjYsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsCi0JMHgxZjgzLCAweDFmODEsIDB4MWY4MSwgMHgxZjgxLCAweDFmODEsIDB4MWY4MSwgMHgxZjg4LCAweDFmODEsCi0JMHgxZjgxLCAweDFmODEsIDB4MWY4MSwgMHgxZjgxLCAweDFmOGQsIDB4MWY4MSwgMHgxZjgxLCAweDFmODEsCi0JMHgxZjgxLCAweDFmODEsIDB4MWY5MiwgMHgxZjgxLCAweDFmODEsIDB4MWY4MSwgMHgxZjgxLCAweDFmODEsCi0JMHgxZjk3LCAweDA4MGMsIDB4MGRmNiwgMHhhMDdjLCAweDk0MjIsIDB4YTA4MCwgMHg5MzFiLCAweDAwOTgsCi0JMHhhMDk0LCAweDk0MjIsIDB4YTA5OCwgMHg5MzFiLCAweDAwNzAsIDB4YTBhYywgMHg5NDIyLCAweGEwYjAsCi0JMHg5MzFiLCAweDAwNDgsIDB4YTBjNCwgMHg5NDIyLCAweGEwYzgsIDB4OTMxYiwgMHgwMDIwLCAweGEwZGMsCi0JMHg5NDIyLCAweGEwZTAsIDB4OTMxYiwgMHgwNjMwLCAweDIzMDAsIDB4OTQwNSwgMHgwMTYwLCAweDhhNTEsCi0JMHgwOTA0LCAweDIwYmQsIDB4OGM2MCwgMHgwODA0LCAweDFmMGQsIDB4YTAwNCwgMHg5MDQ1LCAweDA5MDQsCi0JMHgyMGJkLCAweDA4MDQsIDB4MWVlOCwgMHg4YTUxLCAweDA5MDQsIDB4MjBiZCwgMHg4YzYwLCAweDJjMDUsCi0JMHg5MDA1LCAweDExNTgsIDB4YTAwNCwgMHg5MDQ1LCAweDA5MDQsIDB4MjBiZCwgMHhhMDY0LCAweDkwZWMsCi0JMHgwMDBmLCAweDlkZTAsIDB4MWViZSwgMHgyYzA1LCAweDIwNjAsIDB4YTg4MCwgMHhjMGZjLCAweGE4ODIsCi0JMHgwODA0LCAweDIwYjIsIDB4MmMwNSwgMHg4NDIyLCAweDg0MjAsIDB4ODMxYSwgMHg5Mzk5LCAweDAwMDAsCi0JMHhhYzJlLCAweGFiMzIsIDB4ZGQ5YywgMHgxOTA0LCAweDIwNGYsIDB4OTA4MiwgMHgwMDFiLCAweDAwMDIsCi0JMHgxZmViLCAweDFmZWIsIDB4MWZlZCwgMHgxZmViLCAweDFmZWIsIDB4MWZlYiwgMHgxZmZiLCAweDFmZWIsCi0JMHgxZmViLCAweDFmZWIsIDB4MjAwOSwgMHgxZmViLCAweDFmZWIsIDB4MWZlYiwgMHgyMDE3LCAweDFmZWIsCi0JMHgxZmViLCAweDFmZWIsIDB4MjAyNSwgMHgxZmViLCAweDFmZWIsIDB4MWZlYiwgMHgyMDMzLCAweDFmZWIsCi0JMHgxZmViLCAweDFmZWIsIDB4MjA0MSwgMHgwODBjLCAweDBkZjYsIDB4YTE3YywgMHgyNDAwLCAweDkxMjIsCi0JMHhhMTgwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkZjYsIDB4YTA3NCwgMHg5NDIwLCAweGEwNzgsCi0JMHg5MzE5LCAweDA4MDQsIDB4MjBhZCwgMHhhMThjLCAweDI0MDAsIDB4OTEyMiwgMHhhMTkwLCAweDIzMDAsCi0JMHg5MTFiLCAweDBhMGMsIDB4MGRmNiwgMHhhMDg0LCAweDk0MjAsIDB4YTA4OCwgMHg5MzE5LCAweDA4MDQsCi0JMHgyMGFkLCAweGExOWMsIDB4MjQwMCwgMHg5MTIyLCAweGExYTAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsCi0JMHgwZGY2LCAweGEwOTQsIDB4OTQyMCwgMHhhMDk4LCAweDkzMTksIDB4MDgwNCwgMHgyMGFkLCAweGExYWMsCi0JMHgyNDAwLCAweDkxMjIsIDB4YTFiMCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGY2LCAweGEwYTQsCi0JMHg5NDIwLCAweGEwYTgsIDB4OTMxOSwgMHgwODA0LCAweDIwYWQsIDB4YTFiYywgMHgyNDAwLCAweDkxMjIsCi0JMHhhMWMwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkZjYsIDB4YTBiNCwgMHg5NDIwLCAweGEwYjgsCi0JMHg5MzE5LCAweDA4MDQsIDB4MjBhZCwgMHhhMWNjLCAweDI0MDAsIDB4OTEyMiwgMHhhMWQwLCAweDIzMDAsCi0JMHg5MTFiLCAweDBhMGMsIDB4MGRmNiwgMHhhMGM0LCAweDk0MjAsIDB4YTBjOCwgMHg5MzE5LCAweDA4MDQsCi0JMHgyMGFkLCAweGExZGMsIDB4MjQwMCwgMHg5MTIyLCAweGExZTAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsCi0JMHgwZGY2LCAweGEwZDQsIDB4OTQyMCwgMHhhMGQ4LCAweDkzMTksIDB4MDgwNCwgMHgyMGFkLCAweDkwODIsCi0JMHgwMDFiLCAweDAwMDIsIDB4MjA2ZCwgMHgyMDZiLCAweDIwNmIsIDB4MjA2YiwgMHgyMDZiLCAweDIwNmIsCi0JMHgyMDdhLCAweDIwNmIsIDB4MjA2YiwgMHgyMDZiLCAweDIwNmIsIDB4MjA2YiwgMHgyMDg3LCAweDIwNmIsCi0JMHgyMDZiLCAweDIwNmIsIDB4MjA2YiwgMHgyMDZiLCAweDIwOTQsIDB4MjA2YiwgMHgyMDZiLCAweDIwNmIsCi0JMHgyMDZiLCAweDIwNmIsIDB4MjBhMSwgMHgwODBjLCAweDBkZjYsIDB4YTE3YywgMHgyNDAwLCAweDkxMjIsCi0JMHhhMTgwLCAweDIzMDAsIDB4OTExYiwgMHgwYTBjLCAweDBkZjYsIDB4YTA2YywgMHg5NDIwLCAweGEwNzAsCi0JMHg5MzE5LCAweDA0OTgsIDB4YTE5NCwgMHgyNDAwLCAweDkxMjIsIDB4YTE5OCwgMHgyMzAwLCAweDkxMWIsCi0JMHgwYTBjLCAweDBkZjYsIDB4YTA4NCwgMHg5NDIwLCAweGEwODgsIDB4OTMxOSwgMHgwNDMwLCAweGExYWMsCi0JMHgyNDAwLCAweDkxMjIsIDB4YTFiMCwgMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGY2LCAweGEwOWMsCi0JMHg5NDIwLCAweGEwYTAsIDB4OTMxOSwgMHgwMGM4LCAweGExYzQsIDB4MjQwMCwgMHg5MTIyLCAweGExYzgsCi0JMHgyMzAwLCAweDkxMWIsIDB4MGEwYywgMHgwZGY2LCAweGEwYjQsIDB4OTQyMCwgMHhhMGI4LCAweDkzMTksCi0JMHgwMDYwLCAweGExZGMsIDB4MjQwMCwgMHg5MTIyLCAweGExZTAsIDB4MjMwMCwgMHg5MTFiLCAweDBhMGMsCi0JMHgwZGY2LCAweGEwY2MsIDB4OTQyMCwgMHhhMGQwLCAweDkzMTksIDB4YWMxZSwgMHhhYjIyLCAweGE4ODAsCi0JMHhjMGZkLCAweGE4ODIsIDB4MjgwMCwgMHhhODVhLCAweDJjMDAsIDB4YTgxMiwgMHgyYTAwLCAweGE4MTYsCi0JMHgwMDBlLCAweDAwMGUsIDB4MDAwZSwgMHg5MDA2LCAweDAwMjgsIDB4MDA4ZSwgMHgwMGRlLCAweDAwY2UsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgyMDAxLCAweDAwMDUsIDB4MjAwNCwgMHhkMGJjLCAweDE5MGMsCi0JMHgwZGVmLCAweDkwODQsIDB4MDAwNywgMHgwMDAyLCAweDIwZGUsIDB4MWQwMCwgMHgyMGRlLCAweDIwZDQsCi0JMHgyMGQ3LCAweDIwZGEsIDB4MjBkNywgMHgyMGRhLCAweDA4MGMsIDB4MWQwMCwgMHgwMDA1LCAweDA4MGMsCi0JMHgxMWVlLCAweDAwMDUsIDB4MDgwYywgMHgxZDAwLCAweDA4MGMsIDB4MTFlZSwgMHgwMDA1LCAweDAxMjYsCi0JMHgyMDkxLCAweDI2MDAsIDB4MjA3OSwgMHgwMjAwLCAweDIwNzEsIDB4MDI2MCwgMHgyMDY5LCAweDE4MDAsCi0JMHg3ODE3LCAweDAwMDAsIDB4Nzg5YiwgMHgwODE0LCAweDc4YTMsIDB4MDQwNiwgMHg3ODlmLCAweDA0MTAsCi0JMHgyMDA5LCAweDAxM2IsIDB4MjAwYiwgMHgwNDAwLCAweDc4MWIsIDB4MDAwMiwgMHg3ODNiLCAweDAwMWYsCi0JMHg3ODM3LCAweDAwMjAsIDB4NzgwMywgMHgxNjAwLCAweDAxMmUsIDB4MDAwNSwgMHgyMDkxLCAweDI2MDAsCi0JMHg3ODFjLCAweGQwYTQsIDB4MTkwYywgMHgyMWZkLCAweDc5MDAsIDB4ZDFkYywgMHgxMTE4LCAweDkwODQsCi0JMHgwMDA2LCAweDAwMWEsIDB4OTA4NCwgMHgwMDBlLCAweDAwMDIsIDB4MjEyNSwgMHgyMTFkLCAweDdiMzMsCi0JMHgyMTFkLCAweDIxMWYsIDB4MjExZiwgMHgyMTFmLCAweDIxMWYsIDB4N2IxOSwgMHgyMTFkLCAweDIxMjEsCi0JMHgyMTFkLCAweDIxMWYsIDB4MjExZCwgMHgyMTFmLCAweDIxMWQsIDB4MDgwYywgMHgwZGY2LCAweDAwMzEsCi0JMHgwMDIwLCAweDA4MGMsIDB4N2IxOSwgMHgwODBjLCAweDdiMzMsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsCi0JMHgwMDI2LCAweDA4MGMsIDB4ZGJmYywgMHg3OTMwLCAweDkxODQsIDB4MDAwMywgMHgwMWMwLCAweDIwMDEsCi0JMHgxOWQxLCAweDIwMDQsIDB4OTAwNSwgMHgwMTcwLCAweDIwMDEsIDB4MDEzMywgMHgyMDA0LCAweDkwMDUsCi0JMHgwOTBjLCAweDBkZjYsIDB4MDBjNiwgMHgyMDAxLCAweDE5ZDEsIDB4MjA2NCwgMHgwODBjLCAweGI5ODMsCi0JMHgwMGNlLCAweDAwZjgsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIwMCwgMHgwMGQwLCAweDkxODQsCi0JMHgwMDE0LCAweDAxYTAsIDB4NmEwMCwgMHg5Mjg2LCAweDAwMDMsIDB4MDE2MCwgMHgwODBjLCAweDcxN2UsCi0JMHgxMTM4LCAweDA4MGMsIDB4NzQ3YSwgMHgwODBjLCAweDVlMmYsIDB4MDgwYywgMHg3MDllLCAweDAwMTAsCi0JMHgwODBjLCAweDVjZWUsIDB4MDgwYywgMHg3YmUyLCAweDAwNDEsIDB4MDAxOCwgMHg5MTg0LCAweDk1NDAsCi0JMHgxZGM4LCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDM2LCAweDAwNDYsCi0JMHgwMDU2LCAweDIwNzEsIDB4MWEzZiwgMHgwODBjLCAweDE5NzcsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDJlMDAsIDB4MjA3MSwgMHgxODAwLCAweDcxMjgsCi0JMHgyMDAxLCAweDE5NDksIDB4MjEwMiwgMHgyMDAxLCAweDE5NTEsIDB4MjEwMiwgMHgyMDAxLCAweDAxM2IsCi0JMHgyMTAyLCAweDIwNzksIDB4MDIwMCwgMHgyMDAxLCAweDAyMDEsIDB4Nzg5ZSwgMHg3OGEzLCAweDAyMDAsCi0JMHg5MTk4LCAweDAwMDcsIDB4ODMxYywgMHg4MzFjLCAweDgzMWMsIDB4OTM5OCwgMHgwMDA1LCAweDIzMjAsCi0JMHg5MTgyLCAweDAyMDQsIDB4MTIzMCwgMHgyMDExLCAweDAwMDgsIDB4ODQyMywgMHg4NDIzLCAweDg0MjMsCi0JMHgwNDg4LCAweDkxODIsIDB4MDI0YywgMHgxMjQwLCAweDIwMTEsIDB4MDAwNywgMHg4NDAzLCAweDgwMDMsCi0JMHg5NDAwLCAweDk0MDAsIDB4OTQyMCwgMHgwNDMwLCAweDkxODIsIDB4MDJiYywgMHgxMjM4LCAweDIwMTEsCi0JMHgwMDA2LCAweDg0MDMsIDB4ODAwMywgMHg5NDAwLCAweDk0MjAsIDB4MDBlMCwgMHg5MTgyLCAweDAzNGMsCi0JMHgxMjMwLCAweDIwMTEsIDB4MDAwNSwgMHg4NDAzLCAweDgwMDMsIDB4OTQyMCwgMHgwMDk4LCAweDkxODIsCi0JMHgwNDJjLCAweDEyMjgsIDB4MjAxMSwgMHgwMDA0LCAweDg0MjMsIDB4ODQyMywgMHgwMDU4LCAweDkxODIsCi0JMHgwNTljLCAweDEyMjgsIDB4MjAxMSwgMHgwMDAzLCAweDg0MDMsIDB4OTQyMCwgMHgwMDE4LCAweDIwMTEsCi0JMHgwMDAyLCAweDg0MjMsIDB4OTQ4MiwgMHgwMjI4LCAweDgwMDIsIDB4ODAyMCwgMHg4MzAxLCAweDk0MDIsCi0JMHgwMTEwLCAweDAyMDgsIDB4ODMyMSwgMHg4MjE3LCAweDgyMDMsIDB4OTQwNSwgMHg3ODlhLCAweDAxMmUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDBkNiwgMHgyMDY5LCAweDAyMDAsIDB4NjgxNCwgMHg5MDg0LCAweGZmYzAsCi0JMHg5MTBkLCAweDY5MTYsIDB4MDBkZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBkNiwgMHgyMDY5LCAweDAyMDAsCi0JMHg5MDA1LCAweDY4MTAsIDB4MDExMCwgMHhjMGE1LCAweDAwMDgsIDB4YzBhNCwgMHg2ODEyLCAweDAwZGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDBkNiwgMHgyMDY5LCAweDAyMDAsIDB4NjgxMCwgMHg5MDg0LCAweGZmZjgsCi0JMHg5MTBkLCAweDY5MTIsIDB4MDBkZSwgMHgwMDBlLCAweDAwMDUsIDB4NzkzOCwgMHgwODBjLCAweDBkZWYsCi0JMHgwMGY2LCAweDIwNzksIDB4MDIwMCwgMHg3OTAyLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsCi0JMHhhMDAxLCAweGEwMDEsIDB4NzkwMiwgMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweGEwMDEsCi0JMHhhMDAxLCAweDAwZmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4MjgwMCwgMHgyMDYxLCAweDAxMDAsCi0JMHgyMDcxLCAweDE4MDAsIDB4MjAwOSwgMHgwMDAwLCAweDA4MGMsIDB4MmE5ZCwgMHgwODBjLCAweDI5NzQsCi0JMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMGEsIDB4MDU1OCwgMHg2MDU0LCAweDgwMDQsCi0JMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg5MDg0LCAweDAwMGMsIDB4NjE1MCwgMHg5MThjLCAweGZmZjMsCi0JMHg5MTA1LCAweDYwNTIsIDB4NjA1MCwgMHg5MDg0LCAweGIxN2YsIDB4OTA4NSwgMHgyMDAwLCAweDYwNTIsCi0JMHgyMDA5LCAweDE5NzcsIDB4MjAxMSwgMHgxOTc4LCAweDYzNTgsIDB4OTM5YywgMHgzOGYwLCAweDIzMjAsCi0JMHgwODBjLCAweDI5ZTEsIDB4MTIzOCwgMHg5MzlkLCAweDQwMDMsIDB4OTRhNSwgMHg4NjAzLCAweDIzMGEsCi0JMHgyNDEyLCAweDAwMzAsIDB4OTM5ZCwgMHgwMjAzLCAweDk0YTUsIDB4ODYwMywgMHgyMzBhLCAweDI0MTIsCi0JMHgwMDUwLCAweDIwMDEsIDB4MTk3NywgMHgyMDAzLCAweDA3MDAsIDB4MjAwMSwgMHgxOTc4LCAweDIwMDMsCi0JMHgwNzAwLCAweDA4MGMsIDB4MmJhOSwgMHg5MDA2LCAweDA4MGMsIDB4MjlhMywgMHg5MDA2LCAweDA4MGMsCi0JMHgyOTg2LCAweDIwYTksIDB4MDAxMiwgMHgxZDA0LCAweDIyNjMsIDB4MjA5MSwgMHg2MDAwLCAweDFmMDQsCi0JMHgyMjYzLCAweDYwMmYsIDB4MDEwMCwgMHg2MDJmLCAweDAwMDAsIDB4NjA1MCwgMHg5MDg1LCAweDA0MDAsCi0JMHg5MDg0LCAweGRmZmYsIDB4NjA1MiwgMHg2MDI0LCAweDYwMjYsIDB4MDgwYywgMHgyNmE2LCAweDIwMDksCi0JMHgwMGVmLCAweDYxMzIsIDB4NjEzNiwgMHgwODBjLCAweDI2YjYsIDB4NjBlNywgMHgwMDAwLCAweDYxZWEsCi0JMHg2MGUzLCAweDAwMDIsIDB4NjA0YiwgMHhmN2Y3LCAweDYwNDMsIDB4MDAwMCwgMHg2MDJmLCAweDAwODAsCi0JMHg2MDJmLCAweDAwMDAsIDB4NjAwNywgMHgxNDlmLCAweDYwYmIsIDB4MDAwMCwgMHgyMGE5LCAweDAwMTgsCi0JMHg2MGJmLCAweDAwMDAsIDB4MWYwNCwgMHgyMjkwLCAweDYwYmIsIDB4MDAwMCwgMHg2MGJmLCAweDAxMDgsCi0JMHg2MGJmLCAweDAwMTIsIDB4NjBiZiwgMHgwMzIwLCAweDYwYmYsIDB4MDAxOCwgMHg2MDFiLCAweDAwZjAsCi0JMHg2MDFmLCAweDAwMWUsIDB4NjAwZiwgMHgwMDZiLCAweDYwMmIsIDB4NDAyZiwgMHgwMTJlLCAweDAwMDUsCi0JMHgwMGY2LCAweDIwNzksIDB4MDE0MCwgMHg3OGMzLCAweDAwODAsIDB4NzhjMywgMHgwMDgzLCAweDc4YzMsCi0JMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MzQsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsCi0JMHgxODMzLCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsCi0JMHgwMDE2LCAweDAwMjYsIDB4NjEyNCwgMHg5MTg0LCAweDVlMmMsIDB4MTExOCwgMHg5MTg0LCAweDAwMDcsCi0JMHgwMDJhLCAweDkxOTUsIDB4MDAwNCwgMHg5Mjg0LCAweDAwMDcsIDB4MDAwMiwgMHgyMmYwLCAweDIyZDYsCi0JMHgyMmQ5LCAweDIyZGMsIDB4MjJlMSwgMHgyMmUzLCAweDIyZTcsIDB4MjJlYiwgMHgwODBjLCAweDg0ZTIsCi0JMHgwMGI4LCAweDA4MGMsIDB4ODViMSwgMHgwMGEwLCAweDA4MGMsIDB4ODViMSwgMHgwODBjLCAweDg0ZTIsCi0JMHgwMDc4LCAweDAwOTksIDB4MDA2OCwgMHgwODBjLCAweDg0ZTIsIDB4MDA3OSwgMHgwMDQ4LCAweDA4MGMsCi0JMHg4NWIxLCAweDAwNTksIDB4MDAyOCwgMHgwODBjLCAweDg1YjEsIDB4MDgwYywgMHg4NGUyLCAweDAwMjksCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4MDBhNiwgMHg2MTI0LCAweDYwMjgsCi0JMHhkMDljLCAweDAxMTgsIDB4ZDE5YywgMHgxOTA0LCAweDI1NDcsIDB4ZDFmNCwgMHgxOTBjLCAweDBkZWYsCi0JMHgwODBjLCAweDcxN2UsIDB4MDkwNCwgMHgyMzRiLCAweDA4MGMsIDB4YzQ1OSwgMHgxMTIwLCAweDcwMDAsCi0JMHg5MDg2LCAweDAwMDMsIDB4MDU3MCwgMHg2MDI0LCAweDkwODQsIDB4MTgwMCwgMHgwNTUwLCAweDA4MGMsCi0JMHg3MWExLCAweDAxMTgsIDB4MDgwYywgMHg3MThmLCAweDE1MjAsIDB4NjAyNywgMHgwMDIwLCAweDYwNDMsCi0JMHgwMDAwLCAweDA4MGMsIDB4YzQ1OSwgMHgwMTY4LCAweDA4MGMsIDB4NzFhMSwgMHgxMTUwLCAweDIwMDEsCi0JMHgxOTgyLCAweDIwMDMsIDB4MDAwMSwgMHg2MDI3LCAweDE4MDAsIDB4MDgwYywgMHg2ZmVkLCAweDA4MDQsCi0JMHgyNTRhLCAweDcwYTAsIDB4OTAwNSwgMHgxMTUwLCAweDcwYTMsIDB4MDAwMSwgMHgwMGQ2LCAweDIwNjksCi0JMHgwMTQwLCAweDA4MGMsIDB4NzFkMiwgMHgwMGRlLCAweDE5MDQsIDB4MjU0YSwgMHgwODBjLCAweDc0ODQsCi0JMHgwNDI4LCAweDA4MGMsIDB4NzFhMSwgMHgxNTkwLCAweDYwMjQsIDB4OTA4NCwgMHgxODAwLCAweDExMDgsCi0JMHgwNDY4LCAweDA4MGMsIDB4NzQ4NCwgMHgwODBjLCAweDc0N2EsIDB4MDgwYywgMHg1ZTJmLCAweDA4MGMsCi0JMHg3MDllLCAweDA4MDQsIDB4MjU0NywgMHhkMWFjLCAweDE1MDgsIDB4NjAyNCwgMHhkMGRjLCAweDExNzAsCi0JMHhkMGU0LCAweDExNzgsIDB4ZDBkNCwgMHgxMTkwLCAweGQwY2MsIDB4MDEzMCwgMHg3MDk0LCAweDkwODYsCi0JMHgwMDI5LCAweDExMTAsIDB4MDgwYywgMHg3MzY5LCAweDA4MDQsIDB4MjU0NywgMHgwODBjLCAweDc0N2YsCi0JMHgwMDQ4LCAweDIwMDEsIDB4MTk1NywgMHgyMDAzLCAweDAwMDIsIDB4MDAyMCwgMHgwODBjLCAweDcyY2QsCi0JMHgwODA0LCAweDI1NDcsIDB4MDgwYywgMHg3NDAzLCAweDA4MDQsIDB4MjU0NywgMHhkMWFjLCAweDA5MDQsCi0JMHgyNDY4LCAweDA4MGMsIDB4NzE3ZSwgMHgxMWMwLCAweDYwMjcsIDB4MDAyMCwgMHgwMDA2LCAweDAwMjYsCi0JMHgwMDM2LCAweDA4MGMsIDB4NzE5OCwgMHgxMTU4LCAweDA4MGMsIDB4NzQ3YSwgMHgwODBjLCAweDVlMmYsCi0JMHgwODBjLCAweDcwOWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMGUsIDB4MDBhZSwgMHgwMDA1LCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMGUsIDB4MDgwYywgMHg3MTU2LCAweDAwMTYsIDB4MDA0NiwgMHgwMGM2LCAweDY0NGMsCi0JMHg5NDg2LCAweGYwZjAsIDB4MTEzOCwgMHgyMDYxLCAweDAxMDAsIDB4NjQ0YSwgMHg2MDQzLCAweDAwOTAsCi0JMHg2MDQzLCAweDAwMTAsIDB4NzRkNiwgMHg5NDhjLCAweGZmMDAsIDB4NzAzOCwgMHhkMDg0LCAweDAxOTAsCi0JMHgwODBjLCAweGM0NTksIDB4MTExOCwgMHg5MTg2LCAweGY4MDAsIDB4MTE2MCwgMHg3MDQ0LCAweGQwODQsCi0JMHgxMTQ4LCAweGMwODUsIDB4NzA0NiwgMHgwMDM2LCAweDI0MTgsIDB4MjAxMSwgMHg4MDE2LCAweDA4MGMsCi0JMHg0YTE3LCAweDAwM2UsIDB4MDgwYywgMHhjNDUyLCAweDE5MDQsIDB4MjQ0NSwgMHg5MTk2LCAweGZmMDAsCi0JMHgwNWE4LCAweDcwNWMsIDB4OTA4NCwgMHgwMGZmLCAweDgxMGYsIDB4ODFmZiwgMHgwMTEwLCAweDkxMTYsCi0JMHgwNTY4LCAweDcxMzAsIDB4ZDE4NCwgMHgxNTUwLCAweDA4MGMsIDB4MzFlZSwgMHgwMTI4LCAweGMxOGQsCi0JMHg3MTMyLCAweDA4MGMsIDB4NjZjMSwgMHgxNTEwLCAweDYyNDAsIDB4OTI5NCwgMHgwMDEwLCAweDAxMzAsCi0JMHg2MjQ4LCAweDkyOTQsIDB4ZmYwMCwgMHg5Mjk2LCAweGZmMDAsIDB4MDFjMCwgMHg3MDMwLCAweGQwOGMsCi0JMHgwOTA0LCAweDI0NDUsIDB4NzAzOCwgMHhkMDhjLCAweDExNDAsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCi0JMHhkMWFjLCAweDE5MDQsIDB4MjQ0NSwgMHhjMWFkLCAweDIxMDIsIDB4MDAzNiwgMHg3M2Q0LCAweDIwMTEsCi0JMHg4MDEzLCAweDA4MGMsIDB4NGExNywgMHgwMDNlLCAweDA4MDQsIDB4MjQ0NSwgMHg3MDM4LCAweGQwOGMsCi0JMHgxMTQwLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGQxYWMsIDB4MTkwNCwgMHgyNDQ1LCAweGMxYWQsCi0JMHgyMTAyLCAweDAwMzYsIDB4NzNkNCwgMHgyMDExLCAweDgwMTMsIDB4MDgwYywgMHg0YTE3LCAweDAwM2UsCi0JMHg3MTMwLCAweGMxODUsIDB4NzEzMiwgMHgyMDExLCAweDE4NWMsIDB4MjIwYywgMHgwMGYwLCAweDAwMTYsCi0JMHgyMDA5LCAweDAwMDEsIDB4MjAxMSwgMHgwMTAwLCAweDA4MGMsIDB4ODQ1MCwgMHgyMDE5LCAweDAwMGUsCi0JMHgwMGM2LCAweDIwNjEsIDB4MDAwMCwgMHgwODBjLCAweGQ3YWYsIDB4MDBjZSwgMHg5NDg0LCAweDAwZmYsCi0JMHg5MDgwLCAweDMxZjMsIDB4MjAwZCwgMHg5MThjLCAweGZmMDAsIDB4ODEwZiwgMHgyMTIwLCAweDkwMDYsCi0JMHgyMDA5LCAweDAwMGUsIDB4MDgwYywgMHhkODM3LCAweDAwMWUsIDB4ZDFhYywgMHgxMTQ4LCAweDAwMTYsCi0JMHgyMDA5LCAweDAwMDIsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4MzA2MCwgMHgwMDFlLCAweDAwYTgsCi0JMHgwMTU2LCAweDAwYjYsIDB4MjBhOSwgMHgwMDdmLCAweDkwMGUsIDB4MDgwYywgMHg2M2EzLCAweDExNDAsCi0JMHg3MDMwLCAweGQwODQsIDB4MTExOCwgMHhiODAwLCAweGQwYmMsIDB4MTExMCwgMHgwODBjLCAweDVlNDksCi0JMHg4MTA4LCAweDFmMDQsIDB4MjQzNSwgMHgwMGJlLCAweDAxNWUsIDB4MDBjZSwgMHgwMDRlLCAweDA4MGMsCi0JMHg5ZjcwLCAweDYwZTMsIDB4MDAwMCwgMHgwMDFlLCAweDIwMDEsIDB4MTgwMCwgMHgyMDE0LCAweDkyOTYsCi0JMHgwMDA0LCAweDExNzAsIDB4ZDE5YywgMHgxMWEwLCAweDIwMTEsIDB4MTgwYywgMHgyMjE0LCAweGQyOWMsCi0JMHgxMTIwLCAweDYyMDQsIDB4OTI5NSwgMHgwMDAyLCAweDYyMDYsIDB4NjIyOCwgMHhjMjlkLCAweDYyMmEsCi0JMHgyMDAzLCAweDAwMDEsIDB4MjAwMSwgMHgxODI1LCAweDIwMDMsIDB4MDAwMCwgMHg2MDI3LCAweDAwMjAsCi0JMHhkMTk0LCAweDA5MDQsIDB4MjU0NywgMHgwMDE2LCAweDYyMjAsIDB4ZDJiNCwgMHgwOTA0LCAweDI0ZjAsCi0JMHgwODBjLCAweDgyZDksIDB4MDgwYywgMHg5NjFhLCAweDYwMjcsIDB4MDAwNCwgMHgwMGY2LCAweDIwMTksCi0JMHgxOWNiLCAweDIzMDQsIDB4OTA3ZCwgMHgwOTA0LCAweDI0YmYsIDB4NzgwNCwgMHg5MDg2LCAweDAwMzIsCi0JMHgxNWYwLCAweDAwZDYsIDB4MDBjNiwgMHgwMGU2LCAweDAwOTYsIDB4MjA2OSwgMHgwMTQwLCAweDc4MmMsCi0JMHg2ODVlLCAweDc4MDgsIDB4Njg1YSwgMHg2MDQzLCAweDAwMDIsIDB4MjAwMSwgMHgwMDAzLCAweDgwMDEsCi0JMHgxZGYwLCAweDYwNDMsIDB4MDAwMCwgMHgyMDAxLCAweDAwM2MsIDB4ODAwMSwgMHgxZGYwLCAweDA4MGMsCi0JMHgyYjdmLCAweDIwMDEsIDB4MDAxZSwgMHg4MDAxLCAweDAyNDAsIDB4MjBhOSwgMHgwMDA5LCAweDA4MGMsCi0JMHgyYTc4LCAweDY5MDQsIDB4ZDFkYywgMHgxMTQwLCAweDBjYjAsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsCi0JMHgyYjZmLCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDA4MGMsIDB4OGE4MywgMHgwODBjLCAweDhiOGYsCi0JMHg3ODE0LCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLCAweDJmNjAsIDB4MDgwYywgMHg5ZmVhLCAweDAwOWUsCi0JMHgwMGVlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGZlLCAweDAwMWUsIDB4MDBhZSwgMHgwMDA1LCAweDAwZmUsCi0JMHgwMGQ2LCAweDIwNjksIDB4MDE0MCwgMHg2ODA0LCAweDkwODQsIDB4NDAwMCwgMHgwMTEwLCAweDA4MGMsCi0JMHgyYjdmLCAweDAwZGUsIDB4MDBjNiwgMHgyMDYxLCAweDE5YzIsIDB4NjAyOCwgMHgwODBjLCAweGM0NTksCi0JMHgwMTIwLCAweDkwOWEsIDB4MDAwMywgMHgxMjU4LCAweDAwMTgsIDB4OTA5YSwgMHgwMGM4LCAweDEyMzgsCi0JMHg4MDAwLCAweDYwMmEsIDB4MDBjZSwgMHgwODBjLCAweDk1ZjYsIDB4MDgwNCwgMHgyNTQ2LCAweDIwNjEsCi0JMHgwMTAwLCAweDYyYzAsIDB4MDgwYywgMHg5ZGY2LCAweDIwMTksIDB4MTljYiwgMHgyMzA0LCAweDkwNjUsCi0JMHgwMTIwLCAweDIwMDksIDB4MDAyNywgMHgwODBjLCAweGEwNjgsIDB4MDBjZSwgMHgwODA0LCAweDI1NDYsCi0JMHhkMmJjLCAweDA5MDQsIDB4MjUzMywgMHgwODBjLCAweDgyZTYsIDB4NjAxNCwgMHg5MDg0LCAweDE5ODQsCi0JMHg5MDg1LCAweDAwMTAsIDB4NjAxNiwgMHg2MDI3LCAweDAwMDQsIDB4MDBkNiwgMHgyMDY5LCAweDAxNDAsCi0JMHg2ODA0LCAweDkwODQsIDB4NDAwMCwgMHgwMTEwLCAweDA4MGMsIDB4MmI3ZiwgMHgwMGRlLCAweDAwYzYsCi0JMHgyMDYxLCAweDE5YzIsIDB4NjA0NCwgMHgwODBjLCAweGM0NTksIDB4MDEyMCwgMHg5MDlhLCAweDAwMDMsCi0JMHgxNjI4LCAweDAwMTgsIDB4OTA5YSwgMHgwMGM4LCAweDE2MDgsIDB4ODAwMCwgMHg2MDQ2LCAweDYwM2MsCi0JMHgwMGNlLCAweDkwMDUsIDB4MDU1OCwgMHgyMDA5LCAweDA3ZDAsIDB4MDgwYywgMHg4MmRlLCAweDkwODAsCi0JMHgwMDA4LCAweDIwMDQsIDB4OTA4NiwgMHgwMDA2LCAweDExMzgsIDB4NjExNCwgMHg5MThjLCAweDE5ODQsCi0JMHg5MThkLCAweDAwMTIsIDB4NjExNiwgMHgwMGQwLCAweDYxMTQsIDB4OTE4YywgMHgxOTg0LCAweDkxOGQsCi0JMHgwMDE2LCAweDYxMTYsIDB4MDA5OCwgMHg2MDI3LCAweDAwMDQsIDB4MDA4MCwgMHgwMDM2LCAweDIwMTksCi0JMHgwMDAxLCAweDA4MGMsIDB4OThiMSwgMHgwMDNlLCAweDIwMTksIDB4MTlkMSwgMHgyMzA0LCAweDkwNjUsCi0JMHgwMTIwLCAweDIwMDksIDB4MDA0ZiwgMHgwODBjLCAweGEwNjgsIDB4MDBjZSwgMHgwMDFlLCAweGQxOWMsCi0JMHgwOTA0LCAweDI2MTEsIDB4NzAzOCwgMHhkMGFjLCAweDE5MDQsIDB4MjVlNiwgMHgwMDE2LCAweDAxNTYsCi0JMHg2MDI3LCAweDAwMDgsIDB4MjAwMSwgMHgwMTAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDBhLCAweDA5MDQsCi0JMHgyNWMzLCAweDYwNTAsIDB4OTA4NSwgMHgwMDQwLCAweDYwNTIsIDB4NjA1MCwgMHg5MDg0LCAweGZiY2YsCi0JMHg2MDUyLCAweDA4MGMsIDB4MmE5NywgMHg5MDg1LCAweDIwMDAsIDB4NjA1MiwgMHgyMGE5LCAweDAwMTIsCi0JMHgxZDA0LCAweDI1NjgsIDB4MDgwYywgMHg4MzBkLCAweDFmMDQsIDB4MjU2OCwgMHg2MDUwLCAweDkwODUsCi0JMHgwNDAwLCAweDkwODQsIDB4ZGZiZiwgMHg2MDUyLCAweDIwYTksIDB4MDAyOCwgMHhhMDAxLCAweDFmMDQsCi0JMHgyNTc2LCAweDYxNTAsIDB4OTE4NSwgMHgxNDAwLCAweDYwNTIsIDB4MjBhOSwgMHgwMzY2LCAweDFkMDQsCi0JMHgyNTdmLCAweDA4MGMsIDB4ODMwZCwgMHg2MDIwLCAweGQwOWMsIDB4MTEzOCwgMHgwMTVlLCAweDYxNTIsCi0JMHgwMDFlLCAweDYwMjcsIDB4MDAwOCwgMHgwODA0LCAweDI2MTEsIDB4MDgwYywgMHgyYTVmLCAweDFmMDQsCi0JMHgyNTdmLCAweDAxNWUsIDB4NjE1MiwgMHgwMDFlLCAweDYwMjcsIDB4MDAwOCwgMHgwMDE2LCAweDYwMjgsCi0JMHhjMDljLCAweDYwMmEsIDB4MDgwYywgMHg5ZjcwLCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweGRiZGIsCi0JMHgwODBjLCAweGRiZjYsIDB4MDgwYywgMHg1NGRmLCAweGQwZmMsIDB4MTEzOCwgMHgwODBjLCAweGM0NTIsCi0JMHgxMTIwLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDcxYzIsIDB4OTAwNiwgMHgwODBjLCAweDJiNmYsCi0JMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHgyYTlkLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDcwMDMsCi0JMHgwMDA0LCAweDA4MGMsIDB4MGVjYywgMHgwMGVlLCAweDYwMjcsIDB4MDAwOCwgMHgwODBjLCAweDBiOGYsCi0JMHgwMDFlLCAweDA4MDQsIDB4MjYxMSwgMHgwODBjLCAweDJiYTksIDB4MDgwYywgMHgyYmRjLCAweDYwNTAsCi0JMHhjMGU1LCAweDYwNTIsIDB4MjBhOSwgMHgwMzY3LCAweDBmMDQsIDB4MjVlNCwgMHgxZDA0LCAweDI1Y2UsCi0JMHgwODBjLCAweDgzMGQsIDB4NjAyMCwgMHhkMDljLCAweDFkYjgsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsCi0JMHgwODBjLCAweDI5ZjEsIDB4MDBmZSwgMHgxZDgwLCAweDYwNTAsIDB4YzBlNCwgMHg2MDUyLCAweDYwMjcsCi0JMHgwMDA4LCAweDAxNWUsIDB4MDAxZSwgMHgwNDY4LCAweDAxNWUsIDB4MDAxZSwgMHgwMDE2LCAweDYwMjgsCi0JMHhjMDljLCAweDYwMmEsIDB4MDgwYywgMHg5ZjcwLCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweGRiZGIsCi0JMHgwODBjLCAweGRiZjYsIDB4MDgwYywgMHg1NGRmLCAweGQwZmMsIDB4MTEzOCwgMHgwODBjLCAweGM0NTIsCi0JMHgxMTIwLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDcxYzIsIDB4OTAwNiwgMHgwODBjLCAweDJiNmYsCi0JMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHgyYTlkLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDcwMDMsCi0JMHgwMDA0LCAweDA4MGMsIDB4MGVjYywgMHgwMGVlLCAweDYwMjcsIDB4MDAwOCwgMHgwODBjLCAweDBiOGYsCi0JMHgwMDFlLCAweDkxOGMsIDB4ZmZkMCwgMHg2MTI2LCAweDAwYWUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDBlNiwgMHgwMGY2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsCi0JMHgxODAwLCAweDcxY2MsIDB4NzBjZSwgMHg5MTE2LCAweDA5MDQsIDB4MjY2NSwgMHg4MWZmLCAweDAxYTAsCi0JMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHgyYTlkLCAweDIwMTEsIDB4ODAxMSwgMHgyMDE5LCAweDAxMGUsCi0JMHgyMzFjLCAweDkzOWUsIDB4MDAwNywgMHgxMTE4LCAweDIwMTksIDB4MDAwMSwgMHgwMDEwLCAweDIwMTksCi0JMHgwMDAwLCAweDA4MGMsIDB4NGExNywgMHgwNDQ4LCAweDIwMDEsIDB4MTk4MywgMHgyMDBjLCAweDgxZmYsCi0JMHgxMTQwLCAweDIwMDEsIDB4MDEwOSwgMHgyMDA0LCAweGQwYjQsIDB4MDExOCwgMHgyMDE5LCAweDAwMDMsCi0JMHgwMDA4LCAweDIxMTgsIDB4MjAxMSwgMHg4MDEyLCAweDA4MGMsIDB4NGExNywgMHgwODBjLCAweDBlY2MsCi0JMHgwODBjLCAweDU0ZGYsIDB4ZDBmYywgMHgxMTg4LCAweDA4MGMsIDB4YzQ1MiwgMHgxMTcwLCAweDAwYzYsCi0JMHgwODBjLCAweDI3MDEsIDB4MDgwYywgMHg5ODE4LCAweDIwNjEsIDB4MDEwMCwgMHgyMDE5LCAweDAwMjgsCi0JMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHgzMDYwLCAweDAwY2UsIDB4MDEyZSwgMHgwMGZlLCAweDAwZWUsCi0JMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MjAyOCwgMHg5MThjLCAweDAwZmYsCi0JMHgyMTMwLCAweDkwOTQsIDB4ZmYwMCwgMHgxMWYwLCAweDIwMTEsIDB4MTgzNiwgMHgyMjE0LCAweGQyYWMsCi0JMHgxMWM4LCAweDgxZmYsIDB4MDFlOCwgMHgyMDExLCAweDE4MWUsIDB4MjIwNCwgMHg5MTA2LCAweDExOTAsCi0JMHgyMDExLCAweDE4MWYsIDB4MjIxNCwgMHg5Mjk0LCAweGZmMDAsIDB4OTU4NCwgMHhmZjAwLCAweDkyMDYsCi0JMHgxMTQ4LCAweDIwMTEsIDB4MTgxZiwgMHgyMjE0LCAweDkyOTQsIDB4MDBmZiwgMHg5NTg0LCAweDAwZmYsCi0JMHg5MjA2LCAweDExMjAsIDB4MjUwMCwgMHgwODBjLCAweDdlM2YsIDB4MDA0OCwgMHg5NTg0LCAweDAwZmYsCi0JMHg5MDgwLCAweDMxZjMsIDB4MjAwZCwgMHg5MThjLCAweGZmMDAsIDB4ODEwZiwgMHg5MDA2LCAweDAwMDUsCi0JMHg5MDgwLCAweDMxZjMsIDB4MjAwZCwgMHg5MThjLCAweDAwZmYsIDB4MDAwNSwgMHgwMGQ2LCAweDIwNjksCi0JMHgwMTQwLCAweDIwMDEsIDB4MTgxNywgMHgyMDAzLCAweDAwZWYsIDB4MjBhOSwgMHgwMDEwLCAweDkwMDYsCi0JMHg2ODUyLCAweDY4NTYsIDB4MWYwNCwgMHgyNmIxLCAweDAwZGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwZDYsCi0JMHgwMDI2LCAweDIwNjksIDB4MDE0MCwgMHgyMDAxLCAweDE4MTcsIDB4MjEwMiwgMHg4MTE0LCAweDgyMTQsCi0JMHg4MjE0LCAweDgyMTQsIDB4MjBhOSwgMHgwMDEwLCAweDY4NTMsIDB4MDAwMCwgMHg5MDA2LCAweDgyZmYsCi0JMHgxMTI4LCAweDkxODQsIDB4MDAwZiwgMHg5MDgwLCAweGUzYTYsIDB4MjAwNSwgMHg2ODU2LCAweDgyMTEsCi0JMHgxZjA0LCAweDI2YzYsIDB4MDAyZSwgMHgwMGRlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGM2LCAweDIwNjEsCi0JMHgxODAwLCAweDYwMzAsIDB4MDExMCwgMHhjMDlkLCAweDAwMDgsIDB4YzA5YywgMHg2MDMyLCAweDAwY2UsCi0JMHgwMDA1LCAweDAxNTYsIDB4MDBkNiwgMHgwMDI2LCAweDAwMTYsIDB4MDAwNiwgMHgyMDY5LCAweDAxNDAsCi0JMHg2OTgwLCAweDkxMTYsIDB4MDE4MCwgMHg5MTEyLCAweDEyMzAsIDB4ODIxMiwgMHg4MjEwLCAweDIyYTgsCi0JMHgyMDAxLCAweDA0MDIsIDB4MDAxOCwgMHgyMmE4LCAweDIwMDEsIDB4MDQwNCwgMHg2ODBlLCAweDFmMDQsCi0JMHgyNmY2LCAweDY4MGYsIDB4MDAwMCwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMGRlLCAweDAxNWUsCi0JMHgwMDA1LCAweDA4MGMsIDB4NTRkYiwgMHhkMGM0LCAweDAxNTAsIDB4ZDBhNCwgMHgwMTQwLCAweDkwMDYsCi0JMHgwMDQ2LCAweDIwMjAsIDB4MjAwOSwgMHgwMDJlLCAweDA4MGMsIDB4ZDgzNywgMHgwMDRlLCAweDAwMDUsCi0JMHgwMGY2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDc5LCAweDAxNDAsIDB4NzhjNCwgMHhkMGRjLCAweDA5MDQsCi0JMHgyNzZkLCAweDA4MGMsIDB4MjllMSwgMHgwNjYwLCAweDkwODQsIDB4MDcwMCwgMHg5MDhlLCAweDA2MDAsCi0JMHgxMTIwLCAweDIwMTEsIDB4NDAwMCwgMHg5MDBlLCAweDA0NTgsIDB4OTA4ZSwgMHgwNTAwLCAweDExMjAsCi0JMHgyMDExLCAweDgwMDAsIDB4OTAwZSwgMHgwNDIwLCAweDkwOGUsIDB4MDQwMCwgMHgxMTIwLCAweDkwMTYsCi0JMHgyMDA5LCAweDAwMDEsIDB4MDBlOCwgMHg5MDhlLCAweDAzMDAsIDB4MTEyMCwgMHg5MDE2LCAweDIwMDksCi0JMHgwMDAyLCAweDAwYjAsIDB4OTA4ZSwgMHgwMjAwLCAweDExMjAsIDB4OTAxNiwgMHgyMDA5LCAweDAwMDQsCi0JMHgwMDc4LCAweDkwOGUsIDB4MDEwMCwgMHgxNTQ4LCAweDkwMTYsIDB4MjAwOSwgMHgwMDA4LCAweDAwNDAsCi0JMHg5MDg0LCAweDA3MDAsIDB4OTA4ZSwgMHgwMzAwLCAweDE1MDAsIDB4MjAxMSwgMHgwMDMwLCAweDAwNTgsCi0JMHgyMzAwLCAweDkwODAsIDB4MDAyMCwgMHgyMDE4LCAweDA4MGMsIDB4ODQ3ZSwgMHg5MjhjLCAweGZmMDAsCi0JMHgwMTEwLCAweDIwMTEsIDB4MDBmZiwgMHgyMjAwLCAweDgwMDcsIDB4OTA4NSwgMHgwMDRjLCAweDc4YzIsCi0JMHgyMDA5LCAweDAxMzgsIDB4MjIwYSwgMHgwODBjLCAweDcxN2UsIDB4MTExOCwgMHgyMDA5LCAweDE5NDcsCi0JMHgyMjBhLCAweDAwMmUsIDB4MDAxZSwgMHgwMGZlLCAweDAwMDUsIDB4NzhjMywgMHgwMDAwLCAweDBjYzgsCi0JMHgwMTI2LCAweDIwOTEsIDB4MjgwMCwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgyMDAxLCAweDAxNzAsCi0JMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHg5MTg0LCAweDAwMDMsIDB4MDExMCwgMHgwODBjLCAweDBkZWYsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwZSwgMHgwMTJlLCAweDAwMDUsIDB4MjAwMSwgMHgwMTcxLCAweDIwMDQsCi0JMHhkMGRjLCAweDAxNjgsIDB4MjAwMSwgMHgwMTcwLCAweDIwMGMsIDB4OTE4YywgMHgwMGZmLCAweDkxOGUsCi0JMHgwMDRjLCAweDExMjgsIDB4MjAwYywgMHg5MThjLCAweGZmMDAsIDB4ODEwZiwgMHgwMDA1LCAweDkwMGUsCi0JMHgyMDAxLCAweDAyMjcsIDB4MjAwNCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHg4MDA0LCAweDkxMDgsCi0JMHgyMDAxLCAweDAyMjYsIDB4MjAwNCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHg4MDA0LCAweDkxMDgsCi0JMHgwMDA1LCAweDAwMTgsIDB4MDAwYywgMHgwMDE4LCAweDAwMjAsIDB4MTAwMCwgMHgwODAwLCAweDEwMDAsCi0JMHgxODAwLCAweDAxNTYsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsIDB4MDBlNiwgMHgyMDAxLCAweDE5NmEsCi0JMHgyMDA0LCAweDkwOGEsIDB4MDAwNywgMHgxYTBjLCAweDBkZjYsIDB4MDAzMywgMHgwMGVlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMGUsIDB4MDE1ZSwgMHgwMDA1LCAweDI3Y2IsIDB4MjdlOSwgMHgyODBkLCAweDI4MGYsCi0JMHgyODM4LCAweDI4M2EsIDB4MjgzYywgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjE2LCAweDA4MGMsCi0JMHgyYTUxLCAweDIwMDEsIDB4MTk2YywgMHgyMDAzLCAweDAwMDAsIDB4NzgyOCwgMHg5MDg0LCAweGUxZDcsCi0JMHg3ODJhLCAweDkwMDYsIDB4MjBhOSwgMHgwMDA5LCAweDA4MGMsIDB4MjlmZCwgMHgyMDAxLCAweDE5NmEsCi0JMHgyMDAzLCAweDAwMDYsIDB4MjAwOSwgMHgwMDFlLCAweDIwMTEsIDB4MjgzZCwgMHgwODBjLCAweDgyZWIsCi0JMHgwMDA1LCAweDIwMDksIDB4MTk2ZiwgMHgyMDBiLCAweDAwMDAsIDB4MjAwMSwgMHgxOTc0LCAweDIwMDMsCi0JMHgwMDM2LCAweDIwMDEsIDB4MTk3MywgMHgyMDAzLCAweDAwMmEsIDB4MjAwMSwgMHgxOTZjLCAweDIwMDMsCi0JMHgwMDAxLCAweDkwMDYsIDB4MDgwYywgMHgyOTg2LCAweDIwMDEsIDB4ZmZmZiwgMHgyMGE5LCAweDAwMDksCi0JMHgwODBjLCAweDI5ZmQsIDB4MjAwMSwgMHgxOTZhLCAweDIwMDMsIDB4MDAwNiwgMHgyMDA5LCAweDAwMWUsCi0JMHgyMDExLCAweDI4M2QsIDB4MDgwYywgMHg4MmViLCAweDAwMDUsIDB4MDgwYywgMHgwZGY2LCAweDIwMDEsCi0JMHgxOTc0LCAweDIwMDMsIDB4MDAzNiwgMHgyMDAxLCAweDE5NmMsIDB4MjAwMywgMHgwMDAzLCAweDdhMzgsCi0JMHg5Mjk0LCAweDAwMDUsIDB4OTI5NiwgMHgwMDA0LCAweDAxMTAsIDB4OTAwNiwgMHgwMDEwLCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4Mjk4NiwgMHgyMDAxLCAweDE5NzAsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsCi0JMHhmZmZmLCAweDIwYTksIDB4MDAwOSwgMHgwODBjLCAweDI5ZmQsIDB4MjAwMSwgMHgxOTZhLCAweDIwMDMsCi0JMHgwMDA2LCAweDIwMDksIDB4MDAxZSwgMHgyMDExLCAweDI4M2QsIDB4MDgwYywgMHg4MmViLCAweDAwMDUsCi0JMHgwODBjLCAweDBkZjYsIDB4MDgwYywgMHgwZGY2LCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMGU2LCAweDAwZjYsIDB4MDE1NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAxMDAsCi0JMHgyMDAxLCAweDE5NmMsIDB4MjAwNCwgMHg5MDhhLCAweDAwMDcsIDB4MWEwYywgMHgwZGY2LCAweDAwNDMsCi0JMHgwMTJlLCAweDAxNWUsIDB4MDBmZSwgMHgwMGVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsCi0JMHgyODVmLCAweDI4N2IsIDB4MjhiNywgMHgyOGUzLCAweDI5MDMsIDB4MjkwZiwgMHgyOTExLCAweDA4MGMsCi0JMHgyOWYxLCAweDExOTAsIDB4MjAwOSwgMHgxOTcyLCAweDIxMDQsIDB4N2EzOCwgMHg5Mjk0LCAweDAwMDUsCi0JMHg5Mjk2LCAweDAwMDQsIDB4MDExMCwgMHhjMDhkLCAweDAwMDgsIDB4YzA4NSwgMHgyMDBhLCAweDIwMDEsCi0JMHgxOTZhLCAweDIwMDMsIDB4MDAwMSwgMHgwMDMwLCAweDA4MGMsIDB4MjkzNSwgMHgyMDAxLCAweGZmZmYsCi0JMHgwODBjLCAweDI3ZGEsIDB4MDAwNSwgMHgwODBjLCAweDI5MTMsIDB4MDVjMCwgMHgyMDA5LCAweDE5NzMsCi0JMHgyMTA0LCAweDgwMDEsIDB4MjAwYSwgMHgwODBjLCAweDI5ZjEsIDB4MTE1OCwgMHg3YTM4LCAweDkyOTQsCi0JMHgwMDA1LCAweDkyOTYsIDB4MDAwNSwgMHgwNTE4LCAweDIwMDksIDB4MTk3MiwgMHgyMTA0LCAweGMwODUsCi0JMHgyMDBhLCAweDIwMDksIDB4MTk2ZiwgMHgyMTA0LCAweDgwMDAsIDB4MjAwYSwgMHg5MDg2LCAweDAwMDUsCi0JMHgwMTE4LCAweDA4MGMsIDB4MjkxYiwgMHgwMGMwLCAweDIwMGIsIDB4MDAwMCwgMHg3YTM4LCAweDkyOTQsCi0JMHgwMDA2LCAweDkyOTYsIDB4MDAwNCwgMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsCi0JMHgwODBjLCAweDI5YTMsIDB4MjAwMSwgMHgxOTZjLCAweDIwMDMsIDB4MDAwMiwgMHgwMDI4LCAweDIwMDEsCi0JMHgxOTZhLCAweDIwMDMsIDB4MDAwMywgMHgwMDEwLCAweDA4MGMsIDB4MjdmYywgMHgwMDA1LCAweDA4MGMsCi0JMHgyOTEzLCAweDA1NDAsIDB4MjAwOSwgMHgxOTczLCAweDIxMDQsIDB4ODAwMSwgMHgyMDBhLCAweDA4MGMsCi0JMHgyOWYxLCAweDExNDgsIDB4MjAwMSwgMHgxOTZhLCAweDIwMDMsIDB4MDAwMywgMHgyMDAxLCAweDE5NmIsCi0JMHgyMDAzLCAweDAwMDAsIDB4MDBiOCwgMHgyMDA5LCAweDE5NzMsIDB4MjEwNCwgMHg5MDA1LCAweDExMTgsCi0JMHgwODBjLCAweDI5NTgsIDB4MDAxMCwgMHgwODBjLCAweDI5MjgsIDB4MDgwYywgMHgyOTFiLCAweDIwMDksCi0JMHgxOTZmLCAweDIwMGIsIDB4MDAwMCwgMHgyMDAxLCAweDE5NmMsIDB4MjAwMywgMHgwMDAxLCAweDA4MGMsCi0JMHgyN2ZjLCAweDAwMDAsIDB4MDAwNSwgMHgwNDc5LCAweDAxZTgsIDB4MDgwYywgMHgyOWYxLCAweDExOTgsCi0JMHgyMDA5LCAweDE5NzAsIDB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4OTA4NiwgMHgwMDA3LCAweDAxMDgsCi0JMHgwMDc4LCAweDIwMDEsIDB4MTk3NSwgMHgyMDAzLCAweDAwMGEsIDB4MjAwOSwgMHgxOTcyLCAweDIxMDQsCi0JMHhjMGZkLCAweDIwMGEsIDB4MDAzOCwgMHgwMGY5LCAweDIwMDEsIDB4MTk2YywgMHgyMDAzLCAweDAwMDQsCi0JMHgwODBjLCAweDI4MjcsIDB4MDAwNSwgMHgwMDc5LCAweDAxNDgsIDB4MDgwYywgMHgyOWYxLCAweDExMTgsCi0JMHgwODBjLCAweDI4MTMsIDB4MDAxOCwgMHgwMDc5LCAweDA4MGMsIDB4MjgyNywgMHgwMDA1LCAweDA4MGMsCi0JMHgwZGY2LCAweDA4MGMsIDB4MGRmNiwgMHgyMDA5LCAweDE5NzQsIDB4MjEwNCwgMHg4MDAxLCAweDIwMGEsCi0JMHgwOTBjLCAweDI5NzQsIDB4MDAwNSwgMHg3YTM4LCAweDkyOTQsIDB4MDAwNSwgMHg5Mjk2LCAweDAwMDUsCi0JMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyOWEzLCAweDAwMDUsCi0JMHg3YTM4LCAweDkyOTQsIDB4MDAwNiwgMHg5Mjk2LCAweDAwMDYsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyOTg2LCAweDAwMDUsIDB4MjAwOSwgMHgxOTZmLCAweDIxMDQsCi0JMHg4MDAwLCAweDIwMGEsIDB4OTA4NiwgMHgwMDA1LCAweDAxMDgsIDB4MDA2OCwgMHgyMDBiLCAweDAwMDAsCi0JMHg3YTM4LCAweDkyOTQsIDB4MDAwNiwgMHg5Mjk2LCAweDAwMDYsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDRkOSwgMHg3YTM4LCAweDkyOTQsIDB4MDAwNSwgMHg5Mjk2LCAweDAwMDUsCi0JMHgwMTEwLCAweDkwMDYsIDB4MDAxMCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyOWEzLCAweDAwMDUsCi0JMHgwMDg2LCAweDIwMDEsIDB4MTk3MiwgMHgyMDA0LCAweDkwODQsIDB4N2ZmZiwgMHgwOTBjLCAweDBkZjYsCi0JMHgyMDA5LCAweDE5NzEsIDB4MjE0NCwgMHg4ODQ2LCAweDI4MGEsIDB4OTg0NCwgMHgwZGQ4LCAweGQwOGMsCi0JMHgxMTIwLCAweGQwODQsIDB4MTEyMCwgMHgwODBjLCAweDBkZjYsIDB4OTAwNiwgMHgwMDEwLCAweDIwMDEsCi0JMHgwMDAxLCAweDAwYTEsIDB4MDA4ZSwgMHgwMDA1LCAweDAwMDYsIDB4MDE1NiwgMHgyMDAxLCAweDE5NmEsCi0JMHgyMGE5LCAweDAwMDksIDB4MjAwMywgMHgwMDAwLCAweDgwMDAsIDB4MWYwNCwgMHgyOTdhLCAweDIwMDEsCi0JMHgxOTcxLCAweDIwMDMsIDB4ODAwMCwgMHgwMTVlLCAweDAwMGUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksCi0JMHgwMTAwLCAweDkwODUsIDB4MDAwMCwgMHgwMTU4LCAweDc4MzgsIDB4OTA4NCwgMHhmZmY5LCAweDkwODUsCi0JMHgwMDA0LCAweDc4M2EsIDB4MjAwOSwgMHgxOTc3LCAweDIxMGMsIDB4Nzk1YSwgMHgwMDUwLCAweDc4MzgsCi0JMHg5MDg0LCAweGZmZmIsIDB4OTA4NSwgMHgwMDA2LCAweDc4M2EsIDB4MjAwOSwgMHgxOTc4LCAweDIxMGMsCi0JMHg3OTVhLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg5MDg1LCAweDAwMDAsCi0JMHgwMTg4LCAweDc4MzgsIDB4OTA4NCwgMHhmZmZhLCAweDkwODUsIDB4MDAwNCwgMHg3ODNhLCAweDIwMDEsCi0JMHgwMTAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDBhLCAweDExMjAsIDB4Nzg1MCwgMHg5MDg0LCAweGZmZjAsCi0JMHg3ODUyLCAweDA0MjgsIDB4NzgzOCwgMHg5MDg0LCAweGZmZmIsIDB4OTA4NSwgMHgwMDA1LCAweDc4M2EsCi0JMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMGEsIDB4MTFjOCwgMHg3ODUwLCAweDkwODQsCi0JMHhmZmYwLCAweDAwMTYsIDB4MjAwOSwgMHgwMTdmLCAweDIxMGMsIDB4OTE4ZSwgMHgwMDA1LCAweDAxNDAsCi0JMHgyMDA5LCAweDAwMDMsIDB4MjEwYywgMHg5MThjLCAweDA2MDAsIDB4OTE4ZSwgMHgwNDAwLCAweDAxMTgsCi0JMHg5MDg1LCAweDAwMGEsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDAsIDB4MDAxZSwgMHg3ODUyLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgwMTAwLCAweDIwMDQsIDB4OTA4MiwgMHgwMDA3LCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgwMTAwLCAweDIwMDQsIDB4OTA4MiwgMHgwMDA5LCAweDAwMGUsCi0JMHgwMDA1LCAweDAxNTYsIDB4MjBhOSwgMHgwMDY0LCAweDc4MjAsIDB4MDgwYywgMHgyYTk3LCAweGQwOWMsCi0JMHgxMTEwLCAweDFmMDQsIDB4MjlmNCwgMHgwMTVlLCAweDAwMDUsIDB4MDEyNiwgMHgwMDE2LCAweDAwMDYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgwMTAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDBhLCAweDAxNzAsCi0JMHg3ODUwLCAweDkwODUsIDB4MDA0MCwgMHg3ODUyLCAweDc4NTAsIDB4OTA4NCwgMHhmYmNmLCAweDc4NTIsCi0JMHgwODBjLCAweDJhOTcsIDB4OTA4NSwgMHgyMDAwLCAweDc4NTIsIDB4MDAwMCwgMHgwMDBlLCAweDIwMDgsCi0JMHg5MTg2LCAweDAwMDAsIDB4MTExOCwgMHg3ODNiLCAweDAwMDcsIDB4MDA5MCwgMHg5MTg2LCAweDAwMDEsCi0JMHgxMTE4LCAweDc4M2IsIDB4MDAwNiwgMHgwMDYwLCAweDkxODYsIDB4MDAwMiwgMHgxMTE4LCAweDc4M2IsCi0JMHgwMDA1LCAweDAwMzAsIDB4OTE4NiwgMHgwMDAzLCAweDExMTgsIDB4NzgzYiwgMHgwMDA0LCAweDAwMDAsCi0JMHgwMDA2LCAweDFkMDQsIDB4MmEzMSwgMHgwODBjLCAweDgzMGQsIDB4MWYwNCwgMHgyYTMxLCAweDIwMDEsCi0JMHgwMTAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDBhLCAweDAxNjAsIDB4Nzg1MCwgMHg5MDg1LCAweDA0MDAsCi0JMHg5MDg0LCAweGRmYmYsIDB4Nzg1MiwgMHgwODBjLCAweDJhOTcsIDB4OTA4NSwgMHgxMDAwLCAweDc4NTIsCi0JMHgwMDIwLCAweDc4NTAsIDB4OTA4NSwgMHgxMDAwLCAweDc4NTIsIDB4MDAwZSwgMHgwMDFlLCAweDAxMmUsCi0JMHgwMDA1LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwYSwgMHgwMTI4LCAweDc4NTAsCi0JMHg5MDg0LCAweGZmY2YsIDB4Nzg1MiwgMHgwMDEwLCAweDA4MGMsIDB4MmJkYywgMHgwMDA1LCAweDAwMDYsCi0JMHgwMTU2LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDIwYTksIDB4MDAwYSwgMHg3ODU0LCAweGQwYWMsCi0JMHgxMTMwLCAweDc4MjAsIDB4ZDBlNCwgMHgxMTQwLCAweDFmMDQsIDB4MmE2OSwgMHgwMDI4LCAweDc4NTQsCi0JMHhkMDhjLCAweDExMTAsIDB4MWYwNCwgMHgyYTZmLCAweDAwZmUsIDB4MDE1ZSwgMHgwMDBlLCAweDAwMDUsCi0JMHgxZDA0LCAweDJhNzgsIDB4MDgwYywgMHg4MzBkLCAweDFmMDQsIDB4MmE3OCwgMHgwMDA1LCAweDAwMDYsCi0JMHgyMDAxLCAweDE5NzYsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgyMDAxLCAweDE5NzYsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDEsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgyMDAxLCAweDE5NzYsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDIsIDB4MDAwZSwgMHgwMDA1LCAweGEwMDEsCi0JMHhhMDAxLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDE5ODMsCi0JMHgyMTAyLCAweDAwMGUsIDB4MDAwNSwgMHgyMDA5LCAweDAxNzEsIDB4MjEwNCwgMHhkMGRjLCAweDAxNDAsCi0JMHgyMDA5LCAweDAxNzAsIDB4MjEwNCwgMHgyMDBiLCAweDAwODAsIDB4YTAwMSwgMHhhMDAxLCAweDIwMGEsCi0JMHgwMDA1LCAweDAwMzYsIDB4MDA0NiwgMHgyMDAxLCAweDAxNDEsIDB4MjAwYywgMHg5MThjLCAweGZmMDAsCi0JMHg5MTg2LCAweDIxMDAsIDB4MDE0MCwgMHg5MTg2LCAweDIwMDAsIDB4MDE3MCwgMHg5MTg2LCAweDAxMDAsCi0JMHgxOTA0LCAweDJiMTAsIDB4MDA0OCwgMHgwMDE2LCAweDIwMDksIDB4MWE1OCwgMHgyMTA0LCAweDgwMDAsCi0JMHgwMjA4LCAweDIwMGEsIDB4MDAxZSwgMHgwNGYwLCAweDIwMDksIDB4MDBhMiwgMHgwODBjLCAweDBlN2IsCi0JMHgyMDE5LCAweDAxNjAsIDB4MjMyNCwgMHgyMDExLCAweDAwMDMsIDB4MjAwOSwgMHgwMTY5LCAweDIxMDQsCi0JMHg5MDg0LCAweDAwMDcsIDB4MjEwYywgMHg5MThjLCAweDAwMDcsIDB4OTEwZSwgMHgxZGIwLCAweDkwODYsCi0JMHgwMDAzLCAweDE1NDgsIDB4MjMwNCwgMHgwMDY2LCAweDAwNzYsIDB4MjAzMSwgMHgwMDAyLCAweDIzM2MsCi0JMHg5NzNlLCAweDAxNDgsIDB4ODYzMSwgMHgxZGQ4LCAweDIwMzEsIDB4MWE1OSwgMHgyNjNjLCAweDg3MzgsCi0JMHgwMjA4LCAweDI3MzIsIDB4MjMwNCwgMHgwMDdlLCAweDAwNmUsIDB4OTQwMiwgMHgwMmEwLCAweDE5ZDAsCi0JMHg4MjExLCAweDE5ZDgsIDB4ODRmZiwgMHgwMTcwLCAweDIwMDEsIDB4MDE0MSwgMHgyMDBjLCAweDkxOGMsCi0JMHhmZjAwLCAweDkxODYsIDB4MDEwMCwgMHgwMTMwLCAweDIwMDksIDB4MTgwYywgMHgyMTA0LCAweGMwZGQsCi0JMHgyMDBhLCAweDAwMDgsIDB4MDQyMSwgMHgyMDAxLCAweDE5NWIsIDB4MjAwYywgMHgwODBjLCAweDBlN2IsCi0JMHgwMDRlLCAweDAwM2UsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwNCwgMHhkMGRjLCAweDAxYjAsCi0JMHgyMDAxLCAweDAxNjAsIDB4MjAwNCwgMHg5MDA1LCAweDAxNDAsIDB4MjAwMSwgMHgwMTQxLCAweDIwMDQsCi0JMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHgwMTAwLCAweDExNDgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDAyMSwgMHgwMDJlLCAweDAwMWUsIDB4MDEyZSwgMHgwMDA1LCAweDAwYzYsCi0JMHgyMDYxLCAweDAxMDAsIDB4NjAxNCwgMHgwMDA2LCAweDIwMDEsIDB4MDE2MSwgMHgyMDAzLCAweDAwMDAsCi0JMHg2MDE3LCAweDAwMTgsIDB4YTAwMSwgMHhhMDAxLCAweDYwMmYsIDB4MDAwOCwgMHg2MTA0LCAweDkxOGUsCi0JMHgwMDEwLCAweDYxMDYsIDB4OTE4ZSwgMHgwMDEwLCAweDYxMDYsIDB4NjAxNywgMHgwMDQwLCAweDA0YjksCi0JMHgwMDFlLCAweDkxODQsIDB4MDAwMywgMHgwMWUwLCAweDAwMzYsIDB4MDAxNiwgMHgyMDE5LCAweDAxNDEsCi0JMHg2MTI0LCAweDkxOGMsIDB4MDAyOCwgMHgxMTIwLCAweDIzMDQsIDB4OTA4NCwgMHgyODAwLCAweDBkYzAsCi0JMHgwMDFlLCAweDkxOWMsIDB4ZmZlNCwgMHg5MTg0LCAweDAwMDEsIDB4MDExOCwgMHg5Mzg1LCAweDAwMDksCi0JMHg2MDE2LCAweDkxODQsIDB4MDAwMiwgMHgwMTE4LCAweDkzODUsIDB4MDAxMiwgMHg2MDE2LCAweDAwM2UsCi0JMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMWRjLCAweDIxMDIsIDB4MDBjZSwgMHgwMDA1LCAweDAwMTYsCi0JMHgwMDI2LCAweDA4MGMsIDB4NzE5OCwgMHgwMTA4LCAweGMwYmMsIDB4MjAwOSwgMHgwMTQwLCAweDIxMTQsCi0JMHg5Mjk0LCAweDAwMDEsIDB4OTIxNSwgMHgyMjBhLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsCi0JMHgwMDI2LCAweDIwMDksIDB4MDE0MCwgMHgyMTE0LCAweDkyOTQsIDB4MDAwMSwgMHg5Mjg1LCAweDEwMDAsCi0JMHgyMDBhLCAweDIyMGEsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDksCi0JMHgwMTQwLCAweDIxMTQsIDB4OTI5NCwgMHgwMDAxLCAweDkyMTUsIDB4MjIwYSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgyMDA5LCAweDAxNDAsIDB4MjEwNCwgMHgxMTI4LCAweDA4MGMsCi0JMHg3MTk4LCAweDAxMTAsIDB4YzBiYywgMHgwMDA4LCAweGMwYmQsIDB4MjAwYSwgMHgwMDFlLCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYwNTAsCi0JMHg5MDg0LCAweGZiZmYsIDB4OTA4NSwgMHgwMDQwLCAweDYwNTIsIDB4MjBhOSwgMHgwMDAyLCAweDA4MGMsCi0JMHgyYTc4LCAweDYwNTAsIDB4OTA4NSwgMHgwNDAwLCAweDkwODQsIDB4ZmY5ZiwgMHg2MDUyLCAweDIwYTksCi0JMHgwMDA1LCAweDA4MGMsIDB4MmE3OCwgMHg2MDU0LCAweGQwYmMsIDB4MDkwYywgMHgwZGY2LCAweDIwYTksCi0JMHgwMDA1LCAweDA4MGMsIDB4MmE3OCwgMHg2MDU0LCAweGQwYWMsIDB4MDkwYywgMHgwZGY2LCAweDIwMDksCi0JMHgxOThhLCAweDkwODQsIDB4N2UwMCwgMHg4MDA3LCAweDgwMDQsIDB4ODAwNCwgMHgyMDBhLCAweDAwY2UsCi0JMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMDYsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsCi0JMHg2MDUwLCAweGMwY2QsIDB4NjA1MiwgMHgwMGNlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAxNTYsCi0JMHg2MDUwLCAweDkwODUsIDB4MDA0MCwgMHg2MDUyLCAweDYwNTAsIDB4OTA4NCwgMHhmYmNmLCAweDYwNTIsCi0JMHgwODBjLCAweDJhOTcsIDB4OTA4NSwgMHgyMDAwLCAweDYwNTIsIDB4MjBhOSwgMHgwMDEyLCAweDFkMDQsCi0JMHgyYmY3LCAweDA4MGMsIDB4ODMwZCwgMHgxZjA0LCAweDJiZjcsIDB4NjA1MCwgMHg5MDg1LCAweDA0MDAsCi0JMHg5MDg0LCAweGRmYmYsIDB4NjA1MiwgMHgwMTVlLCAweDAwMGUsIDB4MDAwNSwgMHgyZTcyLCAweDJlNzIsCi0JMHgyYzk2LCAweDJjOTYsIDB4MmNhMiwgMHgyY2EyLCAweDJjYWUsIDB4MmNhZSwgMHgyY2JjLCAweDJjYmMsCi0JMHgyY2M4LCAweDJjYzgsIDB4MmNkNiwgMHgyY2Q2LCAweDJjZTQsIDB4MmNlNCwgMHgyY2Y2LCAweDJjZjYsCi0JMHgyZDAyLCAweDJkMDIsIDB4MmQxMCwgMHgyZDEwLCAweDJkMmUsIDB4MmQyZSwgMHgyZDRlLCAweDJkNGUsCi0JMHgyZDFlLCAweDJkMWUsIDB4MmQzZSwgMHgyZDNlLCAweDJkNWMsIDB4MmQ1YywgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyZDZlLCAweDJkNmUsCi0JMHgyZDdhLCAweDJkN2EsIDB4MmQ4OCwgMHgyZDg4LCAweDJkOTYsIDB4MmQ5NiwgMHgyZGE2LCAweDJkYTYsCi0JMHgyZGI0LCAweDJkYjQsIDB4MmRjNCwgMHgyZGM0LCAweDJkZDQsIDB4MmRkNCwgMHgyZGU2LCAweDJkZTYsCi0JMHgyZGY0LCAweDJkZjQsIDB4MmUwNCwgMHgyZTA0LCAweDJlMjYsIDB4MmUyNiwgMHgyZTQ4LCAweDJlNDgsCi0JMHgyZTE0LCAweDJlMTQsIDB4MmUzNywgMHgyZTM3LCAweDJlNTcsIDB4MmU1NywgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsCi0JMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgyY2Y0LCAweDJjZjQsIDB4MmNmNCwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIyYmMsCi0JMHgwODA0LCAweDJlNmEsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMGMzLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIwYzMsCi0JMHgwODBjLCAweDIyYmMsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjBmZSwgMHgwODA0LCAweDJlNmEsCi0JMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsCi0JMHgwODBjLCAweDIyYmMsIDB4MDgwYywgMHgyMGZlLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIwYzMsCi0JMHgwODBjLCAweDIwZmUsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjBjMywgMHgwODBjLCAweDIyYmMsCi0JMHgwODBjLCAweDIwZmUsIDB4MDgwNCwgMHgyZTZhLCAweGEwMDEsIDB4MGNmMCwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDEzNjUsCi0JMHgwODA0LCAweDJlNmEsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyMmJjLCAweDA4MGMsIDB4MTM2NSwgMHgwODA0LCAweDJlNmEsCi0JMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsCi0JMHgwODBjLCAweDIwYzMsIDB4MDgwYywgMHgxMzY1LCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIyYmMsCi0JMHgwODBjLCAweDEzNjUsIDB4MDgwYywgMHgyMGZlLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIwYzMsCi0JMHgwODBjLCAweDIyYmMsIDB4MDgwYywgMHgxMzY1LCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDIwYzMsCi0JMHgwODBjLCAweDEzNjUsIDB4MDgwYywgMHgyMGZlLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDEzNjUsCi0JMHgwODBjLCAweDIwZmUsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4MjBjMywgMHgwODBjLCAweDIyYmMsCi0JMHgwODBjLCAweDEzNjUsIDB4MDgwYywgMHgyMGZlLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3NzAsCi0JMHgwODA0LCAweDJlNmEsIDB4MDEwNiwgMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxNTYsIDB4MDgwYywgMHgyNzcwLCAweDA4MGMsIDB4MjJiYywgMHgwODA0LCAweDJlNmEsCi0JMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsCi0JMHgwODBjLCAweDI3NzAsIDB4MDgwYywgMHgyMGMzLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3NzAsCi0JMHgwODBjLCAweDIwYzMsIDB4MDgwYywgMHgyMmJjLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3NzAsCi0JMHgwODBjLCAweDIwZmUsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc3MCwgMHgwODBjLCAweDIyYmMsCi0JMHgwODBjLCAweDIwZmUsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc3MCwgMHgwODBjLCAweDIwYzMsCi0JMHgwODBjLCAweDIwZmUsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc3MCwgMHgwODBjLCAweDIwYzMsCi0JMHgwODBjLCAweDIyYmMsIDB4MDgwYywgMHgyMGZlLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3NzAsCi0JMHgwODBjLCAweDEzNjUsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc3MCwgMHgwODBjLCAweDIyYmMsCi0JMHgwODBjLCAweDEzNjUsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc3MCwgMHgwODBjLCAweDIwYzMsCi0JMHgwODBjLCAweDEzNjUsIDB4MDgwNCwgMHgyZTZhLCAweDAxMDYsIDB4MDAwNiwgMHgwMTI2LCAweDAxYzYsCi0JMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsIDB4Mjc3MCwgMHgwODBjLCAweDIyYmMsCi0JMHgwODBjLCAweDEzNjUsIDB4MDgwYywgMHgyMGZlLCAweDA4MDQsIDB4MmU2YSwgMHgwMTA2LCAweDAwMDYsCi0JMHgwMTI2LCAweDAxYzYsIDB4MDFkNiwgMHgwMTM2LCAweDAxNDYsIDB4MDE1NiwgMHgwODBjLCAweDI3NzAsCi0JMHgwODBjLCAweDIwYzMsIDB4MDgwYywgMHgyMmJjLCAweDA4MGMsIDB4MTM2NSwgMHgwNDk4LCAweDAxMDYsCi0JMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsCi0JMHgyNzcwLCAweDA4MGMsIDB4MjBjMywgMHgwODBjLCAweDEzNjUsIDB4MDgwYywgMHgyMGZlLCAweDA0MTAsCi0JMHgwMTA2LCAweDAwMDYsIDB4MDEyNiwgMHgwMWM2LCAweDAxZDYsIDB4MDEzNiwgMHgwMTQ2LCAweDAxNTYsCi0JMHgwODBjLCAweDI3NzAsIDB4MDgwYywgMHgxMzY1LCAweDA4MGMsIDB4MjBmZSwgMHgwMDk4LCAweDAxMDYsCi0JMHgwMDA2LCAweDAxMjYsIDB4MDFjNiwgMHgwMWQ2LCAweDAxMzYsIDB4MDE0NiwgMHgwMTU2LCAweDA4MGMsCi0JMHgyNzcwLCAweDA4MGMsIDB4MjBjMywgMHgwODBjLCAweDIyYmMsIDB4MDgwYywgMHgxMzY1LCAweDA4MGMsCi0JMHgyMGZlLCAweDAwMDAsIDB4MDE1ZSwgMHgwMTRlLCAweDAxM2UsIDB4MDFkZSwgMHgwMWNlLCAweDAxMmUsCi0JMHgwMDBlLCAweDAxMGUsIDB4MDAwZCwgMHgwMGI2LCAweDAwYzYsIDB4MDAyNiwgMHgwMDQ2LCAweDkwMjYsCi0JMHgwODBjLCAweDY2ODcsIDB4MTkwNCwgMHgyZjdjLCAweDcyZDgsIDB4MjAwMSwgMHgxOTU2LCAweDIwMDQsCi0JMHg5MDA1LCAweDExMTAsIDB4ZDI5YywgMHgwMTQ4LCAweGQyODQsIDB4MTEzOCwgMHhkMmJjLCAweDE5MDQsCi0JMHgyZjdjLCAweDA4MGMsIDB4MmY4MSwgMHgwODA0LCAweDJmN2MsIDB4ZDJjYywgMHgxOTA0LCAweDJmN2MsCi0JMHgwODBjLCAweDcxN2UsIDB4MTEyMCwgMHg3MGFiLCAweGZmZmYsIDB4MDgwNCwgMHgyZjdjLCAweGQyOTQsCi0JMHgwMTIwLCAweDcwYWIsIDB4ZmZmZiwgMHgwODA0LCAweDJmN2MsIDB4MDgwYywgMHgzMWU5LCAweDAxNjAsCi0JMHgwODBjLCAweGM0NTksIDB4MDEyOCwgMHgyMDAxLCAweDE4MTcsIDB4MjAzYywgMHgwODA0LCAweDJmMGIsCi0JMHg3MGFiLCAweGZmZmYsIDB4MDgwNCwgMHgyZjdjLCAweDIwMDEsIDB4MTgxNywgMHgyMDNjLCAweDcyOTAsCi0JMHhkMjg0LCAweDA5MDQsIDB4MmYwYiwgMHhkMjhjLCAweDE5MDQsIDB4MmYwYiwgMHgwMDM2LCAweDczYTgsCi0JMHg5MzhlLCAweGZmZmYsIDB4MTExMCwgMHgyMDE5LCAweDAwMDEsIDB4ODMxNCwgMHg5MmUwLCAweDFjODAsCi0JMHgyYzA0LCAweDkzOGMsIDB4MDAwMSwgMHgwMTIwLCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDAwMTAsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTcwZSwgMHgwNWE4LCAweDkwOGUsIDB4MDAwMCwgMHgwNTkwLCAweDkwOGUsCi0JMHgwMGZmLCAweDExNTAsIDB4NzIzMCwgMHhkMjg0LCAweDE1ODgsIDB4NzI5MCwgMHhjMjhkLCAweDcyOTIsCi0JMHg3MGFiLCAweGZmZmYsIDB4MDAzZSwgMHgwNDc4LCAweDAwMjYsIDB4MjAxMSwgMHgwMDEwLCAweDA4MGMsCi0JMHg2NmVkLCAweDAwMmUsIDB4MDExOCwgMHg3MGFiLCAweGZmZmYsIDB4MDQxMCwgMHg5MDBlLCAweDA4MGMsCi0JMHgyNjZkLCAweDA4MGMsIDB4NjM0MywgMHgxMWMwLCAweDA4MGMsIDB4NjZjOSwgMHgxMTY4LCAweDcwMzAsCi0JMHhkMDhjLCAweDAxMzAsIDB4YjgwMCwgMHhkMGJjLCAweDAxMzgsIDB4MDgwYywgMHg2NWMzLCAweDAxMjAsCi0JMHgwODBjLCAweDJmOWEsIDB4MDE0OCwgMHgwMDI4LCAweDA4MGMsIDB4MzBkYSwgMHgwODBjLCAweDJmYzYsCi0JMHgwMTE4LCAweDgzMTgsIDB4MDgwNCwgMHgyZWJkLCAweDczYWEsIDB4MDAxMCwgMHg3MGFiLCAweGZmZmYsCi0JMHgwMDNlLCAweDA4MDQsIDB4MmY3YywgMHg5NzgwLCAweDMxZjMsIDB4MjAzZCwgMHg5N2JjLCAweGZmMDAsCi0JMHg4NzNmLCAweDIwNDEsIDB4MDA3ZSwgMHg3MGE4LCAweDkwOTYsIDB4ZmZmZiwgMHgxMTE4LCAweDkwMGUsCi0JMHgyOGE4LCAweDAwNTAsIDB4OTgxMiwgMHgwMjIwLCAweDIwMDgsIDB4OTgwMiwgMHgyMGE4LCAweDAwMjAsCi0JMHg3MGFiLCAweGZmZmYsIDB4MDgwNCwgMHgyZjdjLCAweDI3MDAsIDB4MDE1NiwgMHgwMDE2LCAweDkxMDYsCi0JMHgwOTA0LCAweDJmNzEsIDB4MDAyNiwgMHgyMDExLCAweDAwMTAsIDB4MDgwYywgMHg2NmVkLCAweDAwMmUsCi0JMHgwMTIwLCAweDIwMDksIDB4ZmZmZiwgMHgwODA0LCAweDJmNzksIDB4YzQ4NCwgMHgwODBjLCAweDYzYTMsCi0JMHgwMTUwLCAweDA4MGMsIDB4YzQ1OSwgMHgxNWE4LCAweDA4MGMsIDB4MzFlOSwgMHgxNTkwLCAweDA4MGMsCi0JMHg2MzQzLCAweDE1YjgsIDB4MDAwOCwgMHhjNDg1LCAweDA4MGMsIDB4NjZjOSwgMHgxMTMwLCAweDcwMzAsCi0JMHhkMDhjLCAweDAxZjgsIDB4YjgwMCwgMHhkMGJjLCAweDExZTAsIDB4NzI5MCwgMHhkMjhjLCAweDAxODAsCi0JMHgwODBjLCAweDY2YzksIDB4OTA4MiwgMHgwMDA2LCAweDAyZTAsIDB4ZDQ4NCwgMHgxMTE4LCAweDA4MGMsCi0JMHg2MzY3LCAweDAwMjgsIDB4MDgwYywgMHgzMTY1LCAweDAxYTAsIDB4MDgwYywgMHgzMTkwLCAweDAwODgsCi0JMHgwODBjLCAweDMwZGEsIDB4MDgwYywgMHhjNDU5LCAweDExNjAsIDB4MDgwYywgMHgyZmM2LCAweDAxODgsCi0JMHgwMDQwLCAweDA4MGMsIDB4YzQ1OSwgMHgxMTE4LCAweDA4MGMsIDB4MzE2NSwgMHgwMTEwLCAweDA0NTEsCi0JMHgwMTQwLCAweDAwMWUsIDB4ODEwOCwgMHgwMTVlLCAweDFmMDQsIDB4MmYyNCwgMHg3MGFiLCAweGZmZmYsCi0JMHgwMDE4LCAweDAwMWUsIDB4MDE1ZSwgMHg3MWFhLCAweDAwNGUsIDB4MDAyZSwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMDA1LCAweDAwYzYsIDB4MDAxNiwgMHg3MGFiLCAweDAwMDEsIDB4MjAwOSwgMHgwMDdlLCAweDA4MGMsCi0JMHg2MzQzLCAweDExNjgsIDB4YjgxMywgMHgwMGZmLCAweGI4MTcsIDB4ZmZmZSwgMHgwODBjLCAweDMwZGEsCi0JMHgwNGE5LCAweDAxMjgsIDB4NzBkOCwgMHhjMGJkLCAweDcwZGEsIDB4MDgwYywgMHhjMWExLCAweDAwMWUsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDc2LCAweDAwZDYsIDB4MDBjNiwgMHgyMDAxLCAweDE4NjAsCi0JMHgyMDA0LCAweDkwODQsIDB4MDBmZiwgMHhiODQyLCAweDA4MGMsIDB4YTAzYiwgMHgwMWQwLCAweDJiMDAsCi0JMHg2MDEyLCAweDA4MGMsIDB4YzFjYSwgMHg2MDIzLCAweDAwMDEsIDB4OTAwNiwgMHgwODBjLCAweDYyZTAsCi0JMHgyMDAxLCAweDAwMDAsIDB4MDgwYywgMHg2MmY0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwYTQsCi0JMHg4MDAwLCAweDcwYTYsIDB4MDEyZSwgMHgyMDA5LCAweDAwMDQsIDB4MDgwYywgMHhhMDY4LCAweDkwODUsCi0JMHgwMDAxLCAweDAwY2UsIDB4MDBkZSwgMHgwMDdlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwNzYsCi0JMHgwMGQ2LCAweDAwYzYsIDB4MjAwMSwgMHgxODYwLCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweGI4NDIsCi0JMHgwODBjLCAweGEwM2IsIDB4MDU0OCwgMHgyYjAwLCAweDYwMTIsIDB4YjgwMCwgMHhjMGM0LCAweGI4MDIsCi0JMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgwMTQwLCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDA2LCAweDExMTAsIDB4MDgwYywgMHgzMDk1LCAweDA4MGMsIDB4YzFjYSwgMHg2MDIzLCAweDAwMDEsCi0JMHg5MDA2LCAweDA4MGMsIDB4NjJlMCwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2MmY0LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4NzBhNCwgMHg4MDAwLCAweDcwYTYsIDB4MDEyZSwgMHgyMDA5LCAweDAwMDIsCi0JMHgwODBjLCAweGEwNjgsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsIDB4MDBkZSwgMHgwMDdlLCAweDAwMWUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHgwMDI2LCAweDIwMDksIDB4MDA4MCwgMHgwODBjLCAweDYzNDMsCi0JMHgxMTQwLCAweGI4MTMsIDB4MDBmZiwgMHhiODE3LCAweGZmZmMsIDB4MDAzOSwgMHgwMTEwLCAweDcwZGYsCi0JMHhmZmZmLCAweDAwMmUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDc2LCAweDAwZDYsCi0JMHgwMGM2LCAweDA4MGMsIDB4OWY5NCwgMHgwMWQwLCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLCAweGMxY2EsCi0JMHg2MDIzLCAweDAwMDEsIDB4OTAwNiwgMHgwODBjLCAweDYyZTAsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCi0JMHg2MmY0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwZTAsIDB4ODAwMCwgMHg3MGUyLCAweDAxMmUsCi0JMHgyMDA5LCAweDAwMDIsIDB4MDgwYywgMHhhMDY4LCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAwZGUsCi0JMHgwMDdlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgyMDA5LCAweDAwN2YsIDB4MDgwYywgMHg2MzQzLCAweDExYjgsIDB4YjgxMywgMHgwMGZmLCAweGI4MTcsCi0JMHhmZmZkLCAweGI4YmYsIDB4MDAwNCwgMHgwODBjLCAweDlmOTQsIDB4MDE3MCwgMHgyYjAwLCAweDYwMTIsCi0JMHg2MzE2LCAweDYwMjMsIDB4MDAwMSwgMHg2MjBhLCAweDA4MGMsIDB4YzFjYSwgMHgyMDA5LCAweDAwMjIsCi0JMHgwODBjLCAweGEwNjgsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBkZSwgMHgwMGNlLCAweDAwMDUsCi0JMHgwMGU2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDM2LCAweDAwMjYsIDB4MDBiNiwgMHgyMWYwLCAweDA4MGMsCi0JMHg4NzhkLCAweDA4MGMsIDB4ODcxNywgMHgwODBjLCAweDllM2QsIDB4MDgwYywgMHhhZjgxLCAweDNlMDgsCi0JMHgyMTMwLCAweDgxZmYsIDB4MDEyMCwgMHgyMGE5LCAweDAwN2UsIDB4OTAwZSwgMHgwMDE4LCAweDIwYTksCi0JMHgwMDdmLCAweDkwMGUsIDB4MDAxNiwgMHgwODBjLCAweDYzYTMsIDB4MTE0MCwgMHg5Njg2LCAweDAwMDIsCi0JMHgxMTE4LCAweGI4MDAsIDB4ZDBiYywgMHgxMTEwLCAweDA4MGMsIDB4NWU0OSwgMHgwMDFlLCAweDgxMDgsCi0JMHgxZjA0LCAweDMwN2EsIDB4OTY4NiwgMHgwMDAxLCAweDE5MGMsIDB4MzFiZCwgMHgwMGJlLCAweDAwMmUsCi0JMHgwMDNlLCAweDAwNmUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGM2LCAweDAwNDYsCi0JMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMGI2LCAweDYyMTAsIDB4MjI1OCwgMHhiYWEwLCAweDAwMjYsCi0JMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg4NzgyLCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsCi0JMHg4NjcwLCAweDJjMDgsIDB4MDgwYywgMHhkNTU2LCAweDAwN2UsIDB4MDAxZSwgMHhiYTEwLCAweGJiMTQsCi0JMHhiY2IwLCAweDA4MGMsIDB4NWU0OSwgMHhiYTEyLCAweGJiMTYsIDB4YmNiMiwgMHgwMGJlLCAweDAwMWUsCi0JMHgwMDJlLCAweDAwM2UsIDB4MDA0ZSwgMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwMDYsCi0JMHgwMGI2LCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDAwYmUsIDB4OTA4NiwgMHgwMDgwLCAweDAxNTAsCi0JMHgyMDcxLCAweDE4MDAsIDB4NzBhNCwgMHg5MDA1LCAweDAxMTAsIDB4ODAwMSwgMHg3MGE2LCAweDAwMGUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLCAweDcwZTAsIDB4OTAwNSwgMHgwZGMwLCAweDgwMDEsCi0JMHg3MGUyLCAweDBjYTgsIDB4YjgwMCwgMHhjMDhjLCAweGI4MDIsIDB4MDAwNSwgMHgwMGY2LCAweDAwZTYsCi0JMHgwMGM2LCAweDAwYjYsIDB4MDA0NiwgMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHgwMTU2LCAweDIxNzgsCi0JMHg4MWZmLCAweDExMTgsIDB4MjBhOSwgMHgwMDAxLCAweDAwNzAsIDB4MDgwYywgMHg1NGRiLCAweGQwYzQsCi0JMHgwMTM4LCAweDAwMzAsIDB4OTAwNiwgMHgyMDIwLCAweDIwMDksIDB4MDAyZCwgMHgwODBjLCAweGQ4MzcsCi0JMHgyMGE5LCAweDA4MDAsIDB4OTAxNiwgMHgwMDI2LCAweDkyOGUsIDB4MDA3ZSwgMHgwOTA0LCAweDMxNDQsCi0JMHg5MjhlLCAweDAwN2YsIDB4MDkwNCwgMHgzMTQ0LCAweDkyOGUsIDB4MDA4MCwgMHgwNWU4LCAweDkyODgsCi0JMHgxMDAwLCAweDIxMGMsIDB4ODFmZiwgMHgwNWMwLCAweDhmZmYsIDB4MTE0OCwgMHgyMDAxLCAweDE5NjgsCi0JMHgwMDA2LCAweDIwMDMsIDB4MDAwMSwgMHgwNGYxLCAweDAwMGUsIDB4MjAwMywgMHgwMDAwLCAweDAwYjYsCi0JMHgwMGM2LCAweDIxNTgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NjY5MywgMHgwMGNlLCAweDAwYmUsCi0JMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg4NzgyLCAweDAwNzYsIDB4MjAzOSwgMHgwMDAwLCAweDA4MGMsCi0JMHg4NjcwLCAweDAwYjYsIDB4MDBjNiwgMHgwMDI2LCAweDIxNTgsIDB4YmEwNCwgMHg5Mjk0LCAweDAwZmYsCi0JMHg5Mjg2LCAweDAwMDYsIDB4MTExOCwgMHhiODA3LCAweDA0MDQsIDB4MDAyOCwgMHgyMDAxLCAweDAwMDQsCi0JMHg4MDA3LCAweDkyMTUsIDB4YmEwNiwgMHgwMDJlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDE2LCAweDJjMDgsCi0JMHgwODBjLCAweGQ1NTYsIDB4MDAxZSwgMHgwMDdlLCAweDAwMmUsIDB4ODIxMCwgMHgxZjA0LCAweDMwZmIsCi0JMHgwMTVlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLCAweDAwNGUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMGZlLCAweDAwMDUsIDB4MDA0NiwgMHgwMDI2LCAweDAwMTYsIDB4MDgwYywgMHg1NGRiLCAweGQwYzQsCi0JMHgwMTQwLCAweGQwYTQsIDB4MDEzMCwgMHg5MDA2LCAweDIyMjAsIDB4MjAwOSwgMHgwMDI5LCAweDA4MGMsCi0JMHhkODM3LCAweDAwMWUsIDB4MDAyZSwgMHgwMDRlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMGM2LCAweDcyOTAsIDB4ODJmZiwgMHgwMWU4LCAweDA4MGMsIDB4NjZjMSwgMHgxMWQwLCAweDIxMDAsCi0JMHgwODBjLCAweDI2YTAsIDB4ODFmZiwgMHgwMWI4LCAweDIwMTksIDB4MDAwMSwgMHg4MzE0LCAweDkyZTAsCi0JMHgxYzgwLCAweDJjMDQsIDB4ZDM4NCwgMHgwMTIwLCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDAwMTAsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTExNiwgMHgwMTM4LCAweDkwOTYsIDB4MDBmZiwgMHgwMTEwLCAweDgzMTgsCi0JMHgwYzY4LCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMjksCi0JMHgwMGE5LCAweDAwM2UsIDB4OTE4MCwgMHgxMDAwLCAweDIwMDQsIDB4OTA2NSwgMHgwMTU4LCAweDAwMTYsCi0JMHgwMGM2LCAweDIwNjEsIDB4MWE4OCwgMHgwMDFlLCAweDYxMTIsIDB4MDgwYywgMHgzMDk1LCAweDAwMWUsCi0JMHgwODBjLCAweDYzNjcsIDB4MDEyZSwgMHgwMGNlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsCi0JMHgyMTEwLCAweDA4MGMsIDB4OWFkMCwgMHgwODBjLCAweGRhZjAsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgyMDAxLCAweDE4MzYsIDB4MjAwNCwgMHhkMGNjLCAweDAwMDUsIDB4MDBjNiwgMHgwMGI2LCAweDA4MGMsCi0JMHg3MTdlLCAweDExMTgsIDB4MjBhOSwgMHgwODAwLCAweDAwMTAsIDB4MjBhOSwgMHgwNzgyLCAweDA4MGMsCi0JMHg3MTdlLCAweDExMTAsIDB4OTAwZSwgMHgwMDEwLCAweDIwMDksIDB4MDA3ZSwgMHg5MTgwLCAweDEwMDAsCi0JMHgyMDA0LCAweDkwNWQsIDB4MDEzMCwgMHg4NmZmLCAweDAxMTAsIDB4YjgwMCwgMHhkMGJjLCAweDA5MGMsCi0JMHg2MzY3LCAweDgxMDgsIDB4MWYwNCwgMHgzMWNlLCAweDIwNjEsIDB4MTgwMCwgMHg2MDdiLCAweDAwMDAsCi0JMHg2MDdjLCAweDkwODQsIDB4MDBmZiwgMHg2MDdlLCAweDYwYWYsIDB4MDAwMCwgMHgwMGJlLCAweDAwY2UsCi0JMHgwMDA1LCAweDIwMDEsIDB4MTg3ZCwgMHgyMDA0LCAweGQwYmMsIDB4MDAwNSwgMHgyMDExLCAweDE4NWMsCi0JMHgyMjE0LCAweGQyZWMsIDB4MDAwNSwgMHg3ZWVmLCAweDdkZTgsIDB4N2NlNCwgMHg4MGUyLCAweDdiZTEsCi0JMHg4MGUwLCAweDgwZGMsIDB4ODBkYSwgMHg3YWQ5LCAweDgwZDYsIDB4ODBkNSwgMHg4MGQ0LCAweDgwZDMsCi0JMHg4MGQyLCAweDgwZDEsIDB4NzljZSwgMHg3OGNkLCAweDgwY2MsIDB4ODBjYiwgMHg4MGNhLCAweDgwYzksCi0JMHg4MGM3LCAweDgwYzYsIDB4NzdjNSwgMHg3NmMzLCAweDgwYmMsIDB4ODBiYSwgMHg3NWI5LCAweDgwYjYsCi0JMHg3NGI1LCAweDczYjQsIDB4NzJiMywgMHg4MGIyLCAweDgwYjEsIDB4ODBhZSwgMHg3MWFkLCAweDgwYWMsCi0JMHg3MGFiLCAweDZmYWEsIDB4NmVhOSwgMHg4MGE3LCAweDZkYTYsIDB4NmNhNSwgMHg2YmEzLCAweDZhOWYsCi0JMHg2OTllLCAweDY4OWQsIDB4ODA5YiwgMHg4MDk4LCAweDY3OTcsIDB4NjY5MCwgMHg2NThmLCAweDY0ODgsCi0JMHg2Mzg0LCAweDYyODIsIDB4ODA4MSwgMHg4MDgwLCAweDYxN2MsIDB4NjA3YSwgMHg4MDc5LCAweDVmNzYsCi0JMHg4MDc1LCAweDgwNzQsIDB4ODA3MywgMHg4MDcyLCAweDgwNzEsIDB4ODA2ZSwgMHg1ZTZkLCAweDgwNmMsCi0JMHg1ZDZiLCAweDVjNmEsIDB4NWI2OSwgMHg4MDY3LCAweDVhNjYsIDB4NTk2NSwgMHg1ODYzLCAweDU3NWMsCi0JMHg1NjVhLCAweDU1NTksIDB4ODA1NiwgMHg4MDU1LCAweDU0NTQsIDB4NTM1MywgMHg1MjUyLCAweDUxNTEsCi0JMHg1MDRlLCAweDRmNGQsIDB4ODA0YywgMHg4MDRiLCAweDRlNGEsIDB4NGQ0OSwgMHg4MDQ3LCAweDRjNDYsCi0JMHg4MDQ1LCAweDgwNDMsIDB4ODAzYywgMHg4MDNhLCAweDgwMzksIDB4ODAzNiwgMHg0YjM1LCAweDgwMzQsCi0JMHg0YTMzLCAweDQ5MzIsIDB4NDgzMSwgMHg4MDJlLCAweDQ3MmQsIDB4NDYyYywgMHg0NTJiLCAweDQ0MmEsCi0JMHg0MzI5LCAweDQyMjcsIDB4ODAyNiwgMHg4MDI1LCAweDQxMjMsIDB4NDAxZiwgMHgzZjFlLCAweDNlMWQsCi0JMHgzZDFiLCAweDNjMTgsIDB4ODAxNywgMHg4MDEwLCAweDNiMGYsIDB4M2EwOCwgMHg4MDA0LCAweDM5MDIsCi0JMHg4MDAxLCAweDgwMDAsIDB4ODAwMCwgMHgzODAwLCAweDM3MDAsIDB4MzYwMCwgMHg4MDAwLCAweDM1MDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgzNDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4MzMwMCwgMHgzMjAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4MzEwMCwgMHgzMDAwLCAweDgwMDAsIDB4ODAwMCwgMHgyZjAwLCAweDgwMDAsCi0JMHgyZTAwLCAweDJkMDAsIDB4MmMwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgyYjAwLCAweDgwMDAsCi0JMHgyYTAwLCAweDI5MDAsIDB4MjgwMCwgMHg4MDAwLCAweDI3MDAsIDB4MjYwMCwgMHgyNTAwLCAweDI0MDAsCi0JMHgyMzAwLCAweDIyMDAsIDB4ODAwMCwgMHg4MDAwLCAweDIxMDAsIDB4MjAwMCwgMHgxZjAwLCAweDFlMDAsCi0JMHgxZDAwLCAweDFjMDAsIDB4ODAwMCwgMHg4MDAwLCAweDFiMDAsIDB4MWEwMCwgMHg4MDAwLCAweDE5MDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgxODAwLCAweDgwMDAsCi0JMHgxNzAwLCAweDE2MDAsIDB4MTUwMCwgMHg4MDAwLCAweDE0MDAsIDB4MTMwMCwgMHgxMjAwLCAweDExMDAsCi0JMHgxMDAwLCAweDBmMDAsIDB4ODAwMCwgMHg4MDAwLCAweDBlMDAsIDB4MGQwMCwgMHgwYzAwLCAweDBiMDAsCi0JMHgwYTAwLCAweDA5MDAsIDB4ODAwMCwgMHg4MDAwLCAweDA4MDAsIDB4MDcwMCwgMHg4MDAwLCAweDA2MDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwNTAwLCAweDA0MDAsIDB4MDMwMCwgMHg4MDAwLCAweDAyMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgwMTAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4MDAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHg4MDAwLCAweDgwMDAsCi0JMHg4MDAwLCAweDgwMDAsIDB4ODAwMCwgMHgyMDcxLCAweDE4OWMsIDB4NzAwMywgMHgwMDAyLCAweDkwMDYsCi0JMHg3MDE2LCAweDcwMWEsIDB4NzA0YSwgMHg3MDRlLCAweDcwMGUsIDB4NzA0MiwgMHg3MDQ2LCAweDcwM2IsCi0JMHgxOGI4LCAweDcwM2YsIDB4MThiOCwgMHg3MDA3LCAweDAwMDEsIDB4MDgwYywgMHgxMDUwLCAweDA5MGMsCi0JMHgwZGY2LCAweDI5MDAsIDB4NzA2YSwgMHhhODY3LCAweDAwMDIsIDB4YThhYiwgMHhkY2IwLCAweDA4MGMsCi0JMHgxMDUwLCAweDA5MGMsIDB4MGRmNiwgMHgyOTAwLCAweDcwNmUsIDB4YTg2NywgMHgwMDAyLCAweGE4YWIsCi0JMHhkY2IwLCAweDAwMDUsIDB4MjA3MSwgMHgxODljLCAweDcwMDQsIDB4MDAwMiwgMHgzMzIyLCAweDMzMjMsCi0JMHgzMzM2LCAweDMzNGEsIDB4MDAwNSwgMHgxMDA0LCAweDMzMzMsIDB4MGUwNCwgMHgzMzMzLCAweDIwNzksCi0JMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMGMsIDB4OTAwNSwgMHgxMTI4LCAweDcwMGYsCi0JMHgwMDAxLCAweDAxMmUsIDB4MDQ2OCwgMHgwMDA1LCAweDAxMmUsIDB4MGNlOCwgMHgyMDc5LCAweDAwMDAsCi0JMHgyMDYxLCAweDE4YjYsIDB4MmM0YywgMHhhODZjLCAweDkwOGUsIDB4MDEwMCwgMHgwMTI4LCAweDkwODYsCi0JMHgwMjAwLCAweDA5MDQsIDB4MzQxZSwgMHgwMDA1LCAweDcwMTgsIDB4MjA0OCwgMHgyMDYxLCAweDE4MDAsCi0JMHg3MDFjLCAweDA4MDcsIDB4NzAxNCwgMHgyMDQ4LCAweGE4NjQsIDB4OTA5NCwgMHgwMGZmLCAweDkyOTYsCi0JMHgwMDI5LCAweDExMjAsIDB4YWE3OCwgMHhkMmZjLCAweDAxMjgsIDB4MDAwNSwgMHg5MDg2LCAweDAxMDMsCi0JMHgwMTA4LCAweDAwMDUsIDB4MjA3OSwgMHgwMDAwLCAweDIwNjEsIDB4MTgwMCwgMHg3MDFjLCAweDA4MDcsCi0JMHgyMDYxLCAweDE4MDAsIDB4Nzg4MCwgMHg5MDhhLCAweDAwNDAsIDB4MTIxMCwgMHg2MWNjLCAweDAwNDIsCi0JMHgyMTAwLCAweDkwOGEsIDB4MDAzZiwgMHgxYTA0LCAweDM0MWIsIDB4NjFjYywgMHgwODA0LCAweDMzYjAsCi0JMHgzM2YyLCAweDM0MmEsIDB4MzQxYiwgMHgzNDM2LCAweDM0NDAsIDB4MzQ0NiwgMHgzNDRhLCAweDM0NWEsCi0JMHgzNDVlLCAweDM0NzQsIDB4MzQ3YSwgMHgzNDgwLCAweDM0OGIsIDB4MzQ5NiwgMHgzNGE1LCAweDM0YjQsCi0JMHgzNGMyLCAweDM0ZDksIDB4MzRmNCwgMHgzNDFiLCAweDM1OWQsIDB4MzVkYiwgMHgzNjgxLCAweDM2OTIsCi0JMHgzNmI1LCAweDM0MWIsIDB4MzQxYiwgMHgzNDFiLCAweDM2ZWQsIDB4MzcwOSwgMHgzNzEyLCAweDM3NDEsCi0JMHgzNzQ3LCAweDM0MWIsIDB4Mzc4ZCwgMHgzNDFiLCAweDM0MWIsIDB4MzQxYiwgMHgzNDFiLCAweDM0MWIsCi0JMHgzNzk4LCAweDM3YTEsIDB4MzdhOSwgMHgzN2FiLCAweDM0MWIsIDB4MzQxYiwgMHgzNDFiLCAweDM0MWIsCi0JMHgzNDFiLCAweDM0MWIsIDB4MzdkNywgMHgzNDFiLCAweDM0MWIsIDB4MzQxYiwgMHgzNDFiLCAweDM0MWIsCi0JMHgzN2Y0LCAweDM4NjgsIDB4MzQxYiwgMHgzNDFiLCAweDM0MWIsIDB4MzQxYiwgMHgzNDFiLCAweDM0MWIsCi0JMHgwMDAyLCAweDM4OTIsIDB4Mzg5NSwgMHgzOGY0LCAweDM5MGQsIDB4MzkzZCwgMHgzYmRmLCAweDM0MWIsCi0JMHg1MDllLCAweDM0MWIsIDB4MzQxYiwgMHgzNDFiLCAweDM0MWIsIDB4MzQxYiwgMHgzNDFiLCAweDM0MWIsCi0JMHgzNDFiLCAweDM0NzQsIDB4MzQ3YSwgMHg0MTZkLCAweDU0ZmYsIDB4NDE4MywgMHg1MTJkLCAweDUxN2YsCi0JMHg1MjhhLCAweDM0MWIsIDB4NTJlYywgMHg1MzI4LCAweDUzNTksIDB4NTQ2MSwgMHg1Mzg2LCAweDUzZTEsCi0JMHgzNDFiLCAweDQxODcsIDB4NDMzNiwgMHg0MzRjLCAweDQzNzEsIDB4NDNkNiwgMHg0NDRhLCAweDQ0NmEsCi0JMHg0NGUxLCAweDQ1M2QsIDB4NDU5OSwgMHg0NTljLCAweDQ1YzEsIDB4NDYzNiwgMHg0NjljLCAweDQ2YTQsCi0JMHg0N2Q5LCAweDQ5NDEsIDB4NDk3NSwgMHg0YmJmLCAweDM0MWIsIDB4NGJkZCwgMHg0YzlhLCAweDRkNzcsCi0JMHgzNDFiLCAweDM0MWIsIDB4MzQxYiwgMHgzNDFiLCAweDRkZGQsIDB4NGRmOCwgMHg0NmE0LCAweDUwM2UsCi0JMHg3MTRjLCAweDAwMDAsIDB4MjAyMSwgMHg0MDAwLCAweDA4MGMsIDB4NDlmMywgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDBlMDQsIDB4MzNmYywgMHgwMDEwLCAweDAxMmUsIDB4MGNjMCwgMHg3YzM2LCAweDk0ODYsCi0JMHg0MDAwLCAweDAxMTgsIDB4NzgzMywgMHgwMDExLCAweDAwMTAsIDB4NzgzMywgMHgwMDEwLCAweDdjODIsCi0JMHg3OTg2LCAweDdhOGEsIDB4N2I4ZSwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsCi0JMHhkMDg0LCAweDE5MGMsIDB4MTFlNiwgMHg3MDA3LCAweDAwMDEsIDB4MjA5MSwgMHg1MDAwLCAweDcwMGYsCi0JMHgwMDAwLCAweDAxMmUsIDB4MDAwNSwgMHgyMDIxLCAweDQwMDEsIDB4MDhiMCwgMHgyMDIxLCAweDQwMDIsCi0JMHgwODk4LCAweDIwMjEsIDB4NDAwMywgMHgwODgwLCAweDIwMjEsIDB4NDAwNSwgMHgwODY4LCAweDIwMjEsCi0JMHg0MDA2LCAweDA4NTAsIDB4MjAzOSwgMHgwMDAxLCAweDkwMmUsIDB4MjUyMCwgMHg3Yjg4LCAweDdhOGMsCi0JMHg3ODg0LCAweDc5OTAsIDB4ODFmZiwgMHgwZDk4LCAweDA4MDQsIDB4NGEwMCwgMHgyMDM5LCAweDAwMDEsCi0JMHg5MDJlLCAweDI1MjAsIDB4N2I4OCwgMHg3YThjLCAweDc4ODQsIDB4Nzk5MCwgMHgwODA0LCAweDRhMDMsCi0JMHg3OTg0LCAweDc4ODgsIDB4MjExNCwgMHgyMDBhLCAweDA4MDQsIDB4MzNmMiwgMHg3OTg0LCAweDIxMTQsCi0JMHgwODA0LCAweDMzZjIsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksIDB4MDAyMSwgMHgyMGU5LCAweDAwMDAsCi0JMHgyMGExLCAweDAwMjEsIDB4MjBhOSwgMHgwMDFmLCAweDQwMDMsIDB4Nzk4NCwgMHg3YTg4LCAweDdiOGMsCi0JMHgwODA0LCAweDMzZjIsIDB4Nzg4NCwgMHgyMDYwLCAweDA4MDQsIDB4MzRhNywgMHgyMDA5LCAweDAwMDMsCi0JMHgyMDExLCAweDAwMDMsIDB4MjAxOSwgMHgwMDEyLCAweDc4OWIsIDB4MDMxNywgMHg3ODkzLCAweGZmZmYsCi0JMHgyMDAxLCAweDE4OGQsIDB4MjAwNCwgMHg5MDA1LCAweDAxMTgsIDB4Nzg5NiwgMHgwODA0LCAweDMzZjIsCi0JMHg3ODk3LCAweDAwMDEsIDB4MDgwNCwgMHgzM2YyLCAweDIwMzksIDB4MDAwMSwgMHg3ZDk4LCAweDdjOWMsCi0JMHgwODA0LCAweDM0MmUsIDB4MjAzOSwgMHgwMDAxLCAweDdkOTgsIDB4N2M5YywgMHgwODA0LCAweDM0M2EsCi0JMHg3OWEwLCAweDkxODIsIDB4MDA0MCwgMHgwMjEwLCAweDA4MDQsIDB4MzQyNywgMHgyMTM4LCAweDdkOTgsCi0JMHg3YzljLCAweDA4MDQsIDB4MzQyZSwgMHg3OWEwLCAweDkxODIsIDB4MDA0MCwgMHgwMjEwLCAweDA4MDQsCi0JMHgzNDI3LCAweDIxMzgsIDB4N2Q5OCwgMHg3YzljLCAweDA4MDQsIDB4MzQzYSwgMHg3OWEwLCAweDkxODIsCi0JMHgwMDQwLCAweDAyMTAsIDB4MDgwNCwgMHgzNDI3LCAweDIxZTgsIDB4Nzk4NCwgMHg3ODg4LCAweDIwYTksCi0JMHgwMDAxLCAweDIxYTAsIDB4NDAwNCwgMHgwODA0LCAweDMzZjIsIDB4MjA2MSwgMHgwODAwLCAweGUxMGMsCi0JMHg5MDA2LCAweDJjMTUsIDB4OTIwMCwgMHg4YzYwLCAweDgxMDksIDB4MWRkOCwgMHgyMDEwLCAweDkwMDUsCi0JMHgwOTA0LCAweDMzZjIsIDB4MDgwNCwgMHgzNDIxLCAweDc5YTAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMTAsCi0JMHgwODA0LCAweDM0MjcsIDB4MjFlMCwgMHgyMGE5LCAweDAwMDEsIDB4Nzk4NCwgMHgyMTk4LCAweDQwMTIsCi0JMHgwODA0LCAweDMzZjIsIDB4MjA2OSwgMHgxODViLCAweDc4ODQsIDB4Nzk5MCwgMHg5MTFhLCAweDFhMDQsCi0JMHgzNDI3LCAweDgwMTksIDB4MDkwNCwgMHgzNDI3LCAweDY4NGEsIDB4Njk0MiwgMHg3ODhjLCAweDY4NTIsCi0JMHg3ODg4LCAweDY4NTYsIDB4OTAwNiwgMHg2ODVhLCAweDY4NWUsIDB4MDgwYywgMHg3NGFiLCAweDA4MDQsCi0JMHgzM2YyLCAweDIwNjksIDB4MTg1YiwgMHg3ODg0LCAweDc5OTQsIDB4OTExYSwgMHgxYTA0LCAweDM0MjcsCi0JMHg4MDE5LCAweDA5MDQsIDB4MzQyNywgMHg2ODRlLCAweDY5NDYsIDB4Nzg4YywgMHg2ODYyLCAweDc4ODgsCi0JMHg2ODY2LCAweDkwMDYsIDB4Njg2YSwgMHg2ODZlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg2N2Y5LCAweDAxMmUsIDB4MDgwNCwgMHgzM2YyLCAweDkwMmUsIDB4MjUyMCwgMHg4MWZmLCAweDAxMjAsCi0JMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNDI0LCAweDc5ODQsIDB4N2I4OCwgMHg3YThjLCAweDIwYTksCi0JMHgwMDA1LCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDE4YTQsIDB4NDEwMSwgMHgwODBjLCAweDQ5YjcsCi0JMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM0MjQsIDB4MjAwOSwgMHgwMDIwLCAweGE4NWMsCi0JMHg5MDgwLCAweDAwMTksIDB4YWY2MCwgMHgwODBjLCAweDRhMDAsIDB4NzAxZiwgMHgzNTE4LCAweDAwMDUsCi0JMHhhODY0LCAweDIwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDkwOTYsIDB4MDAxMSwgMHgwMTY4LCAweDkwOTYsCi0JMHgwMDE5LCAweDAxNTAsIDB4OTA5NiwgMHgwMDE1LCAweDAxMzgsIDB4OTA5NiwgMHgwMDQ4LCAweDAxMjAsCi0JMHg5MDk2LCAweDAwMjksIDB4MTkwNCwgMHgzNDI0LCAweDgxMGYsIDB4OTE4YywgMHgwMGZmLCAweDA5MDQsCi0JMHgzNDI0LCAweDcxMTIsIDB4NzAxMCwgMHg4MDAxLCAweDA1NjAsIDB4NzAxMiwgMHgwODBjLCAweDQ5YjcsCi0JMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM0MjQsIDB4MjAwOSwgMHgwMDIwLCAweDcwNjgsCi0JMHgyMDQwLCAweGEyOGMsIDB4YTM5MCwgMHhhNDk0LCAweGE1OTgsIDB4OTI5MCwgMHgwMDQwLCAweDkzOTksCi0JMHgwMDAwLCAweDk0YTEsIDB4MDAwMCwgMHg5NWE5LCAweDAwMDAsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksCi0JMHhhZjYwLCAweDA4MGMsIDB4NGEwMCwgMHg3MDFmLCAweDM1NTYsIDB4MDAwNSwgMHhhODY0LCAweDkwODQsCi0JMHgwMGZmLCAweDkwOTYsIDB4MDAwMiwgMHgwMTIwLCAweDkwOTYsIDB4MDAwYSwgMHgxOTA0LCAweDM0MjQsCi0JMHgwODg4LCAweDcwMTQsIDB4MjA0OCwgMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHhhODY0LCAweDkwODQsCi0JMHgwMGZmLCAweDkwOTYsIDB4MDAyOSwgMHgxMTYwLCAweGMyZmQsIDB4YWE3YSwgMHgwODBjLCAweDVmM2IsCi0JMHgwMTUwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4N2EsIDB4YTk4MiwgMHgwMTJlLCAweDAwNTAsCi0JMHgwODBjLCAweDYyNTksIDB4MTEyOCwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHgzNTgyLCAweDAwMDUsCi0JMHgwODBjLCAweDZjNmIsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjBhOSwgMHgwMDA1LCAweDIwZTEsCi0JMHgwMDAxLCAweDIwOTksIDB4MThhNCwgMHg0MDBhLCAweDIxMDAsIDB4OTIxMCwgMHg5Mzk5LCAweDAwMDAsCi0JMHg5NGExLCAweDAwMDAsIDB4OTVhOSwgMHgwMDAwLCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDIwMDksCi0JMHgwMDIwLCAweDAxMmUsIDB4YWY2MCwgMHgwODA0LCAweDRhMDMsIDB4MjA5MSwgMHg4MDAwLCAweDc4MzcsCi0JMHg0MDAwLCAweDc4MzMsIDB4MDAxMCwgMHg3ODgzLCAweDQwMDAsIDB4Nzg4NywgMHg0OTUzLCAweDc4OGIsCi0JMHg1MDIwLCAweDc4OGYsIDB4MjAyMCwgMHgyMDA5LCAweDAxN2YsIDB4MjEwNCwgMHg3ODkyLCAweDNmMDAsCi0JMHg3ODk2LCAweDIwNjEsIDB4MDEwMCwgMHg2MjAwLCAweDIwNjEsIDB4MDIwMCwgMHg2MDNjLCAweDgwMDcsCi0JMHg5MjA1LCAweDc4OWEsIDB4MjAwOSwgMHgwNGZkLCAweDIxMDQsIDB4Nzg5ZSwgMHgyMDkxLCAweDUwMDAsCi0JMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgwMTgwLCAweDIwMDEsCi0JMHgxOWY2LCAweDIwMDQsIDB4OTAwNSwgMHgwMTI4LCAweDIwMDEsIDB4MDA4YiwgMHgyMDA0LCAweGQwZmMsCi0JMHgwZGQ4LCAweDIwMDEsIDB4MDA4YSwgMHgyMDAzLCAweDAwMDIsIDB4MjAwMywgMHgxMDAxLCAweDIwNzEsCi0JMHgwMDgwLCAweDA4MDQsIDB4MDQyNywgMHg4MWZmLCAweDE5MDQsIDB4MzQyNCwgMHg3OTg0LCAweDA4MGMsCi0JMHg2M2EzLCAweDE5MDQsIDB4MzQyNywgMHg3ZTk4LCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLCAweDQwMDAsCi0JMHgxYTA0LCAweDM0MjcsIDB4N2M4OCwgMHg3ZDhjLCAweDA4MGMsIDB4NjUwNiwgMHgwODBjLCAweDY0ZDUsCi0JMHgwMDAwLCAweDE1MTgsIDB4MjA2MSwgMHgxY2QwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg2MDE0LCAweDkwNGQsIDB4MDEzMCwgMHhhODZjLCAweDk0MDYsCi0JMHgxMTE4LCAweGE4NzAsIDB4OTUwNiwgMHgwMTUwLCAweDAxMmUsIDB4OWNlMCwgMHgwMDE4LCAweDIwMDEsCi0JMHgxODE5LCAweDIwMDQsIDB4OWMwMiwgMHgxYTA0LCAweDM0MjQsIDB4MGMzMCwgMHgwODBjLCAweGI5ODMsCi0JMHgwMTJlLCAweDA5MDQsIDB4MzQyNCwgMHgwODA0LCAweDMzZjIsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDUsCi0JMHgwODBjLCAweDZjNmIsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhjMDRhLCAweDA4MGMsCi0JMHg2YTIyLCAweDAxMmUsIDB4MDgwNCwgMHgzM2YyLCAweDAwYTYsIDB4Mjk1MCwgMHhiMTk4LCAweDA4MGMsCi0JMHg2M2EzLCAweDE5MDQsIDB4MzY2ZSwgMHhiNmE0LCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLCAweDQwMDAsCi0JMHgxNmU4LCAweGI0OWMsIDB4YjVhMCwgMHgwODBjLCAweDY1MDYsIDB4MDgwYywgMHg2NGQ1LCAweDE1MjAsCi0JMHgyMDYxLCAweDFjZDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsCi0JMHgwMTQ4LCAweDYwMTQsIDB4OTA0ZCwgMHgwMTMwLCAweGE4NmMsIDB4OTQwNiwgMHgxMTE4LCAweGE4NzAsCi0JMHg5NTA2LCAweDAxNTgsIDB4MDEyZSwgMHg5Y2UwLCAweDAwMTgsIDB4MjAwMSwgMHgxODE5LCAweDIwMDQsCi0JMHg5YzAyLCAweDIwMDksIDB4MDAwZCwgMHgxMmIwLCAweDBjMjgsIDB4MDgwYywgMHhiOTgzLCAweDAxMmUsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDE3OCwgMHgwMGUwLCAweDkwMGUsIDB4MjAwMSwgMHgwMDA1LCAweDA4MGMsCi0JMHg2YzZiLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4YzA0YSwgMHgwODBjLCAweDZhMTUsCi0JMHgwMTJlLCAweDAwNzAsIDB4YjA5NywgMHg0MDA1LCAweGIxOWEsIDB4MDAxMCwgMHhiMDk3LCAweDQwMDYsCi0JMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMzAsIDB4MmE0OCwgMHgwMGFlLCAweDAwMDUsCi0JMHhiMDk3LCAweDQwMDAsIDB4OTAwNiwgMHg5MThkLCAweDAwMDEsIDB4MjAwOCwgMHgyYTQ4LCAweDAwYWUsCi0JMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNDI0LCAweDA4MGMsIDB4NDljZSwgMHgwOTA0LCAweDM0MjcsCi0JMHgwODBjLCAweDY0NmEsIDB4MDkwNCwgMHgzNDI0LCAweDA4MGMsIDB4NjUwYywgMHgwOTA0LCAweDM0MjQsCi0JMHgwODA0LCAweDQ0NjEsIDB4ODFmZiwgMHgxOTA0LCAweDM0MjQsIDB4MDgwYywgMHg0OWVhLCAweDA5MDQsCi0JMHgzNDI3LCAweDA4MGMsIDB4NjU5YSwgMHgwOTA0LCAweDM0MjQsIDB4MjAxOSwgMHgwMDA1LCAweDc5YTgsCi0JMHgwODBjLCAweDY1MjcsIDB4MDkwNCwgMHgzNDI0LCAweDc4ODgsIDB4OTA4YSwgMHgxMDAwLCAweDFhMDQsCi0JMHgzNDI3LCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweDkxMDgsIDB4MDgwYywgMHg4MjY3LCAweDc5YTgsCi0JMHhkMTg0LCAweDE5MDQsIDB4MzNmMiwgMHgwODA0LCAweDQ0NjEsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg4MWZmLCAweDAxMTgsIDB4MjAwOSwgMHgwMDAxLCAweDA0NTAsIDB4MjAyOSwgMHgwN2ZmLCAweDY0NTgsCi0JMHgyNDAwLCAweDk1MDYsIDB4MDFmOCwgMHgyNTA4LCAweDA4MGMsIDB4NjNhMywgMHgxMWQ4LCAweDA4MGMsCi0JMHg2NTlhLCAweDExMjgsIDB4MjAwOSwgMHgwMDAyLCAweDYyYmMsIDB4MjUxOCwgMHgwMGMwLCAweDIwMTksCi0JMHgwMDA0LCAweDkwMGUsIDB4MDgwYywgMHg2NTI3LCAweDExMTgsIDB4MjAwOSwgMHgwMDA2LCAweDAwNzgsCi0JMHg3ODg0LCAweDkwOGEsIDB4MTAwMCwgMHgxMjcwLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweDkxMDgsCi0JMHgwODBjLCAweDgyNjcsIDB4ODUyOSwgMHgxYWUwLCAweDAxMmUsIDB4MDgwNCwgMHgzM2YyLCAweDAxMmUsCi0JMHgwODA0LCAweDM0MjQsIDB4MDEyZSwgMHgwODA0LCAweDM0MjcsIDB4MDgwYywgMHg0OWNlLCAweDA5MDQsCi0JMHgzNDI3LCAweDA4MGMsIDB4NjQ2YSwgMHgwOTA0LCAweDM0MjQsIDB4YmFhMCwgMHgyMDE5LCAweDAwMDUsCi0JMHgwMGM2LCAweDkwNjYsIDB4MDgwYywgMHg4NzgyLCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweDg2NzAsCi0JMHg5MDBlLCAweDA4MGMsIDB4ZDU1NiwgMHgwMDdlLCAweDAwY2UsIDB4MDgwYywgMHg2NTA2LCAweDA4MDQsCi0JMHgzM2YyLCAweDA4MGMsIDB4NDljZSwgMHgwOTA0LCAweDM0MjcsIDB4MDgwYywgMHg2NTA2LCAweDIyMDgsCi0JMHgwODA0LCAweDMzZjIsIDB4MDE1NiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2OSwgMHgxOTBlLCAweDY4MTAsCi0JMHg2OTE0LCAweDkxMGEsIDB4MTIwOCwgMHg5MDBlLCAweDY4MTYsIDB4OTAxNiwgMHg5MDFlLCAweDIwYTksCi0JMHgwMDdlLCAweDIwNjksIDB4MTAwMCwgMHgyZDA0LCAweDkwNWQsIDB4MDExOCwgMHhiODRjLCAweDAwNTksCi0JMHg5MjEwLCAweDhkNjgsIDB4MWYwNCwgMHgzNzIzLCAweDIzMDAsIDB4OTIxOCwgMHgwMGVlLCAweDAwZGUsCi0JMHgwMTVlLCAweDA4MDQsIDB4MzNmMiwgMHgwMGY2LCAweDAwMTYsIDB4OTA3ZCwgMHgwMTM4LCAweDkwMDYsCi0JMHg4MDAwLCAweDJmMGMsIDB4ODFmZiwgMHgwMTEwLCAweDIxNzgsIDB4MGNkMCwgMHgwMDFlLCAweDAwZmUsCi0JMHgwMDA1LCAweDIwNjksIDB4MTkwZSwgMHg2OTEwLCAweDYyYjgsIDB4MDgwNCwgMHgzM2YyLCAweDgxZmYsCi0JMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LCAweDM0MjQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwODBjLCAweDU0ZWYsIDB4MDEyOCwgMHgyMDA5LCAweDAwMDcsIDB4MDEyZSwgMHgwODA0LCAweDM0MjQsCi0JMHgwMTJlLCAweDYxNTgsIDB4OTE5MCwgMHgzMWYzLCAweDIyMTUsIDB4OTI5NCwgMHgwMGZmLCAweDYzNzgsCi0JMHg4M2ZmLCAweDAxMDgsIDB4NjI3YywgMHg2N2Q4LCAweDk3YzQsIDB4MDAwYSwgMHg5OGM2LCAweDAwMGEsCi0JMHgxMTE4LCAweDIwMzEsIDB4MDAwMSwgMHgwMGU4LCAweDk3YzQsIDB4MDAyMiwgMHg5OGM2LCAweDAwMjIsCi0JMHgxMTE4LCAweDIwMzEsIDB4MDAwMywgMHgwMGE4LCAweDk3YzQsIDB4MDAxMiwgMHg5OGM2LCAweDAwMTIsCi0JMHgxMTE4LCAweDIwMzEsIDB4MDAwMiwgMHgwMDY4LCAweDA4MGMsIDB4NzE3ZSwgMHgxMTE4LCAweDIwMzEsCi0JMHgwMDA0LCAweDAwMzgsIDB4ZDc5YywgMHgwMTIwLCAweDIwMDksIDB4MDAwNSwgMHgwODA0LCAweDM0MjQsCi0JMHg5MDM2LCAweDdlOWEsIDB4N2Y5ZSwgMHgwODA0LCAweDMzZjIsIDB4NjE0OCwgMHg2MjRjLCAweDIwMTksCi0JMHgxOTYwLCAweDIzMWMsIDB4MjAwMSwgMHgxOTYxLCAweDIwMDQsIDB4Nzg5YSwgMHgwODA0LCAweDMzZjIsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MTM4LCAweDYyM2MsIDB4NjM0MCwgMHgwMTJlLCAweDA4MDQsCi0JMHgzM2YyLCAweDA4MGMsIDB4NDllYSwgMHgwOTA0LCAweDM0MjcsIDB4YmE0NCwgMHhiYjM4LCAweDA4MDQsCi0JMHgzM2YyLCAweDA4MGMsIDB4MGRmNiwgMHgwODBjLCAweDQ5ZWEsIDB4MjExMCwgMHgwOTA0LCAweDM0MjcsCi0JMHhiODA0LCAweDkwOGMsIDB4MDBmZiwgMHg5MThlLCAweDAwMDYsIDB4MDE0MCwgMHg5MDg0LCAweGZmMDAsCi0JMHg5MDg2LCAweDA2MDAsIDB4MjAwOSwgMHgwMDA5LCAweDE5MDQsIDB4MzQyNCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwMTksIDB4MDAwNSwgMHgwMGM2LCAweDkwNjYsIDB4MDgwYywgMHg5YWQwLCAweDA4MGMsCi0JMHg4NzgyLCAweDAwNzYsIDB4OTAzZSwgMHgwODBjLCAweDg2NzAsIDB4OTAwZSwgMHgwODBjLCAweGQ1NTYsCi0JMHgwMDdlLCAweDAwY2UsIDB4YjgwNywgMHgwNDA3LCAweDAxMmUsIDB4MDgwNCwgMHgzM2YyLCAweDYxNDgsCi0JMHg2MjRjLCAweDc4ODQsIDB4NjA0YSwgMHg3Yjg4LCAweDYzNGUsIDB4MjA2OSwgMHgxODViLCAweDgzMWYsCi0JMHg5MzA1LCAweDY4MTYsIDB4Nzg4YywgMHgyMDY5LCAweDE5NjAsIDB4MmQxYywgMHgyMDZhLCAweDdlOTgsCi0JMHg5NjgyLCAweDAwMTQsIDB4MTIxMCwgMHgyMDMxLCAweDA3ZDAsIDB4MjA2OSwgMHgxOTYxLCAweDJkMDQsCi0JMHgyNjZhLCAweDc4OWEsIDB4MDgwNCwgMHgzM2YyLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYxMzgsCi0JMHg3ODg0LCAweDYwM2EsIDB4OTEwZSwgMHhkMWI0LCAweDE5MGMsIDB4MGVlNywgMHhkMGM0LCAweDAxYTgsCi0JMHgwMGQ2LCAweDc4YTgsIDB4MjAwOSwgMHgxOTc3LCAweDIwMGEsIDB4NzhhYywgMHgyMDExLCAweDE5NzgsCi0JMHgyMDEyLCAweDIwNjksIDB4MDEwMCwgMHg2ODM4LCAweDkwODYsIDB4MDAwNywgMHgxMTE4LCAweDIyMTQsCi0JMHg2YTVhLCAweDAwMTAsIDB4MjEwYywgMHg2OTVhLCAweDAwZGUsIDB4MjAwMSwgMHgwMTAwLCAweDIwMDQsCi0JMHg5MDg2LCAweDAwMGEsIDB4MDE2OCwgMHgyMDExLCAweDAxMTQsIDB4MjIwYywgMHg3ODg4LCAweGQwOGMsCi0JMHgwMTE4LCAweDkxOGQsIDB4MDA4MCwgMHgwMDEwLCAweDkxOGMsIDB4ZmY3ZiwgMHgyMTEyLCAweDAwNjAsCi0JMHgyMDExLCAweDAxMTYsIDB4MjIwYywgMHg3ODg4LCAweGQwOGMsIDB4MDExOCwgMHg5MThkLCAweDAwNDAsCi0JMHgwMDEwLCAweDkxOGMsIDB4ZmY3ZiwgMHgyMTEyLCAweDYwM2MsIDB4Nzk4OCwgMHg2MTNlLCAweDYxNDAsCi0JMHg5MTBkLCAweDc4OGMsIDB4NjA0MiwgMHg3YTg4LCAweDkyOTQsIDB4MTAwMCwgMHg5MjA1LCAweDkxMGUsCi0JMHhkMWU0LCAweDE5MGMsIDB4MGVmZCwgMHg2MDQwLCAweGQwY2MsIDB4MDEyMCwgMHg3OGIwLCAweDIwMTEsCi0JMHgwMTE0LCAweDIwMTIsIDB4MDEyZSwgMHgwODA0LCAweDMzZjIsIDB4MDBmNiwgMHgyMDc5LCAweDE4MDAsCi0JMHg3YTM4LCAweGE4OTgsIDB4OTA4NCwgMHhmZWJmLCAweDkyMTUsIDB4YTg5YywgMHg5MDg0LCAweGZlYmYsCi0JMHg4MDAyLCAweDkyMTQsIDB4NzgzOCwgMHg5MDg0LCAweDAxNDAsIDB4OTIxNSwgMHg3YTNhLCAweGE4OTcsCi0JMHg0MDAwLCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsCi0JMHg3ODk4LCAweDkwMDUsIDB4MDFhOCwgMHg3ODg4LCAweDkwMjUsIDB4MDkwNCwgMHgzNDI3LCAweDc4OGMsCi0JMHg5MDJkLCAweDA5MDQsIDB4MzQyNywgMHg5MDBlLCAweDA4MGMsIDB4NjNhMywgMHgxMTIwLCAweGJhNDQsCi0JMHhiYjM4LCAweGJjNDYsIDB4YmQzYSwgMHg5MTg2LCAweDA3ZmYsIDB4MDE5MCwgMHg4MTA4LCAweDBjYTAsCi0JMHgwODBjLCAweDQ5ZWEsIDB4MDkwNCwgMHgzNDI3LCAweDc4ODgsIDB4OTAwZCwgMHgwOTA0LCAweDM0MjcsCi0JMHg3ODhjLCAweDkwMDUsIDB4MDkwNCwgMHgzNDI3LCAweGJhNDQsIDB4Yjk0NiwgMHhiYjM4LCAweGI4M2EsCi0JMHgwODA0LCAweDMzZjIsIDB4MjAxMSwgMHhiYzA5LCAweDAwMTAsIDB4MjAxMSwgMHhiYzA1LCAweDA4MGMsCi0JMHg1NGVmLCAweDE5MDQsIDB4MzQyNCwgMHgwMGM2LCAweDIwNjEsIDB4MDEwMCwgMHg3OTg0LCAweDkxODYsCi0JMHgwMGZmLCAweDExMzAsIDB4MjAwMSwgMHgxODE3LCAweDIwMDQsIDB4OTA4NSwgMHhmZjAwLCAweDAwODgsCi0JMHg5MTgyLCAweDAwN2YsIDB4MTZlMCwgMHg5MTg4LCAweDMxZjMsIDB4MjEwZCwgMHg5MThjLCAweDAwZmYsCi0JMHgyMDAxLCAweDE4MTcsIDB4MjAwNCwgMHgwMDI2LCAweDkxMTYsIDB4MDAyZSwgMHgwNTgwLCAweDgxMGYsCi0JMHg5MTA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMDYsIDB4MDgwYywgMHg5Zjk0LCAweDAwMGUsCi0JMHgwNTEwLCAweDYwMmUsIDB4NjIwYSwgMHg3OTg0LCAweDAwYjYsIDB4MDgwYywgMHg2MzQ5LCAweDJiMDgsCi0JMHgwMGJlLCAweDE1MDAsIDB4NjExMiwgMHg2MDIzLCAweDAwMDEsIDB4MDgwYywgMHg0OWI3LCAweDAxZDAsCi0JMHg5MDA2LCAweGE4NjYsIDB4NzAwNywgMHgwMDAzLCAweGE4MzIsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsCi0JMHg3MDFmLCAweDM4ZWQsIDB4MjkwMCwgMHg2MDE2LCAweDIwMDksIDB4MDAzMiwgMHgwODBjLCAweGEwNjgsCi0JMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHgwMTJlLCAweDAwY2UsIDB4MDgwNCwgMHgzNDI0LCAweDAwY2UsCi0JMHgwODA0LCAweDM0MjcsIDB4MDgwYywgMHg5ZmVhLCAweDBjYjAsIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsCi0JMHgwOTA0LCAweDM0MjQsIDB4MDgwNCwgMHgzM2YyLCAweDIwNjEsIDB4MWE0YywgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDYwMDAsIDB4ZDA4NCwgMHgwMTcwLCAweDYxMDQsIDB4NjIwOCwgMHgyMDYxLCAweDE4MDAsCi0JMHg2MzUwLCAweDYwNzAsIDB4Nzg5YSwgMHg2MGJjLCAweDc4OWUsIDB4NjBiOCwgMHg3OGFhLCAweDAxMmUsCi0JMHgwODA0LCAweDMzZjIsIDB4OTAwZSwgMHgyMTEwLCAweDBjODgsIDB4ODFmZiwgMHgxOTA0LCAweDM0MjQsCi0JMHgwODBjLCAweDcxN2UsIDB4MDkwNCwgMHgzNDI0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYyNTAsCi0JMHg2MDcwLCAweDkyMDIsIDB4MDI0OCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHgyNmQ2LCAweDA4MGMsCi0JMHg1NzEyLCAweDAxMmUsIDB4MDgwNCwgMHgzM2YyLCAweDAxMmUsIDB4MDgwNCwgMHgzNDI3LCAweDAwMDYsCi0JMHgwMDE2LCAweDAwYzYsIDB4MDBlNiwgMHgyMDAxLCAweDE5ODQsIDB4MjA3MCwgMHgyMDYxLCAweDE4NWIsCi0JMHg2MDA4LCAweDIwNzIsIDB4OTAwZSwgMHgyMDExLCAweDE0MDAsIDB4MDgwYywgMHg4NDdlLCAweDcyMDYsCi0JMHgwMGVlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDBlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg4MWZmLCAweDAxMjgsIDB4MDEyZSwgMHgyMDIxLCAweDQwMGIsIDB4MDgwNCwgMHgzM2Y0LCAweDc4ODQsCi0JMHhkMGZjLCAweDAxNTgsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsIDB4OTAwNSwgMHgwMTgwLCAweDkwODIsCi0JMHgwMGUxLCAweDAyOTgsIDB4MDEyZSwgMHgwODA0LCAweDM0MjcsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsCi0JMHg5MDA1LCAweDAxMjgsIDB4MjA2OSwgMHgxODViLCAweDY5MDgsIDB4OTEwMiwgMHgxMjMwLCAweDAxMmUsCi0JMHgwODA0LCAweDM0MjcsIDB4MDEyZSwgMHgwODA0LCAweDM0MjQsIDB4MDgwYywgMHg5ZjY5LCAweDBkZDAsCi0JMHg3ODg0LCAweGQwZmMsIDB4MDkwNCwgMHgzOWJjLCAweDAwYzYsIDB4MDgwYywgMHg0OWI3LCAweDAwY2UsCi0JMHgwZDg4LCAweGE4NjcsIDB4MDAwMCwgMHg3ODg0LCAweGE4MGEsIDB4Nzg5OCwgMHhhODBlLCAweDc4OWMsCi0JMHhhODEyLCAweDIwMDEsIDB4MDAyZSwgMHgyMDA0LCAweGE4MWEsIDB4MjAwMSwgMHgwMDJmLCAweDIwMDQsCi0JMHhhODFlLCAweDIwMDEsIDB4MDAzMCwgMHgyMDA0LCAweGE4MjIsIDB4MjAwMSwgMHgwMDMxLCAweDIwMDQsCi0JMHhhODI2LCAweDIwMDEsIDB4MDAzNCwgMHgyMDA0LCAweGE4MmEsIDB4MjAwMSwgMHgwMDM1LCAweDIwMDQsCi0JMHhhODJlLCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODAsIDB4MDAwMywgMHg5MDg0LCAweDAwZmMsCi0JMHg4MDA0LCAweGE4MTYsIDB4MDgwYywgMHgzYjQyLCAweDA5MjgsIDB4NzAxNCwgMHgyMDQ4LCAweGFkMmMsCi0JMHhhYzI4LCAweGFiMWMsIDB4YWExOCwgMHhhOTMwLCAweGE4MDgsIDB4ZDBiNCwgMHgxMTIwLCAweDIwMjksCi0JMHgwMDAwLCAweDIwMjEsIDB4MDAwMCwgMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsCi0JMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDFiLCAweDA4MGMsIDB4NGEwMCwgMHg3MDFmLCAweDNhN2YsCi0JMHg3MDIzLCAweDAwMDEsIDB4MDEyZSwgMHgwMDA1LCAweDAwNDYsIDB4MDA4NiwgMHgwMDk2LCAweDAwYTYsCi0JMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MDgwYywgMHgzOTI3LCAweDIwMDEsCi0JMHgxOTdhLCAweDIwMDMsIDB4MDAwMCwgMHgyMDIxLCAweDAwMGEsIDB4MjA2MSwgMHgwMTAwLCAweDYxMDQsCi0JMHgwMDE2LCAweDYwYmIsIDB4MDAwMCwgMHg2MGJmLCAweDMyZTEsIDB4NjBiZiwgMHgwMDEyLCAweDA4MGMsCi0JMHgzYmIxLCAweDA4MGMsIDB4M2I3MCwgMHgwMGY2LCAweDAwZTYsIDB4MDA4NiwgMHgyOTQwLCAweDIwNzEsCi0JMHgxYTQyLCAweDIwNzksIDB4MDA5MCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODg0LCAweGQwYjQsCi0JMHgwMTQwLCAweDIwMDEsIDB4MDAzNSwgMHgyMDA0LCAweDc4MGUsIDB4MjAwMSwgMHgwMDM0LCAweDIwMDQsCi0JMHg3ODBhLCAweDAwZGUsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4M2ZiMSwgMHgwMDhlLCAweDAwZWUsCi0JMHgwMGZlLCAweDA4MGMsIDB4M2VkMywgMHgwODBjLCAweDNkOTgsIDB4MDViOCwgMHgyMDAxLCAweDAyMGIsCi0JMHgyMDA0LCAweDkwODQsIDB4MDE0MCwgMHgxZGI4LCAweDA4MGMsIDB4NDAyNSwgMHgwMGY2LCAweDIwNzksCi0JMHgwMzAwLCAweDc4YmMsIDB4MDBmZSwgMHg5MDhjLCAweDAwNzAsIDB4MTU2MCwgMHgyMDcxLCAweDAyMDAsCi0JMHg3MDM3LCAweDAwMDAsIDB4NzA1MCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHgzMjAwLCAweDE1MTAsCi0JMHg3MDM3LCAweDAwMDEsIDB4NzA1MCwgMHg5MDg0LCAweGZmMDAsIDB4OTA4NiwgMHhlMTAwLCAweDExZDAsCi0JMHg3MDM3LCAweDAwMDAsIDB4NzA1NCwgMHg3MDM3LCAweDAwMDAsIDB4NzE1YywgMHg5MTA2LCAweDExOTAsCi0JMHgyMDAxLCAweDE4MWYsIDB4MjAwNCwgMHg5MTA2LCAweDExNjgsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsCi0JMHg2MDI0LCAweDkwODQsIDB4MWUwMCwgMHgwMGNlLCAweDAxMzgsIDB4MDgwYywgMHgzZGEyLCAweDA4MGMsCi0JMHgzYjZiLCAweDAwNTgsIDB4MDgwYywgMHgzYjZiLCAweDA4MGMsIDB4M2Y0OSwgMHgwODBjLCAweDNlYzksCi0JMHgyMDAxLCAweDAyMGIsIDB4MjAwNCwgMHhkMGU0LCAweDBkZDgsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsCi0JMHgwMDA0LCAweDIwNjEsIDB4MDEwMCwgMHg2MDI3LCAweDAwMDIsIDB4MDAxZSwgMHg2MTA2LCAweDIwMTEsCi0JMHgwMjBkLCAweDIwMTMsIDB4MDAyMCwgMHg2MGJiLCAweDAwMDAsIDB4NjBiZiwgMHgwMTA4LCAweDYwYmYsCi0JMHgwMDEyLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLCAweDkxOGMsIDB4ZmZmZCwgMHgyMTAyLCAweDA4MGMsCi0JMHgxMmZlLCAweDIwMDksIDB4MDAyOCwgMHgwODBjLCAweDIyMDAsIDB4MjAwMSwgMHgwMjI3LCAweDIwMGMsCi0JMHgyMTAyLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMGFlLCAweDAwOWUsCi0JMHgwMDhlLCAweDAwNGUsIDB4MjAwMSwgMHgxOTdhLCAweDIwMDQsIDB4OTAwNSwgMHgxMTE4LCAweDAxMmUsCi0JMHgwODA0LCAweDMzZjIsIDB4MDEyZSwgMHgyMDIxLCAweDQwMGMsIDB4MDgwNCwgMHgzM2Y0LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDA4NiwgMHgwMDk2LCAweDAwZDYsCi0JMHgwMTU2LCAweDcwMTQsIDB4MjA0OCwgMHg3MDIwLCAweDIwYTgsIDB4ODAwMCwgMHg3MDIyLCAweGE4MDQsCi0JMHg5MDA1LCAweDA5MDQsIDB4M2FkYiwgMHgyMDQ4LCAweDFmMDQsIDB4M2E4ZiwgMHg3MDY4LCAweDIwNDAsCi0JMHhhMjhjLCAweGEzOTAsIDB4YTQ5NCwgMHhhNTk4LCAweGE5MzAsIDB4YTgwOCwgMHhkMGI0LCAweDExMjAsCi0JMHgyMDI5LCAweDAwMDAsIDB4MjAyMSwgMHgwMDAwLCAweDAwOTYsIDB4NzAxNCwgMHgyMDQ4LCAweGE4NjQsCi0JMHgwMDllLCAweDkwODYsIDB4MDEwMywgMHgwMTcwLCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsCi0JMHgwMDNmLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMWIsIDB4MDgwYywgMHg0YTAwLCAweDcwMWYsCi0JMHgzYTdmLCAweDAwYjAsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTBiYywgMHgwMDNmLCAweDkwODQsCi0JMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMWE4LCAweDI3ZTAsIDB4MjA5OCwgMHgyN2U4LCAweDIwYTAsCi0JMHgwMDA2LCAweDA4MGMsIDB4MGZiNCwgMHgwMDBlLCAweDA4MGMsIDB4NGEwMywgMHg3MDFmLCAweDNhN2YsCi0JMHgwMTVlLCAweDAwZGUsIDB4MDA5ZSwgMHgwMDhlLCAweDAwN2UsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHg3MDE0LCAweDIwNDgsIDB4YTg2NCwgMHg5MDg2LCAweDAxMDMsCi0JMHgxMTE4LCAweDcwMWYsIDB4M2I0MCwgMHgwNDUwLCAweDcwMTQsIDB4MjA0OCwgMHhhODY4LCAweGMwZmQsCi0JMHhhODZhLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDYzNDMsIDB4MDExMCwgMHg5MDA2LCAweDAwMzAsCi0JMHhiODEzLCAweDAwZmYsIDB4YjgxNywgMHhmZmZkLCAweDA4MGMsIDB4YzIxZCwgMHgwMTVlLCAweDAwZGUsCi0JMHgwMDllLCAweDAwOGUsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwOTA0LCAweDM0MjQsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsCi0JMHgwMDg2LCAweDAwOTYsIDB4MDBkNiwgMHgwMTU2LCAweDcwMWYsIDB4M2IxMiwgMHg3MDA3LCAweDAwMDMsCi0JMHgwODA0LCAweDNhZDAsIDB4YTgzMCwgMHg5MDg2LCAweDAxMDAsIDB4MjAyMSwgMHg0MDBjLCAweDA5MDQsCi0JMHgzM2Y0LCAweDAwNzYsIDB4YWQxMCwgMHhhYzBjLCAweGFiMjQsIDB4YWEyMCwgMHhhOTMwLCAweGE4MDgsCi0JMHhkMGI0LCAweDExMjAsIDB4MjAyOSwgMHgwMDAwLCAweDIwMjEsIDB4MDAwMCwgMHg4OTA2LCAweDgwMDYsCi0JMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDFiLCAweDIxYTgsCi0JMHgyN2UwLCAweDIwOTgsIDB4MjdlOCwgMHgyMGEwLCAweDAwMDYsIDB4MDgwYywgMHgwZmI0LCAweDAwMGUsCi0JMHgwODBjLCAweDRhMDMsIDB4MDA3ZSwgMHg3MDFmLCAweDNhN2YsIDB4NzAyMywgMHgwMDAxLCAweDAwMDUsCi0JMHgwODA0LCAweDMzZjIsIDB4MDE1NiwgMHgwMGM2LCAweGE4MTQsIDB4OTA4YSwgMHgwMDFlLCAweDAyMTgsCi0JMHhhODMzLCAweDAwMWUsIDB4MDAxMCwgMHhhODMyLCAweDAwNzgsIDB4ODFmZiwgMHgwMTY4LCAweDAwMTYsCi0JMHgwODBjLCAweDQ5YjcsIDB4MDAxZSwgMHgwMTMwLCAweGE4MDAsIDB4MjA0MCwgMHhhMDA4LCAweGE4MGEsCi0JMHgyMTAwLCAweDBjNTgsIDB4OTAwNiwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMGNlLCAweDAxNWUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDBmNiwgMHgyMDc5LCAweDAwMDAsIDB4Nzg4MCwgMHg5MDg2LCAweDAwNDQsCi0JMHgwMGZlLCAweDAwMGUsIDB4MDAwNSwgMHgyMDAxLCAweDE5N2EsIDB4MjAwMywgMHgwMDAxLCAweDAwMDUsCi0JMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgyMDYxLCAweDAyMDAsIDB4MjAwMSwgMHgxOTg1LCAweDIwMDQsCi0JMHg2MDFhLCAweDIwNjEsIDB4MDEwMCwgMHgyMDAxLCAweDE5ODQsIDB4MjAwNCwgMHg2MGNlLCAweDYxMDQsCi0JMHhjMWFjLCAweDYxMDYsIDB4MDgwYywgMHg0OWI3LCAweGE4MTMsIDB4MDAxOSwgMHhhODE3LCAweDAwMDEsCi0JMHgyOTAwLCAweGE4NWEsIDB4MjAwMSwgMHgwMDJlLCAweDIwMDQsIDB4YTg2NiwgMHgyMDAxLCAweDAwMmYsCi0JMHgyMDA0LCAweGE4NmEsIDB4MjA2MSwgMHgwMDkwLCAweDIwNzksIDB4MDEwMCwgMHgyMDAxLCAweDE5ODQsCi0JMHgyMDA0LCAweDYwMzYsIDB4MjAwOSwgMHgwMDQwLCAweDA4MGMsIDB4MjIwMCwgMHgyMDAxLCAweDAwMmEsCi0JMHgyMDA0LCAweDkwODQsIDB4ZmZmOCwgMHhhODZlLCAweDYwMWEsIDB4YTg3MywgMHgwMDAwLCAweDYwMWYsCi0JMHgwMDAwLCAweDc4Y2EsIDB4OTAwNiwgMHg2MDBhLCAweDYwMGUsIDB4MDBjZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MDgwYywgMHg0OWI3LCAweDI5NDAsIDB4YTAxMywgMHgwMDE5LCAweGEwMTcsCi0JMHgwMDAxLCAweDI4MDAsIDB4YTA1YSwgMHgyMDAxLCAweDAwMzAsIDB4MjAwNCwgMHhhODY2LCAweDIwMDEsCi0JMHgwMDMxLCAweDIwMDQsIDB4YTg2YSwgMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LCAweGZmZjgsCi0JMHhhODZlLCAweGE4NzMsIDB4MDAwMCwgMHgyMDAxLCAweDAzMmEsIDB4MjAwMywgMHgwMDA0LCAweDIwMDEsCi0JMHgwMzAwLCAweDIwMDMsIDB4MDAwMCwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsCi0JMHgwMDA0LCAweDIwMGMsIDB4OTE4ZCwgMHgwMDAyLCAweDIxMDIsIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4ODFmZiwgMHgwMTQ4LCAweDA4MGMsIDB4MmE4ZiwgMHgxMTMwLCAweDkwMDYsCi0JMHgwODBjLCAweDI5YTMsIDB4OTAwNiwgMHgwODBjLCAweDI5ODYsIDB4MjAwMSwgMHgxOTc5LCAweDIwMDMsCi0JMHgwMDAwLCAweDc4ODQsIDB4OTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4M2MwMCwgMHgzYzBmLCAweDNjMWUsCi0JMHgzYmZkLCAweDNiZmQsIDB4M2JmZCwgMHgzYmZkLCAweDNiZmQsIDB4MDEyZSwgMHgwODA0LCAweDM0MjcsCi0JMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMGEsIDB4MGRiOCwgMHgyMDA5LCAweDAxMTQsCi0JMHgyMTA0LCAweDkwODUsIDB4MDgwMCwgMHgyMDBhLCAweDA4MGMsIDB4M2RlYywgMHgwMGYwLCAweDIwMDEsCi0JMHgwMTAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDBhLCAweDBkNDAsIDB4MjAwOSwgMHgwMTE0LCAweDIxMDQsCi0JMHg5MDg1LCAweDQwMDAsIDB4MjAwYSwgMHgwODBjLCAweDNkZWMsIDB4MDA3OCwgMHgwODBjLCAweDcxN2UsCi0JMHgxMTI4LCAweDAxMmUsIDB4MjAwOSwgMHgwMDE2LCAweDA4MDQsIDB4MzQyNCwgMHg4MWZmLCAweDAxMjgsCi0JMHgwMTJlLCAweDIwMjEsIDB4NDAwYiwgMHgwODA0LCAweDMzZjQsIDB4MjAwMSwgMHgwMTQxLCAweDIwMDQsCi0JMHhkMGRjLCAweDBkYjAsIDB4MDA4NiwgMHgwMDk2LCAweDAwYTYsIDB4MDBiNiwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGU2LCAweDAwZjYsIDB4MDgwYywgMHgzOTI3LCAweDIwMDksIDB4MDEwMSwgMHgyMTBjLCAweDAwMTYsCi0JMHg3ZWM4LCAweDdkY2MsIDB4OTAwNiwgMHgyMDY4LCAweDIwNjAsIDB4MjA1OCwgMHgwODBjLCAweDQxMDAsCi0JMHgwODBjLCAweDQwNTAsIDB4OTAzZSwgMHgyNzIwLCAweDAwZjYsIDB4MDBlNiwgMHgwMDg2LCAweDI5NDAsCi0JMHgyMDcxLCAweDFhNDIsIDB4MjA3OSwgMHgwMDkwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4ODQsCi0JMHhkMGI0LCAweDAxMjAsIDB4NjhkNCwgMHg3ODBlLCAweDY4ZDAsIDB4NzgwYSwgMHgwMGRlLCAweDIwMTEsCi0JMHgwMDAxLCAweDA4MGMsIDB4M2ZiMSwgMHgwODBjLCAweDJhOTcsIDB4MDgwYywgMHgyYTk3LCAweDA4MGMsCi0JMHgyYTk3LCAweDA4MGMsIDB4MmE5NywgMHgwODBjLCAweDNmYjEsIDB4MDA4ZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwODBjLCAweDNlZDMsIDB4MjAwOSwgMHg5YzQwLCAweDgxMDksIDB4MTFiMCwgMHgwODBjLCAweDNkYTIsCi0JMHgyMDAxLCAweDAwMDQsIDB4MjAwYywgMHg5MThjLCAweGZmZmQsIDB4MjEwMiwgMHgwMDFlLCAweDAwZmUsCi0JMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDAwYWUsIDB4MDA5ZSwgMHgwMDhlLCAweDIwMDksCi0JMHgwMDE3LCAweDA4MGMsIDB4MzQyNCwgMHgwY2Y4LCAweDIwMDEsIDB4MDIwYiwgMHgyMDA0LCAweDkwODQsCi0JMHgwMTQwLCAweDFkMTAsIDB4MDBmNiwgMHgyMDc5LCAweDAwMDAsIDB4Nzg4NCwgMHgwMGZlLCAweGQwYmMsCi0JMHgwMTc4LCAweDIwMDEsIDB4MDIwMSwgMHgyMDBjLCAweDgxZmYsIDB4MDE1MCwgMHgwODBjLCAweDNlYjEsCi0JMHgyZDAwLCAweDljMDUsIDB4OWIwNSwgMHgwMTIwLCAweDA4MGMsIDB4M2RhMiwgMHgwODA0LCAweDNkNDIsCi0JMHgwODBjLCAweDQwMjUsIDB4MDgwYywgMHgzZjQ5LCAweDA4MGMsIDB4M2U5NCwgMHgwODBjLCAweDNlYzksCi0JMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHg3ODI0LCAweGQwYWMsIDB4MDEzMCwgMHg4YjU4LCAweDA4MGMsCi0JMHgzZGEyLCAweDAwZmUsIDB4MDgwNCwgMHgzZDQyLCAweDAwZmUsIDB4MDgwYywgMHgzZDk4LCAweDExNTAsCi0JMHg4ZDY4LCAweDIwMDEsIDB4MDAzMiwgMHgyNjAyLCAweDIwMDEsIDB4MDAzMywgMHgyNTAyLCAweDA4MGMsCi0JMHgzZGEyLCAweDAwODAsIDB4ODdmZiwgMHgwMTM4LCAweDIwMDEsIDB4MDIwMSwgMHgyMDA0LCAweDkwMDUsCi0JMHgxOTA4LCAweDg3MzksIDB4MDAzOCwgMHgyMDAxLCAweDFhM2YsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDAsCi0JMHgxOTA0LCAweDNjOTIsIDB4MjAwMSwgMHgwMzJmLCAweDIwMDMsIDB4MDBmNiwgMHg4NjMxLCAweDEyMDgsCi0JMHg4NTI5LCAweDI1MDAsIDB4OTYwNSwgMHgwOTA0LCAweDNkNDIsIDB4Nzg4NCwgMHhkMGJjLCAweDAxMjgsCi0JMHgyZDAwLCAweDljMDUsIDB4OWIwNSwgMHgxOTA0LCAweDNkNDIsIDB4YTAxMywgMHgwMDE5LCAweDIwMDEsCi0JMHgwMzJhLCAweDIwMDMsIDB4MDAwNCwgMHg3ODg0LCAweGQwYWMsIDB4MTE0OCwgMHgyMDAxLCAweDFhM2YsCi0JMHgyMDAzLCAweDAwMDMsIDB4MjAwMSwgMHgwMzJhLCAweDIwMDMsIDB4MDAwOSwgMHgwMDMwLCAweGEwMTcsCi0JMHgwMDAxLCAweDc4YjQsIDB4OTAwNSwgMHgwMTA4LCAweGEwMTYsIDB4MjgwMCwgMHhhMDVhLCAweDIwMDksCi0JMHgwMDQwLCAweDA4MGMsIDB4MjIwMCwgMHgyOTAwLCAweGE4NWEsIDB4YTgxMywgMHgwMDE5LCAweDc4ODQsCi0JMHhkMGE0LCAweDExODAsIDB4YTgxNywgMHgwMDAwLCAweDAwYzYsIDB4MjBhOSwgMHgwMDA0LCAweDIwNjEsCi0JMHgwMDkwLCAweDYwMmIsIDB4MDAwOCwgMHgyMDAxLCAweDAyMDMsIDB4MjAwNCwgMHgxZjA0LCAweDNkMTksCi0JMHgwMGNlLCAweDAwMzAsIDB4YTgxNywgMHgwMDAxLCAweDc4YjAsIDB4OTAwNSwgMHgwMTA4LCAweGE4MTYsCi0JMHgwMGY2LCAweDAwYzYsIDB4MjA3OSwgMHgwMTAwLCAweDIwNjEsIDB4MDA5MCwgMHg3ODI3LCAweDAwMDIsCi0JMHgyMDAxLCAweDAwMmEsIDB4MjAwNCwgMHg5MDg0LCAweGZmZjgsIDB4NjAxYSwgMHgwMDA2LCAweDIwMDEsCi0JMHgwMDJiLCAweDIwMDQsIDB4NjAxZSwgMHg3OGM2LCAweDAwMGUsIDB4NzhjYSwgMHgwMGNlLCAweDAwZmUsCi0JMHgwODA0LCAweDNjNGMsIDB4MDAxZSwgMHgwMGM2LCAweDIwMDEsIDB4MDMyYSwgMHgyMDAzLCAweDAwMDQsCi0JMHgyMDYxLCAweDAxMDAsIDB4NjAyNywgMHgwMDAyLCAweDYxMDYsIDB4MjAxMSwgMHgwMjBkLCAweDIwMTMsCi0JMHgwMDIwLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLCAweDkxOGMsIDB4ZmZmZCwgMHgyMTAyLCAweDA4MGMsCi0JMHgxMmZlLCAweDc4ODQsIDB4OTA4NCwgMHgwMDAzLCAweDkwODYsIDB4MDAwMiwgMHgwNTA4LCAweDIwMDksCi0JMHgwMDI4LCAweDA4MGMsIDB4MjIwMCwgMHgyMDAxLCAweDAyMjcsIDB4MjAwYywgMHgyMTAyLCAweDYwNTAsCi0JMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwYSwgMHgwMDBlLCAweDAxMTgsCi0JMHg5MDg0LCAweGI3ZWYsIDB4MDAyMCwgMHg5MDg0LCAweGI3ZmYsIDB4MDgwYywgMHgyYmRjLCAweDYwNTIsCi0JMHg2MDJmLCAweDAwMDAsIDB4NjA0YiwgMHhmN2Y3LCAweDYwNDMsIDB4MDA5MCwgMHg2MDQzLCAweDAwMTAsCi0JMHgwMGNlLCAweDJkMDgsIDB4MmMxMCwgMHgyYjE4LCAweDJiMDAsIDB4OWMwNSwgMHg5ZDA1LCAweDAwZmUsCi0JMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDAwYWUsIDB4MDA5ZSwgMHgwMDhlLCAweDExMTgsCi0JMHgwMTJlLCAweDA4MDQsIDB4MzNmMiwgMHgwMTJlLCAweDIwMjEsIDB4NDAwYywgMHgwODA0LCAweDMzZjQsCi0JMHg5MDg1LCAweDAwMDEsIDB4MWQwNCwgMHgzZGExLCAweDIwOTEsIDB4NjAwMCwgMHg4NDIwLCAweDk0ODYsCi0JMHgwMDY0LCAweDAwMDUsIDB4MjAwMSwgMHgwMTA1LCAweDIwMDMsIDB4MDAxMCwgMHgyMDAxLCAweDAzMmEsCi0JMHgyMDAzLCAweDAwMDQsIDB4MjAwMSwgMHgxYTNmLCAweDIwMDMsIDB4MDAwMCwgMHgwMDcxLCAweDIwMDksCi0JMHgwMDQ4LCAweDA4MGMsIDB4MjIwMCwgMHgyMDAxLCAweDAyMjcsIDB4MjAyNCwgMHgyNDAyLCAweDIwMDEsCi0JMHgwMTA5LCAweDIwMDMsIDB4NDAwMCwgMHg5MDI2LCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDIwNzEsCi0JMHgxYTQyLCAweDcwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDA1MjAsIDB4MjA3OSwgMHgwMDkwLCAweDIwMDksCi0JMHgwMjA2LCAweDIxMDQsIDB4MjAwOSwgMHgwMjAzLCAweDIxMGMsIDB4OTEwNiwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDQwLCAweDA4MGMsIDB4MjIwMCwgMHg3ODJjLCAweGQwZmMsIDB4MGQ4OCwgMHgwODBjLCAweDQwMjUsCi0JMHg3MDAwLCAweDkwODYsIDB4MDAwMCwgMHgxZDU4LCAweDc4MmIsIDB4MDAwNCwgMHg3ODJjLCAweGQwYWMsCi0JMHgxZGU4LCAweDIwMDksIDB4MDA0MCwgMHgwODBjLCAweDIyMDAsIDB4NzgyYiwgMHgwMDAyLCAweDcwMDMsCi0JMHgwMDAwLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsCi0JMHgwMDBhLCAweDE1ZDAsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsIDB4MjAwMSwgMHgxODE3LCAweDIwMGMsCi0JMHg3OTMyLCAweDc5MzYsIDB4MDgwYywgMHgyNmI2LCAweDA4MGMsIDB4MmJhOSwgMHgwODBjLCAweDJiZGMsCi0JMHg3ODRiLCAweGY3ZjcsIDB4Nzg0MywgMHgwMDkwLCAweDc4NDMsIDB4MDAxMCwgMHg3ODUwLCAweGMwZTUsCi0JMHg3ODUyLCAweDIwMTksIDB4NjFhOCwgMHg3ODIwLCAweGQwOWMsIDB4MDExMCwgMHg4MzE5LCAweDFkZDgsCi0JMHg3ODUwLCAweGMwZTQsIDB4Nzg1MiwgMHg3ODI3LCAweDAwNDgsIDB4Nzg0MywgMHgwMDQwLCAweDIwMTksCi0JMHgwMWY0LCAweGEwMDEsIDB4YTAwMSwgMHg4MzE5LCAweDFkZTAsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsCi0JMHgyYjZmLCAweDc4MjcsIDB4MDAyMCwgMHg3ODQzLCAweDAwMDAsIDB4OTAwNiwgMHgwODBjLCAweDJiNmYsCi0JMHg3ODI3LCAweDAwNDgsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDIwMDEsCi0JMHgxODE3LCAweDIwMGMsIDB4NzkzMiwgMHg3OTM2LCAweDA4MGMsIDB4MjZiNiwgMHg3ODUwLCAweDkwODQsCi0JMHhmYmZmLCAweDkwODUsIDB4MDAzMCwgMHg3ODUyLCAweDIwMTksIDB4MDFmNCwgMHg4MzE5LCAweDFkZjAsCi0JMHg5MDg0LCAweGZmY2YsIDB4OTA4NSwgMHgyMDAwLCAweDc4NTIsIDB4MjBhOSwgMHgwMDQ2LCAweDFkMDQsCi0JMHgzZTQ3LCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LCAweDNlNDcsIDB4Nzg1MCwgMHg5MDg1LCAweDA0MDAsCi0JMHg5MDg0LCAweGRmZmYsIDB4Nzg1MiwgMHgyMDAxLCAweDAwMjEsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDMsCi0JMHg5MDg2LCAweDAwMDEsIDB4MTEyMCwgMHg3ODUwLCAweDkwODQsIDB4ZGZmZiwgMHg3ODUyLCAweDc4NGIsCi0JMHhmN2Y3LCAweDc4NDMsIDB4MDA5MCwgMHg3ODQzLCAweDAwMTAsIDB4MjBhOSwgMHgwMDI4LCAweGEwMDEsCi0JMHgxZjA0LCAweDNlNjcsIDB4Nzg1MCwgMHg5MDg1LCAweDE0MDAsIDB4Nzg1MiwgMHgyMDE5LCAweDYxYTgsCi0JMHg3ODU0LCAweGEwMDEsIDB4YTAwMSwgMHhkMDhjLCAweDExMTAsIDB4ODMxOSwgMHgxZGM4LCAweDc4MjcsCi0JMHgwMDQ4LCAweDc4NTAsIDB4OTA4NSwgMHgwNDAwLCAweDc4NTIsIDB4Nzg0MywgMHgwMDQwLCAweDIwMTksCi0JMHgwMWY0LCAweGEwMDEsIDB4YTAwMSwgMHg4MzE5LCAweDFkZTAsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsCi0JMHgyYjZmLCAweDc4MjcsIDB4MDAyMCwgMHg3ODQzLCAweDAwMDAsIDB4OTAwNiwgMHgwODBjLCAweDJiNmYsCi0JMHg3ODI3LCAweDAwNDgsIDB4MDBmZSwgMHgwMDA1LCAweDc4ODQsIDB4ZDBhYywgMHgxMWM4LCAweDAwZjYsCi0JMHgwMGU2LCAweDIwNzEsIDB4MWEzZiwgMHgyMDc5LCAweDAzMjAsIDB4MjAwMSwgMHgwMjAxLCAweDIwMDQsCi0JMHg5MDA1LCAweDAxNjAsIDB4NzAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MTE0MCwgMHgwMDUxLCAweGQwYmMsCi0JMHgwMTA4LCAweDg3MzgsIDB4NzAwMywgMHgwMDAzLCAweDc4MmIsIDB4MDAxOSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLCAweDc4YmMsIDB4MDBmZSwgMHg5MDhjLCAweDAwNzAsCi0JMHgwMTc4LCAweDIwMDksIDB4MDAzMiwgMHgyNjBhLCAweDIwMDksIDB4MDAzMywgMHgyNTBhLCAweGQwYjQsCi0JMHgwMTA4LCAweDhjNjAsIDB4ZDBhYywgMHgwMTA4LCAweDhkNjgsIDB4ZDBhNCwgMHgwMTA4LCAweDhiNTgsCi0JMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMjAwLCAweDc4MWMsIDB4ZDA4NCwgMHgwMTEwLCAweDc4MzcsCi0JMHgwMDUwLCAweDAwZmUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDEwMCwgMHgyMDAxLCAweDE5ODUsCi0JMHgyMDA0LCAweDcwZTIsIDB4MDgwYywgMHgzYjYxLCAweDExODgsIDB4MjAwMSwgMHgxODFmLCAweDIwMDQsCi0JMHgyMDA5LCAweDE4MWUsIDB4MjEwYywgMHg5MThjLCAweDAwZmYsIDB4NzA2ZSwgMHg3MTZhLCAweDcwNjYsCi0JMHg5MThkLCAweDMyMDAsIDB4NzE2MiwgMHg3MDczLCAweGUxMDksIDB4MDA4MCwgMHg3MDJjLCAweDkwODUsCi0JMHgwMDAyLCAweDcwMmUsIDB4MjAwOSwgMHgxODE3LCAweDIxMGMsIDB4NzE2ZSwgMHg3MDYzLCAweDAxMDAsCi0JMHg3MTY2LCAweDcxOWUsIDB4NzA2YiwgMHgwMDAwLCAweDcwNzMsIDB4MDgwOSwgMHg3MDc3LCAweDAwMDgsCi0JMHg3MDc4LCAweDkwODAsIDB4MDEwMCwgMHg3MDdhLCAweDcwODAsIDB4ODAwMCwgMHg3MDgyLCAweDcwODcsCi0JMHhhYWFhLCAweDkwMDYsIDB4NzA4YSwgMHg3MDhlLCAweDcwN2UsIDB4NzBkNiwgMHg3MGFiLCAweDAwMzYsCi0JMHg3MGFmLCAweDk1ZDUsIDB4NzAxNCwgMHg5MDg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDkyLCAweDcwMTYsCi0JMHgwODBjLCAweDQwMjUsIDB4MDBmNiwgMHgyMDcxLCAweDFhM2YsIDB4MjA3OSwgMHgwMzIwLCAweDAwZDYsCi0JMHgyMDY5LCAweDAwMDAsIDB4Njg4NCwgMHhkMGI0LCAweDAxMjAsIDB4Njg5YywgMHg3ODBlLCAweDY4OTgsCi0JMHg3ODBhLCAweDAwZGUsIDB4MDgwYywgMHgzYjYxLCAweDAxNDAsIDB4MjAwMSwgMHgxOTc5LCAweDIwMGMsCi0JMHgyMDAzLCAweDAwMDEsIDB4OTE4ZSwgMHgwMDAxLCAweDAxMjAsIDB4MjAwOSwgMHgwM2U4LCAweDgxMDksCi0JMHgxZGYwLCAweDc5MmMsIDB4ZDFmYywgMHgwMTEwLCAweDc4MmIsIDB4MDAwNCwgMHgyMDExLCAweDAwMTEsCi0JMHgwODBjLCAweDNmYjEsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsIDB4M2ZiMSwgMHgwMGZlLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZjYsIDB4MDBlNiwgMHgyMDcxLCAweDFhM2YsIDB4MjA3OSwgMHgwMzIwLCAweDc5MmMsCi0JMHhkMWZjLCAweDA5MDQsIDB4M2ZhZSwgMHg3ODJiLCAweDAwMDIsIDB4OTAyNiwgMHhkMTljLCAweDE5MDQsCi0JMHgzZmFhLCAweDcwMDAsIDB4MDAwMiwgMHgzZmFlLCAweDNmNWYsIDB4M2Y4ZiwgMHgzZmFhLCAweGQxYmMsCi0JMHgxMTcwLCAweGQxZGMsIDB4MTE5MCwgMHg4MDAxLCAweDcwMDIsIDB4MjAxMSwgMHgwMDAxLCAweDA4MGMsCi0JMHgzZmIxLCAweDA5MDQsIDB4M2ZhZSwgMHgwODBjLCAweDNmYjEsIDB4MDgwNCwgMHgzZmFlLCAweDAwZjYsCi0JMHgyMDc5LCAweDAzMDAsIDB4NzhiZiwgMHgwMDAwLCAweDAwZmUsIDB4NzgxMCwgMHg3OTE0LCAweDc4MmIsCi0JMHgwMDA0LCAweDc4MTIsIDB4NzkxNiwgMHgyMDAxLCAweDAyMDEsIDB4MjAwYywgMHg4MWZmLCAweDBkZTgsCi0JMHgwODBjLCAweDNlYjEsIDB4MjAwOSwgMHgwMDAxLCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLCAweDc4YjgsCi0JMHgwMGZlLCAweGQwZWMsIDB4MDExMCwgMHgyMDA5LCAweDAwMTEsIDB4NzkyYSwgMHgwMGY4LCAweDgwMDEsCi0JMHg3MDAyLCAweDkxODQsIDB4MDg4MCwgMHgxMTQwLCAweDc4MmMsIDB4ZDBmYywgMHgxOTA0LCAweDNmNTMsCi0JMHgyMDExLCAweDAwMDEsIDB4MDBiMSwgMHgwMDkwLCAweGEwMTAsIDB4OTA5MiwgMHgwMDA0LCAweDkwODYsCi0JMHgwMDE1LCAweDExMjAsIDB4YTAwMCwgMHhhMDVhLCAweDIwMTEsIDB4MDAzMSwgMHhhMjEyLCAweGQxZGMsCi0JMHgxOTYwLCAweDA4MjgsIDB4NzgyYiwgMHgwMDA0LCAweDcwMDMsIDB4MDAwMCwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweGEwMTQsIDB4OTAwNSwgMHgwNTUwLCAweDgwMDEsIDB4MDAzNiwgMHgwMDk2LCAweGEwMTYsCi0JMHhhMDU4LCAweDIwNDgsIDB4YTAxMCwgMHgyMDA5LCAweDAwMzEsIDB4OTExYSwgMHg4MzFjLCAweDgzMWMsCi0JMHg5MzhhLCAweDAwMDcsIDB4MWEwYywgMHgwZGY2LCAweDkzOTgsIDB4M2ZkZiwgMHgyMzFkLCAweDA4M2YsCi0JMHg5MDgwLCAweDAwMDQsIDB4N2EyYSwgMHg3MTAwLCAweDgxMDgsIDB4NzEwMiwgMHgwMDllLCAweDAwM2UsCi0JMHg5MDhhLCAweDAwMzUsIDB4MTE0MCwgMHgwMDk2LCAweGEwNTgsIDB4MjA0OCwgMHhhODA0LCAweGEwNWEsCi0JMHgyMDAxLCAweDAwMTksIDB4MDA5ZSwgMHhhMDEyLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDQwMWMsCi0JMHg0MDEzLCAweDQwMGEsIDB4NDAwMSwgMHgzZmY4LCAweDNmZWYsIDB4M2ZlNiwgMHhhOTY0LCAweDc5MDIsCi0JMHhhOTY4LCAweDc5MDYsIDB4YTk2YywgMHg3OTEyLCAweGE5NzAsIDB4NzkxNiwgMHgwMDA1LCAweGE5NzQsCi0JMHg3OTAyLCAweGE5NzgsIDB4NzkwNiwgMHhhOTdjLCAweDc5MTIsIDB4YTk4MCwgMHg3OTE2LCAweDAwMDUsCi0JMHhhOTg0LCAweDc5MDIsIDB4YTk4OCwgMHg3OTA2LCAweGE5OGMsIDB4NzkxMiwgMHhhOTkwLCAweDc5MTYsCi0JMHgwMDA1LCAweGE5OTQsIDB4NzkwMiwgMHhhOTk4LCAweDc5MDYsIDB4YTk5YywgMHg3OTEyLCAweGE5YTAsCi0JMHg3OTE2LCAweDAwMDUsIDB4YTlhNCwgMHg3OTAyLCAweGE5YTgsIDB4NzkwNiwgMHhhOWFjLCAweDc5MTIsCi0JMHhhOWIwLCAweDc5MTYsIDB4MDAwNSwgMHhhOWI0LCAweDc5MDIsIDB4YTliOCwgMHg3OTA2LCAweGE5YmMsCi0JMHg3OTEyLCAweGE5YzAsIDB4NzkxNiwgMHgwMDA1LCAweGE5YzQsIDB4NzkwMiwgMHhhOWM4LCAweDc5MDYsCi0JMHhhOWNjLCAweDc5MTIsIDB4YTlkMCwgMHg3OTE2LCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwODYsCi0JMHgyMDcxLCAweDFhNDIsIDB4MjA3OSwgMHgwMDkwLCAweDc5MmMsIDB4ZDFmYywgMHgwMWU4LCAweDc4MmIsCi0JMHgwMDAyLCAweDI5NDAsIDB4OTAyNiwgMHg3MDAwLCAweDAwMDIsIDB4NDA0YywgMHg0MDM4LCAweDQwNDMsCi0JMHg4MDAxLCAweDcwMDIsIDB4ZDE5YywgMHgxMTgwLCAweDIwMTEsIDB4MDAwMSwgMHgwODBjLCAweDNmYjEsCi0JMHgxOTBjLCAweDNmYjEsIDB4MDA0OCwgMHg4MDAxLCAweDcwMDIsIDB4NzgyYywgMHhkMGZjLCAweDFkMzgsCi0JMHgyMDExLCAweDAwMDEsIDB4MDgwYywgMHgzZmIxLCAweDAwOGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCi0JMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgwMDg2LCAweDIwNjEsIDB4MDIwMCwgMHgyMDAxLCAweDE5ODUsCi0JMHgyMDA0LCAweDYwMWEsIDB4MjA2MSwgMHgwMTAwLCAweDIwMDEsIDB4MTk4NCwgMHgyMDA0LCAweDYwY2UsCi0JMHg2MTA0LCAweGMxYWMsIDB4NjEwNiwgMHgyMDAxLCAweDAwMmMsIDB4MjAwNCwgMHg5MDA1LCAweDA1MjAsCi0JMHgyMDM4LCAweDIwMDEsIDB4MDAyZSwgMHgyMDI0LCAweDIwMDEsIDB4MDAyZiwgMHgyMDFjLCAweDA4MGMsCi0JMHg0OWI3LCAweGE4MTMsIDB4MDAxOSwgMHhhZjE2LCAweDI5MDAsIDB4YTg1YSwgMHg5NzhhLCAweDAwMDcsCi0JMHgwMjIwLCAweDIxMzgsIDB4MjAwOSwgMHgwMDA3LCAweDAwMTAsIDB4MjcwOCwgMHg5MDNlLCAweDAwOTYsCi0JMHhhODU4LCAweDIwNDgsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4MDA5ZSwgMHgwODBjLCAweDQwYzgsCi0JMHgxZDY4LCAweDI5MDAsIDB4YTg1YSwgMHgwMGQwLCAweDA4MGMsIDB4NDliNywgMHhhODEzLCAweDAwMTksCi0JMHhhODE3LCAweDAwMDEsIDB4MjkwMCwgMHhhODVhLCAweDIwMDEsIDB4MDAyZSwgMHgyMDA0LCAweGE4NjYsCi0JMHgyMDAxLCAweDAwMmYsIDB4MjAwNCwgMHhhODZhLCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODQsCi0JMHhmZmY4LCAweGE4NmUsIDB4MjAwMSwgMHgwMDJiLCAweDIwMDQsIDB4YTg3MiwgMHgyMDYxLCAweDAwOTAsCi0JMHgyMDc5LCAweDAxMDAsIDB4MjAwMSwgMHgxOTg0LCAweDIwMDQsIDB4NjAzNiwgMHgyMDA5LCAweDAwNDAsCi0JMHgwODBjLCAweDIyMDAsIDB4MjAwMSwgMHgwMDJhLCAweDIwMDQsIDB4OTA4NCwgMHhmZmY4LCAweDYwMWEsCi0JMHgwMDA2LCAweDIwMDEsIDB4MDAyYiwgMHgyMDA0LCAweDYwMWUsIDB4NzhjNiwgMHgwMDBlLCAweDc4Y2EsCi0JMHg5MDA2LCAweDYwMGEsIDB4NjAwZSwgMHgwMDhlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCi0JMHgwMGU2LCAweDIwNzEsIDB4MDA4MCwgMHhhYTYwLCAweDIyZTgsIDB4MjBhMCwgMHgyMGUxLCAweDAwMDAsCi0JMHgyMDk5LCAweDAwODgsIDB4NzAyYiwgMHgwMDI2LCAweDc0MDIsIDB4NzMwNiwgMHg5MDA2LCAweDcwMGEsCi0JMHg3MDBlLCAweDgxMGIsIDB4ODEwYiwgMHgyMWE4LCAweDgxMGIsIDB4NzExMiwgMHg3MDJiLCAweDAwNDEsCi0JMHg3MDJjLCAweGQwZmMsIDB4MGRlOCwgMHg3MDJiLCAweDAwMDIsIDB4NzAyYiwgMHgwMDQwLCAweDQwMDUsCi0JMHg3NDAwLCAweDczMDQsIDB4ODdmZiwgMHgwMTkwLCAweDAwODYsIDB4MDA5NiwgMHgyOTQwLCAweDAwODYsCi0JMHgwODBjLCAweDQ5YjcsIDB4MDA4ZSwgMHhhMDU4LCAweDAwYTYsIDB4MjA1MCwgMHgyOTAwLCAweGIwMDYsCi0JMHhhMDVhLCAweDAwYWUsIDB4MDA5ZSwgMHgwMDhlLCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMGU2LCAweDIwMDEsIDB4MDAyZCwgMHgyMDA0LCAweDkwMDUsIDB4MDUyOCwgMHgyMDM4LCAweDIwMDEsCi0JMHgwMDMwLCAweDIwMjQsIDB4MjAwMSwgMHgwMDMxLCAweDIwMWMsIDB4MDgwYywgMHg0OWI3LCAweDI5NDAsCi0JMHhhODEzLCAweDAwMTksIDB4YWYxNiwgMHgyOTAwLCAweGE4NWEsIDB4OTc4YSwgMHgwMDA3LCAweDAyMjAsCi0JMHgyMTM4LCAweDIwMDksIDB4MDAwNywgMHgwMDEwLCAweDI3MDgsIDB4OTAzZSwgMHgwMDk2LCAweGE4NTgsCi0JMHgyMDQ4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDAwOWUsIDB4MDgwYywgMHg0MGM4LCAweDFkNjgsCi0JMHgyOTAwLCAweGE4NWEsIDB4MDBkOCwgMHgwODBjLCAweDQ5YjcsIDB4Mjk0MCwgMHhhMDEzLCAweDAwMTksCi0JMHhhMDE3LCAweDAwMDEsIDB4MjgwMCwgMHhhMDVhLCAweDIwMDEsIDB4MDAzMCwgMHgyMDA0LCAweGEwNjYsCi0JMHgyMDAxLCAweDAwMzEsIDB4MjAwNCwgMHhhMDZhLCAweDIwMDEsIDB4MDAyYSwgMHgyMDA0LCAweDkwODQsCi0JMHhmZmY4LCAweGEwNmUsIDB4MjAwMSwgMHgwMDJiLCAweDIwMDQsIDB4YTA3MiwgMHgyMDAxLCAweDAzMmEsCi0JMHgyMDAzLCAweDAwMDQsIDB4Nzg4NCwgMHhkMGFjLCAweDExODAsIDB4MjAwMSwgMHgwMTAxLCAweDIwMGMsCi0JMHg5MThkLCAweDAyMDAsIDB4MjEwMiwgMHhhMDE3LCAweDAwMDAsIDB4MjAwMSwgMHgxYTNmLCAweDIwMDMsCi0JMHgwMDAzLCAweDIwMDEsIDB4MDMyYSwgMHgyMDAzLCAweDAwMDksIDB4MjAwMSwgMHgwMzAwLCAweDIwMDMsCi0JMHgwMDAwLCAweDIwMDEsIDB4MDIwZCwgMHgyMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMDA0LCAweDIwMGMsCi0JMHg5MThkLCAweDAwMDIsIDB4MjEwMiwgMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgyMGE5LCAweDAwMWIsIDB4MjBhMSwgMHgxODQwLCAweDIwZTksIDB4MDAwMSwgMHg5MDA2LCAweDQwMDQsCi0JMHgyMDA5LCAweDAxM2MsIDB4MjAwYSwgMHgwMTJlLCAweDc4ODAsIDB4OTA4NiwgMHgwMDUyLCAweDAxMDgsCi0JMHgwMDA1LCAweDA4MDQsIDB4MzNmMiwgMHg3ZDk4LCAweDdjOWMsIDB4MDgwNCwgMHgzNGY2LCAweDA4MGMsCi0JMHg3MTdlLCAweDE5MGMsIDB4NWRmNCwgMHgyMDY5LCAweDE4NWIsIDB4MmQwMCwgMHgyMDA5LCAweDAwMzAsCi0JMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweDIwMzksIDB4MDAwMSwgMHgwODBjLCAweDRhMDAsCi0JMHg3MDFmLCAweDQxOWIsIDB4MDAwNSwgMHgwODBjLCAweDU0ZWEsIDB4MTEzMCwgMHgzYjAwLCAweDNhMDgsCi0JMHhjMTk0LCAweGMwOTUsIDB4MjBkOCwgMHgyMWQwLCAweDIwNjksIDB4MTg1YiwgMHg2ODAwLCAweDkwMDUsCi0JMHgwOTA0LCAweDM0MjcsIDB4NjgwNCwgMHhkMDk0LCAweDAwYzYsIDB4MjA2MSwgMHgwMTAwLCAweDYxMDQsCi0JMHgwMTM4LCAweDYyMDAsIDB4OTI5MiwgMHgwMDA1LCAweDAyMTgsIDB4OTE4YywgMHhmZmRmLCAweDAwMTAsCi0JMHg5MThkLCAweDAwMjAsIDB4NjEwNiwgMHgwMGNlLCAweGQwOGMsIDB4MDBjNiwgMHgyMDYxLCAweDAxMDAsCi0JMHg2MTA0LCAweDAxMTgsIDB4OTE4ZCwgMHgwMDEwLCAweDAwMTAsIDB4OTE4YywgMHhmZmVmLCAweDYxMDYsCi0JMHgwMGNlLCAweGQwODQsIDB4MDE1OCwgMHg2YTI4LCAweDkyOGEsIDB4MDA3ZiwgMHgxYTA0LCAweDM0MjcsCi0JMHg5Mjg4LCAweDMxZjMsIDB4MjEwZCwgMHg5MThjLCAweDAwZmYsIDB4NjE2MiwgMHhkMGRjLCAweDAxMzAsCi0JMHg2ODI4LCAweDkwOGEsIDB4MDA3ZiwgMHgxYTA0LCAweDM0MjcsIDB4NjA1YSwgMHg2ODg4LCAweDkwODQsCi0JMHgwMDMwLCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDgwMDQsIDB4MDAwNiwgMHgyMDA5LCAweDE5OGMsCi0JMHg5MDgwLCAweDI3YTksIDB4MjAwNSwgMHgyMDBhLCAweDAwMGUsIDB4MjAwOSwgMHgxOThkLCAweDkwODAsCi0JMHgyN2FkLCAweDIwMDUsIDB4MjAwYSwgMHg2ODA4LCAweDkwOGEsIDB4MDEwMCwgMHgwYTA0LCAweDM0MjcsCi0JMHg5MDhhLCAweDA4NDEsIDB4MWEwNCwgMHgzNDI3LCAweDkwODQsIDB4MDAwNywgMHgxOTA0LCAweDM0MjcsCi0JMHg2ODBjLCAweDkwMDUsIDB4MDkwNCwgMHgzNDI3LCAweDY4MTAsIDB4OTAwNSwgMHgwOTA0LCAweDM0MjcsCi0JMHg2ODQ4LCAweDY5NDAsIDB4OTEwYSwgMHgxYTA0LCAweDM0MjcsIDB4ODAwMSwgMHgwOTA0LCAweDM0MjcsCi0JMHg2ODRjLCAweDY5NDQsIDB4OTEwYSwgMHgxYTA0LCAweDM0MjcsIDB4ODAwMSwgMHgwOTA0LCAweDM0MjcsCi0JMHgyMDA5LCAweDE5NWIsIDB4MjAwYiwgMHgwMDAwLCAweDIwMDEsIDB4MTg3ZCwgMHgyMDA0LCAweGQwYzQsCi0JMHgwMTQwLCAweDc4ODQsIDB4MjAwYSwgMHgyMDA4LCAweDA4MGMsIDB4MGU3YiwgMHgzYjAwLCAweGMwODUsCi0JMHgyMGQ4LCAweDY4MTQsIDB4OTA4YywgMHgwMGZmLCAweDYxNGEsIDB4ODAwNywgMHg5MDg0LCAweDAwZmYsCi0JMHg2MDRlLCAweDA4MGMsIDB4NzRhYiwgMHgwODBjLCAweDY3OTYsIDB4MDgwYywgMHg2N2Y5LCAweDY4MDgsCi0JMHg2MDJhLCAweDA4MGMsIDB4MjE3MiwgMHgyMDA5LCAweDAxNzAsIDB4MjAwYiwgMHgwMDgwLCAweGEwMDEsCi0JMHhhMDAxLCAweDIwMGIsIDB4MDAwMCwgMHgwMDM2LCAweDZiMDgsIDB4MDgwYywgMHgyNzEwLCAweDAwM2UsCi0JMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgxOTA0LCAweDQzMjYsIDB4NjgxOCwgMHg2OTFjLCAweDZhMjAsCi0JMHg2YjI0LCAweDgwMDcsIDB4ODEwZiwgMHg4MjE3LCAweDgzMWYsIDB4NjAxNiwgMHg2MTFhLCAweDYyMWUsCi0JMHg2MzIyLCAweDZjMDQsIDB4ZDRmNCwgMHgwMTQ4LCAweDY4MzAsIDB4NjkzNCwgMHg2YTM4LCAweDZiM2MsCi0JMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDAwMTAsIDB4OTA4NCwgMHhmMGZmLCAweDYwMDYsCi0JMHg2MTBhLCAweDYyMGUsIDB4NjMxMiwgMHg4MDA3LCAweDgxMGYsIDB4ODIxNywgMHg4MzFmLCAweDIwYTksCi0JMHgwMDA0LCAweDIwYTEsIDB4MTk4ZSwgMHgyMGU5LCAweDAwMDEsIDB4NDAwMSwgMHgyMGE5LCAweDAwMDQsCi0JMHgyMGExLCAweDE5YTgsIDB4MjBlOSwgMHgwMDAxLCAweDQwMDEsIDB4MDgwYywgMHg4MzYyLCAweDAwYzYsCi0JMHg5MDBlLCAweDIwYTksIDB4MDAwMSwgMHg2YjcwLCAweGQzODQsIDB4MDFjOCwgMHgwMDIwLCAweDgzOWQsCi0JMHgxMmIwLCAweDM1MDgsIDB4ODEwOSwgMHgwODBjLCAweDdhNzcsIDB4Njg3OCwgMHg2MDE2LCAweDY4NzQsCi0JMHgyMDA4LCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDYwMGEsIDB4OTE4NCwgMHgwMGZmLCAweDYwMDYsCi0JMHg4MTA4LCAweDExMTgsIDB4NjAwMywgMHgwMDAzLCAweDAwMTAsIDB4NjAwMywgMHgwMDAxLCAweDFmMDQsCi0JMHg0Mjg3LCAweDAwY2UsIDB4MDBjNiwgMHgyMDYxLCAweDE5NzYsIDB4MjA2MywgMHgwMDAxLCAweDkwMDYsCi0JMHgwODBjLCAweDI5YTMsIDB4OTAwNiwgMHgwODBjLCAweDI5ODYsIDB4MDAwMCwgMHgwMGNlLCAweDAwZTYsCi0JMHgyYzcwLCAweDA4MGMsIDB4MGVjYywgMHgwMGVlLCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsCi0JMHgwMDBhLCAweDExMjAsIDB4MDgwYywgMHgyYmE5LCAweDA4MGMsIDB4MmJkYywgMHg2ODg4LCAweGQwZWMsCi0JMHgwMTk4LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsIDB4MDAwYSwgMHgwMTM4LCAweDIwMTEsCi0JMHgwMTE0LCAweDIyMDQsIDB4OTA4NSwgMHgwMTAwLCAweDIwMTIsIDB4MDAzMCwgMHgyMDExLCAweDAxMTQsCi0JMHgyMjA0LCAweDkwODUsIDB4MDE4MCwgMHgyMDEyLCAweDZhODAsIDB4OTI4NCwgMHgwMDMwLCAweDkwODYsCi0JMHgwMDMwLCAweDExMjgsIDB4OTI5NCwgMHhmZmNmLCAweDkyOTUsIDB4MDAyMCwgMHg2YTgyLCAweDIwMDEsCi0JMHgxOTU2LCAweDZhODAsIDB4OTI5NCwgMHgwMDMwLCAweDkyOGUsIDB4MDAwMCwgMHgwMTcwLCAweDkyOGUsCi0JMHgwMDEwLCAweDAxMTgsIDB4OTI4ZSwgMHgwMDIwLCAweDAxNDAsIDB4MjAwMywgMHhhYWFhLCAweDA4MGMsCi0JMHgyNzg1LCAweDIwMDEsIDB4MTk0NywgMHgyMTAyLCAweDAwMDgsIDB4MjEwMiwgMHgwMGM2LCAweDIwNjEsCi0JMHgwMTAwLCAweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsIDB4MDBjZSwgMHgwODBjLCAweDcxN2UsCi0JMHgwMTI4LCAweDA4MGMsIDB4NGRkMSwgMHgwMTEwLCAweDA4MGMsIDB4MjZkNiwgMHg2MGQwLCAweDkwMDUsCi0JMHgwMWMwLCAweDYwMDMsIDB4MDAwMSwgMHgyMDA5LCAweDQzMGUsIDB4MDBkMCwgMHgwODBjLCAweDcxN2UsCi0JMHgxMTY4LCAweDIwMTEsIDB4NmZlZCwgMHgwODBjLCAweDgyNTksIDB4MjAxMSwgMHg2ZmUwLCAweDA4MGMsCi0JMHg4MzJkLCAweDA4MGMsIDB4NzQ3ZiwgMHgwODBjLCAweDcwOWUsIDB4MDA0MCwgMHgwODBjLCAweDVjZWUsCi0JMHgwMDI4LCAweDYwMDMsIDB4MDAwNCwgMHgyMDA5LCAweDQzMjYsIDB4MDAxMCwgMHgwODA0LCAweDMzZjIsCi0JMHgyMDAxLCAweDAxNzAsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDRjLCAweDExMTgsCi0JMHgyMDkxLCAweDMwYmQsIDB4MDgxNywgMHgyMDkxLCAweDMwM2QsIDB4MDgxNywgMHg2MDAwLCAweDkwODYsCi0JMHgwMDAwLCAweDA5MDQsIDB4MzQyNCwgMHgyMDY5LCAweDE4NWIsIDB4Nzg5MCwgMHg2ODQyLCAweDc4OTQsCi0JMHg2ODQ2LCAweDJkMDAsIDB4MjAwOSwgMHgwMDMwLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsCi0JMHgyMDM5LCAweDAwMDEsIDB4MDgwNCwgMHg0YTAzLCAweDkwMDYsIDB4MDgwYywgMHgyNmQ2LCAweDgxZmYsCi0JMHgxOTA0LCAweDM0MjQsIDB4MDgwYywgMHg3MTdlLCAweDExYjAsIDB4MDgwYywgMHg3NDdhLCAweDA4MGMsCi0JMHg1ZTJmLCAweDA4MGMsIDB4MzFlZSwgMHgwMTE4LCAweDYxMzAsIDB4YzE4ZCwgMHg2MTMyLCAweDA4MGMsCi0JMHhjNDU5LCAweDAxMzAsIDB4MDgwYywgMHg3MWExLCAweDExMTgsIDB4MDgwYywgMHg3MTU2LCAweDAwMzgsCi0JMHgwODBjLCAweDcwOWUsIDB4MDAyMCwgMHgwODBjLCAweDVkZjQsIDB4MDgwYywgMHg1Y2VlLCAweDA4MDQsCi0JMHgzM2YyLCAweDgxZmYsIDB4MTkwNCwgMHgzNDI0LCAweDA4MGMsIDB4NzE3ZSwgMHgxMTEwLCAweDA4MDQsCi0JMHgzNDI0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDYxOTAsIDB4ODFmZiwgMHgwMTkwLCAweDcwNGYsCi0JMHgwMDAwLCAweDIwMDEsIDB4MWM4MCwgMHgyMDA5LCAweDAwNDAsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsCi0JMHg3ZDk4LCAweDIwMzksIDB4MDAwMSwgMHgwODBjLCAweDRhMDMsIDB4NzAxZiwgMHgzM2YwLCAweDAxMmUsCi0JMHgwMDA1LCAweDcwNGYsIDB4MDAwMSwgMHgwMGQ2LCAweDIwNjksIDB4MWM4MCwgMHgyMGE5LCAweDAwNDAsCi0JMHgyMGU5LCAweDAwMDEsIDB4MjBhMSwgMHgxYzgwLCAweDIwMTksIDB4ZmZmZiwgMHg0MzA0LCAweDY1NTgsCi0JMHg5NTg4LCAweDMxZjMsIDB4MjEwZCwgMHg5MThjLCAweDAwZmYsIDB4MjE2YSwgMHg5MDBlLCAweDIwMTEsCi0JMHgwMDAyLCAweDIxMDAsIDB4OTUwNiwgMHgwMWE4LCAweDA4MGMsIDB4NjNhMywgMHgxMTkwLCAweGI4MTQsCi0JMHg4MjFjLCAweDAyMzgsIDB4OTM5OCwgMHgxYzgwLCAweDkwODUsIDB4ZmYwMCwgMHg4MDA3LCAweDIwMWEsCi0JMHgwMDM4LCAweDkzOTgsIDB4MWM4MCwgMHgyMzI0LCAweDk0YTQsIDB4ZmYwMCwgMHg5NDA1LCAweDIwMWEsCi0JMHg4MjEwLCAweDgxMDgsIDB4OTE4MiwgMHgwMDgwLCAweDEyMDgsIDB4MGMxOCwgMHg4MjAxLCAweDgwMDcsCi0JMHgyZDBjLCAweDkxMDUsIDB4MjA2YSwgMHgwMGRlLCAweDIwYTksIDB4MDA0MCwgMHgyMGExLCAweDFjODAsCi0JMHgyMDk5LCAweDFjODAsIDB4MDgwYywgMHg1ZDdmLCAweDA4MDQsIDB4NDM4MSwgMHgwODBjLCAweDQ5ZWEsCi0JMHgwOTA0LCAweDM0MjcsIDB4MDgwYywgMHg0OWI3LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsCi0JMHgzNDI0LCAweDA4MGMsIDB4NTRkYiwgMHhkMGI0LCAweDA1NTgsIDB4Nzg4NCwgMHg5MDhlLCAweDAwN2UsCi0JMHgwNTM4LCAweDkwOGUsIDB4MDA3ZiwgMHgwNTIwLCAweDkwOGUsIDB4MDA4MCwgMHgwNTA4LCAweDA4MGMsCi0JMHgzMWU5LCAweDExNDgsIDB4YjgwMCwgMHhkMDhjLCAweDExZDgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwMDYsIDB4MTFhOCwgMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsCi0JMHgwODBjLCAweGJmMTksIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNDI0LCAweDcwMDcsCi0JMHgwMDAzLCAweDcwMWYsIDB4NDQwYywgMHgwMDA1LCAweDA4MGMsIDB4NDllYSwgMHgwOTA0LCAweDM0MjcsCi0JMHgyMGE5LCAweDAwMmIsIDB4YjhiNCwgMHgyMGUwLCAweGI4YjgsIDB4MjA5OCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLCAweDQwMDMsIDB4MjBhOSwgMHgwMDA4LCAweDkwODAsCi0JMHgwMDA2LCAweDIwYTAsIDB4YjhiNCwgMHgyMGUwLCAweGI4YjgsIDB4OTA4MCwgMHgwMDA2LCAweDIwOTgsCi0JMHgwODBjLCAweDBmYjQsIDB4MDA3MCwgMHgyMGE5LCAweDAwMDQsIDB4YTg1YywgMHg5MDgwLCAweDAwMGEsCi0JMHgyMGEwLCAweGI4YjQsIDB4MjBlMCwgMHhiOGI4LCAweDkwODAsIDB4MDAwYSwgMHgyMDk4LCAweDA4MGMsCi0JMHgwZmI0LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsCi0JMHg5MDgwLCAweDAwMDIsIDB4MjAwOSwgMHgwMDJiLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsCi0JMHgwODA0LCAweDRhMDMsIDB4ODFmZiwgMHgxOTA0LCAweDM0MjQsIDB4MDgwYywgMHg0OWNlLCAweDA5MDQsCi0JMHgzNDI3LCAweDA4MGMsIDB4NjUxNSwgMHgwOTA0LCAweDM0MjQsIDB4MDA1OCwgMHhhODc4LCAweDkwMDUsCi0JMHgwMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM0MjQsIDB4YTk3NCwgMHhhYTk0LCAweDA4MDQsCi0JMHgzM2YyLCAweDA4MGMsIDB4NTRlMywgMHgwOTA0LCAweDMzZjIsIDB4NzAxZiwgMHg0NDU2LCAweDcwMDcsCi0JMHgwMDAzLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDM0MjQsIDB4Nzg4OCwgMHg5MDhhLCAweDEwMDAsCi0JMHgxYTA0LCAweDM0MjcsIDB4MDgwYywgMHg0OWVhLCAweDA5MDQsIDB4MzQyNywgMHgwODBjLCAweDY2YzksCi0JMHgwMTIwLCAweDA4MGMsIDB4NjZkMSwgMHgxOTA0LCAweDM0MjcsIDB4MDgwYywgMHg2NTlhLCAweDA5MDQsCi0JMHgzNDI0LCAweDIwMTksIDB4MDAwNCwgMHg5MDBlLCAweDA4MGMsIDB4NjUyNywgMHgwOTA0LCAweDM0MjQsCi0JMHg3OTg0LCAweDdhODgsIDB4MDRjOSwgMHgwOGE4LCAweGE4OWMsIDB4OTA4YSwgMHgxMDAwLCAweDEyZjgsCi0JMHgwODBjLCAweDQ5ZTgsIDB4MDFlMCwgMHgwODBjLCAweDY2YzksIDB4MDExOCwgMHgwODBjLCAweDY2ZDEsCi0JMHgxMWIwLCAweDA4MGMsIDB4NjU5YSwgMHgyMDA5LCAweDAwMDIsIDB4MDE2OCwgMHgyMDA5LCAweDAwMDIsCi0JMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHg2NTI3LCAweDIwMDksIDB4MDAwMywgMHgwMTIwLCAweGE5OTgsCi0JMHhhYTljLCAweDAwZDEsIDB4MDA2MCwgMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLCAweGE4OTcsCi0JMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LCAweGE4OTcsCi0JMHg0MDAwLCAweDA4MGMsIDB4NTRlMywgMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLCAweDkwODUsCi0JMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDkxODYsIDB4MDBmZiwgMHgwMTEwLCAweDAwNzEsCi0JMHgwMDYwLCAweDIwMjksIDB4MDA3ZSwgMHgyMDYxLCAweDE4MDAsIDB4NjQ1OCwgMHgyNDAwLCAweDk1MDYsCi0JMHgwMTEwLCAweDI1MDgsIDB4MDAxOSwgMHg4NTI5LCAweDFlYzgsIDB4MDAwNSwgMHgwODBjLCAweDYzYTMsCi0JMHgxMTM4LCAweDIyMDAsIDB4ODAwMywgMHg4MDBiLCAweDgxMGIsIDB4OTEwOCwgMHgwODBjLCAweDgyNjcsCi0JMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNDI0LCAweDc5OGMsIDB4MjAwMSwgMHgxOTVhLCAweDkxOGMsCi0JMHg4MDAwLCAweDIxMDIsIDB4MDgwYywgMHg0OWNlLCAweDA5MDQsIDB4MzQyNywgMHgwODBjLCAweDY2YzksCi0JMHgwMTIwLCAweDA4MGMsIDB4NjZkMSwgMHgxOTA0LCAweDM0MjcsIDB4MDgwYywgMHg2NDZhLCAweDA5MDQsCi0JMHgzNDI0LCAweDA4MGMsIDB4NjUxZSwgMHgwOTA0LCAweDM0MjQsIDB4MjAwMSwgMHgxOTVhLCAweDIwMDQsCi0JMHhkMGZjLCAweDE5MDQsIDB4MzNmMiwgMHgwODA0LCAweDQ0NjEsIDB4YTlhMCwgMHgyMDAxLCAweDE5NWEsCi0JMHg5MThjLCAweDgwMDAsIDB4YzE4ZCwgMHgyMTAyLCAweDA4MGMsIDB4NDlkYiwgMHgwMWEwLCAweDA4MGMsCi0JMHg2NmM5LCAweDAxMTgsIDB4MDgwYywgMHg2NmQxLCAweDExNzAsIDB4MDgwYywgMHg2NDZhLCAweDIwMDksCi0JMHgwMDAyLCAweDAxMjgsIDB4MDgwYywgMHg2NTFlLCAweDExNzAsIDB4MjAwOSwgMHgwMDAzLCAweGE4OTcsCi0JMHg0MDA1LCAweGE5OWEsIDB4MDAxMCwgMHhhODk3LCAweDQwMDYsIDB4OTAwZSwgMHg5MDg1LCAweDAwMDEsCi0JMHgyMDAxLCAweDAwMzAsIDB4MDAwNSwgMHhhODk3LCAweDQwMDAsIDB4MjAwMSwgMHgxOTVhLCAweDIwMDQsCi0JMHhkMGZjLCAweDExMjgsIDB4MDgwYywgMHg1NGUzLCAweDAxMTAsIDB4OTAwNiwgMHgwMDE4LCAweDkwMGUsCi0JMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDAwLCAweDAwMDUsIDB4ODFmZiwgMHgxOTA0LCAweDM0MjQsCi0JMHg3OThjLCAweDIwMDEsIDB4MTk1OSwgMHg5MThjLCAweDgwMDAsIDB4MjEwMiwgMHgwODBjLCAweDQ5Y2UsCi0JMHgwOTA0LCAweDM0MjcsIDB4MDgwYywgMHg2NmM5LCAweDAxMjAsIDB4MDgwYywgMHg2NmQxLCAweDE5MDQsCi0JMHgzNDI3LCAweDA4MGMsIDB4NjQ2YSwgMHgwOTA0LCAweDM0MjQsIDB4MDgwYywgMHg2NTBjLCAweDA5MDQsCi0JMHgzNDI0LCAweDIwMDEsIDB4MTk1OSwgMHgyMDA0LCAweGQwZmMsIDB4MTkwNCwgMHgzM2YyLCAweDA4MDQsCi0JMHg0NDYxLCAweGE5YTAsIDB4MjAwMSwgMHgxOTU5LCAweDkxOGMsIDB4ODAwMCwgMHhjMThkLCAweDIxMDIsCi0JMHgwODBjLCAweDQ5ZGIsIDB4MDFhMCwgMHgwODBjLCAweDY2YzksIDB4MDExOCwgMHgwODBjLCAweDY2ZDEsCi0JMHgxMTcwLCAweDA4MGMsIDB4NjQ2YSwgMHgyMDA5LCAweDAwMDIsIDB4MDEyOCwgMHgwODBjLCAweDY1MGMsCi0JMHgxMTcwLCAweDIwMDksIDB4MDAwMywgMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLCAweGE4OTcsCi0JMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LCAweGE4OTcsCi0JMHg0MDAwLCAweDIwMDEsIDB4MTk1OSwgMHgyMDA0LCAweGQwZmMsIDB4MTEyOCwgMHgwODBjLCAweDU0ZTMsCi0JMHgwMTEwLCAweDkwMDYsIDB4MDAxOCwgMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsCi0JMHgwMDA1LCAweDYxMDAsIDB4MDgwNCwgMHgzM2YyLCAweDA4MGMsIDB4NDllYSwgMHgwOTA0LCAweDM0MjcsCi0JMHgwODBjLCAweDU0ZWYsIDB4MTkwNCwgMHgzNDI0LCAweDc5YTgsIDB4ZDE4NCwgMHgxMTU4LCAweGI4MzQsCi0JMHg4MDA3LCAweDc4OWUsIDB4YjgzMCwgMHg4MDA3LCAweDc4OWEsIDB4YmIyYywgMHg4MzFmLCAweGJhMjgsCi0JMHg4MjE3LCAweDAwNTAsIDB4YjgyNCwgMHg4MDA3LCAweDc4OWUsIDB4YjgyMCwgMHg4MDA3LCAweDc4OWEsCi0JMHhiYjFjLCAweDgzMWYsIDB4YmExOCwgMHg4MjE3LCAweGI5MDAsIDB4OTE4YywgMHgwMjAyLCAweDA4MDQsCi0JMHgzM2YyLCAweDc4YTgsIDB4OTA5YywgMHgwMDAzLCAweGQwYWMsIDB4MTE1MCwgMHhkMGI0LCAweDExNDAsCi0JMHg5MzlhLCAweDAwMDMsIDB4MWEwNCwgMHgzNDI0LCAweDYyNTgsIDB4Nzg4NCwgMHg5MjA2LCAweDE1NjAsCi0JMHgyMDMxLCAweDE4NDgsIDB4MjAwOSwgMHgwMTNjLCAweDIxMzYsIDB4MjAwMSwgMHgxODQwLCAweDIwMDksCi0JMHgwMDBjLCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4MjAzOSwgMHgwMDAxLCAweDAwMDYsCi0JMHg3OGE4LCAweDkwODQsIDB4MDA4MCwgMHgxMTE4LCAweDAwMGUsIDB4MDgwNCwgMHg0YTAzLCAweDAwMGUsCi0JMHgyMDMxLCAweDAwMDAsIDB4MjA2MSwgMHgxOGI2LCAweDJjNDQsIDB4YTY2YSwgMHhhMTdhLCAweGE3NzIsCi0JMHhhMDc2LCAweGEyOGUsIDB4YTM5MiwgMHhhNDk2LCAweGE1OWEsIDB4MDgwYywgMHgxMTM0LCAweDcwMDcsCi0JMHgwMDAyLCAweDcwMWYsIDB4NDYxYywgMHgwMDA1LCAweDgxZmYsIDB4MTkwNCwgMHgzNDI0LCAweDA4MGMsCi0JMHg0OWVhLCAweDA5MDQsIDB4MzQyNywgMHgwODBjLCAweDY2YzksIDB4MTkwNCwgMHgzNDI0LCAweDAwYzYsCi0JMHgwODBjLCAweDQ5YjcsIDB4MDBjZSwgMHgwOTA0LCAweDM0MjQsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsCi0JMHhjMGZkLCAweGE4NmEsIDB4N2VhOCwgMHgwODBjLCAweGJlYmYsIDB4MDkwNCwgMHgzNDI0LCAweDcwMDcsCi0JMHgwMDAzLCAweDcwMWYsIDB4NDYyMCwgMHgwMDA1LCAweDA4MGMsIDB4NDE2ZCwgMHgwODA0LCAweDMzZjIsCi0JMHhhODMwLCAweDkwODYsIDB4MDEwMCwgMHgwOTA0LCAweDM0MjQsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsCi0JMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMDA5LCAweDAwMGMsCi0JMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweDA4MDQsIDB4NGEwMywgMHg5MDA2LCAweDA4MGMsCi0JMHgyNmQ2LCAweDc4YTgsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDBmZiwgMHgwMTE4LCAweDgxZmYsCi0JMHgxOTA0LCAweDM0MjQsIDB4MDgwYywgMHg3MTdlLCAweDAxMTAsIDB4MDgwYywgMHg1ZGY0LCAweDc4ODgsCi0JMHg5MDhhLCAweDEwMDAsIDB4MWEwNCwgMHgzNDI3LCAweDc5ODQsIDB4OTE4NiwgMHgwMGZmLCAweDAxMzgsCi0JMHg5MTgyLCAweDAwN2YsIDB4MWEwNCwgMHgzNDI3LCAweDIxMDAsIDB4MDgwYywgMHgyNmEwLCAweDAwMjYsCi0JMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjEsIDB4MTlkNSwgMHg2MDFiLCAweDAwMDAsCi0JMHg2MDFmLCAweDAwMDAsIDB4NjA3YiwgMHgwMDAwLCAweDYwN2YsIDB4MDAwMCwgMHgwODBjLCAweDcxN2UsCi0JMHgxMTU4LCAweDA4MGMsIDB4NzQ3YSwgMHgwODBjLCAweDVlMmYsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg3MWMyLCAweDA4MGMsIDB4NzA5ZSwgMHgwMGQwLCAweDA4MGMsIDB4OWY3MCwgMHgyMDYxLCAweDAxMDAsCi0JMHgyMDAxLCAweDE4MTcsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsIDB4ODEwZiwgMHg5MTA1LCAweDYwNGEsCi0JMHg2MDQzLCAweDAwOTAsIDB4NjA0MywgMHgwMDEwLCAweDIwMDksIDB4MTk3MywgMHgyMDBiLCAweDAwMDAsCi0JMHgyMDA5LCAweDAwMmQsIDB4MjAxMSwgMHg1ZDFhLCAweDA4MGMsIDB4ODJlYiwgMHg3OTg0LCAweDA4MGMsCi0JMHg3MTdlLCAweDExMTAsIDB4MjAwOSwgMHgwMGZmLCAweDdhODgsIDB4MDgwYywgMHg0NGM0LCAweDAxMmUsCi0JMHgwMGNlLCAweDAwMmUsIDB4MDgwNCwgMHgzM2YyLCAweDc5ODQsIDB4MDgwYywgMHg2MzQzLCAweDJiMDgsCi0JMHgxOTA0LCAweDM0MjcsIDB4MDgwNCwgMHgzM2YyLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsCi0JMHgwODA0LCAweDM0MjQsIDB4NjBkOCwgMHhkMGFjLCAweDExMzAsIDB4ZDA5YywgMHgxMTIwLCAweDIwMDksCi0JMHgwMDA1LCAweDA4MDQsIDB4MzQyNCwgMHgwODBjLCAweDQ5YjcsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsCi0JMHgwODA0LCAweDM0MjQsIDB4Nzk4NCwgMHg4MWZmLCAweDA5MDQsIDB4MzQyNywgMHg5MTkyLCAweDAwMjEsCi0JMHgxYTA0LCAweDM0MjcsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDE5LCAweDcwMmEsIDB4YWY2MCwgMHg3NzM2LCAweDA4MGMsIDB4NGEwMCwgMHg3MDFmLCAweDQ2ZDcsCi0JMHg3ODgwLCAweDkwODYsIDB4MDA2ZSwgMHgwMTEwLCAweDcwMWYsIDB4NGY4MywgMHgwMDA1LCAweDIwMDksCi0JMHgwMDgwLCAweDA4MGMsIDB4NjNhMywgMHgxMTE4LCAweDA4MGMsIDB4NjZjOSwgMHgwMTIwLCAweDIwMjEsCi0JMHg0MDBhLCAweDA4MDQsIDB4MzNmNCwgMHgwMGQ2LCAweDAwOTYsIDB4YTk2NCwgMHhhYTZjLCAweGFiNzAsCi0JMHhhYzc0LCAweGFkNzgsIDB4YWU3YywgMHhhODg0LCAweDkwYmUsIDB4MDEwMCwgMHgwOTA0LCAweDQ3NzAsCi0JMHg5MGJlLCAweDAxMTIsIDB4MDkwNCwgMHg0NzcwLCAweDkwYmUsIDB4MDExMywgMHgwOTA0LCAweDQ3NzAsCi0JMHg5MGJlLCAweDAxMTQsIDB4MDkwNCwgMHg0NzcwLCAweDkwYmUsIDB4MDExNywgMHgwOTA0LCAweDQ3NzAsCi0JMHg5MGJlLCAweDAxMWEsIDB4MDkwNCwgMHg0NzcwLCAweDkwYmUsIDB4MDExYywgMHgwOTA0LCAweDQ3NzAsCi0JMHg5MGJlLCAweDAxMjEsIDB4MDkwNCwgMHg0NzU3LCAweDkwYmUsIDB4MDEzMSwgMHgwOTA0LCAweDQ3NTcsCi0JMHg5MGJlLCAweDAxNzEsIDB4MDkwNCwgMHg0NzcwLCAweDkwYmUsIDB4MDE3MywgMHgwOTA0LCAweDQ3NzAsCi0JMHg5MGJlLCAweDAxYTEsIDB4MTEyOCwgMHhhODk0LCAweDgwMDcsIDB4YTg5NiwgMHgwODA0LCAweDQ3N2IsCi0JMHg5MGJlLCAweDAyMTIsIDB4MDkwNCwgMHg0NzY0LCAweDkwYmUsIDB4MDIxMywgMHgwNWU4LCAweDkwYmUsCi0JMHgwMjE0LCAweDA1MDAsIDB4OTBiZSwgMHgwMjE3LCAweDAxODgsIDB4OTBiZSwgMHgwMjFhLCAweDExMjAsCi0JMHhhODljLCAweDgwMDcsIDB4YTg5ZSwgMHgwNGUwLCAweDkwYmUsIDB4MDIxZiwgMHgwNWM4LCAweDkwYmUsCi0JMHgwMzAwLCAweDA1YjAsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MDQsIDB4MzQyNywgMHg3MDI4LCAweDkwODAsCi0JMHgwMDEwLCAweDIwOTgsIDB4MjBhMCwgMHg3MDM0LCAweDIwZTAsIDB4MjBlOCwgMHgyMGE5LCAweDAwMDcsCi0JMHgwODBjLCAweDQ3YjksIDB4NzAyOCwgMHg5MDgwLCAweDAwMGUsIDB4MjA5OCwgMHgyMGEwLCAweDcwMzQsCi0JMHgyMGUwLCAweDIwZTgsIDB4MjBhOSwgMHgwMDAxLCAweDA4MGMsIDB4NDdiOSwgMHgwMGM4LCAweDcwMjgsCi0JMHg5MDgwLCAweDAwMGMsIDB4MjA5OCwgMHgyMGEwLCAweDcwMzQsIDB4MjBlMCwgMHgyMGU4LCAweDIwYTksCi0JMHgwMDAxLCAweDA4MGMsIDB4NDdjNiwgMHgwMGI4LCAweDcwMjgsIDB4OTA4MCwgMHgwMDBlLCAweDIwOTgsCi0JMHgyMGEwLCAweDcwMzQsIDB4MjBlMCwgMHgyMGU4LCAweDIwYTksIDB4MDAwMSwgMHgwODBjLCAweDQ3YzYsCi0JMHg3MDI4LCAweDkwODAsIDB4MDAwYywgMHgyMDk4LCAweDIwYTAsIDB4NzAzNCwgMHgyMGUwLCAweDIwZTgsCi0JMHgyMGE5LCAweDAwMDEsIDB4MDRmMSwgMHgwMGM2LCAweDA4MGMsIDB4NDliNywgMHgwNTUwLCAweGE4NjgsCi0JMHhjMGZkLCAweGE4NmEsIDB4YTg2NywgMHgwMTE5LCAweDkwMDYsIDB4YTg4MiwgMHhhODdmLCAweDAwMjAsCi0JMHhhODhiLCAweDAwMDEsIDB4ODEwYiwgMHhhOWFlLCAweGE4YjIsIDB4YWFiNiwgMHhhYmJhLCAweGFjYmUsCi0JMHhhZGMyLCAweGE5YzYsIDB4YThjYSwgMHgwMGNlLCAweDAwOWUsIDB4MDBkZSwgMHhhODY2LCAweGE4MjIsCi0JMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHhhODA0LCAweDIwNDgsIDB4MDgwYywgMHhiZWRhLCAweDExMjAsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNDI0LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDQ3YjAsCi0JMHgwMDA1LCAweDAwY2UsIDB4MDA5ZSwgMHgwMGRlLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM0MjQsCi0JMHhhODIwLCAweDkwODYsIDB4ODAwMSwgMHgxOTA0LCAweDMzZjIsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsCi0JMHgzNDI0LCAweDAwMTYsIDB4MDAyNiwgMHgzNTEwLCAweDIwYTksIDB4MDAwMiwgMHg0MDAyLCAweDQxMDQsCi0JMHg0MDA0LCAweDgyMTEsIDB4MWRjOCwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMDM2LCAweDAwNDYsIDB4MzUyMCwgMHgyMGE5LCAweDAwMDQsIDB4NDAwMiwgMHg0MzA0LCAweDQyMDQsCi0JMHg0MTA0LCAweDQwMDQsIDB4ODQyMSwgMHgxZGI4LCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMDA1LCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNDI0LCAweDYwZDgsCi0JMHhkMGFjLCAweDExNjAsIDB4ZDA5YywgMHgwMTIwLCAweDIwMDksIDB4MDAxNiwgMHgwODA0LCAweDM0MjQsCi0JMHhkMDljLCAweDExMjAsIDB4MjAwOSwgMHgwMDA1LCAweDA4MDQsIDB4MzQyNCwgMHg3OTg0LCAweDc4YTgsCi0JMHgyMDQwLCAweDA4MGMsIDB4OWY2OSwgMHgxMTIwLCAweDkxODIsIDB4MDA3ZiwgMHgwYTA0LCAweDM0MjcsCi0JMHg5MTg2LCAweDAwZmYsIDB4MDkwNCwgMHgzNDI3LCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LCAweDM0MjcsCi0JMHg3YThjLCAweDdiODgsIDB4NjA3OCwgMHg5MzA2LCAweDExNTgsIDB4NjA3YywgMHg5MjRlLCAweDA5MDQsCi0JMHgzNDI3LCAweDA4MGMsIDB4OWY2OSwgMHgxMTIwLCAweDk5Y2MsIDB4ZmYwMCwgMHgwOTA0LCAweDM0MjcsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg5Mzg2LCAweDAwZmYsIDB4MDE3OCwgMHgwMDI2LCAweDIwMTEsCi0JMHg4MDA4LCAweDA4MGMsIDB4NjZlZCwgMHgwMDJlLCAweDAxNDAsIDB4OTE4ZCwgMHg4MDAwLCAweDA4MGMsCi0JMHg2NzM3LCAweDExMTgsIDB4MjAwMSwgMHg0MDA5LCAweDA0NTgsIDB4MDgwYywgMHg0OGQxLCAweDA1NjAsCi0JMHg5MGM2LCAweDQwMDAsIDB4MTE3MCwgMHgwMGM2LCAweDAwMDYsIDB4OTAwZSwgMHgwODBjLCAweDY1YzMsCi0JMHgxMTA4LCAweGMxODUsIDB4YjgwMCwgMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwMDBlLCAweDAwY2UsCi0JMHgwMGI4LCAweDkwYzYsIDB4NDAwNywgMHgxMTEwLCAweDI0MDgsIDB4MDA5MCwgMHg5MGM2LCAweDQwMDgsCi0JMHgxMTE4LCAweDI3MDgsIDB4MjYxMCwgMHgwMDYwLCAweDkwYzYsIDB4NDAwOSwgMHgxMTA4LCAweDAwNDAsCi0JMHg5MGM2LCAweDQwMDYsIDB4MTEwOCwgMHgwMDIwLCAweDIwMDEsIDB4NDAwNSwgMHgyMDA5LCAweDAwMGEsCi0JMHgyMDIwLCAweDAxMmUsIDB4MDgwNCwgMHgzM2Y0LCAweDJiMDAsIDB4NzAyNiwgMHgwMDE2LCAweDAwYjYsCi0JMHgwMGM2LCAweDAwZTYsIDB4MmM3MCwgMHgwODBjLCAweGEwM2IsIDB4MDkwNCwgMHg0ODllLCAweDJiMDAsCi0JMHg2MDEyLCAweDA4MGMsIDB4YzFjYSwgMHgyZTU4LCAweDAwZWUsIDB4MDBlNiwgMHgwMGM2LCAweDA4MGMsCi0JMHg0OWI3LCAweDAwY2UsIDB4MmI3MCwgMHgxMTU4LCAweDA4MGMsIDB4OWZlYSwgMHgwMGVlLCAweDAwY2UsCi0JMHgwMGJlLCAweDAwMWUsIDB4MDEyZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNDI0LCAweDkwMGUsCi0JMHhhOTY2LCAweGE5NmEsIDB4MjkwMCwgMHg2MDE2LCAweGE5MzIsIDB4YTg2OCwgMHhjMGZkLCAweGQ4OGMsCi0JMHgwMTA4LCAweGMwZjUsIDB4YTg2YSwgMHgwODBjLCAweDMwOTUsIDB4NjAyMywgMHgwMDAxLCAweDkwMDYsCi0JMHgwODBjLCAweDYyZTAsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsIDB4NjJmNCwgMHgyMDA5LCAweDAwMDIsCi0JMHgwODBjLCAweGEwNjgsIDB4NzhhOCwgMHhkMDk0LCAweDAxMzgsIDB4MDBlZSwgMHg3MDI0LCAweDAwZTYsCi0JMHgyMDU4LCAweGI4YmMsIDB4YzA4ZCwgMHhiOGJlLCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLCAweDAwY2UsCi0JMHgwMGJlLCAweDAwMWUsIDB4MDEyZSwgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDM0MjQsCi0JMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg0OGFkLCAweDAwMDUsIDB4YTgzMCwgMHgyMDA4LCAweDkxOGUsCi0JMHhkZWFkLCAweDExMjAsIDB4MjAyMSwgMHg0MDA5LCAweDA4MDQsIDB4MzNmNCwgMHg5MDg2LCAweDAxMDAsCi0JMHg3MDI0LCAweDIwNTgsIDB4MTEzOCwgMHgyMDA5LCAweDAwMDQsIDB4YmEwNCwgMHg5Mjk0LCAweDAwZmYsCi0JMHgwODA0LCAweDU0MmYsIDB4OTAwZSwgMHhhODY4LCAweGQwZjQsIDB4MTkwNCwgMHgzM2YyLCAweDA4MGMsCi0JMHg2NWMzLCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDA4MDQsCi0JMHgzM2YyLCAweDAwZTYsIDB4MDBkNiwgMHgwMDk2LCAweDgzZmYsIDB4MDkwNCwgMHg0OTE5LCAweDkwMmUsCi0JMHgwODBjLCAweDlmNjksIDB4MDEzMCwgMHg5MDI2LCAweDIwYTksIDB4MDgwMCwgMHgyMDcxLCAweDEwMDAsCi0JMHgwMDMwLCAweDIwMjEsIDB4MDA3ZiwgMHgyMGE5LCAweDA3ODEsIDB4MjA3MSwgMHgxMDdmLCAweDJlMDQsCi0JMHg5MDA1LCAweDExYjAsIDB4MjEwMCwgMHg5NDA2LCAweDE1ZTgsIDB4MjQyOCwgMHg5NGNlLCAweDAwN2YsCi0JMHgxMTIwLCAweDkyY2UsIDB4ZmZmZCwgMHgxNTI4LCAweDAwMzAsIDB4OTRjZSwgMHgwMDgwLCAweDExMzAsCi0JMHg5MmNlLCAweGZmZmMsIDB4MTFmMCwgMHg5M2NlLCAweDAwZmYsIDB4MTFkOCwgMHhjNWZkLCAweDA0NTAsCi0JMHgyMDU4LCAweGJmMTAsIDB4MjcwMCwgMHg5MzA2LCAweDExYjgsIDB4YmUxNCwgMHgyNjAwLCAweDkyMDYsCi0JMHgxMTk4LCAweDI0MDAsIDB4OTEwNiwgMHgxMTUwLCAweGQ4ODQsIDB4MDU2OCwgMHhkODk0LCAweDE1NTgsCi0JMHgwODBjLCAweDY2YzksIDB4MTU0MCwgMHgyMDAxLCAweDQwMDAsIDB4MDQzMCwgMHgyMDAxLCAweDQwMDcsCi0JMHgwNDE4LCAweDIwMDEsIDB4NDAwNiwgMHgwNDAwLCAweDI0MDAsIDB4OTEwNiwgMHgxMTU4LCAweGJlMTQsCi0JMHg4N2ZmLCAweDExMjgsIDB4ODZmZiwgMHgwOTQ4LCAweDA4MGMsIDB4OWY2OSwgMHgxOTMwLCAweDIwMDEsCi0JMHg0MDA4LCAweDAwOTAsIDB4ODQyMCwgMHg4ZTcwLCAweDFmMDQsIDB4NDhlNywgMHg4NWZmLCAweDExMzAsCi0JMHgyMDAxLCAweDQwMDksIDB4MDA0OCwgMHgyMDAxLCAweDAwMDEsIDB4MDAzMCwgMHgwODBjLCAweDYzNDMsCi0JMHgxZGQwLCAweGJiMTIsIDB4YmExNiwgMHg5MDA2LCAweDkwMDUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwZWUsCi0JMHgwMDA1LCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNDI0LCAweDA4MGMsCi0JMHg0OWI3LCAweDExMjAsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzQyNCwgMHhhODY3LCAweDAwMDAsCi0JMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHg3ODg0LCAweDkwMDUsIDB4MDkwNCwgMHgzNDI3LCAweDkwOTYsCi0JMHgwMGZmLCAweDAxMjAsIDB4OTA5MiwgMHgwMDA0LCAweDFhMDQsIDB4MzQyNywgMHgyMDEwLCAweDI5MTgsCi0JMHgwODBjLCAweDMwM2IsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNDI0LCAweDcwMDcsCi0JMHgwMDAzLCAweDcwMWYsIDB4NDk2YywgMHgwMDA1LCAweGE4MzAsIDB4OTA4NiwgMHgwMTAwLCAweDE5MDQsCi0JMHgzM2YyLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM0MjQsIDB4Nzk4NCwgMHgwODBjLCAweDlmNjksCi0JMHgxMTIwLCAweDkxODIsIDB4MDA3ZiwgMHgwYTA0LCAweDM0MjcsIDB4OTE4NiwgMHgwMGZmLCAweDA5MDQsCi0JMHgzNDI3LCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LCAweDM0MjcsIDB4MjAwMSwgMHg5NDAwLCAweDA4MGMsCi0JMHg1NDhhLCAweDE5MDQsIDB4MzQyNCwgMHgwODA0LCAweDMzZjIsIDB4YTk5OCwgMHgwODBjLCAweDlmNjksCi0JMHgxMTE4LCAweDkxODIsIDB4MDA3ZiwgMHgwMjgwLCAweDkxODYsIDB4MDBmZiwgMHgwMTY4LCAweDkxODIsCi0JMHgwODAwLCAweDEyNTAsIDB4MjAwMSwgMHg5NDAwLCAweDA4MGMsIDB4NTQ4YSwgMHgxMWE4LCAweDAwNjAsCi0JMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLCAweGE4OTcsIDB4NDAwNiwgMHg5MDBlLCAweDkwODUsCi0JMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LCAweGE4OTcsIDB4NDAwMCwgMHg5MDBlLCAweDkwODUsCi0JMHgwMDAxLCAweDIwMDEsIDB4MDAwMCwgMHgwMDA1LCAweDIwMDksIDB4MDAwYSwgMHgwYzQ4LCAweDA4MGMsCi0JMHgxMDM3LCAweDAxOTgsIDB4OTAwNiwgMHhhODAyLCAweDcwMTQsIDB4OTAwNSwgMHgxMTIwLCAweDI5MDAsCi0JMHg3MDE2LCAweDcwMWEsIDB4MDA0MCwgMHg3MDE4LCAweGE4MDIsIDB4MDA4NiwgMHgyMDQwLCAweDI5MDAsCi0JMHhhMDA2LCAweDcwMWEsIDB4MDA4ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHg3OTg0LCAweDA4MGMsCi0JMHg2M2EzLCAweDExMzAsIDB4N2U4OCwgMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLCAweDAyMDgsCi0JMHg5MDVlLCAweDhiZmYsIDB4MDAwNSwgMHhhOTk4LCAweDA4MGMsIDB4NjNhMywgMHgxMTMwLCAweGFlOWMsCi0JMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLCAweDAyMDgsIDB4OTA1ZSwgMHg4YmZmLCAweDAwMDUsCi0JMHhhZTk4LCAweDAwMDgsIDB4N2U4NCwgMHgyNjA4LCAweDA4MGMsIDB4NjNhMywgMHgxMTA4LCAweDAwMDgsCi0JMHg5MDVlLCAweDhiZmYsIDB4MDAwNSwgMHgwMDE2LCAweDcxMTQsIDB4ODFmZiwgMHgwMTI4LCAweDIxNDgsCi0JMHhhOTA0LCAweDA4MGMsIDB4MTA2OSwgMHgwY2M4LCAweDcxMTYsIDB4NzExYSwgMHgwMDFlLCAweDAwMDUsCi0JMHgyMDMxLCAweDAwMDEsIDB4MDAxMCwgMHgyMDMxLCAweDAwMDAsIDB4MjA2MSwgMHgxOGI2LCAweDJjNDQsCi0JMHhhNjZhLCAweGExN2EsIDB4YTc3MiwgMHhhMDc2LCAweGEyOGUsIDB4YTM5MiwgMHhhNDk2LCAweGE1OWEsCi0JMHgwODBjLCAweDExMzQsIDB4NzAwNywgMHgwMDAyLCAweDcwMWYsIDB4MzNmMiwgMHgwMDA1LCAweDAwZjYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDc5LCAweDAwMDAsIDB4MjAwMSwgMHgxOGFlLCAweDIwMDQsCi0JMHg5MDA1LCAweDExOTAsIDB4MGUwNCwgMHg0YTM0LCAweDdhMzYsIDB4NzgzMywgMHgwMDEyLCAweDdhODIsCi0JMHg3Yjg2LCAweDdjOGEsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsCi0JMHgxOTBjLCAweDExZTYsIDB4MDgwNCwgMHg0YTlhLCAweDAwMTYsIDB4MDA4NiwgMHgwMDk2LCAweDAwYzYsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTg5YywgMHg3MDQ0LCAweDkwMDUsIDB4MTU0MCwgMHg3MTQ4LCAweDkxODIsCi0JMHgwMDEwLCAweDAyODgsIDB4NzAzOCwgMHgyMDYwLCAweDA4MGMsIDB4MTAzNywgMHgwOTA0LCAweDRhOTIsCi0JMHhhODRiLCAweDAwMDAsIDB4MjkwMCwgMHg3MDQ2LCAweDIwMDEsIDB4MDAwMiwgMHg5MDgwLCAweDFlYmUsCi0JMHgyMDA1LCAweGE4NDYsIDB4MDA5OCwgMHg3MDM4LCAweDkwZTAsIDB4MDAwNCwgMHgyMDAxLCAweDE4YjgsCi0JMHg5YzgyLCAweDE4ZjgsIDB4MDIxMCwgMHgyMDYxLCAweDE4YjgsIDB4MmMwMCwgMHg3MDNhLCAweDcxNDgsCi0JMHg4MWZmLCAweDExMDgsIDB4NzAzZSwgMHg4MTA4LCAweDcxNGEsIDB4MDQ2MCwgMHg3MTQ4LCAweDgxMDgsCi0JMHg3MTRhLCAweDcwNDQsIDB4MjA0MCwgMHhhMTQ0LCAweDIxMDUsIDB4MDAxNiwgMHg5MDhhLCAweDAwMzYsCi0JMHgxYTBjLCAweDBkZjYsIDB4MjA2MCwgMHgwMDFlLCAweDgxMDgsIDB4MjEwNSwgMHg5MDA1LCAweGExNDYsCi0JMHgxNTIwLCAweDA4MGMsIDB4MTAzNywgMHgxMTMwLCAweDgxMDksIDB4YTk0NiwgMHg3MTQ4LCAweDgxMDksCi0JMHg3MTRhLCAweDAwZDgsIDB4OTAwNiwgMHhhODA2LCAweGE4NGEsIDB4YTA0NiwgMHgyODAwLCAweGE4MDIsCi0JMHgyOTAwLCAweGEwMDYsIDB4NzA0NiwgMHgyMDAxLCAweDAwMDIsIDB4OTA4MCwgMHgxZWJlLCAweDIwMDUsCi0JMHhhODQ2LCAweDAwNTgsIDB4MjI2MiwgMHg2MzA2LCAweDY0MGEsIDB4MDBlZSwgMHgwMGNlLCAweDAwOWUsCi0JMHgwMDhlLCAweDAwMWUsIDB4MDEyZSwgMHgwMGZlLCAweDAwMDUsIDB4MmMwMCwgMHg5MDgyLCAweDAwMWIsCi0JMHgwMDAyLCAweDRhYmMsIDB4NGFiYywgMHg0YWJlLCAweDRhYmMsIDB4NGFiYywgMHg0YWJjLCAweDRhYzIsCi0JMHg0YWJjLCAweDRhYmMsIDB4NGFiYywgMHg0YWM2LCAweDRhYmMsIDB4NGFiYywgMHg0YWJjLCAweDRhY2EsCi0JMHg0YWJjLCAweDRhYmMsIDB4NGFiYywgMHg0YWNlLCAweDRhYmMsIDB4NGFiYywgMHg0YWJjLCAweDRhZDIsCi0JMHg0YWJjLCAweDRhYmMsIDB4NGFiYywgMHg0YWQ3LCAweDA4MGMsIDB4MGRmNiwgMHhhMjc2LCAweGEzN2EsCi0JMHhhNDdlLCAweDA4OTgsIDB4YTI4NiwgMHhhMzhhLCAweGE0OGUsIDB4MDg3OCwgMHhhMjk2LCAweGEzOWEsCi0JMHhhNDllLCAweDA4NTgsIDB4YTJhNiwgMHhhM2FhLCAweGE0YWUsIDB4MDgzOCwgMHhhMmI2LCAweGEzYmEsCi0JMHhhNGJlLCAweDA4MTgsIDB4YTJjNiwgMHhhM2NhLCAweGE0Y2UsIDB4MDgwNCwgMHg0YTk1LCAweGEyZDYsCi0JMHhhM2RhLCAweGE0ZGUsIDB4MDgwNCwgMHg0YTk1LCAweDAwZTYsIDB4MjA3MSwgMHgxODljLCAweDcwNDgsCi0JMHg5MDA1LCAweDA5MDQsIDB4NGI2ZSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwZTA0LCAweDRiNmQsCi0JMHgwMGY2LCAweDIwNzksIDB4MDAwMCwgMHgwMGM2LCAweDAwOTYsIDB4MDA4NiwgMHgwMDc2LCAweDkwMDYsCi0JMHgyMDM4LCAweDcwNDAsIDB4MjA0OCwgMHg5MDA1LCAweDA1MDAsIDB4YTk0OCwgMHgyMTA1LCAweDAwMTYsCi0JMHg5MDhhLCAweDAwMzYsIDB4MWEwYywgMHgwZGY2LCAweDIwNjAsIDB4MDAxZSwgMHg4MTA4LCAweDIxMDUsCi0JMHg5MDA1LCAweGE5NGEsIDB4MTkwNCwgMHg0YjcwLCAweGE4MDQsIDB4OTAwNSwgMHgwOTBjLCAweDBkZjYsCi0JMHg3MDQyLCAweDI5MzgsIDB4MjA0MCwgMHhhMDAzLCAweDAwMDAsIDB4MjAwMSwgMHgwMDAyLCAweDkwODAsCi0JMHgxZWJlLCAweDIwMDUsIDB4YTA0YSwgMHgwODA0LCAweDRiNzAsIDB4NzAzYywgMHgyMDYwLCAweDJjMTQsCi0JMHg2MzA0LCAweDY0MDgsIDB4NjUwYywgMHgyMjAwLCAweDc4MzYsIDB4NzgzMywgMHgwMDEyLCAweDc4ODIsCi0JMHgyMzAwLCAweDc4ODYsIDB4MjQwMCwgMHg3ODhhLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksCi0JMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWU2LCAweDg3ZmYsIDB4MDExOCwgMHgyNzQ4LCAweDA4MGMsCi0JMHgxMDY5LCAweDcwNDgsIDB4ODAwMSwgMHg3MDRhLCAweDkwMDUsIDB4MTE3MCwgMHg3MDQwLCAweDIwNDgsCi0JMHg5MDA1LCAweDAxMjgsIDB4MDgwYywgMHgxMDY5LCAweDkwMDYsIDB4NzA0MiwgMHg3MDQ2LCAweDcwM2IsCi0JMHgxOGI4LCAweDcwM2YsIDB4MThiOCwgMHgwNDIwLCAweDcwNDAsIDB4OTAwNSwgMHgxNTA4LCAweDcyMzgsCi0JMHgyYzAwLCAweDkyMDYsIDB4MDE0OCwgMHg5YzgwLCAweDAwMDQsIDB4OTBmYSwgMHgxOGY4LCAweDAyMTAsCi0JMHgyMDAxLCAweDE4YjgsIDB4NzAzZSwgMHgwMGEwLCAweDkwMDYsIDB4NzAzZSwgMHg3MDNhLCAweDcwNDQsCi0JMHg5MDA1LCAweDA5MGMsIDB4MGRmNiwgMHgyMDQ4LCAweGE4MDAsIDB4OTAwNSwgMHgxZGUwLCAweDI5MDAsCi0JMHg3MDQyLCAweDIwMDEsIDB4MDAwMiwgMHg5MDgwLCAweDFlYmUsIDB4MjAwNSwgMHhhODRhLCAweDAwMDAsCi0JMHgwMDdlLCAweDAwOGUsIDB4MDA5ZSwgMHgwMGNlLCAweDAwZmUsIDB4MDEyZSwgMHgwMGVlLCAweDAwMDUsCi0JMHgyYzAwLCAweDkwODIsIDB4MDAxYiwgMHgwMDAyLCAweDRiOGYsIDB4NGI4ZiwgMHg0YjkxLCAweDRiOGYsCi0JMHg0YjhmLCAweDRiOGYsIDB4NGI5NiwgMHg0YjhmLCAweDRiOGYsIDB4NGI4ZiwgMHg0YjliLCAweDRiOGYsCi0JMHg0YjhmLCAweDRiOGYsIDB4NGJhMCwgMHg0YjhmLCAweDRiOGYsIDB4NGI4ZiwgMHg0YmE1LCAweDRiOGYsCi0JMHg0YjhmLCAweDRiOGYsIDB4NGJhYSwgMHg0YjhmLCAweDRiOGYsIDB4NGI4ZiwgMHg0YmFmLCAweDA4MGMsCi0JMHgwZGY2LCAweGFhNzQsIDB4YWI3OCwgMHhhYzdjLCAweDA4MDQsIDB4NGIxYiwgMHhhYTg0LCAweGFiODgsCi0JMHhhYzhjLCAweDA4MDQsIDB4NGIxYiwgMHhhYTk0LCAweGFiOTgsIDB4YWM5YywgMHgwODA0LCAweDRiMWIsCi0JMHhhYWE0LCAweGFiYTgsIDB4YWNhYywgMHgwODA0LCAweDRiMWIsIDB4YWFiNCwgMHhhYmI4LCAweGFjYmMsCi0JMHgwODA0LCAweDRiMWIsIDB4YWFjNCwgMHhhYmM4LCAweGFjY2MsIDB4MDgwNCwgMHg0YjFiLCAweGFhZDQsCi0JMHhhYmQ4LCAweGFjZGMsIDB4MDgwNCwgMHg0YjFiLCAweDAwMjYsIDB4MDgwYywgMHg1NGRiLCAweGQwYzQsCi0JMHgwMTIwLCAweDIwMTEsIDB4ODAxNCwgMHgwODBjLCAweDRhMTcsIDB4MDAyZSwgMHgwMDA1LCAweDgxZmYsCi0JMHgxOTA0LCAweDM0MjQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4NjAzMCwgMHhjMDhkLCAweGMwODUsCi0JMHhjMGFjLCAweDYwMzIsIDB4MDgwYywgMHg3MTdlLCAweDExNTgsIDB4MDgwYywgMHg3NDdhLCAweDA4MGMsCi0JMHg1ZTJmLCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDcxYzIsIDB4MDgwYywgMHg3MDllLCAweDAwMTAsCi0JMHgwODBjLCAweDVjZWUsIDB4MDEyZSwgMHgwODA0LCAweDMzZjIsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksCi0JMHgwMDAxLCAweDA4MDQsIDB4MzQyNCwgMHgwODBjLCAweDU0ZWYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDcsCi0JMHgwODA0LCAweDM0MjQsIDB4MDgwYywgMHg2NmMxLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA4LCAweDA4MDQsCi0JMHgzNDI0LCAweDAwMjYsIDB4MjAxMSwgMHgwMDEwLCAweDA4MGMsIDB4NjZlZCwgMHgwMDJlLCAweDAxNDAsCi0JMHg3OTg0LCAweDA4MGMsIDB4NjczNywgMHgxMTIwLCAweDIwMDksIDB4NDAwOSwgMHgwODA0LCAweDM0MjQsCi0JMHg3OTg0LCAweDA4MGMsIDB4NjM0MywgMHgxOTA0LCAweDM0MjcsIDB4MDgwYywgMHg0OWVhLCAweDA5MDQsCi0JMHgzNDI3LCAweDJiMDAsIDB4NzAyNiwgMHgwODBjLCAweDY2YzksIDB4Nzg4OCwgMHgxMTcwLCAweDkwODQsCi0JMHgwMDA1LCAweDExNTgsIDB4OTAwZSwgMHgwODBjLCAweDY1YzMsIDB4MTEwOCwgMHhjMTg1LCAweGI4MDAsCi0JMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHgwODA0LCAweDMzZjIsIDB4MDgwYywgMHg0OWI3LCAweDA5MDQsCi0JMHgzNDI0LCAweDkwMDYsIDB4YTg2NiwgMHhhODMyLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDA4MGMsCi0JMHhiZjc4LCAweDA5MDQsIDB4MzQyNCwgMHg3ODg4LCAweGQwOTQsIDB4MDExOCwgMHhiOGJjLCAweGMwOGQsCi0JMHhiOGJlLCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDRjN2YsIDB4MDAwNSwgMHgyMDYxLCAweDE4MDAsCi0JMHgwODBjLCAweDU0ZWYsIDB4MjAwOSwgMHgwMDA3LCAweDE1NjAsIDB4MDgwYywgMHg2NmMxLCAweDAxMTgsCi0JMHgyMDA5LCAweDAwMDgsIDB4MDQzMCwgMHhhOTk4LCAweDA4MGMsIDB4NjM0MywgMHgxNTMwLCAweDA4MGMsCi0JMHg0OWU4LCAweDA1MTgsIDB4MDgwYywgMHg2NmM5LCAweGE4OWMsIDB4MTE2OCwgMHg5MDg0LCAweDAwMDUsCi0JMHgxMTUwLCAweDkwMGUsIDB4MDgwYywgMHg2NWMzLCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsCi0JMHgwMTA4LCAweGMxOGQsIDB4MDBkMCwgMHhhODY4LCAweGMwZmMsIDB4YTg2YSwgMHgwODBjLCAweGJmNzgsCi0JMHgxMWUwLCAweGE4OWMsIDB4ZDA5NCwgMHgwMTE4LCAweGI4YmMsIDB4YzA4ZCwgMHhiOGJlLCAweDIwMDksCi0JMHgwMDAzLCAweGE4OTcsIDB4NDAwNSwgMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LCAweDkwMGUsCi0JMHg5MDg1LCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLCAweDAwMDUsIDB4YTg5NywgMHg0MDAwLCAweGE5OWEsCi0JMHg5MDA2LCAweDkxOGQsIDB4MDAwMSwgMHgyMDA4LCAweDAwMDUsIDB4OTAwNiwgMHgwMDA1LCAweGE4MzAsCi0JMHgyMDA4LCAweDkxOGUsIDB4ZGVhZCwgMHgxMTIwLCAweDIwMjEsIDB4NDAwOSwgMHgwODA0LCAweDMzZjQsCi0JMHg5MDg2LCAweDAxMDAsIDB4NzAyNCwgMHgyMDU4LCAweDExMTAsIDB4MDgwNCwgMHg1NDJmLCAweDkwMGUsCi0JMHgwODBjLCAweDY1YzMsIDB4MTEwOCwgMHhjMTg1LCAweGI4MDAsIDB4ZDBiYywgMHgwMTA4LCAweGMxOGQsCi0JMHgwODA0LCAweDMzZjIsIDB4MDgwYywgMHg1NGVmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsCi0JMHgzNDI0LCAweDdmODQsIDB4N2E4YywgMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHgwODBjLCAweDQ5YjcsCi0JMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM0MjQsIDB4OTAwZSwgMHgyMTMwLCAweDcxMjYsCi0JMHg3MTMyLCAweGE4NjAsIDB4MjBlOCwgMHg3MDM2LCAweGE4NWMsIDB4OTA4MCwgMHgwMDA1LCAweDcwMmEsCi0JMHgyMGEwLCAweDA4MGMsIDB4NjNhMywgMHgxOTA0LCAweDRkMjQsIDB4MDgwYywgMHg2NmM5LCAweDAxMjAsCi0JMHgwODBjLCAweDY2ZDEsIDB4MTkwNCwgMHg0ZDI0LCAweDA4MGMsIDB4NjZjMSwgMHgxMTMwLCAweDA4MGMsCi0JMHg2NWMzLCAweDExMTgsIDB4ZDc5YywgMHgwOTA0LCAweDRkMjQsIDB4ZDc5NCwgMHgxMTEwLCAweGQ3ODQsCi0JMHgwMWE4LCAweGI4YjQsIDB4MjBlMCwgMHhiOGI4LCAweDkwODAsIDB4MDAwNiwgMHgyMDk4LCAweDM0MDAsCi0JMHhkNzk0LCAweDAxOTgsIDB4MjBhOSwgMHgwMDA4LCAweDQwMDMsIDB4MjA5OCwgMHgyMGEwLCAweDNkMDAsCi0JMHgyMGUwLCAweDIwYTksIDB4MDAwMiwgMHgwODBjLCAweDQ3YzYsIDB4MDA4MCwgMHhiOGI0LCAweDIwZTAsCi0JMHhiOGI4LCAweDkwODAsIDB4MDAwYSwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwgMHgwMDA0LCAweDQwMDMsCi0JMHgyMDk4LCAweDIwYTAsIDB4M2QwMCwgMHgyMGUwLCAweDA4MGMsIDB4NDdjNiwgMHg0MTA0LCAweGQ3OTQsCi0JMHgwNTI4LCAweGI4YjQsIDB4MjBlMCwgMHhiOGI4LCAweDIwNjAsIDB4OWM4MCwgMHgwMDAwLCAweDIwOTgsCi0JMHgyMGE5LCAweDAwMDIsIDB4NDAwMywgMHg5YzgwLCAweDAwMDMsIDB4MjA5OCwgMHgyMGE5LCAweDAwMDEsCi0JMHg0MDA1LCAweDljODAsIDB4MDAwNCwgMHgyMDk4LCAweDM0MDAsIDB4MjBhOSwgMHgwMDAyLCAweDQwMDMsCi0JMHgyMDk4LCAweDIwYTAsIDB4M2QwMCwgMHgyMGUwLCAweDA4MGMsIDB4NDdiOSwgMHg5YzgwLCAweDAwMjYsCi0JMHgyMDk4LCAweGI4YjQsIDB4MjBlMCwgMHgyMGE5LCAweDAwMDIsIDB4NDAwMywgMHhkNzk0LCAweDAxMTAsCi0JMHg5NmIwLCAweDAwMGIsIDB4OTZiMCwgMHgwMDA1LCAweDgxMDgsIDB4MDgwYywgMHg5ZjY5LCAweDAxMTgsCi0JMHg5MTg2LCAweDA4MDAsIDB4MDA0MCwgMHhkNzhjLCAweDAxMjAsIDB4OTE4NiwgMHgwODAwLCAweDAxNzAsCi0JMHgwMDE4LCAweDkxODYsIDB4MDA3ZSwgMHgwMTUwLCAweGQ3OTQsIDB4MDExOCwgMHg5Njg2LCAweDAwMjAsCi0JMHgwMDEwLCAweDk2ODYsIDB4MDAyOCwgMHgwMTUwLCAweDA4MDQsIDB4NGNiOSwgMHg4NmZmLCAweDExMjAsCi0JMHg3MTI0LCAweDgxMGIsIDB4MDgwNCwgMHgzM2YyLCAweDcwMzMsIDB4MDAwMSwgMHg3MTIyLCAweDcwMjQsCi0JMHg5NjAwLCAweDcwMjYsIDB4NzcyZSwgMHgyMDYxLCAweDE4YjYsIDB4MmM0NCwgMHhhMDZiLCAweDAwMDAsCi0JMHhhNjdhLCAweDcwMzQsIDB4YTA3MiwgMHg3MDI4LCAweGEwNzYsIDB4YTI4ZSwgMHhhMzkyLCAweGE0OTYsCi0JMHhhNTlhLCAweDA4MGMsIDB4MTEzNCwgMHg3MDA3LCAweDAwMDIsIDB4NzAxZiwgMHg0ZDYwLCAweDAwMDUsCi0JMHg3MDMwLCAweDkwMDUsIDB4MTE4MCwgMHg3MTIwLCAweDcwMjgsIDB4MjBhMCwgMHg3NzJjLCAweDkwMzYsCi0JMHg3MDM0LCAweDIwZTgsIDB4MjA2MSwgMHgxOGI2LCAweDJjNDQsIDB4YTI4YywgMHhhMzkwLCAweGE0OTQsCi0JMHhhNTk4LCAweDA4MDQsIDB4NGNiOSwgMHg3MTI0LCAweDgxMGIsIDB4MDgwNCwgMHgzM2YyLCAweDIwMjksCi0JMHgwMDdlLCAweDc5ODQsIDB4N2E4OCwgMHg3YjhjLCAweDdjOTgsIDB4OTE4NCwgMHhmZjAwLCAweDgwMDcsCi0JMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNDI3LCAweDk1MDIsIDB4MGEwNCwgMHgzNDI3LCAweDkxODQsCi0JMHgwMGZmLCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM0MjcsIDB4OTUwMiwgMHgwYTA0LCAweDM0MjcsCi0JMHg5Mjg0LCAweGZmMDAsIDB4ODAwNywgMHg5MGUyLCAweDAwMjAsIDB4MGEwNCwgMHgzNDI3LCAweDk1MDIsCi0JMHgwYTA0LCAweDM0MjcsIDB4OTI4NCwgMHgwMGZmLCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM0MjcsCi0JMHg5NTAyLCAweDBhMDQsIDB4MzQyNywgMHg5Mzg0LCAweGZmMDAsIDB4ODAwNywgMHg5MGUyLCAweDAwMjAsCi0JMHgwYTA0LCAweDM0MjcsIDB4OTUwMiwgMHgwYTA0LCAweDM0MjcsIDB4OTM4NCwgMHgwMGZmLCAweDkwZTIsCi0JMHgwMDIwLCAweDBhMDQsIDB4MzQyNywgMHg5NTAyLCAweDBhMDQsIDB4MzQyNywgMHg5NDg0LCAweGZmMDAsCi0JMHg4MDA3LCAweDkwZTIsIDB4MDAyMCwgMHgwYTA0LCAweDM0MjcsIDB4OTUwMiwgMHgwYTA0LCAweDM0MjcsCi0JMHg5NDg0LCAweDAwZmYsIDB4OTBlMiwgMHgwMDIwLCAweDBhMDQsIDB4MzQyNywgMHg5NTAyLCAweDBhMDQsCi0JMHgzNDI3LCAweDIwNjEsIDB4MTk2MywgMHg2MTAyLCAweDYyMDYsIDB4NjMwYSwgMHg2NDBlLCAweDA4MDQsCi0JMHgzM2YyLCAweDAwMDYsIDB4MDgwYywgMHg1NGRiLCAweGQwY2MsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgwODBjLCAweDU0ZGYsIDB4ZDBiYywgMHgwMDBlLCAweDAwMDUsIDB4NjE3MCwgMHg3YTg0LCAweDYzMDAsCi0JMHg4MmZmLCAweDExMTgsIDB4Nzk4NiwgMHgwODA0LCAweDMzZjIsIDB4ODNmZiwgMHgxOTA0LCAweDM0MjcsCi0JMHgyMDAxLCAweGZmZjAsIDB4OTIwMCwgMHgxYTA0LCAweDM0MjcsIDB4MjAxOSwgMHhmZmZmLCAweDYwNzQsCi0JMHg5MzAyLCAweDkyMDAsIDB4MGEwNCwgMHgzNDI3LCAweDc5ODYsIDB4NjI3MiwgMHgwODA0LCAweDMzZjIsCi0JMHgwODBjLCAweDU0ZWYsIDB4MTkwNCwgMHgzNDI0LCAweDdjODgsIDB4N2Q4NCwgMHg3ZTk4LCAweDdmOGMsCi0JMHgwODBjLCAweDQ5YjcsIDB4MDkwNCwgMHgzNDI0LCAweDkwMGUsIDB4OTAxZSwgMHg3MzI2LCAweDczMzIsCi0JMHhhODYwLCAweDIwZTgsIDB4NzAzNiwgMHhhODVjLCAweDkwODAsIDB4MDAwMywgMHg3MDJhLCAweDIwYTAsCi0JMHg5MWQ4LCAweDEwMDAsIDB4MmI1YywgMHg4YmZmLCAweDAxNzgsIDB4MDgwYywgMHg2NmM5LCAweDAxMTgsCi0JMHgwODBjLCAweDY2ZDEsIDB4MTE0OCwgMHgyMGE5LCAweDAwMDEsIDB4YjgxNCwgMHg0MDA0LCAweGI4MTAsCi0JMHg0MDA0LCAweDQxMDQsIDB4OTM5OCwgMHgwMDAzLCAweDgxMDgsIDB4OTE4MiwgMHgwODAwLCAweDAxMjAsCi0JMHg5Mzg2LCAweDAwM2MsIDB4MDE3MCwgMHgwYzIwLCAweDgzZmYsIDB4MTE0OCwgMHg3MjI0LCAweDkwMGUsCi0JMHgyMDAxLCAweDAwMDMsIDB4MDgwYywgMHg4NDdlLCAweDIyMDgsIDB4MDgwNCwgMHgzM2YyLCAweDcwMzMsCi0JMHgwMDAxLCAweDcxMjIsIDB4NzAyNCwgMHg5MzAwLCAweDcwMjYsIDB4MjA2MSwgMHgxOGI2LCAweDJjNDQsCi0JMHhhMDZiLCAweDAwMDAsIDB4YTM3YSwgMHg3MDI4LCAweGEwNzYsIDB4NzAzNCwgMHhhMDcyLCAweGE0OGUsCi0JMHhhNTkyLCAweGE2OTYsIDB4YTc5YSwgMHgwODBjLCAweDExMzQsIDB4NzAwNywgMHgwMDAyLCAweDcwMWYsCi0JMHg0ZTUyLCAweDAwMDUsIDB4NzAzMCwgMHg5MDA1LCAweDExNzgsIDB4NzEyMCwgMHg3MDI4LCAweDIwYTAsCi0JMHg5MDFlLCAweDcwMzQsIDB4MjBlOCwgMHgyMDYxLCAweDE4YjYsIDB4MmM0NCwgMHhhNDhjLCAweGE1OTAsCi0JMHhhNjk0LCAweGE3OTgsIDB4MDgwNCwgMHg0ZTEwLCAweDcyMjQsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDMsCi0JMHgwODBjLCAweDg0N2UsIDB4MjIwOCwgMHgwODA0LCAweDMzZjIsIDB4MDBmNiwgMHgwMGU2LCAweDA4MGMsCi0JMHg1NGVmLCAweDIwMDksIDB4MDAwNywgMHgxOTA0LCAweDRlZTUsIDB4MjA3MSwgMHgxODljLCAweDc0NWMsCi0JMHg4NGZmLCAweDIwMDksIDB4MDAwZSwgMHgxOTA0LCAweDRlZTUsIDB4YWM5YywgMHhhZDk4LCAweGFlYTQsCi0JMHhhZmEwLCAweDAwOTYsIDB4MDgwYywgMHgxMDUwLCAweDIwMDksIDB4MDAwMiwgMHgwOTA0LCAweDRlZTUsCi0JMHgyOTAwLCAweDcwNWUsIDB4OTAwZSwgMHg5MDFlLCAweDczNTYsIDB4NzM2MiwgMHhhODYwLCAweDcwNjYsCi0JMHhhODVjLCAweDkwODAsIDB4MDAwMywgMHg3MDVhLCAweDIwYTAsIDB4OTFkOCwgMHgxMDAwLCAweDJiNWMsCi0JMHg4YmZmLCAweDAxNzgsIDB4MDgwYywgMHg2NmM5LCAweDAxMTgsIDB4MDgwYywgMHg2NmQxLCAweDExNDgsCi0JMHhiODE0LCAweDIwYTksIDB4MDAwMSwgMHg0MDA0LCAweGI4MTAsIDB4NDAwNCwgMHg0MTA0LCAweDkzOTgsCi0JMHgwMDAzLCAweDgxMDgsIDB4OTE4MiwgMHgwODAwLCAweDAxMjAsIDB4OTM4NiwgMHgwMDNjLCAweDAxZTgsCi0JMHgwYzIwLCAweDgzZmYsIDB4MTFjMCwgMHg3MjU0LCAweDkwMGUsIDB4MjAwMSwgMHgwMDAzLCAweDA4MGMsCi0JMHg4NDdlLCAweDIyMDgsIDB4MDA5ZSwgMHhhODk3LCAweDQwMDAsIDB4YTk5YSwgMHg3MTVjLCAweDgxZmYsCi0JMHgwOTBjLCAweDBkZjYsIDB4MjE0OCwgMHgwODBjLCAweDEwNjksIDB4OTAwNiwgMHg3MDVlLCAweDkxOGQsCi0JMHgwMDAxLCAweDIwMDgsIDB4MDQxOCwgMHg3MDYzLCAweDAwMDEsIDB4NzE1MiwgMHg3MDU0LCAweDkzMDAsCi0JMHg3MDU2LCAweDIwNjEsIDB4MThiNywgMHgyYzQ0LCAweGEzN2EsIDB4NzA1OCwgMHhhMDc2LCAweDcwNjQsCi0JMHhhMDcyLCAweGE0OGUsIDB4YTU5MiwgMHhhNjk2LCAweGE3OWEsIDB4YTA5ZiwgMHg0ZWYxLCAweDAwMGUsCi0JMHhhMGEyLCAweDA4MGMsIDB4MTEzNCwgMHg5MDA2LCAweDAwNDgsIDB4MDA5ZSwgMHhhODk3LCAweDQwMDUsCi0JMHhhOTlhLCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZjYsIDB4YTBhMCwgMHg5MDRkLCAweDA5MGMsIDB4MGRmNiwgMHgwMGU2LCAweDIwNzEsCi0JMHgxODljLCAweGEwNmMsIDB4OTA4ZSwgMHgwMTAwLCAweDAxMzgsIDB4YTg3YiwgMHgwMDMwLCAweGE4ODMsCi0JMHgwMDAwLCAweGE4OTcsIDB4NDAwMiwgMHgwMGQ4LCAweDcwNjAsIDB4OTAwNSwgMHgxMTU4LCAweDcxNTAsCi0JMHg3MDU4LCAweDIwYTAsIDB4OTAxZSwgMHg3MDY0LCAweDIwZTgsIDB4YTQ4YywgMHhhNTkwLCAweGE2OTQsCi0JMHhhNzk4LCAweDA0MjgsIDB4YTg3YiwgMHgwMDAwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDAsCi0JMHg3MjU0LCAweDkwMGUsIDB4MjAwMSwgMHgwMDAzLCAweDA4MGMsIDB4ODQ3ZSwgMHhhYTlhLCAweDcxNWMsCi0JMHg4MWZmLCAweDA5MGMsIDB4MGRmNiwgMHgyMTQ4LCAweDA4MGMsIDB4MTA2OSwgMHg3MDVmLCAweDAwMDAsCi0JMHhhMGEwLCAweDIwNDgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg2YTIyLCAweDAxMmUsCi0JMHhhMDlmLCAweDAwMDAsIDB4YTBhMywgMHgwMDAwLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDkxZDgsCi0JMHgxMDAwLCAweDJiNWMsIDB4OGJmZiwgMHgwMTc4LCAweDA4MGMsIDB4NjZjOSwgMHgwMTE4LCAweDA4MGMsCi0JMHg2NmQxLCAweDExNDgsIDB4YjgxNCwgMHgyMGE5LCAweDAwMDEsIDB4NDAwNCwgMHhiODEwLCAweDQwMDQsCi0JMHg0MTA0LCAweDkzOTgsIDB4MDAwMywgMHg4MTA4LCAweDkxODIsIDB4MDgwMCwgMHgwMTIwLCAweDkzODYsCi0JMHgwMDNjLCAweDA1MTgsIDB4MGMyMCwgMHg4M2ZmLCAweDExZjAsIDB4NzE1NCwgMHg4MTBjLCAweGE5OWEsCi0JMHhhODk3LCAweDQwMDAsIDB4NzE1YywgMHg4MWZmLCAweDA5MGMsIDB4MGRmNiwgMHgyMTQ4LCAweDA4MGMsCi0JMHgxMDY5LCAweDkwMDYsIDB4NzA1ZSwgMHg5MThkLCAweDAwMDEsIDB4MjAwOCwgMHhhMGEwLCAweDIwNDgsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZhMjIsIDB4MDEyZSwgMHhhMDlmLCAweDAwMDAsCi0JMHhhMGEzLCAweDAwMDAsIDB4MDA3MCwgMHg3MDYzLCAweDAwMDEsIDB4NzE1MiwgMHg3MDU0LCAweDkzMDAsCi0JMHg3MDU2LCAweGEzN2EsIDB4YTQ4ZSwgMHhhNTkyLCAweGE2OTYsIDB4YTc5YSwgMHgwODBjLCAweDExMzQsCi0JMHg5MDA2LCAweDAwZWUsIDB4MDAwNSwgMHgwMDk2LCAweGE4OGMsIDB4OTBiZSwgMHg3MDAwLCAweDAxNDgsCi0JMHg5MGJlLCAweDcxMDAsIDB4MDEzMCwgMHg5MGJlLCAweDcyMDAsIDB4MDExOCwgMHgwMDllLCAweDA4MDQsCi0JMHgzNDI3LCAweGE4ODQsIDB4YTk4OCwgMHgwODBjLCAweDI2NmQsIDB4MTUxOCwgMHgwODBjLCAweDYzNDMsCi0JMHgxNTAwLCAweDcxMjYsIDB4YmUxMiwgMHhiZDE2LCAweGFlN2MsIDB4MDgwYywgMHg0OWI3LCAweDAxYzgsCi0JMHgwODBjLCAweDQ5YjcsIDB4MDFiMCwgMHgwMDllLCAweGE4NjcsIDB4MDAwMCwgMHhhODY4LCAweGMwZmQsCi0JMHhhODZhLCAweGE4MjMsIDB4MDAwMCwgMHhhODA0LCAweDIwNDgsIDB4MDgwYywgMHhiZWZhLCAweDExMjAsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDgwNCwgMHgzNDI0LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDRmYmUsCi0JMHgwMDA1LCAweDAwOWUsIDB4MjAwOSwgMHgwMDAyLCAweDA4MDQsIDB4MzQyNCwgMHg3MTI0LCAweDA4MGMsCi0JMHgzMTkwLCAweGE4MjAsIDB4OTA4NiwgMHg4MDAxLCAweDExMjAsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsCi0JMHgzNDI0LCAweDI5MDAsIDB4NzAyMiwgMHhhODA0LCAweDAwOTYsIDB4MjA0OCwgMHg4OTA2LCAweDgwMDYsCi0JMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4MDA5ZSwgMHg5MDgwLCAweDAwMDIsCi0JMHgwMDc2LCAweDAwMDYsIDB4MjA5OCwgMHgyMGEwLCAweDI3ZTAsIDB4MjdlOCwgMHgyMGE5LCAweDAwMmEsCi0JMHgwODBjLCAweDBmYjQsIDB4YWE2YywgMHhhYjcwLCAweGFjNzQsIDB4YWQ3OCwgMHgyMDYxLCAweDE4YjYsCi0JMHgyYzQ0LCAweGEwNmIsIDB4MDAwMCwgMHhhZTY0LCAweGFmOGMsIDB4OTdjNiwgMHg3MDAwLCAweDAxMTgsCi0JMHg5N2M2LCAweDcxMDAsIDB4MTE0OCwgMHg5NmMyLCAweDAwMDQsIDB4MDYwMCwgMHgyMDA5LCAweDAwMDQsCi0JMHgwMDBlLCAweDAwN2UsIDB4MDgwNCwgMHg0YTAzLCAweDk3YzYsIDB4NzIwMCwgMHgxMWI4LCAweDk2YzIsCi0JMHgwMDU0LCAweDAyYTAsIDB4MDAwZSwgMHgwMDdlLCAweDIwNjEsIDB4MThiNiwgMHgyYzQ0LCAweGEwNzYsCi0JMHhhNzcyLCAweGEwN2IsIDB4MDAyYSwgMHhhMjhlLCAweGEzOTIsIDB4YTQ5NiwgMHhhNTlhLCAweDA4MGMsCi0JMHgxMTM0LCAweDcwMDcsIDB4MDAwMiwgMHg3MDFmLCAweDUwMWEsIDB4MDAwNSwgMHgwMDBlLCAweDAwN2UsCi0JMHgwODA0LCAweDM0MjcsIDB4NzAyMCwgMHgyMDQ4LCAweGE4MDQsIDB4MjA0OCwgMHhhODA0LCAweDIwNDgsCi0JMHg4OTA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsCi0JMHgwMDAyLCAweDIwOTgsIDB4MjBhMCwgMHgyN2UwLCAweDI3ZTgsIDB4MjBhOSwgMHgwMDJhLCAweDA4MGMsCi0JMHgwZmI0LCAweDIxMDAsIDB4MjIzOCwgMHgyMDYxLCAweDE4YjYsIDB4MmM0NCwgMHhhMjhjLCAweGEzOTAsCi0JMHhhNDk0LCAweGE1OTgsIDB4MjAwOSwgMHgwMDJhLCAweDA4MDQsIDB4NGEwMywgMHg4MWZmLCAweDE5MDQsCi0JMHgzNDI0LCAweDc5OGMsIDB4MjAwMSwgMHgxOTU4LCAweDkxOGMsIDB4ODAwMCwgMHgyMTAyLCAweDA4MGMsCi0JMHg0OWNlLCAweDA5MDQsIDB4MzQyNywgMHgwODBjLCAweDY2YzksIDB4MDEyMCwgMHgwODBjLCAweDY2ZDEsCi0JMHgxOTA0LCAweDM0MjcsIDB4MDgwYywgMHg2NDZhLCAweDA5MDQsIDB4MzQyNCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4NjUzMCwgMHgwMTJlLCAweDA5MDQsIDB4MzQyNCwgMHgyMDAxLCAweDE5NTgsCi0JMHgyMDA0LCAweGQwZmMsIDB4MTkwNCwgMHgzM2YyLCAweDA4MDQsIDB4NDQ2MSwgMHhhOWEwLCAweDIwMDEsCi0JMHgxOTU4LCAweDkxOGMsIDB4ODAwMCwgMHhjMThkLCAweDIxMDIsIDB4MDgwYywgMHg0OWRiLCAweDAxYTAsCi0JMHgwODBjLCAweDY2YzksIDB4MDExOCwgMHgwODBjLCAweDY2ZDEsIDB4MTE3MCwgMHgwODBjLCAweDY0NmEsCi0JMHgyMDA5LCAweDAwMDIsIDB4MDEyOCwgMHgwODBjLCAweDY1MzAsIDB4MTE3MCwgMHgyMDA5LCAweDAwMDMsCi0JMHhhODk3LCAweDQwMDUsIDB4YTk5YSwgMHgwMDEwLCAweGE4OTcsIDB4NDAwNiwgMHg5MDBlLCAweDkwODUsCi0JMHgwMDAxLCAweDIwMDEsIDB4MDAzMCwgMHgwMDA1LCAweGE4OTcsIDB4NDAwMCwgMHgyMDAxLCAweDE5NTgsCi0JMHgyMDA0LCAweGQwZmMsIDB4MTEyOCwgMHgwODBjLCAweDU0ZTMsIDB4MDExMCwgMHg5MDA2LCAweDAwMTgsCi0JMHg5MDBlLCAweDkwODUsIDB4MDAwMSwgMHgyMDAxLCAweDAwMDAsIDB4MDAwNSwgMHg3OGE4LCAweGQwOGMsCi0JMHgxMTE4LCAweGQwODQsIDB4MDkwNCwgMHg0M2Q2LCAweDA4MGMsIDB4NDllYSwgMHgwOTA0LCAweDM0MjcsCi0JMHgwODBjLCAweDQ5YjcsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNDI0LCAweDA4MGMsCi0JMHg2NmM5LCAweDAxMzAsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMTgsIDB4OTA4ZSwgMHgwMDA1LCAweDE1YTAsCi0JMHg3OGE4LCAweGQwOGMsIDB4MDEyMCwgMHhiODAwLCAweGMwOGMsIDB4YjgwMiwgMHgwMDI4LCAweDA4MGMsCi0JMHg1NGRiLCAweGQwYjQsIDB4MDkwNCwgMHg0NDEwLCAweDc4ODQsIDB4OTA4ZSwgMHgwMDdlLCAweDA5MDQsCi0JMHg0NDEwLCAweDkwOGUsIDB4MDA3ZiwgMHgwOTA0LCAweDQ0MTAsIDB4OTA4ZSwgMHgwMDgwLCAweDA5MDQsCi0JMHg0NDEwLCAweGI4MDAsIDB4ZDA4YywgMHgxOTA0LCAweDQ0MTAsIDB4YTg2NywgMHgwMDAwLCAweGE4NjgsCi0JMHhjMGZkLCAweGE4NmEsIDB4MDgwYywgMHhiZjE5LCAweDExMjAsIDB4MjAwOSwgMHgwMDAzLCAweDA4MDQsCi0JMHgzNDI0LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDUwZTYsIDB4MDAwNSwgMHgwODBjLCAweDQ5ZWEsCi0JMHgwOTA0LCAweDM0MjcsIDB4MDgwNCwgMHg0NDEwLCAweDA4MGMsIDB4MzFlOSwgMHgwMTA4LCAweDAwMDUsCi0JMHgyMDA5LCAweDE4MzMsIDB4MjEwYywgMHg4MWZmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDAxLCAweDA4MDQsCi0JMHgzNDI0LCAweDA4MGMsIDB4NTRlZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwNywgMHgwODA0LCAweDM0MjQsCi0JMHgwODBjLCAweDY2YzEsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDgsIDB4MDgwNCwgMHgzNDI0LCAweGI4OWMsCi0JMHhkMGE0LCAweDExMTgsIDB4ZDBhYywgMHgxOTA0LCAweDQ0MTAsIDB4OTAwNiwgMHhhODY2LCAweGE4MzIsCi0JMHhhODY4LCAweGMwZmQsIDB4YTg2YSwgMHgwODBjLCAweGJmNzgsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDMsCi0JMHgwODA0LCAweDM0MjQsIDB4NzAwNywgMHgwMDAzLCAweDcwMWYsIDB4NTExZiwgMHgwMDA1LCAweGE4MzAsCi0JMHg5MDg2LCAweDAxMDAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDQsIDB4MDgwNCwgMHg1NDJmLCAweDA4MGMsCi0JMHg0OWVhLCAweDA5MDQsIDB4MzQyNywgMHgwODA0LCAweDUwYjgsIDB4ODFmZiwgMHgyMDA5LCAweDAwMDEsCi0JMHgxOTA0LCAweDM0MjQsIDB4MDgwYywgMHg1NGVmLCAweDIwMDksIDB4MDAwNywgMHgxOTA0LCAweDM0MjQsCi0JMHgwODBjLCAweDY2YzEsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDgsIDB4MDgwNCwgMHgzNDI0LCAweDA4MGMsCi0JMHg0OWVhLCAweDA5MDQsIDB4MzQyNywgMHgwODBjLCAweDY2YzksIDB4MjAwOSwgMHgwMDA5LCAweDE5MDQsCi0JMHgzNDI0LCAweDA4MGMsIDB4NDliNywgMHgyMDA5LCAweDAwMDIsIDB4MDkwNCwgMHgzNDI0LCAweDkwMDYsCi0JMHhhODY2LCAweGE4MzIsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4Nzk4OCwgMHhhOTVhLCAweDkxOTQsCi0JMHhmZDAwLCAweDkxOGMsIDB4MDBmZiwgMHg5MDA2LCAweDgyZmYsIDB4MTEyOCwgMHhjMGVkLCAweGE5NTIsCi0JMHg3OThjLCAweGE5NTYsIDB4MDAzOCwgMHg5MjhlLCAweDAxMDAsIDB4MTkwNCwgMHgzNDI3LCAweGMwZTUsCi0JMHhhOTUyLCAweGE5NTYsIDB4YTgzZSwgMHgwODBjLCAweGMxY2IsIDB4MjAwOSwgMHgwMDAzLCAweDA5MDQsCi0JMHgzNDI0LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDUxNzYsIDB4MDAwNSwgMHhhODMwLCAweDkwODYsCi0JMHgwMTAwLCAweDIwMDksIDB4MDAwNCwgMHgwOTA0LCAweDM0MjQsIDB4MDgwNCwgMHgzM2YyLCAweDdhYTgsCi0JMHg5Mjg0LCAweGMwMDAsIDB4MDE0OCwgMHhkMmVjLCAweDAxYTAsIDB4MDgwYywgMHg1NGVmLCAweDExODgsCi0JMHgyMDA5LCAweDAwMTQsIDB4MDgwNCwgMHgzNDI0LCAweGQyZGMsIDB4MTU3OCwgMHg4MWZmLCAweDIwMDksCi0JMHgwMDAxLCAweDE5MDQsIDB4MzQyNCwgMHgwODBjLCAweDU0ZWYsIDB4MjAwOSwgMHgwMDA3LCAweDE5MDQsCi0JMHgzNDI0LCAweGQyZjQsIDB4MDEzOCwgMHg5Mjg0LCAweDUwMDAsIDB4YzBkNSwgMHgwODBjLCAweDU0YjUsCi0JMHgwODA0LCAweDMzZjIsIDB4ZDJmYywgMHgwMTYwLCAweDA4MGMsIDB4NDllYSwgMHgwOTA0LCAweDM0MjcsCi0JMHg3OTg0LCAweDkyODQsIDB4OTAwMCwgMHhjMGQ1LCAweDA4MGMsIDB4NTQ4YSwgMHgwODA0LCAweDMzZjIsCi0JMHgwODBjLCAweDQ5ZWEsIDB4MDkwNCwgMHgzNDI3LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDA2LCAweDIwMDksIDB4MDAwOSwgMHgxOTA0LCAweDUyNjUsIDB4MDgwYywgMHg0OWI3LCAweDIwMDksCi0JMHgwMDAyLCAweDA5MDQsIDB4NTI2NSwgMHhhODVjLCAweDkwODAsIDB4MDAxYiwgMHhhZjYwLCAweDIwMDksCi0JMHgwMDA4LCAweDdhOGMsIDB4N2I4OCwgMHg3YzljLCAweDdkOTgsIDB4MDgwYywgMHg0YTAwLCAweDcwMWYsCi0JMHg1MWQyLCAweDAwMDUsIDB4YTg2YywgMHg5MDg2LCAweDA1MDAsIDB4MTEzOCwgMHhhODcwLCAweDkwMDUsCi0JMHgxMTIwLCAweGE4NzQsIDB4OTA4NCwgMHhmZjAwLCAweDAxMTAsIDB4MTkwNCwgMHgzNDI3LCAweGE4NjYsCi0JMHhhODMyLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDA4MGMsIDB4NDllYSwgMHgxMTEwLCAweDA4MDQsCi0JMHgzNDI3LCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGMyMzcsIDB4MjAwOSwgMHgwMDAzLCAweDA5MDQsCi0JMHg1MjY1LCAweDcwMDcsIDB4MDAwMywgMHg3MDFmLCAweDUxZjYsIDB4MDAwNSwgMHhhODMwLCAweDkwODYsCi0JMHgwMTAwLCAweDIwMDksIDB4MDAwNCwgMHgwOTA0LCAweDUyNjUsIDB4Nzk4NCwgMHg3YWE4LCAweDkyODQsCi0JMHgxMDAwLCAweGMwZDUsIDB4MDgwYywgMHg1NDhhLCAweDA4MDQsIDB4MzNmMiwgMHgwMGM2LCAweGFhYjAsCi0JMHg5Mjg0LCAweGMwMDAsIDB4MDE0OCwgMHhkMmVjLCAweDAxNzAsIDB4MDgwYywgMHg1NGVmLCAweDExNTgsCi0JMHgyMDA5LCAweDAwMTQsIDB4MDgwNCwgMHg1MjU0LCAweDIwNjEsIDB4MTgwMCwgMHgwODBjLCAweDU0ZWYsCi0JMHgyMDA5LCAweDAwMDcsIDB4MTVjOCwgMHhkMmY0LCAweDAxMzAsIDB4OTI4NCwgMHg1MDAwLCAweGMwZDUsCi0JMHgwODBjLCAweDU0YjUsIDB4MDA1OCwgMHhkMmZjLCAweDAxODAsIDB4MDgwYywgMHg0OWU4LCAweDA1OTAsCi0JMHhhOTk4LCAweDkyODQsIDB4OTAwMCwgMHhjMGQ1LCAweDA4MGMsIDB4NTQ4YSwgMHhhODdiLCAweDAwMDAsCi0JMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDAwLCAweDA0MzgsIDB4MDgwYywgMHg0OWU4LCAweDA1MTAsCi0JMHgwODBjLCAweDY2YzksIDB4MjAwOSwgMHgwMDA5LCAweDExYjgsIDB4YThjNCwgMHg5MDg2LCAweDA1MDAsCi0JMHgxMWM4LCAweGE4YzgsIDB4OTAwNSwgMHgxMWIwLCAweGE4Y2MsIDB4OTA4NCwgMHhmZjAwLCAweDExOTAsCi0JMHgwODBjLCAweDQ5ZTgsIDB4MTEwOCwgMHgwMDcwLCAweDIwMDksIDB4MDA0YiwgMHgwODBjLCAweGMyMzcsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDEwOCwgMHgwMDc4LCAweDA0MzEsIDB4MTljMCwgMHhhODk3LCAweDQwMDUsCi0JMHhhOTlhLCAweDAwMTAsIDB4YTg5NywgMHg0MDA2LCAweDkwMGUsIDB4OTA4NSwgMHgwMDAxLCAweDIwMDEsCi0JMHgwMDMwLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZTAsIDB4N2FhOCwgMHhkMmRjLCAweDA5MDQsCi0JMHgzNDI0LCAweDAwMTYsIDB4Nzk4NCwgMHg5Mjg0LCAweDEwMDAsIDB4YzBmZCwgMHgwODBjLCAweDU0OGEsCi0JMHgwMDFlLCAweDE5MDQsIDB4MzQyNCwgMHgwODA0LCAweDMzZjIsIDB4MDBmNiwgMHgyZDc4LCAweGFhYjAsCi0JMHgwMDIxLCAweDAwZmUsIDB4MDAwNSwgMHhhYWIwLCAweGMyZDUsIDB4ZDJkYywgMHgwMTUwLCAweDAwMTYsCi0JMHhhOTk4LCAweDkyODQsIDB4MTQwMCwgMHhjMGZkLCAweDA4MGMsIDB4NTQ4YSwgMHgwMDFlLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4ODFmZiwgMHgwMTIwLCAweDIwMDksIDB4MDAwMSwgMHgwODA0LCAweDM0MjQsCi0JMHgwODBjLCAweDU0ZWYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDcsIDB4MDgwNCwgMHgzNDI0LCAweDc5ODQsCi0JMHg3ZWE4LCAweDk2YjQsIDB4MDBmZiwgMHgwODBjLCAweDYzYTMsIDB4MTkwNCwgMHgzNDI3LCAweDkxODYsCi0JMHgwMDdmLCAweDAxMzgsIDB4MDgwYywgMHg2NmM5LCAweDAxMjAsIDB4MjAwOSwgMHgwMDA5LCAweDA4MDQsCi0JMHgzNDI0LCAweDA4MGMsIDB4NDliNywgMHgxMTIwLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDM0MjQsCi0JMHhhODY3LCAweDAwMDAsIDB4YTg2OCwgMHhjMGZkLCAweGE4NmEsIDB4MjAwMSwgMHgwMTAwLCAweDgwMDcsCi0JMHhhODBhLCAweDA4MGMsIDB4YmYzMywgMHgxMTIwLCAweDIwMDksIDB4MDAwMywgMHgwODA0LCAweDM0MjQsCi0JMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1MmM1LCAweDAwMDUsIDB4YTgwOCwgMHg4MDA3LCAweDkwODYsCi0JMHgwMTAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDA0LCAweDA4MDQsIDB4MzQyNCwgMHhhOGUwLCAweGE4NjYsCi0JMHhhODEwLCAweDgwMDcsIDB4OTA4NCwgMHgwMGZmLCAweDgwMGMsIDB4YTgxNCwgMHg4MDA3LCAweDkwODQsCi0JMHgwMGZmLCAweDgwMDQsIDB4OTA4MCwgMHgwMDAyLCAweDkxMDgsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsCi0JMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwNCwgMHg3YThjLCAweDdiODgsCi0JMHg3YzljLCAweDdkOTgsIDB4MDgwNCwgMHg0YTAzLCAweDA4MGMsIDB4NDliNywgMHgxMTIwLCAweDIwMDksCi0JMHgwMDAyLCAweDA4MDQsIDB4MzQyNCwgMHg3OTg0LCAweDkxOTQsIDB4ZmYwMCwgMHg5MThjLCAweDAwZmYsCi0JMHg4MjE3LCAweDgyZmYsIDB4MTExOCwgMHg3MDIzLCAweDE5OGUsIDB4MDA0MCwgMHg5MmM2LCAweDAwMDEsCi0JMHgxMTE4LCAweDcwMjMsIDB4MTlhOCwgMHgwMDEwLCAweDA4MDQsIDB4MzQyNywgMHgyMDA5LCAweDAwMWEsCi0JMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweGFmNjAsCi0JMHgwODBjLCAweDRhMDAsIDB4NzAxZiwgMHg1MzE1LCAweDAwMDUsIDB4MjAwMSwgMHgxODJkLCAweDIwMDMsCi0JMHgwMDAxLCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDIwOTgsIDB4YTg2MCwgMHgyMGUwLCAweDIwYTksCi0JMHgwMDFhLCAweDcwMjAsIDB4MjBhMCwgMHgyMGU5LCAweDAwMDEsIDB4NDAwMywgMHgwODA0LCAweDMzZjIsCi0JMHgwODBjLCAweDQ5YjcsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNDI0LCAweDc5ODQsCi0JMHg5MTk0LCAweGZmMDAsIDB4OTE4YywgMHgwMGZmLCAweDgyMTcsIDB4ODJmZiwgMHgxMTE4LCAweDIwOTksCi0JMHgxOThlLCAweDAwNDAsIDB4OTJjNiwgMHgwMDAxLCAweDExMTgsIDB4MjA5OSwgMHgxOWE4LCAweDAwMTAsCi0JMHgwODA0LCAweDM0MjcsIDB4YTg1YywgMHg5MDgwLCAweDAwMTksIDB4MjBhMCwgMHhhODYwLCAweDIwZTgsCi0JMHgyMGE5LCAweDAwMWEsIDB4MjBlMSwgMHgwMDAxLCAweDQwMDMsIDB4MjAwOSwgMHgwMDFhLCAweDdhOGMsCi0JMHg3Yjg4LCAweDdjOWMsIDB4N2Q5OCwgMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHhhZjYwLCAweDA4MDQsCi0JMHg0YTAzLCAweDc4ODQsIDB4OTA4YSwgMHgxMDAwLCAweDFhMDQsIDB4MzQyNywgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDgwMDMsIDB4ODAwYiwgMHg4MTBiLCAweDkxMDgsIDB4MDBjNiwgMHgyMDYxLCAweDE5ZDUsCi0JMHg2MTRhLCAweDAwY2UsIDB4MDEyZSwgMHgwODA0LCAweDMzZjIsIDB4MDBjNiwgMHgwODBjLCAweDcxN2UsCi0JMHgxMTYwLCAweDA4MGMsIDB4NzQ3YSwgMHgwODBjLCAweDVlMmYsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg3MWMyLCAweDA4MGMsIDB4NzA5ZSwgMHgwODBjLCAweDBkZjYsIDB4MjA2MSwgMHgxODAwLCAweDYwMzAsCi0JMHhjMDlkLCAweDYwMzIsIDB4MDgwYywgMHg1Y2VlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGM2LCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDQsIDB4OTA4ZSwgMHgwMDAwLCAweDA5MDQsIDB4MzQyNCwgMHg3ODg0LCAweDkwMDUsCi0JMHgwMTg4LCAweDc4ODgsIDB4MjA2MSwgMHgxOTc2LCAweDJjMGMsIDB4MjA2MiwgMHgwODBjLCAweDJhN2YsCi0JMHgwMWEwLCAweDA4MGMsIDB4MmE4NywgMHgwMTg4LCAweDA4MGMsIDB4MmE4ZiwgMHgwMTcwLCAweDIxNjIsCi0JMHgwODA0LCAweDM0MjcsIDB4MjA2MSwgMHgwMTAwLCAweDYwMzgsIDB4OTA4NiwgMHgwMDA3LCAweDExMTgsCi0JMHgyMDA5LCAweDAwMDEsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDAsIDB4Nzg4NCwgMHg5MDg2LCAweDAwMDIsCi0JMHgxNTY4LCAweDIwNjEsIDB4MDEwMCwgMHg2MDI4LCAweGMwOWMsIDB4NjAyYSwgMHgwMDI2LCAweDIwMTEsCi0JMHgwMDAzLCAweDA4MGMsIDB4OTkyMywgMHgyMDExLCAweDAwMDIsIDB4MDgwYywgMHg5OTJkLCAweDAwMmUsCi0JMHgwODBjLCAweDk4M2IsIDB4MDAzNiwgMHg5MDFlLCAweDA4MGMsIDB4OThiMSwgMHgwMDNlLCAweDYwZTMsCi0JMHgwMDAwLCAweDA4MGMsIDB4ZGJkYiwgMHgwODBjLCAweGRiZjYsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg3MWMyLCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDIwMDEsIDB4MTgwMCwgMHgyMDAzLCAweDAwMDQsCi0JMHgyMDAxLCAweDE5ODIsIDB4MjAwMywgMHgwMDAwLCAweDYwMjcsIDB4MDAwOCwgMHgwMGNlLCAweDA4MDQsCi0JMHgzM2YyLCAweDgxZmYsIDB4MDEyMCwgMHgyMDA5LCAweDAwMDEsIDB4MDgwNCwgMHgzNDI0LCAweDA4MGMsCi0JMHg1NGVmLCAweDAxMjAsIDB4MjAwOSwgMHgwMDA3LCAweDA4MDQsIDB4MzQyNCwgMHg3OTg0LCAweDdlYTgsCi0JMHg5NmI0LCAweDAwZmYsIDB4MDgwYywgMHg2M2EzLCAweDE5MDQsIDB4MzQyNywgMHg5MTg2LCAweDAwN2YsCi0JMHgwMTM4LCAweDA4MGMsIDB4NjZjOSwgMHgwMTIwLCAweDIwMDksIDB4MDAwOSwgMHgwODA0LCAweDM0MjQsCi0JMHgwODBjLCAweDQ5YjcsIDB4MTEyMCwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNDI0LCAweGE4NjcsCi0JMHgwMDAwLCAweGE4NjgsIDB4YzBmZCwgMHhhODZhLCAweDA4MGMsIDB4YmYzNiwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDAzLCAweDA4MDQsIDB4MzQyNCwgMHg3MDA3LCAweDAwMDMsIDB4NzAxZiwgMHg1NDE4LCAweDAwMDUsCi0JMHhhODMwLCAweDkwODYsIDB4MDEwMCwgMHgxMTIwLCAweDIwMDksIDB4MDAwNCwgMHgwODA0LCAweDM0MjQsCi0JMHhhOGUwLCAweGE4NjYsIDB4YTgzNCwgMHg4MDA3LCAweDgwMGMsIDB4YTg1YywgMHg5MDgwLCAweDAwMGMsCi0JMHg3YThjLCAweDdiODgsIDB4N2M5YywgMHg3ZDk4LCAweGFmNjAsIDB4MDgwNCwgMHg0YTAzLCAweGE4OTgsCi0JMHg5MDg2LCAweDAwMGQsIDB4MTkwNCwgMHgzNDI0LCAweDIwMjEsIDB4NDAwNSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDBlMDQsIDB4NTQzYywgMHgwMDEwLCAweDAxMmUsIDB4MGNjMCwgMHg3YzM2LCAweDk0ODYsCi0JMHg0MDAwLCAweDAxMTgsIDB4NzgzMywgMHgwMDExLCAweDAwMTAsIDB4NzgzMywgMHgwMDEwLCAweDc4ODMsCi0JMHg0MDA1LCAweGE5OTgsIDB4Nzk4NiwgMHhhOWE0LCAweDc5OWEsIDB4YTlhOCwgMHg3OTllLCAweDA4MGMsCi0JMHg0OWYzLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCi0JMHgxMWU2LCAweDcwMDcsIDB4MDAwMSwgMHgyMDkxLCAweDUwMDAsIDB4NzAwZiwgMHgwMDAwLCAweDAxMmUsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwYzYsIDB4MjA2MSwgMHgxOWQ1LCAweDc5ODQsCi0JMHg2MTVhLCAweDYxNTYsIDB4NjA1ZiwgMHgwMDAwLCAweDYwNTMsIDB4MDAwOSwgMHg3ODk4LCAweDYwNzIsCi0JMHg3ODljLCAweDYwNmUsIDB4Nzg4OCwgMHg2MDZhLCAweDc4OGMsIDB4NjA2NiwgMHgyMDAxLCAweDE5ZTUsCi0JMHgyMDQ0LCAweDIwMDEsIDB4MTllYywgMHhhMDc2LCAweGEwNjAsIDB4YTA3MiwgMHhhMDdiLCAweDAwMDEsCi0JMHhhMDdmLCAweDAwMDIsIDB4YTA2YiwgMHgwMDAwLCAweGEwOWYsIDB4MDAwMCwgMHgwMGNlLCAweDAxMmUsCi0JMHgwODA0LCAweDMzZjIsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDBiNiwgMHgwMGM2LCAweDkwZTQsCi0JMHhjMDAwLCAweDAxNjgsIDB4MDAwNiwgMHhkMGQ0LCAweDAxMzAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMjksCi0JMHgwODBjLCAweDMxYWUsIDB4MDAzZSwgMHgwODBjLCAweGJkOWIsIDB4MDAwZSwgMHgxMTk4LCAweGQwZTQsCi0JMHgwMTYwLCAweDkxODAsIDB4MTAwMCwgMHgyMDA0LCAweDkwNWQsIDB4MDE2MCwgMHgwODBjLCAweDVlNDksCi0JMHgwODBjLCAweDlmNjksIDB4MDExMCwgMHhiODE3LCAweDAwMDAsIDB4OTAwNiwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMTJlLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDBjYzgsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwMTU2LCAweDIwMTAsIDB4OTAwZSwgMHgyMGE5LCAweDA4MDAsIDB4MDAxNiwgMHg5MTgwLCAweDEwMDAsCi0JMHgyMDA0LCAweDkwMDUsIDB4MDE4OCwgMHg5MTg2LCAweDAwN2UsIDB4MDE3MCwgMHg5MTg2LCAweDAwN2YsCi0JMHgwMTU4LCAweDkxODYsIDB4MDA4MCwgMHgwMTQwLCAweDkxODYsIDB4MDBmZiwgMHgwMTI4LCAweDAwMjYsCi0JMHgyMjAwLCAweDA4MGMsIDB4NTQ4YSwgMHgwMDJlLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweDU0YmQsCi0JMHgwMTVlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4NWMsIDB4MjAwNCwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODdiLCAweDIwMDQsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwZDQsCi0JMHgwMDBlLCAweDAwMDUsIDB4MjAwMSwgMHgxODBlLCAweDIwMDQsIDB4ZDBiNCwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDAwMDUsIDB4MDAxNiwgMHgwMGU2LCAweDIwNzEsCi0JMHgxODljLCAweDcxMDgsIDB4OTEwZCwgMHg3MTBhLCAweDAwZWUsIDB4MDAxZSwgMHgwMDA1LCAweDc5YTQsCi0JMHg4MWZmLCAweDA5MDQsIDB4MzQyNywgMHg5MTgyLCAweDAwODEsIDB4MWEwNCwgMHgzNDI3LCAweDgxMGMsCi0JMHgwMDE2LCAweDA4MGMsIDB4NDliNywgMHgwMTcwLCAweDA4MGMsIDB4MGYzZiwgMHgyMTAwLCAweDIyMzgsCi0JMHg3ZDg0LCAweDdjODgsIDB4N2I4YywgMHg3YTkwLCAweDAwMWUsIDB4MDgwYywgMHg0YTAwLCAweDcwMWYsCi0JMHg1NTFmLCAweDAwMDUsIDB4MDAxZSwgMHgyMDA5LCAweDAwMDIsIDB4MDgwNCwgMHgzNDI0LCAweDIwNzksCi0JMHgwMDAwLCAweDdkOTQsIDB4N2M5OCwgMHg3YmE4LCAweDdhYWMsIDB4NzlhNCwgMHg4MTBjLCAweDIwNjEsCi0JMHgxOGI2LCAweDJjNDQsIDB4YTc3MCwgMHhhMDc0LCAweDIwNzEsIDB4MTg5YywgMHgwODBjLCAweDRhMDMsCi0JMHg3MDFmLCAweDU1MzMsIDB4MDAwNSwgMHgyMDYxLCAweDE4YjYsIDB4MmM0NCwgMHgwMDE2LCAweDAwMjYsCi0JMHhhMjcwLCAweGExNzQsIDB4MDgwYywgMHgwZjQ3LCAweDAwMmUsIDB4MDAxZSwgMHgwODBjLCAweDBmZjQsCi0JMHg5MDA2LCAweGE4MDIsIDB4YTgwNiwgMHgwODA0LCAweDMzZjIsIDB4MDEyNiwgMHgwMTU2LCAweDAxMzYsCi0JMHgwMTQ2LCAweDAxYzYsIDB4MDFkNiwgMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNjEsCi0JMHgwMTAwLCAweDIwNjksIDB4MDIwMCwgMHgyMDcxLCAweDE4MDAsIDB4NjA0NCwgMHhkMGE0LCAweDExZTgsCi0JMHhkMDg0LCAweDAxMTgsIDB4MDgwYywgMHg1NmVlLCAweDAwNjgsIDB4ZDA4YywgMHgwMTE4LCAweDA4MGMsCi0JMHg1NWY3LCAweDAwNDAsIDB4ZDA5NCwgMHgwMTE4LCAweDA4MGMsIDB4NTVjNywgMHgwMDE4LCAweGQwOWMsCi0JMHgwMTA4LCAweDAwOTksIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMWRlLCAweDAxY2UsCi0JMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMTJlLCAweDAwMDUsIDB4MDAxNiwgMHg2MTI4LCAweGQxOWMsCi0JMHgxMTEwLCAweGMxOWQsIDB4NjEyYSwgMHgwMDFlLCAweDBjNjgsIDB4MDAwNiwgMHg3MDk0LCAweDkwMDUsCi0JMHgwMDBlLCAweDAxMjAsIDB4NzA5NywgMHgwMDAwLCAweDcwOGYsIDB4MDAwMCwgMHg2MjRjLCAweDkyODYsCi0JMHhmMGYwLCAweDExNTAsIDB4NjA0OCwgMHg5MDg2LCAweGYwZjAsIDB4MDEzMCwgMHg2MjRhLCAweDYwNDMsCi0JMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgwNDkwLCAweDkyOTQsIDB4ZmYwMCwgMHg5Mjk2LCAweGY3MDAsCi0JMHgwMTc4LCAweDcxMzgsIDB4ZDFhNCwgMHgxMTYwLCAweDYyNDAsIDB4OTI5NSwgMHgwMTAwLCAweDYyNDIsCi0JMHg5Mjk0LCAweDAwMTAsIDB4MDEyOCwgMHgyMDA5LCAweDAwZjcsIDB4MDgwYywgMHg1ZGFiLCAweDAwZjAsCi0JMHg2MDQwLCAweDkwODQsIDB4MDAxMCwgMHg5MDg1LCAweDAxNDAsIDB4NjA0MiwgMHg2MDQzLCAweDAwMDAsCi0JMHg3MDgzLCAweDAwMDAsIDB4NzA5ZiwgMHgwMDAxLCAweDcwYzMsIDB4MDAwMCwgMHg3MGRiLCAweDAwMDAsCi0JMHgyMDA5LCAweDFjODAsIDB4MjAwYiwgMHgwMDAwLCAweDcwOTMsIDB4MDAwMCwgMHg3MDg3LCAweDAwMGYsCi0JMHgyMDA5LCAweDAwMGYsIDB4MjAxMSwgMHg1YzkxLCAweDA4MGMsIDB4ODJlYiwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODdkLCAweDIwMDQsIDB4ZDA4YywgMHgwMTEwLCAweDcwNWIsIDB4ZmZmZiwgMHg3MDg0LCAweDkwMDUsCi0JMHgxNTI4LCAweDIwMTEsIDB4NWM5MSwgMHgwODBjLCAweDgyNTksIDB4NjA0MCwgMHg5MDk0LCAweDAwMTAsCi0JMHg5Mjg1LCAweDAwMjAsIDB4NjA0MiwgMHgyMGE5LCAweDAwYzgsIDB4NjA0NCwgMHhkMDhjLCAweDExNjgsCi0JMHgxZjA0LCAweDU1ZGQsIDB4NjI0MiwgMHg3MDk3LCAweDAwMDAsIDB4NjA0MCwgMHg5MDk0LCAweDAwMTAsCi0JMHg5Mjg1LCAweDAwODAsIDB4NjA0MiwgMHg2MjQyLCAweDAwNDgsIDB4NjI0MiwgMHg3MDk3LCAweDAwMDAsCi0JMHg3MDhiLCAweDAwMDAsIDB4OTAwNiwgMHgwODBjLCAweDVlMzQsIDB4MDAwMCwgMHgwMDA1LCAweDcwODgsCi0JMHg5MDhhLCAweDAwMDMsIDB4MWEwYywgMHgwZGY2LCAweDAwMGIsIDB4MDAwNSwgMHg1NjAxLCAweDU2NTIsCi0JMHg1NmVkLCAweDAwZjYsIDB4MDAxNiwgMHg2OTAwLCAweDkxOGMsIDB4MDgwMCwgMHg3MDhiLCAweDAwMDEsCi0JMHgyMDAxLCAweDAxNWQsIDB4MjAwMywgMHgwMDAwLCAweDY4MDMsIDB4MDBmYywgMHgyMGE5LCAweDAwMDQsCi0JMHg2ODAwLCAweDkwODQsIDB4MDBmYywgMHgwMTIwLCAweDFmMDQsIDB4NTYxMCwgMHgwODBjLCAweDBkZjYsCi0JMHg2OGEwLCAweDY4YTIsIDB4Njg5YywgMHg2ODllLCAweDY4OTgsIDB4Njg5YSwgMHhhMDAxLCAweDkxOGQsCi0JMHgxNjAwLCAweDY5MDIsIDB4MDAxZSwgMHg2ODM3LCAweDAwMjAsIDB4MDgwYywgMHg1ZTEwLCAweDIwNzksCi0JMHgxYzAwLCAweDc4MzMsIDB4MTEwMSwgMHg3ODM3LCAweDAwMDAsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksCi0JMHgxODA1LCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDFjMGUsIDB4MjBhOSwgMHgwMDA0LCAweDQwMDMsCi0JMHgwODBjLCAweDlkZjIsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MWMwMCwgMHgyMGU5LCAweDAwMDAsCi0JMHgyMGExLCAweDAyNDAsIDB4MjBhOSwgMHgwMDE0LCAweDQwMDMsIDB4NjBjMywgMHgwMDBjLCAweDYwMGYsCi0JMHgwMDAwLCAweDA4MGMsIDB4NWNjMiwgMHgwMGZlLCAweDkwMDYsIDB4NzA4ZSwgMHg2MDQzLCAweDAwMDgsCi0JMHg2MDQyLCAweDAwMDUsIDB4MDBmNiwgMHg3MDhjLCAweDcwOGYsIDB4MDAwMCwgMHg5MDI1LCAweDA5MDQsCi0JMHg1NmNhLCAweDYwMjAsIDB4ZDBiNCwgMHgxOTA0LCAweDU2YzgsIDB4NzE5YywgMHg4MWZmLCAweDA5MDQsCi0JMHg1NmI2LCAweDk0ODYsIDB4MDAwYywgMHgxOTA0LCAweDU2YzMsIDB4OTQ4MCwgMHgwMDE4LCAweDgwMDQsCi0JMHgyMGE4LCAweDA4MGMsIDB4NWUwOSwgMHgyMDExLCAweDAyNjAsIDB4MjAxOSwgMHgxYzAwLCAweDIyMGMsCi0JMHgyMzA0LCAweDkxMDYsIDB4MTFlOCwgMHg4MjEwLCAweDgzMTgsIDB4MWYwNCwgMHg1NjZmLCAweDYwNDMsCi0JMHgwMDA0LCAweDIwNjEsIDB4MDE0MCwgMHg2MDViLCAweGJjOTQsIDB4NjA1ZiwgMHhmMGYwLCAweDIwNjEsCi0JMHgwMTAwLCAweDYwNDMsIDB4MDAwNiwgMHg3MDhiLCAweDAwMDIsIDB4NzA5NywgMHgwMDAyLCAweDIwMDksCi0JMHgwN2QwLCAweDIwMTEsIDB4NWM5OCwgMHgwODBjLCAweDgyZWIsIDB4MDgwYywgMHg1ZTEwLCAweDA0YzAsCi0JMHgwODBjLCAweDVlMDksIDB4MjA3OSwgMHgwMjYwLCAweDc5MzAsIDB4OTE4ZSwgMHgxMTAxLCAweDE1NTgsCi0JMHg3ODM0LCAweDkwMDUsIDB4MTU0MCwgMHg3OTAwLCAweDkxOGMsIDB4MDBmZiwgMHgxMTE4LCAweDc4MDQsCi0JMHg5MDA1LCAweDAxOTAsIDB4MDgwYywgMHg1ZTA5LCAweDIwMTEsIDB4MDI2ZSwgMHgyMDE5LCAweDE4MDUsCi0JMHgyMGE5LCAweDAwMDQsIDB4MjIwYywgMHgyMzA0LCAweDkxMDIsIDB4MDIzMCwgMHgxMWEwLCAweDgyMTAsCi0JMHg4MzE4LCAweDFmMDQsIDB4NTZhYSwgMHgwMDc4LCAweDcwOWYsIDB4MDAwMCwgMHgwODBjLCAweDVlMDksCi0JMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjYwLCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDFjMDAsCi0JMHgyMGE5LCAweDAwMTQsIDB4NDAwMywgMHg2MDQzLCAweDAwMDgsIDB4NjA0MywgMHgwMDAwLCAweDAwMTAsCi0JMHgwMGZlLCAweDAwMDUsIDB4NjA0MCwgMHg5MDg1LCAweDAxMDAsIDB4NjA0MiwgMHg2MDIwLCAweGQwYjQsCi0JMHgxZGI4LCAweDA4MGMsIDB4OWRmMiwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxYzAwLCAweDIwZTksCi0JMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHgyMGE5LCAweDAwMTQsIDB4NDAwMywgMHg2MGMzLCAweDAwMGMsCi0JMHgyMDExLCAweDE5Y2MsIDB4MjAxMywgMHgwMDAwLCAweDcwOGYsIDB4MDAwMCwgMHg2MGEzLCAweDAwNTYsCi0JMHg2MGE3LCAweDk1NzUsIDB4MDgwYywgMHg5NjExLCAweDA4ZDgsIDB4MDAwNSwgMHg3MDk0LCAweDkwOGEsCi0JMHgwMDFkLCAweDFhMGMsIDB4MGRmNiwgMHgwMDBiLCAweDAwMDUsIDB4NTcxZiwgMHg1NzMyLCAweDU3NWIsCi0JMHg1NzdiLCAweDU3YTEsIDB4NTdkMCwgMHg1N2Y2LCAweDU4MmUsIDB4NTg1NCwgMHg1ODgyLCAweDU4YmQsCi0JMHg1OGY1LCAweDU5MTMsIDB4NTkzZSwgMHg1OTYwLCAweDU5N2IsIDB4NTk4NSwgMHg1OWI5LCAweDU5ZGYsCi0JMHg1YTBlLCAweDVhMzQsIDB4NWE2YywgMHg1YWIwLCAweDVhZWQsIDB4NWIwZSwgMHg1YjY3LCAweDViODksCi0JMHg1YmI3LCAweDViYjcsIDB4MDBjNiwgMHgyMDYxLCAweDE4MDAsIDB4NjAwMywgMHgwMDA3LCAweDIwNjEsCi0JMHgwMTAwLCAweDYwMDQsIDB4OTA4NCwgMHhmZmY5LCAweDYwMDYsIDB4MDBjZSwgMHgwMDA1LCAweDIwNjEsCi0JMHgwMTQwLCAweDYwNWIsIDB4YmM5NCwgMHg2MDVmLCAweGYwZjAsIDB4MjA2MSwgMHgwMTAwLCAweDYwNDMsCi0JMHgwMDAyLCAweDcwOTcsIDB4MDAwMSwgMHgyMDA5LCAweDA3ZDAsIDB4MjAxMSwgMHg1Yzk4LCAweDA4MGMsCi0JMHg4MmViLCAweDAwMDUsIDB4MDBmNiwgMHg3MDhjLCAweDkwODYsIDB4MDAxNCwgMHgxNTEwLCAweDYwNDIsCi0JMHg2MDIwLCAweGQwYjQsIDB4MTFmMCwgMHgwODBjLCAweDVlMDksIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsCi0JMHg5Mjk2LCAweDExMDIsIDB4MTFhMCwgMHg3ODM0LCAweDkwMDUsIDB4MTE4OCwgMHg3YTM4LCAweGQyZmMsCi0JMHgwMTI4LCAweDcwYzAsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzMsIDB4MDAwMSwgMHgyMDExLCAweDVjOTgsCi0JMHgwODBjLCAweDgyNTksIDB4NzA5NywgMHgwMDEwLCAweDA4MGMsIDB4NTk4NSwgMHgwMDEwLCAweDcwOGYsCi0JMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTcsIDB4MDAwMywgMHg2MDQzLCAweDAwMDQsCi0JMHgyMDExLCAweDVjOTgsIDB4MDgwYywgMHg4MjU5LCAweDA4MGMsIDB4NWQ4ZCwgMHgyMDc5LCAweDAyNDAsCi0JMHg3ODMzLCAweDExMDIsIDB4NzgzNywgMHgwMDAwLCAweDIwYTksIDB4MDAwOCwgMHg5Zjg4LCAweDAwMGUsCi0JMHgyMDBiLCAweDAwMDAsIDB4ODEwOCwgMHgxZjA0LCAweDU3NzAsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsCi0JMHg1Y2MyLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOGMsIDB4OTAwNSwgMHgwNTAwLCAweDIwMTEsCi0JMHg1Yzk4LCAweDA4MGMsIDB4ODI1OSwgMHg5MDg2LCAweDAwMTQsIDB4MTFiOCwgMHgwODBjLCAweDVlMDksCi0JMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDIsIDB4MTE3OCwgMHg3ODM0LCAweDkwMDUsCi0JMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzAsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzMsCi0JMHgwMDAxLCAweDcwOTcsIDB4MDAwNCwgMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg1ZGU1LCAweDAwZmUsCi0JMHgwMDA1LCAweDAwZjYsIDB4NzA5NywgMHgwMDA1LCAweDA4MGMsIDB4NWQ4ZCwgMHgyMDc5LCAweDAyNDAsCi0JMHg3ODMzLCAweDExMDMsIDB4NzgzNywgMHgwMDAwLCAweDA4MGMsIDB4NWUwOSwgMHgwODBjLCAweDVkZWMsCi0JMHgxMTcwLCAweDcwODAsIDB4OTAwNSwgMHgxMTU4LCAweDcxNTgsIDB4OTE4NiwgMHhmZmZmLCAweDAxMzgsCi0JMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHg1YzQ1LCAweDAxNjgsIDB4MDgwYywgMHg1ZGMyLCAweDIwYTksCi0JMHgwMDA4LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNmUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsCi0JMHgwMjRlLCAweDQwMDMsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsIDB4NWNjMiwgMHgwMGZlLCAweDAwMDUsCi0JMHgwMGY2LCAweDcwOGMsIDB4OTAwNSwgMHgwNTAwLCAweDIwMTEsIDB4NWM5OCwgMHgwODBjLCAweDgyNTksCi0JMHg5MDg2LCAweDAwMTQsIDB4MTFiOCwgMHgwODBjLCAweDVlMDksIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsCi0JMHg5Mjk2LCAweDExMDMsIDB4MTE3OCwgMHg3ODM0LCAweDkwMDUsIDB4MTE2MCwgMHg3YTM4LCAweGQyZmMsCi0JMHgwMTI4LCAweDcwYzAsIDB4OTAwNSwgMHgxMTEwLCAweDcwYzMsIDB4MDAwMSwgMHg3MDk3LCAweDAwMDYsCi0JMHgwMDI5LCAweDAwMTAsIDB4MDgwYywgMHg1ZGU1LCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTcsCi0JMHgwMDA3LCAweDA4MGMsIDB4NWQ4ZCwgMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA0LCAweDc4MzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NWUwOSwgMHgwODBjLCAweDVkZWMsIDB4MTFiOCwgMHg3MDgwLCAweDkwMDUsCi0JMHgxMWEwLCAweDcxNjAsIDB4OTE4NiwgMHhmZmZmLCAweDAxODAsIDB4OTE4MCwgMHgzMWYzLCAweDIwMGQsCi0JMHg5MThjLCAweGZmMDAsIDB4ODEwZiwgMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHg1YzQ1LCAweDAxODAsCi0JMHgwODBjLCAweDRkZDcsIDB4MDExMCwgMHgwODBjLCAweDI2ZDYsIDB4MjBhOSwgMHgwMDA4LCAweDIwZTEsCi0JMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDQwMDMsCi0JMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg1Y2MyLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOGMsCi0JMHg5MDA1LCAweDA1MDAsIDB4MjAxMSwgMHg1Yzk4LCAweDA4MGMsIDB4ODI1OSwgMHg5MDg2LCAweDAwMTQsCi0JMHgxMWI4LCAweDA4MGMsIDB4NWUwOSwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDQsCi0JMHgxMTc4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzAsCi0JMHg5MDA1LCAweDExMTAsIDB4NzBjMywgMHgwMDAxLCAweDcwOTcsIDB4MDAwOCwgMHgwMDI5LCAweDAwMTAsCi0JMHgwODBjLCAweDVkZTUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5NywgMHgwMDA5LCAweDA4MGMsCi0JMHg1ZDhkLCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDUsIDB4NzgzNywgMHgwMTAwLCAweDA4MGMsCi0JMHg1ZGVjLCAweDExNTAsIDB4NzA4MCwgMHg5MDA1LCAweDExMzgsIDB4MDgwYywgMHg1YmI4LCAweDExODgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHgyNmQ2LCAweDIwYTksIDB4MDAwOCwgMHgwODBjLCAweDVlMDksCi0JMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsCi0JMHg0MDAzLCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDVjYzIsIDB4MDAxMCwgMHgwODBjLCAweDU3MTIsCi0JMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDhjLCAweDkwMDUsIDB4MDVhOCwgMHgyMDExLCAweDVjOTgsCi0JMHgwODBjLCAweDgyNTksIDB4OTA4NiwgMHgwMDE0LCAweDE1NjAsIDB4MDgwYywgMHg1ZTA5LCAweDIwNzksCi0JMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA1LCAweDE1MjAsIDB4NzgzNCwgMHg5MDg0LCAweDAxMDAsCi0JMHgyMDExLCAweDAxMDAsIDB4OTIxZSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzAsCi0JMHg5MDA1LCAweDExMTAsIDB4NzBjMywgMHgwMDAxLCAweDcwOTcsIDB4MDAwYSwgMHgwMGIxLCAweDAwOTgsCi0JMHg5MDA1LCAweDExNzgsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBjMCwgMHg5MDA1LCAweDExMTAsCi0JMHg3MGMzLCAweDAwMDEsIDB4NzA5MywgMHgwMDAwLCAweDcwOTcsIDB4MDAwZSwgMHgwODBjLCAweDU5NjAsCi0JMHgwMDEwLCAweDA4MGMsIDB4NWRlNSwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDk3LCAweDAwMGIsCi0JMHgyMDExLCAweDFjMGUsIDB4MjBlOSwgMHgwMDAxLCAweDIyYTAsIDB4MjBhOSwgMHgwMDQwLCAweDIwMTksCi0JMHhmZmZmLCAweDQzMDQsIDB4MDgwYywgMHg1ZDhkLCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDYsCi0JMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg1ZGVjLCAweDAxMTgsIDB4MjAxMywgMHgwMDAwLCAweDAwMjAsCi0JMHg3MDVjLCAweDkwODUsIDB4MDEwMCwgMHgyMDEyLCAweDIwYTksIDB4MDA0MCwgMHgyMDA5LCAweDAyNGUsCi0JMHgyMDExLCAweDFjMGUsIDB4MjIwZSwgMHg4MjEwLCAweDgxMDgsIDB4OTE4NiwgMHgwMjYwLCAweDExMjgsCi0JMHg2ODEwLCAweDgwMDAsIDB4NjgxMiwgMHgyMDA5LCAweDAyNDAsIDB4MWYwNCwgMHg1OGUyLCAweDYwYzMsCi0JMHgwMDg0LCAweDA4MGMsIDB4NWNjMiwgMHgwMGZlLCAweDAwMDUsIDB4MDBmNiwgMHg3MDhjLCAweDkwMDUsCi0JMHgwMWMwLCAweDIwMTEsIDB4NWM5OCwgMHgwODBjLCAweDgyNTksIDB4OTA4NiwgMHgwMDg0LCAweDExNzgsCi0JMHgwODBjLCAweDVlMDksIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA2LCAweDExMzgsCi0JMHg3ODM0LCAweDkwMDUsIDB4MTEyMCwgMHg3MDk3LCAweDAwMGMsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsCi0JMHg1ZGU1LCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTcsIDB4MDAwZCwgMHgwODBjLCAweDVkOGQsCi0JMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA3LCAweDc4MzcsIDB4MDAwMCwgMHgwODBjLCAweDVlMDksCi0JMHgyMGE5LCAweDAwNDAsIDB4MjAxMSwgMHgwMjZlLCAweDIwMDksIDB4MDI0ZSwgMHgyMjBlLCAweDgyMTAsCi0JMHg4MTA4LCAweDkxODYsIDB4MDI2MCwgMHgxMTUwLCAweDY4MTAsIDB4ODAwMCwgMHg2ODEyLCAweDIwMDksCi0JMHgwMjQwLCAweDY4MTQsIDB4ODAwMCwgMHg2ODE2LCAweDIwMTEsIDB4MDI2MCwgMHgxZjA0LCAweDU5MjYsCi0JMHg2MGMzLCAweDAwODQsIDB4MDgwYywgMHg1Y2MyLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOGMsCi0JMHg5MDA1LCAweDAxZTAsIDB4MjAxMSwgMHg1Yzk4LCAweDA4MGMsIDB4ODI1OSwgMHg5MDg2LCAweDAwODQsCi0JMHgxMTk4LCAweDA4MGMsIDB4NWUwOSwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDcsCi0JMHgxMTU4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTQwLCAweDcwOTMsIDB4MDAwMSwgMHgwODBjLCAweDVkNWYsCi0JMHg3MDk3LCAweDAwMGUsIDB4MDAyOSwgMHgwMDEwLCAweDA4MGMsIDB4NWRlNSwgMHgwMGZlLCAweDAwMDUsCi0JMHg5MThkLCAweDAwMDEsIDB4MDgwYywgMHg1ZTM0LCAweDcwOTcsIDB4MDAwZiwgMHg3MDhmLCAweDAwMDAsCi0JMHgyMDYxLCAweDAxNDAsIDB4NjA1YiwgMHhiYzg1LCAweDYwNWYsIDB4YjViNSwgMHgyMDYxLCAweDAxMDAsCi0JMHg2MDQzLCAweDAwMDUsIDB4NjA0MywgMHgwMDA0LCAweDIwMDksIDB4MDdkMCwgMHgyMDExLCAweDVjOTgsCi0JMHgwODBjLCAweDgyNGQsIDB4MDAwNSwgMHg3MDhjLCAweDkwMDUsIDB4MDEzMCwgMHgyMDExLCAweDVjOTgsCi0JMHgwODBjLCAweDgyNTksIDB4NzA5NywgMHgwMDAwLCAweDAwMDUsIDB4NzA5NywgMHgwMDExLCAweDA4MGMsCi0JMHg5ZGYyLCAweDA4MGMsIDB4NWUwOSwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjYwLCAweDIwZTksCi0JMHgwMDAwLCAweDIwYTEsIDB4MDI0MCwgMHg3NDhjLCAweDk0ODAsIDB4MDAxOCwgMHg5MDgwLCAweDAwMDcsCi0JMHg5MDg0LCAweDAzZjgsIDB4ODAwNCwgMHgyMGE4LCAweDQwMDMsIDB4MDgwYywgMHg1ZGVjLCAweDExYTAsCi0JMHg3MTc4LCAweDgxZmYsIDB4MDE4OCwgMHg5MDBlLCAweDcwN2MsIDB4OTA4NCwgMHgwMGZmLCAweDAxNjAsCi0JMHgwODBjLCAweDI2NmQsIDB4OTE4NiwgMHgwMDdlLCAweDAxMzgsIDB4OTE4NiwgMHgwMDgwLCAweDAxMjAsCi0JMHgyMDExLCAweDAwMDgsIDB4MDgwYywgMHg1YzQ1LCAweDYwYzMsIDB4MDAxNCwgMHgwODBjLCAweDVjYzIsCi0JMHgwMDA1LCAweDAwZjYsIDB4NzA4YywgMHg5MDA1LCAweDA1MDAsIDB4MjAxMSwgMHg1Yzk4LCAweDA4MGMsCi0JMHg4MjU5LCAweDkwODYsIDB4MDAxNCwgMHgxMWI4LCAweDA4MGMsIDB4NWUwOSwgMHgyMDc5LCAweDAyNjAsCi0JMHg3YTMwLCAweDkyOTYsIDB4MTEwMywgMHgxMTc4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTYwLCAweDdhMzgsCi0JMHhkMmZjLCAweDAxMjgsIDB4NzBjMCwgMHg5MDA1LCAweDExMTAsIDB4NzBjMywgMHgwMDAxLCAweDcwOTcsCi0JMHgwMDEyLCAweDAwMjksIDB4MDAxMCwgMHg3MDhmLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsCi0JMHg3MDk3LCAweDAwMTMsIDB4MDgwYywgMHg1ZDliLCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDMsCi0JMHg3ODM3LCAweDAwMDAsIDB4MDgwYywgMHg1ZTA5LCAweDA4MGMsIDB4NWRlYywgMHgxMTcwLCAweDcwODAsCi0JMHg5MDA1LCAweDExNTgsIDB4NzE1OCwgMHg5MTg2LCAweGZmZmYsIDB4MDEzOCwgMHgyMDExLCAweDAwMDgsCi0JMHgwODBjLCAweDVjNDUsIDB4MDE2OCwgMHgwODBjLCAweDVkYzIsIDB4MjBhOSwgMHgwMDA4LCAweDIwZTEsCi0JMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDQwMDMsCi0JMHg2MGMzLCAweDAwMTQsIDB4MDgwYywgMHg1Y2MyLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOGMsCi0JMHg5MDA1LCAweDA1MDAsIDB4MjAxMSwgMHg1Yzk4LCAweDA4MGMsIDB4ODI1OSwgMHg5MDg2LCAweDAwMTQsCi0JMHgxMWI4LCAweDA4MGMsIDB4NWUwOSwgMHgyMDc5LCAweDAyNjAsIDB4N2EzMCwgMHg5Mjk2LCAweDExMDQsCi0JMHgxMTc4LCAweDc4MzQsIDB4OTAwNSwgMHgxMTYwLCAweDdhMzgsIDB4ZDJmYywgMHgwMTI4LCAweDcwYzAsCi0JMHg5MDA1LCAweDExMTAsIDB4NzBjMywgMHgwMDAxLCAweDcwOTcsIDB4MDAxNCwgMHgwMDI5LCAweDAwMTAsCi0JMHg3MDhmLCAweDAwMDAsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA5NywgMHgwMDE1LCAweDA4MGMsCi0JMHg1ZDliLCAweDIwNzksIDB4MDI0MCwgMHg3ODMzLCAweDExMDQsIDB4NzgzNywgMHgwMDAwLCAweDA4MGMsCi0JMHg1ZTA5LCAweDA4MGMsIDB4NWRlYywgMHgxMWI4LCAweDcwODAsIDB4OTAwNSwgMHgxMWEwLCAweDcxNjAsCi0JMHg5MTg2LCAweGZmZmYsIDB4MDE4MCwgMHg5MTgwLCAweDMxZjMsIDB4MjAwZCwgMHg5MThjLCAweGZmMDAsCi0JMHg4MTBmLCAweDIwMTEsIDB4MDAwOCwgMHgwODBjLCAweDVjNDUsIDB4MDE4MCwgMHgwODBjLCAweDRkZDcsCi0JMHgwMTEwLCAweDA4MGMsIDB4MjZkNiwgMHgyMGE5LCAweDAwMDgsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTksCi0JMHgwMjZlLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsIDB4NDAwMywgMHg2MGMzLCAweDAwMTQsCi0JMHgwODBjLCAweDVjYzIsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4NzA4YywgMHg5MDA1LCAweDA1ZjAsCi0JMHgyMDExLCAweDVjOTgsIDB4MDgwYywgMHg4MjU5LCAweDkwODYsIDB4MDAxNCwgMHgxNWE4LCAweDA4MGMsCi0JMHg1ZTA5LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsIDB4MTEwNSwgMHgxNTY4LCAweDc4MzQsCi0JMHg5MDg0LCAweDAxMDAsIDB4MjAxMSwgMHgwMTAwLCAweDkyMWUsIDB4MTE2OCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwODBjLCAweDVlMzQsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsIDB4NzBjMCwgMHg5MDA1LCAweDExMTAsCi0JMHg3MGMzLCAweDAwMDEsIDB4MDA4MCwgMHg5MDA1LCAweDExYjgsIDB4N2EzOCwgMHhkMmZjLCAweDAxMjgsCi0JMHg3MGMwLCAweDkwMDUsIDB4MTExMCwgMHg3MGMzLCAweDAwMDEsIDB4OTA4NSwgMHgwMDAxLCAweDA4MGMsCi0JMHg1ZTM0LCAweDcwOTMsIDB4MDAwMCwgMHg3YTM4LCAweGQyZjQsIDB4MDExMCwgMHg3MGRiLCAweDAwMDgsCi0JMHg3MDk3LCAweDAwMTYsIDB4MDAyOSwgMHgwMDEwLCAweDcwOGYsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsCi0JMHgwODBjLCAweDlkZjIsIDB4MDgwYywgMHg1ZTA5LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNjAsCi0JMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksIDB4MDAwZSwgMHg0MDAzLCAweDIwMTEsCi0JMHgwMjZkLCAweDIyMDQsIDB4OTA4NCwgMHgwMTAwLCAweDIwMTEsIDB4MDI0ZCwgMHgyMDEyLCAweDIwMTEsCi0JMHgwMjZlLCAweDcwOTcsIDB4MDAxNywgMHgwODBjLCAweDVkZWMsIDB4MTE1MCwgMHg3MDgwLCAweDkwMDUsCi0JMHgxMTM4LCAweDA4MGMsIDB4NWJiOCwgMHgxMTg4LCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDI2ZDYsCi0JMHgyMGE5LCAweDAwMDgsIDB4MDgwYywgMHg1ZTA5LCAweDIwZTEsIDB4MDAwMCwgMHgyMDk5LCAweDAyNmUsCi0JMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjRlLCAweDQwMDMsIDB4NjBjMywgMHgwMDE0LCAweDA4MGMsCi0JMHg1Y2MyLCAweDAwMTAsIDB4MDgwYywgMHg1NzEyLCAweDAwMDUsIDB4MDBmNiwgMHg3MDhjLCAweDkwMDUsCi0JMHgwMWQ4LCAweDIwMTEsIDB4NWM5OCwgMHgwODBjLCAweDgyNTksIDB4OTA4NiwgMHgwMDg0LCAweDExOTAsCi0JMHgwODBjLCAweDVlMDksIDB4MjA3OSwgMHgwMjYwLCAweDdhMzAsIDB4OTI5NiwgMHgxMTA2LCAweDExNTAsCi0JMHg3ODM0LCAweDkwMDUsIDB4MTEzOCwgMHg5MDA2LCAweDA4MGMsIDB4NWUzNCwgMHg3MDk3LCAweDAwMTgsCi0JMHgwMDI5LCAweDAwMTAsIDB4NzA4ZiwgMHgwMDAwLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDcwOTcsCi0JMHgwMDE5LCAweDA4MGMsIDB4NWQ5YiwgMHgyMDc5LCAweDAyNDAsIDB4NzgzMywgMHgxMTA2LCAweDc4MzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NWUwOSwgMHgyMDA5LCAweDAyNmUsIDB4MjAzOSwgMHgxYzBlLCAweDIwYTksCi0JMHgwMDQwLCAweDIxM2UsIDB4ODczOCwgMHg4MTA4LCAweDkxODYsIDB4MDI4MCwgMHgxMTI4LCAweDY4MTQsCi0JMHg4MDAwLCAweDY4MTYsIDB4MjAwOSwgMHgwMjYwLCAweDFmMDQsIDB4NWIyMSwgMHgyMDM5LCAweDFjMGUsCi0JMHgwODBjLCAweDVkZWMsIDB4MTFlOCwgMHgyNzI4LCAweDI1MTQsIDB4ODIwNywgMHg5MDg0LCAweDAwZmYsCi0JMHg4MDAwLCAweDIwMTgsIDB4OTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4OTIwNSwgMHgyMDJhLCAweDcwNWMsCi0JMHgyMzEwLCAweDgyMTQsIDB4OTJhMCwgMHgxYzBlLCAweDI0MTQsIDB4OTM4YywgMHgwMDAxLCAweDAxMTgsCi0JMHg5Mjk0LCAweGZmMDAsIDB4MDAxOCwgMHg5Mjk0LCAweDAwZmYsIDB4ODAwNywgMHg5MjE1LCAweDIyMjIsCi0JMHgyMGE5LCAweDAwNDAsIDB4MjAwOSwgMHgwMjRlLCAweDI3MGUsIDB4ODczOCwgMHg4MTA4LCAweDkxODYsCi0JMHgwMjYwLCAweDExMjgsIDB4NjgxMCwgMHg4MDAwLCAweDY4MTIsIDB4MjAwOSwgMHgwMjQwLCAweDFmMDQsCi0JMHg1YjU0LCAweDYwYzMsIDB4MDA4NCwgMHgwODBjLCAweDVjYzIsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsCi0JMHg3MDhjLCAweDkwMDUsIDB4MDFlMCwgMHgyMDExLCAweDVjOTgsIDB4MDgwYywgMHg4MjU5LCAweDkwODYsCi0JMHgwMDg0LCAweDExOTgsIDB4MDgwYywgMHg1ZTA5LCAweDIwNzksIDB4MDI2MCwgMHg3YTMwLCAweDkyOTYsCi0JMHgxMTA3LCAweDExNTgsIDB4NzgzNCwgMHg5MDA1LCAweDExNDAsIDB4NzA5MywgMHgwMDAxLCAweDA4MGMsCi0JMHg1ZDVmLCAweDcwOTcsIDB4MDAxYSwgMHgwMDI5LCAweDAwMTAsIDB4NzA4ZiwgMHgwMDAwLCAweDAwZmUsCi0JMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwODBjLCAweDVlMzQsIDB4NzA5NywgMHgwMDFiLCAweDA4MGMsCi0JMHg5ZGYyLCAweDA4MGMsIDB4NWUwOSwgMHgyMDExLCAweDAyNjAsIDB4MjAwOSwgMHgwMjQwLCAweDc0OGMsCi0JMHg5NDgwLCAweDAwMTgsIDB4OTA4MCwgMHgwMDA3LCAweDkwODQsIDB4MDNmOCwgMHg4MDA0LCAweDIwYTgsCi0JMHgyMjBlLCAweDgyMTAsIDB4ODEwOCwgMHg5MTg2LCAweDAyNjAsIDB4MTE1MCwgMHg2ODEwLCAweDgwMDAsCi0JMHg2ODEyLCAweDIwMDksIDB4MDI0MCwgMHg2ODE0LCAweDgwMDAsIDB4NjgxNiwgMHgyMDExLCAweDAyNjAsCi0JMHgxZjA0LCAweDViYTAsIDB4NjBjMywgMHgwMDg0LCAweDA4MGMsIDB4NWNjMiwgMHgwMDA1LCAweDAwMDUsCi0JMHgwMDg2LCAweDAwOTYsIDB4MjAyOSwgMHgxODVjLCAweDI1MmMsIDB4MjBhOSwgMHgwMDA4LCAweDIwNDEsCi0JMHgxYzBlLCAweDIwZTksIDB4MDAwMSwgMHgyOGEwLCAweDA4MGMsIDB4NWUwOSwgMHgyMGUxLCAweDAwMDAsCi0JMHgyMDk5LCAweDAyNmUsIDB4NDAwMywgMHgyMGE5LCAweDAwMDgsIDB4MjAxMSwgMHgwMDA3LCAweGQ1ZDQsCi0JMHgwMTA4LCAweDkwMTYsIDB4MjgwMCwgMHg5MjAwLCAweDIwMGMsIDB4OTFhNiwgMHhmZmZmLCAweDExNDgsCi0JMHhkNWQ0LCAweDAxMTAsIDB4ODIxMCwgMHgwMDA4LCAweDgyMTEsIDB4MWYwNCwgMHg1YmQyLCAweDA4MDQsCi0JMHg1YzQxLCAweDgyZmYsIDB4MTE2MCwgMHhkNWQ0LCAweDAxMjAsIDB4OTFhNiwgMHgzZmZmLCAweDBkOTAsCi0JMHgwMDIwLCAweDkxYTYsIDB4M2ZmZiwgMHgwOTA0LCAweDVjNDEsIDB4OTE4ZCwgMHhjMDAwLCAweDIwYTksCi0JMHgwMDEwLCAweDIwMTksIDB4MDAwMSwgMHhkNWQ0LCAweDAxMTAsIDB4MjAxOSwgMHgwMDEwLCAweDIxMjAsCi0JMHhkNWQ0LCAweDAxMTAsIDB4ODQyMywgMHgwMDA4LCAweDg0MjQsIDB4MTI0MCwgMHhkNWQ0LCAweDAxMTAsCi0JMHg4MzE5LCAweDAwMDgsIDB4ODMxOCwgMHgxZjA0LCAweDViZjgsIDB4MDRkOCwgMHgyM2E4LCAweDIwMjEsCi0JMHgwMDAxLCAweDg0MjYsIDB4ODQyNSwgMHgxZjA0LCAweDVjMGEsIDB4MjMyOCwgMHg4NTI5LCAweDkyYmUsCi0JMHgwMDA3LCAweDAxNTgsIDB4MDAwNiwgMHgyMDM5LCAweDAwMDcsIDB4MjIwMCwgMHg5NzNhLCAweDAwMGUsCi0JMHgyN2E4LCAweDk1YTgsIDB4MDAxMCwgMHgxZjA0LCAweDVjMTksIDB4NzU1YSwgMHg5NWM4LCAweDMxZjMsCi0JMHgyOTJkLCAweDk1YWMsIDB4MDBmZiwgMHg3NTdlLCAweDY1MzIsIDB4NjUzNiwgMHgwMDE2LCAweDI1MDgsCi0JMHgwODBjLCAweDI2YjYsIDB4MDAxZSwgMHg2MGU3LCAweDAwMDAsIDB4NjVlYSwgMHgyMDE4LCAweDIzMDQsCi0JMHg5NDA1LCAweDIwMWEsIDB4NzA4MywgMHgwMDAxLCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGUsCi0JMHgyMGUxLCAweDAwMDEsIDB4Mjg5OCwgMHgyMGE5LCAweDAwMDgsIDB4NDAwMywgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA4LCAweDkwMDYsIDB4MDA5ZSwgMHgwMDhlLCAweDAwMDUsIDB4MDE1NiwgMHgwMWM2LCAweDAxZDYsCi0JMHgwMTM2LCAweDAxNDYsIDB4MjJhOCwgMHgyMGUxLCAweDAwMDAsIDB4MjA5OSwgMHgwMjZlLCAweDIwZTksCi0JMHgwMDAwLCAweDIwMTEsIDB4MDI0ZSwgMHgyMmEwLCAweDQwMDMsIDB4MDE0ZSwgMHgwMTNlLCAweDAxZGUsCi0JMHgwMWNlLCAweDAxNWUsIDB4MjExOCwgMHg5MDI2LCAweDIwMDEsIDB4MDAwNywgMHg5MzlhLCAweDAwMTAsCi0JMHgwMjE4LCAweDg0MjAsIDB4ODAwMSwgMHgwY2QwLCAweDIxMTgsIDB4ODRmZiwgMHgwMTIwLCAweDkzOWEsCi0JMHgwMDEwLCAweDg0MjEsIDB4MWRlMCwgMHgyMDIxLCAweDAwMDEsIDB4ODNmZiwgMHgwMTE4LCAweDg0MjMsCi0JMHg4MzE5LCAweDFkZTgsIDB4OTIzOCwgMHgyMDI5LCAweDAyNmUsIDB4OTUyOCwgMHgyNTA0LCAweDk0MmMsCi0JMHgxMWI4LCAweDk0MDUsIDB4MjAzYSwgMHg3MTVhLCAweDkxYTAsIDB4MzFmMywgMHgyNDJkLCAweDk1YWMsCi0JMHgwMGZmLCAweDc1N2UsIDB4NjUzMiwgMHg2NTM2LCAweDAwMTYsIDB4MjUwOCwgMHgwODBjLCAweDI2YjYsCi0JMHgwMDFlLCAweDYwZTcsIDB4MDAwMCwgMHg2NWVhLCAweDcwODMsIDB4MDAwMSwgMHg5MDg0LCAweDAwMDAsCi0JMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDcwODcsIDB4MDAwMCwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMGU2LCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDIwNzEsIDB4MDE0MCwgMHgwODBjLCAweDVkNGUsCi0JMHgwODBjLCAweDk2MWEsIDB4NzAwNCwgMHg5MDg0LCAweDQwMDAsIDB4MDExMCwgMHgwODBjLCAweDJiN2YsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE4MjUsIDB4MjA3MywgMHgwMDAwLCAweDc4NDAsCi0JMHgwMDI2LCAweDAwMTYsIDB4MjAwOSwgMHgwMGY3LCAweDA4MGMsIDB4NWRhYiwgMHgwMDFlLCAweDkwOTQsCi0JMHgwMDEwLCAweDkyODUsIDB4MDA4MCwgMHg3ODQyLCAweDdhNDIsIDB4MDAyZSwgMHgwMTJlLCAweDAwZmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgyOWU5LCAweDAyMjgsCi0JMHgyMDExLCAweDAxMDEsIDB4MjIwNCwgMHhjMGM1LCAweDIwMTIsIDB4MjAxMSwgMHgxOWNjLCAweDIwMTMsCi0JMHgwMDAwLCAweDcwOGYsIDB4MDAwMCwgMHgwMTJlLCAweDYwYTMsIDB4MDA1NiwgMHg2MGE3LCAweDk1NzUsCi0JMHgwODBjLCAweDk2MTEsIDB4NjE0NCwgMHhkMTg0LCAweDAxMjAsIDB4NzE5NCwgMHg5MThkLCAweDIwMDAsCi0JMHgwMDE4LCAweDcxODgsIDB4OTE4ZCwgMHgxMDAwLCAweDIwMTEsIDB4MTk3MywgMHgyMTEyLCAweDIwMDksCi0JMHgwN2QwLCAweDIwMTEsIDB4NWM5OCwgMHgwODBjLCAweDgyZWIsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OWY3MCwgMHgyMDA5LCAweDAwZjcsCi0JMHgwODBjLCAweDVkYWIsIDB4MjA2MSwgMHgxOWQ1LCAweDkwMGUsIDB4NjExYSwgMHg2MTFlLCAweDYxN2EsCi0JMHg2MTdlLCAweDIwNjEsIDB4MTgwMCwgMHg2MDAzLCAweDAwMDEsIDB4MjA2MSwgMHgwMTAwLCAweDYwNDMsCi0JMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHgyMDA5LCAweDE5NzMsIDB4MjAwYiwgMHgwMDAwLCAweDIwMDksCi0JMHgwMDJkLCAweDIwMTEsIDB4NWQxYSwgMHgwODBjLCAweDgyNGQsIDB4MDEyZSwgMHgwMGNlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA0NzEsCi0JMHgyMDcxLCAweDAxMDAsIDB4MDgwYywgMHg5NjFhLCAweDIwNzEsIDB4MDE0MCwgMHg3MDA0LCAweDkwODQsCi0JMHg0MDAwLCAweDAxMTAsIDB4MDgwYywgMHgyYjdmLCAweDA4MGMsIDB4NzE4NiwgMHgwMTg4LCAweDA4MGMsCi0JMHg3MWExLCAweDExNzAsIDB4MDgwYywgMHg3NDg0LCAweDAwMTYsIDB4MDgwYywgMHgyNzg1LCAweDIwMDEsCi0JMHgxOTQ3LCAweDIxMDIsIDB4MDAxZSwgMHgwODBjLCAweDc0N2YsIDB4MDgwYywgMHg3MDllLCAweDAwNTAsCi0JMHgyMDA5LCAweDAwMDEsIDB4MDgwYywgMHgyYTlkLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2MTYsCi0JMHgwODBjLCAweDVjZWUsIDB4MDEyZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGUsCi0JMHgyMDA0LCAweGQwYmMsIDB4MDE1OCwgMHgwMDI2LCAweDAwMzYsIDB4MjAxMSwgMHg4MDE3LCAweDIwMDEsCi0JMHgxOTczLCAweDIwMWMsIDB4MDgwYywgMHg0YTE3LCAweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDIwYTksCi0JMHgwMDEyLCAweDIwZTksIDB4MDAwMSwgMHgyMGExLCAweDFjODAsIDB4MDgwYywgMHg1ZTA5LCAweDIwZTksCi0JMHgwMDAwLCAweDIwOTksIDB4MDI2ZSwgMHgwMDk5LCAweDIwYTksIDB4MDAyMCwgMHgwODBjLCAweDVlMDMsCi0JMHgyMDk5LCAweDAyNjAsIDB4MjBhMSwgMHgxYzkyLCAweDAwNTEsIDB4MjBhOSwgMHgwMDBlLCAweDA4MGMsCi0JMHg1ZTA2LCAweDIwOTksIDB4MDI2MCwgMHgyMGExLCAweDFjYjIsIDB4MDAwOSwgMHgwMDA1LCAweDAwMTYsCi0JMHgwMDI2LCAweDM0MTAsIDB4MzMwOCwgMHgyMTA0LCAweDgwMDcsIDB4MjAxMiwgMHg4MTA4LCAweDgyMTAsCi0JMHgxZjA0LCAweDVkODMsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHg5ZGYyLCAweDIwZTEsCi0JMHgwMDAxLCAweDIwOTksIDB4MWMwMCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksCi0JMHgwMDBjLCAweDQwMDMsIDB4MDAwNSwgMHgwODBjLCAweDlkZjIsIDB4MDgwYywgMHg1ZTA5LCAweDIwZTEsCi0JMHgwMDAwLCAweDIwOTksIDB4MDI2MCwgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksCi0JMHgwMDBjLCAweDQwMDMsIDB4MDAwNSwgMHgwMGM2LCAweDAwMDYsIDB4MjA2MSwgMHgwMTAwLCAweDgxMGYsCi0JMHgyMDAxLCAweDE4MzMsIDB4MjAwNCwgMHg5MDA1LCAweDExMzgsIDB4MjAwMSwgMHgxODE3LCAweDIwMDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTEwNSwgMHgwMDEwLCAweDkxODUsIDB4MDBmNywgMHg2MDRhLCAweDAwMGUsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDQ2LCAweDA4MGMsIDB4NjZjNSwgMHgwMTU4LCAweDkwMDYsCi0JMHgyMDIwLCAweDIwMDksIDB4MDAyYSwgMHgwODBjLCAweGQ4MzcsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCi0JMHhjMTk1LCAweDIxMDIsIDB4MjAxOSwgMHgwMDJhLCAweDkwMGUsIDB4MDgwYywgMHgzMDYwLCAweDA4MGMsCi0JMHhjNDU5LCAweDAxNDAsIDB4MDAzNiwgMHgyMDE5LCAweGZmZmYsIDB4MjAyMSwgMHgwMDA3LCAweDA4MGMsCi0JMHg0YmI0LCAweDAwM2UsIDB4MDA0ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDgwYywgMHg1Y2VlLCAweDcwOTcsCi0JMHgwMDAwLCAweDcwOGYsIDB4MDAwMCwgMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsCi0JMHhkMDljLCAweDAxMDAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwMDEsIDB4MDEwMSwgMHgyMDBjLCAweDkxOGQsIDB4MDAwNiwgMHgyMTAyLCAweDAxMmUsCi0JMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgyMDA5LCAweDAwMDEsIDB4MDAyMCwgMHgyMDA5LCAweDAwMDIsCi0JMHgwMDA4LCAweDkwMGUsIDB4NjgxNCwgMHg5MDg0LCAweGZmYzAsIDB4OTEwZCwgMHg2OTE2LCAweDAwMDUsCi0JMHgwMGY2LCAweDAxNTYsIDB4MDE0NiwgMHgwMWQ2LCAweDkwMDYsIDB4MjBhOSwgMHgwMDgwLCAweDIwZTksCi0JMHgwMDAxLCAweDIwYTEsIDB4MWMwMCwgMHg0MDA0LCAweDIwNzksIDB4MWMwMCwgMHg3ODAzLCAweDIyMDAsCi0JMHg3ODA3LCAweDAwZWYsIDB4NzgwZiwgMHgwMGVmLCAweDc4MTMsIDB4MDEzOCwgMHg3ODIzLCAweGZmZmYsCi0JMHg3ODI3LCAweGZmZmYsIDB4MDFkZSwgMHgwMTRlLCAweDAxNWUsIDB4MDBmZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDIwMDEsIDB4MTk4MSwgMHgwMTE4LCAweDIwMDMsCi0JMHgwMDAxLCAweDAwMTAsIDB4MjAwMywgMHgwMDAwLCAweDAwMDUsIDB4MDE1NiwgMHgyMGE5LCAweDA4MDAsCi0JMHgyMDA5LCAweDEwMDAsIDB4OTAwNiwgMHgyMDBhLCAweDgxMDgsIDB4MWYwNCwgMHg1ZTQzLCAweDAxNWUsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHgyMDY5LCAweDE4NWIsCi0JMHg5MDA2LCAweGI4MDIsIDB4YjhiZSwgMHhiODA3LCAweDA3MDcsIDB4YjgwYSwgMHhiODBlLCAweGI4MTIsCi0JMHg5MTk4LCAweDMxZjMsIDB4MjMxZCwgMHg5MzljLCAweDAwZmYsIDB4YmIxNiwgMHgwMDE2LCAweDAwMjYsCi0JMHhiOGIyLCAweDA4MGMsIDB4OWY2OSwgMHgxMTIwLCAweDkxOTIsIDB4MDA3ZSwgMHgxMjA4LCAweGJiYjIsCi0JMHgyMGE5LCAweDAwMDQsIDB4YjhiNCwgMHgyMGU4LCAweGI5YjgsIDB4OTE5OCwgMHgwMDA2LCAweDkwMDYsCi0JMHgyM2EwLCAweDQwMDQsIDB4MjBhOSwgMHgwMDA0LCAweDkxOTgsIDB4MDAwYSwgMHgyM2EwLCAweDQwMDQsCi0JMHgwMDJlLCAweDAwMWUsIDB4YjgzZSwgMHhiODQyLCAweGI4NGUsIDB4Yjg1MiwgMHhiODU2LCAweGI4NWEsCi0JMHhiODVlLCAweGI4NjIsIDB4Yjg2NiwgMHhiODZhLCAweGI4NmYsIDB4MDEwMCwgMHhiODcyLCAweGI4NzYsCi0JMHhiODdhLCAweGI4OGEsIDB4Yjg4ZSwgMHhiODkzLCAweDAwMDgsIDB4Yjg5NiwgMHhiODlhLCAweGI4OWUsCi0JMHhiOGFlLCAweGI5YTIsIDB4MDA5NiwgMHhiOGE0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDEwNjksCi0JMHhiOGE3LCAweDAwMDAsIDB4MDA5ZSwgMHg5MDA2LCAweGI4NGEsIDB4NjgxMCwgMHhiODNhLCAweDY4MGMsCi0JMHhiODQ2LCAweDY4MTQsIDB4OTA4NCwgMHgwMGZmLCAweGI4NDIsIDB4MDE0ZSwgMHgwMTNlLCAweDAxNWUsCi0JMHgwMDNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhhOTc0LCAweGFlNzgsCi0JMHg5Njg0LCAweDNmZmYsIDB4OTA4MiwgMHg0MDAwLCAweDFhMDQsIDB4NWYxOSwgMHg5MTgyLCAweDA4MDAsCi0JMHgxYTA0LCAweDVmMWQsIDB4MjAwMSwgMHgxODBjLCAweDIwMDQsIDB4OTA4NCwgMHgwMDAzLCAweDE5MDQsCi0JMHg1ZjIzLCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LCAweDkwNWQsIDB4MDUxOCwgMHhiODA0LCAweDkwODQsCi0JMHgwMGZmLCAweDkwOGUsIDB4MDAwNiwgMHgxNTA4LCAweGI4YTQsIDB4OTAwZCwgMHgxOTA0LCAweDVmMzUsCi0JMHhiODUwLCAweDkwMGQsIDB4MTE0OCwgMHhhODAyLCAweDI5MDAsIDB4Yjg1MiwgMHhiODRlLCAweDA4MGMsCi0JMHg4NjE1LCAweDkwMDYsIDB4MDEyZSwgMHgwMDA1LCAweDAwYTYsIDB4MjE1MCwgMHgyOTAwLCAweGIwMDIsCi0JMHhhODAzLCAweDAwMDAsIDB4MDBhZSwgMHhiODUyLCAweDBjOTAsIDB4MjAwMSwgMHgwMDA1LCAweDkwMGUsCi0JMHgwNGI4LCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLCAweDA0OTgsIDB4OTA4MiwgMHgwMDA2LCAweDEyOTAsCi0JMHgwODBjLCAweDlmNjksIDB4MTE2MCwgMHhiOGEwLCAweDkwODQsIDB4ZmY4MCwgMHgxMTQwLCAweGI5MDAsCi0JMHhkMWZjLCAweDA5OTAsIDB4MjAwMSwgMHgwMDI5LCAweDIwMDksIDB4MTAwMCwgMHgwNDA4LCAweDIwMDEsCi0JMHgwMDI4LCAweDAwYTgsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LCAweDIwMDEsCi0JMHgwMDA0LCAweDAwNjgsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDQwLCAweDIwMDEsCi0JMHgwMDI5LCAweGI5MDAsIDB4ZDFmYywgMHgwMTE4LCAweDIwMDksIDB4MTAwMCwgMHgwMDQ4LCAweDkwMGUsCi0JMHgwMDM4LCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLCAweDAwMTgsIDB4MjAwMSwgMHgwMDI5LCAweDkwMGUsCi0JMHg5MDA1LCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwNCwgMHhkMDg0LCAweDE5ZDAsCi0JMHg5MTg4LCAweDEwMDAsIDB4MjEwNCwgMHg5MDVkLCAweDA5YTgsIDB4MDgwYywgMHg2NmM5LCAweDE5OTAsCi0JMHhiODAwLCAweGQwYmMsIDB4MDk3OCwgMHgwODA0LCAweDVlY2MsIDB4MDgwYywgMHg2NTNmLCAweDA5MDQsCi0JMHg1ZWU1LCAweDA4MDQsIDB4NWVkMCwgMHgwMGI2LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHhhOTc0LCAweDkxODIsIDB4MDgwMCwgMHgxYTA0LCAweDVmYjksIDB4OTE4OCwgMHgxMDAwLCAweDIxMDQsCi0JMHg5MDVkLCAweDA5MDQsIDB4NWY5MSwgMHhiOGEwLCAweDkwODYsIDB4MDA3ZiwgMHgwMTkwLCAweGE4N2MsCi0JMHhkMGZjLCAweDExNzgsIDB4MDgwYywgMHg2NmQxLCAweDAxNjAsIDB4YTk5NCwgMHg4MWZmLCAweDAxMzAsCi0JMHg5MDhlLCAweDAwMDQsIDB4MDEzMCwgMHg5MDhlLCAweDAwMDUsIDB4MDExOCwgMHgwODBjLCAweDY2YzksCi0JMHgxNTk4LCAweGE4N2MsIDB4ZDBmYywgMHgwMWUwLCAweGE4OTQsIDB4OTAwNSwgMHgwMWM4LCAweDIwNjAsCi0JMHgwMDI2LCAweDIwMTAsIDB4MDgwYywgMHhiZDNjLCAweDAwMmUsIDB4MTEyMCwgMHgyMDAxLCAweDAwMDgsCi0JMHgwODA0LCAweDVmYmIsIDB4NjAyMCwgMHg5MDg2LCAweDAwMGEsIDB4MDEyMCwgMHgyMDAxLCAweDAwMDgsCi0JMHgwODA0LCAweDVmYmIsIDB4NjAxYSwgMHg2MDAzLCAweDAwMDgsIDB4MjkwMCwgMHg2MDE2LCAweDAwNTgsCi0JMHgwODBjLCAweDlmOTQsIDB4MDVlOCwgMHgyYjAwLCAweDYwMTIsIDB4MjkwMCwgMHg2MDE2LCAweDYwMGIsCi0JMHhmZmZmLCAweDYwMjMsIDB4MDAwYSwgMHgyMDA5LCAweDAwMDMsIDB4MDgwYywgMHhhMDY4LCAweDkwMDYsCi0JMHgwNDU4LCAweDIwMDEsIDB4MDAyOCwgMHgwNDM4LCAweDkwODIsIDB4MDAwNiwgMHgxMjkwLCAweDA4MGMsCi0JMHg5ZjY5LCAweDExNjAsIDB4YjhhMCwgMHg5MDg0LCAweGZmODAsIDB4MTE0MCwgMHhiOTAwLCAweGQxZmMsCi0JMHgwOTAwLCAweDIwMDEsIDB4MDAyOSwgMHgyMDA5LCAweDEwMDAsIDB4MDBhOCwgMHgyMDAxLCAweDAwMjgsCi0JMHgwMDkwLCAweDIwMDksIDB4MTgwYywgMHgyMTBjLCAweGQxOGMsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwMDUwLCAweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsIDB4MDAyOCwgMHgyMDAxLCAweDAwMjksCi0JMHgwMDEwLCAweDIwMDEsIDB4MDAyOSwgMHg5MDA1LCAweDAxMmUsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgyMDAxLCAweDAwMmMsIDB4MGNjMCwgMHgwMGY2LCAweDAwYjYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHhhOGUwLCAweDkwMDUsIDB4MTU1MCwgMHhhOGRjLCAweDkwODIsIDB4MDEwMSwgMHgxNjMwLCAweGE4YzgsCi0JMHg5MDA1LCAweDE1MTgsIDB4YThjNCwgMHg5MDgyLCAweDAxMDEsIDB4MTJmOCwgMHhhOTc0LCAweDIwNzksCi0JMHgxODAwLCAweDkxODIsIDB4MDgwMCwgMHgxMmU4LCAweDc4MzAsIDB4OTA4NCwgMHgwMDAzLCAweDExMzAsCi0JMHhhYTk4LCAweGFiOTQsIDB4YTg3OCwgMHg5MDg0LCAweDAwMDcsIDB4MDBlYSwgMHg3OTMwLCAweGQxOGMsCi0JMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDM4LCAweGQxODQsIDB4MDExOCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwMDEwLCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLCAweDAwMzgsIDB4MjAwMSwgMHgwMDJjLCAweDkwMGUsCi0JMHgwMDE4LCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLCAweDkwMDYsIDB4MDAwOCwgMHg5MDA1LCAweDAxMmUsCi0JMHgwMGJlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDUwLCAweDYwMGIsIDB4NjAyMiwgMHg2MDUwLCAweDYwNTAsCi0JMHg2MDUwLCAweDYwNTAsIDB4NjA1MCwgMHgyMTAwLCAweDkwODIsIDB4MDA3ZSwgMHgxMjc4LCAweDA4MGMsCi0JMHg2MzQzLCAweDAxNDgsIDB4OTA0NiwgMHhiODEwLCAweDkzMDYsIDB4MTkwNCwgMHg2MDU4LCAweGI4MTQsCi0JMHg5MjA2LCAweDE1ZjAsIDB4MDAyOCwgMHhiYjEyLCAweGJhMTYsIDB4MDAxMCwgMHgwODBjLCAweDQ4ZDEsCi0JMHgwMTUwLCAweDA0YjAsIDB4MDgwYywgMHg2M2EzLCAweDE1OTgsIDB4YjgxMCwgMHg5MzA2LCAweDE1ODAsCi0JMHhiODE0LCAweDkyMDYsIDB4MTU2OCwgMHgwODBjLCAweDlmOTQsIDB4MDUzMCwgMHgyYjAwLCAweDYwMTIsCi0JMHgwODBjLCAweGMxY2EsIDB4MjkwMCwgMHg2MDE2LCAweDYwMGIsIDB4ZmZmZiwgMHg2MDIzLCAweDAwMGEsCi0JMHhhODc4LCAweDkwODYsIDB4MDAwMSwgMHgxMTcwLCAweDA4MGMsIDB4MzA5NSwgMHg5MDA2LCAweDA4MGMsCi0JMHg2MmUwLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDYyZjQsIDB4MjAwMSwgMHgwMjAwLCAweGI4NmUsCi0JMHhiODkzLCAweDAwMDIsIDB4MjAwOSwgMHgwMDAzLCAweDA4MGMsIDB4YTA2OCwgMHg5MDA2LCAweDAwNjgsCi0JMHgyMDAxLCAweDAwMDEsIDB4OTAwZSwgMHgwMDM4LCAweDIwMDEsIDB4MDAyYywgMHg5MDBlLCAweDAwMTgsCi0JMHgyMDAxLCAweDAwMjgsIDB4OTAwZSwgMHg5MDA1LCAweDAwMDAsIDB4MDEyZSwgMHgwMGJlLCAweDAwZmUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDBmNiwgMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4OTQsCi0JMHg5MGM2LCAweDAwMTUsIDB4MDkwNCwgMHg2MjMxLCAweDkwYzYsIDB4MDA1NiwgMHgwOTA0LCAweDYyMzUsCi0JMHg5MGM2LCAweDAwNjYsIDB4MDkwNCwgMHg2MjM5LCAweDkwYzYsIDB4MDA2NywgMHgwOTA0LCAweDYyM2QsCi0JMHg5MGM2LCAweDAwNjgsIDB4MDkwNCwgMHg2MjQxLCAweDkwYzYsIDB4MDA3MSwgMHgwOTA0LCAweDYyNDUsCi0JMHg5MGM2LCAweDAwNzQsIDB4MDkwNCwgMHg2MjQ5LCAweDkwYzYsIDB4MDA3YywgMHgwOTA0LCAweDYyNGQsCi0JMHg5MGM2LCAweDAwN2UsIDB4MDkwNCwgMHg2MjUxLCAweDkwYzYsIDB4MDAzNywgMHgwOTA0LCAweDYyNTUsCi0JMHg5MDE2LCAweDIwNzksIDB4MTgwMCwgMHhhOTc0LCAweDkxODYsIDB4MDBmZiwgMHgwOTA0LCAweDYyMmMsCi0JMHg5MTgyLCAweDA4MDAsIDB4MWEwNCwgMHg2MjJjLCAweDA4MGMsIDB4NjNhMywgMHgxMTk4LCAweGI4MDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4MiwgMHgwMDA2LCAweDEyNjgsIDB4YTg5NCwgMHg5MGM2LCAweDAwNmYsCi0JMHgwMTQ4LCAweDA4MGMsIDB4OWY2OSwgMHgxOTA0LCAweDYyMTUsIDB4YjhhMCwgMHg5MDg0LCAweGZmODAsCi0JMHgxOTA0LCAweDYyMTUsIDB4YTg5NCwgMHg5MGM2LCAweDAwNmYsIDB4MDE1OCwgMHg5MGM2LCAweDAwNWUsCi0JMHgwOTA0LCAweDYxNzUsIDB4OTBjNiwgMHgwMDY0LCAweDA5MDQsIDB4NjE5ZSwgMHgyMDA4LCAweDA4MDQsCi0JMHg2MTM4LCAweGE5OTgsIDB4YThiMCwgMHgyMDQwLCAweDA4MGMsIDB4OWY2OSwgMHgxMTIwLCAweDkxODIsCi0JMHgwMDdmLCAweDBhMDQsIDB4NjEzOCwgMHg5MTg2LCAweDAwZmYsIDB4MDkwNCwgMHg2MTM4LCAweDkxODIsCi0JMHgwODAwLCAweDFhMDQsIDB4NjEzOCwgMHhhYWEwLCAweGFiOWMsIDB4Nzg3OCwgMHg5MzA2LCAweDExYTgsCi0JMHg3ODdjLCAweDAwOTYsIDB4OTI0ZSwgMHgxMTI4LCAweDIyMDgsIDB4MjMxMCwgMHgwMDllLCAweDA4MDQsCi0JMHg2MTM4LCAweDA4MGMsIDB4OWY2OSwgMHgxMTQwLCAweDk5Y2MsIDB4ZmYwMCwgMHgwMDllLCAweDExMjgsCi0JMHgyMjA4LCAweDIzMTAsIDB4MDgwNCwgMHg2MTM4LCAweDAwOWUsIDB4MDgwYywgMHg0OGQxLCAweDA5MDQsCi0JMHg2MTQxLCAweDkwMGUsIDB4OTAxNiwgMHg5MGM2LCAweDQwMDAsIDB4MTU1OCwgMHgwMDA2LCAweDA4MGMsCi0JMHg2NWMzLCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsIDB4MDEwOCwgMHhjMThkLCAweDIwYTksCi0JMHgwMDA0LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAzMSwgMHgyMGEwLCAweGI4YjQsCi0JMHgyMGUwLCAweGI4YjgsIDB4OTA4MCwgMHgwMDA2LCAweDIwOTgsIDB4MDgwYywgMHgwZmI0LCAweDIwYTksCi0JMHgwMDA0LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAzNSwgMHgyMGEwLCAweGI4YjQsCi0JMHgyMGUwLCAweGI4YjgsIDB4OTA4MCwgMHgwMDBhLCAweDIwOTgsIDB4MDgwYywgMHgwZmI0LCAweDAwMGUsCi0JMHgwMGM4LCAweDkwYzYsIDB4NDAwNywgMHgxMTEwLCAweDI0MDgsIDB4MDBhMCwgMHg5MGM2LCAweDQwMDgsCi0JMHgxMTE4LCAweDI3MDgsIDB4MjYxMCwgMHgwMDcwLCAweDkwYzYsIDB4NDAwOSwgMHgxMTA4LCAweDAwNTAsCi0JMHg5MGM2LCAweDQwMDYsIDB4MDEzOCwgMHgyMDAxLCAweDQwMDUsIDB4MjAwOSwgMHgwMDBhLCAweDAwMTAsCi0JMHgyMDAxLCAweDQwMDYsIDB4YTg5NiwgMHhhOTlhLCAweGFhOWUsIDB4MjAwMSwgMHgwMDMwLCAweDkwMGUsCi0JMHgwNDcwLCAweDA4MGMsIDB4OWY5NCwgMHgxMTMwLCAweDIwMDEsIDB4NDAwNSwgMHgyMDA5LCAweDAwMDMsCi0JMHg5MDE2LCAweDBjODAsIDB4MmIwMCwgMHg2MDEyLCAweDA4MGMsIDB4YzFjYSwgMHgyOTAwLCAweDYwMTYsCi0JMHg2MDIzLCAweDAwMDEsIDB4YTg2OCwgMHhkODhjLCAweDAxMDgsIDB4YzBmNSwgMHhhODZhLCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgzMDk1LCAweDAxMmUsIDB4OTAwNiwgMHgwODBjLCAweDYyZTAsCi0JMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2MmY0LCAweDIwMDksIDB4MDAwMiwgMHgwODBjLCAweGEwNjgsCi0JMHhhOGIwLCAweGQwOTQsIDB4MDExOCwgMHhiOGJjLCAweGMwOGQsIDB4YjhiZSwgMHg5MDA2LCAweDkwMDUsCi0JMHgwMTJlLCAweDAwZWUsIDB4MDBmZSwgMHgwMGJlLCAweDAwMDUsIDB4MDgwYywgMHg1NGVmLCAweDAxMTgsCi0JMHgyMDA5LCAweDAwMDcsIDB4MDBmOCwgMHhhOTk4LCAweGFlYjAsIDB4MDgwYywgMHg2M2EzLCAweDE5MDQsCi0JMHg2MTMzLCAweDkxODYsIDB4MDA3ZiwgMHgwMTMwLCAweDA4MGMsIDB4NjZjOSwgMHgwMTE4LCAweDIwMDksCi0JMHgwMDA5LCAweDAwODAsIDB4MDA5NiwgMHgwODBjLCAweDEwMzcsIDB4MTEyMCwgMHgwMDllLCAweDIwMDksCi0JMHgwMDAyLCAweDAwNDAsIDB4MjkwMCwgMHgwMDllLCAweGE4MDYsIDB4MDgwYywgMHhiZjM2LCAweDE5YjAsCi0JMHgyMDA5LCAweDAwMDMsIDB4MjAwMSwgMHg0MDA1LCAweDA4MDQsIDB4NjEzYSwgMHhhOTk4LCAweGFlYjAsCi0JMHgwODBjLCAweDYzYTMsIDB4MTkwNCwgMHg2MTMzLCAweDAwOTYsIDB4MDgwYywgMHgxMDM3LCAweDExMjgsCi0JMHgwMDllLCAweDIwMDksIDB4MDAwMiwgMHgwODA0LCAweDYxZjIsIDB4MjkwMCwgMHgwMDllLCAweGE4MDYsCi0JMHgwMDk2LCAweDIwNDgsIDB4MjBhOSwgMHgwMDJiLCAweGI4YjQsIDB4MjBlMCwgMHhiOGI4LCAweDIwOTgsCi0JMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMDIsIDB4MjBhMCwgMHg0MDAzLCAweDIwYTksCi0JMHgwMDA4LCAweDkwODAsIDB4MDAwNiwgMHgyMGEwLCAweGJiYjgsIDB4OTM5OCwgMHgwMDA2LCAweDIzOTgsCi0JMHgwODBjLCAweDBmYjQsIDB4MDA5ZSwgMHhhODdiLCAweDAwMDAsIDB4YTg4MywgMHgwMDAwLCAweGE4OTcsCi0JMHg0MDAwLCAweGQ2ODQsIDB4MTE2OCwgMHgwODBjLCAweDU0ZGIsIDB4ZDBiNCwgMHgxMTE4LCAweGE4OWIsCi0JMHgwMDBiLCAweDAwZTAsIDB4YjgwMCwgMHhkMDhjLCAweDAxMTgsIDB4YTg5YiwgMHgwMDBjLCAweDAwYjAsCi0JMHgwODBjLCAweDY2YzksIDB4MDExOCwgMHhhODliLCAweDAwMDksIDB4MDA4MCwgMHgwODBjLCAweDU0ZWYsCi0JMHgwMTE4LCAweGE4OWIsIDB4MDAwNywgMHgwMDUwLCAweDA4MGMsIDB4YmYxOSwgMHgxOTA0LCAweDYxNmUsCi0JMHgyMDA5LCAweDAwMDMsIDB4MjAwMSwgMHg0MDA1LCAweDA4MDQsIDB4NjEzYSwgMHhhODdiLCAweDAwMzAsCi0JMHhhODk3LCAweDQwMDUsIDB4YTgwNCwgMHg4MDA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsCi0JMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDAyLCAweDIwMDksIDB4MDAyYiwgMHhhYWEwLCAweGFiOWMsCi0JMHhhY2E4LCAweGFkYTQsIDB4MjAzMSwgMHgwMDAwLCAweDIwNDEsIDB4MTI4ZSwgMHgwODBjLCAweGE0ZjEsCi0JMHgxOTA0LCAweDYxNmUsIDB4MjAwOSwgMHgwMDAyLCAweDA4ZTgsIDB4MjAwMSwgMHgwMDI4LCAweDkwMGUsCi0JMHgwODA0LCAweDYxNmYsIDB4MjAwOSwgMHgxODBjLCAweDIxMGMsIDB4ZDE4YywgMHgwMTE4LCAweDIwMDEsCi0JMHgwMDA0LCAweDAwMzgsIDB4ZDE4NCwgMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDEwLCAweDIwMDEsCi0JMHgwMDI5LCAweDkwMGUsIDB4MDgwNCwgMHg2MTZmLCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLCAweDA4MDQsCi0JMHg2MTZmLCAweDA4MGMsIDB4MzYyNCwgMHgwODA0LCAweDYxNzAsIDB4MDgwYywgMHg1MjA2LCAweDA4MDQsCi0JMHg2MTcwLCAweDA4MGMsIDB4NDQ4YywgMHgwODA0LCAweDYxNzAsIDB4MDgwYywgMHg0NTA1LCAweDA4MDQsCi0JMHg2MTcwLCAweDA4MGMsIDB4NDU2MSwgMHgwODA0LCAweDYxNzAsIDB4MDgwYywgMHg0OThkLCAweDA4MDQsCi0JMHg2MTcwLCAweDA4MGMsIDB4NGMzNiwgMHgwODA0LCAweDYxNzAsIDB4MDgwYywgMHg0ZTZkLCAweDA4MDQsCi0JMHg2MTcwLCAweDA4MGMsIDB4NTA2NiwgMHgwODA0LCAweDYxNzAsIDB4MDgwYywgMHgzODRkLCAweDA4MDQsCi0JMHg2MTcwLCAweDAwYjYsIDB4YTk3NCwgMHhhZTc4LCAweDk2ODQsIDB4M2ZmZiwgMHg5MDgyLCAweDQwMDAsCi0JMHgxNjE4LCAweDkxODIsIDB4MDgwMCwgMHgxMjY4LCAweDkxODgsIDB4MTAwMCwgMHgyMTA0LCAweDkwNWQsCi0JMHgwMTQwLCAweDA4MGMsIDB4NjZjOSwgMHgxMTQ4LCAweDAwZTksIDB4MDgwYywgMHg2NGNlLCAweDkwMDYsCi0JMHgwMGIwLCAweDIwMDEsIDB4MDAyOCwgMHg5MDBlLCAweDAwOTAsIDB4OTA4MiwgMHgwMDA2LCAweDEyNDAsCi0JMHhiOTAwLCAweGQxZmMsIDB4MGQ4OCwgMHgyMDAxLCAweDAwMjksIDB4MjAwOSwgMHgxMDAwLCAweDAwMzgsCi0JMHgyMDAxLCAweDAwMjksIDB4OTAwZSwgMHgwMDE4LCAweDIwMDEsIDB4MDAyOSwgMHg5MDBlLCAweDkwMDUsCi0JMHgwMGJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4Yjg1MCwgMHg5MDBkLCAweDAxNTAsCi0JMHgyOTAwLCAweDAwOTYsIDB4MjE0OCwgMHhhODAyLCAweDAwOWUsIDB4YTgwMywgMHgwMDAwLCAweGI4NTIsCi0JMHgwMTJlLCAweDAwMDUsIDB4MjkwMCwgMHhiODUyLCAweGI4NGUsIDB4YTgwMywgMHgwMDAwLCAweDBjYzAsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiODRjLCAweDkwMDUsIDB4MDE3MCwgMHgwMGU2LCAweDIwNzEsCi0JMHgxOWMyLCAweDcwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDAxNjgsIDB4MDBlZSwgMHhiODRjLCAweGE4MDIsCi0JMHgyOTAwLCAweGI4NGUsIDB4MDEyZSwgMHgwMDA1LCAweDI5MDAsIDB4Yjg1MiwgMHhiODRlLCAweGE4MDMsCi0JMHgwMDAwLCAweDBjYzAsIDB4NzAxYywgMHg5YjA2LCAweDFkODAsIDB4Yjg0YywgMHgwMGE2LCAweDIwNTAsCi0JMHhiMDAwLCAweGE4MDIsIDB4MjkwMCwgMHhiMDAyLCAweDAwYWUsIDB4MDBlZSwgMHgwMTJlLCAweDAwMDUsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiODRjLCAweDkwNGQsIDB4MDEzMCwgMHhhODAwLCAweDkwMDUsCi0JMHgxMTA4LCAweGI4NTIsIDB4Yjg0ZSwgMHg5OTA1LCAweDAxMmUsIDB4MDAwNSwgMHhiODRjLCAweDkwNGQsCi0JMHgwMTMwLCAweGE4MDAsIDB4OTAwNSwgMHgxMTA4LCAweGI4NTIsIDB4Yjg0ZSwgMHg5OTA1LCAweDAwMDUsCi0JMHgwMGI2LCAweDAxMjYsIDB4MDBjNiwgMHgwMDI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjEwLCAweDIyNTgsCi0JMHhiYTAwLCAweDkwMDUsIDB4MDExMCwgMHhjMjg1LCAweDAwMDgsIDB4YzI4NCwgMHhiYTAyLCAweDAwMmUsCi0JMHgwMGNlLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDEyNiwgMHgwMGM2LCAweDIwOTEsCi0JMHg4MDAwLCAweDYyMTAsIDB4MjI1OCwgMHhiYTA0LCAweDAwMDYsIDB4OTA4NiwgMHgwMDA2LCAweDExNzAsCi0JMHhiODljLCAweGQwYWMsIDB4MDE1OCwgMHgwODBjLCAweDY2YzUsIDB4MDE0MCwgMHg5Mjg0LCAweGZmMDAsCi0JMHg4MDA3LCAweDkwODYsIDB4MDAwNywgMHgxMTEwLCAweDIwMTEsIDB4MDYwMCwgMHgwMDBlLCAweDkyOTQsCi0JMHhmZjAwLCAweDkyMTUsIDB4YmEwNiwgMHgwMDA2LCAweDkwODYsIDB4MDAwNiwgMHgxMTIwLCAweGJhOTAsCi0JMHg4MmZmLCAweDA5MGMsIDB4MGRmNiwgMHgwMDBlLCAweDAwY2UsIDB4MDEyZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDgwMDAsIDB4NjIxMCwgMHgyMjU4LCAweGJhMDQsCi0JMHgwMDA2LCAweDkwODYsIDB4MDAwNiwgMHgxMTY4LCAweGI4OWMsIDB4ZDBhNCwgMHgwMTUwLCAweDA4MGMsCi0JMHg2NmMxLCAweDExMzgsIDB4OTI4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAwNywgMHgxMTEwLCAweDIwMTEsCi0JMHgwMDA2LCAweDAwMGUsIDB4OTI5NCwgMHgwMGZmLCAweDgwMDcsIDB4OTIxNSwgMHhiYTA2LCAweDAwY2UsCi0JMHgwMTJlLCAweDAwYmUsIDB4MDAwNSwgMHg5MTgyLCAweDA4MDAsIDB4MDIxOCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDAyNiwgMHg5MTkwLCAweDEwMDAsIDB4MjIwNCwgMHg5MDVkLCAweDExODAsCi0JMHgwMDk2LCAweDA4MGMsIDB4MTAzNywgMHgyOTU4LCAweDAwOWUsIDB4MDE2MCwgMHgyYjAwLCAweDIwMTIsCi0JMHhiODVjLCAweGI4YmEsIDB4Yjg2MCwgMHhiOGI2LCAweDkwMDYsIDB4YjhhNiwgMHgwODBjLCAweDVlNDksCi0JMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMjYsIDB4OTE4MiwgMHgwODAwLCAweDAyMTgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDQ1OCwgMHgwMGQ2LCAweDkxOTAsIDB4MTAwMCwgMHgyMjA0LCAweDkwNWQsCi0JMHgwNTE4LCAweDIwMTMsIDB4MDAwMCwgMHhiOGE0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDEwNjksCi0JMHgwMGQ2LCAweDAwYzYsIDB4YjhhYywgMHgyMDYwLCAweDhjZmYsIDB4MDE2OCwgMHg2MDBjLCAweDAwMDYsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhiZDRlLCAweDAxMTAsIDB4MDgwYywgMHgwZmU5LCAweDA4MGMsCi0JMHg5ZmVhLCAweDAwY2UsIDB4MGM4OCwgMHgwMGNlLCAweDAwZGUsIDB4MmI0OCwgMHhiOGI4LCAweGI4NWUsCi0JMHhiOGI0LCAweGI4NjIsIDB4MDgwYywgMHgxMDc5LCAweDAwZGUsIDB4OTAwNiwgMHgwMDJlLCAweDAxMmUsCi0JMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHgwMDE2LCAweDkxODIsIDB4MDgwMCwgMHgwMjE4LCAweDkwODUsCi0JMHgwMDAxLCAweDAwMzAsIDB4OTE4OCwgMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHgwZGMwLCAweDkwMDYsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTU2LCAweDAxMzYsIDB4MDE0NiwgMHg5MDA2LCAweGI4MGEsCi0JMHhiODBlLCAweGI4MDAsIDB4YzA4YywgMHhiODAyLCAweDA4MGMsIDB4NzE3ZSwgMHgxNTEwLCAweGI4YTAsCi0JMHg5MDg2LCAweDAwN2UsIDB4MDEyMCwgMHgwODBjLCAweDlmNjksIDB4MTFkOCwgMHgwMDc4LCAweDcwNDAsCi0JMHhkMGU0LCAweDAxYjgsIDB4MDBjNiwgMHgyMDYxLCAweDE5NWMsIDB4NzA0OCwgMHgyMDYyLCAweDcwNGMsCi0JMHg2MDA2LCAweDcwNTAsIDB4NjAwYSwgMHg3MDU0LCAweDYwMGUsIDB4MDBjZSwgMHg3MDNjLCAweDIwNjksCi0JMHgwMTQwLCAweDkwMDUsIDB4MTExMCwgMHgyMDAxLCAweDAwMDEsIDB4Njg4NiwgMHgyMDY5LCAweDE4MDAsCi0JMHg2OGIyLCAweDcwNDAsIDB4Yjg1ZSwgMHg3MDQ4LCAweGI4NjIsIDB4NzA0YywgMHhiODY2LCAweDIwZTEsCi0JMHgwMDAwLCAweDIwOTksIDB4MDI3NiwgMHhiOGI0LCAweDIwZTgsIDB4YjhiOCwgMHg5MDg4LCAweDAwMGEsCi0JMHgyMWEwLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLCAweDIwOTksIDB4MDI3YSwgMHg5MDg4LCAweDAwMDYsCi0JMHgyMWEwLCAweDIwYTksIDB4MDAwNCwgMHg0MDAzLCAweDIwNjksIDB4MDIwMCwgMHg2ODE3LCAweDAwMDEsCi0JMHg3MDQwLCAweGI4NmEsIDB4NzE0NCwgMHhiOTZlLCAweDcwNDgsIDB4Yjg3MiwgMHg3MDUwLCAweGI4NzYsCi0JMHgyMDY5LCAweDAyMDAsIDB4NjgxNywgMHgwMDAwLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDExMTAsCi0JMHg3MTQ0LCAweGI5NmUsIDB4OTE4MiwgMHgwMjExLCAweDEyMTgsIDB4MjAwOSwgMHgwMDA4LCAweDA0MDAsCi0JMHg5MTgyLCAweDAyNTksIDB4MTIxOCwgMHgyMDA5LCAweDAwMDcsIDB4MDBkMCwgMHg5MTgyLCAweDAyYzEsCi0JMHgxMjE4LCAweDIwMDksIDB4MDAwNiwgMHgwMGEwLCAweDkxODIsIDB4MDM0OSwgMHgxMjE4LCAweDIwMDksCi0JMHgwMDA1LCAweDAwNzAsIDB4OTE4MiwgMHgwNDIxLCAweDEyMTgsIDB4MjAwOSwgMHgwMDA0LCAweDAwNDAsCi0JMHg5MTgyLCAweDA1ODEsIDB4MTIxOCwgMHgyMDA5LCAweDAwMDMsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDIsCi0JMHhiOTkyLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMGU2LCAweDIwNzEsIDB4MDI2MCwgMHg3MDM0LCAweGI4OTYsIDB4NzAzYywgMHhiODlhLCAweDcwNTQsCi0JMHhiODllLCAweDAwMzYsIDB4YmJiYywgMHhjMzg0LCAweGJhMDAsIDB4MjAwOSwgMHgxODdiLCAweDIxMGMsCi0JMHhkMGJjLCAweDAxMjAsIDB4ZDFlYywgMHgwMTEwLCAweGMyYWQsIDB4MDAwOCwgMHhjMmFjLCAweGQwYzQsCi0JMHgwMTQ4LCAweGQxZTQsIDB4MDEzOCwgMHhjMmJkLCAweGQwY2MsIDB4MDEyOCwgMHhkMzhjLCAweDExMDgsCi0JMHhjMzg1LCAweDAwMDgsIDB4YzJiYywgMHhiYTAyLCAweGJiYmUsIDB4MDAzZSwgMHgwMGVlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDA5NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiOGE0LCAweDkwNGQsCi0JMHgwNTc4LCAweGE5MDAsIDB4ODFmZiwgMHgxNWMwLCAweGFhMDQsIDB4OTI4MiwgMHgwMDEwLCAweDE2YzgsCi0JMHgwMTM2LCAweDAxNDYsIDB4MDFjNiwgMHgwMWQ2LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwOGMsCi0JMHgwMDNmLCAweDIxZTAsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwNCwgMHgyMDk4LCAweDIwMDksCi0JMHgwMDEwLCAweDIwYTksIDB4MDAwMSwgMHg0MDAyLCAweDkwODYsIDB4ZmZmZiwgMHgwMTIwLCAweDgxMDksCi0JMHgxZGQwLCAweDA4MGMsIDB4MGRmNiwgMHgzYzAwLCAweDIwZTgsIDB4MzMwMCwgMHg4MDAxLCAweDIwYTAsCi0JMHg0NjA0LCAweDgyMTAsIDB4YWEwNiwgMHgwMWRlLCAweDAxY2UsIDB4MDE0ZSwgMHgwMTNlLCAweDAwNjAsCi0JMHgwODBjLCAweDEwMzcsIDB4MDE3MCwgMHgyOTAwLCAweGI4YTYsIDB4YTgwMywgMHgwMDAwLCAweDA4MGMsCi0JMHg2NTVmLCAweGE4MDcsIDB4MDAwMSwgMHhhZTEyLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwOWUsCi0JMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDk2LCAweGI4YTQsCi0JMHg5MDRkLCAweDAxODgsIDB4YTgwMCwgMHg5MDA1LCAweDExNTAsIDB4MDgwYywgMHg2NTZlLCAweDExNTgsCi0JMHhhODA0LCAweDkwOGEsIDB4MDAwMiwgMHgwMjE4LCAweDgwMDEsIDB4YTgwNiwgMHgwMDIwLCAweDA4MGMsCi0JMHgxMDY5LCAweGI4YTcsIDB4MDAwMCwgMHgwMDllLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4ODYxNSwgMHgwMTJlLCAweDAwMDUsIDB4OTAxZSwgMHgwMDEwLCAweDIwMTksCi0JMHgwMDAxLCAweDkwMGUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4Yjg0YywgMHgyMDQ4LCAweGI4MDAsCi0JMHhkMGRjLCAweDExNzAsIDB4ODlmZiwgMHgwNTAwLCAweDgzZmYsIDB4MDEyMCwgMHhhODc4LCAweDk2MDYsCi0JMHgwMTU4LCAweDAwMzAsIDB4YTg2YywgMHg5NDA2LCAweDExMTgsIDB4YTg3MCwgMHg5NTA2LCAweDAxMjAsCi0JMHgyOTA4LCAweGE4MDAsIDB4MjA0OCwgMHgwYzcwLCAweDA4MGMsIDB4OTk1NSwgMHhhYTAwLCAweGI4NGMsCi0JMHg5OTA2LCAweDExMTAsIDB4YmE0ZSwgMHgwMDIwLCAweDAwYTYsIDB4MjE1MCwgMHhiMjAyLCAweDAwYWUsCi0JMHg4MmZmLCAweDExMTAsIDB4Yjk1MiwgMHg4OWZmLCAweDAxMmUsIDB4MDAwNSwgMHg5MDE2LCAweDA0ODksCi0JMHgxMTEwLCAweDIwMTEsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsIDB4NjVjMywgMHgwMTI4LCAweDA4MGMsCi0JMHhiZTBiLCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg2NWMzLCAweDAxMjgsCi0JMHgwODBjLCAweGJkYjAsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwODBjLCAweDY1YzMsCi0JMHgwMTI4LCAweDA4MGMsIDB4YmUwOCwgMHgwMDEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsCi0JMHg2NWMzLCAweDAxMjgsIDB4MDgwYywgMHhiZGNmLCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHgwODBjLCAweDY1YzMsIDB4MDEyOCwgMHgwODBjLCAweGJlNGUsIDB4MDAxMCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweGI4YTQsIDB4OTAwZCwgMHgxMTE4LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAxMzYsCi0JMHgwMWM2LCAweGE4MDAsIDB4OTAwNSwgMHgxMWI4LCAweDg5MGUsIDB4ODEwZSwgMHg4MTBmLCAweDkxODQsCi0JMHgwMDNmLCAweDIwZTAsIDB4OTE4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwNCwgMHgyMDk4LCAweDIwYTksCi0JMHgwMDAxLCAweDIwMDksIDB4MDAxMCwgMHg0MDAyLCAweDk2MDYsIDB4MDEyOCwgMHg4MTA5LCAweDFkZDgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDAwOCwgMHg5MDA2LCAweDAxY2UsIDB4MDEzZSwgMHgwMDA1LCAweDAxNDYsCi0JMHgwMWQ2LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAwNCwgMHgyMGEwLCAweDIwYTksCi0JMHgwMDEwLCAweDIwMDksIDB4ZmZmZiwgMHg0MTA0LCAweDAxZGUsIDB4MDE0ZSwgMHgwMTM2LCAweDAxYzYsCi0JMHhhODAwLCAweDkwMDUsIDB4MTFiOCwgMHg4OTBlLCAweDgxMGUsIDB4ODEwZiwgMHg5MTg0LCAweDAwM2YsCi0JMHgyMGUwLCAweDkxODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMDQsIDB4MjA5OCwgMHgyMGE5LCAweDAwMDEsCi0JMHgyMDA5LCAweDAwMTAsIDB4NDAwMiwgMHg5NjA2LCAweDAxMjgsIDB4ODEwOSwgMHgxZGQ4LCAweDkwODUsCi0JMHgwMDAxLCAweDAwNjgsIDB4MDE0NiwgMHgwMWQ2LCAweDMzMDAsIDB4ODAwMSwgMHgyMGEwLCAweDNjMDAsCi0JMHgyMGU4LCAweDIwMDEsIDB4ZmZmZiwgMHg0MDA0LCAweDAxZGUsIDB4MDE0ZSwgMHg5MDA2LCAweDAxY2UsCi0JMHgwMTNlLCAweDAwMDUsIDB4MDA5NiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiOGE0LCAweDkwNGQsCi0JMHgxMTI4LCAweDA4MGMsIDB4MTAzNywgMHgwMTY4LCAweDI5MDAsIDB4YjhhNiwgMHgwODBjLCAweDY1NWYsCi0JMHhhODAzLCAweDAwMDEsIDB4YTgwNywgMHgwMDAwLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwOWUsCi0JMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGI4YTQsCi0JMHg5MDRkLCAweDAxMzAsIDB4YjhhNywgMHgwMDAwLCAweDA4MGMsIDB4MTA2OSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMTJlLCAweDAwOWUsIDB4MDAwNSwgMHhiODljLCAweGQwYTQsIDB4MDAwNSwgMHgwMGI2LCAweDAwZjYsCi0JMHgwODBjLCAweDcxN2UsIDB4MDFiMCwgMHg3MWMwLCAweDgxZmYsIDB4MTE5OCwgMHg3MWQ4LCAweGQxOWMsCi0JMHgwMTgwLCAweDIwMDEsIDB4MDA3ZSwgMHg5MDgwLCAweDEwMDAsIDB4MjAwNCwgMHg5MDVkLCAweDAxNDgsCi0JMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDYsIDB4MTExOCwgMHhiODAwLCAweGMwZWQsCi0JMHhiODAyLCAweDIwNzksIDB4MTg1YiwgMHg3ODA0LCAweDAwZDAsIDB4MDE1NiwgMHgyMGE5LCAweDAwN2YsCi0JMHg5MDBlLCAweDAwMTYsIDB4MDgwYywgMHg2M2EzLCAweDExNjgsIDB4YjgwNCwgMHg5MDg0LCAweGZmMDAsCi0JMHg4MDA3LCAweDkwOTYsIDB4MDAwNCwgMHgwMTE4LCAweDkwODYsIDB4MDAwNiwgMHgxMTE4LCAweGI4MDAsCi0JMHhjMGVkLCAweGI4MDIsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4NjVlOSwgMHgwMTVlLCAweDA4MGMsCi0JMHg2Njg3LCAweDAxMjAsIDB4MjAwMSwgMHgxOTVmLCAweDIwMGMsIDB4MDAzMCwgMHgyMDc5LCAweDE4NWIsCi0JMHg3ODA0LCAweDAwMzAsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsIDB4NjYxMywgMHgwODBjLCAweDgyZWIsCi0JMHgwMGZlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGI2LCAweDIwMTEsIDB4NjYxMywgMHgwODBjLCAweDgyNTksCi0JMHgwODBjLCAweDY2ODcsIDB4MDFkOCwgMHgyMDAxLCAweDEwN2UsIDB4MjAwNCwgMHgyMDU4LCAweGI5MDAsCi0JMHhjMWVjLCAweGI5MDIsIDB4MDgwYywgMHg2NmM1LCAweDAxMzAsIDB4MjAwOSwgMHgwN2QwLCAweDIwMTEsCi0JMHg2NjEzLCAweDA4MGMsIDB4ODJlYiwgMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg5MDA2LCAweDcwN2EsCi0JMHg3MDVjLCAweDcwN2UsIDB4MDgwYywgMHgyZTczLCAweDAwZWUsIDB4MDRjMCwgMHgwMTU2LCAweDAwYzYsCi0JMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwMDE2LCAweDA4MGMsIDB4NjNhMywgMHgxNTQ4LCAweGI4MDAsCi0JMHhkMGVjLCAweDA1MzAsIDB4ZDBiYywgMHgxNTIwLCAweDAwNDYsIDB4YmFhMCwgMHgyMjIwLCAweDkwMDYsCi0JMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhkODM3LCAweGI4MDAsIDB4YzBlNSwgMHhjMGVjLCAweGI4MDIsCi0JMHgwODBjLCAweDY2YzEsIDB4MjAwMSwgMHgwNzA3LCAweDExMjgsIDB4YjgwNCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MDg1LCAweDA3MDAsIDB4YjgwNiwgMHgyMDE5LCAweDAwMjksIDB4MDgwYywgMHg4NzgyLCAweDAwNzYsCi0JMHg5MDNlLCAweDA4MGMsIDB4ODY3MCwgMHg5MDBlLCAweDA4MGMsIDB4ZDU1NiwgMHgwMDdlLCAweDAwNGUsCi0JMHgwMDFlLCAweDgxMDgsIDB4MWYwNCwgMHg2NjNiLCAweDAwY2UsIDB4MDE1ZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMGI2LCAweDYwMTAsIDB4MjA1OCwgMHhiODAwLCAweGMwZWMsIDB4YjgwMiwgMHgwMGJlLCAweDAwMDUsCi0JMHg3ODEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBhYywgMHgwMDA1LCAweDYwMTAsCi0JMHgwMGI2LCAweDkwNWQsIDB4MDEwOCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwMDA1LCAweDAwYjYsCi0JMHgwMGY2LCAweDIwMDEsIDB4MTA3ZSwgMHgyMDA0LCAweDkwNWQsIDB4MDExMCwgMHhiODAwLCAweGQwZWMsCi0JMHgwMGZlLCAweDAwYmUsIDB4MDAwNSwgMHgwMTI2LCAweDAwMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMDYsCi0JMHhiYWEwLCAweDkyOTAsIDB4MTAwMCwgMHgyMjA0LCAweDliMDYsIDB4MTkwYywgMHgwZGY2LCAweDAwMGUsCi0JMHhiYTAwLCAweDkwMDUsIDB4MDExMCwgMHhjMmZkLCAweDAwMDgsIDB4YzJmYywgMHhiYTAyLCAweDAwMmUsCi0JMHgwMTJlLCAweDAwMDUsIDB4MjAxMSwgMHgxODM2LCAweDIyMDQsIDB4ZDBjYywgMHgwMTM4LCAweDIwMDEsCi0JMHgxOTVkLCAweDIwMGMsIDB4MjAxMSwgMHg2NmI3LCAweDA4MGMsIDB4ODJlYiwgMHgwMDA1LCAweDIwMTEsCi0JMHg2NmI3LCAweDA4MGMsIDB4ODI1OSwgMHgyMDExLCAweDE4MzYsIDB4MjIwNCwgMHhjMGNjLCAweDIwMTIsCi0JMHgwMDA1LCAweDA4MGMsIDB4NTRkYiwgMHhkMGFjLCAweDAwMDUsIDB4MDgwYywgMHg1NGRiLCAweGQwYTQsCi0JMHgwMDA1LCAweDAwMTYsIDB4YjkwNCwgMHg5MTg0LCAweDAwZmYsIDB4OTA4ZSwgMHgwMDA2LCAweDAwMWUsCi0JMHgwMDA1LCAweDAwMTYsIDB4YjkwNCwgMHg5MTg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDhlLCAweDAwMDYsCi0JMHgwMDFlLCAweDAwMDUsIDB4MDBiNiwgMHgwMGY2LCAweDA4MGMsIDB4YzQ1OSwgMHgwMTU4LCAweDcwZDgsCi0JMHg5MDg0LCAweDAwMjgsIDB4MDEzOCwgMHgyMDAxLCAweDEwN2YsIDB4MjAwNCwgMHg5MDVkLCAweDAxMTAsCi0JMHhiOGJjLCAweGQwOTQsIDB4MDBmZSwgMHgwMGJlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMzYsCi0JMHgwMDQ2LCAweDAwNzYsIDB4MDBiNiwgMHgyMDAxLCAweDE4MTcsIDB4MjAzYywgMHg5NzgwLCAweDMxZjMsCi0JMHgyMDNkLCAweDk3YmMsIDB4ZmYwMCwgMHg4NzNmLCAweDkwMDYsIDB4MjAxOCwgMHgyMDA4LCAweDkyODQsCi0JMHg4MDAwLCAweDAxMTAsIDB4MjAxOSwgMHgwMDAxLCAweDkyOTQsIDB4N2ZmZiwgMHgyMTAwLCAweDk3MDYsCi0JMHgwMTkwLCAweDkxYTAsIDB4MTAwMCwgMHgyNDA0LCAweDkwNWQsIDB4MDE2OCwgMHhiODA0LCAweDkwODQsCi0JMHgwMGZmLCAweDkwODYsIDB4MDAwNiwgMHgxMTM4LCAweDgzZmYsIDB4MDExOCwgMHhiODljLCAweGQwYTQsCi0JMHgwMTEwLCAweDgyMTEsIDB4MDE1OCwgMHg4MTA4LCAweDgzZmYsIDB4MDEyMCwgMHg5MTgyLCAweDA4MDAsCi0JMHgwZTI4LCAweDAwNjgsIDB4OTE4MiwgMHgwMDdlLCAweDBlMDgsIDB4MDA0OCwgMHgwMGJlLCAweDAwN2UsCi0JMHgwMDRlLCAweDAwM2UsIDB4MDAxZSwgMHg5MDg1LCAweDAwMDEsIDB4MDAwZSwgMHgwMDA1LCAweDAwYmUsCi0JMHgwMDdlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDFlLCAweDkwMDYsIDB4MDAwZSwgMHgwMDA1LCAweDAwNDYsCi0JMHgwMDU2LCAweDAwNzYsIDB4MDBiNiwgMHgyMTAwLCAweDkwODQsIDB4N2ZmZiwgMHg5MDgwLCAweDEwMDAsCi0JMHgyMDA0LCAweDkwNWQsIDB4MDEzMCwgMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDYsCi0JMHgwNTUwLCAweDkxODQsIDB4ODAwMCwgMHgwNTgwLCAweDIwMDEsIDB4MTgxNywgMHgyMDNjLCAweDk3ODAsCi0JMHgzMWYzLCAweDIwM2QsIDB4OTdiYywgMHhmZjAwLCAweDg3M2YsIDB4OTAwNiwgMHgyMDIwLCAweDI0MDAsCi0JMHg5NzA2LCAweDAxYTAsIDB4OTRhOCwgMHgxMDAwLCAweDI1MDQsIDB4OTA1ZCwgMHgwMTc4LCAweGI4MDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LCAweDExNDgsIDB4Yjg5YywgMHhkMGE0LCAweDAxMzAsCi0JMHhiODE0LCAweDkyMDYsIDB4MTExOCwgMHhiODEwLCAweDkzMDYsIDB4MDEyOCwgMHg4NDIwLCAweDk0ODIsCi0JMHgwODAwLCAweDBlMjgsIDB4MDA0OCwgMHg5MThjLCAweDdmZmYsIDB4MDBiZSwgMHgwMDdlLCAweDAwNWUsCi0JMHgwMDRlLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDkxOGMsIDB4N2ZmZiwgMHgwMGJlLCAweDAwN2UsCi0JMHgwMDVlLCAweDAwNGUsIDB4OTAwNiwgMHgwMDA1LCAweDIwNzEsIDB4MTkwZSwgMHg3MDAzLCAweDAwMDEsCi0JMHg3MDA3LCAweDAwMDAsIDB4OTAwNiwgMHg3MDEyLCAweDcwMTYsIDB4NzAxYSwgMHg3MDFlLCAweDcwMGEsCi0JMHg3MDQ2LCAweDIwMDEsIDB4MTkyMCwgMHgyMDAzLCAweDAwMDAsIDB4MDAwNSwgMHgwMDE2LCAweDAwZTYsCi0JMHgyMDcxLCAweDE5MjMsIDB4OTAwZSwgMHg3MTBhLCAweDA4MGMsIDB4NTRkYiwgMHhkMGZjLCAweDExNDAsCi0JMHgwODBjLCAweDU0ZGIsIDB4OTAwZSwgMHhkMDljLCAweDAxMDgsIDB4ODEwOCwgMHg3MTAyLCAweDA0MzgsCi0JMHgyMDAxLCAweDE4N2IsIDB4MjAwYywgMHg5MTg0LCAweDAwMDcsIDB4OTAwNiwgMHgwMDAyLCAweDY3YTAsCi0JMHg2N2EwLCAweDY3YTAsIDB4NjdhMCwgMHg2N2EwLCAweDY3YjcsIDB4NjdjYywgMHg2N2RhLCAweDcwMDMsCi0JMHgwMDAzLCAweDIwMDksIDB4MTg3YywgMHgyMTBjLCAweDkxODQsIDB4ZmYwMCwgMHg5MDhlLCAweGZmMDAsCi0JMHgwMTQwLCAweDgwMDcsIDB4OTAwNSwgMHgxMTEwLCAweDIwMDEsIDB4MDAwMiwgMHg4MDAzLCAweDcwMDYsCi0JMHgwMDMwLCAweDcwMDcsIDB4MDAwMSwgMHgwMDE4LCAweDcwMDMsIDB4MDAwNSwgMHgwYzUwLCAweDIwNzEsCi0JMHgxOTBlLCAweDcwNGYsIDB4MDAwMCwgMHgyMDcxLCAweDE4MDAsIDB4NzBlZiwgMHgwMDAxLCAweDAwZWUsCi0JMHgwMDFlLCAweDAwMDUsIDB4NzAwMywgMHgwMDAwLCAweDIwNzEsIDB4MTkwZSwgMHgyMDA5LCAweDE4N2MsCi0JMHgyMTBjLCAweDkxODQsIDB4N2YwMCwgMHg4MDA3LCAweDkwOGMsIDB4MDAwZiwgMHgwMTYwLCAweDcxNGUsCi0JMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg4MDA0LCAweDIwNzEsIDB4MTgwMCwgMHg5MDhjLCAweDAwMDcsCi0JMHgwMTI4LCAweDcwZWUsIDB4MGMyMCwgMHg3MDRmLCAweDAwMGYsIDB4MGM5MCwgMHg3MGVmLCAweDAwMDUsCi0JMHgwOGYwLCAweDAwZTYsIDB4MjA3MSwgMHgwMDUwLCAweDY4NGMsIDB4OTAwNSwgMHgxMTUwLCAweDAwZTYsCi0JMHgyMDcxLCAweDE5MGUsIDB4NzAyOCwgMHhjMDg1LCAweDcwMmEsIDB4MDBlZSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwNDg4LCAweDY4NDQsIDB4OTAwNSwgMHgwMTU4LCAweDA4MGMsIDB4NzRlYywgMHg2YTYwLCAweDkyMDAsCi0JMHg3MDAyLCAweDY4NjQsIDB4OTEwMSwgMHg3MDA2LCAweDkwMDYsIDB4NzAxMiwgMHg3MDE2LCAweDY4NjAsCi0JMHg3MDAyLCAweDY4NjQsIDB4NzAwNiwgMHg2ODY4LCAweDcwMGEsIDB4Njg2YywgMHg3MDBlLCAweDY4NDQsCi0JMHg5MDA1LCAweDExMTAsIDB4NzAxMiwgMHg3MDE2LCAweDY4NGMsIDB4NzAxYSwgMHg3MDFjLCAweDkwODUsCi0JMHgwMDQwLCAweDcwMWUsIDB4NzAzNywgMHgwMDE5LCAweDcwMmIsIDB4MDAwMSwgMHgwMGU2LCAweDIwNzEsCi0JMHgxOTBlLCAweDcwMjgsIDB4YzA4NCwgMHg3MDJhLCAweDcwMDcsIDB4MDAwMSwgMHg3MDBiLCAweDAwMDAsCi0JMHgwMGVlLCAweDkwMDYsIDB4MDBlZSwgMHgwMDA1LCAweGE4NjgsIDB4ZDBmYywgMHgxNTA4LCAweDAwZTYsCi0JMHgwMDI2LCAweDIwMDEsIDB4MTkyMywgMHgyMDA0LCAweDkwMTUsIDB4MDkwNCwgMHg2YTI4LCAweGE5NzgsCi0JMHhhODc0LCAweDkxMDUsIDB4MTkwNCwgMHg2YTI4LCAweDkyODYsIDB4MDAwMywgMHgwOTA0LCAweDY4YzEsCi0JMHg5Mjg2LCAweDAwMDUsIDB4MDkwNCwgMHg2OGMxLCAweGE4N2MsIDB4ZDBiYywgMHgxOTA0LCAweDZhMjgsCi0JMHgyMjAwLCAweDAwMDIsIDB4NmEyOCwgMHg2ODg1LCAweDY4YzEsIDB4NjhjMSwgMHg2YTI4LCAweDY4YzEsCi0JMHgwMDA1LCAweGE4NjgsIDB4ZDBmYywgMHgxNTAwLCAweDAwZTYsIDB4MDAyNiwgMHgyMDA5LCAweDE5MjMsCi0JMHgyMTBjLCAweDgxZmYsIDB4MDkwNCwgMHg2YTI4LCAweGE4ODAsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDAxLCAweDE5MDQsIDB4NmEyOCwgMHg5MTg2LCAweDAwMDMsIDB4MDkwNCwgMHg2OGMxLCAweDkxODYsCi0JMHgwMDA1LCAweDA5MDQsIDB4NjhjMSwgMHhhODdjLCAweGQwY2MsIDB4MDkwNCwgMHg2YTI4LCAweGE4NGYsCi0JMHg4MDIxLCAweGE4NTMsIDB4MDAxNywgMHgwMDI4LCAweDAwMDUsIDB4YTg0ZiwgMHg4MDIwLCAweGE4NTMsCi0JMHgwMDE2LCAweDIwNzEsIDB4MTkwZSwgMHg3MDFjLCAweDkwMDUsIDB4MTkwNCwgMHg2YmY2LCAweDBlMDQsCi0JMHg2YzQxLCAweDIwNzEsIDB4MDAwMCwgMHhhODRjLCAweDcwODIsIDB4YTg1MCwgMHg3MDMyLCAweGE4NmMsCi0JMHg3MDg2LCAweDcwMzYsIDB4YTg3MCwgMHg3MDhhLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksCi0JMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWU2LCAweDIwNzEsIDB4MTgwMCwgMHgyMDExLCAweDAwMDEsCi0JMHhhODA0LCAweDkwMGQsIDB4NzAyYywgMHgxMTU4LCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYmMsCi0JMHg5MjAwLCAweDcwYmUsIDB4MDgwYywgMHg4MTZmLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDAwOTYsCi0JMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDAwOWUsCi0JMHgwYzU4LCAweGE4NGYsIDB4MDAwMCwgMHgwMGY2LCAweDIwNzksIDB4MDA1MCwgMHgyMDcxLCAweDE5MGUsCi0JMHhhODAzLCAweDAwMDAsIDB4NzAxMCwgMHg5MDA1LCAweDE5MDQsIDB4NjlhYywgMHg3ODJjLCAweDkwOGMsCi0JMHgwNzgwLCAweDE5MGMsIDB4NmQ2YSwgMHg4MDA0LCAweDgwMDQsIDB4ODAwNCwgMHg5MDg0LCAweDAwMDMsCi0JMHgwMDAyLCAweDY4ZGYsIDB4NjlhYywgMHg2OTAzLCAweDY5NDksIDB4MDgwYywgMHgwZGY2LCAweDIwNzEsCi0JMHgxODAwLCAweDI5MDAsIDB4NzgyMiwgMHhhODA0LCAweDkwMGQsIDB4MTE2OCwgMHgyMDcxLCAweDE5ZDUsCi0JMHg3MDQ0LCAweDkwMDUsIDB4MTMyMCwgMHgyMDAxLCAweDE5MjQsIDB4MjAwNCwgMHg3MDQ2LCAweDAwZmUsCi0JMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsCi0JMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBiYywgMHg5MjAwLCAweDcwYmUsCi0JMHgwODBjLCAweDgxNmYsIDB4MGMxOCwgMHgyMDcxLCAweDE4MDAsIDB4MjkwMCwgMHg3ODIyLCAweGE4MDQsCi0JMHg5MDBkLCAweDE1NzgsIDB4NzgyNCwgMHgwMGU2LCAweDIwNzEsIDB4MDA0MCwgMHg3MTJjLCAweGQxOWMsCi0JMHgxMTQ4LCAweDIwMDksIDB4MTgyZiwgMHgyMTBjLCAweDkxOGEsIDB4MDA0MCwgMHgwMjE4LCAweDcwMjIsCi0JMHgwMGVlLCAweDAwNTgsIDB4MDBlZSwgMHgyMDQ4LCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsCi0JMHg3MGJjLCAweDgwMDAsIDB4NzBiZSwgMHgwODBjLCAweDgxNmYsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCi0JMHgxOTBjLCAweDZkNmEsIDB4ZDBhNCwgMHgxOWYwLCAweDIwNzEsIDB4MTlkNSwgMHg3MDQ0LCAweDkwMDUsCi0JMHgxMzIwLCAweDIwMDEsIDB4MTkyNCwgMHgyMDA0LCAweDcwNDYsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsCi0JMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGJjLCAweDkyMDAsIDB4NzBiZSwgMHgwODBjLCAweDgxNmYsCi0JMHgwODA4LCAweDAwOTYsIDB4MDBlNiwgMHg3ODI0LCAweDIwNDgsIDB4MjA3MSwgMHgxODAwLCAweDcwMmMsCi0JMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGJjLCAweDgwMDAsIDB4NzBiZSwgMHgwODBjLCAweDgxNmYsCi0JMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDZkNmEsIDB4ZDBhNCwgMHgxZDYwLCAweDAwZWUsCi0JMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDZkNmEsIDB4ZDA5YywgMHgxMTk4LCAweDAwOWUsCi0JMHgyOTAwLCAweDc4MjIsIDB4YTgwNCwgMHg5MDBkLCAweDE1NTAsIDB4MjA3MSwgMHgxOWQ1LCAweDcwNDQsCi0JMHg5MDA1LCAweDEzMjAsIDB4MjAwMSwgMHgxOTI0LCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDA5ZSwgMHgyOTA4LCAweDcwMTAsIDB4ODAwMCwgMHg3MDEyLCAweDcwMTgsCi0JMHg5MDRkLCAweDcxMWEsIDB4MDExMCwgMHhhOTAyLCAweDAwMDgsIDB4NzExZSwgMHgyMTQ4LCAweGE4MDQsCi0JMHg5MDBkLCAweDExNjgsIDB4MjA3MSwgMHgxOWQ1LCAweDcwNDQsIDB4OTAwNSwgMHgxMzIwLCAweDIwMDEsCi0JMHgxOTI0LCAweDIwMDQsIDB4NzA0NiwgMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzEsCi0JMHgxODAwLCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsCi0JMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGJjLCAweDkyMDAsIDB4NzBiZSwgMHgwODBjLCAweDgxNmYsCi0JMHgwMGZlLCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDI5MDgsIDB4NzAxMCwgMHg4MDAwLCAweDcwMTIsCi0JMHg3MDE4LCAweDkwNGQsIDB4NzExYSwgMHgwMTEwLCAweGE5MDIsIDB4MDAwOCwgMHg3MTFlLCAweDIxNDgsCi0JMHhhODA0LCAweDkwMGQsIDB4MTkwNCwgMHg2YTAwLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsCi0JMHg2ZDZhLCAweGQwOWMsIDB4MTE5OCwgMHg3MDFjLCAweDkwNGQsIDB4MDE4MCwgMHg3MDEwLCAweDgwMDEsCi0JMHg3MDEyLCAweDExMDgsIDB4NzAxYSwgMHhhODAwLCAweDcwMWUsIDB4MjkwMCwgMHg3ODIyLCAweDc4MmMsCi0JMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg2ZDZhLCAweGQwOWMsIDB4MGQ2OCwgMHg3ODJjLCAweDkwOTQsCi0JMHgwNzgwLCAweDE5MGMsIDB4NmQ2YSwgMHhkMGE0LCAweDAxYjAsIDB4MDBlNiwgMHg3ODI0LCAweDIwNDgsCi0JMHgyMDcxLCAweDE4MDAsIDB4NzAyYywgMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGJjLCAweDgwMDAsCi0JMHg3MGJlLCAweDA4MGMsIDB4ODE2ZiwgMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDZkNmEsCi0JMHhkMGE0LCAweDFkNjAsIDB4MDBlZSwgMHgyMDcxLCAweDE5ZDUsIDB4NzA0NCwgMHg5MDA1LCAweDEzMjAsCi0JMHgyMDAxLCAweDE5MjQsIDB4MjAwNCwgMHg3MDQ2LCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsCi0JMHg4MjEwLCAweDI5MDAsIDB4ODFmZiwgMHgxZGM4LCAweDcwMmUsIDB4NzBiYywgMHg5MjAwLCAweDcwYmUsCi0JMHgwODBjLCAweDgxNmYsIDB4MDBlZSwgMHgwODA0LCAweDY5YmMsIDB4YTg2OCwgMHhkMGZjLCAweDE5MDQsCi0JMHg2YTc2LCAweDAwOTYsIDB4YTgwNCwgMHhhODA3LCAweDAwMDAsIDB4OTA0ZCwgMHgxOTBjLCAweDBmZTksCi0JMHgwMDllLCAweDAwMjAsIDB4YTg2OCwgMHhkMGZjLCAweDE5MDQsIDB4NmE3NiwgMHgwMGU2LCAweDAwMjYsCi0JMHhhODRmLCAweDAwMDAsIDB4MDBmNiwgMHgyMDc5LCAweDAwNTAsIDB4MjA3MSwgMHgxODAwLCAweDcwZTgsCi0JMHg4MDAxLCAweDA1NTgsIDB4MWEwNCwgMHg2YTczLCAweDIwNzEsIDB4MTkwZSwgMHhhODAzLCAweDAwMDAsCi0JMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDhlLCAweDAwMTYsIDB4MDFhOCwgMHg3MDEwLCAweDkwMDUsCi0JMHgxOTA0LCAweDZiNzIsIDB4NzgyYywgMHg5MDhjLCAweDA3ODAsIDB4MTkwYywgMHg2ZDZhLCAweDgwMDQsCi0JMHg4MDA0LCAweDgwMDQsIDB4OTA4NCwgMHgwMDAzLCAweDAwMDIsIDB4NmE3NywgMHg2YjcyLCAweDZhOTIsCi0JMHg2YjAzLCAweDA4MGMsIDB4MGRmNiwgMHgyMDA5LCAweDE5MjMsIDB4MjEwNCwgMHgwMDAyLCAweDZhM2UsCi0JMHg2YTNlLCAweDZhM2UsIDB4NjhjYSwgMHg2YTNlLCAweDY4Y2EsIDB4NzBlYiwgMHgwZmEwLCAweDcxZTQsCi0JMHg4MTA3LCAweDkxMDYsIDB4OTA5NCwgMHgwMGMwLCAweDkxODQsIDB4ZmYzZiwgMHg5MjA1LCAweDcwZTYsCi0JMHgzYjA4LCAweDNhMDAsIDB4OTEwNCwgMHg5MThkLCAweDAwYzAsIDB4MjFkOCwgMHg5MDg0LCAweGZmM2YsCi0JMHg5MjA1LCAweDIwZDAsIDB4MDgwOCwgMHg3MGVhLCAweDA4MDQsIDB4NmEzNCwgMHgwMDA1LCAweDIwNzEsCi0JMHgxODAwLCAweDI5MDAsIDB4NzgyMiwgMHhhODA0LCAweDkwMGQsIDB4MTEyMCwgMHgwMGZlLCAweDAwMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsCi0JMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYmMsIDB4OTIwMCwgMHg3MGJlLCAweDA4MGMsCi0JMHg4MTZmLCAweDBjNjAsIDB4MjA3MSwgMHgxODAwLCAweDI5MDAsIDB4NzgyMiwgMHhhODA0LCAweDkwMGQsCi0JMHgxOTA0LCAweDZhZjIsIDB4NzgzMCwgMHg4MDA3LCAweDkwOGMsIDB4MDAxZiwgMHg3MGVjLCAweDkxMDIsCi0JMHgxMjIwLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4NzgyNCwgMHgwMGU2LCAweDIwNzEsCi0JMHgwMDQwLCAweDcxMmMsIDB4ZDE5YywgMHgxMTQ4LCAweDIwMDksIDB4MTgyZiwgMHgyMTBjLCAweDkxOGEsCi0JMHgwMDQwLCAweDAyMTgsIDB4NzAyMiwgMHgwMGVlLCAweDAwNTgsIDB4MDBlZSwgMHgyMDQ4LCAweDcwMmMsCi0JMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGJjLCAweDgwMDAsIDB4NzBiZSwgMHgwODBjLCAweDgxNmYsCi0JMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDZkNmEsIDB4ZDBhNCwgMHgxOWYwLCAweDBlMDQsCi0JMHg2YWU5LCAweDc4MzgsIDB4NzkzOCwgMHg5MTBlLCAweDFkZTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsCi0JMHg2ODM2LCAweDY4MzMsIDB4MDAxMywgMHgwMGRlLCAweDIwMDEsIDB4MTkxZiwgMHgyMDBjLCAweGMxODQsCi0JMHgyMTAyLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCi0JMHgxMWU2LCAweDIwMDEsIDB4MTkyMCwgMHgyMDAzLCAweDAwMDAsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDIwMDEsIDB4MTkxZiwgMHgyMDBjLCAweGMxODUsIDB4MjEwMiwgMHgwMGZlLCAweDAwMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4OTAxNiwgMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsCi0JMHgyOTAwLCAweDgxZmYsIDB4MWRjOCwgMHg3MDJlLCAweDcwYmMsIDB4OTIwMCwgMHg3MGJlLCAweDA4MGMsCi0JMHg4MTZmLCAweDA4MDQsIDB4NmFhNSwgMHgwMDk2LCAweDAwZTYsIDB4NzgyNCwgMHgyMDQ4LCAweDIwNzEsCi0JMHgxODAwLCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsIDB4NzBiYywgMHg4MDAwLCAweDcwYmUsCi0JMHgwODBjLCAweDgxNmYsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg2ZDZhLCAweGQwYTQsCi0JMHgxZDYwLCAweDAwZWUsIDB4MGUwNCwgMHg2YjQ1LCAweDc4MzgsIDB4NzkzOCwgMHg5MTBlLCAweDFkZTAsCi0JMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODM2LCAweDY4MzMsIDB4MDAxMywgMHgwMGRlLCAweDcwNDQsCi0JMHhjMDg0LCAweDcwNDYsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsCi0JMHgxOTBjLCAweDExZTYsIDB4NzA0YiwgMHgwMDAwLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsCi0JMHg2ZDZhLCAweGQwOWMsIDB4MTE3MCwgMHgwMDllLCAweDI5MDAsIDB4NzgyMiwgMHhhODA0LCAweDkwMGQsCi0JMHgxMWUwLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4NzA0NCwgMHhjMDg1LCAweDcwNDYsCi0JMHgwYzU4LCAweDAwOWUsIDB4MjkwOCwgMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LCAweDkwNGQsCi0JMHg3MTFhLCAweDAxMTAsIDB4YTkwMiwgMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsCi0JMHgxMTIwLCAweDAwZmUsIDB4MDAyZSwgMHgwMGVlLCAweDAwMDUsIDB4MjA3MSwgMHgxODAwLCAweDkwMTYsCi0JMHg3MDJjLCAweDIxNDgsIDB4YTkwNCwgMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLCAweDFkYzgsCi0JMHg3MDJlLCAweDcwYmMsIDB4OTIwMCwgMHg3MGJlLCAweDA4MGMsIDB4ODE2ZiwgMHgwMGZlLCAweDAwMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MjkwOCwgMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LCAweDkwNGQsCi0JMHg3MTFhLCAweDAxMTAsIDB4YTkwMiwgMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsCi0JMHgxOTA0LCAweDZiZTEsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg2ZDZhLCAweGQwOWMsCi0JMHgxMWIwLCAweDcwMWMsIDB4OTA0ZCwgMHgwMTk4LCAweGE4NGMsIDB4OTAwNSwgMHgxMTgwLCAweDcwMTAsCi0JMHg4MDAxLCAweDcwMTIsIDB4MTEwOCwgMHg3MDFhLCAweGE4MDAsIDB4NzAxZSwgMHgyOTAwLCAweDc4MjIsCi0JMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDZkNmEsIDB4ZDA5YywgMHgwZDUwLCAweDc4MmMsCi0JMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg2ZDZhLCAweGQwYTQsIDB4MDViOCwgMHgwMGU2LCAweDc4MjQsCi0JMHgyMDQ4LCAweDIwNzEsIDB4MTgwMCwgMHg3MDJjLCAweGE4MDIsIDB4MjkwMCwgMHg3MDJlLCAweDcwYmMsCi0JMHg4MDAwLCAweDcwYmUsIDB4MDgwYywgMHg4MTZmLCAweDc4MmMsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsCi0JMHg2ZDZhLCAweGQwYTQsIDB4MWQ2MCwgMHgwMGVlLCAweDBlMDQsIDB4NmJkYSwgMHg3ODM4LCAweDc5MzgsCi0JMHg5MTBlLCAweDFkZTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsCi0JMHgwMGRlLCAweDcwNDQsIDB4YzA4NCwgMHg3MDQ2LCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksCi0JMHgyMDA0LCAweGQwODQsIDB4MTkwYywgMHgxMWU2LCAweDcwNGIsIDB4MDAwMCwgMHgwMGZlLCAweDAwMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4NzA0NCwgMHhjMDg1LCAweDcwNDYsIDB4MDBmZSwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsCi0JMHhhODAyLCAweDgyMTAsIDB4MjkwMCwgMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGJjLCAweDkyMDAsCi0JMHg3MGJlLCAweDA4MGMsIDB4ODE2ZiwgMHgwMGVlLCAweDA4MDQsIDB4NmI4MiwgMHgyMDcxLCAweDE5MGUsCi0JMHhhODAzLCAweDAwMDAsIDB4MjkwOCwgMHg3MDEwLCAweDgwMDAsIDB4NzAxMiwgMHg3MDE4LCAweDkwNGQsCi0JMHg3MTFhLCAweDAxMTAsIDB4YTkwMiwgMHgwMDA4LCAweDcxMWUsIDB4MjE0OCwgMHhhODA0LCAweDkwMGQsCi0JMHgxMTI4LCAweDFlMDQsIDB4NmMyMSwgMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgyMDcxLCAweDE4MDAsCi0JMHg5MDE2LCAweDcwMmMsIDB4MjE0OCwgMHhhOTA0LCAweGE4MDIsIDB4ODIxMCwgMHgyOTAwLCAweDgxZmYsCi0JMHgxZGM4LCAweDcwMmUsIDB4NzBiYywgMHg5MjAwLCAweDcwYmUsIDB4MDgwYywgMHg4MTZmLCAweDBlMDQsCi0JMHg2YzBiLCAweDIwNzEsIDB4MTkwZSwgMHg3MDFjLCAweDIwNDgsIDB4YTg0YywgMHg5MDBkLCAweDBkMTgsCi0JMHgyMDcxLCAweDAwMDAsIDB4NzE4MiwgMHhhODUwLCAweDcwMzIsIDB4YTg2YywgMHg3MDg2LCAweDcwMzYsCi0JMHhhODcwLCAweDcwOGEsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsCi0JMHgxOTBjLCAweDExZTYsIDB4MjA3MSwgMHgxOTBlLCAweDA4MGMsIDB4NmQ1NiwgMHgwMDJlLCAweDAwZWUsCi0JMHgwMDA1LCAweDIwNzEsIDB4MTkwZSwgMHhhODAzLCAweDAwMDAsIDB4MjkwOCwgMHg3MDEwLCAweDgwMDAsCi0JMHg3MDEyLCAweDcwMTgsIDB4OTA0ZCwgMHg3MTFhLCAweDAxMTAsIDB4YTkwMiwgMHgwMDA4LCAweDcxMWUsCi0JMHgyMTQ4LCAweGE4MDQsIDB4OTAwZCwgMHgxMTE4LCAweDAwMmUsIDB4MDBlZSwgMHgwMDA1LCAweDIwNzEsCi0JMHgxODAwLCAweDkwMTYsIDB4NzAyYywgMHgyMTQ4LCAweGE5MDQsIDB4YTgwMiwgMHg4MjEwLCAweDI5MDAsCi0JMHg4MWZmLCAweDFkYzgsIDB4NzAyZSwgMHg3MGJjLCAweDkyMDAsIDB4NzBiZSwgMHgwODBjLCAweDgxNmYsCi0JMHgwMDJlLCAweDAwZWUsIDB4MDAwNSwgMHgwMDA2LCAweGE4N2MsIDB4MDAwNiwgMHhhODY3LCAweDAxMDMsCi0JMHgyMGE5LCAweDAwMWMsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDFkLCAweDIwYTAsCi0JMHg5MDA2LCAweDQwMDQsIDB4MDAwZSwgMHg5MDg0LCAweDAwZmYsIDB4YTg3ZSwgMHgwMDBlLCAweGE4N2EsCi0JMHhhOTgyLCAweDAwMDUsIDB4MjA3MSwgMHgxOTBlLCAweDcwMDQsIDB4MDAwMiwgMHg2YzhlLCAweDZjOGYsCi0JMHg2ZDU1LCAweDZjOGYsIDB4NmM4YywgMHg2ZDU1LCAweDA4MGMsIDB4MGRmNiwgMHgwMDA1LCAweDIwMDEsCi0JMHgxOTIzLCAweDIwMDQsIDB4MDAwMiwgMHg2Yzk5LCAweDZjOTksIDB4NmNlZSwgMHg2Y2VmLCAweDZjOTksCi0JMHg2Y2VmLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDFlMGMsIDB4NmQ3NSwgMHg3MDFjLCAweDkwNGQsCi0JMHgwMWUwLCAweGE4NGMsIDB4OTAwNSwgMHgwMWQ4LCAweDBlMDQsIDB4NmNiZCwgMHhhOTRjLCAweDIwNzEsCi0JMHgwMDAwLCAweDcxODIsIDB4YTg1MCwgMHg3MDMyLCAweGE4NmMsIDB4NzA4NiwgMHg3MDM2LCAweGE4NzAsCi0JMHg3MDhhLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCi0JMHgxMWU2LCAweDIwNzEsIDB4MTkwZSwgMHgwODBjLCAweDZkNTYsIDB4MDEyZSwgMHgwNDcwLCAweDIwMDEsCi0JMHgwMDViLCAweDIwMDQsIDB4OTA5NCwgMHgwNzgwLCAweDE5MGMsIDB4NmQ2YSwgMHhkMDljLCAweDIwNzEsCi0JMHgxOTBlLCAweDE1MTAsIDB4MjA3MSwgMHgxOTBlLCAweDcwMGYsIDB4MDAwMSwgMHhhOTY0LCAweDkxODQsCi0JMHgwMGZmLCAweDkwODYsIDB4MDAwMywgMHgxMTMwLCAweDgxMGYsIDB4OTE4YywgMHgwMGZmLCAweDgxMDEsCi0JMHgwMTA4LCAweDcxMGUsIDB4MjkwMCwgMHgwMGQ2LCAweDIwNjksIDB4MDA1MCwgMHg2ODIyLCAweDAwZGUsCi0JMHgyMDcxLCAweDE5MGUsIDB4NzAxYywgMHgyMDQ4LCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweGE4MDAsCi0JMHg3MDFlLCAweDkwMDUsIDB4MTEwOCwgMHg3MDFhLCAweDAxMmUsIDB4MDAwNSwgMHgwMDA1LCAweDAwZDYsCi0JMHgyMDA4LCAweDIwNjksIDB4MTlkNSwgMHg2ODQ0LCAweDkwMDUsIDB4MDc2MCwgMHgwMTU4LCAweDkxODYsCi0JMHgwMDAzLCAweDA1NDAsIDB4MjAwMSwgMHgxODE0LCAweDIwMDQsIDB4MjAwOSwgMHgxYWEyLCAweDIxMGMsCi0JMHg5MTAyLCAweDE1MDAsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2OSwgMHgwMDUwLCAweDY5M2MsCi0JMHg2ODM4LCAweDkxMDYsIDB4MDE5MCwgMHgwZTA0LCAweDZkMjEsIDB4MjA2OSwgMHgwMDAwLCAweDY4MzcsCi0JMHg4MDQwLCAweDY4MzMsIDB4MDAxMiwgMHg2ODgzLCAweDgwNDAsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsCi0JMHgwMDg5LCAweDIwMDQsIDB4ZDA4NCwgMHgxOTBjLCAweDExZTYsIDB4MjA2OSwgMHgxOWQ1LCAweDY4NDcsCi0JMHhmZmZmLCAweDAxMmUsIDB4MDBkZSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgxZTBjLCAweDZkZTAsCi0JMHg3MDFjLCAweDkwNGQsIDB4MDU0MCwgMHgyMDAxLCAweDAwNWIsIDB4MjAwNCwgMHg5MDk0LCAweDA3ODAsCi0JMHgxNWM5LCAweGQwOWMsIDB4MTUwMCwgMHgyMDcxLCAweDE5MGUsIDB4NzAwZiwgMHgwMDAxLCAweGE5NjQsCi0JMHg5MTg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDAzLCAweDExMzAsIDB4ODEwZiwgMHg5MThjLCAweDAwZmYsCi0JMHg4MTAxLCAweDAxMDgsIDB4NzEwZSwgMHgyOTAwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDUwLCAweDY4MjIsCi0JMHgwMGRlLCAweDcwMWMsIDB4MjA0OCwgMHg3MDEwLCAweDgwMDEsIDB4NzAxMiwgMHhhODAwLCAweDcwMWUsCi0JMHg5MDA1LCAweDExMDgsIDB4NzAxYSwgMHgwMTJlLCAweDAwMDUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDcwMWMsIDB4OTA0ZCwgMHgwMTYwLCAweDcwMTAsIDB4ODAwMSwgMHg3MDEyLCAweGE4MDAsCi0JMHg3MDFlLCAweDkwMDUsIDB4MTEwOCwgMHg3MDFhLCAweDAxMmUsIDB4MDgwYywgMHgxMDY5LCAweDAwMDUsCi0JMHgwMTJlLCAweDAwMDUsIDB4MjA5MSwgMHg4MDAwLCAweDBlMDQsIDB4NmQ2YywgMHgwMDA2LCAweDAwMTYsCi0JMHgyMDAxLCAweDgwMDQsIDB4MDAwNiwgMHgwODA0LCAweDBkZmYsIDB4MDA5NiwgMHgwMGY2LCAweDIwNzksCi0JMHgwMDUwLCAweDcwNDQsIDB4ZDA4NCwgMHgwMWQwLCAweGMwODQsIDB4NzA0NiwgMHg3ODM4LCAweDc5MzgsCi0JMHg5MTBlLCAweDFkZTAsIDB4MDBkNiwgMHgyMDY5LCAweDAwMDAsIDB4NjgzNiwgMHg2ODMzLCAweDAwMTMsCi0JMHgwMGRlLCAweDIwOTEsIDB4NDA4MCwgMHgyMDAxLCAweDAwODksIDB4MjAwNCwgMHhkMDg0LCAweDE5MGMsCi0JMHgxMWU2LCAweDcwNGIsIDB4MDAwMCwgMHgwMGZlLCAweDAwOWUsIDB4MDAwNSwgMHg3ODJjLCAweDkwOTQsCi0JMHgwNzgwLCAweDE5ODEsIDB4ZDBhNCwgMHgwZGI4LCAweDcxNDgsIDB4NzA0YywgMHg4MTA4LCAweDcxNGEsCi0JMHg5MTAyLCAweDBlODgsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4NzgyNCwgMHgwMGU2LCAweDIwNzEsCi0JMHgwMDQwLCAweDcxMmMsIDB4ZDE5YywgMHgxMTQ4LCAweDIwMDksIDB4MTgyZiwgMHgyMTBjLCAweDkxOGEsCi0JMHgwMDQwLCAweDAyMTgsIDB4NzAyMiwgMHgwMGVlLCAweDAwNTgsIDB4MDBlZSwgMHgyMDQ4LCAweDcwMmMsCi0JMHhhODAyLCAweDI5MDAsIDB4NzAyZSwgMHg3MGJjLCAweDgwMDAsIDB4NzBiZSwgMHgwODBjLCAweDgxNmYsCi0JMHg3ODJjLCAweDkwOTQsIDB4MDc4MCwgMHgxOTBjLCAweDZkNmEsIDB4ZDBhNCwgMHgxOWYwLCAweDc4MzgsCi0JMHg3OTM4LCAweDkxMGUsIDB4MWRlMCwgMHgwMGQ2LCAweDIwNjksIDB4MDAwMCwgMHg2ODM2LCAweDY4MzMsCi0JMHgwMDEzLCAweDAwZGUsIDB4MjA5MSwgMHg0MDgwLCAweDIwMDEsIDB4MDA4OSwgMHgyMDA0LCAweGQwODQsCi0JMHgxOTBjLCAweDExZTYsIDB4MDBlZSwgMHg3MDRiLCAweDAwMDAsIDB4MDBmZSwgMHgwMDllLCAweDAwMDUsCi0JMHgwMGY2LCAweDIwNzksIDB4MDA1MCwgMHg3MDQ0LCAweGQwODQsIDB4MDFiOCwgMHhjMDg0LCAweDcwNDYsCi0JMHg3ODM4LCAweDc5MzgsIDB4OTEwZSwgMHgxZGUwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDAwLCAweDY4MzYsCi0JMHg2ODMzLCAweDAwMTMsIDB4MDBkZSwgMHgyMDkxLCAweDQwODAsIDB4MjAwMSwgMHgwMDg5LCAweDIwMDQsCi0JMHhkMDg0LCAweDE5MGMsIDB4MTFlNiwgMHgwMGZlLCAweDAwMDUsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsCi0JMHgxOTBjLCAweDZkNmEsIDB4ZDBhNCwgMHgwZGI4LCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDc4MjQsCi0JMHgyMDQ4LCAweDcwMmMsIDB4YTgwMiwgMHgyOTAwLCAweDcwMmUsIDB4NzBiYywgMHg4MDAwLCAweDcwYmUsCi0JMHgwODBjLCAweDgxNmYsIDB4NzgyYywgMHg5MDk0LCAweDA3ODAsIDB4MTkwYywgMHg2ZDZhLCAweGQwYTQsCi0JMHgxZDcwLCAweDAwZDYsIDB4MjA2OSwgMHgwMDUwLCAweDY5M2MsIDB4MjA2OSwgMHgxOTIzLCAweDY4MDgsCi0JMHg2OTBhLCAweDIwNjksIDB4MTlkNSwgMHg5MTAyLCAweDExMTgsIDB4Njg0NCwgMHg5MDA1LCAweDEzMjAsCi0JMHgyMDAxLCAweDE5MjQsIDB4MjAwYywgMHg2OTQ2LCAweDAwZGUsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCi0JMHg3MDk0LCAweDkwOGEsIDB4MDAyYSwgMHgxYTBjLCAweDBkZjYsIDB4OTA4MiwgMHgwMDFkLCAweDAwMWIsCi0JMHg2MDI3LCAweDFlMDAsIDB4MDAwNSwgMHg2ZjIxLCAweDZlOGUsIDB4NmVhYSwgMHg2ZWQ0LCAweDZmMTAsCi0JMHg2ZjUwLCAweDZmNjIsIDB4NmVhYSwgMHg2ZjM4LCAweDZlNDksIDB4NmU3NywgMHg2ZWZhLCAweDZlNDgsCi0JMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMjAwLCAweDY4MDQsIDB4OTAwNSwgMHgxMTgwLCAweDY4MDgsCi0JMHg5MDA1LCAweDE1MTgsIDB4NzA5NywgMHgwMDI5LCAweDIwNjksIDB4MTk2OSwgMHgyZDA0LCAweDcwMDIsCi0JMHgwODBjLCAweDcyY2QsIDB4NjAyOCwgMHg5MDg1LCAweDA2MDAsIDB4NjAyYSwgMHgwMGIwLCAweDcwOTcsCi0JMHgwMDI5LCAweDIwNjksIDB4MTk2OSwgMHgyZDA0LCAweDcwMDIsIDB4NjAyOCwgMHg5MDg1LCAweDA2MDAsCi0JMHg2MDJhLCAweDAwZTYsIDB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MjA3MSwgMHgxYTNmLCAweDA4MGMsCi0JMHgxOTc3LCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsCi0JMHgyMDY5LCAweDAyMDAsIDB4NjgwNCwgMHg5MDA1LCAweDExNzgsIDB4NjgwOCwgMHg5MDA1LCAweDExNjAsCi0JMHg3MDk3LCAweDAwMjksIDB4MjA2OSwgMHgxOTY5LCAweDJkMDQsIDB4NzAwMiwgMHgwODBjLCAweDczNjksCi0JMHg2MDI4LCAweDkwODUsIDB4MDYwMCwgMHg2MDJhLCAweDAwZGUsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsCi0JMHgwMDkwLCAweDA4MGMsIDB4MmI2ZiwgMHgwMDBlLCAweDYxMjQsIDB4ZDFlNCwgMHgxMTkwLCAweDA4MGMsCi0JMHg2ZmNmLCAweGQxZDQsIDB4MTE2MCwgMHhkMWRjLCAweDExMzgsIDB4ZDFjYywgMHgwMTUwLCAweDcwOTcsCi0JMHgwMDIwLCAweDA4MGMsIDB4NmZjZiwgMHgwMDI4LCAweDcwOTcsIDB4MDAxZCwgMHgwMDEwLCAweDcwOTcsCi0JMHgwMDFmLCAweDAwMDUsIDB4MjAwMSwgMHgwMDg4LCAweDA4MGMsIDB4MmI2ZiwgMHg2MTI0LCAweGQxY2MsCi0JMHgxMWU4LCAweGQxZGMsIDB4MTFjMCwgMHhkMWU0LCAweDExOTgsIDB4OTE4NCwgMHgxZTAwLCAweDExZDgsCi0JMHgwODBjLCAweDE5YTQsIDB4NjBlMywgMHgwMDAxLCAweDYwMGMsIDB4YzBiNCwgMHg2MDBlLCAweDA4MGMsCi0JMHg3MWFhLCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLCAweDJiNmYsIDB4NzA5NywgMHgwMDI5LCAweDAwNTgsCi0JMHg3MDk3LCAweDAwMWUsIDB4MDA0MCwgMHg3MDk3LCAweDAwMWQsIDB4MDAyOCwgMHg3MDk3LCAweDAwMjAsCi0JMHgwMDEwLCAweDcwOTcsIDB4MDAxZiwgMHgwMDA1LCAweDA4MGMsIDB4MTlhNCwgMHg2MGUzLCAweDAwMDEsCi0JMHg2MDBjLCAweGMwYjQsIDB4NjAwZSwgMHgwODBjLCAweDcxYWEsIDB4MjAwMSwgMHgwMDgwLCAweDA4MGMsCi0JMHgyYjZmLCAweDYxMjQsIDB4ZDFkNCwgMHgxMTk4LCAweGQxZGMsIDB4MTE3MCwgMHhkMWU0LCAweDExNDgsCi0JMHg5MTg0LCAweDFlMDAsIDB4MTExOCwgMHg3MDk3LCAweDAwMjksIDB4MDA1OCwgMHg3MDk3LCAweDAwMjgsCi0JMHgwMDQwLCAweDcwOTcsIDB4MDAxZSwgMHgwMDI4LCAweDcwOTcsIDB4MDAxZCwgMHgwMDEwLCAweDcwOTcsCi0JMHgwMDFmLCAweDAwMDUsIDB4NjEyNCwgMHhkMWQ0LCAweDExODAsIDB4ZDFkYywgMHgxMTU4LCAweGQxZTQsCi0JMHgxMTMwLCAweDkxODQsIDB4MWUwMCwgMHgxMTU4LCAweDcwOTcsIDB4MDAyOSwgMHgwMDQwLCAweDcwOTcsCi0JMHgwMDFlLCAweDAwMjgsIDB4NzA5NywgMHgwMDFkLCAweDAwMTAsIDB4NzA5NywgMHgwMDFmLCAweDAwMDUsCi0JMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyYjZmLCAweDYxMjQsIDB4ZDFkYywgMHgxMTM4LCAweGQxZTQsCi0JMHgwMTM4LCAweDA4MGMsIDB4MTlhNCwgMHg3MDk3LCAweDAwMWUsIDB4MDAxMCwgMHg3MDk3LCAweDAwMWQsCi0JMHgwMDA1LCAweDA4MGMsIDB4NzA1MiwgMHg2MTI0LCAweGQxZGMsIDB4MTE4OCwgMHgwODBjLCAweDZmY2YsCi0JMHgwMDE2LCAweDA4MGMsIDB4MTlhNCwgMHgwMDFlLCAweGQxZDQsIDB4MTEyOCwgMHhkMWU0LCAweDAxMzgsCi0JMHg3MDk3LCAweDAwMWUsIDB4MDAyMCwgMHg3MDk3LCAweDAwMWYsIDB4MDgwYywgMHg2ZmNmLCAweDAwMDUsCi0JMHgwMDA2LCAweDIwMDEsIDB4MDBhMCwgMHgwODBjLCAweDJiNmYsIDB4MDAwZSwgMHg2MTI0LCAweGQxZDQsCi0JMHgxMTYwLCAweGQxY2MsIDB4MTE1MCwgMHhkMWRjLCAweDExMjgsIDB4ZDFlNCwgMHgwMTQwLCAweDcwOTcsCi0JMHgwMDFlLCAweDAwMjgsIDB4NzA5NywgMHgwMDFkLCAweDAwMTAsIDB4NzA5NywgMHgwMDIxLCAweDAwMDUsCi0JMHgwODBjLCAweDcwNTIsIDB4NjEyNCwgMHhkMWQ0LCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsCi0JMHgwMTQwLCAweDcwOTcsIDB4MDAxZSwgMHgwMDI4LCAweDcwOTcsIDB4MDAxZCwgMHgwMDEwLCAweDcwOTcsCi0JMHgwMDFmLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDAwOTAsIDB4MDgwYywgMHgyYjZmLCAweDAwMGUsCi0JMHg2MTI0LCAweGQxZDQsIDB4MTE3OCwgMHhkMWNjLCAweDExNTAsIDB4ZDFkYywgMHgxMTI4LCAweGQxZTQsCi0JMHgwMTU4LCAweDcwOTcsIDB4MDAxZSwgMHgwMDQwLCAweDcwOTcsIDB4MDAxZCwgMHgwMDI4LCAweDcwOTcsCi0JMHgwMDIwLCAweDAwMTAsIDB4NzA5NywgMHgwMDFmLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGU2LCAweDAxMjYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLCAweDE4MDAsCi0JMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHg3MTdlLCAweDExZDgsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCi0JMHhkMWI0LCAweDAxYjAsIDB4YzFiNCwgMHgyMTAyLCAweDYwMjcsIDB4MDIwMCwgMHgwODBjLCAweDJhOTcsCi0JMHg2MDI0LCAweGQwY2MsIDB4MDE0OCwgMHgyMDAxLCAweDAwYTAsIDB4MDgwYywgMHgyYjZmLCAweDA4MGMsCi0JMHg3NDdhLCAweDA4MGMsIDB4NWUyZiwgMHgwNDI4LCAweDYwMjgsIDB4YzBjZCwgMHg2MDJhLCAweDA0MDgsCi0JMHgwODBjLCAweDcxOTgsIDB4MDE1MCwgMHgwODBjLCAweDcxOGYsIDB4MTEzOCwgMHgyMDAxLCAweDAwMDEsCi0JMHgwODBjLCAweDI2MTYsIDB4MDgwYywgMHg3MTU2LCAweDAwYTAsIDB4MDgwYywgMHg3MDRmLCAweDAxNzgsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHgyNjE2LCAweDcwOTQsIDB4OTA4NiwgMHgwMDFlLCAweDAxMjAsCi0JMHg3MDk0LCAweDkwODYsIDB4MDAyMiwgMHgxMTE4LCAweDcwOTcsIDB4MDAyNSwgMHgwMDEwLCAweDcwOTcsCi0JMHgwMDIxLCAweDAxMmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwMjYsCi0JMHgyMDExLCAweDZmZTAsIDB4MDgwYywgMHg4MzJkLCAweDAwMmUsIDB4MDAxNiwgMHgwMDI2LCAweDIwMDksCi0JMHgwMDY0LCAweDIwMTEsIDB4NmZlMCwgMHgwODBjLCAweDgzMjQsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMGU2LCAweDAwZjYsIDB4MDAxNiwgMHgwODBjLCAweDk2MWEsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsCi0JMHg2ZjdkLCAweDAwMWUsIDB4MDBmZSwgMHgwMGVlLCAweDAwMDUsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDAxMjYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsCi0JMHg5NjFhLCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA5MSwgMHg4MDAwLCAweDYwMjgsCi0JMHhjMDljLCAweDYwMmEsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4OTkyMywgMHgyMDExLCAweDAwMDIsCi0JMHgwODBjLCAweDk5MmQsIDB4MDgwYywgMHg5ODNiLCAweDA4MGMsIDB4ODJkOSwgMHgwMDM2LCAweDkwMWUsCi0JMHgwODBjLCAweDk4YjEsIDB4MDAzZSwgMHg2MGUzLCAweDAwMDAsIDB4MDgwYywgMHhkYmRiLCAweDA4MGMsCi0JMHhkYmY2LCAweDIwMDksIDB4MDAwNCwgMHgwODBjLCAweDJhOWQsIDB4MDgwYywgMHgyOTc0LCAweDIwMDEsCi0JMHgxODAwLCAweDIwMDMsIDB4MDAwNCwgMHg2MDI3LCAweDAwMDgsIDB4MjAxMSwgMHg2ZmUwLCAweDA4MGMsCi0JMHg4MzJkLCAweDA4MGMsIDB4NzE5OCwgMHgwMTE4LCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDA4MGMsCi0JMHgwYjhmLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2MTYsIDB4MDEyZSwgMHgwMGZlLCAweDAwZWUsCi0JMHgwMGRlLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDI2LCAweDAwZTYsCi0JMHgyMDExLCAweDZmZWQsIDB4MjA3MSwgMHgxOWQ1LCAweDcwMWMsIDB4OTIwNiwgMHgxMTE4LCAweDcwMTgsCi0JMHg5MDA1LCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwZWUsIDB4MDAyZSwgMHgwMDA1LCAweDYwMjAsCi0JMHhkMDljLCAweDAwMDUsIDB4NjgwMCwgMHg5MDg0LCAweGZmZmUsIDB4OTA4NiwgMHgwMGMwLCAweDAxYjgsCi0JMHgyMDAxLCAweDAwYzAsIDB4MDgwYywgMHgyYjZmLCAweDAxNTYsIDB4MjBhOSwgMHgwMDJkLCAweDFkMDQsCi0JMHg3MDVmLCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LCAweDcwNWYsIDB4MDE1ZSwgMHgwMGQ2LCAweDIwNjksCi0JMHgxODAwLCAweDY4OTgsIDB4ODAwMSwgMHgwMjIwLCAweDAxMTgsIDB4Njg5YSwgMHgwMGRlLCAweDAwMDUsCi0JMHg2ODliLCAweDAwMTQsIDB4NjhlNCwgMHhkMGRjLCAweDBkYzgsIDB4NjgwMCwgMHg5MDg2LCAweDAwMDEsCi0JMHgxZGE4LCAweDA4MGMsIDB4ODMzOSwgMHgwYzkwLCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNjEsCi0JMHgwMTAwLCAweDIwNjksIDB4MDE0MCwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHg3NDg5LCAweDIwMDEsCi0JMHgxOTQ3LCAweDIwMDMsIDB4MDAwMCwgMHg5MDA2LCAweDcwOTYsIDB4NjBlMiwgMHg2ODg2LCAweDA4MGMsCi0JMHgyNmUxLCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDA4MGMsIDB4NWNlZSwgMHg2MDI3LCAweGZmZmYsCi0JMHg2MDJiLCAweDE4MmYsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLCAweDIwMDEsCi0JMHgxOTU3LCAweDIwMGMsIDB4OTE4NiwgMHgwMDAwLCAweDAxNTgsIDB4OTE4NiwgMHgwMDAxLCAweDAxNTgsCi0JMHg5MTg2LCAweDAwMDIsIDB4MDE1OCwgMHg5MTg2LCAweDAwMDMsIDB4MDE1OCwgMHgwODA0LCAweDcxNDYsCi0JMHg3MDk3LCAweDAwMjIsIDB4MDA0MCwgMHg3MDk3LCAweDAwMjEsIDB4MDAyOCwgMHg3MDk3LCAweDAwMjMsCi0JMHgwMDEwLCAweDcwOTcsIDB4MDAyNCwgMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAxLCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4MjZlMSwgMHgwMDI2LCAweDA4MGMsIDB4OWY3MCwgMHgwMDJlLCAweDcwMDAsCi0JMHg5MDhlLCAweDAwMDQsIDB4MDExOCwgMHg2MDJiLCAweDAwMjgsIDB4MDAxMCwgMHg2MDJiLCAweDAwMjAsCi0JMHgwMTU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwYTksIDB4MDAwNSwgMHg2MDI0LCAweGQwYWMsCi0JMHgwMTUwLCAweDAxMmUsIDB4MDE1ZSwgMHgwODBjLCAweGM0NTksIDB4MDExOCwgMHg5MDA2LCAweDA4MGMsCi0JMHgyYjk5LCAweDA4MDQsIDB4NzE1MiwgMHg2ODAwLCAweDkwODQsIDB4MDBhMSwgMHhjMGJkLCAweDY4MDIsCi0JMHgwODBjLCAweDJhOTcsIDB4NjkwNCwgMHhkMWQ0LCAweDExNDAsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsCi0JMHgyYjZmLCAweDFmMDQsIDB4NzBkZSwgMHgwODBjLCAweDcxZDIsIDB4MDEyZSwgMHgwMTVlLCAweDA4MGMsCi0JMHg3MThmLCAweDA1MzgsIDB4NjA0NCwgMHg5MDA1LCAweDAxZjgsIDB4MjAwMSwgMHgwMTAwLCAweDIwMDQsCi0JMHg5MDg2LCAweDAwMGEsIDB4MDE1OCwgMHgyMDExLCAweDAxMTQsIDB4MjIwNCwgMHg5MDg1LCAweDAxMDAsCi0JMHgyMDEyLCAweDYwNTAsIDB4MDAwNiwgMHg5MDg1LCAweDAwMjAsIDB4NjA1MiwgMHgwODBjLCAweDcxZDIsCi0JMHg5MDA2LCAweDgwMDEsIDB4MWRmMCwgMHgyMDAxLCAweDAxMDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMGEsCi0JMHgwMTQwLCAweDAwMGUsIDB4NjA1MiwgMHgwMDI4LCAweDY4MDQsIDB4ZDBkNCwgMHgxMTEwLCAweDA4MGMsCi0JMHg3MWQyLCAweDA4MGMsIDB4YzQ1OSwgMHgwMTE4LCAweDkwMDYsIDB4MDgwYywgMHgyYjk5LCAweDAwMTYsCi0JMHgwMDI2LCAweDcwMDAsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMzAsIDB4MjAwOSwgMHgwMGM4LCAweDIwMTEsCi0JMHg2ZmVkLCAweDA4MGMsIDB4ODJlYiwgMHgwMDJlLCAweDAwMWUsIDB4MDgwYywgMHg4MTY2LCAweDcwMzQsCi0JMHhjMDg1LCAweDcwMzYsIDB4MjAwMSwgMHgxOTU3LCAweDIwMDMsIDB4MDAwNCwgMHgwODBjLCAweDZlMzAsCi0JMHgwODBjLCAweDcxOGYsIDB4MDEzOCwgMHg2ODA0LCAweGQwZDQsIDB4MTEyMCwgMHhkMGRjLCAweDExMDAsCi0JMHgwODBjLCAweDc0N2YsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsCi0JMHg4MTdkLCAweDA4MGMsIDB4ODE2ZiwgMHgwODBjLCAweDc0ODksIDB4MjAwMSwgMHgxOTQ3LCAweDIwMDMsCi0JMHgwMDAwLCAweDkwMDYsIDB4NzA5NiwgMHg2MGUyLCAweDY4ODYsIDB4MDgwYywgMHgyNmUxLCAweDkwMDYsCi0JMHgwODBjLCAweDJiNmYsIDB4NjA0MywgMHgwMDkwLCAweDYwNDMsIDB4MDAxMCwgMHg2MDI3LCAweGZmZmYsCi0JMHg2MDJiLCAweDE4MmYsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAwNSwgMHgwMDA2LCAweDIwMDEsCi0JMHgxOTU2LCAweDIwMDQsIDB4OTA4NiwgMHhhYWFhLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDA4MGMsCi0JMHg1NGRmLCAweDkwODQsIDB4MDAzMCwgMHg5MDg2LCAweDAwMDAsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsCi0JMHgwODBjLCAweDU0ZGYsIDB4OTA4NCwgMHgwMDMwLCAweDkwODYsIDB4MDAzMCwgMHgwMDBlLCAweDAwMDUsCi0JMHgwMDA2LCAweDA4MGMsIDB4NTRkZiwgMHg5MDg0LCAweDAwMzAsIDB4OTA4NiwgMHgwMDEwLCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDgwYywgMHg1NGRmLCAweDkwODQsIDB4MDAzMCwgMHg5MDg2LCAweDAwMjAsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDAzNiwgMHgwMDE2LCAweDIwMDEsIDB4MTgwYywgMHgyMDA0LCAweDkwOGMsCi0JMHgwMDEzLCAweDAxNjgsIDB4MDAyMCwgMHgwODBjLCAweDI3MDEsIDB4OTAwZSwgMHgwMDEwLCAweDIwMDksCi0JMHgwMDAyLCAweDIwMTksIDB4MDAyOCwgMHgwODBjLCAweDMwNjAsIDB4OTAwNiwgMHgwMDE5LCAweDAwMWUsCi0JMHgwMDNlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MGMsIDB4MmUwNCwgMHgwMTMwLCAweDA4MGMsCi0JMHhjNDUyLCAweDExMjgsIDB4OTA4NSwgMHgwMDEwLCAweDAwMTAsIDB4OTA4NCwgMHhmZmVmLCAweDIwNzIsCi0JMHgwMGVlLCAweDAwMDUsIDB4NjA1MCwgMHgwMDA2LCAweDYwZWMsIDB4MDAwNiwgMHg2MDBjLCAweDAwMDYsCi0JMHg2MDA0LCAweDAwMDYsIDB4NjAyOCwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsCi0JMHgwMDBhLCAweDA1MTAsIDB4MDAxNiwgMHg2MTM4LCAweDYwNTAsIDB4OTA4NCwgMHhmYmZmLCAweDkwODUsCi0JMHgyMDAwLCAweDYwNTIsIDB4NjEzYSwgMHgyMGE5LCAweDAwMTIsIDB4MWQwNCwgMHg3MWVkLCAweDIwOTEsCi0JMHg2MDAwLCAweDFmMDQsIDB4NzFlZCwgMHg2MDJmLCAweDAxMDAsIDB4NjAyZiwgMHgwMDAwLCAweDYwNTAsCi0JMHg5MDg1LCAweDA0MDAsIDB4OTA4NCwgMHhkZmZmLCAweDYwNTIsIDB4NjEzYSwgMHgwMDFlLCAweDYwMmYsCi0JMHgwMDQwLCAweDYwMmYsIDB4MDAwMCwgMHgwMGEwLCAweDA4MGMsIDB4MmJhOSwgMHgwODBjLCAweDJiZGMsCi0JMHg2MDJmLCAweDAxMDAsIDB4NjAyZiwgMHgwMDAwLCAweDYwMmYsIDB4MDA0MCwgMHg2MDJmLCAweDAwMDAsCi0JMHgyMGE5LCAweDAwMDIsIDB4MDgwYywgMHgyYTc4LCAweDAwMjYsIDB4NjAyNywgMHgwMDQwLCAweDAwMmUsCi0JMHgwMDBlLCAweDYwMmEsIDB4MDAwZSwgMHg2MDA2LCAweDAwMGUsIDB4NjAwZSwgMHgwMDBlLCAweDYwZWUsCi0JMHg2MGUzLCAweDAwMDAsIDB4Njg4NywgMHgwMDAxLCAweDIwMDEsIDB4MDAwMSwgMHgwODBjLCAweDI2ZTEsCi0JMHgyMDAxLCAweDAwYTAsIDB4MDAwNiwgMHgwODBjLCAweGM0NTksIDB4MDAwZSwgMHgwMTMwLCAweDA4MGMsCi0JMHgyYjhkLCAweDkwMDYsIDB4MDgwYywgMHgyYjk5LCAweDAwMTAsIDB4MDgwYywgMHgyYjZmLCAweDAwMGUsCi0JMHg2MDUyLCAweDYwNTAsIDB4MDAwNiwgMHhjMGU1LCAweDYwNTIsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsCi0JMHgwODBjLCAweDI5ZjEsIDB4MDBmZSwgMHgwMDBlLCAweDYwNTIsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNjksCi0JMHgwMTQwLCAweDIwNzEsIDB4MTgwMCwgMHg2MDIwLCAweDkwODQsIDB4MDA4MCwgMHgwMTM4LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4YzFjNSwgMHgyMTAyLCAweDA4MDQsIDB4NzJiZiwgMHgyMDAxLCAweDE4MGMsCi0JMHgyMDBjLCAweGMxYzQsIDB4MjEwMiwgMHg2MDI4LCAweDkwODQsIDB4ZTFmZiwgMHg2MDJhLCAweDYwMjcsCi0JMHgwMjAwLCAweDIwMDEsIDB4MDA5MCwgMHgwODBjLCAweDJiNmYsIDB4MjBhOSwgMHgwMzY2LCAweDYwMjQsCi0JMHhkMGNjLCAweDE1MTgsIDB4MWQwNCwgMHg3MjZmLCAweDIwOTEsIDB4NjAwMCwgMHgxZjA0LCAweDcyNmYsCi0JMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg5OTIzLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweDk5MmQsCi0JMHgwODBjLCAweDk4M2IsIDB4OTAxZSwgMHgwODBjLCAweDk4YjEsIDB4MjAwMSwgMHgwMGEwLCAweDA4MGMsCi0JMHgyYjZmLCAweDA4MGMsIDB4NzQ3YSwgMHgwODBjLCAweDVlMmYsIDB4MDgwYywgMHhjNDU5LCAweDAxMTAsCi0JMHgwODBjLCAweDBkNjQsIDB4OTA4NSwgMHgwMDAxLCAweDA0ODAsIDB4MDgwYywgMHgxOWE0LCAweDYwZTMsCi0JMHgwMDAwLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDI2ZTEsIDB4NjBlMiwgMHgyMDAxLCAweDAwODAsCi0JMHgwODBjLCAweDJiNmYsIDB4MjBhOSwgMHgwMzY2LCAweDYwMjcsIDB4MWUwMCwgMHgyMDA5LCAweDFlMDAsCi0JMHgwODBjLCAweDJhOTcsIDB4NjAyNCwgMHg5MTBjLCAweDAxMzgsIDB4MWQwNCwgMHg3MmE0LCAweDIwOTEsCi0JMHg2MDAwLCAweDFmMDQsIDB4NzJhNCwgMHgwODIwLCAweDYwMjgsIDB4OTA4NSwgMHgxZTAwLCAweDYwMmEsCi0JMHg3MGIwLCAweDkwMDUsIDB4MTExOCwgMHg2ODg3LCAweDAwMDEsIDB4MDAwOCwgMHg2ODg2LCAweDA4MGMsCi0JMHhjNDU5LCAweDAxMTAsIDB4MDgwYywgMHgwZDY0LCAweDkwMDYsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMTVlLCAweDAwMDUsIDB4MDE1NiwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMDM2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDcxLCAweDE4MDAsCi0JMHg3MDAwLCAweDkwODYsIDB4MDAwMywgMHgxMTY4LCAweDIwMDEsIDB4MDIwYiwgMHgyMDA0LCAweDkwODQsCi0JMHg1NTQwLCAweDkwODYsIDB4NTU0MCwgMHgxMTI4LCAweDIwNjksIDB4MWE1NCwgMHgyZDA0LCAweDgwMDAsCi0JMHgyMDZhLCAweDIwNjksIDB4MDE0MCwgMHg2MDIwLCAweDkwODQsIDB4MDBjMCwgMHgwMTIwLCAweDY4ODQsCi0JMHg5MDA1LCAweDE5MDQsIDB4NzMzMiwgMHgyMDAxLCAweDAwODgsIDB4MDgwYywgMHgyYjZmLCAweDkwMDYsCi0JMHg2MGUyLCAweDY4ODYsIDB4MDgwYywgMHgyNmUxLCAweDIwNjksIDB4MDIwMCwgMHg2ODA0LCAweDkwMDUsCi0JMHgxMTE4LCAweDY4MDgsIDB4OTAwNSwgMHgwMWMwLCAweDYwMjgsIDB4OTA4NCwgMHhmYmZmLCAweDYwMmEsCi0JMHg2MDI3LCAweDA0MDAsIDB4MjA2OSwgMHgxOTY5LCAweDcwMDAsIDB4MjA2YSwgMHg3MDk3LCAweDAwMjYsCi0JMHg3MDAzLCAweDAwMDEsIDB4MjBhOSwgMHgwMDAyLCAweDFkMDQsIDB4NzMxNCwgMHgyMDkxLCAweDYwMDAsCi0JMHgxZjA0LCAweDczMTQsIDB4MDgwNCwgMHg3MzYxLCAweDIwNjksIDB4MDE0MCwgMHgyMGE5LCAweDAzODQsCi0JMHg2MDI3LCAweDFlMDAsIDB4MjAwOSwgMHgxZTAwLCAweDA4MGMsIDB4MmE5NywgMHg2MDI0LCAweDkxMGMsCi0JMHgwNTA4LCAweDkwODQsIDB4MWEwMCwgMHgxMWYwLCAweDFkMDQsIDB4NzMyMCwgMHgyMDkxLCAweDYwMDAsCi0JMHgxZjA0LCAweDczMjAsIDB4MjAxMSwgMHgwMDAzLCAweDA4MGMsIDB4OTkyMywgMHgyMDExLCAweDAwMDIsCi0JMHgwODBjLCAweDk5MmQsIDB4MDgwYywgMHg5ODNiLCAweDkwMWUsIDB4MDgwYywgMHg5OGIxLCAweDIwMDEsCi0JMHgwMGEwLCAweDA4MGMsIDB4MmI2ZiwgMHgwODBjLCAweDc0N2EsIDB4MDgwYywgMHg1ZTJmLCAweDkwODUsCi0JMHgwMDAxLCAweDAwYjgsIDB4MDgwYywgMHgxOWE0LCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLCAweDJiNmYsCi0JMHgyMDY5LCAweDAxNDAsIDB4NjBlMywgMHgwMDAwLCAweDcwYjAsIDB4OTAwNSwgMHgxMTE4LCAweDY4ODcsCi0JMHgwMDAxLCAweDAwMDgsIDB4Njg4NiwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHgyNmUxLCAweDYwZTIsCi0JMHg5MDA2LCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAxNWUsCi0JMHgwMDA1LCAweDAxNTYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsCi0JMHgyMDYxLCAweDAxMDAsIDB4MjA3MSwgMHgxODAwLCAweDYwMjAsIDB4OTA4NCwgMHgwMGMwLCAweDAxYzgsCi0JMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg5OTIzLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweDk5MmQsCi0JMHgwODBjLCAweDk4M2IsIDB4OTAxZSwgMHgwODBjLCAweDk4YjEsIDB4MjA2OSwgMHgwMTQwLCAweDIwMDEsCi0JMHgwMGEwLCAweDA4MGMsIDB4MmI2ZiwgMHgwODBjLCAweDc0N2EsIDB4MDgwYywgMHg1ZTJmLCAweDA4MDQsCi0JMHg3M2ZiLCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGQxYjQsIDB4MTE2MCwgMHhjMWI1LCAweDIxMDIsCi0JMHgwODBjLCAweDZmZDUsIDB4MjA2OSwgMHgwMTQwLCAweDIwMDEsIDB4MDA4MCwgMHgwODBjLCAweDJiNmYsCi0JMHg2MGUzLCAweDAwMDAsIDB4MjA2OSwgMHgwMjAwLCAweDY4MDQsIDB4OTAwNSwgMHgxMTE4LCAweDY4MDgsCi0JMHg5MDA1LCAweDAxODAsIDB4NjAyOCwgMHg5MDg0LCAweGZkZmYsIDB4NjAyYSwgMHg2MDI3LCAweDAyMDAsCi0JMHgyMDY5LCAweDE5NjksIDB4NzAwMCwgMHgyMDZhLCAweDcwOTcsIDB4MDAyNywgMHg3MDAzLCAweDAwMDEsCi0JMHgwODA0LCAweDczZmIsIDB4NjAyNywgMHgxZTAwLCAweDIwMDksIDB4MWUwMCwgMHgwODBjLCAweDJhOTcsCi0JMHg2MDI0LCAweDkxMGMsIDB4MDFjOCwgMHg5MDg0LCAweDFjMDAsIDB4MTFiMCwgMHgxZDA0LCAweDczYmEsCi0JMHgwMDA2LCAweDAwMTYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDgwYywgMHg4MWJkLCAweDAwZWUsCi0JMHgwMGRlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDBlLCAweDAwZTYsIDB4MjA3MSwgMHgxOWQ1LCAweDcwNzgsCi0JMHgwMGVlLCAweDkwMDUsIDB4MTlmOCwgMHgwMGY4LCAweDAwMjYsIDB4MjAxMSwgMHg2ZmVkLCAweDA4MGMsCi0JMHg4MjU5LCAweDIwMTEsIDB4NmZlMCwgMHgwODBjLCAweDgzMmQsIDB4MDAyZSwgMHgyMDY5LCAweDAxNDAsCi0JMHg2MGUzLCAweDAwMDAsIDB4NzBiMCwgMHg5MDA1LCAweDExMTgsIDB4Njg4NywgMHgwMDAxLCAweDAwMDgsCi0JMHg2ODg2LCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDI2ZTEsIDB4NjBlMiwgMHgyMDAxLCAweDE4MGMsCi0JMHgyMDBjLCAweGMxYjQsIDB4MjEwMiwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAxNWUsIDB4MDAwNSwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwNDYsCi0JMHgwMGM2LCAweDAwZTYsIDB4MjA2MSwgMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweGM0NTIsCi0JMHgxOTA0LCAweDc0NjgsIDB4NzEzMCwgMHhkMTg0LCAweDExNzAsIDB4MDgwYywgMHgzMWVlLCAweDAxMzgsCi0JMHhjMThkLCAweDcxMzIsIDB4MjAxMSwgMHgxODVjLCAweDIyMTQsIDB4ZDJhYywgMHgxMTIwLCAweDcwMzAsCi0JMHhkMDhjLCAweDA5MDQsIDB4NzQ2OCwgMHgyMDExLCAweDE4NWMsIDB4MjIwYywgMHgwNDM4LCAweDAwMTYsCi0JMHgyMDE5LCAweDAwMGUsIDB4MDgwYywgMHhkN2FmLCAweDAxNTYsIDB4MDBiNiwgMHgyMGE5LCAweDAwN2YsCi0JMHg5MDBlLCAweDkxODYsIDB4MDA3ZSwgMHgwMWEwLCAweDkxODYsIDB4MDA4MCwgMHgwMTg4LCAweDA4MGMsCi0JMHg2M2EzLCAweDExNzAsIDB4MjEyMCwgMHg5MDA2LCAweDAwMTYsIDB4MjAwOSwgMHgwMDBlLCAweDA4MGMsCi0JMHhkODM3LCAweDIwMDksIDB4MDAwMSwgMHgyMDExLCAweDAxMDAsIDB4MDgwYywgMHg4NDUwLCAweDAwMWUsCi0JMHg4MTA4LCAweDFmMDQsIDB4NzQzMSwgMHgwMGJlLCAweDAxNWUsIDB4MDAxZSwgMHhkMWFjLCAweDExNDgsCi0JMHgwMDE2LCAweDIwMDksIDB4MDAwMiwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHgzMDYwLCAweDAwMWUsCi0JMHgwMDc4LCAweDAxNTYsIDB4MDBiNiwgMHgyMGE5LCAweDAwN2YsIDB4OTAwZSwgMHgwODBjLCAweDYzYTMsCi0JMHgxMTEwLCAweDA4MGMsIDB4NWU0OSwgMHg4MTA4LCAweDFmMDQsIDB4NzQ1ZSwgMHgwMGJlLCAweDAxNWUsCi0JMHgwODBjLCAweDE5YTQsIDB4MDgwYywgMHg5ZjcwLCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweDVlMmYsCi0JMHgwODBjLCAweDcwOWUsIDB4MDBlZSwgMHgwMGNlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMTVlLCAweDAwMDUsIDB4MjAwMSwgMHgxOTU3LCAweDIwMDMsIDB4MDAwMSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxOTU3LCAweDIwMDMsIDB4MDAwMCwgMHgwMDA1LCAweDIwMDEsIDB4MTk1NiwgMHgyMDAzLCAweGFhYWEsCi0JMHgwMDA1LCAweDIwMDEsIDB4MTk1NiwgMHgyMDAzLCAweDAwMDAsIDB4MDAwNSwgMHgyMDcxLCAweDE4ZjgsCi0JMHg3MDAzLCAweDAwMDAsIDB4NzAwNywgMHgwMDAwLCAweDA4MGMsIDB4MTA1MCwgMHgwOTBjLCAweDBkZjYsCi0JMHhhOGFiLCAweGRjYjAsIDB4MjkwMCwgMHg3MDRlLCAweDA4MGMsIDB4MTA1MCwgMHgwOTBjLCAweDBkZjYsCi0JMHhhOGFiLCAweGRjYjAsIDB4MjkwMCwgMHg3MDUyLCAweGE4NjcsIDB4MDAwMCwgMHhhODZiLCAweDAwMDEsCi0JMHhhODlmLCAweDAwMDAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDA0MCwgMHg2ODQ4LCAweDkwMDUsCi0JMHgxMTE4LCAweDkwODUsIDB4MDAwMSwgMHgwNGIwLCAweDY4NDAsIDB4OTAwNSwgMHgwMTUwLCAweDA0YTEsCi0JMHg2YTUwLCAweDkyMDAsIDB4NzAwMiwgMHg2ODU0LCAweDkxMDEsIDB4NzAwNiwgMHg5MDA2LCAweDcwMTIsCi0JMHg3MDE2LCAweDY4NTAsIDB4NzAwMiwgMHg2ODU0LCAweDcwMDYsIDB4Njg1OCwgMHg3MDBhLCAweDY4NWMsCi0JMHg3MDBlLCAweDY4NDAsIDB4OTAwNSwgMHgxMTEwLCAweDcwMTIsIDB4NzAxNiwgMHg2ODQ4LCAweDcwMWEsCi0JMHg3MDFjLCAweDkwODUsIDB4MDA0MCwgMHg3MDFlLCAweDIwMDEsIDB4MDAxOSwgMHg3MDM2LCAweDcwMmIsCi0JMHgwMDAxLCAweDIwMDEsIDB4MDAwNCwgMHgyMDBjLCAweDkxOGMsIDB4ZmZmNywgMHg5MThkLCAweDgwMDAsCi0JMHgyMTAyLCAweDAwZDYsIDB4MjA2OSwgMHgxOGY4LCAweDY4MDcsIDB4MDAwMSwgMHgwMGRlLCAweDA4MGMsCi0JMHg3YTdjLCAweDkwMDYsIDB4MDBlZSwgMHgwMDA1LCAweDkwMGUsIDB4MDE1NiwgMHgyMGE5LCAweDAwMDYsCi0JMHg4MDAzLCAweDgxOGQsIDB4MWYwNCwgMHg3NGYwLCAweDAxNWUsIDB4MDAwNSwgMHgyMDc5LCAweDAwNDAsCi0JMHgyMDcxLCAweDE4ZjgsIDB4NzAwNCwgMHgwMDAyLCAweDc1MDYsIDB4NzUwNywgMHg3NTNmLCAweDc1OWEsCi0JMHg3NmRmLCAweDc1MDQsIDB4NzUwNCwgMHg3NzA5LCAweDA4MGMsIDB4MGRmNiwgMHgwMDA1LCAweDIwNzksCi0JMHgwMDQwLCAweDc4MmMsIDB4OTA4YywgMHgwNzgwLCAweDE5MGMsIDB4N2IwOCwgMHhkMGE0LCAweDAxZjgsCi0JMHg3ODI0LCAweDIwNDgsIDB4OTAwNiwgMHhhODAyLCAweGE4MDYsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MDhhLCAweDAwNDAsIDB4MDYxMCwgMHgwMGMwLCAweDIwMDEsIDB4MTgwMCwgMHgyMDBjLCAweDkxODYsCi0JMHgwMDAzLCAweDExNjgsIDB4NzAwNCwgMHgwMDAyLCAweDc1MmYsIDB4NzUwOSwgMHg3NTJmLCAweDc1MmQsCi0JMHg3NTJmLCAweDc1MmYsIDB4NzUyZiwgMHg3NTJmLCAweDc1MmYsIDB4MDgwYywgMHg3NTlhLCAweDc4MmMsCi0JMHhkMDljLCAweDA5MGMsIDB4N2E3YywgMHgwMDA1LCAweDkwODIsIDB4MDA1YSwgMHgxMjE4LCAweDIxMDAsCi0JMHgwMDNiLCAweDBjMTAsIDB4MDgwYywgMHg3NWQwLCAweDBjOTAsIDB4MDBlMywgMHgwOGU4LCAweDAwMDUsCi0JMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsCi0JMHg3NWYyLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsCi0JMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsCi0JMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZGMsIDB4NzVkMCwgMHg3N2UzLCAweDc1ZDAsCi0JMHg3NWQwLCAweDc1ZDAsIDB4NzVmMiwgMHg3NWQwLCAweDc1ZGMsIDB4NzgyNCwgMHg3ODY1LCAweDc4YWMsCi0JMHg3OGMwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWYyLCAweDc1ZGMsIDB4NzVkMCwgMHg3NWQwLCAweDc2YjMsCi0JMHg3OTZiLCAweDc5ODYsIDB4NzVkMCwgMHg3NWYyLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsCi0JMHg3NmE5LCAweDc5ODYsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsCi0JMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NjA2LCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsCi0JMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsIDB4N2FhYywgMHg3NWQwLCAweDc1ZDAsCi0JMHg3NWQwLCAweDc1ZDAsIDB4NzVkMCwgMHg3NjFhLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZDAsCi0JMHg3NWQwLCAweDc1ZDAsIDB4MjA3OSwgMHgwMDQwLCAweDcwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDExOTgsCi0JMHg3ODJjLCAweDA4MGMsIDB4N2FhNSwgMHhkMGE0LCAweDAxNzAsIDB4NzgyNCwgMHgyMDQ4LCAweDkwMDYsCi0JMHhhODAyLCAweGE4MDYsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4YSwgMHgwMDFhLCAweDEyMTAsCi0JMHgwMDJiLCAweDBjNTAsIDB4MDBlOSwgMHgwODBjLCAweDdhN2MsIDB4MDAwNSwgMHg3NWQwLCAweDc1ZGMsCi0JMHg3N2NmLCAweDc1ZDAsIDB4NzVkYywgMHg3NWQwLCAweDc1ZGMsIDB4NzVkYywgMHg3NWQwLCAweDc1ZGMsCi0JMHg3N2NmLCAweDc1ZGMsIDB4NzVkYywgMHg3NWRjLCAweDc1ZGMsIDB4NzVkYywgMHg3NWQwLCAweDc1ZGMsCi0JMHg3N2NmLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWRjLCAweDc1ZDAsIDB4NzVkMCwgMHg3NWQwLCAweDc1ZGMsCi0JMHgwMGU2LCAweDIwNzEsIDB4MThmOCwgMHgyMDA5LCAweDA0MDAsIDB4MDA3MSwgMHgwMGVlLCAweDAwMDUsCi0JMHgyMDA5LCAweDEwMDAsIDB4MDA0OSwgMHgwMDA1LCAweDIwMDksIDB4MjAwMCwgMHgwMDI5LCAweDAwMDUsCi0JMHgyMDA5LCAweDA4MDAsIDB4MDAwOSwgMHgwMDA1LCAweDcwMDcsIDB4MDAwMSwgMHhhODY4LCAweDkwODQsCi0JMHgwMGZmLCAweDkxMDUsIDB4YTg2YSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZhMjIsCi0JMHgwMTJlLCAweDAwMDUsIDB4YTg2NCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHgwZDA4LCAweDgwMDEsCi0JMHgxMTIwLCAweDcwMDcsIDB4MDAwMSwgMHgwODA0LCAweDc3ODgsIDB4NzAwNywgMHgwMDAzLCAweDcwMTIsCi0JMHgyOTAwLCAweDcwMTYsIDB4NzAxYSwgMHg3MDRiLCAweDc3ODgsIDB4MDAwNSwgMHhhODY0LCAweDgwMDcsCi0JMHg5MDg0LCAweDAwZmYsIDB4MDk2OCwgMHg4MDAxLCAweDExMjAsIDB4NzAwNywgMHgwMDAxLCAweDA4MDQsCi0JMHg3N2EzLCAweDcwMDcsIDB4MDAwMywgMHg3MDEyLCAweDI5MDAsIDB4NzAxNiwgMHg3MDFhLCAweDcwNGIsCi0JMHg3N2EzLCAweDAwMDUsIDB4YTg2NCwgMHg4MDA3LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDEsCi0JMHgxOTA0LCAweDc1ZDgsIDB4NzAwNywgMHgwMDAxLCAweDIwMDksIDB4MTgzMywgMHgyMTBjLCAweDgxZmYsCi0JMHgxOTA0LCAweDc2ODAsIDB4YTk5YywgMHg5MTg2LCAweDAwZmYsIDB4MDVlOCwgMHhhOTk0LCAweDkxODYsCi0JMHgwMDZmLCAweDAxODgsIDB4OTE4NiwgMHgwMDc0LCAweDE1YjAsIDB4MDAyNiwgMHgyMDExLCAweDAwMTAsCi0JMHgwODBjLCAweDY2ZWQsIDB4MDAyZSwgMHgwNTc4LCAweDAwMTYsIDB4YTk5OCwgMHgwODBjLCAweDY3MzcsCi0JMHgwMDFlLCAweDE1NDgsIDB4MDQwMCwgMHgwODBjLCAweDcxN2UsIDB4MDE0MCwgMHhhODk3LCAweDQwMDUsCi0JMHhhODliLCAweDAwMTYsIDB4MjAwMSwgMHgwMDMwLCAweDkwMGUsIDB4MDQzOCwgMHgwMDI2LCAweDIwMTEsCi0JMHg4MDA4LCAweDA4MGMsIDB4NjZlZCwgMHgwMDJlLCAweDAxYjAsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCi0JMHhhOTk4LCAweGFhYTAsIDB4YWI5YywgMHg5MThkLCAweDgwMDAsIDB4MDgwYywgMHg2NzM3LCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MTE0MCwgMHhhODk3LCAweDQwMDUsIDB4YTg5YiwgMHg0MDA5LCAweDIwMDEsCi0JMHgwMDMwLCAweDkwMGUsIDB4MDA1MCwgMHhhODY4LCAweDkwODQsIDB4MDBmZiwgMHhhODZhLCAweGE4ODMsCi0JMHgwMDAwLCAweDA4MGMsIDB4NjA2MSwgMHgxMTA4LCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHhhODY3LCAweDAxMzksIDB4YTg3YSwgMHhhOTgyLCAweDA4MGMsIDB4NmEyMiwgMHgwMTJlLCAweDBjYTAsCi0JMHhhOTk0LCAweDkxODYsIDB4MDA3MSwgMHgwOTA0LCAweDc2MmEsIDB4OTE4NiwgMHgwMDY0LCAweDA5MDQsCi0JMHg3NjJhLCAweDkxODYsIDB4MDA3YywgMHgwOTA0LCAweDc2MmEsIDB4OTE4NiwgMHgwMDI4LCAweDA5MDQsCi0JMHg3NjJhLCAweDkxODYsIDB4MDAzOCwgMHgwOTA0LCAweDc2MmEsIDB4OTE4NiwgMHgwMDc4LCAweDA5MDQsCi0JMHg3NjJhLCAweDkxODYsIDB4MDA1ZiwgMHgwOTA0LCAweDc2MmEsIDB4OTE4NiwgMHgwMDU2LCAweDA5MDQsCi0JMHg3NjJhLCAweGE4OTcsIDB4NDAwNSwgMHhhODliLCAweDAwMDEsIDB4MjAwMSwgMHgwMDMwLCAweDkwMGUsCi0JMHgwODYwLCAweGE4N2MsIDB4OTA4NCwgMHgwMGMwLCAweDkwODYsIDB4MDBjMCwgMHgxMTIwLCAweDcwMDcsCi0JMHgwMDAxLCAweDA4MDQsIDB4Nzk5ZCwgMHgyOTAwLCAweDcwMTYsIDB4NzAxYSwgMHgyMGE5LCAweDAwMDQsCi0JMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMzAsIDB4MjA5OCwgMHg3MDUwLCAweDIwNDAsCi0JMHhhMDYwLCAweDIwZTgsIDB4YTA1YywgMHg5MDgwLCAweDAwMjMsIDB4MjBhMCwgMHg0MDAzLCAweGE4ODgsCi0JMHg3MDEyLCAweDkwODIsIDB4MDQwMSwgMHgxYTA0LCAweDc1ZTAsIDB4YWFiNCwgMHg5MjhhLCAweDAwMDIsCi0JMHgxYTA0LCAweDc1ZTAsIDB4ODJmZiwgMHgxMTM4LCAweGE4YjgsIDB4YTliYywgMHg5MTA1LCAweDAxMTgsCi0JMHgyMDAxLCAweDc3NDYsIDB4MDAxOCwgMHg5MjgwLCAweDc3M2MsIDB4MjAwNSwgMHg3MDU2LCAweDcwMTAsCi0JMHg5MDE1LCAweDA5MDQsIDB4NzcyNywgMHgwODBjLCAweDEwNTAsIDB4MTExOCwgMHg3MDA3LCAweDAwMDQsCi0JMHgwMDA1LCAweDI5MDAsIDB4NzAyMiwgMHg3MDU0LCAweDIwNjAsIDB4ZTAwMCwgMHhhODY2LCAweDcwNTAsCi0JMHgyMDQwLCAweGE5NWMsIDB4ZTAwNCwgMHg5MTAwLCAweGEwNzYsIDB4YTg2MCwgMHhhMDcyLCAweGUwMDgsCi0JMHg5MjBhLCAweDEyMTAsIDB4OTAwZSwgMHgyMjAwLCAweDcxMTIsIDB4ZTIwYywgMHg4MDAzLCAweDgwMGIsCi0JMHg5Mjk2LCAweDAwMDQsIDB4MDEwOCwgMHg5MTA4LCAweGExN2EsIDB4ODEwYiwgMHhhMTdlLCAweDA4MGMsCi0JMHgxMTM0LCAweGEwNmMsIDB4OTA4ZSwgMHgwMTAwLCAweDAxNzAsIDB4OTA4NiwgMHgwMjAwLCAweDAxMTgsCi0JMHg3MDA3LCAweDAwMDcsIDB4MDAwNSwgMHg3MDIwLCAweDIwNDgsIDB4MDgwYywgMHgxMDY5LCAweDcwMTQsCi0JMHgyMDQ4LCAweDA4MDQsIDB4NzVlMCwgMHg3MDIwLCAweDIwNDgsIDB4NzAxOCwgMHhhODAyLCAweGE4MDcsCi0JMHgwMDAwLCAweDI5MDgsIDB4MjA0OCwgMHhhOTA2LCAweDcxMWEsIDB4MDgwNCwgMHg3NmRmLCAweDcwMTQsCi0JMHgyMDQ4LCAweDcwMDcsIDB4MDAwMSwgMHhhOGI0LCAweDkwMDUsIDB4MTEyOCwgMHhhOGI4LCAweGE5YmMsCi0JMHg5MTA1LCAweDAxMDgsIDB4MDBiOSwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMWUsCi0JMHgwOTA0LCAweDc5OWQsIDB4MDgwNCwgMHg3Nzg4LCAweDc3M2UsIDB4Nzc0MiwgMHgwMDAyLCAweDAwMWQsCi0JMHgwMDA3LCAweDAwMDQsIDB4MDAwYSwgMHgwMDFiLCAweDAwMDUsIDB4MDAwNiwgMHgwMDBhLCAweDAwMWQsCi0JMHgwMDA1LCAweDAwMDQsIDB4MDA3NiwgMHgwMDY2LCAweGFmYjgsIDB4YWViYywgMHhhODA0LCAweDIwNTAsCi0JMHhiMGMwLCAweGIwZTIsIDB4YjBiYywgMHhiMGRlLCAweGIwYjgsIDB4YjBkMiwgMHhiMGI0LCAweGIwY2UsCi0JMHhiNmRhLCAweGI3ZDYsIDB4YjBiMCwgMHhiMGNhLCAweGIwYWMsIDB4YjBjNiwgMHhiMGE4LCAweGIwYmEsCi0JMHhiMGE0LCAweGIwYjYsIDB4YjZjMiwgMHhiN2JlLCAweGIwYTAsIDB4YjBiMiwgMHhiMDljLCAweGIwYWUsCi0JMHhiMDk4LCAweGIwYTIsIDB4YjA5NCwgMHhiMDllLCAweGI2YWEsIDB4YjdhNiwgMHhiMDkwLCAweGIwOWEsCi0JMHhiMDhjLCAweGIwOTYsIDB4YjA4OCwgMHhiMDhhLCAweGIwODQsIDB4YjA4NiwgMHhiNjkyLCAweGI3OGUsCi0JMHhiMDgwLCAweGIwODIsIDB4YjA3YywgMHhiMDdlLCAweGIwNzgsIDB4YjA3MiwgMHhiMDc0LCAweGIwNmUsCi0JMHhiNjdhLCAweGI3NzYsIDB4YjAwNCwgMHg5MDU1LCAweDE5NTgsIDB4MDA2ZSwgMHgwMDdlLCAweDAwMDUsCi0JMHgyMDA5LCAweDE4MzMsIDB4MjEwYywgMHg4MWZmLCAweDExNzgsIDB4MDgwYywgMHg1ZWFiLCAweDExMDgsCi0JMHgwMDA1LCAweDA4MGMsIDB4NmM2YiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGMwNDQsCi0JMHgwODBjLCAweDZhMjIsIDB4MDEyZSwgMHgwY2EwLCAweDA4MGMsIDB4YzQ1MiwgMHgxZDcwLCAweDIwMDEsCi0JMHgwMDI4LCAweDkwMGUsIDB4MGM3MCwgMHgwNDE5LCAweDExZDgsIDB4YTg4OCwgMHg5MDA1LCAweDAxZTAsCi0JMHhhODgzLCAweDAwMDAsIDB4YTg3YywgMHhkMGY0LCAweDAxMjAsIDB4MDgwYywgMHg1ZmMzLCAweDExMzgsCi0JMHgwMDA1LCAweDkwMDYsIDB4YTg3YSwgMHgwODBjLCAweDVmM2IsIDB4MTEwOCwgMHgwMDA1LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4YTg3YSwgMHhhOTgyLCAweDA4MGMsIDB4NmEyMiwgMHgwMTJlLCAweDBjYjAsCi0JMHgyMDAxLCAweDAwMjgsIDB4OTAwZSwgMHgwYzk4LCAweDIwMDEsIDB4MDAwMCwgMHgwYzgwLCAweDAwYzYsCi0JMHgyMDYxLCAweDE4MDAsIDB4NjBjYywgMHg5MDA1LCAweDAxMDAsIDB4MDBjZSwgMHgwMDA1LCAweDcwMTgsCi0JMHhhODAyLCAweDI5MDgsIDB4MjA0OCwgMHhhOTA2LCAweDcxMWEsIDB4NzAxMCwgMHg4MDAxLCAweDcwMTIsCi0JMHgwMTE4LCAweDcwMDcsIDB4MDAwMywgMHgwMDMwLCAweDcwMTQsIDB4MjA0OCwgMHg3MDA3LCAweDAwMDEsCi0JMHg3MDQ4LCAweDA4MGYsIDB4MDAwNSwgMHgwMGI2LCAweDcwMDcsIDB4MDAwMSwgMHhhOTc0LCAweGE4NzgsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA5NiwgMHgwMDA0LCAweDA1NDAsIDB4MjBhOSwgMHgwMDAxLCAweDkwOTYsCi0JMHgwMDAxLCAweDAxOTAsIDB4OTAwZSwgMHgyMGE5LCAweDA4MDAsIDB4OTA5NiwgMHgwMDAyLCAweDAxNjAsCi0JMHg5MDA1LCAweDExZDgsIDB4YTk3NCwgMHgwODBjLCAweDYzYTMsIDB4MTFiOCwgMHgwMDY2LCAweGFlODAsCi0JMHgwODBjLCAweDY0YjMsIDB4MDA2ZSwgMHgwMDg4LCAweDAwNDYsIDB4MjAxMSwgMHgxODBjLCAweDIyMjQsCi0JMHhjNDg0LCAweDI0MTIsIDB4MDA0ZSwgMHgwMGM2LCAweDA4MGMsIDB4NjNhMywgMHgxMTEwLCAweDA4MGMsCi0JMHg2NWIzLCAweDgxMDgsIDB4MWYwNCwgMHg3ODBjLCAweDAwY2UsIDB4YTg3YywgMHhkMDg0LCAweDExMjAsCi0JMHgwODBjLCAweDEwNjksIDB4MDBiZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg2YTIyLCAweDAxMmUsIDB4MDBiZSwgMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsCi0JMHgwMDAxLCAweDA4MGMsIDB4NjZjNSwgMHgwNTgwLCAweDIwNjEsIDB4MWE0YywgMHg2MTAwLCAweGQxODQsCi0JMHgwMTc4LCAweGE4ODgsIDB4OTA4NCwgMHgwMGZmLCAweDE1NTAsIDB4NjAwMCwgMHhkMDg0LCAweDA1MjAsCi0JMHg2MDA0LCAweDkwMDUsIDB4MTUzOCwgMHg2MDAzLCAweDAwMDAsIDB4NjAwYiwgMHgwMDAwLCAweDAwYzgsCi0JMHgyMDExLCAweDAwMDEsIDB4YTg5MCwgMHg5MDA1LCAweDExMTAsIDB4MjAwMSwgMHgwMDFlLCAweDgwMDAsCi0JMHg2MDE2LCAweGE4ODgsIDB4OTA4NCwgMHgwMGZmLCAweDAxNzgsIDB4NjAwNiwgMHhhODg4LCAweDgwMDcsCi0JMHg5MDg0LCAweDAwZmYsIDB4MDE0OCwgMHg2MDBhLCAweGE4ODgsIDB4ODAwMCwgMHgxMTA4LCAweGMyOGQsCi0JMHg2MjAyLCAweDAxMmUsIDB4MDgwNCwgMHg3YTY2LCAweDAxMmUsIDB4MDgwNCwgMHg3YTYwLCAweDAxMmUsCi0JMHgwODA0LCAweDdhNWEsIDB4MDEyZSwgMHgwODA0LCAweDdhNWQsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHg3MDA3LCAweDAwMDEsIDB4MDgwYywgMHg2NmM1LCAweDA1ZTAsIDB4MjA2MSwgMHgxYTRjLCAweDYwMDAsCi0JMHhkMDg0LCAweDA1YjgsIDB4NjIwNCwgMHg2MzA4LCAweGQwOGMsIDB4MTUzMCwgMHhhYzc4LCAweDk0ODQsCi0JMHgwMDAzLCAweDAxNzAsIDB4YTk4OCwgMHg5MThjLCAweDAwZmYsIDB4ODAwMSwgMHgxMTIwLCAweDIxMDAsCi0JMHg5MjEwLCAweDA2MjAsIDB4MDAyOCwgMHg4MDAxLCAweDE1MDgsIDB4MjEwMCwgMHg5MjEyLCAweDAyZjAsCi0JMHg5NDg0LCAweDAwMGMsIDB4MDE4OCwgMHhhOTg4LCAweDgxMGYsIDB4OTE4YywgMHgwMGZmLCAweDkwODIsCi0JMHgwMDA0LCAweDExMjAsIDB4MjEwMCwgMHg5MzE4LCAweDAyODgsIDB4MDAzMCwgMHg5MDgyLCAweDAwMDQsCi0JMHgxMTY4LCAweDIxMDAsIDB4OTMxYSwgMHgwMjUwLCAweGE4OTAsIDB4OTAwNSwgMHgwMTEwLCAweDgwMDAsCi0JMHg2MDE2LCAweDYyMDYsIDB4NjMwYSwgMHgwMTJlLCAweDA4MDQsIDB4N2E2NiwgMHgwMTJlLCAweDA4MDQsCi0JMHg3YTYzLCAweDAxMmUsIDB4MDgwNCwgMHg3YTYwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMDcsCi0JMHgwMDAxLCAweDIwNjEsIDB4MWE0YywgMHg2MzAwLCAweGQzOGMsIDB4MTEyMCwgMHg2MzA4LCAweDgzMTgsCi0JMHgwMjIwLCAweDYzMGEsIDB4MDEyZSwgMHgwODA0LCAweDdhNzQsIDB4MDEyZSwgMHgwODA0LCAweDdhNjMsCi0JMHgwMGI2LCAweDAxMjYsIDB4MDBjNiwgMHgyMDkxLCAweDgwMDAsIDB4NzAwNywgMHgwMDAxLCAweGE4N2MsCi0JMHhkMGFjLCAweDAxNDgsIDB4MDBjNiwgMHgyMDYxLCAweDFhNGMsIDB4NjAwMCwgMHg5MDg0LCAweGZjZmYsCi0JMHg2MDAyLCAweDAwY2UsIDB4MDQ0MCwgMHhhODg4LCAweDkwMDUsIDB4MDVkOCwgMHhhODhjLCAweDkwNjUsCi0JMHgwNTk4LCAweDIwMDEsIDB4MTgzMywgMHgyMDA0LCAweDkwMDUsIDB4MDExOCwgMHgwODBjLCAweGEwMWMsCi0JMHgwMDY4LCAweDYwMTcsIDB4ZjQwMCwgMHg2MDViLCAweDAwMDAsIDB4YTk3YywgMHhkMWE0LCAweDAxMTAsCi0JMHhhOTgwLCAweDYxNWEsIDB4MjAwOSwgMHgwMDQxLCAweDA4MGMsIDB4YTA2OCwgMHhhOTg4LCAweDkxOGMsCi0JMHhmZjAwLCAweDkxODYsIDB4MjAwMCwgMHgxMTM4LCAweDAwMjYsIDB4OTAwZSwgMHgyMDExLCAweGZkZmYsCi0JMHgwODBjLCAweDg0NTAsIDB4MDAyZSwgMHhhODdjLCAweGQwYzQsIDB4MDE0OCwgMHgyMDYxLCAweDFhNGMsCi0JMHg2MDAwLCAweGQwOGMsIDB4MTEyMCwgMHg2MDA4LCAweDgwMDAsIDB4MDIwOCwgMHg2MDBhLCAweDAwY2UsCi0JMHgwMTJlLCAweDAwYmUsIDB4MDgwNCwgMHg3YTY2LCAweDAwY2UsIDB4MDEyZSwgMHgwMGJlLCAweDA4MDQsCi0JMHg3YTYwLCAweGE5ODQsIDB4OTE4NiwgMHgwMDJlLCAweDBkMzAsIDB4OTE4NiwgMHgwMDJkLCAweDBkMTgsCi0JMHg5MTg2LCAweDAwNDUsIDB4MDUxMCwgMHg5MTg2LCAweDAwMmEsIDB4MTEzMCwgMHgyMDAxLCAweDE4MGMsCi0JMHgyMDBjLCAweGMxOTQsIDB4MjEwMiwgMHgwOGI4LCAweDkxODYsIDB4MDAyMCwgMHgwMTU4LCAweDkxODYsCi0JMHgwMDI5LCAweDFkMTAsIDB4YTk3NCwgMHgwODBjLCAweDYzYTMsIDB4MTk2OCwgMHhiODAwLCAweGMwZTQsCi0JMHhiODAyLCAweDA4NDgsIDB4YTg4YywgMHg5MDY1LCAweDA5YjgsIDB4NjAwNywgMHgwMDI0LCAweDIwMDEsCi0JMHgxOTYwLCAweDIwMDQsIDB4NjAxYSwgMHgwODA0LCAweDc4ZmIsIDB4YTg4YywgMHg5MDY1LCAweDA5NjAsCi0JMHgwMGU2LCAweGE4OTAsIDB4OTA3NSwgMHgyMDAxLCAweDE4MzMsIDB4MjAwNCwgMHg5MDA1LCAweDAxNTAsCi0JMHgwODBjLCAweGEwMWMsIDB4OGVmZiwgMHgwMTE4LCAweDJlNjAsIDB4MDgwYywgMHhhMDFjLCAweDAwZWUsCi0JMHgwODA0LCAweDc4ZmIsIDB4NjAyNCwgMHhjMGRjLCAweGMwZDUsIDB4NjAyNiwgMHgyZTYwLCAweDYwMDcsCi0JMHgwMDNhLCAweGE4YTAsIDB4OTAwNSwgMHgwMTMwLCAweDYwMDcsIDB4MDAzYiwgMHhhOGE0LCAweDYwMmUsCi0JMHhhOGE4LCAweDYwMTYsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsCi0JMHgwMGVlLCAweDA4MDQsIDB4NzhmYiwgMHgyMDYxLCAweDFhNGMsIDB4NjAwMCwgMHhkMDg0LCAweDAxOTAsCi0JMHhkMDhjLCAweDE5MDQsIDB4N2E3NCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MjA0LCAweDgyMTAsCi0JMHgwMjIwLCAweDYyMDYsIDB4MDEyZSwgMHgwODA0LCAweDdhNzQsIDB4MDEyZSwgMHhhODgzLCAweDAwMTYsCi0JMHgwODA0LCAweDdhNmQsIDB4YTg4MywgMHgwMDA3LCAweDA4MDQsIDB4N2E2ZCwgMHhhODY0LCAweDgwMDcsCi0JMHg5MDg0LCAweDAwZmYsIDB4MDEzMCwgMHg4MDAxLCAweDExMzgsIDB4NzAwNywgMHgwMDAxLCAweDAwNjksCi0JMHgwMDA1LCAweDA4MGMsIDB4NzVkOCwgMHgwMDQwLCAweDcwMDcsIDB4MDAwMywgMHg3MDEyLCAweDI5MDAsCi0JMHg3MDE2LCAweDcwMWEsIDB4NzA0YiwgMHg3OTlkLCAweDAwMDUsIDB4MDBiNiwgMHgwMGU2LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4OTAzZSwgMHgyMDYxLCAweDE4MDAsIDB4NjFjYywgMHg4MWZmLCAweDE5MDQsCi0JMHg3YTFmLCAweDYxMzAsIDB4ZDE5NCwgMHgxOTA0LCAweDdhNDksIDB4YTg3OCwgMHgyMDcwLCAweDllODIsCi0JMHgxY2QwLCAweDBhMDQsIDB4N2ExMywgMHg2MDY0LCAweDllMDIsIDB4MWEwNCwgMHg3YTEzLCAweDcxMjAsCi0JMHg5MTg2LCAweDAwMDYsIDB4MTkwNCwgMHg3YTA1LCAweDcwMTAsIDB4OTA1ZCwgMHgwOTA0LCAweDdhMWYsCi0JMHhiODAwLCAweGQwZTQsIDB4MTkwNCwgMHg3YTQzLCAweDIwNjEsIDB4MWE0YywgMHg2MTAwLCAweDkxODQsCi0JMHgwMzAxLCAweDkwODYsIDB4MDAwMSwgMHgxNWEwLCAweDcwMjQsIDB4ZDBkYywgMHgxOTA0LCAweDdhNGMsCi0JMHhhODgzLCAweDAwMDAsIDB4YTgwMywgMHgwMDAwLCAweDI5MDgsIDB4NzAxNCwgMHg5MDA1LCAweDExOTgsCi0JMHg3MTE2LCAweGE4N2MsIDB4ZDBmNCwgMHgxOTA0LCAweDdhNGYsIDB4MDgwYywgMHg1NGRiLCAweGQwOWMsCi0JMHgxMTE4LCAweGE4N2MsIDB4YzBjYywgMHhhODdlLCAweDJlNjAsIDB4MDgwYywgMHg4MzcwLCAweDAxMmUsCi0JMHgwMGVlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDQ4LCAweGE4MDAsIDB4OTAwNSwgMHgxZGUwLCAweGE5MDIsCi0JMHgyMTQ4LCAweGE4N2MsIDB4ZDBmNCwgMHgxOTA0LCAweDdhNGYsIDB4MDEyZSwgMHgwMGVlLCAweDAwYmUsCi0JMHgwMDA1LCAweDAxMmUsIDB4MDBlZSwgMHhhODgzLCAweDAwMDYsIDB4MDBiZSwgMHgwODA0LCAweDdhNmQsCi0JMHhkMTg0LCAweDBkYjgsIDB4ZDFjNCwgMHgxMTkwLCAweDAwYTAsIDB4YTk3NCwgMHgwODBjLCAweDYzYTMsCi0JMHgxNWQwLCAweGI4MDAsIDB4ZDBlNCwgMHgxNWI4LCAweDcxMjAsIDB4OTE4NiwgMHgwMDA3LCAweDExMTgsCi0JMHhhODgzLCAweDAwMDIsIDB4MDQ5MCwgMHhhODgzLCAweDAwMDgsIDB4MDQ3OCwgMHhhODgzLCAweDAwMGUsCi0JMHgwNDYwLCAweGE4ODMsIDB4MDAxNywgMHgwNDQ4LCAweGE4ODMsIDB4MDAzNSwgMHgwNDMwLCAweDA4MGMsCi0JMHg1NGRmLCAweGQwZmMsIDB4MDFlOCwgMHhhODc4LCAweDIwNzAsIDB4OWU4MiwgMHgxY2QwLCAweDAyYzAsCi0JMHg2MDY0LCAweDllMDIsIDB4MTJhOCwgMHg3MTIwLCAweDkxODYsIDB4MDAwNiwgMHgxMTg4LCAweDcwMTAsCi0JMHg5MDVkLCAweDAxNzAsIDB4YjgwMCwgMHhkMGJjLCAweDAxNTgsIDB4MjAzOSwgMHgwMDAxLCAweDcwMDAsCi0JMHg5MDg2LCAweDAwMDcsIDB4MTkwNCwgMHg3OWE5LCAweDcwMDMsIDB4MDAwMiwgMHgwODA0LCAweDc5YTksCi0JMHhhODgzLCAweDAwMjgsIDB4MDAxMCwgMHhhODgzLCAweDAwMjksIDB4MDEyZSwgMHgwMGVlLCAweDAwYmUsCi0JMHgwNDIwLCAweGE4ODMsIDB4MDAyYSwgMHgwY2M4LCAweGE4ODMsIDB4MDA0NSwgMHgwY2IwLCAweDJlNjAsCi0JMHgyMDE5LCAweDAwMDIsIDB4NjAxYiwgMHgwMDE0LCAweDA4MGMsIDB4ZDM4ZiwgMHgwMTJlLCAweDAwZWUsCi0JMHgwMGJlLCAweDAwMDUsIDB4MjAwOSwgMHgwMDNlLCAweDAwNTgsIDB4MjAwOSwgMHgwMDA0LCAweDAwNDAsCi0JMHgyMDA5LCAweDAwMDYsIDB4MDAyOCwgMHgyMDA5LCAweDAwMTYsIDB4MDAxMCwgMHgyMDA5LCAweDAwMDEsCi0JMHhhODg0LCAweDkwODQsIDB4ZmYwMCwgMHg5MTA1LCAweGE4ODYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwODBjLCAweDZhMjIsIDB4MDEyZSwgMHgwMDA1LCAweDA4MGMsIDB4MTA2OSwgMHgwMDA1LCAweDAwZDYsCi0JMHgwODBjLCAweDgzNjcsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBlNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNzEsIDB4MDA0MCwgMHg3MDJjLCAweGQwODQsIDB4MDFkOCwgMHg5MDhjLCAweDA3ODAsCi0JMHgxOTBjLCAweDdiMDgsIDB4ZDA5YywgMHgxMWE4LCAweDIwNzEsIDB4MTgwMCwgMHg3MGJjLCAweDkwZWEsCi0JMHgwMDQwLCAweDAyNzgsIDB4ODAwMSwgMHg3MGJlLCAweDcwMmMsIDB4MjA0OCwgMHhhODAwLCAweDcwMmUsCi0JMHg5MDA2LCAweGE4MDIsIDB4YTgwNiwgMHgyMDcxLCAweDAwNDAsIDB4MjkwMCwgMHg3MDIyLCAweDcwMmMsCi0JMHgwYzI4LCAweDAxMmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwMDUsIDB4MDAwNiwgMHg5MDg0LCAweDA3ODAsCi0JMHgxOTBjLCAweDdiMDgsIDB4MDAwZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBjNiwgMHgwMDM2LCAweDAwMjYsCi0JMHgwMDE2LCAweDAwYjYsIDB4NzAwNywgMHgwMDAxLCAweGFhNzQsIDB4OTI4MiwgMHgwMDA0LCAweDFhMDQsCi0JMHg3YWY5LCAweGE5N2MsIDB4OTE4OCwgMHgxMDAwLCAweDIxMDQsIDB4OTA1ZCwgMHhiODA0LCAweGQyODQsCi0JMHgwMTQwLCAweDA1ZTgsIDB4ODAwNywgMHg5MDg0LCAweDAwZmYsIDB4OTA4NCwgMHgwMDA2LCAweDExMDgsCi0JMHgwNGIwLCAweDJiMTAsIDB4MDgwYywgMHg5Zjk0LCAweDExMTgsIDB4MDgwYywgMHhhMDNiLCAweDA1YTgsCi0JMHg2MjEyLCAweGE4NzQsIDB4MDAwMiwgMHg3YWQ3LCAweDdhZGMsIDB4N2FkZiwgMHg3YWU1LCAweDIwMTksCi0JMHgwMDAyLCAweDA4MGMsIDB4ZDdhZiwgMHgwMDYwLCAweDA4MGMsIDB4ZDc0NiwgMHgwMDQ4LCAweDIwMTksCi0JMHgwMDAyLCAweGE5ODAsIDB4MDgwYywgMHhkNzYxLCAweDAwMTgsIDB4YTk4MCwgMHgwODBjLCAweGQ3NDYsCi0JMHgwODBjLCAweDlmZWEsIDB4YTg4NywgMHgwMDAwLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg2YTIyLCAweDAxMmUsIDB4MDBiZSwgMHgwMDFlLCAweDAwMmUsIDB4MDAzZSwgMHgwMGNlLCAweDAwZGUsCi0JMHgwMDA1LCAweGE4ODcsIDB4MDAwNiwgMHgwYzgwLCAweGE4ODcsIDB4MDAwMiwgMHgwYzY4LCAweGE4ODcsCi0JMHgwMDA1LCAweDBjNTAsIDB4YTg4NywgMHgwMDA0LCAweDBjMzgsIDB4YTg4NywgMHgwMDA3LCAweDBjMjAsCi0JMHgyMDkxLCAweDgwMDAsIDB4MGUwNCwgMHg3YjBhLCAweDAwMDYsIDB4MDAxNiwgMHgyMDAxLCAweDgwMDMsCi0JMHgwMDA2LCAweDA4MDQsIDB4MGRmZiwgMHgyMDAxLCAweDE4MzMsIDB4MjAwNCwgMHg5MDA1LCAweDAwMDUsCi0JMHgwMDA1LCAweDAwZjYsIDB4MjA3OSwgMHgwMzAwLCAweDIwMDEsIDB4MDIwMCwgMHgyMDBjLCAweGMxZTUsCi0JMHhjMWRjLCAweDIxMDIsIDB4MjAwOSwgMHgwMjE4LCAweDIxMGMsIDB4ZDFlYywgMHgxMTIwLCAweDA4MGMsCi0JMHgxNTBmLCAweDAwZmUsIDB4MDAwNSwgMHgyMDAxLCAweDAyMGQsIDB4MjAwMywgMHgwMDIwLCAweDc4MWYsCi0JMHgwMzAwLCAweDAwZmUsIDB4MDAwNSwgMHg3ODFjLCAweGQwOGMsIDB4MDkwNCwgMHg3YjhhLCAweDY4YmMsCi0JMHg5MGFhLCAweDAwMDUsIDB4MGEwNCwgMHg4MTY2LCAweDdkNDQsIDB4N2M0MCwgMHg5NTg0LCAweDAwZjYsCi0JMHgxNTEwLCAweDk0ODQsIDB4NzAwMCwgMHgwMTQwLCAweDkwOGEsIDB4MjAwMCwgMHgxMjYwLCAweDk1ODQsCi0JMHgwNzAwLCAweDgwMDcsIDB4MDgwNCwgMHg3YjkxLCAweDcwMDAsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsCi0JMHg4MTAwLCAweDBkYTgsIDB4MDBiMCwgMHg5NDg0LCAweDBmZmYsIDB4MTEzMCwgMHg3MDAwLCAweDkwODQsCi0JMHhmZjAwLCAweDkwODYsIDB4ODEwMCwgMHgxMWMwLCAweDA4MGMsIDB4ZGJiMywgMHgwODBjLCAweDgwOWIsCi0JMHg3ODE3LCAweDAxNDAsIDB4MDBhOCwgMHg5NTg0LCAweDAwNzYsIDB4MTExOCwgMHgwODBjLCAweDgwZjksCi0JMHgxOWMwLCAweGQ1YTQsIDB4MDE0OCwgMHgwMDQ2LCAweDAwNTYsIDB4MDgwYywgMHg3YmVjLCAweDA4MGMsCi0JMHgyMTY1LCAweDAwNWUsIDB4MDA0ZSwgMHgwMDIwLCAweDA4MGMsIDB4ZGJiMywgMHg3ODE3LCAweDAxNDAsCi0JMHgwODBjLCAweDcxN2UsIDB4MDE2OCwgMHgyMDAxLCAweDAxMTEsIDB4MjAwNCwgMHhkMDhjLCAweDAxNDAsCi0JMHg2ODhmLCAweDAwMDAsIDB4MjAwMSwgMHgwMTEwLCAweDIwMDMsIDB4MDAwOCwgMHgyMDAzLCAweDAwMDAsCi0JMHgwODBjLCAweDdiY2QsIDB4MjAwMSwgMHgxOWNiLCAweDIwMDQsIDB4OTAwNSwgMHgwOTBjLCAweDhiOGYsCi0JMHgwMDA1LCAweDAwMDIsIDB4N2JhMywgMHg3ZWEzLCAweDdiOWEsIDB4N2I5YSwgMHg3YjlhLCAweDdiOWEsCi0JMHg3YjlhLCAweDdiOWEsIDB4NzgxNywgMHgwMTQwLCAweDIwMDEsIDB4MTljYiwgMHgyMDA0LCAweDkwMDUsCi0JMHgwOTBjLCAweDhiOGYsIDB4MDAwNSwgMHg3MDAwLCAweDkwOGMsIDB4ZmYwMCwgMHg5MTk0LCAweGYwMDAsCi0JMHg4MTBmLCAweDk0ODQsIDB4MGZmZiwgMHg2ODhlLCAweDkyODYsIDB4MjAwMCwgMHgxMTUwLCAweDY4MDAsCi0JMHg5MDg2LCAweDAwMDEsIDB4MTExOCwgMHgwODBjLCAweDU1NDUsIDB4MDA3MCwgMHgwODBjLCAweDdjMGMsCi0JMHgwMDU4LCAweDkyODYsIDB4MzAwMCwgMHgxMTE4LCAweDA4MGMsIDB4N2RkYiwgMHgwMDI4LCAweDkyODYsCi0JMHg4MDAwLCAweDExMTAsIDB4MDgwYywgMHg3ZmMyLCAweDc4MTcsIDB4MDE0MCwgMHgyMDAxLCAweDE5Y2IsCi0JMHgyMDA0LCAweDkwMDUsIDB4MDkwYywgMHg4YjhmLCAweDAwMDUsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsCi0JMHhkMDhjLCAweDAxNzgsIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAzLCAweDExNDgsCi0JMHgwMDI2LCAweDAwMzYsIDB4MjAxMSwgMHg4MDQ4LCAweDI1MTgsIDB4MDgwYywgMHg0YTE3LCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMDUsIDB4MDAzNiwgMHgwMDQ2LCAweDAwNTYsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsCi0JMHgyMDE5LCAweGZmZmUsIDB4N2MzMCwgMHgwMDUwLCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwZjYsCi0JMHgyMDc5LCAweDAyMDAsIDB4N2Q0NCwgMHg3YzQwLCAweDIwMTksIDB4ZmZmZiwgMHgyMDAxLCAweDE4MTAsCi0JMHgyMDA0LCAweGQwOGMsIDB4MDE2MCwgMHgyMDAxLCAweDE4MDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDMsCi0JMHgxMTMwLCAweDAwMjYsIDB4MjAxMSwgMHg4MDQ4LCAweDA4MGMsIDB4NGExNywgMHgwMDJlLCAweDAwZmUsCi0JMHgwMDVlLCAweDAwNGUsIDB4MDAzZSwgMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHg3MDEwLCAweDkwODQsCi0JMHhmZjAwLCAweDgwMDcsIDB4OTA5NiwgMHgwMDAxLCAweDAxMjAsIDB4OTA5NiwgMHgwMDIzLCAweDE5MDQsCi0JMHg3ZGFjLCAweDkxODYsIDB4MDAyMywgMHgxNWMwLCAweDA4MGMsIDB4ODA2MCwgMHgwOTA0LCAweDdkYWMsCi0JMHg2MTIwLCAweDkxODYsIDB4MDAwMSwgMHgwMTUwLCAweDkxODYsIDB4MDAwNCwgMHgwMTM4LCAweDkxODYsCi0JMHgwMDA4LCAweDAxMjAsIDB4OTE4NiwgMHgwMDBhLCAweDE5MDQsIDB4N2RhYywgMHg3MTI0LCAweDYxMGEsCi0JMHg3MDMwLCAweDkwOGUsIDB4MDIwMCwgMHgxMTMwLCAweDIwMDksIDB4MDAxNSwgMHgwODBjLCAweGEwNjgsCi0JMHgwODA0LCAweDdkYWMsIDB4OTA4ZSwgMHgwMjE0LCAweDAxMTgsIDB4OTA4ZSwgMHgwMjEwLCAweDExMzAsCi0JMHgyMDA5LCAweDAwMTUsIDB4MDgwYywgMHhhMDY4LCAweDA4MDQsIDB4N2RhYywgMHg5MDhlLCAweDAxMDAsCi0JMHgxOTA0LCAweDdkYWMsIDB4NzAzNCwgMHg5MDA1LCAweDE5MDQsIDB4N2RhYywgMHgyMDA5LCAweDAwMTYsCi0JMHgwODBjLCAweGEwNjgsIDB4MDgwNCwgMHg3ZGFjLCAweDkxODYsIDB4MDAyMiwgMHgxOTA0LCAweDdkYWMsCi0JMHg3MDMwLCAweDkwOGUsIDB4MDMwMCwgMHgxNTgwLCAweDY4ZDgsIDB4ZDBhNCwgMHgwNTI4LCAweGMwYjUsCi0JMHg2OGRhLCAweDcxMDAsIDB4OTE4YywgMHgwMGZmLCAweDY5N2EsIDB4NzAwNCwgMHg2ODdlLCAweDAwZjYsCi0JMHgyMDc5LCAweDAxMDAsIDB4NzllNiwgMHg3OGVhLCAweDAwMDYsIDB4OTA4NCwgMHgwMGZmLCAweDAwMTYsCi0JMHgyMDA4LCAweDA4MGMsIDB4MjZiNiwgMHg3OTMyLCAweDc5MzYsIDB4MDAxZSwgMHgwMDBlLCAweDAwZmUsCi0JMHgwODBjLCAweDI2NmQsIDB4Njk1YSwgMHg3MDNjLCAweDAwZTYsIDB4MjA3MSwgMHgwMTQwLCAweDcwODYsCi0JMHgyMDcxLCAweDE4MDAsIDB4NzBiMiwgMHgwMGVlLCAweDcwMzQsIDB4OTAwNSwgMHgxOTA0LCAweDdkYWMsCi0JMHgyMDA5LCAweDAwMTcsIDB4MDgwNCwgMHg3ZDVjLCAweDkwOGUsIDB4MDQwMCwgMHgxMTkwLCAweDcwMzQsCi0JMHg5MDA1LCAweDE5MDQsIDB4N2RhYywgMHgwODBjLCAweDcxN2UsIDB4MDEyMCwgMHgyMDA5LCAweDAwMWQsCi0JMHgwODA0LCAweDdkNWMsIDB4NjhkOCwgMHhjMGE1LCAweDY4ZGEsIDB4MjAwOSwgMHgwMDMwLCAweDA4MDQsCi0JMHg3ZDVjLCAweDkwOGUsIDB4MDUwMCwgMHgxMTQwLCAweDcwMzQsIDB4OTAwNSwgMHgxOTA0LCAweDdkYWMsCi0JMHgyMDA5LCAweDAwMTgsIDB4MDgwNCwgMHg3ZDVjLCAweDkwOGUsIDB4MjAxMCwgMHgxMTIwLCAweDIwMDksCi0JMHgwMDE5LCAweDA4MDQsIDB4N2Q1YywgMHg5MDhlLCAweDIxMTAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMWEsCi0JMHgwODA0LCAweDdkNWMsIDB4OTA4ZSwgMHg1MjAwLCAweDExNDAsIDB4NzAzNCwgMHg5MDA1LCAweDE5MDQsCi0JMHg3ZGFjLCAweDIwMDksIDB4MDAxYiwgMHgwODA0LCAweDdkNWMsIDB4OTA4ZSwgMHg1MDAwLCAweDExNDAsCi0JMHg3MDM0LCAweDkwMDUsIDB4MTkwNCwgMHg3ZGFjLCAweDIwMDksIDB4MDAxYywgMHgwODA0LCAweDdkNWMsCi0JMHg5MDhlLCAweDEzMDAsIDB4MTEyMCwgMHgyMDA5LCAweDAwMzQsIDB4MDgwNCwgMHg3ZDVjLCAweDkwOGUsCi0JMHgxMjAwLCAweDExNDAsIDB4NzAzNCwgMHg5MDA1LCAweDE5MDQsIDB4N2RhYywgMHgyMDA5LCAweDAwMjQsCi0JMHgwODA0LCAweDdkNWMsIDB4OTA4YywgMHhmZjAwLCAweDkxOGUsIDB4MjQwMCwgMHgxMTcwLCAweDIwMDksCi0JMHgwMDJkLCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwOWMsIDB4MDkwNCwgMHg3ZDVjLCAweDA4MGMsCi0JMHhjYjYxLCAweDE5MDQsIDB4N2RhYywgMHgwODA0LCAweDdkNWEsIDB4OTA4YywgMHhmZjAwLCAweDkxOGUsCi0JMHg1MzAwLCAweDExMjAsIDB4MjAwOSwgMHgwMDJhLCAweDA4MDQsIDB4N2Q1YywgMHg5MDhlLCAweDBmMDAsCi0JMHgxMTIwLCAweDIwMDksIDB4MDAyMCwgMHgwODA0LCAweDdkNWMsIDB4OTA4ZSwgMHg2MTA0LCAweDE1MjgsCi0JMHgyMDI5LCAweDAyMDUsIDB4MjAxMSwgMHgwMjZkLCAweDgyMDgsIDB4MjIwNCwgMHg5MDgyLCAweDAwMDQsCi0JMHg4MDA0LCAweDgwMDQsIDB4MjBhOCwgMHgyMDExLCAweDgwMTUsIDB4MjExYywgMHg4MTA4LCAweDAwNDYsCi0JMHgyMTI0LCAweDA4MGMsIDB4NGExNywgMHgwMDRlLCAweDgxMDgsIDB4MGYwNCwgMHg3ZDI4LCAweDkxODYsCi0JMHgwMjgwLCAweDFkODgsIDB4MjUwNCwgMHg4MDAwLCAweDIwMmEsIDB4MjAwOSwgMHgwMjYwLCAweDBjNTgsCi0JMHgyMDJiLCAweDAwMDAsIDB4MjAwOSwgMHgwMDIzLCAweDA0NzgsIDB4OTA4ZSwgMHg2MDAwLCAweDExMTgsCi0JMHgyMDA5LCAweDAwM2YsIDB4MDQ0OCwgMHg5MDhlLCAweDc4MDAsIDB4MTExOCwgMHgyMDA5LCAweDAwNDUsCi0JMHgwNDE4LCAweDkwOGUsIDB4MTAwMCwgMHgxMTE4LCAweDIwMDksIDB4MDA0ZSwgMHgwMGU4LCAweDkwOGUsCi0JMHg2MzAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDRhLCAweDAwYjgsIDB4OTA4YywgMHhmZjAwLCAweDkxOGUsCi0JMHg1NjAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDRmLCAweDAwNzgsIDB4OTA4YywgMHhmZjAwLCAweDkxOGUsCi0JMHg1NzAwLCAweDExMTgsIDB4MjAwOSwgMHgwMDUwLCAweDAwMzgsIDB4MjAwOSwgMHgwMDFkLCAweDY4MzgsCi0JMHhkMGQ0LCAweDAxMTAsIDB4MjAwOSwgMHgwMDRjLCAweDAwMTYsIDB4MjAxMSwgMHgwMjYzLCAweDIyMDQsCi0JMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyNjZkLCAweDE5MDQsIDB4N2RhZiwgMHgwODBjLCAweDYzNDMsCi0JMHgxOTA0LCAweDdkYWYsIDB4YmUxMiwgMHhiZDE2LCAweDAwMWUsIDB4MDAxNiwgMHgwODBjLCAweDcxN2UsCi0JMHgwMWMwLCAweDY4ZDgsIDB4ZDA4YywgMHgxMTQ4LCAweDcwMDAsIDB4OTA4NCwgMHgwMGZmLCAweDExODgsCi0JMHg3MDA0LCAweDkwODQsIDB4ZmYwMCwgMHgxMTY4LCAweDAwNDAsIDB4Njg3OCwgMHg5NjA2LCAweDExNDgsCi0JMHg2ODdjLCAweDk1MDYsIDB4OTA4NCwgMHhmZjAwLCAweDExMjAsIDB4OTU4NCwgMHgwMGZmLCAweGI4YjIsCi0JMHgwMDgwLCAweGI4YjAsIDB4OTAwNSwgMHgxMTY4LCAweDkxODYsIDB4MDA0NiwgMHgxMTUwLCAweDY4NzgsCi0JMHg5NjA2LCAweDExMzgsIDB4Njg3YywgMHg5NTA2LCAweDkwODQsIDB4ZmYwMCwgMHgxMTEwLCAweDAwMWUsCi0JMHgwMDk4LCAweDA4MGMsIDB4OWY5NCwgMHgwMWE4LCAweDJiMDgsIDB4NjExMiwgMHg2MDIzLCAweDAwMDQsCi0JMHg3MTIwLCAweDYxMGEsIDB4MDAxZSwgMHg5MTg2LCAweDAwNGMsIDB4MTExMCwgMHg2MDIzLCAweDAwMGEsCi0JMHgwMDE2LCAweDAwMWUsIDB4MDgwYywgMHhhMDY4LCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweDAwMWUsCi0JMHgwY2Q4LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZWMsIDB4MDEyMCwgMHgyMDExLCAweDgwNDksCi0JMHgwODBjLCAweDRhMTcsIDB4MDgwYywgMHhhMDNiLCAweDBkOTAsIDB4MmIwOCwgMHg2MTEyLCAweDYwMjMsCi0JMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMDFlLCAweDAwMTYsIDB4OTE4NiwgMHgwMDE3LCAweDAxMTgsCi0JMHg5MTg2LCAweDAwMzAsIDB4MTEyOCwgMHg2MDA3LCAweDAwMDksIDB4NjAxNywgMHgyOTAwLCAweDAwMjAsCi0JMHg2MDA3LCAweDAwNTEsIDB4NjAxNywgMHgwMDAwLCAweDYwMmYsIDB4MDAwOSwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDg2NDAsIDB4MDhhMCwgMHgwODBjLCAweDgxODUsIDB4MTE1OCwgMHgwODBjLCAweDMxYjgsCi0JMHgxMTQwLCAweDcwMTAsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTA4ZSwgMHgwMDA4LCAweDExMDgsCi0JMHgwMDA5LCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDAwNDYsIDB4NzAwMCwgMHg5MDhjLCAweGZmMDAsCi0JMHg4MTBmLCAweDkxODYsIDB4MDAzMywgMHgxMWU4LCAweDA4MGMsIDB4ODA2MCwgMHgwOTA0LCAweDdlM2IsCi0JMHg3MTI0LCAweDYxMGEsIDB4NzAzMCwgMHg5MDhlLCAweDAyMDAsIDB4MTE0MCwgMHg3MDM0LCAweDkwMDUsCi0JMHgxNWQwLCAweDIwMDksIDB4MDAxNSwgMHgwODBjLCAweGEwNjgsIDB4MDRhOCwgMHg5MDhlLCAweDAxMDAsCi0JMHgxNTkwLCAweDcwMzQsIDB4OTAwNSwgMHgxNTc4LCAweDIwMDksIDB4MDAxNiwgMHgwODBjLCAweGEwNjgsCi0JMHgwNDUwLCAweDkxODYsIDB4MDAzMiwgMHgxNTM4LCAweDcwMzAsIDB4OTA4ZSwgMHgxNDAwLCAweDE1MTgsCi0JMHgyMDA5LCAweDAwMzgsIDB4MDAxNiwgMHgyMDExLCAweDAyNjMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsCi0JMHgwODBjLCAweDI2NmQsIDB4MTFiOCwgMHgwODBjLCAweDYzNDMsIDB4MTFhMCwgMHhiZTEyLCAweGJkMTYsCi0JMHgwODBjLCAweDlmOTQsIDB4MDE3OCwgMHgyYjA4LCAweDYxMTIsIDB4MDgwYywgMHhjMWNhLCAweDYwMjMsCi0JMHgwMDA0LCAweDcxMjAsIDB4NjEwYSwgMHgwMDFlLCAweDA4MGMsIDB4YTA2OCwgMHgwODBjLCAweDhiOGYsCi0JMHgwMDEwLCAweDAwY2UsIDB4MDAxZSwgMHgwMDRlLCAweDAwY2UsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMDQ2LCAweDAwZTYsIDB4MDBkNiwgMHgyMDI4LCAweDIxMzAsIDB4OTY5NiwgMHgwMGZmLCAweDExYjgsCi0JMHg5NTkyLCAweGZmZmMsIDB4MDJhMCwgMHg5NTk2LCAweGZmZmQsIDB4MTEyMCwgMHgyMDA5LCAweDAwN2YsCi0JMHgwODA0LCAweDdlOWQsIDB4OTU5NiwgMHhmZmZlLCAweDExMjAsIDB4MjAwOSwgMHgwMDdlLCAweDA4MDQsCi0JMHg3ZTlkLCAweDk1OTYsIDB4ZmZmYywgMHgxMTE4LCAweDIwMDksIDB4MDA4MCwgMHgwNGYwLCAweDIwMTEsCi0JMHgwMDAwLCAweDIwMTksIDB4MTgzNiwgMHgyMzFjLCAweGQzYWMsIDB4MDEzMCwgMHg5MDI2LCAweDIwYTksCi0JMHgwODAwLCAweDIwNzEsIDB4MTAwMCwgMHgwMDMwLCAweDIwMjEsIDB4MDA4MSwgMHgyMGE5LCAweDA3N2YsCi0JMHgyMDcxLCAweDEwODEsIDB4MmUxYywgMHg5M2RkLCAweDAwMDAsIDB4MTE0MCwgMHg4MmZmLCAweDExZDAsCi0JMHg5NDk2LCAweDAwZmYsIDB4MDFiOCwgMHgyNDEwLCAweGMyZmQsIDB4MDBhMCwgMHhiZjEwLCAweDI2MDAsCi0JMHg5NzA2LCAweGI4MTQsIDB4MTEyMCwgMHg5NTQ2LCAweDExMTAsIDB4MjQwOCwgMHgwMGIwLCAweDk3NDUsCi0JMHgxMTQ4LCAweDk0YzYsIDB4MDA3ZSwgMHgwMTMwLCAweDk0YzYsIDB4MDA3ZiwgMHgwMTE4LCAweDk0YzYsCi0JMHgwMDgwLCAweDFkMjAsIDB4ODQyMCwgMHg4ZTcwLCAweDFmMDQsIDB4N2U3MiwgMHg4MmZmLCAweDExMTgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDAxOCwgMHhjMmZjLCAweDIyMDgsIDB4OTAwNiwgMHgwMGRlLCAweDAwZWUsCi0JMHgwMDRlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MzYsIDB4MjAwYywgMHg5MTg0LCAweDAwODAsCi0JMHgwMTEwLCAweGQxOGMsIDB4MDEzOCwgMHg3MDAwLCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODQsCi0JMHgwMDBmLCAweDAwNGEsIDB4NzgxNywgMHgwMTQwLCAweDIwMDEsIDB4MTljYiwgMHgyMDA0LCAweDkwMDUsCi0JMHgwOTBjLCAweDhiOGYsIDB4MDAwNSwgMHg3ZWNiLCAweDdlY2IsIDB4N2VjYiwgMHg4MDcyLCAweDdlY2IsCi0JMHg3ZWQ0LCAweDdlZmYsIDB4N2Y4ZCwgMHg3ZWNiLCAweDdlY2IsIDB4N2VjYiwgMHg3ZWNiLCAweDdlY2IsCi0JMHg3ZWNiLCAweDdlY2IsIDB4N2VjYiwgMHg3ODE3LCAweDAxNDAsIDB4MjAwMSwgMHgxOWNiLCAweDIwMDQsCi0JMHg5MDA1LCAweDA5MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDAwYjYsIDB4NzExMCwgMHhkMWJjLCAweDAxZTgsCi0JMHg3MTIwLCAweDIxNjAsIDB4OWM4YywgMHgwMDA3LCAweDExYzAsIDB4OWM4YSwgMHgxY2QwLCAweDAyYTgsCi0JMHg2ODY0LCAweDljMDIsIDB4MTI5MCwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MTEwLCAweDIxNTgsCi0JMHhiOTEwLCAweDkxMDYsIDB4MTE1MCwgMHg3MDBjLCAweGI5MTQsIDB4OTEwNiwgMHgxMTMwLCAweDcxMjQsCi0JMHg2MTBhLCAweDIwMDksIDB4MDA0NiwgMHgwODBjLCAweGEwNjgsIDB4NzgxNywgMHgwMTQwLCAweDIwMDEsCi0JMHgxOWNiLCAweDIwMDQsIDB4OTAwNSwgMHgwOTBjLCAweDhiOGYsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMGM2LCAweDk0ODQsIDB4MGZmZiwgMHgwOTA0LCAweDdmNjMsIDB4NzExMCwgMHhkMWJjLCAweDE5MDQsCi0JMHg3ZjYzLCAweDcxMDgsIDB4NzAwYywgMHgyMDI4LCAweDkxOGMsIDB4MDBmZiwgMHgyMTMwLCAweDkwOTQsCi0JMHhmZjAwLCAweDE1YjAsIDB4ODFmZiwgMHgxNWEwLCAweDkwODAsIDB4MzFmMywgMHgyMDBkLCAweDkxOGMsCi0JMHhmZjAwLCAweDgxMGYsIDB4MjAwMSwgMHgwMDgwLCAweDkxMDYsIDB4MDkwNCwgMHg3ZjYzLCAweDA4MGMsCi0JMHg2MzQzLCAweDE5MDQsIDB4N2Y2MywgMHhiZTEyLCAweGJkMTYsIDB4YjgwMCwgMHhkMGVjLCAweDE1ZDgsCi0JMHhiYTA0LCAweDkyOTQsIDB4ZmYwMCwgMHg5Mjg2LCAweDA2MDAsIDB4MTFhMCwgMHgwODBjLCAweDlmOTQsCi0JMHgwNWU4LCAweDJiMDgsIDB4NzAyOCwgMHg2MDQ2LCAweDcwMmMsIDB4NjA0YSwgMHg2MTEyLCAweDYwMjMsCi0JMHgwMDA2LCAweDcxMjAsIDB4NjEwYSwgMHg3MTMwLCAweDYxNTYsIDB4MjAwOSwgMHgwMDQ0LCAweDA4MGMsCi0JMHhjZGQ3LCAweDA0MDgsIDB4MDgwYywgMHg2NmM5LCAweDExMzgsIDB4YjgwNywgMHgwNjA2LCAweDBjMzAsCi0JMHgxOTBjLCAweDdlM2YsIDB4MTFjMCwgMHgwODk4LCAweDA4MGMsIDB4OWY5NCwgMHgyYjA4LCAweDAxOTgsCi0JMHg2MTEyLCAweDYwMjMsIDB4MDAwNCwgMHg3MTIwLCAweDYxMGEsIDB4OTI4NiwgMHgwNDAwLCAweDExMTgsCi0JMHg2MDA3LCAweDAwMDUsIDB4MDAxMCwgMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCi0JMHg4NjQwLCAweDA4MGMsIDB4OGI4ZiwgMHg3ODE3LCAweDAxNDAsIDB4MjAwMSwgMHgxOWNiLCAweDIwMDQsCi0JMHg5MDA1LCAweDA5MGMsIDB4OGI4ZiwgMHgwMGNlLCAweDAwYmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGUsCi0JMHgyMDA0LCAweGQwZWMsIDB4MDEyMCwgMHgyMDExLCAweDgwNDksIDB4MDgwYywgMHg0YTE3LCAweDA4MGMsCi0JMHhhMDNiLCAweDBkNDgsIDB4MmIwOCwgMHg2MTEyLCAweDYwMjMsIDB4MDAwNiwgMHg3MTIwLCAweDYxMGEsCi0JMHg3MTMwLCAweDYxNTYsIDB4NjAxNywgMHhmMzAwLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwNDEsCi0JMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDA4YjAsIDB4MDBiNiwgMHg3MTEwLCAweGQxYmMsCi0JMHgwMWU4LCAweDcwMjAsIDB4MjA2MCwgMHg5Yzg0LCAweDAwMDcsIDB4MTFjMCwgMHg5YzgyLCAweDFjZDAsCi0JMHgwMmE4LCAweDY4NjQsIDB4OWMwMiwgMHgxMjkwLCAweDcwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDYxMTAsCi0JMHgyMTU4LCAweGI5MTAsIDB4OTEwNiwgMHgxMTUwLCAweDcwMGMsIDB4YjkxNCwgMHg5MTA2LCAweDExMzAsCi0JMHg3MTI0LCAweDYxMGEsIDB4MjAwOSwgMHgwMDQ1LCAweDA4MGMsIDB4YTA2OCwgMHg3ODE3LCAweDAxNDAsCi0JMHgyMDAxLCAweDE5Y2IsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsIDB4OGI4ZiwgMHgwMGJlLCAweDAwMDUsCi0JMHg2MTIwLCAweDkxODYsIDB4MDAwMiwgMHgwMTI4LCAweDkxODYsIDB4MDAwNSwgMHgwMTEwLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4MDgwYywgMHg4MTg1LCAweDExODAsIDB4MDgwYywgMHgzMWI4LCAweDExNjgsCi0JMHg3MDEwLCAweDkwODQsIDB4ZmYwMCwgMHg4MDA3LCAweDkwODYsIDB4MDAwMCwgMHgxMTMwLCAweDkxODQsCi0JMHgwMDBmLCAweDkwOGEsIDB4MDAwNiwgMHgxMjA4LCAweDAwMGIsIDB4MDAwNSwgMHg3ZmRjLCAweDdmZGQsCi0JMHg3ZmRjLCAweDdmZGMsIDB4ODA0MiwgMHg4MDUxLCAweDAwMDUsIDB4MDBiNiwgMHg3MDBjLCAweDcxMDgsCi0JMHgwODBjLCAweDI2NmQsIDB4MTkwNCwgMHg4MDQwLCAweDA4MGMsIDB4NjM0MywgMHgxOTA0LCAweDgwNDAsCi0JMHhiZTEyLCAweGJkMTYsIDB4NzExMCwgMHhkMWJjLCAweDA1NDAsIDB4NzAyYywgMHhkMDg0LCAweDExMjAsCi0JMHhiODAwLCAweGQwYmMsIDB4MTkwNCwgMHg4MDQwLCAweDA4MGMsIDB4NjZjOSwgMHgwMTQ4LCAweDkwODYsCi0JMHgwMDA0LCAweDAxMzAsIDB4MDgwYywgMHg2NmQxLCAweDAxMTgsIDB4OTA4NiwgMHgwMDA0LCAweDE1ODgsCi0JMHgwMGM2LCAweDA4MGMsIDB4ODA2MCwgMHgwMGNlLCAweDA1ZDgsIDB4MDgwYywgMHg5Zjk0LCAweDJiMDgsCi0JMHgwNWI4LCAweDYxMTIsIDB4MDgwYywgMHhjMWNhLCAweDYwMjMsIDB4MDAwMiwgMHg3MTIwLCAweDYxMGEsCi0JMHgyMDA5LCAweDAwODgsIDB4MDgwYywgMHhhMDY4LCAweDA0NTgsIDB4MDgwYywgMHg2NmM5LCAweDAxNDgsCi0JMHg5MDg2LCAweDAwMDQsIDB4MDEzMCwgMHgwODBjLCAweDY2ZDEsIDB4MDExOCwgMHg5MDg2LCAweDAwMDQsCi0JMHgxMTgwLCAweDA4MGMsIDB4OWY5NCwgMHgyYjA4LCAweDAxZDgsIDB4NjExMiwgMHgwODBjLCAweGMxY2EsCi0JMHg2MDIzLCAweDAwMDUsIDB4NzEyMCwgMHg2MTBhLCAweDIwMDksIDB4MDA4OCwgMHgwODBjLCAweGEwNjgsCi0JMHgwMDc4LCAweDA4MGMsIDB4OWY5NCwgMHgyYjA4LCAweDAxNTgsIDB4NjExMiwgMHgwODBjLCAweGMxY2EsCi0JMHg2MDIzLCAweDAwMDQsIDB4NzEyMCwgMHg2MTBhLCAweDIwMDksIDB4MDAwMSwgMHgwODBjLCAweGEwNjgsCi0JMHgwMGJlLCAweDAwMDUsIDB4NzExMCwgMHhkMWJjLCAweDAxNTgsIDB4MDBkMSwgMHgwMTQ4LCAweDA4MGMsCi0JMHg3ZmI4LCAweDExMzAsIDB4NzEyNCwgMHg2MTBhLCAweDIwMDksIDB4MDA4OSwgMHgwODBjLCAweGEwNjgsCi0JMHgwMDA1LCAweDcxMTAsIDB4ZDFiYywgMHgwMTU4LCAweDAwNTksIDB4MDE0OCwgMHgwODBjLCAweDdmYjgsCi0JMHgxMTMwLCAweDcxMjQsIDB4NjEwYSwgMHgyMDA5LCAweDAwOGEsIDB4MDgwYywgMHhhMDY4LCAweDAwMDUsCi0JMHg3MDIwLCAweDIwNjAsIDB4OWM4NCwgMHgwMDA3LCAweDExNTgsIDB4OWM4MiwgMHgxY2QwLCAweDAyNDAsCi0JMHgyMDAxLCAweDE4MTksIDB4MjAwNCwgMHg5YzAyLCAweDEyMTgsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHg5MDA2LCAweDBjZTgsIDB4MDBiNiwgMHg3MTEwLCAweGQxYmMsIDB4MTFkOCwgMHg3MDI0LCAweDIwNjAsCi0JMHg5Yzg0LCAweDAwMDcsIDB4MTFiMCwgMHg5YzgyLCAweDFjZDAsIDB4MDI5OCwgMHg2ODY0LCAweDljMDIsCi0JMHgxMjgwLCAweDcwMDgsIDB4OTA4NCwgMHgwMGZmLCAweDYxMTAsIDB4MjE1OCwgMHhiOTEwLCAweDkxMDYsCi0JMHgxMTQwLCAweDcwMGMsIDB4YjkxNCwgMHg5MTA2LCAweDExMjAsIDB4MjAwOSwgMHgwMDUxLCAweDA4MGMsCi0JMHhhMDY4LCAweDc4MTcsIDB4MDE0MCwgMHgyMDAxLCAweDE5Y2IsIDB4MjAwNCwgMHg5MDA1LCAweDA5MGMsCi0JMHg4YjhmLCAweDAwYmUsIDB4MDAwNSwgMHgyMDMxLCAweDAxMDUsIDB4MDA2OSwgMHgwMDA1LCAweDIwMzEsCi0JMHgwMjA2LCAweDAwNDksIDB4MDAwNSwgMHgyMDMxLCAweDAyMDcsIDB4MDAyOSwgMHgwMDA1LCAweDIwMzEsCi0JMHgwMjEzLCAweDAwMDksIDB4MDAwNSwgMHgwMGM2LCAweDAwOTYsIDB4MDBmNiwgMHg3MDAwLCAweDkwODQsCi0JMHhmMDAwLCAweDkwODYsIDB4YzAwMCwgMHgwNWQwLCAweDA4MGMsIDB4OWY5NCwgMHgwNWI4LCAweDAwNjYsCi0JMHgwMGM2LCAweDAwNDYsIDB4MjAxMSwgMHgwMjYzLCAweDIyMDQsIDB4ODIxMSwgMHgyMjBjLCAweDA4MGMsCi0JMHgyNjZkLCAweDE1YTAsIDB4MDgwYywgMHg2MzQzLCAweDE1ODgsIDB4YmUxMiwgMHhiZDE2LCAweDJiMDAsCi0JMHgwMDRlLCAweDAwY2UsIDB4NjAxMiwgMHgwODBjLCAweGMxY2EsIDB4MDgwYywgMHgxMDM3LCAweDA1MTAsCi0JMHgyOTAwLCAweDYwNWEsIDB4OTAwNiwgMHhhODAyLCAweGE4NjYsIDB4YWM2YSwgMHhhODVjLCAweDkwZjgsCi0JMHgwMDFiLCAweDIwYTksIDB4MDAwZSwgMHhhODYwLCAweDIwZTgsIDB4MjBlMSwgMHgwMDAwLCAweDJmYTAsCi0JMHgyZTk4LCAweDQwMDMsIDB4MDA2ZSwgMHg2NjE2LCAweDYwMDcsIDB4MDAzZSwgMHg2MDIzLCAweDAwMDEsCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg4NjQwLCAweDA4MGMsIDB4OGI4ZiwgMHgwMGZlLCAweDAwOWUsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDgwYywgMHg5ZmVhLCAweDAwNmUsIDB4MGNjMCwgMHgwMDRlLCAweDAwY2UsCi0JMHgwY2M4LCAweDAwYzYsIDB4NzAwMCwgMHg5MDhjLCAweGZmMDAsIDB4OTE4NCwgMHhmMDAwLCAweDgxMGYsCi0JMHg5MDg2LCAweDIwMDAsIDB4MTkwNCwgMHg4MTUwLCAweDkxODYsIDB4MDAyMiwgMHgxNWYwLCAweDIwMDEsCi0JMHgwMTExLCAweDIwMDQsIDB4OTAwNSwgMHgxOTA0LCAweDgxNTIsIDB4NzAzMCwgMHg5MDhlLCAweDA0MDAsCi0JMHgwOTA0LCAweDgxNTIsIDB4OTA4ZSwgMHg2MDAwLCAweDA1ZTgsIDB4OTA4ZSwgMHg1NDAwLCAweDA1ZDAsCi0JMHg5MDhlLCAweDAzMDAsIDB4MTFkOCwgMHgyMDA5LCAweDE4MzYsIDB4MjEwYywgMHhkMThjLCAweDE1OTAsCi0JMHhkMWE0LCAweDE1ODAsIDB4MDgwYywgMHg2Njg3LCAweDA1ODgsIDB4NjhhYywgMHg5MDg0LCAweDAwZmYsCi0JMHg3MTAwLCAweDkxOGMsIDB4MDBmZiwgMHg5MTA2LCAweDE1MTgsIDB4Njg3YywgMHg2OWFjLCAweDkxOGMsCi0JMHhmZjAwLCAweDkxMDUsIDB4NzEwNCwgMHg5MTA2LCAweDExZDgsIDB4MDBlMCwgMHgyMDA5LCAweDAxMDMsCi0JMHgyMTBjLCAweGQxYjQsIDB4MTFhOCwgMHg5MDhlLCAweDUyMDAsIDB4MDllOCwgMHg5MDhlLCAweDA1MDAsCi0JMHgwOWQwLCAweDkwOGUsIDB4NTAwMCwgMHgwOWI4LCAweDAwNTgsIDB4OTE4NiwgMHgwMDIzLCAweDExNDAsCi0JMHgwODBjLCAweDgwNjAsIDB4MDEyOCwgMHg2MDA0LCAweDkwODYsIDB4MDAwMiwgMHgwMTE4LCAweDAwMDAsCi0JMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsIDB4MDAwNSwgMHg3MDMwLCAweDkwOGUsCi0JMHgwMzAwLCAweDAxMTgsIDB4OTA4ZSwgMHg1MjAwLCAweDFkOTgsIDB4MjAwMSwgMHgxODM2LCAweDIwMDQsCi0JMHg5MDg0LCAweDAwMDksIDB4OTA4NiwgMHgwMDA4LCAweDBkNjgsIDB4MGM1MCwgMHgwMGY2LCAweDIwNzksCi0JMHgwMjAwLCAweDc4MDAsIDB4YzBlNSwgMHhjMGNjLCAweDc4MDIsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsCi0JMHgyMDc5LCAweDE4MDAsIDB4NzgzNCwgMHhkMDg0LCAweDExMzAsIDB4MjA3OSwgMHgwMjAwLCAweDc4MDAsCi0JMHg5MDg1LCAweDEyMDAsIDB4NzgwMiwgMHgwMGZlLCAweDAwMDUsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsCi0JMHg3MDM0LCAweGMwODQsIDB4NzAzNiwgMHgwMGVlLCAweDAwMDUsIDB4MDAxNiwgMHgyMDAxLCAweDE4MzYsCi0JMHgyMDBjLCAweDkxODQsIDB4MDA4MCwgMHgwMTE4LCAweGQxOGMsIDB4MDExOCwgMHg5MDA2LCAweDAwMWUsCi0JMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwY2Q4LCAweDIwNzEsIDB4MTlkNSwgMHg3MDAzLCAweDAwMDMsCi0JMHg3MDBmLCAweDAzNjEsIDB4OTAwNiwgMHg3MDFhLCAweDcwN2EsIDB4NzAxMiwgMHg3MDE3LCAweDFjZDAsCi0JMHg3MDA3LCAweDAwMDAsIDB4NzAyNiwgMHg3MDJiLCAweDk2MzAsIDB4NzAzMiwgMHg3MDM3LCAweDk2OTgsCi0JMHg3MDQ3LCAweGZmZmYsIDB4NzA0YSwgMHg3MDRmLCAweDUzNmQsIDB4NzA1MiwgMHg3MDYzLCAweDgyZjQsCi0JMHgwODBjLCAweDEwNTAsIDB4MDkwYywgMHgwZGY2LCAweDI5MDAsIDB4NzA0MiwgMHhhODY3LCAweDAwMDMsCi0JMHhhODZmLCAweDAxMDAsIDB4YThhYiwgMHhkY2IwLCAweDAwMDUsIDB4MjA3MSwgMHgxOWQ1LCAweDFkMDQsCi0JMHg4MjQ4LCAweDIwOTEsIDB4NjAwMCwgMHg3MDBjLCAweDgwMDEsIDB4NzAwZSwgMHgxNTEwLCAweDIwMDEsCi0JMHgxODdkLCAweDIwMDQsIDB4ZDBjNCwgMHgwMTU4LCAweDNhMDAsIDB4ZDA4YywgMHgxMTQwLCAweDIwZDEsCi0JMHgwMDAwLCAweDIwZDEsIDB4MDAwMSwgMHgyMGQxLCAweDAwMDAsIDB4MDgwYywgMHgwZGY2LCAweDcwMGYsCi0JMHgwMzYxLCAweDcwMDcsIDB4MDAwMSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDgzMzksCi0JMHg3MDQ4LCAweDkwMGQsIDB4MDE0OCwgMHg4MTA5LCAweDcxNGEsIDB4MTEzMCwgMHg3MDRjLCAweDA4MGYsCi0JMHgwMDE4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDcwMjQsIDB4OTAwZCwgMHgwMTg4LCAweDcwMjAsCi0JMHg4MDAxLCAweDcwMjIsIDB4MTE2OCwgMHg3MDIzLCAweDAwMDksIDB4ODEwOSwgMHg3MTI2LCAweDkxODYsCi0JMHgwM2U4LCAweDExMTAsIDB4NzAyOCwgMHgwODBmLCAweDgxZmYsIDB4MTExMCwgMHg3MDI4LCAweDA4MGYsCi0JMHg3MDMwLCAweDkwMGQsIDB4MDE4MCwgMHg3MDJjLCAweDgwMDEsIDB4NzAyZSwgMHgxMTYwLCAweDcwMmYsCi0JMHgwMDA5LCAweDgxMDksIDB4NzEzMiwgMHgwMTI4LCAweDkxODQsIDB4MDA3ZiwgMHgwOTBjLCAweDk3MTYsCi0JMHgwMDEwLCAweDcwMzQsIDB4MDgwZiwgMHg3MDQ0LCAweDkwMDUsIDB4MDExOCwgMHgwMzEwLCAweDgwMDEsCi0JMHg3MDQ2LCAweDcwNTQsIDB4OTAwZCwgMHgwMTY4LCAweDcwNTAsIDB4ODAwMSwgMHg3MDUyLCAweDExNDgsCi0JMHg3MDUzLCAweDAwMDksIDB4ODEwOSwgMHg3MTU2LCAweDExMjAsIDB4NzE1OCwgMHg3MTU2LCAweDcwNjAsCi0JMHgwODBmLCAweDcwMTgsIDB4OTAwZCwgMHgwMWQ4LCAweDAwMTYsIDB4NzA3OCwgMHg5MDBkLCAweDAxNTgsCi0JMHg3MDc0LCAweDgwMDEsIDB4NzA3NiwgMHgxMTM4LCAweDcwNzcsIDB4MDAwOSwgMHg4MTA5LCAweDcxN2EsCi0JMHgxMTEwLCAweDcwN2MsIDB4MDgwZiwgMHgwMDFlLCAweDcwMDgsIDB4ODAwMSwgMHg3MDBhLCAweDExMzgsCi0JMHg3MDBiLCAweDAwMDksIDB4ODEwOSwgMHg3MTFhLCAweDExMTAsIDB4NzAxYywgMHgwODBmLCAweDAxMmUsCi0JMHg3MDA0LCAweDAwMDIsIDB4ODI3MCwgMHg4MjcxLCAweDgyOGQsIDB4MDBlNiwgMHgyMDcxLCAweDE5ZDUsCi0JMHg3MDE4LCAweDkwMDUsIDB4MTEyMCwgMHg3MTFhLCAweDcyMWUsIDB4NzAwYiwgMHgwMDA5LCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MDAwNiwgMHgyMDcxLCAweDE5ZDUsIDB4NzAxYywgMHg5MjA2LCAweDExMjAsCi0JMHg3MDFhLCAweDcwMWUsIDB4NzA3YSwgMHg3MDdlLCAweDAwMGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgyMDcxLCAweDE5ZDUsIDB4Yjg4OCwgMHg5MTAyLCAweDAyMDgsIDB4Yjk4YSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMDA1LCAweDAwYjYsIDB4NzExMCwgMHgwODBjLCAweDYzYTMsIDB4MTE2OCwgMHhiODg4LCAweDgwMDEsCi0JMHgwMjUwLCAweGI4OGEsIDB4MTE0MCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDE2LCAweDA4MGMsCi0JMHg4YjhmLCAweDAwMWUsIDB4MDEyZSwgMHg4MTA4LCAweDkxODIsIDB4MDgwMCwgMHgwMjE4LCAweDkwMGUsCi0JMHg3MDA3LCAweDAwMDIsIDB4NzExMiwgMHgwMGJlLCAweDAwMDUsIDB4NzAxNCwgMHgyMDYwLCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4NjA0MCwgMHg5MDA1LCAweDAxMjgsIDB4ODAwMSwgMHg2MDQyLCAweDExMTAsCi0JMHgwODBjLCAweGMwNWIsIDB4NjAxOCwgMHg5MDA1LCAweDA1MjgsIDB4ODAwMSwgMHg2MDFhLCAweDE1MTAsCi0JMHg2MTIwLCAweDkxODYsIDB4MDAwMywgMHgwMTE4LCAweDkxODYsIDB4MDAwNiwgMHgxMWM4LCAweDA4MGMsCi0JMHhiZDRlLCAweDAxYjAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4ODQsIDB4OTA4YSwgMHgxOTlhLCAweDAyODAsCi0JMHg5MDgyLCAweDE5OTksIDB4YTg4NiwgMHg5MDhhLCAweDE5OWEsIDB4MDIxMCwgMHgyMDAxLCAweDE5OTksCi0JMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHg5MTA4LCAweDYxMWEsIDB4YTg3YywgMHhkMGU0LCAweDAxMTAsCi0JMHgwODBjLCAweGJhNTAsIDB4MDEyZSwgMHg5Yzg4LCAweDAwMTgsIDB4NzExNiwgMHgyMDAxLCAweDE4MTksCi0JMHgyMDA0LCAweDkxMDIsIDB4MDIyMCwgMHg3MDE3LCAweDFjZDAsIDB4NzAwNywgMHgwMDAwLCAweDAwMDUsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTlkNSwgMHg3MDI3LCAweDA3ZDAsIDB4NzAyMywgMHgwMDA5LCAweDAwZWUsCi0JMHgwMDA1LCAweDIwMDEsIDB4MTlkZSwgMHgyMDAzLCAweDAwMDAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCi0JMHgxOWQ1LCAweDcxMzIsIDB4NzAyZiwgMHgwMDA5LCAweDAwZWUsIDB4MDAwNSwgMHgyMDExLCAweDE5ZTEsCi0JMHgyMDEzLCAweDAwMDAsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MTlkNSwgMHg3MTFhLCAweDcyMWUsCi0JMHg3MDBiLCAweDAwMDksIDB4MDBlZSwgMHgwMDA1LCAweDAwODYsIDB4MDAyNiwgMHg3MDVjLCAweDgwMDAsCi0JMHg3MDVlLCAweDIwMDEsIDB4MTllNSwgMHgyMDQ0LCAweGEwNmMsIDB4OTA4NiwgMHgwMDAwLCAweDAxNTAsCi0JMHg3MDcwLCAweGEwOWEsIDB4NzA2YywgMHhhMDk2LCAweDcwNjgsIDB4YTA5MiwgMHg3MDY0LCAweGEwOGUsCi0JMHgwODBjLCAweDExMzQsIDB4MDAyZSwgMHgwMDhlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwOTYsCi0JMHgwMGE2LCAweDAwYjYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgwMTU2LCAweDA4MGMsCi0JMHg4MWJkLCAweDAxNWUsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDAwYWUsCi0JMHgwMDllLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwZTYsIDB4MjA3MSwgMHgxOWQ1LCAweDcxN2EsCi0JMHg3MjdlLCAweDcwNzcsIDB4MDAwOSwgMHgwMGVlLCAweDAwMDUsIDB4MDBlNiwgMHgwMDA2LCAweDIwNzEsCi0JMHgxOWQ1LCAweDcwN2MsIDB4OTIwNiwgMHgxMTEwLCAweDcwN2EsIDB4NzA3ZSwgMHgwMDBlLCAweDAwZWUsCi0JMHgwMDA1LCAweDIwNjksIDB4MTgwMCwgMHg2OWU0LCAweGQxZTQsIDB4MTUxOCwgMHgwMDI2LCAweGQxZWMsCi0JMHgwMTQwLCAweDZhNTAsIDB4Njg3MCwgMHg5MjAyLCAweDAyODgsIDB4ODExNywgMHg5Mjk0LCAweDAwYzAsCi0JMHgwMDg4LCAweDkxODQsIDB4MDAwNywgMHgwMWEwLCAweDgxMDksIDB4OTE4NCwgMHgwMDA3LCAweDAxMTAsCi0JMHg2OWU2LCAweDAwNzAsIDB4ODEwNywgMHg5MDg0LCAweDAwMDcsIDB4OTEwZCwgMHg4MTA3LCAweDkxMDYsCi0JMHg5MDk0LCAweDAwYzAsIDB4OTE4NCwgMHhmZjNmLCAweDkyMDUsIDB4NjhlNiwgMHgwODBjLCAweDBmMTcsCi0JMHgwMDJlLCAweDAwMDUsIDB4MDBjNiwgMHgyMDYxLCAweDFhNGMsIDB4MDBjZSwgMHgwMDA1LCAweDkxODQsCi0JMHgwMDBmLCAweDgwMDMsIDB4ODAwMywgMHg4MDAzLCAweDkwODAsIDB4MWE0YywgMHgyMDYwLCAweDAwMDUsCi0JMHhhODg0LCAweDkwOGEsIDB4MTk5YSwgMHgxNjM4LCAweDkwMDUsIDB4MTE1MCwgMHgwMGM2LCAweDIwNjEsCi0JMHgxYTRjLCAweDYwMTQsIDB4MDBjZSwgMHg5MDA1LCAweDExMzAsIDB4MjAwMSwgMHgwMDFlLCAweDAwMTgsCi0JMHg5MDhlLCAweGZmZmYsIDB4MDFiMCwgMHg4MDAzLCAweDgwMGIsIDB4ODEwYiwgMHg5MTA4LCAweDYxMWEsCi0JMHhhODdjLCAweDkwOGMsIDB4MDBjMCwgMHg5MThlLCAweDAwYzAsIDB4MDkwNCwgMHg4M2ZhLCAweGQwYjQsCi0JMHgxMTY4LCAweGQwYmMsIDB4MTkwNCwgMHg4M2QzLCAweDIwMDksIDB4MDAwNiwgMHgwODBjLCAweDg0MjcsCi0JMHgwMDA1LCAweDkwMGUsIDB4MGM2MCwgMHgyMDAxLCAweDE5OTksIDB4MDhiMCwgMHhkMGZjLCAweDAxNjAsCi0JMHg5MDhjLCAweDAwMDMsIDB4MDEyMCwgMHg5MThlLCAweDAwMDMsIDB4MTkwNCwgMHg4NDIxLCAweDkwOGMsCi0JMHgyMDIwLCAweDkxOGUsIDB4MjAyMCwgMHgwMWE4LCAweDYwMjQsIDB4ZDBkNCwgMHgxMWU4LCAweDIwMDksCi0JMHgxODdkLCAweDIxMDQsIDB4ZDA4NCwgMHgxMTM4LCAweDg3ZmYsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDMsCi0JMHgwODA0LCAweGEwNjgsIDB4MDAwNSwgMHg4N2ZmLCAweDFkZTgsIDB4MjAwOSwgMHgwMDQyLCAweDA4MDQsCi0JMHhhMDY4LCAweDYxMTAsIDB4MDBiNiwgMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWFjLCAweDBkMjAsCi0JMHg2MDI0LCAweGMwY2QsIDB4NjAyNiwgMHgwYzAwLCAweGMwZDQsIDB4NjAyNiwgMHhhODkwLCAweDYwMmUsCi0JMHhhODhjLCAweDYwMzIsIDB4MDhlMCwgMHhkMGZjLCAweDAxNjAsIDB4OTA4YywgMHgwMDAzLCAweDAxMjAsCi0JMHg5MThlLCAweDAwMDMsIDB4MTkwNCwgMHg4NDIxLCAweDkwOGMsIDB4MjAyMCwgMHg5MThlLCAweDIwMjAsCi0JMHgwMTcwLCAweDAwNzYsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTY1MSwgMHgwMGZlLCAweDAwN2UsCi0JMHg4N2ZmLCAweDExMjAsIDB4MjAwOSwgMHgwMDQyLCAweDA4MGMsIDB4YTA2OCwgMHgwMDA1LCAweDYxMTAsCi0JMHgwMGI2LCAweDIxNTgsIDB4YjkwMCwgMHgwMGJlLCAweGQxYWMsIDB4MGQ1OCwgMHg2MTI0LCAweGMxY2QsCi0JMHg2MTI2LCAweDBjMzgsIDB4ZDBmYywgMHgwMTg4LCAweDkwOGMsIDB4MjAyMCwgMHg5MThlLCAweDIwMjAsCi0JMHgwMWE4LCAweDkwODQsIDB4MDAwMywgMHg5MDhlLCAweDAwMDIsIDB4MDE0OCwgMHg4N2ZmLCAweDExMjAsCi0JMHgyMDA5LCAweDAwNDEsIDB4MDgwYywgMHhhMDY4LCAweDAwMDUsIDB4MDBiOSwgMHgwY2U4LCAweDg3ZmYsCi0JMHgxZGQ4LCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGEwNjgsIDB4MGNiMCwgMHg2MTEwLCAweDAwYjYsCi0JMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWFjLCAweDBkMjAsIDB4NjEyNCwgMHhjMWNkLCAweDYxMjYsCi0JMHgwYzAwLCAweDIwMDksIDB4MDAwNCwgMHgwMDE5LCAweDAwMDUsIDB4MjAwOSwgMHgwMDAxLCAweDAwOTYsCi0JMHgwODBjLCAweGJkNGUsIDB4MDUxOCwgMHg2MDE0LCAweDIwNDgsIDB4YTk4MiwgMHhhODAwLCAweDYwMTYsCi0JMHg5MTg2LCAweDAwMDEsIDB4MTE4OCwgMHhhOTdjLCAweDkxOGMsIDB4ODEwMCwgMHg5MThlLCAweDgxMDAsCi0JMHgxMTU4LCAweDAwYzYsIDB4MjA2MSwgMHgxYTRjLCAweDYyMDAsIDB4ZDI4YywgMHgxMTIwLCAweDYyMDQsCi0JMHg4MjEwLCAweDAyMDgsIDB4NjIwNiwgMHgwMGNlLCAweDA4MGMsIDB4Njg2MSwgMHg2MDE0LCAweDkwNGQsCi0JMHgwMDc2LCAweDIwMzksIDB4MDAwMCwgMHgxOTBjLCAweDgzNzAsIDB4MDA3ZSwgMHgwMDllLCAweDAwMDUsCi0JMHgwMTU2LCAweDAwYzYsIDB4MjA2MSwgMHgxYTRjLCAweDYwMDAsIDB4ODFmZiwgMHgwMTEwLCAweDkyMDUsCi0JMHgwMDA4LCAweDkyMDQsIDB4NjAwMiwgMHgwMGNlLCAweDAxNWUsIDB4MDAwNSwgMHg2ODAwLCAweGQwOGMsCi0JMHgxMTM4LCAweDY4MDgsIDB4OTAwNSwgMHgwMTIwLCAweDgwMDEsIDB4NjgwYSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDAwMzYsIDB4MDA0NiwgMHgyMGE5LCAweDAwMTAsCi0JMHg5MDA2LCAweDgwMDQsIDB4ODA4NiwgMHg4MThlLCAweDEyMDgsIDB4OTIwMCwgMHgxZjA0LCAweDg0NzIsCi0JMHg4MDg2LCAweDgxOGUsIDB4MDA0ZSwgMHgwMDNlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDAwNzYsIDB4MDE1NiwgMHgyMGE5LCAweDAwMTAsIDB4OTAwNSwgMHgwMWM4LCAweDkxMWEsCi0JMHgxMmI4LCAweDgyMTMsIDB4ODE4ZCwgMHgwMjI4LCAweDkxMWEsIDB4MTIyMCwgMHgxZjA0LCAweDg0ODksCi0JMHgwMDI4LCAweDkxMWEsIDB4MjMwOCwgMHg4MjEwLCAweDFmMDQsIDB4ODQ4OSwgMHgwMDA2LCAweDMyMDAsCi0JMHg5MDg0LCAweGVmZmYsIDB4MjA4MCwgMHgwMDBlLCAweDAxNWUsIDB4MDA3ZSwgMHgwMTJlLCAweDAwMDUsCi0JMHgwMDA2LCAweDMyMDAsIDB4OTA4NSwgMHgxMDAwLCAweDBjYTgsIDB4MDEyNiwgMHgyMDkxLCAweDI4MDAsCi0JMHgyMDc5LCAweDE5YzIsIDB4MDEyZSwgMHgwMGQ2LCAweDIwNjksIDB4MTljMiwgMHg2ODAzLCAweDAwMDUsCi0JMHgwMTU2LCAweDAxNDYsIDB4MDFkNiwgMHgyMGU5LCAweDAwMDAsIDB4MjA2OSwgMHgwMjAwLCAweDA4MGMsCi0JMHg5ZGYyLCAweDA0MDEsIDB4MDgwYywgMHg5ZGRkLCAweDAwZTksIDB4MDgwYywgMHg5ZGUwLCAweDAwZDEsCi0JMHgwODBjLCAweDlkZTMsIDB4MDBiOSwgMHgwODBjLCAweDlkZTYsIDB4MDBhMSwgMHgwODBjLCAweDlkZTksCi0JMHgwMDg5LCAweDA4MGMsIDB4OWRlYywgMHgwMDcxLCAweDA4MGMsIDB4OWRlZiwgMHgwMDU5LCAweDAxZGUsCi0JMHgwMTRlLCAweDAxNWUsIDB4MjA2OSwgMHgwMDA0LCAweDJkMDQsIDB4OTA4NSwgMHg4MDAxLCAweDIwNmEsCi0JMHgwMGRlLCAweDAwMDUsIDB4MjBhOSwgMHgwMDIwLCAweDIwYTEsIDB4MDI0MCwgMHgyMDAxLCAweDAwMDAsCi0JMHg0MDA0LCAweDAwMDUsIDB4MDBjNiwgMHg2MDI3LCAweDAwMDEsIDB4NzgwNCwgMHg5MDg0LCAweDAwMDcsCi0JMHgwMDAyLCAweDg0ZjMsIDB4ODUxNywgMHg4NTU4LCAweDg0ZjksIDB4ODUxNywgMHg4NGYzLCAweDg0ZjEsCi0JMHg4NGYxLCAweDA4MGMsIDB4MGRmNiwgMHgwODBjLCAweDgyZDksIDB4MDgwYywgMHg4YjhmLCAweDAwY2UsCi0JMHgwMDA1LCAweDYyYzAsIDB4ODJmZiwgMHgxMTEwLCAweDAwY2UsIDB4MDAwNSwgMHgyMDExLCAweDVjOTgsCi0JMHgwODBjLCAweDgyNTksIDB4NzgyOCwgMHg5MDkyLCAweDAwYzgsIDB4MTIyOCwgMHg4MDAwLCAweDc4MmEsCi0JMHgwODBjLCAweDVjZDgsIDB4MGM4OCwgMHg2MmMwLCAweDA4MGMsIDB4OWRmNiwgMHgwODBjLCAweDVjOTgsCi0JMHg3ODA3LCAweDAwMDMsIDB4NzgyNywgMHgwMDAwLCAweDc4MmIsIDB4MDAwMCwgMHgwYzI4LCAweDA4MGMsCi0JMHg4MmQ5LCAweDYyMjAsIDB4ZDJhNCwgMHgwMTcwLCAweGQyY2MsIDB4MDE2MCwgMHg3ODJiLCAweDAwMDAsCi0JMHg3ODI0LCAweDkwNjUsIDB4MDkwYywgMHgwZGY2LCAweDIwMDksIDB4MDAxMywgMHgwODBjLCAweGEwNjgsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHg3ODI0LCAweDkwNjUsIDB4MDkwYywgMHgwZGY2LCAweDc4MjgsCi0JMHg5MDkyLCAweGMzNTAsIDB4MTJjMCwgMHg4MDAwLCAweDc4MmEsIDB4MDBjZSwgMHgwODBjLCAweDI5ZTksCi0JMHgwMjc4LCAweDAwYzYsIDB4NzkyNCwgMHgyMTYwLCAweDYwMTAsIDB4OTA2ZCwgMHgwOTBjLCAweDBkZjYsCi0JMHg3ODA3LCAweDAwMDAsIDB4NzgyNywgMHgwMDAwLCAweDAwY2UsIDB4MDgwYywgMHg4YjhmLCAweDBjMDAsCi0JMHgwODBjLCAweDk1ZjYsIDB4MDhlOCwgMHgyMDExLCAweDAxMzAsIDB4MjIxNCwgMHgwODBjLCAweDlkZjYsCi0JMHgwODBjLCAweGRiZjAsIDB4MjAwOSwgMHgwMDE0LCAweDA4MGMsIDB4YTA2OCwgMHgwMGNlLCAweDA4ODAsCi0JMHgyMDAxLCAweDE5ZGUsIDB4MjAwMywgMHgwMDAwLCAweDYyYzAsIDB4ODJmZiwgMHgxMTYwLCAweDc4MmIsCi0JMHgwMDAwLCAweDc4MjQsIDB4OTA2NSwgMHgwOTBjLCAweDBkZjYsIDB4MjAwOSwgMHgwMDEzLCAweDA4MGMsCi0JMHhhMGJhLCAweDAwY2UsIDB4MDAwNSwgMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHg3ODI0LCAweDkwMDUsCi0JMHgwOTBjLCAweDBkZjYsIDB4NzgyOCwgMHg5MDkyLCAweGMzNTAsIDB4MTY0OCwgMHg4MDAwLCAweDc4MmEsCi0JMHgwMGRlLCAweDAwY2UsIDB4MDBiZSwgMHgwODBjLCAweDI5ZTksIDB4MDJmMCwgMHgwMGI2LCAweDAwYzYsCi0JMHgwMGQ2LCAweDc4MWMsIDB4OTA1ZCwgMHgwOTBjLCAweDBkZjYsIDB4YjgwMCwgMHhjMGRjLCAweGI4MDIsCi0JMHg3OTI0LCAweDIxNjAsIDB4MDgwYywgMHg5ZmVhLCAweGI5M2MsIDB4ODFmZiwgMHgwOTBjLCAweDBkZjYsCi0JMHg4MTA5LCAweGI5M2UsIDB4NzgwNywgMHgwMDAwLCAweDc4MjcsIDB4MDAwMCwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMGJlLCAweDA4MGMsIDB4OGI4ZiwgMHgwODY4LCAweDA4MGMsIDB4OTVmNiwgMHgwODUwLCAweDIwMTEsCi0JMHgwMTMwLCAweDIyMTQsIDB4MDgwYywgMHg5ZGY2LCAweDA4MGMsIDB4ZGJmMCwgMHg3ODI0LCAweDkwNjUsCi0JMHgyMDA5LCAweDAwMTQsIDB4MDgwYywgMHhhMDY4LCAweDAwZGUsIDB4MDBjZSwgMHgwMGJlLCAweDA4MDQsCi0JMHg4NTY5LCAweDAwYzYsIDB4MjAwMSwgMHgwMDliLCAweDIwMDQsIDB4ZDBmYywgMHgxOTBjLCAweDFkMDAsCi0JMHg2MDI0LCAweDYwMjcsIDB4MDAwMiwgMHhkMGY0LCAweDE1ODAsIDB4NjJjOCwgMHg2MGM0LCAweDkyMDUsCi0JMHgxMTcwLCAweDc4M2MsIDB4OTA2NSwgMHgwMTMwLCAweDIwMDksIDB4MDA0OSwgMHgwODBjLCAweGEwNjgsCi0JMHgwMGNlLCAweDAwMDUsIDB4MjAxMSwgMHgxOWUxLCAweDIwMTMsIDB4MDAwMCwgMHgwY2M4LCAweDc5M2MsCi0JMHg4MWZmLCAweDBkYzAsIDB4Nzk0NCwgMHg5MTkyLCAweDc1MzAsIDB4MTJmMCwgMHg4MTA4LCAweDc5NDYsCi0JMHg3OTNjLCAweDkxODgsIDB4MDAwOCwgMHgyMTBjLCAweDkxOGUsIDB4MDAwNiwgMHgxMTM4LCAweDYwMTQsCi0JMHg5MDg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDEyLCAweDYwMTYsIDB4MGMxMCwgMHg2MDE0LCAweDkwODQsCi0JMHgxOTg0LCAweDkwODUsIDB4MDAxNiwgMHg2MDE2LCAweDA4ZDgsIDB4NzkzYywgMHgyMTYwLCAweDIwMDksCi0JMHgwMDRhLCAweDA4MGMsIDB4YTA2OCwgMHgwOGEwLCAweDc4NDgsIDB4YzA4NSwgMHg3ODRhLCAweDA4ODAsCi0JMHgwMDA2LCAweDAwMTYsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDBmLCAweDAwMDAsCi0JMHgyYzA4LCAweDIwNjEsIDB4MTljMiwgMHg2MDIwLCAweDgwMDAsIDB4NjAyMiwgMHg2MDEwLCAweDkwMDUsCi0JMHgwMTQ4LCAweDkwODAsIDB4MDAwMywgMHgyMTAyLCAweDYxMTIsIDB4MDEyZSwgMHgwMGNlLCAweDAwMWUsCi0JMHgwMDBlLCAweDAwMDUsIDB4NjExNiwgMHg2MTEyLCAweDBjYzAsIDB4MDBkNiwgMHgyMDY5LCAweDE5YzIsCi0JMHhiODAwLCAweGQwZDQsIDB4MDE2OCwgMHg2ODIwLCAweDgwMDAsIDB4NjgyMiwgMHg5MDg2LCAweDAwMDEsCi0JMHgxMTEwLCAweDJiMDAsIDB4NjgxZSwgMHgwMGRlLCAweDA4MDQsIDB4OGI4ZiwgMHgwMGRlLCAweDAwMDUsCi0JMHhjMGQ1LCAweGI4MDIsIDB4NjgxOCwgMHg5MDA1LCAweDAxNjgsIDB4Yjg1NiwgMHhiODViLCAweDAwMDAsCi0JMHgwMDg2LCAweDAwMDYsIDB4MmIwMCwgMHg2ODFhLCAweDAwOGUsIDB4YTA1YSwgMHgwMDhlLCAweDIwNjksCi0JMHgxOWMyLCAweDBjMDgsIDB4Yjg1NiwgMHhiODVhLCAweDJiMDAsIDB4NjgxYSwgMHg2ODFlLCAweDA4ZDgsCi0JMHgwMDA2LCAweDAwMTYsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDBmLCAweDAwMDAsCi0JMHgyYzA4LCAweDIwNjEsIDB4MTljMiwgMHg2MDIwLCAweDgwMDAsIDB4NjAyMiwgMHg2MDA4LCAweDkwMDUsCi0JMHgwMTQ4LCAweDkwODAsIDB4MDAwMywgMHgyMTAyLCAweDYxMGEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMWUsCi0JMHgwMDBlLCAweDAwMDUsIDB4NjEwZSwgMHg2MTBhLCAweDBjYzAsIDB4MDBjNiwgMHg2MDBmLCAweDAwMDAsCi0JMHgyYzA4LCAweDIwNjEsIDB4MTljMiwgMHg2MDM0LCAweDkwMDUsIDB4MDEzMCwgMHg5MDgwLCAweDAwMDMsCi0JMHgyMTAyLCAweDYxMzYsIDB4MDBjZSwgMHgwMDA1LCAweDYxM2EsIDB4NjEzNiwgMHgwMGNlLCAweDAwMDUsCi0JMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwYjYsIDB4MDA5NiwgMHgwMDc2LCAweDAwNjYsCi0JMHgwMDU2LCAweDAwMzYsIDB4MDAyNiwgMHgwMDE2LCAweDAwMDYsIDB4MDEyNiwgMHg5MDJlLCAweDIwNzEsCi0JMHgxOWMyLCAweDc2MzgsIDB4MjY2MCwgMHgyNjc4LCAweDIwOTEsIDB4ODAwMCwgMHg4Y2ZmLCAweDA5MDQsCi0JMHg4NmVjLCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweDkyMDYsIDB4MTkwNCwgMHg4NmU3LCAweDg3ZmYsCi0JMHgwMTIwLCAweDYwNTQsIDB4OTEwNiwgMHgxOTA0LCAweDg2ZTcsIDB4NzAzYywgMHg5YzA2LCAweDExNzgsCi0JMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwODBjLCAweDk4YjEsIDB4NzAzMywgMHgwMDAwLCAweDkwMDYsCi0JMHg3MDNlLCAweDcwNDIsIDB4NzA0NiwgMHg3MDRhLCAweDAwM2UsIDB4MjAyOSwgMHgwMDAxLCAweDcwMzgsCi0JMHg5YzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjNhLCAweDcwMzQsIDB4OWMzNiwgMHgxMTQwLCAweDJjMDAsCi0JMHg5ZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDM2LCAweDAwMTAsIDB4NzAzNywgMHgwMDAwLCAweDY2MGMsCi0JMHgwMDY2LCAweDJjMDAsIDB4OWYwNiwgMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDYwMGYsCi0JMHgwMDAwLCAweDA4MGMsIDB4YmQ0ZSwgMHgwMWYwLCAweDYwMTQsIDB4MjA0OCwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDAzLCAweDE1YjgsIDB4NjAwNCwgMHg5MDg2LCAweDAwNDAsIDB4MDkwYywgMHg5YTdmLCAweGE4NjcsCi0JMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDAwMTYsIDB4MDAzNiwgMHgwMDc2LCAweDA4MGMsCi0JMHhjMDQ0LCAweDA4MGMsIDB4ZGFlMSwgMHgwODBjLCAweDZhMjIsIDB4MDA3ZSwgMHgwMDNlLCAweDAwMWUsCi0JMHgwODBjLCAweGJmMzksIDB4MDgwYywgMHhhMDFjLCAweDAwY2UsIDB4MDgwNCwgMHg4Njg2LCAweDJjNzgsCi0JMHg2MDBjLCAweDIwNjAsIDB4MDgwNCwgMHg4Njg2LCAweDg1ZmYsIDB4MDEyMCwgMHgwMDM2LCAweDA4MGMsCi0JMHg4YzZjLCAweDAwM2UsIDB4MDEyZSwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLCAweDAwNWUsCi0JMHgwMDZlLCAweDAwN2UsIDB4MDA5ZSwgMHgwMGJlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA2LCAweDExNTgsIDB4MDAxNiwgMHgwMDM2LCAweDAwNzYsCi0JMHgwODBjLCAweGRhZTEsIDB4MDgwYywgMHhkN2UyLCAweDAwN2UsIDB4MDAzZSwgMHgwMDFlLCAweDA4OTAsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwOTA0LCAweDg2ZDEsIDB4MDgwNCwgMHg4NmNhLCAweDAwMDYsCi0JMHgwMDY2LCAweDAwOTYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZjYsIDB4OTAzNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNzksIDB4MTljMiwgMHg3ODM4LCAweDkwNjUsIDB4MDkwNCwgMHg4NzZjLCAweDYwMGMsCi0JMHgwMDA2LCAweDYwMGYsIDB4MDAwMCwgMHg3ODNjLCAweDljMDYsIDB4MTE2OCwgMHgwMDM2LCAweDIwMTksCi0JMHgwMDAxLCAweDA4MGMsIDB4OThiMSwgMHg3ODMzLCAweDAwMDAsIDB4OTAxZSwgMHg3YjNlLCAweDdiNDIsCi0JMHg3YjQ2LCAweDdiNGEsIDB4MDAzZSwgMHgwODBjLCAweGJkNGUsIDB4MDU0OCwgMHg2MDE0LCAweDIwNDgsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwMywgMHgxNTkwLCAweDNlMDgsIDB4OTE4ZSwgMHgwMDAyLCAweDExODgsCi0JMHg2MDEwLCAweDkwMDUsIDB4MDE3MCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsCi0JMHgwMTQwLCAweDYwNDAsIDB4OTAwNSwgMHgxMWE4LCAweDIwMDEsIDB4MTk2MiwgMHgyMDA0LCAweDYwNDIsCi0JMHgwMDgwLCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLCAweDA5MGMsIDB4OWE3ZiwgMHhhODY3LCAweDAxMDMsCi0JMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweDZhMTUsIDB4MDgwYywgMHhiZjM5LCAweDA4MGMsCi0JMHhhMDFjLCAweDAwMGUsIDB4MDgwNCwgMHg4NzI0LCAweDdlM2EsIDB4N2UzNiwgMHgwMTJlLCAweDAwZmUsCi0JMHgwMGRlLCAweDAwY2UsIDB4MDA5ZSwgMHgwMDZlLCAweDAwMGUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDA2LCAweDExMTgsIDB4MDgwYywgMHhkN2UyLCAweDBjNTAsIDB4NjAyMCwgMHg5MDg2LCAweDAwMGEsCi0JMHgwOWY4LCAweDA4YjgsIDB4MDAxNiwgMHgwMDI2LCAweDAwODYsIDB4OTA0NiwgMHgwMDk5LCAweDA4MGMsCi0JMHg4ODZkLCAweDAwOGUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsIDB4MDBmNiwgMHgwMTI2LCAweDIwNzksCi0JMHgxOWMyLCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDg5MDQsIDB4MDgwYywgMHg4OTk0LCAweDAxMmUsCi0JMHgwMGZlLCAweDAwMDUsIDB4MDBiNiwgMHgwMDk2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsCi0JMHgwMDY2LCAweDAwMTYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE5YzIsCi0JMHg3NjE0LCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDA5MDQsIDB4ODgzMiwgMHg2MDEwLCAweDIwNTgsCi0JMHhiOGEwLCAweDkyMDYsIDB4MTkwNCwgMHg4ODJkLCAweDg4ZmYsIDB4MDEyMCwgMHg2MDU0LCAweDkxMDYsCi0JMHgxOTA0LCAweDg4MmQsIDB4NzAyNCwgMHg5YzA2LCAweDE1NjgsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjAsCi0JMHhkMGE0LCAweDAxMTAsIDB4ZDBjYywgMHgxNTA4LCAweDA4MGMsIDB4ODJkOSwgMHgwODBjLCAweDk2MWEsCi0JMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHg5YTdmLCAweDcwMjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksCi0JMHgwMTQwLCAweDZiMDQsIDB4OTM4NCwgMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsCi0JMHgyYjZmLCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsCi0JMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLCAweDAwMjgsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsCi0JMHgwODA0LCAweDg4MmQsIDB4NzAxNCwgMHg5YzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjE2LCAweDcwMTAsCi0JMHg5YzM2LCAweDExNDAsIDB4MmMwMCwgMHg5ZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDEyLCAweDAwMTAsCi0JMHg3MDEzLCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4OWYwNiwgMHgwMTEwLCAweDdlMGUsCi0JMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGJkNGUsCi0JMHgwMWU4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDAzLCAweDE1ODAsIDB4MDgwYywgMHhiZjU2LCAweDExMTgsCi0JMHgwODBjLCAweGE5YTcsIDB4MDA5OCwgMHhhODY3LCAweDAxMDMsIDB4YWI3YSwgMHhhODc3LCAweDAwMDAsCi0JMHgwMDE2LCAweDAwMzYsIDB4MDA4NiwgMHgwODBjLCAweGMwNDQsIDB4MDgwYywgMHhkYWUxLCAweDA4MGMsCi0JMHg2YTIyLCAweDAwOGUsIDB4MDAzZSwgMHgwMDFlLCAweDA4MGMsIDB4YmYzOSwgMHgwODBjLCAweGEwMWMsCi0JMHgwODBjLCAweDk5NTUsIDB4MDBjZSwgMHgwODA0LCAweDg3YWIsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsCi0JMHgwODA0LCAweDg3YWIsIDB4MDEyZSwgMHgwMDBlLCAweDAwMWUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsCi0JMHgwMGVlLCAweDAwZmUsIDB4MDA5ZSwgMHgwMGJlLCAweDAwMDUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsCi0JMHgxMTU4LCAweDAwMTYsIDB4MDAzNiwgMHgwMDg2LCAweDA4MGMsIDB4ZGFlMSwgMHgwODBjLCAweGQ3ZTIsCi0JMHgwMDhlLCAweDAwM2UsIDB4MDAxZSwgMHgwOGQwLCAweDA4MGMsIDB4YTlhNywgMHg2MDIwLCAweDkwODYsCi0JMHgwMDAyLCAweDExNjAsIDB4NjAwNCwgMHgwMDA2LCAweDkwODYsIDB4MDA4NSwgMHgwMDBlLCAweDA5MDQsCi0JMHg4ODEzLCAweDkwODYsIDB4MDA4YiwgMHgwOTA0LCAweDg4MTMsIDB4MDg0MCwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDA1LCAweDE5MjAsIDB4NjAwNCwgMHgwMDA2LCAweDkwODYsIDB4MDA4NSwgMHgwMDBlLCAweDA5YzgsCi0JMHg5MDg2LCAweDAwOGIsIDB4MDliMCwgMHgwODA0LCAweDg4MjYsIDB4MDBiNiwgMHgwMGE2LCAweDAwOTYsCi0JMHgwMGM2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4OTI4MCwgMHgxMDAwLCAweDIwMDQsCi0JMHg5MDVkLCAweDA5MDQsIDB4ODhmZCwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMDY2LCAweDIwNzEsCi0JMHgxOWMyLCAweGJlNTQsIDB4NzAxOCwgMHg5YjA2LCAweDExMDgsIDB4NzYxYSwgMHg3MDFjLCAweDliMDYsCi0JMHgxMTMwLCAweDg2ZmYsIDB4MTExOCwgMHg3MDE4LCAweDcwMWUsIDB4MDAwOCwgMHg3NjFlLCAweGI4NTgsCi0JMHg5MDRkLCAweDAxMDgsIDB4YWU1NiwgMHg5NmQ1LCAweDAwMDAsIDB4MDExMCwgMHgyOTAwLCAweGIwNWEsCi0JMHhiODU3LCAweDAwMDAsIDB4Yjg1YiwgMHgwMDAwLCAweGI4MDAsIDB4YzBkNCwgMHhjMGRjLCAweGI4MDIsCi0JMHgwODBjLCAweDYyZDYsIDB4MDkwNCwgMHg4OGY5LCAweDc2MjQsIDB4ODZmZiwgMHgwOTA0LCAweDg4ZTgsCi0JMHg5NjgwLCAweDAwMDUsIDB4MjAwNCwgMHg5OTA2LCAweDE1ZDgsIDB4MDBkNiwgMHgyMDY5LCAweDAxMDAsCi0JMHg2OGMwLCAweDkwMDUsIDB4MDU2MCwgMHgwODBjLCAweDgyZDksIDB4MDgwYywgMHg5NjFhLCAweDY4YzMsCi0JMHgwMDAwLCAweDA4MGMsIDB4OWE3ZiwgMHg3MDI3LCAweDAwMDAsIDB4MDAzNiwgMHgyMDY5LCAweDAxNDAsCi0JMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJiNmYsCi0JMHg5MDA2LCAweDA4MGMsIDB4MmI2ZiwgMHgyMDY5LCAweDAxMDAsIDB4NjgyNCwgMHhkMDg0LCAweDAxMTAsCi0JMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHgwMGRlLCAweDAwYzYsIDB4YjgzYywgMHg5MDA1LCAweDAxMTAsCi0JMHg4MDAxLCAweGI4M2UsIDB4MjY2MCwgMHgwODBjLCAweGEwMWMsIDB4MDBjZSwgMHgwMDQ4LCAweDAwZGUsCi0JMHgwMGM2LCAweDI2NjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsIDB4MDBjZSwgMHgwODA0LCAweDg4YTAsCi0JMHg4OWZmLCAweDAxNTgsIDB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsCi0JMHhjMDQ0LCAweDA4MGMsIDB4ZGFlMSwgMHgwODBjLCAweDZhMjIsIDB4MDgwYywgMHg5OTU1LCAweDA4MDQsCi0JMHg4OGEwLCAweDAwNmUsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDEyZSwgMHgwMDBlLCAweDAwY2UsCi0JMHgwMDllLCAweDAwYWUsIDB4MDBiZSwgMHgwMDA1LCAweDAwOTYsIDB4MDAwNiwgMHgwMDY2LCAweDAwYzYsCi0JMHgwMGQ2LCAweDkwMzYsIDB4NzgxNCwgMHg5MDY1LCAweDA5MDQsIDB4ODk2NywgMHg2MDBjLCAweDAwMDYsCi0JMHg2MDBmLCAweDAwMDAsIDB4NzgyNCwgMHg5YzA2LCAweDE1ODAsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjAsCi0JMHhkMGE0LCAweDAxMTAsIDB4ZDBjYywgMHgxNTA4LCAweDA4MGMsIDB4ODJkOSwgMHgwODBjLCAweDk2MWEsCi0JMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHg5YTdmLCAweDc4MjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksCi0JMHgwMTQwLCAweDZiMDQsIDB4OTM4NCwgMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsCi0JMHgyYjZmLCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsCi0JMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLCAweDAwNDAsIDB4MDgwYywgMHg2NjdmLCAweDE1MjAsCi0JMHg2MDAzLCAweDAwMDksIDB4NjMwYSwgMHgyYzMwLCAweDAwZjgsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsCi0JMHhiZDRjLCAweDAxYjAsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDMsIDB4MTUwOCwgMHgwODBjLCAweGJmNTYsCi0JMHgxMTE4LCAweDA4MGMsIDB4YTlhNywgMHgwMDYwLCAweDA4MGMsIDB4NjY3ZiwgMHgxMTY4LCAweGE4NjcsCi0JMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NmEyMiwgMHgwODBjLCAweGJmMzksCi0JMHgwODBjLCAweGEwMWMsIDB4MDgwYywgMHg5OTU1LCAweDAwMGUsIDB4MDgwNCwgMHg4OTBiLCAweDdlMTYsCi0JMHg3ZTEyLCAweDAwZGUsIDB4MDBjZSwgMHgwMDZlLCAweDAwMGUsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMjAsCi0JMHg5MDg2LCAweDAwMDYsIDB4MTExOCwgMHgwODBjLCAweGQ3ZTIsIDB4MGM1MCwgMHgwODBjLCAweGE5YTcsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwMiwgMHgxMTUwLCAweDYwMDQsIDB4MDAwNiwgMHg5MDg2LCAweDAwODUsCi0JMHgwMDBlLCAweDA5OTAsIDB4OTA4NiwgMHgwMDhiLCAweDA5NzgsIDB4MDhkMCwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDA1LCAweDE5YjAsIDB4NjAwNCwgMHgwMDA2LCAweDkwODYsIDB4MDA4NSwgMHgwMDBlLCAweDBkMTgsCi0JMHg5MDg2LCAweDAwOGIsIDB4MGQwMCwgMHgwODYwLCAweDAwMDYsIDB4MDA2NiwgMHgwMDk2LCAweDAwYjYsCi0JMHgwMGM2LCAweDAwZDYsIDB4NzgxOCwgMHg5MDVkLCAweDA5MDQsIDB4OGExNCwgMHhiODU0LCAweDAwMDYsCi0JMHg5MDA2LCAweGI4NTYsIDB4Yjg1YSwgMHhiODAwLCAweGMwZDQsIDB4YzBkYywgMHhiODAyLCAweDA4MGMsCi0JMHg2MmQ2LCAweDA5MDQsIDB4OGExMSwgMHg3ZTI0LCAweDg2ZmYsIDB4MDkwNCwgMHg4YTA0LCAweDk2ODAsCi0JMHgwMDA1LCAweDIwMDQsIDB4OTkwNiwgMHgxOTA0LCAweDhhMDQsIDB4MDBkNiwgMHgyMDY5LCAweDAxMDAsCi0JMHg2OGMwLCAweDkwMDUsIDB4MDkwNCwgMHg4OWZiLCAweDA4MGMsIDB4ODJkOSwgMHgwODBjLCAweDk2MWEsCi0JMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHg5YTdmLCAweDc4MjcsIDB4MDAwMCwgMHgwMDM2LCAweDIwNjksCi0JMHgwMTQwLCAweDZiMDQsIDB4OTM4NCwgMHgxMDAwLCAweDAxMzgsIDB4MjAwMSwgMHgwMTAwLCAweDA4MGMsCi0JMHgyYjZmLCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDIwNjksIDB4MDEwMCwgMHg2ODI0LCAweGQwODQsCi0JMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLCAweDAwZGUsIDB4MDBjNiwgMHgzZTA4LCAweDkxOGUsCi0JMHgwMDAyLCAweDExNjgsIDB4YjgwMCwgMHhkMGJjLCAweDAxNTAsIDB4OTY4MCwgMHgwMDEwLCAweDIwMGMsCi0JMHg4MWZmLCAweDE1MTgsIDB4MjAwOSwgMHgxOTYyLCAweDIxMGMsIDB4MjEwMiwgMHgwMGYwLCAweGI4M2MsCi0JMHg5MDA1LCAweDAxMTAsIDB4ODAwMSwgMHhiODNlLCAweDI2NjAsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsCi0JMHhhMDFjLCAweDAwY2UsIDB4MDA0OCwgMHgwMGRlLCAweDAwYzYsIDB4MjY2MCwgMHg2MDAzLCAweDAwMDksCi0JMHg2MzBhLCAweDAwY2UsIDB4MDgwNCwgMHg4OWE3LCAweDg5ZmYsIDB4MDEzOCwgMHhhODY3LCAweDAxMDMsCi0JMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweDZhMjIsIDB4MDgwYywgMHg5OTU1LCAweDA4MDQsCi0JMHg4OWE3LCAweDAwMGUsIDB4MDgwNCwgMHg4OTliLCAweDc4MWUsIDB4NzgxYSwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMGJlLCAweDAwOWUsIDB4MDA2ZSwgMHgwMDBlLCAweDAwMDUsIDB4MDBlNiwgMHgwMGQ2LCAweDAwOTYsCi0JMHgwMDY2LCAweGI4MDAsIDB4ZDBkYywgMHgwMWEwLCAweGI4NGMsIDB4OTA0ZCwgMHgwMTg4LCAweGE4NzgsCi0JMHg5NjA2LCAweDExNzAsIDB4MjA3MSwgMHgxOWMyLCAweDcwMjQsIDB4OTAzNSwgMHgwMTQ4LCAweDkwODAsCi0JMHgwMDA1LCAweDIwMDQsIDB4OTkwNiwgMHgxMTIwLCAweGI4MDAsIDB4YzBkYywgMHhiODAyLCAweDAwMjksCi0JMHgwMDZlLCAweDAwOWUsIDB4MDBkZSwgMHgwMGVlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAxMDAsCi0JMHg3OGMwLCAweDkwMDUsIDB4MTEzOCwgMHgwMGM2LCAweDI2NjAsIDB4NjAwMywgMHgwMDA5LCAweDYzMGEsCi0JMHgwMGNlLCAweDA0YjgsIDB4MDgwYywgMHg5NjFhLCAweDc4YzMsIDB4MDAwMCwgMHgwODBjLCAweDlhN2YsCi0JMHg3MDI3LCAweDAwMDAsIDB4MDAzNiwgMHgyMDc5LCAweDAxNDAsIDB4N2IwNCwgMHg5Mzg0LCAweDEwMDAsCi0JMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJiNmYsIDB4OTAwNiwgMHgwODBjLCAweDJiNmYsCi0JMHgyMDc5LCAweDAxMDAsIDB4NzgyNCwgMHhkMDg0LCAweDAxMTAsIDB4NzgyNywgMHgwMDAxLCAweDA4MGMsCi0JMHg5YTdmLCAweDAwM2UsIDB4MDgwYywgMHg2MmQ2LCAweDAwYzYsIDB4YjgzYywgMHg5MDA1LCAweDAxMTAsCi0JMHg4MDAxLCAweGI4M2UsIDB4MjY2MCwgMHgwODBjLCAweDlmZWEsIDB4MDBjZSwgMHhhODY3LCAweDAxMDMsCi0JMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweGMwNDQsIDB4MDgwYywgMHg2YTIyLCAweDA4MGMsCi0JMHg5OTU1LCAweDAwZmUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZTYsIDB4MDBjNiwgMHgyMDExLCAweDAxMDEsCi0JMHgyMjA0LCAweGMwYzQsIDB4MjAxMiwgMHgyMDAxLCAweDE4MGMsIDB4MjAxNCwgMHhjMmU0LCAweDIyMDIsCi0JMHgyMDcxLCAweDE5YzIsIDB4NzAwNCwgMHg5MDg0LCAweDAwMDcsIDB4MDAwMiwgMHg4YWEwLCAweDhhYTQsCi0JMHg4YWMyLCAweDhhZWIsIDB4OGIyOSwgMHg4YWEwLCAweDhhYmIsIDB4OGE5ZSwgMHgwODBjLCAweDBkZjYsCi0JMHgwMGNlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDcwMjQsIDB4OTA2NSwgMHgwMTQ4LCAweDcwMjAsCi0JMHg4MDAxLCAweDcwMjIsIDB4NjAwYywgMHg5MDE1LCAweDAxNTgsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsCi0JMHg3MDA3LCAweDAwMDAsIDB4NzAyNywgMHgwMDAwLCAweDAwY2UsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsCi0JMHg3MjE2LCAweDcyMTIsIDB4MGNhOCwgMHg3MDA3LCAweDAwMDAsIDB4NzAyNywgMHgwMDAwLCAweDcwMjAsCi0JMHg5MDA1LCAweDAwNzAsIDB4NjAxMCwgMHgyMDU4LCAweDA4MGMsIDB4NjJkNiwgMHhiODAwLCAweGMwZGMsCi0JMHhiODAyLCAweDcwMDcsIDB4MDAwMCwgMHg3MDI3LCAweDAwMDAsIDB4NzAyMCwgMHg4MDAxLCAweDcwMjIsCi0JMHgxMTQ4LCAweDIwMDEsIDB4MTgwYywgMHgyMDE0LCAweGQyZWMsIDB4MTE4MCwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMGJlLCAweDAwMDUsIDB4Yjg1NCwgMHg5MDE1LCAweDAxMjAsIDB4NzIxZSwgMHgwODBjLCAweDhiOGYsCi0JMHgwY2E4LCAweDcyMTgsIDB4NzIxZSwgMHgwODBjLCAweDhiOGYsIDB4MGM4MCwgMHhjMmVjLCAweDIyMDIsCi0JMHgwODBjLCAweDhjNmMsIDB4MGM1OCwgMHg3MDI0LCAweDkwNjUsIDB4MDViOCwgMHg3MDBjLCAweDljMDYsCi0JMHgxMTYwLCAweDA4MGMsIDB4OTk1NSwgMHg2MDBjLCAweDkwMTUsIDB4MDEyMCwgMHg3MjBlLCAweDYwMGYsCi0JMHgwMDAwLCAweDA0NDgsIDB4NzIwZSwgMHg3MjBhLCAweDA0MzAsIDB4NzAxNCwgMHg5YzA2LCAweDExNjAsCi0JMHgwODBjLCAweDk5NTUsIDB4NjAwYywgMHg5MDE1LCAweDAxMjAsIDB4NzIxNiwgMHg2MDBmLCAweDAwMDAsCi0JMHgwMGQwLCAweDcyMTYsIDB4NzIxMiwgMHgwMGI4LCAweDYwMjAsIDB4OTA4NiwgMHgwMDAzLCAweDExOTgsCi0JMHg2MDEwLCAweDIwNTgsIDB4MDgwYywgMHg2MmQ2LCAweGI4MDAsIDB4YzBkYywgMHhiODAyLCAweDA4MGMsCi0JMHg5OTU1LCAweDcwMWMsIDB4OTA2NSwgMHgwMTM4LCAweGI4NTQsIDB4OTAxNSwgMHgwMTEwLCAweDcyMWUsCi0JMHgwMDEwLCAweDcyMTgsIDB4NzIxZSwgMHg3MDI3LCAweDAwMDAsIDB4MDBjZSwgMHgwMGVlLCAweDAwYmUsCi0JMHgwMDA1LCAweDcwMjQsIDB4OTA2NSwgMHgwMTQwLCAweDA4MGMsIDB4OTk1NSwgMHg2MDBjLCAweDkwMTUsCi0JMHgwMTU4LCAweDcyMGUsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4OWE3ZiwgMHg3MDI3LCAweDAwMDAsCi0JMHgwMGNlLCAweDAwZWUsIDB4MDBiZSwgMHgwMDA1LCAweDcyMGUsIDB4NzIwYSwgMHgwY2E4LCAweDAwZDYsCi0JMHgyMDY5LCAweDE5YzIsIDB4NjgzMCwgMHg5MDg0LCAweDAwMDMsIDB4MDAwMiwgMHg4YjRjLCAweDhiNGUsCi0JMHg4YjcyLCAweDhiNGEsIDB4MDgwYywgMHgwZGY2LCAweDAwZGUsIDB4MDAwNSwgMHgwMGM2LCAweDY4NDAsCi0JMHg5MDg2LCAweDAwMDEsIDB4MDFiOCwgMHg2ODNjLCAweDkwNjUsIDB4MDEzMCwgMHg2MDBjLCAweDkwMTUsCi0JMHgwMTcwLCAweDZhM2EsIDB4NjAwZiwgMHgwMDAwLCAweDY4MzMsIDB4MDAwMCwgMHg2ODNmLCAweDAwMDAsCi0JMHgyMDExLCAweDE5ZTEsIDB4MjAxMywgMHgwMDAwLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDY4M2EsCi0JMHg2ODM2LCAweDBjOTAsIDB4Njg0MywgMHgwMDAwLCAweDY4MzgsIDB4OTA2NSwgMHgwZDY4LCAweDYwMDMsCi0JMHgwMDAzLCAweDBjNTAsIDB4MDBjNiwgMHg5MDA2LCAweDY4NDIsIDB4Njg0NiwgMHg2ODRhLCAweDY4M2MsCi0JMHg5MDY1LCAweDAxNjAsIDB4NjAwYywgMHg5MDE1LCAweDAxMzAsIDB4NmEzYSwgMHg2MDBmLCAweDAwMDAsCi0JMHg2ODNmLCAweDAwMDAsIDB4MDAxOCwgMHg2ODNlLCAweDY4M2EsIDB4NjgzNiwgMHgwMGNlLCAweDAwZGUsCi0JMHgwMDA1LCAweDIwMDEsIDB4MTgwYywgMHgyMDBjLCAweGMxZTUsIDB4MjEwMiwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4ZDFlYywgMHgwMTIwLCAweGMxZWMsIDB4MjEwMiwgMHgwODBjLCAweDhjNmMsCi0JMHgyMDAxLCAweDE5Y2UsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDEsIDB4MGQ1OCwgMHgwMGQ2LCAweDIwNjksCi0JMHgxOWMyLCAweDY4MDQsIDB4OTA4NCwgMHgwMDA3LCAweDAwMDIsIDB4OGJhZiwgMHg4YzU0LCAweDhjNTQsCi0JMHg4YzU0LCAweDhjNTQsIDB4OGM1NiwgMHg4YzU0LCAweDhiYWQsIDB4MDgwYywgMHgwZGY2LCAweDY4MjAsCi0JMHg5MDA1LCAweDExMTAsIDB4MDBkZSwgMHgwMDA1LCAweDAwYzYsIDB4NjgwYywgMHg5MDY1LCAweDAxNTAsCi0JMHg2ODA3LCAweDAwMDQsIDB4NjgyNiwgMHg2ODJiLCAweDAwMDAsIDB4MDgwYywgMHg4Y2MzLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwMDUsIDB4NjgxNCwgMHg5MDY1LCAweDAxNTAsIDB4NjgwNywgMHgwMDAxLCAweDY4MjYsCi0JMHg2ODJiLCAweDAwMDAsIDB4MDgwYywgMHg4Y2MzLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMGU2LCAweDZhMWMsIDB4OTJkZCwgMHgwMDAwLCAweDA5MDQsIDB4OGMzZSwgMHhiODRjLCAweDkwMGQsCi0JMHgwMTE4LCAweGI4ODgsIDB4OTAwNSwgMHgwMWEwLCAweGI4NTQsIDB4OTA1ZCwgMHgwMTIwLCAweDkyMGUsCi0JMHgwOTA0LCAweDhjM2UsIDB4MDAyOCwgMHg2ODE4LCAweDkyMGUsIDB4MDkwNCwgMHg4YzNlLCAweDIwNTgsCi0JMHhiODRjLCAweDkwMGQsIDB4MGQ4OCwgMHhiODg4LCAweDkwMDUsIDB4MWQ3MCwgMHgyYjAwLCAweDY4MWUsCi0JMHhiYjNjLCAweGI4MzgsIDB4OTMwMiwgMHgxZTQwLCAweDA4MGMsIDB4OWZjMSwgMHgwOTA0LCAweDhjM2UsCi0JMHg4MzE4LCAweGJiM2UsIDB4NjExNiwgMHgyYjEwLCAweDYyMTIsIDB4MDA5NiwgMHgyMTQ4LCAweGE4ODAsCi0JMHg5MDg0LCAweDAwZmYsIDB4NjA1ZSwgMHhhODgzLCAweDAwMDAsIDB4YTg4NCwgMHgwMDllLCAweDkwOGEsCi0JMHgxOTlhLCAweDAyMTAsIDB4MjAwMSwgMHgxOTk5LCAweDgwMDMsIDB4ODAxYiwgMHg4MzFiLCAweDkzMTgsCi0JMHg2MzFhLCAweDYxMTQsIDB4MDA5NiwgMHgyMTQ4LCAweGE5NjQsIDB4MDA5ZSwgMHg5MThjLCAweDAwZmYsCi0JMHg5MThlLCAweDAwNDgsIDB4MDUzOCwgMHgwMGY2LCAweDJjNzgsIDB4MjA2MSwgMHgwMTAwLCAweGJhYjAsCi0JMHg2MjlhLCAweDIwNjksIDB4MDIwMCwgMHgyMDcxLCAweDAyNDAsIDB4MDgwYywgMHg5MjNmLCAweDIwNjksCi0JMHgxOWMyLCAweGJiMDAsIDB4YzNkZCwgMHhiYjAyLCAweDY4MDcsIDB4MDAwMiwgMHgyZjE4LCAweDZiMjYsCi0JMHg2ODJiLCAweDAwMDAsIDB4NzgyMywgMHgwMDAzLCAweDc4MDMsIDB4MDAwMSwgMHg3ODA3LCAweDAwNDAsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDBiZSwgMHgwMGNlLCAweDAwZGUsIDB4MDAwNSwgMHgwMGVlLCAweDAwYmUsCi0JMHgwMGNlLCAweDBjZDAsIDB4NjgwNywgMHgwMDA2LCAweDJjMTgsIDB4NmIyNiwgMHg2ODIwLCAweDgwMDEsCi0JMHg2ODIyLCAweDY4MmIsIDB4MDAwMCwgMHgwODBjLCAweDYyZDYsIDB4MDgwYywgMHg5ZTE2LCAweDAwZWUsCi0JMHgwMGJlLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDAwZGUsIDB4MDAwNSwgMHgwMGM2LCAweDY4MGMsCi0JMHg5MDY1LCAweDAxMzgsIDB4NjgwNywgMHgwMDA0LCAweDY4MjYsIDB4NjgyYiwgMHgwMDAwLCAweDA4MGMsCi0JMHg4Y2MzLCAweDAwY2UsIDB4MDBkZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgwYywgMHgyMDE0LCAweGMyZWQsCi0JMHgyMjAyLCAweDAwZGUsIDB4MDBmZSwgMHgwMDA1LCAweDAwZjYsIDB4MDBkNiwgMHgyMDY5LCAweDE5YzIsCi0JMHg2ODMwLCAweDkwODYsIDB4MDAwMCwgMHgxNTQ4LCAweDIwMDEsIDB4MTgwYywgMHgyMDE0LCAweGQyZTQsCi0JMHgwMTMwLCAweGMyZTQsIDB4MjIwMiwgMHgwODBjLCAweDhiOWUsIDB4MjA2OSwgMHgxOWMyLCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4ZDFjNCwgMHgxMWUwLCAweDY4MzgsIDB4OTA3ZCwgMHgwMWIwLCAweDZhMDQsCi0JMHg5Mjk2LCAweDAwMDAsIDB4MTU2OCwgMHg2ODMzLCAweDAwMDEsIDB4NjgzZSwgMHg2ODQ3LCAweDAwMDAsCi0JMHg2ODRiLCAweDAwMDAsIDB4MDEyNiwgMHgwMGY2LCAweDIwOTEsIDB4MjQwMCwgMHgwMDJlLCAweDA4MGMsCi0JMHgxYjBhLCAweDExNTgsIDB4MDEyZSwgMHgwODBjLCAweDk0NzcsIDB4MDBkZSwgMHgwMGZlLCAweDAwMDUsCi0JMHhjMWM0LCAweDIxMDIsIDB4MDgwYywgMHg3MjQ2LCAweDA4ZjgsIDB4MDEyZSwgMHg2ODQzLCAweDAwMDAsCi0JMHg3ODAzLCAweDAwMDIsIDB4NzgwYywgMHg5MDE1LCAweDAxNDAsIDB4NmEzYSwgMHg3ODBmLCAweDAwMDAsCi0JMHg2ODMzLCAweDAwMDAsIDB4NjgzZiwgMHgwMDAwLCAweDBjNDAsIDB4NjgzYSwgMHg2ODM2LCAweDBjYzAsCi0JMHg2YTA0LCAweDkyOTYsIDB4MDAwNiwgMHgxOTA0LCAweDhjNjQsIDB4NmEzMCwgMHg5Mjk2LCAweDAwMDAsCi0JMHgwOTUwLCAweDA4MDQsIDB4OGM2NCwgMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDBiLCAweDAwMDUsCi0JMHg4Y2Q3LCAweDhjZGMsIDB4OTE2ZiwgMHg5MjA4LCAweDhjZGMsIDB4OTE2ZiwgMHg5MjA4LCAweDhjZDcsCi0JMHg4Y2RjLCAweDhjZDcsIDB4OGNkNywgMHg4Y2Q3LCAweDhjZDcsIDB4OGNkNywgMHg4Y2Q3LCAweDA4MGMsCi0JMHg4YTgzLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDAwYjYsIDB4MDE1NiwgMHgwMTM2LCAweDAxNDYsCi0JMHgwMWM2LCAweDAxZDYsIDB4MDBjNiwgMHgwMGQ2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDY5LCAweDAyMDAsCi0JMHgyMDcxLCAweDAyNDAsIDB4NjAwNCwgMHg5MDhhLCAweDAwNTMsIDB4MWEwYywgMHgwZGY2LCAweDYxMTAsCi0JMHgyMTU4LCAweGI5YjAsIDB4MmM3OCwgMHgyMDYxLCAweDAxMDAsIDB4NjE5YSwgMHg5MDhhLCAweDAwNDAsCi0JMHgxYTA0LCAweDhkNDgsIDB4MDA1YiwgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAxZGUsCi0JMHgwMWNlLCAweDAxNGUsIDB4MDEzZSwgMHgwMTVlLCAweDAwYmUsIDB4MDAwNSwgMHg4ZWUzLCAweDhmMWUsCi0JMHg4ZjQ3LCAweDkwMDAsIDB4OTAyMSwgMHg5MDI3LCAweDkwMzQsIDB4OTAzYywgMHg5MDQ4LCAweDkwNGUsCi0JMHg5MDVmLCAweDkwNGUsIDB4OTBiNiwgMHg5MDNjLCAweDkwYzIsIDB4OTBjOCwgMHg5MDQ4LCAweDkwYzgsCi0JMHg5MGQ0LCAweDhkNDYsIDB4OGQ0NiwgMHg4ZDQ2LCAweDhkNDYsIDB4OGQ0NiwgMHg4ZDQ2LCAweDhkNDYsCi0JMHg4ZDQ2LCAweDhkNDYsIDB4OGQ0NiwgMHg4ZDQ2LCAweDk3NjgsIDB4OTc4YiwgMHg5NzljLCAweDk3YmMsCi0JMHg5N2VlLCAweDkwMzQsIDB4OGQ0NiwgMHg5MDM0LCAweDkwNGUsIDB4OGQ0NiwgMHg4ZjQ3LCAweDkwMDAsCi0JMHg4ZDQ2LCAweDliNzYsIDB4OTA0ZSwgMHg4ZDQ2LCAweDliOTIsIDB4OTA0ZSwgMHg4ZDQ2LCAweDkwNDgsCi0JMHg4ZWRkLCAweDhkNjksIDB4OGQ0NiwgMHg5YmFlLCAweDljMWIsIDB4OWNmNiwgMHg4ZDQ2LCAweDlkMDMsCi0JMHg5MDMxLCAweDlkMmUsIDB4OGQ0NiwgMHg5N2Y4LCAweDlkNWIsIDB4OGQ0NiwgMHgwODBjLCAweDBkZjYsCi0JMHgyMTAwLCAweDAwNWIsIDB4MDBmZSwgMHgwMGVlLCAweDAwZGUsIDB4MDBjZSwgMHgwMWRlLCAweDAxY2UsCi0JMHgwMTRlLCAweDAxM2UsIDB4MDE1ZSwgMHgwMGJlLCAweDAwMDUsIDB4OGQ2NywgMHg4ZDY3LCAweDhkNjcsCi0JMHg4ZGExLCAweDhlNGQsIDB4OGU1OCwgMHg4ZDY3LCAweDhkNjcsIDB4OGQ2NywgMHg4ZWIyLCAweDhlYmUsCi0JMHg4ZGJjLCAweDhkNjcsIDB4OGRkNywgMHg4ZTBiLCAweDllZGQsIDB4OWYyMiwgMHg5MDRlLCAweDA4MGMsCi0JMHgwZGY2LCAweDAwZDYsIDB4MDA5NiwgMHgwODBjLCAweDkwZTcsIDB4MDAyNiwgMHgwMDM2LCAweDc4MTQsCi0JMHgyMDQ4LCAweGE5NTgsIDB4ZDFjYywgMHgxMTM4LCAweDIwMDksIDB4MjQxNCwgMHgyMDExLCAweDAwMTgsCi0JMHgyMDE5LCAweDAwMTgsIDB4MDAzMCwgMHgyMDA5LCAweDI0MTAsIDB4MjAxMSwgMHgwMDE0LCAweDIwMTksCi0JMHgwMDE0LCAweDcxMDIsIDB4NzIwNiwgMHg3MDBiLCAweDA4MDAsIDB4YTgzYywgMHg3MDBlLCAweGE4NTAsCi0JMHg3MDIyLCAweGE4NTQsIDB4NzAyNiwgMHg2M2MyLCAweDA4MGMsIDB4OTVlZSwgMHgwMDNlLCAweDAwMmUsCi0JMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHg3ODEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGEwLCAweDAwYmUsCi0JMHgwODBjLCAweDlmNjksIDB4MTExOCwgMHg5MDg0LCAweGZmODAsIDB4MDExMCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwODBjLCAweDkwZTcsIDB4NzAwMywgMHgwNTAwLCAweDc4MTQsCi0JMHgyMDQ4LCAweGE4NzQsIDB4NzAwYSwgMHhhODc4LCAweDcwMGUsIDB4YTg3YywgMHg3MDEyLCAweGE4ODAsCi0JMHg3MDE2LCAweGE4ODQsIDB4NzAxYSwgMHhhODg4LCAweDcwMWUsIDB4NjBjMywgMHgwMDEwLCAweDA4MGMsCi0JMHg5NWVlLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwODBjLCAweDkwZTcsCi0JMHg3MDAzLCAweDA1MDAsIDB4NzgxNCwgMHgyMDQ4LCAweGE4Y2MsIDB4NzAwYSwgMHhhOGQwLCAweDcwMGUsCi0JMHhhOGQ0LCAweDcwMTIsIDB4YThkOCwgMHg3MDE2LCAweGE4ZGMsIDB4NzAxYSwgMHhhOGUwLCAweDcwMWUsCi0JMHg2MGMzLCAweDAwMTAsIDB4MDgwYywgMHg5NWVlLCAweDAwOWUsIDB4MDBkZSwgMHgwMDA1LCAweDAwZDYsCi0JMHgwMDk2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OTBlNywgMHgyMGU5LCAweDAwMDAsCi0JMHgyMDAxLCAweDE5N2UsIDB4MjAwMywgMHgwMDAwLCAweDc4MTQsIDB4MjA0OCwgMHhhODE0LCAweDgwMDMsCi0JMHg2MGMyLCAweGE4MzAsIDB4MjBhOCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsCi0JMHgyMDk4LCAweDIwMDEsIDB4MTk3ZSwgMHgwMDE2LCAweDIwMGMsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsCi0JMHgyMWU1LCAweDA4MGMsIDB4Y2FjMywgMHg5MDA2LCAweDA4MGMsIDB4MjFlNSwgMHgwMDFlLCAweGE4MDQsCi0JMHg5MDA1LCAweDAxMTAsIDB4MjA0OCwgMHgwYzI4LCAweDA0ZDksIDB4MDgwYywgMHg5NWVlLCAweDAxMmUsCi0JMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgwODBjLCAweDkxMzIsIDB4MjBlOSwgMHgwMDAwLCAweDIwMDEsIDB4MTk3ZSwgMHgyMDAzLCAweDAwMDAsCi0JMHg3ODE0LCAweDIwNDgsIDB4YTg2ZiwgMHgwMjAwLCAweGE4NzMsIDB4MDAwMCwgMHhhODE0LCAweDgwMDMsCi0JMHg2MGMyLCAweGE4MzAsIDB4MjBhOCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsCi0JMHgyMDk4LCAweDIwMDEsIDB4MTk3ZSwgMHgwMDE2LCAweDIwMGMsIDB4MDgwYywgMHhjYWMzLCAweDAwMWUsCi0JMHhhODA0LCAweDkwMDUsIDB4MDExMCwgMHgyMDQ4LCAweDBjNjAsIDB4MDA1MSwgMHg3ODE0LCAweDIwNDgsCi0JMHgwODBjLCAweDBmZTksIDB4MDgwYywgMHg5NWVlLCAweDAxMmUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsCi0JMHg2MGMwLCAweDgwMDQsIDB4OTA4NCwgMHgwMDAzLCAweDkwMDUsIDB4MDEzMCwgMHg5MDgyLCAweDAwMDQsCi0JMHgyMGEzLCAweDAwMDAsIDB4ODAwMCwgMHgxZGUwLCAweDAwMDUsIDB4MDgwYywgMHg5MGU3LCAweDcwMDMsCi0JMHg3ODAwLCAweDc4MDgsIDB4ODAwNywgMHg3MDBhLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweDk1ZWUsCi0JMHgwMGQ2LCAweDAwZTYsIDB4MDgwYywgMHg5MTMyLCAweDc4MTQsIDB4OTA4NCwgMHhmZjAwLCAweDIwNzMsCi0JMHgwMjAwLCAweDhlNzAsIDB4OGU3MCwgMHg5MDk2LCAweGRmMDAsIDB4MDEzOCwgMHg5MDk2LCAweGUwMDAsCi0JMHgwMTIwLCAweDIwNzMsIDB4MDAxMCwgMHg4ZTcwLCAweDAwMzAsIDB4OTA5NSwgMHgwMDEwLCAweDIyNzIsCi0JMHg4ZTcwLCAweDIwNzMsIDB4MDAzNCwgMHg4ZTcwLCAweDIwNjksIDB4MTgwNSwgMHgyMGE5LCAweDAwMDQsCi0JMHgyZDc2LCAweDhkNjgsIDB4OGU3MCwgMHgxZjA0LCAweDhlNzgsIDB4MjA2OSwgMHgxODAxLCAweDIwYTksCi0JMHgwMDA0LCAweDJkNzYsIDB4OGQ2OCwgMHg4ZTcwLCAweDFmMDQsIDB4OGU4MSwgMHg5MDk2LCAweGRmMDAsCi0JMHgwMTMwLCAweDkwOTYsIDB4ZTAwMCwgMHgwMTE4LCAweDYwYzMsIDB4MDAxOCwgMHgwMGYwLCAweDIwNjksCi0JMHgxOThlLCAweDkwODYsIDB4ZGYwMCwgMHgwMTEwLCAweDIwNjksIDB4MTlhOCwgMHgyMGE5LCAweDAwMWEsCi0JMHg5ZTg2LCAweDAyNjAsIDB4MTE0OCwgMHgwMGM2LCAweDIwNjEsIDB4MDIwMCwgMHg2MDEwLCAweDgwMDAsCi0JMHg2MDEyLCAweDAwY2UsIDB4MjA3MSwgMHgwMjQwLCAweDJkMDQsIDB4ODAwNywgMHgyMDcyLCAweDhkNjgsCi0JMHg4ZTcwLCAweDFmMDQsIDB4OGU5OCwgMHg2MGMzLCAweDAwNGMsIDB4MDgwYywgMHg5NWVlLCAweDAwZWUsCi0JMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHg5MGU3LCAweDcwMDMsIDB4NjMwMCwgMHg3MDA3LCAweDAwMjgsCi0JMHg3ODA4LCAweDcwMGUsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4OTVlZSwgMHgwMGQ2LCAweDAwMjYsCi0JMHgwMDE2LCAweDA4MGMsIDB4OTEzMiwgMHg3MDAzLCAweDAyMDAsIDB4NzgxNCwgMHg3MDBlLCAweDAwZTYsCi0JMHg5ZWYwLCAweDAwMDQsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDAwYywgMHgyMDczLCAweDA4MDAsCi0JMHg4ZTcwLCAweDIwNzMsIDB4MDAwMCwgMHgwMGVlLCAweDcyMDYsIDB4NzEwYSwgMHg2MmMyLCAweDA4MGMsCi0JMHg5NWVlLCAweDAwMWUsIDB4MDAyZSwgMHgwMGRlLCAweDAwMDUsIDB4MjAwMSwgMHgxODE3LCAweDIwMDQsCi0JMHg2MDlhLCAweDA4MDQsIDB4OTVlZSwgMHgwODBjLCAweDkwZTcsIDB4NzAwMywgMHg1MjAwLCAweDIwNjksCi0JMHgxODViLCAweDY4MDQsIDB4ZDA4NCwgMHgwMTMwLCAweDY4MjgsIDB4MDAxNiwgMHgwODBjLCAweDI2YTAsCi0JMHg3MTBlLCAweDAwMWUsIDB4MjBhOSwgMHgwMDA0LCAweDIwZTEsIDB4MDAwMSwgMHgyMDk5LCAweDE4MDUsCi0JMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjUwLCAweDQwMDMsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksCi0JMHgxODAxLCAweDIwYTEsIDB4MDI1NCwgMHg0MDAzLCAweDA4MGMsIDB4OWY2OSwgMHgxMTIwLCAweGI4YTAsCi0JMHg5MDgyLCAweDAwN2YsIDB4MDI0OCwgMHgyMDAxLCAweDE4MWUsIDB4MjAwNCwgMHg3MDMyLCAweDIwMDEsCi0JMHgxODFmLCAweDIwMDQsIDB4NzAzNiwgMHgwMDMwLCAweDIwMDEsIDB4MTgxNywgMHgyMDA0LCAweDkwODQsCi0JMHgwMGZmLCAweDcwMzYsIDB4NjBjMywgMHgwMDFjLCAweDA4MDQsIDB4OTVlZSwgMHgwODBjLCAweDkwZTcsCi0JMHg3MDAzLCAweDA1MDAsIDB4MDgwYywgMHg5ZjY5LCAweDExMjAsIDB4YjhhMCwgMHg5MDgyLCAweDAwN2YsCi0JMHgwMjQ4LCAweDIwMDEsIDB4MTgxZSwgMHgyMDA0LCAweDcwMGEsIDB4MjAwMSwgMHgxODFmLCAweDIwMDQsCi0JMHg3MDBlLCAweDAwMzAsIDB4MjAwMSwgMHgxODE3LCAweDIwMDQsIDB4OTA4NCwgMHgwMGZmLCAweDcwMGUsCi0JMHgyMGE5LCAweDAwMDQsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MTgwNSwgMHgyMGU5LCAweDAwMDAsCi0JMHgyMGExLCAweDAyNTAsIDB4NDAwMywgMHg2MGMzLCAweDAwMTAsIDB4MDgwNCwgMHg5NWVlLCAweDA4MGMsCi0JMHg5MGU3LCAweDkwMDYsIDB4MDgwYywgMHg2NjkzLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDExNzAsCi0JMHgyMDExLCAweDAyNDAsIDB4MjAxMywgMHgyMmZmLCAweDIwMTEsIDB4MDI0MSwgMHgyMDEzLCAweGZmZmUsCi0JMHg3MDAzLCAweDA0MDAsIDB4NjIwYywgMHhjMmI0LCAweDYyMGUsIDB4MDA1OCwgMHg3ODE0LCAweDAwOTYsCi0JMHg5MDRkLCAweDAxMjAsIDB4OTAwNiwgMHhhODlhLCAweGE4YTYsIDB4YThhYSwgMHgwMDllLCAweDcwMDMsCi0JMHgwMzAwLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDE5MDQsIDB4OGZjOCwgMHgwMGQ2LCAweDIwNjksCi0JMHgxOTQ2LCAweDIwMDEsIDB4MTgzNiwgMHgyMDA0LCAweGQwYTQsIDB4MDE3OCwgMHg2ODAwLCAweDcwMGEsCi0JMHg2ODA4LCAweDkwODQsIDB4MjAwMCwgMHg3MDEyLCAweDY4MGMsIDB4NzAxNiwgMHg3MDFmLCAweDI3MTAsCi0JMHg2ODE4LCAweDcwMjIsIDB4NjgxYywgMHg3MDI2LCAweDAwZjAsIDB4NjgwMCwgMHg3MDBhLCAweDY4MDQsCi0JMHg3MDBlLCAweDIwMDEsIDB4MDAwMiwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgwODBjLCAweDcxN2UsCi0JMHgxMTI4LCAweDc4ZTMsIDB4MDAwMCwgMHgwODBjLCAweDI2ZTEsIDB4NzhlMiwgMHgwMGZlLCAweDY4MDgsCi0JMHgwODBjLCAweDcxN2UsIDB4MTExOCwgMHg5MDg0LCAweDM3ZmYsIDB4MDAxMCwgMHg5MDg0LCAweDNmZmYsCi0JMHg3MDEyLCAweDY4MGMsIDB4NzAxNiwgMHgwMGRlLCAweDIwYTksIDB4MDAwNCwgMHgyMGUxLCAweDAwMDEsCi0JMHgyMDk5LCAweDE4MDUsIDB4MjBlOSwgMHgwMDAwLCAweDIwYTEsIDB4MDI1NiwgMHg0MDAzLCAweDIwYTksCi0JMHgwMDA0LCAweDIwOTksIDB4MTgwMSwgMHgyMGExLCAweDAyNWEsIDB4NDAwMywgMHgwMGQ2LCAweDA4MGMsCi0JMHg5ZGRkLCAweDIwNjksIDB4MTk0ZSwgMHgyMDcxLCAweDAyNGUsIDB4NjgwMCwgMHhjMGRkLCAweDcwMDIsCi0JMHgwODBjLCAweDU0ZGYsIDB4ZDBlNCwgMHgwMTEwLCAweDY4MGMsIDB4NzAwZSwgMHgwMGRlLCAweDA0YTAsCi0JMHgyMDAxLCAweDE4MzYsIDB4MjAwNCwgMHhkMGE0LCAweDAxNjgsIDB4MDAxNiwgMHgyMDA5LCAweDAwMDIsCi0JMHg2MGUwLCAweDkxMDYsIDB4MDEzMCwgMHgyMTAwLCAweDYwZTMsIDB4MDAwMCwgMHgwODBjLCAweDI2ZTEsCi0JMHg2MWUyLCAweDAwMWUsIDB4MjBlMSwgMHgwMDAxLCAweDIwOTksIDB4MTk0NiwgMHgyMGU5LCAweDAwMDAsCi0JMHgyMGExLCAweDAyNGUsIDB4MjBhOSwgMHgwMDA4LCAweDQwMDMsIDB4MjBhOSwgMHgwMDA0LCAweDIwOTksCi0JMHgxODA1LCAweDIwYTEsIDB4MDI1NiwgMHg0MDAzLCAweDIwYTksIDB4MDAwNCwgMHgyMDk5LCAweDE4MDEsCi0JMHgyMGExLCAweDAyNWEsIDB4NDAwMywgMHgwODBjLCAweDlkZGQsIDB4MjBhMSwgMHgwMjRlLCAweDIwYTksCi0JMHgwMDA4LCAweDIwOTksIDB4MTk0ZSwgMHg0MDAzLCAweDYwYzMsIDB4MDA3NCwgMHgwODA0LCAweDk1ZWUsCi0JMHgwODBjLCAweDkwZTcsIDB4NzAwMywgMHgyMDEwLCAweDcwMDcsIDB4MDAxNCwgMHg3MDBiLCAweDA4MDAsCi0JMHg3MDBmLCAweDIwMDAsIDB4OTAwNiwgMHgwMGY2LCAweDIwNzksIDB4MTg1YiwgMHg3OTA0LCAweDAwZmUsCi0JMHhkMWFjLCAweDExMTAsIDB4OTA4NSwgMHgwMDIwLCAweDAwMTAsIDB4OTA4NSwgMHgwMDEwLCAweDkwODUsCi0JMHgwMDAyLCAweDAwZDYsIDB4MDgwNCwgMHg5MDk3LCAweDcwMjYsIDB4NjBjMywgMHgwMDE0LCAweDA4MDQsCi0JMHg5NWVlLCAweDA4MGMsIDB4OTBlNywgMHg3MDAzLCAweDUwMDAsIDB4MDgwNCwgMHg4ZjY5LCAweDA4MGMsCi0JMHg5MGU3LCAweDcwMDMsIDB4MjExMCwgMHg3MDA3LCAweDAwMTQsIDB4NjBjMywgMHgwMDE0LCAweDA4MDQsCi0JMHg5NWVlLCAweDA4MGMsIDB4OTEyOSwgMHgwMDEwLCAweDA4MGMsIDB4OTEzMiwgMHg3MDAzLCAweDAyMDAsCi0JMHg2MGMzLCAweDAwMDQsIDB4MDgwNCwgMHg5NWVlLCAweDA4MGMsIDB4OTEzMiwgMHg3MDAzLCAweDAxMDAsCi0JMHg3MDBiLCAweDAwMDMsIDB4NzAwZiwgMHgyYTAwLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweDk1ZWUsCi0JMHgwODBjLCAweDkxMzIsIDB4NzAwMywgMHgwMjAwLCAweDA4MDQsIDB4OGY2OSwgMHgwODBjLCAweDkxMzIsCi0JMHg3MDAzLCAweDAxMDAsIDB4NzgyYywgMHg5MDA1LCAweDAxMTAsIDB4NzAwYSwgMHgwMDEwLCAweDcwMGIsCi0JMHgwMDAzLCAweDc4MTQsIDB4NzAwZSwgMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHg5NWVlLCAweDAwZDYsCi0JMHgwODBjLCAweDkxMzIsIDB4NzAwMywgMHgwMjEwLCAweDcwMDcsIDB4MDAxNCwgMHg3MDBiLCAweDA4MDAsCi0JMHhiODk0LCAweDkwODYsIDB4MDAxNCwgMHgxMTk4LCAweGI5OWMsIDB4OTE4NCwgMHgwMDMwLCAweDAxOTAsCi0JMHhiOTk4LCAweDkxODQsIDB4YzAwMCwgMHgxMTQwLCAweGQxZWMsIDB4MDExOCwgMHg3MDBmLCAweDIxMDAsCi0JMHgwMDU4LCAweDcwMGYsIDB4MDEwMCwgMHgwMDQwLCAweDcwMGYsIDB4MDQwMCwgMHgwMDI4LCAweDcwMGYsCi0JMHgwNzAwLCAweDAwMTAsIDB4NzAwZiwgMHgwODAwLCAweDAwZjYsIDB4MjA3OSwgMHgxODViLCAweDc5MDQsCi0JMHgwMGZlLCAweGQxYWMsIDB4MTExMCwgMHg5MDg1LCAweDAwMjAsIDB4MDAxMCwgMHg5MDg1LCAweDAwMTAsCi0JMHgyMDA5LCAweDE4N2QsIDB4MjEwYywgMHhkMTg0LCAweDExMTAsIDB4OTA4NSwgMHgwMDAyLCAweDAwMjYsCi0JMHgyMDA5LCAweDE4N2IsIDB4MjEwYywgMHhkMWU0LCAweDAxNTAsIDB4YzBjNSwgMHhiYWJjLCAweGQyOGMsCi0JMHgxMTA4LCAweGMwY2QsIDB4OTA5NCwgMHgwMDMwLCAweDkyOTYsIDB4MDAxMCwgMHgwMTQwLCAweGQxZWMsCi0JMHgwMTMwLCAweDkwOTQsIDB4MDAzMCwgMHg5Mjk2LCAweDAwMTAsIDB4MDEwOCwgMHhjMGJkLCAweDAwMmUsCi0JMHg3MDI2LCAweDYwYzMsIDB4MDAxNCwgMHgwMGRlLCAweDA4MDQsIDB4OTVlZSwgMHgwODBjLCAweDkxMzIsCi0JMHg3MDAzLCAweDAyMTAsIDB4NzAwNywgMHgwMDE0LCAweDcwMGYsIDB4MDEwMCwgMHg2MGMzLCAweDAwMTQsCi0JMHgwODA0LCAweDk1ZWUsIDB4MDgwYywgMHg5MTMyLCAweDcwMDMsIDB4MDIwMCwgMHgwODA0LCAweDhlZTcsCi0JMHgwODBjLCAweDkxMzIsIDB4NzAwMywgMHgwMTAwLCAweDcwMGIsIDB4MDAwMywgMHg3MDBmLCAweDJhMDAsCi0JMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHg5NWVlLCAweDA4MGMsIDB4OTEzMiwgMHg3MDAzLCAweDAxMDAsCi0JMHg3MDBiLCAweDAwMGIsIDB4NjBjMywgMHgwMDA4LCAweDA4MDQsIDB4OTVlZSwgMHgwMDI2LCAweDAwZDYsCi0JMHgwMDM2LCAweDAwNDYsIDB4MjAxOSwgMHgzMjAwLCAweDIwMjEsIDB4MDgwMCwgMHgwMDQwLCAweDAwMjYsCi0JMHgwMGQ2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDIyMDAsIDB4MjAyMSwgMHgwMTAwLCAweDA4MGMsCi0JMHg5ZGYyLCAweGI4MTAsIDB4OTMwNSwgMHg3MDAyLCAweGI4MTQsIDB4NzAwNiwgMHgyMDY5LCAweDE4MDAsCi0JMHg2ODc4LCAweDcwMGEsIDB4Njg3YywgMHg3MDBlLCAweDk0ODUsIDB4MDAyOSwgMHg3MDEyLCAweDAwNGUsCi0JMHgwMDNlLCAweDAwZGUsIDB4MDgwYywgMHg5NWRjLCAweDcyMWEsIDB4OWY5NSwgMHgwMDAwLCAweDcyMjIsCi0JMHg3MDI3LCAweGZmZmYsIDB4MjA3MSwgMHgwMjRjLCAweDAwMmUsIDB4MDAwNSwgMHgwMDI2LCAweDA4MGMsCi0JMHg5ZGYyLCAweDcwMDMsIDB4MDJmZiwgMHg3MDA3LCAweGZmZmMsIDB4MDBkNiwgMHgyMDY5LCAweDE4MDAsCi0JMHg2ODc4LCAweDcwMGEsIDB4Njg3YywgMHg3MDBlLCAweDAwZGUsIDB4NzAxMywgMHgyMDI5LCAweDBjMTAsCi0JMHg3MDAzLCAweDAxMDAsIDB4NzAwNywgMHgwMDAwLCAweDcwMGIsIDB4ZmMwMiwgMHg3MDBmLCAweDAwMDAsCi0JMHgwMDA1LCAweDAwMjYsIDB4MDBkNiwgMHgwMDM2LCAweDAwNDYsIDB4MjAxOSwgMHgzMzAwLCAweDIwMjEsCi0JMHgwODAwLCAweDAwNDAsIDB4MDAyNiwgMHgwMGQ2LCAweDAwMzYsIDB4MDA0NiwgMHgyMDE5LCAweDIzMDAsCi0JMHgyMDIxLCAweDAxMDAsIDB4MDgwYywgMHg5ZGYyLCAweGI4MTAsIDB4OTMwNSwgMHg3MDAyLCAweGI4MTQsCi0JMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHhiODEwLCAweDkwMDUsIDB4MTE0MCwgMHhiODE0LCAweDkwMDUsCi0JMHgxMTI4LCAweDcwMGIsIDB4MDBmZiwgMHg3MDBmLCAweGZmZmUsIDB4MDAyMCwgMHg2ODc4LCAweDcwMGEsCi0JMHg2ODdjLCAweDcwMGUsIDB4MDAwMCwgMHg5NDg1LCAweDAwOTgsIDB4NzAxMiwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMGRlLCAweDA4MGMsIDB4OTVkYywgMHg3MjFhLCAweDdhMDgsIDB4NzIyMiwgMHgyZjEwLCAweDcyMjYsCi0JMHgyMDcxLCAweDAyNGMsIDB4MDAyZSwgMHgwMDA1LCAweDA4MGMsIDB4OTVkYywgMHg3MjFhLCAweDdhMDgsCi0JMHg3MjIyLCAweDc4MTQsIDB4NzAyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDAyZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMGM2LCAweDAwZDYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNjksIDB4MDIwMCwgMHgyMDcxLCAweDAyNDAsCi0JMHg2MDA0LCAweDkwOGEsIDB4MDA4NSwgMHgwYTBjLCAweDBkZjYsIDB4OTA4YSwgMHgwMDkyLCAweDFhMGMsCi0JMHgwZGY2LCAweDYxMTAsIDB4MjE1OCwgMHhiOWIwLCAweDJjNzgsIDB4MjA2MSwgMHgwMTAwLCAweDYxOWEsCi0JMHg5MDgyLCAweDAwODUsIDB4MDAzMywgMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwYmUsCi0JMHgwMDA1LCAweDkxYTAsIDB4OTFhZiwgMHg5MWJhLCAweDkxOWUsIDB4OTE5ZSwgMHg5MTllLCAweDkxYTAsCi0JMHg5MTllLCAweDkxOWUsIDB4OTE5ZSwgMHg5MTllLCAweDkxOWUsIDB4OTE5ZSwgMHgwODBjLCAweDBkZjYsCi0JMHgwNDExLCAweDYwYzMsIDB4MDAwMCwgMHgwMDI2LCAweDA4MGMsIDB4MjllOSwgMHgwMjI4LCAweDIwMTEsCi0JMHgwMTAxLCAweDIyMDQsIDB4YzBjNSwgMHgyMDEyLCAweDAwMmUsIDB4MDgwNCwgMHg5NWVlLCAweDA0MzEsCi0JMHg3ODA4LCAweDcwMGEsIDB4NzgxNCwgMHg3MDBlLCAweDcwMTcsIDB4ZmZmZiwgMHg2MGMzLCAweDAwMGMsCi0JMHgwODA0LCAweDk1ZWUsIDB4MDRhMSwgMHg3MDAzLCAweDAwMDMsIDB4NzAwNywgMHgwMzAwLCAweDYwYzMsCi0JMHgwMDA0LCAweDA4MDQsIDB4OTVlZSwgMHgwMDI2LCAweDA4MGMsIDB4OWRmMiwgMHhiODEwLCAweDkwODUsCi0JMHg4MTAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODc4LCAweDcwMGEsCi0JMHg2ODdjLCAweDcwMGUsIDB4NzAxMywgMHgwMDA5LCAweDA4MDQsIDB4OTEwMiwgMHgwMDI2LCAweDA4MGMsCi0JMHg5ZGYyLCAweGI4MTAsIDB4OTA4NSwgMHg4NDAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksCi0JMHgxODAwLCAweDY4NzgsIDB4NzAwYSwgMHg2ODdjLCAweDcwMGUsIDB4MjAwMSwgMHgwMDk5LCAweDdhMjAsCi0JMHg5Mjk2LCAweDAwMDUsIDB4MDEwOCwgMHhjMGJjLCAweDcwMTIsIDB4MDgwNCwgMHg5MTY0LCAweDAwMjYsCi0JMHgwODBjLCAweDlkZjIsIDB4YjgxMCwgMHg5MDg1LCAweDg1MDAsIDB4NzAwMiwgMHhiODE0LCAweDcwMDYsCi0JMHgyMDY5LCAweDE4MDAsIDB4Njg3OCwgMHg3MDBhLCAweDY4N2MsIDB4NzAwZSwgMHgyMDAxLCAweDAwOTksCi0JMHg3YTIwLCAweDkyOTYsIDB4MDAwNSwgMHgwMTA4LCAweGMwYmMsIDB4NzAxMiwgMHgwODA0LCAweDkxNjQsCi0JMHgwMGI2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MmM3OCwgMHgyMDY5LCAweDAyMDAsCi0JMHgyMDcxLCAweDAyNDAsIDB4NzgwNCwgMHg5MDhhLCAweDAwNDAsIDB4MGEwYywgMHgwZGY2LCAweDkwOGEsCi0JMHgwMDU0LCAweDFhMGMsIDB4MGRmNiwgMHg3OTEwLCAweDIxNTgsIDB4YjliMCwgMHgyMDYxLCAweDAxMDAsCi0JMHg2MTlhLCAweDkwODIsIDB4MDA0MCwgMHgwMDMzLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMGJlLCAweDAwMDUsIDB4OTIzZiwgMHg5MzA2LCAweDkyZDksIDB4OTQyOCwgMHg5MjNkLCAweDkyM2QsCi0JMHg5MjNkLCAweDkyM2QsIDB4OTIzZCwgMHg5MjNkLCAweDkyM2QsIDB4OTkzYywgMHg5OTQxLCAweDk5NDYsCi0JMHg5OTRiLCAweDkyM2QsIDB4OWQzYSwgMHg5MjNkLCAweDk5MzcsIDB4MDgwYywgMHgwZGY2LCAweDAwOTYsCi0JMHg3ODBiLCAweGZmZmYsIDB4MDgwYywgMHg5MmFhLCAweDc5MTQsIDB4MjE0OCwgMHhhOTc4LCAweDc5NTYsCi0JMHhhZTY0LCAweDk2YjQsIDB4MDBmZiwgMHg5Njg2LCAweDAwMDgsIDB4MTE0OCwgMHhhOGI0LCAweDcwMzIsCi0JMHhhOGI4LCAweDcwMzYsIDB4YThiYywgMHg3MDNhLCAweGE4YzAsIDB4NzAzZSwgMHgwMDA4LCAweDcxMzIsCi0JMHhhOTdjLCAweDkxODQsIDB4MDAwZiwgMHgxMTE4LCAweDIwMDEsIDB4MDAwNSwgMHgwMDQwLCAweGQxODQsCi0JMHgwMTE4LCAweDIwMDEsIDB4MDAwNCwgMHgwMDE4LCAweDkwODQsIDB4MDAwNiwgMHg4MDA0LCAweDIwMTAsCi0JMHg3ODVjLCAweDkwODQsIDB4MDBmZiwgMHg4MDA3LCAweDkyMDUsIDB4NzA0MiwgMHhkMWFjLCAweDAxNTgsCi0JMHg3MDQ3LCAweDAwMDIsIDB4OTY4NiwgMHgwMDA4LCAweDExMTgsIDB4MDgwYywgMHgxNzkyLCAweDAwMTAsCi0JMHgwODBjLCAweDE2NTEsIDB4MDA1MCwgMHhkMWI0LCAweDAxMTgsIDB4NzA0NywgMHgwMDAxLCAweDAwMjgsCi0JMHg3MDQ3LCAweDAwMDAsIDB4OTAxNiwgMHgyMjMwLCAweDAwMTAsIDB4YWFiMCwgMHhhZWFjLCAweDcyNmEsCi0JMHg3NjZlLCAweDIwYTksIDB4MDAwOCwgMHgyMGU5LCAweDAwMDAsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsCi0JMHg5MDgwLCAweDAwMjMsIDB4MjA5OCwgMHgyMGExLCAweDAyNTIsIDB4MjA2OSwgMHgwMjAwLCAweDY4MTMsCi0JMHgwMDE4LCAweDQwMDMsIDB4NjgxMywgMHgwMDA4LCAweDYwYzMsIDB4MDAyMCwgMHg2MDE3LCAweDAwMDksCi0JMHgyMDAxLCAweDE5ZGUsIDB4MjAwMywgMHgwN2QwLCAweDIwMDEsIDB4MTlkZCwgMHgyMDAzLCAweDAwMDksCi0JMHgwMDllLCAweDAwMDUsIDB4NjgxMywgMHgwMDA4LCAweGJhOGMsIDB4ODIxMCwgMHhiOGJjLCAweGQwODQsCi0JMHgwMTgwLCAweDIwMDEsIDB4MWFhMSwgMHgyMDBjLCAweDgxMDgsIDB4MjEwMiwgMHgyMDAxLCAweDFhYTAsCi0JMHgyMDFjLCAweDEyMTgsIDB4ODMxOCwgMHgyMzAyLCAweDBlYTAsIDB4Nzk0YSwgMHg3MTJlLCAweDdiNDYsCi0JMHg3MzJhLCAweDkyOTQsIDB4MDBmZiwgMHhiYThlLCAweDgyMTcsIDB4NzIxYSwgMHhiYTEwLCAweDkyOTUsCi0JMHgwNjAwLCAweDcyMDIsIDB4YmExNCwgMHg3MjA2LCAweDIwNjksIDB4MTgwMCwgMHg2YTc4LCAweDcyMGEsCi0JMHg2YTdjLCAweDcyMGUsIDB4NzAxMywgMHgwODI5LCAweDJmMTAsIDB4NzIyMiwgMHg3MDI3LCAweGZmZmYsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDA5NiwgMHgwMDgxLCAweDc4MTQsIDB4MjA0OCwgMHhhODkwLCAweDcwMDIsCi0JMHhhODhjLCAweDcwMDYsIDB4YThiMCwgMHg3MDBhLCAweGE4YWMsIDB4NzAwZSwgMHg2MGMzLCAweDAwMGMsCi0JMHgwMDllLCAweDAwZGUsIDB4MDgwNCwgMHg5NWVlLCAweDY4MTMsIDB4MDAwOCwgMHhiODEwLCAweDkwODUsCi0JMHgwNTAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2ODc4LCAweDcwMGEsCi0JMHg2ODdjLCAweDcwMGUsIDB4NzAxMywgMHgwODg5LCAweDA4MGMsIDB4OTVkYywgMHg3MjFhLCAweDdhMDgsCi0JMHg3MjIyLCAweDJmMTAsIDB4NzIyNiwgMHgyMDcxLCAweDAyNGMsIDB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsCi0JMHgwODBjLCAweDk0MDYsIDB4NzgxNCwgMHgyMDQ4LCAweDA4MGMsIDB4YmQ0YywgMHgxMTMwLCAweDc4MTQsCi0JMHg5MDg0LCAweDA3MDAsIDB4ODAwNywgMHgwMDMzLCAweDAwMTAsIDB4OTAwNiwgMHgwMDFiLCAweDAwOWUsCi0JMHgwMGRlLCAweDAwMDUsIDB4OTMyNCwgMHg5MzhkLCAweDkzOWQsIDB4OTNjMywgMHg5M2NmLCAweDkzZTAsCi0JMHg5M2U4LCAweDkzMjIsIDB4MDgwYywgMHgwZGY2LCAweDAwMTYsIDB4MDAzNiwgMHhhOTdjLCAweDkxOGMsCi0JMHgwMDAzLCAweDAxMTgsIDB4OTE4NiwgMHgwMDAzLCAweDExOTgsIDB4YWJhOCwgMHg3ODI0LCAweGQwY2MsCi0JMHgxMTY4LCAweDczMTYsIDB4YTg5OCwgMHg3MDFhLCAweGE4OTQsIDB4NzAxZSwgMHgwMDNlLCAweDAwMWUsCi0JMHgyMDAxLCAweDE5OGMsIDB4MjAwNCwgMHg2MGMyLCAweDA4MDQsIDB4OTVlZSwgMHhjM2U1LCAweDBjODgsCi0JMHg5MTg2LCAweDAwMDEsIDB4MTkwYywgMHgwZGY2LCAweGFiYTgsIDB4NzgyNCwgMHhkMGNjLCAweDE5MDQsCi0JMHg5MzhhLCAweDczMTYsIDB4YTg5OCwgMHg3MDFhLCAweGE4OTQsIDB4NzAxZSwgMHhhOGE0LCAweDcwMjYsCi0JMHhhOGFjLCAweDcwMmUsIDB4MjAwOSwgMHgwMDE4LCAweDkzODQsIDB4MDMwMCwgMHgwNTcwLCAweGQzYzQsCi0JMHgwMTEwLCAweGE4YWMsIDB4OTEwOCwgMHhkM2NjLCAweDAxMTAsIDB4YThhNCwgMHg5MTA4LCAweDY4MTAsCi0JMHg5MDg1LCAweDAwMTAsIDB4NjgxMiwgMHgyMDExLCAweDAyNTgsIDB4MjBlOSwgMHgwMDAwLCAweDIyYTAsCi0JMHgwMTU2LCAweDIwYTksIDB4MDAwOCwgMHhhODYwLCAweDIwZTAsIDB4YTg1YywgMHg5MDgwLCAweDAwMmMsCi0JMHgyMDk4LCAweDQwMDMsIDB4NjgxMCwgMHg4MDAwLCAweDY4MTIsIDB4MjAxMSwgMHgwMjQwLCAweDIyYTAsCi0JMHgyMGE5LCAweDAwMDUsIDB4NDAwMywgMHg2ODEwLCAweGMwYTQsIDB4NjgxMiwgMHgwMTVlLCAweDkxODQsCi0JMHgwMDAzLCAweDAxMTgsIDB4MjAxOSwgMHgwMjQ1LCAweDIwMWEsIDB4NjFjMiwgMHgwMDNlLCAweDAwMWUsCi0JMHgwODA0LCAweDk1ZWUsIDB4YzNlNSwgMHgwODA0LCAweDkzNDksIDB4MjAxMSwgMHgwMDA4LCAweDIwMDEsCi0JMHgxODBmLCAweDIwMDQsIDB4ZDBhNCwgMHgwMTEwLCAweDIwMTEsIDB4MDAyOCwgMHg3ODI0LCAweGQwY2MsCi0JMHgxMTEwLCAweDcyMTYsIDB4MDQ3MCwgMHgwY2U4LCAweGMyZTUsIDB4MjAxMSwgMHgwMzAyLCAweDAwMTYsCi0JMHg3ODJjLCAweDcwMWEsIDB4NzkzMCwgMHg3MTFlLCAweDkxMDUsIDB4MDEwOCwgMHhjMmRkLCAweDAwMWUsCi0JMHg3ODI0LCAweGQwY2MsIDB4MDEwOCwgMHhjMmU1LCAweDcyMTYsIDB4NzAyNywgMHgwMDEyLCAweDcwMmYsCi0JMHgwMDA4LCAweDcwNDMsIDB4NzAwMCwgMHg3MDQ3LCAweDA1MDAsIDB4NzA0ZiwgMHgwMDBhLCAweDIwNjksCi0JMHgwMjAwLCAweDY4MTMsIDB4MDAwOSwgMHgyMDcxLCAweDAyNDAsIDB4NzAwYiwgMHgyNTAwLCAweDYwYzMsCi0JMHgwMDMyLCAweDA4MDQsIDB4OTVlZSwgMHgyMDExLCAweDAwMjgsIDB4NzgyNCwgMHhkMGNjLCAweDExMjgsCi0JMHg3MjE2LCAweDYwYzMsIDB4MDAxOCwgMHgwODA0LCAweDk1ZWUsIDB4MGNkMCwgMHhjMmU1LCAweDIwMTEsCi0JMHgwMTAwLCAweDc4MjQsIDB4ZDBjYywgMHgwMTA4LCAweGMyZTUsIDB4NzIxNiwgMHg3MDJmLCAweDAwMDgsCi0JMHg3ODU4LCAweDkwODQsIDB4MDBmZiwgMHg3MDM2LCAweDYwYzMsIDB4MDAyMCwgMHgwODA0LCAweDk1ZWUsCi0JMHgyMDExLCAweDAwMDgsIDB4NzgyNCwgMHhkMGNjLCAweDAxMDgsIDB4YzJlNSwgMHg3MjE2LCAweDBjMDgsCi0JMHgwMDM2LCAweDdiMTQsIDB4OTM4NCwgMHhmZjAwLCAweDc4MTYsIDB4OTM4NCwgMHgwMGZmLCAweDgwMDEsCi0JMHgxMTM4LCAweDc4MjQsIDB4ZDBjYywgMHgwMTA4LCAweGMyZTUsIDB4NzIxNiwgMHgwMDNlLCAweDA4ODgsCi0JMHgwMDQ2LCAweDIwMjEsIDB4MDgwMCwgMHgwMDA2LCAweDc4MjQsIDB4ZDBjYywgMHgwMDBlLCAweDAxMDgsCi0JMHhjNGU1LCAweDc0MTYsIDB4MDA0ZSwgMHg3MDFlLCAweDAwM2UsIDB4MDgxOCwgMHgwMGQ2LCAweDY4MTMsCi0JMHgwMDA4LCAweGI4MTAsIDB4OTA4NSwgMHgwNzAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksCi0JMHgxODAwLCAweDY4NzgsIDB4NzAwYSwgMHg2ODdjLCAweDcwMGUsIDB4NzgyNCwgMHhkMGNjLCAweDExNjgsCi0JMHg3MDEzLCAweDA4OTgsIDB4MDgwYywgMHg5NWRjLCAweDcyMWEsIDB4N2EwOCwgMHg3MjIyLCAweDJmMTAsCi0JMHg3MjI2LCAweDIwNzEsIDB4MDI0YywgMHgwMGRlLCAweDAwMDUsIDB4NzAxMywgMHgwODg5LCAweDBjOTAsCi0JMHgwMDE2LCAweDc4MTQsIDB4OTA4NCwgMHgwNzAwLCAweDgwMDcsIDB4MDAxMywgMHgwMDFlLCAweDAwMDUsCi0JMHg5NDM4LCAweDk0MzgsIDB4OTQzYSwgMHg5NDM4LCAweDk0MzgsIDB4OTQzOCwgMHg5NDU0LCAweDk0MzgsCi0JMHgwODBjLCAweDBkZjYsIDB4NzkxNCwgMHg5MThjLCAweDA4ZmYsIDB4OTE4ZCwgMHhmNjAwLCAweDc5MTYsCi0JMHgyMDA5LCAweDAwMDMsIDB4MDBiOSwgMHgyMDY5LCAweDE4NWIsIDB4NjgwNCwgMHhkMGJjLCAweDAxMzAsCi0JMHg2ODJjLCAweDkwODQsIDB4MDBmZiwgMHg4MDA3LCAweDcwMzIsIDB4MDAxMCwgMHg3MDMzLCAweDNmMDAsCi0JMHg2MGMzLCAweDAwMDEsIDB4MDgwNCwgMHg5NWVlLCAweDIwMDksIDB4MDAwMywgMHgwMDE5LCAweDcwMzMsCi0JMHg3ZjAwLCAweDBjYjAsIDB4MDAxNiwgMHgwODBjLCAweDlkZjIsIDB4MDAxZSwgMHhiODEwLCAweDkwODUsCi0JMHgwMTAwLCAweDcwMDIsIDB4YjgxNCwgMHg3MDA2LCAweDIwNjksIDB4MTgwMCwgMHg2YTc4LCAweDcyMGEsCi0JMHg2YTdjLCAweDcyMGUsIDB4NzAxMywgMHgwODg4LCAweDkxOGQsIDB4MDAwOCwgMHg3MTE2LCAweDA4MGMsCi0JMHg5NWRjLCAweDcyMWEsIDB4N2EwOCwgMHg3MjIyLCAweDJmMTAsIDB4NzIyNiwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMDk2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsCi0JMHgwMTAwLCAweDIwNzEsIDB4MTgwMCwgMHg3ODEwLCAweDIwNTgsIDB4YjhhMCwgMHgyMDI4LCAweGI5MTAsCi0JMHhiYTE0LCAweDczNzgsIDB4NzQ3YywgMHg3ODIwLCAweDkwYmUsIDB4MDAwNiwgMHgwOTA0LCAweDk1NGIsCi0JMHg5MGJlLCAweDAwMGEsIDB4MTkwNCwgMHg5NTA3LCAweGI4YjAsIDB4NjA5ZSwgMHg3ODE0LCAweDIwNDgsCi0JMHhhODdjLCAweGQwZmMsIDB4MDU1OCwgMHhhZjkwLCAweDk3ODQsIDB4ZmYwMCwgMHg5MTA1LCAweDYwNjIsCi0JMHg4NzNmLCAweDk3ODQsIDB4ZmYwMCwgMHgwMDA2LCAweDc4MTQsIDB4MjA0OCwgMHhhODc4LCAweGMwZmMsCi0JMHg5MDA1LCAweDAwMGUsIDB4MTE2MCwgMHhhZjk0LCAweDg3ZmYsIDB4MDE5OCwgMHgyMDM5LCAweDAwOTgsCi0JMHg5NzA1LCAweDYwNzIsIDB4NzgwOCwgMHg2MDgyLCAweDJmMDAsIDB4NjA4NiwgMHgwMDM4LCAweDkxODUsCi0JMHgyMjAwLCAweDYwNjIsIDB4NjA3MywgMHgwMTI5LCAweDYwNzcsIDB4MDAwMCwgMHhiOGIwLCAweDYwOWUsCi0JMHgwMDUwLCAweDIwMzksIDB4MDAyOSwgMHg5NzA1LCAweDYwNzIsIDB4MGNjMCwgMHg5MTg1LCAweDAyMDAsCi0JMHg2MDYyLCAweDYwNzMsIDB4MjAyOSwgMHhhODdjLCAweGQwZmMsIDB4MDExOCwgMHhhZjk0LCAweDg3ZmYsCi0JMHgxMTIwLCAweDJmMDAsIDB4NjA4MiwgMHg3ODA4LCAweDYwODYsIDB4NjI2NiwgMHg2MzZhLCAweDY0NmUsCi0JMHg2MDc3LCAweDAwMDAsIDB4Yjg4YywgMHg4MDAwLCAweDkwODQsIDB4MDBmZiwgMHhiODhlLCAweDgwMDcsCi0JMHg2MDdhLCAweDYwN2YsIDB4MDAwMCwgMHhhODM4LCAweDYwOGEsIDB4YTgzNCwgMHg2MDhlLCAweGE4NDgsCi0JMHg2MGM2LCAweGE4NDQsIDB4NjBjYSwgMHhiODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsCi0JMHgwMDAwLCAweDA4MGMsIDB4OWRkNywgMHgyMDA5LCAweDA3ZDAsIDB4NjBjNCwgMHg5MDg0LCAweGZmZjAsCi0JMHg5MDA1LCAweDAxMTAsIDB4MjAwOSwgMHgxYjU4LCAweDA4MGMsIDB4ODJkZSwgMHgwMDNlLCAweDAwNGUsCi0JMHgwMDVlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwOWUsIDB4MDBiZSwgMHgwMDA1LCAweDc4MDQsCi0JMHg5MDg2LCAweDAwNDAsIDB4MDkwNCwgMHg5NTg3LCAweDkxODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsCi0JMHg2MzZhLCAweDY0NmUsIDB4NjA3MywgMHgwODA5LCAweDYwNzcsIDB4MDAwOCwgMHg2MGFmLCAweDk1ZDUsCi0JMHg2MGQ3LCAweDAwMDAsIDB4Yjg4YywgMHg4MDAwLCAweDkwODQsIDB4MDBmZiwgMHhiODhlLCAweDgwMDcsCi0JMHg2MDdhLCAweDYwN2YsIDB4MDAwMCwgMHgyZjAwLCAweDYwODIsIDB4NzgwOCwgMHg2MDg2LCAweDc4MTQsCi0JMHgyMDQ4LCAweGE4MzgsIDB4NjA4YSwgMHhhODM0LCAweDYwOGUsIDB4YTg0OCwgMHg2MGM2LCAweGE4NDQsCi0JMHg2MGNhLCAweGI4NmMsIDB4NjBjZSwgMHhiYWIwLCAweDYyOWUsIDB4MDgwYywgMHg5ZGQ3LCAweDIwMDksCi0JMHgwN2QwLCAweDYwYzQsIDB4OTA4NCwgMHhmZmYwLCAweDkwMDUsIDB4MDExMCwgMHgyMDA5LCAweDFiNTgsCi0JMHgwODBjLCAweDgyZGUsIDB4MDAzZSwgMHgwMDRlLCAweDAwNWUsIDB4MDBjZSwgMHgwMGRlLCAweDAwZWUsCi0JMHgwMDllLCAweDAwYmUsIDB4MDAwNSwgMHg3ODE0LCAweDIwNDgsIDB4YTg3YywgMHg5MDg0LCAweDAwMDMsCi0JMHg5MDg2LCAweDAwMDIsIDB4MDkwNCwgMHg5NWEzLCAweDkxODUsIDB4MDEwMCwgMHg2MDYyLCAweDYyNjYsCi0JMHg2MzZhLCAweDY0NmUsIDB4NjA3MywgMHgwODgwLCAweDYwNzcsIDB4MDAwOCwgMHhiODhjLCAweDgwMDAsCi0JMHg5MDg0LCAweDAwZmYsIDB4Yjg4ZSwgMHg4MDA3LCAweDYwN2EsIDB4NzgzOCwgMHg2MDdlLCAweDJmMDAsCi0JMHg2MDg2LCAweDc4MDgsIDB4NjA4MiwgMHhhODkwLCAweDYwOGEsIDB4YTg4YywgMHg2MDhlLCAweGE4YjAsCi0JMHg2MGM2LCAweGE4YWMsIDB4NjBjYSwgMHhhOGFjLCAweDc5MzAsIDB4OTEwOCwgMHg3OTMyLCAweGE4YjAsCi0JMHg3OTJjLCAweDkxMDksIDB4NzkyZSwgMHhiODZjLCAweDYwY2UsIDB4NjBhZiwgMHg5NWQ1LCAweDYwZDcsCi0JMHgwMDAwLCAweGJhYjAsIDB4NjI5ZSwgMHgwODBjLCAweDlkYjQsIDB4MDgwNCwgMHg5NTM3LCAweGI4YmMsCi0JMHhkMDg0LCAweDAxNDgsIDB4Yjg4YywgMHg3ODE0LCAweDIwNDgsIDB4Yjg4YywgMHg3ODRhLCAweGE4MzYsCi0JMHgyOTAwLCAweGE4M2EsIDB4YjA0NiwgMHg5MTg1LCAweDA2MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsCi0JMHg2NDZlLCAweDYwNzMsIDB4MDgyOSwgMHg2MDc3LCAweDAwMDAsIDB4NjBhZiwgMHg5NTc1LCAweDYwZDcsCi0JMHgwMDAwLCAweDA4MDQsIDB4OTUxYSwgMHg5MTg1LCAweDA3MDAsIDB4NjA2MiwgMHg2MjY2LCAweDYzNmEsCi0JMHg2NDZlLCAweDc4MjQsIDB4ZDBjYywgMHg3ODI2LCAweDAxMTgsIDB4NjA3MywgMHgwODg5LCAweDAwMTAsCi0JMHg2MDczLCAweDA4OTgsIDB4NjA3NywgMHgwMDAwLCAweGI4OGMsIDB4ODAwMCwgMHg5MDg0LCAweDAwZmYsCi0JMHhiODhlLCAweDgwMDcsIDB4NjA3YSwgMHg2MDdmLCAweDAwMDAsIDB4MmYwMCwgMHg2MDg2LCAweDc4MDgsCi0JMHg2MDgyLCAweGE4MzgsIDB4NjA4YSwgMHhhODM0LCAweDYwOGUsIDB4YTg0OCwgMHg2MGM2LCAweGE4NDQsCi0JMHg2MGNhLCAweGI4NmMsIDB4NjBjZSwgMHg2MGFmLCAweDk1ZDUsIDB4NjBkNywgMHgwMDAwLCAweGJhYjAsCi0JMHg2MjllLCAweDc4MjQsIDB4ZDBjYywgMHgwMTIwLCAweDA4MGMsIDB4OWRkNywgMHgwODA0LCAweDk1MzcsCi0JMHgwODBjLCAweDlkYjQsIDB4MDgwNCwgMHg5NTM3LCAweDdhMTAsIDB4MDBiNiwgMHgyMjU4LCAweGJhOGMsCi0JMHg4MjEwLCAweDkyOTQsIDB4MDBmZiwgMHhiYThlLCAweDAwYmUsIDB4ODIxNywgMHgwMDA1LCAweDAwZDYsCi0JMHgyMDY5LCAweDE5YzIsIDB4Njg0MywgMHgwMDAxLCAweDAwZGUsIDB4MDAwNSwgMHg2MGEzLCAweDAwNTYsCi0JMHg2MGE3LCAweDk1NzUsIDB4MDBmMSwgMHgwODBjLCAweDgyZDAsIDB4MDAwNSwgMHgwMDE2LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4OTE4NCwgMHgwNjAwLCAweDkwODYsIDB4MDYwMCwgMHgwMTI4LCAweDAwODksCi0JMHgwODBjLCAweDgyZDAsIDB4MDAxZSwgMHgwMDA1LCAweGMxZTUsIDB4MjAwMSwgMHgxODBjLCAweDIxMDIsCi0JMHgyMDAxLCAweDE5YzMsIDB4MjAwMywgMHgwMDAwLCAweDIwMDEsIDB4MTljYiwgMHgyMDAzLCAweDAwMDAsCi0JMHgwYzg4LCAweDAwMDYsIDB4NjAxNCwgMHg5MDg0LCAweDE4MDQsIDB4OTA4NSwgMHgwMDA5LCAweDYwMTYsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGM2LCAweDAwMDYsIDB4MjA2MSwgMHgwMTAwLCAweDYxYTQsCi0JMHg2MGE3LCAweDk1ZjUsIDB4NjAxNCwgMHg5MDg0LCAweDE4MDQsIDB4OTA4NSwgMHgwMDA4LCAweDYwMTYsCi0JMHgwMDBlLCAweGEwMDEsIDB4YTAwMSwgMHhhMDAxLCAweDYxYTYsIDB4MDBjZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMGM2LCAweDAwZDYsIDB4MDAxNiwgMHgwMDI2LCAweDIwNjEsIDB4MDEwMCwgMHgyMDY5LCAweDAxNDAsCi0JMHgwODBjLCAweDcxN2UsIDB4MTFjMCwgMHgyMDAxLCAweDE5ZGUsIDB4MjAwNCwgMHg5MDA1LCAweDE1ZDAsCi0JMHgwODBjLCAweDcyNDYsIDB4MTE2MCwgMHgyMDYxLCAweDAxMDAsIDB4NjAyMCwgMHhkMGI0LCAweDExMjAsCi0JMHg2MDI0LCAweGQwODQsIDB4MDkwYywgMHgwZGY2LCAweDA4MGMsIDB4ODJkMCwgMHgwNDU4LCAweDAwYzYsCi0JMHgyMDYxLCAweDE5YzIsIDB4MDBjOCwgMHg2OTA0LCAweDkxOTQsIDB4NDAwMCwgMHgwNTQwLCAweDA4MTEsCi0JMHgwODBjLCAweDJiN2YsIDB4MDBjNiwgMHgyMDYxLCAweDE5YzIsIDB4NjEyOCwgMHg5MTkyLCAweDAwMDgsCi0JMHgxMjU4LCAweDgxMDgsIDB4NjEyYSwgMHg2MTI0LCAweDAwY2UsIDB4ODFmZiwgMHgwMTk4LCAweDA4MGMsCi0JMHg4MmQwLCAweDA4MGMsIDB4OTYxMSwgMHgwMDcwLCAweDYxMjQsIDB4OTFlNSwgMHgwMDAwLCAweDAxNDAsCi0JMHgwODBjLCAweGRiZjAsIDB4MDgwYywgMHg4MmQ5LCAweDIwMDksIDB4MDAxNCwgMHgwODBjLCAweGEwNjgsCi0JMHgwMGNlLCAweDAwMDAsIDB4MDAyZSwgMHgwMDFlLCAweDAwZGUsIDB4MDBjZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxOWRlLCAweDIwMDQsIDB4OTAwNSwgMHgxZGIwLCAweDAwYzYsIDB4MjA2MSwgMHgxOWMyLCAweDYxMjgsCi0JMHg5MTkyLCAweDAwMDMsIDB4MWUwOCwgMHg4MTA4LCAweDYxMmEsIDB4MDBjZSwgMHgwODBjLCAweDgyZDAsCi0JMHgwODBjLCAweDVjZWUsIDB4MjAwOSwgMHgxODVhLCAweDIxMTQsIDB4ODIxMCwgMHgyMjBhLCAweDBjMTAsCi0JMHgwMDk2LCAweDAwYzYsIDB4MDBkNiwgMHgwMGU2LCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweDgyZTYsCi0JMHgyMDcxLCAweDE5YzIsIDB4NzEzYywgMHg4MWZmLCAweDA5MDQsIDB4OTcwYSwgMHgyMDYxLCAweDAxMDAsCi0JMHgyMDY5LCAweDAxNDAsIDB4MDgwYywgMHg3MTdlLCAweDExOTAsIDB4MDAzNiwgMHgyMDE5LCAweDAwMDIsCi0JMHgwODBjLCAweDk4YjEsIDB4MDAzZSwgMHg3MTNjLCAweDIxNjAsIDB4MDgwYywgMHhkYmYwLCAweDIwMDksCi0JMHgwMDRhLCAweDA4MGMsIDB4YTA2OCwgMHgwODBjLCAweDcyNDYsIDB4MDgwNCwgMHg5NzBhLCAweDY5MDQsCi0JMHhkMWY0LCAweDA5MDQsIDB4OTcxMSwgMHgwODBjLCAweDJiN2YsIDB4MDBjNiwgMHg3MDNjLCAweDkwNjUsCi0JMHgwOTBjLCAweDBkZjYsIDB4NjAyMCwgMHgwMGNlLCAweDkwODYsIDB4MDAwNiwgMHgxNTY4LCAweDYxYzgsCi0JMHg2MGM0LCAweDkxMDUsIDB4MTU0OCwgMHgyMDA5LCAweDE4MGMsIDB4MjEwNCwgMHhkMGQ0LCAweDA1MjAsCi0JMHg2MjE0LCAweDkyOTQsIDB4MTgwMCwgMHgxMTI4LCAweDYyMjQsIDB4OTI5NCwgMHgwMDAyLCAweDE1NTAsCi0JMHgwMDcwLCAweGMwZDQsIDB4MjAwYSwgMHgwMDA2LCAweDIwMDEsIDB4MDEwMCwgMHgyMDA0LCAweDkwODYsCi0JMHgwMDBhLCAweDAwMGUsIDB4MDEyMCwgMHhkMGNjLCAweDAxMTAsIDB4MDgwYywgMHgyYWIxLCAweDYwMTQsCi0JMHg5MDg0LCAweGU3ZmQsIDB4OTA4NSwgMHgwMDEwLCAweDYwMTYsIDB4NzAzYywgMHgyMDYwLCAweDIwMDksCi0JMHgwMDQ5LCAweDA4MGMsIDB4YTA2OCwgMHgwMDcwLCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsCi0JMHg5OGIxLCAweDAwM2UsIDB4NzEzYywgMHgyMTYwLCAweDA4MGMsIDB4ZGJmMCwgMHgyMDA5LCAweDAwNGEsCi0JMHgwODBjLCAweGEwNjgsIDB4MDAyZSwgMHgwMDFlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGNlLCAweDAwOWUsCi0JMHgwMDA1LCAweGQxZWMsIDB4MTkwNCwgMHg5NmMzLCAweDA4MDQsIDB4OTZjNSwgMHgwMDI2LCAweDAwZTYsCi0JMHgyMDcxLCAweDE5YzIsIDB4NzA0OCwgMHhkMDg0LCAweDAxYzAsIDB4NzEzYywgMHg4MWZmLCAweDAxYTgsCi0JMHgyMDcxLCAweDAxMDAsIDB4OTE4OCwgMHgwMDA4LCAweDIxMTQsIDB4OTI4ZSwgMHgwMDA2LCAweDExMzgsCi0JMHg3MDE0LCAweDkwODQsIDB4MTk4NCwgMHg5MDg1LCAweDAwMTIsIDB4NzAxNiwgMHgwMDMwLCAweDcwMTQsCi0JMHg5MDg0LCAweDE5ODQsIDB4OTA4NSwgMHgwMDE2LCAweDcwMTYsIDB4MDBlZSwgMHgwMDJlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMDYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHg2MDEwLCAweDIwNTgsIDB4YmNhMCwgMHgyMDcxLCAweDE5YzIsCi0JMHg3MDE4LCAweDIwNTgsIDB4OGJmZiwgMHgwMTkwLCAweGI4YTAsIDB4OTQwNiwgMHgwMTE4LCAweGI4NTQsCi0JMHgyMDU4LCAweDBjYzAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4YWM2YywgMHhhZDcwLCAweGFlNzgsCi0JMHgwMDllLCAweDA4MGMsIDB4NjRkNSwgMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwMGUsCi0JMHgwMDRlLCAweDAwNWUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwODBjLCAweDkwZTcsIDB4NzAwMywgMHgxMjAwLCAweDc4MzgsIDB4NzAxMiwgMHg3ODNjLCAweDcwMTYsCi0JMHgwMGM2LCAweDc4MjAsIDB4OTA4NiwgMHgwMDA0LCAweDExNDgsIDB4NzgxMCwgMHg5MDA1LCAweDAxMzAsCi0JMHgwMGI2LCAweDIwNTgsIDB4YjgxMCwgMHhiOTE0LCAweDAwYmUsIDB4MDAyMCwgMHgyMDYxLCAweDE4MDAsCi0JMHg2MDc4LCAweDYxN2MsIDB4OTA4NCwgMHgwMGZmLCAweDcwMGEsIDB4NzEwZSwgMHgwMGNlLCAweDYwYzMsCi0JMHgwMDJjLCAweDA4MDQsIDB4OTVlZSwgMHgwODBjLCAweDkwZTcsIDB4NzAwMywgMHgwZjAwLCAweDc4MDgsCi0JMHhkMDljLCAweDAxMjgsIDB4YjgxMCwgMHg5MDg0LCAweDAwZmYsIDB4NzAwYSwgMHhiODE0LCAweDcwMGUsCi0JMHg2MGMzLCAweDAwMDgsIDB4MDgwNCwgMHg5NWVlLCAweDAxNTYsIDB4MDgwYywgMHg5MTMyLCAweDcwMDMsCi0JMHgwMjAwLCAweDIwMTEsIDB4MTg0OCwgMHg2M2YwLCAweDIzMTIsIDB4MjBhOSwgMHgwMDA2LCAweDIwMTEsCi0JMHgxODQwLCAweDIwMTksIDB4MTg0MSwgMHg5ZWYwLCAweDAwMDIsIDB4MjM3NiwgMHg4ZTcwLCAweDIyNzYsCi0JMHg4ZTcwLCAweDkzOTgsIDB4MDAwMiwgMHg5MjkwLCAweDAwMDIsIDB4MWYwNCwgMHg5N2FkLCAweDYwYzMsCi0JMHgwMDFjLCAweDAxNWUsIDB4MDgwNCwgMHg5NWVlLCAweDAwMTYsIDB4MDAyNiwgMHgwODBjLCAweDkxMGUsCi0JMHgwODBjLCAweDkxMjAsIDB4OWU4MCwgMHgwMDA0LCAweDIwZTksIDB4MDAwMCwgMHgyMGEwLCAweDc4MTQsCi0JMHgwMDk2LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LCAweGE4NjAsIDB4MjBlMCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDIxLCAweDIwOTgsIDB4MDA5ZSwgMHg3ODA4LCAweDkwODgsIDB4MDAwMiwgMHgyMWE4LCAweDkxOTIsCi0JMHgwMDEwLCAweDEyNTAsIDB4NDAwMywgMHg5MDgwLCAweDAwMDQsIDB4ODAwMywgMHg2MGMyLCAweDA4MGMsCi0JMHg5NWVlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDA1LCAweDIwYTksIDB4MDAxMCwgMHg0MDAzLCAweDA4MGMsCi0JMHg5ZGRkLCAweDIwYTEsIDB4MDI0MCwgMHgyMmE4LCAweDQwMDMsIDB4MGM2OCwgMHgwODBjLCAweDkwZTcsCi0JMHg3MDAzLCAweDYyMDAsIDB4NzgwOCwgMHg3MDBlLCAweDYwYzMsIDB4MDAwOCwgMHgwODA0LCAweDk1ZWUsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg5MGU3LCAweDIwZTksIDB4MDAwMCwgMHgyMGExLCAweDAyNGMsCi0JMHg3ODE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODAwLCAweDIwNDgsIDB4YTg2MCwgMHgyMGUwLCAweGE4NWMsCi0JMHg5MDgwLCAweDAwMjMsIDB4MjA5OCwgMHgwMDllLCAweDc4MDgsIDB4OTA4OCwgMHgwMDAyLCAweDIxYTgsCi0JMHg0MDAzLCAweDgwMDMsIDB4NjBjMiwgMHgwODBjLCAweDk1ZWUsIDB4MDAyZSwgMHgwMDFlLCAweDAwMDUsCi0JMHgwMGU2LCAweDAwYzYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE5YzIsCi0JMHg3MDBjLCAweDIwNjAsIDB4OGNmZiwgMHgwMTc4LCAweDA4MGMsIDB4YmY1NiwgMHgxMTEwLCAweDA4MGMsCi0JMHhhOWE3LCAweDYwMGMsIDB4MDAwNiwgMHgwODBjLCAweGMxYzIsIDB4MDgwYywgMHg5ZmVhLCAweDA4MGMsCi0JMHg5OTU1LCAweDAwY2UsIDB4MGM3OCwgMHgyYzAwLCAweDcwMGUsIDB4NzAwYSwgMHgwMTJlLCAweDAwMGUsCi0JMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMTI2LCAweDAxNTYsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsCi0JMHgwMGM2LCAweDAwNjYsIDB4MDAyNiwgMHgwMDE2LCAweDAwMDYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4OTE4YywgMHhlN2ZmLCAweDIxMDIsIDB4MjA2OSwgMHgwMTAwLCAweDIwNzksCi0JMHgwMTQwLCAweDIwNzEsIDB4MTljMiwgMHg3MDI0LCAweDIwNjAsIDB4OGNmZiwgMHgwMWY4LCAweDA4MGMsCi0JMHg5NjFhLCAweDZhYzAsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4ODJkOSwgMHgwMGM2LCAweDIwNjEsCi0JMHgwMTAwLCAweDA4MGMsIDB4OWRmNiwgMHgwMGNlLCAweDIwYTksIDB4MDFmNCwgMHgwNDYxLCAweDIwMDksCi0JMHgwMDEzLCAweDA4MGMsIDB4YTA2OCwgMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDZlLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMTVlLCAweDAxMmUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MDAsCi0JMHgyMDA0LCAweDkwOTYsIDB4MDAwMSwgMHgwZDc4LCAweDkwOTYsIDB4MDAwNCwgMHgwZDYwLCAweDA4MGMsCi0JMHg4MmQ5LCAweDY4MTQsIDB4OTA4NCwgMHgwMDAxLCAweDAxMTAsIDB4NjhhNywgMHg5NWY1LCAweDY4MTcsCi0JMHgwMDA4LCAweDY4YzMsIDB4MDAwMCwgMHgyMDExLCAweDVjOTgsIDB4MDgwYywgMHg4MjU5LCAweDIwYTksCi0JMHgwMWY0LCAweDAwMDksIDB4MDhjMCwgMHg2ODI0LCAweGQwOTQsIDB4MDE0MCwgMHg2ODI3LCAweDAwMDQsCi0JMHg3ODA0LCAweDkwODQsIDB4NDAwMCwgMHgxOTBjLCAweDJiN2YsIDB4MDA5MCwgMHhkMDg0LCAweDAxMTgsCi0JMHg2ODI3LCAweDAwMDEsIDB4MDAxMCwgMHgxZjA0LCAweDk4OTMsIDB4NzgwNCwgMHg5MDg0LCAweDEwMDAsCi0JMHgwMTM4LCAweDIwMDEsIDB4MDEwMCwgMHgwODBjLCAweDJiNmYsIDB4OTAwNiwgMHgwODBjLCAweDJiNmYsCi0JMHgwMDA1LCAweDAxMjYsIDB4MDE1NiwgMHgwMGY2LCAweDAwZTYsIDB4MDBkNiwgMHgwMGM2LCAweDAwNjYsCi0JMHgwMDI2LCAweDAwMTYsIDB4MDAwNiwgMHgyMDkxLCAweDgwMDAsIDB4MjAwMSwgMHgxODBjLCAweDIwMGMsCi0JMHg5MThjLCAweGRiZmYsIDB4MjEwMiwgMHgyMDY5LCAweDAxMDAsIDB4MjA3OSwgMHgwMTQwLCAweDIwNzEsCi0JMHgxOWMyLCAweDcwM2MsIDB4MjA2MCwgMHg4Y2ZmLCAweDA5MDQsIDB4OTkxOCwgMHg5Mzg2LCAweDAwMDIsCi0JMHgxMTI4LCAweDY4MTQsIDB4OTA4NCwgMHgwMDAyLCAweDA5MDQsIDB4OTkxOCwgMHg2OGFmLCAweDk1ZjUsCi0JMHg2ODE3LCAweDAwMTAsIDB4MjAwOSwgMHgwMGZhLCAweDgxMDksIDB4MWRmMCwgMHg2OWM2LCAweDY4Y2IsCi0JMHgwMDA4LCAweDA4MGMsIDB4ODJlNiwgMHgwODBjLCAweDFlMzAsIDB4MjAwMSwgMHgwMDMyLCAweDY5MjAsCi0JMHhkMWJjLCAweDAxMzAsIDB4ODAwMSwgMHgxZGQ4LCAweDY5MmMsIDB4OTE4ZCwgMHgwMDA4LCAweDY5MmUsCi0JMHgyMGE5LCAweDAzZTgsIDB4NjgyNCwgMHhkMDk0LCAweDAxNDAsIDB4NjgyNywgMHgwMDA0LCAweDc4MDQsCi0JMHg5MDg0LCAweDQwMDAsIDB4MTkwYywgMHgyYjdmLCAweDAwOTAsIDB4ZDA4YywgMHgwMTE4LCAweDY4MjcsCi0JMHgwMDAyLCAweDAwMTAsIDB4MWYwNCwgMHg5OGYyLCAweDc4MDQsIDB4OTA4NCwgMHgxMDAwLCAweDAxMzgsCi0JMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyYjZmLCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDY4MjcsCi0JMHg0MDAwLCAweDY4MjQsIDB4ODNmZiwgMHgxMTIwLCAweDIwMDksIDB4MDA0OSwgMHgwODBjLCAweGEwNjgsCi0JMHgwMDBlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMTVlLCAweDAxMmUsIDB4MDAwNSwgMHgwMGQ2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNjksCi0JMHgxOWMyLCAweDZhMDYsIDB4MDEyZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBkNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNjksIDB4MTljMiwgMHg2YTMyLCAweDAxMmUsIDB4MDBkZSwgMHgwMDA1LCAweDA4MGMsCi0JMHg5MmFhLCAweDcwNDcsIDB4MTAwMCwgMHgwMDk4LCAweDA4MGMsIDB4OTJhYSwgMHg3MDQ3LCAweDQwMDAsCi0JMHgwMDcwLCAweDA4MGMsIDB4OTJhYSwgMHg3MDQ3LCAweDIwMDAsIDB4MDA0OCwgMHgwODBjLCAweDkyYWEsCi0JMHg3MDQ3LCAweDA0MDAsIDB4MDAyMCwgMHgwODBjLCAweDkyYWEsIDB4NzA0NywgMHgwMjAwLCAweDc4NTQsCi0JMHg3MDMyLCAweDYwYzMsIDB4MDAyMCwgMHgwODA0LCAweDk1ZWUsIDB4MDBlNiwgMHgyMDcxLCAweDE5YzIsCi0JMHg3MDIwLCAweDkwMDUsIDB4MDExMCwgMHg4MDAxLCAweDcwMjIsIDB4MDBlZSwgMHgwMDA1LCAweDAwZjYsCi0JMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDc2LCAweDAwNjYsIDB4MDAwNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNzEsIDB4MTljMiwgMHg3NjE0LCAweDI2NjAsIDB4MjY3OCwgMHgyMDM5LCAweDAwMDEsCi0JMHg4N2ZmLCAweDA5MDQsIDB4OTlmYSwgMHg4Y2ZmLCAweDA5MDQsIDB4OTlmYSwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDA2LCAweDE5MDQsIDB4OTlmNSwgMHg4OGZmLCAweDAxMzgsIDB4MjgwMCwgMHg5YzA2LCAweDE5MDQsCi0JMHg5OWY1LCAweDIwMzksIDB4MDAwMCwgMHgwMDUwLCAweDYwMTAsIDB4OWIwNiwgMHgxOTA0LCAweDk5ZjUsCi0JMHg4NWZmLCAweDAxMjAsIDB4NjA1NCwgMHg5MTA2LCAweDE5MDQsIDB4OTlmNSwgMHg3MDI0LCAweDljMDYsCi0JMHgxNWIwLCAweDIwNjksIDB4MDEwMCwgMHg2OGMwLCAweDkwMDUsIDB4MTE2MCwgMHg2ODI0LCAweGQwODQsCi0JMHgwMTQ4LCAweDY4MjcsIDB4MDAwMSwgMHgwODBjLCAweDgyZDksIDB4MDgwYywgMHg5YTdmLCAweDcwMjcsCi0JMHgwMDAwLCAweDA0MjgsIDB4MDgwYywgMHg4MmQ5LCAweDY4MjAsIDB4ZDBiNCwgMHgwMTEwLCAweDY4YTcsCi0JMHg5NWY1LCAweDY4MTcsIDB4MDAwOCwgMHg2OGMzLCAweDAwMDAsIDB4MDgwYywgMHg5YTdmLCAweDcwMjcsCi0JMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsIDB4OTM4NCwgMHgxMDAwLCAweDAxMzgsCi0JMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyYjZmLCAweDkwMDYsIDB4MDgwYywgMHgyYjZmLCAweDIwNjksCi0JMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsIDB4MDAwMSwgMHgwMDNlLCAweDcwMTQsCi0JMHg5YzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjE2LCAweDcwMTAsIDB4OWMzNiwgMHgxMTQwLCAweDJjMDAsCi0JMHg5ZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDEyLCAweDAwMTAsIDB4NzAxMywgMHgwMDAwLCAweDY2MGMsCi0JMHgwMDY2LCAweDJjMDAsIDB4OWYwNiwgMHgwMTEwLCAweDdlMGUsIDB4MDAwOCwgMHgyNjc4LCAweDg5ZmYsCi0JMHgxMTY4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHgwODBjLCAweGJkNGMsCi0JMHgwMTEwLCAweDA4MGMsIDB4ZDdlMiwgMHgwMDllLCAweDA4MGMsIDB4YTAxYywgMHgwODBjLCAweDk5NTUsCi0JMHg4OGZmLCAweDExOTAsIDB4MDBjZSwgMHgwODA0LCAweDk5NzAsIDB4MmM3OCwgMHg2MDBjLCAweDIwNjAsCi0JMHgwODA0LCAweDk5NzAsIDB4OTAwNiwgMHgwMTJlLCAweDAwMGUsIDB4MDA2ZSwgMHgwMDdlLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMDA1LCAweDYwMWIsIDB4MDAwMCwgMHgwMGNlLCAweDk4YzUsCi0JMHgwMDAxLCAweDBjODgsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsIDB4MDA5NiwgMHgwMGM2LCAweDAwNjYsCi0JMHgwMDI2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxOWMyLCAweDc2MzgsCi0JMHgyNjYwLCAweDI2NzgsIDB4OGNmZiwgMHgwOTA0LCAweDlhNmUsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsCi0JMHgxOTA0LCAweDlhNjksIDB4ODdmZiwgMHgwMTI4LCAweDI3MDAsIDB4OWMwNiwgMHgxOTA0LCAweDlhNjksCi0JMHgwMDQwLCAweDYwMTAsIDB4OWIwNiwgMHgxNWU4LCAweDg1ZmYsIDB4MDExOCwgMHg2MDU0LCAweDkxMDYsCi0JMHgxNWMwLCAweDcwM2MsIDB4OWMwNiwgMHgxMTY4LCAweDAwMzYsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsCi0JMHg5OGIxLCAweDcwMzMsIDB4MDAwMCwgMHg5MDA2LCAweDcwM2UsIDB4NzA0MiwgMHg3MDQ2LCAweDcwNGEsCi0JMHgwMDNlLCAweDcwMzgsIDB4OWMzNiwgMHgxMTEwLCAweDY2MGMsIDB4NzYzYSwgMHg3MDM0LCAweDljMzYsCi0JMHgxMTQwLCAweDJjMDAsIDB4OWYzNiwgMHgwMTE4LCAweDJmMDAsIDB4NzAzNiwgMHgwMDEwLCAweDcwMzcsCi0JMHgwMDAwLCAweDY2MGMsIDB4MDA2NiwgMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsCi0JMHgyNjc4LCAweDYwMGYsIDB4MDAwMCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhiZDRjLCAweDAxMTAsCi0JMHgwODBjLCAweGQ3ZTIsIDB4MDgwYywgMHhhMDFjLCAweDg3ZmYsIDB4MTE5OCwgMHgwMGNlLCAweDA4MDQsCi0JMHg5YTFhLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsIDB4OWExYSwgMHg5MDA2LCAweDAxMmUsCi0JMHgwMDBlLCAweDAwMmUsIDB4MDA2ZSwgMHgwMGNlLCAweDAwOWUsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsCi0JMHgwMDA1LCAweDYwMWIsIDB4MDAwMCwgMHgwMGNlLCAweDk3YmQsIDB4MDAwMSwgMHgwYzgwLCAweDAwZTYsCi0JMHgyMDcxLCAweDE5YzIsIDB4MjAwMSwgMHgxODAwLCAweDIwMDQsIDB4OTA4NiwgMHgwMDAyLCAweDExMTgsCi0JMHg3MDA3LCAweDAwMDUsIDB4MDAxMCwgMHg3MDA3LCAweDAwMDAsIDB4MDBlZSwgMHgwMDA1LCAweDAwZjYsCi0JMHgwMGU2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDI2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgyMDcxLCAweDE5YzIsIDB4MmMxMCwgMHg3NjM4LCAweDI2NjAsIDB4MjY3OCwgMHg4Y2ZmLCAweDA1NDAsCi0JMHgyMjAwLCAweDljMDYsIDB4MTUwOCwgMHg3MDM4LCAweDljMzYsIDB4MTExMCwgMHg2NjBjLCAweDc2M2EsCi0JMHg3MDM0LCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsIDB4MDExOCwgMHgyZjAwLCAweDcwMzYsCi0JMHgwMDEwLCAweDcwMzcsIDB4MDAwMCwgMHg2NjBjLCAweDJjMDAsIDB4OWYwNiwgMHgwMTEwLCAweDdlMGUsCi0JMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDYwMDQsIDB4OTA4NiwgMHgwMDQwLCAweDA5MGMsCi0JMHg4YTgzLCAweDkwODUsIDB4MDAwMSwgMHgwMDIwLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4YjAsCi0JMHgwMTJlLCAweDAwMGUsIDB4MDAyZSwgMHgwMDZlLCAweDAwY2UsIDB4MDBlZSwgMHgwMGZlLCAweDAwMDUsCi0JMHgwMDk2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDA2NiwgMHgwMDI2LCAweDAwMDYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgyMDcxLCAweDE5YzIsIDB4NzYwYywgMHgyNjYwLCAweDI2NzgsCi0JMHg4Y2ZmLCAweDA5MDQsIDB4OWI2NSwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiOGEwLCAweDAwYmUsCi0JMHg5MjA2LCAweDE5MDQsIDB4OWI2MCwgMHg3MDI0LCAweDljMDYsIDB4MTUyMCwgMHgyMDY5LCAweDAxMDAsCi0JMHg2OGMwLCAweDkwMDUsIDB4MDkwNCwgMHg5YjM3LCAweDA4MGMsIDB4OTYxYSwgMHg2OGMzLCAweDAwMDAsCi0JMHgwODBjLCAweDlhN2YsIDB4NzAyNywgMHgwMDAwLCAweDAwMzYsIDB4MjA2OSwgMHgwMTQwLCAweDZiMDQsCi0JMHg5Mzg0LCAweDEwMDAsIDB4MDEzOCwgMHgyMDAxLCAweDAxMDAsIDB4MDgwYywgMHgyYjZmLCAweDkwMDYsCi0JMHgwODBjLCAweDJiNmYsIDB4MjA2OSwgMHgwMTAwLCAweDY4MjQsIDB4ZDA4NCwgMHgwMTEwLCAweDY4MjcsCi0JMHgwMDAxLCAweDAwM2UsIDB4NzAwYywgMHg5YzM2LCAweDExMTAsIDB4NjYwYywgMHg3NjBlLCAweDcwMDgsCi0JMHg5YzM2LCAweDExNDAsIDB4MmMwMCwgMHg5ZjM2LCAweDAxMTgsIDB4MmYwMCwgMHg3MDBhLCAweDAwMTAsCi0JMHg3MDBiLCAweDAwMDAsIDB4NjYwYywgMHgwMDY2LCAweDJjMDAsIDB4OWYwNiwgMHgwMTEwLCAweDdlMGUsCi0JMHgwMDA4LCAweDI2NzgsIDB4NjAwZiwgMHgwMDAwLCAweDA4MGMsIDB4YmY0NSwgMHgxMTgwLCAweDA4MGMsCi0JMHgzMGJlLCAweDA4MGMsIDB4YmY1NiwgMHgxNTE4LCAweDA4MGMsIDB4YTlhNywgMHgwNDAwLCAweDA4MGMsCi0JMHg5YTdmLCAweDY4MjQsIDB4ZDA4NCwgMHgwOWIwLCAweDY4MjcsIDB4MDAwMSwgMHgwODk4LCAweDA4MGMsCi0JMHhiZjU2LCAweDExMTgsIDB4MDgwYywgMHhhOWE3LCAweDAwOTAsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsCi0JMHhiZDRjLCAweDAxNjgsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDMsIDB4MTUwOCwgMHhhODY3LCAweDAxMDMsCi0JMHhhYjdhLCAweGE4NzcsIDB4MDAwMCwgMHgwODBjLCAweDZhMTUsIDB4MDgwYywgMHhiZjM5LCAweDA4MGMsCi0JMHhjMWMyLCAweDA4MGMsIDB4YTAxYywgMHgwODBjLCAweDk5NTUsIDB4MDBjZSwgMHgwODA0LCAweDlhZTAsCi0JMHgyYzc4LCAweDYwMGMsIDB4MjA2MCwgMHgwODA0LCAweDlhZTAsIDB4MDEyZSwgMHgwMDBlLCAweDAwMmUsCi0JMHgwMDZlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMjAsCi0JMHg5MDg2LCAweDAwMDYsIDB4MWQyMCwgMHgwODBjLCAweGQ3ZTIsIDB4MGMwOCwgMHgwMGQ2LCAweDA4MGMsCi0JMHg5MTMyLCAweDcwMDMsIDB4MDIwMCwgMHg3MDA3LCAweDAwMTQsIDB4NjBjMywgMHgwMDE0LCAweDIwZTEsCi0JMHgwMDAxLCAweDIwOTksIDB4MTk2MywgMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjUwLCAweDIwYTksCi0JMHgwMDA0LCAweDQwMDMsIDB4NzAyMywgMHgwMDA0LCAweDcwMjcsIDB4Nzg3OCwgMHgwODBjLCAweDk1ZWUsCi0JMHgwMGRlLCAweDAwMDUsIDB4MDgwYywgMHg5MTMyLCAweDcwMGIsIDB4MDgwMCwgMHg3ODE0LCAweDkwODQsCi0JMHhmZjAwLCAweDcwMGUsIDB4NzgxNCwgMHg5MDg0LCAweDAwZmYsIDB4NzAyMiwgMHg3ODJjLCAweDcwMjYsCi0JMHg3ODU4LCAweDkwODQsIDB4MDBmZiwgMHg5MDg1LCAweDAyMDAsIDB4NzAwMiwgMHg3ODU4LCAweDkwODQsCi0JMHhmZjAwLCAweDgwMDcsIDB4NzAwNiwgMHg2MGMyLCAweDA4MDQsIDB4OTVlZSwgMHgwMGI2LCAweDAwZDYsCi0JMHgwMDE2LCAweDAwZDYsIDB4MmY2OCwgMHgyMDA5LCAweDAwMzUsIDB4MDgwYywgMHhjM2NmLCAweDAwZGUsCi0JMHgxOTA0LCAweDljMTMsIDB4MDgwYywgMHg5MGU3LCAweDcwMDMsIDB4MTMwMCwgMHg3ODJjLCAweDA4MGMsCi0JMHg5ZDE5LCAweDIwNjgsIDB4NjgyMCwgMHg5MDg2LCAweDAwMDMsIDB4MDU2MCwgMHg3ODEwLCAweDIwNTgsCi0JMHhiYWEwLCAweDA4MGMsIDB4OWY2OSwgMHgxMWQ4LCAweDkyODYsIDB4MDA3ZSwgMHgxMTI4LCAweDcwMGIsCi0JMHgwMGZmLCAweDcwMGYsIDB4ZmZmZSwgMHgwNDk4LCAweDkyODYsIDB4MDA3ZiwgMHgxMTI4LCAweDcwMGIsCi0JMHgwMGZmLCAweDcwMGYsIDB4ZmZmZCwgMHgwNDU4LCAweDkyODQsIDB4ZmY4MCwgMHgwMTgwLCAweDkyODYsCi0JMHgwMDgwLCAweDExMjgsIDB4NzAwYiwgMHgwMGZmLCAweDcwMGYsIDB4ZmZmYywgMHgwNDAwLCAweDkyZDgsCi0JMHgxMDAwLCAweDJiNWMsIDB4YjgxMCwgMHg3MDBhLCAweGI4MTQsIDB4NzAwZSwgMHgwMGMwLCAweDYwOTgsCi0JMHg3MDBlLCAweDAwYTgsIDB4MDgwYywgMHg5ZjY5LCAweDExMzAsIDB4NzgxMCwgMHgyMDU4LCAweGI4YTAsCi0JMHg5MDgyLCAweDAwN2UsIDB4MDI1MCwgMHgwMGQ2LCAweDIwNjksIDB4MTgxZSwgMHgyZDA0LCAweDcwMGEsCi0JMHg4ZDY4LCAweDJkMDQsIDB4NzAwZSwgMHgwMGRlLCAweDAwMTAsIDB4NjAzNCwgMHg3MDBlLCAweDc4MzgsCi0JMHg3MDEyLCAweDc4M2MsIDB4NzAxNiwgMHg2MGMzLCAweDAwMGMsIDB4MDAxZSwgMHgwMGRlLCAweDA4MGMsCi0JMHg5NWVlLCAweDAwYmUsIDB4MDAwNSwgMHg3ODFiLCAweDAwMDEsIDB4NzgwMywgMHgwMDA2LCAweDAwMWUsCi0JMHgwMGRlLCAweDAwYmUsIDB4MDAwNSwgMHg3OTJjLCAweDkxODAsIDB4MDAwOCwgMHgyMDBjLCAweDkxODYsCi0JMHgwMDA2LCAweDAxYzAsIDB4OTE4NiwgMHgwMDAzLCAweDA5MDQsIDB4OWM4ZSwgMHg5MTg2LCAweDAwMDUsCi0JMHgwOTA0LCAweDljNzYsIDB4OTE4NiwgMHgwMDA0LCAweDA1ZDgsIDB4OTE4NiwgMHgwMDA4LCAweDA5MDQsCi0JMHg5YzdmLCAweDc4MDcsIDB4MDAzNywgMHg3ODJmLCAweDAwMDMsIDB4NzgxNywgMHgxNzAwLCAweDA4MGMsCi0JMHg5Y2Y2LCAweDAwMDUsIDB4MDgwYywgMHg5Y2I3LCAweDAwZDYsIDB4MDAyNiwgMHg3OTJjLCAweDIxNjgsCi0JMHgyMDA5LCAweDQwMDAsIDB4NjgwMCwgMHgwMDAyLCAweDljNTcsIDB4OWM2MiwgMHg5YzU5LCAweDljNjIsCi0JMHg5YzVlLCAweDljNTcsIDB4OWM1NywgMHg5YzYyLCAweDljNjIsIDB4OWM2MiwgMHg5YzYyLCAweDljNTcsCi0JMHg5YzU3LCAweDljNTcsIDB4OWM1NywgMHg5YzU3LCAweDljNjIsIDB4OWM1NywgMHg5YzYyLCAweDA4MGMsCi0JMHgwZGY2LCAweDY4MjQsIDB4ZDBlNCwgMHgwMTEwLCAweGQwY2MsIDB4MDExMCwgMHg5MDBlLCAweDAwMTAsCi0JMHgyMDA5LCAweDIwMDAsIDB4NjgyYywgMHg3MDIyLCAweDY4MzAsIDB4NzAyNiwgMHgwODA0LCAweDljYjAsCi0JMHgwODBjLCAweDljYjcsIDB4MDBkNiwgMHgwMDI2LCAweDc5MmMsIDB4MjE2OCwgMHgyMDA5LCAweDQwMDAsCi0JMHg2YTAwLCAweDkyODYsIDB4MDAwMiwgMHgxMTA4LCAweDkwMGUsIDB4MDRkMCwgMHgwODBjLCAweDljYjcsCi0JMHgwMGQ2LCAweDAwMjYsIDB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHgwNDg4LCAweDA0YjksCi0JMHgwMGQ2LCAweDAwMjYsIDB4NzkyYywgMHgyMTY4LCAweDIwMDksIDB4NDAwMCwgMHg5Mjg2LCAweDAwMDUsCi0JMHgwMTE4LCAweDkyODYsIDB4MDAwMiwgMHgxMTA4LCAweDkwMGUsIDB4MDQxMCwgMHgwNDQxLCAweDAwZDYsCi0JMHgwMDI2LCAweDc5MmMsIDB4MjE2OCwgMHg2ODE0LCAweDY5MjQsIDB4YzE4NSwgMHg2OTI2LCAweDAwOTYsCi0JMHgyMDQ4LCAweGE5YWMsIDB4YTgzNCwgMHg5MTEyLCAweGE5YjAsIDB4YTgzOCwgMHgwMDllLCAweDkxMDMsCi0JMHg3MDIyLCAweDcyMjYsIDB4NzkyYywgMHg5MTgwLCAweDAwMDAsIDB4MjAwNCwgMHg5MDhlLCAweDAwMDIsCi0JMHgwMTMwLCAweDkwOGUsIDB4MDAwNCwgMHgwMTE4LCAweDIwMDksIDB4NDAwMCwgMHgwMDA4LCAweDkwMGUsCi0JMHg3MTJhLCAweDYwYzMsIDB4MDAxOCwgMHgwMDJlLCAweDAwZGUsIDB4MDgwNCwgMHg5NWVlLCAweDAwYjYsCi0JMHgwMDM2LCAweDAwNDYsIDB4MDA1NiwgMHgwMDY2LCAweDA4MGMsIDB4OTEzMiwgMHg5MDA2LCAweDcwMDMsCi0JMHgwMjAwLCAweDc5MzgsIDB4NzEwYSwgMHg3OTNjLCAweDcxMGUsIDB4NzgxMCwgMHgyMDU4LCAweGI4YTAsCi0JMHgwODBjLCAweDlmNjksIDB4MTExOCwgMHg5MDkyLCAweDAwN2UsIDB4MDI2OCwgMHgwMGQ2LCAweDIwNjksCi0JMHgxODFlLCAweDJkMmMsIDB4OGQ2OCwgMHgyZDM0LCAweDkwZDgsIDB4MTAwMCwgMHgyYjVjLCAweGJiMTAsCi0JMHhiYzE0LCAweDAwZGUsIDB4MDAyOCwgMHg5MDFlLCAweDY0OTgsIDB4MjAyOSwgMHgwMDAwLCAweDY2MzQsCi0JMHg3ODJjLCAweDkwODAsIDB4MDAwOCwgMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTI4LCAweDc1MTIsCi0JMHg3NjE2LCAweDczMWEsIDB4NzQxZSwgMHgwMDIwLCAweDczMTIsIDB4NzQxNiwgMHg3NTFhLCAweDc2MWUsCi0JMHgwMDZlLCAweDAwNWUsIDB4MDA0ZSwgMHgwMDNlLCAweDAwYmUsIDB4MDAwNSwgMHgwODBjLCAweDkxMzIsCi0JMHg3MDAzLCAweDAxMDAsIDB4NzgyYywgMHg3MDBhLCAweDc4MTQsIDB4NzAwZSwgMHg3MDBlLCAweDYwYzMsCi0JMHgwMDA4LCAweDA4MDQsIDB4OTVlZSwgMHgwODBjLCAweDkwZGUsIDB4NzAwMywgMHgxNDAwLCAweDc4MzgsCi0JMHg3MDBhLCAweDAwNzksIDB4NzgzYywgMHg3MDBlLCAweDc4MmMsIDB4NzAxMiwgMHg3ODMwLCAweDcwMTYsCi0JMHg3ODM0LCAweDkwODQsIDB4MDBmZiwgMHg4MDA3LCAweDcwMWEsIDB4NjBjMywgMHgwMDEwLCAweDA4MDQsCi0JMHg5NWVlLCAweDAwZTYsIDB4MjA3MSwgMHgwMjQwLCAweDAwMDYsIDB4MDBmNiwgMHgyMDc4LCAweDc4MTAsCi0JMHgwMGI2LCAweDIwNTgsIDB4YjhiYywgMHhkMDg0LCAweDAxMjAsIDB4Nzg0NCwgMHg3MDJhLCAweDc4NDgsCi0JMHg3MDJlLCAweDAwYmUsIDB4MDBmZSwgMHgwMDBlLCAweDAwZWUsIDB4MDAwNSwgMHgwODBjLCAweDkxMjksCi0JMHg3MDAzLCAweDAxMDAsIDB4NzgyYywgMHg3MDBhLCAweDc4MTQsIDB4NzAwZSwgMHg2MGMzLCAweDAwMDgsCi0JMHgwODA0LCAweDk1ZWUsIDB4MDAyMSwgMHg2MGMzLCAweDAwMDAsIDB4MDgwNCwgMHg5NWVlLCAweDAwZDYsCi0JMHgwODBjLCAweDlkZjIsIDB4YjgxMCwgMHg5MDg1LCAweDAzMDAsIDB4NzAwMiwgMHhiODE0LCAweDcwMDYsCi0JMHgyMDY5LCAweDE4MDAsIDB4Njg3OCwgMHg3MDBhLCAweDY4N2MsIDB4NzAwZSwgMHg3MDEzLCAweDA4MTksCi0JMHgwODBjLCAweDk1ZGMsIDB4NzIxYSwgMHgyZjEwLCAweDcyMjIsIDB4N2EwOCwgMHg3MjI2LCAweDIwNzEsCi0JMHgwMjRjLCAweDAwZGUsIDB4MDAwNSwgMHgwMGE5LCAweDc5MTQsIDB4NzEyYSwgMHg2MGMzLCAweDAwMDAsCi0JMHg2MGE3LCAweDk1NzUsIDB4MDAyNiwgMHgwODBjLCAweDI5ZTksIDB4MDIyOCwgMHgyMDExLCAweDAxMDEsCi0JMHgyMjA0LCAweGMwYzUsIDB4MjAxMiwgMHgwMDJlLCAweDA4MGMsIDB4OTYxMSwgMHgwODBjLCAweDgyZDAsCi0JMHgwMDA1LCAweDAwMzYsIDB4MDA5NiwgMHgwMGQ2LCAweDAwZTYsIDB4Nzg1OCwgMHgyMDQ4LCAweGFhN2MsCi0JMHg5Mjk2LCAweDAwYzAsIDB4OTI5NCwgMHgwMGZkLCAweGFhN2UsIDB4YWE4MCwgMHg5Mjk0LCAweDAzMDAsCi0JMHhhYTgyLCAweGE5NmMsIDB4OTE5NCwgMHgwMGZmLCAweGFiNzQsIDB4OTM4NCwgMHgwMGZmLCAweDkwOGQsCi0JMHhjMjAwLCAweGE5NmUsIDB4OTM4NCwgMHhmZjAwLCAweDkyMTUsIDB4YWE3NiwgMHhhODcwLCAweGFhNzgsCi0JMHhhODdhLCAweGFhNzIsIDB4MDBkNiwgMHgyMDY5LCAweDAyMDAsIDB4MDgwYywgMHg5ZGYyLCAweDAwZGUsCi0JMHgyMGU5LCAweDAwMDAsIDB4MjBhMSwgMHgwMjQwLCAweDIwYTksIDB4MDAwYSwgMHhhODYwLCAweDIwZTAsCi0JMHhhODVjLCAweDkwODAsIDB4MDAxYiwgMHgyMDk4LCAweDQwMDMsIDB4NjBhMywgMHgwMDM1LCAweGFhNjgsCi0JMHg5Mjk0LCAweDcwMDAsIDB4OTI4NiwgMHgzMDAwLCAweDAxMTAsIDB4NjBhMywgMHgwMDM3LCAweDAwZWUsCi0JMHgwMGRlLCAweDAwOWUsIDB4MDAzZSwgMHgwMDA1LCAweDkwMGUsIDB4NzgxNCwgMHgwMDk2LCAweDIwNDgsCi0JMHhhODdjLCAweGQwZmMsIDB4MDFjMCwgMHg5MDg0LCAweDAwMDMsIDB4MTFhOCwgMHgyMDAxLCAweDE4MGMsCi0JMHgyMDA0LCAweGQwYmMsIDB4MDE4MCwgMHg3ODI0LCAweGQwY2MsIDB4MTE2OCwgMHhkMGM0LCAweDExNTgsCi0JMHhhOGE4LCAweDkwMDUsIDB4MTE0MCwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMWQ1LCAweDIxMDIsCi0JMHgyMDA5LCAweDE5OGQsIDB4MjEwYywgMHgwMDllLCAweDkxOGQsIDB4MDA5MiwgMHgwMDEwLCAweDIwMDksCi0JMHgwMDk2LCAweDYwYWIsIDB4MDAzNiwgMHg2MTE2LCAweDAwMDUsIDB4MjAwOSwgMHgwMDA5LCAweDAwYTAsCi0JMHgyMDA5LCAweDAwMGEsIDB4MDA4OCwgMHgyMDA5LCAweDAwMGIsIDB4MDA3MCwgMHgyMDA5LCAweDAwMGMsCi0JMHgwMDU4LCAweDIwMDksIDB4MDAwZCwgMHgwMDQwLCAweDIwMDksIDB4MDAwZSwgMHgwMDI4LCAweDIwMDksCi0JMHgwMDBmLCAweDAwMTAsIDB4MjAwOSwgMHgwMDA4LCAweDY5MTIsIDB4MDAwNSwgMHgwMGQ2LCAweDkyOTAsCi0JMHgwMDE4LCAweDgyMTQsIDB4MjBlOSwgMHgwMDAwLCAweDIwNjksIDB4MDIwMCwgMHg2ODEzLCAweDAwMDAsCi0JMHgyMmE4LCAweDkyODQsIDB4MDBlMCwgMHgwMTI4LCAweDIwYTksIDB4MDAyMCwgMHg5MjkyLCAweDAwMjAsCi0JMHgwMDA4LCAweDkwMTYsIDB4MjBhMSwgMHgwMjQwLCAweDkwMDYsIDB4NDAwNCwgMHg4MmZmLCAweDAxMjAsCi0JMHg2ODEwLCAweDgwMDAsIDB4NjgxMiwgMHgwYzYwLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwOTYsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg3OCwgMHg2MDU2LCAweDkwMDYsIDB4YTgzNiwgMHhhODNhLCAweGE5OWMsCi0JMHhhOTQ2LCAweGE4NGEsIDB4NjAyMywgMHgwMDAzLCAweDYwMDcsIDB4MDA0MCwgMHg2MDAzLCAweDAwMDMsCi0JMHg2MDBiLCAweGZmZmYsIDB4YTgxNywgMHgwMDAxLCAweGE4NDIsIDB4YTgzZSwgMHgyOTAwLCAweGE4NWEsCi0JMHhhODEzLCAweDFlYmMsIDB4MDgwYywgMHg4NjVkLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg4YzZjLCAweDAxMmUsIDB4MDA5ZSwgMHgwMGRlLCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwZDYsCi0JMHgwMGM2LCAweDAwYTYsIDB4MDA5NiwgMHgwMDY2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwNzEsCi0JMHgxOWMyLCAweDc2MGMsIDB4MjY2MCwgMHgyNjc4LCAweDhjZmYsIDB4MDkwNCwgMHg5ZWM5LCAweDcwMjQsCi0JMHg5YzA2LCAweDE1MjAsIDB4MjA2OSwgMHgwMTAwLCAweDY4YzAsIDB4OTAwNSwgMHgwOTA0LCAweDllOWIsCi0JMHgwODBjLCAweDk2MWEsIDB4NjhjMywgMHgwMDAwLCAweDA4MGMsIDB4OWE3ZiwgMHg3MDI3LCAweDAwMDAsCi0JMHgwMDM2LCAweDIwNjksIDB4MDE0MCwgMHg2YjA0LCAweDkzODQsIDB4MTAwMCwgMHgwMTM4LCAweDIwMDEsCi0JMHgwMTAwLCAweDA4MGMsIDB4MmI2ZiwgMHg5MDA2LCAweDA4MGMsIDB4MmI2ZiwgMHgyMDY5LCAweDAxMDAsCi0JMHg2ODI0LCAweGQwODQsIDB4MDExMCwgMHg2ODI3LCAweDAwMDEsIDB4MDAzZSwgMHg3MDBjLCAweDljMzYsCi0JMHgxMTEwLCAweDY2MGMsIDB4NzYwZSwgMHg3MDA4LCAweDljMzYsIDB4MTE0MCwgMHgyYzAwLCAweDlmMzYsCi0JMHgwMTE4LCAweDJmMDAsIDB4NzAwYSwgMHgwMDEwLCAweDcwMGIsIDB4MDAwMCwgMHg2NjBjLCAweDAwNjYsCi0JMHgyYzAwLCAweDlmMDYsIDB4MDExMCwgMHg3ZTBlLCAweDAwMDgsIDB4MjY3OCwgMHg2MDBmLCAweDAwMDAsCi0JMHgwODBjLCAweGJmNDUsIDB4MTE4MCwgMHgwODBjLCAweDMwYmUsIDB4MDgwYywgMHhiZjU2LCAweDE1MTgsCi0JMHgwODBjLCAweGE5YTcsIDB4MDQwMCwgMHgwODBjLCAweDlhN2YsIDB4NjgyNCwgMHhkMDg0LCAweDA5YjAsCi0JMHg2ODI3LCAweDAwMDEsIDB4MDg5OCwgMHgwODBjLCAweGJmNTYsIDB4MTExOCwgMHgwODBjLCAweGE5YTcsCi0JMHgwMDkwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGJkNGMsIDB4MDE2OCwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDAzLCAweDE1MjAsIDB4YTg2NywgMHgwMTAzLCAweGFiN2EsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsCi0JMHg2YTIyLCAweDA4MGMsIDB4YmYzOSwgMHgwODBjLCAweGMxYzIsIDB4MDgwYywgMHhhMDFjLCAweDA4MGMsCi0JMHg5OTU1LCAweDAwY2UsIDB4MDgwNCwgMHg5ZTRjLCAweDJjNzgsIDB4NjAwYywgMHgyMDYwLCAweDA4MDQsCi0JMHg5ZTRjLCAweDcwMGYsIDB4MDAwMCwgMHg3MDBiLCAweDAwMDAsIDB4MDEyZSwgMHgwMDZlLCAweDAwOWUsCi0JMHgwMGFlLCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDA2LCAweDFkMDgsIDB4MDgwYywgMHhkN2UyLCAweDA4ZjAsIDB4MDBkNiwgMHgwMTU2LCAweDA4MGMsCi0JMHg5MTMyLCAweDdhMTQsIDB4ODJmZiwgMHgwMTM4LCAweDcwMDMsIDB4MDEwMCwgMHg3MDBiLCAweDAwMDMsCi0JMHg2MGMzLCAweDAwMDgsIDB4MDQ5MCwgMHg3MDAzLCAweDAyMDAsIDB4NzAwNywgMHgwMDAwLCAweDIwNjksCi0JMHgxODAwLCAweDkwMWUsIDB4NjgwMCwgMHg5MDg2LCAweDAwMDQsIDB4MTExMCwgMHhjMzhkLCAweDAwNjAsCi0JMHgwODBjLCAweDcxN2UsIDB4MTExMCwgMHhjM2FkLCAweDAwMDgsIDB4YzNhNSwgMHg2YWQ4LCAweGQyOWMsCi0JMHgxMTEwLCAweGQyYWMsIDB4MDEwOCwgMHhjMzlkLCAweDczMGUsIDB4MjAxMSwgMHgxODQ4LCAweDYzZjAsCi0JMHgyMzEyLCAweDIwYTksIDB4MDAwNiwgMHgyMDExLCAweDE4NDAsIDB4MjAxOSwgMHgxODQxLCAweDIwNzEsCi0JMHgwMjUwLCAweDIzNzYsIDB4OGU3MCwgMHgyMjc2LCAweDhlNzAsIDB4OTM5OCwgMHgwMDAyLCAweDkyOTAsCi0JMHgwMDAyLCAweDFmMDQsIDB4OWYxMSwgMHg2MGMzLCAweDAwMjAsIDB4MDgwYywgMHg5NWVlLCAweDAxNWUsCi0JMHgwMGRlLCAweDAwMDUsIDB4MDE1NiwgMHgwODBjLCAweDkxMzIsIDB4N2ExNCwgMHg4MmZmLCAweDAxNjgsCi0JMHg5Mjg2LCAweGZmZmYsIDB4MDExOCwgMHg5MjgyLCAweDAwMGUsIDB4MTIzOCwgMHg3MDAzLCAweDAxMDAsCi0JMHg3MDBiLCAweDAwMDMsIDB4NjBjMywgMHgwMDA4LCAweDA0ODgsIDB4NzAwMywgMHgwMjAwLCAweDcwMDcsCi0JMHgwMDFjLCAweDcwMGYsIDB4MDAwMSwgMHgyMDExLCAweDE5OTgsIDB4MjIwNCwgMHg4MDA3LCAweDcwMWEsCi0JMHg4MjEwLCAweDIyMDQsIDB4ODAwNywgMHg3MDFlLCAweDA0MjEsIDB4MTEyMCwgMHhiOGEwLCAweDkwODIsCi0JMHgwMDdmLCAweDAyNDgsIDB4MjAwMSwgMHgxODFlLCAweDIwMDQsIDB4NzAyMiwgMHgyMDAxLCAweDE4MWYsCi0JMHgyMDA0LCAweDcwMjYsIDB4MDAzMCwgMHgyMDAxLCAweDE4MTcsIDB4MjAwNCwgMHg5MDg0LCAweDAwZmYsCi0JMHg3MDI2LCAweDIwYTksIDB4MDAwNCwgMHgyMGUxLCAweDAwMDEsIDB4MjA5OSwgMHgxODA1LCAweDIwZTksCi0JMHgwMDAwLCAweDIwYTEsIDB4MDI1NiwgMHg0MDAzLCAweDYwYzMsIDB4MDAxYywgMHgwMTVlLCAweDA4MDQsCi0JMHg5NWVlLCAweDAwMDYsIDB4MjAwMSwgMHgxODM2LCAweDIwMDQsIDB4ZDBhYywgMHgwMDBlLCAweDAwMDUsCi0JMHgyMDExLCAweDAwMDMsIDB4MDgwYywgMHg5OTIzLCAweDIwMTEsIDB4MDAwMiwgMHgwODBjLCAweDk5MmQsCi0JMHgwODBjLCAweDk4M2IsIDB4MDAzNiwgMHg5MDFlLCAweDA4MGMsIDB4OThiMSwgMHgwMDNlLCAweDAwMDUsCi0JMHgyMDcxLCAweDE4OGIsIDB4NzAwMCwgMHg5MDA1LCAweDAxNDAsIDB4MjAwMSwgMHgwOTc2LCAweDIwNzEsCi0JMHgxODAwLCAweDcwNzIsIDB4NzA3NiwgMHg3MDY3LCAweGZmZTAsIDB4MjA3MSwgMHgxODAwLCAweDcwNzAsCi0JMHg3MDUyLCAweDcwNTcsIDB4MWNkMCwgMHgwMDA1LCAweDAwZTYsIDB4MDEyNiwgMHgyMDcxLCAweDE4MDAsCi0JMHgyMDkxLCAweDgwMDAsIDB4NzU1MCwgMHg5NTgyLCAweDAwMTAsIDB4MDYwOCwgMHg3MDU0LCAweDIwNjAsCi0JMHg2MDAwLCAweDkwODYsIDB4MDAwMCwgMHgwMTQ4LCAweDljZTAsIDB4MDAxOCwgMHg3MDY0LCAweDljMDIsCi0JMHgxMjA4LCAweDBjYjAsIDB4MjA2MSwgMHgxY2QwLCAweDBjOTgsIDB4NjAwMywgMHgwMDA4LCAweDg1MjksCi0JMHg3NTUyLCAweDljYTgsIDB4MDAxOCwgMHg3MDY0LCAweDk1MDIsIDB4MTIzMCwgMHg3NTU2LCAweDkwODUsCi0JMHgwMDAxLCAweDAxMmUsIDB4MDBlZSwgMHgwMDA1LCAweDcwNTcsIDB4MWNkMCwgMHgwY2MwLCAweDkwMDYsCi0JMHgwY2MwLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDc1NTAsIDB4OTU4MiwgMHgwMDEwLCAweDA2MDAsCi0JMHg3MDU0LCAweDIwNjAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg5Y2UwLCAweDAwMTgsCi0JMHg3MDY0LCAweDljMDIsIDB4MTIwOCwgMHgwY2IwLCAweDIwNjEsIDB4MWNkMCwgMHgwYzk4LCAweDYwMDMsCi0JMHgwMDA4LCAweDg1MjksIDB4NzU1MiwgMHg5Y2E4LCAweDAwMTgsIDB4NzA2NCwgMHg5NTAyLCAweDEyMjgsCi0JMHg3NTU2LCAweDkwODUsIDB4MDAwMSwgMHgwMGVlLCAweDAwMDUsIDB4NzA1NywgMHgxY2QwLCAweDBjYzgsCi0JMHg5MDA2LCAweDBjYzgsIDB4OWM4MiwgMHgxY2QwLCAweDBhMGMsIDB4MGRmNiwgMHgyMDAxLCAweDE4MTksCi0JMHgyMDA0LCAweDljMDIsIDB4MWEwYywgMHgwZGY2LCAweDkwMDYsIDB4NjAwNiwgMHg2MDBhLCAweDYwMGUsCi0JMHg2MDE2LCAweDYwMWEsIDB4NjAxMiwgMHg2MDIzLCAweDAwMDAsIDB4NjAwMywgMHgwMDAwLCAweDYwMWUsCi0JMHg2MDU2LCAweDYwNWEsIDB4NjAyNiwgMHg2MDJhLCAweDYwMmUsIDB4NjAzMiwgMHg2MDM2LCAweDYwM2EsCi0JMHg2MDNlLCAweDYwNDIsIDB4MjA2MSwgMHgxODAwLCAweDYwNTAsIDB4ODAwMCwgMHg2MDUyLCAweDkwODYsCi0JMHgwMDAxLCAweDAxMDgsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDE2LCAweDA4MGMsCi0JMHg4YjhmLCAweDAwMWUsIDB4MDEyZSwgMHgwY2IwLCAweDAwMDYsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsCi0JMHgwMWMwLCAweDYwMWMsIDB4ZDA4NCwgMHgxOTBjLCAweDE5MmMsIDB4NjAxNywgMHgwMDAwLCAweDYwMjMsCi0JMHgwMDA3LCAweDIwMDEsIDB4MTk2MCwgMHgyMDA0LCAweDAwMDYsIDB4OTA4MiwgMHgwMDUxLCAweDAwMGUsCi0JMHgwMjA4LCAweDgwMDQsIDB4NjAxYSwgMHgwODBjLCAweGRhOTQsIDB4NjA0MywgMHgwMDAwLCAweDYwMTMsCi0JMHgwMDAwLCAweDAwMGUsIDB4MDAwNSwgMHgwMGU2LCAweDAxMjYsIDB4MjA3MSwgMHgxODAwLCAweDIwOTEsCi0JMHg4MDAwLCAweDc1NTAsIDB4OTU4MiwgMHgwMDAxLCAweDA2MDgsIDB4NzA1NCwgMHgyMDYwLCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg5Y2UwLCAweDAwMTgsIDB4NzA2NCwgMHg5YzAyLCAweDEyMDgsCi0JMHgwY2IwLCAweDIwNjEsIDB4MWNkMCwgMHgwYzk4LCAweDYwMDMsIDB4MDAwOCwgMHg4NTI5LCAweDc1NTIsCi0JMHg5Y2E4LCAweDAwMTgsIDB4NzA2NCwgMHg5NTAyLCAweDEyMzAsIDB4NzU1NiwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMTJlLCAweDAwZWUsIDB4MDAwNSwgMHg3MDU3LCAweDFjZDAsIDB4MGNjMCwgMHg5MDA2LCAweDBjYzAsCi0JMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDAyLCAweGEwN2IsIDB4YTA4NCwgMHhhMDlmLCAweGEwYmEsCi0JMHhjNGExLCAweGM0YmUsIDB4YzRkOSwgMHhhMDdiLCAweGEwODQsIDB4YTA3YiwgMHhhMGQzLCAweGEwN2IsCi0JMHhhMDdiLCAweGEwN2IsIDB4YTA3YiwgMHg5MTg2LCAweDAwMTMsIDB4MTEyOCwgMHgwODBjLCAweDhhODMsCi0JMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHgwMDA1LCAweDAwNjYsIDB4NjAwMCwgMHg5MGIyLCAweDAwMTAsCi0JMHgxYTBjLCAweDBkZjYsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsIDB4YTA5ZCwgMHhhODAzLCAweGE5ZWUsCi0JMHhhMDlkLCAweGFhN2MsIDB4YTNiNiwgMHhhMDlkLCAweGEwOWQsIDB4YTc4NSwgMHhiMDQxLCAweGEwOWQsCi0JMHhhMDlkLCAweGEwOWQsIDB4YTA5ZCwgMHhhMDlkLCAweGEwOWQsIDB4MDgwYywgMHgwZGY2LCAweDAwNjYsCi0JMHg2MDAwLCAweDkwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDBkZjYsIDB4MDAxMywgMHgwMDZlLCAweDAwMDUsCi0JMHhhMGI4LCAweGI3MGUsIDB4YTBiOCwgMHhhMGI4LCAweGEwYjgsIDB4YTBiOCwgMHhhMGI4LCAweGEwYjgsCi0JMHhiNmE1LCAweGI4OTAsIDB4YTBiOCwgMHhiNzRmLCAweGI3Y2UsIDB4Yjc0ZiwgMHhiN2NlLCAweGEwYjgsCi0JMHgwODBjLCAweDBkZjYsIDB4NjAwMCwgMHg5MDgyLCAweDAwMTAsIDB4MWEwYywgMHgwZGY2LCAweDYwMDAsCi0JMHgwMDAyLCAweGEwZDEsIDB4YjA4OCwgMHhiMTUwLCAweGIyODMsIDB4YjQzMiwgMHhhMGQxLCAweGEwZDEsCi0JMHhhMGQxLCAweGIwNWMsIDB4YjYzMSwgMHhiNjM0LCAweGEwZDEsIDB4YTBkMSwgMHhhMGQxLCAweGEwZDEsCi0JMHhiNjYzLCAweDA4MGMsIDB4MGRmNiwgMHgwMDY2LCAweDYwMDAsIDB4OTBiMiwgMHgwMDEwLCAweDFhMGMsCi0JMHgwZGY2LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LCAweGEwZWMsIDB4YTBlYywgMHhhMTJmLCAweGExY2UsCi0JMHhhMjYzLCAweGEwZWMsIDB4YTBlYywgMHhhMGVjLCAweGEwZWUsIDB4YTBlYywgMHhhMGVjLCAweGEwZWMsCi0JMHhhMGVjLCAweGEwZWMsIDB4YTBlYywgMHhhMGVjLCAweDA4MGMsIDB4MGRmNiwgMHg5MTg2LCAweDAwNGMsCi0JMHgwNTg4LCAweDkxODYsIDB4MDAwMywgMHgxOTBjLCAweDBkZjYsIDB4MDA5NiwgMHg2MDFjLCAweGMwZWQsCi0JMHg2MDFlLCAweDYwMDMsIDB4MDAwMywgMHg2MTA2LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweDkwODQsCi0JMHhhMDAwLCAweGMwYjUsIDB4YTg3ZSwgMHhhOGFjLCAweGE4NDYsIDB4YThiMCwgMHhhODRhLCAweDkwMDYsCi0JMHhhODM2LCAweGE4M2EsIDB4YTg4NCwgMHg5MDkyLCAweDE5OWEsIDB4MDIxMCwgMHgyMDAxLCAweDE5OTksCi0JMHg4MDAzLCAweDgwMTMsIDB4ODIxMywgMHg5MjEwLCAweDYyMWEsIDB4MDA5ZSwgMHgyYzEwLCAweDA4MGMsCi0JMHgxYTdlLCAweDA4MGMsIDB4ODY1ZCwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDhjNmMsCi0JMHgwMTJlLCAweDAwMDUsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmNhMCwgMHgwMGJlLCAweDJjMDAsCi0JMHgwODBjLCAweGEyODUsIDB4MDgwYywgMHhjNDcxLCAweDYwMDMsIDB4MDAwNywgMHgwMDA1LCAweDAwZDYsCi0JMHgwMDk2LCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDdhOGMsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsCi0JMHhkMGVjLCAweDExMTAsIDB4OTI5MCwgMHgwMDE4LCAweGFjNzgsIDB4YzRmYywgMHgwMDQ2LCAweGE4ZTAsCi0JMHg5MDA1LCAweDExNDAsIDB4YThkYywgMHg5MjFhLCAweDAxNDAsIDB4MDIyMCwgMHhhODdiLCAweDAwMDcsCi0JMHgyMDEwLCAweDAwMjgsIDB4YTg3YiwgMHgwMDE1LCAweDAwMTAsIDB4YTg3YiwgMHgwMDAwLCAweDgyMTQsCi0JMHhhODgzLCAweDAwMDAsIDB4YWEwMiwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMGM2LCAweDAwZDYsCi0JMHgwMGU2LCAweDAwZjYsIDB4MjQwMCwgMHg5MDA1LCAweDExMDgsIDB4MDA5YSwgMHgyMTAwLCAweDkwODYsCi0JMHgwMDE1LCAweDExMTgsIDB4MjAwMSwgMHgwMDAxLCAweDAwMzgsIDB4MjEwMCwgMHg5MDg2LCAweDAwMTYsCi0JMHgwMTE4LCAweDIwMDEsIDB4MDAwMSwgMHgwMDJhLCAweDk0YTQsIDB4MDAwNywgMHg4NDIzLCAweDk0MDUsCi0JMHgwMDAyLCAweGExOTYsIDB4YTE5NiwgMHhhMTkxLCAweGExOTQsIDB4YTE5NiwgMHhhMThlLCAweGExODEsCi0JMHhhMTgxLCAweGExODEsIDB4YTE4MSwgMHhhMTgxLCAweGExODEsIDB4YTE4MSwgMHhhMTgxLCAweGExODEsCi0JMHhhMTgxLCAweDAwZmUsIDB4MDBlZSwgMHgwMGRlLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCi0JMHgwMDRlLCAweDAwZmUsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MGMsIDB4MGRmNiwgMHgwODBjLCAweGFjNmUsCi0JMHgwMDI4LCAweDA4MGMsIDB4YWQ5ZiwgMHgwMDEwLCAweDA4MGMsIDB4YWU4ZCwgMHgwMGZlLCAweDAwZWUsCi0JMHgwMGRlLCAweDAwY2UsIDB4MDAyZSwgMHgwMDFlLCAweDJjMDAsIDB4YTg5NiwgMHgwMDBlLCAweDA4MGMsCi0JMHhhMzQzLCAweDA1MzAsIDB4YTgwNCwgMHhhODBlLCAweDAwYTYsIDB4MjA1MCwgMHhiMTAwLCAweDAwYWUsCi0JMHg4MDA2LCAweDgwMDYsIDB4ODAwNywgMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsCi0JMHgwMDAyLCAweGFhY2MsIDB4YWJkMCwgMHhhY2Q0LCAweGFkZDgsIDB4MjAzMSwgMHgwMDAwLCAweDIwNDEsCi0JMHgxMmE4LCAweDA4MGMsIDB4YTRmMSwgMHgwMTYwLCAweDAwMGUsIDB4OTAwNSwgMHgwMTIwLCAweDAwZmUsCi0JMHgwMDllLCAweDAwZGUsIDB4MDAwNSwgMHgwMGZlLCAweDAwOWUsIDB4MDBkZSwgMHgwODA0LCAweDlmZWEsCi0JMHgyMDAxLCAweDAwMmMsIDB4OTAwZSwgMHgwODBjLCAweGEzYTksIDB4MGM3MCwgMHg5MWI2LCAweDAwMTUsCi0JMHgwMTcwLCAweDkxYjYsIDB4MDAxNiwgMHgwMTU4LCAweDkxYjIsIDB4MDA0NywgMHgwYTBjLCAweDBkZjYsCi0JMHg5MWIyLCAweDAwNTAsIDB4MWEwYywgMHgwZGY2LCAweDkxODIsIDB4MDA0NywgMHgwMGNhLCAweDIwMDEsCi0JMHgwMTA5LCAweDIwMDQsIDB4ZDA4YywgMHgwMTk4LCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDgwYywgMHg4NWIxLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAxMmUsCi0JMHhhMDAxLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAyLCAweDExMTAsIDB4MDgwNCwgMHhhMTJmLCAweDAwMDUsCi0JMHhhMjAxLCAweGEyMDEsIDB4YTIwMywgMHhhMjM5LCAweGEyMDEsIDB4YTIwMSwgMHhhMjAxLCAweGEyMDEsCi0JMHhhMjRjLCAweDA4MGMsIDB4MGRmNiwgMHgwMGQ2LCAweDAwMTYsIDB4MDA5NiwgMHgwODBjLCAweDhiM2YsCi0JMHgwODBjLCAweDhjNmMsIDB4NjAwMywgMHgwMDA0LCAweDYxMTQsIDB4MjE0OCwgMHhhODdjLCAweGQwZmMsCi0JMHgwMWMwLCAweGE4NzgsIDB4YzBmYywgMHg5MDA1LCAweDExNTgsIDB4YTg5NCwgMHg5MDA1LCAweDAxNDAsCi0JMHgyMDAxLCAweDAwMDAsIDB4OTAwZSwgMHgwODBjLCAweGEzYTksIDB4MDgwYywgMHg5ZmVhLCAweDAwYTgsCi0JMHg2MDAzLCAweDAwMDIsIDB4YThhNCwgMHhhOWE4LCAweDkxMDUsIDB4MTE3OCwgMHhhOGFlLCAweGE4YjIsCi0JMHgwYzc4LCAweGE4N2YsIDB4MDAyMCwgMHhhODhjLCAweGE4OGEsIDB4YThhNCwgMHhhOGFlLCAweGE4YTgsCi0JMHhhOGIyLCAweGE4YzcsIDB4MDAwMCwgMHhhOGNiLCAweDAwMDAsIDB4MDA5ZSwgMHgwMDFlLCAweDAwZGUsCi0JMHgwMDA1LCAweDA4MGMsIDB4OGIzZiwgMHgwMGQ2LCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsCi0JMHhiZDRlLCAweDAxMjAsIDB4YTg3YiwgMHgwMDA2LCAweDA4MGMsIDB4NmEyMiwgMHgwMDllLCAweDAwZGUsCi0JMHgwODBjLCAweDlmZWEsIDB4MDgwNCwgMHg4YzZjLCAweDA4MGMsIDB4OGIzZiwgMHgwODBjLCAweDMwOTUsCi0JMHgwODBjLCAweGM0NmUsIDB4MDBkNiwgMHgwMDk2LCAweDYxMTQsIDB4MjE0OCwgMHgwODBjLCAweGJkNGUsCi0JMHgwMTIwLCAweGE4N2IsIDB4MDAyOSwgMHgwODBjLCAweDZhMjIsIDB4MDA5ZSwgMHgwMGRlLCAweDA4MGMsCi0JMHg5ZmVhLCAweDA4MDQsIDB4OGM2YywgMHg5MTgyLCAweDAwNDcsIDB4MDAwMiwgMHhhMjczLCAweGEyNzUsCi0JMHhhMjczLCAweGEyNzMsIDB4YTI3MywgMHhhMjczLCAweGEyNzMsIDB4YTI3MywgMHhhMjczLCAweGEyNzMsCi0JMHhhMjczLCAweGEyNzMsIDB4YTI3NSwgMHgwODBjLCAweDBkZjYsIDB4MDBkNiwgMHgwMDk2LCAweDA4MGMsCi0JMHgxNTc3LCAweDYxMTQsIDB4MjE0OCwgMHhhODdiLCAweDAwMDAsIDB4YTg4MywgMHgwMDAwLCAweDA4MGMsCi0JMHg2YTIyLCAweDAwOWUsIDB4MDBkZSwgMHgwODA0LCAweDlmZWEsIDB4MDAyNiwgMHgwMDM2LCAweDAwNTYsCi0JMHgwMDY2LCAweDAwOTYsIDB4MDBhNiwgMHgwMGY2LCAweDAwMDYsIDB4MDgwYywgMHgxMDM3LCAweDAwMGUsCi0JMHgwOTBjLCAweDBkZjYsIDB4YTk2MCwgMHgyMWU4LCAweGE5NWMsIDB4OTE4OCwgMHgwMDE5LCAweDIxYTAsCi0JMHg5MDBlLCAweDIwYTksIDB4MDAyMCwgMHg0MTA0LCAweGE4N2EsIDB4MjA3OSwgMHgxODAwLCAweDc5OGMsCi0JMHg5MTg4LCAweDAwMTgsIDB4OTE4YywgMHgwZmZmLCAweGE5NzIsIDB4YWM3NiwgMHgyOTUwLCAweDAwYTYsCi0JMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAwLCAweDkwMWUsIDB4MjAyOSwgMHgwMDAxLCAweDkxODIsCi0JMHgwMDM1LCAweDEyMjgsIDB4MjAxMSwgMHgwMDFmLCAweDA4MGMsIDB4YjkxNSwgMHgwNGMwLCAweDIxMzAsCi0JMHgyMDA5LCAweDAwMzQsIDB4MjAxMSwgMHgwMDFmLCAweDA4MGMsIDB4YjkxNSwgMHg5NmIyLCAweDAwMzQsCi0JMHhiMDA0LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDBmZTksIDB4MDgwYywgMHgxMDM3LCAweDAxZDAsCi0JMHg4NTI4LCAweGE4NjcsIDB4MDExMCwgMHhhODZiLCAweDAwMDAsIDB4MjkyMCwgMHhiNDA2LCAweDk2OGEsCi0JMHgwMDNkLCAweDEyMzAsIDB4MjYwOCwgMHgyMDExLCAweDAwMWIsIDB4MDgwYywgMHhiOTE1LCAweDAwYjgsCi0JMHg5NmIyLCAweDAwM2MsIDB4MjAwOSwgMHgwMDNjLCAweDI5NTAsIDB4MjAxMSwgMHgwMDFiLCAweDA4MGMsCi0JMHhiOTE1LCAweDBjMTgsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHgwMGFlLCAweDg1MmYsCi0JMHg5NWFkLCAweDAwNTAsIDB4YjU2NiwgMHhiMDcwLCAweGMwZmQsIDB4YjA3MiwgMHgwMDQ4LCAweDIwMDEsCi0JMHgwMjA1LCAweDIwMDMsIDB4MDAwMCwgMHgwMGFlLCAweDg1MmYsIDB4OTVhZCwgMHgwMDUwLCAweGI1NjYsCi0JMHgyYTQ4LCAweGE4MDQsIDB4YTgwNywgMHgwMDAwLCAweDAwMDYsIDB4MDgwYywgMHg2YTIyLCAweDAwMGUsCi0JMHgyMDQ4LCAweDkwMDUsIDB4MWRiMCwgMHgwMGZlLCAweDAwYWUsIDB4MDA5ZSwgMHgwMDZlLCAweDAwNWUsCi0JMHgwMDNlLCAweDAwMmUsIDB4MDAwNSwgMHgwMGQ2LCAweDAwZjYsIDB4MDA5NiwgMHgwMDA2LCAweDA4MGMsCi0JMHgxMDM3LCAweDAwMGUsIDB4MDkwYywgMHgwZGY2LCAweGE5NjAsIDB4MjFlOCwgMHhhOTVjLCAweDkxODgsCi0JMHgwMDE5LCAweDIxYTAsIDB4OTAwZSwgMHgyMGE5LCAweDAwMjAsIDB4NDEwNCwgMHhhYTY2LCAweGE4N2EsCi0JMHgyMDc5LCAweDE4MDAsIDB4Nzk4YywgMHg4MTBjLCAweDkxODgsIDB4MDAwYywgMHg5MTgyLCAweDAwMWEsCi0JMHgwMjEwLCAweDIwMDksIDB4MDAxYSwgMHgyMWE4LCAweDgxMGIsIDB4YTk3MiwgMHhhYzc2LCAweDJlOTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAxZiwgMHgyMGEwLCAweDIwMDEsIDB4MDIwNSwgMHgyMDBjLCAweDkxOGQsCi0JMHgwMDgwLCAweDIxMDIsIDB4NDAwMywgMHgyMDAzLCAweDAwMDAsIDB4MDgwYywgMHg2YTIyLCAweDAwOWUsCi0JMHgwMGZlLCAweDAwZGUsIDB4MDAwNSwgMHgwMDE2LCAweDAwZDYsIDB4MDBmNiwgMHgwMDk2LCAweDAwMTYsCi0JMHgyMDAxLCAweDAyMDUsIDB4MjAwYywgMHg5MThkLCAweDAwODAsIDB4MjEwMiwgMHgwMDFlLCAweDIwNzksCi0JMHgwMjAwLCAweDJlOTgsIDB4YTg3YywgMHhkMGVjLCAweDAxMTgsIDB4OWU4MCwgMHgwMDBjLCAweDIwOTgsCi0JMHgyMDIxLCAweDAwM2UsIDB4OTAxZSwgMHg5MjgyLCAweDAwMjAsIDB4MDIxOCwgMHgyMDExLCAweDAwMjAsCi0JMHgyMDE4LCAweDk0ODYsIDB4MDAzZSwgMHgxMTcwLCAweDAwOTYsIDB4MDgwYywgMHgxMDM3LCAweDI5MDAsCi0JMHgwMDllLCAweDA1YzAsIDB4YTgwNiwgMHgyMDQ4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDAyLCAweDIwYTAsIDB4MzMwMCwgMHg5MDhlLCAweDAyNjAsIDB4MDE0MCwgMHgyMDA5LCAweDAyODAsCi0JMHg5MTAyLCAweDkyMGEsIDB4MDIxOCwgMHgyMDEwLCAweDIxMDAsIDB4OTMxOCwgMHgyMjAwLCAweDk0MDIsCi0JMHgxMjI4LCAweDI0MDAsIDB4OTIwMiwgMHgyNDEwLCAweDkzMTgsIDB4OTAwNiwgMHgyMDIwLCAweDIyYTgsCi0JMHhhODAwLCAweDkyMDAsIDB4YTgwMiwgMHgyMGUxLCAweDAwMDAsIDB4NDAwMywgMHg4M2ZmLCAweDAxODAsCi0JMHgzMzAwLCAweDkwODYsIDB4MDI4MCwgMHgxMTMwLCAweDc4MTQsIDB4ODAwMCwgMHg5MDg1LCAweDAwODAsCi0JMHg3ODE2LCAweDJlOTgsIDB4MjMxMCwgMHg4NGZmLCAweDA5MDQsIDB4YTM1OCwgMHgwODA0LCAweGEzNWEsCi0JMHg5MDg1LCAweDAwMDEsIDB4NzgxNywgMHgwMDAwLCAweDAwOWUsIDB4MDBmZSwgMHgwMGRlLCAweDAwMWUsCi0JMHgwMDA1LCAweDAwZDYsIDB4MDAzNiwgMHgwMDk2LCAweDYzMTQsIDB4MjM0OCwgMHhhODdhLCAweGE5ODIsCi0JMHgwODBjLCAweDZhMTUsIDB4MDA5ZSwgMHgwMDNlLCAweDAwZGUsIDB4MDAwNSwgMHg5MWI2LCAweDAwMTUsCi0JMHgxMTE4LCAweDA4MGMsIDB4OWZlYSwgMHgwMDMwLCAweDkxYjYsIDB4MDAxNiwgMHgxOTBjLCAweDBkZjYsCi0JMHgwODBjLCAweDlmZWEsIDB4MDAwNSwgMHgyMGE5LCAweDAwMGUsIDB4MjBlMSwgMHgwMDAwLCAweDJlOTgsCi0JMHg2MDE0LCAweDAwOTYsIDB4MjA0OCwgMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHgyMGEwLCAweDAwOWUsCi0JMHg0MDAzLCAweDkxOTYsIDB4MDAxNiwgMHgwMWYwLCAweDAxMzYsIDB4OTA4MCwgMHgwMDFiLCAweDIwYTAsCi0JMHgyMDExLCAweDAwMDYsIDB4MjBhOSwgMHgwMDAxLCAweDM0MTgsIDB4ODMxOCwgMHgyM2EwLCAweDQwMDMsCi0JMHgzMzE4LCAweDgzMTgsIDB4MjM5OCwgMHg4MjExLCAweDFkYjgsIDB4MjAxMSwgMHgwMDA2LCAweDAxM2UsCi0JMHgyMGEwLCAweDMzMTgsIDB4ODMxOCwgMHgyMzk4LCAweDQwMDMsIDB4MzQxOCwgMHg4MzE4LCAweDIzYTAsCi0JMHg4MjExLCAweDFkYjgsIDB4MDA5NiwgMHgwODBjLCAweGJkNGUsIDB4MDEzMCwgMHg2MDE0LCAweDIwNDgsCi0JMHhhODA3LCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweDAwOWUsIDB4MDgwNCwgMHg5ZmVhLCAweDAwOTYsCi0JMHgwMGQ2LCAweDAwMzYsIDB4NzMzMCwgMHg5Mzg2LCAweDAyMDAsIDB4MTFhOCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4YmYsIDB4MDAwMCwgMHgwMGJlLCAweDYwMTQsIDB4OTAwNSwgMHgwMTMwLCAweDIwNDgsCi0JMHhhODA3LCAweDAwMDAsIDB4YTg2NywgMHgwMTAzLCAweGFiMzIsIDB4MDgwYywgMHg5ZmVhLCAweDAwM2UsCi0JMHgwMGRlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDExLCAweDFkNDgsIDB4MGNjOCwgMHgwMDA2LCAweDAwMTYsCi0JMHgwODBjLCAweGM0NTksIDB4MDE4OCwgMHg2MDE0LCAweDkwMDUsIDB4MTE3MCwgMHg2MDBiLCAweDAwMDMsCi0JMHg2MDFiLCAweDAwMDAsIDB4NjA0MywgMHgwMDAwLCAweDIwMDksIDB4MDAyMiwgMHgwODBjLCAweGE3ZGIsCi0JMHg5MDA2LCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwY2QwLCAweDAwOTYsCi0JMHgwMDE2LCAweDIwYTksIDB4MDAxNCwgMHg5ZTgwLCAweDAwMGMsIDB4MjBlMSwgMHgwMDAwLCAweDIwOTgsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDAyLCAweDIwYTAsCi0JMHg0MDAzLCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDEsIDB4MjA5OSwgMHgwMjYwLCAweDIwYTksCi0JMHgwMDE2LCAweDQwMDMsIDB4MjBhOSwgMHgwMDBhLCAweGE4MDQsIDB4MjA0OCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAwMiwgMHgyMGEwLCAweDQwMDMsIDB4MjAwMSwgMHgwMjA1LCAweDIwMDMsCi0JMHgwMDAyLCAweDIwOTksIDB4MDI2MCwgMHgyMGE5LCAweDAwMjAsIDB4NDAwMywgMHgyMDAzLCAweDAwMDAsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTgwMCwgMHgyMDQ4LCAweGE4NjcsIDB4MDEwMywgMHgwODBjLCAweDlmZWEsCi0JMHgwMDFlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDk2LCAweDAwMTYsIDB4OTAwZSwgMHg3MDMwLCAweDkwODYsCi0JMHgwMTAwLCAweDAxNDAsIDB4NzAzOCwgMHg5MDg0LCAweDAwZmYsIDB4ODAwYywgMHg3MDNjLCAweDkwODQsCi0JMHgwMGZmLCAweDgwMDQsIDB4OTA4MCwgMHgwMDA0LCAweDkxMDgsIDB4ODEwYiwgMHgyMDExLCAweDAwMDIsCi0JMHgyMDE5LCAweDAwMGMsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4YjkxNSwgMHgwODBjLCAweGJkNGUsCi0JMHgwMTQwLCAweDYwMTQsIDB4MjA0OCwgMHhhODA3LCAweDAwMDAsIDB4YTg2NCwgMHhhOGUyLCAweGE4NjcsCi0JMHgwMTAzLCAweDA4MGMsIDB4OWZlYSwgMHgwMDFlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDE2LCAweDAwOTYsCi0JMHg3MDMwLCAweDkwODYsIDB4MDEwMCwgMHgxMTE4LCAweDIwMDksIDB4MDAwNCwgMHgwMDEwLCAweDcwMzQsCi0JMHg4MDBjLCAweDgxMGIsIDB4MjAxMSwgMHgwMDBjLCAweDIwMTksIDB4MDAwYywgMHg2MDE0LCAweDIwNDgsCi0JMHhhODA0LCAweDAwOTYsIDB4OTAwNSwgMHgwMTA4LCAweDIwNDgsIDB4MDgwYywgMHhiOTE1LCAweDAwOWUsCi0JMHgwODBjLCAweGJkNGUsIDB4MDE0OCwgMHhhODA0LCAweDkwMDUsIDB4MTE1OCwgMHhhODA3LCAweDAwMDAsCi0JMHhhODY0LCAweGE4ZTIsIDB4YTg2NywgMHgwMTAzLCAweDA4MGMsIDB4OWZlYSwgMHgwMDllLCAweDAwMWUsCi0JMHgwMDA1LCAweDAwODYsIDB4MjA0MCwgMHhhMDMwLCAweDgwMDcsIDB4OTA4NiwgMHgwMTAwLCAweDExMTgsCi0JMHgwODBjLCAweGE5YTcsIDB4MDBlMCwgMHhhMDM0LCAweDgwMDcsIDB4ODAwYywgMHg4ODA2LCAweDgwMDYsCi0JMHg4MDA3LCAweDkwYmMsIDB4MDAzZiwgMHg5MDg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDBjLCAweGE4N2IsCi0JMHgwMDAwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDAsIDB4YWFhMCwgMHhhYjljLCAweGFjYTgsCi0JMHhhZGE0LCAweDIwMzEsIDB4MDAwMCwgMHgyMDQxLCAweDEyOGUsIDB4MDAxOSwgMHgwZDA4LCAweDAwOGUsCi0JMHgwODk4LCAweDAwOTYsIDB4MDAwNiwgMHgwODBjLCAweDEwMzcsIDB4MDAwZSwgMHgwMWIwLCAweGE4YWIsCi0JMHgwZGNiLCAweGE4NzYsIDB4MDAwZSwgMHhhOGEyLCAweDAwMDYsIDB4YWU2YSwgMHgyODAwLCAweGE4OWUsCi0JMHhhOTdhLCAweGFmNzIsIDB4YWE4ZSwgMHhhYjkyLCAweGFjOTYsIDB4YWQ5YSwgMHgwMDg2LCAweDI5NDAsCi0JMHgwODBjLCAweDExMzQsIDB4MDA4ZSwgMHg5MDg1LCAweDAwMDEsIDB4MDA5ZSwgMHgwMDA1LCAweDAwZTYsCi0JMHgwMGQ2LCAweDAwMjYsIDB4NzAwOCwgMHg5MDg0LCAweDAwZmYsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCi0JMHhiYTEwLCAweDAwYmUsIDB4OTIwNiwgMHgxNTIwLCAweDcwMGMsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCi0JMHhiYTE0LCAweDAwYmUsIDB4OTIwNiwgMHgxMWUwLCAweDYwNDMsIDB4MDAwMCwgMHgyYzY4LCAweDAwMTYsCi0JMHgyMDA5LCAweDAwMzUsIDB4MDgwYywgMHhjM2NmLCAweDAwMWUsIDB4MTE1OCwgMHg2MjJjLCAweDIyNjgsCi0JMHgyMDcxLCAweDAyNmMsIDB4NmIyMCwgMHg5Mzg2LCAweDAwMDMsIDB4MDEzMCwgMHg5Mzg2LCAweDAwMDYsCi0JMHgwMTI4LCAweDA4MGMsIDB4OWZlYSwgMHgwMDIwLCAweDAwMzksIDB4MDAxMCwgMHgwODBjLCAweGE2MTAsCi0JMHgwMDJlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwOTYsIDB4NjgxNCwgMHgyMDQ4LCAweDkxODYsCi0JMHgwMDE1LCAweDA5MDQsIDB4YTVmOCwgMHg5MThlLCAweDAwMTYsIDB4MTkwNCwgMHhhNjBlLCAweDcwMGMsCi0JMHg5MDhjLCAweGZmMDAsIDB4OTE4NiwgMHgxNzAwLCAweDAxMjAsIDB4OTE4NiwgMHgwMzAwLCAweDE5MDQsCi0JMHhhNWQyLCAweDg5ZmYsIDB4MTEzOCwgMHg2ODAwLCAweDkwODYsIDB4MDAwZiwgMHgwOTA0LCAweGE1YjUsCi0JMHgwODA0LCAweGE2MGMsIDB4NjgwOCwgMHg5MDg2LCAweGZmZmYsIDB4MTkwNCwgMHhhNWZhLCAweGE4N2MsCi0JMHg5MDg0LCAweDAwNjAsIDB4OTA4NiwgMHgwMDIwLCAweDExMjgsIDB4YTgzYywgMHhhOTQwLCAweDkxMDUsCi0JMHgxOTA0LCAweGE1ZmEsIDB4NjgyNCwgMHhkMDg0LCAweDE5MDQsIDB4YTVmYSwgMHhkMGI0LCAweDAxNTgsCi0JMHgwMDE2LCAweDIwMDEsIDB4MTk2MCwgMHgyMDBjLCAweDYwMTgsIDB4OTEwMiwgMHg5MDgyLCAweDAwMDUsCi0JMHgwMDFlLCAweDFhMDQsIDB4YTVmYSwgMHgwODBjLCAweGJmMzksIDB4Njg1YywgMHhhODgyLCAweGE4N2MsCi0JMHhjMGRjLCAweGMwZjQsIDB4YzBkNCwgMHhhODdlLCAweDAwMjYsIDB4OTAwZSwgMHg2YTE4LCAweDIwMDEsCi0JMHgwMDBhLCAweDA4MGMsIDB4ODQ3ZSwgMHhhODg0LCAweDkyMGEsIDB4MDIwOCwgMHg4MDExLCAweGFhODYsCi0JMHg4MmZmLCAweDAwMmUsIDB4MTEzOCwgMHgwMGM2LCAweDJkNjAsIDB4MDgwYywgMHhiYTc3LCAweDAwY2UsCi0JMHgwODA0LCAweGE2MGMsIDB4MDBjNiwgMHhhODY4LCAweGQwZmMsIDB4MTExOCwgMHgwODBjLCAweDVlYWIsCi0JMHgwMDEwLCAweDA4MGMsIDB4NjI1OSwgMHgwMGNlLCAweDE5MDQsIDB4YTVmYSwgMHgwMGM2LCAweDJkNjAsCi0JMHgwODBjLCAweDlmZWEsIDB4MDBjZSwgMHgwODA0LCAweGE2MGMsIDB4MDBjNiwgMHgwODBjLCAweGEwM2IsCi0JMHgwMTk4LCAweDYwMTcsIDB4MDAwMCwgMHg2ODEwLCAweDYwMTIsIDB4MDgwYywgMHhjMWNhLCAweDYwMjMsCi0JMHgwMDAzLCAweDY5MDQsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsIDB4OWZlYSwgMHgwMGNlLCAweDA4MGMsCi0JMHhhMDY4LCAweDAwY2UsIDB4MDgwNCwgMHhhNjBjLCAweDIwMDEsIDB4MTk2MiwgMHgyMDA0LCAweDY4NDIsCi0JMHgwMGNlLCAweDA0ZDAsIDB4NzAwOCwgMHg5MDg2LCAweDAwMGIsIDB4MTFjOCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI5MDAsIDB4YzFiYywgMHhiOTAyLCAweDAwYmUsIDB4MDBjNiwgMHgyZDYwLCAweGE4N2IsCi0JMHgwMDAzLCAweDA4MGMsIDB4YzQxMywgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsCi0JMHgwMDAyLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsIDB4MDBjZSwgMHgwMGU4LCAweDcwMGMsCi0JMHg5MDg2LCAweDJhMDAsIDB4MTEzOCwgMHgyMDAxLCAweDE5NjIsIDB4MjAwNCwgMHg2ODQyLCAweDAwYTAsCi0JMHgwNDc5LCAweDAwYTAsIDB4ODlmZiwgMHgwOTBjLCAweDBkZjYsIDB4MDBjNiwgMHgwMGQ2LCAweDJkNjAsCi0JMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDAzLCAweDA4MGMsIDB4NjgzYywgMHgwODBjLCAweGJmMzksCi0JMHgwODBjLCAweGEwMWMsIDB4MDBkZSwgMHgwMGNlLCAweDA4MGMsIDB4OWZlYSwgMHgwMDllLCAweDAwMDUsCi0JMHg5MTg2LCAweDAwMTUsIDB4MTEyOCwgMHgyMDAxLCAweDE5NjIsIDB4MjAwNCwgMHg2ODQyLCAweDAwNjgsCi0JMHg5MThlLCAweDAwMTYsIDB4MTE2MCwgMHgwMGM2LCAweDJkMDAsIDB4MjA2MCwgMHgwODBjLCAweGRhOTQsCi0JMHgwODBjLCAweDg0MjUsIDB4MDgwYywgMHg5ZmVhLCAweDAwY2UsIDB4MDgwYywgMHg5ZmVhLCAweDAwMDUsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHg3MjI4LCAweGFjYjAsIDB4YWJhYywgMHhkMmY0LCAweDAxMzAsCi0JMHgyMDAxLCAweDE5NjIsIDB4MjAwNCwgMHg2ODQyLCAweDA4MDQsIDB4YTY4YSwgMHgwMGM2LCAweDJkNjAsCi0JMHgwODBjLCAweGI5NzYsIDB4MDBjZSwgMHg2ODA0LCAweDkwODYsIDB4MDA1MCwgMHgxMTY4LCAweDAwYzYsCi0JMHgyZDAwLCAweDIwNjAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA1MCwgMHgwODBjLCAweDg1ZjgsCi0JMHgwODBjLCAweDhiOGYsIDB4MDBjZSwgMHgwNGYwLCAweDY4MDAsIDB4OTA4NiwgMHgwMDBmLCAweDAxYTgsCi0JMHg4OWZmLCAweDA5MGMsIDB4MGRmNiwgMHg2ODAwLCAweDkwODYsIDB4MDAwNCwgMHgxMTkwLCAweGE4N2MsCi0JMHhkMGFjLCAweDAxNzgsIDB4YTg0MywgMHgwZmZmLCAweGE4M2YsIDB4MGZmZiwgMHhhODgwLCAweGMwZmMsCi0JMHhhODgyLCAweDIwMDEsIDB4MDAwMSwgMHg2ODMyLCAweDA0MDAsIDB4MjAwMSwgMHgwMDA3LCAweDY4MzIsCi0JMHgwMGUwLCAweGE4N2MsIDB4ZDBiNCwgMHgxMTUwLCAweGQwYWMsIDB4MGRiOCwgMHg2ODI0LCAweGQwZjQsCi0JMHgxZDQ4LCAweGE4MzgsIDB4YTkzNCwgMHg5MTA1LCAweDBkODAsIDB4MGMyMCwgMHhkMmVjLCAweDFkNjgsCi0JMHg3MDI0LCAweDkzMDYsIDB4MTExOCwgMHg3MDIwLCAweDk0MDYsIDB4MGQzOCwgMHg3MDIwLCAweDY4M2UsCi0JMHg3MDI0LCAweDY4M2EsIDB4MjAwMSwgMHgwMDA1LCAweDY4MzIsIDB4MDgwYywgMHhjMGMxLCAweDA4MGMsCi0JMHg4YjhmLCAweDAwMTAsIDB4MDgwYywgMHg5ZmVhLCAweDAwNGUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsCi0JMHgwMGU2LCAweDAwZDYsIDB4MDAyNiwgMHg3MDA4LCAweDkwODQsIDB4MDBmZiwgMHg2MjEwLCAweDAwYjYsCi0JMHgyMjU4LCAweGJhMTAsIDB4MDBiZSwgMHg5MjA2LCAweDE5MDQsIDB4YTZmNSwgMHg3MDBjLCAweDYyMTAsCi0JMHgwMGI2LCAweDIyNTgsIDB4YmExNCwgMHgwMGJlLCAweDkyMDYsIDB4MTkwNCwgMHhhNmY1LCAweDYwMzgsCi0JMHgyMDY4LCAweDY4MjQsIDB4YzBkYywgMHg2ODI2LCAweDZhMjAsIDB4OTI4NiwgMHgwMDA3LCAweDA5MDQsCi0JMHhhNmY1LCAweDkyODYsIDB4MDAwMiwgMHgwOTA0LCAweGE2ZjUsIDB4OTI4NiwgMHgwMDAwLCAweDA1ZTgsCi0JMHg2ODA4LCAweDYzM2MsIDB4OTMwNiwgMHgxNWM4LCAweDIwNzEsIDB4MDI2YywgMHg5MTg2LCAweDAwMTUsCi0JMHgwNTcwLCAweDkxOGUsIDB4MDAxNiwgMHgxMTAwLCAweDAwYzYsIDB4NjAzOCwgMHgyMDYwLCAweDYxMDQsCi0JMHg5MTg2LCAweDAwNGIsIDB4MDFjMCwgMHg5MTg2LCAweDAwNGMsIDB4MDFhOCwgMHg5MTg2LCAweDAwNGQsCi0JMHgwMTkwLCAweDkxODYsIDB4MDA0ZSwgMHgwMTc4LCAweDkxODYsIDB4MDA1MiwgMHgwMTYwLCAweDYwMTQsCi0JMHgwMDk2LCAweDIwNDgsIDB4MDgwYywgMHhiZDRlLCAweDA5MGMsIDB4MGRmNiwgMHhhODdiLCAweDAwMDMsCi0JMHgwMDllLCAweDA4MGMsIDB4YzQxMywgMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsCi0JMHgwMDAyLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsIDB4MDBjZSwgMHgwMDMwLCAweDYwMzgsCi0JMHgyMDcwLCAweDIwMDEsIDB4MTk2MiwgMHgyMDA0LCAweDcwNDIsIDB4MDgwYywgMHg5ZmVhLCAweDAwMmUsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGI2LCAweDAwOTYsIDB4MDBmNiwgMHg2MDE0LCAweDIwNDgsCi0JMHg2MDEwLCAweDIwNTgsIDB4OTFiNiwgMHgwMDE1LCAweDAxMzAsIDB4YmEwOCwgMHhiYjBjLCAweGJjMDAsCi0JMHhjNDhjLCAweGJjMDIsIDB4MDQ2MCwgMHgwMDk2LCAweDAxNTYsIDB4MDAzNiwgMHgwMDI2LCAweDJiNDgsCi0JMHg5ZTkwLCAweDAwMTAsIDB4MjAxOSwgMHgwMDBhLCAweDIwYTksIDB4MDAwNCwgMHgwODBjLCAweGIwMTcsCi0JMHgwMDJlLCAweDAwM2UsIDB4MDE1ZSwgMHgwMDllLCAweDE5MDQsIDB4YTc2NCwgMHgwMDk2LCAweDAxNTYsCi0JMHgwMDM2LCAweDAwMjYsIDB4MmI0OCwgMHg5ZTkwLCAweDAwMTQsIDB4MjAxOSwgMHgwMDA2LCAweDIwYTksCi0JMHgwMDA0LCAweDA4MGMsIDB4YjAxNywgMHgwMDJlLCAweDAwM2UsIDB4MDE1ZSwgMHgwMDllLCAweDE1YTAsCi0JMHg3MjM4LCAweGJhMGEsIDB4NzMzYywgMHhiYjBlLCAweGJjMDAsIDB4YzQ4ZCwgMHhiYzAyLCAweGE4MDQsCi0JMHg5MDA1LCAweDExMjgsIDB4MDBmZSwgMHgwMDllLCAweDAwYmUsIDB4MDgwNCwgMHhhM2YyLCAweDAwOTYsCi0JMHgyMDQ4LCAweGFhMTIsIDB4YWIxNiwgMHhhYzBhLCAweDAwOWUsIDB4ODAwNiwgMHg4MDA2LCAweDgwMDcsCi0JMHg5MGJjLCAweDAwM2YsIDB4OTA4NCwgMHhmZmMwLCAweDkwODAsIDB4MDAwMiwgMHgyMDA5LCAweDAwMmIsCi0JMHhhYWEwLCAweGFiOWMsIDB4YWNhOCwgMHhhZGE0LCAweDIwMzEsIDB4MDAwMCwgMHgyMDQxLCAweDEyOGUsCi0JMHgwODBjLCAweGE0ZjEsIDB4MDEzMCwgMHgwMGZlLCAweDAwOWUsIDB4MDgwYywgMHg5ZmVhLCAweDAwYmUsCi0JMHgwMDA1LCAweDA4MGMsIDB4YTlhNywgMHgwY2I4LCAweDJiNzgsIDB4MDBmNiwgMHgwODBjLCAweDMwOTUsCi0JMHgwODBjLCAweGM0NmUsIDB4MDBmZSwgMHgwMGM2LCAweDA4MGMsIDB4OWY5NCwgMHgyZjAwLCAweDYwMTIsCi0JMHg2MDE3LCAweDAwMDAsIDB4NjAyMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsCi0JMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2MmY0LCAweDA4MGMsIDB4NjMyMCwgMHgwODBjLCAweDg2NDAsCi0JMHgwODBjLCAweDhiOGYsIDB4MDBjZSwgMHgwODA0LCAweGE3MzcsIDB4MjEwMCwgMHg5MWIyLCAweDAwNTMsCi0JMHgxYTBjLCAweDBkZjYsIDB4OTFiMiwgMHgwMDQwLCAweDFhMDQsIDB4YTdlZCwgMHgwMDAyLCAweGE3ZGIsCi0JMHhhN2RiLCAweGE3ZDEsIDB4YTdkYiwgMHhhN2RiLCAweGE3ZGIsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsCi0JMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsCi0JMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsCi0JMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2RiLCAweGE3Y2YsCi0JMHhhN2RiLCAweGE3ZGIsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3ZDEsCi0JMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsCi0JMHhhN2NmLCAweGE3ZGIsIDB4YTdkYiwgMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3Y2YsCi0JMHhhN2NmLCAweGE3Y2YsIDB4YTdjZiwgMHhhN2NmLCAweGE3ZGIsIDB4YTdjZiwgMHhhN2NmLCAweDA4MGMsCi0JMHgwZGY2LCAweDAwNjYsIDB4MDBiNiwgMHg2NjEwLCAweDI2NTgsIDB4YjhiYywgMHhjMDhjLCAweGI4YmUsCi0JMHgwMGJlLCAweDAwNmUsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHg5MTg2LCAweDAwMzIsCi0JMHgwMTE4LCAweDA4MGMsIDB4ODY0MCwgMHgwMDEwLCAweDA4MGMsIDB4ODVmOCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4OGI4ZiwgMHgwMTJlLCAweDAwMDUsIDB4MjYwMCwgMHgwMDAyLCAweGE4MDEsCi0JMHhhODAxLCAweGE4MDEsIDB4YTdkYiwgMHhhN2RiLCAweGE4MDEsIDB4YTgwMSwgMHhhODAxLCAweGE4MDEsCi0JMHhhN2RiLCAweGE4MDEsIDB4YTdkYiwgMHhhODAxLCAweGE3ZGIsIDB4YTgwMSwgMHhhODAxLCAweGE4MDEsCi0JMHhhODAxLCAweDA4MGMsIDB4MGRmNiwgMHg2MDA0LCAweDkwYjIsIDB4MDA1MywgMHgxYTBjLCAweDBkZjYsCi0JMHg5MWI2LCAweDAwMTMsIDB4MDkwNCwgMHhhOGQ2LCAweDkxYjYsIDB4MDAyNywgMHgxOTA0LCAweGE4ODAsCi0JMHgwODBjLCAweDhhODMsIDB4NjAwNCwgMHgwODBjLCAweGJmNDUsIDB4MDFiMCwgMHgwODBjLCAweGJmNTYsCi0JMHgwMWE4LCAweDkwOGUsIDB4MDAyMSwgMHgwOTA0LCAweGE4N2QsIDB4OTA4ZSwgMHgwMDIyLCAweDExMzAsCi0JMHgwODBjLCAweGE0MWUsIDB4MDkwNCwgMHhhODc5LCAweDA4MDQsIDB4YTg3YSwgMHg5MDhlLCAweDAwM2QsCi0JMHgwOTA0LCAweGE4N2QsIDB4MDgwNCwgMHhhODczLCAweDA4MGMsIDB4MzBiZSwgMHgyMDAxLCAweDAwMDcsCi0JMHgwODBjLCAweDYyZjQsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjlhMCwgMHgwMGJlLCAweDA4MGMsCi0JMHhhOWE3LCAweDkxODYsIDB4MDA3ZSwgMHgxMTQ4LCAweDIwMDEsIDB4MTgzNiwgMHgyMDE0LCAweGMyODUsCi0JMHgwODBjLCAweDcxN2UsIDB4MTEwOCwgMHhjMmFkLCAweDIyMDIsIDB4MDAzNiwgMHgwMDI2LCAweDIwMTksCi0JMHgwMDI4LCAweDIxMTAsIDB4MDgwYywgMHhkYWYwLCAweDAwMmUsIDB4MDAzZSwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMDM2LCAweDIxMTAsIDB4MjAxOSwgMHgwMDI4LCAweDA4MGMsIDB4ODc4MiwgMHgwMDc2LCAweDkwM2UsCi0JMHgwODBjLCAweDg2NzAsIDB4NjAxMCwgMHgwMGI2LCAweDkwNWQsIDB4MDEwMCwgMHgwMGJlLCAweDJjMDgsCi0JMHgwODBjLCAweGQ1NTYsIDB4MDA3ZSwgMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwODBjLCAweGM0NmUsCi0JMHgwMDE2LCAweDA4MGMsIDB4YzFjMiwgMHgwODBjLCAweDlmZWEsIDB4MDAxZSwgMHgwODBjLCAweDMxOTAsCi0JMHgwODBjLCAweDhiOGYsIDB4MDAzMCwgMHgwODBjLCAweGMxYzIsIDB4MDgwYywgMHg5ZmVhLCAweDA4MGMsCi0JMHg4YjhmLCAweDAwMDUsIDB4MDgwYywgMHhhOWE3LCAweDBjYjAsIDB4MDgwYywgMHhhOWUzLCAweDBjOTgsCi0JMHg5MTg2LCAweDAwMTUsIDB4MDExOCwgMHg5MTg2LCAweDAwMTYsIDB4MTE0OCwgMHgwODBjLCAweGM0N2YsCi0JMHgwZDgwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAyLCAweDA5MDQsIDB4YTllZSwgMHgwYzUwLCAweDkxODYsCi0JMHgwMDE0LCAweDFkMzgsIDB4MDgwYywgMHg4YTgzLCAweDYwMDQsIDB4OTA4ZSwgMHgwMDIyLCAweDExMTgsCi0JMHgwODBjLCAweGE0MWUsIDB4MDlmMCwgMHgwODBjLCAweDMwOTUsIDB4MDgwYywgMHhjNDZlLCAweDA4MGMsCi0JMHhiZjQ1LCAweDExOTgsIDB4MDgwYywgMHgzMGJlLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI5YTAsCi0JMHgwMGJlLCAweDA4MGMsIDB4YTlhNywgMHg5MTg2LCAweDAwN2UsIDB4MTEyOCwgMHgyMDAxLCAweDE4MzYsCi0JMHgyMDBjLCAweGMxODUsIDB4MjEwMiwgMHgwODA0LCAweGE4NzMsIDB4MDgwYywgMHhiZjU2LCAweDExMjAsCi0JMHgwODBjLCAweGE5YTcsIDB4MDgwNCwgMHhhODczLCAweDYwMDQsIDB4OTA4ZSwgMHgwMDMyLCAweDExNjAsCi0JMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHgxODljLCAweDIwNzksIDB4MDAwMCwgMHgwODBjLCAweDM0MjQsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDgwNCwgMHhhODczLCAweDYwMDQsIDB4OTA4ZSwgMHgwMDIxLCAweDBkNDAsCi0JMHg5MDhlLCAweDAwMjIsIDB4MDkwYywgMHhhOWE3LCAweDA4MDQsIDB4YTg3MywgMHg5MGIyLCAweDAwNDAsCi0JMHgxYTA0LCAweGE5OTAsIDB4MjAwOCwgMHgwMDAyLCAweGE5MWUsIDB4YTkxZiwgMHhhOTIyLCAweGE5MjUsCi0JMHhhOTI4LCAweGE5MzUsIDB4YTkxYywgMHhhOTFjLCAweGE5MWMsIDB4YTkxYywgMHhhOTFjLCAweGE5MWMsCi0JMHhhOTFjLCAweGE5MWMsIDB4YTkxYywgMHhhOTFjLCAweGE5MWMsIDB4YTkxYywgMHhhOTFjLCAweGE5MWMsCi0JMHhhOTFjLCAweGE5MWMsIDB4YTkxYywgMHhhOTFjLCAweGE5MWMsIDB4YTkxYywgMHhhOTFjLCAweGE5MWMsCi0JMHhhOTFjLCAweGE5MWMsIDB4YTkzOCwgMHhhOTQ1LCAweGE5MWMsIDB4YTk0NywgMHhhOTQ1LCAweGE5MWMsCi0JMHhhOTFjLCAweGE5MWMsIDB4YTkxYywgMHhhOTFjLCAweGE5NDUsIDB4YTk0NSwgMHhhOTFjLCAweGE5MWMsCi0JMHhhOTFjLCAweGE5MWMsIDB4YTkxYywgMHhhOTFjLCAweGE5MWMsIDB4YTkxYywgMHhhOTc3LCAweGE5NDUsCi0JMHhhOTFjLCAweGE5NDEsIDB4YTkxYywgMHhhOTFjLCAweGE5MWMsIDB4YTk0MiwgMHhhOTFjLCAweGE5MWMsCi0JMHhhOTFjLCAweGE5NDUsIDB4YTk2ZSwgMHhhOTFjLCAweDA4MGMsIDB4MGRmNiwgMHgwNDMwLCAweDIwMDEsCi0JMHgwMDBiLCAweDA0NzAsIDB4MjAwMSwgMHgwMDAzLCAweDA0NTgsIDB4MjAwMSwgMHgwMDA1LCAweDA0NDAsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODA0LCAweDAwYmUsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsCi0JMHgwMDAwLCAweDE1MDAsIDB4MjAwMSwgMHgwMDAxLCAweDAwZDgsIDB4MjAwMSwgMHgwMDA5LCAweDAwYzAsCi0JMHgwODBjLCAweDhhODMsIDB4NjAwMywgMHgwMDA1LCAweDA4MGMsIDB4YzQ3MSwgMHgwODBjLCAweDhiOGYsCi0JMHgwMDcwLCAweDAwMTgsIDB4MDAxMCwgMHgwODBjLCAweDYyZjQsIDB4MDgwNCwgMHhhOTg4LCAweDA4MGMsCi0JMHg4YTgzLCAweDA4MGMsIDB4YzQ3MSwgMHg2MDAzLCAweDAwMDQsIDB4MDgwYywgMHg4YjhmLCAweDAwMDUsCi0JMHgwODBjLCAweDYyZjQsIDB4MDgwYywgMHg4YTgzLCAweDYwMDMsIDB4MDAwMiwgMHgwMDM2LCAweDIwMTksCi0JMHgxODY2LCAweDIzMDQsIDB4OTA4NCwgMHhmZjAwLCAweDExMjAsIDB4MjAwMSwgMHgxOTYwLCAweDIwMWMsCi0JMHgwMDQwLCAweDgwMDcsIDB4OTA5YSwgMHgwMDA0LCAweDBlYzAsIDB4ODAwMywgMHg4MDFiLCAweDgzMWIsCi0JMHg5MzE4LCAweDYzMWEsIDB4MDAzZSwgMHgwODBjLCAweDhiOGYsIDB4MGMwOCwgMHgwODBjLCAweDhhODMsCi0JMHgwODBjLCAweGMxYzIsIDB4MDgwYywgMHg5ZmVhLCAweDA4MGMsIDB4OGI4ZiwgMHgwOGMwLCAweDAwZTYsCi0JMHgwMGY2LCAweDIwNzEsIDB4MTg5YywgMHgyMDc5LCAweDAwMDAsIDB4MDgwYywgMHgzNDI0LCAweDAwZmUsCi0JMHgwMGVlLCAweDA4MGMsIDB4OGE4MywgMHgwODBjLCAweDlmZWEsIDB4MDgwYywgMHg4YjhmLCAweDA4MzgsCi0JMHgwODBjLCAweDhhODMsIDB4NjAwMywgMHgwMDAyLCAweDA4MGMsIDB4YzQ3MSwgMHgwODA0LCAweDhiOGYsCi0JMHgyNjAwLCAweDIwMDgsIDB4MDAwMiwgMHhhOWE1LCAweGE5YTUsIDB4YTlhNSwgMHhhOTg4LCAweGE5ODgsCi0JMHhhOWE1LCAweGE5YTUsIDB4YTlhNSwgMHhhOWE1LCAweGE5ODgsIDB4YTlhNSwgMHhhOTg4LCAweGE5YTUsCi0JMHhhOTg4LCAweGE5YTUsIDB4YTlhNSwgMHhhOWE1LCAweGE5YTUsIDB4MDgwYywgMHgwZGY2LCAweDAwZTYsCi0JMHgwMDk2LCAweDAwMjYsIDB4MDAxNiwgMHgwODBjLCAweGJkNGUsIDB4MDU2OCwgMHg2MDE0LCAweDIwNDgsCi0JMHhhODY0LCAweDkwODYsIDB4MDEzOSwgMHgxMWE4LCAweGE4OTQsIDB4OTA4NiwgMHgwMDU2LCAweDExNDgsCi0JMHgwODBjLCAweDUyNzUsIDB4MDEzMCwgMHgyMDAxLCAweDAwMDAsIDB4OTAwZSwgMHgyMDExLCAweDQwMDAsCi0JMHgwMDI4LCAweDIwMDEsIDB4MDAzMCwgMHg5MDBlLCAweDIwMTEsIDB4NDAwNSwgMHgwODBjLCAweGMzMzMsCi0JMHgwMDkwLCAweGE4NjgsIDB4ZDBmYywgMHgwMTc4LCAweGE4MDcsIDB4MDAwMCwgMHgwMDE2LCAweDYwMDQsCi0JMHg5MDhlLCAweDAwMjEsIDB4MDE2OCwgMHg5MDhlLCAweDAwM2QsIDB4MDE1MCwgMHgwMDFlLCAweGE4NjcsCi0JMHgwMTAzLCAweGE4MzMsIDB4MDEwMCwgMHgwMDFlLCAweDAwMmUsIDB4MDA5ZSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMDFlLCAweDAwMDksIDB4MGNjMCwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHhhODAwLCAweDIwNDgsCi0JMHhhODY3LCAweDAxMDMsIDB4YTgyMywgMHg4MDAxLCAweDAwOWUsIDB4MDAwNSwgMHgwMGI2LCAweDY2MTAsCi0JMHgyNjU4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDkwYjIsIDB4MDAwYywgMHgxYTBjLCAweDBkZjYsCi0JMHg2NjA0LCAweDk2YjYsIDB4MDA0ZCwgMHgxMTIwLCAweDA4MGMsIDB4YzI1MiwgMHgwODA0LCAweGFhNmIsCi0JMHg2NjA0LCAweDk2YjYsIDB4MDA0MywgMHgxMTIwLCAweDA4MGMsIDB4YzI5YiwgMHgwODA0LCAweGFhNmIsCi0JMHg2NjA0LCAweDk2YjYsIDB4MDA0YiwgMHgxMTIwLCAweDA4MGMsIDB4YzJjNywgMHgwODA0LCAweGFhNmIsCi0JMHg2NjA0LCAweDk2YjYsIDB4MDAzMywgMHgxMTIwLCAweDA4MGMsIDB4YzFlNCwgMHgwODA0LCAweGFhNmIsCi0JMHg2NjA0LCAweDk2YjYsIDB4MDAyOCwgMHgxMTIwLCAweDA4MGMsIDB4YmY5NCwgMHgwODA0LCAweGFhNmIsCi0JMHg2NjA0LCAweDk2YjYsIDB4MDAyOSwgMHgxMTIwLCAweDA4MGMsIDB4YmZkNSwgMHgwODA0LCAweGFhNmIsCi0JMHg2NjA0LCAweDk2YjYsIDB4MDAxZiwgMHgxMTE4LCAweDA4MGMsIDB4YTNjMywgMHgwNGUwLCAweDY2MDQsCi0JMHg5NmI2LCAweDAwMDAsIDB4MTExOCwgMHgwODBjLCAweGE2ZmIsIDB4MDRhOCwgMHg2NjA0LCAweDk2YjYsCi0JMHgwMDIyLCAweDExMTgsIDB4MDgwYywgMHhhM2ZmLCAweDA0NzAsIDB4NjYwNCwgMHg5NmI2LCAweDAwMzUsCi0JMHgxMTE4LCAweDA4MGMsIDB4YTUwZiwgMHgwNDM4LCAweDY2MDQsIDB4OTZiNiwgMHgwMDM5LCAweDExMTgsCi0JMHgwODBjLCAweGE2OTAsIDB4MDQwMCwgMHg2NjA0LCAweDk2YjYsIDB4MDAzZCwgMHgxMTE4LCAweDA4MGMsCi0JMHhhNDM3LCAweDAwYzgsIDB4NjYwNCwgMHg5NmI2LCAweDAwNDQsIDB4MTExOCwgMHgwODBjLCAweGE0NzMsCi0JMHgwMDkwLCAweDY2MDQsIDB4OTZiNiwgMHgwMDQ5LCAweDExMTgsIDB4MDgwYywgMHhhNDllLCAweDAwNTgsCi0JMHg5MWI2LCAweDAwMTUsIDB4MTExMCwgMHgwMDYzLCAweDAwMzAsIDB4OTFiNiwgMHgwMDE2LCAweDExMjgsCi0JMHgwMGJlLCAweDA4MDQsIDB4YWQ0NiwgMHgwMGJlLCAweDAwMDUsIDB4MDgwYywgMHhhMDgzLCAweDBjZDgsCi0JMHhhYTg4LCAweGFhOTYsIDB4YWE4OCwgMHhhYWRhLCAweGFhODgsIDB4YWM2ZSwgMHhhZDUzLCAweGFhODgsCi0JMHhhYTg4LCAweGFkMjAsIDB4YWE4OCwgMHhhZDM0LCAweDAwOTYsIDB4MDgwYywgMHgxNTc3LCAweDYwMTQsCi0JMHgyMDQ4LCAweGE4MDAsIDB4MjA0OCwgMHhhODY3LCAweDAxMDMsIDB4MDA5ZSwgMHgwODA0LCAweDlmZWEsCi0JMHhhMDAxLCAweGEwMDEsIDB4MDAwNSwgMHg2NjA0LCAweDk2YjYsIDB4MDAwNCwgMHgxMTMwLCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4NjJlMCwgMHgwODA0LCAweDlmZWEsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCi0JMHgxODAwLCAweDcwOGMsIDB4OTA4NiwgMHgwMDc0LCAweDE1NDAsIDB4MDgwYywgMHhkNTI3LCAweDExYjAsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHg3MDMwLCAweGQwOGMsIDB4MDEyOCwgMHhiODAwLCAweGQwYmMsCi0JMHgwMTEwLCAweGMwYzUsIDB4YjgwMiwgMHgwMGU5LCAweDAwYmUsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsCi0JMHg2MmY0LCAweDA4MGMsIDB4MzBiZSwgMHgwODBjLCAweDlmZWEsIDB4MDA4OCwgMHgyMDAxLCAweDAwMGEsCi0JMHgwODBjLCAweDYyZjQsIDB4MDgwYywgMHgzMGJlLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDEsCi0JMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDAwMTAsIDB4MDgwYywgMHhhYzU5LCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZDYsIDB4YjgwMCwgMHhkMDg0LCAweDAxNTgsIDB4OTAwNiwgMHgwODBjLCAweDYyZTAsCi0JMHgyMDY5LCAweDE4NWIsIDB4NjgwNCwgMHgwMDIwLCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDYzMjAsCi0JMHgwMGRlLCAweDAwMDUsIDB4MDBiNiwgMHgwMDk2LCAweDAwZDYsIDB4MjAxMSwgMHgxODIzLCAweDIyMDQsCi0JMHg5MDg2LCAweDAwNzQsIDB4MTkwNCwgMHhhYzMwLCAweDYwMTAsIDB4MjA1OCwgMHhiYWEwLCAweDkyODYsCi0JMHgwMDdlLCAweDExMjAsIDB4MDgwYywgMHhhZTk4LCAweDA4MDQsIDB4YWI5ZCwgMHgwMGQ2LCAweDA4MGMsCi0JMHg3MTdlLCAweDAxYTAsIDB4MDAyNiwgMHgyMDExLCAweDAwMTAsIDB4MDgwYywgMHg2NmVkLCAweDAwMmUsCi0JMHgwOTA0LCAweGFiM2UsIDB4MDgwYywgMHg1NGVmLCAweDE1OTgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MDcsCi0JMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweGRlYWQsIDB4MDQ1MCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI5MTAsIDB4MDBiZSwgMHg5MTg2LCAweDAwZmYsIDB4MDU4MCwgMHgwMDI2LCAweDIwMTEsCi0JMHg4MDA4LCAweDA4MGMsIDB4NjZlZCwgMHgwMDJlLCAweDA1NDgsIDB4NjAxNCwgMHg5MDA1LCAweDA5MGMsCi0JMHgwZGY2LCAweDIwNDgsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM5LCAweDExNDAsCi0JMHgyMDAxLCAweDAwMzAsIDB4OTAwZSwgMHgyMDExLCAweDQwMDksIDB4MDgwYywgMHhjMzMzLCAweDAwNDAsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweGRlYWQsCi0JMHg2MDEwLCAweDIwNTgsIDB4YjlhMCwgMHgwMDE2LCAweDA4MGMsIDB4MzBiZSwgMHgwODBjLCAweDlmZWEsCi0JMHgwMDFlLCAweDA4MGMsIDB4MzE5MCwgMHgwMGRlLCAweDA4MDQsIDB4YWMzMywgMHgwMGRlLCAweDA4MGMsCi0JMHhhZThkLCAweDYwMTAsIDB4MjA1OCwgMHhiYWEwLCAweDkyODYsIDB4MDA4MCwgMHgxNTEwLCAweDYwMTQsCi0JMHg5MDA1LCAweDAxYTgsIDB4MjA0OCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzksCi0JMHgxMTQwLCAweDIwMDEsIDB4MDAwMCwgMHg5MDBlLCAweDIwMTEsIDB4NDAwMCwgMHgwODBjLCAweGMzMzMsCi0JMHgwMDMwLCAweGE4MDcsIDB4MDAwMCwgMHhhODY3LCAweDAxMDMsIDB4YTgzMywgMHgwMjAwLCAweDIwMDEsCi0JMHgwMDA2LCAweDA4MGMsIDB4NjJmNCwgMHgwODBjLCAweDMwYmUsIDB4MDgwYywgMHg5ZmVhLCAweDA4MDQsCi0JMHhhYzMzLCAweDA4MGMsIDB4YWM0MSwgMHg2MDE0LCAweDkwMDUsIDB4MDE5MCwgMHgyMDQ4LCAweGE4NjgsCi0JMHhkMGY0LCAweDAxZTgsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDM5LCAweDFkMDgsCi0JMHgyMDAxLCAweDAwMDAsIDB4OTAwZSwgMHgyMDExLCAweDQwMDAsIDB4MDgwYywgMHhjMzMzLCAweDA4ZjgsCi0JMHgwODBjLCAweGFjMzcsIDB4MDE2MCwgMHg5MDA2LCAweDA4MGMsIDB4NjJlMCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwODBjLCAweDYzMjAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjJmNCwgMHgwOGEwLCAweDIwMDEsCi0JMHgwMDA0LCAweDA4MGMsIDB4NjJmNCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAzLCAweDA4MGMsCi0JMHg4NjQwLCAweDA4MGMsIDB4OGI4ZiwgMHgwODA0LCAweGFjMzMsIDB4Yjg1YywgMHhkMGU0LCAweDAxNzgsCi0JMHgwODBjLCAweGMxNjQsIDB4MDgwYywgMHg3MTdlLCAweDAxMTgsIDB4ZDBkYywgMHgxOTA0LCAweGFiNWYsCi0JMHgyMDExLCAweDE4MzYsIDB4MjIwNCwgMHhjMGFkLCAweDIwMTIsIDB4MDgwNCwgMHhhYjVmLCAweDA4MGMsCi0JMHhjMWExLCAweDIwMTEsIDB4MTgzNiwgMHgyMjA0LCAweGMwYTUsIDB4MjAxMiwgMHgwMDA2LCAweDA4MGMsCi0JMHhkNmM3LCAweDAwMGUsIDB4MTkwNCwgMHhhYjVmLCAweGMwYjUsIDB4MjAxMiwgMHgyMDAxLCAweDAwMDYsCi0JMHgwODBjLCAweDYyZjQsIDB4OTAwNiwgMHgwODBjLCAweDYyZTAsIDB4MDBjNiwgMHgyMDAxLCAweDE4MGYsCi0JMHgyMDA0LCAweGQwOWMsIDB4MDUyMCwgMHgwMGY2LCAweDIwNzksIDB4MDEwMCwgMHgwMGU2LCAweDIwNzEsCi0JMHgxODAwLCAweDcwMGMsIDB4OTA4NCwgMHgwMGZmLCAweDc4ZTYsIDB4NzA3YSwgMHg3MDEwLCAweDc4ZWEsCi0JMHg3MDdlLCAweDkwOGMsIDB4MDBmZiwgMHgwMGVlLCAweDc4MGMsIDB4YzBiNSwgMHg3ODBlLCAweDAwZmUsCi0JMHgwODBjLCAweDI2YjYsIDB4MDBmNiwgMHgyMTAwLCAweDkwMGUsIDB4MDgwYywgMHgyNjZkLCAweDc5NWEsCi0JMHgwMGZlLCAweDkxODYsIDB4MDA4MSwgMHgwMWYwLCAweDIwMDksIDB4MDA4MSwgMHgwMGUwLCAweDIwMDksCi0JMHgwMGVmLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDc5ZWEsIDB4NzhlNywgMHgwMDAwLCAweDc5MzIsCi0JMHg3OTM2LCAweDc4MGMsIDB4YzBiNSwgMHg3ODBlLCAweDAwZmUsIDB4MDgwYywgMHgyNmI2LCAweDAwZjYsCi0JMHgyMDc5LCAweDE4MDAsIDB4Nzk3ZSwgMHgyMTAwLCAweDkwMGUsIDB4Nzk3YSwgMHgwODBjLCAweDI2NmQsCi0JMHg3OTVhLCAweDAwZmUsIDB4ODEwOCwgMHgwODBjLCAweDYzNDMsIDB4MmIwMCwgMHgwMGNlLCAweDE5MDQsCi0JMHhhYjVmLCAweDYwMTIsIDB4MjAwOSwgMHgxODBmLCAweDIxMGMsIDB4ZDE5YywgMHgwMTUwLCAweDIwMDksCi0JMHgwMjdjLCAweDIxMGMsIDB4OTE4YywgMHgwMGZmLCAweGI5MTIsIDB4MjAwOSwgMHgwMjdkLCAweDIxMGMsCi0JMHhiOTE2LCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDYyZjQsIDB4NjAyMywgMHgwMDAxLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDAwMTgsCi0JMHgwODBjLCAweGE5YTcsIDB4MDQzMSwgMHgwMGRlLCAweDAwOWUsIDB4MDBiZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODEwLCAweDIwMDQsIDB4ZDBhNCwgMHgwMTIwLCAweDIwMDEsIDB4MTg1YywgMHgyMDA0LCAweGQwYWMsCi0JMHgwMDA1LCAweDAwZTYsIDB4MDgwYywgMHhkYjQ5LCAweDAxOTAsIDB4MjA3MSwgMHgwMjYwLCAweDcxMDgsCi0JMHg3MjBjLCAweDkxOGMsIDB4MDBmZiwgMHgxMTE4LCAweDkyODQsIDB4ZmYwMCwgMHgwMTQwLCAweDYwMTAsCi0JMHgyMDU4LCAweGI4YTAsIDB4OTA4NCwgMHhmZjgwLCAweDExMTAsIDB4YjkxMiwgMHhiYTE2LCAweDAwZWUsCi0JMHgwMDA1LCAweDIwMzAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjJmNCwgMHgwODBjLCAweDU0ZWYsCi0JMHgxMTIwLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDYzMjAsIDB4MDgwYywgMHgzMGJlLCAweDYwMjAsCi0JMHg5MDg2LCAweDAwMGEsIDB4MTEwOCwgMHgwMDA1LCAweDA4MDQsIDB4OWZlYSwgMHgwMGI2LCAweDAwZTYsCi0JMHgwMDI2LCAweDAwMTYsIDB4MjA3MSwgMHgxODAwLCAweDcwOGMsIDB4OTA4NiwgMHgwMDE0LCAweDE5MDQsCi0JMHhhZDE3LCAweDAwZDYsIDB4MDgwYywgMHg3MTdlLCAweDAxYTAsIDB4MDAyNiwgMHgyMDExLCAweDAwMTAsCi0JMHgwODBjLCAweDY2ZWQsIDB4MDAyZSwgMHgwOTA0LCAweGFjYzksIDB4MDgwYywgMHg1NGVmLCAweDE1OTgsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweGRlYWQsCi0JMHgwNDUwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI5MTAsIDB4MDBiZSwgMHg5MTg2LCAweDAwZmYsCi0JMHgwNTgwLCAweDAwMjYsIDB4MjAxMSwgMHg4MDA4LCAweDA4MGMsIDB4NjZlZCwgMHgwMDJlLCAweDA1NDgsCi0JMHg2MDE0LCAweDkwMDUsIDB4MDkwYywgMHgwZGY2LCAweDIwNDgsIDB4YTg2NCwgMHg5MDg0LCAweDAwZmYsCi0JMHg5MDg2LCAweDAwMzksIDB4MTE0MCwgMHgyMDAxLCAweDAwMzAsIDB4OTAwZSwgMHgyMDExLCAweDQwMDksCi0JMHgwODBjLCAweGMzMzMsIDB4MDA0MCwgMHg2MDE0LCAweDIwNDgsIDB4YTgwNywgMHgwMDAwLCAweGE4NjcsCi0JMHgwMTAzLCAweGE4MzMsIDB4ZGVhZCwgMHg2MDEwLCAweDIwNTgsIDB4YjlhMCwgMHgwMDE2LCAweDA4MGMsCi0JMHgzMGJlLCAweDA4MGMsIDB4OWZlYSwgMHgwMDFlLCAweDA4MGMsIDB4MzE5MCwgMHgwMGRlLCAweDA4MDQsCi0JMHhhZDFiLCAweDAwZGUsIDB4MDgwYywgMHg1NGVmLCAweDExNzAsIDB4NjAxNCwgMHg5MDA1LCAweDExNTgsCi0JMHgwMDM2LCAweDAwNDYsIDB4NjAxMCwgMHgyMDU4LCAweGJiYTAsIDB4MjAyMSwgMHgwMDA2LCAweDA4MGMsCi0JMHg0YmI0LCAweDAwNGUsIDB4MDAzZSwgMHgwMGQ2LCAweDYwMTAsIDB4MjA1OCwgMHgwODBjLCAweDY0M2UsCi0JMHgwODBjLCAweGFhYzksIDB4MDBkZSwgMHgwODBjLCAweGFmNjMsIDB4MTU4OCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiODkwLCAweDkwMDUsIDB4MDU2MCwgMHgyMDAxLCAweDAwMDYsIDB4MDgwYywgMHg2MmY0LCAweDAwOTYsCi0JMHg2MDE0LCAweDkwNGQsIDB4MDFkMCwgMHhhODY0LCAweDkwODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMzksCi0JMHgxMTQwLCAweDIwMDEsIDB4MDAwMCwgMHg5MDBlLCAweDIwMTEsIDB4NDAwMCwgMHgwODBjLCAweGMzMzMsCi0JMHgwMDYwLCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAyOSwgMHgwMTMwLCAweGE4MDcsCi0JMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhODMzLCAweDAyMDAsIDB4MDA5ZSwgMHgwODBjLCAweDMwYmUsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwYSwgMHgwMTM4LCAweDA4MGMsIDB4OWZlYSwgMHgwMDIwLCAweDA4MGMsCi0JMHhhOWE3LCAweDA4MGMsIDB4YWM1OSwgMHgwMDFlLCAweDAwMmUsIDB4MDBlZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgyMDExLCAweDE4MjMsIDB4MjIwNCwgMHg5MDg2LCAweDAwMTQsIDB4MTE2MCwgMHgyMDAxLCAweDAwMDIsCi0JMHgwODBjLCAweDYyZjQsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgwODBjLCAweDg2NDAsCi0JMHgwODA0LCAweDhiOGYsIDB4MDgwNCwgMHhhYzU5LCAweDIwMzAsIDB4MjAxMSwgMHgxODIzLCAweDIyMDQsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTE0OCwgMHg5NmI2LCAweDAwMGIsIDB4MTEyMCwgMHgyMDAxLCAweDAwMDcsCi0JMHgwODBjLCAweDYyZjQsIDB4MDgwNCwgMHg5ZmVhLCAweDA4MDQsIDB4YWM1OSwgMHgwMDAyLCAweGFhODgsCi0JMHhhZDVlLCAweGFhODgsIDB4YWQ5ZiwgMHhhYTg4LCAweGFlNGEsIDB4YWQ1MywgMHhhYThiLCAweGFhODgsCi0JMHhhZTVjLCAweGFhODgsIDB4YWU2YywgMHg2NjA0LCAweDk2ODYsIDB4MDAwMywgMHgwOTA0LCAweGFjNmUsCi0JMHg5NmI2LCAweDAwMWUsIDB4MTExMCwgMHgwODBjLCAweDlmZWEsIDB4MDAwNSwgMHgwMGI2LCAweDAwZDYsCi0JMHgwMGM2LCAweDA4MGMsIDB4YWU3YywgMHgxMWEwLCAweDkwMDYsIDB4MDgwYywgMHg2MmUwLCAweDA4MGMsCi0JMHgzMDk1LCAweDA4MGMsIDB4YzQ2ZSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2MmY0LCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDA0MTgsCi0JMHgyMDA5LCAweDAyNmUsIDB4MjEwNCwgMHg5MDg2LCAweDAwMDksIDB4MTE2MCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiODQwLCAweDkwODQsIDB4MDBmZiwgMHg5MDA1LCAweDAxODAsIDB4ODAwMSwgMHhiODQyLCAweDYwMWIsCi0JMHgwMDBhLCAweDAwODgsIDB4MjAwOSwgMHgwMjZmLCAweDIxMDQsIDB4OTA4NCwgMHhmZjAwLCAweDkwOGUsCi0JMHgxOTAwLCAweDAxNDgsIDB4OTA4ZSwgMHgxZTAwLCAweDA5OTAsIDB4MDgwYywgMHgzMDk1LCAweDA4MGMsCi0JMHhjNDZlLCAweDA4MGMsIDB4YWM1OSwgMHgwMGNlLCAweDAwZGUsIDB4MDBiZSwgMHgwMDA1LCAweDAwOTYsCi0JMHgwMGI2LCAweDAwMjYsIDB4OTAxNiwgMHgwODBjLCAweGFlOGEsIDB4MDBkNiwgMHgyMDY5LCAweDE5NTYsCi0JMHgyZDA0LCAweDkwMDUsIDB4MDE2OCwgMHg2MDEwLCAweDIwNTgsIDB4YjhhMCwgMHg5MDg2LCAweDAwN2UsCi0JMHgxMTM4LCAweDIwNjksIDB4MTgxZiwgMHgyZDA0LCAweDgwMDAsIDB4MjA2YSwgMHgwMGRlLCAweDAwMTAsCi0JMHgwMGRlLCAweDAwODgsIDB4OTAwNiwgMHgwODBjLCAweDYyZTAsIDB4MjAwMSwgMHgwMDAyLCAweDA4MGMsCi0JMHg2MmY0LCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDIsIDB4MDgwYywgMHg4NjQwLCAweDA4MGMsCi0JMHg4YjhmLCAweDA4MDQsIDB4YWUxYSwgMHgwODBjLCAweGJkNGUsIDB4MDFiMCwgMHg2MDE0LCAweDIwNDgsCi0JMHhhODY0LCAweDIwMTAsIDB4OTA4NiwgMHgwMTM5LCAweDExMzgsIDB4NjAwNywgMHgwMDE2LCAweDIwMDEsCi0JMHgwMDAyLCAweDA4MGMsIDB4YzM5MCwgMHgwMGIwLCAweDYwMTQsIDB4MjA0OCwgMHhhODY0LCAweGQwZmMsCi0JMHgwMTE4LCAweDIwMDEsIDB4MDAwMSwgMHgwY2E4LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZGMsCi0JMHgwMTQ4LCAweDYwMTAsIDB4MjA1OCwgMHhiODQwLCAweDkwODQsIDB4MDBmZiwgMHg5MDA1LCAweDExMTAsCi0JMHg5MDA2LCAweDBjMzgsIDB4MDgwYywgMHhhOWE3LCAweDIwMDksIDB4MDI2ZSwgMHgyMTM0LCAweDk2YjQsCi0JMHgwMGZmLCAweDk2ODYsIDB4MDAwNSwgMHgwNTEwLCAweDk2ODYsIDB4MDAwYiwgMHgwMWM4LCAweDIwMDksCi0JMHgwMjZmLCAweDIxMDQsIDB4OTA4NCwgMHhmZjAwLCAweDExMTgsIDB4OTY4NiwgMHgwMDA5LCAweDAxYjAsCi0JMHg5MDg2LCAweDE5MDAsIDB4MTE2OCwgMHg5Njg2LCAweDAwMDksIDB4MDE4MCwgMHgyMDAxLCAweDAwMDQsCi0JMHgwODBjLCAweDYyZjQsIDB4MjAwMSwgMHgwMDI4LCAweDYwMWEsIDB4NjAwNywgMHgwMDUyLCAweDAwMTAsCi0JMHgwODBjLCAweGFjNTksIDB4MDAyZSwgMHgwMGJlLCAweDAwOWUsIDB4MDAwNSwgMHg5Mjg2LCAweDAxMzksCi0JMHgwMTYwLCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGJkNGUsIDB4MDE0MCwgMHhhODY0LCAweDkwODYsCi0JMHgwMTM5LCAweDAxMTgsIDB4YTg2OCwgMHhkMGZjLCAweDAxMDgsIDB4MGM1MCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiODQwLCAweDkwODQsIDB4MDBmZiwgMHg5MDA1LCAweDAxMzgsIDB4ODAwMSwgMHhiODQyLCAweDYwMWIsCi0JMHgwMDBhLCAweDYwMDcsIDB4MDAxNiwgMHgwOGYwLCAweGI4YTAsIDB4OTA4NiwgMHgwMDdlLCAweDExMzgsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweDVkYzIsIDB4MDBlZSwgMHgwMDEwLCAweDA4MGMsCi0JMHgzMDk1LCAweDA4NzAsIDB4MjAwMSwgMHgwMDA0LCAweDA4MGMsIDB4NjJmNCwgMHgwNGQ5LCAweDExNDAsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAzLCAweDA4MGMsIDB4ODY0MCwgMHgwODA0LCAweDhiOGYsCi0JMHgwODBjLCAweGE5YTcsIDB4MDgwNCwgMHhhYzU5LCAweDA0NjksIDB4MTE2MCwgMHgyMDAxLCAweDAwMDgsCi0JMHgwODBjLCAweDYyZjQsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwNSwgMHgwODBjLCAweDg2NDAsCi0JMHgwODA0LCAweDhiOGYsIDB4MDgwNCwgMHhhYzU5LCAweDAwZTksIDB4MTE2MCwgMHgyMDAxLCAweDAwMGEsCi0JMHgwODBjLCAweDYyZjQsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMSwgMHgwODBjLCAweDg2NDAsCi0JMHgwODA0LCAweDhiOGYsIDB4MDgwNCwgMHhhYzU5LCAweDIwMDksIDB4MDI2ZSwgMHgyMTA0LCAweDkwODYsCi0JMHgwMDAzLCAweDExMzgsIDB4MjAwOSwgMHgwMjZmLCAweDIxMDQsIDB4OTA4NCwgMHhmZjAwLCAweDkwODYsCi0JMHgyYTAwLCAweDAwMDUsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4MDBiNiwgMHgwMGM2LCAweDAwMTYsCi0JMHg2MTEwLCAweDIxNTgsIDB4MDgwYywgMHg2M2IyLCAweDAwMWUsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMGI2LCAweDAwZjYsIDB4MDBlNiwgMHgwMGQ2LCAweDAwMzYsIDB4MDAxNiwgMHg2MDEwLCAweDIwNTgsCi0JMHgyMDA5LCAweDE4MzYsIDB4MjEwNCwgMHg5MDg1LCAweDAwMDMsIDB4MjAwYSwgMHgwODBjLCAweGFmMzUsCi0JMHgwNTYwLCAweDIwMDksIDB4MTgzNiwgMHgyMTA0LCAweGMwY2QsIDB4MjAwYSwgMHgwODBjLCAweDY2YzUsCi0JMHgwMTU4LCAweDkwMDYsIDB4MjAyMCwgMHgyMDA5LCAweDAwMmEsIDB4MDgwYywgMHhkODM3LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMGMsIDB4YzE5NSwgMHgyMTAyLCAweDIwMTksIDB4MDAyYSwgMHgyMDA5LCAweDAwMDEsCi0JMHgwODBjLCAweDMwNjAsIDB4MDBlNiwgMHgyMDcxLCAweDE4MDAsIDB4MDgwYywgMHgyZTczLCAweDAwZWUsCi0JMHgwMGM2LCAweDAxNTYsIDB4MjBhOSwgMHgwNzgxLCAweDIwMDksIDB4MDA3ZiwgMHgwODBjLCAweDMxOTAsCi0JMHg4MTA4LCAweDFmMDQsIDB4YWVjZSwgMHgwMTVlLCAweDAwY2UsIDB4MDgwYywgMHhhZThkLCAweDIwNzEsCi0JMHgwMjYwLCAweDIwNzksIDB4MDIwMCwgMHg3ODE3LCAweDAwMDEsIDB4MjAwMSwgMHgxODM2LCAweDIwMGMsCi0JMHhjMWM1LCAweDcwMTgsIDB4ZDBmYywgMHgwMTEwLCAweGQwZGMsIDB4MDExOCwgMHg3MDM4LCAweGQwZGMsCi0JMHgxMTA4LCAweGMxYzQsIDB4NzgxNywgMHgwMDAwLCAweDIwMDEsIDB4MTgzNiwgMHgyMTAyLCAweDkxODQsCi0JMHgwMDUwLCAweDkwODYsIDB4MDA1MCwgMHgwNWQwLCAweDIwNzksIDB4MDEwMCwgMHgyZTA0LCAweDkwODQsCi0JMHgwMGZmLCAweDIwNjksIDB4MTgxZSwgMHgyMDZhLCAweDc4ZTYsIDB4MDAwNiwgMHg4ZTcwLCAweDJlMDQsCi0JMHgyMDY5LCAweDE4MWYsIDB4MjA2YSwgMHg3OGVhLCAweDc4MzIsIDB4NzgzNiwgMHgyMDEwLCAweDkwODQsCi0JMHhmZjAwLCAweDAwMWUsIDB4OTEwNSwgMHgyMDA5LCAweDE4MmIsIDB4MjAwYSwgMHgyMjAwLCAweDkwODQsCi0JMHgwMGZmLCAweDIwMDgsIDB4MDgwYywgMHgyNmI2LCAweDA4MGMsIDB4NzE3ZSwgMHgwMTcwLCAweDIwNzEsCi0JMHgwMjYwLCAweDIwNjksIDB4MTk1YywgMHg3MDQ4LCAweDIwNmEsIDB4NzA0YywgMHg2ODA2LCAweDcwNTAsCi0JMHg2ODBhLCAweDcwNTQsIDB4NjgwZSwgMHgwODBjLCAweGMxNjQsIDB4MDA0MCwgMHgyMDAxLCAweDAwMDYsCi0JMHgwODBjLCAweDYyZjQsIDB4MDgwYywgMHgzMGJlLCAweDA4MGMsIDB4OWZlYSwgMHgwMDFlLCAweDAwM2UsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDBmZSwgMHgwMGJlLCAweDAwMDUsIDB4MDA5NiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMGU2LCAweDAxNTYsIDB4MjAxOSwgMHgxODJiLCAweDIzMWMsIDB4ODNmZiwgMHgwMWYwLCAweDIwNzEsCi0JMHgwMjYwLCAweDcyMDAsIDB4OTI5NCwgMHgwMGZmLCAweDcwMDQsIDB4OTA4NCwgMHhmZjAwLCAweDkyMDUsCi0JMHg5MzA2LCAweDExOTgsIDB4MjAxMSwgMHgwMjc2LCAweDIwYTksIDB4MDAwNCwgMHgyYjQ4LCAweDIwMTksCi0JMHgwMDBhLCAweDA4MGMsIDB4YjAxNywgMHgxMTQ4LCAweDIwMTEsIDB4MDI3YSwgMHgyMGE5LCAweDAwMDQsCi0JMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhiMDE3LCAweDExMDAsIDB4MDE1ZSwgMHgwMGVlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwOWUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsIDB4MDI2MCwgMHg3MDM0LCAweDkwODYsCi0JMHgwMDE0LCAweDExYTgsIDB4NzAzOCwgMHg5MDg2LCAweDA4MDAsIDB4MTE4OCwgMHg3MDNjLCAweGQwZWMsCi0JMHgwMTYwLCAweDkwODQsIDB4MGYwMCwgMHg5MDg2LCAweDAxMDAsIDB4MTEzOCwgMHg3MDU0LCAweGQwYTQsCi0JMHgxMTEwLCAweGQwYWMsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZTYsIDB4MDA5NiwgMHgwMGM2LCAweDAwNzYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsCi0JMHgwMDA2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMjksIDB4MTljYiwgMHgyNTJjLCAweDIwMjEsCi0JMHgxOWQxLCAweDI0MjQsIDB4MjA2MSwgMHgxY2QwLCAweDIwNzEsIDB4MTgwMCwgMHg3MjUwLCAweDcwNzAsCi0JMHg5MjAyLCAweDFhMDQsIDB4YWZlZiwgMHgwODBjLCAweGQ4NjgsIDB4MDkwNCwgMHhhZmU4LCAweDY3MjAsCi0JMHg5Nzg2LCAweDAwMDcsIDB4MDkwNCwgMHhhZmU4LCAweDI1MDAsIDB4OWMwNiwgMHgwOTA0LCAweGFmZTgsCi0JMHgyNDAwLCAweDljMDYsIDB4MDVlOCwgMHgzZTA4LCAweDkxODYsIDB4MDAwMiwgMHgxMTQ4LCAweDYwMTAsCi0JMHg5MDA1LCAweDAxMzAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDE1ODAsCi0JMHgwMGM2LCAweDYwMDAsIDB4OTA4NiwgMHgwMDA0LCAweDExMTAsIDB4MDgwYywgMHgxOTJjLCAweDk3ODYsCi0JMHgwMDBhLCAweDAxNDgsIDB4MDgwYywgMHhiZjU2LCAweDExMzAsIDB4MDBjZSwgMHgwODBjLCAweGE5YTcsCi0JMHgwODBjLCAweGEwMWMsIDB4MDBlOCwgMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHhiZDRlLCAweDAxYTgsCi0JMHg5Nzg2LCAweDAwMDMsIDB4MTUzMCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YywgMHhkMGNjLCAweDAxMzAsCi0JMHgwMDk2LCAweGE4NzgsIDB4MjA0OCwgMHgwODBjLCAweDBmZTksIDB4MDA5ZSwgMHhhYjdhLCAweGE4NzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NmExNSwgMHgwODBjLCAweGJmMzksIDB4MDgwYywgMHhhMDFjLCAweDAwY2UsCi0JMHg5Y2UwLCAweDAwMTgsIDB4NzA2NCwgMHg5YzAyLCAweDEyMTAsIDB4MDgwNCwgMHhhZjk2LCAweDAxMmUsCi0JMHgwMDBlLCAweDAwMmUsIDB4MDA0ZSwgMHgwMDVlLCAweDAwN2UsIDB4MDBjZSwgMHgwMDllLCAweDAwZWUsCi0JMHgwMDA1LCAweDk3ODYsIDB4MDAwNiwgMHgxMTE4LCAweDA4MGMsIDB4ZDdlMiwgMHgwYzMwLCAweDk3ODYsCi0JMHgwMDBhLCAweDA5ZTAsIDB4MDg4MCwgMHgyMjBjLCAweDIzMDQsIDB4OTEwNiwgMHgxMTMwLCAweDgyMTAsCi0JMHg4MzE4LCAweDFmMDQsIDB4YjAwMywgMHg5MDA2LCAweDAwMDUsIDB4MjMwNCwgMHg5MTAyLCAweDAyMTgsCi0JMHgyMDAxLCAweDAwMDEsIDB4MDAwOCwgMHg5MDA2LCAweDkxOGQsIDB4MDAwMSwgMHgwMDA1LCAweDAxMzYsCi0JMHgwMWM2LCAweDAwMTYsIDB4ODkwNiwgMHg4MDA2LCAweDgwMDcsIDB4OTA4YywgMHgwMDNmLCAweDIxZTAsCi0JMHg5MDg0LCAweGZmYzAsIDB4OTMwMCwgMHgyMDk4LCAweDM1MTgsIDB4MjBhOSwgMHgwMDAxLCAweDIyMGMsCi0JMHg0MDAyLCAweDkxMGUsIDB4MTE0MCwgMHg4MjEwLCAweDgzMTksIDB4MWRjOCwgMHg5MDA2LCAweDAwMWUsCi0JMHgwMWNlLCAweDAxM2UsIDB4MDAwNSwgMHgyMjBjLCAweDkxMDIsIDB4MDIxOCwgMHgyMDAxLCAweDAwMDEsCi0JMHgwMDEwLCAweDIwMDEsIDB4MDAwMCwgMHg5MThkLCAweDAwMDEsIDB4MDAxZSwgMHgwMWNlLCAweDAxM2UsCi0JMHgwMDA1LCAweDYwMDQsIDB4OTA4YSwgMHgwMDUzLCAweDFhMGMsIDB4MGRmNiwgMHgwODBjLCAweGJmNDUsCi0JMHgwMTIwLCAweDA4MGMsIDB4YmY1NiwgMHgwMTY4LCAweDAwMjgsIDB4MDgwYywgMHgzMGJlLCAweDA4MGMsCi0JMHhiZjU2LCAweDAxMzgsIDB4MDgwYywgMHg4YTgzLCAweDA4MGMsIDB4OWZlYSwgMHgwODBjLCAweDhiOGYsCi0JMHgwMDA1LCAweDA4MGMsIDB4YTlhNywgMHgwY2IwLCAweDkxODIsIDB4MDA1NCwgMHgxMjIwLCAweDkxODIsCi0JMHgwMDQwLCAweDAyMDgsIDB4MDAwYSwgMHgwMDA1LCAweGIwNzgsIDB4YjA3OCwgMHhiMDc4LCAweGIwNzgsCi0JMHhiMDc4LCAweGIwNzgsIDB4YjA3OCwgMHhiMDc4LCAweGIwNzgsIDB4YjA3OCwgMHhiMDc4LCAweGIwN2EsCi0JMHhiMDdhLCAweGIwN2EsIDB4YjA3YSwgMHhiMDc4LCAweGIwNzgsIDB4YjA3OCwgMHhiMDdhLCAweGIwNzgsCi0JMHgwODBjLCAweDBkZjYsIDB4NjAwYiwgMHhmZmZmLCAweDYwMDMsIDB4MDAwMSwgMHg2MTA2LCAweDA4MGMsCi0JMHg4NWY4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OGI4ZiwgMHgwMTJlLCAweDAwMDUsCi0JMHg5MTg2LCAweDAwMTMsIDB4MTEyOCwgMHg2MDA0LCAweDkwODIsIDB4MDA0MCwgMHgwODA0LCAweGIxMTIsCi0JMHg5MTg2LCAweDAwMjcsIDB4MTUyMCwgMHgwODBjLCAweDhhODMsIDB4MDgwYywgMHgzMDk1LCAweDA4MGMsCi0JMHhjNDZlLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwMTk4LCAweDA4MGMsCi0JMHhiZjU2LCAweDExMTgsIDB4MDgwYywgMHhhOWE3LCAweDAwNjgsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsCi0JMHgwMDI5LCAweGE4NzcsIDB4MDAwMCwgMHhhOTdjLCAweGMxYzUsIDB4YTk3ZSwgMHgwODBjLCAweDZhMjIsCi0JMHgwODBjLCAweGJmMzksIDB4MDA5ZSwgMHgwODBjLCAweDlmZWEsIDB4MDgwNCwgMHg4YjhmLCAweDkxODYsCi0JMHgwMDE0LCAweDExMjAsIDB4NjAwNCwgMHg5MDgyLCAweDAwNDAsIDB4MDBiOCwgMHg5MTg2LCAweDAwNDYsCi0JMHgwMTUwLCAweDkxODYsIDB4MDA0NSwgMHgwMTM4LCAweDkxODYsIDB4MDA1MywgMHgwMTIwLCAweDkxODYsCi0JMHgwMDQ4LCAweDE5MGMsIDB4MGRmNiwgMHgwODBjLCAweGM0N2YsIDB4MDEzMCwgMHg2MDAwLCAweDkwODYsCi0JMHgwMDAyLCAweDExMTAsIDB4MDgwNCwgMHhiMTUwLCAweDAwMDUsIDB4MDAwMiwgMHhiMGVjLCAweGIwZWEsCi0JMHhiMGVhLCAweGIwZWEsIDB4YjBlYSwgMHhiMGVhLCAweGIwZWEsIDB4YjBlYSwgMHhiMGVhLCAweGIwZWEsCi0JMHhiMGVhLCAweGIxMDcsIDB4YjEwNywgMHhiMTA3LCAweGIxMDcsIDB4YjBlYSwgMHhiMTA3LCAweGIwZWEsCi0JMHhiMTA3LCAweGIwZWEsIDB4MDgwYywgMHgwZGY2LCAweDA4MGMsIDB4OGE4MywgMHgwMDk2LCAweDYxMTQsCi0JMHgyMTQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwMTY4LCAweGE4NjcsIDB4MDEwMywgMHhhODdiLCAweDAwMDYsCi0JMHhhODc3LCAweDAwMDAsIDB4YTg4MCwgMHhjMGVjLCAweGE4ODIsIDB4MDgwYywgMHg2YTIyLCAweDA4MGMsCi0JMHhiZjM5LCAweDAwOWUsIDB4MDgwYywgMHg5ZmVhLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDA4MGMsCi0JMHg4YTgzLCAweDA4MGMsIDB4YmY1NiwgMHgwOTBjLCAweGE5YTcsIDB4MDgwYywgMHg5ZmVhLCAweDA4MGMsCi0JMHg4YjhmLCAweDAwMDUsIDB4MDAwMiwgMHhiMTI5LCAweGIxMjcsIDB4YjEyNywgMHhiMTI3LCAweGIxMjcsCi0JMHhiMTI3LCAweGIxMjcsIDB4YjEyNywgMHhiMTI3LCAweGIxMjcsIDB4YjEyNywgMHhiMTQwLCAweGIxNDAsCi0JMHhiMTQwLCAweGIxNDAsIDB4YjEyNywgMHhiMTRhLCAweGIxMjcsIDB4YjE0MCwgMHhiMTI3LCAweDA4MGMsCi0JMHgwZGY2LCAweDAwOTYsIDB4MDgwYywgMHg4YTgzLCAweDYwMTQsIDB4MjA0OCwgMHgyMDAxLCAweDE5NjIsCi0JMHgyMDA0LCAweDYwNDIsIDB4YTk3YywgMHhkMWFjLCAweDAxNDAsIDB4NjAwMywgMHgwMDA0LCAweGE4N2MsCi0JMHg5MDg1LCAweDA0MDAsIDB4YTg3ZSwgMHgwMDllLCAweDAwMDUsIDB4NjAwMywgMHgwMDAyLCAweDBjYjgsCi0JMHgwODBjLCAweDhhODMsIDB4MDgwYywgMHhjNDcxLCAweDA4MGMsIDB4YzQ3NiwgMHg2MDAzLCAweDAwMGYsCi0JMHgwODA0LCAweDhiOGYsIDB4MDgwYywgMHg4YTgzLCAweDA4MGMsIDB4OWZlYSwgMHgwODA0LCAweDhiOGYsCi0JMHg5MTgyLCAweDAwNTQsIDB4MTIyMCwgMHg5MTgyLCAweDAwNDAsIDB4MDIwOCwgMHgwMDBhLCAweDAwMDUsCi0JMHhiMTZjLCAweGIxNmMsIDB4YjE2YywgMHhiMTZjLCAweGIxNmMsIDB4YjE2ZSwgMHhiMjRlLCAweGIxNmMsCi0JMHhiMjgyLCAweGIxNmMsIDB4YjE2YywgMHhiMTZjLCAweGIxNmMsIDB4YjE2YywgMHhiMTZjLCAweGIxNmMsCi0JMHhiMTZjLCAweGIxNmMsIDB4YjE2YywgMHhiMjgyLCAweDA4MGMsIDB4MGRmNiwgMHgwMGI2LCAweDAwOTYsCi0JMHg2MTE0LCAweDIxNDgsIDB4NzY0NCwgMHg5NmI0LCAweDBmZmYsIDB4ODZmZiwgMHgxNTI4LCAweDYwMTAsCi0JMHgyMDU4LCAweGI4MDAsIDB4ZDBiYywgMHgxOTA0LCAweGIyM2QsIDB4YTg3YiwgMHgwMDAwLCAweGE4NjcsCi0JMHgwMTAzLCAweGFlNzYsIDB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LCAweDkxMTUsCi0JMHgxOTBjLCAweGI0MWIsIDB4MDgwYywgMHg2ODNjLCAweDYyMTAsIDB4MjI1OCwgMHhiYTNjLCAweDgyZmYsCi0JMHgwMTEwLCAweDgyMTEsIDB4YmEzZSwgMHg3MDQ0LCAweGQwZTQsIDB4MTkwNCwgMHhiMjFlLCAweDA4MGMsCi0JMHg5ZmVhLCAweDAwOWUsIDB4MDBiZSwgMHgwMDA1LCAweDk2OGMsIDB4MGMwMCwgMHgwMTUwLCAweDYwMTAsCi0JMHgyMDU4LCAweGI4MDAsIDB4ZDBiYywgMHgxOTA0LCAweGIyMjIsIDB4NzM0OCwgMHhhYjkyLCAweDczNGMsCi0JMHhhYjhlLCAweDk2OGMsIDB4MDBmZiwgMHg5MTg2LCAweDAwMDIsIDB4MDUwOCwgMHg5MTg2LCAweDAwMjgsCi0JMHgxMTE4LCAweGE4N2IsIDB4MDAxYywgMHgwMGU4LCAweGQ2ZGMsIDB4MDFhMCwgMHhhODdiLCAweDAwMTUsCi0JMHhhODdjLCAweGQwYWMsIDB4MDE3MCwgMHhhOTM4LCAweGFhMzQsIDB4MjEwMCwgMHg5MjA1LCAweDAxNDgsCi0JMHg3MDQ4LCAweDkxMDYsIDB4MTExOCwgMHg3MDRjLCAweDkyMDYsIDB4MDExOCwgMHhhOTkyLCAweGFhOGUsCi0JMHhjNmRjLCAweDAwMzgsIDB4ZDZkNCwgMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDEwLCAweGE4N2IsCi0JMHgwMDAwLCAweGE4NjcsIDB4MDEwMywgMHhhZTc2LCAweDkwMWUsIDB4ZDZjNCwgMHgwMWQ4LCAweDk2ODYsCi0JMHgwMTAwLCAweDExMzAsIDB4NzA2NCwgMHg5MDA1LCAweDExMTgsIDB4YzZjNCwgMHgwODA0LCAweGIxNzUsCi0JMHg3MzVjLCAweGFiODYsIDB4ODNmZiwgMHgwMTcwLCAweDkzOGEsIDB4MDAwOSwgMHgwMjEwLCAweDIwMTksCi0JMHgwMDA4LCAweDAwMzYsIDB4MjMwOCwgMHgyMDE5LCAweDAwMTgsIDB4MjAxMSwgMHgwMDI1LCAweDA4MGMsCi0JMHhiOTE1LCAweDAwM2UsIDB4ZDZjYywgMHgwOTA0LCAweGIxOGEsIDB4NzE1NCwgMHhhOThhLCAweDgxZmYsCi0JMHgwOTA0LCAweGIxOGEsIDB4OTE5MiwgMHgwMDIxLCAweDEyNzgsIDB4ODMwNCwgMHg5MDk4LCAweDAwMTgsCi0JMHgyMDExLCAweDAwMjksIDB4MDgwYywgMHhiOTE1LCAweDIwMTEsIDB4MDIwNSwgMHgyMDEzLCAweDAwMDAsCi0JMHgwODBjLCAweGMzZmMsIDB4MDgwNCwgMHhiMThhLCAweGE4NjgsIDB4ZDBmYywgMHgwMTIwLCAweDIwMDksCi0JMHgwMDIwLCAweGE5OGEsIDB4MGM1MCwgMHgwMGE2LCAweDI5NTAsIDB4MDgwYywgMHhiOGI0LCAweDAwYWUsCi0JMHgwODBjLCAweGMzZmMsIDB4MDgwYywgMHhiOTA1LCAweDA4MDQsIDB4YjE4YywgMHgwODBjLCAweGMwNGUsCi0JMHgwODA0LCAweGIxOTksIDB4YTg3YywgMHhkMGFjLCAweDA5MDQsIDB4YjFhNSwgMHhhODgwLCAweGQwYmMsCi0JMHgxOTA0LCAweGIxYTUsIDB4OTY4NCwgMHgwNDAwLCAweDAxMzAsIDB4YTgzOCwgMHhhYjM0LCAweDkzMDUsCi0JMHgwOTA0LCAweGIxYTUsIDB4MDBiOCwgMHg3MzQ4LCAweGE4MzgsIDB4OTMwNiwgMHgxMTk4LCAweDczNGMsCi0JMHhhODM0LCAweDkzMWUsIDB4MDkwNCwgMHhiMWE1LCAweDAwNjgsIDB4YTg3YywgMHhkMGFjLCAweDA5MDQsCi0JMHhiMTdkLCAweGE4MzgsIDB4YTkzNCwgMHg5MTA1LCAweDA5MDQsIDB4YjE3ZCwgMHhhODgwLCAweGQwYmMsCi0JMHgxOTA0LCAweGIxN2QsIDB4MDgwYywgMHhjMDg4LCAweDA4MDQsIDB4YjE5OSwgMHgwMDk2LCAweDAwZjYsCi0JMHg2MDAzLCAweDAwMDMsIDB4NjAwNywgMHgwMDQzLCAweDIwNzksIDB4MDI2YywgMHg3YzA0LCAweDdiMDAsCi0JMHg3ZTBjLCAweDdkMDgsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsIDB4ZDBhYywgMHgwMTQwLCAweDYwMDMsCi0JMHgwMDAyLCAweDAwZmUsIDB4MDA5ZSwgMHgwMDA1LCAweDIxMzAsIDB4MjIyOCwgMHgwMDU4LCAweDI0MDAsCi0JMHhhOWFjLCAweDkxMGEsIDB4MjMwMCwgMHhhYWIwLCAweDkyMTMsIDB4MjYwMCwgMHg5MTAyLCAweDI1MDAsCi0JMHg5MjAzLCAweDBlOTAsIDB4YWMzNiwgMHhhYjNhLCAweGFlNDYsIDB4YWQ0YSwgMHgwMGZlLCAweDYwNDMsCi0JMHgwMDAwLCAweDJjMTAsIDB4MDgwYywgMHgxYTdlLCAweDA4MGMsIDB4ODY1ZCwgMHgwODBjLCAweDhjNmMsCi0JMHgwMDllLCAweDAwMDUsIDB4MDAwNSwgMHg5MTgyLCAweDAwNTQsIDB4MTIyMCwgMHg5MTgyLCAweDAwNDAsCi0JMHgwMjA4LCAweDAwMGEsIDB4MDAwNSwgMHhiMjlmLCAweGIyOWYsIDB4YjI5ZiwgMHhiMjlmLCAweGIyOWYsCi0JMHhiMmExLCAweGIzMzcsIDB4YjI5ZiwgMHhiMjlmLCAweGIzNGUsIDB4YjNkZSwgMHhiMjlmLCAweGIyOWYsCi0JMHhiMjlmLCAweGIyOWYsIDB4YjNmMywgMHhiMjlmLCAweGIyOWYsIDB4YjI5ZiwgMHhiMjlmLCAweDA4MGMsCi0JMHgwZGY2LCAweDAwNzYsIDB4MDBhNiwgMHgwMGU2LCAweDAwOTYsIDB4MjA3MSwgMHgwMjYwLCAweDYxMTQsCi0JMHgyMTUwLCAweDc2NDQsIDB4YjY3NiwgMHg5NmI0LCAweDBmZmYsIDB4Yjc3YywgMHhjN2U1LCAweGI3N2UsCi0JMHg2MjEwLCAweDAwYjYsIDB4MjI1OCwgMHhiYTNjLCAweDgyZmYsIDB4MDExMCwgMHg4MjExLCAweGJhM2UsCi0JMHgwMGJlLCAweDg2ZmYsIDB4MDkwNCwgMHhiMzMyLCAweDk2OTQsIDB4ZmYwMCwgMHg5Mjg0LCAweDBjMDAsCi0JMHgwMTIwLCAweDcwNDgsIDB4YjA5MiwgMHg3MDRjLCAweGIwOGUsIDB4OTI4NCwgMHgwMzAwLCAweDA5MDQsCi0JMHhiMzMyLCAweDA4MGMsIDB4MTAzNywgMHgwOTBjLCAweDBkZjYsIDB4MjkwMCwgMHhiMDdhLCAweGI3N2MsCi0JMHhjN2NkLCAweGI3N2UsIDB4YTg2NywgMHgwMTAzLCAweGIwNjgsIDB4YTg2YSwgMHhiMDZjLCAweGE4NmUsCi0JMHhiMDcwLCAweGE4NzIsIDB4YWU3NiwgMHg5NjhjLCAweDBjMDAsIDB4MDEyMCwgMHg3MzQ4LCAweGFiOTIsCi0JMHg3MzRjLCAweGFiOGUsIDB4OTY4YywgMHgwMGZmLCAweDkxODYsIDB4MDAwMiwgMHgwMTgwLCAweDkxODYsCi0JMHgwMDI4LCAweDExMTgsIDB4YTg3YiwgMHgwMDFjLCAweDAwNjAsIDB4ZDZkYywgMHgwMTE4LCAweGE4N2IsCi0JMHgwMDE1LCAweDAwMzgsIDB4ZDZkNCwgMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDEwLCAweGE4N2IsCi0JMHgwMDAwLCAweGFmN2UsIDB4YjA4MCwgMHhhODgyLCAweGIwODQsIDB4YTg4NiwgMHg5MDFlLCAweGQ2YzQsCi0JMHgwMTkwLCAweDczNWMsIDB4YWI4NiwgMHg4M2ZmLCAweDAxNzAsIDB4OTM4YSwgMHgwMDA5LCAweDAyMTAsCi0JMHgyMDE5LCAweDAwMDgsIDB4MDAzNiwgMHgyMzA4LCAweDIwMTksIDB4MDAxOCwgMHgyMDExLCAweDAwMjUsCi0JMHgwODBjLCAweGI5MTUsIDB4MDAzZSwgMHhkNmNjLCAweDAxZTgsIDB4NzE1NCwgMHhhOThhLCAweDgxZmYsCi0JMHgwMWM4LCAweDkxOTIsIDB4MDAyMSwgMHgxMjYwLCAweDgzMDQsIDB4OTA5OCwgMHgwMDE4LCAweDIwMTEsCi0JMHgwMDI5LCAweDA4MGMsIDB4YjkxNSwgMHgyMDExLCAweDAyMDUsIDB4MjAxMywgMHgwMDAwLCAweDAwNTAsCi0JMHhiMDY4LCAweGQwZmMsIDB4MDEyMCwgMHgyMDA5LCAweDAwMjAsIDB4YTk4YSwgMHgwYzY4LCAweDI5NTAsCi0JMHgwODBjLCAweGI4YjQsIDB4MDA5ZSwgMHgwMGVlLCAweDAwYWUsIDB4MDA3ZSwgMHgwMDA1LCAweDAwZjYsCi0JMHgwMGE2LCAweDYwMDMsIDB4MDAwMywgMHgyMDc5LCAweDAyNmMsIDB4N2MwNCwgMHg3YjAwLCAweDdlMGMsCi0JMHg3ZDA4LCAweDYwMTQsIDB4MjA1MCwgMHhiNDM2LCAweGIzM2EsIDB4YjY0NiwgMHhiNTRhLCAweDAwYWUsCi0JMHgwMGZlLCAweDJjMTAsIDB4MDgwYywgMHgxYTdlLCAweDA4MDQsIDB4OTVlNywgMHg2MDAzLCAweDAwMDIsCi0JMHg2MDA0LCAweDkwODYsIDB4MDA0MCwgMHgxMWM4LCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2MsCi0JMHhkMGFjLCAweDAxNjAsIDB4NjAxYywgMHhkMDg0LCAweDExMzAsIDB4MDBmNiwgMHgyYzAwLCAweDIwNzgsCi0JMHgwODBjLCAweDE2NTEsIDB4MDBmZSwgMHg2MDAzLCAweDAwMDQsIDB4MDAxMCwgMHg2MDAzLCAweDAwMDIsCi0JMHgwMDllLCAweDA4MGMsIDB4OGE4MywgMHgwODBjLCAweDhiOGYsIDB4MDA5NiwgMHgyMDAxLCAweDE5NjIsCi0JMHgyMDA0LCAweDYwNDIsIDB4MDgwYywgMHg4YjNmLCAweDA4MGMsIDB4OGM2YywgMHg2MTE0LCAweDIxNDgsCi0JMHhhOTdjLCAweGQxZTQsIDB4MDkwNCwgMHhiM2Q5LCAweGQxY2MsIDB4MDVjOCwgMHhhOTc4LCAweGE4NjgsCi0JMHhkMGZjLCAweDA1NDAsIDB4MDAxNiwgMHhhODdjLCAweDAwMDYsIDB4YTg4MCwgMHgwMDA2LCAweGE4NjAsCi0JMHgyMGU4LCAweGE4NWMsIDB4OTA4MCwgMHgwMDE5LCAweDIwYTAsIDB4ODEwZSwgMHg4MTBlLCAweDgxMGYsCi0JMHg5MTg0LCAweDAwM2YsIDB4MjBlMCwgMHg5MTg0LCAweGZmYzAsIDB4OTA4MCwgMHgwMDE5LCAweDIwOTgsCi0JMHgwMTU2LCAweDIwYTksIDB4MDAyMCwgMHg0MDAzLCAweDAxNWUsIDB4MDAwZSwgMHhhODgyLCAweDAwMGUsCi0JMHhjMGNjLCAweGE4N2UsIDB4MDAxZSwgMHhhODc0LCAweDAwMDYsIDB4MjE0OCwgMHgwODBjLCAweDBmZTksCi0JMHgwMDFlLCAweDA0NTgsIDB4MDAxNiwgMHgwODBjLCAweDBmZTksIDB4MDA5ZSwgMHhhODdjLCAweGMwY2MsCi0JMHhhODdlLCAweGE5NzQsIDB4MDAxNiwgMHgwODBjLCAweGI5MDUsIDB4MDAxZSwgMHgwMGYwLCAweGE4NjcsCi0JMHgwMTAzLCAweGE5NzQsIDB4OTE4NCwgMHgwMGZmLCAweDkwYjYsIDB4MDAwMiwgMHgwMTgwLCAweDkwODYsCi0JMHgwMDI4LCAweDExMTgsIDB4YTg3YiwgMHgwMDFjLCAweDAwNjAsIDB4ZDFkYywgMHgwMTE4LCAweGE4N2IsCi0JMHgwMDE1LCAweDAwMzgsIDB4ZDFkNCwgMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDEwLCAweGE4N2IsCi0JMHgwMDAwLCAweDAwMTYsIDB4MDgwYywgMHg2ODNjLCAweDAwMWUsIDB4ZDFlNCwgMHgxMTIwLCAweDA4MGMsCi0JMHg5ZmVhLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweGMwNGUsIDB4MGNkOCwgMHg2MDA0LCAweDkwODYsCi0JMHgwMDQwLCAweDExMjAsIDB4MDgwYywgMHg4YTgzLCAweDA4MGMsIDB4OGI4ZiwgMHgyMDE5LCAweDAwMDEsCi0JMHgwODBjLCAweDk4YjEsIDB4NjAwMywgMHgwMDAyLCAweDA4MGMsIDB4YzQ3NiwgMHgwODBjLCAweDhiM2YsCi0JMHgwODBjLCAweDhjNmMsIDB4MDAwNSwgMHg2MDA0LCAweDkwODYsIDB4MDA0MCwgMHgxMTIwLCAweDA4MGMsCi0JMHg4YTgzLCAweDA4MGMsIDB4OGI4ZiwgMHgyMDE5LCAweDAwMDEsIDB4MDgwYywgMHg5OGIxLCAweDA4MGMsCi0JMHg4YjNmLCAweDA4MGMsIDB4MzA5NSwgMHgwODBjLCAweGM0NmUsIDB4MDA5NiwgMHg2MTE0LCAweDIxNDgsCi0JMHgwODBjLCAweGJkNGUsIDB4MDE1MCwgMHhhODY3LCAweDAxMDMsIDB4YTg3YiwgMHgwMDI5LCAweGE4NzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NmEyMiwgMHgwODBjLCAweGJmMzksIDB4MDA5ZSwgMHgwODBjLCAweDlmZWEsCi0JMHgwODBjLCAweDhjNmMsIDB4MDAwNSwgMHhhODdiLCAweDAwMTUsIDB4ZDFmYywgMHgwMTgwLCAweGE4N2IsCi0JMHgwMDA3LCAweDgwMDIsIDB4ODAwMCwgMHg4MTBhLCAweDkxODksIDB4MDAwMCwgMHgwMDA2LCAweDAwMTYsCi0JMHgyMDA5LCAweDFhNTUsIDB4MjEwNCwgMHg4MDAwLCAweDIwMGEsIDB4MDAxZSwgMHgwMDBlLCAweGE5OTIsCi0JMHhhODhlLCAweDAwMDUsIDB4OTE4MiwgMHgwMDU0LCAweDEyMjAsIDB4OTE4MiwgMHgwMDQwLCAweDAyMDgsCi0JMHgwMDBhLCAweDAwMDUsIDB4YjQ0ZSwgMHhiNDRlLCAweGI0NGUsIDB4YjQ0ZSwgMHhiNDRlLCAweGI0NTAsCi0JMHhiNDRlLCAweGI0NGUsIDB4YjRmNiwgMHhiNDRlLCAweGI0NGUsIDB4YjQ0ZSwgMHhiNDRlLCAweGI0NGUsCi0JMHhiNDRlLCAweGI0NGUsIDB4YjQ0ZSwgMHhiNDRlLCAweGI0NGUsIDB4YjYyOCwgMHgwODBjLCAweDBkZjYsCi0JMHgwMDc2LCAweDAwYTYsIDB4MDBlNiwgMHgwMDk2LCAweDIwNzEsIDB4MDI2MCwgMHg2MTE0LCAweDIxNTAsCi0JMHg3NjQ0LCAweGI2NzYsIDB4OTZiNCwgMHgwZmZmLCAweGI3N2MsIDB4YzdlNSwgMHhiNzdlLCAweDYyMTAsCi0JMHgwMGI2LCAweDIyNTgsIDB4YmEzYywgMHg4MmZmLCAweDAxMTAsIDB4ODIxMSwgMHhiYTNlLCAweDAwYmUsCi0JMHg4NmZmLCAweDA5MDQsIDB4YjRlZiwgMHg5Njk0LCAweGZmMDAsIDB4OTI4NCwgMHgwYzAwLCAweDAxMjAsCi0JMHg3MDQ4LCAweGIwOTIsIDB4NzA0YywgMHhiMDhlLCAweDkyODQsIDB4MDMwMCwgMHgwOTA0LCAweGI0ZWYsCi0JMHg5Njg2LCAweDAxMDAsIDB4MTEzMCwgMHg3MDY0LCAweDkwMDUsIDB4MTExOCwgMHhjNmM0LCAweGI2NzYsCi0JMHgwYzM4LCAweDA4MGMsIDB4MTAzNywgMHgwOTBjLCAweDBkZjYsIDB4MjkwMCwgMHhiMDdhLCAweGI3N2MsCi0JMHg5N2JkLCAweDAyMDAsIDB4Yjc3ZSwgMHhhODY3LCAweDAxMDMsIDB4YjA2OCwgMHhhODZhLCAweGIwNmMsCi0JMHhhODZlLCAweGIwNzAsIDB4YTg3MiwgMHg3MDQ0LCAweDkwODQsIDB4ZjAwMCwgMHg5NjM1LCAweGFlNzYsCi0JMHg5NjhjLCAweDBjMDAsIDB4MDEyMCwgMHg3MzQ4LCAweGFiOTIsIDB4NzM0YywgMHhhYjhlLCAweDk2OGMsCi0JMHgwMGZmLCAweDkxODYsIDB4MDAwMiwgMHgwMTgwLCAweDkxODYsIDB4MDAyOCwgMHgxMTE4LCAweGE4N2IsCi0JMHgwMDFjLCAweDAwNjAsIDB4ZDZkYywgMHgwMTE4LCAweGE4N2IsIDB4MDAxNSwgMHgwMDM4LCAweGQ2ZDQsCi0JMHgwMTE4LCAweGE4N2IsIDB4MDAwNywgMHgwMDEwLCAweGE4N2IsIDB4MDAwMCwgMHhhZjdlLCAweGIwODAsCi0JMHhhODgyLCAweGIwODQsIDB4YTg4NiwgMHg5MDFlLCAweGQ2YzQsIDB4MDE5MCwgMHg3MzVjLCAweGFiODYsCi0JMHg4M2ZmLCAweDAxNzAsIDB4OTM4YSwgMHgwMDA5LCAweDAyMTAsIDB4MjAxOSwgMHgwMDA4LCAweDAwMzYsCi0JMHgyMzA4LCAweDIwMTksIDB4MDAxOCwgMHgyMDExLCAweDAwMjUsIDB4MDgwYywgMHhiOTE1LCAweDAwM2UsCi0JMHhkNmNjLCAweDAxZTgsIDB4NzE1NCwgMHhhOThhLCAweDgxZmYsIDB4MDFjOCwgMHg5MTkyLCAweDAwMjEsCi0JMHgxMjYwLCAweDgzMDQsIDB4OTA5OCwgMHgwMDE4LCAweDIwMTEsIDB4MDAyOSwgMHgwODBjLCAweGI5MTUsCi0JMHgyMDExLCAweDAyMDUsIDB4MjAxMywgMHgwMDAwLCAweDAwNTAsIDB4YjA2OCwgMHhkMGZjLCAweDAxMjAsCi0JMHgyMDA5LCAweDAwMjAsIDB4YTk4YSwgMHgwYzY4LCAweDI5NTAsIDB4MDgwYywgMHhiOGI0LCAweDA4MGMsCi0JMHgxOGY4LCAweDAwOWUsIDB4MDBlZSwgMHgwMGFlLCAweDAwN2UsIDB4MDAwNSwgMHgyMDAxLCAweDE5NjIsCi0JMHgyMDA0LCAweDYwNDIsIDB4MDA5NiwgMHg2MTE0LCAweDIxNDgsIDB4YTgzYywgMHhhOTQwLCAweDkxMDUsCi0JMHgxMTE4LCAweGE4N2MsIDB4YzBkYywgMHhhODdlLCAweDYwMDMsIDB4MDAwMiwgMHhhOTdjLCAweGQxZTQsCi0JMHgwOTA0LCAweGI2MjMsIDB4NjA0MywgMHgwMDAwLCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsCi0JMHgwMGJlLCAweGQwYmMsIDB4MTUwMCwgMHhkMWNjLCAweDA5MDQsIDB4YjVmMiwgMHhhOTc4LCAweGE4NjgsCi0JMHhkMGZjLCAweDA5MDQsIDB4YjViMywgMHgwMDE2LCAweGE4N2MsIDB4MDAwNiwgMHhhODgwLCAweDAwMDYsCi0JMHgwMGE2LCAweDIxNTAsIDB4YjE3NCwgMHg5MTg0LCAweDAwZmYsIDB4OTBiNiwgMHgwMDAyLCAweDA5MDQsCi0JMHhiNTgwLCAweDkwODYsIDB4MDAyOCwgMHgxOTA0LCAweGI1NmMsIDB4YTg3YiwgMHgwMDFjLCAweGIwN2IsCi0JMHgwMDFjLCAweDA4MDQsIDB4YjU4OCwgMHg2MDI0LCAweGQwZjQsIDB4MTFkMCwgMHhhODM4LCAweGFhMzQsCi0JMHg5MjA1LCAweDA5YzgsIDB4YTgzOCwgMHhhYTkwLCAweDkyMDYsIDB4MTEyMCwgMHhhODhjLCAweGFhMzQsCi0JMHg5MjA2LCAweDA5ODgsIDB4NjAyNCwgMHhkMGQ0LCAweDExNDgsIDB4YTlhYywgMHhhODM0LCAweDkxMDIsCi0JMHg2MDNhLCAweGE5YjAsIDB4YTgzOCwgMHg5MTAzLCAweDYwM2UsIDB4NjAyNCwgMHhjMGY1LCAweDYwMjYsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODNjLCAweDgwMDAsIDB4YjgzZSwgMHgwMGJlLCAweDkwMDYsCi0JMHhhODc2LCAweGE4OTIsIDB4YTg4ZSwgMHhhODdjLCAweGMwZTQsIDB4YTg3ZSwgMHhkMGNjLCAweDAxNDAsCi0JMHhjMGNjLCAweGE4N2UsIDB4MDA5NiwgMHhhODc4LCAweDIwNDgsIDB4MDgwYywgMHgwZmU5LCAweDAwOWUsCi0JMHgwODBjLCAweGMwODgsIDB4MDgwNCwgMHhiNjIzLCAweGQxZGMsIDB4MDE1OCwgMHhhODdiLCAweDAwMTUsCi0JMHhiMDdiLCAweDAwMTUsIDB4MDgwYywgMHhjMzFjLCAweDAxMTgsIDB4YjE3NCwgMHhjMWRjLCAweGIxNzYsCi0JMHgwMDc4LCAweGQxZDQsIDB4MDEyOCwgMHhhODdiLCAweDAwMDcsIDB4YjA3YiwgMHgwMDA3LCAweDAwNDAsCi0JMHhhODdjLCAweGQwYWMsIDB4MDEyOCwgMHhhODM0LCAweGE5MzgsIDB4OTExNSwgMHgxOTBjLCAweGI0MWIsCi0JMHhhODdjLCAweGIwN2UsIDB4YTg5MCwgMHhiMDkyLCAweGE4OGMsIDB4YjA4ZSwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAxOSwgMHgyMGEwLCAweDIwYTksIDB4MDAyMCwgMHg4YTA2LCAweDgwMDYsCi0JMHg4MDA3LCAweDkwOTQsIDB4MDAzZiwgMHgyMmUwLCAweDkwODQsIDB4ZmZjMCwgMHg5MDgwLCAweDAwMTksCi0JMHgyMDk4LCAweDQwMDMsIDB4MDBhZSwgMHgwMDBlLCAweGE4ODIsIDB4MDAwZSwgMHhjMGNjLCAweGE4N2UsCi0JMHgwODBjLCAweGMzZmMsIDB4MDAxZSwgMHhhODc0LCAweDAwMDYsIDB4MjE0OCwgMHgwODBjLCAweDBmZTksCi0JMHgwMDFlLCAweDA4MDQsIDB4YjYxZiwgMHgwMDE2LCAweDAwYTYsIDB4MjE1MCwgMHhiMTc0LCAweDkxODQsCi0JMHgwMGZmLCAweDkwYjYsIDB4MDAwMiwgMHgwMWUwLCAweDkwODYsIDB4MDAyOCwgMHgxMTI4LCAweGE4N2IsCi0JMHgwMDFjLCAweGIwN2IsIDB4MDAxYywgMHgwMGUwLCAweGQxZGMsIDB4MDE1OCwgMHhhODdiLCAweDAwMTUsCi0JMHhiMDdiLCAweDAwMTUsIDB4MDgwYywgMHhjMzFjLCAweDAxMTgsIDB4YjE3NCwgMHhjMWRjLCAweGIxNzYsCi0JMHgwMDc4LCAweGQxZDQsIDB4MDEyOCwgMHhhODdiLCAweDAwMDcsIDB4YjA3YiwgMHgwMDA3LCAweDAwNDAsCi0JMHhhODdjLCAweGQwYWMsIDB4MDEyOCwgMHhhODM0LCAweGE5MzgsIDB4OTExNSwgMHgxOTBjLCAweGI0MWIsCi0JMHhhODkwLCAweGIwOTIsIDB4YTg4YywgMHhiMDhlLCAweGE4N2MsIDB4YjA3ZSwgMHgwMGFlLCAweDA4MGMsCi0JMHgwZmU5LCAweDAwOWUsIDB4MDgwYywgMHhjM2ZjLCAweGE5NzQsIDB4MDAxNiwgMHgwODBjLCAweGI5MDUsCi0JMHgwMDFlLCAweDA0NjgsIDB4YTg2NywgMHgwMTAzLCAweGE5NzQsIDB4OTE4NCwgMHgwMGZmLCAweDkwYjYsCi0JMHgwMDAyLCAweDAxYjAsIDB4OTA4NiwgMHgwMDI4LCAweDExMTgsIDB4YTg3YiwgMHgwMDFjLCAweDAwZDAsCi0JMHhkMWRjLCAweDAxNDgsIDB4YTg3YiwgMHgwMDE1LCAweDA4MGMsIDB4YzMxYywgMHgwMTE4LCAweGE5NzQsCi0JMHhjMWRjLCAweGE5NzYsIDB4MDA3OCwgMHhkMWQ0LCAweDAxMTgsIDB4YTg3YiwgMHgwMDA3LCAweDAwNTAsCi0JMHhhODdiLCAweDAwMDAsIDB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LCAweDkxMTUsCi0JMHgxOTBjLCAweGI0MWIsIDB4YTk3NCwgMHgwMDE2LCAweDA4MGMsIDB4NjgzYywgMHgwMDFlLCAweGQxZTQsCi0JMHgxMTIwLCAweDA4MGMsIDB4OWZlYSwgMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHhjMDRlLCAweDBjZDgsCi0JMHg2MTE0LCAweDAwOTYsIDB4MjE0OCwgMHhhOTdjLCAweGQxZTQsIDB4MTkwYywgMHgxOTE4LCAweDAwOWUsCi0JMHgwMDA1LCAweDA4MGMsIDB4OGE4MywgMHgwMDEwLCAweDA4MGMsIDB4OGIzZiwgMHgwODBjLCAweGJkNGUsCi0JMHgwMWYwLCAweDAwOTYsIDB4NjExNCwgMHgyMTQ4LCAweDA4MGMsIDB4YmY1NiwgMHgxMTE4LCAweDA4MGMsCi0JMHhhOWE3LCAweDAwYTAsIDB4YTg2NywgMHgwMTAzLCAweDIwMDksIDB4MTgwYywgMHgyMTBjLCAweGQxOGMsCi0JMHgxMWI4LCAweGQxODQsIDB4MTE5MCwgMHg2MTA4LCAweGE5N2EsIDB4OTE4ZSwgMHgwMDI5LCAweDExMTAsCi0JMHgwODBjLCAweGRhZTEsIDB4YTg3NywgMHgwMDAwLCAweDA4MGMsIDB4NmEyMiwgMHgwMDllLCAweDA4MGMsCi0JMHg5ZmVhLCAweDA4MGMsIDB4OGI4ZiwgMHgwODA0LCAweDhjNmMsIDB4YTg3YiwgMHgwMDA0LCAweDBjOTAsCi0JMHhhODdiLCAweDAwMDQsIDB4MGM3OCwgMHg5MTgyLCAweDAwNTQsIDB4MTIyMCwgMHg5MTgyLCAweDAwNDAsCi0JMHgwMjA4LCAweDAwMGEsIDB4MDAwNSwgMHhiNjdmLCAweGI2N2YsIDB4YjY3ZiwgMHhiNjdmLCAweGI2N2YsCi0JMHhiNjgxLCAweGI2N2YsIDB4YjY3ZiwgMHhiNjdmLCAweGI2N2YsIDB4YjY3ZiwgMHhiNjdmLCAweGI2N2YsCi0JMHhiNjdmLCAweGI2N2YsIDB4YjY3ZiwgMHhiNjdmLCAweGI2N2YsIDB4YjY3ZiwgMHhiNjdmLCAweDA4MGMsCi0JMHgwZGY2LCAweDA4MGMsIDB4NTRlMywgMHgwMWY4LCAweDYwMTQsIDB4NzE0NCwgMHg5MThjLCAweDBmZmYsCi0JMHg5MDE2LCAweGQxYzQsIDB4MDExOCwgMHg3MjY0LCAweDkyOTQsIDB4MDBmZiwgMHgwMDk2LCAweDkwNGQsCi0JMHgwMTg4LCAweGE4N2IsIDB4MDAwMCwgMHhhODY0LCAweDkwODYsIDB4MDEzOSwgMHgwMTI4LCAweGE4NjcsCi0JMHgwMTAzLCAweGE5NzYsIDB4YWE5NiwgMHgwMDMwLCAweGE4OTcsIDB4NDAwMCwgMHhhOTlhLCAweGFhOWUsCi0JMHgwODBjLCAweDZhMjIsIDB4MDA5ZSwgMHgwODA0LCAweDlmZWEsIDB4OTE4MiwgMHgwMDg1LCAweDAwMDIsCi0JMHhiNmI3LCAweGI2YjUsIDB4YjZiNSwgMHhiNmMzLCAweGI2YjUsIDB4YjZiNSwgMHhiNmI1LCAweGI2YjUsCi0JMHhiNmI1LCAweGI2YjUsIDB4YjZiNSwgMHhiNmI1LCAweGI2YjUsIDB4MDgwYywgMHgwZGY2LCAweDYwMDMsCi0JMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg4NWY4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg4YjhmLCAweDAxMmUsIDB4MDAwNSwgMHgwMDI2LCAweDAwNTYsIDB4MDBkNiwgMHgwMGU2LCAweDIwNzEsCi0JMHgwMjYwLCAweDcyMjQsIDB4NjIxNiwgMHg3MjIwLCAweDA4MGMsIDB4YmQzYywgMHgwMWY4LCAweDIyNjgsCi0JMHg2ODAwLCAweDkwODYsIDB4MDAwMCwgMHgwMWQwLCAweDYwMTAsIDB4NmQxMCwgMHg5NTJlLCAweDExYjAsCi0JMHgwMGM2LCAweDJkNjAsIDB4MDBkNiwgMHgwODBjLCAweGI5NzYsIDB4MDBkZSwgMHgwMGNlLCAweDAxNTgsCi0JMHg3MDJjLCAweGQwODQsIDB4MTExOCwgMHgwODBjLCAweGI5NDAsIDB4MDAxMCwgMHg2ODAzLCAweDAwMDIsCi0JMHg2MDA3LCAweDAwODYsIDB4MDAyOCwgMHgwODBjLCAweGI5NjIsIDB4MGQ5MCwgMHg2MDA3LCAweDAwODcsCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg4NWY4LCAweDA4MGMsIDB4OGI4ZiwgMHg3MjIwLCAweDA4MGMsCi0JMHhiZDNjLCAweDAxNzgsIDB4NjgxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsCi0JMHgwMTQwLCAweDY4MjQsIDB4ZDBlYywgMHgwMTI4LCAweDAwYzYsIDB4MmQ2MCwgMHgwODBjLCAweGMwODgsCi0JMHgwMGNlLCAweDAwZWUsIDB4MDBkZSwgMHgwMDVlLCAweDAwMmUsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsCi0JMHgxMTYwLCAweDYwMDQsIDB4OTA4YSwgMHgwMDg1LCAweDBhMGMsIDB4MGRmNiwgMHg5MDhhLCAweDAwOTIsCi0JMHgxYTBjLCAweDBkZjYsIDB4OTA4MiwgMHgwMDg1LCAweDAwZTIsIDB4OTE4NiwgMHgwMDI3LCAweDAxMjAsCi0JMHg5MTg2LCAweDAwMTQsIDB4MTkwYywgMHgwZGY2LCAweDA4MGMsIDB4OGE4MywgMHgwMDk2LCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwMTQwLCAweGE4NjcsIDB4MDEwMywgMHhhODc3LCAweDAwMDAsCi0JMHhhODdiLCAweDAwMjksIDB4MDgwYywgMHg2YTIyLCAweDAwOWUsIDB4MDgwYywgMHhhMDFjLCAweDA4MDQsCi0JMHg4YjhmLCAweGI3NDYsIDB4Yjc0OCwgMHhiNzQ4LCAweGI3NDYsIDB4Yjc0NiwgMHhiNzQ2LCAweGI3NDYsCi0JMHhiNzQ2LCAweGI3NDYsIDB4Yjc0NiwgMHhiNzQ2LCAweGI3NDYsIDB4Yjc0NiwgMHgwODBjLCAweDBkZjYsCi0JMHgwODBjLCAweDhhODMsIDB4MDgwYywgMHhhMDFjLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDkxODYsCi0JMHgwMDEzLCAweDExMjgsIDB4NjAwNCwgMHg5MDgyLCAweDAwODUsIDB4MjAwOCwgMHgwNGI4LCAweDkxODYsCi0JMHgwMDI3LCAweDExZjgsIDB4MDgwYywgMHg4YTgzLCAweDA4MGMsIDB4MzA5NSwgMHgwODBjLCAweGM0NmUsCi0JMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGJkNGUsIDB4MDE1MCwgMHhhODY3LCAweDAxMDMsCi0JMHhhODc3LCAweDAwMDAsIDB4YTg3YiwgMHgwMDI5LCAweDA4MGMsIDB4NmEyMiwgMHgwODBjLCAweGJmMzksCi0JMHgwMDllLCAweDA4MGMsIDB4OWZlYSwgMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHgwODBjLCAweGEwODMsCi0JMHgwY2UwLCAweDkxODYsIDB4MDAxNCwgMHgxZGQwLCAweDA4MGMsIDB4OGE4MywgMHgwMDk2LCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwZDYwLCAweGE4NjcsIDB4MDEwMywgMHhhODc3LCAweDAwMDAsCi0JMHhhODdiLCAweDAwMDYsIDB4YTg4MCwgMHhjMGVjLCAweGE4ODIsIDB4MDhmMCwgMHgwMDAyLCAweGI3OWUsCi0JMHhiNzljLCAweGI3OWMsIDB4Yjc5YywgMHhiNzljLCAweGI3OWMsIDB4YjdiNiwgMHhiNzljLCAweGI3OWMsCi0JMHhiNzljLCAweGI3OWMsIDB4Yjc5YywgMHhiNzljLCAweDA4MGMsIDB4MGRmNiwgMHgwODBjLCAweDhhODMsCi0JMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzOSwgMHgwMTE4LCAweDkxODYsCi0JMHgwMDM1LCAweDExMTgsIDB4MjAwMSwgMHgxOTYwLCAweDAwMTAsIDB4MjAwMSwgMHgxOTYxLCAweDIwMDQsCi0JMHg2MDFhLCAweDYwMDMsIDB4MDAwYywgMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHgwODBjLCAweDhhODMsCi0JMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzOSwgMHgwMTE4LCAweDkxODYsCi0JMHgwMDM1LCAweDExMTgsIDB4MjAwMSwgMHgxOTYwLCAweDAwMTAsIDB4MjAwMSwgMHgxOTYxLCAweDIwMDQsCi0JMHg2MDFhLCAweDYwMDMsIDB4MDAwZSwgMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHg5MTgyLCAweDAwOTIsCi0JMHgxMjIwLCAweDkxODIsIDB4MDA4NSwgMHgwMjA4LCAweDAwMTIsIDB4MDgwNCwgMHhhMDgzLCAweGI3ZTQsCi0JMHhiN2U0LCAweGI3ZTQsIDB4YjdlNCwgMHhiN2U2LCAweGI4MzMsIDB4YjdlNCwgMHhiN2U0LCAweGI3ZTQsCi0JMHhiN2U0LCAweGI3ZTQsIDB4YjdlNCwgMHhiN2U0LCAweDA4MGMsIDB4MGRmNiwgMHgwMDk2LCAweDYwMTAsCi0JMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwYmMsIDB4MDE2OCwgMHg2MDM0LCAweDkwOGMsCi0JMHhmZjAwLCAweDgxMGYsIDB4OTE4NiwgMHgwMDM5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDM1LCAweDExMTgsCi0JMHgwMDllLCAweDA4MDQsIDB4Yjg0NywgMHgwODBjLCAweGJkNGUsIDB4MTExOCwgMHgwODBjLCAweGJmMzksCi0JMHgwMDY4LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwZTQsIDB4MTExMCwgMHgwODBjLCAweGJmMzksCi0JMHhhODY3LCAweDAxMDMsIDB4MDgwYywgMHhjNDM5LCAweDA4MGMsIDB4NmEyMiwgMHgwMGQ2LCAweDJjNjgsCi0JMHgwODBjLCAweDlmOTQsIDB4MDFkMCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDFlLCAweDYwMGIsCi0JMHhmZmZmLCAweDIwMDksIDB4MDI2ZSwgMHgyMTBjLCAweDYxM2EsIDB4MjAwOSwgMHgwMjZmLCAweDIxMGMsCi0JMHg2MTNlLCAweDY5MTAsIDB4NjExMiwgMHgwODBjLCAweGMxY2EsIDB4Njk1NCwgMHg2MTU2LCAweDYwMjMsCi0JMHgwMDAxLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsIDB4MmQ2MCwgMHgwMGRlLCAweDA4MGMsCi0JMHg5ZmVhLCAweDAwOWUsIDB4MDAwNSwgMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsCi0JMHhkMGJjLCAweDA1YTAsIDB4NjAzNCwgMHg5MDhjLCAweGZmMDAsIDB4ODEwZiwgMHg5MTg2LCAweDAwMzUsCi0JMHgwMTMwLCAweDkxODYsIDB4MDAxZSwgMHgwMTE4LCAweDkxODYsIDB4MDAzOSwgMHgxNTM4LCAweDAwZDYsCi0JMHgyYzY4LCAweDA4MGMsIDB4YzNjZiwgMHgxMWYwLCAweDA4MGMsIDB4OWY5NCwgMHgwMWQ4LCAweDYxMDYsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAyMywgMHgwMDAxLCAweDY5MTAsIDB4NjExMiwgMHg2OTJjLCAweDYxMmUsCi0JMHg2OTMwLCAweDYxMzIsIDB4NjkzNCwgMHg5MThjLCAweDAwZmYsIDB4NjEzNiwgMHg2OTM4LCAweDYxM2EsCi0JMHg2OTNjLCAweDYxM2UsIDB4Njk1NCwgMHg2MTU2LCAweDA4MGMsIDB4YzFjYSwgMHgwODBjLCAweDg1ZjgsCi0JMHgwODBjLCAweDhiOGYsIDB4MmQ2MCwgMHgwMGRlLCAweDA4MDQsIDB4OWZlYSwgMHgwMDk2LCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwMWM4LCAweGE4NjcsIDB4MDEwMywgMHhhODgwLCAweGQwYjQsCi0JMHgwMTI4LCAweGMwZWMsIDB4YTg4MiwgMHhhODdiLCAweDAwMDYsIDB4MDA0OCwgMHhkMGJjLCAweDAxMTgsCi0JMHhhODdiLCAweDAwMDIsIDB4MDAyMCwgMHhhODdiLCAweDAwMDUsIDB4MDgwYywgMHhjMDRhLCAweGE4NzcsCi0JMHgwMDAwLCAweDA4MGMsIDB4NmEyMiwgMHgwODBjLCAweGJmMzksIDB4MDA5ZSwgMHgwODA0LCAweDlmZWEsCi0JMHgwMDE2LCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwMTQwLCAweGE4NjcsCi0JMHgwMTAzLCAweGE4N2IsIDB4MDAyOCwgMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHg2YTIyLCAweDAwOWUsCi0JMHgwMDFlLCAweDkxODYsIDB4MDAxMywgMHgwMTQ4LCAweDkxODYsIDB4MDAxNCwgMHgwMTMwLCAweDkxODYsCi0JMHgwMDI3LCAweDAxMTgsIDB4MDgwYywgMHhhMDgzLCAweDAwMzAsIDB4MDgwYywgMHg4YTgzLCAweDA4MGMsCi0JMHhhMDFjLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDAwNTYsIDB4MDA2NiwgMHgwMDk2LCAweDAwYTYsCi0JMHgyMDI5LCAweDAwMDEsIDB4OTE4MiwgMHgwMTAxLCAweDEyMDgsIDB4MDAxMCwgMHgyMDA5LCAweDAxMDAsCi0JMHgyMTMwLCAweDgzMDQsIDB4OTA5OCwgMHgwMDE4LCAweDIwMDksIDB4MDAyMCwgMHgyMDExLCAweDAwMjksCi0JMHgwODBjLCAweGI5MTUsIDB4OTZiMiwgMHgwMDIwLCAweGIwMDQsIDB4OTA0ZCwgMHgwMTEwLCAweDA4MGMsCi0JMHgwZmU5LCAweDA4MGMsIDB4MTAzNywgMHgwNTIwLCAweDg1MjgsIDB4YTg2NywgMHgwMTEwLCAweGE4NmIsCi0JMHgwMDAwLCAweDI5MjAsIDB4YjQwNiwgMHg5NjhhLCAweDAwM2QsIDB4MTIyOCwgMHgyNjA4LCAweDIwMTEsCi0JMHgwMDFiLCAweDA0OTksIDB4MDBhOCwgMHg5NmIyLCAweDAwM2MsIDB4MjAwOSwgMHgwMDNjLCAweDI5NTAsCi0JMHgyMDExLCAweDAwMWIsIDB4MDQ1MSwgMHgwYzI4LCAweDIwMDEsIDB4MDIwNSwgMHgyMDAzLCAweDAwMDAsCi0JMHgwMGFlLCAweDg1MmYsIDB4OTVhZCwgMHgwMDAzLCAweGI1NjYsIDB4OTVhYywgMHgwMDAwLCAweDAwNDgsCi0JMHgyMDAxLCAweDAyMDUsIDB4MjAwMywgMHgwMDAwLCAweDAwYWUsIDB4ODUyZiwgMHg5NWFkLCAweDAwMDMsCi0JMHhiNTY2LCAweDAwOWUsIDB4MDA2ZSwgMHgwMDVlLCAweDAwMDUsIDB4MDBhNiwgMHg4OWZmLCAweDAxNTgsCi0JMHhhODA0LCAweDkwNTUsIDB4MDEzMCwgMHhhODA3LCAweDAwMDAsIDB4MDgwYywgMHg2YTIyLCAweDJhNDgsCi0JMHgwY2I4LCAweDA4MGMsIDB4NmEyMiwgMHgwMGFlLCAweDAwMDUsIDB4MDBmNiwgMHgyMDc5LCAweDAyMDAsCi0JMHg3ODE0LCAweDkwODUsIDB4MDA4MCwgMHg3ODE2LCAweGQxODQsIDB4MDEwOCwgMHg4MTA4LCAweDgxMGMsCi0JMHgyMGE5LCAweDAwMDEsIDB4YTg2MCwgMHgyMGU4LCAweGE4NWMsIDB4OTIwMCwgMHgyMGEwLCAweDIwZTEsCi0JMHgwMDAwLCAweDIzMDAsIDB4OWUwMCwgMHgyMDk4LCAweDQwMDMsIDB4ODMxOCwgMHg5Mzg2LCAweDAwMjAsCi0JMHgxMTQ4LCAweDIwMTgsIDB4MjMwMCwgMHg5ZTAwLCAweDIwOTgsIDB4NzgxNCwgMHg4MDAwLCAweDkwODUsCi0JMHgwMDgwLCAweDc4MTYsIDB4ODEwOSwgMHgxZDgwLCAweDc4MTcsIDB4MDAwMCwgMHgwMGZlLCAweDAwMDUsCi0JMHg2OTIwLCAweDkxODYsIDB4MDAwMywgMHgwMTE4LCAweDkxODYsIDB4MDAwMiwgMHgxMWQwLCAweDAwYzYsCi0JMHgwMGQ2LCAweDAwZTYsIDB4MmQ2MCwgMHgwMDk2LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGJkNGUsCi0JMHgwMTUwLCAweDIwMDEsIDB4MDAwNiwgMHhhOTgwLCAweGMxZDUsIDB4MDgwYywgMHg2YzZiLCAweDA4MGMsCi0JMHg2YTE1LCAweDA4MGMsIDB4YmYzOSwgMHgwMDllLCAweDA4MGMsIDB4YTAxYywgMHgwMGVlLCAweDAwZGUsCi0JMHgwMGNlLCAweDAwMDUsIDB4MDBjNiwgMHg3MDJjLCAweGQwODQsIDB4MTE3MCwgMHg2MDA4LCAweDIwNjAsCi0JMHg2MDIwLCAweDkwODYsIDB4MDAwMiwgMHgxMTQwLCAweDYxMDQsIDB4OTE4NiwgMHgwMDg1LCAweDAxMTgsCi0JMHg5MTg2LCAweDAwOGIsIDB4MTEwOCwgMHg5MDA2LCAweDAwY2UsIDB4MDAwNSwgMHgwMDY2LCAweDAxMjYsCi0JMHgyMDkxLCAweDgwMDAsIDB4MjAzMSwgMHgwMDAxLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwODMsCi0JMHgwMTJlLCAweDAwNmUsIDB4MDAwNSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDY2LCAweDIwMzEsCi0JMHgwMDAwLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwMWIsIDB4MDA2ZSwgMHgwMTJlLCAweDAwMDUsCi0JMHhiOWIxLCAweGI5YjEsIDB4YjlhYywgMHhiOWQzLCAweGI5OWYsIDB4YjlhYywgMHhiOWQzLCAweGI5YWMsCi0JMHhiOWFjLCAweGI5OWYsIDB4YjlhYywgMHhiOWFjLCAweGI5YWMsIDB4Yjk5ZiwgMHhiOTlmLCAweDA4MGMsCi0JMHgwZGY2LCAweDAwMzYsIDB4MjAxOSwgMHgwMDEwLCAweDA4MGMsIDB4ZDM4ZiwgMHg2MDIzLCAweDAwMDYsCi0JMHg2MDAzLCAweDAwMDcsIDB4MDAzZSwgMHgwMDA1LCAweDkwMDYsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAwOTYsIDB4ODZmZiwgMHgxMWQ4LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGJkNGUsCi0JMHgwMWMwLCAweGE4NjQsIDB4OTA4NiwgMHgwMTM5LCAweDExMjgsIDB4YTg3YiwgMHgwMDA1LCAweGE4ODMsCi0JMHgwMDAwLCAweDAwMjgsIDB4OTAwZSwgMHgyMDAxLCAweDAwMDUsIDB4MDgwYywgMHg2YzZiLCAweDA4MGMsCi0JMHhjMDRhLCAweDA4MGMsIDB4NmExNSwgMHgwODBjLCAweGEwMWMsIDB4OTA4NSwgMHgwMDAxLCAweDAwOWUsCi0JMHgwMDA1LCAweDkwMDYsIDB4MGNlMCwgMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDBkZjYsCi0JMHgwMDAyLCAweGI5ZTksIDB4YmExOSwgMHhiOWViLCAweGJhM2EsIDB4YmExNCwgMHhiOWU5LCAweGI5YWMsCi0JMHhiOWIxLCAweGI5YjEsIDB4YjlhYywgMHhiOWFjLCAweGI5YWMsIDB4YjlhYywgMHhiOWFjLCAweGI5YWMsCi0JMHhiOWFjLCAweDA4MGMsIDB4MGRmNiwgMHg4NmZmLCAweDE1MjAsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDYsCi0JMHgwNTAwLCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwMTY4LCAweGE4N2MsCi0JMHhkMGNjLCAweDAxNDAsIDB4MDA5NiwgMHhjMGNjLCAweGE4N2UsIDB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsCi0JMHgwZmU5LCAweDAwOWUsIDB4MDgwYywgMHhjMDRhLCAweDAwOWUsIDB4MDgwYywgMHhjNDEzLCAweDYwMDcsCi0JMHgwMDg1LCAweDYwMDMsIDB4MDAwYiwgMHg2MDIzLCAweDAwMDIsIDB4MDgwYywgMHg4NWY4LCAweDA4MGMsCi0JMHg4YjhmLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwNjYsIDB4MDgwYywgMHgxOTJjLCAweDAwNmUsCi0JMHgwODkwLCAweDAwZTYsIDB4MjA3MSwgMHgxOWMyLCAweDcwMjQsIDB4OWMwNiwgMHgxMTIwLCAweDA4MGMsCi0JMHg5ODNiLCAweDAwZWUsIDB4MDg0MCwgMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHg5MDg2LCAweDAwMDYsCi0JMHgxMTUwLCAweDAwODYsIDB4MDA5NiwgMHgyMDQ5LCAweDAwMDEsIDB4MmM0MCwgMHgwODBjLCAweDk5NWYsCi0JMHgwMDllLCAweDAwOGUsIDB4MDAxMCwgMHgwODBjLCAweDk3MzgsIDB4MDBlZSwgMHgxOTA0LCAweGI5ZWIsCi0JMHgwODA0LCAweGI5YWMsIDB4MDAzNiwgMHgwMGU2LCAweDIwNzEsIDB4MTljMiwgMHg3MDNjLCAweDljMDYsCi0JMHgxMTM4LCAweDkwMWUsIDB4MDgwYywgMHg5OGIxLCAweDAwZWUsIDB4MDAzZSwgMHgwODA0LCAweGI5ZWIsCi0JMHgwODBjLCAweDlhOGYsIDB4MDBlZSwgMHgwMDNlLCAweDE5MDQsIDB4YjllYiwgMHgwODA0LCAweGI5YWMsCi0JMHgwMGM2LCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwMTMsIDB4MDBjZSwgMHgwMDA1LCAweGJhNmQsCi0JMHhiYjFkLCAweGJjODcsIDB4YmE3NywgMHhhMDFjLCAweGJhNmQsIDB4ZDM4MSwgMHhjNDdiLCAweGJiMWQsCi0JMHhiYTY2LCAweGJkMTMsIDB4YmE2NiwgMHhiYTY2LCAweGJhNjYsIDB4YmE2NiwgMHgwODBjLCAweDBkZjYsCi0JMHgwODBjLCAweGJmNTYsIDB4MTExMCwgMHgwODBjLCAweGE5YTcsIDB4MDAwNSwgMHgwODBjLCAweDhhODMsCi0JMHgwODBjLCAweDhiOGYsIDB4MDgwNCwgMHg5ZmVhLCAweDYwMWIsIDB4MDAwMSwgMHgwMDA1LCAweDA4MGMsCi0JMHhiZDRlLCAweDAxMzAsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsIDB4MmMwMCwgMHhhODk2LCAweDAwOWUsCi0JMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDBkZjYsIDB4MDAwMiwgMHhiYTk2LCAweGJhOTgsCi0JMHhiYWJjLCAweGJhZDAsIDB4YmFmNiwgMHhiYTk2LCAweGJhNmQsIDB4YmE2ZCwgMHhiYTZkLCAweGJhZDAsCi0JMHhiYWQwLCAweGJhOTYsIDB4YmE5NiwgMHhiYTk2LCAweGJhOTYsIDB4YmFkYSwgMHgwODBjLCAweDBkZjYsCi0JMHgwMGU2LCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4ODAsIDB4YzBiNSwgMHhhODgyLCAweDAwOWUsCi0JMHgyMDcxLCAweDE5YzIsIDB4NzAyNCwgMHg5YzA2LCAweDAxYTAsIDB4MDgwYywgMHg5NzM4LCAweDA4MGMsCi0JMHhjNDEzLCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDAyLCAweDIwMDEsCi0JMHgxOTYxLCAweDIwMDQsIDB4NjAxYSwgMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDAwZWUsCi0JMHgwMDA1LCAweDYwMWIsIDB4MDAwMSwgMHgwY2Q4LCAweDAwOTYsIDB4NjAxNCwgMHgyMDQ4LCAweGE4ODAsCi0JMHhjMGI1LCAweGE4ODIsIDB4MDA5ZSwgMHgwODBjLCAweGM0MTMsIDB4NjAwNywgMHgwMDg1LCAweDYwMDMsCi0JMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDAwMDUsCi0JMHgwMDk2LCAweDYwMWIsIDB4MDAwMSwgMHg2MDE0LCAweDIwNDgsIDB4YTg4MCwgMHhjMGI1LCAweGE4ODIsCi0JMHgwMDllLCAweDAwMDUsIDB4MDgwYywgMHg1NGUzLCAweDAxYjgsIDB4NjAxNCwgMHgwMDk2LCAweDkwNGQsCi0JMHgwMTkwLCAweGE4NjQsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsIDB4MDAwNiwgMHg5MDg2LCAweDAxMzksCi0JMHgxMTUwLCAweGE4NjcsIDB4MDEzOSwgMHhhODdiLCAweDAwMzAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsCi0JMHgwMDA0LCAweDA4MGMsIDB4NmEyMiwgMHgwMDllLCAweDA4MDQsIDB4OWZlYSwgMHg2MDE0LCAweDAwOTYsCi0JMHg5MDRkLCAweDAxZjAsIDB4YTk3YywgMHhkMWU0LCAweDAxZDgsIDB4MjAwMSwgMHgxODBmLCAweDIwMDQsCi0JMHhkMGM0LCAweDAxMTAsIDB4MDA5ZSwgMHgwMDA1LCAweGE4ODQsIDB4MDA5ZSwgMHg4MDAzLCAweDgwMGIsCi0JMHg4MTBiLCAweDkxMDgsIDB4NjExYSwgMHgwMGM2LCAweDA4MGMsIDB4MjE2NSwgMHgwMGNlLCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTEyMCwgMHgyMDA5LCAweDAwNDgsIDB4MDgwYywgMHhhMDY4LCAweDAwMDUsCi0JMHgwMDllLCAweDA4MGMsIDB4MTkyYywgMHgwODA0LCAweGJhYmMsIDB4NjAwMCwgMHg5MDhhLCAweDAwMTAsCi0JMHgxYTBjLCAweDBkZjYsIDB4MDAwYiwgMHgwMDA1LCAweGJiMzQsIDB4YmE3NCwgMHhiYjM2LCAweGJiMzQsCi0JMHhiYjM2LCAweGJiMzYsIDB4YmE2ZSwgMHhiYjM0LCAweGJhNjgsIDB4YmE2OCwgMHhiYjM0LCAweGJiMzQsCi0JMHhiYjM0LCAweGJiMzQsIDB4YmIzNCwgMHhiYjM0LCAweDA4MGMsIDB4MGRmNiwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4MDQsIDB4OTA4NCwgMHgwMGZmLCAweDAwYmUsIDB4OTA4YSwgMHgwMDBjLCAweDFhMGMsCi0JMHgwZGY2LCAweDAwYjYsIDB4MDAxMywgMHgwMGJlLCAweDAwMDUsIDB4YmI1MSwgMHhiYzFlLCAweGJiNTMsCi0JMHhiYjkzLCAweGJiNTMsIDB4YmI5MywgMHhiYjUzLCAweGJiNjEsIDB4YmI1MSwgMHhiYjkzLCAweGJiNTEsCi0JMHhiYjgyLCAweDA4MGMsIDB4MGRmNiwgMHg2MDA0LCAweDkwOGUsIDB4MDAxNiwgMHgwNWMwLCAweDkwOGUsCi0JMHgwMDA0LCAweDA1YTgsIDB4OTA4ZSwgMHgwMDAyLCAweDA1OTAsIDB4OTA4ZSwgMHgwMDUyLCAweDA5MDQsCi0JMHhiYzFhLCAweDYwMDQsIDB4MDgwYywgMHhiZjU2LCAweDA5MDQsIDB4YmMzNywgMHg5MDhlLCAweDAwMDQsCi0JMHgxMTEwLCAweDA4MGMsIDB4MzBiZSwgMHg5MDhlLCAweDAwMjEsIDB4MDkwNCwgMHhiYzNiLCAweDkwOGUsCi0JMHgwMDIyLCAweDA5MDQsIDB4YmM4MiwgMHg5MDhlLCAweDAwM2QsIDB4MDkwNCwgMHhiYzNiLCAweDkwOGUsCi0JMHgwMDM5LCAweDA5MDQsIDB4YmMzZiwgMHg5MDhlLCAweDAwMzUsIDB4MDkwNCwgMHhiYzNmLCAweDkwOGUsCi0JMHgwMDFlLCAweDAxNzgsIDB4OTA4ZSwgMHgwMDAxLCAweDExNDAsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDA2LCAweDAxMTAsIDB4MDgwYywgMHgzMDk1LCAweDA4MGMsCi0JMHhhOWE3LCAweDA4MDQsIDB4YTAxYywgMHgwMGM2LCAweDAwZDYsIDB4NjEwNCwgMHg5MTg2LCAweDAwMTYsCi0JMHgwOTA0LCAweGJjMGIsIDB4OTE4NiwgMHgwMDAyLCAweDE5MDQsIDB4YmJlMCwgMHgyMDAxLCAweDE4MzYsCi0JMHgyMDA0LCAweGQwOGMsIDB4MTFjOCwgMHgwODBjLCAweDcxN2UsIDB4MTFiMCwgMHgwODBjLCAweGM0NTksCi0JMHgwMTM4LCAweDA4MGMsIDB4NzFhMSwgMHgxMTIwLCAweDA4MGMsIDB4NzA3YywgMHgwODA0LCAweGJjNmIsCi0JMHgyMDAxLCAweDE5NTcsIDB4MjAwMywgMHgwMDAxLCAweDIwMDEsIDB4MTgwMCwgMHgyMDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDcwOWUsIDB4MDgwNCwgMHhiYzZiLCAweDYwMTAsIDB4MjA1OCwgMHgyMDAxLCAweDE4MzYsCi0JMHgyMDA0LCAweGQwYWMsIDB4MTkwNCwgMHhiYzZiLCAweGI4YTAsIDB4OTA4NCwgMHhmZjgwLCAweDE5MDQsCi0JMHhiYzZiLCAweGI4NDAsIDB4OTA4NCwgMHgwMGZmLCAweDkwMDUsIDB4MDE5MCwgMHg4MDAxLCAweGI4NDIsCi0JMHg2MDE3LCAweDAwMDAsIDB4NjAyMywgMHgwMDA3LCAweDYwMWIsIDB4MDM5OCwgMHg2MDQzLCAweDAwMDAsCi0JMHgwODBjLCAweDlmOTQsIDB4MDEyOCwgMHgyYjAwLCAweDYwMTIsIDB4NjAyMywgMHgwMDAxLCAweDA0NTgsCi0JMHgwMGRlLCAweDAwY2UsIDB4NjAwNCwgMHg5MDhlLCAweDAwMDIsIDB4MTFhMCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiOGEwLCAweDkwODYsIDB4MDA3ZSwgMHgxMTcwLCAweDIwMDksIDB4MTgzNiwgMHgyMTA0LCAweGMwODUsCi0JMHgyMDBhLCAweDAwZTYsIDB4MjA3MSwgMHgxODAwLCAweDA4MGMsIDB4NWRjMiwgMHgwMGVlLCAweDA4MGMsCi0JMHhhOWE3LCAweDAwMzAsIDB4MDgwYywgMHhhOWE3LCAweDA4MGMsIDB4MzA5NSwgMHgwODBjLCAweGM0NmUsCi0JMHgwMGU2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4MzBiZSwgMHgwMTJlLCAweDAwZWUsCi0JMHgwODBjLCAweGEwMWMsIDB4MDAwNSwgMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2MmY0LCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDAwZGUsCi0JMHgwMGNlLCAweDBjODAsIDB4MDgwYywgMHgzMGJlLCAweDA4MDQsIDB4YmI4ZiwgMHgwMGM2LCAweDAwZDYsCi0JMHg2MTA0LCAweDkxODYsIDB4MDAxNiwgMHgwZDM4LCAweDYwMTAsIDB4MjA1OCwgMHhiODQwLCAweDkwODQsCi0JMHgwMGZmLCAweDkwMDUsIDB4MDkwNCwgMHhiYmUwLCAweDgwMDEsIDB4Yjg0MiwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDAwZGUsIDB4MDBjZSwgMHgwODk4LCAweDA4MGMsCi0JMHhhOWE3LCAweDA4MDQsIDB4YmI5MSwgMHgwODBjLCAweGE5ZTMsIDB4MDgwNCwgMHhiYjkxLCAweDAwZDYsCi0JMHgyYzY4LCAweDYxMDQsIDB4MDgwYywgMHhjM2NmLCAweDAwZGUsIDB4MDExOCwgMHgwODBjLCAweDlmZWEsCi0JMHgwNDA4LCAweDYwMDQsIDB4ODAwNywgMHg2MTM0LCAweDkxOGMsIDB4MDBmZiwgMHg5MTA1LCAweDYwMzYsCi0JMHg2MDA3LCAweDAwODUsIDB4NjAwMywgMHgwMDBiLCAweDYwMjMsIDB4MDAwMiwgMHg2MDNjLCAweDYwMGEsCi0JMHgyMDAxLCAweDE5NjEsIDB4MjAwNCwgMHg2MDFhLCAweDYwMmMsIDB4MmMwOCwgMHgyMDYwLCAweDYwMjQsCi0JMHhkMGI0LCAweDAxMDgsIDB4YzA4NSwgMHhjMGI1LCAweDYwMjYsIDB4MjE2MCwgMHgwODBjLCAweDg1ZjgsCi0JMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHgwMGRlLCAweDAwY2UsIDB4MDgwYywgMHhhOWE3LCAweDA4MGMsCi0JMHgzMDk1LCAweDAwZTYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHgzMGJlLCAweDYwMTcsCi0JMHgwMDAwLCAweDYwMjMsIDB4MDAwNywgMHg2MDFiLCAweDAzOTgsIDB4NjA0MywgMHgwMDAwLCAweDAxMmUsCi0JMHgwMGVlLCAweDAwMDUsIDB4MDgwYywgMHhhNDFlLCAweDE5MDQsIDB4YmMzNywgMHgwMDA1LCAweDYwMDAsCi0JMHg5MDhhLCAweDAwMTAsIDB4MWEwYywgMHgwZGY2LCAweDAwOTYsIDB4MDBkNiwgMHgwMDFiLCAweDAwZGUsCi0JMHgwMDllLCAweDAwMDUsIDB4YmNhMiwgMHhiY2EyLCAweGJjYTIsIDB4YmNhMiwgMHhiY2EyLCAweGJjYTIsCi0JMHhiY2EyLCAweGJjYTIsIDB4YmNhMiwgMHhiYTZkLCAweGJjYTIsIDB4YmE3NCwgMHhiY2E0LCAweGJhNzQsCi0JMHhiY2JlLCAweGJjYTIsIDB4MDgwYywgMHgwZGY2LCAweDYwMDQsIDB4OTA4NiwgMHgwMDhiLCAweDAxYjAsCi0JMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsIDB4MDAzNSwgMHgxMTMwLCAweDYwMmMsCi0JMHg5MDgwLCAweDAwMDksIDB4MjAwYywgMHhjMTg1LCAweDIxMDIsIDB4NjAwNywgMHgwMDhiLCAweDYwMDMsCi0JMHgwMDBkLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHgwODBjLCAweGM0NGQsCi0JMHgwMTE4LCAweDA4MGMsIDB4YzQ2MCwgMHgwMDEwLCAweDA4MGMsIDB4YzQ2ZSwgMHgwODBjLCAweGJmMzksCi0JMHgwODBjLCAweGJkNGUsIDB4MDU3MCwgMHgwODBjLCAweDMwOTUsIDB4MDgwYywgMHhiZDRlLCAweDAxNjgsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLCAweGE4N2IsIDB4MDAwNiwgMHhhODc3LCAweDAwMDAsCi0JMHhhODgwLCAweGMwZWQsIDB4YTg4MiwgMHgwODBjLCAweDZhMjIsIDB4MmM2OCwgMHgwODBjLCAweDlmOTQsCi0JMHgwMTUwLCAweDY4MTAsIDB4NjAxMiwgMHgwODBjLCAweGMxY2EsIDB4MDBjNiwgMHgyZDYwLCAweDA4MGMsCi0JMHhhMDFjLCAweDAwY2UsIDB4MDAwOCwgMHgyZDYwLCAweDYwMTcsIDB4MDAwMCwgMHg2MDIzLCAweDAwMDEsCi0JMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4ODY0MCwgMHgwODBjLCAweDhiOGYsCi0JMHgwMGM4LCAweDA4MGMsIDB4YzQ0ZCwgMHgwMTM4LCAweDYwMzQsIDB4OTA4NiwgMHg0MDAwLCAweDExMTgsCi0JMHgwODBjLCAweDMwOTUsIDB4MDhkMCwgMHg2MDM0LCAweDkwOGMsIDB4ZmYwMCwgMHg4MTBmLCAweDkxODYsCi0JMHgwMDM5LCAweDAxMTgsIDB4OTE4NiwgMHgwMDM1LCAweDExMTgsIDB4MDgwYywgMHgzMDk1LCAweDA4NjgsCi0JMHgwODBjLCAweGEwMWMsIDB4MDAwNSwgMHg2MDAwLCAweDkwOGEsIDB4MDAxMCwgMHgxYTBjLCAweDBkZjYsCi0JMHgwMDAyLCAweGJkMjksIDB4YmQyOSwgMHhiZDJkLCAweGJkMmIsIDB4YmQzNywgMHhiZDI5LCAweGJkMjksCi0JMHhhMDFjLCAweGJkMjksIDB4YmQyOSwgMHhiZDI5LCAweGJkMjksIDB4YmQyOSwgMHhiZDI5LCAweGJkMjksCi0JMHhiZDI5LCAweDA4MGMsIDB4MGRmNiwgMHgwODBjLCAweDlhOGYsIDB4NjExNCwgMHgwMDk2LCAweDIxNDgsCi0JMHhhODdiLCAweDAwMDYsIDB4MDgwYywgMHg2YTIyLCAweDAwOWUsIDB4MDgwNCwgMHg5ZmVhLCAweDYwMWMsCi0JMHhkMDg0LCAweDE5MGMsIDB4MTkyYywgMHgwYzg4LCAweDkyODQsIDB4MDAwNywgMHgxMTU4LCAweDkyODIsCi0JMHgxY2QwLCAweDAyNDAsIDB4MjAwMSwgMHgxODE5LCAweDIwMDQsIDB4OTIwMiwgMHgxMjE4LCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4OTAwNiwgMHgwY2U4LCAweDAwOTYsIDB4MDAyOCwgMHgwMDk2LCAweDAwMDYsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDAwZSwgMHgwMDA2LCAweDk5ODQsIDB4ZjAwMCwgMHg5MDg2LCAweGYwMDAsCi0JMHgwMTEwLCAweDA4MGMsIDB4MTBlMiwgMHgwMDBlLCAweDAwOWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsCi0JMHgwMDM2LCAweDAwMDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA2MSwgMHgxY2QwLCAweDIwNzEsCi0JMHgxODAwLCAweDczNTAsIDB4NzA3MCwgMHg5MzAyLCAweDE2NDAsIDB4NjAyMCwgMHg5MjA2LCAweDExZjgsCi0JMHgwODBjLCAweGM0NTksIDB4MDE4MCwgMHg5Mjg2LCAweDAwMDEsIDB4MTE2OCwgMHg2MDA0LCAweDkwODYsCi0JMHgwMDA0LCAweDExNDgsIDB4MDgwYywgMHgzMDk1LCAweDA4MGMsIDB4YzQ2ZSwgMHgwMGM2LCAweDA4MGMsCi0JMHhhMDFjLCAweDAwY2UsIDB4MDA2MCwgMHgwODBjLCAweGMxNDQsIDB4MDE0OCwgMHgwODBjLCAweGJmNTYsCi0JMHgxMTEwLCAweDA4MGMsIDB4YTlhNywgMHgwMGM2LCAweDA4MGMsIDB4OWZlYSwgMHgwMGNlLCAweDljZTAsCi0JMHgwMDE4LCAweDcwNjQsIDB4OWMwMiwgMHgxMjA4LCAweDA4YTAsIDB4MDEyZSwgMHgwMDBlLCAweDAwM2UsCi0JMHgwMGNlLCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsIDB4MDAxNiwgMHg5MTg4LCAweDEwMDAsCi0JMHgyMTBjLCAweDgxZmYsIDB4MDEyOCwgMHgyMDYxLCAweDFhODgsIDB4NjExMiwgMHgwODBjLCAweDMwOTUsCi0JMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMWUsIDB4MDBjZSwgMHgwMGVlLCAweDAwMDUsCi0JMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4OWY5NCwgMHgwMWIwLCAweDY2NTYsCi0JMHgyYjAwLCAweDYwMTIsIDB4MDgwYywgMHg1NGUzLCAweDAxMTgsIDB4MDgwYywgMHhiZTdkLCAweDAxNjgsCi0JMHgwODBjLCAweGMxY2EsIDB4NjAyMywgMHgwMDAzLCAweDIwMDksIDB4MDA0YiwgMHgwODBjLCAweGEwNjgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwYzYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHhiYWEwLCAweDA4MGMsIDB4YTAzYiwgMHgwNTYwLCAweDYwNTcsCi0JMHgwMDAwLCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLCAweGMxY2EsIDB4NjAyMywgMHgwMDAzLCAweDAwMTYsCi0JMHgwODBjLCAweDg3ODIsIDB4MDA3NiwgMHg5MDNlLCAweDA4MGMsIDB4ODY3MCwgMHgyYzA4LCAweDA4MGMsCi0JMHhkNTU2LCAweDAwN2UsIDB4MDAxZSwgMHhkMTg0LCAweDAxMjgsIDB4MDgwYywgMHg5ZmVhLCAweDkwODUsCi0JMHgwMDAxLCAweDAwNzAsIDB4MDgwYywgMHg1NGUzLCAweDAxMjgsIDB4ZDE4YywgMHgxMTcwLCAweDA4MGMsCi0JMHhiZTdkLCAweDAxNDgsIDB4MjAwOSwgMHgwMDRjLCAweDA4MGMsIDB4YTA2OCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMTJlLCAweDAwY2UsIDB4MDAwNSwgMHg5MDA2LCAweDBjZDgsIDB4MjkwMCwgMHg2MDE2LCAweDBjOTAsCi0JMHgyMDA5LCAweDAwNGQsIDB4MDAxMCwgMHgyMDA5LCAweDAwNGUsIDB4MDBmNiwgMHgwMGM2LCAweDAwNDYsCi0JMHgwMDE2LCAweDA4MGMsIDB4OWY5NCwgMHgyYzc4LCAweDA1YTAsIDB4N2U1NiwgMHgyYjAwLCAweDc4MTIsCi0JMHg3ODIzLCAweDAwMDMsIDB4MDAxNiwgMHgyMDIxLCAweDAwMDUsIDB4MDgwYywgMHhiZThmLCAweDAwMWUsCi0JMHg5MTg2LCAweDAwNGQsIDB4MDExOCwgMHg5MTg2LCAweDAwNGUsIDB4MDE0OCwgMHgyMDAxLCAweDE5NWEsCi0JMHgyMDBjLCAweGQxZmMsIDB4MDE2OCwgMHgyZjYwLCAweDA4MGMsIDB4OWZlYSwgMHgwMGQwLCAweDIwMDEsCi0JMHgxOTU5LCAweDIwMGMsIDB4ZDFmYywgMHgwMTIwLCAweDJmNjAsIDB4MDgwYywgMHg5ZmVhLCAweDAwODgsCi0JMHgyZjYwLCAweDA4MGMsIDB4NTRlMywgMHgwMTM4LCAweGQxOGMsIDB4MTExOCwgMHgwNGYxLCAweDAxNDgsCi0JMHgwMDEwLCAweDI5MDAsIDB4NzgxNiwgMHgwMDFlLCAweDAwMTYsIDB4MDgwYywgMHhhMDY4LCAweDkwODUsCi0JMHgwMDAxLCAweDAwMWUsIDB4MDA0ZSwgMHgwMGNlLCAweDAwZmUsIDB4MDAwNSwgMHgwMGY2LCAweDAwYzYsCi0JMHgwMDQ2LCAweDA4MGMsIDB4OWY5NCwgMHgyYzc4LCAweDA1MDgsIDB4N2U1NiwgMHgyYjAwLCAweDc4MTIsCi0JMHg3ODIzLCAweDAwMDMsIDB4MDA5NiwgMHgyMDIxLCAweDAwMDQsIDB4MDQ4OSwgMHgwMDllLCAweDIwMDEsCi0JMHgxOTU4LCAweDIwMGMsIDB4ZDFmYywgMHgwMTIwLCAweDJmNjAsIDB4MDgwYywgMHg5ZmVhLCAweDAwNjAsCi0JMHgyZjYwLCAweDA4MGMsIDB4NTRlMywgMHgwMTIwLCAweGQxOGMsIDB4MTE2MCwgMHgwMDcxLCAweDAxMzAsCi0JMHgyMDA5LCAweDAwNTIsIDB4MDgwYywgMHhhMDY4LCAweDkwODUsIDB4MDAwMSwgMHgwMDRlLCAweDAwY2UsCi0JMHgwMGZlLCAweDAwMDUsIDB4MjkwMCwgMHg3ODE2LCAweDBjOTgsIDB4MDBjNiwgMHgwODBjLCAweDQ5YjcsCi0JMHgwMGNlLCAweDExMjAsIDB4MDgwYywgMHg5ZmVhLCAweDkwMDYsIDB4MDAwNSwgMHhhODY3LCAweDAwMDAsCi0JMHhhODZiLCAweDgwMDAsIDB4MjkwMCwgMHg2MDE2LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwOTYsCi0JMHgwMDc2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4NjRkNywgMHgwMTU4LCAweDIwMDEsCi0JMHhiZTk0LCAweDAwMDYsIDB4OTAwZSwgMHgyNDAwLCAweDA4MGMsIDB4NmM2YiwgMHgwODBjLCAweDZhMjIsCi0JMHgwMDBlLCAweDA4MDcsIDB4MjQxOCwgMHgwODBjLCAweDhhMWQsIDB4YmFhMCwgMHgwMDg2LCAweDIwNDEsCi0JMHgwMDAxLCAweDIwMzksIDB4MDAwMSwgMHgyNjA4LCAweDA4MGMsIDB4ODc5YSwgMHgwMDhlLCAweDA4MGMsCi0JMHg4NjcwLCAweDJmMDgsIDB4MjY0OCwgMHgwODBjLCAweGQ1NTYsIDB4YjkzYywgMHg4MWZmLCAweDA5MGMsCi0JMHg4ODZkLCAweDA4MGMsIDB4OGI4ZiwgMHgwMTJlLCAweDAwN2UsIDB4MDA5ZSwgMHgwMDA1LCAweDAwYzYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDlmOTQsIDB4MDE5MCwgMHg2NjBhLCAweDJiMDgsCi0JMHg2MTEyLCAweDA4MGMsIDB4YzFjYSwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDIwMDksCi0JMHgwMDFmLCAweDA4MGMsIDB4YTA2OCwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsCi0JMHg5MDA2LCAweDBjZDgsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweGEwM2IsCi0JMHgwMWI4LCAweDY2MGEsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsIDB4YzFjYSwgMHg2MDIzLCAweDAwMDgsCi0JMHgyOTAwLCAweDYwMTYsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsIDB4MTY1MSwgMHgwMGZlLCAweDIwMDksCi0JMHgwMDIxLCAweDA4MGMsIDB4YTA2OCwgMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsCi0JMHg5MDA2LCAweDBjZDgsIDB4MjAwOSwgMHgwMDNkLCAweDAwYzYsIDB4MDEyNiwgMHgwMDE2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4OWY5NCwgMHgwMTk4LCAweDY2MGEsIDB4MmIwOCwgMHg2MTEyLCAweDA4MGMsCi0JMHhjMWNhLCAweDYwMjMsIDB4MDAwMSwgMHgyOTAwLCAweDYwMTYsIDB4MDAxZSwgMHgwMDE2LCAweDA4MGMsCi0JMHhhMDY4LCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDkwMDYsCi0JMHgwY2QwLCAweDAwYzYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDgwYywgMHhhMDNiLCAweDAxODgsCi0JMHgyYjA4LCAweDYxMTIsIDB4MDgwYywgMHhjMWNhLCAweDYwMjMsIDB4MDAwMSwgMHgyOTAwLCAweDYwMTYsCi0JMHgyMDA5LCAweDAwMDAsIDB4MDgwYywgMHhhMDY4LCAweDkwODUsIDB4MDAwMSwgMHgwMTJlLCAweDAwY2UsCi0JMHgwMDA1LCAweDkwMDYsIDB4MGNkOCwgMHgyMDA5LCAweDAwNDQsIDB4MDgzMCwgMHgyMDA5LCAweDAwNDksCi0JMHgwODE4LCAweDAwMjYsIDB4MDBiNiwgMHg2MjEwLCAweDIyNTgsIDB4YmEzYywgMHg4MmZmLCAweDAxMTAsCi0JMHg4MjExLCAweGJhM2UsIDB4MDBiZSwgMHgwMDJlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDYwMDQsCi0JMHg5MDhlLCAweDAwMDIsIDB4MDE0MCwgMHg5MDhlLCAweDAwMDMsIDB4MDEyOCwgMHg5MDhlLCAweDAwMDQsCi0JMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwODYsCi0JMHgwMDk2LCAweDYwMjAsIDB4OTA4NiwgMHgwMDA0LCAweDAxYTgsIDB4NjAxNCwgMHg5MDRkLCAweDA4MGMsCi0JMHhiZDRlLCAweDAxODAsIDB4YTg2NCwgMHg5MDg2LCAweDAxMzksIDB4MDE3MCwgMHg2MDIwLCAweDkwYzYsCi0JMHgwMDAzLCAweDAxNDAsIDB4OTBjNiwgMHgwMDAyLCAweDAxMjgsIDB4YTg2OCwgMHhkMGZjLCAweDAxMTAsCi0JMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwOWUsIDB4MDA4ZSwgMHgwMDBlLCAweDAwMDUsCi0JMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4YTAzYiwgMHgwMTk4LCAweDJiMDgsCi0JMHg2MTEyLCAweDA4MGMsIDB4YzFjYSwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDA4MGMsCi0JMHgzMDk1LCAweDIwMDksIDB4MDAyOCwgMHgwODBjLCAweGEwNjgsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCi0JMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDkxODYsIDB4MDAxNSwgMHgxMWE4LCAweDIwMTEsCi0JMHgxODIzLCAweDIyMDQsIDB4OTA4NiwgMHgwMDc0LCAweDExNzgsIDB4MDBiNiwgMHgwODBjLCAweGFjNDEsCi0JMHgwMGJlLCAweDA4MGMsIDB4YWU4ZCwgMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDI5LCAweDA4MGMsCi0JMHg4NjQwLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDc4LCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4NjgsCi0JMHgwMDllLCAweGQwZmMsIDB4MDE0OCwgMHgyMDAxLCAweDAwMDEsIDB4MDgwYywgMHhjMzkwLCAweDA4MGMsCi0JMHhhOWE3LCAweDA4MGMsIDB4OWZlYSwgMHgwMDA1LCAweDAwOTYsIDB4NjAxNCwgMHg5MDRkLCAweDA5MGMsCi0JMHgwZGY2LCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsCi0JMHgwMDA0LCAweGE4NjcsIDB4MDEzOSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZhMjIsCi0JMHgwMTJlLCAweDAwOWUsIDB4MDgwYywgMHg5ZmVhLCAweDBjMzAsIDB4MDA5NiwgMHg5MTg2LCAweDAwMTYsCi0JMHgxMTI4LCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDYyZjQsIDB4MDBlOCwgMHg5MTg2LCAweDAwMTUsCi0JMHgxNTEwLCAweDIwMTEsIDB4MTgyMywgMHgyMjA0LCAweDkwODYsIDB4MDAxNCwgMHgxMWUwLCAweDYwMTAsCi0JMHgwMGI2LCAweDIwNTgsIDB4MDgwYywgMHg2NDNlLCAweDAwYmUsIDB4MDgwYywgMHhhZjYzLCAweDExOTgsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODkwLCAweDAwYmUsIDB4OTAwNSwgMHgwMTYwLCAweDIwMDEsCi0JMHgwMDA2LCAweDA4MGMsIDB4NjJmNCwgMHg2MDE0LCAweDIwNDgsIDB4YTg2OCwgMHhkMGZjLCAweDAxNzAsCi0JMHgwODBjLCAweGEzZjIsIDB4MDA0OCwgMHg2MDE0LCAweDIwNDgsIDB4YTg2OCwgMHhkMGZjLCAweDA1MjgsCi0JMHgwODBjLCAweGE5YTcsIDB4MDgwYywgMHg5ZmVhLCAweDAwOWUsIDB4MDAwNSwgMHg2MDE0LCAweDYzMTAsCi0JMHgyMzU4LCAweDkwNGQsIDB4MDkwYywgMHgwZGY2LCAweGE4N2IsIDB4MDAwMCwgMHhhODgzLCAweDAwMDAsCi0JMHhhODk3LCAweDQwMDAsIDB4OTAwZSwgMHgwODBjLCAweDY1YzMsIDB4MTEwOCwgMHhjMTg1LCAweGI4MDAsCi0JMHhkMGJjLCAweDAxMDgsIDB4YzE4ZCwgMHhhOTlhLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg2YTIyLCAweDAxMmUsIDB4MDgwYywgMHg5ZmVhLCAweDA4ZjgsIDB4NjAxNCwgMHg5MDRkLCAweDA5MGMsCi0JMHgwZGY2LCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsCi0JMHgwMDA0LCAweGE4NjcsIDB4MDEzOSwgMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZhMjIsCi0JMHgwMTJlLCAweDA4MGMsIDB4OWZlYSwgMHgwODQwLCAweGE4NzgsIDB4OTA4NiwgMHgwMDA1LCAweDExMDgsCi0JMHgwMDA5LCAweDAwMDUsIDB4YTg4MCwgMHhjMGFkLCAweGE4ODIsIDB4MDAwNSwgMHg2MDQzLCAweDAwMDAsCi0JMHg2MDE3LCAweDAwMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDA1MCwgMHgwODBjLCAweDg1ZjgsCi0JMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHgwMGM2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsCi0JMHgwMGJlLCAweGQwYmMsIDB4MDEyMCwgMHg2MDIwLCAweDkwODQsIDB4MDAwZiwgMHgwMDEzLCAweDAwY2UsCi0JMHgwMDA1LCAweGJhNmQsIDB4YzA3YSwgMHhjMDdhLCAweGMwN2QsIDB4ZDg4NiwgMHhkOGExLCAweGQ4YTQsCi0JMHhiYTZkLCAweGJhNmQsIDB4YmE2ZCwgMHhiYTZkLCAweGJhNmQsIDB4YmE2ZCwgMHhiYTZkLCAweGJhNmQsCi0JMHgwODBjLCAweDBkZjYsIDB4YTAwMSwgMHhhMDAxLCAweDAwMDUsIDB4MDA5NiwgMHg2MDE0LCAweDkwNGQsCi0JMHgwMTE4LCAweGE4N2MsIDB4ZDBlNCwgMHgxMTEwLCAweDAwOWUsIDB4MDAxMCwgMHgwMDllLCAweDAwMDUsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwNTUwLCAweDIwMDEsCi0JMHgxODMzLCAweDIwMDQsIDB4OTAwNSwgMHgxNTQwLCAweDAwZjYsIDB4MmM3OCwgMHgwODBjLCAweDlmOTQsCi0JMHgwNTA4LCAweDc4MTAsIDB4NjAxMiwgMHgwODBjLCAweGMxY2EsIDB4NzgyMCwgMHg5MDg2LCAweDAwMDMsCi0JMHgwMTI4LCAweDc4MDgsIDB4NjAzYSwgMHgyZjAwLCAweDYwM2UsIDB4MDAyMCwgMHg3ODA4LCAweDYwM2UsCi0JMHgyZjAwLCAweDYwM2EsIDB4NjAyZSwgMHg2MDIzLCAweDAwMDEsIDB4NjAwNywgMHgwMDM1LCAweDYwMDMsCi0JMHgwMDAxLCAweDc5NTQsIDB4NjE1NiwgMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDJmNjAsCi0JMHgwMGZlLCAweDAwMDUsIDB4MmY2MCwgMHgwMGZlLCAweDIwMDEsIDB4MTk2MiwgMHgyMDA0LCAweDYwNDIsCi0JMHgwMDA1LCAweDAwMTYsIDB4MDA5NiwgMHg2ODE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGU0LCAweDAxODAsCi0JMHhjMGU0LCAweGE4N2UsIDB4YTg3NywgMHgwMDAwLCAweGE4OTMsIDB4MDAwMCwgMHhhODhmLCAweDAwMDAsCi0JMHhkMGNjLCAweDAxMzAsIDB4YzBjYywgMHhhODdlLCAweGE4NzgsIDB4MjA0OCwgMHgwODBjLCAweDBmZTksCi0JMHg2ODMwLCAweDYwMzYsIDB4OTA4ZSwgMHgwMDAxLCAweDAxNDgsIDB4NjgwMywgMHgwMDAyLCAweDkwODYsCi0JMHgwMDA1LCAweDAxNzAsIDB4OTAwNiwgMHg2MDJlLCAweDYwMzIsIDB4MDBkMCwgMHg2ODFjLCAweGMwODUsCi0JMHg2ODFlLCAweDY4MDMsIDB4MDAwNCwgMHg2ODI0LCAweGMwZjQsIDB4OTA4NSwgMHgwYzAwLCAweDY4MjYsCi0JMHg2ODE0LCAweDIwNDgsIDB4YThhYywgMHg2OTM4LCAweDkxMDIsIDB4YThiMCwgMHg2OTNjLCAweDkxMDMsCi0JMHgxZTQ4LCAweDY4M2MsIDB4NjAyZSwgMHg2ODM4LCAweDkwODQsIDB4ZmZmYywgMHg2ODNhLCAweDYwMzIsCi0JMHgyZDAwLCAweDYwM2EsIDB4NjgwOCwgMHg2MDNlLCAweDY5MTAsIDB4NjExMiwgMHg2OTU0LCAweDYxNTYsCi0JMHg2MDIzLCAweDAwMDEsIDB4NjAwNywgMHgwMDM5LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDg1ZjgsCi0JMHgwODBjLCAweDhiOGYsIDB4MDA5ZSwgMHgwMDFlLCAweDAwMDUsIDB4NjAyNCwgMHhkMGQ0LCAweDA1MTAsCi0JMHhkMGY0LCAweDExZjgsIDB4NjAzOCwgMHg5NDBhLCAweDYwM2MsIDB4OTMwMywgMHgwMjMwLCAweDkxMDUsCi0JMHgwMTIwLCAweDYwMjQsIDB4YzBkNCwgMHhjMGY1LCAweDAwOTgsIDB4NjQzYSwgMHg2MzNlLCAweGFjM2UsCi0JMHhhYjQyLCAweDAwNDYsIDB4MDAzNiwgMHgyNDAwLCAweGFjYWMsIDB4OTQwMiwgMHhhODM2LCAweDIzMDAsCi0JMHhhYmIwLCAweDkzMDMsIDB4YTgzYSwgMHgwMDNlLCAweDAwNGUsIDB4NjAyNCwgMHhjMGQ0LCAweDAwMDAsCi0JMHg2MDI2LCAweDAwMDUsIDB4ZDBmNCwgMHgxMTM4LCAweGE4M2MsIDB4NjAzYSwgMHhhODQwLCAweDYwM2UsCi0JMHg2MDI0LCAweGMwZjUsIDB4NjAyNiwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHg2MDA0LCAweDkwOGUsCi0JMHgwMDM0LCAweDAxYjgsIDB4OTA4ZSwgMHgwMDM1LCAweDAxYTAsIDB4OTA4ZSwgMHgwMDM2LCAweDAxODgsCi0JMHg5MDhlLCAweDAwMzcsIDB4MDE3MCwgMHg5MDhlLCAweDAwMzgsIDB4MDE1OCwgMHg5MDhlLCAweDAwMzksCi0JMHgwMTQwLCAweDkwOGUsIDB4MDAzYSwgMHgwMTI4LCAweDkwOGUsIDB4MDAzYiwgMHgwMTEwLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMWUsIDB4MDAwZSwgMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsCi0JMHgwMGU2LCAweDIwMDEsIDB4MTk1YywgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDAxLCAweDAwMzIsCi0JMHgwODBjLCAweDg0N2UsIDB4MjAwMSwgMHgxOTYwLCAweDgyZmYsIDB4MTExMCwgMHgyMDExLCAweDAwMTQsCi0JMHgyMjAyLCAweDIwMDEsIDB4MTk1ZSwgMHgyMDBjLCAweDgwMDAsIDB4MjAxNCwgMHgyMDcxLCAweDE5NDYsCi0JMHg3MTFhLCAweDcyMWUsIDB4MjAwMSwgMHgwMDY0LCAweDA4MGMsIDB4ODQ3ZSwgMHgyMDAxLCAweDE5NjEsCi0JMHg4MmZmLCAweDExMTAsIDB4MjAxMSwgMHgwMDE0LCAweDIyMDIsIDB4MjAwMSwgMHgxOTYyLCAweDkyODgsCi0JMHgwMDBhLCAweDIxMDIsIDB4MjAwMSwgMHgxYTY5LCAweDIxMDIsIDB4MjAwMSwgMHgwMDMyLCAweDA4MGMsCi0JMHgxNTgwLCAweDA4MGMsIDB4NjZhYSwgMHgwMGVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MDAxNiwgMHgwMGU2LCAweDIwMDEsIDB4MTk2MCwgMHgyMDAzLCAweDAwMjgsCi0JMHgyMDAxLCAweDE5NjEsIDB4MjAwMywgMHgwMDE0LCAweDIwNzEsIDB4MTk0NiwgMHg3MDFiLCAweDAwMDAsCi0JMHg3MDFmLCAweDA3ZDAsIDB4MjAwMSwgMHgxOTYyLCAweDIwMDksIDB4MDAxZSwgMHgyMTAyLCAweDIwMDEsCi0JMHgxYTY5LCAweDIxMDIsIDB4MjAwMSwgMHgwMDMyLCAweDA4MGMsIDB4MTU4MCwgMHgwMGVlLCAweDAwMWUsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDA5NiwgMHg2MDU4LCAweDkwNGQsIDB4MDExMCwgMHgwODBjLCAweDEwNjksCi0JMHgwMDllLCAweDAwMDUsIDB4MDAwNSwgMHgwMGM2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg5Zjk0LCAweDAxODAsIDB4MmIwOCwgMHg2MTEyLCAweDBjYTksIDB4NjAyMywgMHgwMDAxLCAweDI5MDAsCi0JMHg2MDE2LCAweDIwMDksIDB4MDAzMywgMHgwODBjLCAweGEwNjgsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsCi0JMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwOTYsIDB4MDBlNiwgMHgwMGY2LCAweDIwNzEsCi0JMHgxODAwLCAweDkxODYsIDB4MDAxNSwgMHgxNTIwLCAweDcwOGMsIDB4OTA4NiwgMHgwMDE4LCAweDAxMjAsCi0JMHg3MDhjLCAweDkwODYsIDB4MDAxNCwgMHgxMWUwLCAweDYwMTQsIDB4MjA0OCwgMHhhYTNjLCAweGQyZTQsCi0JMHgxMTYwLCAweDJjNzgsIDB4MDgwYywgMHg4ZDkzLCAweDAxZDgsIDB4NzA3OCwgMHhhYTUwLCAweDkyMDYsCi0JMHgxMTYwLCAweDcwN2MsIDB4YWE1NCwgMHg5MjA2LCAweDExNDAsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCi0JMHhiYWEwLCAweDAwYmUsIDB4OTAwZSwgMHgwODBjLCAweDMwZGUsIDB4MDgwYywgMHhhM2YyLCAweDAwMjAsCi0JMHgwODBjLCAweGE5YTcsIDB4MDgwYywgMHg5ZmVhLCAweDAwZmUsIDB4MDBlZSwgMHgwMDllLCAweDAwMDUsCi0JMHg3MDVjLCAweGFhNTQsIDB4OTIwNiwgMHgwZDQ4LCAweDBjODAsIDB4MDBjNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4OWY5NCwgMHgwMTg4LCAweDJiMDgsIDB4NjExMiwgMHgwODBjLCAweGMxY2EsCi0JMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDIwMDksIDB4MDA0ZCwgMHgwODBjLCAweGEwNjgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDEyZSwgMHgwMGNlLCAweDAwMDUsIDB4OTAwNiwgMHgwY2Q4LCAweDAwYzYsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDE2LCAweDA4MGMsIDB4OWY5NCwgMHgwMTgwLCAweDJiMDgsCi0JMHg2MTEyLCAweDA4MGMsIDB4YzFjYSwgMHg2MDIzLCAweDAwMDEsIDB4MjkwMCwgMHg2MDE2LCAweDAwMWUsCi0JMHgwODBjLCAweGEwNjgsIDB4OTA4NSwgMHgwMDAxLCAweDAxMmUsIDB4MDBjZSwgMHgwMDA1LCAweDAwMWUsCi0JMHg5MDA2LCAweDBjZDAsIDB4MDAxNiwgMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNjYsCi0JMHgwMDk2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweDE4MDAsIDB4OTE4NiwgMHgwMDE1LCAweDE1NjgsCi0JMHg3MThjLCAweDYwMTQsIDB4MjA0OCwgMHhhODE0LCAweDgwMDMsIDB4OTEwNiwgMHgxNTMwLCAweDIwZTEsCi0JMHgwMDAwLCAweDIwMDEsIDB4MTk3YiwgMHgyMDAzLCAweDAwMDAsIDB4NjAxNCwgMHgyMDQ4LCAweGE4MzAsCi0JMHgyMGE4LCAweDg5MDYsIDB4ODAwNiwgMHg4MDA3LCAweDkwOTQsIDB4MDAzZiwgMHgyMmU4LCAweDkwODQsCi0JMHhmZmMwLCAweDkwODAsIDB4MDAxYiwgMHgyMGEwLCAweDIwMDEsIDB4MTk3YiwgMHgwMDE2LCAweDIwMGMsCi0JMHgwODBjLCAweGNhNzUsIDB4MDAxZSwgMHhhODA0LCAweDkwMDUsIDB4MDExMCwgMHgyMDQ4LCAweDBjMzgsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg2NywgMHgwMTAzLCAweDAwMTAsIDB4MDgwYywgMHhhOWE3LCAweDA4MGMsCi0JMHg5ZmVhLCAweDAwZmUsIDB4MDBlZSwgMHgwMDllLCAweDAwNmUsIDB4MDA1ZSwgMHgwMDRlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMDk2LCAweDAwZTYsIDB4MDBmNiwgMHgyMDcxLCAweDE4MDAsCi0JMHg5MTg2LCAweDAwMTUsIDB4MTFiOCwgMHg3MDhjLCAweDkwODYsIDB4MDAwNCwgMHgxMTk4LCAweDYwMTQsCi0JMHgyMDQ4LCAweDJjNzgsIDB4MDgwYywgMHg4ZDkzLCAweDAxYTgsIDB4NzA3OCwgMHhhYTc0LCAweDkyMDYsCi0JMHgxMTMwLCAweDcwN2MsIDB4YWE3OCwgMHg5MjA2LCAweDExMTAsIDB4MDgwYywgMHgzMDk1LCAweDA4MGMsCi0JMHhhM2YyLCAweDAwMjAsIDB4MDgwYywgMHhhOWE3LCAweDA4MGMsIDB4OWZlYSwgMHgwMGZlLCAweDAwZWUsCi0JMHgwMDllLCAweDAwMDUsIDB4NzA1YywgMHhhYTc4LCAweDkyMDYsIDB4MGQ3OCwgMHgwYzgwLCAweDAwOTYsCi0JMHgwMGU2LCAweDAwZjYsIDB4MjA3MSwgMHgxODAwLCAweDkxODYsIDB4MDAxNSwgMHgxNTUwLCAweDcwOGMsCi0JMHg5MDg2LCAweDAwMDQsIDB4MTUzMCwgMHg2MDE0LCAweDIwNDgsIDB4MmM3OCwgMHgwODBjLCAweDhkOTMsCi0JMHgwNWYwLCAweDcwNzgsIDB4YWFjYywgMHg5MjA2LCAweDExODAsIDB4NzA3YywgMHhhYWQwLCAweDkyMDYsCi0JMHgxMTYwLCAweDA4MGMsIDB4MzA5NSwgMHgwMDE2LCAweGE5OTgsIDB4YWFiMCwgMHg5Mjg0LCAweDEwMDAsCi0JMHhjMGZkLCAweDA4MGMsIDB4NTQ4YSwgMHgwMDFlLCAweDAwMTAsIDB4MDgwYywgMHg1Mjc1LCAweDA4MGMsCi0JMHhiZDRlLCAweDA1MDgsIDB4YTg3YiwgMHgwMDAwLCAweGE4ODMsIDB4MDAwMCwgMHhhODk3LCAweDQwMDAsCi0JMHgwMDgwLCAweDA4MGMsIDB4YmQ0ZSwgMHgwMWI4LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweDUyNzUsCi0JMHgxZDcwLCAweGE4N2IsIDB4MDAzMCwgMHhhODgzLCAweDAwMDAsIDB4YTg5NywgMHg0MDA1LCAweGE4OWIsCi0JMHgwMDA0LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweGE4NjcsIDB4MDEzOSwgMHgwODBjLCAweDZhMjIsCi0JMHgwMTJlLCAweDA4MGMsIDB4OWZlYSwgMHgwMGZlLCAweDAwZWUsIDB4MDA5ZSwgMHgwMDA1LCAweDcwNWMsCi0JMHhhYWQwLCAweDkyMDYsIDB4MDkzMCwgMHgwODg4LCAweDAwMTYsIDB4MDAyNiwgMHhhODdjLCAweGQwYWMsCi0JMHgwMTc4LCAweGE5MzgsIDB4YWEzNCwgMHgyMTAwLCAweDkyMDUsIDB4MDE1MCwgMHhhODkwLCAweDkxMDYsCi0JMHgxMTE4LCAweGE4OGMsIDB4OTIwNiwgMHgwMTIwLCAweGE5OTIsIDB4YWE4ZSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDAwNSwgMHgwMGI2LCAweDAwZDYsIDB4MDAzNiwgMHgwODBjLCAweGJkNGUsCi0JMHgwOTA0LCAweGMzOGMsIDB4MDA5NiwgMHg2MzE0LCAweDIzNDgsIDB4YTg3YSwgMHhhOTgyLCAweDkyOWUsCi0JMHg0MDAwLCAweDE1ODAsIDB4NjMxMCwgMHgwMGM2LCAweDIzNTgsIDB4MjAwOSwgMHgwMDAwLCAweGE4NjgsCi0JMHhkMGY0LCAweDExNDAsIDB4MDgwYywgMHg2NWMzLCAweDExMDgsIDB4YzE4NSwgMHhiODAwLCAweGQwYmMsCi0JMHgwMTA4LCAweGMxOGQsIDB4YWE5NiwgMHhhOTlhLCAweDIwYTksIDB4MDAwNCwgMHhhODYwLCAweDIwZTgsCi0JMHhhODVjLCAweDkwODAsIDB4MDAzMSwgMHgyMGEwLCAweGI4YjQsIDB4MjBlMCwgMHhiOGI4LCAweDkwODAsCi0JMHgwMDA2LCAweDIwOTgsIDB4MDgwYywgMHgwZmI0LCAweDIwYTksIDB4MDAwNCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDM1LCAweDIwYTAsIDB4YjhiOCwgMHg5MDgwLCAweDAwMGEsIDB4MjA5OCwgMHgwODBjLCAweDBmYjQsCi0JMHgwMGNlLCAweDAwOTAsIDB4YWE5NiwgMHgzOTE4LCAweDkzOTgsIDB4MDAwNywgMHgyMzFjLCAweDYwMDQsCi0JMHg5MDg2LCAweDAwMTYsIDB4MDExMCwgMHhhODliLCAweDAwMDQsIDB4YWJhMiwgMHg2MzEwLCAweDIzNTgsCi0JMHhiODA0LCAweDkwODQsIDB4MDBmZiwgMHhhODllLCAweGE4NjgsIDB4YzBmNCwgMHhhODZhLCAweDA4MGMsCi0JMHg2YTE1LCAweDYwMTcsIDB4MDAwMCwgMHgwMDllLCAweDAwM2UsIDB4MDBkZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwMDI2LCAweDAwMzYsIDB4MDA0NiwgMHgwMGI2LCAweDAwOTYsIDB4MDBmNiwgMHg2MjE0LCAweDIyNDgsCi0JMHg2MjEwLCAweDIyNTgsIDB4MjA3OSwgMHgwMjYwLCAweDkwOTYsIDB4MDAwMCwgMHgxMWEwLCAweGI4MTQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTAwZSwgMHgwODBjLCAweDI2NmQsIDB4MjExOCwgMHg4MzFmLCAweDkzOWMsCi0JMHhmZjAwLCAweDc4MzgsIDB4OTA4NCwgMHgwMGZmLCAweDkzMWQsIDB4N2MzYywgMHgyMDExLCAweDgwMTgsCi0JMHgwODBjLCAweDRhMTcsIDB4MDBhOCwgMHg5MDk2LCAweDAwMDEsIDB4MTE0OCwgMHg4OWZmLCAweDAxODAsCi0JMHhhODliLCAweDAwMGQsIDB4NzgzOCwgMHhhOGE2LCAweDc4M2MsIDB4YThhYSwgMHgwMDQ4LCAweDkwOTYsCi0JMHgwMDAyLCAweDExMzAsIDB4YTg5YiwgMHgwMDBkLCAweDc4MzgsIDB4YThhNiwgMHg3ODNjLCAweGE4YWEsCi0JMHgwMGZlLCAweDAwOWUsIDB4MDBiZSwgMHgwMDRlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDA1LCAweDAwYzYsCi0JMHgwMDI2LCAweDAwMTYsIDB4OTE4NiwgMHgwMDM1LCAweDAxMTAsIDB4NmEzOCwgMHgwMDA4LCAweDZhMmMsCi0JMHgwODBjLCAweGJkM2MsIDB4MDFmMCwgMHgyMjYwLCAweDYxMjAsIDB4OTE4NiwgMHgwMDAzLCAweDAxMTgsCi0JMHg5MTg2LCAweDAwMDYsIDB4MTE5MCwgMHg2ODM4LCAweDkyMDYsIDB4MDE0MCwgMHg2ODNjLCAweDkyMDYsCi0JMHgxMTYwLCAweDYxMDgsIDB4NjgzOCwgMHg5MTA2LCAweDExNDAsIDB4MDAyMCwgMHg2MDA4LCAweDY5M2MsCi0JMHg5MTA2LCAweDExMTgsIDB4NjAxMCwgMHg2OTEwLCAweDkxMDYsIDB4MDAxZSwgMHgwMDJlLCAweDAwY2UsCi0JMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwY2M4LCAweGE5NzQsIDB4ZDFjYywgMHgwMTk4LCAweDkxOGMsCi0JMHgwMGZmLCAweDkxOGUsIDB4MDAwMiwgMHgxMTcwLCAweGE5YTgsIDB4OTE4YywgMHgwMDBmLCAweDkxOGUsCi0JMHgwMDAxLCAweDExNDAsIDB4YTg3YywgMHhkMGFjLCAweDAxMjgsIDB4YTgzNCwgMHhhOTM4LCAweDkxMTUsCi0JMHgxOTBjLCAweGI0MWIsIDB4MDAwNSwgMHgwMDM2LCAweDIwMTksIDB4MDAwMSwgMHgwMDEwLCAweDAwMzYsCi0JMHg5MDFlLCAweDA0OTksIDB4MDFlMCwgMHgwODBjLCAweGJkNGUsIDB4MDFjOCwgMHgwODBjLCAweGJmMzksCi0JMHg2MDM3LCAweDQwMDAsIDB4NjAxNCwgMHg2MDE3LCAweDAwMDAsIDB4MDA5NiwgMHgyMDQ4LCAweGE4N2MsCi0JMHgwODBjLCAweGJmNTYsIDB4MTExOCwgMHgwODBjLCAweGE5YTcsIDB4MDA0MCwgMHhhODY3LCAweDAxMDMsCi0JMHhhODc3LCAweDAwMDAsIDB4ODNmZiwgMHgxMTI5LCAweDA4MGMsIDB4NmEyMiwgMHgwMDllLCAweDAwM2UsCi0JMHgwMDA1LCAweGE4ODAsIDB4ZDBiNCwgMHgwMTI4LCAweGE4N2IsIDB4MDAwNiwgMHhjMGVjLCAweGE4ODIsCi0JMHgwMDQ4LCAweGQwYmMsIDB4MDExOCwgMHhhODdiLCAweDAwMDIsIDB4MDAyMCwgMHhhODdiLCAweDAwMDUsCi0JMHgwODBjLCAweGMwNGEsIDB4YTg3NywgMHgwMDAwLCAweDAwMDUsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsCi0JMHhkMGVjLCAweDAwMDUsIDB4MDAwNiwgMHgyMDAxLCAweDE4MTAsIDB4MjAwNCwgMHhkMGY0LCAweDAwMGUsCi0JMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsIDB4ZDBlNCwgMHgwMDBlLCAweDAwMDUsCi0JMHgwMDM2LCAweDAwNDYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmJhMCwgMHgwMGJlLCAweDIwMjEsCi0JMHgwMDA3LCAweDA4MGMsIDB4NGJiNCwgMHgwMDRlLCAweDAwM2UsIDB4MDAwNSwgMHgwYzUxLCAweDFkODEsCi0JMHgwMDA1LCAweDIwMDEsIDB4MTk2MCwgMHgyMDA0LCAweDYwMWEsIDB4MDAwNSwgMHgyMDAxLCAweDE5NjIsCi0JMHgyMDA0LCAweDYwNDIsIDB4MDAwNSwgMHgwODBjLCAweDlmZWEsIDB4MDgwNCwgMHg4YjhmLCAweDIwMDEsCi0JMHgwMTA5LCAweDIwMDQsIDB4ZDA4NCwgMHgwMWUwLCAweDAxMjYsIDB4MjA5MSwgMHgyODAwLCAweDAwMDYsCi0JMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMGY2LCAweDAwZTYsIDB4MDBjNiwgMHgyMDc5LCAweDE5YzIsCi0JMHgyMDcxLCAweDE4MDAsIDB4MjA2MSwgMHgwMTAwLCAweDA4MGMsIDB4ODRlMiwgMHgwMGNlLCAweDAwZWUsCi0JMHgwMGZlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwMGUsIDB4MDEyZSwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDA2NiwgMHg2MDAwLCAweDkwYjIsIDB4MDAxMCwgMHgxYTBjLCAweDBkZjYsCi0JMHgwMDFiLCAweDAwNmUsIDB4MDBiZSwgMHgwMDA1LCAweGM0YmMsIDB4Y2JkNCwgMHhjZDQ3LCAweGM0YmMsCi0JMHhjNGJjLCAweGM0YmMsIDB4YzRiYywgMHhjNGJjLCAweGM0ZjMsIDB4Y2RjYiwgMHhjNGJjLCAweGM0YmMsCi0JMHhjNGJjLCAweGM0YmMsIDB4YzRiYywgMHhjNGJjLCAweDA4MGMsIDB4MGRmNiwgMHgwMDY2LCAweDYwMDAsCi0JMHg5MGIyLCAweDAwMTAsIDB4MWEwYywgMHgwZGY2LCAweDAwMTMsIDB4MDA2ZSwgMHgwMDA1LCAweGM0ZDcsCi0JMHhkMzFhLCAweGM0ZDcsIDB4YzRkNywgMHhjNGQ3LCAweGM0ZDcsIDB4YzRkNywgMHhjNGQ3LCAweGQyYzcsCi0JMHhkMzZlLCAweGM0ZDcsIDB4ZDljMSwgMHhkOWY3LCAweGQ5YzEsIDB4ZDlmNywgMHhjNGQ3LCAweDA4MGMsCi0JMHgwZGY2LCAweDYwMDAsIDB4OTA4MiwgMHgwMDEwLCAweDFhMGMsIDB4MGRmNiwgMHg2MDAwLCAweDAwMGEsCi0JMHgwMDA1LCAweGM0ZjEsIDB4Y2ZhOSwgMHhkMDc4LCAweGQwOWIsIDB4ZDE1YiwgMHhjNGYxLCAweGQyM2EsCi0JMHhkMWUzLCAweGNkZDcsIDB4ZDI5ZCwgMHhkMmIyLCAweGM0ZjEsIDB4YzRmMSwgMHhjNGYxLCAweGM0ZjEsCi0JMHhjNGYxLCAweDA4MGMsIDB4MGRmNiwgMHg5MWIyLCAweDAwNTMsIDB4MWEwYywgMHgwZGY2LCAweDIxMDAsCi0JMHg5MWIyLCAweDAwNDAsIDB4MWEwNCwgMHhjOTcxLCAweDAwMDIsIDB4YzUzZCwgMHhjNzNmLCAweGM1M2QsCi0JMHhjNTNkLCAweGM1M2QsIDB4Yzc0OCwgMHhjNTNkLCAweGM1M2QsIDB4YzUzZCwgMHhjNTNkLCAweGM1M2QsCi0JMHhjNTNkLCAweGM1M2QsIDB4YzUzZCwgMHhjNTNkLCAweGM1M2QsIDB4YzUzZCwgMHhjNTNkLCAweGM1M2QsCi0JMHhjNTNkLCAweGM1M2QsIDB4YzUzZCwgMHhjNTNkLCAweGM1M2YsIDB4YzVhMiwgMHhjNWIxLCAweGM2MTUsCi0JMHhjNjQwLCAweGM2YjgsIDB4YzcyYSwgMHhjNTNkLCAweGM1M2QsIDB4Yzc0YiwgMHhjNTNkLCAweGM1M2QsCi0JMHhjNzYwLCAweGM3NmQsIDB4YzUzZCwgMHhjNTNkLCAweGM1M2QsIDB4YzUzZCwgMHhjNTNkLCAweGM4MTMsCi0JMHhjNTNkLCAweGM1M2QsIDB4YzgyNywgMHhjNTNkLCAweGM1M2QsIDB4YzdlMiwgMHhjNTNkLCAweGM1M2QsCi0JMHhjNTNkLCAweGM4M2YsIDB4YzUzZCwgMHhjNTNkLCAweGM1M2QsIDB4YzhiYywgMHhjNTNkLCAweGM1M2QsCi0JMHhjNTNkLCAweGM1M2QsIDB4YzUzZCwgMHhjNTNkLCAweGM5MzksIDB4MDgwYywgMHgwZGY2LCAweDA4MGMsCi0JMHg2Njg3LCAweDExNTAsIDB4MjAwMSwgMHgxODM2LCAweDIwMDQsIDB4ZDBjYywgMHgxMTI4LCAweDkwODQsCi0JMHgwMDA5LCAweDkwODYsIDB4MDAwOCwgMHgxMTQwLCAweDYwMDcsIDB4MDAwOSwgMHg2MDJmLCAweDAwMDksCi0JMHg2MDE3LCAweDAwMDAsIDB4MDgwNCwgMHhjNzM4LCAweDA4MGMsIDB4NjY3MCwgMHgwMGU2LCAweDAwYzYsCi0JMHgwMDM2LCAweDAwMjYsIDB4MDAxNiwgMHg2MjEwLCAweDIyNTgsIDB4YmFhMCwgMHgwMDI2LCAweDIwMTksCi0JMHgwMDI5LCAweDA4MGMsIDB4ODc4MiwgMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHg4NjcwLCAweDJjMDgsCi0JMHgwODBjLCAweGQ1NTYsIDB4MDA3ZSwgMHgwMDFlLCAweDAwMWUsIDB4MDAyZSwgMHgwMDNlLCAweDAwY2UsCi0JMHgwMGVlLCAweDY2MTAsIDB4MjY1OCwgMHgwODBjLCAweDYzYjIsIDB4YmUwNCwgMHg5Njg0LCAweDAwZmYsCi0JMHg5MDgyLCAweDAwMDYsIDB4MTI2OCwgMHgwMDE2LCAweDAwMjYsIDB4NjIxMCwgMHgwMGI2LCAweDIyNTgsCi0JMHhiYWEwLCAweDAwYmUsIDB4MmMwOCwgMHgwODBjLCAweGRiNzEsIDB4MDAyZSwgMHgwMDFlLCAweDExNzgsCi0JMHgwODBjLCAweGQ0ODksIDB4MTkwNCwgMHhjNjBkLCAweDA4MGMsIDB4ZDQyNSwgMHgxMTIwLCAweDYwMDcsCi0JMHgwMDA4LCAweDA4MDQsIDB4YzczOCwgMHg2MDA3LCAweDAwMDksIDB4MDgwNCwgMHhjNzM4LCAweDA4MGMsCi0JMHhkNmM3LCAweDAxMjgsIDB4MDgwYywgMHhkNDg5LCAweDBkNzgsIDB4MDgwNCwgMHhjNjBkLCAweDYwMTcsCi0JMHgxOTAwLCAweDBjODgsIDB4MDgwYywgMHgzMWI4LCAweDE5MDQsIDB4Yzk2ZSwgMHg2MTA2LCAweDA4MGMsCi0JMHhkM2M5LCAweDYwMDcsIDB4MDAwNiwgMHgwODA0LCAweGM3MzgsIDB4NjAwNywgMHgwMDA3LCAweDA4MDQsCi0JMHhjNzM4LCAweDA4MGMsIDB4ZGEzMywgMHgxOTA0LCAweGM5NmUsIDB4MDgwYywgMHgzMWI4LCAweDE5MDQsCi0JMHhjOTZlLCAweDAwZDYsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsIDB4OTY4NCwgMHgwMGZmLCAweDkwODIsCi0JMHgwMDA2LCAweDEyMjAsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NjJlMCwgMHg5NmI0LCAweGZmMDAsCi0JMHg4NjM3LCAweDk2ODYsIDB4MDAwNiwgMHgwMTg4LCAweDk2ODYsIDB4MDAwNCwgMHgwMTcwLCAweGJlMDQsCi0JMHg5NmI0LCAweDAwZmYsIDB4OTY4NiwgMHgwMDA2LCAweDAxNDAsIDB4OTY4NiwgMHgwMDA0LCAweDAxMjgsCi0JMHg5Njg2LCAweDAwMDUsIDB4MDExMCwgMHgwMGRlLCAweDA0ODAsIDB4MDBlNiwgMHgyMDcxLCAweDAyNjAsCi0JMHg3MDM0LCAweDkwODQsIDB4MDAwMywgMHgxMTQwLCAweDcwMzQsIDB4OTA4MiwgMHgwMDE0LCAweDAyMjAsCi0JMHg3MDMwLCAweDkwODQsIDB4MDAwMywgMHgwMTMwLCAweDAwZWUsIDB4NjAxNywgMHgwMDAwLCAweDYwMmYsCi0JMHgwMDA3LCAweDAwYjAsIDB4MDBlZSwgMHgwODBjLCAweGQ0ZWMsIDB4MTE5MCwgMHg5Njg2LCAweDAwMDYsCi0JMHgxMTQwLCAweDAwMjYsIDB4NjIxMCwgMHgyMjU4LCAweGJhYTAsIDB4OTAwZSwgMHgwODBjLCAweDMwZGUsCi0JMHgwMDJlLCAweDA4MGMsIDB4NjQzZSwgMHg2MDA3LCAweDAwMGEsIDB4MDBkZSwgMHgwODA0LCAweGM3MzgsCi0JMHg2MDA3LCAweDAwMGIsIDB4MDBkZSwgMHgwODA0LCAweGM3MzgsIDB4MDgwYywgMHgzMDk1LCAweDA4MGMsCi0JMHhjNDZlLCAweDYwMDcsIDB4MDAwMSwgMHgwODA0LCAweGM3MzgsIDB4MDgwYywgMHhkYTMzLCAweDE5MDQsCi0JMHhjOTZlLCAweDA4MGMsIDB4MzFiOCwgMHgxOTA0LCAweGM5NmUsIDB4MjA3MSwgMHgwMjYwLCAweDcwMzQsCi0JMHg5MGI0LCAweDAwMDMsIDB4MTk0OCwgMHg5MGIyLCAweDAwMTQsIDB4MGEzMCwgMHg3MDMwLCAweDkwODQsCi0JMHgwMDAzLCAweDE5MTAsIDB4NjYxMCwgMHgyNjU4LCAweGJlMDQsIDB4OTY4NiwgMHgwNzA3LCAweDA5ZTgsCi0JMHgwMDI2LCAweDYyMTAsIDB4MjI1OCwgMHhiYWEwLCAweDkwMGUsIDB4MDgwYywgMHgzMGRlLCAweDAwMmUsCi0JMHg2MDA3LCAweDAwMGMsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4ZGI1MCwgMHgwODA0LCAweGM3MzgsCi0JMHgwODBjLCAweDY2ODcsIDB4MTE0MCwgMHgyMDAxLCAweDE4MzYsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDksCi0JMHg5MDg2LCAweDAwMDgsIDB4MTExMCwgMHgwODA0LCAweGM1NGMsIDB4MDgwYywgMHg2NjcwLCAweDY2MTAsCi0JMHgyNjU4LCAweGJlMDQsIDB4OTY4NCwgMHgwMGZmLCAweDkwODIsIDB4MDAwNiwgMHgwNmMwLCAweDExMzgsCi0JMHgwMDI2LCAweDIwMDEsIDB4MDAwNiwgMHgwODBjLCAweDYzMjAsIDB4MDAyZSwgMHgwMDUwLCAweDk2YjQsCi0JMHhmZjAwLCAweDg2MzcsIDB4OTY4NiwgMHgwMDA0LCAweDAxMjAsIDB4OTY4NiwgMHgwMDA2LCAweDE5MDQsCi0JMHhjNjBkLCAweDA4MGMsIDB4ZDRmOSwgMHgxMTIwLCAweDYwMDcsIDB4MDAwZSwgMHgwODA0LCAweGM3MzgsCi0JMHgwMDQ2LCAweDY0MTAsIDB4MjQ1OCwgMHhiY2EwLCAweDAwNDYsIDB4MDgwYywgMHgzMDk1LCAweDA4MGMsCi0JMHhjNDZlLCAweDAwNGUsIDB4MDAxNiwgMHg5MDA2LCAweDIwMDksIDB4MTg1YywgMHgyMTBjLCAweDAwNDgsCi0JMHgyMDA5LCAweDAwMjksIDB4MDgwYywgMHhkODM3LCAweDYwMTAsIDB4MjA1OCwgMHhiODAwLCAweGMwZTUsCi0JMHhiODAyLCAweDAwMWUsIDB4MDA0ZSwgMHg2MDA3LCAweDAwMDEsIDB4MDgwNCwgMHhjNzM4LCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4NjJlMCwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDIwYTksCi0JMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLCAweDAyNzAsIDB4MDgwYywgMHhiMDAzLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHg5MDA1LCAweDAxNjgsIDB4OTZiNCwgMHhmZjAwLCAweDg2MzcsCi0JMHg5NjgyLCAweDAwMDQsIDB4MGEwNCwgMHhjNjBkLCAweDk2ODIsIDB4MDAwNywgMHgwYTA0LCAweGM2NjksCi0JMHgwODA0LCAweGM2MGQsIDB4NjAxNywgMHgxOTAwLCAweDYwMDcsIDB4MDAwOSwgMHgwODA0LCAweGM3MzgsCi0JMHgwODBjLCAweDY2ODcsIDB4MTE0MCwgMHgyMDAxLCAweDE4MzYsIDB4MjAwNCwgMHg5MDg0LCAweDAwMDksCi0JMHg5MDg2LCAweDAwMDgsIDB4MTExMCwgMHgwODA0LCAweGM1NGMsIDB4MDgwYywgMHg2NjcwLCAweDY2MTAsCi0JMHgyNjU4LCAweGJlMDQsIDB4OTY4NCwgMHgwMGZmLCAweDAwMDYsIDB4MDAxNiwgMHg5MDhlLCAweDAwMDEsCi0JMHgwMTE4LCAweDkwOGUsIDB4MDAwMCwgMHgxMTE4LCAweDAwMWUsIDB4MDAwZSwgMHgwMDgwLCAweDAwMWUsCi0JMHgwMDBlLCAweDkwODIsIDB4MDAwNiwgMHgwNjk4LCAweDAxNTAsIDB4OTZiNCwgMHhmZjAwLCAweDg2MzcsCi0JMHg5Njg2LCAweDAwMDQsIDB4MDEyMCwgMHg5Njg2LCAweDAwMDYsIDB4MTkwNCwgMHhjNjBkLCAweDA4MGMsCi0JMHhkNTI3LCAweDExMzgsIDB4MDgwYywgMHhkNDI1LCAweDExMjAsIDB4NjAwNywgMHgwMDEwLCAweDA4MDQsCi0JMHhjNzM4LCAweDAwNDYsIDB4NjQxMCwgMHgyNDU4LCAweGJjYTAsIDB4MDA0NiwgMHgwODBjLCAweDMwOTUsCi0JMHgwODBjLCAweGM0NmUsIDB4MDA0ZSwgMHgwMDE2LCAweDkwMDYsIDB4MjAwOSwgMHgxODVjLCAweDIxMGMsCi0JMHgwMDQ4LCAweDIwMDksIDB4MDAyOSwgMHgwODBjLCAweGQ4MzcsIDB4NjAxMCwgMHgyMDU4LCAweGI4MDAsCi0JMHhjMGU1LCAweGI4MDIsIDB4MDAxZSwgMHgwMDRlLCAweDYwMDcsIDB4MDAwMSwgMHgwNDQ4LCAweDA4MGMsCi0JMHhkNmM3LCAweDAxOTgsIDB4MDAxNiwgMHg5NjhjLCAweDAwZmYsIDB4OTE4NiwgMHgwMDAyLCAweDAxNjAsCi0JMHg5MTg2LCAweDAwMDMsIDB4MDE0OCwgMHgwMDFlLCAweDk2YjQsIDB4ZmYwMCwgMHg4NjM3LCAweDk2ODYsCi0JMHgwMDA2LCAweDA5MjgsIDB4MDgwNCwgMHhjNjBkLCAweDAwMWUsIDB4NjAxNywgMHgxOTAwLCAweDYwMDcsCi0JMHgwMDA5LCAweDAwNzAsIDB4MDgwYywgMHgzMWI4LCAweDE5MDQsIDB4Yzk2ZSwgMHgwODBjLCAweGRhMzMsCi0JMHgxOTA0LCAweGM5NmUsIDB4MDgwYywgMHhjYjEyLCAweDE5MDQsIDB4YzYwZCwgMHg2MDA3LCAweDAwMTIsCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg4NjQwLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDYwMDcsCi0JMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDBjYjAsCi0JMHg2MDA3LCAweDAwMDUsIDB4MGM2OCwgMHgwODBjLCAweGRhMzMsIDB4MTkwNCwgMHhjOTZlLCAweDA4MGMsCi0JMHgzMWI4LCAweDE5MDQsIDB4Yzk2ZSwgMHgwODBjLCAweGNiMTIsIDB4MTkwNCwgMHhjNjBkLCAweDYwMDcsCi0JMHgwMDIwLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDAwMDUsCi0JMHgwODBjLCAweDMxYjgsIDB4MTkwNCwgMHhjOTZlLCAweDYwMDcsIDB4MDAyMywgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDAwMDUsIDB4MDgwYywgMHhkYTMzLCAweDE5MDQsCi0JMHhjOTZlLCAweDA4MGMsIDB4MzFiOCwgMHgxOTA0LCAweGM5NmUsIDB4MDgwYywgMHhjYjEyLCAweDE5MDQsCi0JMHhjNjBkLCAweDAwMTYsIDB4MDAyNiwgMHgwMGU2LCAweDIwNzEsIDB4MDI2MCwgMHgyYzA4LCAweDIwMTEsCi0JMHgxODFmLCAweDIyMTQsIDB4NzAzYywgMHg5MjA2LCAweDExZTAsIDB4MjAxMSwgMHgxODFlLCAweDIyMTQsCi0JMHg3MDM4LCAweDkwODQsIDB4MDBmZiwgMHg5MjA2LCAweDExYTAsIDB4NzI0MCwgMHgwODBjLCAweGJkM2MsCi0JMHgwNTcwLCAweDIyNjAsIDB4NjAwOCwgMHg5MDg2LCAweGZmZmYsIDB4MDEyMCwgMHg3MjQ0LCAweDYwMDgsCi0JMHg5MjA2LCAweDE1MjgsIDB4NjAyMCwgMHg5MDg2LCAweDAwMDcsIDB4MTUwOCwgMHgwODBjLCAweDlmZWEsCi0JMHgwNGEwLCAweDcyNDQsIDB4OTI4NiwgMHhmZmZmLCAweDAxODAsIDB4MmMwOCwgMHgwODBjLCAweGJkM2MsCi0JMHgwMWIwLCAweDIyNjAsIDB4NzI0MCwgMHg2MDA4LCAweDkyMDYsIDB4MTE4OCwgMHg2MDEwLCAweDkxOTAsCi0JMHgwMDA0LCAweDIyMTQsIDB4OTIwNiwgMHgwMWI4LCAweDAwNTAsIDB4NzI0MCwgMHgyYzA4LCAweDkwMDYsCi0JMHgwODBjLCAweGQ4MDksIDB4MTE4MCwgMHg3MjQ0LCAweDkyODYsIDB4ZmZmZiwgMHgwMWIwLCAweDIxNjAsCi0JMHg2MDA3LCAweDAwMjYsIDB4NjAxNywgMHgxNzAwLCAweDcyMTQsIDB4OTI5NiwgMHhmZmZmLCAweDExODAsCi0JMHg2MDA3LCAweDAwMjUsIDB4MDA2OCwgMHg2MDIwLCAweDkwODYsIDB4MDAwNywgMHgxZDgwLCAweDYwMDQsCi0JMHg5MDg2LCAweDAwMjQsIDB4MTExMCwgMHgwODBjLCAweDlmZWEsIDB4MjE2MCwgMHg2MDA3LCAweDAwMjUsCi0JMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg4NjQwLCAweDA4MGMsIDB4OGI4ZiwgMHgwMGVlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMDUsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4NjJlMCwgMHgwMTU2LCAweDAwMTYsCi0JMHgwMDI2LCAweDAwMzYsIDB4MjBhOSwgMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLCAweDAyNzYsCi0JMHgwODBjLCAweGIwMDMsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHgwMTIwLCAweDYwMDcsCi0JMHgwMDMxLCAweDA4MDQsIDB4YzczOCwgMHgwODBjLCAweGFjNTksIDB4MDgwYywgMHg3MTdlLCAweDExOTAsCi0JMHgwMDA2LCAweDAwMjYsIDB4MDAzNiwgMHgwODBjLCAweDcxOTgsIDB4MTEzOCwgMHgwODBjLCAweDc0N2EsCi0JMHgwODBjLCAweDVlMmYsIDB4MDgwYywgMHg3MDllLCAweDAwMTAsIDB4MDgwYywgMHg3MTU2LCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMGUsIDB4MDAwNSwgMHgwODBjLCAweDMxYjgsIDB4MTkwNCwgMHhjOTZlLCAweDA4MGMsCi0JMHhjYjEyLCAweDE5MDQsIDB4YzYwZCwgMHg2MTA2LCAweDA4MGMsIDB4Y2IyZSwgMHgxMTIwLCAweDYwMDcsCi0JMHgwMDJiLCAweDA4MDQsIDB4YzczOCwgMHg2MDA3LCAweDAwMmMsIDB4MDgwNCwgMHhjNzM4LCAweDA4MGMsCi0JMHhkYTMzLCAweDE5MDQsIDB4Yzk2ZSwgMHgwODBjLCAweDMxYjgsIDB4MTkwNCwgMHhjOTZlLCAweDA4MGMsCi0JMHhjYjEyLCAweDE5MDQsIDB4YzYwZCwgMHg2MTA2LCAweDA4MGMsIDB4Y2IzMywgMHgxMTIwLCAweDYwMDcsCi0JMHgwMDJlLCAweDA4MDQsIDB4YzczOCwgMHg2MDA3LCAweDAwMmYsIDB4MDgwNCwgMHhjNzM4LCAweDA4MGMsCi0JMHgzMWI4LCAweDE5MDQsIDB4Yzk2ZSwgMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHg2MDEwLCAweDIwNTgsCi0JMHhiOTA0LCAweDkxODQsIDB4MDBmZiwgMHg5MDg2LCAweDAwMDYsIDB4MDE1OCwgMHg5MTg0LCAweGZmMDAsCi0JMHg4MDA3LCAweDkwODYsIDB4MDAwNiwgMHgwMTI4LCAweDAwY2UsIDB4MDBkZSwgMHgwMGVlLCAweDA4MDQsCi0JMHhjNzNmLCAweDA4MGMsIDB4NTRkZiwgMHhkMGU0LCAweDA5MDQsIDB4YzhiOSwgMHgyMDcxLCAweDAyNmMsCi0JMHg3MDEwLCAweDYwM2EsIDB4NzAxNCwgMHg2MDNlLCAweDcxMDgsIDB4NzIwYywgMHgwODBjLCAweDY2YzUsCi0JMHgwMTQwLCAweDYwMTAsIDB4MjA1OCwgMHhiODEwLCAweDkxMDYsIDB4MTExOCwgMHhiODE0LCAweDkyMDYsCi0JMHgwNTEwLCAweDA4MGMsIDB4NjZjMSwgMHgxNWI4LCAweDIwNjksIDB4MTgwMCwgMHg2ODdjLCAweDkyMDYsCi0JMHgxNTkwLCAweDY4NzgsIDB4OTEwNiwgMHgxNTc4LCAweDcyMTAsIDB4MDgwYywgMHhiZDNjLCAweDA1OTAsCi0JMHgwODBjLCAweGM5ZmYsIDB4MDU3OCwgMHgwODBjLCAweGQ4YjMsIDB4MDU2MCwgMHg2MjJlLCAweDYwMDcsCi0JMHgwMDM2LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDAwY2UsCi0JMHgwMGRlLCAweDAwZWUsIDB4MDAwNSwgMHg3MjE0LCAweDkyODYsIDB4ZmZmZiwgMHgwMTUwLCAweDA4MGMsCi0JMHhiZDNjLCAweDAxYzAsIDB4OTI4MCwgMHgwMDAyLCAweDIwMDQsIDB4NzExMCwgMHg5MTA2LCAweDExOTAsCi0JMHgwOGUwLCAweDcyMTAsIDB4MmMwOCwgMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHhkODA5LCAweDJjMTAsCi0JMHgyMTYwLCAweDAxNDAsIDB4MDg5MCwgMHg2MDA3LCAweDAwMzcsIDB4NjAyZiwgMHgwMDA5LCAweDYwMTcsCi0JMHgxNTAwLCAweDA4YjgsIDB4NjAwNywgMHgwMDM3LCAweDYwMmYsIDB4MDAwMywgMHg2MDE3LCAweDE3MDAsCi0JMHgwODgwLCAweDYwMDcsIDB4MDAxMiwgMHgwODY4LCAweDA4MGMsIDB4MzFiOCwgMHgxOTA0LCAweGM5NmUsCi0JMHg2MDEwLCAweDIwNTgsIDB4YjgwNCwgMHg5MDg0LCAweGZmMDAsIDB4ODAwNywgMHg5MDg2LCAweDAwMDYsCi0JMHgxOTA0LCAweGM3M2YsIDB4MDBlNiwgMHgwMGQ2LCAweDAwYzYsIDB4MDgwYywgMHg1NGRmLCAweGQwZTQsCi0JMHgwOTA0LCAweGM5MzEsIDB4MjA2OSwgMHgxODAwLCAweDIwNzEsIDB4MDI2YywgMHg3MDA4LCAweDYwM2EsCi0JMHg3MjBjLCAweDYyM2UsIDB4OTI4NiwgMHhmZmZmLCAweDExNTAsIDB4NzIwOCwgMHgwMGM2LCAweDJjMDgsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDgwYywgMHhkODA5LCAweDJjMTAsIDB4MDBjZSwgMHgwNWU4LCAweDA4MGMsCi0JMHhiZDNjLCAweDA1ZDAsIDB4NzEwOCwgMHg5MjgwLCAweDAwMDIsIDB4MjAwNCwgMHg5MTA2LCAweDE1YTAsCi0JMHgwMGM2LCAweDAwMjYsIDB4MjI2MCwgMHgwODBjLCAweGI5NzYsIDB4MDAyZSwgMHgwMGNlLCAweDcxMTgsCi0JMHg5MThjLCAweGZmMDAsIDB4ODEwZiwgMHg5MTg2LCAweDAwMDEsIDB4MDE3OCwgMHg5MTg2LCAweDAwMDUsCi0JMHgwMTE4LCAweDkxODYsIDB4MDAwNywgMHgxMTk4LCAweDkyODAsIDB4MDAwNSwgMHgyMDA0LCAweDkwMDUsCi0JMHgwMTcwLCAweDA4MGMsIDB4YzlmZiwgMHgwOTA0LCAweGM4YjIsIDB4MDA1NiwgMHg3NTEwLCAweDc2MTQsCi0JMHgwODBjLCAweGQ4Y2MsIDB4MDA1ZSwgMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDYwMDcsCi0JMHgwMDNiLCAweDYwMmYsIDB4MDAwOSwgMHg2MDE3LCAweDJhMDAsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCi0JMHg4NWY4LCAweDA4MGMsIDB4OGI4ZiwgMHgwYzc4LCAweDYwMDcsIDB4MDAzYiwgMHg2MDJmLCAweDAwMDMsCi0JMHg2MDE3LCAweDAzMDAsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsCi0JMHgwYzEwLCAweDYwMDcsIDB4MDAzYiwgMHg2MDJmLCAweDAwMGIsIDB4NjAxNywgMHgwMDAwLCAweDA4MDQsCi0JMHhjODg5LCAweDAwZTYsIDB4MDAyNiwgMHgwODBjLCAweDY2ODcsIDB4MDU1MCwgMHgwODBjLCAweDY2NzAsCi0JMHgwODBjLCAweGRhYTQsIDB4MTUxOCwgMHgyMDcxLCAweDE4MDAsIDB4NzBkOCwgMHg5MDg1LCAweDAwMDMsCi0JMHg3MGRhLCAweDAwZjYsIDB4MjA3OSwgMHgwMTAwLCAweDcyYWMsIDB4OTI4NCwgMHgwMGZmLCAweDcwN2EsCi0JMHg3OGU2LCAweDkyODQsIDB4ZmYwMCwgMHg3MjdjLCAweDkyMDUsIDB4NzA3ZSwgMHg3OGVhLCAweDAwZmUsCi0JMHg3MGUzLCAweDAwMDAsIDB4MDgwYywgMHg2NmM1LCAweDAxMjAsIDB4MjAxMSwgMHgxOWRiLCAweDIwMTMsCi0JMHgwN2QwLCAweGQwYWMsIDB4MTEyOCwgMHgwODBjLCAweDJlNzMsIDB4MDAxMCwgMHgwODBjLCAweGRhZDgsCi0JMHgwMDJlLCAweDAwZWUsIDB4MDgwYywgMHg5ZmVhLCAweDA4MDQsIDB4YzczZSwgMHgwODBjLCAweDlmZWEsCi0JMHgwMDA1LCAweDI2MDAsIDB4MDAwMiwgMHhjOTg1LCAweGM5ODUsIDB4Yzk4NSwgMHhjOTg1LCAweGM5ODUsCi0JMHhjOTg3LCAweGM5ODUsIDB4Yzk4NSwgMHhjOTg1LCAweGM5ODUsIDB4YzlhMSwgMHhjOTg1LCAweGM5ODUsCi0JMHhjOTg1LCAweGM5YjMsIDB4YzljOSwgMHhjOWZhLCAweGM5ODUsIDB4MDgwYywgMHgwZGY2LCAweDA4MGMsCi0JMHhkYTMzLCAweDFkMjAsIDB4MDgwYywgMHgzMWI4LCAweDFkMDgsIDB4NzAzOCwgMHg2MDE2LCAweDYwMDcsCi0JMHgwMDQ1LCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDg2NDAsIDB4MDAwNSwgMHgwODBjLCAweDMwOTUsCi0JMHgwODBjLCAweGM0NmUsIDB4NjAwNywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHgwODBjLCAweDg2NDAsCi0JMHgwMDA1LCAweDA4MGMsIDB4ZGEzMywgMHgxOTUwLCAweDA4MGMsIDB4MzFiOCwgMHgxOTM4LCAweDA4MGMsCi0JMHhjYjEyLCAweDFkNjAsIDB4NzAzYywgMHg2MDE2LCAweDYwMDcsIDB4MDA0YSwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDg2NDAsIDB4MDAwNSwgMHgyMDAxLCAweDE4MjMsIDB4MjAwNCwgMHg5MDgyLCAweDAwZTEsCi0JMHgxMjY4LCAweDA4MGMsIDB4Y2ExYywgMHgwOTA0LCAweGM5NmUsIDB4NjAwNywgMHgwMDRlLCAweDYwMDMsCi0JMHgwMDAxLCAweDA4MGMsIDB4ODY0MCwgMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHg2MDA3LCAweDAwMTIsCi0JMHgwY2IwLCAweDYwMDcsIDB4MDA0ZiwgMHg2MDE3LCAweDAwMDAsIDB4NzEzNCwgMHg5MThjLCAweDAwZmYsCi0JMHg4MWZmLCAweDA1MDgsIDB4OTE4NiwgMHgwMDAxLCAweDExNjAsIDB4NzE0MCwgMHgyMDAxLCAweDE5OTgsCi0JMHgyMDA0LCAweDkxMDYsIDB4MTFiMCwgMHg3MTQ0LCAweDIwMDEsIDB4MTk5OSwgMHgyMDA0LCAweDkxMDYsCi0JMHgwMTkwLCAweDkxODYsIDB4MDAwMiwgMHgxMTY4LCAweDIwMTEsIDB4MDI3NiwgMHgyMGE5LCAweDAwMDQsCi0JMHg2MDEwLCAweDAwOTYsIDB4MjA0OCwgMHgyMDE5LCAweDAwMGEsIDB4MDgwYywgMHhiMDE3LCAweDAwOWUsCi0JMHgwMTEwLCAweDYwMTcsIDB4MDAwMSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg4NjQwLCAweDA4MGMsCi0JMHg4YjhmLCAweDAwMDUsIDB4NjAwNywgMHgwMDUwLCAweDcwM2MsIDB4NjAxNiwgMHgwY2EwLCAweDAwMTYsCi0JMHgwMGU2LCAweDIwNzEsIDB4MDI2MCwgMHgwMGI2LCAweDAwYzYsIDB4MjI2MCwgMHg2MDEwLCAweDIwNTgsCi0JMHhiOGJjLCAweGQwODQsIDB4MDE1MCwgMHg3MTI4LCAweDYwNDQsIDB4OTEwNiwgMHgxMTIwLCAweDcxMmMsCi0JMHg2MDQ4LCAweDkxMDYsIDB4MDExMCwgMHg5MDA2LCAweDAwMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwY2UsCi0JMHgwMGJlLCAweDAwZWUsIDB4MDAxZSwgMHgwMDA1LCAweDAwMTYsIDB4MDA5NiwgMHgwMDg2LCAweDAwZTYsCi0JMHgwMWM2LCAweDAxZDYsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MjA3MSwgMHgxODAwLCAweDIwZTEsCi0JMHgwMDAwLCAweDIwMDEsIDB4MTk3YiwgMHgyMDAzLCAweDAwMDAsIDB4MDgwYywgMHgxMDUwLCAweDA1YTAsCi0JMHgyOTAwLCAweDYwMTYsIDB4NzA4YywgMHg4MDA0LCAweGE4MTYsIDB4OTA4YSwgMHgwMDFlLCAweDAyZDAsCi0JMHhhODMzLCAweDAwMWUsIDB4MjBhOSwgMHgwMDFlLCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDFiLCAweDIwYTAsIDB4MjAwMSwgMHgxOTdiLCAweDAwMTYsIDB4MjAwYywgMHgwNDcxLCAweDAwMWUsCi0JMHg4MWZmLCAweDAxYjgsIDB4Mjk0MCwgMHgwODBjLCAweDEwNTAsIDB4MDFiMCwgMHgyOTAwLCAweGEwMDYsCi0JMHgyMTAwLCAweDBjMTgsIDB4YTgzMiwgMHgyMGE4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsCi0JMHgwMDFiLCAweDIwYTAsIDB4MjAwMSwgMHgxOTdiLCAweDAwMTYsIDB4MjAwYywgMHgwMGIxLCAweDAwMWUsCi0JMHgwMDAwLCAweDkwODUsIDB4MDAwMSwgMHgwMDQ4LCAweDIwNzEsIDB4MTgwMCwgMHg3MDhmLCAweDAwMDAsCi0JMHg2MDE0LCAweDIwNDgsIDB4MDgwYywgMHgwZmU5LCAweDkwMDYsIDB4MDEyZSwgMHgwMWRlLCAweDAxY2UsCi0JMHgwMGVlLCAweDAwOGUsIDB4MDA5ZSwgMHgwMDFlLCAweDAwMDUsIDB4MDAwNiwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMDM2LCAweDAwYzYsIDB4OTE4YywgMHhmZmZmLCAweDExYjAsIDB4MDgwYywgMHgyMWQ5LCAweDIwOTksCi0JMHgwMjZjLCAweDIwMDEsIDB4MDAxNCwgMHgzNTE4LCAweDkzMTIsIDB4MDEwOCwgMHgxMjE4LCAweDIzYTgsCi0JMHg0MDAzLCAweDA0MDAsIDB4MjBhOCwgMHg0MDAzLCAweDIyYTgsIDB4ODEwOCwgMHgwODBjLCAweDIxZDksCi0JMHgyMDk5LCAweDAyNjAsIDB4MGNhOCwgMHgwODBjLCAweDIxZDksIDB4MjA2MSwgMHgxOTdiLCAweDYwMDQsCi0JMHgyMDk4LCAweDYwMDgsIDB4MzUxOCwgMHg5MzEyLCAweDAxMDgsIDB4MTIxOCwgMHgyM2E4LCAweDQwMDMsCi0JMHgwMDQ4LCAweDIwYTgsIDB4NDAwMywgMHgyMmE4LCAweDgxMDgsIDB4MDgwYywgMHgyMWQ5LCAweDIwOTksCi0JMHgwMjYwLCAweDBjYTgsIDB4MjA2MSwgMHgxOTdiLCAweDIwMTksIDB4MDI4MCwgMHgzMzAwLCAweDkzMWUsCi0JMHgwMTEwLCAweDYwMDYsIDB4MDAyMCwgMHgyMDAxLCAweDAyNjAsIDB4NjAwNiwgMHg4MTA4LCAweDIxNjIsCi0JMHg5MjkyLCAweDAwMjEsIDB4OTI5NiwgMHhmZmZmLCAweDYyMGEsIDB4MDBjZSwgMHgwMDNlLCAweDAwMmUsCi0JMHgwMDFlLCAweDAwMGUsIDB4MDAwNSwgMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAwYzYsCi0JMHg4MWZmLCAweDExYjgsIDB4MDgwYywgMHgyMWYxLCAweDIwYTEsIDB4MDI0YywgMHgyMDAxLCAweDAwMTQsCi0JMHgzNTE4LCAweDkzMTIsIDB4MTIxOCwgMHgyM2E4LCAweDQwMDMsIDB4MDQxOCwgMHgyMGE4LCAweDQwMDMsCi0JMHg4MmZmLCAweDAxZjgsIDB4MjJhOCwgMHg4MTA4LCAweDA4MGMsIDB4MjFmMSwgMHgyMGExLCAweDAyNDAsCi0JMHgwYzk4LCAweDA4MGMsIDB4MjFmMSwgMHgyMDYxLCAweDE5N2UsIDB4NjAwNCwgMHgyMGEwLCAweDYwMDgsCi0JMHgzNTE4LCAweDkzMTIsIDB4MTIxOCwgMHgyM2E4LCAweDQwMDMsIDB4MDA1OCwgMHgyMGE4LCAweDQwMDMsCi0JMHg4MmZmLCAweDAxMzgsIDB4MjJhOCwgMHg4MTA4LCAweDA4MGMsIDB4MjFmMSwgMHgyMGExLCAweDAyNDAsCi0JMHgwYzk4LCAweDIwNjEsIDB4MTk3ZSwgMHgyMDE5LCAweDAyNjAsIDB4MzQwMCwgMHg5MzFlLCAweDAxMTAsCi0JMHg2MDA2LCAweDAwMjAsIDB4MjAwMSwgMHgwMjQwLCAweDYwMDYsIDB4ODEwOCwgMHgyMTYyLCAweDkyOTIsCi0JMHgwMDIxLCAweDkyOTYsIDB4ZmZmZiwgMHg2MjBhLCAweDAwY2UsIDB4MDAzZSwgMHgwMDJlLCAweDAwMWUsCi0JMHgwMDBlLCAweDAwMDUsIDB4MDBiNiwgMHgwMDY2LCAweDY2MTAsIDB4MjY1OCwgMHhiZTA0LCAweDk2YjQsCi0JMHhmZjAwLCAweDg2MzcsIDB4OTY4NiwgMHgwMDA2LCAweDAxNzAsIDB4OTY4NiwgMHgwMDA0LCAweDAxNTgsCi0JMHhiZTA0LCAweDk2YjQsIDB4MDBmZiwgMHg5Njg2LCAweDAwMDYsIDB4MDEyOCwgMHg5Njg2LCAweDAwMDQsCi0JMHgwMTEwLCAweDkwODUsIDB4MDAwMSwgMHgwMDZlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGQ2LCAweDA4MGMsCi0JMHhjYmFhLCAweDAwZGUsIDB4MDAwNSwgMHgwMGQ2LCAweDA4MGMsIDB4Y2JiNywgMHgxNTIwLCAweDY4MGMsCi0JMHg5MDhjLCAweGZmMDAsIDB4NjgyMCwgMHg5MDg0LCAweDAwZmYsIDB4OTExNSwgMHg2MjE2LCAweDY4MjQsCi0JMHg2MDJlLCAweGQxZTQsIDB4MDEzMCwgMHg5MDA2LCAweDA4MGMsIDB4ZGI1MCwgMHgyMDA5LCAweDAwMDEsCi0JMHgwMDc4LCAweGQxZWMsIDB4MDE4MCwgMHg2OTIwLCAweDkxOGMsIDB4MDBmZiwgMHg2ODI0LCAweDA4MGMsCi0JMHgyNjZkLCAweDExNDgsIDB4MjAwMSwgMHgwMDAxLCAweDA4MGMsIDB4ZGI1MCwgMHgyMTEwLCAweDkwMGUsCi0JMHgwODBjLCAweDMwZGUsIDB4MDAxOCwgMHg5MDg1LCAweDAwMDEsIDB4MDAwOCwgMHg5MDA2LCAweDAwZGUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDBjNiwgMHgwODBjLCAweGEwM2IsIDB4MDVhOCwgMHgwMDE2LCAweDAwMjYsCi0JMHgwMGM2LCAweDIwMTEsIDB4MDI2MywgMHgyMjA0LCAweDgyMTEsIDB4MjIwYywgMHgwODBjLCAweDI2NmQsCi0JMHgxNTc4LCAweDA4MGMsIDB4NjM0MywgMHgxNTYwLCAweGJlMTIsIDB4YmQxNiwgMHgwMGNlLCAweDAwMmUsCi0JMHgwMDFlLCAweDJiMDAsIDB4NjAxMiwgMHgwODBjLCAweGRhMzMsIDB4MTFkOCwgMHgwODBjLCAweDMxYjgsCi0JMHgxMWMwLCAweDA4MGMsIDB4Y2IxMiwgMHgwNTEwLCAweDIwMDEsIDB4MDAwNywgMHgwODBjLCAweDYyZjQsCi0JMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2MzIwLCAweDYwMTcsIDB4MDAwMCwgMHg2MDIzLCAweDAwMDEsCi0JMHg2MDA3LCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsIDB4ODY0MCwgMHgwODBjLCAweDhiOGYsCi0JMHgwMDEwLCAweDA4MGMsIDB4OWZlYSwgMHg5MDg1LCAweDAwMDEsIDB4MDBjZSwgMHgwMGJlLCAweDAwMDUsCi0JMHgwODBjLCAweDlmZWEsIDB4MDBjZSwgMHgwMDJlLCAweDAwMWUsIDB4MGNhOCwgMHgwODBjLCAweDlmZWEsCi0JMHg5MDA2LCAweDBjOTgsIDB4MjA2OSwgMHgwMjZkLCAweDY4MDAsIDB4OTA4MiwgMHgwMDEwLCAweDEyMjgsCi0JMHg2MDE3LCAweDAwMDAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMDA1LCAweDYwMTcsCi0JMHgwMDAwLCAweDIwNjksIDB4MDI2YywgMHg2ODA4LCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LCAweDA4MDAsCi0JMHgxMTkwLCAweDY5MDQsIDB4OTE4NiwgMHgwMDE4LCAweDAxMTgsIDB4OTE4NiwgMHgwMDE0LCAweDExNTgsCi0JMHg4MTBmLCAweDY4MDAsIDB4OTA4NCwgMHgwMGZmLCAweDkxMGQsIDB4NjE1YSwgMHg5MDhlLCAweDAwMTQsCi0JMHgwMTEwLCAweDkwOGUsIDB4MDAxMCwgMHgwMDA1LCAweDYwMDQsIDB4OTBiMiwgMHgwMDUzLCAweDFhMGMsCi0JMHgwZGY2LCAweDkxYjYsIDB4MDAxMywgMHgxMTMwLCAweDIwMDgsIDB4OTFiMiwgMHgwMDQwLCAweDFhMDQsCi0JMHhjZDE3LCAweDA0MGEsIDB4OTFiNiwgMHgwMDI3LCAweDAxOTgsIDB4OTE4NiwgMHgwMDE1LCAweDAxMTgsCi0JMHg5MTg2LCAweDAwMTYsIDB4MTE0OCwgMHgwODBjLCAweGM0N2YsIDB4MDEyOCwgMHg2MDAwLCAweDkwODYsCi0JMHgwMDAyLCAweDA5MDQsIDB4YTllZSwgMHgwMDA1LCAweDkxYjYsIDB4MDAxNCwgMHgxOTBjLCAweDBkZjYsCi0JMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2MzIwLCAweDA4MGMsIDB4OGE4MywgMHgwODBjLCAweGEwMWMsCi0JMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHhjYzQzLCAweGNjNDUsIDB4Y2M0MywgMHhjYzQzLCAweGNjNDMsCi0JMHhjYzQ1LCAweGNjNTQsIDB4Y2QxMCwgMHhjYzk4LCAweGNkMTAsIDB4Y2NiZSwgMHhjZDEwLCAweGNjNTQsCi0JMHhjZDEwLCAweGNkMDgsIDB4Y2QxMCwgMHhjZDA4LCAweGNkMTAsIDB4Y2QxMCwgMHhjYzQzLCAweGNjNDMsCi0JMHhjYzQzLCAweGNjNDMsIDB4Y2M0MywgMHhjYzQzLCAweGNjNDMsIDB4Y2M0MywgMHhjYzQzLCAweGNjNDMsCi0JMHhjYzQzLCAweGNjNDUsIDB4Y2M0MywgMHhjZDEwLCAweGNjNDMsIDB4Y2M0MywgMHhjZDEwLCAweGNjNDMsCi0JMHhjZDBkLCAweGNkMTAsIDB4Y2M0MywgMHhjYzQzLCAweGNjNDMsIDB4Y2M0MywgMHhjZDEwLCAweGNkMTAsCi0JMHhjYzQzLCAweGNkMTAsIDB4Y2QxMCwgMHhjYzQzLCAweGNjNGYsIDB4Y2M0MywgMHhjYzQzLCAweGNjNDMsCi0JMHhjYzQzLCAweGNkMGMsIDB4Y2QxMCwgMHhjYzQzLCAweGNjNDMsIDB4Y2QxMCwgMHhjZDEwLCAweGNjNDMsCi0JMHhjYzQzLCAweGNjNDMsIDB4Y2M0MywgMHgwODBjLCAweDBkZjYsIDB4MDgwYywgMHg4YTgzLCAweDA4MGMsCi0JMHhjNDcxLCAweDYwMDMsIDB4MDAwMiwgMHgwODBjLCAweDhiOGYsIDB4MDgwNCwgMHhjZDE2LCAweDkwMDYsCi0JMHgwODBjLCAweDYyZTAsIDB4MDgwNCwgMHhjZDEwLCAweDA4MGMsIDB4NjZjMSwgMHgxOTA0LCAweGNkMTAsCi0JMHg5MDA2LCAweDA4MGMsIDB4NjJlMCwgMHg2MDEwLCAweDIwNTgsIDB4YjgxMCwgMHg5MDg2LCAweDAwZmYsCi0JMHgxMTQwLCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDc4YTQsIDB4ODAwMCwgMHg3OGE2LCAweDAwZmUsCi0JMHgwMGI4LCAweDYwMTAsIDB4MjA1OCwgMHhiOGIwLCAweDkwMDUsIDB4MDkwNCwgMHhjZDEwLCAweDA4MGMsCi0JMHgzMWU5LCAweDE5MDQsIDB4Y2QxMCwgMHgyMDAxLCAweDE4MDAsIDB4MjAwNCwgMHg5MDg2LCAweDAwMDIsCi0JMHgxMTM4LCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDc4YTQsIDB4ODAwMCwgMHg3OGE2LCAweDAwZmUsCi0JMHgyMDAxLCAweDAwMDIsIDB4MDgwYywgMHg2MmY0LCAweDA4MGMsIDB4OGE4MywgMHg2MDIzLCAweDAwMDEsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDAyLCAweDA4MGMsIDB4ODY0MCwgMHgwODBjLCAweDhiOGYsCi0JMHg2MTEwLCAweDIxNTgsIDB4MjAwOSwgMHgwMDAxLCAweDA4MGMsIDB4ODI2NywgMHgwODA0LCAweGNkMTYsCi0JMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwgMHg5NmI0LCAweGZmMDAsIDB4ODYzNywgMHg5Njg2LCAweDAwMDYsCi0JMHgwMTM4LCAweDk2ODYsIDB4MDAwNCwgMHgwMTIwLCAweDIwMDEsIDB4MDAwNCwgMHgwODBjLCAweDYzMjAsCi0JMHgwODBjLCAweGRiOWYsIDB4MDkwNCwgMHhjZDEwLCAweDA4MGMsIDB4OGE4MywgMHgyMDAxLCAweDAwMDQsCi0JMHgwODBjLCAweDYyZjQsIDB4NjAyMywgMHgwMDAxLCAweDYwMDMsIDB4MDAwMSwgMHg2MDA3LCAweDAwMDMsCi0JMHgwODBjLCAweDg2NDAsIDB4MDgwYywgMHg4YjhmLCAweDA4MDQsIDB4Y2QxNiwgMHgyMDAxLCAweDE4MDAsCi0JMHgyMDA0LCAweDkwODYsIDB4MDAwMywgMHgxMTU4LCAweDAwMzYsIDB4MDA0NiwgMHg2MDEwLCAweDIwNTgsCi0JMHhiYmEwLCAweDIwMjEsIDB4MDAwNiwgMHgwODBjLCAweDRiYjQsIDB4MDA0ZSwgMHgwMDNlLCAweDIwMDEsCi0JMHgwMDA2LCAweDA4MGMsIDB4Y2QzNCwgMHg2NjEwLCAweDI2NTgsIDB4YmUwNCwgMHgwMDY2LCAweDk2YjQsCi0JMHhmZjAwLCAweDg2MzcsIDB4OTY4NiwgMHgwMDA2LCAweDAwNmUsIDB4MDE4MCwgMHgyMDAxLCAweDAwMDYsCi0JMHgwODBjLCAweDYzMjAsIDB4OTI4NCwgMHgwMGZmLCAweDkwOGUsIDB4MDAwNywgMHgwMTE4LCAweDkwOGUsCi0JMHgwMDA0LCAweDExMjAsIDB4MjAwMSwgMHgwMDA2LCAweDA4MGMsIDB4NjJmNCwgMHgwODBjLCAweDY2YzEsCi0JMHgxMWY4LCAweDIwMDEsIDB4MTgzNiwgMHgyMDA0LCAweGQwYTQsIDB4MDFkMCwgMHhiZTA0LCAweDk2YjQsCi0JMHgwMGZmLCAweDk2ODYsIDB4MDAwNiwgMHgwMWEwLCAweDAwZjYsIDB4MjA3OSwgMHgxODAwLCAweDc4YTQsCi0JMHg4MDAwLCAweDc4YTYsIDB4MDBmZSwgMHgwODA0LCAweGNjODAsIDB4MjAwMSwgMHgwMDA0LCAweDAwMzAsCi0JMHgyMDAxLCAweDAwMDYsIDB4MDQ0OSwgMHgwMDIwLCAweDAwMTgsIDB4MDAxMCwgMHgwODBjLCAweDYzMjAsCi0JMHgwODBjLCAweDhhODMsIDB4MDgwYywgMHg5ZmVhLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDI2MDAsCi0JMHgwMDAyLCAweGNkMmIsIDB4Y2QyYiwgMHhjZDJiLCAweGNkMmIsIDB4Y2QyYiwgMHhjZDJkLCAweGNkMmIsCi0JMHhjZDJiLCAweGNkMmIsIDB4Y2QyYiwgMHhjZDJkLCAweGNkMmIsIDB4Y2QyYiwgMHhjZDJiLCAweGNkMmQsCi0JMHhjZDJkLCAweGNkMmQsIDB4Y2QyZCwgMHgwODBjLCAweDBkZjYsIDB4MDgwYywgMHg4YTgzLCAweDA4MGMsCi0JMHg5ZmVhLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDAwMTYsIDB4MDBiNiwgMHgwMGQ2LCAweDYxMTAsCi0JMHgyMTU4LCAweGI5MDAsIDB4ZDE4NCwgMHgwMTM4LCAweDA4MGMsIDB4NjJmNCwgMHg5MDA2LCAweDA4MGMsCi0JMHg2MmUwLCAweDA4MGMsIDB4MzBiZSwgMHgwMGRlLCAweDAwYmUsIDB4MDAxZSwgMHgwMDA1LCAweDY2MTAsCi0JMHgyNjU4LCAweGI4MDQsIDB4OTA4NCwgMHhmZjAwLCAweDgwMDcsIDB4OTBiMiwgMHgwMDBjLCAweDFhMGMsCi0JMHgwZGY2LCAweDkxYjYsIDB4MDAxNSwgMHgxMTEwLCAweDAwM2IsIDB4MDAyOCwgMHg5MWI2LCAweDAwMTYsCi0JMHgxOTBjLCAweDBkZjYsIDB4MDA2YiwgMHgwMDA1LCAweGFhODgsIDB4YWE4OCwgMHhhYTg4LCAweGFhODgsCi0JMHhjZGM5LCAweGFhODgsIDB4Y2RiMywgMHhjZDc0LCAweGFhODgsIDB4YWE4OCwgMHhhYTg4LCAweGFhODgsCi0JMHhhYTg4LCAweGFhODgsIDB4YWE4OCwgMHhhYTg4LCAweGNkYzksIDB4YWE4OCwgMHhjZGIzLCAweGNkYmEsCi0JMHhhYTg4LCAweGFhODgsIDB4YWE4OCwgMHhhYTg4LCAweDAwZjYsIDB4MDgwYywgMHg2NmMxLCAweDExZDgsCi0JMHgwODBjLCAweGM0NTksIDB4MTFjMCwgMHg2MDEwLCAweDkwNWQsIDB4MDFhOCwgMHhiOGIwLCAweDkwMDUsCi0JMHgwMTkwLCAweDkwMDYsIDB4MDgwYywgMHg2MmUwLCAweDIwMDEsIDB4MDAwMiwgMHgwODBjLCAweDYyZjQsCi0JMHg2MDIzLCAweDAwMDEsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsIDB4MDAwMiwgMHgwODBjLCAweDg2NDAsCi0JMHgwODBjLCAweDhiOGYsIDB4MDBmMCwgMHgyMDExLCAweDAyNjMsIDB4MjIwNCwgMHg4MjExLCAweDIyMGMsCi0JMHgwODBjLCAweDI2NmQsIDB4MTFiMCwgMHgwODBjLCAweDYzYTMsIDB4MDExOCwgMHgwODBjLCAweDlmZWEsCi0JMHgwMDgwLCAweGI4MTAsIDB4MDAwNiwgMHhiODE0LCAweDAwMDYsIDB4YjhiMCwgMHgwMDA2LCAweDA4MGMsCi0JMHg1ZTQ5LCAweDAwMGUsIDB4YjhiMiwgMHgwMDBlLCAweGI4MTYsIDB4MDAwZSwgMHhiODEyLCAweDA4MGMsCi0JMHg5ZmVhLCAweDAwZmUsIDB4MDAwNSwgMHg2NjA0LCAweDk2YjYsIDB4MDAxZSwgMHgxMTEwLCAweDA4MGMsCi0JMHg5ZmVhLCAweDAwMDUsIDB4MDgwYywgMHhhZThhLCAweDExNDgsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCi0JMHgwMDAxLCAweDA4MGMsIDB4ODY0MCwgMHgwODBjLCAweDhiOGYsIDB4MDAxMCwgMHgwODBjLCAweDlmZWEsCi0JMHgwMDA1LCAweDA4MDQsIDB4OWZlYSwgMHg2MDA0LCAweDkwOGEsIDB4MDA1MywgMHgxYTBjLCAweDBkZjYsCi0JMHgwODBjLCAweDhhODMsIDB4MDgwYywgMHhhMDFjLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDkxODIsCi0JMHgwMDQwLCAweDAwMDIsIDB4Y2RlZSwgMHhjZGVlLCAweGNkZWUsIDB4Y2RlZSwgMHhjZGYwLCAweGNkZWUsCi0JMHhjZGVlLCAweGNkZWUsIDB4Y2RlZSwgMHhjZGVlLCAweGNkZWUsIDB4Y2RlZSwgMHhjZGVlLCAweGNkZWUsCi0JMHhjZGVlLCAweGNkZWUsIDB4Y2RlZSwgMHhjZGVlLCAweGNkZWUsIDB4Y2RlZSwgMHgwODBjLCAweDBkZjYsCi0JMHgwMDk2LCAweDAwYjYsIDB4MDBkNiwgMHgwMGU2LCAweDAwZjYsIDB4MDA0NiwgMHgwMDI2LCAweDYyMTAsCi0JMHgyMjU4LCAweGI4YWMsIDB4OTAwNSwgMHgxMWE4LCAweDYxMDYsIDB4MjA3MSwgMHgwMjYwLCAweDc0NDQsCi0JMHg5NGE0LCAweGZmMDAsIDB4MDkwNCwgMHhjZTU2LCAweDA4MGMsIDB4ZGI0NCwgMHgxMTcwLCAweDk0ODYsCi0JMHgyMDAwLCAweDExNTgsIDB4MjAwOSwgMHgwMDAxLCAweDIwMTEsIDB4MDIwMCwgMHgwODBjLCAweDg0NTAsCi0JMHgwMDIwLCAweDkwMjYsIDB4MDgwYywgMHhkYTc4LCAweDBjMzgsIDB4MDgwYywgMHgxMDM3LCAweDA5MGMsCi0JMHgwZGY2LCAweDYwMDMsIDB4MDAwNywgMHhhODY3LCAweDAxMGQsIDB4OTAwNiwgMHhhODAyLCAweGE4NmEsCi0JMHhhYzhhLCAweDJjMDAsIDB4YTg4ZSwgMHg2MDA4LCAweGE4ZTIsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsCi0JMHg3MTMwLCAweGE5N2EsIDB4MDAxNiwgMHhhODc2LCAweGE4N2YsIDB4MDAwMCwgMHhhODgzLCAweDAwMDAsCi0JMHhhODg3LCAweDAwMzYsIDB4MDgwYywgMHg2YTIyLCAweDAwMWUsIDB4MDgwYywgMHhkYjQ0LCAweDE5MDQsCi0JMHhjZWI2LCAweDk0ODYsIDB4MjAwMCwgMHgxMTMwLCAweDIwMTksIDB4MDAxNywgMHgwODBjLCAweGQ3YWYsCi0JMHgwODA0LCAweGNlYjYsIDB4OTQ4NiwgMHgwMjAwLCAweDExMjAsIDB4MDgwYywgMHhkNzQ2LCAweDA4MDQsCi0JMHhjZWI2LCAweDk0ODYsIDB4MDQwMCwgMHgwMTIwLCAweDk0ODYsIDB4MTAwMCwgMHgxOTA0LCAweGNlYjYsCi0JMHgyMDE5LCAweDAwMDIsIDB4MDgwYywgMHhkNzYxLCAweDA4MDQsIDB4Y2ViNiwgMHgyMDY5LCAweDFhNGMsCi0JMHg2YTAwLCAweGQyODQsIDB4MDkwNCwgMHhjZjIwLCAweDkyODQsIDB4MDMwMCwgMHgxOTA0LCAweGNmMTksCi0JMHg2ODA0LCAweDkwMDUsIDB4MDkwNCwgMHhjZjAxLCAweDJkNzgsIDB4NjAwMywgMHgwMDA3LCAweDA4MGMsCi0JMHgxMDUwLCAweDA5MDQsIDB4Y2VjMiwgMHg3ODAwLCAweGQwOGMsIDB4MTExOCwgMHg3ODA0LCAweDgwMDEsCi0JMHg3ODA2LCAweDYwMTcsIDB4MDAwMCwgMHgyMDAxLCAweDE4MGYsIDB4MjAwNCwgMHhkMDg0LCAweDE5MDQsCi0JMHhjZjI0LCAweDkwMDYsIDB4YTgwMiwgMHhhODY3LCAweDAxMTYsIDB4YTg2YSwgMHg2MDA4LCAweGE4ZTIsCi0JMHgyYzAwLCAweGE4N2EsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsIDB4NzEzMCwgMHhhOWI2LCAweGE4NzYsCi0JMHhiOTI4LCAweGE5YmEsIDB4YjkyYywgMHhhOWJlLCAweGI5MzAsIDB4YTljMiwgMHhiOTM0LCAweGE5YzYsCi0JMHhhODgzLCAweDAwM2QsIDB4NzA0NCwgMHg5MDg0LCAweDAwMDMsIDB4OTA4MCwgMHhjZWJlLCAweDIwMDUsCi0JMHhhODdlLCAweDIwYTksIDB4MDAwYSwgMHgyMDAxLCAweDAyNzAsIDB4YWE1YywgMHg5MjkwLCAweDAwMjEsCi0JMHgyMDA5LCAweDAyMDUsIDB4MjAwYiwgMHgwMDgwLCAweDIwZTEsIDB4MDAwMCwgMHhhYjYwLCAweDIzZTgsCi0JMHgyMDk4LCAweDIyYTAsIDB4NDAwMywgMHgyMDBiLCAweDAwMDAsIDB4MjAwMSwgMHgwMjdhLCAweDIwMGMsCi0JMHhhOWIyLCAweDgwMDAsIDB4MjAwYywgMHhhOWFlLCAweDA4MGMsIDB4NmEyMiwgMHgwMDJlLCAweDAwNGUsCi0JMHgwMGZlLCAweDAwZWUsIDB4MDBkZSwgMHgwMGJlLCAweDAwOWUsIDB4MDAwNSwgMHgwMDAwLCAweDAwODAsCi0JMHgwMDQwLCAweDAwMDAsIDB4MjAwMSwgMHgxODEwLCAweDIwMDQsIDB4ZDA4NCwgMHgwMTIwLCAweDA4MGMsCi0JMHgxMDM3LCAweDE5MDQsIDB4Y2U2YiwgMHg2MDE3LCAweGYxMDAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCi0JMHgwMDQxLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsIDB4MGMwMCwgMHgyMDY5LCAweDAyNjAsCi0JMHg2ODQ4LCAweDkwODQsIDB4ZmYwMCwgMHg5MDg2LCAweDEyMDAsIDB4MTE5OCwgMHg2ODZjLCAweDkwODQsCi0JMHgwMGZmLCAweDAwMTYsIDB4NjExNCwgMHg5MThjLCAweGY3MDAsIDB4OTEwZCwgMHg2MTE2LCAweDAwMWUsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjAwNywgMHgwMDQzLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsCi0JMHgwODI4LCAweDY4NjgsIDB4NjAyZSwgMHg2ODZjLCAweDYwMzIsIDB4NjAxNywgMHhmMjAwLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDA4MDQsCi0JMHhjZWI2LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZWMsIDB4MDEyMCwgMHgyMDExLCAweDgwNDksCi0JMHgwODBjLCAweDRhMTcsIDB4NjAxNywgMHhmMzAwLCAweDAwMTAsIDB4NjAxNywgMHhmMTAwLCAweDYwMDMsCi0JMHgwMDAxLCAweDYwMDcsIDB4MDA0MSwgMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDA4MDQsCi0JMHhjZWI2LCAweDYwMTcsIDB4ZjUwMCwgMHgwYzk4LCAweDYwMTcsIDB4ZjYwMCwgMHgwODA0LCAweGNlZDYsCi0JMHg2MDE3LCAweGYyMDAsIDB4MDgwNCwgMHhjZWQ2LCAweGE4NjcsIDB4MDE0NiwgMHhhODZiLCAweDAwMDAsCi0JMHg2MDA4LCAweGE4ODYsIDB4MmMwMCwgMHhhODdhLCAweDcwNDQsIDB4OTA4NCwgMHgwMDAzLCAweDkwODAsCi0JMHhjZWJlLCAweDIwMDUsIDB4YTg3ZSwgMHgyOTI4LCAweDYwMTAsIDB4MjA1OCwgMHhiOGEwLCAweGE4NzYsCi0JMHhiODI4LCAweGE4OGEsIDB4YjgyYywgMHhhODhlLCAweGI4MzAsIDB4YTg5MiwgMHhiODM0LCAweGE4OTYsCi0JMHhhODgzLCAweDAwM2QsIDB4MjAwOSwgMHgwMjA1LCAweDIxMDQsIDB4OTA4NSwgMHgwMDgwLCAweDIwMGEsCi0JMHgyMGUxLCAweDAwMDAsIDB4MjAxMSwgMHgwMjEwLCAweDIyMTQsIDB4OTI5NCwgMHgwZmZmLCAweGFhYTIsCi0JMHg5MjgyLCAweDAxMTEsIDB4MWEwYywgMHgwZGY2LCAweDgyMTAsIDB4ODIxYywgMHgyMDAxLCAweDAyNmMsCi0JMHgyMDk4LCAweGE4NjAsIDB4MjBlOCwgMHhhODVjLCAweDkwODAsIDB4MDAyOSwgMHgyMGEwLCAweDIwMTEsCi0JMHhjZmEwLCAweDIwNDEsIDB4MDAwMSwgMHgyMjNkLCAweDk3ODQsIDB4MDBmZiwgMHg5MzIyLCAweDEyMDgsCi0JMHgyMzAwLCAweDIwYTgsIDB4NDAwMywgMHg5MzFhLCAweDA1MzAsIDB4ODIxMCwgMHhkN2ZjLCAweDExMzAsCi0JMHg4ZDY4LCAweDJkMGEsIDB4MjAwMSwgMHgwMjYwLCAweDIwOTgsIDB4MGM2OCwgMHgyOTUwLCAweDA4MGMsCi0JMHgxMDUwLCAweDAxNzAsIDB4MjkwMCwgMHhiMDAyLCAweGE4NjcsIDB4MDE0NywgMHhhODZiLCAweDAwMDAsCi0JMHhhODYwLCAweDIwZTgsIDB4YTg1YywgMHg5MDgwLCAweDAwMWIsIDB4MjBhMCwgMHg4ODQwLCAweDA4ZDgsCi0JMHgyNTQ4LCAweGE4MDAsIDB4OTAyZCwgMHgwMTE4LCAweDA4MGMsIDB4MTA2OSwgMHgwY2M4LCAweDA4MGMsCi0JMHgxMDY5LCAweDA4MDQsIDB4Y2VjMiwgMHgyNTQ4LCAweDg4NDcsIDB4OTg4NSwgMHgwMDQ2LCAweGE4NjYsCi0JMHgyMDA5LCAweDAyMDUsIDB4MjAwYiwgMHgwMDAwLCAweDA4MGMsIDB4ZDdlMiwgMHgwODA0LCAweGNlYjYsCi0JMHg4MDEwLCAweDAwMDQsIDB4ODAxYSwgMHgwMDA2LCAweDgwMTgsIDB4MDAwOCwgMHg4MDE2LCAweDAwMGEsCi0JMHg4MDE0LCAweDkxODYsIDB4MDAxMywgMHgxMTYwLCAweDYwMDQsIDB4OTA4YSwgMHgwMDU0LCAweDFhMGMsCi0JMHgwZGY2LCAweDkwODIsIDB4MDA0MCwgMHgwYTBjLCAweDBkZjYsIDB4MjAwOCwgMHgwODA0LCAweGQwMmYsCi0JMHg5MTg2LCAweDAwNTEsIDB4MDEwOCwgMHgwMDQ4LCAweDA4MGMsIDB4YzQ3ZiwgMHgwNTAwLCAweDYwMDAsCi0JMHg5MDg2LCAweDAwMDIsIDB4MTFlMCwgMHgwODA0LCAweGQwNzgsIDB4OTE4NiwgMHgwMDI3LCAweDAxOTAsCi0JMHg5MTg2LCAweDAwNDgsIDB4MDEyOCwgMHg5MTg2LCAweDAwMTQsIDB4MDE2MCwgMHgxOTBjLCAweDBkZjYsCi0JMHgwODBjLCAweGM0N2YsIDB4MDE2MCwgMHg2MDAwLCAweDkwODYsIDB4MDAwNCwgMHgxOTBjLCAweDBkZjYsCi0JMHgwODA0LCAweGQxNWIsIDB4NjAwNCwgMHg5MDgyLCAweDAwNDAsIDB4MjAwOCwgMHgwMDFhLCAweDA4MGMsCi0JMHhhMDgzLCAweDAwMDUsIDB4Y2ZmNiwgMHhjZmY4LCAweGNmZjgsIDB4ZDAxZiwgMHhjZmY2LCAweGNmZjYsCi0JMHhjZmY2LCAweGNmZjYsIDB4Y2ZmNiwgMHhjZmY2LCAweGNmZjYsIDB4Y2ZmNiwgMHhjZmY2LCAweGNmZjYsCi0JMHhjZmY2LCAweGNmZjYsIDB4Y2ZmNiwgMHhjZmY2LCAweGNmZjYsIDB4Y2ZmNiwgMHgwODBjLCAweDBkZjYsCi0JMHgwODBjLCAweDhhODMsIDB4MDgwYywgMHg4YjhmLCAweDAwMzYsIDB4MDA5NiwgMHg2MDE0LCAweDkwNGQsCi0JMHgwMWQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwMWMwLCAweDYwMDMsIDB4MDAwMiwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4MDAsIDB4MDBiZSwgMHhkMGJjLCAweDExNzgsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsCi0JMHhkN2UyLCAweDYwMTcsIDB4MDAwMCwgMHg2MDE4LCAweDkwMDUsIDB4MTEyMCwgMHgyMDAxLCAweDE5NjEsCi0JMHgyMDA0LCAweDYwMWEsIDB4NjAwMywgMHgwMDA3LCAweDAwOWUsIDB4MDAzZSwgMHgwMDA1LCAweDAwOTYsCi0JMHgwODBjLCAweDhhODMsIDB4MDgwYywgMHg4YjhmLCAweDA4MGMsIDB4YmQ0ZSwgMHgwMTIwLCAweDYwMTQsCi0JMHgyMDQ4LCAweDA4MGMsIDB4MTA2OSwgMHgwODBjLCAweGEwMWMsIDB4MDA5ZSwgMHgwMDA1LCAweDAwMDIsCi0JMHhkMDQ0LCAweGQwNWIsIDB4ZDA0NiwgMHhkMDcyLCAweGQwNDQsIDB4ZDA0NCwgMHhkMDQ0LCAweGQwNDQsCi0JMHhkMDQ0LCAweGQwNDQsIDB4ZDA0NCwgMHhkMDQ0LCAweGQwNDQsIDB4ZDA0NCwgMHhkMDQ0LCAweGQwNDQsCi0JMHhkMDQ0LCAweGQwNDQsIDB4ZDA0NCwgMHhkMDQ0LCAweDA4MGMsIDB4MGRmNiwgMHgwMDk2LCAweDA4MGMsCi0JMHg4YTgzLCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwYjQsIDB4MDEzOCwgMHg2MDAzLCAweDAwMDcsCi0JMHgyMDA5LCAweDAwNDMsIDB4MDgwYywgMHhhMDY4LCAweDAwMTAsIDB4NjAwMywgMHgwMDA0LCAweDA4MGMsCi0JMHg4YjhmLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweDhhODMsIDB4MDgwYywgMHhiZDRlLCAweDAxMzgsCi0JMHg2MTE0LCAweDAwOTYsIDB4MjE0OCwgMHhhOTdjLCAweDAwOWUsIDB4ZDFlYywgMHgxMTM4LCAweDA4MGMsCi0JMHg4NDI1LCAweDA4MGMsIDB4OWZlYSwgMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHgwODBjLCAweGRhM2MsCi0JMHgwZGIwLCAweDBjYzgsIDB4MDgwYywgMHg4YTgzLCAweDIwMDksIDB4MDA0MSwgMHgwODA0LCAweGQxZTMsCi0JMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHhkMDhmLCAweGQwOTEsIDB4ZDA4ZiwgMHhkMDhmLCAweGQwOGYsCi0JMHhkMDhmLCAweGQwOGYsIDB4ZDA4ZiwgMHhkMDhmLCAweGQwOGYsIDB4ZDA4ZiwgMHhkMDhmLCAweGQwOGYsCi0JMHhkMDhmLCAweGQwOGYsIDB4ZDA4ZiwgMHhkMDhmLCAweGQwOTIsIDB4ZDA4ZiwgMHhkMDhmLCAweDA4MGMsCi0JMHgwZGY2LCAweDAwMDUsIDB4MDBkNiwgMHgwODBjLCAweDg0MjUsIDB4MDBkZSwgMHgwODBjLCAweGRhOTQsCi0JMHgwODBjLCAweDlmZWEsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHhkMGIyLCAweGQwYjIsCi0JMHhkMGIyLCAweGQwYjIsIDB4ZDBiMiwgMHhkMGIyLCAweGQwYjIsIDB4ZDBiMiwgMHhkMGIyLCAweGQwYjQsCi0JMHhkMTIzLCAweGQwYjIsIDB4ZDBiMiwgMHhkMGIyLCAweGQwYjIsIDB4ZDEyMywgMHhkMGIyLCAweGQwYjIsCi0JMHhkMGIyLCAweGQwYjIsIDB4MDgwYywgMHgwZGY2LCAweDIwMDEsIDB4MDEwNSwgMHgyMDA0LCAweDkwODQsCi0JMHgxODAwLCAweDAxYzgsIDB4MjAwMSwgMHgwMTMyLCAweDIwMGMsIDB4MjAwMSwgMHgwMTMxLCAweDIwMDQsCi0JMHg5MTA1LCAweDE5MDQsIDB4ZDEyMywgMHgyMDA5LCAweDE4MGMsIDB4MjEwNCwgMHhkMGQ0LCAweDA5MDQsCi0JMHhkMTIzLCAweGMwZDQsIDB4MjAwYSwgMHgyMDA5LCAweDAxMDUsIDB4MjEwNCwgMHg5MDg0LCAweGU3ZmQsCi0JMHg5MDg1LCAweDAwMTAsIDB4MjAwYSwgMHgyMDAxLCAweDE4N2IsIDB4MjAwNCwgMHhkMGU0LCAweDE1MjgsCi0JMHg2MDNiLCAweDAwMDAsIDB4MDgwYywgMHg4YjNmLCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4N2MsCi0JMHhkMGZjLCAweDAxODgsIDB4OTA4YywgMHgwMDAzLCAweDkxOGUsIDB4MDAwMiwgMHgwNTA4LCAweDIwMDEsCi0JMHgxODBjLCAweDIwMDQsIDB4ZDBkNCwgMHgxMWUwLCAweDA4MGMsIDB4OGM2YywgMHgyMDA5LCAweDAwNDEsCi0JMHgwMDllLCAweDA4MDQsIDB4ZDFlMywgMHgwODBjLCAweDhjNmMsIDB4NjAwMywgMHgwMDA3LCAweDYwMWIsCi0JMHgwMDAwLCAweDA4MGMsIDB4ODQyNSwgMHgwMDllLCAweDAwMDUsIDB4MjAwMSwgMHgwMTAwLCAweDIwMDQsCi0JMHg5MDgyLCAweDAwMDUsIDB4MGFhOCwgMHgyMDAxLCAweDAxMWYsIDB4MjAwNCwgMHg2MDNhLCAweDA4OTAsCi0JMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMWQ0LCAweDIxMDIsIDB4ZDFjYywgMHgwMTEwLCAweDA4MGMsCi0JMHgyYWIxLCAweDA4MGMsIDB4OGM2YywgMHg2MDE0LCAweDIwNDgsIDB4YTk3YywgMHhkMWVjLCAweDExMzAsCi0JMHgwODBjLCAweDg0MjUsIDB4MDgwYywgMHg5ZmVhLCAweDAwOWUsIDB4MDAwNSwgMHgwODBjLCAweGRhM2MsCi0JMHgwZGI4LCAweDAwOWUsIDB4MDAwNSwgMHgyMDAxLCAweDE4MGMsIDB4MjAwYywgMHhjMWQ0LCAweDIxMDIsCi0JMHgwMDM2LCAweDA4MGMsIDB4OGIzZiwgMHgwODBjLCAweDhjNmMsIDB4NjAxNCwgMHgwMDk2LCAweDIwNDgsCi0JMHg2MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiODAwLCAweDAwYmUsIDB4ZDBiYywgMHgwMTg4LCAweGE4N2MsCi0JMHg5MDg0LCAweDAwMDMsIDB4OTA4NiwgMHgwMDAyLCAweDAxNDAsIDB4YThhYywgMHg2MzMwLCAweDkzMWEsCi0JMHg2MzMyLCAweGE4YjAsIDB4NjMyYywgMHg5MzFiLCAweDYzMmUsIDB4NjAwMywgMHgwMDAyLCAweDAwODAsCi0JMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHhkN2UyLCAweDYwMTgsIDB4OTAwNSwgMHgxMTI4LCAweDIwMDEsCi0JMHgxOTYxLCAweDIwMDQsIDB4ODAwMywgMHg2MDFhLCAweDYwMTcsIDB4MDAwMCwgMHg2MDAzLCAweDAwMDcsCi0JMHgwMDllLCAweDAwM2UsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsIDB4MDAwMiwgMHhkMTcyLCAweGQxNzIsCi0JMHhkMTcyLCAweGQxNzIsIDB4ZDE3MiwgMHhkMTcyLCAweGQxNzIsIDB4ZDE3MiwgMHhkMTc0LCAweGQxNzIsCi0JMHhkMTcyLCAweGQxNzIsIDB4ZDE3MiwgMHhkMTcyLCAweGQxNzIsIDB4ZDE3MiwgMHhkMTcyLCAweGQxNzIsCi0JMHhkMTcyLCAweGQxYmYsIDB4MDgwYywgMHgwZGY2LCAweDYwMTQsIDB4MDA5NiwgMHgyMDQ4LCAweGE4MzQsCi0JMHhhYTM4LCAweDYxMTAsIDB4MDBiNiwgMHgyMTU4LCAweGI5MDAsIDB4MDBiZSwgMHhkMWJjLCAweDExOTAsCi0JMHg5MjBkLCAweDE1MTgsIDB4YTg3YywgMHhkMGZjLCAweDAxMjgsIDB4MjAwOSwgMHgwMDQxLCAweDAwOWUsCi0JMHgwODA0LCAweGQxZTMsIDB4NjAwMywgMHgwMDA3LCAweDYwMWIsIDB4MDAwMCwgMHgwODBjLCAweDg0MjUsCi0JMHgwMDllLCAweDAwMDUsIDB4NjEyNCwgMHhkMWY0LCAweDFkNTgsIDB4MDAwNiwgMHgwMDQ2LCAweGFjYWMsCi0JMHg5NDIyLCAweGE5YjAsIDB4MjIwMCwgMHg5MTBiLCAweDYwMzAsIDB4OTQyMCwgMHg2NDMyLCAweDYwMmMsCi0JMHg5MTA5LCAweDYxMmUsIDB4MDA0ZSwgMHgwMDBlLCAweDA4ZDgsIDB4NjExMCwgMHgwMGI2LCAweDIxNTgsCi0JMHhiOTAwLCAweDAwYmUsIDB4ZDFiYywgMHgxMTc4LCAweDIwMDksIDB4MTgwZSwgMHgyMTBjLCAweGQxOWMsCi0JMHgwMTE4LCAweDYwMDMsIDB4MDAwNywgMHgwMDEwLCAweDYwMDMsIDB4MDAwNiwgMHgwMGU5LCAweDA4MGMsCi0JMHg4NDI3LCAweDAwOWUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDIsIDB4MDA5ZSwgMHgwMDA1LCAweDYwMjQsCi0JMHhkMGY0LCAweDAxMjgsIDB4MDgwYywgMHgxNTc3LCAweDE5MDQsIDB4ZDE3NCwgMHgwMDA1LCAweDYwMTQsCi0JMHgwMDk2LCAweDIwNDgsIDB4YTgzNCwgMHhhOTM4LCAweDAwOWUsIDB4OTEwNSwgMHgxMTIwLCAweDA4MGMsCi0JMHgxNTc3LCAweDE5MDQsIDB4ZDE3NCwgMHgwMDA1LCAweGQyZmMsIDB4MDE0MCwgMHg4MDAyLCAweDgwMDAsCi0JMHg4MjEyLCAweDkyOTEsIDB4MDAwMCwgMHgyMDA5LCAweDAwMDksIDB4MDAxMCwgMHgyMDA5LCAweDAwMTUsCi0JMHhhYTlhLCAweGE4OTYsIDB4MDAwNSwgMHg5MTgyLCAweDAwNDAsIDB4MDIwOCwgMHgwMDYyLCAweDkxODYsCi0JMHgwMDEzLCAweDAxMjAsIDB4OTE4NiwgMHgwMDE0LCAweDE5MGMsIDB4MGRmNiwgMHg2MDI0LCAweGQwZGMsCi0JMHgwOTBjLCAweDBkZjYsIDB4MDAwNSwgMHhkMjA3LCAweGQyMTMsIDB4ZDIxZiwgMHhkMjJiLCAweGQyMDcsCi0JMHhkMjA3LCAweGQyMDcsIDB4ZDIwNywgMHhkMjBlLCAweGQyMDksIDB4ZDIwOSwgMHhkMjA3LCAweGQyMDcsCi0JMHhkMjA3LCAweGQyMDcsIDB4ZDIwOSwgMHhkMjA3LCAweGQyMDksIDB4ZDIwNywgMHhkMjBlLCAweDA4MGMsCi0JMHgwZGY2LCAweDYwMjQsIDB4ZDBkYywgMHgwOTBjLCAweDBkZjYsIDB4MDAwNSwgMHg2MDE0LCAweDkwMDUsCi0JMHgxOTBjLCAweDBkZjYsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwODBjLCAweDg1ZjgsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDhiOGYsIDB4MDEyZSwgMHgwMDA1LCAweDYwMDMsCi0JMHgwMDAxLCAweDYxMDYsIDB4MDgwYywgMHg4NWY4LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsCi0JMHg4YjhmLCAweDAxMmUsIDB4MDAwNSwgMHg2MDAzLCAweDAwMDMsIDB4NjEwNiwgMHgyYzEwLCAweDA4MGMsCi0JMHgxYTdlLCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDA4MGMsIDB4ODY1ZCwgMHgwODBjLCAweDhjNmMsCi0JMHgwMTJlLCAweDAwMDUsIDB4MDEyNiwgMHgyMDkxLCAweDgwMDAsIDB4MDAzNiwgMHgwMDk2LCAweDkxODIsCi0JMHgwMDQwLCAweDAwMjMsIDB4MDA5ZSwgMHgwMDNlLCAweDAxMmUsIDB4MDAwNSwgMHhkMjVhLCAweGQyNWMsCi0JMHhkMjZlLCAweGQyODgsIDB4ZDI1YSwgMHhkMjVhLCAweGQyNWEsIDB4ZDI1YSwgMHhkMjVhLCAweGQyNWEsCi0JMHhkMjVhLCAweGQyNWEsIDB4ZDI1YSwgMHhkMjVhLCAweGQyNWEsIDB4ZDI1YSwgMHhkMjVhLCAweGQyNWEsCi0JMHhkMjVhLCAweGQyNWEsIDB4MDgwYywgMHgwZGY2LCAweDYwMTQsIDB4MjA0OCwgMHhhODdjLCAweGQwZmMsCi0JMHgwMWY4LCAweDkwOWMsIDB4MDAwMywgMHg5MzllLCAweDAwMDMsIDB4MDFkMCwgMHg2MDAzLCAweDAwMDEsCi0JMHg2MTA2LCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsIDB4MDQ3MCwgMHg2MDE0LCAweDIwNDgsCi0JMHhhODdjLCAweGQwZmMsIDB4MDE2OCwgMHg5MDljLCAweDAwMDMsIDB4OTM5ZSwgMHgwMDAzLCAweDAxNDAsCi0JMHg2MDAzLCAweDAwMDEsIDB4NjEwNiwgMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDAwZTAsCi0JMHg5MDFlLCAweDYzMTYsIDB4NjMxYSwgMHgyMDE5LCAweDAwMDQsIDB4MDgwYywgMHhkN2UyLCAweDAwYTAsCi0JMHg2MDE0LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDBkOTgsIDB4OTA5YywgMHgwMDAzLCAweDkzOWUsCi0JMHgwMDAzLCAweDBkNzAsIDB4NjAwMywgMHgwMDAzLCAweDYxMDYsIDB4MmMxMCwgMHgwODBjLCAweDFhN2UsCi0JMHgwODBjLCAweDg2NWQsIDB4MDgwYywgMHg4YzZjLCAweDAwMDUsIDB4MDgwYywgMHg4YTgzLCAweDYxMTQsCi0JMHg4MWZmLCAweDAxNTgsIDB4MDA5NiwgMHgyMTQ4LCAweDA4MGMsIDB4ZGFlMSwgMHgwMDM2LCAweDIwMTksCi0JMHgwMDI5LCAweDA4MGMsIDB4ZDdlMiwgMHgwMDNlLCAweDAwOWUsIDB4MDgwYywgMHhhMDFjLCAweDA4MGMsCi0JMHg4YjhmLCAweDAwMDUsIDB4MDgwYywgMHg4YjNmLCAweDYxMTQsIDB4ODFmZiwgMHgwMTU4LCAweDAwOTYsCi0JMHgyMTQ4LCAweDA4MGMsIDB4ZGFlMSwgMHgwMDM2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweGQ3ZTIsCi0JMHgwMDNlLCAweDAwOWUsIDB4MDgwYywgMHhhMDFjLCAweDA4MGMsIDB4OGM2YywgMHgwMDA1LCAweDkxODIsCi0JMHgwMDg1LCAweDAwMDIsIDB4ZDJkOSwgMHhkMmQ3LCAweGQyZDcsIDB4ZDJlNSwgMHhkMmQ3LCAweGQyZDcsCi0JMHhkMmQ3LCAweGQyZDcsIDB4ZDJkNywgMHhkMmQ3LCAweGQyZDcsIDB4ZDJkNywgMHhkMmQ3LCAweDA4MGMsCi0JMHgwZGY2LCAweDYwMDMsIDB4MDAwYiwgMHg2MTA2LCAweDA4MGMsIDB4ODVmOCwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDA4MGMsIDB4OGI4ZiwgMHgwMTJlLCAweDAwMDUsIDB4MDAyNiwgMHgwMGU2LCAweDA4MGMsCi0JMHhkYTMzLCAweDAxMTgsIDB4MDgwYywgMHg5ZmVhLCAweDA0NTAsIDB4MjA3MSwgMHgwMjYwLCAweDcyMjQsCi0JMHg2MjE2LCAweDIwMDEsIDB4MTgwZSwgMHgyMDA0LCAweGQwZTQsIDB4MDE1MCwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGJjYTAsIDB4MDBiZSwgMHgyYzAwLCAweDIwMTEsIDB4MDE0ZSwgMHgwODBjLCAweGEzMGIsCi0JMHg3MjIwLCAweDA4MGMsIDB4ZDYzNywgMHgwMTE4LCAweDYwMDcsIDB4MDA4NiwgMHgwMDQwLCAweDYwMDcsCi0JMHgwMDg3LCAweDcyMjQsIDB4OTI5NiwgMHhmZmZmLCAweDExMTAsIDB4NjAwNywgMHgwMDg2LCAweDYwMDMsCi0JMHgwMDAxLCAweDA4MGMsIDB4ODVmOCwgMHgwODBjLCAweDhiOGYsIDB4MDgwYywgMHg4YzZjLCAweDAwZWUsCi0JMHgwMDJlLCAweDAwMDUsIDB4OTE4NiwgMHgwMDEzLCAweDExNjAsIDB4NjAwNCwgMHg5MDhhLCAweDAwODUsCi0JMHgwYTBjLCAweDBkZjYsIDB4OTA4YSwgMHgwMDkyLCAweDFhMGMsIDB4MGRmNiwgMHg5MDgyLCAweDAwODUsCi0JMHgwMGEyLCAweDkxODYsIDB4MDAyNywgMHgwMTMwLCAweDkxODYsIDB4MDAxNCwgMHgwMTE4LCAweDA4MGMsCi0JMHhhMDgzLCAweDAwNTAsIDB4MjAwMSwgMHgwMDA3LCAweDA4MGMsIDB4NjMyMCwgMHgwODBjLCAweDhhODMsCi0JMHgwODBjLCAweGEwMWMsIDB4MDgwYywgMHg4YjhmLCAweDAwMDUsIDB4ZDM0YSwgMHhkMzRjLCAweGQzNGMsCi0JMHhkMzRhLCAweGQzNGEsIDB4ZDM0YSwgMHhkMzRhLCAweGQzNGEsIDB4ZDM0YSwgMHhkMzRhLCAweGQzNGEsCi0JMHhkMzRhLCAweGQzNGEsIDB4MDgwYywgMHgwZGY2LCAweDA4MGMsIDB4OGE4MywgMHgwODBjLCAweGEwMWMsCi0JMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHg5MTgyLCAweDAwODUsIDB4MGEwYywgMHgwZGY2LCAweDkxODIsCi0JMHgwMDkyLCAweDFhMGMsIDB4MGRmNiwgMHg5MTgyLCAweDAwODUsIDB4MDAwMiwgMHhkMzZiLCAweGQzNmIsCi0JMHhkMzZiLCAweGQzNmQsIDB4ZDM2YiwgMHhkMzZiLCAweGQzNmIsIDB4ZDM2YiwgMHhkMzZiLCAweGQzNmIsCi0JMHhkMzZiLCAweGQzNmIsIDB4ZDM2YiwgMHgwODBjLCAweDBkZjYsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTMsCi0JMHgwMTQ4LCAweDkxODYsIDB4MDAxNCwgMHgwMTMwLCAweDkxODYsIDB4MDAyNywgMHgwMTE4LCAweDA4MGMsCi0JMHhhMDgzLCAweDAwMzAsIDB4MDgwYywgMHg4YTgzLCAweDA4MGMsIDB4YTAxYywgMHgwODBjLCAweDhiOGYsCi0JMHgwMDA1LCAweDAwMzYsIDB4MDgwYywgMHhkYTk0LCAweDYwNDMsIDB4MDAwMCwgMHgyMDE5LCAweDAwMGIsCi0JMHgwMDMxLCAweDYwMjMsIDB4MDAwNiwgMHg2MDAzLCAweDAwMDcsIDB4MDAzZSwgMHgwMDA1LCAweDAxMjYsCi0JMHgwMDM2LCAweDIwOTEsIDB4ODAwMCwgMHgwMDg2LCAweDJjNDAsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsCi0JMHg5OTVmLCAweDAwOWUsIDB4MDA4ZSwgMHgxNTUwLCAweDAwNzYsIDB4MmMzOCwgMHgwODBjLCAweDlhMGEsCi0JMHgwMDdlLCAweDE1MjAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDUwMCwgMHg2MDIwLCAweDkwODYsCi0JMHgwMDA3LCAweDAxZTAsIDB4MDA5NiwgMHg2MDFjLCAweGQwODQsIDB4MDE0MCwgMHgwODBjLCAweGRhOTQsCi0JMHgwODBjLCAweGM0NzEsIDB4MDgwYywgMHgxOTJjLCAweDYwMjMsIDB4MDAwNywgMHg2MDE0LCAweDIwNDgsCi0JMHgwODBjLCAweGJkNGUsIDB4MDExMCwgMHgwODBjLCAweGQ3ZTIsIDB4MDA5ZSwgMHg2MDE3LCAweDAwMDAsCi0JMHgwODBjLCAweGRhOTQsIDB4NjAyMywgMHgwMDA3LCAweDA4MGMsIDB4YzQ3MSwgMHgwMDNlLCAweDAxMmUsCi0JMHgwMDA1LCAweDAwZjYsIDB4MDBjNiwgMHgwMGI2LCAweDAwMzYsIDB4MDE1NiwgMHgyMDc5LCAweDAyNjAsCi0JMHg3OTM4LCAweDc4M2MsIDB4MDgwYywgMHgyNjZkLCAweDE5MDQsIDB4ZDQxZiwgMHgwMDE2LCAweDAwYzYsCi0JMHgwODBjLCAweDYzYTMsIDB4MTkwNCwgMHhkNDFkLCAweDAwMWUsIDB4MDBjNiwgMHgwODBjLCAweGM0NTksCi0JMHgxMTMwLCAweGI4YjAsIDB4OTAwNSwgMHgwMTE4LCAweDA4MGMsIDB4MzFlOSwgMHgwMTQ4LCAweDJiMTAsCi0JMHgyMTYwLCAweDYwMTAsIDB4MDAwNiwgMHg2MjEyLCAweDA4MGMsIDB4YzQ2MCwgMHgwMDBlLCAweDYwMTIsCi0JMHgwMGNlLCAweDAwMmUsIDB4MDAyNiwgMHgwMDE2LCAweDIwMTksIDB4MDAyOSwgMHgwODBjLCAweDlhZDAsCi0JMHgwODBjLCAweDg3ODIsIDB4MDA3NiwgMHg5MDNlLCAweDA4MGMsIDB4ODY3MCwgMHgwMDdlLCAweDAwMWUsCi0JMHgwMDc2LCAweDkwM2UsIDB4MDgwYywgMHhkNTU2LCAweDAwN2UsIDB4MDAyNiwgMHhiYTA0LCAweDkyOTQsCi0JMHhmZjAwLCAweDgyMTcsIDB4OTI4NiwgMHgwMDA2LCAweDAxMTgsIDB4OTI4NiwgMHgwMDA0LCAweDExMTgsCi0JMHhiYWEwLCAweDA4MGMsIDB4MzE1MiwgMHgwMDJlLCAweGJjYjAsIDB4MDAxZSwgMHgwODBjLCAweDVlNDksCi0JMHhiZTEyLCAweGJkMTYsIDB4YmNiMiwgMHg5MDA2LCAweDAwMTAsIDB4MDBjZSwgMHgwMDFlLCAweDAxNWUsCi0JMHgwMDNlLCAweDAwYmUsIDB4MDBjZSwgMHgwMGZlLCAweDAwMDUsIDB4MDBjNiwgMHgwMGQ2LCAweDAwYjYsCi0JMHgwMDE2LCAweDIwMDksIDB4MTgyMywgMHgyMTA0LCAweDkwODYsIDB4MDA3NCwgMHgxOTA0LCAweGQ0N2UsCi0JMHgyMDY5LCAweDAyNjAsIDB4Njk0NCwgMHg5MTgyLCAweDAxMDAsIDB4MDZlMCwgMHg2OTQwLCAweDkxODQsCi0JMHg4MDAwLCAweDA5MDQsIDB4ZDQ3YiwgMHgyMDAxLCAweDE5NTYsIDB4MjAwNCwgMHg5MDA1LCAweDExNDAsCi0JMHg2MDEwLCAweDIwNTgsIDB4YjhiMCwgMHg5MDA1LCAweDAxMTgsIDB4OTE4NCwgMHgwODAwLCAweDA1OTgsCi0JMHg2OTQ4LCAweDkxOGEsIDB4MDAwMSwgMHgwNjQ4LCAweDA4MGMsIDB4ZGI0OSwgMHgwMTE4LCAweDY5NzgsCi0JMHhkMWZjLCAweDExYjgsIDB4MjAwOSwgMHgwMjA1LCAweDIwMGIsIDB4MDAwMSwgMHg2OTNjLCAweDgxZmYsCi0JMHgxMTk4LCAweDY5NDQsIDB4OTE4MiwgMHgwMTAwLCAweDAyYTgsIDB4Njk0MCwgMHg4MWZmLCAweDExNzgsCi0JMHg2OTQ4LCAweDkxOGEsIDB4MDAwMSwgMHgwMjg4LCAweDY5NTAsIDB4OTE4YSwgMHgwMDAxLCAweDAyOTgsCi0JMHgwMGQwLCAweDYwMTcsIDB4MDEwMCwgMHgwMGEwLCAweDYwMTcsIDB4MDMwMCwgMHgwMDg4LCAweDYwMTcsCi0JMHgwNTAwLCAweDAwNzAsIDB4NjAxNywgMHgwNzAwLCAweDAwNTgsIDB4NjAxNywgMHgwOTAwLCAweDAwNDAsCi0JMHg2MDE3LCAweDBiMDAsIDB4MDAyOCwgMHg2MDE3LCAweDBmMDAsIDB4MDAxMCwgMHg2MDE3LCAweDJkMDAsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDAwOCwgMHg5MDA2LCAweDAwMWUsIDB4MDBiZSwgMHgwMGRlLCAweDAwY2UsCi0JMHgwMDA1LCAweDAwYzYsIDB4MDBiNiwgMHgwMDI2LCAweDAwMzYsIDB4MDE1NiwgMHg2MjEwLCAweDIyNTgsCi0JMHhiYjA0LCAweDkzOTQsIDB4MDBmZiwgMHg5Mjg2LCAweDAwMDYsIDB4MDE4MCwgMHg5Mjg2LCAweDAwMDQsCi0JMHgwMTY4LCAweDkzOTQsIDB4ZmYwMCwgMHg4MjE3LCAweDkyODYsIDB4MDAwNiwgMHgwMTM4LCAweDkyODYsCi0JMHgwMDA0LCAweDAxMjAsIDB4MDgwYywgMHg2M2IyLCAweDA4MDQsIDB4ZDRlNSwgMHgyMDExLCAweDAyNzYsCi0JMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwgMHgyYjQ4LCAweDIwMTksIDB4MDAwYSwgMHgwODBjLCAweGIwMTcsCi0JMHgwMDllLCAweDE1YTAsIDB4MjAxMSwgMHgwMjdhLCAweDIwYTksIDB4MDAwNCwgMHgwMDk2LCAweDJiNDgsCi0JMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhiMDE3LCAweDAwOWUsIDB4MTU0MCwgMHgwMDQ2LCAweDAwMTYsCi0JMHhiYWEwLCAweDIyMjAsIDB4OTAwNiwgMHgyMDA5LCAweDE4NWMsIDB4MjEwYywgMHgwMDM4LCAweDIwMDksCi0JMHgwMDI5LCAweDA4MGMsIDB4ZDgzNywgMHhiODAwLCAweGMwZTUsIDB4YjgwMiwgMHgyMDE5LCAweDAwMjksCi0JMHgwODBjLCAweDg3ODIsIDB4MDA3NiwgMHgyMDM5LCAweDAwMDAsIDB4MDgwYywgMHg4NjcwLCAweDJjMDgsCi0JMHgwODBjLCAweGQ1NTYsIDB4MDA3ZSwgMHgyMDAxLCAweDAwMDcsIDB4MDgwYywgMHg2MzIwLCAweDIwMDEsCi0JMHgwMDA3LCAweDA4MGMsIDB4NjJmNCwgMHgwMDFlLCAweDAwNGUsIDB4OTAwNiwgMHgwMTVlLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwYmUsIDB4MDBjZSwgMHgwMDA1LCAweDAwZDYsIDB4MjA2OSwgMHgwMjZlLCAweDY4MDAsCi0JMHg5MDg2LCAweDA4MDAsIDB4MDExOCwgMHg2MDE3LCAweDAwMDAsIDB4MDAwOCwgMHg5MDA2LCAweDAwZGUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDBmNiwgMHgwMDE2LCAweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwNzksCi0JMHgwMjZjLCAweDc5MzAsIDB4NzgzNCwgMHgwODBjLCAweDI2NmQsIDB4MTFkMCwgMHgwODBjLCAweDYzYTMsCi0JMHgxMWI4LCAweDIwMTEsIDB4MDI3MCwgMHgyMGE5LCAweDAwMDQsIDB4MDA5NiwgMHgyYjQ4LCAweDIwMTksCi0JMHgwMDBhLCAweDA4MGMsIDB4YjAxNywgMHgwMDllLCAweDExNTgsIDB4MjAxMSwgMHgwMjc0LCAweDIwYTksCi0JMHgwMDA0LCAweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMDYsIDB4MDgwYywgMHhiMDE3LCAweDAwOWUsCi0JMHgwMTVlLCAweDAwM2UsIDB4MDAyZSwgMHgwMDFlLCAweDAwZmUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMDA2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDAxNTYsIDB4MjAxMSwgMHgwMjYzLCAweDIyMDQsCi0JMHg4MjExLCAweDIyMGMsIDB4MDgwYywgMHgyNjZkLCAweDExZDAsIDB4MDgwYywgMHg2M2EzLCAweDExYjgsCi0JMHgyMDExLCAweDAyNzYsIDB4MjBhOSwgMHgwMDA0LCAweDAwOTYsIDB4MmI0OCwgMHgyMDE5LCAweDAwMGEsCi0JMHgwODBjLCAweGIwMTcsIDB4MDA5ZSwgMHgxMTU4LCAweDIwMTEsIDB4MDI3YSwgMHgyMGE5LCAweDAwMDQsCi0JMHgwMDk2LCAweDJiNDgsIDB4MjAxOSwgMHgwMDA2LCAweDA4MGMsIDB4YjAxNywgMHgwMDllLCAweDAxNWUsCi0JMHgwMDNlLCAweDAwMmUsIDB4MDAxZSwgMHgwMDBlLCAweDAwYmUsIDB4MDAwNSwgMHgwMGU2LCAweDAwYzYsCi0JMHgwMDg2LCAweDAwNzYsIDB4MDA2NiwgMHgwMDU2LCAweDAwNDYsIDB4MDAyNiwgMHgwMTI2LCAweDIwOTEsCi0JMHg4MDAwLCAweDI3NDAsIDB4MjAyOSwgMHgxOWNiLCAweDI1MmMsIDB4MjAyMSwgMHgxOWQxLCAweDI0MjQsCi0JMHgyMDYxLCAweDFjZDAsIDB4MjA3MSwgMHgxODAwLCAweDc2NTAsIDB4NzA3MCwgMHg4MWZmLCAweDAxNTAsCi0JMHgwMDA2LCAweDkxODYsIDB4MWE4OCwgMHgwMDBlLCAweDAxMjgsIDB4ODAwMSwgMHg5NjAyLCAweDFhMDQsCi0JMHhkNWYwLCAweDAwMTgsIDB4OTYwNiwgMHgwOTA0LCAweGQ1ZjAsIDB4MjEwMCwgMHg5YzA2LCAweDA5MDQsCi0JMHhkNWU3LCAweDY3MjAsIDB4OTc4NiwgMHgwMDA3LCAweDA5MDQsIDB4ZDVlNywgMHgwODBjLCAweGQ4NzgsCi0JMHgxOTA0LCAweGQ1ZTcsIDB4MDgwYywgMHhkYjY3LCAweDA5MDQsIDB4ZDVlNywgMHgwODBjLCAweGQ4NjgsCi0JMHgwOTA0LCAweGQ1ZTcsIDB4NjcyMCwgMHg5Nzg2LCAweDAwMDEsIDB4MTE0OCwgMHgwODBjLCAweDMxZTksCi0JMHgwOTA0LCAweGQ2MGIsIDB4NjAwNCwgMHg5MDg2LCAweDAwMDAsIDB4MTkwNCwgMHhkNjBiLCAweDk3ODYsCi0JMHgwMDA0LCAweDA5MDQsIDB4ZDYwYiwgMHgyNTAwLCAweDljMDYsIDB4MDkwNCwgMHhkNWU3LCAweDI0MDAsCi0JMHg5YzA2LCAweDA1ZTgsIDB4ODhmZiwgMHgwMTE4LCAweDYwNTQsIDB4OTkwNiwgMHgxNWMwLCAweDAwOTYsCi0JMHg2MDAwLCAweDkwODYsIDB4MDAwNCwgMHgxMTIwLCAweDAwMTYsIDB4MDgwYywgMHgxOTJjLCAweDAwMWUsCi0JMHg5Nzg2LCAweDAwMGEsIDB4MDE0OCwgMHgwODBjLCAweGJmNTYsIDB4MTEzMCwgMHgwODBjLCAweGE5YTcsCi0JMHgwMDllLCAweDA4MGMsIDB4YTAxYywgMHgwNDE4LCAweDYwMTQsIDB4MjA0OCwgMHgwODBjLCAweGJkNGUsCi0JMHgwMWQ4LCAweDk3ODYsIDB4MDAwMywgMHgxNTcwLCAweGE4NjcsIDB4MDEwMywgMHhhODdjLCAweGQwY2MsCi0JMHgwMTMwLCAweDAwOTYsIDB4YTg3OCwgMHgyMDQ4LCAweDA4MGMsIDB4MGZlOSwgMHgwMDllLCAweGFiN2EsCi0JMHhhODc3LCAweDAwMDAsIDB4MDgwYywgMHhkYWUxLCAweDAwMTYsIDB4MDgwYywgMHhjMDQ0LCAweDA4MGMsCi0JMHg2YTE1LCAweDAwMWUsIDB4MDgwYywgMHhiZjM5LCAweDAwOWUsIDB4MDgwYywgMHhhMDFjLCAweDljZTAsCi0JMHgwMDE4LCAweDIwMDEsIDB4MTgxOSwgMHgyMDA0LCAweDljMDIsIDB4MTIxMCwgMHgwODA0LCAweGQ1NmEsCi0JMHgwMTJlLCAweDAwMmUsIDB4MDA0ZSwgMHgwMDVlLCAweDAwNmUsIDB4MDA3ZSwgMHgwMDhlLCAweDAwY2UsCi0JMHgwMGVlLCAweDAwMDUsIDB4OTc4NiwgMHgwMDA2LCAweDExNTAsIDB4OTM4NiwgMHgwMDA1LCAweDAxMjgsCi0JMHgwODBjLCAweGRhZTEsIDB4MDgwYywgMHhkN2UyLCAweDA4ZjgsIDB4MDA5ZSwgMHgwYzAwLCAweDk3ODYsCi0JMHgwMDBhLCAweDA5NjgsIDB4MDgwOCwgMHg4MWZmLCAweDA5ZDAsIDB4OTE4MCwgMHgwMDAxLCAweDIwMDQsCi0JMHg5MDg2LCAweDAwMTgsIDB4MDEzMCwgMHg5MTgwLCAweDAwMDEsIDB4MjAwNCwgMHg5MDg2LCAweDAwMmQsCi0JMHgxOTcwLCAweDYwMDAsIDB4OTA4NiwgMHgwMDAyLCAweDE5NTAsIDB4MDgwYywgMHhiZjQ1LCAweDAxMzAsCi0JMHgwODBjLCAweGJmNTYsIDB4MTkyMCwgMHgwODBjLCAweGE5YTcsIDB4MDAzOCwgMHgwODBjLCAweDMwYmUsCi0JMHgwODBjLCAweGJmNTYsIDB4MTExMCwgMHgwODBjLCAweGE5YTcsIDB4MDgwYywgMHhhMDFjLCAweDA4MDQsCi0JMHhkNWU3LCAweGE4NjQsIDB4OTA4NCwgMHgwMGZmLCAweDkwODYsIDB4MDAzOSwgMHgwMDA1LCAweDAwYzYsCi0JMHgwMGU2LCAweDAwMTYsIDB4MmMwOCwgMHgyMTcwLCAweDkwMDYsIDB4MDgwYywgMHhkODA5LCAweDAwMWUsCi0JMHgwMTIwLCAweDYwMjAsIDB4OTA4NCwgMHgwMDBmLCAweDAwMWIsIDB4MDBlZSwgMHgwMGNlLCAweDAwMDUsCi0JMHhkNjU2LCAweGQ2NTYsIDB4ZDY1NiwgMHhkNjU2LCAweGQ2NTYsIDB4ZDY1NiwgMHhkNjU4LCAweGQ2NTYsCi0JMHhkNjU2LCAweGQ2NTYsIDB4ZDY4MSwgMHhhMDFjLCAweGEwMWMsIDB4ZDY1NiwgMHg5MDA2LCAweDAwMDUsCi0JMHgwMDM2LCAweDAwNDYsIDB4MDAxNiwgMHg3MDEwLCAweDAwYjYsIDB4MjA1OCwgMHhiY2EwLCAweDAwYmUsCi0JMHgyYzAwLCAweDIwMDksIDB4MDAyMCwgMHgwODBjLCAweGQ4MzcsIDB4MDAxZSwgMHgwMDRlLCAweDIwMTksCi0JMHgwMDAyLCAweDA4MGMsIDB4ZDM4ZiwgMHgwMDNlLCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDAwOTYsCi0JMHgwODBjLCAweGJkNGUsIDB4MDE0MCwgMHg2MDE0LCAweDkwNGQsIDB4MDgwYywgMHhiOTgzLCAweDY4N2IsCi0JMHgwMDA1LCAweDA4MGMsIDB4NmEyMiwgMHgwMDllLCAweDA4MGMsIDB4YTAxYywgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDAwMTksIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsIDB4NjAwMCwgMHg5MDhhLCAweDAwMTAsCi0JMHgxYTBjLCAweDBkZjYsIDB4MDAwYiwgMHgwMDA1LCAweGQ2OWMsIDB4ZDY5YywgMHhkNmIzLCAweGQ2YTMsCi0JMHhkNmMyLCAweGQ2OWMsIDB4ZDY5YywgMHhkNjllLCAweGQ2OWMsIDB4ZDY5YywgMHhkNjljLCAweGQ2OWMsCi0JMHhkNjljLCAweGQ2OWMsIDB4ZDY5YywgMHhkNjljLCAweDA4MGMsIDB4MGRmNiwgMHgwODBjLCAweGEwMWMsCi0JMHg5MDg1LCAweDAwMDEsIDB4MDAwNSwgMHgwMDM2LCAweDAwZTYsIDB4MjA3MSwgMHgxOWMyLCAweDcwM2MsCi0JMHg5YzA2LCAweDExMjgsIDB4MjAxOSwgMHgwMDAxLCAweDA4MGMsIDB4OThiMSwgMHgwMDEwLCAweDA4MGMsCi0JMHg5YThmLCAweDAwZWUsIDB4MDAzZSwgMHgwMDk2LCAweDAwZDYsIDB4NjAxNCwgMHgyMDQ4LCAweGE4N2IsCi0JMHgwMDA1LCAweDA4MGMsIDB4NmEyMiwgMHgwODBjLCAweGEwMWMsIDB4MDBkZSwgMHgwMDllLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDUsIDB4NjAxYywgMHhkMDg0LCAweDE5MGMsIDB4MTkyYywgMHgwYzYwLCAweDIwMDEsCi0JMHgwMDAxLCAweDA4MGMsIDB4NjJlMCwgMHgwMTU2LCAweDAwMTYsIDB4MDAyNiwgMHgwMDM2LCAweDIwYTksCi0JMHgwMDA0LCAweDIwMTksIDB4MTgwNSwgMHgyMDExLCAweDAyNzYsIDB4MDgwYywgMHhiMDAzLCAweDAwM2UsCi0JMHgwMDJlLCAweDAwMWUsIDB4MDE1ZSwgMHg5MDA1LCAweDAwMDUsIDB4MDBmNiwgMHgwMGU2LCAweDAwYzYsCi0JMHgwMDg2LCAweDAwNzYsIDB4MDA2NiwgMHgwMGI2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDI3NDAsCi0JMHgyMDYxLCAweDFjZDAsIDB4MjA3OSwgMHgwMDAxLCAweDhmZmYsIDB4MDkwNCwgMHhkNzM5LCAweDIwNzEsCi0JMHgxODAwLCAweDc2NTAsIDB4NzA3MCwgMHg4MDAxLCAweDk2MDIsIDB4MWEwNCwgMHhkNzM5LCAweDg4ZmYsCi0JMHgwMTIwLCAweDI4MDAsIDB4OWMwNiwgMHgxNWEwLCAweDIwNzgsIDB4MDgwYywgMHhkODY4LCAweDA1ODAsCi0JMHgyNDAwLCAweDljMDYsIDB4MDU2OCwgMHg2NzIwLCAweDk3ODYsIDB4MDAwNiwgMHgxNTQ4LCAweDk3ODYsCi0JMHgwMDA3LCAweDA1MzAsIDB4ODhmZiwgMHgxMTUwLCAweGQ1OGMsIDB4MTExOCwgMHg2MDEwLCAweDliMDYsCi0JMHgxMWY4LCAweGQ1ODQsIDB4MDExOCwgMHg2MDU0LCAweDkxMDYsIDB4MTFkMCwgMHgwMDk2LCAweDYwMWMsCi0JMHhkMDg0LCAweDAxNDAsIDB4MDgwYywgMHhkYTk0LCAweDA4MGMsIDB4YzQ3MSwgMHgwODBjLCAweDE5MmMsCi0JMHg2MDIzLCAweDAwMDcsIDB4NjAxNCwgMHgyMDQ4LCAweDA4MGMsIDB4YmQ0ZSwgMHgwMTIwLCAweDAwNDYsCi0JMHgwODBjLCAweGQ3ZTIsIDB4MDA0ZSwgMHgwMDllLCAweDA4MGMsIDB4YTAxYywgMHg4OGZmLCAweDExOTgsCi0JMHg5Y2UwLCAweDAwMTgsIDB4MjAwMSwgMHgxODE5LCAweDIwMDQsIDB4OWMwMiwgMHgxMjEwLCAweDA4MDQsCi0JMHhkNmVjLCAweDkwMDYsIDB4MDEyZSwgMHgwMGJlLCAweDAwNmUsIDB4MDA3ZSwgMHgwMDhlLCAweDAwY2UsCi0JMHgwMGVlLCAweDAwZmUsIDB4MDAwNSwgMHg5OGM1LCAweDAwMDEsIDB4MGNhMCwgMHgwMGI2LCAweDAwNzYsCi0JMHgwMDU2LCAweDAwODYsIDB4OTA0NiwgMHgyMDI5LCAweDAwMDEsIDB4MmMyMCwgMHgyMDE5LCAweDAwMDIsCi0JMHg2MjEwLCAweDIyNTgsIDB4MDA5NiwgMHg5MDRlLCAweDA4MGMsIDB4OTk1ZiwgMHgwMDllLCAweDAwOGUsCi0JMHg5MDNlLCAweDA4MGMsIDB4OWEwYSwgMHgwODBjLCAweGQ2ZGQsIDB4MDA1ZSwgMHgwMDdlLCAweDAwYmUsCi0JMHgwMDA1LCAweDAwYjYsIDB4MDA0NiwgMHgwMDU2LCAweDAwNzYsIDB4MDBjNiwgMHgwMTU2LCAweDJjMjAsCi0JMHgyMTI4LCAweDIwYTksIDB4MDA3ZiwgMHg5MDBlLCAweDAwMTYsIDB4MDAzNiwgMHgwODBjLCAweDYzYTMsCi0JMHgxMTgwLCAweDAwNTYsIDB4MDA4NiwgMHg5MDQ2LCAweDI1MDgsIDB4MjAyOSwgMHgwMDAxLCAweDAwOTYsCi0JMHg5MDRlLCAweDA4MGMsIDB4OTk1ZiwgMHgwMDllLCAweDAwOGUsIDB4OTAzZSwgMHgwODBjLCAweDlhMGEsCi0JMHgwMDVlLCAweDAwM2UsIDB4MDAxZSwgMHg4MTA4LCAweDFmMDQsIDB4ZDc2YywgMHgwMDM2LCAweDI1MDgsCi0JMHgyMDI5LCAweDAwMDMsIDB4MDgwYywgMHhkNmRkLCAweDAwM2UsIDB4MDE1ZSwgMHgwMGNlLCAweDAwN2UsCi0JMHgwMDVlLCAweDAwNGUsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsIDB4MDA3NiwgMHgwMDU2LCAweDYyMTAsCi0JMHgyMjU4LCAweDAwODYsIDB4OTA0NiwgMHgyMDI5LCAweDAwMDEsIDB4MjAxOSwgMHgwMDQ4LCAweDAwOTYsCi0JMHg5MDRlLCAweDA4MGMsIDB4OTk1ZiwgMHgwMDllLCAweDAwOGUsIDB4OTAzZSwgMHgwODBjLCAweDlhMGEsCi0JMHgyYzIwLCAweDA4MGMsIDB4ZDZkZCwgMHgwMDVlLCAweDAwN2UsIDB4MDBiZSwgMHgwMDA1LCAweDAwYjYsCi0JMHgwMDQ2LCAweDAwNTYsIDB4MDA3NiwgMHgwMGM2LCAweDAxNTYsIDB4MmMyMCwgMHgyMGE5LCAweDA4MDAsCi0JMHg5MDBlLCAweDAwMTYsIDB4MDAzNiwgMHgwODBjLCAweDYzYTMsIDB4MTE5MCwgMHgwMDg2LCAweDkwNDYsCi0JMHgyODI4LCAweDAwNDYsIDB4MjAyMSwgMHgwMDAxLCAweDA4MGMsIDB4ZGE3OCwgMHgwMDRlLCAweDAwOTYsCi0JMHg5MDRlLCAweDA4MGMsIDB4OTk1ZiwgMHgwMDllLCAweDAwOGUsIDB4OTAzZSwgMHgwODBjLCAweDlhMGEsCi0JMHgwMDNlLCAweDAwMWUsIDB4ODEwOCwgMHgxZjA0LCAweGQ3YjksIDB4MDAzNiwgMHgyMDI5LCAweDAwMDIsCi0JMHgwODBjLCAweGQ2ZGQsIDB4MDAzZSwgMHgwMTVlLCAweDAwY2UsIDB4MDA3ZSwgMHgwMDVlLCAweDAwNGUsCi0JMHgwMGJlLCAweDAwMDUsIDB4MDAxNiwgMHgwMGY2LCAweDA4MGMsIDB4YmQ0YywgMHgwMTk4LCAweGE4NjQsCi0JMHg5MDg0LCAweDAwZmYsIDB4OTA4NiwgMHgwMDQ2LCAweDAxODAsIDB4YTgwMCwgMHg5MDdkLCAweDAxMzgsCi0JMHhhODAzLCAweDAwMDAsIDB4YWI4MiwgMHgwODBjLCAweDZhMjIsIDB4MmY0OCwgMHgwY2IwLCAweGFiODIsCi0JMHgwODBjLCAweDZhMjIsIDB4MDBmZSwgMHgwMDFlLCAweDAwMDUsIDB4YTgwMCwgMHg5MDdkLCAweDAxMzAsCi0JMHhhODAzLCAweDAwMDAsIDB4MDgwYywgMHg2YTIyLCAweDJmNDgsIDB4MGNiOCwgMHgwODBjLCAweDZhMjIsCi0JMHgwYzg4LCAweDAwZTYsIDB4MDA0NiwgMHgwMDM2LCAweDIwNjEsIDB4MWNkMCwgMHg5MDA1LCAweDExMzgsCi0JMHgyMDcxLCAweDE4MDAsIDB4NzQ1MCwgMHg3MDcwLCAweDgwMDEsIDB4OTQwMiwgMHgxMmQ4LCAweDIxMDAsCi0JMHg5YzA2LCAweDAxNjgsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDAsIDB4MDE0OCwgMHg2MDA4LCAweDkyMDYsCi0JMHgxMTMwLCAweDYwMTAsIDB4OTFhMCwgMHgwMDA0LCAweDI0MjQsIDB4OTQwNiwgMHgwMTQwLCAweDljZTAsCi0JMHgwMDE4LCAweDIwMDEsIDB4MTgxOSwgMHgyMDA0LCAweDljMDIsIDB4MTIyMCwgMHgwYzQwLCAweDkwODUsCi0JMHgwMDAxLCAweDAwMDgsIDB4OTAwNiwgMHgwMDNlLCAweDAwNGUsIDB4MDBlZSwgMHgwMDA1LCAweDAwOTYsCi0JMHgwMDA2LCAweDA4MGMsIDB4MTAzNywgMHgwMDBlLCAweDA5MGMsIDB4MGRmNiwgMHhhYWUyLCAweGE4NjcsCi0JMHgwMTBkLCAweGE4OGUsIDB4MDAyNiwgMHgyMDEwLCAweDA4MGMsIDB4YmQzYywgMHgyMDAxLCAweDAwMDAsCi0JMHgwMTIwLCAweDIyMDAsIDB4OTA4MCwgMHgwMDE1LCAweDIwMDQsIDB4MDAyZSwgMHhhODdhLCAweDkxODYsCi0JMHgwMDIwLCAweDAxMTAsIDB4YThlMywgMHhmZmZmLCAweGE5ODYsIDB4YWM3NiwgMHhhODdmLCAweDAwMDAsCi0JMHgyMDAxLCAweDE5NjgsIDB4MjAwNCwgMHhhODgyLCAweDkwMDYsIDB4YTgwMiwgMHhhODZhLCAweGE4OGEsCi0JMHgwMTI2LCAweDIwOTEsIDB4ODAwMCwgMHgwODBjLCAweDZhMjIsIDB4MDEyZSwgMHgwMDllLCAweDAwMDUsCi0JMHg2NzAwLCAweDk3ODYsIDB4MDAwMCwgMHgwMTU4LCAweDk3ODYsIDB4MDAwMSwgMHgwMTQwLCAweDk3ODYsCi0JMHgwMDBhLCAweDAxMjgsIDB4OTc4NiwgMHgwMDA5LCAweDAxMTAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHgwMGU2LCAweDYwMTAsIDB4OTA3NSwgMHgwMTM4LCAweDAwYjYsIDB4MjA1OCwgMHhiOGEwLCAweDAwYmUsCi0JMHg5MjA2LCAweDAwZWUsIDB4MDAwNSwgMHg5MDg1LCAweDAwMDEsIDB4MGNkOCwgMHgwMDE2LCAweDYwMDQsCi0JMHg5MDhlLCAweDAwMWUsIDB4MTFhMCwgMHg4MDA3LCAweDYxMzQsIDB4OTE4YywgMHgwMGZmLCAweDkxMDUsCi0JMHg2MDM2LCAweDYwMDcsIDB4MDA4NSwgMHg2MDAzLCAweDAwMGIsIDB4NjAyMywgMHgwMDA1LCAweDIwMDEsCi0JMHgxOTYxLCAweDIwMDQsIDB4NjAxYSwgMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDAwMWUsCi0JMHgwMDA1LCAweGEwMDEsIDB4YTAwMSwgMHgwMDA1LCAweDYwMjQsIDB4ZDBlNCwgMHgwMTU4LCAweGQwY2MsCi0JMHgwMTE4LCAweDA4MGMsIDB4YzA4OCwgMHgwMDMwLCAweDA4MGMsIDB4ZGE5NCwgMHgwODBjLCAweDg0MjUsCi0JMHgwODBjLCAweDlmZWEsIDB4MDAwNSwgMHg5MjgwLCAweDAwMDgsIDB4MjAwNCwgMHg5MDg0LCAweDAwMGYsCi0JMHgwMDAyLCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweGQ4YzksIDB4ZDhjNywgMHhkOGM5LCAweGQ4YzksCi0JMHhkOGM3LCAweGQ4YzksIDB4ZDhjNywgMHhkOGM3LCAweGQ4YzcsIDB4ZDhjNywgMHhkOGM3LCAweDkwMDYsCi0JMHgwMDA1LCAweDkwODUsIDB4MDAwMSwgMHgwMDA1LCAweDkyODAsIDB4MDAwOCwgMHgyMDA0LCAweDkwODQsCi0JMHgwMDBmLCAweDAwMDIsIDB4ZDhlMCwgMHhkOGUwLCAweGQ4ZTAsIDB4ZDhlMCwgMHhkOGUwLCAweGQ4ZTAsCi0JMHhkOGVkLCAweGQ4ZTAsIDB4ZDhlMCwgMHhkOGUwLCAweGQ4ZTAsIDB4ZDhlMCwgMHhkOGUwLCAweGQ4ZTAsCi0JMHg2MDA3LCAweDAwM2IsIDB4NjAyZiwgMHgwMDA5LCAweDYwMTcsIDB4MmEwMCwgMHg2MDAzLCAweDAwMDEsCi0JMHgwODBjLCAweDg1ZjgsIDB4MDgwYywgMHg4YjhmLCAweDAwMDUsIDB4MDA5NiwgMHgwMGM2LCAweDIyNjAsCi0JMHgwODBjLCAweGRhOTQsIDB4NjA0MywgMHgwMDAwLCAweDYwMjQsIDB4YzBmNCwgMHhjMGU0LCAweDYwMjYsCi0JMHg2MDNiLCAweDAwMDAsIDB4MDBjZSwgMHgwMGQ2LCAweDIyNjgsIDB4OTE4NiwgMHgwMDA3LCAweDE5MDQsCi0JMHhkOTQ2LCAweDY4MTQsIDB4OTAwNSwgMHgwMTM4LCAweDIwNDgsIDB4YTg3YywgMHhkMGZjLCAweDExMTgsCi0JMHgwMGRlLCAweDAwOWUsIDB4MDhhOCwgMHg2MDA3LCAweDAwM2EsIDB4NjAwMywgMHgwMDAxLCAweDA4MGMsCi0JMHg4NWY4LCAweDA4MGMsIDB4OGI4ZiwgMHgwMGM2LCAweDJkNjAsIDB4NjEwMCwgMHg5MTg2LCAweDAwMDIsCi0JMHgxOTA0LCAweGQ5YmQsIDB4NjAxNCwgMHg5MDA1LCAweDExMzgsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDcsCi0JMHgxOTBjLCAweDBkZjYsIDB4MDgwNCwgMHhkOWJkLCAweDIwNDgsIDB4MDgwYywgMHhiZDRlLCAweDExMzAsCi0JMHgwMDI4LCAweDIwNDgsIDB4YTgwMCwgMHg5MDA1LCAweDFkZTAsIDB4MjkwMCwgMHgyMDQ4LCAweGE4N2MsCi0JMHg5MDg0LCAweDAwMDMsIDB4OTA4NiwgMHgwMDAyLCAweDExNjgsIDB4YTg3YywgMHhjMGRjLCAweGMwZjQsCi0JMHhhODdlLCAweGE4ODAsIDB4YzBmYywgMHhhODgyLCAweDIwMDksIDB4MDA0MywgMHgwODBjLCAweGQxZTMsCi0JMHgwODA0LCAweGQ5YmQsIDB4MjAwOSwgMHgwMDQxLCAweDA4MDQsIDB4ZDliNywgMHg5MTg2LCAweDAwMDUsCi0JMHgxNWEwLCAweDY4MTQsIDB4MjA0OCwgMHhhODdjLCAweGQwYmMsIDB4MTEyMCwgMHgwMGRlLCAweDAwOWUsCi0JMHgwODA0LCAweGQ4ZTAsIDB4ZDBiNCwgMHgwMTI4LCAweGQwZmMsIDB4MDkwYywgMHgwZGY2LCAweDA4MDQsCi0JMHhkOTAxLCAweDYwMDcsIDB4MDAzYSwgMHg2MDAzLCAweDAwMDEsIDB4MDgwYywgMHg4NWY4LCAweDA4MGMsCi0JMHg4YjhmLCAweDAwYzYsIDB4MmQ2MCwgMHg2MTAwLCAweDkxODYsIDB4MDAwMiwgMHgwMTIwLCAweDkxODYsCi0JMHgwMDA0LCAweDE5MDQsIDB4ZDliZCwgMHg2ODE0LCAweDIwNDgsIDB4YTk3YywgMHhjMWY0LCAweGMxZGMsCi0JMHhhOTdlLCAweGE5ODAsIDB4YzFmYywgMHhjMWJjLCAweGE5ODIsIDB4MDBmNiwgMHgyYzc4LCAweDA4MGMsCi0JMHgxNjUxLCAweDAwZmUsIDB4MjAwOSwgMHgwMDQyLCAweDA0ZDAsIDB4MDAzNiwgMHgwODBjLCAweDEwMzcsCi0JMHgwOTBjLCAweDBkZjYsIDB4YTg2NywgMHgwMTBkLCAweDkwMDYsIDB4YTgwMiwgMHhhODZhLCAweGE4OGEsCi0JMHgyZDE4LCAweGFiOGUsIDB4YTg4NywgMHgwMDQ1LCAweDJjMDAsIDB4YTg5MiwgMHg2MDM4LCAweGE4YTIsCi0JMHgyMzYwLCAweDYwMjQsIDB4YzBkZCwgMHg2MDI2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4YTAsCi0JMHgwMGJlLCAweDIwMDQsIDB4NjM1NCwgMHhhYjdhLCAweGE4NzYsIDB4OTAwNiwgMHhhODdlLCAweGE4ODIsCi0JMHhhZDlhLCAweGFlOTYsIDB4YTg5ZiwgMHgwMDAxLCAweDA4MGMsIDB4NmEyMiwgMHgyMDE5LCAweDAwNDUsCi0JMHg2MDA4LCAweDIwNjgsIDB4MDgwYywgMHhkMzhmLCAweDJkMDAsIDB4NjAwYSwgMHg2MDIzLCAweDAwMDYsCi0JMHg2MDAzLCAweDAwMDcsIDB4OTAxZSwgMHg2MzFhLCAweDYzNDIsIDB4MDAzZSwgMHgwMDM4LCAweDYwNDMsCi0JMHgwMDAwLCAweDYwMDMsIDB4MDAwNywgMHgwODBjLCAweGQxZTMsIDB4MDBjZSwgMHgwMGRlLCAweDAwOWUsCi0JMHgwMDA1LCAweDkxODYsIDB4MDAxMywgMHgxMTI4LCAweDYwMDQsIDB4OTA4MiwgMHgwMDg1LCAweDIwMDgsCi0JMHgwMGMyLCAweDkxODYsIDB4MDAyNywgMHgxMTc4LCAweDA4MGMsIDB4OGE4MywgMHgwMDM2LCAweDAwOTYsCi0JMHg2MDE0LCAweDIwNDgsIDB4MjAxOSwgMHgwMDA0LCAweDA4MGMsIDB4ZDdlMiwgMHgwMDllLCAweDAwM2UsCi0JMHgwODBjLCAweDhiOGYsIDB4MDAwNSwgMHg5MTg2LCAweDAwMTQsIDB4MGQ3MCwgMHgwODBjLCAweGEwODMsCi0JMHgwMDA1LCAweGQ5ZjAsIDB4ZDllZSwgMHhkOWVlLCAweGQ5ZWUsIDB4ZDllZSwgMHhkOWVlLCAweGQ5ZjAsCi0JMHhkOWVlLCAweGQ5ZWUsIDB4ZDllZSwgMHhkOWVlLCAweGQ5ZWUsIDB4ZDllZSwgMHgwODBjLCAweDBkZjYsCi0JMHgwODBjLCAweDhhODMsIDB4NjAwMywgMHgwMDBjLCAweDA4MGMsIDB4OGI4ZiwgMHgwMDA1LCAweDkxODIsCi0JMHgwMDkyLCAweDEyMjAsIDB4OTE4MiwgMHgwMDg1LCAweDAyMDgsIDB4MDAxYSwgMHgwODBjLCAweGEwODMsCi0JMHgwMDA1LCAweGRhMGUsIDB4ZGEwZSwgMHhkYTBlLCAweGRhMGUsIDB4ZGExMCwgMHhkYTMwLCAweGRhMGUsCi0JMHhkYTBlLCAweGRhMGUsIDB4ZGEwZSwgMHhkYTBlLCAweGRhMGUsIDB4ZGEwZSwgMHgwODBjLCAweDBkZjYsCi0JMHgwMGQ2LCAweDJjNjgsIDB4MDgwYywgMHg5Zjk0LCAweDAxYjAsIDB4NjAwMywgMHgwMDAxLCAweDYwMDcsCi0JMHgwMDFlLCAweDIwMDksIDB4MDI2ZSwgMHgyMTBjLCAweDYxM2EsIDB4MjAwOSwgMHgwMjZmLCAweDIxMGMsCi0JMHg2MTNlLCAweDYwMGIsIDB4ZmZmZiwgMHg2OTEwLCAweDYxMTIsIDB4NjAyMywgMHgwMDA0LCAweDA4MGMsCi0JMHg4NWY4LCAweDA4MGMsIDB4OGI4ZiwgMHgyZDYwLCAweDA4MGMsIDB4OWZlYSwgMHgwMGRlLCAweDAwMDUsCi0JMHgwODBjLCAweDlmZWEsIDB4MDAwNSwgMHgwMGU2LCAweDYwMTAsIDB4MDBiNiwgMHgyMDU4LCAweGI4MDAsCi0JMHgwMGJlLCAweGQwZWMsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDksIDB4MTg3YiwgMHgyMTBjLCAweGQxZWMsCi0JMHgwNWIwLCAweDYwMDMsIDB4MDAwMiwgMHg2MDI0LCAweGMwZTUsIDB4NjAyNiwgMHhkMGNjLCAweDAxNTAsCi0JMHgyMDAxLCAweDE5NjIsIDB4MjAwNCwgMHg2MDQyLCAweDIwMDksIDB4MTg3YiwgMHgyMTBjLCAweGQxZjQsCi0JMHgxNTIwLCAweDAwYTAsIDB4MjAwOSwgMHgxODdiLCAweDIxMGMsIDB4ZDFmNCwgMHgwMTI4LCAweDYwMjQsCi0JMHhjMGU0LCAweDYwMjYsIDB4OTAwNiwgMHgwMGQ4LCAweDIwMDEsIDB4MTk2MiwgMHgyMDBjLCAweDIwMDEsCi0JMHgxOTYwLCAweDIwMDQsIDB4OTEwMCwgMHg5MDgwLCAweDAwMGEsIDB4NjA0MiwgMHg2MDEwLCAweDAwYjYsCi0JMHgyMDU4LCAweGI4YWMsIDB4MDBiZSwgMHgwMDA4LCAweDIxMDQsIDB4OTAwNSwgMHgwMTE4LCAweDkwODgsCi0JMHgwMDAzLCAweDBjZDAsIDB4MmMwYSwgMHg2MDBmLCAweDAwMDAsIDB4OTA4NSwgMHgwMDAxLCAweDAwMDUsCi0JMHgwMDE2LCAweDAwYzYsIDB4MDBlNiwgMHg2MTU0LCAweGI4YWMsIDB4MjA2MCwgMHg4Y2ZmLCAweDAxODAsCi0JMHg4NGZmLCAweDExMTgsIDB4NjA1NCwgMHg5MTA2LCAweDExMzgsIDB4NjAwYywgMHgyMDcyLCAweDA4MGMsCi0JMHg4NDI1LCAweDA4MGMsIDB4OWZlYSwgMHgwMDEwLCAweDljZjAsIDB4MDAwMywgMHgyZTY0LCAweDBjNzAsCi0JMHgwMGVlLCAweDAwY2UsIDB4MDAxZSwgMHgwMDA1LCAweDAwZDYsIDB4MDBiNiwgMHg2MDEwLCAweDIwNTgsCi0JMHhiOGFjLCAweDkwNmQsIDB4MDEzMCwgMHg5YzA2LCAweDAxMTAsIDB4NjgwYywgMHgwY2QwLCAweDYwMGMsCi0JMHg2ODBlLCAweDAwYmUsIDB4MDBkZSwgMHgwMDA1LCAweDAwMjYsIDB4MDAzNiwgMHgwMTU2LCAweDIwMTEsCi0JMHgxODJiLCAweDIyMDQsIDB4OTA4NCwgMHgwMGZmLCAweDIwMTksIDB4MDI2ZSwgMHgyMzM0LCAweDk2YjQsCi0JMHgwMGZmLCAweDk2MzYsIDB4MTUwOCwgMHg4MzE4LCAweDIzMzQsIDB4MjIwNCwgMHg5MDg0LCAweGZmMDAsCi0JMHg5NjM2LCAweDExZDAsIDB4MjAxMSwgMHgwMjcwLCAweDIwYTksIDB4MDAwNCwgMHg2MDEwLCAweDAwOTYsCi0JMHgyMDQ4LCAweDIwMTksIDB4MDAwYSwgMHgwODBjLCAweGIwMTcsIDB4MDA5ZSwgMHgxMTY4LCAweDIwMTEsCi0JMHgwMjc0LCAweDIwYTksIDB4MDAwNCwgMHg2MDEwLCAweDAwOTYsIDB4MjA0OCwgMHgyMDE5LCAweDAwMDYsCi0JMHgwODBjLCAweGIwMTcsIDB4MDA5ZSwgMHgxMTAwLCAweDAxNWUsIDB4MDAzZSwgMHgwMDJlLCAweDAwMDUsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTgwMCwgMHgwODBjLCAweDVkYzIsIDB4MDgwYywgMHgyZTczLCAweDAwZWUsCi0JMHgwMDA1LCAweDAwZTYsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YjgwMCwgMHgwMGJlLCAweGQwZmMsCi0JMHgwMTA4LCAweDAwMTEsIDB4MDBlZSwgMHgwMDA1LCAweGE4ODAsIDB4YzBlNSwgMHhhODgyLCAweDAwMDUsCi0JMHgwMGU2LCAweDAwZDYsIDB4MDBjNiwgMHgwMDc2LCAweDAwNjYsIDB4MDA1NiwgMHgwMDQ2LCAweDAwMjYsCi0JMHgwMDE2LCAweDAxMjYsIDB4MjA5MSwgMHg4MDAwLCAweDIwMjksIDB4MTljYiwgMHgyNTJjLCAweDIwMjEsCi0JMHgxOWQxLCAweDI0MjQsIDB4MjA2MSwgMHgxY2QwLCAweDIwNzEsIDB4MTgwMCwgMHg3NjUwLCAweDcwNzAsCi0JMHg5NjA2LCAweDA1NzgsIDB4NjcyMCwgMHg5Nzg2LCAweDAwMDEsIDB4MDExOCwgMHg5Nzg2LCAweDAwMDgsCi0JMHgxNTAwLCAweDI1MDAsIDB4OWMwNiwgMHgwMWU4LCAweDI0MDAsIDB4OWMwNiwgMHgwMWQwLCAweDA4MGMsCi0JMHhkODY4LCAweDAxYjgsIDB4MDgwYywgMHhkODc4LCAweDExYTAsIDB4NjAwMCwgMHg5MDg2LCAweDAwMDQsCi0JMHgxMTIwLCAweDAwMTYsIDB4MDgwYywgMHgxOTJjLCAweDAwMWUsIDB4MDgwYywgMHhiZjQ1LCAweDExMTAsCi0JMHgwODBjLCAweDMwYmUsIDB4MDgwYywgMHhiZjU2LCAweDExMTAsIDB4MDgwYywgMHhhOWE3LCAweDA4MGMsCi0JMHhhMDFjLCAweDljZTAsIDB4MDAxOCwgMHgyMDAxLCAweDE4MTksIDB4MjAwNCwgMHg5YzAyLCAweDEyMDgsCi0JMHgwODU4LCAweDAxMmUsIDB4MDAxZSwgMHgwMDJlLCAweDAwNGUsIDB4MDA1ZSwgMHgwMDZlLCAweDAwN2UsCi0JMHgwMGNlLCAweDAwZGUsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDEsIDB4MTgxMCwgMHgyMDA0LCAweGQwZGMsCi0JMHgwMDA1LCAweDAwMDYsIDB4MjAwMSwgMHgxODM2LCAweDIwMDQsIDB4ZDA5YywgMHgwMDBlLCAweDAwMDUsCi0JMHgwMDA2LCAweDAwMzYsIDB4MDA0NiwgMHgwODBjLCAweGM0NTksIDB4MDE2OCwgMHgyMDE5LCAweGZmZmYsCi0JMHg5MDA1LCAweDAxMjgsIDB4NjAxMCwgMHgwMGI2LCAweDIwNTgsIDB4YmJhMCwgMHgwMGJlLCAweDIwMjEsCi0JMHgwMDA0LCAweDA4MGMsIDB4NGJiNCwgMHgwMDRlLCAweDAwM2UsIDB4MDAwZSwgMHgwMDA1LCAweDYwMDQsCi0JMHg5MDg2LCAweDAwMDEsIDB4MTEyOCwgMHgwODBjLCAweDlhZDAsIDB4MDgwYywgMHhhMDFjLCAweDkwMDYsCi0JMHgwMDA1LCAweDAwZTYsIDB4MDBjNiwgMHgwMGI2LCAweDAwNDYsIDB4MjA2MSwgMHgxY2QwLCAweDIwNzEsCi0JMHgxODAwLCAweDc0NTAsIDB4NzA3MCwgMHg4MDAxLCAweDk0MDIsIDB4MTJkOCwgMHgyMTAwLCAweDljMDYsCi0JMHgwMTY4LCAweDYwMDAsIDB4OTA4NiwgMHgwMDAwLCAweDAxNDgsIDB4NjAxMCwgMHgyMDU4LCAweGI4YTAsCi0JMHg5MjA2LCAweDExMjAsIDB4NjAwNCwgMHg5MDg2LCAweDAwMDIsIDB4MDE0MCwgMHg5Y2UwLCAweDAwMTgsCi0JMHgyMDAxLCAweDE4MTksIDB4MjAwNCwgMHg5YzAyLCAweDEyMjAsIDB4MGM0MCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA4LCAweDkwMDYsIDB4MDA0ZSwgMHgwMGJlLCAweDAwY2UsIDB4MDBlZSwgMHgwMDA1LCAweDIwMDEsCi0JMHgxODEwLCAweDIwMDQsIDB4ZDBhNCwgMHgwMTYwLCAweDIwMDEsIDB4MTgzNiwgMHgyMDA0LCAweGQwYTQsCi0JMHgwMTM4LCAweDIwMDEsIDB4MTg1YywgMHgyMDA0LCAweGQwYTQsIDB4MTExOCwgMHg5MDg1LCAweDAwMDEsCi0JMHgwMDA1LCAweDkwMDYsIDB4MGNlOCwgMHgwMTI2LCAweDAwMDYsIDB4MDBlNiwgMHgwMDE2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNzEsIDB4MTg0MCwgMHhkNWE0LCAweDAxMTgsIDB4NzA1NCwgMHg4MDAwLCAweDcwNTYsCi0JMHhkNWI0LCAweDAxMTgsIDB4NzA1MCwgMHg4MDAwLCAweDcwNTIsIDB4ZDVhYywgMHgwMTc4LCAweDI1MDAsCi0JMHg5MDg0LCAweDAwMDcsIDB4OTA4ZSwgMHgwMDAzLCAweDAxNDgsIDB4OTA4ZSwgMHgwMDA0LCAweDAxMzAsCi0JMHg5MDhlLCAweDAwMDUsIDB4MDExOCwgMHgyMDcxLCAweDE4NGEsIDB4MDA4OSwgMHgwMDFlLCAweDAwZWUsCi0JMHgwMDBlLCAweDAxMmUsIDB4MDAwNSwgMHgwMTI2LCAweDAwMDYsIDB4MDBlNiwgMHgyMDkxLCAweDgwMDAsCi0JMHgyMDcxLCAweDE4NDIsIDB4MDAyMSwgMHgwMGVlLCAweDAwMGUsIDB4MDEyZSwgMHgwMDA1LCAweDJlMDQsCi0JMHg4MDAwLCAweDIwNzIsIDB4MTIyMCwgMHg4ZTcwLCAweDJlMDQsIDB4ODAwMCwgMHgyMDcyLCAweDAwMDUsCi0JMHgwMGU2LCAweDIwNzEsIDB4MTg0MCwgMHgwYzk5LCAweDAwZWUsIDB4MDAwNSwgMHgwMGU2LCAweDIwNzEsCi0JMHgxODQ0LCAweDBjNjksIDB4MDBlZSwgMHgwMDA1LCAweDAxMjYsIDB4MDAwNiwgMHgwMGU2LCAweDIwOTEsCi0JMHg4MDAwLCAweDIwNzEsIDB4MTg0MCwgMHg3MDY0LCAweDgwMDAsIDB4NzA2NiwgMHgwMGVlLCAweDAwMGUsCi0JMHgwMTJlLCAweDAwMDUsIDB4MDAwMywgMHgwMDBiLCAweDAzY2UsIDB4MDAwMCwgMHhjMDAwLCAweDAwMDEsCi0JMHg4MDY0LCAweDAwMDgsIDB4MDAxMCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwMTAxLCAweDAwMDgsCi0JMHg0NDA3LCAweDAwMDMsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHg1ODBkLCAweDAwMGIsCi0JMHg3OTI0LCAweDAwMDMsIDB4NTA5NiwgMHgwMDBiLCAweDRjMGEsIDB4MDAwMywgMHhiYWMwLCAweDAwMDksCi0JMHgwMDhhLCAweDAwMDAsIDB4MGMwYSwgMHgwMDBiLCAweDE1ZmUsIDB4MDAwOCwgMHgzNDBhLCAweDAwMDMsCi0JMHhjNGMwLCAweDAwMDksIDB4NzAwMCwgMHgwMDAwLCAweGZmYTAsIDB4MDAwMSwgMHgyMDAwLCAweDAwMDAsCi0JMHgxNWJmLCAweDAwMGIsIDB4ODA4YywgMHgwMDA4LCAweDAwMDEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDcsCi0JMHg0MDQ3LCAweDAwMGEsIDB4ODA4YywgMHgwMDA4LCAweDAwMDIsIDB4MDAwMCwgMHgwODIxLCAweDAwMDMsCi0JMHg0MDIyLCAweDAwMDAsIDB4MDAyMiwgMHgwMDBiLCAweDQxMjIsIDB4MDAwOCwgMHg0NDQ3LCAweDAwMDIsCi0JMHgwZGUzLCAweDAwMGIsIDB4MGJmZSwgMHgwMDA4LCAweDExYTAsIDB4MDAwMSwgMHgxMWM1LCAweDAwMGIsCi0JMHgwY2EwLCAweDAwMDEsIDB4MTFjNSwgMHgwMDBiLCAweDkxODAsIDB4MDAwMSwgMHgwMDA0LCAweDAwMDAsCi0JMHg4MDYwLCAweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDdmNjIsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsCi0JMHgwMDA5LCAweDAwMDgsIDB4NDQzMCwgMHgwMDBiLCAweDgwOGMsIDB4MDAwOCwgMHgwMDAwLCAweDAwMDgsCi0JMHgwMDYwLCAweDAwMDgsIDB4ODA2MiwgMHgwMDA4LCAweDAwMDQsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsCi0JMHgwNDExLCAweDAwMDAsIDB4NDQzOCwgMHgwMDAzLCAweDAzZmUsIDB4MDAwMCwgMHg0M2UwLCAweDAwMDEsCi0JMHgwZGMyLCAweDAwMGIsIDB4YzJjMCwgMHgwMDA5LCAweDAwZmYsIDB4MDAwOCwgMHgwMmUwLCAweDAwMDEsCi0JMHgwZGMyLCAweDAwMGIsIDB4OTE4MCwgMHgwMDAxLCAweDAwMDUsIDB4MDAwOCwgMHg4MDYwLCAweDAwMDAsCi0JMHgwNDAwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwMDE5LCAweDAwMDAsCi0JMHg0NDQ3LCAweDAwMGIsIDB4MDI0MCwgMHgwMDAyLCAweDA5YmYsIDB4MDAwMywgMHgwMGZlLCAweDAwMDAsCi0JMHgzMWMyLCAweDAwMGIsIDB4MTEyYSwgMHgwMDAwLCAweDAwMmUsIDB4MDAwOCwgMHgwMjJjLCAweDAwMDgsCi0JMHgzYTQ0LCAweDAwMDIsIDB4MGMwYSwgMHgwMDBiLCAweDgwOGMsIDB4MDAwOCwgMHgwMDAyLCAweDAwMDAsCi0JMHgxNzYwLCAweDAwMDgsIDB4ODA2MiwgMHgwMDA4LCAweDAwMGYsIDB4MDAwOCwgMHg4MDY2LCAweDAwMDAsCi0JMHgwMDExLCAweDAwMDgsIDB4NDQ1OCwgMHgwMDAzLCAweDAxZmUsIDB4MDAwOCwgMHg0MmUwLCAweDAwMDksCi0JMHgwZGI1LCAweDAwMGIsIDB4MDBmZSwgMHgwMDAwLCAweDQzZTAsIDB4MDAwMSwgMHgwZGI1LCAweDAwMGIsCi0JMHgxNzM0LCAweDAwMDAsIDB4MTUzMCwgMHgwMDAwLCAweDE2MzIsIDB4MDAwOCwgMHgwZDJhLCAweDAwMDgsCi0JMHg5ODgwLCAweDAwMDEsIDB4MDAxMCwgMHgwMDAwLCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsCi0JMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDFlMGEsIDB4MDAwOCwgMHg0NDZhLCAweDAwMGIsCi0JMHg4MDhhLCAweDAwMDgsIDB4MDAwMywgMHgwMDA4LCAweDFhNjAsIDB4MDAwMCwgMHg4MDYyLCAweDAwMDgsCi0JMHgwMDAyLCAweDAwMDAsIDB4NTg3MCwgMHgwMDBiLCAweDgwNjYsIDB4MDAwMCwgMHgzNjc5LCAweDAwMDAsCi0JMHg0NDczLCAweDAwMDMsIDB4NTg3NCwgMHgwMDAzLCAweDgwNTQsIDB4MDAwOCwgMHgwMDExLCAweDAwMDgsCi0JMHg4MDc0LCAweDAwMDAsIDB4MTAxMCwgMHgwMDA4LCAweDFlZmUsIDB4MDAwMCwgMHgzMDBhLCAweDAwMGIsCi0JMHgwMDdkLCAweDAwMDQsIDB4MDAwYSwgMHgwMDBiLCAweDFjNjAsIDB4MDAwMCwgMHgxYjYyLCAweDAwMDAsCi0JMHg4MDY2LCAweDAwMDAsIDB4MDIzMSwgMHgwMDA4LCAweDQ0ODEsIDB4MDAwYiwgMHg1ODgyLCAweDAwMDMsCi0JMHgwMTQwLCAweDAwMDgsIDB4MDI0MiwgMHgwMDAwLCAweDFmNDMsIDB4MDAwMiwgMHgwYzhjLCAweDAwMDMsCi0JMHgwZDQ0LCAweDAwMDAsIDB4MGQ0NiwgMHgwMDA4LCAweDAzNDgsIDB4MDAwOCwgMHgwNDRhLCAweDAwMDgsCi0JMHgwMDkwLCAweDAwMGIsIDB4MDM0NCwgMHgwMDA4LCAweDA0NDYsIDB4MDAwOCwgMHgwNTQ4LCAweDAwMDgsCi0JMHgwNjRhLCAweDAwMDAsIDB4NTg5MCwgMHgwMDAzLCAweDgwNTQsIDB4MDAwOCwgMHgwMDAxLCAweDAwMDAsCi0JMHg4MDc0LCAweDAwMDAsIDB4MjAyMCwgMHgwMDA4LCAweDQwMDAsIDB4MDAwZiwgMHgzYTQwLCAweDAwMGEsCi0JMHgwYzBkLCAweDAwMDMsIDB4YWJkMCwgMHgwMDAxLCAweDAwMDAsIDB4MDAwOCwgMHg3ZjI0LCAweDAwMDAsCi0JMHg1ODliLCAweDAwMGIsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDIsIDB4MDAwMCwgMHgxMjQyLCAweDAwMDIsCi0JMHgwOGUxLCAweDAwMDMsIDB4M2E0NSwgMHgwMDBhLCAweDA4ZDAsIDB4MDAwYiwgMHgxZTEwLCAweDAwMGEsCi0JMHg3ZjNjLCAweDAwMDAsIDB4MDhjZCwgMHgwMDBiLCAweDFkMDAsIDB4MDAwMiwgMHg3ZjNhLCAweDAwMDAsCi0JMHgwZDYwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwMDA5LCAweDAwMDgsCi0JMHg0NGFiLCAweDAwMDMsIDB4MDBmZSwgMHgwMDAwLCAweDM0Y2EsIDB4MDAwMywgMHgxYzYwLCAweDAwMDAsCi0JMHg4MDYyLCAweDAwMDgsIDB4MDAwMSwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwMDA5LCAweDAwMDgsCi0JMHg0NGIzLCAweDAwMDMsIDB4MDBmZSwgMHgwMDAwLCAweDMxOWUsIDB4MDAwYiwgMHgwMDM4LCAweDAwMDAsCi0JMHgwMDYwLCAweDAwMDgsIDB4ODA2MiwgMHgwMDA4LCAweDAwMTksIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsCi0JMHgwMDA5LCAweDAwMDgsIDB4NDRiYywgMHgwMDAzLCAweDgwYzAsIDB4MDAwOSwgMHgwMGZmLCAweDAwMDgsCi0JMHg3ZjNlLCAweDAwMDgsIDB4MGQ2MCwgMHgwMDAwLCAweDBlZmUsIDB4MDAwOCwgMHgxZjgwLCAweDAwMDEsCi0JMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDAwMDksIDB4MDAwOCwgMHg0NGM2LCAweDAwMGIsCi0JMHgwMDNhLCAweDAwMDgsIDB4MWRmZSwgMHgwMDAwLCAweDAwYTcsIDB4MDAwMywgMHgwMDM2LCAweDAwMDgsCi0JMHgwMDdkLCAweDAwMDQsIDB4MDBlMSwgMHgwMDBiLCAweDgwNzQsIDB4MDAwMCwgMHgyMDAwLCAweDAwMDAsCi0JMHgwMGUxLCAweDAwMGIsIDB4M2E0NCwgMHgwMDAyLCAweDA5YzgsIDB4MDAwMywgMHg4MDc0LCAweDAwMDAsCi0JMHgxMDAwLCAweDAwMDAsIDB4YWRkMCwgMHgwMDAxLCAweDAwMDAsIDB4MDAwOCwgMHg3ZjBlLCAweDAwMDgsCi0JMHgzNTliLCAweDAwMDMsIDB4YTdkMCwgMHgwMDAxLCAweDAwMDAsIDB4MDAwOCwgMHg3ZjAwLCAweDAwMDAsCi0JMHhhNmQwLCAweDAwMDksIDB4MDAwMCwgMHgwMDA4LCAweDAwZDAsIDB4MDAwOSwgMHgwY2YxLCAweDAwMDMsCi0JMHg4MDc0LCAweDAwMDAsIDB4NDA0MCwgMHgwMDA4LCAweDU4ZTEsIDB4MDAwMywgMHg1MDk2LCAweDAwMGIsCi0JMHgzYTQ2LCAweDAwMGEsIDB4MGNmMSwgMHgwMDAzLCAweDNhNDcsIDB4MDAwMiwgMHgwOGVjLCAweDAwMGIsCi0JMHg4MDU0LCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDgwNzQsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsCi0JMHgwMTE4LCAweDAwMDMsIDB4OTJjMCwgMHgwMDA5LCAweDBmYzgsIDB4MDAwMCwgMHgwODBhLCAweDAwMDMsCi0JMHgxMjQ2LCAweDAwMGEsIDB4MGQ5NSwgMHgwMDAzLCAweDFhNjAsIDB4MDAwMCwgMHg4MDYyLCAweDAwMDgsCi0JMHgwMDAyLCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDM2N2EsIDB4MDAwMCwgMHg0NGY2LCAweDAwMGIsCi0JMHg5MmMwLCAweDAwMDksIDB4MDc4MCwgMHgwMDA4LCAweDBkYWYsIDB4MDAwMywgMHgxMjRiLCAweDAwMDIsCi0JMHgwOGZmLCAweDAwMDMsIDB4MmU0ZCwgMHgwMDAyLCAweDJlNGQsIDB4MDAwMiwgMHgwOTliLCAweDAwMDMsCi0JMHgzYTQ2LCAweDAwMGEsIDB4MGQwYywgMHgwMDAzLCAweDU5MDEsIDB4MDAwMywgMHg4MDU0LCAweDAwMDgsCi0JMHgwMDA0LCAweDAwMDAsIDB4MTI0MywgMHgwMDBhLCAweDA5MTYsIDB4MDAwMywgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDBkLCAweDAwMDAsIDB4MDE4OSwgMHgwMDA0LCAweDE4MTAsIDB4MDAwMCwgMHgwMTg5LCAweDAwMDQsCi0JMHgwMTE2LCAweDAwMGIsIDB4MTk0ZCwgMHgwMDBhLCAweDA5MTAsIDB4MDAwMywgMHgxMjQzLCAweDAwMGEsCi0JMHgwOWE1LCAweDAwMGIsIDB4NTkxMCwgMHgwMDAzLCAweDgwNTQsIDB4MDAwOCwgMHgwMDA0LCAweDAwMDAsCi0JMHgwMTdlLCAweDAwMGMsIDB4MTgxMCwgMHgwMDAwLCAweDAxODksIDB4MDAwNCwgMHg4MDc0LCAweDAwMDAsCi0JMHhmMDAwLCAweDAwMDgsIDB4MGQzMCwgMHgwMDAwLCAweDNhNDIsIDB4MDAwMiwgMHgwZDFlLCAweDAwMDMsCi0JMHgxNWZlLCAweDAwMDgsIDB4MzQ1MSwgMHgwMDBiLCAweDAwMGEsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsCi0JMHgwNTAxLCAweDAwMDAsIDB4ODAxMCwgMHgwMDA4LCAweDAwMGMsIDB4MDAwOCwgMHgwMTg5LCAweDAwMDQsCi0JMHgwMDBhLCAweDAwMGIsIDB4YmJlMCwgMHgwMDA5LCAweDAwMzAsIDB4MDAwOCwgMHgwZDM0LCAweDAwMGIsCi0JMHgxOGZlLCAweDAwMDAsIDB4M2NlMCwgMHgwMDA5LCAweDA5MzEsIDB4MDAwMywgMHgxNWZlLCAweDAwMDgsCi0JMHgzY2UwLCAweDAwMDksIDB4MDkzMSwgMHgwMDAzLCAweDAxNzksIDB4MDAwNCwgMHg4MDc2LCAweDAwMDgsCi0JMHgwMDQwLCAweDAwMDAsIDB4MDE3NiwgMHgwMDBiLCAweDgwNzYsIDB4MDAwOCwgMHgwMDQxLCAweDAwMDgsCi0JMHgwMTc2LCAweDAwMGIsIDB4YmJlMCwgMHgwMDA5LCAweDAwMzIsIDB4MDAwMCwgMHgwZDM5LCAweDAwMDMsCi0JMHgzYzFlLCAweDAwMDgsIDB4MDE3NiwgMHgwMDBiLCAweGJiZTAsIDB4MDAwOSwgMHgwMDM3LCAweDAwMDAsCi0JMHgwZDViLCAweDAwMGIsIDB4MThmZSwgMHgwMDAwLCAweDNjZTAsIDB4MDAwOSwgMHgwZDMxLCAweDAwMGIsCi0JMHg4MDc2LCAweDAwMDgsIDB4MDA0MCwgMHgwMDAwLCAweDFhNjAsIDB4MDAwMCwgMHg4MDYyLCAweDAwMDgsCi0JMHgwMDBkLCAweDAwMDAsIDB4YTZkMCwgMHgwMDA5LCAweDAwMDAsIDB4MDAwOCwgMHg3ZjA0LCAweDAwMDgsCi0JMHhhN2QwLCAweDAwMDEsIDB4MDAwMCwgMHgwMDA4LCAweDdmMDYsIDB4MDAwMCwgMHhhOGQwLCAweDAwMDEsCi0JMHgwMDAwLCAweDAwMDgsIDB4N2YwOCwgMHgwMDA4LCAweGE5ZDAsIDB4MDAwOSwgMHgwMDAwLCAweDAwMDgsCi0JMHg3ZjBhLCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDA0MjIsIDB4MDAwMCwgMHg0NTUyLCAweDAwMGIsCi0JMHgwMTdlLCAweDAwMGMsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDQsIDB4MDAwMCwgMHg4MDc0LCAweDAwMDAsCi0JMHhmMDAwLCAweDAwMDgsIDB4ODA3MiwgMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwgMHgwMTE4LCAweDAwMDMsCi0JMHhiYmUwLCAweDAwMDksIDB4MDAzOCwgMHgwMDAwLCAweDBkNmQsIDB4MDAwYiwgMHgxOGZlLCAweDAwMDAsCi0JMHgzY2UwLCAweDAwMDksIDB4MDk2YSwgMHgwMDBiLCAweDE1ZmUsIDB4MDAwOCwgMHgzY2UwLCAweDAwMDksCi0JMHgwZDJkLCAweDAwMDMsIDB4MDE3OSwgMHgwMDA0LCAweDgwNzYsIDB4MDAwOCwgMHgwMDQwLCAweDAwMDAsCi0JMHg4MDcyLCAweDAwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDAxYmYsIDB4MDAwYiwgMHg4MDc2LCAweDAwMDgsCi0JMHgwMDQyLCAweDAwMDgsIDB4MDE3NiwgMHgwMDBiLCAweGJiZTAsIDB4MDAwOSwgMHgwMDE2LCAweDAwMDAsCi0JMHgwZDc2LCAweDAwMGIsIDB4M2E0NCwgMHgwMDAyLCAweDBjMGMsIDB4MDAwYiwgMHg4MDcyLCAweDAwMDAsCi0JMHg4MDAwLCAweDAwMDAsIDB4ODAwMCwgMHgwMDBmLCAweDAwMGEsIDB4MDAwYiwgMHg4MDcyLCAweDAwMDAsCi0JMHg4MDAwLCAweDAwMDAsIDB4MDAwYSwgMHgwMDBiLCAweDNkMzAsIDB4MDAwYSwgMHg3ZjAwLCAweDAwMDAsCi0JMHhiYzgwLCAweDAwMDEsIDB4MDAwNywgMHgwMDAwLCAweDAxODIsIDB4MDAwMywgMHgxOTMwLCAweDAwMGEsCi0JMHg3ZjAwLCAweDAwMDAsIDB4OTg4MCwgMHgwMDAxLCAweDAwMDcsIDB4MDAwMCwgMHg4MDYwLCAweDAwMDAsCi0JMHgwNDAwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwMDBhLCAweDAwMDgsCi0JMHg0NTg3LCAweDAwMDMsIDB4NDAwMCwgMHgwMDBmLCAweDIxODksIDB4MDAwMywgMHgwODcwLCAweDAwMDgsCi0JMHg0MDAwLCAweDAwMGYsIDB4YmFjMCwgMHgwMDA5LCAweDAwOTAsIDB4MDAwOCwgMHgwOTkyLCAweDAwMDMsCi0JMHg4MDc0LCAweDAwMDAsIDB4MDcwNiwgMHgwMDAwLCAweDAxOTQsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsCi0JMHgwNzAzLCAweDAwMDAsIDB4NDAwMCwgMHgwMDBmLCAweDgwMTAsIDB4MDAwOCwgMHgwMDIzLCAweDAwMDAsCi0JMHgwMWNkLCAweDAwMGIsIDB4ODAxMCwgMHgwMDA4LCAweDAwMDgsIDB4MDAwMCwgMHgwMWNkLCAweDAwMGIsCi0JMHg4MDEwLCAweDAwMDgsIDB4MDAyMiwgMHgwMDA4LCAweDAxY2QsIDB4MDAwYiwgMHgwMTdlLCAweDAwMGMsCi0JMHg4MDEwLCAweDAwMDgsIDB4MDAwNywgMHgwMDAwLCAweDAxODksIDB4MDAwNCwgMHgxODEwLCAweDAwMDAsCi0JMHgwMTg5LCAweDAwMDQsIDB4MDFkNywgMHgwMDAzLCAweDAxN2UsIDB4MDAwYywgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDFiLCAweDAwMDgsIDB4MDE4OSwgMHgwMDA0LCAweDE4MTAsIDB4MDAwMCwgMHgwMTg5LCAweDAwMDQsCi0JMHg4MDc0LCAweDAwMDAsIDB4ZjA4MCwgMHgwMDAwLCAweDBkMzAsIDB4MDAwMCwgMHgwMDBhLCAweDAwMGIsCi0JMHg4MDEwLCAweDAwMDgsIDB4MDAwOSwgMHgwMDA4LCAweDAxY2QsIDB4MDAwYiwgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDA1LCAweDAwMDgsIDB4MDFjZCwgMHgwMDBiLCAweDgwOGMsIDB4MDAwOCwgMHgwMDAxLCAweDAwMDAsCi0JMHg4MDEwLCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDQxNDMsIDB4MDAwYSwgMHgwODVmLCAweDAwMDMsCi0JMHgzYTQ0LCAweDAwMDIsIDB4MGMwYSwgMHgwMDBiLCAweDBkMmEsIDB4MDAwOCwgMHgwMWNkLCAweDAwMGIsCi0JMHg4MDEwLCAweDAwMDgsIDB4MDAwMywgMHgwMDA4LCAweDAxY2YsIDB4MDAwMywgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDBiLCAweDAwMDAsIDB4MDFjZiwgMHgwMDAzLCAweDgwMTAsIDB4MDAwOCwgMHgwMDAyLCAweDAwMDAsCi0JMHgwMWNmLCAweDAwMDMsIDB4M2E0NywgMHgwMDAyLCAweDBjZTEsIDB4MDAwYiwgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDA2LCAweDAwMDgsIDB4MDFjZiwgMHgwMDAzLCAweDgwNzQsIDB4MDAwMCwgMHhmMDAwLCAweDAwMDgsCi0JMHgwMTg5LCAweDAwMDQsIDB4MDE4YywgMHgwMDA0LCAweDNhNDAsIDB4MDAwYSwgMHgwODBhLCAweDAwMDMsCi0JMHg4MDEwLCAweDAwMDgsIDB4MDAwYywgMHgwMDA4LCAweDAxODksIDB4MDAwNCwgMHgwMDBhLCAweDAwMGIsCi0JMHg4MDc0LCAweDAwMDAsIDB4ZjA4MCwgMHgwMDAwLCAweDBkMzAsIDB4MDAwMCwgMHgyZTRkLCAweDAwMDIsCi0JMHgyZTRkLCAweDAwMDIsIDB4MDllMCwgMHgwMDAzLCAweDgwNTQsIDB4MDAwOCwgMHgwMDE5LCAweDAwMDAsCi0JMHgwMDBhLCAweDAwMGIsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDksIDB4MDAwOCwgMHgwMDBhLCAweDAwMGIsCi0JMHgzYTQ0LCAweDAwMDIsIDB4MGMwYSwgMHgwMDBiLCAweDAxYzIsIDB4MDAwYiwgMHgwYTBiLCAweGY1ZGQsCi0JMHgwMDAzLCAweDAwMGIsIDB4MDNjZSwgMHgwMDAwLCAweGMwMDAsIDB4MDAwMSwgMHg4MDY0LCAweDAwMDgsCi0JMHgwMDEwLCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDAxMDEsIDB4MDAwOCwgMHhjMDA3LCAweDAwMDMsCi0JMHg4MDYwLCAweDAwMDAsIDB4MDQwMCwgMHgwMDAwLCAweDU4MGQsIDB4MDAwYiwgMHg3OTI0LCAweDAwMDMsCi0JMHg1MDk2LCAweDAwMGIsIDB4YzgwYSwgMHgwMDAzLCAweGJhYzAsIDB4MDAwOSwgMHgwMDhhLCAweDAwMDAsCi0JMHg4ODBhLCAweDAwMGIsIDB4MTVmZSwgMHgwMDA4LCAweGIwMGEsIDB4MDAwMywgMHhjNGMwLCAweDAwMDksCi0JMHg3MDAwLCAweDAwMDAsIDB4ZmZhMCwgMHgwMDAxLCAweDIwMDAsIDB4MDAwMCwgMHg5MWJmLCAweDAwMGIsCi0JMHg4MDhjLCAweDAwMDgsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwNywgMHg0MDQ3LCAweDAwMGEsCi0JMHg4MDhjLCAweDAwMDgsIDB4MDAwMiwgMHgwMDAwLCAweDA4MjEsIDB4MDAwMywgMHg0MDIyLCAweDAwMDAsCi0JMHgwMDIyLCAweDAwMGIsIDB4NDEyMiwgMHgwMDA4LCAweDQ0NDcsIDB4MDAwMiwgMHg4OWUzLCAweDAwMGIsCi0JMHgwYmZlLCAweDAwMDgsIDB4MTFhMCwgMHgwMDAxLCAweDExYzUsIDB4MDAwYiwgMHgwY2EwLCAweDAwMDEsCi0JMHgxMWM1LCAweDAwMGIsIDB4OTE4MCwgMHgwMDAxLCAweDAwMDQsIDB4MDAwMCwgMHg4MDYwLCAweDAwMDAsCi0JMHgwNDAwLCAweDAwMDAsIDB4N2Y2MiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwMDA5LCAweDAwMDgsCi0JMHhjMDMwLCAweDAwMGIsIDB4ODA4YywgMHgwMDA4LCAweDAwMDAsIDB4MDAwOCwgMHgwMDYwLCAweDAwMDgsCi0JMHg4MDYyLCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwNDExLCAweDAwMDAsCi0JMHhjMDM4LCAweDAwMDMsIDB4MDNmZSwgMHgwMDAwLCAweDQzZTAsIDB4MDAwMSwgMHg4OWMyLCAweDAwMGIsCi0JMHhjMmMwLCAweDAwMDksIDB4MDBmZiwgMHgwMDA4LCAweDAyZTAsIDB4MDAwMSwgMHg4OWMyLCAweDAwMGIsCi0JMHg5MTgwLCAweDAwMDEsIDB4MDAwNSwgMHgwMDA4LCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsCi0JMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDAwMTksIDB4MDAwMCwgMHhjMDQ3LCAweDAwMGIsCi0JMHgwMjQwLCAweDAwMDIsIDB4MDliZiwgMHgwMDAzLCAweDAwZmUsIDB4MDAwMCwgMHgzMWMyLCAweDAwMGIsCi0JMHgxMTJhLCAweDAwMDAsIDB4MDAyZSwgMHgwMDA4LCAweDAyMmMsIDB4MDAwOCwgMHgzYTQ0LCAweDAwMDIsCi0JMHg4ODBhLCAweDAwMGIsIDB4ODA4YywgMHgwMDA4LCAweDAwMDIsIDB4MDAwMCwgMHgxNzYwLCAweDAwMDgsCi0JMHg4MDYyLCAweDAwMDgsIDB4MDAwZiwgMHgwMDA4LCAweDgwNjYsIDB4MDAwMCwgMHgwMDExLCAweDAwMDgsCi0JMHhjMDU4LCAweDAwMDMsIDB4MDFmZSwgMHgwMDA4LCAweDQyZTAsIDB4MDAwOSwgMHg4OWI1LCAweDAwMGIsCi0JMHgwMGZlLCAweDAwMDAsIDB4NDNlMCwgMHgwMDAxLCAweDg5YjUsIDB4MDAwYiwgMHgxNzM0LCAweDAwMDAsCi0JMHgxNTMwLCAweDAwMDAsIDB4MTYzMiwgMHgwMDA4LCAweDBkMmEsIDB4MDAwOCwgMHg5ODgwLCAweDAwMDEsCi0JMHgwMDEwLCAweDAwMDAsIDB4ODA2MCwgMHgwMDAwLCAweDA0MDAsIDB4MDAwMCwgMHg3ZjYyLCAweDAwMDgsCi0JMHg4MDY2LCAweDAwMDAsIDB4MWUwYSwgMHgwMDA4LCAweGMwNmEsIDB4MDAwYiwgMHg4MDhhLCAweDAwMDgsCi0JMHgwMDAzLCAweDAwMDgsIDB4MWE2MCwgMHgwMDAwLCAweDgwNjIsIDB4MDAwOCwgMHgwMDAyLCAweDAwMDAsCi0JMHg1ODcwLCAweDAwMGIsIDB4ODA2NiwgMHgwMDAwLCAweDM2NzksIDB4MDAwMCwgMHhjMDczLCAweDAwMDMsCi0JMHg1ODc0LCAweDAwMDMsIDB4ODA1NCwgMHgwMDA4LCAweDAwMTEsIDB4MDAwOCwgMHg4MDc0LCAweDAwMDAsCi0JMHgxMDEwLCAweDAwMDgsIDB4MWVmZSwgMHgwMDAwLCAweDMwMGEsIDB4MDAwYiwgMHgwMDdkLCAweDAwMDQsCi0JMHgwMDBhLCAweDAwMGIsIDB4MWM2MCwgMHgwMDAwLCAweDFiNjIsIDB4MDAwMCwgMHg4MDY2LCAweDAwMDAsCi0JMHgwMjMxLCAweDAwMDgsIDB4YzA4MSwgMHgwMDBiLCAweDU4ODIsIDB4MDAwMywgMHgwMTQwLCAweDAwMDgsCi0JMHgwMjQyLCAweDAwMDAsIDB4MWY0MywgMHgwMDAyLCAweDg4OGMsIDB4MDAwMywgMHgwZDQ0LCAweDAwMDAsCi0JMHgwZDQ2LCAweDAwMDgsIDB4MDM0OCwgMHgwMDA4LCAweDA0NGEsIDB4MDAwOCwgMHgwMDkwLCAweDAwMGIsCi0JMHgwMzQ0LCAweDAwMDgsIDB4MDQ0NiwgMHgwMDA4LCAweDA1NDgsIDB4MDAwOCwgMHgwNjRhLCAweDAwMDAsCi0JMHg1ODkwLCAweDAwMDMsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDEsIDB4MDAwMCwgMHg4MDc0LCAweDAwMDAsCi0JMHgyMDIwLCAweDAwMDgsIDB4NDAwMCwgMHgwMDBmLCAweDNhNDAsIDB4MDAwYSwgMHg4ODBkLCAweDAwMDMsCi0JMHhhYmQwLCAweDAwMDEsIDB4MDAwMCwgMHgwMDA4LCAweDdmMjQsIDB4MDAwMCwgMHg1ODliLCAweDAwMGIsCi0JMHg4MDU0LCAweDAwMDgsIDB4MDAwMiwgMHgwMDAwLCAweDEyNDIsIDB4MDAwMiwgMHgwOGUxLCAweDAwMDMsCi0JMHgzYTQ1LCAweDAwMGEsIDB4MDhkMCwgMHgwMDBiLCAweDFlMTAsIDB4MDAwYSwgMHg3ZjNjLCAweDAwMDAsCi0JMHgwOGNkLCAweDAwMGIsIDB4MWQwMCwgMHgwMDAyLCAweDdmM2EsIDB4MDAwMCwgMHgwZDYwLCAweDAwMDAsCi0JMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDAwMDksIDB4MDAwOCwgMHhjMGFiLCAweDAwMDMsCi0JMHgwMGZlLCAweDAwMDAsIDB4YjBjYSwgMHgwMDAzLCAweDFjNjAsIDB4MDAwMCwgMHg4MDYyLCAweDAwMDgsCi0JMHgwMDAxLCAweDAwMDAsIDB4ODA2NiwgMHgwMDAwLCAweDAwMDksIDB4MDAwOCwgMHhjMGIzLCAweDAwMDMsCi0JMHgwMGZlLCAweDAwMDAsIDB4MzE5ZSwgMHgwMDBiLCAweDAwMzgsIDB4MDAwMCwgMHgwMDYwLCAweDAwMDgsCi0JMHg4MDYyLCAweDAwMDgsIDB4MDAxOSwgMHgwMDAwLCAweDgwNjYsIDB4MDAwMCwgMHgwMDA5LCAweDAwMDgsCi0JMHhjMGJjLCAweDAwMDMsIDB4ODBjMCwgMHgwMDA5LCAweDAwZmYsIDB4MDAwOCwgMHg3ZjNlLCAweDAwMDgsCi0JMHgwZDYwLCAweDAwMDAsIDB4MGVmZSwgMHgwMDA4LCAweDFmODAsIDB4MDAwMSwgMHg3ZjYyLCAweDAwMDgsCi0JMHg4MDY2LCAweDAwMDAsIDB4MDAwOSwgMHgwMDA4LCAweGMwYzYsIDB4MDAwYiwgMHgwMDNhLCAweDAwMDgsCi0JMHgxZGZlLCAweDAwMDAsIDB4MDBhNywgMHgwMDAzLCAweDAwMzYsIDB4MDAwOCwgMHgwMDdkLCAweDAwMDQsCi0JMHgwMGUxLCAweDAwMGIsIDB4ODA3NCwgMHgwMDAwLCAweDIwMDAsIDB4MDAwMCwgMHgwMGUxLCAweDAwMGIsCi0JMHgzYTQ0LCAweDAwMDIsIDB4MDljOCwgMHgwMDAzLCAweDgwNzQsIDB4MDAwMCwgMHgxMDAwLCAweDAwMDAsCi0JMHhhZGQwLCAweDAwMDEsIDB4MDAwMCwgMHgwMDA4LCAweDdmMGUsIDB4MDAwOCwgMHhiMTliLCAweDAwMDMsCi0JMHhhN2QwLCAweDAwMDEsIDB4MDAwMCwgMHgwMDA4LCAweDdmMDAsIDB4MDAwMCwgMHhhNmQwLCAweDAwMDksCi0JMHgwMDAwLCAweDAwMDgsIDB4MDBkMCwgMHgwMDA5LCAweDg4ZjEsIDB4MDAwMywgMHg4MDc0LCAweDAwMDAsCi0JMHg0MDQwLCAweDAwMDgsIDB4NThlMSwgMHgwMDAzLCAweDUwOTYsIDB4MDAwYiwgMHgzYTQ2LCAweDAwMGEsCi0JMHg4OGYxLCAweDAwMDMsIDB4M2E0NywgMHgwMDAyLCAweDA4ZWMsIDB4MDAwYiwgMHg4MDU0LCAweDAwMDgsCi0JMHgwMDA0LCAweDAwMDAsIDB4ODA3NCwgMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwgMHgwMTE4LCAweDAwMDMsCi0JMHg5MmMwLCAweDAwMDksIDB4MGZjOCwgMHgwMDAwLCAweDA4MGEsIDB4MDAwMywgMHgxMjQ2LCAweDAwMGEsCi0JMHg4OTk1LCAweDAwMDMsIDB4MWE2MCwgMHgwMDAwLCAweDgwNjIsIDB4MDAwOCwgMHgwMDAyLCAweDAwMDAsCi0JMHg4MDY2LCAweDAwMDAsIDB4MzY3YSwgMHgwMDAwLCAweGMwZjYsIDB4MDAwYiwgMHg5MmMwLCAweDAwMDksCi0JMHgwNzgwLCAweDAwMDgsIDB4ODlhZiwgMHgwMDAzLCAweDEyNGIsIDB4MDAwMiwgMHgwOGZmLCAweDAwMDMsCi0JMHgyZTRkLCAweDAwMDIsIDB4MmU0ZCwgMHgwMDAyLCAweDA5OWIsIDB4MDAwMywgMHgzYTQ2LCAweDAwMGEsCi0JMHg4OTBjLCAweDAwMDMsIDB4NTkwMSwgMHgwMDAzLCAweDgwNTQsIDB4MDAwOCwgMHgwMDA0LCAweDAwMDAsCi0JMHgxMjQzLCAweDAwMGEsIDB4MDkxNiwgMHgwMDAzLCAweDgwMTAsIDB4MDAwOCwgMHgwMDBkLCAweDAwMDAsCi0JMHgwMTg5LCAweDAwMDQsIDB4MTgxMCwgMHgwMDAwLCAweDAxODksIDB4MDAwNCwgMHgwMTE2LCAweDAwMGIsCi0JMHgxOTRkLCAweDAwMGEsIDB4MDkxMCwgMHgwMDAzLCAweDEyNDMsIDB4MDAwYSwgMHgwOWE1LCAweDAwMGIsCi0JMHg1OTEwLCAweDAwMDMsIDB4ODA1NCwgMHgwMDA4LCAweDAwMDQsIDB4MDAwMCwgMHgwMTdlLCAweDAwMGMsCi0JMHgxODEwLCAweDAwMDAsIDB4MDE4OSwgMHgwMDA0LCAweDgwNzQsIDB4MDAwMCwgMHhmMDAwLCAweDAwMDgsCi0JMHgwZDMwLCAweDAwMDAsIDB4M2E0MiwgMHgwMDAyLCAweDg5MWUsIDB4MDAwMywgMHgxNWZlLCAweDAwMDgsCi0JMHhiMDUxLCAweDAwMGIsIDB4MDAwYSwgMHgwMDBiLCAweDgwNzQsIDB4MDAwMCwgMHgwNTAxLCAweDAwMDAsCi0JMHg4MDEwLCAweDAwMDgsIDB4MDAwYywgMHgwMDA4LCAweDAxODksIDB4MDAwNCwgMHgwMDBhLCAweDAwMGIsCi0JMHhiYmUwLCAweDAwMDksIDB4MDAzMCwgMHgwMDA4LCAweDg5MzQsIDB4MDAwYiwgMHgxOGZlLCAweDAwMDAsCi0JMHgzY2UwLCAweDAwMDksIDB4MDkzMSwgMHgwMDAzLCAweDE1ZmUsIDB4MDAwOCwgMHgzY2UwLCAweDAwMDksCi0JMHgwOTMxLCAweDAwMDMsIDB4MDE3OSwgMHgwMDA0LCAweDgwNzYsIDB4MDAwOCwgMHgwMDQwLCAweDAwMDAsCi0JMHgwMTc2LCAweDAwMGIsIDB4ODA3NiwgMHgwMDA4LCAweDAwNDEsIDB4MDAwOCwgMHgwMTc2LCAweDAwMGIsCi0JMHhiYmUwLCAweDAwMDksIDB4MDAzMiwgMHgwMDAwLCAweDg5MzksIDB4MDAwMywgMHgzYzFlLCAweDAwMDgsCi0JMHgwMTc2LCAweDAwMGIsIDB4YmJlMCwgMHgwMDA5LCAweDAwMzcsIDB4MDAwMCwgMHg4OTViLCAweDAwMGIsCi0JMHgxOGZlLCAweDAwMDAsIDB4M2NlMCwgMHgwMDA5LCAweDg5MzEsIDB4MDAwYiwgMHg4MDc2LCAweDAwMDgsCi0JMHgwMDQwLCAweDAwMDAsIDB4MWE2MCwgMHgwMDAwLCAweDgwNjIsIDB4MDAwOCwgMHgwMDBkLCAweDAwMDAsCi0JMHhhNmQwLCAweDAwMDksIDB4MDAwMCwgMHgwMDA4LCAweDdmMDQsIDB4MDAwOCwgMHhhN2QwLCAweDAwMDEsCi0JMHgwMDAwLCAweDAwMDgsIDB4N2YwNiwgMHgwMDAwLCAweGE4ZDAsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDgsCi0JMHg3ZjA4LCAweDAwMDgsIDB4YTlkMCwgMHgwMDA5LCAweDAwMDAsIDB4MDAwOCwgMHg3ZjBhLCAweDAwMDAsCi0JMHg4MDY2LCAweDAwMDAsIDB4MDQyMiwgMHgwMDAwLCAweGMxNTIsIDB4MDAwYiwgMHgwMTdlLCAweDAwMGMsCi0JMHg4MDU0LCAweDAwMDgsIDB4MDAwNCwgMHgwMDAwLCAweDgwNzQsIDB4MDAwMCwgMHhmMDAwLCAweDAwMDgsCi0JMHg4MDcyLCAweDAwMDAsIDB4ODAwMCwgMHgwMDAwLCAweDAxMTgsIDB4MDAwMywgMHhiYmUwLCAweDAwMDksCi0JMHgwMDM4LCAweDAwMDAsIDB4ODk2ZCwgMHgwMDBiLCAweDE4ZmUsIDB4MDAwMCwgMHgzY2UwLCAweDAwMDksCi0JMHgwOTZhLCAweDAwMGIsIDB4MTVmZSwgMHgwMDA4LCAweDNjZTAsIDB4MDAwOSwgMHg4OTJkLCAweDAwMDMsCi0JMHgwMTc5LCAweDAwMDQsIDB4ODA3NiwgMHgwMDA4LCAweDAwNDAsIDB4MDAwMCwgMHg4MDcyLCAweDAwMDAsCi0JMHg4MDAwLCAweDAwMDAsIDB4MDFiZiwgMHgwMDBiLCAweDgwNzYsIDB4MDAwOCwgMHgwMDQyLCAweDAwMDgsCi0JMHgwMTc2LCAweDAwMGIsIDB4YmJlMCwgMHgwMDA5LCAweDAwMTYsIDB4MDAwMCwgMHg4OTc2LCAweDAwMGIsCi0JMHgzYTQ0LCAweDAwMDIsIDB4ODgwYywgMHgwMDBiLCAweDgwNzIsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsCi0JMHg4MDAwLCAweDAwMGYsIDB4MDAwYSwgMHgwMDBiLCAweDgwNzIsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsCi0JMHgwMDBhLCAweDAwMGIsIDB4M2QzMCwgMHgwMDBhLCAweDdmMDAsIDB4MDAwMCwgMHhiYzgwLCAweDAwMDEsCi0JMHgwMDA3LCAweDAwMDAsIDB4MDE4MiwgMHgwMDAzLCAweDE5MzAsIDB4MDAwYSwgMHg3ZjAwLCAweDAwMDAsCi0JMHg5ODgwLCAweDAwMDEsIDB4MDAwNywgMHgwMDAwLCAweDgwNjAsIDB4MDAwMCwgMHgwNDAwLCAweDAwMDAsCi0JMHg3ZjYyLCAweDAwMDgsIDB4ODA2NiwgMHgwMDAwLCAweDAwMGEsIDB4MDAwOCwgMHhjMTg3LCAweDAwMDMsCi0JMHg0MDAwLCAweDAwMGYsIDB4MjE4OSwgMHgwMDAzLCAweDA4NzAsIDB4MDAwOCwgMHg0MDAwLCAweDAwMGYsCi0JMHhiYWMwLCAweDAwMDksIDB4MDA5MCwgMHgwMDA4LCAweDA5OTIsIDB4MDAwMywgMHg4MDc0LCAweDAwMDAsCi0JMHgwNzA2LCAweDAwMDAsIDB4MDE5NCwgMHgwMDBiLCAweDgwNzQsIDB4MDAwMCwgMHgwNzAzLCAweDAwMDAsCi0JMHg0MDAwLCAweDAwMGYsIDB4ODAxMCwgMHgwMDA4LCAweDAwMjMsIDB4MDAwMCwgMHgwMWNkLCAweDAwMGIsCi0JMHg4MDEwLCAweDAwMDgsIDB4MDAwOCwgMHgwMDAwLCAweDAxY2QsIDB4MDAwYiwgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDIyLCAweDAwMDgsIDB4MDFjZCwgMHgwMDBiLCAweDAxN2UsIDB4MDAwYywgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDA3LCAweDAwMDAsIDB4MDE4OSwgMHgwMDA0LCAweDE4MTAsIDB4MDAwMCwgMHgwMTg5LCAweDAwMDQsCi0JMHgwMWQ3LCAweDAwMDMsIDB4MDE3ZSwgMHgwMDBjLCAweDgwMTAsIDB4MDAwOCwgMHgwMDFiLCAweDAwMDgsCi0JMHgwMTg5LCAweDAwMDQsIDB4MTgxMCwgMHgwMDAwLCAweDAxODksIDB4MDAwNCwgMHg4MDc0LCAweDAwMDAsCi0JMHhmMDgwLCAweDAwMDAsIDB4MGQzMCwgMHgwMDAwLCAweDAwMGEsIDB4MDAwYiwgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDA5LCAweDAwMDgsIDB4MDFjZCwgMHgwMDBiLCAweDgwMTAsIDB4MDAwOCwgMHgwMDA1LCAweDAwMDgsCi0JMHgwMWNkLCAweDAwMGIsIDB4ODA4YywgMHgwMDA4LCAweDAwMDEsIDB4MDAwMCwgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDA0LCAweDAwMDAsIDB4NDE0MywgMHgwMDBhLCAweDA4NWYsIDB4MDAwMywgMHgzYTQ0LCAweDAwMDIsCi0JMHg4ODBhLCAweDAwMGIsIDB4MGQyYSwgMHgwMDA4LCAweDAxY2QsIDB4MDAwYiwgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDAzLCAweDAwMDgsIDB4MDFjZiwgMHgwMDAzLCAweDgwMTAsIDB4MDAwOCwgMHgwMDBiLCAweDAwMDAsCi0JMHgwMWNmLCAweDAwMDMsIDB4ODAxMCwgMHgwMDA4LCAweDAwMDIsIDB4MDAwMCwgMHgwMWNmLCAweDAwMDMsCi0JMHgzYTQ3LCAweDAwMDIsIDB4ODhlMSwgMHgwMDBiLCAweDgwMTAsIDB4MDAwOCwgMHgwMDA2LCAweDAwMDgsCi0JMHgwMWNmLCAweDAwMDMsIDB4ODA3NCwgMHgwMDAwLCAweGYwMDAsIDB4MDAwOCwgMHgwMTg5LCAweDAwMDQsCi0JMHgwMThjLCAweDAwMDQsIDB4M2E0MCwgMHgwMDBhLCAweDA4MGEsIDB4MDAwMywgMHg4MDEwLCAweDAwMDgsCi0JMHgwMDBjLCAweDAwMDgsIDB4MDE4OSwgMHgwMDA0LCAweDAwMGEsIDB4MDAwYiwgMHg4MDc0LCAweDAwMDAsCi0JMHhmMDgwLCAweDAwMDAsIDB4MGQzMCwgMHgwMDAwLCAweDJlNGQsIDB4MDAwMiwgMHgyZTRkLCAweDAwMDIsCi0JMHgwOWUwLCAweDAwMDMsIDB4ODA1NCwgMHgwMDA4LCAweDAwMTksIDB4MDAwMCwgMHgwMDBhLCAweDAwMGIsCi0JMHg4MDU0LCAweDAwMDgsIDB4MDAwOSwgMHgwMDA4LCAweDAwMGEsIDB4MDAwYiwgMHgzYTQ0LCAweDAwMDIsCi0JMHg4ODBhLCAweDAwMGIsIDB4MDFjMiwgMHgwMDBiLCAweDQ2MGIsIDB4ZjVjNiwgMHgwMDAxLCAweDAwMDIsCi0JMHgwMDA0LCAweDAwMDgsIDB4MDAxMCwgMHgwMDIwLCAweDAwNDAsIDB4MDA4MCwgMHgwMTAwLCAweDAyMDAsCi0JMHgwNDAwLCAweDA4MDAsIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAsIDB4ODAwMCwgMHg5MmM0Ci19OwotI2lmZGVmIFVOSVFVRV9GV19OQU1FCi11bnNpZ25lZCBzaG9ydCBmdzIzMDBmbHhfbGVuZ3RoMDEgPSAweGRiYjc7Ci0jZWxzZQotdW5zaWduZWQgc2hvcnQgcmlzY19jb2RlX2xlbmd0aDAxID0gMHhkYmI3OwotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IDkyYjNlMTMuLmZlZTBjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtNTAsNyArNTAsNyBAQAogCQkJICAgIGhhLT5ob3N0X25vKTsKIAogCQkJdmZyZWUoaGEtPmZ3X2R1bXBfYnVmZmVyKTsKLQkJCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTI1WFgoaGEpKQorCQkJaWYgKCFJU19RTEEyNFhYKGhhKSAmJiAhSVNfUUxBNTRYWChoYSkpCiAJCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyloYS0+ZndfZHVtcCwKIAkJCQkgICAgaGEtPmZ3X2R1bXBfb3JkZXIpOwogCkBAIC02NCw3ICs2NCw3IEBACiAJCWlmICgoaGEtPmZ3X2R1bXAgfHwgaGEtPmZ3X2R1bXBlZCkgJiYgIWhhLT5md19kdW1wX3JlYWRpbmcpIHsKIAkJCWhhLT5md19kdW1wX3JlYWRpbmcgPSAxOwogCi0JCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpCisJCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpCiAJCQkJZHVtcF9zaXplID0gRldfRFVNUF9TSVpFXzI0WFg7CiAJCQllbHNlIHsKIAkJCQlkdW1wX3NpemUgPSBGV19EVU1QX1NJWkVfMU07CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBDaGVja3N1bSBOVlJBTS4gKi8KLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJdWludDMyX3QgKml0ZXI7CiAJCXVpbnQzMl90IGNoa3N1bTsKIApAQCAtMzA4LDYgKzMwOCw2MSBAQAogCS53cml0ZSA9IHFsYTJ4MDBfc3lzZnNfd3JpdGVfb3B0cm9tX2N0bCwKIH07CiAKK3N0YXRpYyBzc2l6ZV90CitxbGEyeDAwX3N5c2ZzX3JlYWRfdnBkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjaGFyICpidWYsIGxvZmZfdCBvZmYsCisgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSA9IHRvX3FsYV9ob3N0KGRldl90b19zaG9zdChjb250YWluZXJfb2Yoa29iaiwKKwkgICAgc3RydWN0IGRldmljZSwga29iaikpKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IG9mZiAhPSAwKQorCQlyZXR1cm4gMDsKKworCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJLyogUmVhZCBOVlJBTS4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwloYS0+aXNwX29wcy5yZWFkX252cmFtKGhhLCAodWludDhfdCAqKWJ1ZiwgaGEtPnZwZF9iYXNlLCBoYS0+dnBkX3NpemUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gaGEtPnZwZF9zaXplOworfQorCitzdGF0aWMgc3NpemVfdAorcWxhMngwMF9zeXNmc193cml0ZV92cGQoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwKKyAgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNjc2lfcWxhX2hvc3QgKmhhID0gdG9fcWxhX2hvc3QoZGV2X3RvX3Nob3N0KGNvbnRhaW5lcl9vZihrb2JqLAorCSAgICBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSkpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgb2ZmICE9IDAgfHwgY291bnQgIT0gaGEtPnZwZF9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJLyogV3JpdGUgTlZSQU0uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJaGEtPmlzcF9vcHMud3JpdGVfbnZyYW0oaGEsICh1aW50OF90ICopYnVmLCBoYS0+dnBkX2Jhc2UsIGNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgc3lzZnNfdnBkX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gInZwZCIsCisJCS5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1IsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnNpemUgPSAwLAorCS5yZWFkID0gcWxhMngwMF9zeXNmc19yZWFkX3ZwZCwKKwkud3JpdGUgPSBxbGEyeDAwX3N5c2ZzX3dyaXRlX3ZwZCwKK307CisKIHZvaWQKIHFsYTJ4MDBfYWxsb2Nfc3lzZnNfYXR0cihzY3NpX3FsYV9ob3N0X3QgKmhhKQogewpAQCAtMzE4LDYgKzM3Myw3IEBACiAJc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZob3N0LT5zaG9zdF9nZW5kZXYua29iaiwgJnN5c2ZzX29wdHJvbV9hdHRyKTsKIAlzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2dlbmRldi5rb2JqLAogCSAgICAmc3lzZnNfb3B0cm9tX2N0bF9hdHRyKTsKKwlzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2dlbmRldi5rb2JqLCAmc3lzZnNfdnBkX2F0dHIpOwogfQogCiB2b2lkCkBAIC0zMzAsNiArMzg2LDcgQEAKIAlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmhvc3QtPnNob3N0X2dlbmRldi5rb2JqLCAmc3lzZnNfb3B0cm9tX2F0dHIpOwogCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosCiAJICAgICZzeXNmc19vcHRyb21fY3RsX2F0dHIpOworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaG9zdC0+c2hvc3RfZ2VuZGV2LmtvYmosICZzeXNmc192cGRfYXR0cik7CiAKIAlpZiAoaGEtPmJlYWNvbl9ibGlua19sZWQgPT0gMSkKIAkJaGEtPmlzcF9vcHMuYmVhY29uX29mZihoYSk7CkBAIC00NTAsOSArNTA3LDYgQEAKIAlpbnQgbGVuID0gMDsKIAogCXN3aXRjaCAoaGEtPnppb19tb2RlKSB7Ci0JY2FzZSBRTEFfWklPX01PREVfNToKLQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFLWxlbiwgIk1vZGUgNVxuIik7Ci0JCWJyZWFrOwogCWNhc2UgUUxBX1pJT19NT0RFXzY6CiAJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sICJNb2RlIDZcbiIpOwogCQlicmVhazsKQEAgLTQ3MCwyMCArNTI0LDE2IEBACiAJaW50IHZhbCA9IDA7CiAJdWludDE2X3QgemlvX21vZGU7CiAKKwlpZiAoIUlTX1pJT19TVVBQT1JURUQoaGEpKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCiAJaWYgKHNzY2FuZihidWYsICIlZCIsICZ2YWwpICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3dpdGNoICh2YWwpIHsKLQljYXNlIDE6Ci0JCXppb19tb2RlID0gUUxBX1pJT19NT0RFXzU7Ci0JCWJyZWFrOwotCWNhc2UgMjoKKwlpZiAodmFsKQogCQl6aW9fbW9kZSA9IFFMQV9aSU9fTU9ERV82OwotCQlicmVhazsKLQlkZWZhdWx0OgorCWVsc2UKIAkJemlvX21vZGUgPSBRTEFfWklPX0RJU0FCTEVEOwotCQlicmVhazsKLQl9CiAKIAkvKiBVcGRhdGUgcGVyLWhiYSB2YWx1ZXMgYW5kIHF1ZXVlIGEgcmVzZXQuICovCiAJaWYgKHppb19tb2RlICE9IFFMQV9aSU9fRElTQUJMRUQgfHwgaGEtPnppb19tb2RlICE9IFFMQV9aSU9fRElTQUJMRUQpIHsKQEAgLTc1MCw3ICs4MDAsNyBAQAogCXBmY19ob3N0X3N0YXQgPSAmaGEtPmZjX2hvc3Rfc3RhdDsKIAltZW1zZXQocGZjX2hvc3Rfc3RhdCwgLTEsIHNpemVvZihzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzKSk7CiAKLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJcnZhbCA9IHFsYTI0eHhfZ2V0X2lzcF9zdGF0cyhoYSwgKHVpbnQzMl90ICopJnN0YXRfYnVmLAogCQkgICAgc2l6ZW9mKHN0YXRfYnVmKSAvIDQsIG1iX3N0YXQpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKaW5kZXggYjMxYTAzYi4uNTM1MDhmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaApAQCAtMzEsODIgKzMxLDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRSkKLSNpZiBkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTIxWFgpIHx8IGRlZmluZWQoQ09ORklHX1NDU0lfUUxBMjFYWF9NT0RVTEUpCi0jZGVmaW5lIElTX1FMQTIxMDAoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjEwMCkKLSNlbHNlCi0jZGVmaW5lIElTX1FMQTIxMDAoaGEpCTAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NTSV9RTEEyMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTIyWFhfTU9EVUxFKQotI2RlZmluZSBJU19RTEEyMjAwKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIyMDApCi0jZWxzZQotI2RlZmluZSBJU19RTEEyMjAwKGhhKQkwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NDU0lfUUxBMjMwMCkgfHwgZGVmaW5lZChDT05GSUdfU0NTSV9RTEEyMzAwX01PRFVMRSkKLSNkZWZpbmUgSVNfUUxBMjMwMChoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzAwKQotI2RlZmluZSBJU19RTEEyMzEyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIzMTIpCi0jZWxzZQotI2RlZmluZSBJU19RTEEyMzAwKGhhKQkwCi0jZGVmaW5lIElTX1FMQTIzMTIoaGEpCTAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NTSV9RTEEyMzIyKSB8fCBkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTIzMjJfTU9EVUxFKQotI2RlZmluZSBJU19RTEEyMzIyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIzMjIpCi0jZWxzZQotI2RlZmluZSBJU19RTEEyMzIyKGhhKQkwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NDU0lfUUxBNjMxMikgfHwgZGVmaW5lZChDT05GSUdfU0NTSV9RTEE2MzEyX01PRFVMRSkKLSNkZWZpbmUgSVNfUUxBNjMxMihoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzEyKQotI2RlZmluZSBJU19RTEE2MzIyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDYzMjIpCi0jZWxzZQotI2RlZmluZSBJU19RTEE2MzEyKGhhKQkwCi0jZGVmaW5lIElTX1FMQTYzMjIoaGEpCTAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0NTSV9RTEEyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTI0WFhfTU9EVUxFKQotI2RlZmluZSBJU19RTEEyNDIyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MjIpCi0jZGVmaW5lIElTX1FMQTI0MzIoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjQzMikKLSNlbHNlCi0jZGVmaW5lIElTX1FMQTI0MjIoaGEpCTAKLSNkZWZpbmUgSVNfUUxBMjQzMihoYSkJMAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TQ1NJX1FMQTI1WFgpIHx8IGRlZmluZWQoQ09ORklHX1NDU0lfUUxBMjVYWF9NT0RVTEUpCi0jZGVmaW5lIElTX1FMQTI1MTIoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjUxMikKLSNkZWZpbmUgSVNfUUxBMjUyMihoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNTIyKQotI2Vsc2UKLSNkZWZpbmUgSVNfUUxBMjUxMihoYSkJMAotI2RlZmluZSBJU19RTEEyNTIyKGhhKQkwCi0jZW5kaWYKLQotI2Vsc2UJLyogIWRlZmluZWQoQ09ORklHX1NDU0lfUUxBMlhYWF9FTUJFRERFRF9GSVJNV0FSRSkgKi8KLQotI2RlZmluZSBJU19RTEEyMTAwKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIxMDApCi0jZGVmaW5lIElTX1FMQTIyMDAoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjIwMCkKLSNkZWZpbmUgSVNfUUxBMjMwMChoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzAwKQotI2RlZmluZSBJU19RTEEyMzEyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIzMTIpCi0jZGVmaW5lIElTX1FMQTIzMjIoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMyMikKLSNkZWZpbmUgSVNfUUxBNjMxMihoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzEyKQotI2RlZmluZSBJU19RTEE2MzIyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDYzMjIpCi0jZGVmaW5lIElTX1FMQTI0MjIoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjQyMikKLSNkZWZpbmUgSVNfUUxBMjQzMihoYSkJKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDMyKQotI2RlZmluZSBJU19RTEEyNTEyKGhhKQkoKGhhKS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI1MTIpCi0jZGVmaW5lIElTX1FMQTI1MjIoaGEpCSgoaGEpLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjUyMikKLSNlbmRpZgotCi0jZGVmaW5lIElTX1FMQTIzWFgoaGEpCShJU19RTEEyMzAwKGhhKSB8fCBJU19RTEEyMzEyKGhhKSB8fCBJU19RTEEyMzIyKGhhKSB8fCBcCi0gICAgCQkJIElTX1FMQTYzMTIoaGEpIHx8IElTX1FMQTYzMjIoaGEpKQotI2RlZmluZSBJU19RTEEyNFhYKGhhKQkoSVNfUUxBMjQyMihoYSkgfHwgSVNfUUxBMjQzMihoYSkpCi0jZGVmaW5lIElTX1FMQTI1WFgoaGEpCShJU19RTEEyNTEyKGhhKSB8fCBJU19RTEEyNTIyKGhhKSkKLQotLyoKLSAqIE9ubHkgbm9uLUlTUDJbMTJdMDAgaGF2ZSBleHRlbmRlZCBhZGRyZXNzaW5nIHN1cHBvcnQgaW4gdGhlIGZpcm13YXJlLgotICovCi0jZGVmaW5lIEhBU19FWFRFTkRFRF9JRFMoaGEpCSghSVNfUUxBMjEwMChoYSkgJiYgIUlTX1FMQTIyMDAoaGEpKQotCiAvKgogICogV2UgaGF2ZSBNQUlMQk9YX1JFR0lTVEVSX0NPVU5UIHNpemVkIGFycmF5cyBpbiBhIGZldyBwbGFjZXMsCiAgKiBidXQgdGhhdCdzIGZpbmUgYXMgd2UgZG9uJ3QgbG9vayBhdCB0aGUgbGFzdCAyNCBvbmVzIGZvcgpAQCAtODM4LDcgKzc2Miw2IEBACiAjZGVmaW5lIFBEX1NUQVRFX1dBSVRfUE9SVF9MT0dPVVRfQUNLCQkxMQogCiAKLSNkZWZpbmUgUUxBX1pJT19NT0RFXzUJCShCSVRfMiB8IEJJVF8wKQogI2RlZmluZSBRTEFfWklPX01PREVfNgkJKEJJVF8yIHwgQklUXzEpCiAjZGVmaW5lIFFMQV9aSU9fRElTQUJMRUQJMAogI2RlZmluZSBRTEFfWklPX0RFRkFVTFRfVElNRVIJMgpAQCAtMjMwMCw2ICsyMjIzLDQ3IEBACiAjZGVmaW5lCVNXSVRDSF9GT1VORAkJCUJJVF8zCiAjZGVmaW5lCURGTEdfTk9fQ0FCTEUJCQlCSVRfNAogCisJdWludDMyX3QJZGV2aWNlX3R5cGU7CisjZGVmaW5lIERUX0lTUDIxMDAJCQlCSVRfMAorI2RlZmluZSBEVF9JU1AyMjAwCQkJQklUXzEKKyNkZWZpbmUgRFRfSVNQMjMwMAkJCUJJVF8yCisjZGVmaW5lIERUX0lTUDIzMTIJCQlCSVRfMworI2RlZmluZSBEVF9JU1AyMzIyCQkJQklUXzQKKyNkZWZpbmUgRFRfSVNQNjMxMgkJCUJJVF81CisjZGVmaW5lIERUX0lTUDYzMjIJCQlCSVRfNgorI2RlZmluZSBEVF9JU1AyNDIyCQkJQklUXzcKKyNkZWZpbmUgRFRfSVNQMjQzMgkJCUJJVF84CisjZGVmaW5lIERUX0lTUDU0MjIJCQlCSVRfOQorI2RlZmluZSBEVF9JU1A1NDMyCQkJQklUXzEwCisjZGVmaW5lIERUX0lTUF9MQVNUCQkJKERUX0lTUDU0MzIgPDwgMSkKKworI2RlZmluZSBEVF9aSU9fU1VQUE9SVEVECQlCSVRfMjgKKyNkZWZpbmUgRFRfT0VNXzAwMQkJCUJJVF8yOQorI2RlZmluZSBEVF9JU1AyMjAwQQkJCUJJVF8zMAorI2RlZmluZSBEVF9FWFRFTkRFRF9JRFMJCQlCSVRfMzEKKworI2RlZmluZSBEVF9NQVNLKGhhKQkoKGhhKS0+ZGV2aWNlX3R5cGUgJiAoRFRfSVNQX0xBU1QgLSAxKSkKKyNkZWZpbmUgSVNfUUxBMjEwMChoYSkJKERUX01BU0soaGEpICYgRFRfSVNQMjEwMCkKKyNkZWZpbmUgSVNfUUxBMjIwMChoYSkJKERUX01BU0soaGEpICYgRFRfSVNQMjIwMCkKKyNkZWZpbmUgSVNfUUxBMjMwMChoYSkJKERUX01BU0soaGEpICYgRFRfSVNQMjMwMCkKKyNkZWZpbmUgSVNfUUxBMjMxMihoYSkJKERUX01BU0soaGEpICYgRFRfSVNQMjMxMikKKyNkZWZpbmUgSVNfUUxBMjMyMihoYSkJKERUX01BU0soaGEpICYgRFRfSVNQMjMyMikKKyNkZWZpbmUgSVNfUUxBNjMxMihoYSkJKERUX01BU0soaGEpICYgRFRfSVNQNjMxMikKKyNkZWZpbmUgSVNfUUxBNjMyMihoYSkJKERUX01BU0soaGEpICYgRFRfSVNQNjMyMikKKyNkZWZpbmUgSVNfUUxBMjQyMihoYSkJKERUX01BU0soaGEpICYgRFRfSVNQMjQyMikKKyNkZWZpbmUgSVNfUUxBMjQzMihoYSkJKERUX01BU0soaGEpICYgRFRfSVNQMjQzMikKKyNkZWZpbmUgSVNfUUxBNTQyMihoYSkJKERUX01BU0soaGEpICYgRFRfSVNQNTQyMikKKyNkZWZpbmUgSVNfUUxBNTQzMihoYSkJKERUX01BU0soaGEpICYgRFRfSVNQNTQzMikKKworI2RlZmluZSBJU19RTEEyM1hYKGhhKQkoSVNfUUxBMjMwMChoYSkgfHwgSVNfUUxBMjMxMihoYSkgfHwgSVNfUUxBMjMyMihoYSkgfHwgXAorICAgIAkJCSBJU19RTEE2MzEyKGhhKSB8fCBJU19RTEE2MzIyKGhhKSkKKyNkZWZpbmUgSVNfUUxBMjRYWChoYSkJKElTX1FMQTI0MjIoaGEpIHx8IElTX1FMQTI0MzIoaGEpKQorI2RlZmluZSBJU19RTEE1NFhYKGhhKQkoSVNfUUxBNTQyMihoYSkgfHwgSVNfUUxBNTQzMihoYSkpCisKKyNkZWZpbmUgSVNfWklPX1NVUFBPUlRFRChoYSkJKChoYSktPmRldmljZV90eXBlICYgRFRfWklPX1NVUFBPUlRFRCkKKyNkZWZpbmUgSVNfT0VNXzAwMShoYSkJCSgoaGEpLT5kZXZpY2VfdHlwZSAmIERUX09FTV8wMDEpCisjZGVmaW5lIEhBU19FWFRFTkRFRF9JRFMoaGEpCSgoaGEpLT5kZXZpY2VfdHlwZSAmIERUX0VYVEVOREVEX0lEUykKKwogCS8qIFNSQiBjYWNoZS4gKi8KICNkZWZpbmUgU1JCX01JTl9SRVEJMTI4CiAJbWVtcG9vbF90CSpzcmJfbWVtcG9vbDsKQEAgLTIzODEsNiArMjM0NSw4IEBACiAJLyogTlZSQU0gY29uZmlndXJhdGlvbiBkYXRhICovCiAJdWludDE2X3QJbnZyYW1fc2l6ZTsKIAl1aW50MTZfdAludnJhbV9iYXNlOworCXVpbnQxNl90CXZwZF9zaXplOworCXVpbnQxNl90CXZwZF9iYXNlOwogCiAJdWludDE2X3QJbG9vcF9yZXNldF9kZWxheTsKIAl1aW50OF90CQlyZXRyeV9jb3VudDsKQEAgLTI0MTQsMTEgKzIzODAsNyBAQAogCXN0cnVjdCBzbnNfY21kX3BrdAkqc25zX2NtZDsKIAlkbWFfYWRkcl90CQlzbnNfY21kX2RtYTsKIAotCXBpZF90CQkJZHBjX3BpZDsKLQlpbnQJCQlkcGNfc2hvdWxkX2RpZTsKLQlzdHJ1Y3QgY29tcGxldGlvbglkcGNfaW5pdGVkOwotCXN0cnVjdCBjb21wbGV0aW9uCWRwY19leGl0ZWQ7Ci0Jc3RydWN0IHNlbWFwaG9yZQkqZHBjX3dhaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0CSpkcGNfdGhyZWFkOwogCXVpbnQ4X3QgZHBjX2FjdGl2ZTsgICAgICAgICAgICAgICAgICAvKiBEUEMgcm91dGluZSBpcyBhY3RpdmUgKi8KIAogCS8qIFRpbWVvdXQgdGltZXJzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RldnRibC5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RldnRibC5oCmluZGV4IDUxMDk3MzUuLmE4ZmMwZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZXZ0YmwuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGV2dGJsLmgKQEAgLTEsMTQ2ICsxLDgxIEBACi0jZGVmaW5lIFFMQV9NT0RFTF9OQU1FUyAgICAgICAgIDB4NDQKKyNkZWZpbmUgUUxBX01PREVMX05BTUVTICAgICAgICAgMHg0QQogCiAvKgotICogQWRhcHRlciBtb2RlbCBuYW1lcy4KKyAqIEFkYXB0ZXIgbW9kZWwgbmFtZXMgYW5kIGRlc2NyaXB0aW9ucy4KICAqLwotc3RhdGljIGNoYXIgKnFsYTJ4MDBfbW9kZWxfbmFtZVtRTEFfTU9ERUxfTkFNRVNdID0gewotCSJRTEEyMzQwIiwJLyogMHgxMDAgKi8KLQkiUUxBMjM0MiIsCS8qIDB4MTAxICovCi0JIlFMQTIzNDQiLAkvKiAweDEwMiAqLwotCSJRQ1AyMzQyIiwJLyogMHgxMDMgKi8KLQkiUVNCMjM0MCIsCS8qIDB4MTA0ICovCi0JIlFTQjIzNDIiLAkvKiAweDEwNSAqLwotCSJRTEEyMzEwIiwJLyogMHgxMDYgKi8KLQkiUUxBMjMzMiIsCS8qIDB4MTA3ICovCi0JIlFDUDIzMzIiLAkvKiAweDEwOCAqLwotCSJRQ1AyMzQwIiwJLyogMHgxMDkgKi8KLQkiUUxBMjM0MiIsCS8qIDB4MTBhICovCi0JIlFDUDIzNDIiLAkvKiAweDEwYiAqLwotCSJRTEEyMzUwIiwJLyogMHgxMGMgKi8KLQkiUUxBMjM1MiIsCS8qIDB4MTBkICovCi0JIlFMQTIzNTIiLAkvKiAweDEwZSAqLwotCSJIUFEgU1ZTIiwJLyogMHgxMGYgKi8KLQkiSFBRIFNWUyIsCS8qIDB4MTEwICovCi0JIiAiLAkJLyogMHgxMTEgKi8KLQkiICIsCQkvKiAweDExMiAqLwotCSIgIiwJCS8qIDB4MTEzICovCi0JIiAiLAkJLyogMHgxMTQgKi8KLQkiUUxBMjM2MCIsCS8qIDB4MTE1ICovCi0JIlFMQTIzNjIiLAkvKiAweDExNiAqLwotCSJRTEUyMzYwIiwJLyogMHgxMTcgKi8KLQkiUUxFMjM2MiIsCS8qIDB4MTE4ICovCi0JIlFMQTIwMCIsCS8qIDB4MTE5ICovCi0JIlFMQTIwMEMiLAkvKiAweDExYSAqLwotCSJRTEEyMDBQIiwJLyogMHgxMWIgKi8KLQkiUUxBMjAwUCIsCS8qIDB4MTFjICovCi0JIiAiLAkJLyogMHgxMWQgKi8KLQkiICIsCQkvKiAweDExZSAqLwotCSIgIiwJCS8qIDB4MTFmICovCi0JIiAiLAkJLyogMHgxMjAgKi8KLQkiICIsCQkvKiAweDEyMSAqLwotCSIgIiwJCS8qIDB4MTIyICovCi0JIiAiLAkJLyogMHgxMjMgKi8KLQkiICIsCQkvKiAweDEyNCAqLwotCSIgIiwJCS8qIDB4MTI1ICovCi0JIiAiLAkJLyogMHgxMjYgKi8KLQkiICIsCQkvKiAweDEyNyAqLwotCSIgIiwJCS8qIDB4MTI4ICovCi0JIiAiLAkJLyogMHgxMjkgKi8KLQkiICIsCQkvKiAweDEyYSAqLwotCSIgIiwJCS8qIDB4MTJiICovCi0JIiAiLAkJLyogMHgxMmMgKi8KLQkiICIsCQkvKiAweDEyZCAqLwotCSIgIiwJCS8qIDB4MTJlICovCi0JIlFMQTIxMCIsCS8qIDB4MTJmICovCi0JIkVNQyAyNTAiLAkvKiAweDEzMCAqLwotCSJIUCBBNzUzOEEiLAkvKiAweDEzMSAqLwotCSJRTEEyMTAiLAkvKiAweDEzMiAqLwotCSJRTEEyNDYwIiwJLyogMHgxMzMgKi8KLQkiUUxBMjQ2MiIsCS8qIDB4MTM0ICovCi0JIlFNQzI0NjIiLAkvKiAweDEzNSAqLwotCSJRTUMyNDYyUyIsCS8qIDB4MTM2ICovCi0JIlFMRTI0NjAiLAkvKiAweDEzNyAqLwotCSJRTEUyNDYyIiwJLyogMHgxMzggKi8KLQkiUU1FMjQ2MiIsCS8qIDB4MTM5ICovCi0JIlFMQTI0NDAiLAkvKiAweDEzYSAqLwotCSJRTEEyNDQyIiwJLyogMHgxM2IgKi8KLQkiUVNNMjQ0MiIsCS8qIDB4MTNjICovCi0JIlFTTTI0NjIiLAkvKiAweDEzZCAqLwotCSJRTEUyMTAiLAkvKiAweDEzZSAqLwotCSJRTEUyMjAiLAkvKiAweDEzZiAqLwotCSJRTEEyNDYwIiwJLyogMHgxNDAgKi8KLQkiUUxBMjQ2MiIsCS8qIDB4MTQxICovCi0JIlFMRTI0NjAiLAkvKiAweDE0MiAqLwotCSJRTEUyNDYyIgkvKiAweDE0MyAqLwotfTsKLQotc3RhdGljIGNoYXIgKnFsYTJ4MDBfbW9kZWxfZGVzY1tRTEFfTU9ERUxfTkFNRVNdID0gewotCSIxMzNNSHogUENJLVggdG8gMkdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTAwICovCi0JIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIER1YWwgQ2hhbm5lbCIsCQkvKiAweDEwMSAqLwotCSIxMzNNSHogUENJLVggdG8gMkdiIEZDLCBRdWFkIENoYW5uZWwiLAkJLyogMHgxMDIgKi8KLQkiICIsCQkJCQkJLyogMHgxMDMgKi8KLQkiICIsCQkJCQkJLyogMHgxMDQgKi8KLQkiICIsCQkJCQkJLyogMHgxMDUgKi8KLQkiICIsCQkJCQkJLyogMHgxMDYgKi8KLQkiICIsCQkJCQkJLyogMHgxMDcgKi8KLQkiICIsCQkJCQkJLyogMHgxMDggKi8KLQkiICIsCQkJCQkJLyogMHgxMDkgKi8KLQkiICIsCQkJCQkJLyogMHgxMGEgKi8KLQkiICIsCQkJCQkJLyogMHgxMGIgKi8KLQkiMTMzTUh6IFBDSS1YIHRvIDJHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDEwYyAqLwotCSIxMzNNSHogUENJLVggdG8gMkdiIEZDLCBEdWFsIENoYW5uZWwiLAkJLyogMHgxMGQgKi8KLQkiICIsCQkJCQkJLyogMHgxMGUgKi8KLQkiSFBRIFNWUyBIQkEtIEluaXRpYXRvciBkZXZpY2UiLAkJLyogMHgxMGYgKi8KLQkiSFBRIFNWUyBIQkEtIFRhcmdldCBkZXZpY2UiLAkJCS8qIDB4MTEwICovCi0JIiAiLAkJCQkJCS8qIDB4MTExICovCi0JIiAiLAkJCQkJCS8qIDB4MTEyICovCi0JIiAiLAkJCQkJCS8qIDB4MTEzICovCi0JIiAiLAkJCQkJCS8qIDB4MTE0ICovCi0JIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJLyogMHgxMTUgKi8KLQkiMTMzTUh6IFBDSS1YIHRvIDJHYiBGQywgRHVhbCBDaGFubmVsIiwJCS8qIDB4MTE2ICovCi0JIlBDSS1FeHByZXNzIHRvIDJHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDExNyAqLwotCSJQQ0ktRXhwcmVzcyB0byAyR2IgRkMsIER1YWwgQ2hhbm5lbCIsCQkvKiAweDExOCAqLwotCSIxMzNNSHogUENJLVggdG8gMkdiIEZDIE9wdGljYWwiLAkJLyogMHgxMTkgKi8KLQkiMTMzTUh6IFBDSS1YIHRvIDJHYiBGQyBDb3BwZXIiLAkJLyogMHgxMWEgKi8KLQkiMTMzTUh6IFBDSS1YIHRvIDJHYiBGQyBTRlAiLAkJCS8qIDB4MTFiICovCi0JIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMgU0ZQIiwJCQkvKiAweDExYyAqLwotCSIgIiwJCQkJCQkvKiAweDExZCAqLwotCSIgIiwJCQkJCQkvKiAweDExZSAqLwotCSIgIiwJCQkJCQkvKiAweDExZiAqLwotCSIgIiwJCQkJCQkvKiAweDEyMCAqLwotCSIgIiwJCQkJCQkvKiAweDEyMSAqLwotCSIgIiwJCQkJCQkvKiAweDEyMiAqLwotCSIgIiwJCQkJCQkvKiAweDEyMyAqLwotCSIgIiwJCQkJCQkvKiAweDEyNCAqLwotCSIgIiwJCQkJCQkvKiAweDEyNSAqLwotCSIgIiwJCQkJCQkvKiAweDEyNiAqLwotCSIgIiwJCQkJCQkvKiAweDEyNyAqLwotCSIgIiwJCQkJCQkvKiAweDEyOCAqLwotCSIgIiwJCQkJCQkvKiAweDEyOSAqLwotCSIgIiwJCQkJCQkvKiAweDEyYSAqLwotCSIgIiwJCQkJCQkvKiAweDEyYiAqLwotCSIgIiwJCQkJCQkvKiAweDEyYyAqLwotCSIgIiwJCQkJCQkvKiAweDEyZCAqLwotCSIgIiwJCQkJCQkvKiAweDEyZSAqLwotCSIxMzNNSHogUENJLVggdG8gMkdiIEZDIFNGRiIsCQkJLyogMHgxMmYgKi8KLQkiMTMzTUh6IFBDSS1YIHRvIDJHYiBGQyBTRkYiLAkJCS8qIDB4MTMwICovCi0JIkhQIDFwMmcgUUxBMjM0MCIsCQkJCS8qIDB4MTMxICovCi0JIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJLyogMHgxMzIgKi8KLQkiUENJLVggMi4wIHRvIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkJLyogMHgxMzMgKi8KLQkiUENJLVggMi4wIHRvIDRHYiBGQywgRHVhbCBDaGFubmVsIiwJCS8qIDB4MTM0ICovCi0JIklCTSBlU2VydmVyIEJDIDRHYiBGQyBFeHBhbnNpb24gQ2FyZCIsCQkvKiAweDEzNSAqLwotCSJJQk0gZVNlcnZlciBCQyA0R2IgRkMgRXhwYW5zaW9uIENhcmQgU0ZGIiwJLyogMHgxMzYgKi8KLQkiUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTM3ICovCi0JIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgRHVhbCBDaGFubmVsIiwJCS8qIDB4MTM4ICovCi0JIkRlbGwgUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBEdWFsIENoYW5uZWwiLAkvKiAweDEzOSAqLwotCSJQQ0ktWCAxLjAgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCQkvKiAweDEzYSAqLwotCSJQQ0ktWCAxLjAgdG8gNEdiIEZDLCBEdWFsIENoYW5uZWwiLAkJLyogMHgxM2IgKi8KLQkiU2VydmVyIEkvTyBNb2R1bGUgNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTNjICovCi0JIlNlcnZlciBJL08gTW9kdWxlIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDEzZCAqLwotCSJQQ0ktRXhwcmVzcyB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJLyogMHgxM2UgKi8KLQkiUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTNmICovCi0JIlN1biBQQ0ktWCAyLjAgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTQwICovCi0JIlN1biBQQ0ktWCAyLjAgdG8gNEdiIEZDLCBEdWFsIENoYW5uZWwiLAkvKiAweDE0MSAqLwotCSJTdW4gUENJLUV4cHJlc3MgdG8gMkdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTQyICovCi0JIlN1biBQQ0ktRXhwcmVzcyB0byA0R2IgRkMsIFNpbmdsZSBDaGFubmVsIgkvKiAweDE0MyAqLworc3RhdGljIGNoYXIgKnFsYTJ4MDBfbW9kZWxfbmFtZVtRTEFfTU9ERUxfTkFNRVMqMl0gPSB7CisJIlFMQTIzNDAiLAkiMTMzTUh6IFBDSS1YIHRvIDJHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDEwMCAqLworCSJRTEEyMzQyIiwJIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIER1YWwgQ2hhbm5lbCIsCQkvKiAweDEwMSAqLworCSJRTEEyMzQ0IiwJIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIFF1YWQgQ2hhbm5lbCIsCQkvKiAweDEwMiAqLworCSJRQ1AyMzQyIiwJImNQQ0kgdG8gMkdiIEZDLCBEdWFsIENoYW5uZWwiLAkJCS8qIDB4MTAzICovCisJIlFTQjIzNDAiLAkiU0JVUyB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJCS8qIDB4MTA0ICovCisJIlFTQjIzNDIiLAkiU0JVUyB0byAyR2IgRkMsIER1YWwgQ2hhbm5lbCIsCQkJLyogMHgxMDUgKi8KKwkiUUxBMjMxMCIsCSJTdW4gNjZNSHogUENJLVggdG8gMkdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTA2ICovCisJIlFMQTIzMzIiLAkiU3VuIDY2TUh6IFBDSS1YIHRvIDJHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDEwNyAqLworCSJRQ1AyMzMyIiwJIlN1biBjUENJIHRvIDJHYiBGQywgRHVhbCBDaGFubmVsIiwJCS8qIDB4MTA4ICovCisJIlFDUDIzNDAiLAkiY1BDSSB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJCS8qIDB4MTA5ICovCisJIlFMQTIzNDIiLAkiU3VuIDEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIER1YWwgQ2hhbm5lbCIsCS8qIDB4MTBhICovCisJIlFDUDIzNDIiLAkiU3VuIC0gY1BDSSB0byAyR2IgRkMsIER1YWwgQ2hhbm5lbCIsCQkvKiAweDEwYiAqLworCSJRTEEyMzUwIiwJIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJLyogMHgxMGMgKi8KKwkiUUxBMjM1MiIsCSIxMzNNSHogUENJLVggdG8gMkdiIEZDLCBEdWFsIENoYW5uZWwiLAkJLyogMHgxMGQgKi8KKwkiUUxBMjM1MiIsCSJTdW4gMTMzTUh6IFBDSS1YIHRvIDJHYiBGQywgRHVhbCBDaGFubmVsIiwJLyogMHgxMGUgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxMGYgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxMTAgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxMTEgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxMTIgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxMTMgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxMTQgKi8KKwkiUUxBMjM2MCIsCSIxMzNNSHogUENJLVggdG8gMkdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTE1ICovCisJIlFMQTIzNjIiLAkiMTMzTUh6IFBDSS1YIHRvIDJHYiBGQywgRHVhbCBDaGFubmVsIiwJCS8qIDB4MTE2ICovCisJIlFMRTIzNjAiLAkiUENJLUV4cHJlc3MgdG8gMkdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTE3ICovCisJIlFMRTIzNjIiLAkiUENJLUV4cHJlc3MgdG8gMkdiIEZDLCBEdWFsIENoYW5uZWwiLAkJLyogMHgxMTggKi8KKwkiUUxBMjAwIiwJIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMgT3B0aWNhbCIsCQkvKiAweDExOSAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDExYSAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDExYiAqLworCSJRTEEyMDBQIiwJIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMgU0ZQIiwJCQkvKiAweDExYyAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDExZCAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDExZSAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDExZiAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyMCAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyMSAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyMiAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyMyAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyNCAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyNSAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyNiAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyNyAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyOCAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyOSAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyYSAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyYiAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyYyAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyZCAqLworCSIgIiwJCSIgIiwJCQkJCQkvKiAweDEyZSAqLworCSJRTEEyMTAiLAkiMTMzTUh6IFBDSS1YIHRvIDJHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDEyZiAqLworCSJFTUMgMjUwIiwJIjEzM01IeiBQQ0ktWCB0byAyR2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJLyogMHgxMzAgKi8KKwkiSFAgQTc1MzhBIiwJIkhQIDFwMmcgUENJLVggdG8gMkdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTMxICovCisJIlFMQTIxMCIsCSJTdW4gMTMzTUh6IFBDSS1YIHRvIDJHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDEzMiAqLworCSJRTEEyNDYwIiwJIlBDSS1YIDIuMCB0byA0R2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJCS8qIDB4MTMzICovCisJIlFMQTI0NjIiLAkiUENJLVggMi4wIHRvIDRHYiBGQywgRHVhbCBDaGFubmVsIiwJCS8qIDB4MTM0ICovCisJIlFNQzI0NjIiLAkiSUJNIGVTZXJ2ZXIgQkMgNEdiIEZDIEV4cGFuc2lvbiBDYXJkIiwJCS8qIDB4MTM1ICovCisJIlFNQzI0NjJTIiwJIklCTSBlU2VydmVyIEJDIDRHYiBGQyBFeHBhbnNpb24gQ2FyZCBTRkYiLAkvKiAweDEzNiAqLworCSJRTEUyNDYwIiwJIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDEzNyAqLworCSJRTEUyNDYyIiwJIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgRHVhbCBDaGFubmVsIiwJCS8qIDB4MTM4ICovCisJIlFNRTI0NjIiLAkiRGVsbCBCUyBQQ0ktRXhwcmVzcyB0byA0R2IgRkMsIER1YWwgQ2hhbm5lbCIsCS8qIDB4MTM5ICovCisJIiAiLAkJIiAiLAkJCQkJCS8qIDB4MTNhICovCisJIiAiLAkJIiAiLAkJCQkJCS8qIDB4MTNiICovCisJIiAiLAkJIiAiLAkJCQkJCS8qIDB4MTNjICovCisJIlFFTTI0NjIiLAkiU3VuIFNlcnZlciBJL08gTW9kdWxlIDRHYiBGQywgRHVhbCBDaGFubmVsIiwJLyogMHgxM2QgKi8KKwkiUUxFMjEwIiwJIlBDSS1FeHByZXNzIHRvIDJHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDEzZSAqLworCSJRTEUyMjAiLAkiUENJLUV4cHJlc3MgdG8gNEdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTNmICovCisJIlFMQTI0NjAiLAkiU3VuIFBDSS1YIDIuMCB0byA0R2IgRkMsIFNpbmdsZSBDaGFubmVsIiwJLyogMHgxNDAgKi8KKwkiUUxBMjQ2MiIsCSJTdW4gUENJLVggMi4wIHRvIDRHYiBGQywgRHVhbCBDaGFubmVsIiwJLyogMHgxNDEgKi8KKwkiUUxFMjQ2MCIsCSJTdW4gUENJLUV4cHJlc3MgdG8gMkdiIEZDLCBTaW5nbGUgQ2hhbm5lbCIsCS8qIDB4MTQyICovCisJIlFMRTI0NjIiLAkiU3VuIFBDSS1FeHByZXNzIHRvIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDE0MyAqLworCSJRRU0yNDYyIgkiU2VydmVyIEkvTyBNb2R1bGUgNEdiIEZDLCBEdWFsIENoYW5uZWwiLAkvKiAweDE0NCAqLworCSJRTEUyNDQwIiwJIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDE0NSAqLworCSJRTEUyNDY0IiwJIlBDSS1FeHByZXNzIHRvIDRHYiBGQywgUXVhZCBDaGFubmVsIiwJCS8qIDB4MTQ2ICovCisJIlFMQTI0NDAiLAkiUENJLVggMi4wIHRvIDRHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkJLyogMHgxNDcgKi8KKwkiICIsCQkiICIsCQkJCQkJLyogMHgxNDggKi8KKwkiUUxBMjM0MCIsCSJTdW4gMTMzTUh6IFBDSS1YIHRvIDJHYiBGQywgU2luZ2xlIENoYW5uZWwiLAkvKiAweDE0OSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKaW5kZXggOWZiNTYyYS4uMWVlNThhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmgKQEAgLTc1OSw3ICs3NTksNyBAQAogI2RlZmluZSBGQV9OVlJBTV9GVU5DMF9BRERSCTB4ODAKICNkZWZpbmUgRkFfTlZSQU1fRlVOQzFfQUREUgkweDE4MAogCi0jZGVmaW5lIEZBX05WUkFNX1ZQRF9TSVpFCTB4ODAKKyNkZWZpbmUgRkFfTlZSQU1fVlBEX1NJWkUJMHgyMDAKICNkZWZpbmUgRkFfTlZSQU1fVlBEMF9BRERSCTB4MDAKICNkZWZpbmUgRkFfTlZSQU1fVlBEMV9BRERSCTB4MTAwCiAJCQkJCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggZmZkYzI2OC4uOTFlODNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtNDIsNyArNDIsNyBAQAogCiBleHRlcm4gaW50IHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZChzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwogZXh0ZXJuIGludCBxbGEyeDAwX2ZhYnJpY19sb2dpbihzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICosIHVpbnQxNl90ICopOwotZXh0ZXJuIGludCBxbGEyeDAwX2xvY2FsX2RldmljZV9sb2dpbihzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QpOworZXh0ZXJuIGludCBxbGEyeDAwX2xvY2FsX2RldmljZV9sb2dpbihzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwogCiBleHRlcm4gdm9pZCBxbGEyeDAwX3Jlc3RhcnRfcXVldWVzKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50OF90KTsKIApAQCAtODEsNiArODEsOCBAQAogCiBleHRlcm4gaW50IHFsYTJ4MDBfd2FpdF9mb3JfaGJhX29ubGluZShzY3NpX3FsYV9ob3N0X3QgKik7CiAKK2V4dGVybiB2b2lkIHFsYTJ4eHhfd2FrZV9kcGMoc2NzaV9xbGFfaG9zdF90ICopOworCiAvKgogICogR2xvYmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgaW4gcWxhX2lvY2IuYyBzb3VyY2UgZmlsZS4KICAqLwpAQCAtMTY0LDcgKzE2Niw4IEBACiAgICAgdWludDE2X3QgKiwgdWludDhfdCk7CiAKIGV4dGVybiBpbnQKLXFsYTJ4MDBfbG9naW5fbG9jYWxfZGV2aWNlKHNjc2lfcWxhX2hvc3RfdCAqLCB1aW50MTZfdCwgdWludDE2X3QgKiwgdWludDhfdCk7CitxbGEyeDAwX2xvZ2luX2xvY2FsX2RldmljZShzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICosIHVpbnQxNl90ICosCisgICAgdWludDhfdCk7CiAKIGV4dGVybiBpbnQKIHFsYTJ4MDBfZmFicmljX2xvZ291dChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QsIHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwppbmRleCBkNjIwYThlOC4uMmViZjI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCQlERUJVRzJfMyhwcmludGsoInNjc2koJWxkKTogJXMgZmFpbGVkLCBlcnJvciBzdGF0dXMgKCV4KS5cbiIsCiAJCSAgICBoYS0+aG9zdF9ubywgcm91dGluZSwgbXNfcGt0LT5lbnRyeV9zdGF0dXMpKTsKIAl9IGVsc2UgewotCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpCisJCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkKIAkJCWNvbXBfc3RhdHVzID0KIAkJCSAgICAoKHN0cnVjdCBjdF9lbnRyeV8yNHh4ICopbXNfcGt0KS0+Y29tcF9zdGF0dXM7CiAJCWVsc2UKQEAgLTEyMDAsNyArMTIwMCw3IEBACiAJbXNfaW9jYl9lbnRyeV90ICptc19wa3QgPSBoYS0+bXNfaW9jYjsKIAlzdHJ1Y3QgY3RfZW50cnlfMjR4eCAqY3RfcGt0ID0gKHN0cnVjdCBjdF9lbnRyeV8yNHh4ICopaGEtPm1zX2lvY2I7CiAKLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJY3RfcGt0LT5jbWRfYnl0ZV9jb3VudCA9IGNwdV90b19sZTMyKHJlcV9zaXplKTsKIAkJY3RfcGt0LT5kc2VnXzBfbGVuID0gY3RfcGt0LT5jbWRfYnl0ZV9jb3VudDsKIAl9IGVsc2UgewpAQCAtMTUyOSw5ICsxNTI5LDcgQEAKIAllaXRlciA9IChzdHJ1Y3QgY3RfZmRtaV9wb3J0X2F0dHIgKikgKGVudHJpZXMgKyBzaXplKTsKIAllaXRlci0+dHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoRkRNSV9QT1JUX1NVUFBPUlRfU1BFRUQpOwogCWVpdGVyLT5sZW4gPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDQgKyA0KTsKLQlpZiAoSVNfUUxBMjVYWChoYSkpCi0JCWVpdGVyLT5hLnN1cF9zcGVlZCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoOCk7Ci0JZWxzZSBpZiAoSVNfUUxBMjRYWChoYSkpCisJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKQogCQllaXRlci0+YS5zdXBfc3BlZWQgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDQpOwogCWVsc2UgaWYgKElTX1FMQTIzWFgoaGEpKQogCQllaXRlci0+YS5zdXBfc3BlZWQgPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKDIpOwpAQCAtMTU2Niw3ICsxNTY0LDcgQEAKIAllaXRlciA9IChzdHJ1Y3QgY3RfZmRtaV9wb3J0X2F0dHIgKikgKGVudHJpZXMgKyBzaXplKTsKIAllaXRlci0+dHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoRkRNSV9QT1JUX01BWF9GUkFNRV9TSVpFKTsKIAllaXRlci0+bGVuID0gX19jb25zdGFudF9jcHVfdG9fYmUxNig0ICsgNCk7Ci0JbWF4X2ZyYW1lX3NpemUgPSBJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSA/CisJbWF4X2ZyYW1lX3NpemUgPSBJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSA/CiAJCSh1aW50MzJfdCkgaWNiMjQtPmZyYW1lX3BheWxvYWRfc2l6ZToKIAkJKHVpbnQzMl90KSBoYS0+aW5pdF9jYi0+ZnJhbWVfcGF5bG9hZF9zaXplOwogCWVpdGVyLT5hLm1heF9mcmFtZV9zaXplID0gY3B1X3RvX2JlMzIobWF4X2ZyYW1lX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggNjM0ZWUxNy4uODlhM2ZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0zODcsNyArMzg3LDcgQEAKIAogCQkvKiBWZXJpZnkgY2hlY2tzdW0gb2YgbG9hZGVkIFJJU0MgY29kZS4gKi8KIAkJcnZhbCA9IHFsYTJ4MDBfdmVyaWZ5X2NoZWNrc3VtKGhhLAotCQkgICAgSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkgPyBSSVNDX1NBRERSRVNTIDoKKwkJICAgIElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpID8gUklTQ19TQUREUkVTUyA6CiAJCSAgICAqaGEtPmJyZF9pbmZvLT5md19pbmZvWzBdLmZ3c3RhcnQpOwogCX0KIApAQCAtNzI3LDYgKzcyNyw3IEBACiAJCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogRm91bmQgUUxBMjIwMEEgY2hpcC5cbiIsCiAJCSAgICBoYS0+aG9zdF9ubykpOwogCisJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9JU1AyMjAwQTsKIAkJaGEtPmZ3X3RyYW5zZmVyX3NpemUgPSAxMjg7CiAJfQogCkBAIC04MjEsNyArODIyLDcgQEAKIAlpZiAoSVNfUUxBMjEwMChoYSkgfHwgSVNfUUxBMjIwMChoYSkpCiAJCXJldHVybjsKIAotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpCiAJCXFsYTJ4MDBfYWxsb2NfZndfZHVtcChoYSk7CiAKIAkvKiBSZXRyaWV2ZSBJT0NCIGNvdW50cyBhdmFpbGFibGUgdG8gdGhlIGZpcm13YXJlLiAqLwpAQCAtMTAwMiw2ICsxMDAzLDEwIEBACiAJaWYgKGhhLT5mbGFncy5lbmFibGVfbGVkX3NjaGVtZSkKIAkJaGEtPmZ3X29wdGlvbnNbMl0gfD0gQklUXzEyOwogCisJLyogRGV0ZWN0IElTUDYzMTIuICovCisJaWYgKElTX1FMQTYzMTIoaGEpKQorCQloYS0+Zndfb3B0aW9uc1syXSB8PSBCSVRfMTM7CisKIAkvKiBVcGRhdGUgZmlybXdhcmUgb3B0aW9ucy4gKi8KIAlxbGEyeDAwX3NldF9md19vcHRpb25zKGhhLCBoYS0+Zndfb3B0aW9ucyk7CiB9CkBAIC0xNTAwLDkgKzE1MDUsOSBAQAogCQkJCWluZGV4ID0gKGhhLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmZik7CiAJCQkJaWYgKGluZGV4IDwgUUxBX01PREVMX05BTUVTKSB7CiAJCQkJCXN0cmNweShoYS0+bW9kZWxfbnVtYmVyLAotCQkJCQkgICAgcWxhMngwMF9tb2RlbF9uYW1lW2luZGV4XSk7CisJCQkJCSAgICBxbGEyeDAwX21vZGVsX25hbWVbaW5kZXggKiAyXSk7CiAJCQkJCWhhLT5tb2RlbF9kZXNjID0KLQkJCQkJICAgIHFsYTJ4MDBfbW9kZWxfZGVzY1tpbmRleF07CisJCQkJCSAgICBxbGEyeDAwX21vZGVsX25hbWVbaW5kZXggKiAyICsgMV07CiAJCQkJfSBlbHNlIHsKIAkJCQkJc3RyY3B5KGhhLT5tb2RlbF9udW1iZXIsICJRTEEyM3h4Iik7CiAJCQkJfQpAQCAtMTY1NCw2ICsxNjU5LDggQEAKIAkJICAgIH4oQklUXzMgfCBCSVRfMiB8IEJJVF8xIHwgQklUXzApOwogCQloYS0+ZmxhZ3MucHJvY2Vzc19yZXNwb25zZV9xdWV1ZSA9IDA7CiAJCWlmIChoYS0+emlvX21vZGUgIT0gUUxBX1pJT19ESVNBQkxFRCkgeworCQkJaGEtPnppb19tb2RlID0gUUxBX1pJT19NT0RFXzY7CisKIAkJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogWklPIG1vZGUgJWQgZW5hYmxlZDsgdGltZXIgIgogCQkJICAgICJkZWxheSAoJWQgdXMpLlxuIiwgaGEtPmhvc3Rfbm8sIGhhLT56aW9fbW9kZSwKIAkJCSAgICBoYS0+emlvX3RpbWVyICogMTAwKSk7CkBAIC0yMTIyLDcgKzIxMjksNyBAQAogCUxJU1RfSEVBRChuZXdfZmNwb3J0cyk7CiAKIAkvKiBJZiBGTCBwb3J0IGV4aXN0cywgdGhlbiBTTlMgaXMgcHJlc2VudCAqLwotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpCiAJCWxvb3BfaWQgPSBOUEhfRl9QT1JUOwogCWVsc2UKIAkJbG9vcF9pZCA9IFNOU19GTF9QT1JUOwpAQCAtMjE0OCw3ICsyMTU1LDcgQEAKIAkJCXFsYTJ4MDBfZmRtaV9yZWdpc3RlcihoYSk7CiAKIAkJLyogRW5zdXJlIHdlIGFyZSBsb2dnZWQgaW50byB0aGUgU05TLiAqLwotCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpCisJCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkKIAkJCWxvb3BfaWQgPSBOUEhfU05TOwogCQllbHNlCiAJCQlsb29wX2lkID0gU0lNUExFX05BTUVfU0VSVkVSOwpAQCAtMjYzOSw3ICsyNjQ2LDcgQEAKIAkJCWlmIChxbDJ4cHJvY2Vzc3JzY24gJiYKIAkJCSAgICAhSVNfUUxBMjEwMChoYSkgJiYgIUlTX1FMQTIyMDAoaGEpICYmCiAJCQkgICAgIUlTX1FMQTYzMTIoaGEpICYmICFJU19RTEE2MzIyKGhhKSAmJgotCQkJICAgICFJU19RTEEyNFhYKGhhKSAmJiAhSVNfUUxBMjVYWChoYSkgJiYKKwkJCSAgICAhSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpICYmCiAJCQkgICAgaGEtPmZsYWdzLmluaXRfZG9uZSkgewogCQkJCS8qIEhhbmRsZSBwb3J0IFJTQ04gdmlhIGFzeW5jcm9ub3VzIElPQ0JzICovCiAJCQkJcnZhbDIgPSBxbGEyeDAwX2hhbmRsZV9wb3J0X3JzY24oaGEsIHJzY25fZW50cnksCkBAIC0yODgxLDEzICsyODg4LDEzIEBACiAgKiAgICAgIDMgLSBGYXRhbCBlcnJvcgogICovCiBpbnQKLXFsYTJ4MDBfbG9jYWxfZGV2aWNlX2xvZ2luKHNjc2lfcWxhX2hvc3RfdCAqaGEsIHVpbnQxNl90IGxvb3BfaWQpCitxbGEyeDAwX2xvY2FsX2RldmljZV9sb2dpbihzY3NpX3FsYV9ob3N0X3QgKmhhLCBmY19wb3J0X3QgKmZjcG9ydCkKIHsKIAlpbnQJCXJ2YWw7CiAJdWludDE2X3QJbWJbTUFJTEJPWF9SRUdJU1RFUl9DT1VOVF07CiAKIAltZW1zZXQobWIsIDAsIHNpemVvZihtYikpOwotCXJ2YWwgPSBxbGEyeDAwX2xvZ2luX2xvY2FsX2RldmljZShoYSwgbG9vcF9pZCwgbWIsIEJJVF8wKTsKKwlydmFsID0gcWxhMngwMF9sb2dpbl9sb2NhbF9kZXZpY2UoaGEsIGZjcG9ydCwgbWIsIEJJVF8wKTsKIAlpZiAocnZhbCA9PSBRTEFfU1VDQ0VTUykgewogCQkvKiBJbnRlcnJvZ2F0ZSBtYWlsYm94IHJlZ2lzdGVycyBmb3IgYW55IGVycm9ycyAqLwogCQlpZiAobWJbMF0gPT0gTUJTX0NPTU1BTkRfRVJST1IpCkBAIC0zMTI5LDcgKzMxMzYsNyBAQAogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAotCQkJaWYgKCFJU19RTEEyNFhYKGhhKSAmJiAhSVNfUUxBMjVYWChoYSkpIHsKKwkJCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpKSB7CiAJCQkJLyoKIAkJCQkgKiBEaXNhYmxlIFNSQU0sIEluc3RydWN0aW9uIFJBTSBhbmQgR1AgUkFNCiAJCQkJICogcGFyaXR5LgpAQCAtMzE0NSw3ICszMTUyLDcgQEAKIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAKLQkJCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTI1WFgoaGEpKSB7CisJCQlpZiAoIUlTX1FMQTI0WFgoaGEpICYmICFJU19RTEE1NFhYKGhhKSkgewogCQkJCS8qIEVuYWJsZSBwcm9wZXIgcGFyaXR5ICovCiAJCQkJaWYgKElTX1FMQTIzMDAoaGEpKQogCQkJCQkvKiBTUkFNIHBhcml0eSAqLwpAQCAtMzI1OCw4ICszMjY1LDEyIEBACiAJLyogRGV0ZXJtaW5lIE5WUkFNIHN0YXJ0aW5nIGFkZHJlc3MuICovCiAJaGEtPm52cmFtX3NpemUgPSBzaXplb2Yoc3RydWN0IG52cmFtXzI0eHgpOwogCWhhLT5udnJhbV9iYXNlID0gRkFfTlZSQU1fRlVOQzBfQUREUjsKLQlpZiAoUENJX0ZVTkMoaGEtPnBkZXYtPmRldmZuKSkKKwloYS0+dnBkX3NpemUgPSBGQV9OVlJBTV9WUERfU0laRTsKKwloYS0+dnBkX2Jhc2UgPSBGQV9OVlJBTV9WUEQwX0FERFI7CisJaWYgKFBDSV9GVU5DKGhhLT5wZGV2LT5kZXZmbikpIHsKIAkJaGEtPm52cmFtX2Jhc2UgPSBGQV9OVlJBTV9GVU5DMV9BRERSOworCQloYS0+dnBkX2Jhc2UgPSBGQV9OVlJBTV9WUEQxX0FERFI7CisJfQogCiAJLyogR2V0IE5WUkFNIGRhdGEgYW5kIGNhbGN1bGF0ZSBjaGVja3N1bS4gKi8KIAlkcHRyID0gKHVpbnQzMl90ICopbnY7CkBAIC0zMzY4LDcgKzMzNzksNyBAQAogCiAJCWluZGV4ID0gKGhhLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmZik7CiAJCWlmIChpbmRleCA8IFFMQV9NT0RFTF9OQU1FUykKLQkJCWhhLT5tb2RlbF9kZXNjID0gcWxhMngwMF9tb2RlbF9kZXNjW2luZGV4XTsKKwkJCWhhLT5tb2RlbF9kZXNjID0gcWxhMngwMF9tb2RlbF9uYW1lW2luZGV4ICogMiArIDFdOwogCX0gZWxzZQogCQlzdHJjcHkoaGEtPm1vZGVsX251bWJlciwgIlFMQTI0NjIiKTsKIApAQCAtMzQ2NSw2ICszNDc2LDggQEAKIAkgICAgfihCSVRfMyB8IEJJVF8yIHwgQklUXzEgfCBCSVRfMCkpOwogCWhhLT5mbGFncy5wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlID0gMDsKIAlpZiAoaGEtPnppb19tb2RlICE9IFFMQV9aSU9fRElTQUJMRUQpIHsKKwkJaGEtPnppb19tb2RlID0gUUxBX1pJT19NT0RFXzY7CisKIAkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBaSU8gbW9kZSAlZCBlbmFibGVkOyB0aW1lciBkZWxheSAiCiAJCSAgICAiKCVkIHVzKS5cbiIsIGhhLT5ob3N0X25vLCBoYS0+emlvX21vZGUsCiAJCSAgICBoYS0+emlvX3RpbWVyICogMTAwKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmgKaW5kZXggZWNjMzc0MS4uNDUwMDdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lubGluZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbmxpbmUuaApAQCAtMTYzLDcgKzE2Myw3IEBACiBzdGF0aWMgaW5saW5lIGludAogcWxhMngwMF9pc19yZXNlcnZlZF9pZChzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MTZfdCBsb29wX2lkKQogewotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpCiAJCXJldHVybiAobG9vcF9pZCA+IE5QSF9MQVNUX0hBTkRMRSk7CiAKIAlyZXR1cm4gKChsb29wX2lkID4gaGEtPmxhc3RfbG9vcF9pZCAmJiBsb29wX2lkIDwgU05TX0ZJUlNUX0xPT1BfSUQpIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwppbmRleCA2NTQ0YjZkLi44ZjBmNGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCW1yay0+ZW50cnlfdHlwZSA9IE1BUktFUl9UWVBFOwogCW1yay0+bW9kaWZpZXIgPSB0eXBlOwogCWlmICh0eXBlICE9IE1LX1NZTkNfQUxMKSB7Ci0JCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkgeworCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJCW1yazI0ID0gKHN0cnVjdCBtcmtfZW50cnlfMjR4eCAqKSBtcms7CiAJCQltcmsyNC0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYobG9vcF9pZCk7CiAJCQltcmsyNC0+bHVuWzFdID0gTFNCKGx1bik7CkBAIC01MTksNyArNTE5LDcgQEAKIAlmb3IgKHRpbWVyID0gSFo7IHRpbWVyOyB0aW1lci0tKSB7CiAJCWlmICgocmVxX2NudCArIDIpID49IGhhLT5yZXFfcV9jbnQpIHsKIAkJCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgZnJlZSByZXF1ZXN0IGVudHJpZXMuICovCi0JCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpCisJCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpCiAJCQkJY250ID0gKHVpbnQxNl90KVJEX1JFR19EV09SRCgKIAkJCQkgICAgJnJlZy0+aXNwMjQucmVxX3Ffb3V0KTsKIAkJCWVsc2UKQEAgLTU5Myw3ICs1OTMsNyBAQAogCQloYS0+cmVxdWVzdF9yaW5nX3B0cisrOwogCiAJLyogU2V0IGNoaXAgbmV3IHJpbmcgaW5kZXguICovCi0JaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpKSB7CisJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjQucmVxX3FfaW4sIGhhLT5yZXFfcmluZ19pbmRleCk7CiAJCVJEX1JFR19EV09SRF9SRUxBWEVEKCZyZWctPmlzcDI0LnJlcV9xX2luKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCmluZGV4IDQyYWE3YTcuLjIwMDNkYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCiAJCWhhLT5pc3Bfb3BzLmZ3X2R1bXAoaGEsIDEpOwogCi0JCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkgeworCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJCWlmIChtYlsxXSA9PSAwICYmIG1iWzJdID09IDApIHsKIAkJCQlxbGFfcHJpbnRrKEtFUk5fRVJSLCBoYSwKIAkJCQkgICAgIlVucmVjb3ZlcmFibGUgSGFyZHdhcmUgRXJyb3I6IGFkYXB0ZXIgIgpAQCAtNTIxLDcgKzUyMSw3IEBACiAJCSAqLwogCQlpZiAocWwyeHByb2Nlc3Nyc2NuICYmCiAJCSAgICAhSVNfUUxBMjEwMChoYSkgJiYgIUlTX1FMQTIyMDAoaGEpICYmICFJU19RTEE2MzEyKGhhKSAmJgotCQkgICAgIUlTX1FMQTYzMjIoaGEpICYmICFJU19RTEEyNFhYKGhhKSAmJiAhSVNfUUxBMjVYWChoYSkgJiYKKwkJICAgICFJU19RTEE2MzIyKGhhKSAmJiAhSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpICYmCiAJCSAgICBoYS0+ZmxhZ3MuaW5pdF9kb25lICYmIG1iWzFdICE9IDB4ZmZmZiAmJgogCQkgICAgKChoYS0+b3BlcmF0aW5nX21vZGUgPT0gUDJQICYmIG1iWzFdICE9IDApIHx8CiAJCSAgICAoaGEtPm9wZXJhdGluZ19tb2RlICE9IFAyUCAmJiBtYlsxXSAhPQpAQCAtNjM4LDcgKzYzOCw3IEBACiAJCSAgICAic2NzaSglbGQpOiBbUnxaXUlPIHVwZGF0ZSBjb21wbGV0aW9uLlxuIiwKIAkJICAgIGhhLT5ob3N0X25vKSk7CiAKLQkJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpKQorCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpCiAJCQlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUoaGEpOwogCQllbHNlCiAJCQlxbGEyeDAwX3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUoaGEpOwpAQCAtODEwLDcgKzgxMCw3IEBACiAKIAlzdHMgPSAoc3RzX2VudHJ5X3QgKikgcGt0OwogCXN0czI0ID0gKHN0cnVjdCBzdHNfZW50cnlfMjR4eCAqKSBwa3Q7Ci0JaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpKSB7CisJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCWNvbXBfc3RhdHVzID0gbGUxNl90b19jcHUoc3RzMjQtPmNvbXBfc3RhdHVzKTsKIAkJc2NzaV9zdGF0dXMgPSBsZTE2X3RvX2NwdShzdHMyNC0+c2NzaV9zdGF0dXMpICYgU1NfTUFTSzsKIAl9IGVsc2UgewpAQCAtODM4LDkgKzgzOCw3IEBACiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIlN0YXR1cyBFbnRyeSBpbnZhbGlkIGhhbmRsZS5cbiIpOwogCiAJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwotCQlpZiAoaGEtPmRwY193YWl0ICYmICFoYS0+ZHBjX2FjdGl2ZSkKLQkJCXVwKGhhLT5kcGNfd2FpdCk7Ci0KKwkJcWxhMnh4eF93YWtlX2RwYyhoYSk7CiAJCXJldHVybjsKIAl9CiAJY3AgPSBzcC0+Y21kOwpAQCAtODYyLDcgKzg2MCw3IEBACiAJZmNwb3J0ID0gc3AtPmZjcG9ydDsKIAogCXNlbnNlX2xlbiA9IHJzcF9pbmZvX2xlbiA9IHJlc2lkX2xlbiA9IDA7Ci0JaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpKSB7CisJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCXNlbnNlX2xlbiA9IGxlMzJfdG9fY3B1KHN0czI0LT5zZW5zZV9sZW4pOwogCQlyc3BfaW5mb19sZW4gPSBsZTMyX3RvX2NwdShzdHMyNC0+cnNwX2RhdGFfbGVuKTsKIAkJcmVzaWRfbGVuID0gbGUzMl90b19jcHUoc3RzMjQtPnJzcF9yZXNpZHVhbF9jb3VudCk7CkBAIC04ODAsNyArODc4LDcgQEAKIAkvKiBDaGVjayBmb3IgYW55IEZDUCB0cmFuc3BvcnQgZXJyb3JzLiAqLwogCWlmIChzY3NpX3N0YXR1cyAmIFNTX1JFU1BPTlNFX0lORk9fTEVOX1ZBTElEKSB7CiAJCS8qIFNlbnNlIGRhdGEgbGllcyBiZXlvbmQgYW55IEZDUCBSRVNQT05TRSBkYXRhLiAqLwotCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpCisJCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkKIAkJCXNlbnNlX2RhdGEgKz0gcnNwX2luZm9fbGVuOwogCQlpZiAocnNwX2luZm9fbGVuID4gMyAmJiByc3BfaW5mb1szXSkgewogCQkJREVCVUcyKHByaW50aygic2NzaSglbGQ6JWQ6JWQ6JWQpIEZDUCBJL08gcHJvdG9jb2wgIgpAQCAtMTExOSw3ICsxMTE3LDcgQEAKIAljYXNlIENTX1RJTUVPVVQ6CiAJCWNwLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CiAKLQkJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpKSB7CisJCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgewogCQkJREVCVUcyKHByaW50ayhLRVJOX0lORk8KIAkJCSAgICAic2NzaSglbGQ6JWQ6JWQ6JWQpOiBUSU1FT1VUIHN0YXR1cyBkZXRlY3RlZCAiCiAJCQkgICAgIjB4JXgtMHgleFxuIiwgaGEtPmhvc3Rfbm8sIGNwLT5kZXZpY2UtPmNoYW5uZWwsCkBAIC0xMTk5LDcgKzExOTcsNyBAQAogCQl9CiAKIAkJLyogTW92ZSBzZW5zZSBkYXRhLiAqLwotCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpCisJCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkKIAkJCWhvc3RfdG9fZmNwX3N3YXAocGt0LT5kYXRhLCBzaXplb2YocGt0LT5kYXRhKSk7CiAJCW1lbWNweShzcC0+cmVxdWVzdF9zZW5zZV9wdHIsIHBrdC0+ZGF0YSwgc2Vuc2Vfc3opOwogCQlERUJVRzUocWxhMngwMF9kdW1wX2J1ZmZlcihzcC0+cmVxdWVzdF9zZW5zZV9wdHIsIHNlbnNlX3N6KSk7CkBAIC0xMjcxLDggKzEyNjksNyBAQAogCQkgICAgIkVycm9yIGVudHJ5IC0gaW52YWxpZCBoYW5kbGVcbiIpOwogCiAJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwotCQlpZiAoaGEtPmRwY193YWl0ICYmICFoYS0+ZHBjX2FjdGl2ZSkKLQkJCXVwKGhhLT5kcGNfd2FpdCk7CisJCXFsYTJ4eHhfd2FrZV9kcGMoaGEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCmluZGV4IDM2M2RmZGQuLmQ2Y2IzYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKQEAgLTkxLDcgKzkxLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAogCS8qIExvYWQgbWFpbGJveCByZWdpc3RlcnMuICovCi0JaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpKQorCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkKIAkJb3B0ciA9ICh1aW50MTZfdCBfX2lvbWVtICopJnJlZy0+aXNwMjQubWFpbGJveDA7CiAJZWxzZQogCQlvcHRyID0gKHVpbnQxNl90IF9faW9tZW0gKilNQUlMQk9YX1JFRyhoYSwgJnJlZy0+aXNwLCAwKTsKQEAgLTE1NSw3ICsxNTUsNyBAQAogCiAJCXNldF9iaXQoTUJYX0lOVFJfV0FJVCwgJmhhLT5tYnhfY21kX2ZsYWdzKTsKIAotCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpCisJCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkKIAkJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjQuaGNjciwgSENDUlhfU0VUX0hPU1RfSU5UKTsKIAkJZWxzZQogCQkJV1JUX1JFR19XT1JEKCZyZWctPmlzcC5oY2NyLCBIQ0NSX1NFVF9IT1NUX0lOVCk7CkBAIC0xNzksNyArMTc5LDcgQEAKIAkJREVCVUczXzExKHByaW50aygiJXMoJWxkKTogY21kPSV4IFBPTExJTkcgTU9ERS5cbiIsIF9fZnVuY19fLAogCQkgICAgaGEtPmhvc3Rfbm8sIGNvbW1hbmQpOykKIAotCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpCisJCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkKIAkJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjQuaGNjciwgSENDUlhfU0VUX0hPU1RfSU5UKTsKIAkJZWxzZQogCQkJV1JUX1JFR19XT1JEKCZyZWctPmlzcC5oY2NyLCBIQ0NSX1NFVF9IT1NUX0lOVCk7CkBAIC0yMzcsNyArMjM3LDcgQEAKIAkJdWludDE2X3QgbWIwOwogCQl1aW50MzJfdCBpY3RybDsKIAotCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwkJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCQltYjAgPSBSRF9SRUdfV09SRCgmcmVnLT5pc3AyNC5tYWlsYm94MCk7CiAJCQlpY3RybCA9IFJEX1JFR19EV09SRCgmcmVnLT5pc3AyNC5pY3RybCk7CiAJCX0gZWxzZSB7CkBAIC0yODQsOSArMjg0LDcgQEAKIAkJCSAgICAiTWFpbGJveCBjb21tYW5kIHRpbWVvdXQgb2NjdXJlZC4gU2NoZWR1bGluZyBJU1AgIgogCQkJICAgICJhYm9ydC5cbiIpOwogCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmaGEtPmRwY19mbGFncyk7Ci0JCQlpZiAoaGEtPmRwY193YWl0ICYmICFoYS0+ZHBjX2FjdGl2ZSkKLQkJCQl1cChoYS0+ZHBjX3dhaXQpOwotCisJCQlxbGEyeHh4X3dha2VfZHBjKGhhKTsKIAkJfSBlbHNlIGlmICghYWJvcnRfYWN0aXZlKSB7CiAJCQkvKiBjYWxsIGFib3J0IGRpcmVjdGx5IHNpbmNlIHdlIGFyZSBpbiB0aGUgRFBDIHRocmVhZCAqLwogCQkJREVCVUcocHJpbnRrKCIlcyglbGQpOiB0aW1lb3V0IGNhbGxpbmcgYWJvcnRfaXNwXG4iLApAQCAtMzM2LDcgKzMzNCw3IEBACiAKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwogCi0JaWYgKE1TVyhyaXNjX2FkZHIpIHx8IElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTI1WFgoaGEpKSB7CisJaWYgKE1TVyhyaXNjX2FkZHIpIHx8IElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCW1jcC0+bWJbMF0gPSBNQkNfTE9BRF9SSVNDX1JBTV9FWFRFTkRFRDsKIAkJbWNwLT5tYls4XSA9IE1TVyhyaXNjX2FkZHIpOwogCQltY3AtPm91dF9tYiA9IE1CWF84fE1CWF8wOwpAQCAtMzUwLDcgKzM0OCw3IEBACiAJbWNwLT5tYls2XSA9IE1TVyhNU0QocmVxX2RtYSkpOwogCW1jcC0+bWJbN10gPSBMU1coTVNEKHJlcV9kbWEpKTsKIAltY3AtPm91dF9tYiB8PSBNQlhfN3xNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMTsKLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJbWNwLT5tYls0XSA9IE1TVyhyaXNjX2NvZGVfc2l6ZSk7CiAJCW1jcC0+bWJbNV0gPSBMU1cocmlzY19jb2RlX3NpemUpOwogCQltY3AtPm91dF9tYiB8PSBNQlhfNXxNQlhfNDsKQEAgLTQwMSw3ICszOTksNyBAQAogCW1jcC0+bWJbMF0gPSBNQkNfRVhFQ1VURV9GSVJNV0FSRTsKIAltY3AtPm91dF9tYiA9IE1CWF8wOwogCW1jcC0+aW5fbWIgPSBNQlhfMDsKLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJbWNwLT5tYlsxXSA9IE1TVyhyaXNjX2FkZHIpOwogCQltY3AtPm1iWzJdID0gTFNXKHJpc2NfYWRkcik7CiAJCW1jcC0+bWJbM10gPSAwOwpAQCAtNDI0LDcgKzQyMiw3IEBACiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IG1iWzBdPSV4LlxuIiwgX19mdW5jX18sCiAJCSAgICBoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOwogCX0gZWxzZSB7Ci0JCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkgeworCQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lIGV4Y2hhbmdlcz0leC5cbiIsCiAJCQkgICAgX19mdW5jX18sIGhhLT5ob3N0X25vLCBtY3AtPm1iWzFdKTspCiAJCX0gZWxzZSB7CkBAIC01NjUsNyArNTYzLDcgQEAKIAltY3AtPm1iWzNdID0gZndvcHRzWzNdOwogCW1jcC0+b3V0X21iID0gTUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7CiAJbWNwLT5pbl9tYiA9IE1CWF8wOwotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkgeworCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgewogCQltY3AtPmluX21iIHw9IE1CWF8xOwogCX0gZWxzZSB7CiAJCW1jcC0+bWJbMTBdID0gZndvcHRzWzEwXTsKQEAgLTY3OCw3ICs2NzYsNyBAQAogCW1jcC0+bWJbMF0gPSBNQkNfVkVSSUZZX0NIRUNLU1VNOwogCW1jcC0+b3V0X21iID0gTUJYXzA7CiAJbWNwLT5pbl9tYiA9IE1CWF8wOwotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkgeworCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgewogCQltY3AtPm1iWzFdID0gTVNXKHJpc2NfYWRkcik7CiAJCW1jcC0+bWJbMl0gPSBMU1cocmlzY19hZGRyKTsKIAkJbWNwLT5vdXRfbWIgfD0gTUJYXzJ8TUJYXzE7CkBAIC02OTUsNyArNjkzLDcgQEAKIAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKSB7CiAJCURFQlVHMl8zXzExKHByaW50aygiJXMoJWxkKTogZmFpbGVkPSV4IGNoayBzdW09JXguXG4iLCBfX2Z1bmNfXywKLQkJICAgIGhhLT5ob3N0X25vLCBydmFsLCAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkgPworCQkgICAgaGEtPmhvc3Rfbm8sIHJ2YWwsIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSA/CiAJCSAgICAobWNwLT5tYlsyXSA8PCAxNikgfCBtY3AtPm1iWzFdOiBtY3AtPm1iWzFdKSk7KQogCX0gZWxzZSB7CiAJCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCkBAIC03NTMsNyArNzUxLDcgQEAKIAogCQkvKiBNYXNrIHJlc2VydmVkIGJpdHMuICovCiAJCXN0c19lbnRyeS0+ZW50cnlfc3RhdHVzICY9Ci0JCSAgICBJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSA/IFJGX01BU0tfMjRYWCA6UkZfTUFTSzsKKwkJICAgIElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpID8gUkZfTUFTS18yNFhYIDpSRl9NQVNLOwogCX0KIAogCXJldHVybiBydmFsOwpAQCAtMTA5Myw3ICsxMDkxLDcgQEAKIAltZW1zZXQocGQsIDAsIG1heChQT1JUX0RBVEFCQVNFX1NJWkUsIFBPUlRfREFUQUJBU0VfMjRYWF9TSVpFKSk7CiAKIAltY3AtPm1iWzBdID0gTUJDX0dFVF9QT1JUX0RBVEFCQVNFOwotCWlmIChvcHQgIT0gMCAmJiAhSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTI1WFgoaGEpKQorCWlmIChvcHQgIT0gMCAmJiAhSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpKQogCQltY3AtPm1iWzBdID0gTUJDX0VOSEFOQ0VEX0dFVF9QT1JUX0RBVEFCQVNFOwogCW1jcC0+bWJbMl0gPSBNU1cocGRfZG1hKTsKIAltY3AtPm1iWzNdID0gTFNXKHBkX2RtYSk7CkBAIC0xMTAxLDcgKzEwOTksNyBAQAogCW1jcC0+bWJbN10gPSBMU1coTVNEKHBkX2RtYSkpOwogCW1jcC0+b3V0X21iID0gTUJYXzd8TUJYXzZ8TUJYXzN8TUJYXzJ8TUJYXzA7CiAJbWNwLT5pbl9tYiA9IE1CWF8wOwotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkgeworCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgewogCQltY3AtPm1iWzFdID0gZmNwb3J0LT5sb29wX2lkOwogCQltY3AtPm1iWzEwXSA9IG9wdDsKIAkJbWNwLT5vdXRfbWIgfD0gTUJYXzEwfE1CWF8xOwpAQCAtMTExNCw3ICsxMTEyLDcgQEAKIAkJbWNwLT5tYlsxXSA9IGZjcG9ydC0+bG9vcF9pZCA8PCA4IHwgb3B0OwogCQltY3AtPm91dF9tYiB8PSBNQlhfMTsKIAl9Ci0JbWNwLT5idWZfc2l6ZSA9IChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSA/CisJbWNwLT5idWZfc2l6ZSA9IChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSA/CiAJICAgIFBPUlRfREFUQUJBU0VfMjRYWF9TSVpFIDogUE9SVF9EQVRBQkFTRV9TSVpFKTsKIAltY3AtPmZsYWdzID0gTUJYX0RNQV9JTjsKIAltY3AtPnRvdiA9IChoYS0+bG9naW5fdGltZW91dCAqIDIpICsgKGhhLT5sb2dpbl90aW1lb3V0IC8gMik7CkBAIC0xMTIyLDcgKzExMjAsNyBAQAogCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQogCQlnb3RvIGdwZF9lcnJvcl9vdXQ7CiAKLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJcGQyNCA9IChzdHJ1Y3QgcG9ydF9kYXRhYmFzZV8yNHh4ICopIHBkOwogCiAJCS8qIENoZWNrIGZvciBsb2dnZWQgaW4gc3RhdGUuICovCkBAIC0xMzM5LDcgKzEzMzcsNyBAQAogCiAJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgaGEtPmhvc3Rfbm8pOykKIAotCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEEyNVhYKGhhKSkgeworCWlmIChJU19RTEEyNFhYKGhhKSB8fCBJU19RTEE1NFhYKGhhKSkgewogCQltY3AtPm1iWzBdID0gTUJDX0xJUF9GVUxMX0xPR0lOOwogCQltY3AtPm1iWzFdID0gQklUXzA7CiAJCW1jcC0+bWJbMl0gPSAweGZmOwpAQCAtMTYzMywyMCArMTYzMSwyNSBAQAogICoKICAqLwogaW50Ci1xbGEyeDAwX2xvZ2luX2xvY2FsX2RldmljZShzY3NpX3FsYV9ob3N0X3QgKmhhLCB1aW50MTZfdCBsb29wX2lkLAorcWxhMngwMF9sb2dpbl9sb2NhbF9kZXZpY2Uoc2NzaV9xbGFfaG9zdF90ICpoYSwgZmNfcG9ydF90ICpmY3BvcnQsCiAgICAgdWludDE2X3QgKm1iX3JldCwgdWludDhfdCBvcHQpCiB7CiAJaW50IHJ2YWw7CiAJbWJ4X2NtZF90IG1jOwogCW1ieF9jbWRfdCAqbWNwID0gJm1jOwogCisJaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKQorCQlyZXR1cm4gcWxhMjR4eF9sb2dpbl9mYWJyaWMoaGEsIGZjcG9ydC0+bG9vcF9pZCwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhLCBtYl9yZXQsIG9wdCk7CisKIAlERUJVRzMocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKTspCiAKIAltY3AtPm1iWzBdID0gTUJDX0xPR0lOX0xPT1BfUE9SVDsKIAlpZiAoSEFTX0VYVEVOREVEX0lEUyhoYSkpCi0JCW1jcC0+bWJbMV0gPSBsb29wX2lkOworCQltY3AtPm1iWzFdID0gZmNwb3J0LT5sb29wX2lkOwogCWVsc2UKLQkJbWNwLT5tYlsxXSA9IGxvb3BfaWQgPDwgODsKKwkJbWNwLT5tYlsxXSA9IGZjcG9ydC0+bG9vcF9pZCA8PCA4OwogCW1jcC0+bWJbMl0gPSBvcHQ7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMnxNQlhfMXxNQlhfMDsKICAJbWNwLT5pbl9tYiA9IE1CWF83fE1CWF82fE1CWF8xfE1CWF8wOwpAQCAtMTg2OCw3ICsxODcxLDcgQEAKIAogCW1jcC0+bWJbMF0gPSBNQkNfR0VUX0lEX0xJU1Q7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMDsKLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJbWNwLT5tYlsyXSA9IE1TVyhpZF9saXN0X2RtYSk7CiAJCW1jcC0+bWJbM10gPSBMU1coaWRfbGlzdF9kbWEpOwogCQltY3AtPm1iWzZdID0gTVNXKE1TRChpZF9saXN0X2RtYSkpOwpAQCAtMjA1OSw3ICsyMDYyLDcgQEAKIAltY3AtPm1iWzddID0gTFNXKE1TRChzdGF0X2J1Zl9kbWEpKTsKIAltY3AtPm91dF9tYiA9IE1CWF83fE1CWF82fE1CWF8zfE1CWF8yfE1CWF8wOwogCW1jcC0+aW5fbWIgPSBNQlhfMDsKLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJbWNwLT5tYlsxXSA9IGxvb3BfaWQ7CiAJCW1jcC0+bWJbNF0gPSAwOwogCQltY3AtPm1iWzEwXSA9IDA7CkBAIC0yMzI2LDcgKzIzMjksNyBAQAogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKIAotCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTI1WFgoaGEpKQorCWlmICghSVNfUUxBMjRYWChoYSkgJiYgIUlTX1FMQTU0WFgoaGEpKQogCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKIAogCURFQlVHMTEocHJpbnRrKCIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CkBAIC0yNDA4LDkgKzI0MTEsOSBAQAogCiAJbWNwLT5tYlswXSA9IE1CQ19TRVJERVNfUEFSQU1TOwogCW1jcC0+bWJbMV0gPSBCSVRfMDsKLQltY3AtPm1iWzJdID0gc3dfZW1fMWc7Ci0JbWNwLT5tYlszXSA9IHN3X2VtXzJnOwotCW1jcC0+bWJbNF0gPSBzd19lbV80ZzsKKwltY3AtPm1iWzJdID0gc3dfZW1fMWcgfCBCSVRfMTU7CisJbWNwLT5tYlszXSA9IHN3X2VtXzJnIHwgQklUXzE1OworCW1jcC0+bWJbNF0gPSBzd19lbV80ZyB8IEJJVF8xNTsKIAltY3AtPm91dF9tYiA9IE1CWF80fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwogCW1jcC0+aW5fbWIgPSBNQlhfMDsKIAltY3AtPnRvdiA9IDMwOwpAQCAtMjQzNiw3ICsyNDM5LDcgQEAKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CiAKLQlpZiAoIUlTX1FMQTI0WFgoaGEpICYmICFJU19RTEEyNVhYKGhhKSkKKwlpZiAoIUlTX1FMQTI0WFgoaGEpICYmICFJU19RTEE1NFhYKGhhKSkKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCBoYS0+aG9zdF9ubykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCA5ZjkxZjFhLi4wMjliYmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtOCw4ICs4LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKICNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpY2FtLmg+CkBAIC0xMTQ2LDYgKzExNDYsNTcgQEAKIAlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soaGEtPnBkZXYsIERNQV8zMkJJVF9NQVNLKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitxbGEyeDAwX3NldF9pc3BfZmxhZ3Moc2NzaV9xbGFfaG9zdF90ICpoYSkKK3sKKwloYS0+ZGV2aWNlX3R5cGUgPSBEVF9FWFRFTkRFRF9JRFM7CisJc3dpdGNoIChoYS0+cGRldi0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMTAwOgorCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfSVNQMjEwMDsKKwkJaGEtPmRldmljZV90eXBlICY9IH5EVF9FWFRFTkRFRF9JRFM7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjIwMDoKKwkJaGEtPmRldmljZV90eXBlIHw9IERUX0lTUDIyMDA7CisJCWhhLT5kZXZpY2VfdHlwZSAmPSB+RFRfRVhURU5ERURfSURTOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDIzMDA6CisJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9JU1AyMzAwOworCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfWklPX1NVUFBPUlRFRDsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzEyOgorCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfSVNQMjMxMjsKKwkJaGEtPmRldmljZV90eXBlIHw9IERUX1pJT19TVVBQT1JURUQ7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMyMjoKKwkJaGEtPmRldmljZV90eXBlIHw9IERUX0lTUDIzMjI7CisJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9aSU9fU1VQUE9SVEVEOworCQlpZiAoaGEtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDI4ICYmCisJCSAgICBoYS0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAxNzApCisJCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfT0VNXzAwMTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzEyOgorCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfSVNQNjMxMjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzIyOgorCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfSVNQNjMyMjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDIyOgorCQloYS0+ZGV2aWNlX3R5cGUgfD0gRFRfSVNQMjQyMjsKKwkJaGEtPmRldmljZV90eXBlIHw9IERUX1pJT19TVVBQT1JURUQ7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjQzMjoKKwkJaGEtPmRldmljZV90eXBlIHw9IERUX0lTUDI0MzI7CisJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9aSU9fU1VQUE9SVEVEOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDU0MjI6CisJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9JU1A1NDIyOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDU0MzI6CisJCWhhLT5kZXZpY2VfdHlwZSB8PSBEVF9JU1A1NDMyOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQKIHFsYTJ4MDBfaW9zcGFjZV9jb25maWcoc2NzaV9xbGFfaG9zdF90ICpoYSkKIHsKQEAgLTEzMDcsNyArMTM1OCw4IEBACiAJaGEtPmJyZF9pbmZvID0gYnJkX2luZm87CiAJc3ByaW50ZihoYS0+aG9zdF9zdHIsICIlc18lbGQiLCBoYS0+YnJkX2luZm8tPmRydl9uYW1lLCBoYS0+aG9zdF9ubyk7CiAKLQloYS0+ZHBjX3BpZCA9IC0xOworCS8qIFNldCBJU1AtdHlwZSBpbmZvcm1hdGlvbi4gKi8KKwlxbGEyeDAwX3NldF9pc3BfZmxhZ3MoaGEpOwogCiAJLyogQ29uZmlndXJlIFBDSSBJL08gc3BhY2UgKi8KIAlyZXQgPSBxbGEyeDAwX2lvc3BhY2VfY29uZmlnKGhhKTsKQEAgLTEzODYsNyArMTQzOCw3IEBACiAJCWhhLT5naWRfbGlzdF9pbmZvX3NpemUgPSA2OwogCQlpZiAoSVNfUUxBMjMyMihoYSkgfHwgSVNfUUxBNjMyMihoYSkpCiAJCQloYS0+b3B0cm9tX3NpemUgPSBPUFRST01fU0laRV8yMzIyOwotCX0gZWxzZSBpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwl9IGVsc2UgaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCWhvc3QtPm1heF9pZCA9IE1BWF9UQVJHRVRTXzIyMDA7CiAJCWhhLT5tYnhfY291bnQgPSBNQUlMQk9YX1JFR0lTVEVSX0NPVU5UOwogCQloYS0+cmVxdWVzdF9xX2xlbmd0aCA9IFJFUVVFU1RfRU5UUllfQ05UXzI0WFg7CkBAIC0xNDQ5LDkgKzE1MDEsNiBAQAogCSAqLwogCXNwaW5fbG9ja19pbml0KCZoYS0+bWJ4X3JlZ19sb2NrKTsKIAotCWluaXRfY29tcGxldGlvbigmaGEtPmRwY19pbml0ZWQpOwotCWluaXRfY29tcGxldGlvbigmaGEtPmRwY19leGl0ZWQpOwotCiAJcWxhMngwMF9jb25maWdfZG1hX2FkZHJlc3NpbmcoaGEpOwogCWlmIChxbGEyeDAwX21lbV9hbGxvYyhoYSkpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLApAQCAtMTQ3OCwxNiArMTUyNywxNCBAQAogCS8qCiAJICogU3RhcnR1cCB0aGUga2VybmVsIHRocmVhZCBmb3IgdGhpcyBob3N0IGFkYXB0ZXIKIAkgKi8KLQloYS0+ZHBjX3Nob3VsZF9kaWUgPSAwOwotCWhhLT5kcGNfcGlkID0ga2VybmVsX3RocmVhZChxbGEyeDAwX2RvX2RwYywgaGEsIDApOwotCWlmIChoYS0+ZHBjX3BpZCA8IDApIHsKKwloYS0+ZHBjX3RocmVhZCA9IGt0aHJlYWRfY3JlYXRlKHFsYTJ4MDBfZG9fZHBjLCBoYSwKKwkJCSIlc19kcGMiLCBoYS0+aG9zdF9zdHIpOworCWlmIChJU19FUlIoaGEtPmRwY190aHJlYWQpKSB7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJICAgICJVbmFibGUgdG8gc3RhcnQgRFBDIHRocmVhZCFcbiIpOwotCi0JCXJldCA9IC1FTk9ERVY7CisJCXJldCA9IFBUUl9FUlIoaGEtPmRwY190aHJlYWQpOwogCQlnb3RvIHByb2JlX2ZhaWxlZDsKIAl9Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmaGEtPmRwY19pbml0ZWQpOwogCiAJaG9zdC0+dGhpc19pZCA9IDI1NTsKIAlob3N0LT5jbWRfcGVyX2x1biA9IDM7CkBAIC0xNTE3LDcgKzE1NjQsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJcmVnID0gaGEtPmlvYmFzZTsKLQlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBMjVYWChoYSkpIHsKKwlpZiAoSVNfUUxBMjRYWChoYSkgfHwgSVNfUUxBNTRYWChoYSkpIHsKIAkJV1JUX1JFR19EV09SRCgmcmVnLT5pc3AyNC5oY2NyLCBIQ0NSWF9DTFJfSE9TVF9JTlQpOwogCQlXUlRfUkVHX0RXT1JEKCZyZWctPmlzcDI0LmhjY3IsIEhDQ1JYX0NMUl9SSVNDX0lOVCk7CiAJfSBlbHNlIHsKQEAgLTE2MjEsOCArMTY2OCw2IEBACiBzdGF0aWMgdm9pZAogcWxhMngwMF9mcmVlX2RldmljZShzY3NpX3FsYV9ob3N0X3QgKmhhKQogewotCWludCByZXQ7Ci0KIAkvKiBBYm9ydCBhbnkgb3V0c3RhbmRpbmcgSU8gZGVzY3JpcHRvcnMuICovCiAJaWYgKCFJU19RTEEyMTAwKGhhKSAmJiAhSVNfUUxBMjIwMChoYSkpCiAJCXFsYTJ4MDBfY2FuY2VsX2lvX2Rlc2NyaXB0b3JzKGhhKTsKQEAgLTE2MzIsMTggKzE2NzcsMTUgQEAKIAkJcWxhMngwMF9zdG9wX3RpbWVyKGhhKTsKIAogCS8qIEtpbGwgdGhlIGtlcm5lbCB0aHJlYWQgZm9yIHRoaXMgaG9zdCAqLwotCWlmIChoYS0+ZHBjX3BpZCA+PSAwKSB7Ci0JCWhhLT5kcGNfc2hvdWxkX2RpZSA9IDE7Ci0JCXdtYigpOwotCQlyZXQgPSBraWxsX3Byb2MoaGEtPmRwY19waWQsIFNJR0hVUCwgMSk7Ci0JCWlmIChyZXQpIHsKLQkJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkJICAgICJVbmFibGUgdG8gc2lnbmFsIERQQyB0aHJlYWQgLS0gKCVkKVxuIiwgcmV0KTsKKwlpZiAoaGEtPmRwY190aHJlYWQpIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gaGEtPmRwY190aHJlYWQ7CiAKLQkJCS8qIFRPRE86IFNPTUVUSElORyBNT1JFPz8/ICovCi0JCX0gZWxzZSB7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZoYS0+ZHBjX2V4aXRlZCk7Ci0JCX0KKwkJLyoKKwkJICogcWxhMnh4eF93YWtlX2RwYyBjaGVja3MgZm9yIC0+ZHBjX3RocmVhZAorCQkgKiBzbyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0LgorCQkgKi8KKwkJaGEtPmRwY190aHJlYWQgPSBOVUxMOworCQlrdGhyZWFkX3N0b3AodCk7CiAJfQogCiAJLyogU3RvcCBjdXJyZW50bHkgZXhlY3V0aW5nIGZpcm13YXJlLiAqLwpAQCAtMTc3NSw4ICsxODE3LDggQEAKIAkJYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX0RFVklDRV9MT1NUKTsKIAl9CiAKLQlpZiAoZGVmZXIgJiYgaGEtPmRwY193YWl0ICYmICFoYS0+ZHBjX2FjdGl2ZSkKLQkJdXAoaGEtPmRwY193YWl0KTsKKwlpZiAoZGVmZXIpCisJCXFsYTJ4eHhfd2FrZV9kcGMoaGEpOwogfQogCiAvKgpAQCAtMTk5Myw3ICsyMDM1LDYgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpmY3BsLCAqZmNwdGVtcDsKIAlmY19wb3J0X3QJKmZjcG9ydDsKLQl1bnNpZ25lZCBpbnQJd3RpbWU7LyogbWF4IHdhaXQgdGltZSBpZiBtYnggY21kIGlzIGJ1c3kuICovCiAKIAlpZiAoaGEgPT0gTlVMTCkgewogCQkvKiBlcnJvciAqLwpAQCAtMjAwMSwxMSArMjA0Miw2IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBNYWtlIHN1cmUgYWxsIG90aGVyIHRocmVhZHMgYXJlIHN0b3BwZWQuICovCi0Jd3RpbWUgPSA2MCAqIDEwMDA7Ci0Jd2hpbGUgKGhhLT5kcGNfd2FpdCAmJiB3dGltZSkKLQkJd3RpbWUgPSBtc2xlZXBfaW50ZXJydXB0aWJsZSh3dGltZSk7Ci0KIAkvKiBmcmVlIGlvY3RsIG1lbW9yeSAqLwogCXFsYTJ4MDBfZnJlZV9pb2N0bF9tZW0oaGEpOwogCkBAIC0yMTU2LDcgKzIxOTIsNiBAQAogc3RhdGljIGludAogcWxhMngwMF9kb19kcGModm9pZCAqZGF0YSkKIHsKLQlERUNMQVJFX01VVEVYX0xPQ0tFRChzZW0pOwogCXNjc2lfcWxhX2hvc3RfdCAqaGE7CiAJZmNfcG9ydF90CSpmY3BvcnQ7CiAJdWludDhfdAkJc3RhdHVzOwpAQCAtMjE2NCwzMiArMjE5OSwxOSBAQAogCiAJaGEgPSAoc2NzaV9xbGFfaG9zdF90ICopZGF0YTsKIAotCWxvY2tfa2VybmVsKCk7Ci0KLQlkYWVtb25pemUoIiVzX2RwYyIsIGhhLT5ob3N0X3N0cik7Ci0JYWxsb3dfc2lnbmFsKFNJR0hVUCk7Ci0KLQloYS0+ZHBjX3dhaXQgPSAmc2VtOwotCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOwogCi0JdW5sb2NrX2tlcm5lbCgpOwotCi0JY29tcGxldGUoJmhhLT5kcGNfaW5pdGVkKTsKLQotCXdoaWxlICgxKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJREVCVUczKHByaW50aygicWxhMngwMDogRFBDIGhhbmRsZXIgc2xlZXBpbmdcbiIpKTsKIAotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzZW0pKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGhhLT5kcGNfc2hvdWxkX2RpZSkKLQkJCWJyZWFrOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZSgpOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAkJREVCVUczKHByaW50aygicWxhMngwMDogRFBDIGhhbmRsZXIgd2FraW5nIHVwXG4iKSk7CiAKIAkJLyogSW5pdGlhbGl6YXRpb24gbm90IHlldCBmaW5pc2hlZC4gRG9uJ3QgZG8gYW55dGhpbmcgeWV0LiAqLwotCQlpZiAoIWhhLT5mbGFncy5pbml0X2RvbmUgfHwgaGEtPmRwY19hY3RpdmUpCisJCWlmICghaGEtPmZsYWdzLmluaXRfZG9uZSkKIAkJCWNvbnRpbnVlOwogCiAJCURFQlVHMyhwcmludGsoInNjc2koJWxkKTogRFBDIGhhbmRsZXJcbiIsIGhhLT5ob3N0X25vKSk7CkBAIC0yMjczLDcgKzIyOTUsNyBAQAogCQkJCQl9IGVsc2UKIAkJCQkJCXN0YXR1cyA9CiAJCQkJCQkgICAgcWxhMngwMF9sb2NhbF9kZXZpY2VfbG9naW4oCi0JCQkJCQkJaGEsIGZjcG9ydC0+bG9vcF9pZCk7CisJCQkJCQkJaGEsIGZjcG9ydCk7CiAKIAkJCQkJaWYgKHN0YXR1cyA9PSBRTEFfU1VDQ0VTUykgewogCQkJCQkJZmNwb3J0LT5vbGRfbG9vcF9pZCA9IGZjcG9ydC0+bG9vcF9pZDsKQEAgLTIzNTYsMTAgKzIzNzgsMTYgQEAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IG5vYm9keSB0cmllcyB0byB3YWtlIHVzIHVwIGFnYWluLgogCSAqLwotCWhhLT5kcGNfd2FpdCA9IE5VTEw7CiAJaGEtPmRwY19hY3RpdmUgPSAwOwogCi0JY29tcGxldGVfYW5kX2V4aXQoJmhhLT5kcGNfZXhpdGVkLCAwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZAorcWxhMnh4eF93YWtlX2RwYyhzY3NpX3FsYV9ob3N0X3QgKmhhKQoreworCWlmIChoYS0+ZHBjX3RocmVhZCkKKwkJd2FrZV91cF9wcm9jZXNzKGhhLT5kcGNfdGhyZWFkKTsKIH0KIAogLyoKQEAgLTI1NDAsMTEgKzI1NjgsOCBAQAogCSAgICB0ZXN0X2JpdChMT0dJTl9SRVRSWV9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChSRVNFVF9NQVJLRVJfTkVFREVELCAmaGEtPmRwY19mbGFncykgfHwKIAkgICAgdGVzdF9iaXQoQkVBQ09OX0JMSU5LX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KFJFTE9HSU5fTkVFREVELCAmaGEtPmRwY19mbGFncykpICYmCi0JICAgIGhhLT5kcGNfd2FpdCAmJiAhaGEtPmRwY19hY3RpdmUpIHsKLQotCQl1cChoYS0+ZHBjX3dhaXQpOwotCX0KKwkgICAgdGVzdF9iaXQoUkVMT0dJTl9ORUVERUQsICZoYS0+ZHBjX2ZsYWdzKSkpCisJCXFsYTJ4eHhfd2FrZV9kcGMoaGEpOwogCiAJcWxhMngwMF9yZXN0YXJ0X3RpbWVyKGhhLCBXQVRDSF9JTlRFUlZBTCk7CiB9CkBAIC0yNTc2LDEzICsyNjAxLDEyIEBACiAKIC8qIEZpcm13YXJlIGludGVyZmFjZSByb3V0aW5lcy4gKi8KIAotI2RlZmluZSBGV19CTE9CUwk2CisjZGVmaW5lIEZXX0JMT0JTCTUKICNkZWZpbmUgRldfSVNQMjFYWAkwCiAjZGVmaW5lIEZXX0lTUDIyWFgJMQogI2RlZmluZSBGV19JU1AyMzAwCTIKICNkZWZpbmUgRldfSVNQMjMyMgkzCi0jZGVmaW5lIEZXX0lTUDYzWFgJNAotI2RlZmluZSBGV19JU1AyNFhYCTUKKyNkZWZpbmUgRldfSVNQMjRYWAk0CiAKIHN0YXRpYyBERUNMQVJFX01VVEVYKHFsYV9md19sb2NrKTsKIApAQCAtMjU5MSw3ICsyNjE1LDYgQEAKIAl7IC5uYW1lID0gInFsMjIwMF9mdy5iaW4iLCAuc2VncyA9IHsgMHgxMDAwLCAwIH0sIH0sCiAJeyAubmFtZSA9ICJxbDIzMDBfZncuYmluIiwgLnNlZ3MgPSB7IDB4ODAwLCAwIH0sIH0sCiAJeyAubmFtZSA9ICJxbDIzMjJfZncuYmluIiwgLnNlZ3MgPSB7IDB4ODAwLCAweDFjMDAwLCAweDFlMDAwLCAwIH0sIH0sCi0JeyAubmFtZSA9ICJxbDYzMTJfZncuYmluIiwgLnNlZ3MgPSB7IDB4ODAwLCAwIH0sIH0sCiAJeyAubmFtZSA9ICJxbDI0MDBfZncuYmluIiwgfSwKIH07CiAKQEAgLTI2MDUsMTMgKzI2MjgsMTEgQEAKIAkJYmxvYiA9ICZxbGFfZndfYmxvYnNbRldfSVNQMjFYWF07CiAJfSBlbHNlIGlmIChJU19RTEEyMjAwKGhhKSkgewogCQlibG9iID0gJnFsYV9md19ibG9ic1tGV19JU1AyMlhYXTsKLQl9IGVsc2UgaWYgKElTX1FMQTIzMDAoaGEpIHx8IElTX1FMQTIzMTIoaGEpKSB7CisJfSBlbHNlIGlmIChJU19RTEEyMzAwKGhhKSB8fCBJU19RTEEyMzEyKGhhKSB8fCBJU19RTEE2MzEyKGhhKSkgewogCQlibG9iID0gJnFsYV9md19ibG9ic1tGV19JU1AyMzAwXTsKLQl9IGVsc2UgaWYgKElTX1FMQTIzMjIoaGEpKSB7CisJfSBlbHNlIGlmIChJU19RTEEyMzIyKGhhKSB8fCBJU19RTEE2MzIyKGhhKSkgewogCQlibG9iID0gJnFsYV9md19ibG9ic1tGV19JU1AyMzIyXTsKLQl9IGVsc2UgaWYgKElTX1FMQTYzMTIoaGEpIHx8IElTX1FMQTYzMjIoaGEpKSB7Ci0JCWJsb2IgPSAmcWxhX2Z3X2Jsb2JzW0ZXX0lTUDYzWFhdOwotCX0gZWxzZSBpZiAoSVNfUUxBMjRYWChoYSkpIHsKKwl9IGVsc2UgaWYgKElTX1FMQTI0WFgoaGEpIHx8IElTX1FMQTU0WFgoaGEpKSB7CiAJCWJsb2IgPSAmcWxhX2Z3X2Jsb2JzW0ZXX0lTUDI0WFhdOwogCX0KIApAQCAtMjY2Nyw2ICsyNjg4LDEwIEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1FMT0dJQywgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjQzMiwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKKwl7IFBDSV9WRU5ET1JfSURfUUxPR0lDLCBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDIyLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAorCXsgUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDU0MzIsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyAwIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsYTJ4eHhfcGNpX3RibCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKaW5kZXggMzg2NmE1Ny4uOGIwMTIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYwpAQCAtMTE5MSwxMSArMTE5MSw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2RlZmluZSBJU19PRU1fMDAxKGhhKSBcCi0JKChoYSktPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzIyICYmIFwKLQkgKGhhKS0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMjggJiYgXAotCSAoaGEpLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE3MCkKLQogLyoqCiAgKiBxbGEyeDAwX3Byb2dyYW1fZmxhc2hfYWRkcmVzcygpIC0gUHJvZ3JhbXMgYSBmbGFzaCBhZGRyZXNzCiAgKiBAaGE6IEhBIGNvbnRleHQKQEAgLTEzNTQsNyArMTM0OSw3IEBACiAJLyogUmVzdW1lIEhCQS4gKi8KIAljbGVhcl9iaXQoTUJYX1VQREFURV9GTEFTSF9BQ1RJVkUsICZoYS0+bWJ4X2NtZF9mbGFncyk7CiAJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmaGEtPmRwY19mbGFncyk7Ci0JdXAoaGEtPmRwY193YWl0KTsKKwlxbGEyeHh4X3dha2VfZHBjKGhhKTsKIAlxbGEyeDAwX3dhaXRfZm9yX2hiYV9vbmxpbmUoaGEpOwogCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhoYS0+aG9zdCk7CiB9CkBAIC0xNjUyLDcgKzE2NDcsNyBAQAogCS8qIFJlc3VtZSBIQkEgLS0gUklTQyByZXNldCBuZWVkZWQuICovCiAJY2xlYXJfYml0KE1CWF9VUERBVEVfRkxBU0hfQUNUSVZFLCAmaGEtPm1ieF9jbWRfZmxhZ3MpOwogCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJmhhLT5kcGNfZmxhZ3MpOwotCXVwKGhhLT5kcGNfd2FpdCk7CisJcWxhMnh4eF93YWtlX2RwYyhoYSk7CiAJcWxhMngwMF93YWl0X2Zvcl9oYmFfb25saW5lKGhhKTsKIAlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoaGEtPmhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwppbmRleCAyNzcwMDA1Li4yNzVlZDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9tdiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNiIKIAogZW51bSB7CiAJLyogQkFSJ3MgYXJlIGVudW1lcmF0ZWQgaW4gdGVybXMgb2YgcGNpX3Jlc291cmNlX3N0YXJ0KCkgdGVybXMgKi8KQEAgLTIyOCw3ICsyMjgsOSBAQAogCU1WX0hQX0VSUkFUQV81MFhYQjIJPSAoMSA8PCAyKSwKIAlNVl9IUF9FUlJBVEFfNjBYMUIyCT0gKDEgPDwgMyksCiAJTVZfSFBfRVJSQVRBXzYwWDFDMAk9ICgxIDw8IDQpLAotCU1WX0hQXzUwWFgJCT0gKDEgPDwgNSksCisJTVZfSFBfRVJSQVRBX1hYNDJBMAk9ICgxIDw8IDUpLAorCU1WX0hQXzUwWFgJCT0gKDEgPDwgNiksCisJTVZfSFBfR0VOX0lJRQkJPSAoMSA8PCA3KSwKIAogCS8qIFBvcnQgcHJpdmF0ZSBmbGFncyAocHBfZmxhZ3MpICovCiAJTVZfUFBfRkxBR19FRE1BX0VOCT0gKDEgPDwgMCksCkBAIC0yMzcsNiArMjM5LDkgQEAKIAogI2RlZmluZSBJU181MFhYKGhwcml2KSAoKGhwcml2KS0+aHBfZmxhZ3MgJiBNVl9IUF81MFhYKQogI2RlZmluZSBJU182MFhYKGhwcml2KSAoKChocHJpdiktPmhwX2ZsYWdzICYgTVZfSFBfNTBYWCkgPT0gMCkKKyNkZWZpbmUgSVNfR0VOX0koaHByaXYpIElTXzUwWFgoaHByaXYpCisjZGVmaW5lIElTX0dFTl9JSShocHJpdikgSVNfNjBYWChocHJpdikKKyNkZWZpbmUgSVNfR0VOX0lJRShocHJpdikgKChocHJpdiktPmhwX2ZsYWdzICYgTVZfSFBfR0VOX0lJRSkKIAogZW51bSB7CiAJLyogT3VyIERNQSBib3VuZGFyeSBpcyBkZXRlcm1pbmVkIGJ5IGFuIGVQUkQgYmVpbmcgdW5hYmxlIHRvIGhhbmRsZQpAQCAtMjU1LDYgKzI2MCw4IEBACiAJY2hpcF81MDgwLAogCWNoaXBfNjA0eCwKIAljaGlwXzYwOHgsCisJY2hpcF82MDQyLAorCWNoaXBfNzA0MiwKIH07CiAKIC8qIENvbW1hbmQgUmVRdWVzdCBCbG9jazogMzJCICovCkBAIC0yNjUsNiArMjcyLDE0IEBACiAJdTE2CQkJYXRhX2NtZFsxMV07CiB9OwogCitzdHJ1Y3QgbXZfY3JxYl9paWUgeworCXUzMgkJCWFkZHI7CisJdTMyCQkJYWRkcl9oaTsKKwl1MzIJCQlmbGFnczsKKwl1MzIJCQlsZW47CisJdTMyCQkJYXRhX2NtZFs0XTsKK307CisKIC8qIENvbW1hbmQgUmVzUG9uc2UgQmxvY2s6IDhCICovCiBzdHJ1Y3QgbXZfY3JwYiB7CiAJdTE2CQkJaWQ7CkBAIC0zMjgsNyArMzQzLDggQEAKIHN0YXRpYyBpbnQgbXZfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIG12X3BvcnRfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIG12X3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci1zdGF0aWMgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHZvaWQgbXZfcWNfcHJlcF9paWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdW5zaWduZWQgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIGlycXJldHVybl90IG12X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsCiAJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIHZvaWQgbXZfZW5nX3RpbWVvdXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CkBAIC0zNjYsNyArMzgyLDYgQEAKIAkuY2FuX3F1ZXVlCQk9IE1WX1VTRV9RX0RFUFRILAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IE1WX01BWF9TR19DVCAvIDIsCi0JLm1heF9zZWN0b3JzCQk9IEFUQV9NQVhfU0VDVE9SUywKIAkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKIAkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKQEAgLTQzMCw2ICs0NDUsMzMgQEAKIAkuaG9zdF9zdG9wCQk9IG12X2hvc3Rfc3RvcCwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBtdl9paWVfb3BzID0geworCS5wb3J0X2Rpc2FibGUJCT0gYXRhX3BvcnRfZGlzYWJsZSwKKworCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAorCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKKwkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCisJLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAorCisJLnBoeV9yZXNldAkJPSBtdl9waHlfcmVzZXQsCisKKwkucWNfcHJlcAkJPSBtdl9xY19wcmVwX2lpZSwKKwkucWNfaXNzdWUJCT0gbXZfcWNfaXNzdWUsCisKKwkuZW5nX3RpbWVvdXQJCT0gbXZfZW5nX3RpbWVvdXQsCisKKwkuaXJxX2hhbmRsZXIJCT0gbXZfaW50ZXJydXB0LAorCS5pcnFfY2xlYXIJCT0gbXZfaXJxX2NsZWFyLAorCisJLnNjcl9yZWFkCQk9IG12X3Njcl9yZWFkLAorCS5zY3Jfd3JpdGUJCT0gbXZfc2NyX3dyaXRlLAorCisJLnBvcnRfc3RhcnQJCT0gbXZfcG9ydF9zdGFydCwKKwkucG9ydF9zdG9wCQk9IG12X3BvcnRfc3RvcCwKKwkuaG9zdF9zdG9wCQk9IG12X2hvc3Rfc3RvcCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBtdl9wb3J0X2luZm9bXSA9IHsKIAl7ICAvKiBjaGlwXzUwNHggKi8KIAkJLnNodAkJPSAmbXZfc2h0LApAQCAtNDY3LDYgKzUwOSwyMSBAQAogCQkudWRtYV9tYXNrCT0gMHg3ZiwJLyogdWRtYTAtNiAqLwogCQkucG9ydF9vcHMJPSAmbXY2X29wcywKIAl9LAorCXsgIC8qIGNoaXBfNjA0MiAqLworCQkuc2h0CQk9ICZtdl9zaHQsCisJCS5ob3N0X2ZsYWdzCT0gKE1WX0NPTU1PTl9GTEFHUyB8IE1WXzZYWFhfRkxBR1MpLAorCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkJLnVkbWFfbWFzawk9IDB4N2YsCS8qIHVkbWEwLTYgKi8KKwkJLnBvcnRfb3BzCT0gJm12X2lpZV9vcHMsCisJfSwKKwl7ICAvKiBjaGlwXzcwNDIgKi8KKwkJLnNodAkJPSAmbXZfc2h0LAorCQkuaG9zdF9mbGFncwk9IChNVl9DT01NT05fRkxBR1MgfCBNVl82WFhYX0ZMQUdTIHwKKwkJCQkgICBNVl9GTEFHX0RVQUxfSEMpLAorCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KKwkJLnVkbWFfbWFzawk9IDB4N2YsCS8qIHVkbWEwLTYgKi8KKwkJLnBvcnRfb3BzCT0gJm12X2lpZV9vcHMsCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtdl9wY2lfdGJsW10gPSB7CkBAIC00NzcsNiArNTM0LDcgQEAKIAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg2MDQwKSwgMCwgMCwgY2hpcF82MDR4fSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NjA0MSksIDAsIDAsIGNoaXBfNjA0eH0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDYwNDIpLCAwLCAwLCBjaGlwXzYwNDJ9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg2MDgwKSwgMCwgMCwgY2hpcF82MDh4fSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NjA4MSksIDAsIDAsIGNoaXBfNjA4eH0sCiAKQEAgLTU3Miw4ICs2MzAsOCBAQAogICogICAgICBAYmFzZTogcG9ydCBiYXNlIGFkZHJlc3MKICAqICAgICAgQHBwOiBwb3J0IHByaXZhdGUgZGF0YQogICoKLSAqICAgICAgVmVyaWZ5IHRoZSBsb2NhbCBjYWNoZSBvZiB0aGUgZURNQSBzdGF0ZSBpcyBhY2N1cmF0ZSB3aXRoIGFuCi0gKiAgICAgIGFzc2VydC4KKyAqICAgICAgVmVyaWZ5IHRoZSBsb2NhbCBjYWNoZSBvZiB0aGUgZURNQSBzdGF0ZSBpcyBhY2N1cmF0ZSB3aXRoIGEKKyAqICAgICAgV0FSTl9PTi4KICAqCiAgKiAgICAgIExPQ0tJTkc6CiAgKiAgICAgIEluaGVyaXRlZCBmcm9tIGNhbGxlci4KQEAgLTU4NCwxNSArNjQyLDE1IEBACiAJCXdyaXRlbGZsKEVETUFfRU4sIGJhc2UgKyBFRE1BX0NNRF9PRlMpOwogCQlwcC0+cHBfZmxhZ3MgfD0gTVZfUFBfRkxBR19FRE1BX0VOOwogCX0KLQlhc3NlcnQoRURNQV9FTiAmIHJlYWRsKGJhc2UgKyBFRE1BX0NNRF9PRlMpKTsKKwlXQVJOX09OKCEoRURNQV9FTiAmIHJlYWRsKGJhc2UgKyBFRE1BX0NNRF9PRlMpKSk7CiB9CiAKIC8qKgogICogICAgICBtdl9zdG9wX2RtYSAtIERpc2FibGUgZURNQSBlbmdpbmUKICAqICAgICAgQGFwOiBBVEEgY2hhbm5lbCB0byBtYW5pcHVsYXRlCiAgKgotICogICAgICBWZXJpZnkgdGhlIGxvY2FsIGNhY2hlIG9mIHRoZSBlRE1BIHN0YXRlIGlzIGFjY3VyYXRlIHdpdGggYW4KLSAqICAgICAgYXNzZXJ0LgorICogICAgICBWZXJpZnkgdGhlIGxvY2FsIGNhY2hlIG9mIHRoZSBlRE1BIHN0YXRlIGlzIGFjY3VyYXRlIHdpdGggYQorICogICAgICBXQVJOX09OLgogICoKICAqICAgICAgTE9DS0lORzoKICAqICAgICAgSW5oZXJpdGVkIGZyb20gY2FsbGVyLgpAQCAtNjEwLDcgKzY2OCw3IEBACiAJCXdyaXRlbGZsKEVETUFfRFMsIHBvcnRfbW1pbyArIEVETUFfQ01EX09GUyk7CiAJCXBwLT5wcF9mbGFncyAmPSB+TVZfUFBfRkxBR19FRE1BX0VOOwogCX0gZWxzZSB7Ci0JCWFzc2VydCghKEVETUFfRU4gJiByZWFkbChwb3J0X21taW8gKyBFRE1BX0NNRF9PRlMpKSk7CisJCVdBUk5fT04oRURNQV9FTiAmIHJlYWRsKHBvcnRfbW1pbyArIEVETUFfQ01EX09GUykpOwogICAJfQogCiAJLyogbm93IHByb3Blcmx5IHdhaXQgZm9yIHRoZSBlRE1BIHRvIHN0b3AgKi8KQEAgLTc3Myw2ICs4MzEsMzMgQEAKIAlkbWFfZnJlZV9jb2hlcmVudChkZXYsIE1WX1BPUlRfUFJJVl9ETUFfU1osIHBwLT5jcnBiLCBwcC0+Y3JwYl9kbWEpOwogfQogCitzdGF0aWMgdm9pZCBtdl9lZG1hX2NmZyhzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiwgdm9pZCBfX2lvbWVtICpwb3J0X21taW8pCit7CisJdTMyIGNmZyA9IHJlYWRsKHBvcnRfbW1pbyArIEVETUFfQ0ZHX09GUyk7CisKKwkvKiBzZXQgdXAgbm9uLU5DUSBFRE1BIGNvbmZpZ3VyYXRpb24gKi8KKwljZmcgJj0gfjB4MWY7CQkvKiBjbGVhciBxdWV1ZSBkZXB0aCAqLworCWNmZyAmPSB+RURNQV9DRkdfTkNROwkvKiBjbGVhciBOQ1EgbW9kZSAqLworCWNmZyAmPSB+KDEgPDwgOSk7CS8qIGRpc2FibGUgZXF1ZXVlICovCisKKwlpZiAoSVNfR0VOX0koaHByaXYpKQorCQljZmcgfD0gKDEgPDwgOCk7CS8qIGVuYWIgY29uZmlnIGJ1cnN0IHNpemUgbWFzayAqLworCisJZWxzZSBpZiAoSVNfR0VOX0lJKGhwcml2KSkKKwkJY2ZnIHw9IEVETUFfQ0ZHX1JEX0JSU1RfRVhUIHwgRURNQV9DRkdfV1JfQlVGRl9MRU47CisKKwllbHNlIGlmIChJU19HRU5fSUlFKGhwcml2KSkgeworCQljZmcgfD0gKDEgPDwgMjMpOwkvKiBkaXMgUlggUE0gcG9ydCBtYXNrICovCisJCWNmZyAmPSB+KDEgPDwgMTYpOwkvKiBkaXMgRklTLWJhc2VkIHN3aXRjaGluZyAoZm9yIG5vdykgKi8KKwkJY2ZnICY9IH4oMSA8PCAxOSk7CS8qIGRpcyAxMjgtZW50cnkgcXVldWUgKGZvciBub3c/KSAqLworCQljZmcgfD0gKDEgPDwgMTgpOwkvKiBlbmFiIGVhcmx5IGNvbXBsZXRpb24gKi8KKwkJY2ZnIHw9ICgxIDw8IDE3KTsJLyogZW5hYiBob3N0IHEgY2FjaGUgKi8KKwkJY2ZnIHw9ICgxIDw8IDIyKTsJLyogZW5hYiBjdXR0aHJvdWdoICovCisJfQorCisJd3JpdGVsZmwoY2ZnLCBwb3J0X21taW8gKyBFRE1BX0NGR19PRlMpOworfQorCiAvKioKICAqICAgICAgbXZfcG9ydF9zdGFydCAtIFBvcnQgc3BlY2lmaWMgaW5pdC9zdGFydCByb3V0aW5lLgogICogICAgICBAYXA6IEFUQSBjaGFubmVsIHRvIG1hbmlwdWxhdGUKQEAgLTc4Niw2ICs4NzEsNyBAQAogc3RhdGljIGludCBtdl9wb3J0X3N0YXJ0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gYXAtPmhvc3Rfc2V0LT5kZXY7CisJc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdF9zZXQtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcDsKIAl2b2lkIF9faW9tZW0gKnBvcnRfbW1pbyA9IG12X2FwX2Jhc2UoYXApOwogCXZvaWQgKm1lbTsKQEAgLTgyOSwxNyArOTE1LDI2IEBACiAJcHAtPnNnX3RibCA9IG1lbTsKIAlwcC0+c2dfdGJsX2RtYSA9IG1lbV9kbWE7CiAKLQl3cml0ZWxmbChFRE1BX0NGR19RX0RFUFRIIHwgRURNQV9DRkdfUkRfQlJTVF9FWFQgfAotCQkgRURNQV9DRkdfV1JfQlVGRl9MRU4sIHBvcnRfbW1pbyArIEVETUFfQ0ZHX09GUyk7CisJbXZfZWRtYV9jZmcoaHByaXYsIHBvcnRfbW1pbyk7CiAKIAl3cml0ZWwoKHBwLT5jcnFiX2RtYSA+PiAxNikgPj4gMTYsIHBvcnRfbW1pbyArIEVETUFfUkVRX1FfQkFTRV9ISV9PRlMpOwogCXdyaXRlbGZsKHBwLT5jcnFiX2RtYSAmIEVETUFfUkVRX1FfQkFTRV9MT19NQVNLLAogCQkgcG9ydF9tbWlvICsgRURNQV9SRVFfUV9JTl9QVFJfT0ZTKTsKIAotCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfUkVRX1FfT1VUX1BUUl9PRlMpOwotCXdyaXRlbGZsKDAsIHBvcnRfbW1pbyArIEVETUFfUlNQX1FfSU5fUFRSX09GUyk7CisJaWYgKGhwcml2LT5ocF9mbGFncyAmIE1WX0hQX0VSUkFUQV9YWDQyQTApCisJCXdyaXRlbGZsKHBwLT5jcnFiX2RtYSAmIDB4ZmZmZmZmZmYsCisJCQkgcG9ydF9tbWlvICsgRURNQV9SRVFfUV9PVVRfUFRSX09GUyk7CisJZWxzZQorCQl3cml0ZWxmbCgwLCBwb3J0X21taW8gKyBFRE1BX1JFUV9RX09VVF9QVFJfT0ZTKTsKIAogCXdyaXRlbCgocHAtPmNycGJfZG1hID4+IDE2KSA+PiAxNiwgcG9ydF9tbWlvICsgRURNQV9SU1BfUV9CQVNFX0hJX09GUyk7CisKKwlpZiAoaHByaXYtPmhwX2ZsYWdzICYgTVZfSFBfRVJSQVRBX1hYNDJBMCkKKwkJd3JpdGVsZmwocHAtPmNycGJfZG1hICYgMHhmZmZmZmZmZiwKKwkJCSBwb3J0X21taW8gKyBFRE1BX1JTUF9RX0lOX1BUUl9PRlMpOworCWVsc2UKKwkJd3JpdGVsZmwoMCwgcG9ydF9tbWlvICsgRURNQV9SU1BfUV9JTl9QVFJfT0ZTKTsKKwogCXdyaXRlbGZsKHBwLT5jcnBiX2RtYSAmIEVETUFfUlNQX1FfQkFTRV9MT19NQVNLLAogCQkgcG9ydF9tbWlvICsgRURNQV9SU1BfUV9PVVRfUFRSX09GUyk7CiAKQEAgLTk2MCwyMSArMTA1NSwxOSBAQAogCXN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmOwogCXUxNiBmbGFncyA9IDA7CiAKLSAJaWYgKEFUQV9QUk9UX0RNQSAhPSBxYy0+dGYucHJvdG9jb2wpIHsKKyAJaWYgKEFUQV9QUk9UX0RNQSAhPSBxYy0+dGYucHJvdG9jb2wpCiAJCXJldHVybjsKLQl9CiAKIAkvKiB0aGUgcmVxIHByb2R1Y2VyIGluZGV4IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3ZSByZW1lbWJlciBpdCAqLwotCWFzc2VydCgoKHJlYWRsKG12X2FwX2Jhc2UocWMtPmFwKSArIEVETUFfUkVRX1FfSU5fUFRSX09GUykgPj4KLQkJIEVETUFfUkVRX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0spID09Ci0JICAgICAgIHBwLT5yZXFfcHJvZHVjZXIpOworCVdBUk5fT04oKChyZWFkbChtdl9hcF9iYXNlKHFjLT5hcCkgKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpID4+CisJCSAgRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgIT0KKwkJcHAtPnJlcV9wcm9kdWNlcik7CiAKIAkvKiBGaWxsIGluIGNvbW1hbmQgcmVxdWVzdCBibG9jawogCSAqLwotCWlmICghKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURSkpIHsKKwlpZiAoIShxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpKQogCQlmbGFncyB8PSBDUlFCX0ZMQUdfUkVBRDsKLQl9Ci0JYXNzZXJ0KE1WX01BWF9RX0RFUFRIID4gcWMtPnRhZyk7CisJV0FSTl9PTihNVl9NQVhfUV9ERVBUSCA8PSBxYy0+dGFnKTsKIAlmbGFncyB8PSBxYy0+dGFnIDw8IENSUUJfVEFHX1NISUZUOwogCiAJcHAtPmNycWJbcHAtPnJlcV9wcm9kdWNlcl0uc2dfYWRkciA9CkBAIC0xMDI5LDkgKzExMjIsNzYgQEAKIAltdl9jcnFiX3BhY2tfY21kKGN3KyssIHRmLT5kZXZpY2UsIEFUQV9SRUdfREVWSUNFLCAwKTsKIAltdl9jcnFiX3BhY2tfY21kKGN3KyssIHRmLT5jb21tYW5kLCBBVEFfUkVHX0NNRCwgMSk7CS8qIGxhc3QgKi8KIAotCWlmICghKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSkgeworCWlmICghKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSkKIAkJcmV0dXJuOwotCX0KKwltdl9maWxsX3NnKHFjKTsKK30KKworLyoqCisgKiAgICAgIG12X3FjX3ByZXBfaWllIC0gSG9zdCBzcGVjaWZpYyBjb21tYW5kIHByZXBhcmF0aW9uLgorICogICAgICBAcWM6IHF1ZXVlZCBjb21tYW5kIHRvIHByZXBhcmUKKyAqCisgKiAgICAgIFRoaXMgcm91dGluZSBzaW1wbHkgcmVkaXJlY3RzIHRvIHRoZSBnZW5lcmFsIHB1cnBvc2Ugcm91dGluZQorICogICAgICBpZiBjb21tYW5kIGlzIG5vdCBETUEuICBFbHNlLCBpdCBoYW5kbGVzIHByZXAgb2YgdGhlIENSUUIKKyAqICAgICAgKGNvbW1hbmQgcmVxdWVzdCBibG9jayksIGRvZXMgc29tZSBzYW5pdHkgY2hlY2tpbmcsIGFuZCBjYWxscworICogICAgICB0aGUgU0cgbG9hZCByb3V0aW5lLgorICoKKyAqICAgICAgTE9DS0lORzoKKyAqICAgICAgSW5oZXJpdGVkIGZyb20gY2FsbGVyLgorICovCitzdGF0aWMgdm9pZCBtdl9xY19wcmVwX2lpZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdl9jcnFiX2lpZSAqY3JxYjsKKwlzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZjsKKwl1MzIgZmxhZ3MgPSAwOworCisgCWlmIChBVEFfUFJPVF9ETUEgIT0gcWMtPnRmLnByb3RvY29sKQorCQlyZXR1cm47CisKKwkvKiB0aGUgcmVxIHByb2R1Y2VyIGluZGV4IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB3ZSByZW1lbWJlciBpdCAqLworCVdBUk5fT04oKChyZWFkbChtdl9hcF9iYXNlKHFjLT5hcCkgKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpID4+CisJCSAgRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgIT0KKwkJcHAtPnJlcV9wcm9kdWNlcik7CisKKwkvKiBGaWxsIGluIEdlbiBJSUUgY29tbWFuZCByZXF1ZXN0IGJsb2NrCisJICovCisJaWYgKCEocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKSkKKwkJZmxhZ3MgfD0gQ1JRQl9GTEFHX1JFQUQ7CisKKwlXQVJOX09OKE1WX01BWF9RX0RFUFRIIDw9IHFjLT50YWcpOworCWZsYWdzIHw9IHFjLT50YWcgPDwgQ1JRQl9UQUdfU0hJRlQ7CisKKwljcnFiID0gKHN0cnVjdCBtdl9jcnFiX2lpZSAqKSAmcHAtPmNycWJbcHAtPnJlcV9wcm9kdWNlcl07CisJY3JxYi0+YWRkciA9IGNwdV90b19sZTMyKHBwLT5zZ190YmxfZG1hICYgMHhmZmZmZmZmZik7CisJY3JxYi0+YWRkcl9oaSA9IGNwdV90b19sZTMyKChwcC0+c2dfdGJsX2RtYSA+PiAxNikgPj4gMTYpOworCWNycWItPmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOworCisJdGYgPSAmcWMtPnRmOworCWNycWItPmF0YV9jbWRbMF0gPSBjcHVfdG9fbGUzMigKKwkJCSh0Zi0+Y29tbWFuZCA8PCAxNikgfAorCQkJKHRmLT5mZWF0dXJlIDw8IDI0KQorCQkpOworCWNycWItPmF0YV9jbWRbMV0gPSBjcHVfdG9fbGUzMigKKwkJCSh0Zi0+bGJhbCA8PCAwKSB8CisJCQkodGYtPmxiYW0gPDwgOCkgfAorCQkJKHRmLT5sYmFoIDw8IDE2KSB8CisJCQkodGYtPmRldmljZSA8PCAyNCkKKwkJKTsKKwljcnFiLT5hdGFfY21kWzJdID0gY3B1X3RvX2xlMzIoCisJCQkodGYtPmhvYl9sYmFsIDw8IDApIHwKKwkJCSh0Zi0+aG9iX2xiYW0gPDwgOCkgfAorCQkJKHRmLT5ob2JfbGJhaCA8PCAxNikgfAorCQkJKHRmLT5ob2JfZmVhdHVyZSA8PCAyNCkKKwkJKTsKKwljcnFiLT5hdGFfY21kWzNdID0gY3B1X3RvX2xlMzIoCisJCQkodGYtPm5zZWN0IDw8IDApIHwKKwkJCSh0Zi0+aG9iX25zZWN0IDw8IDgpCisJCSk7CisKKwlpZiAoIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkpCisJCXJldHVybjsKIAltdl9maWxsX3NnKHFjKTsKIH0KIApAQCAtMTA0Nyw3ICsxMjA3LDcgQEAKICAqICAgICAgTE9DS0lORzoKICAqICAgICAgSW5oZXJpdGVkIGZyb20gY2FsbGVyLgogICovCi1zdGF0aWMgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IG12X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBtdl9hcF9iYXNlKHFjLT5hcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBxYy0+YXAtPnByaXZhdGVfZGF0YTsKQEAgLTEwNjUsMTIgKzEyMjUsMTIgQEAKIAlpbl9wdHIgPSByZWFkbChwb3J0X21taW8gKyBFRE1BX1JFUV9RX0lOX1BUUl9PRlMpOwogCiAJLyogdGhlIHJlcSBwcm9kdWNlciBpbmRleCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgd2UgcmVtZW1iZXIgaXQgKi8KLQlhc3NlcnQoKChpbl9wdHIgPj4gRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgPT0KLQkgICAgICAgcHAtPnJlcV9wcm9kdWNlcik7CisJV0FSTl9PTigoKGluX3B0ciA+PiBFRE1BX1JFUV9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSAhPQorCQlwcC0+cmVxX3Byb2R1Y2VyKTsKIAkvKiB1bnRpbCB3ZSBkbyBxdWV1aW5nLCB0aGUgcXVldWUgc2hvdWxkIGJlIGVtcHR5IGF0IHRoaXMgcG9pbnQgKi8KLQlhc3NlcnQoKChpbl9wdHIgPj4gRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgPT0KLQkgICAgICAgKChyZWFkbChwb3J0X21taW8gKyBFRE1BX1JFUV9RX09VVF9QVFJfT0ZTKSA+PgotCQkgRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykpOworCVdBUk5fT04oKChpbl9wdHIgPj4gRURNQV9SRVFfUV9QVFJfU0hJRlQpICYgTVZfTUFYX1FfREVQVEhfTUFTSykgIT0KKwkJKChyZWFkbChwb3J0X21taW8gKyBFRE1BX1JFUV9RX09VVF9QVFJfT0ZTKSA+PgorCQkgIEVETUFfUkVRX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0spKTsKIAogCW12X2luY19xX2luZGV4KCZwcC0+cmVxX3Byb2R1Y2VyKTsJLyogbm93IGluY3IgcHJvZHVjZXIgaW5kZXggKi8KIApAQCAtMTA5MCw3ICsxMjUwLDcgQEAKICAqCiAgKiAgICAgIFRoaXMgcm91dGluZSBpcyBmb3IgdXNlIHdoZW4gdGhlIHBvcnQgaXMgaW4gRE1BIG1vZGUsIHdoZW4gaXQKICAqICAgICAgd2lsbCBiZSB1c2luZyB0aGUgQ1JQQiAoY29tbWFuZCByZXNwb25zZSBibG9jaykgbWV0aG9kIG9mCi0gKiAgICAgIHJldHVybmluZyBjb21tYW5kIGNvbXBsZXRpb24gaW5mb3JtYXRpb24uICBXZSBhc3NlcnQgaW5kaWNlcworICogICAgICByZXR1cm5pbmcgY29tbWFuZCBjb21wbGV0aW9uIGluZm9ybWF0aW9uLiAgV2UgY2hlY2sgaW5kaWNlcwogICogICAgICBhcmUgZ29vZCwgZ3JhYiBzdGF0dXMsIGFuZCBidW1wIHRoZSByZXNwb25zZSBjb25zdW1lciBpbmRleCB0bwogICogICAgICBwcm92ZSB0aGF0IHdlJ3JlIHVwIHRvIGRhdGUuCiAgKgpAQCAtMTEwMiwyMCArMTI2MiwyMyBAQAogCXZvaWQgX19pb21lbSAqcG9ydF9tbWlvID0gbXZfYXBfYmFzZShhcCk7CiAJc3RydWN0IG12X3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOwogCXUzMiBvdXRfcHRyOworCXU4IGF0YV9zdGF0dXM7CiAKIAlvdXRfcHRyID0gcmVhZGwocG9ydF9tbWlvICsgRURNQV9SU1BfUV9PVVRfUFRSX09GUyk7CiAKIAkvKiB0aGUgcmVzcG9uc2UgY29uc3VtZXIgaW5kZXggc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHdlIHJlbWVtYmVyIGl0ICovCi0JYXNzZXJ0KCgob3V0X3B0ciA+PiBFRE1BX1JTUF9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSA9PQotCSAgICAgICBwcC0+cnNwX2NvbnN1bWVyKTsKKwlXQVJOX09OKCgob3V0X3B0ciA+PiBFRE1BX1JTUF9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSAhPQorCQlwcC0+cnNwX2NvbnN1bWVyKTsKKworCWF0YV9zdGF0dXMgPSBwcC0+Y3JwYltwcC0+cnNwX2NvbnN1bWVyXS5mbGFncyA+PiBDUlBCX0ZMQUdfU1RBVFVTX1NISUZUOwogCiAJLyogaW5jcmVtZW50IG91ciBjb25zdW1lciBpbmRleC4uLiAqLwogCXBwLT5yc3BfY29uc3VtZXIgPSBtdl9pbmNfcV9pbmRleCgmcHAtPnJzcF9jb25zdW1lcik7CiAKIAkvKiBhbmQsIHVudGlsIHdlIGRvIE5DUSwgdGhlcmUgc2hvdWxkIG9ubHkgYmUgMSBDUlBCIHdhaXRpbmcgKi8KLQlhc3NlcnQoKChyZWFkbChwb3J0X21taW8gKyBFRE1BX1JTUF9RX0lOX1BUUl9PRlMpID4+Ci0JCSBFRE1BX1JTUF9RX1BUUl9TSElGVCkgJiBNVl9NQVhfUV9ERVBUSF9NQVNLKSA9PQotCSAgICAgICBwcC0+cnNwX2NvbnN1bWVyKTsKKwlXQVJOX09OKCgocmVhZGwocG9ydF9tbWlvICsgRURNQV9SU1BfUV9JTl9QVFJfT0ZTKSA+PgorCQkgIEVETUFfUlNQX1FfUFRSX1NISUZUKSAmIE1WX01BWF9RX0RFUFRIX01BU0spICE9CisJCXBwLT5yc3BfY29uc3VtZXIpOwogCiAJLyogd3JpdGUgb3V0IG91ciBpbmMnZCBjb25zdW1lciBpbmRleCBzbyBFRE1BIGtub3dzIHdlJ3JlIGNhdWdodCB1cCAqLwogCW91dF9wdHIgJj0gRURNQV9SU1BfUV9CQVNFX0xPX01BU0s7CkBAIC0xMTIzLDcgKzEyODYsNyBAQAogCXdyaXRlbGZsKG91dF9wdHIsIHBvcnRfbW1pbyArIEVETUFfUlNQX1FfT1VUX1BUUl9PRlMpOwogCiAJLyogUmV0dXJuIEFUQSBzdGF0dXMgcmVnaXN0ZXIgZm9yIGNvbXBsZXRlZCBDUlBCICovCi0JcmV0dXJuIChwcC0+Y3JwYltwcC0+cnNwX2NvbnN1bWVyXS5mbGFncyA+PiBDUlBCX0ZMQUdfU1RBVFVTX1NISUZUKTsKKwlyZXR1cm4gYXRhX3N0YXR1czsKIH0KIAogLyoqCkBAIC0xMTkyLDcgKzEzNTUsNiBAQAogCXUzMiBoY19pcnFfY2F1c2U7CiAJaW50IHNoaWZ0LCBwb3J0LCBwb3J0MCwgaGFyZF9wb3J0LCBoYW5kbGVkOwogCXVuc2lnbmVkIGludCBlcnJfbWFzazsKLQl1OCBhdGFfc3RhdHVzID0gMDsKIAogCWlmIChoYyA9PSAwKSB7CiAJCXBvcnQwID0gMDsKQEAgLTEyMTAsNiArMTM3Miw3IEBACiAJCWhjLHJlbGV2YW50LGhjX2lycV9jYXVzZSk7CiAKIAlmb3IgKHBvcnQgPSBwb3J0MDsgcG9ydCA8IHBvcnQwICsgTVZfUE9SVFNfUEVSX0hDOyBwb3J0KyspIHsKKwkJdTggYXRhX3N0YXR1cyA9IDA7CiAJCWFwID0gaG9zdF9zZXQtPnBvcnRzW3BvcnRdOwogCQloYXJkX3BvcnQgPSBwb3J0ICYgTVZfUE9SVF9NQVNLOwkvKiByYW5nZSAwLTMgKi8KIAkJaGFuZGxlZCA9IDA7CS8qIGVuc3VyZSBhdGFfc3RhdHVzIGlzIHNldCBpZiBoYW5kbGVkKysgKi8KQEAgLTE2ODEsNiArMTg0NCwxMiBAQAogCW0yIHw9IGhwcml2LT5zaWduYWxbcG9ydF0ucHJlOwogCW0yICY9IH4oMSA8PCAxNik7CiAKKwkvKiBhY2NvcmRpbmcgdG8gbXZTYXRhIDMuNi4xLCBzb21lIElJRSB2YWx1ZXMgYXJlIGZpeGVkICovCisJaWYgKElTX0dFTl9JSUUoaHByaXYpKSB7CisJCW0yICY9IH4weEMzMEZGMDFGOworCQltMiB8PSAweDAwMDA5MDBGOworCX0KKwogCXdyaXRlbChtMiwgcG9ydF9tbWlvICsgUEhZX01PREUyKTsKIH0KIApAQCAtMTg0Niw3ICsyMDE1LDYgQEAKIHN0YXRpYyB2b2lkIG12X2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogRW50ZXJpbmcgbXZfZW5nX3RpbWVvdXRcbiIsYXAtPmlkKTsKIAlEUFJJTlRLKCJBbGwgcmVncyBAIHN0YXJ0IG9mIGVuZ190aW1lb3V0XG4iKTsKQEAgLTE4NjEsMjIgKzIwMjksOCBAQAogCW12X2Vycl9pbnRyKGFwKTsKIAltdl9zdG9wX2FuZF9yZXNldChhcCk7CiAKLQlpZiAoIXFjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IEJVRzogdGltZW91dCB3aXRob3V0IGNvbW1hbmRcbiIsCi0JCSAgICAgICBhcC0+aWQpOwotCX0gZWxzZSB7Ci0JCS8qIGhhY2sgYWxlcnQhICBXZSBjYW5ub3QgdXNlIHRoZSBzdXBwbGllZCBjb21wbGV0aW9uCi0JIAkgKiBmdW5jdGlvbiBmcm9tIGluc2lkZSB0aGUgLT5laF9zdHJhdGVneV9oYW5kbGVyKCkgdGhyZWFkLgotCSAJICogbGliYXRhIGlzIHRoZSBvbmx5IHVzZXIgb2YgLT5laF9zdHJhdGVneV9oYW5kbGVyKCkgaW4KLQkgCSAqIGFueSBrZXJuZWwsIHNvIHRoZSBkZWZhdWx0IHNjc2lfZG9uZSgpIGFzc3VtZXMgaXQgaXMKLQkgCSAqIG5vdCBiZWluZyBjYWxsZWQgZnJvbSB0aGUgU0NTSSBFSC4KLQkgCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7Ci0JCXFjLT5zY3NpZG9uZSA9IHNjc2lfZmluaXNoX2NvbW1hbmQ7Ci0JCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfT1RIRVI7Ci0JCWF0YV9xY19jb21wbGV0ZShxYyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwLT5ob3N0X3NldC0+bG9jaywgZmxhZ3MpOwotCX0KKwlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX1RJTUVPVVQ7CisJYXRhX2VoX3FjX2NvbXBsZXRlKHFjKTsKIH0KIAogLyoqCkBAIC0xOTk1LDYgKzIxNDksMjcgQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgY2hpcF83MDQyOgorCWNhc2UgY2hpcF82MDQyOgorCQlocHJpdi0+b3BzID0gJm12Nnh4eF9vcHM7CisKKwkJaHBfZmxhZ3MgfD0gTVZfSFBfR0VOX0lJRTsKKworCQlzd2l0Y2ggKHJldl9pZCkgeworCQljYXNlIDB4MDoKKwkJCWhwX2ZsYWdzIHw9IE1WX0hQX0VSUkFUQV9YWDQyQTA7CisJCQlicmVhazsKKwkJY2FzZSAweDE6CisJCQlocF9mbGFncyB8PSBNVl9IUF9FUlJBVEFfNjBYMUMwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwKKwkJCSAgICJBcHBseWluZyA2MFgxQzAgd29ya2Fyb3VuZHMgdG8gdW5rbm93biByZXZcbiIpOworCQkJaHBfZmxhZ3MgfD0gTVZfSFBfRVJSQVRBXzYwWDFDMDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEJVRzogaW52YWxpZCBib2FyZCBpbmRleCAldVxuIiwgYm9hcmRfaWR4KTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbnYuYwppbmRleCBiYmJiNTVlLi5mNzdiZjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKQEAgLTI5LDM0ICsyOSw2IEBACiAgKiAgTlYtc3BlY2lmaWMgZGV0YWlscyBzdWNoIGFzIHJlZ2lzdGVyIG9mZnNldHMsIFNBVEEgcGh5IGxvY2F0aW9uLAogICogIGhvdHBsdWcgaW5mbywgZXRjLgogICoKLSAqICAwLjEwCi0gKiAgICAgLSBGaXhlZCBzcHVyaW91cyBpbnRlcnJ1cHRzIGlzc3VlIHNlZW4gd2l0aCB0aGUgTWF4dG9yIDZINTAwRjAgNTAwR0IKLSAqICAgICAgIGRyaXZlLiAgQWxzbyBtYWRlIHRoZSBjaGVja19ob3RwbHVnKCkgY2FsbGJhY2tzIHJldHVybiB3aGV0aGVyIHRoZXJlCi0gKiAgICAgICB3YXMgYSBob3RwbHVnIGludGVycnVwdCBvciBub3QuICBUaGlzIHdhcyBub3QgdGhlIHNvdXJjZSBvZiB0aGUKLSAqICAgICAgIHNwdXJpb3VzIGludGVycnVwdHMsIGJ1dCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gYW55d2F5LgotICoKLSAqICAwLjA5Ci0gKiAgICAgLSBGaXhlZCBidWcgaW50cm9kdWNlZCBieSAwLjA4J3MgTUNQNTEgYW5kIE1DUDU1IHN1cHBvcnQuCi0gKgotICogIDAuMDgKLSAqICAgICAtIEFkZGVkIHN1cHBvcnQgZm9yIE1DUDUxIGFuZCBNQ1A1NS4KLSAqCi0gKiAgMC4wNwotICogICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgUkFJRCBjbGFzcyBjb2RlLgotICoKLSAqICAwLjA2Ci0gKiAgICAgLSBBZGRlZCBnZW5lcmljIFNBVEEgc3VwcG9ydCBieSB1c2luZyBhIHBjaV9kZXZpY2VfaWQgdGhhdCBmaWx0ZXJzIG9uCi0gKiAgICAgICB0aGUgSURFIHN0b3JhZ2UgY2xhc3MgY29kZS4KLSAqCi0gKiAgMC4wMwotICogICAgIC0gRml4ZWQgYSBidWcgd2hlcmUgdGhlIGhvdHBsdWcgaGFuZGxlcnMgZm9yIG5vbi1DSzgwNC9NQ1AwNCB3ZXJlIHVzaW5nCi0gKiAgICAgICBtbWlvX2Jhc2UsIHdoaWNoIGlzIG9ubHkgc2V0IGZvciB0aGUgQ0s4MDQvTUNQMDQgY2FzZS4KLSAqCi0gKiAgMC4wMgotICogICAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgQ0s4MDQgU0FUQSBjb250cm9sbGVyLgotICoKLSAqICAwLjAxCi0gKiAgICAgLSBJbml0aWFsIHJldmlzaW9uLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTc0LDUzICs0Niw1NSBAQAogI2RlZmluZSBEUlZfTkFNRQkJCSJzYXRhX252IgogI2RlZmluZSBEUlZfVkVSU0lPTgkJCSIwLjgiCiAKLSNkZWZpbmUgTlZfUE9SVFMJCQkyCi0jZGVmaW5lIE5WX1BJT19NQVNLCQkJMHgxZgotI2RlZmluZSBOVl9NV0RNQV9NQVNLCQkJMHgwNwotI2RlZmluZSBOVl9VRE1BX01BU0sJCQkweDdmCi0jZGVmaW5lIE5WX1BPUlQwX1NDUl9SRUdfT0ZGU0VUCQkweDAwCi0jZGVmaW5lIE5WX1BPUlQxX1NDUl9SRUdfT0ZGU0VUCQkweDQwCitlbnVtIHsKKwlOVl9QT1JUUwkJCT0gMiwKKwlOVl9QSU9fTUFTSwkJCT0gMHgxZiwKKwlOVl9NV0RNQV9NQVNLCQkJPSAweDA3LAorCU5WX1VETUFfTUFTSwkJCT0gMHg3ZiwKKwlOVl9QT1JUMF9TQ1JfUkVHX09GRlNFVAkJPSAweDAwLAorCU5WX1BPUlQxX1NDUl9SRUdfT0ZGU0VUCQk9IDB4NDAsCiAKLSNkZWZpbmUgTlZfSU5UX1NUQVRVUwkJCTB4MTAKLSNkZWZpbmUgTlZfSU5UX1NUQVRVU19DSzgwNAkJMHg0NDAKLSNkZWZpbmUgTlZfSU5UX1NUQVRVU19QREVWX0lOVAkJMHgwMQotI2RlZmluZSBOVl9JTlRfU1RBVFVTX1BERVZfUE0JCTB4MDIKLSNkZWZpbmUgTlZfSU5UX1NUQVRVU19QREVWX0FEREVECTB4MDQKLSNkZWZpbmUgTlZfSU5UX1NUQVRVU19QREVWX1JFTU9WRUQJMHgwOAotI2RlZmluZSBOVl9JTlRfU1RBVFVTX1NERVZfSU5UCQkweDEwCi0jZGVmaW5lIE5WX0lOVF9TVEFUVVNfU0RFVl9QTQkJMHgyMAotI2RlZmluZSBOVl9JTlRfU1RBVFVTX1NERVZfQURERUQJMHg0MAotI2RlZmluZSBOVl9JTlRfU1RBVFVTX1NERVZfUkVNT1ZFRAkweDgwCi0jZGVmaW5lIE5WX0lOVF9TVEFUVVNfUERFVl9IT1RQTFVHCShOVl9JTlRfU1RBVFVTX1BERVZfQURERUQgfCBcCi0JCQkJCU5WX0lOVF9TVEFUVVNfUERFVl9SRU1PVkVEKQotI2RlZmluZSBOVl9JTlRfU1RBVFVTX1NERVZfSE9UUExVRwkoTlZfSU5UX1NUQVRVU19TREVWX0FEREVEIHwgXAotCQkJCQlOVl9JTlRfU1RBVFVTX1NERVZfUkVNT1ZFRCkKLSNkZWZpbmUgTlZfSU5UX1NUQVRVU19IT1RQTFVHCQkoTlZfSU5UX1NUQVRVU19QREVWX0hPVFBMVUcgfCBcCi0JCQkJCU5WX0lOVF9TVEFUVVNfU0RFVl9IT1RQTFVHKQorCU5WX0lOVF9TVEFUVVMJCQk9IDB4MTAsCisJTlZfSU5UX1NUQVRVU19DSzgwNAkJPSAweDQ0MCwKKwlOVl9JTlRfU1RBVFVTX1BERVZfSU5UCQk9IDB4MDEsCisJTlZfSU5UX1NUQVRVU19QREVWX1BNCQk9IDB4MDIsCisJTlZfSU5UX1NUQVRVU19QREVWX0FEREVECT0gMHgwNCwKKwlOVl9JTlRfU1RBVFVTX1BERVZfUkVNT1ZFRAk9IDB4MDgsCisJTlZfSU5UX1NUQVRVU19TREVWX0lOVAkJPSAweDEwLAorCU5WX0lOVF9TVEFUVVNfU0RFVl9QTQkJPSAweDIwLAorCU5WX0lOVF9TVEFUVVNfU0RFVl9BRERFRAk9IDB4NDAsCisJTlZfSU5UX1NUQVRVU19TREVWX1JFTU9WRUQJPSAweDgwLAorCU5WX0lOVF9TVEFUVVNfUERFVl9IT1RQTFVHCT0gKE5WX0lOVF9TVEFUVVNfUERFVl9BRERFRCB8CisJCQkJCSAgIE5WX0lOVF9TVEFUVVNfUERFVl9SRU1PVkVEKSwKKwlOVl9JTlRfU1RBVFVTX1NERVZfSE9UUExVRwk9IChOVl9JTlRfU1RBVFVTX1NERVZfQURERUQgfAorCQkJCQkgICBOVl9JTlRfU1RBVFVTX1NERVZfUkVNT1ZFRCksCisJTlZfSU5UX1NUQVRVU19IT1RQTFVHCQk9IChOVl9JTlRfU1RBVFVTX1BERVZfSE9UUExVRyB8CisJCQkJCSAgIE5WX0lOVF9TVEFUVVNfU0RFVl9IT1RQTFVHKSwKIAotI2RlZmluZSBOVl9JTlRfRU5BQkxFCQkJMHgxMQotI2RlZmluZSBOVl9JTlRfRU5BQkxFX0NLODA0CQkweDQ0MQotI2RlZmluZSBOVl9JTlRfRU5BQkxFX1BERVZfTUFTSwkJMHgwMQotI2RlZmluZSBOVl9JTlRfRU5BQkxFX1BERVZfUE0JCTB4MDIKLSNkZWZpbmUgTlZfSU5UX0VOQUJMRV9QREVWX0FEREVECTB4MDQKLSNkZWZpbmUgTlZfSU5UX0VOQUJMRV9QREVWX1JFTU9WRUQJMHgwOAotI2RlZmluZSBOVl9JTlRfRU5BQkxFX1NERVZfTUFTSwkJMHgxMAotI2RlZmluZSBOVl9JTlRfRU5BQkxFX1NERVZfUE0JCTB4MjAKLSNkZWZpbmUgTlZfSU5UX0VOQUJMRV9TREVWX0FEREVECTB4NDAKLSNkZWZpbmUgTlZfSU5UX0VOQUJMRV9TREVWX1JFTU9WRUQJMHg4MAotI2RlZmluZSBOVl9JTlRfRU5BQkxFX1BERVZfSE9UUExVRwkoTlZfSU5UX0VOQUJMRV9QREVWX0FEREVEIHwgXAotCQkJCQlOVl9JTlRfRU5BQkxFX1BERVZfUkVNT1ZFRCkKLSNkZWZpbmUgTlZfSU5UX0VOQUJMRV9TREVWX0hPVFBMVUcJKE5WX0lOVF9FTkFCTEVfU0RFVl9BRERFRCB8IFwKLQkJCQkJTlZfSU5UX0VOQUJMRV9TREVWX1JFTU9WRUQpCi0jZGVmaW5lIE5WX0lOVF9FTkFCTEVfSE9UUExVRwkJKE5WX0lOVF9FTkFCTEVfUERFVl9IT1RQTFVHIHwgXAotCQkJCQlOVl9JTlRfRU5BQkxFX1NERVZfSE9UUExVRykKKwlOVl9JTlRfRU5BQkxFCQkJPSAweDExLAorCU5WX0lOVF9FTkFCTEVfQ0s4MDQJCT0gMHg0NDEsCisJTlZfSU5UX0VOQUJMRV9QREVWX01BU0sJCT0gMHgwMSwKKwlOVl9JTlRfRU5BQkxFX1BERVZfUE0JCT0gMHgwMiwKKwlOVl9JTlRfRU5BQkxFX1BERVZfQURERUQJPSAweDA0LAorCU5WX0lOVF9FTkFCTEVfUERFVl9SRU1PVkVECT0gMHgwOCwKKwlOVl9JTlRfRU5BQkxFX1NERVZfTUFTSwkJPSAweDEwLAorCU5WX0lOVF9FTkFCTEVfU0RFVl9QTQkJPSAweDIwLAorCU5WX0lOVF9FTkFCTEVfU0RFVl9BRERFRAk9IDB4NDAsCisJTlZfSU5UX0VOQUJMRV9TREVWX1JFTU9WRUQJPSAweDgwLAorCU5WX0lOVF9FTkFCTEVfUERFVl9IT1RQTFVHCT0gKE5WX0lOVF9FTkFCTEVfUERFVl9BRERFRCB8CisJCQkJCSAgIE5WX0lOVF9FTkFCTEVfUERFVl9SRU1PVkVEKSwKKwlOVl9JTlRfRU5BQkxFX1NERVZfSE9UUExVRwk9IChOVl9JTlRfRU5BQkxFX1NERVZfQURERUQgfAorCQkJCQkgICBOVl9JTlRfRU5BQkxFX1NERVZfUkVNT1ZFRCksCisJTlZfSU5UX0VOQUJMRV9IT1RQTFVHCQk9IChOVl9JTlRfRU5BQkxFX1BERVZfSE9UUExVRyB8CisJCQkJCSAgIE5WX0lOVF9FTkFCTEVfU0RFVl9IT1RQTFVHKSwKIAotI2RlZmluZSBOVl9JTlRfQ09ORklHCQkJMHgxMgotI2RlZmluZSBOVl9JTlRfQ09ORklHX01FVEhECQkweDAxIC8vIDAgPSBJTlQsIDEgPSBTTUkKKwlOVl9JTlRfQ09ORklHCQkJPSAweDEyLAorCU5WX0lOVF9DT05GSUdfTUVUSEQJCT0gMHgwMSwgLy8gMCA9IElOVCwgMSA9IFNNSQogCi0vLyBGb3IgUENJIGNvbmZpZyByZWdpc3RlciAyMAotI2RlZmluZSBOVl9NQ1BfU0FUQV9DRkdfMjAJCTB4NTAKLSNkZWZpbmUgTlZfTUNQX1NBVEFfQ0ZHXzIwX1NBVEFfU1BBQ0VfRU4JMHgwNAorCS8vIEZvciBQQ0kgY29uZmlnIHJlZ2lzdGVyIDIwCisJTlZfTUNQX1NBVEFfQ0ZHXzIwCQk9IDB4NTAsCisJTlZfTUNQX1NBVEFfQ0ZHXzIwX1NBVEFfU1BBQ0VfRU4gPSAweDA0LAorfTsKIAogc3RhdGljIGludCBudl9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogc3RhdGljIGlycXJldHVybl90IG52X2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlLApAQCAtMTc1LDggKzE0OSw2IEBACiAJeyAwLCB9IC8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwogCi0jZGVmaW5lIE5WX0hPU1RfRkxBR1NfU0NSX01NSU8JMHgwMDAwMDAwMQotCiBzdHJ1Y3QgbnZfaG9zdF9kZXNjCiB7CiAJZW51bSBudl9ob3N0X3R5cGUJaG9zdF90eXBlOwpAQCAtMjMzLDcgKzIwNSw2IEBACiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5tYXhfc2VjdG9ycwkJPSBBVEFfTUFYX1NFQ1RPUlMsCiAJLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCiAJLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCkBAIC0zMzMsMzYgKzMwNCwyMyBAQAogCiBzdGF0aWMgdTMyIG52X3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKQogewotCXN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0ID0gYXAtPmhvc3Rfc2V0OwotCXN0cnVjdCBudl9ob3N0ICpob3N0ID0gaG9zdF9zZXQtPnByaXZhdGVfZGF0YTsKLQogCWlmIChzY19yZWcgPiBTQ1JfQ09OVFJPTCkKIAkJcmV0dXJuIDB4ZmZmZmZmZmZVOwogCi0JaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBOVl9IT1NUX0ZMQUdTX1NDUl9NTUlPKQotCQlyZXR1cm4gcmVhZGwoKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoc2NfcmVnICogNCkpOwotCWVsc2UKLQkJcmV0dXJuIGlubChhcC0+aW9hZGRyLnNjcl9hZGRyICsgKHNjX3JlZyAqIDQpKTsKKwlyZXR1cm4gaW9yZWFkMzIoKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoc2NfcmVnICogNCkpOwogfQogCiBzdGF0aWMgdm9pZCBudl9zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IGF0YV9ob3N0X3NldCAqaG9zdF9zZXQgPSBhcC0+aG9zdF9zZXQ7Ci0Jc3RydWN0IG52X2hvc3QgKmhvc3QgPSBob3N0X3NldC0+cHJpdmF0ZV9kYXRhOwotCiAJaWYgKHNjX3JlZyA+IFNDUl9DT05UUk9MKQogCQlyZXR1cm47CiAKLQlpZiAoaG9zdC0+aG9zdF9mbGFncyAmIE5WX0hPU1RfRkxBR1NfU0NSX01NSU8pCi0JCXdyaXRlbCh2YWwsICh2b2lkIF9faW9tZW0gKilhcC0+aW9hZGRyLnNjcl9hZGRyICsgKHNjX3JlZyAqIDQpKTsKLQllbHNlCi0JCW91dGwodmFsLCBhcC0+aW9hZGRyLnNjcl9hZGRyICsgKHNjX3JlZyAqIDQpKTsKKwlpb3dyaXRlMzIodmFsLCAodm9pZCBfX2lvbWVtICopYXAtPmlvYWRkci5zY3JfYWRkciArIChzY19yZWcgKiA0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIG52X2hvc3Rfc3RvcCAoc3RydWN0IGF0YV9ob3N0X3NldCAqaG9zdF9zZXQpCiB7CiAJc3RydWN0IG52X2hvc3QgKmhvc3QgPSBob3N0X3NldC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihob3N0X3NldC0+ZGV2KTsKIAogCS8vIERpc2FibGUgaG90cGx1ZyBldmVudCBpbnRlcnJ1cHRzLgogCWlmIChob3N0LT5ob3N0X2Rlc2MtPmRpc2FibGVfaG90cGx1ZykKQEAgLTM3MCw4ICszMjgsNyBAQAogCiAJa2ZyZWUoaG9zdCk7CiAKLQlpZiAoaG9zdF9zZXQtPm1taW9fYmFzZSkKLQkJcGNpX2lvdW5tYXAocGRldiwgaG9zdF9zZXQtPm1taW9fYmFzZSk7CisJYXRhX3BjaV9ob3N0X3N0b3AoaG9zdF9zZXQpOwogfQogCiBzdGF0aWMgaW50IG52X2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTM4Myw2ICszNDAsNyBAQAogCWludCBwY2lfZGV2X2J1c3kgPSAwOwogCWludCByYzsKIAl1MzIgYmFyOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhpcyBpcyBhIFNBVEEgY29udHJvbGxlciBieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGJhcnMKICAgICAgICAgLy8gKE5WSURJQSBTQVRBIGNvbnRyb2xsZXJzIHdpbGwgYWx3YXlzIGhhdmUgc2l4IGJhcnMpLiAgT3RoZXJ3aXNlLApAQCAtNDI3LDMyICszODUsMTcgQEAKIAogCXByb2JlX2VudC0+cHJpdmF0ZV9kYXRhID0gaG9zdDsKIAotCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgNSkgJiBJT1JFU09VUkNFX01FTSkKLQkJaG9zdC0+aG9zdF9mbGFncyB8PSBOVl9IT1NUX0ZMQUdTX1NDUl9NTUlPOwotCi0JaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBOVl9IT1NUX0ZMQUdTX1NDUl9NTUlPKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYmFzZTsKLQotCQlwcm9iZV9lbnQtPm1taW9fYmFzZSA9IHBjaV9pb21hcChwZGV2LCA1LCAwKTsKLQkJaWYgKHByb2JlX2VudC0+bW1pb19iYXNlID09IE5VTEwpIHsKLQkJCXJjID0gLUVJTzsKLQkJCWdvdG8gZXJyX291dF9mcmVlX2hvc3Q7Ci0JCX0KLQotCQliYXNlID0gKHVuc2lnbmVkIGxvbmcpcHJvYmVfZW50LT5tbWlvX2Jhc2U7Ci0KLQkJcHJvYmVfZW50LT5wb3J0WzBdLnNjcl9hZGRyID0KLQkJCWJhc2UgKyBOVl9QT1JUMF9TQ1JfUkVHX09GRlNFVDsKLQkJcHJvYmVfZW50LT5wb3J0WzFdLnNjcl9hZGRyID0KLQkJCWJhc2UgKyBOVl9QT1JUMV9TQ1JfUkVHX09GRlNFVDsKLQl9IGVsc2UgewotCi0JCXByb2JlX2VudC0+cG9ydFswXS5zY3JfYWRkciA9Ci0JCQlwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNSkgfCBOVl9QT1JUMF9TQ1JfUkVHX09GRlNFVDsKLQkJcHJvYmVfZW50LT5wb3J0WzFdLnNjcl9hZGRyID0KLQkJCXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA1KSB8IE5WX1BPUlQxX1NDUl9SRUdfT0ZGU0VUOworCXByb2JlX2VudC0+bW1pb19iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDUsIDApOworCWlmICghcHJvYmVfZW50LT5tbWlvX2Jhc2UpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycl9vdXRfZnJlZV9ob3N0OwogCX0KIAorCWJhc2UgPSAodW5zaWduZWQgbG9uZylwcm9iZV9lbnQtPm1taW9fYmFzZTsKKworCXByb2JlX2VudC0+cG9ydFswXS5zY3JfYWRkciA9IGJhc2UgKyBOVl9QT1JUMF9TQ1JfUkVHX09GRlNFVDsKKwlwcm9iZV9lbnQtPnBvcnRbMV0uc2NyX2FkZHIgPSBiYXNlICsgTlZfUE9SVDFfU0NSX1JFR19PRkZTRVQ7CisKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXJjID0gYXRhX2RldmljZV9hZGQocHJvYmVfZW50KTsKQEAgLTQ2OCw4ICs0MTEsNyBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0X2lvdW5tYXA6Ci0JaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBOVl9IT1NUX0ZMQUdTX1NDUl9NTUlPKQotCQlwY2lfaW91bm1hcChwZGV2LCBwcm9iZV9lbnQtPm1taW9fYmFzZSk7CisJcGNpX2lvdW5tYXAocGRldiwgcHJvYmVfZW50LT5tbWlvX2Jhc2UpOwogZXJyX291dF9mcmVlX2hvc3Q6CiAJa2ZyZWUoaG9zdCk7CiBlcnJfb3V0X2ZyZWVfZW50OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCmluZGV4IGIwYjBhNjkuLmNjOTI4YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJzYXRhX3Byb21pc2UuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9wcm9taXNlIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMDQiCiAKIAogZW51bSB7CkBAIC01OCw2ICs1OCw3IEBACiAJUERDX0dMT0JBTF9DVEwJCT0gMHg0OCwgLyogR2xvYmFsIGNvbnRyb2wvc3RhdHVzIChwZXIgcG9ydCkgKi8KIAlQRENfQ1RMU1RBVAkJPSAweDYwLAkvKiBJREUgY29udHJvbCBhbmQgc3RhdHVzIChwZXIgcG9ydCkgKi8KIAlQRENfU0FUQV9QTFVHX0NTUgk9IDB4NkMsIC8qIFNBVEEgUGx1ZyBjb250cm9sL3N0YXR1cyByZWcgKi8KKwlQREMyX1NBVEFfUExVR19DU1IJPSAweDYwLCAvKiBTQVRBSUkgUGx1ZyBjb250cm9sL3N0YXR1cyByZWcgKi8KIAlQRENfU0xFV19DVEwJCT0gMHg0NzAsIC8qIHNsZXcgcmF0ZSBjb250cm9sIHJlZyAqLwogCiAJUERDX0VSUl9NQVNLCQk9ICgxPDwxOSkgfCAoMTw8MjApIHwgKDE8PDIxKSB8ICgxPDwyMikgfApAQCAtNjcsOCArNjgsMTAgQEAKIAlib2FyZF8yMDMxOQkJPSAxLAkvKiBGYXN0VHJhayBTMTUwIFRYNCAqLwogCWJvYXJkXzIwNjE5CQk9IDIsCS8qIEZhc3RUcmFrIFRYNDAwMCAqLwogCWJvYXJkXzIwNzcxCQk9IDMsCS8qIEZhc3RUcmFrIFRYMjMwMCAqLworCWJvYXJkXzIwNTd4CQk9IDQsCS8qIFNBVEFJSTE1MCBUeDJwbHVzICovCisJYm9hcmRfNDA1MTgJCT0gNSwJLyogU0FUQUlJMTUwIFR4NCAqLwogCi0JUERDX0hBU19QQVRBCQk9ICgxIDw8IDEpLCAvKiBQREMyMDM3NSBoYXMgUEFUQSAqLworCVBEQ19IQVNfUEFUQQkJPSAoMSA8PCAxKSwgLyogUERDMjAzNzUvMjA1NzUgaGFzIFBBVEEgKi8KIAogCVBEQ19SRVNFVAkJPSAoMSA8PCAxMSksIC8qIEhETUEgcmVzZXQgKi8KIApAQCAtODIsNiArODUsMTAgQEAKIAlkbWFfYWRkcl90CQlwa3RfZG1hOwogfTsKIAorc3RydWN0IHBkY19ob3N0X3ByaXYgeworCWludAkJCWhvdHBsdWdfb2Zmc2V0OworfTsKKwogc3RhdGljIHUzMiBwZGNfc2F0YV9zY3JfcmVhZCAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZyk7CiBzdGF0aWMgdm9pZCBwZGNfc2F0YV9zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwogc3RhdGljIGludCBwZGNfYXRhX2luaXRfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CkBAIC05NSw3ICsxMDIsOCBAQAogc3RhdGljIHZvaWQgcGRjX3RmX2xvYWRfbW1pbyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0Zik7CiBzdGF0aWMgdm9pZCBwZGNfZXhlY19jb21tYW5kX21taW8oc3RydWN0IGF0YV9wb3J0ICphcCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOwogc3RhdGljIHZvaWQgcGRjX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyBpbnQgcGRjX3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitzdGF0aWMgdW5zaWduZWQgaW50IHBkY19xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHZvaWQgcGRjX2hvc3Rfc3RvcChzdHJ1Y3QgYXRhX2hvc3Rfc2V0ICpob3N0X3NldCk7CiAKIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgcGRjX2F0YV9zaHQgPSB7CkBAIC0xMDcsNyArMTE1LDYgQEAKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLm1heF9zZWN0b3JzCQk9IEFUQV9NQVhfU0VDVE9SUywKIAkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKIAkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKQEAgLTEzNyw3ICsxNDQsNyBAQAogCS5zY3Jfd3JpdGUJCT0gcGRjX3NhdGFfc2NyX3dyaXRlLAogCS5wb3J0X3N0YXJ0CQk9IHBkY19wb3J0X3N0YXJ0LAogCS5wb3J0X3N0b3AJCT0gcGRjX3BvcnRfc3RvcCwKLQkuaG9zdF9zdG9wCQk9IGF0YV9wY2lfaG9zdF9zdG9wLAorCS5ob3N0X3N0b3AJCT0gcGRjX2hvc3Rfc3RvcCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBwZGNfcGF0YV9vcHMgPSB7CkBAIC0xNTgsNyArMTY1LDcgQEAKIAogCS5wb3J0X3N0YXJ0CQk9IHBkY19wb3J0X3N0YXJ0LAogCS5wb3J0X3N0b3AJCT0gcGRjX3BvcnRfc3RvcCwKLQkuaG9zdF9zdG9wCQk9IGF0YV9wY2lfaG9zdF9zdG9wLAorCS5ob3N0X3N0b3AJCT0gcGRjX2hvc3Rfc3RvcCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwZGNfcG9ydF9pbmZvW10gPSB7CkBAIC0yMDEsNiArMjA4LDI2IEBACiAJCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02IDsgRklYTUUgKi8KIAkJLnBvcnRfb3BzCT0gJnBkY19zYXRhX29wcywKIAl9LAorCisJLyogYm9hcmRfMjA1N3ggKi8KKwl7CisJCS5zaHQJCT0gJnBkY19hdGFfc2h0LAorCQkuaG9zdF9mbGFncwk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBLAorCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkudWRtYV9tYXNrCT0gMHg3ZiwgLyogdWRtYTAtNiA7IEZJWE1FICovCisJCS5wb3J0X29wcwk9ICZwZGNfc2F0YV9vcHMsCisJfSwKKworCS8qIGJvYXJkXzQwNTE4ICovCisJeworCQkuc2h0CQk9ICZwZGNfYXRhX3NodCwKKwkJLmhvc3RfZmxhZ3MJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSwKKwkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnVkbWFfbWFzawk9IDB4N2YsIC8qIHVkbWEwLTYgOyBGSVhNRSAqLworCQkucG9ydF9vcHMJPSAmcGRjX3NhdGFfb3BzLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRjX2F0YV9wY2lfdGJsW10gPSB7CkBAIC0yMTcsOSArMjQ0LDkgQEAKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzMzc2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjAzN3ggfSwKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzNTc0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAotCSAgYm9hcmRfMjAzN3ggfSwKKwkgIGJvYXJkXzIwNTd4IH0sCiAJeyBQQ0lfVkVORE9SX0lEX1BST01JU0UsIDB4M2Q3NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKLQkgIGJvYXJkXzIwMzd4IH0sCisJICBib2FyZF8yMDU3eCB9LAogCXsgUENJX1ZFTkRPUl9JRF9QUk9NSVNFLCAweDNkNzMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJICBib2FyZF8yMDM3eCB9LAogCkBAIC0yMjcsMTIgKzI1NCwxNCBAQAogCSAgYm9hcmRfMjAzMTkgfSwKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzMzE5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjAzMTkgfSwKKwl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzNTE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCSAgYm9hcmRfMjAzMTkgfSwKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzNTE5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjAzMTkgfSwKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzZDE3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjAzMTkgfSwKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzZDE4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAotCSAgYm9hcmRfMjAzMTkgfSwKKwkgIGJvYXJkXzQwNTE4IH0sCiAKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHg2NjI5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjA2MTkgfSwKQEAgLTI2MSwxMiArMjkwLDExIEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlwcCA9IGttYWxsb2Moc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpOworCXBwID0ga3phbGxvYyhzaXplb2YoKnBwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dDsKIAl9Ci0JbWVtc2V0KHBwLCAwLCBzaXplb2YoKnBwKSk7CiAKIAlwcC0+cGt0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgMTI4LCAmcHAtPnBrdF9kbWEsIEdGUF9LRVJORUwpOwogCWlmICghcHAtPnBrdCkgewpAQCAtMjk4LDYgKzMyNiwxNiBAQAogfQogCiAKK3N0YXRpYyB2b2lkIHBkY19ob3N0X3N0b3Aoc3RydWN0IGF0YV9ob3N0X3NldCAqaG9zdF9zZXQpCit7CisJc3RydWN0IHBkY19ob3N0X3ByaXYgKmhwID0gaG9zdF9zZXQtPnByaXZhdGVfZGF0YTsKKworCWF0YV9wY2lfaG9zdF9zdG9wKGhvc3Rfc2V0KTsKKworCWtmcmVlKGhwKTsKK30KKworCiBzdGF0aWMgdm9pZCBwZGNfcmVzZXRfcG9ydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXZvaWQgX19pb21lbSAqbW1pbyA9ICh2b2lkIF9faW9tZW0gKikgYXAtPmlvYWRkci5jbWRfYWRkciArIFBEQ19DVExTVEFUOwpAQCAtMzk0LDE5ICs0MzIsNiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X3NldC0+bG9jaywgZmxhZ3MpOwogCiAJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKLQlpZiAoIXFjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IEJVRzogdGltZW91dCB3aXRob3V0IGNvbW1hbmRcbiIsCi0JCSAgICAgICBhcC0+aWQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBoYWNrIGFsZXJ0ISAgV2UgY2Fubm90IHVzZSB0aGUgc3VwcGxpZWQgY29tcGxldGlvbgotCSAqIGZ1bmN0aW9uIGZyb20gaW5zaWRlIHRoZSAtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSB0aHJlYWQuCi0JICogbGliYXRhIGlzIHRoZSBvbmx5IHVzZXIgb2YgLT5laF9zdHJhdGVneV9oYW5kbGVyKCkgaW4KLQkgKiBhbnkga2VybmVsLCBzbyB0aGUgZGVmYXVsdCBzY3NpX2RvbmUoKSBhc3N1bWVzIGl0IGlzCi0JICogbm90IGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBTQ1NJIEVILgotCSAqLwotCXFjLT5zY3NpZG9uZSA9IHNjc2lfZmluaXNoX2NvbW1hbmQ7CiAKIAlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgewogCWNhc2UgQVRBX1BST1RfRE1BOgpAQCAtNDE0LDcgKzQzOSw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IGNvbW1hbmQgdGltZW91dFxuIiwgYXAtPmlkKTsKIAkJZHJ2X3N0YXQgPSBhdGFfd2FpdF9pZGxlKGFwKTsKIAkJcWMtPmVycl9tYXNrIHw9IF9fYWNfZXJyX21hc2soZHJ2X3N0YXQpOwotCQlhdGFfcWNfY29tcGxldGUocWMpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00MjQsMTIgKzQ0OCwxMSBAQAogCQkgICAgICAgYXAtPmlkLCBxYy0+dGYuY29tbWFuZCwgZHJ2X3N0YXQpOwogCiAJCXFjLT5lcnJfbWFzayB8PSBhY19lcnJfbWFzayhkcnZfc3RhdCk7Ci0JCWF0YV9xY19jb21wbGV0ZShxYyk7CiAJCWJyZWFrOwogCX0KIAotb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3Rfc2V0LT5sb2NrLCBmbGFncyk7CisJYXRhX2VoX3FjX2NvbXBsZXRlKHFjKTsKIAlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIApAQCAtNDk1LDE0ICs1MTgsMTUgQEAKIAkJVlBSSU5USygiUVVJQ0sgRVhJVCAyXG4iKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KKworCXNwaW5fbG9jaygmaG9zdF9zZXQtPmxvY2spOworCiAJbWFzayAmPSAweGZmZmY7CQkvKiBvbmx5IDE2IHRhZ3MgcG9zc2libGUgKi8KIAlpZiAoIW1hc2spIHsKIAkJVlBSSU5USygiUVVJQ0sgRVhJVCAzXG4iKTsKLQkJcmV0dXJuIElSUV9OT05FOworCQlnb3RvIGRvbmVfaXJxOwogCX0KIAotCXNwaW5fbG9jaygmaG9zdF9zZXQtPmxvY2spOwotCiAJd3JpdGVsKG1hc2ssIG1taW9fYmFzZSArIFBEQ19JTlRfU0VRTUFTSyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaG9zdF9zZXQtPm5fcG9ydHM7IGkrKykgewpAQCAtNTE5LDEwICs1NDMsMTAgQEAKIAkJfQogCX0KIAotICAgICAgICBzcGluX3VubG9jaygmaG9zdF9zZXQtPmxvY2spOwotCiAJVlBSSU5USygiRVhJVFxuIik7CiAKK2RvbmVfaXJxOgorCXNwaW5fdW5sb2NrKCZob3N0X3NldC0+bG9jayk7CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKQEAgLTU0NCw3ICs1NjgsNyBAQAogCXJlYWRsKCh2b2lkIF9faW9tZW0gKikgYXAtPmlvYWRkci5jbWRfYWRkciArIFBEQ19QS1RfU1VCTUlUKTsgLyogZmx1c2ggKi8KIH0KIAotc3RhdGljIGludCBwZGNfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHVuc2lnbmVkIGludCBwZGNfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN3aXRjaCAocWMtPnRmLnByb3RvY29sKSB7CiAJY2FzZSBBVEFfUFJPVF9ETUE6CkBAIC02MDAsNiArNjI0LDggQEAKIHN0YXRpYyB2b2lkIHBkY19ob3N0X2luaXQodW5zaWduZWQgaW50IGNoaXBfaWQsIHN0cnVjdCBhdGFfcHJvYmVfZW50ICpwZSkKIHsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBwZS0+bW1pb19iYXNlOworCXN0cnVjdCBwZGNfaG9zdF9wcml2ICpocCA9IHBlLT5wcml2YXRlX2RhdGE7CisJaW50IGhvdHBsdWdfb2Zmc2V0ID0gaHAtPmhvdHBsdWdfb2Zmc2V0OwogCXUzMiB0bXA7CiAKIAkvKgpAQCAtNjE0LDEyICs2NDAsMTIgQEAKIAl3cml0ZWwodG1wLCBtbWlvICsgUERDX0ZMQVNIX0NUTCk7CiAKIAkvKiBjbGVhciBwbHVnL3VucGx1ZyBmbGFncyBmb3IgYWxsIHBvcnRzICovCi0JdG1wID0gcmVhZGwobW1pbyArIFBEQ19TQVRBX1BMVUdfQ1NSKTsKLQl3cml0ZWwodG1wIHwgMHhmZiwgbW1pbyArIFBEQ19TQVRBX1BMVUdfQ1NSKTsKKwl0bXAgPSByZWFkbChtbWlvICsgaG90cGx1Z19vZmZzZXQpOworCXdyaXRlbCh0bXAgfCAweGZmLCBtbWlvICsgaG90cGx1Z19vZmZzZXQpOwogCiAJLyogbWFzayBwbHVnL3VucGx1ZyBpbnRzICovCi0JdG1wID0gcmVhZGwobW1pbyArIFBEQ19TQVRBX1BMVUdfQ1NSKTsKLQl3cml0ZWwodG1wIHwgMHhmZjAwMDAsIG1taW8gKyBQRENfU0FUQV9QTFVHX0NTUik7CisJdG1wID0gcmVhZGwobW1pbyArIGhvdHBsdWdfb2Zmc2V0KTsKKwl3cml0ZWwodG1wIHwgMHhmZjAwMDAsIG1taW8gKyBob3RwbHVnX29mZnNldCk7CiAKIAkvKiByZWR1Y2UgVEJHIGNsb2NrIHRvIDEzMyBNaHouICovCiAJdG1wID0gcmVhZGwobW1pbyArIFBEQ19UQkdfTU9ERSk7CkBAIC02NDEsNiArNjY3LDcgQEAKIHsKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqcHJvYmVfZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcGRjX2hvc3RfcHJpdiAqaHA7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwogCXZvaWQgX19pb21lbSAqbW1pb19iYXNlOwogCXVuc2lnbmVkIGludCBib2FyZF9pZHggPSAodW5zaWduZWQgaW50KSBlbnQtPmRyaXZlcl9kYXRhOwpAQCAtNjcxLDEzICs2OTgsMTIgQEAKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dF9yZWdpb25zOwogCi0JcHJvYmVfZW50ID0ga21hbGxvYyhzaXplb2YoKnByb2JlX2VudCksIEdGUF9LRVJORUwpOworCXByb2JlX2VudCA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9iZV9lbnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJvYmVfZW50ID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfcmVnaW9uczsKIAl9CiAKLQltZW1zZXQocHJvYmVfZW50LCAwLCBzaXplb2YoKnByb2JlX2VudCkpOwogCXByb2JlX2VudC0+ZGV2ID0gcGNpX2Rldl90b19kZXYocGRldik7CiAJSU5JVF9MSVNUX0hFQUQoJnByb2JlX2VudC0+bm9kZSk7CiAKQEAgLTY4OCw2ICs3MTQsMTYgQEAKIAl9CiAJYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBtbWlvX2Jhc2U7CiAKKwlocCA9IGt6YWxsb2Moc2l6ZW9mKCpocCksIEdGUF9LRVJORUwpOworCWlmIChocCA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfZW50OworCX0KKworCS8qIFNldCBkZWZhdWx0IGhvdHBsdWcgb2Zmc2V0ICovCisJaHAtPmhvdHBsdWdfb2Zmc2V0ID0gUERDX1NBVEFfUExVR19DU1I7CisJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBocDsKKwogCXByb2JlX2VudC0+c2h0CQk9IHBkY19wb3J0X2luZm9bYm9hcmRfaWR4XS5zaHQ7CiAJcHJvYmVfZW50LT5ob3N0X2ZsYWdzCT0gcGRjX3BvcnRfaW5mb1tib2FyZF9pZHhdLmhvc3RfZmxhZ3M7CiAJcHJvYmVfZW50LT5waW9fbWFzawk9IHBkY19wb3J0X2luZm9bYm9hcmRfaWR4XS5waW9fbWFzazsKQEAgLTcwNyw2ICs3NDMsMTAgQEAKIAogCS8qIG5vdGljZSA0LXBvcnQgYm9hcmRzICovCiAJc3dpdGNoIChib2FyZF9pZHgpIHsKKwljYXNlIGJvYXJkXzQwNTE4OgorCQkvKiBPdmVycmlkZSBob3RwbHVnIG9mZnNldCBmb3IgU0FUQUlJMTUwICovCisJCWhwLT5ob3RwbHVnX29mZnNldCA9IFBEQzJfU0FUQV9QTFVHX0NTUjsKKwkJLyogRmFsbCB0aHJvdWdoICovCiAJY2FzZSBib2FyZF8yMDMxOToKICAgICAgICAJCXByb2JlX2VudC0+bl9wb3J0cyA9IDQ7CiAKQEAgLTcxNiw2ICs3NTYsMTAgQEAKIAkJcHJvYmVfZW50LT5wb3J0WzJdLnNjcl9hZGRyID0gYmFzZSArIDB4NjAwOwogCQlwcm9iZV9lbnQtPnBvcnRbM10uc2NyX2FkZHIgPSBiYXNlICsgMHg3MDA7CiAJCWJyZWFrOworCWNhc2UgYm9hcmRfMjA1N3g6CisJCS8qIE92ZXJyaWRlIGhvdHBsdWcgb2Zmc2V0IGZvciBTQVRBSUkxNTAgKi8KKwkJaHAtPmhvdHBsdWdfb2Zmc2V0ID0gUERDMl9TQVRBX1BMVUdfQ1NSOworCQkvKiBGYWxsIHRocm91Z2ggKi8KIAljYXNlIGJvYXJkXzIwMzd4OgogCQlwcm9iZV9lbnQtPm5fcG9ydHMgPSAyOwogCQlicmVhazsKQEAgLTc0MSw4ICs3ODUsMTAgQEAKIAkvKiBpbml0aWFsaXplIGFkYXB0ZXIgKi8KIAlwZGNfaG9zdF9pbml0KGJvYXJkX2lkeCwgcHJvYmVfZW50KTsKIAotCS8qIEZJWE1FOiBjaGVjayBhdGFfZGV2aWNlX2FkZCByZXR1cm4gdmFsdWUgKi8KLQlhdGFfZGV2aWNlX2FkZChwcm9iZV9lbnQpOworCS8qIEZJWE1FOiBOZWVkIGFueSBvdGhlciBmcmVlcyB0aGFuIGhwPyAqLworCWlmICghYXRhX2RldmljZV9hZGQocHJvYmVfZW50KSkKKwkJa2ZyZWUoaHApOworCiAJa2ZyZWUocHJvYmVfZW50KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKaW5kZXggZGUwNWUyOC4uOWZmZTFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIHN0YXRpYyB2b2lkIHFzX3BvcnRfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHFzX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHFzX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci1zdGF0aWMgaW50IHFzX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHVuc2lnbmVkIGludCBxc19xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyBpbnQgcXNfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogc3RhdGljIHZvaWQgcXNfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyB1OCBxc19ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CkBAIC0xMzYsNyArMTM2LDYgQEAKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gUVNfTUFYX1BSRCwKLQkubWF4X3NlY3RvcnMJCT0gQVRBX01BWF9TRUNUT1JTLAogCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAogCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAogCS8vRklYTUUgLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCkBAIC0yNzYsOCArMjc1LDggQEAKIAl1bnNpZ25lZCBpbnQgbmVsZW07CiAJdTggKnByZCA9IHBwLT5wa3QgKyBRU19DUEJfQllURVM7CiAKLQlhc3NlcnQocWMtPl9fc2cgIT0gTlVMTCk7Ci0JYXNzZXJ0KHFjLT5uX2VsZW0gPiAwKTsKKwlXQVJOX09OKHFjLT5fX3NnID09IE5VTEwpOworCVdBUk5fT04ocWMtPm5fZWxlbSA9PSAwICYmIHFjLT5wYWRfbGVuID09IDApOwogCiAJbmVsZW0gPSAwOwogCWF0YV9mb3JfZWFjaF9zZyhzZywgcWMpIHsKQEAgLTM1Miw3ICszNTEsNyBAQAogCXJlYWRsKGNoYW4gKyBRU19DQ1RfQ0ZGKTsgICAgICAgICAgLyogZmx1c2ggKi8KIH0KIAotc3RhdGljIGludCBxc19xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQorc3RhdGljIHVuc2lnbmVkIGludCBxc19xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewogCXN0cnVjdCBxc19wb3J0X3ByaXYgKnBwID0gcWMtPmFwLT5wcml2YXRlX2RhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKaW5kZXggMTdmNzRkMy4uMThjMjk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKQEAgLTQ5LDIyICs0OSwzMCBAQAogI2RlZmluZSBEUlZfVkVSU0lPTgkiMC45IgogCiBlbnVtIHsKKwkvKgorCSAqIGhvc3QgZmxhZ3MKKwkgKi8KKwlTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QgPSAoMSA8PCAyOSksCiAJU0lMX0ZMQUdfTU9EMTVXUklURQk9ICgxIDw8IDMwKSwKKwlTSUxfREZMX0hPU1RfRkxBR1MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKKwkJCQkgIEFUQV9GTEFHX01NSU8sCiAKKwkvKgorCSAqIENvbnRyb2xsZXIgSURzCisJICovCiAJc2lsXzMxMTIJCT0gMCwKLQlzaWxfMzExMl9tMTV3CQk9IDEsCisJc2lsXzM1MTIJCT0gMSwKIAlzaWxfMzExNAkJPSAyLAogCi0JU0lMX0ZJRk9fUjAJCT0gMHg0MCwKLQlTSUxfRklGT19XMAkJPSAweDQxLAotCVNJTF9GSUZPX1IxCQk9IDB4NDQsCi0JU0lMX0ZJRk9fVzEJCT0gMHg0NSwKLQlTSUxfRklGT19SMgkJPSAweDI0MCwKLQlTSUxfRklGT19XMgkJPSAweDI0MSwKLQlTSUxfRklGT19SMwkJPSAweDI0NCwKLQlTSUxfRklGT19XMwkJPSAweDI0NSwKLQorCS8qCisJICogUmVnaXN0ZXIgb2Zmc2V0cworCSAqLwogCVNJTF9TWVNDRkcJCT0gMHg0OCwKKworCS8qCisJICogUmVnaXN0ZXIgYml0cworCSAqLworCS8qIFNZU0NGRyAqLwogCVNJTF9NQVNLX0lERTBfSU5UCT0gKDEgPDwgMjIpLAogCVNJTF9NQVNLX0lERTFfSU5UCT0gKDEgPDwgMjMpLAogCVNJTF9NQVNLX0lERTJfSU5UCT0gKDEgPDwgMjQpLApAQCAtNzMsOSArODEsMTIgQEAKIAlTSUxfTUFTS180UE9SVAkJPSBTSUxfTUFTS18yUE9SVCB8CiAJCQkJICBTSUxfTUFTS19JREUyX0lOVCB8IFNJTF9NQVNLX0lERTNfSU5ULAogCi0JU0lMX0lERTJfQk1ETUEJCT0gMHgyMDAsCi0KKwkvKiBCTURNQS9CTURNQTIgKi8KIAlTSUxfSU5UUl9TVEVFUklORwk9ICgxIDw8IDEpLAorCisJLyoKKwkgKiBPdGhlcnMKKwkgKi8KIAlTSUxfUVVJUktfTU9EMTVXUklURQk9ICgxIDw8IDApLAogCVNJTF9RVUlSS19VRE1BNU1BWAk9ICgxIDw8IDEpLAogfTsKQEAgLTg4LDEzICs5OSwxMyBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaWxfcGNpX3RibFtdID0gewotCXsgMHgxMDk1LCAweDMxMTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpbF8zMTEyX20xNXcgfSwKLQl7IDB4MTA5NSwgMHgwMjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExMl9tMTV3IH0sCi0JeyAweDEwOTUsIDB4MzUxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lsXzMxMTIgfSwKKwl7IDB4MTA5NSwgMHgzMTEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExMiB9LAorCXsgMHgxMDk1LCAweDAyNDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpbF8zMTEyIH0sCisJeyAweDEwOTUsIDB4MzUxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lsXzM1MTIgfSwKIAl7IDB4MTA5NSwgMHgzMTE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExNCB9LAotCXsgMHgxMDAyLCAweDQzNmUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpbF8zMTEyX20xNXcgfSwKLQl7IDB4MTAwMiwgMHg0Mzc5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExMl9tMTV3IH0sCi0JeyAweDEwMDIsIDB4NDM3YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lsXzMxMTJfbTE1dyB9LAorCXsgMHgxMDAyLCAweDQzNmUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpbF8zMTEyIH0sCisJeyAweDEwMDIsIDB4NDM3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lsXzMxMTIgfSwKKwl7IDB4MTAwMiwgMHg0MzdhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExMiB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIApAQCAtMTM5LDcgKzE1MCw2IEBACiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5tYXhfc2VjdG9ycwkJPSBBVEFfTUFYX1NFQ1RPUlMsCiAJLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCiAJLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCkBAIC0xNTcsNyArMTY3LDcgQEAKIAkuY2hlY2tfc3RhdHVzCQk9IGF0YV9jaGVja19zdGF0dXMsCiAJLmV4ZWNfY29tbWFuZAkJPSBhdGFfZXhlY19jb21tYW5kLAogCS5kZXZfc2VsZWN0CQk9IGF0YV9zdGRfZGV2X3NlbGVjdCwKLQkucGh5X3Jlc2V0CQk9IHNhdGFfcGh5X3Jlc2V0LAorCS5wcm9iZV9yZXNldAkJPSBhdGFfc3RkX3Byb2JlX3Jlc2V0LAogCS5wb3N0X3NldF9tb2RlCQk9IHNpbF9wb3N0X3NldF9tb2RlLAogCS5ibWRtYV9zZXR1cCAgICAgICAgICAgID0gYXRhX2JtZG1hX3NldHVwLAogCS5ibWRtYV9zdGFydCAgICAgICAgICAgID0gYXRhX2JtZG1hX3N0YXJ0LApAQCAtMTc5LDI3ICsxODksMjUgQEAKIAkvKiBzaWxfMzExMiAqLwogCXsKIAkJLnNodAkJPSAmc2lsX3NodCwKLQkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKLQkJCQkgIEFUQV9GTEFHX1NSU1QgfCBBVEFfRkxBR19NTUlPLAorCQkuaG9zdF9mbGFncwk9IFNJTF9ERkxfSE9TVF9GTEFHUyB8IFNJTF9GTEFHX01PRDE1V1JJVEUsCiAJCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gMHgzZiwJCQkvKiB1ZG1hMC01ICovCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAotCX0sIC8qIHNpbF8zMTEyXzE1dyAtIGtlZXAgaXQgc3luYydkIHcvIHNpbF8zMTEyICovCisJfSwKKwkvKiBzaWxfMzUxMiAqLwogCXsKIAkJLnNodAkJPSAmc2lsX3NodCwKLQkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKLQkJCQkgIEFUQV9GTEFHX1NSU1QgfCBBVEFfRkxBR19NTUlPIHwKLQkJCQkgIFNJTF9GTEFHX01PRDE1V1JJVEUsCisJCS5ob3N0X2ZsYWdzCT0gU0lMX0RGTF9IT1NUX0ZMQUdTIHwgU0lMX0ZMQUdfUkVSUl9PTl9ETUFfQUNULAogCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IDB4M2YsCQkJLyogdWRtYTAtNSAqLwogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKLQl9LCAvKiBzaWxfMzExNCAqLworCX0sCisJLyogc2lsXzMxMTQgKi8KIAl7CiAJCS5zaHQJCT0gJnNpbF9zaHQsCi0JCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8Ci0JCQkJICBBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfTU1JTywKKwkJLmhvc3RfZmxhZ3MJPSBTSUxfREZMX0hPU1RfRkxBR1MgfCBTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QsCiAJCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gMHgzZiwJCQkvKiB1ZG1hMC01ICovCkBAIC0yMTMsMTUgKzIyMSwxNyBAQAogCXVuc2lnbmVkIGxvbmcgdGY7CS8qIEFUQSB0YXNrZmlsZSByZWdpc3RlciBibG9jayAqLwogCXVuc2lnbmVkIGxvbmcgY3RsOwkvKiBBVEEgY29udHJvbC9hbHRzdGF0dXMgcmVnaXN0ZXIgYmxvY2sgKi8KIAl1bnNpZ25lZCBsb25nIGJtZG1hOwkvKiBETUEgcmVnaXN0ZXIgYmxvY2sgKi8KKwl1bnNpZ25lZCBsb25nIGZpZm9fY2ZnOwkvKiBGSUZPIFZhbGlkIEJ5dGUgQ291bnQgYW5kIENvbnRyb2wgKi8KIAl1bnNpZ25lZCBsb25nIHNjcjsJLyogU0FUQSBjb250cm9sIHJlZ2lzdGVyIGJsb2NrICovCiAJdW5zaWduZWQgbG9uZyBzaWVuOwkvKiBTQVRBIEludGVycnVwdCBFbmFibGUgcmVnaXN0ZXIgKi8KIAl1bnNpZ25lZCBsb25nIHhmZXJfbW9kZTsvKiBkYXRhIHRyYW5zZmVyIG1vZGUgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBsb25nIHNmaXNfY2ZnOwkvKiBTQVRBIEZJUyByZWNlcHRpb24gY29uZmlnIHJlZ2lzdGVyICovCiB9IHNpbF9wb3J0W10gPSB7CiAJLyogcG9ydCAwIC4uLiAqLwotCXsgMHg4MCwgMHg4QSwgMHgwMCwgMHgxMDAsIDB4MTQ4LCAweGI0IH0sCi0JeyAweEMwLCAweENBLCAweDA4LCAweDE4MCwgMHgxYzgsIDB4ZjQgfSwKLQl7IDB4MjgwLCAweDI4QSwgMHgyMDAsIDB4MzAwLCAweDM0OCwgMHgyYjQgfSwKLQl7IDB4MkMwLCAweDJDQSwgMHgyMDgsIDB4MzgwLCAweDNjOCwgMHgyZjQgfSwKKwl7IDB4ODAsIDB4OEEsIDB4MDAsIDB4NDAsIDB4MTAwLCAweDE0OCwgMHhiNCwgMHgxNGMgfSwKKwl7IDB4QzAsIDB4Q0EsIDB4MDgsIDB4NDQsIDB4MTgwLCAweDFjOCwgMHhmNCwgMHgxY2MgfSwKKwl7IDB4MjgwLCAweDI4QSwgMHgyMDAsIDB4MjQwLCAweDMwMCwgMHgzNDgsIDB4MmI0LCAweDM0YyB9LAorCXsgMHgyQzAsIDB4MkNBLCAweDIwOCwgMHgyNDQsIDB4MzgwLCAweDNjOCwgMHgyZjQsIDB4M2NjIH0sCiAJLyogLi4uIHBvcnQgMyAqLwogfTsKIApAQCAtMzM3LDIyICszNDcsMTIgQEAKIHN0YXRpYyB2b2lkIHNpbF9kZXZfY29uZmlnKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IG4sIHF1aXJrcyA9IDA7Ci0JdW5zaWduZWQgY2hhciBtb2RlbF9udW1bNDBdOwotCWNvbnN0IGNoYXIgKnM7Ci0JdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBjaGFyIG1vZGVsX251bVs0MV07CiAKLQlhdGFfZGV2X2lkX3N0cmluZyhkZXYtPmlkLCBtb2RlbF9udW0sIEFUQV9JRF9QUk9EX09GUywKLQkJCSAgc2l6ZW9mKG1vZGVsX251bSkpOwotCXMgPSAmbW9kZWxfbnVtWzBdOwotCWxlbiA9IHN0cm5sZW4ocywgc2l6ZW9mKG1vZGVsX251bSkpOwotCi0JLyogQVRBUEkgc3BlY2lmaWVzIHRoYXQgZW1wdHkgc3BhY2UgaXMgYmxhbmstZmlsbGVkOyByZW1vdmUgYmxhbmtzICovCi0Jd2hpbGUgKChsZW4gPiAwKSAmJiAoc1tsZW4gLSAxXSA9PSAnICcpKQotCQlsZW4tLTsKKwlhdGFfaWRfY19zdHJpbmcoZGV2LT5pZCwgbW9kZWxfbnVtLCBBVEFfSURfUFJPRF9PRlMsIHNpemVvZihtb2RlbF9udW0pKTsKIAogCWZvciAobiA9IDA7IHNpbF9ibGFja2xpc3Rbbl0ucHJvZHVjdDsgbisrKQotCQlpZiAoIW1lbWNtcChzaWxfYmxhY2tsaXN0W25dLnByb2R1Y3QsIHMsCi0JCQkgICAgc3RybGVuKHNpbF9ibGFja2xpc3Rbbl0ucHJvZHVjdCkpKSB7CisJCWlmICghc3RyY21wKHNpbF9ibGFja2xpc3Rbbl0ucHJvZHVjdCwgbW9kZWxfbnVtKSkgewogCQkJcXVpcmtzID0gc2lsX2JsYWNrbGlzdFtuXS5xdWlyazsKIAkJCWJyZWFrOwogCQl9CkBAIC0zNjMsMTcgKzM2MywxNSBAQAogCSAgICAgKHF1aXJrcyAmIFNJTF9RVUlSS19NT0QxNVdSSVRFKSkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXUoJXUpOiBhcHBseWluZyBTZWFnYXRlIGVycmF0YSBmaXggKG1vZDE1d3JpdGUgd29ya2Fyb3VuZClcbiIsCiAJCSAgICAgICBhcC0+aWQsIGRldi0+ZGV2bm8pOwotCQlhcC0+aG9zdC0+bWF4X3NlY3RvcnMgPSAxNTsKLQkJYXAtPmhvc3QtPmhvc3R0LT5tYXhfc2VjdG9ycyA9IDE1OwotCQlkZXYtPmZsYWdzIHw9IEFUQV9ERkxBR19MT0NLX1NFQ1RPUlM7CisJCWRldi0+bWF4X3NlY3RvcnMgPSAxNTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIGxpbWl0IHRvIHVkbWE1ICovCiAJaWYgKHF1aXJrcyAmIFNJTF9RVUlSS19VRE1BNU1BWCkgewogCQlwcmludGsoS0VSTl9JTkZPICJhdGEldSgldSk6IGFwcGx5aW5nIE1heHRvciBlcnJhdGEgZml4ICVzXG4iLAotCQkgICAgICAgYXAtPmlkLCBkZXYtPmRldm5vLCBzKTsKLQkJYXAtPnVkbWFfbWFzayAmPSBBVEFfVURNQTU7CisJCSAgICAgICBhcC0+aWQsIGRldi0+ZGV2bm8sIG1vZGVsX251bSk7CisJCWRldi0+dWRtYV9tYXNrICY9IEFUQV9VRE1BNTsKIAkJcmV0dXJuOwogCX0KIH0KQEAgLTQxNCwxMyArNDEyLDEyIEBACiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXRfcmVnaW9uczsKIAotCXByb2JlX2VudCA9IGttYWxsb2Moc2l6ZW9mKCpwcm9iZV9lbnQpLCBHRlBfS0VSTkVMKTsKKwlwcm9iZV9lbnQgPSBremFsbG9jKHNpemVvZigqcHJvYmVfZW50KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHByb2JlX2VudCA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X3JlZ2lvbnM7CiAJfQogCi0JbWVtc2V0KHByb2JlX2VudCwgMCwgc2l6ZW9mKCpwcm9iZV9lbnQpKTsKIAlJTklUX0xJU1RfSEVBRCgmcHJvYmVfZW50LT5ub2RlKTsKIAlwcm9iZV9lbnQtPmRldiA9IHBjaV9kZXZfdG9fZGV2KHBkZXYpOwogCXByb2JlX2VudC0+cG9ydF9vcHMgPSBzaWxfcG9ydF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLnBvcnRfb3BzOwpAQCAtNDU3LDI4ICs0NTQsMzggQEAKIAlpZiAoY2xzKSB7CiAJCWNscyA+Pj0gMzsKIAkJY2xzKys7ICAvKiBjbHMgPSAobGluZV9zaXplLzgpKzEgKi8KLQkJd3JpdGViKGNscywgbW1pb19iYXNlICsgU0lMX0ZJRk9fUjApOwotCQl3cml0ZWIoY2xzLCBtbWlvX2Jhc2UgKyBTSUxfRklGT19XMCk7Ci0JCXdyaXRlYihjbHMsIG1taW9fYmFzZSArIFNJTF9GSUZPX1IxKTsKLQkJd3JpdGViKGNscywgbW1pb19iYXNlICsgU0lMX0ZJRk9fVzEpOwotCQlpZiAoZW50LT5kcml2ZXJfZGF0YSA9PSBzaWxfMzExNCkgewotCQkJd3JpdGViKGNscywgbW1pb19iYXNlICsgU0lMX0ZJRk9fUjIpOwotCQkJd3JpdGViKGNscywgbW1pb19iYXNlICsgU0lMX0ZJRk9fVzIpOwotCQkJd3JpdGViKGNscywgbW1pb19iYXNlICsgU0lMX0ZJRk9fUjMpOwotCQkJd3JpdGViKGNscywgbW1pb19iYXNlICsgU0lMX0ZJRk9fVzMpOwotCQl9CisJCWZvciAoaSA9IDA7IGkgPCBwcm9iZV9lbnQtPm5fcG9ydHM7IGkrKykKKwkJCXdyaXRldyhjbHMgPDwgOCB8IGNscywKKwkJCSAgICAgICBtbWlvX2Jhc2UgKyBzaWxfcG9ydFtpXS5maWZvX2NmZyk7CiAJfSBlbHNlCiAJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcGRldi0+ZGV2LAotCQkJICJjYWNoZSBsaW5lIHNpemUgbm90IHNldC4gIERyaXZlciBtYXkgbm90IGZ1bmN0aW9uXG4iKTsKKwkJCSAgICJjYWNoZSBsaW5lIHNpemUgbm90IHNldC4gIERyaXZlciBtYXkgbm90IGZ1bmN0aW9uXG4iKTsKKworCS8qIEFwcGx5IFJfRVJSIG9uIERNQSBhY3RpdmF0ZSBGSVMgZXJyYXRhIHdvcmthcm91bmQgKi8KKwlpZiAocHJvYmVfZW50LT5ob3N0X2ZsYWdzICYgU0lMX0ZMQUdfUkVSUl9PTl9ETUFfQUNUKSB7CisJCWludCBjbnQ7CisKKwkJZm9yIChpID0gMCwgY250ID0gMDsgaSA8IHByb2JlX2VudC0+bl9wb3J0czsgaSsrKSB7CisJCQl0bXAgPSByZWFkbChtbWlvX2Jhc2UgKyBzaWxfcG9ydFtpXS5zZmlzX2NmZyk7CisJCQlpZiAoKHRtcCAmIDB4MykgIT0gMHgwMSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghY250KQorCQkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcGRldi0+ZGV2LAorCQkJCQkgICAiQXBwbHlpbmcgUl9FUlIgb24gRE1BIGFjdGl2YXRlICIKKwkJCQkJICAgIkZJUyBlcnJhdGEgZml4XG4iKTsKKwkJCXdyaXRlbCh0bXAgJiB+MHgzLCBtbWlvX2Jhc2UgKyBzaWxfcG9ydFtpXS5zZmlzX2NmZyk7CisJCQljbnQrKzsKKwkJfQorCX0KIAogCWlmIChlbnQtPmRyaXZlcl9kYXRhID09IHNpbF8zMTE0KSB7CiAJCWlycV9tYXNrID0gU0lMX01BU0tfNFBPUlQ7CiAKIAkJLyogZmxpcCB0aGUgbWFnaWMgIm1ha2UgNCBwb3J0cyB3b3JrIiBiaXQgKi8KLQkJdG1wID0gcmVhZGwobW1pb19iYXNlICsgU0lMX0lERTJfQk1ETUEpOworCQl0bXAgPSByZWFkbChtbWlvX2Jhc2UgKyBzaWxfcG9ydFsyXS5ibWRtYSk7CiAJCWlmICgodG1wICYgU0lMX0lOVFJfU1RFRVJJTkcpID09IDApCiAJCQl3cml0ZWwodG1wIHwgU0lMX0lOVFJfU1RFRVJJTkcsCi0JCQkgICAgICAgbW1pb19iYXNlICsgU0lMX0lERTJfQk1ETUEpOworCQkJICAgICAgIG1taW9fYmFzZSArIHNpbF9wb3J0WzJdLmJtZG1hKTsKIAogCX0gZWxzZSB7CiAJCWlycV9tYXNrID0gU0lMX01BU0tfMlBPUlQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwppbmRleCA5MjMxMzAxLi4wNjhjOThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKQEAgLTI0OSw5ICsyNDksOSBAQAogc3RhdGljIHUzMiBzaWwyNF9zY3JfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBzY19yZWcpOwogc3RhdGljIHZvaWQgc2lsMjRfc2NyX3dyaXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIHNjX3JlZywgdTMyIHZhbCk7CiBzdGF0aWMgdm9pZCBzaWwyNF90Zl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKLXN0YXRpYyB2b2lkIHNpbDI0X3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyBpbnQgc2lsMjRfcHJvYmVfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKIHN0YXRpYyB2b2lkIHNpbDI0X3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci1zdGF0aWMgaW50IHNpbDI0X3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworc3RhdGljIHVuc2lnbmVkIGludCBzaWwyNF9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIHN0YXRpYyB2b2lkIHNpbDI0X2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIHN0YXRpYyB2b2lkIHNpbDI0X2VuZ190aW1lb3V0KHN0cnVjdCBhdGFfcG9ydCAqYXApOwogc3RhdGljIGlycXJldHVybl90IHNpbDI0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTI2Miw2ICsyNjIsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsMjRfcGNpX3RibFtdID0gewogCXsgMHgxMDk1LCAweDMxMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJJRF9TSUwzMTI0IH0sCisJeyAweDgwODYsIDB4MzEyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQklEX1NJTDMxMjQgfSwKIAl7IDB4MTA5NSwgMHgzMTMyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCSURfU0lMMzEzMiB9LAogCXsgMHgxMDk1LCAweDMxMzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJJRF9TSUwzMTMxIH0sCiAJeyAweDEwOTUsIDB4MzUzMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQklEX1NJTDMxMzEgfSwKQEAgLTI4NCw3ICsyODUsNiBAQAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkubWF4X3NlY3RvcnMJCT0gQVRBX01BWF9TRUNUT1JTLAogCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAogCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAogCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLApAQCAtMzA1LDcgKzMwNSw3IEBACiAKIAkudGZfcmVhZAkJPSBzaWwyNF90Zl9yZWFkLAogCi0JLnBoeV9yZXNldAkJPSBzaWwyNF9waHlfcmVzZXQsCisJLnByb2JlX3Jlc2V0CQk9IHNpbDI0X3Byb2JlX3Jlc2V0LAogCiAJLnFjX3ByZXAJCT0gc2lsMjRfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gc2lsMjRfcWNfaXNzdWUsCkBAIC0zMzUsMTkgKzMzNSwxOSBAQAogCXsKIAkJLnNodAkJPSAmc2lsMjRfc2h0LAogCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAotCQkJCSAgQVRBX0ZMQUdfU1JTVCB8IEFUQV9GTEFHX01NSU8gfAotCQkJCSAgQVRBX0ZMQUdfUElPX0RNQSB8IFNJTDI0X05QT1JUUzJGTEFHKDQpLAorCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19ETUEgfAorCQkJCSAgU0lMMjRfTlBPUlRTMkZMQUcoNCksCiAJCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gMHgzZiwJCQkvKiB1ZG1hMC01ICovCiAJCS5wb3J0X29wcwk9ICZzaWwyNF9vcHMsCiAJfSwKLQkvKiBzaWxfMzEzMiAqLyAKKwkvKiBzaWxfMzEzMiAqLwogCXsKIAkJLnNodAkJPSAmc2lsMjRfc2h0LAogCQkuaG9zdF9mbGFncwk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAotCQkJCSAgQVRBX0ZMQUdfU1JTVCB8IEFUQV9GTEFHX01NSU8gfAotCQkJCSAgQVRBX0ZMQUdfUElPX0RNQSB8IFNJTDI0X05QT1JUUzJGTEFHKDIpLAorCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEFUQV9GTEFHX1BJT19ETUEgfAorCQkJCSAgU0lMMjRfTlBPUlRTMkZMQUcoMiksCiAJCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwogCQkudWRtYV9tYXNrCT0gMHgzZiwJCQkvKiB1ZG1hMC01ICovCkBAIC0zNTcsOCArMzU3LDggQEAKIAl7CiAJCS5zaHQJCT0gJnNpbDI0X3NodCwKIAkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKLQkJCQkgIEFUQV9GTEFHX1NSU1QgfCBBVEFfRkxBR19NTUlPIHwKLQkJCQkgIEFUQV9GTEFHX1BJT19ETUEgfCBTSUwyNF9OUE9SVFMyRkxBRygxKSwKKwkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fRE1BIHwKKwkJCQkgIFNJTDI0X05QT1JUUzJGTEFHKDEpLAogCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IDB4M2YsCQkJLyogdWRtYTAtNSAqLwpAQCAtMzcwLDcgKzM3MCw3IEBACiB7CiAJdm9pZCBfX2lvbWVtICpwb3J0ID0gKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuY21kX2FkZHI7CiAKLQlpZiAoYXAtPmNkYl9sZW4gPT0gMTYpCisJaWYgKGRldi0+Y2RiX2xlbiA9PSAxNikKIAkJd3JpdGVsKFBPUlRfQ1NfQ0RCMTYsIHBvcnQgKyBQT1JUX0NUUkxfU1RBVCk7CiAJZWxzZQogCQl3cml0ZWwoUE9SVF9DU19DREIxNiwgcG9ydCArIFBPUlRfQ1RSTF9DTFIpOwpAQCAtNDI3LDE0ICs0MjcsMjMgQEAKIAkqdGYgPSBwcC0+dGY7CiB9CiAKLXN0YXRpYyBpbnQgc2lsMjRfaXNzdWVfU1JTVChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBzaWwyNF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHZlcmJvc2UsCisJCQkgICB1bnNpZ25lZCBpbnQgKmNsYXNzKQogewogCXZvaWQgX19pb21lbSAqcG9ydCA9ICh2b2lkIF9faW9tZW0gKilhcC0+aW9hZGRyLmNtZF9hZGRyOwogCXN0cnVjdCBzaWwyNF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc2lsMjRfcHJiICpwcmIgPSAmcHAtPmNtZF9ibG9ja1swXS5hdGEucHJiOwogCWRtYV9hZGRyX3QgcGFkZHIgPSBwcC0+Y21kX2Jsb2NrX2RtYTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgQVRBX1RNT1VUX0JPT1QgKiBIWjsKIAl1MzIgaXJxX2VuYWJsZSwgaXJxX3N0YXQ7Ci0JaW50IGNudDsKKworCURQUklOVEsoIkVOVEVSXG4iKTsKKworCWlmICghc2F0YV9kZXZfcHJlc2VudChhcCkpIHsKKwkJRFBSSU5USygiUEhZIHJlcG9ydHMgbm8gZGV2aWNlXG4iKTsKKwkJKmNsYXNzID0gQVRBX0RFVl9OT05FOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiB0ZW1wb3JhcmlseSB0dXJuIG9mZiBJUlFzIGR1cmluZyBTUlNUICovCiAJaXJxX2VuYWJsZSA9IHJlYWRsKHBvcnQgKyBQT1JUX0lSUV9FTkFCTEVfU0VUKTsKQEAgLTQ1MSw3ICs0NjAsNyBAQAogCiAJd3JpdGVsKCh1MzIpcGFkZHIsIHBvcnQgKyBQT1JUX0NNRF9BQ1RJVkFURSk7CiAKLQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspIHsKKwlkbyB7CiAJCWlycV9zdGF0ID0gcmVhZGwocG9ydCArIFBPUlRfSVJRX1NUQVQpOwogCQl3cml0ZWwoaXJxX3N0YXQsIHBvcnQgKyBQT1JUX0lSUV9TVEFUKTsJCS8qIGNsZWFyIGlycSAqLwogCkBAIC00NTksMzYgKzQ2OCw0MiBAQAogCQlpZiAoaXJxX3N0YXQgJiAoUE9SVF9JUlFfQ09NUExFVEUgfCBQT1JUX0lSUV9FUlJPUikpCiAJCQlicmVhazsKIAotCQltc2xlZXAoMSk7Ci0JfQorCQltc2xlZXAoMTAwKTsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CiAKIAkvKiByZXN0b3JlIElSUXMgKi8KIAl3cml0ZWwoaXJxX2VuYWJsZSwgcG9ydCArIFBPUlRfSVJRX0VOQUJMRV9TRVQpOwogCi0JaWYgKCEoaXJxX3N0YXQgJiBQT1JUX0lSUV9DT01QTEVURSkpCi0JCXJldHVybiAtMTsKKwlpZiAoIShpcnFfc3RhdCAmIFBPUlRfSVJRX0NPTVBMRVRFKSkgeworCQlEUFJJTlRLKCJFWElULCBzcnN0IGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KIAotCS8qIHVwZGF0ZSBURiAqLwogCXNpbDI0X3VwZGF0ZV90ZihhcCk7CisJKmNsYXNzID0gYXRhX2Rldl9jbGFzc2lmeSgmcHAtPnRmKTsKKworCWlmICgqY2xhc3MgPT0gQVRBX0RFVl9VTktOT1dOKQorCQkqY2xhc3MgPSBBVEFfREVWX05PTkU7CisKKyBvdXQ6CisJRFBSSU5USygiRVhJVCwgY2xhc3M9JXVcbiIsICpjbGFzcyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNpbDI0X3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCBzaWwyNF9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHZlcmJvc2UsCisJCQkgICB1bnNpZ25lZCBpbnQgKmNsYXNzKQogewotCXN0cnVjdCBzaWwyNF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgZHVtbXlfY2xhc3M7CiAKLQlfX3NhdGFfcGh5X3Jlc2V0KGFwKTsKLQlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfUE9SVF9ESVNBQkxFRCkKLQkJcmV0dXJuOworCS8qIHNpbDI0IGRvZXNuJ3QgcmVwb3J0IGRldmljZSBzaWduYXR1cmUgYWZ0ZXIgaGFyZCByZXNldCAqLworCXJldHVybiBzYXRhX3N0ZF9oYXJkcmVzZXQoYXAsIHZlcmJvc2UsICZkdW1teV9jbGFzcyk7Cit9CiAKLQlpZiAoc2lsMjRfaXNzdWVfU1JTVChhcCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkgICAgICAgIiBhdGEldTogU1JTVCBmYWlsZWQsIGRpc2FibGluZyBwb3J0XG4iLCBhcC0+aWQpOwotCQlhcC0+b3BzLT5wb3J0X2Rpc2FibGUoYXApOwotCQlyZXR1cm47Ci0JfQotCi0JYXAtPmRldmljZS0+Y2xhc3MgPSBhdGFfZGV2X2NsYXNzaWZ5KCZwcC0+dGYpOworc3RhdGljIGludCBzaWwyNF9wcm9iZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCit7CisJcmV0dXJuIGF0YV9kcml2ZV9wcm9iZV9yZXNldChhcCwgYXRhX3N0ZF9wcm9iZWluaXQsCisJCQkJICAgICBzaWwyNF9zb2Z0cmVzZXQsIHNpbDI0X2hhcmRyZXNldCwKKwkJCQkgICAgIGF0YV9zdGRfcG9zdHJlc2V0LCBjbGFzc2VzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNpbDI0X2ZpbGxfc2coc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywKQEAgLTUzMyw3ICs1NDgsNyBAQAogCQlwcmIgPSAmY2ItPmF0YXBpLnByYjsKIAkJc2dlID0gY2ItPmF0YXBpLnNnZTsKIAkJbWVtc2V0KGNiLT5hdGFwaS5jZGIsIDAsIDMyKTsKLQkJbWVtY3B5KGNiLT5hdGFwaS5jZGIsIHFjLT5jZGIsIGFwLT5jZGJfbGVuKTsKKwkJbWVtY3B5KGNiLT5hdGFwaS5jZGIsIHFjLT5jZGIsIHFjLT5kZXYtPmNkYl9sZW4pOwogCiAJCWlmIChxYy0+dGYucHJvdG9jb2wgIT0gQVRBX1BST1RfQVRBUElfTk9EQVRBKSB7CiAJCQlpZiAocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKQpAQCAtNTU3LDcgKzU3Miw3IEBACiAJCXNpbDI0X2ZpbGxfc2cocWMsIHNnZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2lsMjRfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2lsMjRfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOwogCXZvaWQgX19pb21lbSAqcG9ydCA9ICh2b2lkIF9faW9tZW0gKilhcC0+aW9hZGRyLmNtZF9hZGRyOwpAQCAtNjM4LDIzICs2NTMsMTAgQEAKIAlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCiAJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKLQlpZiAoIXFjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IEJVRzogdGltZW91dCB3aXRob3V0IGNvbW1hbmRcbiIsCi0JCSAgICAgICBhcC0+aWQpOwotCQlyZXR1cm47Ci0JfQogCi0JLyoKLQkgKiBoYWNrIGFsZXJ0ISAgV2UgY2Fubm90IHVzZSB0aGUgc3VwcGxpZWQgY29tcGxldGlvbgotCSAqIGZ1bmN0aW9uIGZyb20gaW5zaWRlIHRoZSAtPmVoX3N0cmF0ZWd5X2hhbmRsZXIoKSB0aHJlYWQuCi0JICogbGliYXRhIGlzIHRoZSBvbmx5IHVzZXIgb2YgLT5laF9zdHJhdGVneV9oYW5kbGVyKCkgaW4KLQkgKiBhbnkga2VybmVsLCBzbyB0aGUgZGVmYXVsdCBzY3NpX2RvbmUoKSBhc3N1bWVzIGl0IGlzCi0JICogbm90IGJlaW5nIGNhbGxlZCBmcm9tIHRoZSBTQ1NJIEVILgotCSAqLwogCXByaW50ayhLRVJOX0VSUiAiYXRhJXU6IGNvbW1hbmQgdGltZW91dFxuIiwgYXAtPmlkKTsKLQlxYy0+c2NzaWRvbmUgPSBzY3NpX2ZpbmlzaF9jb21tYW5kOwotCXFjLT5lcnJfbWFzayB8PSBBQ19FUlJfT1RIRVI7Ci0JYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX1RJTUVPVVQ7CisJYXRhX2VoX3FjX2NvbXBsZXRlKHFjKTsKIAogCXNpbDI0X3Jlc2V0X2NvbnRyb2xsZXIoYXApOwogfQpAQCAtODQwLDkgKzg0MiwxMCBAQAogc3RhdGljIHZvaWQgc2lsMjRfaG9zdF9zdG9wKHN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0KQogewogCXN0cnVjdCBzaWwyNF9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdF9zZXQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaG9zdF9zZXQtPmRldik7CiAKLQlpb3VubWFwKGhwcml2LT5ob3N0X2Jhc2UpOwotCWlvdW5tYXAoaHByaXYtPnBvcnRfYmFzZSk7CisJcGNpX2lvdW5tYXAocGRldiwgaHByaXYtPmhvc3RfYmFzZSk7CisJcGNpX2lvdW5tYXAocGRldiwgaHByaXYtPnBvcnRfYmFzZSk7CiAJa2ZyZWUoaHByaXYpOwogfQogCkBAIC04NjksMzIgKzg3MiwzMCBAQAogCQlnb3RvIG91dF9kaXNhYmxlOwogCiAJcmMgPSAtRU5PTUVNOwotCS8qIGlvcmVtYXAgbW1pbyByZWdpc3RlcnMgKi8KLQlob3N0X2Jhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKLQkJCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwkvKiBtYXAgbW1pbyByZWdpc3RlcnMgKi8KKwlob3N0X2Jhc2UgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CiAJaWYgKCFob3N0X2Jhc2UpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0JcG9ydF9iYXNlID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMiksCi0JCQkgICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSk7CisJcG9ydF9iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDIsIDApOwogCWlmICghcG9ydF9iYXNlKQogCQlnb3RvIG91dF9mcmVlOwogCiAJLyogYWxsb2NhdGUgJiBpbml0IHByb2JlX2VudCBhbmQgaHByaXYgKi8KLQlwcm9iZV9lbnQgPSBrbWFsbG9jKHNpemVvZigqcHJvYmVfZW50KSwgR0ZQX0tFUk5FTCk7CisJcHJvYmVfZW50ID0ga3phbGxvYyhzaXplb2YoKnByb2JlX2VudCksIEdGUF9LRVJORUwpOwogCWlmICghcHJvYmVfZW50KQogCQlnb3RvIG91dF9mcmVlOwogCi0JaHByaXYgPSBrbWFsbG9jKHNpemVvZigqaHByaXYpLCBHRlBfS0VSTkVMKTsKKwlocHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpocHJpdiksIEdGUF9LRVJORUwpOwogCWlmICghaHByaXYpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQltZW1zZXQocHJvYmVfZW50LCAwLCBzaXplb2YoKnByb2JlX2VudCkpOwogCXByb2JlX2VudC0+ZGV2ID0gcGNpX2Rldl90b19kZXYocGRldik7CiAJSU5JVF9MSVNUX0hFQUQoJnByb2JlX2VudC0+bm9kZSk7CiAKIAlwcm9iZV9lbnQtPnNodAkJPSBwaW5mby0+c2h0OwogCXByb2JlX2VudC0+aG9zdF9mbGFncwk9IHBpbmZvLT5ob3N0X2ZsYWdzOwogCXByb2JlX2VudC0+cGlvX21hc2sJPSBwaW5mby0+cGlvX21hc2s7CisJcHJvYmVfZW50LT5td2RtYV9tYXNrCT0gcGluZm8tPm13ZG1hX21hc2s7CiAJcHJvYmVfZW50LT51ZG1hX21hc2sJPSBwaW5mby0+dWRtYV9tYXNrOwogCXByb2JlX2VudC0+cG9ydF9vcHMJPSBwaW5mby0+cG9ydF9vcHM7CiAJcHJvYmVfZW50LT5uX3BvcnRzCT0gU0lMMjRfRkxBRzJOUE9SVFMocGluZm8tPmhvc3RfZmxhZ3MpOwpAQCAtOTA0LDcgKzkwNSw2IEBACiAJcHJvYmVfZW50LT5tbWlvX2Jhc2UgPSBwb3J0X2Jhc2U7CiAJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBocHJpdjsKIAotCW1lbXNldChocHJpdiwgMCwgc2l6ZW9mKCpocHJpdikpOwogCWhwcml2LT5ob3N0X2Jhc2UgPSBob3N0X2Jhc2U7CiAJaHByaXYtPnBvcnRfYmFzZSA9IHBvcnRfYmFzZTsKIApAQCAtMTAwOCw5ICsxMDA4LDkgQEAKIAogIG91dF9mcmVlOgogCWlmIChob3N0X2Jhc2UpCi0JCWlvdW5tYXAoaG9zdF9iYXNlKTsKKwkJcGNpX2lvdW5tYXAocGRldiwgaG9zdF9iYXNlKTsKIAlpZiAocG9ydF9iYXNlKQotCQlpb3VubWFwKHBvcnRfYmFzZSk7CisJCXBjaV9pb3VubWFwKHBkZXYsIHBvcnRfYmFzZSk7CiAJa2ZyZWUocHJvYmVfZW50KTsKIAlrZnJlZShocHJpdik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKaW5kZXggMmRmOGM1Ni4uYWNjODQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKQEAgLTkxLDcgKzkxLDYgQEAKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gQVRBX01BWF9QUkQsCi0JLm1heF9zZWN0b3JzCQk9IEFUQV9NQVhfU0VDVE9SUywKIAkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKIAkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKaW5kZXggZDg0NzI1Ni4uNzI0ZjBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKQEAgLTU2LDMzICs1NiwzNSBAQAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV9zdnciCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjA3IgogCi0vKiBUYXNrZmlsZSByZWdpc3RlcnMgb2Zmc2V0cyAqLwotI2RlZmluZSBLMl9TQVRBX1RGX0NNRF9PRkZTRVQJCTB4MDAKLSNkZWZpbmUgSzJfU0FUQV9URl9EQVRBX09GRlNFVAkJMHgwMAotI2RlZmluZSBLMl9TQVRBX1RGX0VSUk9SX09GRlNFVAkJMHgwNAotI2RlZmluZSBLMl9TQVRBX1RGX05TRUNUX09GRlNFVAkJMHgwOAotI2RlZmluZSBLMl9TQVRBX1RGX0xCQUxfT0ZGU0VUCQkweDBjCi0jZGVmaW5lIEsyX1NBVEFfVEZfTEJBTV9PRkZTRVQJCTB4MTAKLSNkZWZpbmUgSzJfU0FUQV9URl9MQkFIX09GRlNFVAkJMHgxNAotI2RlZmluZSBLMl9TQVRBX1RGX0RFVklDRV9PRkZTRVQJMHgxOAotI2RlZmluZSBLMl9TQVRBX1RGX0NNRFNUQVRfT0ZGU0VUICAgICAgCTB4MWMKLSNkZWZpbmUgSzJfU0FUQV9URl9DVExfT0ZGU0VUCQkweDIwCitlbnVtIHsKKwkvKiBUYXNrZmlsZSByZWdpc3RlcnMgb2Zmc2V0cyAqLworCUsyX1NBVEFfVEZfQ01EX09GRlNFVAkJPSAweDAwLAorCUsyX1NBVEFfVEZfREFUQV9PRkZTRVQJCT0gMHgwMCwKKwlLMl9TQVRBX1RGX0VSUk9SX09GRlNFVAkJPSAweDA0LAorCUsyX1NBVEFfVEZfTlNFQ1RfT0ZGU0VUCQk9IDB4MDgsCisJSzJfU0FUQV9URl9MQkFMX09GRlNFVAkJPSAweDBjLAorCUsyX1NBVEFfVEZfTEJBTV9PRkZTRVQJCT0gMHgxMCwKKwlLMl9TQVRBX1RGX0xCQUhfT0ZGU0VUCQk9IDB4MTQsCisJSzJfU0FUQV9URl9ERVZJQ0VfT0ZGU0VUCT0gMHgxOCwKKwlLMl9TQVRBX1RGX0NNRFNUQVRfT0ZGU0VUICAgICAgCT0gMHgxYywKKwlLMl9TQVRBX1RGX0NUTF9PRkZTRVQJCT0gMHgyMCwKIAotLyogRE1BIGJhc2UgKi8KLSNkZWZpbmUgSzJfU0FUQV9ETUFfQ01EX09GRlNFVAkJMHgzMAorCS8qIERNQSBiYXNlICovCisJSzJfU0FUQV9ETUFfQ01EX09GRlNFVAkJPSAweDMwLAogCi0vKiBTQ1JzIGJhc2UgKi8KLSNkZWZpbmUgSzJfU0FUQV9TQ1JfU1RBVFVTX09GRlNFVAkweDQwCi0jZGVmaW5lIEsyX1NBVEFfU0NSX0VSUk9SX09GRlNFVAkweDQ0Ci0jZGVmaW5lIEsyX1NBVEFfU0NSX0NPTlRST0xfT0ZGU0VUCTB4NDgKKwkvKiBTQ1JzIGJhc2UgKi8KKwlLMl9TQVRBX1NDUl9TVEFUVVNfT0ZGU0VUCT0gMHg0MCwKKwlLMl9TQVRBX1NDUl9FUlJPUl9PRkZTRVQJPSAweDQ0LAorCUsyX1NBVEFfU0NSX0NPTlRST0xfT0ZGU0VUCT0gMHg0OCwKIAotLyogT3RoZXJzICovCi0jZGVmaW5lIEsyX1NBVEFfU0lDUjFfT0ZGU0VUCQkweDgwCi0jZGVmaW5lIEsyX1NBVEFfU0lDUjJfT0ZGU0VUCQkweDg0Ci0jZGVmaW5lIEsyX1NBVEFfU0lNX09GRlNFVAkJMHg4OAorCS8qIE90aGVycyAqLworCUsyX1NBVEFfU0lDUjFfT0ZGU0VUCQk9IDB4ODAsCisJSzJfU0FUQV9TSUNSMl9PRkZTRVQJCT0gMHg4NCwKKwlLMl9TQVRBX1NJTV9PRkZTRVQJCT0gMHg4OCwKIAotLyogUG9ydCBzdHJpZGUgKi8KLSNkZWZpbmUgSzJfU0FUQV9QT1JUX09GRlNFVAkJMHgxMDAKKwkvKiBQb3J0IHN0cmlkZSAqLworCUsyX1NBVEFfUE9SVF9PRkZTRVQJCT0gMHgxMDAsCit9OwogCiBzdGF0aWMgdTggazJfc3RhdF9jaGVja19zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKQEAgLTI5Miw3ICsyOTQsNiBAQAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkubWF4X3NlY3RvcnMJCT0gQVRBX01BWF9TRUNUT1JTLAogCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAogCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAogCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYwppbmRleCBiYzg3YzE2Li5hZTcwZjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiBzdGF0aWMgdm9pZCBwZGMyMDYyMV9wdXRfdG9fZGltbShzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqcGUsCiAJCQkJIHZvaWQgKnBzb3VyY2UsIHUzMiBvZmZzZXQsIHUzMiBzaXplKTsKIHN0YXRpYyB2b2lkIHBkYzIwNjIxX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKLXN0YXRpYyBpbnQgcGRjMjA2MjFfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGRjMjA2MjFfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwZGNfc2F0YV9zaHQgPSB7CkBAIC0xODYsNyArMTg2LDYgQEAKIAkuY2FuX3F1ZXVlCQk9IEFUQV9ERUZfUVVFVUUsCiAJLnRoaXNfaWQJCT0gQVRBX1NIVF9USElTX0lELAogCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCi0JLm1heF9zZWN0b3JzCQk9IEFUQV9NQVhfU0VDVE9SUywKIAkuY21kX3Blcl9sdW4JCT0gQVRBX1NIVF9DTURfUEVSX0xVTiwKIAkuZW11bGF0ZWQJCT0gQVRBX1NIVF9FTVVMQVRFRCwKIAkudXNlX2NsdXN0ZXJpbmcJCT0gQVRBX1NIVF9VU0VfQ0xVU1RFUklORywKQEAgLTQ2MCw3ICs0NTksNyBAQAogCXVuc2lnbmVkIGludCBpLCBpZHgsIHRvdGFsX2xlbiA9IDAsIHNndF9sZW47CiAJdTMyICpidWYgPSAodTMyICopICZwcC0+ZGltbV9idWZbUERDX0RJTU1fSEVBREVSX1NaXTsKIAotCWFzc2VydChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCk7CisJV0FSTl9PTighKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKSk7CiAKIAlWUFJJTlRLKCJhdGEldTogRU5URVJcbiIsIGFwLT5pZCk7CiAKQEAgLTY3OCw3ICs2NzcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBwZGMyMDYyMV9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCitzdGF0aWMgdW5zaWduZWQgaW50IHBkYzIwNjIxX3FjX2lzc3VlX3Byb3Qoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlzd2l0Y2ggKHFjLT50Zi5wcm90b2NvbCkgewogCWNhc2UgQVRBX1BST1RfRE1BOgpAQCAtODY2LDI2ICs4NjUsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKIAogCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7Ci0JaWYgKCFxYykgewotCQlwcmludGsoS0VSTl9FUlIgImF0YSV1OiBCVUc6IHRpbWVvdXQgd2l0aG91dCBjb21tYW5kXG4iLAotCQkgICAgICAgYXAtPmlkKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogaGFjayBhbGVydCEgIFdlIGNhbm5vdCB1c2UgdGhlIHN1cHBsaWVkIGNvbXBsZXRpb24KLQkgKiBmdW5jdGlvbiBmcm9tIGluc2lkZSB0aGUgLT5laF9zdHJhdGVneV9oYW5kbGVyKCkgdGhyZWFkLgotCSAqIGxpYmF0YSBpcyB0aGUgb25seSB1c2VyIG9mIC0+ZWhfc3RyYXRlZ3lfaGFuZGxlcigpIGluCi0JICogYW55IGtlcm5lbCwgc28gdGhlIGRlZmF1bHQgc2NzaV9kb25lKCkgYXNzdW1lcyBpdCBpcwotCSAqIG5vdCBiZWluZyBjYWxsZWQgZnJvbSB0aGUgU0NTSSBFSC4KLQkgKi8KLQlxYy0+c2NzaWRvbmUgPSBzY3NpX2ZpbmlzaF9jb21tYW5kOwogCiAJc3dpdGNoIChxYy0+dGYucHJvdG9jb2wpIHsKIAljYXNlIEFUQV9QUk9UX0RNQToKIAljYXNlIEFUQV9QUk9UX05PREFUQToKIAkJcHJpbnRrKEtFUk5fRVJSICJhdGEldTogY29tbWFuZCB0aW1lb3V0XG4iLCBhcC0+aWQpOwogCQlxYy0+ZXJyX21hc2sgfD0gX19hY19lcnJfbWFzayhhdGFfd2FpdF9pZGxlKGFwKSk7Ci0JCWF0YV9xY19jb21wbGV0ZShxYyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTg5NSwxMiArODgwLDExIEBACiAJCSAgICAgICBhcC0+aWQsIHFjLT50Zi5jb21tYW5kLCBkcnZfc3RhdCk7CiAKIAkJcWMtPmVycl9tYXNrIHw9IGFjX2Vycl9tYXNrKGRydl9zdGF0KTsKLQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKIAkJYnJlYWs7CiAJfQogCi1vdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9zZXQtPmxvY2ssIGZsYWdzKTsKKwlhdGFfZWhfcWNfY29tcGxldGUocWMpOwogCURQUklOVEsoIkVYSVRcbiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCmluZGV4IDk2MzVjYTcuLjdhYzVhNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jCkBAIC00NCw2ICs0NCw4IEBACiAJdWxpXzUyODcJCT0gMSwKIAl1bGlfNTI4MQkJPSAyLAogCisJdWxpX21heF9wb3J0cwkJPSA0LAorCiAJLyogUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCiAJVUxJNTI4N19CQVNFCQk9IDB4OTAsIC8qIHNhdGEwIHBoeSBTQ1IgcmVnaXN0ZXJzICovCiAJVUxJNTI4N19PRkZTCQk9IDB4MTAsIC8qIG9mZnNldCBmcm9tIHNhdGEwLT5zYXRhMSBwaHkgcmVncyAqLwpAQCAtNTEsNiArNTMsMTAgQEAKIAlVTEk1MjgxX09GRlMJCT0gMHg2MCwgLyogb2Zmc2V0IGZyb20gc2F0YTAtPnNhdGExIHBoeSByZWdzICovCiB9OwogCitzdHJ1Y3QgdWxpX3ByaXYgeworCXVuc2lnbmVkIGludAkJc2NyX2NmZ19hZGRyW3VsaV9tYXhfcG9ydHNdOworfTsKKwogc3RhdGljIGludCB1bGlfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIHN0YXRpYyB1MzIgdWxpX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHVsaV9zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwpAQCAtNzksNyArODUsNiBAQAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkubWF4X3NlY3RvcnMJCT0gQVRBX01BWF9TRUNUT1JTLAogCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAogCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAogCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLApAQCAtMTM4LDcgKzE0Myw4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3Njcl9jZmdfYWRkcihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKQogewotCXJldHVybiBhcC0+aW9hZGRyLnNjcl9hZGRyICsgKDQgKiBzY19yZWcpOworCXN0cnVjdCB1bGlfcHJpdiAqaHByaXYgPSBhcC0+aG9zdF9zZXQtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gaHByaXYtPnNjcl9jZmdfYWRkclthcC0+cG9ydF9ub10gKyAoNCAqIHNjX3JlZyk7CiB9CiAKIHN0YXRpYyB1MzIgdWxpX3Njcl9jZmdfcmVhZCAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZykKQEAgLTE4Myw2ICsxODksNyBAQAogCWludCByYzsKIAl1bnNpZ25lZCBpbnQgYm9hcmRfaWR4ID0gKHVuc2lnbmVkIGludCkgZW50LT5kcml2ZXJfZGF0YTsKIAlpbnQgcGNpX2Rldl9idXN5ID0gMDsKKwlzdHJ1Y3QgdWxpX3ByaXYgKmhwcml2OwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CkBAIC0yMTEsMTAgKzIxOCwxOCBAQAogCQlnb3RvIGVycl9vdXRfcmVnaW9uczsKIAl9CiAKKwlocHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpocHJpdiksIEdGUF9LRVJORUwpOworCWlmICghaHByaXYpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfcHJvYmVfZW50OworCX0KKworCXByb2JlX2VudC0+cHJpdmF0ZV9kYXRhID0gaHByaXY7CisKIAlzd2l0Y2ggKGJvYXJkX2lkeCkgewogCWNhc2UgdWxpXzUyODc6Ci0JCXByb2JlX2VudC0+cG9ydFswXS5zY3JfYWRkciA9IFVMSTUyODdfQkFTRTsKLQkJcHJvYmVfZW50LT5wb3J0WzFdLnNjcl9hZGRyID0gVUxJNTI4N19CQVNFICsgVUxJNTI4N19PRkZTOworCQlocHJpdi0+c2NyX2NmZ19hZGRyWzBdID0gVUxJNTI4N19CQVNFOworCQlocHJpdi0+c2NyX2NmZ19hZGRyWzFdID0gVUxJNTI4N19CQVNFICsgVUxJNTI4N19PRkZTOwogICAgICAgIAkJcHJvYmVfZW50LT5uX3BvcnRzID0gNDsKIAogICAgICAgIAkJcHJvYmVfZW50LT5wb3J0WzJdLmNtZF9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApICsgODsKQEAgLTIyMiwyNyArMjM3LDI3IEBACiAJCXByb2JlX2VudC0+cG9ydFsyXS5jdGxfYWRkciA9CiAJCQkocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpIHwgQVRBX1BDSV9DVExfT0ZTKSArIDQ7CiAJCXByb2JlX2VudC0+cG9ydFsyXS5ibWRtYV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDQpICsgMTY7Ci0JCXByb2JlX2VudC0+cG9ydFsyXS5zY3JfYWRkciA9IFVMSTUyODdfQkFTRSArIFVMSTUyODdfT0ZGUyo0OworCQlocHJpdi0+c2NyX2NmZ19hZGRyWzJdID0gVUxJNTI4N19CQVNFICsgVUxJNTI4N19PRkZTKjQ7CiAKIAkJcHJvYmVfZW50LT5wb3J0WzNdLmNtZF9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpICsgODsKIAkJcHJvYmVfZW50LT5wb3J0WzNdLmFsdHN0YXR1c19hZGRyID0KIAkJcHJvYmVfZW50LT5wb3J0WzNdLmN0bF9hZGRyID0KIAkJCShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMykgfCBBVEFfUENJX0NUTF9PRlMpICsgNDsKIAkJcHJvYmVfZW50LT5wb3J0WzNdLmJtZG1hX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCkgKyAyNDsKLQkJcHJvYmVfZW50LT5wb3J0WzNdLnNjcl9hZGRyID0gVUxJNTI4N19CQVNFICsgVUxJNTI4N19PRkZTKjU7CisJCWhwcml2LT5zY3JfY2ZnX2FkZHJbM10gPSBVTEk1Mjg3X0JBU0UgKyBVTEk1Mjg3X09GRlMqNTsKIAogCQlhdGFfc3RkX3BvcnRzKCZwcm9iZV9lbnQtPnBvcnRbMl0pOwogCQlhdGFfc3RkX3BvcnRzKCZwcm9iZV9lbnQtPnBvcnRbM10pOwogCQlicmVhazsKIAogCWNhc2UgdWxpXzUyODk6Ci0JCXByb2JlX2VudC0+cG9ydFswXS5zY3JfYWRkciA9IFVMSTUyODdfQkFTRTsKLQkJcHJvYmVfZW50LT5wb3J0WzFdLnNjcl9hZGRyID0gVUxJNTI4N19CQVNFICsgVUxJNTI4N19PRkZTOworCQlocHJpdi0+c2NyX2NmZ19hZGRyWzBdID0gVUxJNTI4N19CQVNFOworCQlocHJpdi0+c2NyX2NmZ19hZGRyWzFdID0gVUxJNTI4N19CQVNFICsgVUxJNTI4N19PRkZTOwogCQlicmVhazsKIAogCWNhc2UgdWxpXzUyODE6Ci0JCXByb2JlX2VudC0+cG9ydFswXS5zY3JfYWRkciA9IFVMSTUyODFfQkFTRTsKLQkJcHJvYmVfZW50LT5wb3J0WzFdLnNjcl9hZGRyID0gVUxJNTI4MV9CQVNFICsgVUxJNTI4MV9PRkZTOworCQlocHJpdi0+c2NyX2NmZ19hZGRyWzBdID0gVUxJNTI4MV9CQVNFOworCQlocHJpdi0+c2NyX2NmZ19hZGRyWzFdID0gVUxJNTI4MV9CQVNFICsgVUxJNTI4MV9PRkZTOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yNTksOSArMjc0LDEwIEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX291dF9wcm9iZV9lbnQ6CisJa2ZyZWUocHJvYmVfZW50KTsKIGVycl9vdXRfcmVnaW9uczoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCiBlcnJfb3V0OgogCWlmICghcGNpX2Rldl9idXN5KQogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCmluZGV4IDZkNWIwYTcuLjc5MWJmNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCkBAIC05OCw3ICs5OCw2IEBACiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5tYXhfc2VjdG9ycwkJPSBBVEFfTUFYX1NFQ1RPUlMsCiAJLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCiAJLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jCmluZGV4IGU0ODRlOGQuLjgzNmJiYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jCkBAIC00Nyw1MiArNDcsNTggQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkic2F0YV92c2MiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjIiCiAKLS8qIEludGVycnVwdCByZWdpc3RlciBvZmZzZXRzIChmcm9tIGNoaXAgYmFzZSBhZGRyZXNzKSAqLwotI2RlZmluZSBWU0NfU0FUQV9JTlRfU1RBVF9PRkZTRVQJMHgwMAotI2RlZmluZSBWU0NfU0FUQV9JTlRfTUFTS19PRkZTRVQJMHgwNAorZW51bSB7CisJLyogSW50ZXJydXB0IHJlZ2lzdGVyIG9mZnNldHMgKGZyb20gY2hpcCBiYXNlIGFkZHJlc3MpICovCisJVlNDX1NBVEFfSU5UX1NUQVRfT0ZGU0VUCT0gMHgwMCwKKwlWU0NfU0FUQV9JTlRfTUFTS19PRkZTRVQJPSAweDA0LAogCi0vKiBUYXNrZmlsZSByZWdpc3RlcnMgb2Zmc2V0cyAqLwotI2RlZmluZSBWU0NfU0FUQV9URl9DTURfT0ZGU0VUCQkweDAwCi0jZGVmaW5lIFZTQ19TQVRBX1RGX0RBVEFfT0ZGU0VUCQkweDAwCi0jZGVmaW5lIFZTQ19TQVRBX1RGX0VSUk9SX09GRlNFVAkweDA0Ci0jZGVmaW5lIFZTQ19TQVRBX1RGX0ZFQVRVUkVfT0ZGU0VUCTB4MDYKLSNkZWZpbmUgVlNDX1NBVEFfVEZfTlNFQ1RfT0ZGU0VUCTB4MDgKLSNkZWZpbmUgVlNDX1NBVEFfVEZfTEJBTF9PRkZTRVQJCTB4MGMKLSNkZWZpbmUgVlNDX1NBVEFfVEZfTEJBTV9PRkZTRVQJCTB4MTAKLSNkZWZpbmUgVlNDX1NBVEFfVEZfTEJBSF9PRkZTRVQJCTB4MTQKLSNkZWZpbmUgVlNDX1NBVEFfVEZfREVWSUNFX09GRlNFVAkweDE4Ci0jZGVmaW5lIFZTQ19TQVRBX1RGX1NUQVRVU19PRkZTRVQJMHgxYwotI2RlZmluZSBWU0NfU0FUQV9URl9DT01NQU5EX09GRlNFVAkweDFkCi0jZGVmaW5lIFZTQ19TQVRBX1RGX0FMVFNUQVRVU19PRkZTRVQJMHgyOAotI2RlZmluZSBWU0NfU0FUQV9URl9DVExfT0ZGU0VUCQkweDI5CisJLyogVGFza2ZpbGUgcmVnaXN0ZXJzIG9mZnNldHMgKi8KKwlWU0NfU0FUQV9URl9DTURfT0ZGU0VUCQk9IDB4MDAsCisJVlNDX1NBVEFfVEZfREFUQV9PRkZTRVQJCT0gMHgwMCwKKwlWU0NfU0FUQV9URl9FUlJPUl9PRkZTRVQJPSAweDA0LAorCVZTQ19TQVRBX1RGX0ZFQVRVUkVfT0ZGU0VUCT0gMHgwNiwKKwlWU0NfU0FUQV9URl9OU0VDVF9PRkZTRVQJPSAweDA4LAorCVZTQ19TQVRBX1RGX0xCQUxfT0ZGU0VUCQk9IDB4MGMsCisJVlNDX1NBVEFfVEZfTEJBTV9PRkZTRVQJCT0gMHgxMCwKKwlWU0NfU0FUQV9URl9MQkFIX09GRlNFVAkJPSAweDE0LAorCVZTQ19TQVRBX1RGX0RFVklDRV9PRkZTRVQJPSAweDE4LAorCVZTQ19TQVRBX1RGX1NUQVRVU19PRkZTRVQJPSAweDFjLAorCVZTQ19TQVRBX1RGX0NPTU1BTkRfT0ZGU0VUCT0gMHgxZCwKKwlWU0NfU0FUQV9URl9BTFRTVEFUVVNfT0ZGU0VUCT0gMHgyOCwKKwlWU0NfU0FUQV9URl9DVExfT0ZGU0VUCQk9IDB4MjksCiAKLS8qIERNQSBiYXNlICovCi0jZGVmaW5lIFZTQ19TQVRBX1VQX0RFU0NSSVBUT1JfT0ZGU0VUCTB4NjQKLSNkZWZpbmUgVlNDX1NBVEFfVVBfREFUQV9CVUZGRVJfT0ZGU0VUCTB4NkMKLSNkZWZpbmUgVlNDX1NBVEFfRE1BX0NNRF9PRkZTRVQJCTB4NzAKKwkvKiBETUEgYmFzZSAqLworCVZTQ19TQVRBX1VQX0RFU0NSSVBUT1JfT0ZGU0VUCT0gMHg2NCwKKwlWU0NfU0FUQV9VUF9EQVRBX0JVRkZFUl9PRkZTRVQJPSAweDZDLAorCVZTQ19TQVRBX0RNQV9DTURfT0ZGU0VUCQk9IDB4NzAsCiAKLS8qIFNDUnMgYmFzZSAqLwotI2RlZmluZSBWU0NfU0FUQV9TQ1JfU1RBVFVTX09GRlNFVAkweDEwMAotI2RlZmluZSBWU0NfU0FUQV9TQ1JfRVJST1JfT0ZGU0VUCTB4MTA0Ci0jZGVmaW5lIFZTQ19TQVRBX1NDUl9DT05UUk9MX09GRlNFVAkweDEwOAorCS8qIFNDUnMgYmFzZSAqLworCVZTQ19TQVRBX1NDUl9TVEFUVVNfT0ZGU0VUCT0gMHgxMDAsCisJVlNDX1NBVEFfU0NSX0VSUk9SX09GRlNFVAk9IDB4MTA0LAorCVZTQ19TQVRBX1NDUl9DT05UUk9MX09GRlNFVAk9IDB4MTA4LAogCi0vKiBQb3J0IHN0cmlkZSAqLwotI2RlZmluZSBWU0NfU0FUQV9QT1JUX09GRlNFVAkJMHgyMDAKKwkvKiBQb3J0IHN0cmlkZSAqLworCVZTQ19TQVRBX1BPUlRfT0ZGU0VUCQk9IDB4MjAwLAogCi0vKiBFcnJvciBpbnRlcnJ1cHQgc3RhdHVzIGJpdCBvZmZzZXRzICovCi0jZGVmaW5lIFZTQ19TQVRBX0lOVF9FUlJPUl9FX09GRlNFVAkyCi0jZGVmaW5lIFZTQ19TQVRBX0lOVF9FUlJPUl9QX09GRlNFVAk0Ci0jZGVmaW5lIFZTQ19TQVRBX0lOVF9FUlJPUl9UX09GRlNFVAk1Ci0jZGVmaW5lIFZTQ19TQVRBX0lOVF9FUlJPUl9NX09GRlNFVAkxCisJLyogRXJyb3IgaW50ZXJydXB0IHN0YXR1cyBiaXQgb2Zmc2V0cyAqLworCVZTQ19TQVRBX0lOVF9FUlJPUl9DUkMJCT0gMHg0MCwKKwlWU0NfU0FUQV9JTlRfRVJST1JfVAkJPSAweDIwLAorCVZTQ19TQVRBX0lOVF9FUlJPUl9QCQk9IDB4MTAsCisJVlNDX1NBVEFfSU5UX0VSUk9SX1IJCT0gMHg4LAorCVZTQ19TQVRBX0lOVF9FUlJPUl9FCQk9IDB4NCwKKwlWU0NfU0FUQV9JTlRfRVJST1JfTQkJPSAweDIsCisJVlNDX1NBVEFfSU5UX1BIWV9DSEFOR0UJCT0gMHgxLAorCVZTQ19TQVRBX0lOVF9FUlJPUiA9IChWU0NfU0FUQV9JTlRfRVJST1JfQ1JDICB8IFZTQ19TQVRBX0lOVF9FUlJPUl9UIHwgXAorCQkJICAgICAgVlNDX1NBVEFfSU5UX0VSUk9SX1AgICAgfCBWU0NfU0FUQV9JTlRfRVJST1JfUiB8IFwKKwkJCSAgICAgIFZTQ19TQVRBX0lOVF9FUlJPUl9FICAgIHwgVlNDX1NBVEFfSU5UX0VSUk9SX00gfCBcCisJCQkgICAgICBWU0NfU0FUQV9JTlRfUEhZX0NIQU5HRSksCit9OworCisKICNkZWZpbmUgaXNfdnNjX3NhdGFfaW50X2Vycihwb3J0X2lkeCwgaW50X3N0YXR1cykgXAotCSAoaW50X3N0YXR1cyAmICgoMSA8PCAoVlNDX1NBVEFfSU5UX0VSUk9SX0VfT0ZGU0VUICsgKDggKiBwb3J0X2lkeCkpKSB8IFwKLQkJICAgICAgICAoMSA8PCAoVlNDX1NBVEFfSU5UX0VSUk9SX1BfT0ZGU0VUICsgKDggKiBwb3J0X2lkeCkpKSB8IFwKLQkJICAgICAgICAoMSA8PCAoVlNDX1NBVEFfSU5UX0VSUk9SX1RfT0ZGU0VUICsgKDggKiBwb3J0X2lkeCkpKSB8IFwKLQkJICAgICAgICAoMSA8PCAoVlNDX1NBVEFfSU5UX0VSUk9SX01fT0ZGU0VUICsgKDggKiBwb3J0X2lkeCkpKSAgIFwKLQkJICAgICAgIClcCi0gCSApCisJIChpbnRfc3RhdHVzICYgKFZTQ19TQVRBX0lOVF9FUlJPUiA8PCAoOCAqIHBvcnRfaWR4KSkpCiAKIAogc3RhdGljIHUzMiB2c2Nfc2F0YV9zY3JfcmVhZCAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZykKQEAgLTIxNSwxNCArMjIxLDYgQEAKIAogCQkJYXAgPSBob3N0X3NldC0+cG9ydHNbaV07CiAKLQkJCWlmIChpc192c2Nfc2F0YV9pbnRfZXJyKGksIGludF9zdGF0dXMpKSB7Ci0JCQkJdTMyIGVycl9zdGF0dXM7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpZ25vcmluZyBpbnRlcnJ1cHQocylcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkJZXJyX3N0YXR1cyA9IGFwID8gdnNjX3NhdGFfc2NyX3JlYWQoYXAsIFNDUl9FUlJPUikgOiAwOwotCQkJCXZzY19zYXRhX3Njcl93cml0ZShhcCwgU0NSX0VSUk9SLCBlcnJfc3RhdHVzKTsKLQkJCQloYW5kbGVkKys7Ci0JCQl9Ci0KIAkJCWlmIChhcCAmJiAhKGFwLT5mbGFncyAmCiAJCQkJICAgIChBVEFfRkxBR19QT1JUX0RJU0FCTEVEfEFUQV9GTEFHX05PSU5UUikpKSB7CiAJCQkJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKQEAgLTIzMCwxMiArMjI4LDI2IEBACiAJCQkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGFwLT5hY3RpdmVfdGFnKTsKIAkJCQlpZiAocWMgJiYgKCEocWMtPnRmLmN0bCAmIEFUQV9OSUVOKSkpIHsKIAkJCQkJaGFuZGxlZCArPSBhdGFfaG9zdF9pbnRyKGFwLCBxYyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpZ25vcmluZyBpbnRlcnJ1cHQocylcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJfSBlbHNlIGlmIChpc192c2Nfc2F0YV9pbnRfZXJyKGksIGludF9zdGF0dXMpKSB7CisJCQkJCS8qCisJCQkJCSAqIE9uIHNvbWUgY2hpcHMgKGkuZS4gSW50ZWwgMzEyNDQpLCBhbiBlcnJvcgorCQkJCQkgKiBpbnRlcnJ1cHQgd2lsbCBzbmVhayBpbiBhdCBpbml0aWFsaXphdGlvbgorCQkJCQkgKiB0aW1lIChwaHkgc3RhdGUgY2hhbmdlcykuICBDbGVhcmluZyB0aGUgU0NSCisJCQkJCSAqIGVycm9yIHJlZ2lzdGVyIGlzIG5vdCByZXF1aXJlZCwgYnV0IGl0IHByZXZlbnRzCisJCQkJCSAqIHRoZSBwaHkgc3RhdGUgY2hhbmdlIGludGVycnVwdHMgZnJvbSByZWN1cnJpbmcKKwkJCQkJICogbGF0ZXIuCisJCQkJCSAqLworCQkJCQl1MzIgZXJyX3N0YXR1czsKKwkJCQkJZXJyX3N0YXR1cyA9IHZzY19zYXRhX3Njcl9yZWFkKGFwLCBTQ1JfRVJST1IpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNsZWFyaW5nIGludGVycnVwdCwgIgorCQkJCQkgICAgICAgInN0YXR1cyAleDsgc2F0YSBlcnIgc3RhdHVzICV4XG4iLAorCQkJCQkgICAgICAgX19GVU5DVElPTl9fLAorCQkJCQkgICAgICAgaW50X3N0YXR1cywgZXJyX3N0YXR1cyk7CisJCQkJCXZzY19zYXRhX3Njcl93cml0ZShhcCwgU0NSX0VSUk9SLCBlcnJfc3RhdHVzKTsKKwkJCQkJLyogQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCQkJCQlhdGFfY2hrX3N0YXR1cyhhcCk7CiAJCQkJCWhhbmRsZWQrKzsKIAkJCQl9Ci0KIAkJCX0KIAkJfQogCX0KQEAgLTI1NSw3ICsyNjcsNiBAQAogCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwKIAkudGhpc19pZAkJPSBBVEFfU0hUX1RISVNfSUQsCiAJLnNnX3RhYmxlc2l6ZQkJPSBMSUJBVEFfTUFYX1BSRCwKLQkubWF4X3NlY3RvcnMJCT0gQVRBX01BWF9TRUNUT1JTLAogCS5jbWRfcGVyX2x1bgkJPSBBVEFfU0hUX0NNRF9QRVJfTFVOLAogCS5lbXVsYXRlZAkJPSBBVEFfU0hUX0VNVUxBVEVELAogCS51c2VfY2x1c3RlcmluZwkJPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKaW5kZXggYzU1MWJiOC4uNjkxM2IwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgpAQCAtMTM2LDkgKzEzNSw4IEBACiAJY29uc3QgaW50IHNpemUgPSBvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHJlcXVlc3QpOwogCXN0cnVjdCBzY3NpX3JlcXVlc3QgKnNyZXE7CiAgIAotCXNyZXEgPSBrbWFsbG9jKHNpemUsIGdmcF9tYXNrKTsKKwlzcmVxID0ga3phbGxvYyhzaXplLCBnZnBfbWFzayk7CiAJaWYgKGxpa2VseShzcmVxICE9IE5VTEwpKSB7Ci0JCW1lbXNldChzcmVxLCAwLCBzaXplKTsKIAkJc3JlcS0+c3JfcmVxdWVzdCA9IChzdHJ1Y3QgcmVxdWVzdCAqKSgoKGNoYXIgKilzcmVxKSArIG9mZnNldCk7CiAJCXNyZXEtPnNyX2RldmljZSA9IHNkZXY7CiAJCXNyZXEtPnNyX2hvc3QgPSBzZGV2LT5ob3N0OwpAQCAtMTI0OCw3ICsxMjQ2LDYgQEAKIAlmb3JfZWFjaF9jcHUoaSkKIAkJSU5JVF9MSVNUX0hFQUQoJnBlcl9jcHUoc2NzaV9kb25lX3EsIGkpKTsKIAotCWRldmZzX21rX2Rpcigic2NzaSIpOwogCXByaW50ayhLRVJOX05PVElDRSAiU0NTSSBzdWJzeXN0ZW0gaW5pdGlhbGl6ZWRcbiIpOwogCXJldHVybiAwOwogCkBAIC0xMjczLDcgKzEyNzAsNiBAQAogCXNjc2lfZXhpdF9zeXNjdGwoKTsKIAlzY3NpX2V4aXRfaG9zdHMoKTsKIAlzY3NpX2V4aXRfZGV2aW5mbygpOwotCWRldmZzX3JlbW92ZSgic2NzaSIpOwogCXNjc2lfZXhpdF9wcm9jZnMoKTsKIAlzY3NpX2V4aXRfcXVldWUoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCmluZGV4IDBlNTI5ZjguLjVhNWQyYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwpAQCAtMTA2MSwxMyArMTA2MSwxMiBAQAogCQl9CiAJfQogCWlmIChOVUxMID09IG9wZW5fZGV2aXApIHsgLyogdHJ5IGFuZCBtYWtlIGEgbmV3IG9uZSAqLwotCQlvcGVuX2RldmlwID0ga21hbGxvYyhzaXplb2YoKm9wZW5fZGV2aXApLEdGUF9LRVJORUwpOworCQlvcGVuX2RldmlwID0ga3phbGxvYyhzaXplb2YoKm9wZW5fZGV2aXApLEdGUF9LRVJORUwpOwogCQlpZiAoTlVMTCA9PSBvcGVuX2RldmlwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvdXQgb2YgbWVtb3J5IGF0IGxpbmUgJWRcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQltZW1zZXQob3Blbl9kZXZpcCwgMCwgc2l6ZW9mKCpvcGVuX2RldmlwKSk7CiAJCW9wZW5fZGV2aXAtPnNkYmdfaG9zdCA9IHNkYmdfaG9zdDsKIAkJbGlzdF9hZGRfdGFpbCgmb3Blbl9kZXZpcC0+ZGV2X2xpc3QsCiAJCSZzZGJnX2hvc3QtPmRldl9pbmZvX2xpc3QpOwpAQCAtMTgxNCw3ICsxODEzLDcgQEAKICAgICAgICAgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqc2RiZ19kZXZpbmZvOwogICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaCwgKmxoX3NmOwogCi0gICAgICAgIHNkYmdfaG9zdCA9IGttYWxsb2Moc2l6ZW9mKCpzZGJnX2hvc3QpLEdGUF9LRVJORUwpOworICAgICAgICBzZGJnX2hvc3QgPSBremFsbG9jKHNpemVvZigqc2RiZ19ob3N0KSwgR0ZQX0tFUk5FTCk7CiAKICAgICAgICAgaWYgKE5VTEwgPT0gc2RiZ19ob3N0KSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogb3V0IG9mIG1lbW9yeSBhdCBsaW5lICVkXG4iLApAQCAtMTgyMiwxOSArMTgyMSwxNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwogICAgICAgICB9CiAKLSAgICAgICAgbWVtc2V0KHNkYmdfaG9zdCwgMCwgc2l6ZW9mKCpzZGJnX2hvc3QpKTsKICAgICAgICAgSU5JVF9MSVNUX0hFQUQoJnNkYmdfaG9zdC0+ZGV2X2luZm9fbGlzdCk7CiAKIAlkZXZzX3Blcl9ob3N0ID0gc2NzaV9kZWJ1Z19udW1fdGd0cyAqIHNjc2lfZGVidWdfbWF4X2x1bnM7CiAgICAgICAgIGZvciAoayA9IDA7IGsgPCBkZXZzX3Blcl9ob3N0OyBrKyspIHsKLSAgICAgICAgICAgICAgICBzZGJnX2RldmluZm8gPSBrbWFsbG9jKHNpemVvZigqc2RiZ19kZXZpbmZvKSxHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBzZGJnX2RldmluZm8gPSBremFsbG9jKHNpemVvZigqc2RiZ19kZXZpbmZvKSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gc2RiZ19kZXZpbmZvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIiVzOiBvdXQgb2YgbWVtb3J5IGF0IGxpbmUgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IC1FTk9NRU07CiAJCQlnb3RvIGNsZWFuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1zZXQoc2RiZ19kZXZpbmZvLCAwLCBzaXplb2YoKnNkYmdfZGV2aW5mbykpOwogICAgICAgICAgICAgICAgIHNkYmdfZGV2aW5mby0+c2RiZ19ob3N0ID0gc2RiZ19ob3N0OwogICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwoJnNkYmdfZGV2aW5mby0+ZGV2X2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2RiZ19ob3N0LT5kZXZfaW5mb19saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwppbmRleCBmMDFlYzBhLi44NGMzOTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCkBAIC0xMjYsNiArMTI2LDcgQEAKIAl7IkFEQVBURUMiLCAiQWRhcHRlYyA1NDAwUyIsIE5VTEwsIEJMSVNUX0ZPUkNFTFVOfSwKIAl7IkFGVCBQUk8iLCAiLUlYIENGIiwgIjAuMD4iLCBCTElTVF9GT1JDRUxVTn0sCiAJeyJCRUxLSU4iLCAiVVNCIDIgSFMtQ0YiLCAiMS45NSIsICBCTElTVF9GT1JDRUxVTiB8IEJMSVNUX0lOUVVJUllfMzZ9LAorCXsiQlJPV05JRSIsICIxNjAwVTNQIiwgTlVMTCwgQkxJU1RfTk9SRVBPUlRMVU59LAogCXsiQ0FOT04iLCAiSVBVQkpEIiwgTlVMTCwgQkxJU1RfU1BBUlNFTFVOfSwKIAl7IkNCT1gzIiwgIlVTQiBTdG9yYWdlLVNNQyIsICIzMDBBIiwgQkxJU1RfRk9SQ0VMVU4gfCBCTElTVF9JTlFVSVJZXzM2fSwKIAl7IkNNRCIsICJDUkEtNzI4MCIsIE5VTEwsIEJMSVNUX1NQQVJTRUxVTn0sCS8qIENNRCBSQUlEIENvbnRyb2xsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IDVjYzk3YjcuLjVmMGZkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2lvY3RsLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3JlcXVlc3QuaD4KQEAgLTE2MywxNiArMTY0LDEyIEBACiB7CiAJc2NzaV9sb2dfY29tcGxldGlvbihzY21kLCBUSU1FT1VUX0VSUk9SKTsKIAotCWlmIChzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3R0LT5laF90aW1lZF9vdXQpCi0JCXN3aXRjaCAoc2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+ZWhfdGltZWRfb3V0KHNjbWQpKSB7CisJaWYgKHNjbWQtPmRldmljZS0+aG9zdC0+dHJhbnNwb3J0dC0+ZWhfdGltZWRfb3V0KQorCQlzd2l0Y2ggKHNjbWQtPmRldmljZS0+aG9zdC0+dHJhbnNwb3J0dC0+ZWhfdGltZWRfb3V0KHNjbWQpKSB7CiAJCWNhc2UgRUhfSEFORExFRDoKIAkJCV9fc2NzaV9kb25lKHNjbWQpOwogCQkJcmV0dXJuOwogCQljYXNlIEVIX1JFU0VUX1RJTUVSOgotCQkJLyogVGhpcyBhbGxvd3MgYSBzaW5nbGUgcmV0cnkgZXZlbiBvZiBhIGNvbW1hbmQKLQkJCSAqIHdpdGggYWxsb3dlZCA9PSAwICovCi0JCQlpZiAoc2NtZC0+cmV0cmllcysrID4gc2NtZC0+YWxsb3dlZCkKLQkJCQlicmVhazsKIAkJCXNjc2lfYWRkX3RpbWVyKHNjbWQsIHNjbWQtPnRpbWVvdXRfcGVyX2NvbW1hbmQsCiAJCQkJICAgICAgIHNjc2lfdGltZXNfb3V0KTsKIAkJCXJldHVybjsKQEAgLTU4NCw4ICs1ODEsNyBAQAogICogICAga2VlcCBhIGxpc3Qgb2YgcGVuZGluZyBjb21tYW5kcyBmb3IgZmluYWwgY29tcGxldGlvbiwgYW5kIG9uY2Ugd2UKICAqICAgIGFyZSByZWFkeSB0byBsZWF2ZSBlcnJvciBoYW5kbGluZyB3ZSBoYW5kbGUgY29tcGxldGlvbiBmb3IgcmVhbC4KICAqKi8KLXN0YXRpYyB2b2lkIHNjc2lfZWhfZmluaXNoX2NtZChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAotCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRvbmVfcSkKK3ZvaWQgc2NzaV9laF9maW5pc2hfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHN0cnVjdCBsaXN0X2hlYWQgKmRvbmVfcSkKIHsKIAlzY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RfZmFpbGVkLS07CiAJc2NtZC0+ZWhfZWZsYWdzID0gMDsKQEAgLTU5Nyw2ICs1OTMsNyBAQAogCXNjc2lfc2V0dXBfY21kX3JldHJ5KHNjbWQpOwogCWxpc3RfbW92ZV90YWlsKCZzY21kLT5laF9lbnRyeSwgZG9uZV9xKTsKIH0KK0VYUE9SVF9TWU1CT0woc2NzaV9laF9maW5pc2hfY21kKTsKIAogLyoqCiAgKiBzY3NpX2VoX2dldF9zZW5zZSAtIEdldCBkZXZpY2Ugc2Vuc2UgZGF0YS4KQEAgLTEzMDgsNyArMTMwNSw3IEBACiAJICogdGhlIHJlcXVlc3Qgd2FzIG5vdCBtYXJrZWQgZmFzdCBmYWlsLiAgTm90ZSB0aGF0IGFib3ZlLAogCSAqIGV2ZW4gaWYgdGhlIHJlcXVlc3QgaXMgbWFya2VkIGZhc3QgZmFpbCwgd2Ugc3RpbGwgcmVxdWV1ZQogCSAqIGZvciBxdWV1ZSBjb25nZXN0aW9uIGNvbmRpdGlvbnMgKFFVRVVFX0ZVTEwgb3IgQlVTWSkgKi8KLQlpZiAoKCsrc2NtZC0+cmV0cmllcykgPCBzY21kLT5hbGxvd2VkIAorCWlmICgoKytzY21kLT5yZXRyaWVzKSA8PSBzY21kLT5hbGxvd2VkCiAJICAgICYmICFibGtfbm9yZXRyeV9yZXF1ZXN0KHNjbWQtPnJlcXVlc3QpKSB7CiAJCXJldHVybiBORUVEU19SRVRSWTsKIAl9IGVsc2UgewpAQCAtMTQyNSw3ICsxNDIyLDcgQEAKICAqIEBkb25lX3E6CWxpc3RfaGVhZCBvZiBwcm9jZXNzZWQgY29tbWFuZHMuCiAgKgogICoqLwotc3RhdGljIHZvaWQgc2NzaV9laF9mbHVzaF9kb25lX3Eoc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKQordm9pZCBzY3NpX2VoX2ZsdXNoX2RvbmVfcShzdHJ1Y3QgbGlzdF9oZWFkICpkb25lX3EpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgKm5leHQ7CiAKQEAgLTE0MzMsNyArMTQzMCw3IEBACiAJCWxpc3RfZGVsX2luaXQoJnNjbWQtPmVoX2VudHJ5KTsKIAkJaWYgKHNjc2lfZGV2aWNlX29ubGluZShzY21kLT5kZXZpY2UpICYmCiAJCSAgICAhYmxrX25vcmV0cnlfcmVxdWVzdChzY21kLT5yZXF1ZXN0KSAmJgotCQkgICAgKCsrc2NtZC0+cmV0cmllcyA8IHNjbWQtPmFsbG93ZWQpKSB7CisJCSAgICAoKytzY21kLT5yZXRyaWVzIDw9IHNjbWQtPmFsbG93ZWQpKSB7CiAJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBmbHVzaCIKIAkJCQkJCQkgICIgcmV0cnkgY21kOiAlcFxuIiwKIAkJCQkJCQkgIGN1cnJlbnQtPmNvbW0sCkBAIC0xNDU0LDYgKzE0NTEsNyBAQAogCQl9CiAJfQogfQorRVhQT1JUX1NZTUJPTChzY3NpX2VoX2ZsdXNoX2RvbmVfcSk7CiAKIC8qKgogICogc2NzaV91bmphbV9ob3N0IC0gQXR0ZW1wdCB0byBmaXggYSBob3N0IHdoaWNoIGhhcyBhIGNtZCB0aGF0IGZhaWxlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCmluZGV4IDBiYmE3ZDguLjM2ZTkzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYwpAQCAtMjQxLDEwICsyNDEsOSBAQAogCQlidWZfbmVlZGVkID0gKGJ1Zl9uZWVkZWQgKyA1MTEpICYgfjUxMTsKIAkJaWYgKGJ1Zl9uZWVkZWQgPiBNQVhfQlVGKQogCQkJYnVmX25lZWRlZCA9IE1BWF9CVUY7Ci0JCWJ1ZiA9IGttYWxsb2MoYnVmX25lZWRlZCwgZ2ZwX21hc2spOworCQlidWYgPSBremFsbG9jKGJ1Zl9uZWVkZWQsIGdmcF9tYXNrKTsKIAkJaWYgKCFidWYpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtc2V0KGJ1ZiwgMCwgYnVmX25lZWRlZCk7CiAJCWlmIChpbmxlbiA9PSAwKSB7CiAJCQlkYXRhX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAkJfSBlbHNlIGlmIChvdXRsZW4gPT0gMCApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggNDM2MmRjZC4uZWRlMTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTI4NiwxMyArMjg2LDEyIEBACiAJaW50IHJlc3VsdDsKIAkKIAlpZiAoc3NoZHIpIHsKLQkJc2Vuc2UgPSBrbWFsbG9jKFNDU0lfU0VOU0VfQlVGRkVSU0laRSwgR0ZQX05PSU8pOworCQlzZW5zZSA9IGt6YWxsb2MoU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCBHRlBfTk9JTyk7CiAJCWlmICghc2Vuc2UpCiAJCQlyZXR1cm4gRFJJVkVSX0VSUk9SIDw8IDI0OwotCQltZW1zZXQoc2Vuc2UsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CiAJfQogCXJlc3VsdCA9IHNjc2lfZXhlY3V0ZShzZGV2LCBjbWQsIGRhdGFfZGlyZWN0aW9uLCBidWZmZXIsIGJ1ZmZsZW4sCi0JCQkJICBzZW5zZSwgdGltZW91dCwgcmV0cmllcywgMCk7CisJCQkgICAgICBzZW5zZSwgdGltZW91dCwgcmV0cmllcywgMCk7CiAJaWYgKHNzaGRyKQogCQlzY3NpX25vcm1hbGl6ZV9zZW5zZShzZW5zZSwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCBzc2hkcik7CiAKQEAgLTE0OTgsNyArMTQ5Nyw3IEBACiBzdGF0aWMgdm9pZCBzY3NpX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kID0gcnEtPmNvbXBsZXRpb25fZGF0YTsKLQl1bnNpZ25lZCBsb25nIHdhaXRfZm9yID0gY21kLT5hbGxvd2VkICogY21kLT50aW1lb3V0X3Blcl9jb21tYW5kOworCXVuc2lnbmVkIGxvbmcgd2FpdF9mb3IgPSAoY21kLT5hbGxvd2VkICsgMSkgKiBjbWQtPnRpbWVvdXRfcGVyX2NvbW1hbmQ7CiAJaW50IGRpc3Bvc2l0aW9uOwogCiAJSU5JVF9MSVNUX0hFQUQoJmNtZC0+ZWhfZW50cnkpOwpAQCAtMTgxMiw2ICsxODExLDg0IEBACiAJCWttZW1fY2FjaGVfZGVzdHJveShzZ3AtPnNsYWIpOwogCX0KIH0KKworLyoqCisgKglzY3NpX21vZGVfc2VsZWN0IC0gaXNzdWUgYSBtb2RlIHNlbGVjdAorICoJQHNkZXY6CVNDU0kgZGV2aWNlIHRvIGJlIHF1ZXJpZWQKKyAqCUBwZjoJUGFnZSBmb3JtYXQgYml0ICgxID09IHN0YW5kYXJkLCAwID09IHZlbmRvciBzcGVjaWZpYykKKyAqCUBzcDoJU2F2ZSBwYWdlIGJpdCAoMCA9PSBkb24ndCBzYXZlLCAxID09IHNhdmUpCisgKglAbW9kZXBhZ2U6IG1vZGUgcGFnZSBiZWluZyByZXF1ZXN0ZWQKKyAqCUBidWZmZXI6IHJlcXVlc3QgYnVmZmVyIChtYXkgbm90IGJlIHNtYWxsZXIgdGhhbiBlaWdodCBieXRlcykKKyAqCUBsZW46CWxlbmd0aCBvZiByZXF1ZXN0IGJ1ZmZlci4KKyAqCUB0aW1lb3V0OiBjb21tYW5kIHRpbWVvdXQKKyAqCUByZXRyaWVzOiBudW1iZXIgb2YgcmV0cmllcyBiZWZvcmUgZmFpbGluZworICoJQGRhdGE6IHJldHVybnMgYSBzdHJ1Y3R1cmUgYWJzdHJhY3RpbmcgdGhlIG1vZGUgaGVhZGVyIGRhdGEKKyAqCUBzZW5zZTogcGxhY2UgdG8gcHV0IHNlbnNlIGRhdGEgKG9yIE5VTEwgaWYgbm8gc2Vuc2UgdG8gYmUgY29sbGVjdGVkKS4KKyAqCQltdXN0IGJlIFNDU0lfU0VOU0VfQlVGRkVSU0laRSBiaWcuCisgKgorICoJUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWw7IG5lZ2F0aXZlIGVycm9yIG51bWJlciBvciBzY3NpCisgKglzdGF0dXMgb24gZXJyb3IKKyAqCisgKi8KK2ludAorc2NzaV9tb2RlX3NlbGVjdChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBwZiwgaW50IHNwLCBpbnQgbW9kZXBhZ2UsCisJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBsZW4sIGludCB0aW1lb3V0LCBpbnQgcmV0cmllcywKKwkJIHN0cnVjdCBzY3NpX21vZGVfZGF0YSAqZGF0YSwgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKK3sKKwl1bnNpZ25lZCBjaGFyIGNtZFsxMF07CisJdW5zaWduZWQgY2hhciAqcmVhbF9idWZmZXI7CisJaW50IHJldDsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWRbMV0gPSAocGYgPyAweDEwIDogMCkgfCAoc3AgPyAweDAxIDogMCk7CisKKwlpZiAoc2Rldi0+dXNlXzEwX2Zvcl9tcykgeworCQlpZiAobGVuID4gNjU1MzUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVhbF9idWZmZXIgPSBrbWFsbG9jKDggKyBsZW4sIEdGUF9LRVJORUwpOworCQlpZiAoIXJlYWxfYnVmZmVyKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbWNweShyZWFsX2J1ZmZlciArIDgsIGJ1ZmZlciwgbGVuKTsKKwkJbGVuICs9IDg7CisJCXJlYWxfYnVmZmVyWzBdID0gMDsKKwkJcmVhbF9idWZmZXJbMV0gPSAwOworCQlyZWFsX2J1ZmZlclsyXSA9IGRhdGEtPm1lZGl1bV90eXBlOworCQlyZWFsX2J1ZmZlclszXSA9IGRhdGEtPmRldmljZV9zcGVjaWZpYzsKKwkJcmVhbF9idWZmZXJbNF0gPSBkYXRhLT5sb25nbGJhID8gMHgwMSA6IDA7CisJCXJlYWxfYnVmZmVyWzVdID0gMDsKKwkJcmVhbF9idWZmZXJbNl0gPSBkYXRhLT5ibG9ja19kZXNjcmlwdG9yX2xlbmd0aCA+PiA4OworCQlyZWFsX2J1ZmZlcls3XSA9IGRhdGEtPmJsb2NrX2Rlc2NyaXB0b3JfbGVuZ3RoOworCisJCWNtZFswXSA9IE1PREVfU0VMRUNUXzEwOworCQljbWRbN10gPSBsZW4gPj4gODsKKwkJY21kWzhdID0gbGVuOworCX0gZWxzZSB7CisJCWlmIChsZW4gPiAyNTUgfHwgZGF0YS0+YmxvY2tfZGVzY3JpcHRvcl9sZW5ndGggPiAyNTUgfHwKKwkJICAgIGRhdGEtPmxvbmdsYmEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZWFsX2J1ZmZlciA9IGttYWxsb2MoNCArIGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghcmVhbF9idWZmZXIpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtY3B5KHJlYWxfYnVmZmVyICsgNCwgYnVmZmVyLCBsZW4pOworCQlsZW4gKz0gNDsKKwkJcmVhbF9idWZmZXJbMF0gPSAwOworCQlyZWFsX2J1ZmZlclsxXSA9IGRhdGEtPm1lZGl1bV90eXBlOworCQlyZWFsX2J1ZmZlclsyXSA9IGRhdGEtPmRldmljZV9zcGVjaWZpYzsKKwkJcmVhbF9idWZmZXJbM10gPSBkYXRhLT5ibG9ja19kZXNjcmlwdG9yX2xlbmd0aDsKKwkJCisKKwkJY21kWzBdID0gTU9ERV9TRUxFQ1Q7CisJCWNtZFs0XSA9IGxlbjsKKwl9CisKKwlyZXQgPSBzY3NpX2V4ZWN1dGVfcmVxKHNkZXYsIGNtZCwgRE1BX1RPX0RFVklDRSwgcmVhbF9idWZmZXIsIGxlbiwKKwkJCSAgICAgICBzc2hkciwgdGltZW91dCwgcmV0cmllcyk7CisJa2ZyZWUocmVhbF9idWZmZXIpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzY3NpX21vZGVfc2VsZWN0KTsKKwogLyoqCiAgKglzY3NpX21vZGVfc2Vuc2UgLSBpc3N1ZSBhIG1vZGUgc2Vuc2UsIGZhbGxpbmcgYmFjayBmcm9tIDEwIHRvIAogICoJCXNpeCBieXRlcyBpZiBuZWNlc3NhcnkuCkBAIC0xODMzLDcgKzE5MTAsOCBAQAogaW50CiBzY3NpX21vZGVfc2Vuc2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGJkLCBpbnQgbW9kZXBhZ2UsCiAJCSAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuLCBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsCi0JCSAgc3RydWN0IHNjc2lfbW9kZV9kYXRhICpkYXRhLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKSB7CisJCSAgc3RydWN0IHNjc2lfbW9kZV9kYXRhICpkYXRhLCBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNzaGRyKQorewogCXVuc2lnbmVkIGNoYXIgY21kWzEyXTsKIAlpbnQgdXNlXzEwX2Zvcl9tczsKIAlpbnQgaGVhZGVyX2xlbmd0aDsKQEAgLTE4OTMsOCArMTk3MSwxNiBAQAogCX0KIAogCWlmKHNjc2lfc3RhdHVzX2lzX2dvb2QocmVzdWx0KSkgewotCQlkYXRhLT5oZWFkZXJfbGVuZ3RoID0gaGVhZGVyX2xlbmd0aDsKLQkJaWYodXNlXzEwX2Zvcl9tcykgeworCQlpZiAodW5saWtlbHkoYnVmZmVyWzBdID09IDB4ODYgJiYgYnVmZmVyWzFdID09IDB4MGIgJiYKKwkJCSAgICAgKG1vZGVwYWdlID09IDYgfHwgbW9kZXBhZ2UgPT0gOCkpKSB7CisJCQkvKiBJbml0aW8gYnJlYWthZ2U/ICovCisJCQloZWFkZXJfbGVuZ3RoID0gMDsKKwkJCWRhdGEtPmxlbmd0aCA9IDEzOworCQkJZGF0YS0+bWVkaXVtX3R5cGUgPSAwOworCQkJZGF0YS0+ZGV2aWNlX3NwZWNpZmljID0gMDsKKwkJCWRhdGEtPmxvbmdsYmEgPSAwOworCQkJZGF0YS0+YmxvY2tfZGVzY3JpcHRvcl9sZW5ndGggPSAwOworCQl9IGVsc2UgaWYodXNlXzEwX2Zvcl9tcykgewogCQkJZGF0YS0+bGVuZ3RoID0gYnVmZmVyWzBdKjI1NiArIGJ1ZmZlclsxXSArIDI7CiAJCQlkYXRhLT5tZWRpdW1fdHlwZSA9IGJ1ZmZlclsyXTsKIAkJCWRhdGEtPmRldmljZV9zcGVjaWZpYyA9IGJ1ZmZlclszXTsKQEAgLTE5MDcsNiArMTk5Myw3IEBACiAJCQlkYXRhLT5kZXZpY2Vfc3BlY2lmaWMgPSBidWZmZXJbMl07CiAJCQlkYXRhLT5ibG9ja19kZXNjcmlwdG9yX2xlbmd0aCA9IGJ1ZmZlclszXTsKIAkJfQorCQlkYXRhLT5oZWFkZXJfbGVuZ3RoID0gaGVhZGVyX2xlbmd0aDsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjI0OSw2MSArMjMzNiwzIEBACiAJCWRldmljZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIHRhcmdldF91bmJsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfdGFyZ2V0X3VuYmxvY2spOwotCi0KLXN0cnVjdCB3b3JrX3F1ZXVlX3dvcmsgewotCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwotCXZvaWQJCQkoKmZuKSh2b2lkICopOwotCXZvaWQJCQkqZGF0YTsKLX07Ci0KLXN0YXRpYyB2b2lkIGV4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0X3dvcmsodm9pZCAqZGF0YSkKLXsKLQl2b2lkICgqZm4pKHZvaWQgKmRhdGEpOwotCXN0cnVjdCB3b3JrX3F1ZXVlX3dvcmsgKndxdyA9IGRhdGE7Ci0KLQlmbiA9IHdxdy0+Zm47Ci0JZGF0YSA9IHdxdy0+ZGF0YTsKLQotCWtmcmVlKHdxdyk7Ci0KLQlmbihkYXRhKTsKLX0KLQotLyoqCi0gKiBzY3NpX2V4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0IC0gcmVsaWFibHkgZXhlY3V0ZSB0aGUgcm91dGluZSB3aXRoIHVzZXIgY29udGV4dAotICogQGZuOgkJdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUKLSAqIEBkYXRhOglkYXRhIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uCi0gKgotICogRXhlY3V0ZXMgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGlmIHByb2Nlc3MgY29udGV4dCBpcyBhdmFpbGFibGUsCi0gKiBvdGhlcndpc2Ugc2NoZWR1bGVzIHRoZSBmdW5jdGlvbiBmb3IgZGVsYXllZCBleGVjdXRpb24uCi0gKgotICogUmV0dXJuczoJMCAtIGZ1bmN0aW9uIHdhcyBleGVjdXRlZAotICoJCTEgLSBmdW5jdGlvbiB3YXMgc2NoZWR1bGVkIGZvciBleGVjdXRpb24KLSAqCQk8MCAtIGVycm9yCi0gKi8KLWludCBzY3NpX2V4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0KHZvaWQgKCpmbikodm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHdvcmtfcXVldWVfd29yayAqd3F3OwotCi0JaWYgKCFpbl9pbnRlcnJ1cHQoKSkgewotCQlmbihkYXRhKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jd3F3ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdvcmtfcXVldWVfd29yayksIEdGUF9BVE9NSUMpOwotCi0JaWYgKHVubGlrZWx5KCF3cXcpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCUlOSVRfV09SSygmd3F3LT53b3JrLCBleGVjdXRlX2luX3Byb2Nlc3NfY29udGV4dF93b3JrLCB3cXcpOwotCXdxdy0+Zm4gPSBmbjsKLQl3cXctPmRhdGEgPSBkYXRhOwotCXNjaGVkdWxlX3dvcmsoJndxdy0+d29yayk7Ci0KLQlyZXR1cm4gMTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDVhY2I4M2MuLmYxNDk0NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTIwNSwxMiArMjA1LDExIEBACiAJaW50IGRpc3BsYXlfZmFpbHVyZV9tc2cgPSAxLCByZXQ7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3Qoc3RhcmdldC0+ZGV2LnBhcmVudCk7CiAKLQlzZGV2ID0ga21hbGxvYyhzaXplb2YoKnNkZXYpICsgc2hvc3QtPnRyYW5zcG9ydHQtPmRldmljZV9zaXplLAorCXNkZXYgPSBremFsbG9jKHNpemVvZigqc2RldikgKyBzaG9zdC0+dHJhbnNwb3J0dC0+ZGV2aWNlX3NpemUsCiAJCSAgICAgICBHRlBfQVRPTUlDKTsKIAlpZiAoIXNkZXYpCiAJCWdvdG8gb3V0OwogCi0JbWVtc2V0KHNkZXYsIDAsIHNpemVvZigqc2RldikpOwogCXNkZXYtPnZlbmRvciA9IHNjc2lfbnVsbF9kZXZpY2Vfc3RyczsKIAlzZGV2LT5tb2RlbCA9IHNjc2lfbnVsbF9kZXZpY2Vfc3RyczsKIAlzZGV2LT5yZXYgPSBzY3NpX251bGxfZGV2aWNlX3N0cnM7CkBAIC0yNTIsNiArMjUxLDcgQEAKIAkJLyogcmVsZWFzZSBmbiBpcyBzZXQgdXAgaW4gc2NzaV9zeXNmc19kZXZpY2VfaW5pdGlhbGlzZSwgc28KIAkJICogaGF2ZSB0byBmcmVlIGFuZCBwdXQgbWFudWFsbHkgaGVyZSAqLwogCQlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOworCQlrZnJlZShzZGV2KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yODgsMTAgKzI4OCw3IEBACiB7CiAJc3RydWN0IGRldmljZSAqcGFyZW50ID0gZGV2LT5wYXJlbnQ7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0ID0gdG9fc2NzaV90YXJnZXQoZGV2KTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChwYXJlbnQpOwogCi0JaWYgKHNob3N0LT5ob3N0dC0+dGFyZ2V0X2Rlc3Ryb3kpCi0JCXNob3N0LT5ob3N0dC0+dGFyZ2V0X2Rlc3Ryb3koc3RhcmdldCk7CiAJa2ZyZWUoc3RhcmdldCk7CiAJcHV0X2RldmljZShwYXJlbnQpOwogfQpAQCAtMzMzLDEzICszMzAsMTMgQEAKIAkJKyBzaG9zdC0+dHJhbnNwb3J0dC0+dGFyZ2V0X3NpemU7CiAJc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0OwogCXN0cnVjdCBzY3NpX3RhcmdldCAqZm91bmRfdGFyZ2V0OworCWludCBlcnJvcjsKIAotCXN0YXJnZXQgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCXN0YXJnZXQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghc3RhcmdldCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQoc3RhcmdldCwgMCwgc2l6ZSk7CiAJZGV2ID0gJnN0YXJnZXQtPmRldjsKIAlkZXZpY2VfaW5pdGlhbGl6ZShkZXYpOwogCXN0YXJnZXQtPnJlYXBfcmVmID0gMTsKQEAgLTM1MSw2ICszNDgsOCBAQAogCXN0YXJnZXQtPmNoYW5uZWwgPSBjaGFubmVsOwogCUlOSVRfTElTVF9IRUFEKCZzdGFyZ2V0LT5zaWJsaW5ncyk7CiAJSU5JVF9MSVNUX0hFQUQoJnN0YXJnZXQtPmRldmljZXMpOworCXN0YXJnZXQtPnN0YXRlID0gU1RBUkdFVF9SVU5OSU5HOworIHJldHJ5OgogCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCWZvdW5kX3RhcmdldCA9IF9fc2NzaV9maW5kX3RhcmdldChwYXJlbnQsIGNoYW5uZWwsIGlkKTsKQEAgLTM2MSwxMCArMzYwLDIwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJLyogYWxsb2NhdGUgYW5kIGFkZCAqLwogCXRyYW5zcG9ydF9zZXR1cF9kZXZpY2UoZGV2KTsKLQlkZXZpY2VfYWRkKGRldik7CisJZXJyb3IgPSBkZXZpY2VfYWRkKGRldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAidGFyZ2V0IGRldmljZV9hZGQgZmFpbGVkLCBlcnJvciAlZFxuIiwgZXJyb3IpOworCQlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZGVsX2luaXQoJnN0YXJnZXQtPnNpYmxpbmdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOworCQlwdXRfZGV2aWNlKHBhcmVudCk7CisJCWtmcmVlKHN0YXJnZXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAJdHJhbnNwb3J0X2FkZF9kZXZpY2UoZGV2KTsKIAlpZiAoc2hvc3QtPmhvc3R0LT50YXJnZXRfYWxsb2MpIHsKLQkJaW50IGVycm9yID0gc2hvc3QtPmhvc3R0LT50YXJnZXRfYWxsb2Moc3RhcmdldCk7CisJCWVycm9yID0gc2hvc3QtPmhvc3R0LT50YXJnZXRfYWxsb2Moc3RhcmdldCk7CiAKIAkJaWYoZXJyb3IpIHsKIAkJCWRldl9wcmludGsoS0VSTl9FUlIsIGRldiwgInRhcmdldCBhbGxvY2F0aW9uIGZhaWxlZCwgZXJyb3IgJWRcbiIsIGVycm9yKTsKQEAgLTM4Myw4ICszOTIsMTUgQEAKIAlmb3VuZF90YXJnZXQtPnJlYXBfcmVmKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJcHV0X2RldmljZShwYXJlbnQpOwotCWtmcmVlKHN0YXJnZXQpOwotCXJldHVybiBmb3VuZF90YXJnZXQ7CisJaWYgKGZvdW5kX3RhcmdldC0+c3RhdGUgIT0gU1RBUkdFVF9ERUwpIHsKKwkJa2ZyZWUoc3RhcmdldCk7CisJCXJldHVybiBmb3VuZF90YXJnZXQ7CisJfQorCS8qIFVuZm9ydHVuYXRlbHksIHdlIGZvdW5kIGEgZHlpbmcgdGFyZ2V0OyBuZWVkIHRvCisJICogd2FpdCB1bnRpbCBpdCdzIGRlYWQgYmVmb3JlIHdlIGNhbiBnZXQgYSBuZXcgb25lICovCisJcHV0X2RldmljZSgmZm91bmRfdGFyZ2V0LT5kZXYpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJZ290byByZXRyeTsKIH0KIAogc3RhdGljIHZvaWQgc2NzaV90YXJnZXRfcmVhcF91c2VyY29udGV4dCh2b2lkICpkYXRhKQpAQCAtMzkzLDIxICs0MDksMTUgQEAKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdHJhbnNwb3J0X3JlbW92ZV9kZXZpY2UoJnN0YXJnZXQtPmRldik7CisJZGV2aWNlX2RlbCgmc3RhcmdldC0+ZGV2KTsKKwl0cmFuc3BvcnRfZGVzdHJveV9kZXZpY2UoJnN0YXJnZXQtPmRldik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JaWYgKC0tc3RhcmdldC0+cmVhcF9yZWYgPT0gMCAmJiBsaXN0X2VtcHR5KCZzdGFyZ2V0LT5kZXZpY2VzKSkgewotCQlsaXN0X2RlbF9pbml0KCZzdGFyZ2V0LT5zaWJsaW5ncyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCQl0cmFuc3BvcnRfcmVtb3ZlX2RldmljZSgmc3RhcmdldC0+ZGV2KTsKLQkJZGV2aWNlX2RlbCgmc3RhcmdldC0+ZGV2KTsKLQkJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwotCQlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwotCQlyZXR1cm47Ci0KLQl9CisJaWYgKHNob3N0LT5ob3N0dC0+dGFyZ2V0X2Rlc3Ryb3kpCisJCXNob3N0LT5ob3N0dC0+dGFyZ2V0X2Rlc3Ryb3koc3RhcmdldCk7CisJbGlzdF9kZWxfaW5pdCgmc3RhcmdldC0+c2libGluZ3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuOworCXB1dF9kZXZpY2UoJnN0YXJnZXQtPmRldik7CiB9CiAKIC8qKgpAQCAtNDIxLDcgKzQzMSwyMyBAQAogICovCiB2b2lkIHNjc2lfdGFyZ2V0X3JlYXAoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQogewotCXNjc2lfZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQoc2NzaV90YXJnZXRfcmVhcF91c2VyY29udGV4dCwgc3RhcmdldCk7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3Qoc3RhcmdldC0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKworCWlmICgtLXN0YXJnZXQtPnJlYXBfcmVmID09IDAgJiYgbGlzdF9lbXB0eSgmc3RhcmdldC0+ZGV2aWNlcykpIHsKKwkJQlVHX09OKHN0YXJnZXQtPnN0YXRlID09IFNUQVJHRVRfREVMKTsKKwkJc3RhcmdldC0+c3RhdGUgPSBTVEFSR0VUX0RFTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCWV4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0KHNjc2lfdGFyZ2V0X3JlYXBfdXNlcmNvbnRleHQsCisJCQkJCSAgIHN0YXJnZXQsICZzdGFyZ2V0LT5ldyk7CisJCXJldHVybjsKKworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybjsKIH0KIAogLyoqCkBAIC02ODksMTIgKzcxNSw4IEBACiAJaWYgKGlucV9yZXN1bHRbN10gJiAweDEwKQogCQlzZGV2LT5zZHRyID0gMTsKIAotCXNwcmludGYoc2Rldi0+ZGV2ZnNfbmFtZSwgInNjc2kvaG9zdCVkL2J1cyVkL3RhcmdldCVkL2x1biVkIiwKLQkJCQlzZGV2LT5ob3N0LT5ob3N0X25vLCBzZGV2LT5jaGFubmVsLAotCQkJCXNkZXYtPmlkLCBzZGV2LT5sdW4pOwotCiAJLyoKLQkgKiBFbmQgZHJpdmVyZnMvZGV2ZnMgY29kZS4KKwkgKiBFbmQgc3lzZnMgY29kZS4KIAkgKi8KIAogCWlmICgoc2Rldi0+c2NzaV9sZXZlbCA+PSBTQ1NJXzIpICYmIChpbnFfcmVzdWx0WzddICYgMikgJiYKQEAgLTc1Miw4ICs3NzQsMjAgQEAKIAogCXRyYW5zcG9ydF9jb25maWd1cmVfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAKLQlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2NvbmZpZ3VyZSkKLQkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2NvbmZpZ3VyZShzZGV2KTsKKwlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2NvbmZpZ3VyZSkgeworCQlpbnQgcmV0ID0gc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2NvbmZpZ3VyZShzZGV2KTsKKwkJaWYgKHJldCkgeworCQkJLyoKKwkJCSAqIGlmIExMREQgcmVwb3J0cyBzbGF2ZSBub3QgcHJlc2VudCwgZG9uJ3QgY2x1dHRlcgorCQkJICogY29uc29sZSB3aXRoIGFsbG9jIGZhaWx1cmUgbWVzc2FnZXMKKwkJCSAqLworCQkJaWYgKHJldCAhPSAtRU5YSU8pIHsKKwkJCQlzZGV2X3ByaW50ayhLRVJOX0VSUiwgc2RldiwKKwkJCQkJImZhaWxlZCB0byBjb25maWd1cmUgZGV2aWNlXG4iKTsKKwkJCX0KKwkJCXJldHVybiBTQ1NJX1NDQU5fTk9fUkVTUE9OU0U7CisJCX0KKwl9CiAKIAkvKgogCSAqIE9rLCB0aGUgZGV2aWNlIGlzIG5vdyBhbGwgc2V0IHVwLCB3ZSBjYW4KQEAgLTg1OSw2ICs4OTMsMTkgQEAKIAkJZ290byBvdXRfZnJlZV9yZXN1bHQ7CiAJfQogCisJLyoKKwkgKiBOb24tc3RhbmRhcmQgU0NTSSB0YXJnZXRzIG1heSBzZXQgdGhlIFBEVCB0byAweDFmICh1bmtub3duIG9yCisJICogbm8gZGV2aWNlIHR5cGUpIGluc3RlYWQgb2YgdXNpbmcgdGhlIFBlcmlwaGVyYWwgUXVhbGlmaWVyIHRvCisJICogaW5kaWNhdGUgdGhhdCBubyBMVU4gaXMgcHJlc2VudC4gIEZvciBleGFtcGxlLCBVU0IgVUZJIGRvZXMgdGhpcy4KKwkgKi8KKwlpZiAoc3RhcmdldC0+cGR0XzFmX2Zvcl9ub19sdW4gJiYgKHJlc3VsdFswXSAmIDB4MWYpID09IDB4MWYpIHsKKwkJU0NTSV9MT0dfU0NBTl9CVVMoMywgcHJpbnRrKEtFUk5fSU5GTworCQkJCQkic2NzaSBzY2FuOiBwZXJpcGhlcmFsIGRldmljZSB0eXBlIgorCQkJCQkiIG9mIDMxLCBubyBkZXZpY2UgYWRkZWRcbiIpKTsKKwkJcmVzID0gU0NTSV9TQ0FOX1RBUkdFVF9QUkVTRU5UOworCQlnb3RvIG91dF9mcmVlX3Jlc3VsdDsKKwl9CisKIAlyZXMgPSBzY3NpX2FkZF9sdW4oc2RldiwgcmVzdWx0LCAmYmZsYWdzKTsKIAlpZiAocmVzID09IFNDU0lfU0NBTl9MVU5fUFJFU0VOVCkgewogCQlpZiAoYmZsYWdzICYgQkxJU1RfS0VZKSB7CkBAIC0xMjQ5LDkgKzEyOTYsOCBAQAogc3RydWN0IHNjc2lfZGV2aWNlICpfX3Njc2lfYWRkX2RldmljZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdWludCBjaGFubmVsLAogCQkJCSAgICAgIHVpbnQgaWQsIHVpbnQgbHVuLCB2b2lkICpob3N0ZGF0YSkKIHsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gRVJSX1BUUigtRU5PREVWKTsKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSAmc2hvc3QtPnNob3N0X2dlbmRldjsKLQlpbnQgcmVzOwogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKIAogCXN0YXJnZXQgPSBzY3NpX2FsbG9jX3RhcmdldChwYXJlbnQsIGNoYW5uZWwsIGlkKTsKQEAgLTEyNjAsMTIgKzEzMDYsOCBAQAogCiAJZ2V0X2RldmljZSgmc3RhcmdldC0+ZGV2KTsKIAltdXRleF9sb2NrKCZzaG9zdC0+c2Nhbl9tdXRleCk7Ci0JaWYgKHNjc2lfaG9zdF9zY2FuX2FsbG93ZWQoc2hvc3QpKSB7Ci0JCXJlcyA9IHNjc2lfcHJvYmVfYW5kX2FkZF9sdW4oc3RhcmdldCwgbHVuLCBOVUxMLCAmc2RldiwgMSwKLQkJCQkJICAgICBob3N0ZGF0YSk7Ci0JCWlmIChyZXMgIT0gU0NTSV9TQ0FOX0xVTl9QUkVTRU5UKQotCQkJc2RldiA9IEVSUl9QVFIoLUVOT0RFVik7Ci0JfQorCWlmIChzY3NpX2hvc3Rfc2Nhbl9hbGxvd2VkKHNob3N0KSkKKwkJc2NzaV9wcm9iZV9hbmRfYWRkX2x1bihzdGFyZ2V0LCBsdW4sIE5VTEwsICZzZGV2LCAxLCBob3N0ZGF0YSk7CiAJbXV0ZXhfdW5sb2NrKCZzaG9zdC0+c2Nhbl9tdXRleCk7CiAJc2NzaV90YXJnZXRfcmVhcChzdGFyZ2V0KTsKIAlwdXRfZGV2aWNlKCZzdGFyZ2V0LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggOTAyYTVkZS4uYTZmZGU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC0yNTYsNyArMjU2LDkgQEAKIAogc3RhdGljIHZvaWQgc2NzaV9kZXZpY2VfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXNjc2lfZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQoc2NzaV9kZXZpY2VfZGV2X3JlbGVhc2VfdXNlcmNvbnRleHQsCWRldik7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZHAgPSB0b19zY3NpX2RldmljZShkZXYpOworCWV4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0KHNjc2lfZGV2aWNlX2Rldl9yZWxlYXNlX3VzZXJjb250ZXh0LCBkZXYsCisJCQkJICAgJnNkcC0+ZXcpOwogfQogCiBzdGF0aWMgc3RydWN0IGNsYXNzIHNkZXZfY2xhc3MgPSB7CkBAIC0yODQsNyArMjg2LDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChzaHQtPnN1c3BlbmQpCi0JCWVyciA9IHNodC0+c3VzcGVuZChzZGV2KTsKKwkJZXJyID0gc2h0LT5zdXNwZW5kKHNkZXYsIHN0YXRlKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IGYyYzlhY2YuLjhkYjY1NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSAic2NzaV9wcml2LmgiCiAKIC8qCkBAIC0yMjMsNyArMjI0LDcgQEAKICAqLwogI2RlZmluZSBGQ19TVEFSR0VUX05VTV9BVFRSUyAJMwogI2RlZmluZSBGQ19SUE9SVF9OVU1fQVRUUlMJOQotI2RlZmluZSBGQ19IT1NUX05VTV9BVFRSUwkxNgorI2RlZmluZSBGQ19IT1NUX05VTV9BVFRSUwkxNwogCiBzdHJ1Y3QgZmNfaW50ZXJuYWwgewogCXN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSB0OwpAQCAtMTA5MCw2ICsxMDkxLDQwIEBACiB9CiAKIAorLyoqCisgKiBmY190aW1lZF9vdXQgLSBGQyBUcmFuc3BvcnQgSS9PIHRpbWVvdXQgaW50ZXJjZXB0IGhhbmRsZXIKKyAqCisgKiBAc2NtZDoJVGhlIFNDU0kgY29tbWFuZCB3aGljaCB0aW1lZCBvdXQKKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJvdGVjdHMgYWdhaW5zdCBlcnJvciBoYW5kbGVycyBnZXR0aW5nIGludm9rZWQgd2hpbGUgYQorICogcnBvcnQgaXMgaW4gYSBibG9ja2VkIHN0YXRlLCB0eXBpY2FsbHkgZHVlIHRvIGEgdGVtcG9yYXJpbHkgbG9zcyBvZgorICogY29ubmVjdGl2aXR5LiBJZiB0aGUgZXJyb3IgaGFuZGxlcnMgYXJlIGFsbG93ZWQgdG8gcHJvY2VlZCwgcmVxdWVzdHMKKyAqIHRvIGFib3J0IGkvbywgcmVzZXQgdGhlIHRhcmdldCwgZXRjIHdpbGwgbGlrZWx5IGZhaWwgYXMgdGhlcmUgaXMgbm8gd2F5CisgKiB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkZXZpY2UgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9uLiBUaGVzZQorICogZmFpbHVyZXMgbWF5IHJlc3VsdCBpbiB0aGUgbWlkbGF5ZXIgdGFraW5nIHRoZSBkZXZpY2Ugb2ZmbGluZSwgcmVxdWlyaW5nCisgKiBtYW51YWwgaW50ZXJ2ZW50aW9uIHRvIHJlc3RvcmUgb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgcm91dGluZSwgY2FsbGVkIHdoZW5ldmVyIGFuIGkvbyB0aW1lcyBvdXQsIHZhbGlkYXRlcyB0aGUgc3RhdGUgb2YKKyAqIHRoZSB1bmRlcmx5aW5nIHJwb3J0LiBJZiB0aGUgcnBvcnQgaXMgYmxvY2tlZCwgaXQgcmV0dXJucworICogRUhfUkVTRVRfVElNRVIsIHdoaWNoIHdpbGwgY29udGludWUgdG8gcmVzY2hlZHVsZSB0aGUgdGltZW91dC4KKyAqIEV2ZW50dWFsbHksIGVpdGhlciB0aGUgZGV2aWNlIHdpbGwgcmV0dXJuLCBvciBkZXZsb3NzX3RtbyB3aWxsIGZpcmUsCisgKiBhbmQgd2hlbiB0aGUgdGltZW91dCB0aGVuIGZpcmVzLCBpdCB3aWxsIGJlIGhhbmRsZWQgbm9ybWFsbHkuCisgKiBJZiB0aGUgcnBvcnQgaXMgbm90IGJsb2NrZWQsIG5vcm1hbCBlcnJvciBoYW5kbGluZyBjb250aW51ZXMuCisgKgorICogTm90ZXM6CisgKglUaGlzIHJvdXRpbmUgYXNzdW1lcyBubyBsb2NrcyBhcmUgaGVsZCBvbiBlbnRyeS4KKyAqKi8KK3N0YXRpYyBlbnVtIHNjc2lfZWhfdGltZXJfcmV0dXJuCitmY190aW1lZF9vdXQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzY21kLT5kZXZpY2UpKTsKKworCWlmIChycG9ydC0+cG9ydF9zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfQkxPQ0tFRCkKKwkJcmV0dXJuIEVIX1JFU0VUX1RJTUVSOworCisJcmV0dXJuIEVIX05PVF9IQU5ETEVEOworfQorCiAvKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzaG9zdC0+aG9zdF9sb2NrIGhlbGQKICAqLwpAQCAtMTExNSwxNSArMTE1MCwxMyBAQAogc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICoKIGZjX2F0dGFjaF90cmFuc3BvcnQoc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlICpmdCkKIHsKLQlzdHJ1Y3QgZmNfaW50ZXJuYWwgKmkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmNfaW50ZXJuYWwpLAotCQkJCQlHRlBfS0VSTkVMKTsKIAlpbnQgY291bnQ7CisJc3RydWN0IGZjX2ludGVybmFsICppID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZjX2ludGVybmFsKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CiAKIAlpZiAodW5saWtlbHkoIWkpKQogCQlyZXR1cm4gTlVMTDsKIAotCW1lbXNldChpLCAwLCBzaXplb2Yoc3RydWN0IGZjX2ludGVybmFsKSk7Ci0KIAlpLT50LnRhcmdldF9hdHRycy5hYy5hdHRycyA9ICZpLT5zdGFyZ2V0X2F0dHJzWzBdOwogCWktPnQudGFyZ2V0X2F0dHJzLmFjLmNsYXNzID0gJmZjX3RyYW5zcG9ydF9jbGFzcy5jbGFzczsKIAlpLT50LnRhcmdldF9hdHRycy5hYy5tYXRjaCA9IGZjX3RhcmdldF9tYXRjaDsKQEAgLTExNDgsNiArMTE4MSw4IEBACiAJLyogVHJhbnNwb3J0IHVzZXMgdGhlIHNob3N0IHdvcmtxIGZvciBzY3NpIHNjYW5uaW5nICovCiAJaS0+dC5jcmVhdGVfd29ya19xdWV1ZSA9IDE7CiAKKwlpLT50LmVoX3RpbWVkX291dCA9IGZjX3RpbWVkX291dDsKKwogCWktPnQudXNlcl9zY2FuID0gZmNfdXNlcl9zY2FuOwogCQogCS8qCkBAIC0xMzA1LDEyICsxMzQwLDExIEBACiAJc2l6ZV90IHNpemU7CiAKIAlzaXplID0gKHNpemVvZihzdHJ1Y3QgZmNfcnBvcnQpICsgZmNpLT5mLT5kZF9mY3Jwb3J0X3NpemUpOwotCXJwb3J0ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlycG9ydCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFycG9ydCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JbWVtc2V0KHJwb3J0LCAwLCBzaXplKTsKIAogCXJwb3J0LT5tYXhmcmFtZV9zaXplID0gLTE7CiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX1VOU1BFQ0lGSUVEOwpAQCAtMTQ5OCw4ICsxNTMyLDcgQEAKIAl9CiAKIAkvKiBTZWFyY2ggdGhlIGJpbmRpbmdzIGFycmF5ICovCi0JaWYgKGxpa2VseSgoaWRzLT5yb2xlcyAmIEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVCkgJiYKLQkJKGZjX2hvc3RfdGd0aWRfYmluZF90eXBlKHNob3N0KSAhPSBGQ19UR1RJRF9CSU5EX05PTkUpKSkgeworCWlmIChmY19ob3N0X3RndGlkX2JpbmRfdHlwZShzaG9zdCkgIT0gRkNfVEdUSURfQklORF9OT05FKSB7CiAKIAkJLyogc2VhcmNoIGZvciBhIG1hdGNoaW5nIGNvbnNpc3RlbnQgYmluZGluZyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCmluZGV4IDcxZTU0YTYuLjI3MzBkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCkBAIC0xMTE3LDEwICsxMTE3LDkgQEAKIAlpZiAocHJpdikKIAkJcmV0dXJuIE5VTEw7CiAKLQlwcml2ID0ga21hbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChwcml2LCAwLCBzaXplb2YoKnByaXYpKTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+bGlzdCk7CiAJcHJpdi0+aXNjc2lfdHJhbnNwb3J0ID0gdHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwppbmRleCAyMTBkYWI1Li4xMzRjNDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBEZWxsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IERlbGwgSW5jLgogICoJUmVsZWFzZWQgdW5kZXIgR1BMIHYyLgogICoKICAqIFNlcmlhbCBBdHRhY2hlZCBTQ1NJIChTQVMpIHRyYW5zcG9ydCBjbGFzcy4KQEAgLTM4LDcgKzM4LDkgQEAKIAogI2RlZmluZSBTQVNfSE9TVF9BVFRSUwkJMAogI2RlZmluZSBTQVNfUE9SVF9BVFRSUwkJMTcKLSNkZWZpbmUgU0FTX1JQT1JUX0FUVFJTCQk1CisjZGVmaW5lIFNBU19SUE9SVF9BVFRSUwkJNworI2RlZmluZSBTQVNfRU5EX0RFVl9BVFRSUwkzCisjZGVmaW5lIFNBU19FWFBBTkRFUl9BVFRSUwk3CiAKIHN0cnVjdCBzYXNfaW50ZXJuYWwgewogCXN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSB0OwpAQCAtNDcsOSArNDksMTMgQEAKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2hvc3RfYXR0cnNbU0FTX0hPU1RfQVRUUlNdOwogCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfcGh5X2F0dHJzW1NBU19QT1JUX0FUVFJTXTsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX3JwaHlfYXR0cnNbU0FTX1JQT1JUX0FUVFJTXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBwcml2YXRlX2VuZF9kZXZfYXR0cnNbU0FTX0VORF9ERVZfQVRUUlNdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHByaXZhdGVfZXhwYW5kZXJfYXR0cnNbU0FTX0VYUEFOREVSX0FUVFJTXTsKIAogCXN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHBoeV9hdHRyX2NvbnQ7CiAJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgcnBoeV9hdHRyX2NvbnQ7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgZW5kX2Rldl9hdHRyX2NvbnQ7CisJc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgZXhwYW5kZXJfYXR0cl9jb250OwogCiAJLyoKIAkgKiBUaGUgYXJyYXkgb2YgbnVsbCB0ZXJtaW5hdGVkIHBvaW50ZXJzIHRvIGF0dHJpYnV0ZXMKQEAgLTU4LDYgKzY0LDggQEAKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqaG9zdF9hdHRyc1tTQVNfSE9TVF9BVFRSUyArIDFdOwogCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpwaHlfYXR0cnNbU0FTX1BPUlRfQVRUUlMgKyAxXTsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqcnBoeV9hdHRyc1tTQVNfUlBPUlRfQVRUUlMgKyAxXTsKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZW5kX2Rldl9hdHRyc1tTQVNfRU5EX0RFVl9BVFRSUyArIDFdOworCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpleHBhbmRlcl9hdHRyc1tTQVNfRVhQQU5ERVJfQVRUUlMgKyAxXTsKIH07CiAjZGVmaW5lIHRvX3Nhc19pbnRlcm5hbCh0bXBsKQljb250YWluZXJfb2YodG1wbCwgc3RydWN0IHNhc19pbnRlcm5hbCwgdCkKIApAQCAtNjUsNiArNzMsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcnBoeV9saXN0OwogCXN0cnVjdCBtdXRleCBsb2NrOwogCXUzMiBuZXh0X3RhcmdldF9pZDsKKwl1MzIgbmV4dF9leHBhbmRlcl9pZDsKIH07CiAjZGVmaW5lIHRvX3Nhc19ob3N0X2F0dHJzKGhvc3QpCSgoc3RydWN0IHNhc19ob3N0X2F0dHJzICopKGhvc3QpLT5zaG9zdF9kYXRhKQogCkBAIC0xNTEsNiArMTYwLDcgQEAKIAl7IFNBU19TQVRBX1NQSU5VUF9IT0xELAkJIlNwaW4tdXAgaG9sZCIgfSwKIAl7IFNBU19MSU5LX1JBVEVfMV81X0dCUFMsCSIxLjUgR2JpdCIgfSwKIAl7IFNBU19MSU5LX1JBVEVfM18wX0dCUFMsCSIzLjAgR2JpdCIgfSwKKwl7IFNBU19MSU5LX1JBVEVfNl8wX0dCUFMsCSI2LjAgR2JpdCIgfSwKIH07CiBzYXNfYml0ZmllbGRfbmFtZV9zZWFyY2gobGlua3NwZWVkLCBzYXNfbGlua3NwZWVkX25hbWVzKQogCkBAIC0xNjgsNiArMTc4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmc2FzX2hvc3QtPnJwaHlfbGlzdCk7CiAJbXV0ZXhfaW5pdCgmc2FzX2hvc3QtPmxvY2spOwogCXNhc19ob3N0LT5uZXh0X3RhcmdldF9pZCA9IDA7CisJc2FzX2hvc3QtPm5leHRfZXhwYW5kZXJfaWQgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC0yNzIsNyArMjgzLDcgQEAKIAlpZiAoIXBoeS0+bG9jYWxfYXR0YWNoZWQpCQkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAkJCQkJCQkJCVwKLQllcnJvciA9IGktPmYtPmdldF9saW5rZXJyb3JzKHBoeSk7CQkJCVwKKwllcnJvciA9IGktPmYtPmdldF9saW5rZXJyb3JzID8gaS0+Zi0+Z2V0X2xpbmtlcnJvcnMocGh5KSA6IDA7CVwKIAlpZiAoZXJyb3IpCQkJCQkJCVwKIAkJcmV0dXJuIGVycm9yOwkJCQkJCVwKIAlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiV1XG4iLCBwaHktPmZpZWxkKTsJCQlcCkBAIC0zOTEsMTAgKzQwMiw5IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBkZXZfdG9fc2hvc3QocGFyZW50KTsKIAlzdHJ1Y3Qgc2FzX3BoeSAqcGh5OwogCi0JcGh5ID0ga21hbGxvYyhzaXplb2YoKnBoeSksIEdGUF9LRVJORUwpOworCXBoeSA9IGt6YWxsb2Moc2l6ZW9mKCpwaHkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBoeSkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KHBoeSwgMCwgc2l6ZW9mKCpwaHkpKTsKIAogCWdldF9kZXZpY2UocGFyZW50KTsKIApAQCAtNDAzLDcgKzQxMywxMiBAQAogCWRldmljZV9pbml0aWFsaXplKCZwaHktPmRldik7CiAJcGh5LT5kZXYucGFyZW50ID0gZ2V0X2RldmljZShwYXJlbnQpOwogCXBoeS0+ZGV2LnJlbGVhc2UgPSBzYXNfcGh5X3JlbGVhc2U7Ci0Jc3ByaW50ZihwaHktPmRldi5idXNfaWQsICJwaHktJWQ6JWQiLCBzaG9zdC0+aG9zdF9ubywgbnVtYmVyKTsKKwlpZiAoc2NzaV9pc19zYXNfZXhwYW5kZXJfZGV2aWNlKHBhcmVudCkpIHsKKwkJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gZGV2X3RvX3JwaHkocGFyZW50KTsKKwkJc3ByaW50ZihwaHktPmRldi5idXNfaWQsICJwaHktJWQtJWQ6JWQiLCBzaG9zdC0+aG9zdF9ubywKKwkJCXJwaHktPnNjc2lfdGFyZ2V0X2lkLCBudW1iZXIpOworCX0gZWxzZQorCQlzcHJpbnRmKHBoeS0+ZGV2LmJ1c19pZCwgInBoeS0lZDolZCIsIHNob3N0LT5ob3N0X25vLCBudW1iZXIpOwogCiAJdHJhbnNwb3J0X3NldHVwX2RldmljZSgmcGh5LT5kZXYpOwogCkBAIC01MzQsNiArNTQ5LDUzIEBACiBzdGF0aWMgU0FTX0NMQVNTX0RFVklDRV9BVFRSKHJwaHksIGRldmljZV90eXBlLCBTX0lSVUdPLAogCQlzaG93X3Nhc19ycGh5X2RldmljZV90eXBlLCBOVUxMKTsKIAorc3RhdGljIHNzaXplX3QKK3Nob3dfc2FzX3JwaHlfZW5jbG9zdXJlX2lkZW50aWZpZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGNkZXYpOworCXN0cnVjdCBzYXNfcGh5ICpwaHkgPSBkZXZfdG9fcGh5KHJwaHktPmRldi5wYXJlbnQpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHBoeS0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nhc19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CisJdTY0IGlkZW50aWZpZXI7CisJaW50IGVycm9yOworCisJLyoKKwkgKiBPbmx5IGRldmljZXMgYmVoaW5kIGFuIGV4cGFuZGVyIGFyZSBzdXBwb3J0ZWQsIGJlY2F1c2UgdGhlCisJICogZW5jbG9zdXJlIGlkZW50aWZpZXIgaXMgYSBTTVAgZmVhdHVyZS4KKwkgKi8KKwlpZiAocGh5LT5sb2NhbF9hdHRhY2hlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnJvciA9IGktPmYtPmdldF9lbmNsb3N1cmVfaWRlbnRpZmllcihycGh5LCAmaWRlbnRpZmllcik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWlkZW50aWZpZXIpOworfQorCitzdGF0aWMgU0FTX0NMQVNTX0RFVklDRV9BVFRSKHJwaHksIGVuY2xvc3VyZV9pZGVudGlmaWVyLCBTX0lSVUdPLAorCQlzaG93X3Nhc19ycGh5X2VuY2xvc3VyZV9pZGVudGlmaWVyLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfc2FzX3JwaHlfYmF5X2lkZW50aWZpZXIoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRyYW5zcG9ydF9jbGFzc190b19ycGh5KGNkZXYpOworCXN0cnVjdCBzYXNfcGh5ICpwaHkgPSBkZXZfdG9fcGh5KHJwaHktPmRldi5wYXJlbnQpOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHBoeS0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nhc19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CisJaW50IHZhbDsKKworCWlmIChwaHktPmxvY2FsX2F0dGFjaGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IGktPmYtPmdldF9iYXlfaWRlbnRpZmllcihycGh5KTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKK30KKworc3RhdGljIFNBU19DTEFTU19ERVZJQ0VfQVRUUihycGh5LCBiYXlfaWRlbnRpZmllciwgU19JUlVHTywKKwkJc2hvd19zYXNfcnBoeV9iYXlfaWRlbnRpZmllciwgTlVMTCk7CisKIHNhc19ycGh5X3Byb3RvY29sX2F0dHIoaWRlbnRpZnkuaW5pdGlhdG9yX3BvcnRfcHJvdG9jb2xzLAogCQlpbml0aWF0b3JfcG9ydF9wcm90b2NvbHMpOwogc2FzX3JwaHlfcHJvdG9jb2xfYXR0cihpZGVudGlmeS50YXJnZXRfcG9ydF9wcm90b2NvbHMsIHRhcmdldF9wb3J0X3Byb3RvY29scyk7CkBAIC01NDEsOCArNjAzLDEwMyBAQAogCQl1bnNpZ25lZCBsb25nIGxvbmcpOwogc2FzX3JwaHlfc2ltcGxlX2F0dHIoaWRlbnRpZnkucGh5X2lkZW50aWZpZXIsIHBoeV9pZGVudGlmaWVyLCAiJWRcbiIsIHU4KTsKIAorLyogb25seSBuZWVkIDggYnl0ZXMgb2YgZGF0YSBwbHVzIGhlYWRlciAoNCBvciA4KSAqLworI2RlZmluZSBCVUZfU0laRSA2NAorCitpbnQgc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWNoYXIgKmJ1ZmZlciA9IGt6YWxsb2MoQlVGX1NJWkUsIEdGUF9LRVJORUwpLCAqbXNkYXRhOworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IHRhcmdldF90b19ycGh5KHNkZXYtPnNkZXZfdGFyZ2V0KTsKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHNjc2lfbW9kZV9kYXRhIG1vZGVfZGF0YTsKKwlpbnQgcmVzLCBlcnJvcjsKKworCUJVR19PTihycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSAhPSBTQVNfRU5EX0RFVklDRSk7CisKKwlyZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gc2NzaV9tb2RlX3NlbnNlKHNkZXYsIDEsIDB4MTksIGJ1ZmZlciwgQlVGX1NJWkUsIDMwKkhaLCAzLAorCQkJICAgICAgJm1vZGVfZGF0YSwgTlVMTCk7CisKKwllcnJvciA9IC1FSU5WQUw7CisJaWYgKCFzY3NpX3N0YXR1c19pc19nb29kKHJlcykpCisJCWdvdG8gb3V0OworCisJbXNkYXRhID0gYnVmZmVyICsgIG1vZGVfZGF0YS5oZWFkZXJfbGVuZ3RoICsKKwkJbW9kZV9kYXRhLmJsb2NrX2Rlc2NyaXB0b3JfbGVuZ3RoOworCisJaWYgKG1zZGF0YSAtIGJ1ZmZlciA+IEJVRl9TSVpFIC0gOCkKKwkJZ290byBvdXQ7CisKKwllcnJvciA9IDA7CisKKwlyZGV2LT5yZWFkeV9sZWRfbWVhbmluZyA9IG1zZGF0YVsyXSAmIDB4MTAgPyAxIDogMDsKKwlyZGV2LT5JX1RfbmV4dXNfbG9zc190aW1lb3V0ID0gKG1zZGF0YVs0XSA8PCA4KSArIG1zZGF0YVs1XTsKKwlyZGV2LT5pbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dCA9IChtc2RhdGFbNl0gPDwgOCkgKyBtc2RhdGFbN107CisKKyBvdXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MKHNhc19yZWFkX3BvcnRfbW9kZV9wYWdlKTsKKworc3RhdGljIERFQ0xBUkVfVFJBTlNQT1JUX0NMQVNTKHNhc19lbmRfZGV2X2NsYXNzLAorCQkJICAgICAgICJzYXNfZW5kX2RldmljZSIsIE5VTEwsIE5VTEwsIE5VTEwpOworCisjZGVmaW5lIHNhc19lbmRfZGV2X3Nob3dfc2ltcGxlKGZpZWxkLCBuYW1lLCBmb3JtYXRfc3RyaW5nLCBjYXN0KQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd19zYXNfZW5kX2Rldl8jI25hbWUoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHkgPSB0cmFuc3BvcnRfY2xhc3NfdG9fcnBoeShjZGV2KTsJCVwKKwlzdHJ1Y3Qgc2FzX2VuZF9kZXZpY2UgKnJkZXYgPSBycGh5X3RvX2VuZF9kZXZpY2UocnBoeSk7CQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsIGZvcm1hdF9zdHJpbmcsIGNhc3QgcmRldi0+ZmllbGQpOwlcCit9CisKKyNkZWZpbmUgc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIoZmllbGQsIG5hbWUsIGZvcm1hdF9zdHJpbmcsIHR5cGUpCVwKKwlzYXNfZW5kX2Rldl9zaG93X3NpbXBsZShmaWVsZCwgbmFtZSwgZm9ybWF0X3N0cmluZywgKHR5cGUpKQlcCitzdGF0aWMgU0FTX0NMQVNTX0RFVklDRV9BVFRSKGVuZF9kZXYsIG5hbWUsIFNfSVJVR08sIAkJCVwKKwkJc2hvd19zYXNfZW5kX2Rldl8jI25hbWUsIE5VTEwpCisKK3Nhc19lbmRfZGV2X3NpbXBsZV9hdHRyKHJlYWR5X2xlZF9tZWFuaW5nLCByZWFkeV9sZWRfbWVhbmluZywgIiVkXG4iLCBpbnQpOworc2FzX2VuZF9kZXZfc2ltcGxlX2F0dHIoSV9UX25leHVzX2xvc3NfdGltZW91dCwgSV9UX25leHVzX2xvc3NfdGltZW91dCwKKwkJCSIlZFxuIiwgaW50KTsKK3Nhc19lbmRfZGV2X3NpbXBsZV9hdHRyKGluaXRpYXRvcl9yZXNwb25zZV90aW1lb3V0LCBpbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dCwKKwkJCSIlZFxuIiwgaW50KTsKKworc3RhdGljIERFQ0xBUkVfVFJBTlNQT1JUX0NMQVNTKHNhc19leHBhbmRlcl9jbGFzcywKKwkJCSAgICAgICAic2FzX2V4cGFuZGVyIiwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyNkZWZpbmUgc2FzX2V4cGFuZGVyX3Nob3dfc2ltcGxlKGZpZWxkLCBuYW1lLCBmb3JtYXRfc3RyaW5nLCBjYXN0KQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd19zYXNfZXhwYW5kZXJfIyNuYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gdHJhbnNwb3J0X2NsYXNzX3RvX3JwaHkoY2Rldik7CQlcCisJc3RydWN0IHNhc19leHBhbmRlcl9kZXZpY2UgKmVkZXYgPSBycGh5X3RvX2V4cGFuZGVyX2RldmljZShycGh5KTsgXAorCQkJCQkJCQkJXAorCXJldHVybiBzbnByaW50ZihidWYsIDIwLCBmb3JtYXRfc3RyaW5nLCBjYXN0IGVkZXYtPmZpZWxkKTsJXAorfQorCisjZGVmaW5lIHNhc19leHBhbmRlcl9zaW1wbGVfYXR0cihmaWVsZCwgbmFtZSwgZm9ybWF0X3N0cmluZywgdHlwZSkJXAorCXNhc19leHBhbmRlcl9zaG93X3NpbXBsZShmaWVsZCwgbmFtZSwgZm9ybWF0X3N0cmluZywgKHR5cGUpKQlcCitzdGF0aWMgU0FTX0NMQVNTX0RFVklDRV9BVFRSKGV4cGFuZGVyLCBuYW1lLCBTX0lSVUdPLCAJCQlcCisJCXNob3dfc2FzX2V4cGFuZGVyXyMjbmFtZSwgTlVMTCkKKworc2FzX2V4cGFuZGVyX3NpbXBsZV9hdHRyKHZlbmRvcl9pZCwgdmVuZG9yX2lkLCAiJXNcbiIsIGNoYXIgKik7CitzYXNfZXhwYW5kZXJfc2ltcGxlX2F0dHIocHJvZHVjdF9pZCwgcHJvZHVjdF9pZCwgIiVzXG4iLCBjaGFyICopOworc2FzX2V4cGFuZGVyX3NpbXBsZV9hdHRyKHByb2R1Y3RfcmV2LCBwcm9kdWN0X3JldiwgIiVzXG4iLCBjaGFyICopOworc2FzX2V4cGFuZGVyX3NpbXBsZV9hdHRyKGNvbXBvbmVudF92ZW5kb3JfaWQsIGNvbXBvbmVudF92ZW5kb3JfaWQsCisJCQkgIiVzXG4iLCBjaGFyICopOworc2FzX2V4cGFuZGVyX3NpbXBsZV9hdHRyKGNvbXBvbmVudF9pZCwgY29tcG9uZW50X2lkLCAiJXVcbiIsIHVuc2lnbmVkIGludCk7CitzYXNfZXhwYW5kZXJfc2ltcGxlX2F0dHIoY29tcG9uZW50X3JldmlzaW9uX2lkLCBjb21wb25lbnRfcmV2aXNpb25faWQsICIldVxuIiwKKwkJCSB1bnNpZ25lZCBpbnQpOworc2FzX2V4cGFuZGVyX3NpbXBsZV9hdHRyKGxldmVsLCBsZXZlbCwgIiVkXG4iLCBpbnQpOworCiBzdGF0aWMgREVDTEFSRV9UUkFOU1BPUlRfQ0xBU1Moc2FzX3JwaHlfY2xhc3MsCi0JCSJzYXNfcnBoeSIsIE5VTEwsIE5VTEwsIE5VTEwpOworCQkic2FzX2RldmljZSIsIE5VTEwsIE5VTEwsIE5VTEwpOwogCiBzdGF0aWMgaW50IHNhc19ycGh5X21hdGNoKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICpjb250LCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC01NjMsNDUgKzcyMCwxNDAgQEAKIAlyZXR1cm4gJmktPnJwaHlfYXR0cl9jb250LmFjID09IGNvbnQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNhc19ycGh5X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYXNfZW5kX2Rldl9tYXRjaChzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqY29udCwKKwkJCSAgICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBzYXNfaW50ZXJuYWwgKmk7CisJc3RydWN0IHNhc19ycGh5ICpycGh5OworCisJaWYgKCFzY3NpX2lzX3Nhc19ycGh5KGRldikpCisJCXJldHVybiAwOworCXNob3N0ID0gZGV2X3RvX3Nob3N0KGRldi0+cGFyZW50LT5wYXJlbnQpOworCXJwaHkgPSBkZXZfdG9fcnBoeShkZXYpOworCisJaWYgKCFzaG9zdC0+dHJhbnNwb3J0dCkKKwkJcmV0dXJuIDA7CisJaWYgKHNob3N0LT50cmFuc3BvcnR0LT5ob3N0X2F0dHJzLmFjLmNsYXNzICE9CisJCQkmc2FzX2hvc3RfY2xhc3MuY2xhc3MpCisJCXJldHVybiAwOworCisJaSA9IHRvX3Nhc19pbnRlcm5hbChzaG9zdC0+dHJhbnNwb3J0dCk7CisJcmV0dXJuICZpLT5lbmRfZGV2X2F0dHJfY29udC5hYyA9PSBjb250ICYmCisJCXJwaHktPmlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19FTkRfREVWSUNFOworfQorCitzdGF0aWMgaW50IHNhc19leHBhbmRlcl9tYXRjaChzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqY29udCwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3Qgc2FzX2ludGVybmFsICppOworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeTsKKworCWlmICghc2NzaV9pc19zYXNfcnBoeShkZXYpKQorCQlyZXR1cm4gMDsKKwlzaG9zdCA9IGRldl90b19zaG9zdChkZXYtPnBhcmVudC0+cGFyZW50KTsKKwlycGh5ID0gZGV2X3RvX3JwaHkoZGV2KTsKKworCWlmICghc2hvc3QtPnRyYW5zcG9ydHQpCisJCXJldHVybiAwOworCWlmIChzaG9zdC0+dHJhbnNwb3J0dC0+aG9zdF9hdHRycy5hYy5jbGFzcyAhPQorCQkJJnNhc19ob3N0X2NsYXNzLmNsYXNzKQorCQlyZXR1cm4gMDsKKworCWkgPSB0b19zYXNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOworCXJldHVybiAmaS0+ZXhwYW5kZXJfYXR0cl9jb250LmFjID09IGNvbnQgJiYKKwkJKHJwaHktPmlkZW50aWZ5LmRldmljZV90eXBlID09IFNBU19FREdFX0VYUEFOREVSX0RFVklDRSB8fAorCQkgcnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0gU0FTX0ZBTk9VVF9FWFBBTkRFUl9ERVZJQ0UpOworfQorCitzdGF0aWMgdm9pZCBzYXNfZXhwYW5kZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNhc19ycGh5ICpycGh5ID0gZGV2X3RvX3JwaHkoZGV2KTsKKwlzdHJ1Y3Qgc2FzX2V4cGFuZGVyX2RldmljZSAqZWRldiA9IHJwaHlfdG9fZXhwYW5kZXJfZGV2aWNlKHJwaHkpOwogCiAJcHV0X2RldmljZShkZXYtPnBhcmVudCk7Ci0Ja2ZyZWUocnBoeSk7CisJa2ZyZWUoZWRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNhc19lbmRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzYXNfcnBoeSAqcnBoeSA9IGRldl90b19ycGh5KGRldik7CisJc3RydWN0IHNhc19lbmRfZGV2aWNlICplZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCisJcHV0X2RldmljZShkZXYtPnBhcmVudCk7CisJa2ZyZWUoZWRldik7CiB9CiAKIC8qKgotICogc2FzX3JwaHlfYWxsb2MgIC0tICBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemUgYSBTQVMgcmVtb3RlIFBIWSBzdHJ1Y3R1cmUKLSAqIEBwYXJlbnQ6CQlTQVMgUEhZIHRoaXMgcmVtb3RlIFBIWSBpcyBjb25uZXRlZCB0bworICogc2FzX2VuZF9kZXZpY2VfYWxsb2MgLSBhbGxvY2F0ZSBhbiBycGh5IGZvciBhbiBlbmQgZGV2aWNlCiAgKgogICogQWxsb2NhdGVzIGFuIFNBUyByZW1vdGUgUEhZIHN0cnVjdHVyZSwgY29ubmVjdGVkIHRvIEBwYXJlbnQuCiAgKgogICogUmV0dXJuczoKICAqCVNBUyBQSFkgYWxsb2NhdGVkIG9yICVOVUxMIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4KICAqLwotc3RydWN0IHNhc19ycGh5ICpzYXNfcnBoeV9hbGxvYyhzdHJ1Y3Qgc2FzX3BoeSAqcGFyZW50KQorc3RydWN0IHNhc19ycGh5ICpzYXNfZW5kX2RldmljZV9hbGxvYyhzdHJ1Y3Qgc2FzX3BoeSAqcGFyZW50KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KCZwYXJlbnQtPmRldik7Ci0Jc3RydWN0IHNhc19ycGh5ICpycGh5OworCXN0cnVjdCBzYXNfZW5kX2RldmljZSAqcmRldjsKIAotCXJwaHkgPSBrbWFsbG9jKHNpemVvZigqcnBoeSksIEdGUF9LRVJORUwpOwotCWlmICghcnBoeSkgeworCXJkZXYgPSBremFsbG9jKHNpemVvZigqcmRldiksIEdGUF9LRVJORUwpOworCWlmICghcmRldikgewogCQlwdXRfZGV2aWNlKCZwYXJlbnQtPmRldik7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQocnBoeSwgMCwgc2l6ZW9mKCpycGh5KSk7CiAKLQlkZXZpY2VfaW5pdGlhbGl6ZSgmcnBoeS0+ZGV2KTsKLQlycGh5LT5kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmcGFyZW50LT5kZXYpOwotCXJwaHktPmRldi5yZWxlYXNlID0gc2FzX3JwaHlfcmVsZWFzZTsKLQlzcHJpbnRmKHJwaHktPmRldi5idXNfaWQsICJycGh5LSVkOiVkLSVkIiwKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmcmRldi0+cnBoeS5kZXYpOworCXJkZXYtPnJwaHkuZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoJnBhcmVudC0+ZGV2KTsKKwlyZGV2LT5ycGh5LmRldi5yZWxlYXNlID0gc2FzX2VuZF9kZXZpY2VfcmVsZWFzZTsKKwlzcHJpbnRmKHJkZXYtPnJwaHkuZGV2LmJ1c19pZCwgImVuZF9kZXZpY2UtJWQ6JWQtJWQiLAogCQlzaG9zdC0+aG9zdF9ubywgcGFyZW50LT5wb3J0X2lkZW50aWZpZXIsIHBhcmVudC0+bnVtYmVyKTsKLQl0cmFuc3BvcnRfc2V0dXBfZGV2aWNlKCZycGh5LT5kZXYpOworCXJkZXYtPnJwaHkuaWRlbnRpZnkuZGV2aWNlX3R5cGUgPSBTQVNfRU5EX0RFVklDRTsKKwl0cmFuc3BvcnRfc2V0dXBfZGV2aWNlKCZyZGV2LT5ycGh5LmRldik7CiAKLQlyZXR1cm4gcnBoeTsKKwlyZXR1cm4gJnJkZXYtPnJwaHk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNhc19ycGh5X2FsbG9jKTsKK0VYUE9SVF9TWU1CT0woc2FzX2VuZF9kZXZpY2VfYWxsb2MpOworCisvKioKKyAqIHNhc19leHBhbmRlcl9hbGxvYyAtIGFsbG9jYXRlIGFuIHJwaHkgZm9yIGFuIGVuZCBkZXZpY2UKKyAqCisgKiBBbGxvY2F0ZXMgYW4gU0FTIHJlbW90ZSBQSFkgc3RydWN0dXJlLCBjb25uZWN0ZWQgdG8gQHBhcmVudC4KKyAqCisgKiBSZXR1cm5zOgorICoJU0FTIFBIWSBhbGxvY2F0ZWQgb3IgJU5VTEwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLgorICovCitzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19leHBhbmRlcl9hbGxvYyhzdHJ1Y3Qgc2FzX3BoeSAqcGFyZW50LAorCQkJCSAgICBlbnVtIHNhc19kZXZpY2VfdHlwZSB0eXBlKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KCZwYXJlbnQtPmRldik7CisJc3RydWN0IHNhc19leHBhbmRlcl9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHNhc19ob3N0X2F0dHJzICpzYXNfaG9zdCA9IHRvX3Nhc19ob3N0X2F0dHJzKHNob3N0KTsKKworCUJVR19PTih0eXBlICE9IFNBU19FREdFX0VYUEFOREVSX0RFVklDRSAmJgorCSAgICAgICB0eXBlICE9IFNBU19GQU5PVVRfRVhQQU5ERVJfREVWSUNFKTsKKworCXJkZXYgPSBremFsbG9jKHNpemVvZigqcmRldiksIEdGUF9LRVJORUwpOworCWlmICghcmRldikgeworCQlwdXRfZGV2aWNlKCZwYXJlbnQtPmRldik7CisJCXJldHVybiBOVUxMOworCX0KKworCWRldmljZV9pbml0aWFsaXplKCZyZGV2LT5ycGh5LmRldik7CisJcmRldi0+cnBoeS5kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmcGFyZW50LT5kZXYpOworCXJkZXYtPnJwaHkuZGV2LnJlbGVhc2UgPSBzYXNfZXhwYW5kZXJfcmVsZWFzZTsKKwltdXRleF9sb2NrKCZzYXNfaG9zdC0+bG9jayk7CisJcmRldi0+cnBoeS5zY3NpX3RhcmdldF9pZCA9IHNhc19ob3N0LT5uZXh0X2V4cGFuZGVyX2lkKys7CisJbXV0ZXhfdW5sb2NrKCZzYXNfaG9zdC0+bG9jayk7CisJc3ByaW50ZihyZGV2LT5ycGh5LmRldi5idXNfaWQsICJleHBhbmRlci0lZDolZCIsCisJCXNob3N0LT5ob3N0X25vLCByZGV2LT5ycGh5LnNjc2lfdGFyZ2V0X2lkKTsKKwlyZGV2LT5ycGh5LmlkZW50aWZ5LmRldmljZV90eXBlID0gdHlwZTsKKwl0cmFuc3BvcnRfc2V0dXBfZGV2aWNlKCZyZGV2LT5ycGh5LmRldik7CisKKwlyZXR1cm4gJnJkZXYtPnJwaHk7Cit9CitFWFBPUlRfU1lNQk9MKHNhc19leHBhbmRlcl9hbGxvYyk7CiAKIC8qKgogICogc2FzX3JwaHlfYWRkICAtLSAgYWRkIGEgU0FTIHJlbW90ZSBQSFkgdG8gdGhlIGRldmljZSBoaWVyYWNoeQpAQCAtNjMzLDExICs4ODUsMTAgQEAKIAkgICAgKGlkZW50aWZ5LT50YXJnZXRfcG9ydF9wcm90b2NvbHMgJgogCSAgICAgKFNBU19QUk9UT0NPTF9TU1B8U0FTX1BST1RPQ09MX1NUUHxTQVNfUFJPVE9DT0xfU0FUQSkpKQogCQlycGh5LT5zY3NpX3RhcmdldF9pZCA9IHNhc19ob3N0LT5uZXh0X3RhcmdldF9pZCsrOwotCWVsc2UKLQkJcnBoeS0+c2NzaV90YXJnZXRfaWQgPSAtMTsKIAltdXRleF91bmxvY2soJnNhc19ob3N0LT5sb2NrKTsKIAotCWlmIChycGh5LT5zY3NpX3RhcmdldF9pZCAhPSAtMSkgeworCWlmIChpZGVudGlmeS0+ZGV2aWNlX3R5cGUgPT0gU0FTX0VORF9ERVZJQ0UgJiYKKwkgICAgcnBoeS0+c2NzaV90YXJnZXRfaWQgIT0gLTEpIHsKIAkJc2NzaV9zY2FuX3RhcmdldCgmcnBoeS0+ZGV2LCBwYXJlbnQtPnBvcnRfaWRlbnRpZmllciwKIAkJCQlycGh5LT5zY3NpX3RhcmdldF9pZCwgfjAsIDApOwogCX0KQEAgLTY3MCw3ICs5MjEsMTcgQEAKIAlwdXRfZGV2aWNlKHJwaHktPmRldi5wYXJlbnQpOwogCXB1dF9kZXZpY2UocnBoeS0+ZGV2LnBhcmVudCk7CiAJcHV0X2RldmljZShycGh5LT5kZXYucGFyZW50KTsKLQlrZnJlZShycGh5KTsKKwlpZiAocnBoeS0+aWRlbnRpZnkuZGV2aWNlX3R5cGUgPT0gU0FTX0VORF9ERVZJQ0UpIHsKKwkJc3RydWN0IHNhc19lbmRfZGV2aWNlICplZGV2ID0gcnBoeV90b19lbmRfZGV2aWNlKHJwaHkpOworCisJCWtmcmVlKGVkZXYpOworCX0gZWxzZSB7CisJCS8qIG11c3QgYmUgZXhwYW5kZXIgKi8KKwkJc3RydWN0IHNhc19leHBhbmRlcl9kZXZpY2UgKmVkZXYgPQorCQkJcnBoeV90b19leHBhbmRlcl9kZXZpY2UocnBoeSk7CisKKwkJa2ZyZWUoZWRldik7CisJfQogfQogRVhQT1JUX1NZTUJPTChzYXNfcnBoeV9mcmVlKTsKIApAQCAtNzIzLDcgKzk4NCw4IEBACiAgKi8KIGludCBzY3NpX2lzX3Nhc19ycGh5KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZGV2LT5yZWxlYXNlID09IHNhc19ycGh5X3JlbGVhc2U7CisJcmV0dXJuIGRldi0+cmVsZWFzZSA9PSBzYXNfZW5kX2RldmljZV9yZWxlYXNlIHx8CisJCWRldi0+cmVsZWFzZSA9PSBzYXNfZXhwYW5kZXJfcmVsZWFzZTsKIH0KIEVYUE9SVF9TWU1CT0woc2NzaV9pc19zYXNfcnBoeSk7CiAKQEAgLTc2MSwyNyArMTAyMywzOCBAQAogICogU2V0dXAgLyBUZWFyZG93biBjb2RlCiAgKi8KIAotI2RlZmluZSBTRVRVUF9SUE9SVF9BVFRSSUJVVEUoZmllbGQpCQkJCQlcCi0JaS0+cHJpdmF0ZV9ycGh5X2F0dHJzW2NvdW50XSA9IGNsYXNzX2RldmljZV9hdHRyXyMjZmllbGQ7CVwKLQlpLT5wcml2YXRlX3JwaHlfYXR0cnNbY291bnRdLmF0dHIubW9kZSA9IFNfSVJVR087CQlcCi0JaS0+cHJpdmF0ZV9ycGh5X2F0dHJzW2NvdW50XS5zdG9yZSA9IE5VTEw7CQkJXAotCWktPnJwaHlfYXR0cnNbY291bnRdID0gJmktPnByaXZhdGVfcnBoeV9hdHRyc1tjb3VudF07CVwKLQljb3VudCsrCisjZGVmaW5lIFNFVFVQX1RFTVBMQVRFKGF0dHJiLCBmaWVsZCwgcGVybSwgdGVzdCkJCQkJXAorCWktPnByaXZhdGVfIyNhdHRyYltjb3VudF0gPSBjbGFzc19kZXZpY2VfYXR0cl8jI2ZpZWxkOwkJXAorCWktPnByaXZhdGVfIyNhdHRyYltjb3VudF0uYXR0ci5tb2RlID0gcGVybTsJCQlcCisJaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XS5zdG9yZSA9IE5VTEw7CQkJCVwKKwlpLT5hdHRyYltjb3VudF0gPSAmaS0+cHJpdmF0ZV8jI2F0dHJiW2NvdW50XTsJCQlcCisJaWYgKHRlc3QpCQkJCQkJCVwKKwkJY291bnQrKworCisKKyNkZWZpbmUgU0VUVVBfUlBPUlRfQVRUUklCVVRFKGZpZWxkKSAJCQkJCVwKKwlTRVRVUF9URU1QTEFURShycGh5X2F0dHJzLCBmaWVsZCwgU19JUlVHTywgMSkKKworI2RlZmluZSBTRVRVUF9PUFRJT05BTF9SUE9SVF9BVFRSSUJVVEUoZmllbGQsIGZ1bmMpCQkJXAorCVNFVFVQX1RFTVBMQVRFKHJwaHlfYXR0cnMsIGZpZWxkLCBTX0lSVUdPLCBpLT5mLT5mdW5jKQogCiAjZGVmaW5lIFNFVFVQX1BPUlRfQVRUUklCVVRFKGZpZWxkKQkJCQkJXAotCWktPnByaXZhdGVfcGh5X2F0dHJzW2NvdW50XSA9IGNsYXNzX2RldmljZV9hdHRyXyMjZmllbGQ7CVwKLSAgICAgICAgaS0+cHJpdmF0ZV9waHlfYXR0cnNbY291bnRdLmF0dHIubW9kZSA9IFNfSVJVR087CQlcCi0gICAgICAgIGktPnByaXZhdGVfcGh5X2F0dHJzW2NvdW50XS5zdG9yZSA9IE5VTEw7CQkJXAotICAgICAgICBpLT5waHlfYXR0cnNbY291bnRdID0gJmktPnByaXZhdGVfcGh5X2F0dHJzW2NvdW50XTsJCVwKLQljb3VudCsrCisJU0VUVVBfVEVNUExBVEUocGh5X2F0dHJzLCBmaWVsZCwgU19JUlVHTywgMSkKKworI2RlZmluZSBTRVRVUF9PUFRJT05BTF9QT1JUX0FUVFJJQlVURShmaWVsZCwgZnVuYykJCQlcCisJU0VUVVBfVEVNUExBVEUocGh5X2F0dHJzLCBmaWVsZCwgU19JUlVHTywgaS0+Zi0+ZnVuYykKIAogI2RlZmluZSBTRVRVUF9QT1JUX0FUVFJJQlVURV9XUk9OTFkoZmllbGQpCQkJCVwKLQlpLT5wcml2YXRlX3BoeV9hdHRyc1tjb3VudF0gPSBjbGFzc19kZXZpY2VfYXR0cl8jI2ZpZWxkOwlcCi0JaS0+cHJpdmF0ZV9waHlfYXR0cnNbY291bnRdLmF0dHIubW9kZSA9IFNfSVdVR087CQlcCi0JaS0+cHJpdmF0ZV9waHlfYXR0cnNbY291bnRdLnNob3cgPSBOVUxMOwkJCVwKLQlpLT5waHlfYXR0cnNbY291bnRdID0gJmktPnByaXZhdGVfcGh5X2F0dHJzW2NvdW50XTsJCVwKLQljb3VudCsrCisJU0VUVVBfVEVNUExBVEUocGh5X2F0dHJzLCBmaWVsZCwgU19JV1VHTywgMSkKIAorI2RlZmluZSBTRVRVUF9PUFRJT05BTF9QT1JUX0FUVFJJQlVURV9XUk9OTFkoZmllbGQsIGZ1bmMpCQlcCisJU0VUVVBfVEVNUExBVEUocGh5X2F0dHJzLCBmaWVsZCwgU19JV1VHTywgaS0+Zi0+ZnVuYykKKworI2RlZmluZSBTRVRVUF9FTkRfREVWX0FUVFJJQlVURShmaWVsZCkJCQkJCVwKKwlTRVRVUF9URU1QTEFURShlbmRfZGV2X2F0dHJzLCBmaWVsZCwgU19JUlVHTywgMSkKKworI2RlZmluZSBTRVRVUF9FWFBBTkRFUl9BVFRSSUJVVEUoZmllbGQpCQkJCQlcCisJU0VUVVBfVEVNUExBVEUoZXhwYW5kZXJfYXR0cnMsIGV4cGFuZGVyXyMjZmllbGQsIFNfSVJVR08sIDEpCiAKIC8qKgogICogc2FzX2F0dGFjaF90cmFuc3BvcnQgIC0tICBpbnN0YW50aWF0ZSBTQVMgdHJhbnNwb3J0IHRlbXBsYXRlCkBAIC03OTMsMTAgKzEwNjYsOSBAQAogCXN0cnVjdCBzYXNfaW50ZXJuYWwgKmk7CiAJaW50IGNvdW50OwogCi0JaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYXNfaW50ZXJuYWwpLCBHRlBfS0VSTkVMKTsKKwlpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhc19pbnRlcm5hbCksIEdGUF9LRVJORUwpOwogCWlmICghaSkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KGksIDAsIHNpemVvZihzdHJ1Y3Qgc2FzX2ludGVybmFsKSk7CiAKIAlpLT50LnVzZXJfc2NhbiA9IHNhc191c2VyX3NjYW47CiAKQEAgLTgxNiw2ICsxMDg4LDE2IEBACiAJaS0+cnBoeV9hdHRyX2NvbnQuYWMubWF0Y2ggPSBzYXNfcnBoeV9tYXRjaDsKIAl0cmFuc3BvcnRfY29udGFpbmVyX3JlZ2lzdGVyKCZpLT5ycGh5X2F0dHJfY29udCk7CiAKKwlpLT5lbmRfZGV2X2F0dHJfY29udC5hYy5jbGFzcyA9ICZzYXNfZW5kX2Rldl9jbGFzcy5jbGFzczsKKwlpLT5lbmRfZGV2X2F0dHJfY29udC5hYy5hdHRycyA9ICZpLT5lbmRfZGV2X2F0dHJzWzBdOworCWktPmVuZF9kZXZfYXR0cl9jb250LmFjLm1hdGNoID0gc2FzX2VuZF9kZXZfbWF0Y2g7CisJdHJhbnNwb3J0X2NvbnRhaW5lcl9yZWdpc3RlcigmaS0+ZW5kX2Rldl9hdHRyX2NvbnQpOworCisJaS0+ZXhwYW5kZXJfYXR0cl9jb250LmFjLmNsYXNzID0gJnNhc19leHBhbmRlcl9jbGFzcy5jbGFzczsKKwlpLT5leHBhbmRlcl9hdHRyX2NvbnQuYWMuYXR0cnMgPSAmaS0+ZXhwYW5kZXJfYXR0cnNbMF07CisJaS0+ZXhwYW5kZXJfYXR0cl9jb250LmFjLm1hdGNoID0gc2FzX2V4cGFuZGVyX21hdGNoOworCXRyYW5zcG9ydF9jb250YWluZXJfcmVnaXN0ZXIoJmktPmV4cGFuZGVyX2F0dHJfY29udCk7CisKIAlpLT5mID0gZnQ7CiAKIAljb3VudCA9IDA7CkBAIC04MzgsOCArMTEyMCw4IEBACiAJU0VUVVBfUE9SVF9BVFRSSUJVVEUocnVubmluZ19kaXNwYXJpdHlfZXJyb3JfY291bnQpOwogCVNFVFVQX1BPUlRfQVRUUklCVVRFKGxvc3Nfb2ZfZHdvcmRfc3luY19jb3VudCk7CiAJU0VUVVBfUE9SVF9BVFRSSUJVVEUocGh5X3Jlc2V0X3Byb2JsZW1fY291bnQpOwotCVNFVFVQX1BPUlRfQVRUUklCVVRFX1dST05MWShsaW5rX3Jlc2V0KTsKLQlTRVRVUF9QT1JUX0FUVFJJQlVURV9XUk9OTFkoaGFyZF9yZXNldCk7CisJU0VUVVBfT1BUSU9OQUxfUE9SVF9BVFRSSUJVVEVfV1JPTkxZKGxpbmtfcmVzZXQsIHBoeV9yZXNldCk7CisJU0VUVVBfT1BUSU9OQUxfUE9SVF9BVFRSSUJVVEVfV1JPTkxZKGhhcmRfcmVzZXQsIHBoeV9yZXNldCk7CiAJaS0+cGh5X2F0dHJzW2NvdW50XSA9IE5VTEw7CiAKIAljb3VudCA9IDA7CkBAIC04NDgsOCArMTEzMCwyOCBAQAogCVNFVFVQX1JQT1JUX0FUVFJJQlVURShycGh5X2RldmljZV90eXBlKTsKIAlTRVRVUF9SUE9SVF9BVFRSSUJVVEUocnBoeV9zYXNfYWRkcmVzcyk7CiAJU0VUVVBfUlBPUlRfQVRUUklCVVRFKHJwaHlfcGh5X2lkZW50aWZpZXIpOworCVNFVFVQX09QVElPTkFMX1JQT1JUX0FUVFJJQlVURShycGh5X2VuY2xvc3VyZV9pZGVudGlmaWVyLAorCQkJCSAgICAgICBnZXRfZW5jbG9zdXJlX2lkZW50aWZpZXIpOworCVNFVFVQX09QVElPTkFMX1JQT1JUX0FUVFJJQlVURShycGh5X2JheV9pZGVudGlmaWVyLAorCQkJCSAgICAgICBnZXRfYmF5X2lkZW50aWZpZXIpOwogCWktPnJwaHlfYXR0cnNbY291bnRdID0gTlVMTDsKIAorCWNvdW50ID0gMDsKKwlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X3JlYWR5X2xlZF9tZWFuaW5nKTsKKwlTRVRVUF9FTkRfREVWX0FUVFJJQlVURShlbmRfZGV2X0lfVF9uZXh1c19sb3NzX3RpbWVvdXQpOworCVNFVFVQX0VORF9ERVZfQVRUUklCVVRFKGVuZF9kZXZfaW5pdGlhdG9yX3Jlc3BvbnNlX3RpbWVvdXQpOworCWktPmVuZF9kZXZfYXR0cnNbY291bnRdID0gTlVMTDsKKworCWNvdW50ID0gMDsKKwlTRVRVUF9FWFBBTkRFUl9BVFRSSUJVVEUodmVuZG9yX2lkKTsKKwlTRVRVUF9FWFBBTkRFUl9BVFRSSUJVVEUocHJvZHVjdF9pZCk7CisJU0VUVVBfRVhQQU5ERVJfQVRUUklCVVRFKHByb2R1Y3RfcmV2KTsKKwlTRVRVUF9FWFBBTkRFUl9BVFRSSUJVVEUoY29tcG9uZW50X3ZlbmRvcl9pZCk7CisJU0VUVVBfRVhQQU5ERVJfQVRUUklCVVRFKGNvbXBvbmVudF9pZCk7CisJU0VUVVBfRVhQQU5ERVJfQVRUUklCVVRFKGNvbXBvbmVudF9yZXZpc2lvbl9pZCk7CisJU0VUVVBfRVhQQU5ERVJfQVRUUklCVVRFKGxldmVsKTsKKwlpLT5leHBhbmRlcl9hdHRyc1tjb3VudF0gPSBOVUxMOworCiAJcmV0dXJuICZpLT50OwogfQogRVhQT1JUX1NZTUJPTChzYXNfYXR0YWNoX3RyYW5zcG9ydCk7CkBAIC04NjUsNiArMTE2Nyw4IEBACiAJdHJhbnNwb3J0X2NvbnRhaW5lcl91bnJlZ2lzdGVyKCZpLT50Lmhvc3RfYXR0cnMpOwogCXRyYW5zcG9ydF9jb250YWluZXJfdW5yZWdpc3RlcigmaS0+cGh5X2F0dHJfY29udCk7CiAJdHJhbnNwb3J0X2NvbnRhaW5lcl91bnJlZ2lzdGVyKCZpLT5ycGh5X2F0dHJfY29udCk7CisJdHJhbnNwb3J0X2NvbnRhaW5lcl91bnJlZ2lzdGVyKCZpLT5lbmRfZGV2X2F0dHJfY29udCk7CisJdHJhbnNwb3J0X2NvbnRhaW5lcl91bnJlZ2lzdGVyKCZpLT5leHBhbmRlcl9hdHRyX2NvbnQpOwogCiAJa2ZyZWUoaSk7CiB9CkBAIC04ODMsOSArMTE4NywxOSBAQAogCWVycm9yID0gdHJhbnNwb3J0X2NsYXNzX3JlZ2lzdGVyKCZzYXNfcnBoeV9jbGFzcyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BoeTsKKwllcnJvciA9IHRyYW5zcG9ydF9jbGFzc19yZWdpc3Rlcigmc2FzX2VuZF9kZXZfY2xhc3MpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9ycGh5OworCWVycm9yID0gdHJhbnNwb3J0X2NsYXNzX3JlZ2lzdGVyKCZzYXNfZXhwYW5kZXJfY2xhc3MpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9lbmRfZGV2OwogCiAJcmV0dXJuIDA7CiAKKyBvdXRfdW5yZWdpc3Rlcl9lbmRfZGV2OgorCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZzYXNfZW5kX2Rldl9jbGFzcyk7Cisgb3V0X3VucmVnaXN0ZXJfcnBoeToKKwl0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3Rlcigmc2FzX3JwaHlfY2xhc3MpOwogIG91dF91bnJlZ2lzdGVyX3BoeToKIAl0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3Rlcigmc2FzX3BoeV9jbGFzcyk7CiAgb3V0X3VucmVnaXN0ZXJfdHJhbnNwb3J0OgpAQCAtOTAwLDYgKzEyMTQsOCBAQAogCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZzYXNfaG9zdF9jbGFzcyk7CiAJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJnNhc19waHlfY2xhc3MpOwogCXRyYW5zcG9ydF9jbGFzc191bnJlZ2lzdGVyKCZzYXNfcnBoeV9jbGFzcyk7CisJdHJhbnNwb3J0X2NsYXNzX3VucmVnaXN0ZXIoJnNhc19lbmRfZGV2X2NsYXNzKTsKKwl0cmFuc3BvcnRfY2xhc3NfdW5yZWdpc3Rlcigmc2FzX2V4cGFuZGVyX2NsYXNzKTsKIH0KIAogTU9EVUxFX0FVVEhPUigiQ2hyaXN0b3BoIEhlbGx3aWciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuYwppbmRleCA3ZWU5NWViLi43ODBhYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5jCkBAIC00MDEsOCArNDAxLDcgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLXNob3dfc3BpX3RyYW5zcG9ydF9wZXJpb2RfaGVscGVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZiwKLQkJCQkgaW50IHBlcmlvZCkKK3Nob3dfc3BpX3RyYW5zcG9ydF9wZXJpb2RfaGVscGVyKGNoYXIgKmJ1ZiwgaW50IHBlcmlvZCkKIHsKIAlpbnQgbGVuID0gcGVyaW9kX3RvX3N0cihidWYsIHBlcmlvZCk7CiAJYnVmW2xlbisrXSA9ICdcbic7CkBAIC00NTksNyArNDU4LDcgQEAKIAlpZiAoaS0+Zi0+Z2V0X3BlcmlvZCkKIAkJaS0+Zi0+Z2V0X3BlcmlvZChzdGFyZ2V0KTsKIAotCXJldHVybiBzaG93X3NwaV90cmFuc3BvcnRfcGVyaW9kX2hlbHBlcihjZGV2LCBidWYsIHRwLT5wZXJpb2QpOworCXJldHVybiBzaG93X3NwaV90cmFuc3BvcnRfcGVyaW9kX2hlbHBlcihidWYsIHRwLT5wZXJpb2QpOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtNDk0LDcgKzQ5Myw3IEBACiAJc3RydWN0IHNwaV90cmFuc3BvcnRfYXR0cnMgKnRwID0KIAkJKHN0cnVjdCBzcGlfdHJhbnNwb3J0X2F0dHJzICopJnN0YXJnZXQtPnN0YXJnZXRfZGF0YTsKIAotCXJldHVybiBzaG93X3NwaV90cmFuc3BvcnRfcGVyaW9kX2hlbHBlcihjZGV2LCBidWYsIHRwLT5taW5fcGVyaW9kKTsKKwlyZXR1cm4gc2hvd19zcGlfdHJhbnNwb3J0X3BlcmlvZF9oZWxwZXIoYnVmLCB0cC0+bWluX3BlcmlvZCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC05MDAsMTMgKzg5OSwxMSBAQAogCWlmICh1bmxpa2VseShzY3NpX2RldmljZV9nZXQoc2RldikpKQogCQlyZXR1cm47CiAKLQlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJYnVmZmVyID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCiAJaWYgKHVubGlrZWx5KCFidWZmZXIpKQogCQlnb3RvIG91dF9wdXQ7CiAKLQltZW1zZXQoYnVmZmVyLCAwLCBsZW4pOwotCiAJLyogV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgYWN0dWFsIGRldmljZSB3aWxsIHF1aWVzY2U7IHRoZQogCSAqIGxhdGVyIHRhcmdldCBxdWllc2NlIGlzIGp1c3QgYSBuaWNlIHRvIGhhdmUgKi8KIAlpZiAodW5saWtlbHkoc2NzaV9kZXZpY2VfcXVpZXNjZShzZGV2KSkpCkBAIC0xMDU0LDI1ICsxMDUxLDYzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNwaV9kaXNwbGF5X3hmZXJfYWdyZWVtZW50KTsKIAoraW50IHNwaV9wb3B1bGF0ZV93aWR0aF9tc2codW5zaWduZWQgY2hhciAqbXNnLCBpbnQgd2lkdGgpCit7CisJbXNnWzBdID0gRVhURU5ERURfTUVTU0FHRTsKKwltc2dbMV0gPSAyOworCW1zZ1syXSA9IEVYVEVOREVEX1dEVFI7CisJbXNnWzNdID0gd2lkdGg7CisJcmV0dXJuIDQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzcGlfcG9wdWxhdGVfd2lkdGhfbXNnKTsKKworaW50IHNwaV9wb3B1bGF0ZV9zeW5jX21zZyh1bnNpZ25lZCBjaGFyICptc2csIGludCBwZXJpb2QsIGludCBvZmZzZXQpCit7CisJbXNnWzBdID0gRVhURU5ERURfTUVTU0FHRTsKKwltc2dbMV0gPSAzOworCW1zZ1syXSA9IEVYVEVOREVEX1NEVFI7CisJbXNnWzNdID0gcGVyaW9kOworCW1zZ1s0XSA9IG9mZnNldDsKKwlyZXR1cm4gNTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNwaV9wb3B1bGF0ZV9zeW5jX21zZyk7CisKK2ludCBzcGlfcG9wdWxhdGVfcHByX21zZyh1bnNpZ25lZCBjaGFyICptc2csIGludCBwZXJpb2QsIGludCBvZmZzZXQsCisJCWludCB3aWR0aCwgaW50IG9wdGlvbnMpCit7CisJbXNnWzBdID0gRVhURU5ERURfTUVTU0FHRTsKKwltc2dbMV0gPSA2OworCW1zZ1syXSA9IEVYVEVOREVEX1BQUjsKKwltc2dbM10gPSBwZXJpb2Q7CisJbXNnWzRdID0gMDsKKwltc2dbNV0gPSBvZmZzZXQ7CisJbXNnWzZdID0gd2lkdGg7CisJbXNnWzddID0gb3B0aW9uczsKKwlyZXR1cm4gODsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNwaV9wb3B1bGF0ZV9wcHJfbXNnKTsKKwogI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvbmVfYnl0ZV9tc2dzW10gPSB7Ci0vKiAweDAwICovICJDb21tYW5kIENvbXBsZXRlIiwgTlVMTCwgIlNhdmUgUG9pbnRlcnMiLAorLyogMHgwMCAqLyAiVGFzayBDb21wbGV0ZSIsIE5VTEwgLyogRXh0ZW5kZWQgTWVzc2FnZSAqLywgIlNhdmUgUG9pbnRlcnMiLAogLyogMHgwMyAqLyAiUmVzdG9yZSBQb2ludGVycyIsICJEaXNjb25uZWN0IiwgIkluaXRpYXRvciBFcnJvciIsIAotLyogMHgwNiAqLyAiQWJvcnQiLCAiTWVzc2FnZSBSZWplY3QiLCAiTm9wIiwgIk1lc3NhZ2UgUGFyaXR5IEVycm9yIiwKKy8qIDB4MDYgKi8gIkFib3J0IFRhc2sgU2V0IiwgIk1lc3NhZ2UgUmVqZWN0IiwgIk5vcCIsICJNZXNzYWdlIFBhcml0eSBFcnJvciIsCiAvKiAweDBhICovICJMaW5rZWQgQ29tbWFuZCBDb21wbGV0ZSIsICJMaW5rZWQgQ29tbWFuZCBDb21wbGV0ZSB3L2ZsYWciLAotLyogMHgwYyAqLyAiQnVzIGRldmljZSByZXNldCIsICJBYm9ydCBUYWciLCAiQ2xlYXIgUXVldWUiLCAKLS8qIDB4MGYgKi8gIkluaXRpYXRlIFJlY292ZXJ5IiwgIlJlbGVhc2UgUmVjb3ZlcnkiCisvKiAweDBjICovICJUYXJnZXQgUmVzZXQiLCAiQWJvcnQgVGFzayIsICJDbGVhciBUYXNrIFNldCIsIAorLyogMHgwZiAqLyAiSW5pdGlhdGUgUmVjb3ZlcnkiLCAiUmVsZWFzZSBSZWNvdmVyeSIsCisvKiAweDExICovICJUZXJtaW5hdGUgUHJvY2VzcyIsICJDb250aW51ZSBUYXNrIiwgIlRhcmdldCBUcmFuc2ZlciBEaXNhYmxlIiwKKy8qIDB4MTQgKi8gTlVMTCwgTlVMTCwgIkNsZWFyIEFDQSIsICJMVU4gUmVzZXQiCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHR3b19ieXRlX21zZ3NbXSA9IHsKIC8qIDB4MjAgKi8gIlNpbXBsZSBRdWV1ZSBUYWciLCAiSGVhZCBvZiBRdWV1ZSBUYWciLCAiT3JkZXJlZCBRdWV1ZSBUYWciLAotLyogMHgyMyAqLyAiSWdub3JlIFdpZGUgUmVzaWR1ZSIKKy8qIDB4MjMgKi8gIklnbm9yZSBXaWRlIFJlc2lkdWUiLCAiQUNBIgogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBleHRlbmRlZF9tc2dzW10gPSB7CiAvKiAweDAwICovICJNb2RpZnkgRGF0YSBQb2ludGVyIiwgIlN5bmNocm9ub3VzIERhdGEgVHJhbnNmZXIgUmVxdWVzdCIsCiAvKiAweDAyICovICJTQ1NJLUkgRXh0ZW5kZWQgSWRlbnRpZnkiLCAiV2lkZSBEYXRhIFRyYW5zZmVyIFJlcXVlc3QiLAotLyogMHgwNCAqLyAiUGFyYWxsZWwgUHJvdG9jb2wgUmVxdWVzdCIKKy8qIDB4MDQgKi8gIlBhcmFsbGVsIFByb3RvY29sIFJlcXVlc3QiLCAiTW9kaWZ5IEJpZGlyZWN0aW9uYWwgRGF0YSBQb2ludGVyIgogfTsKIAogc3RhdGljIHZvaWQgcHJpbnRfbmVnbyhjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIGludCBwZXIsIGludCBvZmYsIGludCB3aWR0aCkKQEAgLTEwODksMTEgKzExMjQsMjAgQEAKIAkJcHJpbnRrKCJ3aWR0aCA9ICVkICIsIDggPDwgbXNnW3dpZHRoXSk7CiB9CiAKK3N0YXRpYyB2b2lkIHByaW50X3B0cihjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIGludCBtc2IsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJaW50IHB0ciA9IChtc2dbbXNiXSA8PCAyNCkgfCAobXNnW21zYisxXSA8PCAxNikgfCAobXNnW21zYisyXSA8PCA4KSB8CisJCQltc2dbbXNiKzNdOworCXByaW50aygiJXMgPSAlZCAiLCBkZXNjLCBwdHIpOworfQorCiBpbnQgc3BpX3ByaW50X21zZyhjb25zdCB1bnNpZ25lZCBjaGFyICptc2cpCiB7Ci0JaW50IGxlbiA9IDAsIGk7CisJaW50IGxlbiA9IDEsIGk7CiAJaWYgKG1zZ1swXSA9PSBFWFRFTkRFRF9NRVNTQUdFKSB7Ci0JCWxlbiA9IDMgKyBtc2dbMV07CisJCWxlbiA9IDIgKyBtc2dbMV07CisJCWlmIChsZW4gPT0gMikKKwkJCWxlbiArPSAyNTY7CiAJCWlmIChtc2dbMl0gPCBBUlJBWV9TSVpFKGV4dGVuZGVkX21zZ3MpKQogCQkJcHJpbnRrICgiJXMgIiwgZXh0ZW5kZWRfbXNnc1ttc2dbMl1dKTsgCiAJCWVsc2UgCkBAIC0xMTAxLDggKzExNDUsNyBAQAogCQkJCShpbnQpIG1zZ1syXSk7CiAJCXN3aXRjaCAobXNnWzJdKSB7CiAJCWNhc2UgRVhURU5ERURfTU9ESUZZX0RBVEFfUE9JTlRFUjoKLQkJCXByaW50aygicG9pbnRlciA9ICVkIiwgKGludCkgKG1zZ1szXSA8PCAyNCkgfAotCQkJCShtc2dbNF0gPDwgMTYpIHwgKG1zZ1s1XSA8PCA4KSB8IG1zZ1s2XSk7CisJCQlwcmludF9wdHIobXNnLCAzLCAicG9pbnRlciIpOwogCQkJYnJlYWs7CiAJCWNhc2UgRVhURU5ERURfU0RUUjoKIAkJCXByaW50X25lZ28obXNnLCAzLCA0LCAwKTsKQEAgLTExMTMsNiArMTE1NiwxMCBAQAogCQljYXNlIEVYVEVOREVEX1BQUjoKIAkJCXByaW50X25lZ28obXNnLCAzLCA1LCA2KTsKIAkJCWJyZWFrOworCQljYXNlIEVYVEVOREVEX01PRElGWV9CSURJX0RBVEFfUFRSOgorCQkJcHJpbnRfcHRyKG1zZywgMywgIm91dCIpOworCQkJcHJpbnRfcHRyKG1zZywgNywgImluIik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJZm9yIChpID0gMjsgaSA8IGxlbjsgKytpKSAKIAkJCXByaW50aygiJTAyeCAiLCBtc2dbaV0pOwpAQCAtMTEyMywxNCArMTE3MCwxNCBAQAogCQkJKG1zZ1swXSAmIDB4NDApID8gIiIgOiAibm90ICIsCiAJCQkobXNnWzBdICYgMHgyMCkgPyAidGFyZ2V0IHJvdXRpbmUiIDogImx1biIsCiAJCQltc2dbMF0gJiAweDcpOwotCQlsZW4gPSAxOwogCS8qIE5vcm1hbCBPbmUgYnl0ZSAqLwogCX0gZWxzZSBpZiAobXNnWzBdIDwgMHgxZikgewotCQlpZiAobXNnWzBdIDwgQVJSQVlfU0laRShvbmVfYnl0ZV9tc2dzKSkKLQkJCXByaW50ayhvbmVfYnl0ZV9tc2dzW21zZ1swXV0pOworCQlpZiAobXNnWzBdIDwgQVJSQVlfU0laRShvbmVfYnl0ZV9tc2dzKSAmJiBvbmVfYnl0ZV9tc2dzW21zZ1swXV0pCisJCQlwcmludGsoIiVzICIsIG9uZV9ieXRlX21zZ3NbbXNnWzBdXSk7CiAJCWVsc2UKIAkJCXByaW50aygicmVzZXJ2ZWQgKCUwMngpICIsIG1zZ1swXSk7Ci0JCWxlbiA9IDE7CisJfSBlbHNlIGlmIChtc2dbMF0gPT0gMHg1NSkgeworCQlwcmludGsoIlFBUyBSZXF1ZXN0ICIpOwogCS8qIFR3byBieXRlICovCiAJfSBlbHNlIGlmIChtc2dbMF0gPD0gMHgyZikgewogCQlpZiAoKG1zZ1swXSAtIDB4MjApIDwgQVJSQVlfU0laRSh0d29fYnl0ZV9tc2dzKSkKQEAgLTExNDEsNyArMTE4OCw3IEBACiAJCQkJbXNnWzBdLCBtc2dbMV0pOwogCQlsZW4gPSAyOwogCX0gZWxzZSAKLQkJcHJpbnRrKCJyZXNlcnZlZCIpOworCQlwcmludGsoInJlc2VydmVkICIpOwogCXJldHVybiBsZW47CiB9CiBFWFBPUlRfU1lNQk9MKHNwaV9wcmludF9tc2cpOwpAQCAtMTE1MCwyMCArMTE5NywyMCBAQAogCiBpbnQgc3BpX3ByaW50X21zZyhjb25zdCB1bnNpZ25lZCBjaGFyICptc2cpCiB7Ci0JaW50IGxlbiA9IDAsIGk7CisJaW50IGxlbiA9IDEsIGk7CiAKIAlpZiAobXNnWzBdID09IEVYVEVOREVEX01FU1NBR0UpIHsKLQkJbGVuID0gMyArIG1zZ1sxXTsKKwkJbGVuID0gMiArIG1zZ1sxXTsKKwkJaWYgKGxlbiA9PSAyKQorCQkJbGVuICs9IDI1NjsKIAkJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQogCQkJcHJpbnRrKCIlMDJ4ICIsIG1zZ1tpXSk7CiAJLyogSWRlbnRpZnkgKi8KIAl9IGVsc2UgaWYgKG1zZ1swXSAmIDB4ODApIHsKIAkJcHJpbnRrKCIlMDJ4ICIsIG1zZ1swXSk7Ci0JCWxlbiA9IDE7CiAJLyogTm9ybWFsIE9uZSBieXRlICovCi0JfSBlbHNlIGlmIChtc2dbMF0gPCAweDFmKSB7CisJfSBlbHNlIGlmICgobXNnWzBdIDwgMHgxZikgfHwgKG1zZ1swXSA9PSAweDU1KSkgewogCQlwcmludGsoIiUwMnggIiwgbXNnWzBdKTsKLQkJbGVuID0gMTsKIAkvKiBUd28gYnl0ZSAqLwogCX0gZWxzZSBpZiAobXNnWzBdIDw9IDB4MmYpIHsKIAkJcHJpbnRrKCIlMDJ4ICUwMngiLCBtc2dbMF0sIG1zZ1sxXSk7CkBAIC0xMjY1LDE1ICsxMzEyLDEzIEBACiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKgogc3BpX2F0dGFjaF90cmFuc3BvcnQoc3RydWN0IHNwaV9mdW5jdGlvbl90ZW1wbGF0ZSAqZnQpCiB7Ci0Jc3RydWN0IHNwaV9pbnRlcm5hbCAqaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzcGlfaW50ZXJuYWwpLAotCQkJCQkgR0ZQX0tFUk5FTCk7CiAJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3Qgc3BpX2ludGVybmFsICppID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNwaV9pbnRlcm5hbCksCisJCQkJCSBHRlBfS0VSTkVMKTsKKwogCWlmICh1bmxpa2VseSghaSkpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KGksIDAsIHNpemVvZihzdHJ1Y3Qgc3BpX2ludGVybmFsKSk7Ci0KLQogCWktPnQudGFyZ2V0X2F0dHJzLmFjLmNsYXNzID0gJnNwaV90cmFuc3BvcnRfY2xhc3MuY2xhc3M7CiAJaS0+dC50YXJnZXRfYXR0cnMuYWMuYXR0cnMgPSAmaS0+YXR0cnNbMF07CiAJaS0+dC50YXJnZXRfYXR0cnMuYWMubWF0Y2ggPSBzcGlfdGFyZ2V0X21hdGNoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCA5MzBkYjM5Li5jNjQ3ZDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTcxLDYgKzcwLDI3IEBACiAgKi8KICNkZWZpbmUgU0RfTUFKT1JTCTE2CiAKK01PRFVMRV9BVVRIT1IoIkVyaWMgWW91bmdkYWxlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNDU0kgZGlzayAoc2QpIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLMF9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLMV9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLMl9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLM19NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLNF9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLNV9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLNl9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLN19NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLOF9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLOV9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLMTBfTUFKT1IpOworTU9EVUxFX0FMSUFTX0JMT0NLREVWX01BSk9SKFNDU0lfRElTSzExX01BSk9SKTsKK01PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihTQ1NJX0RJU0sxMl9NQUpPUik7CitNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IoU0NTSV9ESVNLMTNfTUFKT1IpOworTU9EVUxFX0FMSUFTX0JMT0NLREVWX01BSk9SKFNDU0lfRElTSzE0X01BSk9SKTsKK01PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihTQ1NJX0RJU0sxNV9NQUpPUik7CisKIC8qCiAgKiBUaGlzIGlzIGxpbWl0ZWQgYnkgdGhlIG5hbWluZyBzY2hlbWUgZW5mb3JjZWQgaW4gc2RfcHJvYmUsCiAgKiBhZGQgYW5vdGhlciBjaGFyYWN0ZXIgdG8gaXQgaWYgeW91IHJlYWxseSBuZWVkIG1vcmUgZGlza3MuCkBAIC04OSwxMiArMTA5LDE1IEBACiAjZGVmaW5lIFNEX01BWF9SRVRSSUVTCQk1CiAjZGVmaW5lIFNEX1BBU1NUSFJPVUdIX1JFVFJJRVMJMQogCi1zdGF0aWMgdm9pZCBzY3NpX2Rpc2tfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZik7CisvKgorICogU2l6ZSBvZiB0aGUgaW5pdGlhbCBkYXRhIGJ1ZmZlciBmb3IgbW9kZSBhbmQgcmVhZCBjYXBhY2l0eSBkYXRhCisgKi8KKyNkZWZpbmUgU0RfQlVGX1NJWkUJCTUxMgogCiBzdHJ1Y3Qgc2NzaV9kaXNrIHsKIAlzdHJ1Y3Qgc2NzaV9kcml2ZXIgKmRyaXZlcjsJLyogYWx3YXlzICZzZF90ZW1wbGF0ZSAqLwogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlOwotCXN0cnVjdCBrcmVmCWtyZWY7CisJc3RydWN0IGNsYXNzX2RldmljZSBjZGV2OwogCXN0cnVjdCBnZW5kaXNrCSpkaXNrOwogCXVuc2lnbmVkIGludAlvcGVuZXJzOwkvKiBwcm90ZWN0ZWQgYnkgQktMIGZvciBub3csIHl1Y2sgKi8KIAlzZWN0b3JfdAljYXBhY2l0eTsJLyogc2l6ZSBpbiA1MTItYnl0ZSBzZWN0b3JzICovCkBAIC0xMDUsNiArMTI4LDcgQEAKIAl1bnNpZ25lZAlSQ0QgOiAxOwkvKiBzdGF0ZSBvZiBkaXNrIFJDRCBiaXQsIHVudXNlZCAqLwogCXVuc2lnbmVkCURQT0ZVQSA6IDE7CS8qIHN0YXRlIG9mIGRpc2sgRFBPRlVBIGJpdCAqLwogfTsKKyNkZWZpbmUgdG9fc2NzaV9kaXNrKG9iaikgY29udGFpbmVyX29mKG9iaixzdHJ1Y3Qgc2NzaV9kaXNrLGNkZXYpCiAKIHN0YXRpYyBERUZJTkVfSURSKHNkX2luZGV4X2lkcik7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNkX2luZGV4X2xvY2spOwpAQCAtMTI2LDYgKzE1MCw5MiBAQAogc3RhdGljIHZvaWQgc2RfcHJlcGFyZV9mbHVzaChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiBzdGF0aWMgdm9pZCBzZF9yZWFkX2NhcGFjaXR5KHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIGNoYXIgKmRpc2tuYW1lLAogCQkJICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIpOworc3RhdGljIHZvaWQgc2NzaV9kaXNrX3JlbGVhc2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2Rldik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzZF9jYWNoZV90eXBlc1tdID0geworCSJ3cml0ZSB0aHJvdWdoIiwgIm5vbmUiLCAid3JpdGUgYmFjayIsCisJIndyaXRlIGJhY2ssIG5vIHJlYWQgKGRhZnQpIgorfTsKKworc3RhdGljIHNzaXplX3Qgc2Rfc3RvcmVfY2FjaGVfdHlwZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjb25zdCBjaGFyICpidWYsCisJCQkJICAgc2l6ZV90IGNvdW50KQoreworCWludCBpLCBjdCA9IC0xLCByY2QsIHdjZSwgc3A7CisJc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHRvX3Njc2lfZGlzayhjZGV2KTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCA9IHNka3AtPmRldmljZTsKKwljaGFyIGJ1ZmZlcls2NF07CisJY2hhciAqYnVmZmVyX2RhdGE7CisJc3RydWN0IHNjc2lfbW9kZV9kYXRhIGRhdGE7CisJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCWludCBsZW47CisKKwlpZiAoc2RwLT50eXBlICE9IFRZUEVfRElTSykKKwkJLyogbm8gY2FjaGUgY29udHJvbCBvbiBSQkMgZGV2aWNlczsgdGhlb3JldGljYWxseSB0aGV5CisJCSAqIGNhbiBkbyBpdCwgYnV0IHRoZXJlJ3MgcHJvYmFibHkgc28gbWFueSBleGNlcHRpb25zCisJCSAqIGl0J3Mgbm90IHdvcnRoIHRoZSByaXNrICovCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzZF9jYWNoZV90eXBlcykvc2l6ZW9mKHNkX2NhY2hlX3R5cGVzWzBdKTsgaSsrKSB7CisJCWNvbnN0IGludCBsZW4gPSBzdHJsZW4oc2RfY2FjaGVfdHlwZXNbaV0pOworCQlpZiAoc3RybmNtcChzZF9jYWNoZV90eXBlc1tpXSwgYnVmLCBsZW4pID09IDAgJiYKKwkJICAgIGJ1ZltsZW5dID09ICdcbicpIHsKKwkJCWN0ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChjdCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCXJjZCA9IGN0ICYgMHgwMSA/IDEgOiAwOworCXdjZSA9IGN0ICYgMHgwMiA/IDEgOiAwOworCWlmIChzY3NpX21vZGVfc2Vuc2Uoc2RwLCAweDA4LCA4LCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBTRF9USU1FT1VULAorCQkJICAgIFNEX01BWF9SRVRSSUVTLCAmZGF0YSwgTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCWxlbiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZmZlciksIGRhdGEubGVuZ3RoIC0gZGF0YS5oZWFkZXJfbGVuZ3RoIC0KKwkJICBkYXRhLmJsb2NrX2Rlc2NyaXB0b3JfbGVuZ3RoKTsKKwlidWZmZXJfZGF0YSA9IGJ1ZmZlciArIGRhdGEuaGVhZGVyX2xlbmd0aCArCisJCWRhdGEuYmxvY2tfZGVzY3JpcHRvcl9sZW5ndGg7CisJYnVmZmVyX2RhdGFbMl0gJj0gfjB4MDU7CisJYnVmZmVyX2RhdGFbMl0gfD0gd2NlIDw8IDIgfCByY2Q7CisJc3AgPSBidWZmZXJfZGF0YVswXSAmIDB4ODAgPyAxIDogMDsKKworCWlmIChzY3NpX21vZGVfc2VsZWN0KHNkcCwgMSwgc3AsIDgsIGJ1ZmZlcl9kYXRhLCBsZW4sIFNEX1RJTUVPVVQsCisJCQkgICAgIFNEX01BWF9SRVRSSUVTLCAmZGF0YSwgJnNzaGRyKSkgeworCQlpZiAoc2NzaV9zZW5zZV92YWxpZCgmc3NoZHIpKQorCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoc2RrcC0+ZGlzay0+ZGlza19uYW1lLCAmc3NoZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2RfcmV2YWxpZGF0ZV9kaXNrKHNka3AtPmRpc2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2Rfc2hvd19jYWNoZV90eXBlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGNkZXYpOworCWludCBjdCA9IHNka3AtPlJDRCArIDIqc2RrcC0+V0NFOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNDAsICIlc1xuIiwgc2RfY2FjaGVfdHlwZXNbY3RdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2Rfc2hvd19mdWEoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soY2Rldik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiV1XG4iLCBzZGtwLT5EUE9GVUEpOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgc2RfZGlza19hdHRyc1tdID0geworCV9fQVRUUihjYWNoZV90eXBlLCBTX0lSVUdPfFNfSVdVU1IsIHNkX3Nob3dfY2FjaGVfdHlwZSwKKwkgICAgICAgc2Rfc3RvcmVfY2FjaGVfdHlwZSksCisJX19BVFRSKEZVQSwgU19JUlVHTywgc2Rfc2hvd19mdWEsIE5VTEwpLAorCV9fQVRUUl9OVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGFzcyBzZF9kaXNrX2NsYXNzID0geworCS5uYW1lCQk9ICJzY3NpX2Rpc2siLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVsZWFzZQk9IHNjc2lfZGlza19yZWxlYXNlLAorCS5jbGFzc19kZXZfYXR0cnMgPSBzZF9kaXNrX2F0dHJzLAorfTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX2RyaXZlciBzZF90ZW1wbGF0ZSA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLApAQCAtMTY5LDggKzI3OSw2IEBACiAJfQogfQogCi0jZGVmaW5lIHRvX3Njc2lfZGlzayhvYmopIGNvbnRhaW5lcl9vZihvYmosc3RydWN0IHNjc2lfZGlzayxrcmVmKQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY3NpX2Rpc2sgKnNjc2lfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGRpc2stPnByaXZhdGVfZGF0YSwgc3RydWN0IHNjc2lfZGlzaywgZHJpdmVyKTsKQEAgLTE4Myw3ICsyOTEsNyBAQAogCWlmIChkaXNrLT5wcml2YXRlX2RhdGEpIHsKIAkJc2RrcCA9IHNjc2lfZGlzayhkaXNrKTsKIAkJaWYgKHNjc2lfZGV2aWNlX2dldChzZGtwLT5kZXZpY2UpID09IDApCi0JCQlrcmVmX2dldCgmc2RrcC0+a3JlZik7CisJCQljbGFzc19kZXZpY2VfZ2V0KCZzZGtwLT5jZGV2KTsKIAkJZWxzZQogCQkJc2RrcCA9IE5VTEw7CiAJfQpAQCAtMjE3LDcgKzMyNSw3IEBACiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2RrcC0+ZGV2aWNlOwogCiAJbXV0ZXhfbG9jaygmc2RfcmVmX211dGV4KTsKLQlrcmVmX3B1dCgmc2RrcC0+a3JlZiwgc2NzaV9kaXNrX3JlbGVhc2UpOworCWNsYXNzX2RldmljZV9wdXQoJnNka3AtPmNkZXYpOwogCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKIAltdXRleF91bmxvY2soJnNkX3JlZl9tdXRleCk7CiB9CkBAIC0xMjM5LDcgKzEzNDcsNyBAQAogCiAvKgogICogcmVhZCB3cml0ZSBwcm90ZWN0IHNldHRpbmcsIGlmIHBvc3NpYmxlIC0gY2FsbGVkIG9ubHkgaW4gc2RfcmV2YWxpZGF0ZV9kaXNrKCkKLSAqIGNhbGxlZCB3aXRoIGJ1ZmZlciBvZiBsZW5ndGggNTEyCisgKiBjYWxsZWQgd2l0aCBidWZmZXIgb2YgbGVuZ3RoIFNEX0JVRl9TSVpFCiAgKi8KIHN0YXRpYyB2b2lkCiBzZF9yZWFkX3dyaXRlX3Byb3RlY3RfZmxhZyhzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCBjaGFyICpkaXNrbmFtZSwKQEAgLTEyOTcsNyArMTQwNSw3IEBACiAKIC8qCiAgKiBzZF9yZWFkX2NhY2hlX3R5cGUgLSBjYWxsZWQgb25seSBmcm9tIHNkX3JldmFsaWRhdGVfZGlzaygpCi0gKiBjYWxsZWQgd2l0aCBidWZmZXIgb2YgbGVuZ3RoIDUxMgorICogY2FsbGVkIHdpdGggYnVmZmVyIG9mIGxlbmd0aCBTRF9CVUZfU0laRQogICovCiBzdGF0aWMgdm9pZAogc2RfcmVhZF9jYWNoZV90eXBlKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIGNoYXIgKmRpc2tuYW1lLApAQCAtMTMyOCw2ICsxNDM2LDEyIEBACiAJaWYgKCFzY3NpX3N0YXR1c19pc19nb29kKHJlcykpCiAJCWdvdG8gYmFkX3NlbnNlOwogCisJaWYgKCFkYXRhLmhlYWRlcl9sZW5ndGgpIHsKKwkJbW9kZXBhZ2UgPSA2OworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtaXNzaW5nIGhlYWRlciBpbiBNT0RFX1NFTlNFIHJlc3BvbnNlXG4iLAorCQkgICAgICAgZGlza25hbWUpOworCX0KKwogCS8qIHRoYXQgd2VudCBPSywgbm93IGFzayBmb3IgdGhlIHByb3BlciBsZW5ndGggKi8KIAlsZW4gPSBkYXRhLmxlbmd0aDsKIApAQCAtMTM0MiwxOCArMTQ1NiwyMiBAQAogCiAJLyogVGFrZSBoZWFkZXJzIGFuZCBibG9jayBkZXNjcmlwdG9ycyBpbnRvIGFjY291bnQgKi8KIAlsZW4gKz0gZGF0YS5oZWFkZXJfbGVuZ3RoICsgZGF0YS5ibG9ja19kZXNjcmlwdG9yX2xlbmd0aDsKKwlpZiAobGVuID4gU0RfQlVGX1NJWkUpCisJCWdvdG8gYmFkX3NlbnNlOwogCiAJLyogR2V0IHRoZSBkYXRhICovCiAJcmVzID0gc2RfZG9fbW9kZV9zZW5zZShzZHAsIGRiZCwgbW9kZXBhZ2UsIGJ1ZmZlciwgbGVuLCAmZGF0YSwgJnNzaGRyKTsKIAogCWlmIChzY3NpX3N0YXR1c19pc19nb29kKHJlcykpIHsKLQkJY29uc3QgY2hhciAqdHlwZXNbXSA9IHsKLQkJCSJ3cml0ZSB0aHJvdWdoIiwgIm5vbmUiLCAid3JpdGUgYmFjayIsCi0JCQkid3JpdGUgYmFjaywgbm8gcmVhZCAoZGFmdCkiCi0JCX07CiAJCWludCBjdCA9IDA7CiAJCWludCBvZmZzZXQgPSBkYXRhLmhlYWRlcl9sZW5ndGggKyBkYXRhLmJsb2NrX2Rlc2NyaXB0b3JfbGVuZ3RoOwogCisJCWlmIChvZmZzZXQgPj0gU0RfQlVGX1NJWkUgLSAyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtYWxmb3JtZWQgTU9ERSBTRU5TRSByZXNwb25zZSIsCisJCQkJZGlza25hbWUpOworCQkJZ290byBkZWZhdWx0czsKKwkJfQorCiAJCWlmICgoYnVmZmVyW29mZnNldF0gJiAweDNmKSAhPSBtb2RlcGFnZSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZ290IHdyb25nIHBhZ2VcbiIsIGRpc2tuYW1lKTsKIAkJCWdvdG8gZGVmYXVsdHM7CkBAIC0xMzc3LDcgKzE0OTUsNyBAQAogCQljdCA9ICBzZGtwLT5SQ0QgKyAyKnNka3AtPldDRTsKIAogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNDU0kgZGV2aWNlICVzOiBkcml2ZSBjYWNoZTogJXMlc1xuIiwKLQkJICAgICAgIGRpc2tuYW1lLCB0eXBlc1tjdF0sCisJCSAgICAgICBkaXNrbmFtZSwgc2RfY2FjaGVfdHlwZXNbY3RdLAogCQkgICAgICAgc2RrcC0+RFBPRlVBID8gIiB3LyBGVUEiIDogIiIpOwogCiAJCXJldHVybjsKQEAgLTEzOTgsNiArMTUxNiw3IEBACiAJICAgICAgIGRpc2tuYW1lKTsKIAlzZGtwLT5XQ0UgPSAwOwogCXNka3AtPlJDRCA9IDA7CisJc2RrcC0+RFBPRlVBID0gMDsKIH0KIAogLyoqCkBAIC0xNDIxLDcgKzE1NDAsNyBAQAogCWlmICghc2NzaV9kZXZpY2Vfb25saW5lKHNkcCkpCiAJCWdvdG8gb3V0OwogCi0JYnVmZmVyID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwgfCBfX0dGUF9ETUEpOworCWJ1ZmZlciA9IGttYWxsb2MoU0RfQlVGX1NJWkUsIEdGUF9LRVJORUwgfCBfX0dGUF9ETUEpOwogCWlmICghYnVmZmVyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIihzZF9yZXZhbGlkYXRlX2Rpc2s6KSBNZW1vcnkgYWxsb2NhdGlvbiAiCiAJCSAgICAgICAiZmFpbHVyZS5cbiIpOwpAQCAtMTUwMywxMyArMTYyMiwxMCBAQAogCQkJCQkic2RfYXR0YWNoXG4iKSk7CiAKIAllcnJvciA9IC1FTk9NRU07Ci0Jc2RrcCA9IGttYWxsb2Moc2l6ZW9mKCpzZGtwKSwgR0ZQX0tFUk5FTCk7CisJc2RrcCA9IGt6YWxsb2Moc2l6ZW9mKCpzZGtwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZGtwKQogCQlnb3RvIG91dDsKIAotCW1lbXNldCAoc2RrcCwgMCwgc2l6ZW9mKCpzZGtwKSk7Ci0Ja3JlZl9pbml0KCZzZGtwLT5rcmVmKTsKLQogCWdkID0gYWxsb2NfZGlzaygxNik7CiAJaWYgKCFnZCkKIAkJZ290byBvdXRfZnJlZTsKQEAgLTE1MjYsNyArMTY0MiwxNiBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfcHV0OwogCisJY2xhc3NfZGV2aWNlX2luaXRpYWxpemUoJnNka3AtPmNkZXYpOworCXNka3AtPmNkZXYuZGV2ID0gJnNkcC0+c2Rldl9nZW5kZXY7CisJc2RrcC0+Y2Rldi5jbGFzcyA9ICZzZF9kaXNrX2NsYXNzOworCXN0cm5jcHkoc2RrcC0+Y2Rldi5jbGFzc19pZCwgc2RwLT5zZGV2X2dlbmRldi5idXNfaWQsIEJVU19JRF9TSVpFKTsKKworCWlmIChjbGFzc19kZXZpY2VfYWRkKCZzZGtwLT5jZGV2KSkKKwkJZ290byBvdXRfcHV0OworCiAJZ2V0X2RldmljZSgmc2RwLT5zZGV2X2dlbmRldik7CisKIAlzZGtwLT5kZXZpY2UgPSBzZHA7CiAJc2RrcC0+ZHJpdmVyID0gJnNkX3RlbXBsYXRlOwogCXNka3AtPmRpc2sgPSBnZDsKQEAgLTE1NTgsOCArMTY4Myw2IEBACiAJCQknYScgKyBtMSwgJ2EnICsgbTIsICdhJyArIG0zKTsKIAl9CiAKLQlzdHJjcHkoZ2QtPmRldmZzX25hbWUsIHNkcC0+ZGV2ZnNfbmFtZSk7Ci0KIAlnZC0+cHJpdmF0ZV9kYXRhID0gJnNka3AtPmRyaXZlcjsKIAlnZC0+cXVldWUgPSBzZGtwLT5kZXZpY2UtPnJlcXVlc3RfcXVldWU7CiAKQEAgLTE1NzgsMTEgKzE3MDEsMTEgQEAKIAogCXJldHVybiAwOwogCi1vdXRfcHV0OgorIG91dF9wdXQ6CiAJcHV0X2Rpc2soZ2QpOwotb3V0X2ZyZWU6Cisgb3V0X2ZyZWU6CiAJa2ZyZWUoc2RrcCk7Ci1vdXQ6Cisgb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTYwMSwxMiArMTcyNCwxMyBAQAogewogCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAorCWNsYXNzX2RldmljZV9kZWwoJnNka3AtPmNkZXYpOwogCWRlbF9nZW5kaXNrKHNka3AtPmRpc2spOwogCXNkX3NodXRkb3duKGRldik7CiAKIAltdXRleF9sb2NrKCZzZF9yZWZfbXV0ZXgpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwotCWtyZWZfcHV0KCZzZGtwLT5rcmVmLCBzY3NpX2Rpc2tfcmVsZWFzZSk7CisJY2xhc3NfZGV2aWNlX3B1dCgmc2RrcC0+Y2Rldik7CiAJbXV0ZXhfdW5sb2NrKCZzZF9yZWZfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0xNjE0LDE2ICsxNzM4LDE2IEBACiAKIC8qKgogICoJc2NzaV9kaXNrX3JlbGVhc2UgLSBDYWxsZWQgdG8gZnJlZSB0aGUgc2NzaV9kaXNrIHN0cnVjdHVyZQotICoJQGtyZWY6IHBvaW50ZXIgdG8gZW1iZWRkZWQga3JlZgorICoJQGNkZXY6IHBvaW50ZXIgdG8gZW1iZWRkZWQgY2xhc3MgZGV2aWNlCiAgKgogICoJc2RfcmVmX211dGV4IG11c3QgYmUgaGVsZCBlbnRlcmluZyB0aGlzIHJvdXRpbmUuICBCZWNhdXNlIGl0IGlzCiAgKgljYWxsZWQgb24gbGFzdCBwdXQsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgc2NzaV9kaXNrX2dldCgpCiAgKglzY3NpX2Rpc2tfcHV0KCkgaGVscGVycyB3aGljaCBtYW5pcHVsYXRlIHRoZSBzZW1hcGhvcmUgZGlyZWN0bHkKLSAqCWFuZCBuZXZlciBkbyBhIGRpcmVjdCBrcmVmX3B1dCgpLgorICoJYW5kIG5ldmVyIGRvIGEgZGlyZWN0IGNsYXNzX2RldmljZV9wdXQoKS4KICAqKi8KLXN0YXRpYyB2b2lkIHNjc2lfZGlza19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgc2NzaV9kaXNrX3JlbGVhc2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2RldikKIHsKLQlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gdG9fc2NzaV9kaXNrKGtyZWYpOworCXN0cnVjdCBzY3NpX2Rpc2sgKnNka3AgPSB0b19zY3NpX2Rpc2soY2Rldik7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBzZGtwLT5kaXNrOwogCQogCXNwaW5fbG9jaygmc2RfaW5kZXhfbG9jayk7CkBAIC0xNjc3LDYgKzE4MDEsOCBAQAogCWlmICghbWFqb3JzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWNsYXNzX3JlZ2lzdGVyKCZzZF9kaXNrX2NsYXNzKTsKKwogCXJldHVybiBzY3NpX3JlZ2lzdGVyX2RyaXZlcigmc2RfdGVtcGxhdGUuZ2VuZHJ2KTsKIH0KIApAQCAtMTY5NCwxMSArMTgyMCw5IEBACiAJc2NzaV91bnJlZ2lzdGVyX2RyaXZlcigmc2RfdGVtcGxhdGUuZ2VuZHJ2KTsKIAlmb3IgKGkgPSAwOyBpIDwgU0RfTUFKT1JTOyBpKyspCiAJCXVucmVnaXN0ZXJfYmxrZGV2KHNkX21ham9yKGkpLCAic2QiKTsKLX0KIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRXJpYyBZb3VuZ2RhbGUiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU0NTSSBkaXNrIChzZCkgZHJpdmVyIik7CisJY2xhc3NfdW5yZWdpc3Rlcigmc2RfZGlza19jbGFzcyk7Cit9CiAKIG1vZHVsZV9pbml0KGluaXRfc2QpOwogbW9kdWxlX2V4aXQoZXhpdF9zZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDJhNTQ3NTMuLjc0MDVkMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KQEAgLTExNDAsMzIgKzExMzksNiBAQAogCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAwOwogfQogCi0vKiBXaGVuIHN0YXJ0RmluaXNoPT0xIGluY3JlbWVudHMgcGFnZSBjb3VudHMgZm9yIHBhZ2VzIG90aGVyIHRoYW4gdGhlIAotICAgZmlyc3Qgb2Ygc2NhdHRlciBnYXRoZXIgZWxlbWVudHMgb2J0YWluZWQgZnJvbSBhbGxvY19wYWdlcygpLgotICAgV2hlbiBzdGFydEZpbmlzaD09MCBkZWNyZW1lbnRzIC4uLiAqLwotc3RhdGljIHZvaWQKLXNnX3JiX2NvcnJlY3Q0bW1hcChTZ19zY2F0dGVyX2hvbGQgKiByc3Zfc2NocCwgaW50IHN0YXJ0RmluaXNoKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSByc3Zfc2NocC0+YnVmZmVyOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBrLCBtOwotCi0JU0NTSV9MT0dfVElNRU9VVCgzLCBwcmludGsoInNnX3JiX2NvcnJlY3Q0bW1hcDogc3RhcnRGaW5pc2g9JWQsIHNjYXRnPSVkXG4iLCAKLQkJCQkgICBzdGFydEZpbmlzaCwgcnN2X3NjaHAtPmtfdXNlX3NnKSk7Ci0JLyogTi5CLiBjb3JyZWN0aW9uIF9ub3RfIGFwcGxpZWQgdG8gYmFzZSBwYWdlIG9mIGVhY2ggYWxsb2NhdGlvbiAqLwotCWZvciAoayA9IDA7IGsgPCByc3Zfc2NocC0+a191c2Vfc2c7ICsraywgKytzZykgewotCQlmb3IgKG0gPSBQQUdFX1NJWkU7IG0gPCBzZy0+bGVuZ3RoOyBtICs9IFBBR0VfU0laRSkgewotCQkJcGFnZSA9IHNnLT5wYWdlOwotCQkJaWYgKHN0YXJ0RmluaXNoKQotCQkJCWdldF9wYWdlKHBhZ2UpOwotCQkJZWxzZSB7Ci0JCQkJaWYgKHBhZ2VfY291bnQocGFnZSkgPiAwKQotCQkJCQlfX3B1dF9wYWdlKHBhZ2UpOwotCQkJfQotCQl9Ci0JfQotfQotCiBzdGF0aWMgc3RydWN0IHBhZ2UgKgogc2dfdm1hX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgKnR5cGUpCiB7CkBAIC0xMjM3LDEwICsxMjEwLDcgQEAKIAkJc2EgKz0gbGVuOwogCX0KIAotCWlmICgwID09IHNmcC0+bW1hcF9jYWxsZWQpIHsKLQkJc2dfcmJfY29ycmVjdDRtbWFwKHJzdl9zY2hwLCAxKTsJLyogZG8gb25seSBvbmNlIHBlciBmZCBsaWZldGltZSAqLwotCQlzZnAtPm1tYXBfY2FsbGVkID0gMTsKLQl9CisJc2ZwLT5tbWFwX2NhbGxlZCA9IDE7CiAJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IHNmcDsKIAl2bWEtPnZtX29wcyA9ICZzZ19tbWFwX3ZtX29wczsKQEAgLTEzNjEsNyArMTMzMSw3IEBACiAJdm9pZCAqb2xkX3NnX2Rldl9hcnIgPSBOVUxMOwogCWludCBrLCBlcnJvcjsKIAotCXNkcCA9IGttYWxsb2Moc2l6ZW9mKFNnX2RldmljZSksIEdGUF9LRVJORUwpOworCXNkcCA9IGt6YWxsb2Moc2l6ZW9mKFNnX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghc2RwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImttYWxsb2MgU2dfZGV2aWNlIGZhaWx1cmVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzNzMsMTIgKzEzNDMsMTEgQEAKIAkJaW50IHRtcF9kZXZfbWF4ID0gc2dfbnJfZGV2ICsgU0dfREVWX0FSUl9MVU1QOwogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmc2dfZGV2X2Fycl9sb2NrLCBpZmxhZ3MpOwogCi0JCXRtcF9kYSA9IGttYWxsb2ModG1wX2Rldl9tYXggKiBzaXplb2YoU2dfZGV2aWNlICopLCBHRlBfS0VSTkVMKTsKKwkJdG1wX2RhID0ga3phbGxvYyh0bXBfZGV2X21heCAqIHNpemVvZihTZ19kZXZpY2UgKiksIEdGUF9LRVJORUwpOwogCQlpZiAodW5saWtlbHkoIXRtcF9kYSkpCiAJCQlnb3RvIGV4cGFuZF9mYWlsZWQ7CiAKIAkJd3JpdGVfbG9ja19pcnFzYXZlKCZzZ19kZXZfYXJyX2xvY2ssIGlmbGFncyk7Ci0JCW1lbXNldCh0bXBfZGEsIDAsIHRtcF9kZXZfbWF4ICogc2l6ZW9mKFNnX2RldmljZSAqKSk7CiAJCW1lbWNweSh0bXBfZGEsIHNnX2Rldl9hcnIsIHNnX2Rldl9tYXggKiBzaXplb2YoU2dfZGV2aWNlICopKTsKIAkJb2xkX3NnX2Rldl9hcnIgPSBzZ19kZXZfYXJyOwogCQlzZ19kZXZfYXJyID0gdG1wX2RhOwpAQCAtMTM5MSw3ICsxMzYwLDYgQEAKIAlpZiAodW5saWtlbHkoayA+PSBTR19NQVhfREVWUykpCiAJCWdvdG8gb3ZlcmZsb3c7CiAKLQltZW1zZXQoc2RwLCAwLCBzaXplb2YoKnNkcCkpOwogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19hbGxvYzogZGV2PSVkIFxuIiwgaykpOwogCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAic2clZCIsIGspOwogCWRpc2stPmZpcnN0X21pbm9yID0gazsKQEAgLTE0NTgsMTQgKzE0MjYsMTAgQEAKIAlrID0gZXJyb3I7CiAJc2RwID0gc2dfZGV2X2FycltrXTsKIAotCWRldmZzX21rX2NkZXYoTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLCBrKSwKLQkJCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAsCi0JCQkiJXMvZ2VuZXJpYyIsIHNjc2lkcC0+ZGV2ZnNfbmFtZSk7CiAJZXJyb3IgPSBjZGV2X2FkZChjZGV2LCBNS0RFVihTQ1NJX0dFTkVSSUNfTUFKT1IsIGspLCAxKTsKLQlpZiAoZXJyb3IpIHsKLQkJZGV2ZnNfcmVtb3ZlKCIlcy9nZW5lcmljIiwgc2NzaWRwLT5kZXZmc19uYW1lKTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwotCX0KKwogCXNkcC0+Y2RldiA9IGNkZXY7CiAJaWYgKHNnX3N5c2ZzX3ZhbGlkKSB7CiAJCXN0cnVjdCBjbGFzc19kZXZpY2UgKiBzZ19jbGFzc19tZW1iZXI7CkBAIC0xNTU1LDcgKzE1MTksNiBAQAogCQljbGFzc19kZXZpY2VfZGVzdHJveShzZ19zeXNmc19jbGFzcywgTUtERVYoU0NTSV9HRU5FUklDX01BSk9SLCBrKSk7CiAJCWNkZXZfZGVsKHNkcC0+Y2Rldik7CiAJCXNkcC0+Y2RldiA9IE5VTEw7Ci0JCWRldmZzX3JlbW92ZSgiJXMvZ2VuZXJpYyIsIHNjc2lkcC0+ZGV2ZnNfbmFtZSk7CiAJCXB1dF9kaXNrKHNkcC0+ZGlzayk7CiAJCXNkcC0+ZGlzayA9IE5VTEw7CiAJCWlmIChOVUxMID09IHNkcC0+aGVhZGZwKQpAQCAtMTU3Nyw2ICsxNTQwLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU0NTSSBnZW5lcmljIChzZykgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihTR19WRVJTSU9OX1NUUik7CitNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTQ1NJX0dFTkVSSUNfTUFKT1IpOwogCiBNT0RVTEVfUEFSTV9ERVNDKGRlZl9yZXNlcnZlZF9zaXplLCAic2l6ZSBvZiBidWZmZXIgcmVzZXJ2ZWQgZm9yIGVhY2ggZmQiKTsKIE1PRFVMRV9QQVJNX0RFU0MoYWxsb3dfZGlvLCAiYWxsb3cgZGlyZWN0IEkvTyAoZGVmYXVsdDogMCAoZGlzYWxsb3cpKSIpOwpAQCAtMjE2Miw3ICsyMTI2LDcgQEAKIAogCXNycC0+cmVzX3VzZWQgPSAxOwogCVNDU0lfTE9HX1RJTUVPVVQoNCwgcHJpbnRrKCJzZ19saW5rX3Jlc2VydmU6IHNpemU9JWRcbiIsIHNpemUpKTsKLQlyZW0gPSBzaXplID0gKHNpemUgKyAxKSAmICh+MSk7CS8qIHJvdW5kIHRvIGV2ZW4gZm9yIGFoYTE1NDIgKi8KKwlyZW0gPSBzaXplOwogCiAJZm9yIChrID0gMDsgayA8IHJzdl9zY2hwLT5rX3VzZV9zZzsgKytrLCArK3NnKSB7CiAJCW51bSA9IHNnLT5sZW5ndGg7CkBAIC0yMzk1LDggKzIzNTksNiBAQAogCQlTQ1NJX0xPR19USU1FT1VUKDYsIAogCQkJcHJpbnRrKCJfX3NnX3JlbW92ZV9zZnA6ICAgIGJ1ZmZsZW49JWQsIGtfdXNlX3NnPSVkXG4iLAogCQkJKGludCkgc2ZwLT5yZXNlcnZlLmJ1ZmZsZW4sIChpbnQpIHNmcC0+cmVzZXJ2ZS5rX3VzZV9zZykpOwotCQlpZiAoc2ZwLT5tbWFwX2NhbGxlZCkKLQkJCXNnX3JiX2NvcnJlY3Q0bW1hcCgmc2ZwLT5yZXNlcnZlLCAwKTsJLyogdW5kbyBjb3JyZWN0aW9uICovCiAJCXNnX3JlbW92ZV9zY2F0KCZzZnAtPnJlc2VydmUpOwogCX0KIAlzZnAtPnBhcmVudGRwID0gTlVMTDsKQEAgLTI0NzgsOSArMjQ0MCw5IEBACiAJCXJldHVybiByZXNwOwogCiAJaWYgKGxvd0RtYSkKLQkJcGFnZV9tYXNrID0gR0ZQX0FUT01JQyB8IEdGUF9ETUEgfCBfX0dGUF9OT1dBUk47CisJCXBhZ2VfbWFzayA9IEdGUF9BVE9NSUMgfCBHRlBfRE1BIHwgX19HRlBfQ09NUCB8IF9fR0ZQX05PV0FSTjsKIAllbHNlCi0JCXBhZ2VfbWFzayA9IEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk47CisJCXBhZ2VfbWFzayA9IEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9XQVJOOwogCiAJZm9yIChvcmRlciA9IDAsIGFfc2l6ZSA9IFBBR0VfU0laRTsgYV9zaXplIDwgcnFTejsKIAkgICAgIG9yZGVyKyssIGFfc2l6ZSA8PD0gMSkgOwpAQCAtMjk3NCw0ICsyOTM2LDMgQEAKIAogbW9kdWxlX2luaXQoaW5pdF9zZyk7CiBtb2R1bGVfZXhpdChleGl0X3NnKTsKLU1PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKFNDU0lfR0VORVJJQ19NQUpPUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jIGIvZHJpdmVycy9zY3NpL3NnaXdkOTMuYwppbmRleCBiZjJjZWI1Li43Y2QzNjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgX19pbml0IHNnaXdkOTNfZGV0ZWN0KHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKlNHSWJsb3dzKQorc3RhdGljIGludCBfX2luaXQgc2dpd2Q5M19kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqU0dJYmxvd3MpCiB7CiAJaW50IGZvdW5kID0gMDsKIApAQCAtMjg4LDcgKzI4OCw3IEBACiAJcmV0dXJuIGZvdW5kOwogfQogCi1pbnQgc2dpd2Q5M19yZWxlYXNlKHN0cnVjdCBTY3NpX0hvc3QgKmluc3RhbmNlKQorc3RhdGljIGludCBzZ2l3ZDkzX3JlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UpCiB7CiAJc3RydWN0IGlwMjJfaG9zdGRhdGEgKmhkYXRhID0gSERBVEEoaW5zdGFuY2UpOwogCWludCBpcnEgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NpbTcxMC5jIGIvZHJpdmVycy9zY3NpL3NpbTcxMC5jCmluZGV4IDkxNzE3ODguLjMyNzRhYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zaW03MTAuYworKysgYi9kcml2ZXJzL3Njc2kvc2ltNzEwLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogIG91dF9wdXRfaG9zdDoKIAlzY3NpX2hvc3RfcHV0KGhvc3QpOwogIG91dF9yZWxlYXNlOgotCXJlbGVhc2VfcmVnaW9uKGhvc3QtPmJhc2UsIDY0KTsKKwlyZWxlYXNlX3JlZ2lvbihiYXNlX2FkZHIsIDY0KTsKICBvdXRfZnJlZToKIAlrZnJlZShob3N0ZGF0YSk7CiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCA5OTdmOGUzLi43YzgwNzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtNjAsNiArNjAsMTAgQEAKICNpbmNsdWRlICJzci5oIgogCiAKK01PRFVMRV9ERVNDUklQVElPTigiU0NTSSBjZHJvbSAoc3IpIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX0JMT0NLREVWX01BSk9SKFNDU0lfQ0RST01fTUFKT1IpOworCiAjZGVmaW5lIFNSX0RJU0tTCTI1NgogCiAjZGVmaW5lIE1BWF9SRVRSSUVTCTMKQEAgLTY3LDcgKzcxLDcgQEAKICNkZWZpbmUgU1JfQ0FQQUJJTElUSUVTIFwKIAkoQ0RDX0NMT1NFX1RSQVl8Q0RDX09QRU5fVFJBWXxDRENfTE9DS3xDRENfU0VMRUNUX1NQRUVEfCBcCiAJIENEQ19TRUxFQ1RfRElTQ3xDRENfTVVMVElfU0VTU0lPTnxDRENfTUNOfENEQ19NRURJQV9DSEFOR0VEfCBcCi0JIENEQ19QTEFZX0FVRElPfENEQ19SRVNFVHxDRENfSU9DVExTfENEQ19EUklWRV9TVEFUVVN8IFwKKwkgQ0RDX1BMQVlfQVVESU98Q0RDX1JFU0VUfENEQ19EUklWRV9TVEFUVVN8IFwKIAkgQ0RDX0NEX1J8Q0RDX0NEX1JXfENEQ19EVkR8Q0RDX0RWRF9SfENEQ19EVkRfUkFNfENEQ19HRU5FUklDX1BBQ0tFVHwgXAogCSBDRENfTVJXfENEQ19NUldfV3xDRENfUkFNKQogCkBAIC0xMTQsNyArMTE4LDYgQEAKIAkuZ2V0X21jbgkJPSBzcl9nZXRfbWNuLAogCS5yZXNldAkJCT0gc3JfcmVzZXQsCiAJLmF1ZGlvX2lvY3RsCQk9IHNyX2F1ZGlvX2lvY3RsLAotCS5kZXZfaW9jdGwJCT0gc3JfZGV2X2lvY3RsLAogCS5jYXBhYmlsaXR5CQk9IFNSX0NBUEFCSUxJVElFUywKIAkuZ2VuZXJpY19wYWNrZXQJCT0gc3JfcGFja2V0LAogfTsKQEAgLTQ1MiwxNyArNDU1LDMzIEBACiB7CiAJc3RydWN0IHNjc2lfY2QgKmNkID0gc2NzaV9jZChpbm9kZS0+aV9iZGV2LT5iZF9kaXNrKTsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjZC0+ZGV2aWNlOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCWludCByZXQ7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogU2VuZCBTQ1NJIGFkZHJlc3NpbmcgaW9jdGxzIGRpcmVjdGx5IHRvIG1pZCBsZXZlbCwgc2VuZCBvdGhlcgotICAgICAgICAgKiBpb2N0bHMgdG8gY2Ryb20vYmxvY2sgbGV2ZWwuCi0gICAgICAgICAqLwotICAgICAgICBzd2l0Y2ggKGNtZCkgewotICAgICAgICAgICAgICAgIGNhc2UgU0NTSV9JT0NUTF9HRVRfSURMVU46Ci0gICAgICAgICAgICAgICAgY2FzZSBTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjc2lfaW9jdGwoc2RldiwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCS8qCisJICogU2VuZCBTQ1NJIGFkZHJlc3NpbmcgaW9jdGxzIGRpcmVjdGx5IHRvIG1pZCBsZXZlbCwgc2VuZCBvdGhlcgorCSAqIGlvY3RscyB0byBjZHJvbS9ibG9jayBsZXZlbC4KKwkgKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0NTSV9JT0NUTF9HRVRfSURMVU46CisJY2FzZSBTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSOgorCQlyZXR1cm4gc2NzaV9pb2N0bChzZGV2LCBjbWQsIGFyZ3ApOwogCX0KLQlyZXR1cm4gY2Ryb21faW9jdGwoZmlsZSwgJmNkLT5jZGksIGlub2RlLCBjbWQsIGFyZyk7CisKKwlyZXQgPSBjZHJvbV9pb2N0bChmaWxlLCAmY2QtPmNkaSwgaW5vZGUsIGNtZCwgYXJnKTsKKwlpZiAocmV0ICE9IEVOT1NZUykKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogRU5PREVWIG1lYW5zIHRoYXQgd2UgZGlkbid0IHJlY29nbmlzZSB0aGUgaW9jdGwsIG9yIHRoYXQgd2UKKwkgKiBjYW5ub3QgZXhlY3V0ZSBpdCBpbiB0aGUgY3VycmVudCBkZXZpY2Ugc3RhdGUuICBJbiBlaXRoZXIKKwkgKiBjYXNlIGZhbGwgdGhyb3VnaCB0byBzY3NpX2lvY3RsLCB3aGljaCB3aWxsIHJldHVybiBFTkRPRVYgYWdhaW4KKwkgKiBpZiBpdCBkb2Vzbid0IHJlY29nbmlzZSB0aGUgaW9jdGwKKwkgKi8KKwlyZXQgPSBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzZGV2LCBjbWQsIGFyZ3AsIE5VTEwpOworCWlmIChyZXQgIT0gLUVOT0RFVikKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gc2NzaV9pb2N0bChzZGV2LCBjbWQsIGFyZ3ApOwogfQogCiBzdGF0aWMgaW50IHNyX2Jsb2NrX21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC01MjUsMTAgKzU0NCw5IEBACiAJCWdvdG8gZmFpbDsKIAogCWVycm9yID0gLUVOT01FTTsKLQljZCA9IGttYWxsb2Moc2l6ZW9mKCpjZCksIEdGUF9LRVJORUwpOworCWNkID0ga3phbGxvYyhzaXplb2YoKmNkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjZCkKIAkJZ290byBmYWlsOwotCW1lbXNldChjZCwgMCwgc2l6ZW9mKCpjZCkpOwogCiAJa3JlZl9pbml0KCZjZC0+a3JlZik7CiAKQEAgLTU3NCw4ICs1OTIsNiBAQAogCWdldF9jYXBhYmlsaXRpZXMoY2QpOwogCXNyX3ZlbmRvcl9pbml0KGNkKTsKIAotCXNucHJpbnRmKGRpc2stPmRldmZzX25hbWUsIHNpemVvZihkaXNrLT5kZXZmc19uYW1lKSwKLQkJCSIlcy9jZCIsIHNkZXYtPmRldmZzX25hbWUpOwogCWRpc2stPmRyaXZlcmZzX2RldiA9ICZzZGV2LT5zZGV2X2dlbmRldjsKIAlzZXRfY2FwYWNpdHkoZGlzaywgY2QtPmNhcGFjaXR5KTsKIAlkaXNrLT5wcml2YXRlX2RhdGEgPSAmY2QtPmRyaXZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zci5oIGIvZHJpdmVycy9zY3NpL3NyLmgKaW5kZXggZDJiY2Q5OS4uZDY1ZGU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NyLmgKKysrIGIvZHJpdmVycy9zY3NpL3NyLmgKQEAgLTU1LDcgKzU1LDYgQEAKIGludCBzcl9yZXNldChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKik7CiBpbnQgc3Jfc2VsZWN0X3NwZWVkKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLCBpbnQgc3BlZWQpOwogaW50IHNyX2F1ZGlvX2lvY3RsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgKik7Ci1pbnQgc3JfZGV2X2lvY3RsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiBpbnQgc3JfaXNfeGEoU2NzaV9DRCAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyX2lvY3RsLmMgYi9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYwppbmRleCA1ZDAyZmY0Li5kMTI2OGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJU0RldiA9IGNkLT5kZXZpY2U7CiAKIAlpZiAoIXNlbnNlKSB7Ci0JCXNlbnNlID0ga21hbGxvYyhzaXplb2YoKnNlbnNlKSwgR0ZQX0tFUk5FTCk7CisJCXNlbnNlID0ga21hbGxvYyhTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNlbnNlKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CkBAIC01NjIsMjIgKzU2MiwzIEBACiAjZW5kaWYKIAlyZXR1cm4gaXNfeGE7CiB9Ci0KLWludCBzcl9kZXZfaW9jdGwoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGksCi0JCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlTY3NpX0NEICpjZCA9IGNkaS0+aGFuZGxlOwotCWludCByZXQ7Ci0JCi0JcmV0ID0gc2NzaV9ub25ibG9ja2FibGVfaW9jdGwoY2QtPmRldmljZSwgY21kLAotCQkJCSAgICAgICh2b2lkIF9fdXNlciAqKWFyZywgTlVMTCk7Ci0JLyoKLQkgKiBFTk9ERVYgbWVhbnMgdGhhdCB3ZSBkaWRuJ3QgcmVjb2duaXNlIHRoZSBpb2N0bCwgb3IgdGhhdCB3ZQotCSAqIGNhbm5vdCBleGVjdXRlIGl0IGluIHRoZSBjdXJyZW50IGRldmljZSBzdGF0ZS4gIEluIGVpdGhlcgotCSAqIGNhc2UgZmFsbCB0aHJvdWdoIHRvIHNjc2lfaW9jdGwsIHdoaWNoIHdpbGwgcmV0dXJuIEVORE9FViBhZ2FpbgotCSAqIGlmIGl0IGRvZXNuJ3QgcmVjb2duaXNlIHRoZSBpb2N0bAotCSAqLwotCWlmIChyZXQgIT0gLUVOT0RFVikKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gc2NzaV9pb2N0bChjZC0+ZGV2aWNlLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IDdmOTZmMzMuLmQ0MGU3YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC04Nyw4ICs4Niw5IEBACiBzdGF0aWMgc3RydWN0IGNsYXNzICpzdF9zeXNmc19jbGFzczsKIAogTU9EVUxFX0FVVEhPUigiS2FpIE1ha2lzYXJhIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNDU0kgVGFwZSBEcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0NTSSB0YXBlIChzdCkgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTQ1NJX1RBUEVfTUFKT1IpOwogCiAvKiBTZXQgJ3Blcm0nICg0dGggYXJndW1lbnQpIHRvIDAgdG8gZGlzYWJsZSBtb2R1bGVfcGFyYW0ncyBkZWZpbml0aW9uCiAgKiBvZiBzeXNmcyBwYXJhbWV0ZXJzICh3aGljaCBtb2R1bGVfcGFyYW0gZG9lc24ndCB5ZXQgc3VwcG9ydCkuCkBAIC0zNTkwLDEyICszNTkwLDExIEBACiAKIAlpID0gc2l6ZW9mKHN0cnVjdCBzdF9idWZmZXIpICsgKG1heF9zZyAtIDEpICogc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKwogCQltYXhfc2cgKiBzaXplb2Yoc3RydWN0IHN0X2J1Zl9mcmFnbWVudCk7Ci0JdGIgPSBrbWFsbG9jKGksIHByaW9yaXR5KTsKKwl0YiA9IGt6YWxsb2MoaSwgcHJpb3JpdHkpOwogCWlmICghdGIpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJzdDogQ2FuJ3QgYWxsb2NhdGUgbmV3IHRhcGUgYnVmZmVyLlxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQodGIsIDAsIGkpOwogCXRiLT5mcnBfc2VncyA9IHRiLT5vcmlnX2ZycF9zZWdzID0gMDsKIAl0Yi0+dXNlX3NnID0gbWF4X3NnOwogCXRiLT5mcnAgPSAoc3RydWN0IHN0X2J1Zl9mcmFnbWVudCAqKSgmKHRiLT5zZ1swXSkgKyBtYXhfc2cpOwpAQCAtMzkyNCwxNCArMzkyMywxMyBAQAogCQkJZ290byBvdXRfcHV0X2Rpc2s7CiAJCX0KIAotCQl0bXBfZGEgPSBrbWFsbG9jKHRtcF9kZXZfbWF4ICogc2l6ZW9mKHN0cnVjdCBzY3NpX3RhcGUgKiksIEdGUF9BVE9NSUMpOworCQl0bXBfZGEgPSBremFsbG9jKHRtcF9kZXZfbWF4ICogc2l6ZW9mKHN0cnVjdCBzY3NpX3RhcGUgKiksIEdGUF9BVE9NSUMpOwogCQlpZiAodG1wX2RhID09IE5VTEwpIHsKIAkJCXdyaXRlX3VubG9jaygmc3RfZGV2X2Fycl9sb2NrKTsKIAkJCXByaW50ayhLRVJOX0VSUiAic3Q6IENhbid0IGV4dGVuZCBkZXZpY2UgYXJyYXkuXG4iKTsKIAkJCWdvdG8gb3V0X3B1dF9kaXNrOwogCQl9CiAKLQkJbWVtc2V0KHRtcF9kYSwgMCwgdG1wX2Rldl9tYXggKiBzaXplb2Yoc3RydWN0IHNjc2lfdGFwZSAqKSk7CiAJCWlmIChzY3NpX3RhcGVzICE9IE5VTEwpIHsKIAkJCW1lbWNweSh0bXBfZGEsIHNjc2lfdGFwZXMsCiAJCQkgICAgICAgc3RfZGV2X21heCAqIHNpemVvZihzdHJ1Y3Qgc2NzaV90YXBlICopKTsKQEAgLTM5NDgsMTMgKzM5NDYsMTIgQEAKIAlpZiAoaSA+PSBzdF9kZXZfbWF4KQogCQlwYW5pYygic2NzaV9kZXZpY2VzIGNvcnJ1cHQgKHN0KSIpOwogCi0JdHBudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3NpX3RhcGUpLCBHRlBfQVRPTUlDKTsKKwl0cG50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNjc2lfdGFwZSksIEdGUF9BVE9NSUMpOwogCWlmICh0cG50ID09IE5VTEwpIHsKIAkJd3JpdGVfdW5sb2NrKCZzdF9kZXZfYXJyX2xvY2spOwogCQlwcmludGsoS0VSTl9FUlIgInN0OiBDYW4ndCBhbGxvY2F0ZSBkZXZpY2UgZGVzY3JpcHRvci5cbiIpOwogCQlnb3RvIG91dF9wdXRfZGlzazsKIAl9Ci0JbWVtc2V0KHRwbnQsIDAsIHNpemVvZihzdHJ1Y3Qgc2NzaV90YXBlKSk7CiAJa3JlZl9pbml0KCZ0cG50LT5rcmVmKTsKIAl0cG50LT5kaXNrID0gZGlzazsKIAlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgInN0JWQiLCBpKTsKQEAgLTQwNTYsMjEgKzQwNTMsNiBAQAogCQlkb19jcmVhdGVfY2xhc3NfZmlsZXModHBudCwgZGV2X251bSwgbW9kZSk7CiAJfQogCi0JZm9yIChtb2RlID0gMDsgbW9kZSA8IFNUX05CUl9NT0RFUzsgKyttb2RlKSB7Ci0JCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtaW5vciBudW1iZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZvdXIKLQkJICAgZmlyc3QgbW9kZXMgYWx3YXlzIGdldCB0aGUgc2FtZSBuYW1lcyAqLwotCQlpID0gbW9kZSA8PCAoNCAtIFNUX05CUl9NT0RFX0JJVFMpOwotCQkvKiAgUmV3aW5kIGVudHJ5ICAqLwotCQlkZXZmc19ta19jZGV2KE1LREVWKFNDU0lfVEFQRV9NQUpPUiwgVEFQRV9NSU5PUihkZXZfbnVtLCBtb2RlLCAwKSksCi0JCQkgICAgICBTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sCi0JCQkgICAgICAiJXMvbXQlcyIsIFNEcC0+ZGV2ZnNfbmFtZSwgc3RfZm9ybWF0c1tpXSk7Ci0JCS8qICBOby1yZXdpbmQgZW50cnkgICovCi0JCWRldmZzX21rX2NkZXYoTUtERVYoU0NTSV9UQVBFX01BSk9SLCBUQVBFX01JTk9SKGRldl9udW0sIG1vZGUsIDEpKSwKLQkJCSAgICAgIFNfSUZDSFIgfCBTX0lSVUdPIHwgU19JV1VHTywKLQkJCSAgICAgICIlcy9tdCVzbiIsIFNEcC0+ZGV2ZnNfbmFtZSwgc3RfZm9ybWF0c1tpXSk7Ci0JfQotCWRpc2stPm51bWJlciA9IGRldmZzX3JlZ2lzdGVyX3RhcGUoU0RwLT5kZXZmc19uYW1lKTsKLQogCXNkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgU0RwLAogCQkgICAgIkF0dGFjaGVkIHNjc2kgdGFwZSAlcyIsIHRhcGVfbmFtZSh0cG50KSk7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyeSBkaXJlY3QgaS9vOiAlcyAoYWxpZ25tZW50ICVkIEIpXG4iLApAQCAtNDEyNCwxMyArNDEwNiw5IEBACiAJCQlzY3NpX3RhcGVzW2ldID0gTlVMTDsKIAkJCXN0X25yX2Rldi0tOwogCQkJd3JpdGVfdW5sb2NrKCZzdF9kZXZfYXJyX2xvY2spOwotCQkJZGV2ZnNfdW5yZWdpc3Rlcl90YXBlKHRwbnQtPmRpc2stPm51bWJlcik7CiAJCQlzeXNmc19yZW1vdmVfbGluaygmdHBudC0+ZGV2aWNlLT5zZGV2X2dlbmRldi5rb2JqLAogCQkJCQkgICJ0YXBlIik7CiAJCQlmb3IgKG1vZGUgPSAwOyBtb2RlIDwgU1RfTkJSX01PREVTOyArK21vZGUpIHsKLQkJCQlqID0gbW9kZSA8PCAoNCAtIFNUX05CUl9NT0RFX0JJVFMpOwotCQkJCWRldmZzX3JlbW92ZSgiJXMvbXQlcyIsIFNEcC0+ZGV2ZnNfbmFtZSwgc3RfZm9ybWF0c1tqXSk7Ci0JCQkJZGV2ZnNfcmVtb3ZlKCIlcy9tdCVzbiIsIFNEcC0+ZGV2ZnNfbmFtZSwgc3RfZm9ybWF0c1tqXSk7CiAJCQkJZm9yIChqPTA7IGogPCAyOyBqKyspIHsKIAkJCQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koc3Rfc3lzZnNfY2xhc3MsCiAJCQkJCQkJICAgICBNS0RFVihTQ1NJX1RBUEVfTUFKT1IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2hpcGQuYyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCmluZGV4IGY0ODU0YzMuLjYwODUwY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1faGlwZC5jCkBAIC00MCw3ICs0MCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CQkvKiBmb3IgdGltZW91dHMgaW4gdW5pdHMgb2YgSFogKi8KLSNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAKICNpbmNsdWRlICJzeW1fZ2x1ZS5oIgogI2luY2x1ZGUgInN5bV9udnJhbS5oIgpAQCAtOTE5LDYgKzkxOCw4IEBACiAKIAkJdHAtPnVzcmZsYWdzIHw9IChTWU1fRElTQ19FTkFCTEVEIHwgU1lNX1RBR1NfRU5BQkxFRCk7CiAJCXRwLT51c3J0YWdzID0gU1lNX1NFVFVQX01BWF9UQUc7CisJCXRwLT51c3Jfd2lkdGggPSBucC0+bWF4d2lkZTsKKwkJdHAtPnVzcl9wZXJpb2QgPSA5OwogCiAJCXN5bV9udnJhbV9zZXR1cF90YXJnZXQodHAsIGksIG52cmFtKTsKIApAQCAtMTQzMCwyOSArMTQzMSwxOCBAQAogCiAJc3dpdGNoIChuZWdvKSB7CiAJY2FzZSBOU19TWU5DOgotCQltc2dwdHJbbXNnbGVuKytdID0gTV9FWFRFTkRFRDsKLQkJbXNncHRyW21zZ2xlbisrXSA9IDM7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBNX1hfU1lOQ19SRVE7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBnb2FsLT5wZXJpb2Q7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBnb2FsLT5vZmZzZXQ7CisJCW1zZ2xlbiArPSBzcGlfcG9wdWxhdGVfc3luY19tc2cobXNncHRyICsgbXNnbGVuLCBnb2FsLT5wZXJpb2QsCisJCQkJZ29hbC0+b2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBOU19XSURFOgotCQltc2dwdHJbbXNnbGVuKytdID0gTV9FWFRFTkRFRDsKLQkJbXNncHRyW21zZ2xlbisrXSA9IDI7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBNX1hfV0lERV9SRVE7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBnb2FsLT53aWR0aDsKKwkJbXNnbGVuICs9IHNwaV9wb3B1bGF0ZV93aWR0aF9tc2cobXNncHRyICsgbXNnbGVuLCBnb2FsLT53aWR0aCk7CiAJCWJyZWFrOwogCWNhc2UgTlNfUFBSOgotCQltc2dwdHJbbXNnbGVuKytdID0gTV9FWFRFTkRFRDsKLQkJbXNncHRyW21zZ2xlbisrXSA9IDY7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBNX1hfUFBSX1JFUTsKLQkJbXNncHRyW21zZ2xlbisrXSA9IGdvYWwtPnBlcmlvZDsKLQkJbXNncHRyW21zZ2xlbisrXSA9IDA7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBnb2FsLT5vZmZzZXQ7Ci0JCW1zZ3B0clttc2dsZW4rK10gPSBnb2FsLT53aWR0aDsKLQkJbXNncHRyW21zZ2xlbisrXSA9IChnb2FsLT5pdSA/IFBQUl9PUFRfSVUgOiAwKSB8CisJCW1zZ2xlbiArPSBzcGlfcG9wdWxhdGVfcHByX21zZyhtc2dwdHIgKyBtc2dsZW4sIGdvYWwtPnBlcmlvZCwKKwkJCQlnb2FsLT5vZmZzZXQsIGdvYWwtPndpZHRoLAorCQkJCShnb2FsLT5pdSA/IFBQUl9PUFRfSVUgOiAwKSB8CiAJCQkJCShnb2FsLT5kdCA/IFBQUl9PUFRfRFQgOiAwKSB8Ci0JCQkJCShnb2FsLT5xYXMgPyBQUFJfT1BUX1FBUyA6IDApOworCQkJCQkoZ29hbC0+cWFzID8gUFBSX09QVF9RQVMgOiAwKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzk0OCwxMSArMzkzOCw3IEBACiAJLyoKIAkgKiAgSXQgd2FzIGEgcmVxdWVzdC4gUHJlcGFyZSBhbiBhbnN3ZXIgbWVzc2FnZS4KIAkgKi8KLQlucC0+bXNnb3V0WzBdID0gTV9FWFRFTkRFRDsKLQlucC0+bXNnb3V0WzFdID0gMzsKLQlucC0+bXNnb3V0WzJdID0gTV9YX1NZTkNfUkVROwotCW5wLT5tc2dvdXRbM10gPSBwZXI7Ci0JbnAtPm1zZ291dFs0XSA9IG9mczsKKwlzcGlfcG9wdWxhdGVfc3luY19tc2cobnAtPm1zZ291dCwgcGVyLCBvZnMpOwogCiAJaWYgKERFQlVHX0ZMQUdTICYgREVCVUdfTkVHTykgewogCQlzeW1fcHJpbnRfbmVnb19tc2cobnAsIHRhcmdldCwgInN5bmMgbXNnb3V0IiwgbnAtPm1zZ291dCk7CkBAIC00MDc4LDE0ICs0MDY0LDcgQEAKIAkvKgogCSAqICBJdCB3YXMgYSByZXF1ZXN0LiBQcmVwYXJlIGFuIGFuc3dlciBtZXNzYWdlLgogCSAqLwotCW5wLT5tc2dvdXRbMF0gPSBNX0VYVEVOREVEOwotCW5wLT5tc2dvdXRbMV0gPSA2OwotCW5wLT5tc2dvdXRbMl0gPSBNX1hfUFBSX1JFUTsKLQlucC0+bXNnb3V0WzNdID0gcGVyOwotCW5wLT5tc2dvdXRbNF0gPSAwOwotCW5wLT5tc2dvdXRbNV0gPSBvZnM7Ci0JbnAtPm1zZ291dFs2XSA9IHdpZGU7Ci0JbnAtPm1zZ291dFs3XSA9IG9wdHM7CisJc3BpX3BvcHVsYXRlX3Bwcl9tc2cobnAtPm1zZ291dCwgcGVyLCBvZnMsIHdpZGUsIG9wdHMpOwogCiAJaWYgKERFQlVHX0ZMQUdTICYgREVCVUdfTkVHTykgewogCQlzeW1fcHJpbnRfbmVnb19tc2cobnAsIHRhcmdldCwgInBwciBtc2dvdXQiLCBucC0+bXNnb3V0KTsKQEAgLTQxOTcsMTAgKzQxNzYsNyBAQAogCS8qCiAJICogIEl0IHdhcyBhIHJlcXVlc3QuIFByZXBhcmUgYW4gYW5zd2VyIG1lc3NhZ2UuCiAJICovCi0JbnAtPm1zZ291dFswXSA9IE1fRVhURU5ERUQ7Ci0JbnAtPm1zZ291dFsxXSA9IDI7Ci0JbnAtPm1zZ291dFsyXSA9IE1fWF9XSURFX1JFUTsKLQlucC0+bXNnb3V0WzNdID0gd2lkZTsKKwlzcGlfcG9wdWxhdGVfd2lkdGhfbXNnKG5wLT5tc2dvdXQsIHdpZGUpOwogCiAJbnAtPm1zZ2luIFswXSA9IE1fTk9PUDsKIApAQCAtNDI0NSwxMSArNDIyMSw4IEBACiAJCSAqIGEgc2luZ2xlIFNDU0kgY29tbWFuZCAoU3VnZ2VzdGVkIGJ5IEp1c3RpbiBHaWJicykuCiAJCSAqLwogCQlpZiAodHAtPnRnb2FsLm9mZnNldCkgewotCQkJbnAtPm1zZ291dFswXSA9IE1fRVhURU5ERUQ7Ci0JCQlucC0+bXNnb3V0WzFdID0gMzsKLQkJCW5wLT5tc2dvdXRbMl0gPSBNX1hfU1lOQ19SRVE7Ci0JCQlucC0+bXNnb3V0WzNdID0gdHAtPnRnb2FsLnBlcmlvZDsKLQkJCW5wLT5tc2dvdXRbNF0gPSB0cC0+dGdvYWwub2Zmc2V0OworCQkJc3BpX3BvcHVsYXRlX3N5bmNfbXNnKG5wLT5tc2dvdXQsIHRwLT50Z29hbC5wZXJpb2QsCisJCQkJCXRwLT50Z29hbC5vZmZzZXQpOwogCiAJCQlpZiAoREVCVUdfRkxBR1MgJiBERUJVR19ORUdPKSB7CiAJCQkJc3ltX3ByaW50X25lZ29fbXNnKG5wLCBjcC0+dGFyZ2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggZmI1M2VlYS4uZDhhNzI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC03OCw4ICs3OCw4IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCmluZGV4IDhjNWMyNzYuLjc1NzI2NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvMjEyODUuYwpAQCAtMzc1LDIzICszNzUsMTggQEAKIH0KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfMjEyODVfQ09OU09MRQorc3RhdGljIHZvaWQgc2VyaWFsMjEyODVfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwl3aGlsZSAoKkNTUl9VQVJURkxHICYgMHgyMCkKKwkJYmFycmllcigpOworCSpDU1JfVUFSVERSID0gY2g7Cit9CiAKIHN0YXRpYyB2b2lkCiBzZXJpYWwyMTI4NV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKIAkJCSAgdW5zaWduZWQgaW50IGNvdW50KQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJd2hpbGUgKCpDU1JfVUFSVEZMRyAmIDB4MjApCi0JCQliYXJyaWVyKCk7Ci0JCSpDU1JfVUFSVERSID0gc1tpXTsKLQkJaWYgKHNbaV0gPT0gJ1xuJykgewotCQkJd2hpbGUgKCpDU1JfVUFSVEZMRyAmIDB4MjApCi0JCQkJYmFycmllcigpOwotCQkJKkNTUl9VQVJURFIgPSAnXHInOwotCQl9Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZSgmc2VyaWFsMjEyODVfcG9ydCwgcywgY291bnQsIHNlcmlhbDIxMjg1X2NvbnNvbGVfcHV0Y2hhcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKaW5kZXggN2YwZjM1YS4uYjg4YTdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCkBAIC0xMDEsOCArMTAxLDYgQEAKIAogI2RlZmluZSBSU19JU1JfUEFTU19MSU1JVCAyNTYKIAotI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKLQogc3RhdGljIHZvaWQgY2hhbmdlX3NwZWVkKHN0cnVjdCBtNjhrX3NlcmlhbCAqaW5mbyk7CiAKIC8qCkBAIC0yNjIsNyArMjYwLDcgQEAKIAkvKiBEcm9wIGludG8gdGhlIGRlYnVnZ2VyICovCiB9CiAKLXN0YXRpYyBfSU5MSU5FXyB2b2lkIHN0YXR1c19oYW5kbGUoc3RydWN0IG02OGtfc2VyaWFsICppbmZvLCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMpCitzdGF0aWMgdm9pZCBzdGF0dXNfaGFuZGxlKHN0cnVjdCBtNjhrX3NlcmlhbCAqaW5mbywgdW5zaWduZWQgc2hvcnQgc3RhdHVzKQogewogI2lmIDAKIAlpZihzdGF0dXMgJiBEQ0QpIHsKQEAgLTI4OSw3ICsyODcsOCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQgcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgbTY4a19zZXJpYWwgKmluZm8sIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBzaG9ydCByeCkKK3N0YXRpYyB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IG02OGtfc2VyaWFsICppbmZvLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCSAgdW5zaWduZWQgc2hvcnQgcngpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKIAltNjgzMjhfdWFydCAqdWFydCA9ICZ1YXJ0X2FkZHJbaW5mby0+bGluZV07CkBAIC0zNTksNyArMzU4LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBfSU5MSU5FXyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCBtNjhrX3NlcmlhbCAqaW5mbykKK3N0YXRpYyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCBtNjhrX3NlcmlhbCAqaW5mbykKIHsKIAltNjgzMjhfdWFydCAqdWFydCA9ICZ1YXJ0X2FkZHJbaW5mby0+bGluZV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCAyNDRlOGZmLi41OTk2ZDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0yMTgyLDYgKzIxODIsMTQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNlcmlhbDgyNTBfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqKXBvcnQ7CisKKwl3YWl0X2Zvcl94bWl0cih1cCwgVUFSVF9MU1JfVEhSRSk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgY2gpOworfQorCiAvKgogICoJUHJpbnQgYSBzdHJpbmcgdG8gdGhlIHNlcmlhbCBwb3J0IHRyeWluZyBub3QgdG8gZGlzdHVyYgogICoJYW55IHBvc3NpYmxlIHJlYWwgdXNlIG9mIHRoZSBwb3J0Li4uCkBAIC0yMTkzLDcgKzIyMDEsNiBAQAogewogCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAmc2VyaWFsODI1MF9wb3J0c1tjby0+aW5kZXhdOwogCXVuc2lnbmVkIGludCBpZXI7Ci0JaW50IGk7CiAKIAl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKIApAQCAtMjIwNywyMiArMjIxNCw3IEBACiAJZWxzZQogCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgMCk7CiAKLQkvKgotCSAqCU5vdywgZG8gZWFjaCBjaGFyYWN0ZXIKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgcysrKSB7Ci0JCXdhaXRfZm9yX3htaXRyKHVwLCBVQVJUX0xTUl9USFJFKTsKLQotCQkvKgotCQkgKglTZW5kIHRoZSBjaGFyYWN0ZXIgb3V0LgotCQkgKglJZiBhIExGLCBhbHNvIGRvIENSLi4uCi0JCSAqLwotCQlzZXJpYWxfb3V0KHVwLCBVQVJUX1RYLCAqcyk7Ci0JCWlmICgqcyA9PSAxMCkgewotCQkJd2FpdF9mb3JfeG1pdHIodXAsIFVBUlRfTFNSX1RIUkUpOwotCQkJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgMTMpOwotCQl9Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZSgmdXAtPnBvcnQsIHMsIGNvdW50LCBzZXJpYWw4MjUwX2NvbnNvbGVfcHV0Y2hhcik7CiAKIAkvKgogCSAqCUZpbmFsbHksIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eQpAQCAtMjMyNiw2ICsyMzE4LDEyIEBACiAJLmNvbnMJCQk9IFNFUklBTDgyNTBfQ09OU09MRSwKIH07CiAKKy8qCisgKiBlYXJseV9zZXJpYWxfc2V0dXAgLSBlYXJseSByZWdpc3RyYXRpb24gZm9yIDgyNTAgcG9ydHMKKyAqCisgKiBTZXR1cCBhbiA4MjUwIHBvcnQgc3RydWN0dXJlIHByaW9yIHRvIGNvbnNvbGUgaW5pdGlhbGlzYXRpb24uICBVc2UKKyAqIGFmdGVyIGNvbnNvbGUgaW5pdGlhbGlzYXRpb24gd2lsbCBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3VyLgorICovCiBpbnQgX19pbml0IGVhcmx5X3NlcmlhbF9zZXR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmIChwb3J0LT5saW5lID49IEFSUkFZX1NJWkUoc2VyaWFsODI1MF9wb3J0cykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX2Vhcmx5LmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2Vhcmx5LmMKaW5kZXggNTliYTVkOS4uN2U1MTExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9lYXJseS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfZWFybHkuYwpAQCAtNzQsNyArNzQsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHB1dGMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgY2hhciBjKQorc3RhdGljIHZvaWQgX19pbml0IHB1dGMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGMpCiB7CiAJd2FpdF9mb3JfeG1pdHIocG9ydCk7CiAJc2VyaWFsX291dChwb3J0LCBVQVJUX1RYLCBjKTsKQEAgLTg5LDEyICs4OSw3IEBACiAJaWVyID0gc2VyaWFsX2luKHBvcnQsIFVBUlRfSUVSKTsKIAlzZXJpYWxfb3V0KHBvcnQsIFVBUlRfSUVSLCAwKTsKIAotCXdoaWxlICgqcyAmJiBjb3VudC0tID4gMCkgewotCQlwdXRjKHBvcnQsICpzKTsKLQkJaWYgKCpzID09ICdcbicpCi0JCQlwdXRjKHBvcnQsICdccicpOwotCQlzKys7Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZShwb3J0LCBzLCBjb3VudCwgcHV0Yyk7CiAKIAkvKiBXYWl0IGZvciB0cmFuc21pdHRlciB0byBiZWNvbWUgZW1wdHkgYW5kIHJlc3RvcmUgdGhlIElFUiAqLwogCXdhaXRfZm9yX3htaXRyKHBvcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9ocDMwMC5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9ocDMwMC5jCmluZGV4IDQzMTVhZmUuLjUzZTgxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfaHAzMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2hwMzAwLmMKQEAgLTU1LDYgKzU1LDggQEAKIAogI2VuZGlmCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX3BvcnRzOworCiBleHRlcm4gaW50IGhwMzAwX3VhcnRfc2NvZGU7CiAKIC8qIE9mZnNldCB0byBVQVJUIHJlZ2lzdGVycyBmcm9tIGJhc2Ugb2YgRENBICovCkBAIC0xOTksNiArMjAxLDggQEAKIAlvdXRfOChkLT5yZXNvdXJjZS5zdGFydCArIERJT19WSVJBRERSQkFTRSArIERDQV9JRCwgMHhmZik7CiAJdWRlbGF5KDEwMCk7CiAKKwludW1fcG9ydHMrKzsKKwogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC0yMDYsNyArMjEwLDYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGhwMzAwXzgyNTBfaW5pdCh2b2lkKQogewogCXN0YXRpYyBpbnQgY2FsbGVkID0gMDsKLQlpbnQgbnVtX3BvcnRzOwogI2lmZGVmIENPTkZJR19IUEFQQ0kKIAlpbnQgbGluZTsKIAl1bnNpZ25lZCBsb25nIGJhc2U7CkBAIC0yMjEsMTEgKzIyNCw4IEBACiAJaWYgKCFNQUNIX0lTX0hQMzAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW51bV9wb3J0cyA9IDA7Ci0KICNpZmRlZiBDT05GSUdfSFBEQ0EKLQlpZiAoZGlvX21vZHVsZV9pbml0KCZocGRjYV9kcml2ZXIpID09IDApCi0JCW51bV9wb3J0cysrOworCWRpb19yZWdpc3Rlcl9kcml2ZXIoJmhwZGNhX2RyaXZlcik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSFBBUENJCiAJaWYgKGhwMzAwX21vZGVsIDwgSFBfNDAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCBiM2M1NjFhLi5jNjZlZjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTU4Miw2ICs1ODIsMTMgQEAKIAkgIG9uIHlvdXIgU3BhcmMgc3lzdGVtIGFzIHRoZSBjb25zb2xlLCB5b3UgY2FuIGRvIHNvIGJ5IGFuc3dlcmluZwogCSAgWSB0byB0aGlzIG9wdGlvbi4KIAorY29uZmlnIFNFUklBTF9TVU5IVgorCWJvb2wgIlN1bjR2IEh5cGVydmlzb3IgQ29uc29sZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU1BBUkM2NAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBjb25zb2xlIGRldmljZSBmb3VuZCBvbiBTVU40ViBTcGFyYworCSAgc3lzdGVtcy4gIFNheSBZIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoaXMgZGV2aWNlLgorCiBjb25maWcgU0VSSUFMX0lQMjJfWklMT0cKIAl0cmlzdGF0ZSAiSVAyMiBaaWxvZzg1MzAgc2VyaWFsIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTR0lfSVAyMgpAQCAtODU5LDcgKzg2Niw3IEBACiAKIGNvbmZpZyBTRVJJQUxfVFhYOQogCWJvb2wgIlRNUFRYMzlYWC80OVhYIFNJTyBzdXBwb3J0IgotCWRlcGVuZHMgSEFTX1RYWDlfU0VSSUFMICYmIEJST0tFTgorCWRlcGVuZHMgSEFTX1RYWDlfU0VSSUFMCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJZGVmYXVsdCB5CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKaW5kZXggZWFmOGUwMS4uNTBjMjIxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKQEAgLTMwLDYgKzMwLDcgQEAKIG9iai0kKENPTkZJR19TRVJJQUxfU0ExMTAwKSArPSBzYTExMDAubwogb2JqLSQoQ09ORklHX1NFUklBTF9TM0MyNDEwKSArPSBzM2MyNDEwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfU1VOQ09SRSkgKz0gc3VuY29yZS5vCitvYmotJChDT05GSUdfU0VSSUFMX1NVTkhWKSArPSBzdW5odi5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NVTlpJTE9HKSArPSBzdW56aWxvZy5vCiBvYmotJChDT05GSUdfU0VSSUFMX0lQMjJfWklMT0cpICs9IGlwMjJ6aWxvZy5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NVTlNVKSArPSBzdW5zdS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKaW5kZXggMzIxYTNiMy4uZTA0ZDVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYwpAQCAtNTkxLDEyICs1OTEsMTggQEAKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMF9DT05TT0xFCiAKK3N0YXRpYyB2b2lkIHBsMDEwX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJd2hpbGUgKCFVQVJUX1RYX1JFQURZKFVBUlRfR0VUX0ZSKHBvcnQpKSkKKwkJYmFycmllcigpOworCVVBUlRfUFVUX0NIQVIocG9ydCwgY2gpOworfQorCiBzdGF0aWMgdm9pZAogcGwwMTBfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJmFtYmFfcG9ydHNbY28tPmluZGV4XS5wb3J0OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIG9sZF9jcjsKLQlpbnQgaTsKIAogCS8qCiAJICoJRmlyc3Qgc2F2ZSB0aGUgQ1IgdGhlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCkBAIC02MDQsMjEgKzYxMCw3IEBACiAJb2xkX2NyID0gVUFSVF9HRVRfQ1IocG9ydCk7CiAJVUFSVF9QVVRfQ1IocG9ydCwgVUFSVDAxeF9DUl9VQVJURU4pOwogCi0JLyoKLQkgKglOb3csIGRvIGVhY2ggY2hhcmFjdGVyCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJZG8gewotCQkJc3RhdHVzID0gVUFSVF9HRVRfRlIocG9ydCk7Ci0JCX0gd2hpbGUgKCFVQVJUX1RYX1JFQURZKHN0YXR1cykpOwotCQlVQVJUX1BVVF9DSEFSKHBvcnQsIHNbaV0pOwotCQlpZiAoc1tpXSA9PSAnXG4nKSB7Ci0JCQlkbyB7Ci0JCQkJc3RhdHVzID0gVUFSVF9HRVRfRlIocG9ydCk7Ci0JCQl9IHdoaWxlICghVUFSVF9UWF9SRUFEWShzdGF0dXMpKTsKLQkJCVVBUlRfUFVUX0NIQVIocG9ydCwgJ1xyJyk7Ci0JCX0KLQl9CisJdWFydF9jb25zb2xlX3dyaXRlKHBvcnQsIHMsIGNvdW50LCBwbDAxMF9jb25zb2xlX3B1dGNoYXIpOwogCiAJLyoKIAkgKglGaW5hbGx5LCB3YWl0IGZvciB0cmFuc21pdHRlciB0byBiZWNvbWUgZW1wdHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwppbmRleCAwMzRhMDI5Li4zZDk2NmNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYwpAQCAtNTg3LDE0ICs1ODcsMTIgQEAKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGwwMTFfY29uc29sZV93cml0ZV9jaGFyKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwLCBjaGFyIGNoKQorc3RhdGljIHZvaWQgcGwwMTFfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKIHsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwID0gKHN0cnVjdCB1YXJ0X2FtYmFfcG9ydCAqKXBvcnQ7CiAKLQlkbyB7Ci0JCXN0YXR1cyA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9GUik7Ci0JfSB3aGlsZSAoc3RhdHVzICYgVUFSVDAxeF9GUl9UWEZGKTsKKwl3aGlsZSAocmVhZHcodWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0ZSKSAmIFVBUlQwMXhfRlJfVFhGRikKKwkJYmFycmllcigpOwogCXdyaXRldyhjaCwgdWFwLT5wb3J0Lm1lbWJhc2UgKyBVQVJUMDF4X0RSKTsKIH0KIApAQCAtNjAzLDcgKzYwMSw2IEBACiB7CiAJc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXAgPSBhbWJhX3BvcnRzW2NvLT5pbmRleF07CiAJdW5zaWduZWQgaW50IHN0YXR1cywgb2xkX2NyLCBuZXdfY3I7Ci0JaW50IGk7CiAKIAljbGtfZW5hYmxlKHVhcC0+Y2xrKTsKIApAQCAtNjE1LDE0ICs2MTIsNyBAQAogCW5ld19jciB8PSBVQVJUMDF4X0NSX1VBUlRFTiB8IFVBUlQwMTFfQ1JfVFhFOwogCXdyaXRldyhuZXdfY3IsIHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxMV9DUik7CiAKLQkvKgotCSAqCU5vdywgZG8gZWFjaCBjaGFyYWN0ZXIKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlwbDAxMV9jb25zb2xlX3dyaXRlX2NoYXIodWFwLCBzW2ldKTsKLQkJaWYgKHNbaV0gPT0gJ1xuJykKLQkJCXBsMDExX2NvbnNvbGVfd3JpdGVfY2hhcih1YXAsICdccicpOwotCX0KKwl1YXJ0X2NvbnNvbGVfd3JpdGUoJnVhcC0+cG9ydCwgcywgY291bnQsIHBsMDExX2NvbnNvbGVfcHV0Y2hhcik7CiAKIAkvKgogCSAqCUZpbmFsbHksIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYXQ5MV9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2F0OTFfc2VyaWFsLmMKaW5kZXggMjExM2ZlYi4uNjU0N2ZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXQ5MV9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hdDkxX3NlcmlhbC5jCkBAIC03MTEsNiArNzExLDEyIEBACiB9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0FUOTFfQ09OU09MRQorc3RhdGljIHZvaWQgYXQ5MV9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXdoaWxlICghKFVBUlRfR0VUX0NTUihwb3J0KSAmIEFUOTFfVVNfVFhSRFkpKQorCQliYXJyaWVyKCk7CisJVUFSVF9QVVRfQ0hBUihwb3J0LCBjaCk7Cit9CiAKIC8qCiAgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRlcmluZwpAQCAtNzE4LDcgKzcyNCw3IEBACiBzdGF0aWMgdm9pZCBhdDkxX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLCB1X2ludCBjb3VudCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gYXQ5MV9wb3J0cyArIGNvLT5pbmRleDsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzLCBpLCBpbXI7CisJdW5zaWduZWQgaW50IHN0YXR1cywgaW1yOwogCiAJLyoKIAkgKglGaXJzdCwgc2F2ZSBJTVIgYW5kIHRoZW4gZGlzYWJsZSBpbnRlcnJ1cHRzCkBAIC03MjYsMjEgKzczMiw3IEBACiAJaW1yID0gVUFSVF9HRVRfSU1SKHBvcnQpOwkvKiBnZXQgaW50ZXJydXB0IG1hc2sgKi8KIAlVQVJUX1BVVF9JRFIocG9ydCwgQVQ5MV9VU19SWFJEWSB8IEFUOTFfVVNfVFhSRFkpOwogCi0JLyoKLQkgKglOb3csIGRvIGVhY2ggY2hhcmFjdGVyCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJZG8gewotCQkJc3RhdHVzID0gVUFSVF9HRVRfQ1NSKHBvcnQpOwotCQl9IHdoaWxlICghKHN0YXR1cyAmIEFUOTFfVVNfVFhSRFkpKTsKLQkJVUFSVF9QVVRfQ0hBUihwb3J0LCBzW2ldKTsKLQkJaWYgKHNbaV0gPT0gJ1xuJykgewotCQkJZG8gewotCQkJCXN0YXR1cyA9IFVBUlRfR0VUX0NTUihwb3J0KTsKLQkJCX0gd2hpbGUgKCEoc3RhdHVzICYgQVQ5MV9VU19UWFJEWSkpOwotCQkJVUFSVF9QVVRfQ0hBUihwb3J0LCAnXHInKTsKLQkJfQotCX0KKwl1YXJ0X2NvbnNvbGVfd3JpdGUocG9ydCwgcywgY291bnQsIGF0OTFfY29uc29sZV9wdXRjaGFyKTsKIAogCS8qCiAJICoJRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdTF4MDBfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvYXUxeDAwX3VhcnQuYwppbmRleCAzNDQwMjJmZS4uOTQ4ODgwYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2F1MXgwMF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXUxeDAwX3VhcnQuYwpAQCAtMTMzLDEzICsxMzMsMTIgQEAKIAl7ICJBVTFYMDBfVUFSVCIsMTYsCVVBUlRfQ0xFQVJfRklGTyB8IFVBUlRfVVNFX0ZJRk8gfSwKIH07CiAKLXN0YXRpYyBfSU5MSU5FXyB1bnNpZ25lZCBpbnQgc2VyaWFsX2luKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIGludCBvZmZzZXQpCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbF9pbihzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwLCBpbnQgb2Zmc2V0KQogewogCXJldHVybiBhdV9yZWFkbCgodW5zaWduZWQgbG9uZyl1cC0+cG9ydC5tZW1iYXNlICsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQKLXNlcmlhbF9vdXQoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCwgaW50IG9mZnNldCwgaW50IHZhbHVlKQorc3RhdGljIHZvaWQgc2VyaWFsX291dChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJYXVfd3JpdGVsKHZhbHVlLCAodW5zaWduZWQgbG9uZyl1cC0+cG9ydC5tZW1iYXNlICsgb2Zmc2V0KTsKIH0KQEAgLTIzNyw3ICsyMzYsNyBAQAogCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCB1cC0+aWVyKTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQKK3N0YXRpYyB2b2lkCiByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIGludCAqc3RhdHVzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+dHR5OwpAQCAtMzEyLDcgKzMxMSw3IEBACiAJc3Bpbl9sb2NrKCZ1cC0+cG9ydC5sb2NrKTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQgdHJhbnNtaXRfY2hhcnMoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKK3N0YXRpYyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXApCiB7CiAJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CiAJaW50IGNvdW50OwpAQCAtMzQ2LDcgKzM0NSw3IEBACiAJCXNlcmlhbDgyNTBfc3RvcF90eCgmdXAtPnBvcnQpOwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZCBjaGVja19tb2RlbV9zdGF0dXMoc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCkKK3N0YXRpYyB2b2lkIGNoZWNrX21vZGVtX3N0YXR1cyhzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwKQogewogCWludCBzdGF0dXM7CiAKQEAgLTExMjEsNiArMTEyMCwxNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYXUxeDAwX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKilwb3J0OworCisJd2FpdF9mb3JfeG1pdHIodXApOworCXNlcmlhbF9vdXQodXAsIFVBUlRfVFgsIGNoKTsKK30KKwogLyoKICAqCVByaW50IGEgc3RyaW5nIHRvIHRoZSBzZXJpYWwgcG9ydCB0cnlpbmcgbm90IHRvIGRpc3R1cmIKICAqCWFueSBwb3NzaWJsZSByZWFsIHVzZSBvZiB0aGUgcG9ydC4uLgpAQCAtMTEzMiw3ICsxMTM5LDYgQEAKIHsKIAlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbY28tPmluZGV4XTsKIAl1bnNpZ25lZCBpbnQgaWVyOwotCWludCBpOwogCiAJLyoKIAkgKglGaXJzdCBzYXZlIHRoZSBVRVIgdGhlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCkBAIC0xMTQwLDIyICsxMTQ2LDcgQEAKIAlpZXIgPSBzZXJpYWxfaW4odXAsIFVBUlRfSUVSKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgMCk7CiAKLQkvKgotCSAqCU5vdywgZG8gZWFjaCBjaGFyYWN0ZXIKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgcysrKSB7Ci0JCXdhaXRfZm9yX3htaXRyKHVwKTsKLQotCQkvKgotCQkgKglTZW5kIHRoZSBjaGFyYWN0ZXIgb3V0LgotCQkgKglJZiBhIExGLCBhbHNvIGRvIENSLi4uCi0JCSAqLwotCQlzZXJpYWxfb3V0KHVwLCBVQVJUX1RYLCAqcyk7Ci0JCWlmICgqcyA9PSAxMCkgewotCQkJd2FpdF9mb3JfeG1pdHIodXApOwotCQkJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgMTMpOwotCQl9Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZSgmdXAtPnBvcnQsIHMsIGNvdW50LCBhdTF4MDBfY29uc29sZV9wdXRjaGFyKTsKIAogCS8qCiAJICoJRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jIGIvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYwppbmRleCBjZTdiMmU0Li4yNjkxMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKQEAgLTQyNCw2ICs0MjQsMTMgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX0NMUFM3MTFYX0NPTlNPTEUKK3N0YXRpYyB2b2lkIGNscHM3MTF4dWFydF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXdoaWxlIChjbHBzX3JlYWRsKFNZU0ZMRyhwb3J0KSkgJiBTWVNGTEdfVVRYRkYpCisJCWJhcnJpZXIoKTsKKwljbHBzX3dyaXRlbChjaCwgVUFSVERSKHBvcnQpKTsKK30KKwogLyoKICAqCVByaW50IGEgc3RyaW5nIHRvIHRoZSBzZXJpYWwgcG9ydCB0cnlpbmcgbm90IHRvIGRpc3R1cmIKICAqCWFueSBwb3NzaWJsZSByZWFsIHVzZSBvZiB0aGUgcG9ydC4uLgpAQCAtNDM4LDcgKzQ0NSw2IEBACiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGNscHM3MTF4X3BvcnRzICsgY28tPmluZGV4OwogCXVuc2lnbmVkIGludCBzdGF0dXMsIHN5c2NvbjsKLQlpbnQgaTsKIAogCS8qCiAJICoJRW5zdXJlIHRoYXQgdGhlIHBvcnQgaXMgZW5hYmxlZC4KQEAgLTQ0NiwyMSArNDUyLDcgQEAKIAlzeXNjb24gPSBjbHBzX3JlYWRsKFNZU0NPTihwb3J0KSk7CiAJY2xwc193cml0ZWwoc3lzY29uIHwgU1lTQ09OX1VBUlRFTiwgU1lTQ09OKHBvcnQpKTsKIAotCS8qCi0JICoJTm93LCBkbyBlYWNoIGNoYXJhY3RlcgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWRvIHsKLQkJCXN0YXR1cyA9IGNscHNfcmVhZGwoU1lTRkxHKHBvcnQpKTsKLQkJfSB3aGlsZSAoc3RhdHVzICYgU1lTRkxHX1VUWEZGKTsKLQkJY2xwc193cml0ZWwoc1tpXSwgVUFSVERSKHBvcnQpKTsKLQkJaWYgKHNbaV0gPT0gJ1xuJykgewotCQkJZG8gewotCQkJCXN0YXR1cyA9IGNscHNfcmVhZGwoU1lTRkxHKHBvcnQpKTsKLQkJCX0gd2hpbGUgKHN0YXR1cyAmIFNZU0ZMR19VVFhGRik7Ci0JCQljbHBzX3dyaXRlbCgnXHInLCBVQVJURFIocG9ydCkpOwotCQl9Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZShwb3J0LCBzLCBjb3VudCwgY2xwczcxMXh1YXJ0X2NvbnNvbGVfcHV0Y2hhcik7CiAKIAkvKgogCSAqCUZpbmFsbHksIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGJlY29tZSBlbXB0eQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jIGIvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCmluZGV4IGJlMTI2MjMuLjg5NzAwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKQEAgLTQ4MSw4ICs0ODEsNiBAQAogI2luY2x1ZGUgInNlcmlhbF9jb21wYXQuaCIKICNlbmRpZgogCi0jZGVmaW5lIF9JTkxJTkVfIGlubGluZQotCiBzdHJ1Y3QgdHR5X2RyaXZlciAqc2VyaWFsX2RyaXZlcjsKIAogLyogc2VyaWFsIHN1YnR5cGUgZGVmaW5pdGlvbnMgKi8KQEAgLTU5MSw4ICs1ODksNiBAQAogc3RhdGljIHZvaWQgcnNfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KTsKIHN0YXRpYyBpbnQgcnNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGludCBmcm9tX3VzZXIsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKLWV4dGVybiBfSU5MSU5FXyBpbnQgcnNfcmF3X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBpbnQgZnJvbV91c2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKICNpZmRlZiBDT05GSUdfRVRSQVhfUlM0ODUKIHN0YXRpYyBpbnQgZTEwMF93cml0ZV9yczQ4NShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgaW50IGZyb21fdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CkBAIC0xNTM4LDggKzE1MzQsNyBAQAogCiAvKiB0aGUgdHggRE1BIHVzZXMgb25seSBkbWFfZGVzY3IgaW50ZXJydXB0ICovCiAKLXN0YXRpYyBfSU5MSU5FXyB2b2lkCi1lMTAwX2Rpc2FibGVfdHhkbWFfaXJxKHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKK3N0YXRpYyB2b2lkIGUxMDBfZGlzYWJsZV90eGRtYV9pcnEoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQogewogI2lmZGVmIFNFUklBTF9ERUJVR19JTlRSCiAJcHJpbnRrKCJ0eGRtYV9pcnEoJWQpOiAwXG4iLGluZm8tPmxpbmUpOwpAQCAtMTU0OCw4ICsxNTQzLDcgQEAKIAkqUl9JUlFfTUFTSzJfQ0xSID0gaW5mby0+aXJxOwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZAotZTEwMF9lbmFibGVfdHhkbWFfaXJxKHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKK3N0YXRpYyB2b2lkIGUxMDBfZW5hYmxlX3R4ZG1hX2lycShzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCiB7CiAjaWZkZWYgU0VSSUFMX0RFQlVHX0lOVFIKIAlwcmludGsoInR4ZG1hX2lycSglZCk6IDFcbiIsaW5mby0+bGluZSk7CkBAIC0xNTU4LDggKzE1NTIsNyBAQAogCSpSX0lSUV9NQVNLMl9TRVQgPSBpbmZvLT5pcnE7CiB9CiAKLXN0YXRpYyBfSU5MSU5FXyB2b2lkCi1lMTAwX2Rpc2FibGVfdHhkbWFfY2hhbm5lbChzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCitzdGF0aWMgdm9pZCBlMTAwX2Rpc2FibGVfdHhkbWFfY2hhbm5lbChzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTU5OSw4ICsxNTkyLDcgQEAKIH0KIAogCi1zdGF0aWMgX0lOTElORV8gdm9pZAotZTEwMF9lbmFibGVfdHhkbWFfY2hhbm5lbChzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCitzdGF0aWMgdm9pZCBlMTAwX2VuYWJsZV90eGRtYV9jaGFubmVsKHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNjI1LDggKzE2MTcsNyBAQAogCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZAotZTEwMF9kaXNhYmxlX3J4ZG1hX2NoYW5uZWwoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQorc3RhdGljIHZvaWQgZTEwMF9kaXNhYmxlX3J4ZG1hX2NoYW5uZWwoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTE2NjUsOCArMTY1Niw3IEBACiB9CiAKIAotc3RhdGljIF9JTkxJTkVfIHZvaWQKLWUxMDBfZW5hYmxlX3J4ZG1hX2NoYW5uZWwoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQorc3RhdGljIHZvaWQgZTEwMF9lbmFibGVfcnhkbWFfY2hhbm5lbChzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTkxMyw5ICsxOTAzLDcgQEAKICAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBzY2hlZHVsZQogICogcHJvY2Vzc2luZyBpbiB0aGUgc29mdHdhcmUgaW50ZXJydXB0IHBvcnRpb24gb2YgdGhlIGRyaXZlci4KICAqLwotc3RhdGljIF9JTkxJTkVfIHZvaWQKLXJzX3NjaGVkX2V2ZW50KHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbywKLQkJCQkgICAgaW50IGV2ZW50KQorc3RhdGljIHZvaWQgcnNfc2NoZWRfZXZlbnQoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvLCBpbnQgZXZlbnQpCiB7CiAJaWYgKGluZm8tPmV2ZW50ICYgKDEgPDwgZXZlbnQpKQogCQlyZXR1cm47CkBAIC0yMTU1LDggKzIxNDMsOSBAQAogCXJldHVybiAxOwogfQogCi1leHRlcm4gX0lOTElORV8gdW5zaWduZWQgaW50Ci1oYW5kbGVfZGVzY3JfZGF0YShzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8sIHN0cnVjdCBldHJheF9kbWFfZGVzY3IgKmRlc2NyLCB1bnNpZ25lZCBpbnQgcmVjdmwpCitzdGF0aWMgdW5zaWduZWQgaW50IGhhbmRsZV9kZXNjcl9kYXRhKHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbywKKwkJCQkgICAgICBzdHJ1Y3QgZXRyYXhfZG1hX2Rlc2NyICpkZXNjciwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVjdmwpCiB7CiAJc3RydWN0IGV0cmF4X3JlY3ZfYnVmZmVyICpidWZmZXIgPSBwaHlzX3RvX3ZpcnQoZGVzY3ItPmJ1ZikgLSBzaXplb2YgKmJ1ZmZlcjsKIApAQCAtMjE4Miw4ICsyMTcxLDcgQEAKIAlyZXR1cm4gcmVjdmw7CiB9CiAKLXN0YXRpYyBfSU5MSU5FXyB1bnNpZ25lZCBpbnQKLWhhbmRsZV9hbGxfZGVzY3JfZGF0YShzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCitzdGF0aWMgdW5zaWduZWQgaW50IGhhbmRsZV9hbGxfZGVzY3JfZGF0YShzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCiB7CiAJc3RydWN0IGV0cmF4X2RtYV9kZXNjciAqZGVzY3I7CiAJdW5zaWduZWQgaW50IHJlY3ZsOwpAQCAtMjIzMCw4ICsyMjE4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZAotcmVjZWl2ZV9jaGFyc19kbWEoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQorc3RhdGljIHZvaWQgcmVjZWl2ZV9jaGFyc19kbWEoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgY2hhciByc3RhdDsKQEAgLTIyOTIsOCArMjI3OSw3IEBACiAJKmluZm8tPmljbWRhZHIgPSBJT19TVEFURShSX0RNQV9DSDZfQ01ELCBjbWQsIHJlc3RhcnQpOwogfQogCi1zdGF0aWMgX0lOTElORV8gaW50Ci1zdGFydF9yZWN2X2RtYShzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCitzdGF0aWMgaW50IHN0YXJ0X3JlY3ZfZG1hKHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKIHsKIAlzdHJ1Y3QgZXRyYXhfZG1hX2Rlc2NyICpkZXNjciA9IGluZm8tPnJlY19kZXNjcjsKIAlzdHJ1Y3QgZXRyYXhfcmVjdl9idWZmZXIgKmJ1ZmZlcjsKQEAgLTIzNDgsMTEgKzIzMzQsNiBAQAogfQogCiAKLXN0YXRpYyBfSU5MSU5FXyB2b2lkCi1zdGF0dXNfaGFuZGxlKHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbywgdW5zaWduZWQgc2hvcnQgc3RhdHVzKQotewotfQotCiAvKiB0aGUgYml0cyBpbiB0aGUgTUFTSzIgcmVnaXN0ZXIgYXJlIGxhaWQgb3V0IGxpa2UgdGhpczoKICAgIERNQUlfRU9QIERNQUlfREVTQ1IgRE1BT19FT1AgRE1BT19ERVNDUgogICAgd2hlcmUgSSBpcyB0aGUgaW5wdXQgY2hhbm5lbCBhbmQgTyBpcyB0aGUgb3V0cHV0IGNoYW5uZWwgZm9yIHRoZSBwb3J0LgpAQCAtMjQ1NCw4ICsyNDM1LDcgQEAKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0gLyogcmVjX2ludGVycnVwdCAqLwogCi1zdGF0aWMgX0lOTElORV8gaW50Ci1mb3JjZV9lb3BfaWZfbmVlZGVkKHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKK3N0YXRpYyBpbnQgZm9yY2VfZW9wX2lmX25lZWRlZChzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCiB7CiAJLyogV2UgY2hlY2sgZGF0YV9hdmFpbCBiaXQgdG8gZGV0ZXJtaW5lIGlmIGRhdGEgaGFzCiAJICogYXJyaXZlZCBzaW5jZSBsYXN0IHRpbWUKQEAgLTI0OTksOCArMjQ3OSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLWV4dGVybiBfSU5MSU5FXyB2b2lkCi1mbHVzaF90b19mbGlwX2J1ZmZlcihzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCitzdGF0aWMgdm9pZCBmbHVzaF90b19mbGlwX2J1ZmZlcihzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgZXRyYXhfcmVjdl9idWZmZXIgKmJ1ZmZlcjsKQEAgLTI2MTEsOCArMjU5MCw3IEBACiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQKLWNoZWNrX2ZsdXNoX3RpbWVvdXQoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQorc3RhdGljIHZvaWQgY2hlY2tfZmx1c2hfdGltZW91dChzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCiB7CiAJLyogRmxpcCB3aGF0IHdlJ3ZlIGdvdCAoaWYgd2UgY2FuKSAqLwogCWZsdXNoX3RvX2ZsaXBfYnVmZmVyKGluZm8pOwpAQCAtMjc0MSw3ICsyNzE5LDcgQEAKIAogKi8KIAotZXh0ZXJuIF9JTkxJTkVfCitzdGF0aWMKIHN0cnVjdCBlMTAwX3NlcmlhbCAqIGhhbmRsZV9zZXJfcnhfaW50ZXJydXB0X25vX2RtYShzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX3JlYWQ7CkBAIC0yODc1LDggKzI4NTMsNyBAQAogCXJldHVybiBpbmZvOwogfQogCi1leHRlcm4gX0lOTElORV8KLXN0cnVjdCBlMTAwX3NlcmlhbCogaGFuZGxlX3Nlcl9yeF9pbnRlcnJ1cHQoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQorc3RhdGljIHN0cnVjdCBlMTAwX3NlcmlhbCogaGFuZGxlX3Nlcl9yeF9pbnRlcnJ1cHQoc3RydWN0IGUxMDBfc2VyaWFsICppbmZvKQogewogCXVuc2lnbmVkIGNoYXIgcnN0YXQ7CiAKQEAgLTI5OTUsNyArMjk3Miw3IEBACiAJcmV0dXJuIGluZm87CiB9IC8qIGhhbmRsZV9zZXJfcnhfaW50ZXJydXB0ICovCiAKLWV4dGVybiBfSU5MSU5FXyB2b2lkIGhhbmRsZV9zZXJfdHhfaW50ZXJydXB0KHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKK3N0YXRpYyB2b2lkIGhhbmRsZV9zZXJfdHhfaW50ZXJydXB0KHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNjIxLDkgKzM1OTgsOCBAQAogCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogfQogCi1leHRlcm4gX0lOTElORV8gaW50Ci1yc19yYXdfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGludCBmcm9tX3VzZXIsCi0JICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3N0YXRpYyBpbnQgcnNfcmF3X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBpbnQgZnJvbV91c2VyLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJaW50CWMsIHJldCA9IDA7CiAJc3RydWN0IGUxMDBfc2VyaWFsICppbmZvID0gKHN0cnVjdCBlMTAwX3NlcmlhbCAqKXR0eS0+ZHJpdmVyX2RhdGE7CkBAIC00NzEwLDcgKzQ2ODYsNyBAQAogICogL3Byb2MgZnMgcm91dGluZXMuLi4uCiAgKi8KIAotZXh0ZXJuIF9JTkxJTkVfIGludCBsaW5lX2luZm8oY2hhciAqYnVmLCBzdHJ1Y3QgZTEwMF9zZXJpYWwgKmluZm8pCitzdGF0aWMgaW50IGxpbmVfaW5mbyhjaGFyICpidWYsIHN0cnVjdCBlMTAwX3NlcmlhbCAqaW5mbykKIHsKIAljaGFyCXN0YXRfYnVmWzMwXTsKIAlpbnQJcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvZHouYyBiL2RyaXZlcnMvc2VyaWFsL2R6LmMKaW5kZXggYmE1NTQxZC4uYmY3MWJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvZHouYworKysgYi9kcml2ZXJzL3NlcmlhbC9kei5jCkBAIC02NzQsMTEgKzY3NCwxMiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9EWl9DT05TT0xFCi1zdGF0aWMgdm9pZCBkel9jb25zb2xlX3B1dF9jaGFyKHN0cnVjdCBkel9wb3J0ICpkcG9ydCwgdW5zaWduZWQgY2hhciBjaCkKK3N0YXRpYyB2b2lkIGR6X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCiB7CisJc3RydWN0IGR6X3BvcnQgKmRwb3J0ID0gKHN0cnVjdCBkel9wb3J0ICopdXBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbG9vcHMgPSAyNTAwOwotCXVuc2lnbmVkIHNob3J0IHRtcCA9IGNoOworCXVuc2lnbmVkIHNob3J0IHRtcCA9ICh1bnNpZ25lZCBjaGFyKWNoOwogCS8qIHRoaXMgY29kZSBzZW5kcyBzdHVmZiBvdXQgdG8gc2VyaWFsIGRldmljZSAtIHNwaW5uaW5nIGl0cwogCSAgIHdoZWVscyBhbmQgd2FpdGluZy4gKi8KIApAQCAtNjk0LDYgKzY5NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiB9CisKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBkel9jb25zb2xlX3ByaW50ICgpCkBAIC03MTAsMTEgKzcxMiw3IEBACiAjaWZkZWYgREVCVUdfRFoKIAlwcm9tX3ByaW50ZigoY2hhciAqKSBzdHIpOwogI2VuZGlmCi0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJaWYgKCpzdHIgPT0gJ1xuJykKLQkJCWR6X2NvbnNvbGVfcHV0X2NoYXIoZHBvcnQsICdccicpOwotCQlkel9jb25zb2xlX3B1dF9jaGFyKGRwb3J0LCAqc3RyKyspOwotCX0KKwl1YXJ0X2NvbnNvbGVfd3JpdGUoJmRwb3J0LT5wb3J0LCBzdHIsIGNvdW50LCBkel9jb25zb2xlX3B1dGNoYXIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBkel9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lteC5jIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKaW5kZXggNGQ1M2ZiNS4uYzNiN2E2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW14LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKQEAgLTc0Myw2ICs3NDMsMTMgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfSU1YX0NPTlNPTEUKK3N0YXRpYyB2b2lkIGlteF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSAoc3RydWN0IGlteF9wb3J0ICopcG9ydDsKKwl3aGlsZSAoKFVUUygodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpICYgVVRTX1RYRlVMTCkpCisJCWJhcnJpZXIoKTsKKwlVUlRYMCgodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpID0gY2g7Cit9CiAKIC8qCiAgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRlcmluZwpAQCAtNzUxLDcgKzc1OCw3IEBACiBpbXhfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gJmlteF9wb3J0c1tjby0+aW5kZXhdOwotCXVuc2lnbmVkIGludCBvbGRfdWNyMSwgb2xkX3VjcjIsIGk7CisJdW5zaWduZWQgaW50IG9sZF91Y3IxLCBvbGRfdWNyMjsKIAogCS8qCiAJICoJRmlyc3QsIHNhdmUgVUNSMS8yIGFuZCB0aGVuIGRpc2FibGUgaW50ZXJydXB0cwpAQCAtNzY0LDIyICs3NzEsNyBAQAogCSAgICAgICAgICAgICAgICAgICAmIH4oVUNSMV9UWE1QVFlFTiB8IFVDUjFfUlJEWUVOIHwgVUNSMV9SVFNERU4pOwogCVVDUjIoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSA9IG9sZF91Y3IyIHwgVUNSMl9UWEVOOwogCi0JLyoKLQkgKglOb3csIGRvIGVhY2ggY2hhcmFjdGVyCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQotCQl3aGlsZSAoKFVUUygodTMyKXNwb3J0LT5wb3J0Lm1lbWJhc2UpICYgVVRTX1RYRlVMTCkpCi0JCQliYXJyaWVyKCk7Ci0KLQkJVVJUWDAoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSA9IHNbaV07Ci0KLQkJaWYgKHNbaV0gPT0gJ1xuJykgewotCQkJd2hpbGUgKChVVFMoKHUzMilzcG9ydC0+cG9ydC5tZW1iYXNlKSAmIFVUU19UWEZVTEwpKQotCQkJCWJhcnJpZXIoKTsKLQkJCVVSVFgwKCh1MzIpc3BvcnQtPnBvcnQubWVtYmFzZSkgPSAnXHInOwotCQl9Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZSgmc3BvcnQtPnBvcnQsIHMsIGNvdW50LCBpbXhfY29uc29sZV9wdXRjaGFyKTsKIAogCS8qCiAJICoJRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwppbmRleCBmMzc2M2QyLi5jNjIwMjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKQEAgLTMsNyArMyw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICovCiAKIApAQCAtMzIzLDkgKzMyMywxMiBAQAogI2RlZmluZSBJT0M0X0ZJRk9fQ0hBUlMJMjU1CiAKIC8qIERldmljZSBuYW1lIHdlJ3JlIHVzaW5nICovCi0jZGVmaW5lIERFVklDRV9OQU1FCSJ0dHlJT0MiCi0jZGVmaW5lIERFVklDRV9NQUpPUiAyMDQKLSNkZWZpbmUgREVWSUNFX01JTk9SIDUwCisjZGVmaW5lIERFVklDRV9OQU1FX1JTMjMyICAidHR5SU9DIgorI2RlZmluZSBERVZJQ0VfTkFNRV9SUzQyMiAgInR0eUFJT0MiCisjZGVmaW5lIERFVklDRV9NQUpPUgkgICAyMDQKKyNkZWZpbmUgREVWSUNFX01JTk9SX1JTMjMyIDUwCisjZGVmaW5lIERFVklDRV9NSU5PUl9SUzQyMiA4NAorCiAKIC8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgSU9DNF9TRVJJQUxfT0ZGU0VUCTB4MzAwCkBAIC0zNDEsMTAgKzM0NCw4IEBACiAjZGVmaW5lIE1BWF9CQVVEX1NVUFBPUlRFRAkxMTUyMDAKIAogLyogcHJvdG9jb2wgdHlwZXMgc3VwcG9ydGVkICovCi1lbnVtIHNpb19wcm90byB7Ci0JUFJPVE9fUlMyMzIsCi0JUFJPVE9fUlM0MjIKLX07CisjZGVmaW5lIFBST1RPX1JTMjMyCTMKKyNkZWZpbmUgUFJPVE9fUlM0MjIJNwogCiAvKiBOb3RpZmljYXRpb24gdHlwZXMgKi8KICNkZWZpbmUgTl9EQVRBX1JFQURZCTB4MDEKQEAgLTM5NSwxMSArMzk2LDE3IEBACiAvKgogICogVGhpcyBpcyB0aGUgZW50cnkgc2F2ZWQgYnkgdGhlIGRyaXZlciAtIG9uZSBwZXIgY2FyZAogICovCisKKyNkZWZpbmUgVUFSVF9QT1JUX01JTgkJMAorI2RlZmluZSBVQVJUX1BPUlRfUlMyMzIJCVVBUlRfUE9SVF9NSU4KKyNkZWZpbmUgVUFSVF9QT1JUX1JTNDIyCQkxCisjZGVmaW5lIFVBUlRfUE9SVF9DT1VOVAkJMgkvKiBvbmUgZm9yIGVhY2ggbW9kZSAqLworCiBzdHJ1Y3QgaW9jNF9jb250cm9sIHsKIAlpbnQgaWNfaXJxOwogCXN0cnVjdCB7Ci0JCS8qIHVhcnQgcG9ydHMgYXJlIGFsbG9jYXRlZCBoZXJlICovCi0JCXN0cnVjdCB1YXJ0X3BvcnQgaWNwX3VhcnRfcG9ydDsKKwkJLyogdWFydCBwb3J0cyBhcmUgYWxsb2NhdGVkIGhlcmUgLSAxIGZvciByczIzMiwgMSBmb3IgcnM0MjIgKi8KKwkJc3RydWN0IHVhcnRfcG9ydCBpY3BfdWFydF9wb3J0W1VBUlRfUE9SVF9DT1VOVF07CiAJCS8qIEhhbmR5IHJlZmVyZW5jZSBtYXRlcmlhbCAqLwogCQlzdHJ1Y3QgaW9jNF9wb3J0ICppY3BfcG9ydDsKIAl9IGljX3BvcnRbSU9DNF9OVU1fU0VSSUFMX1BPUlRTXTsKQEAgLTQ0Myw3ICs0NTAsOSBAQAogCiAvKiBMb2NhbCBwb3J0IGluZm8gZm9yIGVhY2ggSU9DNCBzZXJpYWwgcG9ydHMgKi8KIHN0cnVjdCBpb2M0X3BvcnQgewotCXN0cnVjdCB1YXJ0X3BvcnQgKmlwX3BvcnQ7CisJc3RydWN0IHVhcnRfcG9ydCAqaXBfcG9ydDsJLyogY3VycmVudCBhY3RpdmUgcG9ydCBwdHIgKi8KKwkvKiBQdHJzIGZvciBhbGwgcG9ydHMgKi8KKwlzdHJ1Y3QgdWFydF9wb3J0ICppcF9hbGxfcG9ydHNbVUFSVF9QT1JUX0NPVU5UXTsKIAkvKiBCYWNrIHB0cnMgZm9yIHRoaXMgcG9ydCAqLwogCXN0cnVjdCBpb2M0X2NvbnRyb2wgKmlwX2NvbnRyb2w7CiAJc3RydWN0IHBjaV9kZXYgKmlwX3BkZXY7CkBAIC01MDIsNiArNTExLDkgQEAKICNkZWZpbmUgRENEX09OCQkweDAyCiAjZGVmaW5lIExPV0FUX1dSSVRURU4JMHgwNAogI2RlZmluZSBSRUFEX0FCT1JURUQJMHgwOAorI2RlZmluZSBQT1JUX0FDVElWRQkweDEwCisjZGVmaW5lIFBPUlRfSU5BQ1RJVkUJMAkvKiBUaGlzIGlzIHRoZSB2YWx1ZSB3aGVuICJvZmYiICovCisKIAogLyogU2luY2UgZWFjaCBwb3J0IGhhcyBkaWZmZXJlbnQgcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0bWFza3MKICAqIGZvciBldmVyeXRoaW5nLCB3ZSdsbCBzdG9yZSB0aG9zZSB0aGF0IHdlIG5lZWQgaW4gdGFibGVzIHNvIHdlCkBAIC02MjMsNiArNjM1LDIzIEBACiBzdGF0aWMgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKik7CiBzdGF0aWMgdm9pZCBoYW5kbGVfaW50cih2b2lkICphcmcsIHVpbnQzMl90IHNpb19pcik7CiAKKy8qCisgKiBwb3J0X2lzX2FjdGl2ZSAtIGRldGVybWluZXMgaWYgdGhpcyBwb3J0IGlzIGN1cnJlbnRseSBhY3RpdmUKKyAqIEBwb3J0OiBwdHIgdG8gc29mdCBzdHJ1Y3QgZm9yIHRoaXMgcG9ydAorICogQHVhcnRfcG9ydDogdWFydCBwb3J0IHRvIHRlc3QgZm9yCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfaXNfYWN0aXZlKHN0cnVjdCBpb2M0X3BvcnQgKnBvcnQsCisJCXN0cnVjdCB1YXJ0X3BvcnQgKnVhcnRfcG9ydCkKK3sKKwlpZiAocG9ydCkgeworCQlpZiAoKHBvcnQtPmlwX2ZsYWdzICYgUE9SVF9BQ1RJVkUpCisJCQkJCSYmIChwb3J0LT5pcF9wb3J0ID09IHVhcnRfcG9ydCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKwogLyoqCiAgKiB3cml0ZV9pcmVnIC0gd3JpdGUgdGhlIGludGVycnVwdCByZWdzCiAgKiBAaW9jNF9zb2Z0OiBwdHIgdG8gc29mdCBzdHJ1Y3QgZm9yIHRoaXMgcG9ydApAQCAtNzA4LDE5ICs3MzcsMzMgQEAKIC8qKgogICogZ2V0X2lvYzRfcG9ydCAtIGdpdmVuIGEgdWFydCBwb3J0LCByZXR1cm4gdGhlIGNvbnRyb2wgc3RydWN0dXJlCiAgKiBAcG9ydDogdWFydCBwb3J0CisgKiBAc2V0OiBzZXQgdGhpcyBwb3J0IGFzIGN1cnJlbnQKICAqLwotc3RhdGljIHN0cnVjdCBpb2M0X3BvcnQgKmdldF9pb2M0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqdGhlX3BvcnQpCitzdGF0aWMgc3RydWN0IGlvYzRfcG9ydCAqZ2V0X2lvYzRfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCwgaW50IHNldCkKIHsKIAlzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkID0gZGV2X2dldF9kcnZkYXRhKHRoZV9wb3J0LT5kZXYpOwogCXN0cnVjdCBpb2M0X2NvbnRyb2wgKmNvbnRyb2wgPSBpZGQtPmlkZF9zZXJpYWxfZGF0YTsKLQlpbnQgaWk7CisJc3RydWN0IGlvYzRfcG9ydCAqcG9ydDsKKwlpbnQgcG9ydF9udW0sIHBvcnRfdHlwZTsKIAogCWlmIChjb250cm9sKSB7Ci0JCWZvciAoIGlpID0gMDsgaWkgPCBJT0M0X05VTV9TRVJJQUxfUE9SVFM7IGlpKysgKSB7Ci0JCQlpZiAoIWNvbnRyb2wtPmljX3BvcnRbaWldLmljcF9wb3J0KQorCQlmb3IgKCBwb3J0X251bSA9IDA7IHBvcnRfbnVtIDwgSU9DNF9OVU1fU0VSSUFMX1BPUlRTOworCQkJCQkJCXBvcnRfbnVtKysgKSB7CisJCQlwb3J0ID0gY29udHJvbC0+aWNfcG9ydFtwb3J0X251bV0uaWNwX3BvcnQ7CisJCQlpZiAoIXBvcnQpCiAJCQkJY29udGludWU7Ci0JCQlpZiAodGhlX3BvcnQgPT0gY29udHJvbC0+aWNfcG9ydFtpaV0uaWNwX3BvcnQtPmlwX3BvcnQpCi0JCQkJcmV0dXJuIGNvbnRyb2wtPmljX3BvcnRbaWldLmljcF9wb3J0OworCQkJZm9yIChwb3J0X3R5cGUgPSBVQVJUX1BPUlRfTUlOOworCQkJCQkJcG9ydF90eXBlIDwgVUFSVF9QT1JUX0NPVU5UOworCQkJCQkJcG9ydF90eXBlKyspIHsKKwkJCQlpZiAodGhlX3BvcnQgPT0gcG9ydC0+aXBfYWxsX3BvcnRzCisJCQkJCQkJW3BvcnRfdHlwZV0pIHsKKwkJCQkJLyogc2V0IGxvY2FsIGNvcHkgKi8KKwkJCQkJaWYgKHNldCkgeworCQkJCQkJcG9ydC0+aXBfcG9ydCA9IHRoZV9wb3J0OworCQkJCQl9CisJCQkJCXJldHVybiBwb3J0OworCQkJCX0KKwkJCX0KIAkJfQogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTk0Niw2ICs5ODksNyBAQAogICogQGFyZzogaGFuZGxlciBhcmcKICAqIEByZWdzOiByZWdpc3RlcnMKICAqLworCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW9jNF9pbnRyKGludCBpcnEsIHZvaWQgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGlvYzRfc29mdCAqc29mdDsKQEAgLTk1Myw3ICs5OTcsNyBAQAogCWludCB4eCwgbnVtX2ludHJzID0gMDsKIAlpbnQgaW50cl90eXBlOwogCWludCBoYW5kbGVkID0gMDsKLQlzdHJ1Y3QgaW9jNF9pbnRyX2luZm8gKmlpOworCXN0cnVjdCBpb2M0X2ludHJfaW5mbyAqaW50cl9pbmZvOwogCiAJc29mdCA9IGFyZzsKIAlmb3IgKGludHJfdHlwZSA9IDA7IGludHJfdHlwZSA8IElPQzRfTlVNX0lOVFJfVFlQRVM7IGludHJfdHlwZSsrKSB7CkBAIC05NjYsMTMgKzEwMTAsMTMgQEAKIAkJICogd2hpY2ggaW50ZXJydXB0IGJpdHMgYXJlIHNldC4KIAkJICovCiAJCWZvciAoeHggPSAwOyB4eCA8IG51bV9pbnRyczsgeHgrKykgewotCQkJaWkgPSAmc29mdC0+aXNfaW50cl90eXBlW2ludHJfdHlwZV0uaXNfaW50cl9pbmZvW3h4XTsKLQkJCWlmICgodGhpc19taXIgPSB0aGlzX2lyICYgaWktPnNkX2JpdHMpKSB7CisJCQlpbnRyX2luZm8gPSAmc29mdC0+aXNfaW50cl90eXBlW2ludHJfdHlwZV0uaXNfaW50cl9pbmZvW3h4XTsKKwkJCWlmICgodGhpc19taXIgPSB0aGlzX2lyICYgaW50cl9pbmZvLT5zZF9iaXRzKSkgewogCQkJCS8qIERpc2FibGUgb3duZWQgaW50ZXJydXB0cywgY2FsbCBoYW5kbGVyICovCiAJCQkJaGFuZGxlZCsrOwotCQkJCXdyaXRlX2lyZWcoc29mdCwgaWktPnNkX2JpdHMsIElPQzRfV19JRUMsCisJCQkJd3JpdGVfaXJlZyhzb2Z0LCBpbnRyX2luZm8tPnNkX2JpdHMsIElPQzRfV19JRUMsCiAJCQkJCQkJCWludHJfdHlwZSk7Ci0JCQkJaWktPnNkX2ludHIoaWktPnNkX2luZm8sIHRoaXNfbWlyKTsKKwkJCQlpbnRyX2luZm8tPnNkX2ludHIoaW50cl9pbmZvLT5zZF9pbmZvLCB0aGlzX21pcik7CiAJCQkJdGhpc19pciAmPSB+dGhpc19taXI7CiAJCQl9CiAJCX0KQEAgLTk4MCw3ICsxMDI0LDYgQEAKICNpZmRlZiBERUJVR19JTlRFUlJVUFRTCiAJewogCQlzdHJ1Y3QgaW9jNF9taXNjX3JlZ3MgX19pb21lbSAqbWVtID0gc29mdC0+aXNfaW9jNF9taXNjX2FkZHI7Ci0JCXNwaW5sb2NrX3QgKmxwID0gJnNvZnQtPmlzX2lyX2xvY2s7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc29mdC0+aXNfaXJfbG9jaywgZmxhZyk7CkBAIC0xMTc3LDcgKzEyMjAsNyBAQAogewogCWludCBzcGluaXRlciA9IDA7CiAKLQlwb3J0LT5pcF9mbGFncyA9IDA7CisJcG9ydC0+aXBfZmxhZ3MgPSBQT1JUX0FDVElWRTsKIAogCS8qIFBhdXNlIHRoZSBETUEgaW50ZXJmYWNlIGlmIG5lY2Vzc2FyeSAqLwogCWlmIChwb3J0LT5pcF9zc2NyICYgSU9DNF9TU0NSX0RNQV9FTikgewpAQCAtMTE4Nyw2ICsxMjMwLDcgQEAKIAkJCQkmIElPQzRfU1NDUl9QQVVTRV9TVEFURSkgPT0gMCkgewogCQkJc3Bpbml0ZXIrKzsKIAkJCWlmIChzcGluaXRlciA+IE1BWElURVIpIHsKKwkJCQlwb3J0LT5pcF9mbGFncyA9IFBPUlRfSU5BQ1RJVkU7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQl9CkBAIC0xNTA2LDE0ICsxNTUwLDEzIEBACiAvKioKICAqIHNldF9tY3IgLSBzZXQgdGhlIG1hc3RlciBjb250cm9sIHJlZwogICogQHRoZV9wb3J0OiBwb3J0IHRvIHVzZQotICogQHNldDogc2V0ID8KICAqIEBtYXNrMTogbWNyIG1hc2sKICAqIEBtYXNrMjogc2hhZG93IG1hc2sKICAqLwotc3RhdGljIGlubGluZSBpbnQgc2V0X21jcihzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCwgaW50IHNldCwKK3N0YXRpYyBpbmxpbmUgaW50IHNldF9tY3Ioc3RydWN0IHVhcnRfcG9ydCAqdGhlX3BvcnQsCiAJCWludCBtYXNrMSwgaW50IG1hc2syKQogewotCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQgPSBnZXRfaW9jNF9wb3J0KHRoZV9wb3J0KTsKKwlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMCk7CiAJdWludDMyX3Qgc2hhZG93OwogCWludCBzcGluaXRlciA9IDA7CiAJY2hhciBtY3I7CkBAIC0xNTM2LDEzICsxNTc5LDkgQEAKIAltY3IgPSAoc2hhZG93ICYgMHhmZjAwMDAwMCkgPj4gMjQ7CiAKIAkvKiBTZXQgbmV3IHZhbHVlICovCi0JaWYgKHNldCkgewotCQltY3IgfD0gbWFzazE7Ci0JCXNoYWRvdyB8PSBtYXNrMjsKLQl9IGVsc2UgewotCQltY3IgJj0gfm1hc2sxOwotCQlzaGFkb3cgJj0gfm1hc2syOwotCX0KKwltY3IgfD0gbWFzazE7CisJc2hhZG93IHw9IG1hc2syOworCiAJd3JpdGViKG1jciwgJnBvcnQtPmlwX3VhcnRfcmVncy0+aTR1X21jcik7CiAJd3JpdGVsKHNoYWRvdywgJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zaGFkb3cpOwogCkBAIC0xNTU4LDcgKzE1OTcsNyBAQAogICogQHBvcnQ6IHBvcnQgdG8gdXNlCiAgKiBAcHJvdG86IHByb3RvY29sIHRvIHVzZQogICovCi1zdGF0aWMgaW50IGlvYzRfc2V0X3Byb3RvKHN0cnVjdCBpb2M0X3BvcnQgKnBvcnQsIGVudW0gc2lvX3Byb3RvIHByb3RvKQorc3RhdGljIGludCBpb2M0X3NldF9wcm90byhzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0LCBpbnQgcHJvdG8pCiB7CiAJc3RydWN0IGhvb2tzICpob29rcyA9IHBvcnQtPmlwX2hvb2tzOwogCkBAIC0xNTg5LDcgKzE2MjgsNyBAQAogCWludCByZXN1bHQ7CiAJY2hhciAqc3RhcnQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCk7CisJc3RydWN0IGlvYzRfcG9ydCAqcG9ydCA9IGdldF9pb2M0X3BvcnQodGhlX3BvcnQsIDApOwogCXN0cnVjdCB1YXJ0X2luZm8gKmluZm87CiAKIAlpZiAoIXRoZV9wb3J0KQpAQCAtMTY0NSw3ICsxNjg0LDcgQEAKIGlvYzRfY2hhbmdlX3NwZWVkKHN0cnVjdCB1YXJ0X3BvcnQgKnRoZV9wb3J0LAogCQkgIHN0cnVjdCB0ZXJtaW9zICpuZXdfdGVybWlvcywgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQogewotCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQgPSBnZXRfaW9jNF9wb3J0KHRoZV9wb3J0KTsKKwlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMCk7CiAJaW50IGJhdWQsIGJpdHM7CiAJdW5zaWduZWQgY2ZsYWc7CiAJaW50IG5ld19wYXJpdHkgPSAwLCBuZXdfcGFyaXR5X2VuYWJsZSA9IDAsIG5ld19zdG9wID0gMCwgbmV3X2RhdGEgPSA4OwpAQCAtMTc1Miw3ICsxNzkxLDcgQEAKIAlpZiAoIXRoZV9wb3J0KQogCQlyZXR1cm4gLTE7CiAKLQlwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCk7CisJcG9ydCA9IGdldF9pb2M0X3BvcnQodGhlX3BvcnQsIDApOwogCWlmICghcG9ydCkKIAkJcmV0dXJuIC0xOwogCkBAIC0xNzYwLDYgKzE3OTksOSBAQAogCiAJbG9jYWxfb3Blbihwb3J0KTsKIAorCS8qIHNldCB0aGUgcHJvdG9jb2wgLSBtYXBiYXNlIGhhcyB0aGUgcG9ydCB0eXBlICovCisJaW9jNF9zZXRfcHJvdG8ocG9ydCwgdGhlX3BvcnQtPm1hcGJhc2UpOworCiAJLyogc2V0IHRoZSBzcGVlZCBvZiB0aGUgc2VyaWFsIHBvcnQgKi8KIAlpb2M0X2NoYW5nZV9zcGVlZCh0aGVfcG9ydCwgaW5mby0+dHR5LT50ZXJtaW9zLCAoc3RydWN0IHRlcm1pb3MgKikwKTsKIApAQCAtMTc2OCwxNyArMTgxMCwxNyBAQAogCiAvKgogICogaW9jNF9jYl9vdXRwdXRfbG93YXQgLSBjYWxsZWQgd2hlbiB0aGUgb3V0cHV0IGxvdyB3YXRlciBtYXJrIGlzIGhpdAotICogQHBvcnQ6IHBvcnQgdG8gb3V0cHV0CisgKiBAdGhlX3BvcnQ6IHBvcnQgdG8gb3V0cHV0CiAgKi8KLXN0YXRpYyB2b2lkIGlvYzRfY2Jfb3V0cHV0X2xvd2F0KHN0cnVjdCBpb2M0X3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCBpb2M0X2NiX291dHB1dF9sb3dhdChzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCkKIHsKIAl1bnNpZ25lZCBsb25nIHBmbGFnczsKIAogCS8qIGlwX2xvY2sgaXMgc2V0IG9uIHRoZSBjYWxsIGhlcmUgKi8KLQlpZiAocG9ydC0+aXBfcG9ydCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aXBfcG9ydC0+bG9jaywgcGZsYWdzKTsKLQkJdHJhbnNtaXRfY2hhcnMocG9ydC0+aXBfcG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmlwX3BvcnQtPmxvY2ssIHBmbGFncyk7CisJaWYgKHRoZV9wb3J0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfcG9ydC0+bG9jaywgcGZsYWdzKTsKKwkJdHJhbnNtaXRfY2hhcnModGhlX3BvcnQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfcG9ydC0+bG9jaywgcGZsYWdzKTsKIAl9CiB9CiAKQEAgLTE5MjMsNyArMTk2NSw3IEBACiAJCQkJCSZwb3J0LT5pcF9tZW0tPnNpb19pci5yYXcpOwogCiAJCQlpZiAocG9ydC0+aXBfbm90aWZ5ICYgTl9PVVRQVVRfTE9XQVQpCi0JCQkJaW9jNF9jYl9vdXRwdXRfbG93YXQocG9ydCk7CisJCQkJaW9jNF9jYl9vdXRwdXRfbG93YXQocG9ydC0+aXBfcG9ydCk7CiAJCX0KIAogCQkvKiBIYW5kbGUgdHhfbXQuICBNdXN0IGNvbWUgYWZ0ZXIgdHhfZXhwbGljaXQuICAqLwpAQCAtMTkzNiw3ICsxOTc4LDcgQEAKIAkJCSAqIFNvIHNlbmQgdGhlIG5vdGlmaWNhdGlvbiBub3cuCiAJCQkgKi8KIAkJCWlmIChwb3J0LT5pcF9ub3RpZnkgJiBOX09VVFBVVF9MT1dBVCkgewotCQkJCWlvYzRfY2Jfb3V0cHV0X2xvd2F0KHBvcnQpOworCQkJCWlvYzRfY2Jfb3V0cHV0X2xvd2F0KHBvcnQtPmlwX3BvcnQpOwogCiAJCQkJLyogV2UgbmVlZCB0byByZWxvYWQgdGhlIHNpb19pciBzaW5jZSB0aGUgbG93YXQKIAkJCQkgKiBjYWxsIG1heSBoYXZlIGNhdXNlZCBhbm90aGVyIHdyaXRlIHRvIG9jY3VyLApAQCAtMjAyMyw3ICsyMDY1LDcgQEAKIAkJCQlpbnQgbGVuKQogewogCWludCBwcm9kX3B0ciwgY29uc19wdHIsIHRvdGFsOwotCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQgPSBnZXRfaW9jNF9wb3J0KHRoZV9wb3J0KTsKKwlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMCk7CiAJc3RydWN0IHJpbmcgKmlucmluZzsKIAlzdHJ1Y3QgcmluZ19lbnRyeSAqZW50cnk7CiAJc3RydWN0IGhvb2tzICpob29rcyA9IHBvcnQtPmlwX2hvb2tzOwpAQCAtMjMwMSw3ICsyMzQzLDYgQEAKIAlpbnQgcmVhZF9jb3VudCwgcmVxdWVzdF9jb3VudCA9IElPQzRfTUFYX0NIQVJTOwogCXN0cnVjdCB1YXJ0X2ljb3VudCAqaWNvdW50OwogCXN0cnVjdCB1YXJ0X2luZm8gKmluZm8gPSB0aGVfcG9ydC0+aW5mbzsKLQlpbnQgZmxpcCA9IDA7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAKIAkvKiBNYWtlIHN1cmUgYWxsIHRoZSBwb2ludGVycyBhcmUgImdvb2QiIG9uZXMgKi8KQEAgLTIzMTMsNyArMjM1NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRoZV9wb3J0LT5sb2NrLCBwZmxhZ3MpOwogCXR0eSA9IGluZm8tPnR0eTsKIAotCXJlcXVlc3RfY291bnQgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIElPQzRfTUFYX0NIQVJTIC0gMik7CisJcmVxdWVzdF9jb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgSU9DNF9NQVhfQ0hBUlMpOwogCiAJaWYgKHJlcXVlc3RfY291bnQgPiAwKSB7CiAJCWljb3VudCA9ICZ0aGVfcG9ydC0+aWNvdW50OwpAQCAtMjMyNiw4ICsyMzY3LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9wb3J0LT5sb2NrLCBwZmxhZ3MpOwogCi0JaWYgKGZsaXApCi0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIH0KIAogLyoqCkBAIC0yMzM3LDE3ICsyMzc3LDI3IEBACiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICppYzRfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCkKIHsKLQlyZXR1cm4gIlNHSSBJT0M0IFNlcmlhbCI7CisJaWYgKHRoZV9wb3J0LT5tYXBiYXNlID09IFBST1RPX1JTMjMyKQorCQlyZXR1cm4gIlNHSSBJT0M0IFNlcmlhbCBbcnMyMzJdIjsKKwllbHNlCisJCXJldHVybiAiU0dJIElPQzQgU2VyaWFsIFtyczQyMl0iOwogfQogCiAvKioKLSAqIGljNF90eF9lbXB0eSAtIElzIHRoZSB0cmFuc21pdHRlciBlbXB0eT8gIFdlIHByZXRlbmQgd2UncmUgYWx3YXlzIGVtcHR5Ci0gKiBAcG9ydDogUG9ydCB0byBvcGVyYXRlIG9uICh3ZSBpZ25vcmUgc2luY2Ugd2UgYWx3YXlzIHJldHVybiAxKQorICogaWM0X3R4X2VtcHR5IC0gSXMgdGhlIHRyYW5zbWl0dGVyIGVtcHR5PworICogQHBvcnQ6IFBvcnQgdG8gb3BlcmF0ZSBvbgogICoKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBpYzRfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqdGhlX3BvcnQpCiB7Ci0JcmV0dXJuIDE7CisJc3RydWN0IGlvYzRfcG9ydCAqcG9ydCA9IGdldF9pb2M0X3BvcnQodGhlX3BvcnQsIDApOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCisJaWYgKHBvcnRfaXNfYWN0aXZlKHBvcnQsIHRoZV9wb3J0KSkgeworCQlpZiAocmVhZGwoJnBvcnQtPmlwX3NlcmlhbF9yZWdzLT5zaGFkb3cpICYgSU9DNF9TSEFET1dfVEVNVCkKKwkJCXJldCA9IFRJT0NTRVJfVEVNVDsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0yMzU3LDYgKzI0MDcsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgaWM0X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqdGhlX3BvcnQpCiB7CisJc3RydWN0IGlvYzRfcG9ydCAqcG9ydCA9IGdldF9pb2M0X3BvcnQodGhlX3BvcnQsIDApOworCisJaWYgKHBvcnRfaXNfYWN0aXZlKHBvcnQsIHRoZV9wb3J0KSkKKwkJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX09VVFBVVF9MT1dBVCwgMCk7CiB9CiAKIC8qKgpAQCAtMjM3OSwxMSArMjQzMywxMiBAQAogCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQ7CiAJc3RydWN0IHVhcnRfaW5mbyAqaW5mbzsKIAotCXBvcnQgPSBnZXRfaW9jNF9wb3J0KHRoZV9wb3J0KTsKKwlwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMCk7CiAJaWYgKCFwb3J0KQogCQlyZXR1cm47CiAKIAlpbmZvID0gdGhlX3BvcnQtPmluZm87CisJcG9ydC0+aXBfcG9ydCA9IE5VTEw7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKIApAQCAtMjM5Miw2ICsyNDQ3LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0aGVfcG9ydC0+bG9jaywgcG9ydF9mbGFncyk7CiAJc2V0X25vdGlmaWNhdGlvbihwb3J0LCBOX0FMTCwgMCk7CisJcG9ydC0+aXBfZmxhZ3MgPSBQT1JUX0lOQUNUSVZFOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9wb3J0LT5sb2NrLCBwb3J0X2ZsYWdzKTsKIH0KIApAQCAtMjQwNCw2ICsyNDYwLDExIEBACiBzdGF0aWMgdm9pZCBpYzRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnRoZV9wb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCiB7CiAJdW5zaWduZWQgY2hhciBtY3IgPSAwOworCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMCk7CisJaWYgKCFwb3J0X2lzX2FjdGl2ZShwb3J0LCB0aGVfcG9ydCkpCisJCXJldHVybjsKIAogCWlmIChtY3RybCAmIFRJT0NNX1JUUykKIAkJbWNyIHw9IFVBUlRfTUNSX1JUUzsKQEAgLTI0MTYsNyArMjQ3Nyw3IEBACiAJaWYgKG1jdHJsICYgVElPQ01fTE9PUCkKIAkJbWNyIHw9IFVBUlRfTUNSX0xPT1A7CiAKLQlzZXRfbWNyKHRoZV9wb3J0LCAxLCBtY3IsIElPQzRfU0hBRE9XX0RUUik7CisJc2V0X21jcih0aGVfcG9ydCwgbWNyLCBJT0M0X1NIQURPV19EVFIpOwogfQogCiAvKioKQEAgLTI0MjYsMTEgKzI0ODcsMTEgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBpYzRfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnRoZV9wb3J0KQogewotCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQgPSBnZXRfaW9jNF9wb3J0KHRoZV9wb3J0KTsKKwlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMCk7CiAJdWludDMyX3Qgc2hhZG93OwogCXVuc2lnbmVkIGludCByZXQgPSAwOwogCi0JaWYgKCFwb3J0KQorCWlmICghcG9ydF9pc19hY3RpdmUocG9ydCwgdGhlX3BvcnQpKQogCQlyZXR1cm4gMDsKIAogCXNoYWRvdyA9IHJlYWRsKCZwb3J0LT5pcF9zZXJpYWxfcmVncy0+c2hhZG93KTsKQEAgLTI0NTAsOSArMjUxMSw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIGljNF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICp0aGVfcG9ydCkKIHsKLQlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCk7CisJc3RydWN0IGlvYzRfcG9ydCAqcG9ydCA9IGdldF9pb2M0X3BvcnQodGhlX3BvcnQsIDApOwogCi0JaWYgKHBvcnQpIHsKKwlpZiAocG9ydF9pc19hY3RpdmUocG9ydCwgdGhlX3BvcnQpKSB7CiAJCXNldF9ub3RpZmljYXRpb24ocG9ydCwgTl9PVVRQVVRfTE9XQVQsIDEpOwogCQllbmFibGVfaW50cnMocG9ydCwgcG9ydC0+aXBfaG9va3MtPmludHJfdHhfbXQpOwogCX0KQEAgLTI0NjksNyArMjUzMCw3IEBACiB9CiAKIC8qKgotICogaWM0X3N0YXJ0dXAgLSBTdGFydCB1cCB0aGUgc2VyaWFsIHBvcnQgLSBhbHdheXMgcmV0dXJuIDAgKFdlJ3JlIGFsd2F5cyBvbikKKyAqIGljNF9zdGFydHVwIC0gU3RhcnQgdXAgdGhlIHNlcmlhbCBwb3J0CiAgKiBAcG9ydDogUG9ydCB0byBvcGVyYXRlIG9uCiAgKgogICovCkBAIC0yNDgxLDE3ICsyNTQyLDE2IEBACiAJc3RydWN0IHVhcnRfaW5mbyAqaW5mbzsKIAl1bnNpZ25lZCBsb25nIHBvcnRfZmxhZ3M7CiAKLQlpZiAoIXRoZV9wb3J0KSB7CisJaWYgKCF0aGVfcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXBvcnQgPSBnZXRfaW9jNF9wb3J0KHRoZV9wb3J0KTsKLQlpZiAoIXBvcnQpIHsKKwlwb3J0ID0gZ2V0X2lvYzRfcG9ydCh0aGVfcG9ydCwgMSk7CisJaWYgKCFwb3J0KQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJaW5mbyA9IHRoZV9wb3J0LT5pbmZvOwogCiAJY29udHJvbCA9IHBvcnQtPmlwX2NvbnRyb2w7CiAJaWYgKCFjb250cm9sKSB7CisJCXBvcnQtPmlwX3BvcnQgPSBOVUxMOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTI1NTMsMjggKzI2MTMsMTA0IEBACiAgKiBCb290LXRpbWUgaW5pdGlhbGl6YXRpb24gY29kZQogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgaW9jNF91YXJ0ID0geworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBpb2M0X3VhcnRfcnMyMzIgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5kcml2ZXJfbmFtZQk9ICJpb2M0X3NlcmlhbCIsCi0JLmRldl9uYW1lCT0gREVWSUNFX05BTUUsCisJLmRyaXZlcl9uYW1lCT0gImlvYzRfc2VyaWFsX3JzMjMyIiwKKwkuZGV2X25hbWUJPSBERVZJQ0VfTkFNRV9SUzIzMiwKIAkubWFqb3IJCT0gREVWSUNFX01BSk9SLAotCS5taW5vcgkJPSBERVZJQ0VfTUlOT1IsCisJLm1pbm9yCQk9IERFVklDRV9NSU5PUl9SUzIzMiwKIAkubnIJCT0gSU9DNF9OVU1fQ0FSRFMgKiBJT0M0X05VTV9TRVJJQUxfUE9SVFMsCiB9OwogCitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIGlvYzRfdWFydF9yczQyMiA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmRyaXZlcl9uYW1lCT0gImlvYzRfc2VyaWFsX3JzNDIyIiwKKwkuZGV2X25hbWUJPSBERVZJQ0VfTkFNRV9SUzQyMiwKKwkubWFqb3IJCT0gREVWSUNFX01BSk9SLAorCS5taW5vcgkJPSBERVZJQ0VfTUlOT1JfUlM0MjIsCisJLm5yCQk9IElPQzRfTlVNX0NBUkRTICogSU9DNF9OVU1fU0VSSUFMX1BPUlRTLAorfTsKKworCiAvKioKLSAqIGlvYzRfc2VyaWFsX2NvcmVfYXR0YWNoIC0gcmVnaXN0ZXIgd2l0aCBzZXJpYWwgY29yZQorICogaW9jNF9zZXJpYWxfcmVtb3ZlX29uZSAtIGRldGFjaCBmdW5jdGlvbgorICoKKyAqIEBpZGQ6IElPQzQgbWFzdGVyIG1vZHVsZSBkYXRhIGZvciB0aGlzIElPQzQKKyAqLworCitzdGF0aWMgaW50IGlvYzRfc2VyaWFsX3JlbW92ZV9vbmUoc3RydWN0IGlvYzRfZHJpdmVyX2RhdGEgKmlkZCkKK3sKKwlpbnQgcG9ydF9udW0sIHBvcnRfdHlwZTsKKwlzdHJ1Y3QgaW9jNF9jb250cm9sICpjb250cm9sOworCXN0cnVjdCB1YXJ0X3BvcnQgKnRoZV9wb3J0OworCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQ7CisJc3RydWN0IGlvYzRfc29mdCAqc29mdDsKKworCWNvbnRyb2wgPSBpZGQtPmlkZF9zZXJpYWxfZGF0YTsKKworCWZvciAocG9ydF9udW0gPSAwOyBwb3J0X251bSA8IElPQzRfTlVNX1NFUklBTF9QT1JUUzsgcG9ydF9udW0rKykgeworCQlmb3IgKHBvcnRfdHlwZSA9IFVBUlRfUE9SVF9NSU47CisJCQkJCXBvcnRfdHlwZSA8IFVBUlRfUE9SVF9DT1VOVDsKKwkJCQkJcG9ydF90eXBlKyspIHsKKwkJCXRoZV9wb3J0ID0gJmNvbnRyb2wtPmljX3BvcnRbcG9ydF9udW1dLmljcF91YXJ0X3BvcnQKKwkJCQkJCQlbcG9ydF90eXBlXTsKKwkJCWlmICh0aGVfcG9ydCkgeworCQkJCXN3aXRjaCAocG9ydF90eXBlKSB7CisJCQkJY2FzZSBVQVJUX1BPUlRfUlM0MjI6CisJCQkJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZpb2M0X3VhcnRfcnM0MjIsCisJCQkJCQkJdGhlX3BvcnQpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCWNhc2UgVUFSVF9QT1JUX1JTMjMyOgorCQkJCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmaW9jNF91YXJ0X3JzMjMyLAorCQkJCQkJCXRoZV9wb3J0KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCXBvcnQgPSBjb250cm9sLT5pY19wb3J0W3BvcnRfbnVtXS5pY3BfcG9ydDsKKwkJLyogd2UgYWxsb2NhdGUgaW4gcGFpcnMgKi8KKwkJaWYgKCEocG9ydF9udW0gJiAxKSAmJiBwb3J0KSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBvcnQtPmlwX3BkZXYsCisJCQkJCVRPVEFMX1JJTkdfQlVGX1NJWkUsCisJCQkJCXBvcnQtPmlwX2NwdV9yaW5nYnVmLAorCQkJCQlwb3J0LT5pcF9kbWFfcmluZ2J1Zik7CisJCQlrZnJlZShwb3J0KTsKKwkJfQorCX0KKwlzb2Z0ID0gY29udHJvbC0+aWNfc29mdDsKKwlpZiAoc29mdCkgeworCQlmcmVlX2lycShjb250cm9sLT5pY19pcnEsIHNvZnQpOworCQlpZiAoc29mdC0+aXNfaW9jNF9zZXJpYWxfYWRkcikgeworCQkJcmVsZWFzZV9yZWdpb24oKHVuc2lnbmVkIGxvbmcpCisJCQkgICAgIHNvZnQtPmlzX2lvYzRfc2VyaWFsX2FkZHIsCisJCQkJc2l6ZW9mKHN0cnVjdCBpb2M0X3NlcmlhbCkpOworCQl9CisJCWtmcmVlKHNvZnQpOworCX0KKwlrZnJlZShjb250cm9sKTsKKwlpZGQtPmlkZF9zZXJpYWxfZGF0YSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIGlvYzRfc2VyaWFsX2NvcmVfYXR0YWNoX3JzMjMyIC0gcmVnaXN0ZXIgd2l0aCBzZXJpYWwgY29yZQogICoJCVRoaXMgaXMgZG9uZSBkdXJpbmcgcGNpIHByb2JpbmcKICAqIEBwZGV2OiBoYW5kbGUgZm9yIHRoaXMgY2FyZAogICovCiBzdGF0aWMgaW5saW5lIGludAotaW9jNF9zZXJpYWxfY29yZV9hdHRhY2goc3RydWN0IHBjaV9kZXYgKnBkZXYpCitpb2M0X3NlcmlhbF9jb3JlX2F0dGFjaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHBvcnRfdHlwZSkKIHsKIAlzdHJ1Y3QgaW9jNF9wb3J0ICpwb3J0OwogCXN0cnVjdCB1YXJ0X3BvcnQgKnRoZV9wb3J0OwogCXN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlvYzRfY29udHJvbCAqY29udHJvbCA9IGlkZC0+aWRkX3NlcmlhbF9kYXRhOwotCWludCBpaTsKKwlpbnQgcG9ydF9udW07CisJaW50IHBvcnRfdHlwZV9pZHg7CisJc3RydWN0IHVhcnRfZHJpdmVyICp1X2RyaXZlcjsKKwogCiAJRFBSSU5UX0NPTkZJRygoIiVzOiBhdHRhY2ggcGRldiAweCVwIC0gY29udHJvbCAweCVwXG4iLAogCQkJX19GVU5DVElPTl9fLCBwZGV2LCAodm9pZCAqKWNvbnRyb2wpKTsKQEAgLTI1ODIsMjggKzI3MTgsMzYgQEAKIAlpZiAoIWNvbnRyb2wpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogb25jZSBhcm91bmQgZm9yIGVhY2ggcG9ydCBvbiB0aGlzIGNhcmQgKi8KLQlmb3IgKGlpID0gMDsgaWkgPCBJT0M0X05VTV9TRVJJQUxfUE9SVFM7IGlpKyspIHsKLQkJdGhlX3BvcnQgPSAmY29udHJvbC0+aWNfcG9ydFtpaV0uaWNwX3VhcnRfcG9ydDsKLQkJcG9ydCA9IGNvbnRyb2wtPmljX3BvcnRbaWldLmljcF9wb3J0OwotCQlwb3J0LT5pcF9wb3J0ID0gdGhlX3BvcnQ7CisJcG9ydF90eXBlX2lkeCA9IChwb3J0X3R5cGUgPT0gUFJPVE9fUlMyMzIpID8gVUFSVF9QT1JUX1JTMjMyCisJCQkJCQk6IFVBUlRfUE9SVF9SUzQyMjsKIAotCQlEUFJJTlRfQ09ORklHKCgiJXM6IGF0dGFjaCB0aGVfcG9ydCAweCVwIC8gcG9ydCAweCVwXG4iLAorCXVfZHJpdmVyID0gKHBvcnRfdHlwZSA9PSBQUk9UT19SUzIzMikJPyAmaW9jNF91YXJ0X3JzMjMyCisJCQkJCQk6ICZpb2M0X3VhcnRfcnM0MjI7CisKKwkvKiBvbmNlIGFyb3VuZCBmb3IgZWFjaCBwb3J0IG9uIHRoaXMgY2FyZCAqLworCWZvciAocG9ydF9udW0gPSAwOyBwb3J0X251bSA8IElPQzRfTlVNX1NFUklBTF9QT1JUUzsgcG9ydF9udW0rKykgeworCQl0aGVfcG9ydCA9ICZjb250cm9sLT5pY19wb3J0W3BvcnRfbnVtXS5pY3BfdWFydF9wb3J0CisJCQkJCQkJW3BvcnRfdHlwZV9pZHhdOworCQlwb3J0ID0gY29udHJvbC0+aWNfcG9ydFtwb3J0X251bV0uaWNwX3BvcnQ7CisJCXBvcnQtPmlwX2FsbF9wb3J0c1twb3J0X3R5cGVfaWR4XSA9IHRoZV9wb3J0OworCisJCURQUklOVF9DT05GSUcoKCIlczogYXR0YWNoIHRoZV9wb3J0IDB4JXAgLyBwb3J0IDB4JXAgOiB0eXBlICVzXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgKHZvaWQgKil0aGVfcG9ydCwKLQkJCQkodm9pZCAqKXBvcnQpKTsKKwkJCQkodm9pZCAqKXBvcnQsCisJCQkJcG9ydF90eXBlID09IFBST1RPX1JTMjMyID8gInJzMjMyIiA6ICJyczQyMiIpKTsKIAogCQkvKiBtZW1iYXNlLCBpb2Jhc2UgYW5kIG1hcGJhc2UganVzdCBuZWVkIHRvIGJlIG5vbi0wICovCiAJCXRoZV9wb3J0LT5tZW1iYXNlID0gKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKTE7Ci0JCXRoZV9wb3J0LT5pb2Jhc2UgPSAocGRldi0+YnVzLT5udW1iZXIgPDwgMTYpIHwgIGlpOwotCQl0aGVfcG9ydC0+bGluZSA9IChOdW1fb2ZfaW9jNF9jYXJkcyA8PCAyKSB8IGlpOwotCQl0aGVfcG9ydC0+bWFwYmFzZSA9IDE7CisJCXRoZV9wb3J0LT5pb2Jhc2UgPSAocGRldi0+YnVzLT5udW1iZXIgPDwgMTYpIHwgIHBvcnRfbnVtOworCQl0aGVfcG9ydC0+bGluZSA9IChOdW1fb2ZfaW9jNF9jYXJkcyA8PCAyKSB8IHBvcnRfbnVtOworCQl0aGVfcG9ydC0+bWFwYmFzZSA9IHBvcnRfdHlwZTsKIAkJdGhlX3BvcnQtPnR5cGUgPSBQT1JUXzE2NTUwQTsKIAkJdGhlX3BvcnQtPmZpZm9zaXplID0gSU9DNF9GSUZPX0NIQVJTOwogCQl0aGVfcG9ydC0+b3BzID0gJmlvYzRfb3BzOwogCQl0aGVfcG9ydC0+aXJxID0gY29udHJvbC0+aWNfaXJxOwogCQl0aGVfcG9ydC0+ZGV2ID0gJnBkZXYtPmRldjsKIAkJc3Bpbl9sb2NrX2luaXQoJnRoZV9wb3J0LT5sb2NrKTsKLQkJaWYgKHVhcnRfYWRkX29uZV9wb3J0KCZpb2M0X3VhcnQsIHRoZV9wb3J0KSA8IDApIHsKKwkJaWYgKHVhcnRfYWRkX29uZV9wb3J0KHVfZHJpdmVyLCB0aGVfcG9ydCkgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAgICAgIiVzOiB1bmFibGUgdG8gYWRkIHBvcnQgJWQgYnVzICVkXG4iLAogCQkJICAgICAgIF9fRlVOQ1RJT05fXywgdGhlX3BvcnQtPmxpbmUsIHBkZXYtPmJ1cy0+bnVtYmVyKTsKQEAgLTI2MTIsOCArMjc1Niw2IEBACiAJCQkgICAgKCJJT0M0IHNlcmlhbCBwb3J0ICVkIGlycSA9ICVkLCBidXMgJWRcbiIsCiAJCQkgICAgICAgdGhlX3BvcnQtPmxpbmUsIHRoZV9wb3J0LT5pcnEsIHBkZXYtPmJ1cy0+bnVtYmVyKSk7CiAJCX0KLQkJLyogYWxsIHBvcnRzIGFyZSByczIzMiBmb3Igbm93ICovCi0JCWlvYzRfc2V0X3Byb3RvKHBvcnQsIFBST1RPX1JTMjMyKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjMzLDcgKzI3NzUsOCBAQAogCWludCByZXQgPSAwOwogCiAKLQlEUFJJTlRfQ09ORklHKCgiJXMgKDB4JXAsIDB4JXApXG4iLCBfX0ZVTkNUSU9OX18sIGlkZC0+aWRkX3BkZXYsIGlkZC0+aWRkX3BjaV9pZCkpOworCURQUklOVF9DT05GSUcoKCIlcyAoMHglcCwgMHglcClcbiIsIF9fRlVOQ1RJT05fXywgaWRkLT5pZGRfcGRldiwKKwkJCQkJCQlpZGQtPmlkZF9wY2lfaWQpKTsKIAogCS8qIHJlcXVlc3Qgc2VyaWFsIHJlZ2lzdGVycyAqLwogCXRtcF9hZGRyMSA9IGlkZC0+aWRkX2JhcjAgKyBJT0M0X1NFUklBTF9PRkZTRVQ7CkBAIC0yNjU1LDExICsyNzk4LDExIEBACiAJCWdvdG8gb3V0MjsKIAl9CiAJRFBSSU5UX0NPTkZJRygoIiVzIDogbWVtIDB4JXAsIHNlcmlhbCAweCVwXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgKHZvaWQgKilpZGQtPmlkZF9taXNjX3JlZ3MsICh2b2lkICopc2VyaWFsKSk7CisJCQkJX19GVU5DVElPTl9fLCAodm9pZCAqKWlkZC0+aWRkX21pc2NfcmVncywKKwkJCQkodm9pZCAqKXNlcmlhbCkpOwogCiAJLyogR2V0IG1lbW9yeSBmb3IgdGhlIG5ldyBjYXJkICovCi0JY29udHJvbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb2M0X2NvbnRyb2wpICogSU9DNF9OVU1fU0VSSUFMX1BPUlRTLAotCQkJCQkJR0ZQX0tFUk5FTCk7CisJY29udHJvbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpb2M0X2NvbnRyb2wpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghY29udHJvbCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpb2M0X2F0dGFjaF9vbmUiCkBAIC0yNzA0LDcgKzI4NDcsNyBAQAogCiAJLyogSG9vayB1cCBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWlmICghcmVxdWVzdF9pcnEoaWRkLT5pZGRfcGRldi0+aXJxLCBpb2M0X2ludHIsIFNBX1NISVJRLAotCQkJCSJzZ2ktaW9jNHNlcmlhbCIsICh2b2lkICopc29mdCkpIHsKKwkJCQkic2dpLWlvYzRzZXJpYWwiLCBzb2Z0KSkgewogCQljb250cm9sLT5pY19pcnEgPSBpZGQtPmlkZF9wZGV2LT5pcnE7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMjcxNSwxNiArMjg1OCwyMSBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0NDsKIAotCS8qIHJlZ2lzdGVyIHBvcnQgd2l0aCB0aGUgc2VyaWFsIGNvcmUgKi8KKwkvKiByZWdpc3RlciBwb3J0IHdpdGggdGhlIHNlcmlhbCBjb3JlIC0gMSByczIzMiwgMSByczQyMiAqLwogCi0JaWYgKChyZXQgPSBpb2M0X3NlcmlhbF9jb3JlX2F0dGFjaChpZGQtPmlkZF9wZGV2KSkpCisJaWYgKChyZXQgPSBpb2M0X3NlcmlhbF9jb3JlX2F0dGFjaChpZGQtPmlkZF9wZGV2LCBQUk9UT19SUzIzMikpKQogCQlnb3RvIG91dDQ7CiAKKwlpZiAoKHJldCA9IGlvYzRfc2VyaWFsX2NvcmVfYXR0YWNoKGlkZC0+aWRkX3BkZXYsIFBST1RPX1JTNDIyKSkpCisJCWdvdG8gb3V0NTsKKwogCU51bV9vZl9pb2M0X2NhcmRzKys7CiAKIAlyZXR1cm4gcmV0OwogCiAJLyogZXJyb3IgZXhpdHMgdGhhdCBnaXZlIGJhY2sgcmVzb3VyY2VzICovCitvdXQ1OgorCWlvYzRfc2VyaWFsX3JlbW92ZV9vbmUoaWRkKTsKIG91dDQ6CiAJa2ZyZWUoc29mdCk7CiBvdXQzOgpAQCAtMjczNyw1MiArMjg4NSw2IEBACiB9CiAKIAotLyoqCi0gKiBpb2M0X3NlcmlhbF9yZW1vdmVfb25lIC0gZGV0YWNoIGZ1bmN0aW9uCi0gKgotICogQGlkZDogSU9DNCBtYXN0ZXIgbW9kdWxlIGRhdGEgZm9yIHRoaXMgSU9DNAotICovCi0KLWludCBpb2M0X3NlcmlhbF9yZW1vdmVfb25lKHN0cnVjdCBpb2M0X2RyaXZlcl9kYXRhICppZGQpCi17Ci0JaW50IGlpOwotCXN0cnVjdCBpb2M0X2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqdGhlX3BvcnQ7Ci0Jc3RydWN0IGlvYzRfcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgaW9jNF9zb2Z0ICpzb2Z0OwotCi0JY29udHJvbCA9IGlkZC0+aWRkX3NlcmlhbF9kYXRhOwotCi0JZm9yIChpaSA9IDA7IGlpIDwgSU9DNF9OVU1fU0VSSUFMX1BPUlRTOyBpaSsrKSB7Ci0JCXRoZV9wb3J0ID0gJmNvbnRyb2wtPmljX3BvcnRbaWldLmljcF91YXJ0X3BvcnQ7Ci0JCWlmICh0aGVfcG9ydCkgewotCQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJmlvYzRfdWFydCwgdGhlX3BvcnQpOwotCQl9Ci0JCXBvcnQgPSBjb250cm9sLT5pY19wb3J0W2lpXS5pY3BfcG9ydDsKLQkJaWYgKCEoaWkgJiAxKSAmJiBwb3J0KSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBvcnQtPmlwX3BkZXYsCi0JCQkJCVRPVEFMX1JJTkdfQlVGX1NJWkUsCi0JCQkJCSh2b2lkICopcG9ydC0+aXBfY3B1X3JpbmdidWYsCi0JCQkJCXBvcnQtPmlwX2RtYV9yaW5nYnVmKTsKLQkJCWtmcmVlKHBvcnQpOwotCQl9Ci0JfQotCXNvZnQgPSBjb250cm9sLT5pY19zb2Z0OwotCWlmIChzb2Z0KSB7Ci0JCWZyZWVfaXJxKGNvbnRyb2wtPmljX2lycSwgKHZvaWQgKilzb2Z0KTsKLQkJaWYgKHNvZnQtPmlzX2lvYzRfc2VyaWFsX2FkZHIpIHsKLQkJCXJlbGVhc2VfcmVnaW9uKCh1bnNpZ25lZCBsb25nKQotCQkJICAgICBzb2Z0LT5pc19pb2M0X3NlcmlhbF9hZGRyLAotCQkJCXNpemVvZihzdHJ1Y3QgaW9jNF9zZXJpYWwpKTsKLQkJfQotCQlrZnJlZShzb2Z0KTsKLQl9Ci0Ja2ZyZWUoY29udHJvbCk7Ci0JaWRkLT5pZGRfc2VyaWFsX2RhdGEgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaW9jNF9zdWJtb2R1bGUgaW9jNF9zZXJpYWxfc3VibW9kdWxlID0gewogCS5pc19uYW1lID0gIklPQzRfc2VyaWFsIiwKIAkuaXNfb3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTI3OTgsOSArMjkwMCwxNSBAQAogCWludCByZXQ7CiAKIAkvKiByZWdpc3RlciB3aXRoIHNlcmlhbCBjb3JlICovCi0JaWYgKChyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmaW9jNF91YXJ0KSkgPCAwKSB7CisJaWYgKChyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmaW9jNF91YXJ0X3JzMjMyKSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSIlczogQ291bGRuJ3QgcmVnaXN0ZXIgSU9DNCBzZXJpYWwgZHJpdmVyXG4iLAorCQkJIiVzOiBDb3VsZG4ndCByZWdpc3RlciByczIzMiBJT0M0IHNlcmlhbCBkcml2ZXJcbiIsCisJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoKHJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZpb2M0X3VhcnRfcnM0MjIpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIiVzOiBDb3VsZG4ndCByZWdpc3RlciByczQyMiBJT0M0IHNlcmlhbCBkcml2ZXJcbiIsCiAJCQlfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTI4MTIsNyArMjkyMCw4IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaW9jNF9zZXJpYWxfZXhpdCh2b2lkKQogewogCWlvYzRfdW5yZWdpc3Rlcl9zdWJtb2R1bGUoJmlvYzRfc2VyaWFsX3N1Ym1vZHVsZSk7Ci0JdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmaW9jNF91YXJ0KTsKKwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZpb2M0X3VhcnRfcnMyMzIpOworCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmlvYzRfdWFydF9yczQyMik7CiB9CiAKIG1vZHVsZV9pbml0KGlvYzRfc2VyaWFsX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMgYi9kcml2ZXJzL3NlcmlhbC9pcDIyemlsb2cuYwppbmRleCA0MTlkZDNjLi42NTE3NzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pcDIyemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pcDIyemlsb2cuYwpAQCAtNDIwLDEwICs0MjAsOCBAQAogCWlmICh1cC0+cG9ydC5pbmZvID09IE5VTEwpCiAJCWdvdG8gYWNrX3R4X2ludDsKIAl4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7Ci0JaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkgewotCQl1YXJ0X3dyaXRlX3dha2V1cCgmdXAtPnBvcnQpOworCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpCiAJCWdvdG8gYWNrX3R4X2ludDsKLQl9CiAJaWYgKHVhcnRfdHhfc3RvcHBlZCgmdXAtPnBvcnQpKQogCQlnb3RvIGFja190eF9pbnQ7CiAKQEAgLTk2OSw4ICs5NjcsOSBAQAogI2RlZmluZSBaU19QVVRfQ0hBUl9NQVhfREVMQVkJMjAwMAkvKiAxMCBtcyAqLwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9JUDIyX1pJTE9HX0NPTlNPTEUKLXN0YXRpYyB2b2lkIGlwMjJ6aWxvZ19wdXRfY2hhcihzdHJ1Y3Qgemlsb2dfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgY2hhciBjaCkKK3N0YXRpYyB2b2lkIGlwMjJ6aWxvZ19wdXRfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCiB7CisJc3RydWN0IHppbG9nX2NoYW5uZWwgKmNoYW5uZWwgPSBaSUxPR19DSEFOTkVMX0ZST01fUE9SVChwb3J0KTsKIAlpbnQgbG9vcHMgPSBaU19QVVRfQ0hBUl9NQVhfREVMQVk7CiAKIAkvKiBUaGlzIGlzIGEgdGltZWQgcG9sbGluZyBsb29wIHNvIGRvIG5vdCBzd2l0Y2ggdGhlIGV4cGxpY2l0CkBAIC05OTQsMTYgKzk5MywxMCBAQAogaXAyMnppbG9nX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQogewogCXN0cnVjdCB1YXJ0X2lwMjJ6aWxvZ19wb3J0ICp1cCA9ICZpcDIyemlsb2dfcG9ydF90YWJsZVtjb24tPmluZGV4XTsKLQlzdHJ1Y3Qgemlsb2dfY2hhbm5lbCAqY2hhbm5lbCA9IFpJTE9HX0NIQU5ORUxfRlJPTV9QT1JUKCZ1cC0+cG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIHMrKykgewotCQlpcDIyemlsb2dfcHV0X2NoYXIoY2hhbm5lbCwgKnMpOwotCQlpZiAoKnMgPT0gMTApCi0JCQlpcDIyemlsb2dfcHV0X2NoYXIoY2hhbm5lbCwgMTMpOwotCX0KKwl1YXJ0X2NvbnNvbGVfd3JpdGUoJnVwLT5wb3J0LCBzLCBjb3VudCwgaXAyMnppbG9nX3B1dF9jaGFyKTsKIAl1ZGVsYXkoMik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYyBiL2RyaXZlcnMvc2VyaWFsL20zMnJfc2lvLmMKaW5kZXggMjQyYTA0MS4uZTljMTBjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbTMycl9zaW8uYworKysgYi9kcml2ZXJzL3NlcmlhbC9tMzJyX3Npby5jCkBAIC0yNDgsMTcgKzI0OCwxNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1NFUklBTF9NMzJSX1BMRFNJTyAqLwogCi1zdGF0aWMgX0lOTElORV8gdW5zaWduZWQgaW50IHNpb19pbihzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXAsIGludCBvZmZzZXQpCitzdGF0aWMgdW5zaWduZWQgaW50IHNpb19pbihzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXAsIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIF9fc2lvX2luKHVwLT5wb3J0LmlvYmFzZSArIG9mZnNldCk7CiB9CiAKLXN0YXRpYyBfSU5MSU5FXyB2b2lkIHNpb19vdXQoc3RydWN0IHVhcnRfc2lvX3BvcnQgKnVwLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBzaW9fb3V0KHN0cnVjdCB1YXJ0X3Npb19wb3J0ICp1cCwgaW50IG9mZnNldCwgaW50IHZhbHVlKQogewogCV9fc2lvX291dCh2YWx1ZSwgdXAtPnBvcnQuaW9iYXNlICsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHVuc2lnbmVkIGludCBzZXJpYWxfaW4oc3RydWN0IHVhcnRfc2lvX3BvcnQgKnVwLCBpbnQgb2Zmc2V0KQorc3RhdGljIHVuc2lnbmVkIGludCBzZXJpYWxfaW4oc3RydWN0IHVhcnRfc2lvX3BvcnQgKnVwLCBpbnQgb2Zmc2V0KQogewogCWlmICghb2Zmc2V0KQogCQlyZXR1cm4gMDsKQEAgLTI2Niw4ICsyNjYsNyBAQAogCXJldHVybiBfX3Npb19pbihvZmZzZXQpOwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZAotc2VyaWFsX291dChzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXAsIGludCBvZmZzZXQsIGludCB2YWx1ZSkKK3N0YXRpYyB2b2lkIHNlcmlhbF9vdXQoc3RydWN0IHVhcnRfc2lvX3BvcnQgKnVwLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJaWYgKCFvZmZzZXQpCiAJCXJldHVybjsKQEAgLTMyNiw4ICszMjUsOCBAQAogCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCB1cC0+aWVyKTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQgcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXAsIGludCAqc3RhdHVzLAotCXN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXAsIGludCAqc3RhdHVzLAorCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+dHR5OwogCXVuc2lnbmVkIGNoYXIgY2g7CkBAIC00MDAsNyArMzk5LDcgQEAKIAl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXApCitzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqdXApCiB7CiAJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnVwLT5wb3J0LmluZm8tPnhtaXQ7CiAJaW50IGNvdW50OwpAQCAtMTAzOSw2ICsxMDM4LDE0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBtMzJyX3Npb19jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXN0cnVjdCB1YXJ0X3Npb19wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9zaW9fcG9ydCAqKXBvcnQ7CisKKwl3YWl0X2Zvcl94bWl0cih1cCk7CisJc2lvX291dCh1cCwgU0lPVFhCLCBjaCk7Cit9CisKIC8qCiAgKglQcmludCBhIHN0cmluZyB0byB0aGUgc2VyaWFsIHBvcnQgdHJ5aW5nIG5vdCB0byBkaXN0dXJiCiAgKglhbnkgcG9zc2libGUgcmVhbCB1c2Ugb2YgdGhlIHBvcnQuLi4KQEAgLTEwNTgsMjMgKzEwNjUsNyBAQAogCWllciA9IHNpb19pbih1cCwgU0lPVFJDUik7CiAJc2lvX291dCh1cCwgU0lPVFJDUiwgMCk7CiAKLQkvKgotCSAqCU5vdywgZG8gZWFjaCBjaGFyYWN0ZXIKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgcysrKSB7Ci0JCXdhaXRfZm9yX3htaXRyKHVwKTsKLQotCQkvKgotCQkgKglTZW5kIHRoZSBjaGFyYWN0ZXIgb3V0LgotCQkgKglJZiBhIExGLCBhbHNvIGRvIENSLi4uCi0JCSAqLwotCQlzaW9fb3V0KHVwLCBTSU9UWEIsICpzKTsKLQotCQlpZiAoKnMgPT0gMTApIHsKLQkJCXdhaXRfZm9yX3htaXRyKHVwKTsKLQkJCXNpb19vdXQodXAsIFNJT1RYQiwgMTMpOwotCQl9Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZSgmdXAtPnBvcnQsIHMsIGNvdW50LCBtMzJyX3Npb19jb25zb2xlX3B1dGNoYXIpOwogCiAJLyoKIAkgKglGaW5hbGx5LCB3YWl0IGZvciB0cmFuc21pdHRlciB0byBiZWNvbWUgZW1wdHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggNjFkZDE3ZC4uNjQ1OWVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTQwLDcgKzQwLDcgQEAKICAqIGFuZCBzbyBvbikuIFNvIHRoZSBQU0MxIGlzIG1hcHBlZCB0byAvZGV2L3R0eVBTQzAsIFBTQzIgdG8gL2Rldi90dHlQU0MxIGFuZAogICogc28gb24uIEJ1dCBiZSB3YXJuZWQsIGl0J3MgYW4gQUJTT0xVVEUgUkVRVUlSRU1FTlQgISBUaGlzIGlzIG5lZWRlZCBtYWlubHkKICAqIGZwciB0aGUgY29uc29sZSBjb2RlIDogd2l0aG91dCB0aGlzIDE6MSBtYXBwaW5nLCBhdCBlYXJseSBib290IHRpbWUsIHdoZW4gd2UKLSAqIGFyZSBwYXJzaW5nIHRoZSBrZXJuZWwgYXJncyBjb25zb2xlPXR0eVBTQz8sIHdlIHdvdWxkbid0IGtub3cgd2ljaCBQU0MgaXQKKyAqIGFyZSBwYXJzaW5nIHRoZSBrZXJuZWwgYXJncyBjb25zb2xlPXR0eVBTQz8sIHdlIHdvdWxkbid0IGtub3cgd2hpY2ggUFNDIGl0CiAgKiB3aWxsIGJlIG1hcHBlZCB0by4KICAqLwogCkBAIC02MDMsMTUgKzYwMywxNCBAQAogCQl1ZGVsYXkoMSk7CiAKIAkvKiBXcml0ZSBhbGwgdGhlIGNoYXJzICovCi0JZm9yICggaT0wIDsgaTxjb3VudCA7IGkrKyApIHsKLQkKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgcysrKSB7CisJCS8qIExpbmUgcmV0dXJuIGhhbmRsaW5nICovCisJCWlmICgqcyA9PSAnXG4nKQorCQkJb3V0XzgoJnBzYy0+bXBjNTJ4eF9wc2NfYnVmZmVyXzgsICdccicpOworCQkKIAkJLyogU2VuZCB0aGUgY2hhciAqLwogCQlvdXRfOCgmcHNjLT5tcGM1Mnh4X3BzY19idWZmZXJfOCwgKnMpOwogCi0JCS8qIExpbmUgcmV0dXJuIGhhbmRsaW5nICovCi0JCWlmICggKnMrKyA9PSAnXG4nICkKLQkJCW91dF84KCZwc2MtPm1wYzUyeHhfcHNjX2J1ZmZlcl84LCAnXHInKTsKLQkJCiAJCS8qIFdhaXQgdGhlIFRYIGJ1ZmZlciB0byBiZSBlbXB0eSAqLwogCQlqID0gMjAwMDA7CS8qIE1heGltdW0gd2FpdCAqLwkKIAkJd2hpbGUgKCEoaW5fYmUxNigmcHNjLT5tcGM1Mnh4X3BzY19zdGF0dXMpICYgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmMgYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKaW5kZXggMGNhODNhYy4uOTQ2ODE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBzYy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBkcml2ZXJzL3NlcmlhbC9tcHNjLmMKLSAqCiAgKiBHZW5lcmljIGRyaXZlciBmb3IgdGhlIE1QU0MgKFVBUlQgbW9kZSkgb24gTWFydmVsbCBwYXJ0cyAoZS5nLiwgR1Q2NDI0MCwKICAqIEdUNjQyNjAsIE1WNjQzNDAsIE1WNjQzNjAsIEdUOTYxMDAsIC4uLiApLgogICoKQEAgLTUyLDkgKzUwLDI2MyBAQAogICogNCkgQUZBSUNULCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoZSBjb250cm9sbGVyIC0tTUFHLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NUFNDX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQorI2RlZmluZSBTVVBQT1JUX1NZU1JRCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSAibXBzYy5oIgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9NUFNDX0NPTlNPTEUpICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQorI2RlZmluZSBTVVBQT1JUX1NZU1JRCisjZW5kaWYKKworI2RlZmluZQlNUFNDX05VTV9DVExSUwkJMgorCisvKgorICogRGVzY3JpcHRvcnMgYW5kIGJ1ZmZlcnMgbXVzdCBiZSBjYWNoZSBsaW5lIGFsaWduZWQuCisgKiBCdWZmZXJzIGxlbmd0aHMgbXVzdCBiZSBtdWx0aXBsZSBvZiBjYWNoZSBsaW5lIHNpemUuCisgKiBOdW1iZXIgb2YgVHggJiBSeCBkZXNjcmlwdG9ycyBtdXN0IGJlIHBvd2VycyBvZiAyLgorICovCisjZGVmaW5lCU1QU0NfUlhSX0VOVFJJRVMJMzIKKyNkZWZpbmUJTVBTQ19SWFJFX1NJWkUJCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkKKyNkZWZpbmUJTVBTQ19SWFJfU0laRQkJKE1QU0NfUlhSX0VOVFJJRVMgKiBNUFNDX1JYUkVfU0laRSkKKyNkZWZpbmUJTVBTQ19SWEJFX1NJWkUJCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkKKyNkZWZpbmUJTVBTQ19SWEJfU0laRQkJKE1QU0NfUlhSX0VOVFJJRVMgKiBNUFNDX1JYQkVfU0laRSkKKworI2RlZmluZQlNUFNDX1RYUl9FTlRSSUVTCTMyCisjZGVmaW5lCU1QU0NfVFhSRV9TSVpFCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpCisjZGVmaW5lCU1QU0NfVFhSX1NJWkUJCShNUFNDX1RYUl9FTlRSSUVTICogTVBTQ19UWFJFX1NJWkUpCisjZGVmaW5lCU1QU0NfVFhCRV9TSVpFCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpCisjZGVmaW5lCU1QU0NfVFhCX1NJWkUJCShNUFNDX1RYUl9FTlRSSUVTICogTVBTQ19UWEJFX1NJWkUpCisKKyNkZWZpbmUJTVBTQ19ETUFfQUxMT0NfU0laRQkoTVBTQ19SWFJfU0laRSArIE1QU0NfUlhCX1NJWkUgKwlcCisJCQkJTVBTQ19UWFJfU0laRSArIE1QU0NfVFhCX1NJWkUgKwkJXAorCQkJCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgLyogZm9yIGFsaWdubWVudCAqLykKKworLyogUnggYW5kIFR4IFJpbmcgZW50cnkgZGVzY3JpcHRvcnMgLS0gYXNzdW1lIGVudHJ5IHNpemUgaXMgPD0gY2FjaGVsaW5lIHNpemUgKi8KK3N0cnVjdCBtcHNjX3J4X2Rlc2MgeworCXUxNiBidWZzaXplOworCXUxNiBieXRlY250OworCXUzMiBjbWRzdGF0OworCXUzMiBsaW5rOworCXUzMiBidWZfcHRyOworfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisKK3N0cnVjdCBtcHNjX3R4X2Rlc2MgeworCXUxNiBieXRlY250OworCXUxNiBzaGFkb3c7CisJdTMyIGNtZHN0YXQ7CisJdTMyIGxpbms7CisJdTMyIGJ1Zl9wdHI7Cit9IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKKworLyoKKyAqIFNvbWUgcmVncyB0aGF0IGhhdmUgdGhlIGVycmF0dW0gdGhhdCB5b3UgY2FuJ3QgcmVhZCB0aGVtIGFyZSBhcmUgc2hhcmVkCisgKiBiZXR3ZWVuIHRoZSB0d28gTVBTQyBjb250cm9sbGVycy4gIFRoaXMgc3RydWN0IGNvbnRhaW5zIHRob3NlIHNoYXJlZCByZWdzLgorICovCitzdHJ1Y3QgbXBzY19zaGFyZWRfcmVncyB7CisJcGh5c19hZGRyX3QgbXBzY19yb3V0aW5nX2Jhc2VfcDsKKwlwaHlzX2FkZHJfdCBzZG1hX2ludHJfYmFzZV9wOworCisJdm9pZCBfX2lvbWVtICptcHNjX3JvdXRpbmdfYmFzZTsKKwl2b2lkIF9faW9tZW0gKnNkbWFfaW50cl9iYXNlOworCisJdTMyIE1QU0NfTVJSX207CisJdTMyIE1QU0NfUkNSUl9tOworCXUzMiBNUFNDX1RDUlJfbTsKKwl1MzIgU0RNQV9JTlRSX0NBVVNFX207CisJdTMyIFNETUFfSU5UUl9NQVNLX207Cit9OworCisvKiBUaGUgbWFpbiBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBtcHNjX3BvcnRfaW5mbyB7CisJc3RydWN0IHVhcnRfcG9ydCBwb3J0OwkvKiBPdmVybGF5IHVhcnRfcG9ydCBzdHJ1Y3R1cmUgKi8KKworCS8qIEludGVybmFsIGRyaXZlciBzdGF0ZSBmb3IgdGhpcyBjdGxyICovCisJdTggcmVhZHk7CisJdTggcmN2X2RhdGE7CisJdGNmbGFnX3QgY19pZmxhZzsJLyogc2F2ZSB0ZXJtaW9zLT5jX2lmbGFnICovCisJdGNmbGFnX3QgY19jZmxhZzsJLyogc2F2ZSB0ZXJtaW9zLT5jX2NmbGFnICovCisKKwkvKiBJbmZvIHBhc3NlZCBpbiBmcm9tIHBsYXRmb3JtICovCisJdTggbWlycm9yX3JlZ3M7CQkvKiBOZWVkIHRvIG1pcnJvciByZWdzPyAqLworCXU4IGNhY2hlX21nbXQ7CQkvKiBOZWVkIG1hbnVhbCBjYWNoZSBtZ210PyAqLworCXU4IGJyZ19jYW5fdHVuZTsJLyogQlJHIGhhcyBiYXVkIHR1bmluZz8gKi8KKwl1MzIgYnJnX2Nsa19zcmM7CisJdTE2IG1wc2NfbWF4X2lkbGU7CisJaW50IGRlZmF1bHRfYmF1ZDsKKwlpbnQgZGVmYXVsdF9iaXRzOworCWludCBkZWZhdWx0X3Bhcml0eTsKKwlpbnQgZGVmYXVsdF9mbG93OworCisJLyogUGh5c2ljYWwgYWRkcmVzc2VzIG9mIHZhcmlvdXMgYmxvY2tzIG9mIHJlZ2lzdGVycyAoZnJvbSBwbGF0Zm9ybSkgKi8KKwlwaHlzX2FkZHJfdCBtcHNjX2Jhc2VfcDsKKwlwaHlzX2FkZHJfdCBzZG1hX2Jhc2VfcDsKKwlwaHlzX2FkZHJfdCBicmdfYmFzZV9wOworCisJLyogVmlydHVhbCBhZGRyZXNzZXMgb2YgdmFyaW91cyBibG9ja3Mgb2YgcmVnaXN0ZXJzIChmcm9tIHBsYXRmb3JtKSAqLworCXZvaWQgX19pb21lbSAqbXBzY19iYXNlOworCXZvaWQgX19pb21lbSAqc2RtYV9iYXNlOworCXZvaWQgX19pb21lbSAqYnJnX2Jhc2U7CisKKwkvKiBEZXNjcmlwdG9yIHJpbmcgYW5kIGJ1ZmZlciBhbGxvY2F0aW9ucyAqLworCXZvaWQgKmRtYV9yZWdpb247CisJZG1hX2FkZHJfdCBkbWFfcmVnaW9uX3A7CisKKwlkbWFfYWRkcl90IHJ4cjsJCS8qIFJ4IGRlc2NyaXB0b3IgcmluZyAqLworCWRtYV9hZGRyX3QgcnhyX3A7CS8qIFBoeXMgYWRkciBvZiByeHIgKi8KKwl1OCAqcnhiOwkJLyogUnggUmluZyBJL08gYnVmICovCisJdTggKnJ4Yl9wOwkJLyogUGh5cyBhZGRyIG9mIHJ4YiAqLworCXUzMiByeHJfcG9zbjsJCS8qIEZpcnN0IGRlc2Mgdy8gUnggZGF0YSAqLworCisJZG1hX2FkZHJfdCB0eHI7CQkvKiBUeCBkZXNjcmlwdG9yIHJpbmcgKi8KKwlkbWFfYWRkcl90IHR4cl9wOwkvKiBQaHlzIGFkZHIgb2YgdHhyICovCisJdTggKnR4YjsJCS8qIFR4IFJpbmcgSS9PIGJ1ZiAqLworCXU4ICp0eGJfcDsJCS8qIFBoeXMgYWRkciBvZiB0eGIgKi8KKwlpbnQgdHhyX2hlYWQ7CQkvKiBXaGVyZSBuZXcgZGF0YSBnb2VzICovCisJaW50IHR4cl90YWlsOwkJLyogV2hlcmUgc2VudCBkYXRhIGNvbWVzIG9mZiAqLworCisJLyogTWlycm9yZWQgdmFsdWVzIG9mIHJlZ3Mgd2UgY2FuJ3QgcmVhZCAoaWYgJ21pcnJvcl9yZWdzJyBzZXQpICovCisJdTMyIE1QU0NfTVBDUl9tOworCXUzMiBNUFNDX0NIUl8xX207CisJdTMyIE1QU0NfQ0hSXzJfbTsKKwl1MzIgTVBTQ19DSFJfMTBfbTsKKwl1MzIgQlJHX0JDUl9tOworCXN0cnVjdCBtcHNjX3NoYXJlZF9yZWdzICpzaGFyZWRfcmVnczsKK307CisKKy8qIEhvb2tzIHRvIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgKi8KK2ludCBtcHNjX3BsYXRmb3JtX3JlZ2lzdGVyX2RyaXZlcih2b2lkKTsKK3ZvaWQgbXBzY19wbGF0Zm9ybV91bnJlZ2lzdGVyX2RyaXZlcih2b2lkKTsKKworLyogSG9va3MgYmFjayBpbiB0byBtcHNjIGNvbW1vbiB0byBiZSBjYWxsZWQgYnkgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSAqLworc3RydWN0IG1wc2NfcG9ydF9pbmZvICptcHNjX2RldmljZV9wcm9iZShpbnQgaW5kZXgpOworc3RydWN0IG1wc2NfcG9ydF9pbmZvICptcHNjX2RldmljZV9yZW1vdmUoaW50IGluZGV4KTsKKworLyogTWFpbiBNUFNDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgT2Zmc2V0cyAqLworI2RlZmluZQlNUFNDX01NQ1JMCQkJMHgwMDAwCisjZGVmaW5lCU1QU0NfTU1DUkgJCQkweDAwMDQKKyNkZWZpbmUJTVBTQ19NUENSCQkJMHgwMDA4CisjZGVmaW5lCU1QU0NfQ0hSXzEJCQkweDAwMGMKKyNkZWZpbmUJTVBTQ19DSFJfMgkJCTB4MDAxMAorI2RlZmluZQlNUFNDX0NIUl8zCQkJMHgwMDE0CisjZGVmaW5lCU1QU0NfQ0hSXzQJCQkweDAwMTgKKyNkZWZpbmUJTVBTQ19DSFJfNQkJCTB4MDAxYworI2RlZmluZQlNUFNDX0NIUl82CQkJMHgwMDIwCisjZGVmaW5lCU1QU0NfQ0hSXzcJCQkweDAwMjQKKyNkZWZpbmUJTVBTQ19DSFJfOAkJCTB4MDAyOAorI2RlZmluZQlNUFNDX0NIUl85CQkJMHgwMDJjCisjZGVmaW5lCU1QU0NfQ0hSXzEwCQkJMHgwMDMwCisjZGVmaW5lCU1QU0NfQ0hSXzExCQkJMHgwMDM0CisKKyNkZWZpbmUJTVBTQ19NUENSX0ZSWgkJCSgxIDw8IDkpCisjZGVmaW5lCU1QU0NfTVBDUl9DTF81CQkJMAorI2RlZmluZQlNUFNDX01QQ1JfQ0xfNgkJCTEKKyNkZWZpbmUJTVBTQ19NUENSX0NMXzcJCQkyCisjZGVmaW5lCU1QU0NfTVBDUl9DTF84CQkJMworI2RlZmluZQlNUFNDX01QQ1JfU0JMXzEJCQkwCisjZGVmaW5lCU1QU0NfTVBDUl9TQkxfMgkJCTEKKworI2RlZmluZQlNUFNDX0NIUl8yX1RFVgkJCSgxPDwxKQorI2RlZmluZQlNUFNDX0NIUl8yX1RBCQkJKDE8PDcpCisjZGVmaW5lCU1QU0NfQ0hSXzJfVFRDUwkJCSgxPDw5KQorI2RlZmluZQlNUFNDX0NIUl8yX1JFVgkJCSgxPDwxNykKKyNkZWZpbmUJTVBTQ19DSFJfMl9SQQkJCSgxPDwyMykKKyNkZWZpbmUJTVBTQ19DSFJfMl9DUkQJCQkoMTw8MjUpCisjZGVmaW5lCU1QU0NfQ0hSXzJfRUgJCQkoMTw8MzEpCisjZGVmaW5lCU1QU0NfQ0hSXzJfUEFSX09ERAkJMAorI2RlZmluZQlNUFNDX0NIUl8yX1BBUl9TUEFDRQkJMQorI2RlZmluZQlNUFNDX0NIUl8yX1BBUl9FVkVOCQkyCisjZGVmaW5lCU1QU0NfQ0hSXzJfUEFSX01BUksJCTMKKworLyogTVBTQyBTaWduYWwgUm91dGluZyAqLworI2RlZmluZQlNUFNDX01SUgkJCTB4MDAwMAorI2RlZmluZQlNUFNDX1JDUlIJCQkweDAwMDQKKyNkZWZpbmUJTVBTQ19UQ1JSCQkJMHgwMDA4CisKKy8qIFNlcmlhbCBETUEgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCisjZGVmaW5lCVNETUFfU0RDCQkJMHgwMDAwCisjZGVmaW5lCVNETUFfU0RDTQkJCTB4MDAwOAorI2RlZmluZQlTRE1BX1JYX0RFU0MJCQkweDA4MDAKKyNkZWZpbmUJU0RNQV9SWF9CVUZfUFRSCQkJMHgwODA4CisjZGVmaW5lCVNETUFfU0NSRFAJCQkweDA4MTAKKyNkZWZpbmUJU0RNQV9UWF9ERVNDCQkJMHgwYzAwCisjZGVmaW5lCVNETUFfU0NURFAJCQkweDBjMTAKKyNkZWZpbmUJU0RNQV9TRlREUAkJCTB4MGMxNAorCisjZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX1BFCQkoMTw8MCkKKyNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfQ0RMCQkoMTw8MSkKKyNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfRlIJCSgxPDwzKQorI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9PUgkJKDE8PDYpCisjZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX0JSCQkoMTw8OSkKKyNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfTUkJCSgxPDwxMCkKKyNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfQQkJKDE8PDExKQorI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9BTQkJKDE8PDEyKQorI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9DVAkJKDE8PDEzKQorI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9DCQkoMTw8MTQpCisjZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX0VTCQkoMTw8MTUpCisjZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX0wJCSgxPDwxNikKKyNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfRgkJKDE8PDE3KQorI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9QCQkoMTw8MTgpCisjZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX0VJCQkoMTw8MjMpCisjZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX08JCSgxPDwzMSkKKworI2RlZmluZSBTRE1BX0RFU0NfREZMVAkJCShTRE1BX0RFU0NfQ01EU1RBVF9PIHwJXAorCQkJCQlTRE1BX0RFU0NfQ01EU1RBVF9FSSkKKworI2RlZmluZQlTRE1BX1NEQ19SRlQJCQkoMTw8MCkKKyNkZWZpbmUJU0RNQV9TRENfU0ZNCQkJKDE8PDEpCisjZGVmaW5lCVNETUFfU0RDX0JMTVIJCQkoMTw8NikKKyNkZWZpbmUJU0RNQV9TRENfQkxNVAkJCSgxPDw3KQorI2RlZmluZQlTRE1BX1NEQ19QT1ZSCQkJKDE8PDgpCisjZGVmaW5lCVNETUFfU0RDX1JJRkIJCQkoMTw8OSkKKworI2RlZmluZQlTRE1BX1NEQ01fRVJECQkJKDE8PDcpCisjZGVmaW5lCVNETUFfU0RDTV9BUgkJCSgxPDwxNSkKKyNkZWZpbmUJU0RNQV9TRENNX1NURAkJCSgxPDwxNikKKyNkZWZpbmUJU0RNQV9TRENNX1RYRAkJCSgxPDwyMykKKyNkZWZpbmUJU0RNQV9TRENNX0FUCQkJKDE8PDMxKQorCisjZGVmaW5lCVNETUFfMF9DQVVTRV9SWEJVRgkJKDE8PDApCisjZGVmaW5lCVNETUFfMF9DQVVTRV9SWEVSUgkJKDE8PDEpCisjZGVmaW5lCVNETUFfMF9DQVVTRV9UWEJVRgkJKDE8PDIpCisjZGVmaW5lCVNETUFfMF9DQVVTRV9UWEVORAkJKDE8PDMpCisjZGVmaW5lCVNETUFfMV9DQVVTRV9SWEJVRgkJKDE8PDgpCisjZGVmaW5lCVNETUFfMV9DQVVTRV9SWEVSUgkJKDE8PDkpCisjZGVmaW5lCVNETUFfMV9DQVVTRV9UWEJVRgkJKDE8PDEwKQorI2RlZmluZQlTRE1BXzFfQ0FVU0VfVFhFTkQJCSgxPDwxMSkKKworI2RlZmluZQlTRE1BX0NBVVNFX1JYX01BU0sJKFNETUFfMF9DQVVTRV9SWEJVRiB8IFNETUFfMF9DQVVTRV9SWEVSUiB8IFwKKwlTRE1BXzFfQ0FVU0VfUlhCVUYgfCBTRE1BXzFfQ0FVU0VfUlhFUlIpCisjZGVmaW5lCVNETUFfQ0FVU0VfVFhfTUFTSwkoU0RNQV8wX0NBVVNFX1RYQlVGIHwgU0RNQV8wX0NBVVNFX1RYRU5EIHwgXAorCVNETUFfMV9DQVVTRV9UWEJVRiB8IFNETUFfMV9DQVVTRV9UWEVORCkKKworLyogU0RNQSBJbnRlcnJ1cHQgcmVnaXN0ZXJzICovCisjZGVmaW5lCVNETUFfSU5UUl9DQVVTRQkJCTB4MDAwMAorI2RlZmluZQlTRE1BX0lOVFJfTUFTSwkJCTB4MDA4MAorCisvKiBCYXVkIFJhdGUgR2VuZXJhdG9yIEludGVyZmFjZSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJQlJHX0JDUgkJCQkweDAwMDAKKyNkZWZpbmUJQlJHX0JUUgkJCQkweDAwMDQKIAogLyoKICAqIERlZmluZSBob3cgdGhpcyBkcml2ZXIgaXMga25vd24gdG8gdGhlIG91dHNpZGUgKHdlJ3ZlIGJlZW4gYXNzaWduZWQgYQpAQCAtMTE2NSw3ICsxNDE3LDcgQEAKIAkJCWZsYWcgPSBTQV9TSElSUTsKIAogCQlpZiAocmVxdWVzdF9pcnEocGktPnBvcnQuaXJxLCBtcHNjX3NkbWFfaW50ciwgZmxhZywKLQkJCQkibXBzYy9zZG1hIiwgcGkpKQorCQkJCSJtcHNjLXNkbWEiLCBwaSkpCiAJCQlwcmludGsoS0VSTl9FUlIgIk1QU0M6IENhbid0IGdldCBTRE1BIElSUSAlZFxuIiwKIAkJCSAgICAgICBwaS0+cG9ydC5pcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmggYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OGRiY2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBzYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL3NlcmlhbC9tcHNjLmgKLSAqCi0gKiBBdXRob3I6IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBtdmlzdGEuY29tPgotICoKLSAqIDIwMDQgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCi0gKi8KLQotI2lmbmRlZglfX01QU0NfSF9fCi0jZGVmaW5lCV9fTVBTQ19IX18KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbXY2NDN4eC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX01QU0NfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCi0jZGVmaW5lIFNVUFBPUlRfU1lTUlEKLSNlbmRpZgotCi0jZGVmaW5lCU1QU0NfTlVNX0NUTFJTCQkyCi0KLS8qCi0gKiBEZXNjcmlwdG9ycyBhbmQgYnVmZmVycyBtdXN0IGJlIGNhY2hlIGxpbmUgYWxpZ25lZC4KLSAqIEJ1ZmZlcnMgbGVuZ3RocyBtdXN0IGJlIG11bHRpcGxlIG9mIGNhY2hlIGxpbmUgc2l6ZS4KLSAqIE51bWJlciBvZiBUeCAmIFJ4IGRlc2NyaXB0b3JzIG11c3QgYmUgcG93ZXJzIG9mIDIuCi0gKi8KLSNkZWZpbmUJTVBTQ19SWFJfRU5UUklFUwkzMgotI2RlZmluZQlNUFNDX1JYUkVfU0laRQkJZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKQotI2RlZmluZQlNUFNDX1JYUl9TSVpFCQkoTVBTQ19SWFJfRU5UUklFUyAqIE1QU0NfUlhSRV9TSVpFKQotI2RlZmluZQlNUFNDX1JYQkVfU0laRQkJZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKQotI2RlZmluZQlNUFNDX1JYQl9TSVpFCQkoTVBTQ19SWFJfRU5UUklFUyAqIE1QU0NfUlhCRV9TSVpFKQotCi0jZGVmaW5lCU1QU0NfVFhSX0VOVFJJRVMJMzIKLSNkZWZpbmUJTVBTQ19UWFJFX1NJWkUJCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkKLSNkZWZpbmUJTVBTQ19UWFJfU0laRQkJKE1QU0NfVFhSX0VOVFJJRVMgKiBNUFNDX1RYUkVfU0laRSkKLSNkZWZpbmUJTVBTQ19UWEJFX1NJWkUJCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkKLSNkZWZpbmUJTVBTQ19UWEJfU0laRQkJKE1QU0NfVFhSX0VOVFJJRVMgKiBNUFNDX1RYQkVfU0laRSkKLQotI2RlZmluZQlNUFNDX0RNQV9BTExPQ19TSVpFCShNUFNDX1JYUl9TSVpFICsgTVBTQ19SWEJfU0laRSArCVwKLQkJCQlNUFNDX1RYUl9TSVpFICsgTVBTQ19UWEJfU0laRSArCQlcCi0JCQkJZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKSAvKiBmb3IgYWxpZ25tZW50ICovKQotCi0vKiBSeCBhbmQgVHggUmluZyBlbnRyeSBkZXNjcmlwdG9ycyAtLSBhc3N1bWUgZW50cnkgc2l6ZSBpcyA8PSBjYWNoZWxpbmUgc2l6ZSAqLwotc3RydWN0IG1wc2NfcnhfZGVzYyB7Ci0JdTE2IGJ1ZnNpemU7Ci0JdTE2IGJ5dGVjbnQ7Ci0JdTMyIGNtZHN0YXQ7Ci0JdTMyIGxpbms7Ci0JdTMyIGJ1Zl9wdHI7Ci19IF9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQotc3RydWN0IG1wc2NfdHhfZGVzYyB7Ci0JdTE2IGJ5dGVjbnQ7Ci0JdTE2IHNoYWRvdzsKLQl1MzIgY21kc3RhdDsKLQl1MzIgbGluazsKLQl1MzIgYnVmX3B0cjsKLX0gX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCi0vKgotICogU29tZSByZWdzIHRoYXQgaGF2ZSB0aGUgZXJyYXR1bSB0aGF0IHlvdSBjYW4ndCByZWFkIHRoZW0gYXJlIGFyZSBzaGFyZWQKLSAqIGJldHdlZW4gdGhlIHR3byBNUFNDIGNvbnRyb2xsZXJzLiAgVGhpcyBzdHJ1Y3QgY29udGFpbnMgdGhvc2Ugc2hhcmVkIHJlZ3MuCi0gKi8KLXN0cnVjdCBtcHNjX3NoYXJlZF9yZWdzIHsKLQlwaHlzX2FkZHJfdCBtcHNjX3JvdXRpbmdfYmFzZV9wOwotCXBoeXNfYWRkcl90IHNkbWFfaW50cl9iYXNlX3A7Ci0KLQl2b2lkIF9faW9tZW0gKm1wc2Nfcm91dGluZ19iYXNlOwotCXZvaWQgX19pb21lbSAqc2RtYV9pbnRyX2Jhc2U7Ci0KLQl1MzIgTVBTQ19NUlJfbTsKLQl1MzIgTVBTQ19SQ1JSX207Ci0JdTMyIE1QU0NfVENSUl9tOwotCXUzMiBTRE1BX0lOVFJfQ0FVU0VfbTsKLQl1MzIgU0RNQV9JTlRSX01BU0tfbTsKLX07Ci0KLS8qIFRoZSBtYWluIGRyaXZlciBkYXRhIHN0cnVjdHVyZSAqLwotc3RydWN0IG1wc2NfcG9ydF9pbmZvIHsKLQlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CS8qIE92ZXJsYXkgdWFydF9wb3J0IHN0cnVjdHVyZSAqLwotCi0JLyogSW50ZXJuYWwgZHJpdmVyIHN0YXRlIGZvciB0aGlzIGN0bHIgKi8KLQl1OCByZWFkeTsKLQl1OCByY3ZfZGF0YTsKLQl0Y2ZsYWdfdCBjX2lmbGFnOwkvKiBzYXZlIHRlcm1pb3MtPmNfaWZsYWcgKi8KLQl0Y2ZsYWdfdCBjX2NmbGFnOwkvKiBzYXZlIHRlcm1pb3MtPmNfY2ZsYWcgKi8KLQotCS8qIEluZm8gcGFzc2VkIGluIGZyb20gcGxhdGZvcm0gKi8KLQl1OCBtaXJyb3JfcmVnczsJCS8qIE5lZWQgdG8gbWlycm9yIHJlZ3M/ICovCi0JdTggY2FjaGVfbWdtdDsJCS8qIE5lZWQgbWFudWFsIGNhY2hlIG1nbXQ/ICovCi0JdTggYnJnX2Nhbl90dW5lOwkvKiBCUkcgaGFzIGJhdWQgdHVuaW5nPyAqLwotCXUzMiBicmdfY2xrX3NyYzsKLQl1MTYgbXBzY19tYXhfaWRsZTsKLQlpbnQgZGVmYXVsdF9iYXVkOwotCWludCBkZWZhdWx0X2JpdHM7Ci0JaW50IGRlZmF1bHRfcGFyaXR5OwotCWludCBkZWZhdWx0X2Zsb3c7Ci0KLQkvKiBQaHlzaWNhbCBhZGRyZXNzZXMgb2YgdmFyaW91cyBibG9ja3Mgb2YgcmVnaXN0ZXJzIChmcm9tIHBsYXRmb3JtKSAqLwotCXBoeXNfYWRkcl90IG1wc2NfYmFzZV9wOwotCXBoeXNfYWRkcl90IHNkbWFfYmFzZV9wOwotCXBoeXNfYWRkcl90IGJyZ19iYXNlX3A7Ci0KLQkvKiBWaXJ0dWFsIGFkZHJlc3NlcyBvZiB2YXJpb3VzIGJsb2NrcyBvZiByZWdpc3RlcnMgKGZyb20gcGxhdGZvcm0pICovCi0Jdm9pZCBfX2lvbWVtICptcHNjX2Jhc2U7Ci0Jdm9pZCBfX2lvbWVtICpzZG1hX2Jhc2U7Ci0Jdm9pZCBfX2lvbWVtICpicmdfYmFzZTsKLQotCS8qIERlc2NyaXB0b3IgcmluZyBhbmQgYnVmZmVyIGFsbG9jYXRpb25zICovCi0Jdm9pZCAqZG1hX3JlZ2lvbjsKLQlkbWFfYWRkcl90IGRtYV9yZWdpb25fcDsKLQotCWRtYV9hZGRyX3QgcnhyOwkJLyogUnggZGVzY3JpcHRvciByaW5nICovCi0JZG1hX2FkZHJfdCByeHJfcDsJLyogUGh5cyBhZGRyIG9mIHJ4ciAqLwotCXU4ICpyeGI7CQkvKiBSeCBSaW5nIEkvTyBidWYgKi8KLQl1OCAqcnhiX3A7CQkvKiBQaHlzIGFkZHIgb2YgcnhiICovCi0JdTMyIHJ4cl9wb3NuOwkJLyogRmlyc3QgZGVzYyB3LyBSeCBkYXRhICovCi0KLQlkbWFfYWRkcl90IHR4cjsJCS8qIFR4IGRlc2NyaXB0b3IgcmluZyAqLwotCWRtYV9hZGRyX3QgdHhyX3A7CS8qIFBoeXMgYWRkciBvZiB0eHIgKi8KLQl1OCAqdHhiOwkJLyogVHggUmluZyBJL08gYnVmICovCi0JdTggKnR4Yl9wOwkJLyogUGh5cyBhZGRyIG9mIHR4YiAqLwotCWludCB0eHJfaGVhZDsJCS8qIFdoZXJlIG5ldyBkYXRhIGdvZXMgKi8KLQlpbnQgdHhyX3RhaWw7CQkvKiBXaGVyZSBzZW50IGRhdGEgY29tZXMgb2ZmICovCi0KLQkvKiBNaXJyb3JlZCB2YWx1ZXMgb2YgcmVncyB3ZSBjYW4ndCByZWFkIChpZiAnbWlycm9yX3JlZ3MnIHNldCkgKi8KLQl1MzIgTVBTQ19NUENSX207Ci0JdTMyIE1QU0NfQ0hSXzFfbTsKLQl1MzIgTVBTQ19DSFJfMl9tOwotCXUzMiBNUFNDX0NIUl8xMF9tOwotCXUzMiBCUkdfQkNSX207Ci0Jc3RydWN0IG1wc2Nfc2hhcmVkX3JlZ3MgKnNoYXJlZF9yZWdzOwotfTsKLQotLyogSG9va3MgdG8gcGxhdGZvcm0tc3BlY2lmaWMgY29kZSAqLwotaW50IG1wc2NfcGxhdGZvcm1fcmVnaXN0ZXJfZHJpdmVyKHZvaWQpOwotdm9pZCBtcHNjX3BsYXRmb3JtX3VucmVnaXN0ZXJfZHJpdmVyKHZvaWQpOwotCi0vKiBIb29rcyBiYWNrIGluIHRvIG1wc2MgY29tbW9uIHRvIGJlIGNhbGxlZCBieSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlICovCi1zdHJ1Y3QgbXBzY19wb3J0X2luZm8gKm1wc2NfZGV2aWNlX3Byb2JlKGludCBpbmRleCk7Ci1zdHJ1Y3QgbXBzY19wb3J0X2luZm8gKm1wc2NfZGV2aWNlX3JlbW92ZShpbnQgaW5kZXgpOwotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICoJTXVsdGktUHJvdG9jb2wgU2VyaWFsIENvbnRyb2xsZXIgSW50ZXJmYWNlIFJlZ2lzdGVycwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi0KLS8qIE1haW4gQ29uZmlndXJhdGlubyBSZWdpc3RlciBPZmZzZXRzICovCi0jZGVmaW5lCU1QU0NfTU1DUkwJCQkweDAwMDAKLSNkZWZpbmUJTVBTQ19NTUNSSAkJCTB4MDAwNAotI2RlZmluZQlNUFNDX01QQ1IJCQkweDAwMDgKLSNkZWZpbmUJTVBTQ19DSFJfMQkJCTB4MDAwYwotI2RlZmluZQlNUFNDX0NIUl8yCQkJMHgwMDEwCi0jZGVmaW5lCU1QU0NfQ0hSXzMJCQkweDAwMTQKLSNkZWZpbmUJTVBTQ19DSFJfNAkJCTB4MDAxOAotI2RlZmluZQlNUFNDX0NIUl81CQkJMHgwMDFjCi0jZGVmaW5lCU1QU0NfQ0hSXzYJCQkweDAwMjAKLSNkZWZpbmUJTVBTQ19DSFJfNwkJCTB4MDAyNAotI2RlZmluZQlNUFNDX0NIUl84CQkJMHgwMDI4Ci0jZGVmaW5lCU1QU0NfQ0hSXzkJCQkweDAwMmMKLSNkZWZpbmUJTVBTQ19DSFJfMTAJCQkweDAwMzAKLSNkZWZpbmUJTVBTQ19DSFJfMTEJCQkweDAwMzQKLQotI2RlZmluZQlNUFNDX01QQ1JfRlJaCQkJKDEgPDwgOSkKLSNkZWZpbmUJTVBTQ19NUENSX0NMXzUJCQkwCi0jZGVmaW5lCU1QU0NfTVBDUl9DTF82CQkJMQotI2RlZmluZQlNUFNDX01QQ1JfQ0xfNwkJCTIKLSNkZWZpbmUJTVBTQ19NUENSX0NMXzgJCQkzCi0jZGVmaW5lCU1QU0NfTVBDUl9TQkxfMQkJCTAKLSNkZWZpbmUJTVBTQ19NUENSX1NCTF8yCQkJMQotCi0jZGVmaW5lCU1QU0NfQ0hSXzJfVEVWCQkJKDE8PDEpCi0jZGVmaW5lCU1QU0NfQ0hSXzJfVEEJCQkoMTw8NykKLSNkZWZpbmUJTVBTQ19DSFJfMl9UVENTCQkJKDE8PDkpCi0jZGVmaW5lCU1QU0NfQ0hSXzJfUkVWCQkJKDE8PDE3KQotI2RlZmluZQlNUFNDX0NIUl8yX1JBCQkJKDE8PDIzKQotI2RlZmluZQlNUFNDX0NIUl8yX0NSRAkJCSgxPDwyNSkKLSNkZWZpbmUJTVBTQ19DSFJfMl9FSAkJCSgxPDwzMSkKLSNkZWZpbmUJTVBTQ19DSFJfMl9QQVJfT0RECQkwCi0jZGVmaW5lCU1QU0NfQ0hSXzJfUEFSX1NQQUNFCQkxCi0jZGVmaW5lCU1QU0NfQ0hSXzJfUEFSX0VWRU4JCTIKLSNkZWZpbmUJTVBTQ19DSFJfMl9QQVJfTUFSSwkJMwotCi0vKiBNUFNDIFNpZ25hbCBSb3V0aW5nICovCi0jZGVmaW5lCU1QU0NfTVJSCQkJMHgwMDAwCi0jZGVmaW5lCU1QU0NfUkNSUgkJCTB4MDAwNAotI2RlZmluZQlNUFNDX1RDUlIJCQkweDAwMDgKLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCVNlcmlhbCBETUEgQ29udHJvbGxlciBJbnRlcmZhY2UgUmVnaXN0ZXJzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotI2RlZmluZQlTRE1BX1NEQwkJCTB4MDAwMAotI2RlZmluZQlTRE1BX1NEQ00JCQkweDAwMDgKLSNkZWZpbmUJU0RNQV9SWF9ERVNDCQkJMHgwODAwCi0jZGVmaW5lCVNETUFfUlhfQlVGX1BUUgkJCTB4MDgwOAotI2RlZmluZQlTRE1BX1NDUkRQCQkJMHgwODEwCi0jZGVmaW5lCVNETUFfVFhfREVTQwkJCTB4MGMwMAotI2RlZmluZQlTRE1BX1NDVERQCQkJMHgwYzEwCi0jZGVmaW5lCVNETUFfU0ZURFAJCQkweDBjMTQKLQotI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9QRQkJKDE8PDApCi0jZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX0NETAkJKDE8PDEpCi0jZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX0ZSCQkoMTw8MykKLSNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfT1IJCSgxPDw2KQotI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9CUgkJKDE8PDkpCi0jZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX01JCQkoMTw8MTApCi0jZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX0EJCSgxPDwxMSkKLSNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfQU0JCSgxPDwxMikKLSNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfQ1QJCSgxPDwxMykKLSNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfQwkJKDE8PDE0KQotI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9FUwkJKDE8PDE1KQotI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9MCQkoMTw8MTYpCi0jZGVmaW5lCVNETUFfREVTQ19DTURTVEFUX0YJCSgxPDwxNykKLSNkZWZpbmUJU0RNQV9ERVNDX0NNRFNUQVRfUAkJKDE8PDE4KQotI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9FSQkJKDE8PDIzKQotI2RlZmluZQlTRE1BX0RFU0NfQ01EU1RBVF9PCQkoMTw8MzEpCi0KLSNkZWZpbmUgU0RNQV9ERVNDX0RGTFQJCQkoU0RNQV9ERVNDX0NNRFNUQVRfTyB8CVwKLQkJCQkJU0RNQV9ERVNDX0NNRFNUQVRfRUkpCi0KLSNkZWZpbmUJU0RNQV9TRENfUkZUCQkJKDE8PDApCi0jZGVmaW5lCVNETUFfU0RDX1NGTQkJCSgxPDwxKQotI2RlZmluZQlTRE1BX1NEQ19CTE1SCQkJKDE8PDYpCi0jZGVmaW5lCVNETUFfU0RDX0JMTVQJCQkoMTw8NykKLSNkZWZpbmUJU0RNQV9TRENfUE9WUgkJCSgxPDw4KQotI2RlZmluZQlTRE1BX1NEQ19SSUZCCQkJKDE8PDkpCi0KLSNkZWZpbmUJU0RNQV9TRENNX0VSRAkJCSgxPDw3KQotI2RlZmluZQlTRE1BX1NEQ01fQVIJCQkoMTw8MTUpCi0jZGVmaW5lCVNETUFfU0RDTV9TVEQJCQkoMTw8MTYpCi0jZGVmaW5lCVNETUFfU0RDTV9UWEQJCQkoMTw8MjMpCi0jZGVmaW5lCVNETUFfU0RDTV9BVAkJCSgxPDwzMSkKLQotI2RlZmluZQlTRE1BXzBfQ0FVU0VfUlhCVUYJCSgxPDwwKQotI2RlZmluZQlTRE1BXzBfQ0FVU0VfUlhFUlIJCSgxPDwxKQotI2RlZmluZQlTRE1BXzBfQ0FVU0VfVFhCVUYJCSgxPDwyKQotI2RlZmluZQlTRE1BXzBfQ0FVU0VfVFhFTkQJCSgxPDwzKQotI2RlZmluZQlTRE1BXzFfQ0FVU0VfUlhCVUYJCSgxPDw4KQotI2RlZmluZQlTRE1BXzFfQ0FVU0VfUlhFUlIJCSgxPDw5KQotI2RlZmluZQlTRE1BXzFfQ0FVU0VfVFhCVUYJCSgxPDwxMCkKLSNkZWZpbmUJU0RNQV8xX0NBVVNFX1RYRU5ECQkoMTw8MTEpCi0KLSNkZWZpbmUJU0RNQV9DQVVTRV9SWF9NQVNLCShTRE1BXzBfQ0FVU0VfUlhCVUYgfCBTRE1BXzBfQ0FVU0VfUlhFUlIgfCBcCi0JU0RNQV8xX0NBVVNFX1JYQlVGIHwgU0RNQV8xX0NBVVNFX1JYRVJSKQotI2RlZmluZQlTRE1BX0NBVVNFX1RYX01BU0sJKFNETUFfMF9DQVVTRV9UWEJVRiB8IFNETUFfMF9DQVVTRV9UWEVORCB8IFwKLQlTRE1BXzFfQ0FVU0VfVFhCVUYgfCBTRE1BXzFfQ0FVU0VfVFhFTkQpCi0KLS8qIFNETUEgSW50ZXJydXB0IHJlZ2lzdGVycyAqLwotI2RlZmluZQlTRE1BX0lOVFJfQ0FVU0UJCQkweDAwMDAKLSNkZWZpbmUJU0RNQV9JTlRSX01BU0sJCQkweDAwODAKLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqCUJhdWQgUmF0ZSBHZW5lcmF0b3IgSW50ZXJmYWNlIFJlZ2lzdGVycwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi0KLSNkZWZpbmUJQlJHX0JDUgkJCQkweDAwMDAKLSNkZWZpbmUJQlJHX0JUUgkJCQkweDAwMDQKLQotI2VuZGlmCQkJCS8qIF9fTVBTQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYwppbmRleCA5YjdlZDU4Li41MTNmZjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCkBAIC0xOTE2LDYgKzE5MTYsMTYgQEAKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX0NPTlNPTEUKIAorc3RhdGljIHZvaWQgcG16X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJc3RydWN0IHVhcnRfcG1hY19wb3J0ICp1YXAgPSAoc3RydWN0IHVhcnRfcG1hY19wb3J0ICopcG9ydDsKKworCS8qIFdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gZW1wdHkuICovCisJd2hpbGUgKChyZWFkX3pzcmVnKHVhcCwgUjApICYgVHhfQlVGX0VNUCkgPT0gMCkKKwkJdWRlbGF5KDUpOworCXdyaXRlX3pzZGF0YSh1YXAsIGNoKTsKK30KKwogLyoKICAqIFByaW50IGEgc3RyaW5nIHRvIHRoZSBzZXJpYWwgcG9ydCB0cnlpbmcgbm90IHRvIGRpc3R1cmIKICAqIGFueSBwb3NzaWJsZSByZWFsIHVzZSBvZiB0aGUgcG9ydC4uLgpAQCAtMTkyNCw3ICsxOTM0LDYgQEAKIHsKIAlzdHJ1Y3QgdWFydF9wbWFjX3BvcnQgKnVhcCA9ICZwbXpfcG9ydHNbY29uLT5pbmRleF07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKIAogCWlmIChaU19JU19BU0xFRVAodWFwKSkKIAkJcmV0dXJuOwpAQCAtMTkzNCwxNyArMTk0Myw3IEBACiAJd3JpdGVfenNyZWcodWFwLCBSMSwgdWFwLT5jdXJyZWdzWzFdICYgflR4SU5UX0VOQUIpOwogCXdyaXRlX3pzcmVnKHVhcCwgUjUsIHVhcC0+Y3VycmVnc1s1XSB8IFR4RU5BQkxFIHwgUlRTIHwgRFRSKTsKIAotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCS8qIFdhaXQgZm9yIHRoZSB0cmFuc21pdCBidWZmZXIgdG8gZW1wdHkuICovCi0JCXdoaWxlICgocmVhZF96c3JlZyh1YXAsIFIwKSAmIFR4X0JVRl9FTVApID09IDApCi0JCQl1ZGVsYXkoNSk7Ci0JCXdyaXRlX3pzZGF0YSh1YXAsIHNbaV0pOwotCQlpZiAoc1tpXSA9PSAxMCkgewotCQkJd2hpbGUgKChyZWFkX3pzcmVnKHVhcCwgUjApICYgVHhfQlVGX0VNUCkgPT0gMCkKLQkJCQl1ZGVsYXkoNSk7Ci0JCQl3cml0ZV96c2RhdGEodWFwLCBSMTMpOwotCQl9Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZSgmdWFwLT5wb3J0LCBzLCBjb3VudCwgcG16X2NvbnNvbGVfcHV0Y2hhcik7CiAKIAkvKiBSZXN0b3JlIHRoZSB2YWx1ZXMgaW4gdGhlIHJlZ2lzdGVycy4gKi8KIAl3cml0ZV96c3JlZyh1YXAsIFIxLCB1YXAtPmN1cnJlZ3NbMV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCAxMDUzNWYwLi43N2Q0NTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtNjE5LDYgKzYxOSwxNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2VyaWFsX3B4YV9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXN0cnVjdCB1YXJ0X3B4YV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF9weGFfcG9ydCAqKXBvcnQ7CisKKwl3YWl0X2Zvcl94bWl0cih1cCk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgY2gpOworfQorCiAvKgogICogUHJpbnQgYSBzdHJpbmcgdG8gdGhlIHNlcmlhbCBwb3J0IHRyeWluZyBub3QgdG8gZGlzdHVyYgogICogYW55IHBvc3NpYmxlIHJlYWwgdXNlIG9mIHRoZSBwb3J0Li4uCkBAIC02MzAsNyArNjM4LDYgQEAKIHsKIAlzdHJ1Y3QgdWFydF9weGFfcG9ydCAqdXAgPSAmc2VyaWFsX3B4YV9wb3J0c1tjby0+aW5kZXhdOwogCXVuc2lnbmVkIGludCBpZXI7Ci0JaW50IGk7CiAKIAkvKgogCSAqCUZpcnN0IHNhdmUgdGhlIElFUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMKQEAgLTYzOCwyMiArNjQ1LDcgQEAKIAlpZXIgPSBzZXJpYWxfaW4odXAsIFVBUlRfSUVSKTsKIAlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgVUFSVF9JRVJfVVVFKTsKIAotCS8qCi0JICoJTm93LCBkbyBlYWNoIGNoYXJhY3RlcgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBzKyspIHsKLQkJd2FpdF9mb3JfeG1pdHIodXApOwotCi0JCS8qCi0JCSAqCVNlbmQgdGhlIGNoYXJhY3RlciBvdXQuCi0JCSAqCUlmIGEgTEYsIGFsc28gZG8gQ1IuLi4KLQkJICovCi0JCXNlcmlhbF9vdXQodXAsIFVBUlRfVFgsICpzKTsKLQkJaWYgKCpzID09IDEwKSB7Ci0JCQl3YWl0X2Zvcl94bWl0cih1cCk7Ci0JCQlzZXJpYWxfb3V0KHVwLCBVQVJUX1RYLCAxMyk7Ci0JCX0KLQl9CisJdWFydF9jb25zb2xlX3dyaXRlKCZ1cC0+cG9ydCwgcywgY291bnQsIHNlcmlhbF9weGFfY29uc29sZV9wdXRjaGFyKTsKIAogCS8qCiAJICoJRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggNzQxMGUwOS4uZjVhYWM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpAQCAtMTA2Niw2ICsxMDY2LDggQEAKIAlwb3J0LT5tYXBiYXNlCT0gcmVzLT5zdGFydDsKIAlwb3J0LT5tZW1iYXNlCT0gUzNDMjRYWF9WQV9VQVJUICsgKHJlcy0+c3RhcnQgLSBTM0MyNFhYX1BBX1VBUlQpOwogCXBvcnQtPmlycQk9IHBsYXRmb3JtX2dldF9pcnEocGxhdGRldiwgMCk7CisJaWYgKHBvcnQtPmlycSA8IDApCisJCXBvcnQtPmlycSA9IDA7CiAKIAlvdXJwb3J0LT5jbGsJPSBjbGtfZ2V0KCZwbGF0ZGV2LT5kZXYsICJ1YXJ0Iik7CiAKQEAgLTE1ODQsMjUgKzE1ODYsMTkgQEAKIH0KIAogc3RhdGljIHZvaWQKK3MzYzI0eHhfc2VyaWFsX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJdW5zaWduZWQgaW50IHVmY29uID0gcmRfcmVnbChjb25zX3VhcnQsIFMzQzI0MTBfVUZDT04pOworCXdoaWxlICghczNjMjR4eF9zZXJpYWxfY29uc29sZV90eHJkeShwb3J0LCB1ZmNvbikpCisJCWJhcnJpZXIoKTsKKwl3cl9yZWdiKGNvbnNfdWFydCwgUzNDMjQxMF9VVFhILCBjaCk7Cit9CisKK3N0YXRpYyB2b2lkCiBzM2MyNHh4X3NlcmlhbF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKIAkJCSAgICAgdW5zaWduZWQgaW50IGNvdW50KQogewotCWludCBpOwotCXVuc2lnbmVkIGludCB1ZmNvbiA9IHJkX3JlZ2woY29uc191YXJ0LCBTM0MyNDEwX1VGQ09OKTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXdoaWxlICghczNjMjR4eF9zZXJpYWxfY29uc29sZV90eHJkeShjb25zX3VhcnQsIHVmY29uKSkKLQkJCWJhcnJpZXIoKTsKLQotCQl3cl9yZWdiKGNvbnNfdWFydCwgUzNDMjQxMF9VVFhILCBzW2ldKTsKLQotCQlpZiAoc1tpXSA9PSAnXG4nKSB7Ci0JCQl3aGlsZSAoIXMzYzI0eHhfc2VyaWFsX2NvbnNvbGVfdHhyZHkoY29uc191YXJ0LCB1ZmNvbikpCi0JCQkJYmFycmllcigpOwotCi0JCQl3cl9yZWdiKGNvbnNfdWFydCwgUzNDMjQxMF9VVFhILCAnXHInKTsKLQkJfQotCX0KKwl1YXJ0X2NvbnNvbGVfd3JpdGUoY29uc191YXJ0LCBzLCBjb3VudCwgczNjMjR4eF9zZXJpYWxfY29uc29sZV9wdXRjaGFyKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCmluZGV4IDJjMDBiODYuLmMyZDkwNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCkBAIC02ODksNiArNjg5LDE0IEBACiAKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfU0ExMTAwX0NPTlNPTEUKK3N0YXRpYyB2b2lkIHNhMTEwMF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSAoc3RydWN0IHNhMTEwMF9wb3J0ICopcG9ydDsKKworCXdoaWxlICghKFVBUlRfR0VUX1VUU1IxKHNwb3J0KSAmIFVUU1IxX1RORikpCisJCWJhcnJpZXIoKTsKKwlVQVJUX1BVVF9DSEFSKHNwb3J0LCBjaCk7Cit9CiAKIC8qCiAgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRlcmluZwpAQCAtNjk3LDcgKzcwNSw3IEBACiBzYTExMDBfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gJnNhMTEwMF9wb3J0c1tjby0+aW5kZXhdOwotCXVuc2lnbmVkIGludCBvbGRfdXRjcjMsIHN0YXR1cywgaTsKKwl1bnNpZ25lZCBpbnQgb2xkX3V0Y3IzLCBzdGF0dXM7CiAKIAkvKgogCSAqCUZpcnN0LCBzYXZlIFVUQ1IzIGFuZCB0aGVuIGRpc2FibGUgaW50ZXJydXB0cwpAQCAtNzA2LDIxICs3MTQsNyBAQAogCVVBUlRfUFVUX1VUQ1IzKHNwb3J0LCAob2xkX3V0Y3IzICYgfihVVENSM19SSUUgfCBVVENSM19USUUpKSB8CiAJCQkJVVRDUjNfVFhFKTsKIAotCS8qCi0JICoJTm93LCBkbyBlYWNoIGNoYXJhY3RlcgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWRvIHsKLQkJCXN0YXR1cyA9IFVBUlRfR0VUX1VUU1IxKHNwb3J0KTsKLQkJfSB3aGlsZSAoIShzdGF0dXMgJiBVVFNSMV9UTkYpKTsKLQkJVUFSVF9QVVRfQ0hBUihzcG9ydCwgc1tpXSk7Ci0JCWlmIChzW2ldID09ICdcbicpIHsKLQkJCWRvIHsKLQkJCQlzdGF0dXMgPSBVQVJUX0dFVF9VVFNSMShzcG9ydCk7Ci0JCQl9IHdoaWxlICghKHN0YXR1cyAmIFVUU1IxX1RORikpOwotCQkJVUFSVF9QVVRfQ0hBUihzcG9ydCwgJ1xyJyk7Ci0JCX0KLQl9CisJdWFydF9jb25zb2xlX3dyaXRlKCZzcG9ydC0+cG9ydCwgcywgY291bnQsIHNhMTEwMF9jb25zb2xlX3B1dGNoYXIpOwogCiAJLyoKIAkgKglGaW5hbGx5LCB3YWl0IGZvciB0cmFuc21pdHRlciB0byBiZWNvbWUgZW1wdHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDk1ZmI0OTMuLmZjZDc3NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtNzEsNiArNzEsMTEgQEAKIHZvaWQgdWFydF93cml0ZV93YWtldXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdWFydF9pbmZvICppbmZvID0gcG9ydC0+aW5mbzsKKwkvKgorCSAqIFRoaXMgbWVhbnMgeW91IGNhbGxlZCB0aGlzIGZ1bmN0aW9uIF9hZnRlcl8gdGhlIHBvcnQgd2FzCisJICogY2xvc2VkLiAgTm8gY29va2llIGZvciB5b3UuCisJICovCisJQlVHX09OKCFpbmZvKTsKIAl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50bGV0KTsKIH0KIApAQCAtNDcxLDE0ICs0NzYsMjYgQEAKIH0KIAogc3RhdGljIGludAotdWFydF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLCBpbnQgY291bnQpCit1YXJ0X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OwotCXN0cnVjdCBjaXJjX2J1ZiAqY2lyYyA9ICZzdGF0ZS0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqY2lyYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjLCByZXQgPSAwOwogCisJLyoKKwkgKiBUaGlzIG1lYW5zIHlvdSBjYWxsZWQgdGhpcyBmdW5jdGlvbiBfYWZ0ZXJfIHRoZSBwb3J0IHdhcworCSAqIGNsb3NlZC4gIE5vIGNvb2tpZSBmb3IgeW91LgorCSAqLworCWlmICghc3RhdGUgfHwgIXN0YXRlLT5pbmZvKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUwzSExUOworCX0KKworCXBvcnQgPSBzdGF0ZS0+cG9ydDsKKwljaXJjID0gJnN0YXRlLT5pbmZvLT54bWl0OworCiAJaWYgKCFjaXJjLT5idWYpCiAJCXJldHVybiAwOwogCkBAIC01MjEsNiArNTM4LDE1IEBACiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT5wb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwkvKgorCSAqIFRoaXMgbWVhbnMgeW91IGNhbGxlZCB0aGlzIGZ1bmN0aW9uIF9hZnRlcl8gdGhlIHBvcnQgd2FzCisJICogY2xvc2VkLiAgTm8gY29va2llIGZvciB5b3UuCisJICovCisJaWYgKCFzdGF0ZSB8fCAhc3RhdGUtPmluZm8pIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKwogCURQUklOVEsoInVhcnRfZmx1c2hfYnVmZmVyKCVkKSBjYWxsZWRcbiIsIHR0eS0+aW5kZXgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKQEAgLTE3MjksNiArMTc1NSwyNyBAQAogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEUKIC8qCisgKgl1YXJ0X2NvbnNvbGVfd3JpdGUgLSB3cml0ZSBhIGNvbnNvbGUgbWVzc2FnZSB0byBhIHNlcmlhbCBwb3J0CisgKglAcG9ydDogdGhlIHBvcnQgdG8gd3JpdGUgdGhlIG1lc3NhZ2UKKyAqCUBzOiBhcnJheSBvZiBjaGFyYWN0ZXJzCisgKglAY291bnQ6IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHN0cmluZyB0byB3cml0ZQorICoJQHdyaXRlOiBmdW5jdGlvbiB0byB3cml0ZSBjaGFyYWN0ZXIgdG8gcG9ydAorICovCit2b2lkIHVhcnRfY29uc29sZV93cml0ZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBjb25zdCBjaGFyICpzLAorCQkJdW5zaWduZWQgaW50IGNvdW50LAorCQkJdm9pZCAoKnB1dGNoYXIpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50KSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBzKyspIHsKKwkJaWYgKCpzID09ICdcbicpCisJCQlwdXRjaGFyKHBvcnQsICdccicpOworCQlwdXRjaGFyKHBvcnQsICpzKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1YXJ0X2NvbnNvbGVfd3JpdGUpOworCisvKgogICoJQ2hlY2sgd2hldGhlciBhbiBpbnZhbGlkIHVhcnQgbnVtYmVyIGhhcyBiZWVuIHNwZWNpZmllZCwgYW5kCiAgKglpZiBzbywgc2VhcmNoIGZvciB0aGUgZmlyc3QgYXZhaWxhYmxlIHBvcnQgdGhhdCBkb2VzIGhhdmUKICAqCWNvbnNvbGUgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCmluZGV4IDA0MTg2ZWEuLmFhNTIxYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwpAQCAtNTQzLDYgKzU0MywxMiBAQAogI2Vsc2UKICMgZGVmaW5lIExIN0E0MFhfQ09OU09MRSAmbGg3YTQweF9jb25zb2xlCiAKK3N0YXRpYyB2b2lkIGxoN2E0MHh1YXJ0X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJd2hpbGUgKFVSKHBvcnQsIFVBUlRfUl9TVEFUVVMpICYgblR4UmR5KQorCQk7CisJVVIocG9ydCwgVUFSVF9SX0RBVEEpID0gY2g7Cit9CiAKIHN0YXRpYyB2b2lkIGxoN2E0MHh1YXJ0X2NvbnNvbGVfd3JpdGUgKHN0cnVjdCBjb25zb2xlKiBjbywKIAkJCQkgICAgICAgY29uc3QgY2hhciogcywKQEAgLTU1NiwxNiArNTYyLDcgQEAKIAlVUiAocG9ydCwgVUFSVF9SX0lOVEVOKSA9IDA7CQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJQklUX1NFVCAocG9ydCwgVUFSVF9SX0NPTiwgVUFSVEVOIHwgU0lSRElTKTsgLyogRW5hYmxlIFVBUlQgKi8KIAotCWZvciAoOyBjb3VudC0tID4gMDsgKytzKSB7Ci0JCXdoaWxlIChVUiAocG9ydCwgVUFSVF9SX1NUQVRVUykgJiBuVHhSZHkpCi0JCQk7Ci0JCVVSIChwb3J0LCBVQVJUX1JfREFUQSkgPSAqczsKLQkJaWYgKCpzID09ICdcbicpIHsKLQkJCXdoaWxlICgoVVIgKHBvcnQsIFVBUlRfUl9TVEFUVVMpICYgVHhCdXN5KSkKLQkJCQk7Ci0JCQlVUiAocG9ydCwgVUFSVF9SX0RBVEEpID0gJ1xyJzsKLQkJfQotCX0KKwl1YXJ0X2NvbnNvbGVfd3JpdGUocG9ydCwgcywgY291bnQsIGxoN2E0MHh1YXJ0X2NvbnNvbGVfcHV0Y2hhcik7CiAKIAkJCQkvKiBXYWl0IHVudGlsIGFsbCBjaGFyYWN0ZXJzIGFyZSBzZW50ICovCiAJd2hpbGUgKFVSIChwb3J0LCBVQVJUX1JfU1RBVFVTKSAmIFR4QnVzeSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCmluZGV4IGVlOThhODYuLmI4NDhiN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwpAQCAtMzMsNiArMzMsMTAgQEAKICAqCTEuMDIJQ2xlYW51cC4gKGltcG9ydCA4MjUwLmMgY2hhbmdlcykKICAqCTEuMDMJRml4IGxvdy1sYXRlbmN5IG1vZGUuIChpbXBvcnQgODI1MC5jIGNoYW5nZXMpCiAgKgkxLjA0CVJlbW92ZSB1c2FnZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9ucywgY2xlYW51cC4KKyAqCTEuMDUJTW9yZSBzdHJpY3QgY2hlY2sgaW4gdmVyaWZ5X3BvcnQuICBDbGVhbnVwLgorICoJMS4wNglEbyBub3QgaW5zZXJ0IGEgY2hhciBjYXVzZWQgcHJldmlvdXMgb3ZlcnJ1bi4KKyAqCQlGaXggc29tZSBzcGluX2xvY2tzLgorICoJCURvIG5vdCBjYWxsIHVhcnRfYWRkX29uZV9wb3J0IGZvciBhYnNlbnQgcG9ydHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIApAQCAtNTcsNyArNjEsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotc3RhdGljIGNoYXIgKnNlcmlhbF92ZXJzaW9uID0gIjEuMDQiOworc3RhdGljIGNoYXIgKnNlcmlhbF92ZXJzaW9uID0gIjEuMDYiOwogc3RhdGljIGNoYXIgKnNlcmlhbF9uYW1lID0gIlRYMzkvNDkgU2VyaWFsIGRyaXZlciI7CiAKICNkZWZpbmUgUEFTU19MSU1JVAkyNTYKQEAgLTk0LDYgKzk4LDggQEAKICNkZWZpbmUgVUFSVF9OUiAgNAogI2VuZGlmCiAKKyNkZWZpbmUgSElHSF9CSVRTX09GRlNFVAkoKHNpemVvZihsb25nKS1zaXplb2YoaW50KSkqOCkKKwogc3RydWN0IHVhcnRfdHh4OV9wb3J0IHsKIAlzdHJ1Y3QgdWFydF9wb3J0CXBvcnQ7CiAKQEAgLTIxMCw3ICsyMTYsNyBAQAogewogCXN3aXRjaCAodXAtPnBvcnQuaW90eXBlKSB7CiAJZGVmYXVsdDoKLQkJcmV0dXJuICoodm9sYXRpbGUgdTMyICopKHVwLT5wb3J0Lm1lbWJhc2UgKyBvZmZzZXQpOworCQlyZXR1cm4gX19yYXdfcmVhZGwodXAtPnBvcnQubWVtYmFzZSArIG9mZnNldCk7CiAJY2FzZSBVUElPX1BPUlQ6CiAJCXJldHVybiBpbmwodXAtPnBvcnQuaW9iYXNlICsgb2Zmc2V0KTsKIAl9CkBAIC0yMjEsNyArMjI3LDcgQEAKIHsKIAlzd2l0Y2ggKHVwLT5wb3J0LmlvdHlwZSkgewogCWRlZmF1bHQ6Ci0JCSoodm9sYXRpbGUgdTMyICopKHVwLT5wb3J0Lm1lbWJhc2UgKyBvZmZzZXQpID0gdmFsdWU7CisJCV9fcmF3X3dyaXRlbCh2YWx1ZSwgdXAtPnBvcnQubWVtYmFzZSArIG9mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgVVBJT19QT1JUOgogCQlvdXRsKHZhbHVlLCB1cC0+cG9ydC5pb2Jhc2UgKyBvZmZzZXQpOwpAQCAtMjU5LDM0ICsyNjUsMTkgQEAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJc2lvX21hc2sodXAsIFRYWDlfU0lESUNSLCBUWFg5X1NJRElDUl9USUUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiAJc2lvX3NldCh1cCwgVFhYOV9TSURJQ1IsIFRYWDlfU0lESUNSX1RJRSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCXVwLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgJj0gflRYWDlfU0lESVNSX1JESVM7Ci0jaWYgMAotCXNpb19tYXNrKHVwLCBUWFg5X1NJRElDUiwgVFhYOV9TSURJQ1JfUklFKTsKLSNlbmRpZgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfZW5hYmxlX21zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0zMDIsMTIgKzI5MywxNiBAQAogCXVuc2lnbmVkIGludCBkaXNyID0gKnN0YXR1czsKIAlpbnQgbWF4X2NvdW50ID0gMjU2OwogCWNoYXIgZmxhZzsKKwl1bnNpZ25lZCBpbnQgbmV4dF9pZ25vcmVfc3RhdHVzX21hc2s7CiAKIAlkbyB7CiAJCWNoID0gc2lvX2luKHVwLCBUWFg5X1NJUkZJRk8pOwogCQlmbGFnID0gVFRZX05PUk1BTDsKIAkJdXAtPnBvcnQuaWNvdW50LnJ4Kys7CiAKKwkJLyogbWFzayBvdXQgUkZETl9NQVNLIGJpdCBhZGRlZCBieSBwcmV2aW91cyBvdmVycnVuICovCisJCW5leHRfaWdub3JlX3N0YXR1c19tYXNrID0KKwkJCXVwLT5wb3J0Lmlnbm9yZV9zdGF0dXNfbWFzayAmIH5UWFg5X1NJRElTUl9SRkROX01BU0s7CiAJCWlmICh1bmxpa2VseShkaXNyICYgKFRYWDlfU0lESVNSX1VCUksgfCBUWFg5X1NJRElTUl9VUEVSIHwKIAkJCQkgICAgIFRYWDlfU0lESVNSX1VGRVIgfCBUWFg5X1NJRElTUl9VT0VSKSkpIHsKIAkJCS8qCkBAIC0zMjgsOCArMzIzLDE3IEBACiAJCQkJdXAtPnBvcnQuaWNvdW50LnBhcml0eSsrOwogCQkJZWxzZSBpZiAoZGlzciAmIFRYWDlfU0lESVNSX1VGRVIpCiAJCQkJdXAtPnBvcnQuaWNvdW50LmZyYW1lKys7Ci0JCQlpZiAoZGlzciAmIFRYWDlfU0lESVNSX1VPRVIpCisJCQlpZiAoZGlzciAmIFRYWDlfU0lESVNSX1VPRVIpIHsKIAkJCQl1cC0+cG9ydC5pY291bnQub3ZlcnJ1bisrOworCQkJCS8qCisJCQkJICogVGhlIHJlY2VpdmVyIHJlYWQgYnVmZmVyIHN0aWxsIGhvbGQKKwkJCQkgKiBhIGNoYXIgd2hpY2ggY2F1c2VkIG92ZXJydW4uCisJCQkJICogSWdub3JlIG5leHQgY2hhciBieSBhZGRpbmcgUkZETl9NQVNLCisJCQkJICogdG8gaWdub3JlX3N0YXR1c19tYXNrIHRlbXBvcmFyaWx5LgorCQkJCSAqLworCQkJCW5leHRfaWdub3JlX3N0YXR1c19tYXNrIHw9CisJCQkJCVRYWDlfU0lESVNSX1JGRE5fTUFTSzsKKwkJCX0KIAogCQkJLyoKIAkJCSAqIE1hc2sgb2ZmIGNvbmRpdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGluZ29yZWQuCkBAIC0zNDksNiArMzUzLDcgQEAKIAkJdWFydF9pbnNlcnRfY2hhcigmdXAtPnBvcnQsIGRpc3IsIFRYWDlfU0lESVNSX1VPRVIsIGNoLCBmbGFnKTsKIAogCWlnbm9yZV9jaGFyOgorCQl1cC0+cG9ydC5pZ25vcmVfc3RhdHVzX21hc2sgPSBuZXh0X2lnbm9yZV9zdGF0dXNfbWFzazsKIAkJZGlzciA9IHNpb19pbih1cCwgVFhYOV9TSURJU1IpOwogCX0gd2hpbGUgKCEoZGlzciAmIFRYWDlfU0lESVNSX1VWQUxJRCkgJiYgKG1heF9jb3VudC0tID4gMCkpOwogCXNwaW5fdW5sb2NrKCZ1cC0+cG9ydC5sb2NrKTsKQEAgLTQ1MCwxNCArNDU1LDExIEBACiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1jdHJsKQogewogCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIAlpZiAobWN0cmwgJiBUSU9DTV9SVFMpCiAJCXNpb19tYXNrKHVwLCBUWFg5X1NJRkxDUiwgVFhYOV9TSUZMQ1JfUlRTU0MpOwogCWVsc2UKIAkJc2lvX3NldCh1cCwgVFhYOV9TSUZMQ1IsIFRYWDlfU0lGTENSX1JUU1NDKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X2JyZWFrX2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCkBAIC03ODQsOCArNzg2LDE0IEBACiBzdGF0aWMgaW50CiBzZXJpYWxfdHh4OV92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyKQogewotCWlmIChzZXItPmlycSA8IDAgfHwKLQkgICAgc2VyLT5iYXVkX2Jhc2UgPCA5NjAwIHx8IHNlci0+dHlwZSAhPSBQT1JUX1RYWDkpCisJdW5zaWduZWQgbG9uZyBuZXdfcG9ydCA9IHNlci0+cG9ydDsKKwlpZiAoSElHSF9CSVRTX09GRlNFVCkKKwkJbmV3X3BvcnQgKz0gKHVuc2lnbmVkIGxvbmcpc2VyLT5wb3J0X2hpZ2ggPDwgSElHSF9CSVRTX09GRlNFVDsKKwlpZiAoc2VyLT50eXBlICE9IHBvcnQtPnR5cGUgfHwKKwkgICAgc2VyLT5pcnEgIT0gcG9ydC0+aXJxIHx8CisJICAgIHNlci0+aW9fdHlwZSAhPSBwb3J0LT5pb3R5cGUgfHwKKwkgICAgbmV3X3BvcnQgIT0gcG9ydC0+aW9iYXNlIHx8CisJICAgICh1bnNpZ25lZCBsb25nKXNlci0+aW9tZW1fYmFzZSAhPSBwb3J0LT5tYXBiYXNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KQEAgLTgyNyw3ICs4MzUsOCBAQAogCiAJCXVwLT5wb3J0LmxpbmUgPSBpOwogCQl1cC0+cG9ydC5vcHMgPSAmc2VyaWFsX3R4eDlfcG9wczsKLQkJdWFydF9hZGRfb25lX3BvcnQoZHJ2LCAmdXAtPnBvcnQpOworCQlpZiAodXAtPnBvcnQuaW9iYXNlIHx8IHVwLT5wb3J0Lm1hcGJhc2UpCisJCQl1YXJ0X2FkZF9vbmVfcG9ydChkcnYsICZ1cC0+cG9ydCk7CiAJfQogfQogCkBAIC04NTQsNiArODYzLDE0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKworCXdhaXRfZm9yX3htaXRyKHVwKTsKKwlzaW9fb3V0KHVwLCBUWFg5X1NJVEZJRk8sIGNoKTsKK30KKwogLyoKICAqCVByaW50IGEgc3RyaW5nIHRvIHRoZSBzZXJpYWwgcG9ydCB0cnlpbmcgbm90IHRvIGRpc3R1cmIKICAqCWFueSBwb3NzaWJsZSByZWFsIHVzZSBvZiB0aGUgcG9ydC4uLgpAQCAtODY1LDcgKzg4Miw2IEBACiB7CiAJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9ICZzZXJpYWxfdHh4OV9wb3J0c1tjby0+aW5kZXhdOwogCXVuc2lnbmVkIGludCBpZXIsIGZsY3I7Ci0JaW50IGk7CiAKIAkvKgogCSAqCUZpcnN0IHNhdmUgdGhlIFVFUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMKQEAgLTg3OSwyMiArODk1LDcgQEAKIAlpZiAoISh1cC0+cG9ydC5mbGFncyAmIFVQRl9DT05TX0ZMT1cpICYmIChmbGNyICYgVFhYOV9TSUZMQ1JfVEVTKSkKIAkJc2lvX291dCh1cCwgVFhYOV9TSUZMQ1IsIGZsY3IgJiB+VFhYOV9TSUZMQ1JfVEVTKTsKIAotCS8qCi0JICoJTm93LCBkbyBlYWNoIGNoYXJhY3RlcgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBzKyspIHsKLQkJd2FpdF9mb3JfeG1pdHIodXApOwotCi0JCS8qCi0JCSAqCVNlbmQgdGhlIGNoYXJhY3RlciBvdXQuCi0JCSAqCUlmIGEgTEYsIGFsc28gZG8gQ1IuLi4KLQkJICovCi0JCXNpb19vdXQodXAsIFRYWDlfU0lURklGTywgKnMpOwotCQlpZiAoKnMgPT0gMTApIHsKLQkJCXdhaXRfZm9yX3htaXRyKHVwKTsKLQkJCXNpb19vdXQodXAsIFRYWDlfU0lURklGTywgMTMpOwotCQl9Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZSgmdXAtPnBvcnQsIHMsIGNvdW50LCBzZXJpYWxfdHh4OV9jb25zb2xlX3B1dGNoYXIpOwogCiAJLyoKIAkgKglGaW5hbGx5LCB3YWl0IGZvciB0cmFuc21pdHRlciB0byBiZWNvbWUgZW1wdHkKQEAgLTkyNywxMSArOTI4LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKgotCSAqIFRlbXBvcmFyeSBmaXguCi0JICovCi0Jc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwotCi0JLyoKIAkgKglEaXNhYmxlIFVBUlQgaW50ZXJydXB0cywgc2V0IERUUiBhbmQgUlRTIGhpZ2gKIAkgKglhbmQgc2V0IHNwZWVkLgogCSAqLwpAQCAtMTA0MSwxMSArMTAzNywxMCBAQAogCW11dGV4X2xvY2soJnNlcmlhbF90eHg5X211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKSB7CiAJCXVhcnQgPSAmc2VyaWFsX3R4eDlfcG9ydHNbaV07Ci0JCWlmICh1YXJ0LT5wb3J0LnR5cGUgPT0gUE9SVF9VTktOT1dOKQorCQlpZiAoISh1YXJ0LT5wb3J0LmlvYmFzZSB8fCB1YXJ0LT5wb3J0Lm1hcGJhc2UpKQogCQkJYnJlYWs7CiAJfQogCWlmIChpIDwgVUFSVF9OUikgewotCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc2VyaWFsX3R4eDlfcmVnLCAmdWFydC0+cG9ydCk7CiAJCXVhcnQtPnBvcnQuaW9iYXNlID0gcG9ydC0+aW9iYXNlOwogCQl1YXJ0LT5wb3J0Lm1lbWJhc2UgPSBwb3J0LT5tZW1iYXNlOwogCQl1YXJ0LT5wb3J0LmlycSAgICAgID0gcG9ydC0+aXJxOwpAQCAtMTA4MCw5ICsxMDc1LDggQEAKIAl1YXJ0LT5wb3J0LnR5cGUgPSBQT1JUX1VOS05PV047CiAJdWFydC0+cG9ydC5pb2Jhc2UgPSAwOwogCXVhcnQtPnBvcnQubWFwYmFzZSA9IDA7Ci0JdWFydC0+cG9ydC5tZW1iYXNlID0gMDsKKwl1YXJ0LT5wb3J0Lm1lbWJhc2UgPSBOVUxMOwogCXVhcnQtPnBvcnQuZGV2ID0gTlVMTDsKLQl1YXJ0X2FkZF9vbmVfcG9ydCgmc2VyaWFsX3R4eDlfcmVnLCAmdWFydC0+cG9ydCk7CiAJbXV0ZXhfdW5sb2NrKCZzZXJpYWxfdHh4OV9tdXRleCk7CiB9CiAKQEAgLTExOTgsOCArMTE5MiwxMSBAQAogI2lmZGVmIEVOQUJMRV9TRVJJQUxfVFhYOV9QQ0kKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF90eHg5X3BjaV9kcml2ZXIpOwogI2VuZGlmCi0JZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykKLQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNlcmlhbF90eHg5X3JlZywgJnNlcmlhbF90eHg5X3BvcnRzW2ldLnBvcnQpOworCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SOyBpKyspIHsKKwkJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9ICZzZXJpYWxfdHh4OV9wb3J0c1tpXTsKKwkJaWYgKHVwLT5wb3J0LmlvYmFzZSB8fCB1cC0+cG9ydC5tYXBiYXNlKQorCQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNlcmlhbF90eHg5X3JlZywgJnVwLT5wb3J0KTsKKwl9CiAKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfdHh4OV9yZWcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jIGIvZHJpdmVycy9zZXJpYWwvc25fY29uc29sZS5jCmluZGV4IDQzZTY3ZDYuLjYwZWE0YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NuX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zbl9jb25zb2xlLmMKQEAgLTgyMCw3ICs4MjAsNyBAQAogCWludCByZXR2YWw7CiAKIAlpZiAoIWlhNjRfcGxhdGZvcm1faXMoInNuMiIpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIDA7CiAKIAlwcmludGsoS0VSTl9JTkZPICJzbl9jb25zb2xlOiBDb25zb2xlIGRyaXZlciBpbml0XG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3VuaHYuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEzNzgwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bmh2LmMKQEAgLTAsMCArMSw1NTAgQEAKKy8qIHN1bmh2LmM6IFNlcmlhbCBkcml2ZXIgZm9yIFNVTjRWIGh5cGVydmlzb3IgY29uc29sZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KKyNpbmNsdWRlIDxhc20vdmRldi5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQorI2RlZmluZSBTVVBQT1JUX1NZU1JRCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlICJzdW5jb3JlLmgiCisKKyNkZWZpbmUgQ09OX0JSRUFLCSgobG9uZyktMSkKKyNkZWZpbmUgQ09OX0hVUAkJKChsb25nKS0yKQorCitzdGF0aWMgaW5saW5lIGxvbmcgaHlwZXJ2aXNvcl9jb25fZ2V0Y2hhcihsb25nICpzdGF0dXMpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBmdW5jIGFzbSgiJW81Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBhcmcwIGFzbSgiJW8wIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBhcmcxIGFzbSgiJW8xIik7CisKKwlmdW5jID0gSFZfRkFTVF9DT05TX0dFVENIQVI7CisJYXJnMCA9IDA7CisJYXJnMSA9IDA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInRhCSU2IgorCQkJICAgICA6ICI9JnIiIChmdW5jKSwgIj0mciIgKGFyZzApLCAiPSZyIiAoYXJnMSkKKwkJCSAgICAgOiAiMCIgKGZ1bmMpLCAiMSIgKGFyZzApLCAiMiIgKGFyZzEpLAorCQkJICAgICAgICJpIiAoSFZfRkFTVF9UUkFQKSk7CisKKwkqc3RhdHVzID0gYXJnMDsKKworCXJldHVybiAobG9uZykgYXJnMTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGh5cGVydmlzb3JfY29uX3B1dGNoYXIobG9uZyBjaCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGZ1bmMgYXNtKCIlbzUiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGFyZzAgYXNtKCIlbzAiKTsKKworCWZ1bmMgPSBIVl9GQVNUX0NPTlNfUFVUQ0hBUjsKKwlhcmcwID0gY2g7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInRhCSU0IgorCQkJICAgICA6ICI9JnIiIChmdW5jKSwgIj0mciIgKGFyZzApCisJCQkgICAgIDogIjAiIChmdW5jKSwgIjEiIChhcmcwKSwgImkiIChIVl9GQVNUX1RSQVApKTsKKworCXJldHVybiAobG9uZykgYXJnMDsKK30KKworI2RlZmluZSBJR05PUkVfQlJFQUsJMHgxCisjZGVmaW5lIElHTk9SRV9BTEwJMHgyCisKK3N0YXRpYyBpbnQgaHVuZ191cCA9IDA7CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X3N0cnVjdCAqcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gTlVMTDsKKwlpbnQgc2F3X2NvbnNvbGVfYnJrID0gMDsKKwlpbnQgbGltaXQgPSAxMDAwMDsKKworCWlmIChwb3J0LT5pbmZvICE9IE5VTEwpCQkvKiBVbm9wZW5lZCBzZXJpYWwgY29uc29sZSAqLworCQl0dHkgPSBwb3J0LT5pbmZvLT50dHk7CisKKwl3aGlsZSAobGltaXQtLSA+IDApIHsKKwkJbG9uZyBzdGF0dXM7CisJCWxvbmcgYyA9IGh5cGVydmlzb3JfY29uX2dldGNoYXIoJnN0YXR1cyk7CisJCXVuc2lnbmVkIGNoYXIgZmxhZzsKKworCQlpZiAoc3RhdHVzID09IEhWX0VXT1VMREJMT0NLKQorCQkJYnJlYWs7CisKKwkJaWYgKGMgPT0gQ09OX0JSRUFLKSB7CisJCQlpZiAodWFydF9oYW5kbGVfYnJlYWsocG9ydCkpCisJCQkJY29udGludWU7CisJCQlzYXdfY29uc29sZV9icmsgPSAxOworCQkJYyA9IDA7CisJCX0KKworCQlpZiAoYyA9PSBDT05fSFVQKSB7CisJCQlodW5nX3VwID0gMTsKKwkJCXVhcnRfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgMCk7CisJCX0gZWxzZSBpZiAoaHVuZ191cCkgeworCQkJaHVuZ191cCA9IDA7CisJCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKHBvcnQsIDEpOworCQl9CisKKwkJaWYgKHR0eSA9PSBOVUxMKSB7CisJCQl1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKHBvcnQsIGMsIHJlZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQlmbGFnID0gVFRZX05PUk1BTDsKKwkJcG9ydC0+aWNvdW50LnJ4Kys7CisJCWlmIChjID09IENPTl9CUkVBSykgeworCQkJcG9ydC0+aWNvdW50LmJyaysrOworCQkJaWYgKHVhcnRfaGFuZGxlX2JyZWFrKHBvcnQpKQorCQkJCWNvbnRpbnVlOworCQkJZmxhZyA9IFRUWV9CUkVBSzsKKwkJfQorCisJCWlmICh1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKHBvcnQsIGMsIHJlZ3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKChwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJiBJR05PUkVfQUxMKSB8fAorCQkgICAgKChwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJiBJR05PUkVfQlJFQUspICYmCisJCSAgICAgKGMgPT0gQ09OX0JSRUFLKSkpCisJCQljb250aW51ZTsKKworCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGMsIGZsYWcpOworCX0KKworCWlmIChzYXdfY29uc29sZV9icmspCisJCXN1bl9kb19icmVhaygpOworCisJcmV0dXJuIHR0eTsKK30KKworc3RhdGljIHZvaWQgdHJhbnNtaXRfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQ7CisKKwlpZiAoIXBvcnQtPmluZm8pCisJCXJldHVybjsKKworCXhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZChwb3J0KSkKKwkJcmV0dXJuOworCisJd2hpbGUgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKKwkJbG9uZyBzdGF0dXMgPSBoeXBlcnZpc29yX2Nvbl9wdXRjaGFyKHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSk7CisKKwkJaWYgKHN0YXR1cyAhPSBIVl9FT0spCisJCQlicmVhazsKKworCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCQlwb3J0LT5pY291bnQudHgrKzsKKwl9CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3VuaHZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IGRldl9pZDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXR0eSA9IHJlY2VpdmVfY2hhcnMocG9ydCwgcmVncyk7CisJdHJhbnNtaXRfY2hhcnMocG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHR0eSkKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogcG9ydC0+bG9jayBpcyBub3QgaGVsZC4gICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bmh2X3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJLyogVHJhbnNtaXR0ZXIgaXMgYWx3YXlzIGVtcHR5IGZvciB1cy4gIElmIHRoZSBjaXJjIGJ1ZmZlcgorCSAqIGlzIG5vbi1lbXB0eSBvciB0aGVyZSBpcyBhbiB4X2NoYXIgcGVuZGluZywgb3VyIGNhbGxlcgorCSAqIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBpZ25vcmUgd2hhdCB3ZSByZXR1cm4gaGVyZS4KKwkgKi8KKwlyZXR1cm4gVElPQ1NFUl9URU1UOworfQorCisvKiBwb3J0LT5sb2NrIGhlbGQgYnkgY2FsbGVyLiAgKi8KK3N0YXRpYyB2b2lkIHN1bmh2X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7CisJcmV0dXJuOworfQorCisvKiBwb3J0LT5sb2NrIGlzIGhlbGQgYnkgY2FsbGVyIGFuZCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bmh2X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBUSU9DTV9EU1IgfCBUSU9DTV9DQVIgfCBUSU9DTV9DVFM7Cit9CisKKy8qIHBvcnQtPmxvY2sgaGVsZCBieSBjYWxsZXIuICAqLworc3RhdGljIHZvaWQgc3VuaHZfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybjsKK30KKworLyogcG9ydC0+bG9jayBoZWxkIGJ5IGNhbGxlci4gICovCitzdGF0aWMgdm9pZCBzdW5odl9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5pbmZvLT54bWl0OworCisJd2hpbGUgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKKwkJbG9uZyBzdGF0dXMgPSBoeXBlcnZpc29yX2Nvbl9wdXRjaGFyKHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSk7CisKKwkJaWYgKHN0YXR1cyAhPSBIVl9FT0spCisJCQlicmVhazsKKworCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCQlwb3J0LT5pY291bnQudHgrKzsKKwl9Cit9CisKKy8qIHBvcnQtPmxvY2sgaXMgbm90IGhlbGQuICAqLworc3RhdGljIHZvaWQgc3VuaHZfc2VuZF94Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBjaGFyIGNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxpbWl0ID0gMTAwMDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CisJCWxvbmcgc3RhdHVzID0gaHlwZXJ2aXNvcl9jb25fcHV0Y2hhcihjaCk7CisJCWlmIChzdGF0dXMgPT0gSFZfRU9LKQorCQkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworfQorCisvKiBwb3J0LT5sb2NrIGhlbGQgYnkgY2FsbGVyLiAgKi8KK3N0YXRpYyB2b2lkIHN1bmh2X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKK30KKworLyogcG9ydC0+bG9jayBoZWxkIGJ5IGNhbGxlci4gICovCitzdGF0aWMgdm9pZCBzdW5odl9lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKK30KKworLyogcG9ydC0+bG9jayBpcyBub3QgaGVsZC4gICovCitzdGF0aWMgdm9pZCBzdW5odl9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworCWlmIChicmVha19zdGF0ZSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlpbnQgbGltaXQgPSAxMDAwMDAwOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwkJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CisJCQlsb25nIHN0YXR1cyA9IGh5cGVydmlzb3JfY29uX3B1dGNoYXIoQ09OX0JSRUFLKTsKKwkJCWlmIChzdGF0dXMgPT0gSFZfRU9LKQorCQkJCWJyZWFrOworCQkJdWRlbGF5KDIpOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCX0KK30KKworLyogcG9ydC0+bG9jayBpcyBub3QgaGVsZC4gICovCitzdGF0aWMgaW50IHN1bmh2X3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyogcG9ydC0+bG9jayBpcyBub3QgaGVsZC4gICovCitzdGF0aWMgdm9pZCBzdW5odl9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworfQorCisvKiBwb3J0LT5sb2NrIGlzIG5vdCBoZWxkLiAgKi8KK3N0YXRpYyB2b2lkIHN1bmh2X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLAorCQkJICAgICAgc3RydWN0IHRlcm1pb3MgKm9sZCkKK3sKKwl1bnNpZ25lZCBpbnQgYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIDQwMDAwMDApOworCXVuc2lnbmVkIGludCBxdW90ID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKKwl1bnNpZ25lZCBpbnQgaWZsYWcsIGNmbGFnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJaWZsYWcgPSB0ZXJtaW9zLT5jX2lmbGFnOworCWNmbGFnID0gdGVybWlvcy0+Y19jZmxhZzsKKworCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayA9IDA7CisJaWYgKGlmbGFnICYgSUdOQlJLKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gSUdOT1JFX0JSRUFLOworCWlmICgoY2ZsYWcgJiBDUkVBRCkgPT0gMCkKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IElHTk9SRV9BTEw7CisKKwkvKiBYWFggKi8KKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIGNmbGFnLAorCQkJICAgIChwb3J0LT51YXJ0Y2xrIC8gKDE2ICogcXVvdCkpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnN1bmh2X3R5cGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gIlNVTjRWIEhDT05TIjsKK30KKworc3RhdGljIHZvaWQgc3VuaHZfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7Cit9CisKK3N0YXRpYyBpbnQgc3VuaHZfcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN1bmh2X2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBmbGFncykKK3sKK30KKworc3RhdGljIGludCBzdW5odl92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IHVhcnRfb3BzIHN1bmh2X3BvcHMgPSB7CisJLnR4X2VtcHR5CT0gc3VuaHZfdHhfZW1wdHksCisJLnNldF9tY3RybAk9IHN1bmh2X3NldF9tY3RybCwKKwkuZ2V0X21jdHJsCT0gc3VuaHZfZ2V0X21jdHJsLAorCS5zdG9wX3R4CT0gc3VuaHZfc3RvcF90eCwKKwkuc3RhcnRfdHgJPSBzdW5odl9zdGFydF90eCwKKwkuc2VuZF94Y2hhcgk9IHN1bmh2X3NlbmRfeGNoYXIsCisJLnN0b3BfcngJPSBzdW5odl9zdG9wX3J4LAorCS5lbmFibGVfbXMJPSBzdW5odl9lbmFibGVfbXMsCisJLmJyZWFrX2N0bAk9IHN1bmh2X2JyZWFrX2N0bCwKKwkuc3RhcnR1cAk9IHN1bmh2X3N0YXJ0dXAsCisJLnNodXRkb3duCT0gc3VuaHZfc2h1dGRvd24sCisJLnNldF90ZXJtaW9zCT0gc3VuaHZfc2V0X3Rlcm1pb3MsCisJLnR5cGUJCT0gc3VuaHZfdHlwZSwKKwkucmVsZWFzZV9wb3J0CT0gc3VuaHZfcmVsZWFzZV9wb3J0LAorCS5yZXF1ZXN0X3BvcnQJPSBzdW5odl9yZXF1ZXN0X3BvcnQsCisJLmNvbmZpZ19wb3J0CT0gc3VuaHZfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0CT0gc3VuaHZfdmVyaWZ5X3BvcnQsCit9OworCitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHN1bmh2X3JlZyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZQkJPSAic2VyaWFsIiwKKwkuZGV2ZnNfbmFtZQkJPSAidHRzLyIsCisJLmRldl9uYW1lCQk9ICJ0dHlTIiwKKwkubWFqb3IJCQk9IFRUWV9NQUpPUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0ICpzdW5odl9wb3J0OworCitzdGF0aWMgaW5saW5lIHZvaWQgc3VuaHZfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGNoYXIgYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBsaW1pdCA9IDEwMDAwMDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CisJCWxvbmcgc3RhdHVzID0gaHlwZXJ2aXNvcl9jb25fcHV0Y2hhcihjKTsKKwkJaWYgKHN0YXR1cyA9PSBIVl9FT0spCisJCQlicmVhazsKKwkJdWRlbGF5KDIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3VuaHZfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBuKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdW5odl9wb3J0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAoKnMgPT0gJ1xuJykKKwkJCXN1bmh2X2NvbnNvbGVfcHV0Y2hhcihwb3J0LCAnXHInKTsKKwkJc3VuaHZfY29uc29sZV9wdXRjaGFyKHBvcnQsICpzKyspOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIHN1bmh2X2NvbnNvbGUgPSB7CisJLm5hbWUJPQkidHR5SFYiLAorCS53cml0ZQk9CXN1bmh2X2NvbnNvbGVfd3JpdGUsCisJLmRldmljZQk9CXVhcnRfY29uc29sZV9kZXZpY2UsCisJLmZsYWdzCT0JQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAk9CS0xLAorCS5kYXRhCT0JJnN1bmh2X3JlZywKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNvbnNvbGUgKlNVTkhWX0NPTlNPTEUodm9pZCkKK3sKKwlpZiAoY29uX2lzX3ByZXNlbnQoKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdW5odl9jb25zb2xlLmluZGV4ID0gMDsKKworCXJldHVybiAmc3VuaHZfY29uc29sZTsKK30KKworc3RhdGljIGludCBfX2luaXQgaHZfY29uc29sZV9jb21wYXRpYmxlKGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwl3aGlsZSAobGVuKSB7CisJCWludCB0aGlzX2xlbjsKKworCQlpZiAoIXN0cmNtcChidWYsICJxY24iKSkKKwkJCXJldHVybiAxOworCisJCXRoaXNfbGVuID0gc3RybGVuKGJ1ZikgKyAxOworCisJCWJ1ZiArPSB0aGlzX2xlbjsKKwkJbGVuIC09IHRoaXNfbGVuOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBnZXRfaW50ZXJydXB0KHZvaWQpCit7CisJY29uc3QgY2hhciAqY29uc19zdHIgPSAiY29uc29sZSI7CisJY29uc3QgY2hhciAqY29tcGF0X3N0ciA9ICJjb21wYXRpYmxlIjsKKwlpbnQgbm9kZSA9IHByb21fZ2V0Y2hpbGQoc3VuNHZfdmRldl9yb290KTsKKwljaGFyIGJ1Zls2NF07CisJaW50IGVyciwgbGVuOworCisJbm9kZSA9IHByb21fc2VhcmNoc2libGluZ3Mobm9kZSwgY29uc19zdHIpOworCWlmICghbm9kZSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBwcm9tX2dldHByb3BsZW4obm9kZSwgY29tcGF0X3N0cik7CisJaWYgKGxlbiA9PSAwIHx8IGxlbiA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBwcm9tX2dldHByb3BlcnR5KG5vZGUsIGNvbXBhdF9zdHIsIGJ1ZiwgNjQpOworCWlmIChlcnIgPT0gLTEpCisJCXJldHVybiAwOworCisJaWYgKCFodl9jb25zb2xlX2NvbXBhdGlibGUoYnVmLCBsZW4pKQorCQlyZXR1cm4gMDsKKworCS8qIE9rLCB0aGUgdGhpcyBpcyB0aGUgT0JQIG5vZGUgZm9yIHRoZSBzdW40diBoeXBlcnZpc29yCisJICogY29uc29sZSBkZXZpY2UuICBEZWNvZGUgdGhlIGludGVycnVwdC4KKwkgKi8KKwlyZXR1cm4gc3VuNHZfdmRldl9kZXZpY2VfaW50ZXJydXB0KG5vZGUpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzdW5odl9pbml0KHZvaWQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlpbnQgcmV0OworCisJaWYgKHRsYl90eXBlICE9IGh5cGVydmlzb3IpCisJCXJldHVybiAtRU5PREVWOworCisJcG9ydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1YXJ0X3BvcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIXBvcnQpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChwb3J0LCAwLCBzaXplb2Yoc3RydWN0IHVhcnRfcG9ydCkpOworCisJcG9ydC0+bGluZSA9IDA7CisJcG9ydC0+b3BzID0gJnN1bmh2X3BvcHM7CisJcG9ydC0+dHlwZSA9IFBPUlRfU1VOSFY7CisJcG9ydC0+dWFydGNsayA9ICggMjk0OTEyMDAgLyAxNiApOyAvKiBhcmJpdHJhcnkgKi8KKworCS8qIFNldCB0aGlzIGp1c3QgdG8gbWFrZSB1YXJ0X2NvbmZpZ3VyZV9wb3J0KCkgaGFwcHkuICAqLworCXBvcnQtPm1lbWJhc2UgPSAodW5zaWduZWQgY2hhciBfX2lvbWVtICopIF9fcGEocG9ydCk7CisKKwlwb3J0LT5pcnEgPSBnZXRfaW50ZXJydXB0KCk7CisJaWYgKCFwb3J0LT5pcnEpIHsKKwkJa2ZyZWUocG9ydCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN1bmh2X3JlZy5taW5vciA9IHN1bnNlcmlhbF9jdXJyZW50X21pbm9yOworCXN1bmh2X3JlZy5uciA9IDE7CisKKwlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc3VuaHZfcmVnKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNVTkhWOiB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigpIGZhaWxlZCAlZFxuIiwKKwkJICAgICAgIHJldCk7CisJCWtmcmVlKHBvcnQpOworCisJCXJldHVybiByZXQ7CisJfQorCisJc3VuaHZfcmVnLnR0eV9kcml2ZXItPm5hbWVfYmFzZSA9IHN1bmh2X3JlZy5taW5vciAtIDY0OworCXN1bnNlcmlhbF9jdXJyZW50X21pbm9yICs9IDE7CisKKwlzdW5odl9yZWcuY29ucyA9IFNVTkhWX0NPTlNPTEUoKTsKKworCXN1bmh2X3BvcnQgPSBwb3J0OworCisJcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJnN1bmh2X3JlZywgcG9ydCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTVU5IVjogdWFydF9hZGRfb25lX3BvcnQoKSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXN1bnNlcmlhbF9jdXJyZW50X21pbm9yIC09IDE7CisJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnN1bmh2X3JlZyk7CisJCWtmcmVlKHBvcnQpOworCQlzdW5odl9wb3J0ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgc3VuaHZfaW50ZXJydXB0LAorCQkJU0FfU0hJUlEsICJzZXJpYWwoc3VuaHYpIiwgcG9ydCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzdW5odjogQ2Fubm90IHJlZ2lzdGVyIElSUVxuIik7CisJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzdW5odl9yZWcsIHBvcnQpOworCQlzdW5zZXJpYWxfY3VycmVudF9taW5vciAtPSAxOworCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzdW5odl9yZWcpOworCQlrZnJlZShwb3J0KTsKKwkJc3VuaHZfcG9ydCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3VuaHZfZXhpdCh2b2lkKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdW5odl9wb3J0OworCisJQlVHX09OKCFwb3J0KTsKKworCWZyZWVfaXJxKHBvcnQtPmlycSwgcG9ydCk7CisKKwl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3VuaHZfcmVnLCBwb3J0KTsKKwlzdW5zZXJpYWxfY3VycmVudF9taW5vciAtPSAxOworCisJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc3VuaHZfcmVnKTsKKworCWtmcmVlKHN1bmh2X3BvcnQpOworCXN1bmh2X3BvcnQgPSBOVUxMOworfQorCittb2R1bGVfaW5pdChzdW5odl9pbml0KTsKK21vZHVsZV9leGl0KHN1bmh2X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYXZpZCBTLiBNaWxsZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1VONFYgSHlwZXJ2aXNvciBjb25zb2xlIGRyaXZlciIpCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCmluZGV4IDg1NjY0MjIuLmJmYmU5ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnNhYi5jCkBAIC04NjEsOCArODYxLDkgQEAKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfU1VOU0FCX0NPTlNPTEUKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBzdW5zYWJfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3N1bnNhYl9wb3J0ICp1cCwgY2hhciBjKQorc3RhdGljIHZvaWQgc3Vuc2FiX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYykKIHsKKwlzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfc3Vuc2FiX3BvcnQgKilwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwpAQCAtODc2LDEzICs4NzcsOCBAQAogc3RhdGljIHZvaWQgc3Vuc2FiX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgbikKIHsKIAlzdHJ1Y3QgdWFydF9zdW5zYWJfcG9ydCAqdXAgPSAmc3Vuc2FiX3BvcnRzW2Nvbi0+aW5kZXhdOwotCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlpZiAoKnMgPT0gJ1xuJykKLQkJCXN1bnNhYl9jb25zb2xlX3B1dGNoYXIodXAsICdccicpOwotCQlzdW5zYWJfY29uc29sZV9wdXRjaGFyKHVwLCAqcysrKTsKLQl9CisJdWFydF9jb25zb2xlX3dyaXRlKCZ1cC0+cG9ydCwgcywgbiwgc3Vuc2FiX2NvbnNvbGVfcHV0Y2hhcik7CiAJc3Vuc2FiX3RlY193YWl0KHVwKTsKIH0KIApAQCAtOTU1LDE0ICs5NTEsMTMgQEAKIAkuaW5kZXgJPQktMSwKIAkuZGF0YQk9CSZzdW5zYWJfcmVnLAogfTsKLSNkZWZpbmUgU1VOU0FCX0NPTlNPTEUJKCZzdW5zYWJfY29uc29sZSkKIAotc3RhdGljIHZvaWQgX19pbml0IHN1bnNhYl9jb25zb2xlX2luaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNvbnNvbGUgKlNVTlNBQl9DT05TT0xFKHZvaWQpCiB7CiAJaW50IGk7CiAKIAlpZiAoY29uX2lzX3ByZXNlbnQoKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gTlVMTDsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY2hhbm5lbHM7IGkrKykgewogCQlpbnQgdGhpc19taW5vciA9IHN1bnNhYl9yZWcubWlub3IgKyBpOwpAQCAtOTcxLDEzICs5NjYsMTQgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSBudW1fY2hhbm5lbHMpCi0JCXJldHVybjsKKwkJcmV0dXJuIE5VTEw7CiAKIAlzdW5zYWJfY29uc29sZS5pbmRleCA9IGk7Ci0JcmVnaXN0ZXJfY29uc29sZSgmc3Vuc2FiX2NvbnNvbGUpOworCisJcmV0dXJuICZzdW5zYWJfY29uc29sZTsKIH0KICNlbHNlCi0jZGVmaW5lIFNVTlNBQl9DT05TT0xFCQkoTlVMTCkKKyNkZWZpbmUgU1VOU0FCX0NPTlNPTEUoKQkoTlVMTCkKICNkZWZpbmUgc3Vuc2FiX2NvbnNvbGVfaW5pdCgpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCkBAIC0xMTI0LDcgKzExMjAsNiBAQAogCiAJc3Vuc2FiX3JlZy5taW5vciA9IHN1bnNlcmlhbF9jdXJyZW50X21pbm9yOwogCXN1bnNhYl9yZWcubnIgPSBudW1fY2hhbm5lbHM7Ci0Jc3Vuc2FiX3JlZy5jb25zID0gU1VOU0FCX0NPTlNPTEU7CiAKIAlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc3Vuc2FiX3JlZyk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTExNDMsMTAgKzExMzgsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlzdW5zYWJfcmVnLnR0eV9kcml2ZXItPm5hbWVfYmFzZSA9IHN1bnNhYl9yZWcubWlub3IgLSA2NDsKKworCXN1bnNhYl9yZWcuY29ucyA9IFNVTlNBQl9DT05TT0xFKCk7CisKIAlzdW5zZXJpYWxfY3VycmVudF9taW5vciArPSBudW1fY2hhbm5lbHM7CiAJCi0Jc3Vuc2FiX2NvbnNvbGVfaW5pdCgpOwotCiAJZm9yIChpID0gMDsgaSA8IG51bV9jaGFubmVsczsgaSsrKSB7CiAJCXN0cnVjdCB1YXJ0X3N1bnNhYl9wb3J0ICp1cCA9ICZzdW5zYWJfcG9ydHNbaV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCmluZGV4IDMwODcwNDUuLjlmZTIyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwpAQCAtMTAyLDkgKzEwMiw3IEBACiAjZW5kaWYKIH07CiAKLSNkZWZpbmUgX0lOTElORV8KLQotc3RhdGljIF9JTkxJTkVfIHVuc2lnbmVkIGludCBzZXJpYWxfaW4oc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAsIGludCBvZmZzZXQpCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbF9pbihzdHJ1Y3QgdWFydF9zdW5zdV9wb3J0ICp1cCwgaW50IG9mZnNldCkKIHsKIAlvZmZzZXQgPDw9IHVwLT5wb3J0LnJlZ3NoaWZ0OwogCkBAIC0xMjEsOCArMTE5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBfSU5MSU5FXyB2b2lkCi1zZXJpYWxfb3V0KHN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBzZXJpYWxfb3V0KHN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAjaWZuZGVmIENPTkZJR19TUEFSQzY0CiAJLyoKQEAgLTI5OSwxMyArMjk2LDEwIEBACiBzdGF0aWMgdm9pZCBzdW5zdV9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqKSBwb3J0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogCXVwLT5pZXIgJj0gflVBUlRfSUVSX1JMU0k7CiAJdXAtPnBvcnQucmVhZF9zdGF0dXNfbWFzayAmPSB+VUFSVF9MU1JfRFI7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9JRVIsIHVwLT5pZXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc3Vuc3VfZW5hYmxlX21zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0zMTksNyArMzEzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBfSU5MSU5FXyBzdHJ1Y3QgdHR5X3N0cnVjdCAqCitzdGF0aWMgc3RydWN0IHR0eV9zdHJ1Y3QgKgogcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9zdW5zdV9wb3J0ICp1cCwgdW5zaWduZWQgY2hhciAqc3RhdHVzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuaW5mby0+dHR5OwpAQCAtMzk4LDcgKzM5Miw3IEBACiAJcmV0dXJuIHR0eTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQgdHJhbnNtaXRfY2hhcnMoc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXApCitzdGF0aWMgdm9pZCB0cmFuc21pdF9jaGFycyhzdHJ1Y3QgdWFydF9zdW5zdV9wb3J0ICp1cCkKIHsKIAlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuaW5mby0+eG1pdDsKIAlpbnQgY291bnQ7CkBAIC00MzQsNyArNDI4LDcgQEAKIAkJX19zdG9wX3R4KHVwKTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQgY2hlY2tfbW9kZW1fc3RhdHVzKHN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwKQorc3RhdGljIHZvaWQgY2hlY2tfbW9kZW1fc3RhdHVzKHN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwKQogewogCWludCBzdGF0dXM7CiAKQEAgLTEyODMsNiArMTI3Nyw3IEBACiAJc3RydWN0IHNlcmlvICpzZXJpbzsKICNlbmRpZgogCisJc3Bpbl9sb2NrX2luaXQoJnVwLT5wb3J0LmxvY2spOwogCXVwLT5wb3J0LmxpbmUgPSBjaGFubmVsOwogCXVwLT5wb3J0LnR5cGUgPSBQT1JUX1VOS05PV047CiAJdXAtPnBvcnQudWFydGNsayA9IChTVV9CQVNFX0JBVUQgKiAxNik7CkBAIC0xMzc5LDYgKzEzNzQsMTQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHN1bnN1X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfc3Vuc3VfcG9ydCAqKXBvcnQ7CisKKwl3YWl0X2Zvcl94bWl0cih1cCk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgY2gpOworfQorCiAvKgogICoJUHJpbnQgYSBzdHJpbmcgdG8gdGhlIHNlcmlhbCBwb3J0IHRyeWluZyBub3QgdG8gZGlzdHVyYgogICoJYW55IHBvc3NpYmxlIHJlYWwgdXNlIG9mIHRoZSBwb3J0Li4uCkBAIC0xMzg4LDcgKzEzOTEsNiBAQAogewogCXN0cnVjdCB1YXJ0X3N1bnN1X3BvcnQgKnVwID0gJnN1bnN1X3BvcnRzW2NvLT5pbmRleF07CiAJdW5zaWduZWQgaW50IGllcjsKLQlpbnQgaTsKIAogCS8qCiAJICoJRmlyc3Qgc2F2ZSB0aGUgVUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cwpAQCAtMTM5NiwyMiArMTM5OCw3IEBACiAJaWVyID0gc2VyaWFsX2luKHVwLCBVQVJUX0lFUik7CiAJc2VyaWFsX291dCh1cCwgVUFSVF9JRVIsIDApOwogCi0JLyoKLQkgKglOb3csIGRvIGVhY2ggY2hhcmFjdGVyCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIHMrKykgewotCQl3YWl0X2Zvcl94bWl0cih1cCk7Ci0KLQkJLyoKLQkJICoJU2VuZCB0aGUgY2hhcmFjdGVyIG91dC4KLQkJICoJSWYgYSBMRiwgYWxzbyBkbyBDUi4uLgotCQkgKi8KLQkJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgKnMpOwotCQlpZiAoKnMgPT0gMTApIHsKLQkJCXdhaXRfZm9yX3htaXRyKHVwKTsKLQkJCXNlcmlhbF9vdXQodXAsIFVBUlRfVFgsIDEzKTsKLQkJfQotCX0KKwl1YXJ0X2NvbnNvbGVfd3JpdGUoJnVwLT5wb3J0LCBzLCBjb3VudCwgc3Vuc3VfY29uc29sZV9wdXRjaGFyKTsKIAogCS8qCiAJICoJRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CkBAIC0xNDY3LDE4ICsxNDU0LDE3IEBACiAJLmluZGV4CT0JLTEsCiAJLmRhdGEJPQkmc3Vuc3VfcmVnLAogfTsKLSNkZWZpbmUgU1VOU1VfQ09OU09MRQkoJnN1bnN1X2NvbnMpCiAKIC8qCiAgKglSZWdpc3RlciBjb25zb2xlLgogICovCiAKLXN0YXRpYyBpbnQgX19pbml0IHN1bnN1X3NlcmlhbF9jb25zb2xlX2luaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNvbnNvbGUgKlNVTlNVX0NPTlNPTEUodm9pZCkKIHsKIAlpbnQgaTsKIAogCWlmIChjb25faXNfcHJlc2VudCgpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKSB7CiAJCWludCB0aGlzX21pbm9yID0gc3Vuc3VfcmVnLm1pbm9yICsgaTsKQEAgLTE0ODcsMTYgKzE0NzMsMTYgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSBVQVJUX05SKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAJaWYgKHN1bnN1X3BvcnRzW2ldLnBvcnRfbm9kZSA9PSAwKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAKIAlzdW5zdV9jb25zLmluZGV4ID0gaTsKLQlyZWdpc3Rlcl9jb25zb2xlKCZzdW5zdV9jb25zKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiAmc3Vuc3VfY29uczsKIH0KICNlbHNlCi0jZGVmaW5lIFNVTlNVX0NPTlNPTEUJCQkoTlVMTCkKKyNkZWZpbmUgU1VOU1VfQ09OU09MRSgpCQkJKE5VTEwpCiAjZGVmaW5lIHN1bnN1X3NlcmlhbF9jb25zb2xlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIApAQCAtMTUxMyw2ICsxNDk5LDcgQEAKIAkJICAgIHVwLT5zdV90eXBlID09IFNVX1BPUlRfS0JEKQogCQkJY29udGludWU7CiAKKwkJc3Bpbl9sb2NrX2luaXQoJnVwLT5wb3J0LmxvY2spOwogCQl1cC0+cG9ydC5mbGFncyB8PSBVUEZfQk9PVF9BVVRPQ09ORjsKIAkJdXAtPnBvcnQudHlwZSA9IFBPUlRfVU5LTk9XTjsKIAkJdXAtPnBvcnQudWFydGNsayA9IChTVV9CQVNFX0JBVUQgKiAxNik7CkBAIC0xNTI2LDE2ICsxNTEzLDE5IEBACiAJfQogCiAJc3Vuc3VfcmVnLm1pbm9yID0gc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3I7Ci0Jc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3IgKz0gaW5zdGFuY2U7CiAKIAlzdW5zdV9yZWcubnIgPSBpbnN0YW5jZTsKLQlzdW5zdV9yZWcuY29ucyA9IFNVTlNVX0NPTlNPTEU7CiAKIAlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc3Vuc3VfcmVnKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXN1bnN1X3NlcmlhbF9jb25zb2xlX2luaXQoKTsKKwlzdW5zdV9yZWcudHR5X2RyaXZlci0+bmFtZV9iYXNlID0gc3Vuc3VfcmVnLm1pbm9yIC0gNjQ7CisKKwlzdW5zZXJpYWxfY3VycmVudF9taW5vciArPSBpbnN0YW5jZTsKKworCXN1bnN1X3JlZy5jb25zID0gU1VOU1VfQ09OU09MRSgpOworCiAJZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF9zdW5zdV9wb3J0ICp1cCA9ICZzdW5zdV9wb3J0c1tpXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggNWNjNGQ0Yy4uY2Q0OWViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC0xMjUyLDggKzEyNTIsOSBAQAogCiAjZGVmaW5lIFpTX1BVVF9DSEFSX01BWF9ERUxBWQkyMDAwCS8qIDEwIG1zICovCiAKLXN0YXRpYyB2b2lkIHN1bnppbG9nX3B1dF9jaGFyKHN0cnVjdCB6aWxvZ19jaGFubmVsIF9faW9tZW0gKmNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgY2gpCitzdGF0aWMgdm9pZCBzdW56aWxvZ19wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKIHsKKwlzdHJ1Y3Qgemlsb2dfY2hhbm5lbCAqY2hhbm5lbCA9IFpJTE9HX0NIQU5ORUxfRlJPTV9QT1JUKHBvcnQpOwogCWludCBsb29wcyA9IFpTX1BVVF9DSEFSX01BWF9ERUxBWTsKIAogCS8qIFRoaXMgaXMgYSB0aW1lZCBwb2xsaW5nIGxvb3Agc28gZG8gbm90IHN3aXRjaCB0aGUgZXhwbGljaXQKQEAgLTEyODQsNyArMTI4NSw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3Vuemlsb2dfc2VyaW9fbG9jaywgZmxhZ3MpOwogCi0Jc3Vuemlsb2dfcHV0X2NoYXIoWklMT0dfQ0hBTk5FTF9GUk9NX1BPUlQoJnVwLT5wb3J0KSwgY2gpOworCXN1bnppbG9nX3B1dGNoYXIoJnVwLT5wb3J0LCBjaCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdW56aWxvZ19zZXJpb19sb2NrLCBmbGFncyk7CiAKQEAgLTEzMjUsMTYgKzEzMjYsMTAgQEAKIHN1bnppbG9nX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQogewogCXN0cnVjdCB1YXJ0X3N1bnppbG9nX3BvcnQgKnVwID0gJnN1bnppbG9nX3BvcnRfdGFibGVbY29uLT5pbmRleF07Ci0Jc3RydWN0IHppbG9nX2NoYW5uZWwgKmNoYW5uZWwgPSBaSUxPR19DSEFOTkVMX0ZST01fUE9SVCgmdXAtPnBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBzKyspIHsKLQkJc3Vuemlsb2dfcHV0X2NoYXIoY2hhbm5lbCwgKnMpOwotCQlpZiAoKnMgPT0gMTApCi0JCQlzdW56aWxvZ19wdXRfY2hhcihjaGFubmVsLCAxMyk7Ci0JfQorCXVhcnRfY29uc29sZV93cml0ZSgmdXAtPnBvcnQsIHMsIGNvdW50LCBzdW56aWxvZ19wdXRjaGFyKTsKIAl1ZGVsYXkoMik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwogfQpAQCAtMTM5MCw3ICsxMzg1LDYgQEAKIAkuaW5kZXgJPQktMSwKIAkuZGF0YSAgID0JJnN1bnppbG9nX3JlZywKIH07Ci0jZGVmaW5lIFNVTlpJTE9HX0NPTlNPTEUJKCZzdW56aWxvZ19jb25zb2xlKQogCiBzdGF0aWMgaW50IF9faW5pdCBzdW56aWxvZ19jb25zb2xlX2luaXQodm9pZCkKIHsKQEAgLTE0MTMsOCArMTQwNywzMSBAQAogCXJlZ2lzdGVyX2NvbnNvbGUoJnN1bnppbG9nX2NvbnNvbGUpOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjb25zb2xlICpTVU5aSUxPR19DT05TT0xFKHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoY29uX2lzX3ByZXNlbnQoKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKKwkJaW50IHRoaXNfbWlub3IgPSBzdW56aWxvZ19yZWcubWlub3IgKyBpOworCisJCWlmICgodGhpc19taW5vciAtIDY0KSA9PSAoc2VyaWFsX2NvbnNvbGUgLSAxKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBOVU1fQ0hBTk5FTFMpCisJCXJldHVybiBOVUxMOworCisJc3Vuemlsb2dfY29uc29sZS5pbmRleCA9IGk7CisJc3Vuemlsb2dfcG9ydF90YWJsZVtpXS5mbGFncyB8PSBTVU5aSUxPR19GTEFHX0lTX0NPTlM7CisKKwlyZXR1cm4gJnN1bnppbG9nX2NvbnNvbGU7Cit9CisKICNlbHNlCi0jZGVmaW5lIFNVTlpJTE9HX0NPTlNPTEUJKE5VTEwpCisjZGVmaW5lIFNVTlpJTE9HX0NPTlNPTEUoKQkoTlVMTCkKICNkZWZpbmUgc3Vuemlsb2dfY29uc29sZV9pbml0KCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKQEAgLTE2NjYsMTQgKzE2ODMsMTUgQEAKIAl9CiAJCQogCXN1bnppbG9nX3JlZy5uciA9IHVhcnRfY291bnQ7Ci0Jc3Vuemlsb2dfcmVnLmNvbnMgPSBTVU5aSUxPR19DT05TT0xFOwotCiAJc3Vuemlsb2dfcmVnLm1pbm9yID0gc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3I7Ci0Jc3Vuc2VyaWFsX2N1cnJlbnRfbWlub3IgKz0gdWFydF9jb3VudDsKIAogCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZzdW56aWxvZ19yZWcpOwogCWlmIChyZXQgPT0gMCkgewotCQlzdW56aWxvZ19jb25zb2xlX2luaXQoKTsKKwkJc3Vuemlsb2dfcmVnLnR0eV9kcml2ZXItPm5hbWVfYmFzZSA9IHN1bnppbG9nX3JlZy5taW5vciAtIDY0OworCQlzdW56aWxvZ19yZWcuY29ucyA9IFNVTlpJTE9HX0NPTlNPTEUoKTsKKworCQlzdW5zZXJpYWxfY3VycmVudF9taW5vciArPSB1YXJ0X2NvdW50OworCiAJCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgewogCQkJc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXAgPSAmc3Vuemlsb2dfcG9ydF90YWJsZVtpXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jIGIvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCmluZGV4IGQ2MTQ5NGQuLmRmNWU4NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYworKysgYi9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKQEAgLTgyMSwyNSArODIxLDIzIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzaXVfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwl3YWl0X2Zvcl94bWl0cihwb3J0KTsKKwlzaXVfd3JpdGUocG9ydCwgVUFSVF9UWCwgY2gpOworfQorCiBzdGF0aWMgdm9pZCBzaXVfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBjb3VudCkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCXVpbnQ4X3QgaWVyOwotCXVuc2lnbmVkIGk7CiAKIAlwb3J0ID0gJnNpdV91YXJ0X3BvcnRzW2Nvbi0+aW5kZXhdOwogCiAJaWVyID0gc2l1X3JlYWQocG9ydCwgVUFSVF9JRVIpOwogCXNpdV93cml0ZShwb3J0LCBVQVJUX0lFUiwgMCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQgJiYgKnMgIT0gJ1wwJzsgaSsrLCBzKyspIHsKLQkJd2FpdF9mb3JfeG1pdHIocG9ydCk7Ci0JCXNpdV93cml0ZShwb3J0LCBVQVJUX1RYLCAqcyk7Ci0JCWlmICgqcyA9PSAnXG4nKSB7Ci0JCQl3YWl0X2Zvcl94bWl0cihwb3J0KTsKLQkJCXNpdV93cml0ZShwb3J0LCBVQVJUX1RYLCAnXHInKTsKLQkJfQotCX0KKwl1YXJ0X2NvbnNvbGVfd3JpdGUocG9ydCwgcywgY291bnQsIHNpdV9jb25zb2xlX3B1dGNoYXIpOwogCiAJd2FpdF9mb3JfeG1pdHIocG9ydCk7CiAJc2l1X3dyaXRlKHBvcnQsIFVBUlRfSUVSLCBpZXIpOwpAQCAtOTE5LDcgKzkxNyw3IEBACiAJLmNvbnMJCT0gU0VSSUFMX1ZSNDFYWF9DT05TT0xFLAogfTsKIAotc3RhdGljIGludCBzaXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc2l1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCWludCBudW0sIGksIHJldHZhbDsKQEAgLTk1Myw3ICs5NTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc2l1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAlpbnQgaTsKQEAgLTEwMDYsMjEgKzEwMDQsMjggQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2l1X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNpdV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNpdV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaXVfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHNpdV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2l1X3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiU0lVIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHZyNDF4eF9zaXVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdnI0MXh4X3NpdV9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIAotCXNpdV9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJTSVUiLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihzaXVfcGxhdGZvcm1fZGV2aWNlKSkKLQkJcmV0dXJuIFBUUl9FUlIoc2l1X3BsYXRmb3JtX2RldmljZSk7CisJc2l1X3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiU0lVIiwgLTEpOworCWlmICghc2l1X3BsYXRmb3JtX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHNpdV9wbGF0Zm9ybV9kZXZpY2UpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXBsYXRmb3JtX2RldmljZV9wdXQoc2l1X3BsYXRmb3JtX2RldmljZSk7CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaXVfZGV2aWNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0xMDI5LDEwICsxMDM0LDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgdnI0MXh4X3NpdV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdnI0MXh4X3NpdV9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNpdV9kZXZpY2VfZHJpdmVyKTsKLQogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNpdV9wbGF0Zm9ybV9kZXZpY2UpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NuL0tjb25maWcgYi9kcml2ZXJzL3NuL0tjb25maWcKaW5kZXggZDk1MjY1YjEuLmEzNDczMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc24vS2NvbmZpZworKysgYi9kcml2ZXJzL3NuL0tjb25maWcKQEAgLTMsMTAgKzMsMTEgQEAKICMKIAogbWVudSAiU04gRGV2aWNlcyIKKwlkZXBlbmRzIG9uIFNHSV9TTgogCiBjb25maWcgU0dJX0lPQzQKIAl0cmlzdGF0ZSAiU0dJIElPQzQgQmFzZSBJTyBzdXBwb3J0IgotCWRlcGVuZHMgb24gKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIpICYmIE1NVElNRVIKKwlkZXBlbmRzIG9uIE1NVElNRVIKIAlkZWZhdWx0IG0KIAktLS1oZWxwLS0tCiAJVGhpcyBvcHRpb24gZW5hYmxlcyBiYXNpYyBzdXBwb3J0IGZvciB0aGUgU0dJIElPQzQtYmFzZWQgQmFzZSBJTwpAQCAtMTksNyArMjAsNiBAQAogCiBjb25maWcgU0dJX0lPQzMKIAl0cmlzdGF0ZSAiU0dJIElPQzMgQmFzZSBJTyBzdXBwb3J0IgotCWRlcGVuZHMgb24gKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIpCiAJZGVmYXVsdCBtCiAJLS0taGVscC0tLQogCVRoaXMgb3B0aW9uIGVuYWJsZXMgYmFzaWMgc3VwcG9ydCBmb3IgdGhlIFNHSSBJT0MzLWJhc2VkIEJhc2UgSU8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc24vaW9jMy5jIGIvZHJpdmVycy9zbi9pb2MzLmMKaW5kZXggMTIzNTdlMS4uOTM0NDlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zbi9pb2MzLmMKKysrIGIvZHJpdmVycy9zbi9pb2MzLmMKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgcmV0dXJuIHByZXNlbmNlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuaWNfcmVhZF9iaXQoc3RydWN0IGlvYzNfZHJpdmVyX2RhdGEgKmlkZCkKK3N0YXRpYyBpbnQgbmljX3JlYWRfYml0KHN0cnVjdCBpb2MzX2RyaXZlcl9kYXRhICppZGQpCiB7CiAJaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzcsNyArNzcsNyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuaWNfd3JpdGVfYml0KHN0cnVjdCBpb2MzX2RyaXZlcl9kYXRhICppZGQsIGludCBiaXQpCitzdGF0aWMgdm9pZCBuaWNfd3JpdGVfYml0KHN0cnVjdCBpb2MzX2RyaXZlcl9kYXRhICppZGQsIGludCBiaXQpCiB7CiAJaWYgKGJpdCkKIAkJd3JpdGVsKG1jcl9wYWNrKDYsIDExMCksICZpZGQtPnZtYS0+bWNyKTsKQEAgLTM3MSw4ICszNzEsNyBAQAogCiAvKiBJbnRlcnJ1cHRzICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotd3JpdGVfaXJlZyhzdHJ1Y3QgaW9jM19kcml2ZXJfZGF0YSAqaWRkLCB1aW50MzJfdCB2YWwsIGludCB3aGljaCkKK3N0YXRpYyB2b2lkIHdyaXRlX2lyZWcoc3RydWN0IGlvYzNfZHJpdmVyX2RhdGEgKmlkZCwgdWludDMyX3QgdmFsLCBpbnQgd2hpY2gpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzM1LDE0ICs3MzQsMTIgQEAKIAl9CiAKIAkvKiBBZGQgdGhpcyBJT0MzIHRvIGFsbCBzdWJtb2R1bGVzICovCi0JcmVhZF9sb2NrKCZpb2MzX3N1Ym1vZHVsZXNfbG9jayk7CiAJZm9yKGlkPTA7aWQ8SU9DM19NQVhfU1VCTU9EVUxFUztpZCsrKQogCQlpZihpb2MzX3N1Ym1vZHVsZXNbaWRdICYmIGlvYzNfc3VibW9kdWxlc1tpZF0tPnByb2JlKSB7CiAJCQlpZGQtPmFjdGl2ZVtpZF0gPSAxOwogCQkJaWRkLT5hY3RpdmVbaWRdID0gIWlvYzNfc3VibW9kdWxlc1tpZF0tPnByb2JlCiAJCQkJCQkoaW9jM19zdWJtb2R1bGVzW2lkXSwgaWRkKTsKIAkJfQotCXJlYWRfdW5sb2NrKCZpb2MzX3N1Ym1vZHVsZXNfbG9jayk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJJT0MzIE1hc3RlciBEcml2ZXIgbG9hZGVkIGZvciAlc1xuIiwgcGNpX25hbWUocGRldikpOwogCkBAIC03NjcsNyArNzY0LDYgQEAKIAlpZGQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKIAkvKiBSZW1vdmUgdGhpcyBJT0MzIGZyb20gYWxsIHN1Ym1vZHVsZXMgKi8KLQlyZWFkX2xvY2soJmlvYzNfc3VibW9kdWxlc19sb2NrKTsKIAlmb3IoaWQ9MDtpZDxJT0MzX01BWF9TVUJNT0RVTEVTO2lkKyspCiAJCWlmKGlkZC0+YWN0aXZlW2lkXSkgewogCQkJaWYoaW9jM19zdWJtb2R1bGVzW2lkXSAmJiBpb2MzX3N1Ym1vZHVsZXNbaWRdLT5yZW1vdmUpCkBAIC03ODEsNyArNzc3LDYgQEAKIAkJCQkJICAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJCQlpZGQtPmFjdGl2ZVtpZF0gPSAwOwogCQl9Ci0JcmVhZF91bmxvY2soJmlvYzNfc3VibW9kdWxlc19sb2NrKTsKIAogCS8qIENsZWFyIGFuZCBkaXNhYmxlIGFsbCBJUlFzICovCiAJd3JpdGVfaXJlZyhpZGQsIH4wLCBJT0MzX1dfSUVDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc24vaW9jNC5jIGIvZHJpdmVycy9zbi9pb2M0LmMKaW5kZXggZWE3NWIzZC4uNjcxNDBhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zbi9pb2M0LmMKKysrIGIvZHJpdmVycy9zbi9pb2M0LmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb2M0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW10aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KICNpbmNsdWRlIDxhc20vc24vY2xrc3VwcG9ydC5oPgogI2luY2x1ZGUgPGFzbS9zbi9zaHViX21tci5oPgpAQCAtNTQsMTEgKzU0LDEwIEBACiAgKiBTdWJtb2R1bGUgbWFuYWdlbWVudCAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgTElTVF9IRUFEKGlvYzRfZGV2aWNlcyk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTShpb2M0X2RldmljZXNfcndzZW0pOworc3RhdGljIERFRklORV9NVVRFWChpb2M0X211dGV4KTsKIAorc3RhdGljIExJU1RfSEVBRChpb2M0X2RldmljZXMpOwogc3RhdGljIExJU1RfSEVBRChpb2M0X3N1Ym1vZHVsZXMpOwotc3RhdGljIERFQ0xBUkVfUldTRU0oaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKIAogLyogUmVnaXN0ZXIgYW4gSU9DNCBzdWJtb2R1bGUgKi8KIGludApAQCAtNjYsMTUgKzY1LDEzIEBACiB7CiAJc3RydWN0IGlvYzRfZHJpdmVyX2RhdGEgKmlkZDsKIAotCWRvd25fd3JpdGUoJmlvYzRfc3VibW9kdWxlc19yd3NlbSk7CisJbXV0ZXhfbG9jaygmaW9jNF9tdXRleCk7CiAJbGlzdF9hZGQoJmlzLT5pc19saXN0LCAmaW9jNF9zdWJtb2R1bGVzKTsKLQl1cF93cml0ZSgmaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKIAogCS8qIEluaXRpYWxpemUgc3VibW9kdWxlIGZvciBlYWNoIElPQzQgKi8KIAlpZiAoIWlzLT5pc19wcm9iZSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCi0JZG93bl9yZWFkKCZpb2M0X2RldmljZXNfcndzZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaWRkLCAmaW9jNF9kZXZpY2VzLCBpZGRfbGlzdCkgewogCQlpZiAoaXMtPmlzX3Byb2JlKGlkZCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTg0LDggKzgxLDggQEAKIAkJCSAgICAgICBwY2lfbmFtZShpZGQtPmlkZF9wZGV2KSk7CiAJCX0KIAl9Ci0JdXBfcmVhZCgmaW9jNF9kZXZpY2VzX3J3c2VtKTsKLQorIG91dDoKKwltdXRleF91bmxvY2soJmlvYzRfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC05NSwxNSArOTIsMTMgQEAKIHsKIAlzdHJ1Y3QgaW9jNF9kcml2ZXJfZGF0YSAqaWRkOwogCi0JZG93bl93cml0ZSgmaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKKwltdXRleF9sb2NrKCZpb2M0X211dGV4KTsKIAlsaXN0X2RlbCgmaXMtPmlzX2xpc3QpOwotCXVwX3dyaXRlKCZpb2M0X3N1Ym1vZHVsZXNfcndzZW0pOwogCiAJLyogUmVtb3ZlIHN1Ym1vZHVsZSBmb3IgZWFjaCBJT0M0ICovCiAJaWYgKCFpcy0+aXNfcmVtb3ZlKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCi0JZG93bl9yZWFkKCZpb2M0X2RldmljZXNfcndzZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaWRkLCAmaW9jNF9kZXZpY2VzLCBpZGRfbGlzdCkgewogCQlpZiAoaXMtPmlzX3JlbW92ZShpZGQpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0xMTMsNyArMTA4LDggQEAKIAkJCSAgICAgICBwY2lfbmFtZShpZGQtPmlkZF9wZGV2KSk7CiAJCX0KIAl9Ci0JdXBfcmVhZCgmaW9jNF9kZXZpY2VzX3J3c2VtKTsKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpb2M0X211dGV4KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKgpAQCAtMzEyLDEyICszMDgsMTEgQEAKIAkvKiBUcmFjayBQQ0ktZGV2aWNlIHNwZWNpZmljIGRhdGEgKi8KIAlpZGQtPmlkZF9zZXJpYWxfZGF0YSA9IE5VTEw7CiAJcGNpX3NldF9kcnZkYXRhKGlkZC0+aWRkX3BkZXYsIGlkZCk7Ci0JZG93bl93cml0ZSgmaW9jNF9kZXZpY2VzX3J3c2VtKTsKKworCW11dGV4X2xvY2soJmlvYzRfbXV0ZXgpOwogCWxpc3RfYWRkKCZpZGQtPmlkZF9saXN0LCAmaW9jNF9kZXZpY2VzKTsKLQl1cF93cml0ZSgmaW9jNF9kZXZpY2VzX3J3c2VtKTsKIAogCS8qIEFkZCB0aGlzIElPQzQgdG8gYWxsIHN1Ym1vZHVsZXMgKi8KLQlkb3duX3JlYWQoJmlvYzRfc3VibW9kdWxlc19yd3NlbSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpcywgJmlvYzRfc3VibW9kdWxlcywgaXNfbGlzdCkgewogCQlpZiAoaXMtPmlzX3Byb2JlICYmIGlzLT5pc19wcm9iZShpZGQpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0zMjcsNyArMzIyLDcgQEAKIAkJCSAgICAgICBwY2lfbmFtZShpZGQtPmlkZF9wZGV2KSk7CiAJCX0KIAl9Ci0JdXBfcmVhZCgmaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKKwltdXRleF91bmxvY2soJmlvYzRfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTM1MSw3ICszNDYsNyBAQAogCWlkZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCS8qIFJlbW92ZSB0aGlzIElPQzQgZnJvbSBhbGwgc3VibW9kdWxlcyAqLwotCWRvd25fcmVhZCgmaW9jNF9zdWJtb2R1bGVzX3J3c2VtKTsKKwltdXRleF9sb2NrKCZpb2M0X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlzLCAmaW9jNF9zdWJtb2R1bGVzLCBpc19saXN0KSB7CiAJCWlmIChpcy0+aXNfcmVtb3ZlICYmIGlzLT5pc19yZW1vdmUoaWRkKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMzYxLDcgKzM1Niw3IEBACiAJCQkgICAgICAgcGNpX25hbWUoaWRkLT5pZGRfcGRldikpOwogCQl9CiAJfQotCXVwX3JlYWQoJmlvYzRfc3VibW9kdWxlc19yd3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpb2M0X211dGV4KTsKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzICovCiAJaW91bm1hcChpZGQtPmlkZF9taXNjX3JlZ3MpOwpAQCAtMzc3LDkgKzM3Miw5IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCiAJLyogUmVtb3ZlIGFuZCBmcmVlIGRyaXZlciBkYXRhICovCi0JZG93bl93cml0ZSgmaW9jNF9kZXZpY2VzX3J3c2VtKTsKKwltdXRleF9sb2NrKCZpb2M0X211dGV4KTsKIAlsaXN0X2RlbCgmaWRkLT5pZGRfbGlzdCk7Ci0JdXBfd3JpdGUoJmlvYzRfZGV2aWNlc19yd3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpb2M0X211dGV4KTsKIAlrZnJlZShpZGQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS5jCmluZGV4IDc5MWM0ZGMuLjk0ZjVlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS5jCkBAIC05MCw3ICs5MCw3IEBACiAJaW50CQkJdmFsdWU7CiAJc3RydWN0IHNwaV9kcml2ZXIJKmRydiA9IHRvX3NwaV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCi0JaWYgKCFkcnYtPnN1c3BlbmQpCisJaWYgKCFkcnYgfHwgIWRydi0+c3VzcGVuZCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBzdXNwZW5kIHdpbGwgc3RvcCBpcnFzIGFuZCBkbWE7IG5vIG1vcmUgaS9vICovCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpbnQJCQl2YWx1ZTsKIAlzdHJ1Y3Qgc3BpX2RyaXZlcgkqZHJ2ID0gdG9fc3BpX2RyaXZlcihkZXYtPmRyaXZlcik7CiAKLQlpZiAoIWRydi0+cmVzdW1lKQorCWlmICghZHJ2IHx8ICFkcnYtPnJlc3VtZSkKIAkJcmV0dXJuIDA7CiAKIAkvKiByZXN1bWUgbWF5IHJlc3RhcnQgdGhlIGkvbyBxdWV1ZSAqLwpAQCAtNDQ5LDcgKzQ0OSw2IEBACiB7CiAJKHZvaWQpIGRldmljZV9mb3JfZWFjaF9jaGlsZChtYXN0ZXItPmNkZXYuZGV2LCBOVUxMLCBfX3VucmVnaXN0ZXIpOwogCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKCZtYXN0ZXItPmNkZXYpOwotCW1hc3Rlci0+Y2Rldi5kZXYgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3BpX3VucmVnaXN0ZXJfbWFzdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90Yy96cy5jIGIvZHJpdmVycy90Yy96cy5jCmluZGV4IDY3NTZkMGYuLjJkZmZhOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGMvenMuYworKysgYi9kcml2ZXJzL3RjL3pzLmMKQEAgLTE4Niw4ICsxODYsNiBAQAogI2RlZmluZSBSU19TVFJPQkVfVElNRSAxMAogI2RlZmluZSBSU19JU1JfUEFTU19MSU1JVCAyNTYKIAotI2RlZmluZSBfSU5MSU5FXyBpbmxpbmUKLQogc3RhdGljIHZvaWQgcHJvYmVfc2Njcyh2b2lkKTsKIHN0YXRpYyB2b2lkIGNoYW5nZV9zcGVlZChzdHJ1Y3QgZGVjX3NlcmlhbCAqaW5mbyk7CiBzdGF0aWMgdm9pZCByc193YWl0X3VudGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOwpAQCAtMzQ0LDE0ICszNDIsMTMgQEAKICAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBzY2hlZHVsZQogICogcHJvY2Vzc2luZyBpbiB0aGUgc29mdHdhcmUgaW50ZXJydXB0IHBvcnRpb24gb2YgdGhlIGRyaXZlci4KICAqLwotc3RhdGljIF9JTkxJTkVfIHZvaWQgcnNfc2NoZWRfZXZlbnQoc3RydWN0IGRlY19zZXJpYWwgKmluZm8sIGludCBldmVudCkKK3N0YXRpYyB2b2lkIHJzX3NjaGVkX2V2ZW50KHN0cnVjdCBkZWNfc2VyaWFsICppbmZvLCBpbnQgZXZlbnQpCiB7CiAJaW5mby0+ZXZlbnQgfD0gMSA8PCBldmVudDsKIAl0YXNrbGV0X3NjaGVkdWxlKCZpbmZvLT50bGV0KTsKIH0KIAotc3RhdGljIF9JTkxJTkVfIHZvaWQgcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgZGVjX3NlcmlhbCAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IGRlY19zZXJpYWwgKmluZm8sIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CiAJdW5zaWduZWQgY2hhciBjaCwgc3RhdCwgZmxhZzsKQEAgLTQ0MSw3ICs0MzgsNyBAQAogCQlyc19zY2hlZF9ldmVudChpbmZvLCBSU19FVkVOVF9XUklURV9XQUtFVVApOwogfQogCi1zdGF0aWMgX0lOTElORV8gdm9pZCBzdGF0dXNfaGFuZGxlKHN0cnVjdCBkZWNfc2VyaWFsICppbmZvKQorc3RhdGljIHZvaWQgc3RhdHVzX2hhbmRsZShzdHJ1Y3QgZGVjX3NlcmlhbCAqaW5mbykKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IDg1ZGFjYzkuLjdmZGJjNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvS2NvbmZpZwpAQCAtMTAsNiArMTAsNyBAQAogY29uZmlnIFVTQl9BUkNIX0hBU19IQ0QKIAlib29sZWFuCiAJZGVmYXVsdCB5IGlmIFVTQl9BUkNIX0hBU19PSENJCisJZGVmYXVsdCB5IGlmIFVTQl9BUkNIX0hBU19FSENJCiAJZGVmYXVsdCB5IGlmIEFSTQkJCQkjIFNMLTgxMQogCWRlZmF1bHQgUENJCiAKQEAgLTIyLDYgKzIzLDcgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9MSDdBNDA0CiAJZGVmYXVsdCB5IGlmIEFSQ0hfUzNDMjQxMAogCWRlZmF1bHQgeSBpZiBQWEEyN3gKKwlkZWZhdWx0IHkgaWYgQVJDSF9BVDkxUk05MjAwCiAJIyBQUEM6CiAJZGVmYXVsdCB5IGlmIFNUQjAzeHh4CiAJZGVmYXVsdCB5IGlmIFBQQ19NUEM1Mnh4CkBAIC0zMCw2ICszMiwxMyBAQAogCSMgbW9yZToKIAlkZWZhdWx0IFBDSQogCisjIHNvbWUgbm9uLVBDSSBoY2RzIGltcGxlbWVudCBFSENJCitjb25maWcgVVNCX0FSQ0hfSEFTX0VIQ0kKKwlib29sZWFuCisJZGVmYXVsdCB5IGlmIFBQQ184M3h4CisJZGVmYXVsdCB5IGlmIFNPQ19BVTEyMDAKKwlkZWZhdWx0IFBDSQorCiAjIEFSTSBTQTExMTEgY2hpcHMgaGF2ZSBhIG5vbi1QQ0kgYmFzZWQgIk9IQ0ktY29tcGF0aWJsZSIgVVNCIGhvc3QgaW50ZXJmYWNlLgogY29uZmlnIFVTQgogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBIb3N0LXNpZGUgVVNCIgpAQCAtNzgsOCArODcsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy91c2IvbWVkaWEvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3VzYi9uZXQvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3VzYi9tb24vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKaW5kZXggMzZlNDc2ZC4uOWI3ZDk3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTE1LDEwICsxNSw5IEBACiBvYmotJChDT05GSUdfVVNCX1VIQ0lfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9TTDgxMV9IQ0QpCSs9IGhvc3QvCiBvYmotJChDT05GSUdfRVRSQVhfVVNCX0hPU1QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfVVNCX09IQ0lfQVQ5MSkJKz0gaG9zdC8KIAogb2JqLSQoQ09ORklHX1VTQl9BQ00pCQkrPSBjbGFzcy8KLW9iai0kKENPTkZJR19VU0JfQVVESU8pCQkrPSBjbGFzcy8KLW9iai0kKENPTkZJR19VU0JfTUlESSkJCSs9IGNsYXNzLwogb2JqLSQoQ09ORklHX1VTQl9QUklOVEVSKQkrPSBjbGFzcy8KIAogb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFKQkrPSBzdG9yYWdlLwpAQCAtMzYsMTkgKzM1LDYgQEAKIG9iai0kKENPTkZJR19VU0JfQUNFQ0FEKQkrPSBpbnB1dC8KIG9iai0kKENPTkZJR19VU0JfWFBBRCkJCSs9IGlucHV0LwogCi1vYmotJChDT05GSUdfVVNCX0RBQlVTQikJKz0gbWVkaWEvCi1vYmotJChDT05GSUdfVVNCX0RTQlIpCQkrPSBtZWRpYS8KLW9iai0kKENPTkZJR19VU0JfRVQ2MVgyNTEpCSs9IG1lZGlhLwotb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pCSs9IG1lZGlhLwotb2JqLSQoQ09ORklHX1VTQl9LT05JQ0FXQykJKz0gbWVkaWEvCi1vYmotJChDT05GSUdfVVNCX09WNTExKQkJKz0gbWVkaWEvCi1vYmotJChDT05GSUdfVVNCX1BXQykJCSs9IG1lZGlhLwotb2JqLSQoQ09ORklHX1VTQl9TRTQwMSkJCSs9IG1lZGlhLwotb2JqLSQoQ09ORklHX1VTQl9TTjlDMTAyKQkrPSBtZWRpYS8KLW9iai0kKENPTkZJR19VU0JfU1RWNjgwKQkrPSBtZWRpYS8KLW9iai0kKENPTkZJR19VU0JfVklDQU0pCQkrPSBtZWRpYS8KLW9iai0kKENPTkZJR19VU0JfVzk5NjhDRikJKz0gbWVkaWEvCi0KIG9iai0kKENPTkZJR19VU0JfQ0FUQykJCSs9IG5ldC8KIG9iai0kKENPTkZJR19VU0JfS0FXRVRIKQkrPSBuZXQvCiBvYmotJChDT05GSUdfVVNCX1BFR0FTVVMpCSs9IG5ldC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCmluZGV4IGVmMTA1YTkuLjNhOTEwMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZwpAQCAtNCw1MyArNCw2IEBACiBjb21tZW50ICJVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBVU0IKIAotY29uZmlnIE9CU09MRVRFX09TU19VU0JfRFJJVkVSCi0JYm9vbCAiT2Jzb2xldGUgT1NTIFVTQiBkcml2ZXJzIgotCWRlcGVuZHMgb24gVVNCICYmIFNPVU5ECi0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgb2Jzb2xldGUgVVNCIEF1ZGlvIGFuZCBNaWRpCi0JICBkcml2ZXJzIHRoYXQgYXJlIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCBpbiB0aGUgbmVhciBmdXR1cmUgc2luY2UKLQkgIHRoZXJlIGFyZSBBTFNBIGRyaXZlcnMgZm9yIHRoZSBzYW1lIGhhcmR3YXJlLgotCi0JICBQbGVhc2UgY29udGFjdCBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+IGlmIHlvdSBoYWQgdG8KLQkgIHNheSBZIGhlcmUgYmVjYXVzZSBvZiBtaXNzaW5nIHN1cHBvcnQgaW4gdGhlIEFMU0EgZHJpdmVycy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIFVTQl9BVURJTwotCXRyaXN0YXRlICJVU0IgQXVkaW8gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBTT1VORCAmJiBPQlNPTEVURV9PU1NfVVNCX0RSSVZFUgotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBVU0IgYXVkaW8gZXF1aXBtZW50IHN1Y2ggYXMKLQkgIHNwZWFrZXJzIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gWW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSB1c2UKLQkgIHRoZSBPU1Mgc291bmQgZHJpdmVyOyBBTFNBIGhhcyBpdHMgb3duIG9wdGlvbiBmb3IgdXNiIGF1ZGlvIHN1cHBvcnQuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF1ZGlvLgotCi1jb25maWcgVVNCX01JREkKLQl0cmlzdGF0ZSAiVVNCIE1JREkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBTT1VORCAmJiBPQlNPTEVURV9PU1NfVVNCX0RSSVZFUgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFVTQiBNSURJIGRldmljZSB0byB5b3VyCi0JICBjb21wdXRlcidzIFVTQiBwb3J0LiAgWW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSB1c2UgdGhlIE9TUwotCSAgc291bmQgc3lzdGVtOyBVU0IgTUlESSBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgYnkgQUxTQSdzIFVTQgotCSAgYXVkaW8gZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgZGV2aWNlcyB0aGF0IGNvbXBseSB3aXRoCi0JICAnVW5pdmVyc2FsIFNlcmlhbCBCdXMgRGV2aWNlIENsYXNzIERlZmluaXRpb24gZm9yIE1JREkgRGV2aWNlJy4KLQotCSAgVGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZSBrbm93biB0byB3b3JrOgotCSAgKiBTdGVpbmJlcmcgVVNCMk1JREkKLQkgICogUm9sYW5kIE1QVTY0Ci0JICAqIFJvbGFuZCBQQy0zMDAKLQkgICogUm9sYW5kIFNDODg1MAotCSAgKiBSb2xhbmQgVU0tMQotCSAgKiBSb2xhbmQgVU0tMgotCSAgKiBSb2xhbmQgVUEtMTAwCi0JICAqIFlhbWFoYSBNVTEwMDAKLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiLW1pZGkuCi0KIGNvbmZpZyBVU0JfQUNNCiAJdHJpc3RhdGUgIlVTQiBNb2RlbSAoQ0RDIEFDTSkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQppbmRleCAyMjk0NzEyLi5jYzM5MWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQpAQCAtNCw2ICs0LDQgQEAKICMKIAogb2JqLSQoQ09ORklHX1VTQl9BQ00pCQkrPSBjZGMtYWNtLm8KLW9iai0kKENPTkZJR19VU0JfQVVESU8pCQkrPSBhdWRpby5vCi1vYmotJChDT05GSUdfVVNCX01JREkpCQkrPSB1c2ItbWlkaS5vCiBvYmotJChDT05GSUdfVVNCX1BSSU5URVIpCSs9IHVzYmxwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9hdWRpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWQ5ZWU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqCWF1ZGlvLmMgIC0tICBVU0IgQXVkaW8gQ2xhc3MgZHJpdmVyCi0gKgotICoJQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0Ci0gKgkgICAgQWxhbiBDb3ggKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51aykKLSAqCSAgICBUaG9tYXMgU2FpbGVyIChzYWlsZXJAaWZlLmVlLmV0aHouY2gpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBEZWJ1Z2dpbmc6Ci0gKiAJVXNlIHRoZSAnbHN1c2InIHV0aWxpdHkgdG8gZHVtcCB0aGUgZGVzY3JpcHRvcnMuCi0gKgotICogMTk5OS0wOS0wNzogIEFsYW4gQ294Ci0gKgkJUGFyc2luZyBBdWRpbyBkZXNjcmlwdG9yIHBhdGNoCi0gKiAxOTk5LTA5LTA4OiAgVGhvbWFzIFNhaWxlcgotICoJCUFkZGVkIE9TUyBjb21wYXRpYmxlIGRhdGEgaW8gZnVuY3Rpb25zOyBib3RoIHBhcnRzIG9mIHRoZQotICoJCWRyaXZlciByZW1haW4gdG8gYmUgZ2x1ZWQgdG9nZXRoZXIKLSAqIDE5OTktMDktMTA6ICBUaG9tYXMgU2FpbGVyCi0gKgkJQmVhdXRpZmllZCB0aGUgZHJpdmVyLiBBZGRlZCBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb25zLgotICoJCVN0aWxsIG5vdCBwcm9wZXJseSBnbHVlZCB3aXRoIHRoZSBwYXJzaW5nIGNvZGUuCi0gKgkJVGhlIHBhcnNpbmcgY29kZSBzZWVtcyB0byBoYXZlIGl0cyBwcm9ibGVtcyBidHcsCi0gKgkJU2luY2UgaXQgcGFyc2VzIGFsbCBhdmFpbGFibGUgY29uZmlncyBidXQgZG9lc24ndAotICoJCXN0b3JlIHdoaWNoIGlmYWNlL2FsdHNldHRpbmcgYmVsb25ncyB0byB3aGljaCBjb25maWcuCi0gKiAxOTk5LTA5LTIwOiAgVGhvbWFzIFNhaWxlcgotICoJCVRocmV3IG91dCBBbGFuJ3MgcGFyc2luZyBjb2RlIGFuZCBpbXBsZW1lbnRlZCBteSBvd24gb25lLgotICoJCVlvdSBjYW5ub3QgcmVhc29ubmFibHkgbGluZWFybHkgcGFyc2UgYXVkaW8gZGVzY3JpcHRvcnMsCi0gKgkJZXNwZWNpYWxseSB0aGUgQXVkaW9DbGFzcyBkZXNjcmlwdG9ycyBoYXZlIHRvIGJlIGNvbnNpZGVyZWQKLSAqCQlwb2ludGVyIGxpc3RzLiBNaXhlciBwYXJzaW5nIHVudGVzdGVkLCBkdWUgdG8gbGFjayBvZiBkZXZpY2UuCi0gKgkJRmlyc3Qgc3RhYiBhdCBzeW5jaCBwaXBlIGltcGxlbWVudGF0aW9uLCB0aGUgRGFsbGFzIFVTQiBEQUMKLSAqCQl3YW50cyB0byB1c2UgYW4gQXN5bmNoIG91dCBwaXBlLiB1c2JfYXVkaW9fc3RhdGUgbm93IGJhc2ljYWxseQotICoJCW9ubHkgY29udGFpbnMgbGlzdHMgb2YgbWl4ZXIgYW5kIHdhdmUgZGV2aWNlcy4gV2UgY2FuIHRoZXJlZm9yZQotICoJCW5vdyBoYXZlIG11bHRpcGxlIG1peGVyL3dhdmUgZGV2aWNlcyBwZXIgVVNCIGRldmljZS4KLSAqIDE5OTktMTAtMjg6ICBUaG9tYXMgU2FpbGVyCi0gKgkJQ29udmVydGVkIHRvIFVSQiBBUEkuIEZpeGVkIGEgdGFza3N0YXRlL3dha2V1cCBzZW1hbnRpY3MgbWlzdGFrZQotICoJCXRoYXQgbWFkZSB0aGUgZHJpdmVyIGNvbnN1bWUgYWxsIGF2YWlsYWJsZSBDUFUgY3ljbGVzLgotICoJCU5vdyBydW5zIHN0YWJsZSBvbiBVSENJLUFjaGVyL0ZsaWVnbC9TYWlsZXIuCi0gKiAxOTk5LTEwLTMxOiAgVGhvbWFzIFNhaWxlcgotICoJCUF1ZGlvIGNhbiBub3cgYmUgdW5sb2FkZWQgaWYgaXQgaXMgbm90IGluIHVzZSBieSBhbnkgbWl4ZXIKLSAqCQlvciBkc3AgY2xpZW50IChmb3JtZXJseSB5b3UgaGFkIHRvIGRpc2Nvbm5lY3QgdGhlIGF1ZGlvIGRldmljZXMKLSAqCQlmcm9tIHRoZSBVU0IgcG9ydCkKLSAqCQlGaW5hbGx5LCBhYm91dCB0aHJlZSBtb250aHMgYWZ0ZXIgb3JkZXJpbmcsIG15ICJNYXh4dHJvIFNQSzIyMiIKLSAqCQlzcGVha2VycyBhcnJpdmVkLCBpc24ndCBkaXNkYXRhIGEgZ3JlYXQgbWFpbCBvcmRlciBjb21wYW55IDgtKQotICoJCVBhcnNlIGNsYXNzIHNwZWNpZmljIGVuZHBvaW50IGRlc2NyaXB0b3Igb2YgdGhlIGF1ZGlvc3RyZWFtaW5nCi0gKgkJaW50ZXJmYWNlcyBhbmQgdGFrZSB0aGUgZW5kcG9pbnQgYXR0cmlidXRlcyBmcm9tIHRoZXJlLgotICoJCVVuYmVsaWV2YWJseSwgdGhlIFBoaWxpcHMgVVNCIERBQyBoYXMgYSBzYW1wbGluZyByYXRlIHJhbmdlCi0gKgkJb2Ygb3ZlciBhIGRlY2FkZSwgeWV0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNhbXBsaW5nIHJhdGUgY29udHJvbCEKLSAqCQlObyB3b25kZXIgaXQgc291bmRzIHNvIGJhZCwgaGFzIHZlcnkgYXVkaWJsZSBzYW1wbGluZyByYXRlCi0gKgkJY29udmVyc2lvbiBkaXN0b3J0aW9uLiBEb24ndCB0cnkgdG8gbGlzdGVuIHRvIGl0IHVzaW5nCi0gKgkJZGVjZW50IGhlYWRwaG9uZXMhCi0gKgkJIkxldCdzIG1ha2UgdGhpbmdzIGJldHRlciIgLT4gYnV0IHBsZWFzZSBQaGlsaXBzIHN0YXJ0IHdpdGggeW91cgotICoJCW93biBzdHVmZiEhISEKLSAqIDE5OTktMTEtMDI6ICBUaG9tYXMgU2FpbGVyCi0gKgkJSXQgdGFrZXMgdGhlIFBoaWxpcHMgYm94ZXMgc2V2ZXJhbCBzZWNvbmRzIHRvIGFjcXVpcmUgc3luY2hyb25pc2F0aW9uCi0gKgkJdGhhdCBtZWFucyB0aGV5IHdvbid0IHBsYXkgc2hvcnQgc291bmRzLiBTaG91bGQgcHJvYmFibHkgbWFpbnRhaW4KLSAqCQl0aGUgSVNPIGRhdGFzdHJlYW0gZXZlbiBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gcGxheS4KLSAqCQlGaXggY291bnRpbmcgdGhlIHRvdGFsX2J5dGVzIGNvdW50ZXIsIFJlYWxQbGF5ZXIgRzIgZGVwZW5kcyBvbiBpdC4KLSAqIDE5OTktMTItMjA6ICBUaG9tYXMgU2FpbGVyCi0gKgkJRml4IGJhZCBidWcgaW4gY29udmVyc2lvbiB0byBwZXIgaW50ZXJmYWNlIHByb2JpbmcuCi0gKgkJZGlzY29ubmVjdCB3YXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgYXVkaW8gZGV2aWNlLAotICoJCWxlYWRpbmcgdG8gYSBwcmVtYXR1cmUgZnJlZWluZyBvZiB0aGUgYXVkaW8gc3RydWN0dXJlcwotICogMjAwMC0wNS0xMzogIFRob21hcyBTYWlsZXIKLSAqCQlJIGRvbid0IHJlbWVtYmVyIHdobyBjaGFuZ2VkIHRoZSBmaW5kX2Zvcm1hdCByb3V0aW5lLAotICogICAgICAgICAgICAgIGJ1dCB0aGUgY2hhbmdlIHdhcyBjb21wbGV0ZWx5IGJyb2tlbiBmb3IgdGhlIERhbGxhcwotICogICAgICAgICAgICAgIGNoaXAuIEFueXdheSB0YWtpbmcgc2FtcGxpbmcgcmF0ZSBpbnRvIGFjY291bnQgaW4gZmluZF9mb3JtYXQKLSAqICAgICAgICAgICAgICBpcyBiYWQgYW5kIHNob3VsZCBub3QgYmUgZG9uZSB1bmxlc3MgdGhlcmUgYXJlIGRldmljZXMgd2l0aAotICogICAgICAgICAgICAgIGNvbXBsZXRlbHkgYnJva2VuIGF1ZGlvIGRlc2NyaXB0b3JzLiBVbmxlc3Mgc29tZW9uZSBzaG93cwotICogICAgICAgICAgICAgIG1lIHN1Y2ggYSBkZXNjcmlwdG9yLCBJIHdpbGwgbm90IGFsbG93IGZpbmRfZm9ybWF0IHRvCi0gKiAgICAgICAgICAgICAgdGFrZSB0aGUgc2FtcGxpbmcgcmF0ZSBpbnRvIGFjY291bnQuCi0gKiAgICAgICAgICAgICAgQWxzbywgdGhlIGZvcm1lciBmaW5kX2Zvcm1hdCBtYWRlOgotICogICAgICAgICAgICAgIC0gbXBnMTIzIHBsYXkgbW9ubyBpbnN0ZWFkIG9mIHN0ZXJlbwotICogICAgICAgICAgICAgIC0gc294IGNvbXBsZXRlbHkgZmFpbCBmb3Igd2F2J3Mgd2l0aCBzYW1wbGUgcmF0ZXMgPCA0NC4xa0h6Ci0gKiAgICAgICAgICAgICAgICAgIGZvciB0aGUgRGFsbGFzIGNoaXAuCi0gKiAgICAgICAgICAgICAgQWxzbyBmaXggYSByYXRoZXIgbG9uZyBzdGFuZGluZyBwcm9ibGVtIHdpdGggYXBwbGljYXRpb25zIHRoYXQKLSAqICAgICAgICAgICAgICB1c2UgInNtYWxsIiB3cml0ZXMgcHJvZHVjaW5nIG5vIHNvdW5kIGF0IGFsbC4KLSAqIDIwMDAtMDUtMTU6ICBUaG9tYXMgU2FpbGVyCi0gKgkJTXkgZmVhcnMgY2FtZSB0cnVlLCB0aGUgUGhpbGlwcyBjYW1lcmEgaW5kZWVkIGhhcyBwcmV0dHkgc3R1cGlkCi0gKiAgICAgICAgICAgICAgYXVkaW8gZGVzY3JpcHRvcnMuCi0gKiAyMDAwLTA1LTE3OiAgVGhvbWFzIFNhaWxlcgotICoJCU5lbXNvZnQgc3BvdHRlZCBteSBzdHVwaWQgbGFzdCBtaW51dGUgY2hhbmdlLCB0aGFua3MKLSAqIDIwMDAtMDUtMTk6ICBUaG9tYXMgU2FpbGVyCi0gKgkJRml4ZWQgRkVBVFVSRV9VTklUIHRoaW5rb3MgZm91bmQgdGhhbmtzIHRvIHRoZSBLQyBUZWNobm9sb2d5Ci0gKiAgICAgICAgICAgICAgWHRlbmQgZGV2aWNlLiBCYXNpY2FsbHkgdGhlIGRyaXZlciB0cmVhdGVkIEZFQVRVUkVfVU5JVCdzIHNvdXJjZWQKLSAqICAgICAgICAgICAgICBieSBtb25vIHRlcm1pbmFscyBhcyBzdGVyZW8uCi0gKiAyMDAwLTA1LTIwOiAgVGhvbWFzIFNhaWxlcgotICoJCVNFTEVDVE9SIHN1cHBvcnQgKGFuZCB0aHVzIHNlbGVjdGluZyByZWNvcmQgY2hhbm5lbHMgZnJvbSB0aGUgbWl4ZXIpLgotICogICAgICAgICAgICAgIFNvbWV3aGF0IHBlY3VsaWFyIGR1ZSB0byBPU1MgaW50ZXJmYWNlIGxpbWl0YXRpb25zLiBPbmx5IHdvcmtzCi0gKiAgICAgICAgICAgICAgZm9yIGNoYW5uZWxzIHdoZXJlIGEgInNsaWRlciIgaXMgYWxyZWFkeSBpbiBmcm9udCBvZiBpdCAoaS5lLgotICogICAgICAgICAgICAgIGEgTUlYRVIgdW5pdCBvciBhIEZFQVRVUkUgdW5pdCB3aXRoIHZvbHVtZSBjYXBhYmlsaXR5KS4KLSAqIDIwMDAtMTEtMjY6ICBUaG9tYXMgU2FpbGVyCi0gKiAgICAgICAgICAgICAgV29ya2Fyb3VuZCBmb3IgRGFsbGFzIERTNDIwMS4gVGhlIERTNDIwMSB1c2VzIFBDTTggYXMgZm9ybWF0IHRhZyBmb3IKLSAqICAgICAgICAgICAgICBpdHMgOCBiaXQgbW9kZXMsIGJ1dCBleHBlY3RzIHNpZ25lZCBkYXRhIChhbmQgc2hvdWxkIHRoZXJlZm9yZSBoYXZlIHVzZWQgUENNKS4KLSAqIDIwMDEtMDMtMTA6ICBUaG9tYXMgU2FpbGVyCi0gKiAgICAgICAgICAgICAgcHJvdmlkZSBhYnMgZnVuY3Rpb24sIHByZXZlbnQgcGlja2luZyB1cCBhIGJvZ3VzIGtlcm5lbCBtYWNybwotICogICAgICAgICAgICAgIGZvciBhYnMuIEJ1ZyByZXBvcnQgYnkgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgotICogMjAwMS0wNi0xNjogIEJyeWNlIE5lc2JpdHQgPGJyeWNlQG9idmlvdXNseS5jb20+Ci0gKiAgICAgICAgICAgICAgRml4IFNORENUTF9EU1BfU1RFUkVPIEFQSSB2aW9sYXRpb24KLSAqIDIwMDMtMDQtMDg6CU9saXZlciBOZXVrdW0gKG9saXZlckBuZXVrdW0ubmFtZSk6Ci0gKgkJU2V0dGluZyBhIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBieSB1c2Jjb3JlIGFuZCBtdXN0IG5vdCBiZSBvdmVycmlkZGVuCi0gKiAyMDA0LTAyLTI3OiAgV29ya2Fyb3VuZCBmb3IgYnJva2VuIHN5bmNoIGRlc2NyaXB0b3JzCi0gKiAyMDA0LTAzLTA3OglBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgotICoJCUFkZCB1c2JfaWZudW1fdG9faWYoKSBhbmQgdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKCkgc3VwcG9ydC4KLSAqCQlVc2UgdGhlIGluLW1lbW9yeSBkZXNjcmlwdG9ycyBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlbSBmcm9tIHRoZSBkZXZpY2UuCi0gKiAKLSAqLwotCi0vKgotICogU3RyYXRlZ3k6Ci0gKgotICogQWxhbiBDb3ggYW5kIFRob21hcyBTYWlsZXIgYXJlIHN0YXJ0aW5nIHRvIGRpZyBhdCBvcHBvc2l0ZSBlbmRzIGFuZAotICogYXJlIGhvcGluZyB0byBtZWV0IGluIHRoZSBtaWRkbGUsIGp1c3QgbGlrZSB0dW5uZWwgZGlnZ2VycyA6KQotICogQWxhbiB0YWNrbGVzIHRoZSBkZXNjcmlwdG9yIHBhcnNpbmcsIFRob21hcyB0aGUgYWN0dWFsIGRhdGEgSU8gYW5kIHRoZQotICogT1NTIGNvbXBhdGlibGUgaW50ZXJmYWNlLgotICoKLSAqIERhdGEgSU8gaW1wbGVtZW50YXRpb24gaXNzdWVzCi0gKgotICogQSBtbWFwJ2FibGUgcmluZyBidWZmZXIgcGVyIGRpcmVjdGlvbiBpcyBpbXBsZW1lbnRlZCwgYmVjYXVzZQotICogYWxtb3N0IGV2ZXJ5IE9TUyBhcHAgZXhwZWN0cyBpdC4gSXQgaXMgaG93ZXZlciBpbXByYWN0aWNhbCB0bwotICogdHJhbnNtaXQvcmVjZWl2ZSBVU0IgZGF0YSBkaXJlY3RseSBpbnRvIGFuZCBvdXQgb2YgdGhlIHJpbmcgYnVmZmVyLAotICogZHVlIHRvIGFsaWdubWVudCBhbmQgc3luY2hyb25pc2F0aW9uIGlzc3Vlcy4gSW5zdGVhZCwgdGhlIHJpbmcgYnVmZmVyCi0gKiBmZWVkcyBhIGNvbnN0YW50IHRpbWUgZGVsYXkgbGluZSB0aGF0IGhhbmRsZXMgdGhlIFVTQiBpc3N1ZXMuCi0gKgotICogTm93IHdlIGZpcnN0IHRyeSB0byBmaW5kIGFuIGFsdGVybmF0ZSBzZXR0aW5nIHRoYXQgZXhhY3RseSBtYXRjaGVzCi0gKiB0aGUgc2FtcGxlIGZvcm1hdCByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIElmIHdlIGZpbmQgb25lLCB3ZSBkbyBub3QKLSAqIG5lZWQgdG8gcGVyZm9ybSBhbnkgc2FtcGxlIHJhdGUgY29udmVyc2lvbnMuIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nCi0gKiBhbHRzZXR0aW5nLCB3ZSBjaG9vc2UgdGhlIGNsb3Nlc3Qgb25lIGFuZCBwZXJmb3JtIHNhbXBsZSBmb3JtYXQKLSAqIGNvbnZlcnNpb25zLiBXZSBuZXZlciBkbyBzYW1wbGUgcmF0ZSBjb252ZXJzaW9uOyB0aGVzZSBhcmUgdG9vCi0gKiBleHBlbnNpdmUgdG8gYmUgcGVyZm9ybWVkIGluIHRoZSBrZXJuZWwuCi0gKgotICogQ3VycmVudCBzdGF0dXM6IG5vIGtub3duIEhDRC1zcGVjaWZpYyBpc3N1ZXMuCi0gKgotICogR2VuZXJhbGx5OiBEdWUgdG8gdGhlIGJyb2tlbm5lc3Mgb2YgdGhlIEF1ZGlvIENsYXNzIHNwZWMKLSAqIGl0IHNlZW1zIGdlbmVyYWxseSBpbXBvc3NpYmxlIHRvIHdyaXRlIGEgZ2VuZXJpYyBBdWRpbyBDbGFzcyBkcml2ZXIsCi0gKiBzbyBhIHJlYXNvbmFibGUgZHJpdmVyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIGFjdHVhbGx5Ci0gKiB1c2VkLgotICoKLSAqIFBhcnNpbmcgaW1wbGVtZW50YXRpb24gaXNzdWVzCi0gKgotICogT25lIGNhbm5vdCByZWFzb25hYmx5IHBhcnNlIHRoZSBBdWRpb0NsYXNzIGRlc2NyaXB0b3JzIGxpbmVhcmx5LgotICogVGhlcmVmb3JlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGZlYXR1cmVzIHJvdXRpbmVzIHRvIGxvb2sKLSAqIGZvciBhIHNwZWNpZmljIGRlc2NyaXB0b3IgaW4gdGhlIGRlc2NyaXB0b3IgbGlzdC4KLSAqCi0gKiBIb3cgZG9lcyB0aGUgcGFyc2luZyB3b3JrPyBGaXJzdCwgYWxsIGludGVyZmFjZXMgYXJlIHNlYXJjaGVkCi0gKiBmb3IgYW4gQXVkaW9Db250cm9sIGNsYXNzIGludGVyZmFjZS4gSWYgZm91bmQsIHRoZSBjb25maWcgZGVzY3JpcHRvcgotICogdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgc2VhcmNoZWQgYW5kCi0gKiB0aGUgSEVBREVSIGRlc2NyaXB0b3IgaXMgZm91bmQuIEl0IGNvbnRhaW5zIGEgbGlzdCBvZgotICogYWxsIEF1ZGlvU3RyZWFtaW5nIGFuZCBNSURJU3RyZWFtaW5nIGRldmljZXMuIFRoaXMgbGlzdCBpcyB0aGVuIHdhbGtlZCwKLSAqIGFuZCBhbGwgQXVkaW9TdHJlYW1pbmcgaW50ZXJmYWNlcyBhcmUgY2xhc3NpZmllZCBpbnRvIGlucHV0IGFuZCBvdXRwdXQKLSAqIGludGVyZmFjZXMgKGFjY29yZGluZyB0byB0aGUgZW5kcG9pbnQwIGRpcmVjdGlvbiBpbiBhbHRzZXR0aW5nMSkgKE1JRElTdHJlYW1pbmcKLSAqIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkKS4gVGhlIGlucHV0ICYgb3V0cHV0IGxpc3QgaXMgdGhlbiB1c2VkCi0gKiB0byBncm91cCBpbnB1dHMgYW5kIG91dHB1dHMgdG9nZXRoZXIgYW5kIGlzc3VlZCBwYWlyd2lzZSB0byB0aGUKLSAqIEF1ZGlvU3RyZWFtaW5nIGNsYXNzIHBhcnNlci4gRmluYWxseSwgYWxsIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycwotICogYXJlIHdhbGtlZCBhbmQgaXNzdWVkIHRvIHRoZSBtaXhlciBjb25zdHJ1Y3Rpb24gcm91dGluZS4KLSAqCi0gKiBUaGUgQXVkaW9TdHJlYW1pbmcgcGFyc2VyIHNpbXBseSBlbnVtZXJhdGVzIGFsbCBhbHRzZXR0aW5ncyBiZWxvbmdpbmcKLSAqIHRvIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLiBJdCBsb29rcyBmb3IgQVNfR0VORVJBTCBhbmQgRk9STUFUX1RZUEUKLSAqIGNsYXNzIHNwZWNpZmljIGRlc2NyaXB0b3JzIHRvIGV4dHJhY3QgdGhlIHNhbXBsZSBmb3JtYXQvc2FtcGxlIHJhdGUKLSAqIGRhdGEuIE9ubHkgc2FtcGxlIGZvcm1hdCB0eXBlcyBQQ00gYW5kIFBDTTggYXJlIHN1cHBvcnRlZCByaWdodCBub3csIGFuZAotICogb25seSBGT1JNQVRfVFlQRV9JIGlzIGhhbmRsZWQuIFRoZSBpc29jaHJvbm91cyBkYXRhIGVuZHBvaW50IG5lZWRzIHRvCi0gKiBiZSB0aGUgZmlyc3QgZW5kcG9pbnQgb2YgdGhlIGludGVyZmFjZSwgYW5kIHRoZSBvcHRpb25hbCBzeW5jaHJvbmlzYXRpb24KLSAqIGlzb2Nocm9ub3VzIGVuZHBvaW50IHRoZSBzZWNvbmQgb25lLgotICoKLSAqIE1peGVyIGNvbnN0cnVjdGlvbiB3b3JrcyBhcyBmb2xsb3dzOiBUaGUgdmFyaW91cyBURVJNSU5BTCBhbmQgVU5JVAotICogZGVzY3JpcHRvcnMgc3BhbiBhIHRyZWUgZnJvbSB0aGUgcm9vdCAoT1VUUFVUX1RFUk1JTkFMKSB0aHJvdWdoIHRoZQotICogaW50ZXJtZWRpYXRlIG5vZGVzIChVTklUcykgdG8gdGhlIGxlYXZlcyAoSU5QVVRfVEVSTUlOQUwpLiBXZSB3YWxrCi0gKiB0aGF0IHRyZWUgaW4gYSBkZXB0aCBmaXJzdCBtYW5uZXIuIEZFQVRVUkVfVU5JVHMgbWF5IGNvbnRyaWJ1dGUgdm9sdW1lLAotICogYmFzcyBhbmQgdHJlYmxlIHNsaWRlcnMgdG8gdGhlIG1peGVyLCBNSVhFUl9VTklUcyB2b2x1bWUgc2xpZGVycy4KLSAqIFRoZSB0ZXJtaW5hbCB0eXBlIGVuY29kZWQgaW4gdGhlIElOUFVUX1RFUk1JTkFMcyBmZWVkcyBhIGhldXJpc3RpYwotICogdG8gZGV0ZXJtaW5lICJtZWFuaW5nZnVsIiBPU1Mgc2xpZGVyIG51bWJlcnMsIGhvd2V2ZXIgd2Ugd2lsbCBzZWUKLSAqIGhvdyB3ZWxsIHRoaXMgd29ya3MgaW4gcHJhY3RpY2UuIE90aGVyIGZlYXR1cmVzIGFyZSBub3QgdXNlZCBhdCB0aGUKLSAqIG1vbWVudCwgdGhleSBzZWVtIGxlc3Mgb2Z0ZW4gdXNlZC4gQWxzbywgaXQgc2VlbXMgZGlmZmljdWx0IGF0IGxlYXN0Ci0gKiB0byBjb25zdHJ1Y3QgcmVjb3JkaW5nIHNvdXJjZSBzd2l0Y2hlcyBmcm9tIFNFTEVDVE9SX1VOSVRzLCBidXQKLSAqIHNpbmNlIHRoZXJlIGFyZSBub3QgbWFueSBVU0IgQURDJ3MgYXZhaWxhYmxlLCB3ZSBsZWF2ZSB0aGF0IGZvciBsYXRlci4KLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc291bmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgImF1ZGlvLmgiCi0KLS8qCi0gKiBWZXJzaW9uIEluZm9ybWF0aW9uCi0gKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjAuMCIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkiCi0jZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQXVkaW8gQ2xhc3MgZHJpdmVyIgotCi0jZGVmaW5lIEFVRElPX0RFQlVHIDEKLQotI2RlZmluZSBTTkRfREVWX0RTUDE2ICAgNQotCi0jZGVmaW5lIGRwcmludGsoeCkKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBMaW5rZWQgbGlzdCBvZiBhbGwgYXVkaW8gZGV2aWNlcy4uLgotICovCi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBhdWRpb2RldnMgPSBMSVNUX0hFQURfSU5JVChhdWRpb2RldnMpOwotc3RhdGljIERFQ0xBUkVfTVVURVgob3Blbl9zZW0pOwotCi0vKgotICogd2FpdCBxdWV1ZSBmb3IgcHJvY2Vzc2VzIHdhbnRpbmcgdG8gb3BlbiBhbiBVU0IgYXVkaW8gZGV2aWNlCi0gKi8KLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvcGVuX3dhaXQpOwotCi0KLSNkZWZpbmUgTUFYRk9STUFUUyAgICAgICAgTUFYX0FMVAotI2RlZmluZSBETUFCVUZTSElGVCAgICAgICAxNyAgLyogMTI4ayB3b3J0aCBvZiBETUEgYnVmZmVyICovCi0jZGVmaW5lIE5SU0dCVUYgICAgICAgICAgICgxVTw8KERNQUJVRlNISUZULVBBR0VfU0hJRlQpKQotCi0vKgotICogVGhpcyBpbmZsdWVuY2VzOgotICogLSBMYXRlbmN5Ci0gKiAtIEludGVycnVwdCByYXRlCi0gKiAtIFN5bmNocm9uaXNhdGlvbiBiZWhhdmlvdXIKLSAqIERvbid0IHRvdWNoIHRoaXMgaWYgeW91IGRvbid0IHVuZGVyc3RhbmQgYWxsIG9mIHRoZSBhYm92ZS4KLSAqLwotI2RlZmluZSBERVNDRlJBTUVTICA1Ci0jZGVmaW5lIFNZTkNGUkFNRVMgIERFU0NGUkFNRVMKLQotI2RlZmluZSBNSVhGTEdfU1RFUkVPSU4gICAxCi0jZGVmaW5lIE1JWEZMR19TVEVSRU9PVVQgIDIKLQotc3RydWN0IG1peGVyY2hhbm5lbCB7Ci0JX191MTYgdmFsdWU7Ci0JX191MTYgb3NzY2hhbm5lbDsgIC8qIG51bWJlciBvZiB0aGUgT1NTIGNoYW5uZWwgKi8KLQlfX3MxNiBtaW52YWwsIG1heHZhbDsKLQlfX3UxNiBzbGN0dW5pdGlkOwotCV9fdTggdW5pdGlkOwotCV9fdTggc2VsZWN0b3I7Ci0JX191OCBjaG51bTsKLQlfX3U4IGZsYWdzOwotfTsKLQotc3RydWN0IGF1ZGlvZm9ybWF0IHsKLQl1bnNpZ25lZCBpbnQgZm9ybWF0OwotCXVuc2lnbmVkIGludCBzcmF0ZWxvOwotCXVuc2lnbmVkIGludCBzcmF0ZWhpOwotCXVuc2lnbmVkIGNoYXIgYWx0c2V0dGluZzsKLQl1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXM7Ci19OwotCi1zdHJ1Y3QgZG1hYnVmIHsKLQkvKiBidWZmZXIgZGF0YSBmb3JtYXQgKi8KLQl1bnNpZ25lZCBpbnQgZm9ybWF0OwotCXVuc2lnbmVkIGludCBzcmF0ZTsKLQkvKiBwaHlzaWNhbCBidWZmZXIgKi8KLQl1bnNpZ25lZCBjaGFyICpzZ2J1ZltOUlNHQlVGXTsKLQl1bnNpZ25lZCBidWZzaXplOwotCXVuc2lnbmVkIG51bWZyYWc7Ci0JdW5zaWduZWQgZnJhZ3NoaWZ0OwotCXVuc2lnbmVkIHdycHRyLCByZHB0cjsKLQl1bnNpZ25lZCB0b3RhbF9ieXRlczsKLQlpbnQgY291bnQ7Ci0JdW5zaWduZWQgZXJyb3I7IC8qIG92ZXIvdW5kZXJydW4gKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwotCS8qIHJlZHVuZGFudCwgYnV0IG1ha2VzIGNhbGN1bGF0aW9ucyBlYXNpZXIgKi8KLQl1bnNpZ25lZCBmcmFnc2l6ZTsKLQl1bnNpZ25lZCBkbWFzaXplOwotCS8qIE9TUyBzdHVmZiAqLwotCXVuc2lnbmVkIG1hcHBlZDoxOwotCXVuc2lnbmVkIHJlYWR5OjE7Ci0JdW5zaWduZWQgb3NzZnJhZ3NoaWZ0OwotCWludCBvc3NtYXhmcmFnczsKLQl1bnNpZ25lZCBzdWJkaXZpc2lvbjsKLX07Ci0KLXN0cnVjdCB1c2JfYXVkaW9fc3RhdGU7Ci0KLSNkZWZpbmUgRkxHX1VSQjBSVU5OSU5HICAgMQotI2RlZmluZSBGTEdfVVJCMVJVTk5JTkcgICAyCi0jZGVmaW5lIEZMR19TWU5DMFJVTk5JTkcgIDQKLSNkZWZpbmUgRkxHX1NZTkMxUlVOTklORyAgOAotI2RlZmluZSBGTEdfUlVOTklORyAgICAgIDE2Ci0jZGVmaW5lIEZMR19DT05ORUNURUQgICAgMzIKLQotc3RydWN0IG15X2RhdGFfdXJiIHsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci19OwotCi1zdHJ1Y3QgbXlfc3luY191cmIgewotCXN0cnVjdCB1cmIgKnVyYjsKLX07Ci0KLQotc3RydWN0IHVzYl9hdWRpb2RldiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnN0YXRlOwotCQotCS8qIHNvdW5kY29yZSBzdHVmZiAqLwotCWludCBkZXZfYXVkaW87Ci0KLQkvKiB3YXZlIHN0dWZmICovCi0JbW9kZV90IG9wZW5fbW9kZTsKLQlzcGlubG9ja190IGxvY2s7ICAgICAgICAgLyogRE1BIGJ1ZmZlciBhY2Nlc3Mgc3BpbmxvY2sgKi8KLQotCXN0cnVjdCB1c2JpbiB7Ci0JCWludCBpbnRlcmZhY2U7ICAgICAgICAgICAvKiBJbnRlcmZhY2UgbnVtYmVyLCAtMSBtZWFucyBub3QgdXNlZCAqLwotCQl1bnNpZ25lZCBpbnQgZm9ybWF0OyAgICAgLyogVVNCIGRhdGEgZm9ybWF0ICovCi0JCXVuc2lnbmVkIGludCBkYXRhcGlwZTsgICAvKiB0aGUgZGF0YSBpbnB1dCBwaXBlICovCi0JCXVuc2lnbmVkIGludCBzeW5jcGlwZTsgICAvKiB0aGUgc3luY2hyb25pc2F0aW9uIHBpcGUgLSAwIGZvciBhbnl0aGluZyBidXQgYWRhcHRpdmUgSU4gbW9kZSAqLwotCQl1bnNpZ25lZCBpbnQgc3luY2ludGVydmFsOyAgLyogUCBmb3IgYWRhcHRpdmUgSU4gbW9kZSwgMCBvdGhlcndpc2UgKi8KLQkJdW5zaWduZWQgaW50IGZyZXFuOyAgICAgIC8qIG5vbWluYWwgc2FtcGxpbmcgcmF0ZSBpbiBVU0IgZm9ybWF0LCBpLmUuIGZzLzEwMDAgaW4gUTEwLjE0ICovCi0JCXVuc2lnbmVkIGludCBmcmVxbWF4OyAgICAvKiBtYXhpbXVtIHNhbXBsaW5nIHJhdGUsIHVzZWQgZm9yIGJ1ZmZlciBtYW5hZ2VtZW50ICovCi0JCXVuc2lnbmVkIGludCBwaGFzZTsgICAgICAvKiBwaGFzZSBhY2N1bXVsYXRvciAqLwotCQl1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgLyogc2VlIEZMR18gZGVmaW5lcyAqLwotCQkKLQkJc3RydWN0IG15X2RhdGFfdXJiIGR1cmJbMl07ICAvKiBJU08gZGVzY3JpcHRvcnMgZm9yIHRoZSBkYXRhIGVuZHBvaW50ICovCi0JCXN0cnVjdCBteV9zeW5jX3VyYiBzdXJiWzJdOyAgLyogSVNPIHN5bmMgcGlwZSBkZXNjcmlwdG9yIGlmIG5lZWRlZCAqLwotCQkKLQkJc3RydWN0IGRtYWJ1ZiBkbWE7Ci0JfSB1c2JpbjsKLQotCXN0cnVjdCB1c2JvdXQgewotCQlpbnQgaW50ZXJmYWNlOyAgICAgICAgICAgLyogSW50ZXJmYWNlIG51bWJlciwgLTEgbWVhbnMgbm90IHVzZWQgKi8KLQkJdW5zaWduZWQgaW50IGZvcm1hdDsgICAgIC8qIFVTQiBkYXRhIGZvcm1hdCAqLwotCQl1bnNpZ25lZCBpbnQgZGF0YXBpcGU7ICAgLyogdGhlIGRhdGEgaW5wdXQgcGlwZSAqLwotCQl1bnNpZ25lZCBpbnQgc3luY3BpcGU7ICAgLyogdGhlIHN5bmNocm9uaXNhdGlvbiBwaXBlIC0gMCBmb3IgYW55dGhpbmcgYnV0IGFzeW5jaHJvbm91cyBPVVQgbW9kZSAqLwotCQl1bnNpZ25lZCBpbnQgc3luY2ludGVydmFsOyAgLyogUCBmb3IgYXN5bmNocm9ub3VzIE9VVCBtb2RlLCAwIG90aGVyd2lzZSAqLwotCQl1bnNpZ25lZCBpbnQgZnJlcW47ICAgICAgLyogbm9taW5hbCBzYW1wbGluZyByYXRlIGluIFVTQiBmb3JtYXQsIGkuZS4gZnMvMTAwMCBpbiBRMTAuMTQgKi8KLQkJdW5zaWduZWQgaW50IGZyZXFtOyAgICAgIC8qIG1vbWVudGFyeSBzYW1wbGluZyByYXRlIGluIFVTQiBmb3JtYXQsIGkuZS4gZnMvMTAwMCBpbiBRMTAuMTQgKi8KLQkJdW5zaWduZWQgaW50IGZyZXFtYXg7ICAgIC8qIG1heGltdW0gc2FtcGxpbmcgcmF0ZSwgdXNlZCBmb3IgYnVmZmVyIG1hbmFnZW1lbnQgKi8KLQkJdW5zaWduZWQgaW50IHBoYXNlOyAgICAgIC8qIHBoYXNlIGFjY3VtdWxhdG9yICovCi0JCXVuc2lnbmVkIGludCBmbGFnczsgICAgICAvKiBzZWUgRkxHXyBkZWZpbmVzICovCi0KLQkJc3RydWN0IG15X2RhdGFfdXJiIGR1cmJbMl07ICAvKiBJU08gZGVzY3JpcHRvcnMgZm9yIHRoZSBkYXRhIGVuZHBvaW50ICovCi0JCXN0cnVjdCBteV9zeW5jX3VyYiBzdXJiWzJdOyAgLyogSVNPIHN5bmMgcGlwZSBkZXNjcmlwdG9yIGlmIG5lZWRlZCAqLwotCQkKLQkJc3RydWN0IGRtYWJ1ZiBkbWE7Ci0JfSB1c2JvdXQ7Ci0KLQotCXVuc2lnbmVkIGludCBudW1mbXRpbiwgbnVtZm10b3V0OwotCXN0cnVjdCBhdWRpb2Zvcm1hdCBmbXRpbltNQVhGT1JNQVRTXTsKLQlzdHJ1Y3QgYXVkaW9mb3JtYXQgZm10b3V0W01BWEZPUk1BVFNdOwotfTsgIAotCi1zdHJ1Y3QgdXNiX21peGVyZGV2IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqc3RhdGU7Ci0KLQkvKiBzb3VuZGNvcmUgc3R1ZmYgKi8KLQlpbnQgZGV2X21peGVyOwotCi0JdW5zaWduZWQgY2hhciBpZmFjZTsgIC8qIGludGVyZmFjZSBudW1iZXIgb2YgdGhlIEF1ZGlvQ29udHJvbCBpbnRlcmZhY2UgKi8KLQotCS8qIFVTQiBmb3JtYXQgZGVzY3JpcHRpb25zICovCi0JdW5zaWduZWQgaW50IG51bWNoLCBtb2RjbnQ7Ci0KLQkvKiBtaXhjaCBpcyBsYXN0IGFuZCBnZXRzIGFsbG9jYXRlZCBkeW5hbWljYWxseSAqLwotCXN0cnVjdCBtaXhlcmNoYW5uZWwgY2hbMF07Ci19OwotCi1zdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGlvZGV2OwotCi0JLyogVVNCIGRldmljZSAqLwotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGlvbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG1peGVybGlzdDsKLQotCXVuc2lnbmVkIGNvdW50OyAgLyogdXNhZ2UgY291bnRlcjsgTk9URTogdGhlIHVzYiBzdGFjayBpcyBhbHNvIGNvbnNpZGVyZWQgYSB1c2VyICovCi19OwotCi0vKiBwcml2YXRlIGF1ZGlvIGZvcm1hdCBleHRlbnNpb25zICovCi0jZGVmaW5lIEFGTVRfU1RFUkVPICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIEFGTVRfSVNTVEVSRU8oeCkgICAoKHgpICYgQUZNVF9TVEVSRU8pCi0jZGVmaW5lIEFGTVRfSVMxNkJJVCh4KSAgICAoKHgpICYgKEFGTVRfUzE2X0xFfEFGTVRfUzE2X0JFfEFGTVRfVTE2X0xFfEFGTVRfVTE2X0JFKSkKLSNkZWZpbmUgQUZNVF9JU1VOU0lHTkVEKHgpICgoeCkgJiAoQUZNVF9VOHxBRk1UX1UxNl9MRXxBRk1UX1UxNl9CRSkpCi0jZGVmaW5lIEFGTVRfQllURVNTSElGVCh4KSAoKEFGTVRfSVNTVEVSRU8oeCkgPyAxIDogMCkgKyAoQUZNVF9JUzE2QklUKHgpID8gMSA6IDApKQotI2RlZmluZSBBRk1UX0JZVEVTKHgpICAgICAgKDE8PEFGTVRfQllURVNTSEZJVCh4KSkKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbGQyKHVuc2lnbmVkIGludCB4KQotewotCXVuc2lnbmVkIHIgPSAwOwotCQotCWlmICh4ID49IDB4MTAwMDApIHsKLQkJeCA+Pj0gMTY7Ci0JCXIgKz0gMTY7Ci0JfQotCWlmICh4ID49IDB4MTAwKSB7Ci0JCXggPj49IDg7Ci0JCXIgKz0gODsKLQl9Ci0JaWYgKHggPj0gMHgxMCkgewotCQl4ID4+PSA0OwotCQlyICs9IDQ7Ci0JfQotCWlmICh4ID49IDQpIHsKLQkJeCA+Pj0gMjsKLQkJciArPSAyOwotCX0KLQlpZiAoeCA+PSAyKQotCQlyKys7Ci0JcmV0dXJuIHI7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogT1NTIGNvbXBhdGlibGUgcmluZyBidWZmZXIgbWFuYWdlbWVudC4gVGhlIHJpbmcgYnVmZmVyIG1heSBiZSBtbWFwJ2VkIGludG8KLSAqIGFuIGFwcGxpY2F0aW9uIGFkZHJlc3Mgc3BhY2UuCi0gKgotICogSSBmaXJzdCB1c2VkIHRoZSBydm1hbGxvYyBzdHVmZiBjb3BpZWQgZnJvbSBidHR2LiBBbGFuIENveCBkaWQgbm90IGxpa2UgaXQsIHNvCi0gKiB3ZSBub3cgdXNlIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIGEgc2luZ2xlIHBhZ2UgZWFjaC4gVGhpcyBzYXZlcyB1cyB0aGUKLSAqIGtlcm5lbCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIGJ1dCB3ZSBoYXZlIHRvIGRvIGEgcGFnZSB0YWJsZSBhbGlrZSBtZWNoYW5pc20KLSAqICh0aG91Z2ggb25seSBvbmUgaW5kaXJlY3Rpb24pIGluIHNvZnR3YXJlLgotICovCi0KLXN0YXRpYyB2b2lkIGRtYWJ1Zl9yZWxlYXNlKHN0cnVjdCBkbWFidWYgKmRiKQotewotCXVuc2lnbmVkIGludCBucjsKLQl2b2lkICpwOwotCi0JZm9yKG5yID0gMDsgbnIgPCBOUlNHQlVGOyBucisrKSB7Ci0JCWlmICghKHAgPSBkYi0+c2didWZbbnJdKSkKLQkJCWNvbnRpbnVlOwotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocCkpOwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcCk7Ci0JCWRiLT5zZ2J1Zltucl0gPSBOVUxMOwotCX0KLQlkYi0+bWFwcGVkID0gZGItPnJlYWR5ID0gMDsKLX0KLQotc3RhdGljIGludCBkbWFidWZfaW5pdChzdHJ1Y3QgZG1hYnVmICpkYikKLXsKLQl1bnNpZ25lZCBpbnQgbnIsIGJ5dGVwZXJzZWMsIGJ1ZnM7Ci0Jdm9pZCAqcDsKLQotCS8qIGluaXRpYWxpemUgc29tZSBmaWVsZHMgKi8KLQlkYi0+cmRwdHIgPSBkYi0+d3JwdHIgPSBkYi0+dG90YWxfYnl0ZXMgPSBkYi0+Y291bnQgPSBkYi0+ZXJyb3IgPSAwOwotCS8qIGNhbGN1bGF0ZSByZXF1aXJlZCBidWZmZXIgc2l6ZSAqLwotCWJ5dGVwZXJzZWMgPSBkYi0+c3JhdGUgPDwgQUZNVF9CWVRFU1NISUZUKGRiLT5mb3JtYXQpOwotCWJ1ZnMgPSAxVSA8PCBETUFCVUZTSElGVDsKLQlpZiAoZGItPm9zc2ZyYWdzaGlmdCkgewotCQlpZiAoKDEwMDAgPDwgZGItPm9zc2ZyYWdzaGlmdCkgPCBieXRlcGVyc2VjKQotCQkJZGItPmZyYWdzaGlmdCA9IGxkMihieXRlcGVyc2VjLzEwMDApOwotCQllbHNlCi0JCQlkYi0+ZnJhZ3NoaWZ0ID0gZGItPm9zc2ZyYWdzaGlmdDsKLQl9IGVsc2UgewotCQlkYi0+ZnJhZ3NoaWZ0ID0gbGQyKGJ5dGVwZXJzZWMvMTAwLyhkYi0+c3ViZGl2aXNpb24gPyBkYi0+c3ViZGl2aXNpb24gOiAxKSk7Ci0JCWlmIChkYi0+ZnJhZ3NoaWZ0IDwgMykKLQkJCWRiLT5mcmFnc2hpZnQgPSAzOwotCX0KLQlkYi0+bnVtZnJhZyA9IGJ1ZnMgPj4gZGItPmZyYWdzaGlmdDsKLQl3aGlsZSAoZGItPm51bWZyYWcgPCA0ICYmIGRiLT5mcmFnc2hpZnQgPiAzKSB7Ci0JCWRiLT5mcmFnc2hpZnQtLTsKLQkJZGItPm51bWZyYWcgPSBidWZzID4+IGRiLT5mcmFnc2hpZnQ7Ci0JfQotCWRiLT5mcmFnc2l6ZSA9IDEgPDwgZGItPmZyYWdzaGlmdDsKLQlpZiAoZGItPm9zc21heGZyYWdzID49IDQgJiYgZGItPm9zc21heGZyYWdzIDwgZGItPm51bWZyYWcpCi0JCWRiLT5udW1mcmFnID0gZGItPm9zc21heGZyYWdzOwotCWRiLT5kbWFzaXplID0gZGItPm51bWZyYWcgPDwgZGItPmZyYWdzaGlmdDsKLQlmb3IobnIgPSAwOyBuciA8IE5SU0dCVUY7IG5yKyspIHsKLQkJaWYgKCFkYi0+c2didWZbbnJdKSB7Ci0JCQlwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXApCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQlkYi0+c2didWZbbnJdID0gcDsKLQkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocCkpOwotCQl9Ci0JCW1lbXNldChkYi0+c2didWZbbnJdLCBBRk1UX0lTVU5TSUdORUQoZGItPmZvcm1hdCkgPyAweDgwIDogMCwgUEFHRV9TSVpFKTsKLQkJaWYgKChuciA8PCBQQUdFX1NISUZUKSA+PSBkYi0+ZG1hc2l6ZSkKLQkJCWJyZWFrOwotCX0KLQlkYi0+YnVmc2l6ZSA9IG5yIDw8IFBBR0VfU0hJRlQ7Ci0JZGItPnJlYWR5ID0gMTsKLQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogZG1hYnVmX2luaXQgYnl0ZXBlcnNlYyAlZCBidWZzICVkIG9zc2ZyYWdzaGlmdCAlZCBvc3NtYXhmcmFncyAlZCAiCi0JICAgICAgICAgImZyYWdzaGlmdCAlZCBmcmFnc2l6ZSAlZCBudW1mcmFnICVkIGRtYXNpemUgJWQgYnVmc2l6ZSAlZCBmbXQgMHgleCBzcmF0ZSAlZFxuIiwKLQkgICAgICAgICBieXRlcGVyc2VjLCBidWZzLCBkYi0+b3NzZnJhZ3NoaWZ0LCBkYi0+b3NzbWF4ZnJhZ3MsIGRiLT5mcmFnc2hpZnQsIGRiLT5mcmFnc2l6ZSwKLQkgICAgICAgICBkYi0+bnVtZnJhZywgZGItPmRtYXNpemUsIGRiLT5idWZzaXplLCBkYi0+Zm9ybWF0LCBkYi0+c3JhdGUpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkbWFidWZfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKLXsKLQl1bnNpZ25lZCBpbnQgbnI7Ci0KLQlpZiAoIWRiLT5yZWFkeSB8fCBkYi0+bWFwcGVkIHx8IChzdGFydCB8IHNpemUpICYgKFBBR0VfU0laRS0xKSB8fCBzaXplID4gZGItPmJ1ZnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCXNpemUgPj49IFBBR0VfU0hJRlQ7Ci0JZm9yKG5yID0gMDsgbnIgPCBzaXplOyBucisrKQotCQlpZiAoIWRiLT5zZ2J1Zltucl0pCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQlkYi0+bWFwcGVkID0gMTsKLQlmb3IobnIgPSAwOyBuciA8IHNpemU7IG5yKyspIHsKLQkJdW5zaWduZWQgbG9uZyBwZm47Ci0KLQkJcGZuID0gdmlydF90b19waHlzKGRiLT5zZ2J1Zltucl0pID4+IFBBR0VfU0hJRlQ7Ci0JCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGZuLCBQQUdFX1NJWkUsIHByb3QpKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYWJ1Zl9jb3B5aW4oc3RydWN0IGRtYWJ1ZiAqZGIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgaW50IHBncmVtLCByZW07Ci0KLQlkYi0+dG90YWxfYnl0ZXMgKz0gc2l6ZTsKLQlmb3IgKDs7KSB7Ci0JCWlmIChzaXplIDw9IDApCi0JCQlyZXR1cm47Ci0JCXBncmVtID0gKCh+ZGItPndycHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKLQkJaWYgKHBncmVtID4gc2l6ZSkKLQkJCXBncmVtID0gc2l6ZTsKLQkJcmVtID0gZGItPmRtYXNpemUgLSBkYi0+d3JwdHI7Ci0JCWlmIChwZ3JlbSA+IHJlbSkKLQkJCXBncmVtID0gcmVtOwotCQltZW1jcHkoKGRiLT5zZ2J1ZltkYi0+d3JwdHIgPj4gUEFHRV9TSElGVF0pICsgKGRiLT53cnB0ciAmIChQQUdFX1NJWkUtMSkpLCBidWZmZXIsIHBncmVtKTsKLQkJc2l6ZSAtPSBwZ3JlbTsKLQkJYnVmZmVyICs9IHBncmVtOwotCQlkYi0+d3JwdHIgKz0gcGdyZW07Ci0JCWlmIChkYi0+d3JwdHIgPj0gZGItPmRtYXNpemUpCi0JCQlkYi0+d3JwdHIgPSAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZG1hYnVmX2NvcHlvdXQoc3RydWN0IGRtYWJ1ZiAqZGIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JdW5zaWduZWQgaW50IHBncmVtLCByZW07Ci0KLQlkYi0+dG90YWxfYnl0ZXMgKz0gc2l6ZTsKLQlmb3IgKDs7KSB7Ci0JCWlmIChzaXplIDw9IDApCi0JCQlyZXR1cm47Ci0JCXBncmVtID0gKCh+ZGItPnJkcHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKLQkJaWYgKHBncmVtID4gc2l6ZSkKLQkJCXBncmVtID0gc2l6ZTsKLQkJcmVtID0gZGItPmRtYXNpemUgLSBkYi0+cmRwdHI7Ci0JCWlmIChwZ3JlbSA+IHJlbSkKLQkJCXBncmVtID0gcmVtOwotCQltZW1jcHkoYnVmZmVyLCAoZGItPnNnYnVmW2RiLT5yZHB0ciA+PiBQQUdFX1NISUZUXSkgKyAoZGItPnJkcHRyICYgKFBBR0VfU0laRS0xKSksIHBncmVtKTsKLQkJc2l6ZSAtPSBwZ3JlbTsKLQkJYnVmZmVyICs9IHBncmVtOwotCQlkYi0+cmRwdHIgKz0gcGdyZW07Ci0JCWlmIChkYi0+cmRwdHIgPj0gZGItPmRtYXNpemUpCi0JCQlkYi0+cmRwdHIgPSAwOwotCX0KLX0KLQotc3RhdGljIGludCBkbWFidWZfY29weWluX3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGludCBwdHIsIGNvbnN0IHZvaWQgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQotewotCXVuc2lnbmVkIGludCBwZ3JlbSwgcmVtOwotCi0JaWYgKCFkYi0+cmVhZHkgfHwgZGItPm1hcHBlZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yICg7OykgewotCQlpZiAoc2l6ZSA8PSAwKQotCQkJcmV0dXJuIDA7Ci0JCXBncmVtID0gKCh+cHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKLQkJaWYgKHBncmVtID4gc2l6ZSkKLQkJCXBncmVtID0gc2l6ZTsKLQkJcmVtID0gZGItPmRtYXNpemUgLSBwdHI7Ci0JCWlmIChwZ3JlbSA+IHJlbSkKLQkJCXBncmVtID0gcmVtOwotCQlpZiAoY29weV9mcm9tX3VzZXIoKGRiLT5zZ2J1ZltwdHIgPj4gUEFHRV9TSElGVF0pICsgKHB0ciAmIChQQUdFX1NJWkUtMSkpLCBidWZmZXIsIHBncmVtKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlzaXplIC09IHBncmVtOwotCQlidWZmZXIgKz0gcGdyZW07Ci0JCXB0ciArPSBwZ3JlbTsKLQkJaWYgKHB0ciA+PSBkYi0+ZG1hc2l6ZSkKLQkJCXB0ciA9IDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRtYWJ1Zl9jb3B5b3V0X3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGludCBwdHIsIHZvaWQgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQotewotCXVuc2lnbmVkIGludCBwZ3JlbSwgcmVtOwotCi0JaWYgKCFkYi0+cmVhZHkgfHwgZGItPm1hcHBlZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yICg7OykgewotCQlpZiAoc2l6ZSA8PSAwKQotCQkJcmV0dXJuIDA7Ci0JCXBncmVtID0gKCh+cHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKLQkJaWYgKHBncmVtID4gc2l6ZSkKLQkJCXBncmVtID0gc2l6ZTsKLQkJcmVtID0gZGItPmRtYXNpemUgLSBwdHI7Ci0JCWlmIChwZ3JlbSA+IHJlbSkKLQkJCXBncmVtID0gcmVtOwotCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgKGRiLT5zZ2J1ZltwdHIgPj4gUEFHRV9TSElGVF0pICsgKHB0ciAmIChQQUdFX1NJWkUtMSkpLCBwZ3JlbSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJc2l6ZSAtPSBwZ3JlbTsKLQkJYnVmZmVyICs9IHBncmVtOwotCQlwdHIgKz0gcGdyZW07Ci0JCWlmIChwdHIgPj0gZGItPmRtYXNpemUpCi0JCQlwdHIgPSAwOwotCX0KLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgotICogVVNCIEkvTyBjb2RlLiBXZSBkbyBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb24gaWYgbmVjZXNzYXJ5Ci0gKi8KLQotc3RhdGljIHZvaWQgdXNiaW5fc3RvcChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKLXsKLQlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGksIG5vdGtpbGxlZCA9IDE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7Ci0JaSA9IHUtPmZsYWdzOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKGkgJiAoRkxHX1VSQjBSVU5OSU5HfEZMR19VUkIxUlVOTklOR3xGTEdfU1lOQzBSVU5OSU5HfEZMR19TWU5DMVJVTk5JTkcpKSB7Ci0JCWlmIChub3RraWxsZWQpCi0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7Ci0JCWVsc2UKLQkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQkJaSA9IHUtPmZsYWdzOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQlpZiAobm90a2lsbGVkICYmIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQlpZiAoaSAmIEZMR19VUkIwUlVOTklORykKLQkJCQl1c2Jfa2lsbF91cmIodS0+ZHVyYlswXS51cmIpOwotCQkJaWYgKGkgJiBGTEdfVVJCMVJVTk5JTkcpCi0JCQkJdXNiX2tpbGxfdXJiKHUtPmR1cmJbMV0udXJiKTsKLQkJCWlmIChpICYgRkxHX1NZTkMwUlVOTklORykKLQkJCQl1c2Jfa2lsbF91cmIodS0+c3VyYlswXS51cmIpOwotCQkJaWYgKGkgJiBGTEdfU1lOQzFSVU5OSU5HKQotCQkJCXVzYl9raWxsX3VyYih1LT5zdXJiWzFdLnVyYik7Ci0JCQlub3RraWxsZWQgPSAwOwotCQl9Ci0JfQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0Ja2ZyZWUodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0Ja2ZyZWUodS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0Ja2ZyZWUodS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0Ja2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0JdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSAKLQkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiaW5fcmVsZWFzZShzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKLXsKLQl1c2Jpbl9zdG9wKGFzKTsKLX0KLQotc3RhdGljIHZvaWQgdXNiaW5fZGlzYyhzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKLXsKLQlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOwotCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCXUtPmZsYWdzICY9IH4oRkxHX1JVTk5JTkcgfCBGTEdfQ09OTkVDVEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCXVzYmluX3N0b3AoYXMpOwotfQotCi1zdGF0aWMgdm9pZCBjb252ZXJzaW9uKGNvbnN0IHZvaWQgKmlidWYsIHVuc2lnbmVkIGludCBpZm10LCB2b2lkICpvYnVmLCB1bnNpZ25lZCBpbnQgb2ZtdCwgdm9pZCAqdG1wLCB1bnNpZ25lZCBpbnQgc2NudCkKLXsKLQl1bnNpZ25lZCBpbnQgY250LCBpOwotCV9fczE2ICpzcCwgKnNwMiwgczsKLQl1bnNpZ25lZCBjaGFyICpicDsKLQotCWNudCA9IHNjbnQ7Ci0JaWYgKEFGTVRfSVNTVEVSRU8oaWZtdCkpCi0JCWNudCA8PD0gMTsKLQlzcCA9ICgoX19zMTYgKil0bXApICsgY250OwotCXN3aXRjaCAoaWZtdCAmIH5BRk1UX1NURVJFTykgewotCWNhc2UgQUZNVF9VODoKLQkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpK2NudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQkJYnAtLTsKLQkJCXNwLS07Ci0JCQkqc3AgPSAoKmJwIF4gMHg4MCkgPDwgODsKLQkJfQotCQlicmVhazsKLQkJCQotCWNhc2UgQUZNVF9TODoKLQkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpK2NudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQkJYnAtLTsKLQkJCXNwLS07Ci0JCQkqc3AgPSAqYnAgPDwgODsKLQkJfQotCQlicmVhazsKLQkJCi0JY2FzZSBBRk1UX1UxNl9MRToKLQkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpKzIqY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7Ci0JCQlicCAtPSAyOwotCQkJc3AtLTsKLQkJCSpzcCA9IChicFswXSB8IChicFsxXSA8PCA4KSkgXiAweDgwMDA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEFGTVRfVTE2X0JFOgotCQlmb3IgKGJwID0gKCh1bnNpZ25lZCBjaGFyICopaWJ1ZikrMipjbnQsIGkgPSAwOyBpIDwgY250OyBpKyspIHsKLQkJCWJwIC09IDI7Ci0JCQlzcC0tOwotCQkJKnNwID0gKGJwWzFdIHwgKGJwWzBdIDw8IDgpKSBeIDB4ODAwMDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQUZNVF9TMTZfTEU6Ci0JCWZvciAoYnAgPSAoKHVuc2lnbmVkIGNoYXIgKilpYnVmKSsyKmNudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQkJYnAgLT0gMjsKLQkJCXNwLS07Ci0JCQkqc3AgPSBicFswXSB8IChicFsxXSA8PCA4KTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQUZNVF9TMTZfQkU6Ci0JCWZvciAoYnAgPSAoKHVuc2lnbmVkIGNoYXIgKilpYnVmKSsyKmNudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQkJYnAgLT0gMjsKLQkJCXNwLS07Ci0JCQkqc3AgPSBicFsxXSB8IChicFswXSA8PCA4KTsKLQkJfQotCQlicmVhazsKLQl9Ci0JaWYgKCFBRk1UX0lTU1RFUkVPKGlmbXQpICYmIEFGTVRfSVNTVEVSRU8ob2ZtdCkpIHsKLQkJLyogZXhwYW5kIGZyb20gbW9ubyB0byBzdGVyZW8gKi8KLQkJZm9yIChzcCA9ICgoX19zMTYgKil0bXApK3NjbnQsIHNwMiA9ICgoX19zMTYgKil0bXApKzIqc2NudCwgaSA9IDA7IGkgPCBzY250OyBpKyspIHsKLQkJCXNwLS07Ci0JCQlzcDIgLT0gMjsKLQkJCXNwMlswXSA9IHNwMlsxXSA9IHNwWzBdOwotCQl9Ci0JfQotCWlmIChBRk1UX0lTU1RFUkVPKGlmbXQpICYmICFBRk1UX0lTU1RFUkVPKG9mbXQpKSB7Ci0JCS8qIGNvbnRyYWN0IGZyb20gc3RlcmVvIHRvIG1vbm8gKi8KLQkJZm9yIChzcCA9IHNwMiA9ICgoX19zMTYgKil0bXApLCBpID0gMDsgaSA8IHNjbnQ7IGkrKywgc3ArKywgc3AyICs9IDIpCi0JCQlzcFswXSA9IChzcDJbMF0gKyBzcDJbMV0pID4+IDE7Ci0JfQotCWNudCA9IHNjbnQ7Ci0JaWYgKEFGTVRfSVNTVEVSRU8ob2ZtdCkpCi0JCWNudCA8PD0gMTsKLQlzcCA9ICgoX19zMTYgKil0bXApOwotCWJwID0gKCh1bnNpZ25lZCBjaGFyICopb2J1Zik7Ci0Jc3dpdGNoIChvZm10ICYgfkFGTVRfU1RFUkVPKSB7Ci0JY2FzZSBBRk1UX1U4OgotCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIHNwKyssIGJwKyspCi0JCQkqYnAgPSAoKnNwID4+IDgpIF4gMHg4MDsKLQkJYnJlYWs7Ci0KLQljYXNlIEFGTVRfUzg6Ci0JCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnArKykKLQkJCSpicCA9ICpzcCA+PiA4OwotCQlicmVhazsKLQotCWNhc2UgQUZNVF9VMTZfTEU6Ci0JCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnAgKz0gMikgewotCQkJcyA9ICpzcDsKLQkJCWJwWzBdID0gczsKLQkJCWJwWzFdID0gKHMgPj4gOCkgXiAweDgwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBBRk1UX1UxNl9CRToKLQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBzcCsrLCBicCArPSAyKSB7Ci0JCQlzID0gKnNwOwotCQkJYnBbMV0gPSBzOwotCQkJYnBbMF0gPSAocyA+PiA4KSBeIDB4ODA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEFGTVRfUzE2X0xFOgotCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIHNwKyssIGJwICs9IDIpIHsKLQkJCXMgPSAqc3A7Ci0JCQlicFswXSA9IHM7Ci0JCQlicFsxXSA9IHMgPj4gODsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQUZNVF9TMTZfQkU6Ci0JCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnAgKz0gMikgewotCQkJcyA9ICpzcDsKLQkJCWJwWzFdID0gczsKLQkJCWJwWzBdID0gcyA+PiA4OwotCQl9Ci0JCWJyZWFrOwotCX0KLQkKLX0KLQotc3RhdGljIHZvaWQgdXNiaW5fY29udmVydChzdHJ1Y3QgdXNiaW4gKnUsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNhbXBsZXMpCi17Ci0JdW5pb24gewotCQlfX3MxNiBzWzY0XTsKLQkJdW5zaWduZWQgY2hhciBiWzBdOwotCX0gdG1wOwotCXVuc2lnbmVkIGludCBzY250LCBtYXhzLCB1Zm10c2gsIGRmbXRzaDsKLQotCXVmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpOwotCWRmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5kbWEuZm9ybWF0KTsKLQltYXhzID0gKEFGTVRfSVNTVEVSRU8odS0+ZG1hLmZvcm1hdCB8IHUtPmZvcm1hdCkpID8gMzIgOiA2NDsKLQl3aGlsZSAoc2FtcGxlcyA+IDApIHsKLQkJc2NudCA9IHNhbXBsZXM7Ci0JCWlmIChzY250ID4gbWF4cykKLQkJCXNjbnQgPSBtYXhzOwotCQljb252ZXJzaW9uKGJ1ZmZlciwgdS0+Zm9ybWF0LCB0bXAuYiwgdS0+ZG1hLmZvcm1hdCwgdG1wLmIsIHNjbnQpOwotCQlkbWFidWZfY29weWluKCZ1LT5kbWEsIHRtcC5iLCBzY250IDw8IGRmbXRzaCk7Ci0JCWJ1ZmZlciArPSBzY250IDw8IHVmbXRzaDsKLQkJc2FtcGxlcyAtPSBzY250OwotCX0KLX0JCQotCi1zdGF0aWMgaW50IHVzYmluX3ByZXBhcmVfZGVzYyhzdHJ1Y3QgdXNiaW4gKnUsIHN0cnVjdCB1cmIgKnVyYikKLXsKLQl1bnNpZ25lZCBpbnQgaSwgbWF4c2l6ZSwgb2ZmczsKLQotCW1heHNpemUgPSAodS0+ZnJlcW1heCArIDB4M2ZmZikgPj4gKDE0IC0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCkpOwotCS8vcHJpbnRrKEtFUk5fREVCVUcgInVzYmluX3ByZXBhcmVfZGVzYzogbWF4c2l6ZSAlZCBmcmVxIDB4JXggZm9ybWF0IDB4JXhcbiIsIG1heHNpemUsIHUtPmZyZXFuLCB1LT5mb3JtYXQpOwotCWZvciAoaSA9IG9mZnMgPSAwOyBpIDwgREVTQ0ZSQU1FUzsgaSsrLCBvZmZzICs9IG1heHNpemUpIHsKLQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBtYXhzaXplOwotCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnM7Ci0JfQotCXVyYi0+aW50ZXJ2YWwgPSAxOwotCXJldHVybiAwOwotfQotCi0vKgotICogcmV0dXJuIHZhbHVlOiAwIGlmIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlc3RhcnRlZCwgLTEgb3RoZXJ3aXNlCi0gKiBjb252ZXJ0IHNhbXBsZSBmb3JtYXQgb24gdGhlIGZseSBpZiBuZWNlc3NhcnkKLSAqLwotc3RhdGljIGludCB1c2Jpbl9yZXRpcmVfZGVzYyhzdHJ1Y3QgdXNiaW4gKnUsIHN0cnVjdCB1cmIgKnVyYikKLXsKLQl1bnNpZ25lZCBpbnQgaSwgdWZtdHNoLCBkZm10c2gsIGVyciA9IDAsIGNudCwgc2NudCwgZG1hZnJlZTsKLQl1bnNpZ25lZCBjaGFyICpjcDsKLQotCXVmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpOwotCWRmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5kbWEuZm9ybWF0KTsKLQlmb3IgKGkgPSAwOyBpIDwgREVTQ0ZSQU1FUzsgaSsrKSB7Ci0JCWNwID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7Ci0JCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgewotCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiaW5fcmV0aXJlX2Rlc2M6IGZyYW1lICV1IHN0YXR1cyAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNjbnQgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPj4gdWZtdHNoOwotCQlpZiAoIXNjbnQpCi0JCQljb250aW51ZTsKLQkJY250ID0gc2NudCA8PCBkZm10c2g7Ci0JCWlmICghdS0+ZG1hLm1hcHBlZCkgewotCQkJZG1hZnJlZSA9IHUtPmRtYS5kbWFzaXplIC0gdS0+ZG1hLmNvdW50OwotCQkJaWYgKGNudCA+IGRtYWZyZWUpIHsKLQkJCQlzY250ID0gZG1hZnJlZSA+PiBkZm10c2g7Ci0JCQkJY250ID0gc2NudCA8PCBkZm10c2g7Ci0JCQkJZXJyKys7Ci0JCQl9Ci0JCX0KLQkJdS0+ZG1hLmNvdW50ICs9IGNudDsKLQkJaWYgKHUtPmZvcm1hdCA9PSB1LT5kbWEuZm9ybWF0KSB7Ci0JCQkvKiB3ZSBkbyBub3QgbmVlZCBmb3JtYXQgY29udmVyc2lvbiAqLwotCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IG5vIHNhbXBsZSBmb3JtYXQgY29udmVyc2lvblxuIikpOwotCQkJZG1hYnVmX2NvcHlpbigmdS0+ZG1hLCBjcCwgY250KTsKLQkJfSBlbHNlIHsKLQkJCS8qIHdlIG5lZWQgc2FtcGxpbmcgZm9ybWF0IGNvbnZlcnNpb24gKi8KLQkJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb24gJXggIT0gJXhcbiIsIHUtPmZvcm1hdCwgdS0+ZG1hLmZvcm1hdCkpOwotCQkJdXNiaW5fY29udmVydCh1LCBjcCwgc2NudCk7Ci0JCX0KLQl9Ci0JaWYgKGVycikKLQkJdS0+ZG1hLmVycm9yKys7Ci0JaWYgKHUtPmRtYS5jb3VudCA+PSAoc2lnbmVkKXUtPmRtYS5mcmFnc2l6ZSkKLQkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOwotCXJldHVybiBlcnIgPyAtMSA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYmluX2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKil1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IHVzYmluICp1ID0gJmFzLT51c2JpbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBtYXNrOwotCWludCBzdXJldCA9IDA7Ci0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fREVCVUcgInVzYmluX2NvbXBsZXRlZDogc3RhdHVzICVkIGVycmNudCAlZCBmbGFncyAweCV4XG4iLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdS0+ZmxhZ3MpOwotI2VuZGlmCi0JaWYgKHVyYiA9PSB1LT5kdXJiWzBdLnVyYikKLQkJbWFzayA9IEZMR19VUkIwUlVOTklORzsKLQllbHNlIGlmICh1cmIgPT0gdS0+ZHVyYlsxXS51cmIpCi0JCW1hc2sgPSBGTEdfVVJCMVJVTk5JTkc7Ci0JZWxzZSB7Ci0JCW1hc2sgPSAwOwotCQlwcmludGsoS0VSTl9FUlIgInVzYmluX2NvbXBsZXRlZDogcGFuaWM6IHVua25vd24gVVJCXG4iKTsKLQl9Ci0JdXJiLT5kZXYgPSBhcy0+c3RhdGUtPnVzYmRldjsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIXVzYmluX3JldGlyZV9kZXNjKHUsIHVyYikgJiYKLQkgICAgdS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJgotCSAgICAhdXNiaW5fcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgCi0JICAgIChzdXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpID09IDApIHsKLQkJdS0+ZmxhZ3MgfD0gbWFzazsKLQl9IGVsc2UgewotCQl1LT5mbGFncyAmPSB+KG1hc2sgfCBGTEdfUlVOTklORyk7Ci0JCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInVzYmluX2NvbXBsZXRlZDogZGVzY3JpcHRvciBub3QgcmVzdGFydGVkICh1c2Jfc3VibWl0X3VyYjogJWQpXG4iLCBzdXJldCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiB3ZSBvdXRwdXQgc3luYyBkYXRhCi0gKi8KLXN0YXRpYyBpbnQgdXNiaW5fc3luY19wcmVwYXJlX2Rlc2Moc3RydWN0IHVzYmluICp1LCBzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JdW5zaWduZWQgY2hhciAqY3AgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQl1bnNpZ25lZCBpbnQgaSwgb2ZmczsKLQkKLQlmb3IgKGkgPSBvZmZzID0gMDsgaSA8IFNZTkNGUkFNRVM7IGkrKywgb2ZmcyArPSAzLCBjcCArPSAzKSB7Ci0JCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gMzsKLQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzOwotCQljcFswXSA9IHUtPmZyZXFuOwotCQljcFsxXSA9IHUtPmZyZXFuID4+IDg7Ci0JCWNwWzJdID0gdS0+ZnJlcW4gPj4gMTY7Ci0JfQotCXVyYi0+aW50ZXJ2YWwgPSAxOwotCXJldHVybiAwOwotfQotCi0vKgotICogcmV0dXJuIHZhbHVlOiAwIGlmIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlc3RhcnRlZCwgLTEgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQgdXNiaW5fc3luY19yZXRpcmVfZGVzYyhzdHJ1Y3QgdXNiaW4gKnUsIHN0cnVjdCB1cmIgKnVyYikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQkKLQlmb3IgKGkgPSAwOyBpIDwgU1lOQ0ZSQU1FUzsgaSsrKQotCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1swXS5zdGF0dXMpCi0JCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2Jpbl9zeW5jX3JldGlyZV9kZXNjOiBmcmFtZSAldSBzdGF0dXMgJWRcbiIsIGksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYmluX3N5bmNfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKXVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IG1hc2s7Ci0JaW50IHN1cmV0ID0gMDsKLQotI2lmIDAKLQlwcmludGsoS0VSTl9ERUJVRyAidXNiaW5fc3luY19jb21wbGV0ZWQ6IHN0YXR1cyAlZCBlcnJjbnQgJWQgZmxhZ3MgMHgleFxuIiwgdXJiLT5zdGF0dXMsIHVyYi0+ZXJyb3JfY291bnQsIHUtPmZsYWdzKTsKLSNlbmRpZgotCWlmICh1cmIgPT0gdS0+c3VyYlswXS51cmIpCi0JCW1hc2sgPSBGTEdfU1lOQzBSVU5OSU5HOwotCWVsc2UgaWYgKHVyYiA9PSB1LT5zdXJiWzFdLnVyYikKLQkJbWFzayA9IEZMR19TWU5DMVJVTk5JTkc7Ci0JZWxzZSB7Ci0JCW1hc2sgPSAwOwotCQlwcmludGsoS0VSTl9FUlIgInVzYmluX3N5bmNfY29tcGxldGVkOiBwYW5pYzogdW5rbm93biBVUkJcbiIpOwotCX0KLQl1cmItPmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OwotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCWlmICghdXNiaW5fc3luY19yZXRpcmVfZGVzYyh1LCB1cmIpICYmCi0JICAgIHUtPmZsYWdzICYgRkxHX1JVTk5JTkcgJiYKLQkgICAgIXVzYmluX3N5bmNfcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgCi0JICAgIChzdXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpID09IDApIHsKLQkJdS0+ZmxhZ3MgfD0gbWFzazsKLQl9IGVsc2UgewotCQl1LT5mbGFncyAmPSB+KG1hc2sgfCBGTEdfUlVOTklORyk7Ci0JCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKLQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiaW5fc3luY19jb21wbGV0ZWQ6IGRlc2NyaXB0b3Igbm90IHJlc3RhcnRlZCAodXNiX3N1Ym1pdF91cmI6ICVkKVxuIiwgc3VyZXQpKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCB1c2Jpbl9zdGFydChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7Ci0Jc3RydWN0IHVzYmluICp1ID0gJmFzLT51c2JpbjsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgbWF4c3plLCBidWZzejsKLQotI2lmIDAKLQlwcmludGsoS0VSTl9ERUJVRyAidXNiaW5fc3RhcnQ6IGRldmljZSAlZCB1Zm10IDB4JTA4eCBkZm10IDB4JTA4eCBzcmF0ZSAlZFxuIiwKLQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmZvcm1hdCwgdS0+ZG1hLmZvcm1hdCwgdS0+ZG1hLnNyYXRlKTsKLSNlbmRpZgotCS8qIGFsbG9jYXRlIFVTQiBzdG9yYWdlIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQlpZiAoISh1LT5mbGFncyAmIEZMR19DT05ORUNURUQpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAoISh1LT5mbGFncyAmIEZMR19SVU5OSU5HKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQl1LT5mcmVxbiA9ICgodS0+ZG1hLnNyYXRlIDw8IDExKSArIDYyKSAvIDEyNTsgLyogdGhpcyB3aWxsIG92ZXJmbG93IGF0IGFwcHJveCAyTVNQUyAqLwotCQl1LT5mcmVxbWF4ID0gdS0+ZnJlcW4gKyAodS0+ZnJlcW4gPj4gMik7Ci0JCXUtPnBoYXNlID0gMDsKLQkJbWF4c3plID0gKHUtPmZyZXFtYXggKyAweDNmZmYpID4+ICgxNCAtIEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpKTsKLQkJYnVmc3ogPSBERVNDRlJBTUVTICogbWF4c3plOwotCQlrZnJlZSh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwotCQl1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZnN6OwotCQlrZnJlZSh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwotCQl1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZnN6OwotCQlpZiAodS0+c3luY3BpcGUpIHsKLQkJCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCQkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMypTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQkJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMypTWU5DRlJBTUVTOwotCQkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0JCQl1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYygzKlNZTkNGUkFNRVMsIEdGUF9LRVJORUwpOwotCQkJdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzKlNZTkNGUkFNRVM7Ci0JCX0KLQkJaWYgKCF1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8ICF1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8IAotCQkgICAgKHUtPnN5bmNwaXBlICYmICghdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAhdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBjYW5ub3Qgc3RhcnQgcGxheWJhY2sgZGV2aWNlICVkXG4iLCBkZXYtPmRldm51bSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQl9Ci0JaWYgKHUtPmRtYS5jb3VudCA+PSB1LT5kbWEuZG1hc2l6ZSAmJiAhdS0+ZG1hLm1hcHBlZCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0JdS0+ZmxhZ3MgfD0gRkxHX1JVTk5JTkc7Ci0JaWYgKCEodS0+ZmxhZ3MgJiBGTEdfVVJCMFJVTk5JTkcpKSB7Ci0JCXVyYiA9IHUtPmR1cmJbMF0udXJiOwotCQl1cmItPmRldiA9IGRldjsKLQkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7Ci0JCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7Ci0JCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOwotCQl1cmItPmNvbnRleHQgPSBhczsKLQkJdXJiLT5jb21wbGV0ZSA9IHVzYmluX2NvbXBsZXRlZDsKLQkJaWYgKCF1c2Jpbl9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAhdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKSkKLQkJCXUtPmZsYWdzIHw9IEZMR19VUkIwUlVOTklORzsKLQkJZWxzZQotCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOwotCX0KLQlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1VSQjFSVU5OSU5HKSkgewotCQl1cmIgPSB1LT5kdXJiWzFdLnVyYjsKLQkJdXJiLT5kZXYgPSBkZXY7Ci0JCXVyYi0+cGlwZSA9IHUtPmRhdGFwaXBlOwotCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOwotCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gREVTQ0ZSQU1FUzsKLQkJdXJiLT5jb250ZXh0ID0gYXM7Ci0JCXVyYi0+Y29tcGxldGUgPSB1c2Jpbl9jb21wbGV0ZWQ7Ci0JCWlmICghdXNiaW5fcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgIXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCkpCi0JCQl1LT5mbGFncyB8PSBGTEdfVVJCMVJVTk5JTkc7Ci0JCWVsc2UKLQkJCXUtPmZsYWdzICY9IH5GTEdfUlVOTklORzsKLQl9Ci0JaWYgKHUtPnN5bmNwaXBlKSB7Ci0JCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzBSVU5OSU5HKSkgewotCQkJdXJiID0gdS0+c3VyYlswXS51cmI7Ci0JCQl1cmItPmRldiA9IGRldjsKLQkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOwotCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOwotCQkJdXJiLT5jb250ZXh0ID0gYXM7Ci0JCQl1cmItPmNvbXBsZXRlID0gdXNiaW5fc3luY19jb21wbGV0ZWQ7Ci0JCQkvKiBzdHJpZGU6IHUtPnN5bmNpbnRlcnZhbCAqLwotCQkJaWYgKCF1c2Jpbl9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKQotCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMFJVTk5JTkc7Ci0JCQllbHNlCi0JCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOwotCQl9Ci0JCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzFSVU5OSU5HKSkgewotCQkJdXJiID0gdS0+c3VyYlsxXS51cmI7Ci0JCQl1cmItPmRldiA9IGRldjsKLQkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOwotCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOwotCQkJdXJiLT5jb250ZXh0ID0gYXM7Ci0JCQl1cmItPmNvbXBsZXRlID0gdXNiaW5fc3luY19jb21wbGV0ZWQ7Ci0JCQkvKiBzdHJpZGU6IHUtPnN5bmNpbnRlcnZhbCAqLwotCQkJaWYgKCF1c2Jpbl9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKQotCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMVJVTk5JTkc7Ci0JCQllbHNlCi0JCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYm91dF9zdG9wKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQotewotCXN0cnVjdCB1c2JvdXQgKnUgPSAmYXMtPnVzYm91dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpLCBub3RraWxsZWQgPSAxOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOwotCWkgPSB1LT5mbGFnczsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCXdoaWxlIChpICYgKEZMR19VUkIwUlVOTklOR3xGTEdfVVJCMVJVTk5JTkd8RkxHX1NZTkMwUlVOTklOR3xGTEdfU1lOQzFSVU5OSU5HKSkgewotCQlpZiAobm90a2lsbGVkKQotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOwotCQllbHNlCi0JCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWkgPSB1LT5mbGFnczsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKG5vdGtpbGxlZCAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJaWYgKGkgJiBGTEdfVVJCMFJVTk5JTkcpCi0JCQkJdXNiX2tpbGxfdXJiKHUtPmR1cmJbMF0udXJiKTsKLQkJCWlmIChpICYgRkxHX1VSQjFSVU5OSU5HKQotCQkJCXVzYl9raWxsX3VyYih1LT5kdXJiWzFdLnVyYik7Ci0JCQlpZiAoaSAmIEZMR19TWU5DMFJVTk5JTkcpCi0JCQkJdXNiX2tpbGxfdXJiKHUtPnN1cmJbMF0udXJiKTsKLQkJCWlmIChpICYgRkxHX1NZTkMxUlVOTklORykKLQkJCQl1c2Jfa2lsbF91cmIodS0+c3VyYlsxXS51cmIpOwotCQkJbm90a2lsbGVkID0gMDsKLQkJfQotCX0KLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCWtmcmVlKHUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCWtmcmVlKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCWtmcmVlKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCXUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gCi0JCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzYm91dF9yZWxlYXNlKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQotewotCXVzYm91dF9zdG9wKGFzKTsKLX0KLQotc3RhdGljIHZvaWQgdXNib3V0X2Rpc2Moc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCi17Ci0Jc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQl1LT5mbGFncyAmPSB+KEZMR19SVU5OSU5HIHwgRkxHX0NPTk5FQ1RFRCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQl1c2JvdXRfc3RvcChhcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYm91dF9jb252ZXJ0KHN0cnVjdCB1c2JvdXQgKnUsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNhbXBsZXMpCi17Ci0JdW5pb24gewotCQlfX3MxNiBzWzY0XTsKLQkJdW5zaWduZWQgY2hhciBiWzBdOwotCX0gdG1wOwotCXVuc2lnbmVkIGludCBzY250LCBtYXhzLCB1Zm10c2gsIGRmbXRzaDsKLQotCXVmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpOwotCWRmbXRzaCA9IEFGTVRfQllURVNTSElGVCh1LT5kbWEuZm9ybWF0KTsKLQltYXhzID0gKEFGTVRfSVNTVEVSRU8odS0+ZG1hLmZvcm1hdCB8IHUtPmZvcm1hdCkpID8gMzIgOiA2NDsKLQl3aGlsZSAoc2FtcGxlcyA+IDApIHsKLQkJc2NudCA9IHNhbXBsZXM7Ci0JCWlmIChzY250ID4gbWF4cykKLQkJCXNjbnQgPSBtYXhzOwotCQlkbWFidWZfY29weW91dCgmdS0+ZG1hLCB0bXAuYiwgc2NudCA8PCBkZm10c2gpOwotCQljb252ZXJzaW9uKHRtcC5iLCB1LT5kbWEuZm9ybWF0LCBidWZmZXIsIHUtPmZvcm1hdCwgdG1wLmIsIHNjbnQpOwotCQlidWZmZXIgKz0gc2NudCA8PCB1Zm10c2g7Ci0JCXNhbXBsZXMgLT0gc2NudDsKLQl9Ci19CQkKLQotc3RhdGljIGludCB1c2JvdXRfcHJlcGFyZV9kZXNjKHN0cnVjdCB1c2JvdXQgKnUsIHN0cnVjdCB1cmIgKnVyYikKLXsKLQl1bnNpZ25lZCBpbnQgaSwgdWZtdHNoLCBkZm10c2gsIGVyciA9IDAsIGNudCwgc2NudCwgb2ZmczsKLQl1bnNpZ25lZCBjaGFyICpjcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCi0JdWZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCk7Ci0JZGZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmRtYS5mb3JtYXQpOwotCWZvciAoaSA9IG9mZnMgPSAwOyBpIDwgREVTQ0ZSQU1FUzsgaSsrKSB7Ci0JCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gb2ZmczsKLQkJdS0+cGhhc2UgPSAodS0+cGhhc2UgJiAweDNmZmYpICsgdS0+ZnJlcW07Ci0JCXNjbnQgPSB1LT5waGFzZSA+PiAxNDsKLQkJaWYgKCFzY250KSB7Ci0JCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQljbnQgPSBzY250IDw8IGRmbXRzaDsKLQkJaWYgKCF1LT5kbWEubWFwcGVkKSB7Ci0JCQlpZiAoY250ID4gdS0+ZG1hLmNvdW50KSB7Ci0JCQkJc2NudCA9IHUtPmRtYS5jb3VudCA+PiBkZm10c2g7Ci0JCQkJY250ID0gc2NudCA8PCBkZm10c2g7Ci0JCQkJZXJyKys7Ci0JCQl9Ci0JCQl1LT5kbWEuY291bnQgLT0gY250OwotCQl9IGVsc2UKLQkJCXUtPmRtYS5jb3VudCArPSBjbnQ7Ci0JCWlmICh1LT5mb3JtYXQgPT0gdS0+ZG1hLmZvcm1hdCkgewotCQkJLyogd2UgZG8gbm90IG5lZWQgZm9ybWF0IGNvbnZlcnNpb24gKi8KLQkJCWRtYWJ1Zl9jb3B5b3V0KCZ1LT5kbWEsIGNwLCBjbnQpOwotCQl9IGVsc2UgewotCQkJLyogd2UgbmVlZCBzYW1wbGluZyBmb3JtYXQgY29udmVyc2lvbiAqLwotCQkJdXNib3V0X2NvbnZlcnQodSwgY3AsIHNjbnQpOwotCQl9Ci0JCWNudCA9IHNjbnQgPDwgdWZtdHNoOwotCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IGNudDsKLQkJb2ZmcyArPSBjbnQ7Ci0JCWNwICs9IGNudDsKLQl9Ci0JdXJiLT5pbnRlcnZhbCA9IDE7Ci0JaWYgKGVycikKLQkJdS0+ZG1hLmVycm9yKys7Ci0JaWYgKHUtPmRtYS5tYXBwZWQpIHsKLQkJaWYgKHUtPmRtYS5jb3VudCA+PSAoc2lnbmVkKXUtPmRtYS5mcmFnc2l6ZSkKLQkJCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKLQl9IGVsc2UgewotCQlpZiAoKHNpZ25lZCl1LT5kbWEuZG1hc2l6ZSA+PSB1LT5kbWEuY291bnQgKyAoc2lnbmVkKXUtPmRtYS5mcmFnc2l6ZSkKLQkJCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKLQl9Ci0JcmV0dXJuIGVyciA/IC0xIDogMDsKLX0KLQotLyoKLSAqIHJldHVybiB2YWx1ZTogMCBpZiBkZXNjcmlwdG9yIHNob3VsZCBiZSByZXN0YXJ0ZWQsIC0xIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IHVzYm91dF9yZXRpcmVfZGVzYyhzdHJ1Y3QgdXNib3V0ICp1LCBzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgREVTQ0ZSQU1FUzsgaSsrKSB7Ci0JCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgewotCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNib3V0X3JldGlyZV9kZXNjOiBmcmFtZSAldSBzdGF0dXMgJWRcbiIsIGksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdXNib3V0X2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKil1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IG1hc2s7Ci0JaW50IHN1cmV0ID0gMDsKLQotI2lmIDAKLQlwcmludGsoS0VSTl9ERUJVRyAidXNib3V0X2NvbXBsZXRlZDogc3RhdHVzICVkIGVycmNudCAlZCBmbGFncyAweCV4XG4iLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdS0+ZmxhZ3MpOwotI2VuZGlmCi0JaWYgKHVyYiA9PSB1LT5kdXJiWzBdLnVyYikKLQkJbWFzayA9IEZMR19VUkIwUlVOTklORzsKLQllbHNlIGlmICh1cmIgPT0gdS0+ZHVyYlsxXS51cmIpCi0JCW1hc2sgPSBGTEdfVVJCMVJVTk5JTkc7Ci0JZWxzZSB7Ci0JCW1hc2sgPSAwOwotCQlwcmludGsoS0VSTl9FUlIgInVzYm91dF9jb21wbGV0ZWQ6IHBhbmljOiB1bmtub3duIFVSQlxuIik7Ci0JfQotCXVyYi0+ZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCF1c2JvdXRfcmV0aXJlX2Rlc2ModSwgdXJiKSAmJgotCSAgICB1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmCi0JICAgICF1c2JvdXRfcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgCi0JICAgIChzdXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpID09IDApIHsKLQkJdS0+ZmxhZ3MgfD0gbWFzazsKLQl9IGVsc2UgewotCQl1LT5mbGFncyAmPSB+KG1hc2sgfCBGTEdfUlVOTklORyk7Ci0JCXdha2VfdXAoJnUtPmRtYS53YWl0KTsKLQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNib3V0X2NvbXBsZXRlZDogZGVzY3JpcHRvciBub3QgcmVzdGFydGVkICh1c2Jfc3VibWl0X3VyYjogJWQpXG4iLCBzdXJldCkpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHVzYm91dF9zeW5jX3ByZXBhcmVfZGVzYyhzdHJ1Y3QgdXNib3V0ICp1LCBzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JdW5zaWduZWQgaW50IGksIG9mZnM7Ci0KLQlmb3IgKGkgPSBvZmZzID0gMDsgaSA8IFNZTkNGUkFNRVM7IGkrKywgb2ZmcyArPSAzKSB7Ci0JCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gMzsKLQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzOwotCX0KLQl1cmItPmludGVydmFsID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIHJldHVybiB2YWx1ZTogMCBpZiBkZXNjcmlwdG9yIHNob3VsZCBiZSByZXN0YXJ0ZWQsIC0xIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IHVzYm91dF9zeW5jX3JldGlyZV9kZXNjKHN0cnVjdCB1c2JvdXQgKnUsIHN0cnVjdCB1cmIgKnVyYikKLXsKLQl1bnNpZ25lZCBjaGFyICpjcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwotCXVuc2lnbmVkIGludCBmLCBpOwotCi0JZm9yIChpID0gMDsgaSA8IFNZTkNGUkFNRVM7IGkrKywgY3AgKz0gMykgewotCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKLQkJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYm91dF9zeW5jX3JldGlyZV9kZXNjOiBmcmFtZSAldSBzdGF0dXMgJWRcbiIsIGksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIDwgMykgewotCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNib3V0X3N5bmNfcmV0aXJlX2Rlc2M6IGZyYW1lICV1IGxlbmd0aCAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlmID0gY3BbMF0gfCAoY3BbMV0gPDwgOCkgfCAoY3BbMl0gPDwgMTYpOwotCQlpZiAoYWJzKGYgLSB1LT5mcmVxbikgPiAodS0+ZnJlcW4gPj4gMykgfHwgZiA+IHUtPmZyZXFtYXgpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYm91dF9zeW5jX3JldGlyZV9kZXNjOiByZXF1ZXN0ZWQgZnJlcXVlbmN5ICV1IChub21pbmFsICV1KSBvdXQgb2YgcmFuZ2UhXG4iLCBmLCB1LT5mcmVxbik7Ci0JCQljb250aW51ZTsKLQkJfQotCQl1LT5mcmVxbSA9IGY7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB1c2JvdXRfc3luY19jb21wbGV0ZWQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopdXJiLT5jb250ZXh0OwotCXN0cnVjdCB1c2JvdXQgKnUgPSAmYXMtPnVzYm91dDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBtYXNrOwotCWludCBzdXJldCA9IDA7Ci0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fREVCVUcgInVzYm91dF9zeW5jX2NvbXBsZXRlZDogc3RhdHVzICVkIGVycmNudCAlZCBmbGFncyAweCV4XG4iLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdS0+ZmxhZ3MpOwotI2VuZGlmCi0JaWYgKHVyYiA9PSB1LT5zdXJiWzBdLnVyYikKLQkJbWFzayA9IEZMR19TWU5DMFJVTk5JTkc7Ci0JZWxzZSBpZiAodXJiID09IHUtPnN1cmJbMV0udXJiKQotCQltYXNrID0gRkxHX1NZTkMxUlVOTklORzsKLQllbHNlIHsKLQkJbWFzayA9IDA7Ci0JCXByaW50ayhLRVJOX0VSUiAidXNib3V0X3N5bmNfY29tcGxldGVkOiBwYW5pYzogdW5rbm93biBVUkJcbiIpOwotCX0KLQl1cmItPmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OwotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCWlmICghdXNib3V0X3N5bmNfcmV0aXJlX2Rlc2ModSwgdXJiKSAmJgotCSAgICB1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmCi0JICAgICF1c2JvdXRfc3luY19wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAKLQkgICAgKHN1cmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgewotCQl1LT5mbGFncyB8PSBtYXNrOwotCX0gZWxzZSB7Ci0JCXUtPmZsYWdzICY9IH4obWFzayB8IEZMR19SVU5OSU5HKTsKLQkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOwotCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JvdXRfc3luY19jb21wbGV0ZWQ6IGRlc2NyaXB0b3Igbm90IHJlc3RhcnRlZCAodXNiX3N1Ym1pdF91cmI6ICVkKVxuIiwgc3VyZXQpKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCB1c2JvdXRfc3RhcnQoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OwotCXN0cnVjdCB1c2JvdXQgKnUgPSAmYXMtPnVzYm91dDsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgbWF4c3plLCBidWZzejsKLQotI2lmIDAKLQlwcmludGsoS0VSTl9ERUJVRyAidXNib3V0X3N0YXJ0OiBkZXZpY2UgJWQgdWZtdCAweCUwOHggZGZtdCAweCUwOHggc3JhdGUgJWRcbiIsCi0JICAgICAgIGRldi0+ZGV2bnVtLCB1LT5mb3JtYXQsIHUtPmRtYS5mb3JtYXQsIHUtPmRtYS5zcmF0ZSk7Ci0jZW5kaWYKLQkvKiBhbGxvY2F0ZSBVU0Igc3RvcmFnZSBpZiBub3QgYWxyZWFkeSBkb25lICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCEodS0+ZmxhZ3MgJiBGTEdfQ09OTkVDVEVEKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JaWYgKCEodS0+ZmxhZ3MgJiBGTEdfUlVOTklORykpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQkJdS0+ZnJlcW4gPSB1LT5mcmVxbSA9ICgodS0+ZG1hLnNyYXRlIDw8IDExKSArIDYyKSAvIDEyNTsgLyogdGhpcyB3aWxsIG92ZXJmbG93IGF0IGFwcHJveCAyTVNQUyAqLwotCQl1LT5mcmVxbWF4ID0gdS0+ZnJlcW4gKyAodS0+ZnJlcW4gPj4gMik7Ci0JCXUtPnBoYXNlID0gMDsKLQkJbWF4c3plID0gKHUtPmZyZXFtYXggKyAweDNmZmYpID4+ICgxNCAtIEFGTVRfQllURVNTSElGVCh1LT5mb3JtYXQpKTsKLQkJYnVmc3ogPSBERVNDRlJBTUVTICogbWF4c3plOwotCQlrZnJlZSh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwotCQl1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZnN6OwotCQlrZnJlZSh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwotCQl1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZnN6OwotCQlpZiAodS0+c3luY3BpcGUpIHsKLQkJCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCQkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMypTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQkJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMypTWU5DRlJBTUVTOwotCQkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0JCQl1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYygzKlNZTkNGUkFNRVMsIEdGUF9LRVJORUwpOwotCQkJdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzKlNZTkNGUkFNRVM7Ci0JCX0KLQkJaWYgKCF1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8ICF1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8IAotCQkgICAgKHUtPnN5bmNwaXBlICYmICghdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAhdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBjYW5ub3Qgc3RhcnQgcGxheWJhY2sgZGV2aWNlICVkXG4iLCBkZXYtPmRldm51bSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQl9Ci0JaWYgKHUtPmRtYS5jb3VudCA8PSAwICYmICF1LT5kbWEubWFwcGVkKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLSAgICAgICAJdS0+ZmxhZ3MgfD0gRkxHX1JVTk5JTkc7Ci0JaWYgKCEodS0+ZmxhZ3MgJiBGTEdfVVJCMFJVTk5JTkcpKSB7Ci0JCXVyYiA9IHUtPmR1cmJbMF0udXJiOwotCQl1cmItPmRldiA9IGRldjsKLQkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7Ci0JCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7Ci0JCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOwotCQl1cmItPmNvbnRleHQgPSBhczsKLQkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9jb21wbGV0ZWQ7Ci0JCWlmICghdXNib3V0X3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQotCQkJdS0+ZmxhZ3MgfD0gRkxHX1VSQjBSVU5OSU5HOwotCQllbHNlCi0JCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7Ci0JfQotCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfVVJCMVJVTk5JTkcpKSB7Ci0JCXVyYiA9IHUtPmR1cmJbMV0udXJiOwotCQl1cmItPmRldiA9IGRldjsKLQkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7Ci0JCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7Ci0JCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOwotCQl1cmItPmNvbnRleHQgPSBhczsKLQkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9jb21wbGV0ZWQ7Ci0JCWlmICghdXNib3V0X3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQotCQkJdS0+ZmxhZ3MgfD0gRkxHX1VSQjFSVU5OSU5HOwotCQllbHNlCi0JCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7Ci0JfQotCWlmICh1LT5zeW5jcGlwZSkgewotCQlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1NZTkMwUlVOTklORykpIHsKLQkJCXVyYiA9IHUtPnN1cmJbMF0udXJiOwotCQkJdXJiLT5kZXYgPSBkZXY7Ci0JCQl1cmItPnBpcGUgPSB1LT5zeW5jcGlwZTsKLQkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7Ci0JCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU1lOQ0ZSQU1FUzsKLQkJCXVyYi0+Y29udGV4dCA9IGFzOwotCQkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9zeW5jX2NvbXBsZXRlZDsKLQkJCS8qIHN0cmlkZTogdS0+c3luY2ludGVydmFsICovCi0JCQlpZiAoIXVzYm91dF9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQotCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMFJVTk5JTkc7Ci0JCQllbHNlCi0JCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOwotCQl9Ci0JCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzFSVU5OSU5HKSkgewotCQkJdXJiID0gdS0+c3VyYlsxXS51cmI7Ci0JCQl1cmItPmRldiA9IGRldjsKLQkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOwotCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOwotCQkJdXJiLT5jb250ZXh0ID0gYXM7Ci0JCQl1cmItPmNvbXBsZXRlID0gdXNib3V0X3N5bmNfY29tcGxldGVkOwotCQkJLyogc3RyaWRlOiB1LT5zeW5jaW50ZXJ2YWwgKi8KLQkJCWlmICghdXNib3V0X3N5bmNfcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgIXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpCi0JCQkJdS0+ZmxhZ3MgfD0gRkxHX1NZTkMxUlVOTklORzsKLQkJCWVsc2UKLQkJCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZm9ybWF0X2dvb2RuZXNzKHN0cnVjdCBhdWRpb2Zvcm1hdCAqYWZwLCB1bnNpZ25lZCBpbnQgZm10LCB1bnNpZ25lZCBpbnQgc3JhdGUpCi17Ci0JdW5zaWduZWQgaW50IGcgPSAwOwotCi0JaWYgKHNyYXRlIDwgYWZwLT5zcmF0ZWxvKQotCQlnICs9IGFmcC0+c3JhdGVsbyAtIHNyYXRlOwotCWlmIChzcmF0ZSA+IGFmcC0+c3JhdGVoaSkKLQkJZyArPSBzcmF0ZSAtIGFmcC0+c3JhdGVoaTsKLQlpZiAoQUZNVF9JU1NURVJFTyhhZnAtPmZvcm1hdCkgJiYgIUFGTVRfSVNTVEVSRU8oZm10KSkKLQkJZyArPSAweDEwMDAwMDsKLQlpZiAoIUFGTVRfSVNTVEVSRU8oYWZwLT5mb3JtYXQpICYmIEFGTVRfSVNTVEVSRU8oZm10KSkKLQkJZyArPSAweDQwMDAwMDsKLQlpZiAoQUZNVF9JUzE2QklUKGFmcC0+Zm9ybWF0KSAmJiAhQUZNVF9JUzE2QklUKGZtdCkpCi0JCWcgKz0gMHgxMDAwMDA7Ci0JaWYgKCFBRk1UX0lTMTZCSVQoYWZwLT5mb3JtYXQpICYmIEFGTVRfSVMxNkJJVChmbXQpKQotCQlnICs9IDB4NDAwMDAwOwotCXJldHVybiBnOwotfQotCi1zdGF0aWMgaW50IGZpbmRfZm9ybWF0KHN0cnVjdCBhdWRpb2Zvcm1hdCAqYWZwLCB1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBmbXQsIHVuc2lnbmVkIGludCBzcmF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgaSwgZywgZ2IgPSB+MDsKLQlpbnQgaiA9IC0xOyAvKiBkZWZhdWx0IHRvIGZhaWx1cmUgKi8KLQotCS8qIGZpbmQgImJlc3QiIGZvcm1hdCAoYWNjb3JkaW5nIHRvIGZvcm1hdF9nb29kbmVzcykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgewotCQlnID0gZm9ybWF0X2dvb2RuZXNzKCZhZnBbaV0sIGZtdCwgc3JhdGUpOwotCQlpZiAoZyA+PSBnYikgCi0JCQljb250aW51ZTsKLQkJaiA9IGk7Ci0JCWdiID0gZzsKLQl9Ci0gICAgICAgCXJldHVybiBqOwotfQotCi1zdGF0aWMgaW50IHNldF9mb3JtYXRfaW4oc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOwotCXN0cnVjdCB1c2JpbiAqdSA9ICZhcy0+dXNiaW47Ci0Jc3RydWN0IGRtYWJ1ZiAqZCA9ICZ1LT5kbWE7Ci0Jc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQ7Ci0JdW5zaWduZWQgaW50IGVwOwotCXVuc2lnbmVkIGNoYXIgZGF0YVszXTsKLQlpbnQgZm10bnIsIHJldDsKLQotCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgdS0+aW50ZXJmYWNlKTsKLQlpZiAoIWlmYWNlKQotCQlyZXR1cm4gMDsKLQotCWZtdG5yID0gZmluZF9mb3JtYXQoYXMtPmZtdGluLCBhcy0+bnVtZm10aW4sIGQtPmZvcm1hdCwgZC0+c3JhdGUpOwotCWlmIChmbXRuciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbigpOiBmYWlsZWQgdG8gZmluZCBkZXNpcmVkIGZvcm1hdC9zcGVlZCBjb21iaW5hdGlvbi5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZm10ID0gYXMtPmZtdGluICsgZm10bnI7Ci0JYWx0cyA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKLQl1LT5mb3JtYXQgPSBmbXQtPmZvcm1hdDsKLQl1LT5kYXRhcGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkZXYsIGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4Zik7Ci0JdS0+c3luY3BpcGUgPSB1LT5zeW5jaW50ZXJ2YWwgPSAwOwotCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDBjKSA9PSAweDA4KSB7Ci0JCWlmIChhbHRzLT5kZXNjLmJOdW1FbmRwb2ludHMgPCAyIHx8Ci0JCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJtQXR0cmlidXRlcyAhPSAweDAxIHx8Ci0JCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJTeW5jaEFkZHJlc3MgIT0gMCB8fAotCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICE9IChhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJTeW5jaEFkZHJlc3MgJiAweDdmKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBjbGFpbXMgYWRhcHRpdmUgaW4gIgotCQkJICAgICAgICJidXQgaGFzIGludmFsaWQgc3luY2ggcGlwZTsgdHJlYXRpbmcgYXMgYXN5bmNocm9ub3VzIGluXG4iLAotCQkJICAgICAgIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZyk7Ci0JCX0gZWxzZSB7Ci0JCQl1LT5zeW5jcGlwZSA9IHVzYl9zbmRpc29jcGlwZShkZXYsIGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4Zik7Ci0JCQl1LT5zeW5jaW50ZXJ2YWwgPSBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJSZWZyZXNoOwotCQl9Ci0JfQotCWlmIChkLT5zcmF0ZSA8IGZtdC0+c3JhdGVsbykKLQkJZC0+c3JhdGUgPSBmbXQtPnNyYXRlbG87Ci0JaWYgKGQtPnNyYXRlID4gZm10LT5zcmF0ZWhpKQotCQlkLT5zcmF0ZSA9IGZtdC0+c3JhdGVoaTsKLQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbjogdXNiX3NldF9pbnRlcmZhY2UgJXUgJXVcbiIsCi0JCQl1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZykpOwotCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFsdHMtPmRlc2MuYkludGVyZmFjZU51bWJlciwgZm10LT5hbHRzZXR0aW5nKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkXG4iLAotCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoZm10LT5zcmF0ZWxvID09IGZtdC0+c3JhdGVoaSkKLQkJcmV0dXJuIDA7Ci0JZXAgPSB1c2JfcGlwZWVuZHBvaW50KHUtPmRhdGFwaXBlKSB8ICh1LT5kYXRhcGlwZSAmIFVTQl9ESVJfSU4pOwotCS8qIGlmIGVuZHBvaW50IGhhcyBwaXRjaCBjb250cm9sLCBlbmFibGUgaXQgKi8KLQlpZiAoZm10LT5hdHRyaWJ1dGVzICYgMHgwMikgewotCQlkYXRhWzBdID0gMTsKLQkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKLQkJCQkJICAgUElUQ0hfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMSwgMTAwMCkpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIHNldCBvdXRwdXQgcGl0Y2ggY29udHJvbCBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCi0JCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCS8qIGlmIGVuZHBvaW50IGhhcyBzYW1wbGluZyByYXRlIGNvbnRyb2wsIHNldCBpdCAqLwotCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiAweDAxKSB7Ci0JCWRhdGFbMF0gPSBkLT5zcmF0ZTsKLQkJZGF0YVsxXSA9IGQtPnNyYXRlID4+IDg7Ci0JCWRhdGFbMl0gPSBkLT5zcmF0ZSA+PiAxNjsKLQkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKLQkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gc2V0IGlucHV0IHNhbXBsaW5nIGZyZXF1ZW5jeSBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCi0JCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX0lOLAotCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGZhaWx1cmUgKGVycm9yICVkKSB0byBnZXQgaW5wdXQgc2FtcGxpbmcgZnJlcXVlbmN5IGRldmljZSAlZCBpbnRlcmZhY2UgJXUgZW5kcG9pbnQgMHgleFxuIiwKLQkJCSAgICAgICByZXQsIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGVwKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbjogZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIHNyYXRlIHJlcTogJXUgcmVhbCAldVxuIiwKLQkJICAgICAgICBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGQtPnNyYXRlLCBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNikpKTsKLQkJZC0+c3JhdGUgPSBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNik7Ci0JfQotCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X2luOiBVU0IgZm9ybWF0IDB4JXgsIERNQSBmb3JtYXQgMHgleCBzcmF0ZSAldVxuIiwgdS0+Zm9ybWF0LCBkLT5mb3JtYXQsIGQtPnNyYXRlKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2Zvcm1hdF9vdXQoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOwkKLQlzdHJ1Y3QgdXNib3V0ICp1ID0gJmFzLT51c2JvdXQ7Ci0Jc3RydWN0IGRtYWJ1ZiAqZCA9ICZ1LT5kbWE7Ci0Jc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQ7Ci0JdW5zaWduZWQgaW50IGVwOwotCXVuc2lnbmVkIGNoYXIgZGF0YVszXTsKLQlpbnQgZm10bnIsIHJldDsKLQotCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgdS0+aW50ZXJmYWNlKTsKLQlpZiAoIWlmYWNlKQotCQlyZXR1cm4gMDsKLQotCWZtdG5yID0gZmluZF9mb3JtYXQoYXMtPmZtdG91dCwgYXMtPm51bWZtdG91dCwgZC0+Zm9ybWF0LCBkLT5zcmF0ZSk7Ci0JaWYgKGZtdG5yIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dCgpOiBmYWlsZWQgdG8gZmluZCBkZXNpcmVkIGZvcm1hdC9zcGVlZCBjb21iaW5hdGlvbi5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZm10ID0gYXMtPmZtdG91dCArIGZtdG5yOwotCXUtPmZvcm1hdCA9IGZtdC0+Zm9ybWF0OwotCWFsdHMgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGZtdC0+YWx0c2V0dGluZyk7Ci0JdS0+ZGF0YXBpcGUgPSB1c2Jfc25kaXNvY3BpcGUoZGV2LCBhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweGYpOwotCXUtPnN5bmNwaXBlID0gdS0+c3luY2ludGVydmFsID0gMDsKLQlpZiAoKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYm1BdHRyaWJ1dGVzICYgMHgwYykgPT0gMHgwNCkgewotI2lmIDAKLQkJcHJpbnRrKEtFUk5fREVCVUcgImJOdW1FbmRwb2ludHMgMHglMDJ4IGVuZHBvaW50WzFdLmJtQXR0cmlidXRlcyAweCUwMnhcbiIKLQkJICAgICAgIEtFUk5fREVCVUcgImVuZHBvaW50WzFdLmJTeW5jaEFkZHJlc3MgMHglMDJ4IGVuZHBvaW50WzFdLmJFbmRwb2ludEFkZHJlc3MgMHglMDJ4XG4iCi0JCSAgICAgICBLRVJOX0RFQlVHICJlbmRwb2ludFswXS5iU3luY2hBZGRyZXNzIDB4JTAyeFxuIiwgYWx0cy0+Yk51bUVuZHBvaW50cywKLQkJICAgICAgIGFsdHMtPmVuZHBvaW50WzFdLmJtQXR0cmlidXRlcywgYWx0cy0+ZW5kcG9pbnRbMV0uYlN5bmNoQWRkcmVzcywKLQkJICAgICAgIGFsdHMtPmVuZHBvaW50WzFdLmJFbmRwb2ludEFkZHJlc3MsIGFsdHMtPmVuZHBvaW50WzBdLmJTeW5jaEFkZHJlc3MpOwotI2VuZGlmCi0JCWlmIChhbHRzLT5kZXNjLmJOdW1FbmRwb2ludHMgPCAyIHx8Ci0JCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJtQXR0cmlidXRlcyAhPSAweDAxIHx8Ci0JCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJTeW5jaEFkZHJlc3MgIT0gMCB8fAotCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICE9IChhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJTeW5jaEFkZHJlc3MgfCAweDgwKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBjbGFpbXMgYXN5bmNoIG91dCAiCi0JCQkgICAgICAgImJ1dCBoYXMgaW52YWxpZCBzeW5jaCBwaXBlOyB0cmVhdGluZyBhcyBhZGFwdGl2ZSBvdXRcbiIsCi0JCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKLQkJfSBlbHNlIHsKLQkJCXUtPnN5bmNwaXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHhmKTsKLQkJCXUtPnN5bmNpbnRlcnZhbCA9IGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYlJlZnJlc2g7Ci0JCX0KLQl9Ci0JaWYgKGQtPnNyYXRlIDwgZm10LT5zcmF0ZWxvKQotCQlkLT5zcmF0ZSA9IGZtdC0+c3JhdGVsbzsKLQlpZiAoZC0+c3JhdGUgPiBmbXQtPnNyYXRlaGkpCi0JCWQtPnNyYXRlID0gZm10LT5zcmF0ZWhpOwotCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogdXNiX3NldF9pbnRlcmZhY2UgJXUgJXVcbiIsCi0JCQl1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZykpOwotCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkZXYsIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkXG4iLAotCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoZm10LT5zcmF0ZWxvID09IGZtdC0+c3JhdGVoaSkKLQkJcmV0dXJuIDA7Ci0JZXAgPSB1c2JfcGlwZWVuZHBvaW50KHUtPmRhdGFwaXBlKSB8ICh1LT5kYXRhcGlwZSAmIFVTQl9ESVJfSU4pOwotCS8qIGlmIGVuZHBvaW50IGhhcyBwaXRjaCBjb250cm9sLCBlbmFibGUgaXQgKi8KLQlpZiAoZm10LT5hdHRyaWJ1dGVzICYgMHgwMikgewotCQlkYXRhWzBdID0gMTsKLQkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKLQkJCQkJICAgUElUQ0hfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMSwgMTAwMCkpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIHNldCBvdXRwdXQgcGl0Y2ggY29udHJvbCBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCi0JCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCS8qIGlmIGVuZHBvaW50IGhhcyBzYW1wbGluZyByYXRlIGNvbnRyb2wsIHNldCBpdCAqLwotCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiAweDAxKSB7Ci0JCWRhdGFbMF0gPSBkLT5zcmF0ZTsKLQkJZGF0YVsxXSA9IGQtPnNyYXRlID4+IDg7Ci0JCWRhdGFbMl0gPSBkLT5zcmF0ZSA+PiAxNjsKLQkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKLQkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gc2V0IG91dHB1dCBzYW1wbGluZyBmcmVxdWVuY3kgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4IHRvICV1XG4iLAotCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXAsIGQtPnNyYXRlKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9JTiwKLQkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gZ2V0IG91dHB1dCBzYW1wbGluZyBmcmVxdWVuY3kgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4XG4iLAotCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXApOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIHNyYXRlIHJlcTogJXUgcmVhbCAldVxuIiwKLQkJICAgICAgICBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGQtPnNyYXRlLCBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNikpKTsKLQkJZC0+c3JhdGUgPSBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNik7Ci0JfQotCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogVVNCIGZvcm1hdCAweCV4LCBETUEgZm9ybWF0IDB4JXggc3JhdGUgJXVcbiIsIHUtPmZvcm1hdCwgZC0+Zm9ybWF0LCBkLT5zcmF0ZSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9mb3JtYXQoc3RydWN0IHVzYl9hdWRpb2RldiAqcywgdW5zaWduZWQgaW50IGZtb2RlLCB1bnNpZ25lZCBpbnQgZm10LCB1bnNpZ25lZCBpbnQgc3JhdGUpCi17Ci0JaW50IHJldDEgPSAwLCByZXQyID0gMDsKLQotCWlmICghKGZtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGZtb2RlICYgRk1PREVfUkVBRCkgewotCQl1c2Jpbl9zdG9wKHMpOwotCQlzLT51c2Jpbi5kbWEucmVhZHkgPSAwOwotCQlpZiAoZm10ID09IEFGTVRfUVVFUlkpCi0JCQlmbXQgPSBzLT51c2Jpbi5kbWEuZm9ybWF0OwotCQllbHNlCi0JCQlzLT51c2Jpbi5kbWEuZm9ybWF0ID0gZm10OwotCQlpZiAoIXNyYXRlKQotCQkJc3JhdGUgPSBzLT51c2Jpbi5kbWEuc3JhdGU7Ci0JCWVsc2UKLQkJCXMtPnVzYmluLmRtYS5zcmF0ZSA9IHNyYXRlOwotCX0KLQlpZiAoZm1vZGUgJiBGTU9ERV9XUklURSkgewotCQl1c2JvdXRfc3RvcChzKTsKLQkJcy0+dXNib3V0LmRtYS5yZWFkeSA9IDA7Ci0JCWlmIChmbXQgPT0gQUZNVF9RVUVSWSkKLQkJCWZtdCA9IHMtPnVzYm91dC5kbWEuZm9ybWF0OwotCQllbHNlCi0JCQlzLT51c2JvdXQuZG1hLmZvcm1hdCA9IGZtdDsKLQkJaWYgKCFzcmF0ZSkKLQkJCXNyYXRlID0gcy0+dXNib3V0LmRtYS5zcmF0ZTsKLQkJZWxzZQotCQkJcy0+dXNib3V0LmRtYS5zcmF0ZSA9IHNyYXRlOwotCX0KLQlpZiAoZm1vZGUgJiBGTU9ERV9SRUFEKQotCQlyZXQxID0gc2V0X2Zvcm1hdF9pbihzKTsKLQlpZiAoZm1vZGUgJiBGTU9ERV9XUklURSkKLQkJcmV0MiA9IHNldF9mb3JtYXRfb3V0KHMpOwotCXJldHVybiByZXQxID8gcmV0MSA6IHJldDI7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IHdybWl4ZXIoc3RydWN0IHVzYl9taXhlcmRldiAqbXMsIHVuc2lnbmVkIG1peGNoLCB1bnNpZ25lZCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gbXMtPnN0YXRlLT51c2JkZXY7Ci0JdW5zaWduZWQgY2hhciBkYXRhWzJdOwotCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOwotCWludCB2MSwgdjIsIHYzOwotCi0JaWYgKG1peGNoID49IG1zLT5udW1jaCkKLQkJcmV0dXJuIC0xOwotCWNoID0gJm1zLT5jaFttaXhjaF07Ci0JdjMgPSBjaC0+bWF4dmFsIC0gY2gtPm1pbnZhbDsKLQl2MSA9IHZhbHVlICYgMHhmZjsKLQl2MiA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7Ci0JaWYgKHYxID4gMTAwKQotCQl2MSA9IDEwMDsKLQlpZiAodjIgPiAxMDApCi0JCXYyID0gMTAwOwotCWlmICghKGNoLT5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkpCi0JCXYyID0gdjE7Ci0JY2gtPnZhbHVlID0gdjEgfCAodjIgPDwgOCk7Ci0JdjEgPSAodjEgKiB2MykgLyAxMDAgKyBjaC0+bWludmFsOwotCXYyID0gKHYyICogdjMpIC8gMTAwICsgY2gtPm1pbnZhbDsKLQlzd2l0Y2ggKGNoLT5zZWxlY3RvcikgewotCWNhc2UgMDogIC8qIG1peGVyIHVuaXQgcmVxdWVzdCAqLwotCQlkYXRhWzBdID0gdjE7Ci0JCWRhdGFbMV0gPSB2MSA+PiA4OwotCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAotCQkJCSAgICAoY2gtPmNobnVtIDw8IDgpIHwgMSwgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDIsIDEwMDApIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpZiAoIShjaC0+ZmxhZ3MgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpKQotCQkJcmV0dXJuIDA7Ci0JCWRhdGFbMF0gPSB2MjsKLQkJZGF0YVsxXSA9IHYyID4+IDg7Ci0JCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCi0JCQkJICAgICgoY2gtPmNobnVtICsgISEoY2gtPmZsYWdzICYgTUlYRkxHX1NURVJFT0lOKSkgPDwgOCkgfCAoMSArICEhKGNoLT5mbGFncyAmIE1JWEZMR19TVEVSRU9PVVQpKSwKLQkJCQkgICAgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDIsIDEwMDApIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlyZXR1cm4gMDsKLQotCQkvKiB2YXJpb3VzIGZlYXR1cmUgdW5pdCBjb250cm9scyAqLwotCWNhc2UgVk9MVU1FX0NPTlRST0w6Ci0JCWRhdGFbMF0gPSB2MTsKLQkJZGF0YVsxXSA9IHYxID4+IDg7Ci0JCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCi0JCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAyLCAxMDAwKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaWYgKCEoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSkKLQkJCXJldHVybiAwOwotCQlkYXRhWzBdID0gdjI7Ci0JCWRhdGFbMV0gPSB2MiA+PiA4OwotCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAotCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgKGNoLT5jaG51bSArIDEpLCBtcy0+aWZhY2UgfCAoY2gtPnVuaXRpZCA8PCA4KSwgZGF0YSwgMiwgMTAwMCkgPCAwKQotCQkJZ290byBlcnI7Ci0JCXJldHVybiAwOwotICAgICAgICAgICAgICAgIAotCWNhc2UgQkFTU19DT05UUk9MOgotCWNhc2UgTUlEX0NPTlRST0w6Ci0JY2FzZSBUUkVCTEVfQ09OVFJPTDoKLQkJZGF0YVswXSA9IHYxID4+IDg7Ci0JCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCi0JCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAxLCAxMDAwKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJaWYgKCEoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSkKLQkJCXJldHVybiAwOwotCQlkYXRhWzBdID0gdjIgPj4gODsKLQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKLQkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IChjaC0+Y2hudW0gKyAxKSwgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDEsIDEwMDApIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlyZXR1cm4gMDsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIDA7Ci0KLSBlcnI6Ci0JcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogbWl4ZXIgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBjaCAldSBzZWxlY3RvciAldSBmYWlsZWRcbiIsIAotCQlkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBjaC0+dW5pdGlkLCBjaC0+Y2hudW0sIGNoLT5zZWxlY3Rvcik7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGdldF9yZWNfc3JjKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtcy0+c3RhdGUtPnVzYmRldjsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDAsIHJldG1hc2sgPSAwOwotCXVuc2lnbmVkIGludCBpLCBqOwotCXVuc2lnbmVkIGNoYXIgYnVmOwotCWludCBlcnIgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG1zLT5udW1jaDsgaSsrKSB7Ci0JCWlmICghbXMtPmNoW2ldLnNsY3R1bml0aWQgfHwgKG1hc2sgJiAoMSA8PCBpKSkpCi0JCQljb250aW51ZTsKLQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAotCQkJCSAgICAwLCBtcy0+aWZhY2UgfCAobXMtPmNoW2ldLnNsY3R1bml0aWQgPDwgOCksICZidWYsIDEsIDEwMDApIDwgMCkgewotCQkJZXJyID0gLUVJTzsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHNlbGVjdG9yIHJlYWQgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBmYWlsZWRcbiIsIAotCQkJICAgICAgIGRldi0+ZGV2bnVtLCBtcy0+aWZhY2UsIG1zLT5jaFtpXS5zbGN0dW5pdGlkICYgMHhmZik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlmb3IgKGogPSBpOyBqIDwgbXMtPm51bWNoOyBqKyspIHsKLQkJCWlmICgobXMtPmNoW2ldLnNsY3R1bml0aWQgXiBtcy0+Y2hbal0uc2xjdHVuaXRpZCkgJiAweGZmKQotCQkJCWNvbnRpbnVlOwotCQkJbWFzayB8PSAxIDw8IGo7Ci0JCQlpZiAoYnVmID09IChtcy0+Y2hbal0uc2xjdHVuaXRpZCA+PiA4KSkKLQkJCQlyZXRtYXNrIHw9IDEgPDwgbXMtPmNoW2pdLm9zc2NoYW5uZWw7Ci0JCX0KLQl9Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIHJldG1hc2s7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3JlY19zcmMoc3RydWN0IHVzYl9taXhlcmRldiAqbXMsIGludCBzcmNtYXNrKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtcy0+c3RhdGUtPnVzYmRldjsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDAsIHNtYXNrLCBibWFzazsKLQl1bnNpZ25lZCBpbnQgaSwgajsKLQl1bnNpZ25lZCBjaGFyIGJ1ZjsKLQlpbnQgZXJyID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBtcy0+bnVtY2g7IGkrKykgewotCQlpZiAoIW1zLT5jaFtpXS5zbGN0dW5pdGlkIHx8IChtYXNrICYgKDEgPDwgaSkpKQotCQkJY29udGludWU7Ci0JCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKLQkJCQkgICAgMCwgbXMtPmlmYWNlIHwgKG1zLT5jaFtpXS5zbGN0dW5pdGlkIDw8IDgpLCAmYnVmLCAxLCAxMDAwKSA8IDApIHsKLQkJCWVyciA9IC1FSU87Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBzZWxlY3RvciByZWFkIHJlcXVlc3QgZGV2aWNlICV1IGlmICV1IHVuaXQgJXUgZmFpbGVkXG4iLCAKLQkJCSAgICAgICBkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBtcy0+Y2hbaV0uc2xjdHVuaXRpZCAmIDB4ZmYpOwotCQkJY29udGludWU7Ci0JCX0KLQkJLyogZmlyc3QgZ2VuZXJhdGUgc21hc2sgKi8KLQkJc21hc2sgPSBibWFzayA9IDA7Ci0JCWZvciAoaiA9IGk7IGogPCBtcy0+bnVtY2g7IGorKykgewotCQkJaWYgKChtcy0+Y2hbaV0uc2xjdHVuaXRpZCBeIG1zLT5jaFtqXS5zbGN0dW5pdGlkKSAmIDB4ZmYpCi0JCQkJY29udGludWU7Ci0JCQlzbWFzayB8PSAxIDw8IG1zLT5jaFtqXS5vc3NjaGFubmVsOwotCQkJaWYgKGJ1ZiA9PSAobXMtPmNoW2pdLnNsY3R1bml0aWQgPj4gOCkpCi0JCQkJYm1hc2sgfD0gMSA8PCBtcy0+Y2hbal0ub3NzY2hhbm5lbDsKLQkJCW1hc2sgfD0gMSA8PCBqOwotCQl9Ci0JCS8qIGNoZWNrIGZvciBtdWx0aXBsZSBzZXQgc291cmNlcyAqLwotCQlqID0gaHdlaWdodDMyKHNyY21hc2sgJiBzbWFzayk7Ci0JCWlmIChqID09IDApCi0JCQljb250aW51ZTsKLQkJaWYgKGogPiAxKQotCQkJc3JjbWFzayAmPSB+Ym1hc2s7Ci0JCWZvciAoaiA9IGk7IGogPCBtcy0+bnVtY2g7IGorKykgewotCQkJaWYgKChtcy0+Y2hbaV0uc2xjdHVuaXRpZCBeIG1zLT5jaFtqXS5zbGN0dW5pdGlkKSAmIDB4ZmYpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIShzcmNtYXNrICYgKDEgPDwgbXMtPmNoW2pdLm9zc2NoYW5uZWwpKSkKLQkJCQljb250aW51ZTsKLQkJCWJ1ZiA9IG1zLT5jaFtqXS5zbGN0dW5pdGlkID4+IDg7Ci0JCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAotCQkJCSAgICAwLCBtcy0+aWZhY2UgfCAobXMtPmNoW2pdLnNsY3R1bml0aWQgPDwgOCksICZidWYsIDEsIDEwMDApIDwgMCkgewotCQkJCWVyciA9IC1FSU87Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogc2VsZWN0b3Igd3JpdGUgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBmYWlsZWRcbiIsIAotCQkJCSAgICAgICBkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBtcy0+Y2hbal0uc2xjdHVuaXRpZCAmIDB4ZmYpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBlcnIgPyAtRUlPIDogMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggb3Blbl9zZW0gaG9sZCwgc28gdGhhdCBubyBuZXcgcHJvY2Vzc2VzCi0gKiBsb29rIGF0IHRoZSBhdWRpbyBkZXZpY2UgdG8gYmUgZGVzdHJveWVkCi0gKi8KLQotc3RhdGljIHZvaWQgcmVsZWFzZShzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlICpzKQotewotCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOwotCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zOwotCi0Jcy0+Y291bnQtLTsKLQlpZiAocy0+Y291bnQpIHsKLQkJdXAoJm9wZW5fc2VtKTsKLQkJcmV0dXJuOwotCX0KLQl1cCgmb3Blbl9zZW0pOwotCXdha2VfdXAoJm9wZW5fd2FpdCk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzLT5hdWRpb2xpc3QpKSB7Ci0JCWFzID0gbGlzdF9lbnRyeShzLT5hdWRpb2xpc3QubmV4dCwgc3RydWN0IHVzYl9hdWRpb2RldiwgbGlzdCk7Ci0JCWxpc3RfZGVsKCZhcy0+bGlzdCk7Ci0JCXVzYmluX3JlbGVhc2UoYXMpOwotCQl1c2JvdXRfcmVsZWFzZShhcyk7Ci0JCWRtYWJ1Zl9yZWxlYXNlKCZhcy0+dXNiaW4uZG1hKTsKLQkJZG1hYnVmX3JlbGVhc2UoJmFzLT51c2JvdXQuZG1hKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzBdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlsxXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMF0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzFdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMF0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlsxXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzBdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMV0udXJiKTsKLQkJa2ZyZWUoYXMpOwotCX0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnMtPm1peGVybGlzdCkpIHsKLQkJbXMgPSBsaXN0X2VudHJ5KHMtPm1peGVybGlzdC5uZXh0LCBzdHJ1Y3QgdXNiX21peGVyZGV2LCBsaXN0KTsKLQkJbGlzdF9kZWwoJm1zLT5saXN0KTsKLQkJa2ZyZWUobXMpOwotCX0KLQlrZnJlZShzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHJvZ19kbWFidWZfaW4oc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCi17Ci0JdXNiaW5fc3RvcChhcyk7Ci0JcmV0dXJuIGRtYWJ1Zl9pbml0KCZhcy0+dXNiaW4uZG1hKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHJvZ19kbWFidWZfb3V0KHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQotewotCXVzYm91dF9zdG9wKGFzKTsKLQlyZXR1cm4gZG1hYnVmX2luaXQoJmFzLT51c2JvdXQuZG1hKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgdXNiX2F1ZGlvX29wZW5fbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0Jc3RydWN0IHVzYl9taXhlcmRldiAqbXM7Ci0Jc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKLQotCWRvd24oJm9wZW5fc2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZhdWRpb2RldnMsIGF1ZGlvZGV2KSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkobXMsICZzLT5taXhlcmxpc3QsIGxpc3QpIHsKLQkJCWlmIChtcy0+ZGV2X21peGVyID09IG1pbm9yKQotCQkJCWdvdG8gbWl4ZXJfZm91bmQ7Ci0JCX0KLQl9Ci0JdXAoJm9wZW5fc2VtKTsKLQlyZXR1cm4gLUVOT0RFVjsKLQotIG1peGVyX2ZvdW5kOgotCWlmICghcy0+dXNiZGV2KSB7Ci0JCXVwKCZvcGVuX3NlbSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBtczsKLQlzLT5jb3VudCsrOwotCi0JdXAoJm9wZW5fc2VtKTsKLQlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX2F1ZGlvX3JlbGVhc2VfbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zID0gKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKLQotCWxvY2tfa2VybmVsKCk7Ci0JcyA9IG1zLT5zdGF0ZTsKLQlkb3duKCZvcGVuX3NlbSk7Ci0JcmVsZWFzZShzKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX2F1ZGlvX2lvY3RsX21peGRldihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IHVzYl9taXhlcmRldiAqbXMgPSAoc3RydWN0IHVzYl9taXhlcmRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgaSwgaiwgdmFsOwotCWludCBfX3VzZXIgKnVzZXJfYXJnID0gKGludCBfX3VzZXIgKilhcmc7Ci0KLQlpZiAoIW1zLT5zdGF0ZS0+dXNiZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLSAgCi0JaWYgKGNtZCA9PSBTT1VORF9NSVhFUl9JTkZPKSB7Ci0JCW1peGVyX2luZm8gaW5mbzsKLQotCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0JCXN0cm5jcHkoaW5mby5pZCwgIlVTQl9BVURJTyIsIHNpemVvZihpbmZvLmlkKSk7Ci0JCXN0cm5jcHkoaW5mby5uYW1lLCAiVVNCIEF1ZGlvIENsYXNzIERyaXZlciIsIHNpemVvZihpbmZvLm5hbWUpKTsKLQkJaW5mby5tb2RpZnlfY291bnRlciA9IG1zLT5tb2RjbnQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGNtZCA9PSBTT1VORF9PTERfTUlYRVJfSU5GTykgewotCQlfb2xkX21peGVyX2luZm8gaW5mbzsKLQotCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0JCXN0cm5jcHkoaW5mby5pZCwgIlVTQl9BVURJTyIsIHNpemVvZihpbmZvLmlkKSk7Ci0JCXN0cm5jcHkoaW5mby5uYW1lLCAiVVNCIEF1ZGlvIENsYXNzIERyaXZlciIsIHNpemVvZihpbmZvLm5hbWUpKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmZvLCBzaXplb2YoaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoY21kID09IE9TU19HRVRWRVJTSU9OKQotCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgdXNlcl9hcmcpOwotCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnTScgfHwgX0lPQ19TSVpFKGNtZCkgIT0gc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChfSU9DX0RJUihjbWQpID09IF9JT0NfUkVBRCkgewotCQlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgewotCQljYXNlIFNPVU5EX01JWEVSX1JFQ1NSQzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHJlY29yZGluZyBzb3VyY2UgKi8KLQkJCXZhbCA9IGdldF9yZWNfc3JjKG1zKTsKLQkJCWlmICh2YWwgPCAwKQotCQkJCXJldHVybiB2YWw7Ci0JCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7Ci0KLQkJY2FzZSBTT1VORF9NSVhFUl9ERVZNQVNLOiAvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIGRldmljZSAqLwotCQkJZm9yICh2YWwgPSBpID0gMDsgaSA8IG1zLT5udW1jaDsgaSsrKQotCQkJCXZhbCB8PSAxIDw8IG1zLT5jaFtpXS5vc3NjaGFubmVsOwotCQkJcmV0dXJuIHB1dF91c2VyKHZhbCwgdXNlcl9hcmcpOwotCi0JCWNhc2UgU09VTkRfTUlYRVJfUkVDTUFTSzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHN1cHBvcnRlZCByZWNvcmRpbmcgc291cmNlICovCi0JCQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgbXMtPm51bWNoOyBpKyspCi0JCQkJaWYgKG1zLT5jaFtpXS5zbGN0dW5pdGlkKQotCQkJCQl2YWwgfD0gMSA8PCBtcy0+Y2hbaV0ub3NzY2hhbm5lbDsKLQkJCXJldHVybiBwdXRfdXNlcih2YWwsIHVzZXJfYXJnKTsKLQotCQljYXNlIFNPVU5EX01JWEVSX1NURVJFT0RFVlM6IC8qIE1peGVyIGNoYW5uZWxzIHN1cHBvcnRpbmcgc3RlcmVvICovCi0JCQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgbXMtPm51bWNoOyBpKyspCi0JCQkJaWYgKG1zLT5jaFtpXS5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkKLQkJCQkJdmFsIHw9IDEgPDwgbXMtPmNoW2ldLm9zc2NoYW5uZWw7Ci0JCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7Ci0JCQkKLQkJY2FzZSBTT1VORF9NSVhFUl9DQVBTOgotCQkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX0NBUF9FWENMX0lOUFVULCB1c2VyX2FyZyk7Ci0KLQkJZGVmYXVsdDoKLQkJCWkgPSBfSU9DX05SKGNtZCk7Ci0JCQlpZiAoaSA+PSBTT1VORF9NSVhFUl9OUkRFVklDRVMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlmb3IgKGogPSAwOyBqIDwgbXMtPm51bWNoOyBqKyspIHsKLQkJCQlpZiAobXMtPmNoW2pdLm9zc2NoYW5uZWwgPT0gaSkgewotCQkJCQlyZXR1cm4gcHV0X3VzZXIobXMtPmNoW2pdLnZhbHVlLCB1c2VyX2FyZyk7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0JaWYgKF9JT0NfRElSKGNtZCkgIT0gKF9JT0NfUkVBRHxfSU9DX1dSSVRFKSkgCi0JCXJldHVybiAtRUlOVkFMOwotCW1zLT5tb2RjbnQrKzsKLQlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgewotCWNhc2UgU09VTkRfTUlYRVJfUkVDU1JDOiAvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggcmVjb3JkaW5nIHNvdXJjZSAqLwotCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIHNldF9yZWNfc3JjKG1zLCB2YWwpOwotCi0JZGVmYXVsdDoKLQkJaSA9IF9JT0NfTlIoY21kKTsKLQkJaWYgKGkgPj0gU09VTkRfTUlYRVJfTlJERVZJQ0VTKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWZvciAoaiA9IDA7IGogPCBtcy0+bnVtY2ggJiYgbXMtPmNoW2pdLm9zc2NoYW5uZWwgIT0gaTsgaisrKTsKLQkJaWYgKGogPj0gbXMtPm51bWNoKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAod3JtaXhlcihtcywgaiwgdmFsKSkKLQkJCXJldHVybiAtRUlPOwotCQlyZXR1cm4gcHV0X3VzZXIobXMtPmNoW2pdLnZhbHVlLCB1c2VyX2FyZyk7Ci0JfQotfQotCi1zdGF0aWMgLypjb25zdCovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX21peGVyX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9CW5vX2xsc2VlaywKLQkuaW9jdGwgPQl1c2JfYXVkaW9faW9jdGxfbWl4ZGV2LAotCS5vcGVuID0JCXVzYl9hdWRpb19vcGVuX21peGRldiwKLQkucmVsZWFzZSA9CXVzYl9hdWRpb19yZWxlYXNlX21peGRldiwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IGRyYWluX291dChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcywgaW50IG5vbmJsb2NrKQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNvdW50LCB0bW87Ci0JCi0JaWYgKGFzLT51c2JvdXQuZG1hLm1hcHBlZCB8fCAhYXMtPnVzYm91dC5kbWEucmVhZHkpCi0JCXJldHVybiAwOwotCXVzYm91dF9zdGFydChhcyk7Ci0JYWRkX3dhaXRfcXVldWUoJmFzLT51c2JvdXQuZG1hLndhaXQsICZ3YWl0KTsKLQlmb3IgKDs7KSB7Ci0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50ID0gYXMtPnVzYm91dC5kbWEuY291bnQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjb3VudCA8PSAwKQotCQkJYnJlYWs7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOwotCQlpZiAobm9uYmxvY2spIHsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNib3V0LmRtYS53YWl0LCAmd2FpdCk7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCQl0bW8gPSAzICogSFogKiBjb3VudCAvIGFzLT51c2JvdXQuZG1hLnNyYXRlOwotCQl0bW8gPj49IEFGTVRfQllURVNTSElGVChhcy0+dXNib3V0LmRtYS5mb3JtYXQpOwotCQlpZiAoIXNjaGVkdWxlX3RpbWVvdXQodG1vICsgMSkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJ1c2JhdWRpbzogZG1hIHRpbWVkIG91dD8/XG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNib3V0LmRtYS53YWl0LCAmd2FpdCk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3NpemVfdCB1c2JfYXVkaW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzc2l6ZV90IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgcHRyOwotCWludCBjbnQsIGVycjsKLQotCWlmIChhcy0+dXNiaW4uZG1hLm1hcHBlZCkKLQkJcmV0dXJuIC1FTlhJTzsKLQlpZiAoIWFzLT51c2Jpbi5kbWEucmVhZHkgJiYgKHJldCA9IHByb2dfZG1hYnVmX2luKGFzKSkpCi0JCXJldHVybiByZXQ7Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JYWRkX3dhaXRfcXVldWUoJmFzLT51c2Jpbi5kbWEud2FpdCwgJndhaXQpOwotCXdoaWxlIChjb3VudCA+IDApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCXB0ciA9IGFzLT51c2Jpbi5kbWEucmRwdHI7Ci0JCWNudCA9IGFzLT51c2Jpbi5kbWEuY291bnQ7Ci0JCS8qIHNldCB0YXNrIHN0YXRlIGVhcmx5IHRvIGF2b2lkIHdha2V1cCByYWNlcyAqLwotCQlpZiAoY250IDw9IDApCi0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjbnQgPiBjb3VudCkKLQkJCWNudCA9IGNvdW50OwotCQlpZiAoY250IDw9IDApIHsKLQkJCWlmICh1c2Jpbl9zdGFydChhcykpIHsKLQkJCQlpZiAoIXJldCkKLQkJCQkJcmV0ID0gLUVOT0RFVjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCWlmICghcmV0KQotCQkJCQlyZXQgPSAtRUFHQUlOOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc2NoZWR1bGUoKTsKLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCWlmICghcmV0KQotCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKGVyciA9IGRtYWJ1Zl9jb3B5b3V0X3VzZXIoJmFzLT51c2Jpbi5kbWEsIHB0ciwgYnVmZmVyLCBjbnQpKSkgewotCQkJaWYgKCFyZXQpCi0JCQkJcmV0ID0gZXJyOwotCQkJYnJlYWs7Ci0JCX0KLQkJcHRyICs9IGNudDsKLQkJaWYgKHB0ciA+PSBhcy0+dXNiaW4uZG1hLmRtYXNpemUpCi0JCQlwdHIgLT0gYXMtPnVzYmluLmRtYS5kbWFzaXplOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQkJYXMtPnVzYmluLmRtYS5yZHB0ciA9IHB0cjsKLQkJYXMtPnVzYmluLmRtYS5jb3VudCAtPSBjbnQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50IC09IGNudDsKLQkJYnVmZmVyICs9IGNudDsKLQkJcmV0ICs9IGNudDsKLQl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNiaW4uZG1hLndhaXQsICZ3YWl0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCB1c2JfYXVkaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3NpemVfdCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHB0cjsKLQl1bnNpZ25lZCBpbnQgc3RhcnRfdGhyOwotCWludCBjbnQsIGVycjsKLQotCWlmIChhcy0+dXNib3V0LmRtYS5tYXBwZWQpCi0JCXJldHVybiAtRU5YSU87Ci0JaWYgKCFhcy0+dXNib3V0LmRtYS5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfb3V0KGFzKSkpCi0JCXJldHVybiByZXQ7Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlzdGFydF90aHIgPSAoYXMtPnVzYm91dC5kbWEuc3JhdGUgPDwgQUZNVF9CWVRFU1NISUZUKGFzLT51c2JvdXQuZG1hLmZvcm1hdCkpIC8gKDEwMDAgLyAoMyAqIERFU0NGUkFNRVMpKTsKLQlhZGRfd2FpdF9xdWV1ZSgmYXMtPnVzYm91dC5kbWEud2FpdCwgJndhaXQpOwotCXdoaWxlIChjb3VudCA+IDApIHsKLSNpZiAwCi0JCXByaW50ayhLRVJOX0RFQlVHICJ1c2JfYXVkaW9fd3JpdGU6IGNvdW50ICV1IGRtYTogY291bnQgJXUgcmRwdHIgJXUgd3JwdHIgJXUgZG1hc2l6ZSAldSBmcmFnc2l6ZSAldSBmbGFncyAweCUwMnggdGFza3N0IDB4JWx4XG4iLAotCQkgICAgICAgY291bnQsIGFzLT51c2JvdXQuZG1hLmNvdW50LCBhcy0+dXNib3V0LmRtYS5yZHB0ciwgYXMtPnVzYm91dC5kbWEud3JwdHIsIGFzLT51c2JvdXQuZG1hLmRtYXNpemUsIGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLAotCQkgICAgICAgYXMtPnVzYm91dC5mbGFncywgY3VycmVudC0+c3RhdGUpOwotI2VuZGlmCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQlpZiAoYXMtPnVzYm91dC5kbWEuY291bnQgPCAwKSB7Ci0JCQlhcy0+dXNib3V0LmRtYS5jb3VudCA9IDA7Ci0JCQlhcy0+dXNib3V0LmRtYS5yZHB0ciA9IGFzLT51c2JvdXQuZG1hLndycHRyOwotCQl9Ci0JCXB0ciA9IGFzLT51c2JvdXQuZG1hLndycHRyOwotCQljbnQgPSBhcy0+dXNib3V0LmRtYS5kbWFzaXplIC0gYXMtPnVzYm91dC5kbWEuY291bnQ7Ci0JCS8qIHNldCB0YXNrIHN0YXRlIGVhcmx5IHRvIGF2b2lkIHdha2V1cCByYWNlcyAqLwotCQlpZiAoY250IDw9IDApCi0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjbnQgPiBjb3VudCkKLQkJCWNudCA9IGNvdW50OwotCQlpZiAoY250IDw9IDApIHsKLQkJCWlmICh1c2JvdXRfc3RhcnQoYXMpKSB7Ci0JCQkJaWYgKCFyZXQpCi0JCQkJCXJldCA9IC1FTk9ERVY7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCQlpZiAoIXJldCkKLQkJCQkJcmV0ID0gLUVBR0FJTjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXNjaGVkdWxlKCk7Ci0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQlpZiAoIXJldCkKLQkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChlcnIgPSBkbWFidWZfY29weWluX3VzZXIoJmFzLT51c2JvdXQuZG1hLCBwdHIsIGJ1ZmZlciwgY250KSkpIHsKLQkJCWlmICghcmV0KQotCQkJCXJldCA9IGVycjsKLQkJCWJyZWFrOwotCQl9Ci0JCXB0ciArPSBjbnQ7Ci0JCWlmIChwdHIgPj0gYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSkKLQkJCXB0ciAtPSBhcy0+dXNib3V0LmRtYS5kbWFzaXplOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQkJYXMtPnVzYm91dC5kbWEud3JwdHIgPSBwdHI7Ci0JCWFzLT51c2JvdXQuZG1hLmNvdW50ICs9IGNudDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQkJY291bnQgLT0gY250OwotCQlidWZmZXIgKz0gY250OwotCQlyZXQgKz0gY250OwotCQlpZiAoYXMtPnVzYm91dC5kbWEuY291bnQgPj0gc3RhcnRfdGhyICYmIHVzYm91dF9zdGFydChhcykpIHsKLQkJCWlmICghcmV0KQotCQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmFzLT51c2JvdXQuZG1hLndhaXQsICZ3YWl0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBDYWxsZWQgd2l0aG91dCB0aGUga2VybmVsIGxvY2sgLSBmaW5lICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHVzYl9hdWRpb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBtYXNrID0gMDsKLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQlpZiAoIWFzLT51c2JvdXQuZG1hLnJlYWR5KQotCQkJcHJvZ19kbWFidWZfb3V0KGFzKTsKLQkJcG9sbF93YWl0KGZpbGUsICZhcy0+dXNib3V0LmRtYS53YWl0LCB3YWl0KTsKLQl9Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJaWYgKCFhcy0+dXNiaW4uZG1hLnJlYWR5KQotCQkJcHJvZ19kbWFidWZfaW4oYXMpOwotCQlwb2xsX3dhaXQoZmlsZSwgJmFzLT51c2Jpbi5kbWEud2FpdCwgd2FpdCk7Ci0JfQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCWlmIChhcy0+dXNiaW4uZG1hLmNvdW50ID49IChzaWduZWQpYXMtPnVzYmluLmRtYS5mcmFnc2l6ZSkKLQkJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKLQl9Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCWlmIChhcy0+dXNib3V0LmRtYS5tYXBwZWQpIHsKLQkJCWlmIChhcy0+dXNib3V0LmRtYS5jb3VudCA+PSAoc2lnbmVkKWFzLT51c2JvdXQuZG1hLmZyYWdzaXplKSAKLQkJCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCQl9IGVsc2UgewotCQkJaWYgKChzaWduZWQpYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSA+PSBhcy0+dXNib3V0LmRtYS5jb3VudCArIChzaWduZWQpYXMtPnVzYm91dC5kbWEuZnJhZ3NpemUpCi0JCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBtYXNrOwotfQotCi1zdGF0aWMgaW50IHVzYl9hdWRpb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkbWFidWYgKmRiOwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JbG9ja19rZXJuZWwoKTsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7Ci0JCWlmICgocmV0ID0gcHJvZ19kbWFidWZfb3V0KGFzKSkgIT0gMCkKLQkJCWdvdG8gb3V0OwotCQlkYiA9ICZhcy0+dXNib3V0LmRtYTsKLQl9IGVsc2UgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB7Ci0JCWlmICgocmV0ID0gcHJvZ19kbWFidWZfaW4oYXMpKSAhPSAwKQotCQkJZ290byBvdXQ7Ci0JCWRiID0gJmFzLT51c2Jpbi5kbWE7Ci0JfSBlbHNlCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gLUVJTlZBTDsKLQlpZiAodm1hLT52bV9wZ29mZiAhPSAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IGRtYWJ1Zl9tbWFwKHZtYSwgZGIsICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGFnZV9wcm90KTsKLW91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB1c2JfYXVkaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcyA9IGFzLT5zdGF0ZTsKLQlpbnQgX191c2VyICp1c2VyX2FyZyA9IChpbnQgX191c2VyICopYXJnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JYXVkaW9fYnVmX2luZm8gYWJpbmZvOwotCWNvdW50X2luZm8gY2luZm87Ci0JaW50IHZhbCA9IDA7Ci0JaW50IHZhbDIsIG1hcHBlZCwgcmV0OwotCi0JaWYgKCFzLT51c2JkZXYpCi0JCXJldHVybiAtRUlPOwotCW1hcHBlZCA9ICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIGFzLT51c2JvdXQuZG1hLm1hcHBlZCkgfHwKLQkJKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJiBhcy0+dXNiaW4uZG1hLm1hcHBlZCk7Ci0jaWYgMAotCWlmIChhcmcpCi0JCWdldF91c2VyKHZhbCwgKGludCAqKWFyZyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1c2JfYXVkaW9faW9jdGwgY21kPSV4IGFyZz0lbHggKmFyZz0lZFxuIiwgY21kLCBhcmcsIHZhbCkKLSNlbmRpZgotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBPU1NfR0VUVkVSU0lPTjoKLQkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHVzZXJfYXJnKTsKLQotCWNhc2UgU05EQ1RMX0RTUF9TWU5DOgotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCQlyZXR1cm4gZHJhaW5fb3V0KGFzLCAwLypmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyovKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfU0VURFVQTEVYOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRDQVBTOgotCQlyZXR1cm4gcHV0X3VzZXIoRFNQX0NBUF9EVVBMRVggfCBEU1BfQ0FQX1JFQUxUSU1FIHwgRFNQX0NBUF9UUklHR0VSIHwgCi0JCQkJRFNQX0NBUF9NTUFQIHwgRFNQX0NBUF9CQVRDSCwgdXNlcl9hcmcpOwotCi0JY2FzZSBTTkRDVExfRFNQX1JFU0VUOgotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCXVzYm91dF9zdG9wKGFzKTsKLQkJCWFzLT51c2JvdXQuZG1hLnJkcHRyID0gYXMtPnVzYm91dC5kbWEud3JwdHIgPSBhcy0+dXNib3V0LmRtYS5jb3VudCA9IGFzLT51c2JvdXQuZG1hLnRvdGFsX2J5dGVzID0gMDsKLQkJfQotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJdXNiaW5fc3RvcChhcyk7Ci0JCQlhcy0+dXNiaW4uZG1hLnJkcHRyID0gYXMtPnVzYmluLmRtYS53cnB0ciA9IGFzLT51c2Jpbi5kbWEuY291bnQgPSBhcy0+dXNiaW4uZG1hLnRvdGFsX2J5dGVzID0gMDsKLQkJfQotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9TUEVFRDoKLQkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgPj0gMCkgewotCQkJaWYgKHZhbCA8IDQwMDApCi0JCQkJdmFsID0gNDAwMDsKLQkJCWlmICh2YWwgPiAxMDAwMDApCi0JCQkJdmFsID0gMTAwMDAwOwotCQkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgQUZNVF9RVUVSWSwgdmFsKSkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlyZXR1cm4gcHV0X3VzZXIoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gCi0JCQkJYXMtPnVzYmluLmRtYS5zcmF0ZSA6IGFzLT51c2JvdXQuZG1hLnNyYXRlLAotCQkJCXVzZXJfYXJnKTsKLQotCWNhc2UgU05EQ1RMX0RTUF9TVEVSRU86Ci0JCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7Ci0JCWlmICh2YWwpCi0JCQl2YWwyIHw9IEFGTVRfU1RFUkVPOwotCQllbHNlCi0JCQl2YWwyICY9IH5BRk1UX1NURVJFTzsKLQkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgdmFsMiwgMCkpCi0JCQlyZXR1cm4gLUVJTzsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfQ0hBTk5FTFM6Ci0JCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAodmFsICE9IDApIHsKLQkJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKLQkJCWlmICh2YWwgPT0gMSkKLQkJCQl2YWwyICY9IH5BRk1UX1NURVJFTzsKLQkJCWVsc2UKLQkJCQl2YWwyIHw9IEFGTVRfU1RFUkVPOwotCQkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgdmFsMiwgMCkpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJdmFsMiA9IChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IGFzLT51c2Jpbi5kbWEuZm9ybWF0IDogYXMtPnVzYm91dC5kbWEuZm9ybWF0OwotCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9JU1NURVJFTyh2YWwyKSA/IDIgOiAxLCB1c2VyX2FyZyk7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VURk1UUzogLyogUmV0dXJucyBhIG1hc2sgKi8KLQkJcmV0dXJuIHB1dF91c2VyKEFGTVRfVTggfCBBRk1UX1UxNl9MRSB8IEFGTVRfVTE2X0JFIHwKLQkJCQlBRk1UX1M4IHwgQUZNVF9TMTZfTEUgfCBBRk1UX1MxNl9CRSwgdXNlcl9hcmcpOwotCi0JY2FzZSBTTkRDVExfRFNQX1NFVEZNVDogLyogU2VsZWN0cyBPTkUgZm10Ki8KLQkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgIT0gQUZNVF9RVUVSWSkgewotCQkJaWYgKGh3ZWlnaHQzMih2YWwpICE9IDEpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoISh2YWwgJiAoQUZNVF9VOCB8IEFGTVRfVTE2X0xFIHwgQUZNVF9VMTZfQkUgfAotCQkJCSAgICAgQUZNVF9TOCB8IEFGTVRfUzE2X0xFIHwgQUZNVF9TMTZfQkUpKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKLQkJCXZhbCB8PSB2YWwyICYgQUZNVF9TVEVSRU87Ci0JCQlpZiAoc2V0X2Zvcm1hdChhcywgZmlsZS0+Zl9tb2RlLCB2YWwsIDApKQotCQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKLQkJcmV0dXJuIHB1dF91c2VyKHZhbDIgJiB+QUZNVF9TVEVSRU8sIHVzZXJfYXJnKTsKLQotCWNhc2UgU05EQ1RMX0RTUF9QT1NUOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgU05EQ1RMX0RTUF9HRVRUUklHR0VSOgotCQl2YWwgPSAwOwotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCAmJiBhcy0+dXNiaW4uZmxhZ3MgJiBGTEdfUlVOTklORykgCi0JCQl2YWwgfD0gUENNX0VOQUJMRV9JTlBVVDsKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmIGFzLT51c2JvdXQuZmxhZ3MgJiBGTEdfUlVOTklORykgCi0JCQl2YWwgfD0gUENNX0VOQUJMRV9PVVRQVVQ7Ci0JCXJldHVybiBwdXRfdXNlcih2YWwsIHVzZXJfYXJnKTsKLQotCWNhc2UgU05EQ1RMX0RTUF9TRVRUUklHR0VSOgotCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCWlmICh2YWwgJiBQQ01fRU5BQkxFX0lOUFVUKSB7Ci0JCQkJaWYgKCFhcy0+dXNiaW4uZG1hLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9pbihhcykpKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJCWlmICh1c2Jpbl9zdGFydChhcykpCi0JCQkJCXJldHVybiAtRU5PREVWOwotCQkJfSBlbHNlCi0JCQkJdXNiaW5fc3RvcChhcyk7Ci0JCX0KLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCQlpZiAodmFsICYgUENNX0VOQUJMRV9PVVRQVVQpIHsKLQkJCQlpZiAoIWFzLT51c2JvdXQuZG1hLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9vdXQoYXMpKSkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCQlpZiAodXNib3V0X3N0YXJ0KGFzKSkKLQkJCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQl9IGVsc2UKLQkJCQl1c2JvdXRfc3RvcChhcyk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUT1NQQUNFOgotCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCEoYXMtPnVzYm91dC5mbGFncyAmIEZMR19SVU5OSU5HKSAmJiAodmFsID0gcHJvZ19kbWFidWZfb3V0KGFzKSkgIT0gMCkKLQkJCXJldHVybiB2YWw7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQlhYmluZm8uZnJhZ3NpemUgPSBhcy0+dXNib3V0LmRtYS5mcmFnc2l6ZTsKLQkJYWJpbmZvLmJ5dGVzID0gYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSAtIGFzLT51c2JvdXQuZG1hLmNvdW50OwotCQlhYmluZm8uZnJhZ3N0b3RhbCA9IGFzLT51c2JvdXQuZG1hLm51bWZyYWc7Ci0JCWFiaW5mby5mcmFnbWVudHMgPSBhYmluZm8uYnl0ZXMgPj4gYXMtPnVzYm91dC5kbWEuZnJhZ3NoaWZ0OyAgICAgIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmFiaW5mbywgc2l6ZW9mKGFiaW5mbykpID8gLUVGQVVMVCA6IDA7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUSVNQQUNFOgotCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoIShhcy0+dXNiaW4uZmxhZ3MgJiBGTEdfUlVOTklORykgJiYgKHZhbCA9IHByb2dfZG1hYnVmX2luKGFzKSkgIT0gMCkKLQkJCXJldHVybiB2YWw7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQlhYmluZm8uZnJhZ3NpemUgPSBhcy0+dXNiaW4uZG1hLmZyYWdzaXplOwotCQlhYmluZm8uYnl0ZXMgPSBhcy0+dXNiaW4uZG1hLmNvdW50OwotCQlhYmluZm8uZnJhZ3N0b3RhbCA9IGFzLT51c2Jpbi5kbWEubnVtZnJhZzsKLQkJYWJpbmZvLmZyYWdtZW50cyA9IGFiaW5mby5ieXRlcyA+PiBhcy0+dXNiaW4uZG1hLmZyYWdzaGlmdDsgICAgICAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZhYmluZm8sIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwotCQkKLQljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6Ci0JCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUT0RFTEFZOgotCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCXZhbCA9IGFzLT51c2JvdXQuZG1hLmNvdW50OwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUSVBUUjoKLQkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWNpbmZvLmJ5dGVzID0gYXMtPnVzYmluLmRtYS50b3RhbF9ieXRlczsKLQkJY2luZm8uYmxvY2tzID0gYXMtPnVzYmluLmRtYS5jb3VudCA+PiBhcy0+dXNiaW4uZG1hLmZyYWdzaGlmdDsKLQkJY2luZm8ucHRyID0gYXMtPnVzYmluLmRtYS53cnB0cjsKLQkJaWYgKGFzLT51c2Jpbi5kbWEubWFwcGVkKQotCQkJYXMtPnVzYmluLmRtYS5jb3VudCAmPSBhcy0+dXNiaW4uZG1hLmZyYWdzaXplLTE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVE9QVFI6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKLQkJY2luZm8uYnl0ZXMgPSBhcy0+dXNib3V0LmRtYS50b3RhbF9ieXRlczsKLQkJY2luZm8uYmxvY2tzID0gYXMtPnVzYm91dC5kbWEuY291bnQgPj4gYXMtPnVzYm91dC5kbWEuZnJhZ3NoaWZ0OwotCQljaW5mby5wdHIgPSBhcy0+dXNib3V0LmRtYS5yZHB0cjsKLQkJaWYgKGFzLT51c2JvdXQuZG1hLm1hcHBlZCkKLQkJCWFzLT51c2JvdXQuZG1hLmNvdW50ICY9IGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLTE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCi0gICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJaWYgKCh2YWwgPSBwcm9nX2RtYWJ1Zl9vdXQoYXMpKSkKLQkJCQlyZXR1cm4gdmFsOwotCQkJcmV0dXJuIHB1dF91c2VyKGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLCB1c2VyX2FyZyk7Ci0JCX0KLQkJaWYgKCh2YWwgPSBwcm9nX2RtYWJ1Zl9pbihhcykpKQotCQkJcmV0dXJuIHZhbDsKLQkJcmV0dXJuIHB1dF91c2VyKGFzLT51c2Jpbi5kbWEuZnJhZ3NpemUsIHVzZXJfYXJnKTsKLQotCWNhc2UgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVDoKLQkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlhcy0+dXNiaW4uZG1hLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKLQkJCWFzLT51c2Jpbi5kbWEub3NzbWF4ZnJhZ3MgPSAodmFsID4+IDE2KSAmIDB4ZmZmZjsKLQkJCWlmIChhcy0+dXNiaW4uZG1hLm9zc2ZyYWdzaGlmdCA8IDQpCi0JCQkJYXMtPnVzYmluLmRtYS5vc3NmcmFnc2hpZnQgPSA0OwotCQkJaWYgKGFzLT51c2Jpbi5kbWEub3NzZnJhZ3NoaWZ0ID4gMTUpCi0JCQkJYXMtPnVzYmluLmRtYS5vc3NmcmFnc2hpZnQgPSAxNTsKLQkJCWlmIChhcy0+dXNiaW4uZG1hLm9zc21heGZyYWdzIDwgNCkKLQkJCQlhcy0+dXNiaW4uZG1hLm9zc21heGZyYWdzID0gNDsKLQkJfQotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCWFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKLQkJCWFzLT51c2JvdXQuZG1hLm9zc21heGZyYWdzID0gKHZhbCA+PiAxNikgJiAweGZmZmY7Ci0JCQlpZiAoYXMtPnVzYm91dC5kbWEub3NzZnJhZ3NoaWZ0IDwgNCkKLQkJCQlhcy0+dXNib3V0LmRtYS5vc3NmcmFnc2hpZnQgPSA0OwotCQkJaWYgKGFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA+IDE1KQotCQkJCWFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA9IDE1OwotCQkJaWYgKGFzLT51c2JvdXQuZG1hLm9zc21heGZyYWdzIDwgNCkKLQkJCQlhcy0+dXNib3V0LmRtYS5vc3NtYXhmcmFncyA9IDQ7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfU1VCRElWSURFOgotCQlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQgJiYgYXMtPnVzYmluLmRtYS5zdWJkaXZpc2lvbikgfHwKLQkJICAgIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSAmJiBhcy0+dXNib3V0LmRtYS5zdWJkaXZpc2lvbikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgIT0gMSAmJiB2YWwgIT0gMiAmJiB2YWwgIT0gNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJCWFzLT51c2Jpbi5kbWEuc3ViZGl2aXNpb24gPSB2YWw7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJCWFzLT51c2JvdXQuZG1hLnN1YmRpdmlzaW9uID0gdmFsOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgU09VTkRfUENNX1JFQURfUkFURToKLQkJcmV0dXJuIHB1dF91c2VyKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IAotCQkJCWFzLT51c2Jpbi5kbWEuc3JhdGUgOiBhcy0+dXNib3V0LmRtYS5zcmF0ZSwKLQkJCQl1c2VyX2FyZyk7Ci0KLQljYXNlIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTOgotCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7Ci0JCXJldHVybiBwdXRfdXNlcihBRk1UX0lTU1RFUkVPKHZhbDIpID8gMiA6IDEsIHVzZXJfYXJnKTsKLQotCWNhc2UgU09VTkRfUENNX1JFQURfQklUUzoKLQkJdmFsMiA9IChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IGFzLT51c2Jpbi5kbWEuZm9ybWF0IDogYXMtPnVzYm91dC5kbWEuZm9ybWF0OwotCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9JUzE2QklUKHZhbDIpID8gMTYgOiA4LCB1c2VyX2FyZyk7Ci0KLQljYXNlIFNPVU5EX1BDTV9XUklURV9GSUxURVI6Ci0JY2FzZSBTTkRDVExfRFNQX1NFVFNZTkNSTzoKLQljYXNlIFNPVU5EX1BDTV9SRUFEX0ZJTFRFUjoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1c2JfYXVkaW9faW9jdGwgLSBubyBjb21tYW5kIGZvdW5kXG4iKSk7Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLQotc3RhdGljIGludCB1c2JfYXVkaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOwotCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7Ci0KLQlmb3IgKDs7KSB7Ci0JCWRvd24oJm9wZW5fc2VtKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmYXVkaW9kZXZzLCBhdWRpb2RldikgewotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShhcywgJnMtPmF1ZGlvbGlzdCwgbGlzdCkgewotCQkJCWlmICghKChhcy0+ZGV2X2F1ZGlvIF4gbWlub3IpICYgfjB4ZikpCi0JCQkJCWdvdG8gZGV2aWNlX2ZvdW5kOwotCQkJfQotCQl9Ci0JCXVwKCZvcGVuX3NlbSk7Ci0JCXJldHVybiAtRU5PREVWOwotCi0JZGV2aWNlX2ZvdW5kOgotCQlpZiAoIXMtPnVzYmRldikgewotCQkJdXAoJm9wZW5fc2VtKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCQlpZiAoIShhcy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSkKLQkJCWJyZWFrOwotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXVwKCZvcGVuX3NlbSk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJYWRkX3dhaXRfcXVldWUoJm9wZW5fd2FpdCwgJndhaXQpOwotCQl1cCgmb3Blbl9zZW0pOwotCQlzY2hlZHVsZSgpOwotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZvcGVuX3dhaXQsICZ3YWl0KTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQl9Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCWFzLT51c2Jpbi5kbWEub3NzZnJhZ3NoaWZ0ID0gYXMtPnVzYmluLmRtYS5vc3NtYXhmcmFncyA9IGFzLT51c2Jpbi5kbWEuc3ViZGl2aXNpb24gPSAwOwotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJYXMtPnVzYm91dC5kbWEub3NzZnJhZ3NoaWZ0ID0gYXMtPnVzYm91dC5kbWEub3NzbWF4ZnJhZ3MgPSBhcy0+dXNib3V0LmRtYS5zdWJkaXZpc2lvbiA9IDA7Ci0JaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgKChtaW5vciAmIDB4ZikgPT0gU05EX0RFVl9EU1AxNikgPyBBRk1UX1MxNl9MRSA6IEFGTVRfVTggLyogQUZNVF9VTEFXICovLCA4MDAwKSkgewotCQl1cCgmb3Blbl9zZW0pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gYXM7Ci0JYXMtPm9wZW5fbW9kZSB8PSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKLQlzLT5jb3VudCsrOwotCXVwKCZvcGVuX3NlbSk7Ci0JcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwotfQotCi1zdGF0aWMgaW50IHVzYl9hdWRpb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwotCi0JbG9ja19rZXJuZWwoKTsKLQlzID0gYXMtPnN0YXRlOwotCWRldiA9IHMtPnVzYmRldjsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCWRyYWluX291dChhcywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCWRvd24oJm9wZW5fc2VtKTsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJdXNib3V0X3N0b3AoYXMpOwotCQlpZiAoZGV2ICYmIGFzLT51c2JvdXQuaW50ZXJmYWNlID49IDApCi0JCQl1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFzLT51c2JvdXQuaW50ZXJmYWNlLCAwKTsKLQkJZG1hYnVmX3JlbGVhc2UoJmFzLT51c2JvdXQuZG1hKTsKLQkJdXNib3V0X3JlbGVhc2UoYXMpOwotCX0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQl1c2Jpbl9zdG9wKGFzKTsKLQkJaWYgKGRldiAmJiBhcy0+dXNiaW4uaW50ZXJmYWNlID49IDApCi0JCQl1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFzLT51c2Jpbi5pbnRlcmZhY2UsIDApOwotCQlkbWFidWZfcmVsZWFzZSgmYXMtPnVzYmluLmRtYSk7Ci0JCXVzYmluX3JlbGVhc2UoYXMpOwotCX0KLQlhcy0+b3Blbl9tb2RlICY9ICh+ZmlsZS0+Zl9tb2RlKSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKLQlyZWxlYXNlKHMpOwotCXdha2VfdXAoJm9wZW5fd2FpdCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgLypjb25zdCovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2F1ZGlvX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9CW5vX2xsc2VlaywKLQkucmVhZCA9CQl1c2JfYXVkaW9fcmVhZCwKLQkud3JpdGUgPQl1c2JfYXVkaW9fd3JpdGUsCi0JLnBvbGwgPQkJdXNiX2F1ZGlvX3BvbGwsCi0JLmlvY3RsID0JdXNiX2F1ZGlvX2lvY3RsLAotCS5tbWFwID0JCXVzYl9hdWRpb19tbWFwLAotCS5vcGVuID0JCXVzYl9hdWRpb19vcGVuLAotCS5yZWxlYXNlID0JdXNiX2F1ZGlvX3JlbGVhc2UsCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCB1c2JfYXVkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAotCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKLXN0YXRpYyB2b2lkIHVzYl9hdWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYXVkaW9faWRzIFtdID0gewotICAgIHsgLm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MpLAotICAgICAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywgLmJJbnRlcmZhY2VTdWJDbGFzcyA9IDF9LAotICAgIHsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9hdWRpb19pZHMpOwotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2F1ZGlvX2RyaXZlciA9IHsKLQkubmFtZSA9CQkiYXVkaW8iLAotCS5wcm9iZSA9CXVzYl9hdWRpb19wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXVzYl9hdWRpb19kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CXVzYl9hdWRpb19pZHMsCi19OwotCi1zdGF0aWMgdm9pZCAqZmluZF9kZXNjcmlwdG9yKHZvaWQgKmRlc2NzdGFydCwgdW5zaWduZWQgaW50IGRlc2NsZW4sIHZvaWQgKmFmdGVyLCAKLQkJCSAgICAgdTggZHR5cGUsIGludCBpZmFjZSwgaW50IGFsdHNldHRpbmcpCi17Ci0JdTggKnAsICplbmQsICpuZXh0OwotCWludCBpZmMgPSAtMSwgYXMgPSAtMTsKLQotCXAgPSBkZXNjc3RhcnQ7Ci0JZW5kID0gcCArIGRlc2NsZW47Ci0JZm9yICg7IHAgPCBlbmQ7KSB7Ci0JCWlmIChwWzBdIDwgMikKLQkJCXJldHVybiBOVUxMOwotCQluZXh0ID0gcCArIHBbMF07Ci0JCWlmIChuZXh0ID4gZW5kKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWlmIChwWzFdID09IFVTQl9EVF9JTlRFUkZBQ0UpIHsKLQkJCS8qIG1pbmltdW0gbGVuZ3RoIG9mIGludGVyZmFjZSBkZXNjcmlwdG9yICovCi0JCQlpZiAocFswXSA8IDkpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQlpZmMgPSBwWzJdOwotCQkJYXMgPSBwWzNdOwotCQl9Ci0JCWlmIChwWzFdID09IGR0eXBlICYmICghYWZ0ZXIgfHwgKHZvaWQgKilwID4gYWZ0ZXIpICYmCi0JCSAgICAoaWZhY2UgPT0gLTEgfHwgaWZhY2UgPT0gaWZjKSAmJiAoYWx0c2V0dGluZyA9PSAtMSB8fCBhbHRzZXR0aW5nID09IGFzKSkgewotCQkJcmV0dXJuIHA7Ci0JCX0KLQkJcCA9IG5leHQ7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKHZvaWQgKmRlc2NzdGFydCwgdW5zaWduZWQgaW50IGRlc2NsZW4sIHZvaWQgKmFmdGVyLCB1OCBkc3VidHlwZSwgaW50IGlmYWNlLCBpbnQgYWx0c2V0dGluZykKLXsKLQl1bnNpZ25lZCBjaGFyICpwOwotCi0JcCA9IGZpbmRfZGVzY3JpcHRvcihkZXNjc3RhcnQsIGRlc2NsZW4sIGFmdGVyLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgYWx0c2V0dGluZyk7Ci0Jd2hpbGUgKHApIHsKLQkJaWYgKHBbMF0gPj0gMyAmJiBwWzJdID09IGRzdWJ0eXBlKQotCQkJcmV0dXJuIHA7Ci0JCXAgPSBmaW5kX2Rlc2NyaXB0b3IoZGVzY3N0YXJ0LCBkZXNjbGVuLCBwLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgYWx0c2V0dGluZyk7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqZmluZF9hdWRpb2NvbnRyb2xfdW5pdCh2b2lkICpkZXNjc3RhcnQsIHVuc2lnbmVkIGludCBkZXNjbGVuLCB2b2lkICphZnRlciwgdTggdW5pdCwgaW50IGlmYWNlKQotewotCXVuc2lnbmVkIGNoYXIgKnA7Ci0KLQlwID0gZmluZF9kZXNjcmlwdG9yKGRlc2NzdGFydCwgZGVzY2xlbiwgYWZ0ZXIsIFVTQl9EVF9DU19JTlRFUkZBQ0UsIGlmYWNlLCAtMSk7Ci0Jd2hpbGUgKHApIHsKLQkJaWYgKHBbMF0gPj0gNCAmJiBwWzJdID49IElOUFVUX1RFUk1JTkFMICYmIHBbMl0gPD0gRVhURU5TSU9OX1VOSVQgJiYgcFszXSA9PSB1bml0KQotCQkJcmV0dXJuIHA7Ci0JCXAgPSBmaW5kX2Rlc2NyaXB0b3IoZGVzY3N0YXJ0LCBkZXNjbGVuLCBwLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgLTEpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgdXNiX2F1ZGlvX3BhcnNlc3RyZWFtaW5nKHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnMsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IGFzaWZpbiwgaW50IGFzaWZvdXQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHMtPnVzYmRldjsKLQlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphczsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKLQlzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwOwotCXVuc2lnbmVkIGNoYXIgKmZtdCwgKmNzZXA7Ci0JdW5zaWduZWQgaW50IGksIGosIGssIGZvcm1hdCwgaWR4OwotCi0JaWYgKCEoYXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2F1ZGlvZGV2KSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm47Ci0JbWVtc2V0KGFzLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9hdWRpb2RldikpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFzLT51c2Jpbi5kbWEud2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmYXMtPnVzYm91dC5kbWEud2FpdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFzLT5sb2NrKTsKLQlhcy0+dXNiaW4uZHVyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChERVNDRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQlhcy0+dXNiaW4uZHVyYlsxXS51cmIgPSB1c2JfYWxsb2NfdXJiIChERVNDRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQlhcy0+dXNiaW4uc3VyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQlhcy0+dXNiaW4uc3VyYlsxXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQlhcy0+dXNib3V0LmR1cmJbMF0udXJiID0gdXNiX2FsbG9jX3VyYiAoREVTQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7Ci0JYXMtPnVzYm91dC5kdXJiWzFdLnVyYiA9IHVzYl9hbGxvY191cmIgKERFU0NGUkFNRVMsIEdGUF9LRVJORUwpOwotCWFzLT51c2JvdXQuc3VyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQlhcy0+dXNib3V0LnN1cmJbMV0udXJiID0gdXNiX2FsbG9jX3VyYiAoU1lOQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCghYXMtPnVzYmluLmR1cmJbMF0udXJiKSB8fAotCSAgICAoIWFzLT51c2Jpbi5kdXJiWzFdLnVyYikgfHwKLQkgICAgKCFhcy0+dXNiaW4uc3VyYlswXS51cmIpIHx8Ci0JICAgICghYXMtPnVzYmluLnN1cmJbMV0udXJiKSB8fAotCSAgICAoIWFzLT51c2JvdXQuZHVyYlswXS51cmIpIHx8Ci0JICAgICghYXMtPnVzYm91dC5kdXJiWzFdLnVyYikgfHwKLQkgICAgKCFhcy0+dXNib3V0LnN1cmJbMF0udXJiKSB8fAotCSAgICAoIWFzLT51c2JvdXQuc3VyYlsxXS51cmIpKSB7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlswXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMV0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzBdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlsxXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzBdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMV0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlswXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzFdLnVyYik7Ci0JCWtmcmVlKGFzKTsKLQkJcmV0dXJuOwotCX0KLQlhcy0+c3RhdGUgPSBzOwotCWFzLT51c2Jpbi5pbnRlcmZhY2UgPSBhc2lmaW47Ci0JYXMtPnVzYm91dC5pbnRlcmZhY2UgPSBhc2lmb3V0OwotCS8qIHNlYXJjaCBmb3IgaW5wdXQgZm9ybWF0cyAqLwotCWlmIChhc2lmaW4gPj0gMCkgewotCQlhcy0+dXNiaW4uZmxhZ3MgPSBGTEdfQ09OTkVDVEVEOwotCQlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGFzaWZpbik7Ci0JCWZvciAoaWR4ID0gMDsgaWR4IDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpZHgrKykgewotCQkJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1tpZHhdOwotCQkJaSA9IGFsdHMtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7Ci0JCQlpZiAoYWx0cy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPIHx8IGFsdHMtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDIpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMSkgewotCQkJCWlmIChpICE9IDApIHsgIC8qIGFsdHNldHRpbmcgMCBoYXMgbm8gZW5kcG9pbnRzIChTZWN0aW9uIEIuMy40LjEpICovCi0JCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBkb2VzIG5vdCBoYXZlIGFuIGVuZHBvaW50XG4iLCAKLQkJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxIHx8Ci0JCQkgICAgIShhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBmaXJzdCBlbmRwb2ludCBub3QgaXNvY2hyb25vdXMgaW5cbiIsIAotCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgQVNfR0VORVJBTCwgYXNpZmluLCBpKTsKLQkJCWlmICghZm10KSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IEZPUk1BVF9UWVBFIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iLCAKLQkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoZm10WzBdIDwgNyB8fCBmbXRbNl0gIT0gMCB8fCAoZm10WzVdICE9IDEgJiYgZm10WzVdICE9IDIpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IGZvcm1hdCBub3Qgc3VwcG9ydGVkXG4iLCAKLQkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlmb3JtYXQgPSAoZm10WzVdID09IDIpID8gKEFGTVRfVTE2X0xFIHwgQUZNVF9VOCkgOiAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKLQkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgRk9STUFUX1RZUEUsIGFzaWZpbiwgaSk7Ci0JCQlpZiAoIWZtdCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwgCi0JCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGZtdFswXSA8IDgrMyooZm10WzddID8gZm10WzddIDogMikgfHwgZm10WzNdICE9IDEpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3Qgc3VwcG9ydGVkXG4iLCAKLQkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoZm10WzRdIDwgMSB8fCBmbXRbNF0gPiAyIHx8IGZtdFs1XSA8IDEgfHwgZm10WzVdID4gMikgewotCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSB1bnN1cHBvcnRlZCBjaGFubmVscyAldSBmcmFtZXNpemUgJXVcbiIsIAotCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpLCBmbXRbNF0sIGZtdFs1XSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQljc2VwID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBVU0JfRFRfQ1NfRU5EUE9JTlQsIGFzaWZpbiwgaSk7Ci0JCQlpZiAoIWNzZXAgfHwgY3NlcFswXSA8IDcgfHwgY3NlcFsyXSAhPSBFUF9HRU5FUkFMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IG5vIG9yIGludmFsaWQgY2xhc3Mgc3BlY2lmaWMgZW5kcG9pbnQgZGVzY3JpcHRvclxuIiwgCi0JCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGFzLT5udW1mbXRpbiA+PSBNQVhGT1JNQVRTKQotCQkJCWNvbnRpbnVlOwotCQkJZnAgPSAmYXMtPmZtdGluW2FzLT5udW1mbXRpbisrXTsKLQkJCWlmIChmbXRbNV0gPT0gMikKLQkJCQlmb3JtYXQgJj0gKEFGTVRfVTE2X0xFIHwgQUZNVF9TMTZfTEUpOwotCQkJZWxzZQotCQkJCWZvcm1hdCAmPSAoQUZNVF9VOCB8IEFGTVRfUzgpOwotCQkJaWYgKGZtdFs0XSA9PSAyKQotCQkJCWZvcm1hdCB8PSBBRk1UX1NURVJFTzsKLQkJCWZwLT5mb3JtYXQgPSBmb3JtYXQ7Ci0JCQlmcC0+YWx0c2V0dGluZyA9IGk7Ci0JCQlmcC0+c3JhdGVsbyA9IGZwLT5zcmF0ZWhpID0gZm10WzhdIHwgKGZtdFs5XSA8PCA4KSB8IChmbXRbMTBdIDw8IDE2KTsKLQkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB2YWxpZCBpbnB1dCBzYW1wbGUgcmF0ZSAldVxuIiwgZnAtPnNyYXRlbG8pOwotCQkJZm9yIChqID0gZm10WzddID8gKGZtdFs3XS0xKSA6IDE7IGogPiAwOyBqLS0pIHsKLQkJCQlrID0gZm10WzgrMypqXSB8IChmbXRbOSszKmpdIDw8IDgpIHwgKGZtdFsxMCszKmpdIDw8IDE2KTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdmFsaWQgaW5wdXQgc2FtcGxlIHJhdGUgJXVcbiIsIGspOwotCQkJCWlmIChrID4gZnAtPnNyYXRlaGkpCi0JCQkJCWZwLT5zcmF0ZWhpID0gazsKLQkJCQlpZiAoayA8IGZwLT5zcmF0ZWxvKQotCQkJCQlmcC0+c3JhdGVsbyA9IGs7Ci0JCQl9Ci0JCQlmcC0+YXR0cmlidXRlcyA9IGNzZXBbM107Ci0JCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1OiBmb3JtYXQgMHglMDh4IHNyYXRlbG8gJXUgc3JhdGVoaSAldSBhdHRyaWJ1dGVzIDB4JTAyeFxuIiwgCi0JCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSwgZnAtPmZvcm1hdCwgZnAtPnNyYXRlbG8sIGZwLT5zcmF0ZWhpLCBmcC0+YXR0cmlidXRlcyk7Ci0JCX0KLQl9Ci0JLyogc2VhcmNoIGZvciBvdXRwdXQgZm9ybWF0cyAqLwotCWlmIChhc2lmb3V0ID49IDApIHsKLQkJYXMtPnVzYm91dC5mbGFncyA9IEZMR19DT05ORUNURUQ7Ci0JCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgYXNpZm91dCk7Ci0JCWZvciAoaWR4ID0gMDsgaWR4IDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpZHgrKykgewotCQkJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1tpZHhdOwotCQkJaSA9IGFsdHMtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7Ci0JCQlpZiAoYWx0cy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPIHx8IGFsdHMtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDIpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMSkgewotCQkJCS8qIGFsdHNldHRpbmcgMCBzaG91bGQgbmV2ZXIgaGF2ZSBpc28gRVBzICovCi0JCQkJaWYgKGkgIT0gMCkKLQkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgZG9lcyBub3QgaGF2ZSBhbiBlbmRwb2ludFxuIiwgCi0JCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmb3V0LCBpKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxIHx8Ci0JCQkgICAgKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4ODApKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IGZpcnN0IGVuZHBvaW50IG5vdCBpc29jaHJvbm91cyBvdXRcbiIsIAotCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBTZWUgVVNCIGF1ZGlvIGZvcm1hdHMgbWFudWFsLCBzZWN0aW9uIDIgKi8KLQkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgQVNfR0VORVJBTCwgYXNpZm91dCwgaSk7Ci0JCQlpZiAoIWZtdCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwgCi0JCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmb3V0LCBpKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChmbXRbMF0gPCA3IHx8IGZtdFs2XSAhPSAwIHx8IChmbXRbNV0gIT0gMSAmJiBmbXRbNV0gIT0gMikpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgZm9ybWF0IG5vdCBzdXBwb3J0ZWRcbiIsIAotCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlmb3JtYXQgPSAoZm10WzVdID09IDIpID8gKEFGTVRfVTE2X0xFIHwgQUZNVF9VOCkgOiAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKLQkJCS8qIERhbGxhcyBEUzQyMDEgd29ya2Fyb3VuZCAqLwotCQkJaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNGZhICYmIAotCQkJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NDIwMSkKLQkJCQlmb3JtYXQgPSAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKLQkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgRk9STUFUX1RZUEUsIGFzaWZvdXQsIGkpOwotCQkJaWYgKCFmbXQpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsIAotCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoZm10WzBdIDwgOCszKihmbXRbN10gPyBmbXRbN10gOiAyKSB8fCBmbXRbM10gIT0gMSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBzdXBwb3J0ZWRcbiIsIAotCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoZm10WzRdIDwgMSB8fCBmbXRbNF0gPiAyIHx8IGZtdFs1XSA8IDEgfHwgZm10WzVdID4gMikgewotCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSB1bnN1cHBvcnRlZCBjaGFubmVscyAldSBmcmFtZXNpemUgJXVcbiIsIAotCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSwgZm10WzRdLCBmbXRbNV0pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY3NlcCA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgVVNCX0RUX0NTX0VORFBPSU5ULCBhc2lmb3V0LCBpKTsKLQkJCWlmICghY3NlcCB8fCBjc2VwWzBdIDwgNyB8fCBjc2VwWzJdICE9IEVQX0dFTkVSQUwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgbm8gb3IgaW52YWxpZCBjbGFzcyBzcGVjaWZpYyBlbmRwb2ludCBkZXNjcmlwdG9yXG4iLCAKLQkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGkpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGFzLT5udW1mbXRvdXQgPj0gTUFYRk9STUFUUykKLQkJCQljb250aW51ZTsKLQkJCWZwID0gJmFzLT5mbXRvdXRbYXMtPm51bWZtdG91dCsrXTsKLQkJCWlmIChmbXRbNV0gPT0gMikKLQkJCQlmb3JtYXQgJj0gKEFGTVRfVTE2X0xFIHwgQUZNVF9TMTZfTEUpOwotCQkJZWxzZQotCQkJCWZvcm1hdCAmPSAoQUZNVF9VOCB8IEFGTVRfUzgpOwotCQkJaWYgKGZtdFs0XSA9PSAyKQotCQkJCWZvcm1hdCB8PSBBRk1UX1NURVJFTzsKLQkJCWZwLT5mb3JtYXQgPSBmb3JtYXQ7Ci0JCQlmcC0+YWx0c2V0dGluZyA9IGk7Ci0JCQlmcC0+c3JhdGVsbyA9IGZwLT5zcmF0ZWhpID0gZm10WzhdIHwgKGZtdFs5XSA8PCA4KSB8IChmbXRbMTBdIDw8IDE2KTsKLQkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB2YWxpZCBvdXRwdXQgc2FtcGxlIHJhdGUgJXVcbiIsIGZwLT5zcmF0ZWxvKTsKLQkJCWZvciAoaiA9IGZtdFs3XSA/IChmbXRbN10tMSkgOiAxOyBqID4gMDsgai0tKSB7Ci0JCQkJayA9IGZtdFs4KzMqal0gfCAoZm10WzkrMypqXSA8PCA4KSB8IChmbXRbMTArMypqXSA8PCAxNik7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHZhbGlkIG91dHB1dCBzYW1wbGUgcmF0ZSAldVxuIiwgayk7Ci0JCQkJaWYgKGsgPiBmcC0+c3JhdGVoaSkKLQkJCQkJZnAtPnNyYXRlaGkgPSBrOwotCQkJCWlmIChrIDwgZnAtPnNyYXRlbG8pCi0JCQkJCWZwLT5zcmF0ZWxvID0gazsKLQkJCX0KLQkJCWZwLT5hdHRyaWJ1dGVzID0gY3NlcFszXTsKLQkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXU6IGZvcm1hdCAweCUwOHggc3JhdGVsbyAldSBzcmF0ZWhpICV1IGF0dHJpYnV0ZXMgMHglMDJ4XG4iLCAKLQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSwgZnAtPmZvcm1hdCwgZnAtPnNyYXRlbG8sIGZwLT5zcmF0ZWhpLCBmcC0+YXR0cmlidXRlcyk7Ci0JCX0KLQl9Ci0JaWYgKGFzLT5udW1mbXRpbiA9PSAwICYmIGFzLT5udW1mbXRvdXQgPT0gMCkgewotCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMF0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzFdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlswXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMV0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlswXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzFdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMF0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlsxXS51cmIpOwotCQlrZnJlZShhcyk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKChhcy0+ZGV2X2F1ZGlvID0gcmVnaXN0ZXJfc291bmRfZHNwKCZ1c2JfYXVkaW9fZm9wcywgLTEpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogY2Fubm90IHJlZ2lzdGVyIGRzcFxuIik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlswXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMV0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzBdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlsxXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzBdLnVyYik7Ci0JCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMV0udXJiKTsKLQkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlswXS51cmIpOwotCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzFdLnVyYik7Ci0JCWtmcmVlKGFzKTsKLQkJcmV0dXJuOwotCX0KLQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogcmVnaXN0ZXJlZCBkc3AgMTQsJWRcbiIsIGFzLT5kZXZfYXVkaW8pOwotCS8qIGV2ZXJ5dGhpbmcgc3VjY2Vzc2Z1bCAqLwotCWxpc3RfYWRkX3RhaWwoJmFzLT5saXN0LCAmcy0+YXVkaW9saXN0KTsKLX0KLQotc3RydWN0IGNvbnNtaXhzdGF0ZSB7Ci0Jc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0JdW5zaWduZWQgaW50IGJ1ZmxlbjsKLQl1bnNpZ25lZCBpbnQgY3RybGlmOwotCXN0cnVjdCBtaXhlcmNoYW5uZWwgbWl4Y2hbU09VTkRfTUlYRVJfTlJERVZJQ0VTXTsKLQl1bnNpZ25lZCBpbnQgbnJtaXhjaDsKLQl1bnNpZ25lZCBpbnQgbWl4Y2htYXNrOwotCXVuc2lnbmVkIGxvbmcgdW5pdGJpdG1hcFszMi9zaXplb2YodW5zaWduZWQgbG9uZyldOwotCS8qIHJldHVybiB2YWx1ZXMgKi8KLQl1bnNpZ25lZCBpbnQgbnJjaGFubmVsczsKLQl1bnNpZ25lZCBpbnQgdGVybXR5cGU7Ci0JdW5zaWduZWQgaW50IGNoY29uZmlnOwotfTsKLQotc3RhdGljIHN0cnVjdCBtaXhlcmNoYW5uZWwgKmdldG1peGNoYW5uZWwoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBucikKLXsKLQlzdHJ1Y3QgbWl4ZXJjaGFubmVsICpjOwotCi0JaWYgKG5yID49IFNPVU5EX01JWEVSX05SREVWSUNFUykgewotCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBpbnZhbGlkIE9TUyBtaXhlciBjaGFubmVsICV1XG4iLCBucik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlpZiAoIShzdGF0ZS0+bWl4Y2htYXNrICYgKDEgPDwgbnIpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JhdWRpbzogT1NTIG1peGVyIGNoYW5uZWwgJXUgYWxyZWFkeSBpbiB1c2VcbiIsIG5yKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWMgPSAmc3RhdGUtPm1peGNoW3N0YXRlLT5ucm1peGNoKytdOwotCWMtPm9zc2NoYW5uZWwgPSBucjsKLQlzdGF0ZS0+bWl4Y2htYXNrICY9IH4oMSA8PCBucik7Ci0JcmV0dXJuIGM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0dm9sY2hhbm5lbChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgdTsKLQotCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDAwMDAgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1ZPTFVNRSkpCi0JCXJldHVybiBTT1VORF9NSVhFUl9WT0xVTUU7Ci0JaWYgKChzdGF0ZS0+dGVybXR5cGUgJiAweGZmMDApID09IDB4MDEwMCkgewotCQlpZiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfUENNKQotCQkJcmV0dXJuIFNPVU5EX01JWEVSX1BDTTsKLQkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX0FMVFBDTSkKLQkJCXJldHVybiBTT1VORF9NSVhFUl9BTFRQQ007Ci0JfQotCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDAyMDAgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX01JQykpCi0JCXJldHVybiBTT1VORF9NSVhFUl9NSUM7Ci0JaWYgKChzdGF0ZS0+dGVybXR5cGUgJiAweGZmMDApID09IDB4MDMwMCAmJiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfU1BFQUtFUikpCi0JCXJldHVybiBTT1VORF9NSVhFUl9TUEVBS0VSOwotCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDA1MDApIHsKLQkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1BIT05FSU4pCi0JCQlyZXR1cm4gU09VTkRfTUlYRVJfUEhPTkVJTjsKLQkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1BIT05FT1VUKQotCQkJcmV0dXJuIFNPVU5EX01JWEVSX1BIT05FT1VUOwotCX0KLQlpZiAoc3RhdGUtPnRlcm10eXBlID49IDB4NzEwICYmIHN0YXRlLT50ZXJtdHlwZSA8PSAweDcxMSAmJiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfUkFESU8pKQotCQlyZXR1cm4gU09VTkRfTUlYRVJfUkFESU87Ci0JaWYgKHN0YXRlLT50ZXJtdHlwZSA+PSAweDcwOSAmJiBzdGF0ZS0+dGVybXR5cGUgPD0gMHg3MGYgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1ZJREVPKSkKLQkJcmV0dXJuIFNPVU5EX01JWEVSX1ZJREVPOwotCXUgPSBmZnMoc3RhdGUtPm1peGNobWFzayAmIChTT1VORF9NQVNLX0xJTkUgfCBTT1VORF9NQVNLX0NEIHwgU09VTkRfTUFTS19MSU5FMSB8IFNPVU5EX01BU0tfTElORTIgfCBTT1VORF9NQVNLX0xJTkUzIHwKLQkJCQkgICAgU09VTkRfTUFTS19ESUdJVEFMMSB8IFNPVU5EX01BU0tfRElHSVRBTDIgfCBTT1VORF9NQVNLX0RJR0lUQUwzKSk7Ci0JcmV0dXJuIHUtMTsKLX0KLQotc3RhdGljIHZvaWQgcHJlcG1peGNoKHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBzdGF0ZS0+cy0+dXNiZGV2OwotCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQlfX3MxNiB2MTsKLQl1bnNpZ25lZCBpbnQgdjIsIHYzOwotCi0JaWYgKCFzdGF0ZS0+bnJtaXhjaCB8fCBzdGF0ZS0+bnJtaXhjaCA+IFNPVU5EX01JWEVSX05SREVWSUNFUykKLQkJcmV0dXJuOwotCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpidWYpICogMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcmVwbWl4Y2g6IG91dCBvZiBtZW1vcnlcbiIpIDsKLQkJcmV0dXJuOwotCX0KLQotCWNoID0gJnN0YXRlLT5taXhjaFtzdGF0ZS0+bnJtaXhjaC0xXTsKLQlzd2l0Y2ggKGNoLT5zZWxlY3RvcikgewotCWNhc2UgMDogIC8qIG1peGVyIHVuaXQgcmVxdWVzdCAqLwotCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCi0JCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQotCQkJZ290byBlcnI7Ci0JCWNoLT5taW52YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOwotCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NQVgsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCi0JCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQotCQkJZ290byBlcnI7Ci0JCWNoLT5tYXh2YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOwotCQl2MiA9IGNoLT5tYXh2YWwgLSBjaC0+bWludmFsOwotCQlpZiAoIXYyKQotCQkJdjIgPSAxOwotCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCi0JCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQotCQkJZ290byBlcnI7Ci0JCXYxID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKLQkJdjMgPSB2MSAtIGNoLT5taW52YWw7Ci0JCXYzID0gMTAwICogdjMgLyB2MjsKLQkJaWYgKHYzID4gMTAwKQotCQkJdjMgPSAxMDA7Ci0JCWNoLT52YWx1ZSA9IHYzOwotCQlpZiAoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSB7Ci0JCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCi0JCQkJCSAgICAoKGNoLT5jaG51bSArICEhKGNoLT5mbGFncyAmIE1JWEZMR19TVEVSRU9JTikpIDw8IDgpIHwgKDEgKyAhIShjaC0+ZmxhZ3MgJiBNSVhGTEdfU1RFUkVPT1VUKSksCi0JCQkJCSAgICBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQotCQkJZ290byBlcnI7Ci0JCQl2MSA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7Ci0JCQl2MyA9IHYxIC0gY2gtPm1pbnZhbDsKLQkJCXYzID0gMTAwICogdjMgLyB2MjsKLQkJCWlmICh2MyA+IDEwMCkKLQkJCQl2MyA9IDEwMDsKLQkJfQotCQljaC0+dmFsdWUgfD0gdjMgPDwgODsKLQkJYnJlYWs7Ci0KLQkJLyogdmFyaW91cyBmZWF0dXJlIHVuaXQgY29udHJvbHMgKi8KLQljYXNlIFZPTFVNRV9DT05UUk9MOgotCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCi0JCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAyLCAxMDAwKSA8IDApCi0JCQlnb3RvIGVycjsKLQkJY2gtPm1pbnZhbCA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7Ci0JCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01BWCwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKLQkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKLQkJCWdvdG8gZXJyOwotCQljaC0+bWF4dmFsID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKLQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAotCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgY2gtPmNobnVtLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQotCQkJZ290byBlcnI7Ci0JCXYxID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKLQkJdjIgPSBjaC0+bWF4dmFsIC0gY2gtPm1pbnZhbDsKLQkJdjMgPSB2MSAtIGNoLT5taW52YWw7Ci0JCWlmICghdjIpCi0JCQl2MiA9IDE7Ci0JCXYzID0gMTAwICogdjMgLyB2MjsKLQkJaWYgKHYzID4gMTAwKQotCQkJdjMgPSAxMDA7Ci0JCWNoLT52YWx1ZSA9IHYzOwotCQlpZiAoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSB7Ci0JCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCi0JCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgKGNoLT5jaG51bSArIDEpLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQotCQkJCWdvdG8gZXJyOwotCQkJdjEgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOwotCQkJdjMgPSB2MSAtIGNoLT5taW52YWw7Ci0JCQl2MyA9IDEwMCAqIHYzIC8gdjI7Ci0JCQlpZiAodjMgPiAxMDApCi0JCQkJdjMgPSAxMDA7Ci0JCX0KLQkJY2gtPnZhbHVlIHw9IHYzIDw8IDg7Ci0JCWJyZWFrOwotCQkKLQljYXNlIEJBU1NfQ09OVFJPTDoKLQljYXNlIE1JRF9DT05UUk9MOgotCWNhc2UgVFJFQkxFX0NPTlRST0w6Ci0JCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01JTiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKLQkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKLQkJCWdvdG8gZXJyOwotCQljaC0+bWludmFsID0gYnVmWzBdIDw8IDg7Ci0JCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01BWCwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKLQkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKLQkJCWdvdG8gZXJyOwotCQljaC0+bWF4dmFsID0gYnVmWzBdIDw8IDg7Ci0JCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKLQkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKLQkJCWdvdG8gZXJyOwotCQl2MSA9IGJ1ZlswXSA8PCA4OwotCQl2MiA9IGNoLT5tYXh2YWwgLSBjaC0+bWludmFsOwotCQl2MyA9IHYxIC0gY2gtPm1pbnZhbDsKLQkJaWYgKCF2MikKLQkJCXYyID0gMTsKLQkJdjMgPSAxMDAgKiB2MyAvIHYyOwotCQlpZiAodjMgPiAxMDApCi0JCQl2MyA9IDEwMDsKLQkJY2gtPnZhbHVlID0gdjM7Ci0JCWlmIChjaC0+ZmxhZ3MgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpIHsKLQkJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKLQkJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCAoY2gtPmNobnVtICsgMSksIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAxLCAxMDAwKSA8IDApCi0JCQkJZ290byBlcnI7Ci0JCQl2MSA9IGJ1ZlswXSA8PCA4OwotCQkJdjMgPSB2MSAtIGNoLT5taW52YWw7Ci0JCQl2MyA9IDEwMCAqIHYzIC8gdjI7Ci0JCQlpZiAodjMgPiAxMDApCi0JCQkJdjMgPSAxMDA7Ci0JCX0KLQkJY2gtPnZhbHVlIHw9IHYzIDw8IDg7Ci0JCWJyZWFrOwotCQkKLQlkZWZhdWx0OgotCQlnb3RvIGVycjsKLQl9Ci0KLSBmcmVlYnVmOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuOwotIGVycjoKLQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBtaXhlciByZXF1ZXN0IGRldmljZSAldSBpZiAldSB1bml0ICV1IGNoICV1IHNlbGVjdG9yICV1IGZhaWxlZFxuIiwgCi0JICAgICAgIGRldi0+ZGV2bnVtLCBzdGF0ZS0+Y3RybGlmLCBjaC0+dW5pdGlkLCBjaC0+Y2hudW0sIGNoLT5zZWxlY3Rvcik7Ci0JaWYgKHN0YXRlLT5ucm1peGNoKQotCQlzdGF0ZS0+bnJtaXhjaC0tOwotCWdvdG8gZnJlZWJ1ZjsKLX0KLQotCi1zdGF0aWMgdm9pZCB1c2JfYXVkaW9fcmVjdXJzZXVuaXQoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgdW5pdGlkKTsKLQotc3RhdGljIGlubGluZSBpbnQgY2hlY2ttaXhibWFwKHVuc2lnbmVkIGNoYXIgKmJtYXAsIHVuc2lnbmVkIGNoYXIgZmxnLCB1bnNpZ25lZCBpbnQgaW5pZHgsIHVuc2lnbmVkIGludCBudW1vY2gpCi17Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWlkeCA9IGluaWR4Km51bW9jaDsKLQlpZiAoIShibWFwWy0oaWR4ID4+IDMpXSAmICgweDgwID4+IChpZHggJiA3KSkpKQotCQlyZXR1cm4gMDsKLQlpZiAoIShmbGcgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpKQotCQlyZXR1cm4gMTsKLQlpZHggPSAoaW5pZHgrISEoZmxnICYgTUlYRkxHX1NURVJFT0lOKSkqbnVtb2NoKyEhKGZsZyAmIE1JWEZMR19TVEVSRU9PVVQpOwotCWlmICghKGJtYXBbLShpZHggPj4gMyldICYgKDB4ODAgPj4gKGlkeCAmIDcpKSkpCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCB1c2JfYXVkaW9fbWl4ZXJ1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICptaXhlcikKLXsKLQl1bnNpZ25lZCBpbnQgbnJvdXRjaCA9IG1peGVyWzUrbWl4ZXJbNF1dOwotCXVuc2lnbmVkIGludCBjaGlkeFtTT1VORF9NSVhFUl9OUkRFVklDRVMrMV07Ci0JdW5zaWduZWQgaW50IHRlcm10W1NPVU5EX01JWEVSX05SREVWSUNFU107Ci0JdW5zaWduZWQgY2hhciBmbGcgPSAobnJvdXRjaCA+PSAyKSA/IE1JWEZMR19TVEVSRU9PVVQgOiAwOwotCXVuc2lnbmVkIGNoYXIgKmJtYXAgPSAmbWl4ZXJbOSttaXhlcls0XV07Ci0JdW5zaWduZWQgaW50IGJtYXBzaXplOwotCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKCFtaXhlcls0XSkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1IGludmFsaWQgTUlYRVJfVU5JVCBkZXNjcmlwdG9yXG4iLCBtaXhlclszXSk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKG1peGVyWzRdID4gU09VTkRfTUlYRVJfTlJERVZJQ0VTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IG1peGVyIHVuaXQgJXU6IHRvbyBtYW55IGlucHV0IHBpbnNcbiIsIG1peGVyWzNdKTsKLQkJcmV0dXJuOwotCX0KLQljaGlkeFswXSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG1peGVyWzRdOyBpKyspIHsKLQkJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBtaXhlcls1K2ldKTsKLQkJY2hpZHhbaSsxXSA9IGNoaWR4W2ldICsgc3RhdGUtPm5yY2hhbm5lbHM7Ci0JCXRlcm10W2ldID0gc3RhdGUtPnRlcm10eXBlOwotCX0KLQlzdGF0ZS0+dGVybXR5cGUgPSAwOwotCXN0YXRlLT5jaGNvbmZpZyA9IG1peGVyWzYrbWl4ZXJbNF1dIHwgKG1peGVyWzcrbWl4ZXJbNF1dIDw8IDgpOwotCWJtYXBzaXplID0gKG5yb3V0Y2ggKiBjaGlkeFttaXhlcls0XV0gKyA3KSA+PiAzOwotCWJtYXAgKz0gYm1hcHNpemUgLSAxOwotCWlmIChtaXhlclswXSA8IDEwK21peGVyWzRdK2JtYXBzaXplKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXUgaW52YWxpZCBNSVhFUl9VTklUIGRlc2NyaXB0b3IgKGJpdG1hcCB0b28gc21hbGwpXG4iLCBtaXhlclszXSk7Ci0JCXJldHVybjsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG1peGVyWzRdOyBpKyspIHsKLQkJc3RhdGUtPnRlcm10eXBlID0gdGVybXRbaV07Ci0JCWlmIChjaGlkeFtpKzFdLWNoaWR4W2ldID49IDIpIHsKLQkJCWZsZyB8PSBNSVhGTEdfU1RFUkVPSU47Ci0JCQlpZiAoY2hlY2ttaXhibWFwKGJtYXAsIGZsZywgY2hpZHhbaV0sIG5yb3V0Y2gpKSB7Ci0JCQkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBnZXR2b2xjaGFubmVsKHN0YXRlKSk7Ci0JCQkJaWYgKGNoKSB7Ci0JCQkJCWNoLT51bml0aWQgPSBtaXhlclszXTsKLQkJCQkJY2gtPnNlbGVjdG9yID0gMDsKLQkJCQkJY2gtPmNobnVtID0gY2hpZHhbaV0rMTsKLQkJCQkJY2gtPmZsYWdzID0gZmxnOwotCQkJCQlwcmVwbWl4Y2goc3RhdGUpOwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQlmbGcgJj0gfk1JWEZMR19TVEVSRU9JTjsKLQkJaWYgKGNoZWNrbWl4Ym1hcChibWFwLCBmbGcsIGNoaWR4W2ldLCBucm91dGNoKSkgewotCQkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBnZXR2b2xjaGFubmVsKHN0YXRlKSk7Ci0JCQlpZiAoY2gpIHsKLQkJCQljaC0+dW5pdGlkID0gbWl4ZXJbM107Ci0JCQkJY2gtPnNlbGVjdG9yID0gMDsKLQkJCQljaC0+Y2hudW0gPSBjaGlkeFtpXSsxOwotCQkJCWNoLT5mbGFncyA9IGZsZzsKLQkJCQlwcmVwbWl4Y2goc3RhdGUpOwotCQkJfQotCQl9Ci0JfQkKLQlzdGF0ZS0+dGVybXR5cGUgPSAwOwotfQotCi1zdGF0aWMgc3RydWN0IG1peGVyY2hhbm5lbCAqc2xjdHNyY19maW5kdW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgX191OCB1bml0aWQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JCi0JZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ucm1peGNoOyBpKyspCi0JCWlmIChzdGF0ZS0+bWl4Y2hbaV0udW5pdGlkID09IHVuaXRpZCkKLQkJCXJldHVybiAmc3RhdGUtPm1peGNoW2ldOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCB1c2JfYXVkaW9fc2VsZWN0b3J1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpzZWxlY3RvcikKLXsKLQl1bnNpZ25lZCBpbnQgY2hudW0sIGksIG1peGNoOwotCXN0cnVjdCBtaXhlcmNoYW5uZWwgKm1jaDsKLQotCWlmICghc2VsZWN0b3JbNF0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldSBpbnZhbGlkIFNFTEVDVE9SX1VOSVQgZGVzY3JpcHRvclxuIiwgc2VsZWN0b3JbM10pOwotCQlyZXR1cm47Ci0JfQotCW1peGNoID0gc3RhdGUtPm5ybWl4Y2g7Ci0JdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBzZWxlY3Rvcls1XSk7Ci0JaWYgKHN0YXRlLT5ucm1peGNoICE9IG1peGNoKSB7Ci0JCW1jaCA9ICZzdGF0ZS0+bWl4Y2hbc3RhdGUtPm5ybWl4Y2gtMV07Ci0JCW1jaC0+c2xjdHVuaXRpZCA9IHNlbGVjdG9yWzNdIHwgKDEgPDwgOCk7Ci0JfSBlbHNlIGlmICgobWNoID0gc2xjdHNyY19maW5kdW5pdChzdGF0ZSwgc2VsZWN0b3JbNV0pKSkgewotCQltY2gtPnNsY3R1bml0aWQgPSBzZWxlY3RvclszXSB8ICgxIDw8IDgpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBzZWxlY3RvciB1bml0ICV1OiBpZ25vcmluZyBjaGFubmVsIDFcbiIsIHNlbGVjdG9yWzNdKTsKLQl9Ci0JY2hudW0gPSBzdGF0ZS0+bnJjaGFubmVsczsKLQlmb3IgKGkgPSAxOyBpIDwgc2VsZWN0b3JbNF07IGkrKykgewotCQltaXhjaCA9IHN0YXRlLT5ucm1peGNoOwotCQl1c2JfYXVkaW9fcmVjdXJzZXVuaXQoc3RhdGUsIHNlbGVjdG9yWzUraV0pOwotCQlpZiAoY2hudW0gIT0gc3RhdGUtPm5yY2hhbm5lbHMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHNlbGVjdG9yIHVuaXQgJXU6IGlucHV0IHBpbnMgd2l0aCB2YXJ5aW5nIGNoYW5uZWwgbnVtYmVyc1xuIiwgc2VsZWN0b3JbM10pOwotCQkJc3RhdGUtPnRlcm10eXBlID0gMDsKLQkJCXN0YXRlLT5jaGNvbmZpZyA9IDA7Ci0JCQlzdGF0ZS0+bnJjaGFubmVscyA9IDA7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKHN0YXRlLT5ucm1peGNoICE9IG1peGNoKSB7Ci0JCQltY2ggPSAmc3RhdGUtPm1peGNoW3N0YXRlLT5ucm1peGNoLTFdOwotCQkJbWNoLT5zbGN0dW5pdGlkID0gc2VsZWN0b3JbM10gfCAoKGkgKyAxKSA8PCA4KTsKLQkJfSBlbHNlIGlmICgobWNoID0gc2xjdHNyY19maW5kdW5pdChzdGF0ZSwgc2VsZWN0b3JbNStpXSkpKSB7Ci0JCQltY2gtPnNsY3R1bml0aWQgPSBzZWxlY3RvclszXSB8ICgoaSArIDEpIDw8IDgpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHNlbGVjdG9yIHVuaXQgJXU6IGlnbm9yaW5nIGNoYW5uZWwgJXVcbiIsIHNlbGVjdG9yWzNdLCBpKzEpOwotCQl9Ci0JfQotCXN0YXRlLT50ZXJtdHlwZSA9IDA7Ci0Jc3RhdGUtPmNoY29uZmlnID0gMDsKLX0KLQotLyogaW4gdGhlIGZ1dHVyZSB3ZSBtaWdodCB0cnkgdG8gaGFuZGxlIDNEIGV0Yy4gZWZmZWN0IHVuaXRzICovCi0KLXN0YXRpYyB2b2lkIHVzYl9hdWRpb19wcm9jZXNzaW5ndW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqcHJvYykKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBwcm9jWzZdOyBpKyspCi0JCXVzYl9hdWRpb19yZWN1cnNldW5pdChzdGF0ZSwgcHJvY1s3K2ldKTsKLQlzdGF0ZS0+bnJjaGFubmVscyA9IHByb2NbNytwcm9jWzZdXTsKLQlzdGF0ZS0+dGVybXR5cGUgPSAwOwotCXN0YXRlLT5jaGNvbmZpZyA9IHByb2NbOCtwcm9jWzZdXSB8IChwcm9jWzkrcHJvY1s2XV0gPDwgOCk7Ci19Ci0KLQotLyogU2VlIEF1ZGlvIENsYXNzIFNwZWMsIHNlY3Rpb24gNC4zLjIuNSAqLwotc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2ZlYXR1cmV1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpmdHIpCi17Ci0Jc3RydWN0IG1peGVyY2hhbm5lbCAqY2g7Ci0JdW5zaWduZWQgc2hvcnQgY2hmdHIsIG1jaGZ0cjsKLSNpZiAwCi0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHN0YXRlLT5zLT51c2JkZXY7Ci0JdW5zaWduZWQgY2hhciBkYXRhWzFdOwotI2VuZGlmCi0JdW5zaWduZWQgY2hhciBucl9sb2dpY2FsX2NoYW5uZWxzLCBpOwotCi0JdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBmdHJbNF0pOwotCi0JaWYgKGZ0cls1XSA9PSAwICkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB3cm9uZyBjb250cm9scyBzaXplIGluIGZlYXR1cmUgdW5pdCAldVxuIixmdHJbM10pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHN0YXRlLT5ucmNoYW5uZWxzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmVhdHVyZSB1bml0ICV1IHNvdXJjZSBoYXMgbm8gY2hhbm5lbHNcbiIsIGZ0clszXSk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHN0YXRlLT5ucmNoYW5uZWxzID4gMikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGZlYXR1cmUgdW5pdCAldTogT1NTIG1peGVyIGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAyIGNoYW5uZWxzXG4iLCBmdHJbM10pOwotCi0JbnJfbG9naWNhbF9jaGFubmVscz0oZnRyWzBdLTcpL2Z0cls1XS0xOwotCi0JaWYgKG5yX2xvZ2ljYWxfY2hhbm5lbHMgIT0gc3RhdGUtPm5yY2hhbm5lbHMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHdhcm5pbmc6IGZvdW5kICVkIG9mICVkIGxvZ2ljYWwgY2hhbm5lbHMuXG4iLCBzdGF0ZS0+bnJjaGFubmVscyxucl9sb2dpY2FsX2NoYW5uZWxzKTsKLQotCQlpZiAoc3RhdGUtPm5yY2hhbm5lbHMgPT0gMSAmJiBucl9sb2dpY2FsX2NoYW5uZWxzPT0wKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogYXNzdW1pbmcgdGhlIGNoYW5uZWwgZm91bmQgaXMgdGhlIG1hc3RlciBjaGFubmVsIChnb3QgYSBQaGlsaXBzIGNhbWVyYT8pLiBTaG91bGQgYmUgZmluZS5cbiIpOwotCQl9IGVsc2UgaWYgKHN0YXRlLT5ucmNoYW5uZWxzID09IDEgJiYgbnJfbG9naWNhbF9jaGFubmVscz09MikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGFzc3VtaW5nIHRoYXQgYSBzdGVyZW8gY2hhbm5lbCBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gYSBtaXhlciBpcyBtaXNzaW5nIGluIHNlYXJjaCAoZ290IExhYnRlYyBoZWFkc2V0PykuIFNob3VsZCBiZSBmaW5lLlxuIik7Ci0JCQlzdGF0ZS0+bnJjaGFubmVscz1ucl9sb2dpY2FsX2NoYW5uZWxzOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IG5vIGlkZWEgd2hhdCdzIGdvaW5nIG9uLi4uLCBjb250YWN0IGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIpOwotCQl9Ci0JfQotCi0JLyogVGhlcmUgaXMgYWx3YXlzIGEgbWFzdGVyIGNoYW5uZWwgKi8KLQltY2hmdHIgPSBmdHJbNl07Ci0JLyogQmluYXJ5IEFORCBvdmVyIGxvZ2ljYWwgY2hhbm5lbHMgaWYgdGhleSBleGlzdCAqLwotCWlmIChucl9sb2dpY2FsX2NoYW5uZWxzKSB7Ci0JCWNoZnRyID0gZnRyWzYrZnRyWzVdXTsKLQkJZm9yIChpID0gMjsgaSA8PSBucl9sb2dpY2FsX2NoYW5uZWxzOyBpKyspCi0JCQljaGZ0ciAmPSBmdHJbNitpKmZ0cls1XV07Ci0JfSBlbHNlIHsKLQkJY2hmdHIgPSAwOwotCX0KLQotCS8qIHZvbHVtZSBjb250cm9sICovCi0JaWYgKGNoZnRyICYgMikgewotCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIGdldHZvbGNoYW5uZWwoc3RhdGUpKTsKLQkJaWYgKGNoKSB7Ci0JCQljaC0+dW5pdGlkID0gZnRyWzNdOwotCQkJY2gtPnNlbGVjdG9yID0gVk9MVU1FX0NPTlRST0w7Ci0JCQljaC0+Y2hudW0gPSAxOwotCQkJY2gtPmZsYWdzID0gKHN0YXRlLT5ucmNoYW5uZWxzID4gMSkgPyAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkgOiAwOwotCQkJcHJlcG1peGNoKHN0YXRlKTsKLQkJfQotCX0gZWxzZSBpZiAobWNoZnRyICYgMikgewotCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIGdldHZvbGNoYW5uZWwoc3RhdGUpKTsKLQkJaWYgKGNoKSB7Ci0JCQljaC0+dW5pdGlkID0gZnRyWzNdOwotCQkJY2gtPnNlbGVjdG9yID0gVk9MVU1FX0NPTlRST0w7Ci0JCQljaC0+Y2hudW0gPSAwOwotCQkJY2gtPmZsYWdzID0gMDsKLQkJCXByZXBtaXhjaChzdGF0ZSk7Ci0JCX0KLQl9Ci0JLyogYmFzcyBjb250cm9sICovCi0JaWYgKGNoZnRyICYgNCkgewotCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX0JBU1MpOwotCQlpZiAoY2gpIHsKLQkJCWNoLT51bml0aWQgPSBmdHJbM107Ci0JCQljaC0+c2VsZWN0b3IgPSBCQVNTX0NPTlRST0w7Ci0JCQljaC0+Y2hudW0gPSAxOwotCQkJY2gtPmZsYWdzID0gKHN0YXRlLT5ucmNoYW5uZWxzID4gMSkgPyAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkgOiAwOwotCQkJcHJlcG1peGNoKHN0YXRlKTsKLQkJfQotCX0gZWxzZSBpZiAobWNoZnRyICYgNCkgewotCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX0JBU1MpOwotCQlpZiAoY2gpIHsKLQkJCWNoLT51bml0aWQgPSBmdHJbM107Ci0JCQljaC0+c2VsZWN0b3IgPSBCQVNTX0NPTlRST0w7Ci0JCQljaC0+Y2hudW0gPSAwOwotCQkJY2gtPmZsYWdzID0gMDsKLQkJCXByZXBtaXhjaChzdGF0ZSk7Ci0JCX0KLQl9Ci0JLyogdHJlYmxlIGNvbnRyb2wgKi8KLQlpZiAoY2hmdHIgJiAxNikgewotCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX1RSRUJMRSk7Ci0JCWlmIChjaCkgewotCQkJY2gtPnVuaXRpZCA9IGZ0clszXTsKLQkJCWNoLT5zZWxlY3RvciA9IFRSRUJMRV9DT05UUk9MOwotCQkJY2gtPmNobnVtID0gMTsKLQkJCWNoLT5mbGFncyA9IChzdGF0ZS0+bnJjaGFubmVscyA+IDEpID8gKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpIDogMDsKLQkJCXByZXBtaXhjaChzdGF0ZSk7Ci0JCX0KLQl9IGVsc2UgaWYgKG1jaGZ0ciAmIDE2KSB7Ci0JCWNoID0gZ2V0bWl4Y2hhbm5lbChzdGF0ZSwgU09VTkRfTUlYRVJfVFJFQkxFKTsKLQkJaWYgKGNoKSB7Ci0JCQljaC0+dW5pdGlkID0gZnRyWzNdOwotCQkJY2gtPnNlbGVjdG9yID0gVFJFQkxFX0NPTlRST0w7Ci0JCQljaC0+Y2hudW0gPSAwOwotCQkJY2gtPmZsYWdzID0gMDsKLQkJCXByZXBtaXhjaChzdGF0ZSk7Ci0JCX0KLQl9Ci0jaWYgMAotCS8qIGlmIHRoZXJlIGFyZSBtdXRlIGNvbnRyb2xzLCB1bm11dGUgdGhlbSAqLwotCS8qIGRvZXMgbm90IHNlZW0gdG8gYmUgbmVjZXNzYXJ5LCBhbmQgdGhlIERhbGxhcyBjaGlwIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCB0aGUgImFsbCIgY2hhbm5lbCAoMjU1KSAqLwotCWlmICgoY2hmdHIgJiAxKSB8fCAobWNoZnRyICYgMSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1bm11dGluZyBmZWF0dXJlIHVuaXQgJXUgaW50ZXJmYWNlICV1XG4iLCBmdHJbM10sIHN0YXRlLT5jdHJsaWYpOwotCQlkYXRhWzBdID0gMDsKLQkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKLQkJCQkgICAgKE1VVEVfQ09OVFJPTCA8PCA4KSB8IDB4ZmYsIHN0YXRlLT5jdHJsaWYgfCAoZnRyWzNdIDw8IDgpLCBkYXRhLCAxLCAxMDAwKSA8IDApCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JhdWRpbzogZmFpbHVyZSB0byB1bm11dGUgZmVhdHVyZSB1bml0ICV1IGludGVyZmFjZSAldVxuIiwgZnRyWzNdLCBzdGF0ZS0+Y3RybGlmKTsKLSAJfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHVzYl9hdWRpb19yZWN1cnNldW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciB1bml0aWQpCi17Ci0JdW5zaWduZWQgY2hhciAqcDE7Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0KLQlpZiAodGVzdF9hbmRfc2V0X2JpdCh1bml0aWQsIHN0YXRlLT51bml0Yml0bWFwKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogbWl4ZXIgcGF0aCByZXZpc2l0cyB1bml0ICVkXG4iLCB1bml0aWQpOwotCQlyZXR1cm47Ci0JfQotCXAxID0gZmluZF9hdWRpb2NvbnRyb2xfdW5pdChzdGF0ZS0+YnVmZmVyLCBzdGF0ZS0+YnVmbGVuLCBOVUxMLCB1bml0aWQsIHN0YXRlLT5jdHJsaWYpOwotCWlmICghcDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAlZCBub3QgZm91bmQhXG4iLCB1bml0aWQpOwotCQlyZXR1cm47Ci0JfQotCXN0YXRlLT5ucmNoYW5uZWxzID0gMDsKLQlzdGF0ZS0+dGVybXR5cGUgPSAwOwotCXN0YXRlLT5jaGNvbmZpZyA9IDA7Ci0Jc3dpdGNoIChwMVsyXSkgewotCWNhc2UgSU5QVVRfVEVSTUlOQUw6Ci0JCWlmIChwMVswXSA8IDEyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiBpbnZhbGlkIElOUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3RhdGUtPm5yY2hhbm5lbHMgPSBwMVs3XTsKLQkJc3RhdGUtPnRlcm10eXBlID0gcDFbNF0gfCAocDFbNV0gPDwgOCk7Ci0JCXN0YXRlLT5jaGNvbmZpZyA9IHAxWzhdIHwgKHAxWzldIDw8IDgpOwotCQlyZXR1cm47Ci0KLQljYXNlIE1JWEVSX1VOSVQ6Ci0JCWlmIChwMVswXSA8IDEwIHx8IHAxWzBdIDwgMTArcDFbNF0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgTUlYRVJfVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXVzYl9hdWRpb19taXhlcnVuaXQoc3RhdGUsIHAxKTsKLQkJcmV0dXJuOwotCi0JY2FzZSBTRUxFQ1RPUl9VTklUOgotCQlpZiAocDFbMF0gPCA2IHx8IHAxWzBdIDwgNitwMVs0XSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBTRUxFQ1RPUl9VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdXNiX2F1ZGlvX3NlbGVjdG9ydW5pdChzdGF0ZSwgcDEpOwotCQlyZXR1cm47Ci0KLQljYXNlIEZFQVRVUkVfVU5JVDogLyogU2VlIFVTQiBBdWRpbyBDbGFzcyBTcGVjIDQuMy4yLjUgKi8KLQkJaWYgKHAxWzBdIDwgNyB8fCBwMVswXSA8IDcrcDFbNV0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgRkVBVFVSRV9VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdXNiX2F1ZGlvX2ZlYXR1cmV1bml0KHN0YXRlLCBwMSk7Ci0JCXJldHVybjsJCQotCi0JY2FzZSBQUk9DRVNTSU5HX1VOSVQ6Ci0JCWlmIChwMVswXSA8IDEzIHx8IHAxWzBdIDwgMTMrcDFbNl0gfHwgcDFbMF0gPCAxMytwMVs2XStwMVsxMStwMVs2XV0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgUFJPQ0VTU0lOR19VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdXNiX2F1ZGlvX3Byb2Nlc3Npbmd1bml0KHN0YXRlLCBwMSk7Ci0JCXJldHVybjsJCQotCi0JY2FzZSBFWFRFTlNJT05fVU5JVDoKLQkJaWYgKHAxWzBdIDwgMTMgfHwgcDFbMF0gPCAxMytwMVs2XSB8fCBwMVswXSA8IDEzK3AxWzZdK3AxWzExK3AxWzZdXSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBFWFRFTlNJT05fVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWZvciAoaiA9IGkgPSAwOyBpIDwgcDFbNl07IGkrKykgewotCQkJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBwMVs3K2ldKTsKLQkJCWlmICghaSkKLQkJCQlqID0gc3RhdGUtPnRlcm10eXBlOwotCQkJZWxzZSBpZiAoaiAhPSBzdGF0ZS0+dGVybXR5cGUpCi0JCQkJaiA9IDA7Ci0JCX0KLQkJc3RhdGUtPm5yY2hhbm5lbHMgPSBwMVs3K3AxWzZdXTsKLQkJc3RhdGUtPmNoY29uZmlnID0gcDFbOCtwMVs2XV0gfCAocDFbOStwMVs2XV0gPDwgOCk7Ci0JCXN0YXRlLT50ZXJtdHlwZSA9IGo7Ci0JCXJldHVybjsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IHVuZXhwZWN0ZWQgdHlwZSAweCUwMnhcbiIsIHVuaXRpZCwgcDFbMl0pOwotCQlyZXR1cm47Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB1c2JfYXVkaW9fY29uc3RydWN0bWl4ZXIoc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcywgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCB1bnNpZ25lZCBpbnQgY3RybGlmLCB1bnNpZ25lZCBjaGFyICpvdGVybSkKLXsKLQlzdHJ1Y3QgdXNiX21peGVyZGV2ICptczsKLQlzdHJ1Y3QgY29uc21peHN0YXRlIHN0YXRlOwotCi0JbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7Ci0Jc3RhdGUucyA9IHM7Ci0Jc3RhdGUubnJtaXhjaCA9IDA7Ci0Jc3RhdGUubWl4Y2htYXNrID0gfjA7Ci0Jc3RhdGUuYnVmZmVyID0gYnVmZmVyOwotCXN0YXRlLmJ1ZmxlbiA9IGJ1ZmxlbjsKLQlzdGF0ZS5jdHJsaWYgPSBjdHJsaWY7Ci0Jc2V0X2JpdChvdGVybVszXSwgc3RhdGUudW5pdGJpdG1hcCk7ICAvKiBtYXJrIHRlcm1pbmFsIElEIGFzIHZpc2l0ZWQgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAidXNiYXVkaW86IGNvbnN0cnVjdGluZyBtaXhlciBmb3IgVGVybWluYWwgJXUgdHlwZSAweCUwNHhcbiIsCi0JICAgICAgIG90ZXJtWzNdLCBvdGVybVs0XSB8IChvdGVybVs1XSA8PCA4KSk7Ci0JdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KCZzdGF0ZSwgb3Rlcm1bN10pOwotCWlmICghc3RhdGUubnJtaXhjaCkgewotCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogbm8gbWl4ZXIgY29udHJvbHMgZm91bmQgZm9yIFRlcm1pbmFsICV1XG4iLCBvdGVybVszXSk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKCEobXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21peGVyZGV2KStzdGF0ZS5ucm1peGNoKnNpemVvZihzdHJ1Y3QgbWl4ZXJjaGFubmVsKSwgR0ZQX0tFUk5FTCkpKQotCQlyZXR1cm47Ci0JbWVtc2V0KG1zLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9taXhlcmRldikpOwotCW1lbWNweSgmbXMtPmNoLCAmc3RhdGUubWl4Y2gsIHN0YXRlLm5ybWl4Y2gqc2l6ZW9mKHN0cnVjdCBtaXhlcmNoYW5uZWwpKTsKLQltcy0+c3RhdGUgPSBzOwotCW1zLT5pZmFjZSA9IGN0cmxpZjsKLQltcy0+bnVtY2ggPSBzdGF0ZS5ucm1peGNoOwotCWlmICgobXMtPmRldl9taXhlciA9IHJlZ2lzdGVyX3NvdW5kX21peGVyKCZ1c2JfbWl4ZXJfZm9wcywgLTEpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogY2Fubm90IHJlZ2lzdGVyIG1peGVyXG4iKTsKLQkJa2ZyZWUobXMpOwotCQlyZXR1cm47Ci0JfQotCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiByZWdpc3RlcmVkIG1peGVyIDE0LCVkXG4iLCBtcy0+ZGV2X21peGVyKTsKLQlsaXN0X2FkZF90YWlsKCZtcy0+bGlzdCwgJnMtPm1peGVybGlzdCk7Ci19Ci0KLS8qIGFyYml0cmFyeSBsaW1pdCwgd2Ugd29uJ3QgY2hlY2sgbW9yZSBpbnRlcmZhY2VzIHRoYW4gdGhpcyAqLwotI2RlZmluZSBVU0JfTUFYSU5URVJGQUNFUwkzMgotCi1zdGF0aWMgc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqdXNiX2F1ZGlvX3BhcnNlY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4sIHVuc2lnbmVkIGludCBjdHJsaWYpCi17Ci0Jc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OwotCXVuc2lnbmVkIGNoYXIgaWZpbltVU0JfTUFYSU5URVJGQUNFU10sIGlmb3V0W1VTQl9NQVhJTlRFUkZBQ0VTXTsKLQl1bnNpZ25lZCBjaGFyICpwMTsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgaywgbnVtaWZpbiA9IDAsIG51bWlmb3V0ID0gMDsKLQkKLQlpZiAoIShzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9hdWRpb19zdGF0ZSksIEdGUF9LRVJORUwpKSkKLQkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KHMsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlKSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnMtPmF1ZGlvbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnMtPm1peGVybGlzdCk7Ci0Jcy0+dXNiZGV2ID0gZGV2OwotCXMtPmNvdW50ID0gMTsKLQotCS8qIGZpbmQgYXVkaW9jb250cm9sIGludGVyZmFjZSAqLwotCWlmICghKHAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBIRUFERVIsIGN0cmxpZiwgLTEpKSkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBubyBIRUFERVIgZm91bmRcbiIsCi0JCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmKTsKLQkJZ290byByZXQ7Ci0JfQotCWlmIChwMVswXSA8IDggKyBwMVs3XSkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBIRUFERVIgZXJyb3JcbiIsCi0JCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmKTsKLQkJZ290byByZXQ7Ci0JfQotCWlmICghcDFbN10pCi0JCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBoYXMgbm8gQXVkaW9TdHJlYW1pbmcgYW5kIE1pZGlTdHJlYW1pbmcgaW50ZXJmYWNlc1xuIiwKLQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYpOwotCWZvciAoaSA9IDA7IGkgPCBwMVs3XTsgaSsrKSB7Ci0JCWogPSBwMVs4K2ldOwotCQlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGopOwotCQlpZiAoIWlmYWNlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgZG9lcyBub3QgZXhpc3RcbiIsCi0JCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoaWZhY2UtPm51bV9hbHRzZXR0aW5nID09IDEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGhhcyBvbmx5IDEgYWx0c2V0dGluZy5cbiIsIGRldi0+ZGV2bnVtLCBjdHJsaWYpOwotCQkJY29udGludWU7Ci0JCX0KLQkJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGlmYWNlLCAwKTsKLQkJaWYgKCFhbHQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBoYXMgbm8gYWx0c2V0dGluZyAwXG4iLAotCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaXMgbm90IGFuIEF1ZGlvQ2xhc3MgaW50ZXJmYWNlXG4iLAotCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBNSURJU3RyZWFtaW5nIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaW52YWxpZCBBdWRpb0NsYXNzIHN1YnR5cGVcbiIsCi0JCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoYWx0LT5kZXNjLmJOdW1FbmRwb2ludHMgPiAwKSB7Ci0JCQkvKiBDaGVjayBhbGwgZW5kcG9pbnRzOyBzaG91bGQgdGhleSBhbGwgaGF2ZSBhIGJhbmR3aWR0aCBvZiAwID8gKi8KLQkJCWZvciAoayA9IDA7IGsgPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50czsgaysrKSB7Ci0JCQkJaWYgKGxlMTZfdG9fY3B1KGFsdC0+ZW5kcG9pbnRba10uZGVzYy53TWF4UGFja2V0U2l6ZSkgPiAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGVuZHBvaW50ICVkIGRvZXMgbm90IGhhdmUgMCBiYW5kd2lkdGggYXQgYWx0WzBdXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBrKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGsgPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50cykKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgMSk7Ci0JCWlmICghYWx0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaGFzIG5vIGFsdHNldHRpbmcgMVxuIiwKLQkJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChhbHQtPmRlc2MuYk51bUVuZHBvaW50cyA8IDEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBoYXMgbm8gZW5kcG9pbnRcbiIsCi0JCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiBub3RlOiB0aGlzIHJlcXVpcmVzIHRoZSBkYXRhIGVuZHBvaW50IHRvIGJlIGVwMCBhbmQgdGhlIG9wdGlvbmFsIHN5bmMKLQkJICAgZXAgdG8gYmUgZXAxLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2FzZSAqLwotCQlpZiAoYWx0LT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7Ci0JCQlpZiAobnVtaWZpbiA8IFVTQl9NQVhJTlRFUkZBQ0VTKSB7Ci0JCQkJaWZpbltudW1pZmluKytdID0gajsKLQkJCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTEpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG51bWlmb3V0IDwgVVNCX01BWElOVEVSRkFDRVMpIHsKLQkJCQlpZm91dFtudW1pZm91dCsrXSA9IGo7Ci0JCQkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVzYl9hdWRpb19kcml2ZXIsIGlmYWNlLCAodm9pZCAqKS0xKTsKLQkJCX0KLQkJfQotCX0KLQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgaGFzICV1IGlucHV0IGFuZCAldSBvdXRwdXQgQXVkaW9TdHJlYW1pbmcgaW50ZXJmYWNlc1xuIiwKLQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgbnVtaWZpbiwgbnVtaWZvdXQpOwotCWZvciAoaSA9IDA7IGkgPCBudW1pZmluICYmIGkgPCBudW1pZm91dDsgaSsrKQotCQl1c2JfYXVkaW9fcGFyc2VzdHJlYW1pbmcocywgYnVmZmVyLCBidWZsZW4sIGlmaW5baV0sIGlmb3V0W2ldKTsKLQlmb3IgKGogPSBpOyBqIDwgbnVtaWZpbjsgaisrKQotCQl1c2JfYXVkaW9fcGFyc2VzdHJlYW1pbmcocywgYnVmZmVyLCBidWZsZW4sIGlmaW5baV0sIC0xKTsKLQlmb3IgKGogPSBpOyBqIDwgbnVtaWZvdXQ7IGorKykKLQkJdXNiX2F1ZGlvX3BhcnNlc3RyZWFtaW5nKHMsIGJ1ZmZlciwgYnVmbGVuLCAtMSwgaWZvdXRbaV0pOwotCS8qIG5vdyB3YWxrIHRocm91Z2ggYWxsIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycyB0byBzZWFyY2ggZm9yIG1peGVycyAqLwotCXAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBPVVRQVVRfVEVSTUlOQUwsIGN0cmxpZiwgLTEpOwotCXdoaWxlIChwMSkgewotCQlpZiAocDFbMF0gPj0gOSkKLQkJCXVzYl9hdWRpb19jb25zdHJ1Y3RtaXhlcihzLCBidWZmZXIsIGJ1ZmxlbiwgY3RybGlmLCBwMSk7Ci0JCXAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBwMSwgT1VUUFVUX1RFUk1JTkFMLCBjdHJsaWYsIC0xKTsKLQl9Ci0KLXJldDoKLQlpZiAobGlzdF9lbXB0eSgmcy0+YXVkaW9saXN0KSAmJiBsaXN0X2VtcHR5KCZzLT5taXhlcmxpc3QpKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JLyogZXZlcnl0aGluZyBzdWNjZXNzZnVsICovCi0JZG93bigmb3Blbl9zZW0pOwotCWxpc3RfYWRkX3RhaWwoJnMtPmF1ZGlvZGV2LCAmYXVkaW9kZXZzKTsKLQl1cCgmb3Blbl9zZW0pOwotCXByaW50ayhLRVJOX0RFQlVHICJ1c2JfYXVkaW9fcGFyc2Vjb250cm9sOiB1c2JfYXVkaW9fc3RhdGUgYXQgJXBcbiIsIHMpOwotCXJldHVybiBzOwotfQotCi0vKiB3ZSBvbmx5IGNhcmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbmZpZ3VyYXRpb24gKi8KLQotc3RhdGljIGludCB1c2JfYXVkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOwotCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCXVuc2lnbmVkIGludCBidWZsZW47Ci0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBQcm9iaW5nIGlmICVpOiBJQyAleCwgSVNDICV4XG4iLCBpZm51bSwKLQkgICAgICAgY29uZmlnLT5pbnRlcmZhY2VbaWZudW1dLmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCi0JICAgICAgIGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXS5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZVN1YkNsYXNzKTsKLSNlbmRpZgotCi0JLyoKLQkgKiBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlIGZvdW5kCi0JICogZmluZCB3aGljaCBjb25maWd1cmF0aW9uIG51bWJlciBpcyBhY3RpdmUKLQkgKi8KLQlidWZmZXIgPSBkZXYtPnJhd2Rlc2NyaXB0b3JzW2Rldi0+YWN0Y29uZmlnIC0gZGV2LT5jb25maWddOwotCWJ1ZmxlbiA9IGxlMTZfdG9fY3B1KGRldi0+YWN0Y29uZmlnLT5kZXNjLndUb3RhbExlbmd0aCk7Ci0JcyA9IHVzYl9hdWRpb19wYXJzZWNvbnRyb2woZGV2LCBidWZmZXIsIGJ1ZmxlbiwgaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKLQlpZiAocykgewotCQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRU5PREVWOwotfQotCi0KLS8qIGEgcmV2b2tlIGZhY2lsaXR5IHdvdWxkIG1ha2UgdGhpbmdzIHNpbXBsZXIgKi8KLQotc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcyA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwotCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOwotCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zOwotCi0JaWYgKCFzKQotCQlyZXR1cm47Ci0KLQkvKiB3ZSBnZXQgY2FsbGVkIHdpdGggLTEgZm9yIGV2ZXJ5IGF1ZGlvc3RyZWFtaW5nIGludGVyZmFjZSByZWdpc3RlcmVkICovCi0JaWYgKHMgPT0gKHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKiktMSkgewotCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogbm90ZSwgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3QgY2FsbGVkIHdpdGggLTFcbiIpKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoIXMtPnVzYmRldikgewotCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogZXJyb3IsICB1c2JfYXVkaW9fZGlzY29ubmVjdCBhbHJlYWR5IGNhbGxlZCBmb3IgJXAhXG4iLCBzKSk7Ci0JCXJldHVybjsKLQl9Ci0JZG93bigmb3Blbl9zZW0pOwotCWxpc3RfZGVsX2luaXQoJnMtPmF1ZGlvZGV2KTsKLQlzLT51c2JkZXYgPSBOVUxMOwotCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOwotCi0JLyogZGVyZWdpc3RlciBhbGwgYXVkaW8gYW5kIG1peGVyIGRldmljZXMsIHNvIG5vIG5ldyBwcm9jZXNzZXMgY2FuIG9wZW4gdGhpcyBkZXZpY2UgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmcy0+YXVkaW9saXN0LCBsaXN0KSB7Ci0JCXVzYmluX2Rpc2MoYXMpOwotCQl1c2JvdXRfZGlzYyhhcyk7Ci0JCXdha2VfdXAoJmFzLT51c2Jpbi5kbWEud2FpdCk7Ci0JCXdha2VfdXAoJmFzLT51c2JvdXQuZG1hLndhaXQpOwotCQlpZiAoYXMtPmRldl9hdWRpbyA+PSAwKSB7Ci0JCQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChhcy0+ZGV2X2F1ZGlvKTsKLQkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB1bnJlZ2lzdGVyIGRzcCAxNCwlZFxuIiwgYXMtPmRldl9hdWRpbyk7Ci0JCX0KLQkJYXMtPmRldl9hdWRpbyA9IC0xOwotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1zLCAmcy0+bWl4ZXJsaXN0LCBsaXN0KSB7Ci0JCWlmIChtcy0+ZGV2X21peGVyID49IDApIHsKLQkJCXVucmVnaXN0ZXJfc291bmRfbWl4ZXIobXMtPmRldl9taXhlcik7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdW5yZWdpc3RlciBtaXhlciAxNCwlZFxuIiwgbXMtPmRldl9taXhlcik7Ci0JCX0KLQkJbXMtPmRldl9taXhlciA9IC0xOwotCX0KLQlyZWxlYXNlKHMpOwotCXdha2VfdXAoJm9wZW5fd2FpdCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHVzYl9hdWRpb19pbml0KHZvaWQpCi17Ci0JaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX2F1ZGlvX2RyaXZlcik7Ci0JaWYgKHJlc3VsdCA9PSAwKSAKLQkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19leGl0IHVzYl9hdWRpb19jbGVhbnVwKHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJnVzYl9hdWRpb19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh1c2JfYXVkaW9faW5pdCk7Ci1tb2R1bGVfZXhpdCh1c2JfYXVkaW9fY2xlYW51cCk7Ci0KLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uaCBiL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1OTE2ZWIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0jZGVmaW5lIENTX0FVRElPX1VOREVGSU5FRAkJMHgyMAotI2RlZmluZSBDU19BVURJT19ERVZJQ0UJCQkweDIxCi0jZGVmaW5lIENTX0FVRElPX0NPTkZJR1VSQVRJT04JCTB4MjIKLSNkZWZpbmUgQ1NfQVVESU9fU1RSSU5HCQkJMHgyMwotI2RlZmluZSBDU19BVURJT19JTlRFUkZBQ0UJCTB4MjQKLSNkZWZpbmUgQ1NfQVVESU9fRU5EUE9JTlQJCTB4MjUKLQotI2RlZmluZSBIRUFERVIJCQkJMHgwMQotI2RlZmluZSBJTlBVVF9URVJNSU5BTAkJCTB4MDIKLSNkZWZpbmUgT1VUUFVUX1RFUk1JTkFMCQkJMHgwMwotI2RlZmluZSBNSVhFUl9VTklUCQkJMHgwNAotI2RlZmluZSBTRUxFQ1RPUl9VTklUCQkJMHgwNQotI2RlZmluZSBGRUFUVVJFX1VOSVQJCQkweDA2Ci0jZGVmaW5lIFBST0NFU1NJTkdfVU5JVAkJCTB4MDcKLSNkZWZpbmUgRVhURU5TSU9OX1VOSVQJCQkweDA4Ci0KLSNkZWZpbmUgQVNfR0VORVJBTAkJCTB4MDEKLSNkZWZpbmUgRk9STUFUX1RZUEUJCQkweDAyCi0jZGVmaW5lIEZPUk1BVF9TUEVDSUZJQwkJCTB4MDMKLQotI2RlZmluZSBFUF9HRU5FUkFMCQkJMHgwMQotCi0jZGVmaW5lIE1BWF9DSEFOCQkJOQotI2RlZmluZSBNQVhfRlJFUQkJCTE2Ci0jZGVmaW5lIE1BWF9JRkFDRQkJCTgKLSNkZWZpbmUgTUFYX0ZPUk1BVAkJCTgKLSNkZWZpbmUgTUFYX0FMVAkJCQkzMiAJLyogU29ycnksIHdlIG5lZWQgcXVpdGUgYSBmZXcgZm9yIHRoZSBQaGlsaXBzIHdlYmNhbXMgKi8KLQotc3RydWN0IHVzYl9hdWRpb190ZXJtaW5hbAotewkKLQl1OAlmbGFnczsKLQl1OAlhc3NvYzsKLQl1MTYJdHlwZTsJCQkvKiBNaWMgZXRjICovCi0JdTgJY2hhbm5lbHM7Ci0JdTgJc291cmNlOwotCXUxNgljaGFuY2ZnOwotfTsKLQotc3RydWN0IHVzYl9hdWRpb19mb3JtYXQKLXsKLQl1OAl0eXBlOwotCXU4CWNoYW5uZWxzOwotCXU4CW51bV9mcmVxOwotCXU4CXNmejsKLQl1OAliaXRzOwotCXUxNglmcmVxW01BWF9GUkVRXTsKLX07Ci0KLXN0cnVjdCB1c2JfYXVkaW9faW50ZXJmYWNlCi17Ci0JdTgJdGVybWluYWw7Ci0JdTgJZGVsYXk7Ci0JdTE2CW51bV9mb3JtYXRzOwotCXUxNglmb3JtYXRfdHlwZTsKLQl1OAlmbGFnczsKLQl1OAlpZGxlY29uZjsJLyogSWRsZSBjb25maWcgKi8KLSNkZWZpbmUgQVVfSUZBQ0VfRk9VTkQJMQotCXN0cnVjdCAgdXNiX2F1ZGlvX2Zvcm1hdCBmb3JtYXRbTUFYX0ZPUk1BVF07Ci19OwotCi1zdHJ1Y3QgdXNiX2F1ZGlvX2RldmljZQotewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQl1OAltaXhlcjsKLQl1OAlzZWxlY3RvcjsKLQl2b2lkCSppcnFfaGFuZGxlOwotCXU4CW51bV9jaGFubmVsczsKLQl1OAludW1fZHNwX2lmYWNlOwotCXU4CWNoYW5uZWxfbWFwW01BWF9DSEFOXTsKLQlzdHJ1Y3QgdXNiX2F1ZGlvX3Rlcm1pbmFsIHRlcm1pbmFsW01BWF9DSEFOXTsKLQlzdHJ1Y3QgdXNiX2F1ZGlvX2ludGVyZmFjZSBpbnRlcmZhY2VbTUFYX0lGQUNFXVtNQVhfQUxUXTsKLX07Ci0KLQotCi0vKiBBdWRpbyBDbGFzcyBzcGVjaWZpYyBSZXF1ZXN0IENvZGVzICovCi0KLSNkZWZpbmUgU0VUX0NVUiAgICAweDAxCi0jZGVmaW5lIEdFVF9DVVIgICAgMHg4MQotI2RlZmluZSBTRVRfTUlOICAgIDB4MDIKLSNkZWZpbmUgR0VUX01JTiAgICAweDgyCi0jZGVmaW5lIFNFVF9NQVggICAgMHgwMwotI2RlZmluZSBHRVRfTUFYICAgIDB4ODMKLSNkZWZpbmUgU0VUX1JFUyAgICAweDA0Ci0jZGVmaW5lIEdFVF9SRVMgICAgMHg4NAotI2RlZmluZSBTRVRfTUVNICAgIDB4MDUKLSNkZWZpbmUgR0VUX01FTSAgICAweDg1Ci0jZGVmaW5lIEdFVF9TVEFUICAgMHhmZgotCi0vKiBUZXJtaW5hbCBDb250cm9sIFNlbGVjdG9ycyAqLwotCi0jZGVmaW5lIENPUFlfUFJPVEVDVF9DT05UUk9MICAgICAgIDB4MDEKLQotLyogRmVhdHVyZSBVbml0IENvbnRyb2wgU2VsZWN0b3JzICovCi0KLSNkZWZpbmUgTVVURV9DT05UUk9MICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBWT0xVTUVfQ09OVFJPTCAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIEJBU1NfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgTUlEX0NPTlRST0wgICAgICAgICAgICAgICAgMHgwNAotI2RlZmluZSBUUkVCTEVfQ09OVFJPTCAgICAgICAgICAgICAweDA1Ci0jZGVmaW5lIEdSQVBISUNfRVFVQUxJWkVSX0NPTlRST0wgIDB4MDYKLSNkZWZpbmUgQVVUT01BVElDX0dBSU5fQ09OVFJPTCAgICAgMHgwNwotI2RlZmluZSBERUxBWV9DT05UUk9MICAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIEJBU1NfQk9PU1RfQ09OVFJPTCAgICAgICAgIDB4MDkKLSNkZWZpbmUgTE9VRE5FU1NfQ09OVFJPTCAgICAgICAgICAgMHgwYQotCi0vKiBFbmRwb2ludCBDb250cm9sIFNlbGVjdG9ycyAqLwotCi0jZGVmaW5lIFNBTVBMSU5HX0ZSRVFfQ09OVFJPTCAgICAgIDB4MDEKLSNkZWZpbmUgUElUQ0hfQ09OVFJPTCAgICAgICAgICAgICAgMHgwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IDk3YmRlYjEuLjZkZDMzOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYl9jZGMuaD4KQEAgLTgwLDcgKzgxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqYWNtX3R0eV9kcml2ZXI7CiBzdGF0aWMgc3RydWN0IGFjbSAqYWNtX3RhYmxlW0FDTV9UVFlfTUlOT1JTXTsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgob3Blbl9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChvcGVuX211dGV4KTsKIAogI2RlZmluZSBBQ01fUkVBRFkoYWNtKQkoYWNtICYmIGFjbS0+ZGV2ICYmIGFjbS0+dXNlZCkKIApAQCAtNDMxLDggKzQzMiw4IEBACiAJaW50IHJ2ID0gLUVJTlZBTDsKIAlpbnQgaTsKIAlkYmcoIkVudGVyaW5nIGFjbV90dHlfb3Blbi5cbiIpOwotCQotCWRvd24oJm9wZW5fc2VtKTsKKworCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOwogCiAJYWNtID0gYWNtX3RhYmxlW3R0eS0+aW5kZXhdOwogCWlmICghYWNtIHx8ICFhY20tPmRldikKQEAgLTQ3NCwxNCArNDc1LDE0IEBACiAKIGRvbmU6CiBlcnJfb3V0OgotCXVwKCZvcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuX211dGV4KTsKIAlyZXR1cm4gcnY7CiAKIGZ1bGxfYmFpbG91dDoKIAl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKIGJhaWxfb3V0OgogCWFjbS0+dXNlZC0tOwotCXVwKCZvcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuX211dGV4KTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtNTA3LDcgKzUwOCw3IEBACiAJaWYgKCFhY20gfHwgIWFjbS0+dXNlZCkKIAkJcmV0dXJuOwogCi0JZG93bigmb3Blbl9zZW0pOworCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOwogCWlmICghLS1hY20tPnVzZWQpIHsKIAkJaWYgKGFjbS0+ZGV2KSB7CiAJCQlhY21fc2V0X2NvbnRyb2woYWNtLCBhY20tPmN0cmxvdXQgPSAwKTsKQEAgLTUxOCw3ICs1MTksNyBAQAogCQl9IGVsc2UKIAkJCWFjbV90dHlfdW5yZWdpc3RlcihhY20pOwogCX0KLQl1cCgmb3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgYWNtX3R0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKQEAgLTEwMTMsOSArMTAxNCw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlkb3duKCZvcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmb3Blbl9tdXRleCk7CiAJaWYgKCF1c2JfZ2V0X2ludGZkYXRhKGludGYpKSB7Ci0JCXVwKCZvcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiAJCXJldHVybjsKIAl9CiAJYWNtLT5kZXYgPSBOVUxMOwpAQCAtMTA0NSwxMSArMTA0NiwxMSBAQAogCiAJaWYgKCFhY20tPnVzZWQpIHsKIAkJYWNtX3R0eV91bnJlZ2lzdGVyKGFjbSk7Ci0JCXVwKCZvcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKLQl1cCgmb3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiAKIAlpZiAoYWNtLT50dHkpCiAJCXR0eV9oYW5ndXAoYWNtLT50dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYi1taWRpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxM2YwMDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYworKysgL2Rldi9udWxsCkBAIC0xLDIxNTMgKzAsMCBAQAotLyoKLSAgdXNiLW1pZGkuYyAgLS0gIFVTQi1NSURJIGRyaXZlcgotCi0gIENvcHlyaWdodCAoQykgMjAwMSAKLSAgICAgIE5BR0FOTyBEYWlzdWtlIDxicmVlemUubmFnYW5vQG5pZnR5Lm5lLmpwPgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbjoKLSAgICAtICdVbml2ZXJzYWwgU2VyaWFsIEJ1cyBEZXZpY2UgQ2xhc3MgRGVmaW5pdGlvbiBmb3IgTUlESSBEZXZpY2UnCi0gICAgLSBsaW51eC9kcml2ZXJzL3NvdW5kL2VzMTM3MS5jLCBsaW51eC9kcml2ZXJzL3VzYi9hdWRpby5jCi0gICAgLSBhbHNhL2xvd2xldmVsL3BjaS9jczY0eHguYwotICAgIC0gdW1pZGkuYyBmb3IgTmV0QlNECi0gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NvdW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLQotI2luY2x1ZGUgInVzYi1taWRpLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogTW9yZSB2ZXJib3NlIG9uIHN5c2xvZyAqLwotI3VuZGVmIE1JRElfREVCVUcKLQotI2RlZmluZSBNSURJX0lOX0JVRlNJWiAxMDI0Ci0KLSNkZWZpbmUgSEFWRV9TVVBQT1JUX1VTQl9NSURJX0NMQVNTCi0KLSN1bmRlZiBIQVZFX1NVUFBPUlRfQUxTQQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgc2luZ2xlYnl0ZSA9IDA7Ci1tb2R1bGVfcGFyYW0oc2luZ2xlYnl0ZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Moc2luZ2xlYnl0ZSwiRW5hYmxlIHNlbmRpbmcgTUlESSBtZXNzYWdlcyB3aXRoIHNpbmdsZSBtZXNzYWdlIHBhY2tldCIpOwotCi1zdGF0aWMgaW50IG1heGRldmljZXMgPSA0OwotbW9kdWxlX3BhcmFtKG1heGRldmljZXMsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heGRldmljZXMsIk1heCBudW1iZXIgb2YgYWxsb2NhdGFibGUgTUlESSBkZXZpY2UiKTsKLQotc3RhdGljIGludCB1dmVuZG9yICAgICA9IC0xOwotbW9kdWxlX3BhcmFtKHV2ZW5kb3IsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHV2ZW5kb3IsICJUaGUgVVNCIFZlbmRvciBJRCBvZiBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOwotCi1zdGF0aWMgaW50IHVwcm9kdWN0ICAgID0gLTE7Ci1tb2R1bGVfcGFyYW0odXByb2R1Y3QsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVwcm9kdWN0LCAiVGhlIFVTQiBQcm9kdWN0IElEIG9mIGEgc2VtaS1jb21wbGlhbnQgaW50ZXJmYWNlIik7Ci0KLXN0YXRpYyBpbnQgdWludGVyZmFjZSAgPSAtMTsKLW1vZHVsZV9wYXJhbSh1aW50ZXJmYWNlLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh1aW50ZXJmYWNlLCAiVGhlIEludGVyZmFjZSBudW1iZXIgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKLQotc3RhdGljIGludCB1YWx0ICAgICAgICA9IC0xOwotbW9kdWxlX3BhcmFtKHVhbHQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVhbHQsICJUaGUgb3B0aW9uYWwgYWx0ZXJuYXRpdmUgc2V0dGluZyBvZiBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOwotCi1zdGF0aWMgaW50IHVtaW4gICAgICAgID0gLTE7Ci1tb2R1bGVfcGFyYW0odW1pbiwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0ModW1pbiwgIlRoZSBpbnB1dCBlbmRwb2ludCBvZiBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOwotCi1zdGF0aWMgaW50IHVtb3V0ICAgICAgID0gLTE7Ci1tb2R1bGVfcGFyYW0odW1vdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVtb3V0LCAiVGhlIG91dHB1dCBlbmRwb2ludCBvZiBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOwotCi1zdGF0aWMgaW50IHVjYWJsZSAgICAgID0gLTE7Ci1tb2R1bGVfcGFyYW0odWNhYmxlLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh1Y2FibGUsICJUaGUgY2FibGUgbnVtYmVyIHVzZWQgZm9yIGEgc2VtaS1jb21wbGlhbnQgaW50ZXJmYWNlIik7Ci0KLS8qKiBOb3RlIC0tIHRoZSB1c2Jfc3RyaW5nKCkgcmV0dXJucyBvbmx5IExhdGluLTEgY2hhcmFjdGVycy4KLSAqICh1bmljb2RlIGNoYXJzIDw9IDI1NSkuIFRvIHN1cHBvcnQgSmFwYW5lc2UsIGEgdW5pY29kZTE2TEUtdG8tRVVDIG9yCi0gKiB1bmljb2RlMTZMRS10by1KSVMgcm91dGluZSBpcyBuZWVkZWQgdG8gd3JhcCBhcm91bmQgdXNiX2dldF9zdHJpbmcoKS4KLSAqKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCB1bGFuZ2lkICAgICAgPSAweDA0MDk7IC8qKiAweDA0MTEgZm9yIEphcGFuZXNlICoqLwotbW9kdWxlX3BhcmFtKHVsYW5naWQsIHVzaG9ydCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHVsYW5naWQsICJUaGUgb3B0aW9uYWwgcHJlZmVycmVkIFVTQiBMYW5ndWFnZSBJRCBmb3IgYWxsIGRldmljZXMiKTsKLQotTU9EVUxFX0FVVEhPUigiTkFHQU5PIERhaXN1a2UgPGJyZWV6ZS5uYWdhbm9AbmlmdHkubmUuanA+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlVTQi1NSURJIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKiBNSURJU3RyZWFtaW5nIENsYXNzLVNwZWNpZmljIEludGVyZmFjZSBEZXNjcmlwdG9yIFN1YnR5cGVzICoqLwotCi0jZGVmaW5lIE1TX0RFU0NSSVBUT1JfVU5ERUZJTkVECTAKLSNkZWZpbmUgTVNfSEVBREVSCQkxCi0jZGVmaW5lIE1JRElfSU5fSkFDSwkJMgotI2RlZmluZSBNSURJX09VVF9KQUNLCQkzCi0vKiBTcGVjIHJlYWRzOiBFTEVNRU5UICovCi0jZGVmaW5lIEVMRU1FTlRfREVTQ1JJUFRPUiAgIAk0Ci0KLSNkZWZpbmUgTVNfSEVBREVSX0xFTkdUSAk3Ci0KLS8qKiBNSURJU3RyZWFtaW5nIENsYXNzLVNwZWNpZmljIEVuZHBvaW50IERlc2NyaXB0b3IgU3VidHlwZXMgKiovCi0KLSNkZWZpbmUgREVTQ1JJUFRPUl9VTkRFRklORUQJMAotLyogU3BlYyByZWFkczogTVNfR0VORVJBTCAqLwotI2RlZmluZSBNU19HRU5FUkFMX0VORFBPSU5UCTEKLQotLyoqIE1JRElTdHJlYW1pbmcgTUlESSBJTiBhbmQgT1VUIEphY2sgVHlwZXMgKiovCi0KLSNkZWZpbmUgSkFDS19UWVBFX1VOREVGSU5FRAkwCi0vKiBTcGVjIHJlYWRzOiBFTUJFRERFRCAqLwotI2RlZmluZSBFTUJFRERFRF9KQUNLCQkxCi0vKiBTcGVjIHJlYWRzOiBFWFRFUk5BTCAqLwotI2RlZmluZSBFWFRFUk5BTF9KQUNLCQkyCi0KLQotLyogc3RydWN0dXJlIHN1bW1hcnkKLSAgCi0gICAgICB1c2JfbWlkaV9zdGF0ZSAgICAgdXNiX2RldmljZQotICAgICAgIHwgICAgICAgICB8Ci0gICAgICAqfCAgICAgICAgKnwgICAgICAgcGVyIGVwCi0gICAgIGluX2VwICAgICBvdXRfZXAKLSAgICAgICB8ICAgICAgICAgfAotICAgICAgKnwgICAgICAgICp8ICAgICAgIHBlciBjYWJsZQotICAgICAgbWluICAgICAgIG1vdXQKLSAgICAgICB8ICAgICAgICAgfCAgICAgICAoY2FibGUgdG8gZGV2aWNlIHBhaXJpbmcgbWFnaWMpCi0gICAgICAgfCAgICAgICAgIHwKLSAgICAgICB1c2JfbWlkaV9kZXYgICAgICBkZXZfaWQgKG1ham9yLG1pbm9yKSA9PSBmaWxlLT5wcml2YXRlX2RhdGEKLQotKi8KLQotLyogdXNiX21pZGlfc3RhdGU6IGNvcnJlc3BvbmRzIHRvIGEgVVNCLU1JREkgbW9kdWxlICovCi1zdHJ1Y3QgdXNiX21pZGlfc3RhdGUgewotCXN0cnVjdCBsaXN0X2hlYWQgICBtaWRpZGV2OwotCQotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7Ci0JCi0Jc3RydWN0IGxpc3RfaGVhZCAgIG1pZGlEZXZMaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgICBpbkVuZHBvaW50TGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgb3V0RW5kcG9pbnRMaXN0OwotCQotCXNwaW5sb2NrX3QgICAgICAgICBsb2NrOwotCQotCXVuc2lnbmVkIGludCAgICAgICBjb3VudDsgLyogdXNhZ2UgY291bnRlciAqLwotfTsKLQotLyogbWlkaV9vdXRfZW5kcG9pbnQ6IGNvcnJlc3BvbmRzIHRvIGFuIG91dHB1dCBlbmRwb2ludCAqLwotc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICBsaXN0OwotCQotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7Ci0JaW50ICAgICAgICAgICAgICAgIGVuZHBvaW50OwotCXNwaW5sb2NrX3QgICAgICAgICBsb2NrOwotCXdhaXRfcXVldWVfaGVhZF90ICB3YWl0OwotCQotCXVuc2lnbmVkIGNoYXIgICAgICpidWY7Ci0JaW50ICAgICAgICAgICAgICAgIGJ1ZldyUHRyOwotCWludCAgICAgICAgICAgICAgICBidWZTaXplOwotCQotCXN0cnVjdCB1cmIgICAgICAgKnVyYjsKLX07Ci0KLS8qIG1pZGlfaW5fZW5kcG9pbnQ6IGNvcnJlc3BvbmRzIHRvIGFuIGlucHV0IGVuZHBvaW50ICovCi1zdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgIGxpc3Q7Ci0KLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwotCWludCAgICAgICAgICAgICAgICBlbmRwb2ludDsKLQlzcGlubG9ja190ICAgICAgICAgbG9jazsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgd2FpdDsKLQotCXN0cnVjdCB1c2JfbWlkaWRldiAqY2FibGVzWzE2XTsJLy8gY2FibGVzIG9wZW4gZm9yIHJlYWQKLQlpbnQgICAgICAgICAgICAgICAgIHJlYWRlcnM7CS8vIG51bWJlciBvZiBjYWJsZXMgb3BlbiBmb3IgcmVhZAotCi0Jc3RydWN0IHVyYiAgICAgICAgKnVyYjsKLQl1bnNpZ25lZCBjaGFyICAgICAqcmVjdkJ1ZjsKLQlpbnQgICAgICAgICAgICAgICAgcmVjdkJ1ZlNpemU7Ci0JaW50ICAgICAgICAgICAgICAgIHVyYlN1Ym1pdHRlZDsJLy9GSVhNRTogPT0gcmVhZGVycyA+IDAKLX07Ci0KLS8qIHVzYl9taWRpZGV2OiBjb3JyZXNwb25kcyB0byBhIGxvZ2ljYWwgZGV2aWNlICovCi1zdHJ1Y3QgdXNiX21pZGlkZXYgewotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgbGlzdDsKLQotCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqbWlkaTsKLQlpbnQgICAgICAgICAgICAgICAgICAgIGRldl9taWRpOwotCW1vZGVfdCAgICAgICAgICAgICAgICAgb3Blbl9tb2RlOwotCi0Jc3RydWN0IHsKLQkJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKmVwOwotCQlpbnQgICAgICAgICAgICAgIGNhYmxlSWQ7Ci0JCQotLy8gYXMgd2UgYXJlIHB1c2hpbmcgZGF0YSBmcm9tIHVzYl9idWxrX3JlYWQgdG8gdXNiX21pZGlfcmVhZCwKLS8vIHdlIG5lZWQgYSBsYXJnZXIsIGN5Y2xpYyBidWZmZXIgaGVyZS4KLQkJdW5zaWduZWQgY2hhciAgICBidWZbTUlESV9JTl9CVUZTSVpdOwotCQlpbnQgICAgICAgICAgICAgIGJ1ZlJkUHRyOwotCQlpbnQgICAgICAgICAgICAgIGJ1ZldyUHRyOwotCQlpbnQgICAgICAgICAgICAgIGJ1ZlJlbWFpbnM7Ci0JfSBtaW47Ci0KLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKmVwOwotCQlpbnQgICAgICAgICAgICAgIGNhYmxlSWQ7Ci0JCQotCQl1bnNpZ25lZCBjaGFyICAgIGJ1ZlszXTsKLQkJaW50ICAgICAgICAgICAgICBidWZQdHI7Ci0JCWludCAgICAgICAgICAgICAgYnVmUmVtYWluczsKLQkJCi0JCWludCAgICAgICAgICAgICAgaXNJbkV4Y2x1c2l2ZTsKLQkJdW5zaWduZWQgY2hhciAgICBsYXN0RXZlbnQ7Ci0JfSBtb3V0OwotCi0JaW50IHNpbmdsZWJ5dGU7Ci19OwotCi0vKiogTWFwIHRoZSBoaWdoIG55YmJsZSBvZiBNSURJIHZvaWNlIG1lc3NhZ2VzIHRvIG51bWJlciBvZiBNZXNzYWdlIGJ5dGVzLgotICogSGlnaCBueWJsZSByYW5nZXMgZnJvbSAweDggdG8gMHhlCi0gKi8KLQotc3RhdGljIGludCByZW1haW5zXzgwZTBbXSA9IHsKLQkzLAkvKiogMHg4WCBOb3RlIE9mZiAqKi8KLQkzLAkvKiogMHg5WCBOb3RlIE9uICoqLwotCTMsCS8qKiAweEFYIFBvbHkta2V5IHByZXNzdXJlICoqLwotCTMsCS8qKiAweEJYIENvbnRyb2wgQ2hhbmdlICoqLwotCTIsCS8qKiAweENYIFByb2dyYW0gQ2hhbmdlICoqLwotCTIsCS8qKiAweERYIENoYW5uZWwgcHJlc3N1cmUgKiovCi0JMyAJLyoqIDB4RVggUGl0Y2hCZW5kIENoYW5nZSAqKi8KLX07Ci0KLS8qKiBNYXAgdGhlIG1lc3NhZ2VzIHRvIGEgbnVtYmVyIG9mIE1lc3NhZ2UgYnl0ZXMuCi0gKgotICoqLwotc3RhdGljIGludCByZW1haW5zX2YwZjZbXSA9IHsKLQkwLAkvKiogMHhGMCAqKi8KLQkyLAkvKiogMFhGMSAqKi8KLQkzLAkvKiogMFhGMiAqKi8KLQkyLAkvKiogMFhGMyAqKi8KLQkyLAkvKiogMFhGNCAoVW5kZWZpbmVkIGJ5IE1JREkgU3BlYywgYW5kIHN1YmplY3QgdG8gY2hhbmdlKSAqKi8KLQkyLAkvKiogMFhGNSAoVW5kZWZpbmVkIGJ5IE1JREkgU3BlYywgYW5kIHN1YmplY3QgdG8gY2hhbmdlKSAqKi8KLQkxCS8qKiAwWEY2ICoqLwotfTsKLQotLyoqIE1hcCB0aGUgbWVzc2FnZXMgdG8gYSBDSU4gKENvZGUgSW5kZXggTnVtYmVyKS4KLSAqCi0gKiovCi1zdGF0aWMgaW50IGNpbl9mMGZmW10gPSB7Ci0JNCwJLyoqIDB4RjAgU3lzdGVtIEV4Y2x1c2l2ZSBNZXNzYWdlIFN0YXJ0IChzcGVjaWFsIGNhc2VzIG1heSBiZSA2IG9yIDcpICovCi0JMiwJLyoqIDB4RjEgKiovCi0JMywJLyoqIDB4RjIgKiovCi0JMiwJLyoqIDB4RjMgKiovCi0JMiwJLyoqIDB4RjQgKiovCi0JMiwJLyoqIDB4RjUgKiovCi0JNSwJLyoqIDB4RjYgKiovCi0JNSwJLyoqIDB4RjcgRW5kIG9mIFN5c3RlbSBFeGNsdXNpdmUgTWVzc2FnZSAoTWF5IGJlIDYgb3IgNykgKiovCi0JNSwJLyoqIDB4RjggKiovCi0JNSwJLyoqIDB4RjkgKiovCi0JNSwJLyoqIDB4RkEgKiovCi0JNSwJLyoqIDB4RkIgKiovCi0JNSwJLyoqIDB4RkMgKiovCi0JNSwJLyoqIDB4RkQgKiovCi0JNSwJLyoqIDB4RkUgKiovCi0JNQkvKiogMHhGRiAqKi8KLX07Ci0KLS8qKiBNYXAgTUlESVN0cmVhbWluZyBFdmVudCBwYWNrZXQgQ29kZSBJbmRleCBOdW1iZXIgKGxvdyBueWJibGUgb2YgYnl0ZSAwKQotICogdG8gdGhlIG51bWJlciBvZiBieXRlcyBvZiB2YWxpZCBNSURJIGRhdGEuCi0gKgotICogQ0lOIG9mIDAgYW5kIDEgYXJlIE5PVCBVU0VEIGluIE1JRElTdHJlYW1pbmcgMS4wLgotICoKLSAqKi8KLXN0YXRpYyBpbnQgY2luX3RvX2xlbltdID0gewotCTAsIDAsIDIsIDMsCi0JMywgMSwgMiwgMywKLQkzLCAzLCAzLCAzLAotCTIsIDIsIDMsIDEKLX07Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBtaWRpZGV2cyA9IExJU1RfSEVBRF9JTklUKG1pZGlkZXZzKTsKLQotc3RhdGljIERFQ0xBUkVfTVVURVgob3Blbl9zZW0pOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG9wZW5fd2FpdCk7Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdm9pZCB1c2Jfd3JpdGVfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKmVwID0gKHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqKXVyYi0+Y29udGV4dDsKLQotCWlmICggd2FpdHF1ZXVlX2FjdGl2ZSggJmVwLT53YWl0ICkgKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoICZlcC0+d2FpdCApOwotfQotCi0KLXN0YXRpYyBpbnQgdXNiX3dyaXRlKCBzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKmVwLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4gKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICpkOwotCWludCBwaXBlOwotCWludCByZXQgPSAwOwotCWludCBzdGF0dXM7Ci0JaW50IG1heHJldHJ5ID0gNTA7Ci0JCi0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCxjdXJyZW50KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlcC0+d2FpdCk7Ci0KLQlkID0gZXAtPnVzYmRldjsKLQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGQsIGVwLT5lbmRwb2ludCk7Ci0JdXNiX2ZpbGxfYnVsa191cmIoIGVwLT51cmIsIGQsIHBpcGUsICh1bnNpZ25lZCBjaGFyKilidWYsIGxlbiwKLQkJICAgICAgIHVzYl93cml0ZV9jYWxsYmFjaywgZXAgKTsKLQotCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGVwLT51cmIsIEdGUF9LRVJORUwpOwotICAgIAotCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBDYW5ub3Qgc3VibWl0IHVyYiAoJWQpXG4iLHN0YXR1cyk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JYWRkX3dhaXRfcXVldWUoICZlcC0+d2FpdCwgJndhaXQgKTsKLQlzZXRfY3VycmVudF9zdGF0ZSggVEFTS19JTlRFUlJVUFRJQkxFICk7Ci0KLQl3aGlsZSggZXAtPnVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUyApIHsKLQkJaWYgKCBtYXhyZXRyeS0tIDwgMCApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogdXNiX2J1bGtfbXNnIHRpbWVkIG91dFxuIik7Ci0JCQlyZXQgPSAtRVRJTUU7Ci0JCQlicmVhazsKLQkJfQotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoICZlcC0+d2FpdCwgMTAgKTsKLQl9Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoIFRBU0tfUlVOTklORyApOwotCXJlbW92ZV93YWl0X3F1ZXVlKCAmZXAtPndhaXQsICZ3YWl0ICk7Ci0KLWVycm9yOgotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoqIENvcHkgZGF0YSBmcm9tIFVSQiB0byBJbiBlbmRwb2ludCBidWYuCi0gKiBEaXNjYXJkIGlmIENJTiA9PSAwIG9yIENJTiA9IDEuCi0gKgotICoKLSAqKi8KLQotc3RhdGljIHZvaWQgdXNiX2J1bGtfcmVhZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICplcCA9IChzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqKSh1cmItPmNvbnRleHQpOwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQlpbnQgaSwgaiwgd2FrZTsKLQotCWlmICggIWVwLT51cmJTdWJtaXR0ZWQgKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoICh1cmItPnN0YXR1cyA9PSAwKSAmJiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgKSB7Ci0JCXdha2UgPSAwOwotCQlzcGluX2xvY2soICZlcC0+bG9jayApOwotCi0JCWZvcihqID0gMDsgaiA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaiArPSA0KSB7Ci0JCQlpbnQgY2luID0gKGRhdGFbal0+PjApJjB4ZjsKLQkJCWludCBjYWIgPSAoZGF0YVtqXT4+NCkmMHhmOwotCQkJc3RydWN0IHVzYl9taWRpZGV2ICpjYWJsZSA9IGVwLT5jYWJsZXNbY2FiXTsKLQkJCWlmICggY2FibGUgKSB7Ci0JCQkJaW50IGxlbiA9IGNpbl90b19sZW5bY2luXTsgLyoqIGxlbmd0aCBvZiBNSURJIGRhdGEgKiovCi0JCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCQkJCWNhYmxlLT5taW4uYnVmW2NhYmxlLT5taW4uYnVmV3JQdHJdID0gZGF0YVsxK2kral07Ci0JCQkJCWNhYmxlLT5taW4uYnVmV3JQdHIgPSAoY2FibGUtPm1pbi5idWZXclB0cisxKSVNSURJX0lOX0JVRlNJWjsKLQkJCQkJaWYgKGNhYmxlLT5taW4uYnVmUmVtYWlucyA8IE1JRElfSU5fQlVGU0laKQotCQkJCQkJY2FibGUtPm1pbi5idWZSZW1haW5zICs9IDE7Ci0JCQkJCWVsc2UgLyoqIG5lZWQgdG8gZHJvcCBkYXRhICoqLwotCQkJCQkJY2FibGUtPm1pbi5idWZSZFB0ciArPSAoY2FibGUtPm1pbi5idWZSZFB0cisxKSVNSURJX0lOX0JVRlNJWjsKLQkJCQkJd2FrZSA9IDE7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJc3Bpbl91bmxvY2sgKCAmZXAtPmxvY2sgKTsKLQkJaWYgKCB3YWtlICkgewotCQkJd2FrZV91cCggJmVwLT53YWl0ICk7Ci0JCX0KLQl9Ci0KLQkvKiB1cmItPmRldiBtdXN0IGJlIHJlaW5pdGlhbGl6ZWQgb24gMi40Lngga2VybmVscyAqLwotCXVyYi0+ZGV2ID0gZXAtPnVzYmRldjsKLQotCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0JdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLX0KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHdpdGggc3Bpbl9sb2NrICovCi0KLS8qKiBXcmFwcGVyIGFyb3VuZCB1c2Jfd3JpdGUoKS4KLSAqICBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgd2l0aCBzcGluX2xvY2sgaGVsZCBvbiBlcC4KLSAqICBDYWxsZWQgYnkgbWlkaVdyaXRlKCksIHB1dE9uZU1pZGlFdmVudCgpLCBhbmQgIHVzYl9taWRpX3dyaXRlKCk7Ci0gKiovCi1zdGF0aWMgaW50IGZsdXNoX21pZGlfYnVmZmVyKCBzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKmVwICkKLXsKLQlpbnQgcmV0PTA7Ci0KLQlpZiAoIGVwLT5idWZXclB0ciA+IDAgKSB7Ci0JCXJldCA9IHVzYl93cml0ZSggZXAsIGVwLT5idWYsIGVwLT5idWZXclB0ciApOwotCQllcC0+YnVmV3JQdHIgPSAwOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLS8qKiBHaXZlbiBhIE1JREkgRXZlbnQsIGRldGVybWluZSBzaXplIG9mIGRhdGEgdG8gYmUgYXR0YWNoZWQgdG8gCi0gKiBVU0ItTUlESSBwYWNrZXQuCi0gKiBSZXR1cm5zIDEsIDIgb3IgMy4KLSAqIENhbGxlZCBieSBtaWRpV3JpdGUoKTsKLSAqIFVzZXMgcmVtYWluc184MGUwIGFuZCByZW1haW5zX2YwZjY7Ci0gKiovCi1zdGF0aWMgaW50IGdldF9yZW1haW5zKGludCBldmVudCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCBldmVudCAgPCAweDgwICkgewotCQlyZXQgPSAxOwotCX0gZWxzZSBpZiAoIGV2ZW50IDwgMHhmMCApIHsKLQkJcmV0ID0gcmVtYWluc184MGUwWygoZXZlbnQtMHg4MCk+PjQpJjB4MGZdOwotCX0gZWxzZSBpZiAoIGV2ZW50IDwgMHhmNyApIHsKLQkJcmV0ID0gcmVtYWluc19mMGY2W2V2ZW50LTB4ZjBdOwotCX0gZWxzZSB7Ci0JCXJldCA9IDE7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqIEdpdmVuIHRoZSBvdXRwdXQgTUlESSBkYXRhIGluIHRoZSBvdXRwdXQgYnVmZmVyLCBjb21wdXRlcyBhIHJlYXNvbmFibGUgCi0gKiBDSU4uCi0gKiBDYWxsZWQgYnkgcHV0T25lTWlkaUV2ZW50KCkuCi0gKiovCi1zdGF0aWMgaW50IGdldF9DSU4oIHN0cnVjdCB1c2JfbWlkaWRldiAqbSApCi17Ci0JaW50IGNpbjsKLQotCWlmICggbS0+bW91dC5idWZbMF0gPT0gMHhmNyApIHsKLQkJY2luID0gNTsKLQl9Ci0JZWxzZSBpZiAoIG0tPm1vdXQuYnVmWzFdID09IDB4ZjcgKSB7Ci0JCWNpbiA9IDY7Ci0JfQotCWVsc2UgaWYgKCBtLT5tb3V0LmJ1ZlsyXSA9PSAweGY3ICkgewotCQljaW4gPSA3OwotCX0KLQllbHNlIHsKLQkJaWYgKCBtLT5tb3V0LmlzSW5FeGNsdXNpdmUgPT0gMSApIHsKLQkJCWNpbiA9IDQ7Ci0JCX0gZWxzZSBpZiAoIG0tPm1vdXQuYnVmWzBdIDwgMHg4MCApIHsKLQkJCS8qKiBPbmUgYnl0ZSB0aGF0IHdlIGtub3cgbm90aGluZyBhYm91dC4gKiovCi0JCQljaW4gPSAweEY7IAotCQl9IGVsc2UgaWYgKCBtLT5tb3V0LmJ1ZlswXSA8IDB4ZjAgKSB7Ci0JCQkvKiogTUlESSBWb2ljZSBtZXNzYWdlcyAweDhYIHRvIDB4RVggbWFwIHRvIGNpbiAweDggdG8gMHhFLiAqKi8KLQkJCWNpbiA9IChtLT5tb3V0LmJ1ZlswXT4+NCkmMHgwZjsgCi0JCX0KLQkJZWxzZSB7Ci0JCQkvKiogU3BlY2lhbCBsb29rdXAgdGFibGUgZXhpc3RzIGZvciByZWFsLXRpbWUgZXZlbnRzLiAqKi8KLQkJCWNpbiA9IGNpbl9mMGZmW20tPm1vdXQuYnVmWzBdLTB4ZjBdOwotCQl9Ci0JfQotCi0JcmV0dXJuIGNpbjsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLQotCi0vKiogTW92ZSBkYXRhIHRvIFVTQiBlbmRwb2ludCBidWZmZXIuCi0gKgotICoqLwotc3RhdGljIGludCBwdXRfb25lX21pZGlfZXZlbnQoc3RydWN0IHVzYl9taWRpZGV2ICptKQotewotCWludCBjaW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKmVwID0gbS0+bW91dC5lcDsKLQlpbnQgcmV0PTA7Ci0KLQljaW4gPSBnZXRfQ0lOKCBtICk7Ci0JaWYgKCBjaW4gPiAweDBmIHx8IGNpbiA8IDAgKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCAmZXAtPmxvY2ssIGZsYWdzICk7Ci0JZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSAobS0+bW91dC5jYWJsZUlkPDw0KSB8IGNpbjsKLQllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IG0tPm1vdXQuYnVmWzBdOwotCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gbS0+bW91dC5idWZbMV07Ci0JZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSBtLT5tb3V0LmJ1ZlsyXTsKLQlpZiAoIGVwLT5idWZXclB0ciA+PSBlcC0+YnVmU2l6ZSApIHsKLQkJcmV0ID0gZmx1c2hfbWlkaV9idWZmZXIoIGVwICk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZlcC0+bG9jaywgZmxhZ3MpOwotCi0JbS0+bW91dC5idWZbMF0gPSBtLT5tb3V0LmJ1ZlsxXSA9IG0tPm1vdXQuYnVmWzJdID0gMDsKLQltLT5tb3V0LmJ1ZlB0ciA9IDA7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiogV3JpdGUgdGhlIE1JREkgbWVzc2FnZSB2IG9uIHRoZSBtaWRpIGRldmljZS4KLSAqICBDYWxsZWQgYnkgdXNiX21pZGlfd3JpdGUoKTsKLSAqICBSZXNwb25zaWJsZSBmb3IgcGFja2FnaW5nIGEgTUlESSBkYXRhIHN0cmVhbSBpbnRvIFVTQi1NSURJIHBhY2tldHMuCi0gKiovCi0KLXN0YXRpYyBpbnQgbWlkaV93cml0ZSggc3RydWN0IHVzYl9taWRpZGV2ICptLCBpbnQgdiApCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKmVwID0gbS0+bW91dC5lcDsKLQlpbnQgcmV0PTA7Ci0JdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpdjsKLQl1bnNpZ25lZCBjaGFyIHN5c3J0X2J1Zls0XTsKLQotCWlmICggbS0+c2luZ2xlYnl0ZSAhPSAwICkgewotCQkvKiogU2ltcGxlIGNvZGUgdG8gaGFuZGxlIHRoZSBzaW5nbGUtYnl0ZSBVU0ItTUlESSBwcm90b2NvbC4gKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKLQkJaWYgKCBlcC0+YnVmV3JQdHIrNCA+IGVwLT5idWZTaXplICkgewotCQkJcmV0ID0gZmx1c2hfbWlkaV9idWZmZXIoIGVwICk7Ci0JCQlpZiAoICFyZXQgKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmVwLT5sb2NrLCBmbGFncyApOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCX0KLQkJZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSAobS0+bW91dC5jYWJsZUlkPDw0KSB8ICAweDBmOyAvKiBzaW5nbGUgYnl0ZSAqLwotCQllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IGM7Ci0JCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gMDsKLQkJZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSAwOwotCQlpZiAoIGVwLT5idWZXclB0ciA+PSBlcC0+YnVmU2l6ZSApIHsKLQkJCXJldCA9IGZsdXNoX21pZGlfYnVmZmVyKCBlcCApOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQkvKiogTm9ybWFsIFVTQi1NSURJIHByb3RvY29sIGJlZ2lucyBoZXJlLiAqLwotCi0JaWYgKCBjID4gMHhmNyApIHsJLyogc3lzdGVtOiBSZWFsdGltZSBtZXNzYWdlcyAqLwotCQkvKiogUmVhbHRpbWUgbWVzc2FnZXMgYXJlIHdyaXR0ZW4gSU1NRURJQVRFTFkuICovCi0JCXN5c3J0X2J1ZlswXSA9IChtLT5tb3V0LmNhYmxlSWQ8PDQpIHwgMHgwZjsKLQkJc3lzcnRfYnVmWzFdID0gYzsKLQkJc3lzcnRfYnVmWzJdID0gMDsKLQkJc3lzcnRfYnVmWzNdID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKLQkJcmV0ID0gdXNiX3dyaXRlKCBlcCwgc3lzcnRfYnVmLCA0ICk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKLQkJLyogbS0+bW91dC5sYXN0RXZlbnQgPSAwOyAqLwotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKCBjID49IDB4ODAgKSB7Ci0JCWlmICggYyA8IDB4ZjAgKSB7Ci0JCQltLT5tb3V0Lmxhc3RFdmVudCA9IGM7Ci0JCQltLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAwOwotCQkJbS0+bW91dC5idWZSZW1haW5zID0gZ2V0X3JlbWFpbnMoYyk7Ci0JCX0gZWxzZSBpZiAoIGMgPT0gMHhmMCApIHsKLQkJCS8qIG0tPm1vdXQubGFzdEV2ZW50ID0gMDsgKi8KLQkJCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDE7Ci0JCQltLT5tb3V0LmJ1ZlJlbWFpbnMgPSBnZXRfcmVtYWlucyhjKTsKLQkJfSBlbHNlIGlmICggYyA9PSAweGY3ICYmIG0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9PSAxICkgewotCQkJLyogbS0+bW91dC5sYXN0RXZlbnQgPSAwOyAqLwotCQkJbS0+bW91dC5pc0luRXhjbHVzaXZlID0gMDsKLQkJCW0tPm1vdXQuYnVmUmVtYWlucyA9IDE7Ci0JCX0gZWxzZSBpZiAoIGMgPiAweGYwICkgewotCQkJLyogbS0+bW91dC5sYXN0RXZlbnQgPSAwOyAqLwotCQkJbS0+bW91dC5pc0luRXhjbHVzaXZlID0gMDsKLQkJCW0tPm1vdXQuYnVmUmVtYWlucyA9IGdldF9yZW1haW5zKGMpOwotCQl9Ci0gICAgCi0JfSBlbHNlIGlmICggbS0+bW91dC5idWZSZW1haW5zID09IDAgJiYgbS0+bW91dC5pc0luRXhjbHVzaXZlID09IDAgKSB7Ci0JCWlmICggbS0+bW91dC5sYXN0RXZlbnQgPT0gMCApIHsKLQkJCXJldHVybiAwOyAvKiBkaXNjYXJkLCB3YWl0aW5nIGZvciB0aGUgZmlyc3QgZXZlbnQgKi8KLQkJfQotCQkvKiogdHJhY2sgc3RhdHVzICoqLwotCQltLT5tb3V0LmJ1ZlswXSA9IG0tPm1vdXQubGFzdEV2ZW50OwotCQltLT5tb3V0LmJ1ZlB0ciA9IDE7Ci0JCW0tPm1vdXQuYnVmUmVtYWlucyA9IGdldF9yZW1haW5zKG0tPm1vdXQubGFzdEV2ZW50KS0xOwotCX0KLSAgCi0JbS0+bW91dC5idWZbbS0+bW91dC5idWZQdHIrK10gPSBjOwotCW0tPm1vdXQuYnVmUmVtYWlucy0tOwotCWlmICggbS0+bW91dC5idWZSZW1haW5zID09IDAgfHwgbS0+bW91dC5idWZQdHIgPj0gMykgewotCQlyZXQgPSBwdXRfb25lX21pZGlfZXZlbnQobSk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKiBCYXNpYyBvcGVyYXRpb24gb24gL2Rldi9taWRpWFggYXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMuCi0gKgotICogIEJhc2ljIGNvbnRyYWN0OiBVc2VkIHRvIGNoYW5nZSB0aGUgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIGEgZmlsZS4KLSAqICBPbiBzdWNjZXNzLCB0aGUgbm9uLW5lZ2F0aXZlIHBvc2l0aW9uIGlzIHJlcG9ydGVkLgotICogIE9uIGZhaWx1cmUsIHRoZSBuZWdhdGl2ZSBvZiBhbiBlcnJvciBjb2RlIGlzIHJlcG9ydGVkLgotICoKLSAqICBCZWNhdXNlIGEgTUlESVN0cmVhbSBpcyBub3QgYSBmaWxlLCBhbGwgc2VlayBvcGVyYXRpb25zIGFyZSBkb29tZWQgdG8gZmFpbC4KLSAqCi0gKiovCi1zdGF0aWMgbG9mZl90IHVzYl9taWRpX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKLXsKLQkvKiogVGVsbCB1c2VyIHlvdSBjYW5ub3Qgc2VlayBvbiBhIFBJUEUtbGlrZSBkZXZpY2UuICoqLwotCXJldHVybiAtRVNQSVBFOwotfQotCi0KLS8qKiBCYXNpYyBvcGVyYXRpb24gb24gL2Rldi9taWRpWFggYXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMuCi0gKgotICogQmFzaWMgY29udHJhY3Q6IEJsb2NrIHVudGlsIGNvdW50IGJ5dGVzIGhhdmUgYmVlbiByZWFkIG9yIGFuIGVycm9yIG9jY3Vycy4KLSAqCi0gKiovCi0KLXN0YXRpYyBzc2l6ZV90IHVzYl9taWRpX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCB1c2JfbWlkaWRldiAqbSA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKmVwID0gbS0+bWluLmVwOwotCXNzaXplX3QgcmV0OwotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JaWYgKCAhYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGNvdW50KSApIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICggY291bnQgPT0gMCApIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JYWRkX3dhaXRfcXVldWUoICZlcC0+d2FpdCwgJndhaXQgKTsKLQlyZXQgPSAwOwotCXdoaWxlKCBjb3VudCA+IDAgKSB7Ci0JCWludCBjbnQ7Ci0JCWludCBkID0gKGludCljb3VudDsKLQotCQljbnQgPSBtLT5taW4uYnVmUmVtYWluczsKLQkJaWYgKCBjbnQgPiBkICkgewotCQkJY250ID0gZDsKLQkJfQotCi0JCWlmICggY250IDw9IDAgKSB7Ci0JCQlpZiAoIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICkgewotCQkJCWlmICghcmV0KSAKLQkJCQkJcmV0ID0gLUVBR0FJTjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNjaGVkdWxlKCk7Ci0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCQlpZighcmV0KQotCQkJCQlyZXQ9LUVSRVNUQVJUU1lTOwotCQkJCWJyZWFrOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQotCQl7Ci0JCQlpbnQgaTsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IC8qIHVzZWQgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvIHRoZSBlbmRwb2ludCAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQkJCWlmICggY29weV90b191c2VyKCBidWZmZXIraSwgbS0+bWluLmJ1ZittLT5taW4uYnVmUmRQdHIsIDEgKSApIHsKLQkJCQkJaWYgKCAhcmV0ICkKLQkJCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQltLT5taW4uYnVmUmRQdHIgPSAobS0+bWluLmJ1ZlJkUHRyKzEpJU1JRElfSU5fQlVGU0laOwotCQkJCW0tPm1pbi5idWZSZW1haW5zIC09IDE7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZXAtPmxvY2ssIGZsYWdzICk7Ci0JCX0KLQotCQljb3VudC09Y250OwotCQlidWZmZXIrPWNudDsKLQkJcmV0Kz1jbnQ7Ci0KLQkJYnJlYWs7Ci0JfQotCi0JcmVtb3ZlX3dhaXRfcXVldWUoICZlcC0+d2FpdCwgJndhaXQgKTsKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0vKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgotICoKLSAqICBCYXNpYyBDb250cmFjdDogVGFrZSBNSURJIGRhdGEgYnl0ZS1ieS1ieXRlIGFuZCBwYXNzIGl0IHRvCi0gKiAgd3JpdGVNaWRpKCkgd2hpY2ggcGFja2FnZXMgTUlESSBkYXRhIGludG8gVVNCLU1JREkgc3RyZWFtLgotICogIFRoZW4gZmx1c2hNaWRpRGF0YSgpIGlzIGNhbGxlZCB0byBlbnN1cmUgYWxsIGJ5dGVzIGhhdmUgYmVlbiB3cml0dGVuCi0gKiAgaW4gYSB0aW1lbHkgZmFzaGlvbi4KLSAqCi0gKiovCi0KLXN0YXRpYyBzc2l6ZV90IHVzYl9taWRpX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgdXNiX21pZGlkZXYgKm0gPSAoc3RydWN0IHVzYl9taWRpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXNzaXplX3QgcmV0OwotCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOwotCi0JaWYgKCAhYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGNvdW50KSApIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmICggY291bnQgPT0gMCApIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0ID0gMDsKLQl3aGlsZSggY291bnQgPiAwICkgewotCQl1bnNpZ25lZCBjaGFyIGM7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCh1bnNpZ25lZCBjaGFyICopJmMsIGJ1ZmZlciwgMSkpIHsKLQkJCWlmICggcmV0ID09IDAgKQotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCQlpZiggbWlkaV93cml0ZShtLCAoaW50KWMpICkgewotCQkJaWYgKCByZXQgPT0gMCApCi0JCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0JCWNvdW50LS07Ci0JCWJ1ZmZlcisrOwotCQlyZXQrKzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSggJm0tPm1vdXQuZXAtPmxvY2ssIGZsYWdzICk7Ci0JaWYgKCBmbHVzaF9taWRpX2J1ZmZlcihtLT5tb3V0LmVwKSA8IDAgKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZtLT5tb3V0LmVwLT5sb2NrLCBmbGFncyApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqIEJhc2ljIG9wZXJhdGlvbiBvbiAvZGV2L21pZGlYWCBhcyByZWdpc3RlcmVkIHRocm91Z2ggc3RydWN0IGZpbGVfb3BlcmF0aW9ucy4KLSAqCi0gKiBCYXNpYyBjb250cmFjdDogIFdhaXQgKHNwaW4pIHVudGlsIHJlYWR5IHRvIHJlYWQgb3Igd3JpdGUgb24gdGhlIGZpbGUuCi0gKgotICoqLwotc3RhdGljIHVuc2lnbmVkIGludCB1c2JfbWlkaV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IHVzYl9taWRpZGV2ICptID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqaWVwID0gbS0+bWluLmVwOwotCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqb2VwID0gbS0+bW91dC5lcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBtYXNrID0gMDsKLSAgCi0JaWYgKCBmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEICkgewotCQlwb2xsX3dhaXQoIGZpbGUsICZpZXAtPndhaXQsIHdhaXQgKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoICZpZXAtPmxvY2ssIGZsYWdzICk7Ci0JCWlmICggbS0+bWluLmJ1ZlJlbWFpbnMgPiAwICkKLQkJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmllcC0+bG9jaywgZmxhZ3MgKTsKLQl9Ci0KLQlpZiAoIGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICkgewotCQlwb2xsX3dhaXQoIGZpbGUsICZvZXAtPndhaXQsIHdhaXQgKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoICZvZXAtPmxvY2ssIGZsYWdzICk7Ci0JCWlmICggb2VwLT5idWZXclB0ciA8IG9lcC0+YnVmU2l6ZSApCi0JCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmb2VwLT5sb2NrLCBmbGFncyApOwotCX0KLQotCXJldHVybiBtYXNrOwotfQotCi0KLS8qKiBCYXNpYyBvcGVyYXRpb24gb24gL2Rldi9taWRpWFggYXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMuCi0gKgotICogQmFzaWMgY29udHJhY3Q6IFRoaXMgaXMgYWx3YXlzIHRoZSBmaXJzdCBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoZQotICogZGV2aWNlIG5vZGUuIElmIG5vIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgb3BlbiBzdWNjZWVkcyB3aXRob3V0IGFueQotICogbm90aWZpY2F0aW9uIGdpdmVuIHRvIHRoZSBtb2R1bGUuCi0gKgotICoqLwotCi1zdGF0aWMgaW50IHVzYl9taWRpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnM7Ci0Jc3RydWN0IHVzYl9taWRpZGV2ICAgICptOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHN1Y2NlZWQgPSAwOwotCi0jaWYgMAotCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBPcGVuIG1pbm9yPSAlZC5cbiIsIG1pbm9yKTsKLSNlbmRpZgotCi0JZm9yKDs7KSB7Ci0JCWRvd24oJm9wZW5fc2VtKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmbWlkaWRldnMsIG1pZGlkZXYpIHsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJnMtPm1pZGlEZXZMaXN0LCBsaXN0KSB7Ci0JCQkJaWYgKCAhKChtLT5kZXZfbWlkaSBeIG1pbm9yKSAmIH4weGYpICkKLQkJCQkJZ290byBkZXZpY2VfZm91bmQ7Ci0JCQl9Ci0JCX0KLQkJdXAoJm9wZW5fc2VtKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkZXZpY2VfZm91bmQ6Ci0JCWlmICggIXMtPnVzYmRldiApIHsKLQkJCXVwKCZvcGVuX3NlbSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlpZiAoICEobS0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSApIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICggZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgKSB7Ci0JCQl1cCgmb3Blbl9zZW0pOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWFkZF93YWl0X3F1ZXVlKCAmb3Blbl93YWl0LCAmd2FpdCApOwotCQl1cCgmb3Blbl9zZW0pOwotCQlzY2hlZHVsZSgpOwotCQlyZW1vdmVfd2FpdF9xdWV1ZSggJm9wZW5fd2FpdCwgJndhaXQgKTsKLQkJaWYgKCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSApIHsKLQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCX0KLQl9Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBtOwotCXNwaW5fbG9ja19pcnFzYXZlKCAmcy0+bG9jaywgZmxhZ3MgKTsKLQotCWlmICggIShtLT5vcGVuX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKSkgKSB7Ci0JCS8vRklYTUU6IGludGVudGVkIHNlbWFudGljcyB1bmNsZWFyIGhlcmUKLQkJbS0+bWluLmJ1ZlJkUHRyICAgICAgID0gMDsKLQkJbS0+bWluLmJ1ZldyUHRyICAgICAgID0gMDsKLQkJbS0+bWluLmJ1ZlJlbWFpbnMgICAgID0gMDsKLQkJc3Bpbl9sb2NrX2luaXQoJm0tPm1pbi5lcC0+bG9jayk7Ci0KLQkJbS0+bW91dC5idWZQdHIgICAgICAgID0gMDsKLQkJbS0+bW91dC5idWZSZW1haW5zICAgID0gMDsKLQkJbS0+bW91dC5pc0luRXhjbHVzaXZlID0gMDsKLQkJbS0+bW91dC5sYXN0RXZlbnQgICAgID0gMDsKLQkJc3Bpbl9sb2NrX2luaXQoJm0tPm1vdXQuZXAtPmxvY2spOwotCX0KLQotCWlmICggKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpICYmIG0tPm1pbi5lcCAhPSBOVUxMICkgewotCQl1bnNpZ25lZCBsb25nIGludCBmbGFnc2VwOwotCQlzcGluX2xvY2tfaXJxc2F2ZSggJm0tPm1pbi5lcC0+bG9jaywgZmxhZ3NlcCApOwotCQltLT5taW4uZXAtPmNhYmxlc1ttLT5taW4uY2FibGVJZF0gPSBtOwotCQltLT5taW4uZXAtPnJlYWRlcnMgKz0gMTsKLQkJbS0+bWluLmJ1ZlJkUHRyICAgICAgID0gMDsKLQkJbS0+bWluLmJ1ZldyUHRyICAgICAgID0gMDsKLQkJbS0+bWluLmJ1ZlJlbWFpbnMgICAgID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJm0tPm1pbi5lcC0+bG9jaywgZmxhZ3NlcCApOwotCi0JCWlmICggIShtLT5taW4uZXAtPnVyYlN1Ym1pdHRlZCkpIHsKLQotCQkJLyogdXJiLT5kZXYgbXVzdCBiZSByZWluaXRpYWxpemVkIG9uIDIuNC54IGtlcm5lbHMgKi8KLQkJCW0tPm1pbi5lcC0+dXJiLT5kZXYgPSBtLT5taW4uZXAtPnVzYmRldjsKLQotCQkJaWYgKCB1c2Jfc3VibWl0X3VyYihtLT5taW4uZXAtPnVyYiwgR0ZQX0FUT01JQykgKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBDYW5ub3Qgc3VibWl0IHVyYiBmb3IgTUlESS1JTlxuIik7Ci0JCQl9Ci0JCQltLT5taW4uZXAtPnVyYlN1Ym1pdHRlZCA9IDE7Ci0JCX0KLQkJbS0+b3Blbl9tb2RlIHw9IEZNT0RFX1JFQUQ7Ci0JCXN1Y2NlZWQgPSAxOwotCX0KLQotCWlmICggKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBtLT5tb3V0LmVwICE9IE5VTEwgKSB7Ci0JCW0tPm1vdXQuYnVmUHRyICAgICAgICA9IDA7Ci0JCW0tPm1vdXQuYnVmUmVtYWlucyAgICA9IDA7Ci0JCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7Ci0JCW0tPm1vdXQubGFzdEV2ZW50ICAgICA9IDA7Ci0JCW0tPm9wZW5fbW9kZSB8PSBGTU9ERV9XUklURTsKLQkJc3VjY2VlZCA9IDE7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnMtPmxvY2ssIGZsYWdzICk7Ci0KLQlzLT5jb3VudCsrOwotCXVwKCZvcGVuX3NlbSk7Ci0KLQkvKiogQ2hhbmdlZCB0byBwcmV2ZW50IGV4dHJhIGluY3JlbWVudHMgdG8gVVNFX0NPVU5ULiAqKi8KLQlpZiAoIXN1Y2NlZWQpIHsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLSNpZiAwCi0JcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IE9wZW4gU3VjY2VlZGVkLiBtaW5vcj0gJWQuXG4iLCBtaW5vcik7Ci0jZW5kaWYKLQotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsgLyoqIFN1Y2Nlc3MuICoqLwotfQotCi0KLS8qKiBCYXNpYyBvcGVyYXRpb24gb24gL2Rldi9taWRpWFggYXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMuCi0gKgotICogIEJhc2ljIGNvbnRyYWN0OiBDbG9zZSBhbiBvcGVuZWQgZmlsZSBhbmQgZGVhbGxvY2F0ZSBhbnl0aGluZyB3ZSBhbGxvY2F0ZWQuCi0gKiAgTGlrZSBvcGVuKCksIHRoaXMgY2FuIGJlIG1pc3NpbmcuIElmIG9wZW4gc2V0IGZpbGUtPnByaXZhdGVfZGF0YSwKLSAqICByZWxlYXNlKCkgbXVzdCBjbGVhciBpdC4KLSAqCi0gKiovCi0KLXN0YXRpYyBpbnQgdXNiX21pZGlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdXNiX21pZGlkZXYgKm0gPSAoc3RydWN0IHVzYl9taWRpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcyA9IChzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKiltLT5taWRpOwotCi0jaWYgMAotCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBDbG9zZS5cbiIpOwotI2VuZGlmCi0KLQlkb3duKCZvcGVuX3NlbSk7Ci0KLQlpZiAoIG0tPm9wZW5fbW9kZSAmIEZNT0RFX1dSSVRFICkgewotCQltLT5vcGVuX21vZGUgJj0gfkZNT0RFX1dSSVRFOwotCQl1c2Jfa2lsbF91cmIoIG0tPm1vdXQuZXAtPnVyYiApOwotCX0KLQotCWlmICggbS0+b3Blbl9tb2RlICYgRk1PREVfUkVBRCApIHsKLQkgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGZsYWdzZXA7Ci0JICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSggJm0tPm1pbi5lcC0+bG9jaywgZmxhZ3NlcCApOwotICAgICAgICAgICAgICAgIG0tPm1pbi5lcC0+Y2FibGVzW20tPm1pbi5jYWJsZUlkXSA9IE5VTEw7IC8vIGRpc2NhcmQgY2FibGUKLSAgICAgICAgICAgICAgICBtLT5taW4uZXAtPnJlYWRlcnMgLT0gMTsKLQkJbS0+b3Blbl9tb2RlICY9IH5GTU9ERV9SRUFEOwotCQlpZiAoIG0tPm1pbi5lcC0+cmVhZGVycyA9PSAwICYmCi0gICAgICAgICAgICAgICAgICAgICBtLT5taW4uZXAtPnVyYlN1Ym1pdHRlZCApIHsKLQkJCW0tPm1pbi5lcC0+dXJiU3VibWl0dGVkID0gMDsKLQkJCXVzYl9raWxsX3VyYihtLT5taW4uZXAtPnVyYik7Ci0JCX0KLQkgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZtLT5taW4uZXAtPmxvY2ssIGZsYWdzZXAgKTsKLQl9Ci0KLQlzLT5jb3VudC0tOwotCi0JdXAoJm9wZW5fc2VtKTsKLQl3YWtlX3VwKCZvcGVuX3dhaXQpOwotCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX21pZGlfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkubGxzZWVrID0JdXNiX21pZGlfbGxzZWVrLAotCS5yZWFkID0JCXVzYl9taWRpX3JlYWQsCi0JLndyaXRlID0JdXNiX21pZGlfd3JpdGUsCi0JLnBvbGwgPQkJdXNiX21pZGlfcG9sbCwKLQkub3BlbiA9CQl1c2JfbWlkaV9vcGVuLAotCS5yZWxlYXNlID0JdXNiX21pZGlfcmVsZWFzZSwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoqIFJldHVybnMgZmlsbGVkIG1pZGlfaW5fZW5kcG9pbnQgc3RydWN0dXJlIG9yIG51bGwgb24gZmFpbHVyZS4KLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJZCAgICAgICAgLSBhIHVzYl9kZXZpY2UKLSAqCWVuZFBvaW50IC0gQW4gdXNiIGVuZHBvaW50IGluIHRoZSByYW5nZSAwIHRvIDE1LgotICogQ2FsbGVkIGJ5IGFsbG9jVXNiTWlkaURldigpOwotICoKLSAqKi8KLQotc3RhdGljIHN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICphbGxvY19taWRpX2luX2VuZHBvaW50KCBzdHJ1Y3QgdXNiX2RldmljZSAqZCwgaW50IGVuZFBvaW50ICkKLXsKLQlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqZXA7Ci0JaW50IGJ1ZlNpemU7Ci0JaW50IHBpcGU7Ci0KLQllbmRQb2ludCAmPSAweDBmOyAvKiBTaWxlbnRseSBmb3JjZSBlbmRQb2ludCB0byBsaWUgaW4gcmFuZ2UgMCB0byAxNS4gKi8KLQotCXBpcGUgPSAgdXNiX3JjdmJ1bGtwaXBlKCBkLCBlbmRQb2ludCApOwotCWJ1ZlNpemUgPSB1c2JfbWF4cGFja2V0KCBkLCBwaXBlLCAwICk7Ci0JLyogdXNiX3BpcGVpbigpID0gISB1c2JfcGlwZW91dCgpID0gdHJ1ZSBmb3IgYW4gaW4gRW5kcG9pbnQgKi8KLQotCWVwID0gKHN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICopa21hbGxvYyhzaXplb2Yoc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoICFlcCApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgaW4tZW5kcG9pbnRcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JbWVtc2V0KCBlcCwgMCwgc2l6ZW9mKHN0cnVjdCBtaWRpX2luX2VuZHBvaW50KSApOwotLy8gICAgICB0aGlzIHNldHMgY2FibGVzW10gYW5kIHJlYWRlcnMgdG8gMCwgdG9vLgotLy8gICAgICBmb3IgKGk9MDsgaTwxNjsgaSsrKSBlcC0+Y2FibGVzW2ldID0gMDsgLy8gZGlzY2FyZCBjYWJsZQotLy8gICAgICBlcC0+cmVhZGVycyA9IDA7Ci0KLQllcC0+ZW5kcG9pbnQgPSBlbmRQb2ludDsKLQotCWVwLT5yZWN2QnVmID0gKHVuc2lnbmVkIGNoYXIgKilrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBjaGFyKSooYnVmU2l6ZSksIEdGUF9LRVJORUwpOwotCWlmICggIWVwLT5yZWN2QnVmICkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IG5vIG1lbW9yeSBmb3IgbWlkaSBpbi1lbmRwb2ludCBidWZmZXJcbiIpOwotCQlrZnJlZShlcCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWVwLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOyAvKiBubyBJU08gKi8KLQlpZiAoICFlcC0+dXJiICkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IG5vIG1lbW9yeSBmb3IgbWlkaSBpbi1lbmRwb2ludCB1cmJcbiIpOwotCQlrZnJlZShlcC0+cmVjdkJ1Zik7Ci0JCWtmcmVlKGVwKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXVzYl9maWxsX2J1bGtfdXJiKCBlcC0+dXJiLCBkLCAKLQkJICAgICAgIHVzYl9yY3ZidWxrcGlwZShkLCBlbmRQb2ludCksCi0JCSAgICAgICAodW5zaWduZWQgY2hhciAqKWVwLT5yZWN2QnVmLCBidWZTaXplLAotCQkgICAgICAgdXNiX2J1bGtfcmVhZCwgZXAgKTsKLQotCS8qIGVwLT5idWZSZFB0ciAgICAgPSAwOyAqLwotCS8qIGVwLT5idWZXclB0ciAgICAgPSAwOyAqLwotCS8qIGVwLT5idWZSZW1haW5zICAgPSAwOyAqLwotCS8qIGVwLT51cmJTdWJtaXR0ZWQgPSAwOyAqLwotCWVwLT5yZWN2QnVmU2l6ZSAgPSBidWZTaXplOwotCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmZXAtPndhaXQpOwotCi0JcmV0dXJuIGVwOwotfQotCi1zdGF0aWMgaW50IHJlbW92ZV9taWRpX2luX2VuZHBvaW50KCBzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqbWluICkKLXsKLQl1c2Jfa2lsbF91cmIoIG1pbi0+dXJiICk7Ci0JdXNiX2ZyZWVfdXJiKCBtaW4tPnVyYiApOwotCWtmcmVlKCBtaW4tPnJlY3ZCdWYgKTsKLQlrZnJlZSggbWluICk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqIFJldHVybnMgZmlsbGVkIG1pZGlfb3V0X2VuZHBvaW50IHN0cnVjdHVyZSBvciBudWxsIG9uIGZhaWx1cmUuCi0gKgotICogUGFyYW1ldGVyczoKLSAqCWQgICAgICAgIC0gYSB1c2JfZGV2aWNlCi0gKgllbmRQb2ludCAtIEFuIHVzYiBlbmRwb2ludCBpbiB0aGUgcmFuZ2UgMCB0byAxNS4KLSAqIENhbGxlZCBieSBhbGxvY1VzYk1pZGlEZXYoKTsKLSAqCi0gKiovCi1zdGF0aWMgc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICphbGxvY19taWRpX291dF9lbmRwb2ludCggc3RydWN0IHVzYl9kZXZpY2UgKmQsIGludCBlbmRQb2ludCApCi17Ci0Jc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCA9IE5VTEw7Ci0JaW50IHBpcGU7Ci0JaW50IGJ1ZlNpemU7Ci0KLQllbmRQb2ludCAmPSAweDBmOwotCXBpcGUgPSAgdXNiX3NuZGJ1bGtwaXBlKCBkLCBlbmRQb2ludCApOwotCWJ1ZlNpemUgPSB1c2JfbWF4cGFja2V0KCBkLCBwaXBlLCAxICk7Ci0KLQllcCA9IChzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoICFlcCApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgb3V0LWVuZHBvaW50XG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCW1lbXNldCggZXAsIDAsIHNpemVvZihzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQpICk7Ci0KLQllcC0+ZW5kcG9pbnQgPSBlbmRQb2ludDsKLQllcC0+YnVmID0gKHVuc2lnbmVkIGNoYXIgKilrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBjaGFyKSpidWZTaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoICFlcC0+YnVmICkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IG5vIG1lbW9yeSBmb3IgbWlkaSBvdXQtZW5kcG9pbnQgYnVmZmVyXG4iKTsKLQkJa2ZyZWUoZXApOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQllcC0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsgLyogbm8gSVNPICovCi0JaWYgKCAhZXAtPnVyYiApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgb3V0LWVuZHBvaW50IHVyYlxuIik7Ci0JCWtmcmVlKGVwLT5idWYpOwotCQlrZnJlZShlcCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWVwLT5idWZTaXplICAgICAgID0gYnVmU2l6ZTsKLQkvKiBlcC0+YnVmV3JQdHIgICAgICA9IDA7ICovCi0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlcC0+d2FpdCk7Ci0KLQlyZXR1cm4gZXA7Ci19Ci0KLQotc3RhdGljIGludCByZW1vdmVfbWlkaV9vdXRfZW5kcG9pbnQoIHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqbW91dCApCi17Ci0JdXNiX2tpbGxfdXJiKCBtb3V0LT51cmIgKTsKLQl1c2JfZnJlZV91cmIoIG1vdXQtPnVyYiApOwotCWtmcmVlKCBtb3V0LT5idWYgKTsKLQlrZnJlZSggbW91dCApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqIFJldHVybnMgYSBmaWxsZWQgdXNiX21pZGlkZXYgc3RydWN0dXJlLCByZWdpc3RlcmVkIGFzIGEgTGludXggTUlESSBkZXZpY2UuCi0gKgotICogUmV0dXJucyBudWxsIGlmIG1lbW9yeSBpcyBub3QgYXZhaWxhYmxlIG9yIHRoZSBkZXZpY2UgY2Fubm90IGJlIHJlZ2lzdGVyZWQuCi0gKiBDYWxsZWQgYnkgYWxsb2NVc2JNaWRpRGV2KCk7Ci0gKgotICoqLwotc3RhdGljIHN0cnVjdCB1c2JfbWlkaWRldiAqYWxsb2NNaWRpRGV2KAotCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcywKLQlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqbWluLAotCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqbW91dCwKLQlpbnQgaW5DYWJsZUlkLAotCWludCBvdXRDYWJsZUlkICkKLXsKLQlzdHJ1Y3QgdXNiX21pZGlkZXYgKm07Ci0KLQltID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaWRldiksIEdGUF9LRVJORUwpOwotCWlmICghbSkgewotCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IG5vIG1lbW9yeSBmb3IgbWlkaSBkZXZpY2VcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQltZW1zZXQobSwgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaWRldikpOwotCi0JaWYgKChtLT5kZXZfbWlkaSA9IHJlZ2lzdGVyX3NvdW5kX21pZGkoJnVzYl9taWRpX2ZvcHMsIC0xKSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogY2Fubm90IHJlZ2lzdGVyIG1pZGkgZGV2aWNlXG4iKTsKLQkJa2ZyZWUobSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW0tPm1pZGkgICAgICAgICAgICAgICA9IHM7Ci0JLyogbS0+b3Blbl9tb2RlICAgICAgICAgID0gMDsgKi8KLQotCWlmICggbWluICkgewotCQltLT5taW4uZXAgICAgICAgICAgICAgPSBtaW47Ci0JCW0tPm1pbi5lcC0+dXNiZGV2ICAgICA9IHMtPnVzYmRldjsKLQkJbS0+bWluLmNhYmxlSWQgICAgICAgID0gaW5DYWJsZUlkOwotCX0KLQkvKiBtLT5taW4uYnVmUHRyICAgICAgICAgPSAwOyAqLwotCS8qIG0tPm1pbi5idWZSZW1haW5zICAgICA9IDA7ICovCi0KLQlpZiAoIG1vdXQgKSB7Ci0JCW0tPm1vdXQuZXAgICAgICAgICAgICA9IG1vdXQ7Ci0JCW0tPm1vdXQuZXAtPnVzYmRldiAgICA9IHMtPnVzYmRldjsKLQkJbS0+bW91dC5jYWJsZUlkICAgICAgID0gb3V0Q2FibGVJZDsKLQl9Ci0JLyogbS0+bW91dC5idWZQdHIgICAgICAgID0gMDsgKi8KLQkvKiBtLT5tb3V0LmJ1ZlJlbWFpbnMgICAgPSAwOyAqLwotCS8qIG0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7ICovCi0JLyogbS0+bW91dC5sYXN0RXZlbnQgICAgID0gMDsgKi8KLQotCW0tPnNpbmdsZWJ5dGUgICAgICAgICA9IHNpbmdsZWJ5dGU7Ci0KLQlyZXR1cm4gbTsKLX0KLQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX21pZGlfZGV2aWNlKCBzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMgKQotewotCXN0cnVjdCB1c2JfbWlkaWRldiAqbTsKLQlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqbWluOwotCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqbW91dDsKLQotCWlmICggcy0+Y291bnQgPiAwICkgewotCQl1cCgmb3Blbl9zZW0pOwotCQlyZXR1cm47Ci0JfQotCXVwKCAmb3Blbl9zZW0gKTsKLQl3YWtlX3VwKCAmb3Blbl93YWl0ICk7Ci0KLQl3aGlsZSghbGlzdF9lbXB0eSgmcy0+aW5FbmRwb2ludExpc3QpKSB7Ci0JCW1pbiA9IGxpc3RfZW50cnkocy0+aW5FbmRwb2ludExpc3QubmV4dCwgc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQsIGxpc3QpOwotCQlsaXN0X2RlbCgmbWluLT5saXN0KTsKLQkJcmVtb3ZlX21pZGlfaW5fZW5kcG9pbnQobWluKTsKLQl9Ci0KLQl3aGlsZSghbGlzdF9lbXB0eSgmcy0+b3V0RW5kcG9pbnRMaXN0KSkgewotCQltb3V0ID0gbGlzdF9lbnRyeShzLT5vdXRFbmRwb2ludExpc3QubmV4dCwgc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50LCBsaXN0KTsKLQkJbGlzdF9kZWwoJm1vdXQtPmxpc3QpOwotCQlyZW1vdmVfbWlkaV9vdXRfZW5kcG9pbnQobW91dCk7Ci0JfQotCi0Jd2hpbGUoIWxpc3RfZW1wdHkoJnMtPm1pZGlEZXZMaXN0KSkgewotCQltID0gbGlzdF9lbnRyeShzLT5taWRpRGV2TGlzdC5uZXh0LCBzdHJ1Y3QgdXNiX21pZGlkZXYsIGxpc3QpOwotCQlsaXN0X2RlbCgmbS0+bGlzdCk7Ci0JCWtmcmVlKG0pOwotCX0KLQotCWtmcmVlKHMpOwotCi0JcmV0dXJuOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoqIFV0aWxpdHkgcm91dGluZSB0byBmaW5kIGEgZGVzY3JpcHRvciBpbiBhIGR1bXAgb2YgbWFueSBkZXNjcmlwdG9ycy4KLSAqIFJldHVybnMgc3RhcnQgb2YgZGVzY3JpcHRvciBvciBOVUxMIGlmIG5vdCBmb3VuZC4gCi0gKiBkZXNjU3RhcnQgcG9pbnRlciB0byBsaXN0IG9mIGludGVyZmFjZXMuCi0gKiBkZXNjTGVuZ3RoIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIGR1bXAKLSAqIGFmdGVyIChpZ25vcmVkIGlmIE5VTEwpIHRoaXMgcm91dGluZSByZXR1cm5zIG9ubHkgZGVzY3JpcHRvcnMgYWZ0ZXIgImFmdGVyIgotICogZHR5cGUgKG1hbmRhdG9yeSkgVGhlIGRlc2NyaXB0b3IgdHlwZS4KLSAqIGlmYWNlIChpZ25vcmVkIGlmIC0xKSByZXR1cm5zIGRlc2NyaXB0b3IgYXQvZm9sbG93aW5nIGdpdmVuIGludGVyZmFjZQotICogYWx0U2V0dGluZyAoaWdub3JlZCBpZiAtMSkgcmV0dXJucyBkZXNjcmlwdG9yIGF0L2ZvbGxvd2luZyBnaXZlbiBhbHRTZXR0aW5nCi0gKgotICoKLSAqICBDYWxsZWQgYnkgcGFyc2VEZXNjcmlwdG9yKCksIGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcigpOwotICoKLSAqLwotc3RhdGljIHZvaWQgKmZpbmRfZGVzY3JpcHRvciggdm9pZCAqZGVzY1N0YXJ0LCB1bnNpZ25lZCBpbnQgZGVzY0xlbmd0aCwgdm9pZCAqYWZ0ZXIsIHVuc2lnbmVkIGNoYXIgZHR5cGUsIGludCBpZmFjZSwgaW50IGFsdFNldHRpbmcgKQotewotCXVuc2lnbmVkIGNoYXIgKnAsICplbmQsICpuZXh0OwotCWludCBpbnRlcmZhY2VOdW1iZXIgPSAtMSwgYWx0U2V0ID0gLTE7Ci0KLQlwID0gZGVzY1N0YXJ0OwotCWVuZCA9IHAgKyBkZXNjTGVuZ3RoOwotCWZvciggOyBwIDwgZW5kOyApIHsKLQkJaWYgKCBwWzBdIDwgMiApCi0JCQlyZXR1cm4gTlVMTDsKLQkJbmV4dCA9IHAgKyBwWzBdOwotCQlpZiAoIG5leHQgPiBlbmQgKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWlmICggcFsxXSA9PSBVU0JfRFRfSU5URVJGQUNFICkgewotCQkJaWYgKCBwWzBdIDwgVVNCX0RUX0lOVEVSRkFDRV9TSVpFICkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWludGVyZmFjZU51bWJlciA9IHBbMl07Ci0JCQlhbHRTZXQgPSBwWzNdOwotCQl9Ci0JCWlmICggcFsxXSA9PSBkdHlwZSAmJgotCQkgICAgICggIWFmdGVyIHx8ICggcCA+ICh1bnNpZ25lZCBjaGFyICopYWZ0ZXIpICkgJiYKLQkJICAgICAoICggaWZhY2UgPT0gLTEpIHx8IChpZmFjZSA9PSBpbnRlcmZhY2VOdW1iZXIpICkgJiYKLQkJICAgICAoIChhbHRTZXR0aW5nID09IC0xKSB8fCAoYWx0U2V0dGluZyA9PSBhbHRTZXQpICkpIHsKLQkJCXJldHVybiBwOwotCQl9Ci0JCXAgPSBuZXh0OwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoqIFV0aWxpdHkgdG8gZmluZCBhIGNsYXNzLXNwZWNpZmljIGludGVyZmFjZSBkZXNjcmlwdG9yLgotICogIGRzdWJ0eXBlIGlzIGEgZGVzY3JpcHRvciBzdWJ0eXBlCi0gKiAgQ2FsbGVkIGJ5IHBhcnNlRGVzY3JpcHRvcigpOwotICoqLwotc3RhdGljIHZvaWQgKmZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcih2b2lkICpkZXNjU3RhcnQsIHVuc2lnbmVkIGludCBkZXNjTGVuZ3RoLCB2b2lkICphZnRlciwgdTggZHN1YnR5cGUsIGludCBpZmFjZSwgaW50IGFsdFNldHRpbmcpCi17Ci0JdW5zaWduZWQgY2hhciAqcDsKLSAgCi0JcCA9IGZpbmRfZGVzY3JpcHRvciggZGVzY1N0YXJ0LCBkZXNjTGVuZ3RoLCBhZnRlciwgVVNCX0RUX0NTX0lOVEVSRkFDRSwgaWZhY2UsIGFsdFNldHRpbmcgKTsKLQl3aGlsZSAoIHAgKSB7Ci0JCWlmICggcFswXSA+PSAzICYmIHBbMl0gPT0gZHN1YnR5cGUgKQotCQkJcmV0dXJuIHA7Ci0JCXAgPSBmaW5kX2Rlc2NyaXB0b3IoIGRlc2NTdGFydCwgZGVzY0xlbmd0aCwgcCwgVVNCX0RUX0NTX0lOVEVSRkFDRSwgCi0JCQkJICAgICBpZmFjZSwgYWx0U2V0dGluZyApOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotCi0vKiogVGhlIG1hZ2ljIG9mIG1ha2luZyBhIG5ldyB1c2JfbWlkaV9kZXZpY2UgZnJvbSBjb25maWcgaGFwcGVucyBoZXJlLgotICoKLSAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWUtaW5nIHRoaXMgcmV0dXJuIHZhbHVlIChpZiBub3QgTlVMTCkuCi0gKgotICoqLwotc3RhdGljIHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKnBhcnNlX2Rlc2NyaXB0b3IoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBidWZTaXplLCB1bnNpZ25lZCBpbnQgaWZudW0gLCB1bnNpZ25lZCBpbnQgYWx0U2V0dGluZywgaW50IHF1aXJrcykKLXsKLQlzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICp1OwotCXVuc2lnbmVkIGNoYXIgKnAxOwotCXVuc2lnbmVkIGNoYXIgKnAyOwotCXVuc2lnbmVkIGNoYXIgKm5leHQ7Ci0JaW50IGllcCwgb2VwOwotCWludCBsZW5ndGg7Ci0JdW5zaWduZWQgbG9uZyBsb25nQml0czsKLQlpbnQgcGlucywgbmJ5dGVzLCBvZmZzZXQsIHNoaWZ0LCBqYWNrOwotI2lmZGVmIEhBVkVfSkFDS19TVFJJTkdTCi0JLyoqIEphY2tzIGNhbiBoYXZlIGFzc29jaWF0ZWQgbmFtZXMuICAqKi8KLQl1bnNpZ25lZCBjaGFyIGphY2syc3RyaW5nWzI1Nl07Ci0jZW5kaWYKLQotCXUgPSBOVUxMOwotCS8qIGZpbmQgYXVkaW9jb250cm9sIGludGVyZmFjZSAqLwotCXAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKCBidWZmZXIsIGJ1ZlNpemUsIE5VTEwsCi0JCQkJCSAgTVNfSEVBREVSLCBpZm51bSwgYWx0U2V0dGluZyk7Ci0KLQlpZiAoICFwMSApIHsKLQkJZ290byBlcnJvcl9lbmQ7Ci0JfQotCi0JaWYgKCBwMVswXSA8IE1TX0hFQURFUl9MRU5HVEggKSB7Ci0JCWdvdG8gZXJyb3JfZW5kOwotCX0KLQotCS8qIEFzc3VtZSBzdWNjZXNzLiBTaW5jZSB0aGUgZGV2aWNlIGNvcnJlc3BvbmRzIHRvIFVTQi1NSURJIHNwZWMsIHdlIGFzc3VtZQotCSAgIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIFVTQiAyLjAgc3BlYyBpcyBvYmV5ZWQuICovCi0KLQl1ID0gKHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKilrbWFsbG9jKCBzaXplb2Yoc3RydWN0IHVzYl9taWRpX2RldmljZSksIEdGUF9LRVJORUwgKTsKLQlpZiAoICF1ICkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JdS0+ZGV2aWNlTmFtZSA9IE5VTEw7Ci0JdS0+aWRWZW5kb3IgPSBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKLQl1LT5pZFByb2R1Y3QgPSBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0JdS0+aW50ZXJmYWNlID0gaWZudW07Ci0JdS0+YWx0U2V0dGluZyA9IGFsdFNldHRpbmc7Ci0JdS0+aW5bMF0uZW5kcG9pbnQgPSAtMTsKLQl1LT5pblswXS5jYWJsZUlkID0gLTE7Ci0JdS0+b3V0WzBdLmVuZHBvaW50ID0gLTE7Ci0JdS0+b3V0WzBdLmNhYmxlSWQgPSAtMTsKLQotCi0JcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IEZvdW5kIE1JRElTdHJlYW1pbmcgZGV2aWNlIGNvcnJlc3BvbmRpbmcgdG8gUmVsZWFzZSAlZC4lMDJkIG9mIHNwZWMuXG4iLAotCSAgICAgICAocDFbNF0gPj4gNCkgKiAxMCArIChwMVs0XSAmIDB4MGYgKSwKLQkgICAgICAgKHAxWzNdID4+IDQpICogMTAgKyAocDFbM10gJiAweDBmICkKLQkJKTsKLQotCWxlbmd0aCA9IHAxWzVdIHwgKHAxWzZdIDw8IDgpOwotCi0jaWZkZWYgSEFWRV9KQUNLX1NUUklOR1MKLQltZW1zZXQoamFjazJzdHJpbmcsIDAsIHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDI1Nik7Ci0jZW5kaWYKLQotCWxlbmd0aCAtPSBwMVswXTsKLQlmb3IgKHAyID0gcDEgKyBwMVswXTsgbGVuZ3RoID4gMDsgcDIgPSBuZXh0KSB7Ci0JCW5leHQgPSBwMiArIHAyWzBdOwotCQlsZW5ndGggLT0gcDJbMF07Ci0KLQkJaWYgKHAyWzBdIDwgMiApCi0JCQlicmVhazsKLQkJaWYgKHAyWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UpCi0JCQlicmVhazsKLQkJaWYgKHAyWzJdID09IE1JRElfSU5fSkFDSyAmJiBwMlswXSA+PSA2ICkgewotCQkJamFjayA9IHAyWzRdOwotI2lmZGVmIEhBVkVfSkFDS19TVFJJTkdTCi0JCQlqYWNrMnN0cmluZ1tqYWNrXSA9IHAyWzVdOwotI2VuZGlmCi0JCQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogRm91bmQgSU4gSmFjayAweCUwMnggJXNcbiIsCi0JCQkgICAgICAgamFjaywgKHAyWzNdID09IEVNQkVEREVEX0pBQ0spPyJFTUJFRERFRCI6IkVYVEVSTkFMIiApOwotCQl9IGVsc2UgaWYgKCBwMlsyXSA9PSBNSURJX09VVF9KQUNLICYmIHAyWzBdID49IDYpIHsKLQkJCXBpbnMgPSBwMls1XTsKLQkJCWlmICggcDJbMF0gPCAoNiArIDIgKiBwaW5zKSApCi0JCQkJY29udGludWU7Ci0JCQlqYWNrID0gcDJbNF07Ci0jaWZkZWYgSEFWRV9KQUNLX1NUUklOR1MKLQkJCWphY2syc3RyaW5nW2phY2tdID0gcDJbNSArIDIgKiBwaW5zXTsKLSNlbmRpZgotCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IEZvdW5kIE9VVCBKYWNrIDB4JTAyeCAlcywgJWQgcGluc1xuIiwKLQkJCSAgICAgICBqYWNrLCAocDJbM10gPT0gRU1CRURERURfSkFDSyk/IkVNQkVEREVEIjoiRVhURVJOQUwiLCBwaW5zICk7Ci0JCX0gZWxzZSBpZiAoIHAyWzJdID09IEVMRU1FTlRfREVTQ1JJUFRPUiAgJiYgcDJbMF0gID49IDEwKSB7Ci0JCQlwaW5zID0gcDJbNF07Ci0JCQlpZiAoIHAyWzBdIDwgKDkgKyAyICogcGlucyApICkKLQkJCQljb250aW51ZTsKLQkJCW5ieXRlcyA9IHAyWzggKyAyICogcGlucyBdOwotCQkJaWYgKCBwMlswXSA8ICgxMCArIDIgKiBwaW5zICsgbmJ5dGVzKSApCi0JCQkJY29udGludWU7Ci0JCQlsb25nQml0cyA9IDBMOwotCQkJZm9yICggb2Zmc2V0ID0gMCwgc2hpZnQgPSAwOyBvZmZzZXQgPCBuYnl0ZXMgJiYgb2Zmc2V0IDwgODsgb2Zmc2V0ICsrLCBzaGlmdCArPSA4KSB7Ci0JCQkJbG9uZ0JpdHMgfD0gKChsb25nKShwMls5ICsgMiAqIHBpbnMgKyBvZmZzZXRdKSkgPDwgc2hpZnQ7Ci0JCQl9Ci0JCQlqYWNrID0gcDJbM107Ci0jaWZkZWYgSEFWRV9KQUNLX1NUUklOR1MKLQkJCWphY2syc3RyaW5nW2phY2tdID0gcDJbOSArIDIgKiBwaW5zICsgbmJ5dGVzXTsKLSNlbmRpZgotCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IEZvdW5kIEVMRU1FTlQgMHglMDJ4LCAlZC8lZCBwaW5zIGluL291dCwgYml0czogMHglMDE2bHhcbiIsCi0JCQkgICAgICAgamFjaywgcGlucywgKGludCkocDJbNSArIDIgKiBwaW5zXSksIChsb25nKWxvbmdCaXRzICk7Ci0JCX0gZWxzZSB7Ci0JCX0KLQl9Ci0KLQlpZXA9MDsKLQlvZXA9MDsKLQotCWlmIChxdWlya3M9PTApIHsKLQkJLyogTUlESVNUUkVBTSAqLwotCQlwMiA9IE5VTEw7Ci0JCWZvciAocDEgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZTaXplLCBOVUxMLCBVU0JfRFRfRU5EUE9JTlQsCi0JCQkJCSAgaWZudW0sIGFsdFNldHRpbmcgKTsgcDE7IHAxID0gbmV4dCApIHsKLQkJCW5leHQgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZTaXplLCBwMSwgVVNCX0RUX0VORFBPSU5ULAotCQkJCQkgICAgICAgaWZudW0sIGFsdFNldHRpbmcgKTsgCi0JCQlwMiA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZlNpemUsIHAxLCBVU0JfRFRfQ1NfRU5EUE9JTlQsCi0JCQkJCSAgICAgaWZudW0sIGFsdFNldHRpbmcgKTsgCi0KLQkJCWlmICggcDIgJiYgbmV4dCAmJiAoIHAyID4gbmV4dCApICkKLQkJCQlwMiA9IE5VTEw7Ci0KLQkJCWlmICggcDFbMF0gPCA5IHx8ICFwMiB8fCBwMlswXSA8IDQgKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoIChwMVsyXSAmIDB4ODApID09IDB4ODAgKSB7Ci0JCQkJaWYgKCBpZXAgPCAxNSApIHsKLQkJCQkJcGlucyA9IHAyWzNdOyAvKiBub3QgcGlucyAtLSBhY3R1YWxseSAiY2FibGVzIiAqLwotCQkJCQlpZiAoIHBpbnMgPiAxNiApCi0JCQkJCQlwaW5zID0gMTY7Ci0JCQkJCXUtPmluW2llcF0uZW5kcG9pbnQgPSBwMVsyXTsKLQkJCQkJdS0+aW5baWVwXS5jYWJsZUlkID0gKCAxIDw8IHBpbnMgKSAtIDE7Ci0JCQkJCWlmICggdS0+aW5baWVwXS5jYWJsZUlkICkKLQkJCQkJCWllcCArKzsKLQkJCQkJaWYgKCBpZXAgPCAxNSApIHsKLQkJCQkJCXUtPmluW2llcF0uZW5kcG9pbnQgPSAtMTsKLQkJCQkJCXUtPmluW2llcF0uY2FibGVJZCA9IC0xOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIG9lcCA8IDE1ICkgewotCQkJCQlwaW5zID0gcDJbM107IC8qIG5vdCBwaW5zIC0tIGFjdHVhbGx5ICJjYWJsZXMiICovCi0JCQkJCWlmICggcGlucyA+IDE2ICkKLQkJCQkJCXBpbnMgPSAxNjsKLQkJCQkJdS0+b3V0W29lcF0uZW5kcG9pbnQgPSBwMVsyXTsKLQkJCQkJdS0+b3V0W29lcF0uY2FibGVJZCA9ICggMSA8PCBwaW5zICkgLSAxOwotCQkJCQlpZiAoIHUtPm91dFtvZXBdLmNhYmxlSWQgKQotCQkJCQkJb2VwICsrOwotCQkJCQlpZiAoIG9lcCA8IDE1ICkgewotCQkJCQkJdS0+b3V0W29lcF0uZW5kcG9pbnQgPSAtMTsKLQkJCQkJCXUtPm91dFtvZXBdLmNhYmxlSWQgPSAtMTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkKLQkJfQotCX0gZWxzZSBpZiAocXVpcmtzPT0xKSB7Ci0JCS8qIFlBTUFIQSBxdWlya3MgKi8KLQkJZm9yIChwMSA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZlNpemUsIE5VTEwsIFVTQl9EVF9FTkRQT0lOVCwKLQkJCQkJICBpZm51bSwgYWx0U2V0dGluZyApOyBwMTsgcDEgPSBuZXh0ICkgewotCQkJbmV4dCA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZlNpemUsIHAxLCBVU0JfRFRfRU5EUE9JTlQsCi0JCQkJCSAgICAgICBpZm51bSwgYWx0U2V0dGluZyApOyAKLQkKLQkJCWlmICggcDFbMF0gPCA3ICkKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKCAocDFbMl0gJiAweDgwKSA9PSAweDgwICkgewotCQkJCWlmICggaWVwIDwgMTUgKSB7Ci0JCQkJCXBpbnMgPSBpZXArMTsKLQkJCQkJaWYgKCBwaW5zID4gMTYgKQotCQkJCQkJcGlucyA9IDE2OwotCQkJCQl1LT5pbltpZXBdLmVuZHBvaW50ID0gcDFbMl07Ci0JCQkJCXUtPmluW2llcF0uY2FibGVJZCA9ICggMSA8PCBwaW5zICkgLSAxOwotCQkJCQlpZiAoIHUtPmluW2llcF0uY2FibGVJZCApCi0JCQkJCQlpZXAgKys7Ci0JCQkJCWlmICggaWVwIDwgMTUgKSB7Ci0JCQkJCQl1LT5pbltpZXBdLmVuZHBvaW50ID0gLTE7Ci0JCQkJCQl1LT5pbltpZXBdLmNhYmxlSWQgPSAtMTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCBvZXAgPCAxNSApIHsKLQkJCQkJcGlucyA9IG9lcCsxOwotCQkJCQl1LT5vdXRbb2VwXS5lbmRwb2ludCA9IHAxWzJdOwotCQkJCQl1LT5vdXRbb2VwXS5jYWJsZUlkID0gKCAxIDw8IHBpbnMgKSAtIDE7Ci0JCQkJCWlmICggdS0+b3V0W29lcF0uY2FibGVJZCApCi0JCQkJCQlvZXAgKys7Ci0JCQkJCWlmICggb2VwIDwgMTUgKSB7Ci0JCQkJCQl1LT5vdXRbb2VwXS5lbmRwb2ludCA9IC0xOwotCQkJCQkJdS0+b3V0W29lcF0uY2FibGVJZCA9IC0xOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQotCQl9Ci0JfQotCi0JaWYgKCAhaWVwICYmICEgb2VwICkgewotCQlnb3RvIGVycm9yX2VuZDsKLQl9Ci0KLQlyZXR1cm4gdTsKLQotZXJyb3JfZW5kOgotCWtmcmVlKHUpOwotCXJldHVybiBOVUxMOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKiBSZXR1cm5zIG51bWJlciBiZXR3ZWVuIDAgYW5kIDE2LgotICoKLSAqKi8KLXN0YXRpYyBpbnQgb25fYml0cyggdW5zaWduZWQgc2hvcnQgdiApCi17Ci0JaW50IGk7Ci0JaW50IHJldD0wOwotCi0JZm9yICggaT0wIDsgaTwxNiA7IGkrKyApIHsKLQkJaWYgKCB2ICYgKDE8PGkpICkKLQkJCXJldCsrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoqIFVTQi1kZXZpY2Ugd2lsbCBiZSBpbnRlcnJvZ2F0ZWQgZm9yIGFsdFNldHRpbmcuCi0gKgotICogUmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvci4KLSAqIENhbGxlZCBieSBhbGxvY1VzYk1pZGlEZXYoKTsKLSAqCi0gKiovCi0KLXN0YXRpYyBpbnQgZ2V0X2FsdF9zZXR0aW5nKCBzdHJ1Y3QgdXNiX2RldmljZSAqZCwgaW50IGlmbnVtICkKLXsKLQlpbnQgYWx0cywgYWx0PTA7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwOwotCWludCBlcGluLCBlcG91dDsKLQlpbnQgaTsKLQotCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKCBkLCBpZm51bSApOwotCWFsdHMgPSBpZmFjZS0+bnVtX2FsdHNldHRpbmc7Ci0KLQlmb3IgKCBhbHQ9MCA7IGFsdDxhbHRzIDsgYWx0KysgKSB7Ci0JCWludGVyZmFjZSA9ICZpZmFjZS0+YWx0c2V0dGluZ1thbHRdOwotCQllcGluID0gLTE7Ci0JCWVwb3V0ID0gLTE7Ci0KLQkJZm9yICggaT0wIDsgaTxpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyA7IGkrKyApIHsKLQkJCWVwID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbaV0uZGVzYzsKLQkJCWlmICggKGVwLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgIT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSyApIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICggKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYgZXBpbiA8IDAgKSB7Ci0JCQkJZXBpbiA9IGk7Ci0JCQl9IGVsc2UgaWYgKCBlcG91dCA8IDAgKSB7Ci0JCQkJZXBvdXQgPSBpOwotCQkJfQotCQkJaWYgKCBlcGluID49IDAgJiYgZXBvdXQgPj0gMCApIHsKLQkJCQlyZXR1cm4gaW50ZXJmYWNlLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0KLS8qKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBpbiBhbGxvY2F0aW5nIGFuZCByZWdpc3RlcmluZyBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgotICogUmV0dXJucyBuZWdhdGl2ZSBvbiBmYWlsdXJlLgotICogQ2FsbHMgYWxsb2NNaWRpRGV2IHdoaWNoIGFkZGl0aW9uYWxseSByZWdpc3RlcnMgL2Rldi9taWRpWFggZGV2aWNlcy4KLSAqIFdyaXRlcyBtZXNzYWdlcyBvbiBzdWNjZXNzIHRvIGluZGljYXRlIHdoaWNoIC9kZXYvbWlkaVhYIGlzIHdoaWNoIHBoeXNpY2FsCi0gKiBlbmRwb2ludC4KLSAqCi0gKiovCi1zdGF0aWMgaW50IGFsbG9jX3VzYl9taWRpX2RldmljZSggc3RydWN0IHVzYl9kZXZpY2UgKmQsIHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcywgc3RydWN0IHVzYl9taWRpX2RldmljZSAqdSApCi17Ci0Jc3RydWN0IHVzYl9taWRpZGV2ICoqbWRldnM9TlVMTDsKLQlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqbWluc1sxNV0sICptaW47Ci0Jc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICptb3V0c1sxNV0sICptb3V0OwotCWludCBpbkRldnM9MCwgb3V0RGV2cz0wOwotCWludCBpbkVuZHBvaW50cz0wLCBvdXRFbmRwb2ludHM9MDsKLQlpbnQgaW5FbmRwb2ludCwgb3V0RW5kcG9pbnQ7Ci0JaW50IGluQ2FibGVJZCwgb3V0Q2FibGVJZDsKLQlpbnQgaTsKLQlpbnQgZGV2aWNlcyA9IDA7Ci0JaW50IGFsdCA9IDA7Ci0KLQkvKiBPYnRhaW4gYWx0U2V0dGluZyBvciBkaWUuLiAqLwotCWFsdCA9IHUtPmFsdFNldHRpbmc7Ci0JaWYgKCBhbHQgPCAwICkgewotCQlhbHQgPSBnZXRfYWx0X3NldHRpbmcoIGQsIHUtPmludGVyZmFjZSApOwotCX0KLQlpZiAoIGFsdCA8IDAgKQotCQlyZXR1cm4gLUVOWElPOwotCi0JLyogQ29uZmlndXJlIGludGVyZmFjZSAqLwotCWlmICggdXNiX3NldF9pbnRlcmZhY2UoIGQsIHUtPmludGVyZmFjZSwgYWx0ICkgPCAwICkgewotCQlyZXR1cm4gLUVOWElPOwotCX0KLQotCWZvciAoIGkgPSAwIDsgaSA8IDE1IDsgaSsrICkgewotCQltaW5zW2ldID0gTlVMTDsKLQkJbW91dHNbaV0gPSBOVUxMOwotCX0KLQotCS8qIEJlZ2luIEFsbG9jYXRpb24gKi8KLQl3aGlsZSggaW5FbmRwb2ludHMgPCAxNQotCSAgICAgICAmJiBpbkRldnMgPCBtYXhkZXZpY2VzCi0JICAgICAgICYmIHUtPmluW2luRW5kcG9pbnRzXS5jYWJsZUlkID49IDAgKSB7Ci0JCWluRGV2cyArPSBvbl9iaXRzKCh1bnNpZ25lZCBzaG9ydCl1LT5pbltpbkVuZHBvaW50c10uY2FibGVJZCk7Ci0JCW1pbnNbaW5FbmRwb2ludHNdID0gYWxsb2NfbWlkaV9pbl9lbmRwb2ludCggZCwgdS0+aW5baW5FbmRwb2ludHNdLmVuZHBvaW50ICk7Ci0JCWlmICggbWluc1tpbkVuZHBvaW50c10gPT0gTlVMTCApCi0JCQlnb3RvIGVycm9yX2VuZDsKLQkJaW5FbmRwb2ludHMrKzsKLQl9Ci0KLQl3aGlsZSggb3V0RW5kcG9pbnRzIDwgMTUKLQkgICAgICAgJiYgb3V0RGV2cyA8IG1heGRldmljZXMKLQkgICAgICAgJiYgdS0+b3V0W291dEVuZHBvaW50c10uY2FibGVJZCA+PSAwICkgewotCQlvdXREZXZzICs9IG9uX2JpdHMoKHVuc2lnbmVkIHNob3J0KXUtPm91dFtvdXRFbmRwb2ludHNdLmNhYmxlSWQpOwotCQltb3V0c1tvdXRFbmRwb2ludHNdID0gYWxsb2NfbWlkaV9vdXRfZW5kcG9pbnQoIGQsIHUtPm91dFtvdXRFbmRwb2ludHNdLmVuZHBvaW50ICk7Ci0JCWlmICggbW91dHNbb3V0RW5kcG9pbnRzXSA9PSBOVUxMICkKLQkJCWdvdG8gZXJyb3JfZW5kOwotCQlvdXRFbmRwb2ludHMrKzsKLQl9Ci0KLQlkZXZpY2VzID0gaW5EZXZzID4gb3V0RGV2cyA/IGluRGV2cyA6IG91dERldnM7Ci0JZGV2aWNlcyA9IG1heGRldmljZXMgPiBkZXZpY2VzID8gZGV2aWNlcyA6IG1heGRldmljZXM7Ci0KLQkvKiBvYnRhaW4gc3BhY2UgZm9yIGRldmljZSBuYW1lIChpUHJvZHVjdCkgaWYgbm90IGtub3duLiAqLwotCWlmICggISB1LT5kZXZpY2VOYW1lICkgewotCQltZGV2cyA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKiopCi0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21pZGlkZXZzICopKmRldmljZXMKLQkJCQkrIHNpemVvZihjaGFyKSAqIDI1NiwgR0ZQX0tFUk5FTCk7Ci0JfSBlbHNlIHsKLQkJbWRldnMgPSAoc3RydWN0IHVzYl9taWRpZGV2ICoqKQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9taWRpZGV2cyAqKSpkZXZpY2VzLCBHRlBfS0VSTkVMKTsKLQl9Ci0KLQlpZiAoICFtZGV2cyApIHsKLQkJLyogZGV2aWNlcyA9IDA7ICovCi0JCS8qIG1kZXZzID0gTlVMTDsgKi8KLQkJZ290byBlcnJvcl9lbmQ7Ci0JfQotCWZvciAoIGk9MCA7IGk8ZGV2aWNlcyA7IGkrKyApIHsKLQkJbWRldnNbaV0gPSBOVUxMOwotCX0KLQotCS8qIG9idGFpbiBkZXZpY2UgbmFtZSAoaVByb2R1Y3QpIGlmIG5vdCBrbm93bi4gKi8KLQlpZiAoICEgdS0+ZGV2aWNlTmFtZSApIHsKLQkJdS0+ZGV2aWNlTmFtZSA9IChjaGFyICopIChtZGV2cyArIGRldmljZXMpOwotCQlpZiAoICEgZC0+aGF2ZV9sYW5naWQgJiYgZC0+ZGVzY3JpcHRvci5pUHJvZHVjdCkgewotCQkJYWx0ID0gdXNiX2dldF9zdHJpbmcoZCwgMCwgMCwgdS0+ZGV2aWNlTmFtZSwgMjUwKTsKLQkJCWlmIChhbHQgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiZXJyb3IgZ2V0dGluZyBzdHJpbmcgZGVzY3JpcHRvciAwIChlcnJvcj0lZClcbiIsIGFsdCk7Ci0JCQl9IGVsc2UgaWYgKHUtPmRldmljZU5hbWVbMF0gPCA0KSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAic3RyaW5nIGRlc2NyaXB0b3IgMCB0b28gc2hvcnQgKGxlbmd0aCA9ICVkKVxuIiwgYWx0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAic3RyaW5nIGRlc2NyaXB0b3IgMCBmb3VuZCAobGVuZ3RoID0gJWQpXG4iLCBhbHQpOwotCQkJCWZvcig7IGFsdCA+PSA0OyBhbHQgLT0gMikgewotCQkJCQlpID0gdS0+ZGV2aWNlTmFtZVthbHQtMl0gfCAodS0+ZGV2aWNlTmFtZVthbHQtMV08PCA4KTsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IGxhbmdpZCglZCkgMHglMDR4XG4iLAotCQkJCQkgICAgICAgKGFsdC00KSA+PiAxLCBpKTsKLQkJCQkJaWYgKCAoICggaSBeIHVsYW5naWQgKSAmIDB4ZmYgKSA9PSAwICkgewotCQkJCQkJZC0+aGF2ZV9sYW5naWQgPSAxOwotCQkJCQkJZC0+c3RyaW5nX2xhbmdpZCA9IGk7Ci0JCQkJCQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogbGFuZ2lkKG1hdGNoKSAweCUwNHhcbiIsIGkpOwotCQkJCQkJaWYgKCBpID09IHVsYW5naWQgKQotCQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXUtPmRldmljZU5hbWVbMF0gPSAoY2hhcikgMDsKLQkJaWYgKGQtPmRlc2NyaXB0b3IuaVByb2R1Y3QpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBmZXRjaFN0cmluZyglZClcbiIsIGQtPmRlc2NyaXB0b3IuaVByb2R1Y3QpOwotCQkJYWx0ID0gdXNiX3N0cmluZyhkLCBkLT5kZXNjcmlwdG9yLmlQcm9kdWN0LCB1LT5kZXZpY2VOYW1lLCAyNTUpOwotCQkJaWYoIGFsdCA8IDAgKSB7Ci0JCQkJdS0+ZGV2aWNlTmFtZVswXSA9IChjaGFyKSAwOwotCQkJfQotCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IGZldGNoU3RyaW5nID0gJWRcbiIsIGFsdCk7Ci0JCX0gCi0JCS8qIEZhaWxzYWZlICovCi0JCWlmICggIXUtPmRldmljZU5hbWVbMF0gKSB7Ci0JCQlpZiAobGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVVNCX1ZFTkRPUl9JRF9ST0xBTkQgKSB7Ci0JCQkJc3RyY3B5KHUtPmRldmljZU5hbWUsICJVbmtub3duIFJvbGFuZCIpOwotCQkJfSBlbHNlIGlmIChsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBVU0JfVkVORE9SX0lEX1NURUlOQkVSRyAgKSB7Ci0JCQkJc3RyY3B5KHUtPmRldmljZU5hbWUsICJVbmtub3duIFN0ZWluYmVyZyIpOwotCQkJfSBlbHNlIGlmIChsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBVU0JfVkVORE9SX0lEX1lBTUFIQSApIHsKLQkJCQlzdHJjcHkodS0+ZGV2aWNlTmFtZSwgIlVua25vd24gWWFtYWhhIik7Ci0JCQl9IGVsc2UgewotCQkJCXN0cmNweSh1LT5kZXZpY2VOYW1lLCAiVW5rbm93biIpOwotCQkJfQotCQl9Ci0JfQotCi0JaW5FbmRwb2ludCAgPSAwOyBpbkNhYmxlSWQgID0gLTE7Ci0Jb3V0RW5kcG9pbnQgPSAwOyBvdXRDYWJsZUlkID0gLTE7Ci0KLQlmb3IgKCBpPTAgOyBpPGRldmljZXMgOyBpKysgKSB7Ci0JCWZvciAoIGluQ2FibGVJZCArKyA7Ci0JCSAgICAgIGluRW5kcG9pbnQgPDE1Ci0JCQkgICAgICAmJiBtaW5zW2luRW5kcG9pbnRdIAotCQkJICAgICAgJiYgISh1LT5pbltpbkVuZHBvaW50XS5jYWJsZUlkICYgKDE8PGluQ2FibGVJZCkpIDsKLQkJICAgICAgaW5DYWJsZUlkKysgKSB7Ci0JCQlpZiAoIGluQ2FibGVJZCA+PSAxNiApIHsKLQkJCQlpbkVuZHBvaW50ICArKzsKLQkJCQlpbkNhYmxlSWQgID0gMDsKLQkJCX0KLQkJfQotCQltaW4gID0gbWluc1tpbkVuZHBvaW50XTsKLQkJZm9yICggb3V0Q2FibGVJZCArKyA7Ci0JCSAgICAgIG91dEVuZHBvaW50IDwxNQotCQkJICAgICAgJiYgbW91dHNbb3V0RW5kcG9pbnRdIAotCQkJICAgICAgJiYgISh1LT5vdXRbb3V0RW5kcG9pbnRdLmNhYmxlSWQgJiAoMTw8b3V0Q2FibGVJZCkpIDsKLQkJICAgICAgb3V0Q2FibGVJZCsrICkgewotCQkJaWYgKCBvdXRDYWJsZUlkID49IDE2ICkgewotCQkJCW91dEVuZHBvaW50ICArKzsKLQkJCQlvdXRDYWJsZUlkICA9IDA7Ci0JCQl9Ci0JCX0KLQkJbW91dCA9IG1vdXRzW291dEVuZHBvaW50XTsKLQotCQltZGV2c1tpXSA9IGFsbG9jTWlkaURldiggcywgbWluLCBtb3V0LCBpbkNhYmxlSWQsIG91dENhYmxlSWQgKTsKLQkJaWYgKCBtZGV2c1tpXSA9PSBOVUxMICkKLQkJCWdvdG8gZXJyb3JfZW5kOwotCi0JfQotCi0JLyogU3VjY2VzcyEgKi8KLQlmb3IgKCBpPTAgOyBpPGRldmljZXMgOyBpKysgKSB7Ci0JCWxpc3RfYWRkX3RhaWwoICZtZGV2c1tpXS0+bGlzdCwgJnMtPm1pZGlEZXZMaXN0ICk7Ci0JfQotCWZvciAoIGk9MCA7IGk8aW5FbmRwb2ludHMgOyBpKysgKSB7Ci0JCWxpc3RfYWRkX3RhaWwoICZtaW5zW2ldLT5saXN0LCAmcy0+aW5FbmRwb2ludExpc3QgKTsKLQl9Ci0JZm9yICggaT0wIDsgaTxvdXRFbmRwb2ludHMgOyBpKysgKSB7Ci0JCWxpc3RfYWRkX3RhaWwoICZtb3V0c1tpXS0+bGlzdCwgJnMtPm91dEVuZHBvaW50TGlzdCApOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gInVzYm1pZGk6IGZvdW5kIFsgJXMgXSAoMHglMDR4OjB4JTA0eCksIGF0dGFjaGVkOlxuIiwgdS0+ZGV2aWNlTmFtZSwgdS0+aWRWZW5kb3IsIHUtPmlkUHJvZHVjdCApOwotCWZvciAoIGk9MCA7IGk8ZGV2aWNlcyA7IGkrKyApIHsKLQkJaW50IGRtID0gKG1kZXZzW2ldLT5kZXZfbWlkaS0yKT4+NDsKLQkJaWYgKCBtZGV2c1tpXS0+bW91dC5lcCAhPSBOVUxMICYmIG1kZXZzW2ldLT5taW4uZXAgIT0gTlVMTCApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInVzYm1pZGk6IC9kZXYvbWlkaSUwMmQ6IGluIChlcDolMDJ4IGNpZDolMmQgYnVmc2l6OiUyZCkgb3V0IChlcDolMDJ4IGNpZDolMmQgYnVmc2l6OiUyZClcbiIsIAotCQkJICAgICAgIGRtLAotCQkJICAgICAgIG1kZXZzW2ldLT5taW4uZXAtPmVuZHBvaW50fFVTQl9ESVJfSU4sIG1kZXZzW2ldLT5taW4uY2FibGVJZCwgbWRldnNbaV0tPm1pbi5lcC0+cmVjdkJ1ZlNpemUsCi0JCQkgICAgICAgbWRldnNbaV0tPm1vdXQuZXAtPmVuZHBvaW50LCBtZGV2c1tpXS0+bW91dC5jYWJsZUlkLCBtZGV2c1tpXS0+bW91dC5lcC0+YnVmU2l6ZSk7Ci0JCX0gZWxzZSBpZiAoIG1kZXZzW2ldLT5taW4uZXAgIT0gTlVMTCApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInVzYm1pZGk6IC9kZXYvbWlkaSUwMmQ6IGluIChlcDolMDJ4IGNpZDolMmQgYnVmc2l6OiUwMmQpXG4iLCAKLQkJCSAgICAgICBkbSwKLQkJCSAgICAgICBtZGV2c1tpXS0+bWluLmVwLT5lbmRwb2ludHxVU0JfRElSX0lOLCBtZGV2c1tpXS0+bWluLmNhYmxlSWQsIG1kZXZzW2ldLT5taW4uZXAtPnJlY3ZCdWZTaXplKTsKLQkJfSBlbHNlIGlmICggbWRldnNbaV0tPm1vdXQuZXAgIT0gTlVMTCApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gInVzYm1pZGk6IC9kZXYvbWlkaSUwMmQ6IG91dCAoZXA6JTAyeCBjaWQ6JTJkIGJ1ZnNpejolMDJkKVxuIiwgCi0JCQkgICAgICAgZG0sCi0JCQkgICAgICAgbWRldnNbaV0tPm1vdXQuZXAtPmVuZHBvaW50LCBtZGV2c1tpXS0+bW91dC5jYWJsZUlkLCBtZGV2c1tpXS0+bW91dC5lcC0+YnVmU2l6ZSk7Ci0JCX0KLQl9Ci0KLQlrZnJlZShtZGV2cyk7Ci0JcmV0dXJuIDA7Ci0KLSBlcnJvcl9lbmQ6Ci0JaWYgKCBtZGV2cyAhPSBOVUxMICkgewotCQlmb3IgKCBpPTAgOyBpPGRldmljZXMgOyBpKysgKSB7Ci0JCQlpZiAoIG1kZXZzW2ldICE9IE5VTEwgKSB7Ci0JCQkJdW5yZWdpc3Rlcl9zb3VuZF9taWRpKCBtZGV2c1tpXS0+ZGV2X21pZGkgKTsKLQkJCQlrZnJlZShtZGV2c1tpXSk7Ci0JCQl9Ci0JCX0KLQkJa2ZyZWUobWRldnMpOwotCX0KLQotCWZvciAoIGk9MCA7IGk8MTUgOyBpKysgKSB7Ci0JCWlmICggbWluc1tpXSAhPSBOVUxMICkgewotCQkJcmVtb3ZlX21pZGlfaW5fZW5kcG9pbnQoIG1pbnNbaV0gKTsKLQkJfQotCQlpZiAoIG1vdXRzW2ldICE9IE5VTEwgKSB7Ci0JCQlyZW1vdmVfbWlkaV9vdXRfZW5kcG9pbnQoIG1vdXRzW2ldICk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiogQXR0ZW1wdCB0byBzY2FuIFlBTUFIQSdzIGRldmljZSBkZXNjcmlwdG9yIGFuZCBkZXRlY3QgY29ycmVjdCB2YWx1ZXMgb2YKLSAqICB0aGVtLgotICogIFJldHVybiAwIG9uIHN1Y2NlcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqICBDYWxsZWQgYnkgdXNiX21pZGlfcHJvYmUoKTsKLSAqKi8KLQotc3RhdGljIGludCBkZXRlY3RfeWFtYWhhX2RldmljZSggc3RydWN0IHVzYl9kZXZpY2UgKmQsCi0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgdW5zaWduZWQgaW50IGlmbnVtLAotCQlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMpCi17Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOwotCXN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKnU7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCWludCBidWZTaXplOwotCWludCBpOwotCWludCBhbHRzPS0xOwotCWludCByZXQ7Ci0KLQlpZiAobGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gVVNCX1ZFTkRPUl9JRF9ZQU1BSEEpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yICggaT0wIDsgaSA8IGlmYWNlLT5udW1fYWx0c2V0dGluZzsgaSsrICkgewotCQlpbnRlcmZhY2UgPSBpZmFjZS0+YWx0c2V0dGluZyArIGk7Ci0KLQkJaWYgKCBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZUNsYXNzICE9IDI1NSB8fAotCQkgICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCApCi0JCQljb250aW51ZTsKLQkJYWx0cyA9IGludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKLQl9Ci0JaWYgKCBhbHRzID09IC0xICkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogRm91bmQgWUFNQUhBIFVTQi1NSURJIGRldmljZSBvbiBkZXYgJTA0eDolMDR4LCBpZmFjZSAlZFxuIiwKLQkgICAgICAgbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JICAgICAgIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwgaWZudW0pOwotCi0JaSA9IGQtPmFjdGNvbmZpZyAtIGQtPmNvbmZpZzsKLQlidWZmZXIgPSBkLT5yYXdkZXNjcmlwdG9yc1tpXTsKLQlidWZTaXplID0gbGUxNl90b19jcHUoZC0+YWN0Y29uZmlnLT5kZXNjLndUb3RhbExlbmd0aCk7Ci0KLQl1ID0gcGFyc2VfZGVzY3JpcHRvciggZCwgYnVmZmVyLCBidWZTaXplLCBpZm51bSwgYWx0cywgMSk7Ci0JaWYgKCB1ID09IE5VTEwgKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldCA9IGFsbG9jX3VzYl9taWRpX2RldmljZSggZCwgcywgdSApOwotCi0Ja2ZyZWUodSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qKiBTY2FuIHRhYmxlIG9mIGtub3duIGRldmljZXMgd2hpY2ggYXJlIG9ubHkgcGFydGlhbGx5IGNvbXBsaWFudCB3aXRoIAotICogdGhlIE1JRElTdHJlYW1pbmcgc3BlY2lmaWNhdGlvbi4KLSAqIENhbGxlZCBieSB1c2JfbWlkaV9wcm9iZSgpOwotICoKLSAqKi8KLQotc3RhdGljIGludCBkZXRlY3RfdmVuZG9yX3NwZWNpZmljX2RldmljZSggc3RydWN0IHVzYl9kZXZpY2UgKmQsIHVuc2lnbmVkIGludCBpZm51bSwgc3RydWN0IHVzYl9taWRpX3N0YXRlICpzICkKLXsKLQlzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICp1OwotCWludCBpOwotCWludCByZXQgPSAtRU5YSU87Ci0KLQlmb3IgKCBpPTA7IGk8VkVORE9SX1NQRUNJRklDX1VTQl9NSURJX0RFVklDRVMgOyBpKysgKSB7Ci0JCXU9Jih1c2JfbWlkaV9kZXZpY2VzW2ldKTsKLSAgICAKLQkJaWYgKCBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSB1LT5pZFZlbmRvciB8fAotCQkgICAgIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSB1LT5pZFByb2R1Y3QgfHwKLQkJICAgICBpZm51bSAhPSB1LT5pbnRlcmZhY2UgKQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gYWxsb2NfdXNiX21pZGlfZGV2aWNlKCBkLCBzLCB1ICk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoqIEF0dGVtcHQgdG8gbWF0Y2ggYW55IGNvbmZpZyBvZiBhbiBpbnRlcmZhY2UgdG8gYSBNSURJU1RSRUFNSU5HIGludGVyZmFjZS4KLSAqICBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZS4KLSAqIENhbGxlZCBieSB1c2JfbWlkaV9wcm9iZSgpOwotICoqLwotc3RhdGljIGludCBkZXRlY3RfbWlkaV9zdWJjbGFzcyhzdHJ1Y3QgdXNiX2RldmljZSAqZCwKLQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCB1bnNpZ25lZCBpbnQgaWZudW0sCi0JCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcykKLXsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0Jc3RydWN0IHVzYl9taWRpX2RldmljZSAqdTsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0JaW50IGJ1ZlNpemU7Ci0JaW50IGk7Ci0JaW50IGFsdHM9LTE7Ci0JaW50IHJldDsKLQotCWZvciAoIGk9MCA7IGkgPCBpZmFjZS0+bnVtX2FsdHNldHRpbmc7IGkrKyApIHsKLQkJaW50ZXJmYWNlID0gaWZhY2UtPmFsdHNldHRpbmcgKyBpOwotCi0JCWlmICggaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfQVVESU8gfHwKLQkJICAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IFVTQl9TVUJDTEFTU19NSURJU1RSRUFNSU5HICkKLQkJCWNvbnRpbnVlOwotCQlhbHRzID0gaW50ZXJmYWNlLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOwotCX0KLQlpZiAoIGFsdHMgPT0gLTEgKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBNSURJU1RSRUFNSU5HIG9uIGRldiAlMDR4OiUwNHgsIGlmYWNlICVkXG4iLAotCSAgICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwgCi0JICAgICAgIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwgaWZudW0pOwotCi0KLQkvKiBGcm9tIFVTQiBTcGVjIHYyLjAsIFNlY3Rpb24gOS41LgotCSAgIElmIHRoZSBjbGFzcyBvciB2ZW5kb3Igc3BlY2lmaWMgZGVzY3JpcHRvcnMgdXNlIHRoZSBzYW1lIGZvcm1hdAotCSAgIGFzIHN0YW5kYXJkIGRlc2NyaXB0b3JzIChlLmcuLCBzdGFydCB3aXRoIGEgbGVuZ3RoIGJ5dGUgYW5kCi0JICAgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUpLCB0aGV5IG11c3QgYmUgcmV0dXJuZWQgaW50ZXJsZWF2ZWQgd2l0aAotCSAgIHN0YW5kYXJkIGRlc2NyaXB0b3JzIGluIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHJldHVybmVkIGJ5Ci0JICAgYSBHZXREZXNjcmlwdG9yKENvbmZpZ3VyYXRpb24pIHJlcXVlc3QuIEluIHRoaXMgY2FzZSwgdGhlIGNsYXNzCi0JICAgb3IgdmVuZG9yLXNwZWNpZmljIGRlc2NyaXB0b3JzIG11c3QgZm9sbG93IGEgcmVsYXRlZCBzdGFuZGFyZAotCSAgIGRlc2NyaXB0b3IgdGhleSBtb2RpZnkgb3IgZXh0ZW5kLgotCSovCi0KLQlpID0gZC0+YWN0Y29uZmlnIC0gZC0+Y29uZmlnOwotCWJ1ZmZlciA9IGQtPnJhd2Rlc2NyaXB0b3JzW2ldOwotCWJ1ZlNpemUgPSBsZTE2X3RvX2NwdShkLT5hY3Rjb25maWctPmRlc2Mud1RvdGFsTGVuZ3RoKTsKLQotCXUgPSBwYXJzZV9kZXNjcmlwdG9yKCBkLCBidWZmZXIsIGJ1ZlNpemUsIGlmbnVtLCBhbHRzLCAwKTsKLQlpZiAoIHUgPT0gTlVMTCApIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gYWxsb2NfdXNiX21pZGlfZGV2aWNlKCBkLCBzLCB1ICk7Ci0KLQlrZnJlZSh1KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyoqIFdoZW4gdXNlciBoYXMgcmVxdWVzdGVkIGEgc3BlY2lmaWMgZGV2aWNlLCBtYXRjaCBpdCBleGFjdGx5LgotICoKLSAqIFVzZXMgdXZlbmRvciwgdXByb2R1Y3QsIHVpbnRlcmZhY2UsIHVhbHQsIHVtaW4sIHVtb3V0IGFuZCB1Y2FibGUuCi0gKiBDYWxsZWQgYnkgdXNiX21pZGlfcHJvYmUoKTsKLSAqCi0gKiovCi1zdGF0aWMgaW50IGRldGVjdF9ieV9oYW5kKHN0cnVjdCB1c2JfZGV2aWNlICpkLCB1bnNpZ25lZCBpbnQgaWZudW0sIHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcykKLXsKLQlzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlIHU7Ci0KLQlpZiAoIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IHV2ZW5kb3IgfHwKLQkgICAgIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSB1cHJvZHVjdCB8fAotCSAgICAgaWZudW0gIT0gdWludGVyZmFjZSApIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCB1YWx0IDwgMCApCi0JCXVhbHQgPSAtMTsKLQotCWlmICggdW1pbiAgIDwgMCB8fCB1bWluICAgPiAxNSApCi0JCXVtaW4gICA9IDB4MDEgfCBVU0JfRElSX0lOOwotCWlmICggdW1vdXQgIDwgMCB8fCB1bW91dCAgPiAxNSApCi0JCXVtb3V0ICA9IDB4MDE7Ci0JaWYgKCB1Y2FibGUgPCAwIHx8IHVjYWJsZSA+IDE1ICkKLQkJdWNhYmxlID0gMDsKLQotCXUuZGV2aWNlTmFtZSA9IE5VTEw7IC8qIEEgZmxhZyBmb3IgYWxsb2NfdXNiX21pZGlfZGV2aWNlIHRvIGdldCBkZXZpY2UKLQkJCQluYW1lIGZyb20gZGV2aWNlLiAqLwotCXUuaWRWZW5kb3IgICA9IHV2ZW5kb3I7Ci0JdS5pZFByb2R1Y3QgID0gdXByb2R1Y3Q7Ci0JdS5pbnRlcmZhY2UgID0gdWludGVyZmFjZTsKLQl1LmFsdFNldHRpbmcgPSB1YWx0OwotCi0JdS5pblswXS5lbmRwb2ludCAgICA9IHVtaW47Ci0JdS5pblswXS5jYWJsZUlkICAgICA9ICgxPDx1Y2FibGUpOwotCi0JdS5vdXRbMF0uZW5kcG9pbnQgICA9IHVtb3V0OwotCXUub3V0WzBdLmNhYmxlSWQgICAgPSAoMTw8dWNhYmxlKTsKLQotCXJldHVybiBhbGxvY191c2JfbWlkaV9kZXZpY2UoIGQsIHMsICZ1ICk7Ci19Ci0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgdXNiX21pZGlfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIAotCQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IHVzYl9taWRpX3N0YXRlICpzOwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCWludCBpZm51bSA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0KLQlzID0gKHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmICggIXMgKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbXNldCggcywgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSkgKTsKLQlJTklUX0xJU1RfSEVBRCgmcy0+bWlkaURldkxpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZzLT5pbkVuZHBvaW50TGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnMtPm91dEVuZHBvaW50TGlzdCk7Ci0Jcy0+dXNiZGV2ID0gZGV2OwotCXMtPmNvdW50ICA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwotCi0JaWYgKAotCQlkZXRlY3RfYnlfaGFuZCggZGV2LCBpZm51bSwgcyApICYmCi0JCWRldGVjdF9taWRpX3N1YmNsYXNzKCBkZXYsIGludGYsIGlmbnVtLCBzICkgJiYKLQkJZGV0ZWN0X3ZlbmRvcl9zcGVjaWZpY19kZXZpY2UoIGRldiwgaWZudW0sIHMgKSAmJgotCQlkZXRlY3RfeWFtYWhhX2RldmljZSggZGV2LCBpbnRmLCBpZm51bSwgcykgKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlkb3duKCZvcGVuX3NlbSk7Ci0JbGlzdF9hZGRfdGFpbCgmcy0+bWlkaWRldiwgJm1pZGlkZXZzKTsKLQl1cCgmb3Blbl9zZW0pOwotCi0JdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgdXNiX21pZGlfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQlzdHJ1Y3QgdXNiX21pZGlkZXYgICAgKm07Ci0KLQlpZiAoICFzICkKLQkJcmV0dXJuOwotCi0JaWYgKCBzID09IChzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKiktMSApIHsKLQkJcmV0dXJuOwotCX0KLQlpZiAoICFzLT51c2JkZXYgKSB7Ci0JCXJldHVybjsKLQl9Ci0JZG93bigmb3Blbl9zZW0pOwotCWxpc3RfZGVsKCZzLT5taWRpZGV2KTsKLQlJTklUX0xJU1RfSEVBRCgmcy0+bWlkaWRldik7Ci0Jcy0+dXNiZGV2ID0gTlVMTDsKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJnMtPm1pZGlEZXZMaXN0LCBsaXN0KSB7Ci0JCXdha2VfdXAoJihtLT5taW4uZXAtPndhaXQpKTsKLQkJd2FrZV91cCgmKG0tPm1vdXQuZXAtPndhaXQpKTsKLQkJaWYgKCBtLT5kZXZfbWlkaSA+PSAwICkgewotCQkJdW5yZWdpc3Rlcl9zb3VuZF9taWRpKG0tPmRldl9taWRpKTsKLQkJfQotCQltLT5kZXZfbWlkaSA9IC0xOwotCX0KLQlyZWxlYXNlX21pZGlfZGV2aWNlKHMpOwotCXdha2VfdXAoJm9wZW5fd2FpdCk7Ci19Ci0KLS8qIHdlIHdhbnQgdG8gbG9vayBhdCBhbGwgZGV2aWNlcyBieSBoYW5kICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKLQl7LmRyaXZlcl9pbmZvID0gNDJ9LAotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX21pZGlfZHJpdmVyID0gewotCS5uYW1lID0JCSJtaWRpIiwKLQkucHJvYmUgPQl1c2JfbWlkaV9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXVzYl9taWRpX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0JaWRfdGFibGUsCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgX19pbml0IHVzYl9taWRpX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ1c2JfbWlkaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdXNiX21pZGlfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfbWlkaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh1c2JfbWlkaV9pbml0KSA7Ci1tb2R1bGVfZXhpdCh1c2JfbWlkaV9leGl0KSA7Ci0KLSNpZmRlZiBIQVZFX0FMU0FfU1VQUE9SVAotI2RlZmluZSBTTkRSVl9NQUlOX09CSkVDVF9GSUxFCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9kcml2ZXIuaCIKLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2NvbnRyb2wuaCIKLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2luZm8uaCIKLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2NzNDZ4eC5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgc25kX3VzYm1pZGlfaW5wdXRfY2xvc2Uoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VzYm1pZGlfaW5wdXRfb3BlbihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSApCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF91c2JtaWRpX2lucHV0X3RyaWdnZXIoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sIGludCB1cCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgc25kX3VzYm1pZGlfb3V0cHV0X2Nsb3NlKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF91c2JtaWRpX291dHB1dF9vcGVuKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzbmRfdXNiX21pZGlfb3V0cHV0X3RyaWdnZXIoc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0sCi0JCQkJCWludCB1cCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc25kX3Jhd21pZGlfb3BzX3Qgc25kX3VzYm1pZGlfb3V0cHV0ID0KLXsKLSAgICAgICAgLm9wZW4gPSAgICAgICAgIHNuZF91c2JtaWRpX291dHB1dF9vcGVuLAotICAgICAgICAuY2xvc2UgPSAgICAgICAgc25kX3VzYm1pZGlfb3V0cHV0X2Nsb3NlLAotICAgICAgICAudHJpZ2dlciA9ICAgICAgc25kX3VzYm1pZGlfb3V0cHV0X3RyaWdnZXIsCi19Owotc3RhdGljIHNuZF9yYXdtaWRpX29wc190IHNuZF91c2JtaWRpX2lucHV0ID0KLXsKLSAgICAgICAgLm9wZW4gPSAgICAgICAgIHNuZF91c2JtaWRpX2lucHV0X29wZW4sCi0gICAgICAgIC5jbG9zZSA9ICAgICAgICBzbmRfdXNibWlkaV9pbnB1dF9jbG9zZSwKLSAgICAgICAgLnRyaWdnZXIgPSAgICAgIHNuZF91c2JtaWRpX2lucHV0X3RyaWdnZXIsCi19OwotCi1pbnQgc25kX3VzYm1pZGlfbWlkaShjczQ2eHhfdCAqY2hpcCwgaW50IGRldmljZSwgc25kX3Jhd21pZGlfdCAqKnJyYXdtaWRpKQotewotCXNuZF9yYXdtaWRpX3QgKnJtaWRpOwotCWludCBlcnI7Ci0KLQlpZiAocnJhd21pZGkpCi0JCSpycmF3bWlkaSA9IE5VTEw7Ci0JaWYgKChlcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2hpcC0+Y2FyZCwgIlVTQi1NSURJIiwgZGV2aWNlLCAxLCAxLCAmcm1pZGkpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0Jc3RyY3B5KHJtaWRpLT5uYW1lLCAiVVNCLU1JREkiKTsKLQotCXNuZF9yYXdtaWRpX3NldF9vcHMoIHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVQsICZzbmRfdXNibWlkaV9vdXRwdXQgKTsKLQlzbmRfcmF3bWlkaV9zZXRfb3BzKCBybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsICZzbmRfdXNibWlkaV9pbnB1dCApOwotCi0Jcm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCB8IFNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8IFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7Ci0KLQlybWlkaS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLQljaGlwLT5ybWlkaSA9IHJtaWRpOwotCWlmIChycmF3bWlkaSkKLQkJKnJyYXdtaWRpID0gTlVMTDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgc25kX3VzYm1pZGlfY3JlYXRlKCBzbmRfY2FyZF90ICogY2FyZCwKLQkJCXN0cnVjdCBwY2lfZGV2ICogcGNpLAotCQkJdXNibWlkaV90ICoqIHJjaGlwICkKLXsKLQl1c2JtaWRpX3QgKmNoaXA7Ci0JaW50IGVyciwgaWR4OwotCXNuZF9yZWdpb25fdCAqcmVnaW9uOwotCXN0YXRpYyBzbmRfZGV2aWNlX29wdF90IG9wcyA9IHsKLQkJLmRldl9mcmVlID0gc25kX3VzYm1pZGlfZGV2X2ZyZWUsCi0JfTsKLQotCSpyY2hpcCA9IE5VTEw7Ci0JY2hpcCA9IHNuZF9tYWdpY19rY2FsbG9jKCB1c2JtaWRpX3QsIDAsIEdGUF9LRVJORUwgKTsKLQlpZiAoIGNoaXAgPT0gTlVMTCApCi0JCXJldHVybiAtRU5PTUVNOwotfQotCi1FWFBPUlRfU1lNQk9MKHNuZF91c2JtaWRpX2NyZWF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNuZF91c2JtaWRpX21pZGkpOwotI2VuZGlmIC8qIEhBVkVfQUxTQV9TVVBQT1JUICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYi1taWRpLmggYi9kcml2ZXJzL3VzYi9jbGFzcy91c2ItbWlkaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNThjZGVmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYi1taWRpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSAgdXNiLW1pZGkuaCAgLS0gIFVTQi1NSURJIGRyaXZlcgotCi0gIENvcHlyaWdodCAoQykgMjAwMQotICAgICAgTkFHQU5PIERhaXN1a2UgPGJyZWV6ZS5uYWdhbm9AbmlmdHkubmUuanA+Ci0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmbmRlZiBfVVNCX01JRElfSF8KLSNkZWZpbmUgX1VTQl9NSURJX0hfCi0KLSNpZm5kZWYgVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcKLSNkZWZpbmUgVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcJMwotI2VuZGlmCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIFJvbGFuZCBNSURJIERldmljZXMgKi8KLQotI2RlZmluZSBVU0JfVkVORE9SX0lEX1JPTEFORAkJMHgwNTgyCi0jZGVmaW5lIFVTQk1JRElfUk9MQU5EX1VBMTAwRwkJMHgwMDAwCi0jZGVmaW5lIFVTQk1JRElfUk9MQU5EX01QVTY0CQkweDAwMDIKLSNkZWZpbmUgVVNCTUlESV9ST0xBTkRfU0M4ODUwCQkweDAwMDMKLSNkZWZpbmUgVVNCTUlESV9ST0xBTkRfU0M4ODIwCQkweDAwMDcKLSNkZWZpbmUgVVNCTUlESV9ST0xBTkRfVU0yCQkweDAwMDUKLSNkZWZpbmUgVVNCTUlESV9ST0xBTkRfVU0xCQkweDAwMDkKLSNkZWZpbmUgVVNCTUlESV9ST0xBTkRfUEMzMDAJCTB4MDAwOAotCi0vKiBZQU1BSEEgTUlESSBEZXZpY2VzICovCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfWUFNQUhBCQkweDA0OTkKLSNkZWZpbmUgVVNCTUlESV9ZQU1BSEFfTVUxMDAwCQkweDEwMDEKLQotLyogU3RlaW5iZXJnIE1JREkgRGV2aWNlcyAqLwotI2RlZmluZSBVU0JfVkVORE9SX0lEX1NURUlOQkVSRwkJMHgwNzYzCi0jZGVmaW5lIFVTQk1JRElfU1RFSU5CRVJHX1VTQjJNSURJCTB4MTAwMQotCi0vKiBNYXJrIG9mIHRoZSBVbmljb3JuIE1JREkgRGV2aWNlcyAqLwotI2RlZmluZSBVU0JfVkVORE9SX0lEX01PVFUJCTB4MDdmZAotI2RlZmluZSBVU0JNSURJX01PVFVfRkFTVExBTkUJCTB4MDAwMQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqLwotCi1zdHJ1Y3QgdXNiX21pZGlfZW5kcG9pbnQgewotCWludCAgZW5kcG9pbnQ7Ci0JaW50ICBjYWJsZUlkOyAvKiBpZiBiaXQtbiA9PSAxIHRoZW4gY2FibGVJZC1uIGlzIGVuYWJsZWQgKG46IDAgLSAxNSkgKi8KLX07Ci0KLXN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgewotCWNoYXIgICpkZXZpY2VOYW1lOwotCi0JdTE2ICAgIGlkVmVuZG9yOwotCXUxNiAgICBpZFByb2R1Y3Q7Ci0JaW50ICAgIGludGVyZmFjZTsKLQlpbnQgICAgYWx0U2V0dGluZzsgLyogLTE6IGF1dG8gZGV0ZWN0ICovCi0KLQlzdHJ1Y3QgdXNiX21pZGlfZW5kcG9pbnQgaW5bMTVdOwotCXN0cnVjdCB1c2JfbWlkaV9lbmRwb2ludCBvdXRbMTVdOwotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgdXNiX21pZGlfZGV2aWNlc1tdID0gewotICB7IC8qIFJvbGFuZCBVTS0xICovCi0gICAgIlJvbGFuZCBVTS0xIiwKLSAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVU0xLCAyLCAtMSwKLSAgICB7IHsgMHg4MSwgMSB9LCB7LTEsIC0xfSB9LAotICAgIHsgeyAweDAxLCAxLH0sIHstMSwgLTF9IH0sCi0gIH0sCi0KLSAgeyAvKiBSb2xhbmQgVU0tMiAqLwotICAgICJSb2xhbmQgVU0tMiIgLAotICAgIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9VTTIsIDIsIC0xLAotICAgIHsgeyAweDgxLCAzIH0sIHstMSwgLTF9IH0sCi0gICAgeyB7IDB4MDEsIDMsfSwgey0xLCAtMX0gfSwKLSAgfSwKLQotLyoqIE5leHQgZW50cnkgY291cnRlc3kgcmVzZWFyY2ggYnkgTWljaGFlbCBNaW5uIDxtaWNoYWVsQG1pY2hhZWxtaW5uLmNvbT4gKiovCi0gIHsgLyogUm9sYW5kIFVBLTEwMCAqLwotICAgICJSb2xhbmQgVUEtMTAwIiwKLSAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVUExMDBHLCAyLCAtMSwKLSAgICB7IHsgMHg4MiwgNyB9LCB7LTEsIC0xfSB9LCAvKiogY2FibGVzIDAsMSBhbmQgMiBmb3IgU1lTRVggKiovCi0gICAgeyB7IDB4MDIsIDcgfSwgey0xLCAtMX0gfSwKLSAgfSwKLQotLyoqIE5leHQgZW50cnkgY291cnRlc3kgcmVzZWFyY2ggYnkgTWljaGFlbCBNaW5uIDxtaWNoYWVsQG1pY2hhZWxtaW5uLmNvbT4gKiovCi0gIHsgLyogUm9sYW5kIFNDODg1MCAqLwotICAgICJSb2xhbmQgU0M4ODUwIiwKLSAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfU0M4ODUwLCAyLCAtMSwKLSAgICB7IHsgMHg4MSwgMHgzZiB9LCB7LTEsIC0xfSB9LAotICAgIHsgeyAweDAxLCAweDNmIH0sIHstMSwgLTF9IH0sCi0gIH0sCi0KLSAgeyAvKiBSb2xhbmQgU0M4ODIwICovCi0gICAgIlJvbGFuZCBTQzg4MjAiLAotICAgIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9TQzg4MjAsIDIsIC0xLAotICAgIHsgeyAweDgxLCAweDEzIH0sIHstMSwgLTF9IH0sCi0gICAgeyB7IDB4MDEsIDB4MTMgfSwgey0xLCAtMX0gfSwKLSAgfSwKLQotICB7IC8qIFJvbGFuZCBTQzg4MjAgKi8KLSAgICAiUm9sYW5kIFNDODgyMCIsCi0gICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1NDODgyMCwgMiwgLTEsCi0gICAgeyB7IDB4ODEsIDE3IH0sIHstMSwgLTF9IH0sCi0gICAgeyB7IDB4MDEsIDE3IH0sIHstMSwgLTF9IH0sCi0gIH0sCi0KLSAgeyAvKiBZQU1BSEEgTVUxMDAwICovCi0gICAgIllBTUFIQSBNVTEwMDAiLAotICAgIFVTQl9WRU5ET1JfSURfWUFNQUhBLCBVU0JNSURJX1lBTUFIQV9NVTEwMDAsIDAsIC0xLCAKLSAgICB7IHsgMHg4MSwgMSB9LCB7LTEsIC0xfSB9LAotICAgIHsgeyAweDAxLCAxNSB9LCB7LTEsIC0xfSB9LAotICB9LAotICB7IC8qIFJvbGFuZCBQQy0zMDAgKi8KLSAgICAiUm9sYW5kIFBDLTMwMCIsCi0gICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1BDMzAwLCAyLCAtMSwgCi0gICAgeyB7IDB4ODEsIDEgfSwgey0xLCAtMX0gfSwKLSAgICB7IHsgMHgwMSwgMSB9LCB7LTEsIC0xfSB9LAotICB9LAotICB7IC8qIE1PVFUgRmFzdGxhbmUgVVNCICovCi0gICAgIk1PVFUgRmFzdGxhbmUgVVNCIiwKLSAgICBVU0JfVkVORE9SX0lEX01PVFUsIFVTQk1JRElfTU9UVV9GQVNUTEFORSwgMSwgMCwKLSAgICB7IHsgMHg4MiwgMyB9LCB7LTEsIC0xfSB9LAotICAgIHsgeyAweDAyLCAzIH0sIHstMSwgLTF9IH0sCi0gIH0KLX07Ci0KLSNkZWZpbmUgVkVORE9SX1NQRUNJRklDX1VTQl9NSURJX0RFVklDRVMgKHNpemVvZih1c2JfbWlkaV9kZXZpY2VzKS9zaXplb2Yoc3RydWN0IHVzYl9taWRpX2RldmljZSkpCi0KLS8qIGZvciBIb3QtUGx1Z2dpbmcgKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9taWRpX2lkcyBbXSA9IHsKLQl7IC5tYXRjaF9mbGFncyA9IChVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTKSwKLQkgIC5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlOR30sCi0JeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVU0xICAgICkgfSwKLQl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9VTTIgICAgKSB9LAotCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1VBMTAwRyApIH0sCi0JeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfUEMzMDAgKSB9LAotCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1NDODg1MCApIH0sCi0JeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfU0M4ODIwICkgfSwKLQl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfWUFNQUhBLCBVU0JNSURJX1lBTUFIQV9NVTEwMDAgKSB9LAotCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9NT1RVLCAgIFVTQk1JRElfTU9UVV9GQVNUTEFORSApIH0sCi0vKgl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfU1RFSU5CRVJHLCBVU0JNSURJX1NURUlOQkVSR19VU0IyTUlESSApIH0sKi8KLQl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX21pZGlfaWRzKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2VuZGlmIC8qIF9VU0JfTUlESV9IXyAqLwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IGQzNDg0OGEuLjQ4ZGVlNGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xwLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICN1bmRlZiBERUJVRwogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCkBAIC0yMjMsNyArMjI0LDcgQEAKIAogLyogZm9yd2FyZCByZWZlcmVuY2UgdG8gbWFrZSBvdXIgbGl2ZXMgZWFzaWVyICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNibHBfZHJpdmVyOwotc3RhdGljIERFQ0xBUkVfTVVURVgodXNibHBfc2VtKTsJLyogbG9ja3MgdGhlIGV4aXN0ZW5jZSBvZiB1c2JscCdzICovCitzdGF0aWMgREVGSU5FX01VVEVYKHVzYmxwX211dGV4KTsJLyogbG9ja3MgdGhlIGV4aXN0ZW5jZSBvZiB1c2JscCdzICovCiAKIC8qCiAgKiBGdW5jdGlvbnMgZm9yIHVzYmxwIGNvbnRyb2wgbWVzc2FnZXMuCkBAIC0zNTEsNyArMzUyLDcgQEAKIAlpZiAobWlub3IgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRvd24gKCZ1c2JscF9zZW0pOworCW11dGV4X2xvY2sgKCZ1c2JscF9tdXRleCk7CiAKIAlyZXR2YWwgPSAtRU5PREVWOwogCWludGYgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnVzYmxwX2RyaXZlciwgbWlub3IpOwpAQCAtMzk5LDcgKzQwMCw3IEBACiAJCX0KIAl9CiBvdXQ6Ci0JdXAgKCZ1c2JscF9zZW0pOworCW11dGV4X3VubG9jayAoJnVzYmxwX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00MjUsMTMgKzQyNiwxMyBAQAogewogCXN0cnVjdCB1c2JscCAqdXNibHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlkb3duICgmdXNibHBfc2VtKTsKKwltdXRleF9sb2NrICgmdXNibHBfbXV0ZXgpOwogCXVzYmxwLT51c2VkID0gMDsKIAlpZiAodXNibHAtPnByZXNlbnQpIHsKIAkJdXNibHBfdW5saW5rX3VyYnModXNibHApOwogCX0gZWxzZSAJCS8qIGZpbmlzaCBjbGVhbnVwIGZyb20gZGlzY29ubmVjdCAqLwogCQl1c2JscF9jbGVhbnVwICh1c2JscCk7Ci0JdXAgKCZ1c2JscF9zZW0pOworCW11dGV4X3VubG9jayAoJnVzYmxwX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE1Miw3ICsxMTUzLDcgQEAKIAogCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaWVlZTEyODRfaWQpOwogCi0JZG93biAoJnVzYmxwX3NlbSk7CisJbXV0ZXhfbG9jayAoJnVzYmxwX211dGV4KTsKIAlkb3duICgmdXNibHAtPnNlbSk7CiAJdXNibHAtPnByZXNlbnQgPSAwOwogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOwpAQCAtMTE2Niw3ICsxMTY3LDcgQEAKIAogCWlmICghdXNibHAtPnVzZWQpCiAJCXVzYmxwX2NsZWFudXAgKHVzYmxwKTsKLQl1cCAoJnVzYmxwX3NlbSk7CisJbXV0ZXhfdW5sb2NrICgmdXNibHBfbXV0ZXgpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNibHBfaWRzIFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCAyNjg0ZTE1Li5jMGYzNzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAidXNiLmgiCkBAIC01NzAsNyArNTcxLDcgQEAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgbmJ5dGVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlkb3duICgmdXNiX2J1c19saXN0X2xvY2spOworCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAkvKiBwcmludCBkZXZpY2VzIGZvciBhbGwgYnVzc2VzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZ1c2JfYnVzX2xpc3QsIGJ1c19saXN0KSB7CiAJCS8qIHJlY3Vyc2UgdGhyb3VnaCBhbGwgY2hpbGRyZW4gb2YgdGhlIHJvb3QgaHViICovCkBAIC01ODAsMTIgKzU4MSwxMiBAQAogCQlyZXQgPSB1c2JfZGV2aWNlX2R1bXAoJmJ1ZiwgJm5ieXRlcywgJnNraXBfYnl0ZXMsIHBwb3MsIGJ1cy0+cm9vdF9odWIsIGJ1cywgMCwgMCwgMCk7CiAJCXVzYl91bmxvY2tfZGV2aWNlKGJ1cy0+cm9vdF9odWIpOwogCQlpZiAocmV0IDwgMCkgewotCQkJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmdXNiX2J1c19saXN0X2xvY2spOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQl0b3RhbF93cml0dGVuICs9IHJldDsKIAl9Ci0JdXAgKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJcmV0dXJuIHRvdGFsX3dyaXR0ZW47CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCAyYjY4OTk4Li41NDVkYTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0xMzQsMjYgKzEzNCwyMSBAQAogCX0KIAogCWlmIChwb3MgPCBzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcikpIHsKLQkJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciAqZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpkZXNjKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZGVzYykgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCW1lbWNweShkZXNjLCAmZGV2LT5kZXNjcmlwdG9yLCBzaXplb2YoZGV2LT5kZXNjcmlwdG9yKSk7Ci0JCWxlMTZfdG9fY3B1cygmZGVzYy0+YmNkVVNCKTsKLQkJbGUxNl90b19jcHVzKCZkZXNjLT5pZFZlbmRvcik7Ci0JCWxlMTZfdG9fY3B1cygmZGVzYy0+aWRQcm9kdWN0KTsKLQkJbGUxNl90b19jcHVzKCZkZXNjLT5iY2REZXZpY2UpOworCQlzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIHRlbXBfZGVzYyA7IC8qIDE4IGJ5dGVzIC0gZml0cyBvbiB0aGUgc3RhY2sgKi8KKworCQltZW1jcHkoJnRlbXBfZGVzYywgJmRldi0+ZGVzY3JpcHRvciwgc2l6ZW9mKGRldi0+ZGVzY3JpcHRvcikpOworCQlsZTE2X3RvX2NwdXMoJnRlbXBfZGVzYy5iY2RVU0IpOworCQlsZTE2X3RvX2NwdXMoJnRlbXBfZGVzYy5pZFZlbmRvcik7CisJCWxlMTZfdG9fY3B1cygmdGVtcF9kZXNjLmlkUHJvZHVjdCk7CisJCWxlMTZfdG9fY3B1cygmdGVtcF9kZXNjLmJjZERldmljZSk7CiAKIAkJbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpIC0gcG9zOwogCQlpZiAobGVuID4gbmJ5dGVzKQogCQkJbGVuID0gbmJ5dGVzOwotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgKChjaGFyICopZGVzYykgKyBwb3MsIGxlbikpIHsKLQkJCWtmcmVlKGRlc2MpOworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgKChjaGFyICopJnRlbXBfZGVzYykgKyBwb3MsIGxlbikpIHsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlnb3RvIGVycjsKIAkJfQotCQlrZnJlZShkZXNjKTsKIAogCQkqcHBvcyArPSBsZW47CiAJCWJ1ZiArPSBsZW47CkBAIC00OTgsNyArNDkzLDggQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0FERFJFU1MKKwkgJiYgcHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCWlmIChVU0JfVFlQRV9WRU5ET1IgPT0gKFVTQl9UWVBFX01BU0sgJiByZXF1ZXN0dHlwZSkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKaW5kZXggZGNlOWQ5OC4uYzE5NmYzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAogCXJldHVybiBOVUxMOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfbWF0Y2hfaWQpOworRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFKHVzYl9tYXRjaF9pZCk7CiAKIGludCB1c2JfZGV2aWNlX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiAJcmV0dXJuIHJldHZhbDsKIH0KLUVYUE9SVF9TWU1CT0wodXNiX3JlZ2lzdGVyX2RyaXZlcik7CitFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUodXNiX3JlZ2lzdGVyX2RyaXZlcik7CiAKIC8qKgogICogdXNiX2RlcmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgVVNCIGRyaXZlcgpAQCAtNDY5LDQgKzQ2OSw0IEBACiAKIAl1c2Jmc191cGRhdGVfc3BlY2lhbCgpOwogfQotRVhQT1JUX1NZTUJPTCh1c2JfZGVyZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUodXNiX2RlcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwppbmRleCAyOWI1YjJhNi4uZTBhZmI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTI2NCwxNCArMjY0LDE5IEBACiAJCSAqLwogCQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlIChkZXYsIFBDSV9EM2hvdCk7CiAJCWlmIChyZXR2YWwgPT0gMCkgewotCQkJZGV2X2RiZyAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICItLT4gUENJIEQzXG4iKTsKKwkJCWludCB3YWtlID0gZGV2aWNlX2Nhbl93YWtldXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2KTsKKworCQkJd2FrZSA9IHdha2UgJiYgZGV2aWNlX21heV93YWtldXAoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCisJCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgIi0tPiBQQ0kgRDMlc1xuIiwKKwkJCQkJd2FrZSA/ICIvd2FrZXVwIiA6ICIiKTsKIAogCQkJLyogSWdub3JlIHRoZXNlIHJldHVybiB2YWx1ZXMuICBXZSByZWx5IG9uIHBjaSBjb2RlIHRvCiAJCQkgKiByZWplY3QgcmVxdWVzdHMgdGhlIGhhcmR3YXJlIGNhbid0IGltcGxlbWVudCwgcmF0aGVyCiAJCQkgKiB0aGFuIGNvZGluZyB0aGUgc2FtZSB0aGluZy4KIAkJCSAqLwotCQkJKHZvaWQpIHBjaV9lbmFibGVfd2FrZSAoZGV2LCBQQ0lfRDNob3QsIGhjZC0+cmVtb3RlX3dha2V1cCk7Ci0JCQkodm9pZCkgcGNpX2VuYWJsZV93YWtlIChkZXYsIFBDSV9EM2NvbGQsIGhjZC0+cmVtb3RlX3dha2V1cCk7CisJCQkodm9pZCkgcGNpX2VuYWJsZV93YWtlIChkZXYsIFBDSV9EM2hvdCwgd2FrZSk7CisJCQkodm9pZCkgcGNpX2VuYWJsZV93YWtlIChkZXYsIFBDSV9EM2NvbGQsIHdha2UpOwogCQl9IGVsc2UgewogCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAiUENJIEQzIHN1c3BlbmQgZmFpbCwgJWRcbiIsCiAJCQkJCXJldHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCAwMDE4YmJjLi5mYmQ5MzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApAQCAtOTMsNyArOTQsNyBAQAogc3RhdGljIHN0cnVjdCB1c2JfYnVzbWFwIGJ1c21hcDsKIAogLyogdXNlZCB3aGVuIHVwZGF0aW5nIGxpc3Qgb2YgaGNkcyAqLwotREVDTEFSRV9NVVRFWCAodXNiX2J1c19saXN0X2xvY2spOwkvKiBleHBvcnRlZCBvbmx5IGZvciB1c2JmcyAqLworREVGSU5FX01VVEVYKHVzYl9idXNfbGlzdF9sb2NrKTsJLyogZXhwb3J0ZWQgb25seSBmb3IgdXNiZnMgKi8KIEVYUE9SVF9TWU1CT0xfR1BMICh1c2JfYnVzX2xpc3RfbG9jayk7CiAKIC8qIHVzZWQgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byB2aXJ0dWFsIHJvb3QgaHVicyAqLwpAQCAtMzY2LDIxICszNjcsMzkgQEAKIAogCS8qIERFVklDRSBSRVFVRVNUUyAqLwogCisJLyogVGhlIHJvb3QgaHViJ3MgcmVtb3RlIHdha2V1cCBlbmFibGUgYml0IGlzIGltcGxlbWVudGVkIHVzaW5nCisJICogZHJpdmVyIG1vZGVsIHdha2V1cCBmbGFncy4gIElmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIHdha2V1cAorCSAqIHRocm91Z2ggVVNCLCB1c2Vyc3BhY2UgbWF5IGNoYW5nZSB0aGUgZGVmYXVsdCAiYWxsb3cgd2FrZXVwIgorCSAqIHBvbGljeSB0aHJvdWdoIHN5c2ZzIG9yIHRoZXNlIGNhbGxzLgorCSAqCisJICogTW9zdCByb290IGh1YnMgc3VwcG9ydCB3YWtldXAgZnJvbSBkb3duc3RyZWFtIGRldmljZXMsIGZvcgorCSAqIHJ1bnRpbWUgcG93ZXIgbWFuYWdlbWVudCAoZGlzYWJsaW5nIFVTQiBjbG9ja3MgYW5kIHJlZHVjaW5nCisJICogVkJVUyBwb3dlciB1c2FnZSkuICBIb3dldmVyLCBub3QgYWxsIG9mIHRoZW0gZG8gc287IHNpbGljb24sCisJICogYm9hcmQsIGFuZCBCSU9TIGJ1Z3MgaGVyZSBhcmUgbm90IHVuY29tbW9uLCBzbyB0aGVzZSBjYW4ndAorCSAqIGJlIHRyZWF0ZWQgcXVpdGUgbGlrZSBleHRlcm5hbCBodWJzLgorCSAqCisJICogTGlrZXdpc2UsIG5vdCBhbGwgcm9vdCBodWJzIHdpbGwgcGFzcyB3YWtldXAgZXZlbnRzIHVwc3RyZWFtLAorCSAqIHRvIHdha2UgdXAgdGhlIHdob2xlIHN5c3RlbS4gIFNvIGRvbid0IGFzc3VtZSByb290IGh1YiBhbmQKKwkgKiBjb250cm9sbGVyIGNhcGFiaWxpdGllcyBhcmUgaWRlbnRpY2FsLgorCSAqLworCiAJY2FzZSBEZXZpY2VSZXF1ZXN0IHwgVVNCX1JFUV9HRVRfU1RBVFVTOgotCQl0YnVmIFswXSA9IChoY2QtPnJlbW90ZV93YWtldXAgPDwgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKQorCQl0YnVmIFswXSA9IChkZXZpY2VfbWF5X3dha2V1cCgmaGNkLT5zZWxmLnJvb3RfaHViLT5kZXYpCisJCQkJCTw8IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKIAkJCQl8ICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKTsKIAkJdGJ1ZiBbMV0gPSAwOwogCQlsZW4gPSAyOwogCQlicmVhazsKIAljYXNlIERldmljZU91dFJlcXVlc3QgfCBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CiAJCWlmICh3VmFsdWUgPT0gVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKQotCQkJaGNkLT5yZW1vdGVfd2FrZXVwID0gMDsKKwkJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmaGNkLT5zZWxmLnJvb3RfaHViLT5kZXYsIDApOwogCQllbHNlCiAJCQlnb3RvIGVycm9yOwogCQlicmVhazsKIAljYXNlIERldmljZU91dFJlcXVlc3QgfCBVU0JfUkVRX1NFVF9GRUFUVVJFOgotCQlpZiAoaGNkLT5jYW5fd2FrZXVwICYmIHdWYWx1ZSA9PSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApCi0JCQloY2QtPnJlbW90ZV93YWtldXAgPSAxOworCQlpZiAoZGV2aWNlX2Nhbl93YWtldXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2KQorCQkJCSYmIHdWYWx1ZSA9PSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApCisJCQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAxKTsKIAkJZWxzZQogCQkJZ290byBlcnJvcjsKIAkJYnJlYWs7CkBAIC00MDksNyArNDI4LDcgQEAKIAkJCQlidWZwID0gZnNfcmhfY29uZmlnX2Rlc2NyaXB0b3I7CiAJCQkJbGVuID0gc2l6ZW9mIGZzX3JoX2NvbmZpZ19kZXNjcmlwdG9yOwogCQkJfQotCQkJaWYgKGhjZC0+Y2FuX3dha2V1cCkKKwkJCWlmIChkZXZpY2VfY2FuX3dha2V1cCgmaGNkLT5zZWxmLnJvb3RfaHViLT5kZXYpKQogCQkJCXBhdGNoX3dha2V1cCA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfRFRfU1RSSU5HIDw8IDg6CkBAIC03NjEsMTQgKzc4MCwxNCBAQAogewogCWludCBidXNudW07CiAKLQlkb3duICgmdXNiX2J1c19saXN0X2xvY2spOworCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAlidXNudW0gPSBmaW5kX25leHRfemVyb19iaXQgKGJ1c21hcC5idXNtYXAsIFVTQl9NQVhCVVMsIDEpOwogCWlmIChidXNudW0gPCBVU0JfTUFYQlVTKSB7CiAJCXNldF9iaXQgKGJ1c251bSwgYnVzbWFwLmJ1c21hcCk7CiAJCWJ1cy0+YnVzbnVtID0gYnVzbnVtOwogCX0gZWxzZSB7CiAJCXByaW50ayAoS0VSTl9FUlIgIiVzOiB0b28gbWFueSBidXNlc1xuIiwgdXNiY29yZV9uYW1lKTsKLQkJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJCXJldHVybiAtRTJCSUc7CiAJfQogCkBAIC03NzYsNyArNzk1LDcgQEAKIAkJCQkJICAgICBidXMtPmNvbnRyb2xsZXIsICJ1c2JfaG9zdCVkIiwgYnVzbnVtKTsKIAlpZiAoSVNfRVJSKGJ1cy0+Y2xhc3NfZGV2KSkgewogCQljbGVhcl9iaXQoYnVzbnVtLCBidXNtYXAuYnVzbWFwKTsKLQkJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJCXJldHVybiBQVFJfRVJSKGJ1cy0+Y2xhc3NfZGV2KTsKIAl9CiAKQEAgLTc4NCw3ICs4MDMsNyBAQAogCiAJLyogQWRkIGl0IHRvIHRoZSBsb2NhbCBsaXN0IG9mIGJ1c2VzICovCiAJbGlzdF9hZGQgKCZidXMtPmJ1c19saXN0LCAmdXNiX2J1c19saXN0KTsKLQl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAogCXVzYl9ub3RpZnlfYWRkX2J1cyhidXMpOwogCkBAIC04MDksOSArODI4LDkgQEAKIAkgKiBjb250cm9sbGVyIGNvZGUsIGFzIHdlbGwgYXMgaGF2aW5nIGl0IGNhbGwgdGhpcyB3aGVuIGNsZWFuaW5nCiAJICogaXRzZWxmIHVwCiAJICovCi0JZG93biAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJbGlzdF9kZWwgKCZidXMtPmJ1c19saXN0KTsKLQl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAogCXVzYl9ub3RpZnlfcmVtb3ZlX2J1cyhidXMpOwogCkBAIC04MjIsMTggKzg0MSwxNyBAQAogCiAvKioKICAqIHJlZ2lzdGVyX3Jvb3RfaHViIC0gY2FsbGVkIGJ5IHVzYl9hZGRfaGNkKCkgdG8gcmVnaXN0ZXIgYSByb290IGh1YgotICogQHVzYl9kZXY6IHRoZSB1c2Igcm9vdCBodWIgZGV2aWNlIHRvIGJlIHJlZ2lzdGVyZWQuCiAgKiBAaGNkOiBob3N0IGNvbnRyb2xsZXIgZm9yIHRoaXMgcm9vdCBodWIKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgcm9vdCBodWIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbS4gIEl0IHNldHMgdXAKLSAqIHRoZSBkZXZpY2UgcHJvcGVybHkgaW4gdGhlIGRldmljZSB0cmVlIGFuZCBzdG9yZXMgdGhlIHJvb3RfaHViIHBvaW50ZXIKLSAqIGluIHRoZSBidXMgc3RydWN0dXJlLCB0aGVuIGNhbGxzIHVzYl9uZXdfZGV2aWNlKCkgdG8gcmVnaXN0ZXIgdGhlIHVzYgotICogZGV2aWNlLiAgSXQgYWxzbyBhc3NpZ25zIHRoZSByb290IGh1YidzIFVTQiBhZGRyZXNzIChhbHdheXMgMSkuCisgKiB0aGUgZGV2aWNlIHByb3Blcmx5IGluIHRoZSBkZXZpY2UgdHJlZSBhbmQgdGhlbiBjYWxscyB1c2JfbmV3X2RldmljZSgpCisgKiB0byByZWdpc3RlciB0aGUgdXNiIGRldmljZS4gIEl0IGFsc28gYXNzaWducyB0aGUgcm9vdCBodWIncyBVU0IgYWRkcmVzcworICogKGFsd2F5cyAxKS4KICAqLwotc3RhdGljIGludCByZWdpc3Rlcl9yb290X2h1YiAoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCi0JCXN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgaW50IHJlZ2lzdGVyX3Jvb3RfaHViKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IGRldmljZSAqcGFyZW50X2RldiA9IGhjZC0+c2VsZi5jb250cm9sbGVyOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaGNkLT5zZWxmLnJvb3RfaHViOwogCWNvbnN0IGludCBkZXZudW0gPSAxOwogCWludCByZXR2YWw7CiAKQEAgLTg0NCwxNCArODYyLDEyIEBACiAJc2V0X2JpdCAoZGV2bnVtLCB1c2JfZGV2LT5idXMtPmRldm1hcC5kZXZpY2VtYXApOwogCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVzYl9kZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKIAotCWRvd24gKCZ1c2JfYnVzX2xpc3RfbG9jayk7Ci0JdXNiX2Rldi0+YnVzLT5yb290X2h1YiA9IHVzYl9kZXY7CisJbXV0ZXhfbG9jaygmdXNiX2J1c19saXN0X2xvY2spOwogCiAJdXNiX2Rldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKIAlyZXR2YWwgPSB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9ERVZJQ0VfU0laRSk7CiAJaWYgKHJldHZhbCAhPSBzaXplb2YgdXNiX2Rldi0+ZGVzY3JpcHRvcikgewotCQl1c2JfZGV2LT5idXMtPnJvb3RfaHViID0gTlVMTDsKLQkJdXAgKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJCW11dGV4X3VubG9jaygmdXNiX2J1c19saXN0X2xvY2spOwogCQlkZXZfZGJnIChwYXJlbnRfZGV2LCAiY2FuJ3QgcmVhZCAlcyBkZXZpY2UgZGVzY3JpcHRvciAlZFxuIiwKIAkJCQl1c2JfZGV2LT5kZXYuYnVzX2lkLCByZXR2YWwpOwogCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVNU0dTSVpFOwpAQCAtODU5LDExICs4NzUsMTAgQEAKIAogCXJldHZhbCA9IHVzYl9uZXdfZGV2aWNlICh1c2JfZGV2KTsKIAlpZiAocmV0dmFsKSB7Ci0JCXVzYl9kZXYtPmJ1cy0+cm9vdF9odWIgPSBOVUxMOwogCQlkZXZfZXJyIChwYXJlbnRfZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgcm9vdCBodWIgZm9yICVzLCAlZFxuIiwKIAkJCQl1c2JfZGV2LT5kZXYuYnVzX2lkLCByZXR2YWwpOwogCX0KLQl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAogCWlmIChyZXR2YWwgPT0gMCkgewogCQlzcGluX2xvY2tfaXJxICgmaGNkX3Jvb3RfaHViX2xvY2spOwpAQCAtMTA5MCw3ICsxMTA1LDYgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmhjZF9kYXRhX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbF9pbml0ICgmdXJiLT51cmJfbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmhjZF9kYXRhX2xvY2ssIGZsYWdzKTsKLQl1c2JfcHV0X2RldiAodXJiLT5kZXYpOwogfQogCiAKQEAgLTExMzAsNyArMTE0NCw2IEBACiAJY2FzZSBIQ19TVEFURV9SVU5OSU5HOgogCWNhc2UgSENfU1RBVEVfUkVTVU1JTkc6CiBkb2l0OgotCQl1c2JfZ2V0X2RldiAodXJiLT5kZXYpOwogCQlsaXN0X2FkZF90YWlsICgmdXJiLT51cmJfbGlzdCwgJmVwLT51cmJfbGlzdCk7CiAJCXN0YXR1cyA9IDA7CiAJCWJyZWFrOwpAQCAtMTc3MSwxMiArMTc4NCwxMCBAQAogCiAJc2V0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7CiAKLQkvKiB0aWxsIG5vdyBIQyBoYXMgYmVlbiBpbiBhbiBpbmRldGVybWluYXRlIHN0YXRlIC4uLiAqLwotCWlmIChoY2QtPmRyaXZlci0+cmVzZXQgJiYgKHJldHZhbCA9IGhjZC0+ZHJpdmVyLT5yZXNldChoY2QpKSA8IDApIHsKLQkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgImNhbid0IHJlc2V0XG4iKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KKwkvKiBIQyBpcyBpbiByZXNldCBzdGF0ZSwgYnV0IGFjY2Vzc2libGUuICBOb3cgZG8gdGhlIG9uZS10aW1lIGluaXQsCisJICogYm90dG9tIHVwIHNvIHRoYXQgaGNkcyBjYW4gY3VzdG9taXplIHRoZSByb290IGh1YnMgYmVmb3JlIGtodWJkCisJICogc3RhcnRzIHRhbGtpbmcgdG8gdGhlbS4gIChOb3RlLCBidXMgaWQgaXMgYXNzaWduZWQgZWFybHkgdG9vLikKKwkgKi8KIAlpZiAoKHJldHZhbCA9IGhjZF9idWZmZXJfY3JlYXRlKGhjZCkpICE9IDApIHsKIAkJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInBvb2wgYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTE3ODUsNiArMTc5NiwzNiBAQAogCWlmICgocmV0dmFsID0gdXNiX3JlZ2lzdGVyX2J1cygmaGNkLT5zZWxmKSkgPCAwKQogCQlnb3RvIGVycl9yZWdpc3Rlcl9idXM7CiAKKwlpZiAoKHJoZGV2ID0gdXNiX2FsbG9jX2RldihOVUxMLCAmaGNkLT5zZWxmLCAwKSkgPT0gTlVMTCkgeworCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAidW5hYmxlIHRvIGFsbG9jYXRlIHJvb3QgaHViXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NhdGVfcm9vdF9odWI7CisJfQorCXJoZGV2LT5zcGVlZCA9IChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfVVNCMikgPyBVU0JfU1BFRURfSElHSCA6CisJCQlVU0JfU1BFRURfRlVMTDsKKwloY2QtPnNlbGYucm9vdF9odWIgPSByaGRldjsKKworCS8qICJyZXNldCIgaXMgbWlzbmFtZWQ7IGl0cyByb2xlIGlzIG5vdyBvbmUtdGltZSBpbml0LiB0aGUgY29udHJvbGxlcgorCSAqIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiByZXNldCAoYW5kIGJvb3QgZmlybXdhcmUga2lja2VkIG9mZiBldGMpLgorCSAqLworCWlmIChoY2QtPmRyaXZlci0+cmVzZXQgJiYgKHJldHZhbCA9IGhjZC0+ZHJpdmVyLT5yZXNldChoY2QpKSA8IDApIHsKKwkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgImNhbid0IHNldHVwXG4iKTsKKwkJZ290byBlcnJfaGNkX2RyaXZlcl9zZXR1cDsKKwl9CisKKwkvKiB3YWtldXAgZmxhZyBpbml0IGlzIGluIHRyYW5zaXRpb247IGZvciBub3cgd2UgY2FuJ3QgcmVseSBvbiBQQ0kgdG8KKwkgKiBpbml0aWFsaXplIHRoZXNlIGJpdHMgcHJvcGVybHksIHNvIHdlIGxldCByZXNldCgpIG92ZXJyaWRlIGl0LgorCSAqIFRoaXMgaW5pdCBzaG91bGQgX3ByZWNlZGVfIHRoZSByZXNldCgpIG9uY2UgUENJIGJlaGF2ZXMuCisJICovCisJZGV2aWNlX2luaXRfd2FrZXVwKCZyaGRldi0+ZGV2LAorCQkJZGV2aWNlX2Nhbl93YWtldXAoaGNkLT5zZWxmLmNvbnRyb2xsZXIpKTsKKworCS8qIE5PVEU6IHJvb3QgaHViIGFuZCBjb250cm9sbGVyIGNhcGFiaWxpdGllcyBtYXkgbm90IGJlIHRoZSBzYW1lICovCisJaWYgKGRldmljZV9jYW5fd2FrZXVwKGhjZC0+c2VsZi5jb250cm9sbGVyKQorCQkJJiYgZGV2aWNlX2Nhbl93YWtldXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2KSkKKwkJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInN1cHBvcnRzIFVTQiByZW1vdGUgd2FrZXVwXG4iKTsKKworCS8qIGVuYWJsZSBpcnFzIGp1c3QgYmVmb3JlIHdlIHN0YXJ0IHRoZSBjb250cm9sbGVyICovCiAJaWYgKGhjZC0+ZHJpdmVyLT5pcnEpIHsKIAkJY2hhcglidWZbOF0sICpidWZwID0gYnVmOwogCkBAIC0xODE2LDU2ICsxODU3LDMyIEBACiAJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGNkLT5yc3JjX3N0YXJ0KTsKIAl9CiAKLQkvKiBBbGxvY2F0ZSB0aGUgcm9vdCBodWIgYmVmb3JlIGNhbGxpbmcgaGNkLT5kcml2ZXItPnN0YXJ0KCksCi0JICogYnV0IGRvbid0IHJlZ2lzdGVyIGl0IHVudGlsIGFmdGVyd2FyZCBzbyB0aGF0IHRoZSBoYXJkd2FyZQotCSAqIGlzIHJ1bm5pbmcuCi0JICovCi0JaWYgKChyaGRldiA9IHVzYl9hbGxvY19kZXYoTlVMTCwgJmhjZC0+c2VsZiwgMCkpID09IE5VTEwpIHsKLQkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgInVuYWJsZSB0byBhbGxvY2F0ZSByb290IGh1YlxuIik7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2FsbG9jYXRlX3Jvb3RfaHViOwotCX0KLQotCS8qIEFsdGhvdWdoIGluIHByaW5jaXBsZSBoY2QtPmRyaXZlci0+c3RhcnQoKSBtaWdodCBuZWVkIHRvIHVzZSByaGRldiwKLQkgKiBub25lIG9mIHRoZSBjdXJyZW50IGRyaXZlcnMgZG8uCi0JICovCiAJaWYgKChyZXR2YWwgPSBoY2QtPmRyaXZlci0+c3RhcnQoaGNkKSkgPCAwKSB7CiAJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJzdGFydHVwIGVycm9yICVkXG4iLCByZXR2YWwpOwogCQlnb3RvIGVycl9oY2RfZHJpdmVyX3N0YXJ0OwogCX0KIAotCS8qIGhjZC0+ZHJpdmVyLT5zdGFydCgpIHJlcG9ydGVkIGNhbl93YWtldXAsIHByb2JhYmx5IHdpdGgKLQkgKiBhc3Npc3RhbmNlIGZyb20gYm9hcmQncyBib290IGZpcm13YXJlLgotCSAqIE5PVEU6ICBub3JtYWwgZGV2aWNlcyB3b24ndCBlbmFibGUgd2FrZXVwIGJ5IGRlZmF1bHQuCi0JICovCi0JaWYgKGhjZC0+Y2FuX3dha2V1cCkKLQkJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInN1cHBvcnRzIFVTQiByZW1vdGUgd2FrZXVwXG4iKTsKLQloY2QtPnJlbW90ZV93YWtldXAgPSBoY2QtPmNhbl93YWtldXA7Ci0KLQlyaGRldi0+c3BlZWQgPSAoaGNkLT5kcml2ZXItPmZsYWdzICYgSENEX1VTQjIpID8gVVNCX1NQRUVEX0hJR0ggOgotCQkJVVNCX1NQRUVEX0ZVTEw7CisJLyogc3RhcnRpbmcgaGVyZSwgdXNiY29yZSB3aWxsIHBheSBhdHRlbnRpb24gdG8gdGhpcyByb290IGh1YiAqLwogCXJoZGV2LT5idXNfbUEgPSBtaW4oNTAwdSwgaGNkLT5wb3dlcl9idWRnZXQpOwotCWlmICgocmV0dmFsID0gcmVnaXN0ZXJfcm9vdF9odWIocmhkZXYsIGhjZCkpICE9IDApCisJaWYgKChyZXR2YWwgPSByZWdpc3Rlcl9yb290X2h1YihoY2QpKSAhPSAwKQogCQlnb3RvIGVycl9yZWdpc3Rlcl9yb290X2h1YjsKIAogCWlmIChoY2QtPnVzZXNfbmV3X3BvbGxpbmcgJiYgaGNkLT5wb2xsX3JoKQogCQl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CiAJcmV0dXJuIHJldHZhbDsKIAotIGVycl9yZWdpc3Rlcl9yb290X2h1YjoKK2Vycl9yZWdpc3Rlcl9yb290X2h1YjoKIAloY2QtPmRyaXZlci0+c3RvcChoY2QpOwotCi0gZXJyX2hjZF9kcml2ZXJfc3RhcnQ6Ci0JdXNiX3B1dF9kZXYocmhkZXYpOwotCi0gZXJyX2FsbG9jYXRlX3Jvb3RfaHViOgorZXJyX2hjZF9kcml2ZXJfc3RhcnQ6CiAJaWYgKGhjZC0+aXJxID49IDApCiAJCWZyZWVfaXJxKGlycW51bSwgaGNkKTsKLQotIGVycl9yZXF1ZXN0X2lycToKK2Vycl9yZXF1ZXN0X2lycToKK2Vycl9oY2RfZHJpdmVyX3NldHVwOgorCWhjZC0+c2VsZi5yb290X2h1YiA9IE5VTEw7CisJdXNiX3B1dF9kZXYocmhkZXYpOworZXJyX2FsbG9jYXRlX3Jvb3RfaHViOgogCXVzYl9kZXJlZ2lzdGVyX2J1cygmaGNkLT5zZWxmKTsKLQotIGVycl9yZWdpc3Rlcl9idXM6CitlcnJfcmVnaXN0ZXJfYnVzOgogCWhjZF9idWZmZXJfZGVzdHJveShoY2QpOwogCXJldHVybiByZXR2YWw7CiB9IApAQCAtMTg5MSw5ICsxOTA4LDkgQEAKIAloY2QtPnJoX3JlZ2lzdGVyZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycSAoJmhjZF9yb290X2h1Yl9sb2NrKTsKIAotCWRvd24oJnVzYl9idXNfbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJdXNiX2Rpc2Nvbm5lY3QoJmhjZC0+c2VsZi5yb290X2h1Yik7Ci0JdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKIAogCWhjZC0+cG9sbF9yaCA9IDA7CiAJZGVsX3RpbWVyX3N5bmMoJmhjZC0+cmhfdGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKaW5kZXggNTkxYjVhYS4uNzAyMmFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC03OCw4ICs3OCw2IEBACiAjZGVmaW5lIEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUJMHgwMDAwMDAwMQogI2RlZmluZSBIQ0RfRkxBR19TQVdfSVJRCTB4MDAwMDAwMDIKIAotCXVuc2lnbmVkCQljYW5fd2FrZXVwOjE7CS8qIGh3IHN1cHBvcnRzIHdha2V1cD8gKi8KLQl1bnNpZ25lZAkJcmVtb3RlX3dha2V1cDoxOy8qIHN3IHNob3VsZCB1c2Ugd2FrZXVwPyAqLwogCXVuc2lnbmVkCQlyaF9yZWdpc3RlcmVkOjE7LyogaXMgcm9vdCBodWIgcmVnaXN0ZXJlZD8gKi8KIAogCS8qIFRoZSBuZXh0IGZsYWcgaXMgYSBzdG9wZ2FwLCB0byBiZSByZW1vdmVkIHdoZW4gYWxsIHRoZSBIQ0RzCkBAIC0zNjQsNyArMzYyLDcgQEAKIC8qIGV4cG9ydGVkIG9ubHkgd2l0aGluIHVzYmNvcmUgKi8KIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdXNiX2J1c19saXN0OwotZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgdXNiX2J1c19saXN0X2xvY2s7CitleHRlcm4gc3RydWN0IG11dGV4IHVzYl9idXNfbGlzdF9sb2NrOwogZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHVzYl9raWxsX3VyYl9xdWV1ZTsKIAogZXh0ZXJuIHN0cnVjdCB1c2JfYnVzICp1c2JfYnVzX2dldCAoc3RydWN0IHVzYl9idXMgKmJ1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA2NTBkNWVlLi44ZTY1ZjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTAwNSwxMiArMTAwNiwxOCBAQAogCQk7CS8qIGRvIG5vdGhpbmcgKi8KIAllbHNlIGlmIChuZXdfc3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CiAJCXVkZXYtPnN0YXRlID0gbmV3X3N0YXRlOwotCQlpZiAobmV3X3N0YXRlID09IFVTQl9TVEFURV9DT05GSUdVUkVEKQotCQkJZGV2aWNlX2luaXRfd2FrZXVwKCZ1ZGV2LT5kZXYsCi0JCQkJKHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5ibUF0dHJpYnV0ZXMKLQkJCQkgJiBVU0JfQ09ORklHX0FUVF9XQUtFVVApKTsKLQkJZWxzZSBpZiAobmV3X3N0YXRlICE9IFVTQl9TVEFURV9TVVNQRU5ERUQpCi0JCQlkZXZpY2VfaW5pdF93YWtldXAoJnVkZXYtPmRldiwgMCk7CisKKwkJLyogcm9vdCBodWIgd2FrZXVwIGNhcGFiaWxpdGllcyBhcmUgbWFuYWdlZCBvdXQtb2YtYmFuZAorCQkgKiBhbmQgbWF5IGludm9sdmUgc2lsaWNvbiBlcnJhdGEgLi4uIGlnbm9yZSB0aGVtIGhlcmUuCisJCSAqLworCQlpZiAodWRldi0+cGFyZW50KSB7CisJCQlpZiAobmV3X3N0YXRlID09IFVTQl9TVEFURV9DT05GSUdVUkVEKQorCQkJCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LAorCQkJCQkodWRldi0+YWN0Y29uZmlnLT5kZXNjLmJtQXR0cmlidXRlcworCQkJCQkgJiBVU0JfQ09ORklHX0FUVF9XQUtFVVApKTsKKwkJCWVsc2UgaWYgKG5ld19zdGF0ZSAhPSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQkJCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LCAwKTsKKwkJfQogCX0gZWxzZQogCQlyZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHVkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9zdGF0ZV9sb2NrLCBmbGFncyk7CkBAIC0xMTcyLDggKzExNzksMTEgQEAKIAljID0gdWRldi0+Y29uZmlnOwogCW51bV9jb25maWdzID0gdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7CiAJZm9yIChpID0gMDsgaSA8IG51bV9jb25maWdzOyAoaSsrLCBjKyspKSB7Ci0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmRlc2MgPQotCQkJCSZjLT5pbnRmX2NhY2hlWzBdLT5hbHRzZXR0aW5nLT5kZXNjOworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCSpkZXNjID0gTlVMTDsKKworCQkvKiBJdCdzIHBvc3NpYmxlIHRoYXQgYSBjb25maWcgaGFzIG5vIGludGVyZmFjZXMhICovCisJCWlmIChjLT5kZXNjLmJOdW1JbnRlcmZhY2VzID4gMCkKKwkJCWRlc2MgPSAmYy0+aW50Zl9jYWNoZVswXS0+YWx0c2V0dGluZy0+ZGVzYzsKIAogCQkvKgogCQkgKiBIUCdzIFVTQiBidXMtcG93ZXJlZCBrZXlib2FyZCBoYXMgb25seSBvbmUgY29uZmlndXJhdGlvbgpAQCAtMTIwOCw3ICsxMjE4LDggQEAKIAkJLyogSWYgdGhlIGZpcnN0IGNvbmZpZydzIGZpcnN0IGludGVyZmFjZSBpcyBDT01NLzIvMHhmZgogCQkgKiAoTVNGVCBSTkRJUyksIHJ1bGUgaXQgb3V0IHVubGVzcyBMaW51eCBoYXMgaG9zdC1zaWRlCiAJCSAqIFJORElTIHN1cHBvcnQuICovCi0JCWlmIChpID09IDAgJiYgZGVzYy0+YkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19DT01NCisJCWlmIChpID09IDAgJiYgZGVzYworCQkJCSYmIGRlc2MtPmJJbnRlcmZhY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQ09NTQogCQkJCSYmIGRlc2MtPmJJbnRlcmZhY2VTdWJDbGFzcyA9PSAyCiAJCQkJJiYgZGVzYy0+YkludGVyZmFjZVByb3RvY29sID09IDB4ZmYpIHsKICNpZm5kZWYgQ09ORklHX1VTQl9ORVRfUk5ESVMKQEAgLTEyMjQsOCArMTIzNSw4IEBACiAJCSAqIHRoYW4gYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLiAqLwogCQllbHNlIGlmICh1ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyAhPQogCQkJCQkJVVNCX0NMQVNTX1ZFTkRPUl9TUEVDICYmCi0JCQkJZGVzYy0+YkludGVyZmFjZUNsYXNzICE9Ci0JCQkJCQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMpIHsKKwkJCQkoIWRlc2MgfHwgZGVzYy0+YkludGVyZmFjZUNsYXNzICE9CisJCQkJCQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMpKSB7CiAJCQliZXN0ID0gYzsKIAkJCWJyZWFrOwogCQl9CkBAIC0xODc2LDE4ICsxODg3LDE4IEBACiAJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKIAkvKiBzZWxlY3RpdmUgcmVzdW1lIG9mIG9uZSBkb3duc3RyZWFtIGh1Yi10by1kZXZpY2UgcG9ydCAqLwogCWlmICh1ZGV2LT5wYXJlbnQpIHsKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKIAkJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKIAkJCS8vIE5PVEUgc3dzdXNwIG1heSBib3JrIHVzLCBkZXZpY2Ugc3RhdGUgYmVpbmcgd3JvbmcuLi4KIAkJCS8vIE5PVEUgdGhpcyBmYWlscyBpZiBwYXJlbnQgaXMgYWxzbyBzdXNwZW5kZWQuLi4KIAkJCXN0YXR1cyA9IGh1Yl9wb3J0X3Jlc3VtZShoZGV2X3RvX2h1Yih1ZGV2LT5wYXJlbnQpLAogCQkJCQl1ZGV2LT5wb3J0bnVtLCB1ZGV2KTsKIAkJfSBlbHNlCisjZW5kaWYKIAkJCXN0YXR1cyA9IDA7CiAJfSBlbHNlCi0jZW5kaWYKIAkJc3RhdHVzID0gZmluaXNoX2RldmljZV9yZXN1bWUodWRldik7CiAJaWYgKHN0YXR1cyA8IDApCiAJCWRldl9kYmcoJnVkZXYtPmRldiwgImNhbid0IHJlc3VtZSwgc3RhdHVzICVkXG4iLApAQCAtMjE2Miw3ICsyMTczLDcgQEAKIGh1Yl9wb3J0X2luaXQgKHN0cnVjdCB1c2JfaHViICpodWIsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcG9ydDEsCiAJCWludCByZXRyeV9jb3VudGVyKQogewotCXN0YXRpYyBERUNMQVJFX01VVEVYKHVzYl9hZGRyZXNzMF9zZW0pOworCXN0YXRpYyBERUZJTkVfTVVURVgodXNiX2FkZHJlc3MwX211dGV4KTsKIAogCXN0cnVjdCB1c2JfZGV2aWNlCSpoZGV2ID0gaHViLT5oZGV2OwogCWludAkJCWksIGosIHJldHZhbDsKQEAgLTIxODMsNyArMjE5NCw3IEBACiAJaWYgKG9sZHNwZWVkID09IFVTQl9TUEVFRF9MT1cpCiAJCWRlbGF5ID0gSFVCX0xPTkdfUkVTRVRfVElNRTsKIAotCWRvd24oJnVzYl9hZGRyZXNzMF9zZW0pOworCW11dGV4X2xvY2soJnVzYl9hZGRyZXNzMF9tdXRleCk7CiAKIAkvKiBSZXNldCB0aGUgZGV2aWNlOyBmdWxsIHNwZWVkIG1heSBtb3JwaCB0byBoaWdoIHNwZWVkICovCiAJcmV0dmFsID0gaHViX3BvcnRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOwpAQCAtMjM4MSw3ICsyMzkyLDcgQEAKIGZhaWw6CiAJaWYgKHJldHZhbCkKIAkJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQxLCAwKTsKLQl1cCgmdXNiX2FkZHJlc3MwX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZ1c2JfYWRkcmVzczBfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTMwMTcsNyArMzAyOCw3IEBACiAJcGFyZW50X2h1YiA9IGhkZXZfdG9faHViKHBhcmVudF9oZGV2KTsKIAogCS8qIElmIHdlJ3JlIHJlc2V0dGluZyBhbiBhY3RpdmUgaHViLCB0YWtlIHNvbWUgc3BlY2lhbCBhY3Rpb25zICovCi0JaWYgKHVkZXYtPmFjdGNvbmZpZyAmJgorCWlmICh1ZGV2LT5hY3Rjb25maWcgJiYgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzID4gMCAmJgogCQkJdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0tPmRldi5kcml2ZXIgPT0KIAkJCQkmaHViX2RyaXZlci5kcml2ZXIgJiYKIAkJCShodWIgPSBoZGV2X3RvX2h1Yih1ZGV2KSkgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCA3MTM1ZTU0Li4wOGZiMjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtNjMxLDggKzYzMSw4IEBACiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgb24gc3VjY2Vzcywgb3IgZWxzZSB0aGUgc3RhdHVzIGNvZGUKICAqIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIHVzYl9jb250cm9sX21zZygpIGNhbGwuCiAgKi8KLWludCB1c2JfZ2V0X3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBsYW5naWQsCi0JCXVuc2lnbmVkIGNoYXIgaW5kZXgsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCitzdGF0aWMgaW50IHVzYl9nZXRfc3RyaW5nKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGxhbmdpZCwKKwkJCSAgdW5zaWduZWQgY2hhciBpbmRleCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKIHsKIAlpbnQgaTsKIAlpbnQgcmVzdWx0OwpAQCAtMTM4OCwxMSArMTM4OCwxMyBAQAogCWlmIChkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9BRERSRVNTKQogCQl1c2JfZGlzYWJsZV9kZXZpY2UgKGRldiwgMSk7CS8vIFNraXAgZXAwCiAKLQlpID0gZGV2LT5idXNfbUEgLSBjcC0+ZGVzYy5iTWF4UG93ZXIgKiAyOwotCWlmIChpIDwgMCkKLQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAibmV3IGNvbmZpZyAjJWQgZXhjZWVkcyBwb3dlciAiCi0JCQkJImxpbWl0IGJ5ICVkbUFcbiIsCi0JCQkJY29uZmlndXJhdGlvbiwgLWkpOworCWlmIChjcCkgeworCQlpID0gZGV2LT5idXNfbUEgLSBjcC0+ZGVzYy5iTWF4UG93ZXIgKiAyOworCQlpZiAoaSA8IDApCisJCQlkZXZfd2FybigmZGV2LT5kZXYsICJuZXcgY29uZmlnICMlZCBleGNlZWRzIHBvd2VyICIKKwkJCQkJImxpbWl0IGJ5ICVkbUFcbiIsCisJCQkJCWNvbmZpZ3VyYXRpb24sIC1pKTsKKwl9CiAKIAlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAogCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwgMCwgY29uZmlndXJhdGlvbiwgMCwKQEAgLTE0ODgsNyArMTQ5MCw2IEBACiAvLyBzeW5jaHJvbm91cyBjb250cm9sIG1lc3NhZ2UgY29udmVuaWVuY2Ugcm91dGluZXMKIEVYUE9SVF9TWU1CT0wodXNiX2dldF9kZXNjcmlwdG9yKTsKIEVYUE9SVF9TWU1CT0wodXNiX2dldF9zdGF0dXMpOwotRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X3N0cmluZyk7CiBFWFBPUlRfU1lNQk9MKHVzYl9zdHJpbmcpOwogCiAvLyBzeW5jaHJvbm91cyBjYWxscyB0aGF0IGFsc28gbWFpbnRhaW4gdXNiY29yZSBzdGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9ub3RpZnkuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbm90aWZ5LmMKaW5kZXggZmJiZWJhYi4uNGI1NTI4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9ub3RpZnkuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL25vdGlmeS5jCkBAIC0xMywxNiArMTMsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAidXNiLmgiCiAKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayAqdXNiX25vdGlmaWVyX2xpc3Q7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWCh1c2Jfbm90aWZpZXJfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKHVzYl9ub3RpZmllcl9sb2NrKTsKIAogc3RhdGljIHZvaWQgdXNiX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKmxpc3QsCiAJCQkJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKIHsKLQlkb3duKCZ1c2Jfbm90aWZpZXJfbG9jayk7CisJbXV0ZXhfbG9jaygmdXNiX25vdGlmaWVyX2xvY2spOwogCXdoaWxlICgqbGlzdCkgewogCQlpZiAobi0+cHJpb3JpdHkgPiAoKmxpc3QpLT5wcmlvcml0eSkKIAkJCWJyZWFrOwpAQCAtMzAsMTMgKzMxLDEzIEBACiAJfQogCW4tPm5leHQgPSAqbGlzdDsKIAkqbGlzdCA9IG47Ci0JdXAoJnVzYl9ub3RpZmllcl9sb2NrKTsKKwltdXRleF91bmxvY2soJnVzYl9ub3RpZmllcl9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgdXNiX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICoqbmwsCiAJCQkJICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKQogewotCWRvd24oJnVzYl9ub3RpZmllcl9sb2NrKTsKKwltdXRleF9sb2NrKCZ1c2Jfbm90aWZpZXJfbG9jayk7CiAJd2hpbGUgKCgqbmwpIT1OVUxMKSB7CiAJCWlmICgoKm5sKT09bikgewogCQkJKm5sID0gbi0+bmV4dDsKQEAgLTQ1LDcgKzQ2LDcgQEAKIAkJbmw9JigoKm5sKS0+bmV4dCk7CiAJfQogZXhpdDoKLQl1cCgmdXNiX25vdGlmaWVyX2xvY2spOworCW11dGV4X3VubG9jaygmdXNiX25vdGlmaWVyX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHVzYl9ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKm4sCkBAIC01NCw3ICs1NSw3IEBACiAJaW50IHJldD1OT1RJRllfRE9ORTsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iID0gKm47CiAKLQlkb3duKCZ1c2Jfbm90aWZpZXJfbG9jayk7CisJbXV0ZXhfbG9jaygmdXNiX25vdGlmaWVyX2xvY2spOwogCXdoaWxlIChuYikgewogCQlyZXQgPSBuYi0+bm90aWZpZXJfY2FsbChuYix2YWwsdik7CiAJCWlmIChyZXQmTk9USUZZX1NUT1BfTUFTSykgewpAQCAtNjMsNyArNjQsNyBAQAogCQluYiA9IG5iLT5uZXh0OwogCX0KIGV4aXQ6Ci0JdXAoJnVzYl9ub3RpZmllcl9sb2NrKTsKKwltdXRleF91bmxvY2soJnVzYl9ub3RpZmllcl9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCAxM2QxZDM2Li5kNzM1MmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgpAQCAtNjM5LDcgKzY0MCw3IEBACiAJc3RydWN0IHVzYl9idXMgKmJ1czsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gTlVMTDsKIAkKLQlkb3duKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJbXV0ZXhfbG9jaygmdXNiX2J1c19saXN0X2xvY2spOwogCWZvciAoYnVzbGlzdCA9IHVzYl9idXNfbGlzdC5uZXh0OwogCSAgICAgYnVzbGlzdCAhPSAmdXNiX2J1c19saXN0OyAKIAkgICAgIGJ1c2xpc3QgPSBidXNsaXN0LT5uZXh0KSB7CkBAIC02NTMsNyArNjU0LDcgQEAKIAkJCWdvdG8gZXhpdDsKIAl9CiBleGl0OgotCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJcmV0dXJuIGRldjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBmZjA3NWE1Li5kODBmNzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMTg3LDYgKzE4NywyMyBAQAogCiAJICAgU2VsZWN0IHRoaXMgb25seSBpZiB5b3VyIE9NQVAgYm9hcmQgaGFzIGEgTWluaS1BQiBjb25uZWN0b3IuCiAKK2NvbmZpZyBVU0JfR0FER0VUX0FUOTEKKwlib29sZWFuICJBVDkxIFVTQiBEZXZpY2UgUG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMAorCXNlbGVjdCBVU0JfR0FER0VUX1NFTEVDVEVECisJaGVscAorCSAgIE1hbnkgQXRtZWwgQVQ5MSBwcm9jZXNzb3JzIChzdWNoIGFzIHRoZSBBVDkxUk0yMDAwKSBoYXZlIGEKKwkgICBmdWxsIHNwZWVkIFVTQiBEZXZpY2UgUG9ydCB3aXRoIHN1cHBvcnQgZm9yIGZpdmUgY29uZmlndXJhYmxlCisJICAgZW5kcG9pbnRzIChwbHVzIGVuZHBvaW50IHplcm8pLgorCisJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiYXQ5MV91ZGMiIGFuZCBmb3JjZSBhbGwKKwkgICBnYWRnZXQgZHJpdmVycyB0byBhbHNvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZC4KKworY29uZmlnIFVTQl9BVDkxCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfQVQ5MQorCWRlZmF1bHQgVVNCX0dBREdFVAogCiBjb25maWcgVVNCX0dBREdFVF9EVU1NWV9IQ0QKIAlib29sZWFuICJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQppbmRleCBkNWZkMDRkLi41YTI4ZTYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIG9iai0kKENPTkZJR19VU0JfR09LVSkJCSs9IGdva3VfdWRjLm8KIG9iai0kKENPTkZJR19VU0JfT01BUCkJCSs9IG9tYXBfdWRjLm8KIG9iai0kKENPTkZJR19VU0JfTEg3QTQwWCkJKz0gbGg3YTQweF91ZGMubworb2JqLSQoQ09ORklHX1VTQl9BVDkxKQkJKz0gYXQ5MV91ZGMubwogCiAjCiAjIFVTQiBnYWRnZXQgZHJpdmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU4NThjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTAsMCArMSwxNzczIEBACisvKgorICogYXQ5MV91ZGMgLS0gZHJpdmVyIGZvciBhdDkxLXNlcmllcyBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IFRob21hcyBSYXRoYm9uZQorICogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IEhQIExhYnMKKyAqIENvcHlyaWdodCAoQykgMjAwNSBieSBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjdW5kZWYJREVCVUcKKyN1bmRlZglWRVJCT1NFCisjdW5kZWYJUEFDS0VUX1RSQUNFCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisKKyNpbmNsdWRlICJhdDkxX3VkYy5oIgorCisKKy8qCisgKiBUaGlzIGNvbnRyb2xsZXIgaXMgc2ltcGxlIGFuZCBQSU8tb25seS4gIEl0J3MgdXNlZCBpbiBtYW55IEFUOTEtc2VyaWVzCisgKiBBUk12NFQgY29udHJvbGxlcnMsIGluY2x1ZGluZyB0aGUgYXQ5MXJtOTIwMCAoYXJtOTIwVCwgd2l0aCBNTVUpLAorICogYXQ5MXNhbTkyNjEgKGFybTkyNmVqcywgd2l0aCBNTVUpLCBhbmQgc2V2ZXJhbCBuby1tbXUgdmVyc2lvbnMuCisgKgorICogVGhpcyBkcml2ZXIgZXhwZWN0cyB0aGUgYm9hcmQgaGFzIGJlZW4gd2lyZWQgd2l0aCB0d28gR1BJT3Mgc3VwcHBvcnRpbmcKKyAqIGEgVkJVUyBzZW5zaW5nIElSUSwgYW5kIGEgRCsgcHVsbHVwLiAgKFRoZXkgbWF5IGJlIG9taXR0ZWQsIGJ1dCB0aGUKKyAqIHRlc3RpbmcgaGFzbid0IGNvdmVyZWQgc3VjaCBjYXNlcy4pICBUaGUgcHVsbHVwIGlzIG1vc3QgaW1wb3J0YW50OyBpdAorICogcHJvdmlkZXMgc29mdHdhcmUgY29udHJvbCBvdmVyIHdoZXRoZXIgdGhlIGhvc3QgZW51bWVyYXRlcyB0aGUgZGV2aWNlLgorICogVGhlIFZCVVMgc2Vuc2luZyBoZWxwcyBkdXJpbmcgZW51bWVyYXRpb24sIGFuZCBhbGxvd3MgYm90aCBVU0IgY2xvY2tzCisgKiAoYW5kIHRoZSB0cmFuc2NlaXZlcikgdG8gc3RheSBnYXRlZCBvZmYgdW50aWwgdGhleSdyZSBuZWNlc3NhcnksIHNhdmluZworICogcG93ZXIuICBEdXJpbmcgVVNCIHN1c3BlbmQsIHRoZSA0OCBNSHogY2xvY2sgaXMgZ2F0ZWQgb2ZmLgorICovCisKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JIjggTWFyY2ggMjAwNSIKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAiYXQ5MV91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZXAwbmFtZVtdID0gImVwMCI7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBSZWFkIGZyb20gYSBVRFAgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDkxX3VkcF9yZWFkKHVuc2lnbmVkIGludCByZWcpCit7CisJdm9pZCBfX2lvbWVtICp1ZHBfYmFzZSA9ICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfVURQOworCisJcmV0dXJuIF9fcmF3X3JlYWRsKHVkcF9iYXNlICsgcmVnKTsKK30KKworLyoKKyAqIFdyaXRlIHRvIGEgVURQIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXQ5MV91ZHBfd3JpdGUodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnVkcF9iYXNlID0gKHZvaWQgX19pb21lbSAqKUFUOTFfVkFfQkFTRV9VRFA7CisKKwlfX3Jhd193cml0ZWwodmFsdWUsIHVkcF9iYXNlICsgcmVnKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdGF0aWMgY29uc3QgY2hhciBkZWJ1Z19maWxlbmFtZVtdID0gImRyaXZlci91ZGMiOworCisjZGVmaW5lIEZPVVJCSVRTICIlcyVzJXMlcyIKKyNkZWZpbmUgRUlHSFRCSVRTIEZPVVJCSVRTIEZPVVJCSVRTCisKK3N0YXRpYyB2b2lkIHByb2NfZXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBhdDkxX2VwICplcCkKK3sKKwlzdGF0aWMgY2hhcgkJKnR5cGVzW10gPSB7CisJCSJjb250cm9sIiwgIm91dC1pc28iLCAib3V0LWJ1bGsiLCAib3V0LWludCIsCisJCSJCT0dVUyIsICAgImluLWlzbyIsICAiaW4tYnVsayIsICAiaW4taW50In07CisKKwl1MzIJCQljc3I7CisJc3RydWN0IGF0OTFfcmVxdWVzdAkqcmVxOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljc3IgPSBfX3Jhd19yZWFkbChlcC0+Y3JlZyk7CisKKwkvKiBOT1RFOiAgbm90IGNvbGxlY3RpbmcgcGVyLWVuZHBvaW50IGlycSBzdGF0aXN0aWNzLi4uICovCisKKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCXNlcV9wcmludGYocywgIiVzLCBtYXhwYWNrZXQgJWQgJXMlcyAlcyVzXG4iLAorCQkJZXAtPmVwLm5hbWUsIGVwLT5lcC5tYXhwYWNrZXQsCisJCQllcC0+aXNfaW4gPyAiaW4iIDogIm91dCIsCisJCQllcC0+aXNfaXNvID8gIiBpc28iIDogIiIsCisJCQllcC0+aXNfcGluZ3BvbmcKKwkJCQk/IChlcC0+Zmlmb19iYW5rID8gInBvbmciIDogInBpbmciKQorCQkJCTogIiIsCisJCQllcC0+c3RvcHBlZCA/ICIgc3RvcHBlZCIgOiAiIik7CisJc2VxX3ByaW50ZihzLCAiY3NyICUwOHggcnhieXRlcz0lZCAlcyAlcyAlcyIgRUlHSFRCSVRTICJcbiIsCisJCWNzciwKKwkJKGNzciAmIDB4MDdmZjAwMDApID4+IDE2LAorCQkoY3NyICYgKDEgPDwgMTUpKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCShjc3IgJiAoMSA8PCAxMSkpID8gIkRBVEExIiA6ICJEQVRBMCIsCisJCXR5cGVzWyhjc3IgJiAweDcwMCkgPj4gOF0sCisKKwkJLyogaWZmIHR5cGUgaXMgY29udHJvbCB0aGVuIHByaW50IGN1cnJlbnQgZGlyZWN0aW9uICovCisJCSghKGNzciAmIDB4NzAwKSkKKwkJCT8gKChjc3IgJiAoMSA8PCA3KSkgPyAiIElOIiA6ICIgT1VUIikKKwkJCTogIiIsCisJCShjc3IgJiAoMSA8PCA2KSkgPyAiIHJ4ZGF0YWJrMSIgOiAiIiwKKwkJKGNzciAmICgxIDw8IDUpKSA/ICIgZm9yY2VzdGFsbCIgOiAiIiwKKwkJKGNzciAmICgxIDw8IDQpKSA/ICIgdHhwa3RyZHkiIDogIiIsCisKKwkJKGNzciAmICgxIDw8IDMpKSA/ICIgc3RhbGxzZW50IiA6ICIiLAorCQkoY3NyICYgKDEgPDwgMikpID8gIiByeHNldHVwIiA6ICIiLAorCQkoY3NyICYgKDEgPDwgMSkpID8gIiByeGRhdGFiazAiIDogIiIsCisJCShjc3IgJiAoMSA8PCAwKSkgPyAiIHR4Y29tcCIgOiAiIik7CisJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQlzZXFfcHJpbnRmKHMsICJcdChxdWV1ZSBlbXB0eSlcbiIpOworCisJZWxzZSBsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCXVuc2lnbmVkCWxlbmd0aCA9IHJlcS0+cmVxLmFjdHVhbDsKKworCQlzZXFfcHJpbnRmKHMsICJcdHJlcSAlcCBsZW4gJWQvJWQgYnVmICVwXG4iLAorCQkJCSZyZXEtPnJlcSwgbGVuZ3RoLAorCQkJCXJlcS0+cmVxLmxlbmd0aCwgcmVxLT5yZXEuYnVmKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBwcm9jX2lycV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBtYXNrKQoreworCWludCBpOworCisJc2VxX3ByaW50ZihzLCAiJXMgJTA0eDolcyVzIiBGT1VSQklUUywgbGFiZWwsIG1hc2ssCisJCShtYXNrICYgKDEgPDwgMTMpKSA/ICIgd2FrZXVwIiA6ICIiLAorCQkobWFzayAmICgxIDw8IDEyKSkgPyAiIGVuZGJ1c3JlcyIgOiAiIiwKKworCQkobWFzayAmICgxIDw8IDExKSkgPyAiIHNvZmludCIgOiAiIiwKKwkJKG1hc2sgJiAoMSA8PCAxMCkpID8gIiBleHRyc20iIDogIiIsCisJCShtYXNrICYgKDEgPDwgOSkpID8gIiByeHJzbSIgOiAiIiwKKwkJKG1hc2sgJiAoMSA8PCA4KSkgPyAiIHJ4c3VzcCIgOiAiIik7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAobWFzayAmICgxIDw8IGkpKQorCQkJc2VxX3ByaW50ZihzLCAiIGVwJWQiLCBpKTsKKwl9CisJc2VxX3ByaW50ZihzLCAiXG4iKTsKK30KKworc3RhdGljIGludCBwcm9jX3VkY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBhdDkxX3VkYwkqdWRjID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYXQ5MV9lcAkqZXA7CisJdTMyCQl0bXA7CisKKwlzZXFfcHJpbnRmKHMsICIlczogdmVyc2lvbiAlc1xuIiwgZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKKworCXNlcV9wcmludGYocywgInZidXMgJXMsIHB1bGx1cCAlcywgJXMgcG93ZXJlZCVzLCBnYWRnZXQgJXNcblxuIiwKKwkJdWRjLT52YnVzID8gInByZXNlbnQiIDogIm9mZiIsCisJCXVkYy0+ZW5hYmxlZAorCQkJPyAodWRjLT52YnVzID8gImFjdGl2ZSIgOiAiZW5hYmxlZCIpCisJCQk6ICJkaXNhYmxlZCIsCisJCXVkYy0+c2VsZnBvd2VyZWQgPyAic2VsZiIgOiAiVkJVUyIsCisJCXVkYy0+c3VzcGVuZGVkID8gIiwgc3VzcGVuZGVkIiA6ICIiLAorCQl1ZGMtPmRyaXZlciA/IHVkYy0+ZHJpdmVyLT5kcml2ZXIubmFtZSA6ICIobm9uZSkiKTsKKworCS8qIGRvbid0IGFjY2VzcyByZWdpc3RlcnMgd2hlbiBpbnRlcmZhY2UgaXNuJ3QgY2xvY2tlZCAqLworCWlmICghdWRjLT5jbG9ja2VkKSB7CisJCXNlcV9wcmludGYocywgIihub3QgY2xvY2tlZClcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0bXAgPSBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0ZSTV9OVU0pOworCXNlcV9wcmludGYocywgImZyYW1lICUwNXg6JXMlcyBmcmFtZT0lZFxuIiwgdG1wLAorCQkodG1wICYgQVQ5MV9VRFBfRlJNX09LKSA/ICIgb2siIDogIiIsCisJCSh0bXAgJiBBVDkxX1VEUF9GUk1fRVJSKSA/ICIgZXJyIiA6ICIiLAorCQkodG1wICYgQVQ5MV9VRFBfTlVNKSk7CisKKwl0bXAgPSBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0dMQl9TVEFUKTsKKwlzZXFfcHJpbnRmKHMsICJnbGJzdGF0ZSAlMDJ4OiVzIiBGT1VSQklUUyAiXG4iLCB0bXAsCisJCSh0bXAgJiBBVDkxX1VEUF9STVdVUEUpID8gIiBybXd1cGUiIDogIiIsCisJCSh0bXAgJiBBVDkxX1VEUF9SU01JTlBSKSA/ICIgcnNtaW5wciIgOiAiIiwKKwkJKHRtcCAmIEFUOTFfVURQX0VTUikgPyAiIGVzciIgOiAiIiwKKwkJKHRtcCAmIEFUOTFfVURQX0NPTkZHKSA/ICIgY29uZmciIDogIiIsCisJCSh0bXAgJiBBVDkxX1VEUF9GQURERU4pID8gIiBmYWRkZW4iIDogIiIpOworCisJdG1wID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9GQUREUik7CisJc2VxX3ByaW50ZihzLCAiZmFkZHIgICAlMDN4OiVzIGZhZGQ9JWRcbiIsIHRtcCwKKwkJKHRtcCAmIEFUOTFfVURQX0ZFTikgPyAiIGZlbiIgOiAiIiwKKwkJKHRtcCAmIEFUOTFfVURQX0ZBREQpKTsKKworCXByb2NfaXJxX3Nob3cocywgImltciAgICIsIGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfSU1SKSk7CisJcHJvY19pcnFfc2hvdyhzLCAiaXNyICAgIiwgYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9JU1IpKTsKKworCWlmICh1ZGMtPmVuYWJsZWQgJiYgdWRjLT52YnVzKSB7CisJCXByb2NfZXBfc2hvdyhzLCAmdWRjLT5lcFswXSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmdWRjLT5nYWRnZXQuZXBfbGlzdCwgZXAuZXBfbGlzdCkgeworCQkJaWYgKGVwLT5kZXNjKQorCQkJCXByb2NfZXBfc2hvdyhzLCBlcCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY191ZGNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY191ZGNfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfb3BzID0geworCS5vcGVuCQk9IHByb2NfdWRjX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlKHN0cnVjdCBhdDkxX3VkYyAqdWRjKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCisJcGRlID0gY3JlYXRlX3Byb2NfZW50cnkgKGRlYnVnX2ZpbGVuYW1lLCAwLCBOVUxMKTsKKwl1ZGMtPnBkZSA9IHBkZTsKKwlpZiAocGRlID09IE5VTEwpCisJCXJldHVybjsKKworCXBkZS0+cHJvY19mb3BzID0gJnByb2Nfb3BzOworCXBkZS0+ZGF0YSA9IHVkYzsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGUoc3RydWN0IGF0OTFfdWRjICp1ZGMpCit7CisJaWYgKHVkYy0+cGRlKQorCQlyZW1vdmVfcHJvY19lbnRyeShkZWJ1Z19maWxlbmFtZSwgTlVMTCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgYXQ5MV91ZGMgKnVkYykge30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZShzdHJ1Y3QgYXQ5MV91ZGMgKnVkYykge30KKworI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgYXQ5MV9lcCAqZXAsIHN0cnVjdCBhdDkxX3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZAlzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisKKwlsaXN0X2RlbF9pbml0KCZyZXEtPnF1ZXVlKTsKKwlpZiAocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCWlmIChzdGF0dXMgJiYgc3RhdHVzICE9IC1FU0hVVERPV04pCisJCVZEQkcoIiVzIGRvbmUgJXAsIHN0YXR1cyAlZFxuIiwgZXAtPmVwLm5hbWUsIHJlcSwgc3RhdHVzKTsKKworCWVwLT5zdG9wcGVkID0gMTsKKwlyZXEtPnJlcS5jb21wbGV0ZSgmZXAtPmVwLCAmcmVxLT5yZXEpOworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKKworCS8qIGVwMCBpcyBhbHdheXMgcmVhZHk7IG90aGVyIGVuZHBvaW50cyBuZWVkIGEgbm9uLWVtcHR5IHF1ZXVlICovCisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkgJiYgZXAtPmludF9tYXNrICE9ICgxIDw8IDApKQorCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JRFIsIGVwLT5pbnRfbWFzayk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGJpdHMgaW5kaWNhdGluZyBPVVQgZmlmbyBoYXMgZGF0YSByZWFkeSAqLworI2RlZmluZQlSWF9EQVRBX1JFQURZCShBVDkxX1VEUF9SWF9EQVRBX0JLMCB8IEFUOTFfVURQX1JYX0RBVEFfQksxKQorCisvKgorICogRW5kcG9pbnQgRklGTyBDU1IgYml0cyBoYXZlIGEgbWl4IG9mIGJpdHMsIG1ha2luZyBpdCB1bnNhZmUgdG8ganVzdCB3cml0ZQorICogYmFjayBtb3N0IG9mIHRoZSB2YWx1ZSB5b3UganVzdCByZWFkIChiZWNhdXNlIG9mIHNpZGUgZWZmZWN0cywgaW5jbHVkaW5nCisgKiBiaXRzIHRoYXQgbWF5IGNoYW5nZSBhZnRlciByZWFkaW5nIGFuZCBiZWZvcmUgd3JpdGluZykuCisgKgorICogRXhjZXB0IHdoZW4gY2hhbmdpbmcgYSBzcGVjaWZpYyBiaXQsIGFsd2F5cyB3cml0ZSB2YWx1ZXMgd2hpY2g6CisgKiAgLSBjbGVhciBTRVRfRlggYml0cyAoc2V0dGluZyB0aGVtIGNvdWxkIGNoYW5nZSBzb21ldGhpbmcpCisgKiAgLSBzZXQgQ0xSX0ZYIGJpdHMgKGNsZWFyaW5nIHRoZW0gY291bGQgY2hhbmdlIHNvbWV0aGluZykKKyAqCisgKiBUaGVyZSBhcmUgYWxzbyBzdGF0ZSBiaXRzIGxpa2UgRk9SQ0VTVEFMTCwgRVBFRFMsIERJUiwgYW5kIEVQVFlQRQorICogdGhhdCBzaG91bGRuJ3Qgbm9ybWFsbHkgYmUgY2hhbmdlZC4KKyAqLworI2RlZmluZQlTRVRfRlgJKEFUOTFfVURQX1RYUEtUUkRZKQorI2RlZmluZQlDTFJfRlgJKFJYX0RBVEFfUkVBRFkgfCBBVDkxX1VEUF9SWFNFVFVQIHwgQVQ5MV9VRFBfU1RBTExTRU5UIHwgQVQ5MV9VRFBfVFhDT01QKQorCisvKiBwdWxsIE9VVCBwYWNrZXQgZGF0YSBmcm9tIHRoZSBlbmRwb2ludCdzIGZpZm8gKi8KK3N0YXRpYyBpbnQgcmVhZF9maWZvIChzdHJ1Y3QgYXQ5MV9lcCAqZXAsIHN0cnVjdCBhdDkxX3JlcXVlc3QgKnJlcSkKK3sKKwl1MzIgX19pb21lbQkqY3JlZyA9IGVwLT5jcmVnOworCXU4IF9faW9tZW0JKmRyZWcgPSBlcC0+Y3JlZyArIChBVDkxX1VEUF9GRFIoMCkgLSBBVDkxX1VEUF9DU1IoMCkpOworCXUzMgkJY3NyOworCXU4CQkqYnVmOworCXVuc2lnbmVkIGludAljb3VudCwgYnVmZmVyc3BhY2UsIGlzX2RvbmU7CisKKwlidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJYnVmZmVyc3BhY2UgPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisKKwkvKgorCSAqIHRoZXJlIG1pZ2h0IGJlIG5vdGhpbmcgdG8gcmVhZCBpZiBlcF9xdWV1ZSgpIGNhbGxzIHVzLAorCSAqIG9yIGlmIHdlIGFscmVhZHkgZW1wdGllZCBib3RoIHBpbmdwb25nIGJ1ZmZlcnMKKwkgKi8KK3Jlc2NhbjoKKwljc3IgPSBfX3Jhd19yZWFkbChjcmVnKTsKKwlpZiAoKGNzciAmIFJYX0RBVEFfUkVBRFkpID09IDApCisJCXJldHVybiAwOworCisJY291bnQgPSAoY3NyICYgQVQ5MV9VRFBfUlhCWVRFQ05UKSA+PiAxNjsKKwlpZiAoY291bnQgPiBlcC0+ZXAubWF4cGFja2V0KQorCQljb3VudCA9IGVwLT5lcC5tYXhwYWNrZXQ7CisJaWYgKGNvdW50ID4gYnVmZmVyc3BhY2UpIHsKKwkJREJHKCIlcyBidWZmZXIgb3ZlcmZsb3dcbiIsIGVwLT5lcC5uYW1lKTsKKwkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJY291bnQgPSBidWZmZXJzcGFjZTsKKwl9CisJX19yYXdfcmVhZHNiKGRyZWcsIGJ1ZiwgY291bnQpOworCisJLyogcmVsZWFzZSBhbmQgc3dhcCBwaW5ncG9uZyBtZW0gYmFuayAqLworCWNzciB8PSBDTFJfRlg7CisJaWYgKGVwLT5pc19waW5ncG9uZykgeworCQlpZiAoZXAtPmZpZm9fYmFuayA9PSAwKSB7CisJCQljc3IgJj0gfihTRVRfRlggfCBBVDkxX1VEUF9SWF9EQVRBX0JLMCk7CisJCQllcC0+Zmlmb19iYW5rID0gMTsKKwkJfSBlbHNlIHsKKwkJCWNzciAmPSB+KFNFVF9GWCB8IEFUOTFfVURQX1JYX0RBVEFfQksxKTsKKwkJCWVwLT5maWZvX2JhbmsgPSAwOworCQl9CisJfSBlbHNlCisJCWNzciAmPSB+KFNFVF9GWCB8IEFUOTFfVURQX1JYX0RBVEFfQkswKTsKKwlfX3Jhd193cml0ZWwoY3NyLCBjcmVnKTsKKworCXJlcS0+cmVxLmFjdHVhbCArPSBjb3VudDsKKwlpc19kb25lID0gKGNvdW50IDwgZXAtPmVwLm1heHBhY2tldCk7CisJaWYgKGNvdW50ID09IGJ1ZmZlcnNwYWNlKQorCQlpc19kb25lID0gMTsKKworCVBBQ0tFVCgiJXMgJXAgb3V0LyVkJXNcbiIsIGVwLT5lcC5uYW1lLCAmcmVxLT5yZXEsIGNvdW50LAorCQkJaXNfZG9uZSA/ICIgKGRvbmUpIiA6ICIiKTsKKworCS8qCisJICogYXZvaWQgZXh0cmEgdHJpcHMgdGhyb3VnaCBJUlEgbG9naWMgZm9yIHBhY2tldHMgYWxyZWFkeSBpbgorCSAqIHRoZSBmaWZvIC4uLiBtYXliZSBwcmV2ZW50aW5nIGFuIGV4dHJhIChleHBlbnNpdmUpIE9VVC1OQUsKKwkgKi8KKwlpZiAoaXNfZG9uZSkKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwllbHNlIGlmIChlcC0+aXNfcGluZ3BvbmcpIHsKKwkJYnVmZmVyc3BhY2UgLT0gY291bnQ7CisJCWJ1ZiArPSBjb3VudDsKKwkJZ290byByZXNjYW47CisJfQorCisJcmV0dXJuIGlzX2RvbmU7Cit9CisKKy8qIGxvYWQgZmlmbyBmb3IgYW4gSU4gcGFja2V0ICovCitzdGF0aWMgaW50IHdyaXRlX2ZpZm8oc3RydWN0IGF0OTFfZXAgKmVwLCBzdHJ1Y3QgYXQ5MV9yZXF1ZXN0ICpyZXEpCit7CisJdTMyIF9faW9tZW0JKmNyZWcgPSBlcC0+Y3JlZzsKKwl1MzIJCWNzciA9IF9fcmF3X3JlYWRsKGNyZWcpOworCXU4IF9faW9tZW0JKmRyZWcgPSBlcC0+Y3JlZyArIChBVDkxX1VEUF9GRFIoMCkgLSBBVDkxX1VEUF9DU1IoMCkpOworCXVuc2lnbmVkCXRvdGFsLCBjb3VudCwgaXNfbGFzdDsKKworCS8qCisJICogVE9ETzogYWxsb3cgZm9yIHdyaXRpbmcgdHdvIHBhY2tldHMgdG8gdGhlIGZpZm8gLi4uIHRoYXQnbGwKKwkgKiByZWR1Y2UgdGhlIGFtb3VudCBvZiBJTi1OQUtpbmcsIGJ1dCBwcm9iYWJseSB3b24ndCBhZmZlY3QKKwkgKiB0aHJvdWdocHV0IG11Y2guICAoVW5saWtlIHByZXZlbnRpbmcgT1VULU5BS2luZyEpCisJICovCisKKwkvKgorCSAqIElmIGVwX3F1ZXVlKCkgY2FsbHMgdXMsIHRoZSBxdWV1ZSBpcyBlbXB0eSBhbmQgcG9zc2libHkgaW4KKwkgKiBvZGQgc3RhdGVzIGxpa2UgVFhDT01QIG5vdCB5ZXQgY2xlYXJlZCAod2UgZG8gaXQsIHNhdmluZyBhdAorCSAqIGxlYXN0IG9uZSBJUlEpIG9yIHRoZSBmaWZvIG5vdCB5ZXQgYmVpbmcgZnJlZS4gIFRob3NlIGFyZW4ndAorCSAqIGlzc3VlcyBub3JtYWxseSAoSVJRIGhhbmRsZXIgZmFzdCBwYXRoKS4KKwkgKi8KKwlpZiAodW5saWtlbHkoY3NyICYgKEFUOTFfVURQX1RYQ09NUCB8IEFUOTFfVURQX1RYUEtUUkRZKSkpIHsKKwkJaWYgKGNzciAmIEFUOTFfVURQX1RYQ09NUCkgeworCQkJY3NyIHw9IENMUl9GWDsKKwkJCWNzciAmPSB+KFNFVF9GWCB8IEFUOTFfVURQX1RYQ09NUCk7CisJCQlfX3Jhd193cml0ZWwoY3NyLCBjcmVnKTsKKwkJCWNzciA9IF9fcmF3X3JlYWRsKGNyZWcpOworCQl9CisJCWlmIChjc3IgJiBBVDkxX1VEUF9UWFBLVFJEWSkKKwkJCXJldHVybiAwOworCX0KKworCXRvdGFsID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCWlmIChlcC0+ZXAubWF4cGFja2V0IDwgdG90YWwpIHsKKwkJY291bnQgPSBlcC0+ZXAubWF4cGFja2V0OworCQlpc19sYXN0ID0gMDsKKwl9IGVsc2UgeworCQljb3VudCA9IHRvdGFsOworCQlpc19sYXN0ID0gKGNvdW50IDwgZXAtPmVwLm1heHBhY2tldCkgfHwgIXJlcS0+cmVxLnplcm87CisJfQorCisJLyoKKwkgKiBXcml0ZSB0aGUgcGFja2V0LCBtYXliZSBpdCdzIGEgWkxQLgorCSAqCisJICogTk9URTogIGluY3JlbWVudGluZyByZXEtPmFjdHVhbCBiZWZvcmUgd2UgcmVjZWl2ZSB0aGUgQUNLIG1lYW5zCisJICogZ2FkZ2V0IGRyaXZlciBJTiBieXRlY291bnRzIGNhbiBiZSB3cm9uZyBpbiBmYXVsdCBjYXNlcy4gIFRoYXQncworCSAqIGZpeGFibGUgd2l0aCBQSU8gZHJpdmVycyBsaWtlIHRoaXMgb25lIChzYXZlICJjb3VudCIgaGVyZSwgYW5kCisJICogZG8gdGhlIGluY3JlbWVudCBsYXRlciBvbiBUWCBpcnEpLCBidXQgbm90IGZvciBtb3N0IERNQSBoYXJkd2FyZS4KKwkgKgorCSAqIFNvIGFsbCBnYWRnZXQgZHJpdmVycyBtdXN0IGFjY2VwdCB0aGF0IHBvdGVudGlhbCBlcnJvci4gIFNvbWUKKwkgKiBoYXJkd2FyZSBzdXBwb3J0cyBwcmVjaXNlIGZpZm8gc3RhdHVzIHJlcG9ydGluZywgbGV0dGluZyB0aGVtCisJICogcmVjb3ZlciB3aGVuIHRoZSBhY3R1YWwgYnl0ZWNvdW50IG1hdHRlcnMgKGUuZy4gZm9yIFVTQiBUZXN0CisJICogYW5kIE1lYXN1cmVtZW50IENsYXNzIGRldmljZXMpLgorCSAqLworCV9fcmF3X3dyaXRlc2IoZHJlZywgcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsLCBjb3VudCk7CisJY3NyICY9IH5TRVRfRlg7CisJY3NyIHw9IENMUl9GWCB8IEFUOTFfVURQX1RYUEtUUkRZOworCV9fcmF3X3dyaXRlbChjc3IsIGNyZWcpOworCXJlcS0+cmVxLmFjdHVhbCArPSBjb3VudDsKKworCVBBQ0tFVCgiJXMgJXAgaW4vJWQlc1xuIiwgZXAtPmVwLm5hbWUsICZyZXEtPnJlcSwgY291bnQsCisJCQlpc19sYXN0ID8gIiAoZG9uZSkiIDogIiIpOworCWlmIChpc19sYXN0KQorCQlkb25lKGVwLCByZXEsIDApOworCXJldHVybiBpc19sYXN0OworfQorCitzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBhdDkxX2VwICplcCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYXQ5MV9yZXF1ZXN0ICpyZXE7CisKKwkvLyB0ZXJtaW5lciBjaGFxdWUgcmVxdWV0ZSBkYW5zIGxhIHF1ZXVlCisJZXAtPnN0b3BwZWQgPSAxOworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXR1cm47CisKKwlWREJHKCIlcyAlc1xuIiwgX19GVU5DVElPTl9fLCBlcC0+ZXAubmFtZSk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBhdDkxX3JlcXVlc3QsIHF1ZXVlKTsKKwkJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBhdDkxX2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgYXQ5MV9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgYXQ5MV9lcCwgZXApOworCXN0cnVjdCBhdDkxX3VkYwkqZGV2ID0gZXAtPnVkYzsKKwl1MTYJCW1heHBhY2tldDsKKwl1MzIJCXRtcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJaWYgKCFfZXAgfHwgIWVwCisJCQl8fCAhZGVzYyB8fCBlcC0+ZGVzYworCQkJfHwgX2VwLT5uYW1lID09IGVwMG5hbWUKKwkJCXx8IGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQKKwkJCXx8IChtYXhwYWNrZXQgPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkpID09IDAKKwkJCXx8IG1heHBhY2tldCA+IGVwLT5tYXhwYWNrZXQpIHsKKwkJREJHKCJiYWQgZXAgb3IgZGVzY3JpcHRvclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghZGV2LT5kcml2ZXIgfHwgZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJREJHKCJib2d1cyBkZXZpY2Ugc3RhdGVcbiIpOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwl0bXAgPSBkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSzsKKwlzd2l0Y2ggKHRtcCkgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTDoKKwkJREJHKCJvbmx5IG9uZSBjb250cm9sIGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCWlmIChtYXhwYWNrZXQgPiA2NCkKKwkJCWdvdG8gYm9ndXNfbWF4OworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCXN3aXRjaCAobWF4cGFja2V0KSB7CisJCWNhc2UgODoKKwkJY2FzZSAxNjoKKwkJY2FzZSAzMjoKKwkJY2FzZSA2NDoKKwkJCWdvdG8gb2s7CisJCX0KK2JvZ3VzX21heDoKKwkJREJHKCJib2d1cyBtYXhwYWNrZXQgJWRcbiIsIG1heHBhY2tldCk7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJaWYgKCFlcC0+aXNfcGluZ3BvbmcpIHsKKwkJCURCRygiaXNvIHJlcXVpcmVzIGRvdWJsZSBidWZmZXJpbmdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJfQorCitvazoKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBpbml0aWFsaXplIGVuZHBvaW50IHRvIG1hdGNoIHRoaXMgZGVzY3JpcHRvciAqLworCWVwLT5pc19pbiA9IChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgIT0gMDsKKwllcC0+aXNfaXNvID0gKHRtcCA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKKwllcC0+c3RvcHBlZCA9IDA7CisJaWYgKGVwLT5pc19pbikKKwkJdG1wIHw9IDB4MDQ7CisJdG1wIDw8PSA4OworCXRtcCB8PSBBVDkxX1VEUF9FUEVEUzsKKwlfX3Jhd193cml0ZWwodG1wLCBlcC0+Y3JlZyk7CisKKwllcC0+ZGVzYyA9IGRlc2M7CisJZXAtPmVwLm1heHBhY2tldCA9IG1heHBhY2tldDsKKworCS8qCisJICogcmVzZXQvaW5pdCBlbmRwb2ludCBmaWZvLiAgTk9URTogIGxlYXZlcyBmaWZvX2JhbmsgYWxvbmUsCisJICogc2luY2UgZW5kcG9pbnQgcmVzZXRzIGRvbid0IHJlc2V0IGh3IHBpbmdwb25nIHN0YXRlLgorCSAqLworCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1JTVF9FUCwgZXAtPmludF9tYXNrKTsKKwlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9SU1RfRVAsIDApOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0OTFfZXBfZGlzYWJsZSAoc3RydWN0IHVzYl9lcCAqIF9lcCkKK3sKKwlzdHJ1Y3QgYXQ5MV9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgYXQ5MV9lcCwgZXApOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoZXAgPT0gJmVwLT51ZGMtPmVwWzBdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCW51a2UoZXAsIC1FU0hVVERPV04pOworCisJLyogcmVzdG9yZSB0aGUgZW5kcG9pbnQncyBwcmlzdGluZSBjb25maWcgKi8KKwllcC0+ZGVzYyA9IE5VTEw7CisJZXAtPmVwLm1heHBhY2tldCA9IGVwLT5tYXhwYWNrZXQ7CisKKwkvKiByZXNldCBmaWZvcyBhbmQgZW5kcG9pbnQgKi8KKwlpZiAoZXAtPnVkYy0+Y2xvY2tlZCkgeworCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9SU1RfRVAsIGVwLT5pbnRfbWFzayk7CisJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1JTVF9FUCwgMCk7CisJCV9fcmF3X3dyaXRlbCgwLCBlcC0+Y3JlZyk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorICogdGhpcyBpcyBhIFBJTy1vbmx5IGRyaXZlciwgc28gdGhlcmUncyBub3RoaW5nCisgKiBpbnRlcmVzdGluZyBmb3IgcmVxdWVzdCBvciBidWZmZXIgYWxsb2NhdGlvbi4KKyAqLworCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICphdDkxX2VwX2FsbG9jX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgdW5zaWduZWQgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgYXQ5MV9yZXF1ZXN0ICpyZXE7CisKKwlyZXEgPSBrY2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGF0OTFfcmVxdWVzdCksIFNMQUJfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmcmVxLT5xdWV1ZSk7CisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9lcF9mcmVlX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IGF0OTFfcmVxdWVzdCAqcmVxOworCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBhdDkxX3JlcXVlc3QsIHJlcSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSk7CisJa2ZyZWUocmVxKTsKK30KKworc3RhdGljIHZvaWQgKmF0OTFfZXBfYWxsb2NfYnVmZmVyKAorCXN0cnVjdCB1c2JfZXAgKl9lcCwKKwl1bnNpZ25lZCBieXRlcywKKwlkbWFfYWRkcl90ICpkbWEsCisJZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCSpkbWEgPSB+MDsKKwlyZXR1cm4ga21hbGxvYyhieXRlcywgZ2ZwX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9lcF9mcmVlX2J1ZmZlcigKKwlzdHJ1Y3QgdXNiX2VwICplcCwKKwl2b2lkICpidWYsCisJZG1hX2FkZHJfdCBkbWEsCisJdW5zaWduZWQgYnl0ZXMpCit7CisJa2ZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCBhdDkxX2VwX3F1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJCXN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBhdDkxX3JlcXVlc3QJKnJlcTsKKwlzdHJ1Y3QgYXQ5MV9lcAkJKmVwOworCXN0cnVjdCBhdDkxX3VkYwkJKmRldjsKKwlpbnQJCQlzdGF0dXM7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IGF0OTFfcmVxdWVzdCwgcmVxKTsKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBhdDkxX2VwLCBlcCk7CisKKwlpZiAoIV9yZXEgfHwgIV9yZXEtPmNvbXBsZXRlCisJCQl8fCAhX3JlcS0+YnVmIHx8ICFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkgeworCQlEQkcoImludmFsaWQgcmVxdWVzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPmVwLm5hbWUgIT0gZXAwbmFtZSkpIHsKKwkJREJHKCJpbnZhbGlkIGVwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2ID0gZXAtPnVkYzsKKworCWlmICghZGV2IHx8ICFkZXYtPmRyaXZlciB8fCBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikgeworCQlEQkcoImludmFsaWQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCV9yZXEtPmFjdHVhbCA9IDA7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiB0cnkgdG8ga2lja3N0YXJ0IGFueSBlbXB0eSBhbmQgaWRsZSBxdWV1ZSAqLworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmICFlcC0+c3RvcHBlZCkgeworCQlpbnQJaXNfZXAwOworCisJCS8qCisJCSAqIElmIHRoaXMgY29udHJvbCByZXF1ZXN0IGhhcyBhIG5vbi1lbXB0eSBEQVRBIHN0YWdlLCB0aGlzCisJCSAqIHdpbGwgc3RhcnQgdGhhdCBzdGFnZS4gIEl0IHdvcmtzIGp1c3QgbGlrZSBhIG5vbi1jb250cm9sCisJCSAqIHJlcXVlc3QgKHVudGlsIHRoZSBzdGF0dXMgc3RhZ2Ugc3RhcnRzLCBtYXliZSBlYXJseSkuCisJCSAqCisJCSAqIElmIHRoZSBkYXRhIHN0YWdlIGlzIGVtcHR5LCB0aGVuIHRoaXMgc3RhcnRzIGEgc3VjY2Vzc2Z1bAorCQkgKiBJTi9TVEFUVVMgc3RhZ2UuICAoVW5zdWNjZXNzZnVsIG9uZXMgdXNlIHNldF9oYWx0LikKKwkJICovCisJCWlzX2VwMCA9IChlcC0+ZXAubmFtZSA9PSBlcDBuYW1lKTsKKwkJaWYgKGlzX2VwMCkgeworCQkJdTMyCXRtcDsKKworCQkJaWYgKCFkZXYtPnJlcV9wZW5kaW5nKSB7CisJCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBkZWZlciBjaGFuZ2luZyBDT05GRyB1bnRpbCBhZnRlciB0aGUgZ2FkZ2V0IGRyaXZlcgorCQkJICogcmVjb25maWd1cmVzIHRoZSBlbmRwb2ludHMuCisJCQkgKi8KKwkJCWlmIChkZXYtPndhaXRfZm9yX2NvbmZpZ19hY2spIHsKKwkJCQl0bXAgPSBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0dMQl9TVEFUKTsKKwkJCQl0bXAgXj0gQVQ5MV9VRFBfQ09ORkc7CisJCQkJVkRCRygidG9nZ2xlIGNvbmZpZ1xuIik7CisJCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfR0xCX1NUQVQsIHRtcCk7CisJCQl9CisJCQlpZiAocmVxLT5yZXEubGVuZ3RoID09IDApIHsKK2VwMF9pbl9zdGF0dXM6CisJCQkJUEFDS0VUKCJlcDAgaW4vc3RhdHVzXG4iKTsKKwkJCQlzdGF0dXMgPSAwOworCQkJCXRtcCA9IF9fcmF3X3JlYWRsKGVwLT5jcmVnKTsKKwkJCQl0bXAgJj0gflNFVF9GWDsKKwkJCQl0bXAgfD0gQ0xSX0ZYIHwgQVQ5MV9VRFBfVFhQS1RSRFk7CisJCQkJX19yYXdfd3JpdGVsKHRtcCwgZXAtPmNyZWcpOworCQkJCWRldi0+cmVxX3BlbmRpbmcgPSAwOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCisJCWlmIChlcC0+aXNfaW4pCisJCQlzdGF0dXMgPSB3cml0ZV9maWZvKGVwLCByZXEpOworCQllbHNlIHsKKwkJCXN0YXR1cyA9IHJlYWRfZmlmbyhlcCwgcmVxKTsKKworCQkJLyogSU4vU1RBVFVTIHN0YWdlIGlzIG90aGVyd2lzZSB0cmlnZ2VyZWQgYnkgaXJxICovCisJCQlpZiAoc3RhdHVzICYmIGlzX2VwMCkKKwkJCQlnb3RvIGVwMF9pbl9zdGF0dXM7CisJCX0KKwl9IGVsc2UKKwkJc3RhdHVzID0gMDsKKworCWlmIChyZXEgJiYgIXN0YXR1cykgeworCQlsaXN0X2FkZF90YWlsICgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CisJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lFUiwgZXAtPmludF9tYXNrKTsKKwl9Citkb25lOgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogMDsKK30KKworc3RhdGljIGludCBhdDkxX2VwX2RlcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IGF0OTFfZXAJKmVwOworCXN0cnVjdCBhdDkxX3JlcXVlc3QJKnJlcTsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGF0OTFfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCBlcC0+ZXAubmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1ha2Ugc3VyZSBpdCdzIGFjdHVhbGx5IHF1ZXVlZCBvbiB0aGlzIGVuZHBvaW50ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgeworCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpCisJCQlicmVhazsKKwl9CisJaWYgKCZyZXEtPnJlcSAhPSBfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0OTFfZXBfc2V0X2hhbHQoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGF0OTFfZXAJKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGF0OTFfZXAsIGVwKTsKKwl1MzIgX19pb21lbQkqY3JlZzsKKwl1MzIJCWNzcjsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJc3RhdHVzID0gMDsKKworCWlmICghX2VwIHx8IGVwLT5pc19pc28gfHwgIWVwLT51ZGMtPmNsb2NrZWQpCisJCXJldHVybiAtRUlOVkFMOworCisJY3JlZyA9IGVwLT5jcmVnOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNzciA9IF9fcmF3X3JlYWRsKGNyZWcpOworCisJLyoKKwkgKiBmYWlsIHdpdGggc3RpbGwtYnVzeSBJTiBlbmRwb2ludHMsIGVuc3VyaW5nIGNvcnJlY3Qgc2VxdWVuY2luZworCSAqIG9mIGRhdGEgdHggdGhlbiBzdGFsbC4gIG5vdGUgdGhhdCB0aGUgZmlmbyByeCBieXRlY291bnQgaXNuJ3QKKwkgKiBjb21wbGV0ZWx5IGFjY3VyYXRlIGFzIGEgdHggYnl0ZWNvdW50LgorCSAqLworCWlmIChlcC0+aXNfaW4gJiYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpIHx8IChjc3IgPj4gMTYpICE9IDApKQorCQlzdGF0dXMgPSAtRUFHQUlOOworCWVsc2UgeworCQljc3IgfD0gQ0xSX0ZYOworCQljc3IgJj0gflNFVF9GWDsKKwkJaWYgKHZhbHVlKSB7CisJCQljc3IgfD0gQVQ5MV9VRFBfRk9SQ0VTVEFMTDsKKwkJCVZEQkcoImhhbHQgJXNcbiIsIGVwLT5lcC5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1JTVF9FUCwgZXAtPmludF9tYXNrKTsKKwkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1JTVF9FUCwgMCk7CisJCQljc3IgJj0gfkFUOTFfVURQX0ZPUkNFU1RBTEw7CisJCX0KKwkJX19yYXdfd3JpdGVsKGNzciwgY3JlZyk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBhdDkxX2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IGF0OTFfZXBfZW5hYmxlLAorCS5kaXNhYmxlCT0gYXQ5MV9lcF9kaXNhYmxlLAorCS5hbGxvY19yZXF1ZXN0CT0gYXQ5MV9lcF9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QJPSBhdDkxX2VwX2ZyZWVfcmVxdWVzdCwKKwkuYWxsb2NfYnVmZmVyCT0gYXQ5MV9lcF9hbGxvY19idWZmZXIsCisJLmZyZWVfYnVmZmVyCT0gYXQ5MV9lcF9mcmVlX2J1ZmZlciwKKwkucXVldWUJCT0gYXQ5MV9lcF9xdWV1ZSwKKwkuZGVxdWV1ZQk9IGF0OTFfZXBfZGVxdWV1ZSwKKwkuc2V0X2hhbHQJPSBhdDkxX2VwX3NldF9oYWx0LAorCS8vIHRoZXJlJ3Mgb25seSBpbXByZWNpc2UgZmlmbyBzdGF0dXMgcmVwb3J0aW5nCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGF0OTFfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJaWYgKCF0b191ZGMoZ2FkZ2V0KS0+Y2xvY2tlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfRlJNX05VTSkgJiBBVDkxX1VEUF9OVU07Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV93YWtldXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgYXQ5MV91ZGMJKnVkYyA9IHRvX3VkYyhnYWRnZXQpOworCXUzMgkJZ2xic3RhdGU7CisJaW50CQlzdGF0dXMgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlEQkcoIiVzXG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoIXVkYy0+Y2xvY2tlZCB8fCAhdWRjLT5zdXNwZW5kZWQpCisJCWdvdG8gZG9uZTsKKworCS8qIE5PVEU6ICBzb21lICJlYXJseSB2ZXJzaW9ucyIgaGFuZGxlIEVTUiBkaWZmZXJlbnRseSAuLi4gKi8KKworCWdsYnN0YXRlID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9HTEJfU1RBVCk7CisJaWYgKCEoZ2xic3RhdGUgJiBBVDkxX1VEUF9FU1IpKQorCQlnb3RvIGRvbmU7CisJZ2xic3RhdGUgfD0gQVQ5MV9VRFBfRVNSOworCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0dMQl9TVEFULCBnbGJzdGF0ZSk7CisKK2RvbmU6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIHJlaW5pdCA9PSByZXN0b3JlIGluaXRhbCBzb2Z0d2FyZSBzdGF0ZSAqLworc3RhdGljIHZvaWQgdWRjX3JlaW5pdChzdHJ1Y3QgYXQ5MV91ZGMgKnVkYykKK3sKKwl1MzIgaTsKKworCUlOSVRfTElTVF9IRUFEKCZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdWRjLT5nYWRnZXQuZXAwLT5lcF9saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IGF0OTFfZXAgKmVwID0gJnVkYy0+ZXBbaV07CisKKwkJaWYgKGkgIT0gMCkKKwkJCWxpc3RfYWRkX3RhaWwoJmVwLT5lcC5lcF9saXN0LCAmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisJCWVwLT5kZXNjID0gTlVMTDsKKwkJZXAtPnN0b3BwZWQgPSAwOworCQllcC0+Zmlmb19iYW5rID0gMDsKKwkJZXAtPmVwLm1heHBhY2tldCA9IGVwLT5tYXhwYWNrZXQ7CisJCS8vIGluaXRpYWxpc2VyIHVuZSBxdWV1ZSBwYXIgZW5kcG9pbnQKKwkJSU5JVF9MSVNUX0hFQUQoJmVwLT5xdWV1ZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX2FjdGl2aXR5KHN0cnVjdCBhdDkxX3VkYyAqdWRjKQoreworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyID0gdWRjLT5kcml2ZXI7CisJaW50IGk7CisKKwlpZiAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCWRyaXZlciA9IE5VTEw7CisJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IGF0OTFfZXAgKmVwID0gJnVkYy0+ZXBbaV07CisJCWVwLT5zdG9wcGVkID0gMTsKKwkJbnVrZShlcCwgLUVTSFVURE9XTik7CisJfQorCWlmIChkcml2ZXIpCisJCWRyaXZlci0+ZGlzY29ubmVjdCgmdWRjLT5nYWRnZXQpOworCisJdWRjX3JlaW5pdCh1ZGMpOworfQorCitzdGF0aWMgdm9pZCBjbGtfb24oc3RydWN0IGF0OTFfdWRjICp1ZGMpCit7CisJaWYgKHVkYy0+Y2xvY2tlZCkKKwkJcmV0dXJuOworCXVkYy0+Y2xvY2tlZCA9IDE7CisJY2xrX2VuYWJsZSh1ZGMtPmljbGspOworCWNsa19lbmFibGUodWRjLT5mY2xrKTsKK30KKworc3RhdGljIHZvaWQgY2xrX29mZihzdHJ1Y3QgYXQ5MV91ZGMgKnVkYykKK3sKKwlpZiAoIXVkYy0+Y2xvY2tlZCkKKwkJcmV0dXJuOworCXVkYy0+Y2xvY2tlZCA9IDA7CisJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwljbGtfZGlzYWJsZSh1ZGMtPmljbGspOworCWNsa19kaXNhYmxlKHVkYy0+ZmNsayk7Cit9CisKKy8qCisgKiBhY3RpdmF0ZS9kZWFjdGl2YXRlIGxpbmsgd2l0aCBob3N0OyBtaW5pbWl6ZSBwb3dlciB1c2FnZSBmb3IKKyAqIGluYWN0aXZlIGxpbmtzIGJ5IGN1dHRpbmcgY2xvY2tzIGFuZCB0cmFuc2NlaXZlciBwb3dlci4KKyAqLworc3RhdGljIHZvaWQgcHVsbHVwKHN0cnVjdCBhdDkxX3VkYyAqdWRjLCBpbnQgaXNfb24pCit7CisJaWYgKCF1ZGMtPmVuYWJsZWQgfHwgIXVkYy0+dmJ1cykKKwkJaXNfb24gPSAwOworCURCRygiJXNhY3RpdmVcbiIsIGlzX29uID8gIiIgOiAiaW4iKTsKKwlpZiAoaXNfb24pIHsKKwkJY2xrX29uKHVkYyk7CisJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1RYVkMsIDApOworCQlhdDkxX3NldF9ncGlvX3ZhbHVlKHVkYy0+Ym9hcmQucHVsbHVwX3BpbiwgMSk7CisJfSBlbHNlICB7CisJCXN0b3BfYWN0aXZpdHkodWRjKTsKKwkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfVFhWQywgQVQ5MV9VRFBfVFhWQ19UWFZESVMpOworCQlhdDkxX3NldF9ncGlvX3ZhbHVlKHVkYy0+Ym9hcmQucHVsbHVwX3BpbiwgMCk7CisJCWNsa19vZmYodWRjKTsKKworCQkvLyBSRVZJU0lUOiAgd2l0aCB0cmFuc2NlaXZlciBkaXNhYmxlZCwgd2lsbCBELSBmbG9hdAorCQkvLyBzbyB0aGF0IGEgaG9zdCB3b3VsZCBmYWxzZWx5IGRldGVjdCBhIGRldmljZT8KKwl9Cit9CisKKy8qIHZidXMgaXMgaGVyZSEgIHR1cm4gZXZlcnl0aGluZyBvbiB0aGF0J3MgcmVhZHkgKi8KK3N0YXRpYyBpbnQgYXQ5MV92YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3QgYXQ5MV91ZGMJKnVkYyA9IHRvX3VkYyhnYWRnZXQpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwkvLyBWREJHKCJ2YnVzICVzXG4iLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl1ZGMtPnZidXMgPSAoaXNfYWN0aXZlICE9IDApOworCXB1bGx1cCh1ZGMsIGlzX2FjdGl2ZSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0OTFfcHVsbHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19vbikKK3sKKwlzdHJ1Y3QgYXQ5MV91ZGMJKnVkYyA9IHRvX3VkYyhnYWRnZXQpOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdWRjLT5lbmFibGVkID0gaXNfb24gPSAhIWlzX29uOworCXB1bGx1cCh1ZGMsIGlzX29uKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9zZXRfc2VsZnBvd2VyZWQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX29uKQoreworCXN0cnVjdCBhdDkxX3VkYwkqdWRjID0gdG9fdWRjKGdhZGdldCk7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl1ZGMtPnNlbGZwb3dlcmVkID0gKGlzX29uICE9IDApOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBhdDkxX3VkY19vcHMgPSB7CisJLmdldF9mcmFtZQkJPSBhdDkxX2dldF9mcmFtZSwKKwkud2FrZXVwCQkJPSBhdDkxX3dha2V1cCwKKwkuc2V0X3NlbGZwb3dlcmVkCT0gYXQ5MV9zZXRfc2VsZnBvd2VyZWQsCisJLnZidXNfc2Vzc2lvbgkJPSBhdDkxX3ZidXNfc2Vzc2lvbiwKKwkucHVsbHVwCQkJPSBhdDkxX3B1bGx1cCwKKworCS8qCisJICogVkJVUy1wb3dlcmVkIGRldmljZXMgbWF5IGFsc28gYWxzbyB3YW50IHRvIHN1cHBvcnQgYmlnZ2VyCisJICogcG93ZXIgYnVkZ2V0cyBhZnRlciBhbiBhcHByb3ByaWF0ZSBTRVRfQ09ORklHVVJBVElPTi4KKwkgKi8KKwkvLyAudmJ1c19wb3dlcgkJPSBhdDkxX3ZidXNfcG93ZXIsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGhhbmRsZV9lcChzdHJ1Y3QgYXQ5MV9lcCAqZXApCit7CisJc3RydWN0IGF0OTFfcmVxdWVzdAkqcmVxOworCXUzMiBfX2lvbWVtCQkqY3JlZyA9IGVwLT5jcmVnOworCXUzMgkJCWNzciA9IF9fcmF3X3JlYWRsKGNyZWcpOworCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LAorCQkJc3RydWN0IGF0OTFfcmVxdWVzdCwgcXVldWUpOworCWVsc2UKKwkJcmVxID0gTlVMTDsKKworCWlmIChlcC0+aXNfaW4pIHsKKwkJaWYgKGNzciAmIChBVDkxX1VEUF9TVEFMTFNFTlQgfCBBVDkxX1VEUF9UWENPTVApKSB7CisJCQljc3IgfD0gQ0xSX0ZYOworCQkJY3NyICY9IH4oU0VUX0ZYIHwgQVQ5MV9VRFBfU1RBTExTRU5UIHwgQVQ5MV9VRFBfVFhDT01QKTsKKwkJCV9fcmF3X3dyaXRlbChjc3IsIGNyZWcpOworCQl9CisJCWlmIChyZXEpCisJCQlyZXR1cm4gd3JpdGVfZmlmbyhlcCwgcmVxKTsKKworCX0gZWxzZSB7CisJCWlmIChjc3IgJiBBVDkxX1VEUF9TVEFMTFNFTlQpIHsKKwkJCS8qIFNUQUxMU0VOVCBiaXQgPT0gSVNPRVJSICovCisJCQlpZiAoZXAtPmlzX2lzbyAmJiByZXEpCisJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVJTFNFUTsKKwkJCWNzciB8PSBDTFJfRlg7CisJCQljc3IgJj0gfihTRVRfRlggfCBBVDkxX1VEUF9TVEFMTFNFTlQpOworCQkJX19yYXdfd3JpdGVsKGNzciwgY3JlZyk7CisJCQljc3IgPSBfX3Jhd19yZWFkbChjcmVnKTsKKwkJfQorCQlpZiAocmVxICYmIChjc3IgJiBSWF9EQVRBX1JFQURZKSkKKwkJCXJldHVybiByZWFkX2ZpZm8oZXAsIHJlcSk7CisJfQorCXJldHVybiAwOworfQorCit1bmlvbiBzZXR1cCB7CisJdTgJCQlyYXdbOF07CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlyOworfTsKKworc3RhdGljIHZvaWQgaGFuZGxlX3NldHVwKHN0cnVjdCBhdDkxX3VkYyAqdWRjLCBzdHJ1Y3QgYXQ5MV9lcCAqZXAsIHUzMiBjc3IpCit7CisJdTMyIF9faW9tZW0JKmNyZWcgPSBlcC0+Y3JlZzsKKwl1OCBfX2lvbWVtCSpkcmVnID0gZXAtPmNyZWcgKyAoQVQ5MV9VRFBfRkRSKDApIC0gQVQ5MV9VRFBfQ1NSKDApKTsKKwl1bnNpZ25lZAlyeGNvdW50LCBpID0gMDsKKwl1MzIJCXRtcDsKKwl1bmlvbiBzZXR1cAlwa3Q7CisJaW50CQlzdGF0dXMgPSAwOworCisJLyogcmVhZCBhbmQgYWNrIFNFVFVQOyBoYXJkLWZhaWwgZm9yIGJvZ3VzIHBhY2tldHMgKi8KKwlyeGNvdW50ID0gKGNzciAmIEFUOTFfVURQX1JYQllURUNOVCkgPj4gMTY7CisJaWYgKGxpa2VseShyeGNvdW50ID09IDgpKSB7CisJCXdoaWxlIChyeGNvdW50LS0pCisJCQlwa3QucmF3W2krK10gPSBfX3Jhd19yZWFkYihkcmVnKTsKKwkJaWYgKHBrdC5yLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pIHsKKwkJCWNzciB8PSBBVDkxX1VEUF9ESVI7CisJCQllcC0+aXNfaW4gPSAxOworCQl9IGVsc2UgeworCQkJY3NyICY9IH5BVDkxX1VEUF9ESVI7CisJCQllcC0+aXNfaW4gPSAwOworCQl9CisJfSBlbHNlIHsKKwkJLy8gUkVWSVNJVCB0aGlzIGhhcHBlbnMgc29tZXRpbWVzIHVuZGVyIGxvYWQ7IHdoeT8/CisJCUVSUigiU0VUVVAgbGVuICVkLCBjc3IgJTA4eFxuIiwgcnhjb3VudCwgY3NyKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9CisJY3NyIHw9IENMUl9GWDsKKwljc3IgJj0gfihTRVRfRlggfCBBVDkxX1VEUF9SWFNFVFVQKTsKKwlfX3Jhd193cml0ZWwoY3NyLCBjcmVnKTsKKwl1ZGMtPndhaXRfZm9yX2FkZHJfYWNrID0gMDsKKwl1ZGMtPndhaXRfZm9yX2NvbmZpZ19hY2sgPSAwOworCWVwLT5zdG9wcGVkID0gMDsKKwlpZiAodW5saWtlbHkoc3RhdHVzICE9IDApKQorCQlnb3RvIHN0YWxsOworCisjZGVmaW5lIHdfaW5kZXgJCWxlMTZfdG9fY3B1KHBrdC5yLndJbmRleCkKKyNkZWZpbmUgd192YWx1ZQkJbGUxNl90b19jcHUocGt0LnIud1ZhbHVlKQorI2RlZmluZSB3X2xlbmd0aAlsZTE2X3RvX2NwdShwa3Quci53TGVuZ3RoKQorCisJVkRCRygiU0VUVVAgJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlMDR4XG4iLAorCQkJcGt0LnIuYlJlcXVlc3RUeXBlLCBwa3Quci5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKworCS8qCisJICogQSBmZXcgc3RhbmRhcmQgcmVxdWVzdHMgZ2V0IGhhbmRsZWQgaGVyZSwgb25lcyB0aGF0IHRvdWNoCisJICogaGFyZHdhcmUgLi4uIG5vdGFibHkgZm9yIGRldmljZSBhbmQgZW5kcG9pbnQgZmVhdHVyZXMuCisJICovCisJdWRjLT5yZXFfcGVuZGluZyA9IDE7CisJY3NyID0gX19yYXdfcmVhZGwoY3JlZyk7CisJY3NyIHw9IENMUl9GWDsKKwljc3IgJj0gflNFVF9GWDsKKwlzd2l0Y2ggKChwa3Quci5iUmVxdWVzdFR5cGUgPDwgOCkgfCBwa3Quci5iUmVxdWVzdCkgeworCisJY2FzZSAoKFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9ERVZJQ0UpIDw8IDgpCisJCQl8IFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCV9fcmF3X3dyaXRlbChjc3IgfCBBVDkxX1VEUF9UWFBLVFJEWSwgY3JlZyk7CisJCXVkYy0+YWRkciA9IHdfdmFsdWU7CisJCXVkYy0+d2FpdF9mb3JfYWRkcl9hY2sgPSAxOworCQl1ZGMtPnJlcV9wZW5kaW5nID0gMDsKKwkJLyogRkFERFIgaXMgc2V0IGxhdGVyLCB3aGVuIHdlIGFjayBob3N0IFNUQVRVUyAqLworCQlyZXR1cm47CisKKwljYXNlICgoVVNCX1RZUEVfU1RBTkRBUkR8VVNCX1JFQ0lQX0RFVklDRSkgPDwgOCkKKwkJCXwgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJdG1wID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9HTEJfU1RBVCkgJiBBVDkxX1VEUF9DT05GRzsKKwkJaWYgKHBrdC5yLndWYWx1ZSkKKwkJCXVkYy0+d2FpdF9mb3JfY29uZmlnX2FjayA9ICh0bXAgPT0gMCk7CisJCWVsc2UKKwkJCXVkYy0+d2FpdF9mb3JfY29uZmlnX2FjayA9ICh0bXAgIT0gMCk7CisJCWlmICh1ZGMtPndhaXRfZm9yX2NvbmZpZ19hY2spCisJCQlWREJHKCJ3YWl0IGZvciBjb25maWdcbiIpOworCQkvKiBDT05GRyBpcyB0b2dnbGVkIGxhdGVyLCBpZiBnYWRnZXQgZHJpdmVyIHN1Y2NlZWRzICovCisJCWJyZWFrOworCisJLyoKKwkgKiBIb3N0cyBtYXkgc2V0IG9yIGNsZWFyIHJlbW90ZSB3YWtldXAgc3RhdHVzLCBhbmQKKwkgKiBkZXZpY2VzIG1heSByZXBvcnQgdGhleSdyZSBWQlVTIHBvd2VyZWQuCisJICovCisJY2FzZSAoKFVTQl9ESVJfSU58VVNCX1RZUEVfU1RBTkRBUkR8VVNCX1JFQ0lQX0RFVklDRSkgPDwgOCkKKwkJCXwgVVNCX1JFUV9HRVRfU1RBVFVTOgorCQl0bXAgPSAodWRjLT5zZWxmcG93ZXJlZCA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCk7CisJCWlmIChhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0dMQl9TVEFUKSAmIEFUOTFfVURQX0VTUikKKwkJCXRtcCB8PSAoMSA8PCBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApOworCQlQQUNLRVQoImdldCBkZXZpY2Ugc3RhdHVzXG4iKTsKKwkJX19yYXdfd3JpdGViKHRtcCwgZHJlZyk7CisJCV9fcmF3X3dyaXRlYigwLCBkcmVnKTsKKwkJZ290byB3cml0ZV9pbjsKKwkJLyogdGhlbiBTVEFUVVMgc3RhcnRzIGxhdGVyLCBhdXRvbWF0aWNhbGx5ICovCisJY2FzZSAoKFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9ERVZJQ0UpIDw8IDgpCisJCQl8IFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCWlmICh3X3ZhbHVlICE9IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKKwkJCWdvdG8gc3RhbGw7CisJCXRtcCA9IGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfR0xCX1NUQVQpOworCQl0bXAgfD0gQVQ5MV9VRFBfRVNSOworCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9HTEJfU1RBVCwgdG1wKTsKKwkJZ290byBzdWNjZWVkOworCWNhc2UgKChVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfREVWSUNFKSA8PCA4KQorCQkJfCBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJCWlmICh3X3ZhbHVlICE9IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKKwkJCWdvdG8gc3RhbGw7CisJCXRtcCA9IGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfR0xCX1NUQVQpOworCQl0bXAgJj0gfkFUOTFfVURQX0VTUjsKKwkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfR0xCX1NUQVQsIHRtcCk7CisJCWdvdG8gc3VjY2VlZDsKKworCS8qCisJICogSW50ZXJmYWNlcyBoYXZlIG5vIGZlYXR1cmUgc2V0dGluZ3M7IHRoaXMgaXMgcHJldHR5IHVzZWxlc3MuCisJICogd2Ugd29uJ3QgZXZlbiBpbnNpc3QgdGhlIGludGVyZmFjZSBleGlzdHMuLi4KKwkgKi8KKwljYXNlICgoVVNCX0RJUl9JTnxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfSU5URVJGQUNFKSA8PCA4KQorCQkJfCBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCVBBQ0tFVCgiZ2V0IGludGVyZmFjZSBzdGF0dXNcbiIpOworCQlfX3Jhd193cml0ZWIoMCwgZHJlZyk7CisJCV9fcmF3X3dyaXRlYigwLCBkcmVnKTsKKwkJZ290byB3cml0ZV9pbjsKKwkJLyogdGhlbiBTVEFUVVMgc3RhcnRzIGxhdGVyLCBhdXRvbWF0aWNhbGx5ICovCisJY2FzZSAoKFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgpCisJCQl8IFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJY2FzZSAoKFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9JTlRFUkZBQ0UpIDw8IDgpCisJCQl8IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwkJZ290byBzdGFsbDsKKworCS8qCisJICogSG9zdHMgbWF5IGNsZWFyIGJ1bGsvaW50ciBlbmRwb2ludCBoYWx0IGFmdGVyIHRoZSBnYWRnZXQKKwkgKiBkcml2ZXIgc2V0cyBpdCAobm90IHdpZGVseSB1c2VkKTsgb3Igc2V0IGl0IChmb3IgdGVzdGluZykKKwkgKi8KKwljYXNlICgoVVNCX0RJUl9JTnxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfRU5EUE9JTlQpIDw8IDgpCisJCQl8IFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJdG1wID0gd19pbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJZXAgPSAmdWRjLT5lcFt0bXBdOworCQlpZiAodG1wID4gTlVNX0VORFBPSU5UUyB8fCAodG1wICYmICFlcC0+ZGVzYykpCisJCQlnb3RvIHN0YWxsOworCisJCWlmICh0bXApIHsKKwkJCWlmICgod19pbmRleCAmIFVTQl9ESVJfSU4pKSB7CisJCQkJaWYgKCFlcC0+aXNfaW4pCisJCQkJCWdvdG8gc3RhbGw7CisJCQl9IGVsc2UgaWYgKGVwLT5pc19pbikKKwkJCQlnb3RvIHN0YWxsOworCQl9CisJCVBBQ0tFVCgiZ2V0ICVzIHN0YXR1c1xuIiwgZXAtPmVwLm5hbWUpOworCQlpZiAoX19yYXdfcmVhZGwoZXAtPmNyZWcpICYgQVQ5MV9VRFBfRk9SQ0VTVEFMTCkKKwkJCXRtcCA9ICgxIDw8IFVTQl9FTkRQT0lOVF9IQUxUKTsKKwkJZWxzZQorCQkJdG1wID0gMDsKKwkJX19yYXdfd3JpdGViKHRtcCwgZHJlZyk7CisJCV9fcmF3X3dyaXRlYigwLCBkcmVnKTsKKwkJZ290byB3cml0ZV9pbjsKKwkJLyogdGhlbiBTVEFUVVMgc3RhcnRzIGxhdGVyLCBhdXRvbWF0aWNhbGx5ICovCisJY2FzZSAoKFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9FTkRQT0lOVCkgPDwgOCkKKwkJCXwgVVNCX1JFUV9TRVRfRkVBVFVSRToKKwkJdG1wID0gd19pbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJZXAgPSAmdWRjLT5lcFt0bXBdOworCQlpZiAod192YWx1ZSAhPSBVU0JfRU5EUE9JTlRfSEFMVCB8fCB0bXAgPiBOVU1fRU5EUE9JTlRTKQorCQkJZ290byBzdGFsbDsKKwkJaWYgKCFlcC0+ZGVzYyB8fCBlcC0+aXNfaXNvKQorCQkJZ290byBzdGFsbDsKKwkJaWYgKCh3X2luZGV4ICYgVVNCX0RJUl9JTikpIHsKKwkJCWlmICghZXAtPmlzX2luKQorCQkJCWdvdG8gc3RhbGw7CisJCX0gZWxzZSBpZiAoZXAtPmlzX2luKQorCQkJZ290byBzdGFsbDsKKworCQl0bXAgPSBfX3Jhd19yZWFkbChlcC0+Y3JlZyk7CisJCXRtcCAmPSB+U0VUX0ZYOworCQl0bXAgfD0gQ0xSX0ZYIHwgQVQ5MV9VRFBfRk9SQ0VTVEFMTDsKKwkJX19yYXdfd3JpdGVsKHRtcCwgZXAtPmNyZWcpOworCQlnb3RvIHN1Y2NlZWQ7CisJY2FzZSAoKFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9FTkRQT0lOVCkgPDwgOCkKKwkJCXwgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQl0bXAgPSB3X2luZGV4ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCQllcCA9ICZ1ZGMtPmVwW3RtcF07CisJCWlmICh3X3ZhbHVlICE9IFVTQl9FTkRQT0lOVF9IQUxUIHx8IHRtcCA+IE5VTV9FTkRQT0lOVFMpCisJCQlnb3RvIHN0YWxsOworCQlpZiAodG1wID09IDApCisJCQlnb3RvIHN1Y2NlZWQ7CisJCWlmICghZXAtPmRlc2MgfHwgZXAtPmlzX2lzbykKKwkJCWdvdG8gc3RhbGw7CisJCWlmICgod19pbmRleCAmIFVTQl9ESVJfSU4pKSB7CisJCQlpZiAoIWVwLT5pc19pbikKKwkJCQlnb3RvIHN0YWxsOworCQl9IGVsc2UgaWYgKGVwLT5pc19pbikKKwkJCWdvdG8gc3RhbGw7CisKKwkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfUlNUX0VQLCBlcC0+aW50X21hc2spOworCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9SU1RfRVAsIDApOworCQl0bXAgPSBfX3Jhd19yZWFkbChlcC0+Y3JlZyk7CisJCXRtcCB8PSBDTFJfRlg7CisJCXRtcCAmPSB+KFNFVF9GWCB8IEFUOTFfVURQX0ZPUkNFU1RBTEwpOworCQlfX3Jhd193cml0ZWwodG1wLCBlcC0+Y3JlZyk7CisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJCWhhbmRsZV9lcChlcCk7CisJCWdvdG8gc3VjY2VlZDsKKwl9CisKKyN1bmRlZiB3X3ZhbHVlCisjdW5kZWYgd19pbmRleAorI3VuZGVmIHdfbGVuZ3RoCisKKwkvKiBwYXNzIHJlcXVlc3QgdXAgdG8gdGhlIGdhZGdldCBkcml2ZXIgKi8KKwlzdGF0dXMgPSB1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LCAmcGt0LnIpOworCWlmIChzdGF0dXMgPCAwKSB7CitzdGFsbDoKKwkJVkRCRygicmVxICUwMnguJTAyeCBwcm90b2NvbCBTVEFMTDsgc3RhdCAlZFxuIiwKKwkJCQlwa3Quci5iUmVxdWVzdFR5cGUsIHBrdC5yLmJSZXF1ZXN0LCBzdGF0dXMpOworCQljc3IgfD0gQVQ5MV9VRFBfRk9SQ0VTVEFMTDsKKwkJX19yYXdfd3JpdGVsKGNzciwgY3JlZyk7CisJCXVkYy0+cmVxX3BlbmRpbmcgPSAwOworCX0KKwlyZXR1cm47CisKK3N1Y2NlZWQ6CisJLyogaW1tZWRpYXRlIHN1Y2Nlc3NmdWwgKElOKSBTVEFUVVMgYWZ0ZXIgemVybyBsZW5ndGggREFUQSAqLworCVBBQ0tFVCgiZXAwIGluL3N0YXR1c1xuIik7Cit3cml0ZV9pbjoKKwljc3IgfD0gQVQ5MV9VRFBfVFhQS1RSRFk7CisJX19yYXdfd3JpdGVsKGNzciwgY3JlZyk7CisJdWRjLT5yZXFfcGVuZGluZyA9IDA7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZXAwKHN0cnVjdCBhdDkxX3VkYyAqdWRjKQoreworCXN0cnVjdCBhdDkxX2VwCQkqZXAwID0gJnVkYy0+ZXBbMF07CisJdTMyIF9faW9tZW0JCSpjcmVnID0gZXAwLT5jcmVnOworCXUzMgkJCWNzciA9IF9fcmF3X3JlYWRsKGNyZWcpOworCXN0cnVjdCBhdDkxX3JlcXVlc3QJKnJlcTsKKworCWlmICh1bmxpa2VseShjc3IgJiBBVDkxX1VEUF9TVEFMTFNFTlQpKSB7CisJCW51a2UoZXAwLCAtRVBST1RPKTsKKwkJdWRjLT5yZXFfcGVuZGluZyA9IDA7CisJCWNzciB8PSBDTFJfRlg7CisJCWNzciAmPSB+KFNFVF9GWCB8IEFUOTFfVURQX1NUQUxMU0VOVCB8IEFUOTFfVURQX0ZPUkNFU1RBTEwpOworCQlfX3Jhd193cml0ZWwoY3NyLCBjcmVnKTsKKwkJVkRCRygiZXAwIHN0YWxsZWRcbiIpOworCQljc3IgPSBfX3Jhd19yZWFkbChjcmVnKTsKKwl9CisJaWYgKGNzciAmIEFUOTFfVURQX1JYU0VUVVApIHsKKwkJbnVrZShlcDAsIDApOworCQl1ZGMtPnJlcV9wZW5kaW5nID0gMDsKKwkJaGFuZGxlX3NldHVwKHVkYywgZXAwLCBjc3IpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJmVwMC0+cXVldWUpKQorCQlyZXEgPSBOVUxMOworCWVsc2UKKwkJcmVxID0gbGlzdF9lbnRyeShlcDAtPnF1ZXVlLm5leHQsIHN0cnVjdCBhdDkxX3JlcXVlc3QsIHF1ZXVlKTsKKworCS8qIGhvc3QgQUNLZWQgYW4gSU4gcGFja2V0IHRoYXQgd2Ugc2VudCAqLworCWlmIChjc3IgJiBBVDkxX1VEUF9UWENPTVApIHsKKwkJY3NyIHw9IENMUl9GWDsKKwkJY3NyICY9IH4oU0VUX0ZYIHwgQVQ5MV9VRFBfVFhDT01QKTsKKworCQkvKiB3cml0ZSBtb3JlIElOIERBVEE/ICovCisJCWlmIChyZXEgJiYgZXAwLT5pc19pbikgeworCQkJaWYgKGhhbmRsZV9lcChlcDApKQorCQkJCXVkYy0+cmVxX3BlbmRpbmcgPSAwOworCisJCS8qCisJCSAqIEFjayBhZnRlcjoKKwkJICogIC0gbGFzdCBJTiBEQVRBIHBhY2tldCAoaW5jbHVkaW5nIEdFVF9TVEFUVVMpCisJCSAqICAtIElOL1NUQVRVUyBmb3IgT1VUIERBVEEKKwkJICogIC0gSU4vU1RBVFVTIGZvciBhbnkgemVyby1sZW5ndGggREFUQSBzdGFnZQorCQkgKiBleGNlcHQgZm9yIHRoZSBJTiBEQVRBIGNhc2UsIHRoZSBob3N0IHNob3VsZCBzZW5kCisJCSAqIGFuIE9VVCBzdGF0dXMgbGF0ZXIsIHdoaWNoIHdlJ2xsIGFjay4KKwkJICovCisJCX0gZWxzZSB7CisJCQl1ZGMtPnJlcV9wZW5kaW5nID0gMDsKKwkJCV9fcmF3X3dyaXRlbChjc3IsIGNyZWcpOworCisJCQkvKgorCQkJICogU0VUX0FERFJFU1MgdGFrZXMgZWZmZWN0IG9ubHkgYWZ0ZXIgdGhlIFNUQVRVUworCQkJICogKHRvIHRoZSBvcmlnaW5hbCBhZGRyZXNzKSBnZXRzIGFja2VkLgorCQkJICovCisJCQlpZiAodWRjLT53YWl0X2Zvcl9hZGRyX2FjaykgeworCQkJCXUzMgl0bXA7CisKKwkJCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9GQUREUiwgQVQ5MV9VRFBfRkVOIHwgdWRjLT5hZGRyKTsKKwkJCQl0bXAgPSBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0dMQl9TVEFUKTsKKwkJCQl0bXAgJj0gfkFUOTFfVURQX0ZBRERFTjsKKwkJCQlpZiAodWRjLT5hZGRyKQorCQkJCQl0bXAgfD0gQVQ5MV9VRFBfRkFEREVOOworCQkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0dMQl9TVEFULCB0bXApOworCisJCQkJdWRjLT53YWl0X2Zvcl9hZGRyX2FjayA9IDA7CisJCQkJVkRCRygiYWRkcmVzcyAlZFxuIiwgdWRjLT5hZGRyKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIE9VVCBwYWNrZXQgYXJyaXZlZCAuLi4gKi8KKwllbHNlIGlmIChjc3IgJiBBVDkxX1VEUF9SWF9EQVRBX0JLMCkgeworCQljc3IgfD0gQ0xSX0ZYOworCQljc3IgJj0gfihTRVRfRlggfCBBVDkxX1VEUF9SWF9EQVRBX0JLMCk7CisKKwkJLyogT1VUIERBVEEgc3RhZ2UgKi8KKwkJaWYgKCFlcDAtPmlzX2luKSB7CisJCQlpZiAocmVxKSB7CisJCQkJaWYgKGhhbmRsZV9lcChlcDApKSB7CisJCQkJCS8qIHNlbmQgSU4vU1RBVFVTICovCisJCQkJCVBBQ0tFVCgiZXAwIGluL3N0YXR1c1xuIik7CisJCQkJCWNzciA9IF9fcmF3X3JlYWRsKGNyZWcpOworCQkJCQljc3IgJj0gflNFVF9GWDsKKwkJCQkJY3NyIHw9IENMUl9GWCB8IEFUOTFfVURQX1RYUEtUUkRZOworCQkJCQlfX3Jhd193cml0ZWwoY3NyLCBjcmVnKTsKKwkJCQkJdWRjLT5yZXFfcGVuZGluZyA9IDA7CisJCQkJfQorCQkJfSBlbHNlIGlmICh1ZGMtPnJlcV9wZW5kaW5nKSB7CisJCQkJLyoKKwkJCQkgKiBBVDkxIGhhcmR3YXJlIGhhcyBhIGhhcmQgdGltZSB3aXRoIHRoaXMKKwkJCQkgKiAiZGVmZXJyZWQgcmVzcG9uc2UiIG1vZGUgZm9yIGNvbnRyb2wtT1VUCisJCQkJICogdHJhbnNmZXJzLiAgKEZvciBjb250cm9sLUlOIGl0J3MgZmluZS4pCisJCQkJICoKKwkJCQkgKiBUaGUgbm9ybWFsIHNvbHV0aW9uIGxlYXZlcyBPVVQgZGF0YSBpbiB0aGUKKwkJCQkgKiBmaWZvIHVudGlsIHRoZSBnYWRnZXQgZHJpdmVyIGlzIHJlYWR5LgorCQkJCSAqIFdlIGNvdWxkbid0IGRvIHRoYXQgaGVyZSB3aXRob3V0IGRpc2FibGluZworCQkJCSAqIHRoZSBJUlEgdGhhdCB0ZWxscyBhYm91dCBTRVRVUCBwYWNrZXRzLAorCQkJCSAqIGUuZy4gd2hlbiB0aGUgaG9zdCBnZXRzIGltcGF0aWVudC4uLgorCQkJCSAqCisJCQkJICogV29ya2luZyBhcm91bmQgaXQgYnkgY29weWluZyBpbnRvIGEgYnVmZmVyCisJCQkJICogd291bGQgYWxtb3N0IGJlIGEgbm9uLWRlZmVycmVkIHJlc3BvbnNlLAorCQkJCSAqIGV4Y2VwdCB0aGF0IGl0IHdvdWxkbid0IHBlcm1pdCByZWxpYWJsZQorCQkJCSAqIHN0YWxsaW5nIG9mIHRoZSByZXF1ZXN0LiAgSW5zdGVhZCwgZGVtYW5kCisJCQkJICogdGhhdCBnYWRnZXQgZHJpdmVycyBub3QgdXNlIHRoaXMgbW9kZS4KKwkJCQkgKi8KKwkJCQlEQkcoIm5vIGNvbnRyb2wtT1VUIGRlZmVycmVkIHJlc3BvbnNlcyFcbiIpOworCQkJCV9fcmF3X3dyaXRlbChjc3IgfCBBVDkxX1VEUF9GT1JDRVNUQUxMLCBjcmVnKTsKKwkJCQl1ZGMtPnJlcV9wZW5kaW5nID0gMDsKKwkJCX0KKworCQkvKiBTVEFUVVMgc3RhZ2UgZm9yIGNvbnRyb2wtSU47IGFjay4gICovCisJCX0gZWxzZSB7CisJCQlQQUNLRVQoImVwMCBvdXQvc3RhdHVzIEFDS1xuIik7CisJCQlfX3Jhd193cml0ZWwoY3NyLCBjcmVnKTsKKworCQkJLyogImVhcmx5IiBzdGF0dXMgc3RhZ2UgKi8KKwkJCWlmIChyZXEpCisJCQkJZG9uZShlcDAsIHJlcSwgMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhdDkxX3VkY19pcnEgKGludCBpcnEsIHZvaWQgKl91ZGMsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBhdDkxX3VkYwkJKnVkYyA9IF91ZGM7CisJdTMyCQkJcmVzY2FucyA9IDU7CisKKwl3aGlsZSAocmVzY2Fucy0tKSB7CisJCXUzMglzdGF0dXMgPSBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0lTUik7CisKKwkJc3RhdHVzICY9IGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfSU1SKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlicmVhazsKKworCQkvKiBVU0IgcmVzZXQgaXJxOiAgbm90IG1hc2thYmxlICovCisJCWlmIChzdGF0dXMgJiBBVDkxX1VEUF9FTkRCVVNSRVMpIHsKKwkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lEUiwgfk1JTklNVVNfSU5URVJSVVBUVVMpOworCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSUVSLCBNSU5JTVVTX0lOVEVSUlVQVFVTKTsKKwkJCS8qIEF0bWVsIGNvZGUgY2xlYXJzIHRoaXMgaXJxIHR3aWNlICovCisJCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JQ1IsIEFUOTFfVURQX0VOREJVU1JFUyk7CisJCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JQ1IsIEFUOTFfVURQX0VOREJVU1JFUyk7CisJCQlWREJHKCJlbmQgYnVzIHJlc2V0XG4iKTsKKwkJCXVkYy0+YWRkciA9IDA7CisJCQlzdG9wX2FjdGl2aXR5KHVkYyk7CisKKwkJCS8qIGVuYWJsZSBlcDAgKi8KKwkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0NTUigwKSwgQVQ5MV9VRFBfRVBFRFMgfCBBVDkxX1VEUF9FUFRZUEVfQ1RSTCk7CisJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJdWRjLT5zdXNwZW5kZWQgPSAwOworCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSUVSLCBBVDkxX1VEUF9FUCgwKSk7CisKKwkJCS8qCisJCQkgKiBOT1RFOiAgdGhpcyBkcml2ZXIga2VlcHMgY2xvY2tzIG9mZiB1bmxlc3MgdGhlCisJCQkgKiBVU0IgaG9zdCBpcyBwcmVzZW50LiAgVGhhdCBzYXZlcyBwb3dlciwgYW5kIGFsc28KKwkJCSAqIGVsaW1pbmF0ZXMgSVJRcyAocmVzZXQsIHJlc3VtZSwgc3VzcGVuZCkgdGhhdCBjYW4KKwkJCSAqIG90aGVyd2lzZSBmbG9vZCBmcm9tIHRoZSBjb250cm9sbGVyLiAgSWYgeW91cgorCQkJICogYm9hcmQgZG9lc24ndCBzdXBwb3J0IFZCVVMgZGV0ZWN0aW9uLCBzdXNwZW5kIGFuZAorCQkJICogcmVzdW1lIGlycSBsb2dpYyBtYXkgbmVlZCBtb3JlIGF0dGVudGlvbi4uLgorCQkJICovCisKKwkJLyogaG9zdCBpbml0aWF0ZWQgc3VzcGVuZCAoMyttcyBidXMgaWRsZSkgKi8KKwkJfSBlbHNlIGlmIChzdGF0dXMgJiBBVDkxX1VEUF9SWFNVU1ApIHsKKwkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lEUiwgQVQ5MV9VRFBfUlhTVVNQKTsKKwkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lFUiwgQVQ5MV9VRFBfUlhSU00pOworCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSUNSLCBBVDkxX1VEUF9SWFNVU1ApOworCQkJLy8gVkRCRygiYnVzIHN1c3BlbmRcbiIpOworCQkJaWYgKHVkYy0+c3VzcGVuZGVkKQorCQkJCWNvbnRpbnVlOworCQkJdWRjLT5zdXNwZW5kZWQgPSAxOworCisJCQkvKgorCQkJICogTk9URTogIHdoZW4gc3VzcGVuZGluZyBhIFZCVVMtcG93ZXJlZCBkZXZpY2UsIHRoZQorCQkJICogZ2FkZ2V0IGRyaXZlciBzaG91bGQgc3dpdGNoIGludG8gc2xvdyBjbG9jayBtb2RlCisJCQkgKiBhbmQgdGhlbiBpbnRvIHN0YW5kYnkgdG8gYXZvaWQgZHJhd2luZyBtb3JlIHRoYW4KKwkJCSAqIDUwMHVBIHBvd2VyICgyNTAwdUEgZm9yIHNvbWUgaGlnaC1wb3dlciBjb25maWdzKS4KKwkJCSAqLworCQkJaWYgKHVkYy0+ZHJpdmVyICYmIHVkYy0+ZHJpdmVyLT5zdXNwZW5kKQorCQkJCXVkYy0+ZHJpdmVyLT5zdXNwZW5kKCZ1ZGMtPmdhZGdldCk7CisKKwkJLyogaG9zdCBpbml0aWF0ZWQgcmVzdW1lICovCisJCX0gZWxzZSBpZiAoc3RhdHVzICYgQVQ5MV9VRFBfUlhSU00pIHsKKwkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0lEUiwgQVQ5MV9VRFBfUlhSU00pOworCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSUVSLCBBVDkxX1VEUF9SWFNVU1ApOworCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSUNSLCBBVDkxX1VEUF9SWFJTTSk7CisJCQkvLyBWREJHKCJidXMgcmVzdW1lXG4iKTsKKwkJCWlmICghdWRjLT5zdXNwZW5kZWQpCisJCQkJY29udGludWU7CisJCQl1ZGMtPnN1c3BlbmRlZCA9IDA7CisKKwkJCS8qCisJCQkgKiBOT1RFOiAgZm9yIGEgVkJVUy1wb3dlcmVkIGRldmljZSwgdGhlIGdhZGdldCBkcml2ZXIKKwkJCSAqIHdvdWxkIG5vcm1hbGx5IHdhbnQgdG8gc3dpdGNoIG91dCBvZiBzbG93IGNsb2NrCisJCQkgKiBtb2RlIGludG8gbm9ybWFsIG1vZGUuCisJCQkgKi8KKwkJCWlmICh1ZGMtPmRyaXZlciAmJiB1ZGMtPmRyaXZlci0+cmVzdW1lKQorCQkJCXVkYy0+ZHJpdmVyLT5yZXN1bWUoJnVkYy0+Z2FkZ2V0KTsKKworCQkvKiBlbmRwb2ludCBJUlFzIGFyZSBjbGVhcmVkIGJ5IGhhbmRsaW5nIHRoZW0gKi8KKwkJfSBlbHNlIHsKKwkJCWludAkJaTsKKwkJCXVuc2lnbmVkCW1hc2sgPSAxOworCQkJc3RydWN0IGF0OTFfZXAJKmVwID0gJnVkYy0+ZXBbMV07CisKKwkJCWlmIChzdGF0dXMgJiBtYXNrKQorCQkJCWhhbmRsZV9lcDAodWRjKTsKKwkJCWZvciAoaSA9IDE7IGkgPCBOVU1fRU5EUE9JTlRTOyBpKyspIHsKKwkJCQltYXNrIDw8PSAxOworCQkJCWlmIChzdGF0dXMgJiBtYXNrKQorCQkJCQloYW5kbGVfZXAoZXApOworCQkJCWVwKys7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGMgY29udHJvbGxlciA9IHsKKwkuZ2FkZ2V0ID0geworCQkub3BzID0gJmF0OTFfdWRjX29wcywKKwkJLmVwMCA9ICZjb250cm9sbGVyLmVwWzBdLmVwLAorCQkubmFtZSA9IGRyaXZlcl9uYW1lLAorCQkuZGV2ID0geworCQkJLmJ1c19pZCA9ICJnYWRnZXQiCisJCX0KKwl9LAorCS5lcFswXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJPSBlcDBuYW1lLAorCQkJLm9wcwk9ICZhdDkxX2VwX29wcywKKwkJfSwKKwkJLnVkYwkJPSAmY29udHJvbGxlciwKKwkJLm1heHBhY2tldAk9IDgsCisJCS5jcmVnCQk9ICh2b2lkIF9faW9tZW0gKikoQVQ5MV9WQV9CQVNFX1VEUCArIEFUOTFfVURQX0NTUigwKSksCisJCS5pbnRfbWFzawk9IDEgPDwgMCwKKwl9LAorCS5lcFsxXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJPSAiZXAxIiwKKwkJCS5vcHMJPSAmYXQ5MV9lcF9vcHMsCisJCX0sCisJCS51ZGMJCT0gJmNvbnRyb2xsZXIsCisJCS5pc19waW5ncG9uZwk9IDEsCisJCS5tYXhwYWNrZXQJPSA2NCwKKwkJLmNyZWcJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfVURQICsgQVQ5MV9VRFBfQ1NSKDEpKSwKKwkJLmludF9tYXNrCT0gMSA8PCAxLAorCX0sCisJLmVwWzJdID0geworCQkuZXAgPSB7CisJCQkubmFtZQk9ICJlcDIiLAorCQkJLm9wcwk9ICZhdDkxX2VwX29wcywKKwkJfSwKKwkJLnVkYwkJPSAmY29udHJvbGxlciwKKwkJLmlzX3Bpbmdwb25nCT0gMSwKKwkJLm1heHBhY2tldAk9IDY0LAorCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAgKyBBVDkxX1VEUF9DU1IoMikpLAorCQkuaW50X21hc2sJPSAxIDw8IDIsCisJfSwKKwkuZXBbM10gPSB7CisJCS5lcCA9IHsKKwkJCS8qIGNvdWxkIGFjdHVhbGx5IGRvIGJ1bGsgdG9vICovCisJCQkubmFtZQk9ICJlcDMtaW50IiwKKwkJCS5vcHMJPSAmYXQ5MV9lcF9vcHMsCisJCX0sCisJCS51ZGMJCT0gJmNvbnRyb2xsZXIsCisJCS5tYXhwYWNrZXQJPSA4LAorCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAgKyBBVDkxX1VEUF9DU1IoMykpLAorCQkuaW50X21hc2sJPSAxIDw8IDMsCisJfSwKKwkuZXBbNF0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCT0gImVwNCIsCisJCQkub3BzCT0gJmF0OTFfZXBfb3BzLAorCQl9LAorCQkudWRjCQk9ICZjb250cm9sbGVyLAorCQkuaXNfcGluZ3BvbmcJPSAxLAorCQkubWF4cGFja2V0CT0gMjU2LAorCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAgKyBBVDkxX1VEUF9DU1IoNCkpLAorCQkuaW50X21hc2sJPSAxIDw8IDQsCisJfSwKKwkuZXBbNV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCT0gImVwNSIsCisJCQkub3BzCT0gJmF0OTFfZXBfb3BzLAorCQl9LAorCQkudWRjCQk9ICZjb250cm9sbGVyLAorCQkuaXNfcGluZ3BvbmcJPSAxLAorCQkubWF4cGFja2V0CT0gMjU2LAorCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAgKyBBVDkxX1VEUF9DU1IoNSkpLAorCQkuaW50X21hc2sJPSAxIDw8IDUsCisJfSwKKwkvKiBlcDYgYW5kIGVwNyBhcmUgYWxzbyByZXNlcnZlZCAqLworfTsKKworc3RhdGljIGlycXJldHVybl90IGF0OTFfdmJ1c19pcnEoaW50IGlycSwgdm9pZCAqX3VkYywgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IGF0OTFfdWRjCSp1ZGMgPSBfdWRjOworCXVuc2lnbmVkCXZhbHVlOworCisJLyogdmJ1cyBuZWVkcyBhdCBsZWFzdCBicmllZiBkZWJvdW5jaW5nICovCisJdWRlbGF5KDEwKTsKKwl2YWx1ZSA9IGF0OTFfZ2V0X2dwaW9fdmFsdWUodWRjLT5ib2FyZC52YnVzX3Bpbik7CisJaWYgKHZhbHVlICE9IHVkYy0+dmJ1cykKKwkJYXQ5MV92YnVzX3Nlc3Npb24oJnVkYy0+Z2FkZ2V0LCB2YWx1ZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGF0OTFfdWRjCSp1ZGMgPSAmY29udHJvbGxlcjsKKwlpbnQJCXJldHZhbDsKKworCWlmICghZHJpdmVyCisJCQl8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMCisJCQl8fCAhZHJpdmVyLT5iaW5kCisJCQl8fCAhZHJpdmVyLT51bmJpbmQKKwkJCXx8ICFkcml2ZXItPnNldHVwKSB7CisJCURCRygiYmFkIHBhcmFtZXRlci5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodWRjLT5kcml2ZXIpIHsKKwkJREJHKCJVREMgYWxyZWFkeSBoYXMgYSBnYWRnZXQgZHJpdmVyXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKKwl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOworCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXJfZGF0YSA9ICZkcml2ZXItPmRyaXZlcjsKKwl1ZGMtPmVuYWJsZWQgPSAxOworCXVkYy0+c2VsZnBvd2VyZWQgPSAxOworCisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZ1ZGMtPmdhZGdldCk7CisJaWYgKHJldHZhbCkgeworCQlEQkcoImRyaXZlci0+YmluZCgpIHJldHVybmVkICVkXG4iLCByZXR2YWwpOworCQl1ZGMtPmRyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlwdWxsdXAodWRjLCAxKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlEQkcoImJvdW5kIHRvICVzXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKKworaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gJmNvbnRyb2xsZXI7CisKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gdWRjLT5kcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwl1ZGMtPmVuYWJsZWQgPSAwOworCXB1bGx1cCh1ZGMsIDApOworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCWRyaXZlci0+dW5iaW5kKCZ1ZGMtPmdhZGdldCk7CisJdWRjLT5kcml2ZXIgPSBOVUxMOworCisJREJHKCJ1bmJvdW5kIGZyb20gJXNcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGF0OTF1ZGNfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCS8qIGZvcmNlIGRpc2Nvbm5lY3Qgb24gcmVib290ICovCisJcHVsbHVwKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldiksIDApOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdDkxdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZQkqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgYXQ5MV91ZGMJKnVkYzsKKwlpbnQJCXJldHZhbDsKKworCWlmICghZGV2LT5wbGF0Zm9ybV9kYXRhKSB7CisJCS8qIHNtYWxsIChzbyB3ZSBjb3B5IGl0KSBidXQgY3JpdGljYWwhICovCisJCURCRygibWlzc2luZyBwbGF0Zm9ybV9kYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oQVQ5MV9CQVNFX1VEUCwgU1pfMTZLLCBkcml2ZXJfbmFtZSkpIHsKKwkJREJHKCJzb21lb25lJ3MgdXNpbmcgVURDIG1lbW9yeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogaW5pdCBzb2Z0d2FyZSBzdGF0ZSAqLworCXVkYyA9ICZjb250cm9sbGVyOworCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBkZXY7CisJdWRjLT5ib2FyZCA9ICooc3RydWN0IGF0OTFfdWRjX2RhdGEgKikgZGV2LT5wbGF0Zm9ybV9kYXRhOworCXVkYy0+cGRldiA9IHBkZXY7CisJdWRjX3JlaW5pdCh1ZGMpOworCXVkYy0+ZW5hYmxlZCA9IDA7CisKKwkvKiBnZXQgaW50ZXJmYWNlIGFuZCBmdW5jdGlvbiBjbG9ja3MgKi8KKwl1ZGMtPmljbGsgPSBjbGtfZ2V0KGRldiwgInVkY19jbGsiKTsKKwl1ZGMtPmZjbGsgPSBjbGtfZ2V0KGRldiwgInVkcGNrIik7CisJaWYgKElTX0VSUih1ZGMtPmljbGspIHx8IElTX0VSUih1ZGMtPmZjbGspKSB7CisJCURCRygiY2xvY2tzIG1pc3NpbmdcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJnVkYy0+Z2FkZ2V0LmRldik7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZmFpbDA7CisKKwkvKiBkaXNhYmxlIGV2ZXJ5dGhpbmcgdW50aWwgdGhlcmUncyBhIGdhZGdldCBkcml2ZXIgYW5kIHZidXMgKi8KKwlwdWxsdXAodWRjLCAwKTsKKworCS8qIHJlcXVlc3QgVURDIGFuZCBtYXliZSBWQlVTIGlycXMgKi8KKwlpZiAocmVxdWVzdF9pcnEoQVQ5MV9JRF9VRFAsIGF0OTFfdWRjX2lycSwgU0FfSU5URVJSVVBULCBkcml2ZXJfbmFtZSwgdWRjKSkgeworCQlEQkcoInJlcXVlc3QgaXJxICVkIGZhaWxlZFxuIiwgQVQ5MV9JRF9VRFApOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZmFpbDE7CisJfQorCWlmICh1ZGMtPmJvYXJkLnZidXNfcGluID4gMCkgeworCQlpZiAocmVxdWVzdF9pcnEodWRjLT5ib2FyZC52YnVzX3BpbiwgYXQ5MV92YnVzX2lycSwgU0FfSU5URVJSVVBULCBkcml2ZXJfbmFtZSwgdWRjKSkgeworCQkJREJHKCJyZXF1ZXN0IHZidXMgaXJxICVkIGZhaWxlZFxuIiwgdWRjLT5ib2FyZC52YnVzX3Bpbik7CisJCQlmcmVlX2lycShBVDkxX0lEX1VEUCwgdWRjKTsKKwkJCXJldHZhbCA9IC1FQlVTWTsKKwkJCWdvdG8gZmFpbDE7CisJCX0KKwl9IGVsc2UgeworCQlEQkcoIm5vIFZCVVMgZGV0ZWN0aW9uLCBhc3N1bWluZyBhbHdheXMtb25cbiIpOworCQl1ZGMtPnZidXMgPSAxOworCX0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCB1ZGMpOworCWNyZWF0ZV9kZWJ1Z19maWxlKHVkYyk7CisKKwlJTkZPKCIlcyB2ZXJzaW9uICVzXG4iLCBkcml2ZXJfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworCitmYWlsMToKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKK2ZhaWwwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihBVDkxX1ZBX0JBU0VfVURQLCBTWl8xNkspOworCURCRygiJXMgcHJvYmUgZmFpbGVkLCAlZFxuIiwgZHJpdmVyX25hbWUsIHJldHZhbCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYXQ5MXVkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCURCRygicmVtb3ZlXG4iKTsKKworCXB1bGx1cCh1ZGMsIDApOworCisJaWYgKHVkYy0+ZHJpdmVyICE9IDApCisJCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIodWRjLT5kcml2ZXIpOworCisJcmVtb3ZlX2RlYnVnX2ZpbGUodWRjKTsKKwlpZiAodWRjLT5ib2FyZC52YnVzX3BpbiA+IDApCisJCWZyZWVfaXJxKHVkYy0+Ym9hcmQudmJ1c19waW4sIHVkYyk7CisJZnJlZV9pcnEoQVQ5MV9JRF9VRFAsIHVkYyk7CisJZGV2aWNlX3VucmVnaXN0ZXIoJnVkYy0+Z2FkZ2V0LmRldik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKEFUOTFfQkFTRV9VRFAsIFNaXzE2Syk7CisKKwljbGtfcHV0KHVkYy0+aWNsayk7CisJY2xrX3B1dCh1ZGMtPmZjbGspOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYXQ5MXVkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJLyoKKwkgKiBUaGUgInNhZmUiIHN1c3BlbmQgdHJhbnNpdGlvbnMgYXJlIG9wcG9ydHVuaXN0aWMgLi4uIGUuZy4gd2hlbgorCSAqIHRoZSBVU0IgbGluayBpcyBzdXNwZW5kZWQgKDQ4TUh6IGNsb2NrIGF1dG9nYXRlZCBvZmYpLCBvciB3aGVuCisJICogaXQncyBkaXNjb25uZWN0ZWQgKHByb2dyYW1tYXRpY2FsbHkgZ2F0ZWQgb2ZmLCBlbHNld2hlcmUpLgorCSAqIFRoZW4gd2UgY2FuIHN1c3BlbmQsIGFuZCB0aGUgY2hpcCBjYW4gZW50ZXIgc2xvdyBjbG9jayBtb2RlLgorCSAqCisJICogVGhlIHByb2JsZW0gY2FzZSBpcyBzb21lIGNvbXBvbmVudCAodXNlciBtb2RlPykgc3VzcGVuZGluZyB0aGlzCisJICogZGV2aWNlIHdoaWxlIGl0J3MgYWN0aXZlLCB3aXRoIHRoZSA0OCBNSHogY2xvY2sgaW4gdXNlLiAgVGhlcmUKKwkgKiBhcmUgdHdvIGJhc2ljIGFwcHJvYWNoZXM6ICAoYSkgdmV0byBzdXNwZW5kIGxldmVscyBpbnZvbHZpbmcgc2xvdworCSAqIGNsb2NrIG1vZGUsIChiKSBkaXNjb25uZWN0LCBzbyA0OCBNSHogd2lsbCBubyBsb25nZXIgYmUgaW4gdXNlCisJICogYW5kIHdlIGNhbiBlbnRlciBzbG93IGNsb2NrIG1vZGUuICBUaGlzIHVzZXMgKGIpIGZvciBub3csIHNpbmNlCisJICogaXQncyBzaW1wbGVzdCB1bnRpbCBBVDkxIFBNIGV4aXN0cyBhbmQgc3VwcG9ydHMgdGhlIG90aGVyIG9wdGlvbi4KKwkgKi8KKwlpZiAodWRjLT52YnVzICYmICF1ZGMtPnN1c3BlbmRlZCkKKwkJcHVsbHVwKHVkYywgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MXVkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJLyogbWF5YmUgcmVjb25uZWN0IHRvIGhvc3Q7IGlmIHNvLCBjbG9ja3Mgb24gKi8KKwlwdWxsdXAodWRjLCAxKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lCWF0OTF1ZGNfc3VzcGVuZAlOVUxMCisjZGVmaW5lCWF0OTF1ZGNfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdDkxX3VkYyA9IHsKKwkucHJvYmUJCT0gYXQ5MXVkY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGF0OTF1ZGNfcmVtb3ZlKSwKKwkuc2h1dGRvd24JPSBhdDkxdWRjX3NodXRkb3duLAorCS5zdXNwZW5kCT0gYXQ5MXVkY19zdXNwZW5kLAorCS5yZXN1bWUgCT0gYXQ5MXVkY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1ZGNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdDkxX3VkYyk7Cit9Cittb2R1bGVfaW5pdCh1ZGNfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdWRjX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0OTFfdWRjKTsKK30KK21vZHVsZV9leGl0KHVkY19leGl0X21vZHVsZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQVQ5MVJNOTIwMCB1ZGMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUaG9tYXMgUmF0aGJvbmUsIERhdmlkIEJyb3duZWxsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNDc5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuaApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBUaG9tYXMgUmF0aGJvbmUsIEhQIExhYnMKKyAqIENvcHlyaWdodCAoQykgMjAwNSBieSBJdmFuIEtva3NoYXlza3kKKyAqIENvcHlyaWdodCAoQykgMjAwNiBieSBTQU4gUGVvcGxlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgQVQ5MV9VRENfSAorI2RlZmluZSBBVDkxX1VEQ19ICisKKy8qCisgKiBVU0IgRGV2aWNlIFBvcnQgKFVEUCkgcmVnaXN0ZXJzLgorICogQmFzZWQgb24gQVQ5MVJNOTIwMCBkYXRhc2hlZXQgcmV2aXNpb24gRS4KKyAqLworCisjZGVmaW5lIEFUOTFfVURQX0ZSTV9OVU0JMHgwMAkJLyogRnJhbWUgTnVtYmVyIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9OVU0JKDB4N2ZmIDw8ICAwKQkvKiBGcmFtZSBOdW1iZXIgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX0ZSTV9FUlIJKDEgICAgIDw8IDE2KQkvKiBGcmFtZSBFcnJvciAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfRlJNX09LCSgxICAgICA8PCAxNykJLyogRnJhbWUgT0sgKi8KKworI2RlZmluZSBBVDkxX1VEUF9HTEJfU1RBVAkweDA0CQkvKiBHbG9iYWwgU3RhdGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX0ZBRERFTgkoMSA8PCAgMCkJLyogRnVuY3Rpb24gQWRkcmVzcyBFbmFibGUgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX0NPTkZHCSgxIDw8ICAxKQkvKiBDb25maWd1cmVkICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9FU1IJKDEgPDwgIDIpCS8qIEVuYWJsZSBTZW5kIFJlc3VtZSAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfUlNNSU5QUgkoMSA8PCAgMykJLyogUmVzdW1lIGhhcyBiZWVuIHNlbnQgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX1JNV1VQRQkoMSA8PCAgNCkJLyogUmVtb3RlIFdha2UgVXAgRW5hYmxlICovCisKKyNkZWZpbmUgQVQ5MV9VRFBfRkFERFIJCTB4MDgJCS8qIEZ1bmN0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX0ZBREQJKDB4N2YgPDwgMCkJLyogRnVuY3Rpb24gQWRkcmVzcyBWYWx1ZSAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfRkVOCSgxICAgIDw8IDgpCS8qIEZ1bmN0aW9uIEVuYWJsZSAqLworCisjZGVmaW5lIEFUOTFfVURQX0lFUgkJMHgxMAkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBBVDkxX1VEUF9JRFIJCTB4MTQJCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfVURQX0lNUgkJMHgxOAkJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBBVDkxX1VEUF9JU1IJCTB4MWMJCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX0VQKG4pCSgxIDw8IChuKSkJLyogRW5kcG9pbnQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfUlhTVVNQCSgxIDw8ICA4KSAJLyogVVNCIFN1c3BlbmQgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfUlhSU00JKDEgPDwgIDkpCS8qIFVTQiBSZXN1bWUgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfRVhUUlNNCSgxIDw8IDEwKQkvKiBFeHRlcm5hbCBSZXN1bWUgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfU09GSU5UCSgxIDw8IDExKQkvKiBTdGFydCBvZiBGcmFtZSBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9FTkRCVVNSRVMJKDEgPDwgMTIpCS8qIEVuZCBvZiBCdXMgUmVzZXQgSW50ZXJycHQgU3RhdHVzICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9XQUtFVVAJKDEgPDwgMTMpCS8qIFVTQiBXYWtldXAgSW50ZXJydXB0IFN0YXR1cyAqLworCisjZGVmaW5lIEFUOTFfVURQX0lDUgkJMHgyMAkJLyogSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIEFUOTFfVURQX1JTVF9FUAkJMHgyOAkJLyogUmVzZXQgRW5kcG9pbnQgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBBVDkxX1VEUF9DU1IobikJCSgweDMwKygobikqNCkpCS8qIEVuZHBvaW50IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycyAwLTcgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX1RYQ09NUAkoMSA8PCAgMCkJLyogR2VuZXJhdGVzIElOIHBhY2tldCB3aXRoIGRhdGEgcHJldmlvdXNseSB3cml0dGVuIGluIERQUiAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfUlhfREFUQV9CSzAgKDEgPDwgIDEpCS8qIFJlY2VpdmUgRGF0YSBCYW5rIDAgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX1JYU0VUVVAJKDEgPDwgIDIpCS8qIFNlbmQgU1RBTEwgdG8gdGhlIGhvc3QgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX1NUQUxMU0VOVAkoMSA8PCAgMykJLyogU3RhbGwgU2VudCAvIElzb2Nocm9ub3VzIGVycm9yIChJc29jaHJvbm91cyBlbmRwb2ludHMpICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9UWFBLVFJEWQkoMSA8PCAgNCkJLyogVHJhbnNtaXQgUGFja2V0IFJlYWR5ICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9GT1JDRVNUQUxMCSgxIDw8ICA1KQkvKiBGb3JjZSBTdGFsbCAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfUlhfREFUQV9CSzEgKDEgPDwgIDYpCS8qIFJlY2VpdmUgRGF0YSBCYW5rIDEgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX0RJUgkoMSA8PCAgNykJLyogVHJhbnNmZXIgRGlyZWN0aW9uICovCisjZGVmaW5lICAgICBBVDkxX1VEUF9FUFRZUEUJKDcgPDwgIDgpCS8qIEVuZHBvaW50IFR5cGUgKi8KKyNkZWZpbmUJCUFUOTFfVURQX0VQVFlQRV9DVFJMCQkoMCA8PCAgOCkKKyNkZWZpbmUJCUFUOTFfVURQX0VQVFlQRV9JU09fT1VUCQkoMSA8PCAgOCkKKyNkZWZpbmUJCUFUOTFfVURQX0VQVFlQRV9CVUxLX09VVAkoMiA8PCAgOCkKKyNkZWZpbmUJCUFUOTFfVURQX0VQVFlQRV9JTlRfT1VUCQkoMyA8PCAgOCkKKyNkZWZpbmUJCUFUOTFfVURQX0VQVFlQRV9JU09fSU4JCSg1IDw8ICA4KQorI2RlZmluZQkJQVQ5MV9VRFBfRVBUWVBFX0JVTEtfSU4JCSg2IDw8ICA4KQorI2RlZmluZQkJQVQ5MV9VRFBfRVBUWVBFX0lOVF9JTgkJKDcgPDwgIDgpCisjZGVmaW5lICAgICBBVDkxX1VEUF9EVEdMRQkoMSA8PCAxMSkJLyogRGF0YSBUb2dnbGUgKi8KKyNkZWZpbmUgICAgIEFUOTFfVURQX0VQRURTCSgxIDw8IDE1KQkvKiBFbmRwb2ludCBFbmFibGUvRGlzYWJsZSAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfUlhCWVRFQ05UCSgweDdmZiA8PCAxNikJLyogTnVtYmVyIG9mIGJ5dGVzIGluIEZJRk8gKi8KKworI2RlZmluZSBBVDkxX1VEUF9GRFIobikJCSgweDUwKygobikqNCkpCS8qIEVuZHBvaW50IEZJRk8gRGF0YSBSZWdpc3RlcnMgMC03ICovCisKKyNkZWZpbmUgQVQ5MV9VRFBfVFhWQwkJMHg3NAkJLyogVHJhbnNjZWl2ZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgQVQ5MV9VRFBfVFhWQ19UWFZESVMgKDEgPDwgOCkJLyogVHJhbnNjZWl2ZXIgRGlzYWJsZSAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBjb250cm9sbGVyIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMKKyAqLworCisjZGVmaW5lCU5VTV9FTkRQT0lOVFMJNgorCisvKgorICogaGFyZHdhcmUgd29uJ3QgZGlzYWJsZSBidXMgcmVzZXQsIG9yIHJlc3VtZSB3aGlsZSB0aGUgY29udHJvbGxlcgorICogaXMgc3VzcGVuZGVkIC4uLiB3YXRjaGluZyBzdXNwZW5kIGhlbHBzIGtlZXAgdGhlIGxvZ2ljIHN5bW1ldHJpYy4KKyAqLworI2RlZmluZQlNSU5JTVVTX0lOVEVSUlVQVFVTIFwKKwkoQVQ5MV9VRFBfRU5EQlVTUkVTIHwgQVQ5MV9VRFBfUlhSU00gfCBBVDkxX1VEUF9SWFNVU1ApCisKK3N0cnVjdCBhdDkxX2VwIHsKKwlzdHJ1Y3QgdXNiX2VwCQkJZXA7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisJc3RydWN0IGF0OTFfdWRjCQkJKnVkYzsKKwl2b2lkIF9faW9tZW0JCQkqY3JlZzsKKworCXVuc2lnbmVkCQkJbWF4cGFja2V0OjE2OworCXU4CQkJCWludF9tYXNrOworCXVuc2lnbmVkCQkJaXNfcGluZ3Bvbmc6MTsKKworCXVuc2lnbmVkCQkJc3RvcHBlZDoxOworCXVuc2lnbmVkCQkJaXNfaW46MTsKKwl1bnNpZ25lZAkJCWlzX2lzbzoxOworCXVuc2lnbmVkCQkJZmlmb19iYW5rOjE7CisKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKKwkJCQkJKmRlc2M7Cit9OworCisvKgorICogZHJpdmVyIGlzIG5vbi1TTVAsIGFuZCBqdXN0IGJsb2NrcyBJUlFzIHdoZW5ldmVyIGl0IG5lZWRzCisgKiBhY2Nlc3MgcHJvdGVjdGlvbiBmb3IgY2hpcCByZWdpc3RlcnMgb3IgZHJpdmVyIHN0YXRlCisgKi8KK3N0cnVjdCBhdDkxX3VkYyB7CisJc3RydWN0IHVzYl9nYWRnZXQJCWdhZGdldDsKKwlzdHJ1Y3QgYXQ5MV9lcAkJCWVwW05VTV9FTkRQT0lOVFNdOworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkqZHJpdmVyOworCXVuc2lnbmVkCQkJdmJ1czoxOworCXVuc2lnbmVkCQkJZW5hYmxlZDoxOworCXVuc2lnbmVkCQkJY2xvY2tlZDoxOworCXVuc2lnbmVkCQkJc3VzcGVuZGVkOjE7CisJdW5zaWduZWQJCQlyZXFfcGVuZGluZzoxOworCXVuc2lnbmVkCQkJd2FpdF9mb3JfYWRkcl9hY2s6MTsKKwl1bnNpZ25lZAkJCXdhaXRfZm9yX2NvbmZpZ19hY2s6MTsKKwl1bnNpZ25lZAkJCXNlbGZwb3dlcmVkOjE7CisJdTgJCQkJYWRkcjsKKwlzdHJ1Y3QgYXQ5MV91ZGNfZGF0YQkJYm9hcmQ7CisJc3RydWN0IGNsawkJCSppY2xrLCAqZmNsazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJCSpwZGU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdDkxX3VkYyAqdG9fdWRjKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnKQoreworCXJldHVybiBjb250YWluZXJfb2YoZywgc3RydWN0IGF0OTFfdWRjLCBnYWRnZXQpOworfQorCitzdHJ1Y3QgYXQ5MV9yZXF1ZXN0IHsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCXJlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9ERUJVRyAidWRjOiAiIHN0dWZmKQorI2Vsc2UKKyNkZWZpbmUgREJHKHN0dWZmLi4uKQkJZG97fXdoaWxlKDApCisjZW5kaWYKKworI2lmZGVmIFZFUkJPU0UKKyMgICAgZGVmaW5lIFZEQkcJCURCRworI2Vsc2UKKyMgICAgZGVmaW5lIFZEQkcoc3R1ZmYuLi4pCWRve313aGlsZSgwKQorI2VuZGlmCisKKyNpZmRlZiBQQUNLRVRfVFJBQ0UKKyMgICAgZGVmaW5lIFBBQ0tFVAkJVkRCRworI2Vsc2UKKyMgICAgZGVmaW5lIFBBQ0tFVChzdHVmZi4uLikJZG97fXdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBFUlIoc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9FUlIgInVkYzogIiBzdHVmZikKKyNkZWZpbmUgV0FSTihzdHVmZi4uLikJCXByaW50ayhLRVJOX1dBUk5JTkcgInVkYzogIiBzdHVmZikKKyNkZWZpbmUgSU5GTyhzdHVmZi4uLikJCXByaW50ayhLRVJOX0lORk8gInVkYzogIiBzdHVmZikKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwppbmRleCA5NzM0Y2I3Li40MmNlNDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCkBAIC00NzgsMTAgKzQ3OCw5IEBACiAJCXJldHVybiBOVUxMOwogCWVwID0gdXNiX2VwX3RvX2R1bW15X2VwIChfZXApOwogCi0JcmVxID0ga21hbGxvYyAoc2l6ZW9mICpyZXEsIG1lbV9mbGFncyk7CisJcmVxID0ga3phbGxvYyhzaXplb2YoKnJlcSksIG1lbV9mbGFncyk7CiAJaWYgKCFyZXEpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldCAocmVxLCAwLCBzaXplb2YgKnJlcSk7CiAJSU5JVF9MSVNUX0hFQUQgKCZyZXEtPnF1ZXVlKTsKIAlyZXR1cm4gJnJlcS0+cmVxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwppbmRleCBhZmM4NGNmLi5jM2Q4ZTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpAQCAtMTgyLDMzICsxODIsMzcgQEAKICAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgogICovCiAKLXN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBpZFZlbmRvcjsKK3N0YXRpYyB1c2hvcnQgaWRWZW5kb3I7CiBtb2R1bGVfcGFyYW0oaWRWZW5kb3IsIHVzaG9ydCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlkVmVuZG9yLCAiVVNCIFZlbmRvciBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgaWRQcm9kdWN0Oworc3RhdGljIHVzaG9ydCBpZFByb2R1Y3Q7CiBtb2R1bGVfcGFyYW0oaWRQcm9kdWN0LCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpZFByb2R1Y3QsICJVU0IgUHJvZHVjdCBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgYmNkRGV2aWNlOworc3RhdGljIHVzaG9ydCBiY2REZXZpY2U7CiBtb2R1bGVfcGFyYW0oYmNkRGV2aWNlLCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhiY2REZXZpY2UsICJVU0IgRGV2aWNlIHZlcnNpb24gKEJDRCkiKTsKIAotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaU1hbnVmYWN0dXJlcjsKK3N0YXRpYyBjaGFyICppTWFudWZhY3R1cmVyOwogbW9kdWxlX3BhcmFtKGlNYW51ZmFjdHVyZXIsIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaU1hbnVmYWN0dXJlciwgIlVTQiBNYW51ZmFjdHVyZXIgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQcm9kdWN0Oworc3RhdGljIGNoYXIgKmlQcm9kdWN0OwogbW9kdWxlX3BhcmFtKGlQcm9kdWN0LCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQcm9kdWN0LCAiVVNCIFByb2R1Y3Qgc3RyaW5nIik7CiAKK3N0YXRpYyBjaGFyICppU2VyaWFsTnVtYmVyOworbW9kdWxlX3BhcmFtKGlTZXJpYWxOdW1iZXIsIGNoYXJwLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaVNlcmlhbE51bWJlciwgIlNlcmlhbE51bWJlciIpOworCiAvKiBpbml0aWFsIHZhbHVlLCBjaGFuZ2VkIGJ5ICJpZmNvbmZpZyB1c2IwIGh3IGV0aGVyIHh4Onh4Onh4Onh4Onh4Onh4IiAqLwotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgZGV2X2FkZHI7CitzdGF0aWMgY2hhciAqZGV2X2FkZHI7CiBtb2R1bGVfcGFyYW0oZGV2X2FkZHIsIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGV2X2FkZHIsICJEZXZpY2UgRXRoZXJuZXQgQWRkcmVzcyIpOwogCiAvKiB0aGlzIGFkZHJlc3MgaXMgaW52aXNpYmxlIHRvIGlmY29uZmlnICovCi1zdGF0aWMgY2hhciAqX19pbml0ZGF0YSBob3N0X2FkZHI7CitzdGF0aWMgY2hhciAqaG9zdF9hZGRyOwogbW9kdWxlX3BhcmFtKGhvc3RfYWRkciwgY2hhcnAsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhob3N0X2FkZHIsICJIb3N0IEV0aGVybmV0IEFkZHJlc3MiKTsKIApAQCAtMjUzLDYgKzI1NywxNCBAQAogI2RlZmluZSBERVZfQ09ORklHX0NEQwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCSFNGQworI2RlZmluZSBERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCSERSQworI2RlZmluZSBERVZfQ09ORklHX0NEQworI2VuZGlmCisKIAogLyogRm9yIENEQy1pbmNhcGFibGUgaGFyZHdhcmUsIGNob29zZSB0aGUgc2ltcGxlIGNkYyBzdWJzZXQuCiAgKiBBbnl0aGluZyB0aGF0IHRhbGtzIGJ1bGsgKHdpdGhvdXQgbm90YWJsZSBidWdzKSBjYW4gZG8gdGhpcy4KQEAgLTM5NSw2ICs0MDcsNyBAQAogI2RlZmluZSBTVFJJTkdfQ0RDCQkJNwogI2RlZmluZSBTVFJJTkdfU1VCU0VUCQkJOAogI2RlZmluZSBTVFJJTkdfUk5ESVMJCQk5CisjZGVmaW5lIFNUUklOR19TRVJJQUxOVU1CRVIJCTEwCiAKIC8qIGhvbGRzIG91ciBiaWdnZXN0IGRlc2NyaXB0b3IgKG9yIFJORElTIHJlc3BvbnNlKSAqLwogI2RlZmluZSBVU0JfQlVGU0laCTI1NgpAQCAtODYyLDYgKzg3NSw3IEBACiAKIHN0YXRpYyBjaGFyCQkJCW1hbnVmYWN0dXJlciBbNTBdOwogc3RhdGljIGNoYXIJCQkJcHJvZHVjdF9kZXNjIFs0MF0gPSBEUklWRVJfREVTQzsKK3N0YXRpYyBjaGFyCQkJCXNlcmlhbF9udW1iZXIgWzIwXTsKIAogI2lmZGVmCURFVl9DT05GSUdfQ0RDCiAvKiBhZGRyZXNzIHRoYXQgdGhlIGhvc3Qgd2lsbCB1c2UgLi4uIHVzdWFsbHkgYXNzaWduZWQgYXQgcmFuZG9tICovCkBAIC04NzIsNiArODg2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZwkJc3RyaW5ncyBbXSA9IHsKIAl7IFNUUklOR19NQU5VRkFDVFVSRVIsCW1hbnVmYWN0dXJlciwgfSwKIAl7IFNUUklOR19QUk9EVUNULAlwcm9kdWN0X2Rlc2MsIH0sCisJeyBTVFJJTkdfU0VSSUFMTlVNQkVSLAlzZXJpYWxfbnVtYmVyLCB9LAogCXsgU1RSSU5HX0RBVEEsCQkiRXRoZXJuZXQgRGF0YSIsIH0sCiAjaWZkZWYJREVWX0NPTkZJR19DREMKIAl7IFNUUklOR19DREMsCQkiQ0RDIEV0aGVybmV0IiwgfSwKQEAgLTE1NDksNyArMTU2NCw4IEBACiB7CiAJc3RydWN0IGV0aF9kZXYJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAKLQkvLyBGSVhNRSBpZiBybmRpcywgZG9uJ3QgY2hhbmdlIHdoaWxlIGxpbmsncyBsaXZlCisJaWYgKGRldi0+cm5kaXMpCisJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAobmV3X210dSA8PSBFVEhfSExFTiB8fCBuZXdfbXR1ID4gRVRIX0ZSQU1FX0xFTikKIAkJcmV0dXJuIC1FUkFOR0U7CkBAIC0yMTE2LDcgKzIxMzIsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgdm9pZCBfX2V4aXQKIGV0aF91bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CiAJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CkBAIC0yMTUzLDcgKzIxNjksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZ2V0X2V0aGVyX2FkZHIgKGNvbnN0IGNoYXIgKnN0ciwgdTggKmRldl9hZGRyKQorc3RhdGljIGludCBfX2luaXQgZ2V0X2V0aGVyX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1OCAqZGV2X2FkZHIpCiB7CiAJaWYgKHN0cikgewogCQl1bnNpZ25lZAlpOwpAQCAtMjE2OCw5ICsyMTg0LDEwIEBACiAJCQlkZXZfYWRkciBbaV0gPSBudW07CiAJCX0KIAkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIgKGRldl9hZGRyKSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAwOwogCX0KIAlyYW5kb21fZXRoZXJfYWRkcihkZXZfYWRkcik7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC0yMjY4LDYgKzIyODUsMTAgQEAKIAkJc3RybGNweSAobWFudWZhY3R1cmVyLCBpTWFudWZhY3R1cmVyLCBzaXplb2YgbWFudWZhY3R1cmVyKTsKIAlpZiAoaVByb2R1Y3QpCiAJCXN0cmxjcHkgKHByb2R1Y3RfZGVzYywgaVByb2R1Y3QsIHNpemVvZiBwcm9kdWN0X2Rlc2MpOworCWlmIChpU2VyaWFsTnVtYmVyKSB7CisJCWRldmljZV9kZXNjLmlTZXJpYWxOdW1iZXIgPSBTVFJJTkdfU0VSSUFMTlVNQkVSLAorCQlzdHJsY3B5KHNlcmlhbF9udW1iZXIsIGlTZXJpYWxOdW1iZXIsIHNpemVvZiBzZXJpYWxfbnVtYmVyKTsKKwl9CiAKIAkvKiBhbGwgd2UgcmVhbGx5IG5lZWQgaXMgYnVsayBJTi9PVVQgKi8KIAl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldCAoZ2FkZ2V0KTsKQEAgLTIzNzcsOSArMjM5OCwxMyBAQAogCSAqIFRoZSBob3N0IHNpZGUgYWRkcmVzcyBpcyB1c2VkIHdpdGggQ0RDIGFuZCBSTkRJUywgYW5kIGNvbW1vbmx5CiAJICogZW5kcyB1cCBpbiBhIHBlcnNpc3RlbnQgY29uZmlnIGRhdGFiYXNlLgogCSAqLwotCWdldF9ldGhlcl9hZGRyKGRldl9hZGRyLCBuZXQtPmRldl9hZGRyKTsKKwlpZiAoZ2V0X2V0aGVyX2FkZHIoZGV2X2FkZHIsIG5ldC0+ZGV2X2FkZHIpKQorCQlkZXZfd2FybigmZ2FkZ2V0LT5kZXYsCisJCQkidXNpbmcgcmFuZG9tICVzIGV0aGVybmV0IGFkZHJlc3NcbiIsICJzZWxmIik7CiAJaWYgKGNkYyB8fCBybmRpcykgewotCQlnZXRfZXRoZXJfYWRkcihob3N0X2FkZHIsIGRldi0+aG9zdF9tYWMpOworCQlpZiAoZ2V0X2V0aGVyX2FkZHIoaG9zdF9hZGRyLCBkZXYtPmhvc3RfbWFjKSkKKwkJCWRldl93YXJuKCZnYWRnZXQtPmRldiwKKwkJCQkidXNpbmcgcmFuZG9tICVzIGV0aGVybmV0IGFkZHJlc3NcbiIsICJob3N0Iik7CiAjaWZkZWYJREVWX0NPTkZJR19DREMKIAkJc25wcmludGYgKGV0aGFkZHIsIHNpemVvZiBldGhhZGRyLCAiJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKIAkJCWRldi0+aG9zdF9tYWMgWzBdLCBkZXYtPmhvc3RfbWFjIFsxXSwKQEAgLTI1MjMsNyArMjU0OCw3IEBACiAKIAkuZnVuY3Rpb24JPSAoY2hhciAqKSBkcml2ZXJfZGVzYywKIAkuYmluZAkJPSBldGhfYmluZCwKLQkudW5iaW5kCQk9IGV0aF91bmJpbmQsCisJLnVuYmluZAkJPSBfX2V4aXRfcChldGhfdW5iaW5kKSwKIAogCS5zZXR1cAkJPSBldGhfc2V0dXAsCiAJLmRpc2Nvbm5lY3QJPSBldGhfZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCBkZTU5YzU4Li5jZjNiZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC0zNjc4LDcgKzM2NzgsNyBAQAogCWtyZWZfcHV0KCZmc2ctPnJlZiwgZnNnX3JlbGVhc2UpOwogfQogCi1zdGF0aWMgdm9pZCBmc2dfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNnX3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQogewogCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CiAJaW50CQkJaTsKQEAgLTQwNjQsNyArNDA2NCw3IEBACiAjZW5kaWYKIAkuZnVuY3Rpb24JPSAoY2hhciAqKSBsb25nbmFtZSwKIAkuYmluZAkJPSBmc2dfYmluZCwKLQkudW5iaW5kCQk9IGZzZ191bmJpbmQsCisJLnVuYmluZAkJPSBfX2V4aXRfcChmc2dfdW5iaW5kKSwKIAkuZGlzY29ubmVjdAk9IGZzZ19kaXNjb25uZWN0LAogCS5zZXR1cAkJPSBmc2dfc2V0dXAsCiAJLnN1c3BlbmQJPSBmc2dfc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaAppbmRleCA4Y2JhZTIxLi5jNDA4MTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCkBAIC0zLDkgKzMsOSBAQAogICogZ2FkZ2V0IGRyaXZlcnMgb3Igb3RoZXIgY29kZSB0aGF0IG5lZWRzIHRvIGRlYWwgd2l0aCB0aGVtLCBhbmQgd2hpY2gKICAqIGF1dG9jb25maWd1cmVzIGluc3RlYWQgb2YgdXNpbmcgZWFybHkgYmluZGluZyB0byB0aGUgaGFyZHdhcmUuCiAgKgotICogVGhpcyBjb3VsZCBldmVudHVhbGx5IHdvcmsgbGlrZSB0aGUgQVJNIG1hY2hfaXNfKigpIHN0dWZmLCBkcml2ZW4gYnkKKyAqIFRoaXMgU0hPVUxEIGV2ZW50dWFsbHkgd29yayBsaWtlIHRoZSBBUk0gbWFjaF9pc18qKCkgc3R1ZmYsIGRyaXZlbiBieQogICogc29tZSBjb25maWcgZmlsZSB0aGF0IGdldHMgdXBkYXRlZCBhcyBuZXcgaGFyZHdhcmUgaXMgc3VwcG9ydGVkLgotICogKEFuZCBhdm9pZGluZyB0aGUgcnVudGltZSBjb21wYXJpc29ucyBpbiB0eXBpY2FsIG9uZS1jaG9pY2UgY2FzZXMuKQorICogKEFuZCBhdm9pZGluZyBhbGwgcnVudGltZSBjb21wYXJpc29ucyBpbiB0eXBpY2FsIG9uZS1jaG9pY2UgY29uZmlncyEpCiAgKgogICogTk9URTogIHNvbWUgb2YgdGhlc2UgY29udHJvbGxlciBkcml2ZXJzIG1heSBub3QgYmUgYXZhaWxhYmxlIHlldC4KICAqLwpAQCAtOTMsNiArOTMsMjYgQEAKICNkZWZpbmUgZ2FkZ2V0X2lzX2lteChnKQkwCiAjZW5kaWYKIAorLyogTWVudG9yIGhpZ2ggc3BlZWQgZnVuY3Rpb24gY29udHJvbGxlciAqLworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JIU0ZDCisjZGVmaW5lIGdhZGdldF9pc19tdXNiaHNmYyhnKQkhc3RyY21wKCJtdXNiaHNmY191ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhzZmMoZykJMAorI2VuZGlmCisKKy8qIE1lbnRvciBoaWdoIHNwZWVkICJkdWFsIHJvbGUiIGNvbnRyb2xsZXIsIHBlcmlwaGVyYWwgbW9kZSAqLworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JIRFJDCisjZGVmaW5lIGdhZGdldF9pc19tdXNiaGRyYyhnKQkhc3RyY21wKCJtdXNiaGRyY191ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhkcmMoZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NUEM4MjcyCisjZGVmaW5lIGdhZGdldF9pc19tcGM4MjcyKGcpCSFzdHJjbXAoIm1wYzgyNzJfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUgZ2FkZ2V0X2lzX21wYzgyNzIoZykJMAorI2VuZGlmCisKIC8vIENPTkZJR19VU0JfR0FER0VUX1NYMgogLy8gQ09ORklHX1VTQl9HQURHRVRfQVUxWDAwCiAvLyAuLi4KQEAgLTE0Myw1ICsxNjMsMTEgQEAKIAkJcmV0dXJuIDB4MTM7CiAJZWxzZSBpZiAoZ2FkZ2V0X2lzX2lteChnYWRnZXQpKQogCQlyZXR1cm4gMHgxNDsKKwllbHNlIGlmIChnYWRnZXRfaXNfbXVzYmhzZmMoZ2FkZ2V0KSkKKwkJcmV0dXJuIDB4MTU7CisJZWxzZSBpZiAoZ2FkZ2V0X2lzX211c2JoZHJjKGdhZGdldCkpCisJCXJldHVybiAweDE2OworCWVsc2UgaWYgKGdhZGdldF9pc19tcGM4MjcyKGdhZGdldCkpCisJCXJldHVybiAweDE3OwogCXJldHVybiAtRU5PRU5UOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCBiMGYzY2Q2Li42NmI4MWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMjc1LDExICsyNzUsMTAgQEAKIAogCWlmICghX2VwKQogCQlyZXR1cm4gTlVMTDsKLQlyZXEgPSBrbWFsbG9jKHNpemVvZiAqcmVxLCBnZnBfZmxhZ3MpOworCXJlcSA9IGt6YWxsb2Moc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CiAJaWYgKCFyZXEpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KHJlcSwgMCwgc2l6ZW9mICpyZXEpOwogCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CiAJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOwogCXJldHVybiAmcmVxLT5yZXE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IDBhYWI3ZDIuLmI0NGNmZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC0xNzAsMTAgKzE3MCw5IEBACiB7CiAJc3RydWN0IGRldl9kYXRhCQkqZGV2OwogCi0JZGV2ID0ga21hbGxvYyAoc2l6ZW9mICpkZXYsIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0IChkZXYsIDAsIHNpemVvZiAqZGV2KTsKIAlkZXYtPnN0YXRlID0gU1RBVEVfREVWX0RJU0FCTEVEOwogCWF0b21pY19zZXQgKCZkZXYtPmNvdW50LCAxKTsKIAlzcGluX2xvY2tfaW5pdCAoJmRldi0+bG9jayk7CkBAIC0xNTkyLDEwICsxNTkxLDkgQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAgKGVwLCBkZXYtPmdhZGdldCkgewogCQlzdHJ1Y3QgZXBfZGF0YQkqZGF0YTsKIAotCQlkYXRhID0ga21hbGxvYyAoc2l6ZW9mICpkYXRhLCBHRlBfS0VSTkVMKTsKKwkJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZGF0YSkKIAkJCWdvdG8gZW5vbWVtOwotCQltZW1zZXQgKGRhdGEsIDAsIHNpemVvZiBkYXRhKTsKIAkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDsKIAkJaW5pdF9NVVRFWCAoJmRhdGEtPmxvY2spOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZGF0YS0+d2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCmluZGV4IGUwMmZlYTUuLjBkMzQyNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC0xMDYyLDExICsxMDYyLDExIEBACiAJZXAtPnBpb19pcnFzID0gMDsKIAllcC0+ZXAubWF4cGFja2V0ID0gbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCiAJLyogUmVzZXQgaGFsdCBzdGF0ZSAoZG9lcyBmbHVzaCkgKi8KIAlsaDdhNDB4X3NldF9oYWx0KF9lcCwgMCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7Ci0KIAlERUJVRygiJXM6IGVuYWJsZWQgJXNcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTQsMTEgKzExMTQsMTAgQEAKIAogCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOwogCi0JcmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSwgZ2ZwX2ZsYWdzKTsKKwlyZXEgPSBremFsbG9jKHNpemVvZigqcmVxKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIXJlcSkKIAkJcmV0dXJuIDA7CiAKLQltZW1zZXQocmVxLCAwLCBzaXplb2YgKnJlcSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOwogCiAJcmV0dXJuICZyZXEtPnJlcTsKQEAgLTE3NzUsNiArMTc3NCw3IEBACiAJCQkJCWJyZWFrOwogCiAJCQkJcWVwID0gJmRldi0+ZXBbZXBfbnVtXTsKKwkJCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKIAkJCQlpZiAoY3RybC5iUmVxdWVzdCA9PSBVU0JfUkVRX1NFVF9GRUFUVVJFKSB7CiAJCQkJCURFQlVHX1NFVFVQKCJTRVRfRkVBVFVSRSAoJWQpXG4iLAogCQkJCQkJICAgIGVwX251bSk7CkBAIC0xNzg0LDYgKzE3ODQsNyBAQAogCQkJCQkJICAgIGVwX251bSk7CiAJCQkJCWxoN2E0MHhfc2V0X2hhbHQoJnFlcC0+ZXAsIDApOwogCQkJCX0KKwkJCQlzcGluX2xvY2soJmRldi0+bG9jayk7CiAJCQkJdXNiX3NldF9pbmRleCgwKTsKIAogCQkJCS8qIFJlcGx5IHdpdGggYSBaTFAgb24gbmV4dCBJTiB0b2tlbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggNjdiMTNhYi4uZmI3M2RjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0zODYsMTEgKzM4NiwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOwogCi0JcmVxID0ga21hbGxvYyAoc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CisJcmVxID0ga3phbGxvYyhzaXplb2YoKnJlcSksIGdmcF9mbGFncyk7CiAJaWYgKCFyZXEpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0IChyZXEsIDAsIHNpemVvZiAqcmVxKTsKIAlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOwogCUlOSVRfTElTVF9IRUFEICgmcmVxLT5xdWV1ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKaW5kZXggYTg5NzJkNy4uZmJlYTUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKQEAgLTI3Myw5ICsyNzMsOCBAQAogewogCXN0cnVjdCBvbWFwX3JlcQkqcmVxOwogCi0JcmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSwgZ2ZwX2ZsYWdzKTsKKwlyZXEgPSBremFsbG9jKHNpemVvZigqcmVxKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAocmVxKSB7Ci0JCW1lbXNldCAocmVxLCAwLCBzaXplb2YgKnJlcSk7CiAJCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CiAJCUlOSVRfTElTVF9IRUFEICgmcmVxLT5xdWV1ZSk7CiAJfQpAQCAtMjU4NiwxMSArMjU4NSwxMCBAQAogCS8qIFVEQ19QVUxMVVBfRU4gZ2F0ZXMgdGhlIGNoaXAgY2xvY2sgKi8KIAkvLyBPVEdfU1lTQ09OXzFfUkVHIHw9IERFVl9JRExFX0VOOwogCi0JdWRjID0ga21hbGxvYyAoc2l6ZW9mICp1ZGMsIFNMQUJfS0VSTkVMKTsKKwl1ZGMgPSBremFsbG9jKHNpemVvZigqdWRjKSwgU0xBQl9LRVJORUwpOwogCWlmICghdWRjKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldCh1ZGMsIDAsIHNpemVvZiAqdWRjKTsKIAlzcGluX2xvY2tfaW5pdCAoJnVkYy0+bG9jayk7CiAKIAl1ZGMtPmdhZGdldC5vcHMgPSAmb21hcF9nYWRnZXRfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKaW5kZXggYmIwMjhjNS4uNjgwZjdmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCkBAIC0zMzUsMTEgKzMzNSwxMCBAQAogewogCXN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxOwogCi0JcmVxID0ga21hbGxvYyAoc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CisJcmVxID0ga3phbGxvYyhzaXplb2YoKnJlcSksIGdmcF9mbGFncyk7CiAJaWYgKCFyZXEpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0IChyZXEsIDAsIHNpemVvZiAqcmVxKTsKIAlJTklUX0xJU1RfSEVBRCAoJnJlcS0+cXVldWUpOwogCXJldHVybiAmcmVxLT5yZXE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCmluZGV4IDk2ODllZmUuLjZkNmVhYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCkBAIC04NTMsMTEgKzg1MywxNCBAQAogCS8vIERFQlVHKCIlczogT0lEID0gJTA4WFxuIiwgX19GVU5DVElPTl9fLCBjcHVfdG9fbGUzMihidWYtPk9JRCkpOwogCWlmICghcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHJldHVybiAtRU5PVFNVUFA7CiAJCi0JLyogCi0JICogd2UgbmVlZCBtb3JlIG1lbW9yeTogCi0JICogb2lkX3N1cHBvcnRlZF9saXN0IGlzIHRoZSBsYXJnZXN0IGFuc3dlciAKKwkvKgorCSAqIHdlIG5lZWQgbW9yZSBtZW1vcnk6CisJICogZ2VuX25kaXNfcXVlcnlfcmVzcCBleHBlY3RzIGVub3VnaCBzcGFjZSBmb3IKKwkgKiBybmRpc19xdWVyeV9jbXBsdF90eXBlIGZvbGxvd2VkIGJ5IGRhdGEuCisJICogb2lkX3N1cHBvcnRlZF9saXN0IGlzIHRoZSBsYXJnZXN0IGRhdGEgcmVwbHkKIAkgKi8KLQlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwgc2l6ZW9mIChvaWRfc3VwcG9ydGVkX2xpc3QpKTsKKwlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwKKwkJc2l6ZW9mIChvaWRfc3VwcG9ydGVkX2xpc3QpICsgc2l6ZW9mKHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUpKTsKIAlpZiAoIXIpCiAJCXJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfcXVlcnlfY21wbHRfdHlwZSAqKSByLT5idWY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKaW5kZXggYmE5YWNkNS4uYjk5MjU0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAjZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEICovCiAJLmZ1bmN0aW9uID0JCUdTX0xPTkdfTkFNRSwKIAkuYmluZCA9CQkJZ3NfYmluZCwKLQkudW5iaW5kID0JCWdzX3VuYmluZCwKKwkudW5iaW5kID0JCV9fZXhpdF9wKGdzX3VuYmluZCksCiAJLnNldHVwID0JCWdzX3NldHVwLAogCS5kaXNjb25uZWN0ID0JCWdzX2Rpc2Nvbm5lY3QsCiAJLmRyaXZlciA9IHsKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAgKiBDYWxsZWQgb24gbW9kdWxlIGxvYWQuICBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBkZXZpY2UKICAqIHN0cnVjdHVyZSBhbmQgYSBjb250cm9sIHJlcXVlc3QuCiAgKi8KLXN0YXRpYyBpbnQgZ3NfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQorc3RhdGljIGludCBfX2luaXQgZ3NfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQogewogCWludCByZXQ7CiAJc3RydWN0IHVzYl9lcCAqZXA7CkBAIC0xNTM4LDcgKzE1MzgsNyBAQAogICogQ2FsbGVkIG9uIG1vZHVsZSB1bmxvYWQuICBGcmVlcyB0aGUgY29udHJvbCByZXF1ZXN0IGFuZCBkZXZpY2UKICAqIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgZ3NfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZ3NfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CiAJc3RydWN0IGdzX2RldiAqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CiAKQEAgLTIxNzgsMTAgKzIxNzgsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWZvciAoaT0wOyBpPEdTX05VTV9QT1JUUzsgaSsrKSB7Ci0JCWlmICgocG9ydD0oc3RydWN0IGdzX3BvcnQgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3NfcG9ydCksIGttYWxsb2NfZmxhZ3MpKSA9PSBOVUxMKQorCQlpZiAoKHBvcnQ9a3phbGxvYyhzaXplb2Yoc3RydWN0IGdzX3BvcnQpLCBrbWFsbG9jX2ZsYWdzKSkgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCW1lbXNldChwb3J0LCAwLCBzaXplb2Yoc3RydWN0IGdzX3BvcnQpKTsKIAkJcG9ydC0+cG9ydF9kZXYgPSBkZXY7CiAJCXBvcnQtPnBvcnRfbnVtID0gaTsKIAkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5kd0RURVJhdGUgPSBjcHVfdG9fbGUzMihHU19ERUZBVUxUX0RURV9SQVRFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCmluZGV4IGFlN2ExYzAuLjUxNDI0ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQKK3N0YXRpYyB2b2lkIF9fZXhpdAogemVyb191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CiAJc3RydWN0IHplcm9fZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBpbnQgX19pbml0CiB6ZXJvX2JpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCiB7CiAJc3RydWN0IHplcm9fZGV2CQkqZGV2OwpAQCAtMTE4OCwxMCArMTE4OCw5IEBACiAKIAogCS8qIG9rLCB3ZSBtYWRlIHNlbnNlIG9mIHRoZSBoYXJkd2FyZSAuLi4gKi8KLQlkZXYgPSBrbWFsbG9jIChzaXplb2YgKmRldiwgU0xBQl9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBTTEFCX0tFUk5FTCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldCAoZGV2LCAwLCBzaXplb2YgKmRldik7CiAJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPmxvY2spOwogCWRldi0+Z2FkZ2V0ID0gZ2FkZ2V0OwogCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBkZXYpOwpAQCAtMTIyNCwxMiArMTIyMyw2IEBACiAJCWxvb3BiYWNrX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOwogCX0KIAotCWlmIChnYWRnZXQtPmlzX290ZykgewotCQlvdGdfZGVzY3JpcHRvci5ibUF0dHJpYnV0ZXMgfD0gVVNCX09UR19ITlAsCi0JCXNvdXJjZV9zaW5rX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOwotCQlsb29wYmFja19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKLQl9Ci0KIAl1c2JfZ2FkZ2V0X3NldF9zZWxmcG93ZXJlZCAoZ2FkZ2V0KTsKIAogCWluaXRfdGltZXIgKCZkZXYtPnJlc3VtZSk7CkBAIC0xMjk0LDcgKzEyODcsNyBAQAogI2VuZGlmCiAJLmZ1bmN0aW9uCT0gKGNoYXIgKikgbG9uZ25hbWUsCiAJLmJpbmQJCT0gemVyb19iaW5kLAotCS51bmJpbmQJCT0gemVyb191bmJpbmQsCisJLnVuYmluZAkJPSBfX2V4aXRfcCh6ZXJvX3VuYmluZCksCiAKIAkuc2V0dXAJCT0gemVyb19zZXR1cCwKIAkuZGlzY29ubmVjdAk9IHplcm9fZGlzY29ubmVjdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCBiZTNmZDliLi5lMjdiNzlhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAogY29uZmlnIFVTQl9FSENJX0hDRAogCXRyaXN0YXRlICJFSENJIEhDRCAoVVNCIDIuMCkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBQQ0kKKwlkZXBlbmRzIG9uIFVTQiAmJiBVU0JfQVJDSF9IQVNfRUhDSQogCS0tLWhlbHAtLS0KIAkgIFRoZSBFbmhhbmNlZCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChFSENJKSBpcyBzdGFuZGFyZCBmb3IgVVNCIDIuMAogCSAgImhpZ2ggc3BlZWQiICg0ODAgTWJpdC9zZWMsIDYwIE1ieXRlL3NlYykgaG9zdCBjb250cm9sbGVyIGhhcmR3YXJlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZWFkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBFSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNCBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBCdXMgR2x1ZSBmb3IgQU1EIEFsY2hlbXkgQXUxeHh4CisgKgorICogQmFzZWQgb24gIm9oY2ktYXUxeHh4LmMiIGJ5IE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogTW9kaWZpZWQgZm9yIEFNRCBBbGNoZW15IEF1MTIwMCBFSEMKKyAqICBieSBLLkJvZ2UgPGthcnN0ZW4uYm9nZUBhbWQuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CisKKyNpZm5kZWYgQ09ORklHX1NPQ19BVTEyMDAKKyNlcnJvciAidGhpcyBBbGNoZW15IGNoaXAgZG9lc24ndCBoYXZlIEVIQ0kiCisjZWxzZQkJCQkvKiBBdTEyMDAgKi8KKworI2RlZmluZSBVU0JfSE9TVF9DT05GSUcgICAoVVNCX01TUl9CQVNFICsgVVNCX01TUl9NQ0ZHKQorI2RlZmluZSBVU0JfTUNGR19QRkVOICAgICAoMTw8MzEpCisjZGVmaW5lIFVTQl9NQ0ZHX1JEQ09NQiAgICgxPDwzMCkKKyNkZWZpbmUgVVNCX01DRkdfU1NERU4gICAgKDE8PDIzKQorI2RlZmluZSBVU0JfTUNGR19QSFlQTExFTiAoMTw8MTkpCisjZGVmaW5lIFVTQl9NQ0ZHX0VIQ0NMS0VOICgxPDwxNykKKyNkZWZpbmUgVVNCX01DRkdfVUNBTSAgICAgKDE8PDcpCisjZGVmaW5lIFVTQl9NQ0ZHX0VCTUVOICAgICgxPDwzKQorI2RlZmluZSBVU0JfTUNGR19FTUVNRU4gICAoMTw8MikKKworI2RlZmluZSBVU0JIX0VOQUJMRV9DRSAgICAoVVNCX01DRkdfUEhZUExMRU4gfCBVU0JfTUNGR19FSENDTEtFTikKKworI2lmZGVmIENPTkZJR19ETUFfQ09IRVJFTlQKKyNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAgKFVTQkhfRU5BQkxFX0NFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IFVTQl9NQ0ZHX1BGRU4gfCBVU0JfTUNGR19SRENPTUIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfU1NERU4gfCBVU0JfTUNGR19VQ0FNIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IFVTQl9NQ0ZHX0VCTUVOIHwgVVNCX01DRkdfRU1FTUVOKQorI2Vsc2UKKyNkZWZpbmUgVVNCSF9FTkFCTEVfSU5JVCAgKFVTQkhfRU5BQkxFX0NFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8IFVTQl9NQ0ZHX1BGRU4gfCBVU0JfTUNGR19SRENPTUIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfU1NERU4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfRUJNRU4gfCBVU0JfTUNGR19FTUVNRU4pCisjZW5kaWYKKyNkZWZpbmUgVVNCSF9ESVNBQkxFICAgICAgKFVTQl9NQ0ZHX0VCTUVOIHwgVVNCX01DRkdfRU1FTUVOKQorCisjZW5kaWYJCQkJLyogQXUxMjAwICovCisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBhdTF4eHhfc3RhcnRfZWhjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBzdGFydGluZyBBdTF4eHggRUhDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKiB3cml0ZSBIVyBkZWZhdWx0cyBhZ2FpbiBpbiBjYXNlIFlhbW9uIGNsZWFyZWQgdGhlbSAqLworCWlmIChhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpID09IDApIHsKKwkJYXVfd3JpdGVsKDB4MDBkMDIwMDAsIFVTQl9IT1NUX0NPTkZJRyk7CisJCWF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyk7CisJCXVkZWxheSgxMDAwKTsKKwl9CisJLyogZW5hYmxlIGhvc3QgY29udHJvbGxlciAqLworCWF1X3dyaXRlbChVU0JIX0VOQUJMRV9DRSB8IGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyksIFVTQl9IT1NUX0NPTkZJRyk7CisJYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKTsKKwl1ZGVsYXkoMTAwMCk7CisJYXVfd3JpdGVsKFVTQkhfRU5BQkxFX0lOSVQgfCBhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpLAorCQkgIFVTQl9IT1NUX0NPTkZJRyk7CisJYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKTsKKwl1ZGVsYXkoMTAwMCk7CisKKwlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBDbG9jayB0byBVU0IgaG9zdCBoYXMgYmVlbiBlbmFibGVkXG4iKTsKK30KKworc3RhdGljIHZvaWQgYXUxeHh4X3N0b3BfZWhjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBzdG9wcGluZyBBdTF4eHggRUhDSSBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKiBEaXNhYmxlIG1lbSAqLworCWF1X3dyaXRlbCh+VVNCSF9ESVNBQkxFICYgYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSwgVVNCX0hPU1RfQ09ORklHKTsKKwl1ZGVsYXkoMTAwMCk7CisJLyogRGlzYWJsZSBjbG9jayAqLworCWF1X3dyaXRlbCh+VVNCX01DRkdfRUhDQ0xLRU4gJiBhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpLAorCQkgIFVTQl9IT1NUX0NPTkZJRyk7CisJYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLworLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KKworLyoqCisgKiB1c2JfZWhjaV9hdTF4eHhfcHJvYmUgLSBpbml0aWFsaXplIEF1MXh4eC1iYXNlZCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKi8KK2ludCB1c2JfZWhjaV9hdTF4eHhfcHJvYmUoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICBzdHJ1Y3QgdXNiX2hjZCAqKmhjZF9vdXQsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IGVoY2lfaGNkICplaGNpOworCisjaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTIwMCkgJiYgZGVmaW5lZChDT05GSUdfRE1BX0NPSEVSRU5UKQorCisJLyogQXUxMjAwIEFCIFVTQiBkb2VzIG5vdCBzdXBwb3J0IGNvaGVyZW50IG1lbW9yeSAqLworCWlmICghKHJlYWRfYzBfcHJpZCgpICYgMHhmZikpIHsKKwkJcHJfaW5mbygiJXM6IHRoaXMgaXMgY2hpcCByZXZpc2lvbiBBQiFcbiIsIGRldi0+ZGV2Lm5hbWUpOworCQlwcl9pbmZvKCIlczogdXBkYXRlIHlvdXIgYm9hcmQgb3IgcmUtY29uZmlndXJlIHRoZSBrZXJuZWxcbiIsCisJCQlkZXYtPmRldi5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorI2VuZGlmCisKKwlhdTF4eHhfc3RhcnRfZWhjKGRldik7CisKKwlpZiAoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgeworCQlwcl9kZWJ1ZygicmVzb3VyY2VbMV0gaXMgbm90IElPUkVTT1VSQ0VfSVJRIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJfQorCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJmRldi0+ZGV2LCAiQXUxeHh4Iik7CisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PTUVNOworCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwllaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwllaGNpLT5jYXBzID0gaGNkLT5yZWdzOworCWVoY2ktPnJlZ3MgPSBoY2QtPnJlZ3MgKyBIQ19MRU5HVEgocmVhZGwoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KKwllaGNpLT5oY3NfcGFyYW1zID0gcmVhZGwoJmVoY2ktPmNhcHMtPmhjc19wYXJhbXMpOworCisJLyogZWhjaV9oY2RfaW5pdChoY2RfdG9fZWhjaShoY2QpKTsgKi8KKworCXJldHZhbCA9CisJICAgIHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWF1MXh4eF9zdG9wX2VoYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKK2VycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CitlcnIxOgorCXVzYl9wdXRfaGNkKGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogbWF5IGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2xsZXIgZWxlY3RyaWNhbGx5IHByZXNlbnQgKi8KKy8qIG1heSBiZSBjYWxsZWQgd2l0aCBjb250cm9sbGVyLCBidXMsIGFuZCBkZXZpY2VzIGFjdGl2ZSAqLworCisvKioKKyAqIHVzYl9laGNpX2hjZF9hdTF4eHhfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgQXUxeHh4LWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfZWhjaV9oY2RfYXUxeHh4X3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2VoY2lfYXUxeHh4X3JlbW92ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlhdTF4eHhfc3RvcF9laGMoZGV2KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgZWhjaV9hdTF4eHhfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9IGhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPSAiQXUxeHh4IEVIQ0kiLAorCS5oY2RfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBlaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPSBlaGNpX2lycSwKKwkuZmxhZ3MgPSBIQ0RfTUVNT1JZIHwgSENEX1VTQjIsCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnJlc2V0ID0gZWhjaV9pbml0LAorCS5zdGFydCA9IGVoY2lfcnVuLAorCS5zdG9wID0gZWhjaV9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9IGVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0gZWhjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9IGVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPSBlaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPSBlaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPSBlaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmCUNPTkZJR19QTQorCS5odWJfc3VzcGVuZCA9IGVoY2lfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPSBlaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZWhjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBOVUxMOworCWludCByZXQ7CisKKwlwcl9kZWJ1ZygiSW4gZWhjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZVxuIik7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gdXNiX2VoY2lfYXUxeHh4X3Byb2JlKCZlaGNpX2F1MXh4eF9oY19kcml2ZXIsICZoY2QsIHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1c2JfZWhjaV9hdTF4eHhfcmVtb3ZlKGhjZCwgcGRldik7CisJcmV0dXJuIDA7Cit9CisKKyAvKlRCRCovCisvKnN0YXRpYyBpbnQgZWhjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIDA7Cit9CisqLworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGVoY2lfaGNkX2F1MXh4eF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYXUxeHh4LWVoY2kiLAorCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlID0gZWhjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKKwkucmVtb3ZlID0gZWhjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUsCisJLyouc3VzcGVuZCAgICAgID0gZWhjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kLCAqLworCS8qLnJlc3VtZSAgICAgICA9IGVoY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lLCAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgZWhjaV9oY2RfYXUxeHh4X2luaXQodm9pZCkKK3sKKwlwcl9kZWJ1ZyhEUklWRVJfSU5GTyAiIChBdTF4eHgpXG4iKTsKKworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmVoY2lfaGNkX2F1MXh4eF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZWhjaV9oY2RfYXUxeHh4X2NsZWFudXAodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZWhjaV9oY2RfYXUxeHh4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVoY2lfaGNkX2F1MXh4eF9pbml0KTsKK21vZHVsZV9leGl0KGVoY2lfaGNkX2F1MXh4eF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTg1ZjEyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwpAQCAtMCwwICsxLDM2NiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgRGF2aWQgQnJvd25lbGwgMjAwMC0yMDAyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIFBvcnRlZCB0byA4MzR4IGJ5IFJhbmR5IFZpbnNvbiA8cnZpbnNvbkBtdmlzdGEuY29tPiB1c2luZyBjb2RlIHByb3ZpZGVkCisgKiBieSBIdW50ZXIgV3UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisKKyNpbmNsdWRlICJlaGNpLWZzbC5oIgorCisvKiBGSVhNRTogUG93ZXIgTWFuYWdtZW50IGlzIHVuLXBvcnRlZCBzbyB0ZW1wb3JhcmlseSBkaXNhYmxlIGl0ICovCisjdW5kZWYgQ09ORklHX1BNCisKKy8qIFBDSS1iYXNlZCBIQ3MgYXJlIGNvbW1vbiwgYnV0IHBsZW50eSBvZiBub24tUENJIEhDcyBhcmUgdXNlZCB0b28gKi8KKworLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLworLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KKworLyoqCisgKiB1c2JfaGNkX2ZzbF9wcm9iZSAtIGluaXRpYWxpemUgRlNMLWJhc2VkIEhDRHMKKyAqIEBkcnZpZXI6IERyaXZlciB0byBiZSB1c2VkIGZvciB0aGlzIEhDRAorICogQHBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcHJvYmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIuCisgKgorICovCitpbnQgdXNiX2hjZF9mc2xfcHJvYmUoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKworCXByX2RlYnVnKCJpbml0aWFsaXppbmcgRlNMLVNPQyBVU0IgQ29udHJvbGxlclxuIik7CisKKwkvKiBOZWVkIHBsYXRmb3JtIGRhdGEgZm9yIHNldHVwICovCisJcGRhdGEgPSAoc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJObyBwbGF0Zm9ybSBkYXRhIGZvciAlcy5cbiIsIHBkZXYtPmRldi5idXNfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIFRoaXMgaXMgYSBob3N0IG1vZGUgZHJpdmVyLCB2ZXJpZnkgdGhhdCB3ZSdyZSBzdXBwb3NlZCB0byBiZQorCSAqIGluIGhvc3QgbW9kZS4KKwkgKi8KKwlpZiAoISgocGRhdGEtPm9wZXJhdGluZ19tb2RlID09IEZTTF9VU0IyX0RSX0hPU1QpIHx8CisJICAgICAgKHBkYXRhLT5vcGVyYXRpbmdfbW9kZSA9PSBGU0xfVVNCMl9NUEhfSE9TVCkpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJOb24gSG9zdCBNb2RlIGNvbmZpZ3VyZWQgZm9yICVzLiBXcm9uZyBkcml2ZXIgbGlua2VkLlxuIiwKKwkJCXBkZXYtPmRldi5idXNfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJGb3VuZCBIQyB3aXRoIG5vIElSUS4gQ2hlY2sgJXMgc2V0dXAhXG4iLAorCQkJcGRldi0+ZGV2LmJ1c19pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpcnEgPSByZXMtPnN0YXJ0OworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCBwZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjE7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiRm91bmQgSEMgd2l0aCBubyByZWdpc3RlciBhZGRyLiBDaGVjayAlcyBzZXR1cCFcbiIsCisJCQlwZGV2LT5kZXYuYnVzX2lkKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnIyOworCX0KKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwKKwkJCQlkcml2ZXItPmRlc2NyaXB0aW9uKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb250cm9sbGVyIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjI7CisJfQorCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKworCWlmIChoY2QtPnJlZ3MgPT0gTlVMTCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJlcnJvciBtYXBwaW5nIG1lbW9yeVxuIik7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyMzsKKwl9CisKKwkvKiBFbmFibGUgVVNCIGNvbnRyb2xsZXIgKi8KKwl0ZW1wID0gaW5fYmUzMihoY2QtPnJlZ3MgKyAweDUwMCk7CisJb3V0X2JlMzIoaGNkLT5yZWdzICsgMHg1MDAsIHRlbXAgfCAweDQpOworCisJLyogU2V0IHRvIEhvc3QgbW9kZSAqLworCXRlbXAgPSBpbl9sZTMyKGhjZC0+cmVncyArIDB4MWE4KTsKKwlvdXRfbGUzMihoY2QtPnJlZ3MgKyAweDFhOCwgdGVtcCB8IDB4Myk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgU0FfU0hJUlEpOworCWlmIChyZXR2YWwgIT0gMCkKKwkJZ290byBlcnI0OworCXJldHVybiByZXR2YWw7CisKKyAgICAgIGVycjQ6CisJaW91bm1hcChoY2QtPnJlZ3MpOworICAgICAgZXJyMzoKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKyAgICAgIGVycjI6CisJdXNiX3B1dF9oY2QoaGNkKTsKKyAgICAgIGVycjE6CisJZGV2X2VycigmcGRldi0+ZGV2LCAiaW5pdCAlcyBmYWlsLCAlZFxuIiwgcGRldi0+ZGV2LmJ1c19pZCwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgY29udHJvbGxlciBlbGVjdHJpY2FsbHkgcHJlc2VudCAqLworLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCisKKy8qKgorICogdXNiX2hjZF9mc2xfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgRlNMLWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX2ZzbF9wcm9iZSgpLgorICoKKyAqLwordm9pZCB1c2JfaGNkX2ZzbF9yZW1vdmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworfQorCitzdGF0aWMgdm9pZCBtcGM4M3h4X3NldHVwX3BoeShzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksCisJCQkgICAgICBlbnVtIGZzbF91c2IyX3BoeV9tb2RlcyBwaHlfbW9kZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBwb3J0X29mZnNldCkKK3sKKwl1MzIgcG9ydHNjID0gMDsKKwlzd2l0Y2ggKHBoeV9tb2RlKSB7CisJY2FzZSBGU0xfVVNCMl9QSFlfVUxQSToKKwkJcG9ydHNjIHw9IFBPUlRfUFRTX1VMUEk7CisJCWJyZWFrOworCWNhc2UgRlNMX1VTQjJfUEhZX1NFUklBTDoKKwkJcG9ydHNjIHw9IFBPUlRfUFRTX1NFUklBTDsKKwkJYnJlYWs7CisJY2FzZSBGU0xfVVNCMl9QSFlfVVRNSV9XSURFOgorCQlwb3J0c2MgfD0gUE9SVF9QVFNfUFRXOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEZTTF9VU0IyX1BIWV9VVE1JOgorCQlwb3J0c2MgfD0gUE9SVF9QVFNfVVRNSTsKKwkJYnJlYWs7CisJY2FzZSBGU0xfVVNCMl9QSFlfTk9ORToKKwkJYnJlYWs7CisJfQorCXdyaXRlbChwb3J0c2MsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1twb3J0X29mZnNldF0pOworfQorCitzdGF0aWMgdm9pZCBtcGM4M3h4X3VzYl9zZXR1cChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZCAqZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CisJc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXZvaWQgX19pb21lbSAqbm9uX2VoY2kgPSBoY2QtPnJlZ3M7CisKKwlwZGF0YSA9CisJICAgIChzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSAqKWhjZC0+c2VsZi5jb250cm9sbGVyLT4KKwkgICAgcGxhdGZvcm1fZGF0YTsKKwkvKiBFbmFibGUgUEhZIGludGVyZmFjZSBpbiB0aGUgY29udHJvbCByZWcuICovCisJb3V0X2JlMzIobm9uX2VoY2kgKyBGU0xfU09DX1VTQl9DVFJMLCAweDAwMDAwMDA0KTsKKwlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX1NOT09QMSwgMHgwMDAwMDAxYik7CisKKwlpZiAocGRhdGEtPm9wZXJhdGluZ19tb2RlID09IEZTTF9VU0IyX0RSX0hPU1QpCisJCW1wYzgzeHhfc2V0dXBfcGh5KGVoY2ksIHBkYXRhLT5waHlfbW9kZSwgMCk7CisKKwlpZiAocGRhdGEtPm9wZXJhdGluZ19tb2RlID09IEZTTF9VU0IyX01QSF9IT1NUKSB7CisJCXVuc2lnbmVkIGludCBjaGlwLCByZXYsIHN2cjsKKworCQlzdnIgPSBtZnNwcihTUFJOX1NWUik7CisJCWNoaXAgPSBzdnIgPj4gMTY7CisJCXJldiA9IChzdnIgPj4gNCkgJiAweGY7CisKKwkJLyogRGVhbCB3aXRoIFVTQiBFcnJhdHVtICMxNCBvbiBNUEM4MzR4IFJldiAxLjAgJiAxLjEgY2hpcHMgKi8KKwkJaWYgKChyZXYgPT0gMSkgJiYgKGNoaXAgPj0gMHg4MDUwKSAmJiAoY2hpcCA8PSAweDgwNTUpKQorCQkJZWhjaS0+aGFzX2ZzbF9wb3J0X2J1ZyA9IDE7CisKKwkJaWYgKHBkYXRhLT5wb3J0X2VuYWJsZXMgJiBGU0xfVVNCMl9QT1JUMF9FTkFCTEVEKQorCQkJbXBjODN4eF9zZXR1cF9waHkoZWhjaSwgcGRhdGEtPnBoeV9tb2RlLCAwKTsKKwkJaWYgKHBkYXRhLT5wb3J0X2VuYWJsZXMgJiBGU0xfVVNCMl9QT1JUMV9FTkFCTEVEKQorCQkJbXBjODN4eF9zZXR1cF9waHkoZWhjaSwgcGRhdGEtPnBoeV9tb2RlLCAxKTsKKwl9CisKKwkvKiBwdXQgY29udHJvbGxlciBpbiBob3N0IG1vZGUuICovCisJd3JpdGVsKDB4MDAwMDAwMDMsIG5vbl9laGNpICsgRlNMX1NPQ19VU0JfVVNCTU9ERSk7CisJb3V0X2JlMzIobm9uX2VoY2kgKyBGU0xfU09DX1VTQl9QUklDVFJMLCAweDAwMDAwMDBjKTsKKwlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX0FHRUNOVFRIUlNILCAweDAwMDAwMDQwKTsKKwlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX1NJQ1RSTCwgMHgwMDAwMDAwMSk7Cit9CisKKy8qIGNhbGxlZCBhZnRlciBwb3dlcnVwLCBieSBwcm9iZSBvciBzeXN0ZW0tcG0gIndha2V1cCIgKi8KK3N0YXRpYyBpbnQgZWhjaV9mc2xfcmVpbml0KHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwltcGM4M3h4X3VzYl9zZXR1cChlaGNpX3RvX2hjZChlaGNpKSk7CisJZWhjaV9wb3J0X3Bvd2VyKGVoY2ksIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlZCBkdXJpbmcgcHJvYmUoKSBhZnRlciBjaGlwIHJlc2V0IGNvbXBsZXRlcyAqLworc3RhdGljIGludCBlaGNpX2ZzbF9zZXR1cChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZCAqZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CisJaW50IHJldHZhbDsKKworCS8qIEVIQ0kgcmVnaXN0ZXJzIHN0YXJ0IGF0IG9mZnNldCAweDEwMCAqLworCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3MgKyAweDEwMDsKKwllaGNpLT5yZWdzID0gaGNkLT5yZWdzICsgMHgxMDAgKworCSAgICBIQ19MRU5HVEgocmVhZGwoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwlkYmdfaGNzX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKKwlkYmdfaGNjX3BhcmFtcyhlaGNpLCAicmVzZXQiKTsKKworCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgY2hpcCByZWFkcyAqLworCWVoY2ktPmhjc19wYXJhbXMgPSByZWFkbCgmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisKKwlyZXR2YWwgPSBlaGNpX2hhbHQoZWhjaSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIGRhdGEgc3RydWN0dXJlIGluaXQgKi8KKwlyZXR2YWwgPSBlaGNpX2luaXQoaGNkKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJZWhjaS0+aXNfdGRpX3JoX3R0ID0gMTsKKworCWVoY2ktPnNicm4gPSAweDIwOworCisJZWhjaV9yZXNldChlaGNpKTsKKworCXJldHZhbCA9IGVoY2lfZnNsX3JlaW5pdChlaGNpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX2ZzbF9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0gaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9ICJGcmVlc2NhbGUgT24tQ2hpcCBFSENJIEhvc3QgQ29udHJvbGxlciIsCisJLmhjZF9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9IGVoY2lfaXJxLAorCS5mbGFncyA9IEhDRF9VU0IyLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5yZXNldCA9IGVoY2lfZnNsX3NldHVwLAorCS5zdGFydCA9IGVoY2lfcnVuLAorI2lmZGVmCUNPTkZJR19QTQorCS5zdXNwZW5kID0gZWhjaV9idXNfc3VzcGVuZCwKKwkucmVzdW1lID0gZWhjaV9idXNfcmVzdW1lLAorI2VuZGlmCisJLnN0b3AgPSBlaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0gZWhjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPSBlaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0gZWhjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9IGVoY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9IGVoY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9IGVoY2lfaHViX2NvbnRyb2wsCisJLmJ1c19zdXNwZW5kID0gZWhjaV9idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9IGVoY2lfYnVzX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgZWhjaV9mc2xfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiB1c2JfaGNkX2ZzbF9wcm9iZSgmZWhjaV9mc2xfaGNfZHJpdmVyLCBwZGV2KTsKK30KKworc3RhdGljIGludCBlaGNpX2ZzbF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJdXNiX2hjZF9mc2xfcmVtb3ZlKGhjZCwgcGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZWhjaV9mc2xfZHJfZHJpdmVyID0geworCS5wcm9iZSA9IGVoY2lfZnNsX2Rydl9wcm9iZSwKKwkucmVtb3ZlID0gZWhjaV9mc2xfZHJ2X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJmc2wtdXNiMi1kciIsCisJCSAgIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlaGNpX2ZzbF9tcGhfZHJpdmVyID0geworCS5wcm9iZSA9IGVoY2lfZnNsX2Rydl9wcm9iZSwKKwkucmVtb3ZlID0gZWhjaV9mc2xfZHJ2X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJmc2wtdXNiMi1tcGgiLAorCQkgICB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZWhjaV9mc2xfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlwcl9kZWJ1ZygiJXM6IGJsb2NrIHNpemVzOiBxaCAlWmQgcXRkICVaZCBpdGQgJVpkIHNpdGQgJVpkXG4iLAorCQkgaGNkX25hbWUsCisJCSBzaXplb2Yoc3RydWN0IGVoY2lfcWgpLCBzaXplb2Yoc3RydWN0IGVoY2lfcXRkKSwKKwkJIHNpemVvZihzdHJ1Y3QgZWhjaV9pdGQpLCBzaXplb2Yoc3RydWN0IGVoY2lfc2l0ZCkpOworCisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlaGNpX2ZzbF9kcl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlaGNpX2ZzbF9tcGhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVoY2lfZnNsX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZWhjaV9mc2xfbXBoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVoY2lfZnNsX2RyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVoY2lfZnNsX2luaXQpOworbW9kdWxlX2V4aXQoZWhjaV9mc2xfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhYzBkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaApAQCAtMCwwICsxLDM3IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMDUgZnJlZXNjYWxlIHNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfRUhDSV9GU0xfSAorI2RlZmluZSBfRUhDSV9GU0xfSAorCisvKiBvZmZzZXRzIGZvciB0aGUgbm9uLWVoY2kgcmVnaXN0ZXJzIGluIHRoZSBGU0wgU09DIFVTQiBjb250cm9sbGVyICovCisjZGVmaW5lIEZTTF9TT0NfVVNCX1VMUElWUAkweDE3MAorI2RlZmluZSBGU0xfU09DX1VTQl9QT1JUU0MxCTB4MTg0CisjZGVmaW5lIFBPUlRfUFRTX01TSwkJKDM8PDMwKQorI2RlZmluZSBQT1JUX1BUU19VVE1JCQkoMDw8MzApCisjZGVmaW5lIFBPUlRfUFRTX1VMUEkJCSgyPDwzMCkKKyNkZWZpbmUJUE9SVF9QVFNfU0VSSUFMCQkoMzw8MzApCisjZGVmaW5lIFBPUlRfUFRTX1BUVwkJKDE8PDI4KQorI2RlZmluZSBGU0xfU09DX1VTQl9QT1JUU0MyCTB4MTg4CisjZGVmaW5lIEZTTF9TT0NfVVNCX1VTQk1PREUJMHgxYTgKKyNkZWZpbmUgRlNMX1NPQ19VU0JfU05PT1AxCTB4NDAwCS8qIE5PVEU6IGJpZy1lbmRpYW4gKi8KKyNkZWZpbmUgRlNMX1NPQ19VU0JfU05PT1AyCTB4NDA0CS8qIE5PVEU6IGJpZy1lbmRpYW4gKi8KKyNkZWZpbmUgRlNMX1NPQ19VU0JfQUdFQ05UVEhSU0gJMHg0MDgJLyogTk9URTogYmlnLWVuZGlhbiAqLworI2RlZmluZSBGU0xfU09DX1VTQl9TSUNUUkwJMHg0MGMJLyogTk9URTogYmlnLWVuZGlhbiAqLworI2RlZmluZSBGU0xfU09DX1VTQl9QUklDVFJMCTB4NDEwCS8qIE5PVEU6IGJpZy1lbmRpYW4gKi8KKyNkZWZpbmUgRlNMX1NPQ19VU0JfQ1RSTAkweDUwMAkvKiBOT1RFOiBiaWctZW5kaWFuICovCisjZW5kaWYJCQkJLyogX0VIQ0lfRlNMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCA5ZGQzZDE0Li43OWYyZDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC04ODksOCArODg5LDE5IEBACiAKICNpZmRlZiBDT05GSUdfUENJCiAjaW5jbHVkZSAiZWhjaS1wY2kuYyIKKyNkZWZpbmUJRUhDSV9CVVNfR0xVRUQKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoQ09ORklHX1BDSSkKKyNpZmRlZiBDT05GSUdfUFBDXzgzeHgKKyNpbmNsdWRlICJlaGNpLWZzbC5jIgorI2RlZmluZQlFSENJX0JVU19HTFVFRAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU09DX0FVMVgwMAorI2luY2x1ZGUgImVoY2ktYXUxeHh4LmMiCisjZGVmaW5lCUVIQ0lfQlVTX0dMVUVECisjZW5kaWYKKworI2lmbmRlZglFSENJX0JVU19HTFVFRAogI2Vycm9yICJtaXNzaW5nIGJ1cyBnbHVlIGZvciBlaGNpLWhjZCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IDY5YjBiOWIuLmQwM2UzY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTM1OSw2ICszNTksOCBAQAogCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKIAkJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKIAkJCQlnb3RvIGVycm9yOworCQkJaWYgKGVoY2ktPm5vX3NlbGVjdGl2ZV9zdXNwZW5kKQorCQkJCWJyZWFrOwogCQkJaWYgKHRlbXAgJiBQT1JUX1NVU1BFTkQpIHsKIAkJCQlpZiAoKHRlbXAgJiBQT1JUX1BFKSA9PSAwKQogCQkJCQlnb3RvIGVycm9yOwpAQCAtNTE0LDYgKzUxNiw4IEBACiAJCXRlbXAgJj0gflBPUlRfUldDX0JJVFM7CiAJCXN3aXRjaCAod1ZhbHVlKSB7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorCQkJaWYgKGVoY2ktPm5vX3NlbGVjdGl2ZV9zdXNwZW5kKQorCQkJCWJyZWFrOwogCQkJaWYgKCh0ZW1wICYgUE9SVF9QRSkgPT0gMAogCQkJCQl8fCAodGVtcCAmIFBPUlRfUkVTRVQpICE9IDApCiAJCQkJZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYwppbmRleCA5MWMyYWI0Li43NjYwNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW1lbS5jCkBAIC03NSw3ICs3NSw2IEBACiAJfQogCWlmIChxaC0+ZHVtbXkpCiAJCWVoY2lfcXRkX2ZyZWUgKGVoY2ksIHFoLT5kdW1teSk7Ci0JdXNiX3B1dF9kZXYgKHFoLT5kZXYpOwogCWRtYV9wb29sX2ZyZWUgKGVoY2ktPnFoX3Bvb2wsIHFoLCBxaC0+cWhfZG1hKTsKIH0KIApAQCAtMjIxLDEzICsyMjAsOSBAQAogCQllaGNpLT5wZXJpb2RpYyBbaV0gPSBFSENJX0xJU1RfRU5EOwogCiAJLyogc29mdHdhcmUgc2hhZG93IG9mIGhhcmR3YXJlIHRhYmxlICovCi0JZWhjaS0+cHNoYWRvdyA9IGttYWxsb2MgKGVoY2ktPnBlcmlvZGljX3NpemUgKiBzaXplb2YgKHZvaWQgKiksIGZsYWdzKTsKLQlpZiAoZWhjaS0+cHNoYWRvdyA9PSBOVUxMKSB7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JbWVtc2V0IChlaGNpLT5wc2hhZG93LCAwLCBlaGNpLT5wZXJpb2RpY19zaXplICogc2l6ZW9mICh2b2lkICopKTsKLQotCXJldHVybiAwOworCWVoY2ktPnBzaGFkb3cgPSBrY2FsbG9jKGVoY2ktPnBlcmlvZGljX3NpemUsIHNpemVvZih2b2lkICopLCBmbGFncyk7CisJaWYgKGVoY2ktPnBzaGFkb3cgIT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKIGZhaWw6CiAJZWhjaV9kYmcgKGVoY2ksICJjb3VsZG4ndCBpbml0IG1lbW9yeVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKaW5kZXggM2E2Njg3ZGYuLjFlMDNmMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKQEAgLTEwNiwxMSArMTA2LDExIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQ0lfVkVORE9SX0lEX05WSURJQToKKwkJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKIAkJLyogTlZpZGlhIHJlcG9ydHMgdGhhdCBjZXJ0YWluIGNoaXBzIGRvbid0IGhhbmRsZQogCQkgKiBRSCwgSVRELCBvciBTSVREIGFkZHJlc3NlcyBhYm92ZSAyR0IuICAoQnV0IFRELAogCQkgKiBkYXRhIGJ1ZmZlciwgYW5kIHBlcmlvZGljIHNjaGVkdWxlIGFyZSBub3JtYWwuKQogCQkgKi8KLQkJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKIAkJY2FzZSAweDAwM2M6CS8qIE1DUDA0ICovCiAJCWNhc2UgMHgwMDViOgkvKiBDSzgwNCAqLwogCQljYXNlIDB4MDBkODoJLyogQ0s4ICovCkBAIC0xMjAsNiArMTIwLDE0IEBACiAJCQkJZWhjaV93YXJuKGVoY2ksICJjYW4ndCBlbmFibGUgTlZpZGlhICIKIAkJCQkJIndvcmthcm91bmQgZm9yID4yR0IgUkFNXG4iKTsKIAkJCWJyZWFrOworCQkvKiBTb21lIE5Gb3JjZTIgY2hpcHMgaGF2ZSBwcm9ibGVtcyB3aXRoIHNlbGVjdGl2ZSBzdXNwZW5kOworCQkgKiBmaXhlZCBpbiBuZXdlciBzaWxpY29uLgorCQkgKi8KKwkJY2FzZSAweDAwNjg6CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX1JFVklTSU9OX0lELCAmdGVtcCk7CisJCQlpZiAoKHRlbXAgJiAweGZmKSA8IDB4YTQpCisJCQkJZWhjaS0+bm9fc2VsZWN0aXZlX3N1c3BlbmQgPSAxOworCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTYzLDYgKzE3MSwyMSBAQAogCQkJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCX0KIAorI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCS8qIFJFVklTSVQ6IHRoZSBjb250cm9sbGVyIHdvcmtzIGZpbmUgZm9yIHdha2V1cCBpZmYgdGhlIHJvb3QgaHViCisJICogaXRzZWxmIGlzICJnbG9iYWxseSIgc3VzcGVuZGVkLCBidXQgdXNiY29yZSBjdXJyZW50bHkgZG9lc24ndAorCSAqIHVuZGVyc3RhbmQgc3VjaCB0aGluZ3MuCisJICoKKwkgKiBTeXN0ZW0gc3VzcGVuZCBjdXJyZW50bHkgZXhwZWN0cyB0byBiZSBhYmxlIHRvIHN1c3BlbmQgdGhlIGVudGlyZQorCSAqIGRldmljZSB0cmVlLCBkZXZpY2UtYXQtYS10aW1lLiAgSWYgd2UgZmFpbGVkIHNlbGVjdGl2ZSBzdXNwZW5kCisJICogcmVwb3J0cywgc3lzdGVtIHN1c3BlbmQgd291bGQgZmFpbDsgc28gdGhlIHJvb3QgaHViIGNvZGUgbXVzdCBjbGFpbQorCSAqIHN1Y2Nlc3MuICBUaGF0J3MgbHlpbmcgdG8gdXNiY29yZSwgYW5kIGl0IG1hdHRlcnMgZm9yIGZvciBydW50aW1lCisJICogUE0gc2NlbmFyaW9zIHdpdGggc2VsZWN0aXZlIHN1c3BlbmQgYW5kIHJlbW90ZSB3YWtldXAuLi4KKwkgKi8KKwlpZiAoZWhjaS0+bm9fc2VsZWN0aXZlX3N1c3BlbmQgJiYgZGV2aWNlX2Nhbl93YWtldXAoJnBkZXYtPmRldikpCisJCWVoY2lfd2FybihlaGNpLCAic2VsZWN0aXZlIHN1c3BlbmQvd2FrZXVwIHVuYXZhaWxhYmxlXG4iKTsKKyNlbmRpZgorCiAJcmV0dmFsID0gZWhjaV9wY2lfcmVpbml0KGVoY2ksIHBkZXYpOwogZG9uZToKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKaW5kZXggOWIxM2JmMi4uZTQ2OTIyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC03MDIsNyArNzAyLDcgQEAKIAl9CiAKIAkvKiBzdXBwb3J0IGZvciB0dCBzY2hlZHVsaW5nLCBhbmQgYWNjZXNzIHRvIHRvZ2dsZXMgKi8KLQlxaC0+ZGV2ID0gdXNiX2dldF9kZXYgKHVyYi0+ZGV2KTsKKwlxaC0+ZGV2ID0gdXJiLT5kZXY7CiAKIAkvKiB1c2luZyBUVD8gKi8KIAlzd2l0Y2ggKHVyYi0+ZGV2LT5zcGVlZCkgewpAQCAtNzIxLDcgKzcyMSwxNCBAQAogCQlpbmZvMSB8PSBtYXhwIDw8IDE2OwogCiAJCWluZm8yIHw9IChFSENJX1RVTkVfTVVMVF9UVCA8PCAzMCk7Ci0JCWluZm8yIHw9IHVyYi0+ZGV2LT50dHBvcnQgPDwgMjM7CisKKwkJLyogU29tZSBGcmVlc2NhbGUgcHJvY2Vzc29ycyBoYXZlIGFuIGVycmF0dW0gaW4gd2hpY2ggdGhlCisJCSAqIHBvcnQgbnVtYmVyIGluIHRoZSBxdWV1ZSBoZWFkIHdhcyAwLi5OLTEgaW5zdGVhZCBvZiAxLi5OLgorCQkgKi8KKwkJaWYgKGVoY2lfaGFzX2ZzbF9wb3J0bm9fYnVnKGVoY2kpKQorCQkJaW5mbzIgfD0gKHVyYi0+ZGV2LT50dHBvcnQtMSkgPDwgMjM7CisJCWVsc2UKKwkJCWluZm8yIHw9IHVyYi0+ZGV2LT50dHBvcnQgPDwgMjM7CiAKIAkJLyogc2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBUVDsgZm9yIFRESSdzIGludGVncmF0ZWQKIAkJICogcm9vdCBodWIgdHQsIGxlYXZlIGl0IHplcm9lZC4KQEAgLTEwMTUsMTIgKzEwMjIsMTQgQEAKIAkvKiBzdG9wIGFzeW5jIHNjaGVkdWxlIHJpZ2h0IG5vdz8gKi8KIAlpZiAodW5saWtlbHkgKHFoID09IGVoY2ktPmFzeW5jKSkgewogCQkvKiBjYW4ndCBnZXQgaGVyZSB3aXRob3V0IFNUU19BU1Mgc2V0ICovCi0JCWlmIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgIT0gSENfU1RBVEVfSEFMVCkgeworCQlpZiAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlICE9IEhDX1NUQVRFX0hBTFQKKwkJCQkmJiAhZWhjaS0+cmVjbGFpbSkgeworCQkJLyogLi4uIGFuZCBDTURfSUFBRCBjbGVhciAqLwogCQkJd3JpdGVsIChjbWQgJiB+Q01EX0FTRSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwogCQkJd21iICgpOwogCQkJLy8gaGFuZHNoYWtlIGxhdGVyLCBpZiB3ZSBuZWVkIHRvCisJCQl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfQVNZTkNfT0ZGKTsKIAkJfQotCQl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfQVNZTkNfT0ZGKTsKIAkJcmV0dXJuOwogCX0gCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggZWJjY2E5Ny4uNTg3MTk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTcwNyw2ICs3MDcsNyBAQAogCX0gZWxzZSB7CiAJCXUzMgkJYWRkcjsKIAkJaW50CQl0aGlua190aW1lOworCQlpbnQJCWhzX3RyYW5zZmVyczsKIAogCQlhZGRyID0gZGV2LT50dHBvcnQgPDwgMjQ7CiAJCWlmICghZWhjaV9pc19UREkoZWhjaSkKQEAgLTcxOSw2ICs3MjAsNyBAQAogCQl0aGlua190aW1lID0gZGV2LT50dCA/IGRldi0+dHQtPnRoaW5rX3RpbWUgOiAwOwogCQlzdHJlYW0tPnR0X3VzZWNzID0gTlNfVE9fVVMgKHRoaW5rX3RpbWUgKyB1c2JfY2FsY19idXNfdGltZSAoCiAJCQkJZGV2LT5zcGVlZCwgaXNfaW5wdXQsIDEsIG1heHApKTsKKwkJaHNfdHJhbnNmZXJzID0gbWF4ICgxdSwgKG1heHAgKyAxODcpIC8gMTg4KTsKIAkJaWYgKGlzX2lucHV0KSB7CiAJCQl1MzIJdG1wOwogCkBAIC03MjcsMTIgKzcyOSwxMSBAQAogCQkJc3RyZWFtLT51c2VjcyA9IEhTX1VTRUNTX0lTTyAoMSk7CiAJCQlzdHJlYW0tPnJhd19tYXNrID0gMTsKIAotCQkJLyogcGVzc2ltaXN0aWMgYy1tYXNrICovCi0JCQl0bXAgPSB1c2JfY2FsY19idXNfdGltZSAoVVNCX1NQRUVEX0ZVTEwsIDEsIDAsIG1heHApCi0JCQkJCS8gKDEyNSAqIDEwMDApOwotCQkJc3RyZWFtLT5yYXdfbWFzayB8PSAzIDw8ICh0bXAgKyA5KTsKKwkJCS8qIGMtbWFzayBhcyBzcGVjaWZpZWQgaW4gVVNCIDIuMCAxMS4xOC40IDMuYyAqLworCQkJdG1wID0gKDEgPDwgKGhzX3RyYW5zZmVycyArIDIpKSAtIDE7CisJCQlzdHJlYW0tPnJhd19tYXNrIHw9IHRtcCA8PCAoOCArIDIpOwogCQl9IGVsc2UKLQkJCXN0cmVhbS0+cmF3X21hc2sgPSBzbWFza19vdXQgW21heHAgLyAxODhdOworCQkJc3RyZWFtLT5yYXdfbWFzayA9IHNtYXNrX291dCBbaHNfdHJhbnNmZXJzIC0gMV07CiAJCWJhbmR3aWR0aCA9IHN0cmVhbS0+dXNlY3MgKyBzdHJlYW0tPmNfdXNlY3M7CiAJCWJhbmR3aWR0aCAvPSAxIDw8IChpbnRlcnZhbCArIDIpOwogCkBAIC04NjMsOSArODY0LDggQEAKIAlpbnQJCQlzaXplID0gc2l6ZW9mICppc29fc2NoZWQ7CiAKIAlzaXplICs9IHBhY2tldHMgKiBzaXplb2YgKHN0cnVjdCBlaGNpX2lzb19wYWNrZXQpOwotCWlzb19zY2hlZCA9IGttYWxsb2MgKHNpemUsIG1lbV9mbGFncyk7CisJaXNvX3NjaGVkID0ga3phbGxvYyhzaXplLCBtZW1fZmxhZ3MpOwogCWlmIChsaWtlbHkgKGlzb19zY2hlZCAhPSBOVUxMKSkgewotCQltZW1zZXQoaXNvX3NjaGVkLCAwLCBzaXplKTsKIAkJSU5JVF9MSVNUX0hFQUQgKCZpc29fc2NoZWQtPnRkX2xpc3QpOwogCX0KIAlyZXR1cm4gaXNvX3NjaGVkOwpAQCAtMTM5OCw3ICsxMzk4LDcgQEAKIAkgKi8KIAogCS8qIGdpdmUgdXJiIGJhY2sgdG8gdGhlIGRyaXZlciAuLi4gY2FuIGJlIG91dC1vZi1vcmRlciAqLwotCWRldiA9IHVzYl9nZXRfZGV2ICh1cmItPmRldik7CisJZGV2ID0gdXJiLT5kZXY7CiAJZWhjaV91cmJfZG9uZSAoZWhjaSwgdXJiLCByZWdzKTsKIAl1cmIgPSBOVUxMOwogCkBAIC0xNDE3LDcgKzE0MTcsNiBAQAogCQkJKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiKTsKIAl9CiAJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7Ci0JdXNiX3B1dF9kZXYgKGRldik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE3NjQsNyArMTc2Myw3IEBACiAJICovCiAKIAkvKiBnaXZlIHVyYiBiYWNrIHRvIHRoZSBkcml2ZXIgKi8KLQlkZXYgPSB1c2JfZ2V0X2RldiAodXJiLT5kZXYpOworCWRldiA9IHVyYi0+ZGV2OwogCWVoY2lfdXJiX2RvbmUgKGVoY2ksIHVyYiwgcmVncyk7CiAJdXJiID0gTlVMTDsKIApAQCAtMTc4Myw3ICsxNzgyLDYgQEAKIAkJCShzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0Iik7CiAJfQogCWlzb19zdHJlYW1fcHV0IChlaGNpLCBzdHJlYW0pOwotCXVzYl9wdXRfZGV2IChkZXYpOwogCiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IDE4ZTI1N2MuLjY3OWMxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC04OCw3ICs4OCwxMiBAQAogCXVuc2lnbmVkIGxvbmcJCW5leHRfc3RhdGVjaGFuZ2U7CiAJdTMyCQkJY29tbWFuZDsKIAorCS8qIFNJTElDT04gUVVJUktTICovCiAJdW5zaWduZWQJCWlzX3RkaV9yaF90dDoxOwkvKiBUREkgcm9vdGh1YiB3aXRoIFRUICovCisJdW5zaWduZWQJCW5vX3NlbGVjdGl2ZV9zdXNwZW5kOjE7CisJdW5zaWduZWQJCWhhc19mc2xfcG9ydF9idWc6MTsgLyogRnJlZVNjYWxlICovCisKKwl1OAkJCXNicm47CQkvKiBwYWNrZWQgcmVsZWFzZSBudW1iZXIgKi8KIAogCS8qIGlycSBzdGF0aXN0aWNzICovCiAjaWZkZWYgRUhDSV9TVEFUUwpAQCAtOTcsNyArMTAyLDYgQEAKICNlbHNlCiAjCWRlZmluZSBDT1VOVCh4KSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgotCXU4CQkJc2JybjsJCS8qIHBhY2tlZCByZWxlYXNlIG51bWJlciAqLwogfTsKIAogLyogY29udmVydCBiZXR3ZWVuIGFuIEhDRCBwb2ludGVyIGFuZCB0aGUgY29ycmVzcG9uZGluZyBFSENJX0hDRCAqLyAKQEAgLTYzOCw2ICs2NDIsMTggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2lmZGVmIENPTkZJR19QUENfODN4eAorLyogU29tZSBGcmVlc2NhbGUgcHJvY2Vzc29ycyBoYXZlIGFuIGVycmF0dW0gaW4gd2hpY2ggdGhlIFRUCisgKiBwb3J0IG51bWJlciBpbiB0aGUgcXVldWUgaGVhZCB3YXMgMC4uTi0xIGluc3RlYWQgb2YgMS4uTi4KKyAqLworI2RlZmluZQllaGNpX2hhc19mc2xfcG9ydG5vX2J1ZyhlKQkJKChlKS0+aGFzX2ZzbF9wb3J0X2J1ZykKKyNlbHNlCisjZGVmaW5lCWVoY2lfaGFzX2ZzbF9wb3J0bm9fYnVnKGUpCQkoMCkKKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNpZm5kZWYgREVCVUcKICNkZWZpbmUgU1RVQl9ERUJVR19GSUxFUwogI2VuZGlmCS8qIERFQlVHICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCmluZGV4IDY0MTI2OGQuLjJmZTdmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCkBAIC0yMTM3LDEwICsyMTM3LDkgQEAKIAl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAogCS8qIFNldHVwIHRoZSBoY3ByaXYgZGF0YS4gKi8KLQl1cmJfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpLCBLTUFMTE9DX0ZMQUcpOworCXVyYl9wcml2ID0ga3phbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEtNQUxMT0NfRkxBRyk7CiAJYXNzZXJ0KHVyYl9wcml2ICE9IE5VTEwpOwogCS8qIFRoaXMgc2V0cyByeF9vZmZzZXQgdG8gMC4gKi8KLQltZW1zZXQodXJiX3ByaXYsIDAsIHNpemVvZihldHJheF91cmJfcHJpdl90KSk7CiAJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IE5PVF9TVEFSVEVEOwogCXVyYi0+aGNwcml2ID0gdXJiX3ByaXY7CiAKQEAgLTI0NzUsMTAgKzI0NzQsOSBAQAogCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOwogCiAJLyogU2V0dXAgdGhlIGhjcHJpdiBkYXRhLiAqLwotCXVyYl9wcml2ID0ga21hbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEtNQUxMT0NfRkxBRyk7CisJdXJiX3ByaXYgPSBremFsbG9jKHNpemVvZihldHJheF91cmJfcHJpdl90KSwgS01BTExPQ19GTEFHKTsKIAlhc3NlcnQodXJiX3ByaXYgIT0gTlVMTCk7CiAJLyogVGhpcyBzZXRzIHJ4X29mZnNldCB0byAwLiAqLwotCW1lbXNldCh1cmJfcHJpdiwgMCwgc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpKTsKIAl1cmJfcHJpdi0+dXJiX3N0YXRlID0gTk9UX1NUQVJURUQ7CiAJdXJiLT5oY3ByaXYgPSB1cmJfcHJpdjsKIApAQCAtMjc2Nyw5ICsyNzY1LDggQEAKIAltYXhsZW4gPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOwogCWludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKIAotCXVyYl9wcml2ID0ga21hbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEtNQUxMT0NfRkxBRyk7CisJdXJiX3ByaXYgPSBremFsbG9jKHNpemVvZihldHJheF91cmJfcHJpdl90KSwgS01BTExPQ19GTEFHKTsKIAlhc3NlcnQodXJiX3ByaXYgIT0gTlVMTCk7Ci0JbWVtc2V0KHVyYl9wcml2LCAwLCBzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCkpOwogCXVyYi0+aGNwcml2ID0gdXJiX3ByaXY7CiAKIAlmaXJzdF9lcCA9ICZUeEludHJFUExpc3RbMF07CkBAIC0yOTk3LDkgKzI5OTQsOCBAQAogCiAJcHJldl9zYl9kZXNjID0gbmV4dF9zYl9kZXNjID0gdGVtcF9zYl9kZXNjID0gTlVMTDsKIAotCXVyYl9wcml2ID0ga21hbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEdGUF9BVE9NSUMpOworCXVyYl9wcml2ID0ga3phbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEdGUF9BVE9NSUMpOwogCWFzc2VydCh1cmJfcHJpdiAhPSBOVUxMKTsKLQltZW1zZXQodXJiX3ByaXYsIDAsIHNpemVvZihldHJheF91cmJfcHJpdl90KSk7CiAKIAl1cmItPmhjcHJpdiA9IHVyYl9wcml2OwogCXVyYl9wcml2LT5lcGlkID0gZXBpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwppbmRleCA5NzJjZTA0Li5lOTkyMTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCkBAIC03MjQsNyArNzI0LDcgQEAKIAkJZXAgPSBoZXAtPmhjcHJpdjsKIAllbHNlIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmVwLT5zY2hlZHVsZSk7Ci0JCWVwLT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJCWVwLT51ZGV2ID0gdWRldjsKIAkJZXAtPmVwbnVtID0gZXBudW07CiAJCWVwLT5tYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0KHVkZXYsIHVyYi0+cGlwZSwgaXNfb3V0KTsKIAkJdXNiX3NldHRvZ2dsZSh1ZGV2LCBlcG51bSwgaXNfb3V0LCAwKTsKQEAgLTg5MSw3ICs4OTEsNiBAQAogCWlmICghbGlzdF9lbXB0eSgmaGVwLT51cmJfbGlzdCkpCiAJCVdBUk4oImVwICVwIG5vdCBlbXB0eT9cbiIsIGVwKTsKIAotCXVzYl9wdXRfZGV2KGVwLT51ZGV2KTsKIAlrZnJlZShlcCk7CiAJaGVwLT5oY3ByaXYgPSBOVUxMOwogfQpAQCAtMTU1Myw3ICsxNTUyLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIGlzcDExNnhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGlzcDExNnhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpc3AxMTZ4ICppc3AxMTZ4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwMDMwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBTQU4gUGVvcGxlIChQdHkpIEx0ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgVGhpYmF1dCBWQVJFTkUgPHZhcmVuZXRAcGFyaXNjLWxpbnV4Lm9yZz4KKyAqCisgKiBBVDkxUk05MjAwIEJ1cyBHbHVlCisgKgorICogQmFzZWQgb24gZnJhZ21lbnRzIG9mIDIuNCBkcml2ZXIgYnkgUmljayBCcm9uc29uLgorICogQmFzZWQgb24gb2hjaS1vbWFwLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisKKyNpZm5kZWYgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMAorI2Vycm9yICJUaGlzIGZpbGUgaXMgQVQ5MVJNOTIwMCBidXMgZ2x1ZS4gIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgbXVzdCBiZSBkZWZpbmVkLiIKKyNlbmRpZgorCisvKiBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uIGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgKmljbGssICpmY2xrOworCitleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgYXQ5MV9zdGFydF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgb2hjaV9yZWdzIF9faW9tZW0gKnJlZ3MgPSBoY2QtPnJlZ3M7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJzdGFydGluZyBBVDkxUk05MjAwIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCisJLyoKKwkgKiBTdGFydCB0aGUgVVNCIGNsb2Nrcy4KKwkgKi8KKwljbGtfZW5hYmxlKGljbGspOworCWNsa19lbmFibGUoZmNsayk7CisKKwkvKgorCSAqIFRoZSBVU0IgaG9zdCBjb250cm9sbGVyIG11c3QgcmVtYWluIGluIHJlc2V0LgorCSAqLworCXdyaXRlbCgwLCAmcmVncy0+Y29udHJvbCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFfc3RvcF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgb2hjaV9yZWdzIF9faW9tZW0gKnJlZ3MgPSBoY2QtPnJlZ3M7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJzdG9wcGluZyBBVDkxUk05MjAwIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCisJLyoKKwkgKiBQdXQgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgaW50byByZXNldC4KKwkgKi8KKwl3cml0ZWwoMCwgJnJlZ3MtPmNvbnRyb2wpOworCisJLyoKKwkgKiBTdG9wIHRoZSBVU0IgY2xvY2tzLgorCSAqLworCWNsa19kaXNhYmxlKGZjbGspOworCWNsa19kaXNhYmxlKGljbGspOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdXNiX2hjZF9hdDkxX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKworLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLworLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KKworCisvKioKKyAqIHVzYl9oY2RfYXQ5MV9wcm9iZSAtIGluaXRpYWxpemUgQVQ5MVJNOTIwMC1iYXNlZCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyBwcm9iZSgpLgorICovCitpbnQgdXNiX2hjZF9hdDkxX3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gTlVMTDsKKworCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDIpIHsKKwkJcHJfZGVidWcoImhjZCBwcm9iZTogaW52YWxpZCBudW1fcmVzb3VyY2VzIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgocGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9NRU0pIHx8IChwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkpIHsKKwkJcHJfZGVidWcoImhjZCBwcm9iZTogaW52YWxpZCByZXNvdXJjZSB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCAiYXQ5MXJtOTIwMCIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwloY2QtPnJzcmNfc3RhcnQgPSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcHJfZGVidWcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnIyOworCX0KKworCWljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJvaGNpX2NsayIpOworCWZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1aHBjayIpOworCisJYXQ5MV9zdGFydF9oYyhwZGV2KTsKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBFcnJvciBoYW5kbGluZyAqLworCWF0OTFfc3RvcF9oYyhwZGV2KTsKKworCWNsa19wdXQoZmNsayk7CisJY2xrX3B1dChpY2xrKTsKKworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKworIGVycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisKKyBlcnIxOgorCXVzYl9wdXRfaGNkKGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgY29udHJvbGxlciBlbGVjdHJpY2FsbHkgcHJlc2VudCAqLworLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCisKKy8qKgorICogdXNiX2hjZF9hdDkxX3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIEFUOTFSTTkyMDAtYmFzZWQgSENEcworICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfYXQ5MV9wcm9iZSgpLCBmaXJzdCBpbnZva2luZworICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKKyAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKgorICovCitzdGF0aWMgaW50IHVzYl9oY2RfYXQ5MV9yZW1vdmUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlhdDkxX3N0b3BfaGMocGRldik7CisJaW91bm1hcChoY2QtPnJlZ3MpOworIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKworIAljbGtfcHV0KGZjbGspOworIAljbGtfcHV0KGljbGspOworIAlmY2xrID0gaWNsayA9IE5VTEw7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitvaGNpX2F0OTFfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisvLwlzdHJ1Y3QgYXQ5MV9vaGNpX2RhdGEJKmJvYXJkID0gaGNkLT5zZWxmLmNvbnRyb2xsZXItPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJCXJldDsKKworCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfcnVuKG9oY2kpKSA8IDApIHsKKwkJZXJyKCJjYW4ndCBzdGFydCAlcyIsIGhjZC0+c2VsZi5idXNfbmFtZSk7CisJCW9oY2lfc3RvcChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKy8vCWhjZC0+c2VsZi5yb290X2h1Yi0+bWF4Y2hpbGQgPSBib2FyZC0+cG9ydHM7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfYXQ5MV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIkFUOTFSTTkyMDAgT0hDSSIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJb2hjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnN0YXJ0ID0JCW9oY2lfYXQ5MV9zdGFydCwKKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CW9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorCisjaWZkZWYgQ09ORklHX1BNCisJLmh1Yl9zdXNwZW5kID0JCW9oY2lfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJb2hjaV9odWJfcmVzdW1lLAorI2VuZGlmCisJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9oY2lfaGNkX2F0OTFfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdXNiX2hjZF9hdDkxX3Byb2JlKCZvaGNpX2F0OTFfaGNfZHJpdmVyLCBkZXYpOworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX2F0OTFfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHVzYl9oY2RfYXQ5MV9yZW1vdmUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSwgZGV2KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBvaGNpX2hjZF9hdDkxX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIHN0YXRlLCB1MzIgbGV2ZWwpCit7CisJcHJpbnRrKCIlcyglczolZCk6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsCisJCV9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJY2xrX2Rpc2FibGUoZmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCB1MzIgc3RhdGUpCit7CisJcHJpbnRrKCIlcyglczolZCk6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsCisJCV9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pOworCisJY2xrX2VuYWJsZShmY2xrKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgb2hjaV9oY2RfYXQ5MV9kcnZfc3VzcGVuZCBOVUxMCisjZGVmaW5lIG9oY2lfaGNkX2F0OTFfZHJ2X3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2F0OTFfZHJpdmVyID0geworCS5wcm9iZQkJPSBvaGNpX2hjZF9hdDkxX2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IG9oY2lfaGNkX2F0OTFfZHJ2X3JlbW92ZSwKKwkuc3VzcGVuZAk9IG9oY2lfaGNkX2F0OTFfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF0OTFybTkyMDAtb2hjaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9hdDkxX2luaXQgKHZvaWQpCit7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX2F0OTFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX2F0OTFfY2xlYW51cCAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfYXQ5MV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAob2hjaV9oY2RfYXQ5MV9pbml0KTsKK21vZHVsZV9leGl0IChvaGNpX2hjZF9hdDkxX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCmluZGV4IGRiMjgwY2EuLmExYzhiM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTIzLDYgKzIzLDggQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIAorI2lmbmRlZglDT05GSUdfU09DX0FVMTIwMAorCiAjZGVmaW5lIFVTQkhfRU5BQkxFX0JFICgxPDwwKQogI2RlZmluZSBVU0JIX0VOQUJMRV9DICAoMTw8MSkKICNkZWZpbmUgVVNCSF9FTkFCTEVfRSAgKDE8PDIpCkBAIC0zNywyMSArMzksNjggQEAKICNlcnJvciBub3QgYnl0ZSBvcmRlciBkZWZpbmVkCiAjZW5kaWYKIAorI2Vsc2UgICAvKiBBdTEyMDAgKi8KKworI2RlZmluZSBVU0JfSE9TVF9DT05GSUcgICAgKFVTQl9NU1JfQkFTRSArIFVTQl9NU1JfTUNGRykKKyNkZWZpbmUgVVNCX01DRkdfUEZFTiAgICAgKDE8PDMxKQorI2RlZmluZSBVU0JfTUNGR19SRENPTUIgICAoMTw8MzApCisjZGVmaW5lIFVTQl9NQ0ZHX1NTREVOICAgICgxPDwyMykKKyNkZWZpbmUgVVNCX01DRkdfT0hDQ0xLRU4gKDE8PDE2KQorI2RlZmluZSBVU0JfTUNGR19VQ0FNICAgICAoMTw8NykKKyNkZWZpbmUgVVNCX01DRkdfT0JNRU4gICAgKDE8PDEpCisjZGVmaW5lIFVTQl9NQ0ZHX09NRU1FTiAgICgxPDwwKQorCisjZGVmaW5lIFVTQkhfRU5BQkxFX0NFICAgIFVTQl9NQ0ZHX09IQ0NMS0VOCisjaWZkZWYgQ09ORklHX0RNQV9DT0hFUkVOVAorI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUICAoVVNCX01DRkdfT0hDQ0xLRU4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfUEZFTiB8IFVTQl9NQ0ZHX1JEQ09NQiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBVU0JfTUNGR19TU0RFTiB8IFVTQl9NQ0ZHX1VDQU0gXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfT0JNRU4gfCBVU0JfTUNGR19PTUVNRU4pCisjZWxzZQorI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUICAoVVNCX01DRkdfT0hDQ0xLRU4gXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgVVNCX01DRkdfUEZFTiB8IFVTQl9NQ0ZHX1JEQ09NQiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBVU0JfTUNGR19TU0RFTiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgfCBVU0JfTUNGR19PQk1FTiB8IFVTQl9NQ0ZHX09NRU1FTikKKyNlbmRpZgorI2RlZmluZSBVU0JIX0RJU0FCTEUgICAgICAoVVNCX01DRkdfT0JNRU4gfCBVU0JfTUNGR19PTUVNRU4pCisKKyNlbmRpZiAgLyogQXUxMjAwICovCisKIGV4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBhdTF4eHhfc3RhcnRfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYXUxeHh4X3N0YXJ0X29oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KIAkJIjogc3RhcnRpbmcgQXUxeHh4IE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOwogCiAJLyogZW5hYmxlIGhvc3QgY29udHJvbGxlciAqLworCisjaWZuZGVmIENPTkZJR19TT0NfQVUxMjAwCisKIAlhdV93cml0ZWwoVVNCSF9FTkFCTEVfQ0UsIFVTQl9IT1NUX0NPTkZJRyk7CiAJdWRlbGF5KDEwMDApOwogCWF1X3dyaXRlbChVU0JIX0VOQUJMRV9JTklULCBVU0JfSE9TVF9DT05GSUcpOwogCXVkZWxheSgxMDAwKTsKIAorI2Vsc2UgICAvKiBBdTEyMDAgKi8KKworCS8qIHdyaXRlIEhXIGRlZmF1bHRzIGFnYWluIGluIGNhc2UgWWFtb24gY2xlYXJlZCB0aGVtICovCisJaWYgKGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRykgPT0gMCkgeworCQlhdV93cml0ZWwoMHgwMGQwMjAwMCwgVVNCX0hPU1RfQ09ORklHKTsKKwkJYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKTsKKwkJdWRlbGF5KDEwMDApOworCX0KKwlhdV93cml0ZWwoVVNCSF9FTkFCTEVfQ0UgfCBhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpLCBVU0JfSE9TVF9DT05GSUcpOworCWF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyk7CisJdWRlbGF5KDEwMDApOworCWF1X3dyaXRlbChVU0JIX0VOQUJMRV9JTklUIHwgYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSwgVVNCX0hPU1RfQ09ORklHKTsKKwlhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpOworCXVkZWxheSgxMDAwKTsKKworI2VuZGlmICAvKiBBdTEyMDAgKi8KKwogCS8qIHdhaXQgZm9yIHJlc2V0IGNvbXBsZXRlIChyZWFkIHJlZ2lzdGVyIHR3aWNlOyBzZWUgYXUxNTAwIGVycmF0YSkgKi8KIAl3aGlsZSAoYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSwKIAkJIShhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpICYgVVNCSF9FTkFCTEVfUkQpKQpAQCAtNjEsMTMgKzExMCwyNSBAQAogCSI6IENsb2NrIHRvIFVTQiBob3N0IGhhcyBiZWVuIGVuYWJsZWQgXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X3N0b3BfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYXUxeHh4X3N0b3Bfb2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXwogCSAgICAgICAiOiBzdG9wcGluZyBBdTF4eHggT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CiAKKyNpZm5kZWYgQ09ORklHX1NPQ19BVTEyMDAKKwogCS8qIERpc2FibGUgY2xvY2sgKi8KIAlhdV93cml0ZWwoYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSAmIH5VU0JIX0VOQUJMRV9DRSwgVVNCX0hPU1RfQ09ORklHKTsKKworI2Vsc2UgICAvKiBBdTEyMDAgKi8KKworCS8qIERpc2FibGUgbWVtICovCisJYXVfd3JpdGVsKH5VU0JIX0RJU0FCTEUgJiBhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpLCBVU0JfSE9TVF9DT05GSUcpOworCXVkZWxheSgxMDAwKTsKKwkvKiBEaXNhYmxlIGNsb2NrICovCisJYXVfd3JpdGVsKH5VU0JIX0VOQUJMRV9DRSAmIGF1X3JlYWRsKFVTQl9IT1NUX0NPTkZJRyksIFVTQl9IT1NUX0NPTkZJRyk7CisJYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKTsKKyNlbmRpZiAgLyogQXUxMjAwICovCiB9CiAKIApAQCAtNzgsNyArMTM5LDcgQEAKIAogCiAvKioKLSAqIHVzYl9oY2RfYXUxeHh4X3Byb2JlIC0gaW5pdGlhbGl6ZSBBdTF4eHgtYmFzZWQgSENEcworICogdXNiX29oY2lfYXUxeHh4X3Byb2JlIC0gaW5pdGlhbGl6ZSBBdTF4eHgtYmFzZWQgSENEcwogICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCiAgKgogICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKQEAgLTg2LDE0ICsxNDcsMjUgQEAKICAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KICAqCiAgKi8KLWludCB1c2JfaGNkX2F1MXh4eF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCB1c2Jfb2hjaV9hdTF4eHhfcHJvYmUoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAogCQkJICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCi0JaWYoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgewotCQlwcl9kZWJ1ZyAoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOworI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApICYmIGRlZmluZWQoQ09ORklHX0RNQV9DT0hFUkVOVCkKKwkvKiBBdTEyMDAgQUIgVVNCIGRvZXMgbm90IHN1cHBvcnQgY29oZXJlbnQgbWVtb3J5ICovCisJaWYgKCEocmVhZF9jMF9wcmlkKCkgJiAweGZmKSkgeworCQlwcl9pbmZvKCIlczogdGhpcyBpcyBjaGlwIHJldmlzaW9uIEFCICEhXG4iLAorCQkJZGV2LT5kZXYubmFtZSk7CisJCXByX2luZm8oIiVzOiB1cGRhdGUgeW91ciBib2FyZCBvciByZS1jb25maWd1cmUgdGhlIGtlcm5lbFxuIiwKKwkJCWRldi0+ZGV2Lm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisjZW5kaWYKKworCWlmIChkZXYtPnJlc291cmNlWzFdLmZsYWdzICE9IElPUkVTT1VSQ0VfSVJRKSB7CisJCXByX2RlYnVnKCJyZXNvdXJjZVsxXSBpcyBub3QgSU9SRVNPVVJDRV9JUlFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTEwNCwyNiArMTc2LDI2IEBACiAJaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewotCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOworCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBlcnIxOwogCX0KIAogCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAlpZiAoIWhjZC0+cmVncykgewotCQlwcl9kZWJ1ZygiaW9yZW1hcCBmYWlsZWQiKTsKKwkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkXG4iKTsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnIyOwogCX0KIAotCWF1MXh4eF9zdGFydF9oYyhkZXYpOworCWF1MXh4eF9zdGFydF9vaGMoZGV2KTsKIAlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOwogCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBTQV9JTlRFUlJVUFQpOworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUIHwgU0FfU0hJUlEpOwogCWlmIChyZXR2YWwgPT0gMCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCWF1MXh4eF9zdG9wX2hjKGRldik7CisJYXUxeHh4X3N0b3Bfb2hjKGRldik7CiAJaW91bm1hcChoY2QtPnJlZ3MpOwogIGVycjI6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CkBAIC0xNDYsMTAgKzIxOCwxMCBAQAogICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KICAqCiAgKi8KLXZvaWQgdXNiX2hjZF9hdTF4eHhfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB1c2Jfb2hjaV9hdTF4eHhfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwotCWF1MXh4eF9zdG9wX2hjKGRldik7CisJYXUxeHh4X3N0b3Bfb2hjKGRldik7CiAJaW91bm1hcChoY2QtPnJlZ3MpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCXVzYl9wdXRfaGNkKGhjZCk7CkBAIC0yMzUsNyArMzA3LDcgQEAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gdXNiX2hjZF9hdTF4eHhfcHJvYmUoJm9oY2lfYXUxeHh4X2hjX2RyaXZlciwgcGRldik7CisJcmV0ID0gdXNiX29oY2lfYXUxeHh4X3Byb2JlKCZvaGNpX2F1MXh4eF9oY19kcml2ZXIsIHBkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0Myw3ICszMTUsNyBAQAogewogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXVzYl9oY2RfYXUxeHh4X3JlbW92ZShoY2QsIHBkZXYpOworCXVzYl9vaGNpX2F1MXh4eF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAkvKlRCRCovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggYTRiMTI0MC4uNTQ0Zjc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtNDQzLDExICs0NDMsMTYgQEAKIHN0YXRpYyBpbnQgb2hjaV9pbml0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gb2hjaV90b19oY2Qob2hjaSk7CiAKIAlkaXNhYmxlIChvaGNpKTsKLQlvaGNpLT5yZWdzID0gb2hjaV90b19oY2Qob2hjaSktPnJlZ3M7CisJb2hjaS0+cmVncyA9IGhjZC0+cmVnczsKIAlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKIAorCS8qIFJFVklTSVQgdGhpcyBCSU9TIGhhbmRzaGFrZSBpcyBub3cgbW92ZWQgaW50byBQQ0kgInF1aXJrcyIsIGFuZAorCSAqIHdhcyBuZXZlciBuZWVkZWQgZm9yIG1vc3Qgbm9uLVBDSSBzeXN0ZW1zIC4uLiByZW1vdmUgdGhlIGNvZGU/CisJICovCisKICNpZm5kZWYgSVJfRElTQUJMRQogCS8qIFNNTSBvd25zIHRoZSBIQz8gIG5vdCBmb3IgbG9uZyEgKi8KIAlpZiAoIW5vX2hhbmRzaGFrZSAmJiBvaGNpX3JlYWRsIChvaGNpLApAQCAtNDc4LDggKzQ4MywxMCBAQAogCiAJLyogRGlzYWJsZSBIQyBpbnRlcnJ1cHRzICovCiAJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9NSUUsICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7Ci0JLy8gZmx1c2ggdGhlIHdyaXRlcwotCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisKKwkvKiBmbHVzaCB0aGUgd3JpdGVzLCBhbmQgc2F2ZSBrZXkgYml0cyBsaWtlIFJXQyAqLworCWlmIChvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCkgJiBPSENJX0NUUkxfUldDKQorCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ1RSTF9SV0M7CiAKIAkvKiBSZWFkIHRoZSBudW1iZXIgb2YgcG9ydHMgdW5sZXNzIG92ZXJyaWRkZW4gKi8KIAlpZiAob2hjaS0+bnVtX3BvcnRzID09IDApCkBAIC00ODgsMTYgKzQ5NSwxOSBAQAogCWlmIChvaGNpLT5oY2NhKQogCQlyZXR1cm4gMDsKIAotCW9oY2ktPmhjY2EgPSBkbWFfYWxsb2NfY29oZXJlbnQgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJb2hjaS0+aGNjYSA9IGRtYV9hbGxvY19jb2hlcmVudCAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCiAJCQlzaXplb2YgKm9oY2ktPmhjY2EsICZvaGNpLT5oY2NhX2RtYSwgMCk7CiAJaWYgKCFvaGNpLT5oY2NhKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICgocmV0ID0gb2hjaV9tZW1faW5pdCAob2hjaSkpIDwgMCkKLQkJb2hjaV9zdG9wIChvaGNpX3RvX2hjZChvaGNpKSk7CisJCW9oY2lfc3RvcCAoaGNkKTsKKwllbHNlIHsKKwkJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyICgmb2hjaS0+cmVib290X25vdGlmaWVyKTsKKwkJY3JlYXRlX2RlYnVnX2ZpbGVzIChvaGNpKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwotCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01MTAsNiArNTIwLDcgQEAKIHsKICAgCXUzMgkJCW1hc2ssIHRlbXA7CiAJaW50CQkJZmlyc3QgPSBvaGNpLT5mbWludGVydmFsID09IDA7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBvaGNpX3RvX2hjZChvaGNpKTsKIAogCWRpc2FibGUgKG9oY2kpOwogCkBAIC01MjUsMTggKzUzNiwxNyBAQAogCQkvKiBhbHNvOiBwb3dlci9vdmVyY3VycmVudCBmbGFncyBpbiByb290aHViLmEgKi8KIAl9CiAKLSAgCS8qIFJlc2V0IFVTQiBuZWFybHkgImJ5IHRoZSBib29rIi4gIFJlbW90ZVdha2V1cENvbm5lY3RlZAotCSAqIHNhdmVkIGlmIGJvb3QgZmlybXdhcmUgKEJJT1MvU01NLy4uLikgdG9sZCB1cyBpdCdzIGNvbm5lY3RlZAotCSAqIChmb3IgT0hDSSBpbnRlZ3JhdGVkIG9uIG1haW5ib2FyZCwgaXQgbm9ybWFsbHkgaXMpCisgIAkvKiBSZXNldCBVU0IgbmVhcmx5ICJieSB0aGUgYm9vayIuICBSZW1vdGVXYWtldXBDb25uZWN0ZWQgd2FzCisJICogc2F2ZWQgaWYgYm9vdCBmaXJtd2FyZSAoQklPUy9TTU0vLi4uKSB0b2xkIHVzIGl0J3MgY29ubmVjdGVkLAorCSAqIG9yIGlmIGJ1cyBnbHVlIGRpZCB0aGUgc2FtZSAoZS5nLiBmb3IgUENJIGFkZC1pbiBjYXJkcyB3aXRoCisJICogUENJIFBNIHN1cHBvcnQpLgogCSAqLwotCW9oY2ktPmhjX2NvbnRyb2wgPSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CiAJb2hjaV9kYmcgKG9oY2ksICJyZXNldHRpbmcgZnJvbSBzdGF0ZSAnJXMnLCBjb250cm9sID0gMHgleFxuIiwKIAkJCWhjZnMyc3RyaW5nIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpLAotCQkJb2hjaS0+aGNfY29udHJvbCk7Ci0KLQlpZiAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9SV0MKLQkJCSYmICEob2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRDc1NikpCi0JCW9oY2lfdG9faGNkKG9oY2kpLT5jYW5fd2FrZXVwID0gMTsKKwkJCW9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKSk7CisJaWYgKChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX1JXQykgIT0gMAorCQkJJiYgIWRldmljZV9tYXlfd2FrZXVwKGhjZC0+c2VsZi5jb250cm9sbGVyKSkKKwkJZGV2aWNlX2luaXRfd2FrZXVwKGhjZC0+c2VsZi5jb250cm9sbGVyLCAxKTsKIAogCXN3aXRjaCAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CiAJY2FzZSBPSENJX1VTQl9PUEVSOgpAQCAtNjMyLDcgKzY0Miw3IEBACiAJb2hjaS0+aGNfY29udHJvbCAmPSBPSENJX0NUUkxfUldDOwogIAlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ09OVFJPTF9JTklUIHwgT0hDSV9VU0JfT1BFUjsKICAJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKLQlvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOwogCiAJLyogd2FrZSBvbiBDb25uZWN0U3RhdHVzQ2hhbmdlLCBtYXRjaGluZyBleHRlcm5hbCBodWJzICovCiAJb2hjaV93cml0ZWwgKG9oY2ksIFJIX0hTX0RSV0UsICZvaGNpLT5yZWdzLT5yb290aHViLnN0YXR1cyk7CkBAIC02NjcsMTUgKzY3NywxMCBAQAogCiAJLy8gUE9UUEdUIGRlbGF5IGlzIGJpdHMgMjQtMzEsIGluIDIgbXMgdW5pdHMuCiAJbWRlbGF5ICgodGVtcCA+PiAyMykgJiAweDFmZSk7Ci0Jb2hjaV90b19oY2Qob2hjaSktPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKIAogCW9oY2lfZHVtcCAob2hjaSwgMSk7CiAKLQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWIgPT0gTlVMTCkgewotCQlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIgKCZvaGNpLT5yZWJvb3Rfbm90aWZpZXIpOwotCQljcmVhdGVfZGVidWdfZmlsZXMgKG9oY2kpOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC05MDUsNiArOTEwLDEwIEBACiAjaW5jbHVkZSAib2hjaS1wcGMtc29jLmMiCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX0FUOTFSTTkyMDAKKyNpbmNsdWRlICJvaGNpLWF0OTEuYyIKKyNlbmRpZgorCiAjaWYgIShkZWZpbmVkKENPTkZJR19QQ0kpIFwKICAgICAgIHx8IGRlZmluZWQoQ09ORklHX1NBMTExMSkgXAogICAgICAgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9TM0MyNDEwKSBcCkBAIC05MTMsNiArOTIyLDcgQEAKICAgICAgIHx8IGRlZmluZWQgKENPTkZJR19QWEEyN3gpIFwKICAgICAgIHx8IGRlZmluZWQgKENPTkZJR19TT0NfQVUxWDAwKSBcCiAgICAgICB8fCBkZWZpbmVkIChDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0MpIFwKKyAgICAgIHx8IGRlZmluZWQgKENPTkZJR19BUkNIX0FUOTFSTTkyMDApIFwKIAkpCiAjZXJyb3IgIm1pc3NpbmcgYnVzIGdsdWUgZm9yIG9oY2ktaGNkIgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKaW5kZXggNGIyMjI2ZC4uMGJiOTcyYjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJCSZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKIAogCS8qIG1heWJlIHJlc3VtZSBjYW4gd2FrZSByb290IGh1YiAqLwotCWlmIChoY2QtPnJlbW90ZV93YWtldXApCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+ZGV2KSkKIAkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX0NUUkxfUldFOwogCWVsc2UKIAkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX1JXRTsKQEAgLTI0Niw5ICsyNDYsOSBAQAogCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CiAJbXNsZWVwICgzKTsKIAotCXRlbXAgPSBPSENJX0NPTlRST0xfSU5JVCB8IE9IQ0lfVVNCX09QRVI7Ci0JaWYgKGhjZC0+Y2FuX3dha2V1cCkKLQkJdGVtcCB8PSBPSENJX0NUUkxfUldDOworCXRlbXAgPSBvaGNpLT5oY19jb250cm9sOworCXRlbXAgJj0gT0hDSV9DVFJMX1JXQzsKKwl0ZW1wIHw9IE9IQ0lfQ09OVFJPTF9JTklUIHwgT0hDSV9VU0JfT1BFUjsKIAlvaGNpLT5oY19jb250cm9sID0gdGVtcDsKIAlvaGNpX3dyaXRlbCAob2hjaSwgdGVtcCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwogCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CkBAIC0zMDIsNyArMzAyLDcgQEAKIHsKIAlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAlpbnQJCWksIGNoYW5nZWQgPSAwLCBsZW5ndGggPSAxOwotCWludAkJY2FuX3N1c3BlbmQgPSBoY2QtPmNhbl93YWtldXA7CisJaW50CQljYW5fc3VzcGVuZCA9IGRldmljZV9tYXlfd2FrZXVwKCZoY2QtPnNlbGYucm9vdF9odWItPmRldik7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMzU0LDcgKzM1NCw3IEBACiAJCSAqLwogCQlpZiAoIShzdGF0dXMgJiBSSF9QU19DQ1MpKQogCQkJY29udGludWU7Ci0JCWlmICgoc3RhdHVzICYgUkhfUFNfUFNTKSAmJiBoY2QtPnJlbW90ZV93YWtldXApCisJCWlmICgoc3RhdHVzICYgUkhfUFNfUFNTKSAmJiBjYW5fc3VzcGVuZCkKIAkJCWNvbnRpbnVlOwogCQljYW5fc3VzcGVuZCA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKaW5kZXggMzc4NWIzZi4uY2ExOWFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCkBAIC0yODYsNyArMjg2LDcgQEAKIGludCB1c2JfaGNkX29tYXBfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKIAkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwsIGlycTsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gMDsKIAlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2k7CiAKQEAgLTMyOSw3ICszMjksMTIgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnIyOwogCi0JcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBTQV9JTlRFUlJVUFQpOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJcmV0dmFsID0gLUVOWElPOworCQlnb3RvIGVycjI7CisJfQorCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBTQV9JTlRFUlJVUFQpOwogCWlmIChyZXR2YWwgPT0gMCkKIAkJcmV0dXJuIHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IDFiMDlkZGUuLjFiZmU5NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTM1LDcgKzM1LDEwIEBACiAJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CiAJaW50CQlyZXQ7CiAKLQlpZihoY2QtPnNlbGYuY29udHJvbGxlciAmJiBoY2QtPnNlbGYuY29udHJvbGxlci0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKKwkvKiBSRVZJU0lUIHRoaXMgd2hvbGUgYmxvY2sgc2hvdWxkIG1vdmUgdG8gcmVzZXQoKSwgd2hpY2ggaGFuZGxlcworCSAqIGFsbCB0aGUgb3RoZXIgb25lLXRpbWUgaW5pdC4KKwkgKi8KKwlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXIpIHsKIAkJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKIAogCQkvKiBBTUQgNzU2LCBmb3IgbW9zdCBjaGlwcyAoZWFybHkgcmV2cyksIGNvcnJ1cHRzIHJlZ2lzdGVyCkBAIC00NSw3ICs0OCw4IEBACiAJCQkJJiYgcGRldi0+ZGV2aWNlID09IDB4NzQwYykgewogCQkJb2hjaS0+ZmxhZ3MgPSBPSENJX1FVSVJLX0FNRDc1NjsKIAkJCW9oY2lfZGJnIChvaGNpLCAiQU1ENzU2IGVycmF0dW0gNCB3b3JrYXJvdW5kXG4iKTsKLQkJCS8vIGFsc28gc29tZXdoYXQgZXJyYXR1bSAxMCAoc3VzcGVuZC9yZXN1bWUgaXNzdWVzKQorCQkJLyogYWxzbyBlcnJhdHVtIDEwIChzdXNwZW5kL3Jlc3VtZSBpc3N1ZXMpICovCisJCQlkZXZpY2VfaW5pdF93YWtldXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAwKTsKIAkJfQogCiAJCS8qIEZJWE1FIGZvciBzb21lIG9mIHRoZSBlYXJseSBBTUQgNzYwIHNvdXRoYnJpZGdlcywgT0hDSQpAQCAtODgsNiArOTIsMTMgQEAKIAkJCW9oY2lfZGJnIChvaGNpLAogCQkJCSJlbmFibGVkIENvbXBhcSBaRk1pY3JvIGNoaXBzZXQgcXVpcmtcbiIpOwogCQl9CisKKwkJLyogUldDIG1heSBub3QgYmUgc2V0IGZvciBhZGQtaW4gUENJIGNhcmRzLCBzaW5jZSBib290CisJCSAqIGZpcm13YXJlIHByb2JhYmx5IGlnbm9yZWQgdGhlbS4gIFRoaXMgdHJhbnNmZXJzIFBDSQorCQkgKiBQTSB3YWtldXAgY2FwYWJpbGl0aWVzIChvbmNlIHRoZSBQQ0kgbGF5ZXIgaXMgZml4ZWQpLgorCQkgKi8KKwkJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCQkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX0NUUkxfUldDOwogCX0KIAogCS8qIE5PVEU6IHRoZXJlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBhIGZpcnN0IHJlc2V0LCB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwppbmRleCAxMTgyODhkLi45ZTgxYzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtMjYwLDEyICsyNjAsMTMgQEAKIAkJCQkJCW9mZnNldCArIEVIQ0lfVVNCTEVHQ1RMU1RTLAogCQkJCQkJdmFsIHwgRUhDSV9VU0JMRUdDVExTVFNfU09PRSk7CiAjZW5kaWYKLQkJCX0KIAotCQkJLyogYWx3YXlzIHNheSBMaW51eCB3aWxsIG93biB0aGUgaGFyZHdhcmUKLQkJCSAqIGJ5IHNldHRpbmcgRUhDSV9VU0JMRUdTVVBfT1MuCi0JCQkgKi8KLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBvZmZzZXQgKyAzLCAxKTsKKwkJCQkvKiBzb21lIHN5c3RlbXMgZ2V0IHVwc2V0IGlmIHRoaXMgc2VtYXBob3JlIGlzCisJCQkJICogc2V0IGZvciBhbnkgb3RoZXIgcmVhc29uIHRoYW4gZm9yY2luZyBhIEJJT1MKKwkJCQkgKiBoYW5kb2ZmLi4KKwkJCQkgKi8KKwkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgb2Zmc2V0ICsgMywgMSk7CisJCQl9CiAKIAkJCS8qIGlmIGJvb3QgZmlybXdhcmUgbm93IG93bnMgRUhDSSwgc3BpbiB0aWxsCiAJCQkgKiBpdCBoYW5kcyBpdCBvdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggNTE3MzYwYi4uYTkyMzQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC04NTMsNyArODUzLDcgQEAKIAogCX0gZWxzZSB7CiAJCUlOSVRfTElTVF9IRUFEKCZlcC0+c2NoZWR1bGUpOwotCQllcC0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCQllcC0+dWRldiA9IHVkZXY7CiAJCWVwLT5lcG51bSA9IGVwbnVtOwogCQllcC0+bWF4cGFja2V0ID0gdXNiX21heHBhY2tldCh1ZGV2LCB1cmItPnBpcGUsIGlzX291dCk7CiAJCWVwLT5kZWZjdHJsID0gU0wxMUhfSENUTE1BU0tfQVJNIHwgU0wxMUhfSENUTE1BU0tfRU5BQkxFOwpAQCAtMTA1Miw3ICsxMDUyLDYgQEAKIAlpZiAoIWxpc3RfZW1wdHkoJmhlcC0+dXJiX2xpc3QpKQogCQlXQVJOKCJlcCAlcCBub3QgZW1wdHk/XG4iLCBlcCk7CiAKLQl1c2JfcHV0X2RldihlcC0+dWRldik7CiAJa2ZyZWUoZXApOwogCWhlcC0+aGNwcml2ID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKaW5kZXggNTgzMjk1My4uZTEyMzkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKQEAgLTE3LDEwICsxNywxMyBAQAogCiAjaW5jbHVkZSAidWhjaS1oY2QuaCIKIAotc3RhdGljIHN0cnVjdCBkZW50cnkgKnVoY2lfZGVidWdmc19yb290ID0gTlVMTDsKKyNkZWZpbmUgdWhjaV9kZWJ1Z19vcGVyYXRpb25zICgqIChzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICopIE5VTEwpCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdWhjaV9kZWJ1Z2ZzX3Jvb3Q7CisKKyNpZmRlZiBERUJVRwogCiAvKiBIYW5kbGUgUkVBTExZIGxhcmdlIHByaW50a3Mgc28gd2UgZG9uJ3Qgb3ZlcmZsb3cgYnVmZmVycyAqLwotc3RhdGljIGlubGluZSB2b2lkIGxwcmludGsoY2hhciAqYnVmKQorc3RhdGljIHZvaWQgbHByaW50ayhjaGFyICpidWYpCiB7CiAJY2hhciAqcDsKIApAQCAtOTAsMTMgKzkzLDU5IEBACiAJcmV0dXJuIG91dCAtIGJ1ZjsKIH0KIAorc3RhdGljIGludCB1aGNpX3Nob3dfdXJicChzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHNwYWNlKQoreworCWNoYXIgKm91dCA9IGJ1ZjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJaW50IGksIG5hY3RpdmUsIG5pbmFjdGl2ZTsKKworCWlmIChsZW4gPCAyMDApCisJCXJldHVybiAwOworCisJb3V0ICs9IHNwcmludGYob3V0LCAidXJiX3ByaXYgWyVwXSAiLCB1cmJwKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJ1cmIgWyVwXSAiLCB1cmJwLT51cmIpOworCW91dCArPSBzcHJpbnRmKG91dCwgInFoIFslcF0gIiwgdXJicC0+cWgpOworCW91dCArPSBzcHJpbnRmKG91dCwgIkRldj0lZCAiLCB1c2JfcGlwZWRldmljZSh1cmJwLT51cmItPnBpcGUpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJFUD0leCglcykgIiwgdXNiX3BpcGVlbmRwb2ludCh1cmJwLT51cmItPnBpcGUpLAorCQkJKHVzYl9waXBlaW4odXJicC0+dXJiLT5waXBlKSA/ICJJTiIgOiAiT1VUIikpOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJicC0+dXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9JU09DSFJPTk9VUzogb3V0ICs9IHNwcmludGYob3V0LCAiSVNPIik7IGJyZWFrOworCWNhc2UgUElQRV9JTlRFUlJVUFQ6IG91dCArPSBzcHJpbnRmKG91dCwgIklOVCIpOyBicmVhazsKKwljYXNlIFBJUEVfQlVMSzogb3V0ICs9IHNwcmludGYob3V0LCAiQkxLIik7IGJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOiBvdXQgKz0gc3ByaW50ZihvdXQsICJDVEwiKTsgYnJlYWs7CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiJXMiLCAodXJicC0+ZnNiciA/ICIgRlNCUiIgOiAiIikpOworCisJaWYgKHVyYnAtPnVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiIFN0YXR1cz0lZCIsIHVyYnAtPnVyYi0+c3RhdHVzKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJcbiIpOworCisJaSA9IG5hY3RpdmUgPSBuaW5hY3RpdmUgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CisJCWlmICgrK2kgPD0gMTAgfHwgZGVidWcgPiAyKSB7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMlZDogIiwgc3BhY2UgKyAyLCAiIiwgaSk7CisJCQlvdXQgKz0gdWhjaV9zaG93X3RkKHRkLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpLCAwKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0ZF9zdGF0dXModGQpICYgVERfQ1RSTF9BQ1RJVkUpCisJCQkJKytuYWN0aXZlOworCQkJZWxzZQorCQkJCSsrbmluYWN0aXZlOworCQl9CisJfQorCWlmIChuYWN0aXZlICsgbmluYWN0aXZlID4gMCkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzW3NraXBwZWQgJWQgaW5hY3RpdmUgYW5kICVkIGFjdGl2ZSAiCisJCQkJIlREc11cbiIsCisJCQkJc3BhY2UsICIiLCBuaW5hY3RpdmUsIG5hY3RpdmUpOworCisJcmV0dXJuIG91dCAtIGJ1ZjsKK30KKwogc3RhdGljIGludCB1aGNpX3Nob3dfcWgoc3RydWN0IHVoY2lfcWggKnFoLCBjaGFyICpidWYsIGludCBsZW4sIGludCBzcGFjZSkKIHsKIAljaGFyICpvdXQgPSBidWY7Ci0Jc3RydWN0IHVyYl9wcml2ICp1cmJwOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICp0bXA7Ci0Jc3RydWN0IHVoY2lfdGQgKnRkOwotCWludCBpID0gMCwgY2hlY2tlZCA9IDAsIHByZXZhY3RpdmUgPSAwOworCWludCBpLCBudXJiczsKIAlfX2xlMzIgZWxlbWVudCA9IHFoX2VsZW1lbnQocWgpOwogCiAJLyogVHJ5IHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBtZW1vcnkgKi8KQEAgLTExOCw4NiArMTY3LDQwIEBACiAJaWYgKCEoZWxlbWVudCAmIH4oVUhDSV9QVFJfUUggfCBVSENJX1BUUl9ERVBUSCkpKQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIEVsZW1lbnQgaXMgTlVMTCAoYnVnPylcbiIsIHNwYWNlLCAiIik7CiAKLQlpZiAoIXFoLT51cmJwKSB7Ci0JCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyAgdXJicCA9PSBOVUxMXG4iLCBzcGFjZSwgIiIpOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKGxpc3RfZW1wdHkoJnFoLT5xdWV1ZSkpIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzICBxdWV1ZSBpcyBlbXB0eVxuIiwgc3BhY2UsICIiKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHFoLT5xdWV1ZS5uZXh0LAorCQkJCXN0cnVjdCB1cmJfcHJpdiwgbm9kZSk7CisJCXN0cnVjdCB1aGNpX3RkICp0ZCA9IGxpc3RfZW50cnkodXJicC0+dGRfbGlzdC5uZXh0LAorCQkJCXN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKIAotCXVyYnAgPSBxaC0+dXJicDsKLQotCWhlYWQgPSAmdXJicC0+dGRfbGlzdDsKLQl0bXAgPSBoZWFkLT5uZXh0OwotCi0JdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOwotCi0JaWYgKGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKSAhPSAoZWxlbWVudCAmIH5VSENJX1BUUl9CSVRTKSkKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzIEVsZW1lbnQgIT0gRmlyc3QgVERcbiIsIHNwYWNlLCAiIik7Ci0KLQl3aGlsZSAodG1wICE9IGhlYWQpIHsKLQkJc3RydWN0IHVoY2lfdGQgKnRkID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKLQotCQl0bXAgPSB0bXAtPm5leHQ7Ci0KLQkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzJWQ6ICIsIHNwYWNlICsgMiwgIiIsIGkrKyk7Ci0JCW91dCArPSB1aGNpX3Nob3dfdGQodGQsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDApOwotCi0JCWlmIChpID4gMTAgJiYgIWNoZWNrZWQgJiYgcHJldmFjdGl2ZSAmJiB0bXAgIT0gaGVhZCAmJgotCQkgICAgZGVidWcgPD0gMikgewotCQkJc3RydWN0IGxpc3RfaGVhZCAqbnRtcCA9IHRtcDsKLQkJCXN0cnVjdCB1aGNpX3RkICpudGQgPSB0ZDsKLQkJCWludCBhY3RpdmUgPSAxLCBuaSA9IGk7Ci0KLQkJCWNoZWNrZWQgPSAxOwotCi0JCQl3aGlsZSAobnRtcCAhPSBoZWFkICYmIG50bXAtPm5leHQgIT0gaGVhZCAmJiBhY3RpdmUpIHsKLQkJCQludGQgPSBsaXN0X2VudHJ5KG50bXAsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKLQotCQkJCW50bXAgPSBudG1wLT5uZXh0OwotCi0JCQkJYWN0aXZlID0gdGRfc3RhdHVzKG50ZCkgJiBURF9DVFJMX0FDVElWRTsKLQotCQkJCW5pKys7Ci0JCQl9Ci0KLQkJCWlmIChhY3RpdmUgJiYgbmkgPiBpKSB7Ci0JCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzW3NraXBwZWQgJWQgYWN0aXZlIFREc11cbiIsIHNwYWNlLCAiIiwgbmkgLSBpKTsKLQkJCQl0bXAgPSBudG1wOwotCQkJCXRkID0gbnRkOwotCQkJCWkgPSBuaTsKLQkJCX0KKwkJaWYgKGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKSAhPSAoZWxlbWVudCAmIH5VSENJX1BUUl9CSVRTKSkKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyBFbGVtZW50ICE9IEZpcnN0IFREXG4iLAorCQkJCQlzcGFjZSwgIiIpOworCQlpID0gbnVyYnMgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVyYnAsICZxaC0+cXVldWUsIG5vZGUpIHsKKwkJCWlmICgrK2kgPD0gMTApCisJCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVyYnAsIG91dCwKKwkJCQkJCWxlbiAtIChvdXQgLSBidWYpLCBzcGFjZSArIDIpOworCQkJZWxzZQorCQkJCSsrbnVyYnM7CiAJCX0KLQotCQlwcmV2YWN0aXZlID0gdGRfc3RhdHVzKHRkKSAmIFREX0NUUkxfQUNUSVZFOworCQlpZiAobnVyYnMgPiAwKQorCQkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzIFNraXBwZWQgJWQgVVJCc1xuIiwKKwkJCQkJc3BhY2UsICIiLCBudXJicyk7CiAJfQogCi0JaWYgKGxpc3RfZW1wdHkoJnVyYnAtPnF1ZXVlX2xpc3QpIHx8IHVyYnAtPnF1ZXVlZCkKLQkJZ290byBvdXQ7Ci0KLQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnNRdWV1ZWQgUUhzOlxuIiwgLXNwYWNlLCAiLS0iKTsKLQotCWhlYWQgPSAmdXJicC0+cXVldWVfbGlzdDsKLQl0bXAgPSBoZWFkLT5uZXh0OwotCi0Jd2hpbGUgKHRtcCAhPSBoZWFkKSB7Ci0JCXN0cnVjdCB1cmJfcHJpdiAqbnVyYnAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVyYl9wcml2LAotCQkJCQkJcXVldWVfbGlzdCk7Ci0JCXRtcCA9IHRtcC0+bmV4dDsKLQotCQlvdXQgKz0gdWhjaV9zaG93X3FoKG51cmJwLT5xaCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSwgc3BhY2UpOworCWlmIChxaC0+dWRldikgeworCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIER1bW15IFREXG4iLCBzcGFjZSwgIiIpOworCQlvdXQgKz0gdWhjaV9zaG93X3RkKHFoLT5kdW1teV90ZCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSwgMCk7CiAJfQogCi1vdXQ6CiAJcmV0dXJuIG91dCAtIGJ1ZjsKIH0KIAotI2RlZmluZSBzaG93X2ZyYW1lX251bSgpCVwKLQlpZiAoIXNob3duKSB7CQlcCi0JICBzaG93biA9IDE7CQlcCi0JICBvdXQgKz0gc3ByaW50ZihvdXQsICItIEZyYW1lICVkXG4iLCBpKTsgXAotCX0KLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHFoX25hbWVzW10gPSB7CisgICJza2VsX3VubGlua19xaCIsICJza2VsX2lzb19xaCIsCiAgICJza2VsX2ludDEyOF9xaCIsICJza2VsX2ludDY0X3FoIiwKICAgInNrZWxfaW50MzJfcWgiLCAic2tlbF9pbnQxNl9xaCIsCiAgICJza2VsX2ludDhfcWgiLCAic2tlbF9pbnQ0X3FoIiwKQEAgLTIwNiwxMiArMjA5LDYgQEAKICAgInNrZWxfYnVsa19xaCIsICJza2VsX3Rlcm1fcWgiCiB9OwogCi0jZGVmaW5lIHNob3dfcWhfbmFtZSgpCQlcCi0JaWYgKCFzaG93bikgewkJXAotCSAgc2hvd24gPSAxOwkJXAotCSAgb3V0ICs9IHNwcmludGYob3V0LCAiLSAlc1xuIiwgcWhfbmFtZXNbaV0pOyBcCi0JfQotCiBzdGF0aWMgaW50IHVoY2lfc2hvd19zYyhpbnQgcG9ydCwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJY2hhciAqb3V0ID0gYnVmOwpAQCAtMzIxLDEzOSArMzE4LDI5IEBACiAJcmV0dXJuIG91dCAtIGJ1ZjsKIH0KIAotc3RhdGljIGludCB1aGNpX3Nob3dfdXJicChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmJfcHJpdiAqdXJicCwgY2hhciAqYnVmLCBpbnQgbGVuKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQljaGFyICpvdXQgPSBidWY7Ci0JaW50IGNvdW50ID0gMDsKLQotCWlmIChsZW4gPCAyMDApCi0JCXJldHVybiAwOwotCi0Jb3V0ICs9IHNwcmludGYob3V0LCAidXJiX3ByaXYgWyVwXSAiLCB1cmJwKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJ1cmIgWyVwXSAiLCB1cmJwLT51cmIpOwotCW91dCArPSBzcHJpbnRmKG91dCwgInFoIFslcF0gIiwgdXJicC0+cWgpOwotCW91dCArPSBzcHJpbnRmKG91dCwgIkRldj0lZCAiLCB1c2JfcGlwZWRldmljZSh1cmJwLT51cmItPnBpcGUpKTsKLQlvdXQgKz0gc3ByaW50ZihvdXQsICJFUD0leCglcykgIiwgdXNiX3BpcGVlbmRwb2ludCh1cmJwLT51cmItPnBpcGUpLCAodXNiX3BpcGVpbih1cmJwLT51cmItPnBpcGUpID8gIklOIiA6ICJPVVQiKSk7Ci0KLQlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmJwLT51cmItPnBpcGUpKSB7Ci0JY2FzZSBQSVBFX0lTT0NIUk9OT1VTOiBvdXQgKz0gc3ByaW50ZihvdXQsICJJU08gIik7IGJyZWFrOwotCWNhc2UgUElQRV9JTlRFUlJVUFQ6IG91dCArPSBzcHJpbnRmKG91dCwgIklOVCAiKTsgYnJlYWs7Ci0JY2FzZSBQSVBFX0JVTEs6IG91dCArPSBzcHJpbnRmKG91dCwgIkJMSyAiKTsgYnJlYWs7Ci0JY2FzZSBQSVBFX0NPTlRST0w6IG91dCArPSBzcHJpbnRmKG91dCwgIkNUTCAiKTsgYnJlYWs7Ci0JfQotCi0Jb3V0ICs9IHNwcmludGYob3V0LCAiJXMiLCAodXJicC0+ZnNiciA/ICJGU0JSICIgOiAiIikpOwotCW91dCArPSBzcHJpbnRmKG91dCwgIiVzIiwgKHVyYnAtPmZzYnJfdGltZW91dCA/ICJGU0JSX1RPICIgOiAiIikpOwotCi0JaWYgKHVyYnAtPnVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiU3RhdHVzPSVkICIsIHVyYnAtPnVyYi0+c3RhdHVzKTsKLQkvL291dCArPSBzcHJpbnRmKG91dCwgIkZTQlJ0aW1lPSVseCAiLHVyYnAtPmZzYnJ0aW1lKTsKLQotCWNvdW50ID0gMDsKLQlsaXN0X2Zvcl9lYWNoKHRtcCwgJnVyYnAtPnRkX2xpc3QpCi0JCWNvdW50Kys7Ci0Jb3V0ICs9IHNwcmludGYob3V0LCAiVERzPSVkICIsY291bnQpOwotCi0JaWYgKHVyYnAtPnF1ZXVlZCkKLQkJb3V0ICs9IHNwcmludGYob3V0LCAicXVldWVkXG4iKTsKLQllbHNlIHsKLQkJY291bnQgPSAwOwotCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJnVyYnAtPnF1ZXVlX2xpc3QpCi0JCQljb3VudCsrOwotCQlvdXQgKz0gc3ByaW50ZihvdXQsICJxdWV1ZWQgVVJCcz0lZFxuIiwgY291bnQpOwotCX0KLQotCXJldHVybiBvdXQgLSBidWY7Ci19Ci0KLXN0YXRpYyBpbnQgdWhjaV9zaG93X2xpc3RzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgY2hhciAqYnVmLCBpbnQgbGVuKQotewotCWNoYXIgKm91dCA9IGJ1ZjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCAqdG1wOwotCWludCBjb3VudDsKLQotCW91dCArPSBzcHJpbnRmKG91dCwgIk1haW4gbGlzdCBVUkJzOiIpOwotCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT51cmJfbGlzdCkpCi0JCW91dCArPSBzcHJpbnRmKG91dCwgIiBFbXB0eVxuIik7Ci0JZWxzZSB7Ci0JCW91dCArPSBzcHJpbnRmKG91dCwgIlxuIik7Ci0JCWNvdW50ID0gMDsKLQkJaGVhZCA9ICZ1aGNpLT51cmJfbGlzdDsKLQkJdG1wID0gaGVhZC0+bmV4dDsKLQkJd2hpbGUgKHRtcCAhPSBoZWFkKSB7Ci0JCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVyYl9wcml2LCB1cmJfbGlzdCk7Ci0KLQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgJWQ6ICIsICsrY291bnQpOwotCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVoY2ksIHVyYnAsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOwotCQkJdG1wID0gdG1wLT5uZXh0OwotCQl9Ci0JfQotCi0Jb3V0ICs9IHNwcmludGYob3V0LCAiUmVtb3ZlIGxpc3QgVVJCczoiKTsKLQlpZiAobGlzdF9lbXB0eSgmdWhjaS0+dXJiX3JlbW92ZV9saXN0KSkKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiIEVtcHR5XG4iKTsKLQllbHNlIHsKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKLQkJY291bnQgPSAwOwotCQloZWFkID0gJnVoY2ktPnVyYl9yZW1vdmVfbGlzdDsKLQkJdG1wID0gaGVhZC0+bmV4dDsKLQkJd2hpbGUgKHRtcCAhPSBoZWFkKSB7Ci0JCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVyYl9wcml2LCB1cmJfbGlzdCk7Ci0KLQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgJWQ6ICIsICsrY291bnQpOwotCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVoY2ksIHVyYnAsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOwotCQkJdG1wID0gdG1wLT5uZXh0OwotCQl9Ci0JfQotCi0Jb3V0ICs9IHNwcmludGYob3V0LCAiQ29tcGxldGUgbGlzdCBVUkJzOiIpOwotCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT5jb21wbGV0ZV9saXN0KSkKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiIEVtcHR5XG4iKTsKLQllbHNlIHsKLQkJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKLQkJY291bnQgPSAwOwotCQloZWFkID0gJnVoY2ktPmNvbXBsZXRlX2xpc3Q7Ci0JCXRtcCA9IGhlYWQtPm5leHQ7Ci0JCXdoaWxlICh0bXAgIT0gaGVhZCkgewotCQkJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1cmJfcHJpdiwgdXJiX2xpc3QpOwotCi0JCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICVkOiAiLCArK2NvdW50KTsKLQkJCW91dCArPSB1aGNpX3Nob3dfdXJicCh1aGNpLCB1cmJwLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpKTsKLQkJCXRtcCA9IHRtcC0+bmV4dDsKLQkJfQotCX0KLQotCXJldHVybiBvdXQgLSBidWY7Ci19Ci0KIHN0YXRpYyBpbnQgdWhjaV9zcHJpbnRfc2NoZWR1bGUoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBjaGFyICpidWYsIGludCBsZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAljaGFyICpvdXQgPSBidWY7CiAJaW50IGksIGo7CiAJc3RydWN0IHVoY2lfcWggKnFoOwogCXN0cnVjdCB1aGNpX3RkICp0ZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICpoZWFkOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKLQogCW91dCArPSB1aGNpX3Nob3dfcm9vdF9odWJfc3RhdGUodWhjaSwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CiAJb3V0ICs9IHNwcmludGYob3V0LCAiSEMgc3RhdHVzXG4iKTsKIAlvdXQgKz0gdWhjaV9zaG93X3N0YXR1cyh1aGNpLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpKTsKKwlpZiAoZGVidWcgPD0gMSkKKwkJcmV0dXJuIG91dCAtIGJ1ZjsKIAogCW91dCArPSBzcHJpbnRmKG91dCwgIkZyYW1lIExpc3RcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTUZSQU1FUzsgKytpKSB7Ci0JCWludCBzaG93biA9IDA7CiAJCXRkID0gdWhjaS0+ZnJhbWVfY3B1W2ldOwogCQlpZiAoIXRkKQogCQkJY29udGludWU7CiAKLQkJaWYgKHRkLT5kbWFfaGFuZGxlICE9IChkbWFfYWRkcl90KXVoY2ktPmZyYW1lW2ldKSB7Ci0JCQlzaG93X2ZyYW1lX251bSgpOworCQlvdXQgKz0gc3ByaW50ZihvdXQsICItIEZyYW1lICVkXG4iLCBpKTsgXAorCQlpZiAodGQtPmRtYV9oYW5kbGUgIT0gKGRtYV9hZGRyX3QpdWhjaS0+ZnJhbWVbaV0pCiAJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICAgZnJhbWUgbGlzdCBkb2VzIG5vdCBtYXRjaCB0ZC0+ZG1hX2hhbmRsZSFcbiIpOwotCQl9Ci0JCXNob3dfZnJhbWVfbnVtKCk7CiAKIAkJaGVhZCA9ICZ0ZC0+ZmxfbGlzdDsKIAkJdG1wID0gaGVhZDsKQEAgLTQ2NywxNCArMzU0LDExIEBACiAJb3V0ICs9IHNwcmludGYob3V0LCAiU2tlbGV0b24gUUhzXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUg7ICsraSkgewotCQlpbnQgc2hvd24gPSAwOworCQlpbnQgY250ID0gMDsKIAogCQlxaCA9IHVoY2ktPnNrZWxxaFtpXTsKLQotCQlpZiAoZGVidWcgPiAxKSB7Ci0JCQlzaG93X3FoX25hbWUoKTsKLQkJCW91dCArPSB1aGNpX3Nob3dfcWgocWgsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDQpOwotCQl9CisJCW91dCArPSBzcHJpbnRmKG91dCwgIi0gJXNcbiIsIHFoX25hbWVzW2ldKTsgXAorCQlvdXQgKz0gdWhjaV9zaG93X3FoKHFoLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpLCA0KTsKIAogCQkvKiBMYXN0IFFIIGlzIHRoZSBUZXJtaW5hdGluZyBRSCwgaXQncyBkaWZmZXJlbnQgKi8KIAkJaWYgKGkgPT0gVUhDSV9OVU1fU0tFTFFIIC0gMSkgewpAQCAtNDg3LDUzICszNzEsMzcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaiA9IChpIDwgNykgPyA3IDogaSsxOwkJLyogTmV4dCBza2VsZXRvbiAqLwotCQlpZiAobGlzdF9lbXB0eSgmcWgtPmxpc3QpKSB7Ci0JCQlpZiAoaSA8IFVIQ0lfTlVNX1NLRUxRSCAtIDEpIHsKLQkJCQlpZiAocWgtPmxpbmsgIT0KLQkJCQkgICAgKGNwdV90b19sZTMyKHVoY2ktPnNrZWxxaFtqXS0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSCkpIHsKLQkJCQkJc2hvd19xaF9uYW1lKCk7Ci0JCQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBza2VsZXRvbiBRSCBub3QgbGlua2VkIHRvIG5leHQgc2tlbGV0b24gUUghXG4iKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc2hvd19xaF9uYW1lKCk7Ci0KLQkJaGVhZCA9ICZxaC0+bGlzdDsKKwkJaiA9IChpIDwgOSkgPyA5IDogaSsxOwkJLyogTmV4dCBza2VsZXRvbiAqLworCQloZWFkID0gJnFoLT5ub2RlOwogCQl0bXAgPSBoZWFkLT5uZXh0OwogCiAJCXdoaWxlICh0bXAgIT0gaGVhZCkgewotCQkJcWggPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfcWgsIGxpc3QpOwotCisJCQlxaCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdWhjaV9xaCwgbm9kZSk7CiAJCQl0bXAgPSB0bXAtPm5leHQ7Ci0KLQkJCW91dCArPSB1aGNpX3Nob3dfcWgocWgsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIDQpOworCQkJaWYgKCsrY250IDw9IDEwKQorCQkJCW91dCArPSB1aGNpX3Nob3dfcWgocWgsIG91dCwKKwkJCQkJCWxlbiAtIChvdXQgLSBidWYpLCA0KTsKIAkJfQorCQlpZiAoKGNudCAtPSAxMCkgPiAwKQorCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAgIFNraXBwZWQgJWQgUUhzXG4iLCBjbnQpOwogCi0JCWlmIChpIDwgVUhDSV9OVU1fU0tFTFFIIC0gMSkgeworCQlpZiAoaSA+IDEgJiYgaSA8IFVIQ0lfTlVNX1NLRUxRSCAtIDEpIHsKIAkJCWlmIChxaC0+bGluayAhPQogCQkJICAgIChjcHVfdG9fbGUzMih1aGNpLT5za2VscWhbal0tPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUgpKQogCQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBsYXN0IFFIIG5vdCBsaW5rZWQgdG8gbmV4dCBza2VsZXRvbiFcbiIpOwogCQl9CiAJfQogCi0JaWYgKGRlYnVnID4gMikKLQkJb3V0ICs9IHVoY2lfc2hvd19saXN0cyh1aGNpLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKLQogCXJldHVybiBvdXQgLSBidWY7CiB9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwogI2RlZmluZSBNQVhfT1VUUFVUCSg2NCAqIDEwMjQpCiAKIHN0cnVjdCB1aGNpX2RlYnVnIHsKIAlpbnQgc2l6ZTsKIAljaGFyICpkYXRhOwotCXN0cnVjdCB1aGNpX2hjZCAqdWhjaTsKIH07CiAKIHN0YXRpYyBpbnQgdWhjaV9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtNTQxLDYgKzQwOSw3IEBACiAJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKIAlzdHJ1Y3QgdWhjaV9kZWJ1ZyAqdXA7CiAJaW50IHJldCA9IC1FTk9NRU07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2tfa2VybmVsKCk7CiAJdXAgPSBrbWFsbG9jKHNpemVvZigqdXApLCBHRlBfS0VSTkVMKTsKQEAgLTU1Myw3ICs0MjIsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JdXAtPnNpemUgPSB1aGNpX3NwcmludF9zY2hlZHVsZSh1aGNpLCB1cC0+ZGF0YSwgTUFYX09VVFBVVCk7CisJdXAtPnNpemUgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisJaWYgKHVoY2ktPmlzX2luaXRpYWxpemVkKQorCQl1cC0+c2l6ZSA9IHVoY2lfc3ByaW50X3NjaGVkdWxlKHVoY2ksIHVwLT5kYXRhLCBNQVhfT1VUUFVUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSB1cDsKIApAQCAtNjA0LDE1ICs0NzcsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorI3VuZGVmIHVoY2lfZGVidWdfb3BlcmF0aW9ucwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWhjaV9kZWJ1Z19vcGVyYXRpb25zID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5vcGVuID0JCXVoY2lfZGVidWdfb3BlbiwKIAkubGxzZWVrID0JdWhjaV9kZWJ1Z19sc2VlaywKIAkucmVhZCA9CQl1aGNpX2RlYnVnX3JlYWQsCiAJLnJlbGVhc2UgPQl1aGNpX2RlYnVnX3JlbGVhc2UsCiB9OwogCi0jZWxzZQkvKiBDT05GSUdfREVCVUdfRlMgKi8KKyNlbmRpZgkvKiBDT05GSUdfREVCVUdfRlMgKi8KIAotI2RlZmluZSB1aGNpX2RlYnVnX29wZXJhdGlvbnMgKCogKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKikgTlVMTCkKKyNlbHNlCS8qIERFQlVHICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscHJpbnRrKGNoYXIgKmJ1ZikKK3t9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVoY2lfc2hvd19xaChzdHJ1Y3QgdWhjaV9xaCAqcWgsIGNoYXIgKmJ1ZiwKKwkJaW50IGxlbiwgaW50IHNwYWNlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB1aGNpX3NwcmludF9zY2hlZHVsZShzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksCisJCWNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gMDsKK30KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggZGZlMTIxZC4uNGVkYjgzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtNTQsNyArNTQsNyBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYzLjAiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkxpbnVzICdGcm9kbyBSYWJiaXQnIFRvcnZhbGRzLCBKb2hhbm5lcyBFcmRmZWx0LCBcCiBSYW5keSBEdW5sYXAsIEdlb3JnIEFjaGVyLCBEZXRpIEZsaWVnbCwgVGhvbWFzIFNhaWxlciwgUm9tYW4gV2Vpc3NnYWVyYmVyLCBcCiBBbGFuIFN0ZXJuIgpAQCAtNjgsMTIgKzY4LDE2IEBACiAgKiBkZWJ1ZyA9IDMsIHNob3cgYWxsIFREcyBpbiBVUkJzIHdoZW4gZHVtcGluZwogICovCiAjaWZkZWYgREVCVUcKKyNkZWZpbmUgREVCVUdfQ09ORklHVVJFRAkxCiBzdGF0aWMgaW50IGRlYnVnID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKLSNlbmRpZgogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCIpOworCisjZWxzZQorI2RlZmluZSBERUJVR19DT05GSUdVUkVECTAKKyNkZWZpbmUgZGVidWcJCQkwCisjZW5kaWYKKwogc3RhdGljIGNoYXIgKmVycmJ1ZjsKICNkZWZpbmUgRVJSQlVGX0xFTiAgICAoMzIgKiAxMDI0KQogCkBAIC0zMzgsNiArMzQyLDEyIEBACiAJCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwKIAkJCQkJImhvc3QgY29udHJvbGxlciBoYWx0ZWQsICIKIAkJCQkJInZlcnkgYmFkIVxuIik7CisJCQkJaWYgKGRlYnVnID4gMSAmJiBlcnJidWYpIHsKKwkJCQkJLyogUHJpbnQgdGhlIHNjaGVkdWxlIGZvciBkZWJ1Z2dpbmcgKi8KKwkJCQkJdWhjaV9zcHJpbnRfc2NoZWR1bGUodWhjaSwKKwkJCQkJCQllcnJidWYsIEVSUkJVRl9MRU4pOworCQkJCQlscHJpbnRrKGVycmJ1Zik7CisJCQkJfQogCQkJCWhjX2RpZWQodWhjaSk7CiAKIAkJCQkvKiBGb3JjZSBhIGNhbGxiYWNrIGluIGNhc2UgdGhlcmUgYXJlCkBAIC0zNzYsNiArMzg2LDE0IEBACiB7CiAJaW50IGk7CiAKKwlpZiAoREVCVUdfQ09ORklHVVJFRCkgeworCQlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwkJdWhjaS0+aXNfaW5pdGlhbGl6ZWQgPSAwOworCQlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOworCisJCWRlYnVnZnNfcmVtb3ZlKHVoY2ktPmRlbnRyeSk7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IFVIQ0lfTlVNX1NLRUxRSDsgaSsrKQogCQl1aGNpX2ZyZWVfcWgodWhjaSwgdWhjaS0+c2tlbHFoW2ldKTsKIApAQCAtMzkwLDggKzQwOCw2IEBACiAJZG1hX2ZyZWVfY29oZXJlbnQodWhjaV9kZXYodWhjaSksCiAJCQlVSENJX05VTUZSQU1FUyAqIHNpemVvZigqdWhjaS0+ZnJhbWUpLAogCQkJdWhjaS0+ZnJhbWUsIHVoY2ktPmZyYW1lX2RtYV9oYW5kbGUpOwotCi0JZGVidWdmc19yZW1vdmUodWhjaS0+ZGVudHJ5KTsKIH0KIAogc3RhdGljIGludCB1aGNpX3Jlc2V0KHN0cnVjdCB1c2JfaGNkICpoY2QpCkBAIC00NzQsMzMgKzQ5MCwyOSBAQAogCiAJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKIAotCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoaGNkLT5zZWxmLmJ1c19uYW1lLAotCQkJU19JRlJFR3xTX0lSVUdPfFNfSVdVU1IsIHVoY2lfZGVidWdmc19yb290LCB1aGNpLAotCQkJJnVoY2lfZGVidWdfb3BlcmF0aW9ucyk7Ci0JaWYgKCFkZW50cnkpIHsKLQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwKLQkJCQkiY291bGRuJ3QgY3JlYXRlIHVoY2kgZGVidWdmcyBlbnRyeVxuIik7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2NyZWF0ZV9kZWJ1Z19lbnRyeTsKLQl9Ci0JdWhjaS0+ZGVudHJ5ID0gZGVudHJ5OwotCiAJdWhjaS0+ZnNiciA9IDA7CiAJdWhjaS0+ZnNicnRpbWVvdXQgPSAwOwogCiAJc3Bpbl9sb2NrX2luaXQoJnVoY2ktPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZ1aGNpLT5xaF9yZW1vdmVfbGlzdCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmdWhjaS0+dGRfcmVtb3ZlX2xpc3QpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnVoY2ktPnVyYl9yZW1vdmVfbGlzdCk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmdWhjaS0+dXJiX2xpc3QpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnVoY2ktPmNvbXBsZXRlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ1aGNpLT5pZGxlX3FoX2xpc3QpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdWhjaS0+d2FpdHFoKTsKIAorCWlmIChERUJVR19DT05GSUdVUkVEKSB7CisJCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoaGNkLT5zZWxmLmJ1c19uYW1lLAorCQkJCVNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLCB1aGNpX2RlYnVnZnNfcm9vdCwKKwkJCQl1aGNpLCAmdWhjaV9kZWJ1Z19vcGVyYXRpb25zKTsKKwkJaWYgKCFkZW50cnkpIHsKKwkJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJjb3VsZG4ndCBjcmVhdGUgdWhjaSAiCisJCQkJCSJkZWJ1Z2ZzIGVudHJ5XG4iKTsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9jcmVhdGVfZGVidWdfZW50cnk7CisJCX0KKwkJdWhjaS0+ZGVudHJ5ID0gZGVudHJ5OworCX0KKwogCXVoY2ktPmZyYW1lID0gZG1hX2FsbG9jX2NvaGVyZW50KHVoY2lfZGV2KHVoY2kpLAogCQkJVUhDSV9OVU1GUkFNRVMgKiBzaXplb2YoKnVoY2ktPmZyYW1lKSwKIAkJCSZ1aGNpLT5mcmFtZV9kbWFfaGFuZGxlLCAwKTsKQEAgLTU0MCw3ICs1NTIsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUg7IGkrKykgewotCQl1aGNpLT5za2VscWhbaV0gPSB1aGNpX2FsbG9jX3FoKHVoY2kpOworCQl1aGNpLT5za2VscWhbaV0gPSB1aGNpX2FsbG9jX3FoKHVoY2ksIE5VTEwsIE5VTEwpOwogCQlpZiAoIXVoY2ktPnNrZWxxaFtpXSkgewogCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgInVuYWJsZSB0byBhbGxvY2F0ZSBRSFxuIik7CiAJCQlnb3RvIGVycl9hbGxvY19za2VscWg7CkBAIC01NTcsMTMgKzU2OSwxNyBAQAogCQkJdWhjaS0+c2tlbF9pbnQxNl9xaC0+bGluayA9CiAJCQl1aGNpLT5za2VsX2ludDhfcWgtPmxpbmsgPQogCQkJdWhjaS0+c2tlbF9pbnQ0X3FoLT5saW5rID0KLQkJCXVoY2ktPnNrZWxfaW50Ml9xaC0+bGluayA9Ci0JCQljcHVfdG9fbGUzMih1aGNpLT5za2VsX2ludDFfcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7Ci0JdWhjaS0+c2tlbF9pbnQxX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9sc19jb250cm9sX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCQkJdWhjaS0+c2tlbF9pbnQyX3FoLT5saW5rID0gVUhDSV9QVFJfUUggfAorCQkJY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9pbnQxX3FoLT5kbWFfaGFuZGxlKTsKIAotCXVoY2ktPnNrZWxfbHNfY29udHJvbF9xaC0+bGluayA9IGNwdV90b19sZTMyKHVoY2ktPnNrZWxfZnNfY29udHJvbF9xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKLQl1aGNpLT5za2VsX2ZzX2NvbnRyb2xfcWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1aGNpLT5za2VsX2J1bGtfcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7Ci0JdWhjaS0+c2tlbF9idWxrX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF90ZXJtX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCXVoY2ktPnNrZWxfaW50MV9xaC0+bGluayA9IFVIQ0lfUFRSX1FIIHwKKwkJCWNwdV90b19sZTMyKHVoY2ktPnNrZWxfbHNfY29udHJvbF9xaC0+ZG1hX2hhbmRsZSk7CisJdWhjaS0+c2tlbF9sc19jb250cm9sX3FoLT5saW5rID0gVUhDSV9QVFJfUUggfAorCQkJY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9mc19jb250cm9sX3FoLT5kbWFfaGFuZGxlKTsKKwl1aGNpLT5za2VsX2ZzX2NvbnRyb2xfcWgtPmxpbmsgPSBVSENJX1BUUl9RSCB8CisJCQljcHVfdG9fbGUzMih1aGNpLT5za2VsX2J1bGtfcWgtPmRtYV9oYW5kbGUpOworCXVoY2ktPnNrZWxfYnVsa19xaC0+bGluayA9IFVIQ0lfUFRSX1FIIHwKKwkJCWNwdV90b19sZTMyKHVoY2ktPnNrZWxfdGVybV9xaC0+ZG1hX2hhbmRsZSk7CiAKIAkvKiBUaGlzIGR1bW15IFREIGlzIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIEludGVsIFBJSVggY29udHJvbGxlcnMgKi8KIAl1aGNpX2ZpbGxfdGQodWhjaS0+dGVybV90ZCwgMCwgdWhjaV9leHBsZW4oMCkgfApAQCAtNTg5LDE1ICs2MDUsMTUgQEAKIAogCQkvKgogCQkgKiBmZnMgKEZpbmQgRmlyc3QgYml0IFNldCkgZG9lcyBleGFjdGx5IHdoYXQgd2UgbmVlZDoKLQkJICogMSwzLDUsLi4uICA9PiBmZnMgPSAwID0+IHVzZSBza2VsX2ludDJfcWggPSBza2VscWhbNl0sCi0JCSAqIDIsNiwxMCwuLi4gPT4gZmZzID0gMSA9PiB1c2Ugc2tlbF9pbnQ0X3FoID0gc2tlbHFoWzVdLCBldGMuCi0JCSAqIGZmcyA+IDYgPT4gbm90IG9uIGFueSBoaWdoLXBlcmlvZCBxdWV1ZSwgc28gdXNlCi0JCSAqCXNrZWxfaW50MV9xaCA9IHNrZWxxaFs3XS4KKwkJICogMSwzLDUsLi4uICA9PiBmZnMgPSAwID0+IHVzZSBza2VsX2ludDJfcWggPSBza2VscWhbOF0sCisJCSAqIDIsNiwxMCwuLi4gPT4gZmZzID0gMSA9PiB1c2Ugc2tlbF9pbnQ0X3FoID0gc2tlbHFoWzddLCBldGMuCisJCSAqIGZmcyA+PSA3ID0+IG5vdCBvbiBhbnkgaGlnaC1wZXJpb2QgcXVldWUsIHNvIHVzZQorCQkgKglza2VsX2ludDFfcWggPSBza2VscWhbOV0uCiAJCSAqIEFkZCBVSENJX05VTUZSQU1FUyB0byBpbnN1cmUgYXQgbGVhc3Qgb25lIGJpdCBpcyBzZXQuCiAJCSAqLwotCQlpcnEgPSA2IC0gKGludCkgX19mZnMoaSArIFVIQ0lfTlVNRlJBTUVTKTsKLQkJaWYgKGlycSA8IDApCi0JCQlpcnEgPSA3OworCQlpcnEgPSA4IC0gKGludCkgX19mZnMoaSArIFVIQ0lfTlVNRlJBTUVTKTsKKwkJaWYgKGlycSA8PSAxKQorCQkJaXJxID0gOTsKIAogCQkvKiBPbmx5IHBsYWNlIHdlIGRvbid0IHVzZSB0aGUgZnJhbWUgbGlzdCByb3V0aW5lcyAqLwogCQl1aGNpLT5mcmFtZVtpXSA9IFVIQ0lfUFRSX1FIIHwKQEAgLTYxMSw2ICs2MjcsNyBAQAogCW1iKCk7CiAKIAljb25maWd1cmVfaGModWhjaSk7CisJdWhjaS0+aXNfaW5pdGlhbGl6ZWQgPSAxOwogCXN0YXJ0X3JoKHVoY2kpOwogCXJldHVybiAwOwogCkBAIC03NjcsMTMgKzc4NCwzMCBAQAogfQogI2VuZGlmCiAKLS8qIFdhaXQgdW50aWwgYWxsIHRoZSBVUkJzIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlL2VuZHBvaW50IGFyZSBnb25lICovCisvKiBXYWl0IHVudGlsIGEgcGFydGljdWxhciBkZXZpY2UvZW5kcG9pbnQncyBRSCBpcyBpZGxlLCBhbmQgZnJlZSBpdCAqLwogc3RhdGljIHZvaWQgdWhjaV9oY2RfZW5kcG9pbnRfZGlzYWJsZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLAotCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQorCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCkKIHsKIAlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCXN0cnVjdCB1aGNpX3FoICpxaDsKIAotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh1aGNpLT53YWl0cWgsIGxpc3RfZW1wdHkoJmVwLT51cmJfbGlzdCkpOworCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOworCXFoID0gKHN0cnVjdCB1aGNpX3FoICopIGhlcC0+aGNwcml2OworCWlmIChxaCA9PSBOVUxMKQorCQlnb3RvIGRvbmU7CisKKwl3aGlsZSAocWgtPnN0YXRlICE9IFFIX1NUQVRFX0lETEUpIHsKKwkJKyt1aGNpLT5udW1fd2FpdGluZzsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHVoY2ktPndhaXRxaCwKKwkJCQlxaC0+c3RhdGUgPT0gUUhfU1RBVEVfSURMRSk7CisJCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOworCQktLXVoY2ktPm51bV93YWl0aW5nOworCX0KKworCXVoY2lfZnJlZV9xaCh1aGNpLCBxaCk7Citkb25lOgorCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdWhjaV9oY2RfZ2V0X2ZyYW1lX251bWJlcihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQpAQCAtODU3LDE2ICs4OTEsMTUgQEAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGRlYnVnKSB7CisJaWYgKERFQlVHX0NPTkZJR1VSRUQpIHsKIAkJZXJyYnVmID0ga21hbGxvYyhFUlJCVUZfTEVOLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFlcnJidWYpCiAJCQlnb3RvIGVycmJ1Zl9mYWlsZWQ7CisJCXVoY2lfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJ1aGNpIiwgTlVMTCk7CisJCWlmICghdWhjaV9kZWJ1Z2ZzX3Jvb3QpCisJCQlnb3RvIGRlYnVnX2ZhaWxlZDsKIAl9CiAKLQl1aGNpX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigidWhjaSIsIE5VTEwpOwotCWlmICghdWhjaV9kZWJ1Z2ZzX3Jvb3QpCi0JCWdvdG8gZGVidWdfZmFpbGVkOwotCiAJdWhjaV91cF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidWhjaV91cmJfcHJpdiIsCiAJCXNpemVvZihzdHJ1Y3QgdXJiX3ByaXYpLCAwLCAwLCBOVUxMLCBOVUxMKTsKIAlpZiAoIXVoY2lfdXBfY2FjaGVwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCmluZGV4IDhiNGI4ODcuLjRhNjljN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKQEAgLTI4LDggKzI4LDkgQEAKICNkZWZpbmUgICBVU0JTVFNfVVNCSU5UCQkweDAwMDEJLyogSW50ZXJydXB0IGR1ZSB0byBJT0MgKi8KICNkZWZpbmUgICBVU0JTVFNfRVJST1IJCTB4MDAwMgkvKiBJbnRlcnJ1cHQgZHVlIHRvIGVycm9yICovCiAjZGVmaW5lICAgVVNCU1RTX1JECQkweDAwMDQJLyogUmVzdW1lIERldGVjdCAqLwotI2RlZmluZSAgIFVTQlNUU19IU0UJCTB4MDAwOAkvKiBIb3N0IFN5c3RlbSBFcnJvciAtIGJhc2ljYWxseSBQQ0kgcHJvYmxlbXMgKi8KLSNkZWZpbmUgICBVU0JTVFNfSENQRQkJMHgwMDEwCS8qIEhvc3QgQ29udHJvbGxlciBQcm9jZXNzIEVycm9yIC0gdGhlIHNjcmlwdHMgd2VyZSBidWdneSAqLworI2RlZmluZSAgIFVTQlNUU19IU0UJCTB4MDAwOAkvKiBIb3N0IFN5c3RlbSBFcnJvcjogUENJIHByb2JsZW1zICovCisjZGVmaW5lICAgVVNCU1RTX0hDUEUJCTB4MDAxMAkvKiBIb3N0IENvbnRyb2xsZXIgUHJvY2VzcyBFcnJvcjoKKwkJCQkJICogdGhlIHNjaGVkdWxlIGlzIGJ1Z2d5ICovCiAjZGVmaW5lICAgVVNCU1RTX0hDSAkJMHgwMDIwCS8qIEhDIEhhbHRlZCAqLwogCiAvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCkBAIC00Nyw3ICs0OCw4IEBACiAvKiBVU0IgcG9ydCBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFVTQlBPUlRTQzEJMTYKICNkZWZpbmUgVVNCUE9SVFNDMgkxOAotI2RlZmluZSAgIFVTQlBPUlRTQ19DQ1MJCTB4MDAwMQkvKiBDdXJyZW50IENvbm5lY3QgU3RhdHVzICgiZGV2aWNlIHByZXNlbnQiKSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19DQ1MJCTB4MDAwMQkvKiBDdXJyZW50IENvbm5lY3QgU3RhdHVzCisJCQkJCSAqICgiZGV2aWNlIHByZXNlbnQiKSAqLwogI2RlZmluZSAgIFVTQlBPUlRTQ19DU0MJCTB4MDAwMgkvKiBDb25uZWN0IFN0YXR1cyBDaGFuZ2UgKi8KICNkZWZpbmUgICBVU0JQT1JUU0NfUEUJCTB4MDAwNAkvKiBQb3J0IEVuYWJsZSAqLwogI2RlZmluZSAgIFVTQlBPUlRTQ19QRUMJCTB4MDAwOAkvKiBQb3J0IEVuYWJsZSBDaGFuZ2UgKi8KQEAgLTcxLDE1ICs3MywxNiBAQAogI2RlZmluZSAgIFVTQkxFR1NVUF9SV0MJCTB4OGYwMAkvKiB0aGUgUi9XQyBiaXRzICovCiAjZGVmaW5lICAgVVNCTEVHU1VQX1JPCQkweDUwNDAJLyogUi9PIGFuZCByZXNlcnZlZCBiaXRzICovCiAKLSNkZWZpbmUgVUhDSV9QVFJfQklUUwkJY3B1X3RvX2xlMzIoMHgwMDBGKQotI2RlZmluZSBVSENJX1BUUl9URVJNCQljcHVfdG9fbGUzMigweDAwMDEpCi0jZGVmaW5lIFVIQ0lfUFRSX1FICQljcHVfdG9fbGUzMigweDAwMDIpCi0jZGVmaW5lIFVIQ0lfUFRSX0RFUFRICQljcHVfdG9fbGUzMigweDAwMDQpCi0jZGVmaW5lIFVIQ0lfUFRSX0JSRUFEVEgJY3B1X3RvX2xlMzIoMHgwMDAwKQorI2RlZmluZSBVSENJX1BUUl9CSVRTCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwRikKKyNkZWZpbmUgVUhDSV9QVFJfVEVSTQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDEpCisjZGVmaW5lIFVIQ0lfUFRSX1FICQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMikKKyNkZWZpbmUgVUhDSV9QVFJfREVQVEgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDA0KQorI2RlZmluZSBVSENJX1BUUl9CUkVBRFRICV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwKQogCiAjZGVmaW5lIFVIQ0lfTlVNRlJBTUVTCQkxMDI0CS8qIGluIHRoZSBmcmFtZSBsaXN0IFthcnJheV0gKi8KICNkZWZpbmUgVUhDSV9NQVhfU09GX05VTUJFUgkyMDQ3CS8qIGluIGFuIFNPRiBwYWNrZXQgKi8KLSNkZWZpbmUgQ0FOX1NDSEVEVUxFX0ZSQU1FUwkxMDAwCS8qIGhvdyBmYXIgZnV0dXJlIGZyYW1lcyBjYW4gYmUgc2NoZWR1bGVkICovCisjZGVmaW5lIENBTl9TQ0hFRFVMRV9GUkFNRVMJMTAwMAkvKiBob3cgZmFyIGluIHRoZSBmdXR1cmUgZnJhbWVzCisJCQkJCSAqIGNhbiBiZSBzY2hlZHVsZWQgKi8KIAogCiAvKgpAQCAtODcsMzggKzkwLDU5IEBACiAgKi8KIAogLyoKLSAqIE9uZSByb2xlIG9mIGEgUUggaXMgdG8gaG9sZCBhIHF1ZXVlIG9mIFREcyBmb3Igc29tZSBlbmRwb2ludC4gIEVhY2ggUUggaXMKLSAqIHVzZWQgd2l0aCBvbmUgVVJCLCBhbmQgcWgtPmVsZW1lbnQgKHVwZGF0ZWQgYnkgdGhlIEhDKSBpcyBlaXRoZXI6Ci0gKiAgIC0gdGhlIG5leHQgdW5wcm9jZXNzZWQgVEQgZm9yIHRoZSBVUkIsIG9yCi0gKiAgIC0gVUhDSV9QVFJfVEVSTSAod2hlbiB0aGVyZSdzIG5vIG1vcmUgdHJhZmZpYyBmb3IgdGhpcyBlbmRwb2ludCksIG9yCi0gKiAgIC0gdGhlIFFIIGZvciB0aGUgbmV4dCBVUkIgcXVldWVkIHRvIHRoZSBzYW1lIGVuZHBvaW50LgorICogT25lIHJvbGUgb2YgYSBRSCBpcyB0byBob2xkIGEgcXVldWUgb2YgVERzIGZvciBzb21lIGVuZHBvaW50LiAgT25lIFFIIGdvZXMKKyAqIHdpdGggZWFjaCBlbmRwb2ludCwgYW5kIHFoLT5lbGVtZW50ICh1cGRhdGVkIGJ5IHRoZSBIQykgaXMgZWl0aGVyOgorICogICAtIHRoZSBuZXh0IHVucHJvY2Vzc2VkIFREIGluIHRoZSBlbmRwb2ludCdzIHF1ZXVlLCBvcgorICogICAtIFVIQ0lfUFRSX1RFUk0gKHdoZW4gdGhlcmUncyBubyBtb3JlIHRyYWZmaWMgZm9yIHRoaXMgZW5kcG9pbnQpLgogICoKICAqIFRoZSBvdGhlciByb2xlIG9mIGEgUUggaXMgdG8gc2VydmUgYXMgYSAic2tlbGV0b24iIGZyYW1lbGlzdCBlbnRyeSwgc28gd2UKICAqIGNhbiBlYXNpbHkgc3BsaWNlIGEgUUggZm9yIHNvbWUgZW5kcG9pbnQgaW50byB0aGUgc2NoZWR1bGUgYXQgdGhlIHJpZ2h0CiAgKiBwbGFjZS4gIFRoZW4gcWgtPmVsZW1lbnQgaXMgVUhDSV9QVFJfVEVSTS4KICAqCi0gKiBJbiB0aGUgZnJhbWUgbGlzdCwgcWgtPmxpbmsgbWFpbnRhaW5zIGEgbGlzdCBvZiBRSHMgc2VlbiBieSB0aGUgSEM6CisgKiBJbiB0aGUgc2NoZWR1bGUsIHFoLT5saW5rIG1haW50YWlucyBhIGxpc3Qgb2YgUUhzIHNlZW4gYnkgdGhlIEhDOgogICogICAgIHNrZWwxIC0tPiBlcDEtcWggLS0+IGVwMi1xaCAtLT4gLi4uIC0tPiBza2VsMiAtLT4gLi4uCisgKgorICogcWgtPm5vZGUgaXMgdGhlIHNvZnR3YXJlIGVxdWl2YWxlbnQgb2YgcWgtPmxpbmsuICBUaGUgZGlmZmVyZW5jZXMKKyAqIGFyZSB0aGF0IHRoZSBzb2Z0d2FyZSBsaXN0IGlzIGRvdWJseS1saW5rZWQgYW5kIFFIcyBpbiB0aGUgVU5MSU5LSU5HCisgKiBzdGF0ZSBhcmUgb24gdGhlIHNvZnR3YXJlIGxpc3QgYnV0IG5vdCB0aGUgaGFyZHdhcmUgc2NoZWR1bGUuCisgKgorICogRm9yIGJvb2trZWVwaW5nIHB1cnBvc2VzIHdlIG1haW50YWluIFFIcyBldmVuIGZvciBJc29jaHJvbm91cyBlbmRwb2ludHMsCisgKiBidXQgdGhleSBuZXZlciBnZXQgYWRkZWQgdG8gdGhlIGhhcmR3YXJlIHNjaGVkdWxlLgogICovCisjZGVmaW5lIFFIX1NUQVRFX0lETEUJCTEJLyogUUggaXMgbm90IGJlaW5nIHVzZWQgKi8KKyNkZWZpbmUgUUhfU1RBVEVfVU5MSU5LSU5HCTIJLyogUUggaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQorCQkJCQkgKiBzY2hlZHVsZSBidXQgdGhlIGhhcmR3YXJlIG1heQorCQkJCQkgKiBzdGlsbCBiZSB1c2luZyBpdCAqLworI2RlZmluZSBRSF9TVEFURV9BQ1RJVkUJCTMJLyogUUggaXMgb24gdGhlIHNjaGVkdWxlICovCisKIHN0cnVjdCB1aGNpX3FoIHsKIAkvKiBIYXJkd2FyZSBmaWVsZHMgKi8KLQlfX2xlMzIgbGluazsJCQkvKiBOZXh0IHF1ZXVlICovCi0JX19sZTMyIGVsZW1lbnQ7CQkJLyogUXVldWUgZWxlbWVudCBwb2ludGVyICovCisJX19sZTMyIGxpbms7CQkJLyogTmV4dCBRSCBpbiB0aGUgc2NoZWR1bGUgKi8KKwlfX2xlMzIgZWxlbWVudDsJCQkvKiBRdWV1ZSBlbGVtZW50IChURCkgcG9pbnRlciAqLwogCiAJLyogU29mdHdhcmUgZmllbGRzICovCiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwogCi0Jc3RydWN0IHVyYl9wcml2ICp1cmJwOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsJCS8qIE5vZGUgaW4gdGhlIGxpc3Qgb2YgUUhzICovCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXA7CS8qIEVuZHBvaW50IGluZm9ybWF0aW9uICovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsJCS8qIFF1ZXVlIG9mIHVyYnBzIGZvciB0aGlzIFFIICovCisJc3RydWN0IHVoY2lfcWggKnNrZWw7CQkvKiBTa2VsZXRvbiBmb3IgdGhpcyBRSCAqLworCXN0cnVjdCB1aGNpX3RkICpkdW1teV90ZDsJLyogRHVtbXkgVEQgdG8gZW5kIHRoZSBxdWV1ZSAqLwogCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgcmVtb3ZlX2xpc3Q7CisJdW5zaWduZWQgaW50IHVubGlua19mcmFtZTsJLyogV2hlbiB0aGUgUUggd2FzIHVubGlua2VkICovCisJaW50IHN0YXRlOwkJCS8qIFFIX1NUQVRFX3h4eDsgc2VlIGFib3ZlICovCisKKwl1bnNpZ25lZCBpbnQgaW5pdGlhbF90b2dnbGU6MTsJLyogRW5kcG9pbnQncyBjdXJyZW50IHRvZ2dsZSB2YWx1ZSAqLworCXVuc2lnbmVkIGludCBuZWVkc19maXh1cDoxOwkvKiBNdXN0IGZpeCB0aGUgVEQgdG9nZ2xlIHZhbHVlcyAqLworCXVuc2lnbmVkIGludCBpc19zdG9wcGVkOjE7CS8qIFF1ZXVlIHdhcyBzdG9wcGVkIGJ5IGFuIGVycm9yICovCiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7CiAKIC8qCiAgKiBXZSBuZWVkIGEgc3BlY2lhbCBhY2Nlc3NvciBmb3IgdGhlIGVsZW1lbnQgcG9pbnRlciBiZWNhdXNlIGl0IGlzCiAgKiBzdWJqZWN0IHRvIGFzeW5jaHJvbm91cyB1cGRhdGVzIGJ5IHRoZSBjb250cm9sbGVyLgogICovCi1zdGF0aWMgX19sZTMyIGlubGluZSBxaF9lbGVtZW50KHN0cnVjdCB1aGNpX3FoICpxaCkgeworc3RhdGljIGlubGluZSBfX2xlMzIgcWhfZWxlbWVudChzdHJ1Y3QgdWhjaV9xaCAqcWgpIHsKIAlfX2xlMzIgZWxlbWVudCA9IHFoLT5lbGVtZW50OwogCiAJYmFycmllcigpOwpAQCAtMTQ5LDExICsxNzMsMTMgQEAKICNkZWZpbmUgVERfQ1RSTF9BQ1RMRU5fTUFTSwkweDdGRgkvKiBhY3R1YWwgbGVuZ3RoLCBlbmNvZGVkIGFzIG4gLSAxICovCiAKICNkZWZpbmUgVERfQ1RSTF9BTllfRVJST1IJKFREX0NUUkxfU1RBTExFRCB8IFREX0NUUkxfREJVRkVSUiB8IFwKLQkJCQkgVERfQ1RSTF9CQUJCTEUgfCBURF9DVFJMX0NSQ1RJTUUgfCBURF9DVFJMX0JJVFNUVUZGKQorCQkJCSBURF9DVFJMX0JBQkJMRSB8IFREX0NUUkxfQ1JDVElNRSB8IFwKKwkJCQkgVERfQ1RSTF9CSVRTVFVGRikKIAogI2RlZmluZSB1aGNpX21heGVycihlcnIpCQkoKGVycikgPDwgVERfQ1RSTF9DX0VSUl9TSElGVCkKICNkZWZpbmUgdWhjaV9zdGF0dXNfYml0cyhjdHJsX3N0cykJKChjdHJsX3N0cykgJiAweEY2MDAwMCkKLSNkZWZpbmUgdWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxfc3RzKQkoKChjdHJsX3N0cykgKyAxKSAmIFREX0NUUkxfQUNUTEVOX01BU0spIC8qIDEtYmFzZWQgKi8KKyNkZWZpbmUgdWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxfc3RzKQkoKChjdHJsX3N0cykgKyAxKSAmIFwKKwkJCVREX0NUUkxfQUNUTEVOX01BU0spCS8qIDEtYmFzZWQgKi8KIAogLyoKICAqIGZvciBURCA8aW5mbz46IChhLmsuYS4gVG9rZW4pCkBAIC0xNjMsNyArMTg5LDcgQEAKICNkZWZpbmUgVERfVE9LRU5fVE9HR0xFX1NISUZUCTE5CiAjZGVmaW5lIFREX1RPS0VOX1RPR0dMRQkJKDEgPDwgMTkpCiAjZGVmaW5lIFREX1RPS0VOX0VYUExFTl9TSElGVAkyMQotI2RlZmluZSBURF9UT0tFTl9FWFBMRU5fTUFTSwkweDdGRgkJLyogZXhwZWN0ZWQgbGVuZ3RoLCBlbmNvZGVkIGFzIG4gLSAxICovCisjZGVmaW5lIFREX1RPS0VOX0VYUExFTl9NQVNLCTB4N0ZGCS8qIGV4cGVjdGVkIGxlbmd0aCwgZW5jb2RlZCBhcyBuLTEgKi8KICNkZWZpbmUgVERfVE9LRU5fUElEX01BU0sJMHhGRgogCiAjZGVmaW5lIHVoY2lfZXhwbGVuKGxlbikJKCgoKGxlbikgLSAxKSAmIFREX1RPS0VOX0VYUExFTl9NQVNLKSA8PCBcCkBAIC0xODcsNyArMjEzLDcgQEAKICAqIHN3IHNwYWNlIGFmdGVyIHRoZSBURCBlbnRyeS4KICAqCiAgKiB0ZC0+bGluayBwb2ludHMgdG8gZWl0aGVyIGFub3RoZXIgVEQgKG5vdCBuZWNlc3NhcmlseSBmb3IgdGhlIHNhbWUgdXJiIG9yCi0gKiBldmVuIHRoZSBzYW1lIGVuZHBvaW50KSwgb3Igbm90aGluZyAoUFRSX1RFUk0pLCBvciBhIFFIIChmb3IgcXVldWVkIHVyYnMpLgorICogZXZlbiB0aGUgc2FtZSBlbmRwb2ludCksIG9yIG5vdGhpbmcgKFBUUl9URVJNKSwgb3IgYSBRSC4KICAqLwogc3RydWN0IHVoY2lfdGQgewogCS8qIEhhcmR3YXJlIGZpZWxkcyAqLwpAQCAtMjEwLDcgKzIzNiw3IEBACiAgKiBXZSBuZWVkIGEgc3BlY2lhbCBhY2Nlc3NvciBmb3IgdGhlIGNvbnRyb2wvc3RhdHVzIHdvcmQgYmVjYXVzZSBpdCBpcwogICogc3ViamVjdCB0byBhc3luY2hyb25vdXMgdXBkYXRlcyBieSB0aGUgY29udHJvbGxlci4KICAqLwotc3RhdGljIHUzMiBpbmxpbmUgdGRfc3RhdHVzKHN0cnVjdCB1aGNpX3RkICp0ZCkgeworc3RhdGljIGlubGluZSB1MzIgdGRfc3RhdHVzKHN0cnVjdCB1aGNpX3RkICp0ZCkgewogCV9fbGUzMiBzdGF0dXMgPSB0ZC0+c3RhdHVzOwogCiAJYmFycmllcigpOwpAQCAtMjIzLDE3ICsyNDksMTQgQEAKICAqLwogCiAvKgotICogVGhlIFVIQ0kgZHJpdmVyIHBsYWNlcyBJbnRlcnJ1cHQsIENvbnRyb2wgYW5kIEJ1bGsgaW50byBRSHMgYm90aAotICogdG8gZ3JvdXAgdG9nZXRoZXIgVERzIGZvciBvbmUgdHJhbnNmZXIsIGFuZCBhbHNvIHRvIGZhY2lsaXRhdGUgcXVldWluZwotICogb2YgVVJCcy4gVG8gbWFrZSBpdCBlYXN5IHRvIGluc2VydCBlbnRyaWVzIGludG8gdGhlIHNjaGVkdWxlLCB3ZSBoYXZlCi0gKiBhIHNrZWxldG9uIG9mIFFIcyBmb3IgZWFjaCBwcmVkZWZpbmVkIEludGVycnVwdCBsYXRlbmN5LCBsb3ctc3BlZWQKLSAqIGNvbnRyb2wsIGZ1bGwtc3BlZWQgY29udHJvbCBhbmQgdGVybWluYXRpbmcgUUggKHNlZSBleHBsYW5hdGlvbiBmb3IKLSAqIHRoZSB0ZXJtaW5hdGluZyBRSCBiZWxvdykuCisgKiBUaGUgVUhDSSBkcml2ZXIgdXNlcyBRSHMgd2l0aCBJbnRlcnJ1cHQsIENvbnRyb2wgYW5kIEJ1bGsgVVJCcyBmb3IKKyAqIGF1dG9tYXRpYyBxdWV1aW5nLiBUbyBtYWtlIGl0IGVhc3kgdG8gaW5zZXJ0IGVudHJpZXMgaW50byB0aGUgc2NoZWR1bGUsCisgKiB3ZSBoYXZlIGEgc2tlbGV0b24gb2YgUUhzIGZvciBlYWNoIHByZWRlZmluZWQgSW50ZXJydXB0IGxhdGVuY3ksCisgKiBsb3ctc3BlZWQgY29udHJvbCwgZnVsbC1zcGVlZCBjb250cm9sLCBidWxrLCBhbmQgdGVybWluYXRpbmcgUUgKKyAqIChzZWUgZXhwbGFuYXRpb24gZm9yIHRoZSB0ZXJtaW5hdGluZyBRSCBiZWxvdykuCiAgKgogICogV2hlbiB3ZSB3YW50IHRvIGFkZCBhIG5ldyBRSCwgd2UgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgZm9yIHRoZQotICogc2tlbGV0b24gUUguCi0gKgotICogRm9yIGluc3RhbmNlLCB0aGUgcXVldWUgY2FuIGxvb2sgbGlrZSB0aGlzOgorICogc2tlbGV0b24gUUguICBGb3IgaW5zdGFuY2UsIHRoZSBzY2hlZHVsZSBsaXN0IGNhbiBsb29rIGxpa2UgdGhpczoKICAqCiAgKiBza2VsIGludDEyOCBRSAogICogZGV2IDEgaW50ZXJydXB0IFFICkBAIC0yNTYsMjYgKzI3OSwzMSBAQAogICogLSBUbyBsb29wIGJhY2sgdG8gdGhlIGZ1bGwtc3BlZWQgY29udHJvbCBxdWV1ZSBmb3IgZnVsbC1zcGVlZCBiYW5kd2lkdGgKICAqICAgcmVjbGFtYXRpb24uCiAgKgotICogSXNvY2hyb25vdXMgdHJhbnNmZXJzIGFyZSBzdG9yZWQgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc2tlbGV0b24KLSAqIHNjaGVkdWxlIGFuZCBkb24ndCB1c2UgUUhzLiBXaGlsZSB0aGUgVUhDSSBzcGVjIGRvZXNuJ3QgZm9yYmlkIHRoZQotICogdXNlIG9mIFFIcyBmb3IgSXNvY2hyb25vdXMsIGl0IGRvZXNuJ3QgdXNlIHRoZW0gZWl0aGVyLiBBbmQgdGhlIHNwZWMKLSAqIHNheXMgdGhhdCBxdWV1ZXMgbmV2ZXIgYWR2YW5jZSBvbiBhbiBlcnJvciBjb21wbGV0aW9uIHN0YXR1cywgd2hpY2gKLSAqIG1ha2VzIHRoZW0gdG90YWxseSB1bnN1aXRhYmxlIGZvciBJc29jaHJvbm91cyB0cmFuc2ZlcnMuCisgKiBUaGVyZSdzIGEgc3BlY2lhbCBza2VsZXRvbiBRSCBmb3IgSXNvY2hyb25vdXMgUUhzLiAgSXQgbmV2ZXIgYXBwZWFycworICogb24gdGhlIHNjaGVkdWxlLCBhbmQgSXNvY2hyb25vdXMgVERzIGdvIG9uIHRoZSBzY2hlZHVsZSBiZWZvcmUgdGhlCisgKiB0aGUgc2tlbGV0b24gUUhzLiAgVGhlIGhhcmR3YXJlIGFjY2Vzc2VzIHRoZW0gZGlyZWN0bHkgcmF0aGVyIHRoYW4KKyAqIHRocm91Z2ggdGhlaXIgUUgsIHdoaWNoIGlzIHVzZWQgb25seSBmb3IgYm9va2tlZXBpbmcgcHVycG9zZXMuCisgKiBXaGlsZSB0aGUgVUhDSSBzcGVjIGRvZXNuJ3QgZm9yYmlkIHRoZSB1c2Ugb2YgUUhzIGZvciBJc29jaHJvbm91cywKKyAqIGl0IGRvZXNuJ3QgdXNlIHRoZW0gZWl0aGVyLiAgQW5kIHRoZSBzcGVjIHNheXMgdGhhdCBxdWV1ZXMgbmV2ZXIKKyAqIGFkdmFuY2Ugb24gYW4gZXJyb3IgY29tcGxldGlvbiBzdGF0dXMsIHdoaWNoIG1ha2VzIHRoZW0gdG90YWxseQorICogdW5zdWl0YWJsZSBmb3IgSXNvY2hyb25vdXMgdHJhbnNmZXJzLgogICovCiAKLSNkZWZpbmUgVUhDSV9OVU1fU0tFTFFICQkxMgotI2RlZmluZSBza2VsX2ludDEyOF9xaAkJc2tlbHFoWzBdCi0jZGVmaW5lIHNrZWxfaW50NjRfcWgJCXNrZWxxaFsxXQotI2RlZmluZSBza2VsX2ludDMyX3FoCQlza2VscWhbMl0KLSNkZWZpbmUgc2tlbF9pbnQxNl9xaAkJc2tlbHFoWzNdCi0jZGVmaW5lIHNrZWxfaW50OF9xaAkJc2tlbHFoWzRdCi0jZGVmaW5lIHNrZWxfaW50NF9xaAkJc2tlbHFoWzVdCi0jZGVmaW5lIHNrZWxfaW50Ml9xaAkJc2tlbHFoWzZdCi0jZGVmaW5lIHNrZWxfaW50MV9xaAkJc2tlbHFoWzddCi0jZGVmaW5lIHNrZWxfbHNfY29udHJvbF9xaAlza2VscWhbOF0KLSNkZWZpbmUgc2tlbF9mc19jb250cm9sX3FoCXNrZWxxaFs5XQotI2RlZmluZSBza2VsX2J1bGtfcWgJCXNrZWxxaFsxMF0KLSNkZWZpbmUgc2tlbF90ZXJtX3FoCQlza2VscWhbMTFdCisjZGVmaW5lIFVIQ0lfTlVNX1NLRUxRSAkJMTQKKyNkZWZpbmUgc2tlbF91bmxpbmtfcWgJCXNrZWxxaFswXQorI2RlZmluZSBza2VsX2lzb19xaAkJc2tlbHFoWzFdCisjZGVmaW5lIHNrZWxfaW50MTI4X3FoCQlza2VscWhbMl0KKyNkZWZpbmUgc2tlbF9pbnQ2NF9xaAkJc2tlbHFoWzNdCisjZGVmaW5lIHNrZWxfaW50MzJfcWgJCXNrZWxxaFs0XQorI2RlZmluZSBza2VsX2ludDE2X3FoCQlza2VscWhbNV0KKyNkZWZpbmUgc2tlbF9pbnQ4X3FoCQlza2VscWhbNl0KKyNkZWZpbmUgc2tlbF9pbnQ0X3FoCQlza2VscWhbN10KKyNkZWZpbmUgc2tlbF9pbnQyX3FoCQlza2VscWhbOF0KKyNkZWZpbmUgc2tlbF9pbnQxX3FoCQlza2VscWhbOV0KKyNkZWZpbmUgc2tlbF9sc19jb250cm9sX3FoCXNrZWxxaFsxMF0KKyNkZWZpbmUgc2tlbF9mc19jb250cm9sX3FoCXNrZWxxaFsxMV0KKyNkZWZpbmUgc2tlbF9idWxrX3FoCQlza2VscWhbMTJdCisjZGVmaW5lIHNrZWxfdGVybV9xaAkJc2tlbHFoWzEzXQogCiAvKgogICogU2VhcmNoIHRyZWUgZm9yIGRldGVybWluaW5nIHdoZXJlIDxpbnRlcnZhbD4gZml0cyBpbiB0aGUgc2tlbHFoW10KQEAgLTI5MywyMSArMzIxLDIxIEBACiAJaWYgKGludGVydmFsIDwgMTYpIHsKIAkJaWYgKGludGVydmFsIDwgNCkgewogCQkJaWYgKGludGVydmFsIDwgMikKLQkJCQlyZXR1cm4gNzsJLyogaW50MSBmb3IgMC0xIG1zICovCi0JCQlyZXR1cm4gNjsJCS8qIGludDIgZm9yIDItMyBtcyAqLworCQkJCXJldHVybiA5OwkvKiBpbnQxIGZvciAwLTEgbXMgKi8KKwkJCXJldHVybiA4OwkJLyogaW50MiBmb3IgMi0zIG1zICovCiAJCX0KIAkJaWYgKGludGVydmFsIDwgOCkKLQkJCXJldHVybiA1OwkJLyogaW50NCBmb3IgNC03IG1zICovCi0JCXJldHVybiA0OwkJCS8qIGludDggZm9yIDgtMTUgbXMgKi8KKwkJCXJldHVybiA3OwkJLyogaW50NCBmb3IgNC03IG1zICovCisJCXJldHVybiA2OwkJCS8qIGludDggZm9yIDgtMTUgbXMgKi8KIAl9CiAJaWYgKGludGVydmFsIDwgNjQpIHsKIAkJaWYgKGludGVydmFsIDwgMzIpCi0JCQlyZXR1cm4gMzsJCS8qIGludDE2IGZvciAxNi0zMSBtcyAqLwotCQlyZXR1cm4gMjsJCQkvKiBpbnQzMiBmb3IgMzItNjMgbXMgKi8KKwkJCXJldHVybiA1OwkJLyogaW50MTYgZm9yIDE2LTMxIG1zICovCisJCXJldHVybiA0OwkJCS8qIGludDMyIGZvciAzMi02MyBtcyAqLwogCX0KIAlpZiAoaW50ZXJ2YWwgPCAxMjgpCi0JCXJldHVybiAxOwkJCS8qIGludDY0IGZvciA2NC0xMjcgbXMgKi8KLQlyZXR1cm4gMDsJCQkJLyogaW50MTI4IGZvciAxMjgtMjU1IG1zIChNYXguKSAqLworCQlyZXR1cm4gMzsJCQkvKiBpbnQ2NCBmb3IgNjQtMTI3IG1zICovCisJcmV0dXJuIDI7CQkJCS8qIGludDEyOCBmb3IgMTI4LTI1NSBtcyAoTWF4LikgKi8KIH0KIAogCkBAIC0zNjAsMTUgKzM4OCwxNiBAQAogCiAJc3RydWN0IHVoY2lfdGQgKnRlcm1fdGQ7CS8qIFRlcm1pbmF0aW5nIFRELCBzZWUgVUhDSSBidWcgKi8KIAlzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoW1VIQ0lfTlVNX1NLRUxRSF07CS8qIFNrZWxldG9uIFFIcyAqLworCXN0cnVjdCB1aGNpX3FoICpuZXh0X3FoOwkvKiBOZXh0IFFIIHRvIHNjYW4gKi8KIAogCXNwaW5sb2NrX3QgbG9jazsKIAotCWRtYV9hZGRyX3QgZnJhbWVfZG1hX2hhbmRsZTsJCS8qIEhhcmR3YXJlIGZyYW1lIGxpc3QgKi8KKwlkbWFfYWRkcl90IGZyYW1lX2RtYV9oYW5kbGU7CS8qIEhhcmR3YXJlIGZyYW1lIGxpc3QgKi8KIAlfX2xlMzIgKmZyYW1lOwotCXZvaWQgKipmcmFtZV9jcHU7CQkJLyogQ1BVJ3MgZnJhbWUgbGlzdCAqLworCXZvaWQgKipmcmFtZV9jcHU7CQkvKiBDUFUncyBmcmFtZSBsaXN0ICovCiAKLQlpbnQgZnNicjsJCQkJLyogRnVsbC1zcGVlZCBiYW5kd2lkdGggcmVjbGFtYXRpb24gKi8KLQl1bnNpZ25lZCBsb25nIGZzYnJ0aW1lb3V0OwkJLyogRlNCUiBkZWxheSAqLworCWludCBmc2JyOwkJCS8qIEZ1bGwtc3BlZWQgYmFuZHdpZHRoIHJlY2xhbWF0aW9uICovCisJdW5zaWduZWQgbG9uZyBmc2JydGltZW91dDsJLyogRlNCUiBkZWxheSAqLwogCiAJZW51bSB1aGNpX3JoX3N0YXRlIHJoX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgYXV0b19zdG9wX3RpbWU7CQkvKiBXaGVuIHRvIEFVVE9fU1RPUCAqLwpAQCAtMzgyLDYgKzQxMSw3IEBACiAJdW5zaWduZWQgaW50IGhjX2luYWNjZXNzaWJsZToxOwkJLyogSEMgaXMgc3VzcGVuZGVkIG9yIGRlYWQgKi8KIAl1bnNpZ25lZCBpbnQgd29ya2luZ19SRDoxOwkJLyogU3VzcGVuZGVkIHJvb3QgaHViIGRvZXNuJ3QKIAkJCQkJCSAgIG5lZWQgdG8gYmUgcG9sbGVkICovCisJdW5zaWduZWQgaW50IGlzX2luaXRpYWxpemVkOjE7CQkvKiBEYXRhIHN0cnVjdHVyZSBpcyB1c2FibGUgKi8KIAogCS8qIFN1cHBvcnQgZm9yIHBvcnQgc3VzcGVuZC9yZXN1bWUvcmVzZXQgKi8KIAl1bnNpZ25lZCBsb25nIHBvcnRfY19zdXNwZW5kOwkJLyogQml0LWFycmF5cyBvZiBwb3J0cyAqLwpAQCAtMzg5LDI3ICs0MTksMTYgQEAKIAl1bnNpZ25lZCBsb25nIHJlc3VtaW5nX3BvcnRzOwogCXVuc2lnbmVkIGxvbmcgcG9ydHNfdGltZW91dDsJCS8qIFRpbWUgdG8gc3RvcCBzaWduYWxsaW5nICovCiAKLQkvKiBNYWluIGxpc3Qgb2YgVVJCcyBjdXJyZW50bHkgY29udHJvbGxlZCBieSB0aGlzIEhDICovCi0Jc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsKLQotCS8qIExpc3Qgb2YgUUhzIHRoYXQgYXJlIGRvbmUsIGJ1dCB3YWl0aW5nIHRvIGJlIHVubGlua2VkIChyYWNlKSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgcWhfcmVtb3ZlX2xpc3Q7Ci0JdW5zaWduZWQgaW50IHFoX3JlbW92ZV9hZ2U7CQkvKiBBZ2UgaW4gZnJhbWVzICovCi0KIAkvKiBMaXN0IG9mIFREcyB0aGF0IGFyZSBkb25lLCBidXQgd2FpdGluZyB0byBiZSBmcmVlZCAocmFjZSkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHRkX3JlbW92ZV9saXN0OwogCXVuc2lnbmVkIGludCB0ZF9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLwogCi0JLyogTGlzdCBvZiBhc3luY2hyb25vdXNseSB1bmxpbmtlZCBVUkJzICovCi0Jc3RydWN0IGxpc3RfaGVhZCB1cmJfcmVtb3ZlX2xpc3Q7Ci0JdW5zaWduZWQgaW50IHVyYl9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLwotCi0JLyogTGlzdCBvZiBVUkJzIGF3YWl0aW5nIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGNvbXBsZXRlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBpZGxlX3FoX2xpc3Q7CQkvKiBXaGVyZSB0aGUgaWRsZSBRSHMgbGl2ZSAqLwogCiAJaW50IHJoX251bXBvcnRzOwkJCS8qIE51bWJlciBvZiByb290LWh1YiBwb3J0cyAqLwogCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHFoOwkJLyogZW5kcG9pbnRfZGlzYWJsZSB3YWl0ZXJzICovCisJaW50IG51bV93YWl0aW5nOwkJCS8qIE51bWJlciBvZiB3YWl0ZXJzICovCiB9OwogCiAvKiBDb252ZXJ0IGJldHdlZW4gYSB1c2JfaGNkIHBvaW50ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHVoY2lfaGNkICovCkBAIC00MjksNyArNDQ4LDcgQEAKICAqCVByaXZhdGUgcGVyLVVSQiBkYXRhCiAgKi8KIHN0cnVjdCB1cmJfcHJpdiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CQkvKiBOb2RlIGluIHRoZSBRSCdzIHVyYnAgbGlzdCAqLwogCiAJc3RydWN0IHVyYiAqdXJiOwogCkBAIC00MzcsMTUgKzQ1Niw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCB0ZF9saXN0OwogCiAJdW5zaWduZWQgZnNiciA6IDE7CQkvKiBVUkIgdHVybmVkIG9uIEZTQlIgKi8KLQl1bnNpZ25lZCBmc2JyX3RpbWVvdXQgOiAxOwkvKiBVUkIgdGltZWQgb3V0IG9uIEZTQlIgKi8KLQl1bnNpZ25lZCBxdWV1ZWQgOiAxOwkJLyogUUggd2FzIHF1ZXVlZCAobm90IGxpbmtlZCBpbikgKi8KLQl1bnNpZ25lZCBzaG9ydF9jb250cm9sX3BhY2tldCA6IDE7CS8qIElmIHdlIGdldCBhIHNob3J0IHBhY2tldCBkdXJpbmcgKi8KLQkJCQkJCS8qICBhIGNvbnRyb2wgdHJhbnNmZXIsIHJldHJpZ2dlciAqLwotCQkJCQkJLyogIHRoZSBzdGF0dXMgcGhhc2UgKi8KLQotCXVuc2lnbmVkIGxvbmcgZnNicnRpbWU7CQkvKiBJbiBqaWZmaWVzICovCi0KLQlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2xpc3Q7CisJdW5zaWduZWQgc2hvcnRfdHJhbnNmZXIgOiAxOwkvKiBVUkIgZ290IGEgc2hvcnQgdHJhbnNmZXIsIG5vCisJCQkJCSAqIG5lZWQgdG8gcmVzY2FuICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwppbmRleCBhNzFlNDhhLi4xNTI5NzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCkBAIC05OSw2ICs5OSwyMSBAQAogCX0KIH0KIAorLyogV2FpdCBmb3IgdGhlIFVIQ0kgY29udHJvbGxlciBpbiBIUCdzIGlMTzIgc2VydmVyIG1hbmFnZW1lbnQgY2hpcC4KKyAqIEl0IGNhbiB0YWtlIHVwIHRvIDI1MCB1cyB0byBmaW5pc2ggYSByZXNldCBhbmQgc2V0IHRoZSBDU0MgYml0LgorICovCitzdGF0aWMgdm9pZCB3YWl0X2Zvcl9IUCh1bnNpZ25lZCBsb25nIHBvcnRfYWRkcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDEwOyBpIDwgMjUwOyBpICs9IDEwKSB7CisJCWlmIChpbncocG9ydF9hZGRyKSAmIFVTQlBPUlRTQ19DU0MpCisJCQlyZXR1cm47CisJCXVkZWxheSgxMCk7CisJfQorCS8qIExvZyBhIHdhcm5pbmc/ICovCit9CisKIHN0YXRpYyB2b2lkIHVoY2lfY2hlY2tfcG9ydHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQogewogCXVuc2lnbmVkIGludCBwb3J0OwpAQCAtMTEzLDYgKzEyOCwxMiBAQAogCQkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUFIpOwogCQkJCXVkZWxheSgxMCk7CiAKKwkJCQkvKiBIUCdzIHNlcnZlciBtYW5hZ2VtZW50IGNoaXAgcmVxdWlyZXMKKwkJCQkgKiBhIGxvbmdlciBkZWxheS4gKi8KKwkJCQlpZiAodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSktPnZlbmRvciA9PQorCQkJCQkJUENJX1ZFTkRPUl9JRF9IUCkKKwkJCQkJd2FpdF9mb3JfSFAocG9ydF9hZGRyKTsKKwogCQkJCS8qIElmIHRoZSBwb3J0IHdhcyBlbmFibGVkIGJlZm9yZSwgdHVybmluZwogCQkJCSAqIHJlc2V0IG9uIGNhdXNlZCBhIHBvcnQgZW5hYmxlIGNoYW5nZS4KIAkJCQkgKiBUdXJuaW5nIHJlc2V0IG9mZiBjYXVzZXMgYSBwb3J0IGNvbm5lY3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCmluZGV4IDc4MjM5ODAuLmEwNmQ4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpAQCAtMTMsMTMgKzEzLDkgQEAKICAqIChDKSBDb3B5cmlnaHQgMjAwMCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIChwb3J0IG9mIG5ldyBQQ0kgaW50ZXJmYWNlCiAgKiAgICAgICAgICAgICAgIHN1cHBvcnQgZnJvbSB1c2Itb2hjaS5jIGJ5IEFkYW0gUmljaHRlciwgYWRhbUB5Z2dkcmFzaWwuY29tKS4KICAqIChDKSBDb3B5cmlnaHQgMTk5OSBHcmVnb3J5IFAuIFNtaXRoIChmcm9tIHVzYi1vaGNpLmMpCi0gKiAoQykgQ29weXJpZ2h0IDIwMDQgQWxhbiBTdGVybiwgc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdQorICogKEMpIENvcHlyaWdodCAyMDA0LTIwMDUgQWxhbiBTdGVybiwgc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdQogICovCiAKLXN0YXRpYyBpbnQgdWhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgdWhjaV91bmxpbmtfZ2VuZXJpYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgdm9pZCB1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSk7Ci1zdGF0aWMgdm9pZCB1aGNpX2ZyZWVfcGVuZGluZ19xaHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKTsKIHN0YXRpYyB2b2lkIHVoY2lfZnJlZV9wZW5kaW5nX3RkcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOwogCiAvKgpAQCAtMzAsNyArMjYsNyBAQAogICogZ2FtZXMgd2l0aCB0aGUgRlNCUiBjb2RlIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIGNvcnJlY3Qgb3JkZXIgaW4gYWxsCiAgKiB0aGUgY2FzZXMuIEkgZG9uJ3QgdGhpbmsgaXQncyB3b3J0aCB0aGUgZWZmb3J0CiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX3NldF9uZXh0X2ludGVycnVwdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCitzdGF0aWMgdm9pZCB1aGNpX3NldF9uZXh0X2ludGVycnVwdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCiB7CiAJaWYgKHVoY2ktPmlzX3N0b3BwZWQpCiAJCW1vZF90aW1lcigmdWhjaV90b19oY2QodWhjaSktPnJoX3RpbWVyLCBqaWZmaWVzKTsKQEAgLTQyLDEyICszOCw2IEBACiAJdWhjaS0+dGVybV90ZC0+c3RhdHVzICY9IH5jcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX21vdmV0b19jb21wbGV0ZShzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIAotCQkJCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnApCi17Ci0JbGlzdF9tb3ZlX3RhaWwoJnVyYnAtPnVyYl9saXN0LCAmdWhjaS0+Y29tcGxldGVfbGlzdCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgdWhjaV90ZCAqdWhjaV9hbGxvY190ZChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCiB7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwpAQCAtNTgsMTAgKzQ4LDYgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAl0ZC0+ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7Ci0KLQl0ZC0+bGluayA9IFVIQ0lfUFRSX1RFUk07Ci0JdGQtPmJ1ZmZlciA9IDA7Ci0KIAl0ZC0+ZnJhbWUgPSAtMTsKIAogCUlOSVRfTElTVF9IRUFEKCZ0ZC0+bGlzdCk7CkBAIC03MSw2ICs1NywxOCBAQAogCXJldHVybiB0ZDsKIH0KIAorc3RhdGljIHZvaWQgdWhjaV9mcmVlX3RkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfdGQgKnRkKQoreworCWlmICghbGlzdF9lbXB0eSgmdGQtPmxpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGxpc3QhXG4iLCB0ZCk7CisJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+cmVtb3ZlX2xpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIHJlbW92ZV9saXN0IVxuIiwgdGQpOworCWlmICghbGlzdF9lbXB0eSgmdGQtPmZsX2xpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInRkICVwIHN0aWxsIGluIGZsX2xpc3QhXG4iLCB0ZCk7CisKKwlkbWFfcG9vbF9mcmVlKHVoY2ktPnRkX3Bvb2wsIHRkLCB0ZC0+ZG1hX2hhbmRsZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX2ZpbGxfdGQoc3RydWN0IHVoY2lfdGQgKnRkLCB1MzIgc3RhdHVzLAogCQl1MzIgdG9rZW4sIHUzMiBidWZmZXIpCiB7CkBAIC04Miw3ICs4MCw4IEBACiAvKgogICogV2UgaW5zZXJ0IElzb2Nocm9ub3VzIFVSQnMgZGlyZWN0bHkgaW50byB0aGUgZnJhbWUgbGlzdCBhdCB0aGUgYmVnaW5uaW5nCiAgKi8KLXN0YXRpYyB2b2lkIHVoY2lfaW5zZXJ0X3RkX2ZyYW1lX2xpc3Qoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV90ZCAqdGQsIHVuc2lnbmVkIGZyYW1lbnVtKQorc3RhdGljIGlubGluZSB2b2lkIHVoY2lfaW5zZXJ0X3RkX2luX2ZyYW1lX2xpc3Qoc3RydWN0IHVoY2lfaGNkICp1aGNpLAorCQlzdHJ1Y3QgdWhjaV90ZCAqdGQsIHVuc2lnbmVkIGZyYW1lbnVtKQogewogCWZyYW1lbnVtICY9IChVSENJX05VTUZSQU1FUyAtIDEpOwogCkBAIC0xMDgsNyArMTA3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX3JlbW92ZV90ZF9mcmFtZV9saXN0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwKK3N0YXRpYyBpbmxpbmUgdm9pZCB1aGNpX3JlbW92ZV90ZF9mcm9tX2ZyYW1lX2xpc3Qoc3RydWN0IHVoY2lfaGNkICp1aGNpLAogCQlzdHJ1Y3QgdWhjaV90ZCAqdGQpCiB7CiAJLyogSWYgaXQncyBub3QgaW5zZXJ0ZWQsIGRvbid0IHJlbW92ZSBpdCAqLwpAQCAtMTM5LDQ4ICsxMzgsMjEgQEAKIAl0ZC0+ZnJhbWUgPSAtMTsKIH0KIAotc3RhdGljIHZvaWQgdW5saW5rX2lzb2Nocm9ub3VzX3RkcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKKy8qCisgKiBSZW1vdmUgYWxsIHRoZSBURHMgZm9yIGFuIElzb2Nocm9ub3VzIFVSQiBmcm9tIHRoZSBmcmFtZSBsaXN0CisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfdW5saW5rX2lzb2Nocm9ub3VzX3RkcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopIHVyYi0+aGNwcml2OwogCXN0cnVjdCB1aGNpX3RkICp0ZDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KQotCQl1aGNpX3JlbW92ZV90ZF9mcmFtZV9saXN0KHVoY2ksIHRkKTsKKwkJdWhjaV9yZW1vdmVfdGRfZnJvbV9mcmFtZV9saXN0KHVoY2ksIHRkKTsKIAl3bWIoKTsKIH0KIAotLyoKLSAqIEluc2VydHMgYSB0ZCBsaXN0IGludG8gcWguCi0gKi8KLXN0YXRpYyB2b2lkIHVoY2lfaW5zZXJ0X3Rkc19pbl9xaChzdHJ1Y3QgdWhjaV9xaCAqcWgsIHN0cnVjdCB1cmIgKnVyYiwgX19sZTMyIGJyZWFkdGgpCi17Ci0Jc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OwotCXN0cnVjdCB1aGNpX3RkICp0ZDsKLQlfX2xlMzIgKnBsaW5rOwotCi0JLyogT3JkZXJpbmcgaXNuJ3QgaW1wb3J0YW50IGhlcmUgeWV0IHNpbmNlIHRoZSBRSCBoYXNuJ3QgYmVlbiAqLwotCS8qIGluc2VydGVkIGludG8gdGhlIHNjaGVkdWxlIHlldCAqLwotCXBsaW5rID0gJnFoLT5lbGVtZW50OwotCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7Ci0JCSpwbGluayA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKSB8IGJyZWFkdGg7Ci0JCXBsaW5rID0gJnRkLT5saW5rOwotCX0KLQkqcGxpbmsgPSBVSENJX1BUUl9URVJNOwotfQotCi1zdGF0aWMgdm9pZCB1aGNpX2ZyZWVfdGQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV90ZCAqdGQpCi17Ci0JaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+bGlzdCkpCi0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gbGlzdCFcbiIsIHRkKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnRkLT5yZW1vdmVfbGlzdCkpCi0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gcmVtb3ZlX2xpc3QhXG4iLCB0ZCk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+ZmxfbGlzdCkpCi0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gZmxfbGlzdCFcbiIsIHRkKTsKLQotCWRtYV9wb29sX2ZyZWUodWhjaS0+dGRfcG9vbCwgdGQsIHRkLT5kbWFfaGFuZGxlKTsKLX0KLQotc3RhdGljIHN0cnVjdCB1aGNpX3FoICp1aGNpX2FsbG9jX3FoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3N0YXRpYyBzdHJ1Y3QgdWhjaV9xaCAqdWhjaV9hbGxvY19xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksCisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCkKIHsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJc3RydWN0IHVoY2lfcWggKnFoOwpAQCAtMTk0LDI1NiArMTY2LDIxNyBAQAogCXFoLT5lbGVtZW50ID0gVUhDSV9QVFJfVEVSTTsKIAlxaC0+bGluayA9IFVIQ0lfUFRSX1RFUk07CiAKLQlxaC0+dXJicCA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJnFoLT5xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnFoLT5ub2RlKTsKIAotCUlOSVRfTElTVF9IRUFEKCZxaC0+bGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnFoLT5yZW1vdmVfbGlzdCk7CisJaWYgKHVkZXYpIHsJCS8qIE5vcm1hbCBRSCAqLworCQlxaC0+ZHVtbXlfdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOworCQlpZiAoIXFoLT5kdW1teV90ZCkgeworCQkJZG1hX3Bvb2xfZnJlZSh1aGNpLT5xaF9wb29sLCBxaCwgZG1hX2hhbmRsZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlxaC0+c3RhdGUgPSBRSF9TVEFURV9JRExFOworCQlxaC0+aGVwID0gaGVwOworCQlxaC0+dWRldiA9IHVkZXY7CisJCWhlcC0+aGNwcml2ID0gcWg7CiAKKwl9IGVsc2UgewkJLyogU2tlbGV0b24gUUggKi8KKwkJcWgtPnN0YXRlID0gUUhfU1RBVEVfQUNUSVZFOworCQlxaC0+dWRldiA9IE5VTEw7CisJfQogCXJldHVybiBxaDsKIH0KIAogc3RhdGljIHZvaWQgdWhjaV9mcmVlX3FoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfcWggKnFoKQogewotCWlmICghbGlzdF9lbXB0eSgmcWgtPmxpc3QpKQorCVdBUk5fT04ocWgtPnN0YXRlICE9IFFIX1NUQVRFX0lETEUgJiYgcWgtPnVkZXYpOworCWlmICghbGlzdF9lbXB0eSgmcWgtPnF1ZXVlKSkKIAkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJxaCAlcCBsaXN0IG5vdCBlbXB0eSFcbiIsIHFoKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnFoLT5yZW1vdmVfbGlzdCkpCi0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAicWggJXAgc3RpbGwgaW4gcmVtb3ZlX2xpc3QhXG4iLCBxaCk7CiAKKwlsaXN0X2RlbCgmcWgtPm5vZGUpOworCWlmIChxaC0+dWRldikgeworCQlxaC0+aGVwLT5oY3ByaXYgPSBOVUxMOworCQl1aGNpX2ZyZWVfdGQodWhjaSwgcWgtPmR1bW15X3RkKTsKKwl9CiAJZG1hX3Bvb2xfZnJlZSh1aGNpLT5xaF9wb29sLCBxaCwgcWgtPmRtYV9oYW5kbGUpOwogfQogCiAvKgotICogQXBwZW5kIHRoaXMgdXJiJ3MgcWggYWZ0ZXIgdGhlIGxhc3QgcWggaW4gc2tlbHFoLT5saXN0Ci0gKgotICogTm90ZSB0aGF0IHVyYl9wcml2LnF1ZXVlX2xpc3QgZG9lc24ndCBoYXZlIGEgc2VwYXJhdGUgcXVldWUgaGVhZDsKLSAqIGl0J3MgYSByaW5nIHdpdGggZXZlcnkgZWxlbWVudCAibGl2ZSIuCisgKiBXaGVuIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIFVSQiBpcyBkZXF1ZXVlZCwgc2F2ZSBpdHMgY3VycmVudCB0b2dnbGUgdmFsdWUKICAqLwotc3RhdGljIHZvaWQgdWhjaV9pbnNlcnRfcWgoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoLCBzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCB1aGNpX3NhdmVfdG9nZ2xlKHN0cnVjdCB1aGNpX3FoICpxaCwgc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKLQlzdHJ1Y3QgdXJiX3ByaXYgKnR1cmJwOwotCXN0cnVjdCB1aGNpX3FoICpscWg7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CiAKLQkvKiBHcmFiIHRoZSBsYXN0IFFIICovCi0JbHFoID0gbGlzdF9lbnRyeShza2VscWgtPmxpc3QucHJldiwgc3RydWN0IHVoY2lfcWgsIGxpc3QpOworCS8qIElmIHRoZSBRSCBlbGVtZW50IHBvaW50ZXIgaXMgVUhDSV9QVFJfVEVSTSB0aGVuIHRoZW4gY3VycmVudGx5CisJICogZXhlY3V0aW5nIFVSQiBoYXMgYWxyZWFkeSBiZWVuIHVubGlua2VkLCBzbyB0aGlzIG9uZSBpc24ndCBpdC4gKi8KKwlpZiAocWhfZWxlbWVudChxaCkgPT0gVUhDSV9QVFJfVEVSTSB8fAorCQkJCXFoLT5xdWV1ZS5uZXh0ICE9ICZ1cmJwLT5ub2RlKQorCQlyZXR1cm47CisJcWgtPmVsZW1lbnQgPSBVSENJX1BUUl9URVJNOwogCi0JLyogUG9pbnQgdG8gdGhlIG5leHQgc2tlbHFoICovCi0JdXJicC0+cWgtPmxpbmsgPSBscWgtPmxpbms7Ci0Jd21iKCk7CQkJCS8qIE9yZGVyaW5nIGlzIGltcG9ydGFudCAqLworCS8qIE9ubHkgYnVsayBhbmQgaW50ZXJydXB0IHBpcGVzIGhhdmUgdG8gd29ycnkgYWJvdXQgdG9nZ2xlcyAqLworCWlmICghKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQlVMSyB8fAorCQkJdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JTlRFUlJVUFQpKQorCQlyZXR1cm47CiAKLQkvKgotCSAqIFBhdGNoIFFIcyBmb3IgcHJldmlvdXMgZW5kcG9pbnQncyBxdWV1ZWQgVVJCcz8gIEhDIGdvZXMKLQkgKiBoZXJlIG5leHQsIG5vdCB0byB0aGUgbmV4dCBza2VscWggaXQgbm93IHBvaW50cyB0by4KLQkgKgotCSAqICAgIGxxaCAtLT4gdGQgLi4uIC0tPiBxaCAuLi4gLS0+IHRkIC0tPiBxaCAuLi4gLS0+IHRkCi0JICogICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKLQkgKiAgICAgdiAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgdgotCSAqICAgICArPC0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogICAgIHYKLQkgKiAgICBuZXdxaCAtLT4gdGQgLi4uIC0tPiB0ZAotCSAqICAgICB8Ci0JICogICAgIHYKLQkgKiAgICAuLi4KLQkgKgotCSAqIFRoZSBIQyBjb3VsZCBzZWUgKGFuZCB1c2UhKSBhbnkgb2YgdGhlc2UgYXMgd2Ugd3JpdGUgdGhlbS4KLQkgKi8KLQlscWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKLQlpZiAobHFoLT51cmJwKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodHVyYnAsICZscWgtPnVyYnAtPnF1ZXVlX2xpc3QsIHF1ZXVlX2xpc3QpCi0JCQl0dXJicC0+cWgtPmxpbmsgPSBscWgtPmxpbms7CisJLyogRmluZCB0aGUgZmlyc3QgYWN0aXZlIFREOyB0aGF0J3MgdGhlIGRldmljZSdzIHRvZ2dsZSBzdGF0ZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CisJCWlmICh0ZF9zdGF0dXModGQpICYgVERfQ1RSTF9BQ1RJVkUpIHsKKwkJCXFoLT5uZWVkc19maXh1cCA9IDE7CisJCQlxaC0+aW5pdGlhbF90b2dnbGUgPSB1aGNpX3RvZ2dsZSh0ZF90b2tlbih0ZCkpOworCQkJcmV0dXJuOworCQl9CiAJfQogCi0JbGlzdF9hZGRfdGFpbCgmdXJicC0+cWgtPmxpc3QsICZza2VscWgtPmxpc3QpOworCVdBUk5fT04oMSk7CiB9CiAKIC8qCi0gKiBTdGFydCByZW1vdmFsIG9mIFFIIGZyb20gc2NoZWR1bGU7IGl0IGZpbmlzaGVzIG5leHQgZnJhbWUuCi0gKiBURHMgc2hvdWxkIGJlIHVubGlua2VkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC4KKyAqIEZpeCB1cCB0aGUgZGF0YSB0b2dnbGVzIGZvciBVUkJzIGluIGEgcXVldWUsIHdoZW4gb25lIG9mIHRoZW0KKyAqIHRlcm1pbmF0ZXMgZWFybHkgKHNob3J0IHRyYW5zZmVyLCBlcnJvciwgb3IgZGVxdWV1ZWQpLgogICovCi1zdGF0aWMgdm9pZCB1aGNpX3JlbW92ZV9xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCkKK3N0YXRpYyB2b2lkIHVoY2lfZml4dXBfdG9nZ2xlcyhzdHJ1Y3QgdWhjaV9xaCAqcWgsIGludCBza2lwX2ZpcnN0KQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IE5VTEw7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXVuc2lnbmVkIGludCB0b2dnbGUgPSBxaC0+aW5pdGlhbF90b2dnbGU7CisJdW5zaWduZWQgaW50IHBpcGU7CisKKwkvKiBGaXh1cHMgZm9yIGEgc2hvcnQgdHJhbnNmZXIgc3RhcnQgd2l0aCB0aGUgc2Vjb25kIFVSQiBpbiB0aGUKKwkgKiBxdWV1ZSAodGhlIHNob3J0IFVSQiBpcyB0aGUgZmlyc3QpLiAqLworCWlmIChza2lwX2ZpcnN0KQorCQl1cmJwID0gbGlzdF9lbnRyeShxaC0+cXVldWUubmV4dCwgc3RydWN0IHVyYl9wcml2LCBub2RlKTsKKworCS8qIFdoZW4gc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgVVJCLCBpZiB0aGUgUUggZWxlbWVudCBwb2ludGVyIGlzCisJICogc3RpbGwgdmFsaWQgdGhlbiB3ZSBrbm93IHRoZSBVUkIncyB0b2dnbGVzIGFyZSBva2F5LiAqLworCWVsc2UgaWYgKHFoX2VsZW1lbnQocWgpICE9IFVIQ0lfUFRSX1RFUk0pCisJCXRvZ2dsZSA9IDI7CisKKwkvKiBGaXggdXAgdGhlIHRvZ2dsZSBmb3IgdGhlIFVSQnMgaW4gdGhlIHF1ZXVlLiAgTm9ybWFsbHkgdGhpcworCSAqIGxvb3Agd29uJ3QgcnVuIG1vcmUgdGhhbiBvbmNlOiBXaGVuIGFuIGVycm9yIG9yIHNob3J0IHRyYW5zZmVyCisJICogb2NjdXJzLCB0aGUgcXVldWUgdXN1YWxseSBnZXRzIGVtcHRpZWQuICovCisJdXJicCA9IGxpc3RfcHJlcGFyZV9lbnRyeSh1cmJwLCAmcWgtPnF1ZXVlLCBub2RlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHVyYnAsICZxaC0+cXVldWUsIG5vZGUpIHsKKworCQkvKiBJZiB0aGUgZmlyc3QgVEQgaGFzIHRoZSByaWdodCB0b2dnbGUgdmFsdWUsIHdlIGRvbid0CisJCSAqIG5lZWQgdG8gY2hhbmdlIGFueSB0b2dnbGVzIGluIHRoaXMgVVJCICovCisJCXRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0Lm5leHQsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKwkJaWYgKHRvZ2dsZSA+IDEgfHwgdWhjaV90b2dnbGUodGRfdG9rZW4odGQpKSA9PSB0b2dnbGUpIHsKKwkJCXRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0Lm5leHQsIHN0cnVjdCB1aGNpX3RkLAorCQkJCQlsaXN0KTsKKwkJCXRvZ2dsZSA9IHVoY2lfdG9nZ2xlKHRkX3Rva2VuKHRkKSkgXiAxOworCisJCS8qIE90aGVyd2lzZSBhbGwgdGhlIHRvZ2dsZXMgaW4gdGhlIFVSQiBoYXZlIHRvIGJlIHN3aXRjaGVkICovCisJCX0gZWxzZSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgeworCQkJCXRkLT50b2tlbiBePSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkJCQkJCVREX1RPS0VOX1RPR0dMRSk7CisJCQkJdG9nZ2xlIF49IDE7CisJCQl9CisJCX0KKwl9CisKKwl3bWIoKTsKKwlwaXBlID0gbGlzdF9lbnRyeShxaC0+cXVldWUubmV4dCwgc3RydWN0IHVyYl9wcml2LCBub2RlKS0+dXJiLT5waXBlOworCXVzYl9zZXR0b2dnbGUocWgtPnVkZXYsIHVzYl9waXBlZW5kcG9pbnQocGlwZSksCisJCQl1c2JfcGlwZW91dChwaXBlKSwgdG9nZ2xlKTsKKwlxaC0+bmVlZHNfZml4dXAgPSAwOworfQorCisvKgorICogUHV0IGEgUUggb24gdGhlIHNjaGVkdWxlIGluIGJvdGggaGFyZHdhcmUgYW5kIHNvZnR3YXJlCisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfYWN0aXZhdGVfcWgoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV9xaCAqcWgpCiB7CiAJc3RydWN0IHVoY2lfcWggKnBxaDsKLQlfX2xlMzIgbmV3bGluazsKIAotCWlmICghcWgpCi0JCXJldHVybjsKKwlXQVJOX09OKGxpc3RfZW1wdHkoJnFoLT5xdWV1ZSkpOwogCi0JLyoKLQkgKiBPbmx5IGdvIHRocm91Z2ggdGhlIGhvb3BzIGlmIGl0J3MgYWN0dWFsbHkgbGlua2VkIGluCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZxaC0+bGlzdCkpIHsKKwkvKiBTZXQgdGhlIGVsZW1lbnQgcG9pbnRlciBpZiBpdCBpc24ndCBzZXQgYWxyZWFkeS4KKwkgKiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgSXNvY2hyb25vdXMgcXVldWVzLCBidXQgaXQgZG9lc24ndCBodXJ0LiAqLworCWlmIChxaF9lbGVtZW50KHFoKSA9PSBVSENJX1BUUl9URVJNKSB7CisJCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IGxpc3RfZW50cnkocWgtPnF1ZXVlLm5leHQsCisJCQkJc3RydWN0IHVyYl9wcml2LCBub2RlKTsKKwkJc3RydWN0IHVoY2lfdGQgKnRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0Lm5leHQsCisJCQkJc3RydWN0IHVoY2lfdGQsIGxpc3QpOwogCi0JCS8qIElmIG91ciBxdWV1ZSBpcyBub25lbXB0eSwgbWFrZSB0aGUgbmV4dCBVUkIgdGhlIGhlYWQgKi8KLQkJaWYgKCFsaXN0X2VtcHR5KCZxaC0+dXJicC0+cXVldWVfbGlzdCkpIHsKLQkJCXN0cnVjdCB1cmJfcHJpdiAqbnVyYnA7Ci0KLQkJCW51cmJwID0gbGlzdF9lbnRyeShxaC0+dXJicC0+cXVldWVfbGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3QgdXJiX3ByaXYsIHF1ZXVlX2xpc3QpOwotCQkJbnVyYnAtPnF1ZXVlZCA9IDA7Ci0JCQlsaXN0X2FkZCgmbnVyYnAtPnFoLT5saXN0LCAmcWgtPmxpc3QpOwotCQkJbmV3bGluayA9IGNwdV90b19sZTMyKG51cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKLQkJfSBlbHNlCi0JCQluZXdsaW5rID0gcWgtPmxpbms7Ci0KLQkJLyogRml4IHVwIHRoZSBwcmV2aW91cyBRSCdzIHF1ZXVlIHRvIGxpbmsgdG8gZWl0aGVyCi0JCSAqIHRoZSBuZXcgaGVhZCBvZiB0aGlzIHF1ZXVlIG9yIHRoZSBzdGFydCBvZiB0aGUKLQkJICogbmV4dCBlbmRwb2ludCdzIHF1ZXVlLiAqLwotCQlwcWggPSBsaXN0X2VudHJ5KHFoLT5saXN0LnByZXYsIHN0cnVjdCB1aGNpX3FoLCBsaXN0KTsKLQkJcHFoLT5saW5rID0gbmV3bGluazsKLQkJaWYgKHBxaC0+dXJicCkgewotCQkJc3RydWN0IHVyYl9wcml2ICp0dXJicDsKLQotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dXJicCwgJnBxaC0+dXJicC0+cXVldWVfbGlzdCwKLQkJCQkJcXVldWVfbGlzdCkKLQkJCQl0dXJicC0+cWgtPmxpbmsgPSBuZXdsaW5rOwotCQl9Ci0JCXdtYigpOwotCi0JCS8qIExlYXZlIHFoLT5saW5rIGluIGNhc2UgdGhlIEhDIGlzIG9uIHRoZSBRSCBub3csIGl0IHdpbGwgKi8KLQkJLyogY29udGludWUgdGhlIHJlc3Qgb2YgdGhlIHNjaGVkdWxlICovCi0JCXFoLT5lbGVtZW50ID0gVUhDSV9QVFJfVEVSTTsKLQotCQlsaXN0X2RlbF9pbml0KCZxaC0+bGlzdCk7CisJCXFoLT5lbGVtZW50ID0gY3B1X3RvX2xlMzIodGQtPmRtYV9oYW5kbGUpOwogCX0KIAotCWxpc3RfZGVsX2luaXQoJnFoLT51cmJwLT5xdWV1ZV9saXN0KTsKLQlxaC0+dXJicCA9IE5VTEw7CisJaWYgKHFoLT5zdGF0ZSA9PSBRSF9TVEFURV9BQ1RJVkUpCisJCXJldHVybjsKKwlxaC0+c3RhdGUgPSBRSF9TVEFURV9BQ1RJVkU7CisKKwkvKiBNb3ZlIHRoZSBRSCBmcm9tIGl0cyBvbGQgbGlzdCB0byB0aGUgZW5kIG9mIHRoZSBhcHByb3ByaWF0ZQorCSAqIHNrZWxldG9uJ3MgbGlzdCAqLworCWlmIChxaCA9PSB1aGNpLT5uZXh0X3FoKQorCQl1aGNpLT5uZXh0X3FoID0gbGlzdF9lbnRyeShxaC0+bm9kZS5uZXh0LCBzdHJ1Y3QgdWhjaV9xaCwKKwkJCQlub2RlKTsKKwlsaXN0X21vdmVfdGFpbCgmcWgtPm5vZGUsICZxaC0+c2tlbC0+bm9kZSk7CisKKwkvKiBMaW5rIGl0IGludG8gdGhlIHNjaGVkdWxlICovCisJcHFoID0gbGlzdF9lbnRyeShxaC0+bm9kZS5wcmV2LCBzdHJ1Y3QgdWhjaV9xaCwgbm9kZSk7CisJcWgtPmxpbmsgPSBwcWgtPmxpbms7CisJd21iKCk7CisJcHFoLT5saW5rID0gVUhDSV9QVFJfUUggfCBjcHVfdG9fbGUzMihxaC0+ZG1hX2hhbmRsZSk7Cit9CisKKy8qCisgKiBUYWtlIGEgUUggb2ZmIHRoZSBoYXJkd2FyZSBzY2hlZHVsZQorICovCitzdGF0aWMgdm9pZCB1aGNpX3VubGlua19xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCkKK3sKKwlzdHJ1Y3QgdWhjaV9xaCAqcHFoOworCisJaWYgKHFoLT5zdGF0ZSA9PSBRSF9TVEFURV9VTkxJTktJTkcpCisJCXJldHVybjsKKwlXQVJOX09OKHFoLT5zdGF0ZSAhPSBRSF9TVEFURV9BQ1RJVkUgfHwgIXFoLT51ZGV2KTsKKwlxaC0+c3RhdGUgPSBRSF9TVEFURV9VTkxJTktJTkc7CisKKwkvKiBVbmxpbmsgdGhlIFFIIGZyb20gdGhlIHNjaGVkdWxlIGFuZCByZWNvcmQgd2hlbiB3ZSBkaWQgaXQgKi8KKwlwcWggPSBsaXN0X2VudHJ5KHFoLT5ub2RlLnByZXYsIHN0cnVjdCB1aGNpX3FoLCBub2RlKTsKKwlwcWgtPmxpbmsgPSBxaC0+bGluazsKKwltYigpOwogCiAJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7Ci0JaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+cWhfcmVtb3ZlX2FnZSkgewotCQl1aGNpX2ZyZWVfcGVuZGluZ19xaHModWhjaSk7Ci0JCXVoY2ktPnFoX3JlbW92ZV9hZ2UgPSB1aGNpLT5mcmFtZV9udW1iZXI7Ci0JfQorCXFoLT51bmxpbmtfZnJhbWUgPSB1aGNpLT5mcmFtZV9udW1iZXI7CiAKLQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHJlbW92ZSBsaXN0IGlzIGVtcHR5LiBTZXQgdGhlIElPQyBiaXQgKi8KLQkvKiB0byBmb3JjZSBhbiBpbnRlcnJ1cHQgc28gd2UgY2FuIHJlbW92ZSB0aGUgUUggKi8KLQlpZiAobGlzdF9lbXB0eSgmdWhjaS0+cWhfcmVtb3ZlX2xpc3QpKQorCS8qIEZvcmNlIGFuIGludGVycnVwdCBzbyB3ZSBrbm93IHdoZW4gdGhlIFFIIGlzIGZ1bGx5IHVubGlua2VkICovCisJaWYgKGxpc3RfZW1wdHkoJnVoY2ktPnNrZWxfdW5saW5rX3FoLT5ub2RlKSkKIAkJdWhjaV9zZXRfbmV4dF9pbnRlcnJ1cHQodWhjaSk7CiAKLQlsaXN0X2FkZCgmcWgtPnJlbW92ZV9saXN0LCAmdWhjaS0+cWhfcmVtb3ZlX2xpc3QpOworCS8qIE1vdmUgdGhlIFFIIGZyb20gaXRzIG9sZCBsaXN0IHRvIHRoZSBlbmQgb2YgdGhlIHVubGlua2luZyBsaXN0ICovCisJaWYgKHFoID09IHVoY2ktPm5leHRfcWgpCisJCXVoY2ktPm5leHRfcWggPSBsaXN0X2VudHJ5KHFoLT5ub2RlLm5leHQsIHN0cnVjdCB1aGNpX3FoLAorCQkJCW5vZGUpOworCWxpc3RfbW92ZV90YWlsKCZxaC0+bm9kZSwgJnVoY2ktPnNrZWxfdW5saW5rX3FoLT5ub2RlKTsKIH0KIAotc3RhdGljIGludCB1aGNpX2ZpeHVwX3RvZ2dsZShzdHJ1Y3QgdXJiICp1cmIsIHVuc2lnbmVkIGludCB0b2dnbGUpCisvKgorICogV2hlbiB3ZSBhbmQgdGhlIGNvbnRyb2xsZXIgYXJlIHRocm91Z2ggd2l0aCBhIFFILCBpdCBiZWNvbWVzIElETEUuCisgKiBUaGlzIGhhcHBlbnMgd2hlbiBhIFFIIGhhcyBiZWVuIG9mZiB0aGUgc2NoZWR1bGUgKG9uIHRoZSB1bmxpbmtpbmcKKyAqIGxpc3QpIGZvciBtb3JlIHRoYW4gb25lIGZyYW1lLCBvciB3aGVuIGFuIGVycm9yIG9jY3VycyB3aGlsZSBhZGRpbmcKKyAqIHRoZSBmaXJzdCBVUkIgb250byBhIG5ldyBRSC4KKyAqLworc3RhdGljIHZvaWQgdWhjaV9tYWtlX3FoX2lkbGUoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV9xaCAqcWgpCiB7Ci0Jc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OwotCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlXQVJOX09OKHFoLT5zdGF0ZSA9PSBRSF9TVEFURV9BQ1RJVkUpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgJnVyYnAtPnRkX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHRvZ2dsZSkKLQkJCXRkLT50b2tlbiB8PSBjcHVfdG9fbGUzMihURF9UT0tFTl9UT0dHTEUpOwotCQllbHNlCi0JCQl0ZC0+dG9rZW4gJj0gfmNwdV90b19sZTMyKFREX1RPS0VOX1RPR0dMRSk7CisJaWYgKHFoID09IHVoY2ktPm5leHRfcWgpCisJCXVoY2ktPm5leHRfcWggPSBsaXN0X2VudHJ5KHFoLT5ub2RlLm5leHQsIHN0cnVjdCB1aGNpX3FoLAorCQkJCW5vZGUpOworCWxpc3RfbW92ZSgmcWgtPm5vZGUsICZ1aGNpLT5pZGxlX3FoX2xpc3QpOworCXFoLT5zdGF0ZSA9IFFIX1NUQVRFX0lETEU7CiAKLQkJdG9nZ2xlIF49IDE7Ci0JfQotCi0JcmV0dXJuIHRvZ2dsZTsKKwkvKiBJZiBhbnlvbmUgaXMgd2FpdGluZyBmb3IgYSBRSCB0byBiZWNvbWUgaWRsZSwgd2FrZSB0aGVtIHVwICovCisJaWYgKHVoY2ktPm51bV93YWl0aW5nKQorCQl3YWtlX3VwX2FsbCgmdWhjaS0+d2FpdHFoKTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiB3aWxsIGFwcGVuZCBvbmUgVVJCJ3MgUUggdG8gYW5vdGhlciBVUkIncyBRSC4gVGhpcyBpcyBmb3IgKi8KLS8qIHF1ZXVpbmcgaW50ZXJydXB0LCBjb250cm9sIG9yIGJ1bGsgdHJhbnNmZXJzICovCi1zdGF0aWMgdm9pZCB1aGNpX2FwcGVuZF9xdWV1ZWRfdXJiKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqZXVyYiwgc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCB1cmJfcHJpdiAqZXVyYnAsICp1cmJwLCAqZnVyYnAsICpsdXJicDsKLQlzdHJ1Y3QgdWhjaV90ZCAqbGx0ZDsKLQotCWV1cmJwID0gZXVyYi0+aGNwcml2OwotCXVyYnAgPSB1cmItPmhjcHJpdjsKLQotCS8qIEZpbmQgdGhlIGZpcnN0IFVSQiBpbiB0aGUgcXVldWUgKi8KLQlmdXJicCA9IGV1cmJwOwotCWlmIChldXJicC0+cXVldWVkKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZnVyYnAsICZldXJicC0+cXVldWVfbGlzdCwgcXVldWVfbGlzdCkKLQkJCWlmICghZnVyYnAtPnF1ZXVlZCkKLQkJCQlicmVhazsKLQl9Ci0KLQlsdXJicCA9IGxpc3RfZW50cnkoZnVyYnAtPnF1ZXVlX2xpc3QucHJldiwgc3RydWN0IHVyYl9wcml2LCBxdWV1ZV9saXN0KTsKLQotCWxsdGQgPSBsaXN0X2VudHJ5KGx1cmJwLT50ZF9saXN0LnByZXYsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKLQotCS8qIENvbnRyb2wgdHJhbnNmZXJzIGFsd2F5cyBzdGFydCB3aXRoIHRvZ2dsZSAwICovCi0JaWYgKCF1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSkKLQkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAotCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSksCi0JCQkJdWhjaV9maXh1cF90b2dnbGUodXJiLAotCQkJCQl1aGNpX3RvZ2dsZSh0ZF90b2tlbihsbHRkKSkgXiAxKSk7Ci0KLQkvKiBBbGwgcWhzIGluIHRoZSBxdWV1ZSBuZWVkIHRvIGxpbmsgdG8gdGhlIG5leHQgcXVldWUgKi8KLQl1cmJwLT5xaC0+bGluayA9IGV1cmJwLT5xaC0+bGluazsKLQotCXdtYigpOwkJCS8qIE1ha2Ugc3VyZSB3ZSBmbHVzaCBldmVyeXRoaW5nICovCi0KLQlsbHRkLT5saW5rID0gY3B1X3RvX2xlMzIodXJicC0+cWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7Ci0KLQlsaXN0X2FkZF90YWlsKCZ1cmJwLT5xdWV1ZV9saXN0LCAmZnVyYnAtPnF1ZXVlX2xpc3QpOwotCi0JdXJicC0+cXVldWVkID0gMTsKLX0KLQotc3RhdGljIHZvaWQgdWhjaV9kZWxldGVfcXVldWVkX3VyYihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAsICpudXJicCwgKnB1cmJwLCAqdHVyYnA7Ci0Jc3RydWN0IHVoY2lfdGQgKnBsdGQ7Ci0JdW5zaWduZWQgaW50IHRvZ2dsZTsKLQotCXVyYnAgPSB1cmItPmhjcHJpdjsKLQotCWlmIChsaXN0X2VtcHR5KCZ1cmJwLT5xdWV1ZV9saXN0KSkKLQkJcmV0dXJuOwotCi0JbnVyYnAgPSBsaXN0X2VudHJ5KHVyYnAtPnF1ZXVlX2xpc3QubmV4dCwgc3RydWN0IHVyYl9wcml2LCBxdWV1ZV9saXN0KTsKLQotCS8qCi0JICogRml4IHVwIHRoZSB0b2dnbGUgZm9yIHRoZSBmb2xsb3dpbmcgVVJCcyBpbiB0aGUgcXVldWUuCi0JICogT25seSBuZWVkZWQgZm9yIGJ1bGsgYW5kIGludGVycnVwdDogY29udHJvbCBhbmQgaXNvY2hyb25vdXMKLQkgKiBlbmRwb2ludHMgZG9uJ3QgcHJvcGFnYXRlIHRvZ2dsZXMgYmV0d2VlbiBtZXNzYWdlcy4KLQkgKi8KLQlpZiAodXNiX3BpcGVidWxrKHVyYi0+cGlwZSkgfHwgdXNiX3BpcGVpbnQodXJiLT5waXBlKSkgewotCQlpZiAoIXVyYnAtPnF1ZXVlZCkKLQkJCS8qIFdlIGp1c3Qgc2V0IHRoZSB0b2dnbGUgaW4gdWhjaV91bmxpbmtfZ2VuZXJpYyAqLwotCQkJdG9nZ2xlID0gdXNiX2dldHRvZ2dsZSh1cmItPmRldiwKLQkJCQkJdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAotCQkJCQl1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKLQkJZWxzZSB7Ci0JCQkvKiBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBxdWV1ZSwgZ3JhYiB0aGUgKi8KLQkJCS8qIHRvZ2dsZSBmcm9tIHRoZSBURCBwcmV2aW91cyB0byB1cyAqLwotCQkJcHVyYnAgPSBsaXN0X2VudHJ5KHVyYnAtPnF1ZXVlX2xpc3QucHJldiwKLQkJCQkJc3RydWN0IHVyYl9wcml2LCBxdWV1ZV9saXN0KTsKLQkJCXBsdGQgPSBsaXN0X2VudHJ5KHB1cmJwLT50ZF9saXN0LnByZXYsCi0JCQkJCXN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKLQkJCXRvZ2dsZSA9IHVoY2lfdG9nZ2xlKHRkX3Rva2VuKHBsdGQpKSBeIDE7Ci0JCX0KLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1cmJwLCAmdXJicC0+cXVldWVfbGlzdCwgcXVldWVfbGlzdCkgewotCQkJaWYgKCF0dXJicC0+cXVldWVkKQotCQkJCWJyZWFrOwotCQkJdG9nZ2xlID0gdWhjaV9maXh1cF90b2dnbGUodHVyYnAtPnVyYiwgdG9nZ2xlKTsKLQkJfQotCi0JCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKLQkJCQl1c2JfcGlwZW91dCh1cmItPnBpcGUpLCB0b2dnbGUpOwotCX0KLQotCWlmICh1cmJwLT5xdWV1ZWQpIHsKLQkJLyogV2UncmUgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgKG9yIGVuZCkuICBUaGUgY2FzZSB3aGVyZQotCQkgKiB3ZSdyZSBhdCB0aGUgaGVhZCBpcyBoYW5kbGVkIGluIHVoY2lfcmVtb3ZlX3FoKCkuICovCi0JCXB1cmJwID0gbGlzdF9lbnRyeSh1cmJwLT5xdWV1ZV9saXN0LnByZXYsIHN0cnVjdCB1cmJfcHJpdiwKLQkJCQlxdWV1ZV9saXN0KTsKLQotCQlwbHRkID0gbGlzdF9lbnRyeShwdXJicC0+dGRfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7Ci0JCWlmIChudXJicC0+cXVldWVkKQotCQkJcGx0ZC0+bGluayA9IGNwdV90b19sZTMyKG51cmJwLT5xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKLQkJZWxzZQotCQkJLyogVGhlIG5leHQgVVJCIGhhcHBlbnMgdG8gYmUgdGhlIGJlZ2lubmluZywgc28gKi8KLQkJCS8qICB3ZSdyZSB0aGUgbGFzdCwgZW5kIHRoZSBjaGFpbiAqLwotCQkJcGx0ZC0+bGluayA9IFVIQ0lfUFRSX1RFUk07Ci0JfQotCi0JLyogdXJicC0+cXVldWVfbGlzdCBpcyBoYW5kbGVkIGluIHVoY2lfcmVtb3ZlX3FoKCkgKi8KLX0KLQotc3RhdGljIHN0cnVjdCB1cmJfcHJpdiAqdWhjaV9hbGxvY191cmJfcHJpdihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVyYl9wcml2ICp1aGNpX2FsbG9jX3VyYl9wcml2KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwKKwkJc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKIApAQCAtNDUzLDE2ICszODYsMTEgQEAKIAogCW1lbXNldCgodm9pZCAqKXVyYnAsIDAsIHNpemVvZigqdXJicCkpOwogCi0JdXJicC0+ZnNicnRpbWUgPSBqaWZmaWVzOwogCXVyYnAtPnVyYiA9IHVyYjsKLQkKLQlJTklUX0xJU1RfSEVBRCgmdXJicC0+dGRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnVyYnAtPnF1ZXVlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZ1cmJwLT51cmJfbGlzdCk7Ci0KLQlsaXN0X2FkZF90YWlsKCZ1cmJwLT51cmJfbGlzdCwgJnVoY2ktPnVyYl9saXN0KTsKLQogCXVyYi0+aGNwcml2ID0gdXJicDsKKwkKKwlJTklUX0xJU1RfSEVBRCgmdXJicC0+bm9kZSk7CisJSU5JVF9MSVNUX0hFQUQoJnVyYnAtPnRkX2xpc3QpOwogCiAJcmV0dXJuIHVyYnA7CiB9CkBAIC00ODIsMTggKzQxMCwxNCBAQAogCWxpc3RfZGVsX2luaXQoJnRkLT5saXN0KTsKIH0KIAotc3RhdGljIHZvaWQgdWhjaV9kZXN0cm95X3VyYl9wcml2KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQorc3RhdGljIHZvaWQgdWhjaV9mcmVlX3VyYl9wcml2KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwKKwkJc3RydWN0IHVyYl9wcml2ICp1cmJwKQogewogCXN0cnVjdCB1aGNpX3RkICp0ZCwgKnRtcDsKLQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnA7CiAKLQl1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OwotCWlmICghdXJicCkKLQkJcmV0dXJuOwotCi0JaWYgKCFsaXN0X2VtcHR5KCZ1cmJwLT51cmJfbGlzdCkpCi0JCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidXJiICVwIHN0aWxsIG9uIHVoY2ktPnVyYl9saXN0ICIKLQkJCQkib3IgdWhjaS0+cmVtb3ZlX2xpc3QhXG4iLCB1cmIpOworCWlmICghbGlzdF9lbXB0eSgmdXJicC0+bm9kZSkpCisJCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidXJiICVwIHN0aWxsIG9uIFFIJ3MgbGlzdCFcbiIsCisJCQkJdXJicC0+dXJiKTsKIAogCXVoY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHVoY2kpOwogCWlmICh1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHVoY2ktPnRkX3JlbW92ZV9hZ2UpIHsKQEAgLTUwMiw3ICs0MjYsNyBAQAogCX0KIAogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVtb3ZlIGxpc3QgaXMgZW1wdHkuIFNldCB0aGUgSU9DIGJpdCAqLwotCS8qIHRvIGZvcmNlIGFuIGludGVycnVwdCBzbyB3ZSBjYW4gcmVtb3ZlIHRoZSBURHMqLworCS8qIHRvIGZvcmNlIGFuIGludGVycnVwdCBzbyB3ZSBjYW4gcmVtb3ZlIHRoZSBURHMuICovCiAJaWYgKGxpc3RfZW1wdHkoJnVoY2ktPnRkX3JlbW92ZV9saXN0KSkKIAkJdWhjaV9zZXRfbmV4dF9pbnRlcnJ1cHQodWhjaSk7CiAKQEAgLTUxMSw3ICs0MzUsNyBAQAogCQlsaXN0X2FkZCgmdGQtPnJlbW92ZV9saXN0LCAmdWhjaS0+dGRfcmVtb3ZlX2xpc3QpOwogCX0KIAotCXVyYi0+aGNwcml2ID0gTlVMTDsKKwl1cmJwLT51cmItPmhjcHJpdiA9IE5VTEw7CiAJa21lbV9jYWNoZV9mcmVlKHVoY2lfdXBfY2FjaGVwLCB1cmJwKTsKIH0KIApAQCAtNTcwLDM0ICs0OTQsMzMgQEAKIC8qCiAgKiBDb250cm9sIHRyYW5zZmVycwogICovCi1zdGF0aWMgaW50IHVoY2lfc3VibWl0X2NvbnRyb2woc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1cmIgKmV1cmIpCitzdGF0aWMgaW50IHVoY2lfc3VibWl0X2NvbnRyb2woc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsCisJCXN0cnVjdCB1aGNpX3FoICpxaCkKIHsKLQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CiAJc3RydWN0IHVoY2lfdGQgKnRkOwotCXN0cnVjdCB1aGNpX3FoICpxaCwgKnNrZWxxaDsKIAl1bnNpZ25lZCBsb25nIGRlc3RpbmF0aW9uLCBzdGF0dXM7Ci0JaW50IG1heHN6ZSA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJaW50IG1heHN6ZSA9IGxlMTZfdG9fY3B1KHFoLT5oZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCWludCBsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CiAJZG1hX2FkZHJfdCBkYXRhID0gdXJiLT50cmFuc2Zlcl9kbWE7CisJX19sZTMyICpwbGluazsKIAogCS8qIFRoZSAicGlwZSIgdGhpbmcgY29udGFpbnMgdGhlIGRlc3RpbmF0aW9uIGluIGJpdHMgOC0tMTggKi8KIAlkZXN0aW5hdGlvbiA9ICh1cmItPnBpcGUgJiBQSVBFX0RFVkVQX01BU0spIHwgVVNCX1BJRF9TRVRVUDsKIAotCS8qIDMgZXJyb3JzICovCi0Jc3RhdHVzID0gVERfQ1RSTF9BQ1RJVkUgfCB1aGNpX21heGVycigzKTsKKwkvKiAzIGVycm9ycywgZHVtbXkgVEQgcmVtYWlucyBpbmFjdGl2ZSAqLworCXN0YXR1cyA9IHVoY2lfbWF4ZXJyKDMpOwogCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKIAkJc3RhdHVzIHw9IFREX0NUUkxfTFM7CiAKIAkvKgogCSAqIEJ1aWxkIHRoZSBURCBmb3IgdGhlIGNvbnRyb2wgcmVxdWVzdCBzZXR1cCBwYWNrZXQKIAkgKi8KLQl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSk7Ci0JaWYgKCF0ZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KKwl0ZCA9IHFoLT5kdW1teV90ZDsKIAl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7CiAJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4oOCksCi0JCXVyYi0+c2V0dXBfZG1hKTsKKwkJCXVyYi0+c2V0dXBfZG1hKTsKKwlwbGluayA9ICZ0ZC0+bGluazsKKwlzdGF0dXMgfD0gVERfQ1RSTF9BQ1RJVkU7CiAKIAkvKgogCSAqIElmIGRpcmVjdGlvbiBpcyAic2VuZCIsIGNoYW5nZSB0aGUgcGFja2V0IElEIGZyb20gU0VUVVAgKDB4MkQpCkBAIC02MTUsMjEgKzUzOCwyMCBAQAogCSAqIEJ1aWxkIHRoZSBEQVRBIFREcwogCSAqLwogCXdoaWxlIChsZW4gPiAwKSB7Ci0JCWludCBwa3RzemUgPSBsZW47Ci0KLQkJaWYgKHBrdHN6ZSA+IG1heHN6ZSkKLQkJCXBrdHN6ZSA9IG1heHN6ZTsKKwkJaW50IHBrdHN6ZSA9IG1pbihsZW4sIG1heHN6ZSk7CiAKIAkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOwogCQlpZiAoIXRkKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlnb3RvIG5vbWVtOworCQkqcGxpbmsgPSBjcHVfdG9fbGUzMih0ZC0+ZG1hX2hhbmRsZSk7CiAKIAkJLyogQWx0ZXJuYXRlIERhdGEwLzEgKHN0YXJ0IHdpdGggRGF0YTEpICovCiAJCWRlc3RpbmF0aW9uIF49IFREX1RPS0VOX1RPR0dMRTsKIAkKIAkJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOwogCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihwa3RzemUpLAotCQkJZGF0YSk7CisJCQkJZGF0YSk7CisJCXBsaW5rID0gJnRkLT5saW5rOwogCiAJCWRhdGEgKz0gcGt0c3plOwogCQlsZW4gLT0gcGt0c3plOwpAQCAtNjQwLDcgKzU2Miw4IEBACiAJICovCiAJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOwogCWlmICghdGQpCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIG5vbWVtOworCSpwbGluayA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKIAogCS8qCiAJICogSXQncyBJTiBpZiB0aGUgcGlwZSBpcyBhbiBvdXRwdXQgcGlwZSBvciB3ZSdyZSBub3QgZXhwZWN0aW5nCkBAIC02NTgsMTYgKzU4MSwyMSBAQAogCiAJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOwogCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzIHwgVERfQ1RSTF9JT0MsCi0JCWRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4oMCksIDApOworCQkJZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbigwKSwgMCk7CisJcGxpbmsgPSAmdGQtPmxpbms7CiAKLQlxaCA9IHVoY2lfYWxsb2NfcWgodWhjaSk7Ci0JaWYgKCFxaCkKLQkJcmV0dXJuIC1FTk9NRU07CisJLyoKKwkgKiBCdWlsZCB0aGUgbmV3IGR1bW15IFREIGFuZCBhY3RpdmF0ZSB0aGUgb2xkIG9uZQorCSAqLworCXRkID0gdWhjaV9hbGxvY190ZCh1aGNpKTsKKwlpZiAoIXRkKQorCQlnb3RvIG5vbWVtOworCSpwbGluayA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKIAotCXVyYnAtPnFoID0gcWg7Ci0JcWgtPnVyYnAgPSB1cmJwOwotCi0JdWhjaV9pbnNlcnRfdGRzX2luX3FoKHFoLCB1cmIsIFVIQ0lfUFRSX0JSRUFEVEgpOworCXVoY2lfZmlsbF90ZCh0ZCwgMCwgVVNCX1BJRF9PVVQgfCB1aGNpX2V4cGxlbigwKSwgMCk7CisJd21iKCk7CisJcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CisJcWgtPmR1bW15X3RkID0gdGQ7CiAKIAkvKiBMb3ctc3BlZWQgdHJhbnNmZXJzIGdldCBhIGRpZmZlcmVudCBxdWV1ZSwgYW5kIHdvbid0IGhvZyB0aGUgYnVzLgogCSAqIEFsc28sIHNvbWUgZGV2aWNlcyBlbnVtZXJhdGUgYmV0dGVyIHdpdGhvdXQgRlNCUjsgdGhlIGVhc2llc3Qgd2F5CkBAIC02NzUsMTggKzYwMywxNyBAQAogCSAqIGlzbid0IGluIHRoZSBDT05GSUdVUkVEIHN0YXRlLiAqLwogCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVyB8fAogCQkJdXJiLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEKQotCQlza2VscWggPSB1aGNpLT5za2VsX2xzX2NvbnRyb2xfcWg7CisJCXFoLT5za2VsID0gdWhjaS0+c2tlbF9sc19jb250cm9sX3FoOwogCWVsc2UgewotCQlza2VscWggPSB1aGNpLT5za2VsX2ZzX2NvbnRyb2xfcWg7CisJCXFoLT5za2VsID0gdWhjaS0+c2tlbF9mc19jb250cm9sX3FoOwogCQl1aGNpX2luY19mc2JyKHVoY2ksIHVyYik7CiAJfQorCXJldHVybiAwOwogCi0JaWYgKGV1cmIpCi0JCXVoY2lfYXBwZW5kX3F1ZXVlZF91cmIodWhjaSwgZXVyYiwgdXJiKTsKLQllbHNlCi0JCXVoY2lfaW5zZXJ0X3FoKHVoY2ksIHNrZWxxaCwgdXJiKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7Citub21lbToKKwkvKiBSZW1vdmUgdGhlIGR1bW15IFREIGZyb20gdGhlIHRkX2xpc3Qgc28gaXQgZG9lc24ndCBnZXQgZnJlZWQgKi8KKwl1aGNpX3JlbW92ZV90ZF9mcm9tX3VyYihxaC0+ZHVtbXlfdGQpOworCXJldHVybiAtRU5PTUVNOwogfQogCiAvKgpAQCAtNzAzLDcgKzYzMCw3IEBACiAJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OwogCXN0cnVjdCB1aGNpX3RkICp0ZDsKIAotCXVyYnAtPnNob3J0X2NvbnRyb2xfcGFja2V0ID0gMTsKKwl1cmJwLT5zaG9ydF90cmFuc2ZlciA9IDE7CiAKIAl0ZCA9IGxpc3RfZW50cnkodXJicC0+dGRfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CiAJdXJicC0+cWgtPmVsZW1lbnQgPSBjcHVfdG9fbGUzMih0ZC0+ZG1hX2hhbmRsZSk7CkBAIC03MjAsMTYgKzY0NywxNCBAQAogCXVuc2lnbmVkIGludCBzdGF0dXM7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAobGlzdF9lbXB0eSgmdXJicC0+dGRfbGlzdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaGVhZCA9ICZ1cmJwLT50ZF9saXN0OwotCi0JaWYgKHVyYnAtPnNob3J0X2NvbnRyb2xfcGFja2V0KSB7CisJaWYgKHVyYnAtPnNob3J0X3RyYW5zZmVyKSB7CiAJCXRtcCA9IGhlYWQtPnByZXY7CiAJCWdvdG8gc3RhdHVzX3N0YWdlOwogCX0KIAorCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKIAl0bXAgPSBoZWFkLT5uZXh0OwogCXRkID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKIApAQCAtNzQyLDggKzY2Nyw2IEBACiAJaWYgKHN0YXR1cykKIAkJZ290byB0ZF9lcnJvcjsKIAotCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0KIAkvKiBUaGUgcmVzdCBvZiB0aGUgVERzIChidXQgdGhlIGxhc3QpIGFyZSBkYXRhICovCiAJdG1wID0gdG1wLT5uZXh0OwogCXdoaWxlICh0bXAgIT0gaGVhZCAmJiB0bXAtPm5leHQgIT0gaGVhZCkgewpAQCAtNzcwLDEwICs2OTMsNyBAQAogCQkJCWdvdG8gZXJyOwogCQkJfQogCi0JCQlpZiAodWhjaV9wYWNrZXRpZCh0ZF90b2tlbih0ZCkpID09IFVTQl9QSURfSU4pCi0JCQkJcmV0dXJuIHVzYl9jb250cm9sX3JldHJpZ2dlcl9zdGF0dXModWhjaSwgdXJiKTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gMDsKKwkJCXJldHVybiB1c2JfY29udHJvbF9yZXRyaWdnZXJfc3RhdHVzKHVoY2ksIHVyYik7CiAJCX0KIAl9CiAKQEAgLTgxNCwzNCArNzM0LDQwIEBACiAJCWlmIChlcnJidWYpIHsKIAkJCS8qIFByaW50IHRoZSBjaGFpbiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCiAJCQl1aGNpX3Nob3dfcWgodXJicC0+cWgsIGVycmJ1ZiwgRVJSQlVGX0xFTiwgMCk7Ci0KIAkJCWxwcmludGsoZXJyYnVmKTsKIAkJfQogCX0KIAorCS8qIE5vdGUgdGhhdCB0aGUgcXVldWUgaGFzIHN0b3BwZWQgKi8KKwl1cmJwLT5xaC0+ZWxlbWVudCA9IFVIQ0lfUFRSX1RFUk07CisJdXJicC0+cWgtPmlzX3N0b3BwZWQgPSAxOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCiAgKiBDb21tb24gc3VibWl0IGZvciBidWxrIGFuZCBpbnRlcnJ1cHQKICAqLwotc3RhdGljIGludCB1aGNpX3N1Ym1pdF9jb21tb24oc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1cmIgKmV1cmIsIHN0cnVjdCB1aGNpX3FoICpza2VscWgpCitzdGF0aWMgaW50IHVoY2lfc3VibWl0X2NvbW1vbihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYiwKKwkJc3RydWN0IHVoY2lfcWggKnFoKQogewogCXN0cnVjdCB1aGNpX3RkICp0ZDsKLQlzdHJ1Y3QgdWhjaV9xaCAqcWg7CiAJdW5zaWduZWQgbG9uZyBkZXN0aW5hdGlvbiwgc3RhdHVzOwotCWludCBtYXhzemUgPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCWludCBtYXhzemUgPSBsZTE2X3RvX2NwdShxaC0+aGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKIAlpbnQgbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwotCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKIAlkbWFfYWRkcl90IGRhdGEgPSB1cmItPnRyYW5zZmVyX2RtYTsKKwlfX2xlMzIgKnBsaW5rOworCXVuc2lnbmVkIGludCB0b2dnbGU7CiAKIAlpZiAobGVuIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUaGUgInBpcGUiIHRoaW5nIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBpbiBiaXRzIDgtLTE4ICovCiAJZGVzdGluYXRpb24gPSAodXJiLT5waXBlICYgUElQRV9ERVZFUF9NQVNLKSB8IHVzYl9wYWNrZXRpZCh1cmItPnBpcGUpOworCXRvZ2dsZSA9IHVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCSB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKIAotCXN0YXR1cyA9IHVoY2lfbWF4ZXJyKDMpIHwgVERfQ1RSTF9BQ1RJVkU7CisJLyogMyBlcnJvcnMsIGR1bW15IFREIHJlbWFpbnMgaW5hY3RpdmUgKi8KKwlzdGF0dXMgPSB1aGNpX21heGVycigzKTsKIAlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpCiAJCXN0YXR1cyB8PSBURF9DVFJMX0xTOwogCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpCkBAIC04NTAsMzAgKzc3NiwzNCBAQAogCS8qCiAJICogQnVpbGQgdGhlIERBVEEgVERzCiAJICovCisJcGxpbmsgPSBOVUxMOworCXRkID0gcWgtPmR1bW15X3RkOwogCWRvIHsJLyogQWxsb3cgemVybyBsZW5ndGggcGFja2V0cyAqLwogCQlpbnQgcGt0c3plID0gbWF4c3plOwogCi0JCWlmIChwa3RzemUgPj0gbGVuKSB7CisJCWlmIChsZW4gPD0gcGt0c3plKSB7CQkvKiBUaGUgbGFzdCBwYWNrZXQgKi8KIAkJCXBrdHN6ZSA9IGxlbjsKIAkJCWlmICghKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSkKIAkJCQlzdGF0dXMgJj0gflREX0NUUkxfU1BEOwogCQl9CiAKLQkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2kpOwotCQlpZiAoIXRkKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KKwkJaWYgKHBsaW5rKSB7CisJCQl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSk7CisJCQlpZiAoIXRkKQorCQkJCWdvdG8gbm9tZW07CisJCQkqcGxpbmsgPSBjcHVfdG9fbGUzMih0ZC0+ZG1hX2hhbmRsZSk7CisJCX0KIAkJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOwotCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihwa3RzemUpIHwKLQkJCSh1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCi0JCQkgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgPDwgVERfVE9LRU5fVE9HR0xFX1NISUZUKSwKLQkJCWRhdGEpOworCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywKKwkJCQlkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHBrdHN6ZSkgfAorCQkJCQkodG9nZ2xlIDw8IFREX1RPS0VOX1RPR0dMRV9TSElGVCksCisJCQkJZGF0YSk7CisJCXBsaW5rID0gJnRkLT5saW5rOworCQlzdGF0dXMgfD0gVERfQ1RSTF9BQ1RJVkU7CiAKIAkJZGF0YSArPSBwa3RzemU7CiAJCWxlbiAtPSBtYXhzemU7Ci0KLQkJdXNiX2RvdG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCi0JCQl1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwkJdG9nZ2xlIF49IDE7CiAJfSB3aGlsZSAobGVuID4gMCk7CiAKIAkvKgpAQCAtODgzLDIwICs4MTMsMjIgQEAKIAkgKiBob3dldmVyLCBpZiB0cmFuc2Zlcl9sZW5ndGggPT0gMCwgdGhlIHplcm8gcGFja2V0IHdhcyBhbHJlYWR5CiAJICogcHJlcGFyZWQgYWJvdmUuCiAJICovCi0JaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkgJiYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpICYmCi0JICAgICFsZW4gJiYgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJaWYgKCh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1pFUk9fUEFDS0VUKSAmJgorCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSAmJiBsZW4gPT0gMCAmJgorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMCkgewogCQl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSk7CiAJCWlmICghdGQpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gbm9tZW07CisJCSpwbGluayA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKIAogCQl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7Ci0JCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKDApIHwKLQkJCSh1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCi0JCQkgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgPDwgVERfVE9LRU5fVE9HR0xFX1NISUZUKSwKLQkJCWRhdGEpOworCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywKKwkJCQlkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKDApIHwKKwkJCQkJKHRvZ2dsZSA8PCBURF9UT0tFTl9UT0dHTEVfU0hJRlQpLAorCQkJCWRhdGEpOworCQlwbGluayA9ICZ0ZC0+bGluazsKIAotCQl1c2JfZG90b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKLQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCQl0b2dnbGUgXj0gMTsKIAl9CiAKIAkvKiBTZXQgdGhlIGludGVycnVwdC1vbi1jb21wbGV0aW9uIGZsYWcgb24gdGhlIGxhc3QgcGFja2V0LgpAQCAtOTA1LDI0ICs4MzcsMjkgQEAKIAkgKiBmYXN0IHNpZGUgYnV0IG5vdCBlbm91Z2ggdG8ganVzdGlmeSBkZWxheWluZyBhbiBpbnRlcnJ1cHQKIAkgKiBtb3JlIHRoYW4gMiBvciAzIFVSQnMsIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBVUkJfTk9fSU5URVJSVVBUCiAJICogZmxhZyBzZXR0aW5nLiAqLwotCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCXRkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CiAKLQlxaCA9IHVoY2lfYWxsb2NfcWgodWhjaSk7Ci0JaWYgKCFxaCkKLQkJcmV0dXJuIC1FTk9NRU07CisJLyoKKwkgKiBCdWlsZCB0aGUgbmV3IGR1bW15IFREIGFuZCBhY3RpdmF0ZSB0aGUgb2xkIG9uZQorCSAqLworCXRkID0gdWhjaV9hbGxvY190ZCh1aGNpKTsKKwlpZiAoIXRkKQorCQlnb3RvIG5vbWVtOworCSpwbGluayA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKIAotCXVyYnAtPnFoID0gcWg7Ci0JcWgtPnVyYnAgPSB1cmJwOworCXVoY2lfZmlsbF90ZCh0ZCwgMCwgVVNCX1BJRF9PVVQgfCB1aGNpX2V4cGxlbigwKSwgMCk7CisJd21iKCk7CisJcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CisJcWgtPmR1bW15X3RkID0gdGQ7CiAKLQkvKiBBbHdheXMgYnJlYWR0aCBmaXJzdCAqLwotCXVoY2lfaW5zZXJ0X3Rkc19pbl9xaChxaCwgdXJiLCBVSENJX1BUUl9CUkVBRFRIKTsKKwl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZW91dCh1cmItPnBpcGUpLCB0b2dnbGUpOworCXJldHVybiAwOwogCi0JaWYgKGV1cmIpCi0JCXVoY2lfYXBwZW5kX3F1ZXVlZF91cmIodWhjaSwgZXVyYiwgdXJiKTsKLQllbHNlCi0JCXVoY2lfaW5zZXJ0X3FoKHVoY2ksIHNrZWxxaCwgdXJiKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7Citub21lbToKKwkvKiBSZW1vdmUgdGhlIGR1bW15IFREIGZyb20gdGhlIHRkX2xpc3Qgc28gaXQgZG9lc24ndCBnZXQgZnJlZWQgKi8KKwl1aGNpX3JlbW92ZV90ZF9mcm9tX3VyYihxaC0+ZHVtbXlfdGQpOworCXJldHVybiAtRU5PTUVNOwogfQogCiAvKgpAQCAtOTU0LDggKzg5MSwyNyBAQAogCQkJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSB7CiAJCQkJcmV0ID0gLUVSRU1PVEVJTzsKIAkJCQlnb3RvIGVycjsKLQkJCX0gZWxzZQotCQkJCXJldHVybiAwOworCQkJfQorCisJCQkvKgorCQkJICogVGhpcyBVUkIgc3RvcHBlZCBzaG9ydCBvZiBpdHMgZW5kLiAgV2UgaGF2ZSB0bworCQkJICogZml4IHVwIHRoZSB0b2dnbGVzIG9mIHRoZSBmb2xsb3dpbmcgVVJCcyBvbiB0aGUKKwkJCSAqIHF1ZXVlIGFuZCByZXN0YXJ0IHRoZSBxdWV1ZS4KKwkJCSAqCisJCQkgKiBEbyB0aGlzIG9ubHkgdGhlIGZpcnN0IHRpbWUgd2UgZW5jb3VudGVyIHRoZQorCQkJICogc2hvcnQgVVJCLgorCQkJICovCisJCQlpZiAoIXVyYnAtPnNob3J0X3RyYW5zZmVyKSB7CisJCQkJdXJicC0+c2hvcnRfdHJhbnNmZXIgPSAxOworCQkJCXVyYnAtPnFoLT5pbml0aWFsX3RvZ2dsZSA9CisJCQkJCQl1aGNpX3RvZ2dsZSh0ZF90b2tlbih0ZCkpIF4gMTsKKwkJCQl1aGNpX2ZpeHVwX3RvZ2dsZXModXJicC0+cWgsIDEpOworCisJCQkJdGQgPSBsaXN0X2VudHJ5KHVyYnAtPnRkX2xpc3QucHJldiwKKwkJCQkJCXN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKwkJCQl1cmJwLT5xaC0+ZWxlbWVudCA9IHRkLT5saW5rOworCQkJfQorCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTk2NCwzMSArOTIwLDMwIEBACiB0ZF9lcnJvcjoKIAlyZXQgPSB1aGNpX21hcF9zdGF0dXMoc3RhdHVzLCB1aGNpX3BhY2tldG91dCh0ZF90b2tlbih0ZCkpKTsKIAotZXJyOgotCS8qIAotCSAqIEVuYWJsZSB0aGlzIGNodW5rIG9mIGNvZGUgaWYgeW91IHdhbnQgdG8gc2VlIHNvbWUgbW9yZSBkZWJ1Z2dpbmcuCi0JICogQnV0IGJlIGNhcmVmdWwsIGl0IGhhcyB0aGUgdGVuZGFuY3kgdG8gc3RhcnZlIG91dCBraHViZCBhbmQgcHJldmVudAotCSAqIGRpc2Nvbm5lY3RzIGZyb20gaGFwcGVuaW5nIHN1Y2Nlc3NmdWxseSBpZiB5b3UgaGF2ZSBhIHNsb3cgZGVidWcKLQkgKiBsb2cgaW50ZXJmYWNlIChsaWtlIGEgc2VyaWFsIGNvbnNvbGUuCi0JICovCi0jaWYgMAogCWlmICgoZGVidWcgPT0gMSAmJiByZXQgIT0gLUVQSVBFKSB8fCBkZWJ1ZyA+IDEpIHsKIAkJLyogU29tZSBkZWJ1Z2dpbmcgY29kZSAqLwogCQlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAiJXM6IGZhaWxlZCB3aXRoIHN0YXR1cyAleFxuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CiAKLQkJaWYgKGVycmJ1ZikgeworCQlpZiAoZGVidWcgPiAxICYmIGVycmJ1ZikgewogCQkJLyogUHJpbnQgdGhlIGNoYWluIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KIAkJCXVoY2lfc2hvd19xaCh1cmJwLT5xaCwgZXJyYnVmLCBFUlJCVUZfTEVOLCAwKTsKLQogCQkJbHByaW50ayhlcnJidWYpOwogCQl9CiAJfQotI2VuZGlmCitlcnI6CisKKwkvKiBOb3RlIHRoYXQgdGhlIHF1ZXVlIGhhcyBzdG9wcGVkIGFuZCBzYXZlIHRoZSBuZXh0IHRvZ2dsZSB2YWx1ZSAqLworCXVyYnAtPnFoLT5lbGVtZW50ID0gVUhDSV9QVFJfVEVSTTsKKwl1cmJwLT5xaC0+aXNfc3RvcHBlZCA9IDE7CisJdXJicC0+cWgtPm5lZWRzX2ZpeHVwID0gMTsKKwl1cmJwLT5xaC0+aW5pdGlhbF90b2dnbGUgPSB1aGNpX3RvZ2dsZSh0ZF90b2tlbih0ZCkpIF4KKwkJCShyZXQgPT0gLUVSRU1PVEVJTyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdWhjaV9zdWJtaXRfYnVsayhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVyYiAqZXVyYikKK3N0YXRpYyBpbmxpbmUgaW50IHVoY2lfc3VibWl0X2J1bGsoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsCisJCXN0cnVjdCB1aGNpX3FoICpxaCkKIHsKIAlpbnQgcmV0OwogCkBAIC05OTYsOTUgKzk1MSw2MCBAQAogCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSB1aGNpX3N1Ym1pdF9jb21tb24odWhjaSwgdXJiLCBldXJiLCB1aGNpLT5za2VsX2J1bGtfcWgpOwotCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQorCXFoLT5za2VsID0gdWhjaS0+c2tlbF9idWxrX3FoOworCXJldCA9IHVoY2lfc3VibWl0X2NvbW1vbih1aGNpLCB1cmIsIHFoKTsKKwlpZiAocmV0ID09IDApCiAJCXVoY2lfaW5jX2ZzYnIodWhjaSwgdXJiKTsKLQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHVoY2lfc3VibWl0X2ludGVycnVwdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVyYiAqZXVyYikKK3N0YXRpYyBpbmxpbmUgaW50IHVoY2lfc3VibWl0X2ludGVycnVwdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYiwKKwkJc3RydWN0IHVoY2lfcWggKnFoKQogewotCS8qIFVTQiAxLjEgaW50ZXJydXB0IHRyYW5zZmVycyBvbmx5IGludm9sdmUgb25lIHBhY2tldCBwZXIgaW50ZXJ2YWw7Ci0JICogdGhhdCdzIHRoZSB1aGNpX3N1Ym1pdF9jb21tb24oKSAiYnJlYWR0aCBmaXJzdCIgcG9saWN5LiAgRHJpdmVycwotCSAqIGNhbiBzdWJtaXQgdXJicyBvZiBhbnkgbGVuZ3RoLCBidXQgbG9uZ2VyIG9uZXMgbWlnaHQgbmVlZCBtYW55Ci0JICogaW50ZXJ2YWxzIHRvIGNvbXBsZXRlLgorCS8qIFVTQiAxLjEgaW50ZXJydXB0IHRyYW5zZmVycyBvbmx5IGludm9sdmUgb25lIHBhY2tldCBwZXIgaW50ZXJ2YWwuCisJICogRHJpdmVycyBjYW4gc3VibWl0IFVSQnMgb2YgYW55IGxlbmd0aCwgYnV0IGxvbmdlciBvbmVzIHdpbGwgbmVlZAorCSAqIG11bHRpcGxlIGludGVydmFscyB0byBjb21wbGV0ZS4KIAkgKi8KLQlyZXR1cm4gdWhjaV9zdWJtaXRfY29tbW9uKHVoY2ksIHVyYiwgZXVyYiwgdWhjaS0+c2tlbHFoW19faW50ZXJ2YWxfdG9fc2tlbCh1cmItPmludGVydmFsKV0pOworCXFoLT5za2VsID0gdWhjaS0+c2tlbHFoW19faW50ZXJ2YWxfdG9fc2tlbCh1cmItPmludGVydmFsKV07CisJcmV0dXJuIHVoY2lfc3VibWl0X2NvbW1vbih1aGNpLCB1cmIsIHFoKTsKIH0KIAogLyoKICAqIElzb2Nocm9ub3VzIHRyYW5zZmVycwogICovCi1zdGF0aWMgaW50IGlzb2Nocm9ub3VzX2ZpbmRfbGltaXRzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiLCB1bnNpZ25lZCBpbnQgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgKmVuZCkKK3N0YXRpYyBpbnQgdWhjaV9zdWJtaXRfaXNvY2hyb25vdXMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsCisJCXN0cnVjdCB1aGNpX3FoICpxaCkKIHsKLQlzdHJ1Y3QgdXJiICpsYXN0X3VyYiA9IE5VTEw7Ci0Jc3RydWN0IHVyYl9wcml2ICp1cDsKLQlpbnQgcmV0ID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkodXAsICZ1aGNpLT51cmJfbGlzdCwgdXJiX2xpc3QpIHsKLQkJc3RydWN0IHVyYiAqdSA9IHVwLT51cmI7Ci0KLQkJLyogbG9vayBmb3IgcGVuZGluZyBVUkJzIHdpdGggaWRlbnRpY2FsIHBpcGUgaGFuZGxlICovCi0JCWlmICgodXJiLT5waXBlID09IHUtPnBpcGUpICYmICh1cmItPmRldiA9PSB1LT5kZXYpICYmCi0JCSAgICAodS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgJiYgKHUgIT0gdXJiKSkgewotCQkJaWYgKCFsYXN0X3VyYikKLQkJCQkqc3RhcnQgPSB1LT5zdGFydF9mcmFtZTsKLQkJCWxhc3RfdXJiID0gdTsKLQkJfQotCX0KLQotCWlmIChsYXN0X3VyYikgewotCQkqZW5kID0gKGxhc3RfdXJiLT5zdGFydF9mcmFtZSArIGxhc3RfdXJiLT5udW1iZXJfb2ZfcGFja2V0cyAqCi0JCQkJbGFzdF91cmItPmludGVydmFsKSAmIChVSENJX05VTUZSQU1FUy0xKTsKLQkJcmV0ID0gMDsKLQl9IGVsc2UKLQkJcmV0ID0gLTE7CS8qIG5vIHByZXZpb3VzIHVyYiBmb3VuZCAqLwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpc29jaHJvbm91c19maW5kX3N0YXJ0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQotewotCWludCBsaW1pdHM7Ci0JdW5zaWduZWQgaW50IHN0YXJ0ID0gMCwgZW5kID0gMDsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQgPSBOVUxMOwkvKiBTaW5jZSB1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gMCAqLworCWludCBpLCBmcmFtZTsKKwl1bnNpZ25lZCBsb25nIGRlc3RpbmF0aW9uLCBzdGF0dXM7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKSB1cmItPmhjcHJpdjsKIAogCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gOTAwKQkvKiA5MDA/IFdoeT8gKi8KIAkJcmV0dXJuIC1FRkJJRzsKIAotCWxpbWl0cyA9IGlzb2Nocm9ub3VzX2ZpbmRfbGltaXRzKHVoY2ksIHVyYiwgJnN0YXJ0LCAmZW5kKTsKLQotCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0lTT19BU0FQKSB7Ci0JCWlmIChsaW1pdHMpIHsKLQkJCXVoY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHVoY2kpOwotCQkJdXJiLT5zdGFydF9mcmFtZSA9ICh1aGNpLT5mcmFtZV9udW1iZXIgKyAxMCkKLQkJCQkJJiAoVUhDSV9OVU1GUkFNRVMgLSAxKTsKLQkJfSBlbHNlCi0JCQl1cmItPnN0YXJ0X2ZyYW1lID0gZW5kOwotCX0gZWxzZSB7Ci0JCXVyYi0+c3RhcnRfZnJhbWUgJj0gKFVIQ0lfTlVNRlJBTUVTIC0gMSk7Ci0JCS8qIEZJWE1FOiBTYW5pdHkgY2hlY2sgKi8KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIElzb2Nocm9ub3VzIHRyYW5zZmVycwotICovCi1zdGF0aWMgaW50IHVoY2lfc3VibWl0X2lzb2Nocm9ub3VzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCB1aGNpX3RkICp0ZDsKLQlpbnQgaSwgcmV0LCBmcmFtZTsKLQlpbnQgc3RhdHVzLCBkZXN0aW5hdGlvbjsKLQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopIHVyYi0+aGNwcml2OwotCiAJc3RhdHVzID0gVERfQ1RSTF9BQ1RJVkUgfCBURF9DVFJMX0lPUzsKIAlkZXN0aW5hdGlvbiA9ICh1cmItPnBpcGUgJiBQSVBFX0RFVkVQX01BU0spIHwgdXNiX3BhY2tldGlkKHVyYi0+cGlwZSk7CiAKLQlyZXQgPSBpc29jaHJvbm91c19maW5kX3N0YXJ0KHVoY2ksIHVyYik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkvKiBGaWd1cmUgb3V0IHRoZSBzdGFydGluZyBmcmFtZSBudW1iZXIgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9JU09fQVNBUCkgeworCQlpZiAobGlzdF9lbXB0eSgmcWgtPnF1ZXVlKSkgeworCQkJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisJCQl1cmItPnN0YXJ0X2ZyYW1lID0gKHVoY2ktPmZyYW1lX251bWJlciArIDEwKTsKKworCQl9IGVsc2UgewkJLyogR28gcmlnaHQgYWZ0ZXIgdGhlIGxhc3Qgb25lICovCisJCQlzdHJ1Y3QgdXJiICpsYXN0X3VyYjsKKworCQkJbGFzdF91cmIgPSBsaXN0X2VudHJ5KHFoLT5xdWV1ZS5wcmV2LAorCQkJCQlzdHJ1Y3QgdXJiX3ByaXYsIG5vZGUpLT51cmI7CisJCQl1cmItPnN0YXJ0X2ZyYW1lID0gKGxhc3RfdXJiLT5zdGFydF9mcmFtZSArCisJCQkJCWxhc3RfdXJiLT5udW1iZXJfb2ZfcGFja2V0cyAqCisJCQkJCWxhc3RfdXJiLT5pbnRlcnZhbCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGSVhNRTogU2FuaXR5IGNoZWNrICovCisJfQorCXVyYi0+c3RhcnRfZnJhbWUgJj0gKFVIQ0lfTlVNRlJBTUVTIC0gMSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CiAJCXRkID0gdWhjaV9hbGxvY190ZCh1aGNpKTsKQEAgLTEwOTIsMjAgKzEwMTIsMjUgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKLQkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4odXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGgpLAotCQkJdXJiLT50cmFuc2Zlcl9kbWEgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7Ci0KLQkJaWYgKGkgKyAxID49IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpCi0JCQl0ZC0+c3RhdHVzIHw9IGNwdV90b19sZTMyKFREX0NUUkxfSU9DKTsKKwkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwKKwkJCQl1aGNpX2V4cGxlbih1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCksCisJCQkJdXJiLT50cmFuc2Zlcl9kbWEgKworCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CiAJfQogCisJLyogU2V0IHRoZSBpbnRlcnJ1cHQtb24tY29tcGxldGlvbiBmbGFnIG9uIHRoZSBsYXN0IHBhY2tldC4gKi8KKwl0ZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCisJcWgtPnNrZWwgPSB1aGNpLT5za2VsX2lzb19xaDsKKworCS8qIEFkZCB0aGUgVERzIHRvIHRoZSBmcmFtZSBsaXN0ICovCiAJZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7Ci0JCXVoY2lfaW5zZXJ0X3RkX2ZyYW1lX2xpc3QodWhjaSwgdGQsIGZyYW1lKTsKKwkJdWhjaV9pbnNlcnRfdGRfaW5fZnJhbWVfbGlzdCh1aGNpLCB0ZCwgZnJhbWUpOwogCQlmcmFtZSArPSB1cmItPmludGVydmFsOwogCX0KIAotCXJldHVybiAtRUlOUFJPR1JFU1M7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdWhjaV9yZXN1bHRfaXNvY2hyb25vdXMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCkBAIC0xMTM5LDgwICsxMDY0LDY3IEBACiAKIAkJaSsrOwogCX0KLQl1bmxpbmtfaXNvY2hyb25vdXNfdGRzKHVoY2ksIHVyYik7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHVyYiAqdWhjaV9maW5kX3VyYl9lcChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgdXJiX3ByaXYgKnVwOwotCi0JLyogV2UgZG9uJ3QgbWF0Y2ggSXNvYyB0cmFuc2ZlcnMgc2luY2UgdGhleSBhcmUgc3BlY2lhbCAqLwotCWlmICh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVwLCAmdWhjaS0+dXJiX2xpc3QsIHVyYl9saXN0KSB7Ci0JCXN0cnVjdCB1cmIgKnUgPSB1cC0+dXJiOwotCi0JCWlmICh1LT5kZXYgPT0gdXJiLT5kZXYgJiYgdS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQkJLyogRm9yIGNvbnRyb2wsIGlnbm9yZSB0aGUgZGlyZWN0aW9uICovCi0JCQlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkgJiYKLQkJCSAgICAodS0+cGlwZSAmIH5VU0JfRElSX0lOKSA9PSAodXJiLT5waXBlICYgflVTQl9ESVJfSU4pKQotCQkJCXJldHVybiB1OwotCQkJZWxzZSBpZiAodS0+cGlwZSA9PSB1cmItPnBpcGUpCi0JCQkJcmV0dXJuIHU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGludCB1aGNpX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsCi0JCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsCisJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwLAogCQlzdHJ1Y3QgdXJiICp1cmIsIGdmcF90IG1lbV9mbGFncykKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdXJiICpldXJiOworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKwlzdHJ1Y3QgdWhjaV9xaCAqcWg7CiAJaW50IGJ1c3RpbWU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWhjaS0+bG9jaywgZmxhZ3MpOwogCiAJcmV0ID0gdXJiLT5zdGF0dXM7CiAJaWYgKHJldCAhPSAtRUlOUFJPR1JFU1MpCQkvKiBVUkIgYWxyZWFkeSB1bmxpbmtlZCEgKi8KLQkJZ290byBvdXQ7CisJCWdvdG8gZG9uZTsKIAotCWV1cmIgPSB1aGNpX2ZpbmRfdXJiX2VwKHVoY2ksIHVyYik7CisJcmV0ID0gLUVOT01FTTsKKwl1cmJwID0gdWhjaV9hbGxvY191cmJfcHJpdih1aGNpLCB1cmIpOworCWlmICghdXJicCkKKwkJZ290byBkb25lOwogCi0JaWYgKCF1aGNpX2FsbG9jX3VyYl9wcml2KHVoY2ksIHVyYikpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJaWYgKGhlcC0+aGNwcml2KQorCQlxaCA9IChzdHJ1Y3QgdWhjaV9xaCAqKSBoZXAtPmhjcHJpdjsKKwllbHNlIHsKKwkJcWggPSB1aGNpX2FsbG9jX3FoKHVoY2ksIHVyYi0+ZGV2LCBoZXApOworCQlpZiAoIXFoKQorCQkJZ290byBlcnJfbm9fcWg7CiAJfQorCXVyYnAtPnFoID0gcWg7CiAKIAlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CiAJY2FzZSBQSVBFX0NPTlRST0w6Ci0JCXJldCA9IHVoY2lfc3VibWl0X2NvbnRyb2wodWhjaSwgdXJiLCBldXJiKTsKKwkJcmV0ID0gdWhjaV9zdWJtaXRfY29udHJvbCh1aGNpLCB1cmIsIHFoKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0JVTEs6CisJCXJldCA9IHVoY2lfc3VibWl0X2J1bGsodWhjaSwgdXJiLCBxaCk7CiAJCWJyZWFrOwogCWNhc2UgUElQRV9JTlRFUlJVUFQ6Ci0JCWlmICghZXVyYikgeworCQlpZiAobGlzdF9lbXB0eSgmcWgtPnF1ZXVlKSkgewogCQkJYnVzdGltZSA9IHVzYl9jaGVja19iYW5kd2lkdGgodXJiLT5kZXYsIHVyYik7CiAJCQlpZiAoYnVzdGltZSA8IDApCiAJCQkJcmV0ID0gYnVzdGltZTsKIAkJCWVsc2UgewotCQkJCXJldCA9IHVoY2lfc3VibWl0X2ludGVycnVwdCh1aGNpLCB1cmIsIGV1cmIpOwotCQkJCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQorCQkJCXJldCA9IHVoY2lfc3VibWl0X2ludGVycnVwdCh1aGNpLCB1cmIsIHFoKTsKKwkJCQlpZiAocmV0ID09IDApCiAJCQkJCXVzYl9jbGFpbV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgYnVzdGltZSwgMCk7CiAJCQl9CiAJCX0gZWxzZSB7CS8qIGluaGVyaXQgZnJvbSBwYXJlbnQgKi8KLQkJCXVyYi0+YmFuZHdpZHRoID0gZXVyYi0+YmFuZHdpZHRoOwotCQkJcmV0ID0gdWhjaV9zdWJtaXRfaW50ZXJydXB0KHVoY2ksIHVyYiwgZXVyYik7CisJCQlzdHJ1Y3QgdXJiX3ByaXYgKmV1cmJwOworCisJCQlldXJicCA9IGxpc3RfZW50cnkocWgtPnF1ZXVlLnByZXYsIHN0cnVjdCB1cmJfcHJpdiwKKwkJCQkJbm9kZSk7CisJCQl1cmItPmJhbmR3aWR0aCA9IGV1cmJwLT51cmItPmJhbmR3aWR0aDsKKwkJCXJldCA9IHVoY2lfc3VibWl0X2ludGVycnVwdCh1aGNpLCB1cmIsIHFoKTsKIAkJfQogCQlicmVhazsKLQljYXNlIFBJUEVfQlVMSzoKLQkJcmV0ID0gdWhjaV9zdWJtaXRfYnVsayh1aGNpLCB1cmIsIGV1cmIpOwotCQlicmVhazsKIAljYXNlIFBJUEVfSVNPQ0hST05PVVM6CiAJCWJ1c3RpbWUgPSB1c2JfY2hlY2tfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIpOwogCQlpZiAoYnVzdGltZSA8IDApIHsKQEAgLTEyMjAsMTQ2ICsxMTMyLDM3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IHVoY2lfc3VibWl0X2lzb2Nocm9ub3VzKHVoY2ksIHVyYik7Ci0JCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQorCQlyZXQgPSB1aGNpX3N1Ym1pdF9pc29jaHJvbm91cyh1aGNpLCB1cmIsIHFoKTsKKwkJaWYgKHJldCA9PSAwKQogCQkJdXNiX2NsYWltX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCBidXN0aW1lLCAxKTsKIAkJYnJlYWs7CiAJfQorCWlmIChyZXQgIT0gMCkKKwkJZ290byBlcnJfc3VibWl0X2ZhaWxlZDsKIAotCWlmIChyZXQgIT0gLUVJTlBST0dSRVNTKSB7Ci0JCS8qIFN1Ym1pdCBmYWlsZWQsIHNvIGRlbGV0ZSBpdCBmcm9tIHRoZSB1cmJfbGlzdCAqLwotCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSB1cmItPmhjcHJpdjsKKwkvKiBBZGQgdGhpcyBVUkIgdG8gdGhlIFFIICovCisJdXJicC0+cWggPSBxaDsKKwlsaXN0X2FkZF90YWlsKCZ1cmJwLT5ub2RlLCAmcWgtPnF1ZXVlKTsKIAotCQlsaXN0X2RlbF9pbml0KCZ1cmJwLT51cmJfbGlzdCk7Ci0JCXVoY2lfZGVzdHJveV91cmJfcHJpdih1aGNpLCB1cmIpOwotCX0gZWxzZQotCQlyZXQgPSAwOworCS8qIElmIHRoZSBuZXcgVVJCIGlzIHRoZSBmaXJzdCBhbmQgb25seSBvbmUgb24gdGhpcyBRSCB0aGVuIGVpdGhlcgorCSAqIHRoZSBRSCBpcyBuZXcgYW5kIGlkbGUgb3IgZWxzZSBpdCdzIHVubGlua2VkIGFuZCB3YWl0aW5nIHRvCisJICogYmVjb21lIGlkbGUsIHNvIHdlIGNhbiBhY3RpdmF0ZSBpdCByaWdodCBhd2F5LiAqLworCWlmIChxaC0+cXVldWUubmV4dCA9PSAmdXJicC0+bm9kZSkKKwkJdWhjaV9hY3RpdmF0ZV9xaCh1aGNpLCBxaCk7CisJZ290byBkb25lOwogCi1vdXQ6CitlcnJfc3VibWl0X2ZhaWxlZDoKKwlpZiAocWgtPnN0YXRlID09IFFIX1NUQVRFX0lETEUpCisJCXVoY2lfbWFrZV9xaF9pZGxlKHVoY2ksIHFoKTsJLyogUmVjbGFpbSB1bnVzZWQgUUggKi8KKworZXJyX25vX3FoOgorCXVoY2lfZnJlZV91cmJfcHJpdih1aGNpLCB1cmJwKTsKKworZG9uZToKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFJldHVybiB0aGUgcmVzdWx0IG9mIGEgdHJhbnNmZXIKLSAqLwotc3RhdGljIHZvaWQgdWhjaV90cmFuc2Zlcl9yZXN1bHQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JaW50IHJldCA9IC1FSU5QUk9HUkVTUzsKLQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnA7Ci0KLQlzcGluX2xvY2soJnVyYi0+bG9jayk7Ci0KLQl1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OwotCi0JaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykJLyogVVJCIGFscmVhZHkgZGVxdWV1ZWQgKi8KLQkJZ290byBvdXQ7Ci0KLQlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7Ci0JY2FzZSBQSVBFX0NPTlRST0w6Ci0JCXJldCA9IHVoY2lfcmVzdWx0X2NvbnRyb2wodWhjaSwgdXJiKTsKLQkJYnJlYWs7Ci0JY2FzZSBQSVBFX0JVTEs6Ci0JY2FzZSBQSVBFX0lOVEVSUlVQVDoKLQkJcmV0ID0gdWhjaV9yZXN1bHRfY29tbW9uKHVoY2ksIHVyYik7Ci0JCWJyZWFrOwotCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKLQkJcmV0ID0gdWhjaV9yZXN1bHRfaXNvY2hyb25vdXModWhjaSwgdXJiKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MpCi0JCWdvdG8gb3V0OwotCXVyYi0+c3RhdHVzID0gcmV0OwotCi0Jc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgewotCWNhc2UgUElQRV9DT05UUk9MOgotCWNhc2UgUElQRV9CVUxLOgotCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKLQkJLyogUmVsZWFzZSBiYW5kd2lkdGggZm9yIEludGVycnVwdCBvciBJc29jLiB0cmFuc2ZlcnMgKi8KLQkJaWYgKHVyYi0+YmFuZHdpZHRoKQotCQkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDEpOwotCQl1aGNpX3VubGlua19nZW5lcmljKHVoY2ksIHVyYik7Ci0JCWJyZWFrOwotCWNhc2UgUElQRV9JTlRFUlJVUFQ6Ci0JCS8qIFJlbGVhc2UgYmFuZHdpZHRoIGZvciBJbnRlcnJ1cHQgb3IgSXNvYy4gdHJhbnNmZXJzICovCi0JCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCByZWxlYXNlIGlmIHdlIGhhdmUgYSBxdWV1ZWQgVVJCICovCi0JCWlmIChsaXN0X2VtcHR5KCZ1cmJwLT5xdWV1ZV9saXN0KSAmJiB1cmItPmJhbmR3aWR0aCkKLQkJCXVzYl9yZWxlYXNlX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCAwKTsKLQkJZWxzZQotCQkJLyogYmFuZHdpZHRoIHdhcyBwYXNzZWQgb24gdG8gcXVldWVkIFVSQiwgKi8KLQkJCS8qIHNvIGRvbid0IGxldCB1c2JfdW5saW5rX3VyYigpIHJlbGVhc2UgaXQgKi8KLQkJCXVyYi0+YmFuZHdpZHRoID0gMDsKLQkJdWhjaV91bmxpbmtfZ2VuZXJpYyh1aGNpLCB1cmIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkZXZfaW5mbyh1aGNpX2Rldih1aGNpKSwgIiVzOiB1bmtub3duIHBpcGUgdHlwZSAlZCAiCi0JCQkJImZvciB1cmIgJXBcbiIsCi0JCQkJX19GVU5DVElPTl9fLCB1c2JfcGlwZXR5cGUodXJiLT5waXBlKSwgdXJiKTsKLQl9Ci0KLQkvKiBNb3ZlIGl0IGZyb20gdWhjaS0+dXJiX2xpc3QgdG8gdWhjaS0+Y29tcGxldGVfbGlzdCAqLwotCXVoY2lfbW92ZXRvX2NvbXBsZXRlKHVoY2ksIHVyYnApOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2soJnVyYi0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVoY2lfdW5saW5rX2dlbmVyaWMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgdWhjaV90ZCAqdGQ7Ci0Jc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OwotCWludCBwcmV2YWN0aXZlID0gMDsKLQotCXVoY2lfZGVjX2ZzYnIodWhjaSwgdXJiKTsJLyogU2FmZSBzaW5jZSBpdCBjaGVja3MgKi8KLQotCS8qCi0JICogTm93IHdlIG5lZWQgdG8gZmluZCBvdXQgd2hhdCB0aGUgbGFzdCBzdWNjZXNzZnVsIHRvZ2dsZSB3YXMKLQkgKiBzbyB3ZSBjYW4gdXBkYXRlIHRoZSBsb2NhbCBkYXRhIHRvZ2dsZSBmb3IgdGhlIG5leHQgdHJhbnNmZXIKLQkgKgotCSAqIFRoZXJlIGFyZSAyIHdheXMgdGhlIGxhc3Qgc3VjY2Vzc2Z1bCBjb21wbGV0ZWQgVEQgaXMgZm91bmQ6Ci0JICoKLQkgKiAxKSBUaGUgVEQgaXMgTk9UIGFjdGl2ZSBhbmQgdGhlIGFjdHVhbCBsZW5ndGggPCBleHBlY3RlZCBsZW5ndGgKLQkgKiAyKSBUaGUgVEQgaXMgTk9UIGFjdGl2ZSBhbmQgaXQncyB0aGUgbGFzdCBURCBpbiB0aGUgY2hhaW4KLQkgKgotCSAqIGFuZCBhIHRoaXJkIHdheSB0aGUgZmlyc3QgdW5jb21wbGV0ZWQgVEQgaXMgZm91bmQ6Ci0JICoKLQkgKiAzKSBUaGUgVEQgaXMgYWN0aXZlIGFuZCB0aGUgcHJldmlvdXMgVEQgaXMgTk9UIGFjdGl2ZQotCSAqCi0JICogQ29udHJvbCBhbmQgSXNvY2hyb25vdXMgaWdub3JlIHRoZSB0b2dnbGUsIHNvIHRoaXMgaXMgc2FmZQotCSAqIGZvciBhbGwgdHlwZXMKLQkgKgotCSAqIEZJWE1FOiBUaGUgdG9nZ2xlIGZpeHVwcyB3b24ndCBiZSAxMDAlIHJlbGlhYmxlIHVudGlsIHdlCi0JICogY2hhbmdlIG92ZXIgdG8gdXNpbmcgYSBzaW5nbGUgcXVldWUgZm9yIGVhY2ggZW5kcG9pbnQgYW5kCi0JICogc3RvcCB0aGUgcXVldWUgYmVmb3JlIHVubGlua2luZy4KLQkgKi8KLQloZWFkID0gJnVyYnAtPnRkX2xpc3Q7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgaGVhZCwgbGlzdCkgewotCQl1bnNpZ25lZCBpbnQgY3RybHN0YXQgPSB0ZF9zdGF0dXModGQpOwotCi0JCWlmICghKGN0cmxzdGF0ICYgVERfQ1RSTF9BQ1RJVkUpICYmCi0JCQkJKHVoY2lfYWN0dWFsX2xlbmd0aChjdHJsc3RhdCkgPAotCQkJCSB1aGNpX2V4cGVjdGVkX2xlbmd0aCh0ZF90b2tlbih0ZCkpIHx8Ci0JCQkJdGQtPmxpc3QubmV4dCA9PSBoZWFkKSkKLQkJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVoY2lfZW5kcG9pbnQodGRfdG9rZW4odGQpKSwKLQkJCQl1aGNpX3BhY2tldG91dCh0ZF90b2tlbih0ZCkpLAotCQkJCXVoY2lfdG9nZ2xlKHRkX3Rva2VuKHRkKSkgXiAxKTsKLQkJZWxzZSBpZiAoKGN0cmxzdGF0ICYgVERfQ1RSTF9BQ1RJVkUpICYmICFwcmV2YWN0aXZlKQotCQkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdWhjaV9lbmRwb2ludCh0ZF90b2tlbih0ZCkpLAotCQkJCXVoY2lfcGFja2V0b3V0KHRkX3Rva2VuKHRkKSksCi0JCQkJdWhjaV90b2dnbGUodGRfdG9rZW4odGQpKSk7Ci0KLQkJcHJldmFjdGl2ZSA9IGN0cmxzdGF0ICYgVERfQ1RSTF9BQ1RJVkU7Ci0JfQotCi0JdWhjaV9kZWxldGVfcXVldWVkX3VyYih1aGNpLCB1cmIpOwotCi0JLyogVGhlIGludGVycnVwdCBsb29wIHdpbGwgcmVjbGFpbSB0aGUgUUhzICovCi0JdWhjaV9yZW1vdmVfcWgodWhjaSwgdXJicC0+cWgpOwotCXVyYnAtPnFoID0gTlVMTDsKLX0KLQogc3RhdGljIGludCB1aGNpX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOwpAQCAtMTM3MCw3MSArMTE3MywxNjcgQEAKIAl1cmJwID0gdXJiLT5oY3ByaXY7CiAJaWYgKCF1cmJwKQkJCS8qIFVSQiB3YXMgbmV2ZXIgbGlua2VkISAqLwogCQlnb3RvIGRvbmU7Ci0JbGlzdF9kZWxfaW5pdCgmdXJicC0+dXJiX2xpc3QpOwogCisJLyogUmVtb3ZlIElzb2Nocm9ub3VzIFREcyBmcm9tIHRoZSBmcmFtZSBsaXN0IEFTQVAgKi8KIAlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykKLQkJdW5saW5rX2lzb2Nocm9ub3VzX3Rkcyh1aGNpLCB1cmIpOwotCXVoY2lfdW5saW5rX2dlbmVyaWModWhjaSwgdXJiKTsKLQotCXVoY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHVoY2kpOwotCWlmICh1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHVoY2ktPnVyYl9yZW1vdmVfYWdlKSB7Ci0JCXVoY2lfcmVtb3ZlX3BlbmRpbmdfdXJicHModWhjaSk7Ci0JCXVoY2ktPnVyYl9yZW1vdmVfYWdlID0gdWhjaS0+ZnJhbWVfbnVtYmVyOwotCX0KLQotCS8qIElmIHdlJ3JlIHRoZSBmaXJzdCwgc2V0IHRoZSBuZXh0IGludGVycnVwdCBiaXQgKi8KLQlpZiAobGlzdF9lbXB0eSgmdWhjaS0+dXJiX3JlbW92ZV9saXN0KSkKLQkJdWhjaV9zZXRfbmV4dF9pbnRlcnJ1cHQodWhjaSk7Ci0JbGlzdF9hZGRfdGFpbCgmdXJicC0+dXJiX2xpc3QsICZ1aGNpLT51cmJfcmVtb3ZlX2xpc3QpOworCQl1aGNpX3VubGlua19pc29jaHJvbm91c190ZHModWhjaSwgdXJiKTsKKwl1aGNpX3VubGlua19xaCh1aGNpLCB1cmJwLT5xaCk7CiAKIGRvbmU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWhjaS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVoY2lfZnNicl90aW1lb3V0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQorLyoKKyAqIEZpbmlzaCB1bmxpbmtpbmcgYW4gVVJCIGFuZCBnaXZlIGl0IGJhY2sKKyAqLworc3RhdGljIHZvaWQgdWhjaV9naXZlYmFja191cmIoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV9xaCAqcWgsCisJCXN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitfX3JlbGVhc2VzKHVoY2ktPmxvY2spCitfX2FjcXVpcmVzKHVoY2ktPmxvY2spCiB7Ci0Jc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IHVoY2lfdGQgKnRkOwotCWludCBjb3VudCA9IDA7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKSB1cmItPmhjcHJpdjsKIAotCXVoY2lfZGVjX2ZzYnIodWhjaSwgdXJiKTsKKwkvKiBJc29jaHJvbm91cyBURHMgZ2V0IHVubGlua2VkIGRpcmVjdGx5IGZyb20gdGhlIGZyYW1lIGxpc3QgKi8KKwlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykKKwkJdWhjaV91bmxpbmtfaXNvY2hyb25vdXNfdGRzKHVoY2ksIHVyYik7CiAKLQl1cmJwLT5mc2JyX3RpbWVvdXQgPSAxOworCS8qIElmIHRoZSBVUkIgaXNuJ3QgZmlyc3Qgb24gaXRzIHF1ZXVlLCBhZGp1c3QgdGhlIGxpbmsgcG9pbnRlcgorCSAqIG9mIHRoZSBsYXN0IFREIGluIHRoZSBwcmV2aW91cyBVUkIuICovCisJZWxzZSBpZiAocWgtPnF1ZXVlLm5leHQgIT0gJnVyYnAtPm5vZGUpIHsKKwkJc3RydWN0IHVyYl9wcml2ICpwdXJicDsKKwkJc3RydWN0IHVoY2lfdGQgKnB0ZCwgKmx0ZDsKIAotCS8qCi0JICogSWRlYWxseSB3ZSB3b3VsZCB3YW50IHRvIGZpeCBxaC0+ZWxlbWVudCBhcyB3ZWxsLCBidXQgaXQncwotCSAqIHJlYWQvd3JpdGUgYnkgdGhlIEhDLCBzbyB0aGF0IGNhbiBpbnRyb2R1Y2UgYSByYWNlLiBJdCdzIG5vdAotCSAqIHJlYWxseSB3b3J0aCB0aGUgaGFzc2xlCi0JICovCi0KLQloZWFkID0gJnVyYnAtPnRkX2xpc3Q7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgaGVhZCwgbGlzdCkgewotCQkvKgotCQkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZG8gdGhlIGxhc3Qgb25lIChzaW5jZSBpdCdsbCBoYXZlIHRoZQotCQkgKiBURVJNIGJpdCBzZXQpIGFzIHdlbGwgYXMgd2Ugc2tpcCBldmVyeSBzbyBtYW55IFREcyB0bwotCQkgKiBtYWtlIHN1cmUgaXQgZG9lc24ndCBob2cgdGhlIGJhbmR3aWR0aAotCQkgKi8KLQkJaWYgKHRkLT5saXN0Lm5leHQgIT0gaGVhZCAmJiAoY291bnQgJSBERVBUSF9JTlRFUlZBTCkgPT0KLQkJCQkoREVQVEhfSU5URVJWQUwgLSAxKSkKLQkJCXRkLT5saW5rIHw9IFVIQ0lfUFRSX0RFUFRIOwotCi0JCWNvdW50Kys7CisJCXB1cmJwID0gbGlzdF9lbnRyeSh1cmJwLT5ub2RlLnByZXYsIHN0cnVjdCB1cmJfcHJpdiwgbm9kZSk7CisJCXB0ZCA9IGxpc3RfZW50cnkocHVyYnAtPnRkX2xpc3QucHJldiwgc3RydWN0IHVoY2lfdGQsCisJCQkJbGlzdCk7CisJCWx0ZCA9IGxpc3RfZW50cnkodXJicC0+dGRfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwKKwkJCQlsaXN0KTsKKwkJcHRkLT5saW5rID0gbHRkLT5saW5rOwogCX0KIAotCXJldHVybiAwOworCS8qIFRha2UgdGhlIFVSQiBvZmYgdGhlIFFIJ3MgcXVldWUuICBJZiB0aGUgcXVldWUgaXMgbm93IGVtcHR5LAorCSAqIHRoaXMgaXMgYSBwZXJmZWN0IHRpbWUgZm9yIGEgdG9nZ2xlIGZpeHVwLiAqLworCWxpc3RfZGVsX2luaXQoJnVyYnAtPm5vZGUpOworCWlmIChsaXN0X2VtcHR5KCZxaC0+cXVldWUpICYmIHFoLT5uZWVkc19maXh1cCkgeworCQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSwgcWgtPmluaXRpYWxfdG9nZ2xlKTsKKwkJcWgtPm5lZWRzX2ZpeHVwID0gMDsKKwl9CisKKwl1aGNpX2RlY19mc2JyKHVoY2ksIHVyYik7CS8qIFNhZmUgc2luY2UgaXQgY2hlY2tzICovCisJdWhjaV9mcmVlX3VyYl9wcml2KHVoY2ksIHVyYnApOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJLyogUmVsZWFzZSBiYW5kd2lkdGggZm9yIEludGVycnVwdCBvciBJc29jLiB0cmFuc2ZlcnMgKi8KKwkJaWYgKHVyYi0+YmFuZHdpZHRoKQorCQkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDEpOworCQlicmVhazsKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkvKiBSZWxlYXNlIGJhbmR3aWR0aCBmb3IgSW50ZXJydXB0IG9yIElzb2MuIHRyYW5zZmVycyAqLworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVsZWFzZSBpZiB3ZSBoYXZlIGEgcXVldWVkIFVSQiAqLworCQlpZiAobGlzdF9lbXB0eSgmcWgtPnF1ZXVlKSAmJiB1cmItPmJhbmR3aWR0aCkKKwkJCXVzYl9yZWxlYXNlX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCAwKTsKKwkJZWxzZQorCQkJLyogYmFuZHdpZHRoIHdhcyBwYXNzZWQgb24gdG8gcXVldWVkIFVSQiwgKi8KKwkJCS8qIHNvIGRvbid0IGxldCB1c2JfdW5saW5rX3VyYigpIHJlbGVhc2UgaXQgKi8KKwkJCXVyYi0+YmFuZHdpZHRoID0gMDsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2soJnVoY2ktPmxvY2spOworCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHVoY2lfdG9faGNkKHVoY2kpLCB1cmIsIHJlZ3MpOworCXNwaW5fbG9jaygmdWhjaS0+bG9jayk7CisKKwkvKiBJZiB0aGUgcXVldWUgaXMgbm93IGVtcHR5LCB3ZSBjYW4gdW5saW5rIHRoZSBRSCBhbmQgZ2l2ZSB1cCBpdHMKKwkgKiByZXNlcnZlZCBiYW5kd2lkdGguICovCisJaWYgKGxpc3RfZW1wdHkoJnFoLT5xdWV1ZSkpIHsKKwkJdWhjaV91bmxpbmtfcWgodWhjaSwgcWgpOworCisJCS8qIEJhbmR3aWR0aCBzdHVmZiBub3QgeWV0IGltcGxlbWVudGVkICovCisJfQogfQogCi1zdGF0aWMgdm9pZCB1aGNpX2ZyZWVfcGVuZGluZ19xaHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQorLyoKKyAqIFNjYW4gdGhlIFVSQnMgaW4gYSBRSCdzIHF1ZXVlCisgKi8KKyNkZWZpbmUgUUhfRklOSVNIRURfVU5MSU5LSU5HKHFoKQkJCVwKKwkJKHFoLT5zdGF0ZSA9PSBRSF9TVEFURV9VTkxJTktJTkcgJiYJXAorCQl1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHFoLT51bmxpbmtfZnJhbWUpCisKK3N0YXRpYyB2b2lkIHVoY2lfc2Nhbl9xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpxaCwKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHVoY2lfcWggKnFoLCAqdG1wOworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHN0YXR1czsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxaCwgdG1wLCAmdWhjaS0+cWhfcmVtb3ZlX2xpc3QsIHJlbW92ZV9saXN0KSB7Ci0JCWxpc3RfZGVsX2luaXQoJnFoLT5yZW1vdmVfbGlzdCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZxaC0+cXVldWUpKSB7CisJCXVyYnAgPSBsaXN0X2VudHJ5KHFoLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgdXJiX3ByaXYsIG5vZGUpOworCQl1cmIgPSB1cmJwLT51cmI7CiAKLQkJdWhjaV9mcmVlX3FoKHVoY2ksIHFoKTsKKwkJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCQljYXNlIFBJUEVfQ09OVFJPTDoKKwkJCXN0YXR1cyA9IHVoY2lfcmVzdWx0X2NvbnRyb2wodWhjaSwgdXJiKTsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCQlzdGF0dXMgPSB1aGNpX3Jlc3VsdF9pc29jaHJvbm91cyh1aGNpLCB1cmIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CS8qIFBJUEVfQlVMSyBvciBQSVBFX0lOVEVSUlVQVCAqLworCQkJc3RhdHVzID0gdWhjaV9yZXN1bHRfY29tbW9uKHVoY2ksIHVyYik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJCWJyZWFrOworCisJCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykJLyogTm90IGRlcXVldWVkICovCisJCQl1cmItPnN0YXR1cyA9IHN0YXR1czsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCXNwaW5fdW5sb2NrKCZ1cmItPmxvY2spOworCisJCS8qIERlcXVldWVkIGJ1dCBjb21wbGV0ZWQgVVJCcyBjYW4ndCBiZSBnaXZlbiBiYWNrIHVubGVzcworCQkgKiB0aGUgUUggaXMgc3RvcHBlZCBvciBoYXMgZmluaXNoZWQgdW5saW5raW5nLiAqLworCQlpZiAoc3RhdHVzID09IC1FQ09OTlJFU0VUICYmCisJCQkJIShxaC0+aXNfc3RvcHBlZCB8fCBRSF9GSU5JU0hFRF9VTkxJTktJTkcocWgpKSkKKwkJCXJldHVybjsKKworCQl1aGNpX2dpdmViYWNrX3VyYih1aGNpLCBxaCwgdXJiLCByZWdzKTsKKwkJaWYgKHFoLT5pc19zdG9wcGVkKQorCQkJYnJlYWs7CiAJfQorCisJLyogSWYgdGhlIFFIIGlzIG5laXRoZXIgc3RvcHBlZCBub3IgZmluaXNoZWQgdW5saW5raW5nIChub3JtYWwgY2FzZSksCisJICogb3VyIHdvcmsgaGVyZSBpcyBkb25lLiAqLworIHJlc3RhcnQ6CisJaWYgKCEocWgtPmlzX3N0b3BwZWQgfHwgUUhfRklOSVNIRURfVU5MSU5LSU5HKHFoKSkpCisJCXJldHVybjsKKworCS8qIE90aGVyd2lzZSBnaXZlIGJhY2sgZWFjaCBvZiB0aGUgZGVxdWV1ZWQgVVJCcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodXJicCwgJnFoLT5xdWV1ZSwgbm9kZSkgeworCQl1cmIgPSB1cmJwLT51cmI7CisJCWlmICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCXVoY2lfc2F2ZV90b2dnbGUocWgsIHVyYik7CisJCQl1aGNpX2dpdmViYWNrX3VyYih1aGNpLCBxaCwgdXJiLCByZWdzKTsKKwkJCWdvdG8gcmVzdGFydDsKKwkJfQorCX0KKwlxaC0+aXNfc3RvcHBlZCA9IDA7CisKKwkvKiBUaGVyZSBhcmUgbm8gbW9yZSBkZXF1ZXVlZCBVUkJzLiAgSWYgdGhlcmUgYXJlIHN0aWxsIFVSQnMgb24gdGhlCisJICogcXVldWUsIHRoZSBRSCBjYW4gbm93IGJlIHJlLWFjdGl2YXRlZC4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnFoLT5xdWV1ZSkpIHsKKwkJaWYgKHFoLT5uZWVkc19maXh1cCkKKwkJCXVoY2lfZml4dXBfdG9nZ2xlcyhxaCwgMCk7CisJCXVoY2lfYWN0aXZhdGVfcWgodWhjaSwgcWgpOworCX0KKworCS8qIFRoZSBxdWV1ZSBpcyBlbXB0eS4gIFRoZSBRSCBjYW4gYmVjb21lIGlkbGUgaWYgaXQgaXMgZnVsbHkKKwkgKiB1bmxpbmtlZC4gKi8KKwllbHNlIGlmIChRSF9GSU5JU0hFRF9VTkxJTktJTkcocWgpKQorCQl1aGNpX21ha2VfcWhfaWRsZSh1aGNpLCBxaCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVoY2lfZnJlZV9wZW5kaW5nX3RkcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCkBAIC0xNDQ4LDQzICsxMzQ3LDEzIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZAotdWhjaV9maW5pc2hfdXJiKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi1fX3JlbGVhc2VzKHVoY2ktPmxvY2spCi1fX2FjcXVpcmVzKHVoY2ktPmxvY2spCi17Ci0Jc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKLQotCXVoY2lfZGVzdHJveV91cmJfcHJpdih1aGNpLCB1cmIpOwotCi0Jc3Bpbl91bmxvY2soJnVoY2ktPmxvY2spOwotCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCByZWdzKTsKLQlzcGluX2xvY2soJnVoY2ktPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZCB1aGNpX2ZpbmlzaF9jb21wbGV0aW9uKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHVyYl9wcml2ICp1cmJwLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVyYnAsIHRtcCwgJnVoY2ktPmNvbXBsZXRlX2xpc3QsIHVyYl9saXN0KSB7Ci0JCXN0cnVjdCB1cmIgKnVyYiA9IHVyYnAtPnVyYjsKLQotCQlsaXN0X2RlbF9pbml0KCZ1cmJwLT51cmJfbGlzdCk7Ci0JCXVoY2lfZmluaXNoX3VyYih1aGNpX3RvX2hjZCh1aGNpKSwgdXJiLCByZWdzKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHVoY2lfcmVtb3ZlX3BlbmRpbmdfdXJicHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQotewotCi0JLyogU3BsaWNlIHRoZSB1cmJfcmVtb3ZlX2xpc3Qgb250byB0aGUgZW5kIG9mIHRoZSBjb21wbGV0ZV9saXN0ICovCi0JbGlzdF9zcGxpY2VfaW5pdCgmdWhjaS0+dXJiX3JlbW92ZV9saXN0LCB1aGNpLT5jb21wbGV0ZV9saXN0LnByZXYpOwotfQotCi0vKiBQcm9jZXNzIGV2ZW50cyBpbiB0aGUgc2NoZWR1bGUsIGJ1dCBvbmx5IGluIG9uZSB0aHJlYWQgYXQgYSB0aW1lICovCisvKgorICogUHJvY2VzcyBldmVudHMgaW4gdGhlIHNjaGVkdWxlLCBidXQgb25seSBpbiBvbmUgdGhyZWFkIGF0IGEgdGltZQorICovCiBzdGF0aWMgdm9pZCB1aGNpX3NjYW5fc2NoZWR1bGUoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAsICp0bXA7CisJaW50IGk7CisJc3RydWN0IHVoY2lfcWggKnFoOwogCiAJLyogRG9uJ3QgYWxsb3cgcmUtZW50cmFudCBjYWxscyAqLwogCWlmICh1aGNpLT5zY2FuX2luX3Byb2dyZXNzKSB7CkBAIC0xNDk4LDYwICsxMzY3LDM5IEBACiAJdWhjaV9jbGVhcl9uZXh0X2ludGVycnVwdCh1aGNpKTsKIAl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKIAotCWlmICh1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHVoY2ktPnFoX3JlbW92ZV9hZ2UpCi0JCXVoY2lfZnJlZV9wZW5kaW5nX3Focyh1aGNpKTsKIAlpZiAodWhjaS0+ZnJhbWVfbnVtYmVyICsgdWhjaS0+aXNfc3RvcHBlZCAhPSB1aGNpLT50ZF9yZW1vdmVfYWdlKQogCQl1aGNpX2ZyZWVfcGVuZGluZ190ZHModWhjaSk7Ci0JaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+dXJiX3JlbW92ZV9hZ2UpCi0JCXVoY2lfcmVtb3ZlX3BlbmRpbmdfdXJicHModWhjaSk7CiAKLQkvKiBXYWxrIHRoZSBsaXN0IG9mIHBlbmRpbmcgVVJCcyB0byBzZWUgd2hpY2ggb25lcyBjb21wbGV0ZWQKLQkgKiAobXVzdCBiZSBfc2FmZSBiZWNhdXNlIHVoY2lfdHJhbnNmZXJfcmVzdWx0KCkgZGVxdWV1ZXMgVVJCcykgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodXJicCwgdG1wLCAmdWhjaS0+dXJiX2xpc3QsIHVyYl9saXN0KSB7Ci0JCXN0cnVjdCB1cmIgKnVyYiA9IHVyYnAtPnVyYjsKLQotCQkvKiBDaGVja3MgdGhlIHN0YXR1cyBhbmQgZG9lcyBhbGwgb2YgdGhlIG1hZ2ljIG5lY2Vzc2FyeSAqLwotCQl1aGNpX3RyYW5zZmVyX3Jlc3VsdCh1aGNpLCB1cmIpOwotCX0KLQl1aGNpX2ZpbmlzaF9jb21wbGV0aW9uKHVoY2ksIHJlZ3MpOwotCi0JLyogSWYgdGhlIGNvbnRyb2xsZXIgaXMgc3RvcHBlZCwgd2UgY2FuIGZpbmlzaCB0aGVzZSBvZmYgcmlnaHQgbm93ICovCi0JaWYgKHVoY2ktPmlzX3N0b3BwZWQpIHsKLQkJdWhjaV9mcmVlX3BlbmRpbmdfcWhzKHVoY2kpOwotCQl1aGNpX2ZyZWVfcGVuZGluZ190ZHModWhjaSk7Ci0JCXVoY2lfcmVtb3ZlX3BlbmRpbmdfdXJicHModWhjaSk7CisJLyogR28gdGhyb3VnaCBhbGwgdGhlIFFIIHF1ZXVlcyBhbmQgcHJvY2VzcyB0aGUgVVJCcyBpbiBlYWNoIG9uZSAqLworCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUggLSAxOyArK2kpIHsKKwkJdWhjaS0+bmV4dF9xaCA9IGxpc3RfZW50cnkodWhjaS0+c2tlbHFoW2ldLT5ub2RlLm5leHQsCisJCQkJc3RydWN0IHVoY2lfcWgsIG5vZGUpOworCQl3aGlsZSAoKHFoID0gdWhjaS0+bmV4dF9xaCkgIT0gdWhjaS0+c2tlbHFoW2ldKSB7CisJCQl1aGNpLT5uZXh0X3FoID0gbGlzdF9lbnRyeShxaC0+bm9kZS5uZXh0LAorCQkJCQlzdHJ1Y3QgdWhjaV9xaCwgbm9kZSk7CisJCQl1aGNpX3NjYW5fcWgodWhjaSwgcWgsIHJlZ3MpOworCQl9CiAJfQogCiAJaWYgKHVoY2ktPm5lZWRfcmVzY2FuKQogCQlnb3RvIHJlc2NhbjsKIAl1aGNpLT5zY2FuX2luX3Byb2dyZXNzID0gMDsKIAotCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT51cmJfcmVtb3ZlX2xpc3QpICYmCi0JICAgIGxpc3RfZW1wdHkoJnVoY2ktPnRkX3JlbW92ZV9saXN0KSAmJgotCSAgICBsaXN0X2VtcHR5KCZ1aGNpLT5xaF9yZW1vdmVfbGlzdCkpCisJLyogSWYgdGhlIGNvbnRyb2xsZXIgaXMgc3RvcHBlZCwgd2UgY2FuIGZpbmlzaCB0aGVzZSBvZmYgcmlnaHQgbm93ICovCisJaWYgKHVoY2ktPmlzX3N0b3BwZWQpCisJCXVoY2lfZnJlZV9wZW5kaW5nX3Rkcyh1aGNpKTsKKworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT50ZF9yZW1vdmVfbGlzdCkgJiYKKwkJCWxpc3RfZW1wdHkoJnVoY2ktPnNrZWxfdW5saW5rX3FoLT5ub2RlKSkKIAkJdWhjaV9jbGVhcl9uZXh0X2ludGVycnVwdCh1aGNpKTsKIAllbHNlCiAJCXVoY2lfc2V0X25leHRfaW50ZXJydXB0KHVoY2kpOwotCi0JLyogV2FrZSB1cCBhbnlvbmUgd2FpdGluZyBmb3IgYW4gVVJCIHRvIGNvbXBsZXRlICovCi0Jd2FrZV91cF9hbGwoJnVoY2ktPndhaXRxaCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrX2ZzYnIoc3RydWN0IHVoY2lfaGNkICp1aGNpKQogewotCXN0cnVjdCB1cmJfcHJpdiAqdXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVwLCAmdWhjaS0+dXJiX2xpc3QsIHVyYl9saXN0KSB7Ci0JCXN0cnVjdCB1cmIgKnUgPSB1cC0+dXJiOwotCi0JCXNwaW5fbG9jaygmdS0+bG9jayk7Ci0KLQkJLyogQ2hlY2sgaWYgdGhlIEZTQlIgdGltZWQgb3V0ICovCi0JCWlmICh1cC0+ZnNiciAmJiAhdXAtPmZzYnJfdGltZW91dCAmJiB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHVwLT5mc2JydGltZSArIElETEVfVElNRU9VVCkpCi0JCQl1aGNpX2ZzYnJfdGltZW91dCh1aGNpLCB1KTsKLQotCQlzcGluX3VubG9jaygmdS0+bG9jayk7Ci0JfQorCS8qIEZvciBub3csIGRvbid0IHNjYW4gVVJCcyBmb3IgRlNCUiB0aW1lb3V0cy4KKwkgKiBBZGQgaXQgYmFjayBpbiBsYXRlci4uLiAqLwogCiAJLyogUmVhbGx5IGRpc2FibGUgRlNCUiAqLwogCWlmICghdWhjaS0+ZnNiciAmJiB1aGNpLT5mc2JydGltZW91dCAmJiB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHVoY2ktPmZzYnJ0aW1lb3V0KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwppbmRleCAwNDk4NzExLi4wOGRhZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwpAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTY5LDcgKzE3MCw3IEBACiAJaW50CQkJb3V0X2NvdW50OwkvLyBCeXRlcyBpbiB0aGUgYnVmZmVyCiAKIAlpbnQJCQlvcGVuOwkJLy8gQ2FtZXJhIGRldmljZSBvcGVuID8KLQlzdHJ1Y3Qgc2VtYXBob3JlCWlvX2xvY2s7CS8vIElPIC1sb2NrCisJc3RydWN0IG11dGV4CQlpb19sb2NrOwkvLyBJTyAtbG9jawogCiAJY2hhciAJCQlpbiBbOF07CQkvLyBDb21tYW5kIElucHV0IEJ1ZmZlcgogCWludCAgCQkJaW5fY291bnQ7CkBAIC00OTcsNyArNDk4LDcgQEAKIAogCWluZm8gKCJGb3VuZCBNdXN0ZWsgTURDODAwIG9uIFVTQi4iKTsKIAotCWRvd24gKCZtZGM4MDAtPmlvX2xvY2spOworCW11dGV4X2xvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZtZGM4MDBfY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKQEAgLTU0Miw3ICs1NDMsNyBAQAogCiAJbWRjODAwLT5zdGF0ZT1SRUFEWTsKIAotCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApOwogCXJldHVybiAwOwpAQCAtNjIwLDcgKzYyMSw3IEBACiAJaW50IHJldHZhbD0wOwogCWludCBlcnJuPTA7CiAKLQlkb3duICgmbWRjODAwLT5pb19sb2NrKTsKKwltdXRleF9sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQogCWlmIChtZGM4MDAtPnN0YXRlID09IE5PVF9DT05ORUNURUQpCiAJewpAQCAtNjU2LDcgKzY1Nyw3IEBACiAJZGJnICgiTXVzdGVrIE1EQzgwMCBkZXZpY2Ugb3BlbmVkLiIpOwogCiBlcnJvcl9vdXQ6Ci0JdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAlyZXR1cm4gZXJybjsKIH0KIApAQCAtNjY5LDcgKzY3MCw3IEBACiAJaW50IHJldHZhbD0wOwogCWRiZyAoIk11c3RlayBNREM4MDAgZGV2aWNlIGNsb3NlZC4iKTsKIAotCWRvd24gKCZtZGM4MDAtPmlvX2xvY2spOworCW11dGV4X2xvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJaWYgKG1kYzgwMC0+b3BlbiAmJiAobWRjODAwLT5zdGF0ZSAhPSBOT1RfQ09OTkVDVEVEKSkKIAl7CiAJCXVzYl9raWxsX3VyYihtZGM4MDAtPmlycV91cmIpOwpAQCAtNjgyLDcgKzY4Myw3IEBACiAJCXJldHZhbD0tRUlPOwogCX0KIAotCXVwKCZtZGM4MDAtPmlvX2xvY2spOworCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02OTUsMjEgKzY5NiwyMSBAQAogCXNpemVfdCBsZWZ0PWxlbiwgc3RzPWxlbjsgLyogc2luZ2xlIHRyYW5zZmVyIHNpemUgKi8KIAljaGFyIF9fdXNlciAqcHRyID0gYnVmOwogCi0JZG93biAoJm1kYzgwMC0+aW9fbG9jayk7CisJbXV0ZXhfbG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQogCXsKLQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWlmIChtZGM4MDAtPnN0YXRlID09IFdPUktJTkcpCiAJewogCQl3YXJuICgiSWxsZWdhbCBTdGF0ZSBcIndvcmtpbmdcIiByZWFjaGVkIGR1cmluZyByZWFkID8hIik7Ci0JCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAoIW1kYzgwMC0+b3BlbikKIAl7Ci0JCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNzE3LDcgKzcxOCw3IEBACiAJewogCQlpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSAKIAkJewotCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJcmV0dXJuIC1FSU5UUjsKIAkJfQogCkBAIC03MzYsNyArNzM3LDcgQEAKIAkJCQlpZiAodXNiX3N1Ym1pdF91cmIgKG1kYzgwMC0+ZG93bmxvYWRfdXJiLCBHRlBfS0VSTkVMKSkKIAkJCQl7CiAJCQkJCWVyciAoIkNhbid0IHN1Ym1pdCBkb3dubG9hZCB1cmIgKHN0YXR1cz0laSkiLG1kYzgwMC0+ZG93bmxvYWRfdXJiLT5zdGF0dXMpOwotCQkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJCQkJcmV0dXJuIGxlbi1sZWZ0OwogCQkJCX0KIAkJCQl3YWl0X2V2ZW50X3RpbWVvdXQobWRjODAwLT5kb3dubG9hZF93YWl0LCBtZGM4MDAtPmRvd25sb2FkZWQsCkBAIC03NDUsMTQgKzc0NiwxNCBAQAogCQkJCWlmIChtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzICE9IDApCiAJCQkJewogCQkJCQllcnIgKCJyZXF1ZXN0IGRvd25sb2FkLWJ5dGVzIGZhaWxzIChzdGF0dXM9JWkpIixtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzKTsKLQkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJCXJldHVybiBsZW4tbGVmdDsKIAkJCQl9CiAJCQl9CiAJCQllbHNlCiAJCQl7CiAJCQkJLyogTm8gbW9yZSBieXRlcyAtPiB0aGF0J3MgYW4gZXJyb3IqLwotCQkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCX0KQEAgLTc2MSw3ICs3NjIsNyBAQAogCQkJLyogQ29weSBCeXRlcyAqLwogCQkJaWYgKGNvcHlfdG9fdXNlcihwdHIsICZtZGM4MDAtPm91dCBbbWRjODAwLT5vdXRfcHRyXSwKIAkJCQkJCXN0cykpIHsKLQkJCQl1cCgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAJCQlwdHIrPXN0czsKQEAgLTc3MCw3ICs3NzEsNyBAQAogCQl9CiAJfQogCi0JdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAlyZXR1cm4gbGVuLWxlZnQ7CiB9CiAKQEAgLTc4NSwxNSArNzg2LDE1IEBACiB7CiAJc2l6ZV90IGk9MDsKIAotCWRvd24gKCZtZGM4MDAtPmlvX2xvY2spOworCW11dGV4X2xvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJaWYgKG1kYzgwMC0+c3RhdGUgIT0gUkVBRFkpCiAJewotCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJaWYgKCFtZGM4MDAtPm9wZW4gKQogCXsKLQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC04MDIsMTMgKzgwMywxMyBAQAogCQl1bnNpZ25lZCBjaGFyIGM7CiAJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIAogCQl7Ci0JCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQlyZXR1cm4gLUVJTlRSOwogCQl9CiAJCQogCQlpZihnZXRfdXNlcihjLCBidWYraSkpCiAJCXsKLQkJCXVwKCZtZGM4MDAtPmlvX2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIApAQCAtODI5LDcgKzgzMCw3IEBACiAJCX0KIAkJZWxzZQogCQl7Ci0JCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCkBAIC04NDEsNyArODQyLDcgQEAKIAkJCWlmIChtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKDAsVE9fR0VUX1JFQURZKSkKIAkJCXsKIAkJCQllcnIgKCJDYW1lcmEgZGlkbid0IGdldCByZWFkeS5cbiIpOwotCQkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAKQEAgLTg1Myw3ICs4NTQsNyBAQAogCQkJaWYgKHVzYl9zdWJtaXRfdXJiIChtZGM4MDAtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCkpCiAJCQl7CiAJCQkJZXJyICgic3VibWl0dGluZyB3cml0ZSB1cmIgZmFpbHMgKHN0YXR1cz0laSkiLCBtZGM4MDAtPndyaXRlX3VyYi0+c3RhdHVzKTsKLQkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQkJd2FpdF9ldmVudF90aW1lb3V0KG1kYzgwMC0+d3JpdGVfd2FpdCwgbWRjODAwLT53cml0dGVuLCBUT19XUklURV9HRVRfUkVBRFkqSFovMTAwMCk7CkBAIC04NjEsNyArODYyLDcgQEAKIAkJCWlmIChtZGM4MDAtPnN0YXRlID09IFdPUktJTkcpCiAJCQl7CiAJCQkJdXNiX2tpbGxfdXJiKG1kYzgwMC0+d3JpdGVfdXJiKTsKLQkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQogCkBAIC04NzMsNyArODc0LDcgQEAKIAkJCQkJewogCQkJCQkJZXJyICgiY2FsbCAweDA3IGJlZm9yZSAweDA1LDB4M2UiKTsKIAkJCQkJCW1kYzgwMC0+c3RhdGU9UkVBRFk7Ci0JCQkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJCQltdXRleF91bmxvY2soJm1kYzgwMC0+aW9fbG9jayk7CiAJCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQkJfQogCQkJCQltZGM4MDAtPnBpY19sZW49LTE7CkBAIC04OTIsNyArODkzLDcgQEAKIAkJCQkJCWlmIChtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKDEsVE9fUkVBRF9GUk9NX0lSUSkpCiAJCQkJCQl7CiAJCQkJCQkJZXJyICgicmVxdWVzdGluZyBhbnN3ZXIgZnJvbSBpcnEgZmFpbHMiKTsKLQkJCQkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJCQkJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCQkJCQkJCXJldHVybiAtRUlPOwogCQkJCQkJfQogCkBAIC05MjAsNyArOTIxLDcgQEAKIAkJCQkJCWlmIChtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKDAsVE9fREVGQVVMVF9DT01NQU5EKSkKIAkJCQkJCXsKIAkJCQkJCQllcnIgKCJDb21tYW5kIFRpbWVvdXQuIik7Ci0JCQkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQkJCW11dGV4X3VubG9jaygmbWRjODAwLT5pb19sb2NrKTsKIAkJCQkJCQlyZXR1cm4gLUVJTzsKIAkJCQkJCX0KIAkJCQkJfQpAQCAtOTMwLDcgKzkzMSw3IEBACiAJCX0KIAkJaSsrOwogCX0KLQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZtZGM4MDAtPmlvX2xvY2spOwogCXJldHVybiBpOwogfQogCkBAIC05NzgsMTUgKzk3OSwxMyBAQAogewogCWludCByZXR2YWwgPSAtRU5PREVWOwogCS8qIEFsbG9jYXRlIE1lbW9yeSAqLwotCW1kYzgwMD1rbWFsbG9jIChzaXplb2YgKHN0cnVjdCBtZGM4MDBfZGF0YSksIEdGUF9LRVJORUwpOworCW1kYzgwMD1remFsbG9jIChzaXplb2YgKHN0cnVjdCBtZGM4MDBfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghbWRjODAwKQogCQlnb3RvIGNsZWFudXBfb25fZmFpbDsKIAotCW1lbXNldChtZGM4MDAsIDAsIHNpemVvZihzdHJ1Y3QgbWRjODAwX2RhdGEpKTsKIAltZGM4MDAtPmRldiA9IE5VTEw7Ci0JbWRjODAwLT5vcGVuPTA7CiAJbWRjODAwLT5zdGF0ZT1OT1RfQ09OTkVDVEVEOwotCWluaXRfTVVURVggKCZtZGM4MDAtPmlvX2xvY2spOworCW11dGV4X2luaXQgKCZtZGM4MDAtPmlvX2xvY2spOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCAoJm1kYzgwMC0+aXJxX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZtZGM4MDAtPndyaXRlX3dhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKaW5kZXggMjg1MzhkYi4uMmEwZTE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAlyYyA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoZGVzYy0+dXNiX2RldiwgZGVzYy0+dXNiX2ludGYpOwogCWlmIChyYyA8IDApCiAJCXJldHVybiBGQUlMRUQ7Ci0JcmVzdWx0ID0gdXNiX3Jlc2V0X2RldmljZShkZXNjLT51c2JfZGV2KTs7CisJcmVzdWx0ID0gdXNiX3Jlc2V0X2RldmljZShkZXNjLT51c2JfZGV2KTsKIAlpZiAocmMpCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRlc2MtPnVzYl9kZXYpOwogCXJldHVybiByZXN1bHQgPyBGQUlMRUQgOiBTVUNDRVNTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jIGIvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCmluZGV4IGY3YmRjNTAuLjk5Zjk4NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMKQEAgLTE1OSw4ICsxNTksNiBAQAogICovCiAjZGVmaW5lIEZJTFRFUl9USU1FIChIWiAvIDIwKQogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChkaXNjb25uZWN0X3NlbSk7Ci0KIHN0cnVjdCBhdGlfcmVtb3RlIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKaW5kZXggNzcyNDc4MC4uZDRiZjE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCkBAIC02Niw5ICs2Niw4IEBACiAJaWYgKHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtpZF0pCiAJCXJldHVybiByZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbaWRdOwogCi0JaWYgKCEocmVwb3J0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9yZXBvcnQpLCBHRlBfS0VSTkVMKSkpCisJaWYgKCEocmVwb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9yZXBvcnQpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChyZXBvcnQsIDAsIHNpemVvZihzdHJ1Y3QgaGlkX3JlcG9ydCkpOwogCiAJaWYgKGlkICE9IDApCiAJCXJlcG9ydF9lbnVtLT5udW1iZXJlZCA9IDE7CkBAIC05NywxMiArOTYsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoIShmaWVsZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZmllbGQpICsgdXNhZ2VzICogc2l6ZW9mKHN0cnVjdCBoaWRfdXNhZ2UpCisJaWYgKCEoZmllbGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX2ZpZWxkKSArIHVzYWdlcyAqIHNpemVvZihzdHJ1Y3QgaGlkX3VzYWdlKQogCQkrIHZhbHVlcyAqIHNpemVvZih1bnNpZ25lZCksIEdGUF9LRVJORUwpKSkgcmV0dXJuIE5VTEw7CiAKLQltZW1zZXQoZmllbGQsIDAsIHNpemVvZihzdHJ1Y3QgaGlkX2ZpZWxkKSArIHVzYWdlcyAqIHNpemVvZihzdHJ1Y3QgaGlkX3VzYWdlKQotCQkrIHZhbHVlcyAqIHNpemVvZih1bnNpZ25lZCkpOwotCiAJZmllbGQtPmluZGV4ID0gcmVwb3J0LT5tYXhmaWVsZCsrOwogCXJlcG9ydC0+ZmllbGRbZmllbGQtPmluZGV4XSA9IGZpZWxkOwogCWZpZWxkLT51c2FnZSA9IChzdHJ1Y3QgaGlkX3VzYWdlICopKGZpZWxkICsgMSk7CkBAIC02NTEsMTcgKzY0NywxNCBAQAogCQloaWRfcGFyc2VyX3Jlc2VydmVkCiAJfTsKIAotCWlmICghKGRldmljZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoZGV2aWNlLCAwLCBzaXplb2Yoc3RydWN0IGhpZF9kZXZpY2UpKTsKIAotCWlmICghKGRldmljZS0+Y29sbGVjdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgorCWlmICghKGRldmljZS0+Y29sbGVjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgogCQkJCSAgIEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUywgR0ZQX0tFUk5FTCkpKSB7CiAJCWtmcmVlKGRldmljZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQoZGV2aWNlLT5jb2xsZWN0aW9uLCAwLCBzaXplb2Yoc3RydWN0IGhpZF9jb2xsZWN0aW9uKSAqCi0JCUhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUyk7CiAJZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUgPSBISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKQpAQCAtNjc1LDEzICs2NjgsMTIgQEAKIAltZW1jcHkoZGV2aWNlLT5yZGVzYywgc3RhcnQsIHNpemUpOwogCWRldmljZS0+cnNpemUgPSBzaXplOwogCi0JaWYgKCEocGFyc2VyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9wYXJzZXIpLCBHRlBfS0VSTkVMKSkpIHsKKwlpZiAoIShwYXJzZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlciksIEdGUF9LRVJORUwpKSkgewogCQlrZnJlZShkZXZpY2UtPnJkZXNjKTsKIAkJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKIAkJa2ZyZWUoZGV2aWNlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChwYXJzZXIsIDAsIHNpemVvZihzdHJ1Y3QgaGlkX3BhcnNlcikpOwogCXBhcnNlci0+ZGV2aWNlID0gZGV2aWNlOwogCiAJZW5kID0gc3RhcnQgKyBzaXplOwpAQCAtOTExLDYgKzkwMyw5OSBAQAogfQogCiAvKgorICogSW5wdXQgc3VibWlzc2lvbiBhbmQgSS9PIGVycm9yIGhhbmRsZXIuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2lvX2Vycm9yKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOworCisvKiBTdGFydCB1cCB0aGUgaW5wdXQgVVJCICovCitzdGF0aWMgaW50IGhpZF9zdGFydF9pbihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoaWQtPmlubG9jaywgZmxhZ3MpOworCWlmIChoaWQtPm9wZW4gPiAwICYmICF0ZXN0X2JpdChISURfU1VTUEVOREVELCAmaGlkLT5pb2ZsKSAmJgorCQkJIXRlc3RfYW5kX3NldF9iaXQoSElEX0lOX1JVTk5JTkcsICZoaWQtPmlvZmwpKSB7CisJCXJjID0gdXNiX3N1Ym1pdF91cmIoaGlkLT51cmJpbiwgR0ZQX0FUT01JQyk7CisJCWlmIChyYyAhPSAwKQorCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlkLT5pbmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIEkvTyByZXRyeSB0aW1lciByb3V0aW5lICovCitzdGF0aWMgdm9pZCBoaWRfcmV0cnlfdGltZW91dCh1bnNpZ25lZCBsb25nIF9oaWQpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IChzdHJ1Y3QgaGlkX2RldmljZSAqKSBfaGlkOworCisJZGV2X2RiZygmaGlkLT5pbnRmLT5kZXYsICJyZXRyeWluZyBpbnRyIHVyYlxuIik7CisJaWYgKGhpZF9zdGFydF9pbihoaWQpKQorCQloaWRfaW9fZXJyb3IoaGlkKTsKK30KKworLyogV29ya3F1ZXVlIHJvdXRpbmUgdG8gcmVzZXQgdGhlIGRldmljZSAqLworc3RhdGljIHZvaWQgaGlkX3Jlc2V0KHZvaWQgKl9oaWQpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IChzdHJ1Y3QgaGlkX2RldmljZSAqKSBfaGlkOworCWludCByY19sb2NrLCByYzsKKworCWRldl9kYmcoJmhpZC0+aW50Zi0+ZGV2LCAicmVzZXR0aW5nIGRldmljZVxuIik7CisJcmMgPSByY19sb2NrID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldChoaWQtPmRldiwgaGlkLT5pbnRmKTsKKwlpZiAocmNfbG9jayA+PSAwKSB7CisJCXJjID0gdXNiX3Jlc2V0X2RldmljZShoaWQtPmRldik7CisJCWlmIChyY19sb2NrKQorCQkJdXNiX3VubG9ja19kZXZpY2UoaGlkLT5kZXYpOworCX0KKwljbGVhcl9iaXQoSElEX1JFU0VUX1BFTkRJTkcsICZoaWQtPmlvZmwpOworCisJaWYgKHJjID09IDApIHsKKwkJaGlkLT5yZXRyeV9kZWxheSA9IDA7CisJCWlmIChoaWRfc3RhcnRfaW4oaGlkKSkKKwkJCWhpZF9pb19lcnJvcihoaWQpOworCX0gZWxzZSBpZiAoIShyYyA9PSAtRU5PREVWIHx8IHJjID09IC1FSE9TVFVOUkVBQ0ggfHwgcmMgPT0gLUVJTlRSKSkKKwkJZXJyKCJjYW4ndCByZXNldCBkZXZpY2UsICVzLSVzL2lucHV0JWQsIHN0YXR1cyAlZCIsCisJCQkJaGlkLT5kZXYtPmJ1cy0+YnVzX25hbWUsCisJCQkJaGlkLT5kZXYtPmRldnBhdGgsCisJCQkJaGlkLT5pZm51bSwgcmMpOworfQorCisvKiBNYWluIEkvTyBlcnJvciBoYW5kbGVyICovCitzdGF0aWMgdm9pZCBoaWRfaW9fZXJyb3Ioc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZC0+aW5sb2NrLCBmbGFncyk7CisKKwkvKiBTdG9wIHdoZW4gZGlzY29ubmVjdGVkICovCisJaWYgKHVzYl9nZXRfaW50ZmRhdGEoaGlkLT5pbnRmKSA9PSBOVUxMKQorCQlnb3RvIGRvbmU7CisKKwkvKiBXaGVuIGFuIGVycm9yIG9jY3VycywgcmV0cnkgYXQgaW5jcmVhc2luZyBpbnRlcnZhbHMgKi8KKwlpZiAoaGlkLT5yZXRyeV9kZWxheSA9PSAwKSB7CisJCWhpZC0+cmV0cnlfZGVsYXkgPSAxMzsJLyogVGhlbiAyNiwgNTIsIDEwNCwgMTA0LCAuLi4gKi8KKwkJaGlkLT5zdG9wX3JldHJ5ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJfSBlbHNlIGlmIChoaWQtPnJldHJ5X2RlbGF5IDwgMTAwKQorCQloaWQtPnJldHJ5X2RlbGF5ICo9IDI7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBoaWQtPnN0b3BfcmV0cnkpKSB7CisKKwkJLyogUmV0cmllcyBmYWlsZWQsIHNvIGRvIGEgcG9ydCByZXNldCAqLworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX1JFU0VUX1BFTkRJTkcsICZoaWQtPmlvZmwpKSB7CisJCQlpZiAoc2NoZWR1bGVfd29yaygmaGlkLT5yZXNldF93b3JrKSkKKwkJCQlnb3RvIGRvbmU7CisJCQljbGVhcl9iaXQoSElEX1JFU0VUX1BFTkRJTkcsICZoaWQtPmlvZmwpOworCQl9CisJfQorCisJbW9kX3RpbWVyKCZoaWQtPmlvX3JldHJ5LAorCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaGlkLT5yZXRyeV9kZWxheSkpOworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmlubG9jaywgZmxhZ3MpOworfQorCisvKgogICogSW5wdXQgaW50ZXJydXB0IGNvbXBsZXRpb24gaGFuZGxlci4KICAqLwogCkBAIC05MjEsMjUgKzEwMDYsMzUgQEAKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAkJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJCWhpZC0+cmV0cnlfZGVsYXkgPSAwOwogCQkJaGlkX2lucHV0X3JlcG9ydChISURfSU5QVVRfUkVQT1JULCB1cmIsIDEsIHJlZ3MpOwogCQkJYnJlYWs7CiAJCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLwogCQljYXNlIC1FTk9FTlQ6Ci0JCWNhc2UgLUVQRVJNOgogCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLwotCQljYXNlIC1FSUxTRVE6CQkvKiB1bnBsdWcgdGltZW91dCBvbiB1aGNpICovCisJCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZoaWQtPmlvZmwpOwogCQkJcmV0dXJuOworCQljYXNlIC1FSUxTRVE6CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KKwkJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCiAJCWNhc2UgLUVUSU1FRE9VVDoJLyogTkFLICovCi0JCQlicmVhazsKKwkJCWNsZWFyX2JpdChISURfSU5fUlVOTklORywgJmhpZC0+aW9mbCk7CisJCQloaWRfaW9fZXJyb3IoaGlkKTsKKwkJCXJldHVybjsKIAkJZGVmYXVsdDoJCS8qIGVycm9yICovCiAJCQl3YXJuKCJpbnB1dCBpcnEgc3RhdHVzICVkIHJlY2VpdmVkIiwgdXJiLT5zdGF0dXMpOwogCX0KIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgU0xBQl9BVE9NSUMpOwotCWlmIChzdGF0dXMpCi0JCWVycigiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW5wdXQlZCwgc3RhdHVzICVkIiwKLQkJCQloaWQtPmRldi0+YnVzLT5idXNfbmFtZSwgaGlkLT5kZXYtPmRldnBhdGgsCi0JCQkJaGlkLT5pZm51bSwgc3RhdHVzKTsKKwlpZiAoc3RhdHVzKSB7CisJCWNsZWFyX2JpdChISURfSU5fUlVOTklORywgJmhpZC0+aW9mbCk7CisJCWlmIChzdGF0dXMgIT0gLUVQRVJNKSB7CisJCQllcnIoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0JWQsIHN0YXR1cyAlZCIsCisJCQkJCWhpZC0+ZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCQloaWQtPmRldi0+ZGV2cGF0aCwKKwkJCQkJaGlkLT5pZm51bSwgc3RhdHVzKTsKKwkJCWhpZF9pb19lcnJvcihoaWQpOworCQl9CisJfQogfQogCiAvKgpAQCAtMTEwMSw4ICsxMTk2LDkgQEAKIAkJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KIAkJCWJyZWFrOwogCQljYXNlIC1FU0hVVERPV046CS8qIHVucGx1ZyAqLwotCQljYXNlIC1FSUxTRVE6CQkvKiB1bnBsdWcgdGltZW91dCBvbiB1aGNpICovCiAJCQl1bnBsdWcgPSAxOworCQljYXNlIC1FSUxTRVE6CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KKwkJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCiAJCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLwogCQljYXNlIC1FTk9FTlQ6CiAJCQlicmVhazsKQEAgLTExMTksNyArMTIxNSw3IEBACiAKIAlpZiAoaGlkLT5vdXRoZWFkICE9IGhpZC0+b3V0dGFpbCkgewogCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkgewotCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCk7OworCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCk7CiAJCQl3YWtlX3VwKCZoaWQtPndhaXQpOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOwpAQCAtMTE0OSw4ICsxMjQ1LDkgQEAKIAkJCQloaWRfaW5wdXRfcmVwb3J0KGhpZC0+Y3RybFtoaWQtPmN0cmx0YWlsXS5yZXBvcnQtPnR5cGUsIHVyYiwgMCwgcmVncyk7CiAJCQlicmVhazsKIAkJY2FzZSAtRVNIVVRET1dOOgkvKiB1bnBsdWcgKi8KLQkJY2FzZSAtRUlMU0VROgkJLyogdW5wbHVnIHRpbWVjdHJsIG9uIHVoY2kgKi8KIAkJCXVucGx1ZyA9IDE7CisJCWNhc2UgLUVJTFNFUToJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLworCQljYXNlIC1FUFJPVE86CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KIAkJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCiAJCWNhc2UgLUVOT0VOVDoKIAkJY2FzZSAtRVBJUEU6CQkvKiByZXBvcnQgbm90IGF2YWlsYWJsZSAqLwpAQCAtMTI2MywxNCArMTM2MCw5IEBACiAKIGludCBoaWRfb3BlbihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQogewotCWlmIChoaWQtPm9wZW4rKykKLQkJcmV0dXJuIDA7Ci0KLQloaWQtPnVyYmluLT5kZXYgPSBoaWQtPmRldjsKLQotCWlmICh1c2Jfc3VibWl0X3VyYihoaWQtPnVyYmluLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIC1FSU87Ci0KKwkrK2hpZC0+b3BlbjsKKwlpZiAoaGlkX3N0YXJ0X2luKGhpZCkpCisJCWhpZF9pb19lcnJvcihoaWQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDA3LDYgKzE0OTksNyBAQAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAJMHg4MTAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAJMHg4MTA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRFVBTF9VU0JfSk9ZUEFEICAgMHg4ODY2CiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MJCTB4MDdjMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1c0MAkweDE1MDAKQEAgLTE0NTksNiArMTU1Miw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfSFAJCTB4MDNmMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0hQX1VTQkhVQl9LQgkweDAyMGMKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0NSRUFUSVZFTEFCUwkweDA2MmEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DUkVBVElWRUxBQlNfU0lMVkVSQ1JFU1QJMHgwMjAxCisKIC8qCiAgKiBBbHBoYWJldGljYWxseSBzb3J0ZWQgYmxhY2tsaXN0IGJ5IHF1aXJrIHR5cGUuCiAgKi8KQEAgLTE1NzUsOCArMTY3MSwxMCBAQAogCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fNFBPUlRLVk1DLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQlRDLCBVU0JfREVWSUNFX0lEX0JUQ19LRVlCT0FSRCwgSElEX1FVSVJLX05PR0VUfSwKIAl7IFVTQl9WRU5ET1JfSURfQ0hJQ09OWSwgVVNCX0RFVklDRV9JRF9DSElDT05ZX1VTQkhVQl9LQiwgSElEX1FVSVJLX05PR0VUfSwKKwl7IFVTQl9WRU5ET1JfSURfQ1JFQVRJVkVMQUJTLCBVU0JfREVWSUNFX0lEX0NSRUFUSVZFTEFCU19TSUxWRVJDUkVTVCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX0hQLCBVU0JfREVWSUNFX0lEX0hQX1VTQkhVQl9LQiwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1RBTkdUT1AsIFVTQl9ERVZJQ0VfSURfVEFOR1RPUF9VU0JQUzIsIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfRFVBTF9VU0JfSk9ZUEFELCBISURfUVVJUktfTk9HRVQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAogCXsgVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9QT1dFUk1PVVNFLCBISURfUVVJUktfMldIRUVMX1BPV0VSTU9VU0UgfSwKIAl7IFVTQl9WRU5ET1JfSURfQTRURUNILCBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVLCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNyB9LApAQCAtMTc5Myw2ICsxODkxLDEwIEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoaWQtPndhaXQpOwogCisJSU5JVF9XT1JLKCZoaWQtPnJlc2V0X3dvcmssIGhpZF9yZXNldCwgaGlkKTsKKwlzZXR1cF90aW1lcigmaGlkLT5pb19yZXRyeSwgaGlkX3JldHJ5X3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKSBoaWQpOworCisJc3Bpbl9sb2NrX2luaXQoJmhpZC0+aW5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaGlkLT5vdXRsb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaGlkLT5jdHJsbG9jayk7CiAKQEAgLTE4NjEsMTEgKzE5NjMsMTYgQEAKIAlpZiAoIWhpZCkKIAkJcmV0dXJuOwogCisJc3Bpbl9sb2NrX2lycSgmaGlkLT5pbmxvY2spOwkvKiBTeW5jIHdpdGggZXJyb3IgaGFuZGxlciAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZoaWQtPmlubG9jayk7CiAJdXNiX2tpbGxfdXJiKGhpZC0+dXJiaW4pOwogCXVzYl9raWxsX3VyYihoaWQtPnVyYm91dCk7CiAJdXNiX2tpbGxfdXJiKGhpZC0+dXJiY3RybCk7CiAKKwlkZWxfdGltZXJfc3luYygmaGlkLT5pb19yZXRyeSk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwogCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKIAkJaGlkaW5wdXRfZGlzY29ubmVjdChoaWQpOwogCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCkBAIC0xOTQwLDYgKzIwNDcsMTAgQEAKIHsKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CiAKKwlzcGluX2xvY2tfaXJxKCZoaWQtPmlubG9jayk7CS8qIFN5bmMgd2l0aCBlcnJvciBoYW5kbGVyICovCisJc2V0X2JpdChISURfU1VTUEVOREVELCAmaGlkLT5pb2ZsKTsKKwlzcGluX3VubG9ja19pcnEoJmhpZC0+aW5sb2NrKTsKKwlkZWxfdGltZXIoJmhpZC0+aW9fcmV0cnkpOwogCXVzYl9raWxsX3VyYihoaWQtPnVyYmluKTsKIAlkZXZfZGJnKCZpbnRmLT5kZXYsICJzdXNwZW5kXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTE5NTAsMTAgKzIwNjEsOCBAQAogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKIAlpbnQgc3RhdHVzOwogCi0JaWYgKGhpZC0+b3BlbikKLQkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoaGlkLT51cmJpbiwgR0ZQX05PSU8pOwotCWVsc2UKLQkJc3RhdHVzID0gMDsKKwljbGVhcl9iaXQoSElEX1NVU1BFTkRFRCwgJmhpZC0+aW9mbCk7CisJc3RhdHVzID0gaGlkX3N0YXJ0X2luKGhpZCk7CiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1sZ2ZmLmMKaW5kZXggZjgyYzljOS4uZjA3ZDQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtbGdmZi5jCkBAIC0xNTQsMTAgKzE1NCw5IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlwcml2YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxnZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJcHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZ2ZmX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdmF0ZSkKIAkJcmV0dXJuIC0xOwotCW1lbXNldChwcml2YXRlLCAwLCBzaXplb2Yoc3RydWN0IGxnZmZfZGV2aWNlKSk7CiAJaGlkLT5mZl9wcml2YXRlID0gcHJpdmF0ZTsKIAogCS8qIElucHV0IGluaXQgKi8KQEAgLTIyOCwxMyArMjI3LDEyIEBACiAJfQogCSpyZXQtPmZpZWxkWzBdID0gKnJlcG9ydC0+ZmllbGRbMF07CiAKLQlyZXQtPmZpZWxkWzBdLT52YWx1ZSA9IGttYWxsb2Moc2l6ZW9mKHMzMls4XSksIEdGUF9LRVJORUwpOworCXJldC0+ZmllbGRbMF0tPnZhbHVlID0ga3phbGxvYyhzaXplb2YoczMyWzhdKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZXQtPmZpZWxkWzBdLT52YWx1ZSkgewogCQlrZnJlZShyZXQtPmZpZWxkWzBdKTsKIAkJa2ZyZWUocmV0KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbXNldChyZXQtPmZpZWxkWzBdLT52YWx1ZSwgMCwgc2l6ZW9mKHMzMls4XSkpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC10bWZmLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtdG1mZi5jCmluZGV4IDAyM2ZkNWEuLjUzNDQyNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC10bWZmLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLXRtZmYuYwpAQCAtMTEzLDExICsxMTMsMTAgQEAKIAlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gaGlkaW5wdXQtPmlucHV0OwogCi0JcHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0bWZmX2RldmljZSksIEdGUF9LRVJORUwpOworCXByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdG1mZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXZhdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KHByaXZhdGUsIDAsIHNpemVvZihzdHJ1Y3QgdG1mZl9kZXZpY2UpKTsKIAloaWQtPmZmX3ByaXZhdGUgPSBwcml2YXRlOwogCiAJLyogRmluZCB0aGUgcmVwb3J0IHRvIHVzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaAppbmRleCA4YjBkNDM0Li40ZTFiNzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAvKgogICogVVNCIEhJRCAoSHVtYW4gSW50ZXJmYWNlIERldmljZSkgaW50ZXJmYWNlIGNsYXNzIGNvZGUKQEAgLTM3MCw2ICszNzIsOSBAQAogCiAjZGVmaW5lIEhJRF9DVFJMX1JVTk5JTkcJMQogI2RlZmluZSBISURfT1VUX1JVTk5JTkcJCTIKKyNkZWZpbmUgSElEX0lOX1JVTk5JTkcJCTMKKyNkZWZpbmUgSElEX1JFU0VUX1BFTkRJTkcJNAorI2RlZmluZSBISURfU1VTUEVOREVECQk1CiAKIHN0cnVjdCBoaWRfaW5wdXQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTM5MywxMiArMzk4LDE3IEBACiAJaW50IGlmbnVtOwkJCQkJCQkvKiBVU0IgaW50ZXJmYWNlIG51bWJlciAqLwogCiAJdW5zaWduZWQgbG9uZyBpb2ZsOwkJCQkJCS8qIEkvTyBmbGFncyAoQ1RSTF9SVU5OSU5HLCBPVVRfUlVOTklORykgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBpb19yZXRyeTsJCQkJCS8qIFJldHJ5IHRpbWVyICovCisJdW5zaWduZWQgbG9uZyBzdG9wX3JldHJ5OwkJCQkJLyogVGltZSB0byBnaXZlIHVwLCBpbiBqaWZmaWVzICovCisJdW5zaWduZWQgaW50IHJldHJ5X2RlbGF5OwkJCQkJLyogRGVsYXkgbGVuZ3RoIGluIG1zICovCisJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CQkJCQkvKiBUYXNrIGNvbnRleHQgZm9yIHJlc2V0cyAqLwogCiAJdW5zaWduZWQgaW50IGJ1ZnNpemU7CQkJCQkJLyogVVJCIGJ1ZmZlciBzaXplICovCiAKIAlzdHJ1Y3QgdXJiICp1cmJpbjsJCQkJCQkvKiBJbnB1dCBVUkIgKi8KIAljaGFyICppbmJ1ZjsJCQkJCQkJLyogSW5wdXQgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBpbmJ1Zl9kbWE7CQkJCQkJLyogSW5wdXQgYnVmZmVyIGRtYSAqLworCXNwaW5sb2NrX3QgaW5sb2NrOwkJCQkJCS8qIElucHV0IGZpZm8gc3BpbmxvY2sgKi8KIAogCXN0cnVjdCB1cmIgKnVyYmN0cmw7CQkJCQkJLyogQ29udHJvbCBVUkIgKi8KIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcjsJCQkJCS8qIENvbnRyb2wgcmVxdWVzdCBzdHJ1Y3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKaW5kZXggOTI1ZjVhYi4uNmRkNjY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKQEAgLTI1Nyw5ICsyNTcsOCBAQAogCWlmIChpID49IEhJRERFVl9NSU5PUlMgfHwgIWhpZGRldl90YWJsZVtpXSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIShsaXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGxpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2X2xpc3QpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChsaXN0LCAwLCBzaXplb2Yoc3RydWN0IGhpZGRldl9saXN0KSk7CiAKIAlsaXN0LT5oaWRkZXYgPSBoaWRkZXZfdGFibGVbaV07CiAJbGlzdC0+bmV4dCA9IGhpZGRldl90YWJsZVtpXS0+bGlzdDsKQEAgLTc1NCw5ICs3NTMsOCBAQAogCWlmIChpID09IGhpZC0+bWF4Y29sbGVjdGlvbiAmJiAoaGlkLT5xdWlya3MgJiBISURfUVVJUktfSElEREVWKSA9PSAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoIShoaWRkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2KSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGhpZGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRkZXYpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtMTsKLQltZW1zZXQoaGlkZGV2LCAwLCBzaXplb2Yoc3RydWN0IGhpZGRldikpOwogCiAJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihoaWQtPmludGYsICZoaWRkZXZfY2xhc3MpOwogCWlmIChyZXR2YWwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tZWRpYS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDNkMmNjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2UgY29uZmlndXJhdGlvbgotIwotY29tbWVudCAiVVNCIE11bHRpbWVkaWEgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIFVTQgotCi1jb25maWcgVVNCX0RBQlVTQgotCXRyaXN0YXRlICJEQUJVU0IgZHJpdmVyIgotCWRlcGVuZHMgb24gVVNCCi0JLS0taGVscC0tLQotCSAgQSBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKSBSZWNlaXZlciBmb3IgVVNCIGFuZCBMaW51eAotCSAgYnJvdWdodCB0byB5b3UgYnkgdGhlIERBQi1UZWFtCi0JICA8aHR0cDovL3d3d2JvZGUuY3MudHVtLmVkdS9QYXIvYXJjaC9kYWIvPi4gIFRoaXMgZHJpdmVyIGNhbiBiZSB0YWtlbgotCSAgYXMgYW4gZXhhbXBsZSBmb3IgVVJCLWJhc2VkIGJ1bGssIGNvbnRyb2wsIGFuZCBpc29jaHJvbm91cwotCSAgdHJhbnNhY3Rpb25zLiBVUkIncyBhcmUgZXhwbGFpbmVkIGluCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9VUkIudHh0Pi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZGFidXNiLgotCi1jb21tZW50ICJWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWPW4KLQotY29uZmlnIFVTQl9WSUNBTQotCXRyaXN0YXRlICJVU0IgM2NvbSBIb21lQ29ubmVjdCAoYWthIHZpY2FtKSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBFWFBFUklNRU5UQUwKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIDNjb20gaG9tZWNvbm5lY3QgY2FtZXJhICh2aWNhbSkuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBNdWx0aW1lZGlhIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KLQkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKLQkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aWNhbS4KLQotY29uZmlnIFVTQl9EU0JSCi0JdHJpc3RhdGUgIkQtTGluayBVU0IgRk0gcmFkaW8gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYgJiYgRVhQRVJJTUVOVEFMCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiByYWRpbyB0byB5b3VyCi0JICBjb21wdXRlcidzIFVTQiBwb3J0LiBOb3RlIHRoYXQgdGhlIGF1ZGlvIGlzIG5vdCBkaWdpdGFsLCBhbmQKLQkgIHlvdSBtdXN0IGNvbm5lY3QgdGhlIGxpbmUgb3V0IGNvbm5lY3RvciB0byBhIHNvdW5kIGNhcmQgb3IgYQotCSAgc2V0IG9mIHNwZWFrZXJzLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgWW91IG11c3QgZW5hYmxlCi0JICAoWSBvciBNIGluIGNvbmZpZykgVmlkZW8gRm9yIExpbnV4ICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykKLQkgIHRvIHVzZSB0aGlzIGRyaXZlci4gIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0bwotCSAgInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0Ci0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZHNicjEwMC4KLQotY29uZmlnIFVTQl9FVDYxWDI1MQotCXRyaXN0YXRlICJVU0IgRVQ2MVhbMTJdNTEgUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gRXRvbXMgRVQ2MVgxNTEKLQkgIG9yIEVUNjFYMjUxIFBDIENhbWVyYSBDb250cm9sbGVycy4KLQotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2V0NjF4MjUxLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb25zLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCi0JICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV0NjF4MjUxLgotCi1jb25maWcgVVNCX0lCTUNBTQotCXRyaXN0YXRlICJVU0IgSUJNIChYaXJsaW5rKSBDLWl0IENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIElCTSAiQy1JdCIgY2FtZXJhLCBhbHNvIGtub3duIGFzCi0JICAiWGlybGluayBQQyBDYW1lcmEiIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gIEZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiwgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0Pi4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gIFlvdSBtdXN0IGVuYWJsZQotCSAgKFkgb3IgTSBpbiBjb25maWcpIFZpZGVvIEZvciBMaW51eCAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpCi0JICB0byB1c2UgdGhpcyBkcml2ZXIuICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8KLQkgICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlibWNhbS4KLQotCSAgVGhpcyBjYW1lcmEgaGFzIHNldmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoCi0JICBjYW4gYmUgc3BlY2lmaWVkIHdoZW4geW91IGxvYWQgdGhlIG1vZHVsZS4gUmVhZAotCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dD4gdG8gbGVhcm4gbW9yZS4KLQotY29uZmlnIFVTQl9LT05JQ0FXQwotCXRyaXN0YXRlICJVU0IgS29uaWNhIFdlYmNhbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3Igd2ViY2FtcyBiYXNlZCBvbiBhIEtvbmljYQotCSAgY2hpcHNldC4gVGhpcyBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIEludGVsIFlDNzYgd2ViY2FtLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgWW91IG11c3QgZW5hYmxlCi0JICAoWSBvciBNIGluIGNvbmZpZykgVmlkZW8gRm9yIExpbnV4ICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykKLQkgIHRvIHVzZSB0aGlzIGRyaXZlci4gIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0bwotCSAgInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0Ci0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga29uaWNhd2MuCi0KLWNvbmZpZyBVU0JfT1Y1MTEKLQl0cmlzdGF0ZSAiVVNCIE9WNTExIENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCi0JICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCi0JICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3Y1MTEuCi0KLWNvbmZpZyBVU0JfU0U0MDEKLQl0cmlzdGF0ZSAiVVNCIFNFNDAxIENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9zZTQwMS50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KLQotCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgotCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAotCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNlNDAxLgotCi1jb25maWcgVVNCX1NOOUMxMDIKLQl0cmlzdGF0ZSAiVVNCIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gU09OaVggU045QzEwMSwKLQkgIFNOOUMxMDIgb3IgU045QzEwMyBQQyBDYW1lcmEgQ29udHJvbGxlcnMuCi0KLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9zbjljMTAyLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb25zLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCi0JICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNuOWMxMDIuCi0KLWNvbmZpZyBVU0JfU1RWNjgwCi0JdHJpc3RhdGUgIlVTQiBTVFY2ODAgKFBlbmNhbSkgQ2FtZXJhIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCi0JLS0taGVscC0tLQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiBjYW1lcmEgdG8geW91cgotCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gVGhpcyBpbmNsdWRlcyB0aGUgUGVuY2FtIGxpbmUgb2YgY2FtZXJhcy4KLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9zdHY2ODAudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZm9yCi0JICBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhbWVyYXMuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBNdWx0aW1lZGlhIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KLQkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKLQkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzdHY2ODAuCi0KLWNvbmZpZyBVU0JfVzk5NjhDRgotCXRyaXN0YXRlICJVU0IgVzk5Nls4N11DRiBKUEVHIER1YWwgTW9kZSBDYW1lcmEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYgJiYgSTJDICYmIFZJREVPX09WQ0FNQ0hJUAotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBPVjY4MSBvcgotCSAgV2luYm9uZCBXOTk2N0NGL1c5OTY4Q0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwcy4KLQkKLQkgIFRoaXMgZHJpdmVyIGhhcyBhbiBvcHRpb25hbCBwbHVnaW4sIHdoaWNoIGlzIGRpc3RyaWJ1dGVkIGFzIGEKLQkgIHNlcGFyYXRlIG1vZHVsZSBvbmx5IChyZWxlYXNlZCB1bmRlciBHUEwpLiBJdCBhbGxvd3MgdG8gdXNlIGhpZ2hlciAKLQkgIHJlc29sdXRpb25zIGFuZCBmcmFtZXJhdGVzLCBidXQgY2Fubm90IGJlIGluY2x1ZGVkIGluIHRoZSBvZmZpY2lhbCAKLQkgIExpbnV4IGtlcm5lbCBmb3IgcGVyZm9ybWFuY2UgcHVycG9zZXMuCi0KLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi93OTk2OGNmLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb25zLgotCi0JICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggYW5kIHRoZSBJMkMgQVBJcy4gSXQgbmVlZHMgdGhlCi0JICBPbW5pVmlzaW9uIENhbWVyYSBDaGlwIHN1cHBvcnQgYXMgd2VsbC4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bwotCSAgIlZpZGVvIEZvciBMaW51eCIsICJJMkMgU3VwcG9ydCIgYW5kICJPbW5pVmlzaW9uIENhbWVyYSBDaGlwIAotCSAgc3VwcG9ydCIgdG8gdXNlIHRoaXMgZHJpdmVyLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3OTk2OGNmLgotCi1jb25maWcgVVNCX1BXQwotCXRyaXN0YXRlICJVU0IgUGhpbGlwcyBDYW1lcmFzIgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgotCS0tLWhlbHAtLS0KLQkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZXNlIFBoaWxpcHMgJiBPRU0KLSAgICAgICAgICB3ZWJjYW1zOgotICAgICAgICAgICAqIFBoaWxpcHMgUENBNjQ1LCBQQ0E2NDYKLSAgICAgICAgICAgKiBQaGlsaXBzIFBDVkM2NzUsIFBDVkM2ODAsIFBDVkM2OTAKLSAgICAgICAgICAgKiBQaGlsaXBzIFBDVkM3MjAvNDAsIFBDVkM3MzAsIFBDVkM3NDAsIFBDVkM3NTAKLQkgICAqIEFza2V5IFZDMDEwCi0JICAgKiBMb2dpdGVjaCBRdWlja0NhbSBQcm8gMzAwMCwgNDAwMCwgJ1pvb20nLCAnTm90ZWJvb2sgUHJvJyAKLSAgICAgICAgICAgICBhbmQgJ09yYml0Jy8nU3BoZXJlJwotICAgICAgICAgICAqIFNhbXN1bmcgTVBDLUMxMCwgTVBDLUMzMAotCSAgICogQ3JlYXRpdmUgV2ViY2FtIDUsIFBybyBFeAotCSAgICogU09URUMgQWZpbmEgRXllCi0JICAgKiBWaXNpb25pdGUgVkNTLVVDMzAwLCBWQ1MtVU0xMDAKLQkgICAKLQkgIFRoZSBQQ0E2MzUsIFBDVkM2NjUgYW5kIFBDVkM3MjAvMjAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKLQkgIGFuZCBuZXZlciB3aWxsIGJlLCBidXQgdGhlIDY2NSBhbmQgNzIwLzIwIGFyZSBzdXBwb3J0ZWQgYnkgb3RoZXIgCi0JICBkcml2ZXJzLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvcGhpbGlwcy50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZAotCSAgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KLQotCSAgVGhlIGJ1aWx0LWluIG1pY3JvcGhvbmUgaXMgZW5hYmxlZCBieSBzZWxlY3RpbmcgVVNCIEF1ZGlvIHN1cHBvcnQuCi0KLQkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KLQkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgotCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAotCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHB3Yy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWVkaWEvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NTdhYTFiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgVVNCIE1lZGlhIGRyaXZlcnMKLSMKLQotc245YzEwMi1vYmpzCTo9IHNuOWMxMDJfY29yZS5vIHNuOWMxMDJfaHY3MTMxZC5vIHNuOWMxMDJfbWkwMzQzLm8gc245YzEwMl9vdjc2MzAubyBzbjljMTAyX3BhczEwNmIubyBzbjljMTAyX3BhczIwMmJjYi5vIHNuOWMxMDJfdGFzNTExMGMxYi5vIHNuOWMxMDJfdGFzNTEzMGQxYi5vCi1ldDYxeDI1MS1vYmpzCTo9IGV0NjF4MjUxX2NvcmUubyBldDYxeDI1MV90YXM1MTMwZDFiLm8KLQotb2JqLSQoQ09ORklHX1VTQl9EQUJVU0IpCSs9IGRhYnVzYi5vCi1vYmotJChDT05GSUdfVVNCX0RTQlIpCQkrPSBkc2JyMTAwLm8KLW9iai0kKENPTkZJR19VU0JfRVQ2MVgyNTEpCSs9IGV0NjF4MjUxLm8KLW9iai0kKENPTkZJR19VU0JfSUJNQ0FNKQkrPSBpYm1jYW0ubyB1c2J2aWRlby5vIHVsdHJhY2FtLm8KLW9iai0kKENPTkZJR19VU0JfS09OSUNBV0MpCSs9IGtvbmljYXdjLm8gdXNidmlkZW8ubwotb2JqLSQoQ09ORklHX1VTQl9PVjUxMSkJCSs9IG92NTExLm8KLW9iai0kKENPTkZJR19VU0JfU0U0MDEpCQkrPSBzZTQwMS5vCi1vYmotJChDT05GSUdfVVNCX1NOOUMxMDIpCSs9IHNuOWMxMDIubwotb2JqLSQoQ09ORklHX1VTQl9TVFY2ODApCSs9IHN0djY4MC5vCi1vYmotJChDT05GSUdfVVNCX1ZJQ0FNKQkJKz0gdmljYW0ubyB1c2J2aWRlby5vCi1vYmotJChDT05GSUdfVVNCX1c5OTY4Q0YpCSs9IHc5OTY4Y2Yubwotb2JqLSQoQ09ORklHX1VTQl9QV0MpICAgICAgICAgICArPSBwd2MvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWtpYXJhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0OThjNjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1raWFyYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE4ICswLDAgQEAKLS8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KLSAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQotCi0gICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKLSAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgotICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgotICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCi0gICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotKi8KLQotCi0vKiBUaGlzIHRhYmxlcyBjb250YWlucyBlbnRyaWVzIGZvciB0aGUgNzMwLzc0MC83NTAgKEtpYXJhKSBjYW1lcmEsIHdpdGgKLSAgIDQgZGlmZmVyZW50IHF1YWxpdGllcyAobm8gY29tcHJlc3Npb24sIGxvdywgbWVkaXVtLCBoaWdoKS4KLSAgIEl0IGxpc3RzIHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGZvciBzYWlkIG1vZGUgYnkgaXRzIGFsdGVybmF0ZSBpbnRlcmZhY2UKLSAgIG51bWJlci4gQW4gYWx0ZXJuYXRlIG9mIDAgbWVhbnMgdGhhdCB0aGUgbW9kZSBpcyB1bmF2YWlsYWJsZS4KLQotICAgVGhlcmUgYXJlIDYgKiA0ICogNCBlbnRyaWVzOgotICAgICA2IGRpZmZlcmVudCByZXNvbHV0aW9ucyBzdWJxY2lmLCBxc2lmLCBxY2lmLCBzaWYsIGNpZiwgdmdhCi0gICAgIDYgZnJhbWVyYXRlczogNSwgMTAsIDE1LCAyMCwgMjUsIDMwCi0gICAgIDQgY29tcHJlc3Npb24gbW9kaTogbm9uZSwgbG93LCBtZWRpdW0sIGhpZ2gKLQotICAgV2hlbiBhbiB1bmNvbXByZXNzZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgbmV4dCBhdmFpbGFibGUgY29tcHJlc3NlZCBtb2RlCi0gICB3aWxsIGJlIGNob3NlbiAodW5sZXNzIHRoZSBkZWNvbXByZXNzb3IgaXMgYWJzZW50KS4gU29tZXRpbWVzIHRoZXJlIGFyZSBvbmx5Ci0gICAxIG9yIDIgY29tcHJlc3NlZCBtb2RlcyBhdmFpbGFibGU7IGluIHRoYXQgY2FzZSBlbnRyaWVzIGFyZSBkdXBsaWNhdGVkLgotKi8KLQotCi0jaW5jbHVkZSAicHdjLWtpYXJhLmgiCi0jaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKLQotY29uc3Qgc3RydWN0IEtpYXJhX3RhYmxlX2VudHJ5IEtpYXJhX3RhYmxlW1BTWl9NQVhdWzZdWzRdID0KLXsKLSAgIC8qIFNRQ0lGICovCi0gICB7Ci0gICAgICAvKiA1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICB9LAotICAgICAgLyogMTAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgIH0sCi0gICAgICAvKiAxNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgfSwKLSAgICAgIC8qIDIwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICB9LAotICAgICAgLyogMjUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgIH0sCi0gICAgICAvKiAzMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgfSwKLSAgIH0sCi0gICAvKiBRU0lGICovCi0gICB7Ci0gICAgICAvKiA1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MUQsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4MDAsIDB4ODB9fSwKLSAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCi0gICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgxRCwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHgwMCwgMHg4MH19LAotICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MUQsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4MDAsIDB4ODB9fSwKLSAgICAgIH0sCi0gICAgICAvKiAxMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHsyLCAyOTEsICAgIDAsIHsweDFDLCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDIzLCAweDAxLCAweDgwfX0sCi0gICAgICAgICB7MSwgMTkyLCAgNjMwLCB7MHgxNCwgMHhGNCwgMHgzMCwgMHgxMywgMHhBOSwgMHgxMiwgMHhFMSwgMHgxNywgMHgwOCwgMHhDMCwgMHgwMCwgMHg4MH19LAotICAgICAgICAgezEsIDE5MiwgIDYzMCwgezB4MTQsIDB4RjQsIDB4MzAsIDB4MTMsIDB4QTksIDB4MTIsIDB4RTEsIDB4MTcsIDB4MDgsIDB4QzAsIDB4MDAsIDB4ODB9fSwKLSAgICAgICAgIHsxLCAxOTIsICA2MzAsIHsweDE0LCAweEY0LCAweDMwLCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEMwLCAweDAwLCAweDgwfX0sCi0gICAgICB9LAotICAgICAgLyogMTUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MywgNDM3LCAgICAwLCB7MHgxQiwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhCNSwgMHgwMSwgMHg4MH19LAotICAgICAgICAgezIsIDI5MiwgIDY0MCwgezB4MTMsIDB4RjQsIDB4MzAsIDB4MTMsIDB4RjcsIDB4MTMsIDB4MkYsIDB4MTMsIDB4MjAsIDB4MjQsIDB4MDEsIDB4ODB9fSwKLSAgICAgICAgIHsyLCAyOTIsICA2NDAsIHsweDEzLCAweEY0LCAweDMwLCAweDEzLCAweEY3LCAweDEzLCAweDJGLCAweDEzLCAweDIwLCAweDI0LCAweDAxLCAweDgwfX0sCi0gICAgICAgICB7MSwgMTkyLCAgNDIwLCB7MHgxMywgMHhGNCwgMHgzMCwgMHgwRCwgMHgxQiwgMHgwQywgMHg1MywgMHgxRSwgMHgxOCwgMHhDMCwgMHgwMCwgMHg4MH19LAotICAgICAgfSwKLSAgICAgIC8qIDIwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezQsIDU4OSwgICAgMCwgezB4MUEsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NEQsIDB4MDIsIDB4ODB9fSwKLSAgICAgICAgIHszLCA0NDgsICA3MzAsIHsweDEyLCAweEY0LCAweDMwLCAweDE2LCAweEM5LCAweDE2LCAweDAxLCAweDBFLCAweDE4LCAweEMwLCAweDAxLCAweDgwfX0sCi0gICAgICAgICB7MiwgMjkyLCAgNDc2LCB7MHgxMiwgMHhGNCwgMHgzMCwgMHgwRSwgMHhEOCwgMHgwRSwgMHgxMCwgMHgxOSwgMHgxOCwgMHgyNCwgMHgwMSwgMHg4MH19LAotICAgICAgICAgezEsIDE5MiwgIDMxMiwgezB4MTIsIDB4RjQsIDB4NTAsIDB4MDksIDB4QjMsIDB4MDgsIDB4RUIsIDB4MUUsIDB4MTgsIDB4QzAsIDB4MDAsIDB4ODB9fSwKLSAgICAgIH0sCi0gICAgICAvKiAyNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHs1LCA3MDMsICAgIDAsIHsweDE5LCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweEJGLCAweDAyLCAweDgwfX0sCi0gICAgICAgICB7MywgNDQ3LCAgNjEwLCB7MHgxMSwgMHhGNCwgMHgzMCwgMHgxMywgMHgwQiwgMHgxMiwgMHg0MywgMHgxNCwgMHgyOCwgMHhCRiwgMHgwMSwgMHg4MH19LAotICAgICAgICAgezIsIDI5MiwgIDM5OCwgezB4MTEsIDB4RjQsIDB4NTAsIDB4MEMsIDB4NkMsIDB4MEIsIDB4QTQsIDB4MUUsIDB4MjgsIDB4MjQsIDB4MDEsIDB4ODB9fSwKLSAgICAgICAgIHsxLCAxOTMsICAyNjIsIHsweDExLCAweEY0LCAweDUwLCAweDA4LCAweDIzLCAweDA3LCAweDVCLCAweDFFLCAweDI4LCAweEMxLCAweDAwLCAweDgwfX0sCi0gICAgICB9LAotICAgICAgLyogMzAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7OCwgODc0LCAgICAwLCB7MHgxOCwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2QSwgMHgwMywgMHg4MH19LAotICAgICAgICAgezUsIDcwNCwgIDczMCwgezB4MTAsIDB4RjQsIDB4MzAsIDB4MTYsIDB4QzksIDB4MTYsIDB4MDEsIDB4MEUsIDB4MjgsIDB4QzAsIDB4MDIsIDB4ODB9fSwKLSAgICAgICAgIHszLCA0NDgsICA0OTIsIHsweDEwLCAweEY0LCAweDMwLCAweDBGLCAweDVELCAweDBFLCAweDk1LCAweDE1LCAweDI4LCAweEMwLCAweDAxLCAweDgwfX0sCi0gICAgICAgICB7MiwgMjkyLCAgMzIwLCB7MHgxMCwgMHhGNCwgMHg1MCwgMHgwOSwgMHhGQiwgMHgwOSwgMHgzMywgMHgxRSwgMHgyOCwgMHgyNCwgMHgwMSwgMHg4MH19LAotICAgICAgfSwKLSAgIH0sCi0gICAvKiBRQ0lGICovCi0gICB7Ci0gICAgICAvKiA1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICB9LAotICAgICAgLyogMTAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgIH0sCi0gICAgICAvKiAxNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgfSwKLSAgICAgIC8qIDIwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICB9LAotICAgICAgLyogMjUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgIH0sCi0gICAgICAvKiAzMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgfSwKLSAgIH0sCi0gICAvKiBTSUYgKi8KLSAgIHsKLSAgICAgIC8qIDUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7NCwgNTgyLCAgICAwLCB7MHgwRCwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0NiwgMHgwMiwgMHg4MH19LAotICAgICAgICAgezMsIDM4NywgMTI3NiwgezB4MDUsIDB4RjQsIDB4MzAsIDB4MjcsIDB4RDgsIDB4MjYsIDB4NDgsIDB4MDMsIDB4MTAsIDB4ODMsIDB4MDEsIDB4ODB9fSwKLSAgICAgICAgIHsyLCAyOTEsICA5NjAsIHsweDA1LCAweEY0LCAweDMwLCAweDFELCAweEYyLCAweDFDLCAweDYyLCAweDA0LCAweDEwLCAweDIzLCAweDAxLCAweDgwfX0sCi0gICAgICAgICB7MSwgMTkxLCAgNjMwLCB7MHgwNSwgMHhGNCwgMHg1MCwgMHgxMywgMHhBOSwgMHgxMiwgMHgxOSwgMHgwNSwgMHgxOCwgMHhCRiwgMHgwMCwgMHg4MH19LAotICAgICAgfSwKLSAgICAgIC8qIDEwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7NiwgNzc1LCAxMjc4LCB7MHgwNCwgMHhGNCwgMHgzMCwgMHgyNywgMHhFOCwgMHgyNiwgMHg1OCwgMHgwNSwgMHgzMCwgMHgwNywgMHgwMywgMHg4MH19LAotICAgICAgICAgezMsIDQ0NywgIDczNiwgezB4MDQsIDB4RjQsIDB4MzAsIDB4MTYsIDB4RkIsIDB4MTUsIDB4NkIsIDB4MDUsIDB4MjgsIDB4QkYsIDB4MDEsIDB4ODB9fSwKLSAgICAgICAgIHsyLCAyOTIsICA0ODAsIHsweDA0LCAweEY0LCAweDcwLCAweDBFLCAweEY5LCAweDBELCAweDY5LCAweDA5LCAweDI4LCAweDI0LCAweDAxLCAweDgwfX0sCi0gICAgICB9LAotICAgICAgLyogMTUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHs5LCA5NTUsIDEwNTAsIHsweDAzLCAweEY0LCAweDMwLCAweDIwLCAweENGLCAweDFGLCAweDNGLCAweDA2LCAweDQ4LCAweEJCLCAweDAzLCAweDgwfX0sCi0gICAgICAgICB7NCwgNTkyLCAgNjUwLCB7MHgwMywgMHhGNCwgMHgzMCwgMHgxNCwgMHg0NCwgMHgxMiwgMHhCNCwgMHgwOCwgMHgzMCwgMHg1MCwgMHgwMiwgMHg4MH19LAotICAgICAgICAgezMsIDQ0OCwgIDQ5MiwgezB4MDMsIDB4RjQsIDB4NTAsIDB4MEYsIDB4NTIsIDB4MEQsIDB4QzIsIDB4MDksIDB4MzgsIDB4QzAsIDB4MDEsIDB4ODB9fSwKLSAgICAgIH0sCi0gICAgICAvKiAyMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezksIDk1OCwgIDc4MiwgezB4MDIsIDB4RjQsIDB4MzAsIDB4MTgsIDB4NkEsIDB4MTYsIDB4REEsIDB4MEIsIDB4NTgsIDB4QkUsIDB4MDMsIDB4ODB9fSwKLSAgICAgICAgIHs1LCA3MDMsICA1NzQsIHsweDAyLCAweEY0LCAweDUwLCAweDExLCAweEU3LCAweDEwLCAweDU3LCAweDBCLCAweDQwLCAweEJGLCAweDAyLCAweDgwfX0sCi0gICAgICAgICB7MywgNDQ2LCAgMzY0LCB7MHgwMiwgMHhGNCwgMHg5MCwgMHgwQiwgMHg1QywgMHgwOSwgMHhDQywgMHgwRSwgMHgzOCwgMHhCRSwgMHgwMSwgMHg4MH19LAotICAgICAgfSwKLSAgICAgIC8qIDI1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7OSwgOTU4LCAgNjU0LCB7MHgwMSwgMHhGNCwgMHgzMCwgMHgxNCwgMHg2NiwgMHgxMiwgMHhENiwgMHgwQiwgMHg1MCwgMHhCRSwgMHgwMywgMHg4MH19LAotICAgICAgICAgezYsIDc3NiwgIDUzMCwgezB4MDEsIDB4RjQsIDB4NTAsIDB4MTAsIDB4OEMsIDB4MEUsIDB4RkMsIDB4MEMsIDB4NDgsIDB4MDgsIDB4MDMsIDB4ODB9fSwKLSAgICAgICAgIHs0LCA1OTIsICA0MDQsIHsweDAxLCAweEY0LCAweDcwLCAweDBDLCAweDk2LCAweDBCLCAweDA2LCAweDBCLCAweDQ4LCAweDUwLCAweDAyLCAweDgwfX0sCi0gICAgICB9LAotICAgICAgLyogMzAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDAwLCAweEY0LCAweDUwLCAweDEwLCAweDY4LCAweDBFLCAweEQ4LCAweDBELCAweDU4LCAweEJELCAweDAzLCAweDgwfX0sCi0gICAgICAgICB7NiwgNzc1LCAgNDI2LCB7MHgwMCwgMHhGNCwgMHg3MCwgMHgwRCwgMHg0OCwgMHgwQiwgMHhCOCwgMHgwRiwgMHg1MCwgMHgwNywgMHgwMywgMHg4MH19LAotICAgICAgICAgezQsIDU5MCwgIDMyNCwgezB4MDAsIDB4N0EsIDB4ODgsIDB4MEEsIDB4MUMsIDB4MDgsIDB4QjQsIDB4MEUsIDB4NTAsIDB4NEUsIDB4MDIsIDB4ODB9fSwKLSAgICAgIH0sCi0gICB9LAotICAgLyogQ0lGICovCi0gICB7Ci0gICAgICAvKiA1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICB9LAotICAgICAgLyogMTAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgIH0sCi0gICAgICAvKiAxNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgfSwKLSAgICAgIC8qIDIwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICB9LAotICAgICAgLyogMjUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgIH0sCi0gICAgICAvKiAzMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgfSwKLSAgIH0sCi0gICAvKiBWR0EgKi8KLSAgIHsKLSAgICAgIC8qIDUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHs2LCA3NzMsIDEyNzIsIHsweDI1LCAweEY0LCAweDMwLCAweDI3LCAweEI2LCAweDI0LCAweDk2LCAweDAyLCAweDMwLCAweDA1LCAweDAzLCAweDgwfX0sCi0gICAgICAgICB7NCwgNTkyLCAgOTc2LCB7MHgyNSwgMHhGNCwgMHg1MCwgMHgxRSwgMHg3OCwgMHgxQiwgMHg1OCwgMHgwMywgMHgzMCwgMHg1MCwgMHgwMiwgMHg4MH19LAotICAgICAgICAgezMsIDQ0OCwgIDczOCwgezB4MjUsIDB4RjQsIDB4OTAsIDB4MTcsIDB4MEMsIDB4MTMsIDB4RUMsIDB4MDQsIDB4MzAsIDB4QzAsIDB4MDEsIDB4ODB9fSwKLSAgICAgIH0sCi0gICAgICAvKiAxMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezksIDk1NiwgIDc4OCwgezB4MjQsIDB4RjQsIDB4NzAsIDB4MTgsIDB4OUMsIDB4MTUsIDB4N0MsIDB4MDMsIDB4NDgsIDB4QkMsIDB4MDMsIDB4ODB9fSwKLSAgICAgICAgIHs2LCA3NzYsICA2NDAsIHsweDI0LCAweEY0LCAweEIwLCAweDEzLCAweEZDLCAweDExLCAweDJDLCAweDA0LCAweDQ4LCAweDA4LCAweDAzLCAweDgwfX0sCi0gICAgICAgICB7NCwgNTkyLCAgNDg4LCB7MHgyNCwgMHg3QSwgMHhFOCwgMHgwRiwgMHgzQywgMHgwQywgMHg2QywgMHgwNiwgMHg0OCwgMHg1MCwgMHgwMiwgMHg4MH19LAotICAgICAgfSwKLSAgICAgIC8qIDE1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7OSwgOTU3LCAgNTI2LCB7MHgyMywgMHg3QSwgMHhFOCwgMHgxMCwgMHg2OCwgMHgwRCwgMHg5OCwgMHgwNiwgMHg1OCwgMHhCRCwgMHgwMywgMHg4MH19LAotICAgICAgICAgezksIDk1NywgIDUyNiwgezB4MjMsIDB4N0EsIDB4RTgsIDB4MTAsIDB4NjgsIDB4MEQsIDB4OTgsIDB4MDYsIDB4NTgsIDB4QkQsIDB4MDMsIDB4ODB9fSwKLSAgICAgICAgIHs4LCA4OTUsICA0OTIsIHsweDIzLCAweDdBLCAweEU4LCAweDBGLCAweDVELCAweDBDLCAweDhELCAweDA2LCAweDU4LCAweDdGLCAweDAzLCAweDgwfX0sCi0gICAgICB9LAotICAgICAgLyogMjAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgIH0sCi0gICAgICAvKiAyNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgfSwKLSAgICAgIC8qIDMwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICB9LAotICAgfSwKLX07Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVlOTY3MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXRpbW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQotICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCi0KLSAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAotICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCi0gICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCi0gICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKLSAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qLwotCi0KLS8qIFRoaXMgdGFibGVzIGNvbnRhaW5zIGVudHJpZXMgZm9yIHRoZSA2NzUvNjgwLzY5MCAoVGltb24pIGNhbWVyYSwgd2l0aAotICAgNCBkaWZmZXJlbnQgcXVhbGl0aWVzIChubyBjb21wcmVzc2lvbiwgbG93LCBtZWRpdW0sIGhpZ2gpLgotICAgSXQgbGlzdHMgdGhlIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgZm9yIHNhaWQgbW9kZSBieSBpdHMgYWx0ZXJuYXRlIGludGVyZmFjZQotICAgbnVtYmVyLiBBbiBhbHRlcm5hdGUgb2YgMCBtZWFucyB0aGF0IHRoZSBtb2RlIGlzIHVuYXZhaWxhYmxlLgotCi0gICBUaGVyZSBhcmUgNiAqIDQgKiA0IGVudHJpZXM6Ci0gICAgIDYgZGlmZmVyZW50IHJlc29sdXRpb25zIHN1YnFjaWYsIHFzaWYsIHFjaWYsIHNpZiwgY2lmLCB2Z2EKLSAgICAgNiBmcmFtZXJhdGVzOiA1LCAxMCwgMTUsIDIwLCAyNSwgMzAKLSAgICAgNCBjb21wcmVzc2lvbiBtb2RpOiBub25lLCBsb3csIG1lZGl1bSwgaGlnaAotCi0gICBXaGVuIGFuIHVuY29tcHJlc3NlZCBtb2RlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBuZXh0IGF2YWlsYWJsZSBjb21wcmVzc2VkIG1vZGUKLSAgIHdpbGwgYmUgY2hvc2VuICh1bmxlc3MgdGhlIGRlY29tcHJlc3NvciBpcyBhYnNlbnQpLiBTb21ldGltZXMgdGhlcmUgYXJlIG9ubHkKLSAgIDEgb3IgMiBjb21wcmVzc2VkIG1vZGVzIGF2YWlsYWJsZTsgaW4gdGhhdCBjYXNlIGVudHJpZXMgYXJlIGR1cGxpY2F0ZWQuCi0qLwotCi0jaW5jbHVkZSAicHdjLXRpbW9uLmgiCi0KLWNvbnN0IHN0cnVjdCBUaW1vbl90YWJsZV9lbnRyeSBUaW1vbl90YWJsZVtQU1pfTUFYXVs2XVs0XSA9Ci17Ci0gICAvKiBTUUNJRiAqLwotICAgewotICAgICAgLyogNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCi0gICAgICAgICB7MSwgMTQwLCAgICAwLCB7MHgwNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg4QywgMHhGQywgMHg4MCwgMHgwMn19LAotICAgICAgICAgezEsIDE0MCwgICAgMCwgezB4MDUsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OEMsIDB4RkMsIDB4ODAsIDB4MDJ9fSwKLSAgICAgICAgIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMTAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MiwgMjgwLCAgICAwLCB7MHgwNCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgxOCwgMHhBOSwgMHg4MCwgMHgwMn19LAotICAgICAgICAgezIsIDI4MCwgICAgMCwgezB4MDQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MTgsIDB4QTksIDB4ODAsIDB4MDJ9fSwKLSAgICAgICAgIHsyLCAyODAsICAgIDAsIHsweDA0LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDE4LCAweEE5LCAweDgwLCAweDAyfX0sCi0gICAgICAgICB7MiwgMjgwLCAgICAwLCB7MHgwNCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgxOCwgMHhBOSwgMHg4MCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDE1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezMsIDQxMCwgICAgMCwgezB4MDMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OUEsIDB4NzEsIDB4ODAsIDB4MDJ9fSwKLSAgICAgICAgIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCi0gICAgICAgICB7MywgNDEwLCAgICAwLCB7MHgwMywgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5QSwgMHg3MSwgMHg4MCwgMHgwMn19LAotICAgICAgICAgezMsIDQxMCwgICAgMCwgezB4MDMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OUEsIDB4NzEsIDB4ODAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICAgICAvKiAyMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCi0gICAgICAgICB7NCwgNTU5LCAgICAwLCB7MHgwMiwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgyRiwgMHg1NiwgMHg4MCwgMHgwMn19LAotICAgICAgICAgezQsIDU1OSwgICAgMCwgezB4MDIsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MkYsIDB4NTYsIDB4ODAsIDB4MDJ9fSwKLSAgICAgICAgIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMjUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7NSwgNjU5LCAgICAwLCB7MHgwMSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5MywgMHg0NiwgMHg4MCwgMHgwMn19LAotICAgICAgICAgezUsIDY1OSwgICAgMCwgezB4MDEsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OTMsIDB4NDYsIDB4ODAsIDB4MDJ9fSwKLSAgICAgICAgIHs1LCA2NTksICAgIDAsIHsweDAxLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDkzLCAweDQ2LCAweDgwLCAweDAyfX0sCi0gICAgICAgICB7NSwgNjU5LCAgICAwLCB7MHgwMSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5MywgMHg0NiwgMHg4MCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDMwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezcsIDgzOCwgICAgMCwgezB4MDAsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NDYsIDB4M0IsIDB4ODAsIDB4MDJ9fSwKLSAgICAgICAgIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCi0gICAgICAgICB7NywgODM4LCAgICAwLCB7MHgwMCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg0NiwgMHgzQiwgMHg4MCwgMHgwMn19LAotICAgICAgICAgezcsIDgzOCwgICAgMCwgezB4MDAsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NDYsIDB4M0IsIDB4ODAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICB9LAotICAgLyogUVNJRiAqLwotICAgewotICAgICAgLyogNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgyRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHhGQywgMHhDMCwgMHgwMn19LAotICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MkQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4RkMsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMTAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MiwgMjkxLCAgICAwLCB7MHgyQywgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezEsIDE5MSwgIDYzMCwgezB4MkMsIDB4RjQsIDB4MDUsIDB4MTMsIDB4QTksIDB4MTIsIDB4RTEsIDB4MTcsIDB4MDgsIDB4QkYsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHsxLCAxOTEsICA2MzAsIHsweDJDLCAweEY0LCAweDA1LCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MSwgMTkxLCAgNjMwLCB7MHgyQywgMHhGNCwgMHgwNSwgMHgxMywgMHhBOSwgMHgxMiwgMHhFMSwgMHgxNywgMHgwOCwgMHhCRiwgMHhGNCwgMHhDMCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDE1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezMsIDQzNywgICAgMCwgezB4MkIsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4QjUsIDB4NkQsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHsyLCAyOTEsICA2NDAsIHsweDJCLCAweEY0LCAweDA1LCAweDEzLCAweEY3LCAweDEzLCAweDJGLCAweDEzLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MiwgMjkxLCAgNjQwLCB7MHgyQiwgMHhGNCwgMHgwNSwgMHgxMywgMHhGNywgMHgxMywgMHgyRiwgMHgxMywgMHgwOCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezEsIDE5MSwgIDQyMCwgezB4MkIsIDB4RjQsIDB4MEQsIDB4MEQsIDB4MUIsIDB4MEMsIDB4NTMsIDB4MUUsIDB4MDgsIDB4QkYsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICAgICAvKiAyMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHs0LCA1ODgsICAgIDAsIHsweDJBLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRDLCAweDUyLCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MywgNDQ3LCAgNzMwLCB7MHgyQSwgMHhGNCwgMHgwNSwgMHgxNiwgMHhDOSwgMHgxNiwgMHgwMSwgMHgwRSwgMHgxOCwgMHhCRiwgMHg2OSwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezIsIDI5MiwgIDQ3NiwgezB4MkEsIDB4RjQsIDB4MEQsIDB4MEUsIDB4RDgsIDB4MEUsIDB4MTAsIDB4MTksIDB4MTgsIDB4MjQsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHsxLCAxOTIsICAzMTIsIHsweDJBLCAweEY0LCAweDFELCAweDA5LCAweEIzLCAweDA4LCAweEVCLCAweDFFLCAweDE4LCAweEMwLCAweEY0LCAweEMwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMjUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7NSwgNzAzLCAgICAwLCB7MHgyOSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhCRiwgMHg0MiwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezMsIDQ0NywgIDYxMCwgezB4MjksIDB4RjQsIDB4MDUsIDB4MTMsIDB4MEIsIDB4MTIsIDB4NDMsIDB4MTQsIDB4MTgsIDB4QkYsIDB4NjksIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHsyLCAyOTIsICAzOTgsIHsweDI5LCAweEY0LCAweDBELCAweDBDLCAweDZDLCAweDBCLCAweEE0LCAweDFFLCAweDE4LCAweDI0LCAweEExLCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MSwgMTkyLCAgMjYyLCB7MHgyOSwgMHhGNCwgMHgyNSwgMHgwOCwgMHgyMywgMHgwNywgMHg1QiwgMHgxRSwgMHgxOCwgMHhDMCwgMHhGNCwgMHhDMCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDMwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezgsIDg3MywgICAgMCwgezB4MjgsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjksIDB4MzcsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHs1LCA3MDQsICA3NzQsIHsweDI4LCAweEY0LCAweDA1LCAweDE4LCAweDIxLCAweDE3LCAweDU5LCAweDBGLCAweDE4LCAweEMwLCAweDQyLCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MywgNDQ4LCAgNDkyLCB7MHgyOCwgMHhGNCwgMHgwNSwgMHgwRiwgMHg1RCwgMHgwRSwgMHg5NSwgMHgxNSwgMHgxOCwgMHhDMCwgMHg2OSwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezIsIDI5MSwgIDMyMCwgezB4MjgsIDB4RjQsIDB4MUQsIDB4MDksIDB4RkIsIDB4MDksIDB4MzMsIDB4MUUsIDB4MTgsIDB4MjMsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICB9LAotICAgLyogUUNJRiAqLwotICAgewotICAgICAgLyogNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MSwgMTkzLCAgICAwLCB7MHgwRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhDMSwgMHhGNCwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezEsIDE5MywgICAgMCwgezB4MEQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4QzEsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMTAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MywgMzg1LCAgICAwLCB7MHgwQywgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4MSwgMHg3OSwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezIsIDI5MSwgIDgwMCwgezB4MEMsIDB4RjQsIDB4MDUsIDB4MTgsIDB4RjQsIDB4MTgsIDB4MTgsIDB4MTEsIDB4MDgsIDB4MjMsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHsyLCAyOTEsICA4MDAsIHsweDBDLCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDExLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MSwgMTk0LCAgNTMyLCB7MHgwQywgMHhGNCwgMHgwNSwgMHgxMCwgMHg5QSwgMHgwRiwgMHhCRSwgMHgxQiwgMHgwOCwgMHhDMiwgMHhGMCwgMHhDMCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDE1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezQsIDU3NywgICAgMCwgezB4MEIsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NDEsIDB4NTIsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHszLCA0NDcsICA4MTgsIHsweDBCLCAweEY0LCAweDA1LCAweDE5LCAweDg5LCAweDE4LCAweEFELCAweDBGLCAweDEwLCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MiwgMjkyLCAgNTM0LCB7MHgwQiwgMHhGNCwgMHgwNSwgMHgxMCwgMHhBMywgMHgwRiwgMHhDNywgMHgxOSwgMHgxMCwgMHgyNCwgMHhBMSwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezEsIDE5NSwgIDM1NiwgezB4MEIsIDB4RjQsIDB4MTUsIDB4MEIsIDB4MTEsIDB4MEEsIDB4MzUsIDB4MUUsIDB4MTAsIDB4QzMsIDB4RjAsIDB4QzAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICAgICAvKiAyMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHs2LCA3NzYsICAgIDAsIHsweDBBLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA4LCAweDNGLCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7NCwgNTkxLCAgODA0LCB7MHgwQSwgMHhGNCwgMHgwNSwgMHgxOSwgMHgxRSwgMHgxOCwgMHg0MiwgMHgwRiwgMHgxOCwgMHg0RiwgMHg0RSwgMHhDMCwgMHgwMn19LAotICAgICAgICAgezMsIDQ0NywgIDYwOCwgezB4MEEsIDB4RjQsIDB4MDUsIDB4MTIsIDB4RkQsIDB4MTIsIDB4MjEsIDB4MTUsIDB4MTgsIDB4QkYsIDB4NjksIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHsyLCAyOTEsICAzOTYsIHsweDBBLCAweEY0LCAweDE1LCAweDBDLCAweDVFLCAweDBCLCAweDgyLCAweDFFLCAweDE4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMjUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7OSwgOTI4LCAgICAwLCB7MHgwOSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhBMCwgMHgzMywgMHhDMCwgMHgwMn19LAotICAgICAgICAgezUsIDcwMywgIDgwMCwgezB4MDksIDB4RjQsIDB4MDUsIDB4MTgsIDB4RjQsIDB4MTgsIDB4MTgsIDB4MTAsIDB4MTgsIDB4QkYsIDB4NDIsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHszLCA0NDcsICA1MDgsIHsweDA5LCAweEY0LCAweDBELCAweDBGLCAweEQyLCAweDBFLCAweEY2LCAweDFCLCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCi0gICAgICAgICB7MiwgMjkyLCAgMzMyLCB7MHgwOSwgMHhGNCwgMHgxRCwgMHgwQSwgMHg1QSwgMHgwOSwgMHg3RSwgMHgxRSwgMHgxOCwgMHgyNCwgMHhBMSwgMHhDMCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDMwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7OSwgOTU2LCAgODc2LCB7MHgwOCwgMHhGNCwgMHgwNSwgMHgxQiwgMHg1OCwgMHgxQSwgMHg3QywgMHgwRSwgMHgyMCwgMHhCQywgMHgzMywgMHgxMCwgMHgwMn19LAotICAgICAgICAgezQsIDU5MiwgIDU0MiwgezB4MDgsIDB4RjQsIDB4MDUsIDB4MTAsIDB4RTQsIDB4MTAsIDB4MDgsIDB4MTcsIDB4MjAsIDB4NTAsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKLSAgICAgICAgIHsyLCAyOTEsICAyNjYsIHsweDA4LCAweEY0LCAweDI1LCAweDA4LCAweDQ4LCAweDA3LCAweDZDLCAweDFFLCAweDIwLCAweDIzLCAweEExLCAweDEwLCAweDAyfX0sCi0gICAgICB9LAotICAgfSwKLSAgIC8qIFNJRiAqLwotICAgewotICAgICAgLyogNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHs0LCA1ODIsICAgIDAsIHsweDM1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ2LCAweDUyLCAweDYwLCAweDAyfX0sCi0gICAgICAgICB7MywgMzg3LCAxMjc2LCB7MHgzNSwgMHhGNCwgMHgwNSwgMHgyNywgMHhEOCwgMHgyNiwgMHg0OCwgMHgwMywgMHgxMCwgMHg4MywgMHg3OSwgMHg2MCwgMHgwMn19LAotICAgICAgICAgezIsIDI5MSwgIDk2MCwgezB4MzUsIDB4RjQsIDB4MEQsIDB4MUQsIDB4RjIsIDB4MUMsIDB4NjIsIDB4MDQsIDB4MTAsIDB4MjMsIDB4QTEsIDB4NjAsIDB4MDJ9fSwKLSAgICAgICAgIHsxLCAxOTEsICA2MzAsIHsweDM1LCAweEY0LCAweDFELCAweDEzLCAweEE5LCAweDEyLCAweDE5LCAweDA1LCAweDA4LCAweEJGLCAweEY0LCAweDYwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMTAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHs2LCA3NzUsIDEyNzgsIHsweDM0LCAweEY0LCAweDA1LCAweDI3LCAweEU4LCAweDI2LCAweDU4LCAweDA1LCAweDMwLCAweDA3LCAweDNGLCAweDEwLCAweDAyfX0sCi0gICAgICAgICB7MywgNDQ3LCAgNzM2LCB7MHgzNCwgMHhGNCwgMHgxNSwgMHgxNiwgMHhGQiwgMHgxNSwgMHg2QiwgMHgwNSwgMHgxOCwgMHhCRiwgMHg2OSwgMHgxMCwgMHgwMn19LAotICAgICAgICAgezIsIDI5MSwgIDQ4MCwgezB4MzQsIDB4RjQsIDB4MkQsIDB4MEUsIDB4RjksIDB4MEQsIDB4NjksIDB4MDksIDB4MTgsIDB4MjMsIDB4QTEsIDB4MTAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICAgICAvKiAxNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezksIDk1NSwgMTA1MCwgezB4MzMsIDB4RjQsIDB4MDUsIDB4MjAsIDB4Q0YsIDB4MUYsIDB4M0YsIDB4MDYsIDB4NDgsIDB4QkIsIDB4MzMsIDB4MTAsIDB4MDJ9fSwKLSAgICAgICAgIHs0LCA1OTEsICA2NTAsIHsweDMzLCAweEY0LCAweDE1LCAweDE0LCAweDQ0LCAweDEyLCAweEI0LCAweDA4LCAweDMwLCAweDRGLCAweDRFLCAweDEwLCAweDAyfX0sCi0gICAgICAgICB7MywgNDQ4LCAgNDkyLCB7MHgzMywgMHhGNCwgMHgyNSwgMHgwRiwgMHg1MiwgMHgwRCwgMHhDMiwgMHgwOSwgMHgyOCwgMHhDMCwgMHg2OSwgMHgxMCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDIwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7OSwgOTU4LCAgNzgyLCB7MHgzMiwgMHhGNCwgMHgwRCwgMHgxOCwgMHg2QSwgMHgxNiwgMHhEQSwgMHgwQiwgMHg1OCwgMHhCRSwgMHgzMywgMHhEMCwgMHgwMn19LAotICAgICAgICAgezUsIDcwMywgIDU3NCwgezB4MzIsIDB4RjQsIDB4MUQsIDB4MTEsIDB4RTcsIDB4MTAsIDB4NTcsIDB4MEIsIDB4NDAsIDB4QkYsIDB4NDIsIDB4RDAsIDB4MDJ9fSwKLSAgICAgICAgIHszLCA0NDYsICAzNjQsIHsweDMyLCAweEY0LCAweDNELCAweDBCLCAweDVDLCAweDA5LCAweENDLCAweDBFLCAweDMwLCAweEJFLCAweDY5LCAweEQwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMjUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHs5LCA5NTgsICA2NTQsIHsweDMxLCAweEY0LCAweDE1LCAweDE0LCAweDY2LCAweDEyLCAweEQ2LCAweDBCLCAweDUwLCAweEJFLCAweDMzLCAweDkwLCAweDAyfX0sCi0gICAgICAgICB7NiwgNzc2LCAgNTMwLCB7MHgzMSwgMHhGNCwgMHgyNSwgMHgxMCwgMHg4QywgMHgwRSwgMHhGQywgMHgwQywgMHg0OCwgMHgwOCwgMHgzRiwgMHg5MCwgMHgwMn19LAotICAgICAgICAgezQsIDU5MiwgIDQwNCwgezB4MzEsIDB4RjQsIDB4MzUsIDB4MEMsIDB4OTYsIDB4MEIsIDB4MDYsIDB4MEIsIDB4MzgsIDB4NTAsIDB4NEUsIDB4OTAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICAgICAvKiAzMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezksIDk1NywgIDUyNiwgezB4MzAsIDB4RjQsIDB4MjUsIDB4MTAsIDB4NjgsIDB4MEUsIDB4RDgsIDB4MEQsIDB4NTgsIDB4QkQsIDB4MzMsIDB4NjAsIDB4MDJ9fSwKLSAgICAgICAgIHs2LCA3NzUsICA0MjYsIHsweDMwLCAweEY0LCAweDM1LCAweDBELCAweDQ4LCAweDBCLCAweEI4LCAweDBGLCAweDUwLCAweDA3LCAweDNGLCAweDYwLCAweDAyfX0sCi0gICAgICAgICB7NCwgNTkwLCAgMzI0LCB7MHgzMCwgMHg3QSwgMHg0QiwgMHgwQSwgMHgxQywgMHgwOCwgMHhCNCwgMHgwRSwgMHg0MCwgMHg0RSwgMHg1MiwgMHg2MCwgMHgwMn19LAotICAgICAgfSwKLSAgIH0sCi0gICAvKiBDSUYgKi8KLSAgIHsKLSAgICAgIC8qIDUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7NiwgNzcxLCAgICAwLCB7MHgxNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMywgMHgzRiwgMHg4MCwgMHgwMn19LAotICAgICAgICAgezQsIDQ2NSwgMTI3OCwgezB4MTUsIDB4RjQsIDB4MDUsIDB4MjcsIDB4RUUsIDB4MjYsIDB4MzYsIDB4MDMsIDB4MTgsIDB4RDEsIDB4NjUsIDB4ODAsIDB4MDJ9fSwKLSAgICAgICAgIHsyLCAyOTEsICA4MDAsIHsweDE1LCAweEY0LCAweDE1LCAweDE4LCAweEY0LCAweDE3LCAweDNDLCAweDA1LCAweDE4LCAweDIzLCAweEExLCAweDgwLCAweDAyfX0sCi0gICAgICAgICB7MSwgMTkzLCAgNTI4LCB7MHgxNSwgMHhGNCwgMHgyRCwgMHgxMCwgMHg3RSwgMHgwRSwgMHhDNiwgMHgwQSwgMHgxOCwgMHhDMSwgMHhGNCwgMHg4MCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDEwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7OSwgOTMyLCAxMjc4LCB7MHgxNCwgMHhGNCwgMHgwNSwgMHgyNywgMHhFRSwgMHgyNiwgMHgzNiwgMHgwNCwgMHgzMCwgMHhBNCwgMHgzMywgMHgxMCwgMHgwMn19LAotICAgICAgICAgezQsIDU5MSwgIDgxMiwgezB4MTQsIDB4RjQsIDB4MTUsIDB4MTksIDB4NTYsIDB4MTcsIDB4OUUsIDB4MDYsIDB4MjgsIDB4NEYsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKLSAgICAgICAgIHsyLCAyOTEsICA0MDAsIHsweDE0LCAweEY0LCAweDNELCAweDBDLCAweDdBLCAweDBBLCAweEMyLCAweDBFLCAweDI4LCAweDIzLCAweEExLCAweDEwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMTUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHs5LCA5NTYsICA4NzYsIHsweDEzLCAweEY0LCAweDBELCAweDFCLCAweDU4LCAweDE5LCAweEEwLCAweDA1LCAweDM4LCAweEJDLCAweDMzLCAweDYwLCAweDAyfX0sCi0gICAgICAgICB7NSwgNzAzLCAgNjQ0LCB7MHgxMywgMHhGNCwgMHgxRCwgMHgxNCwgMHgxQywgMHgxMiwgMHg2NCwgMHgwOCwgMHgzOCwgMHhCRiwgMHg0MiwgMHg2MCwgMHgwMn19LAotICAgICAgICAgezMsIDQ0OCwgIDQxMCwgezB4MTMsIDB4RjQsIDB4M0QsIDB4MEMsIDB4QzQsIDB4MEIsIDB4MEMsIDB4MEUsIDB4MzgsIDB4QzAsIDB4NjksIDB4NjAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICAgICAvKiAyMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezksIDk1NiwgIDY1MCwgezB4MTIsIDB4RjQsIDB4MUQsIDB4MTQsIDB4NEEsIDB4MTIsIDB4OTIsIDB4MDksIDB4NDgsIDB4QkMsIDB4MzMsIDB4MTAsIDB4MDN9fSwKLSAgICAgICAgIHs2LCA3NzYsICA1MjgsIHsweDEyLCAweEY0LCAweDJELCAweDEwLCAweDdFLCAweDBFLCAweEM2LCAweDBBLCAweDQwLCAweDA4LCAweDNGLCAweDEwLCAweDAzfX0sCi0gICAgICAgICB7NCwgNTkxLCAgNDAyLCB7MHgxMiwgMHhGNCwgMHgzRCwgMHgwQywgMHg4RiwgMHgwQSwgMHhENywgMHgwRSwgMHg0MCwgMHg0RiwgMHg0RSwgMHgxMCwgMHgwM319LAotICAgICAgfSwKLSAgICAgIC8qIDI1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7OSwgOTU2LCAgNTQ0LCB7MHgxMSwgMHhGNCwgMHgyNSwgMHgxMCwgMHhGNCwgMHgwRiwgMHgzQywgMHgwQSwgMHg0OCwgMHhCQywgMHgzMywgMHhDMCwgMHgwMn19LAotICAgICAgICAgezcsIDg0MCwgIDQ3OCwgezB4MTEsIDB4RjQsIDB4MkQsIDB4MEUsIDB4RUIsIDB4MEQsIDB4MzMsIDB4MEIsIDB4NDgsIDB4NDgsIDB4M0IsIDB4QzAsIDB4MDJ9fSwKLSAgICAgICAgIHs1LCA3MDMsICA0MDAsIHsweDExLCAweEY0LCAweDNELCAweDBDLCAweDdBLCAweDBBLCAweEMyLCAweDBFLCAweDQ4LCAweEJGLCAweDQyLCAweEMwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMzAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHs5LCA5NTYsICA0MzgsIHsweDEwLCAweEY0LCAweDM1LCAweDBELCAweEFDLCAweDBCLCAweEY0LCAweDBELCAweDUwLCAweEJDLCAweDMzLCAweDEwLCAweDAyfX0sCi0gICAgICAgICB7NywgODM4LCAgMzg0LCB7MHgxMCwgMHhGNCwgMHg0NSwgMHgwQiwgMHhGRCwgMHgwQSwgMHg0NSwgMHgwRiwgMHg1MCwgMHg0NiwgMHgzQiwgMHgxMCwgMHgwMn19LAotICAgICAgICAgezYsIDc3MywgIDM1NCwgezB4MTAsIDB4N0EsIDB4NEIsIDB4MEIsIDB4MEMsIDB4MDksIDB4ODAsIDB4MTAsIDB4NTAsIDB4MDUsIDB4M0YsIDB4MTAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICB9LAotICAgLyogVkdBICovCi0gICB7Ci0gICAgICAvKiA1IGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7NiwgNzczLCAxMjcyLCB7MHgxRCwgMHhGNCwgMHgxNSwgMHgyNywgMHhCNiwgMHgyNCwgMHg5NiwgMHgwMiwgMHgzMCwgMHgwNSwgMHgzRiwgMHgxMCwgMHgwMn19LAotICAgICAgICAgezQsIDU5MiwgIDk3NiwgezB4MUQsIDB4RjQsIDB4MjUsIDB4MUUsIDB4NzgsIDB4MUIsIDB4NTgsIDB4MDMsIDB4MzAsIDB4NTAsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKLSAgICAgICAgIHszLCA0NDgsICA3MzgsIHsweDFELCAweEY0LCAweDNELCAweDE3LCAweDBDLCAweDEzLCAweEVDLCAweDA0LCAweDMwLCAweEMwLCAweDY5LCAweDEwLCAweDAyfX0sCi0gICAgICB9LAotICAgICAgLyogMTAgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHs5LCA5NTYsICA3ODgsIHsweDFDLCAweEY0LCAweDM1LCAweDE4LCAweDlDLCAweDE1LCAweDdDLCAweDAzLCAweDQ4LCAweEJDLCAweDMzLCAweDEwLCAweDAyfX0sCi0gICAgICAgICB7NiwgNzc2LCAgNjQwLCB7MHgxQywgMHg3QSwgMHg1MywgMHgxMywgMHhGQywgMHgxMSwgMHgyQywgMHgwNCwgMHg0OCwgMHgwOCwgMHgzRiwgMHgxMCwgMHgwMn19LAotICAgICAgICAgezQsIDU5MiwgIDQ4OCwgezB4MUMsIDB4N0EsIDB4NkIsIDB4MEYsIDB4M0MsIDB4MEMsIDB4NkMsIDB4MDYsIDB4NDgsIDB4NTAsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKLSAgICAgIH0sCi0gICAgICAvKiAxNSBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezksIDk1NywgIDUyNiwgezB4MUIsIDB4N0EsIDB4NjMsIDB4MTAsIDB4NjgsIDB4MEQsIDB4OTgsIDB4MDYsIDB4NTgsIDB4QkQsIDB4MzMsIDB4ODAsIDB4MDJ9fSwKLSAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDFCLCAweDdBLCAweDYzLCAweDEwLCAweDY4LCAweDBELCAweDk4LCAweDA2LCAweDU4LCAweEJELCAweDMzLCAweDgwLCAweDAyfX0sCi0gICAgICAgICB7OCwgODk1LCAgNDkyLCB7MHgxQiwgMHg3QSwgMHg2QiwgMHgwRiwgMHg1RCwgMHgwQywgMHg4RCwgMHgwNiwgMHg1OCwgMHg3RiwgMHgzNywgMHg4MCwgMHgwMn19LAotICAgICAgfSwKLSAgICAgIC8qIDIwIGZwcyAqLwotICAgICAgewotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICB9LAotICAgICAgLyogMjUgZnBzICovCi0gICAgICB7Ci0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgIH0sCi0gICAgICAvKiAzMCBmcHMgKi8KLSAgICAgIHsKLSAgICAgICAgIHswLCB9LAotICAgICAgICAgezAsIH0sCi0gICAgICAgICB7MCwgfSwKLSAgICAgICAgIHswLCB9LAotICAgICAgfSwKLSAgIH0sCi19OwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDU1MWNkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIEZpbGVuYW1lOiBzdHY2ODAuaAotICoKLSAqICBEZXNjcmlwdGlvbjoKLSAqICAgICBUaGlzIGlzIGEgVVNCIGRyaXZlciBmb3IgU1RWMDY4MCBiYXNlZCB1c2IgdmlkZW8gY2FtZXJhcy4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHNpemUgb2YgdXNiIHRyYW5zZmVycyAqLwotI2RlZmluZSBTVFY2ODBfUEFDS0VUU0laRQk0MDk2Ci0KLS8qIG51bWJlciBvZiBxdWV1ZWQgYnVsayB0cmFuc2ZlcnMgdG8gdXNlLCBtYXkgaGF2ZSBwcm9ibGVtcyBpZiA+IDEgKi8KLSNkZWZpbmUgU1RWNjgwX05VTVNCVUYJCTEKLQotLyogbnVtYmVyIG9mIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdGhlIHY0bCBwYXJ0ICovCi0jZGVmaW5lIFNUVjY4MF9OVU1GUkFNRVMJMgotCi0vKiBzY3JhdGNoIGJ1ZmZlcnMgZm9yIHBhc3NpbmcgZGF0YSB0byB0aGUgZGVjb2RlcnM6IDIgb3IgNCBhcmUgZ29vZCAqLwotI2RlZmluZSBTVFY2ODBfTlVNU0NSQVRDSAkyCi0KLS8qIG51bWJlciBvZiBudWwgc2l6ZWQgcGFja2V0cyB0byByZWNlaXZlIGJlZm9yZSBraWNraW5nIHRoZSBjYW1lcmEgKi8KLSNkZWZpbmUgU1RWNjgwX01BWF9OVUxMUEFDS0VUUwkyMDAKLQotLyogbnVtYmVyIG9mIGRlY29kaW5nIGVycm9ycyBiZWZvcmUga2lja2luZyB0aGUgY2FtZXJhICovCi0jZGVmaW5lIFNUVjY4MF9NQVhfRVJST1JTCTEwMAotCi0jZGVmaW5lIFVTQl9QRU5DQU1fVkVORE9SX0lECTB4MDU1MwotI2RlZmluZSBVU0JfUEVOQ0FNX1BST0RVQ1RfSUQJMHgwMjAyCi0KLSNkZWZpbmUgVVNCX0NSRUFUSVZFR09NSU5JX1ZFTkRPUl9JRAkweDA0MWUKLSNkZWZpbmUgVVNCX0NSRUFUSVZFR09NSU5JX1BST0RVQ1RfSUQJMHg0MDA3Ci0KLSNkZWZpbmUgUEVOQ0FNX1RJTUVPVVQgICAgICAgICAgMTAwMAotLyogZm10IDQgKi8KLSNkZWZpbmUgU1RWX1ZJREVPX1BBTEVUVEUgICAgICAgVklERU9fUEFMRVRURV9SR0IyNAotCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7Ci0Je1VTQl9ERVZJQ0UgKFVTQl9QRU5DQU1fVkVORE9SX0lELCBVU0JfUEVOQ0FNX1BST0RVQ1RfSUQpfSwKLQl7VVNCX0RFVklDRSAoVVNCX0NSRUFUSVZFR09NSU5JX1ZFTkRPUl9JRCwgVVNCX0NSRUFUSVZFR09NSU5JX1BST0RVQ1RfSUQpfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgZGV2aWNlX3RhYmxlKTsKLQotc3RydWN0IHN0djY4MF9zYnVmIHsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotfTsKLQotZW51bSB7Ci0JRlJBTUVfVU5VU0VELAkJLyogVW51c2VkIChubyBNQ0FQVFVSRSkgKi8KLQlGUkFNRV9SRUFEWSwJCS8qIFJlYWR5IHRvIHN0YXJ0IGdyYWJiaW5nICovCi0JRlJBTUVfR1JBQkJJTkcsCQkvKiBJbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KLQlGUkFNRV9ET05FLAkJLyogRmluaXNoZWQgZ3JhYmJpbmcsIGJ1dCBub3QgYmVlbiBzeW5jZWQgeWV0ICovCi0JRlJBTUVfRVJST1IsCQkvKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkIHdoaWxlIHByb2Nlc3NpbmcgKi8KLX07Ci0KLWVudW0gewotCUJVRkZFUl9VTlVTRUQsCi0JQlVGRkVSX1JFQURZLAotCUJVRkZFUl9CVVNZLAotCUJVRkZFUl9ET05FLAotfTsKLQotLyogcmF3IGNhbWVyYSBkYXRhIDwtIHNidWYgKHVyYiB0cmFuc2ZlciBidWYpICovCi1zdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggewotCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0Jdm9sYXRpbGUgaW50IHN0YXRlOwotCWludCBvZmZzZXQ7Ci0JaW50IGxlbmd0aDsKLX07Ci0KLS8qIHByb2Nlc3NlZCBkYXRhIGZvciBkaXNwbGF5IGVuZHMgdXAgaGVyZSwgYWZ0ZXIgYmF5ZXIgKi8KLXN0cnVjdCBzdHY2ODBfZnJhbWUgewotCXVuc2lnbmVkIGNoYXIgKmRhdGE7CS8qIEZyYW1lIGJ1ZmZlciAqLwotCXZvbGF0aWxlIGludCBncmFic3RhdGU7CS8qIFN0YXRlIG9mIGdyYWJiaW5nICovCi0JdW5zaWduZWQgY2hhciAqY3VybGluZTsKLQlpbnQgY3VybGluZXBpeDsKLQlpbnQgY3VycGl4OwotfTsKLQotLyogdGhpcyBpcyBhbG1vc3QgdGhlIHZpZGVvIHN0cnVjdHVyZSB1dmRfdCwgd2l0aCBleHRyYSBwYXJhbWV0ZXJzIGZvciBzdHYgKi8KLXN0cnVjdCB1c2Jfc3R2IHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwotCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0KLQl1bnNpZ25lZCBjaGFyIGJ1bGtfaW5fZW5kcG9pbnRBZGRyOwkvKiBfX3U4ICB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLwotCWNoYXIgKmNhbWVyYV9uYW1lOwotCi0JdW5zaWduZWQgaW50IFZpZGVvTW9kZTsJLyogMHgwMTAwID0gVkdBLCAweDAwMDAgPSBDSUYsIDB4MDMwMCA9IFFWR0EgKi8KLQlpbnQgU3VwcG9ydGVkTW9kZXM7Ci0JaW50IENJRjsKLQlpbnQgVkdBOwotCWludCBRVkdBOwotCWludCBjd2lkdGg7CQkvKiBjYW1lcmEgd2lkdGggKi8KLQlpbnQgY2hlaWdodDsJCS8qIGNhbWVyYSBoZWlnaHQgKi8KLQlpbnQgbWF4d2lkdGg7CQkvKiBtYXggdmlkZW8gd2lkdGggKi8KLQlpbnQgbWF4aGVpZ2h0OwkJLyogbWF4IHZpZGVvIGhlaWdodCAqLwotCWludCB2d2lkdGg7CQkvKiBjdXJyZW50IHdpZHRoIGZvciB2aWRlbyB3aW5kb3cgKi8KLQlpbnQgdmhlaWdodDsJCS8qIGN1cnJlbnQgaGVpZ2h0IGZvciB2aWRlbyB3aW5kb3cgKi8KLQl1bnNpZ25lZCBsb25nIGludCByYXdidWZzaXplOwotCXVuc2lnbmVkIGxvbmcgaW50IG1heGZyYW1lc2l6ZTsJLyogcmF3YnVmc2l6ZSAqIDMgZm9yIFJHQiAqLwotCi0JaW50IG9yaWdHYWluOwotCWludCBvcmlnTW9kZTsJCS8qIG9yaWdpbmFsIGNhbWVyYSBtb2RlICovCi0KLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CS8qIHRvIGxvY2sgdGhlIHN0cnVjdHVyZSAqLwotCWludCB1c2VyOwkJLyogdXNlciBjb3VudCBmb3IgZXhjbHVzaXZlIHVzZSAqLwotCWludCByZW1vdmVkOwkJLyogZGV2aWNlIGRpc2Nvbm5lY3RlZCAqLwotCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIHZpZGVvPyAqLwotCWNoYXIgKmZidWY7CQkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLwotCXN0cnVjdCB1cmIgKnVyYltTVFY2ODBfTlVNU0JVRl07CS8qICMgb2YgcXVldWVkIGJ1bGsgdHJhbnNmZXJzICovCi0JaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgZnJhbWUgKi8KLQlzdHJ1Y3Qgc3R2NjgwX2ZyYW1lIGZyYW1lW1NUVjY4MF9OVU1GUkFNRVNdOwkvKiAjIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdjRsIHBhcnQgKi8KLQlpbnQgcmVhZGNvdW50OwotCWludCBmcmFtZWNvdW50OwotCWludCBlcnJvcjsKLQlpbnQgZHJvcHBlZDsKLQlpbnQgc2NyYXRjaF9uZXh0OwotCWludCBzY3JhdGNoX3VzZTsKLQlpbnQgc2NyYXRjaF9vdmVyZmxvdzsKLQlzdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggc2NyYXRjaFtTVFY2ODBfTlVNU0NSQVRDSF07CS8qIGZvciBkZWNvZGVycyAqLwotCXN0cnVjdCBzdHY2ODBfc2J1ZiBzYnVmW1NUVjY4MF9OVU1TQlVGXTsKLQotCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOwotCXVuc2lnbmVkIGludCBjaGdicmlnaHQ7Ci0JdW5zaWduZWQgaW50IHdoaXRlbmVzczsKLQl1bnNpZ25lZCBpbnQgY29sb3VyOwotCXVuc2lnbmVkIGludCBjb250cmFzdDsKLQl1bnNpZ25lZCBpbnQgaHVlOwotCXVuc2lnbmVkIGludCBwYWxldHRlOwotCXVuc2lnbmVkIGludCBkZXB0aDsJLyogcmdiMjQgaW4gYml0cyAqLwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCi0KLQlpbnQgbnVsbHBhY2tldHM7Ci19OwotCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlZFsyNTZdID0gewotCTAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgCi0JMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDI1LCAzMCwgMzUsIDM4LCA0MiwgCi0JNDQsIDQ3LCA1MCwgNTMsIDU0LCA1NywgNTksIDYxLCA2MywgNjUsIDY3LCA2OSwgCi0JNzEsIDcxLCA3MywgNzUsIDc3LCA3OCwgODAsIDgxLCA4MiwgODQsIDg1LCA4NywgCi0JODgsIDg5LCA5MCwgOTEsIDkzLCA5NCwgOTUsIDk3LCA5OCwgOTgsIDk5LCAxMDEsIAotCTEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIAotCTExNCwgMTE1LCAxMTYsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIAotCTEyNSwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIAotCTEzNCwgMTM1LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDAsIDE0MSwgMTQyLCAxNDMsIAotCTE0MywgMTQzLCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUwLCAxNTEsIAotCTE1MiwgMTUyLCAxNTIsIDE1MywgMTU0LCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1NywgMTU4LCAxNTksIAotCTE1OSwgMTYwLCAxNjEsIDE2MSwgMTYxLCAxNjIsIDE2MywgMTYzLCAxNjQsIDE2NSwgMTY1LCAxNjYsIAotCTE2NywgMTY3LCAxNjgsIDE2OCwgMTY5LCAxNzAsIDE3MCwgMTcwLCAxNzEsIDE3MSwgMTcyLCAxNzMsIAotCTE3MywgMTc0LCAxNzQsIDE3NSwgMTc2LCAxNzYsIDE3NywgMTc4LCAxNzgsIDE3OSwgMTc5LCAxNzksIAotCTE4MCwgMTgwLCAxODEsIDE4MSwgMTgyLCAxODMsIDE4MywgMTg0LCAxODQsIDE4NSwgMTg1LCAxODYsIAotCTE4NywgMTg3LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OSwgMTkwLCAxOTAsIDE5MSwgMTkxLCAxOTIsIAotCTE5MiwgMTkzLCAxOTMsIDE5NCwgMTk1LCAxOTUsIDE5NiwgMTk2LCAxOTcsIDE5NywgMTk3LCAxOTcsIAotCTE5OCwgMTk4LCAxOTksIDE5OSwgMjAwLCAyMDEsIDIwMSwgMjAyLCAyMDIsIDIwMywgMjAzLCAyMDQsIAotCTIwNCwgMjA1LCAyMDUsIDIwNiwgMjA2LCAyMDYsIDIwNiwgMjA3LCAyMDcsIDIwOCwgMjA4LCAyMDksIAotCTIwOSwgMjEwLCAyMTAsIDIxMSwgMjExLCAyMTIsIDIxMiwgMjEzLCAyMTMsIDIxNCwgMjE0LCAyMTUsIAotCTIxNSwgMjE1LCAyMTUsIDIxNiwgMjE2LCAyMTcsIDIxNywgMjE4LCAyMTgsIDIxOCwgMjE5LCAyMTksIAotCTIyMCwgMjIwLCAyMjEsIDIyMSAKLX07IAotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBncmVlblsyNTZdID0gewotCTAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0JMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI4LCAzNCwgMzksIDQzLCA0NywgCi0JNTAsIDUzLCA1NiwgNTksIDYxLCA2NCwgNjYsIDY4LCA3MSwgNzMsIDc1LCA3NywgCi0JNzksIDgwLCA4MiwgODQsIDg2LCA4NywgODksIDkxLCA5MiwgOTQsIDk1LCA5NywgCi0JOTgsIDEwMCwgMTAxLCAxMDIsIDEwNCwgMTA1LCAxMDYsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEzLCAKLQkxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAKLQkxMjcsIDEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAKLQkxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAKLQkxNTAsIDE1MSwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU2LCAxNTcsIDE1OCwgMTU5LCAKLQkxNjAsIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2NywgMTY4LCAKLQkxNjksIDE3MCwgMTcwLCAxNzEsIDE3MiwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNzUsIDE3NiwgMTc3LCAKLQkxNzcsIDE3OCwgMTc5LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MiwgMTgzLCAxODQsIDE4NCwgMTg1LCAKLQkxODYsIDE4NiwgMTg3LCAxODcsIDE4OCwgMTg5LCAxODksIDE5MCwgMTkxLCAxOTEsIDE5MiwgMTkzLCAKLQkxOTMsIDE5NCwgMTk0LCAxOTUsIDE5NiwgMTk2LCAxOTcsIDE5OCwgMTk4LCAxOTksIDE5OSwgMjAwLCAKLQkyMDEsIDIwMSwgMjAyLCAyMDIsIDIwMywgMjA0LCAyMDQsIDIwNSwgMjA1LCAyMDYsIDIwNiwgMjA3LCAKLQkyMDgsIDIwOCwgMjA5LCAyMDksIDIxMCwgMjEwLCAyMTEsIDIxMiwgMjEyLCAyMTMsIDIxMywgMjE0LCAKLQkyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE3LCAyMTgsIDIxOCwgMjE5LCAyMTksIDIyMCwgMjIwLCAKLQkyMjEsIDIyMSwgMjIyLCAyMjIsIDIyMywgMjI0LCAyMjQsIDIyNSwgMjI1LCAyMjYsIDIyNiwgMjI3LCAKLQkyMjcsIDIyOCwgMjI4LCAyMjksIDIyOSwgMjMwLCAyMzAsIDIzMSwgMjMxLCAyMzIsIDIzMiwgMjMzLCAKLQkyMzMsIDIzNCwgMjM0LCAyMzUsIDIzNSwgMjM2LCAyMzYsIDIzNywgMjM3LCAyMzgsIDIzOCwgMjM5LCAKLQkyMzksIDI0MCwgMjQwLCAyNDEsIDI0MSwgMjQyLCAyNDIsIDI0MywgMjQzLCAyNDMsIDI0NCwgMjQ0LCAKLQkyNDUsIDI0NSwgMjQ2LCAyNDYgCi19OyAKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYmx1ZVsyNTZdID0gewotCTAsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgCi0JMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDMwLCAzNywgNDIsIDQ3LCA1MSwgCi0JNTUsIDU4LCA2MSwgNjQsIDY3LCA3MCwgNzIsIDc0LCA3OCwgODAsIDgyLCA4NCwgCi0JODYsIDg4LCA5MCwgOTIsIDk0LCA5NSwgOTcsIDEwMCwgMTAxLCAxMDMsIDEwNCwgMTA2LCAKLQkxMDcsIDExMCwgMTExLCAxMTIsIDExNCwgMTE1LCAxMTYsIDExOCwgMTE5LCAxMjEsIDEyMiwgMTI0LCAKLQkxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAKLQkxMzksIDE0MCwgMTQxLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAKLQkxNTIsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTgsIDE1OSwgMTYwLCAxNjEsIDE2MiwgMTYzLCAKLQkxNjUsIDE2NiwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcxLCAxNzIsIDE3MywgMTc0LCAKLQkxNzYsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODAsIDE4MSwgMTgyLCAxODMsIDE4MywgMTg0LCAKLQkxODUsIDE4NywgMTg3LCAxODgsIDE4OSwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTIsIDE5MywgMTk0LCAKLQkxOTQsIDE5NSwgMTk2LCAxOTYsIDE5OCwgMTk5LCAyMDAsIDIwMCwgMjAxLCAyMDIsIDIwMiwgMjAzLCAKLQkyMDQsIDIwNCwgMjA1LCAyMDUsIDIwNiwgMjA3LCAyMDcsIDIwOSwgMjEwLCAyMTAsIDIxMSwgMjEyLCAKLQkyMTIsIDIxMywgMjEzLCAyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE3LCAyMTgsIDIxOCwgMjIwLCAKLQkyMjEsIDIyMSwgMjIyLCAyMjIsIDIyMywgMjI0LCAyMjQsIDIyNSwgMjI1LCAyMjYsIDIyNiwgMjI3LCAKLQkyMjgsIDIyOCwgMjI5LCAyMjksIDIzMSwgMjMxLCAyMzIsIDIzMywgMjMzLCAyMzQsIDIzNCwgMjM1LCAKLQkyMzUsIDIzNiwgMjM2LCAyMzcsIDIzOCwgMjM4LCAyMzksIDIzOSwgMjQwLCAyNDAsIDI0MiwgMjQyLCAKLQkyNDMsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ2LCAyNDYsIDI0NywgMjQ3LCAyNDgsIDI0OCwgMjQ5LCAKLQkyNDksIDI1MCwgMjUwLCAyNTEsIDI1MSwgMjUzLCAyNTMsIDI1NCwgMjU0LCAyNTUsIDI1NSwgMjU1LCAKLQkyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAKLQkyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAKLQkyNTUsIDI1NSwgMjU1LCAyNTUgCi19OyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMgYi9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jCmluZGV4IGFkMmY0Y2MuLjFmZWYzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpAQCAtNTcwLDEwICs1NzAsOSBAQAogCiAgICAgICAgIC8qIGZpbGwgdGhlIGxpc3Qgb2YgZnJlZSBlbGVtZW50cyAqLwogICAgICAgICBmb3IgKDtudW1FbGVtZW50czsgbnVtRWxlbWVudHMtLSkgewotICAgICAgICAgICAgICAgIGFjZXAgPSAocGF1ZXJjaGFpbmVsZW1lbnRfdCkga21hbGxvYyAoc2l6ZW9mIChhdWVyY2hhaW5lbGVtZW50X3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBhY2VwID0ga3phbGxvYyhzaXplb2YoYXVlcmNoYWluZWxlbWVudF90KSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhY2VwKQogCQkJZ290byBhY19mYWlsOwotCQltZW1zZXQgKGFjZXAsIDAsIHNpemVvZiAoYXVlcmNoYWluZWxlbWVudF90KSk7CiAgICAgICAgICAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZhY2VwLT5saXN0KTsKICAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsICgmYWNlcC0+bGlzdCwgJmFjcC0+ZnJlZV9saXN0KTsKICAgICAgICAgfQpAQCAtNzYxLDEwICs3NjAsOSBAQAogCiAgICAgICAgIC8qIGZpbGwgdGhlIGxpc3Qgb2YgZnJlZSBlbGVtZW50cyAqLwogICAgICAgICBmb3IgKDtudW1FbGVtZW50czsgbnVtRWxlbWVudHMtLSkgewotICAgICAgICAgICAgICAgIGJlcCA9IChwYXVlcmJ1Zl90KSBrbWFsbG9jIChzaXplb2YgKGF1ZXJidWZfdCksIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGJlcCA9IGt6YWxsb2Moc2l6ZW9mKGF1ZXJidWZfdCksIEdGUF9LRVJORUwpOwogICAgICAgICAgICAgICAgIGlmICghYmVwKQogCQkJZ290byBibF9mYWlsOwotCSAgICAgICAgbWVtc2V0IChiZXAsIDAsIHNpemVvZiAoYXVlcmJ1Zl90KSk7CiAgICAgICAgICAgICAgICAgYmVwLT5saXN0ID0gYmNwOwogICAgICAgICAgICAgICAgIElOSVRfTElTVF9IRUFEICgmYmVwLT5idWZmX2xpc3QpOwogICAgICAgICAgICAgICAgIGJlcC0+YnVmcCA9IGttYWxsb2MgKGJ1ZnNpemUsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwppbmRleCA2NjcxMzE3Li5hMDQyMDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwpAQCAtMzUxLDEyICszNTEsMTEgQEAKIAlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmRldiA9IE5VTEw7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKLQlkZXYgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IHVzYl9jeXRoZXJtKSwgR0ZQX0tFUk5FTCk7CisJZGV2ID0ga3phbGxvYyAoc2l6ZW9mKHN0cnVjdCB1c2JfY3l0aGVybSksIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQlkZXZfZXJyICgmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JbWVtc2V0IChkZXYsIDB4MDAsIHNpemVvZiAoKmRldikpOwogCiAJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKaW5kZXggZDhjZGUxMC4uZDBiMTY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKQEAgLTEyMSw3ICsxMjIsNyBAQAogfTsKIAogLyogcHJldmVudCByYWNlcyBiZXR3ZWVuIG9wZW4oKSBhbmQgZGlzY29ubmVjdCgpICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChkaXNjb25uZWN0X3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGRpc2Nvbm5lY3RfbXV0ZXgpOwogCiBzdGF0aWMgaW50IGlkbW91c2VfY3JlYXRlX2ltYWdlKHN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2KQogewpAQCAtMjEzLDE4ICsyMTQsMTggQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAogCS8qIHByZXZlbnQgZGlzY29ubmVjdHMgKi8KLQlkb3duKCZkaXNjb25uZWN0X3NlbSk7CisJbXV0ZXhfbG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAKIAkvKiBnZXQgdGhlIGludGVyZmFjZSBmcm9tIG1pbm9yIG51bWJlciBhbmQgZHJpdmVyIGluZm9ybWF0aW9uICovCiAJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlICgmaWRtb3VzZV9kcml2ZXIsIGltaW5vciAoaW5vZGUpKTsKIAlpZiAoIWludGVyZmFjZSkgewotCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJLyogZ2V0IHRoZSBkZXZpY2UgaW5mb3JtYXRpb24gYmxvY2sgZnJvbSB0aGUgaW50ZXJmYWNlICovCiAJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwogCWlmICghZGV2KSB7Ci0JCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjU4LDcgKzI1OSw3IEBACiAJdXAoJmRldi0+c2VtKTsKIAogCS8qIHVubG9jayB0aGUgZGlzY29ubmVjdCBzZW1hcGhvcmUgKi8KLQl1cCgmZGlzY29ubmVjdF9zZW0pOworCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjY3LDEyICsyNjgsMTIgQEAKIAlzdHJ1Y3QgdXNiX2lkbW91c2UgKmRldjsKIAogCS8qIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIG9wZW4oKSAqLwotCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKwltdXRleF9sb2NrKCZkaXNjb25uZWN0X211dGV4KTsKIAogCWRldiA9IChzdHJ1Y3QgdXNiX2lkbW91c2UgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGRldiA9PSBOVUxMKSB7Ci0JCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjgyLDcgKzI4Myw3IEBACiAJLyogYXJlIHdlIHJlYWxseSBvcGVuPyAqLwogCWlmIChkZXYtPm9wZW4gPD0gMCkgewogCQl1cCgmZGV2LT5zZW0pOwotCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTI5MiwxMiArMjkzLDEyIEBACiAJCS8qIHRoZSBkZXZpY2Ugd2FzIHVucGx1Z2dlZCBiZWZvcmUgdGhlIGZpbGUgd2FzIHJlbGVhc2VkICovCiAJCXVwKCZkZXYtPnNlbSk7CiAJCWlkbW91c2VfZGVsZXRlKGRldik7Ci0JCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAJCXJldHVybiAwOwogCX0KIAogCXVwKCZkZXYtPnNlbSk7Ci0JdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0zNDAsMTAgKzM0MSw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCi0JZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChkZXYsIDB4MDAsIHNpemVvZigqZGV2KSk7CiAKIAlpbml0X01VVEVYKCZkZXYtPnNlbSk7CiAJZGV2LT51ZGV2ID0gdWRldjsKQEAgLTQwMCw3ICs0MDAsNyBAQAogCXN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2OwogCiAJLyogcHJldmVudCByYWNlcyB3aXRoIG9wZW4oKSAqLwotCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKwltdXRleF9sb2NrKCZkaXNjb25uZWN0X211dGV4KTsKIAogCS8qIGdldCBkZXZpY2Ugc3RydWN0dXJlICovCiAJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwpAQCAtNDIyLDcgKzQyMiw3IEBACiAJaWYgKCFkZXYtPm9wZW4pCiAJCWlkbW91c2VfZGVsZXRlKGRldik7CiAKLQl1cCgmZGlzY29ubmVjdF9zZW0pOworCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAKIAlpbmZvKCIlcyBkaXNjb25uZWN0ZWQiLCBEUklWRVJfREVTQyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKaW5kZXggZTJkMTE5OC4uOTY2YWNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KQEAgLTE3Miw3ICsxNzMsNyBAQAogfTsKIAogLyogcHJldmVudCByYWNlcyBiZXR3ZWVuIG9wZW4oKSBhbmQgZGlzY29ubmVjdCgpICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChkaXNjb25uZWN0X3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGRpc2Nvbm5lY3RfbXV0ZXgpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbGRfdXNiX2RyaXZlcjsKIApAQCAtMjkzLDcgKzI5NCw3IEBACiAJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiAJc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOwogCi0JZG93bigmZGlzY29ubmVjdF9zZW0pOworCW11dGV4X2xvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZsZF91c2JfZHJpdmVyLCBzdWJtaW5vcik7CiAKQEAgLTM1NSw3ICszNTYsNyBAQAogCXVwKCZkZXYtPnNlbSk7CiAKIHVubG9ja19kaXNjb25uZWN0X2V4aXQ6Ci0JdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTYyNiwxMiArNjI3LDExIEBACiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGludGlhbGl6ZSBpdCAqLwogCi0JZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JbWVtc2V0KGRldiwgMHgwMCwgc2l6ZW9mKCpkZXYpKTsKIAlpbml0X01VVEVYKCZkZXYtPnNlbSk7CiAJZGV2LT5pbnRmID0gaW50ZjsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnJlYWRfd2FpdCk7CkBAIC03NDEsNyArNzQxLDcgQEAKIAlzdHJ1Y3QgbGRfdXNiICpkZXY7CiAJaW50IG1pbm9yOwogCi0JZG93bigmZGlzY29ubmVjdF9zZW0pOworCW11dGV4X2xvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwpAQCAtNzYyLDcgKzc2Miw3IEBACiAJCXVwKCZkZXYtPnNlbSk7CiAJfQogCi0JdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJZGV2X2luZm8oJmludGYtPmRldiwgIkxEIFVTQiBEZXZpY2UgIyVkIG5vdyBkaXNjb25uZWN0ZWRcbiIsCiAJCSAobWlub3IgLSBVU0JfTERfTUlOT1JfQkFTRSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKaW5kZXggMTMzNjc0NS4uNzc5YmNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KQEAgLTI1Niw3ICsyNTcsNyBAQAogCiAKIC8qIHByZXZlbnQgcmFjZXMgYmV0d2VlbiBvcGVuKCkgYW5kIGRpc2Nvbm5lY3QgKi8KLXN0YXRpYyBERUNMQVJFX01VVEVYIChkaXNjb25uZWN0X3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYIChkaXNjb25uZWN0X211dGV4KTsKIAogLyogZmlsZSBvcGVyYXRpb25zIG5lZWRlZCB3aGVuIHdlIHJlZ2lzdGVyIHRoaXMgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0b3dlcl9mb3BzID0gewpAQCAtMzQ5LDcgKzM1MCw3IEBACiAJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiAJc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOwogCi0JZG93biAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwltdXRleF9sb2NrICgmZGlzY29ubmVjdF9tdXRleCk7CiAKIAlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UgKCZ0b3dlcl9kcml2ZXIsIHN1Ym1pbm9yKTsKIApAQCAtNDI3LDcgKzQyOCw3IEBACiAJdXAgKCZkZXYtPnNlbSk7CiAKIHVubG9ja19kaXNjb25uZWN0X2V4aXQ6Ci0JdXAgKCZkaXNjb25uZWN0X3NlbSk7CisJbXV0ZXhfdW5sb2NrICgmZGlzY29ubmVjdF9tdXRleCk7CiAKIAlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkICIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKIApAQCAtMTAwNSw3ICsxMDA2LDcgQEAKIAogCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKIAotCWRvd24gKCZkaXNjb25uZWN0X3NlbSk7CisJbXV0ZXhfbG9jayAoJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOwpAQCAtMTAyNyw3ICsxMDI4LDcgQEAKIAkJdXAgKCZkZXYtPnNlbSk7CiAJfQogCi0JdXAgKCZkaXNjb25uZWN0X3NlbSk7CisJbXV0ZXhfdW5sb2NrICgmZGlzY29ubmVjdF9tdXRleCk7CiAKIAlpbmZvKCJMRUdPIFVTQiBUb3dlciAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIChtaW5vciAtIExFR09fVVNCX1RPV0VSX01JTk9SX0JBU0UpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwppbmRleCA2MDVhM2M4Li45OTdkYjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRraXQuYwpAQCAtODgsNyArODgsNyBAQAogCWludCByZXR2YWw7CiAJaW50IG47CiAKLQlidWZmZXIgPSBrbWFsbG9jKDQsIEdGUF9LRVJORUwpOworCWJ1ZmZlciA9IGt6YWxsb2MoNCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpIHsKIAkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCiAJCQlfX0ZVTkNUSU9OX18pOwpAQCAtOTYsNyArOTYsNiBAQAogCX0KIAogCWtpdC0+b3V0cHV0c1tvdXRwdXRfbnVtXSA9IGVuYWJsZTsKLQltZW1zZXQoYnVmZmVyLCAwLCA0KTsKIAlmb3IgKG49MDsgbjw4OyBuKyspIHsKIAkJaWYgKGtpdC0+b3V0cHV0c1tuXSkgewogCQkJYnVmZmVyWzBdIHw9IDEgPDwgbjsKQEAgLTE5Miw3ICsxOTEsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAkKLQlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWJ1ZmZlciA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpIHsKIAkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gZXhpdDsKQEAgLTIwMiw3ICsyMDEsNiBAQAogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQotCW1lbXNldChidWZmZXIsIDB4MDAsIDgpOwogCWlmIChlbmFibGVkKQogCQlidWZmZXJbMF0gPSAweDAxOwogCWJ1ZmZlcls3XSA9IDB4MTE7CkBAIC00MDYsMTIgKzQwNCwxMSBAQAogCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKIAltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKIAkKLQlraXQgPSBrbWFsbG9jKHNpemVvZigqa2l0KSwgR0ZQX0tFUk5FTCk7CisJa2l0ID0ga3phbGxvYyhzaXplb2YoKmtpdCksIEdGUF9LRVJORUwpOwogCWlmIChraXQgID09IE5VTEwpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGtpdCwgMCwgc2l6ZW9mKCpraXQpKTsKIAlraXQtPmlma2l0ID0gaWZraXQ7CiAKIAlraXQtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgOCwgU0xBQl9BVE9NSUMsICZraXQtPmRhdGFfZG1hKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCmluZGV4IGIzNDE4ZDIuLjVhMDQwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYwpAQCAtMjUyLDEyICsyNTIsMTEgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKIAlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqZGV2OwogCi0JZGV2ID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBwaGlkZ2V0X3NlcnZvKSwgR0ZQX0tFUk5FTCk7CisJZGV2ID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBwaGlkZ2V0X3NlcnZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KGRldiwgMHgwMCwgc2l6ZW9mICgqZGV2KSk7CiAKIAlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKIAlkZXYtPnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCmluZGV4IDMyNjBkNTkuLjE5NmM4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC0zMTg4LDcgKzMxODgsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlyZXR2YWwgPSAtRU5PVFRZOwogCQkJYnJlYWs7CiAJfQogCkBAIC0zMjUxLDEyICszMjUxLDExIEBACiAJCWRldi0+ZGV2bnVtKTsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIHByaXZhdGUgKi8KLQlpZiAoIShzaXN1c2IgPSBrbWFsbG9jKHNpemVvZigqc2lzdXNiKSwgR0ZQX0tFUk5FTCkpKSB7CisJaWYgKCEoc2lzdXNiID0ga3phbGxvYyhzaXplb2YoKnNpc3VzYiksIEdGUF9LRVJORUwpKSkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJzaXN1c2I6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHByaXZhdGUgZGF0YVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoc2lzdXNiLCAwLCBzaXplb2YoKnNpc3VzYikpOwogCWtyZWZfaW5pdCgmc2lzdXNiLT5rcmVmKTsKIAogCWluaXRfTVVURVgoJihzaXN1c2ItPmxvY2spKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5oIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmgKaW5kZXggMWQ3YTc3Yy4uYTcxNjgyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmgKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmgKQEAgLTM3LDI0ICszNywxNiBAQAogI2lmbmRlZiBfU0lTVVNCX0hfCiAjZGVmaW5lIF9TSVNVU0JfSF8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpZmRlZiBDT05GSUdfQ09NUEFUCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMCkKLSNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+Ci0jZGVmaW5lIFNJU1VTQl9PTERfQ09ORklHX0NPTVBBVAotI2Vsc2UKICNkZWZpbmUgU0lTVVNCX05FV19DT05GSUdfQ09NUEFUCiAjZW5kaWYKLSNlbmRpZgogCiAvKiBGb3Igb2xkZXIga2VybmVscywgc3VwcG9ydCBmb3IgdGV4dCBjb25zb2xlcyBpcyBieSBkZWZhdWx0CiAgKiBvZmYuIFRvIGVuc2FibGUgdGV4dCBjb25zb2xlIHN1cHBvcnQsIGNoYW5nZSB0aGUgZm9sbG93aW5nOgogICovCiAjaWYgMAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTMpCiAjZGVmaW5lIENPTkZJR19VU0JfU0lTVVNCVkdBX0NPTgogI2VuZGlmCi0jZW5kaWYKIAogLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCBjYzNkYWUzLi5jODJjNDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTI3MCwxMiArMjcwLDExIEBACiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KLQlkZXYgPSBrbWFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JbWVtc2V0KGRldiwgMHgwMCwgc2l6ZW9mKCpkZXYpKTsKIAlrcmVmX2luaXQoJmRldi0+a3JlZik7CiAKIAlkZXYtPnVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKaW5kZXggODc3YjA4MS4uZjQ0MTk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCkBAIC0xMDYsMTIgKzEwNiwxMSBAQAogCXN0cnVjdCB1c2JfbGVkICpkZXYgPSBOVUxMOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCi0JZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9sZWQpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2xlZCksIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KLQltZW1zZXQgKGRldiwgMHgwMCwgc2l6ZW9mICgqZGV2KSk7CiAKIAlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCA4NGZhMTcyLi45ZDU5YjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMzgyLDEyICszODIsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgewogCQljaGFyCQkqYnVmOwogCi0JCWJ1ZiA9IGttYWxsb2MgKHNpemUsIFNMQUJfS0VSTkVMKTsKKwkJYnVmID0ga3phbGxvYyAoc2l6ZSwgU0xBQl9LRVJORUwpOwogCQlpZiAoIWJ1ZikgewogCQkJZnJlZV9zZ2xpc3QgKHNnLCBpKTsKIAkJCXJldHVybiBOVUxMOwogCQl9Ci0JCW1lbXNldCAoYnVmLCAwLCBzaXplKTsKIAogCQkvKiBrbWFsbG9jIHBhZ2VzIGFyZSBhbHdheXMgcGh5c2ljYWxseSBjb250aWd1b3VzISAqLwogCQlzZ19pbml0X29uZSgmc2dbaV0sIGJ1Ziwgc2l6ZSk7CkBAIC04NDIsMTAgKzg0MSw5IEBACiAJICogYXMgd2l0aCBidWxrL2ludHIgc2dsaXN0cywgc2dsZW4gaXMgdGhlIHF1ZXVlIGRlcHRoOyBpdCBhbHNvCiAJICogY29udHJvbHMgd2hpY2ggc3VidGVzdHMgcnVuIChtb3JlIHRlc3RzIHRoYW4gc2dsZW4pIG9yIHJlcnVuLgogCSAqLwotCXVyYiA9IGttYWxsb2MgKHBhcmFtLT5zZ2xlbiAqIHNpemVvZiAoc3RydWN0IHVyYiAqKSwgU0xBQl9LRVJORUwpOworCXVyYiA9IGtjYWxsb2MocGFyYW0tPnNnbGVuLCBzaXplb2Yoc3RydWN0IHVyYiAqKSwgU0xBQl9LRVJORUwpOwogCWlmICghdXJiKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQgKHVyYiwgMCwgcGFyYW0tPnNnbGVuICogc2l6ZW9mIChzdHJ1Y3QgdXJiICopKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyYW0tPnNnbGVuOyBpKyspIHsKIAkJaW50CQkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZSAodWRldiwgMCk7CiAJCXVuc2lnbmVkCQlsZW47CkBAIC0xODY1LDEwICsxODYzLDkgQEAKIAl9CiAjZW5kaWYKIAotCWRldiA9IGttYWxsb2MgKHNpemVvZiAqZGV2LCBTTEFCX0tFUk5FTCk7CisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIFNMQUJfS0VSTkVMKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0IChkZXYsIDAsIHNpemVvZiAqZGV2KTsKIAlpbmZvID0gKHN0cnVjdCB1c2J0ZXN0X2luZm8gKikgaWQtPmRyaXZlcl9pbmZvOwogCWRldi0+aW5mbyA9IGluZm87CiAJaW5pdF9NVVRFWCAoJmRldi0+c2VtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fbWFpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKaW5kZXggYzM0OTQ0Yy4uNmVjYzI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJ1c2JfbW9uLmgiCiAjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKQEAgLTIzLDcgKzI0LDcgQEAKIHN0YXRpYyB2b2lkIG1vbl9idXNfZHJvcChzdHJ1Y3Qga3JlZiAqcik7CiBzdGF0aWMgdm9pZCBtb25fYnVzX2luaXQoc3RydWN0IGRlbnRyeSAqbW9uZGlyLCBzdHJ1Y3QgdXNiX2J1cyAqdWJ1cyk7CiAKLURFQ0xBUkVfTVVURVgobW9uX2xvY2spOworREVGSU5FX01VVEVYKG1vbl9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKm1vbl9kaXI7CQkvKiAvZGJnL3VzYm1vbiAqLwogc3RhdGljIExJU1RfSEVBRChtb25fYnVzZXMpOwkJLyogQWxsIGJ1c2VzIHdlIGtub3c6IHN0cnVjdCBtb25fYnVzICovCkBAIC0xOTYsMTQgKzE5NywxNCBAQAogewogCXN0cnVjdCBtb25fYnVzICptYnVzID0gdWJ1cy0+bW9uX2J1czsKIAotCWRvd24oJm1vbl9sb2NrKTsKKwltdXRleF9sb2NrKCZtb25fbG9jayk7CiAJbGlzdF9kZWwoJm1idXMtPmJ1c19saW5rKTsKIAlkZWJ1Z2ZzX3JlbW92ZShtYnVzLT5kZW50X3QpOwogCWRlYnVnZnNfcmVtb3ZlKG1idXMtPmRlbnRfcyk7CiAKIAltb25fZGlzc29sdmUobWJ1cywgdWJ1cyk7CiAJa3JlZl9wdXQoJm1idXMtPnJlZiwgbW9uX2J1c19kcm9wKTsKLQl1cCgmbW9uX2xvY2spOworCW11dGV4X3VubG9jaygmbW9uX2xvY2spOwogfQogCiBzdGF0aWMgaW50IG1vbl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKQEAgLTI3Niw5ICsyNzcsOCBAQAogCWNoYXIgbmFtZVtOQU1FU1pdOwogCWludCByYzsKIAotCWlmICgobWJ1cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb25fYnVzKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJaWYgKChtYnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vbl9idXMpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJZ290byBlcnJfYWxsb2M7Ci0JbWVtc2V0KG1idXMsIDAsIHNpemVvZihzdHJ1Y3QgbW9uX2J1cykpOwogCWtyZWZfaW5pdCgmbWJ1cy0+cmVmKTsKIAlzcGluX2xvY2tfaW5pdCgmbWJ1cy0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJm1idXMtPnJfbGlzdCk7CkBAIC0zMDcsOSArMzA3LDkgQEAKIAkJZ290byBlcnJfY3JlYXRlX3M7CiAJbWJ1cy0+ZGVudF9zID0gZDsKIAotCWRvd24oJm1vbl9sb2NrKTsKKwltdXRleF9sb2NrKCZtb25fbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmbWJ1cy0+YnVzX2xpbmssICZtb25fYnVzZXMpOwotCXVwKCZtb25fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZtb25fbG9jayk7CiAJcmV0dXJuOwogCiBlcnJfY3JlYXRlX3M6CkBAIC0zNDcsMTEgKzM0NywxMSBAQAogCiAJdXNiX3JlZ2lzdGVyX25vdGlmeSgmbW9uX25iKTsKIAotCWRvd24oJnVzYl9idXNfbGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSAodWJ1cywgJnVzYl9idXNfbGlzdCwgYnVzX2xpc3QpIHsKIAkJbW9uX2J1c19pbml0KG1vbmRpciwgdWJ1cyk7CiAJfQotCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2Myw3ICszNjMsNyBAQAogCXVzYl91bnJlZ2lzdGVyX25vdGlmeSgmbW9uX25iKTsKIAl1c2JfbW9uX2RlcmVnaXN0ZXIoKTsKIAotCWRvd24oJm1vbl9sb2NrKTsKKwltdXRleF9sb2NrKCZtb25fbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZtb25fYnVzZXMpKSB7CiAJCXAgPSBtb25fYnVzZXMubmV4dDsKIAkJbWJ1cyA9IGxpc3RfZW50cnkocCwgc3RydWN0IG1vbl9idXMsIGJ1c19saW5rKTsKQEAgLTM4Nyw3ICszODcsNyBAQAogCQltb25fZGlzc29sdmUobWJ1cywgbWJ1cy0+dV9idXMpOwogCQlrcmVmX3B1dCgmbWJ1cy0+cmVmLCBtb25fYnVzX2Ryb3ApOwogCX0KLQl1cCgmbW9uX2xvY2spOworCW11dGV4X3VubG9jaygmbW9uX2xvY2spOwogCiAJZGVidWdmc19yZW1vdmUobW9uX2Rpcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jCmluZGV4IDYxMTYxMjEuLmFjMDQzZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAidXNiX21vbi5oIgpAQCAtNTQsNyArNTUsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAJaW50IHByaW50Zl9zaXplOwogCWNoYXIgKnByaW50Zl9idWY7Ci0Jc3RydWN0IHNlbWFwaG9yZSBwcmludGZfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggcHJpbnRmX2xvY2s7CiAKIAljaGFyIHNsYWJfbmFtZVtTTEFCX05BTUVfU1pdOwogfTsKQEAgLTIwOCwxOSArMjA5LDE4IEBACiAJc3RydWN0IG1vbl9yZWFkZXJfdGV4dCAqcnA7CiAJaW50IHJjOwogCi0JZG93bigmbW9uX2xvY2spOworCW11dGV4X2xvY2soJm1vbl9sb2NrKTsKIAltYnVzID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKIAl1YnVzID0gbWJ1cy0+dV9idXM7CiAKLQlycCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb25fcmVhZGVyX3RleHQpLCBHRlBfS0VSTkVMKTsKKwlycCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb25fcmVhZGVyX3RleHQpLCBHRlBfS0VSTkVMKTsKIAlpZiAocnAgPT0gTlVMTCkgewogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jOwogCX0KLQltZW1zZXQocnAsIDAsIHNpemVvZihzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0KSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJwLT5lX2xpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJwLT53YWl0KTsKLQlpbml0X01VVEVYKCZycC0+cHJpbnRmX2xvY2spOworCW11dGV4X2luaXQoJnJwLT5wcmludGZfbG9jayk7CiAKIAlycC0+cHJpbnRmX3NpemUgPSBQUklOVEZfREZMOwogCXJwLT5wcmludGZfYnVmID0ga21hbGxvYyhycC0+cHJpbnRmX3NpemUsIEdGUF9LRVJORUwpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJbW9uX3JlYWRlcl9hZGQobWJ1cywgJnJwLT5yKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHJwOwotCXVwKCZtb25fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZtb25fbG9jayk7CiAJcmV0dXJuIDA7CiAKIC8vIGVycl9idXN5OgpAQCAtMjU3LDcgKzI1Nyw3IEBACiBlcnJfYWxsb2NfcHI6CiAJa2ZyZWUocnApOwogZXJyX2FsbG9jOgotCXVwKCZtb25fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZtb25fbG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zMDEsNyArMzAxLDcgQEAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZycC0+d2FpdCwgJndhaXRhKTsKIAotCWRvd24oJnJwLT5wcmludGZfbG9jayk7CisJbXV0ZXhfbG9jaygmcnAtPnByaW50Zl9sb2NrKTsKIAljbnQgPSAwOwogCXBidWYgPSBycC0+cHJpbnRmX2J1ZjsKIAlsaW1pdCA9IHJwLT5wcmludGZfc2l6ZTsKQEAgLTM1OCw3ICszNTgsNyBAQAogCiAJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJwLT5wcmludGZfYnVmLCBjbnQpKQogCQljbnQgPSAtRUZBVUxUOwotCXVwKCZycC0+cHJpbnRmX2xvY2spOworCW11dGV4X3VubG9jaygmcnAtPnByaW50Zl9sb2NrKTsKIAlrbWVtX2NhY2hlX2ZyZWUocnAtPmVfc2xhYiwgZXApOwogCXJldHVybiBjbnQ7CiB9CkBAIC0zNzEsMTIgKzM3MSwxMiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAJc3RydWN0IG1vbl9ldmVudF90ZXh0ICplcDsKIAotCWRvd24oJm1vbl9sb2NrKTsKKwltdXRleF9sb2NrKCZtb25fbG9jayk7CiAJbWJ1cyA9IGlub2RlLT51LmdlbmVyaWNfaXA7CiAKIAlpZiAobWJ1cy0+bnJlYWRlcnMgPD0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgVEFHICI6IGNvbnNpc3RlbmN5IGVycm9yIG9uIGNsb3NlXG4iKTsKLQkJdXAoJm1vbl9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtb25fbG9jayk7CiAJCXJldHVybiAwOwogCX0KIAltb25fcmVhZGVyX2RlbChtYnVzLCAmcnAtPnIpOwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJa2ZyZWUocnAtPnByaW50Zl9idWYpOwogCWtmcmVlKHJwKTsKIAotCXVwKCZtb25fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZtb25fbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmggYi9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oCmluZGV4IDRiZTBmOTMuLjhlMDYxM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmgKKysrIGIvZHJpdmVycy91c2IvbW9uL3VzYl9tb24uaApAQCAtNDksNyArNDksNyBAQAogICovCiBleHRlcm4gY2hhciBtb25fZG1hcGVlayh1bnNpZ25lZCBjaGFyICpkc3QsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIGludCBsZW4pOwogCi1leHRlcm4gc3RydWN0IHNlbWFwaG9yZSBtb25fbG9jazsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggbW9uX2xvY2s7CiAKIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vbl9mb3BzX3RleHQ7CiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtb25fZm9wc19zdGF0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKaW5kZXggMTU2YTJmMS4uNWI2Njc1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCkBAIC01MjQsNiArNTI0LDcgQEAKIAlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwwLCAzLCBkYXRhKTsKIAogCWlmICh1c2JfZGV2X2lkW3BlZ2FzdXMtPmRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9MSU5LU1lTIHx8CisJICAgIHVzYl9kZXZfaWRbcGVnYXN1cy0+ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMyIHx8CiAJICAgIHVzYl9kZXZfaWRbcGVnYXN1cy0+ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0RMSU5LKSB7CiAJCXUxNiBhdXhtb2RlOwogCQlyZWFkX21paV93b3JkKHBlZ2FzdXMsIDAsIDB4MWIsICZhdXhtb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmggYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oCmluZGV4IDlmYmQ1OWIuLmE1NDc1MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmgKKysrIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuaApAQCAtMjUsNyArMjUsNiBAQAogI2RlZmluZQlQSFlfUkVBRAkJMHg0MAogI2RlZmluZQlQSFlfV1JJVEUJCTB4MjAKICNkZWZpbmUJREVGQVVMVF9HUElPX1JFU0VUCTB4MjQKLSNkZWZpbmUJTElOS1NZU19HUElPX1JFU0VUCTB4MjQKICNkZWZpbmUJREVGQVVMVF9HUElPX1NFVAkweDI2CiAKICNkZWZpbmUJUEVHQVNVU19QUkVTRU5UCQkweDAwMDAwMDAxCkBAIC0xNDAsNiArMTM5LDcgQEAKICNkZWZpbmUJVkVORE9SX0tJTkdTVE9OCQkweDA5NTEKICNkZWZpbmUJVkVORE9SX0xBTkVFRAkJMHgwNTZlCiAjZGVmaW5lCVZFTkRPUl9MSU5LU1lTCQkweDA2NmIKKyNkZWZpbmUJVkVORE9SX0xJTktTWVMyCQkweDA3N2IKICNkZWZpbmUJVkVORE9SX01FTENPCQkweDA0MTEKICNkZWZpbmUJVkVORE9SX01JQ1JPU09GVAkweDA0NWUKICNkZWZpbmUJVkVORE9SX01PQklMSVRZCQkweDEzNDIKQEAgLTIxOCwxNSArMjE4LDE1IEBACiBQRUdBU1VTX0RFViggIkNvcmVnYSBGRXRlciBVU0ItVFhTIiwgVkVORE9SX0NPUkVHQSwgMHgwMDBkLAogCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKIFBFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHg0MDAxLAotCQlMSU5LU1lTX0dQSU9fUkVTRVQgKQorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQogUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQwMDIsCi0JCUxJTktTWVNfR1BJT19SRVNFVCApCisJCURFRkFVTFRfR1BJT19SRVNFVCApCiBQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgiLCBWRU5ET1JfRExJTkssIDB4NDEwMiwKLQkJTElOS1NZU19HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQogUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQwMGIsCi0JCUxJTktTWVNfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKIFBFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHgyMDBjLAotCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCiBQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgoUE5BKSIsIFZFTkRPUl9ETElOSywgMHg0MDAzLAogCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQogUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MCIsIFZFTkRPUl9ETElOSywgMHhhYmMxLApAQCAtMjYwLDE3ICsyNjAsMTkgQEAKIFBFR0FTVVNfREVWKCAiTEFORUVEIFVTQiBFdGhlcm5ldCBMRC1VU0IvVFgiLCBWRU5ET1JfTEFORUVELCAweDIwMGMsCiAJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQogUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwVFgiLCBWRU5ET1JfTElOS1NZUywgMHgyMjAyLAotCQlMSU5LU1lTX0dQSU9fUkVTRVQgKQorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQogUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4MjIwMywKLQkJTElOS1NZU19HUElPX1JFU0VUICkKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKIFBFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IxMDBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIyMDQsCi0JCUxJTktTWVNfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCiBQRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCMTBUIEV0aGVybmV0IEFkYXB0ZXIiLCBWRU5ET1JfTElOS1NZUywgMHgyMjA2LAotCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJKQorUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQlZQTjEiLCBWRU5ET1JfTElOS1NZUzIsIDB4MDhiNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKIFBFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IgVVNCMTAwVFgiLCBWRU5ET1JfTElOS1NZUywgMHg0MDBiLAotCQlMSU5LU1lTX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCiBQRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCMTBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIwMGMsCi0JCUxJTktTWVNfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQkKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCiBQRUdBU1VTX0RFViggIk1FTENPL0JVRkZBTE8gTFVBLVRYIiwgVkVORE9SX01FTENPLCAweDAwMDEsCiAJCURFRkFVTFRfR1BJT19SRVNFVCApCiBQRUdBU1VTX0RFViggIk1FTENPL0JVRkZBTE8gTFVBLVRYIiwgVkVORE9SX01FTENPLCAweDAwMDUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jIGIvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYwppbmRleCA4Y2E1MmJlLi4xYmJiYWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKQEAgLTg4MCw3ICs4ODAsNiBAQAogCX0KIAlmaWxsX3NrYl9wb29sKGRldik7CiAJc2V0X2V0aGVybmV0X2FkZHIoZGV2KTsKLQlpbmZvKCIlczogcnRsODE1MCBpcyBkZXRlY3RlZCIsIG5ldGRldi0+bmFtZSk7CiAJCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmludGYtPmRldik7CkBAIC04ODgsNiArODg3LDkgQEAKIAkJZXJyKCJjb3VsZG4ndCByZWdpc3RlciB0aGUgZGV2aWNlIik7CiAJCWdvdG8gb3V0MjsKIAl9CisKKwlpbmZvKCIlczogcnRsODE1MCBpcyBkZXRlY3RlZCIsIG5ldGRldi0+bmFtZSk7CisKIAlyZXR1cm4gMDsKIAogb3V0MjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuYyBiL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuYwppbmRleCBmM2E4ZTI4Li5mZTliNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jCkBAIC02MjEsMTAgKzYyMSw5IEBACiAJX19sZTE2IHpkbWF4OwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAkKLQlidWZmZXIgPSBrbWFsbG9jKFpEMTIwMV9SWFNJWkUsIEdGUF9LRVJORUwpOworCWJ1ZmZlciA9IGt6YWxsb2MoWkQxMjAxX1JYU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChidWZmZXIsIDAsIFpEMTIwMV9SWFNJWkUpOwogCiAJdXNiX2ZpbGxfYnVsa191cmIoemQtPnJ4X3VyYiwgemQtPnVzYiwgCiAJICAgIHVzYl9yY3ZidWxrcGlwZSh6ZC0+dXNiLCB6ZC0+ZW5kcF9pbiksIGJ1ZmZlciwgWkQxMjAxX1JYU0laRSwKQEAgLTE3NTAsMTEgKzE3NDksOSBAQAogCiAJdXNiID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCi0JemQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgemQxMjAxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF6ZCkgeworCXpkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpkMTIwMSksIEdGUF9LRVJORUwpOworCWlmICghemQpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KLQltZW1zZXQoemQsIDAsIHNpemVvZihzdHJ1Y3QgemQxMjAxKSk7CiAJemQtPmFwID0gYXA7CiAJemQtPnVzYiA9IHVzYjsKIAl6ZC0+cmVtb3ZlZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IGJlNWRjODAuLjVhOGEyYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC00MDMsNiArNDAzLDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtY3RfdTIzMi4KIAorY29uZmlnIFVTQl9TRVJJQUxfTkFWTUFOCisJdHJpc3RhdGUgIlVTQiBOYXZtYW4gR1BTIGRldmljZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBuYXZtYW4uCisKIGNvbmZpZyBVU0JfU0VSSUFMX1BMMjMwMwogCXRyaXN0YXRlICJVU0IgUHJvbGlmaWMgMjMwMyBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgogCWRlcGVuZHMgb24gVVNCX1NFUklBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCmluZGV4IGYwYjA0NDIuLmY3ZmU0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKQEAgLTMyLDYgKzMyLDcgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0tMU0kpCQkJKz0ga2w1a3VzYjEwNS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QpCQkrPSBrb2JpbF9zY3Qubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIpCQkrPSBtY3RfdTIzMi5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4pCQkJKz0gbmF2bWFuLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX09NTklORVQpCQkrPSBvbW5pbmV0Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX09QVElPTikJCQkrPSBvcHRpb24ubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzKQkJCSs9IHBsMjMwMy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTAxLmMKaW5kZXggZGM3YTA2OS4uZTBjMmFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpAQCAtMzIsNyArMzIsNyBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMDYiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wNyIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlNpbGljb24gTGFicyBDUDIxMDEvQ1AyMTAyIFJTMjMyIHNlcmlhbCBhZGFwdG9yIGRyaXZlciIKIAogLyoKQEAgLTU4LDYgKzU4LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMEE2LCAweEFBMjYpIH0sIC8qIEtub2NrLW9mZiBEQ1UtMTEgY2FibGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEFCLCAweDEwQzUpIH0sIC8qIFNpZW1lbnMgTUM2MCBDYWJsZSAqLwogCXsgVVNCX0RFVklDRSgweDEwQjUsIDB4QUM3MCkgfSwgLyogTm9raWEgQ0EtNDIgVVNCICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDNCKSB9LCAvKiBQb2xvbHUgVVNCLXNlcmlhbCBjb252ZXJ0ZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwN0EpIH0sIC8qIENydW1iMTI4IGJvYXJkICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MENBKSB9LCAvKiBEZWdyZWUgQ29udHJvbHMgSW5jICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MEY2KSB9LCAvKiBTdXVudG8gc3BvcnRzIGluc3RydW1lbnQgKi8KQEAgLTE2OSw5ICsxNzAsNyBAQAogCS8qIE51bWJlciBvZiBpbnRlZ2VycyByZXF1aXJlZCB0byBjb250YWluIHRoZSBhcnJheSAqLwogCWxlbmd0aCA9ICgoKHNpemUgLSAxKSB8IDMpICsgMSkvNDsKIAotCWJ1ZiA9IGttYWxsb2MgKGxlbmd0aCAqIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKLQltZW1zZXQoYnVmLCAwLCBsZW5ndGggKiBzaXplb2YodTMyKSk7Ci0KKwlidWYgPSBrY2FsbG9jKGxlbmd0aCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggNjgwNjdmZS4uNzIxMmZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC05OCwxMCArOTgsMTYgQEAKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX25va2lhY2E0MnYyIFtdID0geworCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREFaWkxFLCBQUk9EVUNUX0lEX0NBNDIpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0RFTE9STUUsIFBST0RVQ1RfSURfRUFSVEhNQVRFVVNCKSB9LAogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREVMT1JNRSwgUFJPRFVDVF9JRF9FQVJUSE1BVEVVU0JfTFQyMCkgfSwKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0NZUFJFU1MsIFBST0RVQ1RfSURfQ1lQSElEQ09NKSB9LAorCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREFaWkxFLCBQUk9EVUNUX0lEX0NBNDIpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTE0OSw2ICsxNTUsNyBAQAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIEN5cHJlc3MgVVNCIHRvIHNlcmlhbCBkZXZpY2UgKi8KIHN0YXRpYyBpbnQgIGN5cHJlc3NfZWFydGhtYXRlX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCAgY3lwcmVzc19oaWRjb21fc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBjeXByZXNzX2NhNDJ2Ml9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyB2b2lkIGN5cHJlc3Nfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIHN0YXRpYyBpbnQgIGN5cHJlc3Nfb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKIHN0YXRpYyB2b2lkIGN5cHJlc3NfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CkBAIC0yMzUsNiArMjQyLDM0IEBACiAJLndyaXRlX2ludF9jYWxsYmFjayA9CQljeXByZXNzX3dyaXRlX2ludF9jYWxsYmFjaywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgY3lwcmVzc19jYTQydjJfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CQlUSElTX01PRFVMRSwKKyAgICAgICAgICAgICAgICAubmFtZSA9CQkJIm5va2lhY2E0MnYyIiwKKwl9LAorCS5kZXNjcmlwdGlvbiA9CQkJIk5va2lhIENBLTQyIFYyIEFkYXB0ZXIiLAorCS5pZF90YWJsZSA9CQkJaWRfdGFibGVfbm9raWFjYTQydjIsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkJMSwKKwkubnVtX2ludGVycnVwdF9vdXQgPQkJMSwKKwkubnVtX2J1bGtfaW4gPQkJCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCQkxLAorCS5hdHRhY2ggPQkJCWN5cHJlc3NfY2E0MnYyX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCQljeXByZXNzX3NodXRkb3duLAorCS5vcGVuID0JCQkJY3lwcmVzc19vcGVuLAorCS5jbG9zZSA9CQkJY3lwcmVzc19jbG9zZSwKKwkud3JpdGUgPQkJCWN5cHJlc3Nfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJCWN5cHJlc3Nfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPQkJCWN5cHJlc3NfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCQljeXByZXNzX3NldF90ZXJtaW9zLAorCS50aW9jbWdldCA9CQkJY3lwcmVzc190aW9jbWdldCwKKwkudGlvY21zZXQgPQkJCWN5cHJlc3NfdGlvY21zZXQsCisJLmNoYXJzX2luX2J1ZmZlciA9CQljeXByZXNzX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUgPQkJCWN5cHJlc3NfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJCWN5cHJlc3NfdW50aHJvdHRsZSwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywKKwkud3JpdGVfaW50X2NhbGxiYWNrID0JCWN5cHJlc3Nfd3JpdGVfaW50X2NhbGxiYWNrLAorfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDeXByZXNzIHNlcmlhbCBoZWxwZXIgZnVuY3Rpb25zCkBAIC0yODYsNiArMzIxLDEyIEBACiAJCQkJCQkgICAgX19GVU5DVElPTl9fKTsKIAkJCQkJCW5ld19iYXVkcmF0ZSA9IHByaXYtPmJhdWRfcmF0ZTsKIAkJCQkJfQorCQkJCX0gZWxzZSBpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfQ0E0MlYyKSB7CisJCQkJCWlmICggKG5ld19iYXVkcmF0ZSA9IG1hc2tfdG9fcmF0ZShiYXVkX21hc2spKSA9PSAtMSkgeworCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQiLAorCQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJCQluZXdfYmF1ZHJhdGUgPSBwcml2LT5iYXVkX3JhdGU7CisJCQkJCX0KIAkJCQl9IGVsc2UgaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0dFTkVSSUMpIHsKIAkJCQkJaWYgKCAobmV3X2JhdWRyYXRlID0gbWFza190b19yYXRlKGJhdWRfbWFzaykpID09IC0xKSB7CiAJCQkJCQllcnIoIiVzIC0gZmFpbGVkIHNldHRpbmcgYmF1ZCByYXRlLCB1bnN1cHBvcnRlZCBzcGVlZCIsCkBAIC00MzUsMTEgKzQ3NiwxMCBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKIAotCXByaXYgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCXByaXYgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQocHJpdiwgMHgwMCwgc2l6ZW9mIChzdHJ1Y3QgY3lwcmVzc19wcml2YXRlKSk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCXByaXYtPmJ1ZiA9IGN5cHJlc3NfYnVmX2FsbG9jKENZUFJFU1NfQlVGX1NJWkUpOwogCWlmIChwcml2LT5idWYgPT0gTlVMTCkgewpAQCAtNTAwLDYgKzU0MCwyNSBAQAogfSAvKiBjeXByZXNzX2hpZGNvbV9zdGFydHVwICovCiAKIAorc3RhdGljIGludCBjeXByZXNzX2NhNDJ2Ml9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChnZW5lcmljX3N0YXJ0dXAoc2VyaWFsKSkgeworCQlkYmcoIiVzIC0gRmFpbGVkIHNldHRpbmcgdXAgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywKKwkJCQlzZXJpYWwtPnBvcnRbMF0tPm51bWJlcik7CisJCXJldHVybiAxOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5jaGlwdHlwZSA9IENUX0NBNDJWMjsKKworCXJldHVybiAwOworfSAvKiBjeXByZXNzX2NhNDJ2Ml9zdGFydHVwICovCisKKwogc3RhdGljIHZvaWQgY3lwcmVzc19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2OwpAQCAtOTQ0LDYgKzEwMDMsMTAgQEAKIAkJCSoodHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKIAkJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8CiAJCQkJQ0xPQ0FMOworCQl9IGVsc2UgaWYgKHByaXYtPmNoaXB0eXBlID09IENUX0NBNDJWMikgeworCQkJKih0dHktPnRlcm1pb3MpID0gdHR5X3N0ZF90ZXJtaW9zOworCQkJdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwKKwkJCQlDTE9DQUw7CiAJCX0KIAkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7CiAJfQpAQCAtMTU0Miw2ICsxNjA1LDkgQEAKIAlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjeXByZXNzX2hpZGNvbV9kZXZpY2UpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX2hpZGNvbV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjeXByZXNzX2NhNDJ2Ml9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX2NhNDJ2Ml9yZWdpc3RlcjsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmN5cHJlc3NfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CkBAIC0xNTUwLDYgKzE2MTYsOCBAQAogCXJldHVybiAwOwogZmFpbGVkX3VzYl9yZWdpc3RlcjoKIAl1c2JfZGVyZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworZmFpbGVkX2NhNDJ2Ml9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmN5cHJlc3NfY2E0MnYyX2RldmljZSk7CiBmYWlsZWRfaGlkY29tX3JlZ2lzdGVyOgogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3lwcmVzc19oaWRjb21fZGV2aWNlKTsKIGZhaWxlZF9lbV9yZWdpc3RlcjoKQEAgLTE1NjYsNiArMTYzNCw3IEBACiAJdXNiX2RlcmVnaXN0ZXIgKCZjeXByZXNzX2RyaXZlcik7CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY3lwcmVzc19lYXJ0aG1hdGVfZGV2aWNlKTsKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjeXByZXNzX2hpZGNvbV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmN5cHJlc3NfY2E0MnYyX2RldmljZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmgKaW5kZXggMWZhMTE5ZS4uZTFjN2MyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5oCkBAIC0xOCw2ICsxOCwxMCBAQAogLyogQ3lwcmVzcyBISUQtPkNPTSBSUzIzMiBBZGFwdGVyICovCiAjZGVmaW5lIFZFTkRPUl9JRF9DWVBSRVNTCQkgMHgwNGI0CiAjZGVmaW5lIFBST0RVQ1RfSURfQ1lQSElEQ09NCQkgMHg1NTAwCisKKy8qIE5va2lhIENBLTQyIFVTQiB0byBzZXJpYWwgY2FibGUgKi8KKyNkZWZpbmUgVkVORE9SX0lEX0RBWlpMRQkJMHgwN2QwCisjZGVmaW5lIFBST0RVQ1RfSURfQ0E0MgkJCTB4NDEwMQogLyogRW5kIG9mIGRldmljZSBsaXN0aW5nICovCiAKIC8qIFVzZWQgZm9yIHNldHRpbmcgLyByZXF1ZXN0aW5nIHNlcmlhbCBsaW5lIHNldHRpbmdzICovCkBAIC0zNCw2ICszOCw3IEBACiAKICNkZWZpbmUgQ1RfRUFSVEhNQVRFCTB4MDEKICNkZWZpbmUgQ1RfQ1lQSElEQ09NCTB4MDIKKyNkZWZpbmUgQ1RfQ0E0MlYyCTB4MDMKICNkZWZpbmUgQ1RfR0VORVJJQwkweDBGCiAvKiBFbmQgb2YgY2hpcHR5cGUgZGVmaW5pdGlvbnMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBmMmI0Y2E4Li5mM2FmODFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNDY5LDggKzQ2OSwxNCBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzdfUElEKSB9LAogCXsgVVNCX0RFVklDRShNT0JJTElUWV9WSUQsIE1PQklMSVRZX1VTQl9TRVJJQUxfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BQ1RJVkVfUk9CT1RTX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfTUhBTV9LV19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01IQU1fWVNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NSEFNX1k2X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfTUhBTV9ZOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01IQU1fSUNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NSEFNX0RCOV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX01IQU1fUlMyMzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NSEFNX1k5X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVEVSQVRST05JS19WQ1BfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9URVJBVFJPTklLX0QyWFhfUElEKSB9LAogCXsgVVNCX0RFVklDRShFVk9MVVRJT05fVklELCBFVk9MVVRJT05fRVIxX1BJRCkgfSwKQEAgLTQ4Niw2ICs0OTIsNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9XRVNUUkVYX01PREVMXzc3N19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1dFU1RSRVhfTU9ERUxfODkwMEZfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9QQ0RKX0RBQzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX0lEMV9WSUQsIElDT01fSUQxX1BJRCkgfSwKIAl7IH0sCQkJCQkvKiBPcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMTEzNSwxMiArMTE0MiwxMSBAQAogCQogCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CiAKLQlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnRkaV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KXsKIAkJZXJyKCIlcy0ga21hbGxvYyglWmQpIGZhaWxlZC4iLCBfX0ZVTkNUSU9OX18sIHNpemVvZihzdHJ1Y3QgZnRkaV9wcml2YXRlKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKCpwcml2KSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cnhfbG9jayk7CiAgICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggY2E0MGYxNi4uOGRhNzczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTE0Niw2ICsxNDYsMTMgQEAKICNkZWZpbmUgS09CSUxfQ09OVl9LQUFOX1BJRAkweDIwMjEJLyogS09CSUxfS29udmVydGVyIGZvciBLQUFOICovCiAKIC8qCisgKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgorICovCisKKyNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2CisjZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAorCisvKgogICogRFNTLTIwIFN5bmMgU3RhdGlvbiBmb3IgU29ueSBFcmljc3NvbiBQODAwCiAgKi8KICAKQEAgLTMzMywxMCArMzQwLDE4IEBACiAKIC8qCiAgKiBtaWNyb0hBTSBwcm9kdWN0IElEcyAoaHR0cDovL3d3dy5taWNyb2hhbS5jb20pLgotICogU3VibWl0dGVkIGJ5IEp1c3RpbiBCdXJrZXQgKEtMMVJMKSA8em9ydG9uQGp0YW4uY29tPi4KKyAqIFN1Ym1pdHRlZCBieSBKdXN0aW4gQnVya2V0IChLTDFSTCkgPHpvcnRvbkBqdGFuLmNvbT4KKyAqIGFuZCBNaWtlIFN0dWRlciAoSzZFRVApIDxrNmVlcEBoYW1zb2Z0d2FyZS5vcmc+LgorICogSWFuIEFiYm90dCA8YWJib3R0aUBtZXYuY28udWs+IGFkZGVkIGEgZmV3IG1vcmUgZnJvbSB0aGUgZHJpdmVyIElORiBmaWxlLgogICovCisjZGVmaW5lIEZURElfTUhBTV9LV19QSUQgMHhFRUU4CQkvKiBVU0ItS1cgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZU19QSUQgMHhFRUU5CQkvKiBVU0ItWVMgaW50ZXJmYWNlICovCiAjZGVmaW5lIEZURElfTUhBTV9ZNl9QSUQgMHhFRUVBCQkvKiBVU0ItWTYgaW50ZXJmYWNlICovCiAjZGVmaW5lIEZURElfTUhBTV9ZOF9QSUQgMHhFRUVCCQkvKiBVU0ItWTggaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9JQ19QSUQgMHhFRUVDCQkvKiBVU0ItSUMgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9EQjlfUElEIDB4RUVFRAkvKiBVU0ItREI5IGludGVyZmFjZSAqLworI2RlZmluZSBGVERJX01IQU1fUlMyMzJfUElEIDB4RUVFRQkvKiBVU0ItUlMyMzIgaW50ZXJmYWNlICovCisjZGVmaW5lIEZURElfTUhBTV9ZOV9QSUQgMHhFRUVGCQkvKiBVU0ItWTkgaW50ZXJmYWNlICovCiAKIC8qCiAgKiBBY3RpdmUgUm9ib3RzIHByb2R1Y3QgaWRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKaW5kZXggZDZmNTVlOS4uNWVjOWJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCkBAIC0xNDIyLDEyICsxNDIyLDExIEBACiAKIAlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKIAotCWdhcm1pbl9kYXRhX3AgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IGdhcm1pbl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJZ2FybWluX2RhdGFfcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnYXJtaW5fZGF0YSksIEdGUF9LRVJORUwpOwogCWlmIChnYXJtaW5fZGF0YV9wID09IE5VTEwpIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0IChnYXJtaW5fZGF0YV9wLCAwLCBzaXplb2Yoc3RydWN0IGdhcm1pbl9kYXRhKSk7CiAJaW5pdF90aW1lcigmZ2FybWluX2RhdGFfcC0+dGltZXIpOwogCXNwaW5fbG9ja19pbml0KCZnYXJtaW5fZGF0YV9wLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZ2FybWluX2RhdGFfcC0+cGt0bGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCmluZGV4IDNmMjllNmIwLi5iNjA2YzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMjcyNSwxMiArMjcyNSwxMSBAQAogCWRldiA9IHNlcmlhbC0+ZGV2OwogCiAJLyogY3JlYXRlIG91ciBwcml2YXRlIHNlcmlhbCBzdHJ1Y3R1cmUgKi8KLQllZGdlX3NlcmlhbCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CisJZWRnZV9zZXJpYWwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVkZ2Vfc2VyaWFsID09IE5VTEwpIHsKIAkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCAoZWRnZV9zZXJpYWwsIDAsIHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsKSk7CiAJc3Bpbl9sb2NrX2luaXQoJmVkZ2Vfc2VyaWFsLT5lc19sb2NrKTsKIAllZGdlX3NlcmlhbC0+c2VyaWFsID0gc2VyaWFsOwogCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBlZGdlX3NlcmlhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCmluZGV4IGFmYzBmMzQuLjhlMWUyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC0yNzI3LDEyICsyNzI3LDExIEBACiAJZGV2ID0gc2VyaWFsLT5kZXY7CiAKIAkvKiBjcmVhdGUgb3VyIHByaXZhdGUgc2VyaWFsIHN0cnVjdHVyZSAqLwotCWVkZ2Vfc2VyaWFsID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwllZGdlX3NlcmlhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZWRnZV9zZXJpYWwgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0IChlZGdlX3NlcmlhbCwgMCwgc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwpKTsKIAlzZW1hX2luaXQoJmVkZ2Vfc2VyaWFsLT5lc19zZW0sIDEpOwogCWVkZ2Vfc2VyaWFsLT5zZXJpYWwgPSBzZXJpYWw7CiAJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIGVkZ2Vfc2VyaWFsKTsKQEAgLTI3NDUsMTIgKzI3NDQsMTEgQEAKIAogCS8qIHNldCB1cCBvdXIgcG9ydCBwcml2YXRlIHN0cnVjdHVyZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewotCQllZGdlX3BvcnQgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3BvcnQpLCBHRlBfS0VSTkVMKTsKKwkJZWRnZV9wb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJZ290byBjbGVhbnVwOwogCQl9Ci0JCW1lbXNldCAoZWRnZV9wb3J0LCAwLCBzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3BvcnQpKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmVkZ2VfcG9ydC0+ZXBfbG9jayk7CiAJCWVkZ2VfcG9ydC0+ZXBfb3V0X2J1ZiA9IGVkZ2VfYnVmX2FsbG9jKEVER0VfT1VUX0JVRl9TSVpFKTsKIAkJaWYgKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1ZiA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKaW5kZXggYTU5MDEwNC4uNDI2MTgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwpAQCAtMTg0LDEwICsxODQsOSBAQAogCXN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgKmRlc2M7CiAJaW50IHJldDsKIAkJCi0JZGVzYyA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjKSwgR0ZQX0tFUk5FTCk7CisJZGVzYyA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRlc2MgPT0gTlVMTCkgCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGlyZGFfY2xhc3NfZGVzYykpOwogCQogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsMCksCiAJCQlJVV9SRVFfR0VUX0NMQVNTX0RFU0MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwppbmRleCAzYjk1OGU2Li4wNTJiNzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKQEAgLTIyNTAsMTIgKzIyNTAsMTEgQEAKIAl9CiAKIAkvKiBTZXR1cCBwcml2YXRlIGRhdGEgZm9yIHNlcmlhbCBkcml2ZXIgKi8KLQlzX3ByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCXNfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzX3ByaXYpIHsKIAkJZGJnKCIlcyAtIGttYWxsb2MgZm9yIGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQoc19wcml2LCAwLCBzaXplb2Yoc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUpKTsKIAogCXNfcHJpdi0+ZGV2aWNlX2RldGFpbHMgPSBkX2RldGFpbHM7CiAJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHNfcHJpdik7CkBAIC0yMjYzLDEyICsyMjYyLDExIEBACiAJLyogTm93IHNldHVwIHBlciBwb3J0IHByaXZhdGUgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCXBfcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCQlwX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwX3ByaXYpIHsKIAkJCWRiZygiJXMgLSBrbWFsbG9jIGZvciBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAoJWQpIGZhaWxlZCEuIiwgX19GVU5DVElPTl9fLCBpKTsKIAkJCXJldHVybiAoMSk7CiAJCX0KLQkJbWVtc2V0KHBfcHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSkpOwogCQlwX3ByaXYtPmRldmljZV9kZXRhaWxzID0gZF9kZXRhaWxzOwogCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcF9wcml2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKaW5kZXggYjhiMjEzMS4uODdkZmNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtMjU1LDExICsyNTUsOSBAQAogCX0KIAkKIAkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlcgotCXRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7ICAKKwl0cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghIHRyYW5zZmVyX2J1ZmZlcikgewogCQlyZXR1cm4gLUVOT01FTTsKLQl9IGVsc2UgewotCQltZW1zZXQodHJhbnNmZXJfYnVmZmVyLCAwLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKIAl9CiAJCiAJLy8gYWxsb2NhdGUgd3JpdGVfdXJiCkBAIC0zODMsMTEgKzM4MSwxMCBAQAogCQkKIAkJLy8gQkVHSU4gREVCVUcKIAkJLyoKLQkJICBkYmdfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MoKDMgKiAgcHVyYi0+YWN0dWFsX2xlbmd0aCArIDEwKSAqIHNpemVvZihjaGFyKSwgR0ZQX0tFUk5FTCk7CisJCSAgZGJnX2RhdGEgPSBremFsbG9jKCgzICogIHB1cmItPmFjdHVhbF9sZW5ndGggKyAxMCkgKiBzaXplb2YoY2hhciksIEdGUF9LRVJORUwpOwogCQkgIGlmICghIGRiZ19kYXRhKSB7CiAJCSAgcmV0dXJuOwogCQkgIH0KLQkJICBtZW1zZXQoZGJnX2RhdGEsIDAsICgzICogIHB1cmItPmFjdHVhbF9sZW5ndGggKyAxMCkpOwogCQkgIGZvciAoaSA9IDA7IGkgPCBwdXJiLT5hY3R1YWxfbGVuZ3RoOyBpKyspIHsgCiAJCSAgc3ByaW50ZihkYmdfZGF0YSArMyppLCAiJTAyWCAiLCBkYXRhW2ldKTsgCiAJCSAgfQpAQCAtNTE4LDExICs1MTUsMTAgQEAKIAl9CiAKIAkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlcgotCXRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7ICAKKwl0cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQodHJhbnNmZXJfYnVmZmVyLCAwLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKIAogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAogCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIApAQCAtNTY0LDExICs1NjAsMTAgQEAKIAl9CiAKIAkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRyYW5zZmVyIGJ1ZmZlcgotCXRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2ModHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCk7CisJdHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAlpZiAoISB0cmFuc2Zlcl9idWZmZXIpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCh0cmFuc2Zlcl9idWZmZXIsIDAsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCiAJaWYgKHNldCAmIFRJT0NNX1JUUykKIAkJcnRzID0gMTsKQEAgLTY1NSwxMSArNjUwLDEwIEBACiAJCQkJCQkgICAoc3RydWN0IHRlcm1pb3MgX191c2VyICopYXJnKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQkKLQkJc2V0dGluZ3MgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKDUwLCBHRlBfS0VSTkVMKTsgIAorCQlzZXR0aW5ncyA9IGt6YWxsb2MoNTAsIEdGUF9LRVJORUwpOwogCQlpZiAoISBzZXR0aW5ncykgewogCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9Ci0JCW1lbXNldChzZXR0aW5ncywgMCwgNTApOwogCiAJCXN3aXRjaCAocHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnICYgQ0JBVUQpIHsKIAkJY2FzZSBCMTIwMDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKaW5kZXggYjZkNmNhYi4uMzViZDI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTM0OCwxMCArMzQ4LDkgQEAKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAqcnBvcnQ7CiAKLQlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1jdF91MjMyX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jdF91MjMyX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChwcml2LCAwLCBzaXplb2Yoc3RydWN0IG1jdF91MjMyX3ByaXZhdGUpKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjU0NDA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL25hdm1hbi5jCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogTmF2bWFuIFNlcmlhbCBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCXZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MGE5OSwgMHgwMDAxKSB9LAkvKiBUYWxvbiBUZWNobm9sb2d5IGRldmljZSAqLworCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbmF2bWFuX2RyaXZlciA9IHsKKwkubmFtZSA9CQkibmF2bWFuIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0gCTEsCit9OworCitzdGF0aWMgdm9pZCBuYXZtYW5fcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCByZXN1bHQ7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sCisJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCitleGl0OgorCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKworc3RhdGljIGludCBuYXZtYW5fb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHBvcnQtPmludGVycnVwdF9pbl91cmIpIHsKKwkJZGJnKCIlcyAtIGFkZGluZyBpbnRlcnJ1cHQgaW5wdXQgZm9yIHRyZW8iLCBfX0ZVTkNUSU9OX18pOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIG5hdm1hbl9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKQorCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Cit9CisKK3N0YXRpYyBpbnQgbmF2bWFuX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qCisJICogVGhpcyBkZXZpY2UgY2FuJ3Qgd3JpdGUgYW55IGRhdGEsIG9ubHkgcmVhZCBmcm9tIHRoZSBkZXZpY2UKKwkgKiBzbyB3ZSBqdXN0IHNpbGVudGx5IGVhdCBhbGwgZGF0YSBzZW50IHRvIHVzIGFuZCBzYXkgaXQgd2FzCisJICogc3VjY2Vzc2Z1bGx5IHNlbnQuCisJICogRXZpbCwgSSBrbm93LCBidXQgZG8geW91IGhhdmUgYSBiZXR0ZXIgaWRlYT8KKwkgKi8KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBuYXZtYW5fZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkibmF2bWFuIiwKKwl9LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJbmF2bWFuX29wZW4sCisJLmNsb3NlID0gCQluYXZtYW5fY2xvc2UsCisJLndyaXRlID0gCQluYXZtYW5fd3JpdGUsCisJLnJlYWRfaW50X2NhbGxiYWNrID0JbmF2bWFuX3JlYWRfaW50X2NhbGxiYWNrLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbmF2bWFuX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmbmF2bWFuX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJm5hdm1hbl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmbmF2bWFuX2RldmljZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5hdm1hbl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJm5hdm1hbl9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmbmF2bWFuX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KG5hdm1hbl9pbml0KTsKK21vZHVsZV9leGl0KG5hdm1hbl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCmluZGV4IDc2MmQ4ZmYuLjRkNDA3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJaW50IGk7CiAJaW50IHJlc3VsdDsKIAotLy8JZGJnKCJvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjayIpOworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCiAJaWYgKHVyYi0+c3RhdHVzKSB7CiAJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CkBAIC0yNTAsNyArMjUwLDcgQEAKIAogCWludAkJCXJlc3VsdDsKIAotLy8JZGJnKCJvbW5pbmV0X3dyaXRlIHBvcnQgJWQiLCBwb3J0LT5udW1iZXIpOworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCiAJaWYgKGNvdW50ID09IDApIHsKIAkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CkBAIC0zMDIsNyArMzAyLDcgQEAKIAlpZiAod3BvcnQtPndyaXRlX3VyYl9idXN5KQogCQlyb29tID0gd3BvcnQtPmJ1bGtfb3V0X3NpemUgLSBPTU5JTkVUX0hFQURFUkxFTjsKIAotLy8JZGJnKCJvbW5pbmV0X3dyaXRlX3Jvb20gcmV0dXJucyAlZCIsIHJvb20pOworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKIAogCXJldHVybiAocm9vbSk7CiB9CkBAIC0zMTIsNyArMzEyLDcgQEAKIC8qCXN0cnVjdCBvbW5pbmV0X2hlYWRlcgkqaGVhZGVyID0gKHN0cnVjdCBvbW5pbmV0X2hlYWRlciAgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7ICovCiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKnBvcnQgICA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKIAotLy8JZGJnKCJvbW5pbmV0X3dyaXRlX2J1bGtfY2FsbGJhY2ssIHBvcnQgJTB4XG4iLCBwb3J0KTsKKwlkYmcoIiVzIC0gcG9ydCAlMHhcbiIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIAogCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKIAlpZiAodXJiLT5zdGF0dXMpIHsKQEAgLTMyMSw4ICszMjEsNiBAQAogCX0KIAogCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOwotCi0vLwlkYmcoIm9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgdHR5ICUweFxuIiwgdHR5KTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNTJiZGY2Zi4uNDk1ZGI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKLS8qIFRoZSBjYXJkIGhhcyB0aHJlZSBzZXBhcmF0ZSBpbnRlcmZhY2VzLCB3aWNoIHRoZSBzZXJpYWwgZHJpdmVyCisvKiBUaGUgY2FyZCBoYXMgdGhyZWUgc2VwYXJhdGUgaW50ZXJmYWNlcywgd2hpY2ggdGhlIHNlcmlhbCBkcml2ZXIKICAqIHJlY29nbml6ZXMgc2VwYXJhdGVseSwgdGh1cyBudW1fcG9ydD0xLgogICovCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIG9wdGlvbl8zcG9ydF9kZXZpY2UgPSB7CkBAIC02MzEsMTMgKzYzMSwxMiBAQAogCS8qIE5vdyBzZXR1cCBwZXIgcG9ydCBwcml2YXRlIGRhdGEgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwotCQlwb3J0ZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwb3J0ZGF0YSksIEdGUF9LRVJORUwpOworCQlwb3J0ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwb3J0ZGF0YSksIEdGUF9LRVJORUwpOwogCQlpZiAoIXBvcnRkYXRhKSB7CiAJCQlkYmcoIiVzOiBrbWFsbG9jIGZvciBvcHRpb25fcG9ydF9wcml2YXRlICglZCkgZmFpbGVkIS4iLAogCQkJCQlfX0ZVTkNUSU9OX18sIGkpOwogCQkJcmV0dXJuICgxKTsKIAkJfQotCQltZW1zZXQocG9ydGRhdGEsIDAsIHNpemVvZihzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSkpOwogCiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwb3J0ZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCAzN2M4MWMwLi5iMzAxNGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC03Nyw2ICs3Nyw3IEBACiAJeyBVU0JfREVWSUNFKENBXzQyX0NBNDJfVkVORE9SX0lELCBDQV80Ml9DQTQyX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKFNBR0VNX1ZFTkRPUl9JRCwgU0FHRU1fUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTEVBRFRFS19WRU5ET1JfSUQsIExFQURURUtfOTUzMV9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShTUEVFRERSQUdPTl9WRU5ET1JfSUQsIFNQRUVERFJBR09OX1BST0RVQ1RfSUQpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtMjE4LDEwICsyMTksOSBAQAogCWRiZygiZGV2aWNlIHR5cGU6ICVkIiwgdHlwZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewotCQlwcml2ID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwkJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbDIzMDNfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIXByaXYpCiAJCQlnb3RvIGNsZWFudXA7Ci0JCW1lbXNldCAocHJpdiwgMHgwMCwgc2l6ZW9mIChzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUpKTsKIAkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCQlwcml2LT5idWYgPSBwbDIzMDNfYnVmX2FsbG9jKFBMMjMwM19CVUZfU0laRSk7CiAJCWlmIChwcml2LT5idWYgPT0gTlVMTCkgewpAQCAtMzgzLDEyICszODMsMTEgQEAKIAkJfQogCX0KIAotCWJ1ZiA9IGttYWxsb2MgKDcsIEdGUF9LRVJORUwpOworCWJ1ZiA9IGt6YWxsb2MgKDcsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JbWVtc2V0IChidWYsIDB4MDAsIDB4MDcpOwogCQogCWkgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUgKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCSAgICAgR0VUX0xJTkVfUkVRVUVTVCwgR0VUX0xJTkVfUkVRVUVTVF9UWVBFLApAQCAtODI4LDYgKzgyNyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlwcml2LT5saW5lX3N0YXR1cyA9IGRhdGFbc3RhdHVzX2lkeF07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKIAogZXhpdDoKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKaW5kZXggOWJjNDc1NS4uNzc5MDFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaApAQCAtNzUsMyArNzUsNyBAQAogLyogTGVhZHRlayBHUFMgOTUzMSAoSUQgMDQxMzoyMTAxKSAqLwogI2RlZmluZSBMRUFEVEVLX1ZFTkRPUl9JRAkweDA0MTMKICNkZWZpbmUgTEVBRFRFS185NTMxX1BST0RVQ1RfSUQJMHgyMTAxCisKKy8qIFVTQiBHU00gY2FibGUgZnJvbSBTcGVlZCBEcmFnb24gTXVsdGltZWRpYSwgTHRkICovCisjZGVmaW5lIFNQRUVERFJBR09OX1ZFTkRPUl9JRAkweDBlNTUKKyNkZWZpbmUgU1BFRUREUkFHT05fUFJPRFVDVF9JRAkweDExMGIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCmluZGV4IGMxOGRiMzIuLmMzYTIwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYwpAQCAtNDE2LDEyICs0MTYsMTEgQEAKIAkgICAgZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CiAKIAkvKiBjcmVhdGUgZGV2aWNlIHN0cnVjdHVyZSAqLwotCXRkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJdGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAodGRldiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtc2V0KHRkZXYsIDAsIHNpemVvZihzdHJ1Y3QgdGlfZGV2aWNlKSk7CiAJc2VtYV9pbml0KCZ0ZGV2LT50ZF9vcGVuX2Nsb3NlX3NlbSwgMSk7CiAJdGRldi0+dGRfc2VyaWFsID0gc2VyaWFsOwogCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCB0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IDRkZDY4NjUuLjA5N2Y0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtMjQyLDggKzI0MiwxMCBAQAogCiAJZG93bigmcG9ydC0+c2VtKTsKIAotCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDApCi0JCWdvdG8gb3V0OworCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDApIHsKKwkJdXAoJnBvcnQtPnNlbSk7CisJCXJldHVybjsKKwl9CiAKIAktLXBvcnQtPm9wZW5fY291bnQ7CiAJaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkgewpAQCAtMjYwLDEwICsyNjIsOCBAQAogCQltb2R1bGVfcHV0KHBvcnQtPnNlcmlhbC0+dHlwZS0+ZHJpdmVyLm93bmVyKTsKIAl9CiAKLQlrcmVmX3B1dCgmcG9ydC0+c2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7Ci0KLW91dDoKIAl1cCgmcG9ydC0+c2VtKTsKKwlrcmVmX3B1dCgmcG9ydC0+c2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VyaWFsX3dyaXRlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCkBAIC01NjQsMTIgKzU2NCwxMSBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CiAKLQlzZXJpYWwgPSBrbWFsbG9jIChzaXplb2YgKCpzZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwlzZXJpYWwgPSBremFsbG9jKHNpemVvZigqc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZXJpYWwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBOVUxMOwogCX0KLQltZW1zZXQgKHNlcmlhbCwgMCwgc2l6ZW9mKCpzZXJpYWwpKTsKIAlzZXJpYWwtPmRldiA9IHVzYl9nZXRfZGV2KGRldik7CiAJc2VyaWFsLT50eXBlID0gZHJpdmVyOwogCXNlcmlhbC0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwpAQCAtNzc4LDEwICs3NzcsOSBAQAogCXNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnMgPSBtYXhfZW5kcG9pbnRzOwogCWRiZygiJXMgLSBzZXR0aW5nIHVwICVkIHBvcnQgc3RydWN0dXJlcyBmb3IgdGhpcyBkZXZpY2UiLCBfX0ZVTkNUSU9OX18sIG1heF9lbmRwb2ludHMpOwogCWZvciAoaSA9IDA7IGkgPCBtYXhfZW5kcG9pbnRzOyArK2kpIHsKLQkJcG9ydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwkJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwb3J0KQogCQkJZ290byBwcm9iZV9lcnJvcjsKLQkJbWVtc2V0KHBvcnQsIDB4MDAsIHNpemVvZihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KSk7CiAJCXBvcnQtPm51bWJlciA9IGkgKyBzZXJpYWwtPm1pbm9yOwogCQlwb3J0LT5zZXJpYWwgPSBzZXJpYWw7CiAJCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggYmNlM2Q1NS4uZjVjMzg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTY5LDYgKzY5LDggQEAKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKIAl7IFVTQl9ERVZJQ0UoSEFORFNQUklOR19WRU5ET1JfSUQsIEhBTkRTUFJJTkdfVFJFTzYwMF9JRCksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEdTUERBX1ZFTkRPUl9JRCwgR1NQREFfWFBMT1JFX002OF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCiAJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX001MDBfSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAogCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTA1X0lEKSwKQEAgLTEzOSw2ICsxNDEsNyBAQAogCXsgVVNCX0RFVklDRShIQU5EU1BSSU5HX1ZFTkRPUl9JRCwgSEFORFNQUklOR19WSVNPUl9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSEFORFNQUklOR19WRU5ET1JfSUQsIEhBTkRTUFJJTkdfVFJFT19JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoSEFORFNQUklOR19WRU5ET1JfSUQsIEhBTkRTUFJJTkdfVFJFTzYwMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoR1NQREFfVkVORE9SX0lELCBHU1BEQV9YUExPUkVfTTY4X0lEKSB9LAogCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTAwX0lEKSB9LAogCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTA1X0lEKSB9LAogCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTE1X0lEKSB9LApAQCAtNzYwLDEwICs3NjMsOSBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKLQkJcHJpdiA9IGttYWxsb2MgKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCQlwcml2ID0ga3phbGxvYyAoc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcHJpdikKIAkJCXJldHVybiAtRU5PTUVNOwotCQltZW1zZXQgKHByaXYsIDB4MDAsIHNpemVvZigqcHJpdikpOwogCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIHByaXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmgKaW5kZXggYjg0ZDFjYi4uNzY1MTE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmgKQEAgLTM2LDYgKzM2LDkgQEAKICNkZWZpbmUgUEFMTV9aSVJFX0lECQkJMHgwMDcwCiAjZGVmaW5lIFBBTE1fTTEwMF9JRAkJCTB4MDA4MAogCisjZGVmaW5lIEdTUERBX1ZFTkRPUl9JRAkJMHgxMTVlCisjZGVmaW5lIEdTUERBX1hQTE9SRV9NNjhfSUQJCTB4ZjEwMAorCiAjZGVmaW5lIFNPTllfVkVORE9SX0lECQkJMHgwNTRDCiAjZGVmaW5lIFNPTllfQ0xJRV8zXzVfSUQJCTB4MDAzOAogI2RlZmluZSBTT05ZX0NMSUVfNF8wX0lECQkweDAwNjYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKaW5kZXggNTRlM2U2YzdlYy4uMDFkODk3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKQEAgLTUxMiwxMyArNTEyLDEyIEBACiAJfTsKIAogCWlmICghdXMtPmV4dHJhKSB7Ci0JCXVzLT5leHRyYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXRhZmFiX2luZm8pLCBHRlBfTk9JTyk7CisJCXVzLT5leHRyYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXRhZmFiX2luZm8pLCBHRlBfTk9JTyk7CiAJCWlmICghdXMtPmV4dHJhKSB7CiAJCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgR2FoISAiCiAJCQkJICAiQ2FuJ3QgYWxsb2NhdGUgc3RvcmFnZSBmb3IgRGF0YWZhYiBpbmZvIHN0cnVjdCFcbiIpOwogCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAkJfQotCQltZW1zZXQodXMtPmV4dHJhLCAwLCBzaXplb2Yoc3RydWN0IGRhdGFmYWJfaW5mbykpOwogCQl1cy0+ZXh0cmFfZGVzdHJ1Y3RvciA9IGRhdGFmYWJfaW5mb19kZXN0cnVjdG9yOwogICAJCSgoc3RydWN0IGRhdGFmYWJfaW5mbyAqKXVzLT5leHRyYSktPmx1biA9IC0xOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCmluZGV4IGVjYjMyOGEuLjY4MzFkY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwpAQCAtMTM2MSwyMSArMTM2MSwxOSBAQAogCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbzsKIAogCWluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopCi0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXNkMjAwX2luZm8pLCBHRlBfS0VSTkVMKTsKKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2QyMDBfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOwogCWVsc2UgewotCQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpc2QyMDBfaW5mbykpOwogCQlpbmZvLT5pZCA9IChzdHJ1Y3QgaGRfZHJpdmVpZCAqKQotCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSwgR0ZQX0tFUk5FTCk7CisJCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpLCBHRlBfS0VSTkVMKTsKIAkJaW5mby0+UmVnc0J1ZiA9ICh1bnNpZ25lZCBjaGFyICopCiAJCQkJa21hbGxvYyhzaXplb2YoaW5mby0+QVRBUmVncyksIEdGUF9LRVJORUwpOwogCQlpZiAoIWluZm8tPmlkIHx8ICFpbmZvLT5SZWdzQnVmKSB7CiAJCQlpc2QyMDBfZnJlZV9pbmZvX3B0cnMoaW5mbyk7CiAJCQlrZnJlZShpbmZvKTsKIAkJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKLQkJfSBlbHNlCi0JCQltZW1zZXQoaW5mby0+aWQsIDAsIHNpemVvZihzdHJ1Y3QgaGRfZHJpdmVpZCkpOworCQl9CiAJfQogCiAJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkgewpAQCAtMTM4NCw3ICsxMzgyLDcgQEAKIAl9IGVsc2UKIAkJVVNfREVCVUdQKCJFUlJPUiAtIGttYWxsb2MgZmFpbHVyZVxuIik7CiAKLQlyZXR1cm4ocmV0U3RhdHVzKTsKKwlyZXR1cm4gcmV0U3RhdHVzOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwppbmRleCBhZmY5ZDUxLi41MDMxYWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCkBAIC00NDEsMTIgKzQ0MSwxMSBAQAogCX07CiAKIAlpZiAoIXVzLT5leHRyYSkgewotCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QganVtcHNob3RfaW5mbyksIEdGUF9OT0lPKTsKKwkJdXMtPmV4dHJhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGp1bXBzaG90X2luZm8pLCBHRlBfTk9JTyk7CiAJCWlmICghdXMtPmV4dHJhKSB7CiAJCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIEdhaCEgQ2FuJ3QgYWxsb2NhdGUgc3RvcmFnZSBmb3IganVtcHNob3QgaW5mbyBzdHJ1Y3QhXG4iKTsKIAkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJCX0KLQkJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCBqdW1wc2hvdF9pbmZvKSk7CiAJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0ganVtcHNob3RfaW5mb19kZXN0cnVjdG9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCmluZGV4IDRlZjU1MjcuLjVmMTFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTI3MSw5ICsyNzIsOSBAQAogCVVTX0RFQlVHUCgiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzIGFuZCBkbyB0aGUgcmVzZXQgKi8KLQlkb3duKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKwltdXRleF9sb2NrKCYodXMtPmRldl9tdXRleCkpOwogCXJlc3VsdCA9IHVzLT50cmFuc3BvcnRfcmVzZXQodXMpOwotCXVwKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKwltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwogCiAJcmV0dXJuIHJlc3VsdCA8IDAgPyBGQUlMRUQgOiBTVUNDRVNTOwogfQpAQCAtMjg2LDkgKzI4Nyw5IEBACiAKIAlVU19ERUJVR1AoIiVzIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAotCWRvd24oJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCW11dGV4X2xvY2soJih1cy0+ZGV2X211dGV4KSk7CiAJcmVzdWx0ID0gdXNiX3N0b3JfcG9ydF9yZXNldCh1cyk7Ci0JdXAoJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAKIAlyZXR1cm4gcmVzdWx0IDwgMCA/IEZBSUxFRCA6IFNVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuYwppbmRleCA4NDUxNzc5Li4wYjFiNWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMKQEAgLTc1MSwxMSArNzUxLDEwIEBACiAJc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKmluZm87CiAKIAlpZiAoIXVzLT5leHRyYSkgewotCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKAorCQl1cy0+ZXh0cmEgPSBremFsbG9jKAogCQkJc2l6ZW9mKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvKSwgR0ZQX05PSU8pOwogCQlpZiAoIXVzLT5leHRyYSkKIAkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Ci0JCW1lbXNldCh1cy0+ZXh0cmEsIDAsIHNpemVvZihzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbykpOwogCQl1cy0+ZXh0cmFfZGVzdHJ1Y3RvciA9IHNkZHI1NV9jYXJkX2luZm9fZGVzdHJ1Y3RvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKaW5kZXggZmVhMTc2ZC4uZjJiYzVjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMKQEAgLTEzMTgsMTIgKzEzMTgsMTEgQEAKIAl1bnNpZ25lZCBjaGFyIHN1YmNvdW50TCA9IFVTQkFUX0FUQV9MQkFfTUU7CiAJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOwogCi0JdXMtPmV4dHJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYmF0X2luZm8pLCBHRlBfTk9JTyk7CisJdXMtPmV4dHJhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYmF0X2luZm8pLCBHRlBfTk9JTyk7CiAJaWYgKCF1cy0+ZXh0cmEpIHsKIAkJVVNfREVCVUdQKCJpbml0X3VzYmF0OiBHYWghIENhbid0IGFsbG9jYXRlIHN0b3JhZ2UgZm9yIHVzYmF0IGluZm8gc3RydWN0IVxuIik7CiAJCXJldHVybiAxOwogCX0KLQltZW1zZXQodXMtPmV4dHJhLCAwLCBzaXplb2Yoc3RydWN0IHVzYmF0X2luZm8pKTsKIAlpbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvICopICh1cy0+ZXh0cmEpOwogCiAJLyogRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCBlNzFjNWNhLi5jNGE5ZGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTYyLDYgKzYyLDEzIEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKKy8qIFJlcG9ydGVkIGJ5IFJvZG9sZm8gUXVlc2FkYSA8cnF1ZXNhZGFAcm9xei5uZXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDNlZSwgMHg2OTA2LCAweDAwMDMsIDB4MDAwMywKKwkJIlZJQSBUZWNobm9sb2dpZXMgSW5jLiIsCisJCSJNaXRzdW1pIG11bHRpIGNhcmRyZWFkZXIiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKwogVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDEwNywgMHgwMjAwLCAweDAyMDAsIAogCQkiSFAiLAogCQkiQ0QtV3JpdGVyKyIsCkBAIC0xMjAsNiArMTI3LDEyIEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAogCisvKiBSZXBvcnRlZCBieSBQZXRlIFphaXRjZXYgPHphaXRjZXZAcmVkaGF0LmNvbT4sIGJ6IzE3NjU4NCAqLworVU5VU1VBTF9ERVYoICAweDA0MjAsIDB4MDAwMSwgMHgwMTAwLCAweDAxMDAsCisJCSJHRU5FUklDIiwgIk1QMyBQTEFZRVIiLCAvKiBNeU11c2l4IFBELTIwNSBvbiB0aGUgb3V0c2lkZS4gKi8KKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKIC8qIFJlcG9ydGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gZnJvbSBub3ZlbGwgYnVnICMxMDU4NzggKi8KIFVOVVNVQUxfREVWKCAgMHgwNDI0LCAweDBmZGMsIDB4MDIxMCwgMHgwMjEwLAogCQkiU01TQyIsCkBAIC03NTMsMTIgKzc2NiwyNiBAQAogCQkiRmxhc2hnYXRlIiwKIAkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwgMCApLCAKIAotVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDAwMSwgMHgwMjAwLCAweDAyMDAsIAorLyogUmVwb3J0ZWQgYnkgRGF2aWQgSGFtaWx0b24gPG5pZnRpbXVzbWF4aW11c0BseWNvcy5jb20+ICovCitVTlVTVUFMX0RFViggIDB4MDY5YiwgMHgzMDA0LCAweDAwMDEsIDB4MDAwMSwKKwkJIlRob21zb24gTXVsdGltZWRpYSBJbmMuIiwKKwkJIlJDQSBSRDEwODAgTVAzIFBsYXllciIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKworLyogU3VibWl0dGVkIGJ5IFJvbWFuIEhvZGVrIDxyb21hbkBob2Rlay5uZXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMDAxLCAweDAyMDAsIDB4MDIwMCwKIAkJIlNhbmRpc2siLAogCQkiSW1hZ2VNYXRlIFNERFItMDVhIiwKIAkJVVNfU0NfU0NTSSwgVVNfUFJfQ0IsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAorVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDAwMiwgMHgwMDA5LCAweDAwMDksCisJCSJTYW5EaXNrIENvcnBvcmF0aW9uIiwKKwkJIkltYWdlTWF0ZSBDb21wYWN0Rmxhc2ggVVNCIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCiAjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCiBVTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMDA1LCAweDAwMDUsIDB4MDAwNSwKIAkJIlNhbmRpc2siLApAQCAtMTA2Niw2ICsxMDkzLDE2IEBACiAJCQkwKSwKICNlbmRpZgogCisvKgorICogUGV0ZSBaYWl0Y2V2IDx6YWl0Y2V2QHlhaG9vLmNvbT4sIGJ6IzE2NDY4OC4KKyAqIFRoZSBkZXZpY2UgYmxhdGFudGx5IGlnbm9yZXMgTFVOIGFuZCByZXR1cm5zIDEgaW4gR2V0TWF4TFVOLgorICovCitVTlVTVUFMX0RFViggMHgwYzQ1LCAweDEwNjAsIDB4MDEwMCwgMHgwMTAwLAorCQkiVW5rbm93biIsCisJCSJVbmtub3duIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKwogLyogU3VibWl0dGVkIGJ5IEpvcmlzIFN0cnV5dmUgPGpvcmlzQHN0cnV5dmUuYmU+ICovCiBVTlVTVUFMX0RFViggMHgwZDk2LCAweDQxMGEsIDB4MDAwMSwgMHhmZmZmLAogCQkiTWVkaW9uIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IGRiY2YyMzkuLmRkMTA4NjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTE4OCw3ICsxODksNyBAQAogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCiAJLyogV2FpdCB1bnRpbCBubyBjb21tYW5kIGlzIHJ1bm5pbmcgKi8KLQlkb3duKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisJbXV0ZXhfbG9jaygmdXMtPmRldl9tdXRleCk7CiAKIAlVU19ERUJVR1AoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCWlmICh1cy0+c3VzcGVuZF9yZXN1bWVfaG9vaykKQEAgLTE5OCw3ICsxOTksNyBAQAogCS8qIFdoZW4gcnVudGltZSBQTSBpcyB3b3JraW5nLCB3ZSdsbCBzZXQgYSBmbGFnIHRvIGluZGljYXRlCiAJICogd2hldGhlciB3ZSBzaG91bGQgYXV0b3Jlc3VtZSB3aGVuIGEgU0NTSSByZXF1ZXN0IGFycml2ZXMuICovCiAKLQl1cCgmdXMtPmRldl9zZW1hcGhvcmUpOworCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNiwxNCArMjA3LDE0IEBACiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKLQlkb3duKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisJbXV0ZXhfbG9jaygmdXMtPmRldl9tdXRleCk7CiAKIAlVU19ERUJVR1AoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCWlmICh1cy0+c3VzcGVuZF9yZXN1bWVfaG9vaykKIAkJKHVzLT5zdXNwZW5kX3Jlc3VtZV9ob29rKSh1cywgVVNfUkVTVU1FKTsKIAlpZmFjZS0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID0gUE1fRVZFTlRfT047CiAKLQl1cCgmdXMtPmRldl9zZW1hcGhvcmUpOworCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3NiwxMiArMjc3LDEyIEBACiAJCVVTX0RFQlVHUCgiKioqIHRocmVhZCBhd2FrZW5lZC5cbiIpOwogCiAJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwotCQlkb3duKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKwkJbXV0ZXhfbG9jaygmKHVzLT5kZXZfbXV0ZXgpKTsKIAogCQkvKiBpZiB0aGUgZGV2aWNlIGhhcyBkaXNjb25uZWN0ZWQsIHdlIGFyZSBmcmVlIHRvIGV4aXQgKi8KIAkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CiAJCQlVU19ERUJVR1AoIi0tIGV4aXRpbmdcbiIpOwotCQkJdXAoJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCQkJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTM3MCw3ICszNzEsNyBAQAogCQlzY3NpX3VubG9jayhob3N0KTsKIAogCQkvKiB1bmxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwotCQl1cCgmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisJCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJfSAvKiBmb3IgKDs7KSAqLwogCiAJc2NzaV9ob3N0X3B1dChob3N0KTsKQEAgLTgxNSw4ICs4MTYsOCBAQAogCSAqIFRoZSB0aHJlYWQgd2lsbCBleGl0IHdoZW4gaXQgc2VlcyB0aGUgRElTQ09OTkVDVElORyBmbGFnLiAqLwogCiAJLyogV2FpdCBmb3IgdGhlIGN1cnJlbnQgY29tbWFuZCB0byBmaW5pc2gsIHRoZW4gcmVtb3ZlIHRoZSBob3N0ICovCi0JZG93bigmdXMtPmRldl9zZW1hcGhvcmUpOwotCXVwKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisJbXV0ZXhfbG9jaygmdXMtPmRldl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAogCS8qIHF1ZXVlY29tbWFuZCB3b24ndCBhY2NlcHQgYW55IG5ldyBjb21tYW5kcyBhbmQgdGhlIGNvbnRyb2wKIAkgKiB0aHJlYWQgd29uJ3QgZXhlY3V0ZSBhIHByZXZpb3VzbHktcXVldWVkIGNvbW1hbmQuICBJZiB0aGVyZQpAQCAtODcwLDkgKzg3MSw5IEBACiAJCS8qIEZvciBidWxrLW9ubHkgZGV2aWNlcywgZGV0ZXJtaW5lIHRoZSBtYXggTFVOIHZhbHVlICovCiAJCWlmICh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfQlVMSyAmJgogCQkJCSEodXMtPmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikpIHsKLQkJCWRvd24oJnVzLT5kZXZfc2VtYXBob3JlKTsKKwkJCW11dGV4X2xvY2soJnVzLT5kZXZfbXV0ZXgpOwogCQkJdXMtPm1heF9sdW4gPSB1c2Jfc3Rvcl9CdWxrX21heF9sdW4odXMpOwotCQkJdXAoJnVzLT5kZXZfc2VtYXBob3JlKTsKKwkJCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJCX0KIAkJc2NzaV9zY2FuX2hvc3QodXNfdG9faG9zdCh1cykpOwogCQlwcmludGsoS0VSTl9ERUJVRyAidXNiLXN0b3JhZ2U6IGRldmljZSBzY2FuIGNvbXBsZXRlXG4iKTsKQEAgLTkxMiw3ICs5MTMsNyBAQAogCiAJdXMgPSBob3N0X3RvX3VzKGhvc3QpOwogCW1lbXNldCh1cywgMCwgc2l6ZW9mKHN0cnVjdCB1c19kYXRhKSk7Ci0JaW5pdF9NVVRFWCgmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisJbXV0ZXhfaW5pdCgmKHVzLT5kZXZfbXV0ZXgpKTsKIAlpbml0X01VVEVYX0xPQ0tFRCgmKHVzLT5zZW1hKSk7CiAJaW5pdF9jb21wbGV0aW9uKCYodXMtPm5vdGlmeSkpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzLT5kZWxheV93YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCmluZGV4IDcyNTlmZDEuLjAwOWZiMDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAKIHN0cnVjdCB1c19kYXRhOwpAQCAtMTAzLDkgKzEwNCw5IEBACiBzdHJ1Y3QgdXNfZGF0YSB7CiAJLyogVGhlIGRldmljZSB3ZSdyZSB3b3JraW5nIHdpdGgKIAkgKiBJdCdzIGltcG9ydGFudCB0byBub3RlOgotCSAqICAgIChvKSB5b3UgbXVzdCBob2xkIGRldl9zZW1hcGhvcmUgdG8gY2hhbmdlIHB1c2JfZGV2CisJICogICAgKG8pIHlvdSBtdXN0IGhvbGQgZGV2X211dGV4IHRvIGNoYW5nZSBwdXNiX2RldgogCSAqLwotCXN0cnVjdCBzZW1hcGhvcmUJZGV2X3NlbWFwaG9yZTsJIC8qIHByb3RlY3QgcHVzYl9kZXYgKi8KKwlzdHJ1Y3QgbXV0ZXgJCWRldl9tdXRleDsJIC8qIHByb3RlY3QgcHVzYl9kZXYgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZQkqcHVzYl9kZXY7CSAvKiB0aGlzIHVzYl9kZXZpY2UgKi8KIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqcHVzYl9pbnRmOwkgLyogdGhpcyBpbnRlcmZhY2UgKi8KIAlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgICAqdW51c3VhbF9kZXY7CSAvKiBkZXZpY2UtZmlsdGVyIGVudHJ5ICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IGU2NGVkMTYuLmZkZWJkNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTUyMCw3ICs1MjAsNyBAQAogY29uZmlnIEZCX0dCRV9NRU0KIAlpbnQgIlZpZGVvIG1lbW9yeSBzaXplIGluIE1CIgogCWRlcGVuZHMgb24gRkJfR0JFCi0JZGVmYXVsdCA4CisJZGVmYXVsdCA0CiAJaGVscAogCSAgVGhpcyBpcyB0aGUgYW1vdW50IG9mIG1lbW9yeSByZXNlcnZlZCBmb3IgdGhlIGZyYW1lYnVmZmVyLAogCSAgd2hpY2ggY2FuIGJlIGFueSB2YWx1ZSBiZXR3ZWVuIDFNQiBhbmQgOE1CLgpAQCAtODk5LDggKzg5OSw2IEBACiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIGFuIEFUSSBSYWRlb24gZ3JhcGhpY3MgY2FyZCBhcwogCSAgYSBmcmFtZWJ1ZmZlciBkZXZpY2UuICBUaGVyZSBhcmUgYm90aCBQQ0kgYW5kIEFHUCB2ZXJzaW9ucy4gIFlvdQogCSAgZG9uJ3QgbmVlZCB0byBjaG9vc2UgdGhpcyB0byBydW4gdGhlIFJhZGVvbiBpbiBwbGFpbiBWR0EgbW9kZS4KLQkgIFRoZXJlIGlzIGEgcHJvZHVjdCBwYWdlIGF0Ci0JICA8aHR0cDovL3d3dy5hdGkuY29tL25hL3BhZ2VzL3Byb2R1Y3RzL3BjL3JhZGVvbjMyL2luZGV4Lmh0bWw+LgogCiBjb25maWcgRkJfUkFERU9OCiAJdHJpc3RhdGUgIkFUSSBSYWRlb24gZGlzcGxheSBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hY29ybmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwppbmRleCBiMDU4MjczLi43NjQ0OGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAKIAkJICovCiAJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmlydHVhbF9zdGFydCk7CiAJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKKwkJaW5pdF9wYWdlX2NvdW50KHBhZ2UpOwogCQlmcmVlX3BhZ2UodmlydHVhbF9zdGFydCk7CiAKIAkJdmlydHVhbF9zdGFydCArPSBQQUdFX1NJWkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKaW5kZXggZGY4ZTU2Ni4uNDY2MDQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hcmNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwpAQCAtMjUzLDcgKzI1Myw3IEBACiB7CiAJdW5zaWduZWQgY2hhciAqc3JjOwogCXVuc2lnbmVkIGludCB4aW5kZXgsIHlpbmRleCwgY2hpcGluZGV4LCBsaW5lc2l6ZTsKLQlpbnQgaSwgY291bnQ7CisJaW50IGk7CiAJdW5zaWduZWQgY2hhciB2YWw7CiAJdW5zaWduZWQgY2hhciBiaXRtYXNrLCByaWdodHNoaWZ0OwogCkBAIC0yODIsNyArMjgyLDYgQEAKIAkJfQogCQlrczEwOF93cml0ZWJfZGF0YShwYXIsIGNoaXBpbmRleCwgdmFsKTsKIAkJbGVmdCsrOwotCQljb3VudCsrOwogCQlpZiAoYml0bWFzayA9PSAweDgwKSB7CiAJCQliaXRtYXNrID0gMTsKIAkJCXNyYysrOwpAQCAtNDYwLDExICs0NTksMTEgQEAKIAlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwogCWZiaWR4ID0gaW1pbm9yKGlub2RlKTsKIAlpbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0JcGFyID0gaW5mby0+cGFyOwogCiAJaWYgKCFpbmZvIHx8ICFpbmZvLT5zY3JlZW5fYmFzZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlwYXIgPSBpbmZvLT5wYXI7CiAJeHJlcyA9IGluZm8tPnZhci54cmVzOwogCWZibWVtbGVuZ3RoID0gKHhyZXMgKiBpbmZvLT52YXIueXJlcykvODsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hc2lsaWFudGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2FzaWxpYW50ZmIuYwppbmRleCA2OWY3NTU0Li5jOTI0ZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2FzaWxpYW50ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FzaWxpYW50ZmIuYwpAQCAtMzIyLDMyICszMjIsMjkgQEAKIAl3cml0ZWIoZ3JlZW4sIG1taW9fYmFzZSArIDB4NzkxKTsKIAl3cml0ZWIoYmx1ZSwgbW1pb19iYXNlICsgMHg3OTEpOwogCi0Jc3dpdGNoKHAtPnZhci5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgMTU6Ci0JCWlmIChyZWdubyA8IDE2KSB7CisJaWYgKHJlZ25vIDwgMTYpIHsKKwkJc3dpdGNoKHAtPnZhci5yZWQub2Zmc2V0KSB7CisJCWNhc2UgMTA6IC8qIFJHQiA1NTUgKi8KIAkJCSgodTMyICopKHAtPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KIAkJCQkoKHJlZCAmIDB4ZjgpIDw8IDcpIHwKIAkJCQkoKGdyZWVuICYgMHhmOCkgPDwgMikgfAogCQkJCSgoYmx1ZSAmIDB4ZjgpID4+IDMpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWlmIChyZWdubyA8IDE2KSB7CisJCQlicmVhazsKKwkJY2FzZSAxMTogLyogUkdCIDU2NSAqLwogCQkJKCh1MzIgKikocC0+cHNldWRvX3BhbGV0dGUpKVtyZWdub10gPQogCQkJCSgocmVkICYgMHhmOCkgPDwgOCkgfAogCQkJCSgoZ3JlZW4gJiAweGZjKSA8PCAzKSB8CiAJCQkJKChibHVlICYgMHhmOCkgPj4gMyk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQkJaWYgKHJlZ25vIDwgMjQpIHsKKwkJCWJyZWFrOworCQljYXNlIDE2OiAvKiBSR0IgODg4ICovCiAJCQkoKHUzMiAqKShwLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9CiAJCQkJKHJlZCA8PCAxNikgIHwKIAkJCQkoZ3JlZW4gPDwgOCkgfAogCQkJCShibHVlKTsKKwkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwogCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwppbmRleCBiZmM4YTkzLi42MjBjOWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKQEAgLTEzMjYsNyArMTMyNiw3IEBACiAJdW5zaWduZWQgY2hhciBwb3N0X2RpdmlkZXJzW10gPSB7MSwyLDQsOCwzLDYsMTJ9OwogCXUzMiBvdXRwdXRfZnJlcTsKIAl1MzIgdmNsazsgICAgICAgIC8qIGluIC4wMSBNSHogKi8KLQlpbnQgaTsKKwlpbnQgaSA9IDA7CiAJdTMyIG4sIGQ7CiAKIAl2Y2xrID0gMTAwMDAwMDAwIC8gcGVyaW9kX2luX3BzOwkvKiBjb252ZXJ0IHVuaXRzIHRvIDEwIGtIeiAqLwpAQCAtMTM0MCwxNSArMTM0MCwxNiBAQAogCS8qIG5vdywgZmluZCBhbiBhY2NlcHRhYmxlIGRpdmlkZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHBvc3RfZGl2aWRlcnMpOyBpKyspIHsKIAkJb3V0cHV0X2ZyZXEgPSBwb3N0X2RpdmlkZXJzW2ldICogdmNsazsKLQkJaWYgKG91dHB1dF9mcmVxID49IGMucHBsbF9taW4gJiYgb3V0cHV0X2ZyZXEgPD0gYy5wcGxsX21heCkKKwkJaWYgKG91dHB1dF9mcmVxID49IGMucHBsbF9taW4gJiYgb3V0cHV0X2ZyZXEgPD0gYy5wcGxsX21heCkgeworCQkJcGxsLT5wb3N0X2RpdmlkZXIgPSBwb3N0X2RpdmlkZXJzW2ldOwogCQkJYnJlYWs7CisJCX0KIAl9CiAKIAkvKiBjYWxjdWxhdGUgZmVlZGJhY2sgZGl2aWRlciAqLwogCW4gPSBjLnJlZl9kaXZpZGVyICogb3V0cHV0X2ZyZXE7CiAJZCA9IGMucmVmX2NsazsKIAotCXBsbC0+cG9zdF9kaXZpZGVyID0gcG9zdF9kaXZpZGVyc1tpXTsKIAlwbGwtPmZlZWRiYWNrX2RpdmlkZXIgPSByb3VuZF9kaXYobiwgZCk7CiAJcGxsLT52Y2xrID0gdmNsazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX21vbml0b3IuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9tb25pdG9yLmMKaW5kZXggN2Y5ODM4ZC4uOThjMDViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX21vbml0b3IuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fbW9uaXRvci5jCkBAIC0zOTYsNiArMzk2LDEwIEBACiAJCQkJczFbaV0gPSAqczsKIAkJCWkrKzsKIAkJfQorCisJCWlmIChpID4gNCkKKwkJCWkgPSA0OworCiAJfSB3aGlsZSAoKnMrKyk7CiAJaWYgKHNlY29uZCkKIAkJczJbaV0gPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwppbmRleCA1NTY4OTVlLi41ODg2YTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYwpAQCAtMTMyMSw4ICsxMzIxLDYgQEAKIAltZGVsYXkoIDE1KTsKIH0KIAotI2lmZGVmIENPTkZJR19QUENfT0YKLQogc3RhdGljIHZvaWQgcmFkZW9uX3BtX3Jlc2V0X3BhZF9jdGxyX3N0cmVuZ3RoKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKIHsKIAl1MzIgdG1wLCB0bXAyOwpAQCAtMTgzNiw2ICsxODM0LDggQEAKIAlyYWRlb25fcG1fbTEwX2VuYWJsZV9sdmRzX3NwcmVhZF9zcGVjdHJ1bShyaW5mbyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDX09GCisKIHN0YXRpYyB2b2lkIHJhZGVvbl9wbV9tOXBfcmVjb25maWd1cmVfbWMoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQogewogCU9VVFJFRyhNQ19DTlRMLCByaW5mby0+c2F2ZV9yZWdzWzQ2XSk7CkBAIC0yMDgwLDcgKzIwODAsNyBAQAogCU9VVFJFRygweDJlYywgMHg2MzMyYTNmMCk7CiAJbWRlbGF5KDE3KTsKIAotCU9VVFBMTChwbGxQUExMX1JFRl9ESVYsIHJpbmZvLT5wbGwucmVmX2Rpdik7OworCU9VVFBMTChwbGxQUExMX1JFRl9ESVYsIHJpbmZvLT5wbGwucmVmX2Rpdik7CiAJT1VUUExMKHBsbFBQTExfRElWXzAsIHJpbmZvLT5zYXZlX3JlZ3NbOTJdKTsKIAogCW1kZWxheSg0MCk7CkBAIC0yNzI4LDEzICsyNzI4LDIzIEBACiAJCXByaW50aygicmFkZW9uZmI6IER5bmFtaWMgQ2xvY2sgUG93ZXIgTWFuYWdlbWVudCBkaXNhYmxlZFxuIik7CiAJfQogCisjaWYgZGVmaW5lZChDT05GSUdfUE0pCiAJLyogQ2hlY2sgaWYgd2UgY2FuIHBvd2VyIG1hbmFnZSBvbiBzdXNwZW5kL3Jlc3VtZS4gV2UgY2FuIGRvCiAJICogRDIgb24gTTYsIE03IGFuZCBNOSwgYW5kIHdlIGNhbiByZXN1bWUgZnJvbSBEMyBjb2xkIGEgZmV3IG90aGVyCiAJICogIk1hYyIgY2FyZHMsIGJ1dCB0aGF0J3MgYWxsLiBXZSBuZWVkIG1vcmUgaW5mb3MgYWJvdXQgd2hhdCB0aGUKIAkgKiBCSU9TIGRvZXMgdGhvLiBSaWdodCBub3csIGFsbCB0aGlzIFBNIHN0dWZmIGlzIHBtYWMtb25seSBmb3IgdGhhdAogCSAqIHJlYXNvbi4gLS1CZW5ICiAJICovCi0jaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKQorCS8qIFNwZWNpYWwgY2FzZSBmb3IgU2Ftc3VuZyBQMzUgbGFwdG9wcworCSAqLworCWlmICgocmluZm8tPnBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FUSSkgJiYKKwkgICAgKHJpbmZvLT5wZGV2LT5kZXZpY2UgPT0gUENJX0NISVBfUlYzNTBfTlApICYmCisJICAgIChyaW5mby0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcpICYmCisJICAgIChyaW5mby0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweGMwMGMpKSB7CisJCXJpbmZvLT5yZWluaXRfZnVuYyA9IHJhZGVvbl9yZWluaXRpYWxpemVfTTEwOworCQlyaW5mby0+cG1fbW9kZSB8PSByYWRlb25fcG1fb2ZmOworCX0KKyNpZiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykKIAlpZiAoX21hY2hpbmUgPT0gX01BQ0hfUG1hYyAmJiByaW5mby0+b2Zfbm9kZSkgewogCQlpZiAocmluZm8tPmlzX21vYmlsaXR5ICYmIHJpbmZvLT5wbV9yZWcgJiYKIAkJICAgIHJpbmZvLT5mYW1pbHkgPD0gQ0hJUF9GQU1JTFlfUlYyNTApCkBAIC0yNzc4LDcgKzI3ODgsOCBAQAogCQlPVVRSRUcoVFZfREFDX0NOVEwsIElOUkVHKFRWX0RBQ19DTlRMKSB8IDB4MDcwMDAwMDApOwogI2VuZGlmCiAJfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QTSkgKi8KIH0KIAogdm9pZCByYWRlb25mYl9wbV9leGl0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwppbmRleCAyNDA2ODk5Li4zZDA0YjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogCkBAIC00MDYsNyArNDA3LDcgQEAKIAogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU87CiAKLQlpZiAoaW9fcmVtYXBfcGFnZV9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIG9mZiwKKwlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgb2ZmID4+IFBBR0VfU0hJRlQsCiAJCQkJdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAogCQkJCXZtYS0+dm1fcGFnZV9wcm90KSkgewogCQlyZXR1cm4gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKaW5kZXggYmQzOWJiZC4uMTUxZmRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYmFja2xpZ2h0LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAJbmV3X2JkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIW5ld19iZCkpCi0JCXJldHVybiBFUlJfUFRSKEVOT01FTSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJaW5pdF9NVVRFWCgmbmV3X2JkLT5zZW0pOwogCW5ld19iZC0+cHJvcHMgPSBicDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMKaW5kZXggOWUzMjQ4NS4uODY5MDhhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiAJbmV3X2xkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxjZF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIW5ld19sZCkpCi0JCXJldHVybiBFUlJfUFRSKEVOT01FTSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJaW5pdF9NVVRFWCgmbmV3X2xkLT5zZW0pOwogCW5ld19sZC0+cHJvcHMgPSBscDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xvY29tb2xjZC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKaW5kZXggYWRhNmU3NS4uNjA4MzFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMKQEAgLTIwLDE0ICsyMCwxMCBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2xvY29tby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zaGFycHNsX3BhcmFtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2lmZGVmIENPTkZJR19TQTExMDBfQ09MTElFCi0jaW5jbHVkZSA8YXNtL2FyY2gvY29sbGllLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9hcmNoL3Bvb2RsZS5oPgotI2VuZGlmCi0KLWV4dGVybiB2b2lkICgqc2ExMTAwZmJfbGNkX3Bvd2VyKShpbnQgb24pOworI2luY2x1ZGUgIi4uLy4uLy4uL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuaCIKIAogc3RhdGljIHN0cnVjdCBsb2NvbW9fZGV2ICpsb2NvbW9sY2RfZGV2OwogCkBAIC04Miw3ICs3OCw3IEBACiAKIHZvaWQgbG9jb21vbGNkX3Bvd2VyKGludCBvbikKIHsKLQlpbnQgY29tYWRqID0gMTE4OworCWludCBjb21hZGogPSBzaGFycHNsX3BhcmFtLmNvbWFkajsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtOTMsMTEgKzg5LDEyIEBACiAJfQogCiAJLyogcmVhZCBjb21hZGogKi8KLSNpZmRlZiBDT05GSUdfTUFDSF9QT09ETEUKLQljb21hZGogPSAxMTg7Ci0jZWxzZQotCWNvbWFkaiA9IDEyODsKLSNlbmRpZgorCWlmIChjb21hZGogPT0gLTEpIHsKKwkJaWYgKG1hY2hpbmVfaXNfcG9vZGxlKCkpCisJCQljb21hZGogPSAxMTg7CisJCWlmIChtYWNoaW5lX2lzX2NvbGxpZSgpKQorCQkJY29tYWRqID0gMTI4OworCX0KIAogCWlmIChvbikKIAkJbG9jb21vbGNkX29uKGNvbWFkaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2J3Mi5jIGIvZHJpdmVycy92aWRlby9idzIuYwppbmRleCBjMDI5ZGI0Li42NTc3ZmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2J3Mi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYncyLmMKQEAgLTMyNyw4ICszMjcsNyBAQAogCX0gZWxzZQogI2Vsc2UKIAl7Ci0JCWlmICghc2RldikKLQkJCUJVRygpOworCQlCVUdfT04oIXNkZXYpOwogCQlhbGwtPnBhci5waHlzYmFzZSA9IHNkZXYtPnJlZ19hZGRyc1swXS5waHlzX2FkZHI7CiAJCXJlc3AgPSAmc2Rldi0+cmVzb3VyY2VbMF07CiAJCXNidXNmYl9maWxsX3ZhcigmYWxsLT5pbmZvLnZhciwgKHNkZXYgPyBzZGV2LT5wcm9tX25vZGUgOiAwKSwgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKaW5kZXggZTBkYmRmYy4uNjZkNmYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYwpAQCAtMjYyMiw3ICsyNjIyLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1pPUlJPCi0JZXJyb3IgfD0gem9ycm9fbW9kdWxlX2luaXQoJmNpcnJ1c2ZiX3pvcnJvX2RyaXZlcik7CisJZXJyb3IgfD0gem9ycm9fcmVnaXN0ZXJfZHJpdmVyKCZjaXJydXNmYl96b3Jyb19kcml2ZXIpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BDSQogCWVycm9yIHw9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNpcnJ1c2ZiX3BjaV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCmluZGV4IDEyZDkzMjkuLjVhODY5NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKQEAgLTUwOSw1NyArNTA5LDYwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgc2NhbmxpbmVzID0gaGVpZ2h0ICogYy0+dmNfZm9udC5oZWlnaHQ7Ci0JdTggc2NhbmxpbmVzX2xvLCByNywgdnN5bmNfZW5kLCBtb2RlLCBtYXhfc2NhbjsKKwl1OCBzY2FubGluZXNfbG8gPSAwLCByNyA9IDAsIHZzeW5jX2VuZCA9IDAsIG1vZGUsIG1heF9zY2FuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZnYV9sb2NrLCBmbGFncyk7CiAKLQlvdXRiX3AoVkdBX0NSVENfTUFYX1NDQU4sIHZnYV92aWRlb19wb3J0X3JlZyk7Ci0JbWF4X3NjYW4gPSBpbmJfcCh2Z2FfdmlkZW9fcG9ydF92YWwpOwotCi0JaWYgKG1heF9zY2FuICYgMHg4MCkKLQkJc2NhbmxpbmVzIDw8PSAxOwotCiAJdmdhY29uX3hyZXMgPSB3aWR0aCAqIFZHQV9GT05UV0lEVEg7CiAJdmdhY29uX3lyZXMgPSBoZWlnaHQgKiBjLT52Y19mb250LmhlaWdodDsKLQlvdXRiX3AoVkdBX0NSVENfTU9ERSwgdmdhX3ZpZGVvX3BvcnRfcmVnKTsKLQltb2RlID0gaW5iX3AodmdhX3ZpZGVvX3BvcnRfdmFsKTsKKwlpZiAodmdhX3ZpZGVvX3R5cGUgPj0gVklERU9fVFlQRV9WR0FDKSB7CisJCW91dGJfcChWR0FfQ1JUQ19NQVhfU0NBTiwgdmdhX3ZpZGVvX3BvcnRfcmVnKTsKKwkJbWF4X3NjYW4gPSBpbmJfcCh2Z2FfdmlkZW9fcG9ydF92YWwpOwogCi0JaWYgKG1vZGUgJiAweDA0KQotCQlzY2FubGluZXMgPj49IDE7CisJCWlmIChtYXhfc2NhbiAmIDB4ODApCisJCQlzY2FubGluZXMgPDw9IDE7CiAKLQlzY2FubGluZXMgLT0gMTsKLQlzY2FubGluZXNfbG8gPSBzY2FubGluZXMgJiAweGZmOworCQlvdXRiX3AoVkdBX0NSVENfTU9ERSwgdmdhX3ZpZGVvX3BvcnRfcmVnKTsKKwkJbW9kZSA9IGluYl9wKHZnYV92aWRlb19wb3J0X3ZhbCk7CiAKLQlvdXRiX3AoVkdBX0NSVENfT1ZFUkZMT1csIHZnYV92aWRlb19wb3J0X3JlZyk7Ci0JcjcgPSBpbmJfcCh2Z2FfdmlkZW9fcG9ydF92YWwpICYgfjB4NDI7CisJCWlmIChtb2RlICYgMHgwNCkKKwkJCXNjYW5saW5lcyA+Pj0gMTsKIAotCWlmIChzY2FubGluZXMgJiAweDEwMCkKLQkJcjcgfD0gMHgwMjsKLQlpZiAoc2NhbmxpbmVzICYgMHgyMDApCi0JCXI3IHw9IDB4NDA7CisJCXNjYW5saW5lcyAtPSAxOworCQlzY2FubGluZXNfbG8gPSBzY2FubGluZXMgJiAweGZmOwogCi0JLyogZGVwcm90ZWN0IHJlZ2lzdGVycyAqLwotCW91dGJfcChWR0FfQ1JUQ19WX1NZTkNfRU5ELCB2Z2FfdmlkZW9fcG9ydF9yZWcpOwotCXZzeW5jX2VuZCA9IGluYl9wKHZnYV92aWRlb19wb3J0X3ZhbCk7Ci0Jb3V0Yl9wKFZHQV9DUlRDX1ZfU1lOQ19FTkQsIHZnYV92aWRlb19wb3J0X3JlZyk7Ci0Jb3V0Yl9wKHZzeW5jX2VuZCAmIH4weDgwLCB2Z2FfdmlkZW9fcG9ydF92YWwpOworCQlvdXRiX3AoVkdBX0NSVENfT1ZFUkZMT1csIHZnYV92aWRlb19wb3J0X3JlZyk7CisJCXI3ID0gaW5iX3AodmdhX3ZpZGVvX3BvcnRfdmFsKSAmIH4weDQyOworCisJCWlmIChzY2FubGluZXMgJiAweDEwMCkKKwkJCXI3IHw9IDB4MDI7CisJCWlmIChzY2FubGluZXMgJiAweDIwMCkKKwkJCXI3IHw9IDB4NDA7CisKKwkJLyogZGVwcm90ZWN0IHJlZ2lzdGVycyAqLworCQlvdXRiX3AoVkdBX0NSVENfVl9TWU5DX0VORCwgdmdhX3ZpZGVvX3BvcnRfcmVnKTsKKwkJdnN5bmNfZW5kID0gaW5iX3AodmdhX3ZpZGVvX3BvcnRfdmFsKTsKKwkJb3V0Yl9wKFZHQV9DUlRDX1ZfU1lOQ19FTkQsIHZnYV92aWRlb19wb3J0X3JlZyk7CisJCW91dGJfcCh2c3luY19lbmQgJiB+MHg4MCwgdmdhX3ZpZGVvX3BvcnRfdmFsKTsKKwl9CiAKIAlvdXRiX3AoVkdBX0NSVENfSF9ESVNQLCB2Z2FfdmlkZW9fcG9ydF9yZWcpOwogCW91dGJfcCh3aWR0aCAtIDEsIHZnYV92aWRlb19wb3J0X3ZhbCk7CiAJb3V0Yl9wKFZHQV9DUlRDX09GRlNFVCwgdmdhX3ZpZGVvX3BvcnRfcmVnKTsKIAlvdXRiX3Aod2lkdGggPj4gMSwgdmdhX3ZpZGVvX3BvcnRfdmFsKTsKIAotCW91dGJfcChWR0FfQ1JUQ19WX0RJU1BfRU5ELCB2Z2FfdmlkZW9fcG9ydF9yZWcpOwotCW91dGJfcChzY2FubGluZXNfbG8sIHZnYV92aWRlb19wb3J0X3ZhbCk7Ci0Jb3V0Yl9wKFZHQV9DUlRDX09WRVJGTE9XLCB2Z2FfdmlkZW9fcG9ydF9yZWcpOwotCW91dGJfcChyNyx2Z2FfdmlkZW9fcG9ydF92YWwpOworCWlmICh2Z2FfdmlkZW9fdHlwZSA+PSBWSURFT19UWVBFX1ZHQUMpIHsKKwkJb3V0Yl9wKFZHQV9DUlRDX1ZfRElTUF9FTkQsIHZnYV92aWRlb19wb3J0X3JlZyk7CisJCW91dGJfcChzY2FubGluZXNfbG8sIHZnYV92aWRlb19wb3J0X3ZhbCk7CisJCW91dGJfcChWR0FfQ1JUQ19PVkVSRkxPVywgdmdhX3ZpZGVvX3BvcnRfcmVnKTsKKwkJb3V0Yl9wKHI3LHZnYV92aWRlb19wb3J0X3ZhbCk7CiAKLQkvKiByZXByb3RlY3QgcmVnaXN0ZXJzICovCi0Jb3V0Yl9wKFZHQV9DUlRDX1ZfU1lOQ19FTkQsIHZnYV92aWRlb19wb3J0X3JlZyk7Ci0Jb3V0Yl9wKHZzeW5jX2VuZCwgdmdhX3ZpZGVvX3BvcnRfdmFsKTsKKwkJLyogcmVwcm90ZWN0IHJlZ2lzdGVycyAqLworCQlvdXRiX3AoVkdBX0NSVENfVl9TWU5DX0VORCwgdmdhX3ZpZGVvX3BvcnRfcmVnKTsKKwkJb3V0Yl9wKHZzeW5jX2VuZCwgdmdhX3ZpZGVvX3BvcnRfdmFsKTsKKwl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2Z2FfbG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYyBiL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYwppbmRleCAzYjBlNzEzLi4wODI3NTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jCkBAIC02MDcsNiArNjA3LDcgQEAKIAogc3RhdGljIHZvaWQgZXBzb24xMzU1ZmJfcGxhdGZvcm1fcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CisJZGV2X2VycihkZXZpY2UsICJUaGlzIGRyaXZlciBpcyBicm9rZW4sIHBsZWFzZSBidWcgdGhlIGF1dGhvcnMgc28gdGhleSB3aWxsIGZpeCBpdC5cbiIpOwogfQogCiBzdGF0aWMgaW50IGVwc29uMTM1NWZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggOTk2YzdiNS4uMDdkODgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTE2OSwxMSArMTE2OSw2IEBACiAJdm1hLT52bV9wZ29mZiA9IG9mZiA+PiBQQUdFX1NISUZUOwogCS8qIFRoaXMgaXMgYW4gSU8gbWFwIC0gdGVsbCBtYXlkdW1wIHRvIHNraXAgdGhpcyBWTUEgKi8KIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUkVTRVJWRUQ7Ci0jaWYgZGVmaW5lZChfX3NwYXJjX3Y5X18pCi0JaWYgKGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIG9mZiA+PiBQQUdFX1NISUZULAotCQkJCXZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgdm1hLT52bV9wYWdlX3Byb3QpKQotCQlyZXR1cm4gLUVBR0FJTjsKLSNlbHNlCiAjaWYgZGVmaW5lZChfX21jNjgwMDBfXykKICNpZiBkZWZpbmVkKENPTkZJR19TVU4zKQogCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IFNVTjNfUEFHRV9OT0NBQ0hFOwpAQCAtMTE5NSw3ICsxMTkwLDcgQEAKICNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQogCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7Ci0jZWxpZiBkZWZpbmVkKF9fbWlwc19fKQorI2VsaWYgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX3NwYXJjX3Y5X18pCiAJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKICNlbGlmIGRlZmluZWQoX19ocHBhX18pCiAJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9fQ0FDSEU7CkBAIC0xMjEyLDcgKzEyMDcsNiBAQAogCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBvZmYgPj4gUEFHRV9TSElGVCwKIAkJCSAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCkpCiAJCXJldHVybiAtRUFHQUlOOwotI2VuZGlmIC8qICFfX3NwYXJjX3Y5X18gKi8KIAlyZXR1cm4gMDsKICNlbmRpZiAvKiAhc3BhcmMzMiAqLwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmZiLmMKaW5kZXggOWM5YjIxZC4uNzYzM2U0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZmYi5jCkBAIC00NjYsOCArNDY2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBmZzsKIAotCWlmIChyZWN0LT5yb3AgIT0gUk9QX0NPUFkgJiYgcmVjdC0+cm9wICE9IFJPUF9YT1IpCi0JCUJVRygpOworCUJVR19PTihyZWN0LT5yb3AgIT0gUk9QX0NPUFkgJiYgcmVjdC0+cm9wICE9IFJPUF9YT1IpOwogCiAJZmcgPSAoKHUzMiAqKWluZm8tPnBzZXVkb19wYWxldHRlKVtyZWN0LT5jb2xvcl07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwppbmRleCBjOWE3Y2RmLi41ZTI1Yjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9nYmVmYi5jCkBAIC02NTYsMTIgKzY1NiwxNSBAQAogCXN3aXRjaCAoYnl0ZXNQZXJQaXhlbCkgewogCWNhc2UgMToKIAkJU0VUX0dCRV9GSUVMRChXSUQsIFRZUCwgdmFsLCBHQkVfQ01PREVfSTgpOworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOwogCQlicmVhazsKIAljYXNlIDI6CiAJCVNFVF9HQkVfRklFTEQoV0lELCBUWVAsIHZhbCwgR0JFX0NNT0RFX0FSR0I1KTsKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJCWJyZWFrOwogCWNhc2UgNDoKIAkJU0VUX0dCRV9GSUVMRChXSUQsIFRZUCwgdmFsLCBHQkVfQ01PREVfUkdCOCk7CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwogCQlicmVhazsKIAl9CiAJU0VUX0dCRV9GSUVMRChXSUQsIEJVRiwgdmFsLCBHQkVfQk1PREVfQk9USCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2hwZmIuYyBiL2RyaXZlcnMvdmlkZW8vaHBmYi5jCmluZGV4IGJlYmRhYzUuLmFiZDkyMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaHBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaHBmYi5jCkBAIC0zODYsNyArMzg2LDkgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImhwZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkaW9fbW9kdWxlX2luaXQoJmhwZmJfZHJpdmVyKTsKKwllcnIgPSBkaW9fcmVnaXN0ZXJfZHJpdmVyKCZocGZiX2RyaXZlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKaW5kZXggZDg0NjdjMC4uNzg4Mjk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwpAQCAtMTUwOCw3ICsxNTA4LDcgQEAKIAkJaW50IHNpemUgPSAoKGN1cnNvci0+aW1hZ2Uud2lkdGggKyA3KSA+PiAzKSAqCiAJCQljdXJzb3ItPmltYWdlLmhlaWdodDsKIAkJaW50IGk7Ci0JCXU4ICpkYXRhID0ga21hbGxvYyg2NCAqIDgsIEdGUF9LRVJORUwpOworCQl1OCAqZGF0YSA9IGttYWxsb2MoNjQgKiA4LCBHRlBfQVRPTUlDKTsKIAogCQlpZiAoZGF0YSA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ltc3R0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW1zdHRmYi5jCmluZGV4IGFkNDE2YWUuLjdkYjQyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW1zdHRmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW1zdHRmYi5jCkBAIC0xNTEwLDYgKzE1MTAsOCBAQAogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fSU5GTyAiaW1zdHRmYjogRGV2aWNlIDB4JXggdW5rbm93biwgIgogCQkJCQkgImNvbnRhY3QgbWFpbnRhaW5lci5cbiIsIHBkZXYtPmRldmljZSk7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oYWRkciwgc2l6ZSk7CisJCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwppbmRleCA2YjhiZDNjLi45OTViNDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKQEAgLTEzMzMsMzMgKzEzMzMsMzUgQEAKIAlpZiAocmVnbm8gPiAyNTUpCiAJCXJldHVybiAxOwogCi0Jc3dpdGNoIChkaW5mby0+ZGVwdGgpIHsKLQljYXNlIDg6Ci0JCXsKLQkJCXJlZCA+Pj0gODsKLQkJCWdyZWVuID4+PSA4OwotCQkJYmx1ZSA+Pj0gODsKKwlpZiAoZGluZm8tPmRlcHRoID09IDgpIHsKKwkJcmVkID4+PSA4OworCQlncmVlbiA+Pj0gODsKKwkJYmx1ZSA+Pj0gODsKIAotCQkJaW50ZWxmYmh3X3NldGNvbHJlZyhkaW5mbywgcmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUsCi0JCQkJCSAgICB0cmFuc3ApOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgMTU6Ci0JCWRpbmZvLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAoKHJlZCAmIDB4ZjgwMCkgPj4gIDEpIHwKLQkJCQkJICAgICAgICgoZ3JlZW4gJiAweGY4MDApID4+ICA2KSB8Ci0JCQkJCSAgICAgICAoKGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJZGluZm8tPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IChyZWQgJiAweGY4MDApIHwKLQkJCQkJICAgICAgICgoZ3JlZW4gJiAweGZjMDApID4+ICA1KSB8Ci0JCQkJCSAgICAgICAoKGJsdWUgICYgMHhmODAwKSA+PiAxMSk7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0JCWRpbmZvLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAoKHJlZCAmIDB4ZmYwMCkgPDwgOCkgfAotCQkJCQkgICAgICAgKGdyZWVuICYgMHhmZjAwKSB8Ci0JCQkJCSAgICAgICAoKGJsdWUgICYgMHhmZjAwKSA+PiA4KTsKLQkJYnJlYWs7CisJCWludGVsZmJod19zZXRjb2xyZWcoZGluZm8sIHJlZ25vLCByZWQsIGdyZWVuLCBibHVlLAorCQkJCSAgICB0cmFuc3ApOwogCX0KKworCWlmIChyZWdubyA8IDE2KSB7CisJCXN3aXRjaCAoZGluZm8tPmRlcHRoKSB7CisJCWNhc2UgMTU6CisJCQlkaW5mby0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKChyZWQgJiAweGY4MDApID4+ICAxKSB8CisJCQkJKChncmVlbiAmIDB4ZjgwMCkgPj4gIDYpIHwKKwkJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJZGluZm8tPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IChyZWQgJiAweGY4MDApIHwKKwkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAorCQkJCSgoYmx1ZSAgJiAweGY4MDApID4+IDExKTsKKwkJCWJyZWFrOworCQljYXNlIDI0OgorCQkJZGluZm8tPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9ICgocmVkICYgMHhmZjAwKSA8PCA4KSB8CisJCQkJKGdyZWVuICYgMHhmZjAwKSB8CisJCQkJKChibHVlICAmIDB4ZmYwMCkgPj4gOCk7CisJCQlicmVhazsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2t5cm8vU1RHNDAwMFZURy5jIGIvZHJpdmVycy92aWRlby9reXJvL1NURzQwMDBWVEcuYwppbmRleCAzNjkwYjA0Li5iZDM4OTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2t5cm8vU1RHNDAwMFZURy5jCisrKyBiL2RyaXZlcnMvdmlkZW8va3lyby9TVEc0MDAwVlRHLmMKQEAgLTE3LDcgKzE3LDcgQEAKIHZvaWQgRGlzYWJsZVZHQSh2b2xhdGlsZSBTVEc0MDAwUkVHIF9faW9tZW0gKnBTVEdSZWcpCiB7CiAJdTMyIHRtcDsKLQl2b2xhdGlsZSB1MzIgY291bnQsIGk7CisJdm9sYXRpbGUgdTMyIGNvdW50ID0gMCwgaTsKIAogCS8qIFJlc2V0IHRoZSBWR0EgcmVnaXN0ZXJzICovCiAJdG1wID0gU1RHX1JFQURfUkVHKFNvZnR3YXJlUmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9uZW9mYi5jIGIvZHJpdmVycy92aWRlby9uZW9mYi5jCmluZGV4IGEyZTIwMWQuLmI5NjFkNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbmVvZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL25lb2ZiLmMKQEAgLTQ4NiwxMCArNDg2LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IG5lbzIyMDBfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgbmVvZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0JaW50IHdhaXRjeWNsZXM7CiAKLQl3aGlsZSAocmVhZGwoJnBhci0+bmVvMjIwMC0+Ymx0U3RhdCkgJiAxKQotCQl3YWl0Y3ljbGVzKys7CisJd2hpbGUgKHJlYWRsKCZwYXItPm5lbzIyMDAtPmJsdFN0YXQpICYgMSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG0zZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG0zZmIuYwppbmRleCAwZTc4ZGRjLi41MmMxOGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BtM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbTNmYi5jCkBAIC0zNTMyLDI2ICszNTMyLDI2IEBACiBNT0RVTEVfQVVUSE9SKCJSb21haW4gRG9sYmVhdSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQZXJtZWRpYTMgZnJhbWVidWZmZXIgZGV2aWNlIGRyaXZlciIpOwogc3RhdGljIGNoYXIgKm1vZGVbUE0zX01BWF9CT0FSRF07Ci1NT0RVTEVfUEFSTShtb2RlLFBNM19NQVhfQk9BUkRfTU9EVUxFX0FSUkFZX1NUUklORyk7Cittb2R1bGVfcGFyYW1fYXJyYXkobW9kZSwgY2hhcnAsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtb2RlLCJ2aWRlbyBtb2RlIik7Ci1NT0RVTEVfUEFSTShkaXNhYmxlLFBNM19NQVhfQk9BUkRfTU9EVUxFX0FSUkFZX1NIT1JUKTsKK21vZHVsZV9wYXJhbV9hcnJheShkaXNhYmxlLCBzaG9ydCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGUsImRpc2FibGUgYm9hcmQiKTsKIHN0YXRpYyBzaG9ydCBvZmZbUE0zX01BWF9CT0FSRF07Ci1NT0RVTEVfUEFSTShvZmYsUE0zX01BWF9CT0FSRF9NT0RVTEVfQVJSQVlfU0hPUlQpOworbW9kdWxlX3BhcmFtX2FycmF5KG9mZiwgc2hvcnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhvZmYsImRpc2FibGUgYm9hcmQiKTsKIHN0YXRpYyBjaGFyICpwY2lpZFtQTTNfTUFYX0JPQVJEXTsKLU1PRFVMRV9QQVJNKHBjaWlkLFBNM19NQVhfQk9BUkRfTU9EVUxFX0FSUkFZX1NUUklORyk7Cittb2R1bGVfcGFyYW1fYXJyYXkocGNpaWQsIGNoYXJwLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocGNpaWQsImJvYXJkIFBDSSBJZCIpOwotTU9EVUxFX1BBUk0obm9hY2NlbCxQTTNfTUFYX0JPQVJEX01PRFVMRV9BUlJBWV9TSE9SVCk7Cittb2R1bGVfcGFyYW1fYXJyYXkobm9hY2NlbCwgc2hvcnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub2FjY2VsLCJkaXNhYmxlIGFjY2VsIik7CiBzdGF0aWMgY2hhciAqZm9udFtQTTNfTUFYX0JPQVJEXTsKLU1PRFVMRV9QQVJNKGZvbnQsUE0zX01BWF9CT0FSRF9NT0RVTEVfQVJSQVlfU1RSSU5HKTsKK21vZHVsZV9wYXJhbV9hcnJheShmb250LCBjaGFycCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZvbnQsImNob29zZSBmb250Iik7Ci1NT0RVTEVfUEFSTShkZXB0aCxQTTNfTUFYX0JPQVJEX01PRFVMRV9BUlJBWV9TSE9SVCk7Cittb2R1bGVfcGFyYW0oZGVwdGgsIHNob3J0LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVwdGgsImJvb3QtdGltZSBkZXB0aCIpOwotTU9EVUxFX1BBUk0ocHJpbnR0aW1pbmdzLCAiaCIpOworbW9kdWxlX3BhcmFtKHByaW50dGltaW5ncywgc2hvcnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwcmludHRpbWluZ3MsICJwcmludCB0aGUgbWVtb3J5IHRpbWluZ3Mgb2YgdGhlIGNhcmQocykiKTsKLU1PRFVMRV9QQVJNKGZvcmNlc2l6ZSwgUE0zX01BWF9CT0FSRF9NT0RVTEVfQVJSQVlfU0hPUlQpOworbW9kdWxlX3BhcmFtKGZvcmNlc2l6ZSwgc2hvcnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZXNpemUsICJmb3JjZSBzcGVjaWZpZWQgbWVtb3J5IHNpemUiKTsKIC8qCiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiUGVybWVkaWEzIFBDSSBib2FyZHMiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwppbmRleCBlNWQwZjkyLi5mZWVjNDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwpAQCAtNTg4LDYgKzU4OCw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAlkZWZhdWx0X3BhciA9IGluZm8tPnBhcjsKIAlkZWZhdWx0X3Bhci0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwKIAkJCXBkZXYtPnJlc291cmNlWzFdLmVuZCAtIHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0ICsxKTsKQEAgLTYzOCw4ICs2MzksNiBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7Ci0KIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAogCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKaW5kZXggOGE4OTNjZS4uZDk4MzFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYwpAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAKIAlpbnQgcmV0LCBpcnE7CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChpcnEgPD0gMCkKKwlpZiAoaXJxIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbigweGIwMTAwMDAwLCAweDEwMDAwLCAiTENEIikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IGFiNzI3ZWEuLjEwZTZiM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0yMDIxLDggKzIwMjEsOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NBVkFHRV9JMkMpCiAJc2F2YWdlZmJfY3JlYXRlX2kyY19idXNzZXMoaW5mbyk7CiAJc2F2YWdlZmJfcHJvYmVfaTJjX2Nvbm5lY3RvcihpbmZvLCAmcGFyLT5lZGlkKTsKLQlrZnJlZShwYXItPmVkaWQpOwogCWZiX2VkaWRfdG9fbW9uc3BlY3MocGFyLT5lZGlkLCAmaW5mby0+bW9uc3BlY3MpOworCWtmcmVlKHBhci0+ZWRpZCk7CiAJZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KGluZm8tPm1vbnNwZWNzLm1vZGVkYiwKIAkJCQkgaW5mby0+bW9uc3BlY3MubW9kZWRiX2xlbiwKIAkJCQkgJmluZm8tPm1vZGVsaXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2J1c2xpYi5jIGIvZHJpdmVycy92aWRlby9zYnVzbGliLmMKaW5kZXggYTRkN2NjNS4uMzRlZjg1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYnVzbGliLmMKKysrIGIvZHJpdmVycy92aWRlby9zYnVzbGliLmMKQEAgLTU4LDYgKzU4LDggQEAKIAkvKiBUbyBzdG9wIHRoZSBzd2FwcGVyIGZyb20gZXZlbiBjb25zaWRlcmluZyB0aGVzZSBwYWdlcyAqLwogCXZtYS0+dm1fZmxhZ3MgfD0gKFZNX0lPIHwgVk1fUkVTRVJWRUQpOwogCQorCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKIAkvKiBFYWNoIHBhZ2UsIHNlZSB3aGljaCBtYXAgYXBwbGllcyAqLwogCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBzaXplOyApewogCQltYXBfc2l6ZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKaW5kZXggOTk5MjFkZi4uOGMxYThiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zc3RmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYwpAQCAtMzIsNyArMzIsNyBAQAogCiAtVE9ETzogYXQgb25lIHRpbWUgb3IgYW5vdGhlciB0ZXN0IHRoYXQgdGhlIG1vZGUgaXMgYWNjZXB0YWJsZSBieSB0aGUgbW9uaXRvcgogLUFTSzogQ2FuIEkgY2hvb3NlIGRpZmZlcmVudCBvcmRlcmluZyBmb3IgdGhlIGNvbG9yIGJpdGZpZWxkcyAocmdiYSBhcmdiIC4uLikKLSAgICAgIHdpY2ggb25lIHNob3VsZCBpIHVzZSA/IGlzIHRoZXJlIGFueSBwcmVmZXJyZWQgb25lID8gSXQgc2VlbXMgQVJHQiBpcworICAgICAgd2hpY2ggb25lIHNob3VsZCBpIHVzZSA/IGlzIHRoZXJlIGFueSBwcmVmZXJyZWQgb25lID8gSXQgc2VlbXMgQVJHQiBpcwogICAgICAgdGhlIG9uZSAuLi4KIC1UT0RPOiBpbiAgc2V0X3ZhciBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGltaW5ncyAoaHN5bmMgdnN5bmMpLi4uCiAtVE9ETzogY2hlY2sgYW5kIHJlY2hlY2sgdGhlIHVzZSBvZiBzc3Rfd2FpdF9pZGxlIDogd2UgZG9uJ3QgZmx1c2ggdGhlIGZpZm8gdmlhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jIGIvZHJpdmVycy92aWRlby90ZGZ4ZmIuYwppbmRleCAzZTdiYWY0Li41ZTUzMjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKQEAgLTc4NiwyOCArNzg2LDMyIEBACiAJaWYgKHJlZ25vID49IGluZm8tPmNtYXAubGVuIHx8IHJlZ25vID4gMjU1KSByZXR1cm4gMTsKICAgIAogCXN3aXRjaCAoaW5mby0+Zml4LnZpc3VhbCkgewotCQljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKLQkJCXJnYmNvbCA9KCgodTMyKXJlZCAgICYgMHhmZjAwKSA8PCA4KSB8Ci0JCQkJKCgodTMyKWdyZWVuICYgMHhmZjAwKSA8PCAwKSB8Ci0JCQkJKCgodTMyKWJsdWUgICYgMHhmZjAwKSA+PiA4KTsKLQkJCWRvX3NldHBhbGVudHJ5KHBhciwgcmVnbm8sIHJnYmNvbCk7Ci0JCQlicmVhazsKLQkJLyogVHJ1ZWNvbG9yIGhhcyBubyBoYXJkd2FyZSBjb2xvciBwYWxldHRlcy4gKi8KLQkJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgorCWNhc2UgRkJfVklTVUFMX1BTRVVET0NPTE9SOgorCQlyZ2Jjb2wgPSgoKHUzMilyZWQgICAmIDB4ZmYwMCkgPDwgOCkgfAorCQkJKCgodTMyKWdyZWVuICYgMHhmZjAwKSA8PCAwKSB8CisJCQkoKCh1MzIpYmx1ZSAgJiAweGZmMDApID4+IDgpOworCQlkb19zZXRwYWxlbnRyeShwYXIsIHJlZ25vLCByZ2Jjb2wpOworCQlicmVhazsKKwkvKiBUcnVlY29sb3IgaGFzIG5vIGhhcmR3YXJlIGNvbG9yIHBhbGV0dGVzLiAqLworCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKKwkJaWYgKHJlZ25vIDwgMTYpIHsKIAkJCXJnYmNvbCA9IChDTlZUX1RPSFcoIHJlZCwgaW5mby0+dmFyLnJlZC5sZW5ndGgpIDw8CiAJCQkJICBpbmZvLT52YXIucmVkLm9mZnNldCkgfAotCQkJCSAoQ05WVF9UT0hXKCBncmVlbiwgaW5mby0+dmFyLmdyZWVuLmxlbmd0aCkgPDwKLQkJCQkgIGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKLQkJCQkgKENOVlRfVE9IVyggYmx1ZSwgaW5mby0+dmFyLmJsdWUubGVuZ3RoKSA8PAotCQkJCSAgaW5mby0+dmFyLmJsdWUub2Zmc2V0KSB8Ci0JCQkJIChDTlZUX1RPSFcoIHRyYW5zcCwgaW5mby0+dmFyLnRyYW5zcC5sZW5ndGgpIDw8Ci0JCQkJICBpbmZvLT52YXIudHJhbnNwLm9mZnNldCk7Ci0JCQkJcGFyLT5wYWxldHRlW3JlZ25vXSA9IHJnYmNvbDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJRFBSSU5USygiYmFkIGRlcHRoICV1XG4iLCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOwotCQkJYnJlYWs7CisJCQkJKENOVlRfVE9IVyggZ3JlZW4sIGluZm8tPnZhci5ncmVlbi5sZW5ndGgpIDw8CisJCQkJIGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKKwkJCQkoQ05WVF9UT0hXKCBibHVlLCBpbmZvLT52YXIuYmx1ZS5sZW5ndGgpIDw8CisJCQkJIGluZm8tPnZhci5ibHVlLm9mZnNldCkgfAorCQkJCShDTlZUX1RPSFcoIHRyYW5zcCwgaW5mby0+dmFyLnRyYW5zcC5sZW5ndGgpIDw8CisJCQkJIGluZm8tPnZhci50cmFuc3Aub2Zmc2V0KTsKKwkJCXBhci0+cGFsZXR0ZVtyZWdub10gPSByZ2Jjb2w7CisJCX0KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUFJJTlRLKCJiYWQgZGVwdGggJXVcbiIsIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCk7CisJCWJyZWFrOwogCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZmYi5jIGIvZHJpdmVycy92aWRlby92ZmIuYwppbmRleCA1MzIwOGNiLi43N2VlZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmZiLmMKQEAgLTQwMSw2ICs0MDEsNyBAQAogc3RhdGljIHZvaWQgdmZiX3BsYXRmb3JtX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCS8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBnb2VzIHRvIHplcm8uCisJZGV2X2VycihkZXZpY2UsICJUaGlzIGRyaXZlciBpcyBicm9rZW4sIHBsZWFzZSBidWcgdGhlIGF1dGhvcnMgc28gdGhleSB3aWxsIGZpeCBpdC5cbiIpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB2ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9LY29uZmlnIGIvZHJpdmVycy93MS9LY29uZmlnCmluZGV4IDRiYWY2MWEuLjVlNjFlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvS2NvbmZpZworKysgYi9kcml2ZXJzL3cxL0tjb25maWcKQEAgLTExLDYzICsxMSw3IEBACiAJICBUaGlzIFcxIHN1cHBvcnQgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgd2lyZS5rby4KIAotY29uZmlnIFcxX01BVFJPWAotCXRyaXN0YXRlICJNYXRyb3ggRzQwMCB0cmFuc3BvcnQgbGF5ZXIgZm9yIDEtd2lyZSIKLQlkZXBlbmRzIG9uIFcxICYmIFBDSQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29tbXVuaWNhdGUgd2l0aCB5b3VyIDEtd2lyZSBkZXZpY2VzCi0JICB1c2luZyBNYXRyb3gncyBHNDAwIEdQSU8gcGlucy4KLQotCSAgVGhpcyBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIG1hdHJveF93MS5rby4KLQotY29uZmlnIFcxX0RTOTQ5MAotCXRyaXN0YXRlICJEUzk0OTBSIHRyYW5zcG9ydCBsYXllciBkcml2ZXIiCi0JZGVwZW5kcyBvbiBXMSAmJiBVU0IKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkcml2ZXIgZm9yIERTOTQ5MFIgVVdCIDwtPiBXMSBicmlkZ2UuCi0KLQkgIFRoaXMgc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBkczk0OTByLmtvLgotCi1jb25maWcgVzFfRFM5NDkwX0JSSURHRQotCXRyaXN0YXRlICJEUzk0OTBSIFVTQiA8LT4gVzEgdHJhbnNwb3J0IGxheWVyIGZvciAxLXdpcmUiCi0JZGVwZW5kcyBvbiBXMV9EUzk0OTAKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbW11bmljYXRlIHdpdGggeW91ciAxLXdpcmUgZGV2aWNlcwotCSAgdXNpbmcgRFM5NDkwUiBVU0IgYnJpZGdlLgotCi0JICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgZHNfdzFfYnJpZGdlLmtvLgotCi1jb25maWcgVzFfVEhFUk0KLQl0cmlzdGF0ZSAiVGhlcm1hbCBmYW1pbHkgaW1wbGVtZW50YXRpb24iCi0JZGVwZW5kcyBvbiBXMQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCAxLXdpcmUgdGhlcm1hbCBzZW5zb3JzIHRvIHlvdQotCSAgd2lyZS4KLQotY29uZmlnIFcxX1NNRU0KLQl0cmlzdGF0ZSAiU2ltcGxlIDY0Yml0IG1lbW9yeSBmYW1pbHkgaW1wbGVtZW50YXRpb24iCi0JZGVwZW5kcyBvbiBXMQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCAxLXdpcmUKLQkgIHNpbXBsZSA2NGJpdCBtZW1vcnkgcm9tKGRzMjQwMS9kczI0MTEvZHMxOTkwKikgdG8geW91IHdpcmUuCi0KLWNvbmZpZyBXMV9EUzI0MzMKLQl0cmlzdGF0ZSAiNGtiIEVFUFJPTSBmYW1pbHkgc3VwcG9ydCAoRFMyNDMzKSIKLQlkZXBlbmRzIG9uIFcxCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSAxLXdpcmUKLQkgIDRrYiBFRVBST00gZmFtaWx5IGRldmljZSAoRFMyNDMzKS4KLQotY29uZmlnIFcxX0RTMjQzM19DUkMKLQlib29sICJQcm90ZWN0IERTMjQzMyBkYXRhIHdpdGggYSBDUkMxNiIKLQlkZXBlbmRzIG9uIFcxX0RTMjQzMwotCXNlbGVjdCBDUkMxNgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gcHJvdGVjdCBEUzI0MzMgZGF0YSB3aXRoIGEgQ1JDMTYuCi0JICBFYWNoIGJsb2NrIGhhcyAzMCBieXRlcyBvZiBkYXRhIGFuZCBhIHR3byBieXRlIENSQzE2LgotCSAgRnVsbCBibG9jayB3cml0ZXMgYXJlIG9ubHkgYWxsb3dlZCBpZiB0aGUgQ1JDIGlzIHZhbGlkLgorc291cmNlIGRyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCitzb3VyY2UgZHJpdmVycy93MS9zbGF2ZXMvS2NvbmZpZwogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL01ha2VmaWxlIGIvZHJpdmVycy93MS9NYWtlZmlsZQppbmRleCAwMWZiNTQzLi4wYzJhYTIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3cxL01ha2VmaWxlCkBAIC0xMywxMyArMTMsNSBAQAogb2JqLSQoQ09ORklHX1cxKQkrPSB3aXJlLm8KIHdpcmUtb2JqcwkJOj0gdzEubyB3MV9pbnQubyB3MV9mYW1pbHkubyB3MV9uZXRsaW5rLm8gdzFfaW8ubwogCi1vYmotJChDT05GSUdfVzFfTUFUUk9YKQkJKz0gbWF0cm94X3cxLm8KLW9iai0kKENPTkZJR19XMV9USEVSTSkJCSs9IHcxX3RoZXJtLm8KLW9iai0kKENPTkZJR19XMV9TTUVNKQkJKz0gdzFfc21lbS5vCitvYmoteQkJCSs9IG1hc3RlcnMvIHNsYXZlcy8KIAotb2JqLSQoQ09ORklHX1cxX0RTOTQ5MCkJCSs9IGRzOTQ5MHIubwotZHM5NDkwci1vYmpzICAgIDo9IGRzY29yZS5vCi0KLW9iai0kKENPTkZJR19XMV9EUzk0OTBfQlJJREdFKQkrPSBkc193MV9icmlkZ2UubwotCi1vYmotJChDT05GSUdfVzFfRFMyNDMzKQkJKz0gdzFfZHMyNDMzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnIGIvZHJpdmVycy93MS9tYXN0ZXJzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiYWQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCkBAIC0wLDAgKzEsNDggQEAKKyMKKyMgMS13aXJlIGJ1cyBtYXN0ZXIgY29uZmlndXJhdGlvbgorIworCittZW51ICIxLXdpcmUgQnVzIE1hc3RlcnMiCisJZGVwZW5kcyBvbiBXMQorCitjb25maWcgVzFfTUFTVEVSX01BVFJPWAorCXRyaXN0YXRlICJNYXRyb3ggRzQwMCB0cmFuc3BvcnQgbGF5ZXIgZm9yIDEtd2lyZSIKKwlkZXBlbmRzIG9uIFcxICYmIFBDSQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29tbXVuaWNhdGUgd2l0aCB5b3VyIDEtd2lyZSBkZXZpY2VzCisJICB1c2luZyBNYXRyb3gncyBHNDAwIEdQSU8gcGlucy4KKworCSAgVGhpcyBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIG1hdHJveF93MS5rby4KKworY29uZmlnIFcxX01BU1RFUl9EUzk0OTAKKwl0cmlzdGF0ZSAiRFM5NDkwUiB0cmFuc3BvcnQgbGF5ZXIgZHJpdmVyIgorCWRlcGVuZHMgb24gVzEgJiYgVVNCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZHJpdmVyIGZvciBEUzk0OTBSIFVXQiA8LT4gVzEgYnJpZGdlLgorCisJICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgZHM5NDkwci5rby4KKworY29uZmlnIFcxX01BU1RFUl9EUzk0OTBfQlJJREdFCisJdHJpc3RhdGUgIkRTOTQ5MFIgVVNCIDwtPiBXMSB0cmFuc3BvcnQgbGF5ZXIgZm9yIDEtd2lyZSIKKwlkZXBlbmRzIG9uIFcxX01BU1RFUl9EUzk0OTAKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbW11bmljYXRlIHdpdGggeW91ciAxLXdpcmUgZGV2aWNlcworCSAgdXNpbmcgRFM5NDkwUiBVU0IgYnJpZGdlLgorCisJICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgZHNfdzFfYnJpZGdlLmtvLgorCitjb25maWcgVzFfTUFTVEVSX0RTMjQ4MgorCXRyaXN0YXRlICJNYXhpbSBEUzI0ODIgSTJDIHRvIDEtV2lyZSBicmlkZ2UiCisJZGVwZW5kcyBvbiBJMkMgJiYgVzEgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBNYXhpbSBEUzI0ODIKKwkgIEkyQyB0byAxLVdpcmUgYnJpZGdlLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBkczI0ODIuCisKK2VuZG1lbnUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL01ha2VmaWxlIGIvZHJpdmVycy93MS9tYXN0ZXJzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmM2M4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorIworIyBNYWtlZmlsZSBmb3IgMS13aXJlIGJ1cyBtYXN0ZXIgZHJpdmVycy4KKyMKKworb2JqLSQoQ09ORklHX1cxX01BU1RFUl9NQVRST1gpCQkrPSBtYXRyb3hfdzEubworCitvYmotJChDT05GSUdfVzFfTUFTVEVSX0RTOTQ5MCkJCSs9IGRzOTQ5MHIubworZHM5NDkwci1vYmpzICAgIDo9IGRzY29yZS5vCisKK29iai0kKENPTkZJR19XMV9NQVNURVJfRFM5NDkwX0JSSURHRSkJKz0gZHNfdzFfYnJpZGdlLm8KKworb2JqLSQoQ09ORklHX1cxX01BU1RFUl9EUzI0ODIpCQkrPSBkczI0ODIubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDgyLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDgyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjYWNkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYwpAQCAtMCwwICsxLDU2NCBAQAorLyoqCisgKiBkczI0ODIuYyAtIHByb3ZpZGVzIGkyYyB0byB3MS1tYXN0ZXIgYnJpZGdlKHMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgIEJlbiBHYXJkbmVyIDxiZ2FyZG5lckB3YWJ0ZWMuY29tPgorICoKKyAqIFRoZSBEUzI0ODIgaXMgYSBzZW5zb3IgY2hpcCBtYWRlIGJ5IERhbGxhcyBTZW1pY29uZHVjdG9yIChNYXhpbSkuCisgKiBJdCBpcyBhIEkyQyB0byAxLXdpcmUgYnJpZGdlLgorICogVGhlcmUgYXJlIHR3byB2YXJpYXRpb25zOiAtMTAwIGFuZCAtODAwLCB3aGljaCBoYXZlIDEgb3IgOCAxLXdpcmUgcG9ydHMuCisgKiBUaGUgY29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIE1BWElNJ3Mgd2Vic2l0ZSBhdDoKKyAqICAgaHR0cDovL3d3dy5tYXhpbS1pYy5jb20vcXVpY2tfdmlldzIuY2ZtL3F2X3BrLzQzODIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCisjaW5jbHVkZSAiLi4vdzEuaCIKKyNpbmNsdWRlICIuLi93MV9pbnQuaCIKKworLyoqCisgKiBBZGRyZXNzIGlzIHNlbGVjdGVkIHVzaW5nIDIgcGlucywgcmVzdWx0aW5nIGluIDQgcG9zc2libGUgYWRkcmVzc2VzLgorICogIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIKKyAqIEhvd2V2ZXIsIHRoZSBjaGlwIGNhbm5vdCBiZSBkZXRlY3RlZCB3aXRob3V0IGRvaW5nIGFuIGkyYyB3cml0ZSwKKyAqIHNvIHVzZSB0aGUgZm9yY2UgbW9kdWxlIHBhcmFtZXRlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHtJMkNfQ0xJRU5UX0VORH07CisKKy8qKgorICogSW5zbW9kIHBhcmFtZXRlcnMKKyAqLworSTJDX0NMSUVOVF9JTlNNT0RfMShkczI0ODIpOworCisvKioKKyAqIFRoZSBEUzI0ODIgcmVnaXN0ZXJzIC0gdGhlcmUgYXJlIDMgcmVnaXN0ZXJzIHRoYXQgYXJlIGFkZHJlc3NlZCBieSBhIHJlYWQKKyAqIHBvaW50ZXIuIFRoZSByZWFkIHBvaW50ZXIgaXMgc2V0IGJ5IHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQuCisgKgorICogVG8gcmVhZCB0aGUgZGF0YSwgaXNzdWUgYSByZWdpc3RlciByZWFkIGZvciBhbnkgYWRkcmVzcworICovCisjZGVmaW5lIERTMjQ4Ml9DTURfUkVTRVQJCTB4RjAJLyogTm8gcGFyYW0gKi8KKyNkZWZpbmUgRFMyNDgyX0NNRF9TRVRfUkVBRF9QVFIJCTB4RTEJLyogUGFyYW06IERTMjQ4Ml9QVFJfQ09ERV94eHggKi8KKyNkZWZpbmUgRFMyNDgyX0NNRF9DSEFOTkVMX1NFTEVDVAkweEMzCS8qIFBhcmFtOiBDaGFubmVsIGJ5dGUgLSBEUzI0ODItODAwIG9ubHkgKi8KKyNkZWZpbmUgRFMyNDgyX0NNRF9XUklURV9DT05GSUcJCTB4RDIJLyogUGFyYW06IENvbmZpZyBieXRlICovCisjZGVmaW5lIERTMjQ4Ml9DTURfMVdJUkVfUkVTRVQJCTB4QjQJLyogUGFyYW06IE5vbmUgKi8KKyNkZWZpbmUgRFMyNDgyX0NNRF8xV0lSRV9TSU5HTEVfQklUCTB4ODcJLyogUGFyYW06IEJpdCBieXRlIChiaXQ3KSAqLworI2RlZmluZSBEUzI0ODJfQ01EXzFXSVJFX1dSSVRFX0JZVEUJMHhBNQkvKiBQYXJhbTogRGF0YSBieXRlICovCisjZGVmaW5lIERTMjQ4Ml9DTURfMVdJUkVfUkVBRF9CWVRFCTB4OTYJLyogUGFyYW06IE5vbmUgKi8KKy8qIE5vdGUgdG8gcmVhZCB0aGUgYnl0ZSwgU2V0IHRoZSBSZWFkUHRyIHRvIERhdGEgdGhlbiByZWFkIChhbnkgYWRkcikgKi8KKyNkZWZpbmUgRFMyNDgyX0NNRF8xV0lSRV9UUklQTEVUCTB4NzgJLyogUGFyYW06IERpciBieXRlIChiaXQ3KSAqLworCisvKiBWYWx1ZXMgZm9yIERTMjQ4Ml9DTURfU0VUX1JFQURfUFRSICovCisjZGVmaW5lIERTMjQ4Ml9QVFJfQ09ERV9TVEFUVVMJCTB4RjAKKyNkZWZpbmUgRFMyNDgyX1BUUl9DT0RFX0RBVEEJCTB4RTEKKyNkZWZpbmUgRFMyNDgyX1BUUl9DT0RFX0NIQU5ORUwJCTB4RDIJLyogRFMyNDgyLTgwMCBvbmx5ICovCisjZGVmaW5lIERTMjQ4Ml9QVFJfQ09ERV9DT05GSUcJCTB4QzMKKworLyoqCisgKiBDb25maWd1cmUgUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCisgKiBUaGUgdG9wIDQgYml0cyBhbHdheXMgcmVhZCAwLgorICogVG8gd3JpdGUsIHRoZSB0b3AgbmliYmxlIG11c3QgYmUgdGhlIDEncyBjb21wbC4gb2YgdGhlIGxvdyBuaWJibGUuCisgKi8KKyNkZWZpbmUgRFMyNDgyX1JFR19DRkdfMVdTCQkweDA4CisjZGVmaW5lIERTMjQ4Ml9SRUdfQ0ZHX1NQVQkJMHgwNAorI2RlZmluZSBEUzI0ODJfUkVHX0NGR19QUE0JCTB4MDIKKyNkZWZpbmUgRFMyNDgyX1JFR19DRkdfQVBVCQkweDAxCisKKworLyoqCisgKiBXcml0ZSBhbmQgdmVyaWZ5IGNvZGVzIGZvciB0aGUgQ0hBTk5FTF9TRUxFQ1QgY29tbWFuZCAoRFMyNDgyLTgwMCBvbmx5KS4KKyAqIFRvIHNldCB0aGUgY2hhbm5lbCwgd3JpdGUgdGhlIHZhbHVlIGF0IHRoZSBpbmRleCBvZiB0aGUgY2hhbm5lbC4KKyAqIFJlYWQgYW5kIGNvbXBhcmUgYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSB0byB2ZXJpZnkgdGhlIGNoYW5nZS4KKyAqLworc3RhdGljIGNvbnN0IHU4IGRzMjQ4Ml9jaGFuX3dyWzhdID0KKwl7IDB4RjAsIDB4RTEsIDB4RDIsIDB4QzMsIDB4QjQsIDB4QTUsIDB4OTYsIDB4ODcgfTsKK3N0YXRpYyBjb25zdCB1OCBkczI0ODJfY2hhbl9yZFs4XSA9CisJeyAweEI4LCAweEIxLCAweEFBLCAweEEzLCAweDlDLCAweDk1LCAweDhFLCAweDg3IH07CisKKworLyoqCisgKiBTdGF0dXMgUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zIChyZWFkIG9ubHkpCisgKi8KKyNkZWZpbmUgRFMyNDgyX1JFR19TVFNfRElSCQkweDgwCisjZGVmaW5lIERTMjQ4Ml9SRUdfU1RTX1RTQgkJMHg0MAorI2RlZmluZSBEUzI0ODJfUkVHX1NUU19TQlIJCTB4MjAKKyNkZWZpbmUgRFMyNDgyX1JFR19TVFNfUlNUCQkweDEwCisjZGVmaW5lIERTMjQ4Ml9SRUdfU1RTX0xMCQkweDA4CisjZGVmaW5lIERTMjQ4Ml9SRUdfU1RTX1NECQkweDA0CisjZGVmaW5lIERTMjQ4Ml9SRUdfU1RTX1BQRAkJMHgwMgorI2RlZmluZSBEUzI0ODJfUkVHX1NUU18xV0IJCTB4MDEKKworCitzdGF0aWMgaW50IGRzMjQ4Ml9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBkczI0ODJfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKTsKK3N0YXRpYyBpbnQgZHMyNDgyX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CisKKworLyoqCisgKiBEcml2ZXIgZGF0YSAoY29tbW9uIHRvIGFsbCBjbGllbnRzKQorICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHMyNDgyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiZHMyNDgyIiwKKwl9LAorCS5hdHRhY2hfYWRhcHRlcgk9IGRzMjQ4Ml9hdHRhY2hfYWRhcHRlciwKKwkuZGV0YWNoX2NsaWVudAk9IGRzMjQ4Ml9kZXRhY2hfY2xpZW50LAorfTsKKworLyoKKyAqIENsaWVudCBkYXRhIChlYWNoIGNsaWVudCBnZXRzIGl0cyBvd24pCisgKi8KKworc3RydWN0IGRzMjQ4Ml9kYXRhOworCitzdHJ1Y3QgZHMyNDgyX3cxX2NoYW4geworCXN0cnVjdCBkczI0ODJfZGF0YQkqcGRldjsKKwl1OAkJCWNoYW5uZWw7CisJc3RydWN0IHcxX2J1c19tYXN0ZXIJdzFfYm07Cit9OworCitzdHJ1Y3QgZHMyNDgyX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50CWNsaWVudDsKKwlzdHJ1Y3Qgc2VtYXBob3JlCWFjY2Vzc19sb2NrOworCisJLyogMS13aXJlIGludGVyZmFjZShzKSAqLworCWludAkJCXcxX2NvdW50OwkvKiAxIG9yIDggKi8KKwlzdHJ1Y3QgZHMyNDgyX3cxX2NoYW4JdzFfY2hbOF07CisKKwkvKiBwZXItZGV2aWNlIHZhbHVlcyAqLworCXU4CQkJY2hhbm5lbDsKKwl1OAkJCXJlYWRfcHJ0OwkvKiBzZWUgRFMyNDgyX1BUUl9DT0RFX3h4eCAqLworCXU4CQkJcmVnX2NvbmZpZzsKK307CisKKworLyoqCisgKiBTZXRzIHRoZSByZWFkIHBvaW50ZXIuCisgKiBAcGFyYW0gcGRldgkJVGhlIGRzMjQ4MiBjbGllbnQgcG9pbnRlcgorICogQHBhcmFtIHJlYWRfcHRyCXNlZSBEUzI0ODJfUFRSX0NPREVfeHh4IGFib3ZlCisgKiBAcmV0dXJuIC0xIG9uIGZhaWx1cmUsIDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW5saW5lIGludCBkczI0ODJfc2VsZWN0X3JlZ2lzdGVyKHN0cnVjdCBkczI0ODJfZGF0YSAqcGRldiwgdTggcmVhZF9wdHIpCit7CisJaWYgKHBkZXYtPnJlYWRfcHJ0ICE9IHJlYWRfcHRyKSB7CisJCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKCZwZGV2LT5jbGllbnQsCisJCQkJCSAgICAgIERTMjQ4Ml9DTURfU0VUX1JFQURfUFRSLAorCQkJCQkgICAgICByZWFkX3B0cikgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCXBkZXYtPnJlYWRfcHJ0ID0gcmVhZF9wdHI7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIFNlbmRzIGEgY29tbWFuZCB3aXRob3V0IGEgcGFyYW1ldGVyCisgKiBAcGFyYW0gcGRldglUaGUgZHMyNDgyIGNsaWVudCBwb2ludGVyCisgKiBAcGFyYW0gY21kCURTMjQ4Ml9DTURfUkVTRVQsCisgKgkJRFMyNDgyX0NNRF8xV0lSRV9SRVNFVCwKKyAqCQlEUzI0ODJfQ01EXzFXSVJFX1JFQURfQllURQorICogQHJldHVybiAtMSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGlubGluZSBpbnQgZHMyNDgyX3NlbmRfY21kKHN0cnVjdCBkczI0ODJfZGF0YSAqcGRldiwgdTggY21kKQoreworCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZSgmcGRldi0+Y2xpZW50LCBjbWQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcGRldi0+cmVhZF9wcnQgPSBEUzI0ODJfUFRSX0NPREVfU1RBVFVTOworCXJldHVybiAwOworfQorCisvKioKKyAqIFNlbmRzIGEgY29tbWFuZCB3aXRoIGEgcGFyYW1ldGVyCisgKiBAcGFyYW0gcGRldglUaGUgZHMyNDgyIGNsaWVudCBwb2ludGVyCisgKiBAcGFyYW0gY21kCURTMjQ4Ml9DTURfV1JJVEVfQ09ORklHLAorICoJCURTMjQ4Ml9DTURfMVdJUkVfU0lOR0xFX0JJVCwKKyAqCQlEUzI0ODJfQ01EXzFXSVJFX1dSSVRFX0JZVEUsCisgKgkJRFMyNDgyX0NNRF8xV0lSRV9UUklQTEVUCisgKiBAcGFyYW0gYnl0ZQlUaGUgZGF0YSB0byBzZW5kCisgKiBAcmV0dXJuIC0xIG9uIGZhaWx1cmUsIDAgb24gc3VjY2VzcworICovCitzdGF0aWMgaW5saW5lIGludCBkczI0ODJfc2VuZF9jbWRfZGF0YShzdHJ1Y3QgZHMyNDgyX2RhdGEgKnBkZXYsCisJCQkJICAgICAgIHU4IGNtZCwgdTggYnl0ZSkKK3sKKwlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YSgmcGRldi0+Y2xpZW50LCBjbWQsIGJ5dGUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogYWxsIGNtZHMgbGVhdmUgaW4gU1RBVFVTLCBleGNlcHQgQ09ORklHICovCisJcGRldi0+cmVhZF9wcnQgPSAoY21kICE9IERTMjQ4Ml9DTURfV1JJVEVfQ09ORklHKSA/CisJCQkgRFMyNDgyX1BUUl9DT0RFX1NUQVRVUyA6IERTMjQ4Ml9QVFJfQ09ERV9DT05GSUc7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIDEtV2lyZSBpbnRlcmZhY2UgY29kZQorICovCisKKyNkZWZpbmUgRFMyNDgyX1dBSVRfSURMRV9USU1FT1VUCTEwMAorCisvKioKKyAqIFdhaXRzIHVudGlsIHRoZSAxLXdpcmUgaW50ZXJmYWNlIGlzIGlkbGUgKG5vdCBidXN5KQorICoKKyAqIEBwYXJhbSBwZGV2IFBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEByZXR1cm4gdGhlIGxhc3QgdmFsdWUgcmVhZCBmcm9tIHN0YXR1cyBvciAtMSAoZmFpbHVyZSkKKyAqLworc3RhdGljIGludCBkczI0ODJfd2FpdF8xd2lyZV9pZGxlKHN0cnVjdCBkczI0ODJfZGF0YSAqcGRldikKK3sKKwlpbnQgdGVtcCA9IC0xOworCWludCByZXRyaWVzID0gMDsKKworCWlmICghZHMyNDgyX3NlbGVjdF9yZWdpc3RlcihwZGV2LCBEUzI0ODJfUFRSX0NPREVfU1RBVFVTKSkgeworCQlkbyB7CisJCQl0ZW1wID0gaTJjX3NtYnVzX3JlYWRfYnl0ZSgmcGRldi0+Y2xpZW50KTsKKwkJfSB3aGlsZSAoKHRlbXAgPj0gMCkgJiYgKHRlbXAgJiBEUzI0ODJfUkVHX1NUU18xV0IpICYmCisJCQkgKCsrcmV0cmllcyA+IERTMjQ4Ml9XQUlUX0lETEVfVElNRU9VVCkpOworCX0KKworCWlmIChyZXRyaWVzID4gRFMyNDgyX1dBSVRfSURMRV9USU1FT1VUKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IG9uIGNoYW5uZWwgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcGRldi0+Y2hhbm5lbCk7CisKKwlyZXR1cm4gdGVtcDsKK30KKworLyoqCisgKiBTZWxlY3RzIGEgdzEgY2hhbm5lbC4KKyAqIFRoZSAxLXdpcmUgaW50ZXJmYWNlIG11c3QgYmUgaWRsZSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbSBwZGV2CQlUaGUgZHMyNDgyIGNsaWVudCBwb2ludGVyCisgKiBAcGFyYW0gY2hhbm5lbAkwLTcKKyAqIEByZXR1cm4JCS0xIChmYWlsdXJlKSBvciAwIChzdWNjZXNzKQorICovCitzdGF0aWMgaW50IGRzMjQ4Ml9zZXRfY2hhbm5lbChzdHJ1Y3QgZHMyNDgyX2RhdGEgKnBkZXYsIHU4IGNoYW5uZWwpCit7CisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoJnBkZXYtPmNsaWVudCwgRFMyNDgyX0NNRF9DSEFOTkVMX1NFTEVDVCwKKwkJCQkgICAgICBkczI0ODJfY2hhbl93cltjaGFubmVsXSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlwZGV2LT5yZWFkX3BydCA9IERTMjQ4Ml9QVFJfQ09ERV9DSEFOTkVMOworCXBkZXYtPmNoYW5uZWwgPSAtMTsKKwlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZSgmcGRldi0+Y2xpZW50KSA9PSBkczI0ODJfY2hhbl9yZFtjaGFubmVsXSkgeworCQlwZGV2LT5jaGFubmVsID0gY2hhbm5lbDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworCisvKioKKyAqIFBlcmZvcm1zIHRoZSB0b3VjaC1iaXQgZnVuY3Rpb24sIHdoaWNoIHdyaXRlcyBhIDAgb3IgMSBhbmQgcmVhZHMgdGhlIGxldmVsLgorICoKKyAqIEBwYXJhbSBkYXRhCVRoZSBkczI0ODIgY2hhbm5lbCBwb2ludGVyCisgKiBAcGFyYW0gYml0CVRoZSBsZXZlbCB0byB3cml0ZTogMCBvciBub24temVybworICogQHJldHVybglUaGUgbGV2ZWwgcmVhZDogMCBvciAxCisgKi8KK3N0YXRpYyB1OCBkczI0ODJfdzFfdG91Y2hfYml0KHZvaWQgKmRhdGEsIHU4IGJpdCkKK3sKKwlzdHJ1Y3QgZHMyNDgyX3cxX2NoYW4gKnBjaGFuID0gZGF0YTsKKwlzdHJ1Y3QgZHMyNDgyX2RhdGEgICAgKnBkZXYgPSBwY2hhbi0+cGRldjsKKwlpbnQgc3RhdHVzID0gLTE7CisKKwlkb3duKCZwZGV2LT5hY2Nlc3NfbG9jayk7CisKKwkvKiBTZWxlY3QgdGhlIGNoYW5uZWwgKi8KKwlkczI0ODJfd2FpdF8xd2lyZV9pZGxlKHBkZXYpOworCWlmIChwZGV2LT53MV9jb3VudCA+IDEpCisJCWRzMjQ4Ml9zZXRfY2hhbm5lbChwZGV2LCBwY2hhbi0+Y2hhbm5lbCk7CisKKwkvKiBTZW5kIHRoZSB0b3VjaCBjb21tYW5kLCB3YWl0IHVudGlsIDFXQiA9PSAwLCByZXR1cm4gdGhlIHN0YXR1cyAqLworCWlmICghZHMyNDgyX3NlbmRfY21kX2RhdGEocGRldiwgRFMyNDgyX0NNRF8xV0lSRV9TSU5HTEVfQklULAorCQkJCSAgYml0ID8gMHhGRiA6IDApKQorCQlzdGF0dXMgPSBkczI0ODJfd2FpdF8xd2lyZV9pZGxlKHBkZXYpOworCisJdXAoJnBkZXYtPmFjY2Vzc19sb2NrKTsKKworCXJldHVybiAoc3RhdHVzICYgRFMyNDgyX1JFR19TVFNfU0JSKSA/IDEgOiAwOworfQorCisvKioKKyAqIFBlcmZvcm1zIHRoZSB0cmlwbGV0IGZ1bmN0aW9uLCB3aGljaCByZWFkcyB0d28gYml0cyBhbmQgd3JpdGVzIGEgYml0LgorICogVGhlIGJpdCB3cml0dGVuIGlzIGRldGVybWluZWQgYnkgdGhlIHR3byByZWFkczoKKyAqICAgMDAgPT4gZGJpdCwgMDEgPT4gMCwgMTAgPT4gMQorICoKKyAqIEBwYXJhbSBkYXRhCVRoZSBkczI0ODIgY2hhbm5lbCBwb2ludGVyCisgKiBAcGFyYW0gZGJpdAlUaGUgZGlyZWN0aW9uIHRvIGNob29zZSBpZiBib3RoIGJyYW5jaGVzIGFyZSB2YWxpZAorICogQHJldHVybgliMD1yZWFkMSBiMT1yZWFkMiBiMz1iaXQgd3JpdHRlbgorICovCitzdGF0aWMgdTggZHMyNDgyX3cxX3RyaXBsZXQodm9pZCAqZGF0YSwgdTggZGJpdCkKK3sKKwlzdHJ1Y3QgZHMyNDgyX3cxX2NoYW4gKnBjaGFuID0gZGF0YTsKKwlzdHJ1Y3QgZHMyNDgyX2RhdGEgICAgKnBkZXYgPSBwY2hhbi0+cGRldjsKKwlpbnQgc3RhdHVzID0gKDMgPDwgNSk7CisKKwlkb3duKCZwZGV2LT5hY2Nlc3NfbG9jayk7CisKKwkvKiBTZWxlY3QgdGhlIGNoYW5uZWwgKi8KKwlkczI0ODJfd2FpdF8xd2lyZV9pZGxlKHBkZXYpOworCWlmIChwZGV2LT53MV9jb3VudCA+IDEpCisJCWRzMjQ4Ml9zZXRfY2hhbm5lbChwZGV2LCBwY2hhbi0+Y2hhbm5lbCk7CisKKwkvKiBTZW5kIHRoZSB0cmlwbGV0IGNvbW1hbmQsIHdhaXQgdW50aWwgMVdCID09IDAsIHJldHVybiB0aGUgc3RhdHVzICovCisJaWYgKCFkczI0ODJfc2VuZF9jbWRfZGF0YShwZGV2LCBEUzI0ODJfQ01EXzFXSVJFX1RSSVBMRVQsCisJCQkJICBkYml0ID8gMHhGRiA6IDApKQorCQlzdGF0dXMgPSBkczI0ODJfd2FpdF8xd2lyZV9pZGxlKHBkZXYpOworCisJdXAoJnBkZXYtPmFjY2Vzc19sb2NrKTsKKworCS8qIERlY29kZSB0aGUgc3RhdHVzICovCisJcmV0dXJuIChzdGF0dXMgPj4gNSk7Cit9CisKKy8qKgorICogUGVyZm9ybXMgdGhlIHdyaXRlIGJ5dGUgZnVuY3Rpb24uCisgKgorICogQHBhcmFtIGRhdGEJVGhlIGRzMjQ4MiBjaGFubmVsIHBvaW50ZXIKKyAqIEBwYXJhbSBieXRlCVRoZSB2YWx1ZSB0byB3cml0ZQorICovCitzdGF0aWMgdm9pZCBkczI0ODJfdzFfd3JpdGVfYnl0ZSh2b2lkICpkYXRhLCB1OCBieXRlKQoreworCXN0cnVjdCBkczI0ODJfdzFfY2hhbiAqcGNoYW4gPSBkYXRhOworCXN0cnVjdCBkczI0ODJfZGF0YSAgICAqcGRldiA9IHBjaGFuLT5wZGV2OworCisJZG93bigmcGRldi0+YWNjZXNzX2xvY2spOworCisJLyogU2VsZWN0IHRoZSBjaGFubmVsICovCisJZHMyNDgyX3dhaXRfMXdpcmVfaWRsZShwZGV2KTsKKwlpZiAocGRldi0+dzFfY291bnQgPiAxKQorCQlkczI0ODJfc2V0X2NoYW5uZWwocGRldiwgcGNoYW4tPmNoYW5uZWwpOworCisJLyogU2VuZCB0aGUgd3JpdGUgYnl0ZSBjb21tYW5kICovCisJZHMyNDgyX3NlbmRfY21kX2RhdGEocGRldiwgRFMyNDgyX0NNRF8xV0lSRV9XUklURV9CWVRFLCBieXRlKTsKKworCXVwKCZwZGV2LT5hY2Nlc3NfbG9jayk7Cit9CisKKy8qKgorICogUGVyZm9ybXMgdGhlIHJlYWQgYnl0ZSBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW0gZGF0YQlUaGUgZHMyNDgyIGNoYW5uZWwgcG9pbnRlcgorICogQHJldHVybglUaGUgdmFsdWUgcmVhZAorICovCitzdGF0aWMgdTggZHMyNDgyX3cxX3JlYWRfYnl0ZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBkczI0ODJfdzFfY2hhbiAqcGNoYW4gPSBkYXRhOworCXN0cnVjdCBkczI0ODJfZGF0YSAgICAqcGRldiA9IHBjaGFuLT5wZGV2OworCWludCByZXN1bHQ7CisKKwlkb3duKCZwZGV2LT5hY2Nlc3NfbG9jayk7CisKKwkvKiBTZWxlY3QgdGhlIGNoYW5uZWwgKi8KKwlkczI0ODJfd2FpdF8xd2lyZV9pZGxlKHBkZXYpOworCWlmIChwZGV2LT53MV9jb3VudCA+IDEpCisJCWRzMjQ4Ml9zZXRfY2hhbm5lbChwZGV2LCBwY2hhbi0+Y2hhbm5lbCk7CisKKwkvKiBTZW5kIHRoZSByZWFkIGJ5dGUgY29tbWFuZCAqLworCWRzMjQ4Ml9zZW5kX2NtZChwZGV2LCBEUzI0ODJfQ01EXzFXSVJFX1JFQURfQllURSk7CisKKwkvKiBXYWl0IHVudGlsIDFXQiA9PSAwICovCisJZHMyNDgyX3dhaXRfMXdpcmVfaWRsZShwZGV2KTsKKworCS8qIFNlbGVjdCB0aGUgZGF0YSByZWdpc3RlciAqLworCWRzMjQ4Ml9zZWxlY3RfcmVnaXN0ZXIocGRldiwgRFMyNDgyX1BUUl9DT0RFX0RBVEEpOworCisJLyogUmVhZCB0aGUgZGF0YSBieXRlICovCisJcmVzdWx0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZSgmcGRldi0+Y2xpZW50KTsKKworCXVwKCZwZGV2LT5hY2Nlc3NfbG9jayk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgorICogU2VuZHMgYSByZXNldCBvbiB0aGUgMS13aXJlIGludGVyZmFjZQorICoKKyAqIEBwYXJhbSBkYXRhCVRoZSBkczI0ODIgY2hhbm5lbCBwb2ludGVyCisgKiBAcmV0dXJuCTA9RGV2aWNlIHByZXNlbnQsIDE9Tm8gZGV2aWNlIHByZXNlbnQgb3IgZXJyb3IKKyAqLworc3RhdGljIHU4IGRzMjQ4Ml93MV9yZXNldF9idXModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHMyNDgyX3cxX2NoYW4gKnBjaGFuID0gZGF0YTsKKwlzdHJ1Y3QgZHMyNDgyX2RhdGEgICAgKnBkZXYgPSBwY2hhbi0+cGRldjsKKwlpbnQgZXJyOworCXU4IHJldHZhbCA9IDE7CisKKwlkb3duKCZwZGV2LT5hY2Nlc3NfbG9jayk7CisKKwkvKiBTZWxlY3QgdGhlIGNoYW5uZWwgKi8KKwlkczI0ODJfd2FpdF8xd2lyZV9pZGxlKHBkZXYpOworCWlmIChwZGV2LT53MV9jb3VudCA+IDEpCisJCWRzMjQ4Ml9zZXRfY2hhbm5lbChwZGV2LCBwY2hhbi0+Y2hhbm5lbCk7CisKKwkvKiBTZW5kIHRoZSByZXNldCBjb21tYW5kICovCisJZXJyID0gZHMyNDgyX3NlbmRfY21kKHBkZXYsIERTMjQ4Ml9DTURfMVdJUkVfUkVTRVQpOworCWlmIChlcnIgPj0gMCkgeworCQkvKiBXYWl0IHVudGlsIHRoZSByZXNldCBpcyBjb21wbGV0ZSAqLworCQllcnIgPSBkczI0ODJfd2FpdF8xd2lyZV9pZGxlKHBkZXYpOworCQlyZXR2YWwgPSAhKGVyciAmIERTMjQ4Ml9SRUdfU1RTX1BQRCk7CisKKwkJLyogSWYgdGhlIGNoaXAgZGlkIHJlc2V0IHNpbmNlIGRldGVjdCwgcmUtY29uZmlnIGl0ICovCisJCWlmIChlcnIgJiBEUzI0ODJfUkVHX1NUU19SU1QpCisJCQlkczI0ODJfc2VuZF9jbWRfZGF0YShwZGV2LCBEUzI0ODJfQ01EX1dSSVRFX0NPTkZJRywKKwkJCQkJICAgICAweEYwKTsKKwl9CisKKwl1cCgmcGRldi0+YWNjZXNzX2xvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKioKKyAqIENhbGxlZCB0byBzZWUgaWYgdGhlIGRldmljZSBleGlzdHMgb24gYW4gaTJjIGJ1cy4KKyAqLworc3RhdGljIGludCBkczI0ODJfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgZHMyNDgyX2RldGVjdCk7Cit9CisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZG9lcyBtb3JlIHRoYW4ganVzdCBkZXRlY3Rpb24uIElmIGRldGVjdGlvbgorICogc3VjY2VlZHMsIGl0IGFsc28gcmVnaXN0ZXJzIHRoZSBuZXcgY2hpcC4KKyAqLworc3RhdGljIGludCBkczI0ODJfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQoreworCXN0cnVjdCBkczI0ODJfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAgKm5ld19jbGllbnQ7CisJaW50IGVyciA9IDA7CisJaW50IHRlbXAxOworCWludCBpZHg7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsCisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEgfAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfQllURSkpCisJCWdvdG8gZXhpdDsKKworCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHMyNDgyX2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKKwluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwluZXdfY2xpZW50LT5kcml2ZXIgPSAmZHMyNDgyX2RyaXZlcjsKKwluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKworCS8qIFJlc2V0IHRoZSBkZXZpY2UgKHNldHMgdGhlIHJlYWRfcHRyIHRvIHN0YXR1cykgKi8KKwlpZiAoZHMyNDgyX3NlbmRfY21kKGRhdGEsIERTMjQ4Ml9DTURfUkVTRVQpIDwgMCkgeworCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJEUzI0ODIgcmVzZXQgZmFpbGVkIGF0IDB4JTAyeC5cbiIsCisJCQlhZGRyZXNzKTsKKwkJZ290byBleGl0X2ZyZWU7CisJfQorCisJLyogU2xlZXAgYXQgbGVhc3QgNTI1bnMgdG8gYWxsb3cgdGhlIHJlc2V0IHRvIGNvbXBsZXRlICovCisJbmRlbGF5KDUyNSk7CisKKwkvKiBSZWFkIHRoZSBzdGF0dXMgYnl0ZSAtIG9ubHkgcmVzZXQgYml0IGFuZCBsaW5lIHNob3VsZCBiZSBzZXQgKi8KKwl0ZW1wMSA9IGkyY19zbWJ1c19yZWFkX2J5dGUobmV3X2NsaWVudCk7CisJaWYgKHRlbXAxICE9IChEUzI0ODJfUkVHX1NUU19MTCB8IERTMjQ4Ml9SRUdfU1RTX1JTVCkpIHsKKwkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiRFMyNDgyICgweCUwMngpIHJlc2V0IHN0YXR1cyAiCisJCQkiMHglMDJYIC0gbm90IGEgRFMyNDgyXG4iLCBhZGRyZXNzLCB0ZW1wMSk7CisJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCS8qIERldGVjdCB0aGUgOC1wb3J0IHZlcnNpb24gKi8KKwlkYXRhLT53MV9jb3VudCA9IDE7CisJaWYgKGRzMjQ4Ml9zZXRfY2hhbm5lbChkYXRhLCA3KSA9PSAwKQorCQlkYXRhLT53MV9jb3VudCA9IDg7CisKKwkvKiBTZXQgYWxsIGNvbmZpZyBpdGVtcyB0byAwIChvZmYpICovCisJZHMyNDgyX3NlbmRfY21kX2RhdGEoZGF0YSwgRFMyNDgyX0NNRF9XUklURV9DT05GSUcsIDB4RjApOworCisJLyogV2UgY2FuIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzICovCisJc25wcmludGYobmV3X2NsaWVudC0+bmFtZSwgc2l6ZW9mKG5ld19jbGllbnQtPm5hbWUpLCAiZHMyNDgyLSVkMDAiLAorCQkgZGF0YS0+dzFfY291bnQpOworCisJaW5pdF9NVVRFWCgmZGF0YS0+YWNjZXNzX2xvY2spOworCisJLyogVGVsbCB0aGUgSTJDIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLworCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCS8qIFJlZ2lzdGVyIDEtd2lyZSBpbnRlcmZhY2UocykgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGRhdGEtPncxX2NvdW50OyBpZHgrKykgeworCQlkYXRhLT53MV9jaFtpZHhdLnBkZXYgPSBkYXRhOworCQlkYXRhLT53MV9jaFtpZHhdLmNoYW5uZWwgPSBpZHg7CisKKwkJLyogUG9wdWxhdGUgYWxsIHRoZSB3MSBidXMgbWFzdGVyIHN0dWZmICovCisJCWRhdGEtPncxX2NoW2lkeF0udzFfYm0uZGF0YSAgICAgICA9ICZkYXRhLT53MV9jaFtpZHhdOworCQlkYXRhLT53MV9jaFtpZHhdLncxX2JtLnJlYWRfYnl0ZSAgPSBkczI0ODJfdzFfcmVhZF9ieXRlOworCQlkYXRhLT53MV9jaFtpZHhdLncxX2JtLndyaXRlX2J5dGUgPSBkczI0ODJfdzFfd3JpdGVfYnl0ZTsKKwkJZGF0YS0+dzFfY2hbaWR4XS53MV9ibS50b3VjaF9iaXQgID0gZHMyNDgyX3cxX3RvdWNoX2JpdDsKKwkJZGF0YS0+dzFfY2hbaWR4XS53MV9ibS50cmlwbGV0ICAgID0gZHMyNDgyX3cxX3RyaXBsZXQ7CisJCWRhdGEtPncxX2NoW2lkeF0udzFfYm0ucmVzZXRfYnVzICA9IGRzMjQ4Ml93MV9yZXNldF9idXM7CisKKwkJZXJyID0gdzFfYWRkX21hc3Rlcl9kZXZpY2UoJmRhdGEtPncxX2NoW2lkeF0udzFfYm0pOworCQlpZiAoZXJyKSB7CisJCQlkYXRhLT53MV9jaFtpZHhdLnBkZXYgPSBOVUxMOworCQkJZ290byBleGl0X3cxX3JlbW92ZTsKKwkJfQorCX0KKworCXJldHVybiAwOworCitleGl0X3cxX3JlbW92ZToKKwlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgZGF0YS0+dzFfY291bnQ7IGlkeCsrKSB7CisJCWlmIChkYXRhLT53MV9jaFtpZHhdLnBkZXYgIT0gTlVMTCkKKwkJCXcxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlKCZkYXRhLT53MV9jaFtpZHhdLncxX2JtKTsKKwl9CitleGl0X2ZyZWU6CisJa2ZyZWUoZGF0YSk7CitleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZHMyNDgyX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZHMyNDgyX2RhdGEgICAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBlcnIsIGlkeDsKKworCS8qIFVucmVnaXN0ZXIgdGhlIDEtd2lyZSBicmlkZ2UocykgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGRhdGEtPncxX2NvdW50OyBpZHgrKykgeworCQlpZiAoZGF0YS0+dzFfY2hbaWR4XS5wZGV2ICE9IE5VTEwpCisJCQl3MV9yZW1vdmVfbWFzdGVyX2RldmljZSgmZGF0YS0+dzFfY2hbaWR4XS53MV9ibSk7CisJfQorCisJLyogRGV0YWNoIHRoZSBpMmMgZGV2aWNlICovCisJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJEZXJlZ2lzdHJhdGlvbiBmYWlsZWQsIGNsaWVudCBub3QgZGV0YWNoZWQuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBGcmVlIHRoZSBtZW1vcnkgKi8KKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgc2Vuc29yc19kczI0ODJfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHMyNDgyX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZW5zb3JzX2RzMjQ4Ml9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmRzMjQ4Ml9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJCZW4gR2FyZG5lciA8YmdhcmRuZXJAd2FidGVjLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRFMyNDgyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChzZW5zb3JzX2RzMjQ4Ml9pbml0KTsKK21vZHVsZV9leGl0KHNlbnNvcnNfZHMyNDgyX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9kc193MV9icmlkZ2UuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kc193MV9icmlkZ2UuYwpzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3cxL2RzX3cxX2JyaWRnZS5jCnJlbmFtZSB0byBkcml2ZXJzL3cxL21hc3RlcnMvZHNfdzFfYnJpZGdlLmMKaW5kZXggYTc5ZDE2ZC4uNWQzMDc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9kc193MV9icmlkZ2UuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHNfdzFfYnJpZGdlLmMKQEAgLTIyLDE3ICsyMiwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlICIuLi93MS93MS5oIgotI2luY2x1ZGUgIi4uL3cxL3cxX2ludC5oIgorI2luY2x1ZGUgIi4uL3cxLmgiCisjaW5jbHVkZSAiLi4vdzFfaW50LmgiCiAjaW5jbHVkZSAiZHNjb3JlLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZHNfZGV2aWNlICpkc19kZXY7CiBzdGF0aWMgc3RydWN0IHcxX2J1c19tYXN0ZXIgKmRzX2J1c19tYXN0ZXI7CiAKLXN0YXRpYyB1OCBkczk0OTByX3RvdWNoX2JpdCh1bnNpZ25lZCBsb25nIGRhdGEsIHU4IGJpdCkKK3N0YXRpYyB1OCBkczk0OTByX3RvdWNoX2JpdCh2b2lkICpkYXRhLCB1OCBiaXQpCiB7CiAJdTggcmV0OwotCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHNfZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3QgZHNfZGV2aWNlICpkZXYgPSBkYXRhOwogCiAJaWYgKGRzX3RvdWNoX2JpdChkZXYsIGJpdCwgJnJldCkpCiAJCXJldHVybiAwOwpAQCAtNDAsMjMgKzQwLDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZHM5NDkwcl93cml0ZV9iaXQodW5zaWduZWQgbG9uZyBkYXRhLCB1OCBiaXQpCitzdGF0aWMgdm9pZCBkczk0OTByX3dyaXRlX2JpdCh2b2lkICpkYXRhLCB1OCBiaXQpCiB7Ci0Jc3RydWN0IGRzX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkc19kZXZpY2UgKilkYXRhOworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CiAKIAlkc193cml0ZV9iaXQoZGV2LCBiaXQpOwogfQogCi1zdGF0aWMgdm9pZCBkczk0OTByX3dyaXRlX2J5dGUodW5zaWduZWQgbG9uZyBkYXRhLCB1OCBieXRlKQorc3RhdGljIHZvaWQgZHM5NDkwcl93cml0ZV9ieXRlKHZvaWQgKmRhdGEsIHU4IGJ5dGUpCiB7Ci0Jc3RydWN0IGRzX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkc19kZXZpY2UgKilkYXRhOworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CiAKIAlkc193cml0ZV9ieXRlKGRldiwgYnl0ZSk7CiB9CiAKLXN0YXRpYyB1OCBkczk0OTByX3JlYWRfYml0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB1OCBkczk0OTByX3JlYWRfYml0KHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGRzX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkc19kZXZpY2UgKilkYXRhOworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CiAJaW50IGVycjsKIAl1OCBiaXQgPSAwOwogCkBAIC03MCw5ICs3MCw5IEBACiAJcmV0dXJuIGJpdCAmIDE7CiB9CiAKLXN0YXRpYyB1OCBkczk0OTByX3JlYWRfYnl0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdTggZHM5NDkwcl9yZWFkX2J5dGUodm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgZHNfZGV2aWNlICpkZXYgPSAoc3RydWN0IGRzX2RldmljZSAqKWRhdGE7CisJc3RydWN0IGRzX2RldmljZSAqZGV2ID0gZGF0YTsKIAlpbnQgZXJyOwogCXU4IGJ5dGUgPSAwOwogCkBAIC04MywxNiArODMsMTYgQEAKIAlyZXR1cm4gYnl0ZTsKIH0KIAotc3RhdGljIHZvaWQgZHM5NDkwcl93cml0ZV9ibG9jayh1bnNpZ25lZCBsb25nIGRhdGEsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkczk0OTByX3dyaXRlX2Jsb2NrKHZvaWQgKmRhdGEsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pCiB7Ci0Jc3RydWN0IGRzX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkc19kZXZpY2UgKilkYXRhOworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CiAKIAlkc193cml0ZV9ibG9jayhkZXYsICh1OCAqKWJ1ZiwgbGVuKTsKIH0KIAotc3RhdGljIHU4IGRzOTQ5MHJfcmVhZF9ibG9jayh1bnNpZ25lZCBsb25nIGRhdGEsIHU4ICpidWYsIGludCBsZW4pCitzdGF0aWMgdTggZHM5NDkwcl9yZWFkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICpidWYsIGludCBsZW4pCiB7Ci0Jc3RydWN0IGRzX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkc19kZXZpY2UgKilkYXRhOworCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IGRhdGE7CiAJaW50IGVycjsKIAogCWVyciA9IGRzX3JlYWRfYmxvY2soZGV2LCBidWYsIGxlbik7CkBAIC0xMDIsOSArMTAyLDkgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgdTggZHM5NDkwcl9yZXNldCh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdTggZHM5NDkwcl9yZXNldCh2b2lkICpkYXRhKQogewotCXN0cnVjdCBkc19kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHNfZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3QgZHNfZGV2aWNlICpkZXYgPSBkYXRhOwogCXN0cnVjdCBkc19zdGF0dXMgc3Q7CiAJaW50IGVycjsKIApAQCAtMTM2LDcgKzEzNiw3IEBACiAKIAltZW1zZXQoZHNfYnVzX21hc3RlciwgMCwgc2l6ZW9mKCpkc19idXNfbWFzdGVyKSk7CiAKLQlkc19idXNfbWFzdGVyLT5kYXRhCQk9ICh1bnNpZ25lZCBsb25nKWRzX2RldjsKKwlkc19idXNfbWFzdGVyLT5kYXRhCQk9IGRzX2RldjsKIAlkc19idXNfbWFzdGVyLT50b3VjaF9iaXQJPSAmZHM5NDkwcl90b3VjaF9iaXQ7CiAJZHNfYnVzX21hc3Rlci0+cmVhZF9iaXQJCT0gJmRzOTQ5MHJfcmVhZF9iaXQ7CiAJZHNfYnVzX21hc3Rlci0+d3JpdGVfYml0CT0gJmRzOTQ5MHJfd3JpdGVfYml0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9kc2NvcmUuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kc2NvcmUuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3cxL2RzY29yZS5jCnJlbmFtZSB0byBkcml2ZXJzL3cxL21hc3RlcnMvZHNjb3JlLmMKaW5kZXggYjkxNDYzMC4uMmNmNzc3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9kc2NvcmUuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHNjb3JlLmMKQEAgLTM0MCw3ICszNDAsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAjZW5kaWYKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0zNDgsNyArMzQ4LDcgQEAKIGludCBkc19zZXRfc3BlZWQoc3RydWN0IGRzX2RldmljZSAqZGV2LCBpbnQgc3BlZWQpCiB7CiAJaW50IGVycjsKLQkKKwogCWlmIChzcGVlZCAhPSBTUEVFRF9OT1JNQUwgJiYgc3BlZWQgIT0gU1BFRURfRkxFWElCTEUgJiYgc3BlZWQgIT0gU1BFRURfT1ZFUkRSSVZFKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9kc2NvcmUuaCBiL2RyaXZlcnMvdzEvbWFzdGVycy9kc2NvcmUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy93MS9kc2NvcmUuaApyZW5hbWUgdG8gZHJpdmVycy93MS9tYXN0ZXJzL2RzY29yZS5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hdHJveF93MS5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL21hdHJveF93MS5jCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGRyaXZlcnMvdzEvbWF0cm94X3cxLmMKcmVuYW1lIHRvIGRyaXZlcnMvdzEvbWFzdGVycy9tYXRyb3hfdzEuYwppbmRleCAwYjAzZjhmLi4yNzg4YjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hdHJveF93MS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9tYXRyb3hfdzEuYwpAQCAtMTksOCArMTksOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0zNSw5ICszNSw5IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAotI2luY2x1ZGUgIncxLmgiCi0jaW5jbHVkZSAidzFfaW50LmgiCi0jaW5jbHVkZSAidzFfbG9nLmgiCisjaW5jbHVkZSAiLi4vdzEuaCIKKyNpbmNsdWRlICIuLi93MV9pbnQuaCIKKyNpbmNsdWRlICIuLi93MV9sb2cuaCIKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsKQEAgLTkwLDE1ICs5MCwxNSBAQAogCXN0cnVjdCB3MV9idXNfbWFzdGVyICpidXNfbWFzdGVyOwogfTsKIAotc3RhdGljIHU4IG1hdHJveF93MV9yZWFkX2RkY19iaXQodW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgdm9pZCBtYXRyb3hfdzFfd3JpdGVfZGRjX2JpdCh1bnNpZ25lZCBsb25nLCB1OCk7CitzdGF0aWMgdTggbWF0cm94X3cxX3JlYWRfZGRjX2JpdCh2b2lkICopOworc3RhdGljIHZvaWQgbWF0cm94X3cxX3dyaXRlX2RkY19iaXQodm9pZCAqLCB1OCk7CiAKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBhbmQgd3JpdGUgRERDIERhdGEgYml0LgogICoKICAqIFVzaW5nIHRyaXN0YXRlIHBpbnMsIHNpbmNlIGkgY2FuJ3QgZmluZCBhbnkgb3Blbi1kcmFpbiBwaW4gaW4gd2hvbGUgbW90aGVyYm9hcmQuCiAgKiBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGNvbm5lY3QgdG8gSW50ZWwncyA4MjgwMXh4IElPIGNvbnRyb2xsZXIKLSAqIHNpbmNlIHdlIGRvbid0IGtub3cgbW90aGVyYm9hcmQgc2NoZW1hLCB3aWNoIGhhcyBwcmV0dHkgdW51c2VkKG1heSBiZSBub3QpIEdQSU8uCisgKiBzaW5jZSB3ZSBkb24ndCBrbm93IG1vdGhlcmJvYXJkIHNjaGVtYSwgd2hpY2ggaGFzIHByZXR0eSB1bnVzZWQobWF5IGJlIG5vdCkgR1BJTy4KICAqCiAgKiBJJ3ZlIGhlYXJkIHRoYXQgUElJWCBhbHNvIGhhcyBvcGVuIGRyYWluIHBpbi4KICAqCkBAIC0xMjIsMTAgKzEyMiwxMCBAQAogCXdtYigpOwogfQogCi1zdGF0aWMgdm9pZCBtYXRyb3hfdzFfd3JpdGVfZGRjX2JpdCh1bnNpZ25lZCBsb25nIGRhdGEsIHU4IGJpdCkKK3N0YXRpYyB2b2lkIG1hdHJveF93MV93cml0ZV9kZGNfYml0KHZvaWQgKmRhdGEsIHU4IGJpdCkKIHsKIAl1OCByZXQ7Ci0Jc3RydWN0IG1hdHJveF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbWF0cm94X2RldmljZSAqKSBkYXRhOworCXN0cnVjdCBtYXRyb3hfZGV2aWNlICpkZXYgPSBkYXRhOwogCiAJaWYgKGJpdCkKIAkJYml0ID0gMDsKQEAgLTEzNywxMCArMTM3LDEwIEBACiAJbWF0cm94X3cxX3dyaXRlX3JlZyhkZXYsIE1BVFJPWF9HRVRfREFUQSwgMHgwMCk7CiB9CiAKLXN0YXRpYyB1OCBtYXRyb3hfdzFfcmVhZF9kZGNfYml0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB1OCBtYXRyb3hfdzFfcmVhZF9kZGNfYml0KHZvaWQgKmRhdGEpCiB7CiAJdTggcmV0OwotCXN0cnVjdCBtYXRyb3hfZGV2aWNlICpkZXYgPSAoc3RydWN0IG1hdHJveF9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3QgbWF0cm94X2RldmljZSAqZGV2ID0gZGF0YTsKIAogCXJldCA9IG1hdHJveF93MV9yZWFkX3JlZyhkZXYsIE1BVFJPWF9HRVRfREFUQSk7CiAKQEAgLTE5OCw3ICsxOTgsNyBAQAogCiAJbWF0cm94X3cxX2h3X2luaXQoZGV2KTsKIAotCWRldi0+YnVzX21hc3Rlci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CisJZGV2LT5idXNfbWFzdGVyLT5kYXRhID0gZGV2OwogCWRldi0+YnVzX21hc3Rlci0+cmVhZF9iaXQgPSAmbWF0cm94X3cxX3JlYWRfZGRjX2JpdDsKIAlkZXYtPmJ1c19tYXN0ZXItPndyaXRlX2JpdCA9ICZtYXRyb3hfdzFfd3JpdGVfZGRjX2JpdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9zbGF2ZXMvS2NvbmZpZyBiL2RyaXZlcnMvdzEvc2xhdmVzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlkNGM5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL0tjb25maWcKQEAgLTAsMCArMSwzOCBAQAorIworIyAxLXdpcmUgc2xhdmVzIGNvbmZpZ3VyYXRpb24KKyMKKworbWVudSAiMS13aXJlIFNsYXZlcyIKKwlkZXBlbmRzIG9uIFcxCisKK2NvbmZpZyBXMV9TTEFWRV9USEVSTQorCXRyaXN0YXRlICJUaGVybWFsIGZhbWlseSBpbXBsZW1lbnRhdGlvbiIKKwlkZXBlbmRzIG9uIFcxCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IDEtd2lyZSB0aGVybWFsIHNlbnNvcnMgdG8geW91CisJICB3aXJlLgorCitjb25maWcgVzFfU0xBVkVfU01FTQorCXRyaXN0YXRlICJTaW1wbGUgNjRiaXQgbWVtb3J5IGZhbWlseSBpbXBsZW1lbnRhdGlvbiIKKwlkZXBlbmRzIG9uIFcxCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IDEtd2lyZQorCSAgc2ltcGxlIDY0Yml0IG1lbW9yeSByb20oZHMyNDAxL2RzMjQxMS9kczE5OTAqKSB0byB5b3Ugd2lyZS4KKworY29uZmlnIFcxX1NMQVZFX0RTMjQzMworCXRyaXN0YXRlICI0a2IgRUVQUk9NIGZhbWlseSBzdXBwb3J0IChEUzI0MzMpIgorCWRlcGVuZHMgb24gVzEKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIDEtd2lyZQorCSAgNGtiIEVFUFJPTSBmYW1pbHkgZGV2aWNlIChEUzI0MzMpLgorCitjb25maWcgVzFfU0xBVkVfRFMyNDMzX0NSQworCWJvb2wgIlByb3RlY3QgRFMyNDMzIGRhdGEgd2l0aCBhIENSQzE2IgorCWRlcGVuZHMgb24gVzFfRFMyNDMzCisJc2VsZWN0IENSQzE2CisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBwcm90ZWN0IERTMjQzMyBkYXRhIHdpdGggYSBDUkMxNi4KKwkgIEVhY2ggYmxvY2sgaGFzIDMwIGJ5dGVzIG9mIGRhdGEgYW5kIGEgdHdvIGJ5dGUgQ1JDMTYuCisJICBGdWxsIGJsb2NrIHdyaXRlcyBhcmUgb25seSBhbGxvd2VkIGlmIHRoZSBDUkMgaXMgdmFsaWQuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL01ha2VmaWxlIGIvZHJpdmVycy93MS9zbGF2ZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlMjFlMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBEYWxsYXMncyAxLXdpcmUgc2xhdmVzLgorIworCitpZmVxICgkKENPTkZJR19XMV9TTEFWRV9EUzI0MzNfQ1JDKSwgeSkKK0VYVFJBX0NGTEFHUyArPSAtRENPTkZJR19XMV9GMjNfQ1JDCitlbmRpZgorCitvYmotJChDT05GSUdfVzFfU0xBVkVfVEhFUk0pCSs9IHcxX3RoZXJtLm8KK29iai0kKENPTkZJR19XMV9TTEFWRV9TTUVNKQkrPSB3MV9zbWVtLm8KK29iai0kKENPTkZJR19XMV9TTEFWRV9EUzI0MzMpCSs9IHcxX2RzMjQzMy5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzFfZHMyNDMzLmMgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MzMuYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3cxL3cxX2RzMjQzMy5jCnJlbmFtZSB0byBkcml2ZXJzL3cxL3NsYXZlcy93MV9kczI0MzMuYwppbmRleCAxZTNkOThhLi5mYjExOGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2RzMjQzMy5jCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX2RzMjQzMy5jCkBAIC0yMSwxMCArMjEsMTAgQEAKIAogI2VuZGlmCiAKLSNpbmNsdWRlICJ3MS5oIgotI2luY2x1ZGUgIncxX2lvLmgiCi0jaW5jbHVkZSAidzFfaW50LmgiCi0jaW5jbHVkZSAidzFfZmFtaWx5LmgiCisjaW5jbHVkZSAiLi4vdzEuaCIKKyNpbmNsdWRlICIuLi93MV9pby5oIgorI2luY2x1ZGUgIi4uL3cxX2ludC5oIgorI2luY2x1ZGUgIi4uL3cxX2ZhbWlseS5oIgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJCZW4gR2FyZG5lciA8YmdhcmRuZXJAd2FidGVjLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzFfc21lbS5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfc21lbS5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvdzEvdzFfc21lbS5jCnJlbmFtZSB0byBkcml2ZXJzL3cxL3NsYXZlcy93MV9zbWVtLmMKaW5kZXggZTMyMDlkMC4uYzZkM2JlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9zbWVtLmMKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfc21lbS5jCkBAIC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSAidzEuaCIKLSNpbmNsdWRlICJ3MV9pby5oIgotI2luY2x1ZGUgIncxX2ludC5oIgotI2luY2x1ZGUgIncxX2ZhbWlseS5oIgorI2luY2x1ZGUgIi4uL3cxLmgiCisjaW5jbHVkZSAiLi4vdzFfaW8uaCIKKyNpbmNsdWRlICIuLi93MV9pbnQuaCIKKyNpbmNsdWRlICIuLi93MV9mYW1pbHkuaCIKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8am9obnBvbEAya2EubWlwdC5ydT4iKTsKQEAgLTUxLDcgKzUxLDcgQEAKIAllcnIgPSB3MV9yZWdpc3Rlcl9mYW1pbHkoJncxX3NtZW1fZmFtaWx5XzAxKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCQorCiAJZXJyID0gdzFfcmVnaXN0ZXJfZmFtaWx5KCZ3MV9zbWVtX2ZhbWlseV84MSk7CiAJaWYgKGVycikgewogCQl3MV91bnJlZ2lzdGVyX2ZhbWlseSgmdzFfc21lbV9mYW1pbHlfMDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV90aGVybS5jIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYwpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3cxL3cxX3RoZXJtLmMKcmVuYW1lIHRvIGRyaXZlcnMvdzEvc2xhdmVzL3cxX3RoZXJtLmMKaW5kZXggNDU3N2RmMy4uNTM2ZDE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV90aGVybS5jCisrKyBiL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3RoZXJtLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2luY2x1ZGUgIncxLmgiCi0jaW5jbHVkZSAidzFfaW8uaCIKLSNpbmNsdWRlICJ3MV9pbnQuaCIKLSNpbmNsdWRlICJ3MV9mYW1pbHkuaCIKKyNpbmNsdWRlICIuLi93MS5oIgorI2luY2x1ZGUgIi4uL3cxX2lvLmgiCisjaW5jbHVkZSAiLi4vdzFfaW50LmgiCisjaW5jbHVkZSAiLi4vdzFfZmFtaWx5LmgiCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+Iik7CkBAIC0xMjMsMTIgKzEyMywxMiBAQAogCiAJaWYgKCFyb21bN10pCiAJCXJldHVybiAwOwotCQorCiAJaWYgKHJvbVsxXSA9PSAwKQogCQl0ID0gKChzMzIpcm9tWzBdID4+IDEpKjEwMDA7CiAJZWxzZQogCQl0ID0gMTAwMCooLTEqKHMzMikoMHgxMDAtcm9tWzBdKSA+PiAxKTsKLQkKKwogCXQgLT0gMjUwOwogCWggPSAxMDAwKigoczMyKXJvbVs3XSAtIChzMzIpcm9tWzZdKTsKIAloIC89IChzMzIpcm9tWzddOwpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgOTsgKytpKQogCQljb3VudCArPSBzcHJpbnRmKGJ1ZiArIGNvdW50LCAiJTAyeCAiLCBzbC0+cm9tW2ldKTsKLQkKKwogCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICJ0PSVkXG4iLCB3MV9jb252ZXJ0X3RlbXAocm9tLCBzbC0+ZmFtaWx5LT5maWQpKTsKIG91dDoKIAl1cCgmZGV2LT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxLmMgYi9kcml2ZXJzL3cxL3cxLmMKaW5kZXggMDI0MjA2Yy4uYTY5OGI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MS5jCisrKyBiL2RyaXZlcnMvdzEvdzEuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApAQCAtNTcsOSArNTgsNyBAQAogREVGSU5FX1NQSU5MT0NLKHcxX21sb2NrKTsKIExJU1RfSEVBRCh3MV9tYXN0ZXJzKTsKIAotc3RhdGljIHBpZF90IGNvbnRyb2xfdGhyZWFkOwotc3RhdGljIGludCBjb250cm9sX25lZWRzX2V4aXQ7Ci1zdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKHcxX2NvbnRyb2xfY29tcGxldGUpOworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqdzFfY29udHJvbF90aHJlYWQ7CiAKIHN0YXRpYyBpbnQgdzFfbWFzdGVyX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKQEAgLTE2NCwxMSArMTYzLDEyIEBACiAJLnJlbGVhc2UgPSAmdzFfbWFzdGVyX3JlbGVhc2UKIH07CiAKLXN0cnVjdCBkZXZpY2VfZHJpdmVyIHcxX3NsYXZlX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB3MV9zbGF2ZV9kcml2ZXIgPSB7CiAJLm5hbWUgPSAidzFfc2xhdmVfZHJpdmVyIiwKIAkuYnVzID0gJncxX2J1c190eXBlLAogfTsKIAorI2lmIDAKIHN0cnVjdCBkZXZpY2UgdzFfc2xhdmVfZGV2aWNlID0gewogCS5wYXJlbnQgPSBOVUxMLAogCS5idXMgPSAmdzFfYnVzX3R5cGUsCkBAIC0xNzYsNiArMTc2LDcgQEAKIAkuZHJpdmVyID0gJncxX3NsYXZlX2RyaXZlciwKIAkucmVsZWFzZSA9ICZ3MV9zbGF2ZV9yZWxlYXNlCiB9OworI2VuZGlmICAvKiAgMCAgKi8KIAogc3RhdGljIHNzaXplX3QgdzFfbWFzdGVyX2F0dHJpYnV0ZV9zaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMzU1LDcgKzM1Niw3IEBACiAJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmbWFzdGVyLT5kZXYua29iaiwgJncxX21hc3Rlcl9kZWZhdHRyX2dyb3VwKTsKIH0KIAotdm9pZCB3MV9kZXN0cm95X21hc3Rlcl9hdHRyaWJ1dGVzKHN0cnVjdCB3MV9tYXN0ZXIgKm1hc3RlcikKK3N0YXRpYyB2b2lkIHcxX2Rlc3Ryb3lfbWFzdGVyX2F0dHJpYnV0ZXMoc3RydWN0IHcxX21hc3RlciAqbWFzdGVyKQogewogCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWFzdGVyLT5kZXYua29iaiwgJncxX21hc3Rlcl9kZWZhdHRyX2dyb3VwKTsKIH0KQEAgLTM4NiwxMSArMzg3LDE0IEBACiAJaWYgKGRldi0+ZHJpdmVyICE9ICZ3MV9zbGF2ZV9kcml2ZXIgfHwgIXNsKQogCQlyZXR1cm4gMDsKIAotCWVyciA9IGFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmY3VyX2luZGV4LCBidWZmZXIsIGJ1ZmZlcl9zaXplLCAmY3VyX2xlbiwgIlcxX0ZJRD0lMDJYIiwgc2wtPnJlZ19udW0uZmFtaWx5KTsKKwllcnIgPSBhZGRfdWV2ZW50X3ZhcihlbnZwLCBudW1fZW52cCwgJmN1cl9pbmRleCwgYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCSZjdXJfbGVuLCAiVzFfRklEPSUwMlgiLCBzbC0+cmVnX251bS5mYW1pbHkpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBhZGRfdWV2ZW50X3ZhcihlbnZwLCBudW1fZW52cCwgJmN1cl9pbmRleCwgYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmN1cl9sZW4sICJXMV9TTEFWRV9JRD0lMDI0TFgiLCAodTY0KXNsLT5yZWdfbnVtLmlkKTsKKwllcnIgPSBhZGRfdWV2ZW50X3ZhcihlbnZwLCBudW1fZW52cCwgJmN1cl9pbmRleCwgYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCSZjdXJfbGVuLCAiVzFfU0xBVkVfSUQ9JTAyNExYIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2wtPnJlZ19udW0uaWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTU1Miw3ICs1NTYsNyBAQAogCWtmcmVlKHNsKTsKIH0KIAotc3RhdGljIHN0cnVjdCB3MV9tYXN0ZXIgKncxX3NlYXJjaF9tYXN0ZXIodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHN0cnVjdCB3MV9tYXN0ZXIgKncxX3NlYXJjaF9tYXN0ZXIodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdzFfbWFzdGVyICpkZXY7CiAJaW50IGZvdW5kID0gMDsKQEAgLTU4Myw3ICs1ODcsNyBAQAogCXNwaW5fdW5sb2NrX2JoKCZ3MV9tbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHcxX3NsYXZlX2ZvdW5kKHVuc2lnbmVkIGxvbmcgZGF0YSwgdTY0IHJuKQorc3RhdGljIHZvaWQgdzFfc2xhdmVfZm91bmQodm9pZCAqZGF0YSwgdTY0IHJuKQogewogCWludCBzbGF2ZV9jb3VudDsKIAlzdHJ1Y3QgdzFfc2xhdmUgKnNsOwpAQCAtNTk1LDggKzU5OSw4IEBACiAKIAlkZXYgPSB3MV9zZWFyY2hfbWFzdGVyKGRhdGEpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGZpbmQgdzEgbWFzdGVyIGRldmljZSBmb3IgZGF0YSAlMDhseCwgaXQgaXMgaW1wb3NzaWJsZS5cbiIsCi0JCQkJZGF0YSk7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGZpbmQgdzEgbWFzdGVyIGRldmljZSBmb3IgZGF0YSAlcCwgIgorCQkgICAgICAgIml0IGlzIGltcG9zc2libGUuXG4iLCBkYXRhKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNzEyLDIyICs3MTYsMTYgQEAKIHsKIAlzdHJ1Y3QgdzFfc2xhdmUgKnNsLCAqc2xuOwogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgKm47Ci0JaW50IGVyciwgaGF2ZV90b193YWl0ID0gMDsKKwlpbnQgaGF2ZV90b193YWl0ID0gMDsKIAotCWRhZW1vbml6ZSgidzFfY29udHJvbCIpOwotCWFsbG93X3NpZ25hbChTSUdURVJNKTsKLQotCXdoaWxlICghY29udHJvbF9uZWVkc19leGl0IHx8IGhhdmVfdG9fd2FpdCkgeworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IGhhdmVfdG9fd2FpdCkgewogCQloYXZlX3RvX3dhaXQgPSAwOwogCiAJCXRyeV90b19mcmVlemUoKTsKIAkJbXNsZWVwX2ludGVycnVwdGlibGUodzFfY29udHJvbF90aW1lb3V0ICogMTAwMCk7CiAKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKLQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCBuLCAmdzFfbWFzdGVycywgdzFfbWFzdGVyX2VudHJ5KSB7Ci0JCQlpZiAoIWNvbnRyb2xfbmVlZHNfZXhpdCAmJiAhZGV2LT5mbGFncykKKwkJCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICFkZXYtPmZsYWdzKQogCQkJCWNvbnRpbnVlOwogCQkJLyoKIAkJCSAqIExpdHRsZSByYWNlOiB3ZSBjYW4gY3JlYXRlIHRocmVhZCBidXQgbm90IHNldCB0aGUgZmxhZy4KQEAgLTczOCwyMSArNzM2LDEyIEBACiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCWlmIChjb250cm9sX25lZWRzX2V4aXQpIHsKKwkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGVzdF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpKSB7CiAJCQkJc2V0X2JpdChXMV9NQVNURVJfTkVFRF9FWElULCAmZGV2LT5mbGFncyk7CiAKLQkJCQllcnIgPSBraWxsX3Byb2MoZGV2LT5rcGlkLCBTSUdURVJNLCAxKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwKLQkJCQkJCSAiRmFpbGVkIHRvIHNlbmQgc2lnbmFsIHRvIHcxIGtlcm5lbCB0aHJlYWQgJWQuXG4iLAotCQkJCQkJIGRldi0+a3BpZCk7Ci0JCQl9Ci0KLQkJCWlmICh0ZXN0X2JpdChXMV9NQVNURVJfTkVFRF9FWElULCAmZGV2LT5mbGFncykpIHsKLQkJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmRldl9leGl0ZWQpOwotCQkJCXNwaW5fbG9ja19iaCgmdzFfbWxvY2spOworCQkJCXNwaW5fbG9jaygmdzFfbWxvY2spOwogCQkJCWxpc3RfZGVsKCZkZXYtPncxX21hc3Rlcl9lbnRyeSk7Ci0JCQkJc3Bpbl91bmxvY2tfYmgoJncxX21sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmdzFfbWxvY2spOwogCiAJCQkJZG93bigmZGV2LT5tdXRleCk7CiAJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNsLCBzbG4sICZkZXYtPnNsaXN0LCB3MV9zbGF2ZV9lbnRyeSkgewpAQCAtNzg0LDcgKzc3Myw3IEBACiAJCX0KIAl9CiAKLQljb21wbGV0ZV9hbmRfZXhpdCgmdzFfY29udHJvbF9jb21wbGV0ZSwgMCk7CisJcmV0dXJuIDA7CiB9CiAKIGludCB3MV9wcm9jZXNzKHZvaWQgKmRhdGEpCkBAIC03OTIsMTcgKzc4MSwxMSBAQAogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldiA9IChzdHJ1Y3QgdzFfbWFzdGVyICopIGRhdGE7CiAJc3RydWN0IHcxX3NsYXZlICpzbCwgKnNsbjsKIAotCWRhZW1vbml6ZSgiJXMiLCBkZXYtPm5hbWUpOwotCWFsbG93X3NpZ25hbChTSUdURVJNKTsKLQotCXdoaWxlICghdGVzdF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgIXRlc3RfYml0KFcxX01BU1RFUl9ORUVEX0VYSVQsICZkZXYtPmZsYWdzKSkgewogCQl0cnlfdG9fZnJlZXplKCk7CiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHcxX3RpbWVvdXQgKiAxMDAwKTsKIAotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOwotCi0JCWlmICh0ZXN0X2JpdChXMV9NQVNURVJfTkVFRF9FWElULCAmZGV2LT5mbGFncykpCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdGVzdF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpKQogCQkJYnJlYWs7CiAKIAkJaWYgKCFkZXYtPmluaXRpYWxpemVkKQpAQCAtODM1LDcgKzgxOCw2IEBACiAJfQogCiAJYXRvbWljX2RlYygmZGV2LT5yZWZjbnQpOwotCWNvbXBsZXRlX2FuZF9leGl0KCZkZXYtPmRldl9leGl0ZWQsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NjgsMTEgKzg1MCwxMSBAQAogCQlnb3RvIGVycl9vdXRfbWFzdGVyX3VucmVnaXN0ZXI7CiAJfQogCi0JY29udHJvbF90aHJlYWQgPSBrZXJuZWxfdGhyZWFkKCZ3MV9jb250cm9sLCBOVUxMLCAwKTsKLQlpZiAoY29udHJvbF90aHJlYWQgPCAwKSB7CisJdzFfY29udHJvbF90aHJlYWQgPSBrdGhyZWFkX3J1bih3MV9jb250cm9sLCBOVUxMLCAidzFfY29udHJvbCIpOworCWlmIChJU19FUlIodzFfY29udHJvbF90aHJlYWQpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIodzFfY29udHJvbF90aHJlYWQpOwogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBjcmVhdGUgY29udHJvbCB0aHJlYWQuIGVycj0lZFxuIiwKLQkJCWNvbnRyb2xfdGhyZWFkKTsKLQkJcmV0dmFsID0gY29udHJvbF90aHJlYWQ7CisJCQlyZXR2YWwpOwogCQlnb3RvIGVycl9vdXRfc2xhdmVfdW5yZWdpc3RlcjsKIAl9CiAKQEAgLTg5OCw4ICs4ODAsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmdzFfbWFzdGVycywgdzFfbWFzdGVyX2VudHJ5KQogCQlfX3cxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlKGRldik7CiAKLQljb250cm9sX25lZWRzX2V4aXQgPSAxOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJncxX2NvbnRyb2xfY29tcGxldGUpOworCWt0aHJlYWRfc3RvcCh3MV9jb250cm9sX3RocmVhZCk7CiAKIAlkcml2ZXJfdW5yZWdpc3RlcigmdzFfc2xhdmVfZHJpdmVyKTsKIAlkcml2ZXJfdW5yZWdpc3RlcigmdzFfbWFzdGVyX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxLmggYi9kcml2ZXJzL3cxL3cxLmgKaW5kZXggZDg5MDA3OC4uNTY5ODA1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MS5oCisrKyBiL2RyaXZlcnMvdzEvdzEuaApAQCAtODAsNyArODAsNyBAQAogCXN0cnVjdCBjb21wbGV0aW9uCXJlbGVhc2VkOwogfTsKIAotdHlwZWRlZiB2b2lkICgqIHcxX3NsYXZlX2ZvdW5kX2NhbGxiYWNrKSh1bnNpZ25lZCBsb25nLCB1NjQpOwordHlwZWRlZiB2b2lkICgqIHcxX3NsYXZlX2ZvdW5kX2NhbGxiYWNrKSh2b2lkICosIHU2NCk7CiAKIAogLyoqCkBAIC05MywxNiArOTMsMTYgQEAKIHN0cnVjdCB3MV9idXNfbWFzdGVyCiB7CiAJLyoqIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaW4gYWxsIHRoZSBmdW5jdGlvbnMgYmVsb3cgKi8KLQl1bnNpZ25lZCBsb25nCWRhdGE7CisJdm9pZAkJKmRhdGE7CiAKIAkvKioKIAkgKiBTYW1wbGUgdGhlIGxpbmUgbGV2ZWwKIAkgKiBAcmV0dXJuIHRoZSBsZXZlbCByZWFkICgwIG9yIDEpCiAJICovCi0JdTgJCSgqcmVhZF9iaXQpKHVuc2lnbmVkIGxvbmcpOworCXU4CQkoKnJlYWRfYml0KSh2b2lkICopOwogCiAJLyoqIFNldHMgdGhlIGxpbmUgbGV2ZWwgKi8KLQl2b2lkCQkoKndyaXRlX2JpdCkodW5zaWduZWQgbG9uZywgdTgpOworCXZvaWQJCSgqd3JpdGVfYml0KSh2b2lkICosIHU4KTsKIAogCS8qKgogCSAqIHRvdWNoX2JpdCBpcyB0aGUgbG93ZXN0LWxldmVsIGZ1bmN0aW9uIGZvciBkZXZpY2VzIHRoYXQgcmVhbGx5CkBAIC0xMTEsNDIgKzExMSw0MiBAQAogCSAqIHRvdWNoX2JpdCgxKSA9IHdyaXRlLTEgLyByZWFkIGN5Y2xlCiAJICogQHJldHVybiB0aGUgYml0IHJlYWQgKDAgb3IgMSkKIAkgKi8KLQl1OAkJKCp0b3VjaF9iaXQpKHVuc2lnbmVkIGxvbmcsIHU4KTsKKwl1OAkJKCp0b3VjaF9iaXQpKHZvaWQgKiwgdTgpOwogCiAJLyoqCiAJICogUmVhZHMgYSBieXRlcy4gU2FtZSBhcyA4IHRvdWNoX2JpdCgxKSBjYWxscy4KIAkgKiBAcmV0dXJuIHRoZSBieXRlIHJlYWQKIAkgKi8KLQl1OAkJKCpyZWFkX2J5dGUpKHVuc2lnbmVkIGxvbmcpOworCXU4CQkoKnJlYWRfYnl0ZSkodm9pZCAqKTsKIAogCS8qKgogCSAqIFdyaXRlcyBhIGJ5dGUuIFNhbWUgYXMgOCB0b3VjaF9iaXQoeCkgY2FsbHMuCiAJICovCi0Jdm9pZAkJKCp3cml0ZV9ieXRlKSh1bnNpZ25lZCBsb25nLCB1OCk7CisJdm9pZAkJKCp3cml0ZV9ieXRlKSh2b2lkICosIHU4KTsKIAogCS8qKgogCSAqIFNhbWUgYXMgYSBzZXJpZXMgb2YgcmVhZF9ieXRlKCkgY2FsbHMKIAkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZAogCSAqLwotCXU4CQkoKnJlYWRfYmxvY2spKHVuc2lnbmVkIGxvbmcsIHU4ICosIGludCk7CisJdTgJCSgqcmVhZF9ibG9jaykodm9pZCAqLCB1OCAqLCBpbnQpOwogCiAJLyoqIFNhbWUgYXMgYSBzZXJpZXMgb2Ygd3JpdGVfYnl0ZSgpIGNhbGxzICovCi0Jdm9pZAkJKCp3cml0ZV9ibG9jaykodW5zaWduZWQgbG9uZywgY29uc3QgdTggKiwgaW50KTsKKwl2b2lkCQkoKndyaXRlX2Jsb2NrKSh2b2lkICosIGNvbnN0IHU4ICosIGludCk7CiAKIAkvKioKIAkgKiBDb21iaW5lcyB0d28gcmVhZHMgYW5kIGEgc21hcnQgd3JpdGUgZm9yIFJPTSBzZWFyY2hlcwogCSAqIEByZXR1cm4gYml0MD1JZCBiaXQxPWNvbXBfaWQgYml0Mj1kaXJfdGFrZW4KIAkgKi8KLQl1OAkJKCp0cmlwbGV0KSh1bnNpZ25lZCBsb25nLCB1OCk7CisJdTgJCSgqdHJpcGxldCkodm9pZCAqLCB1OCk7CiAKIAkvKioKIAkgKiBsb25nIHdyaXRlLTAgd2l0aCBhIHJlYWQgZm9yIHRoZSBwcmVzZW5jZSBwdWxzZSBkZXRlY3Rpb24KIAkgKiBAcmV0dXJuIC0xPUVycm9yLCAwPURldmljZSBwcmVzZW50LCAxPU5vIGRldmljZSBwcmVzZW50CiAJICovCi0JdTgJCSgqcmVzZXRfYnVzKSh1bnNpZ25lZCBsb25nKTsKKwl1OAkJKCpyZXNldF9idXMpKHZvaWQgKik7CiAKIAkvKiogUmVhbGx5IG5pY2UgaGFyZHdhcmUgY2FuIGhhbmRsZXMgdGhlIFJPTSBzZWFyY2hlcyAqLwotCXZvaWQJCSgqc2VhcmNoKSh1bnNpZ25lZCBsb25nLCB3MV9zbGF2ZV9mb3VuZF9jYWxsYmFjayk7CisJdm9pZAkJKCpzZWFyY2gpKHZvaWQgKiwgdzFfc2xhdmVfZm91bmRfY2FsbGJhY2spOwogfTsKIAogI2RlZmluZSBXMV9NQVNURVJfTkVFRF9FWElUCQkwCkBAIC0xNzIsMTIgKzE3MiwxMSBAQAogCiAJbG9uZwkJCWZsYWdzOwogCi0JcGlkX3QJCQlrcGlkOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkOwogCXN0cnVjdCBzZW1hcGhvcmUJbXV0ZXg7CiAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlcgkqZHJpdmVyOwogCXN0cnVjdCBkZXZpY2UJCWRldjsKLQlzdHJ1Y3QgY29tcGxldGlvbglkZXZfZXhpdGVkOwogCiAJc3RydWN0IHcxX2J1c19tYXN0ZXIJKmJ1c19tYXN0ZXI7CiAKQEAgLTIwMyw2ICsyMDIsMTYgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHcxX21hc3RlciwgZGV2KTsKIH0KIAorZXh0ZXJuIGludCB3MV9tYXhfc2xhdmVfY291bnQ7CitleHRlcm4gaW50IHcxX21heF9zbGF2ZV90dGw7CitleHRlcm4gc3BpbmxvY2tfdCB3MV9tbG9jazsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHcxX21hc3RlcnM7CitleHRlcm4gc3RydWN0IGRldmljZV9kcml2ZXIgdzFfbWFzdGVyX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlIHcxX21hc3Rlcl9kZXZpY2U7CisKK2ludCB3MV9wcm9jZXNzKHZvaWQgKmRhdGEpOwordm9pZCB3MV9yZWNvbm5lY3Rfc2xhdmVzKHN0cnVjdCB3MV9mYW1pbHkgKmYpOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX19XMV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jIGIvZHJpdmVycy93MS93MV9mYW1pbHkuYwppbmRleCA5ZTI5M2UxLi4wZTMyYzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ZhbWlseS5jCisrKyBiL2RyaXZlcnMvdzEvdzFfZmFtaWx5LmMKQEAgLTI1LDEwICsyNSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlICJ3MV9mYW1pbHkuaCIKKyNpbmNsdWRlICJ3MS5oIgogCiBERUZJTkVfU1BJTkxPQ0sodzFfZmxvY2spOwogc3RhdGljIExJU1RfSEVBRCh3MV9mYW1pbGllcyk7Ci1leHRlcm4gdm9pZCB3MV9yZWNvbm5lY3Rfc2xhdmVzKHN0cnVjdCB3MV9mYW1pbHkgKmYpOwogCiBpbnQgdzFfcmVnaXN0ZXJfZmFtaWx5KHN0cnVjdCB3MV9mYW1pbHkgKm5ld2YpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2ludC5jIGIvZHJpdmVycy93MS93MV9pbnQuYwppbmRleCBjM2Y2N2VhLi42ODU2NWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxX2ludC5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW50LmMKQEAgLTIyLDIzICsyMiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgIncxLmgiCiAjaW5jbHVkZSAidzFfbG9nLmgiCiAjaW5jbHVkZSAidzFfbmV0bGluay5oIgorI2luY2x1ZGUgIncxX2ludC5oIgogCiBzdGF0aWMgdTMyIHcxX2lkcyA9IDE7CiAKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB3MV9tYXN0ZXJfZHJpdmVyOwotZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSB3MV9idXNfdHlwZTsKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlIHcxX21hc3Rlcl9kZXZpY2U7Ci1leHRlcm4gaW50IHcxX21heF9zbGF2ZV9jb3VudDsKLWV4dGVybiBpbnQgdzFfbWF4X3NsYXZlX3R0bDsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHcxX21hc3RlcnM7Ci1leHRlcm4gc3BpbmxvY2tfdCB3MV9tbG9jazsKLQotZXh0ZXJuIGludCB3MV9wcm9jZXNzKHZvaWQgKik7Ci0KIHN0YXRpYyBzdHJ1Y3QgdzFfbWFzdGVyICogdzFfYWxsb2NfZGV2KHUzMiBpZCwgaW50IHNsYXZlX2NvdW50LCBpbnQgc2xhdmVfdHRsLAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCkBAIC02NSw3ICs1Nyw2IEBACiAJZGV2LT5tYXhfc2xhdmVfY291bnQJPSBzbGF2ZV9jb3VudDsKIAlkZXYtPnNsYXZlX2NvdW50CT0gMDsKIAlkZXYtPmF0dGVtcHRzCQk9IDA7Ci0JZGV2LT5rcGlkCQk9IC0xOwogCWRldi0+aW5pdGlhbGl6ZWQJPSAwOwogCWRldi0+aWQJCQk9IGlkOwogCWRldi0+c2xhdmVfdHRsCQk9IHNsYXZlX3R0bDsKQEAgLTc2LDggKzY3LDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5zbGlzdCk7CiAJaW5pdF9NVVRFWCgmZGV2LT5tdXRleCk7CiAKLQlpbml0X2NvbXBsZXRpb24oJmRldi0+ZGV2X2V4aXRlZCk7Ci0KIAltZW1jcHkoJmRldi0+ZGV2LCBkZXZpY2UsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CiAJc25wcmludGYoZGV2LT5kZXYuYnVzX2lkLCBzaXplb2YoZGV2LT5kZXYuYnVzX2lkKSwKIAkJICAidzFfYnVzX21hc3RlciV1IiwgZGV2LT5pZCk7CkBAIC0xMDMsNyArOTIsNyBAQAogCXJldHVybiBkZXY7CiB9CiAKLXZvaWQgdzFfZnJlZV9kZXYoc3RydWN0IHcxX21hc3RlciAqZGV2KQorc3RhdGljIHZvaWQgdzFfZnJlZV9kZXYoc3RydWN0IHcxX21hc3RlciAqZGV2KQogewogCWRldmljZV91bnJlZ2lzdGVyKCZkZXYtPmRldik7CiB9CkBAIC0xMjUsMTIgKzExNCwxMiBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldi0+a3BpZCA9IGtlcm5lbF90aHJlYWQoJncxX3Byb2Nlc3MsIGRldiwgMCk7Ci0JaWYgKGRldi0+a3BpZCA8IDApIHsKKwlkZXYtPnRocmVhZCA9IGt0aHJlYWRfcnVuKCZ3MV9wcm9jZXNzLCBkZXYsICIlcyIsIGRldi0+bmFtZSk7CisJaWYgKElTX0VSUihkZXYtPnRocmVhZCkpIHsKKwkJcmV0dmFsID0gUFRSX0VSUihkZXYtPnRocmVhZCk7CiAJCWRldl9lcnIoJmRldi0+ZGV2LAogCQkJICJGYWlsZWQgdG8gY3JlYXRlIG5ldyBrZXJuZWwgdGhyZWFkLiBlcnI9JWRcbiIsCi0JCQkgZGV2LT5rcGlkKTsKLQkJcmV0dmFsID0gZGV2LT5rcGlkOworCQkJIHJldHZhbCk7CiAJCWdvdG8gZXJyX291dF9mcmVlX2RldjsKIAl9CiAKQEAgLTE0NywyMCArMTM2LDE0IEBACiAJc3Bpbl91bmxvY2soJncxX21sb2NrKTsKIAogCW1zZy5pZC5tc3QuaWQgPSBkZXYtPmlkOwotCW1zZy5pZC5tc3QucGlkID0gZGV2LT5rcGlkOworCW1zZy5pZC5tc3QucGlkID0gZGV2LT50aHJlYWQtPnBpZDsKIAltc2cudHlwZSA9IFcxX01BU1RFUl9BREQ7CiAJdzFfbmV0bGlua19zZW5kKGRldiwgJm1zZyk7CiAKIAlyZXR1cm4gMDsKIAogZXJyX291dF9raWxsX3RocmVhZDoKLQlzZXRfYml0KFcxX01BU1RFUl9ORUVEX0VYSVQsICZkZXYtPmZsYWdzKTsKLQlpZiAoa2lsbF9wcm9jKGRldi0+a3BpZCwgU0lHVEVSTSwgMSkpCi0JCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJICJGYWlsZWQgdG8gc2VuZCBzaWduYWwgdG8gdzEga2VybmVsIHRocmVhZCAlZC5cbiIsCi0JCQkgZGV2LT5rcGlkKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmRldl9leGl0ZWQpOwotCisJa3RocmVhZF9zdG9wKGRldi0+dGhyZWFkKTsKIGVycl9vdXRfZnJlZV9kZXY6CiAJdzFfZnJlZV9kZXYoZGV2KTsKIApAQCAtMTY5LDE4ICsxNTIsMTQgQEAKIAogdm9pZCBfX3cxX3JlbW92ZV9tYXN0ZXJfZGV2aWNlKHN0cnVjdCB3MV9tYXN0ZXIgKmRldikKIHsKLQlpbnQgZXJyOwogCXN0cnVjdCB3MV9uZXRsaW5rX21zZyBtc2c7CisJcGlkX3QgcGlkID0gZGV2LT50aHJlYWQtPnBpZDsKIAogCXNldF9iaXQoVzFfTUFTVEVSX05FRURfRVhJVCwgJmRldi0+ZmxhZ3MpOwotCWVyciA9IGtpbGxfcHJvYyhkZXYtPmtwaWQsIFNJR1RFUk0sIDEpOwotCWlmIChlcnIpCi0JCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJICIlczogRmFpbGVkIHRvIHNlbmQgc2lnbmFsIHRvIHcxIGtlcm5lbCB0aHJlYWQgJWQuXG4iLAotCQkJIF9fZnVuY19fLCBkZXYtPmtwaWQpOworCWt0aHJlYWRfc3RvcChkZXYtPnRocmVhZCk7CiAKIAl3aGlsZSAoYXRvbWljX3JlYWQoJmRldi0+cmVmY250KSkgewotCQlkZXZfZGJnKCZkZXYtPmRldiwgIldhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlOiByZWZjbnQ9JWQuXG4iLAorCQlkZXZfaW5mbygmZGV2LT5kZXYsICJXYWl0aW5nIGZvciAlcyB0byBiZWNvbWUgZnJlZTogcmVmY250PSVkLlxuIiwKIAkJCQlkZXYtPm5hbWUsIGF0b21pY19yZWFkKCZkZXYtPnJlZmNudCkpOwogCiAJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgxMDAwKSkKQEAgLTE4OCw3ICsxNjcsNyBAQAogCX0KIAogCW1zZy5pZC5tc3QuaWQgPSBkZXYtPmlkOwotCW1zZy5pZC5tc3QucGlkID0gZGV2LT5rcGlkOworCW1zZy5pZC5tc3QucGlkID0gcGlkOwogCW1zZy50eXBlID0gVzFfTUFTVEVSX1JFTU9WRTsKIAl3MV9uZXRsaW5rX3NlbmQoZGV2LCAmbXNnKTsKIApAQCAtMjE3LDUgKzE5NiwzIEBACiAKIEVYUE9SVF9TWU1CT0wodzFfYWRkX21hc3Rlcl9kZXZpY2UpOwogRVhQT1JUX1NZTUJPTCh3MV9yZW1vdmVfbWFzdGVyX2RldmljZSk7Ci0KLU1PRFVMRV9BTElBU19ORVRfUEZfUFJPVE8oUEZfTkVUTElOSywgTkVUTElOS19XMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2lvLmMgYi9kcml2ZXJzL3cxL3cxX2lvLmMKaW5kZXggZTJhMDQzMy4uZjdmN2U4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9pby5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW8uYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIncxX2xvZy5oIgogI2luY2x1ZGUgIncxX2lvLmgiCiAKLWludCB3MV9kZWxheV9wYXJtID0gMTsKK3N0YXRpYyBpbnQgdzFfZGVsYXlfcGFybSA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVsYXlfY29lZiwgdzFfZGVsYXlfcGFybSwgaW50LCAwKTsKIAogc3RhdGljIHU4IHcxX2NyYzhfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvem9ycm8vem9ycm8tZHJpdmVyLmMgYi9kcml2ZXJzL3pvcnJvL3pvcnJvLWRyaXZlci5jCmluZGV4IGZjYmVlNzQuLjA2N2MwN2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3pvcnJvL3pvcnJvLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvem9ycm8vem9ycm8tZHJpdmVyLmMKQEAgLTY1LDIyICs2NSwxNyBAQAogICAgICAqICBAZHJ2OiB0aGUgZHJpdmVyIHN0cnVjdHVyZSB0byByZWdpc3RlcgogICAgICAqCiAgICAgICogIEFkZHMgdGhlIGRyaXZlciBzdHJ1Y3R1cmUgdG8gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkcml2ZXJzCi0gICAgICogIFJldHVybnMgdGhlIG51bWJlciBvZiBab3JybyBkZXZpY2VzIHdoaWNoIHdlcmUgY2xhaW1lZCBieSB0aGUgZHJpdmVyCi0gICAgICogIGR1cmluZyByZWdpc3RyYXRpb24uICBUaGUgZHJpdmVyIHJlbWFpbnMgcmVnaXN0ZXJlZCBldmVuIGlmIHRoZQotICAgICAqICByZXR1cm4gdmFsdWUgaXMgemVyby4KKyAgICAgKiAgUmV0dXJucyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUuCiAgICAgICovCiAKIGludCB6b3Jyb19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHpvcnJvX2RyaXZlciAqZHJ2KQogewotCWludCBjb3VudCA9IDA7Ci0KIAkvKiBpbml0aWFsaXplIGNvbW1vbiBkcml2ZXIgZmllbGRzICovCiAJZHJ2LT5kcml2ZXIubmFtZSA9IGRydi0+bmFtZTsKIAlkcnYtPmRyaXZlci5idXMgPSAmem9ycm9fYnVzX3R5cGU7CiAKIAkvKiByZWdpc3RlciB3aXRoIGNvcmUgKi8KLQljb3VudCA9IGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwotCXJldHVybiBjb3VudCA/IGNvdW50IDogMTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvOXAvOXAuaCBiL2ZzLzlwLzlwLmgKaW5kZXggMGNkMzc0ZC4uOTRlMmY5MiAxMDA2NDQKLS0tIGEvZnMvOXAvOXAuaAorKysgYi9mcy85cC85cC5oCkBAIC04LDkgKzgsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTIzNSw2ICsyMzQsNyBAQAogCXN0cnVjdCB2OWZzX3N0ciBuYW1lOwogCXUzMiBwZXJtOwogCXU4IG1vZGU7CisJc3RydWN0IHY5ZnNfc3RyIGV4dGVuc2lvbjsKIH07CiAKIHN0cnVjdCBSY3JlYXRlIHsKQEAgLTM0OCw4ICszNDgsNiBAQAogCiBpbnQgdjlmc190X2NsdW5rKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHUzMiBmaWQpOwogCi1pbnQgdjlmc190X2ZsdXNoKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHUxNiBvbGR0YWcpOwotCiBpbnQgdjlmc190X3N0YXQoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgdTMyIGZpZCwKIAkJc3RydWN0IHY5ZnNfZmNhbGwgKipyY2FsbCk7CiAKQEAgLTM2Niw3ICszNjQsNyBAQAogCQkgIHN0cnVjdCB2OWZzX2ZjYWxsICoqcmNhbGwpOwogCiBpbnQgdjlmc190X2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCB1MzIgZmlkLCBjaGFyICpuYW1lLAotCQkgIHUzMiBwZXJtLCB1OCBtb2RlLCBzdHJ1Y3Qgdjlmc19mY2FsbCAqKnJjYWxsKTsKKwl1MzIgcGVybSwgdTggbW9kZSwgY2hhciAqZXh0ZW5zaW9uLCBzdHJ1Y3Qgdjlmc19mY2FsbCAqKnJjYWxsKTsKIAogaW50IHY5ZnNfdF9yZWFkKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHUzMiBmaWQsCiAJCXU2NCBvZmZzZXQsIHUzMiBjb3VudCwgc3RydWN0IHY5ZnNfZmNhbGwgKipyY2FsbCk7CkBAIC0zNzQsMyArMzcyLDQgQEAKIGludCB2OWZzX3Rfd3JpdGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgdTMyIGZpZCwgdTY0IG9mZnNldCwKIAkJIHUzMiBjb3VudCwgY29uc3QgY2hhciBfX3VzZXIgKiBkYXRhLAogCQkgc3RydWN0IHY5ZnNfZmNhbGwgKipyY2FsbCk7CitpbnQgdjlmc19wcmludGZjYWxsKGNoYXIgKiwgaW50LCBzdHJ1Y3Qgdjlmc19mY2FsbCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvTWFrZWZpbGUgYi9mcy85cC9NYWtlZmlsZQppbmRleCAyZjRjZTQzLi44Nzg5N2Y4IDEwMDY0NAotLS0gYS9mcy85cC9NYWtlZmlsZQorKysgYi9mcy85cC9NYWtlZmlsZQpAQCAtMSwxMCArMSw5IEBACi1vYmotJChDT05GSUdfOVBfRlMpIDo9IDlwMjAwMC5vCitvYmotJChDT05GSUdfOVBfRlMpIDo9IDlwLm8KIAotOXAyMDAwLW9ianMgOj0gXAorOXAtb2JqcyA6PSBcCiAJdHJhbnNfZmQubyBcCi0JdHJhbnNfc29jay5vIFwKIAltdXgubyBcCi0JOXAubyBcCisJZmNhbGwubyBcCiAJY29udi5vIFwKIAl2ZnNfc3VwZXIubyBcCiAJdmZzX2lub2RlLm8gXApAQCAtMTQsNSArMTMsNiBAQAogCXZmc19kZW50cnkubyBcCiAJZXJyb3IubyBcCiAJdjlmcy5vIFwKLQlmaWQubworCWZpZC5vIFwKKwlmY3ByaW50Lm8KIApkaWZmIC0tZ2l0IGEvZnMvOXAvY29udi5jIGIvZnMvOXAvY29udi5jCmluZGV4IGJmMWYxMDAuLmE3NjdlMDUgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2NvbnYuYworKysgYi9mcy85cC9jb252LmMKQEAgLTgsOSArOCw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFJvbiBNaW5uaWNoIDxybWlubmljaEBsYW5sLmdvdj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtNTM2LDYgKzUzNSw3IEBACiAJcmV0dXJuIGZjOwogfQogCisjaWYgMAogc3RydWN0IHY5ZnNfZmNhbGwgKnY5ZnNfY3JlYXRlX3RhdXRoKHUzMiBhZmlkLCBjaGFyICp1bmFtZSwgY2hhciAqYW5hbWUpCiB7CiAJaW50IHNpemU7CkBAIC01NTksNiArNTU5LDcgQEAKICAgICAgIGVycm9yOgogCXJldHVybiBmYzsKIH0KKyNlbmRpZiAgLyogIDAgICovCiAKIHN0cnVjdCB2OWZzX2ZjYWxsICoKIHY5ZnNfY3JlYXRlX3RhdHRhY2godTMyIGZpZCwgdTMyIGFmaWQsIGNoYXIgKnVuYW1lLCBjaGFyICphbmFtZSkKQEAgLTY2NCw3ICs2NjUsOCBAQAogCXJldHVybiBmYzsKIH0KIAotc3RydWN0IHY5ZnNfZmNhbGwgKnY5ZnNfY3JlYXRlX3RjcmVhdGUodTMyIGZpZCwgY2hhciAqbmFtZSwgdTMyIHBlcm0sIHU4IG1vZGUpCitzdHJ1Y3Qgdjlmc19mY2FsbCAqdjlmc19jcmVhdGVfdGNyZWF0ZSh1MzIgZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgdTggbW9kZSwKKwljaGFyICpleHRlbnNpb24sIGludCBleHRlbmRlZCkKIHsKIAlpbnQgc2l6ZTsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmM7CkBAIC02NzIsNiArNjc0LDkgQEAKIAlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7CiAKIAlzaXplID0gNCArIDIgKyBzdHJsZW4obmFtZSkgKyA0ICsgMTsJLyogZmlkWzRdIG5hbWVbc10gcGVybVs0XSBtb2RlWzFdICovCisJaWYgKGV4dGVuZGVkICYmIGV4dGVuc2lvbiE9TlVMTCkKKwkJc2l6ZSArPSAyICsgc3RybGVuKGV4dGVuc2lvbik7CS8qIGV4dGVuc2lvbltzXSAqLworCiAJZmMgPSB2OWZzX2NyZWF0ZV9jb21tb24oYnVmcCwgc2l6ZSwgVENSRUFURSk7CiAJaWYgKElTX0VSUihmYykpCiAJCWdvdG8gZXJyb3I7CkBAIC02ODAsNiArNjg1LDggQEAKIAl2OWZzX3B1dF9zdHIoYnVmcCwgbmFtZSwgJmZjLT5wYXJhbXMudGNyZWF0ZS5uYW1lKTsKIAl2OWZzX3B1dF9pbnQzMihidWZwLCBwZXJtLCAmZmMtPnBhcmFtcy50Y3JlYXRlLnBlcm0pOwogCXY5ZnNfcHV0X2ludDgoYnVmcCwgbW9kZSwgJmZjLT5wYXJhbXMudGNyZWF0ZS5tb2RlKTsKKwlpZiAoZXh0ZW5kZWQpCisJCXY5ZnNfcHV0X3N0cihidWZwLCBleHRlbnNpb24sICZmYy0+cGFyYW1zLnRjcmVhdGUuZXh0ZW5zaW9uKTsKIAogCWlmIChidWZfY2hlY2tfb3ZlcmZsb3coYnVmcCkpIHsKIAkJa2ZyZWUoZmMpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvY29udi5oIGIvZnMvOXAvY29udi5oCmluZGV4IDI2YTczNmUuLmRkNWI2YjEgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2NvbnYuaAorKysgYi9mcy85cC9jb252LmgKQEAgLTgsOSArOCw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFJvbiBNaW5uaWNoIDxybWlubmljaEBsYW5sLmdvdj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMzMsMTQgKzMyLDE0IEBACiB2b2lkIHY5ZnNfc2V0X3RhZyhzdHJ1Y3Qgdjlmc19mY2FsbCAqZmMsIHUxNiB0YWcpOwogCiBzdHJ1Y3Qgdjlmc19mY2FsbCAqdjlmc19jcmVhdGVfdHZlcnNpb24odTMyIG1zaXplLCBjaGFyICp2ZXJzaW9uKTsKLXN0cnVjdCB2OWZzX2ZjYWxsICp2OWZzX2NyZWF0ZV90YXV0aCh1MzIgYWZpZCwgY2hhciAqdW5hbWUsIGNoYXIgKmFuYW1lKTsKIHN0cnVjdCB2OWZzX2ZjYWxsICp2OWZzX2NyZWF0ZV90YXR0YWNoKHUzMiBmaWQsIHUzMiBhZmlkLCBjaGFyICp1bmFtZSwKIAljaGFyICphbmFtZSk7CiBzdHJ1Y3Qgdjlmc19mY2FsbCAqdjlmc19jcmVhdGVfdGZsdXNoKHUxNiBvbGR0YWcpOwogc3RydWN0IHY5ZnNfZmNhbGwgKnY5ZnNfY3JlYXRlX3R3YWxrKHUzMiBmaWQsIHUzMiBuZXdmaWQsIHUxNiBud25hbWUsCiAJY2hhciAqKnduYW1lcyk7CiBzdHJ1Y3Qgdjlmc19mY2FsbCAqdjlmc19jcmVhdGVfdG9wZW4odTMyIGZpZCwgdTggbW9kZSk7Ci1zdHJ1Y3Qgdjlmc19mY2FsbCAqdjlmc19jcmVhdGVfdGNyZWF0ZSh1MzIgZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgdTggbW9kZSk7CitzdHJ1Y3Qgdjlmc19mY2FsbCAqdjlmc19jcmVhdGVfdGNyZWF0ZSh1MzIgZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwgdTggbW9kZSwKKwljaGFyICpleHRlbnNpb24sIGludCBleHRlbmRlZCk7CiBzdHJ1Y3Qgdjlmc19mY2FsbCAqdjlmc19jcmVhdGVfdHJlYWQodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50KTsKIHN0cnVjdCB2OWZzX2ZjYWxsICp2OWZzX2NyZWF0ZV90d3JpdGUodTMyIGZpZCwgdTY0IG9mZnNldCwgdTMyIGNvdW50LAogCWNvbnN0IGNoYXIgX191c2VyICpkYXRhKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL2RlYnVnLmggYi9mcy85cC9kZWJ1Zy5oCmluZGV4IGZlNTUxMDMuLjQyMjhjMGIgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2RlYnVnLmgKKysrIGIvZnMvOXAvZGVidWcuaApAQCAtNSw5ICs1LDggQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgUm9uIE1pbm5pY2ggPHJtaW5uaWNoQGxhbmwuZ292PgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0zMCw2ICsyOSw3IEBACiAjZGVmaW5lIERFQlVHX01VWAkJKDE8PDUpCiAjZGVmaW5lIERFQlVHX1RSQU5TCQkoMTw8NikKICNkZWZpbmUgREVCVUdfU0xBQlMJICAgICAgCSgxPDw3KQorI2RlZmluZSBERUJVR19GQ0FMTAkJKDE8PDgpCiAKICNkZWZpbmUgREVCVUdfRFVNUF9QS1QJCTAKIApkaWZmIC0tZ2l0IGEvZnMvOXAvZXJyb3IuYyBiL2ZzLzlwL2Vycm9yLmMKaW5kZXggZTRiNmY4Zi4uOTgxZmU4ZSAxMDA2NDQKLS0tIGEvZnMvOXAvZXJyb3IuYworKysgYi9mcy85cC9lcnJvci5jCkBAIC0xMSw5ICsxMSw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFJvbiBNaW5uaWNoIDxybWlubmljaEBsYW5sLmdvdj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpkaWZmIC0tZ2l0IGEvZnMvOXAvZXJyb3IuaCBiL2ZzLzlwL2Vycm9yLmgKaW5kZXggYTk3OTRlOC4uNWYzY2E1MiAxMDA2NDQKLS0tIGEvZnMvOXAvZXJyb3IuaAorKysgYi9mcy85cC9lcnJvci5oCkBAIC0xMiw5ICsxMiw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFJvbiBNaW5uaWNoIDxybWlubmljaEBsYW5sLmdvdj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpkaWZmIC0tZ2l0IGEvZnMvOXAvOXAuYyBiL2ZzLzlwL2ZjYWxsLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gZnMvOXAvOXAuYwpyZW5hbWUgdG8gZnMvOXAvZmNhbGwuYwppbmRleCAxYTZkMDg3Li43MTc0MmJhMSAxMDA2NDQKLS0tIGEvZnMvOXAvOXAuYworKysgYi9mcy85cC9mY2FsbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBsaW51eC9mcy85cC85cC5jCisgKiAgbGludXgvZnMvOXAvZmNhbGwuYwogICoKICAqICBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIHRvIHBlcmZvcm0gc3luY2hyb25vdXMgOVAgY2FsbHMKICAqCkBAIC04LDkgKzgsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTExMSw3ICsxMTAsNiBAQAogCWlmICghcmMpCiAJCXJldHVybjsKIAotCWRwcmludGsoREVCVUdfOVAsICJ0Y2FsbCBpZCAlZCByY2FsbCBpZCAlZFxuIiwgdGMtPmlkLCByYy0+aWQpOwogCXY5c2VzID0gYTsKIAlpZiAocmMtPmlkID09IFJDTFVOSykKIAkJdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKQEAgLTE0OSwxMyArMTQ3LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmIDAKIC8qKgogICogdjlmc192OWZzX3RfZmx1c2ggLSBmbHVzaCBhIHBlbmRpbmcgdHJhbnNhY3Rpb24KICAqIEB2OXNlczogOVAyMDAwIHNlc3Npb24gaW5mb3JtYXRpb24KLSAqIEB0YWc6IHRpZCB0byByZWxlYXNlCisgKiBAdGFnOiB0YWcgdG8gcmVsZWFzZQogICoKICAqLwotCiBpbnQgdjlmc190X2ZsdXNoKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHUxNiBvbGR0YWcpCiB7CiAJaW50IHJldDsKQEAgLTE3Miw2ICsxNzAsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgogCiAvKioKICAqIHY5ZnNfdF9zdGF0IC0gcmVhZCBhIGZpbGUncyBtZXRhLWRhdGEKQEAgLTMzMyw4ICszMzIsOCBAQAogICovCiAKIGludAotdjlmc190X2NyZWF0ZShzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCB1MzIgZmlkLCBjaGFyICpuYW1lLAotCSAgICAgIHUzMiBwZXJtLCB1OCBtb2RlLCBzdHJ1Y3Qgdjlmc19mY2FsbCAqKnJjcCkKK3Y5ZnNfdF9jcmVhdGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgdTMyIGZpZCwgY2hhciAqbmFtZSwgdTMyIHBlcm0sCisJdTggbW9kZSwgY2hhciAqZXh0ZW5zaW9uLCBzdHJ1Y3Qgdjlmc19mY2FsbCAqKnJjcCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCB2OWZzX2ZjYWxsICp0YzsKQEAgLTM0Miw3ICszNDEsOSBAQAogCWRwcmludGsoREVCVUdfOVAsICJmaWQgJWQgbmFtZSAnJXMnIHBlcm0gJXggbW9kZSAlZFxuIiwKIAkJZmlkLCBuYW1lLCBwZXJtLCBtb2RlKTsKIAotCXRjID0gdjlmc19jcmVhdGVfdGNyZWF0ZShmaWQsIG5hbWUsIHBlcm0sIG1vZGUpOworCXRjID0gdjlmc19jcmVhdGVfdGNyZWF0ZShmaWQsIG5hbWUsIHBlcm0sIG1vZGUsIGV4dGVuc2lvbiwKKwkJdjlzZXMtPmV4dGVuZGVkKTsKKwogCWlmICghSVNfRVJSKHRjKSkgewogCQlyZXQgPSB2OWZzX211eF9ycGModjlzZXMtPm11eCwgdGMsIHJjcCk7CiAJCWtmcmVlKHRjKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL2ZjcHJpbnQuYyBiL2ZzLzlwL2ZjcHJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODNlODI3Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvOXAvZmNwcmludC5jCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICogIGxpbnV4L2ZzLzlwL2ZjcHJpbnQuYworICoKKyAqICBQcmludCA5UCBjYWxsLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgYnkgTGF0Y2hlc2FyIElvbmtvdiA8bHVjaG9AaW9ua292Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvOgorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IKKyAqICBCb3N0b24sIE1BICAwMjExMS0xMzAxICBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInY5ZnMuaCIKKyNpbmNsdWRlICI5cC5oIgorI2luY2x1ZGUgIm11eC5oIgorCitzdGF0aWMgaW50Cit2OWZzX3ByaW50cWlkKGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbiwgc3RydWN0IHY5ZnNfcWlkICpxKQoreworCWludCBuOworCWNoYXIgYlsxMF07CisKKwluID0gMDsKKwlpZiAocS0+dHlwZSAmIFY5RlNfUVRESVIpCisJCWJbbisrXSA9ICdkJzsKKwlpZiAocS0+dHlwZSAmIFY5RlNfUVRBUFBFTkQpCisJCWJbbisrXSA9ICdhJzsKKwlpZiAocS0+dHlwZSAmIFY5RlNfUVRBVVRIKQorCQliW24rK10gPSAnQSc7CisJaWYgKHEtPnR5cGUgJiBWOUZTX1FURVhDTCkKKwkJYltuKytdID0gJ2wnOworCWlmIChxLT50eXBlICYgVjlGU19RVFRNUCkKKwkJYltuKytdID0gJ3QnOworCWlmIChxLT50eXBlICYgVjlGU19RVFNZTUxJTkspCisJCWJbbisrXSA9ICdMJzsKKwliW25dID0gJ1wwJzsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBidWZsZW4sICIoJS4xNmxseCAleCAlcykiLCAobG9uZyBsb25nIGludCkgcS0+cGF0aCwKKwkJcS0+dmVyc2lvbiwgYik7Cit9CisKK3N0YXRpYyBpbnQKK3Y5ZnNfcHJpbnRwZXJtKGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgaW50IHBlcm0pCit7CisJaW50IG47CisJY2hhciBiWzE1XTsKKworCW4gPSAwOworCWlmIChwZXJtICYgVjlGU19ETURJUikKKwkJYltuKytdID0gJ2QnOworCWlmIChwZXJtICYgVjlGU19ETUFQUEVORCkKKwkJYltuKytdID0gJ2EnOworCWlmIChwZXJtICYgVjlGU19ETUFVVEgpCisJCWJbbisrXSA9ICdBJzsKKwlpZiAocGVybSAmIFY5RlNfRE1FWENMKQorCQliW24rK10gPSAnbCc7CisJaWYgKHBlcm0gJiBWOUZTX0RNVE1QKQorCQliW24rK10gPSAndCc7CisJaWYgKHBlcm0gJiBWOUZTX0RNREVWSUNFKQorCQliW24rK10gPSAnRCc7CisJaWYgKHBlcm0gJiBWOUZTX0RNU09DS0VUKQorCQliW24rK10gPSAnUyc7CisJaWYgKHBlcm0gJiBWOUZTX0RNTkFNRURQSVBFKQorCQliW24rK10gPSAnUCc7CisJaWYgKHBlcm0gJiBWOUZTX0RNU1lNTElOSykKKwkJYltuKytdID0gJ0wnOworCWJbbl0gPSAnXDAnOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzJTAzbyIsIGIsIHBlcm0mMDc3KTsKK30KKworc3RhdGljIGludAordjlmc19wcmludHN0YXQoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgdjlmc19zdGF0ICpzdCwgaW50IGV4dGVuZGVkKQoreworCWludCBuOworCisJbiA9IHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIiclLipzJyAnJS4qcyciLCBzdC0+bmFtZS5sZW4sCisJCXN0LT5uYW1lLnN0ciwgc3QtPnVpZC5sZW4sIHN0LT51aWQuc3RyKTsKKwlpZiAoZXh0ZW5kZWQpCisJCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiglZCkiLCBzdC0+bl91aWQpOworCisJbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiICclLipzJyIsIHN0LT5naWQubGVuLCBzdC0+Z2lkLnN0cik7CisJaWYgKGV4dGVuZGVkKQorCQluICs9IHNjbnByaW50ZihidWYrbiwgYnVmbGVuLW4sICIoJWQpIiwgc3QtPm5fZ2lkKTsKKworCW4gKz0gc2NucHJpbnRmKGJ1ZituLCBidWZsZW4tbiwgIiAnJS4qcyciLCBzdC0+bXVpZC5sZW4sIHN0LT5tdWlkLnN0cik7CisJaWYgKGV4dGVuZGVkKQorCQluICs9IHNjbnByaW50ZihidWYrbiwgYnVmbGVuLW4sICIoJWQpIiwgc3QtPm5fbXVpZCk7CisKKwluICs9IHNjbnByaW50ZihidWYrbiwgYnVmbGVuLW4sICIgcSAiKTsKKwluICs9IHY5ZnNfcHJpbnRxaWQoYnVmK24sIGJ1Zmxlbi1uLCAmc3QtPnFpZCk7CisJbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiIG0gIik7CisJbiArPSB2OWZzX3ByaW50cGVybShidWYrbiwgYnVmbGVuLW4sIHN0LT5tb2RlKTsKKwluICs9IHNjbnByaW50ZihidWYrbiwgYnVmbGVuLW4sICIgYXQgJWQgbXQgJWQgbCAlbGxkIiwKKwkJc3QtPmF0aW1lLCBzdC0+bXRpbWUsIChsb25nIGxvbmcgaW50KSBzdC0+bGVuZ3RoKTsKKworCWlmIChleHRlbmRlZCkKKwkJbiArPSBzY25wcmludGYoYnVmK24sIGJ1Zmxlbi1uLCAiIGV4dCAnJS4qcyciLAorCQkJc3QtPmV4dGVuc2lvbi5sZW4sIHN0LT5leHRlbnNpb24uc3RyKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50Cit2OWZzX2R1bXBkYXRhKGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgdTggKmRhdGEsIGludCBkYXRhbGVuKQoreworCWludCBpLCBuOworCisJaSA9IG4gPSAwOworCXdoaWxlIChpIDwgZGF0YWxlbikgeworCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiJTAyeCIsIGRhdGFbaV0pOworCQlpZiAoaSU0ID09IDMpCisJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBidWZsZW4gLSBuLCAiICIpOworCQlpZiAoaSUzMiA9PSAzMSkKKwkJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIGJ1ZmxlbiAtIG4sICJcbiIpOworCisJCWkrKzsKKwl9CisJbiArPSBzY25wcmludGYoYnVmICsgbiwgYnVmbGVuIC0gbiwgIlxuIik7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludAordjlmc19wcmludGRhdGEoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1OCAqZGF0YSwgaW50IGRhdGFsZW4pCit7CisJcmV0dXJuIHY5ZnNfZHVtcGRhdGEoYnVmLCBidWZsZW4sIGRhdGEsIGRhdGFsZW48MTY/ZGF0YWxlbjoxNik7Cit9CisKK2ludAordjlmc19wcmludGZjYWxsKGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbiwgc3RydWN0IHY5ZnNfZmNhbGwgKmZjLCBpbnQgZXh0ZW5kZWQpCit7CisJaW50IGksIHJldCwgdHlwZSwgdGFnOworCisJaWYgKCFmYykKKwkJcmV0dXJuIHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgIjxOVUxMPiIpOworCisJdHlwZSA9IGZjLT5pZDsKKwl0YWcgPSBmYy0+dGFnOworCisJcmV0ID0gMDsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFRWRVJTSU9OOgorCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCisJCQkiVHZlcnNpb24gdGFnICV1IG1zaXplICV1IHZlcnNpb24gJyUuKnMnIiwgdGFnLAorCQkJZmMtPnBhcmFtcy50dmVyc2lvbi5tc2l6ZSwgZmMtPnBhcmFtcy50dmVyc2lvbi52ZXJzaW9uLmxlbiwKKwkJCWZjLT5wYXJhbXMudHZlcnNpb24udmVyc2lvbi5zdHIpOworCQlicmVhazsKKworCWNhc2UgUlZFUlNJT046CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKKwkJCSJSdmVyc2lvbiB0YWcgJXUgbXNpemUgJXUgdmVyc2lvbiAnJS4qcyciLCB0YWcsCisJCQlmYy0+cGFyYW1zLnJ2ZXJzaW9uLm1zaXplLCBmYy0+cGFyYW1zLnJ2ZXJzaW9uLnZlcnNpb24ubGVuLAorCQkJZmMtPnBhcmFtcy5ydmVyc2lvbi52ZXJzaW9uLnN0cik7CisJCWJyZWFrOworCisJY2FzZSBUQVVUSDoKKwkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAorCQkJIlRhdXRoIHRhZyAldSBhZmlkICVkIHVuYW1lICclLipzJyBhbmFtZSAnJS4qcyciLCB0YWcsCisJCQlmYy0+cGFyYW1zLnRhdXRoLmFmaWQsIGZjLT5wYXJhbXMudGF1dGgudW5hbWUubGVuLAorCQkJZmMtPnBhcmFtcy50YXV0aC51bmFtZS5zdHIsIGZjLT5wYXJhbXMudGF1dGguYW5hbWUubGVuLAorCQkJZmMtPnBhcmFtcy50YXV0aC5hbmFtZS5zdHIpOworCQlicmVhazsKKworCWNhc2UgUkFVVEg6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlJhdXRoIHRhZyAldSBxaWQgIiwgdGFnKTsKKwkJdjlmc19wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LCAmZmMtPnBhcmFtcy5yYXV0aC5xaWQpOworCQlicmVhazsKKworCWNhc2UgVEFUVEFDSDoKKwkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAorCQkJIlRhdHRhY2ggdGFnICV1IGZpZCAlZCBhZmlkICVkIHVuYW1lICclLipzJyBhbmFtZSAnJS4qcyciLAorCQkJdGFnLCBmYy0+cGFyYW1zLnRhdHRhY2guZmlkLCBmYy0+cGFyYW1zLnRhdHRhY2guYWZpZCwKKwkJCWZjLT5wYXJhbXMudGF0dGFjaC51bmFtZS5sZW4sIGZjLT5wYXJhbXMudGF0dGFjaC51bmFtZS5zdHIsCisJCQlmYy0+cGFyYW1zLnRhdHRhY2guYW5hbWUubGVuLCBmYy0+cGFyYW1zLnRhdHRhY2guYW5hbWUuc3RyKTsKKwkJYnJlYWs7CisKKwljYXNlIFJBVFRBQ0g6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlJhdHRhY2ggdGFnICV1IHFpZCAiLCB0YWcpOworCQl2OWZzX3ByaW50cWlkKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICZmYy0+cGFyYW1zLnJhdHRhY2gucWlkKTsKKwkJYnJlYWs7CisKKwljYXNlIFJFUlJPUjoKKwkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUmVycm9yIHRhZyAldSBlbmFtZSAnJS4qcyciLAorCQkJdGFnLCBmYy0+cGFyYW1zLnJlcnJvci5lcnJvci5sZW4sCisJCQlmYy0+cGFyYW1zLnJlcnJvci5lcnJvci5zdHIpOworCQlpZiAoZXh0ZW5kZWQpCisJCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgZWNvZGUgJWRcbiIsCisJCQkJZmMtPnBhcmFtcy5yZXJyb3IuZXJybm8pOworCQlicmVhazsKKworCWNhc2UgVEZMVVNIOgorCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJUZmx1c2ggdGFnICV1IG9sZHRhZyAldSIsCisJCQl0YWcsIGZjLT5wYXJhbXMudGZsdXNoLm9sZHRhZyk7CisJCWJyZWFrOworCisJY2FzZSBSRkxVU0g6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlJmbHVzaCB0YWcgJXUiLCB0YWcpOworCQlicmVhazsKKworCWNhc2UgVFdBTEs6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKKwkJCSJUd2FsayB0YWcgJXUgZmlkICVkIG5ld2ZpZCAlZCBud25hbWUgJWQiLCB0YWcsCisJCQlmYy0+cGFyYW1zLnR3YWxrLmZpZCwgZmMtPnBhcmFtcy50d2Fsay5uZXdmaWQsCisJCQlmYy0+cGFyYW1zLnR3YWxrLm53bmFtZSk7CisJCWZvcihpID0gMDsgaSA8IGZjLT5wYXJhbXMudHdhbGsubnduYW1lOyBpKyspCisJCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsIiAnJS4qcyciLAorCQkJCWZjLT5wYXJhbXMudHdhbGsud25hbWVzW2ldLmxlbiwKKwkJCQlmYy0+cGFyYW1zLnR3YWxrLnduYW1lc1tpXS5zdHIpOworCQlicmVhazsKKworCWNhc2UgUldBTEs6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlJ3YWxrIHRhZyAldSBud3FpZCAlZCIsCisJCQl0YWcsIGZjLT5wYXJhbXMucndhbGsubndxaWQpOworCQlmb3IoaSA9IDA7IGkgPCBmYy0+cGFyYW1zLnJ3YWxrLm53cWlkOyBpKyspCisJCQlyZXQgKz0gdjlmc19wcmludHFpZChidWYrcmV0LCBidWZsZW4tcmV0LAorCQkJCSZmYy0+cGFyYW1zLnJ3YWxrLndxaWRzW2ldKTsKKwkJYnJlYWs7CisKKwljYXNlIFRPUEVOOgorCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCisJCQkiVG9wZW4gdGFnICV1IGZpZCAlZCBtb2RlICVkIiwgdGFnLAorCQkJZmMtPnBhcmFtcy50b3Blbi5maWQsIGZjLT5wYXJhbXMudG9wZW4ubW9kZSk7CisJCWJyZWFrOworCisJY2FzZSBST1BFTjoKKwkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUm9wZW4gdGFnICV1IiwgdGFnKTsKKwkJcmV0ICs9IHY5ZnNfcHJpbnRxaWQoYnVmK3JldCwgYnVmbGVuLXJldCwgJmZjLT5wYXJhbXMucm9wZW4ucWlkKTsKKwkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCIgaW91bml0ICVkIiwKKwkJCWZjLT5wYXJhbXMucm9wZW4uaW91bml0KTsKKwkJYnJlYWs7CisKKwljYXNlIFRDUkVBVEU6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKKwkJCSJUY3JlYXRlIHRhZyAldSBmaWQgJWQgbmFtZSAnJS4qcycgcGVybSAiLCB0YWcsCisJCQlmYy0+cGFyYW1zLnRjcmVhdGUuZmlkLCBmYy0+cGFyYW1zLnRjcmVhdGUubmFtZS5sZW4sCisJCQlmYy0+cGFyYW1zLnRjcmVhdGUubmFtZS5zdHIpOworCisJCXJldCArPSB2OWZzX3ByaW50cGVybShidWYrcmV0LCBidWZsZW4tcmV0LCBmYy0+cGFyYW1zLnRjcmVhdGUucGVybSk7CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIiBtb2RlICVkIiwKKwkJCWZjLT5wYXJhbXMudGNyZWF0ZS5tb2RlKTsKKwkJYnJlYWs7CisKKwljYXNlIFJDUkVBVEU6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlJjcmVhdGUgdGFnICV1IiwgdGFnKTsKKwkJcmV0ICs9IHY5ZnNfcHJpbnRxaWQoYnVmK3JldCwgYnVmbGVuLXJldCwgJmZjLT5wYXJhbXMucmNyZWF0ZS5xaWQpOworCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICIgaW91bml0ICVkIiwKKwkJCWZjLT5wYXJhbXMucmNyZWF0ZS5pb3VuaXQpOworCQlicmVhazsKKworCWNhc2UgVFJFQUQ6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwKKwkJCSJUcmVhZCB0YWcgJXUgZmlkICVkIG9mZnNldCAlbGxkIGNvdW50ICV1IiwgdGFnLAorCQkJZmMtPnBhcmFtcy50cmVhZC5maWQsCisJCQkobG9uZyBsb25nIGludCkgZmMtPnBhcmFtcy50cmVhZC5vZmZzZXQsCisJCQlmYy0+cGFyYW1zLnRyZWFkLmNvdW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFJSRUFEOgorCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsCisJCQkiUnJlYWQgdGFnICV1IGNvdW50ICV1IGRhdGEgIiwgdGFnLAorCQkJZmMtPnBhcmFtcy5ycmVhZC5jb3VudCk7CisJCXJldCArPSB2OWZzX3ByaW50ZGF0YShidWYrcmV0LCBidWZsZW4tcmV0LCBmYy0+cGFyYW1zLnJyZWFkLmRhdGEsCisJCQlmYy0+cGFyYW1zLnJyZWFkLmNvdW50KTsKKwkJYnJlYWs7CisKKwljYXNlIFRXUklURToKKwkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LAorCQkJIlR3cml0ZSB0YWcgJXUgZmlkICVkIG9mZnNldCAlbGxkIGNvdW50ICV1IGRhdGEgIiwKKwkJCXRhZywgZmMtPnBhcmFtcy50d3JpdGUuZmlkLAorCQkJKGxvbmcgbG9uZyBpbnQpIGZjLT5wYXJhbXMudHdyaXRlLm9mZnNldCwKKwkJCWZjLT5wYXJhbXMudHdyaXRlLmNvdW50KTsKKwkJcmV0ICs9IHY5ZnNfcHJpbnRkYXRhKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsIGZjLT5wYXJhbXMudHdyaXRlLmRhdGEsCisJCQlmYy0+cGFyYW1zLnR3cml0ZS5jb3VudCk7CisJCWJyZWFrOworCisJY2FzZSBSV1JJVEU6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlJ3cml0ZSB0YWcgJXUgY291bnQgJXUiLAorCQkJdGFnLCBmYy0+cGFyYW1zLnJ3cml0ZS5jb3VudCk7CisJCWJyZWFrOworCisJY2FzZSBUQ0xVTks6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlRjbHVuayB0YWcgJXUgZmlkICVkIiwKKwkJCXRhZywgZmMtPnBhcmFtcy50Y2x1bmsuZmlkKTsKKwkJYnJlYWs7CisKKwljYXNlIFJDTFVOSzoKKwkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiUmNsdW5rIHRhZyAldSIsIHRhZyk7CisJCWJyZWFrOworCisJY2FzZSBUUkVNT1ZFOgorCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJUcmVtb3ZlIHRhZyAldSBmaWQgJWQiLAorCQkJdGFnLCBmYy0+cGFyYW1zLnRyZW1vdmUuZmlkKTsKKwkJYnJlYWs7CisKKwljYXNlIFJSRU1PVkU6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlJyZW1vdmUgdGFnICV1IiwgdGFnKTsKKwkJYnJlYWs7CisKKwljYXNlIFRTVEFUOgorCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJUc3RhdCB0YWcgJXUgZmlkICVkIiwKKwkJCXRhZywgZmMtPnBhcmFtcy50c3RhdC5maWQpOworCQlicmVhazsKKworCWNhc2UgUlNUQVQ6CisJCXJldCArPSBzY25wcmludGYoYnVmK3JldCwgYnVmbGVuLXJldCwgIlJzdGF0IHRhZyAldSAiLCB0YWcpOworCQlyZXQgKz0gdjlmc19wcmludHN0YXQoYnVmK3JldCwgYnVmbGVuLXJldCwgJmZjLT5wYXJhbXMucnN0YXQuc3RhdCwKKwkJCWV4dGVuZGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIFRXU1RBVDoKKwkJcmV0ICs9IHNjbnByaW50ZihidWYrcmV0LCBidWZsZW4tcmV0LCAiVHdzdGF0IHRhZyAldSBmaWQgJWQgIiwKKwkJCXRhZywgZmMtPnBhcmFtcy50d3N0YXQuZmlkKTsKKwkJcmV0ICs9IHY5ZnNfcHJpbnRzdGF0KGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICZmYy0+cGFyYW1zLnR3c3RhdC5zdGF0LAorCQkJZXh0ZW5kZWQpOworCQlicmVhazsKKworCWNhc2UgUldTVEFUOgorCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJSd3N0YXQgdGFnICV1IiwgdGFnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgKz0gc2NucHJpbnRmKGJ1ZityZXQsIGJ1Zmxlbi1yZXQsICJ1bmtub3duIHR5cGUgJWQiLCB0eXBlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzLzlwL2ZpZC5jIGIvZnMvOXAvZmlkLmMKaW5kZXggZWRhNDQ5Ny4uYjc2MDhhZiAxMDA2NDQKLS0tIGEvZnMvOXAvZmlkLmMKKysrIGIvZnMvOXAvZmlkLmMKQEAgLTEsMTIgKzEsMTEgQEAKIC8qCiAgKiBWOUZTIEZJRCBNYW5hZ2VtZW50CiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNSBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC00MCw3ICszOSw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgdjlmc19maWRfaW5zZXJ0KHN0cnVjdCB2OWZzX2ZpZCAqZmlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitpbnQgdjlmc19maWRfaW5zZXJ0KHN0cnVjdCB2OWZzX2ZpZCAqZmlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZmlkX2xpc3QgPSAoc3RydWN0IGxpc3RfaGVhZCAqKWRlbnRyeS0+ZF9mc2RhdGE7CiAJZHByaW50ayhERUJVR185UCwgImZpZCAlZCAoJXApIGRlbnRyeSAlcyAoJXApXG4iLCBmaWQtPmZpZCwgZmlkLApAQCAtNTcsNyArNTYsNiBAQAogCX0KIAogCWZpZC0+dWlkID0gY3VycmVudC0+dWlkOwotCWZpZC0+cGlkID0gY3VycmVudC0+cGlkOwogCWxpc3RfYWRkKCZmaWQtPmxpc3QsIGZpZF9saXN0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTY4LDE0ICs2NiwxMSBAQAogICoKICAqLwogCi1zdHJ1Y3Qgdjlmc19maWQgKnY5ZnNfZmlkX2NyZWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0Jc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgaW50IGZpZCwgaW50IGNyZWF0ZSkKK3N0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIGludCBmaWQpCiB7CiAJc3RydWN0IHY5ZnNfZmlkICpuZXc7CiAKLQlkcHJpbnRrKERFQlVHXzlQLCAiZmlkIGNyZWF0ZSBkZW50cnkgJXAsIGZpZCAlZCwgY3JlYXRlICVkXG4iLAotCQlkZW50cnksIGZpZCwgY3JlYXRlKTsKLQorCWRwcmludGsoREVCVUdfOVAsICJmaWQgY3JlYXRlIGZpZCAlZFxuIiwgZmlkKTsKIAluZXcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdjlmc19maWQpLCBHRlBfS0VSTkVMKTsKIAlpZiAobmV3ID09IE5VTEwpIHsKIAkJZHByaW50ayhERUJVR19FUlJPUiwgIk91dCBvZiBNZW1vcnlcbiIpOwpAQCAtODUsMTkgKzgwLDEzIEBACiAJbmV3LT5maWQgPSBmaWQ7CiAJbmV3LT52OXNlcyA9IHY5c2VzOwogCW5ldy0+Zmlkb3BlbiA9IDA7Ci0JbmV3LT5maWRjcmVhdGUgPSBjcmVhdGU7CiAJbmV3LT5maWRjbHVua2VkID0gMDsKIAluZXctPmlvdW5pdCA9IDA7CiAJbmV3LT5yZGlyX3BvcyA9IDA7CiAJbmV3LT5yZGlyX2ZjYWxsID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmbmV3LT5saXN0KTsKIAotCWlmICh2OWZzX2ZpZF9pbnNlcnQobmV3LCBkZW50cnkpID09IDApCi0JCXJldHVybiBuZXc7Ci0JZWxzZSB7Ci0JCWRwcmludGsoREVCVUdfRVJST1IsICJQcm9ibGVtcyBpbnNlcnRpbmcgdG8gZGVudHJ5XG4iKTsKLQkJa2ZyZWUobmV3KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCXJldHVybiBuZXc7CiB9CiAKIC8qKgpAQCAtMTEzLDE0MCArMTAyLDI5IEBACiB9CiAKIC8qKgotICogdjlmc19maWRfd2Fsa191cCAtIHdhbGtzIGZyb20gdGhlIHByb2Nlc3MgY3VycmVudCBkaXJlY3RvcnkKLSAqIAl1cCB0byB0aGUgc3BlY2lmaWVkIGRlbnRyeS4KLSAqLwotc3RhdGljIHN0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfd2Fsa191cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JaW50IGZpZG51bSwgY2ZpZG51bSwgZXJyOwotCXN0cnVjdCB2OWZzX2ZpZCAqY2ZpZDsKLQlzdHJ1Y3QgZGVudHJ5ICpjZGU7Ci0Jc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKLQotCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhjdXJyZW50LT5mcy0+cHdkLT5kX2lub2RlKTsKLQljZmlkID0gdjlmc19maWRfbG9va3VwKGN1cnJlbnQtPmZzLT5wd2QpOwotCWlmIChjZmlkID09IE5VTEwpIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwgInByb2Nlc3MgY3dkIGRvZXNuJ3QgaGF2ZSBhIGZpZFxuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwotCX0KLQotCWNmaWRudW0gPSBjZmlkLT5maWQ7Ci0JY2RlID0gY3VycmVudC0+ZnMtPnB3ZDsKLQkvKiBUT0RPOiB0YWtlIGFkdmFudGFnZSBvZiBtdWx0aXdhbGsgKi8KLQotCWZpZG51bSA9IHY5ZnNfZ2V0X2lkcG9vbCgmdjlzZXMtPmZpZHBvb2wpOwotCWlmIChmaWRudW0gPCAwKSB7Ci0JCWRwcmludGsoREVCVUdfRVJST1IsICJjb3VsZCBub3QgZ2V0IGEgbmV3IGZpZCBudW1cbiIpOwotCQllcnIgPSAtRU5PRU5UOwotCQlnb3RvIGNsdW5rX2ZpZDsKLQl9Ci0KLQl3aGlsZSAoY2RlICE9IGRlbnRyeSkgewotCQlpZiAoY2RlID09IGNkZS0+ZF9wYXJlbnQpIHsKLQkJCWRwcmludGsoREVCVUdfRVJST1IsICJjYW4ndCBmaW5kIGRlbnRyeVxuIik7Ci0JCQllcnIgPSAtRU5PRU5UOwotCQkJZ290byBjbHVua19maWQ7Ci0JCX0KLQotCQllcnIgPSB2OWZzX3Rfd2Fsayh2OXNlcywgY2ZpZG51bSwgZmlkbnVtLCAiLi4iLCBOVUxMKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWRwcmludGsoREVCVUdfRVJST1IsICJwcm9ibGVtIHdhbGtpbmcgdG8gcGFyZW50XG4iKTsKLQkJCWdvdG8gY2x1bmtfZmlkOwotCQl9Ci0KLQkJY2ZpZG51bSA9IGZpZG51bTsKLQkJY2RlID0gY2RlLT5kX3BhcmVudDsKLQl9Ci0KLQlyZXR1cm4gdjlmc19maWRfY3JlYXRlKGRlbnRyeSwgdjlzZXMsIGZpZG51bSwgMCk7Ci0KLWNsdW5rX2ZpZDoKLQl2OWZzX3RfY2x1bmsodjlzZXMsIGZpZG51bSk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyKTsKLX0KLQotLyoqCiAgKiB2OWZzX2ZpZF9sb29rdXAgLSByZXRyaWV2ZSB0aGUgcmlnaHQgZmlkIGZyb20gYSAgcGFydGljdWxhciBkZW50cnkKICAqIEBkZW50cnk6IGRlbnRyeSB0byBsb29rIGZvciBmaWQgaW4KICAqIEB0eXBlOiBpbnRlbnQgb2YgbG9va3VwIChvcGVyYXRpb24gb3IgdHJhdmVyc2FsKQogICoKLSAqIHNlYXJjaCBsaXN0IG9mIGZpZHMgYXNzb2NpYXRlZCB3aXRoIGEgZGVudHJ5IGZvciBhIGZpZCB3aXRoIGEgbWF0Y2hpbmcKLSAqIHRocmVhZCBpZCBvciB1aWQuICBJZiB0aGF0IGZhaWxzLCBsb29rIHVwIHRoZSBkZW50cnkncyBwYXJlbnRzIHRvIHNlZSBpZiB5b3UKLSAqIGNhbiBmaW5kIGEgbWF0Y2hpbmcgZmlkLgorICogZmluZCBhIGZpZCBpbiB0aGUgZGVudHJ5CisgKgorICogVE9ETzogb25seSBtYXRjaCBmaWRzIHRoYXQgaGF2ZSB0aGUgc2FtZSB1aWQgYXMgY3VycmVudCB1c2VyCiAgKgogICovCiAKIHN0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfbG9va3VwKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpmaWRfbGlzdCA9IChzdHJ1Y3QgbGlzdF9oZWFkICopZGVudHJ5LT5kX2ZzZGF0YTsKLQlzdHJ1Y3Qgdjlmc19maWQgKmN1cnJlbnRfZmlkID0gTlVMTDsKLQlzdHJ1Y3Qgdjlmc19maWQgKnRlbXAgPSBOVUxMOwogCXN0cnVjdCB2OWZzX2ZpZCAqcmV0dXJuX2ZpZCA9IE5VTEw7CiAKIAlkcHJpbnRrKERFQlVHXzlQLCAiIGRlbnRyeTogJXMgKCVwKVxuIiwgZGVudHJ5LT5kX2luYW1lLCBkZW50cnkpOwogCi0JaWYgKGZpZF9saXN0KSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyZW50X2ZpZCwgdGVtcCwgZmlkX2xpc3QsIGxpc3QpIHsKLQkJCWlmICghY3VycmVudF9maWQtPmZpZGNyZWF0ZSkgewotCQkJCXJldHVybl9maWQgPSBjdXJyZW50X2ZpZDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmICghcmV0dXJuX2ZpZCkKLQkJCXJldHVybl9maWQgPSBjdXJyZW50X2ZpZDsKLQl9Ci0KLQkvKiB3ZSBhcmUgYXQgdGhlIHJvb3QgYnV0IGRpZG4ndCBtYXRjaCAqLwotCWlmICgoIXJldHVybl9maWQpICYmIChkZW50cnktPmRfcGFyZW50ID09IGRlbnRyeSkpIHsKLQkJLyogVE9ETzogY2xvbmUgYXR0YWNoIHdpdGggbmV3IHVpZCAqLwotCQlyZXR1cm5fZmlkID0gY3VycmVudF9maWQ7Ci0JfQorCWlmIChmaWRfbGlzdCkKKwkJcmV0dXJuX2ZpZCA9IGxpc3RfZW50cnkoZmlkX2xpc3QtPm5leHQsIHN0cnVjdCB2OWZzX2ZpZCwgbGlzdCk7CiAKIAlpZiAoIXJldHVybl9maWQpIHsKLQkJc3RydWN0IGRlbnRyeSAqcGFyID0gY3VycmVudC0+ZnMtPnB3ZC0+ZF9wYXJlbnQ7Ci0JCWludCBjb3VudCA9IDE7Ci0JCXdoaWxlIChwYXIgIT0gTlVMTCkgewotCQkJaWYgKHBhciA9PSBkZW50cnkpCi0JCQkJYnJlYWs7Ci0JCQljb3VudCsrOwotCQkJaWYgKHBhciA9PSBwYXItPmRfcGFyZW50KSB7Ci0JCQkJZHByaW50ayhERUJVR19FUlJPUiwKLQkJCQkJImdvdCB0byByb290IHdpdGhvdXQgZmluZGluZyBkZW50cnlcbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcGFyID0gcGFyLT5kX3BhcmVudDsKLQkJfQotCi0vKiBYWFggLSB0aGVyZSBtYXkgYmUgc29tZSBkdXBsaWNhdGlvbiB3ZSBjYW4gZ2V0IHJpZCBvZiAqLwotCQlpZiAocGFyID09IGRlbnRyeSkgewotCQkJcmV0dXJuX2ZpZCA9IHY5ZnNfZmlkX3dhbGtfdXAoZGVudHJ5KTsKLQkJCWlmIChJU19FUlIocmV0dXJuX2ZpZCkpCi0JCQkJcmV0dXJuX2ZpZCA9IE5VTEw7Ci0JCX0KKwkJZHByaW50ayhERUJVR19FUlJPUiwgIkNvdWxkbid0IGZpbmQgYSBmaWQgaW4gZGVudHJ5XG4iKTsKIAl9CiAKIAlyZXR1cm4gcmV0dXJuX2ZpZDsKIH0KLQotc3RydWN0IHY5ZnNfZmlkICp2OWZzX2ZpZF9nZXRfY3JlYXRlZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZmlkX2xpc3Q7Ci0Jc3RydWN0IHY5ZnNfZmlkICpmaWQsICpmdG1wLCAqcmV0OwotCi0JZHByaW50ayhERUJVR185UCwgIiBkZW50cnk6ICVzICglcClcbiIsIGRlbnRyeS0+ZF9pbmFtZSwgZGVudHJ5KTsKLQlmaWRfbGlzdCA9IChzdHJ1Y3QgbGlzdF9oZWFkICopZGVudHJ5LT5kX2ZzZGF0YTsKLQlyZXQgPSBOVUxMOwotCWlmIChmaWRfbGlzdCkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlkLCBmdG1wLCBmaWRfbGlzdCwgbGlzdCkgewotCQkJaWYgKGZpZC0+ZmlkY3JlYXRlICYmIGZpZC0+cGlkID09IGN1cnJlbnQtPnBpZCkgewotCQkJCWxpc3RfZGVsKCZmaWQtPmxpc3QpOwotCQkJCXJldCA9IGZpZDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWRwcmludGsoREVCVUdfOVAsICJyZXR1cm4gJXBcbiIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2ZzLzlwL2ZpZC5oIGIvZnMvOXAvZmlkLmgKaW5kZXggODRjNjczYS4uYWE5NzRkNiAxMDA2NDQKLS0tIGEvZnMvOXAvZmlkLmgKKysrIGIvZnMvOXAvZmlkLmgKQEAgLTQsOSArNCw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IEVyaWMgVmFuIEhlbnNiZXJnZW4gPGVyaWN2aEBnbWFpbC5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTMzLDcgKzMyLDYgQEAKIAogCXUzMiBmaWQ7CiAJdW5zaWduZWQgY2hhciBmaWRvcGVuOwkgIC8qIHNldCB3aGVuIGZpZCBpcyBvcGVuZWQgKi8KLQl1bnNpZ25lZCBjaGFyIGZpZGNyZWF0ZTsgIC8qIHNldCB3aGVuIGZpZCB3YXMganVzdCBjcmVhdGVkICovCiAJdW5zaWduZWQgY2hhciBmaWRjbHVua2VkOyAvKiBzZXQgd2hlbiBmaWQgaGFzIGFscmVhZHkgYmVlbiBjbHVua2VkICovCiAKIAlzdHJ1Y3Qgdjlmc19xaWQgcWlkOwpAQCAtNDUsNyArNDMsNiBAQAogCXN0cnVjdCB2OWZzX2ZjYWxsICpyZGlyX2ZjYWxsOwogCiAJLyogbWFuYWdlbWVudCBzdHVmZiAqLwotCXBpZF90IHBpZDsJCS8qIHRocmVhZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaWQgKi8KIAl1aWRfdCB1aWQ7CQkvKiB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZCAqLwogCiAJLyogcHJpdmF0ZSBkYXRhICovCkBAIC01Niw1ICs1Myw1IEBACiBzdHJ1Y3Qgdjlmc19maWQgKnY5ZnNfZmlkX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogc3RydWN0IHY5ZnNfZmlkICp2OWZzX2ZpZF9nZXRfY3JlYXRlZChzdHJ1Y3QgZGVudHJ5ICopOwogdm9pZCB2OWZzX2ZpZF9kZXN0cm95KHN0cnVjdCB2OWZzX2ZpZCAqZmlkKTsKLXN0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfY3JlYXRlKHN0cnVjdCBkZW50cnkgKiwKLQlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBpbnQgZmlkLCBpbnQgY3JlYXRlKTsKK3N0cnVjdCB2OWZzX2ZpZCAqdjlmc19maWRfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqLCBpbnQgZmlkKTsKK2ludCB2OWZzX2ZpZF9pbnNlcnQoc3RydWN0IHY5ZnNfZmlkICpmaWQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy85cC9tdXguYyBiL2ZzLzlwL211eC5jCmluZGV4IGVhMTEzNGUuLjNlNWIxMjQgMTAwNjQ0Ci0tLSBhL2ZzLzlwL211eC5jCisrKyBiL2ZzLzlwL211eC5jCkBAIC03LDkgKzcsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTMxLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInY5ZnMuaCIKQEAgLTY5LDcgKzY5LDcgQEAKIAlpbnQgbXNpemU7CiAJdW5zaWduZWQgY2hhciAqZXh0ZW5kZWQ7CiAJc3RydWN0IHY5ZnNfdHJhbnNwb3J0ICp0cmFuczsKLQlzdHJ1Y3Qgdjlmc19pZHBvb2wgdGlkcG9vbDsKKwlzdHJ1Y3Qgdjlmc19pZHBvb2wgdGFncG9vbDsKIAlpbnQgZXJyOwogCXdhaXRfcXVldWVfaGVhZF90IGVxdWV1ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlcV9saXN0OwpAQCAtMTEwLDcgKzExMCw3IEBACiBzdGF0aWMgdTE2IHY5ZnNfbXV4X2dldF90YWcoc3RydWN0IHY5ZnNfbXV4X2RhdGEgKik7CiBzdGF0aWMgdm9pZCB2OWZzX211eF9wdXRfdGFnKHN0cnVjdCB2OWZzX211eF9kYXRhICosIHUxNik7CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKHY5ZnNfbXV4X3Rhc2tfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKHY5ZnNfbXV4X3Rhc2tfbG9jayk7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnY5ZnNfbXV4X3dxOwogCiBzdGF0aWMgaW50IHY5ZnNfbXV4X251bTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogICoKICAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHJldHVybnMgc3FydCBvZiB0aGUgbnVtYmVyIG9mIG1vdW50cy4KICAqLwotaW5saW5lIGludCB2OWZzX211eF9jYWxjX3BvbGxfcHJvY3MoaW50IG11eG51bSkKK3N0YXRpYyBpbnQgdjlmc19tdXhfY2FsY19wb2xsX3Byb2NzKGludCBtdXhudW0pCiB7CiAJaW50IG47CiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiAJZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgbXV4bnVtICVkIHByb2NudW0gJWRcbiIsIG0sIHY5ZnNfbXV4X251bSwKIAkJdjlmc19tdXhfcG9sbF90YXNrX251bSk7Ci0JdXAoJnY5ZnNfbXV4X3Rhc2tfbG9jayk7CisJbXV0ZXhfbG9jaygmdjlmc19tdXhfdGFza19sb2NrKTsKIAogCW4gPSB2OWZzX211eF9jYWxjX3BvbGxfcHJvY3Modjlmc19tdXhfbnVtICsgMSk7CiAJaWYgKG4gPiB2OWZzX211eF9wb2xsX3Rhc2tfbnVtKSB7CkBAIC0yMjUsNyArMjI1LDcgQEAKIAl9CiAKIAl2OWZzX211eF9udW0rKzsKLQlkb3duKCZ2OWZzX211eF90YXNrX2xvY2spOworCW11dGV4X3VubG9jaygmdjlmc19tdXhfdGFza19sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjM1LDcgKzIzNSw3IEBACiAJaW50IGk7CiAJc3RydWN0IHY5ZnNfbXV4X3BvbGxfdGFzayAqdnB0OwogCi0JdXAoJnY5ZnNfbXV4X3Rhc2tfbG9jayk7CisJbXV0ZXhfbG9jaygmdjlmc19tdXhfdGFza19sb2NrKTsKIAl2cHQgPSBtLT5wb2xsX3Rhc2s7CiAJbGlzdF9kZWwoJm0tPm11eF9saXN0KTsKIAlmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG0tPnBvbGxfd2FkZHIpOyBpKyspIHsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQl2OWZzX211eF9wb2xsX3Rhc2tfbnVtLS07CiAJfQogCXY5ZnNfbXV4X251bS0tOwotCWRvd24oJnY5ZnNfbXV4X3Rhc2tfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ2OWZzX211eF90YXNrX2xvY2spOwogfQogCiAvKioKQEAgLTI3OSw4ICsyNzksOCBAQAogCW0tPm1zaXplID0gbXNpemU7CiAJbS0+ZXh0ZW5kZWQgPSBleHRlbmRlZDsKIAltLT50cmFucyA9IHRyYW5zOwotCWlkcl9pbml0KCZtLT50aWRwb29sLnBvb2wpOwotCWluaXRfTVVURVgoJm0tPnRpZHBvb2wubG9jayk7CisJaWRyX2luaXQoJm0tPnRhZ3Bvb2wucG9vbCk7CisJaW5pdF9NVVRFWCgmbS0+dGFncG9vbC5sb2NrKTsKIAltLT5lcnIgPSAwOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm0tPmVxdWV1ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJm0tPnJlcV9saXN0KTsKQEAgLTM4Myw3ICszODMsNyBAQAogLyoqCiAgKiB2OWZzX3BvbGxfbXV4IC0gcG9sbHMgYSBtdXggYW5kIHNjaGVkdWxlcyByZWFkIG9yIHdyaXRlIHdvcmtzIGlmIG5lY2Vzc2FyeQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdjlmc19wb2xsX211eChzdHJ1Y3Qgdjlmc19tdXhfZGF0YSAqbSkKK3N0YXRpYyB2b2lkIHY5ZnNfcG9sbF9tdXgoc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm0pCiB7CiAJaW50IG47CiAKQEAgLTYzNCw2ICs2MzQsMTQgQEAKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAorCQlpZiAoKHY5ZnNfZGVidWdfbGV2ZWwmREVCVUdfRkNBTEwpID09IERFQlVHX0ZDQUxMKSB7CisJCQljaGFyIGJ1ZlsxNTBdOworCisJCQl2OWZzX3ByaW50ZmNhbGwoYnVmLCBzaXplb2YoYnVmKSwgbS0+cmNhbGwsCisJCQkJKm0tPmV4dGVuZGVkKTsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiPj4+ICVwICVzXG4iLCBtLCBidWYpOworCQl9CisKIAkJcmNhbGwgPSBtLT5yY2FsbDsKIAkJcmJ1ZiA9IG0tPnJidWY7CiAJCWlmIChtLT5ycG9zID4gbikgewpAQCAtNzM5LDYgKzc0NywxMyBAQAogCiAJdjlmc19zZXRfdGFnKHRjLCBuKTsKIAorCWlmICgodjlmc19kZWJ1Z19sZXZlbCZERUJVR19GQ0FMTCkgPT0gREVCVUdfRkNBTEwpIHsKKwkJY2hhciBidWZbMTUwXTsKKworCQl2OWZzX3ByaW50ZmNhbGwoYnVmLCBzaXplb2YoYnVmKSwgdGMsICptLT5leHRlbmRlZCk7CisJCXByaW50ayhLRVJOX05PVElDRSAiPDw8ICVwICVzXG4iLCBtLCBidWYpOworCX0KKwogCXJlcS0+dGFnID0gbjsKIAlyZXEtPnRjYWxsID0gdGM7CiAJcmVxLT5yY2FsbCA9IE5VTEw7CkBAIC03NjEsOSArNzc2LDggQEAKIAlyZXR1cm4gcmVxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXY5ZnNfbXV4X2ZsdXNoX2NiKHZvaWQgKmEsIHN0cnVjdCB2OWZzX2ZjYWxsICp0Yywgc3RydWN0IHY5ZnNfZmNhbGwgKnJjLAotCQkgIGludCBlcnIpCitzdGF0aWMgdm9pZCB2OWZzX211eF9mbHVzaF9jYih2b2lkICphLCBzdHJ1Y3Qgdjlmc19mY2FsbCAqdGMsCisJCQkgICAgICBzdHJ1Y3Qgdjlmc19mY2FsbCAqcmMsIGludCBlcnIpCiB7CiAJdjlmc19tdXhfcmVxX2NhbGxiYWNrIGNiOwogCWludCB0YWc7CkBAIC05MDEsNiArOTE1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWYgMAogLyoqCiAgKiB2OWZzX211eF9ycGNuYiAtIHNlbmRzIDlQIHJlcXVlc3Qgd2l0aG91dCB3YWl0aW5nIGZvciByZXNwb25zZS4KICAqIEBtOiBtdXggZGF0YQpAQCAtOTI0LDYgKzkzOSw3IEBACiAJZHByaW50ayhERUJVR19NVVgsICJtdXggJXAgdGMgJXAgdGFnICVkXG4iLCBtLCB0YywgcmVxLT50YWcpOwogCXJldHVybiAwOwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogLyoqCiAgKiB2OWZzX211eF9jYW5jZWwgLSBjYW5jZWwgYWxsIHBlbmRpbmcgcmVxdWVzdHMgd2l0aCBlcnJvcgpAQCAtOTYzLDcgKzk3OSw3IEBACiB7CiAJaW50IHRhZzsKIAotCXRhZyA9IHY5ZnNfZ2V0X2lkcG9vbCgmbS0+dGlkcG9vbCk7CisJdGFnID0gdjlmc19nZXRfaWRwb29sKCZtLT50YWdwb29sKTsKIAlpZiAodGFnIDwgMCkKIAkJcmV0dXJuIFY5RlNfTk9UQUc7CiAJZWxzZQpAQCAtOTcyLDYgKzk4OCw2IEBACiAKIHN0YXRpYyB2b2lkIHY5ZnNfbXV4X3B1dF90YWcoc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm0sIHUxNiB0YWcpCiB7Ci0JaWYgKHRhZyAhPSBWOUZTX05PVEFHICYmIHY5ZnNfY2hlY2tfaWRwb29sKHRhZywgJm0tPnRpZHBvb2wpKQotCQl2OWZzX3B1dF9pZHBvb2wodGFnLCAmbS0+dGlkcG9vbCk7CisJaWYgKHRhZyAhPSBWOUZTX05PVEFHICYmIHY5ZnNfY2hlY2tfaWRwb29sKHRhZywgJm0tPnRhZ3Bvb2wpKQorCQl2OWZzX3B1dF9pZHBvb2wodGFnLCAmbS0+dGFncG9vbCk7CiB9CmRpZmYgLS1naXQgYS9mcy85cC9tdXguaCBiL2ZzLzlwL211eC5oCmluZGV4IDk0NzNiODQuLmU5MGJmZDMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL211eC5oCisrKyBiL2ZzLzlwL211eC5oCkBAIC03LDkgKzcsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwNCBieSBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC01MCw4ICs0OSw2IEBACiBpbnQgdjlmc19tdXhfc2VuZChzdHJ1Y3Qgdjlmc19tdXhfZGF0YSAqbSwgc3RydWN0IHY5ZnNfZmNhbGwgKnRjKTsKIHN0cnVjdCB2OWZzX2ZjYWxsICp2OWZzX211eF9yZWN2KHN0cnVjdCB2OWZzX211eF9kYXRhICptKTsKIGludCB2OWZzX211eF9ycGMoc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm0sIHN0cnVjdCB2OWZzX2ZjYWxsICp0Yywgc3RydWN0IHY5ZnNfZmNhbGwgKipyYyk7Ci1pbnQgdjlmc19tdXhfcnBjbmIoc3RydWN0IHY5ZnNfbXV4X2RhdGEgKm0sIHN0cnVjdCB2OWZzX2ZjYWxsICp0YywKLQl2OWZzX211eF9yZXFfY2FsbGJhY2sgY2IsIHZvaWQgKmEpOwogCiB2b2lkIHY5ZnNfbXV4X2ZsdXNoKHN0cnVjdCB2OWZzX211eF9kYXRhICptLCBpbnQgc2VuZGZsdXNoKTsKIHZvaWQgdjlmc19tdXhfY2FuY2VsKHN0cnVjdCB2OWZzX211eF9kYXRhICptLCBpbnQgZXJyKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3RyYW5zX2ZkLmMgYi9mcy85cC90cmFuc19mZC5jCmluZGV4IDFhMjhlZjkuLjk0ZTBhN2YgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3RyYW5zX2ZkLmMKKysrIGIvZnMvOXAvdHJhbnNfZmQuYwpAQCAtMSwxNSArMSwxNiBAQAogLyoKICAqIGxpbnV4L2ZzLzlwL3RyYW5zX2ZkLmMKICAqCi0gKiBGaWxlIERlc2NyaXB0b3IgVHJhbnNwb3J0IExheWVyCisgKiBGZCB0cmFuc3BvcnQgbGF5ZXIuICBJbmNsdWRlcyBkZXByZWNhdGVkIHNvY2tldCBsYXllci4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IGJ5IEVyaWMgVmFuIEhlbnNiZXJnZW4gPGVyaWN2aEBnbWFpbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IGJ5IFJ1c3MgQ294IDxyc2NAc3d0Y2guY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgYnkgRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWlsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAc2Fybm9mZi5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTI1LDYgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CkBAIC00MCw4OCArNDIsMTE5IEBACiAjaW5jbHVkZSAidjlmcy5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogCisjZGVmaW5lIFY5RlNfUE9SVCA1NjQKKwogc3RydWN0IHY5ZnNfdHJhbnNfZmQgewotCXN0cnVjdCBmaWxlICppbl9maWxlOwotCXN0cnVjdCBmaWxlICpvdXRfZmlsZTsKKwlzdHJ1Y3QgZmlsZSAqcmQ7CisJc3RydWN0IGZpbGUgKndyOwogfTsKIAogLyoqCi0gKiB2OWZzX2ZkX3JlY3YgLSByZWNlaXZlIGZyb20gYSBzb2NrZXQKKyAqIHY5ZnNfZmRfcmVhZC0gcmVhZCBmcm9tIGEgZmQKICAqIEB2OXNlczogc2Vzc2lvbiBpbmZvcm1hdGlvbgogICogQHY6IGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgaW50bwogICogQGxlbjogc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlcgogICoKICAqLwotCi1zdGF0aWMgaW50IHY5ZnNfZmRfcmVjdihzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKQorc3RhdGljIGludCB2OWZzX2ZkX3JlYWQoc3RydWN0IHY5ZnNfdHJhbnNwb3J0ICp0cmFucywgdm9pZCAqdiwgaW50IGxlbikKIHsKLQlzdHJ1Y3Qgdjlmc190cmFuc19mZCAqdHMgPSB0cmFucyA/IHRyYW5zLT5wcml2IDogTlVMTDsKKwlpbnQgcmV0OworCXN0cnVjdCB2OWZzX3RyYW5zX2ZkICp0czsKIAotCWlmICghdHJhbnMgfHwgdHJhbnMtPnN0YXR1cyAhPSBDb25uZWN0ZWQgfHwgIXRzKQotCQlyZXR1cm4gLUVJTzsKKwlpZiAoIXRyYW5zIHx8IHRyYW5zLT5zdGF0dXMgPT0gRGlzY29ubmVjdGVkIHx8ICEodHMgPSB0cmFucy0+cHJpdikpCisJCXJldHVybiAtRVJFTU9URUlPOwogCi0JcmV0dXJuIGtlcm5lbF9yZWFkKHRzLT5pbl9maWxlLCB0cy0+aW5fZmlsZS0+Zl9wb3MsIHYsIGxlbik7CisJaWYgKCEodHMtPnJkLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCisJCWRwcmludGsoREVCVUdfRVJST1IsICJibG9ja2luZyByZWFkIC4uLlxuIik7CisKKwlyZXQgPSBrZXJuZWxfcmVhZCh0cy0+cmQsIHRzLT5yZC0+Zl9wb3MsIHYsIGxlbik7CisJaWYgKHJldCA8PSAwICYmIHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCisJCXRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiB2OWZzX2ZkX3NlbmQgLSBzZW5kIHRvIGEgc29ja2V0CisgKiB2OWZzX2ZkX3dyaXRlIC0gd3JpdGUgdG8gYSBzb2NrZXQKICAqIEB2OXNlczogc2Vzc2lvbiBpbmZvcm1hdGlvbgogICogQHY6IGJ1ZmZlciB0byBzZW5kIGRhdGEgZnJvbQogICogQGxlbjogc2l6ZSBvZiBzZW5kIGJ1ZmZlcgogICoKICAqLwotCi1zdGF0aWMgaW50IHY5ZnNfZmRfc2VuZChzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKQorc3RhdGljIGludCB2OWZzX2ZkX3dyaXRlKHN0cnVjdCB2OWZzX3RyYW5zcG9ydCAqdHJhbnMsIHZvaWQgKnYsIGludCBsZW4pCiB7Ci0Jc3RydWN0IHY5ZnNfdHJhbnNfZmQgKnRzID0gdHJhbnMgPyB0cmFucy0+cHJpdiA6IE5VTEw7Ci0JbW1fc2VnbWVudF90IG9sZGZzID0gZ2V0X2ZzKCk7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisJc3RydWN0IHY5ZnNfdHJhbnNfZmQgKnRzOwogCi0JaWYgKCF0cmFucyB8fCB0cmFucy0+c3RhdHVzICE9IENvbm5lY3RlZCB8fCAhdHMpCi0JCXJldHVybiAtRUlPOworCWlmICghdHJhbnMgfHwgdHJhbnMtPnN0YXR1cyA9PSBEaXNjb25uZWN0ZWQgfHwgISh0cyA9IHRyYW5zLT5wcml2KSkKKwkJcmV0dXJuIC1FUkVNT1RFSU87CiAKKwlpZiAoISh0cy0+d3ItPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKKwkJZHByaW50ayhERUJVR19FUlJPUiwgImJsb2NraW5nIHdyaXRlIC4uLlxuIik7CisKKwlvbGRmcyA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7CiAJLyogVGhlIGNhc3QgdG8gYSB1c2VyIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHRoZSBzZXRfZnMoKSAqLwotCXJldCA9IHZmc193cml0ZSh0cy0+b3V0X2ZpbGUsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT5vdXRfZmlsZS0+Zl9wb3MpOworCXJldCA9IHZmc193cml0ZSh0cy0+d3IsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOwogCXNldF9mcyhvbGRmcyk7CiAKKwlpZiAocmV0IDw9IDAgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVBR0FJTikKKwkJdHJhbnMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIHY5ZnNfZmRfaW5pdCAtIGluaXRpYWxpemUgZmlsZSBkZXNjcmlwdG9yIHRyYW5zcG9ydAotICogQHY5c2VzOiBzZXNzaW9uIGluZm9ybWF0aW9uCi0gKiBAYWRkcjogYWRkcmVzcyBvZiBzZXJ2ZXIgdG8gbW91bnQKLSAqIEBkYXRhOiBtb3VudCBvcHRpb25zCi0gKgotICovCi0KLXN0YXRpYyBpbnQKLXY5ZnNfZmRfaW5pdChzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBjb25zdCBjaGFyICphZGRyLCBjaGFyICpkYXRhKQorc3RhdGljIHVuc2lnbmVkIGludAordjlmc19mZF9wb2xsKHN0cnVjdCB2OWZzX3RyYW5zcG9ydCAqdHJhbnMsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqcHQpCiB7Ci0Jc3RydWN0IHY5ZnNfdHJhbnNfZmQgKnRzID0gTlVMTDsKLQlzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zID0gdjlzZXMtPnRyYW5zcG9ydDsKKwlpbnQgcmV0LCBuOworCXN0cnVjdCB2OWZzX3RyYW5zX2ZkICp0czsKKwltbV9zZWdtZW50X3Qgb2xkZnM7CiAKLQlpZigodjlzZXMtPndmZG5vID09IH4wKSB8fCAodjlzZXMtPnJmZG5vID09IH4wKSkgewotCQlwcmludGsoS0VSTl9FUlIgInY5ZnM6IEluc3VmZmljaWVudCBvcHRpb25zIGZvciBwcm90bz1mZFxuIik7Ci0JCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJaWYgKCF0cmFucyB8fCB0cmFucy0+c3RhdHVzICE9IENvbm5lY3RlZCB8fCAhKHRzID0gdHJhbnMtPnByaXYpKQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKworCWlmICghdHMtPnJkLT5mX29wIHx8ICF0cy0+cmQtPmZfb3AtPnBvbGwpCisJCXJldHVybiAtRUlPOworCisJaWYgKCF0cy0+d3ItPmZfb3AgfHwgIXRzLT53ci0+Zl9vcC0+cG9sbCkKKwkJcmV0dXJuIC1FSU87CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhnZXRfZHMoKSk7CisKKwlyZXQgPSB0cy0+cmQtPmZfb3AtPnBvbGwodHMtPnJkLCBwdCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZW5kOworCisJaWYgKHRzLT5yZCAhPSB0cy0+d3IpIHsKKwkJbiA9IHRzLT53ci0+Zl9vcC0+cG9sbCh0cy0+d3IsIHB0KTsKKwkJaWYgKG4gPCAwKSB7CisJCQlyZXQgPSBuOworCQkJZ290byBlbmQ7CisJCX0KKwkJcmV0ID0gKHJldCAmIH5QT0xMT1VUKSB8IChuICYgflBPTExJTik7CiAJfQogCi0JdHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdjlmc190cmFuc19mZCksIEdGUF9LRVJORUwpOworICAgICAgZW5kOgorCXNldF9mcyhvbGRmcyk7CisJcmV0dXJuIHJldDsKK30KIAorc3RhdGljIGludCB2OWZzX2ZkX29wZW4oc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgaW50IHJmZCwgaW50IHdmZCkKK3sKKwlzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zID0gdjlzZXMtPnRyYW5zcG9ydDsKKwlzdHJ1Y3Qgdjlmc190cmFuc19mZCAqdHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdjlmc190cmFuc19mZCksCisJCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmICghdHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdHMtPmluX2ZpbGUgPSBmZ2V0KCB2OXNlcy0+cmZkbm8gKTsKLQl0cy0+b3V0X2ZpbGUgPSBmZ2V0KCB2OXNlcy0+d2Zkbm8gKTsKLQotCWlmICghdHMtPmluX2ZpbGUgfHwgIXRzLT5vdXRfZmlsZSkgewotCQlpZiAodHMtPmluX2ZpbGUpCi0JCQlmcHV0KHRzLT5pbl9maWxlKTsKLQotCQlpZiAodHMtPm91dF9maWxlKQotCQkJZnB1dCh0cy0+b3V0X2ZpbGUpOwotCisJdHMtPnJkID0gZmdldChyZmQpOworCXRzLT53ciA9IGZnZXQod2ZkKTsKKwlpZiAoIXRzLT5yZCB8fCAhdHMtPndyKSB7CisJCWlmICh0cy0+cmQpCisJCQlmcHV0KHRzLT5yZCk7CisJCWlmICh0cy0+d3IpCisJCQlmcHV0KHRzLT53cik7CiAJCWtmcmVlKHRzKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTMyLDEzICsxNjUsMTA1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdjlmc19mZF9pbml0KHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIGNvbnN0IGNoYXIgKmFkZHIsCisJCQljaGFyICpkYXRhKQoreworCWlmICh2OXNlcy0+cmZkbm8gPT0gfjAgfHwgdjlzZXMtPndmZG5vID09IH4wKSB7CisJCXByaW50ayhLRVJOX0VSUiAidjlmczogSW5zdWZmaWNpZW50IG9wdGlvbnMgZm9yIHByb3RvPWZkXG4iKTsKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwl9CisKKwlyZXR1cm4gdjlmc19mZF9vcGVuKHY5c2VzLCB2OXNlcy0+cmZkbm8sIHY5c2VzLT53ZmRubyk7Cit9CisKK3N0YXRpYyBpbnQgdjlmc19zb2NrZXRfb3BlbihzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLAorCQkJICAgIHN0cnVjdCBzb2NrZXQgKmNzb2NrZXQpCit7CisJaW50IGZkLCByZXQ7CisKKwljc29ja2V0LT5zay0+c2tfYWxsb2NhdGlvbiA9IEdGUF9OT0lPOworCWlmICgoZmQgPSBzb2NrX21hcF9mZChjc29ja2V0KSkgPCAwKSB7CisJCWVwcmludGsoS0VSTl9FUlIsICJ2OWZzX3NvY2tldF9vcGVuOiBmYWlsZWQgdG8gbWFwIGZkXG4iKTsKKwkJcmV0ID0gZmQ7CisJICAgICAgcmVsZWFzZV9jc29ja2V0OgorCQlzb2NrX3JlbGVhc2UoY3NvY2tldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKChyZXQgPSB2OWZzX2ZkX29wZW4odjlzZXMsIGZkLCBmZCkpIDwgMCkgeworCQlzb2NrZmRfcHV0KGNzb2NrZXQpOworCQllcHJpbnRrKEtFUk5fRVJSLCAidjlmc19zb2NrZXRfb3BlbjogZmFpbGVkIHRvIG9wZW4gZmRcbiIpOworCQlnb3RvIHJlbGVhc2VfY3NvY2tldDsKKwl9CisKKwkoKHN0cnVjdCB2OWZzX3RyYW5zX2ZkICopdjlzZXMtPnRyYW5zcG9ydC0+cHJpdiktPnJkLT5mX2ZsYWdzIHw9CisJICAgIE9fTk9OQkxPQ0s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdjlmc190Y3BfaW5pdChzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBjb25zdCBjaGFyICphZGRyLAorCQkJIGNoYXIgKmRhdGEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0ID0gTlVMTDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3NlcnZlcjsKKworCXNpbl9zZXJ2ZXIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luX3NlcnZlci5zaW5fYWRkci5zX2FkZHIgPSBpbl9hdG9uKGFkZHIpOworCXNpbl9zZXJ2ZXIuc2luX3BvcnQgPSBodG9ucyh2OXNlcy0+cG9ydCk7CisJc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICZjc29ja2V0KTsKKworCWlmICghY3NvY2tldCkgeworCQllcHJpbnRrKEtFUk5fRVJSLCAidjlmc190cmFuc190Y3A6IHByb2JsZW0gY3JlYXRpbmcgc29ja2V0XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IGNzb2NrZXQtPm9wcy0+Y29ubmVjdChjc29ja2V0LAorCQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zZXJ2ZXIsCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQllcHJpbnRrKEtFUk5fRVJSLAorCQkJInY5ZnNfdHJhbnNfdGNwOiBwcm9ibGVtIGNvbm5lY3Rpbmcgc29ja2V0IHRvICVzXG4iLAorCQkJYWRkcik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHY5ZnNfc29ja2V0X29wZW4odjlzZXMsIGNzb2NrZXQpOworfQorCitzdGF0aWMgaW50Cit2OWZzX3VuaXhfaW5pdChzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCBjb25zdCBjaGFyICphZGRyLCBjaGFyICpkYXRhKQoreworCWludCByZXQ7CisJc3RydWN0IHNvY2tldCAqY3NvY2tldDsKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gc3VuX3NlcnZlcjsKKworCWlmIChzdHJsZW4oYWRkcikgPiBVTklYX1BBVEhfTUFYKSB7CisJCWVwcmludGsoS0VSTl9FUlIsICJ2OWZzX3RyYW5zX3VuaXg6IGFkZHJlc3MgdG9vIGxvbmc6ICVzXG4iLAorCQkJYWRkcik7CisJCXJldHVybiAtRU5BTUVUT09MT05HOworCX0KKworCXN1bl9zZXJ2ZXIuc3VuX2ZhbWlseSA9IFBGX1VOSVg7CisJc3RyY3B5KHN1bl9zZXJ2ZXIuc3VuX3BhdGgsIGFkZHIpOworCXNvY2tfY3JlYXRlX2tlcm4oUEZfVU5JWCwgU09DS19TVFJFQU0sIDAsICZjc29ja2V0KTsKKwlyZXQgPSBjc29ja2V0LT5vcHMtPmNvbm5lY3QoY3NvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdW5fc2VydmVyLAorCQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgLSAxLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQllcHJpbnRrKEtFUk5fRVJSLAorCQkJInY5ZnNfdHJhbnNfdW5peDogcHJvYmxlbSBjb25uZWN0aW5nIHNvY2tldDogJXM6ICVkXG4iLAorCQkJYWRkciwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gdjlmc19zb2NrZXRfb3Blbih2OXNlcywgY3NvY2tldCk7Cit9CiAKIC8qKgotICogdjlmc19mZF9jbG9zZSAtIHNodXRkb3duIGZpbGUgZGVzY3JpcHRvcgorICogdjlmc19zb2NrX2Nsb3NlIC0gc2h1dGRvd24gc29ja2V0CiAgKiBAdHJhbnM6IHByaXZhdGUgc29ja2V0IHN0cnVjdHVyZQogICoKICAqLwotCiBzdGF0aWMgdm9pZCB2OWZzX2ZkX2Nsb3NlKHN0cnVjdCB2OWZzX3RyYW5zcG9ydCAqdHJhbnMpCiB7CiAJc3RydWN0IHY5ZnNfdHJhbnNfZmQgKnRzOwpAQCAtMTUyLDY0ICsyNzcsMzMgQEAKIAkJcmV0dXJuOwogCiAJdHJhbnMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKLQlpZiAodHMtPmluX2ZpbGUpCi0JCWZwdXQodHMtPmluX2ZpbGUpOwotCi0JaWYgKHRzLT5vdXRfZmlsZSkKLQkJZnB1dCh0cy0+b3V0X2ZpbGUpOwotCisJaWYgKHRzLT5yZCkKKwkJZnB1dCh0cy0+cmQpOworCWlmICh0cy0+d3IpCisJCWZwdXQodHMtPndyKTsKIAlrZnJlZSh0cyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXY5ZnNfZmRfcG9sbChzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KQotewotCWludCByZXQsIG47Ci0Jc3RydWN0IHY5ZnNfdHJhbnNfZmQgKnRzOwotCW1tX3NlZ21lbnRfdCBvbGRmczsKLQotCWlmICghdHJhbnMpCi0JCXJldHVybiAtRUlPOwotCi0JdHMgPSB0cmFucy0+cHJpdjsKLQlpZiAodHJhbnMtPnN0YXR1cyAhPSBDb25uZWN0ZWQgfHwgIXRzKQotCQlyZXR1cm4gLUVJTzsKLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsKLQotCWlmICghdHMtPmluX2ZpbGUtPmZfb3AgfHwgIXRzLT5pbl9maWxlLT5mX29wLT5wb2xsKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJldCA9IHRzLT5pbl9maWxlLT5mX29wLT5wb2xsKHRzLT5pbl9maWxlLCBwdCk7Ci0KLQlpZiAodHMtPm91dF9maWxlICE9IHRzLT5pbl9maWxlKSB7Ci0JCWlmICghdHMtPm91dF9maWxlLT5mX29wIHx8ICF0cy0+b3V0X2ZpbGUtPmZfb3AtPnBvbGwpIHsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIGVuZDsKLQkJfQotCi0JCW4gPSB0cy0+b3V0X2ZpbGUtPmZfb3AtPnBvbGwodHMtPm91dF9maWxlLCBwdCk7Ci0KLQkJcmV0ICY9IH5QT0xMT1VUOwotCQluICY9IH5QT0xMSU47Ci0KLQkJcmV0IHw9IG47Ci0JfQotCi1lbmQ6Ci0Jc2V0X2ZzKG9sZGZzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KIHN0cnVjdCB2OWZzX3RyYW5zcG9ydCB2OWZzX3RyYW5zX2ZkID0gewogCS5pbml0ID0gdjlmc19mZF9pbml0LAotCS53cml0ZSA9IHY5ZnNfZmRfc2VuZCwKLQkucmVhZCA9IHY5ZnNfZmRfcmVjdiwKKwkud3JpdGUgPSB2OWZzX2ZkX3dyaXRlLAorCS5yZWFkID0gdjlmc19mZF9yZWFkLAogCS5jbG9zZSA9IHY5ZnNfZmRfY2xvc2UsCiAJLnBvbGwgPSB2OWZzX2ZkX3BvbGwsCiB9OwogCitzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgdjlmc190cmFuc190Y3AgPSB7CisJLmluaXQgPSB2OWZzX3RjcF9pbml0LAorCS53cml0ZSA9IHY5ZnNfZmRfd3JpdGUsCisJLnJlYWQgPSB2OWZzX2ZkX3JlYWQsCisJLmNsb3NlID0gdjlmc19mZF9jbG9zZSwKKwkucG9sbCA9IHY5ZnNfZmRfcG9sbCwKK307CisKK3N0cnVjdCB2OWZzX3RyYW5zcG9ydCB2OWZzX3RyYW5zX3VuaXggPSB7CisJLmluaXQgPSB2OWZzX3VuaXhfaW5pdCwKKwkud3JpdGUgPSB2OWZzX2ZkX3dyaXRlLAorCS5yZWFkID0gdjlmc19mZF9yZWFkLAorCS5jbG9zZSA9IHY5ZnNfZmRfY2xvc2UsCisJLnBvbGwgPSB2OWZzX2ZkX3BvbGwsCit9OwpkaWZmIC0tZ2l0IGEvZnMvOXAvdHJhbnNfc29jay5jIGIvZnMvOXAvdHJhbnNfc29jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGU4MzA2Li4wMDAwMDAwCi0tLSBhL2ZzLzlwL3RyYW5zX3NvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi0vKgotICogbGludXgvZnMvOXAvdHJhbnNfc29ja2V0LmMKLSAqCi0gKiBTb2NrZXQgVHJhbnNwb3J0IExheWVyCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IExhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IGJ5IEVyaWMgVmFuIEhlbnNiZXJnZW4gPGVyaWN2aEBnbWFpbC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgYnkgUm9uIE1pbm5pY2ggPHJtaW5uaWNoQHNhcm5vZmYuY29tPgotICogIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBieSBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0bzoKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAqICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yCi0gKiAgQm9zdG9uLCBNQSAgMDIxMTEtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3VuLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRyLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ2OWZzLmgiCi0jaW5jbHVkZSAidHJhbnNwb3J0LmgiCi0KLSNkZWZpbmUgVjlGU19QT1JUIDU2NAotCi1zdHJ1Y3Qgdjlmc190cmFuc19zb2NrIHsKLQlzdHJ1Y3Qgc29ja2V0ICpzOwotCXN0cnVjdCBmaWxlICpmaWxwOwotfTsKLQotLyoqCi0gKiB2OWZzX3NvY2tfcmVjdiAtIHJlY2VpdmUgZnJvbSBhIHNvY2tldAotICogQHY5c2VzOiBzZXNzaW9uIGluZm9ybWF0aW9uCi0gKiBAdjogYnVmZmVyIHRvIHJlY2VpdmUgZGF0YSBpbnRvCi0gKiBAbGVuOiBzaXplIG9mIHJlY2VpdmUgYnVmZmVyCi0gKgotICovCi0KLXN0YXRpYyBpbnQgdjlmc19zb2NrX3JlY3Yoc3RydWN0IHY5ZnNfdHJhbnNwb3J0ICp0cmFucywgdm9pZCAqdiwgaW50IGxlbikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCB2OWZzX3RyYW5zX3NvY2sgKnRzOwotCi0JaWYgKCF0cmFucyB8fCB0cmFucy0+c3RhdHVzID09IERpc2Nvbm5lY3RlZCkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiZGlzY29ubmVjdGVkIC4uLlxuIik7Ci0JCXJldHVybiAtRVJFTU9URUlPOwotCX0KLQotCXRzID0gdHJhbnMtPnByaXY7Ci0KLQlpZiAoISh0cy0+ZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKQotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiYmxvY2tpbmcgcmVhZCAuLi5cbiIpOwotCi0JcmV0ID0ga2VybmVsX3JlYWQodHMtPmZpbHAsIHRzLT5maWxwLT5mX3BvcywgdiwgbGVuKTsKLQlpZiAocmV0IDw9IDApIHsKLQkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMgJiYgcmV0ICE9IC1FQUdBSU4pCi0JCQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogdjlmc19zb2NrX3NlbmQgLSBzZW5kIHRvIGEgc29ja2V0Ci0gKiBAdjlzZXM6IHNlc3Npb24gaW5mb3JtYXRpb24KLSAqIEB2OiBidWZmZXIgdG8gc2VuZCBkYXRhIGZyb20KLSAqIEBsZW46IHNpemUgb2Ygc2VuZCBidWZmZXIKLSAqCi0gKi8KLQotc3RhdGljIGludCB2OWZzX3NvY2tfc2VuZChzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zLCB2b2lkICp2LCBpbnQgbGVuKQotewotCWludCByZXQ7Ci0JbW1fc2VnbWVudF90IG9sZGZzOwotCXN0cnVjdCB2OWZzX3RyYW5zX3NvY2sgKnRzOwotCi0JaWYgKCF0cmFucyB8fCB0cmFucy0+c3RhdHVzID09IERpc2Nvbm5lY3RlZCkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiZGlzY29ubmVjdGVkIC4uLlxuIik7Ci0JCXJldHVybiAtRVJFTU9URUlPOwotCX0KLQotCXRzID0gdHJhbnMtPnByaXY7Ci0JaWYgKCF0cykgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAibm8gdHJhbnNwb3J0IC4uLlxuIik7Ci0JCXJldHVybiAtRVJFTU9URUlPOwotCX0KLQotCWlmICghKHRzLT5maWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCi0JCWRwcmludGsoREVCVUdfRVJST1IsICJibG9ja2luZyB3cml0ZSAuLi5cbiIpOwotCi0Jb2xkZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoZ2V0X2RzKCkpOwotCXJldCA9IHZmc193cml0ZSh0cy0+ZmlscCwgKHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPmZpbHAtPmZfcG9zKTsKLQlzZXRfZnMob2xkZnMpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCi0JCQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdjlmc19zb2NrX3BvbGwoc3RydWN0IHY5ZnNfdHJhbnNwb3J0ICp0cmFucywKLQlzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnB0KSB7Ci0KLQlpbnQgcmV0OwotCXN0cnVjdCB2OWZzX3RyYW5zX3NvY2sgKnRzOwotCW1tX3NlZ21lbnRfdCBvbGRmczsKLQotCWlmICghdHJhbnMpIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwgIm5vIHRyYW5zcG9ydFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXRzID0gdHJhbnMtPnByaXY7Ci0JaWYgKHRyYW5zLT5zdGF0dXMgIT0gQ29ubmVjdGVkIHx8ICF0cykgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAidHJhbnNwb3J0IGRpc2Nvbm5lY3RlZDogJWRcbiIsIHRyYW5zLT5zdGF0dXMpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlvbGRmcyA9IGdldF9mcygpOwotCXNldF9mcyhnZXRfZHMoKSk7Ci0KLQlpZiAoIXRzLT5maWxwLT5mX29wIHx8ICF0cy0+ZmlscC0+Zl9vcC0+cG9sbCkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAibm8gcG9sbCBvcGVyYXRpb25cbiIpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyZXQgPSB0cy0+ZmlscC0+Zl9vcC0+cG9sbCh0cy0+ZmlscCwgcHQpOwotCi1lbmQ6Ci0Jc2V0X2ZzKG9sZGZzKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qKgotICogdjlmc190Y3BfaW5pdCAtIGluaXRpYWxpemUgVENQIHNvY2tldAotICogQHY5c2VzOiBzZXNzaW9uIGluZm9ybWF0aW9uCi0gKiBAYWRkcjogYWRkcmVzcyBvZiBzZXJ2ZXIgdG8gbW91bnQKLSAqIEBkYXRhOiBtb3VudCBvcHRpb25zCi0gKgotICovCi0KLXN0YXRpYyBpbnQKLXY5ZnNfdGNwX2luaXQoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgY29uc3QgY2hhciAqYWRkciwgY2hhciAqZGF0YSkKLXsKLQlzdHJ1Y3Qgc29ja2V0ICpjc29ja2V0ID0gTlVMTDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3NlcnZlcjsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCB2OWZzX3RyYW5zX3NvY2sgKnRzID0gTlVMTDsKLQlzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zID0gdjlzZXMtPnRyYW5zcG9ydDsKLQlpbnQgZmQ7Ci0KLQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCi0JdHMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdjlmc190cmFuc19zb2NrKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXRzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXRyYW5zLT5wcml2ID0gdHM7Ci0JdHMtPnMgPSBOVUxMOwotCXRzLT5maWxwID0gTlVMTDsKLQotCWlmICghYWRkcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcHJpbnRrKERFQlVHX1RSQU5TLCAiQ29ubmVjdGluZyB0byAlc1xuIiwgYWRkcik7Ci0KLQlzaW5fc2VydmVyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCXNpbl9zZXJ2ZXIuc2luX2FkZHIuc19hZGRyID0gaW5fYXRvbihhZGRyKTsKLQlzaW5fc2VydmVyLnNpbl9wb3J0ID0gaHRvbnModjlzZXMtPnBvcnQpOwotCXNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAmY3NvY2tldCk7Ci0JcmMgPSBjc29ja2V0LT5vcHMtPmNvbm5lY3QoY3NvY2tldCwKLQkJCQkgICAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zZXJ2ZXIsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksIDApOwotCWlmIChyYyA8IDApIHsKLQkJZXByaW50ayhLRVJOX0VSUiwKLQkJCSJ2OWZzX3RyYW5zX3RjcDogcHJvYmxlbSBjb25uZWN0aW5nIHNvY2tldCB0byAlc1xuIiwKLQkJCWFkZHIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCWNzb2NrZXQtPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX05PSU87Ci0KLQlmZCA9IHNvY2tfbWFwX2ZkKGNzb2NrZXQpOwotCWlmIChmZCA8IDApIHsKLQkJc29ja19yZWxlYXNlKGNzb2NrZXQpOwotCQlrZnJlZSh0cyk7Ci0JCXRyYW5zLT5wcml2ID0gTlVMTDsKLQkJcmV0dXJuIGZkOwotCX0KLQotCXRzLT5zID0gY3NvY2tldDsKLQl0cy0+ZmlscCA9IGZnZXQoZmQpOwotCXRzLT5maWxwLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7Ci0JdHJhbnMtPnN0YXR1cyA9IENvbm5lY3RlZDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHY5ZnNfdW5peF9pbml0IC0gaW5pdGlhbGl6ZSBVTklYIGRvbWFpbiBzb2NrZXQKLSAqIEB2OXNlczogc2Vzc2lvbiBpbmZvcm1hdGlvbgotICogQGRldl9uYW1lOiBwYXRoIHRvIG5hbWVkIHBpcGUKLSAqIEBkYXRhOiBtb3VudCBvcHRpb25zCi0gKgotICovCi0KLXN0YXRpYyBpbnQKLXY5ZnNfdW5peF9pbml0KHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAotCSAgICAgICBjaGFyICpkYXRhKQotewotCWludCByYywgZmQ7Ci0Jc3RydWN0IHNvY2tldCAqY3NvY2tldDsKLQlzdHJ1Y3Qgc29ja2FkZHJfdW4gc3VuX3NlcnZlcjsKLQlzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zOwotCXN0cnVjdCB2OWZzX3RyYW5zX3NvY2sgKnRzOwotCi0JcmMgPSAwOwotCWNzb2NrZXQgPSBOVUxMOwotCXRyYW5zID0gdjlzZXMtPnRyYW5zcG9ydDsKLQotCXRyYW5zLT5zdGF0dXMgPSBEaXNjb25uZWN0ZWQ7Ci0KLQlpZiAoc3RybGVuKGRldl9uYW1lKSA+IFVOSVhfUEFUSF9NQVgpIHsKLQkJZXByaW50ayhLRVJOX0VSUiwgInY5ZnNfdHJhbnNfdW5peDogYWRkcmVzcyB0b28gbG9uZzogJXNcbiIsCi0JCQlkZXZfbmFtZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXRzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY5ZnNfdHJhbnNfc29jayksIEdGUF9LRVJORUwpOwotCWlmICghdHMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdHJhbnMtPnByaXYgPSB0czsKLQl0cy0+cyA9IE5VTEw7Ci0JdHMtPmZpbHAgPSBOVUxMOwotCi0Jc3VuX3NlcnZlci5zdW5fZmFtaWx5ID0gUEZfVU5JWDsKLQlzdHJjcHkoc3VuX3NlcnZlci5zdW5fcGF0aCwgZGV2X25hbWUpOwotCXNvY2tfY3JlYXRlX2tlcm4oUEZfVU5JWCwgU09DS19TVFJFQU0sIDAsICZjc29ja2V0KTsKLQlyYyA9IGNzb2NrZXQtPm9wcy0+Y29ubmVjdChjc29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopJnN1bl9zZXJ2ZXIsCi0JCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pIC0gMSwgMCk7CS8qIC0xICppcyogaW1wb3J0YW50ICovCi0JaWYgKHJjIDwgMCkgewotCQllcHJpbnRrKEtFUk5fRVJSLAotCQkJInY5ZnNfdHJhbnNfdW5peDogcHJvYmxlbSBjb25uZWN0aW5nIHNvY2tldDogJXM6ICVkXG4iLAotCQkJZGV2X25hbWUsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQljc29ja2V0LT5zay0+c2tfYWxsb2NhdGlvbiA9IEdGUF9OT0lPOwotCi0JZmQgPSBzb2NrX21hcF9mZChjc29ja2V0KTsKLQlpZiAoZmQgPCAwKSB7Ci0JCXNvY2tfcmVsZWFzZShjc29ja2V0KTsKLQkJa2ZyZWUodHMpOwotCQl0cmFucy0+cHJpdiA9IE5VTEw7Ci0JCXJldHVybiBmZDsKLQl9Ci0KLQl0cy0+cyA9IGNzb2NrZXQ7Ci0JdHMtPmZpbHAgPSBmZ2V0KGZkKTsKLQl0cy0+ZmlscC0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwotCXRyYW5zLT5zdGF0dXMgPSBDb25uZWN0ZWQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiB2OWZzX3NvY2tfY2xvc2UgLSBzaHV0ZG93biBzb2NrZXQKLSAqIEB0cmFuczogcHJpdmF0ZSBzb2NrZXQgc3RydWN0dXJlCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIHY5ZnNfc29ja19jbG9zZShzdHJ1Y3Qgdjlmc190cmFuc3BvcnQgKnRyYW5zKQotewotCXN0cnVjdCB2OWZzX3RyYW5zX3NvY2sgKnRzOwotCi0JaWYgKCF0cmFucykKLQkJcmV0dXJuOwotCi0JdHMgPSB0cmFucy0+cHJpdjsKLQotCWlmICgodHMpICYmICh0cy0+ZmlscCkpIHsKLQkJZnB1dCh0cy0+ZmlscCk7Ci0JCXRzLT5maWxwID0gTlVMTDsKLQkJdHMtPnMgPSBOVUxMOwotCQl0cmFucy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwotCX0KLQotCWtmcmVlKHRzKTsKLQotCXRyYW5zLT5wcml2ID0gTlVMTDsKLX0KLQotc3RydWN0IHY5ZnNfdHJhbnNwb3J0IHY5ZnNfdHJhbnNfdGNwID0gewotCS5pbml0ID0gdjlmc190Y3BfaW5pdCwKLQkud3JpdGUgPSB2OWZzX3NvY2tfc2VuZCwKLQkucmVhZCA9IHY5ZnNfc29ja19yZWN2LAotCS5jbG9zZSA9IHY5ZnNfc29ja19jbG9zZSwKLQkucG9sbCA9IHY5ZnNfc29ja19wb2xsLAotfTsKLQotc3RydWN0IHY5ZnNfdHJhbnNwb3J0IHY5ZnNfdHJhbnNfdW5peCA9IHsKLQkuaW5pdCA9IHY5ZnNfdW5peF9pbml0LAotCS53cml0ZSA9IHY5ZnNfc29ja19zZW5kLAotCS5yZWFkID0gdjlmc19zb2NrX3JlY3YsCi0JLmNsb3NlID0gdjlmc19zb2NrX2Nsb3NlLAotCS5wb2xsID0gdjlmc19zb2NrX3BvbGwsCi19OwpkaWZmIC0tZ2l0IGEvZnMvOXAvdHJhbnNwb3J0LmggYi9mcy85cC90cmFuc3BvcnQuaAppbmRleCA5MWZjZGI5Li5iMzhhNGI4IDEwMDY0NAotLS0gYS9mcy85cC90cmFuc3BvcnQuaAorKysgYi9mcy85cC90cmFuc3BvcnQuaApAQCAtNyw5ICs3LDggQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRXJpYyBWYW4gSGVuc2JlcmdlbiA8ZXJpY3ZoQGdtYWlsLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmcy5jIGIvZnMvOXAvdjlmcy5jCmluZGV4IDUyNTBjNDIuLmQzNzQxNmUgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnMuYworKysgYi9mcy85cC92OWZzLmMKQEAgLTcsOSArNyw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFJvbiBNaW5uaWNoIDxybWlubmljaEBsYW5sLmdvdj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtNTEsNyArNTAsNyBAQAogCU9wdF9wb3J0LCBPcHRfbXNpemUsIE9wdF91aWQsIE9wdF9naWQsIE9wdF9hZmlkLCBPcHRfZGVidWcsCiAJT3B0X3JmZG5vLCBPcHRfd2Zkbm8sCiAJLyogU3RyaW5nIG9wdGlvbnMgKi8KLQlPcHRfbmFtZSwgT3B0X3JlbW90ZW5hbWUsCisJT3B0X3VuYW1lLCBPcHRfcmVtb3RlbmFtZSwKIAkvKiBPcHRpb25zIHRoYXQgdGFrZSBubyBhcmd1bWVudHMgKi8KIAlPcHRfbGVnYWN5LCBPcHRfbm9kZXZtYXAsIE9wdF91bml4LCBPcHRfdGNwLCBPcHRfZmQsCiAJLyogRXJyb3IgdG9rZW4gKi8KQEAgLTY2LDggKzY1LDggQEAKIAl7T3B0X2FmaWQsICJhZmlkPSV1In0sCiAJe09wdF9yZmRubywgInJmZG5vPSV1In0sCiAJe09wdF93ZmRubywgIndmZG5vPSV1In0sCi0Je09wdF9kZWJ1ZywgImRlYnVnPSV1In0sCi0Je09wdF9uYW1lLCAibmFtZT0lcyJ9LAorCXtPcHRfZGVidWcsICJkZWJ1Zz0leCJ9LAorCXtPcHRfdW5hbWUsICJ1bmFtZT0lcyJ9LAogCXtPcHRfcmVtb3RlbmFtZSwgImFuYW1lPSVzIn0sCiAJe09wdF91bml4LCAicHJvdG89dW5peCJ9LAogCXtPcHRfdGNwLCAicHJvdG89dGNwIn0sCkBAIC0xMTYsNyArMTE1LDcgQEAKIAkJaWYgKCEqcCkKIAkJCWNvbnRpbnVlOwogCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7Ci0JCWlmICh0b2tlbiA8IE9wdF9uYW1lKSB7CisJCWlmICh0b2tlbiA8IE9wdF91bmFtZSkgewogCQkJaWYgKChyZXQgPSBtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKSA8IDApIHsKIAkJCQlkcHJpbnRrKERFQlVHX0VSUk9SLAogCQkJCQkiaW50ZWdlciBmaWVsZCwgYnV0IG5vIGludGVnZXI/XG4iKTsKQEAgLTE1OCw3ICsxNTcsNyBAQAogCQljYXNlIE9wdF9mZDoKIAkJCXY5c2VzLT5wcm90byA9IFBST1RPX0ZEOwogCQkJYnJlYWs7Ci0JCWNhc2UgT3B0X25hbWU6CisJCWNhc2UgT3B0X3VuYW1lOgogCQkJbWF0Y2hfc3RyY3B5KHY5c2VzLT5uYW1lLCAmYXJnc1swXSk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfcmVtb3RlbmFtZToKQEAgLTI4OSw3ICsyODgsNyBAQAogCS8qIHNldCBnbG9iYWwgZGVidWcgbGV2ZWwgKi8KIAl2OWZzX2RlYnVnX2xldmVsID0gdjlzZXMtPmRlYnVnOwogCi0JLyogaWQgcG9vbHMgdGhhdCBhcmUgc2Vzc2lvbi1kZXBlbmRlbnQ6IEZJRHMgYW5kIFRJRHMgKi8KKwkvKiBpZCBwb29scyB0aGF0IGFyZSBzZXNzaW9uLWRlcGVuZGVudDogZmlkcyBhbmQgdGFncyAqLwogCWlkcl9pbml0KCZ2OXNlcy0+ZmlkcG9vbC5wb29sKTsKIAlpbml0X01VVEVYKCZ2OXNlcy0+ZmlkcG9vbC5sb2NrKTsKIApAQCAtMzk3LDYgKzM5Niw3IEBACiAJfQogCiAJaWYgKHY5c2VzLT5hZmlkICE9IH4wKSB7CisJCWRwcmludGsoREVCVUdfRVJST1IsICJhZmlkIG5vdCBlcXVhbCB0byB+MFxuIik7CiAJCWlmICh2OWZzX3RfY2x1bmsodjlzZXMsIHY5c2VzLT5hZmlkKSkKIAkJCWRwcmludGsoREVCVUdfRVJST1IsICJjbHVuayBmYWlsZWRcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuaCBiL2ZzLzlwL3Y5ZnMuaAppbmRleCBmMzM3ZGE3Li5jMTM0ZDEwIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmgKKysrIGIvZnMvOXAvdjlmcy5oCkBAIC01LDkgKzUsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTkxLDYgKzkwLDMgQEAKICNkZWZpbmUgVjlGU19ERUZVU0VSCSJub2JvZHkiCiAjZGVmaW5lIFY5RlNfREVGQU5BTUUJIiIKIAotLyogaW5pdGFsIHBvb2wgc2l6ZXMgZm9yIGZpZHMgYW5kIHRhZ3MgKi8KLSNkZWZpbmUgVjlGU19TVEFSVF9GSURTIDgxOTIKLSNkZWZpbmUgVjlGU19TVEFSVF9USURTIDI1NgpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggNjljZjI5MC4uNDNjOWY3ZCAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC01LDkgKzUsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTUxLDMgKzUwLDQgQEAKIGludCB2OWZzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiB2b2lkIHY5ZnNfaW5vZGUyc3RhdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdjlmc19zdGF0ICpzdGF0KTsKIHZvaWQgdjlmc19kZW50cnlfcmVsZWFzZShzdHJ1Y3QgZGVudHJ5ICopOworaW50IHY5ZnNfdWZsYWdzMm9tb2RlKGludCB1ZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2FkZHIuYyBiL2ZzLzlwL3Zmc19hZGRyLmMKaW5kZXggODEwMGZiNS4uZWZkYTQ2ZiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2FkZHIuYworKysgYi9mcy85cC92ZnNfYWRkci5jCkBAIC03LDkgKzcsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19kZW50cnkuYyBiL2ZzLzlwL3Zmc19kZW50cnkuYwppbmRleCAyZGQ4MDZkLi4wNjJkYWE2IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZGVudHJ5LmMKKysrIGIvZnMvOXAvdmZzX2RlbnRyeS5jCkBAIC03LDkgKzcsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTQzLDQ3ICs0MiwxOCBAQAogI2luY2x1ZGUgImZpZC5oIgogCiAvKioKLSAqIHY5ZnNfZGVudHJ5X3ZhbGlkYXRlIC0gVkZTIGRjYWNoZSBob29rIHRvIHZhbGlkYXRlIGNhY2hlCi0gKiBAZGVudHJ5OiAgZGVudHJ5IHRoYXQgaXMgYmVpbmcgdmFsaWRhdGVkCi0gKiBAbmQ6IHBhdGggZGF0YQorICogdjlmc19kZW50cnlfZGVsZXRlIC0gY2FsbGVkIHdoZW4gZGVudHJ5IHJlZmNvdW50IGVxdWFscyAwCisgKiBAZGVudHJ5OiAgZGVudHJ5IGluIHF1ZXN0aW9uCiAgKgotICogZGNhY2hlIHJlYWxseSBzaG91bGRuJ3QgYmUgdXNlZCBmb3IgOVAyMDAwIGFzIGF0IGFsbCBkdWUgdG8KLSAqIHBvdGVudGlhbCBhdHRhY2hlZCBzZW1hbnRpY3MgdG8gZGlyZWN0b3J5IHRyYXZlcnNhbCAod2FsaykuCi0gKgotICogRlVUVVJFOiBsb29rIGludG8gaG93IHRvIHVzZSBkY2FjaGUgdG8gYWxsb3cgbXVsdGktc3RhZ2UKLSAqIHdhbGtzIGluIFBsYW4gOSAmIHBvdGVudGlhbCBmb3IgYmV0dGVyIGRjYWNoZSBvcGVyYXRpb24gd2hpY2gKLSAqIHdvdWxkIHJlbWFpbiB2YWxpZCBmb3IgUGxhbiA5IHNlbWFudGljcy4gIE9sZGVyIHZlcnNpb25zCi0gKiBoYWQgdmFsaWRhdGlvbiB2aWEgc3RhdCBmb3IgdGhvc2UgaW50ZXJlc3RlZC4gIEhvd2V2ZXIsIHNpbmNlCi0gKiBzdGF0IGhhcyB0aGUgc2FtZSBhcHByb3hpbWF0ZSBvdmVyaGVhZCBhcyB3YWxrIHRoZXJlIHJlYWxseQotICogaXMgbm8gZGlmZmVyZW5jZS4gIFRoZSBvbmx5IGltcHJvdmVtZW50IHdvdWxkIGJlIGZyb20gYQotICogdGltZS1kZWNheSBjYWNoZSBsaWtlIE5GUyBoYXMgYW5kIHRoYXQgdW5kZXJtaW5lcyB0aGUKLSAqIHN5bmNocm9ub3VzIG5hdHVyZSBvZiA5UDIwMDAuCisgKiBCeSByZXR1cm5pbmcgMSBoZXJlIHdlIHNob3VsZCByZW1vdmUgY2FjaGVpbmcgb2YgdW51c2VkCisgKiBkZW50cnkgY29tcG9uZW50cy4KICAqCiAgKi8KIAotc3RhdGljIGludCB2OWZzX2RlbnRyeV92YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQorc3RhdGljIGludCB2OWZzX2RlbnRyeV9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXN0cnVjdCBkZW50cnkgKmRjID0gY3VycmVudC0+ZnMtPnB3ZDsKLQotCWRwcmludGsoREVCVUdfVkZTLCAiZGVudHJ5OiAlcyAoJXApXG4iLCBkZW50cnktPmRfaW5hbWUsIGRlbnRyeSk7Ci0JaWYgKHY5ZnNfZmlkX2xvb2t1cChkZW50cnkpKSB7Ci0JCWRwcmludGsoREVCVUdfVkZTLCAiVkFMSURcbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQl3aGlsZSAoZGMgIT0gTlVMTCkgewotCQlpZiAoZGMgPT0gZGVudHJ5KSB7Ci0JCQlkcHJpbnRrKERFQlVHX1ZGUywgIlZBTElEXG4iKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWlmIChkYyA9PSBkYy0+ZF9wYXJlbnQpCi0JCQlicmVhazsKLQotCQlkYyA9IGRjLT5kX3BhcmVudDsKLQl9Ci0KLQlkcHJpbnRrKERFQlVHX1ZGUywgIklOVkFMSURcbiIpOwotCXJldHVybiAwOworCWRwcmludGsoREVCVUdfVkZTLCAiIGRlbnRyeTogJXMgKCVwKVxuIiwgZGVudHJ5LT5kX2luYW1lLCBkZW50cnkpOworCXJldHVybiAxOwogfQogCiAvKioKQEAgLTExOCw2ICs4OCw2IEBACiB9CiAKIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewotCS5kX3JldmFsaWRhdGUgPSB2OWZzX2RlbnRyeV92YWxpZGF0ZSwKKwkuZF9kZWxldGUgPSB2OWZzX2RlbnRyeV9kZWxldGUsCiAJLmRfcmVsZWFzZSA9IHY5ZnNfZGVudHJ5X3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2Rpci5jIGIvZnMvOXAvdmZzX2Rpci5jCmluZGV4IGFlNmQwMzIuLjc2NmYxMWYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kaXIuYworKysgYi9mcy85cC92ZnNfZGlyLmMKQEAgLTcsOSArNyw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFJvbiBNaW5uaWNoIDxybWlubmljaEBsYW5sLmdvdj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMjAyLDcgKzIwMSw2IEBACiAJCWZpbHAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJfQogCi0JZF9kcm9wKGZpbHAtPmZfZGVudHJ5KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2ZpbGUuYyBiL2ZzLzlwL3Zmc19maWxlLmMKaW5kZXggYzdlMTRkOS4uNTllNzQ0MSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2ZpbGUuYworKysgYi9mcy85cC92ZnNfZmlsZS5jCkBAIC03LDkgKzcsOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiBieSBSb24gTWlubmljaCA8cm1pbm5pY2hAbGFubC5nb3Y+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKQEAgLTUzLDk0ICs1Miw2OCBAQAogaW50IHY5ZnNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKLQlzdHJ1Y3Qgdjlmc19maWQgKnY5ZmlkLCAqZmlkOworCXN0cnVjdCB2OWZzX2ZpZCAqdmZpZDsKIAlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGwgPSBOVUxMOwotCWludCBvcGVuX21vZGUgPSAwOwotCXVuc2lnbmVkIGludCBpb3VuaXQgPSAwOwotCWludCBuZXdmaWQgPSAtMTsKLQlsb25nIHJlc3VsdCA9IC0xOworCWludCBvbW9kZTsKKwlpbnQgZmlkID0gVjlGU19OT0ZJRDsKKwlpbnQgZXJyOwogCiAJZHByaW50ayhERUJVR19WRlMsICJpbm9kZTogJXAgZmlsZTogJXAgXG4iLCBpbm9kZSwgZmlsZSk7CiAKLQl2OWZpZCA9IHY5ZnNfZmlkX2dldF9jcmVhdGVkKGZpbGUtPmZfZGVudHJ5KTsKLQlpZiAoIXY5ZmlkKQotCQl2OWZpZCA9IHY5ZnNfZmlkX2xvb2t1cChmaWxlLT5mX2RlbnRyeSk7Ci0KLQlpZiAoIXY5ZmlkKSB7CisJdmZpZCA9IHY5ZnNfZmlkX2xvb2t1cChmaWxlLT5mX2RlbnRyeSk7CisJaWYgKCF2ZmlkKSB7CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJDb3VsZG4ndCByZXNvbHZlIGZpZCBmcm9tIGRlbnRyeVxuIik7CiAJCXJldHVybiAtRUJBREY7CiAJfQogCi0JaWYgKCF2OWZpZC0+ZmlkY3JlYXRlKSB7Ci0JCWZpZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2OWZzX2ZpZCksIEdGUF9LRVJORUwpOwotCQlpZiAoZmlkID09IE5VTEwpIHsKLQkJCWRwcmludGsoREVCVUdfRVJST1IsICJPdXQgb2YgTWVtb3J5XG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJZmlkLT5maWRvcGVuID0gMDsKLQkJZmlkLT5maWRjcmVhdGUgPSAwOwotCQlmaWQtPmZpZGNsdW5rZWQgPSAwOwotCQlmaWQtPmlvdW5pdCA9IDA7Ci0JCWZpZC0+djlzZXMgPSB2OXNlczsKLQotCQluZXdmaWQgPSB2OWZzX2dldF9pZHBvb2woJnY5c2VzLT5maWRwb29sKTsKLQkJaWYgKG5ld2ZpZCA8IDApIHsKLQkJCWVwcmludGsoS0VSTl9XQVJOSU5HLCAibmV3ZmlkIGZhaWxzIVxuIik7Ci0JCQlyZXR1cm4gLUVOT1NQQzsKLQkJfQotCi0JCXJlc3VsdCA9Ci0JCSAgICB2OWZzX3Rfd2Fsayh2OXNlcywgdjlmaWQtPmZpZCwgbmV3ZmlkLCBOVUxMLCBOVUxMKTsKLQotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJdjlmc19wdXRfaWRwb29sKG5ld2ZpZCwgJnY5c2VzLT5maWRwb29sKTsKLQkJCWRwcmludGsoREVCVUdfRVJST1IsICJyZXdhbGsgZGlkbid0IHdvcmtcbiIpOwotCQkJcmV0dXJuIC1FQkFERjsKLQkJfQotCi0JCWZpZC0+ZmlkID0gbmV3ZmlkOwotCQl2OWZpZCA9IGZpZDsKLQkJLyogVE9ETzogZG8gc3BlY2lhbCB0aGluZ3MgZm9yIE9fRVhDTCwgT19OT0ZPTExPVywgT19TWU5DICovCi0JCS8qIHRyYW5zbGF0ZSBvcGVuIG1vZGUgYXBwcm9wcmlhdGVseSAqLwotCQlvcGVuX21vZGUgPSBmaWxlLT5mX2ZsYWdzICYgMHgzOwotCi0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19FWENMKQotCQkJb3Blbl9tb2RlIHw9IFY5RlNfT0VYQ0w7Ci0KLQkJaWYgKHY5c2VzLT5leHRlbmRlZCkgewotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX1RSVU5DKQotCQkJCW9wZW5fbW9kZSB8PSBWOUZTX09UUlVOQzsKLQotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkKLQkJCQlvcGVuX21vZGUgfD0gVjlGU19PQVBQRU5EOwotCQl9Ci0KLQkJcmVzdWx0ID0gdjlmc190X29wZW4odjlzZXMsIG5ld2ZpZCwgb3Blbl9tb2RlLCAmZmNhbGwpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJUFJJTlRfRkNBTExfRVJST1IoIm9wZW4gZmFpbGVkIiwgZmNhbGwpOwotCQkJa2ZyZWUoZmNhbGwpOwotCQkJcmV0dXJuIHJlc3VsdDsKLQkJfQotCi0JCWlvdW5pdCA9IGZjYWxsLT5wYXJhbXMucm9wZW4uaW91bml0OwotCQlrZnJlZShmY2FsbCk7Ci0JfSBlbHNlIHsKLQkJLyogY3JlYXRlIGNhc2UgKi8KLQkJbmV3ZmlkID0gdjlmaWQtPmZpZDsKLQkJaW91bml0ID0gdjlmaWQtPmlvdW5pdDsKLQkJdjlmaWQtPmZpZGNyZWF0ZSA9IDA7CisJZmlkID0gdjlmc19nZXRfaWRwb29sKCZ2OXNlcy0+ZmlkcG9vbCk7CisJaWYgKGZpZCA8IDApIHsKKwkJZXByaW50ayhLRVJOX1dBUk5JTkcsICJuZXdmaWQgZmFpbHMhXG4iKTsKKwkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gdjlmaWQ7CisJZXJyID0gdjlmc190X3dhbGsodjlzZXMsIHZmaWQtPmZpZCwgZmlkLCBOVUxMLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAicmV3YWxrIGRpZG4ndCB3b3JrXG4iKTsKKwkJZ290byBwdXRfZmlkOworCX0KIAotCXY5ZmlkLT5yZGlyX3BvcyA9IDA7Ci0JdjlmaWQtPnJkaXJfZmNhbGwgPSBOVUxMOwotCXY5ZmlkLT5maWRvcGVuID0gMTsKLQl2OWZpZC0+ZmlscCA9IGZpbGU7Ci0JdjlmaWQtPmlvdW5pdCA9IGlvdW5pdDsKKwkvKiBUT0RPOiBkbyBzcGVjaWFsIHRoaW5ncyBmb3IgT19FWENMLCBPX05PRk9MTE9XLCBPX1NZTkMgKi8KKwkvKiB0cmFuc2xhdGUgb3BlbiBtb2RlIGFwcHJvcHJpYXRlbHkgKi8KKwlvbW9kZSA9IHY5ZnNfdWZsYWdzMm9tb2RlKGZpbGUtPmZfZmxhZ3MpOworCWVyciA9IHY5ZnNfdF9vcGVuKHY5c2VzLCBmaWQsIG9tb2RlLCAmZmNhbGwpOworCWlmIChlcnIgPCAwKSB7CisJCVBSSU5UX0ZDQUxMX0VSUk9SKCJvcGVuIGZhaWxlZCIsIGZjYWxsKTsKKwkJZ290byBjbHVua19maWQ7CisJfQorCisJdmZpZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2OWZzX2ZpZCksIEdGUF9LRVJORUwpOworCWlmICh2ZmlkID09IE5VTEwpIHsKKwkJZHByaW50ayhERUJVR19FUlJPUiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGNsdW5rX2ZpZDsKKwl9CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB2ZmlkOworCXZmaWQtPmZpZCA9IGZpZDsKKwl2ZmlkLT5maWRvcGVuID0gMTsKKwl2ZmlkLT5maWRjbHVua2VkID0gMDsKKwl2ZmlkLT5pb3VuaXQgPSBmY2FsbC0+cGFyYW1zLnJvcGVuLmlvdW5pdDsKKwl2ZmlkLT5yZGlyX3BvcyA9IDA7CisJdmZpZC0+cmRpcl9mY2FsbCA9IE5VTEw7CisJdmZpZC0+ZmlscCA9IGZpbGU7CisJa2ZyZWUoZmNhbGwpOwogCiAJcmV0dXJuIDA7CisKK2NsdW5rX2ZpZDoKKwl2OWZzX3RfY2x1bmsodjlzZXMsIGZpZCk7CisKK3B1dF9maWQ6CisJdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKKwlrZnJlZShmY2FsbCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTI4OSw5ICsyNjIsNyBAQAogCQl0b3RhbCArPSByZXN1bHQ7CiAJfSB3aGlsZSAoY291bnQpOwogCi0JaWYoaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcykKIAkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtPmlfbWFwcGluZyk7Ci0KIAlyZXR1cm4gdG90YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNjNlNWIwMy4uMTMzZGIzNiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTcsOSArNyw4IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFJvbiBNaW5uaWNoIDxybWlubmljaEBsYW5sLmdvdj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpAQCAtMTI1LDYgKzEyNCwzOCBAQAogCXJldHVybiByZXM7CiB9CiAKK2ludCB2OWZzX3VmbGFnczJvbW9kZShpbnQgdWZsYWdzKQoreworCWludCByZXQ7CisKKwlyZXQgPSAwOworCXN3aXRjaCAodWZsYWdzJjMpIHsKKwlkZWZhdWx0OgorCWNhc2UgT19SRE9OTFk6CisJCXJldCA9IFY5RlNfT1JFQUQ7CisJCWJyZWFrOworCisJY2FzZSBPX1dST05MWToKKwkJcmV0ID0gVjlGU19PV1JJVEU7CisJCWJyZWFrOworCisJY2FzZSBPX1JEV1I6CisJCXJldCA9IFY5RlNfT1JEV1I7CisJCWJyZWFrOworCX0KKworCWlmICh1ZmxhZ3MgJiBPX0VYQ0wpCisJCXJldCB8PSBWOUZTX09FWENMOworCisJaWYgKHVmbGFncyAmIE9fVFJVTkMpCisJCXJldCB8PSBWOUZTX09UUlVOQzsKKworCWlmICh1ZmxhZ3MgJiBPX0FQUEVORCkKKwkJcmV0IHw9IFY5RlNfT0FQUEVORDsKKworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogdjlmc19ibGFua193c3RhdCAtIGhlbHBlciBmdW5jdGlvbiB0byBzZXR1cCBhIDlQIHN0YXQgc3RydWN0dXJlCiAgKiBAdjlzZXM6IDlQIHNlc3Npb24gaW5mbyAoZm9yIGRldGVybWluaW5nIGV4dGVuZGVkIG1vZGUpCkBAIC0xNjMsNyArMTk0LDcgQEAKIAogc3RydWN0IGlub2RlICp2OWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSBzYi0+c19mc19pbmZvOwogCiAJZHByaW50ayhERUJVR19WRlMsICJzdXBlciBibG9jazogJXAgbW9kZTogJW9cbiIsIHNiLCBtb2RlKTsKQEAgLTIyMiwxNzEgKzI1MywxMzcgQEAKIAlyZXR1cm4gaW5vZGU7CiB9CiAKLS8qKgotICogdjlmc19jcmVhdGUgLSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGZpbGVzIGFuZCBkaXJlY3RvcmllcwotICogQGRpcjogZGlyZWN0b3J5IGlub2RlIGZpbGUgaXMgYmVpbmcgY3JlYXRlZCBpbgotICogQGZpbGVfZGVudHJ5OiBkZW50cnkgZmlsZSBpcyBiZWluZyBjcmVhdGVkIGluCi0gKiBAcGVybTogcGVybWlzc2lvbnMgZmlsZSBpcyBiZWluZyBjcmVhdGVkIHdpdGgKLSAqIEBvcGVuX21vZGU6IHJlc3VsdGluZyBvcGVuIG1vZGUgZm9yIGZpbGUKLSAqCi0gKi8KLQogc3RhdGljIGludAotdjlmc19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsCi0JICAgIHN0cnVjdCBkZW50cnkgKmZpbGVfZGVudHJ5LAotCSAgICB1bnNpZ25lZCBpbnQgcGVybSwgdW5zaWduZWQgaW50IG9wZW5fbW9kZSkKK3Y5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHUzMiBwZmlkLCBjaGFyICpuYW1lLCB1MzIgcGVybSwKKwl1OCBtb2RlLCBjaGFyICpleHRlbnNpb24sIHUzMiAqZmlkcCwgc3RydWN0IHY5ZnNfcWlkICpxaWQsIHUzMiAqaW91bml0KQogewotCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKLQlzdHJ1Y3Qgdjlmc19maWQgKmRpcmZpZCA9Ci0JICAgIHY5ZnNfZmlkX2xvb2t1cChmaWxlX2RlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCB2OWZzX2ZpZCAqZmlkID0gTlVMTDsKLQlzdHJ1Y3QgaW5vZGUgKmZpbGVfaW5vZGUgPSBOVUxMOwotCXN0cnVjdCB2OWZzX2ZjYWxsICpmY2FsbCA9IE5VTEw7Ci0Jc3RydWN0IHY5ZnNfcWlkIHFpZDsKLQlpbnQgZGlyZmlkbnVtID0gLTE7Ci0JbG9uZyBuZXdmaWQgPSAtMTsKLQlpbnQgcmVzdWx0ID0gMDsKLQl1bnNpZ25lZCBpbnQgaW91bml0ID0gMDsKLQlpbnQgd2ZpZG5vID0gLTE7CisJdTMyIGZpZDsKIAlpbnQgZXJyOworCXN0cnVjdCB2OWZzX2ZjYWxsICpmY2FsbDsKIAotCXBlcm0gPSB1bml4bW9kZTJwOW1vZGUodjlzZXMsIHBlcm0pOwotCi0JZHByaW50ayhERUJVR19WRlMsICJkaXI6ICVwIGRlbnRyeTogJXAgcGVybTogJW8gbW9kZTogJW9cbiIsIGRpciwKLQkJZmlsZV9kZW50cnksIHBlcm0sIG9wZW5fbW9kZSk7Ci0KLQlpZiAoIWRpcmZpZCkKLQkJcmV0dXJuIC1FQkFERjsKLQotCWRpcmZpZG51bSA9IGRpcmZpZC0+ZmlkOwotCWlmIChkaXJmaWRudW0gPCAwKSB7Ci0JCWRwcmludGsoREVCVUdfRVJST1IsICJObyBmaWQgZm9yIHRoZSBkaXJlY3RvcnkgIyVsdVxuIiwKLQkJCWRpci0+aV9pbm8pOwotCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCWlmIChmaWxlX2RlbnRyeS0+ZF9pbm9kZSkgewotCQlkcHJpbnRrKERFQlVHX0VSUk9SLAotCQkJIk9kZC4gVGhlcmUgaXMgYW4gaW5vZGUgZm9yIGRpciAlbHUsIG5hbWUgOiVzOlxuIiwKLQkJCWRpci0+aV9pbm8sIGZpbGVfZGVudHJ5LT5kX25hbWUubmFtZSk7Ci0JCXJldHVybiAtRUVYSVNUOwotCX0KLQotCW5ld2ZpZCA9IHY5ZnNfZ2V0X2lkcG9vbCgmdjlzZXMtPmZpZHBvb2wpOwotCWlmIChuZXdmaWQgPCAwKSB7CisJZmlkID0gdjlmc19nZXRfaWRwb29sKCZ2OXNlcy0+ZmlkcG9vbCk7CisJaWYgKGZpZCA8IDApIHsKIAkJZXByaW50ayhLRVJOX1dBUk5JTkcsICJubyBmcmVlIGZpZHMgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCi0JcmVzdWx0ID0gdjlmc190X3dhbGsodjlzZXMsIGRpcmZpZG51bSwgbmV3ZmlkLCBOVUxMLCAmZmNhbGwpOwotCWlmIChyZXN1bHQgPCAwKSB7CisJZXJyID0gdjlmc190X3dhbGsodjlzZXMsIHBmaWQsIGZpZCwgTlVMTCwgJmZjYWxsKTsKKwlpZiAoZXJyIDwgMCkgewogCQlQUklOVF9GQ0FMTF9FUlJPUigiY2xvbmUgZXJyb3IiLCBmY2FsbCk7Ci0JCXY5ZnNfcHV0X2lkcG9vbChuZXdmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7Ci0JCW5ld2ZpZCA9IC0xOwotCQlnb3RvIENsZWFuVXBGaWQ7CisJCWdvdG8gcHV0X2ZpZDsKIAl9Ci0KIAlrZnJlZShmY2FsbCk7Ci0JZmNhbGwgPSBOVUxMOwogCi0JcmVzdWx0ID0gdjlmc190X2NyZWF0ZSh2OXNlcywgbmV3ZmlkLCAoY2hhciAqKWZpbGVfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCSAgICAgICBwZXJtLCBvcGVuX21vZGUsICZmY2FsbCk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKKwllcnIgPSB2OWZzX3RfY3JlYXRlKHY5c2VzLCBmaWQsIG5hbWUsIHBlcm0sIG1vZGUsIGV4dGVuc2lvbiwgJmZjYWxsKTsKKwlpZiAoZXJyIDwgMCkgewogCQlQUklOVF9GQ0FMTF9FUlJPUigiY3JlYXRlIGZhaWxzIiwgZmNhbGwpOwotCQlnb3RvIENsZWFuVXBGaWQ7CisJCWdvdG8gY2x1bmtfZmlkOwogCX0KIAotCWlvdW5pdCA9IGZjYWxsLT5wYXJhbXMucmNyZWF0ZS5pb3VuaXQ7Ci0JcWlkID0gZmNhbGwtPnBhcmFtcy5yY3JlYXRlLnFpZDsKKwlpZiAoaW91bml0KQorCQkqaW91bml0ID0gZmNhbGwtPnBhcmFtcy5yY3JlYXRlLmlvdW5pdDsKKworCWlmIChxaWQpCisJCSpxaWQgPSBmY2FsbC0+cGFyYW1zLnJjcmVhdGUucWlkOworCisJaWYgKGZpZHApCisJCSpmaWRwID0gZmlkOworCiAJa2ZyZWUoZmNhbGwpOwotCWZjYWxsID0gTlVMTDsKLQotCWlmICghKHBlcm0mVjlGU19ETURJUikpIHsKLQkJZmlkID0gdjlmc19maWRfY3JlYXRlKGZpbGVfZGVudHJ5LCB2OXNlcywgbmV3ZmlkLCAxKTsKLQkJZHByaW50ayhERUJVR19WRlMsICJmaWQgJXAgJWRcbiIsIGZpZCwgZmlkLT5maWRjcmVhdGUpOwotCQlpZiAoIWZpZCkgewotCQkJcmVzdWx0ID0gLUVOT01FTTsKLQkJCWdvdG8gQ2xlYW5VcEZpZDsKLQkJfQotCi0JCWZpZC0+cWlkID0gcWlkOwotCQlmaWQtPmlvdW5pdCA9IGlvdW5pdDsKLQl9IGVsc2UgewotCQllcnIgPSB2OWZzX3RfY2x1bmsodjlzZXMsIG5ld2ZpZCk7Ci0JCW5ld2ZpZCA9IC0xOwotCQlpZiAoZXJyIDwgMCkKLQkJCWRwcmludGsoREVCVUdfRVJST1IsICJjbHVuayBmb3IgbWtkaXIgZmFpbGVkOiAlZFxuIiwgZXJyKTsKLQl9Ci0KLQkvKiB3YWxrIHRvIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUgYW5kIHB1dCB0aGUgZmlkIGluIHRoZSBkZW50cnkgKi8KLQl3Zmlkbm8gPSB2OWZzX2dldF9pZHBvb2woJnY5c2VzLT5maWRwb29sKTsKLQlpZiAod2ZpZG5vIDwgMCkgewotCQllcHJpbnRrKEtFUk5fV0FSTklORywgIm5vIGZyZWUgZmlkcyBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlyZXN1bHQgPSB2OWZzX3Rfd2Fsayh2OXNlcywgZGlyZmlkbnVtLCB3Zmlkbm8sCi0JCShjaGFyICopIGZpbGVfZGVudHJ5LT5kX25hbWUubmFtZSwgJmZjYWxsKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlQUklOVF9GQ0FMTF9FUlJPUigiY2xvbmUgZXJyb3IiLCBmY2FsbCk7Ci0JCXY5ZnNfcHV0X2lkcG9vbCh3Zmlkbm8sICZ2OXNlcy0+ZmlkcG9vbCk7Ci0JCXdmaWRubyA9IC0xOwotCQlnb3RvIENsZWFuVXBGaWQ7Ci0JfQotCWtmcmVlKGZjYWxsKTsKLQlmY2FsbCA9IE5VTEw7Ci0KLQlpZiAoIXY5ZnNfZmlkX2NyZWF0ZShmaWxlX2RlbnRyeSwgdjlzZXMsIHdmaWRubywgMCkpIHsKLQkJdjlmc19wdXRfaWRwb29sKHdmaWRubywgJnY5c2VzLT5maWRwb29sKTsKLQotCQlnb3RvIENsZWFuVXBGaWQ7Ci0JfQotCi0JaWYgKChwZXJtICYgVjlGU19ETVNZTUxJTkspIHx8IChwZXJtICYgVjlGU19ETUxJTkspIHx8Ci0JICAgIChwZXJtICYgVjlGU19ETU5BTUVEUElQRSkgfHwgKHBlcm0gJiBWOUZTX0RNU09DS0VUKSB8fAotCSAgICAocGVybSAmIFY5RlNfRE1ERVZJQ0UpKQotCQlyZXR1cm4gMDsKLQotCXJlc3VsdCA9IHY5ZnNfdF9zdGF0KHY5c2VzLCB3Zmlkbm8sICZmY2FsbCk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJUFJJTlRfRkNBTExfRVJST1IoInN0YXQgZXJyb3IiLCBmY2FsbCk7Ci0JCWdvdG8gQ2xlYW5VcEZpZDsKLQl9Ci0KLQotCWZpbGVfaW5vZGUgPSB2OWZzX2dldF9pbm9kZShzYiwKLQkJcDltb2RlMnVuaXhtb2RlKHY5c2VzLCBmY2FsbC0+cGFyYW1zLnJzdGF0LnN0YXQubW9kZSkpOwotCi0JaWYgKCghZmlsZV9pbm9kZSkgfHwgSVNfRVJSKGZpbGVfaW5vZGUpKSB7Ci0JCWRwcmludGsoREVCVUdfRVJST1IsICJjcmVhdGUgaW5vZGUgZmFpbGVkXG4iKTsKLQkJcmVzdWx0ID0gLUVCQURGOwotCQlnb3RvIENsZWFuVXBGaWQ7Ci0JfQotCi0Jdjlmc19zdGF0Mmlub2RlKCZmY2FsbC0+cGFyYW1zLnJzdGF0LnN0YXQsIGZpbGVfaW5vZGUsIHNiKTsKLQlrZnJlZShmY2FsbCk7Ci0JZmNhbGwgPSBOVUxMOwotCWZpbGVfZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7Ci0JZF9pbnN0YW50aWF0ZShmaWxlX2RlbnRyeSwgZmlsZV9pbm9kZSk7Ci0KIAlyZXR1cm4gMDsKIAotICAgICAgQ2xlYW5VcEZpZDoKK2NsdW5rX2ZpZDoKKwl2OWZzX3RfY2x1bmsodjlzZXMsIGZpZCk7CisJZmlkID0gVjlGU19OT0ZJRDsKKworcHV0X2ZpZDoKKwlpZiAoZmlkID49IDApCisJCXY5ZnNfcHV0X2lkcG9vbChmaWQsICZ2OXNlcy0+ZmlkcG9vbCk7CisKKwlrZnJlZShmY2FsbCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCB2OWZzX2ZpZCoKK3Y5ZnNfY2xvbmVfd2FsayhzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzLCB1MzIgZmlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IGVycjsKKwl1MzIgbmZpZDsKKwlzdHJ1Y3Qgdjlmc19maWQgKnJldDsKKwlzdHJ1Y3Qgdjlmc19mY2FsbCAqZmNhbGw7CisKKwluZmlkID0gdjlmc19nZXRfaWRwb29sKCZ2OXNlcy0+ZmlkcG9vbCk7CisJaWYgKG5maWQgPCAwKSB7CisJCWVwcmludGsoS0VSTl9XQVJOSU5HLCAibm8gZnJlZSBmaWRzIGF2YWlsYWJsZVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCX0KKworCWVyciA9IHY5ZnNfdF93YWxrKHY5c2VzLCBmaWQsIG5maWQsIChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCSZmY2FsbCk7CisKKwlpZiAoZXJyIDwgMCkgeworCQlQUklOVF9GQ0FMTF9FUlJPUigid2FsayBlcnJvciIsIGZjYWxsKTsKKwkJdjlmc19wdXRfaWRwb29sKG5maWQsICZ2OXNlcy0+ZmlkcG9vbCk7CisJCWdvdG8gZXJyb3I7CisJfQorCiAJa2ZyZWUoZmNhbGwpOwogCWZjYWxsID0gTlVMTDsKKwlyZXQgPSB2OWZzX2ZpZF9jcmVhdGUodjlzZXMsIG5maWQpOworCWlmICghcmV0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gY2x1bmtfZmlkOworCX0KIAotCWlmIChuZXdmaWQgPj0gMCkgewotIAkJZXJyID0gdjlmc190X2NsdW5rKHY5c2VzLCBuZXdmaWQpOwotIAkJaWYgKGVyciA8IDApCi0gCQkJZHByaW50ayhERUJVR19FUlJPUiwgImNsdW5rIGZhaWxlZDogJWRcbiIsIGVycik7CisJZXJyID0gdjlmc19maWRfaW5zZXJ0KHJldCwgZGVudHJ5KTsKKwlpZiAoZXJyIDwgMCkgeworCQl2OWZzX2ZpZF9kZXN0cm95KHJldCk7CisJCWdvdG8gY2x1bmtfZmlkOwogCX0KLQlpZiAod2ZpZG5vID49IDApIHsKLSAJCWVyciA9IHY5ZnNfdF9jbHVuayh2OXNlcywgd2ZpZG5vKTsKLSAJCWlmIChlcnIgPCAwKQotIAkJCWRwcmludGsoREVCVUdfRVJST1IsICJjbHVuayBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCisJcmV0dXJuIHJldDsKKworY2x1bmtfZmlkOgorCXY5ZnNfdF9jbHVuayh2OXNlcywgbmZpZCk7CisKK2Vycm9yOgorCWtmcmVlKGZjYWxsKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgc3RydWN0IGlub2RlICoKK3Y5ZnNfaW5vZGVfZnJvbV9maWQoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgdTMyIGZpZCwKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBlcnIsIHVtb2RlOworCXN0cnVjdCBpbm9kZSAqcmV0OworCXN0cnVjdCB2OWZzX2ZjYWxsICpmY2FsbDsKKworCXJldCA9IE5VTEw7CisJZXJyID0gdjlmc190X3N0YXQodjlzZXMsIGZpZCwgJmZjYWxsKTsKKwlpZiAoZXJyKSB7CisJCVBSSU5UX0ZDQUxMX0VSUk9SKCJzdGF0IGVycm9yIiwgZmNhbGwpOworCQlnb3RvIGVycm9yOwogCX0KLQlyZXR1cm4gcmVzdWx0OworCisJdW1vZGUgPSBwOW1vZGUydW5peG1vZGUodjlzZXMsIGZjYWxsLT5wYXJhbXMucnN0YXQuc3RhdC5tb2RlKTsKKwlyZXQgPSB2OWZzX2dldF9pbm9kZShzYiwgdW1vZGUpOworCWlmIChJU19FUlIocmV0KSkgeworCQllcnIgPSBQVFJfRVJSKHJldCk7CisJCXJldCA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJdjlmc19zdGF0Mmlub2RlKCZmY2FsbC0+cGFyYW1zLnJzdGF0LnN0YXQsIHJldCwgc2IpOworCWtmcmVlKGZjYWxsKTsKKwlyZXR1cm4gcmV0OworCitlcnJvcjoKKwlrZnJlZShmY2FsbCk7CisJaWYgKHJldCkKKwkJaXB1dChyZXQpOworCisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAogLyoqCkBAIC00NDAsMjAgKzQzNyw5NyBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbnQKK3Y5ZnNfb3Blbl9jcmVhdGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorCiAvKioKICAqIHY5ZnNfdmZzX2NyZWF0ZSAtIFZGUyBob29rIHRvIGNyZWF0ZSBmaWxlcwogICogQGlub2RlOiBkaXJlY3RvcnkgaW5vZGUgdGhhdCBpcyBiZWluZyBkZWxldGVkCiAgKiBAZGVudHJ5OiAgZGVudHJ5IHRoYXQgaXMgYmVpbmcgZGVsZXRlZAotICogQHBlcm06IGNyZWF0ZSBwZXJtaXNzaW9ucworICogQG1vZGU6IGNyZWF0ZSBwZXJtaXNzaW9ucwogICogQG5kOiBwYXRoIGluZm9ybWF0aW9uCiAgKgogICovCiAKIHN0YXRpYyBpbnQKLXY5ZnNfdmZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBwZXJtLAordjlmc192ZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAogCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlyZXR1cm4gdjlmc19jcmVhdGUoaW5vZGUsIGRlbnRyeSwgcGVybSwgT19SRFdSKTsKKwlpbnQgZXJyOworCXUzMiBmaWQsIHBlcm0sIGlvdW5pdDsKKwlpbnQgZmxhZ3M7CisJc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlczsKKwlzdHJ1Y3Qgdjlmc19maWQgKmRmaWQsICp2ZmlkLCAqZmZpZDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCB2OWZzX3FpZCBxaWQ7CisJc3RydWN0IGZpbGUgKmZpbHA7CisKKwlpbm9kZSA9IE5VTEw7CisJdmZpZCA9IE5VTEw7CisJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7CisJZGZpZCA9IHY5ZnNfZmlkX2xvb2t1cChkZW50cnktPmRfcGFyZW50KTsKKwlwZXJtID0gdW5peG1vZGUycDltb2RlKHY5c2VzLCBtb2RlKTsKKworCWlmIChuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikKKwkJZmxhZ3MgPSBuZC0+aW50ZW50Lm9wZW4uZmxhZ3MgLSAxOworCWVsc2UKKwkJZmxhZ3MgPSBPX1JEV1I7CisKKwllcnIgPSB2OWZzX2NyZWF0ZSh2OXNlcywgZGZpZC0+ZmlkLCAoY2hhciAqKSBkZW50cnktPmRfbmFtZS5uYW1lLAorCQlwZXJtLCB2OWZzX3VmbGFnczJvbW9kZShmbGFncyksIE5VTEwsICZmaWQsICZxaWQsICZpb3VuaXQpOworCisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCXZmaWQgPSB2OWZzX2Nsb25lX3dhbGsodjlzZXMsIGRmaWQtPmZpZCwgZGVudHJ5KTsKKwlpZiAoSVNfRVJSKHZmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIodmZpZCk7CisJCXZmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgdmZpZC0+ZmlkLCBkaXItPmlfc2IpOworCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQlpbm9kZSA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKworCWlmIChuZCAmJiBuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikgeworCQlmZmlkID0gdjlmc19maWRfY3JlYXRlKHY5c2VzLCBmaWQpOworCQlpZiAoIWZmaWQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlmaWxwID0gbG9va3VwX2luc3RhbnRpYXRlX2ZpbHAobmQsIGRlbnRyeSwgdjlmc19vcGVuX2NyZWF0ZWQpOworCQlpZiAoSVNfRVJSKGZpbHApKSB7CisJCQl2OWZzX2ZpZF9kZXN0cm95KGZmaWQpOworCQkJcmV0dXJuIFBUUl9FUlIoZmlscCk7CisJCX0KKworCQlmZmlkLT5yZGlyX3BvcyA9IDA7CisJCWZmaWQtPnJkaXJfZmNhbGwgPSBOVUxMOworCQlmZmlkLT5maWRvcGVuID0gMTsKKwkJZmZpZC0+aW91bml0ID0gaW91bml0OworCQlmZmlkLT5maWxwID0gZmlscDsKKwkJZmlscC0+cHJpdmF0ZV9kYXRhID0gZmZpZDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJaWYgKHZmaWQpCisJCXY5ZnNfZmlkX2Rlc3Ryb3kodmZpZCk7CisKKwlpZiAoaW5vZGUpCisJCWlwdXQoaW5vZGUpOworCisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC00NjQsOSArNTM4LDU3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgdjlmc192ZnNfbWtkaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQgdjlmc192ZnNfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCiB7Ci0JcmV0dXJuIHY5ZnNfY3JlYXRlKGlub2RlLCBkZW50cnksIG1vZGUgfCBTX0lGRElSLCBPX1JET05MWSk7CisJaW50IGVycjsKKwl1MzIgZmlkLCBwZXJtOworCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CisJc3RydWN0IHY5ZnNfZmlkICpkZmlkLCAqdmZpZDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBOVUxMOworCXZmaWQgPSBOVUxMOworCXY5c2VzID0gdjlmc19pbm9kZTJ2OXNlcyhkaXIpOworCWRmaWQgPSB2OWZzX2ZpZF9sb29rdXAoZGVudHJ5LT5kX3BhcmVudCk7CisJcGVybSA9IHVuaXhtb2RlMnA5bW9kZSh2OXNlcywgbW9kZSB8IFNfSUZESVIpOworCisJZXJyID0gdjlmc19jcmVhdGUodjlzZXMsIGRmaWQtPmZpZCwgKGNoYXIgKikgZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJcGVybSwgVjlGU19PUkVBRCwgTlVMTCwgJmZpZCwgTlVMTCwgTlVMTCk7CisKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoREVCVUdfRVJST1IsICJjcmVhdGUgZXJyb3IgJWRcbiIsIGVycik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gdjlmc190X2NsdW5rKHY5c2VzLCBmaWQpOworCWlmIChlcnIpIHsKKwkJZHByaW50ayhERUJVR19FUlJPUiwgImNsdW5rIGVycm9yICVkXG4iLCBlcnIpOworCQlnb3RvIGVycm9yOworCX0KKworCXZmaWQgPSB2OWZzX2Nsb25lX3dhbGsodjlzZXMsIGRmaWQtPmZpZCwgZGVudHJ5KTsKKwlpZiAoSVNfRVJSKHZmaWQpKSB7CisJCWVyciA9IFBUUl9FUlIodmZpZCk7CisJCXZmaWQgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgdmZpZC0+ZmlkLCBkaXItPmlfc2IpOworCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQlpbm9kZSA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJaWYgKHZmaWQpCisJCXY5ZnNfZmlkX2Rlc3Ryb3kodmZpZCk7CisKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTQ5MSwxMCArNjEzLDExIEBACiAJaW50IHJlc3VsdCA9IDA7CiAKIAlkcHJpbnRrKERFQlVHX1ZGUywgImRpcjogJXAgZGVudHJ5OiAoJXMpICVwIG5hbWVpZGF0YTogJXBcbiIsCi0JCWRpciwgZGVudHJ5LT5kX2luYW1lLCBkZW50cnksIG5hbWVpZGF0YSk7CisJCWRpciwgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LCBuYW1laWRhdGEpOwogCiAJc2IgPSBkaXItPmlfc2I7CiAJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7CisJZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJZGlyZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQpOwogCiAJaWYgKCFkaXJmaWQpIHsKQEAgLTUxNiw5ICs2MzksOCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKIAl9CiAKLQlyZXN1bHQgPQotCSAgICB2OWZzX3Rfd2Fsayh2OXNlcywgZGlyZmlkbnVtLCBuZXdmaWQsIChjaGFyICopZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCU5VTEwpOworCXJlc3VsdCA9IHY5ZnNfdF93YWxrKHY5c2VzLCBkaXJmaWRudW0sIG5ld2ZpZCwKKwkJKGNoYXIgKilkZW50cnktPmRfbmFtZS5uYW1lLCBOVUxMKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQl2OWZzX3B1dF9pZHBvb2wobmV3ZmlkLCAmdjlzZXMtPmZpZHBvb2wpOwogCQlpZiAocmVzdWx0ID09IC1FTk9FTlQpIHsKQEAgLTU1MSwxNiArNjczLDE4IEBACiAKIAlpbm9kZS0+aV9pbm8gPSB2OWZzX3FpZDJpbm8oJmZjYWxsLT5wYXJhbXMucnN0YXQuc3RhdC5xaWQpOwogCi0JZmlkID0gdjlmc19maWRfY3JlYXRlKGRlbnRyeSwgdjlzZXMsIG5ld2ZpZCwgMCk7CisJZmlkID0gdjlmc19maWRfY3JlYXRlKHY5c2VzLCBuZXdmaWQpOwogCWlmIChmaWQgPT0gTlVMTCkgewogCQlkcHJpbnRrKERFQlVHX0VSUk9SLCAiY291bGRuJ3QgaW5zZXJ0XG4iKTsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBGcmVlRmNhbGw7CiAJfQogCi0JZmlkLT5xaWQgPSBmY2FsbC0+cGFyYW1zLnJzdGF0LnN0YXQucWlkOworCXJlc3VsdCA9IHY5ZnNfZmlkX2luc2VydChmaWQsIGRlbnRyeSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gRnJlZUZjYWxsOwogCi0JZGVudHJ5LT5kX29wID0gJnY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CisJZmlkLT5xaWQgPSBmY2FsbC0+cGFyYW1zLnJzdGF0LnN0YXQucWlkOwogCXY5ZnNfc3RhdDJpbm9kZSgmZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LCBpbm9kZSwgaW5vZGUtPmlfc2IpOwogCiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CkBAIC04ODYsMTIgKzEwMTAsMTQgQEAKIAl9CiAKIAkvKiBjb3B5IGV4dGVuc2lvbiBidWZmZXIgaW50byBidWZmZXIgKi8KLQlpZiAoZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LmV4dGVuc2lvbi5sZW4rMSA8IGJ1ZmxlbikKKwlpZiAoZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LmV4dGVuc2lvbi5sZW4gPCBidWZsZW4pCiAJCWJ1ZmxlbiA9IGZjYWxsLT5wYXJhbXMucnN0YXQuc3RhdC5leHRlbnNpb24ubGVuICsgMTsKIAotCW1lbWNweShidWZmZXIsIGZjYWxsLT5wYXJhbXMucnN0YXQuc3RhdC5leHRlbnNpb24uc3RyLCBidWZsZW4gLSAxKTsKKwltZW1tb3ZlKGJ1ZmZlciwgZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LmV4dGVuc2lvbi5zdHIsIGJ1ZmxlbiAtIDEpOwogCWJ1ZmZlcltidWZsZW4tMV0gPSAwOwogCisJZHByaW50ayhERUJVR19FUlJPUiwgIiVzIC0+ICUuKnMgKCVzKVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSwgZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LmV4dGVuc2lvbi5sZW4sCisJCWZjYWxsLT5wYXJhbXMucnN0YXQuc3RhdC5leHRlbnNpb24uc3RyLCBidWZmZXIpOwogCXJldHZhbCA9IGJ1ZmxlbjsKIAogICAgICAgRnJlZUZjYWxsOgpAQCAtOTgzLDUzICsxMTA5LDYwIEBACiBzdGF0aWMgaW50IHY5ZnNfdmZzX21rc3BlY2lhbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCWludCBtb2RlLCBjb25zdCBjaGFyICpleHRlbnNpb24pCiB7Ci0JaW50IGVyciwgcmV0dmFsOworCWludCBlcnI7CisJdTMyIGZpZCwgcGVybTsKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwotCXN0cnVjdCB2OWZzX2ZjYWxsICpmY2FsbDsKLQlzdHJ1Y3Qgdjlmc19maWQgKmZpZDsKLQlzdHJ1Y3Qgdjlmc193c3RhdCB3c3RhdDsKKwlzdHJ1Y3Qgdjlmc19maWQgKmRmaWQsICp2ZmlkOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKKwlpbm9kZSA9IE5VTEw7CisJdmZpZCA9IE5VTEw7CiAJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7Ci0JcmV0dmFsID0gLUVQRVJNOwotCWZjYWxsID0gTlVMTDsKKwlkZmlkID0gdjlmc19maWRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQpOworCXBlcm0gPSB1bml4bW9kZTJwOW1vZGUodjlzZXMsIG1vZGUpOwogCiAJaWYgKCF2OXNlcy0+ZXh0ZW5kZWQpIHsKIAkJZHByaW50ayhERUJVR19FUlJPUiwgIm5vdCBleHRlbmRlZFxuIik7Ci0JCWdvdG8gZnJlZV9tZW07CisJCXJldHVybiAtRVBFUk07CiAJfQogCi0JLyogaXNzdWUgYSBjcmVhdGUgKi8KLQlyZXR2YWwgPSB2OWZzX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgMCk7Ci0JaWYgKHJldHZhbCAhPSAwKQotCQlnb3RvIGZyZWVfbWVtOworCWVyciA9IHY5ZnNfY3JlYXRlKHY5c2VzLCBkZmlkLT5maWQsIChjaGFyICopIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCXBlcm0sIFY5RlNfT1JFQUQsIChjaGFyICopIGV4dGVuc2lvbiwgJmZpZCwgTlVMTCwgTlVMTCk7CiAKLQlmaWQgPSB2OWZzX2ZpZF9nZXRfY3JlYXRlZChkZW50cnkpOwotCWlmICghZmlkKSB7Ci0JCWRwcmludGsoREVCVUdfRVJST1IsICJjb3VsZG4ndCByZXNvbHZlIGZpZCBmcm9tIGRlbnRyeVxuIik7Ci0JCWdvdG8gZnJlZV9tZW07CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCWVyciA9IHY5ZnNfdF9jbHVuayh2OXNlcywgZmlkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJdmZpZCA9IHY5ZnNfY2xvbmVfd2Fsayh2OXNlcywgZGZpZC0+ZmlkLCBkZW50cnkpOworCWlmIChJU19FUlIodmZpZCkpIHsKKwkJZXJyID0gUFRSX0VSUih2ZmlkKTsKKwkJdmZpZCA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JLyogaXNzdWUgYSBUd3N0YXQgKi8KLQl2OWZzX2JsYW5rX3dzdGF0KCZ3c3RhdCk7Ci0Jd3N0YXQubXVpZCA9IHY5c2VzLT5uYW1lOwotCXdzdGF0LmV4dGVuc2lvbiA9IChjaGFyICopIGV4dGVuc2lvbjsKLQlyZXR2YWwgPSB2OWZzX3Rfd3N0YXQodjlzZXMsIGZpZC0+ZmlkLCAmd3N0YXQsICZmY2FsbCk7Ci0JaWYgKHJldHZhbCA8IDApIHsKLQkJUFJJTlRfRkNBTExfRVJST1IoIndzdGF0IGVycm9yIiwgZmNhbGwpOwotCQlnb3RvIGZyZWVfbWVtOworCWlub2RlID0gdjlmc19pbm9kZV9mcm9tX2ZpZCh2OXNlcywgdmZpZC0+ZmlkLCBkaXItPmlfc2IpOworCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCQlpbm9kZSA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gdjlmc190X2NsdW5rKHY5c2VzLCBmaWQtPmZpZCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJZHByaW50ayhERUJVR19FUlJPUiwgImNsdW5rIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCWdvdG8gZnJlZV9tZW07Ci0JfQorCWRlbnRyeS0+ZF9vcCA9ICZ2OWZzX2RlbnRyeV9vcGVyYXRpb25zOworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJcmV0dXJuIDA7CiAKLQlkX2Ryb3AoZGVudHJ5KTsJCS8qIEZJRCAtIHdpbGwgdGhpcyBhbHNvIGNsdW5rPyAqLworZXJyb3I6CisJaWYgKHZmaWQpCisJCXY5ZnNfZmlkX2Rlc3Ryb3kodmZpZCk7CiAKLWZyZWVfbWVtOgotCWtmcmVlKGZjYWxsKTsKLQlyZXR1cm4gcmV0dmFsOworCWlmIChpbm9kZSkKKwkJaXB1dChpbm9kZSk7CisKKwlyZXR1cm4gZXJyOworCiB9CiAKIC8qKgpAQCAtMTA4MSw3ICsxMjE0LDcgQEAKIAl9CiAKIAluYW1lID0gX19nZXRuYW1lKCk7Ci0Jc3ByaW50ZihuYW1lLCAiaGFyZGxpbmsoJWQpXG4iLCBvbGRmaWQtPmZpZCk7CisJc3ByaW50ZihuYW1lLCAiJWRcbiIsIG9sZGZpZC0+ZmlkKTsKIAlyZXR2YWwgPSB2OWZzX3Zmc19ta3NwZWNpYWwoZGlyLCBkZW50cnksIFY5RlNfRE1MSU5LLCBuYW1lKTsKIAlfX3B1dG5hbWUobmFtZSk7CiAKQEAgLTExMTAsNiArMTI0Myw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJbmFtZSA9IF9fZ2V0bmFtZSgpOworCWlmICghbmFtZSkKKwkJcmV0dXJuIC1FTk9NRU07CiAJLyogYnVpbGQgZXh0ZW5zaW9uICovCiAJaWYgKFNfSVNCTEsobW9kZSkpCiAJCXNwcmludGYobmFtZSwgImIgJXUgJXUiLCBNQUpPUihyZGV2KSwgTUlOT1IocmRldikpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX3N1cGVyLmMgYi9mcy85cC92ZnNfc3VwZXIuYwppbmRleCAyYzRmYTc1Li5iMGEwYWU1IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfc3VwZXIuYworKysgYi9mcy85cC92ZnNfc3VwZXIuYwpAQCAtOCw5ICs4LDggQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgUm9uIE1pbm5pY2ggPHJtaW5uaWNoQGxhbmwuZ292PgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCkBAIC0xNDYsNyArMTQ1LDYgQEAKIAlpbm9kZS0+aV9naWQgPSBnaWQ7CiAKIAlyb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKLQogCWlmICghcm9vdCkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIHB1dF9iYWNrX3NiOwpAQCAtMTU4LDE1ICsxNTYsMjAgQEAKIAlpZiAoc3RhdF9yZXN1bHQgPCAwKSB7CiAJCWRwcmludGsoREVCVUdfRVJST1IsICJzdGF0IGVycm9yXG4iKTsKIAkJdjlmc190X2NsdW5rKHY5c2VzLCBuZXdmaWQpOwotCQl2OWZzX3B1dF9pZHBvb2wobmV3ZmlkLCAmdjlzZXMtPmZpZHBvb2wpOwogCX0gZWxzZSB7CiAJCS8qIFNldHVwIHRoZSBSb290IElub2RlICovCi0JCXJvb3RfZmlkID0gdjlmc19maWRfY3JlYXRlKHJvb3QsIHY5c2VzLCBuZXdmaWQsIDApOworCQlyb290X2ZpZCA9IHY5ZnNfZmlkX2NyZWF0ZSh2OXNlcywgbmV3ZmlkKTsKIAkJaWYgKHJvb3RfZmlkID09IE5VTEwpIHsKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQlnb3RvIHB1dF9iYWNrX3NiOwogCQl9CiAKKwkJcmV0dmFsID0gdjlmc19maWRfaW5zZXJ0KHJvb3RfZmlkLCByb290KTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWtmcmVlKGZjYWxsKTsKKwkJCWdvdG8gcHV0X2JhY2tfc2I7CisJCX0KKwogCQlyb290X2ZpZC0+cWlkID0gZmNhbGwtPnBhcmFtcy5yc3RhdC5zdGF0LnFpZDsKIAkJcm9vdC0+ZF9pbm9kZS0+aV9pbm8gPQogCQkgICAgdjlmc19xaWQyaW5vKCZmY2FsbC0+cGFyYW1zLnJzdGF0LnN0YXQucWlkKTsKQEAgLTI1OCw3ICsyNjEsNyBAQAogfTsKIAogc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdjlmc19mc190eXBlID0gewotCS5uYW1lID0gIjlQIiwKKwkubmFtZSA9ICI5cCIsCiAJLmdldF9zYiA9IHY5ZnNfZ2V0X3NiLAogCS5raWxsX3NiID0gdjlmc19raWxsX3N1cGVyLAogCS5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggZTk3NDliMC4uYzhkMGEyMCAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC04NTksMTggKzg1OSw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQKIAkgIHJhbWZzLgogCi1jb25maWcgUkVMQVlGU19GUwotCXRyaXN0YXRlICJSZWxheWZzIGZpbGUgc3lzdGVtIHN1cHBvcnQiCi0JLS0taGVscC0tLQotCSAgUmVsYXlmcyBpcyBhIGhpZ2gtc3BlZWQgZGF0YSByZWxheSBmaWxlc3lzdGVtIGRlc2lnbmVkIHRvIHByb3ZpZGUKLQkgIGFuIGVmZmljaWVudCBtZWNoYW5pc20gZm9yIHRvb2xzIGFuZCBmYWNpbGl0aWVzIHRvIHJlbGF5IGxhcmdlCi0JICBhbW91bnRzIG9mIGRhdGEgZnJvbSBrZXJuZWwgc3BhY2UgdG8gdXNlciBzcGFjZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQotCSAgY2FsbGVkIHJlbGF5ZnMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBDT05GSUdGU19GUwogCXRyaXN0YXRlICJVc2Vyc3BhY2UtZHJpdmVuIGNvbmZpZ3VyYXRpb24gZmlsZXN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCAxZGI3MTEzLi4wODBiMzg2IDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtOTEsNyArOTEsNiBAQAogb2JqLSQoQ09ORklHX0FERlNfRlMpCQkrPSBhZGZzLwogb2JqLSQoQ09ORklHX0ZVU0VfRlMpCQkrPSBmdXNlLwogb2JqLSQoQ09ORklHX1VERl9GUykJCSs9IHVkZi8KLW9iai0kKENPTkZJR19SRUxBWUZTX0ZTKQkrPSByZWxheWZzLwogb2JqLSQoQ09ORklHX1NVTl9PUEVOUFJPTUZTKQkrPSBvcGVucHJvbWZzLwogb2JqLSQoQ09ORklHX0pGU19GUykJCSs9IGpmcy8KIG9iai0kKENPTkZJR19YRlNfRlMpCQkrPSB4ZnMvCmRpZmYgLS1naXQgYS9mcy9hZGZzL2ZpbGUuYyBiL2ZzL2FkZnMvZmlsZS5jCmluZGV4IGFmZWJiZmQuLjZhZjEwODggMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvZmlsZS5jCisrKyBiL2ZzL2FkZnMvZmlsZS5jCkBAIC0xOSwxMSArMTksNyBAQAogICoKICAqICBhZGZzIHJlZ3VsYXIgZmlsZSBoYW5kbGluZyBwcmltaXRpdmVzICAgICAgICAgICAKICAqLwotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4JCQkvKiBmb3IgZmlsZV9mc3luYygpICovCiAjaW5jbHVkZSA8bGludXgvYWRmc19mcy5oPgogCmRpZmYgLS1naXQgYS9mcy9hZGZzL3N1cGVyLmMgYi9mcy9hZGZzL3N1cGVyLmMKaW5kZXggMjQzOTYzMi4uMjUyYWJkYSAxMDA2NDQKLS0tIGEvZnMvYWRmcy9zdXBlci5jCisrKyBiL2ZzL2FkZnMvc3VwZXIuYwpAQCAtMjQxLDcgKzI0MSw4IEBACiB7CiAJYWRmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiYWRmc19pbm9kZV9jYWNoZSIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhZGZzX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAoYWRmc19pbm9kZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9hZmZzL3N1cGVyLmMgYi9mcy9hZmZzL3N1cGVyLmMKaW5kZXggYWFlYzAxNS4uNGQ3ZTViMSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9zdXBlci5jCisrKyBiL2ZzL2FmZnMvc3VwZXIuYwpAQCAtOTgsNyArOTgsOCBAQAogewogCWFmZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImFmZnNfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgYWZmc19pbm9kZV9pbmZvKSwKLQkJCQkJICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgICAgIGluaXRfb25jZSwgTlVMTCk7CiAJaWYgKGFmZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Ntc2VydmljZS5jIGIvZnMvYWZzL2Ntc2VydmljZS5jCmluZGV4IDllZWY2YmYuLjNkMDk3ZmQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuYworKysgYi9mcy9hZnMvY21zZXJ2aWNlLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkuZXJyb3JfZnVuYwk9IGFmc2NtX2Vycm9yLAogCS5hZW1hcF9mdW5jCT0gYWZzY21fYWVtYXAsCiAJLm9wc19iZWdpbgk9ICZBRlNDTV9vcHNbMF0sCi0JLm9wc19lbmQJPSAmQUZTQ01fb3BzW3NpemVvZihBRlNDTV9vcHMpIC8gc2l6ZW9mKEFGU0NNX29wc1swXSldLAorCS5vcHNfZW5kCT0gJkFGU0NNX29wc1tBUlJBWV9TSVpFKEFGU0NNX29wcyldLAogfTsKIAogc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihrYWZzY21kX2FsaXZlKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zdXBlci5jIGIvZnMvYWZzL3N1cGVyLmMKaW5kZXggZDZmYThlNS4uNTNjNTZlNyAxMDA2NDQKLS0tIGEvZnMvYWZzL3N1cGVyLmMKKysrIGIvZnMvYWZzL3N1cGVyLmMKQEAgLTM0MSw3ICszNDEsNyBAQAogCiAJc2ItPnNfZmxhZ3MgPSBmbGFnczsKIAotCXJldCA9IGFmc19maWxsX3N1cGVyKHNiLCAmcGFyYW1zLCBmbGFncyAmIE1TX1ZFUkJPU0UgPyAxIDogMCk7CisJcmV0ID0gYWZzX2ZpbGxfc3VwZXIoc2IsICZwYXJhbXMsIGZsYWdzICYgTVNfU0lMRU5UID8gMSA6IDApOwogCWlmIChyZXQgPCAwKSB7CiAJCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOwogCQlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggYWVjMmIxOS4uZTQxZTkzMiAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKKysrIGIvZnMvYWlvLmMKQEAgLTEyMiwxMCArMTIyLDkgQEAKIAlpbmZvLT5uciA9IDA7CiAJaW5mby0+cmluZ19wYWdlcyA9IGluZm8tPmludGVybmFsX3BhZ2VzOwogCWlmIChucl9wYWdlcyA+IEFJT19SSU5HX1BBR0VTKSB7Ci0JCWluZm8tPnJpbmdfcGFnZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwkJaW5mby0+cmluZ19wYWdlcyA9IGtjYWxsb2MobnJfcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaW5mby0+cmluZ19wYWdlcykKIAkJCXJldHVybiAtRU5PTUVNOwotCQltZW1zZXQoaW5mby0+cmluZ19wYWdlcywgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJfcGFnZXMpOwogCX0KIAogCWluZm8tPm1tYXBfc2l6ZSA9IG5yX3BhZ2VzICogUEFHRV9TSVpFOwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCmluZGV4IDM4NWJlZDAuLmY1NGM1YjIgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAorKysgYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKQEAgLTEzLDYgKzEzLDcgQEAKIC8qIEludGVybmFsIGhlYWRlciBmaWxlIGZvciBhdXRvZnMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2F1dG9fZnM0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKIC8qIFRoaXMgaXMgdGhlIHJhbmdlIG9mIGlvY3RsKCkgbnVtYmVycyB3ZSBjbGFpbSBhcyBvdXJzICovCkBAIC0xMDIsNyArMTAzLDcgQEAKIAlpbnQgcmVnaG9zdF9lbmFibGVkOwogCWludCBuZWVkc19yZWdob3N0OwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0Jc3RydWN0IHNlbWFwaG9yZSB3cV9zZW07CisJc3RydWN0IG11dGV4IHdxX211dGV4OwogCXNwaW5sb2NrX3QgZnNfbG9jazsKIAlzdHJ1Y3QgYXV0b2ZzX3dhaXRfcXVldWUgKnF1ZXVlczsgLyogV2FpdCBxdWV1ZSBwb2ludGVyICovCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9pbm9kZS5jIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCmluZGV4IDJkMzA4MjguLjFhZDk4ZDQgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvaW5vZGUuYworKysgYi9mcy9hdXRvZnM0L2lub2RlLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCXNiaS0+c2IgPSBzOwogCXNiaS0+dmVyc2lvbiA9IDA7CiAJc2JpLT5zdWJfdmVyc2lvbiA9IDA7Ci0JaW5pdF9NVVRFWCgmc2JpLT53cV9zZW0pOworCW11dGV4X2luaXQoJnNiaS0+d3FfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZzYmktPmZzX2xvY2spOwogCXNiaS0+cXVldWVzID0gTlVMTDsKIAlzLT5zX2Jsb2Nrc2l6ZSA9IDEwMjQ7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3dhaXRxLmMgYi9mcy9hdXRvZnM0L3dhaXRxLmMKaW5kZXggMzk0ZmYzNi4uYmU3OGU5MyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC93YWl0cS5jCisrKyBiL2ZzL2F1dG9mczQvd2FpdHEuYwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNiaS0+d3Ffc2VtKSkgeworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNiaS0+d3FfbXV0ZXgpKSB7CiAJCWtmcmVlKG5hbWUpOwogCQlyZXR1cm4gLUVJTlRSOwogCX0KQEAgLTE5NCw3ICsxOTQsNyBAQAogCQkvKiBDYW4ndCB3YWl0IGZvciBhbiBleHBpcmUgaWYgdGhlcmUncyBubyBtb3VudCAqLwogCQlpZiAobm90aWZ5ID09IE5GWV9OT05FICYmICFkX21vdW50cG9pbnQoZGVudHJ5KSkgewogCQkJa2ZyZWUobmFtZSk7Ci0JCQl1cCgmc2JpLT53cV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzYmktPndxX211dGV4KTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQl3cSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdXRvZnNfd2FpdF9xdWV1ZSksR0ZQX0tFUk5FTCk7CiAJCWlmICggIXdxICkgewogCQkJa2ZyZWUobmFtZSk7Ci0JCQl1cCgmc2JpLT53cV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzYmktPndxX211dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKQEAgLTIxOCwxMCArMjE4LDEwIEBACiAJCXdxLT5zdGF0dXMgPSAtRUlOVFI7IC8qIFN0YXR1cyByZXR1cm4gaWYgaW50ZXJydXB0ZWQgKi8KIAkJYXRvbWljX3NldCgmd3EtPndhaXRfY3RyLCAyKTsKIAkJYXRvbWljX3NldCgmd3EtPm5vdGlmaWVkLCAxKTsKLQkJdXAoJnNiaS0+d3Ffc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZzYmktPndxX211dGV4KTsKIAl9IGVsc2UgewogCQlhdG9taWNfaW5jKCZ3cS0+d2FpdF9jdHIpOwotCQl1cCgmc2JpLT53cV9zZW0pOworCQltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOwogCQlrZnJlZShuYW1lKTsKIAkJRFBSSU5USygiZXhpc3Rpbmcgd2FpdCBpZCA9IDB4JTA4bHgsIG5hbWUgPSAlLipzLCBuZnk9JWQiLAogCQkJKHVuc2lnbmVkIGxvbmcpIHdxLT53YWl0X3F1ZXVlX3Rva2VuLCB3cS0+bGVuLCB3cS0+bmFtZSwgbm90aWZ5KTsKQEAgLTI4MiwxOSArMjgyLDE5IEBACiB7CiAJc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlICp3cSwgKip3cWw7CiAKLQlkb3duKCZzYmktPndxX3NlbSk7CisJbXV0ZXhfbG9jaygmc2JpLT53cV9tdXRleCk7CiAJZm9yICggd3FsID0gJnNiaS0+cXVldWVzIDsgKHdxID0gKndxbCkgIT0gMCA7IHdxbCA9ICZ3cS0+bmV4dCApIHsKIAkJaWYgKCB3cS0+d2FpdF9xdWV1ZV90b2tlbiA9PSB3YWl0X3F1ZXVlX3Rva2VuICkKIAkJCWJyZWFrOwogCX0KIAogCWlmICggIXdxICkgewotCQl1cCgmc2JpLT53cV9zZW0pOworCQltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkqd3FsID0gd3EtPm5leHQ7CS8qIFVubGluayBmcm9tIGNoYWluICovCi0JdXAoJnNiaS0+d3Ffc2VtKTsKKwltdXRleF91bmxvY2soJnNiaS0+d3FfbXV0ZXgpOwogCWtmcmVlKHdxLT5uYW1lKTsKIAl3cS0+bmFtZSA9IE5VTEw7CS8qIERvIG5vdCB3YWl0IG9uIHRoaXMgcXVldWUgKi8KIApkaWZmIC0tZ2l0IGEvZnMvYmVmcy9kYXRhc3RyZWFtLmMgYi9mcy9iZWZzL2RhdGFzdHJlYW0uYwppbmRleCA3ODVmNmIyLi5iN2Q2YjkyIDEwMDY0NAotLS0gYS9mcy9iZWZzL2RhdGFzdHJlYW0uYworKysgYi9mcy9iZWZzL2RhdGFzdHJlYW0uYwpAQCAtMTE4LDcgKzExOCw3IEBACiAgKiBiZWZzX3JlYWRfbHNteWxpbmsgLSByZWFkIGxvbmcgc3ltbGluayBmcm9tIGRhdGFzdHJlYW0uCiAgKiBAc2I6IEZpbGVzeXN0ZW0gc3VwZXJibG9jayAKICAqIEBkczogRGF0YXN0cmVtIHRvIHJlYWQgZnJvbQotICogQGJ1ZjogQnVmZmVyIGluIHdpY2ggdG8gcGxhY2UgbG9uZyBzeW1saW5rIGRhdGEKKyAqIEBidWY6IEJ1ZmZlciBpbiB3aGljaCB0byBwbGFjZSBsb25nIHN5bWxpbmsgZGF0YQogICogQGxlbjogTGVuZ3RoIG9mIHRoZSBsb25nIHN5bWxpbmsgaW4gYnl0ZXMKICAqCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZApkaWZmIC0tZ2l0IGEvZnMvYmVmcy9saW51eHZmcy5jIGIvZnMvYmVmcy9saW51eHZmcy5jCmluZGV4IDJkMzY1Y2IuLjA0NGE1OTUgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvbGludXh2ZnMuYworKysgYi9mcy9iZWZzL2xpbnV4dmZzLmMKQEAgLTQyNyw3ICs0MjcsOCBAQAogewogCWJlZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImJlZnNfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgICBzaXplb2YgKHN0cnVjdCBiZWZzX2lub2RlX2luZm8pLAotCQkJCQkgICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJICAgICAgMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAorCQkJCQkJU0xBQl9NRU1fU1BSRUFEKSwKIAkJCQkJICAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAoYmVmc19pbm9kZV9jYWNoZXAgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImJlZnNfaW5pdF9pbm9kZWNhY2hlOiAiCkBAIC01NjEsNyArNTYyLDcgQEAKICAqIEBzYjogU3VwZXJibG9jawogICogQHNyYzogSW5wdXQgc3RyaW5nIGJ1ZmZlciBpbiBOTFMgZm9ybWF0CiAgKiBAc3JjbGVuOiBMZW5ndGggb2YgaW5wdXQgc3RyaW5nIGluIGJ5dGVzCi0gKiBAZGVzdDogVGhlIG91dHB1dCBzdHJpbmcgaW4gVVRGOCBmb3JtYXQKKyAqIEBkZXN0OiBUaGUgb3V0cHV0IHN0cmluZyBpbiBVVEYtOCBmb3JtYXQKICAqIEBkZXN0bGVuOiBMZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIKICAqIAogICogQ29udmVydHMgaW5wdXQgc3RyaW5nIEBzcmMsIHdoaWNoIGlzIGluIHRoZSBmb3JtYXQgb2YgdGhlIGxvYWRlZCBOTFMgbWFwLApkaWZmIC0tZ2l0IGEvZnMvYmZzL2lub2RlLmMgYi9mcy9iZnMvaW5vZGUuYwppbmRleCAzYWY2YzczYy4uNTVhN2E3OCAxMDA2NDQKLS0tIGEvZnMvYmZzL2lub2RlLmMKKysrIGIvZnMvYmZzL2lub2RlLmMKQEAgLTI1Nyw3ICsyNTcsOCBAQAogewogCWJmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiYmZzX2lub2RlX2NhY2hlIiwKIAkJCQkJICAgICBzaXplb2Yoc3RydWN0IGJmc19pbm9kZV9pbmZvKSwKLQkJCQkJICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgICAgIGluaXRfb25jZSwgTlVMTCk7CiAJaWYgKGJmc19pbm9kZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggMWIxMTdhNC4uNDM0OTExMyAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtOTM4LDYgKzkzOCwxMSBAQAogCQlrZnJlZShlbGZfaW50ZXJwcmV0ZXIpOwogCX0gZWxzZSB7CiAJCWVsZl9lbnRyeSA9IGxvYy0+ZWxmX2V4LmVfZW50cnk7CisJCWlmIChCQURfQUREUihlbGZfZW50cnkpKSB7CisJCQlzZW5kX3NpZyhTSUdTRUdWLCBjdXJyZW50LCAwKTsKKwkJCXJldHZhbCA9IC1FTk9FWEVDOyAvKiBOb2JvZHkgZ2V0cyB0byBzZWUgdGhpcywgYnV0Li4gKi8KKwkJCWdvdG8gb3V0X2ZyZWVfZGVudHJ5OworCQl9CiAJfQogCiAJa2ZyZWUoZWxmX3BoZGF0YSk7CkBAIC0xMzI5LDcgKzEzMzQsNyBAQAogCiAJaSA9IHAtPnN0YXRlID8gZmZ6KH5wLT5zdGF0ZSkgKyAxIDogMDsKIAlwc2luZm8tPnByX3N0YXRlID0gaTsKLQlwc2luZm8tPnByX3NuYW1lID0gKGkgPCAwIHx8IGkgPiA1KSA/ICcuJyA6ICJSU0RUWlciW2ldOworCXBzaW5mby0+cHJfc25hbWUgPSAoaSA+IDUpID8gJy4nIDogIlJTRFRaVyJbaV07CiAJcHNpbmZvLT5wcl96b21iID0gcHNpbmZvLT5wcl9zbmFtZSA9PSAnWic7CiAJcHNpbmZvLT5wcl9uaWNlID0gdGFza19uaWNlKHApOwogCXBzaW5mby0+cHJfZmxhZyA9IHAtPmZsYWdzOwpAQCAtMTQ2MCwxMiArMTQ2NSwxMSBAQAogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlkb19lYWNoX3RocmVhZChnLHApCiAJCQlpZiAoY3VycmVudC0+bW0gPT0gcC0+bW0gJiYgY3VycmVudCAhPSBwKSB7Ci0JCQkJdG1wID0ga21hbGxvYyhzaXplb2YoKnRtcCksIEdGUF9BVE9NSUMpOworCQkJCXRtcCA9IGt6YWxsb2Moc2l6ZW9mKCp0bXApLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAoIXRtcCkgewogCQkJCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCQkJCWdvdG8gY2xlYW51cDsKIAkJCQl9Ci0JCQkJbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKCp0bXApKTsKIAkJCQlJTklUX0xJU1RfSEVBRCgmdG1wLT5saXN0KTsKIAkJCQl0bXAtPnRocmVhZCA9IHA7CiAJCQkJbGlzdF9hZGQoJnRtcC0+bGlzdCwgJnRocmVhZF9saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwppbmRleCA1YjMwNzZlLi5hMmU0OGM5IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKKysrIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCkBAIC01NzIsOCArNTcyLDcgQEAKIAljc3AgLT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCV9fcHV0X3VzZXIoYnBybS0+YXJnYywgKHVuc2lnbmVkIGxvbmcgKikgY3NwKTsKIAotCWlmIChjc3AgIT0gc3ApCi0JCUJVRygpOworCUJVR19PTihjc3AgIT0gc3ApOwogCiAJLyogZmlsbCBpbiB0aGUgYXJndltdIGFycmF5ICovCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2ZsYXQuYyBiL2ZzL2JpbmZtdF9mbGF0LmMKaW5kZXggMTA4ZDU2YmIuLjY5ZjQ0ZGMgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9mbGF0LmMKKysrIGIvZnMvYmluZm10X2ZsYXQuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZsYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQyNiw2ICs0MjcsOCBAQAogCWludCBpLCByZXYsIHJlbG9jcyA9IDA7CiAJbG9mZl90IGZwb3M7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9jb2RlLCBlbmRfY29kZTsKKwlpbnQgcmV0OworCWludCBleGVjX2ZpbGVubzsKIAogCWhkciA9ICgoc3RydWN0IGZsYXRfaGRyICopIGJwcm0tPmJ1Zik7CQkvKiBleGVjLWhlYWRlciAqLwogCWlub2RlID0gYnBybS0+ZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CkBAIC00NTAsNyArNDUzLDggQEAKIAkJICovCiAJCWlmIChzdHJuY21wKGhkci0+bWFnaWMsICIjISIsIDIpKQogCQkJcHJpbnRrKCJCSU5GTVRfRkxBVDogYmFkIGhlYWRlciBtYWdpY1xuIik7Ci0JCXJldHVybiAtRU5PRVhFQzsKKwkJcmV0ID0gLUVOT0VYRUM7CisJCWdvdG8gZXJyOwogCX0KIAogCWlmIChmbGFncyAmIEZMQVRfRkxBR19LVFJBQ0UpCkBAIC00NTgsMTQgKzQ2MiwxNiBAQAogCiAJaWYgKHJldiAhPSBGTEFUX1ZFUlNJT04gJiYgcmV2ICE9IE9MRF9GTEFUX1ZFUlNJT04pIHsKIAkJcHJpbnRrKCJCSU5GTVRfRkxBVDogYmFkIGZsYXQgZmlsZSB2ZXJzaW9uIDB4JXggKHN1cHBvcnRlZCAweCV4IGFuZCAweCV4KVxuIiwgcmV2LCBGTEFUX1ZFUlNJT04sIE9MRF9GTEFUX1ZFUlNJT04pOwotCQlyZXR1cm4gLUVOT0VYRUM7CisJCXJldCA9IC1FTk9FWEVDOworCQlnb3RvIGVycjsKIAl9CiAJCiAJLyogRG9uJ3QgYWxsb3cgb2xkIGZvcm1hdCBleGVjdXRhYmxlcyB0byB1c2Ugc2hhcmVkIGxpYnJhcmllcyAqLwogCWlmIChyZXYgPT0gT0xEX0ZMQVRfVkVSU0lPTiAmJiBpZCAhPSAwKSB7CiAJCXByaW50aygiQklORk1UX0ZMQVQ6IHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBhdmFpbGFibGUgYmVmb3JlIHJldiAweCV4XG4iLAogCQkJCShpbnQpIEZMQVRfVkVSU0lPTik7Ci0JCXJldHVybiAtRU5PRVhFQzsKKwkJcmV0ID0gLUVOT0VYRUM7CisJCWdvdG8gZXJyOwogCX0KIAogCS8qCkBAIC00NzgsNyArNDg0LDggQEAKICNpZm5kZWYgQ09ORklHX0JJTkZNVF9aRkxBVAogCWlmIChmbGFncyAmIChGTEFUX0ZMQUdfR1pJUHxGTEFUX0ZMQUdfR1pEQVRBKSkgewogCQlwcmludGsoIlN1cHBvcnQgZm9yIFpGTEFUIGV4ZWN1dGFibGVzIGlzIG5vdCBlbmFibGVkLlxuIik7Ci0JCXJldHVybiAtRU5PRVhFQzsKKwkJcmV0ID0gLUVOT0VYRUM7CisJCWdvdG8gZXJyOwogCX0KICNlbmRpZgogCkBAIC00OTAsMTQgKzQ5NywyNyBAQAogCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOwogCWlmIChybGltID49IFJMSU1fSU5GSU5JVFkpCiAJCXJsaW0gPSB+MDsKLQlpZiAoZGF0YV9sZW4gKyBic3NfbGVuID4gcmxpbSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGRhdGFfbGVuICsgYnNzX2xlbiA+IHJsaW0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJLyogY2hlY2sgZmlsZSBkZXNjcmlwdG9yICovCisJZXhlY19maWxlbm8gPSBnZXRfdW51c2VkX2ZkKCk7CisJaWYgKGV4ZWNfZmlsZW5vIDwgMCkgeworCQlyZXQgPSAtRU1GSUxFOworCQlnb3RvIGVycjsKKwl9CisJZ2V0X2ZpbGUoYnBybS0+ZmlsZSk7CisJZmRfaW5zdGFsbChleGVjX2ZpbGVubywgYnBybS0+ZmlsZSk7CiAKIAkvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovCiAJaWYgKGlkID09IDApIHsKIAkJcmVzdWx0ID0gZmx1c2hfb2xkX2V4ZWMoYnBybSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlyZXR1cm4gcmVzdWx0OworCQlpZiAocmVzdWx0KSB7CisJCQlyZXQgPSByZXN1bHQ7CisJCQlnb3RvIGVycl9jbG9zZTsKKwkJfQogCiAJCS8qIE9LLCBUaGlzIGlzIHRoZSBwb2ludCBvZiBubyByZXR1cm4gKi8KIAkJc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCk7CkBAIC01MjcsNyArNTQ3LDggQEAKIAkJCWlmICghdGV4dHBvcykKIAkJCQl0ZXh0cG9zID0gKHVuc2lnbmVkIGxvbmcpIC1FTk9NRU07CiAJCQlwcmludGsoIlVuYWJsZSB0byBtbWFwIHByb2Nlc3MgdGV4dCwgZXJybm8gJWRcbiIsIChpbnQpLXRleHRwb3MpOwotCQkJcmV0dXJuKHRleHRwb3MpOworCQkJcmV0ID0gdGV4dHBvczsKKwkJCWdvdG8gZXJyX2Nsb3NlOwogCQl9CiAKIAkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKQEAgLTU0Miw3ICs1NjMsOCBAQAogCQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgUkFNIGZvciBwcm9jZXNzIGRhdGEsIGVycm5vICVkXG4iLAogCQkJCQkoaW50KS1kYXRhcG9zKTsKIAkJCWRvX211bm1hcChjdXJyZW50LT5tbSwgdGV4dHBvcywgdGV4dF9sZW4pOwotCQkJcmV0dXJuIHJlYWxkYXRhc3RhcnQ7CisJCQlyZXQgPSByZWFsZGF0YXN0YXJ0OworCQkJZ290byBlcnJfY2xvc2U7CiAJCX0KIAkJZGF0YXBvcyA9IHJlYWxkYXRhc3RhcnQgKyBNQVhfU0hBUkVEX0xJQlMgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CiAKQEAgLTU2NCw3ICs1ODYsOCBAQAogCQkJcHJpbnRrKCJVbmFibGUgdG8gcmVhZCBkYXRhK2JzcywgZXJybm8gJWRcbiIsIChpbnQpLXJlc3VsdCk7CiAJCQlkb19tdW5tYXAoY3VycmVudC0+bW0sIHRleHRwb3MsIHRleHRfbGVuKTsKIAkJCWRvX211bm1hcChjdXJyZW50LT5tbSwgcmVhbGRhdGFzdGFydCwgZGF0YV9sZW4gKyBleHRyYSk7Ci0JCQlyZXR1cm4gcmVzdWx0OworCQkJcmV0ID0gcmVzdWx0OworCQkJZ290byBlcnJfY2xvc2U7CiAJCX0KIAogCQlyZWxvYyA9ICh1bnNpZ25lZCBsb25nICopIChkYXRhcG9zKyhudG9obChoZHItPnJlbG9jX3N0YXJ0KS10ZXh0X2xlbikpOwpAQCAtNTgyLDcgKzYwNSw4IEBACiAJCQkJdGV4dHBvcyA9ICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNOwogCQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgUkFNIGZvciBwcm9jZXNzIHRleHQvZGF0YSwgZXJybm8gJWRcbiIsCiAJCQkJCShpbnQpLXRleHRwb3MpOwotCQkJcmV0dXJuKHRleHRwb3MpOworCQkJcmV0ID0gdGV4dHBvczsKKwkJCWdvdG8gZXJyX2Nsb3NlOwogCQl9CiAKIAkJcmVhbGRhdGFzdGFydCA9IHRleHRwb3MgKyBudG9obChoZHItPmRhdGFfc3RhcnQpOwpAQCAtNjI3LDcgKzY1MSw4IEBACiAJCQlwcmludGsoIlVuYWJsZSB0byByZWFkIGNvZGUrZGF0YStic3MsIGVycm5vICVkXG4iLChpbnQpLXJlc3VsdCk7CiAJCQlkb19tdW5tYXAoY3VycmVudC0+bW0sIHRleHRwb3MsIHRleHRfbGVuICsgZGF0YV9sZW4gKyBleHRyYSArCiAJCQkJTUFYX1NIQVJFRF9MSUJTICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKLQkJCXJldHVybiByZXN1bHQ7CisJCQlyZXQgPSByZXN1bHQ7CisJCQlnb3RvIGVycl9jbG9zZTsKIAkJfQogCX0KIApAQCAtNjkwLDggKzcxNSwxMCBAQAogCQkJdW5zaWduZWQgbG9uZyBhZGRyOwogCQkJaWYgKCpycCkgewogCQkJCWFkZHIgPSBjYWxjX3JlbG9jKCpycCwgbGliaW5mbywgaWQsIDApOwotCQkJCWlmIChhZGRyID09IFJFTE9DX0ZBSUxFRCkKLQkJCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJCWlmIChhZGRyID09IFJFTE9DX0ZBSUxFRCkgeworCQkJCQlyZXQgPSAtRU5PRVhFQzsKKwkJCQkJZ290byBlcnJfY2xvc2U7CisJCQkJfQogCQkJCSpycCA9IGFkZHI7CiAJCQl9CiAJCX0KQEAgLTcxOCw4ICs3NDUsMTAgQEAKIAkJCXJlbHZhbCA9IG50b2hsKHJlbG9jW2ldKTsKIAkJCWFkZHIgPSBmbGF0X2dldF9yZWxvY2F0ZV9hZGRyKHJlbHZhbCk7CiAJCQlycCA9ICh1bnNpZ25lZCBsb25nICopIGNhbGNfcmVsb2MoYWRkciwgbGliaW5mbywgaWQsIDEpOwotCQkJaWYgKHJwID09ICh1bnNpZ25lZCBsb25nICopUkVMT0NfRkFJTEVEKQotCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCWlmIChycCA9PSAodW5zaWduZWQgbG9uZyAqKVJFTE9DX0ZBSUxFRCkgeworCQkJCXJldCA9IC1FTk9FWEVDOworCQkJCWdvdG8gZXJyX2Nsb3NlOworCQkJfQogCiAJCQkvKiBHZXQgdGhlIHBvaW50ZXIncyB2YWx1ZS4gICovCiAJCQlhZGRyID0gZmxhdF9nZXRfYWRkcl9mcm9tX3JwKHJwLCByZWx2YWwsIGZsYWdzKTsKQEAgLTczMSw4ICs3NjAsMTAgQEAKIAkJCQlpZiAoKGZsYWdzICYgRkxBVF9GTEFHX0dPVFBJQykgPT0gMCkKIAkJCQkJYWRkciA9IG50b2hsKGFkZHIpOwogCQkJCWFkZHIgPSBjYWxjX3JlbG9jKGFkZHIsIGxpYmluZm8sIGlkLCAwKTsKLQkJCQlpZiAoYWRkciA9PSBSRUxPQ19GQUlMRUQpCi0JCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCQlpZiAoYWRkciA9PSBSRUxPQ19GQUlMRUQpIHsKKwkJCQkJcmV0ID0gLUVOT0VYRUM7CisJCQkJCWdvdG8gZXJyX2Nsb3NlOworCQkJCX0KIAogCQkJCS8qIFdyaXRlIGJhY2sgdGhlIHJlbG9jYXRlZCBwb2ludGVyLiAgKi8KIAkJCQlmbGF0X3B1dF9hZGRyX2F0X3JwKHJwLCBhZGRyLCByZWx2YWwpOwpAQCAtNzUyLDYgKzc4MywxMCBAQAogCQkJc3RhY2tfbGVuKTsKIAogCXJldHVybiAwOworZXJyX2Nsb3NlOgorCXN5c19jbG9zZShleGVjX2ZpbGVubyk7CitlcnI6CisJcmV0dXJuIHJldDsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDFmM2JiNTAuLjczZTY2NGMgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogI2luY2x1ZGUgPHNjc2kvc2cuaD4JCS8qIGZvciBzdHJ1Y3Qgc2dfaW92ZWMgKi8KIAogI2RlZmluZSBCSU9fUE9PTF9TSVpFIDI1NgpAQCAtNjM1LDEyICs2MzYsMTAgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlyZXQgPSAtRU5PTUVNOwotCXBhZ2VzID0ga21hbGxvYyhucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJcGFnZXMgPSBrY2FsbG9jKG5yX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwogCWlmICghcGFnZXMpCiAJCWdvdG8gb3V0OwogCi0JbWVtc2V0KHBhZ2VzLCAwLCBucl9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgaW92X2NvdW50OyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyB1YWRkciA9ICh1bnNpZ25lZCBsb25nKWlvdltpXS5pb3ZfYmFzZTsKIAkJdW5zaWduZWQgbG9uZyBsZW4gPSBpb3ZbaV0uaW92X2xlbjsKQEAgLTEwOTUsNiArMTA5NCw5IEBACiAJaWYgKCFicCkKIAkJcmV0dXJuIGJwOwogCisJYmxrX2FkZF90cmFjZV9wZHVfaW50KGJkZXZfZ2V0X3F1ZXVlKGJpLT5iaV9iZGV2KSwgQkxLX1RBX1NQTElULCBiaSwKKwkJCQliaS0+Ymlfc2VjdG9yICsgZmlyc3Rfc2VjdG9ycyk7CisKIAlCVUdfT04oYmktPmJpX3ZjbnQgIT0gMSk7CiAJQlVHX09OKGJpLT5iaV9pZHggIT0gMCk7CiAJYXRvbWljX3NldCgmYnAtPmNudCwgMyk7CkBAIC0xMTgyLDEyICsxMTg0LDExIEBACiAKIHN0cnVjdCBiaW9fc2V0ICpiaW9zZXRfY3JlYXRlKGludCBiaW9fcG9vbF9zaXplLCBpbnQgYnZlY19wb29sX3NpemUsIGludCBzY2FsZSkKIHsKLQlzdHJ1Y3QgYmlvX3NldCAqYnMgPSBrbWFsbG9jKHNpemVvZigqYnMpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgYmlvX3NldCAqYnMgPSBremFsbG9jKHNpemVvZigqYnMpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghYnMpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KGJzLCAwLCBzaXplb2YoKmJzKSk7CiAJYnMtPmJpb19wb29sID0gbWVtcG9vbF9jcmVhdGUoYmlvX3Bvb2xfc2l6ZSwgbWVtcG9vbF9hbGxvY19zbGFiLAogCQkJbWVtcG9vbF9mcmVlX3NsYWIsIGJpb19zbGFiKTsKIApAQCAtMTI0MywxMSArMTI0NCwxMSBAQAogCQlzY2FsZSA9IDQ7CiAKIAkvKgotCSAqIHNjYWxlIG51bWJlciBvZiBlbnRyaWVzCisJICogTGltaXQgbnVtYmVyIG9mIGVudHJpZXMgcmVzZXJ2ZWQgLS0gbWVtcG9vbHMgYXJlIG9ubHkgdXNlZCB3aGVuCisJICogdGhlIHN5c3RlbSBpcyBjb21wbGV0ZWx5IHVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnksIHNvIHdlIG9ubHkKKwkgKiBuZWVkIGVub3VnaCB0byBtYWtlIHByb2dyZXNzLgogCSAqLwotCWJ2ZWNfcG9vbF9lbnRyaWVzID0gbWVnYWJ5dGVzICogMjsKLQlpZiAoYnZlY19wb29sX2VudHJpZXMgPiAyNTYpCi0JCWJ2ZWNfcG9vbF9lbnRyaWVzID0gMjU2OworCWJ2ZWNfcG9vbF9lbnRyaWVzID0gMSArIHNjYWxlOwogCiAJZnNfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoQklPX1BPT0xfU0laRSwgYnZlY19wb29sX2VudHJpZXMsIHNjYWxlKTsKIAlpZiAoIWZzX2Jpb19zZXQpCmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDZlNTAzNDYuLjU3M2ZjOGUgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC04NiwxNiArODYsMTIgQEAKIAogaW50IHNiX3NldF9ibG9ja3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNpemUpCiB7Ci0JaW50IGJpdHMgPSA5OyAvKiAyXjkgPSA1MTIgKi8KLQogCWlmIChzZXRfYmxvY2tzaXplKHNiLT5zX2JkZXYsIHNpemUpKQogCQlyZXR1cm4gMDsKIAkvKiBJZiB3ZSBnZXQgaGVyZSwgd2Uga25vdyBzaXplIGlzIHBvd2VyIG9mIHR3bwogCSAqIGFuZCBpdCdzIHZhbHVlIGlzIGJldHdlZW4gNTEyIGFuZCBQQUdFX1NJWkUgKi8KIAlzYi0+c19ibG9ja3NpemUgPSBzaXplOwotCWZvciAoc2l6ZSA+Pj0gMTA7IHNpemU7IHNpemUgPj49IDEpCi0JCSsrYml0czsKLQlzYi0+c19ibG9ja3NpemVfYml0cyA9IGJpdHM7CisJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBibGtzaXplX2JpdHMoc2l6ZSk7CiAJcmV0dXJuIHNiLT5zX2Jsb2Nrc2l6ZTsKIH0KIApAQCAtMjY1LDggKzI2MSw4IEBACiAJICAgIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKIAl7CiAJCW1lbXNldChiZGV2LCAwLCBzaXplb2YoKmJkZXYpKTsKLQkJc2VtYV9pbml0KCZiZGV2LT5iZF9zZW0sIDEpOwotCQlzZW1hX2luaXQoJmJkZXYtPmJkX21vdW50X3NlbSwgMSk7CisJCW11dGV4X2luaXQoJmJkZXYtPmJkX211dGV4KTsKKwkJbXV0ZXhfaW5pdCgmYmRldi0+YmRfbW91bnRfbXV0ZXgpOwogCQlJTklUX0xJU1RfSEVBRCgmYmRldi0+YmRfaW5vZGVzKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmJkZXYtPmJkX2xpc3QpOwogCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwpAQCAtMzE5LDcgKzMxNSw4IEBACiB7CiAJaW50IGVycjsKIAliZGV2X2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJiZGV2X2NhY2hlIiwgc2l6ZW9mKHN0cnVjdCBiZGV2X2lub2RlKSwKLQkJCTAsIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX1BBTklDLAorCQkJMCwgKFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQlTTEFCX01FTV9TUFJFQUR8U0xBQl9QQU5JQyksCiAJCQlpbml0X29uY2UsIE5VTEwpOwogCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmJkX3R5cGUpOwogCWlmIChlcnIpCkBAIC01NzQsNyArNTcxLDcgQEAKIAl9CiAJb3duZXIgPSBkaXNrLT5mb3BzLT5vd25lcjsKIAotCWRvd24oJmJkZXYtPmJkX3NlbSk7CisJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCWlmICghYmRldi0+YmRfb3BlbmVycykgewogCQliZGV2LT5iZF9kaXNrID0gZGlzazsKIAkJYmRldi0+YmRfY29udGFpbnMgPSBiZGV2OwpAQCAtNjA1LDIxICs2MDIsMjEgQEAKIAkJCWlmIChyZXQpCiAJCQkJZ290byBvdXRfZmlyc3Q7CiAJCQliZGV2LT5iZF9jb250YWlucyA9IHdob2xlOwotCQkJZG93bigmd2hvbGUtPmJkX3NlbSk7CisJCQltdXRleF9sb2NrKCZ3aG9sZS0+YmRfbXV0ZXgpOwogCQkJd2hvbGUtPmJkX3BhcnRfY291bnQrKzsKIAkJCXAgPSBkaXNrLT5wYXJ0W3BhcnQgLSAxXTsKIAkJCWJkZXYtPmJkX2lub2RlLT5pX2RhdGEuYmFja2luZ19kZXZfaW5mbyA9CiAJCQkgICB3aG9sZS0+YmRfaW5vZGUtPmlfZGF0YS5iYWNraW5nX2Rldl9pbmZvOwogCQkJaWYgKCEoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkgfHwgIXAgfHwgIXAtPm5yX3NlY3RzKSB7CiAJCQkJd2hvbGUtPmJkX3BhcnRfY291bnQtLTsKLQkJCQl1cCgmd2hvbGUtPmJkX3NlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZ3aG9sZS0+YmRfbXV0ZXgpOwogCQkJCXJldCA9IC1FTlhJTzsKIAkJCQlnb3RvIG91dF9maXJzdDsKIAkJCX0KIAkJCWtvYmplY3RfZ2V0KCZwLT5rb2JqKTsKIAkJCWJkZXYtPmJkX3BhcnQgPSBwOwogCQkJYmRfc2V0X3NpemUoYmRldiwgKGxvZmZfdCkgcC0+bnJfc2VjdHMgPDwgOSk7Ci0JCQl1cCgmd2hvbGUtPmJkX3NlbSk7CisJCQltdXRleF91bmxvY2soJndob2xlLT5iZF9tdXRleCk7CiAJCX0KIAl9IGVsc2UgewogCQlwdXRfZGlzayhkaXNrKTsKQEAgLTYzMywxMyArNjMwLDEzIEBACiAJCQlpZiAoYmRldi0+YmRfaW52YWxpZGF0ZWQpCiAJCQkJcmVzY2FuX3BhcnRpdGlvbnMoYmRldi0+YmRfZGlzaywgYmRldik7CiAJCX0gZWxzZSB7Ci0JCQlkb3duKCZiZGV2LT5iZF9jb250YWlucy0+YmRfc2VtKTsKKwkJCW11dGV4X2xvY2soJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9tdXRleCk7CiAJCQliZGV2LT5iZF9jb250YWlucy0+YmRfcGFydF9jb3VudCsrOwotCQkJdXAoJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9jb250YWlucy0+YmRfbXV0ZXgpOwogCQl9CiAJfQogCWJkZXYtPmJkX29wZW5lcnMrKzsKLQl1cCgmYmRldi0+YmRfc2VtKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiAKQEAgLTY1Miw3ICs2NDksNyBAQAogCXB1dF9kaXNrKGRpc2spOwogCW1vZHVsZV9wdXQob3duZXIpOwogb3V0OgotCXVwKCZiZGV2LT5iZF9zZW0pOworCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlpZiAocmV0KQogCQliZHB1dChiZGV2KTsKQEAgLTcxNCw3ICs3MTEsNyBAQAogCXN0cnVjdCBpbm9kZSAqYmRfaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CiAKLQlkb3duKCZiZGV2LT5iZF9zZW0pOworCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKIAlsb2NrX2tlcm5lbCgpOwogCWlmICghLS1iZGV2LT5iZF9vcGVuZXJzKSB7CiAJCXN5bmNfYmxvY2tkZXYoYmRldik7CkBAIC03MjQsOSArNzIxLDkgQEAKIAkJaWYgKGRpc2stPmZvcHMtPnJlbGVhc2UpCiAJCQlyZXQgPSBkaXNrLT5mb3BzLT5yZWxlYXNlKGJkX2lub2RlLCBOVUxMKTsKIAl9IGVsc2UgewotCQlkb3duKCZiZGV2LT5iZF9jb250YWlucy0+YmRfc2VtKTsKKwkJbXV0ZXhfbG9jaygmYmRldi0+YmRfY29udGFpbnMtPmJkX211dGV4KTsKIAkJYmRldi0+YmRfY29udGFpbnMtPmJkX3BhcnRfY291bnQtLTsKLQkJdXAoJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9zZW0pOworCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9tdXRleCk7CiAJfQogCWlmICghYmRldi0+YmRfb3BlbmVycykgewogCQlzdHJ1Y3QgbW9kdWxlICpvd25lciA9IGRpc2stPmZvcHMtPm93bmVyOwpAQCAtNzQ2LDcgKzc0Myw3IEBACiAJCWJkZXYtPmJkX2NvbnRhaW5zID0gTlVMTDsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwotCXVwKCZiZGV2LT5iZF9zZW0pOworCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCWJkcHV0KGJkZXYpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9idWZmZXIuYyBiL2ZzL2J1ZmZlci5jCmluZGV4IDYyY2ZkMTcuLjNiM2FiNTIgMTAwNjQ0Ci0tLSBhL2ZzL2J1ZmZlci5jCisrKyBiL2ZzL2J1ZmZlci5jCkBAIC0xNjAsMTIgKzE2MCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHN5bmNfYmxvY2tkZXYpOwogCi0vKgotICogV3JpdGUgb3V0IGFuZCB3YWl0IHVwb24gYWxsIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAqIHN1cGVyYmxvY2suICBGaWxlc3lzdGVtIGRhdGEgYXMgd2VsbCBhcyB0aGUgdW5kZXJseWluZyBibG9jawotICogZGV2aWNlLiAgVGFrZXMgdGhlIHN1cGVyYmxvY2sgbG9jay4KLSAqLwotaW50IGZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitzdGF0aWMgdm9pZCBfX2ZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3luY19pbm9kZXNfc2Ioc2IsIDApOwogCURRVU9UX1NZTkMoc2IpOwpAQCAtMTc3LDcgKzE3MiwxNiBAQAogCQlzYi0+c19vcC0+c3luY19mcyhzYiwgMSk7CiAJc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKIAlzeW5jX2lub2Rlc19zYihzYiwgMSk7Cit9CiAKKy8qCisgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcworICogc3VwZXJibG9jay4gIEZpbGVzeXN0ZW0gZGF0YSBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIGJsb2NrCisgKiBkZXZpY2UuICBUYWtlcyB0aGUgc3VwZXJibG9jayBsb2NrLgorICovCitpbnQgZnN5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlfX2ZzeW5jX3N1cGVyKHNiKTsKIAlyZXR1cm4gc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKIH0KIApAQCAtMjAxLDcgKzIwNSw3IEBACiAgKiBmcmVlemVfYmRldiAgLS0gIGxvY2sgYSBmaWxlc3lzdGVtIGFuZCBmb3JjZSBpdCBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZQogICogQGJkZXY6CWJsb2NrZGV2aWNlIHRvIGxvY2sKICAqCi0gKiBUaGlzIHRha2VzIHRoZSBibG9jayBkZXZpY2UgYmRfbW91bnRfc2VtIHRvIG1ha2Ugc3VyZSBubyBuZXcgbW91bnRzCisgKiBUaGlzIHRha2VzIHRoZSBibG9jayBkZXZpY2UgYmRfbW91bnRfbXV0ZXggdG8gbWFrZSBzdXJlIG5vIG5ldyBtb3VudHMKICAqIGhhcHBlbiBvbiBiZGV2IHVudGlsIHRoYXdfYmRldigpIGlzIGNhbGxlZC4KICAqIElmIGEgc3VwZXJibG9jayBpcyBmb3VuZCBvbiB0aGlzIGRldmljZSwgd2UgdGFrZSB0aGUgc191bW91bnQgc2VtYXBob3JlCiAgKiBvbiBpdCB0byBtYWtlIHN1cmUgbm9ib2R5IHVubW91bnRzIHVudGlsIHRoZSBzbmFwc2hvdCBjcmVhdGlvbiBpcyBkb25lLgpAQCAtMjEwLDI1ICsyMTQsMTMgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCi0JZG93bigmYmRldi0+YmRfbW91bnRfc2VtKTsKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9tb3VudF9tdXRleCk7CiAJc2IgPSBnZXRfc3VwZXIoYmRldik7CiAJaWYgKHNiICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9XUklURTsKIAkJc21wX3dtYigpOwogCi0JCXN5bmNfaW5vZGVzX3NiKHNiLCAwKTsKLQkJRFFVT1RfU1lOQyhzYik7Ci0KLQkJbG9ja19zdXBlcihzYik7Ci0JCWlmIChzYi0+c19kaXJ0ICYmIHNiLT5zX29wLT53cml0ZV9zdXBlcikKLQkJCXNiLT5zX29wLT53cml0ZV9zdXBlcihzYik7Ci0JCXVubG9ja19zdXBlcihzYik7Ci0KLQkJaWYgKHNiLT5zX29wLT5zeW5jX2ZzKQotCQkJc2ItPnNfb3AtPnN5bmNfZnMoc2IsIDEpOwotCi0JCXN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7Ci0JCXN5bmNfaW5vZGVzX3NiKHNiLCAxKTsKKwkJX19mc3luY19zdXBlcihzYik7CiAKIAkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1RSQU5TOwogCQlzbXBfd21iKCk7CkBAIC0yNjQsNyArMjU2LDcgQEAKIAkJZHJvcF9zdXBlcihzYik7CiAJfQogCi0JdXAoJmJkZXYtPmJkX21vdW50X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tb3VudF9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHRoYXdfYmRldik7CiAKQEAgLTMyNywzMSArMzE5LDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGxvbmcgZG9fZnN5bmModW5zaWduZWQgaW50IGZkLCBpbnQgZGF0YXN5bmMpCitsb25nIGRvX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZGF0YXN5bmMpCiB7Ci0Jc3RydWN0IGZpbGUgKiBmaWxlOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCWludCByZXQsIGVycjsKKwlpbnQgcmV0OworCWludCBlcnI7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CiAKLQlyZXQgPSAtRUJBREY7Ci0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSAtRUlOVkFMOwogCWlmICghZmlsZS0+Zl9vcCB8fCAhZmlsZS0+Zl9vcC0+ZnN5bmMpIHsKIAkJLyogV2h5PyAgV2UgY2FuIHN0aWxsIGNhbGwgZmlsZW1hcF9mZGF0YXdyaXRlICovCi0JCWdvdG8gb3V0X3B1dGY7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAotCW1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7Ci0KIAljdXJyZW50LT5mbGFncyB8PSBQRl9TWU5DV1JJVEU7CiAJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOwogCiAJLyoKLQkgKiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHdyaXRlcnMsCi0JICogd2hpY2ggY291bGQgY2F1c2UgbGl2ZWxvY2tzIGluIGZzeW5jX2J1ZmZlcnNfbGlzdAorCSAqIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgd3JpdGVycywgd2hpY2ggY291bGQgY2F1c2UKKwkgKiBsaXZlbG9ja3MgaW4gZnN5bmNfYnVmZmVyc19saXN0KCkuCiAJICovCiAJbXV0ZXhfbG9jaygmbWFwcGluZy0+aG9zdC0+aV9tdXRleCk7CiAJZXJyID0gZmlsZS0+Zl9vcC0+ZnN5bmMoZmlsZSwgZmlsZS0+Zl9kZW50cnksIGRhdGFzeW5jKTsKQEAgLTM2MiwyMSArMzQ3LDMxIEBACiAJaWYgKCFyZXQpCiAJCXJldCA9IGVycjsKIAljdXJyZW50LT5mbGFncyAmPSB+UEZfU1lOQ1dSSVRFOwotCi1vdXRfcHV0ZjoKLQlmcHV0KGZpbGUpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBsb25nIF9fZG9fZnN5bmModW5zaWduZWQgaW50IGZkLCBpbnQgZGF0YXN5bmMpCit7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJaW50IHJldCA9IC1FQkFERjsKKworCWZpbGUgPSBmZ2V0KGZkKTsKKwlpZiAoZmlsZSkgeworCQlyZXQgPSBkb19mc3luYyhmaWxlLCBkYXRhc3luYyk7CisJCWZwdXQoZmlsZSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZnN5bmModW5zaWduZWQgaW50IGZkKQogewotCXJldHVybiBkb19mc3luYyhmZCwgMCk7CisJcmV0dXJuIF9fZG9fZnN5bmMoZmQsIDApOwogfQogCiBhc21saW5rYWdlIGxvbmcgc3lzX2ZkYXRhc3luYyh1bnNpZ25lZCBpbnQgZmQpCiB7Ci0JcmV0dXJuIGRvX2ZzeW5jKGZkLCAxKTsKKwlyZXR1cm4gX19kb19mc3luYyhmZCwgMSk7CiB9CiAKIC8qCkBAIC04NjUsOCArODYwLDggQEAKIAkJfQogCQl3cml0ZV91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwogCQlfX21hcmtfaW5vZGVfZGlydHkobWFwcGluZy0+aG9zdCwgSV9ESVJUWV9QQUdFUyk7CisJCXJldHVybiAxOwogCX0KLQkKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woX19zZXRfcGFnZV9kaXJ0eV9idWZmZXJzKTsKQEAgLTMwNTEsNjYgKzMwNDYsNiBAQAogfQogCiAvKgotICogTWlncmF0aW9uIGZ1bmN0aW9uIGZvciBwYWdlcyB3aXRoIGJ1ZmZlcnMuIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZAotICogaWYgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBndWFyYW50ZWVzIHRoYXQgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byAicGFnZSIKLSAqIGV4aXN0LgotICovCi0jaWZkZWYgQ09ORklHX01JR1JBVElPTgotaW50IGJ1ZmZlcl9taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqaGVhZDsKLQotCWlmICghbWFwcGluZykKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCi0JCXJldHVybiBtaWdyYXRlX3BhZ2UobmV3cGFnZSwgcGFnZSk7Ci0KLQloZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOwotCi0JaWYgKG1pZ3JhdGVfcGFnZV9yZW1vdmVfcmVmZXJlbmNlcyhuZXdwYWdlLCBwYWdlLCAzKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQliaCA9IGhlYWQ7Ci0JZG8gewotCQlnZXRfYmgoYmgpOwotCQlsb2NrX2J1ZmZlcihiaCk7Ci0JCWJoID0gYmgtPmJfdGhpc19wYWdlOwotCi0JfSB3aGlsZSAoYmggIT0gaGVhZCk7Ci0KLQlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOwotCXNldF9wYWdlX3ByaXZhdGUobmV3cGFnZSwgcGFnZV9wcml2YXRlKHBhZ2UpKTsKLQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOwotCXB1dF9wYWdlKHBhZ2UpOwotCWdldF9wYWdlKG5ld3BhZ2UpOwotCi0JYmggPSBoZWFkOwotCWRvIHsKLQkJc2V0X2JoX3BhZ2UoYmgsIG5ld3BhZ2UsIGJoX29mZnNldChiaCkpOwotCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKLQotCX0gd2hpbGUgKGJoICE9IGhlYWQpOwotCi0JU2V0UGFnZVByaXZhdGUobmV3cGFnZSk7Ci0KLQltaWdyYXRlX3BhZ2VfY29weShuZXdwYWdlLCBwYWdlKTsKLQotCWJoID0gaGVhZDsKLQlkbyB7Ci0JCXVubG9ja19idWZmZXIoYmgpOwotIAkJcHV0X2JoKGJoKTsKLQkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7Ci0KLQl9IHdoaWxlIChiaCAhPSBoZWFkKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChidWZmZXJfbWlncmF0ZV9wYWdlKTsKLSNlbmRpZgotCi0vKgogICogQnVmZmVyLWhlYWQgYWxsb2NhdGlvbgogICovCiBzdGF0aWMga21lbV9jYWNoZV90ICpiaF9jYWNoZXA7CkBAIC0zMTM4LDcgKzMwNzMsNyBAQAogCWlmIChfX2dldF9jcHVfdmFyKGJoX2FjY291bnRpbmcpLnJhdGVsaW1pdCsrIDwgNDA5NikKIAkJcmV0dXJuOwogCV9fZ2V0X2NwdV92YXIoYmhfYWNjb3VudGluZykucmF0ZWxpbWl0ID0gMDsKLQlmb3JfZWFjaF9jcHUoaSkKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpCiAJCXRvdCArPSBwZXJfY3B1KGJoX2FjY291bnRpbmcsIGkpLm5yOwogCWJ1ZmZlcl9oZWFkc19vdmVyX2xpbWl0ID0gKHRvdCA+IG1heF9idWZmZXJfaGVhZHMpOwogfQpAQCAtMzE4Nyw2ICszMTIyLDkgQEAKIAkJYnJlbHNlKGItPmJoc1tpXSk7CiAJCWItPmJoc1tpXSA9IE5VTEw7CiAJfQorCWdldF9jcHVfdmFyKGJoX2FjY291bnRpbmcpLm5yICs9IHBlcl9jcHUoYmhfYWNjb3VudGluZywgY3B1KS5ucjsKKwlwZXJfY3B1KGJoX2FjY291bnRpbmcsIGNwdSkubnIgPSAwOworCXB1dF9jcHVfdmFyKGJoX2FjY291bnRpbmcpOwogfQogCiBzdGF0aWMgaW50IGJ1ZmZlcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKQEAgLTMyMDMsOCArMzE0MSwxMSBAQAogCWludCBucnBhZ2VzOwogCiAJYmhfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImJ1ZmZlcl9oZWFkIiwKLQkJCXNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQpLCAwLAotCQkJU0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9QQU5JQywgaW5pdF9idWZmZXJfaGVhZCwgTlVMTCk7CisJCQkJCXNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQpLCAwLAorCQkJCQkoU0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9QQU5JQ3wKKwkJCQkJU0xBQl9NRU1fU1BSRUFEKSwKKwkJCQkJaW5pdF9idWZmZXJfaGVhZCwKKwkJCQkJTlVMTCk7CiAKIAkvKgogCSAqIExpbWl0IHRoZSBiaCBvY2N1cGFuY3kgdG8gMTAlIG9mIFpPTkVfTk9STUFMCmRpZmYgLS1naXQgYS9mcy9jaGFyX2Rldi5jIGIvZnMvY2hhcl9kZXYuYwppbmRleCAyMTE5NWM0Li44YzZlYjA0IDEwMDY0NAotLS0gYS9mcy9jaGFyX2Rldi5jCisrKyBiL2ZzL2NoYXJfZGV2LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgva29ial9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2lmZGVmIENPTkZJR19LTU9ECiAjaW5jbHVkZSA8bGludXgva21vZC5oPgpAQCAtMjgsNyArMjksNyBAQAogCiAjZGVmaW5lIE1BWF9QUk9CRV9IQVNIIDI1NQkvKiByYW5kb20gKi8KIAotc3RhdGljIERFQ0xBUkVfTVVURVgoY2hyZGV2c19sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2hyZGV2c19sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBjaGFyX2RldmljZV9zdHJ1Y3QgewogCXN0cnVjdCBjaGFyX2RldmljZV9zdHJ1Y3QgKm5leHQ7CkBAIC04OCwxMyArODksMTMgQEAKIAogdm9pZCAqYWNxdWlyZV9jaHJkZXZfbGlzdCh2b2lkKQogewotCWRvd24oJmNocmRldnNfbG9jayk7CisJbXV0ZXhfbG9jaygmY2hyZGV2c19sb2NrKTsKIAlyZXR1cm4gZ2V0X25leHRfY2hyZGV2KE5VTEwpOwogfQogCiB2b2lkIHJlbGVhc2VfY2hyZGV2X2xpc3Qodm9pZCAqZGV2KQogewotCXVwKCZjaHJkZXZzX2xvY2spOworCW11dGV4X3VubG9jaygmY2hyZGV2c19sb2NrKTsKIAlrZnJlZShkZXYpOwogfQogCkBAIC0xNDUsMTMgKzE0NiwxMSBAQAogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JY2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhcl9kZXZpY2Vfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJY2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhcl9kZXZpY2Vfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNkID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JbWVtc2V0KGNkLCAwLCBzaXplb2Yoc3RydWN0IGNoYXJfZGV2aWNlX3N0cnVjdCkpOwotCi0JZG93bigmY2hyZGV2c19sb2NrKTsKKwltdXRleF9sb2NrKCZjaHJkZXZzX2xvY2spOwogCiAJLyogdGVtcG9yYXJ5ICovCiAJaWYgKG1ham9yID09IDApIHsKQEAgLTE4NiwxMCArMTg1LDEwIEBACiAJfQogCWNkLT5uZXh0ID0gKmNwOwogCSpjcCA9IGNkOwotCXVwKCZjaHJkZXZzX2xvY2spOworCW11dGV4X3VubG9jaygmY2hyZGV2c19sb2NrKTsKIAlyZXR1cm4gY2Q7CiBvdXQ6Ci0JdXAoJmNocmRldnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjaHJkZXZzX2xvY2spOwogCWtmcmVlKGNkKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQpAQCAtMjAwLDcgKzE5OSw3IEBACiAJc3RydWN0IGNoYXJfZGV2aWNlX3N0cnVjdCAqY2QgPSBOVUxMLCAqKmNwOwogCWludCBpID0gbWFqb3JfdG9faW5kZXgobWFqb3IpOwogCi0JZG93bigmY2hyZGV2c19sb2NrKTsKKwltdXRleF9sb2NrKCZjaHJkZXZzX2xvY2spOwogCWZvciAoY3AgPSAmY2hyZGV2c1tpXTsgKmNwOyBjcCA9ICYoKmNwKS0+bmV4dCkKIAkJaWYgKCgqY3ApLT5tYWpvciA9PSBtYWpvciAmJgogCQkgICAgKCpjcCktPmJhc2VtaW5vciA9PSBiYXNlbWlub3IgJiYKQEAgLTIxMCw3ICsyMDksNyBAQAogCQljZCA9ICpjcDsKIAkJKmNwID0gY2QtPm5leHQ7CiAJfQotCXVwKCZjaHJkZXZzX2xvY2spOworCW11dGV4X3VubG9jaygmY2hyZGV2c19sb2NrKTsKIAlyZXR1cm4gY2Q7CiB9CiAKQEAgLTQ2NSw5ICs0NjQsOCBAQAogCiBzdHJ1Y3QgY2RldiAqY2Rldl9hbGxvYyh2b2lkKQogewotCXN0cnVjdCBjZGV2ICpwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNkZXYpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgY2RldiAqcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHApIHsKLQkJbWVtc2V0KHAsIDAsIHNpemVvZihzdHJ1Y3QgY2RldikpOwogCQlwLT5rb2JqLmt0eXBlID0gJmt0eXBlX2NkZXZfZHluYW1pYzsKIAkJSU5JVF9MSVNUX0hFQUQoJnAtPmxpc3QpOwogCQlrb2JqZWN0X2luaXQoJnAtPmtvYmopOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IGQzMzUwMTUuLmNiNjhlZmIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTE2MCw3ICsxNjAsNyBAQAogVmVyc2lvbiAxLjI1CiAtLS0tLS0tLS0tLS0KIEZpeCBpbnRlcm5hdGlvbmFsaXphdGlvbiBwcm9ibGVtIGluIGNpZnMgcmVhZGRpciB3aXRoIGZpbGVuYW1lcyB0aGF0IG1hcCB0byAKLWxvbmdlciBVVEY4IHN0cmluZ3MgdGhhbiB0aGUgc3RyaW5nIG9uIHRoZSB3aXJlIHdhcyBpbiBVbmljb2RlLiAgQWRkIHdvcmthcm91bmQKK2xvbmdlciBVVEYtOCBzdHJpbmdzIHRoYW4gdGhlIHN0cmluZyBvbiB0aGUgd2lyZSB3YXMgaW4gVW5pY29kZS4gIEFkZCB3b3JrYXJvdW5kCiBmb3IgcmVhZGRpciB0byBuZXRhcHAgc2VydmVycy4gRml4IHNlYXJjaCByZXdpbmQgKHNlZWsgaW50byByZWFkZGlyIHRvIHJldHVybiAKIG5vbi1jb25zZWN1dGl2ZSBlbnRyaWVzKS4gIERvIG5vdCBkbyByZWFkZGlyIHdoZW4gc2VydmVyIG5lZ290aWF0ZXMgCiBidWZmZXIgc2l6ZSB0byBzbWFsbCB0byBmaXQgZmlsZW5hbWUuIEFkZCBzdXBwb3J0IGZvciByZWFkaW5nIFBPU0lYIEFDTHMgZnJvbQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggNzllZWNjZC4uMjIxYjMzMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC00NzksNyArNDc5LDcgQEAKIAogCXNiLT5zX2ZsYWdzID0gZmxhZ3M7CiAKLQlyYyA9IGNpZnNfcmVhZF9zdXBlcihzYiwgZGF0YSwgZGV2X25hbWUsIGZsYWdzICYgTVNfVkVSQk9TRSA/IDEgOiAwKTsKKwlyYyA9IGNpZnNfcmVhZF9zdXBlcihzYiwgZGF0YSwgZGV2X25hbWUsIGZsYWdzICYgTVNfU0lMRU5UID8gMSA6IDApOwogCWlmIChyYykgewogCQl1cF93cml0ZSgmc2ItPnNfdW1vdW50KTsKIAkJZGVhY3RpdmF0ZV9zdXBlcihzYik7CkBAIC02OTUsNyArNjk1LDggQEAKIHsKIAljaWZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJjaWZzX2lub2RlX2NhY2hlIiwKIAkJCQkJICAgICAgc2l6ZW9mIChzdHJ1Y3QgY2lmc0lub2RlSW5mbyksCi0JCQkJCSAgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgICAgICBjaWZzX2luaXRfb25jZSwgTlVMTCk7CiAJaWYgKGNpZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggM2MwM2FhZC4uN2IyNTQ2MyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC01Miw3ICs1Miw3IEBACiAJCQlpbnQgKiAvKiB0eXBlIG9mIGJ1ZiByZXR1cm5lZCAqLyAsIGNvbnN0IGludCBsb25nX29wKTsKIGV4dGVybiBpbnQgY2hlY2tTTUJoZHIoc3RydWN0IHNtYl9oZHIgKnNtYiwgX191MTYgbWlkKTsKIGV4dGVybiBpbnQgY2hlY2tTTUIoc3RydWN0IHNtYl9oZHIgKnNtYiwgX191MTYgbWlkLCBpbnQgbGVuZ3RoKTsKLWV4dGVybiBpbnQgaXNfdmFsaWRfb3Bsb2NrX2JyZWFrKHN0cnVjdCBzbWJfaGRyICpzbWIpOworZXh0ZXJuIGludCBpc192YWxpZF9vcGxvY2tfYnJlYWsoc3RydWN0IHNtYl9oZHIgKnNtYiwgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqKTsKIGV4dGVybiBpbnQgaXNfc2l6ZV9zYWZlX3RvX2NoYW5nZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqKTsKIGV4dGVybiBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpmaW5kX3dyaXRhYmxlX2ZpbGUoc3RydWN0IGNpZnNJbm9kZUluZm8gKik7CiBleHRlcm4gdW5zaWduZWQgaW50IHNtYkNhbGNTaXplKHN0cnVjdCBzbWJfaGRyICpwdHIpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzc21iLmMgYi9mcy9jaWZzL2NpZnNzbWIuYwppbmRleCAyMTczMjNiLi5hMjQzZmUyIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNzbWIuYworKysgYi9mcy9jaWZzL2NpZnNzbWIuYwpAQCAtMTA0OCwxMyArMTA0OCwxNCBAQAogCQkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpb3ZbMF0uaW92X2Jhc2UpOwogCQllbHNlIGlmKHJlc3BfYnVmX3R5cGUgPT0gQ0lGU19MQVJHRV9CVUZGRVIpCiAJCQljaWZzX2J1Zl9yZWxlYXNlKGlvdlswXS5pb3ZfYmFzZSk7Ci0JfSBlbHNlIC8qIHJldHVybiBidWZmZXIgdG8gY2FsbGVyIHRvIGZyZWUgKi8gLyogQkIgRklYTUUgaG93IGRvIHdlIHRlbGwgY2FsbGVyIGlmIGl0IGlzIG5vdCBhIGxhcmdlIGJ1ZmZlciAqLyB7Ci0JCSpidWYgPSBpb3ZbMF0uaW92X2Jhc2U7CisJfSBlbHNlIGlmKHJlc3BfYnVmX3R5cGUgIT0gQ0lGU19OT19CVUZGRVIpIHsKKwkJLyogcmV0dXJuIGJ1ZmZlciB0byBjYWxsZXIgdG8gZnJlZSAqLyAKKwkJKmJ1ZiA9IGlvdlswXS5pb3ZfYmFzZTsJCQogCQlpZihyZXNwX2J1Zl90eXBlID09IENJRlNfU01BTExfQlVGRkVSKQogCQkJKnBidWZfdHlwZSA9IENJRlNfU01BTExfQlVGRkVSOwogCQllbHNlIGlmKHJlc3BfYnVmX3R5cGUgPT0gQ0lGU19MQVJHRV9CVUZGRVIpCiAJCQkqcGJ1Zl90eXBlID0gQ0lGU19MQVJHRV9CVUZGRVI7Ci0JfQorCX0gLyogZWxzZSBubyB2YWxpZCBidWZmZXIgb24gcmV0dXJuIC0gbGVhdmUgYXMgbnVsbCAqLwogCiAJLyogTm90ZTogT24gLUVBR0FJTiBlcnJvciBvbmx5IGNhbGxlciBjYW4gcmV0cnkgb24gaGFuZGxlIGJhc2VkIGNhbGxzCiAJCXNpbmNlIGZpbGUgaGFuZGxlIHBhc3NlZCBpbiBubyBsb25nZXIgdmFsaWQgKi8KQEAgLTQ5MDcsNyArNDkwOCw3IEBACiAJcGFybV9kYXRhLT5saXN0X2xlbiA9IGNwdV90b19sZTMyKGNvdW50KTsKIAlwYXJtX2RhdGEtPmxpc3RbMF0uRUFfZmxhZ3MgPSAwOwogCS8qIHdlIGNoZWNrZWQgYWJvdmUgdGhhdCBuYW1lIGxlbiBpcyBsZXNzIHRoYW4gMjU1ICovCi0JcGFybV9kYXRhLT5saXN0WzBdLm5hbWVfbGVuID0gKF9fdTgpbmFtZV9sZW47OworCXBhcm1fZGF0YS0+bGlzdFswXS5uYW1lX2xlbiA9IChfX3U4KW5hbWVfbGVuOwogCS8qIEVBIG5hbWVzIGFyZSBhbHdheXMgQVNDSUkgKi8KIAlpZihlYV9uYW1lKQogCQlzdHJuY3B5KHBhcm1fZGF0YS0+bGlzdFswXS5uYW1lLGVhX25hbWUsbmFtZV9sZW4pOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCBlNDg4NjAzLi4yYTBjMWY0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtNjMwLDcgKzYzMCw3IEBACiAJCQkJCXNtYWxsYnVmID0gTlVMTDsKIAkJCX0KIAkJCXdha2VfdXBfcHJvY2Vzcyh0YXNrX3RvX3dha2UpOwotCQl9IGVsc2UgaWYgKChpc192YWxpZF9vcGxvY2tfYnJlYWsoc21iX2J1ZmZlcikgPT0gRkFMU0UpCisJCX0gZWxzZSBpZiAoKGlzX3ZhbGlkX29wbG9ja19icmVhayhzbWJfYnVmZmVyLCBzZXJ2ZXIpID09IEZBTFNFKQogCQkgICAgJiYgKGlzTXVsdGlSc3AgPT0gRkFMU0UpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAKIAkJCWNFUlJPUigxLCAoIk5vIHRhc2sgdG8gd2FrZSwgdW5rbm93biBmcmFtZSByY3ZkISIpKTsKIAkJCWNpZnNfZHVtcF9tZW0oIlJlY2VpdmVkIERhdGEgaXM6ICIsKGNoYXIgKilzbWJfYnVmZmVyLApAQCAtMTc5NSwxMCArMTc5NSwxMCBAQAogCQkJICAgY29uanVuY3Rpb24gd2l0aCA1Mksga3ZlYyBjb25zdHJhaW50IG9uIGFyY2ggd2l0aCA0SwogCQkJICAgcGFnZSBzaXplICAqLwogCi0JCWlmKGNpZnNfc2ItPnJzaXplIDwgUEFHRV9DQUNIRV9TSVpFKSB7Ci0JCQljaWZzX3NiLT5yc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsgCi0JCQkvKiBXaW5kb3dzIE1FIGRvZXMgdGhpcyAqLwotCQkJY0ZZSSgxLCgiQXR0ZW1wdCB0byBzZXQgcmVhZHNpemUgZm9yIG1vdW50IHRvIGxlc3MgdGhhbiBvbmUgcGFnZSAoNDA5NikiKSk7CisJCWlmKGNpZnNfc2ItPnJzaXplIDwgMjA0OCkgeworCQkJY2lmc19zYi0+cnNpemUgPSAyMDQ4OyAKKwkJCS8qIFdpbmRvd3MgTUUgbWF5IHByZWZlciB0aGlzICovCisJCQljRllJKDEsKCJyZWFkc2l6ZSBzZXQgdG8gbWluaW11bSAyMDQ4IikpOwogCQl9CiAJCWNpZnNfc2ItPm1udF91aWQgPSB2b2x1bWVfaW5mby5saW51eF91aWQ7CiAJCWNpZnNfc2ItPm1udF9naWQgPSB2b2x1bWVfaW5mby5saW51eF9naWQ7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCBmZWQ1NWUzLi42MzI1NjFkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTEzOCw5ICsxMzgsOSBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQlkb3duKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JdXAoJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF91bmxvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zMTcsOSArMzE3LDkgQEAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JZG93bigmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X2xvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCXVwKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkKIAkJcmMgPSAtRU5PTUVNOwogCWVsc2UgaWYgKHBUY29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZjbnRsLmMgYi9mcy9jaWZzL2ZjbnRsLmMKaW5kZXggYTdhNDdiYi4uZWM0ZGZlOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9mY250bC5jCisrKyBiL2ZzL2NpZnMvZmNudGwuYwpAQCAtODYsOSArODYsOSBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKGZpbGUtPmZfZGVudHJ5LT5kX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQlkb3duKCZmaWxlLT5mX2RlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfbG9jaygmZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShmaWxlLT5mX2RlbnRyeSk7Ci0JdXAoJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF91bmxvY2soJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCA2NzViZDI1Li4xNjVkNjc0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMjAzLDkgKzIwMyw5IEBACiAJCX0KIAl9CiAKLQlkb3duKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShmaWxlLT5mX2RlbnRyeSk7Ci0JdXAoJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDU5MzU5OTEuLmZmOTNhOWYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTU3NCw5ICs1NzQsOSBAQAogCiAJLyogVW5saW5rIGNhbiBiZSBjYWxsZWQgZnJvbSByZW5hbWUgc28gd2UgY2FuIG5vdCBncmFiIHRoZSBzZW0gaGVyZQogCSAgIHNpbmNlIHdlIGRlYWRsb2NrIG90aGVyd2lzZSAqLwotLyoJZG93bigmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOyovCisvKgltdXRleF9sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsqLwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotLyoJdXAoJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsqLworLyoJbXV0ZXhfdW5sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsqLwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzE4LDkgKzcxOCw5IEBACiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCWRvd24oJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQl1cCgmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC04MDMsOSArODAzLDkgQEAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JZG93bigmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCXVwKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZiAoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTExMzcsOSArMTEzNyw5IEBACiAJCQlyYyA9IDA7CiAJfQogCQkKLQlkb3duKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfbG9jaygmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JdXAoJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF91bmxvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9saW5rLmMgYi9mcy9jaWZzL2xpbmsuYwppbmRleCAwZjk5YWFlLi44ZDBkYTdjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2xpbmsuYworKysgYi9mcy9jaWZzL2xpbmsuYwpAQCAtNDgsMTAgKzQ4LDEwIEBACiAvKiBObyBuZWVkIHRvIGNoZWNrIGZvciBjcm9zcyBkZXZpY2UgbGlua3Mgc2luY2Ugc2VydmVyIHdpbGwgZG8gdGhhdAogICAgQkIgbm90ZSBERlMgY2FzZSBpbiBmdXR1cmUgdGhvdWdoICh3aGVuIHdlIG1heSBoYXZlIHRvIGNoZWNrKSAqLwogCi0JZG93bigmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZyb21OYW1lID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShvbGRfZmlsZSk7CiAJdG9OYW1lID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JdXAoJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmKChmcm9tTmFtZSA9PSBOVUxMKSB8fCAodG9OYW1lID09IE5VTEwpKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBjaWZzX2hsX2V4aXQ7CkBAIC0xMDMsOSArMTAzLDkgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JZG93bigmZGlyZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X2xvY2soJmRpcmVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCXVwKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkaXJlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAogCWlmICghZnVsbF9wYXRoKQogCQlnb3RvIG91dF9ub19mcmVlOwpAQCAtMTY0LDkgKzE2NCw5IEBACiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCWRvd24oJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQl1cCgmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CkBAIC0yMzIsOSArMjMyLDkgQEAKIAogLyogQkIgd291bGQgaXQgYmUgc2FmZSBhZ2FpbnN0IGRlYWRsb2NrIHRvIGdyYWIgdGhpcyBzZW0gCiAgICAgICBldmVuIHRob3VnaCByZW5hbWUgaXRzZWxmIGdyYWJzIHRoZSBzZW0gYW5kIGNhbGxzIGxvb2t1cD8gKi8KLS8qICAgICAgIGRvd24oJmlub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfc2VtKTsqLworLyogICAgICAgbXV0ZXhfbG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7Ki8KIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLS8qICAgICAgIHVwKCZpbm9kZS0+aV9zYi0+c192ZnNfcmVuYW1lX3NlbSk7Ki8KKy8qICAgICAgIG11dGV4X3VubG9jaygmaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7Ki8KIAogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggODEyYzZiYi4uNDMyYmExNSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTQ3NSw3ICs0NzUsNyBAQAogCXJldHVybiAwOwogfQogaW50Ci1pc192YWxpZF9vcGxvY2tfYnJlYWsoc3RydWN0IHNtYl9oZHIgKmJ1ZikKK2lzX3ZhbGlkX29wbG9ja19icmVhayhzdHJ1Y3Qgc21iX2hkciAqYnVmLCBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzcnYpCiB7ICAgIAogCXN0cnVjdCBzbWJfY29tX2xvY2tfcmVxICogcFNNQiA9IChzdHJ1Y3Qgc21iX2NvbV9sb2NrX3JlcSAqKWJ1ZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CkBAIC01MzUsNyArNTM1LDcgQEAKIAlyZWFkX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCWxpc3RfZm9yX2VhY2godG1wLCAmR2xvYmFsVHJlZUNvbm5lY3Rpb25MaXN0KSB7CiAJCXRjb24gPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNUY29uSW5mbywgY2lmc0Nvbm5lY3Rpb25MaXN0KTsKLQkJaWYgKHRjb24tPnRpZCA9PSBidWYtPlRpZCkgeworCQlpZiAoKHRjb24tPnRpZCA9PSBidWYtPlRpZCkgJiYgKHNydiA9PSB0Y29uLT5zZXMtPnNlcnZlcikpIHsKIAkJCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fb3Bsb2NrX2Jya3MpOwogCQkJbGlzdF9mb3JfZWFjaCh0bXAxLCZ0Y29uLT5vcGVuRmlsZUxpc3QpewogCQkJCW5ldGZpbGUgPSBsaXN0X2VudHJ5KHRtcDEsc3RydWN0IGNpZnNGaWxlSW5mbywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggMjg4Y2MwNC4uZWRiM2I2ZSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTQwNCw5ICs0MDQsOSBAQAogCWlmKHBUY29uID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG93bigmZmlsZS0+Zl9kZW50cnktPmRfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X2xvY2soJmZpbGUtPmZfZGVudHJ5LT5kX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9kZW50cnkpOwotCXVwKCZmaWxlLT5mX2RlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9zYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy94YXR0ci5jIGIvZnMvY2lmcy94YXR0ci5jCmluZGV4IDc3N2UzMzYuLjM5Mzg0NDQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMKQEAgLTYyLDkgKzYyLDkgQEAKIAljaWZzX3NiID0gQ0lGU19TQihzYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCWRvd24oJnNiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF9sb2NrKCZzYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQl1cCgmc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X3VubG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTExNiw5ICsxMTYsOSBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAKLQlkb3duKCZzYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfbG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkaXJlbnRyeSk7Ci0JdXAoJnNiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF91bmxvY2soJnNiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWlmKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCUZyZWVYaWQoeGlkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjMsOSArMjIzLDkgQEAKIAljaWZzX3NiID0gQ0lGU19TQihzYik7CiAJcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCi0JZG93bigmc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X2xvY2soJnNiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwotCXVwKCZzYi0+c192ZnNfcmVuYW1lX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzQxLDkgKzM0MSw5IEBACiAJY2lmc19zYiA9IENJRlNfU0Ioc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAotCWRvd24oJnNiLT5zX3Zmc19yZW5hbWVfc2VtKTsKKwltdXRleF9sb2NrKCZzYi0+c192ZnNfcmVuYW1lX211dGV4KTsKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKLQl1cCgmc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X3VubG9jaygmc2ItPnNfdmZzX3JlbmFtZV9tdXRleCk7CiAJaWYoZnVsbF9wYXRoID09IE5VTEwpIHsKIAkJRnJlZVhpZCh4aWQpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvY2FjaGUuYyBiL2ZzL2NvZGEvY2FjaGUuYwppbmRleCBjNjA3ZDkyLi41ZDA1MjcxIDEwMDY0NAotLS0gYS9mcy9jb2RhL2NhY2hlLmMKKysrIGIvZnMvY29kYS9jYWNoZS5jCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHN0cnVjdCBjb2RhX3NiX2luZm8gKnNiaTsKIAogICAgICAgICBzYmkgPSBjb2RhX3NicChzYik7Ci0gICAgICAgIGlmICghc2JpKSBCVUcoKTsKKwlCVUdfT04oIXNiaSk7CiAKIAlhdG9taWNfaW5jKCZwZXJtaXNzaW9uX2Vwb2NoKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NvZGEvY25vZGUuYyBiL2ZzL2NvZGEvY25vZGUuYwppbmRleCAyM2FlZWY1Li40YzlmZWNiIDEwMDY0NAotLS0gYS9mcy9jb2RhL2Nub2RlLmMKKysrIGIvZnMvY29kYS9jbm9kZS5jCkBAIC0xMjAsOCArMTIwLDcgQEAKIAkKIAljaWkgPSBJVE9DKGlub2RlKTsKIAotCWlmICghY29kYV9maWRlcSgmY2lpLT5jX2ZpZCwgb2xkZmlkKSkKLQkJQlVHKCk7CisJQlVHX09OKCFjb2RhX2ZpZGVxKCZjaWktPmNfZmlkLCBvbGRmaWQpKTsKIAogCS8qIHJlcGxhY2UgZmlkIGFuZCByZWhhc2ggaW5vZGUgKi8KIAkvKiBYWFggd2UgcHJvYmFibHkgbmVlZCB0byBob2xkIHNvbWUgbG9jayBoZXJlISAqLwpkaWZmIC0tZ2l0IGEvZnMvY29kYS9jb2RhX2ludC5oIGIvZnMvY29kYS9jb2RhX2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjMzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jb2RhL2NvZGFfaW50LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfQ09EQV9JTlRfCisjZGVmaW5lIF9DT0RBX0lOVF8KKworZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNvZGFfZnNfdHlwZTsKKwordm9pZCBjb2RhX2Rlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKTsKK2ludCBjb2RhX2luaXRfaW5vZGVjYWNoZSh2b2lkKTsKK2ludCBjb2RhX2ZzeW5jKHN0cnVjdCBmaWxlICpjb2RhX2ZpbGUsIHN0cnVjdCBkZW50cnkgKmNvZGFfZGVudHJ5LAorCSAgICAgICBpbnQgZGF0YXN5bmMpOworCisjZW5kaWYgIC8qICBfQ09EQV9JTlRfICAqLworCisKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IDhmMWE1MTcuLjU0Zjc2ZGUgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZGlyLmMKKysrIGIvZnMvY29kYS9kaXIuYwpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NvZGFfY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb2RhX3Byb2MuaD4KIAorI2luY2x1ZGUgImNvZGFfaW50LmgiCisKIC8qIGRpciBpbm9kZS1vcHMgKi8KIHN0YXRpYyBpbnQgY29kYV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ldywgaW50IG1vZGUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjb2RhX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqdGFyZ2V0LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7CkBAIC01MCw3ICs1Miw2IEBACiAvKiBzdXBwb3J0IHJvdXRpbmVzICovCiBzdGF0aWMgaW50IGNvZGFfdmVudXNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgZmlsbGRpcl90IGZpbGxkaXIsCiAJCQkgICAgICB2b2lkICpkaXJlbnQsIHN0cnVjdCBkZW50cnkgKmRpcik7Ci1pbnQgY29kYV9mc3luYyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYyk7CiAKIC8qIHNhbWUgYXMgZnMvYmFkX2lub2RlLmMgKi8KIHN0YXRpYyBpbnQgY29kYV9yZXR1cm5fRUlPKHZvaWQpCmRpZmYgLS1naXQgYS9mcy9jb2RhL2ZpbGUuYyBiL2ZzL2NvZGEvZmlsZS5jCmluZGV4IDMwYjQ2MzAuLjE0NmE5OTEgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZmlsZS5jCisrKyBiL2ZzL2NvZGEvZmlsZS5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8bGludXgvY29kYV9wc2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvZGFfcHJvYy5oPgogCisjaW5jbHVkZSAiY29kYV9pbnQuaCIKKwogLyogaWYgQ09EQV9TVE9SRSBmYWlscyB3aXRoIEVPUE5PVFNVUFAsIHZlbnVzIGNsZWFybHkgZG9lc24ndCBzdXBwb3J0CiAgKiBDT0RBX1NUT1JFL0NPREFfUkVMRUFTRSBhbmQgd2UgZmFsbCBiYWNrIG9uIHVzaW5nIHRoZSBDT0RBX0NMT1NFIHVwY2FsbCAqLwogc3RhdGljIGludCB1c2VfY29kYV9jbG9zZTsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvaW5vZGUuYyBiL2ZzL2NvZGEvaW5vZGUuYwppbmRleCAwNGE3M2ZiLi5hZGExYTgxIDEwMDY0NAotLS0gYS9mcy9jb2RhL2lub2RlLmMKKysrIGIvZnMvY29kYS9pbm9kZS5jCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSA8bGludXgvY29kYV9mc19pLmg+CiAjaW5jbHVkZSA8bGludXgvY29kYV9jYWNoZS5oPgogCisjaW5jbHVkZSAiY29kYV9pbnQuaCIKKwogLyogVkZTIHN1cGVyX2Jsb2NrIG9wcyAqLwogc3RhdGljIHZvaWQgY29kYV9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBzdGF0aWMgdm9pZCBjb2RhX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CkBAIC02OSw3ICs3MSw3IEBACiB7CiAJY29kYV9pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiY29kYV9pbm9kZV9jYWNoZSIsCiAJCQkJc2l6ZW9mKHN0cnVjdCBjb2RhX2lub2RlX2luZm8pLAotCQkJCTAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCTAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCwKIAkJCQlpbml0X29uY2UsIE5VTEwpOwogCWlmIChjb2RhX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvcHNkZXYuYyBiL2ZzL2NvZGEvcHNkZXYuYwppbmRleCA2YTNkZjg4Li45OGM3NGZlIDEwMDY0NAotLS0gYS9mcy9jb2RhL3BzZGV2LmMKKysrIGIvZnMvY29kYS9wc2Rldi5jCkBAIC00OCwxMiArNDgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2NvZGFfcHNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jb2RhX3Byb2MuaD4KIAotI2RlZmluZSB1cGNfZnJlZShyKSBrZnJlZShyKQorI2luY2x1ZGUgImNvZGFfaW50LmgiCiAKLS8qIAotICogQ29kYSBzdHVmZgotICovCi1leHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgY29kYV9mc190eXBlOworI2RlZmluZSB1cGNfZnJlZShyKSBrZnJlZShyKQogCiAvKiBzdGF0aXN0aWNzICovCiBpbnQgICAgICAgICAgIGNvZGFfaGFyZDsgICAgICAgICAvKiBhbGxvd3Mgc2lnbmFscyBkdXJpbmcgdXBjYWxscyAqLwpAQCAtMzk0LDggKzM5MSw2IEBACiBNT0RVTEVfQVVUSE9SKCJQZXRlciBKLiBCcmFhbSA8YnJhYW1AY3MuY211LmVkdT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotZXh0ZXJuIGludCBjb2RhX2luaXRfaW5vZGVjYWNoZSh2b2lkKTsKLWV4dGVybiB2b2lkIGNvZGFfZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpOwogc3RhdGljIGludCBfX2luaXQgaW5pdF9jb2RhKHZvaWQpCiB7CiAJaW50IHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggNTMzM2M3ZC4uZWY1YTA3NyAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTExNCw2ICsxMTQsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorI2lmbmRlZiBfX0FSQ0hfV0FOVF9TVEFUNjQKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX25ld2ZzdGF0YXQodW5zaWduZWQgaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLAogCQlzdHJ1Y3QgY29tcGF0X3N0YXQgX191c2VyICpzdGF0YnVmLCBpbnQgZmxhZykKIHsKQEAgLTEzNCw2ICsxMzUsNyBAQAogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KKyNlbmRpZgogCiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19uZXdmc3RhdCh1bnNpZ25lZCBpbnQgZmQsCiAJCXN0cnVjdCBjb21wYXRfc3RhdCBfX3VzZXIgKiBzdGF0YnVmKQpAQCAtMTQ3NCwxMCArMTQ3Niw5IEBACiAJaW50IGk7CiAKIAlyZXR2YWwgPSAtRU5PTUVNOwotCWJwcm0gPSBrbWFsbG9jKHNpemVvZigqYnBybSksIEdGUF9LRVJORUwpOworCWJwcm0gPSBremFsbG9jKHNpemVvZigqYnBybSksIEdGUF9LRVJORUwpOwogCWlmICghYnBybSkKIAkJZ290byBvdXRfcmV0OwotCW1lbXNldChicHJtLCAwLCBzaXplb2YoKmJwcm0pKTsKIAogCWZpbGUgPSBvcGVuX2V4ZWMoZmlsZW5hbWUpOwogCXJldHZhbCA9IFBUUl9FUlIoZmlsZSk7CkBAIC0yMTY4LDkgKzIxNjksMTIgQEAKIAogCWRlZmF1bHQ6CiAJCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKKwkJYnJlYWs7CiAJfQogCisJaWYgKGVycikKKwkJZ290byBkb25lOworCiAJb2xkZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAkvKiBUaGUgX191c2VyIHBvaW50ZXIgY2FzdHMgYXJlIHZhbGlkIGJlY2F1c2Ugb2YgdGhlIHNldF9mcygpICovCmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDA1N2U2MDIuLmQyYzM4ODcgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGt0cmFjZV9hcGkuaD4KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+ICAgICAgICAgIC8qIHNpb2NkZXZwcml2YXRlX2lvY3RsICovCiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KQEAgLTQ0Niw3ICs0NDcsNyBAQAogCWlmciA9IGlmYy5pZmNfcmVxOwogCWlmcjMyID0gY29tcGF0X3B0cihpZmMzMi5pZmNidWYpOwogCWZvciAoaSA9IDAsIGogPSAwOwotICAgICAgICAgICAgIGkgKyBzaXplb2YgKHN0cnVjdCBpZnJlcTMyKSA8IGlmYzMyLmlmY19sZW4gJiYgaiA8IGlmYy5pZmNfbGVuOworICAgICAgICAgICAgIGkgKyBzaXplb2YgKHN0cnVjdCBpZnJlcTMyKSA8PSBpZmMzMi5pZmNfbGVuICYmIGogPCBpZmMuaWZjX2xlbjsKIAkgICAgIGkgKz0gc2l6ZW9mIChzdHJ1Y3QgaWZyZXEzMiksIGogKz0gc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKSB7CiAJCWlmIChjb3B5X2luX3VzZXIoaWZyMzIsIGlmciwgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEzMikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xNTIxLDggKzE1MjIsNyBAQAogCXsgQVRNX1FVRVJZTE9PUDMyLCAgIEFUTV9RVUVSWUxPT1AgfQogfTsKIAotI2RlZmluZSBOUl9BVE1fSU9DVEwgKHNpemVvZihhdG1faW9jdGxfbWFwKS9zaXplb2YoYXRtX2lvY3RsX21hcFswXSkpCi0KKyNkZWZpbmUgTlJfQVRNX0lPQ1RMIEFSUkFZX1NJWkUoYXRtX2lvY3RsX21hcCkKIAogc3RhdGljIGludCBkb19hdG1faW9idWYodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE4MjMsNyArMTgyMyw3IEBACiAJeyBGRFdFUlJPUkdFVDMyLCBGRFdFUlJPUkdFVCB9CiB9OwogCi0jZGVmaW5lIE5SX0ZEX0lPQ1RMX1RSQU5TIChzaXplb2YoZmRfaW9jdGxfdHJhbnNfdGFibGUpL3NpemVvZihmZF9pb2N0bF90cmFuc190YWJsZVswXSkpCisjZGVmaW5lIE5SX0ZEX0lPQ1RMX1RSQU5TIEFSUkFZX1NJWkUoZmRfaW9jdGxfdHJhbnNfdGFibGUpCiAKIHN0YXRpYyBpbnQgZmRfaW9jdGxfdHJhbnModW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTI1MzEsMTggKzI1MzEsOSBAQAogCQl2YWwzMiA9IGt2YWw7CiAJCXJldHVybiBwdXRfdXNlcih2YWwzMiwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpOwogCWNhc2UgUlRDX0lSUVBfU0VUMzI6CisJCXJldHVybiBzeXNfaW9jdGwoZmQsIFJUQ19JUlFQX1NFVCwgYXJnKTsgCiAJY2FzZSBSVENfRVBPQ0hfU0VUMzI6Ci0JCXJldCA9IGdldF91c2VyKHZhbDMyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlrdmFsID0gdmFsMzI7Ci0KLQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCXJldCA9IHN5c19pb2N0bChmZCwgKGNtZCA9PSBSVENfSVJRUF9TRVQzMikgPwotCQkJCVJUQ19JUlFQX1NFVCA6IFJUQ19FUE9DSF9TRVQsCi0JCQkJKHVuc2lnbmVkIGxvbmcpJmt2YWwpOwotCQlzZXRfZnMob2xkZnMpOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBSVENfRVBPQ0hfU0VULCBhcmcpOwogCWRlZmF1bHQ6CiAJCS8qIHVucmVhY2hlZCAqLwogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwpkaWZmIC0tZ2l0IGEvZnMvY3JhbWZzL2lub2RlLmMgYi9mcy9jcmFtZnMvaW5vZGUuYwppbmRleCA3ZmU4NTQxNS4uOGFkNTJmNSAxMDA2NDQKLS0tIGEvZnMvY3JhbWZzL2lub2RlLmMKKysrIGIvZnMvY3JhbWZzL2lub2RlLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogLyogVGhlc2UgdHdvIG1hY3JvcyBtYXkgY2hhbmdlIGluIGZ1dHVyZSwgdG8gcHJvdmlkZSBiZXR0ZXIgc3RfaW5vCiAgICBzZW1hbnRpY3MuICovCi0jZGVmaW5lIENSQU1JTk8oeCkJKCh4KS0+b2Zmc2V0Pyh4KS0+b2Zmc2V0PDwyOjEpCisjZGVmaW5lIENSQU1JTk8oeCkJKCgoeCktPm9mZnNldCAmJiAoeCktPnNpemUpPyh4KS0+b2Zmc2V0PDwyOjEpCiAjZGVmaW5lIE9GRlNFVCh4KQkoKHgpLT5pX2lubykKIAogCkBAIC02Niw4ICs2NiwzNiBAQAogCiBzdGF0aWMgaW50IGNyYW1mc19pZ2V0NV9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqb3BhcXVlKQogeworCXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgemVyb3RpbWU7CiAJc3RydWN0IGNyYW1mc19pbm9kZSAqY3JhbWZzX2lub2RlID0gb3BhcXVlOworCWlub2RlLT5pX21vZGUgPSBjcmFtZnNfaW5vZGUtPm1vZGU7CisJaW5vZGUtPmlfdWlkID0gY3JhbWZzX2lub2RlLT51aWQ7CisJaW5vZGUtPmlfc2l6ZSA9IGNyYW1mc19pbm9kZS0+c2l6ZTsKKwlpbm9kZS0+aV9ibG9ja3MgPSAoY3JhbWZzX2lub2RlLT5zaXplIC0gMSkgLyA1MTIgKyAxOworCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CisJaW5vZGUtPmlfZ2lkID0gY3JhbWZzX2lub2RlLT5naWQ7CisJLyogU3RydWN0IGNvcHkgaW50ZW50aW9uYWwgKi8KKwlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSB6ZXJvdGltZTsKIAlpbm9kZS0+aV9pbm8gPSBDUkFNSU5PKGNyYW1mc19pbm9kZSk7CisJLyogaW5vZGUtPmlfbmxpbmsgaXMgbGVmdCAxIC0gYXJndWFibHkgd3JvbmcgZm9yIGRpcmVjdG9yaWVzLAorCSAgIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkbyB3aXRob3V0IHJlYWRpbmcgdGhlIGRpcmVjdG9yeQorICAgICAgICAgICBjb250ZW50cy4gIDEgeWllbGRzIHRoZSByaWdodCByZXN1bHQgaW4gR05VIGZpbmQsIGV2ZW4KKwkgICB3aXRob3V0IC1ub2xlYWYgb3B0aW9uLiAqLworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX2ZvcCA9ICZnZW5lcmljX3JvX2ZvcHM7CisJCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7CisJfSBlbHNlIGlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX29wID0gJmNyYW1mc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfZm9wID0gJmNyYW1mc19kaXJlY3Rvcnlfb3BlcmF0aW9uczsKKwl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaW5vZGUtPmlfb3AgPSAmcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7CisJfSBlbHNlIHsKKwkJaW5vZGUtPmlfc2l6ZSA9IDA7CisJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CisJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKKwkJCW9sZF9kZWNvZGVfZGV2KGNyYW1mc19pbm9kZS0+c2l6ZSkpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzcsMzcgKzEwNSw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlnZXQ1X2xvY2tlZChzYiwgQ1JBTUlOTyhjcmFtZnNfaW5vZGUpLAogCQkJCQkgICAgY3JhbWZzX2lnZXQ1X3Rlc3QsIGNyYW1mc19pZ2V0NV9zZXQsCiAJCQkJCSAgICBjcmFtZnNfaW5vZGUpOwotCXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgemVyb3RpbWU7Ci0KIAlpZiAoaW5vZGUgJiYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKSB7Ci0JCWlub2RlLT5pX21vZGUgPSBjcmFtZnNfaW5vZGUtPm1vZGU7Ci0JCWlub2RlLT5pX3VpZCA9IGNyYW1mc19pbm9kZS0+dWlkOwotCQlpbm9kZS0+aV9zaXplID0gY3JhbWZzX2lub2RlLT5zaXplOwotCQlpbm9kZS0+aV9ibG9ja3MgPSAoY3JhbWZzX2lub2RlLT5zaXplIC0gMSkgLyA1MTIgKyAxOwotCQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOwotCQlpbm9kZS0+aV9naWQgPSBjcmFtZnNfaW5vZGUtPmdpZDsKLQkJLyogU3RydWN0IGNvcHkgaW50ZW50aW9uYWwgKi8KLQkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gemVyb3RpbWU7Ci0JCWlub2RlLT5pX2lubyA9IENSQU1JTk8oY3JhbWZzX2lub2RlKTsKLQkJLyogaW5vZGUtPmlfbmxpbmsgaXMgbGVmdCAxIC0gYXJndWFibHkgd3JvbmcgZm9yIGRpcmVjdG9yaWVzLAotCQkgICBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8gd2l0aG91dCByZWFkaW5nIHRoZSBkaXJlY3RvcnkKLQkgICAgICAgICAgIGNvbnRlbnRzLiAgMSB5aWVsZHMgdGhlIHJpZ2h0IHJlc3VsdCBpbiBHTlUgZmluZCwgZXZlbgotCQkgICB3aXRob3V0IC1ub2xlYWYgb3B0aW9uLiAqLwotCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQkJaW5vZGUtPmlfZm9wID0gJmdlbmVyaWNfcm9fZm9wczsKLQkJCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7Ci0JCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkJaW5vZGUtPmlfb3AgPSAmY3JhbWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotCQkJaW5vZGUtPmlfZm9wID0gJmNyYW1mc19kaXJlY3Rvcnlfb3BlcmF0aW9uczsKLQkJfSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7Ci0JCQlpbm9kZS0+aV9vcCA9ICZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLQkJCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7Ci0JCX0gZWxzZSB7Ci0JCQlpbm9kZS0+aV9zaXplID0gMDsKLQkJCWlub2RlLT5pX2Jsb2NrcyA9IDA7Ci0JCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCi0JCQkJb2xkX2RlY29kZV9kZXYoY3JhbWZzX2lub2RlLT5zaXplKSk7Ci0JCX0KIAkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CiAJfQogCXJldHVybiBpbm9kZTsKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggYTE3M2JiYS4uOTM5NTg0NjQgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0zMjUsMTAgKzMyNSwxMyBAQAogCiBzdHJ1Y3QgZGVudHJ5ICogZF9maW5kX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGU7Ci0Jc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0JZGUgPSBfX2RfZmluZF9hbGlhcyhpbm9kZSwgMCk7Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZSA9IE5VTEw7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmlub2RlLT5pX2RlbnRyeSkpIHsKKwkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJCWRlID0gX19kX2ZpbmRfYWxpYXMoaW5vZGUsIDApOworCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCX0KIAlyZXR1cm4gZGU7CiB9CiAKQEAgLTQ4Niw2ICs0ODksNyBAQAogCQkJY29udGludWU7CiAJCX0KIAkJcHJ1bmVfb25lX2RlbnRyeShkZW50cnkpOworCQljb25kX3Jlc2NoZWRfbG9jaygmZGNhY2hlX2xvY2spOwogCQlnb3RvIHJlcGVhdDsKIAl9CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKQEAgLTc5OSw2ICs4MDMsNyBAQAogCWlmIChpbm9kZSkKIAkJbGlzdF9hZGQoJmVudHJ5LT5kX2FsaWFzLCAmaW5vZGUtPmlfZGVudHJ5KTsKIAllbnRyeS0+ZF9pbm9kZSA9IGlub2RlOworCWZzbm90aWZ5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKIH0KQEAgLTg1MCw2ICs4NTUsNyBAQAogCWxpc3RfYWRkKCZlbnRyeS0+ZF9hbGlhcywgJmlub2RlLT5pX2RlbnRyeSk7CiBkb19uZWdhdGl2ZToKIAllbnRyeS0+ZF9pbm9kZSA9IGlub2RlOworCWZzbm90aWZ5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTk4MCw2ICs5ODYsNyBAQAogCQluZXcgPSBfX2RfZmluZF9hbGlhcyhpbm9kZSwgMSk7CiAJCWlmIChuZXcpIHsKIAkJCUJVR19PTighKG5ldy0+ZF9mbGFncyAmIERDQUNIRV9ESVNDT05ORUNURUQpKTsKKwkJCWZzbm90aWZ5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7CiAJCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQkJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTsKIAkJCWRfcmVoYXNoKGRlbnRyeSk7CkBAIC05ODksNiArOTk2LDcgQEAKIAkJCS8qIGRfaW5zdGFudGlhdGUgdGFrZXMgZGNhY2hlX2xvY2ssIHNvIHdlIGRvIGl0IGJ5IGhhbmQgKi8KIAkJCWxpc3RfYWRkKCZkZW50cnktPmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOwogCQkJZGVudHJ5LT5kX2lub2RlID0gaW5vZGU7CisJCQlmc25vdGlmeV9kX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAkJCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJCQlkX3JlaGFzaChkZW50cnkpOwpAQCAtMTE3Myw2ICsxMTgxLDkgQEAKIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlpc2RpciA9IFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpOwogCWlmIChhdG9taWNfcmVhZCgmZGVudHJ5LT5kX2NvdW50KSA9PSAxKSB7CisJCS8qIHJlbW92ZSB0aGlzIGFuZCBvdGhlciBpbm90aWZ5IGRlYnVnIGNoZWNrcyBhZnRlciAyLjYuMTggKi8KKwkJZGVudHJ5LT5kX2ZsYWdzICY9IH5EQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRDsKKwogCQlkZW50cnlfaXB1dChkZW50cnkpOwogCQlmc25vdGlmeV9uYW1lcmVtb3ZlKGRlbnRyeSwgaXNkaXIpOwogCQlyZXR1cm47CkBAIC0xMzM5LDYgKzEzNTAsNyBAQAogCiAJbGlzdF9hZGQoJmRlbnRyeS0+ZF91LmRfY2hpbGQsICZkZW50cnktPmRfcGFyZW50LT5kX3N1YmRpcnMpOwogCXNwaW5fdW5sb2NrKCZ0YXJnZXQtPmRfbG9jayk7CisJZnNub3RpZnlfZF9tb3ZlKGRlbnRyeSk7CiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAl3cml0ZV9zZXF1bmxvY2soJnJlbmFtZV9sb2NrKTsKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwpAQCAtMTY4Miw3ICsxNjk0LDggQEAKIAlkZW50cnlfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZGVudHJ5X2NhY2hlIiwKIAkJCQkJIHNpemVvZihzdHJ1Y3QgZGVudHJ5KSwKIAkJCQkJIDAsCi0JCQkJCSBTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX1BBTklDLAorCQkJCQkgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUN8CisJCQkJCSBTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgTlVMTCwgTlVMTCk7CiAJCiAJc2V0X3Nocmlua2VyKERFRkFVTFRfU0VFS1MsIHNocmlua19kY2FjaGVfbWVtb3J5KTsKQEAgLTE3MzYsNyArMTc0OSw3IEBACiAJCQlTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywgTlVMTCwgTlVMTCk7CiAKIAlmaWxwX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJmaWxwIiwgc2l6ZW9mKHN0cnVjdCBmaWxlKSwgMCwKLQkJCVNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLCBmaWxwX2N0b3IsIGZpbHBfZHRvcik7CisJCQlTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywgTlVMTCwgTlVMTCk7CiAKIAlkY2FjaGVfaW5pdChtZW1wYWdlcyk7CiAJaW5vZGVfaW5pdChtZW1wYWdlcyk7CmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2ZpbGUuYyBiL2ZzL2RlYnVnZnMvZmlsZS5jCmluZGV4IGQ1NzU0NTIuLjQwYzRmYzkgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvZmlsZS5jCisrKyBiL2ZzL2RlYnVnZnMvZmlsZS5jCkBAIC0yNTEsMyArMjUxLDQ5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZWJ1Z2ZzX2NyZWF0ZV9ib29sKTsKIAorc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX2Jsb2Ioc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciAqYmxvYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBibG9iLT5kYXRhLAorCQkJYmxvYi0+c2l6ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfYmxvYiA9IHsKKwkucmVhZCA9CQlyZWFkX2ZpbGVfYmxvYiwKKwkub3BlbiA9CQlkZWZhdWx0X29wZW4sCit9OworCisvKioKKyAqIGRlYnVnZnNfY3JlYXRlX2Jsb2IgLSBjcmVhdGUgYSBmaWxlIGluIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0gdGhhdCBpcworICogdXNlZCB0byByZWFkIGFuZCB3cml0ZSBhIGJpbmFyeSBibG9iLgorICoKKyAqIEBuYW1lOiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBjcmVhdGUuCisgKiBAbW9kZTogdGhlIHBlcm1pc3Npb24gdGhhdCB0aGUgZmlsZSBzaG91bGQgaGF2ZQorICogQHBhcmVudDogYSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgZGVudHJ5IGZvciB0aGlzIGZpbGUuICBUaGlzIHNob3VsZCBiZSBhCisgKiAgICAgICAgICBkaXJlY3RvcnkgZGVudHJ5IGlmIHNldC4gIElmIHRoaXMgcGFyYW1hdGVyIGlzIE5VTEwsIHRoZW4gdGhlCisgKiAgICAgICAgICBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgZGVidWdmcyBmaWxlc3lzdGVtLgorICogQGJsb2I6IGEgcG9pbnRlciB0byBhIHN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciB3aGljaCBjb250YWlucyBhIHBvaW50ZXIKKyAqICAgICAgICB0byB0aGUgYmxvYiBkYXRhIGFuZCB0aGUgc2l6ZSBvZiB0aGUgZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBmaWxlIGluIGRlYnVnZnMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSB0aGF0IGV4cG9ydHMKKyAqIEBibG9iLT5kYXRhIGFzIGEgYmluYXJ5IGJsb2IuIElmIHRoZSBAbW9kZSB2YXJpYWJsZSBpcyBzbyBzZXQgaXQgY2FuIGJlCisgKiByZWFkIGZyb20uIFdyaXRpbmcgaXMgbm90IHN1cHBvcnRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgcG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXMKKyAqIHBvaW50ZXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGRlYnVnZnNfcmVtb3ZlKCkgZnVuY3Rpb24gd2hlbiB0aGUgZmlsZSBpcworICogdG8gYmUgcmVtb3ZlZCAobm8gYXV0b21hdGljIGNsZWFudXAgaGFwcGVucyBpZiB5b3VyIG1vZHVsZSBpcyB1bmxvYWRlZCwKKyAqIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZS4pICBJZiBhbiBlcnJvciBvY2N1cnMsIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBJZiBkZWJ1Z2ZzIGlzIG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWwsIHRoZSB2YWx1ZSAtRU5PREVWIHdpbGwgYmUKKyAqIHJldHVybmVkLiAgSXQgaXMgbm90IHdpc2UgdG8gY2hlY2sgZm9yIHRoaXMgdmFsdWUsIGJ1dCByYXRoZXIsIGNoZWNrIGZvcgorICogTlVMTCBvciAhTlVMTCBpbnN0ZWFkIGFzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgI2lmZGVmIGluIHRoZSBjYWxsaW5nCisgKiBjb2RlLgorICovCitzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkgICBzdHJ1Y3QgZGVidWdmc19ibG9iX3dyYXBwZXIgKmJsb2IpCit7CisJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgbW9kZSwgcGFyZW50LCBibG9iLCAmZm9wc19ibG9iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRlYnVnZnNfY3JlYXRlX2Jsb2IpOwpkaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5vZGUuYwppbmRleCBiZmI4YTIzLi4xNGM1NjIwIDEwMDY0NAotLS0gYS9mcy9kZXZwdHMvaW5vZGUuYworKysgYi9mcy9kZXZwdHMvaW5vZGUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2cHRzX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAKICNkZWZpbmUgREVWUFRTX1NVUEVSX01BR0lDIDB4MWNkMQogCkBAIC0zMiwzOSArMzMsNjAgQEAKIAl1bW9kZV90IG1vZGU7CiB9IGNvbmZpZyA9IHsubW9kZSA9IDA2MDB9OwogCitlbnVtIHsKKwlPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfbW9kZSwKKwlPcHRfZXJyCit9OworCitzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CisJe09wdF91aWQsICJ1aWQ9JXUifSwKKwl7T3B0X2dpZCwgImdpZD0ldSJ9LAorCXtPcHRfbW9kZSwgIm1vZGU9JW8ifSwKKwl7T3B0X2VyciwgTlVMTH0KK307CisKIHN0YXRpYyBpbnQgZGV2cHRzX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKIHsKLQlpbnQgc2V0dWlkID0gMDsKLQlpbnQgc2V0Z2lkID0gMDsKLQl1aWRfdCB1aWQgPSAwOwotCWdpZF90IGdpZCA9IDA7Ci0JdW1vZGVfdCBtb2RlID0gMDYwMDsKLQljaGFyICp0aGlzX2NoYXI7CisJY2hhciAqcDsKIAotCXRoaXNfY2hhciA9IE5VTEw7Ci0Jd2hpbGUgKCh0aGlzX2NoYXIgPSBzdHJzZXAoJmRhdGEsICIsIikpICE9IE5VTEwpIHsKLQkJaW50IG47Ci0JCWNoYXIgZHVtbXk7Ci0JCWlmICghKnRoaXNfY2hhcikKKwljb25maWcuc2V0dWlkICA9IDA7CisJY29uZmlnLnNldGdpZCAgPSAwOworCWNvbmZpZy51aWQgICAgID0gMDsKKwljb25maWcuZ2lkICAgICA9IDA7CisJY29uZmlnLm1vZGUgICAgPSAwNjAwOworCisJd2hpbGUgKChwID0gc3Ryc2VwKCZkYXRhLCAiLCIpKSAhPSBOVUxMKSB7CisJCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKKwkJaW50IHRva2VuOworCQlpbnQgb3B0aW9uOworCisJCWlmICghKnApCiAJCQljb250aW51ZTsKLQkJaWYgKHNzY2FuZih0aGlzX2NoYXIsICJ1aWQ9JWklYyIsICZuLCAmZHVtbXkpID09IDEpIHsKLQkJCXNldHVpZCA9IDE7Ci0JCQl1aWQgPSBuOwotCQl9IGVsc2UgaWYgKHNzY2FuZih0aGlzX2NoYXIsICJnaWQ9JWklYyIsICZuLCAmZHVtbXkpID09IDEpIHsKLQkJCXNldGdpZCA9IDE7Ci0JCQlnaWQgPSBuOwotCQl9IGVsc2UgaWYgKHNzY2FuZih0aGlzX2NoYXIsICJtb2RlPSVvJWMiLCAmbiwgJmR1bW15KSA9PSAxKQotCQkJbW9kZSA9IG4gJiB+U19JRk1UOwotCQllbHNlIHsKLQkJCXByaW50aygiZGV2cHRzOiBjYWxsZWQgd2l0aCBib2d1cyBvcHRpb25zXG4iKTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfdWlkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljb25maWcudWlkID0gb3B0aW9uOworCQkJY29uZmlnLnNldHVpZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZ2lkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljb25maWcuZ2lkID0gb3B0aW9uOworCQkJY29uZmlnLnNldGdpZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbW9kZToKKwkJCWlmIChtYXRjaF9vY3RhbCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljb25maWcubW9kZSA9IG9wdGlvbiAmIH5TX0lGTVQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAiZGV2cHRzOiBjYWxsZWQgd2l0aCBib2d1cyBvcHRpb25zXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCWNvbmZpZy5zZXR1aWQgID0gc2V0dWlkOwotCWNvbmZpZy5zZXRnaWQgID0gc2V0Z2lkOwotCWNvbmZpZy51aWQgICAgID0gdWlkOwotCWNvbmZpZy5naWQgICAgID0gZ2lkOwotCWNvbmZpZy5tb2RlICAgID0gbW9kZTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZGlyZWN0LWlvLmMgYi9mcy9kaXJlY3QtaW8uYwppbmRleCA4NDgwNDRhLi4yMzVlZDhkIDEwMDY0NAotLS0gYS9mcy9kaXJlY3QtaW8uYworKysgYi9mcy9kaXJlY3QtaW8uYwpAQCAtMTI5LDYgKzEyOSw3IEBACiAJLyogQUlPIHJlbGF0ZWQgc3R1ZmYgKi8KIAlzdHJ1Y3Qga2lvY2IgKmlvY2I7CQkvKiBraW9jYiAqLwogCWludCBpc19hc3luYzsJCQkvKiBpcyBJTyBhc3luYyA/ICovCisJaW50IGlvX2Vycm9yOwkJCS8qIElPIGVycm9yIGluIGNvbXBsZXRpb24gcGF0aCAqLwogCXNzaXplX3QgcmVzdWx0OyAgICAgICAgICAgICAgICAgLyogSU8gcmVzdWx0ICovCiB9OwogCkBAIC0yNTAsNiArMjUxLDEwIEBACiAJCQkgICAgKChvZmZzZXQgKyB0cmFuc2ZlcnJlZCkgPiBkaW8tPmlfc2l6ZSkpCiAJCQkJdHJhbnNmZXJyZWQgPSBkaW8tPmlfc2l6ZSAtIG9mZnNldDsKIAorCQkJLyogY2hlY2sgZm9yIGVycm9yIGluIGNvbXBsZXRpb24gcGF0aCAqLworCQkJaWYgKGRpby0+aW9fZXJyb3IpCisJCQkJdHJhbnNmZXJyZWQgPSBkaW8tPmlvX2Vycm9yOworCiAJCQlkaW9fY29tcGxldGUoZGlvLCBvZmZzZXQsIHRyYW5zZmVycmVkKTsKIAogCQkJLyogQ29tcGxldGUgQUlPIGxhdGVyIGlmIGZhbGxpbmcgYmFjayB0byBidWZmZXJlZCBpL28gKi8KQEAgLTQwNiw3ICs0MTEsNyBAQAogCWludCBwYWdlX25vOwogCiAJaWYgKCF1cHRvZGF0ZSkKLQkJZGlvLT5yZXN1bHQgPSAtRUlPOworCQlkaW8tPmlvX2Vycm9yID0gLUVJTzsKIAogCWlmIChkaW8tPmlzX2FzeW5jICYmIGRpby0+cncgPT0gUkVBRCkgewogCQliaW9fY2hlY2tfcGFnZXNfZGlydHkoYmlvKTsJLyogdHJhbnNmZXJzIG93bmVyc2hpcCAqLwpAQCAtOTcxLDYgKzk3Niw3IEBACiAJZGlvLT5uZXh0X2Jsb2NrX2Zvcl9pbyA9IC0xOwogCiAJZGlvLT5wYWdlX2Vycm9ycyA9IDA7CisJZGlvLT5pb19lcnJvciA9IDA7CiAJZGlvLT5yZXN1bHQgPSAwOwogCWRpby0+aW9jYiA9IGlvY2I7CiAJZGlvLT5pX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CkBAIC0xMTU1LDE1ICsxMTYxLDE2IEBACiAgKiBGb3Igd3JpdGVzLCBpX211dGV4IGlzIG5vdCBoZWxkIG9uIGVudHJ5OyBpdCBpcyBuZXZlciB0YWtlbi4KICAqCiAgKiBESU9fTE9DS0lORyAoc2ltcGxlIGxvY2tpbmcgZm9yIHJlZ3VsYXIgZmlsZXMpCi0gKiBGb3Igd3JpdGVzIHdlIGFyZSBjYWxsZWQgdW5kZXIgaV9tdXRleCBhbmQgcmV0dXJuIHdpdGggaV9tdXRleCBoZWxkLCBldmVuIHRob3VnaAotICogaXQgaXMgaW50ZXJuYWxseSBkcm9wcGVkLgorICogRm9yIHdyaXRlcyB3ZSBhcmUgY2FsbGVkIHVuZGVyIGlfbXV0ZXggYW5kIHJldHVybiB3aXRoIGlfbXV0ZXggaGVsZCwgZXZlbgorICogdGhvdWdoIGl0IGlzIGludGVybmFsbHkgZHJvcHBlZC4KICAqIEZvciByZWFkcywgaV9tdXRleCBpcyBub3QgaGVsZCBvbiBlbnRyeSwgYnV0IGl0IGlzIHRha2VuIGFuZCBkcm9wcGVkIGJlZm9yZQogICogcmV0dXJuaW5nLgogICoKICAqIERJT19PV05fTE9DS0lORyAoZmlsZXN5c3RlbSBwcm92aWRlcyBzeW5jaHJvbmlzYXRpb24gYW5kIGhhbmRsaW5nIG9mCiAgKgl1bmluaXRpYWxpc2VkIGRhdGEsIGFsbG93aW5nIHBhcmFsbGVsIGRpcmVjdCByZWFkZXJzIGFuZCB3cml0ZXJzKQogICogRm9yIHdyaXRlcyB3ZSBhcmUgY2FsbGVkIHdpdGhvdXQgaV9tdXRleCwgcmV0dXJuIHdpdGhvdXQgaXQsIG5ldmVyIHRvdWNoIGl0LgotICogRm9yIHJlYWRzLCBpX211dGV4IGlzIGhlbGQgb24gZW50cnkgYW5kIHdpbGwgYmUgcmVsZWFzZWQgYmVmb3JlIHJldHVybmluZy4KKyAqIEZvciByZWFkcyB3ZSBhcmUgY2FsbGVkIHVuZGVyIGlfbXV0ZXggYW5kIHJldHVybiB3aXRoIGlfbXV0ZXggaGVsZCwgZXZlbgorICogdGhvdWdoIGl0IG1heSBiZSBpbnRlcm5hbGx5IGRyb3BwZWQuCiAgKgogICogQWRkaXRpb25hbCBpX2FsbG9jX3NlbSBsb2NraW5nIHJlcXVpcmVtZW50cyBkZXNjcmliZWQgaW5saW5lIGJlbG93LgogICovCkBAIC0xMTgyLDcgKzExODksOCBAQAogCXNzaXplX3QgcmV0dmFsID0gLUVJTlZBTDsKIAlsb2ZmX3QgZW5kID0gb2Zmc2V0OwogCXN0cnVjdCBkaW8gKmRpbzsKLQlpbnQgcmVhZGVyX3dpdGhfaXNlbSA9IChydyA9PSBSRUFEICYmIGRpb19sb2NrX3R5cGUgPT0gRElPX09XTl9MT0NLSU5HKTsKKwlpbnQgcmVsZWFzZV9pX211dGV4ID0gMDsKKwlpbnQgYWNxdWlyZV9pX211dGV4ID0gMDsKIAogCWlmIChydyAmIFdSSVRFKQogCQljdXJyZW50LT5mbGFncyB8PSBQRl9TWU5DV1JJVEU7CkBAIC0xMjI1LDcgKzEyMzMsNiBAQAogCSAqCXdyaXRlcnMgbmVlZCB0byBncmFiIGlfYWxsb2Nfc2VtIG9ubHkgKGlfbXV0ZXggaXMgYWxyZWFkeSBoZWxkKQogCSAqIEZvciByZWd1bGFyIGZpbGVzIHVzaW5nIERJT19PV05fTE9DS0lORywKIAkgKgluZWl0aGVyIHJlYWRlcnMgbm9yIHdyaXRlcnMgdGFrZSBhbnkgbG9ja3MgaGVyZQotCSAqCShpX211dGV4IGlzIGFscmVhZHkgaGVsZCBhbmQgcmVsZWFzZSBmb3Igd3JpdGVycyBoZXJlKQogCSAqLwogCWRpby0+bG9ja190eXBlID0gZGlvX2xvY2tfdHlwZTsKIAlpZiAoZGlvX2xvY2tfdHlwZSAhPSBESU9fTk9fTE9DS0lORykgewpAQCAtMTIzNiw3ICsxMjQzLDcgQEAKIAkJCW1hcHBpbmcgPSBpb2NiLT5raV9maWxwLT5mX21hcHBpbmc7CiAJCQlpZiAoZGlvX2xvY2tfdHlwZSAhPSBESU9fT1dOX0xPQ0tJTkcpIHsKIAkJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQkJcmVhZGVyX3dpdGhfaXNlbSA9IDE7CisJCQkJcmVsZWFzZV9pX211dGV4ID0gMTsKIAkJCX0KIAogCQkJcmV0dmFsID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBvZmZzZXQsCkBAIC0xMjQ4LDcgKzEyNTUsNyBAQAogCiAJCQlpZiAoZGlvX2xvY2tfdHlwZSA9PSBESU9fT1dOX0xPQ0tJTkcpIHsKIAkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQlyZWFkZXJfd2l0aF9pc2VtID0gMDsKKwkJCQlhY3F1aXJlX2lfbXV0ZXggPSAxOwogCQkJfQogCQl9CiAKQEAgLTEyNjksMTEgKzEyNzYsMTMgQEAKIAkJCQlucl9zZWdzLCBibGtiaXRzLCBnZXRfYmxvY2tzLCBlbmRfaW8sIGRpbyk7CiAKIAlpZiAocncgPT0gUkVBRCAmJiBkaW9fbG9ja190eXBlID09IERJT19MT0NLSU5HKQotCQlyZWFkZXJfd2l0aF9pc2VtID0gMDsKKwkJcmVsZWFzZV9pX211dGV4ID0gMDsKIAogb3V0OgotCWlmIChyZWFkZXJfd2l0aF9pc2VtKQorCWlmIChyZWxlYXNlX2lfbXV0ZXgpCiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWVsc2UgaWYgKGFjcXVpcmVfaV9tdXRleCkKKwkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChydyAmIFdSSVRFKQogCQljdXJyZW50LT5mbGFncyAmPSB+UEZfU1lOQ1dSSVRFOwogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9kcXVvdC5jIGIvZnMvZHF1b3QuYwppbmRleCAxOTY2Yzg5Li42YjM4ODY5IDEwMDY0NAotLS0gYS9mcy9kcXVvdC5jCisrKyBiL2ZzL2RxdW90LmMKQEAgLTEwMywxMiArMTAzLDEyIEBACiAgKiAodGhlc2UgbG9ja2luZyBydWxlcyBhbHNvIGFwcGx5IGZvciBTX05PUVVPVEEgZmxhZyBpbiB0aGUgaW5vZGUgLSBub3RlIHRoYXQKICAqIGZvciBhbHRlcmluZyB0aGUgZmxhZyBpX211dGV4IGlzIGFsc28gbmVlZGVkKS4gIElmIG9wZXJhdGlvbiBpcyBob2xkaW5nCiAgKiByZWZlcmVuY2UgdG8gZHF1b3QgaW4gb3RoZXIgd2F5IChlLmcuIHF1b3RhY3RsIG9wcykgaXQgbXVzdCBiZSBndWFyZGVkIGJ5Ci0gKiBkcW9ub2ZmX3NlbS4KKyAqIGRxb25vZmZfbXV0ZXguCiAgKiBUaGlzIGxvY2tpbmcgYXNzdXJlcyB0aGF0OgogICogICBhKSB1cGRhdGUvYWNjZXNzIHRvIGRxdW90IHBvaW50ZXJzIGluIGlub2RlIGlzIHNlcmlhbGl6ZWQKICAqICAgYikgZXZlcnlvbmUgaXMgZ3VhcmRlZCBhZ2FpbnN0IGludmFsaWRhdGVfZHF1b3RzKCkKICAqCi0gKiBFYWNoIGRxdW90IGhhcyBpdHMgZHFfbG9jayBzZW1hcGhvcmUuIExvY2tlZCBkcXVvdHMgbWlnaHQgbm90IGJlIHJlZmVyZW5jZWQKKyAqIEVhY2ggZHF1b3QgaGFzIGl0cyBkcV9sb2NrIG11dGV4LiBMb2NrZWQgZHF1b3RzIG1pZ2h0IG5vdCBiZSByZWZlcmVuY2VkCiAgKiBmcm9tIGlub2RlcyAoZHF1b3RfYWxsb2Nfc3BhY2UoKSBhbmQgc3VjaCBkb24ndCBjaGVjayB0aGUgZHFfbG9jaykuCiAgKiBDdXJyZW50bHkgZHF1b3QgaXMgbG9ja2VkIG9ubHkgd2hlbiBpdCBpcyBiZWluZyByZWFkIHRvIG1lbW9yeSAob3Igc3BhY2UgZm9yCiAgKiBpdCBpcyBiZWluZyBhbGxvY2F0ZWQpIG9uIHRoZSBmaXJzdCBkcWdldCgpIGFuZCB3aGVuIGl0IGlzIGJlaW5nIHJlbGVhc2VkIG9uCkBAIC0xMTgsOSArMTE4LDkgQEAKICAqIHNwaW5sb2NrIHRvIGludGVybmFsIGJ1ZmZlcnMgYmVmb3JlIHdyaXRpbmcuCiAgKgogICogTG9jayBvcmRlcmluZyAoaW5jbHVkaW5nIHJlbGF0ZWQgVkZTIGxvY2tzKSBpcyB0aGUgZm9sbG93aW5nOgotICogICBpX211dGV4ID4gZHFvbm9mZl9zZW0gPiBpcHJ1bmVfc2VtID4gam91cm5hbF9sb2NrID4gZHFwdHJfc2VtID4KLSAqICAgPiBkcXVvdC0+ZHFfbG9jayA+IGRxaW9fc2VtCi0gKiBpX211dGV4IG9uIHF1b3RhIGZpbGVzIGlzIHNwZWNpYWwgKGl0J3MgYmVsb3cgZHFpb19zZW0pCisgKiAgIGlfbXV0ZXggPiBkcW9ub2ZmX3NlbSA+IGpvdXJuYWxfbG9jayA+IGRxcHRyX3NlbSA+IGRxdW90LT5kcV9sb2NrID4KKyAqICAgZHFpb19tdXRleAorICogaV9tdXRleCBvbiBxdW90YSBmaWxlcyBpcyBzcGVjaWFsIChpdCdzIGJlbG93IGRxaW9fbXV0ZXgpCiAgKi8KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhkcV9saXN0X2xvY2spOwpAQCAtMjgxLDggKzI4MSw4IEBACiAKIHN0YXRpYyB2b2lkIHdhaXRfb25fZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKIHsKLQlkb3duKCZkcXVvdC0+ZHFfbG9jayk7Ci0JdXAoJmRxdW90LT5kcV9sb2NrKTsKKwltdXRleF9sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CiB9CiAKICNkZWZpbmUgbWFya19kcXVvdF9kaXJ0eShkcXVvdCkgKChkcXVvdCktPmRxX3NiLT5kcV9vcC0+bWFya19kaXJ0eShkcXVvdCkpCkBAIC0zMjEsOCArMzIxLDggQEAKIAlpbnQgcmV0ID0gMCwgcmV0MiA9IDA7CiAJc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKTsKIAotCWRvd24oJmRxdW90LT5kcV9sb2NrKTsKLQlkb3duKCZkcW9wdC0+ZHFpb19zZW0pOworCW11dGV4X2xvY2soJmRxdW90LT5kcV9sb2NrKTsKKwltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CiAJaWYgKCF0ZXN0X2JpdChEUV9SRUFEX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQogCQlyZXQgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+cmVhZF9kcWJsayhkcXVvdCk7CiAJaWYgKHJldCA8IDApCkBAIC0zNDMsOCArMzQzLDggQEAKIAl9CiAJc2V0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncyk7CiBvdXRfaW9sb2NrOgotCXVwKCZkcW9wdC0+ZHFpb19zZW0pOwotCXVwKCZkcXVvdC0+ZHFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzU2LDcgKzM1Niw3IEBACiAJaW50IHJldCA9IDAsIHJldDIgPSAwOwogCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYik7CiAKLQlkb3duKCZkcW9wdC0+ZHFpb19zZW0pOworCW11dGV4X2xvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKIAlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CiAJaWYgKCFjbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCkpIHsKIAkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CkBAIC0zNzMsNyArMzczLDcgQEAKIAkJCXJldCA9IHJldDI7CiAJfQogb3V0X3NlbToKLQl1cCgmZHFvcHQtPmRxaW9fc2VtKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zODUsMTEgKzM4NSwxMSBAQAogCWludCByZXQgPSAwLCByZXQyID0gMDsKIAlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpOwogCi0JZG93bigmZHF1b3QtPmRxX2xvY2spOworCW11dGV4X2xvY2soJmRxdW90LT5kcV9sb2NrKTsKIAkvKiBDaGVjayB3aGV0aGVyIHdlIGFyZSBub3QgcmFjaW5nIHdpdGggc29tZSBvdGhlciBkcWdldCgpICovCiAJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpID4gMSkKIAkJZ290byBvdXRfZHFsb2NrOwotCWRvd24oJmRxb3B0LT5kcWlvX3NlbSk7CisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwogCWlmIChkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+cmVsZWFzZV9kcWJsaykgewogCQlyZXQgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+cmVsZWFzZV9kcWJsayhkcXVvdCk7CiAJCS8qIFdyaXRlIHRoZSBpbmZvICovCkBAIC0zOTksMzEgKzM5OSw1NyBAQAogCQkJcmV0ID0gcmV0MjsKIAl9CiAJY2xlYXJfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQl1cCgmZHFvcHQtPmRxaW9fc2VtKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKIG91dF9kcWxvY2s6Ci0JdXAoJmRxdW90LT5kcV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRxdW90LT5kcV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKiBJbnZhbGlkYXRlIGFsbCBkcXVvdHMgb24gdGhlIGxpc3QuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlcgogICogcXVvdGEgaXMgZGlzYWJsZWQgYW5kIHBvaW50ZXJzIGZyb20gaW5vZGVzIHJlbW92ZWQgc28gdGhlcmUgY2Fubm90IGJlIG5ldwotICogcXVvdGEgdXNlcnMuIEFsc28gYmVjYXVzZSB3ZSBob2xkIGRxb25vZmZfc2VtIHRoZXJlIGNhbiBiZSBubyBxdW90YSB1c2VycwotICogZm9yIHRoaXMgc2IrdHlwZSBhdCBhbGwuICovCisgKiBxdW90YSB1c2Vycy4gVGhlcmUgY2FuIHN0aWxsIGJlIHNvbWUgdXNlcnMgb2YgcXVvdGFzIGR1ZSB0byBpbm9kZXMgYmVpbmcKKyAqIGp1c3QgZGVsZXRlZCBvciBwcnVuZWQgYnkgcHJ1bmVfaWNhY2hlKCkgKHRob3NlIGFyZSBub3QgYXR0YWNoZWQgdG8gYW55CisgKiBsaXN0KS4gV2UgaGF2ZSB0byB3YWl0IGZvciBzdWNoIHVzZXJzLgorICovCiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2RxdW90cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgZHF1b3QgKmRxdW90LCAqdG1wOwogCityZXN0YXJ0OgogCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHF1b3QsIHRtcCwgJmludXNlX2xpc3QsIGRxX2ludXNlKSB7CiAJCWlmIChkcXVvdC0+ZHFfc2IgIT0gc2IpCiAJCQljb250aW51ZTsKIAkJaWYgKGRxdW90LT5kcV90eXBlICE9IHR5cGUpCiAJCQljb250aW51ZTsKLSNpZmRlZiBfX0RRVU9UX1BBUkFOT0lBCi0JCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSkKLQkJCUJVRygpOwotI2VuZGlmCi0JCS8qIFF1b3RhIG5vdyBoYXMgbm8gdXNlcnMgYW5kIGl0IGhhcyBiZWVuIHdyaXR0ZW4gb24gbGFzdCBkcXB1dCgpICovCisJCS8qIFdhaXQgZm9yIGRxdW90IHVzZXJzICovCisJCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSkgeworCQkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJCWF0b21pY19pbmMoJmRxdW90LT5kcV9jb3VudCk7CisJCQlwcmVwYXJlX3RvX3dhaXQoJmRxdW90LT5kcV93YWl0X3VudXNlZCwgJndhaXQsCisJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQkJLyogT25jZSBkcXB1dCgpIHdha2VzIHVzIHVwLCB3ZSBrbm93IGl0J3MgdGltZSB0byBmcmVlCisJCQkgKiB0aGUgZHF1b3QuCisJCQkgKiBJTVBPUlRBTlQ6IHdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGVyZSBpcyBhbHdheXMKKwkJCSAqIGF0IG1vc3Qgb25lIHByb2Nlc3Mgd2FpdGluZyBmb3IgZHF1b3QgdG8gZnJlZS4KKwkJCSAqIE90aGVyd2lzZSBkcV9jb3VudCB3b3VsZCBiZSA+IDEgYW5kIHdlIHdvdWxkIG5ldmVyCisJCQkgKiB3YWtlIHVwLgorCQkJICovCisJCQlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgPiAxKQorCQkJCXNjaGVkdWxlKCk7CisJCQlmaW5pc2hfd2FpdCgmZHF1b3QtPmRxX3dhaXRfdW51c2VkLCAmd2FpdCk7CisJCQlkcXB1dChkcXVvdCk7CisJCQkvKiBBdCB0aGlzIG1vbWVudCBkcXVvdCgpIG5lZWQgbm90IGV4aXN0IChpdCBjb3VsZCBiZQorCQkJICogcmVjbGFpbWVkIGJ5IHBydW5lX2RxY2FjaGUoKS4gSGVuY2Ugd2UgbXVzdAorCQkJICogcmVzdGFydC4gKi8KKwkJCWdvdG8gcmVzdGFydDsKKwkJfQorCQkvKgorCQkgKiBRdW90YSBub3cgaGFzIG5vIHVzZXJzIGFuZCBpdCBoYXMgYmVlbiB3cml0dGVuIG9uIGxhc3QKKwkJICogZHFwdXQoKQorCQkgKi8KIAkJcmVtb3ZlX2RxdW90X2hhc2goZHF1b3QpOwogCQlyZW1vdmVfZnJlZV9kcXVvdChkcXVvdCk7CiAJCXJlbW92ZV9pbnVzZShkcXVvdCk7CkBAIC00MzksNyArNDY1LDcgQEAKIAlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7CiAJaW50IGNudDsKIAotCWRvd24oJmRxb3B0LT5kcW9ub2ZmX3NlbSk7CisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewogCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKIAkJCWNvbnRpbnVlOwpAQCAtNDc0LDcgKzUwMCw3IEBACiAJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwogCWRxc3RhdHMuc3luY3MrKzsKIAlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQl1cCgmZHFvcHQtPmRxb25vZmZfc2VtKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTE1LDcgKzU0MSw3IEBACiAvKgogICogUHV0IHJlZmVyZW5jZSB0byBkcXVvdAogICogTk9URTogSWYgeW91IGNoYW5nZSB0aGlzIGZ1bmN0aW9uIHBsZWFzZSBjaGVjayB3aGV0aGVyIGRxcHV0X2Jsb2NrcygpIHdvcmtzIHJpZ2h0Li4uCi0gKiBNVVNUIGJlIGNhbGxlZCB3aXRoIGVpdGhlciBkcXB0cl9zZW0gb3IgZHFvbm9mZl9zZW0gaGVsZAorICogTVVTVCBiZSBjYWxsZWQgd2l0aCBlaXRoZXIgZHFwdHJfc2VtIG9yIGRxb25vZmZfbXV0ZXggaGVsZAogICovCiBzdGF0aWMgdm9pZCBkcXB1dChzdHJ1Y3QgZHF1b3QgKmRxdW90KQogewpAQCAtNTQwLDYgKzU2NiwxMCBAQAogCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA+IDEpIHsKIAkJLyogV2UgaGF2ZSBtb3JlIHRoYW4gb25lIHVzZXIuLi4gbm90aGluZyB0byBkbyAqLwogCQlhdG9taWNfZGVjKCZkcXVvdC0+ZHFfY291bnQpOworCQkvKiBSZWxlYXNpbmcgZHF1b3QgZHVyaW5nIHF1b3Rhb2ZmIHBoYXNlPyAqLworCQlpZiAoIXNiX2hhc19xdW90YV9lbmFibGVkKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpICYmCisJCSAgICBhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA9PSAxKQorCQkJd2FrZV91cCgmZHF1b3QtPmRxX3dhaXRfdW51c2VkKTsKIAkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC01NzYsMTEgKzYwNiwxMiBAQAogCQlyZXR1cm4gTk9EUVVPVDsKIAogCW1lbXNldCgoY2FkZHJfdClkcXVvdCwgMCwgc2l6ZW9mKHN0cnVjdCBkcXVvdCkpOwotCXNlbWFfaW5pdCgmZHF1b3QtPmRxX2xvY2ssIDEpOworCW11dGV4X2luaXQoJmRxdW90LT5kcV9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZHF1b3QtPmRxX2ZyZWUpOwogCUlOSVRfTElTVF9IRUFEKCZkcXVvdC0+ZHFfaW51c2UpOwogCUlOSVRfSExJU1RfTk9ERSgmZHF1b3QtPmRxX2hhc2gpOwogCUlOSVRfTElTVF9IRUFEKCZkcXVvdC0+ZHFfZGlydHkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRxdW90LT5kcV93YWl0X3VudXNlZCk7CiAJZHF1b3QtPmRxX3NiID0gc2I7CiAJZHF1b3QtPmRxX3R5cGUgPSB0eXBlOwogCWF0b21pY19zZXQoJmRxdW90LT5kcV9jb3VudCwgMSk7CkBAIC01OTAsNyArNjIxLDcgQEAKIAogLyoKICAqIEdldCByZWZlcmVuY2UgdG8gZHF1b3QKLSAqIE1VU1QgYmUgY2FsbGVkIHdpdGggZWl0aGVyIGRxcHRyX3NlbSBvciBkcW9ub2ZmX3NlbSBoZWxkCisgKiBNVVNUIGJlIGNhbGxlZCB3aXRoIGVpdGhlciBkcXB0cl9zZW0gb3IgZHFvbm9mZl9tdXRleCBoZWxkCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZHF1b3QgKmRxZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBpZCwgaW50IHR5cGUpCiB7CkBAIC02NTYsNyArNjg3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhpcyByb3V0aW5lIGlzIGd1YXJkZWQgYnkgZHFvbm9mZl9zZW0gc2VtYXBob3JlICovCisvKiBUaGlzIHJvdXRpbmUgaXMgZ3VhcmRlZCBieSBkcW9ub2ZmX211dGV4IG11dGV4ICovCiBzdGF0aWMgdm9pZCBhZGRfZHF1b3RfcmVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CkBAIC03MzIsMTMgKzc2Myw5IEBACiB7CiAJTElTVF9IRUFEKHRvZnJlZV9oZWFkKTsKIAotCS8qIFdlIG5lZWQgdG8gYmUgZ3VhcmRlZCBhZ2FpbnN0IHBydW5lX2ljYWNoZSB0byByZWFjaCBhbGwgdGhlCi0JICogaW5vZGVzIC0gb3RoZXJ3aXNlIHNvbWUgY2FuIGJlIG9uIHRoZSBsb2NhbCBsaXN0IG9mIHBydW5lX2ljYWNoZSAqLwotCWRvd24oJmlwcnVuZV9zZW0pOwogCWRvd25fd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKIAlyZW1vdmVfZHF1b3RfcmVmKHNiLCB0eXBlLCAmdG9mcmVlX2hlYWQpOwogCXVwX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7Ci0JdXAoJmlwcnVuZV9zZW0pOwogCXB1dF9kcXVvdF9saXN0KCZ0b2ZyZWVfaGVhZCk7CiB9CiAKQEAgLTkzOCw4ICs5NjUsOCBAQAogCXVuc2lnbmVkIGludCBpZCA9IDA7CiAJaW50IGNudCwgcmV0ID0gMDsKIAotCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBzZW1hcGhvcmUgLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLSAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIHNlbWFwaG9yZSAqLworCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCiAJCXJldHVybiAwOwogCWRvd25fd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKQEAgLTEwMDIsOCArMTAyOSw4IEBACiAJaW50IGNudCwgcmV0ID0gTk9fUVVPVEE7CiAJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwogCi0JLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIHNlbWFwaG9yZSAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQotICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgc2VtYXBob3JlICovCisJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCisgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewogb3V0X2FkZDoKIAkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwpAQCAtMTA1MSw4ICsxMDc4LDggQEAKIAlpbnQgY250LCByZXQgPSBOT19RVU9UQTsKIAljaGFyIHdhcm50eXBlW01BWFFVT1RBU107CiAKLQkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgc2VtYXBob3JlIC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCi0gICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBzZW1hcGhvcmUgKi8KKwkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKKyAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCiAJaWYgKElTX05PUVVPVEEoaW5vZGUpKQogCQlyZXR1cm4gUVVPVEFfT0s7CiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQpAQCAtMTA5NSw4ICsxMTIyLDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgY250OwogCi0JLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIHNlbWFwaG9yZSAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQotICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgc2VtYXBob3JlICovCisJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCisgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewogb3V0X3N1YjoKIAkJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOwpAQCAtMTEzMSw4ICsxMTU4LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgY250OwogCi0JLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIHNlbWFwaG9yZSAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQotICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgc2VtYXBob3JlICovCisJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCisgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkKIAkJcmV0dXJuIFFVT1RBX09LOwogCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwpAQCAtMTE3MSw4ICsxMTk4LDggQEAKIAkgICAgY2hnaWQgPSAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpICYmIGlub2RlLT5pX2dpZCAhPSBpYXR0ci0+aWFfZ2lkOwogCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKIAotCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBzZW1hcGhvcmUgLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLSAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIHNlbWFwaG9yZSAqLworCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCiAJCXJldHVybiBRVU9UQV9PSzsKIAkvKiBDbGVhciB0aGUgYXJyYXlzICovCkBAIC0xMjY2LDkgKzEyOTMsOSBAQAogCWludCByZXQ7CiAJc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOwogCi0JZG93bigmZHFvcHQtPmRxaW9fc2VtKTsKKwltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CiAJcmV0ID0gZHFvcHQtPm9wc1t0eXBlXS0+d3JpdGVfZmlsZV9pbmZvKHNiLCB0eXBlKTsKLQl1cCgmZHFvcHQtPmRxaW9fc2VtKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzI0LDcgKzEzNTEsNyBAQAogCXN0cnVjdCBpbm9kZSAqdG9wdXRpbm9kZVtNQVhRVU9UQVNdOwogCiAJLyogV2UgbmVlZCB0byBzZXJpYWxpemUgcXVvdGFfb2ZmKCkgZm9yIGRldmljZSAqLwotCWRvd24oJmRxb3B0LT5kcW9ub2ZmX3NlbSk7CisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewogCQl0b3B1dGlub2RlW2NudF0gPSBOVUxMOwogCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKQEAgLTEzNTMsNyArMTM4MCw3IEBACiAJCWRxb3B0LT5pbmZvW2NudF0uZHFpX2JncmFjZSA9IDA7CiAJCWRxb3B0LT5vcHNbY250XSA9IE5VTEw7CiAJfQotCXVwKCZkcW9wdC0+ZHFvbm9mZl9zZW0pOworCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwogCS8qIFN5bmMgdGhlIHN1cGVyYmxvY2sgc28gdGhhdCBidWZmZXJzIHdpdGggcXVvdGEgZGF0YSBhcmUgd3JpdHRlbiB0bwogCSAqIGRpc2sgKGFuZCBzbyB1c2Vyc3BhY2Ugc2VlcyBjb3JyZWN0IGRhdGEgYWZ0ZXJ3YXJkcykuICovCiAJaWYgKHNiLT5zX29wLT5zeW5jX2ZzKQpAQCAtMTM2Niw3ICsxMzkzLDcgQEAKIAkgKiBjaGFuZ2VzIGRvbmUgYnkgdXNlcnNwYWNlIG9uIHRoZSBuZXh0IHF1b3Rhb24oKSAqLwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKIAkJaWYgKHRvcHV0aW5vZGVbY250XSkgewotCQkJZG93bigmZHFvcHQtPmRxb25vZmZfc2VtKTsKKwkJCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKIAkJCS8qIElmIHF1b3RhIHdhcyByZWVuYWJsZWQgaW4gdGhlIG1lYW50aW1lLCB3ZSBoYXZlCiAJCQkgKiBub3RoaW5nIHRvIGRvICovCiAJCQlpZiAoIXNiX2hhc19xdW90YV9lbmFibGVkKHNiLCBjbnQpKSB7CkBAIC0xMzc4LDcgKzE0MDUsNyBAQAogCQkJCW1hcmtfaW5vZGVfZGlydHkodG9wdXRpbm9kZVtjbnRdKTsKIAkJCQlpcHV0KHRvcHV0aW5vZGVbY250XSk7CiAJCQl9Ci0JCQl1cCgmZHFvcHQtPmRxb25vZmZfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwogCQl9CiAJaWYgKHNiLT5zX2JkZXYpCiAJCWludmFsaWRhdGVfYmRldihzYi0+c19iZGV2LCAwKTsKQEAgLTE0MTksNyArMTQ0Niw3IEBACiAJLyogQW5kIG5vdyBmbHVzaCB0aGUgYmxvY2sgY2FjaGUgc28gdGhhdCBrZXJuZWwgc2VlcyB0aGUgY2hhbmdlcyAqLwogCWludmFsaWRhdGVfYmRldihzYi0+c19iZGV2LCAwKTsKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JZG93bigmZHFvcHQtPmRxb25vZmZfc2VtKTsKKwltdXRleF9sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CiAJaWYgKHNiX2hhc19xdW90YV9lbmFibGVkKHNiLCB0eXBlKSkgewogCQllcnJvciA9IC1FQlVTWTsKIAkJZ290byBvdXRfbG9jazsKQEAgLTE0NDQsMTcgKzE0NzEsMTcgQEAKIAlkcW9wdC0+b3BzW3R5cGVdID0gZm10LT5xZl9vcHM7CiAJZHFvcHQtPmluZm9bdHlwZV0uZHFpX2Zvcm1hdCA9IGZtdDsKIAlJTklUX0xJU1RfSEVBRCgmZHFvcHQtPmluZm9bdHlwZV0uZHFpX2RpcnR5X2xpc3QpOwotCWRvd24oJmRxb3B0LT5kcWlvX3NlbSk7CisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwogCWlmICgoZXJyb3IgPSBkcW9wdC0+b3BzW3R5cGVdLT5yZWFkX2ZpbGVfaW5mbyhzYiwgdHlwZSkpIDwgMCkgewotCQl1cCgmZHFvcHQtPmRxaW9fc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CiAJCWdvdG8gb3V0X2ZpbGVfaW5pdDsKIAl9Ci0JdXAoJmRxb3B0LT5kcWlvX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJc2V0X2VuYWJsZV9mbGFncyhkcW9wdCwgdHlwZSk7CiAKIAlhZGRfZHF1b3RfcmVmKHNiLCB0eXBlKTsKLQl1cCgmZHFvcHQtPmRxb25vZmZfc2VtKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKIAogCXJldHVybiAwOwogCkBAIC0xNDYyLDcgKzE0ODksNyBAQAogCWRxb3B0LT5maWxlc1t0eXBlXSA9IE5VTEw7CiAJaXB1dChpbm9kZSk7CiBvdXRfbG9jazoKLQl1cCgmZHFvcHQtPmRxb25vZmZfc2VtKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKIAlpZiAob2xkZmxhZ3MgIT0gLTEpIHsKIAkJZG93bl93cml0ZSgmZHFvcHQtPmRxcHRyX3NlbSk7CiAJCS8qIFNldCB0aGUgZmxhZ3MgYmFjayAoaW4gdGhlIGNhc2Ugb2YgYWNjaWRlbnRhbCBxdW90YW9uKCkKQEAgLTE1NTAsMTQgKzE1NzcsMTQgQEAKIHsKIAlzdHJ1Y3QgZHF1b3QgKmRxdW90OwogCi0JZG93bigmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX3NlbSk7CisJbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKIAlpZiAoIShkcXVvdCA9IGRxZ2V0KHNiLCBpZCwgdHlwZSkpKSB7Ci0JCXVwKCZzYl9kcW9wdChzYiktPmRxb25vZmZfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwogCQlyZXR1cm4gLUVTUkNIOwogCX0KIAlkb19nZXRfZHFibGsoZHF1b3QsIGRpKTsKIAlkcXB1dChkcXVvdCk7Ci0JdXAoJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9zZW0pOworCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYxOSwxNCArMTY0NiwxNCBAQAogewogCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CiAKLQlkb3duKCZzYl9kcW9wdChzYiktPmRxb25vZmZfc2VtKTsKKwltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwogCWlmICghKGRxdW90ID0gZHFnZXQoc2IsIGlkLCB0eXBlKSkpIHsKLQkJdXAoJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9zZW0pOworCQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQogCWRvX3NldF9kcWJsayhkcXVvdCwgZGkpOwogCWRxcHV0KGRxdW90KTsKLQl1cCgmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjM1LDkgKzE2NjIsOSBAQAogewogCXN0cnVjdCBtZW1fZHFpbmZvICptaTsKICAgCi0JZG93bigmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX3NlbSk7CisJbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKIAlpZiAoIXNiX2hhc19xdW90YV9lbmFibGVkKHNiLCB0eXBlKSkgewotCQl1cCgmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX3NlbSk7CisJCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKIAkJcmV0dXJuIC1FU1JDSDsKIAl9CiAJbWkgPSBzYl9kcW9wdChzYiktPmluZm8gKyB0eXBlOwpAQCAtMTY0Nyw3ICsxNjc0LDcgQEAKIAlpaS0+ZHFpX2ZsYWdzID0gbWktPmRxaV9mbGFncyAmIERRRl9NQVNLOwogCWlpLT5kcWlfdmFsaWQgPSBJSUZfQUxMOwogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCXVwKCZzYl9kcW9wdChzYiktPmRxb25vZmZfc2VtKTsKKwltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NTYsOSArMTY4Myw5IEBACiB7CiAJc3RydWN0IG1lbV9kcWluZm8gKm1pOwogCi0JZG93bigmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX3NlbSk7CisJbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKIAlpZiAoIXNiX2hhc19xdW90YV9lbmFibGVkKHNiLCB0eXBlKSkgewotCQl1cCgmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX3NlbSk7CisJCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKIAkJcmV0dXJuIC1FU1JDSDsKIAl9CiAJbWkgPSBzYl9kcW9wdChzYiktPmluZm8gKyB0eXBlOwpAQCAtMTY3Myw3ICsxNzAwLDcgQEAKIAltYXJrX2luZm9fZGlydHkoc2IsIHR5cGUpOwogCS8qIEZvcmNlIHdyaXRlIHRvIGRpc2sgKi8KIAlzYi0+ZHFfb3AtPndyaXRlX2luZm8oc2IsIHR5cGUpOwotCXVwKCZzYl9kcW9wdChzYiktPmRxb25vZmZfc2VtKTsKKwltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3OTQsNyArMTgyMSw4IEBACiAKIAlkcXVvdF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZHF1b3QiLCAKIAkJCXNpemVvZihzdHJ1Y3QgZHF1b3QpLCBzaXplb2YodW5zaWduZWQgbG9uZykgKiA0LAotCQkJU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUMsCisJCQkoU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAorCQkJCVNMQUJfTUVNX1NQUkVBRHxTTEFCX1BBTklDKSwKIAkJCU5VTEwsIE5VTEwpOwogCiAJb3JkZXIgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvZWZzL3N1cGVyLmMgYi9mcy9lZnMvc3VwZXIuYwppbmRleCBhZmM0ODkxLi5kZmY2MjNlIDEwMDY0NAotLS0gYS9mcy9lZnMvc3VwZXIuYworKysgYi9mcy9lZnMvc3VwZXIuYwpAQCAtODEsNyArODEsNyBAQAogewogCWVmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZWZzX2lub2RlX2NhY2hlIiwKIAkJCQlzaXplb2Yoc3RydWN0IGVmc19pbm9kZV9pbmZvKSwKLQkJCQkwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX01FTV9TUFJFQUQsCiAJCQkJaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAoZWZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggNDI4NGNkMy4uYTBmNjgyYyAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldmVudHBvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00Niw3ICs0Nyw3IEBACiAgKiBMT0NLSU5HOgogICogVGhlcmUgYXJlIHRocmVlIGxldmVsIG9mIGxvY2tpbmcgcmVxdWlyZWQgYnkgZXBvbGwgOgogICoKLSAqIDEpIGVwc2VtIChzZW1hcGhvcmUpCisgKiAxKSBlcG11dGV4IChtdXRleCkKICAqIDIpIGVwLT5zZW0gKHJ3X3NlbWFwaG9yZSkKICAqIDMpIGVwLT5sb2NrIChyd19sb2NrKQogICoKQEAgLTY3LDkgKzY4LDkgQEAKICAqIGlmIGEgZmlsZSBoYXMgYmVlbiBwdXNoZWQgaW5zaWRlIGFuIGVwb2xsIHNldCBhbmQgaXQgaXMgdGhlbgogICogY2xvc2UoKWQgd2l0aG91dCBhIHByZXZpb3VzIGNhbGwgdG9lcG9sbF9jdGwoRVBPTExfQ1RMX0RFTCkuCiAgKiBJdCBpcyBwb3NzaWJsZSB0byBkcm9wIHRoZSAiZXAtPnNlbSIgYW5kIHRvIHVzZSB0aGUgZ2xvYmFsCi0gKiBzZW1hcGhvcmUgImVwc2VtIiAodG9nZXRoZXIgd2l0aCAiZXAtPmxvY2siKSB0byBoYXZlIGl0IHdvcmtpbmcsCisgKiBzZW1hcGhvcmUgImVwbXV0ZXgiICh0b2dldGhlciB3aXRoICJlcC0+bG9jayIpIHRvIGhhdmUgaXQgd29ya2luZywKICAqIGJ1dCBoYXZpbmcgImVwLT5zZW0iIHdpbGwgbWFrZSB0aGUgaW50ZXJmYWNlIG1vcmUgc2NhbGFibGUuCi0gKiBFdmVudHMgdGhhdCByZXF1aXJlIGhvbGRpbmcgImVwc2VtIiBhcmUgdmVyeSByYXJlLCB3aGlsZSBmb3IKKyAqIEV2ZW50cyB0aGF0IHJlcXVpcmUgaG9sZGluZyAiZXBtdXRleCIgYXJlIHZlcnkgcmFyZSwgd2hpbGUgZm9yCiAgKiBub3JtYWwgb3BlcmF0aW9ucyB0aGUgZXBvbGwgcHJpdmF0ZSAiZXAtPnNlbSIgd2lsbCBndWFyYW50ZWUKICAqIGEgZ3JlYXRlciBzY2FsYWJpbGl0eS4KICAqLwpAQCAtMjc0LDcgKzI3NSw3IEBACiAvKgogICogVGhpcyBzZW1hcGhvcmUgaXMgdXNlZCB0byBzZXJpYWxpemUgZXBfZnJlZSgpIGFuZCBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGVwc2VtOworc3RhdGljIHN0cnVjdCBtdXRleCBlcG11dGV4OwogCiAvKiBTYWZlIHdha2UgdXAgaW1wbGVtZW50YXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcG9sbF9zYWZld2FrZSBwc3c7CkBAIC00NTEsMTUgKzQ1Miw2IEBACiB9CiAKIAotLyogVXNlZCB0byBpbml0aWFsaXplIHRoZSBlcG9sbCBiaXRzIGluc2lkZSB0aGUgInN0cnVjdCBmaWxlIiAqLwotdm9pZCBldmVudHBvbGxfaW5pdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCi0JSU5JVF9MSVNUX0hFQUQoJmZpbGUtPmZfZXBfbGlua3MpOwotCXNwaW5fbG9ja19pbml0KCZmaWxlLT5mX2VwX2xvY2spOwotfQotCi0KIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGV2ZW50cG9sbF9yZWxlYXNlKCkgdG8gdW5saW5rIGZpbGVzIGZyb20gdGhlIGV2ZW50cG9sbAogICogaW50ZXJmYWNlLiBXZSBuZWVkIHRvIGhhdmUgdGhpcyBmYWNpbGl0eSB0byBjbGVhbnVwIGNvcnJlY3RseSBmaWxlcyB0aGF0IGFyZQpAQCAtNDc3LDEwICs0NjksMTAgQEAKIAkgKiBjbGVhbnVwIHBhdGgsIGFuZCB0aGlzIG1lYW5zIHRoYXQgbm9vbmUgaXMgdXNpbmcgdGhpcyBmaWxlIGFueW1vcmUuCiAJICogVGhlIG9ubHkgaGl0IG1pZ2h0IGNvbWUgZnJvbSBlcF9mcmVlKCkgYnV0IGJ5IGhvbGRpbmcgdGhlIHNlbWFwaG9yZQogCSAqIHdpbGwgY29ycmVjdGx5IHNlcmlhbGl6ZSB0aGUgb3BlcmF0aW9uLiBXZSBkbyBuZWVkIHRvIGFjcXVpcmUKLQkgKiAiZXAtPnNlbSIgYWZ0ZXIgImVwc2VtIiBiZWNhdXNlIGVwX3JlbW92ZSgpIHJlcXVpcmVzIGl0IHdoZW4gY2FsbGVkCisJICogImVwLT5zZW0iIGFmdGVyICJlcG11dGV4IiBiZWNhdXNlIGVwX3JlbW92ZSgpIHJlcXVpcmVzIGl0IHdoZW4gY2FsbGVkCiAJICogZnJvbSBhbnl3aGVyZSBidXQgZXBfZnJlZSgpLgogCSAqLwotCWRvd24oJmVwc2VtKTsKKwltdXRleF9sb2NrKCZlcG11dGV4KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eShsc3RoZWFkKSkgewogCQllcGkgPSBsaXN0X2VudHJ5KGxzdGhlYWQtPm5leHQsIHN0cnVjdCBlcGl0ZW0sIGZsbGluayk7CkBAIC00OTIsNyArNDg0LDcgQEAKIAkJdXBfd3JpdGUoJmVwLT5zZW0pOwogCX0KIAotCXVwKCZlcHNlbSk7CisJbXV0ZXhfdW5sb2NrKCZlcG11dGV4KTsKIH0KIAogCkBAIC02MDcsNyArNTk5LDcgQEAKIAlzd2l0Y2ggKG9wKSB7CiAJY2FzZSBFUE9MTF9DVExfQUREOgogCQlpZiAoIWVwaSkgewotCQkJZXBkcy5ldmVudHMgfD0gUE9MTEVSUiB8IFBPTExIVVA7CisJCQllcGRzLmV2ZW50cyB8PSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKIAogCQkJZXJyb3IgPSBlcF9pbnNlcnQoZXAsICZlcGRzLCB0ZmlsZSwgZmQpOwogCQl9IGVsc2UKQEAgLTYyMSw3ICs2MTMsNyBAQAogCQlicmVhazsKIAljYXNlIEVQT0xMX0NUTF9NT0Q6CiAJCWlmIChlcGkpIHsKLQkJCWVwZHMuZXZlbnRzIHw9IFBPTExFUlIgfCBQT0xMSFVQOworCQkJZXBkcy5ldmVudHMgfD0gUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUkRIVVA7CiAJCQllcnJvciA9IGVwX21vZGlmeShlcCwgZXBpLCAmZXBkcyk7CiAJCX0gZWxzZQogCQkJZXJyb3IgPSAtRU5PRU5UOwpAQCAtODE5LDkgKzgxMSw5IEBACiAJICogV2UgZG8gbm90IG5lZWQgdG8gaG9sZCAiZXAtPnNlbSIgaGVyZSBiZWNhdXNlIHRoZSBlcG9sbCBmaWxlCiAJICogaXMgb24gdGhlIHdheSB0byBiZSByZW1vdmVkIGFuZCBubyBvbmUgaGFzIHJlZmVyZW5jZXMgdG8gaXQKIAkgKiBhbnltb3JlLiBUaGUgb25seSBoaXQgbWlnaHQgY29tZSBmcm9tIGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoKSBidXQKLQkgKiBob2xkaW5nICJlcHNlbSIgaXMgc3VmZmljZW50IGhlcmUuCisJICogaG9sZGluZyAiZXBtdXRleCIgaXMgc3VmZmljZW50IGhlcmUuCiAJICovCi0JZG93bigmZXBzZW0pOworCW11dGV4X2xvY2soJmVwbXV0ZXgpOwogCiAJLyoKIAkgKiBXYWxrcyB0aHJvdWdoIHRoZSB3aG9sZSB0cmVlIGJ5IHVucmVnaXN0ZXJpbmcgcG9sbCBjYWxsYmFja3MuCkBAIC04NDMsNyArODM1LDcgQEAKIAkJZXBfcmVtb3ZlKGVwLCBlcGkpOwogCX0KIAotCXVwKCZlcHNlbSk7CisJbXV0ZXhfdW5sb2NrKCZlcG11dGV4KTsKIH0KIAogCkBAIC0xNjE1LDcgKzE2MDcsNyBAQAogewogCWludCBlcnJvcjsKIAotCWluaXRfTVVURVgoJmVwc2VtKTsKKwltdXRleF9pbml0KCZlcG11dGV4KTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB1c2VkIHRvIHBlcmZvcm0gc2FmZSBwb2xsIHdhaXQgaGVhZCB3YWtlIHVwcyAqLwogCWVwX3BvbGxfc2FmZXdha2VfaW5pdCgmcHN3KTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCAwZTFjOTUwLi45OTVjYmEzIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gX191c2VyX3BhdGhfbG9va3VwX29wZW4obGlicmFyeSwgTE9PS1VQX0ZPTExPVywgJm5kLCBGTU9ERV9SRUFEKTsKKwllcnJvciA9IF9fdXNlcl9wYXRoX2xvb2t1cF9vcGVuKGxpYnJhcnksIExPT0tVUF9GT0xMT1csICZuZCwgRk1PREVfUkVBRHxGTU9ERV9FWEVDKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCkBAIC00NzcsNyArNDc3LDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCi0JZXJyID0gcGF0aF9sb29rdXBfb3BlbihBVF9GRENXRCwgbmFtZSwgTE9PS1VQX0ZPTExPVywgJm5kLCBGTU9ERV9SRUFEKTsKKwllcnIgPSBwYXRoX2xvb2t1cF9vcGVuKEFUX0ZEQ1dELCBuYW1lLCBMT09LVVBfRk9MTE9XLCAmbmQsIEZNT0RFX1JFQUR8Rk1PREVfRVhFQyk7CiAJZmlsZSA9IEVSUl9QVFIoZXJyKTsKIAogCWlmICghZXJyKSB7CkBAIC04ODUsNiArODg1LDEyIEBACiAJY3VycmVudC0+ZmxhZ3MgJj0gflBGX1JBTkRPTUlaRTsKIAlmbHVzaF90aHJlYWQoKTsKIAorCS8qIFNldCB0aGUgbmV3IG1tIHRhc2sgc2l6ZS4gV2UgaGF2ZSB0byBkbyB0aGF0IGxhdGUgYmVjYXVzZSBpdCBtYXkKKwkgKiBkZXBlbmQgb24gVElGXzMyQklUIHdoaWNoIGlzIG9ubHkgdXBkYXRlZCBpbiBmbHVzaF90aHJlYWQoKSBvbgorCSAqIHNvbWUgYXJjaGl0ZWN0dXJlcyBsaWtlIHBvd2VycGMKKwkgKi8KKwljdXJyZW50LT5tbS0+dGFza19zaXplID0gVEFTS19TSVpFOworCiAJaWYgKGJwcm0tPmVfdWlkICE9IGN1cnJlbnQtPmV1aWQgfHwgYnBybS0+ZV9naWQgIT0gY3VycmVudC0+ZWdpZCB8fCAKIAkgICAgZmlsZV9wZXJtaXNzaW9uKGJwcm0tPmZpbGUsIE1BWV9SRUFEKSB8fAogCSAgICAoYnBybS0+aW50ZXJwX2ZsYWdzICYgQklOUFJNX0ZMQUdTX0VORk9SQ0VfTk9ORFVNUCkpIHsKQEAgLTExMzcsMTAgKzExNDMsOSBAQAogCWludCBpOwogCiAJcmV0dmFsID0gLUVOT01FTTsKLQlicHJtID0ga21hbGxvYyhzaXplb2YoKmJwcm0pLCBHRlBfS0VSTkVMKTsKKwlicHJtID0ga3phbGxvYyhzaXplb2YoKmJwcm0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJwcm0pCiAJCWdvdG8gb3V0X3JldDsKLQltZW1zZXQoYnBybSwgMCwgc2l6ZW9mKCpicHJtKSk7CiAKIAlmaWxlID0gb3Blbl9leGVjKGZpbGVuYW1lKTsKIAlyZXR2YWwgPSBQVFJfRVJSKGZpbGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmMKaW5kZXggNzQ0MmJkZC4uYjNkYmQ3MSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9kaXIuYworKysgYi9mcy9leHQyL2Rpci5jCkBAIC0yNTYsMTEgKzI1NiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gZGlyX3BhZ2VzKGlub2RlKTsKIAl1bnNpZ25lZCBjaHVua19tYXNrID0gfihleHQyX2NodW5rX3NpemUoaW5vZGUpLTEpOwogCXVuc2lnbmVkIGNoYXIgKnR5cGVzID0gTlVMTDsKLQlpbnQgbmVlZF9yZXZhbGlkYXRlID0gKGZpbHAtPmZfdmVyc2lvbiAhPSBpbm9kZS0+aV92ZXJzaW9uKTsKLQlpbnQgcmV0OworCWludCBuZWVkX3JldmFsaWRhdGUgPSBmaWxwLT5mX3ZlcnNpb24gIT0gaW5vZGUtPmlfdmVyc2lvbjsKIAogCWlmIChwb3MgPiBpbm9kZS0+aV9zaXplIC0gRVhUMl9ESVJfUkVDX0xFTigxKSkKLQkJZ290byBzdWNjZXNzOworCQlyZXR1cm4gMDsKIAogCWlmIChFWFQyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUpKQogCQl0eXBlcyA9IGV4dDJfZmlsZXR5cGVfdGFibGU7CkBAIC0yNzUsMTIgKzI3NCwxNSBAQAogCQkJCSAgICJiYWQgcGFnZSBpbiAjJWx1IiwKIAkJCQkgICBpbm9kZS0+aV9pbm8pOwogCQkJZmlscC0+Zl9wb3MgKz0gUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0OwotCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gZG9uZTsKKwkJCXJldHVybiAtRUlPOwogCQl9CiAJCWthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwotCQlpZiAobmVlZF9yZXZhbGlkYXRlKSB7Ci0JCQlvZmZzZXQgPSBleHQyX3ZhbGlkYXRlX2VudHJ5KGthZGRyLCBvZmZzZXQsIGNodW5rX21hc2spOworCQlpZiAodW5saWtlbHkobmVlZF9yZXZhbGlkYXRlKSkgeworCQkJaWYgKG9mZnNldCkgeworCQkJCW9mZnNldCA9IGV4dDJfdmFsaWRhdGVfZW50cnkoa2FkZHIsIG9mZnNldCwgY2h1bmtfbWFzayk7CisJCQkJZmlscC0+Zl9wb3MgPSAobjw8UEFHRV9DQUNIRV9TSElGVCkgKyBvZmZzZXQ7CisJCQl9CisJCQlmaWxwLT5mX3ZlcnNpb24gPSBpbm9kZS0+aV92ZXJzaW9uOwogCQkJbmVlZF9yZXZhbGlkYXRlID0gMDsKIAkJfQogCQlkZSA9IChleHQyX2RpcmVudCAqKShrYWRkcitvZmZzZXQpOwpAQCAtMjg5LDkgKzI5MSw4IEBACiAJCQlpZiAoZGUtPnJlY19sZW4gPT0gMCkgewogCQkJCWV4dDJfZXJyb3Ioc2IsIF9fRlVOQ1RJT05fXywKIAkJCQkJInplcm8tbGVuZ3RoIGRpcmVjdG9yeSBlbnRyeSIpOwotCQkJCXJldCA9IC1FSU87CiAJCQkJZXh0Ml9wdXRfcGFnZShwYWdlKTsKLQkJCQlnb3RvIGRvbmU7CisJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCQlpZiAoZGUtPmlub2RlKSB7CiAJCQkJaW50IG92ZXI7CkBAIC0zMDYsMTkgKzMwNywxNCBAQAogCQkJCQkJbGUzMl90b19jcHUoZGUtPmlub2RlKSwgZF90eXBlKTsKIAkJCQlpZiAob3ZlcikgewogCQkJCQlleHQyX3B1dF9wYWdlKHBhZ2UpOwotCQkJCQlnb3RvIHN1Y2Nlc3M7CisJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0KIAkJCWZpbHAtPmZfcG9zICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKIAkJfQogCQlleHQyX3B1dF9wYWdlKHBhZ2UpOwogCX0KLQotc3VjY2VzczoKLQlyZXQgPSAwOwotZG9uZToKLQlmaWxwLT5mX3ZlcnNpb24gPSBpbm9kZS0+aV92ZXJzaW9uOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oCmluZGV4IDAwZGUwYTcuLjExMDM1YWMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZXh0Mi5oCisrKyBiL2ZzL2V4dDIvZXh0Mi5oCkBAIC0xMzgsNiArMTM4LDkgQEAKIGV4dGVybiBpbnQgZXh0Ml9pb2N0bCAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcpOwogCisvKiBuYW1laS5jICovCitzdHJ1Y3QgZGVudHJ5ICpleHQyX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpOworCiAvKiBzdXBlci5jICovCiBleHRlcm4gdm9pZCBleHQyX2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CmRpZmYgLS1naXQgYS9mcy9leHQyL25hbWVpLmMgYi9mcy9leHQyL25hbWVpLmMKaW5kZXggYWQxNDMyYS4uNGNhODI0OSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9uYW1laS5jCisrKyBiL2ZzL2V4dDIvbmFtZWkuYwpAQCAtMzYsMjIgKzM2LDYgQEAKICNpbmNsdWRlICJhY2wuaCIKICNpbmNsdWRlICJ4aXAuaCIKIAotLyoKLSAqIENvdXBsZSBvZiBoZWxwZXIgZnVuY3Rpb25zIC0gbWFrZSB0aGUgY29kZSBzbGlnaHRseSBjbGVhbmVyLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBleHQyX2luY19jb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlub2RlLT5pX25saW5rKys7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBleHQyX2RlY19jb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlub2RlLT5pX25saW5rLS07Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGV4dDJfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaW50IGVyciA9IGV4dDJfYWRkX2xpbmsoZGVudHJ5LCBpbm9kZSk7CkBAIC01OSw3ICs0Myw3IEBACiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJCXJldHVybiAwOwogCX0KLQlleHQyX2RlY19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMDEsNyArMTg1LDcgQEAKIAlyZXR1cm4gZXJyOwogCiBvdXRfZmFpbDoKLQlleHQyX2RlY19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCWlwdXQgKGlub2RlKTsKIAlnb3RvIG91dDsKIH0KQEAgLTIxNSw3ICsxOTksNyBAQAogCQlyZXR1cm4gLUVNTElOSzsKIAogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQlleHQyX2luY19jb3VudChpbm9kZSk7CisJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOwogCWF0b21pY19pbmMoJmlub2RlLT5pX2NvdW50KTsKIAogCXJldHVybiBleHQyX2FkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7CkBAIC0yMjksNyArMjEzLDcgQEAKIAlpZiAoZGlyLT5pX25saW5rID49IEVYVDJfTElOS19NQVgpCiAJCWdvdG8gb3V0OwogCi0JZXh0Ml9pbmNfY291bnQoZGlyKTsKKwlpbm9kZV9pbmNfbGlua19jb3VudChkaXIpOwogCiAJaW5vZGUgPSBleHQyX25ld19pbm9kZSAoZGlyLCBTX0lGRElSIHwgbW9kZSk7CiAJZXJyID0gUFRSX0VSUihpbm9kZSk7CkBAIC0yNDMsNyArMjI3LDcgQEAKIAllbHNlCiAJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4dDJfYW9wczsKIAotCWV4dDJfaW5jX2NvdW50KGlub2RlKTsKKwlpbm9kZV9pbmNfbGlua19jb3VudChpbm9kZSk7CiAKIAllcnIgPSBleHQyX21ha2VfZW1wdHkoaW5vZGUsIGRpcik7CiAJaWYgKGVycikKQEAgLTI1OCwxMSArMjQyLDExIEBACiAJcmV0dXJuIGVycjsKIAogb3V0X2ZhaWw6Ci0JZXh0Ml9kZWNfY291bnQoaW5vZGUpOwotCWV4dDJfZGVjX2NvdW50KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogb3V0X2RpcjoKLQlleHQyX2RlY19jb3VudChkaXIpOworCWlub2RlX2RlY19saW5rX2NvdW50KGRpcik7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTI4Miw3ICsyNjYsNyBAQAogCQlnb3RvIG91dDsKIAogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lOwotCWV4dDJfZGVjX2NvdW50KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJZXJyID0gMDsKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtMjk3LDggKzI4MSw4IEBACiAJCWVyciA9IGV4dDJfdW5saW5rKGRpciwgZGVudHJ5KTsKIAkJaWYgKCFlcnIpIHsKIAkJCWlub2RlLT5pX3NpemUgPSAwOwotCQkJZXh0Ml9kZWNfY291bnQoaW5vZGUpOwotCQkJZXh0Ml9kZWNfY291bnQoZGlyKTsKKwkJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwkJCWlub2RlX2RlY19saW5rX2NvdW50KGRpcik7CiAJCX0KIAl9CiAJcmV0dXJuIGVycjsKQEAgLTMzOCw0MSArMzIyLDQxIEBACiAJCW5ld19kZSA9IGV4dDJfZmluZF9lbnRyeSAobmV3X2RpciwgbmV3X2RlbnRyeSwgJm5ld19wYWdlKTsKIAkJaWYgKCFuZXdfZGUpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCWV4dDJfaW5jX2NvdW50KG9sZF9pbm9kZSk7CisJCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWV4dDJfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJaWYgKGRpcl9kZSkKIAkJCW5ld19pbm9kZS0+aV9ubGluay0tOwotCQlleHQyX2RlY19jb3VudChuZXdfaW5vZGUpOworCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOwogCX0gZWxzZSB7CiAJCWlmIChkaXJfZGUpIHsKIAkJCWVyciA9IC1FTUxJTks7CiAJCQlpZiAobmV3X2Rpci0+aV9ubGluayA+PSBFWFQyX0xJTktfTUFYKQogCQkJCWdvdG8gb3V0X2RpcjsKIAkJfQotCQlleHQyX2luY19jb3VudChvbGRfaW5vZGUpOworCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQllcnIgPSBleHQyX2FkZF9saW5rKG5ld19kZW50cnksIG9sZF9pbm9kZSk7CiAJCWlmIChlcnIpIHsKLQkJCWV4dDJfZGVjX2NvdW50KG9sZF9pbm9kZSk7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQkJZ290byBvdXRfZGlyOwogCQl9CiAJCWlmIChkaXJfZGUpCi0JCQlleHQyX2luY19jb3VudChuZXdfZGlyKTsKKwkJCWlub2RlX2luY19saW5rX2NvdW50KG5ld19kaXIpOwogCX0KIAogCS8qCiAJICogTGlrZSBtb3N0IG90aGVyIFVuaXggc3lzdGVtcywgc2V0IHRoZSBjdGltZSBmb3IgaW5vZGVzIG9uIGEKICAJICogcmVuYW1lLgotCSAqIGV4dDJfZGVjX2NvdW50KCkgd2lsbCBtYXJrIHRoZSBpbm9kZSBkaXJ0eS4KKwkgKiBpbm9kZV9kZWNfbGlua19jb3VudCgpIHdpbGwgbWFyayB0aGUgaW5vZGUgZGlydHkuCiAJICovCiAJb2xkX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAogCWV4dDJfZGVsZXRlX2VudHJ5IChvbGRfZGUsIG9sZF9wYWdlKTsKLQlleHQyX2RlY19jb3VudChvbGRfaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAKIAlpZiAoZGlyX2RlKSB7CiAJCWV4dDJfc2V0X2xpbmsob2xkX2lub2RlLCBkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKLQkJZXh0Ml9kZWNfY291bnQob2xkX2Rpcik7CisJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9kaXIpOwogCX0KIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IGNiNmY5YmQuLjdlMzBiYWUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTE3NSw3ICsxNzUsOCBAQAogewogCWV4dDJfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImV4dDJfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvKSwKLQkJCQkJICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgICAgIGluaXRfb25jZSwgTlVMTCk7CiAJaWYgKGV4dDJfaW5vZGVfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjEwLDggKzIxMSw2IEBACiAKIAlpZiAoc2JpLT5zX21vdW50X29wdCAmIEVYVDJfTU9VTlRfR1JQSUQpCiAJCXNlcV9wdXRzKHNlcSwgIixncnBpZCIpOwotCWVsc2UKLQkJc2VxX3B1dHMoc2VxLCAiLG5vZ3JwaWQiKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1FVT1RBKQogCWlmIChzYmktPnNfbW91bnRfb3B0ICYgRVhUMl9NT1VOVF9VU1JRVU9UQSkKQEAgLTI1OCw3ICsyNTcsNiBAQAogICogc3lzdGVtcywgYnV0IGNhbiBiZSBpbXByb3ZlZCB1cG9uLgogICogQ3VycmVudGx5IG9ubHkgZ2V0X3BhcmVudCBpcyByZXF1aXJlZC4KICAqLwotc3RydWN0IGRlbnRyeSAqZXh0Ml9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKTsKIHN0YXRpYyBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZXh0Ml9leHBvcnRfb3BzID0gewogCS5nZXRfcGFyZW50ID0gZXh0Ml9nZXRfcGFyZW50LAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYmFsbG9jLmMgYi9mcy9leHQzL2JhbGxvYy5jCmluZGV4IDYyNTBmY2QuLjQ2NjIzZjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYmFsbG9jLmMKKysrIGIvZnMvZXh0My9iYWxsb2MuYwpAQCAtMTQ5MywxMiArMTQ5MywzMyBAQAogICovCiBpbnQgZXh0M19iZ19oYXNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGdyb3VwKQogewotCWlmIChFWFQzX0hBU19ST19DT01QQVRfRkVBVFVSRShzYixFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUikmJgotCSAgICAhZXh0M19ncm91cF9zcGFyc2UoZ3JvdXApKQorCWlmIChFWFQzX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKKwkJCQlFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUikgJiYKKwkJCSFleHQzX2dyb3VwX3NwYXJzZShncm91cCkpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHQzX2JnX251bV9nZGJfbWV0YShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZ3JvdXApCit7CisJdW5zaWduZWQgbG9uZyBtZXRhZ3JvdXAgPSBncm91cCAvIEVYVDNfREVTQ19QRVJfQkxPQ0soc2IpOworCXVuc2lnbmVkIGxvbmcgZmlyc3QgPSBtZXRhZ3JvdXAgKiBFWFQzX0RFU0NfUEVSX0JMT0NLKHNiKTsKKwl1bnNpZ25lZCBsb25nIGxhc3QgPSBmaXJzdCArIEVYVDNfREVTQ19QRVJfQkxPQ0soc2IpIC0gMTsKKworCWlmIChncm91cCA9PSBmaXJzdCB8fCBncm91cCA9PSBmaXJzdCArIDEgfHwgZ3JvdXAgPT0gbGFzdCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4dDNfYmdfbnVtX2dkYl9ub21ldGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGdyb3VwKQoreworCWlmIChFWFQzX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKKwkJCQlFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUikgJiYKKwkJCSFleHQzX2dyb3VwX3NwYXJzZShncm91cCkpCisJCXJldHVybiAwOworCXJldHVybiBFWFQzX1NCKHNiKS0+c19nZGJfY291bnQ7Cit9CisKIC8qKgogICoJZXh0M19iZ19udW1fZ2RiIC0gbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoZSBncm91cCB0YWJsZSBpbiBncm91cAogICoJQHNiOiBzdXBlcmJsb2NrIGZvciBmaWxlc3lzdGVtCkBAIC0xNTEwLDkgKzE1MzEsMTQgQEAKICAqLwogdW5zaWduZWQgbG9uZyBleHQzX2JnX251bV9nZGIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGdyb3VwKQogewotCWlmIChFWFQzX0hBU19ST19DT01QQVRfRkVBVFVSRShzYixFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUikmJgotCSAgICAhZXh0M19ncm91cF9zcGFyc2UoZ3JvdXApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gRVhUM19TQihzYiktPnNfZ2RiX2NvdW50OwotfQorCXVuc2lnbmVkIGxvbmcgZmlyc3RfbWV0YV9iZyA9CisJCQlsZTMyX3RvX2NwdShFWFQzX1NCKHNiKS0+c19lcy0+c19maXJzdF9tZXRhX2JnKTsKKwl1bnNpZ25lZCBsb25nIG1ldGFncm91cCA9IGdyb3VwIC8gRVhUM19ERVNDX1BFUl9CTE9DSyhzYik7CiAKKwlpZiAoIUVYVDNfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsRVhUM19GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHx8CisJCQltZXRhZ3JvdXAgPCBmaXJzdF9tZXRhX2JnKQorCQlyZXR1cm4gZXh0M19iZ19udW1fZ2RiX25vbWV0YShzYixncm91cCk7CisKKwlyZXR1cm4gZXh0M19iZ19udW1fZ2RiX21ldGEoc2IsZ3JvdXApOworCit9CmRpZmYgLS1naXQgYS9mcy9leHQzL2JpdG1hcC5jIGIvZnMvZXh0My9iaXRtYXAuYwppbmRleCBjYjE2YjRjLi5jZTRmODJiIDEwMDY0NAotLS0gYS9mcy9leHQzL2JpdG1hcC5jCisrKyBiL2ZzL2V4dDMvYml0bWFwLmMKQEAgLTcsMTEgKzcsMTEgQEAKICAqIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKICAqLwogCi0jaWZkZWYgRVhUM0ZTX0RFQlVHCi0KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2piZC5oPgorI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnMuaD4KIAotI2luY2x1ZGUgImV4dDNfZnMuaCIKKyNpZmRlZiBFWFQzRlNfREVCVUcKIAogc3RhdGljIGludCBuaWJibGVtYXBbXSA9IHs0LCAzLCAzLCAyLCAzLCAyLCAyLCAxLCAzLCAyLCAyLCAxLCAyLCAxLCAxLCAwfTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9kaXIuYyBiL2ZzL2V4dDMvZGlyLmMKaW5kZXggODMyODY3YS4uNzczNDU5MSAxMDA2NDQKLS0tIGEvZnMvZXh0My9kaXIuYworKysgYi9mcy9leHQzL2Rpci5jCkBAIC05NSwxMSArOTUsMTAgQEAKIAkJCSB2b2lkICogZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKIHsKIAlpbnQgZXJyb3IgPSAwOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBibGs7Ci0JaW50IGksIG51bSwgc3RvcmVkOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoLCAqIHRtcCwgKiBiaGFbMTZdOwotCXN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICogZGU7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICogc2I7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJaW50IGksIHN0b3JlZDsKKwlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZGU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlpbnQgZXJyOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmV0ID0gMDsKQEAgLTEyNCwxMiArMTIzLDI5IEBACiAJfQogI2VuZGlmCiAJc3RvcmVkID0gMDsKLQliaCA9IE5VTEw7CiAJb2Zmc2V0ID0gZmlscC0+Zl9wb3MgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSk7CiAKIAl3aGlsZSAoIWVycm9yICYmICFzdG9yZWQgJiYgZmlscC0+Zl9wb3MgPCBpbm9kZS0+aV9zaXplKSB7Ci0JCWJsayA9IChmaWxwLT5mX3BvcykgPj4gRVhUM19CTE9DS19TSVpFX0JJVFMoc2IpOwotCQliaCA9IGV4dDNfYnJlYWQoTlVMTCwgaW5vZGUsIGJsaywgMCwgJmVycik7CisJCXVuc2lnbmVkIGxvbmcgYmxrID0gZmlscC0+Zl9wb3MgPj4gRVhUM19CTE9DS19TSVpFX0JJVFMoc2IpOworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgbWFwX2JoOworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKworCQltYXBfYmguYl9zdGF0ZSA9IDA7CisJCWVyciA9IGV4dDNfZ2V0X2Jsb2NrX2hhbmRsZShOVUxMLCBpbm9kZSwgYmxrLCAmbWFwX2JoLCAwLCAwKTsKKwkJaWYgKCFlcnIpIHsKKwkJCXBhZ2VfY2FjaGVfcmVhZGFoZWFkKHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcsCisJCQkJJmZpbHAtPmZfcmEsCisJCQkJZmlscCwKKwkJCQltYXBfYmguYl9ibG9ja25yID4+CisJCQkJCShQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfYmxrYml0cyksCisJCQkJMSk7CisJCQliaCA9IGV4dDNfYnJlYWQoTlVMTCwgaW5vZGUsIGJsaywgMCwgJmVycik7CisJCX0KKworCQkvKgorCQkgKiBXZSBpZ25vcmUgSS9PIGVycm9ycyBvbiBkaXJlY3RvcmllcyBzbyB1c2VycyBoYXZlIGEgY2hhbmNlCisJCSAqIG9mIHJlY292ZXJpbmcgZGF0YSB3aGVuIHRoZXJlJ3MgYSBiYWQgc2VjdG9yCisJCSAqLwogCQlpZiAoIWJoKSB7CiAJCQlleHQzX2Vycm9yIChzYiwgImV4dDNfcmVhZGRpciIsCiAJCQkJImRpcmVjdG9yeSAjJWx1IGNvbnRhaW5zIGEgaG9sZSBhdCBvZmZzZXQgJWx1IiwKQEAgLTEzOCwyNiArMTU0LDYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICogRG8gdGhlIHJlYWRhaGVhZAotCQkgKi8KLQkJaWYgKCFvZmZzZXQpIHsKLQkJCWZvciAoaSA9IDE2ID4+IChFWFQzX0JMT0NLX1NJWkVfQklUUyhzYikgLSA5KSwgbnVtID0gMDsKLQkJCSAgICAgaSA+IDA7IGktLSkgewotCQkJCXRtcCA9IGV4dDNfZ2V0YmxrIChOVUxMLCBpbm9kZSwgKytibGssIDAsICZlcnIpOwotCQkJCWlmICh0bXAgJiYgIWJ1ZmZlcl91cHRvZGF0ZSh0bXApICYmCi0JCQkJCQkhYnVmZmVyX2xvY2tlZCh0bXApKQotCQkJCQliaGFbbnVtKytdID0gdG1wOwotCQkJCWVsc2UKLQkJCQkJYnJlbHNlICh0bXApOwotCQkJfQotCQkJaWYgKG51bSkgewotCQkJCWxsX3J3X2Jsb2NrIChSRUFEQSwgbnVtLCBiaGEpOwotCQkJCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJCQkJYnJlbHNlIChiaGFbaV0pOwotCQkJfQotCQl9Ci0KIHJldmFsaWRhdGU6CiAJCS8qIElmIHRoZSBkaXIgYmxvY2sgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0bwogCQkgKiByZWFkZGlyKDIpLCB0aGVuIHdlIG1pZ2h0IGJlIHBvaW50aW5nIHRvIGFuIGludmFsaWQKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZmlsZS5jIGIvZnMvZXh0My9maWxlLmMKaW5kZXggOThlNzgzNC4uNTkwOThlYSAxMDA2NDQKLS0tIGEvZnMvZXh0My9maWxlLmMKKysrIGIvZnMvZXh0My9maWxlLmMKQEAgLTM3LDkgKzM3LDkgQEAKIAlpZiAoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgogCQkJKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA9PSAxKSkKIAl7Ci0JCWRvd24oJkVYVDNfSShpbm9kZSktPnRydW5jYXRlX3NlbSk7CisJCW11dGV4X2xvY2soJkVYVDNfSShpbm9kZSktPnRydW5jYXRlX211dGV4KTsKIAkJZXh0M19kaXNjYXJkX3Jlc2VydmF0aW9uKGlub2RlKTsKLQkJdXAoJkVYVDNfSShpbm9kZSktPnRydW5jYXRlX3NlbSk7CisJCW11dGV4X3VubG9jaygmRVhUM19JKGlub2RlKS0+dHJ1bmNhdGVfbXV0ZXgpOwogCX0KIAlpZiAoaXNfZHgoaW5vZGUpICYmIGZpbHAtPnByaXZhdGVfZGF0YSkKIAkJZXh0M19odHJlZV9mcmVlX2Rpcl9pbmZvKGZpbHAtPnByaXZhdGVfZGF0YSk7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggM2ZjNDIzOC4uMmMzNjEzNyAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtNjcxLDcgKzY3MSw3IEBACiAgKiBUaGUgQktMIG1heSBub3QgYmUgaGVsZCBvbiBlbnRyeSBoZXJlLiAgQmUgc3VyZSB0byB0YWtlIGl0IGVhcmx5LgogICovCiAKLXN0YXRpYyBpbnQKK2ludAogZXh0M19nZXRfYmxvY2tfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUsIGludCBleHRlbmRfZGlza3NpemUpCiB7CkBAIC03MDIsNyArNzAyLDcgQEAKIAlpZiAoIWNyZWF0ZSB8fCBlcnIgPT0gLUVJTykKIAkJZ290byBjbGVhbnVwOwogCi0JZG93bigmZWktPnRydW5jYXRlX3NlbSk7CisJbXV0ZXhfbG9jaygmZWktPnRydW5jYXRlX211dGV4KTsKIAogCS8qCiAJICogSWYgdGhlIGluZGlyZWN0IGJsb2NrIGlzIG1pc3Npbmcgd2hpbGUgd2UgYXJlIHJlYWRpbmcKQEAgLTcyMyw3ICs3MjMsNyBAQAogCQl9CiAJCXBhcnRpYWwgPSBleHQzX2dldF9icmFuY2goaW5vZGUsIGRlcHRoLCBvZmZzZXRzLCBjaGFpbiwgJmVycik7CiAJCWlmICghcGFydGlhbCkgewotCQkJdXAoJmVpLT50cnVuY2F0ZV9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZlaS0+dHJ1bmNhdGVfbXV0ZXgpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIGNsZWFudXA7CiAJCQljbGVhcl9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CkBAIC03NTksMTMgKzc1OSwxMyBAQAogCQllcnIgPSBleHQzX3NwbGljZV9icmFuY2goaGFuZGxlLCBpbm9kZSwgaWJsb2NrLCBjaGFpbiwKIAkJCQkJIHBhcnRpYWwsIGxlZnQpOwogCS8qCi0JICogaV9kaXNrc2l6ZSBncm93aW5nIGlzIHByb3RlY3RlZCBieSB0cnVuY2F0ZV9zZW0uICBEb24ndCBmb3JnZXQgdG8KKwkgKiBpX2Rpc2tzaXplIGdyb3dpbmcgaXMgcHJvdGVjdGVkIGJ5IHRydW5jYXRlX211dGV4LiAgRG9uJ3QgZm9yZ2V0IHRvCiAJICogcHJvdGVjdCBpdCBpZiB5b3UncmUgYWJvdXQgdG8gaW1wbGVtZW50IGNvbmN1cnJlbnQKIAkgKiBleHQzX2dldF9ibG9jaygpIC1ienp6CiAJKi8KIAlpZiAoIWVyciAmJiBleHRlbmRfZGlza3NpemUgJiYgaW5vZGUtPmlfc2l6ZSA+IGVpLT5pX2Rpc2tzaXplKQogCQllaS0+aV9kaXNrc2l6ZSA9IGlub2RlLT5pX3NpemU7Ci0JdXAoJmVpLT50cnVuY2F0ZV9zZW0pOworCW11dGV4X3VubG9jaygmZWktPnRydW5jYXRlX211dGV4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTEyMjcsNyArMTIyNyw3IEBACiAgKglleHQzX2ZpbGVfd3JpdGUoKSAtPiBnZW5lcmljX2ZpbGVfd3JpdGUoKSAtPiBfX2FsbG9jX3BhZ2VzKCkgLT4gLi4uCiAgKgogICogU2FtZSBhcHBsaWVzIHRvIGV4dDNfZ2V0X2Jsb2NrKCkuICBXZSB3aWxsIGRlYWRsb2NrIG9uIHZhcmlvdXMgdGhpbmdzIGxpa2UKLSAqIGxvY2tfam91cm5hbCBhbmQgaV90cnVuY2F0ZV9zZW0uCisgKiBsb2NrX2pvdXJuYWwgYW5kIGlfdHJ1bmNhdGVfbXV0ZXguCiAgKgogICogU2V0dGluZyBQRl9NRU1BTExPQyBoZXJlIGRvZXNuJ3Qgd29yayAtIHRvbyBtYW55IGludGVybmFsIG1lbW9yeQogICogYWxsb2NhdGlvbnMgZmFpbC4KQEAgLTE2MjQsMTUgKzE2MjQsMTQgQEAKIAkgKiBGb3IgIm5vYmgiIG9wdGlvbiwgIHdlIGNhbiBvbmx5IHdvcmsgaWYgd2UgZG9uJ3QgbmVlZCB0bwogCSAqIHJlYWQtaW4gdGhlIHBhZ2UgLSBvdGhlcndpc2Ugd2UgY3JlYXRlIGJ1ZmZlcnMgdG8gZG8gdGhlIElPLgogCSAqLwotCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSAmJiB0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9CSCkpIHsKLQkJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkgewotCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JCQltZW1zZXQoa2FkZHIgKyBvZmZzZXQsIDAsIGxlbmd0aCk7Ci0JCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJZ290byB1bmxvY2s7Ci0JCX0KKwlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkgJiYgdGVzdF9vcHQoaW5vZGUtPmlfc2IsIE5PQkgpICYmCisJICAgICBleHQzX3Nob3VsZF93cml0ZWJhY2tfZGF0YShpbm9kZSkgJiYgUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCQltZW1zZXQoa2FkZHIgKyBvZmZzZXQsIDAsIGxlbmd0aCk7CisJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCQlnb3RvIHVubG9jazsKIAl9CiAKIAlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCkBAIC0yMTYyLDcgKzIxNjEsNyBAQAogCSAqIEZyb20gaGVyZSB3ZSBibG9jayBvdXQgYWxsIGV4dDNfZ2V0X2Jsb2NrKCkgY2FsbGVycyB3aG8gd2FudCB0bwogCSAqIG1vZGlmeSB0aGUgYmxvY2sgYWxsb2NhdGlvbiB0cmVlLgogCSAqLwotCWRvd24oJmVpLT50cnVuY2F0ZV9zZW0pOworCW11dGV4X2xvY2soJmVpLT50cnVuY2F0ZV9tdXRleCk7CiAKIAlpZiAobiA9PSAxKSB7CQkvKiBkaXJlY3QgYmxvY2tzICovCiAJCWV4dDNfZnJlZV9kYXRhKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGlfZGF0YStvZmZzZXRzWzBdLApAQCAtMjIyOSw3ICsyMjI4LDcgQEAKIAogCWV4dDNfZGlzY2FyZF9yZXNlcnZhdGlvbihpbm9kZSk7CiAKLQl1cCgmZWktPnRydW5jYXRlX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZlaS0+dHJ1bmNhdGVfbXV0ZXgpOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9pb2N0bC5jIGIvZnMvZXh0My9pb2N0bC5jCmluZGV4IDU1NmNkNTUuLmFhZjFkYTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW9jdGwuYworKysgYi9mcy9leHQzL2lvY3RsLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCQkgKiBuZWVkIHRvIGFsbG9jYXRlIHJlc2VydmF0aW9uIHN0cnVjdHVyZSBmb3IgdGhpcyBpbm9kZQogCQkgKiBiZWZvcmUgc2V0IHRoZSB3aW5kb3cgc2l6ZQogCQkgKi8KLQkJZG93bigmZWktPnRydW5jYXRlX3NlbSk7CisJCW11dGV4X2xvY2soJmVpLT50cnVuY2F0ZV9tdXRleCk7CiAJCWlmICghZWktPmlfYmxvY2tfYWxsb2NfaW5mbykKIAkJCWV4dDNfaW5pdF9ibG9ja19hbGxvY19pbmZvKGlub2RlKTsKIApAQCAtMTkwLDcgKzE5MCw3IEBACiAJCQlzdHJ1Y3QgZXh0M19yZXNlcnZlX3dpbmRvd19ub2RlICpyc3YgPSAmZWktPmlfYmxvY2tfYWxsb2NfaW5mby0+cnN2X3dpbmRvd19ub2RlOwogCQkJcnN2LT5yc3ZfZ29hbF9zaXplID0gcnN2X3dpbmRvd19zaXplOwogCQl9Ci0JCXVwKCZlaS0+dHJ1bmNhdGVfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZlaS0+dHJ1bmNhdGVfbXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAJY2FzZSBFWFQzX0lPQ19HUk9VUF9FWFRFTkQ6IHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvbmFtZWkuYyBiL2ZzL2V4dDMvbmFtZWkuYwppbmRleCA4YmQ4YWMwLi5iOGY1Y2QxIDEwMDY0NAotLS0gYS9mcy9leHQzL25hbWVpLmMKKysrIGIvZnMvZXh0My9uYW1laS5jCkBAIC0yMTQxLDcgKzIxNDEsOCBAQAogCQkgKiBXZSBoYXZlIGEgdHJhbnNhY3Rpb24gb3Blbi4gIEFsbCBpcyBzd2VldG5lc3MuICBJdCBhbHNvIHNldHMKIAkJICogaV9zaXplIGluIGdlbmVyaWNfY29tbWl0X3dyaXRlKCkuCiAJCSAqLwotCQllcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpOworCQllcnIgPSBfX3BhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgbCwKKwkJCQltYXBwaW5nX2dmcF9tYXNrKGlub2RlLT5pX21hcHBpbmcpICYgfl9fR0ZQX0ZTKTsKIAkJaWYgKGVycikgewogCQkJZXh0M19kZWNfY291bnQoaGFuZGxlLCBpbm9kZSk7CiAJCQlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggNTZiZjc2NS4uODZlNDQzMSAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNDcyLDcgKzQ3Miw3IEBACiAjaWZkZWYgQ09ORklHX0VYVDNfRlNfWEFUVFIKIAkJaW5pdF9yd3NlbSgmZWktPnhhdHRyX3NlbSk7CiAjZW5kaWYKLQkJaW5pdF9NVVRFWCgmZWktPnRydW5jYXRlX3NlbSk7CisJCW11dGV4X2luaXQoJmVpLT50cnVuY2F0ZV9tdXRleCk7CiAJCWlub2RlX2luaXRfb25jZSgmZWktPnZmc19pbm9kZSk7CiAJfQogfQpAQCAtNDgxLDcgKzQ4MSw4IEBACiB7CiAJZXh0M19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZXh0M19pbm9kZV9jYWNoZSIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBleHQzX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAoZXh0M19pbm9kZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMzI1LDcgKzIzMjYsOCBAQAogCiBzdGF0aWMgaW50IGV4dDNfc3RhdGZzIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgc3RydWN0IGtzdGF0ZnMgKiBidWYpCiB7Ci0Jc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKmVzID0gRVhUM19TQihzYiktPnNfZXM7CisJc3RydWN0IGV4dDNfc2JfaW5mbyAqc2JpID0gRVhUM19TQihzYik7CisJc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKmVzID0gc2JpLT5zX2VzOwogCXVuc2lnbmVkIGxvbmcgb3ZlcmhlYWQ7CiAJaW50IGk7CiAKQEAgLTIzNjcsMTIgKzIzNjksMTIgQEAKIAlidWYtPmZfdHlwZSA9IEVYVDNfU1VQRVJfTUFHSUM7CiAJYnVmLT5mX2JzaXplID0gc2ItPnNfYmxvY2tzaXplOwogCWJ1Zi0+Zl9ibG9ja3MgPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpIC0gb3ZlcmhlYWQ7Ci0JYnVmLT5mX2JmcmVlID0gZXh0M19jb3VudF9mcmVlX2Jsb2NrcyAoc2IpOworCWJ1Zi0+Zl9iZnJlZSA9IHBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlcik7CiAJYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9iZnJlZSAtIGxlMzJfdG9fY3B1KGVzLT5zX3JfYmxvY2tzX2NvdW50KTsKIAlpZiAoYnVmLT5mX2JmcmVlIDwgbGUzMl90b19jcHUoZXMtPnNfcl9ibG9ja3NfY291bnQpKQogCQlidWYtPmZfYmF2YWlsID0gMDsKIAlidWYtPmZfZmlsZXMgPSBsZTMyX3RvX2NwdShlcy0+c19pbm9kZXNfY291bnQpOwotCWJ1Zi0+Zl9mZnJlZSA9IGV4dDNfY291bnRfZnJlZV9pbm9kZXMgKHNiKTsKKwlidWYtPmZfZmZyZWUgPSBwZXJjcHVfY291bnRlcl9zdW0oJnNiaS0+c19mcmVlaW5vZGVzX2NvdW50ZXIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gRVhUM19OQU1FX0xFTjsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzODIsOCArMjM4NCw4IEBACiAgKiBQcm9jZXNzIDEgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VzcyAyCiAgKiBleHQzX2NyZWF0ZSgpICAgICAgICAgICAgICAgICAgICAgcXVvdGFfc3luYygpCiAgKiAgIGpvdXJuYWxfc3RhcnQoKSAgICAgICAgICAgICAgICAgICB3cml0ZV9kcXVvdCgpCi0gKiAgIERRVU9UX0lOSVQoKSAgICAgICAgICAgICAgICAgICAgICAgIGRvd24oZHFpb19zZW0pCi0gKiAgICAgZG93bihkcWlvX3NlbSkgICAgICAgICAgICAgICAgICAgIGpvdXJuYWxfc3RhcnQoKQorICogICBEUVVPVF9JTklUKCkgICAgICAgICAgICAgICAgICAgICAgICBkb3duKGRxaW9fbXV0ZXgpCisgKiAgICAgZG93bihkcWlvX211dGV4KSAgICAgICAgICAgICAgICAgICAgam91cm5hbF9zdGFydCgpCiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9jYWNoZS5jIGIvZnMvZmF0L2NhY2hlLmMKaW5kZXggMWFjYzk0MS4uOTdiOTY3YiAxMDA2NDQKLS0tIGEvZnMvZmF0L2NhY2hlLmMKKysrIGIvZnMvZmF0L2NhY2hlLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHsKIAlmYXRfY2FjaGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImZhdF9jYWNoZSIsCiAJCQkJc2l6ZW9mKHN0cnVjdCBmYXRfY2FjaGUpLAotCQkJCTAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCTAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCwKIAkJCQlpbml0X29uY2UsIE5VTEwpOwogCWlmIChmYXRfY2FjaGVfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2Rpci5jIGIvZnMvZmF0L2Rpci5jCmluZGV4IGRiMGRlNWMuLjQwOTViYzEgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9kaXIuYworKysgYi9mcy9mYXQvZGlyLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogfQogCiAvKgotICogQ29udmVydCBVbmljb2RlIDE2IHRvIFVURjgsIHRyYW5zbGF0ZWQgVW5pY29kZSwgb3IgQVNDSUkuCisgKiBDb252ZXJ0IFVuaWNvZGUgMTYgdG8gVVRGLTgsIHRyYW5zbGF0ZWQgVW5pY29kZSwgb3IgQVNDSUkuCiAgKiBJZiB1bmlfeGxhdGUgaXMgZW5hYmxlZCBhbmQgd2UgY2FuJ3QgZ2V0IGEgMToxIGNvbnZlcnNpb24sIHVzZSBhCiAgKiBjb2xvbiBhcyBhbiBlc2NhcGUgY2hhcmFjdGVyIHNpbmNlIGl0IGlzIG5vcm1hbGx5IGludmFsaWQgb24gdGhlIHZmYXQKICAqIGZpbGVzeXN0ZW0uIFRoZSBmb2xsb3dpbmcgZm91ciBjaGFyYWN0ZXJzIGFyZSB0aGUgaGV4YWRlY2ltYWwgZGlnaXRzCmRpZmYgLS1naXQgYS9mcy9mYXQvZmF0ZW50LmMgYi9mcy9mYXQvZmF0ZW50LmMKaW5kZXggYTFhOWUwNC4uYWIxNzFlYTggMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXRlbnQuYworKysgYi9mcy9mYXQvZmF0ZW50LmMKQEAgLTI2NywxOSArMjY3LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2ZhdChzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpKQogewotCWRvd24oJnNiaS0+ZmF0X2xvY2spOworCW11dGV4X2xvY2soJnNiaS0+ZmF0X2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2ZhdChzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpKQogewotCXVwKCZzYmktPmZhdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnNiaS0+ZmF0X2xvY2spOwogfQogCiB2b2lkIGZhdF9lbnRfYWNjZXNzX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpOwogCi0JaW5pdF9NVVRFWCgmc2JpLT5mYXRfbG9jayk7CisJbXV0ZXhfaW5pdCgmc2JpLT5mYXRfbG9jayk7CiAKIAlzd2l0Y2ggKHNiaS0+ZmF0X2JpdHMpIHsKIAljYXNlIDMyOgpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCBlN2Y0YWE3Li4yOTczMDBmIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtNTE4LDcgKzUxOCw4IEBACiB7CiAJZmF0X2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJmYXRfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbyksCi0JCQkJCSAgICAgMCwgU0xBQl9SRUNMQUlNX0FDQ09VTlQsCisJCQkJCSAgICAgMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAorCQkJCQkJU0xBQl9NRU1fU1BSRUFEKSwKIAkJCQkJICAgICBpbml0X29uY2UsIE5VTEwpOwogCWlmIChmYXRfaW5vZGVfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTEwMSw3ICsxMTAyLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCS8qIFVURjggZG9lc24ndCBwcm92aWRlIEZBVCBzZW1hbnRpY3MgKi8KKwkvKiBVVEYtOCBkb2Vzbid0IHByb3ZpZGUgRkFUIHNlbWFudGljcyAqLwogCWlmICghc3RyY21wKG9wdHMtPmlvY2hhcnNldCwgInV0ZjgiKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkZBVDogdXRmOCBpcyBub3QgYSByZWNvbW1lbmRlZCBJTyBjaGFyc2V0IgogCQkgICAgICAgIiBmb3IgRkFUIGZpbGVzeXN0ZW1zLCBmaWxlc3lzdGVtIHdpbGwgYmUgY2FzZSBzZW5zaXRpdmUhXG4iKTsKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGRjNGE3MDAuLjAzYzc4OTUgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtNzMsOCArNzMsOCBAQAogCSAqIG9yaWdfc3RhcnQuLmZkdC0+bmV4dF9mZAogCSAqLwogCXN0YXJ0ID0gb3JpZ19zdGFydDsKLQlpZiAoc3RhcnQgPCBmZHQtPm5leHRfZmQpCi0JCXN0YXJ0ID0gZmR0LT5uZXh0X2ZkOworCWlmIChzdGFydCA8IGZpbGVzLT5uZXh0X2ZkKQorCQlzdGFydCA9IGZpbGVzLT5uZXh0X2ZkOwogCiAJbmV3ZmQgPSBzdGFydDsKIAlpZiAoc3RhcnQgPCBmZHQtPm1heF9mZHNldCkgewpAQCAtMTAyLDkgKzEwMiw4IEBACiAJICogd2UgcmVhY3F1aXJlIHRoZSBmZHRhYmxlIHBvaW50ZXIgYW5kIHVzZSBpdCB3aGlsZSBob2xkaW5nCiAJICogdGhlIGxvY2ssIG5vIG9uZSBjYW4gZnJlZSBpdCBkdXJpbmcgdGhhdCB0aW1lLgogCSAqLwotCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwotCWlmIChzdGFydCA8PSBmZHQtPm5leHRfZmQpCi0JCWZkdC0+bmV4dF9mZCA9IG5ld2ZkICsgMTsKKwlpZiAoc3RhcnQgPD0gZmlsZXMtPm5leHRfZmQpCisJCWZpbGVzLT5uZXh0X2ZkID0gbmV3ZmQgKyAxOwogCiAJZXJyb3IgPSBuZXdmZDsKIAkKZGlmZiAtLWdpdCBhL2ZzL2ZpZm8uYyBiL2ZzL2ZpZm8uYwppbmRleCA5MjMzNzFiLi5kMTNmY2QzIDEwMDY0NAotLS0gYS9mcy9maWZvLmMKKysrIGIvZnMvZmlmby5jCkBAIC0zNCwxMCArMzQsNyBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSAtRVJFU1RBUlRTWVM7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShQSVBFX01VVEVYKCppbm9kZSkpKQotCQlnb3RvIGVycl9ub2xvY2tfbm9jbGVhbnVwOwotCisJbXV0ZXhfbG9jayhQSVBFX01VVEVYKCppbm9kZSkpOwogCWlmICghaW5vZGUtPmlfcGlwZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlpZighcGlwZV9uZXcoaW5vZGUpKQpAQCAtMTQwLDggKzEzNyw2IEBACiAKIGVycl9ub2NsZWFudXA6CiAJbXV0ZXhfdW5sb2NrKFBJUEVfTVVURVgoKmlub2RlKSk7Ci0KLWVycl9ub2xvY2tfbm9jbGVhbnVwOgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCBjZWE3Y2JlLi5iYmM3NDMzIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC0xMjUsNyArMTI1LDggQEAKIAkJa21lbV9jYWNoZV9mcmVlKGZpbGVzX2NhY2hlcCwgZmR0LT5mcmVlX2ZpbGVzKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoZmR0LT5tYXhfZmRzZXQgPD0gX19GRF9TRVRTSVpFICYmIGZkdC0+bWF4X2ZkcyA8PSBOUl9PUEVOX0RFRkFVTFQpIHsKKwlpZiAoZmR0LT5tYXhfZmRzZXQgPD0gRU1CRURERURfRkRfU0VUX1NJWkUgJiYKKwkJZmR0LT5tYXhfZmRzIDw9IE5SX09QRU5fREVGQVVMVCkgewogCQkvKgogCQkgKiBUaGUgZmR0YWJsZSB3YXMgZW1iZWRkZWQKIAkJICovCkBAIC0xNTUsOCArMTU2LDkgQEAKIAogdm9pZCBmcmVlX2ZkdGFibGUoc3RydWN0IGZkdGFibGUgKmZkdCkKIHsKLQlpZiAoZmR0LT5mcmVlX2ZpbGVzIHx8IGZkdC0+bWF4X2Zkc2V0ID4gX19GRF9TRVRTSVpFIHx8Ci0JCQkJCWZkdC0+bWF4X2ZkcyA+IE5SX09QRU5fREVGQVVMVCkKKwlpZiAoZmR0LT5mcmVlX2ZpbGVzIHx8CisJCWZkdC0+bWF4X2Zkc2V0ID4gRU1CRURERURfRkRfU0VUX1NJWkUgfHwKKwkJZmR0LT5tYXhfZmRzID4gTlJfT1BFTl9ERUZBVUxUKQogCQljYWxsX3JjdSgmZmR0LT5yY3UsIGZyZWVfZmR0YWJsZV9yY3UpOwogfQogCkBAIC0xOTksNyArMjAxLDYgQEAKIAkJICAgICAgIChuZmR0LT5tYXhfZmRzIC0gZmR0LT5tYXhfZmRzKSAqCiAJCQkJCXNpemVvZihzdHJ1Y3QgZmlsZSAqKSk7CiAJfQotCW5mZHQtPm5leHRfZmQgPSBmZHQtPm5leHRfZmQ7CiB9CiAKIC8qCkBAIC0yMjAsMTEgKzIyMSw5IEBACiAKIHZvaWQgZnJlZV9mZHNldChmZF9zZXQgKmFycmF5LCBpbnQgbnVtKQogewotCWludCBzaXplID0gbnVtIC8gODsKLQotCWlmIChudW0gPD0gX19GRF9TRVRTSVpFKSAvKiBEb24ndCBmcmVlIGFuIGVtYmVkZGVkIGZkc2V0ICovCisJaWYgKG51bSA8PSBFTUJFRERFRF9GRF9TRVRfU0laRSkgLyogRG9uJ3QgZnJlZSBhbiBlbWJlZGRlZCBmZHNldCAqLwogCQlyZXR1cm47Ci0JZWxzZSBpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCisJZWxzZSBpZiAobnVtIDw9IDggKiBQQUdFX1NJWkUpCiAJCWtmcmVlKGFycmF5KTsKIAllbHNlCiAJCXZmcmVlKGFycmF5KTsKQEAgLTIzNywyMiArMjM2LDE3IEBACiAgIAlmZF9zZXQgKm5ld19vcGVuc2V0ID0gTlVMTCwgKm5ld19leGVjc2V0ID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZSAqKm5ld19mZHM7CiAKLQlmZHQgPSBrbWFsbG9jKHNpemVvZigqZmR0KSwgR0ZQX0tFUk5FTCk7CisJZmR0ID0ga3phbGxvYyhzaXplb2YoKmZkdCksIEdGUF9LRVJORUwpOwogCWlmICghZmR0KQogICAJCWdvdG8gb3V0OwotCW1lbXNldChmZHQsIDAsIHNpemVvZigqZmR0KSk7CiAKLQluZmRzID0gX19GRF9TRVRTSVpFOworCW5mZHMgPSA4ICogTDFfQ0FDSEVfQllURVM7CiAgIAkvKiBFeHBhbmQgdG8gdGhlIG1heCBpbiBlYXN5IHN0ZXBzICovCi0gIAlkbyB7Ci0JCWlmIChuZmRzIDwgKFBBR0VfU0laRSAqIDgpKQotCQkJbmZkcyA9IFBBR0VfU0laRSAqIDg7Ci0JCWVsc2UgewotCQkJbmZkcyA9IG5mZHMgKiAyOwotCQkJaWYgKG5mZHMgPiBOUl9PUEVOKQotCQkJCW5mZHMgPSBOUl9PUEVOOwotCQl9Ci0JfSB3aGlsZSAobmZkcyA8PSBucik7CisgIAl3aGlsZSAobmZkcyA8PSBucikgeworCQluZmRzID0gbmZkcyAqIDI7CisJCWlmIChuZmRzID4gTlJfT1BFTikKKwkJCW5mZHMgPSBOUl9PUEVOOworCX0KIAogICAJbmV3X29wZW5zZXQgPSBhbGxvY19mZHNldChuZmRzKTsKICAgCW5ld19leGVjc2V0ID0gYWxsb2NfZmRzZXQobmZkcyk7CmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggNzY4YjU4MS4uYmNlYTE5OSAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCisrKyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtNSw2ICs1LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgpAQCAtMTksNDEgKzIwLDIwIEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdV9jb3VudGVyLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIC8qIHN5c2N0bCB0dW5hYmxlcy4uLiAqLwogc3RydWN0IGZpbGVzX3N0YXRfc3RydWN0IGZpbGVzX3N0YXQgPSB7CiAJLm1heF9maWxlcyA9IE5SX0ZJTEUKIH07CiAKLUVYUE9SVF9TWU1CT0woZmlsZXNfc3RhdCk7IC8qIE5lZWRlZCBieSB1bml4Lm8gKi8KLQogLyogcHVibGljLiBOb3QgcHJldHR5ISAqLwotIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhmaWxlc19sb2NrKTsKK19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhmaWxlc19sb2NrKTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhmaWxwX2NvdW50X2xvY2spOwotCi0vKiBzbGFiIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCBmcm9tIGFyYml0cmFyeQotICogY29udGV4dCBhbmQgbXVzdCBiZSBmdWxseSB0aHJlYWRlZCAtIHVzZSBhIGxvY2FsIHNwaW5sb2NrCi0gKiB0byBwcm90ZWN0IGZpbGVzX3N0YXQubnJfZmlsZXMKLSAqLwotdm9pZCBmaWxwX2N0b3Iodm9pZCAqb2JqcCwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBjZmxhZ3MpCi17Ci0JaWYgKChjZmxhZ3MgJiAoU0xBQl9DVE9SX1ZFUklGWXxTTEFCX0NUT1JfQ09OU1RSVUNUT1IpKSA9PQotCSAgICBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmZpbHBfY291bnRfbG9jaywgZmxhZ3MpOwotCQlmaWxlc19zdGF0Lm5yX2ZpbGVzKys7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpbHBfY291bnRfbG9jaywgZmxhZ3MpOwotCX0KLX0KLQotdm9pZCBmaWxwX2R0b3Iodm9pZCAqb2JqcCwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBkZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmlscF9jb3VudF9sb2NrLCBmbGFncyk7Ci0JZmlsZXNfc3RhdC5ucl9maWxlcy0tOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpbHBfY291bnRfbG9jaywgZmxhZ3MpOwotfQorc3RhdGljIHN0cnVjdCBwZXJjcHVfY291bnRlciBucl9maWxlcyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAogc3RhdGljIGlubGluZSB2b2lkIGZpbGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewpAQCAtNjMsNDggKzQzLDkyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxlX2ZyZWUoc3RydWN0IGZpbGUgKmYpCiB7CisJcGVyY3B1X2NvdW50ZXJfZGVjKCZucl9maWxlcyk7CiAJY2FsbF9yY3UoJmYtPmZfdS5mdV9yY3VoZWFkLCBmaWxlX2ZyZWVfcmN1KTsKIH0KIAorLyoKKyAqIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIG9wZW4gZmlsZXMgaW4gdGhlIHN5c3RlbQorICovCitzdGF0aWMgaW50IGdldF9ucl9maWxlcyh2b2lkKQoreworCXJldHVybiBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKCZucl9maWxlcyk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gZmlsZXMgaW4gdGhlIHN5c3RlbQorICovCitpbnQgZ2V0X21heF9maWxlcyh2b2lkKQoreworCXJldHVybiBmaWxlc19zdGF0Lm1heF9maWxlczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9tYXhfZmlsZXMpOworCisvKgorICogSGFuZGxlIG5yX2ZpbGVzIHN5c2N0bAorICovCisjaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQoraW50IHByb2NfbnJfZmlsZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCWZpbGVzX3N0YXQubnJfZmlsZXMgPSBnZXRfbnJfZmlsZXMoKTsKKwlyZXR1cm4gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7Cit9CisjZWxzZQoraW50IHByb2NfbnJfZmlsZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiAtRU5PU1lTOworfQorI2VuZGlmCisKIC8qIEZpbmQgYW4gdW51c2VkIGZpbGUgc3RydWN0dXJlIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0LgogICogUmV0dXJucyBOVUxMLCBpZiB0aGVyZSBhcmUgbm8gbW9yZSBmcmVlIGZpbGUgc3RydWN0dXJlcyBvcgogICogd2UgcnVuIG91dCBvZiBtZW1vcnkuCiAgKi8KIHN0cnVjdCBmaWxlICpnZXRfZW1wdHlfZmlscCh2b2lkKQogeworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCXN0YXRpYyBpbnQgb2xkX21heDsKIAlzdHJ1Y3QgZmlsZSAqIGY7CiAKIAkvKgogCSAqIFByaXZpbGVnZWQgdXNlcnMgY2FuIGdvIGFib3ZlIG1heF9maWxlcwogCSAqLwotCWlmIChmaWxlc19zdGF0Lm5yX2ZpbGVzID49IGZpbGVzX3N0YXQubWF4X2ZpbGVzICYmCi0JCQkJIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCWdvdG8gb3ZlcjsKKwlpZiAoZ2V0X25yX2ZpbGVzKCkgPj0gZmlsZXNfc3RhdC5tYXhfZmlsZXMgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKKwkJLyoKKwkJICogcGVyY3B1X2NvdW50ZXJzIGFyZSBpbmFjY3VyYXRlLiAgRG8gYW4gZXhwZW5zaXZlIGNoZWNrIGJlZm9yZQorCQkgKiB3ZSBnbyBhbmQgZmFpbC4KKwkJICovCisJCWlmIChwZXJjcHVfY291bnRlcl9zdW0oJm5yX2ZpbGVzKSA+PSBmaWxlc19zdGF0Lm1heF9maWxlcykKKwkJCWdvdG8gb3ZlcjsKKwl9CiAKIAlmID0ga21lbV9jYWNoZV9hbGxvYyhmaWxwX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKGYgPT0gTlVMTCkKIAkJZ290byBmYWlsOwogCisJcGVyY3B1X2NvdW50ZXJfaW5jKCZucl9maWxlcyk7CiAJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwogCWlmIChzZWN1cml0eV9maWxlX2FsbG9jKGYpKQogCQlnb3RvIGZhaWxfc2VjOwogCi0JZXZlbnRwb2xsX2luaXRfZmlsZShmKTsKLQlhdG9taWNfc2V0KCZmLT5mX2NvdW50LCAxKTsKLQlmLT5mX3VpZCA9IGN1cnJlbnQtPmZzdWlkOwotCWYtPmZfZ2lkID0gY3VycmVudC0+ZnNnaWQ7Ci0Jcndsb2NrX2luaXQoJmYtPmZfb3duZXIubG9jayk7Ci0JLyogZi0+Zl92ZXJzaW9uOiAwICovCisJdHNrID0gY3VycmVudDsKIAlJTklUX0xJU1RfSEVBRCgmZi0+Zl91LmZ1X2xpc3QpOworCWF0b21pY19zZXQoJmYtPmZfY291bnQsIDEpOworCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOworCWYtPmZfdWlkID0gdHNrLT5mc3VpZDsKKwlmLT5mX2dpZCA9IHRzay0+ZnNnaWQ7CisJZXZlbnRwb2xsX2luaXRfZmlsZShmKTsKKwkvKiBmLT5mX3ZlcnNpb246IDAgKi8KIAlyZXR1cm4gZjsKIAogb3ZlcjoKIAkvKiBSYW4gb3V0IG9mIGZpbHBzIC0gcmVwb3J0IHRoYXQgKi8KLQlpZiAoZmlsZXNfc3RhdC5ucl9maWxlcyA+IG9sZF9tYXgpIHsKKwlpZiAoZ2V0X25yX2ZpbGVzKCkgPiBvbGRfbWF4KSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlZGUzogZmlsZS1tYXggbGltaXQgJWQgcmVhY2hlZFxuIiwKLQkJCQkJZmlsZXNfc3RhdC5tYXhfZmlsZXMpOwotCQlvbGRfbWF4ID0gZmlsZXNfc3RhdC5ucl9maWxlczsKKwkJCQkJZ2V0X21heF9maWxlcygpKTsKKwkJb2xkX21heCA9IGdldF9ucl9maWxlcygpOwogCX0KIAlnb3RvIGZhaWw7CiAKQEAgLTI3Niw0ICszMDAsNSBAQAogCWlmIChmaWxlc19zdGF0Lm1heF9maWxlcyA8IE5SX0ZJTEUpCiAJCWZpbGVzX3N0YXQubWF4X2ZpbGVzID0gTlJfRklMRTsKIAlmaWxlc19kZWZlcl9pbml0KCk7CisJcGVyY3B1X2NvdW50ZXJfaW5pdCgmbnJfZmlsZXMpOwogfSAKZGlmZiAtLWdpdCBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYwppbmRleCA2YWE2ZmJlLi5iNDRjOTE2IDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMKKysrIGIvZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIHsKIAl2eGZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJ2eGZzX2lub2RlIiwKIAkJCXNpemVvZihzdHJ1Y3Qgdnhmc19pbm9kZV9pbmZvKSwgMCwgCi0JCQlTTEFCX1JFQ0xBSU1fQUNDT1VOVCwgTlVMTCwgTlVMTCk7CisJCQlTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX01FTV9TUFJFQUQsIE5VTEwsIE5VTEwpOwogCWlmICh2eGZzX2lub2RlX2NhY2hlcCkKIAkJcmV0dXJuIHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnZ4ZnNfZnNfdHlwZSk7CiAJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IDc4NWM3MjEuLmYzZmJlMmQgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC0zODEsOCArMzgxLDggQEAKIAkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJnNiLT5zX2RpcnR5KTsKIAkJfQogCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci0JCWNvbmRfcmVzY2hlZCgpOwogCQlpcHV0KGlub2RlKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAJCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDIxZmQ1OWMuLmM3MmE4YTkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtMTExLDYgKzExMSw4IEBACiAKIAkJLyogRG9lc24ndCBodXJ0IHRvICJyZXNldCIgdGhlIHZhbGlkaXR5IHRpbWVvdXQgKi8KIAkJZnVzZV9pbnZhbGlkYXRlX2VudHJ5X2NhY2hlKGVudHJ5KTsKKworCQkvKiBGb3IgbmVnYXRpdmUgZGVudHJpZXMsIGFsd2F5cyBkbyBhIGZyZXNoIGxvb2t1cCAqLwogCQlpZiAoIWlub2RlKQogCQkJcmV0dXJuIDA7CiAKQEAgLTEyMiw2ICsxMjQsOSBAQAogCQlmdXNlX2xvb2t1cF9pbml0KHJlcSwgZW50cnktPmRfcGFyZW50LT5kX2lub2RlLCBlbnRyeSwgJm91dGFyZyk7CiAJCXJlcXVlc3Rfc2VuZChmYywgcmVxKTsKIAkJZXJyID0gcmVxLT5vdXQuaC5lcnJvcjsKKwkJLyogWmVybyBub2RlaWQgaXMgc2FtZSBhcyAtRU5PRU5UICovCisJCWlmICghZXJyICYmICFvdXRhcmcubm9kZWlkKQorCQkJZXJyID0gLUVOT0VOVDsKIAkJaWYgKCFlcnIpIHsKIAkJCXN0cnVjdCBmdXNlX2lub2RlICpmaSA9IGdldF9mdXNlX2lub2RlKGlub2RlKTsKIAkJCWlmIChvdXRhcmcubm9kZWlkICE9IGdldF9ub2RlX2lkKGlub2RlKSkgewpAQCAtMTkwLDggKzE5NSw5IEBACiAJZnVzZV9sb29rdXBfaW5pdChyZXEsIGRpciwgZW50cnksICZvdXRhcmcpOwogCXJlcXVlc3Rfc2VuZChmYywgcmVxKTsKIAllcnIgPSByZXEtPm91dC5oLmVycm9yOwotCWlmICghZXJyICYmICgob3V0YXJnLm5vZGVpZCAmJiBpbnZhbGlkX25vZGVpZChvdXRhcmcubm9kZWlkKSkgfHwKLQkJICAgICAhdmFsaWRfbW9kZShvdXRhcmcuYXR0ci5tb2RlKSkpCisJLyogWmVybyBub2RlaWQgaXMgc2FtZSBhcyAtRU5PRU5ULCBidXQgd2l0aCB2YWxpZCB0aW1lb3V0ICovCisJaWYgKCFlcnIgJiYgb3V0YXJnLm5vZGVpZCAmJgorCSAgICAoaW52YWxpZF9ub2RlaWQob3V0YXJnLm5vZGVpZCkgfHwgIXZhbGlkX21vZGUob3V0YXJnLmF0dHIubW9kZSkpKQogCQllcnIgPSAtRUlPOwogCWlmICghZXJyICYmIG91dGFyZy5ub2RlaWQpIHsKIAkJaW5vZGUgPSBmdXNlX2lnZXQoZGlyLT5pX3NiLCBvdXRhcmcubm9kZWlkLCBvdXRhcmcuZ2VuZXJhdGlvbiwKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaHBmc19mbi5oIGIvZnMvaHBmcy9ocGZzX2ZuLmgKaW5kZXggNjYyOGMzYi4uNGM2NDczYSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9ocGZzX2ZuLmgKKysrIGIvZnMvaHBmcy9ocGZzX2ZuLmgKQEAgLTksNiArOSw3IEBACiAvLyNkZWZpbmUgREJHCiAvLyNkZWZpbmUgREVCVUdfTE9DS1MKIAorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaHBmc19mcy5oPgpAQCAtNTcsOCArNTgsOCBAQAogCXVuc2lnbmVkIGlfZWFfdWlkIDogMTsJLyogZmlsZSdzIHVpZCBpcyBzdG9yZWQgaW4gZWEgKi8KIAl1bnNpZ25lZCBpX2VhX2dpZCA6IDE7CS8qIGZpbGUncyBnaWQgaXMgc3RvcmVkIGluIGVhICovCiAJdW5zaWduZWQgaV9kaXJ0eSA6IDE7Ci0Jc3RydWN0IHNlbWFwaG9yZSBpX3NlbTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGlfcGFyZW50OworCXN0cnVjdCBtdXRleCBpX211dGV4OworCXN0cnVjdCBtdXRleCBpX3BhcmVudF9tdXRleDsKIAlsb2ZmX3QgKippX3JkZGlyX29mZjsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaW5vZGUuYyBiL2ZzL2hwZnMvaW5vZGUuYwppbmRleCBlM2QxN2U5Li41NmYyYzMzIDEwMDY0NAotLS0gYS9mcy9ocGZzL2lub2RlLmMKKysrIGIvZnMvaHBmcy9pbm9kZS5jCkBAIC0xODYsOSArMTg2LDkgQEAKIAkJa2ZyZWUoaHBmc19pbm9kZS0+aV9yZGRpcl9vZmYpOwogCQlocGZzX2lub2RlLT5pX3JkZGlyX29mZiA9IE5VTEw7CiAJfQotCWRvd24oJmhwZnNfaW5vZGUtPmlfcGFyZW50KTsKKwltdXRleF9sb2NrKCZocGZzX2lub2RlLT5pX3BhcmVudF9tdXRleCk7CiAJaWYgKCFpLT5pX25saW5rKSB7Ci0JCXVwKCZocGZzX2lub2RlLT5pX3BhcmVudCk7CisJCW11dGV4X3VubG9jaygmaHBmc19pbm9kZS0+aV9wYXJlbnRfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCXBhcmVudCA9IGlnZXRfbG9ja2VkKGktPmlfc2IsIGhwZnNfaW5vZGUtPmlfcGFyZW50X2Rpcik7CkBAIC0xOTksMTQgKzE5OSwxNCBAQAogCQkJaHBmc19yZWFkX2lub2RlKHBhcmVudCk7CiAJCQl1bmxvY2tfbmV3X2lub2RlKHBhcmVudCk7CiAJCX0KLQkJZG93bigmaHBmc19pbm9kZS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZocGZzX2lub2RlLT5pX211dGV4KTsKIAkJaHBmc193cml0ZV9pbm9kZV9ub2xvY2soaSk7Ci0JCXVwKCZocGZzX2lub2RlLT5pX3NlbSk7CisJCW11dGV4X3VubG9jaygmaHBmc19pbm9kZS0+aV9tdXRleCk7CiAJCWlwdXQocGFyZW50KTsKIAl9IGVsc2UgewogCQltYXJrX2lub2RlX2RpcnR5KGkpOwogCX0KLQl1cCgmaHBmc19pbm9kZS0+aV9wYXJlbnQpOworCW11dGV4X3VubG9jaygmaHBmc19pbm9kZS0+aV9wYXJlbnRfbXV0ZXgpOwogfQogCiB2b2lkIGhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaSkKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZWkuYyBiL2ZzL2hwZnMvbmFtZWkuYwppbmRleCA4ZmY4ZmM0Li5hMDNhYmIxIDEwMDY0NAotLS0gYS9mcy9ocGZzL25hbWVpLmMKKysrIGIvZnMvaHBmcy9uYW1laS5jCkBAIC02MCw3ICs2MCw3IEBACiAJaWYgKGRlZS5yZWFkX29ubHkpCiAJCXJlc3VsdC0+aV9tb2RlICY9IH4wMjIyOwogCi0JZG93bigmaHBmc19pKGRpciktPmlfc2VtKTsKKwltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIChjaGFyICopbmFtZSwgbGVuLCAmZGVlLCAwKTsKIAlpZiAociA9PSAxKQogCQlnb3RvIGJhaWwzOwpAQCAtMTAxLDExICsxMDEsMTEgQEAKIAkJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAl9CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JdXAoJmhwZnNfaShkaXIpLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogYmFpbDM6Ci0JdXAoJmhwZnNfaShkaXIpLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaXB1dChyZXN1bHQpOwogYmFpbDI6CiAJaHBmc19icmVsc2U0KCZxYmgwKTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXJlc3VsdC0+aV9kYXRhLmFfb3BzID0gJmhwZnNfYW9wczsKIAlocGZzX2kocmVzdWx0KS0+bW11X3ByaXZhdGUgPSAwOwogCi0JZG93bigmaHBmc19pKGRpciktPmlfc2VtKTsKKwltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIChjaGFyICopbmFtZSwgbGVuLCAmZGVlLCAwKTsKIAlpZiAociA9PSAxKQogCQlnb3RvIGJhaWwyOwpAQCAtMTkzLDEyICsxOTMsMTIgQEAKIAkJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAl9CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JdXAoJmhwZnNfaShkaXIpLT5pX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogCiBiYWlsMjoKLQl1cCgmaHBmc19pKGRpciktPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlpcHV0KHJlc3VsdCk7CiBiYWlsMToKIAlicmVsc2UoYmgpOwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJcmVzdWx0LT5pX2Jsb2NrcyA9IDE7CiAJaW5pdF9zcGVjaWFsX2lub2RlKHJlc3VsdCwgbW9kZSwgcmRldik7CiAKLQlkb3duKCZocGZzX2koZGlyKS0+aV9zZW0pOworCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgKGNoYXIgKiluYW1lLCBsZW4sICZkZWUsIDApOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDI7CkBAIC0yNzEsMTIgKzI3MSwxMiBAQAogCiAJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgcmVzdWx0KTsKLQl1cCgmaHBmc19pKGRpciktPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlicmVsc2UoYmgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIGJhaWwyOgotCXVwKCZocGZzX2koZGlyKS0+aV9zZW0pOworCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWlwdXQocmVzdWx0KTsKIGJhaWwxOgogCWJyZWxzZShiaCk7CkBAIC0zMzMsNyArMzMzLDcgQEAKIAlyZXN1bHQtPmlfb3AgPSAmcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAJcmVzdWx0LT5pX2RhdGEuYV9vcHMgPSAmaHBmc19zeW1saW5rX2FvcHM7CiAKLQlkb3duKCZocGZzX2koZGlyKS0+aV9zZW0pOworCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgKGNoYXIgKiluYW1lLCBsZW4sICZkZWUsIDApOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDI7CkBAIC0zNTIsMTEgKzM1MiwxMSBAQAogCiAJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgcmVzdWx0KTsKLQl1cCgmaHBmc19pKGRpciktPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiBiYWlsMjoKLQl1cCgmaHBmc19pKGRpciktPmlfc2VtKTsKKwltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlpcHV0KHJlc3VsdCk7CiBiYWlsMToKIAlicmVsc2UoYmgpOwpAQCAtMzgyLDggKzM4Miw4IEBACiAJbG9ja19rZXJuZWwoKTsKIAlocGZzX2FkanVzdF9sZW5ndGgoKGNoYXIgKiluYW1lLCAmbGVuKTsKIGFnYWluOgotCWRvd24oJmhwZnNfaShpbm9kZSktPmlfcGFyZW50KTsKLQlkb3duKCZocGZzX2koZGlyKS0+aV9zZW0pOworCW11dGV4X2xvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKKwltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJZXJyID0gLUVOT0VOVDsKIAlkZSA9IG1hcF9kaXJlbnQoZGlyLCBocGZzX2koZGlyKS0+aV9kbm8sIChjaGFyICopbmFtZSwgbGVuLCAmZG5vLCAmcWJoKTsKIAlpZiAoIWRlKQpAQCAtNDEwLDggKzQxMCw4IEBACiAJCWlmIChyZXArKykKIAkJCWJyZWFrOwogCi0JCXVwKCZocGZzX2koZGlyKS0+aV9zZW0pOwotCQl1cCgmaHBmc19pKGlub2RlKS0+aV9wYXJlbnQpOworCQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZocGZzX2koaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7CiAJCWRfZHJvcChkZW50cnkpOwogCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJaWYgKGF0b21pY19yZWFkKCZkZW50cnktPmRfY291bnQpID4gMSB8fApAQCAtNDQyLDggKzQ0Miw4IEBACiBvdXQxOgogCWhwZnNfYnJlbHNlNCgmcWJoKTsKIG91dDoKLQl1cCgmaHBmc19pKGRpciktPmlfc2VtKTsKLQl1cCgmaHBmc19pKGlub2RlKS0+aV9wYXJlbnQpOworCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaHBmc19pKGlub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDYzLDggKzQ2Myw4IEBACiAKIAlocGZzX2FkanVzdF9sZW5ndGgoKGNoYXIgKiluYW1lLCAmbGVuKTsKIAlsb2NrX2tlcm5lbCgpOwotCWRvd24oJmhwZnNfaShpbm9kZSktPmlfcGFyZW50KTsKLQlkb3duKCZocGZzX2koZGlyKS0+aV9zZW0pOworCW11dGV4X2xvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKKwltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJZXJyID0gLUVOT0VOVDsKIAlkZSA9IG1hcF9kaXJlbnQoZGlyLCBocGZzX2koZGlyKS0+aV9kbm8sIChjaGFyICopbmFtZSwgbGVuLCAmZG5vLCAmcWJoKTsKIAlpZiAoIWRlKQpAQCAtNTAyLDggKzUwMiw4IEBACiBvdXQxOgogCWhwZnNfYnJlbHNlNCgmcWJoKTsKIG91dDoKLQl1cCgmaHBmc19pKGRpciktPmlfc2VtKTsKLQl1cCgmaHBmc19pKGlub2RlKS0+aV9wYXJlbnQpOworCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaHBmc19pKGlub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTY1LDEyICs1NjUsMTIgQEAKIAogCWxvY2tfa2VybmVsKCk7CiAJLyogb3JkZXIgZG9lc24ndCBtYXR0ZXIsIGR1ZSB0byBWRlMgZXhjbHVzaW9uICovCi0JZG93bigmaHBmc19pKGkpLT5pX3BhcmVudCk7CisJbXV0ZXhfbG9jaygmaHBmc19pKGkpLT5pX3BhcmVudF9tdXRleCk7CiAJaWYgKG5ld19pbm9kZSkKLQkJZG93bigmaHBmc19pKG5ld19pbm9kZSktPmlfcGFyZW50KTsKLQlkb3duKCZocGZzX2kob2xkX2RpciktPmlfc2VtKTsKKwkJbXV0ZXhfbG9jaygmaHBmc19pKG5ld19pbm9kZSktPmlfcGFyZW50X211dGV4KTsKKwltdXRleF9sb2NrKCZocGZzX2kob2xkX2RpciktPmlfbXV0ZXgpOwogCWlmIChuZXdfZGlyICE9IG9sZF9kaXIpCi0JCWRvd24oJmhwZnNfaShuZXdfZGlyKS0+aV9zZW0pOworCQltdXRleF9sb2NrKCZocGZzX2kobmV3X2RpciktPmlfbXV0ZXgpOwogCQogCS8qIEVybT8gTW92aW5nIG92ZXIgdGhlIGVtcHR5IG5vbi1idXN5IGRpcmVjdG9yeSBpcyBwZXJmZWN0bHkgbGVnYWwgKi8KIAlpZiAobmV3X2lub2RlICYmIFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpKSB7CkBAIC02NTAsMTEgKzY1MCwxMSBAQAogCWhwZnNfZGVjaWRlX2NvbnYoaSwgKGNoYXIgKiluZXdfbmFtZSwgbmV3X2xlbik7CiBlbmQxOgogCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCi0JCXVwKCZocGZzX2kobmV3X2RpciktPmlfc2VtKTsKLQl1cCgmaHBmc19pKG9sZF9kaXIpLT5pX3NlbSk7Ci0JdXAoJmhwZnNfaShpKS0+aV9wYXJlbnQpOworCQltdXRleF91bmxvY2soJmhwZnNfaShuZXdfZGlyKS0+aV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZocGZzX2kob2xkX2RpciktPmlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaHBmc19pKGkpLT5pX3BhcmVudF9tdXRleCk7CiAJaWYgKG5ld19pbm9kZSkKLQkJdXAoJmhwZnNfaShuZXdfaW5vZGUpLT5pX3BhcmVudCk7CisJCW11dGV4X3VubG9jaygmaHBmc19pKG5ld19pbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvc3VwZXIuYyBiL2ZzL2hwZnMvc3VwZXIuYwppbmRleCA2M2U4OGQ3Li5kNzJkOGM4IDEwMDY0NAotLS0gYS9mcy9ocGZzL3N1cGVyLmMKKysrIGIvZnMvaHBmcy9zdXBlci5jCkBAIC0xODEsOCArMTgxLDggQEAKIAogCWlmICgoZmxhZ3MgJiAoU0xBQl9DVE9SX1ZFUklGWXxTTEFCX0NUT1JfQ09OU1RSVUNUT1IpKSA9PQogCSAgICBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKLQkJaW5pdF9NVVRFWCgmZWktPmlfc2VtKTsKLQkJaW5pdF9NVVRFWCgmZWktPmlfcGFyZW50KTsKKwkJbXV0ZXhfaW5pdCgmZWktPmlfbXV0ZXgpOworCQltdXRleF9pbml0KCZlaS0+aV9wYXJlbnRfbXV0ZXgpOwogCQlpbm9kZV9pbml0X29uY2UoJmVpLT52ZnNfaW5vZGUpOwogCX0KIH0KQEAgLTE5MSw3ICsxOTEsOCBAQAogewogCWhwZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImhwZnNfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvKSwKLQkJCQkJICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgICAgIGluaXRfb25jZSwgTlVMTCk7CiAJaWYgKGhwZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCBiMzUxOTUyODk5Li4yNWZhOGJiIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtNTYsNDggKzU2LDEwIEBACiAJcGFnZXZlY19yZWluaXQocHZlYyk7CiB9CiAKLS8qCi0gKiBodWdlX3BhZ2VzX25lZWRlZCB0cmllcyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBuZXcgaHVnZSBwYWdlcyB0aGF0Ci0gKiB3aWxsIGJlIHJlcXVpcmVkIHRvIGZ1bGx5IHBvcHVsYXRlIHRoaXMgVk1BLiAgVGhpcyB3aWxsIGJlIGVxdWFsIHRvCi0gKiB0aGUgc2l6ZSBvZiB0aGUgVk1BIGluIGh1Z2UgcGFnZXMgbWludXMgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzCi0gKiAoY292ZXJlZCBieSB0aGlzIFZNQSkgdGhhdCBhcmUgZm91bmQgaW4gdGhlIHBhZ2UgY2FjaGUuCi0gKgotICogUmVzdWx0IGlzIGluIGJ5dGVzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBpc19odWdlcGFnZV9tZW1fZW5vdWdoKCkKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWh1Z2VfcGFnZXNfbmVlZGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgZW5kID0gdm1hLT52bV9lbmQ7Ci0JdW5zaWduZWQgbG9uZyBodWdlcGFnZXMgPSAoZW5kIC0gc3RhcnQpID4+IEhQQUdFX1NISUZUOwotCXBnb2ZmX3QgbmV4dCA9IHZtYS0+dm1fcGdvZmYgPj4gKEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JcGdvZmZfdCBlbmRwZyA9IG5leHQgKyBodWdlcGFnZXM7Ci0KLQlwYWdldmVjX2luaXQoJnB2ZWMsIDApOwotCXdoaWxlIChuZXh0IDwgZW5kcGcpIHsKLQkJaWYgKCFwYWdldmVjX2xvb2t1cCgmcHZlYywgbWFwcGluZywgbmV4dCwgUEFHRVZFQ19TSVpFKSkKLQkJCWJyZWFrOwotCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudCgmcHZlYyk7IGkrKykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwotCQkJaWYgKHBhZ2UtPmluZGV4ID4gbmV4dCkKLQkJCQluZXh0ID0gcGFnZS0+aW5kZXg7Ci0JCQlpZiAocGFnZS0+aW5kZXggPj0gZW5kcGcpCi0JCQkJYnJlYWs7Ci0JCQluZXh0Kys7Ci0JCQlodWdlcGFnZXMtLTsKLQkJfQotCQlodWdlX3BhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7Ci0JfQotCXJldHVybiBodWdlcGFnZXMgPDwgSFBBR0VfU0hJRlQ7Ci19Ci0KIHN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzOworCXN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTsKIAlsb2ZmX3QgbGVuLCB2bWFfbGVuOwogCWludCByZXQ7CiAKQEAgLTExMywxMCArNzUsNiBAQAogCWlmICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgPCBIUEFHRV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ5dGVzID0gaHVnZV9wYWdlc19uZWVkZWQobWFwcGluZywgdm1hKTsKLQlpZiAoIWlzX2h1Z2VwYWdlX21lbV9lbm91Z2goYnl0ZXMpKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXZtYV9sZW4gPSAobG9mZl90KSh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwpAQCAtMTI5LDYgKzg3LDEwIEBACiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSAmJiBsZW4gPiBpbm9kZS0+aV9zaXplKQogCQlnb3RvIG91dDsKIAorCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpCisJCWlmIChodWdldGxiX2V4dGVuZF9yZXNlcnZhdGlvbihpbmZvLCBsZW4gPj4gSFBBR0VfU0hJRlQpICE9IDApCisJCQlnb3RvIG91dDsKKwogCXJldCA9IDA7CiAJaHVnZXRsYl9wcmVmYXVsdF9hcmNoX2hvb2sodm1hLT52bV9tbSk7CiAJaWYgKGlub2RlLT5pX3NpemUgPCBsZW4pCkBAIC0yMjcsMTMgKzE4OSwxOCBAQAogCXB1dF9wYWdlKHBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCB0cnVuY2F0ZV9odWdlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBsc3RhcnQpCitzdGF0aWMgdm9pZCB0cnVuY2F0ZV9odWdlcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCkKIHsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9ICZpbm9kZS0+aV9kYXRhOwogCWNvbnN0IHBnb2ZmX3Qgc3RhcnQgPSBsc3RhcnQgPj4gSFBBR0VfU0hJRlQ7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKIAlwZ29mZl90IG5leHQ7CiAJaW50IGk7CiAKKwlodWdldGxiX3RydW5jYXRlX3Jlc2VydmF0aW9uKEhVR0VUTEJGU19JKGlub2RlKSwKKwkJCQkgICAgIGxzdGFydCA+PiBIUEFHRV9TSElGVCk7CisJaWYgKCFtYXBwaW5nLT5ucnBhZ2VzKQorCQlyZXR1cm47CiAJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKIAluZXh0ID0gc3RhcnQ7CiAJd2hpbGUgKDEpIHsKQEAgLTI2Miw4ICsyMjksNyBAQAogCiBzdGF0aWMgdm9pZCBodWdldGxiZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaWYgKGlub2RlLT5pX2RhdGEubnJwYWdlcykKLQkJdHJ1bmNhdGVfaHVnZXBhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwl0cnVuY2F0ZV9odWdlcGFnZXMoaW5vZGUsIDApOwogCWNsZWFyX2lub2RlKGlub2RlKTsKIH0KIApAQCAtMjk2LDggKzI2Miw3IEBACiAJaW5vZGUtPmlfc3RhdGUgfD0gSV9GUkVFSU5HOwogCWlub2Rlc19zdGF0Lm5yX2lub2Rlcy0tOwogCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKLQlpZiAoaW5vZGUtPmlfZGF0YS5ucnBhZ2VzKQotCQl0cnVuY2F0ZV9odWdlcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCXRydW5jYXRlX2h1Z2VwYWdlcyhpbm9kZSwgMCk7CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwogCWRlc3Ryb3lfaW5vZGUoaW5vZGUpOwogfQpAQCAtMzU2LDcgKzMyMSw3IEBACiAJaWYgKCFwcmlvX3RyZWVfZW1wdHkoJm1hcHBpbmctPmlfbW1hcCkpCiAJCWh1Z2V0bGJfdm10cnVuY2F0ZV9saXN0KCZtYXBwaW5nLT5pX21tYXAsIHBnb2ZmKTsKIAlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotCXRydW5jYXRlX2h1Z2VwYWdlcyhtYXBwaW5nLCBvZmZzZXQpOworCXRydW5jYXRlX2h1Z2VwYWdlcyhpbm9kZSwgb2Zmc2V0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTczLDYgKzUzOCw3IEBACiAJCWh1Z2V0bGJmc19pbmNfZnJlZV9pbm9kZXMoc2JpbmZvKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQorCXAtPnByZXJlc2VydmVkX2hwYWdlcyA9IDA7CiAJcmV0dXJuICZwLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTc3MSwyMSArNzM3LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqaHVnZXRsYmZzX3Zmc21vdW50OwogCi0vKgotICogUmV0dXJuIHRoZSBuZXh0IGlkZW50aWZpZXIgZm9yIGEgc2htIGZpbGUKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYmZzX2NvdW50ZXIodm9pZCkKLXsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50ZXI7Ci0JdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQlzcGluX2xvY2soJmxvY2spOwotCXJldCA9ICsrY291bnRlcjsKLQlzcGluX3VubG9jaygmbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBjYW5fZG9faHVnZXRsYl9zaG0odm9pZCkKIHsKIAlyZXR1cm4gbGlrZWx5KGNhcGFibGUoQ0FQX0lQQ19MT0NLKSB8fApAQCAtODAxLDE4ICs3NTIsMTYgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICpyb290OwogCXN0cnVjdCBxc3RyIHF1aWNrX3N0cmluZzsKIAljaGFyIGJ1ZlsxNl07CisJc3RhdGljIGF0b21pY190IGNvdW50ZXI7CiAKIAlpZiAoIWNhbl9kb19odWdldGxiX3NobSgpKQogCQlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOwogCi0JaWYgKCFpc19odWdlcGFnZV9tZW1fZW5vdWdoKHNpemUpKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQogCWlmICghdXNlcl9zaG1fbG9jayhzaXplLCBjdXJyZW50LT51c2VyKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlyb290ID0gaHVnZXRsYmZzX3Zmc21vdW50LT5tbnRfcm9vdDsKLQlzbnByaW50ZihidWYsIDE2LCAiJWx1IiwgaHVnZXRsYmZzX2NvdW50ZXIoKSk7CisJc25wcmludGYoYnVmLCAxNiwgIiV1IiwgYXRvbWljX2luY19yZXR1cm4oJmNvdW50ZXIpKTsKIAlxdWlja19zdHJpbmcubmFtZSA9IGJ1ZjsKIAlxdWlja19zdHJpbmcubGVuID0gc3RybGVuKHF1aWNrX3N0cmluZy5uYW1lKTsKIAlxdWlja19zdHJpbmcuaGFzaCA9IDA7CkBAIC04MzEsNiArNzgwLDExIEBACiAJaWYgKCFpbm9kZSkKIAkJZ290byBvdXRfZmlsZTsKIAorCWVycm9yID0gLUVOT01FTTsKKwlpZiAoaHVnZXRsYl9leHRlbmRfcmVzZXJ2YXRpb24oSFVHRVRMQkZTX0koaW5vZGUpLAorCQkJCSAgICAgICBzaXplID4+IEhQQUdFX1NISUZUKSAhPSAwKQorCQlnb3RvIG91dF9pbm9kZTsKKwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJaW5vZGUtPmlfc2l6ZSA9IHNpemU7CiAJaW5vZGUtPmlfbmxpbmsgPSAwOwpAQCAtODQxLDYgKzc5NSw4IEBACiAJZmlsZS0+Zl9tb2RlID0gRk1PREVfV1JJVEUgfCBGTU9ERV9SRUFEOwogCXJldHVybiBmaWxlOwogCitvdXRfaW5vZGU6CisJaXB1dChpbm9kZSk7CiBvdXRfZmlsZToKIAlwdXRfZmlscChmaWxlKTsKIG91dF9kZW50cnk6CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCBkMGJlNjE1Li44NWRhMTEwIDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTg0LDE0ICs4NCwxNCBAQAogREVGSU5FX1NQSU5MT0NLKGlub2RlX2xvY2spOwogCiAvKgotICogaXBydW5lX3NlbSBwcm92aWRlcyBleGNsdXNpb24gYmV0d2VlbiB0aGUga3N3YXBkIG9yIHRyeV90b19mcmVlX3BhZ2VzCisgKiBpcHJ1bmVfbXV0ZXggcHJvdmlkZXMgZXhjbHVzaW9uIGJldHdlZW4gdGhlIGtzd2FwZCBvciB0cnlfdG9fZnJlZV9wYWdlcwogICogaWNhY2hlIHNocmlua2luZyBwYXRoLCBhbmQgdGhlIHVtb3VudCBwYXRoLiAgV2l0aG91dCB0aGlzIGV4Y2x1c2lvbiwKICAqIGJ5IHRoZSB0aW1lIHBydW5lX2ljYWNoZSBjYWxscyBpcHV0IGZvciB0aGUgaW5vZGUgd2hvc2UgcGFnZXMgaXQgaGFzCiAgKiBiZWVuIGludmFsaWRhdGluZywgb3IgYnkgdGhlIHRpbWUgaXQgY2FsbHMgY2xlYXJfaW5vZGUgJiBkZXN0cm95X2lub2RlCiAgKiBmcm9tIGl0cyBmaW5hbCBkaXNwb3NlX2xpc3QsIHRoZSBzdHJ1Y3Qgc3VwZXJfYmxvY2sgdGhleSByZWZlciB0bwogICogKGZvciBpbm9kZS0+aV9zYi0+c19vcCkgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGZyZWVkIGFuZCByZXVzZWQuCiAgKi8KLURFQ0xBUkVfTVVURVgoaXBydW5lX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGlwcnVuZV9tdXRleCk7CiAKIC8qCiAgKiBTdGF0aXN0aWNzIGdhdGhlcmluZy4uCkBAIC0yMDYsNyArMjA2LDcgQEAKIAlpX3NpemVfb3JkZXJlZF9pbml0KGlub2RlKTsKICNpZmRlZiBDT05GSUdfSU5PVElGWQogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aW5vdGlmeV93YXRjaGVzKTsKLQlzZW1hX2luaXQoJmlub2RlLT5pbm90aWZ5X3NlbSwgMSk7CisJbXV0ZXhfaW5pdCgmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwogI2VuZGlmCiB9CiAKQEAgLTMxOSw3ICszMTksNyBAQAogCQkvKgogCQkgKiBXZSBjYW4gcmVzY2hlZHVsZSBoZXJlIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgdGhlIGxpc3QncwogCQkgKiBjb25zaXN0ZW5jeSBiZWNhdXNlIHRoZSBwZXItc2IgbGlzdCBvZiBpbm9kZXMgbXVzdCBub3QKLQkJICogY2hhbmdlIGR1cmluZyB1bW91bnQgYW55bW9yZSwgYW5kIGJlY2F1c2UgaXBydW5lX3NlbSBrZWVwcworCQkgKiBjaGFuZ2UgZHVyaW5nIHVtb3VudCBhbnltb3JlLCBhbmQgYmVjYXVzZSBpcHJ1bmVfbXV0ZXgga2VlcHMKIAkJICogc2hyaW5rX2ljYWNoZV9tZW1vcnkoKSBhd2F5LgogCQkgKi8KIAkJY29uZF9yZXNjaGVkX2xvY2soJmlub2RlX2xvY2spOwpAQCAtMzU1LDE0ICszNTUsMTQgQEAKIAlpbnQgYnVzeTsKIAlMSVNUX0hFQUQodGhyb3dfYXdheSk7CiAKLQlkb3duKCZpcHJ1bmVfc2VtKTsKKwltdXRleF9sb2NrKCZpcHJ1bmVfbXV0ZXgpOwogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJaW5vdGlmeV91bm1vdW50X2lub2Rlcygmc2ItPnNfaW5vZGVzKTsKIAlidXN5ID0gaW52YWxpZGF0ZV9saXN0KCZzYi0+c19pbm9kZXMsICZ0aHJvd19hd2F5KTsKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKIAlkaXNwb3NlX2xpc3QoJnRocm93X2F3YXkpOwotCXVwKCZpcHJ1bmVfc2VtKTsKKwltdXRleF91bmxvY2soJmlwcnVuZV9tdXRleCk7CiAKIAlyZXR1cm4gYnVzeTsKIH0KQEAgLTM3Nyw3ICszNzcsNyBAQAogCWlmIChzYikgewogCQkvKgogCQkgKiBubyBuZWVkIHRvIGxvY2sgdGhlIHN1cGVyLCBnZXRfc3VwZXIgaG9sZHMgdGhlCi0JCSAqIHJlYWQgc2VtYXBob3JlIHNvIHRoZSBmaWxlc3lzdGVtIGNhbm5vdCBnbyBhd2F5CisJCSAqIHJlYWQgbXV0ZXggc28gdGhlIGZpbGVzeXN0ZW0gY2Fubm90IGdvIGF3YXkKIAkJICogdW5kZXIgdXMgKC0+cHV0X3N1cGVyIHJ1bnMgd2l0aCB0aGUgd3JpdGUgbG9jawogCQkgKiBob2xkKS4KIAkJICovCkBAIC00MjMsNyArNDIzLDcgQEAKIAlpbnQgbnJfc2Nhbm5lZDsKIAl1bnNpZ25lZCBsb25nIHJlYXAgPSAwOwogCi0JZG93bigmaXBydW5lX3NlbSk7CisJbXV0ZXhfbG9jaygmaXBydW5lX211dGV4KTsKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwogCWZvciAobnJfc2Nhbm5lZCA9IDA7IG5yX3NjYW5uZWQgPCBucl90b19zY2FuOyBucl9zY2FubmVkKyspIHsKIAkJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTQ1OSw3ICs0NTksNyBAQAogCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKIAogCWRpc3Bvc2VfbGlzdCgmZnJlZWFibGUpOwotCXVwKCZpcHJ1bmVfc2VtKTsKKwltdXRleF91bmxvY2soJmlwcnVuZV9tdXRleCk7CiAKIAlpZiAoY3VycmVudF9pc19rc3dhcGQoKSkKIAkJbW9kX3BhZ2Vfc3RhdGUoa3N3YXBkX2lub2Rlc3RlYWwsIHJlYXApOwpAQCAtMTM3NSw4ICsxMzc1LDEzIEBACiAJaW50IGxvb3A7CiAKIAkvKiBpbm9kZSBzbGFiIGNhY2hlICovCi0JaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlub2RlX2NhY2hlIiwgc2l6ZW9mKHN0cnVjdCBpbm9kZSksCi0JCQkJMCwgU0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9QQU5JQywgaW5pdF9vbmNlLCBOVUxMKTsKKwlpbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaW5vZGVfY2FjaGUiLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBpbm9kZSksCisJCQkJCSAwLAorCQkJCQkgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUN8CisJCQkJCSBTTEFCX01FTV9TUFJFQUQpLAorCQkJCQkgaW5pdF9vbmNlLAorCQkJCQkgTlVMTCk7CiAJc2V0X3Nocmlua2VyKERFRkFVTFRfU0VFS1MsIHNocmlua19pY2FjaGVfbWVtb3J5KTsKIAogCS8qIEhhc2ggbWF5IGhhdmUgYmVlbiBzZXQgdXAgaW4gaW5vZGVfaW5pdF9lYXJseSAqLwpkaWZmIC0tZ2l0IGEvZnMvaW5vdGlmeS5jIGIvZnMvaW5vdGlmeS5jCmluZGV4IDMwNDE1MDMuLmE2MWU5M2UgMTAwNjQ0Ci0tLSBhL2ZzL2lub3RpZnkuYworKysgYi9mcy9pbm90aWZ5LmMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAKIHN0YXRpYyBhdG9taWNfdCBpbm90aWZ5X2Nvb2tpZTsKLXN0YXRpYyBhdG9taWNfdCBpbm90aWZ5X3dhdGNoZXM7CiAKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKndhdGNoX2NhY2hlcDsKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKmV2ZW50X2NhY2hlcDsKQEAgLTU0LDEwICs1MywxMCBAQAogICogTG9jayBvcmRlcmluZzoKICAqCiAgKiBkZW50cnktPmRfbG9jayAodXNlZCB0byBrZWVwIGRfbW92ZSgpIGF3YXkgZnJvbSBkZW50cnktPmRfcGFyZW50KQotICogaXBydW5lX3NlbSAoc3luY2hyb25pemUgc2hyaW5rX2ljYWNoZV9tZW1vcnkoKSkKKyAqIGlwcnVuZV9tdXRleCAoc3luY2hyb25pemUgc2hyaW5rX2ljYWNoZV9tZW1vcnkoKSkKICAqIAlpbm9kZV9sb2NrIChwcm90ZWN0cyB0aGUgc3VwZXJfYmxvY2stPnNfaW5vZGVzIGxpc3QpCi0gKiAJaW5vZGUtPmlub3RpZnlfc2VtIChwcm90ZWN0cyBpbm9kZS0+aW5vdGlmeV93YXRjaGVzIGFuZCB3YXRjaGVzLT5pX2xpc3QpCi0gKiAJCWlub3RpZnlfZGV2LT5zZW0gKHByb3RlY3RzIGlub3RpZnlfZGV2aWNlIGFuZCB3YXRjaGVzLT5kX2xpc3QpCisgKiAJaW5vZGUtPmlub3RpZnlfbXV0ZXggKHByb3RlY3RzIGlub2RlLT5pbm90aWZ5X3dhdGNoZXMgYW5kIHdhdGNoZXMtPmlfbGlzdCkKKyAqIAkJaW5vdGlmeV9kZXYtPm11dGV4IChwcm90ZWN0cyBpbm90aWZ5X2RldmljZSBhbmQgd2F0Y2hlcy0+ZF9saXN0KQogICovCiAKIC8qCkBAIC03OSwxMiArNzgsMTIgQEAKIC8qCiAgKiBzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgLSByZXByZXNlbnRzIGFuIGlub3RpZnkgaW5zdGFuY2UKICAqCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIHNlbWFwaG9yZSAnc2VtJy4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIHByb3RlY3RlZCBieSB0aGUgbXV0ZXggJ211dGV4Jy4KICAqLwogc3RydWN0IGlub3RpZnlfZGV2aWNlIHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAJd3E7CQkvKiB3YWl0IHF1ZXVlIGZvciBpL28gKi8KIAlzdHJ1Y3QgaWRyCQlpZHI7CQkvKiBpZHIgbWFwcGluZyB3ZCAtPiB3YXRjaCAqLwotCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwkJLyogcHJvdGVjdHMgdGhpcyBiYWQgYm95ICovCisJc3RydWN0IG11dGV4CQltdXRleDsJCS8qIHByb3RlY3RzIHRoaXMgYmFkIGJveSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgCWV2ZW50czsJCS8qIGxpc3Qgb2YgcXVldWVkIGV2ZW50cyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJd2F0Y2hlczsJLyogbGlzdCBvZiB3YXRjaGVzICovCiAJYXRvbWljX3QJCWNvdW50OwkJLyogcmVmZXJlbmNlIGNvdW50ICovCkBAIC0xMDEsNyArMTAwLDcgQEAKICAqIGRldmljZS4gIEluIHJlYWQoKSwgdGhpcyBsaXN0IGlzIHdhbGtlZCBhbmQgYWxsIGV2ZW50cyB0aGF0IGNhbiBmaXQgaW4gdGhlCiAgKiBidWZmZXIgYXJlIHJldHVybmVkLgogICoKLSAqIFByb3RlY3RlZCBieSBkZXYtPnNlbSBvZiB0aGUgZGV2aWNlIGluIHdoaWNoIHdlIGFyZSBxdWV1ZWQuCisgKiBQcm90ZWN0ZWQgYnkgZGV2LT5tdXRleCBvZiB0aGUgZGV2aWNlIGluIHdoaWNoIHdlIGFyZSBxdWV1ZWQuCiAgKi8KIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCB7CiAJc3RydWN0IGlub3RpZnlfZXZlbnQJZXZlbnQ7CS8qIHRoZSB1c2VyLXNwYWNlIGV2ZW50ICovCkBAIC0xMTIsOCArMTExLDggQEAKIC8qCiAgKiBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAtIHJlcHJlc2VudHMgYSB3YXRjaCByZXF1ZXN0IG9uIGEgc3BlY2lmaWMgaW5vZGUKICAqCi0gKiBkX2xpc3QgaXMgcHJvdGVjdGVkIGJ5IGRldi0+c2VtIG9mIHRoZSBhc3NvY2lhdGVkIHdhdGNoLT5kZXYuCi0gKiBpX2xpc3QgYW5kIG1hc2sgYXJlIHByb3RlY3RlZCBieSBpbm9kZS0+aW5vdGlmeV9zZW0gb2YgdGhlIGFzc29jaWF0ZWQgaW5vZGUuCisgKiBkX2xpc3QgaXMgcHJvdGVjdGVkIGJ5IGRldi0+bXV0ZXggb2YgdGhlIGFzc29jaWF0ZWQgd2F0Y2gtPmRldi4KKyAqIGlfbGlzdCBhbmQgbWFzayBhcmUgcHJvdGVjdGVkIGJ5IGlub2RlLT5pbm90aWZ5X211dGV4IG9mIHRoZSBhc3NvY2lhdGVkIGlub2RlLgogICogZGV2LCBpbm9kZSwgYW5kIHdkIGFyZSBuZXZlciB3cml0dGVuIHRvIG9uY2UgdGhlIHdhdGNoIGlzIGNyZWF0ZWQuCiAgKi8KIHN0cnVjdCBpbm90aWZ5X3dhdGNoIHsKQEAgLTI2MSw3ICsyNjAsNyBAQAogLyoKICAqIGlub3RpZnlfZGV2X2dldF9ldmVudCAtIHJldHVybiB0aGUgbmV4dCBldmVudCBpbiB0aGUgZ2l2ZW4gZGV2J3MgcXVldWUKICAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIGRldi0+c2VtLgorICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPm11dGV4LgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqCiBpbm90aWZ5X2Rldl9nZXRfZXZlbnQoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCkBAIC0yNzIsNyArMjcxLDcgQEAKIC8qCiAgKiBpbm90aWZ5X2Rldl9xdWV1ZV9ldmVudCAtIGFkZCBhIG5ldyBldmVudCB0byB0aGUgZ2l2ZW4gZGV2aWNlCiAgKgotICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPnNlbS4gIENhbiBzbGVlcCAoY2FsbHMga2VybmVsX2V2ZW50KCkpLgorICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPm11dGV4LiAgQ2FuIHNsZWVwIChjYWxscyBrZXJuZWxfZXZlbnQoKSkuCiAgKi8KIHN0YXRpYyB2b2lkIGlub3RpZnlfZGV2X3F1ZXVlX2V2ZW50KHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsIHUzMiBtYXNrLApAQCAtMzE1LDcgKzMxNCw3IEBACiAvKgogICogcmVtb3ZlX2tldmVudCAtIGNsZWFucyB1cCBhbmQgdWx0aW1hdGVseSBmcmVlcyB0aGUgZ2l2ZW4ga2V2ZW50CiAgKgotICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPnNlbS4KKyAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5tdXRleC4KICAqLwogc3RhdGljIHZvaWQgcmVtb3ZlX2tldmVudChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQpCkBAIC0zMzIsNyArMzMxLDcgQEAKIC8qCiAgKiBpbm90aWZ5X2Rldl9ldmVudF9kZXF1ZXVlIC0gZGVzdHJveSBhbiBldmVudCBvbiB0aGUgZ2l2ZW4gZGV2aWNlCiAgKgotICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPnNlbS4KKyAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5tdXRleC4KICAqLwogc3RhdGljIHZvaWQgaW5vdGlmeV9kZXZfZXZlbnRfZGVxdWV1ZShzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldikKIHsKQEAgLTM0Niw3ICszNDUsNyBAQAogLyoKICAqIGlub3RpZnlfZGV2X2dldF93ZCAtIHJldHVybnMgdGhlIG5leHQgV0QgZm9yIHVzZSBieSB0aGUgZ2l2ZW4gZGV2CiAgKgotICogQ2FsbGVycyBtdXN0IGhvbGQgZGV2LT5zZW0uICBUaGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4KKyAqIENhbGxlcnMgbXVzdCBob2xkIGRldi0+bXV0ZXguICBUaGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4KICAqLwogc3RhdGljIGludCBpbm90aWZ5X2Rldl9nZXRfd2Qoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCkBAIC0zODEsOSArMzgwLDUxIEBACiB9CiAKIC8qCisgKiBpbm90aWZ5X2lub2RlX3dhdGNoZWQgLSByZXR1cm5zIG5vbnplcm8gaWYgdGhlcmUgYXJlIHdhdGNoZXMgb24gdGhpcyBpbm9kZQorICogYW5kIHplcm8gb3RoZXJ3aXNlLiAgV2UgY2FsbCB0aGlzIGxvY2tsZXNzLCB3ZSBkbyBub3QgY2FyZSBpZiB3ZSByYWNlLgorICovCitzdGF0aWMgaW5saW5lIGludCBpbm90aWZ5X2lub2RlX3dhdGNoZWQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMpOworfQorCisvKgorICogR2V0IGNoaWxkIGRlbnRyeSBmbGFnIGludG8gc3luY2ggd2l0aCBwYXJlbnQgaW5vZGUuCisgKiBGbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXIgZm9yIG5lZ2F0aXZlIGRlbnRyeXMuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9kZW50cnlfY2hpbGRfZmxhZ3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhdGNoZWQpCit7CisJc3RydWN0IGRlbnRyeSAqYWxpYXM7CisKKwlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmaW5vZGUtPmlfZGVudHJ5LCBkX2FsaWFzKSB7CisJCXN0cnVjdCBkZW50cnkgKmNoaWxkOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZhbGlhcy0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkgeworCQkJaWYgKCFjaGlsZC0+ZF9pbm9kZSkgeworCQkJCVdBUk5fT04oY2hpbGQtPmRfZmxhZ3MgJiBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzcGluX2xvY2soJmNoaWxkLT5kX2xvY2spOworCQkJaWYgKHdhdGNoZWQpIHsKKwkJCQlXQVJOX09OKGNoaWxkLT5kX2ZsYWdzICYKKwkJCQkJCURDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEKTsKKwkJCQljaGlsZC0+ZF9mbGFncyB8PSBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRDsKKwkJCX0gZWxzZSB7CisJCQkJV0FSTl9PTighKGNoaWxkLT5kX2ZsYWdzICYKKwkJCQkJRENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQpKTsKKwkJCQljaGlsZC0+ZF9mbGFncyY9fkRDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOworCQkJfQorCQkJc3Bpbl91bmxvY2soJmNoaWxkLT5kX2xvY2spOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Cit9CisKKy8qCiAgKiBjcmVhdGVfd2F0Y2ggLSBjcmVhdGVzIGEgd2F0Y2ggb24gdGhlIGdpdmVuIGRldmljZS4KICAqCi0gKiBDYWxsZXJzIG11c3QgaG9sZCBkZXYtPnNlbS4gIENhbGxzIGlub3RpZnlfZGV2X2dldF93ZCgpIHNvIG1heSBzbGVlcC4KKyAqIENhbGxlcnMgbXVzdCBob2xkIGRldi0+bXV0ZXguICBDYWxscyBpbm90aWZ5X2Rldl9nZXRfd2QoKSBzbyBtYXkgc2xlZXAuCiAgKiBCb3RoICdkZXYnIGFuZCAnaW5vZGUnIChieSB3YXkgb2YgbmFtZWlkYXRhKSBuZWVkIHRvIGJlIHBpbm5lZC4KICAqLwogc3RhdGljIHN0cnVjdCBpbm90aWZ5X3dhdGNoICpjcmVhdGVfd2F0Y2goc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsCkBAIC00MjYsNyArNDY3LDYgQEAKIAlnZXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7CiAKIAlhdG9taWNfaW5jKCZkZXYtPnVzZXItPmlub3RpZnlfd2F0Y2hlcyk7Ci0JYXRvbWljX2luYygmaW5vdGlmeV93YXRjaGVzKTsKIAogCXJldHVybiB3YXRjaDsKIH0KQEAgLTQzNCw3ICs0NzQsNyBAQAogLyoKICAqIGlub3RpZnlfZmluZF9kZXYgLSBmaW5kIHRoZSB3YXRjaCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGlub2RlIGFuZCBkZXYKICAqCi0gKiBDYWxsZXJzIG11c3QgaG9sZCBpbm9kZS0+aW5vdGlmeV9zZW0uCisgKiBDYWxsZXJzIG11c3QgaG9sZCBpbm9kZS0+aW5vdGlmeV9tdXRleC4KICAqLwogc3RhdGljIHN0cnVjdCBpbm90aWZ5X3dhdGNoICppbm9kZV9maW5kX2RldihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCkBAIC00NTgsOCArNDk4LDEwIEBACiAJbGlzdF9kZWwoJndhdGNoLT5pX2xpc3QpOwogCWxpc3RfZGVsKCZ3YXRjaC0+ZF9saXN0KTsKIAorCWlmICghaW5vdGlmeV9pbm9kZV93YXRjaGVkKHdhdGNoLT5pbm9kZSkpCisJCXNldF9kZW50cnlfY2hpbGRfZmxhZ3Mod2F0Y2gtPmlub2RlLCAwKTsKKwogCWF0b21pY19kZWMoJmRldi0+dXNlci0+aW5vdGlmeV93YXRjaGVzKTsKLQlhdG9taWNfZGVjKCZpbm90aWZ5X3dhdGNoZXMpOwogCWlkcl9yZW1vdmUoJmRldi0+aWRyLCB3YXRjaC0+d2QpOwogCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKIH0KQEAgLTQ2OSw3ICs1MTEsNyBAQAogICogdGhlIElOX0lHTk9SRUQgZXZlbnQgdG8gdGhlIGdpdmVuIGRldmljZSBzaWduaWZ5aW5nIHRoYXQgdGhlIGlub2RlIGlzIG5vCiAgKiBsb25nZXIgd2F0Y2hlZC4KICAqCi0gKiBDYWxsZXJzIG11c3QgaG9sZCBib3RoIGlub2RlLT5pbm90aWZ5X3NlbSBhbmQgZGV2LT5zZW0uICBXZSBkcm9wIGEKKyAqIENhbGxlcnMgbXVzdCBob2xkIGJvdGggaW5vZGUtPmlub3RpZnlfbXV0ZXggYW5kIGRldi0+bXV0ZXguICBXZSBkcm9wIGEKICAqIHJlZmVyZW5jZSB0byB0aGUgaW5vZGUgYmVmb3JlIHJldHVybmluZy4KICAqCiAgKiBUaGUgaW5vZGUgaXMgbm90IGlwdXQoKSBzbyBhcyB0byByZW1haW4gYXRvbWljLiAgSWYgdGhlIGlub2RlIG5lZWRzIHRvIGJlCkBAIC00ODEsMTYgKzUyMywzOSBAQAogCXJlbW92ZV93YXRjaF9ub19ldmVudCh3YXRjaCwgZGV2KTsKIH0KIAorLyogS2VybmVsIEFQSSAqLworCiAvKgotICogaW5vdGlmeV9pbm9kZV93YXRjaGVkIC0gcmV0dXJucyBub256ZXJvIGlmIHRoZXJlIGFyZSB3YXRjaGVzIG9uIHRoaXMgaW5vZGUKLSAqIGFuZCB6ZXJvIG90aGVyd2lzZS4gIFdlIGNhbGwgdGhpcyBsb2NrbGVzcywgd2UgZG8gbm90IGNhcmUgaWYgd2UgcmFjZS4KKyAqIGlub3RpZnlfZF9pbnN0YW50aWF0ZSAtIGluc3RhbnRpYXRlIGRjYWNoZSBlbnRyeSBmb3IgaW5vZGUKICAqLwotc3RhdGljIGlubGluZSBpbnQgaW5vdGlmeV9pbm9kZV93YXRjaGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIGlub3RpZnlfZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlyZXR1cm4gIWxpc3RfZW1wdHkoJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMpOworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKworCWlmICghaW5vZGUpCisJCXJldHVybjsKKworCVdBUk5fT04oZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRCk7CisJc3Bpbl9sb2NrKCZlbnRyeS0+ZF9sb2NrKTsKKwlwYXJlbnQgPSBlbnRyeS0+ZF9wYXJlbnQ7CisJaWYgKGlub3RpZnlfaW5vZGVfd2F0Y2hlZChwYXJlbnQtPmRfaW5vZGUpKQorCQllbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRDsKKwlzcGluX3VubG9jaygmZW50cnktPmRfbG9jayk7CiB9CiAKLS8qIEtlcm5lbCBBUEkgKi8KKy8qCisgKiBpbm90aWZ5X2RfbW92ZSAtIGRjYWNoZSBlbnRyeSBoYXMgYmVlbiBtb3ZlZAorICovCit2b2lkIGlub3RpZnlfZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKworCXBhcmVudCA9IGVudHJ5LT5kX3BhcmVudDsKKwlpZiAoaW5vdGlmeV9pbm9kZV93YXRjaGVkKHBhcmVudC0+ZF9pbm9kZSkpCisJCWVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOworCWVsc2UKKwkJZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOworfQogCiAvKioKICAqIGlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQgLSBxdWV1ZSBhbiBldmVudCB0byBhbGwgd2F0Y2hlcyBvbiB0aGlzIGlub2RlCkBAIC01MDcsMjEgKzU3MiwyMSBAQAogCWlmICghaW5vdGlmeV9pbm9kZV93YXRjaGVkKGlub2RlKSkKIAkJcmV0dXJuOwogCi0JZG93bigmaW5vZGUtPmlub3RpZnlfc2VtKTsKKwltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhdGNoLCBuZXh0LCAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlcywgaV9saXN0KSB7CiAJCXUzMiB3YXRjaF9tYXNrID0gd2F0Y2gtPm1hc2s7CiAJCWlmICh3YXRjaF9tYXNrICYgbWFzaykgewogCQkJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYgPSB3YXRjaC0+ZGV2OwogCQkJZ2V0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwotCQkJZG93bigmZGV2LT5zZW0pOworCQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJCQlpbm90aWZ5X2Rldl9xdWV1ZV9ldmVudChkZXYsIHdhdGNoLCBtYXNrLCBjb29raWUsIG5hbWUpOwogCQkJaWYgKHdhdGNoX21hc2sgJiBJTl9PTkVTSE9UKQogCQkJCXJlbW92ZV93YXRjaF9ub19ldmVudCh3YXRjaCwgZGV2KTsKLQkJCXVwKCZkZXYtPnNlbSk7CisJCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCQkJcHV0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwogCQl9CiAJfQotCXVwKCZpbm9kZS0+aW5vdGlmeV9zZW0pOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudCk7CiAKQEAgLTUzOCw3ICs2MDMsNyBAQAogCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JaWYgKCFhdG9taWNfcmVhZCAoJmlub3RpZnlfd2F0Y2hlcykpCisJaWYgKCEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0lOT1RJRllfUEFSRU5UX1dBVENIRUQpKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKQEAgLTU2OSw3ICs2MzQsNyBAQAogICogQGxpc3Q6IGxpc3Qgb2YgaW5vZGVzIGJlaW5nIHVubW91bnRlZCAoc2ItPnNfaW5vZGVzKQogICoKICAqIENhbGxlZCB3aXRoIGlub2RlX2xvY2sgaGVsZCwgcHJvdGVjdGluZyB0aGUgdW5tb3VudGluZyBzdXBlciBibG9jaydzIGxpc3QKLSAqIG9mIGlub2RlcywgYW5kIHdpdGggaXBydW5lX3NlbSBoZWxkLCBrZWVwaW5nIHNocmlua19pY2FjaGVfbWVtb3J5KCkgYXQgYmF5LgorICogb2YgaW5vZGVzLCBhbmQgd2l0aCBpcHJ1bmVfbXV0ZXggaGVsZCwga2VlcGluZyBzaHJpbmtfaWNhY2hlX21lbW9yeSgpIGF0IGJheS4KICAqIFdlIHRlbXBvcmFyaWx5IGRyb3AgaW5vZGVfbG9jaywgaG93ZXZlciwgYW5kIENBTiBibG9jay4KICAqLwogdm9pZCBpbm90aWZ5X3VubW91bnRfaW5vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCkBAIC02MTgsNyArNjgzLDcgQEAKIAkJICogV2UgY2FuIHNhZmVseSBkcm9wIGlub2RlX2xvY2sgaGVyZSBiZWNhdXNlIHdlIGhvbGQKIAkJICogcmVmZXJlbmNlcyBvbiBib3RoIGlub2RlIGFuZCBuZXh0X2kuICBBbHNvIG5vIG5ldyBpbm9kZXMKIAkJICogd2lsbCBiZSBhZGRlZCBzaW5jZSB0aGUgdW1vdW50IGhhcyBiZWd1bi4gIEZpbmFsbHksCi0JCSAqIGlwcnVuZV9zZW0ga2VlcHMgc2hyaW5rX2ljYWNoZV9tZW1vcnkoKSBhd2F5LgorCQkgKiBpcHJ1bmVfbXV0ZXgga2VlcHMgc2hyaW5rX2ljYWNoZV9tZW1vcnkoKSBhd2F5LgogCQkgKi8KIAkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCkBAIC02MjYsMTYgKzY5MSwxNiBAQAogCQkJaXB1dChuZWVkX2lwdXRfdG1wKTsKIAogCQkvKiBmb3IgZWFjaCB3YXRjaCwgc2VuZCBJTl9VTk1PVU5UIGFuZCB0aGVuIHJlbW92ZSBpdCAqLwotCQlkb3duKCZpbm9kZS0+aW5vdGlmeV9zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCXdhdGNoZXMgPSAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlczsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhdGNoLCBuZXh0X3csIHdhdGNoZXMsIGlfbGlzdCkgewogCQkJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYgPSB3YXRjaC0+ZGV2OwotCQkJZG93bigmZGV2LT5zZW0pOworCQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJCQlpbm90aWZ5X2Rldl9xdWV1ZV9ldmVudChkZXYsIHdhdGNoLCBJTl9VTk1PVU5ULDAsTlVMTCk7CiAJCQlyZW1vdmVfd2F0Y2god2F0Y2gsIGRldik7Ci0JCQl1cCgmZGV2LT5zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAkJfQotCQl1cCgmaW5vZGUtPmlub3RpZnlfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCWlwdXQoaW5vZGUpOwkJCiAKIAkJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKQEAgLTY1MSwxNCArNzE2LDE0IEBACiB7CiAJc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLCAqbmV4dDsKIAotCWRvd24oJmlub2RlLT5pbm90aWZ5X3NlbSk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3YXRjaCwgbmV4dCwgJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMsIGlfbGlzdCkgewogCQlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiA9IHdhdGNoLT5kZXY7Ci0JCWRvd24oJmRldi0+c2VtKTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJCXJlbW92ZV93YXRjaCh3YXRjaCwgZGV2KTsKLQkJdXAoJmRldi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAl9Ci0JdXAoJmlub2RlLT5pbm90aWZ5X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2lub2RlX2lzX2RlYWQpOwogCkBAIC02NzAsMTAgKzczNSwxMCBAQAogCWludCByZXQgPSAwOwogCiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPndxLCB3YWl0KTsKLQlkb3duKCZkZXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPmV2ZW50cykpCiAJCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0JdXAoJmRldi0+c2VtKTsKKwltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTY5NSw5ICs3NjAsOSBAQAogCiAJCXByZXBhcmVfdG9fd2FpdCgmZGV2LT53cSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKLQkJZG93bigmZGV2LT5zZW0pOworCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAkJZXZlbnRzID0gIWxpc3RfZW1wdHkoJmRldi0+ZXZlbnRzKTsKLQkJdXAoJmRldi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAkJaWYgKGV2ZW50cykgewogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwpAQCAtNzIwLDcgKzc4NSw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWRvd24oJmRldi0+c2VtKTsKKwltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVudDsKIApAQCAtNzUwLDcgKzgxNSw3IEBACiAKIAkJcmVtb3ZlX2tldmVudChkZXYsIGtldmVudCk7CiAJfQotCXVwKCZkZXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03NjMsMzcgKzgyOCwzNyBAQAogCSAqIERlc3Ryb3kgYWxsIG9mIHRoZSB3YXRjaGVzIG9uIHRoaXMgZGV2aWNlLiAgVW5mb3J0dW5hdGVseSwgbm90IHZlcnkKIAkgKiBwcmV0dHkuICBXZSBjYW5ub3QgZG8gYSBzaW1wbGUgaXRlcmF0aW9uIG92ZXIgdGhlIGxpc3QsIGJlY2F1c2Ugd2UKIAkgKiBkbyBub3Qga25vdyB0aGUgaW5vZGUgdW50aWwgd2UgaXRlcmF0ZSB0byB0aGUgd2F0Y2guICBCdXQgd2UgbmVlZCB0bwotCSAqIGhvbGQgaW5vZGUtPmlub3RpZnlfc2VtIGJlZm9yZSBkZXYtPnNlbS4gIFRoZSBmb2xsb3dpbmcgd29ya3MuCisJICogaG9sZCBpbm9kZS0+aW5vdGlmeV9tdXRleCBiZWZvcmUgZGV2LT5tdXRleC4gIFRoZSBmb2xsb3dpbmcgd29ya3MuCiAJICovCiAJd2hpbGUgKDEpIHsKIAkJc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoOwogCQlzdHJ1Y3QgbGlzdF9oZWFkICp3YXRjaGVzOwogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JCWRvd24oJmRldi0+c2VtKTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJCXdhdGNoZXMgPSAmZGV2LT53YXRjaGVzOwogCQlpZiAobGlzdF9lbXB0eSh3YXRjaGVzKSkgewotCQkJdXAoJmRldi0+c2VtKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAJCQlicmVhazsKIAkJfQogCQl3YXRjaCA9IGxpc3RfZW50cnkod2F0Y2hlcy0+bmV4dCwgc3RydWN0IGlub3RpZnlfd2F0Y2gsIGRfbGlzdCk7CiAJCWdldF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKLQkJdXAoJmRldi0+c2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAogCQlpbm9kZSA9IHdhdGNoLT5pbm9kZTsKLQkJZG93bigmaW5vZGUtPmlub3RpZnlfc2VtKTsKLQkJZG93bigmZGV2LT5zZW0pOworCQltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CisJCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGRldik7Ci0JCXVwKCZkZXYtPnNlbSk7Ci0JCXVwKCZpbm9kZS0+aW5vdGlmeV9zZW0pOworCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCQltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKIAkJcHV0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwogCX0KIAogCS8qIGRlc3Ryb3kgYWxsIG9mIHRoZSBldmVudHMgb24gdGhpcyBkZXZpY2UgKi8KLQlkb3duKCZkZXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXYtPmV2ZW50cykpCiAJCWlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoZGV2KTsKLQl1cCgmZGV2LT5zZW0pOworCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CiAKIAkvKiBmcmVlIHRoaXMgZGV2aWNlOiB0aGUgcHV0IG1hdGNoaW5nIHRoZSBnZXQgaW4gaW5vdGlmeV9pbml0KCkgKi8KIAlwdXRfaW5vdGlmeV9kZXYoZGV2KTsKQEAgLTgxMSwyNiArODc2LDI2IEBACiAJc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQlkb3duKCZkZXYtPnNlbSk7CisJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJd2F0Y2ggPSBpZHJfZmluZCgmZGV2LT5pZHIsIHdkKTsKIAlpZiAodW5saWtlbHkoIXdhdGNoKSkgewotCQl1cCgmZGV2LT5zZW0pOworCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZ2V0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwogCWlub2RlID0gd2F0Y2gtPmlub2RlOwotCXVwKCZkZXYtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKIAotCWRvd24oJmlub2RlLT5pbm90aWZ5X3NlbSk7Ci0JZG93bigmZGV2LT5zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAogCS8qIG1ha2Ugc3VyZSB0aGF0IHdlIGRpZCBub3QgcmFjZSAqLwogCXdhdGNoID0gaWRyX2ZpbmQoJmRldi0+aWRyLCB3ZCk7CiAJaWYgKGxpa2VseSh3YXRjaCkpCiAJCXJlbW92ZV93YXRjaCh3YXRjaCwgZGV2KTsKIAotCXVwKCZkZXYtPnNlbSk7Ci0JdXAoJmlub2RlLT5pbm90aWZ5X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKIAlwdXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7CiAKIAlyZXR1cm4gMDsKQEAgLTkwNSw3ICs5NzAsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmV2ZW50cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+d2F0Y2hlcyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53cSk7Ci0Jc2VtYV9pbml0KCZkZXYtPnNlbSwgMSk7CisJbXV0ZXhfaW5pdCgmZGV2LT5tdXRleCk7CiAJZGV2LT5ldmVudF9jb3VudCA9IDA7CiAJZGV2LT5xdWV1ZV9zaXplID0gMDsKIAlkZXYtPm1heF9ldmVudHMgPSBpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzOwpAQCAtOTYwLDggKzEwMjUsOCBAQAogCWlub2RlID0gbmQuZGVudHJ5LT5kX2lub2RlOwogCWRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAotCWRvd24oJmlub2RlLT5pbm90aWZ5X3NlbSk7Ci0JZG93bigmZGV2LT5zZW0pOworCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAogCWlmIChtYXNrICYgSU5fTUFTS19BREQpCiAJCW1hc2tfYWRkID0gMTsKQEAgLTk5MywxMyArMTA1OCwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoIWlub3RpZnlfaW5vZGVfd2F0Y2hlZChpbm9kZSkpCisJCXNldF9kZW50cnlfY2hpbGRfZmxhZ3MoaW5vZGUsIDEpOworCiAJLyogQWRkIHRoZSB3YXRjaCB0byB0aGUgZGV2aWNlJ3MgYW5kIHRoZSBpbm9kZSdzIGxpc3QgKi8KIAlsaXN0X2FkZCgmd2F0Y2gtPmRfbGlzdCwgJmRldi0+d2F0Y2hlcyk7CiAJbGlzdF9hZGQoJndhdGNoLT5pX2xpc3QsICZpbm9kZS0+aW5vdGlmeV93YXRjaGVzKTsKIAlyZXQgPSB3YXRjaC0+d2Q7CiBvdXQ6Ci0JdXAoJmRldi0+c2VtKTsKLQl1cCgmaW5vZGUtPmlub3RpZnlfc2VtKTsKKwltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwogCXBhdGhfcmVsZWFzZSgmbmQpOwogZnB1dF9hbmRfb3V0OgogCWZwdXRfbGlnaHQoZmlscCwgZnB1dF9uZWVkZWQpOwpAQCAtMTA2NSw3ICsxMTMzLDYgQEAKIAlpbm90aWZ5X21heF91c2VyX3dhdGNoZXMgPSA4MTkyOwogCiAJYXRvbWljX3NldCgmaW5vdGlmeV9jb29raWUsIDApOwotCWF0b21pY19zZXQoJmlub3RpZnlfd2F0Y2hlcywgMCk7CiAKIAl3YXRjaF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaW5vdGlmeV93YXRjaF9jYWNoZSIsCiAJCQkJCSBzaXplb2Yoc3RydWN0IGlub3RpZnlfd2F0Y2gpLApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaW5vZGUuYyBiL2ZzL2lzb2ZzL2lub2RlLmMKaW5kZXggMjk4ZjA4Yi4uNzBhZGJiOSAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaW5vZGUuYworKysgYi9mcy9pc29mcy9pbm9kZS5jCkBAIC04Nyw3ICs4Nyw4IEBACiB7CiAJaXNvZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlzb2ZzX2lub2RlX2NhY2hlIiwKIAkJCQkJICAgICBzaXplb2Yoc3RydWN0IGlzb19pbm9kZV9pbmZvKSwKLQkJCQkJICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgICAgIGluaXRfb25jZSwgTlVMTCk7CiAJaWYgKGlzb2ZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lzb2ZzLmggYi9mcy9pc29mcy9pc29mcy5oCmluZGV4IDM4Yzc1MTUuLjQzOWExOWIgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lzb2ZzLmgKKysrIGIvZnMvaXNvZnMvaXNvZnMuaApAQCAtMTc4LDE1ICsxNzgsMyBAQAogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXNvZnNfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBpc29mc19zeW1saW5rX2FvcHM7CiBleHRlcm4gc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGlzb2ZzX2V4cG9ydF9vcHM7Ci0KLS8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSB1c2VkIHRvIGNoZWNrIGZvciBtZW1vcnkgbGVha3MuICovCi0jaWZkZWYgTEVBS19DSEVDSwotI2RlZmluZSBmcmVlX3MgbGVha19jaGVja19mcmVlX3MKLSNkZWZpbmUgbWFsbG9jIGxlYWtfY2hlY2tfbWFsbG9jCi0jZGVmaW5lIHNiX2JyZWFkIGxlYWtfY2hlY2tfYnJlYWQKLSNkZWZpbmUgYnJlbHNlIGxlYWtfY2hlY2tfYnJlbHNlCi1leHRlcm4gdm9pZCAqIGxlYWtfY2hlY2tfbWFsbG9jKHVuc2lnbmVkIGludCBzaXplKTsKLWV4dGVybiB2b2lkIGxlYWtfY2hlY2tfZnJlZV9zKHZvaWQgKiBvYmosIGludCBzaXplKTsKLWV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBsZWFrX2NoZWNrX2JyZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBibG9jayk7Ci1leHRlcm4gdm9pZCBsZWFrX2NoZWNrX2JyZWxzZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCk7Ci0jZW5kaWYgLyogTEVBS19DSEVDSyAqLwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvam9saWV0LmMgYi9mcy9pc29mcy9qb2xpZXQuYwppbmRleCAyOTMxZGU3Li44MWE5MGUxIDEwMDY0NAotLS0gYS9mcy9pc29mcy9qb2xpZXQuYworKysgYi9mcy9pc29mcy9qb2xpZXQuYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgImlzb2ZzLmgiCiAKIC8qCi0gKiBDb252ZXJ0IFVuaWNvZGUgMTYgdG8gVVRGOCBvciBBU0NJSS4KKyAqIENvbnZlcnQgVW5pY29kZSAxNiB0byBVVEYtOCBvciBBU0NJSS4KICAqLwogc3RhdGljIGludAogdW5pMTZfdG9feDgodW5zaWduZWQgY2hhciAqYXNjaWksIHUxNiAqdW5pLCBpbnQgbGVuLCBzdHJ1Y3QgbmxzX3RhYmxlICpubHMpCmRpZmYgLS1naXQgYS9mcy9qYmQvY2hlY2twb2ludC5jIGIvZnMvamJkL2NoZWNrcG9pbnQuYwppbmRleCA1NDNlZDU0Li4zZjUxMDJiIDEwMDY0NAotLS0gYS9mcy9qYmQvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZC9jaGVja3BvaW50LmMKQEAgLTg1LDcgKzg1LDcgQEAKIAkJaWYgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKRlNfQUJPUlQpCiAJCQlyZXR1cm47CiAJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwotCQlkb3duKCZqb3VybmFsLT5qX2NoZWNrcG9pbnRfc2VtKTsKKwkJbXV0ZXhfbG9jaygmam91cm5hbC0+al9jaGVja3BvaW50X211dGV4KTsKIAogCQkvKgogCQkgKiBUZXN0IGFnYWluLCBhbm90aGVyIHByb2Nlc3MgbWF5IGhhdmUgY2hlY2twb2ludGVkIHdoaWxlIHdlCkBAIC05OCw3ICs5OCw3IEBACiAJCQlsb2dfZG9fY2hlY2twb2ludChqb3VybmFsKTsKIAkJCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAkJfQotCQl1cCgmam91cm5hbC0+al9jaGVja3BvaW50X3NlbSk7CisJCW11dGV4X3VubG9jaygmam91cm5hbC0+al9jaGVja3BvaW50X211dGV4KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IGU0YjUxNmEuLjdmOTZiNWMgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtMzMsOSArMzMsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAKIEVYUE9SVF9TWU1CT0woam91cm5hbF9zdGFydCk7CiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfcmVzdGFydCk7CkBAIC0xMTEsMTggKzExMywxNSBAQAogCiBzdGF0aWMgaW50IGtqb3VybmFsZCh2b2lkICphcmcpCiB7Ci0Jam91cm5hbF90ICpqb3VybmFsID0gKGpvdXJuYWxfdCAqKSBhcmc7CisJam91cm5hbF90ICpqb3VybmFsID0gYXJnOwogCXRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCi0JZGFlbW9uaXplKCJram91cm5hbGQiKTsKLQotCS8qIFNldCB1cCBhbiBpbnRlcnZhbCB0aW1lciB3aGljaCBjYW4gYmUgdXNlZCB0byB0cmlnZ2VyIGEKLSAgICAgICAgICAgY29tbWl0IHdha2V1cCBhZnRlciB0aGUgY29tbWl0IGludGVydmFsIGV4cGlyZXMgKi8KLQlpbml0X3RpbWVyKCZ0aW1lcik7Ci0JdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjdXJyZW50OwotCXRpbWVyLmZ1bmN0aW9uID0gY29tbWl0X3RpbWVvdXQ7Ci0Jam91cm5hbC0+al9jb21taXRfdGltZXIgPSAmdGltZXI7CisJLyoKKwkgKiBTZXQgdXAgYW4gaW50ZXJ2YWwgdGltZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gdHJpZ2dlciBhIGNvbW1pdCB3YWtldXAKKwkgKiBhZnRlciB0aGUgY29tbWl0IGludGVydmFsIGV4cGlyZXMKKwkgKi8KKwlzZXR1cF90aW1lcigmam91cm5hbC0+al9jb21taXRfdGltZXIsIGNvbW1pdF90aW1lb3V0LAorCQkJKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7CiAKIAkvKiBSZWNvcmQgdGhhdCB0aGUgam91cm5hbCB0aHJlYWQgaXMgcnVubmluZyAqLwogCWpvdXJuYWwtPmpfdGFzayA9IGN1cnJlbnQ7CkBAIC0xNDYsNyArMTQ1LDcgQEAKIAlpZiAoam91cm5hbC0+al9jb21taXRfc2VxdWVuY2UgIT0gam91cm5hbC0+al9jb21taXRfcmVxdWVzdCkgewogCQlqYmRfZGVidWcoMSwgIk9LLCByZXF1ZXN0cyBkaWZmZXJcbiIpOwogCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKLQkJZGVsX3RpbWVyX3N5bmMoam91cm5hbC0+al9jb21taXRfdGltZXIpOworCQlkZWxfdGltZXJfc3luYygmam91cm5hbC0+al9jb21taXRfdGltZXIpOwogCQlqb3VybmFsX2NvbW1pdF90cmFuc2FjdGlvbihqb3VybmFsKTsKIAkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlnb3RvIGxvb3A7CkBAIC0yMDMsNyArMjAyLDcgQEAKIAogZW5kX2xvb3A6CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7Ci0JZGVsX3RpbWVyX3N5bmMoam91cm5hbC0+al9jb21taXRfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZqb3VybmFsLT5qX2NvbW1pdF90aW1lcik7CiAJam91cm5hbC0+al90YXNrID0gTlVMTDsKIAl3YWtlX3VwKCZqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQpOwogCWpiZF9kZWJ1ZygxLCAiSm91cm5hbCB0aHJlYWQgZXhpdGluZy5cbiIpOwpAQCAtMjEyLDcgKzIxMSw3IEBACiAKIHN0YXRpYyB2b2lkIGpvdXJuYWxfc3RhcnRfdGhyZWFkKGpvdXJuYWxfdCAqam91cm5hbCkKIHsKLQlrZXJuZWxfdGhyZWFkKGtqb3VybmFsZCwgam91cm5hbCwgQ0xPTkVfVk18Q0xPTkVfRlN8Q0xPTkVfRklMRVMpOworCWt0aHJlYWRfcnVuKGtqb3VybmFsZCwgam91cm5hbCwgImtqb3VybmFsZCIpOwogCXdhaXRfZXZlbnQoam91cm5hbC0+al93YWl0X2RvbmVfY29tbWl0LCBqb3VybmFsLT5qX3Rhc2sgIT0gMCk7CiB9CiAKQEAgLTY1OSw4ICs2NTgsOCBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmpvdXJuYWwtPmpfd2FpdF9jaGVja3BvaW50KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZqb3VybmFsLT5qX3dhaXRfY29tbWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZqb3VybmFsLT5qX3dhaXRfdXBkYXRlcyk7Ci0JaW5pdF9NVVRFWCgmam91cm5hbC0+al9iYXJyaWVyKTsKLQlpbml0X01VVEVYKCZqb3VybmFsLT5qX2NoZWNrcG9pbnRfc2VtKTsKKwltdXRleF9pbml0KCZqb3VybmFsLT5qX2JhcnJpZXIpOworCW11dGV4X2luaXQoJmpvdXJuYWwtPmpfY2hlY2twb2ludF9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmpvdXJuYWwtPmpfcmV2b2tlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9qYmQvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCmluZGV4IGNhOTE3OTcuLmFkYTMxZmEgMTAwNjQ0Ci0tLSBhL2ZzL2piZC90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCkBAIC01Myw4ICs1Myw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKIAogCS8qIFNldCB1cCB0aGUgY29tbWl0IHRpbWVyIGZvciB0aGUgbmV3IHRyYW5zYWN0aW9uLiAqLwotCWpvdXJuYWwtPmpfY29tbWl0X3RpbWVyLT5leHBpcmVzID0gdHJhbnNhY3Rpb24tPnRfZXhwaXJlczsKLQlhZGRfdGltZXIoam91cm5hbC0+al9jb21taXRfdGltZXIpOworCWpvdXJuYWwtPmpfY29tbWl0X3RpbWVyLmV4cGlyZXMgPSB0cmFuc2FjdGlvbi0+dF9leHBpcmVzOworCWFkZF90aW1lcigmam91cm5hbC0+al9jb21taXRfdGltZXIpOwogCiAJSl9BU1NFUlQoam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uID09IE5VTEwpOwogCWpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJICogdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VyaWFsaXNlIHNwZWNpYWwgam91cm5hbC1sb2NrZWQgb3BlcmF0aW9ucwogCSAqIHRvby4KIAkgKi8KLQlkb3duKCZqb3VybmFsLT5qX2JhcnJpZXIpOworCW11dGV4X2xvY2soJmpvdXJuYWwtPmpfYmFycmllcik7CiB9CiAKIC8qKgpAQCAtNDcwLDcgKzQ3MCw3IEBACiB7CiAJSl9BU1NFUlQoam91cm5hbC0+al9iYXJyaWVyX2NvdW50ICE9IDApOwogCi0JdXAoJmpvdXJuYWwtPmpfYmFycmllcik7CisJbXV0ZXhfdW5sb2NrKCZqb3VybmFsLT5qX2JhcnJpZXIpOwogCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAktLWpvdXJuYWwtPmpfYmFycmllcl9jb3VudDsKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMvaW5vZGUtdjIzLmMgYi9mcy9qZmZzL2lub2RlLXYyMy5jCmluZGV4IGZjMzg1NWEuLjVhNDUxOWUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMvaW5vZGUtdjIzLmMKKysrIGIvZnMvamZmcy9pbm9kZS12MjMuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlmbWMgPSBjLT5mbWM7CiAKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJub3RpZnlfY2hhbmdlKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCWRvd24oJmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfbG9jaygmZm1jLT5iaWdsb2NrKTsKIAogCWYgPSBqZmZzX2ZpbmRfZmlsZShjLCBpbm9kZS0+aV9pbm8pOwogCkBAIC0yMTEsNyArMjExLDcgQEAKIAkJcHJpbnRrKCJqZmZzX3NldGF0dHIoKTogSW52YWxpZCBpbm9kZSBudW1iZXI6ICVsdVxuIiwKIAkJICAgICAgIGlub2RlLT5pX2lubyk7CiAJCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm5vdGlmeV9jaGFuZ2UoKTogdXAgYmlnbG9ja1xuIikpOwotCQl1cCgmZm1jLT5iaWdsb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmbWMtPmJpZ2xvY2spOwogCQlyZXMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9KTsKQEAgLTIzMiw3ICsyMzIsNyBAQAogCWlmICghKG5ld19ub2RlID0gamZmc19hbGxvY19ub2RlKCkpKSB7CiAJCUQocHJpbnRrKCJqZmZzX3NldGF0dHIoKTogQWxsb2NhdGlvbiBmYWlsZWQhXG4iKSk7CiAJCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm5vdGlmeV9jaGFuZ2UoKTogdXAgYmlnbG9ja1xuIikpOwotCQl1cCgmZm1jLT5iaWdsb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmbWMtPmJpZ2xvY2spOwogCQlyZXMgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMTksNyArMzE5LDcgQEAKIAkJRChwcmludGsoImpmZnNfbm90aWZ5X2NoYW5nZSgpOiBUaGUgd3JpdGUgZmFpbGVkIVxuIikpOwogCQlqZmZzX2ZyZWVfbm9kZShuZXdfbm9kZSk7CiAJCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm5fYygpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCXVwKCZjLT5mbWMtPmJpZ2xvY2spOworCQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzI3LDcgKzMyNyw3IEBACiAKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJuX2MoKTogdXAgYmlnbG9ja1xuIikpOwotCXVwKCZjLT5mbWMtPmJpZ2xvY2spOworCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlczsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCQlnb3RvIGpmZnNfcmVuYW1lX2VuZDsKIAl9CiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVuYW1lKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCWRvd24oJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAkvKiBDcmVhdGUgYSBub2RlIGFuZCBpbml0aWFsaXplIGFzIG11Y2ggYXMgbmVlZGVkLiAgKi8KIAlyZXN1bHQgPSAtRU5PTUVNOwogCWlmICghKG5vZGUgPSBqZmZzX2FsbG9jX25vZGUoKSkpIHsKQEAgLTU1NSw3ICs1NTUsNyBAQAogCiBqZmZzX3JlbmFtZV9lbmQ6CiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVuYW1lKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXN1bHQ7CiB9IC8qIGpmZnNfcmVuYW1lKCkgICovCkBAIC01NzQsMTQgKzU3NCwxNCBAQAogCWludCBkZGlubzsKIAlsb2NrX2tlcm5lbCgpOwogCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInJlYWRkaXIoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JZG93bigmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCiAJRDIocHJpbnRrKCJqZmZzX3JlYWRkaXIoKTogaW5vZGU6IDB4JXAsIGZpbHA6IDB4JXBcbiIsIGlub2RlLCBmaWxwKSk7CiAJaWYgKGZpbHAtPmZfcG9zID09IDApIHsKIAkJRDMocHJpbnRrKCJqZmZzX3JlYWRkaXIoKTogXCIuXCIgJWx1XG4iLCBpbm9kZS0+aV9pbm8pKTsKIAkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLiIsIDEsIGZpbHAtPmZfcG9zLCBpbm9kZS0+aV9pbm8sIERUX0RJUikgPCAwKSB7CiAJCQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZWFkZGlyKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQkJCXVwKCZjLT5mbWMtPmJpZ2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTU5OCw3ICs1OTgsNyBAQAogCQlEMyhwcmludGsoImpmZnNfcmVhZGRpcigpOiBcIi4uXCIgJXVcbiIsIGRkaW5vKSk7CiAJCWlmIChmaWxsZGlyKGRpcmVudCwgIi4uIiwgMiwgZmlscC0+Zl9wb3MsIGRkaW5vLCBEVF9ESVIpIDwgMCkgewogCQkJRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVhZGRpcigpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwkJCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC02MTcsNyArNjE3LDcgQEAKIAkJaWYgKGZpbGxkaXIoZGlyZW50LCBmLT5uYW1lLCBmLT5uc2l6ZSwKIAkJCSAgICBmaWxwLT5mX3BvcyAsIGYtPmlubywgRFRfVU5LTk9XTikgPCAwKSB7CiAJCSAgICAgICAgRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVhZGRpcigpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwkJCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC02MjcsNyArNjI3LDcgQEAKIAkJfSB3aGlsZShmICYmIGYtPmRlbGV0ZWQpOwogCX0KIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZWFkZGlyKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBmaWxwLT5mX3BvczsKIH0gLyogamZmc19yZWFkZGlyKCkgICovCkBAIC02NjAsNyArNjYwLDcgQEAKIAl9KTsKIAogCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImxvb2t1cCgpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQlkb3duKCZjLT5mbWMtPmJpZ2xvY2spOworCW11dGV4X2xvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAKIAlyID0gLUVOQU1FVE9PTE9ORzsKIAlpZiAobGVuID4gSkZGU19NQVhfTkFNRV9MRU4pIHsKQEAgLTY4MywzMSArNjgzLDMxIEBACiAKIAlpZiAoKGxlbiA9PSAxKSAmJiAobmFtZVswXSA9PSAnLicpKSB7CiAJCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImxvb2t1cCgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCXVwKCZjLT5mbWMtPmJpZ2xvY2spOworCQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAJCWlmICghKGlub2RlID0gaWdldChkaXItPmlfc2IsIGQtPmlubykpKSB7CiAJCQlEKHByaW50aygiamZmc19sb29rdXAoKTogLiBpZ2V0KCkgPT0+IE5VTExcbiIpKTsKIAkJCWdvdG8gamZmc19sb29rdXBfZW5kX25vX2JpZ2xvY2s7CiAJCX0KIAkJRDMocHJpbnRrIChLRVJOX05PVElDRSAibG9va3VwKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCQlkb3duKCZjLT5mbWMtPmJpZ2xvY2spOworCQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCX0gZWxzZSBpZiAoKGxlbiA9PSAyKSAmJiAobmFtZVswXSA9PSAnLicpICYmIChuYW1lWzFdID09ICcuJykpIHsKIAkgICAgICAgIEQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImxvb2t1cCgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCXVwKCZjLT5mbWMtPmJpZ2xvY2spOworCQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAgCQlpZiAoIShpbm9kZSA9IGlnZXQoZGlyLT5pX3NiLCBkLT5waW5vKSkpIHsKIAkJCUQocHJpbnRrKCJqZmZzX2xvb2t1cCgpOiAuLiBpZ2V0KCkgPT0+IE5VTExcbiIpKTsKIAkJCWdvdG8gamZmc19sb29rdXBfZW5kX25vX2JpZ2xvY2s7CiAJCX0KIAkJRDMocHJpbnRrIChLRVJOX05PVElDRSAibG9va3VwKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCQlkb3duKCZjLT5mbWMtPmJpZ2xvY2spOworCQltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCX0gZWxzZSBpZiAoKGYgPSBqZmZzX2ZpbmRfY2hpbGQoZCwgbmFtZSwgbGVuKSkpIHsKIAkgICAgICAgIEQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImxvb2t1cCgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JCXVwKCZjLT5mbWMtPmJpZ2xvY2spOworCQltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAJCWlmICghKGlub2RlID0gaWdldChkaXItPmlfc2IsIGYtPmlubykpKSB7CiAJCQlEKHByaW50aygiamZmc19sb29rdXAoKTogaWdldCgpID09PiBOVUxMXG4iKSk7CiAJCQlnb3RvIGpmZnNfbG9va3VwX2VuZF9ub19iaWdsb2NrOwogCQl9CiAJCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImxvb2t1cCgpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQkJZG93bigmYy0+Zm1jLT5iaWdsb2NrKTsKKwkJbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAl9IGVsc2UgewogCQlEMyhwcmludGsoImpmZnNfbG9va3VwKCk6IENvdWxkbid0IGZpbmQgdGhlIGZpbGUuICIKIAkJCSAgImYgPSAweCVwLCBuYW1lID0gXCIlc1wiLCBkID0gMHglcCwgZC0+aW5vID0gJXVcbiIsCkBAIC03MTcsMTMgKzcxNywxMyBAQAogCiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAibG9va3VwKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBOVUxMOwogCiBqZmZzX2xvb2t1cF9lbmQ6CiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAibG9va3VwKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAKIGpmZnNfbG9va3VwX2VuZF9ub19iaWdsb2NrOgogCXVubG9ja19rZXJuZWwoKTsKQEAgLTc1Myw3ICs3NTMsNyBAQAogCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwogCiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAicmVhZHBhZ2UoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JZG93bigmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCiAJcmVhZF9sZW4gPSAwOwogCXJlc3VsdCA9IDA7CkBAIC03ODIsNyArNzgyLDcgQEAKIAlrdW5tYXAocGFnZSk7CiAKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZWFkcGFnZSgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JdXAoJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCiAJaWYgKHJlc3VsdCkgewogCSAgICAgICAgU2V0UGFnZUVycm9yKHBhZ2UpOwpAQCAtODM5LDcgKzgzOSw3IEBACiAKIAljID0gZGlyX2YtPmM7CiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAibWtkaXIoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JZG93bigmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCiAJZGlyX21vZGUgPSBTX0lGRElSIHwgKG1vZGUgJiAoU19JUldYVUdPfFNfSVNWVFgpCiAJCQkgICAgICAmIH5jdXJyZW50LT5mcy0+dW1hc2spOwpAQCAtOTA2LDcgKzkwNiw3IEBACiAJcmVzdWx0ID0gMDsKIGpmZnNfbWtkaXJfZW5kOgogCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm1rZGlyKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXN1bHQ7CiB9IC8qIGpmZnNfbWtkaXIoKSAgKi8KQEAgLTkyMSwxMCArOTIxLDEwIEBACiAJRDMocHJpbnRrKCIqKipqZmZzX3JtZGlyKClcbiIpKTsKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJybWRpcigpOiBkb3duIGJpZ2xvY2tcbiIpKTsKIAlsb2NrX2tlcm5lbCgpOwotCWRvd24oJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAlyZXQgPSBqZmZzX3JlbW92ZShkaXIsIGRlbnRyeSwgU19JRkRJUik7CiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAicm1kaXIoKTogdXAgYmlnbG9ja1xuIikpOwotCXVwKCZjLT5mbWMtPmJpZ2xvY2spOworCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk0MCwxMCArOTQwLDEwIEBACiAJbG9ja19rZXJuZWwoKTsKIAlEMyhwcmludGsoIioqKmpmZnNfdW5saW5rKClcbiIpKTsKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJ1bmxpbmsoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JZG93bigmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCXJldCA9IGpmZnNfcmVtb3ZlKGRpciwgZGVudHJ5LCAwKTsKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJ1bmxpbmsoKTogdXAgYmlnbG9ja1xuIikpOwotCXVwKCZjLT5mbWMtPmJpZ2xvY2spOworCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwODYsNyArMTA4Niw3IEBACiAJYyA9IGRpcl9mLT5jOwogCiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAibWtub2QoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JZG93bigmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCiAJLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IG5vZGUuICAqLwogCWlmICghKG5vZGUgPSBqZmZzX2FsbG9jX25vZGUoKSkpIHsKQEAgLTExNTIsNyArMTE1Miw3IEBACiAKIGpmZnNfbWtub2RfZW5kOgogCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgIm1rbm9kKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXN1bHQ7CiB9IC8qIGpmZnNfbWtub2QoKSAgKi8KQEAgLTEyMDMsNyArMTIwMyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJzeW1saW5rKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCWRvd24oJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAogCW5vZGUtPmRhdGFfb2Zmc2V0ID0gMDsKIAlub2RlLT5yZW1vdmVkX3NpemUgPSAwOwpAQCAtMTI1Myw3ICsxMjUzLDcgQEAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogIGpmZnNfc3ltbGlua19lbmQ6CiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAic3ltbGluaygpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JdXAoJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfSAvKiBqZmZzX3N5bWxpbmsoKSAgKi8KQEAgLTEzMDYsNyArMTMwNiw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJjcmVhdGUoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JZG93bigmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCiAJbm9kZS0+ZGF0YV9vZmZzZXQgPSAwOwogCW5vZGUtPnJlbW92ZWRfc2l6ZSA9IDA7CkBAIC0xMzU5LDcgKzEzNTksNyBAQAogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAgamZmc19jcmVhdGVfZW5kOgogCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImNyZWF0ZSgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JdXAoJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfSAvKiBqZmZzX2NyZWF0ZSgpICAqLwpAQCAtMTQyMyw3ICsxNDIzLDcgQEAKIAl0aGlzY291bnQgPSBtaW4oYy0+Zm1jLT5tYXhfY2h1bmtfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgamZmc19yYXdfaW5vZGUpLCBjb3VudCk7CiAKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJmaWxlX3dyaXRlKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCWRvd24oJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAogCS8qIFVyZ2guIFBPU0lYIHNheXMgd2UgY2FuIGRvIHNob3J0IHdyaXRlcyBpZiB3ZSBmZWVsIGxpa2UgaXQuIAogCSAqIEluIHByYWN0aWNlLCB3ZSBjYW4ndC4gTm90aGluZyB3aWxsIGNvcGUuIFNvIHdlIGxvb3AgdW50aWwKQEAgLTE1MTEsNyArMTUxMSw3IEBACiAJfQogIG91dDoKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJmaWxlX3dyaXRlKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiAKIAkvKiBGaXggdGhpbmdzIGluIHRoZSByZWFsIGlub2RlLiAgKi8KIAlpZiAocG9zID4gaW5vZGUtPmlfc2l6ZSkgewpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImlvY3RsKCk6IGRvd24gYmlnbG9ja1xuIikpOwotCWRvd24oJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfbG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBKRkZTX1BSSU5UX0hBU0g6CkBAIC0xNjA5LDcgKzE2MDksNyBAQAogCQlyZXQgPSAtRU5PVFRZOwogCX0KIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJpb2N0bCgpOiB1cCBiaWdsb2NrXG4iKSk7Ci0JdXAoJmMtPmZtYy0+YmlnbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCXJldHVybiByZXQ7CiB9IC8qIGpmZnNfaW9jdGwoKSAgKi8KIApAQCAtMTY4NSwxMiArMTY4NSwxMiBAQAogCX0KIAljID0gKHN0cnVjdCBqZmZzX2NvbnRyb2wgKilpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgInJlYWRfaW5vZGUoKTogZG93biBiaWdsb2NrXG4iKSk7Ci0JZG93bigmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF9sb2NrKCZjLT5mbWMtPmJpZ2xvY2spOwogCWlmICghKGYgPSBqZmZzX2ZpbmRfZmlsZShjLCBpbm9kZS0+aV9pbm8pKSkgewogCQlEKHByaW50aygiamZmc19yZWFkX2lub2RlKCk6IE5vIHN1Y2ggaW5vZGUgKCVsdSkuXG4iLAogCQkJIGlub2RlLT5pX2lubykpOwogCQlEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZWFkX2lub2RlKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQkJdXAoJmMtPmZtYy0+YmlnbG9jayk7CisJCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAkJcmV0dXJuOwogCX0KIAlpbm9kZS0+dS5nZW5lcmljX2lwID0gKHZvaWQgKilmOwpAQCAtMTczMiw3ICsxNzMyLDcgQEAKIAl9CiAKIAlEMyhwcmludGsgKEtFUk5fTk9USUNFICJyZWFkX2lub2RlKCk6IHVwIGJpZ2xvY2tcbiIpKTsKLQl1cCgmYy0+Zm1jLT5iaWdsb2NrKTsKKwltdXRleF91bmxvY2soJmMtPmZtYy0+YmlnbG9jayk7CiB9CiAKIApAQCAtMTgxMiwxNSArMTgxMiwxNyBAQAogCX0KICNlbmRpZgogCWZtX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImpmZnNfZm0iLCBzaXplb2Yoc3RydWN0IGpmZnNfZm0pLAotCQkJCSAgICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5ULCAKLQkJCQkgICAgIE5VTEwsIE5VTEwpOworCQkgICAgICAgMCwKKwkJICAgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX01FTV9TUFJFQUQsCisJCSAgICAgICBOVUxMLCBOVUxMKTsKIAlpZiAoIWZtX2NhY2hlKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCW5vZGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiamZmc19ub2RlIixzaXplb2Yoc3RydWN0IGpmZnNfbm9kZSksCi0JCQkJICAgICAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVCwgCi0JCQkJICAgICAgIE5VTEwsIE5VTEwpOworCQkgICAgICAgMCwKKwkJICAgICAgIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX01FTV9TUFJFQUQsCisJCSAgICAgICBOVUxMLCBOVUxMKTsKIAlpZiAoIW5vZGVfY2FjaGUpIHsKIAkJa21lbV9jYWNoZV9kZXN0cm95KGZtX2NhY2hlKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9qZmZzL2ludHJlcC5jIGIvZnMvamZmcy9pbnRyZXAuYwppbmRleCBjZTdiNTRiLi4wZWYyMDdkIDEwMDY0NAotLS0gYS9mcy9qZmZzL2ludHJlcC5jCisrKyBiL2ZzL2pmZnMvaW50cmVwLmMKQEAgLTYyLDcgKzYyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtMzQxNiw3ICszNDE2LDcgQEAKIAkJRDEocHJpbnRrIChLRVJOX05PVElDRSAiamZmc19nYXJiYWdlX2NvbGxlY3RfdGhyZWFkKCk6IGNvbGxlY3RpbmcuXG4iKSk7CiAKIAkJRDMocHJpbnRrIChLRVJOX05PVElDRSAiZ19jX3RocmVhZCgpOiBkb3duIGJpZ2xvY2tcbiIpKTsKLQkJZG93bigmZm1jLT5iaWdsb2NrKTsKKwkJbXV0ZXhfbG9jaygmZm1jLT5iaWdsb2NrKTsKIAkJCiAJCUQxKHByaW50aygiKioqamZmc19nYXJiYWdlX2NvbGxlY3RfdGhyZWFkKCk6IHJvdW5kICMldSwgIgogCQkJICAiZm1jLT5kaXJ0eV9zaXplID0gJXVcbiIsIGkrKywgZm1jLT5kaXJ0eV9zaXplKSk7CkBAIC0zNDQ3LDYgKzM0NDcsNiBAQAogCQkKIAlnY19lbmQ6CiAJCUQzKHByaW50ayAoS0VSTl9OT1RJQ0UgImdfY190aHJlYWQoKTogdXAgYmlnbG9ja1xuIikpOwotCQl1cCgmZm1jLT5iaWdsb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmbWMtPmJpZ2xvY2spOwogCX0gLyogZm9yICg7OykgKi8KIH0gLyogamZmc19nYXJiYWdlX2NvbGxlY3RfdGhyZWFkKCkgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmZnMvamZmc19mbS5jIGIvZnMvamZmcy9qZmZzX2ZtLmMKaW5kZXggNmRhMTNiMzAuLjdkOGNhMWEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMvamZmc19mbS5jCisrKyBiL2ZzL2pmZnMvamZmc19mbS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAlmbWMtPnRhaWwgPSBOVUxMOwogCWZtYy0+aGVhZF9leHRyYSA9IE5VTEw7CiAJZm1jLT50YWlsX2V4dHJhID0gTlVMTDsKLQlpbml0X01VVEVYKCZmbWMtPmJpZ2xvY2spOworCW11dGV4X2luaXQoJmZtYy0+YmlnbG9jayk7CiAJcmV0dXJuIGZtYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZmcy9qZmZzX2ZtLmggYi9mcy9qZmZzL2pmZnNfZm0uaAppbmRleCBmNjQxNTFlLi5jNzk0ZDkyIDEwMDY0NAotLS0gYS9mcy9qZmZzL2pmZnNfZm0uaAorKysgYi9mcy9qZmZzL2pmZnNfZm0uaApAQCAtMjAsMTAgKzIwLDExIEBACiAjaWZuZGVmIF9fTElOVVhfSkZGU19GTV9IX18KICNkZWZpbmUgX19MSU5VWF9KRkZTX0ZNX0hfXwogCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9qZmZzLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIFRoZSBhbGlnbm1lbnQgYmV0d2VlbiB0d28gbm9kZXMgaW4gdGhlIGZsYXNoIG1lbW9yeS4gICovCiAjZGVmaW5lIEpGRlNfQUxJR05fU0laRSA0CkBAIC05Nyw3ICs5OCw3IEBACiAJc3RydWN0IGpmZnNfZm0gKnRhaWw7CiAJc3RydWN0IGpmZnNfZm0gKmhlYWRfZXh0cmE7CiAJc3RydWN0IGpmZnNfZm0gKnRhaWxfZXh0cmE7Ci0Jc3RydWN0IHNlbWFwaG9yZSBiaWdsb2NrOworCXN0cnVjdCBtdXRleCBiaWdsb2NrOwogfTsKIAogLyogTm90aWNlIHRoZSB0d28gbWVtYmVycyBoZWFkX2V4dHJhIGFuZCB0YWlsX2V4dHJhIGluIHRoZSBqZmZzX2NvbnRyb2wKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL25vZGVsaXN0LmMgYi9mcy9qZmZzMi9ub2RlbGlzdC5jCmluZGV4IGI2MzVlMTYuLmQ0ZDBjNDEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL25vZGVsaXN0LmMKKysrIGIvZnMvamZmczIvbm9kZWxpc3QuYwpAQCAtNDA2LDcgKzQwNiw4IEBACiAJaW50IGVyciA9IDAsIHBvaW50ZWQgPSAwOwogCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCXVpbnQzMl90IGNyYywgb2ZzLCByZXRsZW4sIGxlbjsKKwl1aW50MzJfdCBjcmMsIG9mcywgbGVuOworCXNpemVfdCByZXRsZW47CiAKIAlCVUdfT04odG4tPmNzaXplID09IDApOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9yZWFkaW5vZGUuYyBiL2ZzL2pmZnMyL3JlYWRpbm9kZS5jCmluZGV4IDVmMDY1MmQuLmYxNjk1NjQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3JlYWRpbm9kZS5jCisrKyBiL2ZzL2pmZnMyL3JlYWRpbm9kZS5jCkBAIC0xMTIsNyArMTEyLDcgQEAKICAqIAkgICAgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW5saW5lIGludCByZWFkX2RpcmVudHJ5KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyZWYsCi0JCQkJc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkLCB1aW50MzJfdCByZWFkLCBzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKipmZHAsCisJCQkJc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkLCBzaXplX3QgcmVhZCwgc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICoqZmRwLAogCQkJCXVpbnQzMl90ICpsYXRlc3RfbWN0aW1lLCB1aW50MzJfdCAqbWN0aW1lX3ZlcikKIHsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvc2Nhbi5jIGIvZnMvamZmczIvc2Nhbi5jCmluZGV4IDNlNTFkZDEuLmNmNTViMjIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3NjYW4uYworKysgYi9mcy9qZmZzMi9zY2FuLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCQljLT5uZXh0YmxvY2stPmRpcnR5X3NpemUgPSAwOwogCX0KICNpZmRlZiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIKLQlpZiAoIWpmZnMyX2Nhbl9tYXJrX29ic29sZXRlKGMpICYmIGMtPm5leHRibG9jayAmJiAoYy0+bmV4dGJsb2NrLT5mcmVlX3NpemUgJSBjLT53YnVmX3BhZ2VzaXplKSkgeworCWlmICghamZmczJfY2FuX21hcmtfb2Jzb2xldGUoYykgJiYgYy0+d2J1Zl9wYWdlc2l6ZSAmJiBjLT5uZXh0YmxvY2sgJiYgKGMtPm5leHRibG9jay0+ZnJlZV9zaXplICUgYy0+d2J1Zl9wYWdlc2l6ZSkpIHsKIAkJLyogSWYgd2UncmUgZ29pbmcgdG8gc3RhcnQgd3JpdGluZyBpbnRvIGEgYmxvY2sgd2hpY2ggYWxyZWFkeQogCQkgICBjb250YWlucyBkYXRhLCBhbmQgdGhlIGVuZCBvZiB0aGUgZGF0YSBpc24ndCBwYWdlLWFsaWduZWQsCiAJCSAgIHNraXAgYSBsaXR0bGUgYW5kIGFsaWduIGl0LiAqLwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvc3VwZXIuYyBiL2ZzL2pmZnMyL3N1cGVyLmMKaW5kZXggOTM4ODM4MS4uZmZkOGU4NCAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VwZXIuYworKysgYi9mcy9qZmZzMi9zdXBlci5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAlzYi0+c19vcCA9ICZqZmZzMl9zdXBlcl9vcGVyYXRpb25zOwogCXNiLT5zX2ZsYWdzID0gZmxhZ3MgfCBNU19OT0FUSU1FOwogCi0JcmV0ID0gamZmczJfZG9fZmlsbF9zdXBlcihzYiwgZGF0YSwgKGZsYWdzJk1TX1ZFUkJPU0UpPzE6MCk7CisJcmV0ID0gamZmczJfZG9fZmlsbF9zdXBlcihzYiwgZGF0YSwgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7CiAKIAlpZiAocmV0KSB7CiAJCS8qIEZhaWx1cmUgY2FzZS4uLiAqLwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJfQogCiAJaWYgKGltYWpvcihuZC5kZW50cnktPmRfaW5vZGUpICE9IE1URF9CTE9DS19NQUpPUikgewotCQlpZiAoIShmbGFncyAmIE1TX1ZFUkJPU0UpKSAvKiBZZXMgSSBtZWFuIHRoaXMuIFN0cmFuZ2VseSAqLworCQlpZiAoIShmbGFncyAmIE1TX1NJTEVOVCkpCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkF0dGVtcHQgdG8gbW91bnQgbm9uLU1URCBkZXZpY2UgXCIlc1wiIGFzIEpGRlMyXG4iLAogCQkJICAgICAgIGRldl9uYW1lKTsKIAkJZ290byBvdXQ7CkBAIC0zMzEsNyArMzMxLDggQEAKIAogCWpmZnMyX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJqZmZzMl9pIiwKIAkJCQkJICAgICBzaXplb2Yoc3RydWN0IGpmZnMyX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgamZmczJfaV9pbml0X29uY2UsIE5VTEwpOwogCWlmICghamZmczJfaW5vZGVfY2FjaGVwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSkZGUzIgZXJyb3I6IEZhaWxlZCB0byBpbml0aWFsaXNlIGlub2RlIGNhY2hlXG4iKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9NYWtlZmlsZSBiL2ZzL2pmcy9NYWtlZmlsZQppbmRleCA2ZjFlMGU5Li4zYWRiNjM5IDEwMDY0NAotLS0gYS9mcy9qZnMvTWFrZWZpbGUKKysrIGIvZnMvamZzL01ha2VmaWxlCkBAIC04LDcgKzgsOCBAQAogCSAgICBqZnNfeHRyZWUubyBqZnNfaW1hcC5vIGpmc19kZWJ1Zy5vIGpmc19kbWFwLm8gXAogCSAgICBqZnNfdW5pY29kZS5vIGpmc19kdHJlZS5vIGpmc19pbm9kZS5vIFwKIAkgICAgamZzX2V4dGVudC5vIHN5bWxpbmsubyBqZnNfbWV0YXBhZ2UubyBcCi0JICAgIGpmc19sb2dtZ3IubyBqZnNfdHhubWdyLm8gamZzX3VuaXVwci5vIHJlc2l6ZS5vIHhhdHRyLm8KKwkgICAgamZzX2xvZ21nci5vIGpmc190eG5tZ3IubyBqZnNfdW5pdXByLm8gXAorCSAgICByZXNpemUubyB4YXR0ci5vIGlvY3RsLm8KIAogamZzLSQoQ09ORklHX0pGU19QT1NJWF9BQ0wpICs9IGFjbC5vCiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9hY2wuYyBiL2ZzL2pmcy9hY2wuYwppbmRleCA0NjFlNDkzLi5lMjI4MTMwIDEwMDY0NAotLS0gYS9mcy9qZnMvYWNsLmMKKysrIGIvZnMvamZzL2FjbC5jCkBAIC0xODMsNiArMTgzLDkgQEAKIAkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKIAl9IGVsc2UKIAkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQorCUpGU19JUChpbm9kZSktPm1vZGUyID0gKEpGU19JUChpbm9kZSktPm1vZGUyICYgMHhmZmZmMDAwMCkgfAorCQkJICAgICAgIGlub2RlLT5pX21vZGU7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMDcsMTIgKzIxMCwxMiBAQAogCXJjID0gcG9zaXhfYWNsX2NobW9kX21hc3EoY2xvbmUsIGlub2RlLT5pX21vZGUpOwogCWlmICghcmMpIHsKIAkJdGlkX3QgdGlkID0gdHhCZWdpbihpbm9kZS0+aV9zYiwgMCk7Ci0JCWRvd24oJkpGU19JUChpbm9kZSktPmNvbW1pdF9zZW0pOworCQltdXRleF9sb2NrKCZKRlNfSVAoaW5vZGUpLT5jb21taXRfbXV0ZXgpOwogCQlyYyA9IGpmc19zZXRfYWNsKHRpZCwgaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgY2xvbmUpOwogCQlpZiAoIXJjKQogCQkJcmMgPSB0eENvbW1pdCh0aWQsIDEsICZpbm9kZSwgMCk7CiAJCXR4RW5kKHRpZCk7Ci0JCXVwKCZKRlNfSVAoaW5vZGUpLT5jb21taXRfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaW5vZGUpLT5jb21taXRfbXV0ZXgpOwogCX0KIAogCXBvc2l4X2FjbF9yZWxlYXNlKGNsb25lKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9maWxlLmMgYi9mcy9qZnMvZmlsZS5jCmluZGV4IGMyYzE5YzkuLmUxYWM2ZTQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9maWxlLmMKKysrIGIvZnMvamZzL2ZpbGUuYwpAQCAtMTEzLDQgKzExMyw1IEBACiAgCS5zZW5kZmlsZQk9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKIAkuZnN5bmMJCT0gamZzX2ZzeW5jLAogCS5yZWxlYXNlCT0gamZzX3JlbGVhc2UsCisJLmlvY3RsCQk9IGpmc19pb2N0bCwKIH07CmRpZmYgLS1naXQgYS9mcy9qZnMvaW5vZGUuYyBiL2ZzL2pmcy9pbm9kZS5jCmluZGV4IDlmOTQyY2EuLjUxYTVmZWQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9pbm9kZS5jCisrKyBiL2ZzL2pmcy9pbm9kZS5jCkBAIC01NSw2ICs1NSw3IEBACiAJCWlub2RlLT5pX29wID0gJmpmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfcmRldik7CiAJfQorCWpmc19zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOwogfQogCiAvKgpAQCAtODksMTYgKzkwLDE2IEBACiAJfQogCiAJdGlkID0gdHhCZWdpbihpbm9kZS0+aV9zYiwgQ09NTUlUX0lOT0RFKTsKLQlkb3duKCZKRlNfSVAoaW5vZGUpLT5jb21taXRfc2VtKTsKKwltdXRleF9sb2NrKCZKRlNfSVAoaW5vZGUpLT5jb21taXRfbXV0ZXgpOwogCiAJLyoKLQkgKiBSZXRlc3QgaW5vZGUgc3RhdGUgYWZ0ZXIgdGFraW5nIGNvbW1pdF9zZW0KKwkgKiBSZXRlc3QgaW5vZGUgc3RhdGUgYWZ0ZXIgdGFraW5nIGNvbW1pdF9tdXRleAogCSAqLwogCWlmIChpbm9kZS0+aV9ubGluayAmJiB0ZXN0X2NmbGFnKENPTU1JVF9EaXJ0eSwgaW5vZGUpKQogCQlyYyA9IHR4Q29tbWl0KHRpZCwgMSwgJmlub2RlLCB3YWl0ID8gQ09NTUlUX1NZTkMgOiAwKTsKIAogCXR4RW5kKHRpZCk7Ci0JdXAoJkpGU19JUChpbm9kZSktPmNvbW1pdF9zZW0pOworCW11dGV4X3VubG9jaygmSkZTX0lQKGlub2RlKS0+Y29tbWl0X211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTMzNSwxOCArMzM2LDE4IEBACiAJCXRpZCA9IHR4QmVnaW4oaXAtPmlfc2IsIDApOwogCiAJCS8qCi0JCSAqIFRoZSBjb21taXRfc2VtIGNhbm5vdCBiZSB0YWtlbiBiZWZvcmUgdHhCZWdpbi4KKwkJICogVGhlIGNvbW1pdF9tdXRleCBjYW5ub3QgYmUgdGFrZW4gYmVmb3JlIHR4QmVnaW4uCiAJCSAqIHR4QmVnaW4gbWF5IGJsb2NrIGFuZCB0aGVyZSBpcyBhIGNoYW5jZSB0aGUgaW5vZGUKIAkJICogY291bGQgYmUgbWFya2VkIGRpcnR5IGFuZCBuZWVkIHRvIGJlIGNvbW1pdHRlZAogCQkgKiBiZWZvcmUgdHhCZWdpbiB1bmJsb2NrcwogCQkgKi8KLQkJZG93bigmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X2xvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAKIAkJbmV3c2l6ZSA9IHh0VHJ1bmNhdGUodGlkLCBpcCwgbGVuZ3RoLAogCQkJCSAgICAgQ09NTUlUX1RSVU5DQVRFIHwgQ09NTUlUX1BXTUFQKTsKIAkJaWYgKG5ld3NpemUgPCAwKSB7CiAJCQl0eEVuZCh0aWQpOwotCQkJdXAoJkpGU19JUChpcCktPmNvbW1pdF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMzU1LDcgKzM1Niw3IEBACiAKIAkJdHhDb21taXQodGlkLCAxLCAmaXAsIDApOwogCQl0eEVuZCh0aWQpOwotCQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAl9IHdoaWxlIChuZXdzaXplID4gbGVuZ3RoKTsJLyogVHJ1bmNhdGUgaXNuJ3QgYWx3YXlzIGF0b21pYyAqLwogfQogCmRpZmYgLS1naXQgYS9mcy9qZnMvaW9jdGwuYyBiL2ZzL2pmcy9pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjM3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qZnMvaW9jdGwuYwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIGxpbnV4L2ZzL2pmcy9pb2N0bC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEhlcmJlcnQgUG9ldHpsCisgKiBhZGFwdGVkIGZyb20gUmVteSBDYXJkJ3MgZXh0Mi9pb2N0bC5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJqZnNfaW5jb3JlLmgiCisjaW5jbHVkZSAiamZzX2Rpbm9kZS5oIgorI2luY2x1ZGUgImpmc19pbm9kZS5oIgorCisKK3N0YXRpYyBzdHJ1Y3QgeworCWxvbmcgamZzX2ZsYWc7CisJbG9uZyBleHQyX2ZsYWc7Cit9IGpmc19tYXBbXSA9IHsKKwl7SkZTX05PQVRJTUVfRkwsIEVYVDJfTk9BVElNRV9GTH0sCisJe0pGU19ESVJTWU5DX0ZMLCBFWFQyX0RJUlNZTkNfRkx9LAorCXtKRlNfU1lOQ19GTCwgRVhUMl9TWU5DX0ZMfSwKKwl7SkZTX1NFQ1JNX0ZMLCBFWFQyX1NFQ1JNX0ZMfSwKKwl7SkZTX1VOUk1fRkwsIEVYVDJfVU5STV9GTH0sCisJe0pGU19BUFBFTkRfRkwsIEVYVDJfQVBQRU5EX0ZMfSwKKwl7SkZTX0lNTVVUQUJMRV9GTCwgRVhUMl9JTU1VVEFCTEVfRkx9LAorCXswLCAwfSwKK307CisKK3N0YXRpYyBsb25nIGpmc19tYXBfZXh0Mih1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgZnJvbSkKK3sKKwlpbnQgaW5kZXg9MDsKKwlsb25nIG1hcHBlZD0wOworCisJd2hpbGUgKGpmc19tYXBbaW5kZXhdLmpmc19mbGFnKSB7CisJCWlmIChmcm9tKSB7CisJCQlpZiAoamZzX21hcFtpbmRleF0uZXh0Ml9mbGFnICYgZmxhZ3MpCisJCQkJbWFwcGVkIHw9IGpmc19tYXBbaW5kZXhdLmpmc19mbGFnOworCQl9IGVsc2UgeworCQkJaWYgKGpmc19tYXBbaW5kZXhdLmpmc19mbGFnICYgZmxhZ3MpCisJCQkJbWFwcGVkIHw9IGpmc19tYXBbaW5kZXhdLmV4dDJfZmxhZzsKKwkJfQorCQlpbmRleCsrOworCX0KKwlyZXR1cm4gbWFwcGVkOworfQorCisKK2ludCBqZnNfaW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGpmc19pbm9kZV9pbmZvICpqZnNfaW5vZGUgPSBKRlNfSVAoaW5vZGUpOworCXVuc2lnbmVkIGludCBmbGFnczsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBKRlNfSU9DX0dFVEZMQUdTOgorCQlmbGFncyA9IGpmc19pbm9kZS0+bW9kZTIgJiBKRlNfRkxfVVNFUl9WSVNJQkxFOworCQlmbGFncyA9IGpmc19tYXBfZXh0MihmbGFncywgMCk7CisJCXJldHVybiBwdXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIEpGU19JT0NfU0VURkxBR1M6IHsKKwkJdW5zaWduZWQgaW50IG9sZGZsYWdzOworCisJCWlmIChJU19SRE9OTFkoaW5vZGUpKQorCQkJcmV0dXJuIC1FUk9GUzsKKworCQlpZiAoKGN1cnJlbnQtPmZzdWlkICE9IGlub2RlLT5pX3VpZCkgJiYgIWNhcGFibGUoQ0FQX0ZPV05FUikpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQlpZiAoZ2V0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopIGFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlmbGFncyA9IGpmc19tYXBfZXh0MihmbGFncywgMSk7CisJCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCWZsYWdzICY9IH5KRlNfRElSU1lOQ19GTDsKKworCQlvbGRmbGFncyA9IGpmc19pbm9kZS0+bW9kZTI7CisKKwkJLyoKKwkJICogVGhlIElNTVVUQUJMRSBhbmQgQVBQRU5EX09OTFkgZmxhZ3MgY2FuIG9ubHkgYmUgY2hhbmdlZCBieQorCQkgKiB0aGUgcmVsZXZhbnQgY2FwYWJpbGl0eS4KKwkJICovCisJCWlmICgob2xkZmxhZ3MgJiBKRlNfSU1NVVRBQkxFX0ZMKSB8fAorCQkJKChmbGFncyBeIG9sZGZsYWdzKSAmCisJCQkoSkZTX0FQUEVORF9GTCB8IEpGU19JTU1VVEFCTEVfRkwpKSkgeworCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKQorCQkJCXJldHVybiAtRVBFUk07CisJCX0KKworCQlmbGFncyA9IGZsYWdzICYgSkZTX0ZMX1VTRVJfTU9ESUZJQUJMRTsKKwkJZmxhZ3MgfD0gb2xkZmxhZ3MgJiB+SkZTX0ZMX1VTRVJfTU9ESUZJQUJMRTsKKwkJamZzX2lub2RlLT5tb2RlMiA9IGZsYWdzOworCisJCWpmc19zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOworCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCQlyZXR1cm4gMDsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RlYnVnLmMgYi9mcy9qZnMvamZzX2RlYnVnLmMKaW5kZXggNGNhZWE2Yi4uODFmMGU1MSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kZWJ1Zy5jCisrKyBiL2ZzL2pmcy9qZnNfZGVidWcuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJeyAibG9nbGV2ZWwiLAlsb2dsZXZlbF9yZWFkLCBsb2dsZXZlbF93cml0ZSB9CiAjZW5kaWYKIH07Ci0jZGVmaW5lIE5QUk9DRU5UCShzaXplb2YoRW50cmllcykvc2l6ZW9mKEVudHJpZXNbMF0pKQorI2RlZmluZSBOUFJPQ0VOVAlBUlJBWV9TSVpFKEVudHJpZXMpCiAKIHZvaWQgamZzX3Byb2NfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kaW5vZGUuaCBiL2ZzL2pmcy9qZnNfZGlub2RlLmgKaW5kZXggNTgwYTMyNTguLjlmMjU3MmEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZGlub2RlLmgKKysrIGIvZnMvamZzL2pmc19kaW5vZGUuaApAQCAtMTM5LDEzICsxMzksMzYgQEAKIAogLyogbW9yZSBleHRlbmRlZCBtb2RlIGJpdHM6IGF0dHJpYnV0ZXMgZm9yIE9TLzIgKi8KICNkZWZpbmUgSVJFQURPTkxZCTB4MDIwMDAwMDAJLyogbm8gd3JpdGUgYWNjZXNzIHRvIGZpbGUgKi8KLSNkZWZpbmUgSUFSQ0hJVkUJMHg0MDAwMDAwMAkvKiBmaWxlIGFyY2hpdmUgYml0ICovCi0jZGVmaW5lIElTWVNURU0JCTB4MDgwMDAwMDAJLyogc3lzdGVtIGZpbGUgKi8KICNkZWZpbmUgSUhJRERFTgkJMHgwNDAwMDAwMAkvKiBoaWRkZW4gZmlsZSAqLwotI2RlZmluZSBJUkFTSAkJMHg0RTAwMDAwMAkvKiBtYXNrIGZvciBjaGFuZ2VhYmxlIGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgSU5FV05BTUUJMHg4MDAwMDAwMAkvKiBub24tOC4zIGZpbGVuYW1lIGZvcm1hdCAqLworI2RlZmluZSBJU1lTVEVNCQkweDA4MDAwMDAwCS8qIHN5c3RlbSBmaWxlICovCisKICNkZWZpbmUgSURJUkVDVE9SWQkweDIwMDAwMDAwCS8qIGRpcmVjdG9yeSAoc2hhZG93IG9mIHJlYWwgYml0KSAqLworI2RlZmluZSBJQVJDSElWRQkweDQwMDAwMDAwCS8qIGZpbGUgYXJjaGl2ZSBiaXQgKi8KKyNkZWZpbmUgSU5FV05BTUUJMHg4MDAwMDAwMAkvKiBub24tOC4zIGZpbGVuYW1lIGZvcm1hdCAqLworCisjZGVmaW5lIElSQVNICQkweDRFMDAwMDAwCS8qIG1hc2sgZm9yIGNoYW5nZWFibGUgYXR0cmlidXRlcyAqLwogI2RlZmluZSBBVFRSU0hJRlQJMjUJLyogYml0cyB0byBzaGlmdCB0byBtb3ZlIGF0dHJpYnV0ZQogCQkJCSAgIHNwZWNpZmljYXRpb24gdG8gbW9kZSBwb3NpdGlvbiAqLwogCisvKiBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBMaW51eCAqLworCisjZGVmaW5lIEpGU19OT0FUSU1FX0ZMCQkweDAwMDgwMDAwIC8qIGRvIG5vdCB1cGRhdGUgYXRpbWUgKi8KKworI2RlZmluZSBKRlNfRElSU1lOQ19GTAkJMHgwMDEwMDAwMCAvKiBkaXJzeW5jIGJlaGF2aW91ciAqLworI2RlZmluZSBKRlNfU1lOQ19GTAkJMHgwMDIwMDAwMCAvKiBTeW5jaHJvbm91cyB1cGRhdGVzICovCisjZGVmaW5lIEpGU19TRUNSTV9GTAkJMHgwMDQwMDAwMCAvKiBTZWN1cmUgZGVsZXRpb24gKi8KKyNkZWZpbmUgSkZTX1VOUk1fRkwJCTB4MDA4MDAwMDAgLyogYWxsb3cgZm9yIHVuZGVsZXRlICovCisKKyNkZWZpbmUgSkZTX0FQUEVORF9GTAkJMHgwMTAwMDAwMCAvKiB3cml0ZXMgdG8gZmlsZSBtYXkgb25seSBhcHBlbmQgKi8KKyNkZWZpbmUgSkZTX0lNTVVUQUJMRV9GTAkweDAyMDAwMDAwIC8qIEltbXV0YWJsZSBmaWxlICovCisKKyNkZWZpbmUgSkZTX0ZMX1VTRVJfVklTSUJMRQkweDAzRjgwMDAwCisjZGVmaW5lIEpGU19GTF9VU0VSX01PRElGSUFCTEUJMHgwM0Y4MDAwMAorI2RlZmluZSBKRlNfRkxfSU5IRVJJVAkJMHgwM0M4MDAwMAorCisvKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIEVYVFsyM11fSU9DX0dFVEZMQUdTL1NFVEZMQUdTICovCisjZGVmaW5lIEpGU19JT0NfR0VURkxBR1MJX0lPUignZicsIDEsIGxvbmcpCisjZGVmaW5lIEpGU19JT0NfU0VURkxBR1MJX0lPVygnZicsIDIsIGxvbmcpCisKKwogI2VuZGlmIC8qX0hfSkZTX0RJTk9ERSAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kbWFwLmMgYi9mcy9qZnMvamZzX2RtYXAuYwppbmRleCAyOTY3YjczLi5jMTYxYzk4IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2RtYXAuYworKysgYi9mcy9qZnMvamZzX2RtYXAuYwpAQCAtNjQsOSArNjQsOSBAQAogICoJdG8gdGhlIHBlcnNpc3RlbnQgYml0bWFwcyBpbiBkbWFwcykgaXMgZ3VhcmRlZCBieSAoYnVzeSkgYnVmZmVycy4KICAqLwogCi0jZGVmaW5lIEJNQVBfTE9DS19JTklUKGJtcCkJaW5pdF9NVVRFWCgmYm1wLT5kYl9ibWFwbG9jaykKLSNkZWZpbmUgQk1BUF9MT0NLKGJtcCkJCWRvd24oJmJtcC0+ZGJfYm1hcGxvY2spCi0jZGVmaW5lIEJNQVBfVU5MT0NLKGJtcCkJdXAoJmJtcC0+ZGJfYm1hcGxvY2spCisjZGVmaW5lIEJNQVBfTE9DS19JTklUKGJtcCkJbXV0ZXhfaW5pdCgmYm1wLT5kYl9ibWFwbG9jaykKKyNkZWZpbmUgQk1BUF9MT0NLKGJtcCkJCW11dGV4X2xvY2soJmJtcC0+ZGJfYm1hcGxvY2spCisjZGVmaW5lIEJNQVBfVU5MT0NLKGJtcCkJbXV0ZXhfdW5sb2NrKCZibXAtPmRiX2JtYXBsb2NrKQogCiAvKgogICogZm9yd2FyZCByZWZlcmVuY2VzCkBAIC0xMjUsNyArMTI1LDcgQEAKICAqIGludG8gdGhlIHRhYmxlLCB3aXRoIHRoZSB0YWJsZSBlbGVtZW50cyB5aWVsZGluZyB0aGUgbWF4aW11bQogICogYmluYXJ5IGJ1ZGR5IG9mIGZyZWUgYml0cyB3aXRoaW4gdGhlIGNoYXJhY3Rlci4KICAqLwotc3RhdGljIHM4IGJ1ZHRhYlsyNTZdID0geworc3RhdGljIGNvbnN0IHM4IGJ1ZHRhYlsyNTZdID0gewogCTMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsCiAJMiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKIAkyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLApAQCAtNTMyLDEwICs1MzIsMTAgQEAKIAogCQlsYXN0bGJsa25vID0gbGJsa25vOwogCisJCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKIAkJaWYgKG1wLT5sc24gIT0gMCkgewogCQkJLyogaW5oZXJpdCBvbGRlci9zbWFsbGVyIGxzbiAqLwogCQkJbG9nZGlmZihkaWZmcCwgbXAtPmxzbiwgbG9nKTsKLQkJCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKIAkJCWlmIChkaWZmdCA8IGRpZmZwKSB7CiAJCQkJbXAtPmxzbiA9IGxzbjsKIApAQCAtNTQ4LDIwICs1NDgsMTcgQEAKIAkJCWxvZ2RpZmYoZGlmZnAsIG1wLT5jbHNuLCBsb2cpOwogCQkJaWYgKGRpZmZ0ID4gZGlmZnApCiAJCQkJbXAtPmNsc24gPSB0YmxrLT5jbHNuOwotCQkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJCX0gZWxzZSB7CiAJCQltcC0+bG9nID0gbG9nOwogCQkJbXAtPmxzbiA9IGxzbjsKIAogCQkJLyogaW5zZXJ0IGJwIGFmdGVyIHRibG9jayBpbiBsb2dzeW5jIGxpc3QgKi8KLQkJCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKLQogCQkJbG9nLT5jb3VudCsrOwogCQkJbGlzdF9hZGQoJm1wLT5zeW5jbGlzdCwgJnRibGstPnN5bmNsaXN0KTsKIAogCQkJbXAtPmNsc24gPSB0YmxrLT5jbHNuOwotCQkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJCX0KKwkJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJfQogCiAJLyogd3JpdGUgdGhlIGxhc3QgYnVmZmVyLiAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kbWFwLmggYi9mcy9qZnMvamZzX2RtYXAuaAppbmRleCAzMmUyNTg4Li44YjE0Y2M4IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2RtYXAuaAorKysgYi9mcy9qZnMvamZzX2RtYXAuaApAQCAtMjQzLDcgKzI0Myw3IEBACiBzdHJ1Y3QgYm1hcCB7CiAJc3RydWN0IGRibWFwIGRiX2JtYXA7CQkvKiBvbi1kaXNrIGFnZ3JlZ2F0ZSBtYXAgZGVzY3JpcHRvciAqLwogCXN0cnVjdCBpbm9kZSAqZGJfaXBibWFwOwkvKiBwdHIgdG8gYWdncmVnYXRlIG1hcCBpbmNvcmUgaW5vZGUgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGRiX2JtYXBsb2NrOwkvKiBhZ2dyZWdhdGUgbWFwIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXggZGJfYm1hcGxvY2s7CS8qIGFnZ3JlZ2F0ZSBtYXAgbG9jayAqLwogCWF0b21pY190IGRiX2FjdGl2ZVtNQVhBR107CS8qIGNvdW50IG9mIGFjdGl2ZSwgb3BlbiBmaWxlcyBpbiBBRyAqLwogCXUzMiAqZGJfREJtYXA7CiB9OwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kdHJlZS5jIGIvZnMvamZzL2pmc19kdHJlZS5jCmluZGV4IDQwNGYzM2UuLjZjM2YwODMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZHRyZWUuYworKysgYi9mcy9qZnMvamZzX2R0cmVlLmMKQEAgLTEwMDUsNiArMTAwNSw5IEBACiAKIAkJRFRfUFVUUEFHRShzbXApOwogCisJCWlmICghRE9fSU5ERVgoaXApKQorCQkJaXAtPmlfc2l6ZSA9IHhsZW4gPDwgc2JpLT5sMmJzaXplOworCiAJCWdvdG8gZnJlZUtleU5hbWU7CiAJfQogCkBAIC0xMDU1LDcgKzEwNTgsOSBAQAogCQkJCXhhZGRyID0gYWRkcmVzc1BYRChweGQpICsgeGxlbjsKIAkJCQlkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSBuKTsKIAkJCX0KLQkJfQorCQl9IGVsc2UgaWYgKCFET19JTkRFWChpcCkpCisJCQlpcC0+aV9zaXplID0gbGVuZ3RoUFhEKHB4ZCkgPDwgc2JpLT5sMmJzaXplOworCiAKIAkgICAgICBleHRlbmRPdXQ6CiAJCURUX1BVVFBBR0Uoc21wKTsKQEAgLTEwOTgsNiArMTEwMyw5IEBACiAJCWdvdG8gc3BsaXRPdXQ7CiAJfQogCisJaWYgKCFET19JTkRFWChpcCkpCisJCWlwLT5pX3NpemUgKz0gUFNJWkU7CisKIAkvKgogCSAqIHByb3BhZ2F0ZSB1cCB0aGUgcm91dGVyIGVudHJ5IGZvciB0aGUgbGVhZiBwYWdlIGp1c3Qgc3BsaXQKIAkgKgpAQCAtMjQyNCw2ICsyNDMyLDkgQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKCFET19JTkRFWChpcCkpCisJCWlwLT5pX3NpemUgLT0gUFNJWkU7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19leHRlbnQuYyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKaW5kZXggNDg3OTYwMy4uNTU0OTM3OCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19leHRlbnQuYworKysgYi9mcy9qZnMvamZzX2V4dGVudC5jCkBAIC05NCw3ICs5NCw3IEBACiAJdHhCZWdpbkFub24oaXAtPmlfc2IpOwogCiAJLyogQXZvaWQgcmFjZSB3aXRoIGpmc19jb21taXRfaW5vZGUoKSAqLwotCWRvd24oJkpGU19JUChpcCktPmNvbW1pdF9zZW0pOworCW11dGV4X2xvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAKIAkvKiB2YWxpZGF0ZSBleHRlbnQgbGVuZ3RoICovCiAJaWYgKHhsZW4gPiBNQVhYTEVOKQpAQCAtMTM2LDE0ICsxMzYsMTQgQEAKIAkgKi8KIAlueGxlbiA9IHhsZW47CiAJaWYgKChyYyA9IGV4dEJhbGxvYyhpcCwgaGludCA/IGhpbnQgOiBJTk9ISU5UKGlwKSwgJm54bGVuLCAmbnhhZGRyKSkpIHsKLQkJdXAoJkpGU19JUChpcCktPmNvbW1pdF9zZW0pOworCQltdXRleF91bmxvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAJCXJldHVybiAocmMpOwogCX0KIAogCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KIAlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIG54bGVuKSkgewogCQlkYkZyZWUoaXAsIG54YWRkciwgKHM2NCkgbnhsZW4pOwotCQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQogCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlpZiAocmMpIHsKIAkJZGJGcmVlKGlwLCBueGFkZHIsIG54bGVuKTsKIAkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgbnhsZW4pOwotCQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJcmV0dXJuIChyYyk7CiAJfQogCkBAIC0xNzcsNyArMTc3LDcgQEAKIAogCW1hcmtfaW5vZGVfZGlydHkoaXApOwogCi0JdXAoJkpGU19JUChpcCktPmNvbW1pdF9zZW0pOworCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkvKgogCSAqIENPTU1JVF9TeW5jTGlzdCBmbGFncyBhbiBhbm9ueW1vdXMgdGxvY2sgb24gcGFnZSB0aGF0IGlzIG9uCiAJICogc3luYyBsaXN0LgpAQCAtMjIyLDcgKzIyMiw3IEBACiAJLyogVGhpcyBibG9ja3MgaWYgd2UgYXJlIGxvdyBvbiByZXNvdXJjZXMgKi8KIAl0eEJlZ2luQW5vbihpcC0+aV9zYik7CiAKLQlkb3duKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKKwltdXRleF9sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCS8qIHZhbGlkYXRlIGV4dGVudCBsZW5ndGggKi8KIAlpZiAobnhsZW4gPiBNQVhYTEVOKQogCQlueGxlbiA9IE1BWFhMRU47CkBAIC0yNTgsNyArMjU4LDcgQEAKIAkvKiBBbGxvY2F0IGJsb2NrcyB0byBxdW90YS4gKi8KIAlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIG54bGVuKSkgewogCQlkYkZyZWUoaXAsIG54YWRkciwgKHM2NCkgbnhsZW4pOwotCQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQogCkBAIC0zMzgsNyArMzM4LDcgQEAKIAogCW1hcmtfaW5vZGVfZGlydHkoaXApOwogZXhpdDoKLQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCXJldHVybiAocmMpOwogfQogI2VuZGlmCQkJLyogX05PVFlFVCAqLwpAQCAtNDM5LDEyICs0MzksMTIgQEAKIAogCXR4QmVnaW5Bbm9uKGlwLT5pX3NiKTsKIAotCWRvd24oJkpGU19JUChpcCktPmNvbW1pdF9zZW0pOworCW11dGV4X2xvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAKIAkvKiB1cGRhdGUgdGhlIGV4dGVudCAqLwogCXJjID0geHRVcGRhdGUoMCwgaXAsIHhwKTsKIAotCXVwKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKKwltdXRleF91bmxvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2ltYXAuYyBiL2ZzL2pmcy9qZnNfaW1hcC5jCmluZGV4IDMxYjRhYTEuLmNjYmU2MGEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW1hcC5jCisrKyBiL2ZzL2pmcy9qZnNfaW1hcC5jCkBAIC02NiwxNCArNjYsMTQgQEAKICAqIGltYXAgbG9ja3MKICAqLwogLyogaWFnIGZyZWUgbGlzdCBsb2NrICovCi0jZGVmaW5lIElBR0ZSRUVfTE9DS19JTklUKGltYXApCQlpbml0X01VVEVYKCZpbWFwLT5pbV9mcmVlbG9jaykKLSNkZWZpbmUgSUFHRlJFRV9MT0NLKGltYXApCQlkb3duKCZpbWFwLT5pbV9mcmVlbG9jaykKLSNkZWZpbmUgSUFHRlJFRV9VTkxPQ0soaW1hcCkJCXVwKCZpbWFwLT5pbV9mcmVlbG9jaykKKyNkZWZpbmUgSUFHRlJFRV9MT0NLX0lOSVQoaW1hcCkJCW11dGV4X2luaXQoJmltYXAtPmltX2ZyZWVsb2NrKQorI2RlZmluZSBJQUdGUkVFX0xPQ0soaW1hcCkJCW11dGV4X2xvY2soJmltYXAtPmltX2ZyZWVsb2NrKQorI2RlZmluZSBJQUdGUkVFX1VOTE9DSyhpbWFwKQkJbXV0ZXhfdW5sb2NrKCZpbWFwLT5pbV9mcmVlbG9jaykKIAogLyogcGVyIGFnIGlhZyBsaXN0IGxvY2tzICovCi0jZGVmaW5lIEFHX0xPQ0tfSU5JVChpbWFwLGluZGV4KQlpbml0X01VVEVYKCYoaW1hcC0+aW1fYWdsb2NrW2luZGV4XSkpCi0jZGVmaW5lIEFHX0xPQ0soaW1hcCxhZ25vKQkJZG93bigmaW1hcC0+aW1fYWdsb2NrW2Fnbm9dKQotI2RlZmluZSBBR19VTkxPQ0soaW1hcCxhZ25vKQkJdXAoJmltYXAtPmltX2FnbG9ja1thZ25vXSkKKyNkZWZpbmUgQUdfTE9DS19JTklUKGltYXAsaW5kZXgpCW11dGV4X2luaXQoJihpbWFwLT5pbV9hZ2xvY2tbaW5kZXhdKSkKKyNkZWZpbmUgQUdfTE9DSyhpbWFwLGFnbm8pCQltdXRleF9sb2NrKCZpbWFwLT5pbV9hZ2xvY2tbYWdub10pCisjZGVmaW5lIEFHX1VOTE9DSyhpbWFwLGFnbm8pCQltdXRleF91bmxvY2soJmltYXAtPmltX2FnbG9ja1thZ25vXSkKIAogLyoKICAqIGZvcndhcmQgcmVmZXJlbmNlcwpAQCAtMTI2MSw3ICsxMjYxLDcgQEAKIAkgKiB0byBiZSBmcmVlZCBieSB0aGUgdHJhbnNhY3Rpb247ICAKIAkgKi8KIAl0aWQgPSB0eEJlZ2luKGlwaW1hcC0+aV9zYiwgQ09NTUlUX0ZPUkNFKTsKLQlkb3duKCZKRlNfSVAoaXBpbWFwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfbG9jaygmSkZTX0lQKGlwaW1hcCktPmNvbW1pdF9tdXRleCk7CiAKIAkvKiBhY3F1aXJlIHRsb2NrIG9mIHRoZSBpYWcgcGFnZSBvZiB0aGUgZnJlZWQgaXhhZCAKIAkgKiB0byBmb3JjZSB0aGUgcGFnZSBOT0hPTUVPSyAoZXZlbiB0aG91Z2ggbm8gZGF0YSBpcwpAQCAtMTI5NCw3ICsxMjk0LDcgQEAKIAlyYyA9IHR4Q29tbWl0KHRpZCwgMSwgJmlwbGlzdFswXSwgQ09NTUlUX0ZPUkNFKTsKIAogCXR4RW5kKHRpZCk7Ci0JdXAoJkpGU19JUChpcGltYXApLT5jb21taXRfc2VtKTsKKwltdXRleF91bmxvY2soJkpGU19JUChpcGltYXApLT5jb21taXRfbXV0ZXgpOwogCiAJLyogdW5sb2NrIHRoZSBBRyBpbm9kZSBtYXAgaW5mb3JtYXRpb24gKi8KIAlBR19VTkxPQ0soaW1hcCwgYWdubyk7CkBAIC0yNTU0LDEzICsyNTU0LDEzIEBACiAJCSAqIGFkZHJlc3Npbmcgc3RydWN0dXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgaWFnIHBhZ2U7CiAJCSAqLwogCQl0aWQgPSB0eEJlZ2luKHNiLCBDT01NSVRfRk9SQ0UpOwotCQlkb3duKCZKRlNfSVAoaXBpbWFwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X2xvY2soJkpGU19JUChpcGltYXApLT5jb21taXRfbXV0ZXgpOwogCiAJCS8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwIGFkZHJlc3Npbmcgc3RydWN0dXJlIHRvIHBvaW50IHRvIGl0ICovCiAJCWlmICgocmMgPQogCQkgICAgIHh0SW5zZXJ0KHRpZCwgaXBpbWFwLCAwLCBibGtubywgeGxlbiwgJnhhZGRyLCAwKSkpIHsKIAkJCXR4RW5kKHRpZCk7Ci0JCQl1cCgmSkZTX0lQKGlwaW1hcCktPmNvbW1pdF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXBpbWFwKS0+Y29tbWl0X211dGV4KTsKIAkJCS8qIEZyZWUgdGhlIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRoZSBpYWcgc2luY2UgaXQgd2FzCiAJCQkgKiBub3Qgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHRoZSBpbm9kZSBtYXAKIAkJCSAqLwpAQCAtMjYyNiw3ICsyNjI2LDcgQEAKIAkJcmMgPSB0eENvbW1pdCh0aWQsIDEsICZpcGxpc3RbMF0sIENPTU1JVF9GT1JDRSk7CiAKIAkJdHhFbmQodGlkKTsKLQkJdXAoJkpGU19JUChpcGltYXApLT5jb21taXRfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXBpbWFwKS0+Y29tbWl0X211dGV4KTsKIAogCQlkdXBsaWNhdGVJWHRyZWUoc2IsIGJsa25vLCB4bGVuLCAmeGFkZHIpOwogCkBAIC0yODQ0LDExICsyODQ0LDExIEBACiAJICovCiAJbHNuID0gdGJsay0+bHNuOwogCWxvZyA9IEpGU19TQkkodGJsay0+c2IpLT5sb2c7CisJTE9HU1lOQ19MT0NLKGxvZywgZmxhZ3MpOwogCWlmIChtcC0+bHNuICE9IDApIHsKIAkJLyogaW5oZXJpdCBvbGRlci9zbWFsbGVyIGxzbiAqLwogCQlsb2dkaWZmKGRpZmZ0LCBsc24sIGxvZyk7CiAJCWxvZ2RpZmYoZGlmZnAsIG1wLT5sc24sIGxvZyk7Ci0JCUxPR1NZTkNfTE9DSyhsb2csIGZsYWdzKTsKIAkJaWYgKGRpZmZ0IDwgZGlmZnApIHsKIAkJCW1wLT5sc24gPSBsc247CiAJCQkvKiBtb3ZlIG1wIGFmdGVyIHRibG9jayBpbiBsb2dzeW5jIGxpc3QgKi8KQEAgLTI4NjAsMTcgKzI4NjAsMTUgQEAKIAkJbG9nZGlmZihkaWZmcCwgbXAtPmNsc24sIGxvZyk7CiAJCWlmIChkaWZmdCA+IGRpZmZwKQogCQkJbXAtPmNsc24gPSB0YmxrLT5jbHNuOwotCQlMT0dTWU5DX1VOTE9DSyhsb2csIGZsYWdzKTsKIAl9IGVsc2UgewogCQltcC0+bG9nID0gbG9nOwogCQltcC0+bHNuID0gbHNuOwogCQkvKiBpbnNlcnQgbXAgYWZ0ZXIgdGJsb2NrIGluIGxvZ3N5bmMgbGlzdCAqLwotCQlMT0dTWU5DX0xPQ0sobG9nLCBmbGFncyk7CiAJCWxvZy0+Y291bnQrKzsKIAkJbGlzdF9hZGQoJm1wLT5zeW5jbGlzdCwgJnRibGstPnN5bmNsaXN0KTsKIAkJbXAtPmNsc24gPSB0YmxrLT5jbHNuOwotCQlMT0dTWU5DX1VOTE9DSyhsb2csIGZsYWdzKTsKIAl9CisJTE9HU1lOQ19VTkxPQ0sobG9nLCBmbGFncyk7CiAJd3JpdGVfbWV0YXBhZ2UobXApOwogCXJldHVybiAoMCk7CiB9CkBAIC0zMDc2LDE0ICszMDc0LDQwIEBACiBzdGF0aWMgaW50IGNvcHlfZnJvbV9kaW5vZGUoc3RydWN0IGRpbm9kZSAqIGRpcCwgc3RydWN0IGlub2RlICppcCkKIHsKIAlzdHJ1Y3QgamZzX2lub2RlX2luZm8gKmpmc19pcCA9IEpGU19JUChpcCk7CisJc3RydWN0IGpmc19zYl9pbmZvICpzYmkgPSBKRlNfU0JJKGlwLT5pX3NiKTsKIAogCWpmc19pcC0+ZmlsZXNldCA9IGxlMzJfdG9fY3B1KGRpcC0+ZGlfZmlsZXNldCk7CiAJamZzX2lwLT5tb2RlMiA9IGxlMzJfdG9fY3B1KGRpcC0+ZGlfbW9kZSk7CiAKIAlpcC0+aV9tb2RlID0gbGUzMl90b19jcHUoZGlwLT5kaV9tb2RlKSAmIDB4ZmZmZjsKKwlpZiAoc2JpLT51bWFzayAhPSAtMSkgeworCQlpcC0+aV9tb2RlID0gKGlwLT5pX21vZGUgJiB+MDc3NykgfCAoMDc3NyAmIH5zYmktPnVtYXNrKTsKKwkJLyogRm9yIGRpcmVjdG9yaWVzLCBhZGQgeCBwZXJtaXNzaW9uIGlmIHIgaXMgYWxsb3dlZCBieSB1bWFzayAqLworCQlpZiAoU19JU0RJUihpcC0+aV9tb2RlKSkgeworCQkJaWYgKGlwLT5pX21vZGUgJiAwNDAwKQorCQkJCWlwLT5pX21vZGUgfD0gMDEwMDsKKwkJCWlmIChpcC0+aV9tb2RlICYgMDA0MCkKKwkJCQlpcC0+aV9tb2RlIHw9IDAwMTA7CisJCQlpZiAoaXAtPmlfbW9kZSAmIDAwMDQpCisJCQkJaXAtPmlfbW9kZSB8PSAwMDAxOworCQl9CisJfQogCWlwLT5pX25saW5rID0gbGUzMl90b19jcHUoZGlwLT5kaV9ubGluayk7Ci0JaXAtPmlfdWlkID0gbGUzMl90b19jcHUoZGlwLT5kaV91aWQpOwotCWlwLT5pX2dpZCA9IGxlMzJfdG9fY3B1KGRpcC0+ZGlfZ2lkKTsKKworCWpmc19pcC0+c2F2ZWRfdWlkID0gbGUzMl90b19jcHUoZGlwLT5kaV91aWQpOworCWlmIChzYmktPnVpZCA9PSAtMSkKKwkJaXAtPmlfdWlkID0gamZzX2lwLT5zYXZlZF91aWQ7CisJZWxzZSB7CisJCWlwLT5pX3VpZCA9IHNiaS0+dWlkOworCX0KKworCWpmc19pcC0+c2F2ZWRfZ2lkID0gbGUzMl90b19jcHUoZGlwLT5kaV9naWQpOworCWlmIChzYmktPmdpZCA9PSAtMSkKKwkJaXAtPmlfZ2lkID0gamZzX2lwLT5zYXZlZF9naWQ7CisJZWxzZSB7CisJCWlwLT5pX2dpZCA9IHNiaS0+Z2lkOworCX0KKwogCWlwLT5pX3NpemUgPSBsZTY0X3RvX2NwdShkaXAtPmRpX3NpemUpOwogCWlwLT5pX2F0aW1lLnR2X3NlYyA9IGxlMzJfdG9fY3B1KGRpcC0+ZGlfYXRpbWUudHZfc2VjKTsKIAlpcC0+aV9hdGltZS50dl9uc2VjID0gbGUzMl90b19jcHUoZGlwLT5kaV9hdGltZS50dl9uc2VjKTsKQEAgLTMxMzQsMjEgKzMxNTgsMzMgQEAKIHN0YXRpYyB2b2lkIGNvcHlfdG9fZGlub2RlKHN0cnVjdCBkaW5vZGUgKiBkaXAsIHN0cnVjdCBpbm9kZSAqaXApCiB7CiAJc3RydWN0IGpmc19pbm9kZV9pbmZvICpqZnNfaXAgPSBKRlNfSVAoaXApOworCXN0cnVjdCBqZnNfc2JfaW5mbyAqc2JpID0gSkZTX1NCSShpcC0+aV9zYik7CiAKIAlkaXAtPmRpX2ZpbGVzZXQgPSBjcHVfdG9fbGUzMihqZnNfaXAtPmZpbGVzZXQpOwotCWRpcC0+ZGlfaW5vc3RhbXAgPSBjcHVfdG9fbGUzMihKRlNfU0JJKGlwLT5pX3NiKS0+aW5vc3RhbXApOworCWRpcC0+ZGlfaW5vc3RhbXAgPSBjcHVfdG9fbGUzMihzYmktPmlub3N0YW1wKTsKIAlkaXAtPmRpX251bWJlciA9IGNwdV90b19sZTMyKGlwLT5pX2lubyk7CiAJZGlwLT5kaV9nZW4gPSBjcHVfdG9fbGUzMihpcC0+aV9nZW5lcmF0aW9uKTsKIAlkaXAtPmRpX3NpemUgPSBjcHVfdG9fbGU2NChpcC0+aV9zaXplKTsKIAlkaXAtPmRpX25ibG9ja3MgPSBjcHVfdG9fbGU2NChQQkxLMkxCTEsoaXAtPmlfc2IsIGlwLT5pX2Jsb2NrcykpOwogCWRpcC0+ZGlfbmxpbmsgPSBjcHVfdG9fbGUzMihpcC0+aV9ubGluayk7Ci0JZGlwLT5kaV91aWQgPSBjcHVfdG9fbGUzMihpcC0+aV91aWQpOwotCWRpcC0+ZGlfZ2lkID0gY3B1X3RvX2xlMzIoaXAtPmlfZ2lkKTsKKwlpZiAoc2JpLT51aWQgPT0gLTEpCisJCWRpcC0+ZGlfdWlkID0gY3B1X3RvX2xlMzIoaXAtPmlfdWlkKTsKKwllbHNlCisJCWRpcC0+ZGlfdWlkID0gY3B1X3RvX2xlMzIoamZzX2lwLT5zYXZlZF91aWQpOworCWlmIChzYmktPmdpZCA9PSAtMSkKKwkJZGlwLT5kaV9naWQgPSBjcHVfdG9fbGUzMihpcC0+aV9naWQpOworCWVsc2UKKwkJZGlwLT5kaV9naWQgPSBjcHVfdG9fbGUzMihqZnNfaXAtPnNhdmVkX2dpZCk7CiAJLyoKIAkgKiBtb2RlMiBpcyBvbmx5IG5lZWRlZCBmb3Igc3RvcmluZyB0aGUgaGlnaGVyIG9yZGVyIGJpdHMuCiAJICogVHJ1c3QgaV9tb2RlIGZvciB0aGUgbG93ZXIgb3JkZXIgb25lcwogCSAqLwotCWRpcC0+ZGlfbW9kZSA9IGNwdV90b19sZTMyKChqZnNfaXAtPm1vZGUyICYgMHhmZmZmMDAwMCkgfCBpcC0+aV9tb2RlKTsKKwlpZiAoc2JpLT51bWFzayA9PSAtMSkKKwkJZGlwLT5kaV9tb2RlID0gY3B1X3RvX2xlMzIoKGpmc19pcC0+bW9kZTIgJiAweGZmZmYwMDAwKSB8CisJCQkJCSAgIGlwLT5pX21vZGUpOworCWVsc2UgLyogTGVhdmUgdGhlIG9yaWdpbmFsIHBlcm1pc3Npb25zIGFsb25lICovCisJCWRpcC0+ZGlfbW9kZSA9IGNwdV90b19sZTMyKGpmc19pcC0+bW9kZTIpOworCiAJZGlwLT5kaV9hdGltZS50dl9zZWMgPSBjcHVfdG9fbGUzMihpcC0+aV9hdGltZS50dl9zZWMpOwogCWRpcC0+ZGlfYXRpbWUudHZfbnNlYyA9IGNwdV90b19sZTMyKGlwLT5pX2F0aW1lLnR2X25zZWMpOwogCWRpcC0+ZGlfY3RpbWUudHZfc2VjID0gY3B1X3RvX2xlMzIoaXAtPmlfY3RpbWUudHZfc2VjKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW1hcC5oIGIvZnMvamZzL2pmc19pbWFwLmgKaW5kZXggNmI1OWFkZS4uNmUyNDQ2NSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbWFwLmgKKysrIGIvZnMvamZzL2pmc19pbWFwLmgKQEAgLTE0MCw4ICsxNDAsOCBAQAogc3RydWN0IGlub21hcCB7CiAJc3RydWN0IGRpbm9tYXAgaW1faW1hcDsJCS8qIDQwOTY6IGlub2RlIGFsbG9jYXRpb24gY29udHJvbCAqLwogCXN0cnVjdCBpbm9kZSAqaW1faXBpbWFwOwkvKiA0OiBwdHIgdG8gaW5vZGUgZm9yIGltYXAgICAqLwotCXN0cnVjdCBzZW1hcGhvcmUgaW1fZnJlZWxvY2s7CS8qIDQ6IGlhZyBmcmVlIGxpc3QgbG9jayAgICAgICovCi0Jc3RydWN0IHNlbWFwaG9yZSBpbV9hZ2xvY2tbTUFYQUddOwkvKiA1MTI6IHBlciBBRyBsb2NrcyAgICAgICAgICAqLworCXN0cnVjdCBtdXRleCBpbV9mcmVlbG9jazsJLyogNDogaWFnIGZyZWUgbGlzdCBsb2NrICAgICAgKi8KKwlzdHJ1Y3QgbXV0ZXggaW1fYWdsb2NrW01BWEFHXTsJLyogNTEyOiBwZXIgQUcgbG9ja3MgICAgICAgICAgKi8KIAl1MzIgKmltX0RCR2RpbWFwOwogCWF0b21pY190IGltX251bWlub3M7CS8qIG51bSBvZiBiYWNrZWQgaW5vZGVzICovCiAJYXRvbWljX3QgaW1fbnVtZnJlZTsJLyogbnVtIG9mIGZyZWUgYmFja2VkIGlub2RlcyAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbmNvcmUuaCBiL2ZzL2pmcy9qZnNfaW5jb3JlLmgKaW5kZXggZGMyMWE1Yi4uNTRkNzM3MSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbmNvcmUuaAorKysgYi9mcy9qZnMvamZzX2luY29yZS5oCkBAIC0xOSw2ICsxOSw3IEBACiAjaWZuZGVmIF9IX0pGU19JTkNPUkUKICNkZWZpbmUgX0hfSkZTX0lOQ09SRQogCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTM3LDYgKzM4LDggQEAKIHN0cnVjdCBqZnNfaW5vZGVfaW5mbyB7CiAJaW50CWZpbGVzZXQ7CS8qIGZpbGVzZXQgbnVtYmVyIChhbHdheXMgMTYpKi8KIAl1aW50CW1vZGUyOwkJLyogamZzLXNwZWNpZmljIG1vZGUJCSovCisJdWludAlzYXZlZF91aWQ7CS8qIHNhdmVkIGZvciB1aWQgbW91bnQgb3B0aW9uICovCisJdWludAlzYXZlZF9naWQ7CS8qIHNhdmVkIGZvciBnaWQgbW91bnQgb3B0aW9uICovCiAJcHhkX3QgICBpeHB4ZDsJCS8qIGlub2RlIGV4dGVudCBkZXNjcmlwdG9yCSovCiAJZHhkX3QJYWNsOwkJLyogZHhkIGRlc2NyaWJpbmcgYWNsCSovCiAJZHhkX3QJZWE7CQkvKiBkeGQgZGVzY3JpYmluZyBlYQkqLwpAQCAtNjIsMTIgKzY1LDEyIEBACiAJICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSByZHdybG9jazsKIAkvKgotCSAqIGNvbW1pdF9zZW0gc2VyaWFsaXplcyB0cmFuc2FjdGlvbiBwcm9jZXNzaW5nIG9uIGFuIGlub2RlLgorCSAqIGNvbW1pdF9tdXRleCBzZXJpYWxpemVzIHRyYW5zYWN0aW9uIHByb2Nlc3Npbmcgb24gYW4gaW5vZGUuCiAJICogSXQgbXVzdCBiZSB0YWtlbiBhZnRlciBiZWdpbm5pbmcgYSB0cmFuc2FjdGlvbiAodHhCZWdpbiksIHNpbmNlCiAJICogZGlydHkgaW5vZGVzIG1heSBiZSBjb21taXR0ZWQgd2hpbGUgYSBuZXcgdHJhbnNhY3Rpb24gb24gdGhlCiAJICogaW5vZGUgaXMgYmxvY2tlZCBpbiB0eEJlZ2luIG9yIFR4QmVnaW5Bbm9uCiAJICovCi0Jc3RydWN0IHNlbWFwaG9yZSBjb21taXRfc2VtOworCXN0cnVjdCBtdXRleCBjb21taXRfbXV0ZXg7CiAJLyogeGF0dHJfc2VtIGFsbG93cyB1cyB0byBhY2Nlc3MgdGhlIHhhdHRycyB3aXRob3V0IHRha2luZyBpX211dGV4ICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiAJbGlkX3QJeHRsaWQ7CQkvKiBsaWQgb2YgeHRyZWUgbG9jayBvbiBkaXJlY3RvcnkgKi8KQEAgLTE2OSw2ICsxNzIsOSBAQAogCXVpbnQJCXN0YXRlOwkJLyogbW91bnQvcmVjb3Zlcnkgc3RhdGUJKi8KIAl1bnNpZ25lZCBsb25nCWZsYWc7CQkvKiBtb3VudCB0aW1lIGZsYWdzICovCiAJdWludAkJcF9zdGF0ZTsJLyogc3RhdGUgcHJpb3IgdG8gZ29pbmcgbm8gaW50ZWdyaXR5ICovCisJdWludAkJdWlkOwkJLyogdWlkIHRvIG92ZXJyaWRlIG9uLWRpc2sgdWlkICovCisJdWludAkJZ2lkOwkJLyogZ2lkIHRvIG92ZXJyaWRlIG9uLWRpc2sgZ2lkICovCisJdWludAkJdW1hc2s7CQkvKiB1bWFzayB0byBvdmVycmlkZSBvbi1kaXNrIHVtYXNrICovCiB9OwogCiAvKiBqZnNfc2JfaW5mbyBjb21taXRfc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW5vZGUuYyBiL2ZzL2pmcy9qZnNfaW5vZGUuYwppbmRleCAyYWY1ZWZiLi40OTVkZjQwIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2lub2RlLmMKKysrIGIvZnMvamZzL2pmc19pbm9kZS5jCkBAIC0yNSw2ICsyNSwyNiBAQAogI2luY2x1ZGUgImpmc19kaW5vZGUuaCIKICNpbmNsdWRlICJqZnNfZGVidWcuaCIKIAorCit2b2lkIGpmc19zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBKRlNfSVAoaW5vZGUpLT5tb2RlMjsKKworCWlub2RlLT5pX2ZsYWdzICY9IH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8CisJCVNfTk9BVElNRSB8IFNfRElSU1lOQyB8IFNfU1lOQyk7CisKKwlpZiAoZmxhZ3MgJiBKRlNfSU1NVVRBQkxFX0ZMKQorCQlpbm9kZS0+aV9mbGFncyB8PSBTX0lNTVVUQUJMRTsKKwlpZiAoZmxhZ3MgJiBKRlNfQVBQRU5EX0ZMKQorCQlpbm9kZS0+aV9mbGFncyB8PSBTX0FQUEVORDsKKwlpZiAoZmxhZ3MgJiBKRlNfTk9BVElNRV9GTCkKKwkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT0FUSU1FOworCWlmIChmbGFncyAmIEpGU19ESVJTWU5DX0ZMKQorCQlpbm9kZS0+aV9mbGFncyB8PSBTX0RJUlNZTkM7CisJaWYgKGZsYWdzICYgSkZTX1NZTkNfRkwpCisJCWlub2RlLT5pX2ZsYWdzIHw9IFNfU1lOQzsKK30KKwogLyoKICAqIE5BTUU6CWlhbGxvYygpCiAgKgpAQCAtNjMsNiArODMsMTMgQEAKIAkJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7CiAKIAkvKgorCSAqIE5ldyBpbm9kZXMgbmVlZCB0byBzYXZlIHNhbmUgdmFsdWVzIG9uIGRpc2sgd2hlbgorCSAqIHVpZCAmIGdpZCBtb3VudCBvcHRpb25zIGFyZSB1c2VkCisJICovCisJamZzX2lub2RlLT5zYXZlZF91aWQgPSBpbm9kZS0+aV91aWQ7CisJamZzX2lub2RlLT5zYXZlZF9naWQgPSBpbm9kZS0+aV9naWQ7CisKKwkvKgogCSAqIEFsbG9jYXRlIGlub2RlIHRvIHF1b3RhLgogCSAqLwogCWlmIChEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpIHsKQEAgLTc0LDEwICsxMDEsMjAgQEAKIAl9CiAKIAlpbm9kZS0+aV9tb2RlID0gbW9kZTsKLQlpZiAoU19JU0RJUihtb2RlKSkKLQkJamZzX2lub2RlLT5tb2RlMiA9IElESVJFQ1RPUlkgfCBtb2RlOwotCWVsc2UKLQkJamZzX2lub2RlLT5tb2RlMiA9IElOTElORUVBIHwgSVNQQVJTRSB8IG1vZGU7CisJLyogaW5oZXJpdCBmbGFncyBmcm9tIHBhcmVudCAqLworCWpmc19pbm9kZS0+bW9kZTIgPSBKRlNfSVAocGFyZW50KS0+bW9kZTIgJiBKRlNfRkxfSU5IRVJJVDsKKworCWlmIChTX0lTRElSKG1vZGUpKSB7CisJCWpmc19pbm9kZS0+bW9kZTIgfD0gSURJUkVDVE9SWTsKKwkJamZzX2lub2RlLT5tb2RlMiAmPSB+SkZTX0RJUlNZTkNfRkw7CisJfQorCWVsc2UgeworCQlqZnNfaW5vZGUtPm1vZGUyIHw9IElOTElORUVBIHwgSVNQQVJTRTsKKwkJaWYgKFNfSVNMTksobW9kZSkpCisJCQlqZnNfaW5vZGUtPm1vZGUyICY9IH4oSkZTX0lNTVVUQUJMRV9GTHxKRlNfQVBQRU5EX0ZMKTsKKwl9CisJamZzX2lub2RlLT5tb2RlMiB8PSBtb2RlOworCiAJaW5vZGUtPmlfYmxrc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKQEAgLTk4LDYgKzEzNSw3IEBACiAJamZzX2lub2RlLT5hdGxoZWFkID0gMDsKIAlqZnNfaW5vZGUtPmF0bHRhaWwgPSAwOwogCWpmc19pbm9kZS0+eHRsaWQgPSAwOworCWpmc19zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOwogCiAJamZzX2luZm8oImlhbGxvYyByZXR1cm5zIGlub2RlID0gMHglcFxuIiwgaW5vZGUpOwogCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2lub2RlLmggYi9mcy9qZnMvamZzX2lub2RlLmgKaW5kZXggYjU0YmFjNS4uMDk1ZDQ3MSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbm9kZS5oCisrKyBiL2ZzL2pmcy9qZnNfaW5vZGUuaApAQCAtMjAsNiArMjAsOCBAQAogCiBleHRlcm4gc3RydWN0IGlub2RlICppYWxsb2Moc3RydWN0IGlub2RlICosIHVtb2RlX3QpOwogZXh0ZXJuIGludCBqZnNfZnN5bmMoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOworZXh0ZXJuIGludCBqZnNfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosCisJCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgamZzX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBqZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogZXh0ZXJuIGludCBqZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlKiwgaW50KTsKQEAgLTI5LDYgKzMxLDcgQEAKIGV4dGVybiB2b2lkIGpmc190cnVuY2F0ZV9ub2xvY2soc3RydWN0IGlub2RlICosIGxvZmZfdCk7CiBleHRlcm4gdm9pZCBqZnNfZnJlZV96ZXJvX2xpbmsoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmpmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CitleHRlcm4gdm9pZCBqZnNfc2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBpbm9kZSAqKTsKIAogZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX2FvcHM7CiBleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19sb2NrLmggYi9mcy9qZnMvamZzX2xvY2suaAppbmRleCAxMGFkMWQwLi43MGFjOWY3IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2xvY2suaAorKysgYi9mcy9qZnMvamZzX2xvY2suaApAQCAtMjAsNiArMjAsNyBAQAogI2RlZmluZSBfSF9KRlNfTE9DSwogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2xvZ21nci5jIGIvZnMvamZzL2pmc19sb2dtZ3IuYwppbmRleCBkMjdiYWM2Li4wYjM0OGIxIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2xvZ21nci5jCisrKyBiL2ZzL2pmcy9qZnNfbG9nbWdyLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4JCS8qIGZvciBzeW5jX2Jsb2NrZGV2KCkgKi8KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CkBAIC04MSwxNSArODIsMTQgQEAKICAqLwogc3RhdGljIHN0cnVjdCBsYnVmICpsb2dfcmVkcml2ZV9saXN0Owogc3RhdGljIERFRklORV9TUElOTE9DSyhsb2dfcmVkcml2ZV9sb2NrKTsKLURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGpmc19JT190aHJlYWRfd2FpdCk7CiAKIAogLyoKICAqCWxvZyByZWFkL3dyaXRlIHNlcmlhbGl6YXRpb24gKHBlciBsb2cpCiAgKi8KLSNkZWZpbmUgTE9HX0xPQ0tfSU5JVChsb2cpCWluaXRfTVVURVgoJihsb2cpLT5sb2dsb2NrKQotI2RlZmluZSBMT0dfTE9DSyhsb2cpCQlkb3duKCYoKGxvZyktPmxvZ2xvY2spKQotI2RlZmluZSBMT0dfVU5MT0NLKGxvZykJCXVwKCYoKGxvZyktPmxvZ2xvY2spKQorI2RlZmluZSBMT0dfTE9DS19JTklUKGxvZykJbXV0ZXhfaW5pdCgmKGxvZyktPmxvZ2xvY2spCisjZGVmaW5lIExPR19MT0NLKGxvZykJCW11dGV4X2xvY2soJigobG9nKS0+bG9nbG9jaykpCisjZGVmaW5lIExPR19VTkxPQ0sobG9nKQkJbXV0ZXhfdW5sb2NrKCYoKGxvZyktPmxvZ2xvY2spKQogCiAKIC8qCkBAIC0xMTA1LDExICsxMTA1LDEwIEBACiAJCX0KIAl9CiAKLQlpZiAoIShsb2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZzX2xvZyksIEdGUF9LRVJORUwpKSkgeworCWlmICghKGxvZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBqZnNfbG9nKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCXVwKCZqZnNfbG9nX3NlbSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQobG9nLCAwLCBzaXplb2Yoc3RydWN0IGpmc19sb2cpKTsKIAlJTklUX0xJU1RfSEVBRCgmbG9nLT5zYl9saXN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsb2ctPnN5bmN3YWl0KTsKIApAQCAtMTE4MSw5ICsxMTgwLDggQEAKIAlzdHJ1Y3QgamZzX2xvZyAqbG9nOwogCWludCByYzsKIAotCWlmICghKGxvZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqZnNfbG9nKSwgR0ZQX0tFUk5FTCkpKQorCWlmICghKGxvZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBqZnNfbG9nKSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQobG9nLCAwLCBzaXplb2Yoc3RydWN0IGpmc19sb2cpKTsKIAlJTklUX0xJU1RfSEVBRCgmbG9nLT5zYl9saXN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsb2ctPnN5bmN3YWl0KTsKIApAQCAtMTIxNiwxMiArMTIxNCwxMSBAQAogCiAJZG93bigmamZzX2xvZ19zZW0pOwogCWlmICghZHVtbXlfbG9nKSB7Ci0JCWR1bW15X2xvZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqZnNfbG9nKSwgR0ZQX0tFUk5FTCk7CisJCWR1bW15X2xvZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBqZnNfbG9nKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZHVtbXlfbG9nKSB7CiAJCQl1cCgmamZzX2xvZ19zZW0pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJbWVtc2V0KGR1bW15X2xvZywgMCwgc2l6ZW9mKHN0cnVjdCBqZnNfbG9nKSk7CiAJCUlOSVRfTElTVF9IRUFEKCZkdW1teV9sb2ctPnNiX2xpc3QpOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkdW1teV9sb2ctPnN5bmN3YWl0KTsKIAkJZHVtbXlfbG9nLT5ub19pbnRlZ3JpdHkgPSAxOwpAQCAtMTk4MCw3ICsxOTc3LDcgQEAKIAlsb2dfcmVkcml2ZV9saXN0ID0gYnA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nX3JlZHJpdmVfbG9jaywgZmxhZ3MpOwogCi0Jd2FrZV91cCgmamZzX0lPX3RocmVhZF93YWl0KTsKKwl3YWtlX3VwX3Byb2Nlc3MoamZzSU90aHJlYWQpOwogfQogCiAKQEAgLTIzNDcsMTMgKzIzNDQsNyBAQAogewogCXN0cnVjdCBsYnVmICpicDsKIAotCWRhZW1vbml6ZSgiamZzSU8iKTsKLQotCWNvbXBsZXRlKCZqZnNJT3dhaXQpOwotCiAJZG8gewotCQlERUNMQVJFX1dBSVRRVUVVRSh3cSwgY3VycmVudCk7Ci0KIAkJc3Bpbl9sb2NrX2lycSgmbG9nX3JlZHJpdmVfbG9jayk7CiAJCXdoaWxlICgoYnAgPSBsb2dfcmVkcml2ZV9saXN0KSAhPSAwKSB7CiAJCQlsb2dfcmVkcml2ZV9saXN0ID0gYnAtPmxfcmVkcml2ZV9uZXh0OwpAQCAtMjM2MiwyMSArMjM1MywxOSBAQAogCQkJbGJtU3RhcnRJTyhicCk7CiAJCQlzcGluX2xvY2tfaXJxKCZsb2dfcmVkcml2ZV9sb2NrKTsKIAkJfQorCQlzcGluX3VubG9ja19pcnEoJmxvZ19yZWRyaXZlX2xvY2spOworCiAJCWlmIChmcmVlemluZyhjdXJyZW50KSkgewotCQkJc3Bpbl91bmxvY2tfaXJxKCZsb2dfcmVkcml2ZV9sb2NrKTsKIAkJCXJlZnJpZ2VyYXRvcigpOwogCQl9IGVsc2UgewotCQkJYWRkX3dhaXRfcXVldWUoJmpmc19JT190aHJlYWRfd2FpdCwgJndxKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmxvZ19yZWRyaXZlX2xvY2spOwogCQkJc2NoZWR1bGUoKTsKIAkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmpmc19JT190aHJlYWRfd2FpdCwgJndxKTsKIAkJfQotCX0gd2hpbGUgKCFqZnNfc3RvcF90aHJlYWRzKTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAogCWpmc19pbmZvKCJqZnNJT1dhaXQgYmVpbmcga2lsbGVkISIpOwotCWNvbXBsZXRlX2FuZF9leGl0KCZqZnNJT3dhaXQsIDApOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19sb2dtZ3IuaCBiL2ZzL2pmcy9qZnNfbG9nbWdyLmgKaW5kZXggZTQ5NzhiNS4uOGM2OTA5YiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19sb2dtZ3IuaAorKysgYi9mcy9qZnMvamZzX2xvZ21nci5oCkBAIC0zODksNyArMzg5LDcgQEAKIAlpbnQgZW9yOwkJLyogNDogZW9yIG9mIGxhc3QgcmVjb3JkIGluIGVvbCBwYWdlICovCiAJc3RydWN0IGxidWYgKmJwOwkvKiA0OiBjdXJyZW50IGxvZyBwYWdlIGJ1ZmZlciAqLwogCi0Jc3RydWN0IHNlbWFwaG9yZSBsb2dsb2NrOwkvKiA0OiBsb2cgd3JpdGUgc2VyaWFsaXphdGlvbiBsb2NrICovCisJc3RydWN0IG11dGV4IGxvZ2xvY2s7CS8qIDQ6IGxvZyB3cml0ZSBzZXJpYWxpemF0aW9uIGxvY2sgKi8KIAogCS8qIHN5bmNwdCAqLwogCWludCBuZXh0c3luYzsJCS8qIDQ6IGJ5dGVzIHRvIHdyaXRlIGJlZm9yZSBuZXh0IHN5bmNwdCAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IDhhNTM5ODEuLjVmYmFlYWEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYworKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTEwNCwxMCArMTA0LDkgQEAKIAlpZiAoUGFnZVByaXZhdGUocGFnZSkpCiAJCWEgPSBtcF9hbmNob3IocGFnZSk7CiAJZWxzZSB7Ci0JCWEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWV0YV9hbmNob3IpLCBHRlBfTk9GUyk7CisJCWEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWV0YV9hbmNob3IpLCBHRlBfTk9GUyk7CiAJCWlmICghYSkKIAkJCXJldHVybiAtRU5PTUVNOwotCQltZW1zZXQoYSwgMCwgc2l6ZW9mKHN0cnVjdCBtZXRhX2FuY2hvcikpOwogCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsICh1bnNpZ25lZCBsb25nKWEpOwogCQlTZXRQYWdlUHJpdmF0ZShwYWdlKTsKIAkJa21hcChwYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfc3VwZXJibG9jay5oIGIvZnMvamZzL2pmc19zdXBlcmJsb2NrLmgKaW5kZXggZmNmNzgxYi4uNjgyY2YxYSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19zdXBlcmJsb2NrLmgKKysrIGIvZnMvamZzL2pmc19zdXBlcmJsb2NrLmgKQEAgLTExMywxMiArMTEzLDkgQEAKIGV4dGVybiBpbnQgamZzX21vdW50X3J3KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwogZXh0ZXJuIGludCBqZnNfdW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBpbnQgamZzX3Vtb3VudF9ydyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci0KLWV4dGVybiBpbnQgamZzX3N0b3BfdGhyZWFkczsKLWV4dGVybiBzdHJ1Y3QgY29tcGxldGlvbiBqZnNJT3dhaXQ7Ci1leHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgamZzX0lPX3RocmVhZF93YWl0OwotZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGpmc19jb21taXRfdGhyZWFkX3dhaXQ7Ci1leHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgamZzX3N5bmNfdGhyZWFkX3dhaXQ7CiBleHRlcm4gaW50IGpmc19leHRlbmRmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgczY0LCBpbnQpOwogCitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpqZnNJT3RocmVhZDsKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmpmc1N5bmNUaHJlYWQ7CisKICNlbmRpZiAvKl9IX0pGU19TVVBFUkJMT0NLICovCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3R4bm1nci5jIGIvZnMvamZzL2pmc190eG5tZ3IuYwppbmRleCAyZGRiNmI4Li5hYzNkNjY5IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3R4bm1nci5jCisrKyBiL2ZzL2pmcy9qZnNfdHhubWdyLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSAiamZzX2luY29yZS5oIgogI2luY2x1ZGUgImpmc19pbm9kZS5oIgogI2luY2x1ZGUgImpmc19maWxzeXMuaCIKQEAgLTEyMSw4ICsxMjIsNyBAQAogI2RlZmluZSBMQVpZX0xPQ0soZmxhZ3MpCXNwaW5fbG9ja19pcnFzYXZlKCZUeEFuY2hvci5MYXp5TG9jaywgZmxhZ3MpCiAjZGVmaW5lIExBWllfVU5MT0NLKGZsYWdzKSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZUeEFuY2hvci5MYXp5TG9jaywgZmxhZ3MpCiAKLURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGpmc19zeW5jX3RocmVhZF93YWl0KTsKLURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGpmc19jb21taXRfdGhyZWFkX3dhaXQpOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGpmc19jb21taXRfdGhyZWFkX3dhaXQpOwogc3RhdGljIGludCBqZnNfY29tbWl0X3RocmVhZF93YWtpbmc7CiAKIC8qCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlpZiAoKCsrVHhBbmNob3IudGxvY2tzSW5Vc2UgPiBUeExvY2tIV00pICYmIChqZnNfdGxvY2tzX2xvdyA9PSAwKSkgewogCQlqZnNfaW5mbygidHhMb2NrQWxsb2MgdGxvY2tzIGxvdyIpOwogCQlqZnNfdGxvY2tzX2xvdyA9IDE7Ci0JCXdha2VfdXAoJmpmc19zeW5jX3RocmVhZF93YWl0KTsKKwkJd2FrZV91cF9wcm9jZXNzKGpmc1N5bmNUaHJlYWQpOwogCX0KIAogCXJldHVybiBsaWQ7CkBAIC0yNzQzLDEwICsyNzQzLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBqZnNfc2JfaW5mbyAqc2JpOwogCi0JZGFlbW9uaXplKCJqZnNDb21taXQiKTsKLQotCWNvbXBsZXRlKCZqZnNJT3dhaXQpOwotCiAJZG8gewogCQlMQVpZX0xPQ0soZmxhZ3MpOwogCQlqZnNfY29tbWl0X3RocmVhZF93YWtpbmcgPSAwOwkvKiBPSyB0byB3YWtlIGFub3RoZXIgdGhyZWFkICovCkBAIC0yODA2LDEzICsyODAyLDEzIEBACiAJCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAkJCXJlbW92ZV93YWl0X3F1ZXVlKCZqZnNfY29tbWl0X3RocmVhZF93YWl0LCAmd3EpOwogCQl9Ci0JfSB3aGlsZSAoIWpmc19zdG9wX3RocmVhZHMpOworCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZUeEFuY2hvci51bmxvY2tfcXVldWUpKQogCQlqZnNfZXJyKCJqZnNfbGF6eWNvbW1pdCBiZWluZyBraWxsZWQgdy9wZW5kaW5nIHRyYW5zYWN0aW9ucyEiKTsKIAllbHNlCiAJCWpmc19pbmZvKCJqZnNfbGF6eWNvbW1pdCBiZWluZyBraWxsZWRcbiIpOwotCWNvbXBsZXRlX2FuZF9leGl0KCZqZnNJT3dhaXQsIDApOworCXJldHVybiAwOwogfQogCiB2b2lkIHR4TGF6eVVubG9jayhzdHJ1Y3QgdGJsb2NrICogdGJsaykKQEAgLTI4NzYsMTAgKzI4NzIsMTAgQEAKIAkJICovCiAJCVRYTl9VTkxPQ0soKTsKIAkJdGlkID0gdHhCZWdpbihpcC0+aV9zYiwgQ09NTUlUX0lOT0RFIHwgQ09NTUlUX0ZPUkNFKTsKLQkJZG93bigmamZzX2lwLT5jb21taXRfc2VtKTsKKwkJbXV0ZXhfbG9jaygmamZzX2lwLT5jb21taXRfbXV0ZXgpOwogCQl0eENvbW1pdCh0aWQsIDEsICZpcCwgMCk7CiAJCXR4RW5kKHRpZCk7Ci0JCXVwKCZqZnNfaXAtPmNvbW1pdF9zZW0pOworCQltdXRleF91bmxvY2soJmpmc19pcC0+Y29tbWl0X211dGV4KTsKIAkJLyoKIAkJICogSnVzdCB0byBiZSBzYWZlLiAgSSBkb24ndCBrbm93IGhvdwogCQkgKiBsb25nIHdlIGNhbiBydW4gd2l0aG91dCBibG9ja2luZwpAQCAtMjkzMiwxMCArMjkyOCw2IEBACiAJaW50IHJjOwogCXRpZF90IHRpZDsKIAotCWRhZW1vbml6ZSgiamZzU3luYyIpOwotCi0JY29tcGxldGUoJmpmc0lPd2FpdCk7Ci0KIAlkbyB7CiAJCS8qCiAJCSAqIHdyaXRlIGVhY2ggaW5vZGUgb24gdGhlIGFub255bW91cyBpbm9kZSBsaXN0CkBAIC0yOTUyLDcgKzI5NDQsNyBAQAogCQkJCSAqIElub2RlIGlzIGJlaW5nIGZyZWVkCiAJCQkJICovCiAJCQkJbGlzdF9kZWxfaW5pdCgmamZzX2lwLT5hbm9uX2lub2RlX2xpc3QpOwotCQkJfSBlbHNlIGlmICghIGRvd25fdHJ5bG9jaygmamZzX2lwLT5jb21taXRfc2VtKSkgeworCQkJfSBlbHNlIGlmICghICFtdXRleF90cnlsb2NrKCZqZnNfaXAtPmNvbW1pdF9tdXRleCkpIHsKIAkJCQkvKgogCQkJCSAqIGlub2RlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGFub255bW91cyBsaXN0CiAJCQkJICogd2hlbiBpdCBpcyBjb21taXR0ZWQKQEAgLTI5NjEsNyArMjk1Myw3IEBACiAJCQkJdGlkID0gdHhCZWdpbihpcC0+aV9zYiwgQ09NTUlUX0lOT0RFKTsKIAkJCQlyYyA9IHR4Q29tbWl0KHRpZCwgMSwgJmlwLCAwKTsKIAkJCQl0eEVuZCh0aWQpOwotCQkJCXVwKCZqZnNfaXAtPmNvbW1pdF9zZW0pOworCQkJCW11dGV4X3VubG9jaygmamZzX2lwLT5jb21taXRfbXV0ZXgpOwogCiAJCQkJaXB1dChpcCk7CiAJCQkJLyoKQEAgLTI5NzEsNyArMjk2Myw3IEBACiAJCQkJY29uZF9yZXNjaGVkKCk7CiAJCQkJVFhOX0xPQ0soKTsKIAkJCX0gZWxzZSB7Ci0JCQkJLyogV2UgY2FuJ3QgZ2V0IHRoZSBjb21taXQgc2VtYXBob3JlLiAgSXQgbWF5CisJCQkJLyogV2UgY2FuJ3QgZ2V0IHRoZSBjb21taXQgbXV0ZXguICBJdCBtYXkKIAkJCQkgKiBiZSBoZWxkIGJ5IGEgdGhyZWFkIHdhaXRpbmcgZm9yIHRsb2NrJ3MKIAkJCQkgKiBzbyBsZXQncyBub3QgYmxvY2sgaGVyZS4gIFNhdmUgaXQgdG8KIAkJCQkgKiBwdXQgYmFjayBvbiB0aGUgYW5vbl9saXN0LgpAQCAtMjk5NiwxOSArMjk4OCwxNSBAQAogCQkJVFhOX1VOTE9DSygpOwogCQkJcmVmcmlnZXJhdG9yKCk7CiAJCX0gZWxzZSB7Ci0JCQlERUNMQVJFX1dBSVRRVUVVRSh3cSwgY3VycmVudCk7Ci0KLQkJCWFkZF93YWl0X3F1ZXVlKCZqZnNfc3luY190aHJlYWRfd2FpdCwgJndxKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQlUWE5fVU5MT0NLKCk7CiAJCQlzY2hlZHVsZSgpOwogCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmamZzX3N5bmNfdGhyZWFkX3dhaXQsICZ3cSk7CiAJCX0KLQl9IHdoaWxlICghamZzX3N0b3BfdGhyZWFkcyk7CisJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAKIAlqZnNfaW5mbygiamZzX3N5bmMgYmVpbmcga2lsbGVkIik7Ci0JY29tcGxldGVfYW5kX2V4aXQoJmpmc0lPd2FpdCwgMCk7CisJcmV0dXJuIDA7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19KRlNfREVCVUcpCmRpZmYgLS1naXQgYS9mcy9qZnMvbmFtZWkuYyBiL2ZzL2pmcy9uYW1laS5jCmluZGV4IDRhYmJlODYuLjMwOWNlZTUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC0xMDQsOCArMTA0LDggQEAKIAogCXRpZCA9IHR4QmVnaW4oZGlwLT5pX3NiLCAwKTsKIAotCWRvd24oJkpGU19JUChkaXApLT5jb21taXRfc2VtKTsKLQlkb3duKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKKwltdXRleF9sb2NrKCZKRlNfSVAoZGlwKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF9sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCiAJcmMgPSBqZnNfaW5pdF9hY2wodGlkLCBpcCwgZGlwKTsKIAlpZiAocmMpCkBAIC0xNjUsOCArMTY1LDggQEAKIAogICAgICAgb3V0MzoKIAl0eEVuZCh0aWQpOwotCXVwKCZKRlNfSVAoZGlwKS0+Y29tbWl0X3NlbSk7Ci0JdXAoJkpGU19JUChpcCktPmNvbW1pdF9zZW0pOworCW11dGV4X3VubG9jaygmSkZTX0lQKGRpcCktPmNvbW1pdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCWlmIChyYykgewogCQlmcmVlX2VhX3dtYXAoaXApOwogCQlpcC0+aV9ubGluayA9IDA7CkBAIC0yMzgsOCArMjM4LDggQEAKIAogCXRpZCA9IHR4QmVnaW4oZGlwLT5pX3NiLCAwKTsKIAotCWRvd24oJkpGU19JUChkaXApLT5jb21taXRfc2VtKTsKLQlkb3duKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKKwltdXRleF9sb2NrKCZKRlNfSVAoZGlwKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF9sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCiAJcmMgPSBqZnNfaW5pdF9hY2wodGlkLCBpcCwgZGlwKTsKIAlpZiAocmMpCkBAIC0zMDAsOCArMzAwLDggQEAKIAogICAgICAgb3V0MzoKIAl0eEVuZCh0aWQpOwotCXVwKCZKRlNfSVAoZGlwKS0+Y29tbWl0X3NlbSk7Ci0JdXAoJkpGU19JUChpcCktPmNvbW1pdF9zZW0pOworCW11dGV4X3VubG9jaygmSkZTX0lQKGRpcCktPmNvbW1pdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCWlmIChyYykgewogCQlmcmVlX2VhX3dtYXAoaXApOwogCQlpcC0+aV9ubGluayA9IDA7CkBAIC0zNjUsOCArMzY1LDggQEAKIAogCXRpZCA9IHR4QmVnaW4oZGlwLT5pX3NiLCAwKTsKIAotCWRvd24oJkpGU19JUChkaXApLT5jb21taXRfc2VtKTsKLQlkb3duKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKKwltdXRleF9sb2NrKCZKRlNfSVAoZGlwKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF9sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCiAJaXBsaXN0WzBdID0gZGlwOwogCWlwbGlzdFsxXSA9IGlwOwpAQCAtMzg0LDggKzM4NCw4IEBACiAJCWlmIChyYyA9PSAtRUlPKQogCQkJdHhBYm9ydCh0aWQsIDEpOwogCQl0eEVuZCh0aWQpOwotCQl1cCgmSkZTX0lQKGRpcCktPmNvbW1pdF9zZW0pOwotCQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGRpcCktPmNvbW1pdF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAogCQlnb3RvIG91dDI7CiAJfQpAQCAtNDIyLDggKzQyMiw4IEBACiAKIAl0eEVuZCh0aWQpOwogCi0JdXAoJkpGU19JUChkaXApLT5jb21taXRfc2VtKTsKLQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoZGlwKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF91bmxvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAKIAkvKgogCSAqIFRydW5jYXRpbmcgdGhlIGRpcmVjdG9yeSBpbmRleCB0YWJsZSBpcyBub3QgZ3VhcmFudGVlZC4gIEl0CkBAIC00ODgsOCArNDg4LDggQEAKIAogCXRpZCA9IHR4QmVnaW4oZGlwLT5pX3NiLCAwKTsKIAotCWRvd24oJkpGU19JUChkaXApLT5jb21taXRfc2VtKTsKLQlkb3duKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKKwltdXRleF9sb2NrKCZKRlNfSVAoZGlwKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF9sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCiAJaXBsaXN0WzBdID0gZGlwOwogCWlwbGlzdFsxXSA9IGlwOwpAQCAtNTAzLDggKzUwMyw4IEBACiAJCWlmIChyYyA9PSAtRUlPKQogCQkJdHhBYm9ydCh0aWQsIDEpOwkvKiBNYXJrcyBGUyBEaXJ0eSAqLwogCQl0eEVuZCh0aWQpOwotCQl1cCgmSkZTX0lQKGRpcCktPmNvbW1pdF9zZW0pOwotCQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGRpcCktPmNvbW1pdF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJSVdSSVRFX1VOTE9DSyhpcCk7CiAJCWdvdG8gb3V0MTsKIAl9CkBAIC01MjcsOCArNTI3LDggQEAKIAkJaWYgKChuZXdfc2l6ZSA9IGNvbW1pdFplcm9MaW5rKHRpZCwgaXApKSA8IDApIHsKIAkJCXR4QWJvcnQodGlkLCAxKTsJLyogTWFya3MgRlMgRGlydHkgKi8KIAkJCXR4RW5kKHRpZCk7Ci0JCQl1cCgmSkZTX0lQKGRpcCktPmNvbW1pdF9zZW0pOwotCQkJdXAoJkpGU19JUChpcCktPmNvbW1pdF9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoZGlwKS0+Y29tbWl0X211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJCUlXUklURV9VTkxPQ0soaXApOwogCQkJcmMgPSBuZXdfc2l6ZTsKIAkJCWdvdG8gb3V0MTsKQEAgLTU1NiwxMyArNTU2LDEzIEBACiAKIAl0eEVuZCh0aWQpOwogCi0JdXAoJkpGU19JUChkaXApLT5jb21taXRfc2VtKTsKLQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoZGlwKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF91bmxvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAKIAogCXdoaWxlIChuZXdfc2l6ZSAmJiAocmMgPT0gMCkpIHsKIAkJdGlkID0gdHhCZWdpbihkaXAtPmlfc2IsIDApOwotCQlkb3duKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKKwkJbXV0ZXhfbG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJbmV3X3NpemUgPSB4dFRydW5jYXRlX3BtYXAodGlkLCBpcCwgbmV3X3NpemUpOwogCQlpZiAobmV3X3NpemUgPCAwKSB7CiAJCQl0eEFib3J0KHRpZCwgMSk7CS8qIE1hcmtzIEZTIERpcnR5ICovCkBAIC01NzAsNyArNTcwLDcgQEAKIAkJfSBlbHNlCiAJCQlyYyA9IHR4Q29tbWl0KHRpZCwgMiwgJmlwbGlzdFswXSwgQ09NTUlUX1NZTkMpOwogCQl0eEVuZCh0aWQpOwotCQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAl9CiAKIAlpZiAoaXAtPmlfbmxpbmsgPT0gMCkKQEAgLTgwNSw4ICs4MDUsOCBAQAogCiAJdGlkID0gdHhCZWdpbihpcC0+aV9zYiwgMCk7CiAKLQlkb3duKCZKRlNfSVAoZGlyKS0+Y29tbWl0X3NlbSk7Ci0JZG93bigmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfbG9jaygmSkZTX0lQKGRpciktPmNvbW1pdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAogCS8qCiAJICogc2NhbiBwYXJlbnQgZGlyZWN0b3J5IGZvciBlbnRyeS9mcmVlc3BhY2UKQEAgLTg0Nyw4ICs4NDcsOCBAQAogICAgICAgb3V0OgogCXR4RW5kKHRpZCk7CiAKLQl1cCgmSkZTX0lQKGRpciktPmNvbW1pdF9zZW0pOwotCXVwKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKKwltdXRleF91bmxvY2soJkpGU19JUChkaXIpLT5jb21taXRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAogCWpmc19pbmZvKCJqZnNfbGluazogcmM6JWQiLCByYyk7CiAJcmV0dXJuIHJjOwpAQCAtOTE2LDggKzkxNiw4IEBACiAKIAl0aWQgPSB0eEJlZ2luKGRpcC0+aV9zYiwgMCk7CiAKLQlkb3duKCZKRlNfSVAoZGlwKS0+Y29tbWl0X3NlbSk7Ci0JZG93bigmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfbG9jaygmSkZTX0lQKGRpcCktPmNvbW1pdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAogCXJjID0gamZzX2luaXRfc2VjdXJpdHkodGlkLCBpcCwgZGlwKTsKIAlpZiAocmMpCkBAIC0xMDM3LDggKzEwMzcsOCBAQAogCiAgICAgICBvdXQzOgogCXR4RW5kKHRpZCk7Ci0JdXAoJkpGU19JUChkaXApLT5jb21taXRfc2VtKTsKLQl1cCgmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoZGlwKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF91bmxvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAJaWYgKHJjKSB7CiAJCWZyZWVfZWFfd21hcChpcCk7CiAJCWlwLT5pX25saW5rID0gMDsKQEAgLTExNDEsMTMgKzExNDEsMTMgQEAKIAkgKi8KIAl0aWQgPSB0eEJlZ2luKG5ld19kaXItPmlfc2IsIDApOwogCi0JZG93bigmSkZTX0lQKG5ld19kaXIpLT5jb21taXRfc2VtKTsKLQlkb3duKCZKRlNfSVAob2xkX2lwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfbG9jaygmSkZTX0lQKG5ld19kaXIpLT5jb21taXRfbXV0ZXgpOworCW11dGV4X2xvY2soJkpGU19JUChvbGRfaXApLT5jb21taXRfbXV0ZXgpOwogCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCi0JCWRvd24oJkpGU19JUChvbGRfZGlyKS0+Y29tbWl0X3NlbSk7CisJCW11dGV4X2xvY2soJkpGU19JUChvbGRfZGlyKS0+Y29tbWl0X211dGV4KTsKIAogCWlmIChuZXdfaXApIHsKLQkJZG93bigmSkZTX0lQKG5ld19pcCktPmNvbW1pdF9zZW0pOworCQltdXRleF9sb2NrKCZKRlNfSVAobmV3X2lwKS0+Y29tbWl0X211dGV4KTsKIAkJLyoKIAkJICogQ2hhbmdlIGV4aXN0aW5nIGRpcmVjdG9yeSBlbnRyeSB0byBuZXcgaW5vZGUgbnVtYmVyCiAJCSAqLwpAQCAtMTE2MCwxMCArMTE2MCwxMCBAQAogCQlpZiAoU19JU0RJUihuZXdfaXAtPmlfbW9kZSkpIHsKIAkJCW5ld19pcC0+aV9ubGluay0tOwogCQkJaWYgKG5ld19pcC0+aV9ubGluaykgewotCQkJCXVwKCZKRlNfSVAobmV3X2RpciktPmNvbW1pdF9zZW0pOwotCQkJCXVwKCZKRlNfSVAob2xkX2lwKS0+Y29tbWl0X3NlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAobmV3X2RpciktPmNvbW1pdF9tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAob2xkX2lwKS0+Y29tbWl0X211dGV4KTsKIAkJCQlpZiAob2xkX2RpciAhPSBuZXdfZGlyKQotCQkJCQl1cCgmSkZTX0lQKG9sZF9kaXIpLT5jb21taXRfc2VtKTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAob2xkX2RpciktPmNvbW1pdF9tdXRleCk7CiAJCQkJaWYgKCFTX0lTRElSKG9sZF9pcC0+aV9tb2RlKSAmJiBuZXdfaXApCiAJCQkJCUlXUklURV9VTkxPQ0sobmV3X2lwKTsKIAkJCQlqZnNfZXJyb3IobmV3X2lwLT5pX3NiLApAQCAtMTI4MiwxNiArMTI4MiwxNiBAQAogICAgICAgb3V0NDoKIAl0eEVuZCh0aWQpOwogCi0JdXAoJkpGU19JUChuZXdfZGlyKS0+Y29tbWl0X3NlbSk7Ci0JdXAoJkpGU19JUChvbGRfaXApLT5jb21taXRfc2VtKTsKKwltdXRleF91bmxvY2soJkpGU19JUChuZXdfZGlyKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF91bmxvY2soJkpGU19JUChvbGRfaXApLT5jb21taXRfbXV0ZXgpOwogCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCi0JCXVwKCZKRlNfSVAob2xkX2RpciktPmNvbW1pdF9zZW0pOworCQltdXRleF91bmxvY2soJkpGU19JUChvbGRfZGlyKS0+Y29tbWl0X211dGV4KTsKIAlpZiAobmV3X2lwKQotCQl1cCgmSkZTX0lQKG5ld19pcCktPmNvbW1pdF9zZW0pOworCQltdXRleF91bmxvY2soJkpGU19JUChuZXdfaXApLT5jb21taXRfbXV0ZXgpOwogCiAJd2hpbGUgKG5ld19zaXplICYmIChyYyA9PSAwKSkgewogCQl0aWQgPSB0eEJlZ2luKG5ld19pcC0+aV9zYiwgMCk7Ci0JCWRvd24oJkpGU19JUChuZXdfaXApLT5jb21taXRfc2VtKTsKKwkJbXV0ZXhfbG9jaygmSkZTX0lQKG5ld19pcCktPmNvbW1pdF9tdXRleCk7CiAJCW5ld19zaXplID0geHRUcnVuY2F0ZV9wbWFwKHRpZCwgbmV3X2lwLCBuZXdfc2l6ZSk7CiAJCWlmIChuZXdfc2l6ZSA8IDApIHsKIAkJCXR4QWJvcnQodGlkLCAxKTsKQEAgLTEyOTksNyArMTI5OSw3IEBACiAJCX0gZWxzZQogCQkJcmMgPSB0eENvbW1pdCh0aWQsIDEsICZuZXdfaXAsIENPTU1JVF9TWU5DKTsKIAkJdHhFbmQodGlkKTsKLQkJdXAoJkpGU19JUChuZXdfaXApLT5jb21taXRfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAobmV3X2lwKS0+Y29tbWl0X211dGV4KTsKIAl9CiAJaWYgKG5ld19pcCAmJiAobmV3X2lwLT5pX25saW5rID09IDApKQogCQlzZXRfY2ZsYWcoQ09NTUlUX05vbGluaywgbmV3X2lwKTsKQEAgLTEzNjEsOCArMTM2MSw4IEBACiAKIAl0aWQgPSB0eEJlZ2luKGRpci0+aV9zYiwgMCk7CiAKLQlkb3duKCZKRlNfSVAoZGlyKS0+Y29tbWl0X3NlbSk7Ci0JZG93bigmSkZTX0lQKGlwKS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfbG9jaygmSkZTX0lQKGRpciktPmNvbW1pdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAogCXJjID0gamZzX2luaXRfYWNsKHRpZCwgaXAsIGRpcik7CiAJaWYgKHJjKQpAQCAtMTQwNyw4ICsxNDA3LDggQEAKIAogICAgICAgb3V0MzoKIAl0eEVuZCh0aWQpOwotCXVwKCZKRlNfSVAoaXApLT5jb21taXRfc2VtKTsKLQl1cCgmSkZTX0lQKGRpciktPmNvbW1pdF9zZW0pOworCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKKwltdXRleF91bmxvY2soJkpGU19JUChkaXIpLT5jb21taXRfbXV0ZXgpOwogCWlmIChyYykgewogCQlmcmVlX2VhX3dtYXAoaXApOwogCQlpcC0+aV9ubGluayA9IDA7CkBAIC0xNTIzLDYgKzE1MjMsNyBAQAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBqZnNfcmVhZGRpciwKIAkuZnN5bmMJCT0gamZzX2ZzeW5jLAorCS5pb2N0bAkJPSBqZnNfaW9jdGwsCiB9OwogCiBzdGF0aWMgaW50IGpmc19jaV9oYXNoKHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IHFzdHIgKnRoaXMpCmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IDhkMzFmMTMuLmRiNmY0MWQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC01NCwxMSArNTUsOSBAQAogbW9kdWxlX3BhcmFtKGNvbW1pdF90aHJlYWRzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhjb21taXRfdGhyZWFkcywgIk51bWJlciBvZiBjb21taXQgdGhyZWFkcyIpOwogCi1pbnQgamZzX3N0b3BfdGhyZWFkczsKLXN0YXRpYyBwaWRfdCBqZnNJT3RocmVhZDsKLXN0YXRpYyBwaWRfdCBqZnNDb21taXRUaHJlYWRbTUFYX0NPTU1JVF9USFJFQURTXTsKLXN0YXRpYyBwaWRfdCBqZnNTeW5jVGhyZWFkOwotREVDTEFSRV9DT01QTEVUSU9OKGpmc0lPd2FpdCk7CitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpqZnNDb21taXRUaHJlYWRbTUFYX0NPTU1JVF9USFJFQURTXTsKK3N0cnVjdCB0YXNrX3N0cnVjdCAqamZzSU90aHJlYWQ7CitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmpmc1N5bmNUaHJlYWQ7CiAKICNpZmRlZiBDT05GSUdfSkZTX0RFQlVHCiBpbnQgamZzbG9nbGV2ZWwgPSBKRlNfTE9HTEVWRUxfV0FSTjsKQEAgLTE5NSw3ICsxOTQsNyBAQAogZW51bSB7CiAJT3B0X2ludGVncml0eSwgT3B0X25vaW50ZWdyaXR5LCBPcHRfaW9jaGFyc2V0LCBPcHRfcmVzaXplLAogCU9wdF9yZXNpemVfbm9zaXplLCBPcHRfZXJyb3JzLCBPcHRfaWdub3JlLCBPcHRfZXJyLCBPcHRfcXVvdGEsCi0JT3B0X3VzcnF1b3RhLCBPcHRfZ3JwcXVvdGEKKwlPcHRfdXNycXVvdGEsIE9wdF9ncnBxdW90YSwgT3B0X3VpZCwgT3B0X2dpZCwgT3B0X3VtYXNrCiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC0yMDksNiArMjA4LDkgQEAKIAl7T3B0X2lnbm9yZSwgInF1b3RhIn0sCiAJe09wdF91c3JxdW90YSwgInVzcnF1b3RhIn0sCiAJe09wdF9ncnBxdW90YSwgImdycHF1b3RhIn0sCisJe09wdF91aWQsICJ1aWQ9JXUifSwKKwl7T3B0X2dpZCwgImdpZD0ldSJ9LAorCXtPcHRfdW1hc2ssICJ1bWFzaz0ldSJ9LAogCXtPcHRfZXJyLCBOVUxMfQogfTsKIApAQCAtMzEzLDcgKzMxNSwyOSBAQAogCQkJICAgICAgICJKRlM6IHF1b3RhIG9wZXJhdGlvbnMgbm90IHN1cHBvcnRlZFxuIik7CiAJCQlicmVhazsKICNlbmRpZgotCisJCWNhc2UgT3B0X3VpZDoKKwkJeworCQkJY2hhciAqdWlkID0gYXJnc1swXS5mcm9tOworCQkJc2JpLT51aWQgPSBzaW1wbGVfc3RydG91bCh1aWQsICZ1aWQsIDApOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBPcHRfZ2lkOgorCQl7CisJCQljaGFyICpnaWQgPSBhcmdzWzBdLmZyb207CisJCQlzYmktPmdpZCA9IHNpbXBsZV9zdHJ0b3VsKGdpZCwgJmdpZCwgMCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIE9wdF91bWFzazoKKwkJeworCQkJY2hhciAqdW1hc2sgPSBhcmdzWzBdLmZyb207CisJCQlzYmktPnVtYXNrID0gc2ltcGxlX3N0cnRvdWwodW1hc2ssICZ1bWFzaywgOCk7CisJCQlpZiAoc2JpLT51bWFzayAmIH4wNzc3KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJKRlM6IEludmFsaWQgdmFsdWUgb2YgdW1hc2tcbiIpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoImpmczogVW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgogCQkJCQkiIG9yIG1pc3NpbmcgdmFsdWVcbiIsIHApOwpAQCAtMzk2LDEyICs0MjAsMTIgQEAKIAlpZiAoIW5ld192YWxpZF9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KSkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKLQlzYmkgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGpmc19zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJc2JpID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBqZnNfc2JfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT1NQQzsKLQltZW1zZXQoc2JpLCAwLCBzaXplb2YgKHN0cnVjdCBqZnNfc2JfaW5mbykpOwogCXNiLT5zX2ZzX2luZm8gPSBzYmk7CiAJc2JpLT5zYiA9IHNiOworCXNiaS0+dWlkID0gc2JpLT5naWQgPSBzYmktPnVtYXNrID0gLTE7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBtb3VudCBmbGFnIGFuZCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlciAqLwogCWZsYWcgPSBKRlNfRVJSX1JFTU9VTlRfUk87CkBAIC01NjQsMTAgKzU4OCwxNCBAQAogewogCXN0cnVjdCBqZnNfc2JfaW5mbyAqc2JpID0gSkZTX1NCSSh2ZnMtPm1udF9zYik7CiAKKwlpZiAoc2JpLT51aWQgIT0gLTEpCisJCXNlcV9wcmludGYoc2VxLCAiLHVpZD0lZCIsIHNiaS0+dWlkKTsKKwlpZiAoc2JpLT5naWQgIT0gLTEpCisJCXNlcV9wcmludGYoc2VxLCAiLGdpZD0lZCIsIHNiaS0+Z2lkKTsKKwlpZiAoc2JpLT51bWFzayAhPSAtMSkKKwkJc2VxX3ByaW50ZihzZXEsICIsdW1hc2s9JTAzbyIsIHNiaS0+dW1hc2spOwogCWlmIChzYmktPmZsYWcgJiBKRlNfTk9JTlRFR1JJVFkpCiAJCXNlcV9wdXRzKHNlcSwgIixub2ludGVncml0eSIpOwotCWVsc2UKLQkJc2VxX3B1dHMoc2VxLCAiLGludGVncml0eSIpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUVVPVEEpCiAJaWYgKHNiaS0+ZmxhZyAmIEpGU19VU1JRVU9UQSkKQEAgLTYxNyw3ICs2NDUsNyBAQAogCQltZW1zZXQoamZzX2lwLCAwLCBzaXplb2Yoc3RydWN0IGpmc19pbm9kZV9pbmZvKSk7CiAJCUlOSVRfTElTVF9IRUFEKCZqZnNfaXAtPmFub25faW5vZGVfbGlzdCk7CiAJCWluaXRfcndzZW0oJmpmc19pcC0+cmR3cmxvY2spOwotCQlpbml0X01VVEVYKCZqZnNfaXAtPmNvbW1pdF9zZW0pOworCQltdXRleF9pbml0KCZqZnNfaXAtPmNvbW1pdF9tdXRleCk7CiAJCWluaXRfcndzZW0oJmpmc19pcC0+eGF0dHJfc2VtKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmpmc19pcC0+YWdfbG9jayk7CiAJCWpmc19pcC0+YWN0aXZlX2FnID0gLTE7CkBAIC02MzYsNyArNjY0LDggQEAKIAogCWpmc19pbm9kZV9jYWNoZXAgPQogCSAgICBrbWVtX2NhY2hlX2NyZWF0ZSgiamZzX2lwIiwgc2l6ZW9mKHN0cnVjdCBqZnNfaW5vZGVfaW5mbyksIDAsIAotCQkJICAgIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULCBpbml0X29uY2UsIE5VTEwpOworCQkJICAgIFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCwKKwkJCSAgICBpbml0X29uY2UsIE5VTEwpOwogCWlmIChqZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC02NjEsMTIgKzY5MCwxMiBAQAogCS8qCiAJICogSS9PIGNvbXBsZXRpb24gdGhyZWFkIChlbmRpbykKIAkgKi8KLQlqZnNJT3RocmVhZCA9IGtlcm5lbF90aHJlYWQoamZzSU9XYWl0LCBOVUxMLCBDTE9ORV9LRVJORUwpOwotCWlmIChqZnNJT3RocmVhZCA8IDApIHsKLQkJamZzX2VycigiaW5pdF9qZnNfZnM6IGZvcmsgZmFpbGVkIHcvcmMgPSAlZCIsIGpmc0lPdGhyZWFkKTsKKwlqZnNJT3RocmVhZCA9IGt0aHJlYWRfcnVuKGpmc0lPV2FpdCwgTlVMTCwgImpmc0lPIik7CisJaWYgKElTX0VSUihqZnNJT3RocmVhZCkpIHsKKwkJcmMgPSBQVFJfRVJSKGpmc0lPdGhyZWFkKTsKKwkJamZzX2VycigiaW5pdF9qZnNfZnM6IGZvcmsgZmFpbGVkIHcvcmMgPSAlZCIsIHJjKTsKIAkJZ290byBlbmRfdHhtbmdyOwogCX0KLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZqZnNJT3dhaXQpOwkvKiBXYWl0IHVudGlsIHRocmVhZCBzdGFydHMgKi8KIAogCWlmIChjb21taXRfdGhyZWFkcyA8IDEpCiAJCWNvbW1pdF90aHJlYWRzID0gbnVtX29ubGluZV9jcHVzKCk7CkBAIC02NzQsMjQgKzcwMywyMSBAQAogCQljb21taXRfdGhyZWFkcyA9IE1BWF9DT01NSVRfVEhSRUFEUzsKIAogCWZvciAoaSA9IDA7IGkgPCBjb21taXRfdGhyZWFkczsgaSsrKSB7Ci0JCWpmc0NvbW1pdFRocmVhZFtpXSA9IGtlcm5lbF90aHJlYWQoamZzX2xhenljb21taXQsIE5VTEwsCi0JCQkJCQkgICBDTE9ORV9LRVJORUwpOwotCQlpZiAoamZzQ29tbWl0VGhyZWFkW2ldIDwgMCkgewotCQkJamZzX2VycigiaW5pdF9qZnNfZnM6IGZvcmsgZmFpbGVkIHcvcmMgPSAlZCIsCi0JCQkJamZzQ29tbWl0VGhyZWFkW2ldKTsKKwkJamZzQ29tbWl0VGhyZWFkW2ldID0ga3RocmVhZF9ydW4oamZzX2xhenljb21taXQsIE5VTEwsICJqZnNDb21taXQiKTsKKwkJaWYgKElTX0VSUihqZnNDb21taXRUaHJlYWRbaV0pKSB7CisJCQlyYyA9IFBUUl9FUlIoamZzQ29tbWl0VGhyZWFkW2ldKTsKKwkJCWpmc19lcnIoImluaXRfamZzX2ZzOiBmb3JrIGZhaWxlZCB3L3JjID0gJWQiLCByYyk7CiAJCQljb21taXRfdGhyZWFkcyA9IGk7CiAJCQlnb3RvIGtpbGxfY29tbWl0dGFzazsKIAkJfQotCQkvKiBXYWl0IHVudGlsIHRocmVhZCBzdGFydHMgKi8KLQkJd2FpdF9mb3JfY29tcGxldGlvbigmamZzSU93YWl0KTsKIAl9CiAKLQlqZnNTeW5jVGhyZWFkID0ga2VybmVsX3RocmVhZChqZnNfc3luYywgTlVMTCwgQ0xPTkVfS0VSTkVMKTsKLQlpZiAoamZzU3luY1RocmVhZCA8IDApIHsKLQkJamZzX2VycigiaW5pdF9qZnNfZnM6IGZvcmsgZmFpbGVkIHcvcmMgPSAlZCIsIGpmc1N5bmNUaHJlYWQpOworCWpmc1N5bmNUaHJlYWQgPSBrdGhyZWFkX3J1bihqZnNfc3luYywgTlVMTCwgImpmc1N5bmMiKTsKKwlpZiAoSVNfRVJSKGpmc1N5bmNUaHJlYWQpKSB7CisJCXJjID0gUFRSX0VSUihqZnNTeW5jVGhyZWFkKTsKKwkJamZzX2VycigiaW5pdF9qZnNfZnM6IGZvcmsgZmFpbGVkIHcvcmMgPSAlZCIsIHJjKTsKIAkJZ290byBraWxsX2NvbW1pdHRhc2s7CiAJfQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmpmc0lPd2FpdCk7CS8qIFdhaXQgdW50aWwgdGhyZWFkIHN0YXJ0cyAqLwogCiAjaWZkZWYgUFJPQ19GU19KRlMKIAlqZnNfcHJvY19pbml0KCk7CkBAIC03MDAsMTMgKzcyNiw5IEBACiAJcmV0dXJuIHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmpmc19mc190eXBlKTsKIAoga2lsbF9jb21taXR0YXNrOgotCWpmc19zdG9wX3RocmVhZHMgPSAxOwotCXdha2VfdXBfYWxsKCZqZnNfY29tbWl0X3RocmVhZF93YWl0KTsKIAlmb3IgKGkgPSAwOyBpIDwgY29tbWl0X3RocmVhZHM7IGkrKykKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmamZzSU93YWl0KTsKLQotCXdha2VfdXAoJmpmc19JT190aHJlYWRfd2FpdCk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmamZzSU93YWl0KTsJLyogV2FpdCBmb3IgdGhyZWFkIGV4aXQgKi8KKwkJa3RocmVhZF9zdG9wKGpmc0NvbW1pdFRocmVhZFtpXSk7CisJa3RocmVhZF9zdG9wKGpmc0lPdGhyZWFkKTsKIGVuZF90eG1uZ3I6CiAJdHhFeGl0KCk7CiBmcmVlX21ldGFwYWdlOgpAQCAtNzIyLDE2ICs3NDQsMTMgQEAKIAogCWpmc19pbmZvKCJleGl0X2pmc19mcyBjYWxsZWQiKTsKIAotCWpmc19zdG9wX3RocmVhZHMgPSAxOwogCXR4RXhpdCgpOwogCW1ldGFwYWdlX2V4aXQoKTsKLQl3YWtlX3VwKCZqZnNfSU9fdGhyZWFkX3dhaXQpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmpmc0lPd2FpdCk7CS8qIFdhaXQgdW50aWwgSU8gdGhyZWFkIGV4aXRzICovCi0Jd2FrZV91cF9hbGwoJmpmc19jb21taXRfdGhyZWFkX3dhaXQpOworCisJa3RocmVhZF9zdG9wKGpmc0lPdGhyZWFkKTsKIAlmb3IgKGkgPSAwOyBpIDwgY29tbWl0X3RocmVhZHM7IGkrKykKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmamZzSU93YWl0KTsKLQl3YWtlX3VwKCZqZnNfc3luY190aHJlYWRfd2FpdCk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmamZzSU93YWl0KTsJLyogV2FpdCB1bnRpbCBTeW5jIHRocmVhZCBleGl0cyAqLworCQlrdGhyZWFkX3N0b3AoamZzQ29tbWl0VGhyZWFkW2ldKTsKKwlrdGhyZWFkX3N0b3AoamZzU3luY1RocmVhZCk7CiAjaWZkZWYgUFJPQ19GU19KRlMKIAlqZnNfcHJvY19jbGVhbigpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9qZnMveGF0dHIuYyBiL2ZzL2pmcy94YXR0ci5jCmluZGV4IGYyMzA0OGYuLjliYzViN2MgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy94YXR0ci5jCisrKyBiL2ZzL2pmcy94YXR0ci5jCkBAIC05MzQsMTMgKzkzNCwxMyBAQAogCX0KIAogCXRpZCA9IHR4QmVnaW4oaW5vZGUtPmlfc2IsIDApOwotCWRvd24oJmppLT5jb21taXRfc2VtKTsKKwltdXRleF9sb2NrKCZqaS0+Y29tbWl0X211dGV4KTsKIAlyYyA9IF9famZzX3NldHhhdHRyKHRpZCwgZGVudHJ5LT5kX2lub2RlLCBuYW1lLCB2YWx1ZSwgdmFsdWVfbGVuLAogCQkJICAgIGZsYWdzKTsKIAlpZiAoIXJjKQogCQlyYyA9IHR4Q29tbWl0KHRpZCwgMSwgJmlub2RlLCAwKTsKIAl0eEVuZCh0aWQpOwotCXVwKCZqaS0+Y29tbWl0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZqaS0+Y29tbWl0X211dGV4KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTEwOTMsMTIgKzEwOTMsMTIgQEAKIAkJcmV0dXJuIHJjOwogCiAJdGlkID0gdHhCZWdpbihpbm9kZS0+aV9zYiwgMCk7Ci0JZG93bigmamktPmNvbW1pdF9zZW0pOworCW11dGV4X2xvY2soJmppLT5jb21taXRfbXV0ZXgpOwogCXJjID0gX19qZnNfc2V0eGF0dHIodGlkLCBkZW50cnktPmRfaW5vZGUsIG5hbWUsIE5VTEwsIDAsIFhBVFRSX1JFUExBQ0UpOwogCWlmICghcmMpCiAJCXJjID0gdHhDb21taXQodGlkLCAxLCAmaW5vZGUsIDApOwogCXR4RW5kKHRpZCk7Ci0JdXAoJmppLT5jb21taXRfc2VtKTsKKwltdXRleF91bmxvY2soJmppLT5jb21taXRfbXV0ZXgpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvbGliZnMuYyBiL2ZzL2xpYmZzLmMKaW5kZXggNzFmZDA4Zi4uNGZkZWFjZSAxMDA2NDQKLS0tIGEvZnMvbGliZnMuYworKysgYi9mcy9saWJmcy5jCkBAIC03LDYgKzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBpbnQgc2ltcGxlX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKQEAgLTUzMCw3ICs1MzIsNyBAQAogCWNoYXIgc2V0X2J1ZlsyNF07CiAJdm9pZCAqZGF0YTsKIAljb25zdCBjaGFyICpmbXQ7CS8qIGZvcm1hdCBmb3IgcmVhZCBvcGVyYXRpb24gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogcHJvdGVjdHMgYWNjZXNzIHRvIHRoZXNlIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CS8qIHByb3RlY3RzIGFjY2VzcyB0byB0aGVzZSBidWZmZXJzICovCiB9OwogCiAvKiBzaW1wbGVfYXR0cl9vcGVuIGlzIGNhbGxlZCBieSBhbiBhY3R1YWwgYXR0cmlidXRlIG9wZW4gZmlsZSBvcGVyYXRpb24KQEAgLTU0OSw3ICs1NTEsNyBAQAogCWF0dHItPnNldCA9IHNldDsKIAlhdHRyLT5kYXRhID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKIAlhdHRyLT5mbXQgPSBmbXQ7Ci0JaW5pdF9NVVRFWCgmYXR0ci0+c2VtKTsKKwltdXRleF9pbml0KCZhdHRyLT5tdXRleCk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBhdHRyOwogCkBAIC01NzUsNyArNTc3LDcgQEAKIAlpZiAoIWF0dHItPmdldCkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlkb3duKCZhdHRyLT5zZW0pOworCW11dGV4X2xvY2soJmF0dHItPm11dGV4KTsKIAlpZiAoKnBwb3MpIC8qIGNvbnRpbnVlZCByZWFkICovCiAJCXNpemUgPSBzdHJsZW4oYXR0ci0+Z2V0X2J1Zik7CiAJZWxzZQkgIC8qIGZpcnN0IHJlYWQgKi8KQEAgLTU4NCw3ICs1ODYsNyBAQAogCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWF0dHItPmdldChhdHRyLT5kYXRhKSk7CiAKIAlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGxlbiwgcHBvcywgYXR0ci0+Z2V0X2J1Ziwgc2l6ZSk7Ci0JdXAoJmF0dHItPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZhdHRyLT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjAyLDcgKzYwNCw3IEBACiAJaWYgKCFhdHRyLT5zZXQpCiAJCXJldHVybiAtRUFDQ0VTOwogCi0JZG93bigmYXR0ci0+c2VtKTsKKwltdXRleF9sb2NrKCZhdHRyLT5tdXRleCk7CiAJcmV0ID0gLUVGQVVMVDsKIAlzaXplID0gbWluKHNpemVvZihhdHRyLT5zZXRfYnVmKSAtIDEsIGxlbik7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGF0dHItPnNldF9idWYsIGJ1Ziwgc2l6ZSkpCkBAIC02MTMsNyArNjE1LDcgQEAKIAl2YWwgPSBzaW1wbGVfc3RydG9sKGF0dHItPnNldF9idWYsIE5VTEwsIDApOwogCWF0dHItPnNldChhdHRyLT5kYXRhLCB2YWwpOwogb3V0OgotCXVwKCZhdHRyLT5zZW0pOworCW11dGV4X3VubG9jaygmYXR0ci0+bXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2NsbnRwcm9jLmMgYi9mcy9sb2NrZC9jbG50cHJvYy5jCmluZGV4IDIyMDA1OGQuLjk3MGI2YTYgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2NsbnRwcm9jLmMKKysrIGIvZnMvbG9ja2QvY2xudHByb2MuYwpAQCAtNjYyLDEyICs2NjIsMTggQEAKIAkgKiByZWNsYWltZWQgd2hpbGUgd2UncmUgc3R1Y2sgaW4gdGhlIHVubG9jayBjYWxsLiAqLwogCWZsLT5mbF91Lm5mc19mbC5mbGFncyAmPSB+TkZTX0xDS19HUkFOVEVEOwogCisJLyoKKwkgKiBOb3RlOiB0aGUgc2VydmVyIGlzIHN1cHBvc2VkIHRvIGVpdGhlciBncmFudCB1cyB0aGUgdW5sb2NrCisJICogcmVxdWVzdCwgb3IgdG8gZGVueSBpdCB3aXRoIE5MTV9MQ0tfREVOSUVEX0dSQUNFX1BFUklPRC4gSW4gZWl0aGVyCisJICogY2FzZSwgd2Ugd2FudCB0byB1bmxvY2suCisJICovCisJZG9fdmZzX2xvY2soZmwpOworCiAJaWYgKHJlcS0+YV9mbGFncyAmIFJQQ19UQVNLX0FTWU5DKSB7CiAJCXN0YXR1cyA9IG5sbWNsbnRfYXN5bmNfY2FsbChyZXEsIE5MTVBST0NfVU5MT0NLLAogCQkJCQkmbmxtY2xudF91bmxvY2tfb3BzKTsKIAkJLyogSHJtZi4uLiBEbyB0aGUgdW5sb2NrIGVhcmx5IHNpbmNlIGxvY2tzX3JlbW92ZV9wb3NpeCgpCiAJCSAqIHJlYWxseSBleHBlY3RzIHVzIHRvIGZyZWUgdGhlIGxvY2sgc3luY2hyb25vdXNseSAqLwotCQlkb192ZnNfbG9jayhmbCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlubG1jbG50X3JlbGVhc2VfbG9ja2FyZ3MocmVxKTsKIAkJCWtmcmVlKHJlcSk7CkBAIC02ODAsNyArNjg2LDYgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKIAotCWRvX3Zmc19sb2NrKGZsKTsKIAlpZiAocmVzcC0+c3RhdHVzID09IE5MTV9MQ0tfR1JBTlRFRCkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL21vbi5jIGIvZnMvbG9ja2QvbW9uLmMKaW5kZXggMGVkYzAzZS4uYTg5Y2I4YSAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvbW9uLmMKKysrIGIvZnMvbG9ja2QvbW9uLmMKQEAgLTIyNCw4ICsyMjQsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBycGNfdmVyc2lvbgluc21fdmVyc2lvbjEgPSB7Ci0JCS5udW1iZXIJCT0gMSwgCi0JCS5ucnByb2NzCT0gc2l6ZW9mKG5zbV9wcm9jZWR1cmVzKS9zaXplb2YobnNtX3Byb2NlZHVyZXNbMF0pLAorCQkubnVtYmVyCQk9IDEsCisJCS5ucnByb2NzCT0gQVJSQVlfU0laRShuc21fcHJvY2VkdXJlcyksCiAJCS5wcm9jcwkJPSBuc21fcHJvY2VkdXJlcwogfTsKIApAQCAtMjM4LDcgKzIzOCw3IEBACiBzdGF0aWMgc3RydWN0IHJwY19wcm9ncmFtCW5zbV9wcm9ncmFtID0gewogCQkubmFtZQkJPSAic3RhdGQiLAogCQkubnVtYmVyCQk9IFNNX1BST0dSQU0sCi0JCS5ucnZlcnMJCT0gc2l6ZW9mKG5zbV92ZXJzaW9uKS9zaXplb2YobnNtX3ZlcnNpb25bMF0pLAorCQkubnJ2ZXJzCQk9IEFSUkFZX1NJWkUobnNtX3ZlcnNpb24pLAogCQkudmVyc2lvbgk9IG5zbV92ZXJzaW9uLAogCQkuc3RhdHMJCT0gJm5zbV9zdGF0cwogfTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Yy5jIGIvZnMvbG9ja2Qvc3ZjLmMKaW5kZXggNzFhMzBiNC4uNWU4NWJkZSAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjLmMKKysrIGIvZnMvbG9ja2Qvc3ZjLmMKQEAgLTUwOSw3ICs1MDksNyBAQAogCiBzdGF0aWMgc3RydWN0IHN2Y19zdGF0CQlubG1zdmNfc3RhdHM7CiAKLSNkZWZpbmUgTkxNX05SVkVSUwkoc2l6ZW9mKG5sbXN2Y192ZXJzaW9uKS9zaXplb2Yobmxtc3ZjX3ZlcnNpb25bMF0pKQorI2RlZmluZSBOTE1fTlJWRVJTCUFSUkFZX1NJWkUobmxtc3ZjX3ZlcnNpb24pCiBzdGF0aWMgc3RydWN0IHN2Y19wcm9ncmFtCW5sbXN2Y19wcm9ncmFtID0gewogCS5wZ19wcm9nCQk9IE5MTV9QUk9HUkFNLAkJLyogcHJvZ3JhbSBudW1iZXIgKi8KIAkucGdfbnZlcnMJCT0gTkxNX05SVkVSUywJCS8qIG51bWJlciBvZiBlbnRyaWVzIGluIG5sbXN2Y192ZXJzaW9uICovCmRpZmYgLS1naXQgYS9mcy9sb2NrZC94ZHIuYyBiL2ZzL2xvY2tkL3hkci5jCmluZGV4IDIwMGZiZGEuLjFkNzAwYTQgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3hkci5jCisrKyBiL2ZzL2xvY2tkL3hkci5jCkBAIC01OTksNyArNTk5LDcgQEAKIHN0cnVjdCBycGNfcHJvZ3JhbQkJbmxtX3Byb2dyYW0gPSB7CiAJCS5uYW1lCQk9ICJsb2NrZCIsCiAJCS5udW1iZXIJCT0gTkxNX1BST0dSQU0sCi0JCS5ucnZlcnMJCT0gc2l6ZW9mKG5sbV92ZXJzaW9ucykgLyBzaXplb2YobmxtX3ZlcnNpb25zWzBdKSwKKwkJLm5ydmVycwkJPSBBUlJBWV9TSVpFKG5sbV92ZXJzaW9ucyksCiAJCS52ZXJzaW9uCT0gbmxtX3ZlcnNpb25zLAogCQkuc3RhdHMJCT0gJm5sbV9zdGF0cywKIH07CmRpZmYgLS1naXQgYS9mcy9tYmNhY2hlLmMgYi9mcy9tYmNhY2hlLmMKaW5kZXggZjViYmU0Yy4uNzNlNzU0ZiAxMDA2NDQKLS0tIGEvZnMvbWJjYWNoZS5jCisrKyBiL2ZzL21iY2FjaGUuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJCQlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPmNfaW5kZXhlc19oYXNoW21dW25dKTsKIAl9CiAJY2FjaGUtPmNfZW50cnlfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLCBlbnRyeV9zaXplLCAwLAotCQlTTEFCX1JFQ0xBSU1fQUNDT1VOVCwgTlVMTCwgTlVMTCk7CisJCVNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCwgTlVMTCwgTlVMTCk7CiAJaWYgKCFjYWNoZS0+Y19lbnRyeV9jYWNoZSkKIAkJZ290byBmYWlsOwogCmRpZmYgLS1naXQgYS9mcy9taW5peC9iaXRtYXAuYyBiL2ZzL21pbml4L2JpdG1hcC5jCmluZGV4IGRjNmE0ZTQuLjRhNmFiYzQgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2JpdG1hcC5jCisrKyBiL2ZzL21pbml4L2JpdG1hcC5jCkBAIC01Niw3ICs1Niw3IEBACiAJdW5zaWduZWQgaW50IGJpdCx6b25lOwogCiAJaWYgKGJsb2NrIDwgc2JpLT5zX2ZpcnN0ZGF0YXpvbmUgfHwgYmxvY2sgPj0gc2JpLT5zX256b25lcykgewotCQlwcmludGsoInRyeWluZyB0byBmcmVlIGJsb2NrIG5vdCBpbiBkYXRhem9uZVxuIik7CisJCXByaW50aygiVHJ5aW5nIHRvIGZyZWUgYmxvY2sgbm90IGluIGRhdGF6b25lXG4iKTsKIAkJcmV0dXJuOwogCX0KIAl6b25lID0gYmxvY2sgLSBzYmktPnNfZmlyc3RkYXRhem9uZSArIDE7CkBAIC0xMjQsNyArMTI0LDcgQEAKIAkJIGlubyAvIE1JTklYX0lOT0RFU19QRVJfQkxPQ0s7CiAJKmJoID0gc2JfYnJlYWQoc2IsIGJsb2NrKTsKIAlpZiAoISpiaCkgewotCQlwcmludGsoInVuYWJsZSB0byByZWFkIGktbm9kZSBibG9ja1xuIik7CisJCXByaW50aygiVW5hYmxlIHRvIHJlYWQgaW5vZGUgYmxvY2tcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcCA9ICh2b2lkICopKCpiaCktPmJfZGF0YTsKQEAgLTE0OSw3ICsxNDksNyBAQAogCQkgaW5vIC8gTUlOSVgyX0lOT0RFU19QRVJfQkxPQ0s7CiAJKmJoID0gc2JfYnJlYWQoc2IsIGJsb2NrKTsKIAlpZiAoISpiaCkgewotCQlwcmludGsoInVuYWJsZSB0byByZWFkIGktbm9kZSBibG9ja1xuIik7CisJCXByaW50aygiVW5hYmxlIHRvIHJlYWQgaW5vZGUgYmxvY2tcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcCA9ICh2b2lkICopKCpiaCktPmJfZGF0YTsKQEAgLTIwNCw3ICsyMDQsNyBAQAogCWJoID0gc2JpLT5zX2ltYXBbaW5vID4+IDEzXTsKIAlsb2NrX2tlcm5lbCgpOwogCWlmICghbWluaXhfdGVzdF9hbmRfY2xlYXJfYml0KGlubyAmIDgxOTEsIGJoLT5iX2RhdGEpKQotCQlwcmludGsoIm1pbml4X2ZyZWVfaW5vZGU6IGJpdCAlbHUgYWxyZWFkeSBjbGVhcmVkLlxuIiwgaW5vKTsKKwkJcHJpbnRrKCJtaW5peF9mcmVlX2lub2RlOiBiaXQgJWx1IGFscmVhZHkgY2xlYXJlZFxuIiwgaW5vKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogIG91dDoKQEAgLTIzOCw3ICsyMzgsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJaWYgKG1pbml4X3Rlc3RfYW5kX3NldF9iaXQoaixiaC0+Yl9kYXRhKSkgewkvKiBzaG91bGRuJ3QgaGFwcGVuICovCi0JCXByaW50aygibmV3X2lub2RlOiBiaXQgYWxyZWFkeSBzZXQiKTsKKwkJcHJpbnRrKCJuZXdfaW5vZGU6IGJpdCBhbHJlYWR5IHNldFxuIik7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJaXB1dChpbm9kZSk7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaW5vZGUuYyBiL2ZzL21pbml4L2lub2RlLmMKaW5kZXggNzkwY2MwZC4uMmRjY2NmMSAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaW5vZGUuYworKysgYi9mcy9taW5peC9pbm9kZS5jCkBAIC04MCw3ICs4MCw4IEBACiB7CiAJbWluaXhfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoIm1pbml4X2lub2RlX2NhY2hlIiwKIAkJCQkJICAgICBzaXplb2Yoc3RydWN0IG1pbml4X2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAobWluaXhfaW5vZGVfY2FjaGVwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTI2LDExICsxMjcsMTEgQEAKIAkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX3NiaCk7CiAKIAkJaWYgKCEoc2JpLT5zX21vdW50X3N0YXRlICYgTUlOSVhfVkFMSURfRlMpKQotCQkJcHJpbnRrICgiTUlOSVgtZnMgd2FybmluZzogcmVtb3VudGluZyB1bmNoZWNrZWQgZnMsICIKLQkJCQkicnVubmluZyBmc2NrIGlzIHJlY29tbWVuZGVkLlxuIik7CisJCQlwcmludGsoIk1JTklYLWZzIHdhcm5pbmc6IHJlbW91bnRpbmcgdW5jaGVja2VkIGZzLCAiCisJCQkJInJ1bm5pbmcgZnNjayBpcyByZWNvbW1lbmRlZFxuIik7CiAJCWVsc2UgaWYgKChzYmktPnNfbW91bnRfc3RhdGUgJiBNSU5JWF9FUlJPUl9GUykpCi0JCQlwcmludGsgKCJNSU5JWC1mcyB3YXJuaW5nOiByZW1vdW50aW5nIGZzIHdpdGggZXJyb3JzLCAiCi0JCQkJInJ1bm5pbmcgZnNjayBpcyByZWNvbW1lbmRlZC5cbiIpOworCQkJcHJpbnRrKCJNSU5JWC1mcyB3YXJuaW5nOiByZW1vdW50aW5nIGZzIHdpdGggZXJyb3JzLCAiCisJCQkJInJ1bm5pbmcgZnNjayBpcyByZWNvbW1lbmRlZFxuIik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjQ0LDExICsyNDUsMTEgQEAKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCX0KIAlpZiAoIShzYmktPnNfbW91bnRfc3RhdGUgJiBNSU5JWF9WQUxJRF9GUykpCi0JCXByaW50ayAoIk1JTklYLWZzOiBtb3VudGluZyB1bmNoZWNrZWQgZmlsZSBzeXN0ZW0sICIKLQkJCSJydW5uaW5nIGZzY2sgaXMgcmVjb21tZW5kZWQuXG4iKTsKKwkJcHJpbnRrKCJNSU5JWC1mczogbW91bnRpbmcgdW5jaGVja2VkIGZpbGUgc3lzdGVtLCAiCisJCQkicnVubmluZyBmc2NrIGlzIHJlY29tbWVuZGVkXG4iKTsKICAJZWxzZSBpZiAoc2JpLT5zX21vdW50X3N0YXRlICYgTUlOSVhfRVJST1JfRlMpCi0JCXByaW50ayAoIk1JTklYLWZzOiBtb3VudGluZyBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycywgIgotCQkJInJ1bm5pbmcgZnNjayBpcyByZWNvbW1lbmRlZC5cbiIpOworCQlwcmludGsoIk1JTklYLWZzOiBtb3VudGluZyBmaWxlIHN5c3RlbSB3aXRoIGVycm9ycywgIgorCQkJInJ1bm5pbmcgZnNjayBpcyByZWNvbW1lbmRlZFxuIik7CiAJcmV0dXJuIDA7CiAKIG91dF9pcHV0OgpAQCAtMjcyLDE5ICsyNzMsMTkgQEAKIAogb3V0X25vX21hcDoKIAlpZiAoIXNpbGVudCkKLQkJcHJpbnRrICgiTUlOSVgtZnM6IGNhbid0IGFsbG9jYXRlIG1hcFxuIik7CisJCXByaW50aygiTUlOSVgtZnM6IGNhbid0IGFsbG9jYXRlIG1hcFxuIik7CiAJZ290byBvdXRfcmVsZWFzZTsKIAogb3V0X25vX2ZzOgogCWlmICghc2lsZW50KQotCQlwcmludGsoIlZGUzogQ2FuJ3QgZmluZCBhIE1pbml4IG9yIE1pbml4IFYyIGZpbGVzeXN0ZW0gb24gZGV2aWNlICIKLQkJICAgICAgICIlcy5cbiIsIHMtPnNfaWQpOworCQlwcmludGsoIlZGUzogQ2FuJ3QgZmluZCBhIE1pbml4IG9yIE1pbml4IFYyIGZpbGVzeXN0ZW0gIgorCQkJIm9uIGRldmljZSAlc1xuIiwgcy0+c19pZCk7CiAgICAgb3V0X3JlbGVhc2U6CiAJYnJlbHNlKGJoKTsKIAlnb3RvIG91dDsKIAogb3V0X2JhZF9oYmxvY2s6Ci0JcHJpbnRrKCJNSU5JWC1mczogYmxvY2tzaXplIHRvbyBzbWFsbCBmb3IgZGV2aWNlLlxuIik7CisJcHJpbnRrKCJNSU5JWC1mczogYmxvY2tzaXplIHRvbyBzbWFsbCBmb3IgZGV2aWNlXG4iKTsKIAlnb3RvIG91dDsKIAogb3V0X2JhZF9zYjoKQEAgLTUyMyw3ICs1MjQsNyBAQAogCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCWlmIChidWZmZXJfcmVxKGJoKSAmJiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkKIAkJewotCQkJcHJpbnRrICgiSU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bHhdXG4iLAorCQkJcHJpbnRrKCJJTyBlcnJvciBzeW5jaW5nIG1pbml4IGlub2RlIFslczolMDhseF1cbiIsCiAJCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CiAJCQllcnIgPSAtMTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvaXRyZWVfdjEuYyBiL2ZzL21pbml4L2l0cmVlX3YxLmMKaW5kZXggYmEwNmFlZi4uNjU2YjEzNCAxMDA2NDQKLS0tIGEvZnMvbWluaXgvaXRyZWVfdjEuYworKysgYi9mcy9taW5peC9pdHJlZV92MS5jCkBAIC0yNSw5ICsyNSw5IEBACiAJaW50IG4gPSAwOwogCiAJaWYgKGJsb2NrIDwgMCkgewotCQlwcmludGsoIm1pbml4X2JtYXA6IGJsb2NrPDAiKTsKKwkJcHJpbnRrKCJtaW5peF9ibWFwOiBibG9jazwwXG4iKTsKIAl9IGVsc2UgaWYgKGJsb2NrID49IChtaW5peF9zYihpbm9kZS0+aV9zYiktPnNfbWF4X3NpemUvQkxPQ0tfU0laRSkpIHsKLQkJcHJpbnRrKCJtaW5peF9ibWFwOiBibG9jaz5iaWciKTsKKwkJcHJpbnRrKCJtaW5peF9ibWFwOiBibG9jaz5iaWdcbiIpOwogCX0gZWxzZSBpZiAoYmxvY2sgPCA3KSB7CiAJCW9mZnNldHNbbisrXSA9IGJsb2NrOwogCX0gZWxzZSBpZiAoKGJsb2NrIC09IDcpIDwgNTEyKSB7CmRpZmYgLS1naXQgYS9mcy9taW5peC9pdHJlZV92Mi5jIGIvZnMvbWluaXgvaXRyZWVfdjIuYwppbmRleCAzYWRjNzY3Li45YWRjZGM3IDEwMDY0NAotLS0gYS9mcy9taW5peC9pdHJlZV92Mi5jCisrKyBiL2ZzL21pbml4L2l0cmVlX3YyLmMKQEAgLTI1LDkgKzI1LDkgQEAKIAlpbnQgbiA9IDA7CiAKIAlpZiAoYmxvY2sgPCAwKSB7Ci0JCXByaW50aygibWluaXhfYm1hcDogYmxvY2s8MCIpOworCQlwcmludGsoIm1pbml4X2JtYXA6IGJsb2NrPDBcbiIpOwogCX0gZWxzZSBpZiAoYmxvY2sgPj0gKG1pbml4X3NiKGlub2RlLT5pX3NiKS0+c19tYXhfc2l6ZS9CTE9DS19TSVpFKSkgewotCQlwcmludGsoIm1pbml4X2JtYXA6IGJsb2NrPmJpZyIpOworCQlwcmludGsoIm1pbml4X2JtYXA6IGJsb2NrPmJpZ1xuIik7CiAJfSBlbHNlIGlmIChibG9jayA8IDcpIHsKIAkJb2Zmc2V0c1tuKytdID0gYmxvY2s7CiAJfSBlbHNlIGlmICgoYmxvY2sgLT0gNykgPCAyNTYpIHsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IGIyNWJjYTUuLjViNmE0NTQgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L25hbWVpLmMKKysrIGIvZnMvbWluaXgvbmFtZWkuYwpAQCAtNiwxOCArNiw2IEBACiAKICNpbmNsdWRlICJtaW5peC5oIgogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5jX2NvdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaW5vZGUtPmlfbmxpbmsrKzsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRlY19jb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlub2RlLT5pX25saW5rLS07Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci19Ci0KIHN0YXRpYyBpbnQgYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaW50IGVyciA9IG1pbml4X2FkZF9saW5rKGRlbnRyeSwgaW5vZGUpOwpAQCAtMjUsNyArMTMsNyBAQAogCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQlyZXR1cm4gMDsKIAl9Ci0JZGVjX2NvdW50KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJaXB1dChpbm9kZSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEyNSw3ICsxMTMsNyBAQAogCXJldHVybiBlcnI7CiAKIG91dF9mYWlsOgotCWRlY19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogCWdvdG8gb3V0OwogfQpAQCAtMTM5LDcgKzEyNyw3IEBACiAJCXJldHVybiAtRU1MSU5LOwogCiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCWluY19jb3VudChpbm9kZSk7CisJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOwogCWF0b21pY19pbmMoJmlub2RlLT5pX2NvdW50KTsKIAlyZXR1cm4gYWRkX25vbmRpcihkZW50cnksIGlub2RlKTsKIH0KQEAgLTE1Miw3ICsxNDAsNyBAQAogCWlmIChkaXItPmlfbmxpbmsgPj0gbWluaXhfc2IoZGlyLT5pX3NiKS0+c19saW5rX21heCkKIAkJZ290byBvdXQ7CiAKLQlpbmNfY291bnQoZGlyKTsKKwlpbm9kZV9pbmNfbGlua19jb3VudChkaXIpOwogCiAJaW5vZGUgPSBtaW5peF9uZXdfaW5vZGUoZGlyLCAmZXJyKTsKIAlpZiAoIWlub2RlKQpAQCAtMTYzLDcgKzE1MSw3IEBACiAJCWlub2RlLT5pX21vZGUgfD0gU19JU0dJRDsKIAltaW5peF9zZXRfaW5vZGUoaW5vZGUsIDApOwogCi0JaW5jX2NvdW50KGlub2RlKTsKKwlpbm9kZV9pbmNfbGlua19jb3VudChpbm9kZSk7CiAKIAllcnIgPSBtaW5peF9tYWtlX2VtcHR5KGlub2RlLCBkaXIpOwogCWlmIChlcnIpCkBAIC0xNzgsMTEgKzE2NiwxMSBAQAogCXJldHVybiBlcnI7CiAKIG91dF9mYWlsOgotCWRlY19jb3VudChpbm9kZSk7Ci0JZGVjX2NvdW50KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogb3V0X2RpcjoKLQlkZWNfY291bnQoZGlyKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOwogCWdvdG8gb3V0OwogfQogCkBAIC0yMDIsNyArMTkwLDcgQEAKIAkJZ290byBlbmRfdW5saW5rOwogCiAJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWU7Ci0JZGVjX2NvdW50KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiBlbmRfdW5saW5rOgogCXJldHVybiBlcnI7CiB9CkBAIC0yMTUsOCArMjAzLDggQEAKIAlpZiAobWluaXhfZW1wdHlfZGlyKGlub2RlKSkgewogCQllcnIgPSBtaW5peF91bmxpbmsoZGlyLCBkZW50cnkpOwogCQlpZiAoIWVycikgewotCQkJZGVjX2NvdW50KGRpcik7Ci0JCQlkZWNfY291bnQoaW5vZGUpOworCQkJaW5vZGVfZGVjX2xpbmtfY291bnQoZGlyKTsKKwkJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJfQogCX0KIAlyZXR1cm4gZXJyOwpAQCAtMjU3LDM0ICsyNDUsMzQgQEAKIAkJbmV3X2RlID0gbWluaXhfZmluZF9lbnRyeShuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5jX2NvdW50KG9sZF9pbm9kZSk7CisJCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCW1pbml4X3NldF9saW5rKG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCWlmIChkaXJfZGUpCiAJCQluZXdfaW5vZGUtPmlfbmxpbmstLTsKLQkJZGVjX2NvdW50KG5ld19pbm9kZSk7CisJCWlub2RlX2RlY19saW5rX2NvdW50KG5ld19pbm9kZSk7CiAJfSBlbHNlIHsKIAkJaWYgKGRpcl9kZSkgewogCQkJZXJyID0gLUVNTElOSzsKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IGluZm8tPnNfbGlua19tYXgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWluY19jb3VudChvbGRfaW5vZGUpOworCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQllcnIgPSBtaW5peF9hZGRfbGluayhuZXdfZGVudHJ5LCBvbGRfaW5vZGUpOwogCQlpZiAoZXJyKSB7Ci0JCQlkZWNfY291bnQob2xkX2lub2RlKTsKKwkJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCQlnb3RvIG91dF9kaXI7CiAJCX0KIAkJaWYgKGRpcl9kZSkKLQkJCWluY19jb3VudChuZXdfZGlyKTsKKwkJCWlub2RlX2luY19saW5rX2NvdW50KG5ld19kaXIpOwogCX0KIAogCW1pbml4X2RlbGV0ZV9lbnRyeShvbGRfZGUsIG9sZF9wYWdlKTsKLQlkZWNfY291bnQob2xkX2lub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQltaW5peF9zZXRfbGluayhkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKLQkJZGVjX2NvdW50KG9sZF9kaXIpOworCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfZGlyKTsKIAl9CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGUyOGRlODQuLjcxMmRmYzcgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgKi8KIC8qCiAgKiBbU2VwIDIwMDEgQVZdIFNpbmdsZS1zZW1hcGhvcmUgbG9ja2luZyBzY2hlbWUgKGt1ZG9zIHRvIERhdmlkIEhvbGxhbmQpCi0gKiBpbXBsZW1lbnRlZC4gIExldCdzIHNlZSBpZiByYWlzZWQgcHJpb3JpdHkgb2YgLT5zX3Zmc19yZW5hbWVfc2VtIGdpdmVzCisgKiBpbXBsZW1lbnRlZC4gIExldCdzIHNlZSBpZiByYWlzZWQgcHJpb3JpdHkgb2YgLT5zX3Zmc19yZW5hbWVfbXV0ZXggZ2l2ZXMKICAqIGFueSBleHRyYSBjb250ZW50aW9uLi4uCiAgKi8KIApAQCAtMTQyMiw3ICsxNDIyLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JZG93bigmcDEtPmRfaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCW11dGV4X2xvY2soJnAxLT5kX2lub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCiAJZm9yIChwID0gcDE7IHAtPmRfcGFyZW50ICE9IHA7IHAgPSBwLT5kX3BhcmVudCkgewogCQlpZiAocC0+ZF9wYXJlbnQgPT0gcDIpIHsKQEAgLTE0NTAsNyArMTQ1MCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZwMS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJaWYgKHAxICE9IHAyKSB7CiAJCW11dGV4X3VubG9jaygmcDItPmRfaW5vZGUtPmlfbXV0ZXgpOwotCQl1cCgmcDEtPmRfaW5vZGUtPmlfc2ItPnNfdmZzX3JlbmFtZV9zZW0pOworCQltdXRleF91bmxvY2soJnAxLT5kX2lub2RlLT5pX3NiLT5zX3Zmc19yZW5hbWVfbXV0ZXgpOwogCX0KIH0KIApAQCAtMTYyOCw2ICsxNjI4LDEyIEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKKwlpZiAoSVNfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKSkgeworCQltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCWVycm9yID0gUFRSX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSk7CisJCWdvdG8gZXhpdF9kcHV0OworCX0KKwogCS8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi8KIAlpZiAoIXBhdGguZGVudHJ5LT5kX2lub2RlKSB7CiAJCWlmICghSVNfUE9TSVhBQ0woZGlyLT5kX2lub2RlKSkKQEAgLTIyMjQsMTMgKzIyMzAsMTcgQEAKICAqIGFuZCBvdGhlciBzcGVjaWFsIGZpbGVzLiAgLS1BRE0KICAqLwogYXNtbGlua2FnZSBsb25nIHN5c19saW5rYXQoaW50IG9sZGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKm9sZG5hbWUsCi0JCQkgICBpbnQgbmV3ZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqbmV3bmFtZSkKKwkJCSAgIGludCBuZXdkZmQsIGNvbnN0IGNoYXIgX191c2VyICpuZXduYW1lLAorCQkJICAgaW50IGZsYWdzKQogewogCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnk7CiAJc3RydWN0IG5hbWVpZGF0YSBuZCwgb2xkX25kOwogCWludCBlcnJvcjsKIAljaGFyICogdG87CiAKKwlpZiAoZmxhZ3MgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAl0byA9IGdldG5hbWUobmV3bmFtZSk7CiAJaWYgKElTX0VSUih0bykpCiAJCXJldHVybiBQVFJfRVJSKHRvKTsKQEAgLTIyNjMsNyArMjI3Myw3IEBACiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbGluayhjb25zdCBjaGFyIF9fdXNlciAqb2xkbmFtZSwgY29uc3QgY2hhciBfX3VzZXIgKm5ld25hbWUpCiB7Ci0JcmV0dXJuIHN5c19saW5rYXQoQVRfRkRDV0QsIG9sZG5hbWUsIEFUX0ZEQ1dELCBuZXduYW1lKTsKKwlyZXR1cm4gc3lzX2xpbmthdChBVF9GRENXRCwgb2xkbmFtZSwgQVRfRkRDV0QsIG5ld25hbWUsIDApOwogfQogCiAvKgpAQCAtMjI3MywxNyArMjI4MywxNyBAQAogICoJYSkgd2UgY2FuIGdldCBpbnRvIGxvb3AgY3JlYXRpb24uIENoZWNrIGlzIGRvbmUgaW4gaXNfc3ViZGlyKCkuCiAgKgliKSByYWNlIHBvdGVudGlhbCAtIHR3byBpbm5vY2VudCByZW5hbWVzIGNhbiBjcmVhdGUgYSBsb29wIHRvZ2V0aGVyLgogICoJICAgVGhhdCdzIHdoZXJlIDQuNCBzY3Jld3MgdXAuIEN1cnJlbnQgZml4OiBzZXJpYWxpemF0aW9uIG9uCi0gKgkgICBzYi0+c192ZnNfcmVuYW1lX3NlbS4gV2UgbWlnaHQgYmUgbW9yZSBhY2N1cmF0ZSwgYnV0IHRoYXQncyBhbm90aGVyCisgKgkgICBzYi0+c192ZnNfcmVuYW1lX211dGV4LiBXZSBtaWdodCBiZSBtb3JlIGFjY3VyYXRlLCBidXQgdGhhdCdzIGFub3RoZXIKICAqCSAgIHN0b3J5LgogICoJYykgd2UgaGF2ZSB0byBsb2NrIF90aHJlZV8gb2JqZWN0cyAtIHBhcmVudHMgYW5kIHZpY3RpbSAoaWYgaXQgZXhpc3RzKS4KICAqCSAgIEFuZCB0aGF0IC0gYWZ0ZXIgd2UgZ290IC0+aV9tdXRleCBvbiBwYXJlbnRzICh1bnRpbCB0aGVuIHdlIGRvbid0IGtub3cKICAqCSAgIHdoZXRoZXIgdGhlIHRhcmdldCBleGlzdHMpLiAgU29sdXRpb246IHRyeSB0byBiZSBzbWFydCB3aXRoIGxvY2tpbmcKICAqCSAgIG9yZGVyIGZvciBpbm9kZXMuICBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdHJlZSB0b3BvbG9neSBtYXkgY2hhbmdlCi0gKgkgICBvbmx5IHVuZGVyIC0+c192ZnNfcmVuYW1lX3NlbSBfYW5kXyB0aGF0IHBhcmVudCBvZiB0aGUgb2JqZWN0IHdlCisgKgkgICBvbmx5IHVuZGVyIC0+c192ZnNfcmVuYW1lX211dGV4IF9hbmRfIHRoYXQgcGFyZW50IG9mIHRoZSBvYmplY3Qgd2UKICAqCSAgIG1vdmUgd2lsbCBiZSBsb2NrZWQuICBUaHVzIHdlIGNhbiByYW5rIGRpcmVjdG9yaWVzIGJ5IHRoZSB0cmVlCiAgKgkgICAoYW5jZXN0b3JzIGZpcnN0KSBhbmQgcmFuayBhbGwgbm9uLWRpcmVjdG9yaWVzIGFmdGVyIHRoZW0uCiAgKgkgICBUaGF0IHdvcmtzIHNpbmNlIGV2ZXJ5Ym9keSBleGNlcHQgcmVuYW1lIGRvZXMgImxvY2sgcGFyZW50LCBsb29rdXAsCi0gKgkgICBsb2NrIGNoaWxkIiBhbmQgcmVuYW1lIGlzIHVuZGVyIC0+c192ZnNfcmVuYW1lX3NlbS4KKyAqCSAgIGxvY2sgY2hpbGQiIGFuZCByZW5hbWUgaXMgdW5kZXIgLT5zX3Zmc19yZW5hbWVfbXV0ZXguCiAgKgkgICBIT1dFVkVSLCBpdCByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBhbnkgb2JqZWN0IHdpdGggLT5sb29rdXAoKQogICoJICAgaGFzIG5vIG1vcmUgdGhhbiAxIGRlbnRyeS4gIElmICJoeWJyaWQiIG9iamVjdHMgd2lsbCBldmVyIGFwcGVhciwKICAqCSAgIHdlJ2QgYmV0dGVyIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3Mgbm8gbGluaygyKSBmb3IgdGhlbS4KQEAgLTI2MDksMjIgKzI2MTksMzUgQEAKIAl9CiB9CiAKLWludCBwYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbikKK2ludCBfX3BhZ2Vfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLCBpbnQgbGVuLAorCQlnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgMCk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IGVyciA9IC1FTk9NRU07CiAJY2hhciAqa2FkZHI7CiAKK3JldHJ5OgorCXBhZ2UgPSBmaW5kX29yX2NyZWF0ZV9wYWdlKG1hcHBpbmcsIDAsIGdmcF9tYXNrKTsKIAlpZiAoIXBhZ2UpCiAJCWdvdG8gZmFpbDsKIAllcnIgPSBtYXBwaW5nLT5hX29wcy0+cHJlcGFyZV93cml0ZShOVUxMLCBwYWdlLCAwLCBsZW4tMSk7CisJaWYgKGVyciA9PSBBT1BfVFJVTkNBVEVEX1BBR0UpIHsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlnb3RvIHJldHJ5OworCX0KIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxfbWFwOwogCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCW1lbWNweShrYWRkciwgc3ltbmFtZSwgbGVuLTEpOwogCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQltYXBwaW5nLT5hX29wcy0+Y29tbWl0X3dyaXRlKE5VTEwsIHBhZ2UsIDAsIGxlbi0xKTsKKwllcnIgPSBtYXBwaW5nLT5hX29wcy0+Y29tbWl0X3dyaXRlKE5VTEwsIHBhZ2UsIDAsIGxlbi0xKTsKKwlpZiAoZXJyID09IEFPUF9UUlVOQ0FURURfUEFHRSkgeworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWdvdG8gcmV0cnk7CisJfQorCWlmIChlcnIpCisJCWdvdG8gZmFpbF9tYXA7CiAJLyoKIAkgKiBOb3RpY2UgdGhhdCB3ZSBhcmUgX25vdF8gZ29pbmcgdG8gYmxvY2sgaGVyZSAtIGVuZCBvZiBwYWdlIGlzCiAJICogdW5tYXBwZWQsIHNvIHRoaXMgd2lsbCBvbmx5IHRyeSB0byBtYXAgdGhlIHJlc3Qgb2YgcGFnZSwgc2VlCkBAIC0yNjM0LDcgKzI2NTcsOCBAQAogCSAqLwogCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CiAJCWVyciA9IG1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShOVUxMLCBwYWdlKTsKLQkJd2FpdF9vbl9wYWdlX2xvY2tlZChwYWdlKTsKKwkJaWYgKGVyciAhPSBBT1BfVFJVTkNBVEVEX1BBR0UpCisJCQl3YWl0X29uX3BhZ2VfbG9ja2VkKHBhZ2UpOwogCX0gZWxzZSB7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCX0KQEAgLTI2NTAsNiArMjY3NCwxMiBAQAogCXJldHVybiBlcnI7CiB9CiAKK2ludCBwYWdlX3N5bWxpbmsoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwgaW50IGxlbikKK3sKKwlyZXR1cm4gX19wYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGxlbiwKKwkJCW1hcHBpbmdfZ2ZwX21hc2soaW5vZGUtPmlfbWFwcGluZykpOworfQorCiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZGxpbmsJPSBnZW5lcmljX3JlYWRsaW5rLAogCS5mb2xsb3dfbGluawk9IHBhZ2VfZm9sbG93X2xpbmtfbGlnaHQsCkBAIC0yNjY4LDYgKzI2OTgsNyBAQAogRVhQT1JUX1NZTUJPTChwYWdlX2ZvbGxvd19saW5rX2xpZ2h0KTsKIEVYUE9SVF9TWU1CT0wocGFnZV9wdXRfbGluayk7CiBFWFBPUlRfU1lNQk9MKHBhZ2VfcmVhZGxpbmspOworRVhQT1JUX1NZTUJPTChfX3BhZ2Vfc3ltbGluayk7CiBFWFBPUlRfU1lNQk9MKHBhZ2Vfc3ltbGluayk7CiBFWFBPUlRfU1lNQk9MKHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zKTsKIEVYUE9SVF9TWU1CT0wocGF0aF9sb29rdXApOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCAwNThhNDQ4Li4zOWM4MWE4IDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTMzOCw3ICsxMzM4LDcgQEAKIAogCW5ld19ucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuYW1lc3BhY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19ucykKLQkJZ290byBvdXQ7CisJCXJldHVybiBOVUxMOwogCiAJYXRvbWljX3NldCgmbmV3X25zLT5jb3VudCwgMSk7CiAJSU5JVF9MSVNUX0hFQUQoJm5ld19ucy0+bGlzdCk7CkBAIC0xMzUyLDcgKzEzNTIsNyBAQAogCWlmICghbmV3X25zLT5yb290KSB7CiAJCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKIAkJa2ZyZWUobmV3X25zKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiBOVUxMOwogCX0KIAlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJm5ld19ucy0+bGlzdCwgJm5ld19ucy0+cm9vdC0+bW50X2xpc3QpOwpAQCAtMTM5Myw3ICsxMzkzLDYgQEAKIAlpZiAoYWx0cm9vdG1udCkKIAkJbW50cHV0KGFsdHJvb3RtbnQpOwogCi1vdXQ6CiAJcmV0dXJuIG5ld19uczsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvZmlsZS5jIGIvZnMvbmNwZnMvZmlsZS5jCmluZGV4IDk3M2I0NDQuLmViZGFkOGYgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2ZpbGUuYworKysgYi9mcy9uY3Bmcy9maWxlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJTkNQX0ZJTkZPKGlub2RlKS0+dm9sTnVtYmVyLCAKIAkJTkNQX0ZJTkZPKGlub2RlKS0+ZGlyRW50TnVtKTsKIAllcnJvciA9IC1FQUNDRVM7Ci0JZG93bigmTkNQX0ZJTkZPKGlub2RlKS0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJk5DUF9GSU5GTyhpbm9kZSktPm9wZW5fbXV0ZXgpOwogCWlmICghYXRvbWljX3JlYWQoJk5DUF9GSU5GTyhpbm9kZSktPm9wZW5lZCkpIHsKIAkJc3RydWN0IG5jcF9lbnRyeV9pbmZvIGZpbmZvOwogCQlpbnQgcmVzdWx0OwpAQCAtOTMsNyArOTMsNyBAQAogCX0KIAogb3V0X3VubG9jazoKLQl1cCgmTkNQX0ZJTkZPKGlub2RlKS0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmTkNQX0ZJTkZPKGlub2RlKS0+b3Blbl9tdXRleCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW5vZGUuYyBiL2ZzL25jcGZzL2lub2RlLmMKaW5kZXggZDI3N2E1OC4uYTFmM2U5NyAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW5vZGUuYworKysgYi9mcy9uY3Bmcy9pbm9kZS5jCkBAIC02Myw3ICs2Myw3IEBACiAKIAlpZiAoKGZsYWdzICYgKFNMQUJfQ1RPUl9WRVJJRll8U0xBQl9DVE9SX0NPTlNUUlVDVE9SKSkgPT0KIAkgICAgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7Ci0JCWluaXRfTVVURVgoJmVpLT5vcGVuX3NlbSk7CisJCW11dGV4X2luaXQoJmVpLT5vcGVuX211dGV4KTsKIAkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIAl9CiB9CkBAIC03Miw3ICs3Miw4IEBACiB7CiAJbmNwX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJuY3BfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgbmNwX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAobmNwX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTUyMCw3ICs1MjEsNyBAQAogCX0KIAogLyoJc2VydmVyLT5sb2NrID0gMDsJKi8KLQlpbml0X01VVEVYKCZzZXJ2ZXItPnNlbSk7CisJbXV0ZXhfaW5pdCgmc2VydmVyLT5tdXRleCk7CiAJc2VydmVyLT5wYWNrZXQgPSBOVUxMOwogLyoJc2VydmVyLT5idWZmZXJfc2l6ZSA9IDA7CSovCiAvKglzZXJ2ZXItPmNvbm5fc3RhdHVzID0gMDsJKi8KQEAgLTU1Nyw3ICs1NTgsNyBAQAogCXNlcnZlci0+ZGVudHJ5X3R0bCA9IDA7CS8qIG5vIGNhY2hpbmcgKi8KIAogCUlOSVRfTElTVF9IRUFEKCZzZXJ2ZXItPnR4LnJlcXVlc3RzKTsKLQlpbml0X01VVEVYKCZzZXJ2ZXItPnJjdi5jcmVxX3NlbSk7CisJbXV0ZXhfaW5pdCgmc2VydmVyLT5yY3YuY3JlcV9tdXRleCk7CiAJc2VydmVyLT50eC5jcmVxCQk9IE5VTEw7CiAJc2VydmVyLT5yY3YuY3JlcQk9IE5VTEw7CiAJc2VydmVyLT5kYXRhX3JlYWR5CT0gc29jay0+c2stPnNrX2RhdGFfcmVhZHk7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmMgYi9mcy9uY3Bmcy9uY3BsaWJfa2VybmVsLmMKaW5kZXggYzc1NWUxOC4uZDllYmY2NCAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvbmNwbGliX2tlcm5lbC5jCisrKyBiL2ZzL25jcGZzL25jcGxpYl9rZXJuZWwuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJaW50IGVycjsKIAogCWVyciA9IDA7Ci0JZG93bigmTkNQX0ZJTkZPKGlub2RlKS0+b3Blbl9zZW0pOwkKKwltdXRleF9sb2NrKCZOQ1BfRklORk8oaW5vZGUpLT5vcGVuX211dGV4KTsKIAlpZiAoYXRvbWljX3JlYWQoJk5DUF9GSU5GTyhpbm9kZSktPm9wZW5lZCkgPT0gMSkgewogCQlhdG9taWNfc2V0KCZOQ1BfRklORk8oaW5vZGUpLT5vcGVuZWQsIDApOwogCQllcnIgPSBuY3BfY2xvc2VfZmlsZShOQ1BfU0VSVkVSKGlub2RlKSwgTkNQX0ZJTkZPKGlub2RlKS0+ZmlsZV9oYW5kbGUpOwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCQkJTkNQX0ZJTkZPKGlub2RlKS0+dm9sTnVtYmVyLAogCQkJCU5DUF9GSU5GTyhpbm9kZSktPmRpckVudE51bSwgZXJyKTsKIAl9Ci0JdXAoJk5DUF9GSU5GTyhpbm9kZSktPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJk5DUF9GSU5GTyhpbm9kZSktPm9wZW5fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL3NvY2suYyBiL2ZzL25jcGZzL3NvY2suYwppbmRleCA2NTkzYTVjLi44NzgzZWI3IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9zb2NrLmMKKysrIGIvZnMvbmNwZnMvc29jay5jCkBAIC0xNzEsOSArMTcxLDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG5jcF9hYm9ydF9yZXF1ZXN0KHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBuY3BfcmVxdWVzdF9yZXBseSAqcmVxLCBpbnQgZXJyKQogewotCWRvd24oJnNlcnZlci0+cmN2LmNyZXFfc2VtKTsKKwltdXRleF9sb2NrKCZzZXJ2ZXItPnJjdi5jcmVxX211dGV4KTsKIAlfX25jcF9hYm9ydF9yZXF1ZXN0KHNlcnZlciwgcmVxLCBlcnIpOwotCXVwKCZzZXJ2ZXItPnJjdi5jcmVxX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJ2ZXItPnJjdi5jcmVxX211dGV4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fbmNwdGNwX2Fib3J0KHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCkBAIC0zMDMsMjAgKzMwMywyMCBAQAogCiBzdGF0aWMgaW50IG5jcF9hZGRfcmVxdWVzdChzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmNwX3JlcXVlc3RfcmVwbHkgKnJlcSkKIHsKLQlkb3duKCZzZXJ2ZXItPnJjdi5jcmVxX3NlbSk7CisJbXV0ZXhfbG9jaygmc2VydmVyLT5yY3YuY3JlcV9tdXRleCk7CiAJaWYgKCFuY3BfY29ubl92YWxpZChzZXJ2ZXIpKSB7Ci0JCXVwKCZzZXJ2ZXItPnJjdi5jcmVxX3NlbSk7CisJCW11dGV4X3VubG9jaygmc2VydmVyLT5yY3YuY3JlcV9tdXRleCk7CiAJCXByaW50ayhLRVJOX0VSUiAibmNwZnM6IHRjcDogU2VydmVyIGRpZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKHNlcnZlci0+dHguY3JlcSB8fCBzZXJ2ZXItPnJjdi5jcmVxKSB7CiAJCXJlcS0+c3RhdHVzID0gUlFfUVVFVUVEOwogCQlsaXN0X2FkZF90YWlsKCZyZXEtPnJlcSwgJnNlcnZlci0+dHgucmVxdWVzdHMpOwotCQl1cCgmc2VydmVyLT5yY3YuY3JlcV9zZW0pOworCQltdXRleF91bmxvY2soJnNlcnZlci0+cmN2LmNyZXFfbXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAJX19uY3Bfc3RhcnRfcmVxdWVzdChzZXJ2ZXIsIHJlcSk7Ci0JdXAoJnNlcnZlci0+cmN2LmNyZXFfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcnZlci0+cmN2LmNyZXFfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC00MDAsNyArNDAwLDcgQEAKIAkJCQlpbmZvX3NlcnZlcihzZXJ2ZXIsIDAsIHNlcnZlci0+dW5leHBlY3RlZF9wYWNrZXQuZGF0YSwgcmVzdWx0KTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWRvd24oJnNlcnZlci0+cmN2LmNyZXFfc2VtKTsJCQorCQkJbXV0ZXhfbG9jaygmc2VydmVyLT5yY3YuY3JlcV9tdXRleCk7CiAJCQlyZXEgPSBzZXJ2ZXItPnJjdi5jcmVxOwogCQkJaWYgKHJlcSAmJiAocmVxLT50eF90eXBlID09IE5DUF9BTExPQ19TTE9UX1JFUVVFU1QgfHwgKHNlcnZlci0+c2VxdWVuY2UgPT0gcmVwbHkuc2VxdWVuY2UgJiYgCiAJCQkJCXNlcnZlci0+Y29ubmVjdGlvbiA9PSBnZXRfY29ubl9udW1iZXIoJnJlcGx5KSkpKSB7CkBAIC00MzAsMTEgKzQzMCwxMSBAQAogCQkJCSAgICAgCXNlcnZlci0+cmN2LmNyZXEgPSBOVUxMOwogCQkJCQluY3BfZmluaXNoX3JlcXVlc3QocmVxLCByZXN1bHQpOwogCQkJCQlfX25jcF9uZXh0X3JlcXVlc3Qoc2VydmVyKTsKLQkJCQkJdXAoJnNlcnZlci0+cmN2LmNyZXFfc2VtKTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZzZXJ2ZXItPnJjdi5jcmVxX211dGV4KTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJfQotCQkJdXAoJnNlcnZlci0+cmN2LmNyZXFfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmc2VydmVyLT5yY3YuY3JlcV9tdXRleCk7CiAJCX0KIGRyb3A6OwkJCiAJCV9yZWN2KHNvY2ssICZyZXBseSwgc2l6ZW9mKHJlcGx5KSwgTVNHX0RPTlRXQUlUKTsKQEAgLTQ3Miw5ICs0NzIsOSBAQAogdm9pZCBuY3BkZ3JhbV90aW1lb3V0X3Byb2Modm9pZCAqcykKIHsKIAlzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyID0gczsKLQlkb3duKCZzZXJ2ZXItPnJjdi5jcmVxX3NlbSk7CisJbXV0ZXhfbG9jaygmc2VydmVyLT5yY3YuY3JlcV9tdXRleCk7CiAJX19uY3BkZ3JhbV90aW1lb3V0X3Byb2Moc2VydmVyKTsKLQl1cCgmc2VydmVyLT5yY3YuY3JlcV9zZW0pOworCW11dGV4X3VubG9jaygmc2VydmVyLT5yY3YuY3JlcV9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuY3BfaW5pdF9yZXEoc3RydWN0IG5jcF9yZXF1ZXN0X3JlcGx5KiByZXEpCkBAIC02NTcsMTggKzY1NywxOCBAQAogewogCXN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIgPSBzOwogCi0JZG93bigmc2VydmVyLT5yY3YuY3JlcV9zZW0pOworCW11dGV4X2xvY2soJnNlcnZlci0+cmN2LmNyZXFfbXV0ZXgpOwogCV9fbmNwdGNwX3Jjdl9wcm9jKHNlcnZlcik7Ci0JdXAoJnNlcnZlci0+cmN2LmNyZXFfc2VtKTsKKwltdXRleF91bmxvY2soJnNlcnZlci0+cmN2LmNyZXFfbXV0ZXgpOwogfQogCiB2b2lkIG5jcF90Y3BfdHhfcHJvYyh2b2lkICpzKQogewogCXN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIgPSBzOwogCQotCWRvd24oJnNlcnZlci0+cmN2LmNyZXFfc2VtKTsKKwltdXRleF9sb2NrKCZzZXJ2ZXItPnJjdi5jcmVxX211dGV4KTsKIAlfX25jcHRjcF90cnlfc2VuZChzZXJ2ZXIpOwotCXVwKCZzZXJ2ZXItPnJjdi5jcmVxX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXJ2ZXItPnJjdi5jcmVxX211dGV4KTsKIH0KIAogc3RhdGljIGludCBkb19uY3BfcnBjX2NhbGwoc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlciwgaW50IHNpemUsCkBAIC04MzMsNyArODMzLDcgQEAKIAogdm9pZCBuY3BfbG9ja19zZXJ2ZXIoc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlcikKIHsKLQlkb3duKCZzZXJ2ZXItPnNlbSk7CisJbXV0ZXhfbG9jaygmc2VydmVyLT5tdXRleCk7CiAJaWYgKHNlcnZlci0+bG9jaykKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibmNwX2xvY2tfc2VydmVyOiB3YXMgbG9ja2VkIVxuIik7CiAJc2VydmVyLT5sb2NrID0gMTsKQEAgLTg0Niw1ICs4NDYsNSBAQAogCQlyZXR1cm47CiAJfQogCXNlcnZlci0+bG9jayA9IDA7Ci0JdXAoJnNlcnZlci0+c2VtKTsKKwltdXRleF91bmxvY2soJnNlcnZlci0+bXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IDA0YWIyZmMuLjRhZTJmM2IgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTU3LDYgKzU3LDcgQEAKICNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfVkZTCiAjZGVmaW5lIE1BWF9ESVJFQ1RJT19TSVpFCSg0MDk2VUwgPDwgUEFHRV9TSElGVCkKIAorc3RhdGljIHZvaWQgbmZzX2ZyZWVfdXNlcl9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnBhZ2VzLCBpbnQgZG9fZGlydHkpOwogc3RhdGljIGttZW1fY2FjaGVfdCAqbmZzX2RpcmVjdF9jYWNoZXA7CiAKIC8qCkBAIC0xMDcsNiArMTA4LDE1IEBACiAJCQkJCXBhZ2VfY291bnQsIChydyA9PSBSRUFEKSwgMCwKIAkJCQkJKnBhZ2VzLCBOVUxMKTsKIAkJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJLyoKKwkJICogSWYgd2UgZ290IGZld2VyIHBhZ2VzIHRoYW4gZXhwZWN0ZWQgZnJvbSBnZXRfdXNlcl9wYWdlcygpLAorCQkgKiB0aGUgdXNlciBidWZmZXIgcnVucyBvZmYgdGhlIGVuZCBvZiBhIG1hcHBpbmc7IHJldHVybiBFRkFVTFQuCisJCSAqLworCQlpZiAocmVzdWx0ID49IDAgJiYgcmVzdWx0IDwgcGFnZV9jb3VudCkgeworCQkJbmZzX2ZyZWVfdXNlcl9wYWdlcygqcGFnZXMsIHJlc3VsdCwgMCk7CisJCQkqcGFnZXMgPSBOVUxMOworCQkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJfQogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtNzcxLDcgKzc4MSw4IEBACiB7CiAJbmZzX2RpcmVjdF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibmZzX2RpcmVjdF9jYWNoZSIsCiAJCQkJCQlzaXplb2Yoc3RydWN0IG5mc19kaXJlY3RfcmVxKSwKLQkJCQkJCTAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkJMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAorCQkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCQlOVUxMLCBOVUxMKTsKIAlpZiAobmZzX2RpcmVjdF9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IGE3N2VlOTUuLjM0MTM5OTYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Byb2dyYW0JbmZzX3Byb2dyYW0gPSB7CiAJLm5hbWUJCQk9ICJuZnMiLAogCS5udW1iZXIJCQk9IE5GU19QUk9HUkFNLAotCS5ucnZlcnMJCQk9IHNpemVvZihuZnNfdmVyc2lvbikgLyBzaXplb2YobmZzX3ZlcnNpb25bMF0pLAorCS5ucnZlcnMJCQk9IEFSUkFZX1NJWkUobmZzX3ZlcnNpb24pLAogCS52ZXJzaW9uCQk9IG5mc192ZXJzaW9uLAogCS5zdGF0cwkJCT0gJm5mc19ycGNzdGF0LAogCS5waXBlX2Rpcl9uYW1lCQk9ICIvbmZzIiwKQEAgLTExOCw3ICsxMTgsNyBAQAogc3RydWN0IHJwY19wcm9ncmFtCQluZnNhY2xfcHJvZ3JhbSA9IHsKIAkubmFtZSA9CQkJIm5mc2FjbCIsCiAJLm51bWJlciA9CQlORlNfQUNMX1BST0dSQU0sCi0JLm5ydmVycyA9CQlzaXplb2YobmZzYWNsX3ZlcnNpb24pIC8gc2l6ZW9mKG5mc2FjbF92ZXJzaW9uWzBdKSwKKwkubnJ2ZXJzID0JCUFSUkFZX1NJWkUobmZzYWNsX3ZlcnNpb24pLAogCS52ZXJzaW9uID0JCW5mc2FjbF92ZXJzaW9uLAogCS5zdGF0cyA9CQkmbmZzYWNsX3JwY3N0YXQsCiB9OwpAQCAtMTY3OSw3ICsxNjc5LDcgQEAKIAogCXMtPnNfZmxhZ3MgPSBmbGFnczsKIAotCWVycm9yID0gbmZzX2ZpbGxfc3VwZXIocywgZGF0YSwgZmxhZ3MgJiBNU19WRVJCT1NFID8gMSA6IDApOworCWVycm9yID0gbmZzX2ZpbGxfc3VwZXIocywgZGF0YSwgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7CiAJaWYgKGVycm9yKSB7CiAJCXVwX3dyaXRlKCZzLT5zX3Vtb3VudCk7CiAJCWRlYWN0aXZhdGVfc3VwZXIocyk7CkBAIC0xOTk2LDcgKzE5OTYsNyBAQAogCiAJcy0+c19mbGFncyA9IGZsYWdzOwogCi0JZXJyb3IgPSBuZnM0X2ZpbGxfc3VwZXIocywgZGF0YSwgZmxhZ3MgJiBNU19WRVJCT1NFID8gMSA6IDApOworCWVycm9yID0gbmZzNF9maWxsX3N1cGVyKHMsIGRhdGEsIGZsYWdzICYgTVNfU0lMRU5UID8gMSA6IDApOwogCWlmIChlcnJvcikgewogCQl1cF93cml0ZSgmcy0+c191bW91bnQpOwogCQlkZWFjdGl2YXRlX3N1cGVyKHMpOwpAQCAtMjE2Myw3ICsyMTYzLDggQEAKIHsKIAluZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoIm5mc19pbm9kZV9jYWNoZSIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBuZnNfaW5vZGUpLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAobmZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9tb3VudF9jbG50LmMgYi9mcy9uZnMvbW91bnRfY2xudC5jCmluZGV4IGRiOTliOGYuLjBiOWE3ODMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9tb3VudF9jbG50LmMKKysrIGIvZnMvbmZzL21vdW50X2NsbnQuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiBzdGF0aWMgc3RydWN0IHJwY19wcm9ncmFtCW1udF9wcm9ncmFtID0gewogCS5uYW1lCQk9ICJtb3VudCIsCiAJLm51bWJlcgkJPSBORlNfTU5UX1BST0dSQU0sCi0JLm5ydmVycwkJPSBzaXplb2YobW50X3ZlcnNpb24pL3NpemVvZihtbnRfdmVyc2lvblswXSksCisJLm5ydmVycwkJPSBBUlJBWV9TSVpFKG1udF92ZXJzaW9uKSwKIAkudmVyc2lvbgk9IG1udF92ZXJzaW9uLAogCS5zdGF0cwkJPSAmbW50X3N0YXRzLAogfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMyeGRyLmMgYi9mcy9uZnMvbmZzMnhkci5jCmluZGV4IDdmYzA1NjAuLjY1NDhhNjUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMyeGRyLmMKKysrIGIvZnMvbmZzL25mczJ4ZHIuYwpAQCAtNzA0LDYgKzcwNCw2IEBACiAKIHN0cnVjdCBycGNfdmVyc2lvbgkJbmZzX3ZlcnNpb24yID0gewogCS5udW1iZXIJCQk9IDIsCi0JLm5ycHJvY3MJCT0gc2l6ZW9mKG5mc19wcm9jZWR1cmVzKS9zaXplb2YobmZzX3Byb2NlZHVyZXNbMF0pLAorCS5ucnByb2NzCQk9IEFSUkFZX1NJWkUobmZzX3Byb2NlZHVyZXMpLAogCS5wcm9jcwkJCT0gbmZzX3Byb2NlZHVyZXMKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3hkci5jIGIvZnMvbmZzL25mczN4ZHIuYwppbmRleCBiNmMwYjUwLi41MjI0YTE5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3hkci5jCisrKyBiL2ZzL25mcy9uZnMzeGRyLmMKQEAgLTExMzgsNyArMTEzOCw3IEBACiAKIHN0cnVjdCBycGNfdmVyc2lvbgkJbmZzX3ZlcnNpb24zID0gewogCS5udW1iZXIJCQk9IDMsCi0JLm5ycHJvY3MJCT0gc2l6ZW9mKG5mczNfcHJvY2VkdXJlcykvc2l6ZW9mKG5mczNfcHJvY2VkdXJlc1swXSksCisJLm5ycHJvY3MJCT0gQVJSQVlfU0laRShuZnMzX3Byb2NlZHVyZXMpLAogCS5wcm9jcwkJCT0gbmZzM19wcm9jZWR1cmVzCiB9OwogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IDk4NGNhMzQuLmY4YzAwNjYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC0xNDMwLDcgKzE0MzAsNyBAQAogCWlmIChzdGF0dXMgPT0gMCkKIAkJc3RhdHVzID0gbmZzNF9kb19mc2luZm8oc2VydmVyLCBmaGFuZGxlLCBpbmZvKTsKIG91dDoKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBuZnM0X21hcF9lcnJvcnMoc3RhdHVzKTsKIH0KIAogc3RhdGljIGludCBfbmZzNF9wcm9jX2dldGF0dHIoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19maCAqZmhhbmRsZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCA0YmJmNWVmLi4wYTFiZDM2IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTQzODQsNyArNDM4NCw3IEBACiAKIHN0cnVjdCBycGNfdmVyc2lvbgkJbmZzX3ZlcnNpb240ID0gewogCS5udW1iZXIJCQk9IDQsCi0JLm5ycHJvY3MJCT0gc2l6ZW9mKG5mczRfcHJvY2VkdXJlcykvc2l6ZW9mKG5mczRfcHJvY2VkdXJlc1swXSksCisJLm5ycHJvY3MJCT0gQVJSQVlfU0laRShuZnM0X3Byb2NlZHVyZXMpLAogCS5wcm9jcwkJCT0gbmZzNF9wcm9jZWR1cmVzCiB9OwogCmRpZmYgLS1naXQgYS9mcy9uZnNjdGwuYyBiL2ZzL25mc2N0bC5jCmluZGV4IDBkNGNmOTQuLmE1YTE4ZDQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2N0bC5jCisrKyBiL2ZzL25mc2N0bC5jCkBAIC05OCwxMiArOTgsMTAgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnZlcnNpb24sICZhcmctPmNhX3ZlcnNpb24sIHNpemVvZihpbnQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAodmVyc2lvbiAhPSBORlNDVExfVkVSU0lPTikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJuZnNkOiBpbmNvbXBhdGlibGUgdmVyc2lvbiBpbiBzeXNjYWxsLlxuIik7CisJaWYgKHZlcnNpb24gIT0gTkZTQ1RMX1ZFUlNJT04pCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAotCWlmIChjbWQgPCAwIHx8IGNtZCA+PSBzaXplb2YobWFwKS9zaXplb2YobWFwWzBdKSB8fCAhbWFwW2NtZF0ubmFtZSkKKwlpZiAoY21kIDwgMCB8fCBjbWQgPj0gQVJSQVlfU0laRShtYXApIHx8ICFtYXBbY21kXS5uYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZpbGUgPSBkb19vcGVuKG1hcFtjbWRdLm5hbWUsIG1hcFtjbWRdLnJzaXplID8gT19SRFdSIDogT19XUk9OTFkpOwkKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGFjbC5jIGIvZnMvbmZzZC9uZnM0YWNsLmMKaW5kZXggNGEyMTA1NS4uNzM5MWY0YSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0YWNsLmMKKysrIGIvZnMvbmZzZC9uZnM0YWNsLmMKQEAgLTkwNyw3ICs5MDcsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpPTA7IGkgPCBzaXplb2YoczJ0X21hcCkgLyBzaXplb2YoKnMydF9tYXApOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzMnRfbWFwKTsgaSsrKSB7CiAJCWlmIChzMnRfbWFwW2ldLnN0cmluZ2xlbiA9PSBsZW4gJiYKIAkJCQkwID09IG1lbWNtcChzMnRfbWFwW2ldLnN0cmluZywgcCwgbGVuKSkKIAkJCXJldHVybiBzMnRfbWFwW2ldLnR5cGU7CkBAIC05MjAsNyArOTIwLDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpIDwgc2l6ZW9mKHMydF9tYXApIC8gc2l6ZW9mKCpzMnRfbWFwKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoczJ0X21hcCk7IGkrKykgewogCQlpZiAoczJ0X21hcFtpXS50eXBlID09IHdobykgewogCQkJbWVtY3B5KHAsIHMydF9tYXBbaV0uc3RyaW5nLCBzMnRfbWFwW2ldLnN0cmluZ2xlbik7CiAJCQlyZXR1cm4gczJ0X21hcFtpXS5zdHJpbmdsZW47CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCBkODI4NjYyLi44ZDNkMjNjIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTMzNSw3ICszMzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJwY192ZXJzaW9uICAgICAgIG5mc19jYl92ZXJzaW9uNCA9IHsKICAgICAgICAgLm51bWJlciAgICAgICAgICAgICAgICAgPSAxLAotICAgICAgICAubnJwcm9jcyAgICAgICAgICAgICAgICA9IHNpemVvZihuZnM0X2NiX3Byb2NlZHVyZXMpL3NpemVvZihuZnM0X2NiX3Byb2NlZHVyZXNbMF0pLAorICAgICAgICAubnJwcm9jcyAgICAgICAgICAgICAgICA9IEFSUkFZX1NJWkUobmZzNF9jYl9wcm9jZWR1cmVzKSwKICAgICAgICAgLnByb2NzICAgICAgICAgICAgICAgICAgPSBuZnM0X2NiX3Byb2NlZHVyZXMKIH07CiAKQEAgLTQxMSw3ICs0MTEsNyBAQAogCS8qIEluaXRpYWxpemUgcnBjX3Byb2dyYW0gKi8KIAlwcm9ncmFtLT5uYW1lID0gIm5mczRfY2IiOwogCXByb2dyYW0tPm51bWJlciA9IGNiLT5jYl9wcm9nOwotCXByb2dyYW0tPm5ydmVycyA9IHNpemVvZihuZnNfY2JfdmVyc2lvbikvc2l6ZW9mKG5mc19jYl92ZXJzaW9uWzBdKTsKKwlwcm9ncmFtLT5ucnZlcnMgPSBBUlJBWV9TSVpFKG5mc19jYl92ZXJzaW9uKTsKIAlwcm9ncmFtLT52ZXJzaW9uID0gbmZzX2NiX3ZlcnNpb247CiAJcHJvZ3JhbS0+c3RhdHMgPSBzdGF0OwogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDY5ZDM1MDEuLjAzODU3ZmQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC05OTIsNyArOTkyLDcgQEAKIAlpZiAoYXJncC0+b3BjbnQgPiAxMDApCiAJCWdvdG8geGRyX2Vycm9yOwogCi0JaWYgKGFyZ3AtPm9wY250ID4gc2l6ZW9mKGFyZ3AtPmlvcHMpL3NpemVvZihhcmdwLT5pb3BzWzBdKSkgeworCWlmIChhcmdwLT5vcGNudCA+IEFSUkFZX1NJWkUoYXJncC0+aW9wcykpIHsKIAkJYXJncC0+b3BzID0ga21hbGxvYyhhcmdwLT5vcGNudCAqIHNpemVvZigqYXJncC0+b3BzKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYXJncC0+b3BzKSB7CiAJCQlhcmdwLT5vcHMgPSBhcmdwLT5pb3BzOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjdGwuYyBiL2ZzL25mc2QvbmZzY3RsLmMKaW5kZXggYTA4NzFiMy4uYzg5NjBhZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNjdGwuYworKysgYi9mcy9uZnNkL25mc2N0bC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAljaGFyICpkYXRhOwogCXNzaXplX3QgcnY7CiAKLQlpZiAoaW5vID49IHNpemVvZih3cml0ZV9vcCkvc2l6ZW9mKHdyaXRlX29wWzBdKSB8fCAhd3JpdGVfb3BbaW5vXSkKKwlpZiAoaW5vID49IEFSUkFZX1NJWkUod3JpdGVfb3ApIHx8ICF3cml0ZV9vcFtpbm9dKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRhdGEgPSBzaW1wbGVfdHJhbnNhY3Rpb25fZ2V0KGZpbGUsIGJ1Ziwgc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc3N2Yy5jIGIvZnMvbmZzZC9uZnNzdmMuYwppbmRleCAxZDE2M2I2Li4zNzkwNzI3IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc3N2Yy5jCisrKyBiL2ZzL25mc2QvbmZzc3ZjLmMKQEAgLTcyLDcgKzcyLDcgQEAKIH07CiAKICNkZWZpbmUgTkZTRF9BQ0xfTUlOVkVSUyAgICAgICAgICAgIDIKLSNkZWZpbmUgTkZTRF9BQ0xfTlJWRVJTCQkoc2l6ZW9mKG5mc2RfYWNsX3ZlcnNpb24pL3NpemVvZihuZnNkX2FjbF92ZXJzaW9uWzBdKSkKKyNkZWZpbmUgTkZTRF9BQ0xfTlJWRVJTCQlBUlJBWV9TSVpFKG5mc2RfYWNsX3ZlcnNpb24pCiBzdGF0aWMgc3RydWN0IHN2Y192ZXJzaW9uICpuZnNkX2FjbF92ZXJzaW9uc1tORlNEX0FDTF9OUlZFUlNdOwogCiBzdGF0aWMgc3RydWN0IHN2Y19wcm9ncmFtCW5mc2RfYWNsX3Byb2dyYW0gPSB7CkBAIC0xMDEsNyArMTAxLDcgQEAKIH07CiAKICNkZWZpbmUgTkZTRF9NSU5WRVJTICAgIAkyCi0jZGVmaW5lIE5GU0RfTlJWRVJTCQkoc2l6ZW9mKG5mc2RfdmVyc2lvbikvc2l6ZW9mKG5mc2RfdmVyc2lvblswXSkpCisjZGVmaW5lIE5GU0RfTlJWRVJTCQlBUlJBWV9TSVpFKG5mc2RfdmVyc2lvbikKIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3ZlcnNpb24gKm5mc2RfdmVyc2lvbnNbTkZTRF9OUlZFUlNdOwogCiBzdHJ1Y3Qgc3ZjX3Byb2dyYW0JCW5mc2RfcHJvZ3JhbSA9IHsKZGlmZiAtLWdpdCBhL2ZzL25scy9LY29uZmlnIGIvZnMvbmxzL0tjb25maWcKaW5kZXggMGFiOGYwMC4uOTc2ZWNjYyAxMDA2NDQKLS0tIGEvZnMvbmxzL0tjb25maWcKKysrIGIvZnMvbmxzL0tjb25maWcKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCSAgKGtvaTgtdSkgYW5kIEJlbGFydXNpYW4gKGtvaTgtcnUpIGNoYXJhY3RlciBzZXRzLgogCiBjb25maWcgTkxTX1VURjgKLQl0cmlzdGF0ZSAiTkxTIFVURjgiCisJdHJpc3RhdGUgIk5MUyBVVEYtOCIKIAlkZXBlbmRzIG9uIE5MUwogCWhlbHAKIAkgIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgZmlsZW5hbWVzIHdpdGggbmF0aXZlIGxhbmd1YWdlIGNoYXJhY3RlcnMKZGlmZiAtLWdpdCBhL2ZzL25scy9ubHNfZXVjLWpwLmMgYi9mcy9ubHMvbmxzX2V1Yy1qcC5jCmluZGV4IDgwZjEwOGEuLjA2NjQwYzMgMTAwNjQ0Ci0tLSBhL2ZzL25scy9ubHNfZXVjLWpwLmMKKysrIGIvZnMvbmxzL25sc19ldWMtanAuYwpAQCAtMjY4LDggKzI2OCw2IEBACiAJezB4RkMsIDB4NEJ9LAogfTsKIAotI2RlZmluZSBNQVBfRUxFTUVOVF9PRihtYXApCShzaXplb2YobWFwKSAvIHNpemVvZihtYXBbMF0pKQotCiBzdGF0aWMgaW5saW5lIGludCBzamlzaWJtMmV1Yyh1bnNpZ25lZCBjaGFyICpldWMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2ppc19oaSwKIAkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2ppc19sbyk7CiBzdGF0aWMgaW5saW5lIGludCBldWMyc2ppc2libV9qaXN4MDIxMih1bnNpZ25lZCBjaGFyICpzamlzLCBjb25zdCB1bnNpZ25lZCBjaGFyIGV1Y19oaSwKQEAgLTMxMCw3ICszMDgsNyBAQAogCXVuc2lnbmVkIHNob3J0IGV1YzsKIAogCW1pbl9pbmRleCA9IDA7Ci0JbWF4X2luZGV4ID0gTUFQX0VMRU1FTlRfT0YoZXVjMnNqaXNpYm1famlzeDAyMTJfbWFwKSAtIDE7CisJbWF4X2luZGV4ID0gQVJSQVlfU0laRShldWMyc2ppc2libV9qaXN4MDIxMl9tYXApIC0gMTsKIAlldWMgPSAoZXVjX2hpIDw8IDgpIHwgZXVjX2xvOwogCiAJd2hpbGUgKG1pbl9pbmRleCA8PSBtYXhfaW5kZXgpIHsKQEAgLTMzOSw3ICszMzcsNyBAQAogCWVsc2UKIAkJaW5kZXggPSAoKGV1Y19oaSA8PCA4KSB8IGV1Y19sbykgLSAweEY0QTEgKyAxMjsKIAotCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gTUFQX0VMRU1FTlRfT0YoZXVjMnNqaXNpYm1fZzN1cHBlcl9tYXApKSkKKwlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IEFSUkFZX1NJWkUoZXVjMnNqaXNpYm1fZzN1cHBlcl9tYXApKSkKIAkJcmV0dXJuIDA7CiAKIAlzamlzWzBdID0gZXVjMnNqaXNpYm1fZzN1cHBlcl9tYXBbaW5kZXhdWzBdOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9DaGFuZ2VMb2cgYi9mcy9udGZzL0NoYW5nZUxvZwppbmRleCAwMmY0NDA5Li4zNWNjNGIxIDEwMDY0NAotLS0gYS9mcy9udGZzL0NoYW5nZUxvZworKysgYi9mcy9udGZzL0NoYW5nZUxvZwpAQCAtMSw5ICsxLDkgQEAKIFRvRG8vTm90ZXM6CiAJLSBGaW5kIGFuZCBmaXggYnVncy4KIAktIFRoZSBvbmx5IHBsYWNlcyBpbiB0aGUga2VybmVsIHdoZXJlIGEgZmlsZSBpcyByZXNpemVkIGFyZQotCSAgbnRmc19maWxlX3dyaXRlKigpIGFuZCBudGZzX3RydW5jYXRlKCkgZm9yIGJvdGggb2Ygd2hpY2ggaV9zZW0gaXMKKwkgIG50ZnNfZmlsZV93cml0ZSooKSBhbmQgbnRmc190cnVuY2F0ZSgpIGZvciBib3RoIG9mIHdoaWNoIGlfbXV0ZXggaXMKIAkgIGhlbGQuICBKdXN0IGhhdmUgdG8gYmUgY2FyZWZ1bCBpbiByZWFkLS93cml0ZXBhZ2UgYW5kIG90aGVyIGhlbHBlcnMKLQkgIG5vdCBydW5uaW5nIHVuZGVyIGlfc2VtIHRoYXQgd2UgcGxheSBuaWNlLi4uICBBbHNvIG5lZWQgdG8gYmUgY2FyZWZ1bAorCSAgbm90IHJ1bm5pbmcgdW5kZXIgaV9tdXRleCB0aGF0IHdlIHBsYXkgbmljZS4gIEFsc28gbmVlZCB0byBiZSBjYXJlZnVsCiAJICB3aXRoIGluaXRpYWxpemVkX3NpemUgZXh0ZW5zaW9uIGluIG50ZnNfZmlsZV93cml0ZSooKSBhbmQgd3JpdGVwYWdlLgogCSAgVVBEQVRFOiBUaGUgb25seSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGNoZWNrZWQgYXJlIHRoZSBjb21wcmVzc2VkCiAJICB3cml0ZSBhbmQgdGhlIG90aGVyIGF0dHJpYnV0ZSByZXNpemUvd3JpdGUgY2FzZXMgbGlrZSBpbmRleApAQCAtMTYsOCArMTYsNTIgQEAKIAkgIGlub2RlIGhhdmluZyBiZWVuIGRpc2NhcmRlZCBhbHJlYWR5LiAgV2hldGhlciB0aGlzIGNhbiBhY3R1YWxseSBldmVyCiAJICBoYXBwZW4gaXMgdW5jbGVhciBob3dldmVyIHNvIGl0IGlzIHdvcnRoIHdhaXRpbmcgdW50aWwgc29tZW9uZSBoaXRzCiAJICB0aGUgcHJvYmxlbS4KLQktIEVuYWJsZSB0aGUgY29kZSBmb3Igc2V0dGluZyB0aGUgTlQ0IGNvbXBhdGliaWxpdHkgZmxhZyB3aGVuIHdlIHN0YXJ0Ci0JICBtYWtpbmcgTlRGUyAxLjIgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucy4KKworMi4xLjI3IC0gVmFyaW91cyBidWcgZml4ZXMgYW5kIGNsZWFudXBzLgorCisJLSBGaXggdHdvIGNvbXBpbGVyIHdhcm5pbmdzIG9uIEFscGhhLiAgVGhhbmtzIHRvIEFuZHJldyBNb3J0b24gZm9yCisJICByZXBvcnRpbmcgdGhlbS4KKwktIEZpeCBhbiAoaW5ub2NlbnQpIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIHJ1bmxpc3QgY29kZS4KKwktIEZpeCBhIGJ1Z2dldHRlIGluIGFuICJzaG91bGQgYmUgaW1wb3NzaWJsZSIgY2FzZSBoYW5kbGluZyB3aGVyZSB3ZQorCSAgY29udGludWVkIHRoZSBhdHRyaWJ1dGUgbG9va3VwIGxvb3AgaW5zdGVhZCBvZiBhYm9ydGluZyBpdC4KKwktIFVzZSBidWZmZXJfbWlncmF0ZV9wYWdlKCkgZm9yIHRoZSAtPm1pZ3JhdGVwYWdlIGZ1bmN0aW9uIG9mIGFsbCBudGZzCisJICBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMuCisJLSBGaXggY29tcGFyaXNvbiBvZiAkTUZUIGFuZCAkTUZUTWlyciB0byBub3QgYmFpbCBvdXQgd2hlbiB0aGVyZSBhcmUKKwkgIHVudXNlZCwgaW52YWxpZCBtZnQgcmVjb3JkcyB3aGljaCBhcmUgdGhlIHNhbWUgaW4gYm90aCAkTUZUIGFuZAorCSAgJE1GVE1pcnIuCisJLSBBZGQgc3VwcG9ydCBmb3Igc3BhcnNlIGZpbGVzIHdoaWNoIGhhdmUgYSBjb21wcmVzc2lvbiB1bml0IG9mIDAuCisJLSBSZW1vdmUgYWxsIHRoZSBtYWtlX2JhZF9pbm9kZSgpIGNhbGxzLiAgVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQKKwkgIGZyb20gcmVhZCBpbm9kZSBhbmQgbmV3IGlub2RlIGNvZGUgcGF0aHMuCisJLSBMaW1pdCBuYW1lIGxlbmd0aCBpbiBmcy9udGZzL3VuaXN0ci5jOjpudGZzX25sc3RvdWNzKCkgdG8gbWF4aW11bQorCSAgYWxsb3dlZCBieSBOVEZTLCBpLmUuIDI1NSBVbmljb2RlIGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRpbmcgdGhlCisJICB0ZXJtaW5hdGluZyBOVUxMICh3aGljaCBpcyBub3Qgc3RvcmVkIG9uIGRpc2spLgorCS0gSW1wcm92ZSBjb21tZW50cyBvbiBmaWxlIGF0dHJpYnV0ZSBmbGFncyBpbiBmcy9udGZzL2xheW91dC5oLgorCS0gRml4IGEgYnVnIGluIGZzL250ZnMvaW5vZGUuYzo6bnRmc19yZWFkX2xvY2tlZF9pbmRleF9pbm9kZSgpIHdoZXJlIHdlCisJICBmb3Jnb3QgdG8gdXBkYXRlIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHNvIGxvYWRpbmcgaW5kZXggaW5vZGVzIHdoaWNoCisJICBoYXZlIGFuIGluZGV4IGFsbG9jYXRpb24gYXR0cmlidXRlIGZhaWxlZC4KKwktIEFkZCBhIG1pc3NpbmcgY2FsbCB0byBmbHVzaF9kY2FjaGVfbWZ0X3JlY29yZF9wYWdlKCkgaW4KKwkgIGZzL250ZnMvaW5vZGUuYzo6bnRmc193cml0ZV9pbm9kZSgpLgorCS0gSGFuZGxlIHRoZSByZWNlbnRseSBpbnRyb2R1Y2VkIC1FTkFNRVRPT0xPTkcgcmV0dXJuIHZhbHVlIGZyb20KKwkgIGZzL250ZnMvdW5pc3RyLmM6Om50ZnNfbmxzdG91Y3MoKSBpbiBmcy9udGZzL25hbWVpLmM6Om50ZnNfbG9va3VwKCkuCisJLSBTZW1hcGhvcmUgdG8gbXV0ZXggY29udmVyc2lvbi4gIChJbmdvIE1vbG5hcikKKworMi4xLjI2IC0gTWlub3IgYnVnIGZpeGVzIGFuZCB1cGRhdGVzLgorCisJLSBGaXggYSBwb3RlbnRpYWwgb3ZlcmZsb3cgaW4gZmlsZS5jIHdoZXJlIGEgY2FzdCB0byBzNjQgd2FzIG1pc3NpbmcgaW4KKwkgIGEgbGVmdCBzaGlmdCBvZiBhIHBhZ2UgaW5kZXguCisJLSBUaGUgc3RydWN0IGlub2RlIGhhcyBoYWQgaXRzIGlfc2VtIHNlbWFwaG9yZSBjaGFuZ2VkIHRvIGEgbXV0ZXggbmFtZWQKKwkgIGlfbXV0ZXguCisJLSBXZSBoYXZlIHN0cnVjdCBrbWVtX2NhY2hlIG5vdyBzbyB1c2UgaXQgaW5zdGVhZCBvZiB0aGUgdHlwZWRlZgorCSAga21lbV9jYWNoZV90LiAgKFBla2thIEVuYmVyZykKKwktIEltcGxlbWVudCBzdXBwb3J0IGZvciBzZWN0b3Igc2l6ZXMgYWJvdmUgNTEyIGJ5dGVzICh1cCB0byB0aGUgbWF4aW11bQorCSAgc3VwcG9ydGVkIGJ5IE5URlMgd2hpY2ggaXMgNDA5NiBieXRlcykuCisJLSBEbyBtb3JlIGRldGFpbGVkIHJlcG9ydGluZyBvZiB3aHkgd2UgY2Fubm90IG1vdW50IHJlYWQtd3JpdGUgYnkKKwkgIHNwZWNpYWwgY2FzaW5nIHRoZSBWT0xVTUVfTU9ESUZJRURfQllfQ0hLRFNLIGZsYWcuCisJLSBNaXNjZWxsYW5lb3VzIHVwZGF0ZXMgdG8gbGF5b3V0LmguCisJLSBDb3BlIHdpdGggYXR0cmlidXRlIGxpc3QgYXR0cmlidXRlIGhhdmluZyBpbnZhbGlkIGZsYWdzLiAgV2luZG93cworCSAgY29wZXMgd2l0aCB0aGlzIGFuZCBldmVuIGNoa2RzayBkb2VzIG5vdCBkZXRlY3Qgb3IgZml4IHRoaXMgc28gd2UKKwkgIGhhdmUgdG8gY29wZSB3aXRoIGl0LCB0b28uICBUaGFua3MgdG8gUGF3ZWwgS290IGZvciByZXBvcnRpbmcgdGhlCisJICBwcm9ibGVtLgogCiAyLjEuMjUgLSAoQWxtb3N0KSBmdWxseSBpbXBsZW1lbnQgd3JpdGUoMikgYW5kIHRydW5jYXRlKDIpLgogCkBAIC0zNzMsNyArNDE3LDcgQEAKIAkgIHNpbmdsZSBvbmUgb2YgdGhlbSBoYWQgYW4gbXN0IGVycm9yLiAgKFRoYW5rcyB0byBLZW4gTWFjRmVycmluIGZvcgogCSAgdGhlIGJ1ZyByZXBvcnQuKQogCS0gRml4IGVycm9yIGhhbmRsaW5nIGluIGZzL250ZnMvcXVvdGEuYzo6bnRmc19tYXJrX3F1b3Rhc19vdXRfb2ZfZGF0ZSgpCi0JICB3aGVyZSB3ZSBmYWlsZWQgdG8gcmVsZWFzZSBpX3NlbSBvbiB0aGUgJFF1b3RhLyRRIGF0dHJpYnV0ZSBpbm9kZS4KKwkgIHdoZXJlIHdlIGZhaWxlZCB0byByZWxlYXNlIGlfbXV0ZXggb24gdGhlICRRdW90YS8kUSBhdHRyaWJ1dGUgaW5vZGUuCiAJLSBGaXggYnVnIGluIGhhbmRsaW5nIG9mIGJhZCBpbm9kZXMgaW4gZnMvbnRmcy9uYW1laS5jOjpudGZzX2xvb2t1cCgpLgogCS0gQWRkIG1hcHBpbmcgb2YgdW5tYXBwZWQgYnVmZmVycyB0byBhbGwgcmVtYWluaW5nIGNvZGUgcGF0aHMsIGkuZS4KIAkgIGZzL250ZnMvYW9wcy5jOjpudGZzX3dyaXRlX21zdF9ibG9jaygpLCBtZnQuYzo6bnRmc19zeW5jX21mdF9taXJyb3IoKSwKQEAgLTg3NCw3ICs5MTgsNyBAQAogCSAgY2x1c3RlcnMuIChQaGlsaXBwIFRob21hcykKIAktIGF0dHJpYi5jOjpsb2FkX2F0dHJpYnV0ZV9saXN0KCk6IEZpeCBidWcgd2hlbiBpbml0aWFsaXplZF9zaXplIGlzIGEKIAkgIG11bHRpcGxlIG9mIHRoZSBibG9ja19zaXplIGJ1dCBub3QgdGhlIGNsdXN0ZXIgc2l6ZS4gKFN6YWJvbGNzCi0JICBTemFrYWNzaXRzIDxzemFrYUBzaWVuZXQuaHU+KQorCSAgU3pha2Fjc2l0cykKIAogMi4xLjIgLSBJbXBvcnRhbnQgYnVnIGZpeGVzIGFsZXZpYXRpbmcgdGhlIGhhbmdzIGluIHN0YXRmcy4KIApAQCAtODg0LDcgKzkyOCw3IEBACiAKIAktIEFkZCBoYW5kbGluZyBmb3IgaW5pdGlhbGl6ZWRfc2l6ZSAhPSBkYXRhX3NpemUgaW4gY29tcHJlc3NlZCBmaWxlcy4KIAktIFJlZHVjZSBmdW5jdGlvbiBsb2NhbCBzdGFjayB1c2FnZSBmcm9tIDB4M2Q0IGJ5dGVzIHRvIGp1c3Qgbm9pc2UgaW4KLQkgIGZzL250ZnMvdXBjYXNlLmMuIChSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PikKKwkgIGZzL250ZnMvdXBjYXNlLmMuIChSYW5keSBEdW5sYXApCiAJLSBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3MgZm9yIG5ld2VyIGdjYy4KIAktIFBhZ2VzIGFyZSBubyBsb25nZXIga21hcHBlZCBieSBtbS9maWxlbWFwLmM6OmdlbmVyaWNfZmlsZV93cml0ZSgpCiAJICBhcm91bmQgY2FsbHMgdG8gLT57cHJlcGFyZSxjb21taXR9X3dyaXRlLiAgQWRhcHQgTlRGUyBhcHByb3ByaWF0ZWx5CkBAIC0xMjAxLDExICsxMjQ1LDExIEBACiAJICB0aGUga2VybmVsLiBXZSBwcm9iYWJseSB3YW50IGEga2VybmVsIGdlbmVyaWMgaW5pdF9hZGRyZXNzX3NwYWNlKCkKIAkgIGZ1bmN0aW9uLi4uCiAJLSBEcm9wIEJLTCBmcm9tIG50ZnNfcmVhZGRpcigpIGFmdGVyIGNvbnN1bHRhdGlvbiB3aXRoIEFsIFZpcm8uIFRoZQotCSAgb25seSBjYWxsZXIgb2YgLT5yZWFkZGlyKCkgaXMgdmZzX3JlYWRkaXIoKSB3aGljaCBob2xkcyBpX3NlbSBkdXJpbmcKLQkgIHRoZSBjYWxsLCBhbmQgaV9zZW0gaXMgc3VmZmljaWVudCBwcm90ZWN0aW9uIGFnYWluc3QgY2hhbmdlcyBpbiB0aGUKLQkgIGRpcmVjdG9yeSBpbm9kZSAoaW5jbHVkaW5nIC0+aV9zaXplKS4KKwkgIG9ubHkgY2FsbGVyIG9mIC0+cmVhZGRpcigpIGlzIHZmc19yZWFkZGlyKCkgd2hpY2ggaG9sZHMgaV9tdXRleAorCSAgZHVyaW5nIHRoZSBjYWxsLCBhbmQgaV9tdXRleCBpcyBzdWZmaWNpZW50IHByb3RlY3Rpb24gYWdhaW5zdCBjaGFuZ2VzCisJICBpbiB0aGUgZGlyZWN0b3J5IGlub2RlIChpbmNsdWRpbmcgLT5pX3NpemUpLgogCS0gVXNlIGdlbmVyaWNfZmlsZV9sbHNlZWsoKSBmb3IgZGlyZWN0b3JpZXMgKGFzIG9wcG9zZWQgdG8KLQkgIGRlZmF1bHRfbGxzZWVrKCkpIGFzIHRoaXMgZG93bnMgaV9zZW0gaW5zdGVhZCBvZiB0aGUgQktMIHdoaWNoIGlzCisJICBkZWZhdWx0X2xsc2VlaygpKSBhcyB0aGlzIGRvd25zIGlfbXV0ZXggaW5zdGVhZCBvZiB0aGUgQktMIHdoaWNoIGlzCiAJICB3aGF0IHdlIG5vdyBuZWVkIGZvciBleGNsdXNpb24gYWdhaW5zdCAtPmZfcG9zIGNoYW5nZXMgY29uc2lkZXJpbmcgd2UKIAkgIG5vIGxvbmdlciB0YWtlIHRoZSBCS0wgaW4gbnRmc19yZWFkZGlyKCkuCiAKZGlmZiAtLWdpdCBhL2ZzL250ZnMvTWFrZWZpbGUgYi9mcy9udGZzL01ha2VmaWxlCmluZGV4IGQwZDQ1ZDEuLmUyN2I0ZWEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvTWFrZWZpbGUKKysrIGIvZnMvbnRmcy9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAkgICAgIGluZGV4Lm8gaW5vZGUubyBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHN5c2N0bC5vIFwKIAkgICAgIHVuaXN0ci5vIHVwY2FzZS5vCiAKLUVYVFJBX0NGTEFHUyA9IC1ETlRGU19WRVJTSU9OPVwiMi4xLjI1XCIKK0VYVFJBX0NGTEFHUyA9IC1ETlRGU19WRVJTSU9OPVwiMi4xLjI3XCIKIAogaWZlcSAoJChDT05GSUdfTlRGU19ERUJVRykseSkKIEVYVFJBX0NGTEFHUyArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9mcy9udGZzL2FvcHMuYyBiL2ZzL250ZnMvYW9wcy5jCmluZGV4IDFjMGE0MzEuLjU4MDQxMmQgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvYW9wcy5jCisrKyBiL2ZzL250ZnMvYW9wcy5jCkBAIC0yLDcgKzIsNyBAQAogICogYW9wcy5jIC0gTlRGUyBrZXJuZWwgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zIGFuZCBwYWdlIGNhY2hlIGhhbmRsaW5nLgogICoJICAgIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA2IEFudG9uIEFsdGFwYXJtYWtvdgogICogQ29weXJpZ2h0IChjKSAyMDAyIFJpY2hhcmQgUnVzc29uCiAgKgogICogVGhpcyBwcm9ncmFtL2luY2x1ZGUgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KQEAgLTIwMCw4ICsyMDEsOCBAQAogCS8qICRNRlQvJERBVEEgbXVzdCBoYXZlIGl0cyBjb21wbGV0ZSBydW5saXN0IGluIG1lbW9yeSBhdCBhbGwgdGltZXMuICovCiAJQlVHX09OKCFuaS0+cnVubGlzdC5ybCAmJiAhbmktPm1mdF9ubyAmJiAhTklub0F0dHIobmkpKTsKIAotCWJsb2Nrc2l6ZV9iaXRzID0gVkZTX0kobmkpLT5pX2Jsa2JpdHM7Ci0JYmxvY2tzaXplID0gMSA8PCBibG9ja3NpemVfYml0czsKKwlibG9ja3NpemUgPSB2b2wtPnNiLT5zX2Jsb2Nrc2l6ZTsKKwlibG9ja3NpemVfYml0cyA9IHZvbC0+c2ItPnNfYmxvY2tzaXplX2JpdHM7CiAKIAlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKIAkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgYmxvY2tzaXplLCAwKTsKQEAgLTU2OSwxMCArNTcwLDggQEAKIAogCUJVR19PTighTklub05vblJlc2lkZW50KG5pKSk7CiAJQlVHX09OKE5Jbm9Nc3RQcm90ZWN0ZWQobmkpKTsKLQotCWJsb2Nrc2l6ZV9iaXRzID0gdmktPmlfYmxrYml0czsKLQlibG9ja3NpemUgPSAxIDw8IGJsb2Nrc2l6ZV9iaXRzOwotCisJYmxvY2tzaXplID0gdm9sLT5zYi0+c19ibG9ja3NpemU7CisJYmxvY2tzaXplX2JpdHMgPSB2b2wtPnNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgewogCQlCVUdfT04oIVBhZ2VVcHRvZGF0ZShwYWdlKSk7CiAJCWNyZWF0ZV9lbXB0eV9idWZmZXJzKHBhZ2UsIGJsb2Nrc2l6ZSwKQEAgLTk0OSw4ICs5NDgsOCBAQAogCSAqLwogCUJVR19PTighKGlzX21mdCB8fCBTX0lTRElSKHZpLT5pX21vZGUpIHx8CiAJCQkoTklub0F0dHIobmkpICYmIG5pLT50eXBlID09IEFUX0lOREVYX0FMTE9DQVRJT04pKSk7Ci0JYmhfc2l6ZV9iaXRzID0gdmktPmlfYmxrYml0czsKLQliaF9zaXplID0gMSA8PCBiaF9zaXplX2JpdHM7CisJYmhfc2l6ZSA9IHZvbC0+c2ItPnNfYmxvY2tzaXplOworCWJoX3NpemVfYml0cyA9IHZvbC0+c2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJbWF4X2JocyA9IFBBR0VfQ0FDSEVfU0laRSAvIGJoX3NpemU7CiAJQlVHX09OKCFtYXhfYmhzKTsKIAlCVUdfT04obWF4X2JocyA+IE1BWF9CVUZfUEVSX1BBR0UpOwpAQCAtMTI3OSwxOCArMTI3OCwxOCBAQAogCQkKIAkJdG5pID0gbG9ja2VkX25pc1tucl9sb2NrZWRfbmlzXTsKIAkJLyogR2V0IHRoZSBiYXNlIGlub2RlLiAqLwotCQlkb3duKCZ0bmktPmV4dGVudF9sb2NrKTsKKwkJbXV0ZXhfbG9jaygmdG5pLT5leHRlbnRfbG9jayk7CiAJCWlmICh0bmktPm5yX2V4dGVudHMgPj0gMCkKIAkJCWJhc2VfdG5pID0gdG5pOwogCQllbHNlIHsKIAkJCWJhc2VfdG5pID0gdG5pLT5leHQuYmFzZV9udGZzX2lubzsKIAkJCUJVR19PTighYmFzZV90bmkpOwogCQl9Ci0JCXVwKCZ0bmktPmV4dGVudF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0bmktPmV4dGVudF9sb2NrKTsKIAkJbnRmc19kZWJ1ZygiVW5sb2NraW5nICVzIGlub2RlIDB4JWx4LiIsCiAJCQkJdG5pID09IGJhc2VfdG5pID8gImJhc2UiIDogImV4dGVudCIsCiAJCQkJdG5pLT5tZnRfbm8pOwotCQl1cCgmdG5pLT5tcmVjX2xvY2spOworCQltdXRleF91bmxvY2soJnRuaS0+bXJlY19sb2NrKTsKIAkJYXRvbWljX2RlYygmdG5pLT5jb3VudCk7CiAJCWlwdXQoVkZTX0koYmFzZV90bmkpKTsKIAl9CkBAIC0xNTMxLDcgKzE1MzAsNiBAQAogCQkJCSJlcnJvciAlaS4iLCBlcnIpOwogCQlTZXRQYWdlRXJyb3IocGFnZSk7CiAJCU5Wb2xTZXRFcnJvcnMobmktPnZvbCk7Ci0JCW1ha2VfYmFkX2lub2RlKHZpKTsKIAl9CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJaWYgKGN0eCkKQEAgLTE1NTMsNiArMTU1MSw5IEBACiAjaWZkZWYgTlRGU19SVwogCS53cml0ZXBhZ2UJPSBudGZzX3dyaXRlcGFnZSwJLyogV3JpdGUgZGlydHkgcGFnZSB0byBkaXNrLiAqLwogI2VuZGlmIC8qIE5URlNfUlcgKi8KKwkubWlncmF0ZXBhZ2UJPSBidWZmZXJfbWlncmF0ZV9wYWdlLAkvKiBNb3ZlIGEgcGFnZSBjYWNoZSBwYWdlIGZyb20KKwkJCQkJCSAgIG9uZSBwaHlzaWNhbCBwYWdlIHRvIGFuCisJCQkJCQkgICBvdGhlci4gKi8KIH07CiAKIC8qKgpAQCAtMTU2OSw2ICsxNTcwLDkgQEAKIAkJCQkJCSAgIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGJ1ZmZlcnMKIAkJCQkJCSAgIGJlbG9uZ2luZyB0byB0aGUgcGFnZS4gKi8KICNlbmRpZiAvKiBOVEZTX1JXICovCisJLm1pZ3JhdGVwYWdlCT0gYnVmZmVyX21pZ3JhdGVfcGFnZSwJLyogTW92ZSBhIHBhZ2UgY2FjaGUgcGFnZSBmcm9tCisJCQkJCQkgICBvbmUgcGh5c2ljYWwgcGFnZSB0byBhbgorCQkJCQkJICAgb3RoZXIuICovCiB9OwogCiAjaWZkZWYgTlRGU19SVwpAQCAtMTU5Niw3ICsxNjAwLDcgQEAKIAogCUJVR19PTighUGFnZVVwdG9kYXRlKHBhZ2UpKTsKIAllbmQgPSBvZnMgKyBuaS0+aXR5cGUuaW5kZXguYmxvY2tfc2l6ZTsKLQliaF9zaXplID0gMSA8PCBWRlNfSShuaSktPmlfYmxrYml0czsKKwliaF9zaXplID0gVkZTX0kobmkpLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAlzcGluX2xvY2soJm1hcHBpbmctPnByaXZhdGVfbG9jayk7CiAJaWYgKHVubGlrZWx5KCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKSkgewogCQlzcGluX3VubG9jaygmbWFwcGluZy0+cHJpdmF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvYXR0cmliLmMgYi9mcy9udGZzL2F0dHJpYi5jCmluZGV4IDk0ODBhMDUuLjE2NjNmNWMgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvYXR0cmliLmMKKysrIGIvZnMvbnRmcy9hdHRyaWIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogYXR0cmliLmMgLSBOVEZTIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiAgUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IEFudG9uIEFsdGFwYXJtYWtvdgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgQW50b24gQWx0YXBhcm1ha292CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgUmljaGFyZCBSdXNzb24KICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTA0OCw3ICsxMDQ4LDcgQEAKIAkJCQlsZTMyX3RvX2NwdShjdHgtPm1yZWMtPmJ5dGVzX2FsbG9jYXRlZCkpCiAJCQlicmVhazsKIAkJaWYgKGEtPnR5cGUgPT0gQVRfRU5EKQotCQkJY29udGludWU7CisJCQlicmVhazsKIAkJaWYgKCFhLT5sZW5ndGgpCiAJCQlicmVhazsKIAkJaWYgKGFsX2VudHJ5LT5pbnN0YW5jZSAhPSBhLT5pbnN0YW5jZSkKQEAgLTE2OTUsNyArMTY5NSw5IEBACiAJCQlhLT5kYXRhLm5vbl9yZXNpZGVudC5pbml0aWFsaXplZF9zaXplID0KIAkJCWNwdV90b19zbGU2NChhdHRyX3NpemUpOwogCWlmIChOSW5vU3BhcnNlKG5pKSB8fCBOSW5vQ29tcHJlc3NlZChuaSkpIHsKLQkJYS0+ZGF0YS5ub25fcmVzaWRlbnQuY29tcHJlc3Npb25fdW5pdCA9IDQ7CisJCWEtPmRhdGEubm9uX3Jlc2lkZW50LmNvbXByZXNzaW9uX3VuaXQgPSAwOworCQlpZiAoTklub0NvbXByZXNzZWQobmkpIHx8IHZvbC0+bWFqb3JfdmVyIDwgMykKKwkJCWEtPmRhdGEubm9uX3Jlc2lkZW50LmNvbXByZXNzaW9uX3VuaXQgPSA0OwogCQlhLT5kYXRhLm5vbl9yZXNpZGVudC5jb21wcmVzc2VkX3NpemUgPQogCQkJCWEtPmRhdGEubm9uX3Jlc2lkZW50LmFsbG9jYXRlZF9zaXplOwogCX0gZWxzZQpAQCAtMTcxNCwxMyArMTcxNiwyMCBAQAogCW5pLT5hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXplOwogCWlmIChOSW5vU3BhcnNlKG5pKSB8fCBOSW5vQ29tcHJlc3NlZChuaSkpIHsKIAkJbmktPml0eXBlLmNvbXByZXNzZWQuc2l6ZSA9IG5pLT5hbGxvY2F0ZWRfc2l6ZTsKLQkJbmktPml0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZSA9IDFVIDw8Ci0JCQkJKGEtPmRhdGEubm9uX3Jlc2lkZW50LmNvbXByZXNzaW9uX3VuaXQgKwotCQkJCXZvbC0+Y2x1c3Rlcl9zaXplX2JpdHMpOwotCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19zaXplX2JpdHMgPQotCQkJCWZmcyhuaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19zaXplKSAtIDE7Ci0JCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX2NsdXN0ZXJzID0gMVUgPDwKLQkJCQlhLT5kYXRhLm5vbl9yZXNpZGVudC5jb21wcmVzc2lvbl91bml0OworCQlpZiAoYS0+ZGF0YS5ub25fcmVzaWRlbnQuY29tcHJlc3Npb25fdW5pdCkgeworCQkJbmktPml0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZSA9IDFVIDw8IChhLT5kYXRhLgorCQkJCQlub25fcmVzaWRlbnQuY29tcHJlc3Npb25fdW5pdCArCisJCQkJCXZvbC0+Y2x1c3Rlcl9zaXplX2JpdHMpOworCQkJbmktPml0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZV9iaXRzID0KKwkJCQkJZmZzKG5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX3NpemUpIC0KKwkJCQkJMTsKKwkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX2NsdXN0ZXJzID0gMVUgPDwKKwkJCQkJYS0+ZGF0YS5ub25fcmVzaWRlbnQuY29tcHJlc3Npb25fdW5pdDsKKwkJfSBlbHNlIHsKKwkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX3NpemUgPSAwOworCQkJbmktPml0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZV9iaXRzID0gMDsKKwkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX2NsdXN0ZXJzID0gMDsKKwkJfQogCQl2aS0+aV9ibG9ja3MgPSBuaS0+aXR5cGUuY29tcHJlc3NlZC5zaXplID4+IDk7CiAJfSBlbHNlCiAJCXZpLT5pX2Jsb2NrcyA9IG5pLT5hbGxvY2F0ZWRfc2l6ZSA+PiA5OwpAQCAtMjQyOSwxNiArMjQzOCwxMiBAQAogCQkJCSJjaGtkc2sgdG8gcmVjb3Zlci4iLCBJU19FUlIobSkgPwogCQkJCSJyZXN0b3JlIGF0dHJpYnV0ZSBzZWFyY2ggY29udGV4dCIgOgogCQkJCSJ0cnVuY2F0ZSBhdHRyaWJ1dGUgcnVubGlzdCIpOwotCQltYWtlX2JhZF9pbm9kZSh2aSk7Ci0JCW1ha2VfYmFkX2lub2RlKFZGU19JKGJhc2VfbmkpKTsKIAkJTlZvbFNldEVycm9ycyh2b2wpOwogCX0gZWxzZSBpZiAobXBfcmVidWlsdCkgewogCQlpZiAobnRmc19hdHRyX3JlY29yZF9yZXNpemUobSwgYSwgYXR0cl9sZW4pKSB7CiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gcmVzdG9yZSBhdHRyaWJ1dGUgIgogCQkJCQkicmVjb3JkIGluIGVycm9yIGNvZGUgcGF0aC4gIFJ1biAiCiAJCQkJCSJjaGtkc2sgdG8gcmVjb3Zlci4iKTsKLQkJCW1ha2VfYmFkX2lub2RlKHZpKTsKLQkJCW1ha2VfYmFkX2lub2RlKFZGU19JKGJhc2VfbmkpKTsKIAkJCU5Wb2xTZXRFcnJvcnModm9sKTsKIAkJfSBlbHNlIC8qIGlmIChzdWNjZXNzKSAqLyB7CiAJCQlpZiAobnRmc19tYXBwaW5nX3BhaXJzX2J1aWxkKHZvbCwgKHU4KilhICsgbGUxNl90b19jcHUoCkBAIC0yNDUxLDggKzI0NTYsNiBAQAogCQkJCQkJIm1hcHBpbmcgcGFpcnMgYXJyYXkgaW4gZXJyb3IgIgogCQkJCQkJImNvZGUgcGF0aC4gIFJ1biBjaGtkc2sgdG8gIgogCQkJCQkJInJlY292ZXIuIik7Ci0JCQkJbWFrZV9iYWRfaW5vZGUodmkpOwotCQkJCW1ha2VfYmFkX2lub2RlKFZGU19JKGJhc2VfbmkpKTsKIAkJCQlOVm9sU2V0RXJyb3JzKHZvbCk7CiAJCQl9CiAJCQlmbHVzaF9kY2FjaGVfbWZ0X3JlY29yZF9wYWdlKGN0eC0+bnRmc19pbm8pOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9jb21wcmVzcy5jIGIvZnMvbnRmcy9jb21wcmVzcy5jCmluZGV4IDI1ZDI0MTAuLjY4YTYwN2YgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvY29tcHJlc3MuYworKysgYi9mcy9udGZzL2NvbXByZXNzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIC8qKgogICogYWxsb2NhdGVfY29tcHJlc3Npb25fYnVmZmVycyAtIGFsbG9jYXRlIHRoZSBkZWNvbXByZXNzaW9uIGJ1ZmZlcnMKICAqCi0gKiBDYWxsZXIgaGFzIHRvIGhvbGQgdGhlIG50ZnNfbG9jayBzZW1hcGhvcmUuCisgKiBDYWxsZXIgaGFzIHRvIGhvbGQgdGhlIG50ZnNfbG9jayBtdXRleC4KICAqCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gaWYgdGhlIGFsbG9jYXRpb25zIGZhaWxlZC4KICAqLwpAQCAtODQsNyArODQsNyBAQAogLyoqCiAgKiBmcmVlX2NvbXByZXNzaW9uX2J1ZmZlcnMgLSBmcmVlIHRoZSBkZWNvbXByZXNzaW9uIGJ1ZmZlcnMKICAqCi0gKiBDYWxsZXIgaGFzIHRvIGhvbGQgdGhlIG50ZnNfbG9jayBzZW1hcGhvcmUuCisgKiBDYWxsZXIgaGFzIHRvIGhvbGQgdGhlIG50ZnNfbG9jayBtdXRleC4KICAqLwogdm9pZCBmcmVlX2NvbXByZXNzaW9uX2J1ZmZlcnModm9pZCkKIHsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZGlyLmMgYi9mcy9udGZzL2Rpci5jCmluZGV4IGIwNjkwZDQuLjlkOWVkM2YgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZGlyLmMKKysrIGIvZnMvbnRmcy9kaXIuYwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAlpZiAoZnBvcyA9PSAxKSB7CiAJCW50ZnNfZGVidWcoIkNhbGxpbmcgZmlsbGRpciBmb3IgLi4gd2l0aCBsZW4gMiwgZnBvcyAweDEsICIKIAkJCQkiaW5vZGUgMHglbHgsIERUX0RJUi4iLAotCQkJCXBhcmVudF9pbm8oZmlscC0+Zl9kZW50cnkpKTsKKwkJCQkodW5zaWduZWQgbG9uZylwYXJlbnRfaW5vKGZpbHAtPmZfZGVudHJ5KSk7CiAJCXJjID0gZmlsbGRpcihkaXJlbnQsICIuLiIsIDIsIGZwb3MsCiAJCQkJcGFyZW50X2lubyhmaWxwLT5mX2RlbnRyeSksIERUX0RJUik7CiAJCWlmIChyYykKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmMKaW5kZXggZmI0MTNkMy4uZjVkMDU3ZSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9maWxlLmMKKysrIGIvZnMvbnRmcy9maWxlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogZmlsZS5jIC0gTlRGUyBrZXJuZWwgZmlsZSBvcGVyYXRpb25zLiAgUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IEFudG9uIEFsdGFwYXJtYWtvdgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgQW50b24gQWx0YXBhcm1ha292CiAgKgogICogVGhpcyBwcm9ncmFtL2luY2x1ZGUgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZApAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCSAqIGVub3VnaCB0byBtYWtlIG50ZnNfd3JpdGVwYWdlKCkgd29yay4KIAkJICovCiAJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmbmktPnNpemVfbG9jaywgZmxhZ3MpOwotCQluaS0+aW5pdGlhbGl6ZWRfc2l6ZSA9IChpbmRleCArIDEpIDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CisJCW5pLT5pbml0aWFsaXplZF9zaXplID0gKHM2NCkoaW5kZXggKyAxKSA8PCBQQUdFX0NBQ0hFX1NISUZUOwogCQlpZiAobmktPmluaXRpYWxpemVkX3NpemUgPiBuZXdfaW5pdF9zaXplKQogCQkJbmktPmluaXRpYWxpemVkX3NpemUgPSBuZXdfaW5pdF9zaXplOwogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmbmktPnNpemVfbG9jaywgZmxhZ3MpOwpAQCAtNTI5LDggKzUyOSw4IEBACiAJCQkiaW5kZXggMHglbHgsIG5yX3BhZ2VzIDB4JXgsIHBvcyAweCVsbHgsIGJ5dGVzIDB4JXp4LiIsCiAJCQl2aS0+aV9pbm8sIG5pLT50eXBlLCBwYWdlc1swXS0+aW5kZXgsIG5yX3BhZ2VzLAogCQkJKGxvbmcgbG9uZylwb3MsIGJ5dGVzKTsKLQlibG9ja3NpemVfYml0cyA9IHZpLT5pX2Jsa2JpdHM7Ci0JYmxvY2tzaXplID0gMSA8PCBibG9ja3NpemVfYml0czsKKwlibG9ja3NpemUgPSB2b2wtPnNiLT5zX2Jsb2Nrc2l6ZTsKKwlibG9ja3NpemVfYml0cyA9IHZvbC0+c2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJdSA9IDA7CiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzW3VdOwpAQCAtOTQzLDcgKzk0Myw4IEBACiAJCX0KIAkJbmktPnJ1bmxpc3QucmwgPSBybDsKIAkJc3RhdHVzLnJ1bmxpc3RfbWVyZ2VkID0gMTsKLQkJbnRmc19kZWJ1ZygiQWxsb2NhdGVkIGNsdXN0ZXIsIGxjbiAweCVsbHguIiwgbGNuKTsKKwkJbnRmc19kZWJ1ZygiQWxsb2NhdGVkIGNsdXN0ZXIsIGxjbiAweCVsbHguIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWxjbik7CiAJCS8qIE1hcCBhbmQgbG9jayB0aGUgbWZ0IHJlY29yZCBhbmQgZ2V0IHRoZSBhdHRyaWJ1dGUgcmVjb3JkLiAqLwogCQlpZiAoIU5Jbm9BdHRyKG5pKSkKIAkJCWJhc2VfbmkgPSBuaTsKQEAgLTEyMDYsOCArMTIwNyw2IEBACiAJCQkJCSJhdHRyaWJ1dGUgcnVubGlzdCBpbiBlcnJvciBjb2RlICIKIAkJCQkJInBhdGguICBSdW4gY2hrZHNrIHRvIHJlY292ZXIgdGhlICIKIAkJCQkJImxvc3QgY2x1c3Rlci4iKTsKLQkJCW1ha2VfYmFkX2lub2RlKHZpKTsKLQkJCW1ha2VfYmFkX2lub2RlKFZGU19JKGJhc2VfbmkpKTsKIAkJCU5Wb2xTZXRFcnJvcnModm9sKTsKIAkJfSBlbHNlIC8qIGlmIChzdWNjZXNzKSAqLyB7CiAJCQlzdGF0dXMucnVubGlzdF9tZXJnZWQgPSAwOwpAQCAtMTIzOCw4ICsxMjM3LDYgQEAKIAkJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkZhaWxlZCB0byByZXN0b3JlIGF0dHJpYnV0ZSAiCiAJCQkJCSJyZWNvcmQgaW4gZXJyb3IgY29kZSBwYXRoLiAgUnVuICIKIAkJCQkJImNoa2RzayB0byByZWNvdmVyLiIpOwotCQkJbWFrZV9iYWRfaW5vZGUodmkpOwotCQkJbWFrZV9iYWRfaW5vZGUoVkZTX0koYmFzZV9uaSkpOwogCQkJTlZvbFNldEVycm9ycyh2b2wpOwogCQl9IGVsc2UgLyogaWYgKHN1Y2Nlc3MpICovIHsKIAkJCWlmIChudGZzX21hcHBpbmdfcGFpcnNfYnVpbGQodm9sLCAodTgqKWEgKwpAQCAtMTI1Miw4ICsxMjQ5LDYgQEAKIAkJCQkJCSJtYXBwaW5nIHBhaXJzIGFycmF5IGluIGVycm9yICIKIAkJCQkJCSJjb2RlIHBhdGguICBSdW4gY2hrZHNrIHRvICIKIAkJCQkJCSJyZWNvdmVyLiIpOwotCQkJCW1ha2VfYmFkX2lub2RlKHZpKTsKLQkJCQltYWtlX2JhZF9pbm9kZShWRlNfSShiYXNlX25pKSk7CiAJCQkJTlZvbFNldEVycm9ycyh2b2wpOwogCQkJfQogCQkJZmx1c2hfZGNhY2hlX21mdF9yZWNvcmRfcGFnZShjdHgtPm50ZnNfaW5vKTsKQEAgLTE1MjUsNyArMTUyMCw3IEBACiAKIAl2aSA9IHBhZ2VzWzBdLT5tYXBwaW5nLT5ob3N0OwogCW5pID0gTlRGU19JKHZpKTsKLQlibG9ja3NpemUgPSAxIDw8IHZpLT5pX2Jsa2JpdHM7CisJYmxvY2tzaXplID0gdmktPmlfc2ItPnNfYmxvY2tzaXplOwogCWVuZCA9IHBvcyArIGJ5dGVzOwogCXUgPSAwOwogCWRvIHsKQEAgLTE2MjIsMTEgKzE2MTcsOCBAQAogCQl1bm1hcF9tZnRfcmVjb3JkKGJhc2VfbmkpOwogCW50ZnNfZXJyb3IodmktPmlfc2IsICJGYWlsZWQgdG8gdXBkYXRlIGluaXRpYWxpemVkX3NpemUvaV9zaXplIChlcnJvciAiCiAJCQkiY29kZSAlaSkuIiwgZXJyKTsKLQlpZiAoZXJyICE9IC1FTk9NRU0pIHsKKwlpZiAoZXJyICE9IC1FTk9NRU0pCiAJCU5Wb2xTZXRFcnJvcnMobmktPnZvbCk7Ci0JCW1ha2VfYmFkX2lub2RlKFZGU19JKGJhc2VfbmkpKTsKLQkJbWFrZV9iYWRfaW5vZGUodmkpOwotCX0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODAxLDggKzE3OTMsNiBAQAogCQludGZzX2Vycm9yKHZpLT5pX3NiLCAiUmVzaWRlbnQgYXR0cmlidXRlIGNvbW1pdCB3cml0ZSBmYWlsZWQgIgogCQkJCSJ3aXRoIGVycm9yICVpLiIsIGVycik7CiAJCU5Wb2xTZXRFcnJvcnMobmktPnZvbCk7Ci0JCW1ha2VfYmFkX2lub2RlKFZGU19JKGJhc2VfbmkpKTsKLQkJbWFrZV9iYWRfaW5vZGUodmkpOwogCX0KIAlpZiAoY3R4KQogCQludGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoY3R4KTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCBlYTFiZDNmLi40Yzg2YjdlIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKKysrIGIvZnMvbnRmcy9pbm9kZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqCiAgKiBpbm9kZS5jIC0gTlRGUyBrZXJuZWwgaW5vZGUgaGFuZGxpbmcuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA2IEFudG9uIEFsdGFwYXJtYWtvdgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKQEAgLTE5LDEzICsxOSwxOSBAQAogICogRm91bmRhdGlvbixJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSAiYW9wcy5oIgorI2luY2x1ZGUgImF0dHJpYi5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogI2luY2x1ZGUgImRpci5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKQEAgLTM4Miw3ICszODgsNyBAQAogCWF0b21pY19zZXQoJm5pLT5jb3VudCwgMSk7CiAJbmktPnZvbCA9IE5URlNfU0Ioc2IpOwogCW50ZnNfaW5pdF9ydW5saXN0KCZuaS0+cnVubGlzdCk7Ci0JaW5pdF9NVVRFWCgmbmktPm1yZWNfbG9jayk7CisJbXV0ZXhfaW5pdCgmbmktPm1yZWNfbG9jayk7CiAJbmktPnBhZ2UgPSBOVUxMOwogCW5pLT5wYWdlX29mcyA9IDA7CiAJbmktPmF0dHJfbGlzdF9zaXplID0gMDsKQEAgLTM5NCw3ICs0MDAsNyBAQAogCW5pLT5pdHlwZS5pbmRleC5jb2xsYXRpb25fcnVsZSA9IDA7CiAJbmktPml0eXBlLmluZGV4LmJsb2NrX3NpemVfYml0cyA9IDA7CiAJbmktPml0eXBlLmluZGV4LnZjbl9zaXplX2JpdHMgPSAwOwotCWluaXRfTVVURVgoJm5pLT5leHRlbnRfbG9jayk7CisJbXV0ZXhfaW5pdCgmbmktPmV4dGVudF9sb2NrKTsKIAluaS0+bnJfZXh0ZW50cyA9IDA7CiAJbmktPmV4dC5iYXNlX250ZnNfaW5vID0gTlVMTDsKIH0KQEAgLTY3NywxMyArNjgzLDI4IEBACiAJCW50ZnNfZGVidWcoIkF0dHJpYnV0ZSBsaXN0IGZvdW5kIGluIGlub2RlIDB4JWx4LiIsIHZpLT5pX2lubyk7CiAJCU5Jbm9TZXRBdHRyTGlzdChuaSk7CiAJCWEgPSBjdHgtPmF0dHI7Ci0JCWlmIChhLT5mbGFncyAmIEFUVFJfSVNfRU5DUllQVEVEIHx8Ci0JCQkJYS0+ZmxhZ3MgJiBBVFRSX0NPTVBSRVNTSU9OX01BU0sgfHwKLQkJCQlhLT5mbGFncyAmIEFUVFJfSVNfU1BBUlNFKSB7CisJCWlmIChhLT5mbGFncyAmIEFUVFJfQ09NUFJFU1NJT05fTUFTSykgewogCQkJbnRmc19lcnJvcih2aS0+aV9zYiwgIkF0dHJpYnV0ZSBsaXN0IGF0dHJpYnV0ZSBpcyAiCi0JCQkJCSJjb21wcmVzc2VkL2VuY3J5cHRlZC9zcGFyc2UuIik7CisJCQkJCSJjb21wcmVzc2VkLiIpOwogCQkJZ290byB1bm1fZXJyX291dDsKIAkJfQorCQlpZiAoYS0+ZmxhZ3MgJiBBVFRSX0lTX0VOQ1JZUFRFRCB8fAorCQkJCWEtPmZsYWdzICYgQVRUUl9JU19TUEFSU0UpIHsKKwkJCWlmIChhLT5ub25fcmVzaWRlbnQpIHsKKwkJCQludGZzX2Vycm9yKHZpLT5pX3NiLCAiTm9uLXJlc2lkZW50IGF0dHJpYnV0ZSAiCisJCQkJCQkibGlzdCBhdHRyaWJ1dGUgaXMgZW5jcnlwdGVkLyIKKwkJCQkJCSJzcGFyc2UuIik7CisJCQkJZ290byB1bm1fZXJyX291dDsKKwkJCX0KKwkJCW50ZnNfd2FybmluZyh2aS0+aV9zYiwgIlJlc2lkZW50IGF0dHJpYnV0ZSBsaXN0ICIKKwkJCQkJImF0dHJpYnV0ZSBpbiBpbm9kZSAweCVseCBpcyBtYXJrZWQgIgorCQkJCQkiZW5jcnlwdGVkL3NwYXJzZSB3aGljaCBpcyBub3QgdHJ1ZS4gICIKKwkJCQkJIkhvd2V2ZXIsIFdpbmRvd3MgYWxsb3dzIHRoaXMgYW5kICIKKwkJCQkJImNoa2RzayBkb2VzIG5vdCBkZXRlY3Qgb3IgY29ycmVjdCBpdCAiCisJCQkJCSJzbyB3ZSB3aWxsIGp1c3QgaWdub3JlIHRoZSBpbnZhbGlkICIKKwkJCQkJImZsYWdzIGFuZCBwcmV0ZW5kIHRoZXkgYXJlIG5vdCBzZXQuIiwKKwkJCQkJdmktPmlfaW5vKTsKKwkJfQogCQkvKiBOb3cgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYXR0cmlidXRlIGxpc3QuICovCiAJCW5pLT5hdHRyX2xpc3Rfc2l6ZSA9ICh1MzIpbnRmc19hdHRyX3NpemUoYSk7CiAJCW5pLT5hdHRyX2xpc3QgPSBudGZzX21hbGxvY19ub2ZzKG5pLT5hdHRyX2xpc3Rfc2l6ZSk7CkBAIC0xMDQ5LDEwICsxMDcwLDEwIEBACiAJCWlmIChhLT5ub25fcmVzaWRlbnQpIHsKIAkJCU5Jbm9TZXROb25SZXNpZGVudChuaSk7CiAJCQlpZiAoTklub0NvbXByZXNzZWQobmkpIHx8IE5Jbm9TcGFyc2UobmkpKSB7Ci0JCQkJaWYgKGEtPmRhdGEubm9uX3Jlc2lkZW50LmNvbXByZXNzaW9uX3VuaXQgIT0KLQkJCQkJCTQpIHsKKwkJCQlpZiAoTklub0NvbXByZXNzZWQobmkpICYmIGEtPmRhdGEubm9uX3Jlc2lkZW50LgorCQkJCQkJY29tcHJlc3Npb25fdW5pdCAhPSA0KSB7CiAJCQkJCW50ZnNfZXJyb3IodmktPmlfc2IsICJGb3VuZCAiCi0JCQkJCQkJIm5vbnN0YW5kYXJkICIKKwkJCQkJCQkibm9uLXN0YW5kYXJkICIKIAkJCQkJCQkiY29tcHJlc3Npb24gdW5pdCAoJXUgIgogCQkJCQkJCSJpbnN0ZWFkIG9mIDQpLiAgIgogCQkJCQkJCSJDYW5ub3QgaGFuZGxlIHRoaXMuIiwKQEAgLTEwNjEsMTYgKzEwODIsMjYgQEAKIAkJCQkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCQkJCWdvdG8gdW5tX2Vycl9vdXQ7CiAJCQkJfQotCQkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX2NsdXN0ZXJzID0gMVUgPDwKLQkJCQkJCWEtPmRhdGEubm9uX3Jlc2lkZW50LgotCQkJCQkJY29tcHJlc3Npb25fdW5pdDsKLQkJCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19zaXplID0gMVUgPDwgKAotCQkJCQkJYS0+ZGF0YS5ub25fcmVzaWRlbnQuCi0JCQkJCQljb21wcmVzc2lvbl91bml0ICsKLQkJCQkJCXZvbC0+Y2x1c3Rlcl9zaXplX2JpdHMpOwotCQkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX3NpemVfYml0cyA9IGZmcygKLQkJCQkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLgotCQkJCQkJYmxvY2tfc2l6ZSkgLSAxOworCQkJCWlmIChhLT5kYXRhLm5vbl9yZXNpZGVudC5jb21wcmVzc2lvbl91bml0KSB7CisJCQkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX3NpemUgPSAxVSA8PAorCQkJCQkJCShhLT5kYXRhLm5vbl9yZXNpZGVudC4KKwkJCQkJCQljb21wcmVzc2lvbl91bml0ICsKKwkJCQkJCQl2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzKTsKKwkJCQkJbmktPml0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZV9iaXRzID0KKwkJCQkJCQlmZnMobmktPml0eXBlLgorCQkJCQkJCWNvbXByZXNzZWQuCisJCQkJCQkJYmxvY2tfc2l6ZSkgLSAxOworCQkJCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19jbHVzdGVycyA9CisJCQkJCQkJMVUgPDwgYS0+ZGF0YS4KKwkJCQkJCQlub25fcmVzaWRlbnQuCisJCQkJCQkJY29tcHJlc3Npb25fdW5pdDsKKwkJCQl9IGVsc2UgeworCQkJCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19zaXplID0gMDsKKwkJCQkJbmktPml0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZV9iaXRzID0KKwkJCQkJCQkwOworCQkJCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19jbHVzdGVycyA9CisJCQkJCQkJMDsKKwkJCQl9CiAJCQkJbmktPml0eXBlLmNvbXByZXNzZWQuc2l6ZSA9IHNsZTY0X3RvX2NwdSgKIAkJCQkJCWEtPmRhdGEubm9uX3Jlc2lkZW50LgogCQkJCQkJY29tcHJlc3NlZF9zaXplKTsKQEAgLTEzMjMsOCArMTM1NCw5IEBACiAJCQlnb3RvIHVubV9lcnJfb3V0OwogCQl9CiAJCWlmIChOSW5vQ29tcHJlc3NlZChuaSkgfHwgTklub1NwYXJzZShuaSkpIHsKLQkJCWlmIChhLT5kYXRhLm5vbl9yZXNpZGVudC5jb21wcmVzc2lvbl91bml0ICE9IDQpIHsKLQkJCQludGZzX2Vycm9yKHZpLT5pX3NiLCAiRm91bmQgbm9uc3RhbmRhcmQgIgorCQkJaWYgKE5Jbm9Db21wcmVzc2VkKG5pKSAmJiBhLT5kYXRhLm5vbl9yZXNpZGVudC4KKwkJCQkJY29tcHJlc3Npb25fdW5pdCAhPSA0KSB7CisJCQkJbnRmc19lcnJvcih2aS0+aV9zYiwgIkZvdW5kIG5vbi1zdGFuZGFyZCAiCiAJCQkJCQkiY29tcHJlc3Npb24gdW5pdCAoJXUgaW5zdGVhZCAiCiAJCQkJCQkib2YgNCkuICBDYW5ub3QgaGFuZGxlIHRoaXMuIiwKIAkJCQkJCWEtPmRhdGEubm9uX3Jlc2lkZW50LgpAQCAtMTMzMiwxMyArMTM2NCwyMiBAQAogCQkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJCWdvdG8gdW5tX2Vycl9vdXQ7CiAJCQl9Ci0JCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19jbHVzdGVycyA9IDFVIDw8Ci0JCQkJCWEtPmRhdGEubm9uX3Jlc2lkZW50LmNvbXByZXNzaW9uX3VuaXQ7Ci0JCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19zaXplID0gMVUgPDwgKAotCQkJCQlhLT5kYXRhLm5vbl9yZXNpZGVudC5jb21wcmVzc2lvbl91bml0ICsKLQkJCQkJdm9sLT5jbHVzdGVyX3NpemVfYml0cyk7Ci0JCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19zaXplX2JpdHMgPSBmZnMoCi0JCQkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX3NpemUpIC0gMTsKKwkJCWlmIChhLT5kYXRhLm5vbl9yZXNpZGVudC5jb21wcmVzc2lvbl91bml0KSB7CisJCQkJbmktPml0eXBlLmNvbXByZXNzZWQuYmxvY2tfc2l6ZSA9IDFVIDw8CisJCQkJCQkoYS0+ZGF0YS5ub25fcmVzaWRlbnQuCisJCQkJCQljb21wcmVzc2lvbl91bml0ICsKKwkJCQkJCXZvbC0+Y2x1c3Rlcl9zaXplX2JpdHMpOworCQkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX3NpemVfYml0cyA9CisJCQkJCQlmZnMobmktPml0eXBlLmNvbXByZXNzZWQuCisJCQkJCQlibG9ja19zaXplKSAtIDE7CisJCQkJbmktPml0eXBlLmNvbXByZXNzZWQuYmxvY2tfY2x1c3RlcnMgPSAxVSA8PAorCQkJCQkJYS0+ZGF0YS5ub25fcmVzaWRlbnQuCisJCQkJCQljb21wcmVzc2lvbl91bml0OworCQkJfSBlbHNlIHsKKwkJCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19zaXplID0gMDsKKwkJCQluaS0+aXR5cGUuY29tcHJlc3NlZC5ibG9ja19zaXplX2JpdHMgPSAwOworCQkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLmJsb2NrX2NsdXN0ZXJzID0gMDsKKwkJCX0KIAkJCW5pLT5pdHlwZS5jb21wcmVzc2VkLnNpemUgPSBzbGU2NF90b19jcHUoCiAJCQkJCWEtPmRhdGEubm9uX3Jlc2lkZW50LmNvbXByZXNzZWRfc2l6ZSk7CiAJCX0KQEAgLTEzOTEsNyArMTQzMiw2IEBACiAJCQkiUnVuIGNoa2Rzay4iLCBlcnIsIHZpLT5pX2lubywgbmktPnR5cGUsIG5pLT5uYW1lX2xlbiwKIAkJCWJhc2VfdmktPmlfaW5vKTsKIAltYWtlX2JhZF9pbm9kZSh2aSk7Ci0JbWFrZV9iYWRfaW5vZGUoYmFzZV92aSk7CiAJaWYgKGVyciAhPSAtRU5PTUVNKQogCQlOVm9sU2V0RXJyb3JzKHZvbCk7CiAJcmV0dXJuIGVycjsKQEAgLTE1NzYsNiArMTYxNiw3IEBACiAJCQkJCSIkSU5ERVhfQUxMT0NBVElPTiBhdHRyaWJ1dGUuIik7CiAJCWdvdG8gdW5tX2Vycl9vdXQ7CiAJfQorCWEgPSBjdHgtPmF0dHI7CiAJaWYgKCFhLT5ub25fcmVzaWRlbnQpIHsKIAkJbnRmc19lcnJvcih2aS0+aV9zYiwgIiRJTkRFWF9BTExPQ0FUSU9OIGF0dHJpYnV0ZSBpcyAiCiAJCQkJInJlc2lkZW50LiIpOwpAQCAtMTgwOSwxOSArMTg1MCwzMyBAQAogCX0gZWxzZSAvKiBpZiAoIWVycikgKi8gewogCQlBVFRSX0xJU1RfRU5UUlkgKmFsX2VudHJ5LCAqbmV4dF9hbF9lbnRyeTsKIAkJdTggKmFsX2VuZDsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmVzID0gIiAgTm90IGFsbG93ZWQuICAkTUZUIGlzIGNvcnJ1cHQuICAiCisJCQkJIllvdSBzaG91bGQgcnVuIGNoa2Rzay4iOwogCiAJCW50ZnNfZGVidWcoIkF0dHJpYnV0ZSBsaXN0IGF0dHJpYnV0ZSBmb3VuZCBpbiAkTUZULiIpOwogCQlOSW5vU2V0QXR0ckxpc3QobmkpOwogCQlhID0gY3R4LT5hdHRyOwotCQlpZiAoYS0+ZmxhZ3MgJiBBVFRSX0lTX0VOQ1JZUFRFRCB8fAotCQkJCWEtPmZsYWdzICYgQVRUUl9DT01QUkVTU0lPTl9NQVNLIHx8Ci0JCQkJYS0+ZmxhZ3MgJiBBVFRSX0lTX1NQQVJTRSkgeworCQlpZiAoYS0+ZmxhZ3MgJiBBVFRSX0NPTVBSRVNTSU9OX01BU0spIHsKIAkJCW50ZnNfZXJyb3Ioc2IsICJBdHRyaWJ1dGUgbGlzdCBhdHRyaWJ1dGUgaXMgIgotCQkJCQkiY29tcHJlc3NlZC9lbmNyeXB0ZWQvc3BhcnNlLiBOb3QgIgotCQkJCQkiYWxsb3dlZC4gJE1GVCBpcyBjb3JydXB0LiBZb3Ugc2hvdWxkICIKLQkJCQkJInJ1biBjaGtkc2suIik7CisJCQkJCSJjb21wcmVzc2VkLiVzIiwgZXMpOwogCQkJZ290byBwdXRfZXJyX291dDsKIAkJfQorCQlpZiAoYS0+ZmxhZ3MgJiBBVFRSX0lTX0VOQ1JZUFRFRCB8fAorCQkJCWEtPmZsYWdzICYgQVRUUl9JU19TUEFSU0UpIHsKKwkJCWlmIChhLT5ub25fcmVzaWRlbnQpIHsKKwkJCQludGZzX2Vycm9yKHNiLCAiTm9uLXJlc2lkZW50IGF0dHJpYnV0ZSBsaXN0ICIKKwkJCQkJCSJhdHRyaWJ1dGUgaXMgZW5jcnlwdGVkLyIKKwkJCQkJCSJzcGFyc2UuJXMiLCBlcyk7CisJCQkJZ290byBwdXRfZXJyX291dDsKKwkJCX0KKwkJCW50ZnNfd2FybmluZyhzYiwgIlJlc2lkZW50IGF0dHJpYnV0ZSBsaXN0IGF0dHJpYnV0ZSAiCisJCQkJCSJpbiAkTUZUIHN5c3RlbSBmaWxlIGlzIG1hcmtlZCAiCisJCQkJCSJlbmNyeXB0ZWQvc3BhcnNlIHdoaWNoIGlzIG5vdCB0cnVlLiAgIgorCQkJCQkiSG93ZXZlciwgV2luZG93cyBhbGxvd3MgdGhpcyBhbmQgIgorCQkJCQkiY2hrZHNrIGRvZXMgbm90IGRldGVjdCBvciBjb3JyZWN0IGl0ICIKKwkJCQkJInNvIHdlIHdpbGwganVzdCBpZ25vcmUgdGhlIGludmFsaWQgIgorCQkJCQkiZmxhZ3MgYW5kIHByZXRlbmQgdGhleSBhcmUgbm90IHNldC4iKTsKKwkJfQogCQkvKiBOb3cgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYXR0cmlidXRlIGxpc3QuICovCiAJCW5pLT5hdHRyX2xpc3Rfc2l6ZSA9ICh1MzIpbnRmc19hdHRyX3NpemUoYSk7CiAJCW5pLT5hdHRyX2xpc3QgPSBudGZzX21hbGxvY19ub2ZzKG5pLT5hdHRyX2xpc3Rfc2l6ZSk7CkBAIC0yNzk0LDExICsyODQ5LDggQEAKIG9sZF9iYWRfb3V0OgogCW9sZF9zaXplID0gLTE7CiBiYWRfb3V0OgotCWlmIChlcnIgIT0gLUVOT01FTSAmJiBlcnIgIT0gLUVPUE5PVFNVUFApIHsKLQkJbWFrZV9iYWRfaW5vZGUodmkpOwotCQltYWtlX2JhZF9pbm9kZShWRlNfSShiYXNlX25pKSk7CisJaWYgKGVyciAhPSAtRU5PTUVNICYmIGVyciAhPSAtRU9QTk9UU1VQUCkKIAkJTlZvbFNldEVycm9ycyh2b2wpOwotCX0KIAlpZiAoZXJyICE9IC1FT1BOT1RTVVBQKQogCQlOSW5vU2V0VHJ1bmNhdGVGYWlsZWQobmkpOwogCWVsc2UgaWYgKG9sZF9zaXplID49IDApCkBAIC0yODEzLDExICsyODY1LDggQEAKIAludGZzX2RlYnVnKCJGYWlsZWQuICBSZXR1cm5pbmcgZXJyb3IgY29kZSAlaS4iLCBlcnIpOwogCXJldHVybiBlcnI7CiBjb252X2Vycl9vdXQ6Ci0JaWYgKGVyciAhPSAtRU5PTUVNICYmIGVyciAhPSAtRU9QTk9UU1VQUCkgewotCQltYWtlX2JhZF9pbm9kZSh2aSk7Ci0JCW1ha2VfYmFkX2lub2RlKFZGU19JKGJhc2VfbmkpKTsKKwlpZiAoZXJyICE9IC1FTk9NRU0gJiYgZXJyICE9IC1FT1BOT1RTVVBQKQogCQlOVm9sU2V0RXJyb3JzKHZvbCk7Ci0JfQogCWlmIChlcnIgIT0gLUVPUE5PVFNVUFApCiAJCU5Jbm9TZXRUcnVuY2F0ZUZhaWxlZChuaSk7CiAJZWxzZQpAQCAtMzAxNSwxNSArMzA2NCwxOCBAQAogCSAqIHJlY29yZCB3aWxsIGJlIGNsZWFuZWQgYW5kIHdyaXR0ZW4gb3V0IHRvIGRpc2sgYmVsb3csIGkuZS4gYmVmb3JlCiAJICogdGhpcyBmdW5jdGlvbiByZXR1cm5zLgogCSAqLwotCWlmIChtb2RpZmllZCAmJiAhTklub1Rlc3RTZXREaXJ0eShjdHgtPm50ZnNfaW5vKSkKLQkJbWFya19udGZzX3JlY29yZF9kaXJ0eShjdHgtPm50ZnNfaW5vLT5wYWdlLAotCQkJCWN0eC0+bnRmc19pbm8tPnBhZ2Vfb2ZzKTsKKwlpZiAobW9kaWZpZWQpIHsKKwkJZmx1c2hfZGNhY2hlX21mdF9yZWNvcmRfcGFnZShjdHgtPm50ZnNfaW5vKTsKKwkJaWYgKCFOSW5vVGVzdFNldERpcnR5KGN0eC0+bnRmc19pbm8pKQorCQkJbWFya19udGZzX3JlY29yZF9kaXJ0eShjdHgtPm50ZnNfaW5vLT5wYWdlLAorCQkJCQljdHgtPm50ZnNfaW5vLT5wYWdlX29mcyk7CisJfQogCW50ZnNfYXR0cl9wdXRfc2VhcmNoX2N0eChjdHgpOwogCS8qIE5vdyB0aGUgYWNjZXNzIHRpbWVzIGFyZSB1cGRhdGVkLCB3cml0ZSB0aGUgYmFzZSBtZnQgcmVjb3JkLiAqLwogCWlmIChOSW5vRGlydHkobmkpKQogCQllcnIgPSB3cml0ZV9tZnRfcmVjb3JkKG5pLCBtLCBzeW5jKTsKIAkvKiBXcml0ZSBhbGwgYXR0YWNoZWQgZXh0ZW50IG1mdCByZWNvcmRzLiAqLwotCWRvd24oJm5pLT5leHRlbnRfbG9jayk7CisJbXV0ZXhfbG9jaygmbmktPmV4dGVudF9sb2NrKTsKIAlpZiAobmktPm5yX2V4dGVudHMgPiAwKSB7CiAJCW50ZnNfaW5vZGUgKipleHRlbnRfbmlzID0gbmktPmV4dC5leHRlbnRfbnRmc19pbm9zOwogCQlpbnQgaTsKQEAgLTMwNTAsNyArMzEwMiw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JdXAoJm5pLT5leHRlbnRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZuaS0+ZXh0ZW50X2xvY2spOwogCXVubWFwX21mdF9yZWNvcmQobmkpOwogCWlmICh1bmxpa2VseShlcnIpKQogCQlnb3RvIGVycl9vdXQ7CkBAIC0zMDY1LDkgKzMxMTcsNyBAQAogCQkJCSJyZXRyaWVzIGxhdGVyLiIpOwogCQltYXJrX2lub2RlX2RpcnR5KHZpKTsKIAl9IGVsc2UgewotCQludGZzX2Vycm9yKHZpLT5pX3NiLCAiRmFpbGVkIChlcnJvciBjb2RlICVpKTogIE1hcmtpbmcgaW5vZGUgIgotCQkJCSJhcyBiYWQuICBZb3Ugc2hvdWxkIHJ1biBjaGtkc2suIiwgLWVycik7Ci0JCW1ha2VfYmFkX2lub2RlKHZpKTsKKwkJbnRmc19lcnJvcih2aS0+aV9zYiwgIkZhaWxlZCAoZXJyb3IgJWkpOiAgUnVuIGNoa2Rzay4iLCAtZXJyKTsKIAkJTlZvbFNldEVycm9ycyhuaS0+dm9sKTsKIAl9CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuaCBiL2ZzL250ZnMvaW5vZGUuaAppbmRleCAzZGU1YzAyLi5mMDg4MjkxIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmgKKysrIGIvZnMvbnRmcy9pbm9kZS5oCkBAIC0yNCwxMiArMjQsMTMgQEAKICNpZm5kZWYgX0xJTlVYX05URlNfSU5PREVfSAogI2RlZmluZSBfTElOVVhfTlRGU19JTk9ERV9ICiAKLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjaW5jbHVkZSAibGF5b3V0LmgiCiAjaW5jbHVkZSAidm9sdW1lLmgiCkBAIC04MSw3ICs4Miw3IEBACiAJICogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG9ubHkgdmFsaWQgZm9yIHJlYWwgaW5vZGVzIGFuZCBleHRlbnQKIAkgKiBpbm9kZXMuCiAJICovCi0Jc3RydWN0IHNlbWFwaG9yZSBtcmVjX2xvY2s7IC8qIExvY2sgZm9yIHNlcmlhbGl6aW5nIGFjY2VzcyB0byB0aGUKKwlzdHJ1Y3QgbXV0ZXggbXJlY19sb2NrOwkvKiBMb2NrIGZvciBzZXJpYWxpemluZyBhY2Nlc3MgdG8gdGhlCiAJCQkJICAgbWZ0IHJlY29yZCBiZWxvbmdpbmcgdG8gdGhpcyBpbm9kZS4gKi8KIAlzdHJ1Y3QgcGFnZSAqcGFnZTsJLyogVGhlIHBhZ2UgY29udGFpbmluZyB0aGUgbWZ0IHJlY29yZCBvZiB0aGUKIAkJCQkgICBpbm9kZS4gVGhpcyBzaG91bGQgb25seSBiZSB0b3VjaGVkIGJ5IHRoZQpAQCAtMTE5LDcgKzEyMCw3IEBACiAJCQl1OCBibG9ja19jbHVzdGVyczsJLyogTnVtYmVyIG9mIGNsdXN0ZXJzIHBlciBjYi4gKi8KIAkJfSBjb21wcmVzc2VkOwogCX0gaXR5cGU7Ci0Jc3RydWN0IHNlbWFwaG9yZSBleHRlbnRfbG9jazsJLyogTG9jayBmb3IgYWNjZXNzaW5nL21vZGlmeWluZyB0aGUKKwlzdHJ1Y3QgbXV0ZXggZXh0ZW50X2xvY2s7CS8qIExvY2sgZm9yIGFjY2Vzc2luZy9tb2RpZnlpbmcgdGhlCiAJCQkJCSAgIGJlbG93IC4gKi8KIAlzMzIgbnJfZXh0ZW50czsJLyogRm9yIGEgYmFzZSBtZnQgcmVjb3JkLCB0aGUgbnVtYmVyIG9mIGF0dGFjaGVkIGV4dGVudAogCQkJICAgaW5vZGVzICgwIGlmIG5vbmUpLCBmb3IgZXh0ZW50IHJlY29yZHMgYW5kIGZvciBmYWtlCmRpZmYgLS1naXQgYS9mcy9udGZzL2xheW91dC5oIGIvZnMvbnRmcy9sYXlvdXQuaAppbmRleCBmNTY3OGQ1Li5kMzRiOTNjIDEwMDY0NAotLS0gYS9mcy9udGZzL2xheW91dC5oCisrKyBiL2ZzL250ZnMvbGF5b3V0LmgKQEAgLTc2OSw3ICs3NjksNyBAQAogCQkJCWNvbXByZXNzZWQuICAoVGhpcyBlZmZlY3RpdmVseSBsaW1pdHMgdGhlCiAJCQkJY29tcHJlc3Npb24gdW5pdCBzaXplIHRvIGJlIGEgcG93ZXIgb2YgdHdvCiAJCQkJY2x1c3RlcnMuKSAgV2luTlQ0IG9ubHkgdXNlcyBhIHZhbHVlIG9mIDQuCi0JCQkJU3BhcnNlIGZpbGVzIGFsc28gaGF2ZSB0aGlzIHNldCB0byA0LiAqLworCQkJCVNwYXJzZSBmaWxlcyBoYXZlIHRoaXMgc2V0IHRvIDAgb24gWFBTUDIuICovCiAvKiAzNSovCQkJdTggcmVzZXJ2ZWRbNV07CQkvKiBBbGlnbiB0byA4LWJ5dGUgYm91bmRhcnkuICovCiAvKiBUaGUgc2l6ZXMgYmVsb3cgYXJlIG9ubHkgdXNlZCB3aGVuIGxvd2VzdF92Y24gaXMgemVybywgYXMgb3RoZXJ3aXNlIGl0IHdvdWxkCiAgICBiZSBkaWZmaWN1bHQgdG8ga2VlcCB0aGVtIHVwLXRvLWRhdGUuKi8KQEAgLTgwMSwxMyArODAxLDE2IEBACiB0eXBlZGVmIEFUVFJfUkVDT1JEIEFUVFJfUkVDOwogCiAvKgotICogRmlsZSBhdHRyaWJ1dGUgZmxhZ3MgKDMyLWJpdCkuCisgKiBGaWxlIGF0dHJpYnV0ZSBmbGFncyAoMzItYml0KSBhcHBlYXJpbmcgaW4gdGhlIGZpbGVfYXR0cmlidXRlcyBmaWVsZHMgb2YgdGhlCisgKiBTVEFOREFSRF9JTkZPUk1BVElPTiBhdHRyaWJ1dGUgb2YgTUZUX1JFQ09SRHMgYW5kIHRoZSBGSUxFTkFNRV9BVFRSCisgKiBhdHRyaWJ1dGVzIG9mIE1GVF9SRUNPUkRzIGFuZCBkaXJlY3RvcnkgaW5kZXggZW50cmllcy4KKyAqCisgKiBBbGwgb2YgdGhlIGJlbG93IGZsYWdzIGFwcGVhciBpbiB0aGUgZGlyZWN0b3J5IGluZGV4IGVudHJpZXMgYnV0IG9ubHkgc29tZQorICogYXBwZWFyIGluIHRoZSBTVEFOREFSRF9JTkZPUk1BVElPTiBhdHRyaWJ1dGUgd2hpbHN0IG9ubHkgc29tZSBvdGhlcnMgYXBwZWFyCisgKiBpbiB0aGUgRklMRU5BTUVfQVRUUiBhdHRyaWJ1dGUgb2YgTUZUX1JFQ09SRHMuICBVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCB0aGUKKyAqIGZsYWdzIGFwcGVhciBpbiBhbGwgb2YgdGhlIGFib3ZlLgogICovCiBlbnVtIHsKLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIG9ubHkgcHJlc2VudCBpbiB0aGUgU1RBTkRBUkRfSU5GT1JNQVRJT04KLQkgKiBhdHRyaWJ1dGUgKGluIHRoZSBmaWVsZCBmaWxlX2F0dHJpYnV0ZXMpLgotCSAqLwogCUZJTEVfQVRUUl9SRUFET05MWQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKIAlGSUxFX0FUVFJfSElEREVOCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpLAogCUZJTEVfQVRUUl9TWVNURU0JCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCkBAIC04MzgsMTAgKzg0MSwxMCBAQAogCSAgIEZfQV9ERVZJQ0UsIEZfQV9ESVJFQ1RPUlksIEZfQV9TUEFSU0VfRklMRSwgRl9BX1JFUEFSU0VfUE9JTlQsCiAJICAgRl9BX0NPTVBSRVNTRUQsIGFuZCBGX0FfRU5DUllQVEVEIGFuZCBwcmVzZXJ2ZXMgdGhlIHJlc3QuICBUaGlzIG1hc2sKIAkgICBpcyB1c2VkIHRvIHRvIG9idGFpbiBhbGwgZmxhZ3MgdGhhdCBhcmUgdmFsaWQgZm9yIHNldHRpbmcuICovCi0KIAkvKgotCSAqIFRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIG9ubHkgcHJlc2VudCBpbiB0aGUgRklMRV9OQU1FIGF0dHJpYnV0ZSAoaW4KLQkgKiB0aGUgZmllbGQgZmlsZV9hdHRyaWJ1dGVzKS4KKwkgKiBUaGUgZmxhZyBGSUxFX0FUVFJfRFVQX0ZJTEVOQU1FX0lOREVYX1BSRVNFTlQgaXMgcHJlc2VudCBpbiBhbGwKKwkgKiBGSUxFTkFNRV9BVFRSIGF0dHJpYnV0ZXMgYnV0IG5vdCBpbiB0aGUgU1RBTkRBUkRfSU5GT1JNQVRJT04KKwkgKiBhdHRyaWJ1dGUgb2YgYW4gbWZ0IHJlY29yZC4KIAkgKi8KIAlGSUxFX0FUVFJfRFVQX0ZJTEVfTkFNRV9JTkRFWF9QUkVTRU5UCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgxMDAwMDAwMCksCiAJLyogTm90ZSwgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGZyb20gdGhlIG1mdCByZWNvcmQsCkBAIC04ODcsNyArODkwLDcgQEAKIAkJCQkJICAgV2luZG93cyB0aGlzIGlzIG9ubHkgdXBkYXRlZCB3aGVuCiAJCQkJCSAgIGFjY2Vzc2VkIGlmIHNvbWUgdGltZSBkZWx0YSBoYXMKIAkJCQkJICAgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4gQWxzbywKLQkJCQkJICAgbGFzdCBhY2Nlc3MgdGltZXMgdXBkYXRlcyBjYW4gYmUKKwkJCQkJICAgbGFzdCBhY2Nlc3MgdGltZSB1cGRhdGVzIGNhbiBiZQogCQkJCQkgICBkaXNhYmxlZCBhbHRvZ2V0aGVyIGZvciBzcGVlZC4gKi8KIC8qIDMyKi8JRklMRV9BVFRSX0ZMQUdTIGZpbGVfYXR0cmlidXRlczsgLyogRmxhZ3MgZGVzY3JpYmluZyB0aGUgZmlsZS4gKi8KIC8qIDM2Ki8JdW5pb24gewpAQCAtMTA3MSwxMSArMTA3NCwyMiBAQAogCQkJCQkgICBtb2RpZmllZC4gKi8KIC8qIDIwKi8Jc2xlNjQgbGFzdF9hY2Nlc3NfdGltZTsJCS8qIFRpbWUgdGhpcyBtZnQgcmVjb3JkIHdhcyBsYXN0CiAJCQkJCSAgIGFjY2Vzc2VkLiAqLwotLyogMjgqLwlzbGU2NCBhbGxvY2F0ZWRfc2l6ZTsJCS8qIEJ5dGUgc2l6ZSBvZiBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoZQotCQkJCQkgICBkYXRhIGF0dHJpYnV0ZS4gTk9URTogSXMgYSBtdWx0aXBsZQotCQkJCQkgICBvZiB0aGUgY2x1c3RlciBzaXplLiAqLwotLyogMzAqLwlzbGU2NCBkYXRhX3NpemU7CQkvKiBCeXRlIHNpemUgb2YgYWN0dWFsIGRhdGEgaW4gZGF0YQotCQkJCQkgICBhdHRyaWJ1dGUuICovCisvKiAyOCovCXNsZTY0IGFsbG9jYXRlZF9zaXplOwkJLyogQnl0ZSBzaXplIG9mIG9uLWRpc2sgYWxsb2NhdGVkIHNwYWNlCisJCQkJCSAgIGZvciB0aGUgdW5uYW1lZCBkYXRhIGF0dHJpYnV0ZS4gIFNvCisJCQkJCSAgIGZvciBub3JtYWwgJERBVEEsIHRoaXMgaXMgdGhlCisJCQkJCSAgIGFsbG9jYXRlZF9zaXplIGZyb20gdGhlIHVubmFtZWQKKwkJCQkJICAgJERBVEEgYXR0cmlidXRlIGFuZCBmb3IgY29tcHJlc3NlZAorCQkJCQkgICBhbmQvb3Igc3BhcnNlICREQVRBLCB0aGlzIGlzIHRoZQorCQkJCQkgICBjb21wcmVzc2VkX3NpemUgZnJvbSB0aGUgdW5uYW1lZAorCQkJCQkgICAkREFUQSBhdHRyaWJ1dGUuICBGb3IgYSBkaXJlY3Rvcnkgb3IKKwkJCQkJICAgb3RoZXIgaW5vZGUgd2l0aG91dCBhbiB1bm5hbWVkICREQVRBCisJCQkJCSAgIGF0dHJpYnV0ZSwgdGhpcyBpcyBhbHdheXMgMC4gIE5PVEU6CisJCQkJCSAgIFRoaXMgaXMgYSBtdWx0aXBsZSBvZiB0aGUgY2x1c3RlcgorCQkJCQkgICBzaXplLiAqLworLyogMzAqLwlzbGU2NCBkYXRhX3NpemU7CQkvKiBCeXRlIHNpemUgb2YgYWN0dWFsIGRhdGEgaW4gdW5uYW1lZAorCQkJCQkgICBkYXRhIGF0dHJpYnV0ZS4gIEZvciBhIGRpcmVjdG9yeSBvcgorCQkJCQkgICBvdGhlciBpbm9kZSB3aXRob3V0IGFuIHVubmFtZWQgJERBVEEKKwkJCQkJICAgYXR0cmlidXRlLCB0aGlzIGlzIGFsd2F5cyAwLiAqLwogLyogMzgqLwlGSUxFX0FUVFJfRkxBR1MgZmlsZV9hdHRyaWJ1dGVzOwkvKiBGbGFncyBkZXNjcmliaW5nIHRoZSBmaWxlLiAqLwogLyogM2MqLwl1bmlvbiB7CiAJLyogM2MqLwlzdHJ1Y3QgewpAQCAtMTkwNCwxMiArMTkxOCwxMyBAQAogCVZPTFVNRV9ERUxFVEVfVVNOX1VOREVSV0FZCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDEwKSwKIAlWT0xVTUVfUkVQQUlSX09CSkVDVF9JRAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMjApLAogCisJVk9MVU1FX0NIS0RTS19VTkRFUldBWQkJPSBjb25zdF9jcHVfdG9fbGUxNigweDQwMDApLAogCVZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0sJPSBjb25zdF9jcHVfdG9fbGUxNigweDgwMDApLAogCi0JVk9MVU1FX0ZMQUdTX01BU0sJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHg4MDNmKSwKKwlWT0xVTUVfRkxBR1NfTUFTSwkJPSBjb25zdF9jcHVfdG9fbGUxNigweGMwM2YpLAogCiAJLyogVG8gbWFrZSBvdXIgbGlmZSBlYXNpZXIgd2hlbiBjaGVja2luZyBpZiB3ZSBtdXN0IG1vdW50IHJlYWQtb25seS4gKi8KLQlWT0xVTUVfTVVTVF9NT1VOVF9ST19NQVNLCT0gY29uc3RfY3B1X3RvX2xlMTYoMHg4MDI3KSwKKwlWT0xVTUVfTVVTVF9NT1VOVF9ST19NQVNLCT0gY29uc3RfY3B1X3RvX2xlMTYoMHhjMDI3KSwKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogdHlwZWRlZiBsZTE2IFZPTFVNRV9GTEFHUzsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IDBjNjVjYmIuLjRlNzJiYzcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogbWZ0LmMgLSBOVEZTIGtlcm5lbCBtZnQgcmVjb3JkIG9wZXJhdGlvbnMuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA2IEFudG9uIEFsdGFwYXJtYWtvdgogICogQ29weXJpZ2h0IChjKSAyMDAyIFJpY2hhcmQgUnVzc29uCiAgKgogICogVGhpcyBwcm9ncmFtL2luY2x1ZGUgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTkzLDYgKzkzLDcgQEAKIAkJCQkiUnVuIGNoa2Rzay4iLCBuaS0+bWZ0X25vKTsKIAkJbnRmc191bm1hcF9wYWdlKHBhZ2UpOwogCQlwYWdlID0gRVJSX1BUUigtRUlPKTsKKwkJTlZvbFNldEVycm9ycyh2b2wpOwogCX0KIGVycl9vdXQ6CiAJbmktPnBhZ2UgPSBOVUxMOwpAQCAtMTA0LDggKzEwNSw4IEBACiAgKiBtYXBfbWZ0X3JlY29yZCAtIG1hcCwgcGluIGFuZCBsb2NrIGFuIG1mdCByZWNvcmQKICAqIEBuaToJCW50ZnMgaW5vZGUgd2hvc2UgTUZUIHJlY29yZCB0byBtYXAKICAqCi0gKiBGaXJzdCwgdGFrZSB0aGUgbXJlY19sb2NrIHNlbWFwaG9yZS4gV2UgbWlnaHQgbm93IGJlIHNsZWVwaW5nLCB3aGlsZSB3YWl0aW5nCi0gKiBmb3IgdGhlIHNlbWFwaG9yZSBpZiBpdCB3YXMgYWxyZWFkeSBsb2NrZWQgYnkgc29tZW9uZSBlbHNlLgorICogRmlyc3QsIHRha2UgdGhlIG1yZWNfbG9jayBtdXRleC4gIFdlIG1pZ2h0IG5vdyBiZSBzbGVlcGluZywgd2hpbGUgd2FpdGluZworICogZm9yIHRoZSBtdXRleCBpZiBpdCB3YXMgYWxyZWFkeSBsb2NrZWQgYnkgc29tZW9uZSBlbHNlLgogICoKICAqIFRoZSBwYWdlIG9mIHRoZSByZWNvcmQgaXMgbWFwcGVkIHVzaW5nIG1hcF9tZnRfcmVjb3JkX3BhZ2UoKSBiZWZvcmUgYmVpbmcKICAqIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCkBAIC0xMzUsOSArMTM2LDkgQEAKICAqIFNvIHRoYXQgY29kZSB3aWxsIGVuZCB1cCBoYXZpbmcgdG8gb3duIHRoZSBtcmVjX2xvY2sgb2YgYWxsIG1mdAogICogcmVjb3Jkcy9pbm9kZXMgcHJlc2VudCBpbiB0aGUgcGFnZSBiZWZvcmUgSS9PIGNhbiBwcm9jZWVkLiBJbiB0aGF0IGNhc2Ugd2UKICAqIHdvdWxkbid0IG5lZWQgdG8gYm90aGVyIHdpdGggUEdfbG9ja2VkIGFuZCBQR191cHRvZGF0ZSBhcyBub2JvZHkgd2lsbCBiZQotICogYWNjZXNzaW5nIGFueXRoaW5nIHdpdGhvdXQgb3duaW5nIHRoZSBtcmVjX2xvY2sgc2VtYXBob3JlLiBCdXQgd2UgZG8gbmVlZAotICogdG8gdXNlIHRoZW0gYmVjYXVzZSBvZiB0aGUgcmVhZF9jYWNoZV9wYWdlKCkgaW52b2NhdGlvbiBhbmQgdGhlIGNvZGUgYmVjb21lcwotICogc28gbXVjaCBzaW1wbGVyIHRoaXMgd2F5IHRoYXQgaXQgaXMgd2VsbCB3b3J0aCBpdC4KKyAqIGFjY2Vzc2luZyBhbnl0aGluZyB3aXRob3V0IG93bmluZyB0aGUgbXJlY19sb2NrIG11dGV4LiAgQnV0IHdlIGRvIG5lZWQgdG8KKyAqIHVzZSB0aGVtIGJlY2F1c2Ugb2YgdGhlIHJlYWRfY2FjaGVfcGFnZSgpIGludm9jYXRpb24gYW5kIHRoZSBjb2RlIGJlY29tZXMgc28KKyAqIG11Y2ggc2ltcGxlciB0aGlzIHdheSB0aGF0IGl0IGlzIHdlbGwgd29ydGggaXQuCiAgKgogICogVGhlIG1mdCByZWNvcmQgaXMgbm93IG91cnMgYW5kIHdlIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuIFlvdSBuZWVkIHRvIGNoZWNrCiAgKiB0aGUgcmV0dXJuZWQgcG9pbnRlciB3aXRoIElTX0VSUigpIGFuZCBpZiB0aGF0IGlzIHRydWUsIFBUUl9FUlIoKSB3aWxsIHJldHVybgpAQCAtMTYwLDEzICsxNjEsMTMgQEAKIAlhdG9taWNfaW5jKCZuaS0+Y291bnQpOwogCiAJLyogU2VyaWFsaXplIGFjY2VzcyB0byB0aGlzIG1mdCByZWNvcmQuICovCi0JZG93bigmbmktPm1yZWNfbG9jayk7CisJbXV0ZXhfbG9jaygmbmktPm1yZWNfbG9jayk7CiAKIAltID0gbWFwX21mdF9yZWNvcmRfcGFnZShuaSk7CiAJaWYgKGxpa2VseSghSVNfRVJSKG0pKSkKIAkJcmV0dXJuIG07CiAKLQl1cCgmbmktPm1yZWNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZuaS0+bXJlY19sb2NrKTsKIAlhdG9taWNfZGVjKCZuaS0+Y291bnQpOwogCW50ZnNfZXJyb3IobmktPnZvbC0+c2IsICJGYWlsZWQgd2l0aCBlcnJvciBjb2RlICVsdS4iLCAtUFRSX0VSUihtKSk7CiAJcmV0dXJuIG07CkBAIC0yMTcsNyArMjE4LDcgQEAKIAludGZzX2RlYnVnKCJFbnRlcmluZyBmb3IgbWZ0X25vIDB4JWx4LiIsIG5pLT5tZnRfbm8pOwogCiAJdW5tYXBfbWZ0X3JlY29yZF9wYWdlKG5pKTsKLQl1cCgmbmktPm1yZWNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZuaS0+bXJlY19sb2NrKTsKIAlhdG9taWNfZGVjKCZuaS0+Y291bnQpOwogCS8qCiAJICogSWYgcHVyZSBudGZzX2lub2RlLCBpLmUuIG5vIHZmcyBpbm9kZSBhdHRhY2hlZCwgd2UgbGVhdmUgaXQgdG8KQEAgLTI2MSw3ICsyNjIsNyBAQAogCSAqIGluIHdoaWNoIGNhc2UganVzdCByZXR1cm4gaXQuIElmIG5vdCBmb3VuZCwgYWRkIGl0IHRvIHRoZSBiYXNlCiAJICogaW5vZGUgYmVmb3JlIHJldHVybmluZyBpdC4KIAkgKi8KLQlkb3duKCZiYXNlX25pLT5leHRlbnRfbG9jayk7CisJbXV0ZXhfbG9jaygmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOwogCWlmIChiYXNlX25pLT5ucl9leHRlbnRzID4gMCkgewogCQlleHRlbnRfbmlzID0gYmFzZV9uaS0+ZXh0LmV4dGVudF9udGZzX2lub3M7CiAJCWZvciAoaSA9IDA7IGkgPCBiYXNlX25pLT5ucl9leHRlbnRzOyBpKyspIHsKQEAgLTI3NCw3ICsyNzUsNyBAQAogCQl9CiAJfQogCWlmIChsaWtlbHkobmkgIT0gTlVMTCkpIHsKLQkJdXAoJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZiYXNlX25pLT5leHRlbnRfbG9jayk7CiAJCWF0b21pY19kZWMoJmJhc2VfbmktPmNvdW50KTsKIAkJLyogV2UgZm91bmQgdGhlIHJlY29yZDsganVzdCBoYXZlIHRvIG1hcCBhbmQgcmV0dXJuIGl0LiAqLwogCQltID0gbWFwX21mdF9yZWNvcmQobmkpOwpAQCAtMzAxLDcgKzMwMiw3IEBACiAJLyogUmVjb3JkIHdhc24ndCB0aGVyZS4gR2V0IGEgbmV3IG50ZnMgaW5vZGUgYW5kIGluaXRpYWxpemUgaXQuICovCiAJbmkgPSBudGZzX25ld19leHRlbnRfaW5vZGUoYmFzZV9uaS0+dm9sLT5zYiwgbWZ0X25vKTsKIAlpZiAodW5saWtlbHkoIW5pKSkgewotCQl1cCgmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOworCQltdXRleF91bmxvY2soJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKIAkJYXRvbWljX2RlYygmYmFzZV9uaS0+Y291bnQpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CkBAIC0zMTIsNyArMzEzLDcgQEAKIAkvKiBOb3cgbWFwIHRoZSByZWNvcmQuICovCiAJbSA9IG1hcF9tZnRfcmVjb3JkKG5pKTsKIAlpZiAoSVNfRVJSKG0pKSB7Ci0JCXVwKCZiYXNlX25pLT5leHRlbnRfbG9jayk7CisJCW11dGV4X3VubG9jaygmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOwogCQlhdG9taWNfZGVjKCZiYXNlX25pLT5jb3VudCk7CiAJCW50ZnNfY2xlYXJfZXh0ZW50X2lub2RlKG5pKTsKIAkJZ290byBtYXBfZXJyX291dDsKQEAgLTM0NywxNCArMzQ4LDE0IEBACiAJCWJhc2VfbmktPmV4dC5leHRlbnRfbnRmc19pbm9zID0gdG1wOwogCX0KIAliYXNlX25pLT5leHQuZXh0ZW50X250ZnNfaW5vc1tiYXNlX25pLT5ucl9leHRlbnRzKytdID0gbmk7Ci0JdXAoJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKKwltdXRleF91bmxvY2soJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKIAlhdG9taWNfZGVjKCZiYXNlX25pLT5jb3VudCk7CiAJbnRmc19kZWJ1ZygiRG9uZSAyLiIpOwogCSpudGZzX2lubyA9IG5pOwogCXJldHVybiBtOwogdW5tX2Vycl9vdXQ6CiAJdW5tYXBfbWZ0X3JlY29yZChuaSk7Ci0JdXAoJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKKwltdXRleF91bmxvY2soJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKIAlhdG9taWNfZGVjKCZiYXNlX25pLT5jb3VudCk7CiAJLyoKIAkgKiBJZiB0aGUgZXh0ZW50IGlub2RlIHdhcyBub3QgYXR0YWNoZWQgdG8gdGhlIGJhc2UgaW5vZGUgd2UgbmVlZCB0bwpAQCAtMzk5LDEyICs0MDAsMTIgQEAKIAlCVUdfT04oTklub0F0dHIobmkpKTsKIAltYXJrX250ZnNfcmVjb3JkX2RpcnR5KG5pLT5wYWdlLCBuaS0+cGFnZV9vZnMpOwogCS8qIERldGVybWluZSB0aGUgYmFzZSB2ZnMgaW5vZGUgYW5kIG1hcmsgaXQgZGlydHksIHRvby4gKi8KLQlkb3duKCZuaS0+ZXh0ZW50X2xvY2spOworCW11dGV4X2xvY2soJm5pLT5leHRlbnRfbG9jayk7CiAJaWYgKGxpa2VseShuaS0+bnJfZXh0ZW50cyA+PSAwKSkKIAkJYmFzZV9uaSA9IG5pOwogCWVsc2UKIAkJYmFzZV9uaSA9IG5pLT5leHQuYmFzZV9udGZzX2lubzsKLQl1cCgmbmktPmV4dGVudF9sb2NrKTsKKwltdXRleF91bmxvY2soJm5pLT5leHRlbnRfbG9jayk7CiAJX19tYXJrX2lub2RlX2RpcnR5KFZGU19JKGJhc2VfbmkpLCBJX0RJUlRZX1NZTkMgfCBJX0RJUlRZX0RBVEFTWU5DKTsKIH0KIApAQCAtNDczLDcgKzQ3NCw3IEBACiAJcnVubGlzdF9lbGVtZW50ICpybDsKIAl1bnNpZ25lZCBpbnQgYmxvY2tfc3RhcnQsIGJsb2NrX2VuZCwgbV9zdGFydCwgbV9lbmQsIHBhZ2Vfb2ZzOwogCWludCBpX2JocywgbnJfYmhzLCBlcnIgPSAwOwotCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSB2b2wtPm1mdG1pcnJfaW5vLT5pX2Jsa2JpdHM7CisJdW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IHZvbC0+c2ItPnNfYmxvY2tzaXplX2JpdHM7CiAKIAludGZzX2RlYnVnKCJFbnRlcmluZyBmb3IgaW5vZGUgMHglbHguIiwgbWZ0X25vKTsKIAlCVUdfT04oIW1heF9iaHMpOwpAQCAtNjUwLDEwICs2NTEsNyBAQAogICogZnMvbnRmcy9hb3BzLmM6Om1hcmtfbnRmc19yZWNvcmRfZGlydHkoKS4KICAqCiAgKiBPbiBzdWNjZXNzLCBjbGVhbiB0aGUgbWZ0IHJlY29yZCBhbmQgcmV0dXJuIDAuICBPbiBlcnJvciwgbGVhdmUgdGhlIG1mdAotICogcmVjb3JkIGRpcnR5IGFuZCByZXR1cm4gLWVycm5vLiAgVGhlIGNhbGxlciBzaG91bGQgY2FsbCBtYWtlX2JhZF9pbm9kZSgpIG9uCi0gKiB0aGUgYmFzZSBpbm9kZSB0byBlbnN1cmUgbm8gbW9yZSBhY2Nlc3MgaGFwcGVucyB0byB0aGlzIGlub2RlLiAgV2UgZG8gbm90IGRvCi0gKiBpdCBoZXJlIGFzIHRoZSBjYWxsZXIgbWF5IHdhbnQgdG8gZmluaXNoIHdyaXRpbmcgb3RoZXIgZXh0ZW50IG1mdCByZWNvcmRzCi0gKiBmaXJzdCB0byBtaW5pbWl6ZSBvbi1kaXNrIG1ldGFkYXRhIGluY29uc2lzdGVuY2llcy4KKyAqIHJlY29yZCBkaXJ0eSBhbmQgcmV0dXJuIC1lcnJuby4KICAqCiAgKiBOT1RFOiAgV2UgYWx3YXlzIHBlcmZvcm0gc3luY2hyb25vdXMgaS9vIGFuZCBpZ25vcmUgdGhlIEBzeW5jIHBhcmFtZXRlci4KICAqIEhvd2V2ZXIsIGlmIHRoZSBtZnQgcmVjb3JkIGhhcyBhIGNvdW50ZXJwYXJ0IGluIHRoZSBtZnQgbWlycm9yIGFuZCBAc3luYyBpcwpAQCAtNjcyLDggKzY3MCw4IEBACiB7CiAJbnRmc192b2x1bWUgKnZvbCA9IG5pLT52b2w7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBuaS0+cGFnZTsKLQl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gdm9sLT5tZnRfaW5vLT5pX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IDEgPDwgYmxvY2tzaXplX2JpdHM7CisJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IHZvbC0+c2ItPnNfYmxvY2tzaXplOworCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSB2b2wtPnNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCWludCBtYXhfYmhzID0gdm9sLT5tZnRfcmVjb3JkX3NpemUgLyBibG9ja3NpemU7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaHNbbWF4X2Joc107CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQ7CkBAIC05ODMsNyArOTgxLDcgQEAKIAkJfQogCQludGZzX2RlYnVnKCJJbm9kZSAweCVseCBpcyBub3QgZGlydHkuIiwgbWZ0X25vKTsKIAkJLyogVGhlIGlub2RlIGlzIG5vdCBkaXJ0eSwgdHJ5IHRvIHRha2UgdGhlIG1mdCByZWNvcmQgbG9jay4gKi8KLQkJaWYgKHVubGlrZWx5KGRvd25fdHJ5bG9jaygmbmktPm1yZWNfbG9jaykpKSB7CisJCWlmICh1bmxpa2VseSghbXV0ZXhfdHJ5bG9jaygmbmktPm1yZWNfbG9jaykpKSB7CiAJCQludGZzX2RlYnVnKCJNZnQgcmVjb3JkIDB4JWx4IGlzIGFscmVhZHkgbG9ja2VkLCBkbyAiCiAJCQkJCSJub3Qgd3JpdGUgaXQuIiwgbWZ0X25vKTsKIAkJCWF0b21pY19kZWMoJm5pLT5jb3VudCk7CkBAIC0xMDQzLDEzICsxMDQxLDEzIEBACiAJICogY29ycmVzcG9uZGluZyB0byB0aGlzIGV4dGVudCBtZnQgcmVjb3JkIGF0dGFjaGVkLgogCSAqLwogCW5pID0gTlRGU19JKHZpKTsKLQlkb3duKCZuaS0+ZXh0ZW50X2xvY2spOworCW11dGV4X2xvY2soJm5pLT5leHRlbnRfbG9jayk7CiAJaWYgKG5pLT5ucl9leHRlbnRzIDw9IDApIHsKIAkJLyoKIAkJICogVGhlIGJhc2UgaW5vZGUgaGFzIG5vIGF0dGFjaGVkIGV4dGVudCBpbm9kZXMsIHdyaXRlIHRoaXMKIAkJICogZXh0ZW50IG1mdCByZWNvcmQuCiAJCSAqLwotCQl1cCgmbmktPmV4dGVudF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZuaS0+ZXh0ZW50X2xvY2spOwogCQlpcHV0KHZpKTsKIAkJbnRmc19kZWJ1ZygiQmFzZSBpbm9kZSAweCVseCBoYXMgbm8gYXR0YWNoZWQgZXh0ZW50IGlub2RlcywgIgogCQkJCSJ3cml0ZSB0aGUgZXh0ZW50IHJlY29yZC4iLCBuYS5tZnRfbm8pOwpAQCAtMTA3Miw3ICsxMDcwLDcgQEAKIAkgKiBleHRlbnQgbWZ0IHJlY29yZC4KIAkgKi8KIAlpZiAoIWVuaSkgewotCQl1cCgmbmktPmV4dGVudF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZuaS0+ZXh0ZW50X2xvY2spOwogCQlpcHV0KHZpKTsKIAkJbnRmc19kZWJ1ZygiRXh0ZW50IGlub2RlIDB4JWx4IGlzIG5vdCBhdHRhY2hlZCB0byBpdHMgYmFzZSAiCiAJCQkJImlub2RlIDB4JWx4LCB3cml0ZSB0aGUgZXh0ZW50IHJlY29yZC4iLApAQCAtMTA4MywxMiArMTA4MSwxMiBAQAogCQkJbWZ0X25vLCBuYS5tZnRfbm8pOwogCS8qIFRha2UgYSByZWZlcmVuY2UgdG8gdGhlIGV4dGVudCBudGZzIGlub2RlLiAqLwogCWF0b21pY19pbmMoJmVuaS0+Y291bnQpOwotCXVwKCZuaS0+ZXh0ZW50X2xvY2spOworCW11dGV4X3VubG9jaygmbmktPmV4dGVudF9sb2NrKTsKIAkvKgogCSAqIEZvdW5kIHRoZSBleHRlbnQgaW5vZGUgY29yZXNwb25kaW5nIHRvIHRoaXMgZXh0ZW50IG1mdCByZWNvcmQuCiAJICogVHJ5IHRvIHRha2UgdGhlIG1mdCByZWNvcmQgbG9jay4KIAkgKi8KLQlpZiAodW5saWtlbHkoZG93bl90cnlsb2NrKCZlbmktPm1yZWNfbG9jaykpKSB7CisJaWYgKHVubGlrZWx5KCFtdXRleF90cnlsb2NrKCZlbmktPm1yZWNfbG9jaykpKSB7CiAJCWF0b21pY19kZWMoJmVuaS0+Y291bnQpOwogCQlpcHV0KHZpKTsKIAkJbnRmc19kZWJ1ZygiRXh0ZW50IG1mdCByZWNvcmQgMHglbHggaXMgYWxyZWFkeSBsb2NrZWQsIGRvICIKQEAgLTI3MTEsNyArMjcwOSw3IEBACiAJCSAqIGhhdmUgaXRzIHBhZ2UgbWFwcGVkIGFuZCBpdCBpcyB2ZXJ5IGVhc3kgdG8gZG8uCiAJCSAqLwogCQlhdG9taWNfaW5jKCZuaS0+Y291bnQpOwotCQlkb3duKCZuaS0+bXJlY19sb2NrKTsKKwkJbXV0ZXhfbG9jaygmbmktPm1yZWNfbG9jayk7CiAJCW5pLT5wYWdlID0gcGFnZTsKIAkJbmktPnBhZ2Vfb2ZzID0gb2ZzOwogCQkvKgpAQCAtMjc5OCwyMiArMjc5NiwyMiBAQAogCUJVR19PTihOSW5vQXR0cihuaSkpOwogCUJVR19PTihuaS0+bnJfZXh0ZW50cyAhPSAtMSk7CiAKLQlkb3duKCZuaS0+ZXh0ZW50X2xvY2spOworCW11dGV4X2xvY2soJm5pLT5leHRlbnRfbG9jayk7CiAJYmFzZV9uaSA9IG5pLT5leHQuYmFzZV9udGZzX2lubzsKLQl1cCgmbmktPmV4dGVudF9sb2NrKTsKKwltdXRleF91bmxvY2soJm5pLT5leHRlbnRfbG9jayk7CiAKIAlCVUdfT04oYmFzZV9uaS0+bnJfZXh0ZW50cyA8PSAwKTsKIAogCW50ZnNfZGVidWcoIkVudGVyaW5nIGZvciBleHRlbnQgaW5vZGUgMHglbHgsIGJhc2UgaW5vZGUgMHglbHguXG4iLAogCQkJbWZ0X25vLCBiYXNlX25pLT5tZnRfbm8pOwogCi0JZG93bigmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOworCW11dGV4X2xvY2soJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaG9sZGluZyB0aGUgb25seSByZWZlcmVuY2UgdG8gdGhlIGV4dGVudCBpbm9kZS4gKi8KIAlpZiAoYXRvbWljX3JlYWQoJm5pLT5jb3VudCkgPiAyKSB7CiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIlRyaWVkIHRvIGZyZWUgYnVzeSBleHRlbnQgaW5vZGUgMHglbHgsICIKIAkJCQkibm90IGZyZWVpbmcuIiwgYmFzZV9uaS0+bWZ0X25vKTsKLQkJdXAoJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZiYXNlX25pLT5leHRlbnRfbG9jayk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0yODMxLDcgKzI4MjksNyBAQAogCQlicmVhazsKIAl9CiAKLQl1cCgmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOworCW11dGV4X3VubG9jaygmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOwogCiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRXh0ZW50IGlub2RlIDB4JWx4IGlzIG5vdCBhdHRhY2hlZCB0byAiCkBAIC0yODkwLDcgKzI4ODgsNyBAQAogCXJldHVybiAwOwogcm9sbGJhY2s6CiAJLyogUm9sbGJhY2sgd2hhdCB3ZSBkaWQuLi4gKi8KLQlkb3duKCZiYXNlX25pLT5leHRlbnRfbG9jayk7CisJbXV0ZXhfbG9jaygmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOwogCWV4dGVudF9uaXMgPSBiYXNlX25pLT5leHQuZXh0ZW50X250ZnNfaW5vczsKIAlpZiAoIShiYXNlX25pLT5ucl9leHRlbnRzICYgMykpIHsKIAkJaW50IG5ld19zaXplID0gKGJhc2VfbmktPm5yX2V4dGVudHMgKyA0KSAqIHNpemVvZihudGZzX2lub2RlKik7CkBAIC0yODk5LDcgKzI4OTcsNyBAQAogCQlpZiAodW5saWtlbHkoIWV4dGVudF9uaXMpKSB7CiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJuYWwgIgogCQkJCQkiYnVmZmVyIGR1cmluZyByb2xsYmFjay4lcyIsIGVzKTsKLQkJCXVwKCZiYXNlX25pLT5leHRlbnRfbG9jayk7CisJCQltdXRleF91bmxvY2soJmJhc2VfbmktPmV4dGVudF9sb2NrKTsKIAkJCU5Wb2xTZXRFcnJvcnModm9sKTsKIAkJCWdvdG8gcm9sbGJhY2tfZXJyb3I7CiAJCX0KQEAgLTI5MTQsNyArMjkxMiw3IEBACiAJbS0+ZmxhZ3MgfD0gTUZUX1JFQ09SRF9JTl9VU0U7CiAJbS0+c2VxdWVuY2VfbnVtYmVyID0gb2xkX3NlcV9ubzsKIAlleHRlbnRfbmlzW2Jhc2VfbmktPm5yX2V4dGVudHMrK10gPSBuaTsKLQl1cCgmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOworCW11dGV4X3VubG9jaygmYmFzZV9uaS0+ZXh0ZW50X2xvY2spOwogCW1hcmtfbWZ0X3JlY29yZF9kaXJ0eShuaSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmggYi9mcy9udGZzL21mdC5oCmluZGV4IDQwN2RlMmMuLjYzOWNkMWIgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmgKKysrIGIvZnMvbnRmcy9tZnQuaApAQCAtOTcsMTAgKzk3LDcgQEAKICAqIHVwdG9kYXRlLgogICoKICAqIE9uIHN1Y2Nlc3MsIGNsZWFuIHRoZSBtZnQgcmVjb3JkIGFuZCByZXR1cm4gMC4gIE9uIGVycm9yLCBsZWF2ZSB0aGUgbWZ0Ci0gKiByZWNvcmQgZGlydHkgYW5kIHJldHVybiAtZXJybm8uICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsIG1ha2VfYmFkX2lub2RlKCkgb24KLSAqIHRoZSBiYXNlIGlub2RlIHRvIGVuc3VyZSBubyBtb3JlIGFjY2VzcyBoYXBwZW5zIHRvIHRoaXMgaW5vZGUuICBXZSBkbyBub3QgZG8KLSAqIGl0IGhlcmUgYXMgdGhlIGNhbGxlciBtYXkgd2FudCB0byBmaW5pc2ggd3JpdGluZyBvdGhlciBleHRlbnQgbWZ0IHJlY29yZHMKLSAqIGZpcnN0IHRvIG1pbmltaXplIG9uLWRpc2sgbWV0YWRhdGEgaW5jb25zaXN0ZW5jaWVzLgorICogcmVjb3JkIGRpcnR5IGFuZCByZXR1cm4gLWVycm5vLgogICovCiBzdGF0aWMgaW5saW5lIGludCB3cml0ZV9tZnRfcmVjb3JkKG50ZnNfaW5vZGUgKm5pLCBNRlRfUkVDT1JEICptLCBpbnQgc3luYykKIHsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbmFtZWkuYyBiL2ZzL250ZnMvbmFtZWkuYwppbmRleCA1ZWE5ZWI5Li5lZGRiMjI0IDEwMDY0NAotLS0gYS9mcy9udGZzL25hbWVpLmMKKysrIGIvZnMvbnRmcy9uYW1laS5jCkBAIC0yLDcgKzIsNyBAQAogICogbmFtZWkuYyAtIE5URlMga2VybmVsIGRpcmVjdG9yeSBpbm9kZSBvcGVyYXRpb25zLiBQYXJ0IG9mIHRoZSBMaW51eC1OVEZTCiAgKgkgICAgIHByb2plY3QuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDQgQW50b24gQWx0YXBhcm1ha292CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBBbnRvbiBBbHRhcGFybWFrb3YKICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCkBAIC0xMTUsNyArMTE1LDkgQEAKIAl1bmFtZV9sZW4gPSBudGZzX25sc3RvdWNzKHZvbCwgZGVudC0+ZF9uYW1lLm5hbWUsIGRlbnQtPmRfbmFtZS5sZW4sCiAJCQkmdW5hbWUpOwogCWlmICh1bmFtZV9sZW4gPCAwKSB7Ci0JCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkZhaWxlZCB0byBjb252ZXJ0IG5hbWUgdG8gVW5pY29kZS4iKTsKKwkJaWYgKHVuYW1lX2xlbiAhPSAtRU5BTUVUT09MT05HKQorCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGNvbnZlcnQgbmFtZSB0byAiCisJCQkJCSJVbmljb2RlLiIpOwogCQlyZXR1cm4gRVJSX1BUUih1bmFtZV9sZW4pOwogCX0KIAltcmVmID0gbnRmc19sb29rdXBfaW5vZGVfYnlfbmFtZShOVEZTX0koZGlyX2lubyksIHVuYW1lLCB1bmFtZV9sZW4sCkBAIC0xNTcsNyArMTU5LDcgQEAKIAkJLyogUmV0dXJuIHRoZSBlcnJvciBjb2RlLiAqLwogCQlyZXR1cm4gKHN0cnVjdCBkZW50cnkgKilkZW50X2lub2RlOwogCX0KLQkvKiBJdCBpcyBndWFyYW50ZWVkIHRoYXQgbmFtZSBpcyBubyBsb25nZXIgYWxsb2NhdGVkIGF0IHRoaXMgcG9pbnQuICovCisJLyogSXQgaXMgZ3VhcmFudGVlZCB0aGF0IEBuYW1lIGlzIG5vIGxvbmdlciBhbGxvY2F0ZWQgYXQgdGhpcyBwb2ludC4gKi8KIAlpZiAoTVJFRl9FUlIobXJlZikgPT0gLUVOT0VOVCkgewogCQludGZzX2RlYnVnKCJFbnRyeSB3YXMgbm90IGZvdW5kLCBhZGRpbmcgbmVnYXRpdmUgZGVudHJ5LiIpOwogCQkvKiBUaGUgZGNhY2hlIHdpbGwgaGFuZGxlIG5lZ2F0aXZlIGVudHJpZXMuICovCkBAIC0xNjgsNyArMTcwLDYgQEAKIAludGZzX2Vycm9yKHZvbC0+c2IsICJudGZzX2xvb2t1cF9pbm9fYnlfbmFtZSgpIGZhaWxlZCB3aXRoIGVycm9yICIKIAkJCSJjb2RlICVpLiIsIC1NUkVGX0VSUihtcmVmKSk7CiAJcmV0dXJuIEVSUl9QVFIoTVJFRl9FUlIobXJlZikpOwotCiAJLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHRoaXMgbG90IHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24hIChBSUEpCiBoYW5kbGVfbmFtZToKICAgIHsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbnRmcy5oIGIvZnMvbnRmcy9udGZzLmgKaW5kZXggNDQ2YjUwMS4uMDYyNGM4ZSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9udGZzLmgKKysrIGIvZnMvbnRmcy9udGZzLmgKQEAgLTUwLDExICs1MCwxMSBAQAogLyogR2xvYmFsIHZhcmlhYmxlcy4gKi8KIAogLyogU2xhYiBjYWNoZXMgKGZyb20gc3VwZXIuYykuICovCi1leHRlcm4ga21lbV9jYWNoZV90ICpudGZzX25hbWVfY2FjaGU7Ci1leHRlcm4ga21lbV9jYWNoZV90ICpudGZzX2lub2RlX2NhY2hlOwotZXh0ZXJuIGttZW1fY2FjaGVfdCAqbnRmc19iaWdfaW5vZGVfY2FjaGU7Ci1leHRlcm4ga21lbV9jYWNoZV90ICpudGZzX2F0dHJfY3R4X2NhY2hlOwotZXh0ZXJuIGttZW1fY2FjaGVfdCAqbnRmc19pbmRleF9jdHhfY2FjaGU7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKm50ZnNfbmFtZV9jYWNoZTsKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqbnRmc19pbm9kZV9jYWNoZTsKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqbnRmc19iaWdfaW5vZGVfY2FjaGU7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKm50ZnNfYXR0cl9jdHhfY2FjaGU7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKm50ZnNfaW5kZXhfY3R4X2NhY2hlOwogCiAvKiBUaGUgdmFyaW91cyBvcGVyYXRpb25zIHN0cnVjdHMgZGVmaW5lZCB0aHJvdWdob3V0IHRoZSBkcml2ZXIgZmlsZXMuICovCiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBudGZzX2FvcHM7CkBAIC05MSw3ICs5MSw3IEBACiAKIC8qIEZyb20gZnMvbnRmcy9zdXBlci5jICovCiAjZGVmaW5lIGRlZmF1bHRfdXBjYXNlX2xlbiAweDEwMDAwCi1leHRlcm4gc3RydWN0IHNlbWFwaG9yZSBudGZzX2xvY2s7CitleHRlcm4gc3RydWN0IG11dGV4IG50ZnNfbG9jazsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCWludCB2YWw7CmRpZmYgLS1naXQgYS9mcy9udGZzL3J1bmxpc3QuYyBiL2ZzL250ZnMvcnVubGlzdC5jCmluZGV4IDA2MWI1ZmYuLmViNTJiODAgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvcnVubGlzdC5jCisrKyBiL2ZzL250ZnMvcnVubGlzdC5jCkBAIC0zODEsNiArMzgxLDcgQEAKIHN0YXRpYyBpbmxpbmUgcnVubGlzdF9lbGVtZW50ICpudGZzX3JsX3JlcGxhY2UocnVubGlzdF9lbGVtZW50ICpkc3QsCiAJCWludCBkc2l6ZSwgcnVubGlzdF9lbGVtZW50ICpzcmMsIGludCBzc2l6ZSwgaW50IGxvYykKIHsKKwlzaWduZWQgZGVsdGE7CiAJQk9PTCBsZWZ0ID0gRkFMU0U7CS8qIExlZnQgZW5kIG9mIEBzcmMgbmVlZHMgbWVyZ2luZy4gKi8KIAlCT09MIHJpZ2h0ID0gRkFMU0U7CS8qIFJpZ2h0IGVuZCBvZiBAc3JjIG5lZWRzIG1lcmdpbmcuICovCiAJaW50IHRhaWw7CQkvKiBTdGFydCBvZiB0YWlsIG9mIEBkc3QuICovCkBAIC0zOTYsMTEgKzM5NywxNCBAQAogCQlsZWZ0ID0gbnRmc19hcmVfcmxfbWVyZ2VhYmxlKGRzdCArIGxvYyAtIDEsIHNyYyk7CiAJLyoKIAkgKiBBbGxvY2F0ZSBzb21lIHNwYWNlLiAgV2Ugd2lsbCBuZWVkIGxlc3MgaWYgdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoCi0JICogZW5kcyBnZXQgbWVyZ2VkLgorCSAqIGVuZHMgZ2V0IG1lcmdlZC4gIFRoZSAtMSBhY2NvdW50cyBmb3IgdGhlIHJ1biBiZWluZyByZXBsYWNlZC4KIAkgKi8KLQlkc3QgPSBudGZzX3JsX3JlYWxsb2MoZHN0LCBkc2l6ZSwgZHNpemUgKyBzc2l6ZSAtIGxlZnQgLSByaWdodCk7Ci0JaWYgKElTX0VSUihkc3QpKQotCQlyZXR1cm4gZHN0OworCWRlbHRhID0gc3NpemUgLSAxIC0gbGVmdCAtIHJpZ2h0OworCWlmIChkZWx0YSA+IDApIHsKKwkJZHN0ID0gbnRmc19ybF9yZWFsbG9jKGRzdCwgZHNpemUsIGRzaXplICsgZGVsdGEpOworCQlpZiAoSVNfRVJSKGRzdCkpCisJCQlyZXR1cm4gZHN0OworCX0KIAkvKgogCSAqIFdlIGFyZSBndWFyYW50ZWVkIHRvIHN1Y2NlZWQgZnJvbSBoZXJlIHNvIGNhbiBzdGFydCBtb2RpZnlpbmcgdGhlCiAJICogb3JpZ2luYWwgcnVubGlzdHMuCmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggYzNhM2YxYS4uMjc4MzNmNiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCisrKyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBzdXBlci5jIC0gTlRGUyBrZXJuZWwgc3VwZXIgYmxvY2sgaGFuZGxpbmcuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNSBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA2IEFudG9uIEFsdGFwYXJtYWtvdgogICogQ29weXJpZ2h0IChjKSAyMDAxLDIwMDIgUmljaGFyZCBSdXNzb24KICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgkvKiBGb3IgYmRldl9oYXJkc2VjdF9zaXplKCkuICovCkBAIC00NzEsOSArNDcyLDE2IEBACiAJCQludGZzX2Vycm9yKHNiLCAiVm9sdW1lIGlzIGRpcnR5IGFuZCByZWFkLW9ubHklcyIsIGVzKTsKIAkJCXJldHVybiAtRVJPRlM7CiAJCX0KKwkJaWYgKHZvbC0+dm9sX2ZsYWdzICYgVk9MVU1FX01PRElGSUVEX0JZX0NIS0RTSykgeworCQkJbnRmc19lcnJvcihzYiwgIlZvbHVtZSBoYXMgYmVlbiBtb2RpZmllZCBieSBjaGtkc2sgIgorCQkJCQkiYW5kIGlzIHJlYWQtb25seSVzIiwgZXMpOworCQkJcmV0dXJuIC1FUk9GUzsKKwkJfQogCQlpZiAodm9sLT52b2xfZmxhZ3MgJiBWT0xVTUVfTVVTVF9NT1VOVF9ST19NQVNLKSB7Ci0JCQludGZzX2Vycm9yKHNiLCAiVm9sdW1lIGhhcyB1bnN1cHBvcnRlZCBmbGFncyBzZXQgYW5kICIKLQkJCQkJImlzIHJlYWQtb25seSVzIiwgZXMpOworCQkJbnRmc19lcnJvcihzYiwgIlZvbHVtZSBoYXMgdW5zdXBwb3J0ZWQgZmxhZ3Mgc2V0ICIKKwkJCQkJIigweCV4KSBhbmQgaXMgcmVhZC1vbmx5JXMiLAorCQkJCQkodW5zaWduZWQpbGUxNl90b19jcHUodm9sLT52b2xfZmxhZ3MpLAorCQkJCQllcyk7CiAJCQlyZXR1cm4gLUVST0ZTOwogCQl9CiAJCWlmIChudGZzX3NldF92b2x1bWVfZmxhZ3Modm9sLCBWT0xVTUVfSVNfRElSVFkpKSB7CkBAIC02NDEsNyArNjQ5LDcgQEAKIHsKIAljb25zdCBjaGFyICpyZWFkX2Vycl9zdHIgPSAiVW5hYmxlIHRvIHJlYWQgJXMgYm9vdCBzZWN0b3IuIjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3ByaW1hcnksICpiaF9iYWNrdXA7Ci0JbG9uZyBucl9ibG9ja3MgPSBOVEZTX1NCKHNiKS0+bnJfYmxvY2tzOworCXNlY3Rvcl90IG5yX2Jsb2NrcyA9IE5URlNfU0Ioc2IpLT5ucl9ibG9ja3M7CiAKIAkvKiBUcnkgdG8gcmVhZCBwcmltYXJ5IGJvb3Qgc2VjdG9yLiAqLwogCWlmICgoYmhfcHJpbWFyeSA9IHNiX2JyZWFkKHNiLCAwKSkpIHsKQEAgLTY4OCwxMyArNjk2LDE4IEBACiAJCS8qCiAJCSAqIElmIHdlIG1hbmFnZWQgdG8gcmVhZCBzZWN0b3IgemVybyBhbmQgdGhlIHZvbHVtZSBpcyBub3QKIAkJICogcmVhZC1vbmx5LCBjb3B5IHRoZSBmb3VuZCwgdmFsaWQgYmFja3VwIGJvb3Qgc2VjdG9yIHRvIHRoZQotCQkgKiBwcmltYXJ5IGJvb3Qgc2VjdG9yLgorCQkgKiBwcmltYXJ5IGJvb3Qgc2VjdG9yLiAgTm90ZSB3ZSBvbmx5IGNvcHkgdGhlIGFjdHVhbCBib290CisJCSAqIHNlY3RvciBzdHJ1Y3R1cmUsIG5vdCB0aGUgYWN0dWFsIHdob2xlIGRldmljZSBzZWN0b3IgYXMgdGhhdAorCQkgKiBtYXkgYmUgYmlnZ2VyIGFuZCB3b3VsZCBwb3RlbnRpYWxseSBkYW1hZ2UgdGhlICRCb290IHN5c3RlbQorCQkgKiBmaWxlIChGSVhNRTogV291bGQgYmUgbmljZSB0byBrbm93IGlmIHRoZSBiYWNrdXAgYm9vdCBzZWN0b3IKKwkJICogb24gYSBsYXJnZSBzZWN0b3IgZGV2aWNlIGNvbnRhaW5zIHRoZSB3aG9sZSBib290IGxvYWRlciBvcgorCQkgKiBqdXN0IHRoZSBmaXJzdCA1MTIgYnl0ZXMpLgogCQkgKi8KIAkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CiAJCQludGZzX3dhcm5pbmcoc2IsICJIb3QtZml4OiBSZWNvdmVyaW5nIGludmFsaWQgcHJpbWFyeSAiCiAJCQkJCSJib290IHNlY3RvciBmcm9tIGJhY2t1cCBjb3B5LiIpOwogCQkJbWVtY3B5KGJoX3ByaW1hcnktPmJfZGF0YSwgYmhfYmFja3VwLT5iX2RhdGEsCi0JCQkJCXNiLT5zX2Jsb2Nrc2l6ZSk7CisJCQkJCU5URlNfQkxPQ0tfU0laRSk7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaF9wcmltYXJ5KTsKIAkJCXN5bmNfZGlydHlfYnVmZmVyKGJoX3ByaW1hcnkpOwogCQkJaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaF9wcmltYXJ5KSkgewpAQCAtNzMzLDkgKzc0NiwxMyBAQAogCQkJdm9sLT5zZWN0b3Jfc2l6ZSk7CiAJbnRmc19kZWJ1Zygidm9sLT5zZWN0b3Jfc2l6ZV9iaXRzID0gJWkgKDB4JXgpIiwgdm9sLT5zZWN0b3Jfc2l6ZV9iaXRzLAogCQkJdm9sLT5zZWN0b3Jfc2l6ZV9iaXRzKTsKLQlpZiAodm9sLT5zZWN0b3Jfc2l6ZSAhPSB2b2wtPnNiLT5zX2Jsb2Nrc2l6ZSkKLQkJbnRmc193YXJuaW5nKHZvbC0+c2IsICJUaGUgYm9vdCBzZWN0b3IgaW5kaWNhdGVzIGEgc2VjdG9yIHNpemUgIgotCQkJCSJkaWZmZXJlbnQgZnJvbSB0aGUgZGV2aWNlIHNlY3RvciBzaXplLiIpOworCWlmICh2b2wtPnNlY3Rvcl9zaXplIDwgdm9sLT5zYi0+c19ibG9ja3NpemUpIHsKKwkJbnRmc19lcnJvcih2b2wtPnNiLCAiU2VjdG9yIHNpemUgKCVpKSBpcyBzbWFsbGVyIHRoYW4gdGhlICIKKwkJCQkiZGV2aWNlIGJsb2NrIHNpemUgKCVsdSkuICBUaGlzIGlzIG5vdCAiCisJCQkJInN1cHBvcnRlZC4gIFNvcnJ5LiIsIHZvbC0+c2VjdG9yX3NpemUsCisJCQkJdm9sLT5zYi0+c19ibG9ja3NpemUpOworCQlyZXR1cm4gRkFMU0U7CisJfQogCW50ZnNfZGVidWcoInNlY3RvcnNfcGVyX2NsdXN0ZXIgPSAweCV4IiwgYi0+YnBiLnNlY3RvcnNfcGVyX2NsdXN0ZXIpOwogCXNlY3RvcnNfcGVyX2NsdXN0ZXJfYml0cyA9IGZmcyhiLT5icGIuc2VjdG9yc19wZXJfY2x1c3RlcikgLSAxOwogCW50ZnNfZGVidWcoInNlY3RvcnNfcGVyX2NsdXN0ZXJfYml0cyA9IDB4JXgiLApAQCAtNzQ4LDE2ICs3NjUsMTEgQEAKIAludGZzX2RlYnVnKCJ2b2wtPmNsdXN0ZXJfc2l6ZSA9ICVpICgweCV4KSIsIHZvbC0+Y2x1c3Rlcl9zaXplLAogCQkJdm9sLT5jbHVzdGVyX3NpemUpOwogCW50ZnNfZGVidWcoInZvbC0+Y2x1c3Rlcl9zaXplX21hc2sgPSAweCV4Iiwgdm9sLT5jbHVzdGVyX3NpemVfbWFzayk7Ci0JbnRmc19kZWJ1Zygidm9sLT5jbHVzdGVyX3NpemVfYml0cyA9ICVpICgweCV4KSIsCi0JCQl2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzLCB2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzKTsKLQlpZiAodm9sLT5zZWN0b3Jfc2l6ZSA+IHZvbC0+Y2x1c3Rlcl9zaXplKSB7Ci0JCW50ZnNfZXJyb3Iodm9sLT5zYiwgIlNlY3RvciBzaXplcyBhYm92ZSB0aGUgY2x1c3RlciBzaXplIGFyZSAiCi0JCQkJIm5vdCBzdXBwb3J0ZWQuICBTb3JyeS4iKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQlpZiAodm9sLT5zYi0+c19ibG9ja3NpemUgPiB2b2wtPmNsdXN0ZXJfc2l6ZSkgewotCQludGZzX2Vycm9yKHZvbC0+c2IsICJDbHVzdGVyIHNpemVzIHNtYWxsZXIgdGhhbiB0aGUgZGV2aWNlICIKLQkJCQkic2VjdG9yIHNpemUgYXJlIG5vdCBzdXBwb3J0ZWQuICBTb3JyeS4iKTsKKwludGZzX2RlYnVnKCJ2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzID0gJWkiLCB2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzKTsKKwlpZiAodm9sLT5jbHVzdGVyX3NpemUgPCB2b2wtPnNlY3Rvcl9zaXplKSB7CisJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkNsdXN0ZXIgc2l6ZSAoJWkpIGlzIHNtYWxsZXIgdGhhbiB0aGUgIgorCQkJCSJzZWN0b3Igc2l6ZSAoJWkpLiAgVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgIgorCQkJCSJTb3JyeS4iLCB2b2wtPmNsdXN0ZXJfc2l6ZSwgdm9sLT5zZWN0b3Jfc2l6ZSk7CiAJCXJldHVybiBGQUxTRTsKIAl9CiAJY2x1c3RlcnNfcGVyX21mdF9yZWNvcmQgPSBiLT5jbHVzdGVyc19wZXJfbWZ0X3JlY29yZDsKQEAgLTc4NiwxMSArNzk4LDE4IEBACiAJICogd2Ugc3RvcmUgJE1GVC8kREFUQSwgdGhlIHRhYmxlIG9mIG1mdCByZWNvcmRzIGluIHRoZSBwYWdlIGNhY2hlLgogCSAqLwogCWlmICh2b2wtPm1mdF9yZWNvcmRfc2l6ZSA+IFBBR0VfQ0FDSEVfU0laRSkgewotCQludGZzX2Vycm9yKHZvbC0+c2IsICJNZnQgcmVjb3JkIHNpemUgJWkgKDB4JXgpIGV4Y2VlZHMgdGhlICIKLQkJCQkicGFnZSBjYWNoZSBzaXplIG9uIHlvdXIgc3lzdGVtICVsdSAoMHglbHgpLiAgIgorCQludGZzX2Vycm9yKHZvbC0+c2IsICJNZnQgcmVjb3JkIHNpemUgKCVpKSBleGNlZWRzIHRoZSAiCisJCQkJIlBBR0VfQ0FDSEVfU0laRSBvbiB5b3VyIHN5c3RlbSAoJWx1KS4gICIKIAkJCQkiVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgU29ycnkuIiwKLQkJCQl2b2wtPm1mdF9yZWNvcmRfc2l6ZSwgdm9sLT5tZnRfcmVjb3JkX3NpemUsCi0JCQkJUEFHRV9DQUNIRV9TSVpFLCBQQUdFX0NBQ0hFX1NJWkUpOworCQkJCXZvbC0+bWZ0X3JlY29yZF9zaXplLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCS8qIFdlIGNhbm5vdCBzdXBwb3J0IG1mdCByZWNvcmQgc2l6ZXMgYmVsb3cgdGhlIHNlY3RvciBzaXplLiAqLworCWlmICh2b2wtPm1mdF9yZWNvcmRfc2l6ZSA8IHZvbC0+c2VjdG9yX3NpemUpIHsKKwkJbnRmc19lcnJvcih2b2wtPnNiLCAiTWZ0IHJlY29yZCBzaXplICglaSkgaXMgc21hbGxlciB0aGFuIHRoZSAiCisJCQkJInNlY3RvciBzaXplICglaSkuICBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICAiCisJCQkJIlNvcnJ5LiIsIHZvbC0+bWZ0X3JlY29yZF9zaXplLAorCQkJCXZvbC0+c2VjdG9yX3NpemUpOwogCQlyZXR1cm4gRkFMU0U7CiAJfQogCWNsdXN0ZXJzX3Blcl9pbmRleF9yZWNvcmQgPSBiLT5jbHVzdGVyc19wZXJfaW5kZXhfcmVjb3JkOwpAQCAtODE2LDYgKzgzNSwxNCBAQAogCW50ZnNfZGVidWcoInZvbC0+aW5kZXhfcmVjb3JkX3NpemVfYml0cyA9ICVpICgweCV4KSIsCiAJCQl2b2wtPmluZGV4X3JlY29yZF9zaXplX2JpdHMsCiAJCQl2b2wtPmluZGV4X3JlY29yZF9zaXplX2JpdHMpOworCS8qIFdlIGNhbm5vdCBzdXBwb3J0IGluZGV4IHJlY29yZCBzaXplcyBiZWxvdyB0aGUgc2VjdG9yIHNpemUuICovCisJaWYgKHZvbC0+aW5kZXhfcmVjb3JkX3NpemUgPCB2b2wtPnNlY3Rvcl9zaXplKSB7CisJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkluZGV4IHJlY29yZCBzaXplICglaSkgaXMgc21hbGxlciB0aGFuICIKKwkJCQkidGhlIHNlY3RvciBzaXplICglaSkuICBUaGlzIGlzIG5vdCAiCisJCQkJInN1cHBvcnRlZC4gIFNvcnJ5LiIsIHZvbC0+aW5kZXhfcmVjb3JkX3NpemUsCisJCQkJdm9sLT5zZWN0b3Jfc2l6ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9CiAJLyoKIAkgKiBHZXQgdGhlIHNpemUgb2YgdGhlIHZvbHVtZSBpbiBjbHVzdGVycyBhbmQgY2hlY2sgZm9yIDY0LWJpdC1uZXNzLgogCSAqIFdpbmRvd3MgY3VycmVudGx5IG9ubHkgdXNlcyAzMiBiaXRzIHRvIHNhdmUgdGhlIGNsdXN0ZXJzIHNvIHdlIGRvCkBAIC04NDUsMTUgKzg3MiwxOCBAQAogCX0KIAlsbCA9IHNsZTY0X3RvX2NwdShiLT5tZnRfbGNuKTsKIAlpZiAobGwgPj0gdm9sLT5ucl9jbHVzdGVycykgewotCQludGZzX2Vycm9yKHZvbC0+c2IsICJNRlQgTENOIGlzIGJleW9uZCBlbmQgb2Ygdm9sdW1lLiAgV2VpcmQuIik7CisJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIk1GVCBMQ04gKCVsbGksIDB4JWxseCkgaXMgYmV5b25kIGVuZCBvZiAiCisJCQkJInZvbHVtZS4gIFdlaXJkLiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbGwsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsbCk7CiAJCXJldHVybiBGQUxTRTsKIAl9CiAJdm9sLT5tZnRfbGNuID0gbGw7CiAJbnRmc19kZWJ1Zygidm9sLT5tZnRfbGNuID0gMHglbGx4IiwgKGxvbmcgbG9uZyl2b2wtPm1mdF9sY24pOwogCWxsID0gc2xlNjRfdG9fY3B1KGItPm1mdG1pcnJfbGNuKTsKIAlpZiAobGwgPj0gdm9sLT5ucl9jbHVzdGVycykgewotCQludGZzX2Vycm9yKHZvbC0+c2IsICJNRlRNaXJyIExDTiBpcyBiZXlvbmQgZW5kIG9mIHZvbHVtZS4gICIKLQkJCQkiV2VpcmQuIik7CisJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIk1GVE1pcnIgTENOICglbGxpLCAweCVsbHgpIGlzIGJleW9uZCBlbmQgIgorCQkJCSJvZiB2b2x1bWUuICBXZWlyZC4iLCAodW5zaWduZWQgbG9uZyBsb25nKWxsLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbGwpOwogCQlyZXR1cm4gRkFMU0U7CiAJfQogCXZvbC0+bWZ0bWlycl9sY24gPSBsbDsKQEAgLTEwNjksMjYgKzEwOTksMzggQEAKIAkJCWttaXJyID0gcGFnZV9hZGRyZXNzKG1pcnJfcGFnZSk7CiAJCQkrK2luZGV4OwogCQl9Ci0JCS8qIE1ha2Ugc3VyZSB0aGUgcmVjb3JkIGlzIG9rLiAqLwotCQlpZiAobnRmc19pc19iYWFkX3JlY29yZHAoKGxlMzIqKWttZnQpKSB7Ci0JCQludGZzX2Vycm9yKHNiLCAiSW5jb21wbGV0ZSBtdWx0aSBzZWN0b3IgdHJhbnNmZXIgIgotCQkJCQkiZGV0ZWN0ZWQgaW4gbWZ0IHJlY29yZCAlaS4iLCBpKTsKKwkJLyogRG8gbm90IGNoZWNrIHRoZSByZWNvcmQgaWYgaXQgaXMgbm90IGluIHVzZS4gKi8KKwkJaWYgKCgoTUZUX1JFQ09SRCopa21mdCktPmZsYWdzICYgTUZUX1JFQ09SRF9JTl9VU0UpIHsKKwkJCS8qIE1ha2Ugc3VyZSB0aGUgcmVjb3JkIGlzIG9rLiAqLworCQkJaWYgKG50ZnNfaXNfYmFhZF9yZWNvcmRwKChsZTMyKilrbWZ0KSkgeworCQkJCW50ZnNfZXJyb3Ioc2IsICJJbmNvbXBsZXRlIG11bHRpIHNlY3RvciAiCisJCQkJCQkidHJhbnNmZXIgZGV0ZWN0ZWQgaW4gbWZ0ICIKKwkJCQkJCSJyZWNvcmQgJWkuIiwgaSk7CiBtbV91bm1hcF9vdXQ6Ci0JCQludGZzX3VubWFwX3BhZ2UobWlycl9wYWdlKTsKKwkJCQludGZzX3VubWFwX3BhZ2UobWlycl9wYWdlKTsKIG1mdF91bm1hcF9vdXQ6Ci0JCQludGZzX3VubWFwX3BhZ2UobWZ0X3BhZ2UpOwotCQkJcmV0dXJuIEZBTFNFOworCQkJCW50ZnNfdW5tYXBfcGFnZShtZnRfcGFnZSk7CisJCQkJcmV0dXJuIEZBTFNFOworCQkJfQogCQl9Ci0JCWlmIChudGZzX2lzX2JhYWRfcmVjb3JkcCgobGUzMiopa21pcnIpKSB7Ci0JCQludGZzX2Vycm9yKHNiLCAiSW5jb21wbGV0ZSBtdWx0aSBzZWN0b3IgdHJhbnNmZXIgIgotCQkJCQkiZGV0ZWN0ZWQgaW4gbWZ0IG1pcnJvciByZWNvcmQgJWkuIiwgaSk7Ci0JCQlnb3RvIG1tX3VubWFwX291dDsKKwkJLyogRG8gbm90IGNoZWNrIHRoZSBtaXJyb3IgcmVjb3JkIGlmIGl0IGlzIG5vdCBpbiB1c2UuICovCisJCWlmICgoKE1GVF9SRUNPUkQqKWttaXJyKS0+ZmxhZ3MgJiBNRlRfUkVDT1JEX0lOX1VTRSkgeworCQkJaWYgKG50ZnNfaXNfYmFhZF9yZWNvcmRwKChsZTMyKilrbWlycikpIHsKKwkJCQludGZzX2Vycm9yKHNiLCAiSW5jb21wbGV0ZSBtdWx0aSBzZWN0b3IgIgorCQkJCQkJInRyYW5zZmVyIGRldGVjdGVkIGluIG1mdCAiCisJCQkJCQkibWlycm9yIHJlY29yZCAlaS4iLCBpKTsKKwkJCQlnb3RvIG1tX3VubWFwX291dDsKKwkJCX0KIAkJfQogCQkvKiBHZXQgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBjdXJyZW50IHJlY29yZC4gKi8KIAkJYnl0ZXMgPSBsZTMyX3RvX2NwdSgoKE1GVF9SRUNPUkQqKWttZnQpLT5ieXRlc19pbl91c2UpOwotCQlpZiAoIWJ5dGVzIHx8IGJ5dGVzID4gdm9sLT5tZnRfcmVjb3JkX3NpemUpIHsKKwkJaWYgKGJ5dGVzIDwgc2l6ZW9mKE1GVF9SRUNPUkRfT0xEKSB8fAorCQkJCWJ5dGVzID4gdm9sLT5tZnRfcmVjb3JkX3NpemUgfHwKKwkJCQludGZzX2lzX2JhYWRfcmVjb3JkcCgobGUzMiopa21mdCkpIHsKIAkJCWJ5dGVzID0gbGUzMl90b19jcHUoKChNRlRfUkVDT1JEKilrbWlyciktPmJ5dGVzX2luX3VzZSk7Ci0JCQlpZiAoIWJ5dGVzIHx8IGJ5dGVzID4gdm9sLT5tZnRfcmVjb3JkX3NpemUpCisJCQlpZiAoYnl0ZXMgPCBzaXplb2YoTUZUX1JFQ09SRF9PTEQpIHx8CisJCQkJCWJ5dGVzID4gdm9sLT5tZnRfcmVjb3JkX3NpemUgfHwKKwkJCQkJbnRmc19pc19iYWFkX3JlY29yZHAoKGxlMzIqKWttaXJyKSkKIAkJCQlieXRlcyA9IHZvbC0+bWZ0X3JlY29yZF9zaXplOwogCQl9CiAJCS8qIENvbXBhcmUgdGhlIHR3byByZWNvcmRzLiAqLwpAQCAtMTYzNSwxMSArMTY3NywxMSBAQAogCW50ZnNfZGVidWcoIlJlYWQgJWxsdSBieXRlcyBmcm9tICRVcENhc2UgKGV4cGVjdGVkICV6dSBieXRlcykuIiwKIAkJCWlfc2l6ZSwgNjQgKiAxMDI0ICogc2l6ZW9mKG50ZnNjaGFyKSk7CiAJaXB1dChpbm8pOwotCWRvd24oJm50ZnNfbG9jayk7CisJbXV0ZXhfbG9jaygmbnRmc19sb2NrKTsKIAlpZiAoIWRlZmF1bHRfdXBjYXNlKSB7CiAJCW50ZnNfZGVidWcoIlVzaW5nIHZvbHVtZSBzcGVjaWZpZWQgJFVwQ2FzZSBzaW5jZSBkZWZhdWx0IGlzICIKIAkJCQkibm90IHByZXNlbnQuIik7Ci0JCXVwKCZudGZzX2xvY2spOworCQltdXRleF91bmxvY2soJm50ZnNfbG9jayk7CiAJCXJldHVybiBUUlVFOwogCX0KIAltYXggPSBkZWZhdWx0X3VwY2FzZV9sZW47CkBAIC0xNjUzLDEyICsxNjk1LDEyIEBACiAJCXZvbC0+dXBjYXNlID0gZGVmYXVsdF91cGNhc2U7CiAJCXZvbC0+dXBjYXNlX2xlbiA9IG1heDsKIAkJbnRmc19ucl91cGNhc2VfdXNlcnMrKzsKLQkJdXAoJm50ZnNfbG9jayk7CisJCW11dGV4X3VubG9jaygmbnRmc19sb2NrKTsKIAkJbnRmc19kZWJ1ZygiVm9sdW1lIHNwZWNpZmllZCAkVXBDYXNlIG1hdGNoZXMgZGVmYXVsdC4gVXNpbmcgIgogCQkJCSJkZWZhdWx0LiIpOwogCQlyZXR1cm4gVFJVRTsKIAl9Ci0JdXAoJm50ZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogCW50ZnNfZGVidWcoIlVzaW5nIHZvbHVtZSBzcGVjaWZpZWQgJFVwQ2FzZSBzaW5jZSBpdCBkb2VzIG5vdCBtYXRjaCAiCiAJCQkidGhlIGRlZmF1bHQuIik7CiAJcmV0dXJuIFRSVUU7CkBAIC0xNjY3LDE3ICsxNzA5LDE3IEBACiAJbnRmc19mcmVlKHZvbC0+dXBjYXNlKTsKIAl2b2wtPnVwY2FzZSA9IE5VTEw7CiB1cGNhc2VfZmFpbGVkOgotCWRvd24oJm50ZnNfbG9jayk7CisJbXV0ZXhfbG9jaygmbnRmc19sb2NrKTsKIAlpZiAoZGVmYXVsdF91cGNhc2UpIHsKIAkJdm9sLT51cGNhc2UgPSBkZWZhdWx0X3VwY2FzZTsKIAkJdm9sLT51cGNhc2VfbGVuID0gZGVmYXVsdF91cGNhc2VfbGVuOwogCQludGZzX25yX3VwY2FzZV91c2VycysrOwotCQl1cCgmbnRmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogCQludGZzX2Vycm9yKHNiLCAiRmFpbGVkIHRvIGxvYWQgJFVwQ2FzZSBmcm9tIHRoZSB2b2x1bWUuIFVzaW5nICIKIAkJCQkiZGVmYXVsdC4iKTsKIAkJcmV0dXJuIFRSVUU7CiAJfQotCXVwKCZudGZzX2xvY2spOworCW11dGV4X3VubG9jaygmbnRmc19sb2NrKTsKIAludGZzX2Vycm9yKHNiLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgdXBjYXNlIHRhYmxlLiIpOwogCXJldHVybiBGQUxTRTsKIH0KQEAgLTE4MjIsMTEgKzE4NjQsMjQgQEAKIAkvKiBNYWtlIHN1cmUgdGhhdCBubyB1bnN1cHBvcnRlZCB2b2x1bWUgZmxhZ3MgYXJlIHNldC4gKi8KIAlpZiAodm9sLT52b2xfZmxhZ3MgJiBWT0xVTUVfTVVTVF9NT1VOVF9ST19NQVNLKSB7CiAJCXN0YXRpYyBjb25zdCBjaGFyICplczFhID0gIlZvbHVtZSBpcyBkaXJ0eSI7Ci0JCXN0YXRpYyBjb25zdCBjaGFyICplczFiID0gIlZvbHVtZSBoYXMgdW5zdXBwb3J0ZWQgZmxhZ3Mgc2V0IjsKLQkJc3RhdGljIGNvbnN0IGNoYXIgKmVzMiA9ICIuICBSdW4gY2hrZHNrIGFuZCBtb3VudCBpbiBXaW5kb3dzLiI7Ci0JCWNvbnN0IGNoYXIgKmVzMTsKLQkJCi0JCWVzMSA9IHZvbC0+dm9sX2ZsYWdzICYgVk9MVU1FX0lTX0RJUlRZID8gZXMxYSA6IGVzMWI7CisJCXN0YXRpYyBjb25zdCBjaGFyICplczFiID0gIlZvbHVtZSBoYXMgYmVlbiBtb2RpZmllZCBieSBjaGtkc2siOworCQlzdGF0aWMgY29uc3QgY2hhciAqZXMxYyA9ICJWb2x1bWUgaGFzIHVuc3VwcG9ydGVkIGZsYWdzIHNldCI7CisJCXN0YXRpYyBjb25zdCBjaGFyICplczJhID0gIi4gIFJ1biBjaGtkc2sgYW5kIG1vdW50IGluIFdpbmRvd3MuIjsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmVzMmIgPSAiLiAgTW91bnQgaW4gV2luZG93cy4iOworCQljb25zdCBjaGFyICplczEsICplczI7CisKKwkJZXMyID0gZXMyYTsKKwkJaWYgKHZvbC0+dm9sX2ZsYWdzICYgVk9MVU1FX0lTX0RJUlRZKQorCQkJZXMxID0gZXMxYTsKKwkJZWxzZSBpZiAodm9sLT52b2xfZmxhZ3MgJiBWT0xVTUVfTU9ESUZJRURfQllfQ0hLRFNLKSB7CisJCQllczEgPSBlczFiOworCQkJZXMyID0gZXMyYjsKKwkJfSBlbHNlIHsKKwkJCWVzMSA9IGVzMWM7CisJCQludGZzX3dhcm5pbmcoc2IsICJVbnN1cHBvcnRlZCB2b2x1bWUgZmxhZ3MgMHgleCAiCisJCQkJCSJlbmNvdW50ZXJlZC4iLAorCQkJCQkodW5zaWduZWQpbGUxNl90b19jcHUodm9sLT52b2xfZmxhZ3MpKTsKKwkJfQogCQkvKiBJZiBhIHJlYWQtd3JpdGUgbW91bnQsIGNvbnZlcnQgaXQgdG8gYSByZWFkLW9ubHkgbW91bnQuICovCiAJCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQkJaWYgKCEodm9sLT5vbl9lcnJvcnMgJiAoT05fRVJST1JTX1JFTU9VTlRfUk8gfApAQCAtMjE0MCwxMiArMjE5NSwxMiBAQAogaXB1dF91cGNhc2VfZXJyX291dDoKICNlbmRpZiAvKiBOVEZTX1JXICovCiAJdm9sLT51cGNhc2VfbGVuID0gMDsKLQlkb3duKCZudGZzX2xvY2spOworCW11dGV4X2xvY2soJm50ZnNfbG9jayk7CiAJaWYgKHZvbC0+dXBjYXNlID09IGRlZmF1bHRfdXBjYXNlKSB7CiAJCW50ZnNfbnJfdXBjYXNlX3VzZXJzLS07CiAJCXZvbC0+dXBjYXNlID0gTlVMTDsKIAl9Ci0JdXAoJm50ZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogCWlmICh2b2wtPnVwY2FzZSkgewogCQludGZzX2ZyZWUodm9sLT51cGNhc2UpOwogCQl2b2wtPnVwY2FzZSA9IE5VTEw7CkBAIC0yMzUwLDcgKzI0MDUsNyBAQAogCSAqIERlc3Ryb3kgdGhlIGdsb2JhbCBkZWZhdWx0IHVwY2FzZSB0YWJsZSBpZiBuZWNlc3NhcnkuICBBbHNvIGRlY3JlYXNlCiAJICogdGhlIG51bWJlciBvZiB1cGNhc2UgdXNlcnMgaWYgd2UgYXJlIGEgdXNlci4KIAkgKi8KLQlkb3duKCZudGZzX2xvY2spOworCW11dGV4X2xvY2soJm50ZnNfbG9jayk7CiAJaWYgKHZvbC0+dXBjYXNlID09IGRlZmF1bHRfdXBjYXNlKSB7CiAJCW50ZnNfbnJfdXBjYXNlX3VzZXJzLS07CiAJCXZvbC0+dXBjYXNlID0gTlVMTDsKQEAgLTIzNjEsNyArMjQxNiw3IEBACiAJfQogCWlmICh2b2wtPmNsdXN0ZXJfc2l6ZSA8PSA0MDk2ICYmICEtLW50ZnNfbnJfY29tcHJlc3Npb25fdXNlcnMpCiAJCWZyZWVfY29tcHJlc3Npb25fYnVmZmVycygpOwotCXVwKCZudGZzX2xvY2spOworCW11dGV4X3VubG9jaygmbnRmc19sb2NrKTsKIAlpZiAodm9sLT51cGNhc2UpIHsKIAkJbnRmc19mcmVlKHZvbC0+dXBjYXNlKTsKIAkJdm9sLT51cGNhc2UgPSBOVUxMOwpAQCAtMjY4NSw3ICsyNzQwLDcgQEAKIAludGZzX3ZvbHVtZSAqdm9sOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGlub2RlICp0bXBfaW5vOwotCWludCByZXN1bHQ7CisJaW50IGJsb2Nrc2l6ZSwgcmVzdWx0OwogCiAJbnRmc19kZWJ1ZygiRW50ZXJpbmcuIik7CiAjaWZuZGVmIE5URlNfUlcKQEAgLTI3MjQsNjAgKzI3NzksODUgQEAKIAlpZiAoIXBhcnNlX29wdGlvbnModm9sLCAoY2hhciopb3B0KSkKIAkJZ290byBlcnJfb3V0X25vdzsKIAorCS8qIFdlIHN1cHBvcnQgc2VjdG9yIHNpemVzIHVwIHRvIHRoZSBQQUdFX0NBQ0hFX1NJWkUuICovCisJaWYgKGJkZXZfaGFyZHNlY3Rfc2l6ZShzYi0+c19iZGV2KSA+IFBBR0VfQ0FDSEVfU0laRSkgeworCQlpZiAoIXNpbGVudCkKKwkJCW50ZnNfZXJyb3Ioc2IsICJEZXZpY2UgaGFzIHVuc3VwcG9ydGVkIHNlY3RvciBzaXplICIKKwkJCQkJIiglaSkuICBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgc2VjdG9yICIKKwkJCQkJInNpemUgb24gdGhpcyBhcmNoaXRlY3R1cmUgaXMgJWx1ICIKKwkJCQkJImJ5dGVzLiIsCisJCQkJCWJkZXZfaGFyZHNlY3Rfc2l6ZShzYi0+c19iZGV2KSwKKwkJCQkJUEFHRV9DQUNIRV9TSVpFKTsKKwkJZ290byBlcnJfb3V0X25vdzsKKwl9CiAJLyoKLQkgKiBUT0RPOiBGYWlsIHNhZmV0eSBjaGVjay4gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgcmVhbGx5IGJlIGFibGUgdG8KLQkgKiBjb3BlIHdpdGggdGhpcyBiZWluZyB0aGUgY2FzZSwgYnV0IGZvciBub3cganVzdCBiYWlsIG91dC4KKwkgKiBTZXR1cCB0aGUgZGV2aWNlIGFjY2VzcyBibG9jayBzaXplIHRvIE5URlNfQkxPQ0tfU0laRSBvciB0aGUgaGFyZAorCSAqIHNlY3RvciBzaXplLCB3aGljaGV2ZXIgaXMgYmlnZ2VyLgogCSAqLwotCWlmIChiZGV2X2hhcmRzZWN0X3NpemUoc2ItPnNfYmRldikgPiBOVEZTX0JMT0NLX1NJWkUpIHsKKwlibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHNiLCBOVEZTX0JMT0NLX1NJWkUpOworCWlmIChibG9ja3NpemUgPCBOVEZTX0JMT0NLX1NJWkUpIHsKIAkJaWYgKCFzaWxlbnQpCi0JCQludGZzX2Vycm9yKHNiLCAiRGV2aWNlIGhhcyB1bnN1cHBvcnRlZCBoYXJkc2VjdF9zaXplLiIpOworCQkJbnRmc19lcnJvcihzYiwgIlVuYWJsZSB0byBzZXQgZGV2aWNlIGJsb2NrIHNpemUuIik7CiAJCWdvdG8gZXJyX291dF9ub3c7CiAJfQotCi0JLyogU2V0dXAgdGhlIGRldmljZSBhY2Nlc3MgYmxvY2sgc2l6ZSB0byBOVEZTX0JMT0NLX1NJWkUuICovCi0JaWYgKHNiX3NldF9ibG9ja3NpemUoc2IsIE5URlNfQkxPQ0tfU0laRSkgIT0gTlRGU19CTE9DS19TSVpFKSB7CisJQlVHX09OKGJsb2Nrc2l6ZSAhPSBzYi0+c19ibG9ja3NpemUpOworCW50ZnNfZGVidWcoIlNldCBkZXZpY2UgYmxvY2sgc2l6ZSB0byAlaSBieXRlcyAoYmxvY2sgc2l6ZSBiaXRzICVpKS4iLAorCQkJYmxvY2tzaXplLCBzYi0+c19ibG9ja3NpemVfYml0cyk7CisJLyogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBkZXZpY2UgaW4gdW5pdHMgb2YgYmxvY2tfc2l6ZSBieXRlcy4gKi8KKwlpZiAoIWlfc2l6ZV9yZWFkKHNiLT5zX2JkZXYtPmJkX2lub2RlKSkgewogCQlpZiAoIXNpbGVudCkKLQkJCW50ZnNfZXJyb3Ioc2IsICJVbmFibGUgdG8gc2V0IGJsb2NrIHNpemUuIik7CisJCQludGZzX2Vycm9yKHNiLCAiVW5hYmxlIHRvIGRldGVybWluZSBkZXZpY2Ugc2l6ZS4iKTsKIAkJZ290byBlcnJfb3V0X25vdzsKIAl9Ci0KLQkvKiBHZXQgdGhlIHNpemUgb2YgdGhlIGRldmljZSBpbiB1bml0cyBvZiBOVEZTX0JMT0NLX1NJWkUgYnl0ZXMuICovCiAJdm9sLT5ucl9ibG9ja3MgPSBpX3NpemVfcmVhZChzYi0+c19iZGV2LT5iZF9pbm9kZSkgPj4KLQkJCU5URlNfQkxPQ0tfU0laRV9CSVRTOwotCisJCQlzYi0+c19ibG9ja3NpemVfYml0czsKIAkvKiBSZWFkIHRoZSBib290IHNlY3RvciBhbmQgcmV0dXJuIHVubG9ja2VkIGJ1ZmZlciBoZWFkIHRvIGl0LiAqLwogCWlmICghKGJoID0gcmVhZF9udGZzX2Jvb3Rfc2VjdG9yKHNiLCBzaWxlbnQpKSkgewogCQlpZiAoIXNpbGVudCkKIAkJCW50ZnNfZXJyb3Ioc2IsICJOb3QgYW4gTlRGUyB2b2x1bWUuIik7CiAJCWdvdG8gZXJyX291dF9ub3c7CiAJfQotCiAJLyoKLQkgKiBFeHRyYWN0IHRoZSBkYXRhIGZyb20gdGhlIGJvb3Qgc2VjdG9yIGFuZCBzZXR1cCB0aGUgbnRmcyBzdXBlciBibG9jaworCSAqIEV4dHJhY3QgdGhlIGRhdGEgZnJvbSB0aGUgYm9vdCBzZWN0b3IgYW5kIHNldHVwIHRoZSBudGZzIHZvbHVtZQogCSAqIHVzaW5nIGl0LgogCSAqLwogCXJlc3VsdCA9IHBhcnNlX250ZnNfYm9vdF9zZWN0b3Iodm9sLCAoTlRGU19CT09UX1NFQ1RPUiopYmgtPmJfZGF0YSk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBjbHVzdGVyIGFuZCBtZnQgYWxsb2NhdG9ycy4gKi8KLQludGZzX3NldHVwX2FsbG9jYXRvcnModm9sKTsKLQogCWJyZWxzZShiaCk7Ci0KIAlpZiAoIXJlc3VsdCkgewogCQlpZiAoIXNpbGVudCkKIAkJCW50ZnNfZXJyb3Ioc2IsICJVbnN1cHBvcnRlZCBOVEZTIGZpbGVzeXN0ZW0uIik7CiAJCWdvdG8gZXJyX291dF9ub3c7CiAJfQotCiAJLyoKLQkgKiBUT0RPOiBXaGVuIHdlIHN0YXJ0IGNvcGluZyB3aXRoIHNlY3RvciBzaXplcyBkaWZmZXJlbnQgZnJvbQotCSAqIE5URlNfQkxPQ0tfU0laRSwgd2Ugbm93IHByb2JhYmx5IG5lZWQgdG8gc2V0IHRoZSBibG9ja3NpemUgb2YgdGhlCi0JICogZGV2aWNlIChwcm9iYWJseSB0byBOVEZTX0JMT0NLX1NJWkUpLgorCSAqIElmIHRoZSBib290IHNlY3RvciBpbmRpY2F0ZXMgYSBzZWN0b3Igc2l6ZSBiaWdnZXIgdGhhbiB0aGUgY3VycmVudAorCSAqIGRldmljZSBibG9jayBzaXplLCBzd2l0Y2ggdGhlIGRldmljZSBibG9jayBzaXplIHRvIHRoZSBzZWN0b3Igc2l6ZS4KKwkgKiBUT0RPOiBJdCBtYXkgYmUgcG9zc2libGUgdG8gc3VwcG9ydCB0aGlzIGNhc2UgZXZlbiB3aGVuIHRoZSBzZXQKKwkgKiBiZWxvdyBmYWlscywgd2Ugd291bGQganVzdCBiZSBicmVha2luZyB1cCB0aGUgaS9vIGZvciBlYWNoIHNlY3RvcgorCSAqIGludG8gbXVsdGlwbGUgYmxvY2tzIGZvciBpL28gcHVycG9zZXMgYnV0IG90aGVyd2lzZSBpdCBzaG91bGQganVzdAorCSAqIHdvcmsuICBIb3dldmVyIGl0IGlzIHNhZmVyIHRvIGxlYXZlIGRpc2FibGVkIHVudGlsIHNvbWVvbmUgaGl0cyB0aGlzCisJICogZXJyb3IgbWVzc2FnZSBhbmQgdGhlbiB3ZSBjYW4gZ2V0IHRoZW0gdG8gdHJ5IGl0IHdpdGhvdXQgdGhlIHNldHRpbmcKKwkgKiBzbyB3ZSBrbm93IGZvciBzdXJlIHRoYXQgaXQgd29ya3MuCiAJICovCi0KKwlpZiAodm9sLT5zZWN0b3Jfc2l6ZSA+IGJsb2Nrc2l6ZSkgeworCQlibG9ja3NpemUgPSBzYl9zZXRfYmxvY2tzaXplKHNiLCB2b2wtPnNlY3Rvcl9zaXplKTsKKwkJaWYgKGJsb2Nrc2l6ZSAhPSB2b2wtPnNlY3Rvcl9zaXplKSB7CisJCQlpZiAoIXNpbGVudCkKKwkJCQludGZzX2Vycm9yKHNiLCAiVW5hYmxlIHRvIHNldCBkZXZpY2UgYmxvY2sgIgorCQkJCQkJInNpemUgdG8gc2VjdG9yIHNpemUgKCVpKS4iLAorCQkJCQkJdm9sLT5zZWN0b3Jfc2l6ZSk7CisJCQlnb3RvIGVycl9vdXRfbm93OworCQl9CisJCUJVR19PTihibG9ja3NpemUgIT0gc2ItPnNfYmxvY2tzaXplKTsKKwkJdm9sLT5ucl9ibG9ja3MgPSBpX3NpemVfcmVhZChzYi0+c19iZGV2LT5iZF9pbm9kZSkgPj4KKwkJCQlzYi0+c19ibG9ja3NpemVfYml0czsKKwkJbnRmc19kZWJ1ZygiQ2hhbmdlZCBkZXZpY2UgYmxvY2sgc2l6ZSB0byAlaSBieXRlcyAoYmxvY2sgc2l6ZSAiCisJCQkJImJpdHMgJWkpIHRvIG1hdGNoIHZvbHVtZSBzZWN0b3Igc2l6ZS4iLAorCQkJCWJsb2Nrc2l6ZSwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCX0KKwkvKiBJbml0aWFsaXplIHRoZSBjbHVzdGVyIGFuZCBtZnQgYWxsb2NhdG9ycy4gKi8KKwludGZzX3NldHVwX2FsbG9jYXRvcnModm9sKTsKIAkvKiBTZXR1cCByZW1haW5pbmcgZmllbGRzIGluIHRoZSBzdXBlciBibG9jay4gKi8KIAlzYi0+c19tYWdpYyA9IE5URlNfU0JfTUFHSUM7Ci0KIAkvKgogCSAqIE50ZnMgYWxsb3dzIDYzIGJpdHMgZm9yIHRoZSBmaWxlIHNpemUsIGkuZS4gY29ycmVjdCB3b3VsZCBiZToKIAkgKglzYi0+c19tYXhieXRlcyA9IH4wVUxMID4+IDE7CkBAIC0yNzg3LDkgKzI4NjcsOCBAQAogCSAqIHdpdGhvdXQgb3ZlcmZsb3dpbmcgdGhlIGluZGV4IG9yIHRvIDJeNjMgLSAxLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KIAkgKi8KIAlzYi0+c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7Ci0KKwkvKiBOdGZzIG1lYXN1cmVzIHRpbWUgaW4gMTAwbnMgaW50ZXJ2YWxzLiAqLwogCXNiLT5zX3RpbWVfZ3JhbiA9IDEwMDsKLQogCS8qCiAJICogTm93IGxvYWQgdGhlIG1ldGFkYXRhIHJlcXVpcmVkIGZvciB0aGUgcGFnZSBjYWNoZSBhbmQgb3VyIGFkZHJlc3MKIAkgKiBzcGFjZSBvcGVyYXRpb25zIHRvIGZ1bmN0aW9uLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdXAgYSBzcGVjaWFsaXNlZApAQCAtMjgxMSw3ICsyODkwLDcgQEAKIAkJCW50ZnNfZXJyb3Ioc2IsICJGYWlsZWQgdG8gbG9hZCBlc3NlbnRpYWwgbWV0YWRhdGEuIik7CiAJCWdvdG8gaXB1dF90bXBfaW5vX2Vycl9vdXRfbm93OwogCX0KLQlkb3duKCZudGZzX2xvY2spOworCW11dGV4X2xvY2soJm50ZnNfbG9jayk7CiAJLyoKIAkgKiBUaGUgY3VycmVudCBtb3VudCBpcyBhIGNvbXByZXNzaW9uIHVzZXIgaWYgdGhlIGNsdXN0ZXIgc2l6ZSBpcwogCSAqIGxlc3MgdGhhbiBvciBlcXVhbCA0a2lCLgpAQCAtMjgyMiw3ICsyOTAxLDcgQEAKIAkJCW50ZnNfZXJyb3IoTlVMTCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXJzICIKIAkJCQkJImZvciBjb21wcmVzc2lvbiBlbmdpbmUuIik7CiAJCQludGZzX25yX2NvbXByZXNzaW9uX3VzZXJzLS07Ci0JCQl1cCgmbnRmc19sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmbnRmc19sb2NrKTsKIAkJCWdvdG8gaXB1dF90bXBfaW5vX2Vycl9vdXRfbm93OwogCQl9CiAJfQpAQCAtMjgzNCw3ICsyOTEzLDcgQEAKIAlpZiAoIWRlZmF1bHRfdXBjYXNlKQogCQlkZWZhdWx0X3VwY2FzZSA9IGdlbmVyYXRlX2RlZmF1bHRfdXBjYXNlKCk7CiAJbnRmc19ucl91cGNhc2VfdXNlcnMrKzsKLQl1cCgmbnRmc19sb2NrKTsKKwltdXRleF91bmxvY2soJm50ZnNfbG9jayk7CiAJLyoKIAkgKiBGcm9tIG5vdyBvbiwgaWdub3JlIEBzaWxlbnQgcGFyYW1ldGVyLiBJZiB3ZSBmYWlsIGJlbG93IHRoaXMgbGluZSwKIAkgKiBpdCB3aWxsIGJlIGR1ZSB0byBhIGNvcnJ1cHQgZnMgb3IgYSBzeXN0ZW0gZXJyb3IsIHNvIHdlIHJlcG9ydCBpdC4KQEAgLTI4NTIsMTIgKzI5MzEsMTIgQEAKIAkJYXRvbWljX2luYygmdm9sLT5yb290X2luby0+aV9jb3VudCk7CiAJCW50ZnNfZGVidWcoIkV4aXRpbmcsIHN0YXR1cyBzdWNjZXNzZnVsLiIpOwogCQkvKiBSZWxlYXNlIHRoZSBkZWZhdWx0IHVwY2FzZSBpZiBpdCBoYXMgbm8gdXNlcnMuICovCi0JCWRvd24oJm50ZnNfbG9jayk7CisJCW11dGV4X2xvY2soJm50ZnNfbG9jayk7CiAJCWlmICghLS1udGZzX25yX3VwY2FzZV91c2VycyAmJiBkZWZhdWx0X3VwY2FzZSkgewogCQkJbnRmc19mcmVlKGRlZmF1bHRfdXBjYXNlKTsKIAkJCWRlZmF1bHRfdXBjYXNlID0gTlVMTDsKIAkJfQotCQl1cCgmbnRmc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogCQlzYi0+c19leHBvcnRfb3AgPSAmbnRmc19leHBvcnRfb3BzOwogCQlsb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gMDsKQEAgLTI5MjUsMTIgKzMwMDQsMTIgQEAKIAkJdm9sLT5hdHRyZGVmID0gTlVMTDsKIAl9CiAJdm9sLT51cGNhc2VfbGVuID0gMDsKLQlkb3duKCZudGZzX2xvY2spOworCW11dGV4X2xvY2soJm50ZnNfbG9jayk7CiAJaWYgKHZvbC0+dXBjYXNlID09IGRlZmF1bHRfdXBjYXNlKSB7CiAJCW50ZnNfbnJfdXBjYXNlX3VzZXJzLS07CiAJCXZvbC0+dXBjYXNlID0gTlVMTDsKIAl9Ci0JdXAoJm50ZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogCWlmICh2b2wtPnVwY2FzZSkgewogCQludGZzX2ZyZWUodm9sLT51cGNhc2UpOwogCQl2b2wtPnVwY2FzZSA9IE5VTEw7CkBAIC0yOTQ1LDE0ICszMDI0LDE0IEBACiAJICogRGVjcmVhc2UgdGhlIG51bWJlciBvZiB1cGNhc2UgdXNlcnMgYW5kIGRlc3Ryb3kgdGhlIGdsb2JhbCBkZWZhdWx0CiAJICogdXBjYXNlIHRhYmxlIGlmIG5lY2Vzc2FyeS4KIAkgKi8KLQlkb3duKCZudGZzX2xvY2spOworCW11dGV4X2xvY2soJm50ZnNfbG9jayk7CiAJaWYgKCEtLW50ZnNfbnJfdXBjYXNlX3VzZXJzICYmIGRlZmF1bHRfdXBjYXNlKSB7CiAJCW50ZnNfZnJlZShkZWZhdWx0X3VwY2FzZSk7CiAJCWRlZmF1bHRfdXBjYXNlID0gTlVMTDsKIAl9CiAJaWYgKHZvbC0+Y2x1c3Rlcl9zaXplIDw9IDQwOTYgJiYgIS0tbnRmc19ucl9jb21wcmVzc2lvbl91c2VycykKIAkJZnJlZV9jb21wcmVzc2lvbl9idWZmZXJzKCk7Ci0JdXAoJm50ZnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogaXB1dF90bXBfaW5vX2Vycl9vdXRfbm93OgogCWlwdXQodG1wX2lubyk7CiAJaWYgKHZvbC0+bWZ0X2lubyAmJiB2b2wtPm1mdF9pbm8gIT0gdG1wX2lubykKQEAgLTI5ODcsMTQgKzMwNjYsMTQgQEAKICAqIHN0cmluZ3Mgb2YgdGhlIG1heGltdW0gbGVuZ3RoIGFsbG93ZWQgYnkgTlRGUywgd2hpY2ggaXMgTlRGU19NQVhfTkFNRV9MRU4KICAqICgyNTUpIFVuaWNvZGUgY2hhcmFjdGVycyArIGEgdGVybWluYXRpbmcgTlVMTCBVbmljb2RlIGNoYXJhY3Rlci4KICAqLwota21lbV9jYWNoZV90ICpudGZzX25hbWVfY2FjaGU7CitzdHJ1Y3Qga21lbV9jYWNoZSAqbnRmc19uYW1lX2NhY2hlOwogCiAvKiBTbGFiIGNhY2hlcyBmb3IgZWZmaWNpZW50IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIG9mIGlub2Rlcy4gKi8KLWttZW1fY2FjaGVfdCAqbnRmc19pbm9kZV9jYWNoZTsKLWttZW1fY2FjaGVfdCAqbnRmc19iaWdfaW5vZGVfY2FjaGU7CitzdHJ1Y3Qga21lbV9jYWNoZSAqbnRmc19pbm9kZV9jYWNoZTsKK3N0cnVjdCBrbWVtX2NhY2hlICpudGZzX2JpZ19pbm9kZV9jYWNoZTsKIAogLyogSW5pdCBvbmNlIGNvbnN0cnVjdG9yIGZvciB0aGUgaW5vZGUgc2xhYiBjYWNoZS4gKi8KLXN0YXRpYyB2b2lkIG50ZnNfYmlnX2lub2RlX2luaXRfb25jZSh2b2lkICpmb28sIGttZW1fY2FjaGVfdCAqY2FjaGVwLAorc3RhdGljIHZvaWQgbnRmc19iaWdfaW5vZGVfaW5pdF9vbmNlKHZvaWQgKmZvbywgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKIAkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAludGZzX2lub2RlICpuaSA9IChudGZzX2lub2RlICopZm9vOwpAQCAtMzAwOCwxMSArMzA4NywxMSBAQAogICogU2xhYiBjYWNoZXMgdG8gb3B0aW1pemUgYWxsb2NhdGlvbnMgYW5kIGRlYWxsb2NhdGlvbnMgb2YgYXR0cmlidXRlIHNlYXJjaAogICogY29udGV4dHMgYW5kIGluZGV4IGNvbnRleHRzLCByZXNwZWN0aXZlbHkuCiAgKi8KLWttZW1fY2FjaGVfdCAqbnRmc19hdHRyX2N0eF9jYWNoZTsKLWttZW1fY2FjaGVfdCAqbnRmc19pbmRleF9jdHhfY2FjaGU7CitzdHJ1Y3Qga21lbV9jYWNoZSAqbnRmc19hdHRyX2N0eF9jYWNoZTsKK3N0cnVjdCBrbWVtX2NhY2hlICpudGZzX2luZGV4X2N0eF9jYWNoZTsKIAotLyogRHJpdmVyIHdpZGUgc2VtYXBob3JlLiAqLwotREVDTEFSRV9NVVRFWChudGZzX2xvY2spOworLyogRHJpdmVyIHdpZGUgbXV0ZXguICovCitERUZJTkVfTVVURVgobnRmc19sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqbnRmc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCiAJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSkKQEAgLTMwODQsNyArMzE2Myw3IEBACiAKIAludGZzX2lub2RlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUobnRmc19pbm9kZV9jYWNoZV9uYW1lLAogCQkJc2l6ZW9mKG50ZnNfaW5vZGUpLCAwLAotCQkJU0xBQl9SRUNMQUlNX0FDQ09VTlQsIE5VTEwsIE5VTEwpOworCQkJU0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9NRU1fU1BSRUFELCBOVUxMLCBOVUxMKTsKIAlpZiAoIW50ZnNfaW5vZGVfY2FjaGUpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiTlRGUzogRmFpbGVkIHRvIGNyZWF0ZSAlcyFcbiIsCiAJCQkJbnRmc19pbm9kZV9jYWNoZV9uYW1lKTsKQEAgLTMwOTMsNyArMzE3Miw3IEBACiAKIAludGZzX2JpZ19pbm9kZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKG50ZnNfYmlnX2lub2RlX2NhY2hlX25hbWUsCiAJCQlzaXplb2YoYmlnX250ZnNfaW5vZGUpLCAwLAotCQkJU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCwKIAkJCW50ZnNfYmlnX2lub2RlX2luaXRfb25jZSwgTlVMTCk7CiAJaWYgKCFudGZzX2JpZ19pbm9kZV9jYWNoZSkgewogCQlwcmludGsoS0VSTl9DUklUICJOVEZTOiBGYWlsZWQgdG8gY3JlYXRlICVzIVxuIiwKQEAgLTMxNjcsNyArMzI0Niw3IEBACiB9CiAKIE1PRFVMRV9BVVRIT1IoIkFudG9uIEFsdGFwYXJtYWtvdiA8YWlhMjFAY2FudGFiLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTlRGUyAxLjIvMy54IGRyaXZlciAtIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IEFudG9uIEFsdGFwYXJtYWtvdiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOVEZTIDEuMi8zLnggZHJpdmVyIC0gQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgQW50b24gQWx0YXBhcm1ha292Iik7CiBNT0RVTEVfVkVSU0lPTihOVEZTX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9mcy9udGZzL3VuaXN0ci5jIGIvZnMvbnRmcy91bmlzdHIuYwppbmRleCAwZWE4ODdmLi5iMTIzYzBmIDEwMDY0NAotLS0gYS9mcy9udGZzL3VuaXN0ci5jCisrKyBiL2ZzL250ZnMvdW5pc3RyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogdW5pc3RyLmMgLSBOVEZTIFVuaWNvZGUgc3RyaW5nIGhhbmRsaW5nLiBQYXJ0IG9mIHRoZSBMaW51eC1OVEZTIHByb2plY3QuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgQW50b24gQWx0YXBhcm1ha292CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBBbnRvbiBBbHRhcGFybWFrb3YKICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCkBAIC0xOSw2ICsxOSw4IEBACiAgKiBGb3VuZGF0aW9uLEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgIm50ZnMuaCIKQEAgLTI0Miw3ICsyNDQsNyBAQAogICogbWFwIGRpY3RhdGVzLCBpbnRvIGEgbGl0dGxlIGVuZGlhbiwgMi1ieXRlIFVuaWNvZGUgc3RyaW5nLgogICoKICAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBzdHJpbmcgYW5kIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCi0gKiBjYWxsaW5nIGttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIEBvdXRzKTsgd2hlbiBmaW5pc2hlZCB3aXRoIGl0LgorICogY2FsbGluZyBrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCAqQG91dHMpOyB3aGVuIGZpbmlzaGVkIHdpdGggaXQuCiAgKgogICogT24gc3VjY2VzcyB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyB3cml0dGVuIHRvCiAgKiB0aGUgb3V0cHV0IHN0cmluZyAqQG91dHMgKD49IDApLCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIFVuaWNvZGUgTlVMTApAQCAtMjYyLDM3ICsyNjQsNDggQEAKIAl3Y2hhcl90IHdjOwogCWludCBpLCBvLCB3Y19sZW47CiAKLQkvKiBXZSBkb24ndCB0cnVzdCBvdXRzaWRlIHNvdXJjZXMuICovCi0JaWYgKGlucykgeworCS8qIFdlIGRvIG5vdCB0cnVzdCBvdXRzaWRlIHNvdXJjZXMuICovCisJaWYgKGxpa2VseShpbnMpKSB7CiAJCXVjcyA9IGttZW1fY2FjaGVfYWxsb2MobnRmc19uYW1lX2NhY2hlLCBTTEFCX05PRlMpOwotCQlpZiAodWNzKSB7CisJCWlmIChsaWtlbHkodWNzKSkgewogCQkJZm9yIChpID0gbyA9IDA7IGkgPCBpbnNfbGVuOyBpICs9IHdjX2xlbikgewogCQkJCXdjX2xlbiA9IG5scy0+Y2hhcjJ1bmkoaW5zICsgaSwgaW5zX2xlbiAtIGksCiAJCQkJCQkmd2MpOwotCQkJCWlmICh3Y19sZW4gPj0gMCkgewotCQkJCQlpZiAod2MpIHsKKwkJCQlpZiAobGlrZWx5KHdjX2xlbiA+PSAwICYmCisJCQkJCQlvIDwgTlRGU19NQVhfTkFNRV9MRU4pKSB7CisJCQkJCWlmIChsaWtlbHkod2MpKSB7CiAJCQkJCQl1Y3NbbysrXSA9IGNwdV90b19sZTE2KHdjKTsKIAkJCQkJCWNvbnRpbnVlOwotCQkJCQl9IC8qIGVsc2UgKCF3YykgKi8KKwkJCQkJfSAvKiBlbHNlIGlmICghd2MpICovCiAJCQkJCWJyZWFrOwotCQkJCX0gLyogZWxzZSAod2NfbGVuIDwgMCkgKi8KLQkJCQlnb3RvIGNvbnZlcnNpb25fZXJyOworCQkJCX0gLyogZWxzZSBpZiAod2NfbGVuIDwgMCB8fAorCQkJCQkJbyA+PSBOVEZTX01BWF9OQU1FX0xFTikgKi8KKwkJCQlnb3RvIG5hbWVfZXJyOwogCQkJfQogCQkJdWNzW29dID0gMDsKIAkJCSpvdXRzID0gdWNzOwogCQkJcmV0dXJuIG87Ci0JCX0gLyogZWxzZSAoIXVjcykgKi8KLQkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG5hbWUgZnJvbSAiCi0JCQkJIm50ZnNfbmFtZV9jYWNoZSEiKTsKKwkJfSAvKiBlbHNlIGlmICghdWNzKSAqLworCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBjb252ZXJ0ZWQgIgorCQkJCSJuYW1lIGZyb20gbnRmc19uYW1lX2NhY2hlLiIpOwogCQlyZXR1cm4gLUVOT01FTTsKLQl9IC8qIGVsc2UgKCFpbnMpICovCi0JbnRmc19lcnJvcihOVUxMLCAiUmVjZWl2ZWQgTlVMTCBwb2ludGVyLiIpOworCX0gLyogZWxzZSBpZiAoIWlucykgKi8KKwludGZzX2Vycm9yKHZvbC0+c2IsICJSZWNlaXZlZCBOVUxMIHBvaW50ZXIuIik7CiAJcmV0dXJuIC1FSU5WQUw7Ci1jb252ZXJzaW9uX2VycjoKLQludGZzX2Vycm9yKHZvbC0+c2IsICJOYW1lIHVzaW5nIGNoYXJhY3RlciBzZXQgJXMgY29udGFpbnMgY2hhcmFjdGVycyAiCi0JCQkidGhhdCBjYW5ub3QgYmUgY29udmVydGVkIHRvIFVuaWNvZGUuIiwgbmxzLT5jaGFyc2V0KTsKK25hbWVfZXJyOgogCWttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVjcyk7Ci0JcmV0dXJuIC1FSUxTRVE7CisJaWYgKHdjX2xlbiA8IDApIHsKKwkJbnRmc19lcnJvcih2b2wtPnNiLCAiTmFtZSB1c2luZyBjaGFyYWN0ZXIgc2V0ICVzIGNvbnRhaW5zICIKKwkJCQkiY2hhcmFjdGVycyB0aGF0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gIgorCQkJCSJVbmljb2RlLiIsIG5scy0+Y2hhcnNldCk7CisJCWkgPSAtRUlMU0VROworCX0gZWxzZSAvKiBpZiAobyA+PSBOVEZTX01BWF9OQU1FX0xFTikgKi8geworCQludGZzX2Vycm9yKHZvbC0+c2IsICJOYW1lIGlzIHRvbyBsb25nIChtYXhpbXVtIGxlbmd0aCBmb3IgYSAiCisJCQkJIm5hbWUgb24gTlRGUyBpcyAlZCBVbmljb2RlIGNoYXJhY3RlcnMuIiwKKwkJCQlOVEZTX01BWF9OQU1FX0xFTik7CisJCWkgPSAtRU5BTUVUT09MT05HOworCX0KKwlyZXR1cm4gaTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9udGZzL3VwY2FzZS5jIGIvZnMvbnRmcy91cGNhc2UuYwppbmRleCA4NzljZGYxLi45MTAxODA3IDEwMDY0NAotLS0gYS9mcy9udGZzL3VwY2FzZS5jCisrKyBiL2ZzL250ZnMvdXBjYXNlLmMKQEAgLTMsMTAgKzMsNyBAQAogICoJICAgICAgUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMSBSaWNoYXJkIFJ1c3NvbiA8bnRmc0BmbGF0Y2FwLm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA0IEFudG9uIEFsdGFwYXJtYWtvdgotICoKLSAqIE1vZGlmaWVkIGZvciBta250ZnMgaW5jbHVzaW9uIDkgSnVuZSAyMDAxIGJ5IEFudG9uIEFsdGFwYXJtYWtvdi4KLSAqIE1vZGlmaWVkIGZvciBrZXJuZWwgaW5jbHVzaW9uIDEwIFNlcHRlbWJlciAyMDAxIGJ5IEFudG9uIEFsdHBhcm1ha292LgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgQW50b24gQWx0YXBhcm1ha292CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCkBAIC03NSwxMiArNzIsMTMgQEAKIAlpZiAoIXVjKQogCQlyZXR1cm4gdWM7CiAJbWVtc2V0KHVjLCAwLCBkZWZhdWx0X3VwY2FzZV9sZW4gKiBzaXplb2YobnRmc2NoYXIpKTsKKwkvKiBHZW5lcmF0ZSB0aGUgbGl0dGxlIGVuZGlhbiBVbmljb2RlIHVwY2FzZSB0YWJsZSB1c2VkIGJ5IG50ZnMuICovCiAJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfdXBjYXNlX2xlbjsgaSsrKQogCQl1Y1tpXSA9IGNwdV90b19sZTE2KGkpOwogCWZvciAociA9IDA7IHVjX3J1bl90YWJsZVtyXVswXTsgcisrKQogCQlmb3IgKGkgPSB1Y19ydW5fdGFibGVbcl1bMF07IGkgPCB1Y19ydW5fdGFibGVbcl1bMV07IGkrKykKLQkJCXVjW2ldID0gY3B1X3RvX2xlMTYoKGxlMTZfdG9fY3B1KHVjW2ldKSArCi0JCQkJCXVjX3J1bl90YWJsZVtyXVsyXSkpOworCQkJdWNbaV0gPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdSh1Y1tpXSkgKworCQkJCQl1Y19ydW5fdGFibGVbcl1bMl0pOwogCWZvciAociA9IDA7IHVjX2R1cF90YWJsZVtyXVswXTsgcisrKQogCQlmb3IgKGkgPSB1Y19kdXBfdGFibGVbcl1bMF07IGkgPCB1Y19kdXBfdGFibGVbcl1bMV07IGkgKz0gMikKIAkJCXVjW2kgKyAxXSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHVjW2kgKyAxXSkgLSAxKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvdm9sdW1lLmggYi9mcy9udGZzL3ZvbHVtZS5oCmluZGV4IDM3NWNkMjAuLjQwNmFiNTUgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvdm9sdW1lLmgKKysrIGIvZnMvbnRmcy92b2x1bWUuaApAQCAtMiw3ICsyLDcgQEAKICAqIHZvbHVtZS5oIC0gRGVmaW5lcyBmb3Igdm9sdW1lIHN0cnVjdHVyZXMgaW4gTlRGUyBMaW51eCBrZXJuZWwgZHJpdmVyLiBQYXJ0CiAgKgkgICAgICBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA1IEFudG9uIEFsdGFwYXJtYWtvdgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgQW50b24gQWx0YXBhcm1ha292CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgUmljaGFyZCBSdXNzb24KICAqCiAgKiBUaGlzIHByb2dyYW0vaW5jbHVkZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDEsMTAgKzQxLDggQEAKIAkgKiBzdHJ1Y3R1cmUgaGFzIHN0YWJpbGl6ZWQuLi4gKEFJQSkKIAkgKi8KIAkvKiBEZXZpY2Ugc3BlY2lmaWNzLiAqLwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CQkvKiBQb2ludGVyIGJhY2sgdG8gdGhlIHN1cGVyX2Jsb2NrLAotCQkJCQkgICBzbyB3ZSBkb24ndCBoYXZlIHRvIGdldCB0aGUgb2Zmc2V0Ci0JCQkJCSAgIGV2ZXJ5IHRpbWUuICovCi0JTENOIG5yX2Jsb2NrczsJCQkvKiBOdW1iZXIgb2YgTlRGU19CTE9DS19TSVpFIGJ5dGVzCisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsJCS8qIFBvaW50ZXIgYmFjayB0byB0aGUgc3VwZXJfYmxvY2suICovCisJTENOIG5yX2Jsb2NrczsJCQkvKiBOdW1iZXIgb2Ygc2ItPnNfYmxvY2tzaXplIGJ5dGVzCiAJCQkJCSAgIHNpemVkIGJsb2NrcyBvbiB0aGUgZGV2aWNlLiAqLwogCS8qIENvbmZpZ3VyYXRpb24gcHJvdmlkZWQgYnkgdXNlciBhdCBtb3VudCB0aW1lLiAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiBNaXNjZWxsYW5lb3VzIGZsYWdzLCBzZWUgYmVsb3cuICovCkBAIC0xNDEsOCArMTM5LDggQEAKIAlOVl9TaG93U3lzdGVtRmlsZXMsCS8qIDE6IFJldHVybiBzeXN0ZW0gZmlsZXMgaW4gbnRmc19yZWFkZGlyKCkuICovCiAJTlZfQ2FzZVNlbnNpdGl2ZSwJLyogMTogVHJlYXQgZmlsZSBuYW1lcyBhcyBjYXNlIHNlbnNpdGl2ZSBhbmQKIAkJCQkgICAgICBjcmVhdGUgZmlsZW5hbWVzIGluIHRoZSBQT1NJWCBuYW1lc3BhY2UuCi0JCQkJICAgICAgT3RoZXJ3aXNlIGJlIGNhc2UgaW5zZW5zaXRpdmUgYW5kIGNyZWF0ZQotCQkJCSAgICAgIGZpbGUgbmFtZXMgaW4gV0lOMzIgbmFtZXNwYWNlLiAqLworCQkJCSAgICAgIE90aGVyd2lzZSBiZSBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBzdGlsbAorCQkJCSAgICAgIGNyZWF0ZSBmaWxlIG5hbWVzIGluIFBPU0lYIG5hbWVzcGFjZS4gKi8KIAlOVl9Mb2dGaWxlRW1wdHksCS8qIDE6ICRMb2dGaWxlIGpvdXJuYWwgaXMgZW1wdHkuICovCiAJTlZfUXVvdGFPdXRPZkRhdGUsCS8qIDE6ICRRdW90YSBpcyBvdXQgb2YgZGF0ZS4gKi8KIAlOVl9Vc25Kcm5sU3RhbXBlZCwJLyogMTogJFVzbkpybmwgaGFzIGJlZW4gc3RhbXBlZC4gKi8KQEAgLTE1Myw3ICsxNTEsNyBAQAogICogTWFjcm8gdHJpY2tzIHRvIGV4cGFuZCB0aGUgTlZvbEZvbygpLCBOVm9sU2V0Rm9vKCksIGFuZCBOVm9sQ2xlYXJGb28oKQogICogZnVuY3Rpb25zLgogICovCi0jZGVmaW5lIE5WT0xfRk5TKGZsYWcpCQkJCQlcCisjZGVmaW5lIERFRklORV9OVk9MX0JJVF9PUFMoZmxhZykJCQkJCVwKIHN0YXRpYyBpbmxpbmUgaW50IE5Wb2wjI2ZsYWcobnRmc192b2x1bWUgKnZvbCkJCVwKIHsJCQkJCQkJXAogCXJldHVybiB0ZXN0X2JpdChOVl8jI2ZsYWcsICYodm9sKS0+ZmxhZ3MpOwlcCkBAIC0xNjgsMTIgKzE2NiwxMiBAQAogfQogCiAvKiBFbWl0IHRoZSBudGZzIHZvbHVtZSBiaXRvcHMgZnVuY3Rpb25zLiAqLwotTlZPTF9GTlMoRXJyb3JzKQotTlZPTF9GTlMoU2hvd1N5c3RlbUZpbGVzKQotTlZPTF9GTlMoQ2FzZVNlbnNpdGl2ZSkKLU5WT0xfRk5TKExvZ0ZpbGVFbXB0eSkKLU5WT0xfRk5TKFF1b3RhT3V0T2ZEYXRlKQotTlZPTF9GTlMoVXNuSnJubFN0YW1wZWQpCi1OVk9MX0ZOUyhTcGFyc2VFbmFibGVkKQorREVGSU5FX05WT0xfQklUX09QUyhFcnJvcnMpCitERUZJTkVfTlZPTF9CSVRfT1BTKFNob3dTeXN0ZW1GaWxlcykKK0RFRklORV9OVk9MX0JJVF9PUFMoQ2FzZVNlbnNpdGl2ZSkKK0RFRklORV9OVk9MX0JJVF9PUFMoTG9nRmlsZUVtcHR5KQorREVGSU5FX05WT0xfQklUX09QUyhRdW90YU91dE9mRGF0ZSkKK0RFRklORV9OVk9MX0JJVF9PUFMoVXNuSnJubFN0YW1wZWQpCitERUZJTkVfTlZPTF9CSVRfT1BTKFNwYXJzZUVuYWJsZWQpCiAKICNlbmRpZiAvKiBfTElOVVhfTlRGU19WT0xVTUVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYwppbmRleCBmZDc0MWNlLi42MzY1OTNiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuYwpAQCAtNzQsNiArNzQsNyBAQAogI2RlZmluZSBkZWZpbmVfbWFzayhfbmFtZSkgewkJCVwKIAkuYXR0ciA9IHsJCQkJXAogCQkubmFtZSA9ICNfbmFtZSwJCQlcCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAkJXAogCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAlcCiAJfSwJCQkJCVwKIAkubWFzayA9IE1MXyMjX25hbWUsCQkJXApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmggYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAppbmRleCBlOGM1NmEzLi4yY2FkYzMwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaApAQCAtMjU2LDcgKzI1Niw3IEBACiAJfQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2lmIChCSVRTX1BFUl9MT05HID09IDMyKSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjaWYgKEJJVFNfUEVSX0xPTkcgPT0gMzIpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgKGRlZmluZWQoQ09ORklHX1VNTF9YODYpICYmIGRlZmluZWQoQ09ORklHXzY0QklUKSkKICNkZWZpbmUgTUxGaTY0ICJsbGQiCiAjZGVmaW5lIE1MRnU2NCAibGx1IgogI2RlZmluZSBNTEZ4NjQgImxseCIKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYwppbmRleCBjZjc4MjhmLi5lMWZjZWI4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCkBAIC03NTYsNyArNzU2LDcgQEAKIAlpZiAoIW9jZnMyX3RhYmxlX2hlYWRlcikgewogCQlwcmludGsoS0VSTl9FUlIgIm5vZGVtYW5hZ2VyOiB1bmFibGUgdG8gcmVnaXN0ZXIgc3lzY3RsXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsgLyogb3Igc29tZXRoaW5nLiAqLwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfbzJuZXQ7CiAJfQogCiAJcmV0ID0gbzJuZXRfcmVnaXN0ZXJfaGJfY2FsbGJhY2tzKCk7CkBAIC03ODAsNiArNzgwLDggQEAKIAlvMm5ldF91bnJlZ2lzdGVyX2hiX2NhbGxiYWNrcygpOwogb3V0X3N5c2N0bDoKIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShvY2ZzMl90YWJsZV9oZWFkZXIpOworb3V0X28ybmV0OgorCW8ybmV0X2V4aXQoKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci90Y3AuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKaW5kZXggZDIyZDRjZi4uMGY2MGNjMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci90Y3AuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogewogCXN0cnVjdCBvMm5ldF9ub2RlICpubiA9IGFyZzsKIAlzdHJ1Y3QgbzJuZXRfc29ja19jb250YWluZXIgKnNjID0gTlVMTDsKLQlzdHJ1Y3QgbzJubV9ub2RlICpub2RlID0gTlVMTDsKKwlzdHJ1Y3QgbzJubV9ub2RlICpub2RlID0gTlVMTCwgKm15bm9kZSA9IE5VTEw7CiAJc3RydWN0IHNvY2tldCAqc29jayA9IE5VTEw7CiAJc3RydWN0IHNvY2thZGRyX2luIG15YWRkciA9IHswLCB9LCByZW1vdGVhZGRyID0gezAsIH07CiAJaW50IHJldCA9IDA7CkBAIC0xMzM0LDYgKzEzMzQsMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJbXlub2RlID0gbzJubV9nZXRfbm9kZV9ieV9udW0obzJubV90aGlzX25vZGUoKSk7CisJaWYgKG15bm9kZSA9PSBOVUxMKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKwogCXNwaW5fbG9jaygmbm4tPm5uX2xvY2spOwogCS8qIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lIHBlbmRpbmcgb3IgaGF2ZSBnaXZlbiB1cCAqLwogCWlmIChubi0+bm5fc2MgfHwgbm4tPm5uX3BlcnNpc3RlbnRfZXJyb3IpCkBAIC0xMzYxLDEyICsxMzY3LDE0IEBACiAJc29jay0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwogCiAJbXlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCW15YWRkci5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpbXlub2RlLT5uZF9pcHY0X2FkZHJlc3M7CiAJbXlhZGRyLnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKDApOyAvKiBhbnkgcG9ydCAqLwogCiAJcmV0ID0gc29jay0+b3BzLT5iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyLAogCQkJICAgICAgc2l6ZW9mKG15YWRkcikpOwogCWlmIChyZXQpIHsKLQkJbWxvZygwLCAiYmluZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQltbG9nKE1MX0VSUk9SLCAiYmluZCBmYWlsZWQgd2l0aCAlZCBhdCBhZGRyZXNzICV1LiV1LiV1LiV1XG4iLAorCQkgICAgIHJldCwgTklQUVVBRChteW5vZGUtPm5kX2lwdjRfYWRkcmVzcykpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE0MDcsNiArMTQxNSw4IEBACiAJCXNjX3B1dChzYyk7CiAJaWYgKG5vZGUpCiAJCW8ybm1fbm9kZV9wdXQobm9kZSk7CisJaWYgKG15bm9kZSkKKwkJbzJubV9ub2RlX3B1dChteW5vZGUpOwogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci90Y3AuaCBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmgKaW5kZXggYTZmNDU4NS4uNjE2ZmYyYiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci90Y3AuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5oCkBAIC04NSwxMyArODUsMTAgQEAKIAlPMk5FVF9EUklWRVJfUkVBRFksCiB9OwogCi1pbnQgbzJuZXRfaW5pdF90Y3Bfc29jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBvMm5ldF9zZW5kX21lc3NhZ2UodTMyIG1zZ190eXBlLCB1MzIga2V5LCB2b2lkICpkYXRhLCB1MzIgbGVuLAogCQkgICAgICAgdTggdGFyZ2V0X25vZGUsIGludCAqc3RhdHVzKTsKIGludCBvMm5ldF9zZW5kX21lc3NhZ2VfdmVjKHUzMiBtc2dfdHlwZSwgdTMyIGtleSwgc3RydWN0IGt2ZWMgKnZlYywKIAkJCSAgIHNpemVfdCB2ZWNsZW4sIHU4IHRhcmdldF9ub2RlLCBpbnQgKnN0YXR1cyk7Ci1pbnQgbzJuZXRfYnJvYWRjYXN0X21lc3NhZ2UodTMyIG1zZ190eXBlLCB1MzIga2V5LCB2b2lkICpkYXRhLCB1MzIgbGVuLAotCQkJICAgIHN0cnVjdCBpbm9kZSAqZ3JvdXApOwogCiBpbnQgbzJuZXRfcmVnaXN0ZXJfaGFuZGxlcih1MzIgbXNnX3R5cGUsIHUzMiBrZXksIHUzMiBtYXhfbGVuLAogCQkJICAgbzJuZXRfbXNnX2hhbmRsZXJfZnVuYyAqZnVuYywgdm9pZCAqZGF0YSwKQEAgLTEwNyw3ICsxMDQsNSBAQAogCiBpbnQgbzJuZXRfaW5pdCh2b2lkKTsKIHZvaWQgbzJuZXRfZXhpdCh2b2lkKTsKLWludCBvMm5ldF9wcm9jX2luaXQoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpOwotdm9pZCBvMm5ldF9wcm9jX2V4aXQoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpOwogCiAjZW5kaWYgLyogTzJDTFVTVEVSX1RDUF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmggYi9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmgKaW5kZXggMjNjZWFhNy4uOWM3NzI1OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1jb21tb24uaApAQCAtMzcsOSArMzcsNyBAQAogI2RlZmluZSBETE1fVEhSRUFEX1NIVUZGTEVfSU5URVJWQUwgICAgNSAgICAgLy8gZmx1c2ggZXZlcnl0aGluZyBldmVyeSA1IHBhc3NlcwogI2RlZmluZSBETE1fVEhSRUFEX01TICAgICAgICAgICAgICAgICAgMjAwICAgLy8gZmx1c2ggYXQgbGVhc3QgZXZlcnkgMjAwIG1zCiAKLSNkZWZpbmUgRExNX0hBU0hfQklUUyAgICAgNwotI2RlZmluZSBETE1fSEFTSF9TSVpFICAgICAoMSA8PCBETE1fSEFTSF9CSVRTKQotI2RlZmluZSBETE1fSEFTSF9NQVNLICAgICAoRExNX0hBU0hfU0laRSAtIDEpCisjZGVmaW5lIERMTV9IQVNIX0JVQ0tFVFMgICAgIChQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKQogCiBlbnVtIGRsbV9hc3RfdHlwZSB7CiAJRExNX0FTVCA9IDAsCkBAIC04Nyw3ICs4NSw3IEBACiBzdHJ1Y3QgZGxtX2N0eHQKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcmVzb3VyY2VzOworCXN0cnVjdCBobGlzdF9oZWFkICpsb2NrcmVzX2hhc2g7CiAJc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgcHVyZ2VfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfYXN0czsKQEAgLTIxNyw3ICsyMTUsNyBAQAogewogCS8qIFdBUk5JTkc6IFBsZWFzZSBzZWUgdGhlIGNvbW1lbnQgaW4gZGxtX2luaXRfbG9ja3JlcyBiZWZvcmUKIAkgKiBhZGRpbmcgZmllbGRzIGhlcmUuICovCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlIGhhc2hfbm9kZTsKIAlzdHJ1Y3Qga3JlZiAgICAgIHJlZnM7CiAKIAkvKiBwbGVhc2Uga2VlcCB0aGVzZSBuZXh0IDMgaW4gdGhpcyBvcmRlcgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwppbmRleCBmMzM5ZmUyNy4uNTRmNjFiNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKQEAgLTExNyw4ICsxMTcsOCBAQAogdm9pZCBkbG1fZHVtcF9sb2NrX3Jlc291cmNlcyhzdHJ1Y3QgZGxtX2N0eHQgKmRsbSkKIHsKIAlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwotCXN0cnVjdCBsaXN0X2hlYWQgKmJ1Y2tldDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaXRlcjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwogCWludCBpOwogCiAJbWxvZyhNTF9OT1RJQ0UsICJzdHJ1Y3QgZGxtX2N0eHQ6ICVzLCBub2RlPSV1LCBrZXk9JXVcbiIsCkBAIC0xMjksMTIgKzEyOSwxMCBAQAogCX0KIAogCXNwaW5fbG9jaygmZGxtLT5zcGlubG9jayk7Ci0JZm9yIChpPTA7IGk8RExNX0hBU0hfU0laRTsgaSsrKSB7Ci0JCWJ1Y2tldCA9ICYoZGxtLT5yZXNvdXJjZXNbaV0pOwotCQlsaXN0X2Zvcl9lYWNoKGl0ZXIsIGJ1Y2tldCkgewotCQkJcmVzID0gbGlzdF9lbnRyeShpdGVyLCBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UsIGxpc3QpOworCWZvciAoaT0wOyBpPERMTV9IQVNIX0JVQ0tFVFM7IGkrKykgeworCQlidWNrZXQgPSAmKGRsbS0+bG9ja3Jlc19oYXNoW2ldKTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCBpdGVyLCBidWNrZXQsIGhhc2hfbm9kZSkKIAkJCWRsbV9wcmludF9vbmVfbG9ja19yZXNvdXJjZShyZXMpOwotCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCA2ZWUzMDgzLi44ZjNhOWUzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC03NywyNiArNzcsMjYgQEAKIAogdm9pZCBfX2RsbV91bmhhc2hfbG9ja3JlcyhzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKmxvY2tyZXMpCiB7Ci0JbGlzdF9kZWxfaW5pdCgmbG9ja3Jlcy0+bGlzdCk7CisJaGxpc3RfZGVsX2luaXQoJmxvY2tyZXMtPmhhc2hfbm9kZSk7CiAJZGxtX2xvY2tyZXNfcHV0KGxvY2tyZXMpOwogfQogCiB2b2lkIF9fZGxtX2luc2VydF9sb2NrcmVzKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAogCQkgICAgICAgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqYnVja2V0OworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CiAJc3RydWN0IHFzdHIgKnE7CiAKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+c3BpbmxvY2spOwogCiAJcSA9ICZyZXMtPmxvY2tuYW1lOwogCXEtPmhhc2ggPSBmdWxsX25hbWVfaGFzaChxLT5uYW1lLCBxLT5sZW4pOwotCWJ1Y2tldCA9ICYoZGxtLT5yZXNvdXJjZXNbcS0+aGFzaCAmIERMTV9IQVNIX01BU0tdKTsKKwlidWNrZXQgPSAmKGRsbS0+bG9ja3Jlc19oYXNoW3EtPmhhc2ggJSBETE1fSEFTSF9CVUNLRVRTXSk7CiAKIAkvKiBnZXQgYSByZWZlcmVuY2UgZm9yIG91ciBoYXNodGFibGUgKi8KIAlkbG1fbG9ja3Jlc19nZXQocmVzKTsKIAotCWxpc3RfYWRkX3RhaWwoJnJlcy0+bGlzdCwgYnVja2V0KTsKKwlobGlzdF9hZGRfaGVhZCgmcmVzLT5oYXNoX25vZGUsIGJ1Y2tldCk7CiB9CiAKIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqIF9fZGxtX2xvb2t1cF9sb2NrcmVzKHN0cnVjdCBkbG1fY3R4dCAqZGxtLApAQCAtMTA0LDkgKzEwNCw5IEBACiAJCQkJCSB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGludCBoYXNoOwotCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CisJc3RydWN0IGhsaXN0X25vZGUgKml0ZXI7CiAJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICp0bXByZXM9TlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpidWNrZXQ7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKIAogCW1sb2dfZW50cnkoIiUuKnNcbiIsIGxlbiwgbmFtZSk7CiAKQEAgLTExNCwxMSArMTE0LDExIEBACiAKIAloYXNoID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgbGVuKTsKIAotCWJ1Y2tldCA9ICYoZGxtLT5yZXNvdXJjZXNbaGFzaCAmIERMTV9IQVNIX01BU0tdKTsKKwlidWNrZXQgPSAmKGRsbS0+bG9ja3Jlc19oYXNoW2hhc2ggJSBETE1fSEFTSF9CVUNLRVRTXSk7CiAKIAkvKiBjaGVjayBmb3IgcHJlLWV4aXN0aW5nIGxvY2sgKi8KLQlsaXN0X2Zvcl9lYWNoKGl0ZXIsIGJ1Y2tldCkgewotCQl0bXByZXMgPSBsaXN0X2VudHJ5KGl0ZXIsIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSwgbGlzdCk7CisJaGxpc3RfZm9yX2VhY2goaXRlciwgYnVja2V0KSB7CisJCXRtcHJlcyA9IGhsaXN0X2VudHJ5KGl0ZXIsIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSwgaGFzaF9ub2RlKTsKIAkJaWYgKHRtcHJlcy0+bG9ja25hbWUubGVuID09IGxlbiAmJgogCQkgICAgbWVtY21wKHRtcHJlcy0+bG9ja25hbWUubmFtZSwgbmFtZSwgbGVuKSA9PSAwKSB7CiAJCQlkbG1fbG9ja3Jlc19nZXQodG1wcmVzKTsKQEAgLTE5Myw4ICsxOTMsOCBAQAogCiBzdGF0aWMgdm9pZCBkbG1fZnJlZV9jdHh0X21lbShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSkKIHsKLQlpZiAoZGxtLT5yZXNvdXJjZXMpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgZGxtLT5yZXNvdXJjZXMpOworCWlmIChkbG0tPmxvY2tyZXNfaGFzaCkKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBkbG0tPmxvY2tyZXNfaGFzaCk7CiAKIAlpZiAoZGxtLT5uYW1lKQogCQlrZnJlZShkbG0tPm5hbWUpOwpAQCAtMzAzLDEwICszMDMsMTAgQEAKIAltbG9nKDAsICJNaWdyYXRpbmcgbG9ja3MgZnJvbSBkb21haW4gJXNcbiIsIGRsbS0+bmFtZSk7CiByZXN0YXJ0OgogCXNwaW5fbG9jaygmZGxtLT5zcGlubG9jayk7Ci0JZm9yIChpPTA7IGk8RExNX0hBU0hfU0laRTsgaSsrKSB7Ci0JCXdoaWxlICghbGlzdF9lbXB0eSgmZGxtLT5yZXNvdXJjZXNbaV0pKSB7Ci0JCQlyZXMgPSBsaXN0X2VudHJ5KGRsbS0+cmVzb3VyY2VzW2ldLm5leHQsCi0JCQkJICAgICBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UsIGxpc3QpOworCWZvciAoaSA9IDA7IGkgPCBETE1fSEFTSF9CVUNLRVRTOyBpKyspIHsKKwkJd2hpbGUgKCFobGlzdF9lbXB0eSgmZGxtLT5sb2NrcmVzX2hhc2hbaV0pKSB7CisJCQlyZXMgPSBobGlzdF9lbnRyeShkbG0tPmxvY2tyZXNfaGFzaFtpXS5maXJzdCwKKwkJCQkJICBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UsIGhhc2hfbm9kZSk7CiAJCQkvKiBuZWVkIHJlZmVyZW5jZSB3aGVuIG1hbnVhbGx5IGdyYWJiaW5nIGxvY2tyZXMgKi8KIAkJCWRsbV9sb2NrcmVzX2dldChyZXMpOwogCQkJLyogdGhpcyBzaG91bGQgdW5oYXNoIHRoZSBsb2NrcmVzCkBAIC0xMTkxLDE4ICsxMTkxLDE3IEBACiAJCWdvdG8gbGVhdmU7CiAJfQogCi0JZGxtLT5yZXNvdXJjZXMgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkbG0tPnJlc291cmNlcykgeworCWRsbS0+bG9ja3Jlc19oYXNoID0gKHN0cnVjdCBobGlzdF9oZWFkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWRsbS0+bG9ja3Jlc19oYXNoKSB7CiAJCW1sb2dfZXJybm8oLUVOT01FTSk7CiAJCWtmcmVlKGRsbS0+bmFtZSk7CiAJCWtmcmVlKGRsbSk7CiAJCWRsbSA9IE5VTEw7CiAJCWdvdG8gbGVhdmU7CiAJfQotCW1lbXNldChkbG0tPnJlc291cmNlcywgMCwgUEFHRV9TSVpFKTsKIAotCWZvciAoaT0wOyBpPERMTV9IQVNIX1NJWkU7IGkrKykKLQkJSU5JVF9MSVNUX0hFQUQoJmRsbS0+cmVzb3VyY2VzW2ldKTsKKwlmb3IgKGk9MDsgaTxETE1fSEFTSF9CVUNLRVRTOyBpKyspCisJCUlOSVRfSExJU1RfSEVBRCgmZGxtLT5sb2NrcmVzX2hhc2hbaV0pOwogCiAJc3RyY3B5KGRsbS0+bmFtZSwgZG9tYWluKTsKIAlkbG0tPmtleSA9IGtleTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1mcy5jIGIvZnMvb2NmczIvZGxtL2RsbWZzLmMKaW5kZXggZGQyZDI0ZC4uN2U4OGUyNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWZzLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWZzLmMKQEAgLTU5Niw3ICs1OTYsOCBAQAogCiAJZGxtZnNfaW5vZGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZGxtZnNfaW5vZGVfY2FjaGUiLAogCQkJCXNpemVvZihzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSksCi0JCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCTAsIChTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJZGxtZnNfaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAoIWRsbWZzX2lub2RlX2NhY2hlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwppbmRleCAyZTJlOTVlLi44NDdkZDNjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCkBAIC01NjQsNyArNTY0LDcgQEAKIAogCS8qIEJ5IHRoZSB0aW1lIHdlJ3JlIHJlYWR5IHRvIGJsb3cgdGhpcyBndXkgYXdheSwgd2Ugc2hvdWxkbid0CiAJICogYmUgb24gYW55IGxpc3RzLiAqLwotCUJVR19PTighbGlzdF9lbXB0eSgmcmVzLT5saXN0KSk7CisJQlVHX09OKCFobGlzdF91bmhhc2hlZCgmcmVzLT5oYXNoX25vZGUpKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJnJlcy0+Z3JhbnRlZCkpOwogCUJVR19PTighbGlzdF9lbXB0eSgmcmVzLT5jb252ZXJ0aW5nKSk7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZyZXMtPmJsb2NrZWQpKTsKQEAgLTYwNSw3ICs2MDUsNyBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcmVzLT53cSk7CiAJc3Bpbl9sb2NrX2luaXQoJnJlcy0+c3BpbmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZyZXMtPmxpc3QpOworCUlOSVRfSExJU1RfTk9ERSgmcmVzLT5oYXNoX25vZGUpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPmdyYW50ZWQpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPmNvbnZlcnRpbmcpOwogCUlOSVRfTElTVF9IRUFEKCZyZXMtPmJsb2NrZWQpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCBlZDc2YmRhLi4xZTIzMjAwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtMTY5Myw3ICsxNjkzLDEwIEBACiAJCQkJCSAgICAgIHU4IGRlYWRfbm9kZSwgdTggbmV3X21hc3RlcikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyLCAqaXRlcjIsICpidWNrZXQ7CisJc3RydWN0IGxpc3RfaGVhZCAqaXRlciwgKml0ZXIyOworCXN0cnVjdCBobGlzdF9ub2RlICpoYXNoX2l0ZXI7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKwogCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CkBAIC0xNzE3LDEwICsxNzIwLDkgQEAKIAkgKiBmb3Igbm93IHdlIG5lZWQgdG8gcnVuIHRoZSB3aG9sZSBoYXNoLCBjbGVhcgogCSAqIHRoZSBSRUNPVkVSSU5HIHN0YXRlIGFuZCBzZXQgdGhlIG93bmVyCiAJICogaWYgbmVjZXNzYXJ5ICovCi0JZm9yIChpPTA7IGk8RExNX0hBU0hfU0laRTsgaSsrKSB7Ci0JCWJ1Y2tldCA9ICYoZGxtLT5yZXNvdXJjZXNbaV0pOwotCQlsaXN0X2Zvcl9lYWNoKGl0ZXIsIGJ1Y2tldCkgewotCQkJcmVzID0gbGlzdF9lbnRyeSAoaXRlciwgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlLCBsaXN0KTsKKwlmb3IgKGkgPSAwOyBpIDwgRExNX0hBU0hfQlVDS0VUUzsgaSsrKSB7CisJCWJ1Y2tldCA9ICYoZGxtLT5sb2NrcmVzX2hhc2hbaV0pOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShyZXMsIGhhc2hfaXRlciwgYnVja2V0LCBoYXNoX25vZGUpIHsKIAkJCWlmIChyZXMtPnN0YXRlICYgRExNX0xPQ0tfUkVTX1JFQ09WRVJJTkcpIHsKIAkJCQlpZiAocmVzLT5vd25lciA9PSBkZWFkX25vZGUpIHsKIAkJCQkJbWxvZygwLCAiKHRoaXM9JXUpIHJlcyAlLipzIG93bmVyPSV1ICIKQEAgLTE4NTIsMTAgKzE4NTQsMTAgQEAKIAogc3RhdGljIHZvaWQgZGxtX2RvX2xvY2FsX3JlY292ZXJ5X2NsZWFudXAoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHU4IGRlYWRfbm9kZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOworCXN0cnVjdCBobGlzdF9ub2RlICppdGVyOwogCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwogCWludCBpOwotCXN0cnVjdCBsaXN0X2hlYWQgKmJ1Y2tldDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwogCXN0cnVjdCBkbG1fbG9jayAqbG9jazsKIAogCkBAIC0xODc2LDEwICsxODc4LDkgQEAKIAkgKiAgICBjYW4gYmUga2lja2VkIGFnYWluIHRvIHNlZSBpZiBhbnkgQVNUcyBvciBCQVNUcwogCSAqICAgIG5lZWQgdG8gYmUgZmlyZWQgYXMgYSByZXN1bHQuCiAJICovCi0JZm9yIChpPTA7IGk8RExNX0hBU0hfU0laRTsgaSsrKSB7Ci0JCWJ1Y2tldCA9ICYoZGxtLT5yZXNvdXJjZXNbaV0pOwotCQlsaXN0X2Zvcl9lYWNoKGl0ZXIsIGJ1Y2tldCkgewotCQkJcmVzID0gbGlzdF9lbnRyeSAoaXRlciwgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlLCBsaXN0KTsKKwlmb3IgKGkgPSAwOyBpIDwgRExNX0hBU0hfQlVDS0VUUzsgaSsrKSB7CisJCWJ1Y2tldCA9ICYoZGxtLT5sb2NrcmVzX2hhc2hbaV0pOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShyZXMsIGl0ZXIsIGJ1Y2tldCwgaGFzaF9ub2RlKSB7CiAgCQkJLyogYWx3YXlzIHBydW5lIGFueSAkUkVDT1ZFUlkgZW50cmllcyBmb3IgZGVhZCBub2RlcywKICAJCQkgKiBvdGhlcndpc2UgaGFuZ3MgY2FuIG9jY3VyIGR1cmluZyBsYXRlciByZWNvdmVyeSAqLwogCQkJaWYgKGRsbV9pc19yZWNvdmVyeV9sb2NrKHJlcy0+bG9ja25hbWUubmFtZSwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYyBiL2ZzL29jZnMyL2V4dGVudF9tYXAuYwppbmRleCBiNmJhMjkyLi5lNmYyMDdlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKKysrIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCkBAIC0xODEsNiArMTgxLDEyIEBACiAJCQlyZXQgPSAtRUJBRFI7CiAJCQlpZiAocmVjX2VuZCA+IE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycykgewogCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkJICAgICJFeHRlbnQgJWQgYXQgZV9ibGtubyAlIk1MRnU2NCIgb2YgaW5vZGUgJSJNTEZ1NjQiIGdvZXMgcGFzdCBpcF9jbHVzdGVycyBvZiAldVxuIiwKKwkJCQkJICAgIGksCisJCQkJCSAgICBsZTY0X3RvX2NwdShyZWMtPmVfYmxrbm8pLAorCQkJCQkgICAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJCQkgICAgT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKTsKIAkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQogCkBAIC0yMjYsNiArMjMyLDEyIEBACiAJCQlyZXQgPSAtRUJBRFI7CiAJCQlpZiAoYmxrbm8pIHsKIAkJCQltbG9nX2Vycm5vKHJldCk7CisJCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCisJCQkJCSAgICAiTXVsdGlwbGUgZXh0ZW50cyBmb3IgKGNwb3MgPSAldSwgY2x1c3RlcnMgPSAldSkgb24gaW5vZGUgJSJNTEZ1NjQiOyBlX2Jsa25vICUiTUxGdTY0IiBhbmQgcmVjICVkIGF0IGVfYmxrbm8gJSJNTEZ1NjQiXG4iLAorCQkJCQkgICAgY3BvcywgY2x1c3RlcnMsCisJCQkJCSAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCisJCQkJCSAgICBibGtubywgaSwKKwkJCQkJICAgIGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubykpOwogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CiAKQEAgLTIzOCw2ICsyNTAsMTAgQEAKIAkJICovCiAJCXJldCA9IC1FQkFEUjsKIAkJaWYgKCFibGtubykgeworCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCisJCQkJICAgICJObyByZWNvcmQgZm91bmQgZm9yIChjcG9zID0gJXUsIGNsdXN0ZXJzID0gJXUpIG9uIGlub2RlICUiTUxGdTY0IlxuIiwKKwkJCQkgICAgY3BvcywgY2x1c3RlcnMsCisJCQkJICAgIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CkBAIC0yNjYsNiArMjgyLDIwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYyk7IGkrKykgewogCQlyZWMgPSAmZWwtPmxfcmVjc1tpXTsKKworCQlpZiAoKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSArIGxlMzJfdG9fY3B1KHJlYy0+ZV9jbHVzdGVycykpID4KKwkJICAgIE9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycykgeworCQkJcmV0ID0gLUVCQURSOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCisJCQkJICAgICJFeHRlbnQgJWQgYXQgZV9ibGtubyAlIk1MRnU2NCIgb2YgaW5vZGUgJSJNTEZ1NjQiIGdvZXMgcGFzdCBpcF9jbHVzdGVycyBvZiAldVxuIiwKKwkJCQkgICAgaSwKKwkJCQkgICAgbGU2NF90b19jcHUocmVjLT5lX2Jsa25vKSwKKwkJCQkgICAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAorCQkJCSAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCXJldCA9IG9jZnMyX2V4dGVudF9tYXBfaW5zZXJ0KGlub2RlLCByZWMsCiAJCQkJCSAgICAgIGxlMTZfdG9fY3B1KGVsLT5sX3RyZWVfZGVwdGgpKTsKIAkJaWYgKHJldCkgewpAQCAtNTI2LDYgKzU1NiwxMCBAQAogCQkgICAgT0NGUzJfSShpbm9kZSktPmlwX21hcC5lbV9jbHVzdGVycykgewogCQkJcmV0ID0gLUVCQURSOwogCQkJbWxvZ19lcnJubyhyZXQpOworCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCisJCQkJICAgICJaZXJvIGVfY2x1c3RlcnMgb24gbm9uLXRhaWwgZXh0ZW50IHJlY29yZCBhdCBlX2Jsa25vICUiTUxGdTY0IiBvbiBpbm9kZSAlIk1MRnU2NCJcbiIsCisJCQkJICAgIGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyksCisJCQkJICAgIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKQEAgLTU4OCwxMiArNjIyLDEyIEBACiAgKiBFeGlzdGluZyByZWNvcmQgaW4gdGhlIGV4dGVudCBtYXA6CiAgKgogICoJY3BvcyA9IDEwLCBsZW4gPSAxMAotICogCXwtLS0tLS0tLS18CisgKgl8LS0tLS0tLS0tfAogICoKICAqIE5ldyBSZWNvcmQ6CiAgKgogICoJY3BvcyA9IDEwLCBsZW4gPSAyMAotICogCXwtLS0tLS0tLS0tLS0tLS0tLS18CisgKgl8LS0tLS0tLS0tLS0tLS0tLS0tfAogICoKICAqIFRoZSBwYXNzZWQgcmVjb3JkIGlzIHRoZSBuZXcgb24tZGlzayByZWNvcmQuICBUaGUgbmV3X2NsdXN0ZXJzIHZhbHVlCiAgKiBpcyBob3cgbWFueSBjbHVzdGVycyB3ZXJlIGFkZGVkIHRvIHRoZSBmaWxlLiAgSWYgdGhlIGFwcGVuZCBpcyBhCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggMTcxNWJjOS4uOGE0MDQ4YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtOTMzLDkgKzkzMyw2IEBACiAJc3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlsb2ZmX3QgbmV3c2l6ZSwgc2F2ZWRfcG9zOwotI2lmZGVmIE9DRlMyX09SQUNPUkVfV09SS0FST1VORFMKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKLSNlbmRpZgogCiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICV1LCAnJS4qcycpXG4iLCBmaWxwLCBidWYsCiAJCSAgICh1bnNpZ25lZCBpbnQpY291bnQsCkBAIC05NTEsMTQgKzk0OCw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotI2lmZGVmIE9DRlMyX09SQUNPUkVfV09SS0FST1VORFMKLQkvKiB1Z2gsIHdvcmsgYXJvdW5kIHNvbWUgYXBwbGljYXRpb25zIHdoaWNoIG9wZW4gZXZlcnl0aGluZyBPX0RJUkVDVCArCi0JICogT19BUFBFTkQgYW5kIHJlYWxseSBkb24ndCBtZWFuIHRvIHVzZSBPX0RJUkVDVC4gKi8KLQlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX0NPTVBBVF9PQ0ZTICYmCi0JICAgIChmaWxwLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmIChmaWxwLT5mX2ZsYWdzICYgT19ESVJFQ1QpKSAKLQkJZmlscC0+Zl9mbGFncyAmPSB+T19ESVJFQ1Q7Ci0jZW5kaWYKLQogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkvKiB0byBtYXRjaCBzZXRhdHRyJ3MgaV9tdXRleCAtPiBpX2FsbG9jX3NlbSAtPiByd19sb2NrIG9yZGVyaW5nICovCiAJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCkgewpAQCAtMTA3OSwyNyArMTA2OCw3IEBACiAJLyogY29tbXVuaWNhdGUgd2l0aCBvY2ZzMl9kaW9fZW5kX2lvICovCiAJb2NmczJfaW9jYl9zZXRfcndfbG9ja2VkKGlvY2IpOwogCi0jaWZkZWYgT0NGUzJfT1JBQ09SRV9XT1JLQVJPVU5EUwotCWlmIChvc2ItPnNfbW91bnRfb3B0ICYgT0NGUzJfTU9VTlRfQ09NUEFUX09DRlMgJiYKLQkgICAgZmlscC0+Zl9mbGFncyAmIE9fRElSRUNUKSB7Ci0JCXVuc2lnbmVkIGludCBzYXZlZF9mbGFncyA9IGZpbHAtPmZfZmxhZ3M7Ci0JCWludCBzZWN0b3Jfc2l6ZSA9IDEgPDwgb3NiLT5zX3NlY3RzaXplX2JpdHM7Ci0KLQkJaWYgKChzYXZlZF9wb3MgJiAoc2VjdG9yX3NpemUgLSAxKSkgfHwKLQkJICAgIChjb3VudCAmIChzZWN0b3Jfc2l6ZSAtIDEpKSB8fAotCQkgICAgKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIChzZWN0b3Jfc2l6ZSAtIDEpKSkgewotCQkJZmlscC0+Zl9mbGFncyB8PSBPX1NZTkM7Ci0JCQlmaWxwLT5mX2ZsYWdzICY9IH5PX0RJUkVDVDsKLQkJfQotCi0JCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKGlvY2IsICZsb2NhbF9pb3YsIDEsCi0JCQkJCQkgICAgJmlvY2ItPmtpX3Bvcyk7Ci0KLQkJZmlscC0+Zl9mbGFncyA9IHNhdmVkX2ZsYWdzOwotCX0gZWxzZQotI2VuZGlmCi0JCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKGlvY2IsICZsb2NhbF9pb3YsIDEsCi0JCQkJCQkgICAgJmlvY2ItPmtpX3Bvcyk7CisJcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgJmxvY2FsX2lvdiwgMSwgJmlvY2ItPmtpX3Bvcyk7CiAKIAkvKiBidWZmZXJlZCBhaW8gd291bGRuJ3QgaGF2ZSBwcm9wZXIgbG9jayBjb3ZlcmFnZSB0b2RheSAqLwogCUJVR19PTihyZXQgPT0gLUVJT0NCUVVFVUVEICYmICEoZmlscC0+Zl9mbGFncyAmIE9fRElSRUNUKSk7CkBAIC0xMTQwLDkgKzExMDksNiBAQAogCWludCByZXQgPSAwLCByd19sZXZlbCA9IC0xLCBoYXZlX2FsbG9jX3NlbSA9IDA7CiAJc3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLSNpZmRlZiBPQ0ZTMl9PUkFDT1JFX1dPUktBUk9VTkRTCi0Jc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7Ci0jZW5kaWYKIAogCW1sb2dfZW50cnkoIigweCVwLCAweCVwLCAldSwgJyUuKnMnKVxuIiwgZmlscCwgYnVmLAogCQkgICAodW5zaWduZWQgaW50KWNvdW50LApAQCAtMTE1NSwyMSArMTEyMSw2IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLSNpZmRlZiBPQ0ZTMl9PUkFDT1JFX1dPUktBUk9VTkRTCi0JaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9DT01QQVRfT0NGUykgewotCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fRElSRUNUKSB7Ci0JCQlpbnQgc2VjdG9yX3NpemUgPSAxIDw8IG9zYi0+c19zZWN0c2l6ZV9iaXRzOwotCi0JCQlpZiAoKHBvcyAmIChzZWN0b3Jfc2l6ZSAtIDEpKSB8fAotCQkJICAgIChjb3VudCAmIChzZWN0b3Jfc2l6ZSAtIDEpKSB8fAotCQkJICAgICgodW5zaWduZWQgbG9uZylidWYgJiAoc2VjdG9yX3NpemUgLSAxKSkgfHwKLQkJCSAgICAoaV9zaXplX3JlYWQoaW5vZGUpICYgKHNlY3Rvcl9zaXplIC0xKSkpIHsKLQkJCQlmaWxwLT5mX2ZsYWdzICY9IH5PX0RJUkVDVDsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgotCiAJLyogCiAJICogYnVmZmVyZWQgcmVhZHMgcHJvdGVjdCB0aGVtc2VsdmVzIGluIC0+cmVhZHBhZ2UoKS4gIE9fRElSRUNUIHJlYWRzCiAJICogbmVlZCBsb2NrcyB0byBwcm90ZWN0IHBlbmRpbmcgcmVhZHMgZnJvbSByYWNpbmcgd2l0aCB0cnVuY2F0ZS4KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2hlYXJ0YmVhdC5jIGIvZnMvb2NmczIvaGVhcnRiZWF0LmMKaW5kZXggMGJiZDIyZi4uY2JmZDQ1YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvaGVhcnRiZWF0LmMKQEAgLTY3LDYgKzY3LDcgQEAKIAlvY2ZzMl9ub2RlX21hcF9pbml0KCZvc2ItPm1vdW50ZWRfbWFwKTsKIAlvY2ZzMl9ub2RlX21hcF9pbml0KCZvc2ItPnJlY292ZXJ5X21hcCk7CiAJb2NmczJfbm9kZV9tYXBfaW5pdCgmb3NiLT51bW91bnRfbWFwKTsKKwlvY2ZzMl9ub2RlX21hcF9pbml0KCZvc2ItPm9zYl9yZWNvdmVyaW5nX29ycGhhbl9kaXJzKTsKIH0KIAogc3RhdGljIHZvaWQgb2NmczJfZG9fbm9kZV9kb3duKGludCBub2RlX251bSwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDgxMjI0ODkuLjMxNTQ3MmEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgImRsbWdsdWUuaCIKICNpbmNsdWRlICJleHRlbnRfbWFwLmgiCiAjaW5jbHVkZSAiZmlsZS5oIgorI2luY2x1ZGUgImhlYXJ0YmVhdC5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAiam91cm5hbC5oIgogI2luY2x1ZGUgIm5hbWVpLmgiCkBAIC01NDQsNiArNTQ1LDQyIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyogCisgKiBTZXJpYWxpemUgd2l0aCBvcnBoYW4gZGlyIHJlY292ZXJ5LiBJZiB0aGUgcHJvY2VzcyBkb2luZworICogcmVjb3Zlcnkgb24gdGhpcyBvcnBoYW4gZGlyIGRvZXMgYW4gaWdldCgpIHdpdGggdGhlIGRpcgorICogaV9tdXRleCBoZWxkLCB3ZSdsbCBkZWFkbG9jayBoZXJlLiBJbnN0ZWFkIHdlIGRldGVjdCB0aGlzCisgKiBhbmQgZXhpdCBlYXJseSAtIHJlY292ZXJ5IHdpbGwgd2lwZSB0aGlzIGlub2RlIGZvciB1cy4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jaGVja19vcnBoYW5fcmVjb3Zlcnlfc3RhdGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJCSAgICAgaW50IHNsb3QpCit7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCWlmIChvY2ZzMl9ub2RlX21hcF90ZXN0X2JpdChvc2IsICZvc2ItPm9zYl9yZWNvdmVyaW5nX29ycGhhbl9kaXJzLCBzbG90KSkgeworCQltbG9nKDAsICJSZWNvdmVyeSBpcyBoYXBwZW5pbmcgb24gb3JwaGFuIGRpciAlZCwgd2lsbCBza2lwICIKKwkJICAgICAidGhpcyBpbm9kZVxuIiwgc2xvdCk7CisJCXJldCA9IC1FREVBRExLOworCQlnb3RvIG91dDsKKwl9CisJLyogVGhpcyBzaWduYWxzIHRvIHRoZSBvcnBoYW4gcmVjb3ZlcnkgcHJvY2VzcyB0aGF0IGl0IHNob3VsZAorCSAqIHdhaXQgZm9yIHVzIHRvIGhhbmRsZSB0aGUgd2lwZS4gKi8KKwlvc2ItPm9zYl9vcnBoYW5fd2lwZXNbc2xvdF0rKzsKK291dDoKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfc2lnbmFsX3dpcGVfY29tcGxldGlvbihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJIGludCBzbG90KQoreworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJb3NiLT5vc2Jfb3JwaGFuX3dpcGVzW3Nsb3RdLS07CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJd2FrZV91cCgmb3NiLT5vc2Jfd2lwZV9ldmVudCk7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfd2lwZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCiB7CkBAIC01NTUsNiArNTkyLDExIEBACiAJLyogV2UndmUgYWxyZWFkeSB2b3RlZCBvbiB0aGlzIHNvIGl0IHNob3VsZCBiZSByZWFkb25seSAtIG5vCiAJICogc3BpbmxvY2sgbmVlZGVkLiAqLwogCW9ycGhhbmVkX3Nsb3QgPSBPQ0ZTMl9JKGlub2RlKS0+aXBfb3JwaGFuZWRfc2xvdDsKKworCXN0YXR1cyA9IG9jZnMyX2NoZWNrX29ycGhhbl9yZWNvdmVyeV9zdGF0ZShvc2IsIG9ycGhhbmVkX3Nsb3QpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKIAlvcnBoYW5fZGlyX2lub2RlID0gb2NmczJfZ2V0X3N5c3RlbV9maWxlX2lub2RlKG9zYiwKIAkJCQkJCSAgICAgICBPUlBIQU5fRElSX1NZU1RFTV9JTk9ERSwKIAkJCQkJCSAgICAgICBvcnBoYW5lZF9zbG90KTsKQEAgLTU5Nyw2ICs2MzksNyBAQAogCWJyZWxzZShvcnBoYW5fZGlyX2JoKTsKIGJhaWw6CiAJaXB1dChvcnBoYW5fZGlyX2lub2RlKTsKKwlvY2ZzMl9zaWduYWxfd2lwZV9jb21wbGV0aW9uKG9zYiwgb3JwaGFuZWRfc2xvdCk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtODIyLDcgKzg2NSw4IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl93aXBlX2lub2RlKGlub2RlLCBkaV9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlpZiAoc3RhdHVzICE9IC1FREVBRExLKQorCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWxfdW5sb2NrX2lub2RlOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGQzMjljOWQuLjRiZTgwMWYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTE0MDgsMjEgKzE0MDgsMTcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3JlY292ZXJfb3JwaGFucyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCQkgaW50IHNsb3QpCitzdGF0aWMgaW50IG9jZnMyX3F1ZXVlX29ycGhhbnMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkgICAgICAgaW50IHNsb3QsCisJCQkgICAgICAgc3RydWN0IGlub2RlICoqaGVhZCkKIHsKLQlpbnQgc3RhdHVzID0gMDsKLQlpbnQgaGF2ZV9kaXNrX2xvY2sgPSAwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwotCXN0cnVjdCBpbm9kZSAqaXRlcjsKKwlpbnQgc3RhdHVzOwogCXN0cnVjdCBpbm9kZSAqb3JwaGFuX2Rpcl9pbm9kZSA9IE5VTEw7CisJc3RydWN0IGlub2RlICppdGVyOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBibGssIGxvY2FsOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvc2ItPnNiOwotCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaTsKLQotCW1sb2coMCwgIlJlY292ZXIgaW5vZGVzIGZyb20gb3JwaGFuIGRpciBpbiBzbG90ICVkXG4iLCBzbG90KTsKIAogCW9ycGhhbl9kaXJfaW5vZGUgPSBvY2ZzMl9nZXRfc3lzdGVtX2ZpbGVfaW5vZGUob3NiLAogCQkJCQkJICAgICAgIE9SUEhBTl9ESVJfU1lTVEVNX0lOT0RFLApAQCAtMTQzMCwxNyArMTQyNiwxNSBAQAogCWlmICAoIW9ycGhhbl9kaXJfaW5vZGUpIHsKIAkJc3RhdHVzID0gLUVOT0VOVDsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIG91dDsKLQl9CisJCXJldHVybiBzdGF0dXM7CisJfQkKIAogCW11dGV4X2xvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOwogCXN0YXR1cyA9IG9jZnMyX21ldGFfbG9jayhvcnBoYW5fZGlyX2lub2RlLCBOVUxMLCBOVUxMLCAwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewotCQltdXRleF91bmxvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOwogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gb3V0OwogCX0KLQloYXZlX2Rpc2tfbG9jayA9IDE7CiAKIAlvZmZzZXQgPSAwOwogCWl0ZXIgPSBOVUxMOwpAQCAtMTQ1MSwxMSArMTQ0NSwxMCBAQAogCQlpZiAoIWJoKQogCQkJc3RhdHVzID0gLUVJTlZBTDsKIAkJaWYgKHN0YXR1cyA8IDApIHsKLQkJCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJCQlpZiAoYmgpCiAJCQkJYnJlbHNlKGJoKTsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKIAkJbG9jYWwgPSAwOwpAQCAtMTQ2NSwxMSArMTQ1OCwxMCBAQAogCiAJCQlpZiAoIW9jZnMyX2NoZWNrX2Rpcl9lbnRyeShvcnBoYW5fZGlyX2lub2RlLAogCQkJCQkJICBkZSwgYmgsIGxvY2FsKSkgewotCQkJCW11dGV4X3VubG9jaygmb3JwaGFuX2Rpcl9pbm9kZS0+aV9tdXRleCk7CiAJCQkJc3RhdHVzID0gLUVJTlZBTDsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQkJYnJlbHNlKGJoKTsKLQkJCQlnb3RvIG91dDsKKwkJCQlnb3RvIG91dF91bmxvY2s7CiAJCQl9CiAKIAkJCWxvY2FsICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKQEAgLTE1MDQsMTggKzE0OTYsOTUgQEAKIAogCQkJbWxvZygwLCAicXVldWUgb3JwaGFuICUiTUxGdTY0IlxuIiwKIAkJCSAgICAgT0NGUzJfSShpdGVyKS0+aXBfYmxrbm8pOwotCQkJT0NGUzJfSShpdGVyKS0+aXBfbmV4dF9vcnBoYW4gPSBpbm9kZTsKLQkJCWlub2RlID0gaXRlcjsKKwkJCS8qIE5vIGxvY2tpbmcgaXMgcmVxdWlyZWQgZm9yIHRoZSBuZXh0X29ycGhhbgorCQkJICogcXVldWUgYXMgdGhlcmUgaXMgb25seSBldmVyIGEgc2luZ2xlCisJCQkgKiBwcm9jZXNzIGRvaW5nIG9ycGhhbiByZWNvdmVyeS4gKi8KKwkJCU9DRlMyX0koaXRlciktPmlwX25leHRfb3JwaGFuID0gKmhlYWQ7CisJCQkqaGVhZCA9IGl0ZXI7CiAJCX0KIAkJYnJlbHNlKGJoKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZvcnBoYW5fZGlyX2lub2RlLT5pX211dGV4KTsKIAorb3V0X3VubG9jazoKIAlvY2ZzMl9tZXRhX3VubG9jayhvcnBoYW5fZGlyX2lub2RlLCAwKTsKLQloYXZlX2Rpc2tfbG9jayA9IDA7Ci0KK291dDoKKwltdXRleF91bmxvY2soJm9ycGhhbl9kaXJfaW5vZGUtPmlfbXV0ZXgpOwogCWlwdXQob3JwaGFuX2Rpcl9pbm9kZSk7Ci0Jb3JwaGFuX2Rpcl9pbm9kZSA9IE5VTEw7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBvY2ZzMl9vcnBoYW5fcmVjb3ZlcnlfY2FuX2NvbnRpbnVlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCQkgICAgICBpbnQgc2xvdCkKK3sKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlyZXQgPSAhb3NiLT5vc2Jfb3JwaGFuX3dpcGVzW3Nsb3RdOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9tYXJrX3JlY292ZXJpbmdfb3JwaGFuX2RpcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJICAgICBpbnQgc2xvdCkKK3sKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCS8qIE1hcmsgb3Vyc2VsdmVzIHN1Y2ggdGhhdCBuZXcgcHJvY2Vzc2VzIGluIGRlbGV0ZV9pbm9kZSgpCisJICoga25vdyB0byBxdWl0IGVhcmx5LiAqLworCW9jZnMyX25vZGVfbWFwX3NldF9iaXQob3NiLCAmb3NiLT5vc2JfcmVjb3ZlcmluZ19vcnBoYW5fZGlycywgc2xvdCk7CisJd2hpbGUgKG9zYi0+b3NiX29ycGhhbl93aXBlc1tzbG90XSkgeworCQkvKiBJZiBhbnkgcHJvY2Vzc2VzIGFyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgYW4KKwkJICogb3JwaGFuIHdpcGUgb24gdGhpcyBkaXIsIHRoZW4gd2UgbmVlZCB0byB3YWl0IGZvcgorCQkgKiB0aGVtLiAqLworCQlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShvc2ItPm9zYl93aXBlX2V2ZW50LAorCQkJCQkgb2NmczJfb3JwaGFuX3JlY292ZXJ5X2Nhbl9jb250aW51ZShvc2IsIHNsb3QpKTsKKwkJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9jbGVhcl9yZWNvdmVyaW5nX29ycGhhbl9kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJCSAgICAgIGludCBzbG90KQoreworCW9jZnMyX25vZGVfbWFwX2NsZWFyX2JpdChvc2IsICZvc2ItPm9zYl9yZWNvdmVyaW5nX29ycGhhbl9kaXJzLCBzbG90KTsKK30KKworLyoKKyAqIE9ycGhhbiByZWNvdmVyeS4gRWFjaCBtb3VudGVkIG5vZGUgaGFzIGl0J3Mgb3duIG9ycGhhbiBkaXIgd2hpY2ggd2UKKyAqIG11c3QgcnVuIGR1cmluZyByZWNvdmVyeS4gT3VyIHN0cmF0ZWd5IGhlcmUgaXMgdG8gYnVpbGQgYSBsaXN0IG9mCisgKiB0aGUgaW5vZGVzIGluIHRoZSBvcnBoYW4gZGlyIGFuZCBpZ2V0L2lwdXQgdGhlbS4gVGhlIFZGUyBkb2VzCisgKiAobW9zdCkgb2YgdGhlIHJlc3Qgb2YgdGhlIHdvcmsuCisgKgorICogT3JwaGFuIHJlY292ZXJ5IGNhbiBoYXBwZW4gYXQgYW55IHRpbWUsIG5vdCBqdXN0IG1vdW50IHNvIHdlIGhhdmUgYQorICogY291cGxlIG9mIGV4dHJhIGNvbnNpZGVyYXRpb25zLgorICoKKyAqIC0gV2UgZ3JhYiBhcyBtYW55IGlub2RlcyBhcyB3ZSBjYW4gdW5kZXIgdGhlIG9ycGhhbiBkaXIgbG9jayAtCisgKiAgIGRvaW5nIGlnZXQoKSBvdXRzaWRlIHRoZSBvcnBoYW4gZGlyIHJpc2tzIGdldHRpbmcgYSByZWZlcmVuY2Ugb24KKyAqICAgYW4gaW52YWxpZCBpbm9kZS4KKyAqIC0gV2UgbXVzdCBiZSBzdXJlIG5vdCB0byBkZWFkbG9jayB3aXRoIG90aGVyIHByb2Nlc3NlcyBvbiB0aGUKKyAqICAgc3lzdGVtIHdhbnRpbmcgdG8gcnVuIGRlbGV0ZV9pbm9kZSgpLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGV5IGdvCisgKiAgIHRvIGxvY2sgdGhlIG9ycGhhbiBkaXIgYW5kIHRoZSBvcnBoYW4gcmVjb3ZlcnkgcHJvY2VzcyBhdHRlbXB0cyB0bworICogICBpZ2V0KCkgaW5zaWRlIHRoZSBvcnBoYW4gZGlyIGxvY2suIFRoaXMgY2FuIGJlIGF2b2lkZWQgYnkKKyAqICAgYWR2ZXJ0aXNpbmcgb3VyIHN0YXRlIHRvIG9jZnMyX2RlbGV0ZV9pbm9kZSgpLgorICovCitzdGF0aWMgaW50IG9jZnMyX3JlY292ZXJfb3JwaGFucyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgaW50IHNsb3QpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CisJc3RydWN0IGlub2RlICppdGVyOworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaTsKKworCW1sb2coMCwgIlJlY292ZXIgaW5vZGVzIGZyb20gb3JwaGFuIGRpciBpbiBzbG90ICVkXG4iLCBzbG90KTsKKworCW9jZnMyX21hcmtfcmVjb3ZlcmluZ19vcnBoYW5fZGlyKG9zYiwgc2xvdCk7CisJcmV0ID0gb2NmczJfcXVldWVfb3JwaGFucyhvc2IsIHNsb3QsICZpbm9kZSk7CisJb2NmczJfY2xlYXJfcmVjb3ZlcmluZ19vcnBoYW5fZGlyKG9zYiwgc2xvdCk7CisKKwkvKiBFcnJvciBoZXJlIHNob3VsZCBiZSBub3RlZCwgYnV0IHdlIHdhbnQgdG8gY29udGludWUgd2l0aCBhcworCSAqIG1hbnkgcXVldWVkIGlub2RlcyBhcyB3ZSd2ZSBnb3QuICovCisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOwogCiAJd2hpbGUgKGlub2RlKSB7CiAJCW9pID0gT0NGUzJfSShpbm9kZSk7CkBAIC0xNTQxLDE0ICsxNjEwLDcgQEAKIAkJaW5vZGUgPSBpdGVyOwogCX0KIAotb3V0OgotCWlmIChoYXZlX2Rpc2tfbG9jaykKLQkJb2NmczJfbWV0YV91bmxvY2sob3JwaGFuX2Rpcl9pbm9kZSwgMCk7Ci0KLQlpZiAob3JwaGFuX2Rpcl9pbm9kZSkKLQkJaXB1dChvcnBoYW5fZGlyX2lub2RlKTsKLQotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBvY2ZzMl93YWl0X29uX21vdW50KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczIuaCBiL2ZzL29jZnMyL29jZnMyLmgKaW5kZXggOGQ4ZTQ3Ny4uZTg5ZGU5YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczIuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMi5oCkBAIC0xNzQsOSArMTc0LDYgQEAKIAlPQ0ZTMl9NT1VOVF9OT0lOVFIgID0gMSA8PCAyLCAgIC8qIERvbid0IGNhdGNoIHNpZ25hbHMgKi8KIAlPQ0ZTMl9NT1VOVF9FUlJPUlNfUEFOSUMgPSAxIDw8IDMsIC8qIFBhbmljIG9uIGVycm9ycyAqLwogCU9DRlMyX01PVU5UX0RBVEFfV1JJVEVCQUNLID0gMSA8PCA0LCAvKiBObyBkYXRhIG9yZGVyaW5nICovCi0jaWZkZWYgT0NGUzJfT1JBQ09SRV9XT1JLQVJPVU5EUwotCU9DRlMyX01PVU5UX0NPTVBBVF9PQ0ZTID0gMSA8PCAzMCwgLyogb2NmczEgY29tcGF0aWJpbGl0eSBtb2RlICovCi0jZW5kaWYKIH07CiAKICNkZWZpbmUgT0NGUzJfT1NCX1NPRlRfUk8JMHgwMDAxCkBAIC0yOTAsNiArMjg3LDEwIEBACiAJc3RydWN0IGlub2RlCQkJKm9zYl90bF9pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJCSpvc2JfdGxfYmg7CiAJc3RydWN0IHdvcmtfc3RydWN0CQlvc2JfdHJ1bmNhdGVfbG9nX3dxOworCisJc3RydWN0IG9jZnMyX25vZGVfbWFwCQlvc2JfcmVjb3ZlcmluZ19vcnBoYW5fZGlyczsKKwl1bnNpZ25lZCBpbnQJCQkqb3NiX29ycGhhbl93aXBlczsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJb3NiX3dpcGVfZXZlbnQ7CiB9OwogCiAjZGVmaW5lIE9DRlMyX1NCKHNiKQkgICAgKChzdHJ1Y3Qgb2NmczJfc3VwZXIgKikoc2IpLT5zX2ZzX2luZm8pCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oIGIvZnMvb2NmczIvb2NmczJfZnMuaAppbmRleCBkZmI4YTViLi5jNWIxYWM1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9mcy5oCisrKyBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKQEAgLTEzOCw3ICsxMzgsNiBAQAogCiAvKiBKb3VybmFsIGxpbWl0cyAoaW4gYnl0ZXMpICovCiAjZGVmaW5lIE9DRlMyX01JTl9KT1VSTkFMX1NJWkUJCSg0ICogMTAyNCAqIDEwMjQpCi0jZGVmaW5lIE9DRlMyX01BWF9KT1VSTkFMX1NJWkUJCSg1MDAgKiAxMDI0ICogMTAyNCkKIAogc3RydWN0IG9jZnMyX3N5c3RlbV9pbm9kZV9pbmZvIHsKIAljaGFyCSpzaV9uYW1lOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggMDQ2ODI0Yi4uNDRkOGI1MiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC05NTAsMTYgKzk1MCwxOCBAQAogc3RhdGljIGludCBvY2ZzMl9pbml0aWFsaXplX21lbV9jYWNoZXModm9pZCkKIHsKIAlvY2ZzMl9pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgib2NmczJfaW5vZGVfY2FjaGUiLAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvKSwKLQkJCQkJICAgICAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKLQkJCQkJICAgICAgIG9jZnMyX2lub2RlX2luaXRfb25jZSwgTlVMTCk7CisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyksCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIChTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAorCQkJCSAgICAgICBvY2ZzMl9pbm9kZV9pbml0X29uY2UsIE5VTEwpOwogCWlmICghb2NmczJfaW5vZGVfY2FjaGVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCW9jZnMyX2xvY2tfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgib2NmczJfbG9jayIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9qb3VybmFsX2xvY2spLAogCQkJCQkgICAgIDAsCi0JCQkJCSAgICAgU0xBQl9OT19SRUFQfFNMQUJfSFdDQUNIRV9BTElHTiwKKwkJCQkJICAgICBTTEFCX0hXQ0FDSEVfQUxJR04sCiAJCQkJCSAgICAgTlVMTCwgTlVMTCk7CiAJaWYgKCFvY2ZzMl9sb2NrX2NhY2hlKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzMjUsNiArMTMyNywxNiBAQAogCX0KIAltbG9nKE1MX05PVElDRSwgIm1heF9zbG90cyBmb3IgdGhpcyBkZXZpY2U6ICV1XG4iLCBvc2ItPm1heF9zbG90cyk7CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvc2ItPm9zYl93aXBlX2V2ZW50KTsKKwlvc2ItPm9zYl9vcnBoYW5fd2lwZXMgPSBrY2FsbG9jKG9zYi0+bWF4X3Nsb3RzLAorCQkJCQlzaXplb2YoKm9zYi0+b3NiX29ycGhhbl93aXBlcyksCisJCQkJCUdGUF9LRVJORUwpOworCWlmICghb3NiLT5vc2Jfb3JwaGFuX3dpcGVzKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKwogCW9zYi0+c19mZWF0dXJlX2NvbXBhdCA9CiAJCWxlMzJfdG9fY3B1KE9DRlMyX1JBV19TQihkaSktPnNfZmVhdHVyZV9jb21wYXQpOwogCW9zYi0+c19mZWF0dXJlX3JvX2NvbXBhdCA9CkBAIC0xNjM4LDYgKzE2NTAsNyBAQAogCWlmIChvc2ItPnNsb3RfaW5mbykKIAkJb2NmczJfZnJlZV9zbG90X2luZm8ob3NiLT5zbG90X2luZm8pOwogCisJa2ZyZWUob3NiLT5vc2Jfb3JwaGFuX3dpcGVzKTsKIAkvKiBGSVhNRQogCSAqIFRoaXMgYmVsb25ncyBpbiBqb3VybmFsIHNodXRkb3duLCBidXQgYmVjYXVzZSB3ZSBoYXZlIHRvCiAJICogYWxsb2NhdGUgb3NiLT5qb3VybmFsIGF0IHRoZSBzdGFydCBvZiBvY2ZzMl9pbml0YWxpemVfb3NiKCksCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNzBlMDIzMC4uN2QwMmQxOSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtODkwLDYgKzg5MCwxMCBAQAogICogYSBmdWxseSBpbnN0YW50aWF0ZWQgc3RydWN0IGZpbGUgdG8gdGhlIGNhbGxlci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgZmlsZXN5c3RlbSdzCiAgKiBsb29rdXAgbWV0aG9kLgorICogQmV3YXJlIG9mIGNhbGxpbmcgaXQgZm9yIG5vbi1yZWd1bGFyIGZpbGVzISBUaG9zZSAtPm9wZW4gbWV0aG9kcyBtaWdodCBibG9jaworICogKGUuZy4gaW4gZmlmb19vcGVuKSwgbGVhdmluZyB5b3Ugd2l0aCBwYXJlbnQgbG9ja2VkIChhbmQgaW4gY2FzZSBvZiBmaWZvLAorICogbGVhZGluZyB0byBhIGRlYWRsb2NrLCBhcyBub2JvZHkgY2FuIG9wZW4gdGhhdCBmaWZvIGFueW1vcmUsIGJlY2F1c2UKKyAqIGFub3RoZXIgcHJvY2VzcyB0byBvcGVuIGZpZm8gd2lsbCBibG9jayBvbiBsb2NrZWQgcGFyZW50IHdoZW4gZG9pbmcgbG9va3VwKS4KICAqIE5vdGUgdGhhdCBpbiBjYXNlIG9mIGVycm9yLCBuZC0+aW50ZW50Lm9wZW4uZmlsZSBpcyBkZXN0cm95ZWQsIGJ1dCB0aGUKICAqIHBhdGggaW5mb3JtYXRpb24gcmVtYWlucyB2YWxpZC4KICAqIElmIHRoZSBvcGVuIGNhbGxiYWNrIGlzIHNldCB0byBOVUxMLCB0aGVuIHRoZSBzdGFuZGFyZCBmX29wLT5vcGVuKCkKQEAgLTk3Myw3ICs5NzcsNyBAQAogCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwogIAlmZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChmZHQtPm9wZW5fZmRzLT5mZHNfYml0cywKIAkJCQlmZHQtPm1heF9mZHNldCwKLQkJCQlmZHQtPm5leHRfZmQpOworCQkJCWZpbGVzLT5uZXh0X2ZkKTsKIAogCS8qCiAJICogTi5CLiBGb3IgY2xvbmUgdGFza3Mgc2hhcmluZyBhIGZpbGVzIHN0cnVjdHVyZSwgdGhpcyB0ZXN0CkBAIC05OTgsNyArMTAwMiw3IEBACiAKIAlGRF9TRVQoZmQsIGZkdC0+b3Blbl9mZHMpOwogCUZEX0NMUihmZCwgZmR0LT5jbG9zZV9vbl9leGVjKTsKLQlmZHQtPm5leHRfZmQgPSBmZCArIDE7CisJZmlsZXMtPm5leHRfZmQgPSBmZCArIDE7CiAjaWYgMQogCS8qIFNhbml0eSBjaGVjayAqLwogCWlmIChmZHQtPmZkW2ZkXSAhPSBOVUxMKSB7CkBAIC0xMDE5LDggKzEwMjMsOCBAQAogewogCXN0cnVjdCBmZHRhYmxlICpmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKIAlfX0ZEX0NMUihmZCwgZmR0LT5vcGVuX2Zkcyk7Ci0JaWYgKGZkIDwgZmR0LT5uZXh0X2ZkKQotCQlmZHQtPm5leHRfZmQgPSBmZDsKKwlpZiAoZmQgPCBmaWxlcy0+bmV4dF9mZCkKKwkJZmlsZXMtPm5leHRfZmQgPSBmZDsKIH0KIAogdm9pZCBmYXN0Y2FsbCBwdXRfdW51c2VkX2ZkKHVuc2lnbmVkIGludCBmZCkKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvaWJtLmMgYi9mcy9wYXJ0aXRpb25zL2libS5jCmluZGV4IDc4MDEwYWQuLjgzMGM1NWQgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvaWJtLmMKKysrIGIvZnMvcGFydGl0aW9ucy9pYm0uYwpAQCAtMSwxNSArMSw5IEBACiAvKgotICogRmlsZS4uLi4uLi4uLi4uOiBsaW51eC9mcy9wYXJ0aXRpb25zL2libS5jICAgICAgCisgKiBGaWxlLi4uLi4uLi4uLi46IGxpbnV4L2ZzL3BhcnRpdGlvbnMvaWJtLmMKICAqIEF1dGhvcihzKS4uLi4uLjogSG9sZ2VyIFNtb2xpbnNraSA8SG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tPgogICogICAgICAgICAgICAgICAgICBWb2xrZXIgU2FtZXNrZSA8c2FtZXNrZUBkZS5pYm0uY29tPgogICogQnVncmVwb3J0cy50by4uOiA8TGludXgzOTBAZGUuaWJtLmNvbT4KICAqIChDKSBJQk0gQ29ycG9yYXRpb24sIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCAxOTk5LDIwMDAKLQotICogSGlzdG9yeSBvZiBjaGFuZ2VzIChzdGFydHMgSnVseSAyMDAwKQotICogMDcvMTAvMDAgRml4ZWQgZGV0ZWN0aW9uIG9mIENNUyBmb3JtYXR0ZWQgZGlza3MgICAgIAotICogMDIvMTMvMDAgVlRPQyBwYXJ0aXRpb24gc3VwcG9ydCBhZGRlZAotICogMTIvMjcvMDEgZml4ZWQgUEwwMzA1OTMgKENNUyByZXNlcnZlZCBtaW5pZGlzayBub3QgZGV0ZWN0ZWQgb24gNjQgYml0KQotICogMDcvMjQvMDMgbm8gbG9uZ2VyIHVzaW5nIGNvbnRlbnRzIG9mIGZyZWVkIHBhZ2UgZm9yIENNUyBsYWJlbCByZWNvZ25pdGlvbiAoQlozNjExKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTI1LDcgKzE5LDcgQEAKICNpbmNsdWRlICJpYm0uaCIKIAogLyoKLSAqIGNvbXB1dGUgdGhlIGJsb2NrIG51bWJlciBmcm9tIGEgCisgKiBjb21wdXRlIHRoZSBibG9jayBudW1iZXIgZnJvbSBhCiAgKiBjeWwtY3lsLWhlYWQtaGVhZCBzdHJ1Y3R1cmUKICAqLwogc3RhdGljIGlubGluZSBpbnQKQEAgLTM0LDkgKzI4LDggQEAKIAkgICAgICAgcHRyLT5oaCAqIGdlby0+c2VjdG9yczsKIH0KIAotCiAvKgotICogY29tcHV0ZSB0aGUgYmxvY2sgbnVtYmVyIGZyb20gYSAKKyAqIGNvbXB1dGUgdGhlIGJsb2NrIG51bWJlciBmcm9tIGEKICAqIGN5bC1jeWwtaGVhZC1oZWFkLWJsb2NrIHN0cnVjdHVyZQogICovCiBzdGF0aWMgaW5saW5lIGludApAQCAtNDgsMTAgKzQxLDExIEBACiAKIC8qCiAgKi8KLWludCAKK2ludAogaWJtX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewogCWludCBibG9ja3NpemUsIG9mZnNldCwgc2l6ZTsKKwlsb2ZmX3QgaV9zaXplOwogCWRhc2RfaW5mb3JtYXRpb25fdCAqaW5mbzsKIAlzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbzsKIAljaGFyIHR5cGVbNV0gPSB7MCx9OwpAQCAtNjMsMTkgKzU3LDIzIEBACiAJdW5zaWduZWQgY2hhciAqZGF0YTsKIAlTZWN0b3Igc2VjdDsKIAorCWJsb2Nrc2l6ZSA9IGJkZXZfaGFyZHNlY3Rfc2l6ZShiZGV2KTsKKwlpZiAoYmxvY2tzaXplIDw9IDApCisJCXJldHVybiAwOworCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGJkZXYtPmJkX2lub2RlKTsKKwlpZiAoaV9zaXplID09IDApCisJCXJldHVybiAwOworCiAJaWYgKChpbmZvID0ga21hbGxvYyhzaXplb2YoZGFzZF9pbmZvcm1hdGlvbl90KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCWdvdG8gb3V0X25vaW5mbzsKIAlpZiAoKGdlbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZF9nZW9tZXRyeSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlnb3RvIG91dF9ub2dlbzsKIAlpZiAoKGxhYmVsID0ga21hbGxvYyhzaXplb2YodW5pb24gbGFiZWxfdCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlnb3RvIG91dF9ub2xhYjsKLQkKKwogCWlmIChpb2N0bF9ieV9iZGV2KGJkZXYsIEJJT0RBU0RJTkZPLCAodW5zaWduZWQgbG9uZylpbmZvKSAhPSAwIHx8CiAJICAgIGlvY3RsX2J5X2JkZXYoYmRldiwgSERJT19HRVRHRU8sICh1bnNpZ25lZCBsb25nKWdlbykgIT0gMCkKIAkJZ290byBvdXRfbm9pb2N0bDsKLQkKLQlpZiAoKGJsb2Nrc2l6ZSA9IGJkZXZfaGFyZHNlY3Rfc2l6ZShiZGV2KSkgPD0gMCkKLQkJZ290byBvdXRfYmFkc2VjdDsKIAogCS8qCiAJICogR2V0IHZvbHVtZSBsYWJlbCwgZXh0cmFjdCBuYW1lIGFuZCB0eXBlLgpAQCAtMTExLDcgKzEwOSw3IEBACiAJCX0gZWxzZSB7CiAJCQlwcmludGsoIkNNUzEvJThzOiIsIG5hbWUpOwogCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7Ci0JCQlzaXplID0gYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5OworCQkJc2l6ZSA9IGlfc2l6ZSA+PiA5OwogCQl9CiAJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIDEsIG9mZnNldCooYmxvY2tzaXplID4+IDkpLAogCQkJCSBzaXplLW9mZnNldCooYmxvY2tzaXplID4+IDkpKTsKQEAgLTE0OSwxMyArMTQ3LDEzIEBACiAKIAkJCS8qIE9LLCB3ZSBnb3QgdmFsaWQgcGFydGl0aW9uIGRhdGEgKi8KIAkJICAgICAgICBvZmZzZXQgPSBjY2hoMmJsaygmZjEuRFMxRVhUMS5sbGltaXQsIGdlbyk7Ci0JCQlzaXplICA9IGNjaGgyYmxrKCZmMS5EUzFFWFQxLnVsaW1pdCwgZ2VvKSAtIAorCQkJc2l6ZSAgPSBjY2hoMmJsaygmZjEuRFMxRVhUMS51bGltaXQsIGdlbykgLQogCQkJCW9mZnNldCArIGdlby0+c2VjdG9yczsKIAkJCWlmIChjb3VudGVyID49IHN0YXRlLT5saW1pdCkKIAkJCQlicmVhazsKLQkJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIGNvdW50ZXIgKyAxLCAKLQkJCQkJIG9mZnNldCAqIChibG9ja3NpemUgPj4gOSksCi0JCQkJCSBzaXplICogKGJsb2Nrc2l6ZSA+PiA5KSk7CisJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCBjb3VudGVyICsgMSwKKwkJCQkgICAgICBvZmZzZXQgKiAoYmxvY2tzaXplID4+IDkpLAorCQkJCSAgICAgIHNpemUgKiAoYmxvY2tzaXplID4+IDkpKTsKIAkJCWNvdW50ZXIrKzsKIAkJCWJsaysrOwogCQl9CkBAIC0xNjgsOSArMTY2LDkgQEAKIAkJZWxzZQogCQkJcHJpbnRrKCIobm9ubCkvJThzOiIsIG5hbWUpOwogCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKLQkJc2l6ZSA9IChiZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDkpOworCQlzaXplID0gaV9zaXplID4+IDk7CiAJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIDEsIG9mZnNldCooYmxvY2tzaXplID4+IDkpLAotCQkJCSBzaXplLW9mZnNldCooYmxvY2tzaXplID4+IDkpKTsKKwkJCSAgICAgIHNpemUtb2Zmc2V0KihibG9ja3NpemUgPj4gOSkpOwogCX0KIAogCXByaW50aygiXG4iKTsKQEAgLTE3OCw5ICsxNzYsOCBAQAogCWtmcmVlKGdlbyk7CiAJa2ZyZWUoaW5mbyk7CiAJcmV0dXJuIDE7Ci0JCisKIG91dF9yZWFkZXJyOgotb3V0X2JhZHNlY3Q6CiBvdXRfbm9pb2N0bDoKIAlrZnJlZShsYWJlbCk7CiBvdXRfbm9sYWI6CmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggZDcyMjU3OS4uZDk3Njg2NiAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNjA1LDcgKzYwNSw3IEBACiAJLmZhc3luYwkJPSBwaXBlX3Jkd3JfZmFzeW5jLAogfTsKIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWFkX3BpcGVfZm9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfcGlwZV9mb3BzID0gewogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS5yZWFkCQk9IHBpcGVfcmVhZCwKIAkucmVhZHYJCT0gcGlwZV9yZWFkdiwKQEAgLTYxNyw3ICs2MTcsNyBAQAogCS5mYXN5bmMJCT0gcGlwZV9yZWFkX2Zhc3luYywKIH07CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd3JpdGVfcGlwZV9mb3BzID0geworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd3JpdGVfcGlwZV9mb3BzID0gewogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS5yZWFkCQk9IGJhZF9waXBlX3IsCiAJLndyaXRlCQk9IHBpcGVfd3JpdGUsCkBAIC02MjksNyArNjI5LDcgQEAKIAkuZmFzeW5jCQk9IHBpcGVfd3JpdGVfZmFzeW5jLAogfTsKIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZHdyX3BpcGVfZm9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzID0gewogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS5yZWFkCQk9IHBpcGVfcmVhZCwKIAkucmVhZHYJCT0gcGlwZV9yZWFkdiwKQEAgLTY2MiwxMCArNjYyLDkgQEAKIHsKIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICppbmZvOwogCi0JaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwaXBlX2lub2RlX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykKIAkJZ290byBmYWlsX3BhZ2U7Ci0JbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwogCWlub2RlLT5pX3BpcGUgPSBpbmZvOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZChQSVBFX1dBSVQoKmlub2RlKSk7CmRpZmYgLS1naXQgYS9mcy9wbm9kZS5jIGIvZnMvcG5vZGUuYwppbmRleCBmMTg3MWY3Li4zN2I1NjhlIDEwMDY0NAotLS0gYS9mcy9wbm9kZS5jCisrKyBiL2ZzL3Bub2RlLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogewogCXN0cnVjdCB2ZnNtb3VudCAqcF9sYXN0X3NyYyA9IE5VTEw7CiAJc3RydWN0IHZmc21vdW50ICpwX2xhc3RfZGVzdCA9IE5VTEw7Ci0JKnR5cGUgPSBDTF9QUk9QQUdBVElPTjs7CisJKnR5cGUgPSBDTF9QUk9QQUdBVElPTjsKIAogCWlmIChJU19NTlRfU0hBUkVEKGRlc3QpKQogCQkqdHlwZSB8PSBDTF9NQUtFX1NIQVJFRDsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW5vZGUuYyBiL2ZzL3Byb2MvaW5vZGUuYwppbmRleCA2NTczZjMxLi43MjJiOWM0IDEwMDY0NAotLS0gYS9mcy9wcm9jL2lub2RlLmMKKysrIGIvZnMvcHJvYy9pbm9kZS5jCkBAIC0xMjEsNyArMTIxLDggQEAKIHsKIAlwcm9jX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJwcm9jX2lub2RlX2NhY2hlIiwKIAkJCQkJICAgICBzaXplb2Yoc3RydWN0IHByb2NfaW5vZGUpLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAocHJvY19pbm9kZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMDQsMTAgKzIwNSw2IEBACiAJcm9vdF9pbm9kZSA9IHByb2NfZ2V0X2lub2RlKHMsIFBST0NfUk9PVF9JTk8sICZwcm9jX3Jvb3QpOwogCWlmICghcm9vdF9pbm9kZSkKIAkJZ290byBvdXRfbm9fcm9vdDsKLQkvKgotCSAqIEZpeHVwIHRoZSByb290IGlub2RlJ3MgbmxpbmsgdmFsdWUKLQkgKi8KLQlyb290X2lub2RlLT5pX25saW5rICs9IG5yX3Byb2Nlc3NlcygpOwogCXJvb3RfaW5vZGUtPmlfdWlkID0gMDsKIAlyb290X2lub2RlLT5pX2dpZCA9IDA7CiAJcy0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3RfaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX21pc2MuYyBiL2ZzL3Byb2MvcHJvY19taXNjLmMKaW5kZXggMWQyNGZlYS4uMWU5ZWEzNyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX21pc2MuYworKysgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkJY2FzZSBCTEtfSERSOgogCQkJaW5mby0+c3RhdGUgPSBCTEtfTElTVDsKIAkJCSgqcG9zKSsrOwotCQkJYnJlYWs7CisJCQkvKmZhbGx0aHJvdWdoKi8KIAkJY2FzZSBCTEtfTElTVDoKIAkJCWlmIChnZXRfYmxrZGV2X2luZm8oaW5mby0+YmxrZGV2LCZpZHVtbXksJm5kdW1teSkpIHsKIAkJCQkvKgpAQCAtNDg1LDYgKzQ4NSw0MCBAQAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCiB9OworCisjaWZkZWYgQ09ORklHX0RFQlVHX1NMQUJfTEVBSworZXh0ZXJuIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzbGFic3RhdHNfb3A7CitzdGF0aWMgaW50IHNsYWJzdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXVuc2lnbmVkIGxvbmcgKm4gPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaW50IHJldCA9IC1FTk9NRU07CisJaWYgKG4pIHsKKwkJcmV0ID0gc2VxX29wZW4oZmlsZSwgJnNsYWJzdGF0c19vcCk7CisJCWlmICghcmV0KSB7CisJCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCQkqbiA9IFBBR0VfU0laRSAvICgyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwkJCW0tPnByaXZhdGUgPSBuOworCQkJbiA9IE5VTEw7CisJCX0KKwkJa2ZyZWUobik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2xhYnN0YXRzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWtmcmVlKG0tPnByaXZhdGUpOworCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc2xhYnN0YXRzX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gc2xhYnN0YXRzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzbGFic3RhdHNfcmVsZWFzZSwKK307CisjZW5kaWYKICNlbmRpZgogCiBzdGF0aWMgaW50IHNob3dfc3RhdChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCkBAIC03NDQsNiArNzc4LDkgQEAKIAljcmVhdGVfc2VxX2VudHJ5KCJpbnRlcnJ1cHRzIiwgMCwgJnByb2NfaW50ZXJydXB0c19vcGVyYXRpb25zKTsKICNpZmRlZiBDT05GSUdfU0xBQgogCWNyZWF0ZV9zZXFfZW50cnkoInNsYWJpbmZvIixTX0lXVVNSfFNfSVJVR08sJnByb2Nfc2xhYmluZm9fb3BlcmF0aW9ucyk7CisjaWZkZWYgQ09ORklHX0RFQlVHX1NMQUJfTEVBSworCWNyZWF0ZV9zZXFfZW50cnkoInNsYWJfYWxsb2NhdG9ycyIsIDAgLCZwcm9jX3NsYWJzdGF0c19vcGVyYXRpb25zKTsKKyNlbmRpZgogI2VuZGlmCiAJY3JlYXRlX3NlcV9lbnRyeSgiYnVkZHlpbmZvIixTX0lSVUdPLCAmZnJhZ21lbnRhdGlvbl9maWxlX29wZXJhdGlvbnMpOwogCWNyZWF0ZV9zZXFfZW50cnkoInZtc3RhdCIsU19JUlVHTywgJnByb2Nfdm1zdGF0X2ZpbGVfb3BlcmF0aW9ucyk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Jvb3QuYyBiL2ZzL3Byb2Mvcm9vdC5jCmluZGV4IDY4ODk2MjguLmMzZmQzNjEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvcm9vdC5jCisrKyBiL2ZzL3Byb2Mvcm9vdC5jCkBAIC04MCwxNiArODAsMTYgQEAKIAlwcm9jX2J1cyA9IHByb2NfbWtkaXIoImJ1cyIsIE5VTEwpOwogfQogCitzdGF0aWMgaW50IHByb2Nfcm9vdF9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdCAqc3RhdAorKQoreworCWdlbmVyaWNfZmlsbGF0dHIoZGVudHJ5LT5kX2lub2RlLCBzdGF0KTsKKwlzdGF0LT5ubGluayA9IHByb2Nfcm9vdC5ubGluayArIG5yX3Byb2Nlc3NlcygpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY19yb290X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiBkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCS8qCi0JICogbnJfdGhyZWFkcyBpcyBhY3R1YWxseSBwcm90ZWN0ZWQgYnkgdGhlIHRhc2tsaXN0X2xvY2s7Ci0JICogaG93ZXZlciwgaXQncyBjb252ZW50aW9uYWwgdG8gZG8gcmVhZHMsIGVzcGVjaWFsbHkgZm9yCi0JICogcmVwb3J0aW5nLCB3aXRob3V0IGFueSBsb2NraW5nIHdoYXRzb2V2ZXIuCi0JICovCi0JaWYgKGRpci0+aV9pbm8gPT0gUFJPQ19ST09UX0lOTykgLyogY2hlY2sgZm9yIHNhZmV0eS4uLiAqLwotCQlkaXItPmlfbmxpbmsgPSBwcm9jX3Jvb3QubmxpbmsgKyBucl90aHJlYWRzOwotCiAJaWYgKCFwcm9jX2xvb2t1cChkaXIsIGRlbnRyeSwgbmQpKSB7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTEzNCw2ICsxMzQsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19yb290X2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmxvb2t1cAkJPSBwcm9jX3Jvb3RfbG9va3VwLAorCS5nZXRhdHRyCT0gcHJvY19yb290X2dldGF0dHIsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDBlYWFkNDEuLjkxYjdjMTUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTIwNCw3ICsyMDQsNiBAQAogewogCXB0ZV90ICpwdGUsIHB0ZW50OwogCXNwaW5sb2NrX3QgKnB0bDsKLQl1bnNpZ25lZCBsb25nIHBmbjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKQEAgLTIxNCwxMiArMjEzLDEyIEBACiAJCQljb250aW51ZTsKIAogCQltc3MtPnJlc2lkZW50ICs9IFBBR0VfU0laRTsKLQkJcGZuID0gcHRlX3BmbihwdGVudCk7Ci0JCWlmICghcGZuX3ZhbGlkKHBmbikpCisKKwkJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlbnQpOworCQlpZiAoIXBhZ2UpCiAJCQljb250aW51ZTsKIAotCQlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQkJaWYgKHBhZ2VfY291bnQocGFnZSkgPj0gMikgeworCQlpZiAocGFnZV9tYXBjb3VudChwYWdlKSA+PSAyKSB7CiAJCQlpZiAocHRlX2RpcnR5KHB0ZW50KSkKIAkJCQltc3MtPnNoYXJlZF9kaXJ0eSArPSBQQUdFX1NJWkU7CiAJCQllbHNlCkBAIC0yODksNyArMjg4LDcgQEAKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzOwogCiAJbWVtc2V0KCZtc3MsIDAsIHNpemVvZiBtc3MpOwotCWlmICh2bWEtPnZtX21tKQorCWlmICh2bWEtPnZtX21tICYmICFpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKIAkJc21hcHNfcGdkX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICZtc3MpOwogCXJldHVybiBzaG93X21hcF9pbnRlcm5hbChtLCB2LCAmbXNzKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3FueDQvZmlsZS5jIGIvZnMvcW54NC9maWxlLmMKaW5kZXggYjQ3MTMxNS4uYzMzOTYzZiAxMDA2NDQKLS0tIGEvZnMvcW54NC9maWxlLmMKKysrIGIvZnMvcW54NC9maWxlLmMKQEAgLTEyLDEwICsxMiw3IEBACiAgKiAyNy0wNi0xOTk4IGJ5IEZyYW5rIERlbmlzIDogZmlsZSBvdmVyd3JpdGluZy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9xbng0X2ZzLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9xbng0L2lub2RlLmMgYi9mcy9xbng0L2lub2RlLmMKaW5kZXggODBmMzI5MS4uMmVjZDQ2ZiAxMDA2NDQKLS0tIGEvZnMvcW54NC9pbm9kZS5jCisrKyBiL2ZzL3FueDQvaW5vZGUuYwpAQCAtNTQ2LDcgKzU0Niw4IEBACiB7CiAJcW54NF9pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicW54NF9pbm9kZV9jYWNoZSIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBxbng0X2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAocW54NF9pbm9kZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9xdW90YS5jIGIvZnMvcXVvdGEuYwppbmRleCBiYTllMGJmLi5kNmEyYmU4IDEwMDY0NAotLS0gYS9mcy9xdW90YS5jCisrKyBiL2ZzL3F1b3RhLmMKQEAgLTE3MCwxMCArMTcwLDEwIEBACiAKIAkvKiBOb3cgd2hlbiBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gd2UgY2FuIGRpc2NhcmQgdGhlIHBhZ2VjYWNoZSBzbwogCSAqIHRoYXQgdXNlcnNwYWNlIHNlZXMgdGhlIGNoYW5nZXMuIFdlIG5lZWQgaV9tdXRleCBhbmQgc28gd2UgY291bGQKLQkgKiBub3QgZG8gaXQgaW5zaWRlIGRxb25vZmZfc2VtLiBNb3Jlb3ZlciB3ZSBuZWVkIHRvIGJlIGNhcmVmdWxsCisJICogbm90IGRvIGl0IGluc2lkZSBkcW9ub2ZmX211dGV4LiBNb3Jlb3ZlciB3ZSBuZWVkIHRvIGJlIGNhcmVmdWxsCiAJICogYWJvdXQgcmFjZXMgd2l0aCBxdW90YW9mZigpICh0aGF0IGlzIHRoZSByZWFzb24gd2h5IHdlIGhhdmUgb3duCiAJICogcmVmZXJlbmNlIHRvIGlub2RlKS4gKi8KLQlkb3duKCZzYl9kcW9wdChzYiktPmRxb25vZmZfc2VtKTsKKwltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewogCQlkaXNjYXJkW2NudF0gPSBOVUxMOwogCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKQEAgLTE4Miw3ICsxODIsNyBAQAogCQkJY29udGludWU7CiAJCWRpc2NhcmRbY250XSA9IGlncmFiKHNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XSk7CiAJfQotCXVwKCZzYl9kcW9wdChzYiktPmRxb25vZmZfc2VtKTsKKwltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CiAJCWlmIChkaXNjYXJkW2NudF0pIHsKIAkJCW11dGV4X2xvY2soJmRpc2NhcmRbY250XS0+aV9tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9xdW90YV92Mi5jIGIvZnMvcXVvdGFfdjIuYwppbmRleCBiNDE5OWVjLi5jNTE5YTU4IDEwMDY0NAotLS0gYS9mcy9xdW90YV92Mi5jCisrKyBiL2ZzL3F1b3RhX3YyLmMKQEAgLTM5NCw3ICszOTQsNyBAQAogCXNzaXplX3QgcmV0OwogCXN0cnVjdCB2Ml9kaXNrX2RxYmxrIGRkcXVvdCwgZW1wdHk7CiAKLQkvKiBkcV9vZmYgaXMgZ3VhcmRlZCBieSBkcWlvX3NlbSAqLworCS8qIGRxX29mZiBpcyBndWFyZGVkIGJ5IGRxaW9fbXV0ZXggKi8KIAlpZiAoIWRxdW90LT5kcV9vZmYpCiAJCWlmICgocmV0ID0gZHFfaW5zZXJ0X3RyZWUoZHF1b3QpKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBFcnJvciAlemQgb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgcXVvdGEuXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvZmlsZS1tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbW11LmMKaW5kZXggMjExNTM4My4uNmFkYTIwOSAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1tbXUuYworKysgYi9mcy9yYW1mcy9maWxlLW1tdS5jCkBAIC0yNCwxOCArMjQsNyBAQAogICogY2FjaGVzIGlzIHN1ZmZpY2llbnQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgcmFtZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBzaW1wbGVfcmVhZHBhZ2UsCmRpZmYgLS1naXQgYS9mcy9yYW1mcy9maWxlLW5vbW11LmMgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKaW5kZXggM2Y4MTBhYy4uYjFjYTIzNCAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jCisrKyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwpAQCAtODcsOCArODcsNyBAQAogCXhwYWdlcyA9IDFVTCA8PCBvcmRlcjsKIAlucGFnZXMgPSAobmV3c2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiAKLQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbnBhZ2VzOyBsb29wKyspCi0JCXNldF9wYWdlX2NvdW50KHBhZ2VzICsgbG9vcCwgMSk7CisJc3BsaXRfcGFnZShwYWdlcywgb3JkZXIpOwogCiAJLyogdHJpbSBvZmYgYW55IHBhZ2VzIHdlIGRvbid0IGFjdHVhbGx5IHJlcXVpcmUgKi8KIAlmb3IgKGxvb3AgPSBucGFnZXM7IGxvb3AgPCB4cGFnZXM7IGxvb3ArKykKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2lub2RlLmMgYi9mcy9yYW1mcy9pbm9kZS5jCmluZGV4IGM2NmJkNWUuLjE0YmQyMjQgMTAwNjQ0Ci0tLSBhL2ZzL3JhbWZzL2lub2RlLmMKKysrIGIvZnMvcmFtZnMvaW5vZGUuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CkBAIC0xMDQsNiArMTA1LDcgQEAKIAkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAkJZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KIAkJZXJyb3IgPSAwOworCQlkaXItPmlfbXRpbWUgPSBkaXItPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJfQogCXJldHVybiBlcnJvcjsKIH0KQEAgLTEzNSw2ICsxMzcsNyBAQAogCQkJCWlub2RlLT5pX2dpZCA9IGRpci0+aV9naWQ7CiAJCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQkJZGdldChkZW50cnkpOworCQkJZGlyLT5pX210aW1lID0gZGlyLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQl9IGVsc2UKIAkJCWlwdXQoaW5vZGUpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCAzZjdhMWE2Li4zNGIxYmYyIDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC00NzAsNyArNDcwLDcgQEAKIAkgKiB2ZXJpZnkgYWxsIHRoZSBwb2ludGVycwogCSAqLwogCXJldCA9IC1FSU5WQUw7Ci0JaWYgKChucl9zZWdzID4gVUlPX01BWElPVikgfHwgKG5yX3NlZ3MgPD0gMCkpCisJaWYgKG5yX3NlZ3MgPiBVSU9fTUFYSU9WKQogCQlnb3RvIG91dDsKIAlpZiAoIWZpbGUtPmZfb3ApCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZmlsZS5jIGIvZnMvcmVpc2VyZnMvZmlsZS5jCmluZGV4IGYzNDczMTcuLmQwYzFlODYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2ZpbGUuYworKysgYi9mcy9yZWlzZXJmcy9maWxlLmMKQEAgLTE0NjQsMTMgKzE0NjQsMTEgQEAKIAkJICAgcGFydGlhbGx5IG92ZXJ3cml0dGVuIHBhZ2VzLCBpZiBuZWVkZWQuIEFuZCBsb2NrIHRoZSBwYWdlcywKIAkJICAgc28gdGhhdCBub2JvZHkgZWxzZSBjYW4gYWNjZXNzIHRoZXNlIHVudGlsIHdlIGFyZSBkb25lLgogCQkgICBXZSBnZXQgbnVtYmVyIG9mIGFjdHVhbCBibG9ja3MgbmVlZGVkIGFzIGEgcmVzdWx0LiAqLwotCQlibG9ja3NfdG9fYWxsb2NhdGUgPQotCQkgICAgcmVpc2VyZnNfcHJlcGFyZV9maWxlX3JlZ2lvbl9mb3Jfd3JpdGUoaW5vZGUsIHBvcywKLQkJCQkJCQkgICBudW1fcGFnZXMsCi0JCQkJCQkJICAgd3JpdGVfYnl0ZXMsCi0JCQkJCQkJICAgcHJlcGFyZWRfcGFnZXMpOwotCQlpZiAoYmxvY2tzX3RvX2FsbG9jYXRlIDwgMCkgewotCQkJcmVzID0gYmxvY2tzX3RvX2FsbG9jYXRlOworCQlyZXMgPSByZWlzZXJmc19wcmVwYXJlX2ZpbGVfcmVnaW9uX2Zvcl93cml0ZShpbm9kZSwgcG9zLAorCQkJCQkJCSAgICAgbnVtX3BhZ2VzLAorCQkJCQkJCSAgICAgd3JpdGVfYnl0ZXMsCisJCQkJCQkJICAgICBwcmVwYXJlZF9wYWdlcyk7CisJCWlmIChyZXMgPCAwKSB7CiAJCQlyZWlzZXJmc19yZWxlYXNlX2NsYWltZWRfYmxvY2tzKGlub2RlLT5pX3NiLAogCQkJCQkJCW51bV9wYWdlcyA8PAogCQkJCQkJCShQQUdFX0NBQ0hFX1NISUZUIC0KQEAgLTE0NzgsNiArMTQ3Niw4IEBACiAJCQlicmVhazsKIAkJfQogCisJCWJsb2Nrc190b19hbGxvY2F0ZSA9IHJlczsKKwogCQkvKiBGaXJzdCB3ZSBjb3JyZWN0IG91ciBlc3RpbWF0ZSBvZiBob3cgbWFueSBibG9ja3Mgd2UgbmVlZCAqLwogCQlyZWlzZXJmc19yZWxlYXNlX2NsYWltZWRfYmxvY2tzKGlub2RlLT5pX3NiLAogCQkJCQkJKG51bV9wYWdlcyA8PApAQCAtMTUzMiw3ICsxNTMyLDcgQEAKIAkJYnVmICs9IHdyaXRlX2J5dGVzOwogCQkqcHBvcyA9IHBvcyArPSB3cml0ZV9ieXRlczsKIAkJY291bnQgLT0gd3JpdGVfYnl0ZXM7Ci0JCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWQoaW5vZGUtPmlfbWFwcGluZyk7CisJCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIoaW5vZGUtPmlfbWFwcGluZywgbnVtX3BhZ2VzKTsKIAl9CiAKIAkvKiB0aGlzIGlzIG9ubHkgdHJ1ZSBvbiBlcnJvciAqLwpAQCAtMTU0NiwxMCArMTU0NiwxMCBAQAogCQl9CiAJfQogCi0JaWYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkKLQkJcmVzID0KLQkJICAgIGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIGZpbGUtPmZfbWFwcGluZywKLQkJCQkJT1NZTkNfTUVUQURBVEEgfCBPU1lOQ19EQVRBKTsKKwlpZiAobGlrZWx5KHJlcyA+PSAwKSAmJgorCSAgICAodW5saWtlbHkoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkpCisJCXJlcyA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIGZpbGUtPmZfbWFwcGluZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBPU1lOQ19NRVRBREFUQSB8IE9TWU5DX0RBVEEpOwogCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmVpc2VyZnNfYXN5bmNfcHJvZ3Jlc3Nfd2FpdChpbm9kZS0+aV9zYik7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maXhfbm9kZS5jIGIvZnMvcmVpc2VyZnMvZml4X25vZGUuYwppbmRleCBhYTIyNTg4Li41NjAwZDNkIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9maXhfbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMKQEAgLTE5MSw5ICsxOTEsNyBAQAogCQkJCQkgICAgICAgInZzLTgwNDU6IGNyZWF0ZV92aXJ0dWFsX25vZGU6IHJka2V5ICVrLCBhZmZlY3RlZCBpdGVtPT0lZCAobW9kZT09JWMpIE11c3QgYmUgJWMiLAogCQkJCQkgICAgICAga2V5LCB2bi0+dm5fYWZmZWN0ZWRfaXRlbV9udW0sCiAJCQkJCSAgICAgICB2bi0+dm5fbW9kZSwgTV9ERUxFVEUpOwotCQkJfSBlbHNlCi0JCQkJLyogd2UgY2FuIGRlbGV0ZSBkaXJlY3RvcnkgaXRlbSwgdGhhdCBoYXMgb25seSBvbmUgZGlyZWN0b3J5IGVudHJ5IGluIGl0ICovCi0JCQkJOworCQkJfQogCQl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggYjMzZDY3Yi4uZDYwZjYyMyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC02MjcsMTEgKzYyNyw2IEBACiAJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAJdmVyc2lvbiA9IGdldF9pbm9kZV9pdGVtX2tleV92ZXJzaW9uKGlub2RlKTsKIAotCWlmIChibG9jayA8IDApIHsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCiAJaWYgKCFmaWxlX2NhcGFibGUoaW5vZGUsIGJsb2NrKSkgewogCQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCQlyZXR1cm4gLUVGQklHOwpAQCAtOTM0LDEyICs5MjksMTMgQEAKIAkJCQkgICAgIC8vcG9zX2luX2l0ZW0gKiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUsCiAJCQkJICAgICBUWVBFX0lORElSRUNULCAzKTsJLy8ga2V5IHR5cGUgaXMgdW5pbXBvcnRhbnQKIAorCQkJUkZBTFNFKGNwdV9rZXlfa19vZmZzZXQoJnRtcF9rZXkpID4gY3B1X2tleV9rX29mZnNldCgma2V5KSwKKwkJCSAgICAgICAiZ3JlZW4tODA1OiBpbnZhbGlkIG9mZnNldCIpOwogCQkJYmxvY2tzX25lZWRlZCA9CiAJCQkgICAgMSArCiAJCQkgICAgKChjcHVfa2V5X2tfb2Zmc2V0KCZrZXkpIC0KIAkJCSAgICAgIGNwdV9rZXlfa19vZmZzZXQoJnRtcF9rZXkpKSA+PiBpbm9kZS0+aV9zYi0+CiAJCQkgICAgIHNfYmxvY2tzaXplX2JpdHMpOwotCQkJUkZBTFNFKGJsb2Nrc19uZWVkZWQgPCAwLCAiZ3JlZW4tODA1OiBpbnZhbGlkIG9mZnNldCIpOwogCiAJCQlpZiAoYmxvY2tzX25lZWRlZCA9PSAxKSB7CiAJCQkJdW4gPSAmdW5mX3NpbmdsZTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMgYi9mcy9yZWlzZXJmcy9pdGVtX29wcy5jCmluZGV4IGUyMzdjZDYuLjdhODhhZGIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMKKysrIGIvZnMvcmVpc2VyZnMvaXRlbV9vcHMuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJaW50IGo7CiAJX19sZTMyICp1bnA7CiAJX191MzIgcHJldiA9IElOVF9NQVg7Ci0JaW50IG51bTsKKwlpbnQgbnVtID0gMDsKIAogCXVucCA9IChfX2xlMzIgKikgaXRlbTsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IGI3YTE3OTUuLjFiNzM1MjkgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTIyMjcsNiArMjIyNyw5IEBACiAJam91cm5hbC0+al9zdGFydCA9IGN1cl9kYmxvY2sgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKTsKIAlqb3VybmFsLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQgPSB0cmFuc19pZDsKIAlqb3VybmFsLT5qX3RyYW5zX2lkID0gdHJhbnNfaWQgKyAxOworCS8qIGNoZWNrIGZvciB0cmFuc19pZCBvdmVyZmxvdyAqLworCWlmIChqb3VybmFsLT5qX3RyYW5zX2lkID09IDApCisJCWpvdXJuYWwtPmpfdHJhbnNfaWQgPSAxMDsKIAlicmVsc2UoY19iaCk7CiAJYnJlbHNlKGRfYmgpOwogCWtmcmVlKGxvZ19ibG9ja3MpOwpAQCAtMjMxOSw4ICsyMzIyLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCWpoID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2hlYWRlciAqKShqb3VybmFsLT5qX2hlYWRlcl9iaC0+Yl9kYXRhKTsKLQlpZiAobGUzMl90b19jcHUoamgtPmpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCkgPj0gMCAmJgotCSAgICBsZTMyX3RvX2NwdShqaC0+al9maXJzdF91bmZsdXNoZWRfb2Zmc2V0KSA8CisJaWYgKGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpIDwKIAkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpCiAJICAgICYmIGxlMzJfdG9fY3B1KGpoLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpID4gMCkgewogCQlvbGRlc3Rfc3RhcnQgPQpAQCAtMjQ1MSw2ICsyNDUzLDkgQEAKIAkJam91cm5hbC0+al9zdGFydCA9IGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpOwogCQlqb3VybmFsLT5qX3RyYW5zX2lkID0KIAkJICAgIGxlMzJfdG9fY3B1KGpoLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpICsgMTsKKwkJLyogY2hlY2sgZm9yIHRyYW5zX2lkIG92ZXJmbG93ICovCisJCWlmIChqb3VybmFsLT5qX3RyYW5zX2lkID09IDApCisJCQlqb3VybmFsLT5qX3RyYW5zX2lkID0gMTA7CiAJCWpvdXJuYWwtPmpfbGFzdF9mbHVzaF90cmFuc19pZCA9CiAJCSAgICBsZTMyX3RvX2NwdShqaC0+al9sYXN0X2ZsdXNoX3RyYW5zX2lkKTsKIAkJam91cm5hbC0+al9tb3VudF9pZCA9IGxlMzJfdG9fY3B1KGpoLT5qX21vdW50X2lkKSArIDE7CkBAIC0zODc0LDggKzM4NzksOCBAQAogCWludCBjdXJfd3JpdGVfc3RhcnQgPSAwOwkvKiBzdGFydCBpbmRleCBvZiBjdXJyZW50IGxvZyB3cml0ZSAqLwogCWludCBvbGRfc3RhcnQ7CiAJaW50IGk7Ci0JaW50IGZsdXNoID0gZmxhZ3MgJiBGTFVTSF9BTEw7Ci0JaW50IHdhaXRfb25fY29tbWl0ID0gZmxhZ3MgJiBXQUlUOworCWludCBmbHVzaDsKKwlpbnQgd2FpdF9vbl9jb21taXQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsICp0ZW1wX2psOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqc2FmZTsKIAl1bnNpZ25lZCBsb25nIGppbmRleDsKQEAgLTM4ODUsNiArMzg5MCwxMyBAQAogCUJVR19PTih0aC0+dF9yZWZjb3VudCA+IDEpOwogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCisJLyogcHJvdGVjdCBmbHVzaF9vbGRlcl9jb21taXRzIGZyb20gZG9pbmcgbWlzdGFrZXMgaWYgdGhlCisgICAgICAgICAgIHRyYW5zYWN0aW9uIElEIGNvdW50ZXIgZ2V0cyBvdmVyZmxvd2VkLiAgKi8KKwlpZiAodGgtPnRfdHJhbnNfaWQgPT0gfjBVTCkKKwkJZmxhZ3MgfD0gRkxVU0hfQUxMIHwgQ09NTUlUX05PVyB8IFdBSVQ7CisJZmx1c2ggPSBmbGFncyAmIEZMVVNIX0FMTDsKKwl3YWl0X29uX2NvbW1pdCA9IGZsYWdzICYgV0FJVDsKKwogCXB1dF9mc19leGNsKCk7CiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gdGgtPnRfaGFuZGxlX3NhdmU7CiAJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChwX3Nfc2IsICJqb3VybmFsIGVuZCIpOwpAQCAtNDEwNiw3ICs0MTE4LDkgQEAKIAlqb3VybmFsLT5qX2ZpcnN0ID0gTlVMTDsKIAlqb3VybmFsLT5qX2xlbiA9IDA7CiAJam91cm5hbC0+al90cmFuc19zdGFydF90aW1lID0gMDsKLQlqb3VybmFsLT5qX3RyYW5zX2lkKys7CisJLyogY2hlY2sgZm9yIHRyYW5zX2lkIG92ZXJmbG93ICovCisJaWYgKCsram91cm5hbC0+al90cmFuc19pZCA9PSAwKQorCQlqb3VybmFsLT5qX3RyYW5zX2lkID0gMTA7CiAJam91cm5hbC0+al9jdXJyZW50X2psLT5qX3RyYW5zX2lkID0gam91cm5hbC0+al90cmFuc19pZDsKIAlqb3VybmFsLT5qX211c3Rfd2FpdCA9IDA7CiAJam91cm5hbC0+al9sZW5fYWxsb2MgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbmFtZWkuYyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKaW5kZXggYzgxMjMzMC4uMjg0Zjc4NSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbmFtZWkuYworKysgYi9mcy9yZWlzZXJmcy9uYW1laS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAkJLyogbWFyaywgdGhhdCB0aGlzIGdlbmVyYXRpb24gbnVtYmVyIGlzIHVzZWQgKi8KIAkJaWYgKGRlLT5kZV9nZW5fbnVtYmVyX2JpdF9zdHJpbmcpCiAJCQlzZXRfYml0KEdFVF9HRU5FUkFUSU9OX05VTUJFUihkZWhfb2Zmc2V0KGRlaCkpLAotCQkJCSh1bnNpZ25lZCBsb25nICopZGUtPmRlX2dlbl9udW1iZXJfYml0X3N0cmluZyk7CisJCQkJZGUtPmRlX2dlbl9udW1iZXJfYml0X3N0cmluZyk7CiAKIAkJLy8gY2FsY3VsYXRlIHBvaW50ZXIgdG8gbmFtZSBhbmQgbmFtZWxlbgogCQlkZS0+ZGVfZW50cnlfbnVtID0gaTsKQEAgLTQzMSw3ICs0MzEsNyBAQAogCXN0cnVjdCByZWlzZXJmc19kZV9oZWFkICpkZWg7CiAJSU5JVElBTElaRV9QQVRIKHBhdGgpOwogCXN0cnVjdCByZWlzZXJmc19kaXJfZW50cnkgZGU7Ci0JaW50IGJpdF9zdHJpbmdbTUFYX0dFTkVSQVRJT05fTlVNQkVSIC8gKHNpemVvZihpbnQpICogOCkgKyAxXTsKKwlERUNMQVJFX0JJVE1BUChiaXRfc3RyaW5nLCBNQVhfR0VORVJBVElPTl9OVU1CRVIgKyAxKTsKIAlpbnQgZ2VuX251bWJlcjsKIAljaGFyIHNtYWxsX2J1ZlszMiArIERFSF9TSVpFXTsJLyogNDggYnl0ZXMgbm93IGFuZCB3ZSBhdm9pZCBrbWFsbG9jCiAJCQkJCSAgIGlmIHdlIGNyZWF0ZSBmaWxlIHdpdGggc2hvcnQgbmFtZSAqLwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAKIAkvKiBmaW5kIHRoZSBwcm9wZXIgcGxhY2UgZm9yIHRoZSBuZXcgZW50cnkgKi8KIAltZW1zZXQoYml0X3N0cmluZywgMCwgc2l6ZW9mKGJpdF9zdHJpbmcpKTsKLQlkZS5kZV9nZW5fbnVtYmVyX2JpdF9zdHJpbmcgPSAoY2hhciAqKWJpdF9zdHJpbmc7CisJZGUuZGVfZ2VuX251bWJlcl9iaXRfc3RyaW5nID0gYml0X3N0cmluZzsKIAlyZXR2YWwgPSByZWlzZXJmc19maW5kX2VudHJ5KGRpciwgbmFtZSwgbmFtZWxlbiwgJnBhdGgsICZkZSk7CiAJaWYgKHJldHZhbCAhPSBOQU1FX05PVF9GT1VORCkgewogCQlpZiAoYnVmZmVyICE9IHNtYWxsX2J1ZikKQEAgLTUwOCw3ICs1MDgsNyBAQAogCX0KIAogCWdlbl9udW1iZXIgPQotCSAgICBmaW5kX2ZpcnN0X3plcm9fYml0KCh1bnNpZ25lZCBsb25nICopYml0X3N0cmluZywKKwkgICAgZmluZF9maXJzdF96ZXJvX2JpdChiaXRfc3RyaW5nLAogCQkJCU1BWF9HRU5FUkFUSU9OX05VTUJFUiArIDEpOwogCWlmIChnZW5fbnVtYmVyID4gTUFYX0dFTkVSQVRJT05fTlVNQkVSKSB7CiAJCS8qIHRoZXJlIGlzIG5vIGZyZWUgZ2VuZXJhdGlvbiBudW1iZXIgKi8KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3ByaW50cy5jIGIvZnMvcmVpc2VyZnMvcHJpbnRzLmMKaW5kZXggZDU1ZTE2NC4uNzhiNDA2MiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJpbnRzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJpbnRzLmMKQEAgLTYwMSw4ICs2MDEsNyBAQAogCQl0Yi0+dGJfbW9kZSwgUEFUSF9MQVNUX1BPU0lUSU9OKHRiLT50Yl9wYXRoKSwKIAkJdGItPnRiX3BhdGgtPnBvc19pbl9pdGVtKTsKIAotCWZvciAoaCA9IDA7IGggPCBzaXplb2YodGItPmluc2VydF9zaXplKSAvIHNpemVvZih0Yi0+aW5zZXJ0X3NpemVbMF0pOwotCSAgICAgaCsrKSB7CisJZm9yIChoID0gMDsgaCA8IEFSUkFZX1NJWkUodGItPmluc2VydF9zaXplKTsgaCsrKSB7CiAJCWlmIChQQVRIX0hfUEFUSF9PRkZTRVQodGItPnRiX3BhdGgsIGgpIDw9CiAJCSAgICB0Yi0+dGJfcGF0aC0+cGF0aF9sZW5ndGgKIAkJICAgICYmIFBBVEhfSF9QQVRIX09GRlNFVCh0Yi0+dGJfcGF0aCwKQEAgLTY1OCwxNSArNjU3LDEzIEBACiAKIAkvKiBwcmludCBGRUIgbGlzdCAobGlzdCBvZiBidWZmZXJzIGluIGZvcm0gKGJoIChiX2Jsb2NrbnIsIGJfY291bnQpLCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgbmV3IG5vZGVzKSAqLwogCWggPSAwOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodGItPkZFQikgLyBzaXplb2YodGItPkZFQlswXSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0Yi0+RkVCKTsgaSsrKQogCQlzcHJpbnRmKHByaW50X3RiX2J1ZiArIHN0cmxlbihwcmludF90Yl9idWYpLAogCQkJIiVwICglbGx1ICVkKSVzIiwgdGItPkZFQltpXSwKIAkJCXRiLT5GRUJbaV0gPyAodW5zaWduZWQgbG9uZyBsb25nKXRiLT5GRUJbaV0tPgogCQkJYl9ibG9ja25yIDogMFVMTCwKIAkJCXRiLT5GRUJbaV0gPyBhdG9taWNfcmVhZCgmKHRiLT5GRUJbaV0tPmJfY291bnQpKSA6IDAsCi0JCQkoaSA9PQotCQkJIHNpemVvZih0Yi0+RkVCKSAvIHNpemVvZih0Yi0+RkVCWzBdKSAtCi0JCQkgMSkgPyAiXG4iIDogIiwgIik7CisJCQkoaSA9PSBBUlJBWV9TSVpFKHRiLT5GRUIpIC0gMSkgPyAiXG4iIDogIiwgIik7CiAKIAlzcHJpbnRmKHByaW50X3RiX2J1ZiArIHN0cmxlbihwcmludF90Yl9idWYpLAogCQkiPT09PT09PT09PT09PT09PT09PT09PT09IHRoZSBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCmluZGV4IGUyZDA4ZDcuLmQyYjI1ZTEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMKKysrIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwpAQCAtOTgxLDYgKzk4MSw4IEBACiAJcmV0dXJuIE1fQ1VUOwogfQogCisjZGVmaW5lIEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCAoMiAqIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICsgMSkKKwogLyogIElmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSBvciBkaXJlY3QgaXRlbSwgY2FsY3VsYXRlIG1vZGUgYW5kIHRoZSBzaXplIGN1dCwgZm9yIGJhbGFuY2UuCiAgICAgSWYgdGhlIHBhdGggcG9pbnRzIHRvIGFuIGluZGlyZWN0IGl0ZW0sIHJlbW92ZSBzb21lIG51bWJlciBvZiBpdHMgdW5mb3JtYXR0ZWQgbm9kZXMuCiAgICAgSW4gY2FzZSBvZiBmaWxlIHRydW5jYXRlIGNhbGN1bGF0ZSB3aGV0aGVyIHRoaXMgaXRlbSBtdXN0IGJlIGRlbGV0ZWQvdHJ1bmNhdGVkIG9yIGxhc3QKQEAgLTEwMjAsMTQ4ICsxMDIyLDc5IEBACiAKIAkvKiBDYXNlIG9mIGFuIGluZGlyZWN0IGl0ZW0uICovCiAJewotCQlpbnQgbl91bmZtX251bWJlciwJLyogTnVtYmVyIG9mIHRoZSBpdGVtIHVuZm9ybWF0dGVkIG5vZGVzLiAqLwotCQkgbl9jb3VudGVyLCBuX2Jsa19zaXplOwotCQlfX2xlMzIgKnBfbl91bmZtX3BvaW50ZXI7CS8qIFBvaW50ZXIgdG8gdGhlIHVuZm9ybWF0dGVkIG5vZGUgbnVtYmVyLiAqLwotCQlfX3UzMiB0bXA7Ci0JCXN0cnVjdCBpdGVtX2hlYWQgc19paDsJLyogSXRlbSBoZWFkZXIuICovCi0JCWNoYXIgY19tb2RlOwkvKiBSZXR1cm5lZCBtb2RlIG9mIHRoZSBiYWxhbmNlLiAqLwotCQlpbnQgbmVlZF9yZXNlYXJjaDsKKwkgICAgaW50IGJsa19zaXplID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwkgICAgc3RydWN0IGl0ZW1faGVhZCBzX2loOworCSAgICBpbnQgbmVlZF9yZV9zZWFyY2g7CisJICAgIGludCBkZWxldGUgPSAwOworCSAgICBpbnQgcmVzdWx0ID0gTV9DVVQ7CisJICAgIGludCBwb3MgPSAwOwogCi0JCW5fYmxrX3NpemUgPSBwX3Nfc2ItPnNfYmxvY2tzaXplOworCSAgICBpZiAoIG5fbmV3X2ZpbGVfbGVuZ3RoID09IG1heF9yZWlzZXJmc19vZmZzZXQgKGlub2RlKSApIHsKKwkJLyogcHJlcGFyZV9mb3JfZGVsZXRlX29yX2N1dCgpIGlzIGNhbGxlZCBieQorCQkgKiByZWlzZXJmc19kZWxldGVfaXRlbSgpICovCisJCW5fbmV3X2ZpbGVfbGVuZ3RoID0gMDsKKwkJZGVsZXRlID0gMTsKKwkgICAgfQogCi0JCS8qIFNlYXJjaCBmb3IgdGhlIG5lZWRlZCBvYmplY3QgaW5kaXJlY3QgaXRlbSB1bnRpbCB0aGVyZSBhcmUgbm8gdW5mb3JtYXR0ZWQgbm9kZXMgdG8gYmUgcmVtb3ZlZC4gKi8KLQkJZG8gewotCQkJbmVlZF9yZXNlYXJjaCA9IDA7Ci0JCQlwX3NfYmggPSBQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCk7Ci0JCQkvKiBDb3B5IGluZGlyZWN0IGl0ZW0gaGVhZGVyIHRvIGEgdGVtcCB2YXJpYWJsZS4gKi8KLQkJCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocF9zX3BhdGgpKTsKLQkJCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgdW5mb3JtYXR0ZWQgbm9kZXMgaW4gdGhpcyBpdGVtLiAqLwotCQkJbl91bmZtX251bWJlciA9IElfVU5GTV9OVU0oJnNfaWgpOworCSAgICBkbyB7CisJCW5lZWRfcmVfc2VhcmNoID0gMDsKKwkJKnBfbl9jdXRfc2l6ZSA9IDA7CisJCXBfc19iaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKTsKKwkJY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCQlwb3MgPSBJX1VORk1fTlVNKCZzX2loKTsKIAotCQkJUkZBTFNFKCFpc19pbmRpcmVjdF9sZV9paCgmc19paCkgfHwgIW5fdW5mbV9udW1iZXIgfHwKLQkJCSAgICAgICBwb3NfaW5faXRlbShwX3NfcGF0aCkgKyAxICE9IG5fdW5mbV9udW1iZXIsCi0JCQkgICAgICAgIlBBUC01MjQwOiBpbnZhbGlkIGl0ZW0gJWggIgotCQkJICAgICAgICJuX3VuZm1fbnVtYmVyID0gJWQgKnBfbl9wb3NfaW5faXRlbSA9ICVkIiwKLQkJCSAgICAgICAmc19paCwgbl91bmZtX251bWJlciwgcG9zX2luX2l0ZW0ocF9zX3BhdGgpKTsKKwkJd2hpbGUgKGxlX2loX2tfb2Zmc2V0ICgmc19paCkgKyAocG9zIC0gMSkgKiBibGtfc2l6ZSA+IG5fbmV3X2ZpbGVfbGVuZ3RoKSB7CisJCSAgICBfX3UzMiAqdW5mbSwgYmxvY2s7CiAKLQkJCS8qIENhbGN1bGF0ZSBiYWxhbmNlIG1vZGUgYW5kIHBvc2l0aW9uIGluIHRoZSBpdGVtIHRvIHJlbW92ZSB1bmZvcm1hdHRlZCBub2Rlcy4gKi8KLQkJCWlmIChuX25ld19maWxlX2xlbmd0aCA9PSBtYXhfcmVpc2VyZnNfb2Zmc2V0KGlub2RlKSkgewkvKiBDYXNlIG9mIGRlbGV0ZS4gKi8KLQkJCQlwb3NfaW5faXRlbShwX3NfcGF0aCkgPSAwOwotCQkJCSpwX25fY3V0X3NpemUgPSAtKElIX1NJWkUgKyBpaF9pdGVtX2xlbigmc19paCkpOwotCQkJCWNfbW9kZSA9IE1fREVMRVRFOwotCQkJfSBlbHNlIHsJLyogQ2FzZSBvZiB0cnVuY2F0ZS4gKi8KLQkJCQlpZiAobl9uZXdfZmlsZV9sZW5ndGggPCBsZV9paF9rX29mZnNldCgmc19paCkpIHsKLQkJCQkJcG9zX2luX2l0ZW0ocF9zX3BhdGgpID0gMDsKLQkJCQkJKnBfbl9jdXRfc2l6ZSA9Ci0JCQkJCSAgICAtKElIX1NJWkUgKyBpaF9pdGVtX2xlbigmc19paCkpOwotCQkJCQljX21vZGUgPSBNX0RFTEVURTsJLyogRGVsZXRlIHRoaXMgaXRlbS4gKi8KLQkJCQl9IGVsc2UgewotCQkJCQkvKiBpbmRpcmVjdCBpdGVtIG11c3QgYmUgdHJ1bmNhdGVkIHN0YXJ0aW5nIGZyb20gKnBfbl9wb3NfaW5faXRlbS10aCBwb3NpdGlvbiAqLwotCQkJCQlwb3NfaW5faXRlbShwX3NfcGF0aCkgPQotCQkJCQkgICAgKG5fbmV3X2ZpbGVfbGVuZ3RoICsgbl9ibGtfc2l6ZSAtCi0JCQkJCSAgICAgbGVfaWhfa19vZmZzZXQoJnNfaWgpKSA+PiBwX3Nfc2ItPgotCQkJCQkgICAgc19ibG9ja3NpemVfYml0czsKKwkJICAgIC8qIEVhY2ggdW5mb3JtYXR0ZWQgYmxvY2sgZGVsZXRpb24gbWF5IGludm9sdmUgb25lIGFkZGl0aW9uYWwKKwkJICAgICAqIGJpdG1hcCBibG9jayBpbnRvIHRoZSB0cmFuc2FjdGlvbiwgdGhlcmVieSB0aGUgaW5pdGlhbAorCQkgICAgICogam91cm5hbCBzcGFjZSByZXNlcnZhdGlvbiBtaWdodCBub3QgYmUgZW5vdWdoLiAqLworCQkgICAgaWYgKCFkZWxldGUgJiYgKCpwX25fY3V0X3NpemUpICE9IDAgJiYKKwkJCXJlaXNlcmZzX3RyYW5zYWN0aW9uX2ZyZWVfc3BhY2UodGgpIDwgSk9VUk5BTF9GT1JfRlJFRV9CTE9DS19BTkRfVVBEQVRFX1NEKSB7CisJCQlicmVhazsKKwkJICAgIH0KIAotCQkJCQlSRkFMU0UocG9zX2luX2l0ZW0ocF9zX3BhdGgpID4KLQkJCQkJICAgICAgIG5fdW5mbV9udW1iZXIsCi0JCQkJCSAgICAgICAiUEFQLTUyNTA6IGludmFsaWQgcG9zaXRpb24gaW4gdGhlIGl0ZW0iKTsKKwkJICAgIHVuZm0gPSAoX191MzIgKilCX0lfUElURU0ocF9zX2JoLCAmc19paCkgKyBwb3MgLSAxOworCQkgICAgYmxvY2sgPSBnZXRfYmxvY2tfbnVtKHVuZm0sIDApOwogCi0JCQkJCS8qIEVpdGhlciBjb252ZXJ0IGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSBvZiBpbmRpcmVjdCBpdGVtIHRvIGRpcmVjdCBpdGVtIG9yIGluY3JlYXNlCi0JCQkJCSAgIGl0cyBmcmVlIHNwYWNlLiAgKi8KLQkJCQkJaWYgKHBvc19pbl9pdGVtKHBfc19wYXRoKSA9PQotCQkJCQkgICAgbl91bmZtX251bWJlcikgewotCQkJCQkJKnBfbl9jdXRfc2l6ZSA9IDA7CS8qIE5vdGhpbmcgdG8gY3V0LiAqLwotCQkJCQkJcmV0dXJuIE1fQ09OVkVSVDsJLyogTWF5YmUgY29udmVydCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgdG8gdGhlIGRpcmVjdCBpdGVtLiAqLwotCQkJCQl9Ci0JCQkJCS8qIENhbGN1bGF0ZSBzaXplIHRvIGN1dC4gKi8KLQkJCQkJKnBfbl9jdXRfc2l6ZSA9Ci0JCQkJCSAgICAtKGloX2l0ZW1fbGVuKCZzX2loKSAtCi0JCQkJCSAgICAgIHBvc19pbl9pdGVtKHBfc19wYXRoKSAqCi0JCQkJCSAgICAgIFVORk1fUF9TSVpFKTsKLQotCQkJCQljX21vZGUgPSBNX0NVVDsJLyogQ3V0IGZyb20gdGhpcyBpbmRpcmVjdCBpdGVtLiAqLwotCQkJCX0KLQkJCX0KLQotCQkJUkZBTFNFKG5fdW5mbV9udW1iZXIgPD0gcG9zX2luX2l0ZW0ocF9zX3BhdGgpLAotCQkJICAgICAgICJQQVAtNTI2MDogaW52YWxpZCBwb3NpdGlvbiBpbiB0aGUgaW5kaXJlY3QgaXRlbSIpOwotCi0JCQkvKiBwb2ludGVycyB0byBiZSBjdXQgKi8KLQkJCW5fdW5mbV9udW1iZXIgLT0gcG9zX2luX2l0ZW0ocF9zX3BhdGgpOwotCQkJLyogU2V0IHBvaW50ZXIgdG8gdGhlIGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyIHRoYXQgaXMgdG8gYmUgY3V0LiAqLwotCQkJcF9uX3VuZm1fcG9pbnRlciA9Ci0JCQkgICAgKF9fbGUzMiAqKSBCX0lfUElURU0ocF9zX2JoLAotCQkJCQkJICZzX2loKSArIElfVU5GTV9OVU0oJnNfaWgpIC0KLQkJCSAgICAxIC0gKnBfbl9yZW1vdmVkOwotCi0JCQkvKiBXZSBnbyB0aHJvdWdoIHRoZSB1bmZvcm1hdHRlZCBub2RlcyBwb2ludGVycyBvZiB0aGUgaW5kaXJlY3QKLQkJCSAgIGl0ZW0gYW5kIGxvb2sgZm9yIHRoZSB1bmZvcm1hdHRlZCBub2RlcyBpbiB0aGUgY2FjaGUuIElmIHdlCi0JCQkgICBmb3VuZCBzb21lIG9mIHRoZW0gd2UgZnJlZSBpdCwgemVybyBjb3JyZXNwb25kaW5nIGluZGlyZWN0IGl0ZW0KLQkJCSAgIGVudHJ5IGFuZCBsb2cgYnVmZmVyIGNvbnRhaW5pbmcgdGhhdCBpbmRpcmVjdCBpdGVtLiBGb3IgdGhpcyB3ZQotCQkJICAgbmVlZCB0byBwcmVwYXJlIGxhc3QgcGF0aCBlbGVtZW50IGZvciBsb2dnaW5nLiBJZiBzb21lCi0JCQkgICB1bmZvcm1hdHRlZCBub2RlIGhhcyBiX2NvdW50ID4gMSB3ZSBtdXN0IG5vdCBmcmVlIHRoaXMKLQkJCSAgIHVuZm9ybWF0dGVkIG5vZGUgc2luY2UgaXQgaXMgaW4gdXNlLiAqLworCQkgICAgaWYgKGJsb2NrICE9IDApIHsKIAkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3NiLCBwX3NfYmgsIDEpOwotCQkJLy8gbm90ZTogcGF0aCBjb3VsZCBiZSBjaGFuZ2VkLCBmaXJzdCBsaW5lIGluIGZvciBsb29wIHRha2VzIGNhcmUKLQkJCS8vIG9mIGl0CisJCQlwdXRfYmxvY2tfbnVtKHVuZm0sIDAsIDApOworCQkJam91cm5hbF9tYXJrX2RpcnR5ICh0aCwgcF9zX3NiLCBwX3NfYmgpOworCQkJcmVpc2VyZnNfZnJlZV9ibG9jayh0aCwgaW5vZGUsIGJsb2NrLCAxKTsKKwkJICAgIH0KIAotCQkJZm9yIChuX2NvdW50ZXIgPSAqcF9uX3JlbW92ZWQ7Ci0JCQkgICAgIG5fY291bnRlciA8IG5fdW5mbV9udW1iZXI7Ci0JCQkgICAgIG5fY291bnRlcisrLCBwX25fdW5mbV9wb2ludGVyLS0pIHsKKwkJICAgIGNvbmRfcmVzY2hlZCgpOwogCi0JCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQkJaWYgKGl0ZW1fbW92ZWQoJnNfaWgsIHBfc19wYXRoKSkgewotCQkJCQluZWVkX3Jlc2VhcmNoID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCVJGQUxTRShwX25fdW5mbV9wb2ludGVyIDwKLQkJCQkgICAgICAgKF9fbGUzMiAqKSBCX0lfUElURU0ocF9zX2JoLCAmc19paCkKLQkJCQkgICAgICAgfHwgcF9uX3VuZm1fcG9pbnRlciA+Ci0JCQkJICAgICAgIChfX2xlMzIgKikgQl9JX1BJVEVNKHBfc19iaCwKLQkJCQkJCQkgICAgJnNfaWgpICsKLQkJCQkgICAgICAgSV9VTkZNX05VTSgmc19paCkgLSAxLAotCQkJCSAgICAgICAidnMtNTI2NTogcG9pbnRlciBvdXQgb2YgcmFuZ2UiKTsKKwkJICAgIGlmIChpdGVtX21vdmVkICgmc19paCwgcF9zX3BhdGgpKSAgeworCQkJbmVlZF9yZV9zZWFyY2ggPSAxOworCQkJYnJlYWs7CisJCSAgICB9CiAKLQkJCQkvKiBIb2xlLCBub3RoaW5nIHRvIHJlbW92ZS4gKi8KLQkJCQlpZiAoIWdldF9ibG9ja19udW0ocF9uX3VuZm1fcG9pbnRlciwgMCkpIHsKLQkJCQkJKCpwX25fcmVtb3ZlZCkrKzsKLQkJCQkJY29udGludWU7Ci0JCQkJfQorCQkgICAgcG9zIC0tOworCQkgICAgKCpwX25fcmVtb3ZlZCkgKys7CisJCSAgICAoKnBfbl9jdXRfc2l6ZSkgLT0gVU5GTV9QX1NJWkU7CiAKLQkJCQkoKnBfbl9yZW1vdmVkKSsrOworCQkgICAgaWYgKHBvcyA9PSAwKSB7CisJCQkoKnBfbl9jdXRfc2l6ZSkgLT0gSUhfU0laRTsKKwkJCXJlc3VsdCA9IE1fREVMRVRFOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkJLyogYSB0cmljay4gIElmIHRoZSBidWZmZXIgaGFzIGJlZW4gbG9nZ2VkLCB0aGlzIHdpbGwgZG8gbm90aGluZy4gIElmCisJCSoqIHdlJ3ZlIGJyb2tlbiB0aGUgbG9vcCB3aXRob3V0IGxvZ2dpbmcgaXQsIGl0IHdpbGwgcmVzdG9yZSB0aGUKKwkJKiogYnVmZmVyICovCisJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc19zYiwgcF9zX2JoKTsKKwkgICAgfSB3aGlsZSAobmVlZF9yZV9zZWFyY2ggJiYKKwkJICAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwgcF9zX3BhdGgpID09IFBPU0lUSU9OX0ZPVU5EKTsKKwkgICAgcG9zX2luX2l0ZW0ocF9zX3BhdGgpID0gcG9zICogVU5GTV9QX1NJWkU7CiAKLQkJCQl0bXAgPSBnZXRfYmxvY2tfbnVtKHBfbl91bmZtX3BvaW50ZXIsIDApOwotCQkJCXB1dF9ibG9ja19udW0ocF9uX3VuZm1fcG9pbnRlciwgMCwgMCk7Ci0JCQkJam91cm5hbF9tYXJrX2RpcnR5KHRoLCBwX3Nfc2IsIHBfc19iaCk7Ci0JCQkJcmVpc2VyZnNfZnJlZV9ibG9jayh0aCwgaW5vZGUsIHRtcCwgMSk7Ci0JCQkJaWYgKGl0ZW1fbW92ZWQoJnNfaWgsIHBfc19wYXRoKSkgewotCQkJCQluZWVkX3Jlc2VhcmNoID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQkvKiBhIHRyaWNrLiAgSWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiBsb2dnZWQsIHRoaXMKLQkJCSAqKiB3aWxsIGRvIG5vdGhpbmcuICBJZiB3ZSd2ZSBicm9rZW4gdGhlIGxvb3Agd2l0aG91dAotCQkJICoqIGxvZ2dpbmcgaXQsIGl0IHdpbGwgcmVzdG9yZSB0aGUgYnVmZmVyCi0JCQkgKioKLQkJCSAqLwotCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3NiLCBwX3NfYmgpOwotCi0JCQkvKiBUaGlzIGxvb3AgY2FuIGJlIG9wdGltaXplZC4gKi8KLQkJfSB3aGlsZSAoKCpwX25fcmVtb3ZlZCA8IG5fdW5mbV9udW1iZXIgfHwgbmVlZF9yZXNlYXJjaCkgJiYKLQkJCSBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwKLQkJCQkJCSAgICBwX3NfcGF0aCkgPT0KLQkJCSBQT1NJVElPTl9GT1VORCk7Ci0KLQkJUkZBTFNFKCpwX25fcmVtb3ZlZCA8IG5fdW5mbV9udW1iZXIsCi0JCSAgICAgICAiUEFQLTUzMTA6IGluZGlyZWN0IGl0ZW0gaXMgbm90IGZvdW5kIik7Ci0JCVJGQUxTRShpdGVtX21vdmVkKCZzX2loLCBwX3NfcGF0aCksCi0JCSAgICAgICAiYWZ0ZXIgd2hpbGUsIGNvbXAgZmFpbGVkLCByZXRyeSIpOwotCi0JCWlmIChjX21vZGUgPT0gTV9DVVQpCi0JCQlwb3NfaW5faXRlbShwX3NfcGF0aCkgKj0gVU5GTV9QX1NJWkU7Ci0JCXJldHVybiBjX21vZGU7CisJICAgIGlmICgqcF9uX2N1dF9zaXplID09IDApIHsKKwkJLyogTm90aGluZyB3ZXJlIGN1dC4gbWF5YmUgY29udmVydCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgdG8gdGhlCisJCSAqIGRpcmVjdCBpdGVtPyAqLworCQlyZXN1bHQgPSBNX0NPTlZFUlQ7CisJICAgIH0KKwkgICAgcmV0dXJuIHJlc3VsdDsKIAl9CiB9CiAKQEAgLTE5NDgsNyArMTg4MSw4IEBACiAJCSAqKiBzdXJlIHRoZSBmaWxlIGlzIGNvbnNpc3RlbnQgYmVmb3JlIGVuZGluZyB0aGUgY3VycmVudCB0cmFucwogCQkgKiogYW5kIHN0YXJ0aW5nIGEgbmV3IG9uZQogCQkgKi8KLQkJaWYgKGpvdXJuYWxfdHJhbnNhY3Rpb25fc2hvdWxkX2VuZCh0aCwgdGgtPnRfYmxvY2tzX2FsbG9jYXRlZCkpIHsKKwkJaWYgKGpvdXJuYWxfdHJhbnNhY3Rpb25fc2hvdWxkX2VuZCh0aCwgMCkgfHwKKwkJICAgIHJlaXNlcmZzX3RyYW5zYWN0aW9uX2ZyZWVfc3BhY2UodGgpIDw9IEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCkgewogCQkJaW50IG9yaWdfbGVuX2FsbG9jID0gdGgtPnRfYmxvY2tzX2FsbG9jYXRlZDsKIAkJCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKCZzX3NlYXJjaF9wYXRoKTsKIApAQCAtMTk2Miw3ICsxODk2LDcgQEAKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7CiAJCQllcnIgPSBqb3VybmFsX2JlZ2luKHRoLCBwX3NfaW5vZGUtPmlfc2IsCi0JCQkJCSAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDYpOworCQkJCQkgICAgSk9VUk5BTF9GT1JfRlJFRV9CTE9DS19BTkRfVVBEQVRFX1NEICsgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiA0KSA7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwogCQkJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKHBfc19pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCBkNjNkYTc1Li5jYWUyYWJiIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTUyMSw3ICs1MjEsOCBAQAogCXJlaXNlcmZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZWlzZXJfaW5vZGVfY2FjaGUiLAogCQkJCQkJICBzaXplb2Yoc3RydWN0CiAJCQkJCQkJIHJlaXNlcmZzX2lub2RlX2luZm8pLAotCQkJCQkJICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJCSAgMCwgKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfAorCQkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCQkgIGluaXRfb25jZSwgTlVMTCk7CiAJaWYgKHJlaXNlcmZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY4NCwxNCArNjg1LDE0IEBACiAJICgxIDw8IFJFSVNFUkZTX0RBVEFfT1JERVJFRCB8IDEgPDwgUkVJU0VSRlNfREFUQV9XUklURUJBQ0spfSwKIAl7IndyaXRlYmFjayIsIDEgPDwgUkVJU0VSRlNfREFUQV9XUklURUJBQ0ssCiAJICgxIDw8IFJFSVNFUkZTX0RBVEFfT1JERVJFRCB8IDEgPDwgUkVJU0VSRlNfREFUQV9MT0cpfSwKLQl7TlVMTCwgMH0KKwl7LnZhbHVlID0gTlVMTH0KIH07CiAKIC8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgLW8gYmFycmllcj0gKi8KIHN0YXRpYyBjb25zdCBhcmdfZGVzY190IGJhcnJpZXJfbW9kZVtdID0gewogCXsibm9uZSIsIDEgPDwgUkVJU0VSRlNfQkFSUklFUl9OT05FLCAxIDw8IFJFSVNFUkZTX0JBUlJJRVJfRkxVU0h9LAogCXsiZmx1c2giLCAxIDw8IFJFSVNFUkZTX0JBUlJJRVJfRkxVU0gsIDEgPDwgUkVJU0VSRlNfQkFSUklFUl9OT05FfSwKLQl7TlVMTCwgMH0KKwl7LnZhbHVlID0gTlVMTH0KIH07CiAKIC8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgIi1vIGJsb2NrLWFsbG9jYXRvcj0iIGFuZCBiaXRzIHdoaWNoIGFyZSB0byBiZSBzZXQgaW4KQEAgLTg4OSw3ICs4OTAsNyBAQAogCQl7ImFjbCIsLnNldG1hc2sgPSAxIDw8IFJFSVNFUkZTX1VOU1VQUE9SVEVEX09QVH0sCiAJCXsibm9hY2wiLC5jbHJtYXNrID0gMSA8PCBSRUlTRVJGU19VTlNVUFBPUlRFRF9PUFR9LAogI2VuZGlmCi0JCXsibm9sb2ciLH0sCS8qIFRoaXMgaXMgdW5zdXBwb3J0ZWQgKi8KKwkJey5vcHRpb25fbmFtZSA9ICJub2xvZyJ9LAogCQl7InJlcGxheW9ubHkiLC5zZXRtYXNrID0gMSA8PCBSRVBMQVlPTkxZfSwKIAkJeyJibG9jay1hbGxvY2F0b3IiLC5hcmdfcmVxdWlyZWQgPSAnYScsLnZhbHVlcyA9IGJhbGxvY30sCiAJCXsiZGF0YSIsLmFyZ19yZXF1aXJlZCA9ICdkJywudmFsdWVzID0gbG9nZ2luZ19tb2RlfSwKQEAgLTkwNyw3ICs5MDgsNyBAQAogCQl7ImdycGpxdW90YSIsLmFyZ19yZXF1aXJlZCA9CiAJCSAnZycgfCAoMSA8PCBSRUlTRVJGU19PUFRfQUxMT1dFTVBUWSksLnZhbHVlcyA9IE5VTEx9LAogCQl7ImpxZm10IiwuYXJnX3JlcXVpcmVkID0gJ2YnLC52YWx1ZXMgPSBOVUxMfSwKLQkJe05VTEwsfQorCQl7Lm9wdGlvbl9uYW1lID0gTlVMTH0KIAl9OwogCiAJKmJsb2NrcyA9IDA7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCmluZGV4IGFiODg5NGMuLjU4YzQxOGYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIHsKIAljaGFyICpuYW1lLCAqdmFsdWU7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsLCAqKnBfYWNsOwotCXNpemVfdCBzaXplOworCWludCBzaXplOwogCWludCByZXR2YWw7CiAJc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8gKnJlaXNlcmZzX2kgPSBSRUlTRVJGU19JKGlub2RlKTsKIApAQCAtMjA2LDcgKzIwNiw3IEBACiAJCXJldHVybiBwb3NpeF9hY2xfZHVwKCpwX2FjbCk7CiAKIAlzaXplID0gcmVpc2VyZnNfeGF0dHJfZ2V0KGlub2RlLCBuYW1lLCBOVUxMLCAwKTsKLQlpZiAoKGludClzaXplIDwgMCkgeworCWlmIChzaXplIDwgMCkgewogCQlpZiAoc2l6ZSA9PSAtRU5PREFUQSB8fCBzaXplID09IC1FTk9TWVMpIHsKIAkJCSpwX2FjbCA9IEVSUl9QVFIoLUVOT0RBVEEpOwogCQkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9yZWxheWZzL01ha2VmaWxlIGIvZnMvcmVsYXlmcy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc2ZTE4Mi4uMDAwMDAwMAotLS0gYS9mcy9yZWxheWZzL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1vYmotJChDT05GSUdfUkVMQVlGU19GUykgKz0gcmVsYXlmcy5vCi0KLXJlbGF5ZnMteSA6PSByZWxheS5vIGlub2RlLm8gYnVmZmVycy5vCi0KZGlmZiAtLWdpdCBhL2ZzL3JlbGF5ZnMvYnVmZmVycy5jIGIvZnMvcmVsYXlmcy9idWZmZXJzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwMTg3ODEuLjAwMDAwMDAKLS0tIGEvZnMvcmVsYXlmcy9idWZmZXJzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoKLSAqIFJlbGF5RlMgYnVmZmVyIG1hbmFnZW1lbnQgY29kZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSAtIFRvbSBaYW51c3NpICh6YW51c3NpQHVzLmlibS5jb20pLCBJQk0gQ29ycAotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDUgLSBLYXJpbSBZYWdobW91ciAoa2FyaW1Ab3BlcnN5cy5jb20pCi0gKgotICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlbGF5ZnNfZnMuaD4KLSNpbmNsdWRlICJyZWxheS5oIgotI2luY2x1ZGUgImJ1ZmZlcnMuaCIKLQotLyoKLSAqIGNsb3NlKCkgdm1fb3AgaW1wbGVtZW50YXRpb24gZm9yIHJlbGF5ZnMgZmlsZSBtYXBwaW5nLgotICovCi1zdGF0aWMgdm9pZCByZWxheV9maWxlX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7Ci0JYnVmLT5jaGFuLT5jYi0+YnVmX3VubWFwcGVkKGJ1Ziwgdm1hLT52bV9maWxlKTsKLX0KLQotLyoKLSAqIG5vcGFnZSgpIHZtX29wIGltcGxlbWVudGF0aW9uIGZvciByZWxheWZzIGZpbGUgbWFwcGluZy4KLSAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpyZWxheV9idWZfbm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJCSAgICAgaW50ICp0eXBlKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCByY2hhbl9idWYgKmJ1ZiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7Ci0KLQlpZiAoYWRkcmVzcyA+IHZtYS0+dm1fZW5kKQotCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsgLyogRGlzYWxsb3cgbXJlbWFwICovCi0JaWYgKCFidWYpCi0JCXJldHVybiBOT1BBR0VfT09NOwotCi0JcGFnZSA9IHZtYWxsb2NfdG9fcGFnZShidWYtPnN0YXJ0ICsgb2Zmc2V0KTsKLQlpZiAoIXBhZ2UpCi0JCXJldHVybiBOT1BBR0VfT09NOwotCWdldF9wYWdlKHBhZ2UpOwotCi0JaWYgKHR5cGUpCi0JCSp0eXBlID0gVk1fRkFVTFRfTUlOT1I7Ci0KLQlyZXR1cm4gcGFnZTsKLX0KLQotLyoKLSAqIHZtX29wcyBmb3IgcmVsYXkgZmlsZSBtYXBwaW5ncy4KLSAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByZWxheV9maWxlX21tYXBfb3BzID0gewotCS5ub3BhZ2UgPSByZWxheV9idWZfbm9wYWdlLAotCS5jbG9zZSA9IHJlbGF5X2ZpbGVfbW1hcF9jbG9zZSwKLX07Ci0KLS8qKgotICoJcmVsYXlfbW1hcF9idWY6IC0gbW1hcCBjaGFubmVsIGJ1ZmZlciB0byBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UKLSAqCUBidWY6IHJlbGF5IGNoYW5uZWwgYnVmZmVyCi0gKglAdm1hOiB2bV9hcmVhX3N0cnVjdCBkZXNjcmliaW5nIG1lbW9yeSB0byBiZSBtYXBwZWQKLSAqCi0gKglSZXR1cm5zIDAgaWYgb2ssIG5lZ2F0aXZlIG9uIGVycm9yCi0gKgotICoJQ2FsbGVyIHNob3VsZCBhbHJlYWR5IGhhdmUgZ3JhYmJlZCBtbWFwX3NlbS4KLSAqLwotaW50IHJlbGF5X21tYXBfYnVmKHN0cnVjdCByY2hhbl9idWYgKmJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JdW5zaWduZWQgbG9uZyBsZW5ndGggPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0Jc3RydWN0IGZpbGUgKmZpbHAgPSB2bWEtPnZtX2ZpbGU7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FQkFERjsKLQotCWlmIChsZW5ndGggIT0gKHVuc2lnbmVkIGxvbmcpYnVmLT5jaGFuLT5hbGxvY19zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZtYS0+dm1fb3BzID0gJnJlbGF5X2ZpbGVfbW1hcF9vcHM7Ci0Jdm1hLT52bV9wcml2YXRlX2RhdGEgPSBidWY7Ci0JYnVmLT5jaGFuLT5jYi0+YnVmX21hcHBlZChidWYsIGZpbHApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJcmVsYXlfYWxsb2NfYnVmIC0gYWxsb2NhdGUgYSBjaGFubmVsIGJ1ZmZlcgotICoJQGJ1ZjogdGhlIGJ1ZmZlciBzdHJ1Y3QKLSAqCUBzaXplOiB0b3RhbCBzaXplIG9mIHRoZSBidWZmZXIKLSAqCi0gKglSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcmVzdWx0aW5nIGJ1ZmZlciwgTlVMTCBpZiB1bnN1Y2Nlc3NmdWwKLSAqLwotc3RhdGljIHZvaWQgKnJlbGF5X2FsbG9jX2J1ZihzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQl2b2lkICptZW07Ci0JdW5zaWduZWQgaW50IGksIGosIG5fcGFnZXM7Ci0KLQlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQluX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwotCi0JYnVmLT5wYWdlX2FycmF5ID0ga2NhbGxvYyhuX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwotCWlmICghYnVmLT5wYWdlX2FycmF5KQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBuX3BhZ2VzOyBpKyspIHsKLQkJYnVmLT5wYWdlX2FycmF5W2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKHVubGlrZWx5KCFidWYtPnBhZ2VfYXJyYXlbaV0pKQotCQkJZ290byBkZXBvcHVsYXRlOwotCX0KLQltZW0gPSB2bWFwKGJ1Zi0+cGFnZV9hcnJheSwgbl9wYWdlcywgVk1fTUFQLCBQQUdFX0tFUk5FTCk7Ci0JaWYgKCFtZW0pCi0JCWdvdG8gZGVwb3B1bGF0ZTsKLQotCW1lbXNldChtZW0sIDAsIHNpemUpOwotCWJ1Zi0+cGFnZV9jb3VudCA9IG5fcGFnZXM7Ci0JcmV0dXJuIG1lbTsKLQotZGVwb3B1bGF0ZToKLQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQotCQlfX2ZyZWVfcGFnZShidWYtPnBhZ2VfYXJyYXlbal0pOwotCWtmcmVlKGJ1Zi0+cGFnZV9hcnJheSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICoJcmVsYXlfY3JlYXRlX2J1ZiAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgY2hhbm5lbCBidWZmZXIKLSAqCUBhbGxvY19zaXplOiBzaXplIG9mIHRoZSBidWZmZXIgdG8gYWxsb2NhdGUKLSAqCUBuX3N1YmJ1ZnM6IG51bWJlciBvZiBzdWItYnVmZmVycyBpbiB0aGUgY2hhbm5lbAotICoKLSAqCVJldHVybnMgY2hhbm5lbCBidWZmZXIgaWYgc3VjY2Vzc2Z1bCwgTlVMTCBvdGhlcndpc2UKLSAqLwotc3RydWN0IHJjaGFuX2J1ZiAqcmVsYXlfY3JlYXRlX2J1ZihzdHJ1Y3QgcmNoYW4gKmNoYW4pCi17Ci0Jc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJjaGFuX2J1ZiksIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gTlVMTDsKLQotCWJ1Zi0+cGFkZGluZyA9IGttYWxsb2MoY2hhbi0+bl9zdWJidWZzICogc2l6ZW9mKHNpemVfdCAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYtPnBhZGRpbmcpCi0JCWdvdG8gZnJlZV9idWY7Ci0KLQlidWYtPnN0YXJ0ID0gcmVsYXlfYWxsb2NfYnVmKGJ1ZiwgY2hhbi0+YWxsb2Nfc2l6ZSk7Ci0JaWYgKCFidWYtPnN0YXJ0KQotCQlnb3RvIGZyZWVfYnVmOwotCi0JYnVmLT5jaGFuID0gY2hhbjsKLQlrcmVmX2dldCgmYnVmLT5jaGFuLT5rcmVmKTsKLQlyZXR1cm4gYnVmOwotCi1mcmVlX2J1ZjoKLQlrZnJlZShidWYtPnBhZGRpbmcpOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICoJcmVsYXlfZGVzdHJveV9idWYgLSBkZXN0cm95IGFuIHJjaGFuX2J1ZiBzdHJ1Y3QgYW5kIGFzc29jaWF0ZWQgYnVmZmVyCi0gKglAYnVmOiB0aGUgYnVmZmVyIHN0cnVjdAotICovCi12b2lkIHJlbGF5X2Rlc3Ryb3lfYnVmKHN0cnVjdCByY2hhbl9idWYgKmJ1ZikKLXsKLQlzdHJ1Y3QgcmNoYW4gKmNoYW4gPSBidWYtPmNoYW47Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAobGlrZWx5KGJ1Zi0+c3RhcnQpKSB7Ci0JCXZ1bm1hcChidWYtPnN0YXJ0KTsKLQkJZm9yIChpID0gMDsgaSA8IGJ1Zi0+cGFnZV9jb3VudDsgaSsrKQotCQkJX19mcmVlX3BhZ2UoYnVmLT5wYWdlX2FycmF5W2ldKTsKLQkJa2ZyZWUoYnVmLT5wYWdlX2FycmF5KTsKLQl9Ci0Ja2ZyZWUoYnVmLT5wYWRkaW5nKTsKLQlrZnJlZShidWYpOwotCWtyZWZfcHV0KCZjaGFuLT5rcmVmLCByZWxheV9kZXN0cm95X2NoYW5uZWwpOwotfQotCi0vKioKLSAqCXJlbGF5X3JlbW92ZV9idWYgLSByZW1vdmUgYSBjaGFubmVsIGJ1ZmZlcgotICoKLSAqCVJlbW92ZXMgdGhlIGZpbGUgZnJvbSB0aGUgcmVsYXlmcyBmaWxleXN0ZW0sIHdoaWNoIGFsc28gZnJlZXMgdGhlCi0gKglyY2hhbl9idWZfc3RydWN0IGFuZCB0aGUgY2hhbm5lbCBidWZmZXIuICBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbQotICoJa3JlZl9wdXQoKS4KLSAqLwotdm9pZCByZWxheV9yZW1vdmVfYnVmKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCByY2hhbl9idWYgKmJ1ZiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmNoYW5fYnVmLCBrcmVmKTsKLQlidWYtPmNoYW4tPmNiLT5yZW1vdmVfYnVmX2ZpbGUoYnVmLT5kZW50cnkpOwotCXJlbGF5X2Rlc3Ryb3lfYnVmKGJ1Zik7Ci19CmRpZmYgLS1naXQgYS9mcy9yZWxheWZzL2J1ZmZlcnMuaCBiL2ZzL3JlbGF5ZnMvYnVmZmVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2ExMjQ5Li4wMDAwMDAwCi0tLSBhL2ZzL3JlbGF5ZnMvYnVmZmVycy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfQlVGRkVSU19ICi0jZGVmaW5lIF9CVUZGRVJTX0gKLQotLyogVGhpcyBpbnNwaXJlZCBieSBydGFpL3NobWVtICovCi0jZGVmaW5lIEZJWF9TSVpFKHgpICgoKHgpIC0gMSkgJiBQQUdFX01BU0spICsgUEFHRV9TSVpFCi0KLWV4dGVybiBpbnQgcmVsYXlfbW1hcF9idWYoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1leHRlcm4gc3RydWN0IHJjaGFuX2J1ZiAqcmVsYXlfY3JlYXRlX2J1ZihzdHJ1Y3QgcmNoYW4gKmNoYW4pOwotZXh0ZXJuIHZvaWQgcmVsYXlfZGVzdHJveV9idWYoc3RydWN0IHJjaGFuX2J1ZiAqYnVmKTsKLWV4dGVybiB2b2lkIHJlbGF5X3JlbW92ZV9idWYoc3RydWN0IGtyZWYgKmtyZWYpOwotCi0jZW5kaWYvKiBfQlVGRkVSU19IICovCmRpZmYgLS1naXQgYS9mcy9yZWxheWZzL2lub2RlLmMgYi9mcy9yZWxheWZzL2lub2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MzUyMzAuLjAwMDAwMDAKLS0tIGEvZnMvcmVsYXlmcy9pbm9kZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTgxICswLDAgQEAKLS8qCi0gKiBWRlMtcmVsYXRlZCBjb2RlIGZvciBSZWxheUZTLCBhIGhpZ2gtc3BlZWQgZGF0YSByZWxheSBmaWxlc3lzdGVtLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IC0gVG9tIFphbnVzc2kgPHphbnVzc2lAdXMuaWJtLmNvbT4sIElCTSBDb3JwCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSAtIEthcmltIFlhZ2htb3VyIDxrYXJpbUBvcGVyc3lzLmNvbT4KLSAqCi0gKiBCYXNlZCBvbiByYW1mcywgQ29weXJpZ2h0IChDKSAyMDAyIC0gTGludXMgVG9ydmFsZHMKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWxheWZzX2ZzLmg+Ci0jaW5jbHVkZSAicmVsYXkuaCIKLSNpbmNsdWRlICJidWZmZXJzLmgiCi0KLSNkZWZpbmUgUkVMQVlGU19NQUdJQwkJCTB4RjBCNEE5ODEKLQotc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqCQlyZWxheWZzX21vdW50Owotc3RhdGljIGludAkJCQlyZWxheWZzX21vdW50X2NvdW50OwotCi1zdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8JCXJlbGF5ZnNfYmFja2luZ19kZXZfaW5mbyA9IHsKLQkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0RJUlRZIHwgQkRJX0NBUF9OT19XUklURUJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IGlub2RlICpyZWxheWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCSAgICAgICBpbnQgbW9kZSwKLSAJCQkJICAgICAgIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCi0JCQkJICAgICAgIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCWlub2RlID0gbmV3X2lub2RlKHNiKTsKLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gTlVMTDsKLQotCWlub2RlLT5pX21vZGUgPSBtb2RlOwotCWlub2RlLT5pX3VpZCA9IDA7Ci0JaW5vZGUtPmlfZ2lkID0gMDsKLQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOwotCWlub2RlLT5pX2Jsb2NrcyA9IDA7Ci0JaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZyZWxheWZzX2JhY2tpbmdfZGV2X2luZm87Ci0JaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgewotCWNhc2UgU19JRlJFRzoKLQkJaW5vZGUtPmlfZm9wID0gZm9wczsKLQkJaWYgKGRhdGEpCi0JCQlpbm9kZS0+dS5nZW5lcmljX2lwID0gZGF0YTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0lGRElSOgotCQlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci0JCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7Ci0KLQkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCi0JCWlub2RlLT5pX25saW5rKys7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBpbm9kZTsKLX0KLQotLyoqCi0gKglyZWxheWZzX2NyZWF0ZV9lbnRyeSAtIGNyZWF0ZSBhIHJlbGF5ZnMgZGlyZWN0b3J5IG9yIGZpbGUKLSAqCUBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBjcmVhdGUKLSAqCUBwYXJlbnQ6IHBhcmVudCBkaXJlY3RvcnkKLSAqCUBtb2RlOiBtb2RlCi0gKglAZm9wczogZmlsZSBvcGVyYXRpb25zIHRvIHVzZSBmb3IgdGhlIGZpbGUKLSAqCUBkYXRhOiB1c2VyLWFzc29jaWF0ZWQgZGF0YSBmb3IgdGhpcyBmaWxlCi0gKgotICoJUmV0dXJucyB0aGUgbmV3IGRlbnRyeSwgTlVMTCBvbiBmYWlsdXJlCi0gKgotICoJQ3JlYXRlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IHdpdGggdGhlIHNwZWNpZmVkIHBlcm1pc3Npb25zLgotICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqcmVsYXlmc19jcmVhdGVfZW50cnkoY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCQkgICBpbnQgbW9kZSwKLQkJCQkJICAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKLQkJCQkJICAgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IGVycm9yID0gMDsKLQotCUJVR19PTighbmFtZSB8fCAhKFNfSVNSRUcobW9kZSkgfHwgU19JU0RJUihtb2RlKSkpOwotCi0JZXJyb3IgPSBzaW1wbGVfcGluX2ZzKCJyZWxheWZzIiwgJnJlbGF5ZnNfbW91bnQsICZyZWxheWZzX21vdW50X2NvdW50KTsKLQlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBtb3VudCByZWxheWZzOiBlcnJjb2RlICVkXG4iLCBlcnJvcik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmICghcGFyZW50ICYmIHJlbGF5ZnNfbW91bnQgJiYgcmVsYXlmc19tb3VudC0+bW50X3NiKQotCQlwYXJlbnQgPSByZWxheWZzX21vdW50LT5tbnRfc2ItPnNfcm9vdDsKLQotCWlmICghcGFyZW50KSB7Ci0JCXNpbXBsZV9yZWxlYXNlX2ZzKCZyZWxheWZzX21vdW50LCAmcmVsYXlmc19tb3VudF9jb3VudCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXBhcmVudCA9IGRnZXQocGFyZW50KTsKLQltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCWQgPSBsb29rdXBfb25lX2xlbihuYW1lLCBwYXJlbnQsIHN0cmxlbihuYW1lKSk7Ci0JaWYgKElTX0VSUihkKSkgewotCQlkID0gTlVMTDsKLQkJZ290byByZWxlYXNlX21vdW50OwotCX0KLQotCWlmIChkLT5kX2lub2RlKSB7Ci0JCWQgPSBOVUxMOwotCQlnb3RvIHJlbGVhc2VfbW91bnQ7Ci0JfQotCi0JaW5vZGUgPSByZWxheWZzX2dldF9pbm9kZShwYXJlbnQtPmRfaW5vZGUtPmlfc2IsIG1vZGUsIGZvcHMsIGRhdGEpOwotCWlmICghaW5vZGUpIHsKLQkJZCA9IE5VTEw7Ci0JCWdvdG8gcmVsZWFzZV9tb3VudDsKLQl9Ci0KLQlkX2luc3RhbnRpYXRlKGQsIGlub2RlKTsKLQlkZ2V0KGQpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KLQotCWlmIChTX0lTRElSKG1vZGUpKQotCQlwYXJlbnQtPmRfaW5vZGUtPmlfbmxpbmsrKzsKLQotCWdvdG8gZXhpdDsKLQotcmVsZWFzZV9tb3VudDoKLQlzaW1wbGVfcmVsZWFzZV9mcygmcmVsYXlmc19tb3VudCwgJnJlbGF5ZnNfbW91bnRfY291bnQpOwotCi1leGl0OgotCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKLQlkcHV0KHBhcmVudCk7Ci0JcmV0dXJuIGQ7Ci19Ci0KLS8qKgotICoJcmVsYXlmc19jcmVhdGVfZmlsZSAtIGNyZWF0ZSBhIGZpbGUgaW4gdGhlIHJlbGF5IGZpbGVzeXN0ZW0KLSAqCUBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBjcmVhdGUKLSAqCUBwYXJlbnQ6IHBhcmVudCBkaXJlY3RvcnkKLSAqCUBtb2RlOiBtb2RlLCBpZiBub3Qgc3BlY2llZCB0aGUgZGVmYXVsdCBwZXJtcyBhcmUgdXNlZAotICoJQGZvcHM6IGZpbGUgb3BlcmF0aW9ucyB0byB1c2UgZm9yIHRoZSBmaWxlCi0gKglAZGF0YTogdXNlci1hc3NvY2lhdGVkIGRhdGEgZm9yIHRoaXMgZmlsZQotICoKLSAqCVJldHVybnMgZmlsZSBkZW50cnkgaWYgc3VjY2Vzc2Z1bCwgTlVMTCBvdGhlcndpc2UuCi0gKgotICoJVGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIHVzZXIgciBvbiBiZWhhbGYgb2YgY3VycmVudCB1c2VyLgotICovCi1zdHJ1Y3QgZGVudHJ5ICpyZWxheWZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCSAgIGludCBtb2RlLAotCQkJCSAgIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCi0JCQkJICAgdm9pZCAqZGF0YSkKLXsKLQlCVUdfT04oIWZvcHMpOwotCi0JaWYgKCFtb2RlKQotCQltb2RlID0gU19JUlVTUjsKLQltb2RlID0gKG1vZGUgJiBTX0lBTExVR08pIHwgU19JRlJFRzsKLQotCXJldHVybiByZWxheWZzX2NyZWF0ZV9lbnRyeShuYW1lLCBwYXJlbnQsIG1vZGUsIGZvcHMsIGRhdGEpOwotfQotCi0vKioKLSAqCXJlbGF5ZnNfY3JlYXRlX2RpciAtIGNyZWF0ZSBhIGRpcmVjdG9yeSBpbiB0aGUgcmVsYXkgZmlsZXN5c3RlbQotICoJQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdG8gY3JlYXRlCi0gKglAcGFyZW50OiBwYXJlbnQgZGlyZWN0b3J5LCBOVUxMIGlmIHBhcmVudCBzaG91bGQgYmUgZnMgcm9vdAotICoKLSAqCVJldHVybnMgZGlyZWN0b3J5IGRlbnRyeSBpZiBzdWNjZXNzZnVsLCBOVUxMIG90aGVyd2lzZS4KLSAqCi0gKglUaGUgZGlyZWN0b3J5IHdpbGwgYmUgY3JlYXRlZCB3b3JsZCByd3ggb24gYmVoYWxmIG9mIGN1cnJlbnQgdXNlci4KLSAqLwotc3RydWN0IGRlbnRyeSAqcmVsYXlmc19jcmVhdGVfZGlyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZW50cnkgKnBhcmVudCkKLXsKLQlpbnQgbW9kZSA9IFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUlVHTyB8IFNfSVhVR087Ci0JcmV0dXJuIHJlbGF5ZnNfY3JlYXRlX2VudHJ5KG5hbWUsIHBhcmVudCwgbW9kZSwgTlVMTCwgTlVMTCk7Ci19Ci0KLS8qKgotICoJcmVsYXlmc19yZW1vdmUgLSByZW1vdmUgYSBmaWxlIG9yIGRpcmVjdG9yeSBpbiB0aGUgcmVsYXkgZmlsZXN5c3RlbQotICoJQGRlbnRyeTogZmlsZSBvciBkaXJlY3RvcnkgZGVudHJ5Ci0gKgotICoJUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG5lZ2F0aXZlIG90aGVyd2lzZS4KLSAqLwotaW50IHJlbGF5ZnNfcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmICghZGVudHJ5KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OwotCWlmICghcGFyZW50KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXBhcmVudCA9IGRnZXQocGFyZW50KTsKLQltdXRleF9sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChkZW50cnktPmRfaW5vZGUpIHsKLQkJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQotCQkJZXJyb3IgPSBzaW1wbGVfcm1kaXIocGFyZW50LT5kX2lub2RlLCBkZW50cnkpOwotCQllbHNlCi0JCQllcnJvciA9IHNpbXBsZV91bmxpbmsocGFyZW50LT5kX2lub2RlLCBkZW50cnkpOwotCQlpZiAoIWVycm9yKQotCQkJZF9kZWxldGUoZGVudHJ5KTsKLQl9Ci0JaWYgKCFlcnJvcikKLQkJZHB1dChkZW50cnkpOwotCW11dGV4X3VubG9jaygmcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKLQlkcHV0KHBhcmVudCk7Ci0KLQlpZiAoIWVycm9yKQotCQlzaW1wbGVfcmVsZWFzZV9mcygmcmVsYXlmc19tb3VudCwgJnJlbGF5ZnNfbW91bnRfY291bnQpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqCXJlbGF5ZnNfcmVtb3ZlX2ZpbGUgLSByZW1vdmUgYSBmaWxlIGZyb20gcmVsYXkgZmlsZXN5c3RlbQotICoJQGRlbnRyeTogZGlyZWN0b3J5IGRlbnRyeQotICoKLSAqCVJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZSBvdGhlcndpc2UuCi0gKi8KLWludCByZWxheWZzX3JlbW92ZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlyZXR1cm4gcmVsYXlmc19yZW1vdmUoZGVudHJ5KTsKLX0KLQotLyoqCi0gKglyZWxheWZzX3JlbW92ZV9kaXIgLSByZW1vdmUgYSBkaXJlY3RvcnkgaW4gdGhlIHJlbGF5IGZpbGVzeXN0ZW0KLSAqCUBkZW50cnk6IGRpcmVjdG9yeSBkZW50cnkKLSAqCi0gKglSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUgb3RoZXJ3aXNlLgotICovCi1pbnQgcmVsYXlmc19yZW1vdmVfZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlyZXR1cm4gcmVsYXlmc19yZW1vdmUoZGVudHJ5KTsKLX0KLQotLyoqCi0gKglyZWxheV9maWxlX29wZW4gLSBvcGVuIGZpbGUgb3AgZm9yIHJlbGF5IGZpbGVzCi0gKglAaW5vZGU6IHRoZSBpbm9kZQotICoJQGZpbHA6IHRoZSBmaWxlCi0gKgotICoJSW5jcmVtZW50cyB0aGUgY2hhbm5lbCBidWZmZXIgcmVmY291bnQuCi0gKi8KLXN0YXRpYyBpbnQgcmVsYXlfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCByY2hhbl9idWYgKmJ1ZiA9IGlub2RlLT51LmdlbmVyaWNfaXA7Ci0Ja3JlZl9nZXQoJmJ1Zi0+a3JlZik7Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gYnVmOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJcmVsYXlfZmlsZV9tbWFwIC0gbW1hcCBmaWxlIG9wIGZvciByZWxheSBmaWxlcwotICoJQGZpbHA6IHRoZSBmaWxlCi0gKglAdm1hOiB0aGUgdm1hIGRlc2NyaWJpbmcgd2hhdCB0byBtYXAKLSAqCi0gKglDYWxscyB1cG9uIHJlbGF5X21tYXBfYnVmIHRvIG1hcCB0aGUgZmlsZSBpbnRvIHVzZXIgc3BhY2UuCi0gKi8KLXN0YXRpYyBpbnQgcmVsYXlfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIHJlbGF5X21tYXBfYnVmKGJ1Ziwgdm1hKTsKLX0KLQotLyoqCi0gKglyZWxheV9maWxlX3BvbGwgLSBwb2xsIGZpbGUgb3AgZm9yIHJlbGF5IGZpbGVzCi0gKglAZmlscDogdGhlIGZpbGUKLSAqCUB3YWl0OiBwb2xsIHRhYmxlCi0gKgotICoJUG9sbCBpbXBsZW1lbnRpb24uCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVsYXlfZmlsZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQotewotCXVuc2lnbmVkIGludCBtYXNrID0gMDsKLQlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAoYnVmLT5maW5hbGl6ZWQpCi0JCXJldHVybiBQT0xMRVJSOwotCi0JaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJcG9sbF93YWl0KGZpbHAsICZidWYtPnJlYWRfd2FpdCwgd2FpdCk7Ci0JCWlmICghcmVsYXlfYnVmX2VtcHR5KGJ1ZikpCi0JCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0JfQotCi0JcmV0dXJuIG1hc2s7Ci19Ci0KLS8qKgotICoJcmVsYXlfZmlsZV9yZWxlYXNlIC0gcmVsZWFzZSBmaWxlIG9wIGZvciByZWxheSBmaWxlcwotICoJQGlub2RlOiB0aGUgaW5vZGUKLSAqCUBmaWxwOiB0aGUgZmlsZQotICoKLSAqCURlY3JlbWVudHMgdGhlIGNoYW5uZWwgcmVmY291bnQsIGFzIHRoZSBmaWxlc3lzdGVtIGlzCi0gKglubyBsb25nZXIgdXNpbmcgaXQuCi0gKi8KLXN0YXRpYyBpbnQgcmVsYXlfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCByY2hhbl9idWYgKmJ1ZiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlrcmVmX3B1dCgmYnVmLT5rcmVmLCByZWxheV9yZW1vdmVfYnVmKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXJlbGF5X2ZpbGVfcmVhZF9jb25zdW1lIC0gdXBkYXRlIHRoZSBjb25zdW1lZCBjb3VudCBmb3IgdGhlIGJ1ZmZlcgotICovCi1zdGF0aWMgdm9pZCByZWxheV9maWxlX3JlYWRfY29uc3VtZShzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCi0JCQkJICAgIHNpemVfdCByZWFkX3BvcywKLQkJCQkgICAgc2l6ZV90IGJ5dGVzX2NvbnN1bWVkKQotewotCXNpemVfdCBzdWJidWZfc2l6ZSA9IGJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemU7Ci0Jc2l6ZV90IG5fc3ViYnVmcyA9IGJ1Zi0+Y2hhbi0+bl9zdWJidWZzOwotCXNpemVfdCByZWFkX3N1YmJ1ZjsKLQotCWlmIChidWYtPmJ5dGVzX2NvbnN1bWVkICsgYnl0ZXNfY29uc3VtZWQgPiBzdWJidWZfc2l6ZSkgewotCQlyZWxheV9zdWJidWZzX2NvbnN1bWVkKGJ1Zi0+Y2hhbiwgYnVmLT5jcHUsIDEpOwotCQlidWYtPmJ5dGVzX2NvbnN1bWVkID0gMDsKLQl9Ci0KLQlidWYtPmJ5dGVzX2NvbnN1bWVkICs9IGJ5dGVzX2NvbnN1bWVkOwotCXJlYWRfc3ViYnVmID0gcmVhZF9wb3MgLyBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplOwotCWlmIChidWYtPmJ5dGVzX2NvbnN1bWVkICsgYnVmLT5wYWRkaW5nW3JlYWRfc3ViYnVmXSA9PSBzdWJidWZfc2l6ZSkgewotCQlpZiAoKHJlYWRfc3ViYnVmID09IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZCAlIG5fc3ViYnVmcykgJiYKLQkJICAgIChidWYtPm9mZnNldCA9PSBzdWJidWZfc2l6ZSkpCi0JCQlyZXR1cm47Ci0JCXJlbGF5X3N1YmJ1ZnNfY29uc3VtZWQoYnVmLT5jaGFuLCBidWYtPmNwdSwgMSk7Ci0JCWJ1Zi0+Ynl0ZXNfY29uc3VtZWQgPSAwOwotCX0KLX0KLQotLyoqCi0gKglyZWxheV9maWxlX3JlYWRfYXZhaWwgLSBib29sZWFuLCBhcmUgdGhlcmUgdW5jb25zdW1lZCBieXRlcyBhdmFpbGFibGU/Ci0gKi8KLXN0YXRpYyBpbnQgcmVsYXlfZmlsZV9yZWFkX2F2YWlsKHN0cnVjdCByY2hhbl9idWYgKmJ1Ziwgc2l6ZV90IHJlYWRfcG9zKQotewotCXNpemVfdCBieXRlc19wcm9kdWNlZCwgYnl0ZXNfY29uc3VtZWQsIHdyaXRlX29mZnNldDsKLQlzaXplX3Qgc3ViYnVmX3NpemUgPSBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplOwotCXNpemVfdCBuX3N1YmJ1ZnMgPSBidWYtPmNoYW4tPm5fc3ViYnVmczsKLQlzaXplX3QgcHJvZHVjZWQgPSBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQgJSBuX3N1YmJ1ZnM7Ci0Jc2l6ZV90IGNvbnN1bWVkID0gYnVmLT5zdWJidWZzX2NvbnN1bWVkICUgbl9zdWJidWZzOwotCi0Jd3JpdGVfb2Zmc2V0ID0gYnVmLT5vZmZzZXQgPiBzdWJidWZfc2l6ZSA/IHN1YmJ1Zl9zaXplIDogYnVmLT5vZmZzZXQ7Ci0KLQlpZiAoY29uc3VtZWQgPiBwcm9kdWNlZCkgewotCQlpZiAoKHByb2R1Y2VkID4gbl9zdWJidWZzKSAmJgotCQkgICAgKHByb2R1Y2VkICsgbl9zdWJidWZzIC0gY29uc3VtZWQgPD0gbl9zdWJidWZzKSkKLQkJCXByb2R1Y2VkICs9IG5fc3ViYnVmczsKLQl9IGVsc2UgaWYgKGNvbnN1bWVkID09IHByb2R1Y2VkKSB7Ci0JCWlmIChidWYtPm9mZnNldCA+IHN1YmJ1Zl9zaXplKSB7Ci0JCQlwcm9kdWNlZCArPSBuX3N1YmJ1ZnM7Ci0JCQlpZiAoYnVmLT5zdWJidWZzX3Byb2R1Y2VkID09IGJ1Zi0+c3ViYnVmc19jb25zdW1lZCkKLQkJCQljb25zdW1lZCArPSBuX3N1YmJ1ZnM7Ci0JCX0KLQl9Ci0KLQlpZiAoYnVmLT5vZmZzZXQgPiBzdWJidWZfc2l6ZSkKLQkJYnl0ZXNfcHJvZHVjZWQgPSAocHJvZHVjZWQgLSAxKSAqIHN1YmJ1Zl9zaXplICsgd3JpdGVfb2Zmc2V0OwotCWVsc2UKLQkJYnl0ZXNfcHJvZHVjZWQgPSBwcm9kdWNlZCAqIHN1YmJ1Zl9zaXplICsgd3JpdGVfb2Zmc2V0OwotCWJ5dGVzX2NvbnN1bWVkID0gY29uc3VtZWQgKiBzdWJidWZfc2l6ZSArIGJ1Zi0+Ynl0ZXNfY29uc3VtZWQ7Ci0KLQlpZiAoYnl0ZXNfcHJvZHVjZWQgPT0gYnl0ZXNfY29uc3VtZWQpCi0JCXJldHVybiAwOwotCi0JcmVsYXlfZmlsZV9yZWFkX2NvbnN1bWUoYnVmLCByZWFkX3BvcywgMCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyoqCi0gKglyZWxheV9maWxlX3JlYWRfc3ViYnVmX2F2YWlsIC0gcmV0dXJuIGJ5dGVzIGF2YWlsYWJsZSBpbiBzdWItYnVmZmVyCi0gKi8KLXN0YXRpYyBzaXplX3QgcmVsYXlfZmlsZV9yZWFkX3N1YmJ1Zl9hdmFpbChzaXplX3QgcmVhZF9wb3MsCi0JCQkJCSAgIHN0cnVjdCByY2hhbl9idWYgKmJ1ZikKLXsKLQlzaXplX3QgcGFkZGluZywgYXZhaWwgPSAwOwotCXNpemVfdCByZWFkX3N1YmJ1ZiwgcmVhZF9vZmZzZXQsIHdyaXRlX3N1YmJ1Ziwgd3JpdGVfb2Zmc2V0OwotCXNpemVfdCBzdWJidWZfc2l6ZSA9IGJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemU7Ci0KLQl3cml0ZV9zdWJidWYgPSAoYnVmLT5kYXRhIC0gYnVmLT5zdGFydCkgLyBzdWJidWZfc2l6ZTsKLQl3cml0ZV9vZmZzZXQgPSBidWYtPm9mZnNldCA+IHN1YmJ1Zl9zaXplID8gc3ViYnVmX3NpemUgOiBidWYtPm9mZnNldDsKLQlyZWFkX3N1YmJ1ZiA9IHJlYWRfcG9zIC8gc3ViYnVmX3NpemU7Ci0JcmVhZF9vZmZzZXQgPSByZWFkX3BvcyAlIHN1YmJ1Zl9zaXplOwotCXBhZGRpbmcgPSBidWYtPnBhZGRpbmdbcmVhZF9zdWJidWZdOwotCi0JaWYgKHJlYWRfc3ViYnVmID09IHdyaXRlX3N1YmJ1ZikgewotCQlpZiAocmVhZF9vZmZzZXQgKyBwYWRkaW5nIDwgd3JpdGVfb2Zmc2V0KQotCQkJYXZhaWwgPSB3cml0ZV9vZmZzZXQgLSAocmVhZF9vZmZzZXQgKyBwYWRkaW5nKTsKLQl9IGVsc2UKLQkJYXZhaWwgPSAoc3ViYnVmX3NpemUgLSBwYWRkaW5nKSAtIHJlYWRfb2Zmc2V0OwotCi0JcmV0dXJuIGF2YWlsOwotfQotCi0vKioKLSAqCXJlbGF5X2ZpbGVfcmVhZF9zdGFydF9wb3MgLSBmaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgYnl0ZSB0byByZWFkCi0gKgotICoJSWYgdGhlIHJlYWRfcG9zIGlzIGluIHRoZSBtaWRkbGUgb2YgcGFkZGluZywgcmV0dXJuIHRoZQotICoJcG9zaXRpb24gb2YgdGhlIGZpcnN0IGFjdHVhbGx5IGF2YWlsYWJsZSBieXRlLCBvdGhlcndpc2UKLSAqCXJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuCi0gKi8KLXN0YXRpYyBzaXplX3QgcmVsYXlfZmlsZV9yZWFkX3N0YXJ0X3BvcyhzaXplX3QgcmVhZF9wb3MsCi0JCQkJCXN0cnVjdCByY2hhbl9idWYgKmJ1ZikKLXsKLQlzaXplX3QgcmVhZF9zdWJidWYsIHBhZGRpbmcsIHBhZGRpbmdfc3RhcnQsIHBhZGRpbmdfZW5kOwotCXNpemVfdCBzdWJidWZfc2l6ZSA9IGJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemU7Ci0Jc2l6ZV90IG5fc3ViYnVmcyA9IGJ1Zi0+Y2hhbi0+bl9zdWJidWZzOwotCi0JcmVhZF9zdWJidWYgPSByZWFkX3BvcyAvIHN1YmJ1Zl9zaXplOwotCXBhZGRpbmcgPSBidWYtPnBhZGRpbmdbcmVhZF9zdWJidWZdOwotCXBhZGRpbmdfc3RhcnQgPSAocmVhZF9zdWJidWYgKyAxKSAqIHN1YmJ1Zl9zaXplIC0gcGFkZGluZzsKLQlwYWRkaW5nX2VuZCA9IChyZWFkX3N1YmJ1ZiArIDEpICogc3ViYnVmX3NpemU7Ci0JaWYgKHJlYWRfcG9zID49IHBhZGRpbmdfc3RhcnQgJiYgcmVhZF9wb3MgPCBwYWRkaW5nX2VuZCkgewotCQlyZWFkX3N1YmJ1ZiA9IChyZWFkX3N1YmJ1ZiArIDEpICUgbl9zdWJidWZzOwotCQlyZWFkX3BvcyA9IHJlYWRfc3ViYnVmICogc3ViYnVmX3NpemU7Ci0JfQotCi0JcmV0dXJuIHJlYWRfcG9zOwotfQotCi0vKioKLSAqCXJlbGF5X2ZpbGVfcmVhZF9lbmRfcG9zIC0gcmV0dXJuIHRoZSBuZXcgcmVhZCBwb3NpdGlvbgotICovCi1zdGF0aWMgc2l6ZV90IHJlbGF5X2ZpbGVfcmVhZF9lbmRfcG9zKHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKLQkJCQkgICAgICBzaXplX3QgcmVhZF9wb3MsCi0JCQkJICAgICAgc2l6ZV90IGNvdW50KQotewotCXNpemVfdCByZWFkX3N1YmJ1ZiwgcGFkZGluZywgZW5kX3BvczsKLQlzaXplX3Qgc3ViYnVmX3NpemUgPSBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplOwotCXNpemVfdCBuX3N1YmJ1ZnMgPSBidWYtPmNoYW4tPm5fc3ViYnVmczsKLQotCXJlYWRfc3ViYnVmID0gcmVhZF9wb3MgLyBzdWJidWZfc2l6ZTsKLQlwYWRkaW5nID0gYnVmLT5wYWRkaW5nW3JlYWRfc3ViYnVmXTsKLQlpZiAocmVhZF9wb3MgJSBzdWJidWZfc2l6ZSArIGNvdW50ICsgcGFkZGluZyA9PSBzdWJidWZfc2l6ZSkKLQkJZW5kX3BvcyA9IChyZWFkX3N1YmJ1ZiArIDEpICogc3ViYnVmX3NpemU7Ci0JZWxzZQotCQllbmRfcG9zID0gcmVhZF9wb3MgKyBjb3VudDsKLQlpZiAoZW5kX3BvcyA+PSBzdWJidWZfc2l6ZSAqIG5fc3ViYnVmcykKLQkJZW5kX3BvcyA9IDA7Ci0KLQlyZXR1cm4gZW5kX3BvczsKLX0KLQotLyoqCi0gKglyZWxheV9maWxlX3JlYWQgLSByZWFkIGZpbGUgb3AgZm9yIHJlbGF5IGZpbGVzCi0gKglAZmlscDogdGhlIGZpbGUKLSAqCUBidWZmZXI6IHRoZSB1c2Vyc3BhY2UgYnVmZmVyCi0gKglAY291bnQ6IG51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKglAcHBvczogcG9zaXRpb24gdG8gcmVhZCBmcm9tCi0gKgotICoJUmVhZHMgY291bnQgYnl0ZXMgb3IgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlCi0gKgljdXJyZW50IHN1Yi1idWZmZXIgYmVpbmcgcmVhZCwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHJlbGF5X2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCSAgICAgICBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgICAgIHNpemVfdCBjb3VudCwKLQkJCSAgICAgICBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlzaXplX3QgcmVhZF9zdGFydCwgYXZhaWw7Ci0Jc3NpemVfdCByZXQgPSAwOwotCXZvaWQgKmZyb207Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaWYoIXJlbGF5X2ZpbGVfcmVhZF9hdmFpbChidWYsICpwcG9zKSkKLQkJZ290byBvdXQ7Ci0KLQlyZWFkX3N0YXJ0ID0gcmVsYXlfZmlsZV9yZWFkX3N0YXJ0X3BvcygqcHBvcywgYnVmKTsKLQlhdmFpbCA9IHJlbGF5X2ZpbGVfcmVhZF9zdWJidWZfYXZhaWwocmVhZF9zdGFydCwgYnVmKTsKLQlpZiAoIWF2YWlsKQotCQlnb3RvIG91dDsKLQotCWZyb20gPSBidWYtPnN0YXJ0ICsgcmVhZF9zdGFydDsKLQlyZXQgPSBjb3VudCA9IG1pbihjb3VudCwgYXZhaWwpOwotCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBmcm9tLCBjb3VudCkpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBvdXQ7Ci0JfQotCXJlbGF5X2ZpbGVfcmVhZF9jb25zdW1lKGJ1ZiwgcmVhZF9zdGFydCwgY291bnQpOwotCSpwcG9zID0gcmVsYXlfZmlsZV9yZWFkX2VuZF9wb3MoYnVmLCByZWFkX3N0YXJ0LCBjb3VudCk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWxheV9maWxlX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4JCT0gcmVsYXlfZmlsZV9vcGVuLAotCS5wb2xsCQk9IHJlbGF5X2ZpbGVfcG9sbCwKLQkubW1hcAkJPSByZWxheV9maWxlX21tYXAsCi0JLnJlYWQJCT0gcmVsYXlfZmlsZV9yZWFkLAotCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS5yZWxlYXNlCT0gcmVsYXlfZmlsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHJlbGF5ZnNfb3BzID0gewotCS5zdGF0ZnMJCT0gc2ltcGxlX3N0YXRmcywKLQkuZHJvcF9pbm9kZQk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAotfTsKLQotc3RhdGljIGludCByZWxheWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHZvaWQgKiBkYXRhLCBpbnQgc2lsZW50KQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqcm9vdDsKLQlpbnQgbW9kZSA9IFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUlVHTyB8IFNfSVhVR087Ci0KLQlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7Ci0Jc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOwotCXNiLT5zX21hZ2ljID0gUkVMQVlGU19NQUdJQzsKLQlzYi0+c19vcCA9ICZyZWxheWZzX29wczsKLQlpbm9kZSA9IHJlbGF5ZnNfZ2V0X2lub2RlKHNiLCBtb2RlLCBOVUxMLCBOVUxMKTsKLQotCWlmICghaW5vZGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jcm9vdCA9IGRfYWxsb2Nfcm9vdChpbm9kZSk7Ci0JaWYgKCFyb290KSB7Ci0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc2ItPnNfcm9vdCA9IHJvb3Q7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqIHJlbGF5ZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAotCQkJCQkgICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAotCQkJCQkgICB2b2lkICpkYXRhKQotewotCXJldHVybiBnZXRfc2Jfc2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRhLCByZWxheWZzX2ZpbGxfc3VwZXIpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgcmVsYXlmc19mc190eXBlID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAicmVsYXlmcyIsCi0JLmdldF9zYgkJPSByZWxheWZzX2dldF9zYiwKLQkua2lsbF9zYgk9IGtpbGxfbGl0dGVyX3N1cGVyLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9yZWxheWZzX2ZzKHZvaWQpCi17Ci0JcmV0dXJuIHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnJlbGF5ZnNfZnNfdHlwZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JlbGF5ZnNfZnModm9pZCkKLXsKLQotCi0KLQotCi0JdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZyZWxheWZzX2ZzX3R5cGUpOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3JlbGF5ZnNfZnMpCi1tb2R1bGVfZXhpdChleGl0X3JlbGF5ZnNfZnMpCi0KLUVYUE9SVF9TWU1CT0xfR1BMKHJlbGF5X2ZpbGVfb3BlcmF0aW9ucyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWxheWZzX2NyZWF0ZV9kaXIpOwotRVhQT1JUX1NZTUJPTF9HUEwocmVsYXlmc19yZW1vdmVfZGlyKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJlbGF5ZnNfY3JlYXRlX2ZpbGUpOwotRVhQT1JUX1NZTUJPTF9HUEwocmVsYXlmc19yZW1vdmVfZmlsZSk7Ci0KLU1PRFVMRV9BVVRIT1IoIlRvbSBaYW51c3NpIDx6YW51c3NpQHVzLmlibS5jb20+IGFuZCBLYXJpbSBZYWdobW91ciA8a2FyaW1Ab3BlcnN5cy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJlbGF5IEZpbGVzeXN0ZW0iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZnMvcmVsYXlmcy9yZWxheS5jIGIvZnMvcmVsYXlmcy9yZWxheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmYzY2VhLi4wMDAwMDAwCi0tLSBhL2ZzL3JlbGF5ZnMvcmVsYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi0vKgotICogUHVibGljIEFQSSBhbmQgY29tbW9uIGNvZGUgZm9yIFJlbGF5RlMuCi0gKgotICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmVsYXlmcy50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHJlbGF5ZnMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgLSBUb20gWmFudXNzaSAoemFudXNzaUB1cy5pYm0uY29tKSwgSUJNIENvcnAKLSAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA1IC0gS2FyaW0gWWFnaG1vdXIgKGthcmltQG9wZXJzeXMuY29tKQotICoKLSAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWxheWZzX2ZzLmg+Ci0jaW5jbHVkZSAicmVsYXkuaCIKLSNpbmNsdWRlICJidWZmZXJzLmgiCi0KLS8qKgotICoJcmVsYXlfYnVmX2VtcHR5IC0gYm9vbGVhbiwgaXMgdGhlIGNoYW5uZWwgYnVmZmVyIGVtcHR5PwotICoJQGJ1ZjogY2hhbm5lbCBidWZmZXIKLSAqCi0gKglSZXR1cm5zIDEgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSwgMCBvdGhlcndpc2UuCi0gKi8KLWludCByZWxheV9idWZfZW1wdHkoc3RydWN0IHJjaGFuX2J1ZiAqYnVmKQotewotCXJldHVybiAoYnVmLT5zdWJidWZzX3Byb2R1Y2VkIC0gYnVmLT5zdWJidWZzX2NvbnN1bWVkKSA/IDAgOiAxOwotfQotCi0vKioKLSAqCXJlbGF5X2J1Zl9mdWxsIC0gYm9vbGVhbiwgaXMgdGhlIGNoYW5uZWwgYnVmZmVyIGZ1bGw/Ci0gKglAYnVmOiBjaGFubmVsIGJ1ZmZlcgotICoKLSAqCVJldHVybnMgMSBpZiB0aGUgYnVmZmVyIGlzIGZ1bGwsIDAgb3RoZXJ3aXNlLgotICovCi1pbnQgcmVsYXlfYnVmX2Z1bGwoc3RydWN0IHJjaGFuX2J1ZiAqYnVmKQotewotCXNpemVfdCByZWFkeSA9IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZCAtIGJ1Zi0+c3ViYnVmc19jb25zdW1lZDsKLQlyZXR1cm4gKHJlYWR5ID49IGJ1Zi0+Y2hhbi0+bl9zdWJidWZzKSA/IDEgOiAwOwotfQotCi0vKgotICogSGlnaC1sZXZlbCByZWxheWZzIGtlcm5lbCBBUEkgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zLgotICovCi0KLS8qCi0gKiByY2hhbl9jYWxsYmFjayBpbXBsZW1lbnRhdGlvbnMgZGVmaW5pbmcgZGVmYXVsdCBjaGFubmVsIGJlaGF2aW9yLiAgVXNlZAotICogaW4gcGxhY2Ugb2YgY29ycmVzcG9uZGluZyBOVUxMIHZhbHVlcyBpbiBjbGllbnQgY2FsbGJhY2sgc3RydWN0LgotICovCi0KLS8qCi0gKiBzdWJidWZfc3RhcnQoKSBkZWZhdWx0IGNhbGxiYWNrLiAgRG9lcyBub3RoaW5nLgotICovCi1zdGF0aWMgaW50IHN1YmJ1Zl9zdGFydF9kZWZhdWx0X2NhbGxiYWNrIChzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCi0JCQkJCSAgdm9pZCAqc3ViYnVmLAotCQkJCQkgIHZvaWQgKnByZXZfc3ViYnVmLAotCQkJCQkgIHNpemVfdCBwcmV2X3BhZGRpbmcpCi17Ci0JaWYgKHJlbGF5X2J1Zl9mdWxsKGJ1ZikpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBidWZfbWFwcGVkKCkgZGVmYXVsdCBjYWxsYmFjay4gIERvZXMgbm90aGluZy4KLSAqLwotc3RhdGljIHZvaWQgYnVmX21hcHBlZF9kZWZhdWx0X2NhbGxiYWNrKHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKLQkJCQkJc3RydWN0IGZpbGUgKmZpbHApCi17Ci19Ci0KLS8qCi0gKiBidWZfdW5tYXBwZWQoKSBkZWZhdWx0IGNhbGxiYWNrLiAgRG9lcyBub3RoaW5nLgotICovCi1zdGF0aWMgdm9pZCBidWZfdW5tYXBwZWRfZGVmYXVsdF9jYWxsYmFjayhzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCi0JCQkJCSAgc3RydWN0IGZpbGUgKmZpbHApCi17Ci19Ci0KLS8qCi0gKiBjcmVhdGVfYnVmX2ZpbGVfY3JlYXRlKCkgZGVmYXVsdCBjYWxsYmFjay4gIENyZWF0ZXMgZmlsZSB0byByZXByZXNlbnQgYnVmLgotICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY3JlYXRlX2J1Zl9maWxlX2RlZmF1bHRfY2FsbGJhY2soY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJCQkJICAgICAgIGludCBtb2RlLAotCQkJCQkJICAgICAgIHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKLQkJCQkJCSAgICAgICBpbnQgKmlzX2dsb2JhbCkKLXsKLQlyZXR1cm4gcmVsYXlmc19jcmVhdGVfZmlsZShmaWxlbmFtZSwgcGFyZW50LCBtb2RlLAotCQkJCSAgICZyZWxheV9maWxlX29wZXJhdGlvbnMsIGJ1Zik7Ci19Ci0KLS8qCi0gKiByZW1vdmVfYnVmX2ZpbGUoKSBkZWZhdWx0IGNhbGxiYWNrLiAgUmVtb3ZlcyBmaWxlIHJlcHJlc2VudGluZyByZWxheSBidWZmZXIuCi0gKi8KLXN0YXRpYyBpbnQgcmVtb3ZlX2J1Zl9maWxlX2RlZmF1bHRfY2FsbGJhY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXJldHVybiByZWxheWZzX3JlbW92ZShkZW50cnkpOwotfQotCi0vKiByZWxheSBjaGFubmVsIGRlZmF1bHQgY2FsbGJhY2tzICovCi1zdGF0aWMgc3RydWN0IHJjaGFuX2NhbGxiYWNrcyBkZWZhdWx0X2NoYW5uZWxfY2FsbGJhY2tzID0gewotCS5zdWJidWZfc3RhcnQgPSBzdWJidWZfc3RhcnRfZGVmYXVsdF9jYWxsYmFjaywKLQkuYnVmX21hcHBlZCA9IGJ1Zl9tYXBwZWRfZGVmYXVsdF9jYWxsYmFjaywKLQkuYnVmX3VubWFwcGVkID0gYnVmX3VubWFwcGVkX2RlZmF1bHRfY2FsbGJhY2ssCi0JLmNyZWF0ZV9idWZfZmlsZSA9IGNyZWF0ZV9idWZfZmlsZV9kZWZhdWx0X2NhbGxiYWNrLAotCS5yZW1vdmVfYnVmX2ZpbGUgPSByZW1vdmVfYnVmX2ZpbGVfZGVmYXVsdF9jYWxsYmFjaywKLX07Ci0KLS8qKgotICoJd2FrZXVwX3JlYWRlcnMgLSB3YWtlIHVwIHJlYWRlcnMgd2FpdGluZyBvbiBhIGNoYW5uZWwKLSAqCUBwcml2YXRlOiB0aGUgY2hhbm5lbCBidWZmZXIKLSAqCi0gKglUaGlzIGlzIHRoZSB3b3JrIGZ1bmN0aW9uIHVzZWQgdG8gZGVmZXIgcmVhZGVyIHdha2luZy4gIFRoZQotICoJcmVhc29uIHdha2luZyBpcyBkZWZlcnJlZCBpcyB0aGF0IGNhbGxpbmcgZGlyZWN0bHkgZnJvbSB3cml0ZQotICoJY2F1c2VzIHByb2JsZW1zIGlmIHlvdSdyZSB3cml0aW5nIGZyb20gc2F5IHRoZSBzY2hlZHVsZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHdha2V1cF9yZWFkZXJzKHZvaWQgKnByaXZhdGUpCi17Ci0Jc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gcHJpdmF0ZTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmJ1Zi0+cmVhZF93YWl0KTsKLX0KLQotLyoqCi0gKglfX3JlbGF5X3Jlc2V0IC0gcmVzZXQgYSBjaGFubmVsIGJ1ZmZlcgotICoJQGJ1ZjogdGhlIGNoYW5uZWwgYnVmZmVyCi0gKglAaW5pdDogMSBpZiB0aGlzIGlzIGEgZmlyc3QtdGltZSBpbml0aWFsaXphdGlvbgotICoKLSAqCVNlZSByZWxheV9yZXNldCBmb3IgZGVzY3JpcHRpb24gb2YgZWZmZWN0LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yZWxheV9yZXNldChzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHVuc2lnbmVkIGludCBpbml0KQotewotCXNpemVfdCBpOwotCi0JaWYgKGluaXQpIHsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmYnVmLT5yZWFkX3dhaXQpOwotCQlrcmVmX2luaXQoJmJ1Zi0+a3JlZik7Ci0JCUlOSVRfV09SSygmYnVmLT53YWtlX3JlYWRlcnMsIE5VTEwsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJmJ1Zi0+d2FrZV9yZWFkZXJzKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9Ci0KLQlidWYtPnN1YmJ1ZnNfcHJvZHVjZWQgPSAwOwotCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCA9IDA7Ci0JYnVmLT5ieXRlc19jb25zdW1lZCA9IDA7Ci0JYnVmLT5maW5hbGl6ZWQgPSAwOwotCWJ1Zi0+ZGF0YSA9IGJ1Zi0+c3RhcnQ7Ci0JYnVmLT5vZmZzZXQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGJ1Zi0+Y2hhbi0+bl9zdWJidWZzOyBpKyspCi0JCWJ1Zi0+cGFkZGluZ1tpXSA9IDA7Ci0KLQlidWYtPmNoYW4tPmNiLT5zdWJidWZfc3RhcnQoYnVmLCBidWYtPmRhdGEsIE5VTEwsIDApOwotfQotCi0vKioKLSAqCXJlbGF5X3Jlc2V0IC0gcmVzZXQgdGhlIGNoYW5uZWwKLSAqCUBjaGFuOiB0aGUgY2hhbm5lbAotICoKLSAqCVRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZXJhc2luZyBhbGwgZGF0YSBmcm9tIGFsbCBjaGFubmVsIGJ1ZmZlcnMKLSAqCWFuZCByZXN0YXJ0aW5nIHRoZSBjaGFubmVsIGluIGl0cyBpbml0aWFsIHN0YXRlLiAgVGhlIGJ1ZmZlcnMKLSAqCWFyZSBub3QgZnJlZWQsIHNvIGFueSBtYXBwaW5ncyBhcmUgc3RpbGwgaW4gZWZmZWN0LgotICoKLSAqCU5PVEU6IENhcmUgc2hvdWxkIGJlIHRha2VuIHRoYXQgdGhlIGNoYW5uZWwgaXNuJ3QgYWN0dWFsbHkKLSAqCWJlaW5nIHVzZWQgYnkgYW55dGhpbmcgd2hlbiB0aGlzIGNhbGwgaXMgbWFkZS4KLSAqLwotdm9pZCByZWxheV9yZXNldChzdHJ1Y3QgcmNoYW4gKmNoYW4pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHJjaGFuX2J1ZiAqcHJldiA9IE5VTEw7Ci0KLQlpZiAoIWNoYW4pCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJaWYgKCFjaGFuLT5idWZbaV0gfHwgY2hhbi0+YnVmW2ldID09IHByZXYpCi0JCQlicmVhazsKLQkJX19yZWxheV9yZXNldChjaGFuLT5idWZbaV0sIDApOwotCQlwcmV2ID0gY2hhbi0+YnVmW2ldOwotCX0KLX0KLQotLyoqCi0gKglyZWxheV9vcGVuX2J1ZiAtIGNyZWF0ZSBhIG5ldyBjaGFubmVsIGJ1ZmZlciBpbiByZWxheWZzCi0gKgotICoJSW50ZXJuYWwgLSB1c2VkIGJ5IHJlbGF5X29wZW4oKS4KLSAqLwotc3RhdGljIHN0cnVjdCByY2hhbl9idWYgKnJlbGF5X29wZW5fYnVmKHN0cnVjdCByY2hhbiAqY2hhbiwKLQkJCQkJY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCXN0cnVjdCBkZW50cnkgKnBhcmVudCwKLQkJCQkJaW50ICppc19nbG9iYWwpCi17Ci0Jc3RydWN0IHJjaGFuX2J1ZiAqYnVmOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLQotCWlmICgqaXNfZ2xvYmFsKQotCQlyZXR1cm4gY2hhbi0+YnVmWzBdOwotCi0gCWJ1ZiA9IHJlbGF5X2NyZWF0ZV9idWYoY2hhbik7Ci0gCWlmICghYnVmKQotIAkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBDcmVhdGUgZmlsZSBpbiBmcyAqLwotIAlkZW50cnkgPSBjaGFuLT5jYi0+Y3JlYXRlX2J1Zl9maWxlKGZpbGVuYW1lLCBwYXJlbnQsIFNfSVJVU1IsCi0gCQkJCQkgICBidWYsIGlzX2dsb2JhbCk7Ci0gCWlmICghZGVudHJ5KSB7Ci0gCQlyZWxheV9kZXN0cm95X2J1ZihidWYpOwotCQlyZXR1cm4gTlVMTDsKLSAJfQotCi0JYnVmLT5kZW50cnkgPSBkZW50cnk7Ci0JX19yZWxheV9yZXNldChidWYsIDEpOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQotLyoqCi0gKglyZWxheV9jbG9zZV9idWYgLSBjbG9zZSBhIGNoYW5uZWwgYnVmZmVyCi0gKglAYnVmOiBjaGFubmVsIGJ1ZmZlcgotICoKLSAqCU1hcmtzIHRoZSBidWZmZXIgZmluYWxpemVkIGFuZCByZXN0b3JlcyB0aGUgZGVmYXVsdCBjYWxsYmFja3MuCi0gKglUaGUgY2hhbm5lbCBidWZmZXIgYW5kIGNoYW5uZWwgYnVmZmVyIGRhdGEgc3RydWN0dXJlIGFyZSB0aGVuIGZyZWVkCi0gKglhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGdpdmVuIHVwLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVsYXlfY2xvc2VfYnVmKHN0cnVjdCByY2hhbl9idWYgKmJ1ZikKLXsKLQlidWYtPmZpbmFsaXplZCA9IDE7Ci0JYnVmLT5jaGFuLT5jYiA9ICZkZWZhdWx0X2NoYW5uZWxfY2FsbGJhY2tzOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmJ1Zi0+d2FrZV9yZWFkZXJzKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCWtyZWZfcHV0KCZidWYtPmtyZWYsIHJlbGF5X3JlbW92ZV9idWYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfY2FsbGJhY2tzKHN0cnVjdCByY2hhbiAqY2hhbiwKLQkJCQkgICBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzICpjYikKLXsKLQlpZiAoIWNiKSB7Ci0JCWNoYW4tPmNiID0gJmRlZmF1bHRfY2hhbm5lbF9jYWxsYmFja3M7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIWNiLT5zdWJidWZfc3RhcnQpCi0JCWNiLT5zdWJidWZfc3RhcnQgPSBzdWJidWZfc3RhcnRfZGVmYXVsdF9jYWxsYmFjazsKLQlpZiAoIWNiLT5idWZfbWFwcGVkKQotCQljYi0+YnVmX21hcHBlZCA9IGJ1Zl9tYXBwZWRfZGVmYXVsdF9jYWxsYmFjazsKLQlpZiAoIWNiLT5idWZfdW5tYXBwZWQpCi0JCWNiLT5idWZfdW5tYXBwZWQgPSBidWZfdW5tYXBwZWRfZGVmYXVsdF9jYWxsYmFjazsKLQlpZiAoIWNiLT5jcmVhdGVfYnVmX2ZpbGUpCi0JCWNiLT5jcmVhdGVfYnVmX2ZpbGUgPSBjcmVhdGVfYnVmX2ZpbGVfZGVmYXVsdF9jYWxsYmFjazsKLQlpZiAoIWNiLT5yZW1vdmVfYnVmX2ZpbGUpCi0JCWNiLT5yZW1vdmVfYnVmX2ZpbGUgPSByZW1vdmVfYnVmX2ZpbGVfZGVmYXVsdF9jYWxsYmFjazsKLQljaGFuLT5jYiA9IGNiOwotfQotCi0vKioKLSAqCXJlbGF5X29wZW4gLSBjcmVhdGUgYSBuZXcgcmVsYXlmcyBjaGFubmVsCi0gKglAYmFzZV9maWxlbmFtZTogYmFzZSBuYW1lIG9mIGZpbGVzIHRvIGNyZWF0ZQotICoJQHBhcmVudDogZGVudHJ5IG9mIHBhcmVudCBkaXJlY3RvcnksIE5VTEwgZm9yIHJvb3QgZGlyZWN0b3J5Ci0gKglAc3ViYnVmX3NpemU6IHNpemUgb2Ygc3ViLWJ1ZmZlcnMKLSAqCUBuX3N1YmJ1ZnM6IG51bWJlciBvZiBzdWItYnVmZmVycwotICoJQGNiOiBjbGllbnQgY2FsbGJhY2sgZnVuY3Rpb25zCi0gKgotICoJUmV0dXJucyBjaGFubmVsIHBvaW50ZXIgaWYgc3VjY2Vzc2Z1bCwgTlVMTCBvdGhlcndpc2UuCi0gKgotICoJQ3JlYXRlcyBhIGNoYW5uZWwgYnVmZmVyIGZvciBlYWNoIGNwdSB1c2luZyB0aGUgc2l6ZXMgYW5kCi0gKglhdHRyaWJ1dGVzIHNwZWNpZmllZC4gIFRoZSBjcmVhdGVkIGNoYW5uZWwgYnVmZmVyIGZpbGVzCi0gKgl3aWxsIGJlIG5hbWVkIGJhc2VfZmlsZW5hbWUwLi4uYmFzZV9maWxlbmFtZU4tMS4gIEZpbGUKLSAqCXBlcm1pc3Npb25zIHdpbGwgYmUgU19JUlVTUi4KLSAqLwotc3RydWN0IHJjaGFuICpyZWxheV9vcGVuKGNvbnN0IGNoYXIgKmJhc2VfZmlsZW5hbWUsCi0JCQkgc3RydWN0IGRlbnRyeSAqcGFyZW50LAotCQkJIHNpemVfdCBzdWJidWZfc2l6ZSwKLQkJCSBzaXplX3Qgbl9zdWJidWZzLAotCQkJIHN0cnVjdCByY2hhbl9jYWxsYmFja3MgKmNiKQotewotCXVuc2lnbmVkIGludCBpOwotCXN0cnVjdCByY2hhbiAqY2hhbjsKLQljaGFyICp0bXBuYW1lOwotCWludCBpc19nbG9iYWwgPSAwOwotCi0JaWYgKCFiYXNlX2ZpbGVuYW1lKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICghKHN1YmJ1Zl9zaXplICYmIG5fc3ViYnVmcykpCi0JCXJldHVybiBOVUxMOwotCi0JY2hhbiA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByY2hhbiksIEdGUF9LRVJORUwpOwotCWlmICghY2hhbikKLQkJcmV0dXJuIE5VTEw7Ci0KLQljaGFuLT52ZXJzaW9uID0gUkVMQVlGU19DSEFOTkVMX1ZFUlNJT047Ci0JY2hhbi0+bl9zdWJidWZzID0gbl9zdWJidWZzOwotCWNoYW4tPnN1YmJ1Zl9zaXplID0gc3ViYnVmX3NpemU7Ci0JY2hhbi0+YWxsb2Nfc2l6ZSA9IEZJWF9TSVpFKHN1YmJ1Zl9zaXplICogbl9zdWJidWZzKTsKLQlzZXR1cF9jYWxsYmFja3MoY2hhbiwgY2IpOwotCWtyZWZfaW5pdCgmY2hhbi0+a3JlZik7Ci0KLQl0bXBuYW1lID0ga21hbGxvYyhOQU1FX01BWCArIDEsIEdGUF9LRVJORUwpOwotCWlmICghdG1wbmFtZSkKLQkJZ290byBmcmVlX2NoYW47Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJc3ByaW50Zih0bXBuYW1lLCAiJXMlZCIsIGJhc2VfZmlsZW5hbWUsIGkpOwotCQljaGFuLT5idWZbaV0gPSByZWxheV9vcGVuX2J1ZihjaGFuLCB0bXBuYW1lLCBwYXJlbnQsCi0JCQkJCSAgICAgICZpc19nbG9iYWwpOwotCQljaGFuLT5idWZbaV0tPmNwdSA9IGk7Ci0JCWlmICghY2hhbi0+YnVmW2ldKQotCQkJZ290byBmcmVlX2J1ZnM7Ci0JfQotCi0Ja2ZyZWUodG1wbmFtZSk7Ci0JcmV0dXJuIGNoYW47Ci0KLWZyZWVfYnVmczoKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmICghY2hhbi0+YnVmW2ldKQotCQkJYnJlYWs7Ci0JCXJlbGF5X2Nsb3NlX2J1ZihjaGFuLT5idWZbaV0pOwotCQlpZiAoaXNfZ2xvYmFsKQotCQkJYnJlYWs7Ci0JfQotCWtmcmVlKHRtcG5hbWUpOwotCi1mcmVlX2NoYW46Ci0Ja3JlZl9wdXQoJmNoYW4tPmtyZWYsIHJlbGF5X2Rlc3Ryb3lfY2hhbm5lbCk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICoJcmVsYXlfc3dpdGNoX3N1YmJ1ZiAtIHN3aXRjaCB0byBhIG5ldyBzdWItYnVmZmVyCi0gKglAYnVmOiBjaGFubmVsIGJ1ZmZlcgotICoJQGxlbmd0aDogc2l6ZSBvZiBjdXJyZW50IGV2ZW50Ci0gKgotICoJUmV0dXJucyBlaXRoZXIgdGhlIGxlbmd0aCBwYXNzZWQgaW4gb3IgMCBpZiBmdWxsLgotCi0gKglQZXJmb3JtcyBzdWItYnVmZmVyLXN3aXRjaCB0YXNrcyBzdWNoIGFzIGludm9raW5nIGNhbGxiYWNrcywKLSAqCXVwZGF0aW5nIHBhZGRpbmcgY291bnRzLCB3YWtpbmcgdXAgcmVhZGVycywgZXRjLgotICovCi1zaXplX3QgcmVsYXlfc3dpdGNoX3N1YmJ1ZihzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHNpemVfdCBsZW5ndGgpCi17Ci0Jdm9pZCAqb2xkLCAqbmV3OwotCXNpemVfdCBvbGRfc3ViYnVmLCBuZXdfc3ViYnVmOwotCi0JaWYgKHVubGlrZWx5KGxlbmd0aCA+IGJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemUpKQotCQlnb3RvIHRvb2JpZzsKLQotCWlmIChidWYtPm9mZnNldCAhPSBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplICsgMSkgewotCQlidWYtPnByZXZfcGFkZGluZyA9IGJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemUgLSBidWYtPm9mZnNldDsKLQkJb2xkX3N1YmJ1ZiA9IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZCAlIGJ1Zi0+Y2hhbi0+bl9zdWJidWZzOwotCQlidWYtPnBhZGRpbmdbb2xkX3N1YmJ1Zl0gPSBidWYtPnByZXZfcGFkZGluZzsKLQkJYnVmLT5zdWJidWZzX3Byb2R1Y2VkKys7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZidWYtPnJlYWRfd2FpdCkpIHsKLQkJCVBSRVBBUkVfV09SSygmYnVmLT53YWtlX3JlYWRlcnMsIHdha2V1cF9yZWFkZXJzLCBidWYpOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZidWYtPndha2VfcmVhZGVycywgMSk7Ci0JCX0KLQl9Ci0KLQlvbGQgPSBidWYtPmRhdGE7Ci0JbmV3X3N1YmJ1ZiA9IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZCAlIGJ1Zi0+Y2hhbi0+bl9zdWJidWZzOwotCW5ldyA9IGJ1Zi0+c3RhcnQgKyBuZXdfc3ViYnVmICogYnVmLT5jaGFuLT5zdWJidWZfc2l6ZTsKLQlidWYtPm9mZnNldCA9IDA7Ci0JaWYgKCFidWYtPmNoYW4tPmNiLT5zdWJidWZfc3RhcnQoYnVmLCBuZXcsIG9sZCwgYnVmLT5wcmV2X3BhZGRpbmcpKSB7Ci0JCWJ1Zi0+b2Zmc2V0ID0gYnVmLT5jaGFuLT5zdWJidWZfc2l6ZSArIDE7Ci0JCXJldHVybiAwOwotCX0KLQlidWYtPmRhdGEgPSBuZXc7Ci0JYnVmLT5wYWRkaW5nW25ld19zdWJidWZdID0gMDsKLQotCWlmICh1bmxpa2VseShsZW5ndGggKyBidWYtPm9mZnNldCA+IGJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemUpKQotCQlnb3RvIHRvb2JpZzsKLQotCXJldHVybiBsZW5ndGg7Ci0KLXRvb2JpZzoKLQlidWYtPmNoYW4tPmxhc3RfdG9vYmlnID0gbGVuZ3RoOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXJlbGF5X3N1YmJ1ZnNfY29uc3VtZWQgLSB1cGRhdGUgdGhlIGJ1ZmZlcidzIHN1Yi1idWZmZXJzLWNvbnN1bWVkIGNvdW50Ci0gKglAY2hhbjogdGhlIGNoYW5uZWwKLSAqCUBjcHU6IHRoZSBjcHUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGFubmVsIGJ1ZmZlciB0byB1cGRhdGUKLSAqCUBzdWJidWZzX2NvbnN1bWVkOiBudW1iZXIgb2Ygc3ViLWJ1ZmZlcnMgdG8gYWRkIHRvIGN1cnJlbnQgYnVmJ3MgY291bnQKLSAqCi0gKglBZGRzIHRvIHRoZSBjaGFubmVsIGJ1ZmZlcidzIGNvbnN1bWVkIHN1Yi1idWZmZXIgY291bnQuCi0gKglzdWJidWZzX2NvbnN1bWVkIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIHN1Yi1idWZmZXJzIG5ld2x5IGNvbnN1bWVkLAotICoJbm90IHRoZSB0b3RhbCBjb25zdW1lZC4KLSAqCi0gKglOT1RFOiBrZXJuZWwgY2xpZW50cyBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB0aGUgY2hhbm5lbAotICoJbW9kZSBpcyAnb3ZlcndyaXRlJy4KLSAqLwotdm9pZCByZWxheV9zdWJidWZzX2NvbnN1bWVkKHN0cnVjdCByY2hhbiAqY2hhbiwKLQkJCSAgICB1bnNpZ25lZCBpbnQgY3B1LAotCQkJICAgIHNpemVfdCBzdWJidWZzX2NvbnN1bWVkKQotewotCXN0cnVjdCByY2hhbl9idWYgKmJ1ZjsKLQotCWlmICghY2hhbikKLQkJcmV0dXJuOwotCi0JaWYgKGNwdSA+PSBOUl9DUFVTIHx8ICFjaGFuLT5idWZbY3B1XSkKLQkJcmV0dXJuOwotCi0JYnVmID0gY2hhbi0+YnVmW2NwdV07Ci0JYnVmLT5zdWJidWZzX2NvbnN1bWVkICs9IHN1YmJ1ZnNfY29uc3VtZWQ7Ci0JaWYgKGJ1Zi0+c3ViYnVmc19jb25zdW1lZCA+IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZCkKLQkJYnVmLT5zdWJidWZzX2NvbnN1bWVkID0gYnVmLT5zdWJidWZzX3Byb2R1Y2VkOwotfQotCi0vKioKLSAqCXJlbGF5X2Rlc3Ryb3lfY2hhbm5lbCAtIGZyZWUgdGhlIGNoYW5uZWwgc3RydWN0Ci0gKgotICoJU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20ga3JlZl9wdXQoKS4KLSAqLwotdm9pZCByZWxheV9kZXN0cm95X2NoYW5uZWwoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IHJjaGFuICpjaGFuID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByY2hhbiwga3JlZik7Ci0Ja2ZyZWUoY2hhbik7Ci19Ci0KLS8qKgotICoJcmVsYXlfY2xvc2UgLSBjbG9zZSB0aGUgY2hhbm5lbAotICoJQGNoYW46IHRoZSBjaGFubmVsCi0gKgotICoJQ2xvc2VzIGFsbCBjaGFubmVsIGJ1ZmZlcnMgYW5kIGZyZWVzIHRoZSBjaGFubmVsLgotICovCi12b2lkIHJlbGF5X2Nsb3NlKHN0cnVjdCByY2hhbiAqY2hhbikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgcmNoYW5fYnVmICpwcmV2ID0gTlVMTDsKLQotCWlmICghY2hhbikKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNoYW4tPmJ1ZltpXSB8fCBjaGFuLT5idWZbaV0gPT0gcHJldikKLQkJCWJyZWFrOwotCQlyZWxheV9jbG9zZV9idWYoY2hhbi0+YnVmW2ldKTsKLQkJcHJldiA9IGNoYW4tPmJ1ZltpXTsKLQl9Ci0KLQlpZiAoY2hhbi0+bGFzdF90b29iaWcpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInJlbGF5ZnM6IG9uZSBvciBtb3JlIGl0ZW1zIG5vdCBsb2dnZWQgIgotCQkgICAgICAgIltpdGVtIHNpemUgKCVaZCkgPiBzdWItYnVmZmVyIHNpemUgKCVaZCldXG4iLAotCQkgICAgICAgY2hhbi0+bGFzdF90b29iaWcsIGNoYW4tPnN1YmJ1Zl9zaXplKTsKLQotCWtyZWZfcHV0KCZjaGFuLT5rcmVmLCByZWxheV9kZXN0cm95X2NoYW5uZWwpOwotfQotCi0vKioKLSAqCXJlbGF5X2ZsdXNoIC0gY2xvc2UgdGhlIGNoYW5uZWwKLSAqCUBjaGFuOiB0aGUgY2hhbm5lbAotICoKLSAqCUZsdXNoZXMgYWxsIGNoYW5uZWwgYnVmZmVycyBpLmUuIGZvcmNlcyBidWZmZXIgc3dpdGNoLgotICovCi12b2lkIHJlbGF5X2ZsdXNoKHN0cnVjdCByY2hhbiAqY2hhbikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgcmNoYW5fYnVmICpwcmV2ID0gTlVMTDsKLQotCWlmICghY2hhbikKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoIWNoYW4tPmJ1ZltpXSB8fCBjaGFuLT5idWZbaV0gPT0gcHJldikKLQkJCWJyZWFrOwotCQlyZWxheV9zd2l0Y2hfc3ViYnVmKGNoYW4tPmJ1ZltpXSwgMCk7Ci0JCXByZXYgPSBjaGFuLT5idWZbaV07Ci0JfQotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChyZWxheV9vcGVuKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJlbGF5X2Nsb3NlKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJlbGF5X2ZsdXNoKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJlbGF5X3Jlc2V0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKHJlbGF5X3N1YmJ1ZnNfY29uc3VtZWQpOwotRVhQT1JUX1NZTUJPTF9HUEwocmVsYXlfc3dpdGNoX3N1YmJ1Zik7Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWxheV9idWZfZnVsbCk7CmRpZmYgLS1naXQgYS9mcy9yZWxheWZzL3JlbGF5LmggYi9mcy9yZWxheWZzL3JlbGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5OTNkM2UuLjAwMDAwMDAKLS0tIGEvZnMvcmVsYXlmcy9yZWxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaWZuZGVmIF9SRUxBWV9ICi0jZGVmaW5lIF9SRUxBWV9ICi0KLWV4dGVybiBpbnQgcmVsYXlmc19yZW1vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLWV4dGVybiBpbnQgcmVsYXlfYnVmX2VtcHR5KHN0cnVjdCByY2hhbl9idWYgKmJ1Zik7Ci1leHRlcm4gdm9pZCByZWxheV9kZXN0cm95X2NoYW5uZWwoc3RydWN0IGtyZWYgKmtyZWYpOwotCi0jZW5kaWYgLyogX1JFTEFZX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL3JvbWZzL2lub2RlLmMgYi9mcy9yb21mcy9pbm9kZS5jCmluZGV4IDBhMTM4NTkuLmMyZmM0MjRkIDEwMDY0NAotLS0gYS9mcy9yb21mcy9pbm9kZS5jCisrKyBiL2ZzL3JvbWZzL2lub2RlLmMKQEAgLTU3OSw3ICs1NzksOCBAQAogewogCXJvbWZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJyb21mc19pbm9kZV9jYWNoZSIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCByb21mc19pbm9kZV9pbmZvKSwKLQkJCQkJICAgICAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCQkJICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgICAgIGluaXRfb25jZSwgTlVMTCk7CiAJaWYgKHJvbWZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL3NlcV9maWxlLmMgYi9mcy9zZXFfZmlsZS5jCmluZGV4IDdjNDA1NzAuLjU1NWI5YWMgMTAwNjQ0Ci0tLSBhL2ZzL3NlcV9maWxlLmMKKysrIGIvZnMvc2VxX2ZpbGUuYwpAQCAtMzcsNyArMzcsNyBAQAogCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBwOwogCX0KIAltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0Jc2VtYV9pbml0KCZwLT5zZW0sIDEpOworCW11dGV4X2luaXQoJnAtPmxvY2spOwogCXAtPm9wID0gb3A7CiAKIAkvKgpAQCAtNzEsNyArNzEsNyBAQAogCXZvaWQgKnA7CiAJaW50IGVyciA9IDA7CiAKLQlkb3duKCZtLT5zZW0pOworCW11dGV4X2xvY2soJm0tPmxvY2spOwogCS8qCiAJICogc2VxX2ZpbGUtPm9wLT4uLm1fc3RhcnQvbV9zdG9wL21fbmV4dCBtYXkgZG8gc3BlY2lhbCBhY3Rpb25zCiAJICogb3Igb3B0aW1pc2F0aW9ucyBiYXNlZCBvbiB0aGUgZmlsZS0+Zl92ZXJzaW9uLCBzbyB3ZSB3YW50IHRvCkBAIC0xNjQsNyArMTY0LDcgQEAKIAllbHNlCiAJCSpwcG9zICs9IGNvcGllZDsKIAlmaWxlLT5mX3ZlcnNpb24gPSBtLT52ZXJzaW9uOwotCXVwKCZtLT5zZW0pOworCW11dGV4X3VubG9jaygmbS0+bG9jayk7CiAJcmV0dXJuIGNvcGllZDsKIEVub21lbToKIAllcnIgPSAtRU5PTUVNOwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlsb25nIGxvbmcgcmV0dmFsID0gLUVJTlZBTDsKIAotCWRvd24oJm0tPnNlbSk7CisJbXV0ZXhfbG9jaygmbS0+bG9jayk7CiAJbS0+dmVyc2lvbiA9IGZpbGUtPmZfdmVyc2lvbjsKIAlzd2l0Y2ggKG9yaWdpbikgewogCQljYXNlIDE6CkBAIC0yNjAsNyArMjYwLDcgQEAKIAkJCQl9CiAJCQl9CiAJfQotCXVwKCZtLT5zZW0pOworCW11dGV4X3VubG9jaygmbS0+bG9jayk7CiAJZmlsZS0+Zl92ZXJzaW9uID0gbS0+dmVyc2lvbjsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZnMvc21iZnMvaW5vZGUuYyBiL2ZzL3NtYmZzL2lub2RlLmMKaW5kZXggMDJlM2U4Mi4uZmRlYWJjMCAxMDA2NDQKLS0tIGEvZnMvc21iZnMvaW5vZGUuYworKysgYi9mcy9zbWJmcy9pbm9kZS5jCkBAIC04MCw3ICs4MCw4IEBACiB7CiAJc21iX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJzbWJfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc21iX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAoc21iX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIxNiw3ICsyMTcsNyBAQAogCWlmIChpbm9kZS0+aV9tdGltZS50dl9zZWMgIT0gbGFzdF90aW1lIHx8IGlub2RlLT5pX3NpemUgIT0gbGFzdF9zeikgewogCQlWRVJCT1NFKCIlbGQgY2hhbmdlZCwgb2xkPSVsZCwgbmV3PSVsZCwgb3o9JWxkLCBuej0lbGRcbiIsCiAJCQlpbm9kZS0+aV9pbm8sCi0JCQkobG9uZykgbGFzdF90aW1lLCAobG9uZykgaW5vZGUtPmlfbXRpbWUsCisJCQkobG9uZykgbGFzdF90aW1lLCAobG9uZykgaW5vZGUtPmlfbXRpbWUudHZfc2VjLAogCQkJKGxvbmcpIGxhc3Rfc3osIChsb25nKSBpbm9kZS0+aV9zaXplKTsKIAogCQlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAzMDI5NDIxLi44NzQzZTliIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTU1LDExICs1NSwxMCBAQAogICovCiBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICphbGxvY19zdXBlcih2b2lkKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdXBlcl9ibG9jayksICBHRlBfVVNFUik7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN1cGVyX2Jsb2NrKSwgIEdGUF9VU0VSKTsKIAlzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGVmYXVsdF9vcDsKIAogCWlmIChzKSB7Ci0JCW1lbXNldChzLCAwLCBzaXplb2Yoc3RydWN0IHN1cGVyX2Jsb2NrKSk7CiAJCWlmIChzZWN1cml0eV9zYl9hbGxvYyhzKSkgewogCQkJa2ZyZWUocyk7CiAJCQlzID0gTlVMTDsKQEAgLTc2LDkgKzc1LDkgQEAKIAkJZG93bl93cml0ZSgmcy0+c191bW91bnQpOwogCQlzLT5zX2NvdW50ID0gU19CSUFTOwogCQlhdG9taWNfc2V0KCZzLT5zX2FjdGl2ZSwgMSk7Ci0JCXNlbWFfaW5pdCgmcy0+c192ZnNfcmVuYW1lX3NlbSwxKTsKLQkJc2VtYV9pbml0KCZzLT5zX2RxdW90LmRxaW9fc2VtLCAxKTsKLQkJc2VtYV9pbml0KCZzLT5zX2RxdW90LmRxb25vZmZfc2VtLCAxKTsKKwkJbXV0ZXhfaW5pdCgmcy0+c192ZnNfcmVuYW1lX211dGV4KTsKKwkJbXV0ZXhfaW5pdCgmcy0+c19kcXVvdC5kcWlvX211dGV4KTsKKwkJbXV0ZXhfaW5pdCgmcy0+c19kcXVvdC5kcW9ub2ZmX211dGV4KTsKIAkJaW5pdF9yd3NlbSgmcy0+c19kcXVvdC5kcXB0cl9zZW0pOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5zX3dhaXRfdW5mcm96ZW4pOwogCQlzLT5zX21heGJ5dGVzID0gTUFYX05PTl9MRlM7CkBAIC02NjYsNiArNjY1LDE2IEBACiAJcmV0dXJuICh2b2lkICopcy0+c19iZGV2ID09IGRhdGE7CiB9CiAKK3N0YXRpYyB2b2lkIGJkZXZfdWV2ZW50KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uKQoreworCWlmIChiZGV2LT5iZF9kaXNrKSB7CisJCWlmIChiZGV2LT5iZF9wYXJ0KQorCQkJa29iamVjdF91ZXZlbnQoJmJkZXYtPmJkX3BhcnQtPmtvYmosIGFjdGlvbik7CisJCWVsc2UKKwkJCWtvYmplY3RfdWV2ZW50KCZiZGV2LT5iZF9kaXNrLT5rb2JqLCBhY3Rpb24pOworCX0KK30KKwogc3RydWN0IHN1cGVyX2Jsb2NrICpnZXRfc2JfYmRldihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLAogCWludCAoKmZpbGxfc3VwZXIpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICosIGludCkpCkBAIC02ODMsOSArNjkyLDkgQEAKIAkgKiB3aWxsIHByb3RlY3QgdGhlIGxvY2tmcyBjb2RlIGZyb20gdHJ5aW5nIHRvIHN0YXJ0IGEgc25hcHNob3QKIAkgKiB3aGlsZSB3ZSBhcmUgbW91bnRpbmcKIAkgKi8KLQlkb3duKCZiZGV2LT5iZF9tb3VudF9zZW0pOworCW11dGV4X2xvY2soJmJkZXYtPmJkX21vdW50X211dGV4KTsKIAlzID0gc2dldChmc190eXBlLCB0ZXN0X2JkZXZfc3VwZXIsIHNldF9iZGV2X3N1cGVyLCBiZGV2KTsKLQl1cCgmYmRldi0+YmRfbW91bnRfc2VtKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX21vdW50X211dGV4KTsKIAlpZiAoSVNfRVJSKHMpKQogCQlnb3RvIG91dDsKIApAQCAtNzAyLDEzICs3MTEsMTUgQEAKIAkJcy0+c19mbGFncyA9IGZsYWdzOwogCQlzdHJsY3B5KHMtPnNfaWQsIGJkZXZuYW1lKGJkZXYsIGIpLCBzaXplb2Yocy0+c19pZCkpOwogCQlzYl9zZXRfYmxvY2tzaXplKHMsIGJsb2NrX3NpemUoYmRldikpOwotCQllcnJvciA9IGZpbGxfc3VwZXIocywgZGF0YSwgZmxhZ3MgJiBNU19WRVJCT1NFID8gMSA6IDApOworCQllcnJvciA9IGZpbGxfc3VwZXIocywgZGF0YSwgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7CiAJCWlmIChlcnJvcikgewogCQkJdXBfd3JpdGUoJnMtPnNfdW1vdW50KTsKIAkJCWRlYWN0aXZhdGVfc3VwZXIocyk7CiAJCQlzID0gRVJSX1BUUihlcnJvcik7Ci0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7CisJCQliZGV2X3VldmVudChiZGV2LCBLT0JKX01PVU5UKTsKKwkJfQogCX0KIAogCXJldHVybiBzOwpAQCAtNzI0LDYgKzczNSw3IEBACiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHNiLT5zX2JkZXY7CiAKKwliZGV2X3VldmVudChiZGV2LCBLT0JKX1VNT1VOVCk7CiAJZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzYik7CiAJc3luY19ibG9ja2RldihiZGV2KTsKIAljbG9zZV9iZGV2X2V4Y2woYmRldik7CkBAIC03NDMsNyArNzU1LDcgQEAKIAogCXMtPnNfZmxhZ3MgPSBmbGFnczsKIAotCWVycm9yID0gZmlsbF9zdXBlcihzLCBkYXRhLCBmbGFncyAmIE1TX1ZFUkJPU0UgPyAxIDogMCk7CisJZXJyb3IgPSBmaWxsX3N1cGVyKHMsIGRhdGEsIGZsYWdzICYgTVNfU0lMRU5UID8gMSA6IDApOwogCWlmIChlcnJvcikgewogCQl1cF93cml0ZSgmcy0+c191bW91bnQpOwogCQlkZWFjdGl2YXRlX3N1cGVyKHMpOwpAQCAtNzcyLDcgKzc4NCw3IEBACiAJCXJldHVybiBzOwogCWlmICghcy0+c19yb290KSB7CiAJCXMtPnNfZmxhZ3MgPSBmbGFnczsKLQkJZXJyb3IgPSBmaWxsX3N1cGVyKHMsIGRhdGEsIGZsYWdzICYgTVNfVkVSQk9TRSA/IDEgOiAwKTsKKwkJZXJyb3IgPSBmaWxsX3N1cGVyKHMsIGRhdGEsIGZsYWdzICYgTVNfU0lMRU5UID8gMSA6IDApOwogCQlpZiAoZXJyb3IpIHsKIAkJCXVwX3dyaXRlKCZzLT5zX3Vtb3VudCk7CiAJCQlkZWFjdGl2YXRlX3N1cGVyKHMpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCA0OWJkMjE5Li45ZWU5NTY4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtNTAsNiArNTAsMzIgQEAKIAlyZXR1cm4gc2Q7CiB9CiAKKy8qKgorICoKKyAqIFJldHVybiAtRUVYSVNUIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzeXNmcyBlbGVtZW50IHdpdGggdGhlIHNhbWUgbmFtZSBmb3IKKyAqIHRoZSBzYW1lIHBhcmVudC4KKyAqCisgKiBjYWxsZWQgd2l0aCBwYXJlbnQgaW5vZGUncyBpX211dGV4IGhlbGQKKyAqLworaW50IHN5c2ZzX2RpcmVudF9leGlzdChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpwYXJlbnRfc2QsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldykKK3sKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2Q7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmcGFyZW50X3NkLT5zX2NoaWxkcmVuLCBzX3NpYmxpbmcpIHsKKwkJaWYgKHNkLT5zX2VsZW1lbnQpIHsKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4aXN0aW5nID0gc3lzZnNfZ2V0X25hbWUoc2QpOworCQkJaWYgKHN0cmNtcChleGlzdGluZywgbmV3KSkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVFWElTVDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisKIGludCBzeXNmc19tYWtlX2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogcGFyZW50X3NkLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LAogCQkJdm9pZCAqIGVsZW1lbnQsIHVtb2RlX3QgbW9kZSwgaW50IHR5cGUpCiB7CkBAIC0xMDIsNyArMTI4LDExIEBACiAJbXV0ZXhfbG9jaygmcC0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJKmQgPSBsb29rdXBfb25lX2xlbihuLCBwLCBzdHJsZW4obikpOwogCWlmICghSVNfRVJSKCpkKSkgewotCQllcnJvciA9IHN5c2ZzX21ha2VfZGlyZW50KHAtPmRfZnNkYXRhLCAqZCwgaywgbW9kZSwgU1lTRlNfRElSKTsKKyAJCWlmIChzeXNmc19kaXJlbnRfZXhpc3QocC0+ZF9mc2RhdGEsIG4pKQorICAJCQllcnJvciA9IC1FRVhJU1Q7CisgIAkJZWxzZQorCQkJZXJyb3IgPSBzeXNmc19tYWtlX2RpcmVudChwLT5kX2ZzZGF0YSwgKmQsIGssIG1vZGUsCisJCQkJCQkJCVNZU0ZTX0RJUik7CiAJCWlmICghZXJyb3IpIHsKIAkJCWVycm9yID0gc3lzZnNfY3JlYXRlKCpkLCBtb2RlLCBpbml0X2Rpcik7CiAJCQlpZiAoIWVycm9yKSB7CkBAIC0zMDIsNiArMzMyLDcgQEAKIAkgKiBEcm9wIHJlZmVyZW5jZSBmcm9tIGRnZXQoKSBvbiBlbnRyYW5jZS4KIAkgKi8KIAlkcHV0KGRlbnRyeSk7CisJa29iai0+ZGVudHJ5ID0gTlVMTDsKIH0KIAogaW50IHN5c2ZzX3JlbmFtZV9kaXIoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKQEAgLTQ3OSw3ICs1MTAsMyBAQAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBzeXNmc19yZWFkZGlyLAogfTsKLQotRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfY3JlYXRlX2Rpcik7Ci1FWFBPUlRfU1lNQk9MX0dQTChzeXNmc19yZW1vdmVfZGlyKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX3JlbmFtZV9kaXIpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZmlsZS5jIGIvZnMvc3lzZnMvZmlsZS5jCmluZGV4IGQwZTNkODQuLjVlODNlNzIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTMwMSw5ICszMDEsOCBAQAogCS8qIE5vIGVycm9yPyBHcmVhdCwgYWxsb2NhdGUgYSBidWZmZXIgZm9yIHRoZSBmaWxlLCBhbmQgc3RvcmUgaXQKIAkgKiBpdCBpbiBmaWxlLT5wcml2YXRlX2RhdGEgZm9yIGVhc3kgYWNjZXNzLgogCSAqLwotCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzeXNmc19idWZmZXIpLEdGUF9LRVJORUwpOworCWJ1ZmZlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeXNmc19idWZmZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmZmVyKSB7Ci0JCW1lbXNldChidWZmZXIsMCxzaXplb2Yoc3RydWN0IHN5c2ZzX2J1ZmZlcikpOwogCQlpbml0X01VVEVYKCZidWZmZXItPnNlbSk7CiAJCWJ1ZmZlci0+bmVlZHNfcmVhZF9maWxsID0gMTsKIAkJYnVmZmVyLT5vcHMgPSBvcHM7CkBAIC0zNjIsMTAgKzM2MSwxMiBAQAogewogCXN0cnVjdCBzeXNmc19kaXJlbnQgKiBwYXJlbnRfc2QgPSBkaXItPmRfZnNkYXRhOwogCXVtb2RlX3QgbW9kZSA9IChhdHRyLT5tb2RlICYgU19JQUxMVUdPKSB8IFNfSUZSRUc7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgZXJyb3IgPSAtRUVYSVNUOwogCiAJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKLQllcnJvciA9IHN5c2ZzX21ha2VfZGlyZW50KHBhcmVudF9zZCwgTlVMTCwgKHZvaWQgKikgYXR0ciwgbW9kZSwgdHlwZSk7CisJaWYgKCFzeXNmc19kaXJlbnRfZXhpc3QocGFyZW50X3NkLCBhdHRyLT5uYW1lKSkKKwkJZXJyb3IgPSBzeXNmc19tYWtlX2RpcmVudChwYXJlbnRfc2QsIE5VTEwsICh2b2lkICopYXR0ciwKKwkJCQkJICBtb2RlLCB0eXBlKTsKIAltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCA2ODlmN2JjLi40YzI5YWM0IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTU0LDExICs1NCwxMCBAQAogCiAJaWYgKCFzZF9pYXR0cikgewogCQkvKiBzZXR0aW5nIGF0dHJpYnV0ZXMgZm9yIHRoZSBmaXJzdCB0aW1lLCBhbGxvY2F0ZSBub3cgKi8KLQkJc2RfaWF0dHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWF0dHIpLCBHRlBfS0VSTkVMKTsKKwkJc2RfaWF0dHIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWF0dHIpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzZF9pYXR0cikKIAkJCXJldHVybiAtRU5PTUVNOwogCQkvKiBhc3NpZ24gZGVmYXVsdCBhdHRyaWJ1dGVzICovCi0JCW1lbXNldChzZF9pYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBpYXR0cikpOwogCQlzZF9pYXR0ci0+aWFfbW9kZSA9IHNkLT5zX21vZGU7CiAJCXNkX2lhdHRyLT5pYV91aWQgPSAwOwogCQlzZF9pYXR0ci0+aWFfZ2lkID0gMDsKQEAgLTIyNywxMiArMjI2LDE2IEBACiB2b2lkIHN5c2ZzX2hhc2hfYW5kX3JlbW92ZShzdHJ1Y3QgZGVudHJ5ICogZGlyLCBjb25zdCBjaGFyICogbmFtZSkKIHsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICogc2Q7Ci0Jc3RydWN0IHN5c2ZzX2RpcmVudCAqIHBhcmVudF9zZCA9IGRpci0+ZF9mc2RhdGE7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqIHBhcmVudF9zZDsKKworCWlmICghZGlyKQorCQlyZXR1cm47CiAKIAlpZiAoZGlyLT5kX2lub2RlID09IE5VTEwpCiAJCS8qIG5vIGlub2RlIG1lYW5zIHRoaXMgaGFzbid0IGJlZW4gbWFkZSB2aXNpYmxlIHlldCAqLwogCQlyZXR1cm47CiAKKwlwYXJlbnRfc2QgPSBkaXItPmRfZnNkYXRhOwogCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJnBhcmVudF9zZC0+c19jaGlsZHJlbiwgc19zaWJsaW5nKSB7CiAJCWlmICghc2QtPnNfZWxlbWVudCkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5bWxpbmsuYyBiL2ZzL3N5c2ZzL3N5bWxpbmsuYwppbmRleCBlMzhkNjMzLi5kMmVhYzNjIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeW1saW5rLmMKKysrIGIvZnMvc3lzZnMvc3ltbGluay5jCkBAIC02Niw2ICs2Niw3IEBACiAJaWYgKCFlcnJvcikKIAkJcmV0dXJuIDA7CiAKKwlrb2JqZWN0X3B1dCh0YXJnZXQpOwogCWtmcmVlKHNsLT5saW5rX25hbWUpOwogZXhpdDI6CiAJa2ZyZWUoc2wpOwpAQCAtODIsMTIgKzgzLDEzIEBACiBpbnQgc3lzZnNfY3JlYXRlX2xpbmsoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3Qga29iamVjdCAqIHRhcmdldCwgY29uc3QgY2hhciAqIG5hbWUpCiB7CiAJc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGtvYmotPmRlbnRyeTsKLQlpbnQgZXJyb3IgPSAwOworCWludCBlcnJvciA9IC1FRVhJU1Q7CiAKIAlCVUdfT04oIWtvYmogfHwgIWtvYmotPmRlbnRyeSB8fCAhbmFtZSk7CiAKIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwotCWVycm9yID0gc3lzZnNfYWRkX2xpbmsoZGVudHJ5LCBuYW1lLCB0YXJnZXQpOworCWlmICghc3lzZnNfZGlyZW50X2V4aXN0KGRlbnRyeS0+ZF9mc2RhdGEsIG5hbWUpKQorCQllcnJvciA9IHN5c2ZzX2FkZF9saW5rKGRlbnRyeSwgbmFtZSwgdGFyZ2V0KTsKIAltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvc3lzZnMuaCBiL2ZzL3N5c2ZzL3N5c2ZzLmgKaW5kZXggM2Y4OTUzZS4uY2YxMWQ1YiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvc3lzZnMuaAorKysgYi9mcy9zeXNmcy9zeXNmcy5oCkBAIC01LDYgKzUsNyBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIHN5c2ZzX25ld19pbm9kZShtb2RlX3QgbW9kZSwgc3RydWN0IHN5c2ZzX2RpcmVudCAqKTsKIGV4dGVybiBpbnQgc3lzZnNfY3JlYXRlKHN0cnVjdCBkZW50cnkgKiwgaW50IG1vZGUsIGludCAoKmluaXQpKHN0cnVjdCBpbm9kZSAqKSk7CiAKK2V4dGVybiBpbnQgc3lzZnNfZGlyZW50X2V4aXN0KHN0cnVjdCBzeXNmc19kaXJlbnQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqKTsKIGV4dGVybiBpbnQgc3lzZnNfbWFrZV9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHZvaWQgKiwKIAkJCQl1bW9kZV90LCBpbnQpOwogCmRpZmYgLS1naXQgYS9mcy9zeXN2L2lub2RlLmMgYi9mcy9zeXN2L2lub2RlLmMKaW5kZXggZmEzM2VjZS4uM2ZmODljYyAxMDA2NDQKLS0tIGEvZnMvc3lzdi9pbm9kZS5jCisrKyBiL2ZzL3N5c3YvaW5vZGUuYwpAQCAtMzQyLDcgKzM0Miw3IEBACiB7CiAJc3lzdl9pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgic3lzdl9pbm9kZV9jYWNoZSIsCiAJCQlzaXplb2Yoc3RydWN0IHN5c3ZfaW5vZGVfaW5mbyksIDAsCi0JCQlTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCVNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfTUVNX1NQUkVBRCwKIAkJCWluaXRfb25jZSwgTlVMTCk7CiAJaWYgKCFzeXN2X2lub2RlX2NhY2hlcCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9zeXN2L25hbWVpLmMgYi9mcy9zeXN2L25hbWVpLmMKaW5kZXggN2YwZTRiNS4uYjhhNzNmNyAxMDA2NDQKLS0tIGEvZnMvc3lzdi9uYW1laS5jCisrKyBiL2ZzL3N5c3YvbmFtZWkuYwpAQCAtMTYsMTggKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgInN5c3YuaCIKIAotc3RhdGljIGlubGluZSB2b2lkIGluY19jb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlub2RlLT5pX25saW5rKys7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfY291bnQoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlpbm9kZS0+aV9ubGluay0tOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotfQotCiBzdGF0aWMgaW50IGFkZF9ub25kaXIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWludCBlcnIgPSBzeXN2X2FkZF9saW5rKGRlbnRyeSwgaW5vZGUpOwpAQCAtMzUsNyArMjMsNyBAQAogCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQlyZXR1cm4gMDsKIAl9Ci0JZGVjX2NvdW50KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJaXB1dChpbm9kZSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEyNCw3ICsxMTIsNyBAQAogCXJldHVybiBlcnI7CiAKIG91dF9mYWlsOgotCWRlY19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogCWdvdG8gb3V0OwogfQpAQCAtMTM4LDcgKzEyNiw3IEBACiAJCXJldHVybiAtRU1MSU5LOwogCiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCWluY19jb3VudChpbm9kZSk7CisJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOwogCWF0b21pY19pbmMoJmlub2RlLT5pX2NvdW50KTsKIAogCXJldHVybiBhZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpOwpAQCAtMTUxLDcgKzEzOSw3IEBACiAKIAlpZiAoZGlyLT5pX25saW5rID49IFNZU1ZfU0IoZGlyLT5pX3NiKS0+c19saW5rX21heCkgCiAJCWdvdG8gb3V0OwotCWluY19jb3VudChkaXIpOworCWlub2RlX2luY19saW5rX2NvdW50KGRpcik7CiAKIAlpbm9kZSA9IHN5c3ZfbmV3X2lub2RlKGRpciwgU19JRkRJUnxtb2RlKTsKIAllcnIgPSBQVFJfRVJSKGlub2RlKTsKQEAgLTE2MCw3ICsxNDgsNyBAQAogCiAJc3lzdl9zZXRfaW5vZGUoaW5vZGUsIDApOwogCi0JaW5jX2NvdW50KGlub2RlKTsKKwlpbm9kZV9pbmNfbGlua19jb3VudChpbm9kZSk7CiAKIAllcnIgPSBzeXN2X21ha2VfZW1wdHkoaW5vZGUsIGRpcik7CiAJaWYgKGVycikKQEAgLTE3NSwxMSArMTYzLDExIEBACiAJcmV0dXJuIGVycjsKIAogb3V0X2ZhaWw6Ci0JZGVjX2NvdW50KGlub2RlKTsKLQlkZWNfY291bnQoaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJaXB1dChpbm9kZSk7CiBvdXRfZGlyOgotCWRlY19jb3VudChkaXIpOworCWlub2RlX2RlY19saW5rX2NvdW50KGRpcik7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTE5OSw3ICsxODcsNyBAQAogCQlnb3RvIG91dDsKIAogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lOwotCWRlY19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC0yMTMsOCArMjAxLDggQEAKIAkJZXJyID0gc3lzdl91bmxpbmsoZGlyLCBkZW50cnkpOwogCQlpZiAoIWVycikgewogCQkJaW5vZGUtPmlfc2l6ZSA9IDA7Ci0JCQlkZWNfY291bnQoaW5vZGUpOwotCQkJZGVjX2NvdW50KGRpcik7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOwogCQl9CiAJfQogCXJldHVybiBlcnI7CkBAIC0yNTgsMzQgKzI0NiwzNCBAQAogCQluZXdfZGUgPSBzeXN2X2ZpbmRfZW50cnkobmV3X2RlbnRyeSwgJm5ld19wYWdlKTsKIAkJaWYgKCFuZXdfZGUpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCWluY19jb3VudChvbGRfaW5vZGUpOworCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQlzeXN2X3NldF9saW5rKG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCWlmIChkaXJfZGUpCiAJCQluZXdfaW5vZGUtPmlfbmxpbmstLTsKLQkJZGVjX2NvdW50KG5ld19pbm9kZSk7CisJCWlub2RlX2RlY19saW5rX2NvdW50KG5ld19pbm9kZSk7CiAJfSBlbHNlIHsKIAkJaWYgKGRpcl9kZSkgewogCQkJZXJyID0gLUVNTElOSzsKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IFNZU1ZfU0IobmV3X2Rpci0+aV9zYiktPnNfbGlua19tYXgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWluY19jb3VudChvbGRfaW5vZGUpOworCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQllcnIgPSBzeXN2X2FkZF9saW5rKG5ld19kZW50cnksIG9sZF9pbm9kZSk7CiAJCWlmIChlcnIpIHsKLQkJCWRlY19jb3VudChvbGRfaW5vZGUpOworCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJCWdvdG8gb3V0X2RpcjsKIAkJfQogCQlpZiAoZGlyX2RlKQotCQkJaW5jX2NvdW50KG5ld19kaXIpOworCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CiAJfQogCiAJc3lzdl9kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7Ci0JZGVjX2NvdW50KG9sZF9pbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAogCWlmIChkaXJfZGUpIHsKIAkJc3lzdl9zZXRfbGluayhkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKLQkJZGVjX2NvdW50KG9sZF9kaXIpOworCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfZGlyKTsKIAl9CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2ZzL3N5c3Yvc3VwZXIuYyBiL2ZzL3N5c3Yvc3VwZXIuYwppbmRleCA1OWU3NmI1Li5lOTJiOTkxIDEwMDY0NAotLS0gYS9mcy9zeXN2L3N1cGVyLmMKKysrIGIvZnMvc3lzdi9zdXBlci5jCkBAIC0zNzcsMTAgKzM3NywxMCBAQAogCXNiaS0+c19zYiA9IHNiOwogCXNiaS0+c19ibG9ja19iYXNlID0gMDsKIAlzYi0+c19mc19pbmZvID0gc2JpOwotCQorCiAJc2Jfc2V0X2Jsb2Nrc2l6ZShzYiwgQkxPQ0tfU0laRSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGZsYXZvdXJzKS9zaXplb2YoZmxhdm91cnNbMF0pICYmICFzaXplOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmbGF2b3VycykgJiYgIXNpemU7IGkrKykgewogCQlicmVsc2UoYmgpOwogCQliaCA9IHNiX2JyZWFkKHNiLCBmbGF2b3Vyc1tpXS5ibG9jayk7CiAJCWlmICghYmgpCmRpZmYgLS1naXQgYS9mcy91ZGYvYmFsbG9jLmMgYi9mcy91ZGYvYmFsbG9jLmMKaW5kZXggMjAxMDQ5YS4uZWE1MjFmOCAxMDA2NDQKLS0tIGEvZnMvdWRmL2JhbGxvYy5jCisrKyBiL2ZzL3VkZi9iYWxsb2MuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJaW50IGJpdG1hcF9ucjsKIAl1bnNpZ25lZCBsb25nIG92ZXJmbG93OwogCi0JZG93bigmc2JpLT5zX2FsbG9jX3NlbSk7CisJbXV0ZXhfbG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlpZiAoYmxvYy5sb2dpY2FsQmxvY2tOdW0gPCAwIHx8CiAJCShibG9jLmxvZ2ljYWxCbG9ja051bSArIGNvdW50KSA+IFVERl9TQl9QQVJUTEVOKHNiLCBibG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSkpCiAJewpAQCAtMjExLDcgKzIxMSw3IEBACiAJc2ItPnNfZGlydCA9IDE7CiAJaWYgKFVERl9TQl9MVklEQkgoc2IpKQogCQltYXJrX2J1ZmZlcl9kaXJ0eShVREZfU0JfTFZJREJIKHNiKSk7Ci0JdXAoJnNiaS0+c19hbGxvY19zZW0pOworCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlyZXR1cm47CiB9CiAKQEAgLTIyNiw3ICsyMjYsNyBAQAogCWludCBucl9ncm91cHMsIGJpdG1hcF9ucjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCi0JZG93bigmc2JpLT5zX2FsbG9jX3NlbSk7CisJbXV0ZXhfbG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlpZiAoZmlyc3RfYmxvY2sgPCAwIHx8IGZpcnN0X2Jsb2NrID49IFVERl9TQl9QQVJUTEVOKHNiLCBwYXJ0aXRpb24pKQogCQlnb3RvIG91dDsKIApAQCAtMjc1LDcgKzI3NSw3IEBACiAJCW1hcmtfYnVmZmVyX2RpcnR5KFVERl9TQl9MVklEQkgoc2IpKTsKIAl9CiAJc2ItPnNfZGlydCA9IDE7Ci0JdXAoJnNiaS0+c19hbGxvY19zZW0pOworCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlyZXR1cm4gYWxsb2NfY291bnQ7CiB9CiAKQEAgLTI5MSw3ICsyOTEsNyBAQAogCWludCBuZXdibG9jayA9IDA7CiAKIAkqZXJyID0gLUVOT1NQQzsKLQlkb3duKCZzYmktPnNfYWxsb2Nfc2VtKTsKKwltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCiByZXBlYXQ6CiAJaWYgKGdvYWwgPCAwIHx8IGdvYWwgPj0gVURGX1NCX1BBUlRMRU4oc2IsIHBhcnRpdGlvbikpCkBAIC0zNjQsNyArMzY0LDcgQEAKIAl9CiAJaWYgKGkgPj0gKG5yX2dyb3VwcyoyKSkKIAl7Ci0JCXVwKCZzYmktPnNfYWxsb2Nfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCQlyZXR1cm4gbmV3YmxvY2s7CiAJfQogCWlmIChiaXQgPCBzYi0+c19ibG9ja3NpemUgPDwgMykKQEAgLTM3Myw3ICszNzMsNyBAQAogCQliaXQgPSB1ZGZfZmluZF9uZXh0X29uZV9iaXQoYmgtPmJfZGF0YSwgc2ItPnNfYmxvY2tzaXplIDw8IDMsIGdyb3VwX3N0YXJ0IDw8IDMpOwogCWlmIChiaXQgPj0gc2ItPnNfYmxvY2tzaXplIDw8IDMpCiAJewotCQl1cCgmc2JpLT5zX2FsbG9jX3NlbSk7CisJCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zODcsNyArMzg3LDcgQEAKIAkgKi8KIAlpZiAoaW5vZGUgJiYgRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIDEpKQogCXsKLQkJdXAoJnNiaS0+c19hbGxvY19zZW0pOworCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJCSplcnIgPSAtRURRVU9UOwogCQlyZXR1cm4gMDsKIAl9CkBAIC00MTAsMTMgKzQxMCwxMyBAQAogCQltYXJrX2J1ZmZlcl9kaXJ0eShVREZfU0JfTFZJREJIKHNiKSk7CiAJfQogCXNiLT5zX2RpcnQgPSAxOwotCXVwKCZzYmktPnNfYWxsb2Nfc2VtKTsKKwltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJKmVyciA9IDA7CiAJcmV0dXJuIG5ld2Jsb2NrOwogCiBlcnJvcl9yZXR1cm46CiAJKmVyciA9IC1FSU87Ci0JdXAoJnNiaS0+c19hbGxvY19zZW0pOworCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDMzLDcgKzQzMyw3IEBACiAJaW50OF90IGV0eXBlOwogCWludCBpOwogCi0JZG93bigmc2JpLT5zX2FsbG9jX3NlbSk7CisJbXV0ZXhfbG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlpZiAoYmxvYy5sb2dpY2FsQmxvY2tOdW0gPCAwIHx8CiAJCShibG9jLmxvZ2ljYWxCbG9ja051bSArIGNvdW50KSA+IFVERl9TQl9QQVJUTEVOKHNiLCBibG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSkpCiAJewpAQCAtNjY2LDcgKzY2Niw3IEBACiAKIGVycm9yX3JldHVybjoKIAlzYi0+c19kaXJ0ID0gMTsKLQl1cCgmc2JpLT5zX2FsbG9jX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCXJldHVybjsKIH0KIApAQCAtNjkyLDcgKzY5Miw3IEBACiAJZWxzZQogCQlyZXR1cm4gMDsKIAotCWRvd24oJnNiaS0+c19hbGxvY19zZW0pOworCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJZXh0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSk7CiAJYmxvYyA9IFVERl9JX0xPQ0FUSU9OKHRhYmxlKTsKIApAQCAtNzM2LDcgKzczNiw3IEBACiAJCW1hcmtfYnVmZmVyX2RpcnR5KFVERl9TQl9MVklEQkgoc2IpKTsKIAkJc2ItPnNfZGlydCA9IDE7CiAJfQotCXVwKCZzYmktPnNfYWxsb2Nfc2VtKTsKKwltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJcmV0dXJuIGFsbG9jX2NvdW50OwogfQogCkBAIC03NjEsNyArNzYxLDcgQEAKIAllbHNlCiAJCXJldHVybiBuZXdibG9jazsKIAotCWRvd24oJnNiaS0+c19hbGxvY19zZW0pOworCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJaWYgKGdvYWwgPCAwIHx8IGdvYWwgPj0gVURGX1NCX1BBUlRMRU4oc2IsIHBhcnRpdGlvbikpCiAJCWdvYWwgPSAwOwogCkBAIC04MTEsNyArODExLDcgQEAKIAlpZiAoc3ByZWFkID09IDB4RkZGRkZGRkYpCiAJewogCQl1ZGZfcmVsZWFzZV9kYXRhKGdvYWxfYmgpOwotCQl1cCgmc2JpLT5zX2FsbG9jX3NlbSk7CisJCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC04MjcsNyArODI3LDcgQEAKIAlpZiAoaW5vZGUgJiYgRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIDEpKQogCXsKIAkJdWRmX3JlbGVhc2VfZGF0YShnb2FsX2JoKTsKLQkJdXAoJnNiaS0+c19hbGxvY19zZW0pOworCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJCSplcnIgPSAtRURRVU9UOwogCQlyZXR1cm4gMDsKIAl9CkBAIC04NDYsNyArODQ2LDcgQEAKIAl9CiAKIAlzYi0+c19kaXJ0ID0gMTsKLQl1cCgmc2JpLT5zX2FsbG9jX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCSplcnIgPSAwOwogCXJldHVybiBuZXdibG9jazsKIH0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9pYWxsb2MuYyBiL2ZzL3VkZi9pYWxsb2MuYwppbmRleCBjOWI3MDdiLi4zODczYzY3IDEwMDY0NAotLS0gYS9mcy91ZGYvaWFsbG9jLmMKKysrIGIvZnMvdWRmL2lhbGxvYy5jCkBAIC00Miw3ICs0Miw3IEBACiAKIAljbGVhcl9pbm9kZShpbm9kZSk7CiAKLQlkb3duKCZzYmktPnNfYWxsb2Nfc2VtKTsKKwltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCWlmIChzYmktPnNfbHZpZGJoKSB7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJVURGX1NCX0xWSURJVShzYiktPm51bURpcnMgPQpAQCAtNTMsNyArNTMsNyBAQAogCQkKIAkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRiaCk7CiAJfQotCXVwKCZzYmktPnNfYWxsb2Nfc2VtKTsKKwltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAKIAl1ZGZfZnJlZV9ibG9ja3Moc2IsIE5VTEwsIFVERl9JX0xPQ0FUSU9OKGlub2RlKSwgMCwgMSk7CiB9CkBAIC04Myw3ICs4Myw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWRvd24oJnNiaS0+c19hbGxvY19zZW0pOworCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJVURGX0lfVU5JUVVFKGlub2RlKSA9IDA7CiAJVURGX0lfTEVORVhURU5UUyhpbm9kZSkgPSAwOwogCVVERl9JX05FWFRfQUxMT0NfQkxPQ0soaW5vZGUpID0gMDsKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQlVREZfSV9DUlRJTUUoaW5vZGUpID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKIAlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JdXAoJnNiaS0+c19hbGxvY19zZW0pOworCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAogCWlmIChEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpCiAJewpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCAzOTVlNTgyLi44MWUwZTg0IDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYworKysgYi9mcy91ZGYvaW5vZGUuYwpAQCAtMTA0NSwxMCArMTA0NSwxNCBAQAogCX0KIAogCWlub2RlLT5pX3VpZCA9IGxlMzJfdG9fY3B1KGZlLT51aWQpOwotCWlmICggaW5vZGUtPmlfdWlkID09IC0xICkgaW5vZGUtPmlfdWlkID0gVURGX1NCKGlub2RlLT5pX3NiKS0+c191aWQ7CisJaWYgKGlub2RlLT5pX3VpZCA9PSAtMSB8fCBVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwKKwkJCQkJVURGX0ZMQUdfVUlEX0lHTk9SRSkpCisJCWlub2RlLT5pX3VpZCA9IFVERl9TQihpbm9kZS0+aV9zYiktPnNfdWlkOwogCiAJaW5vZGUtPmlfZ2lkID0gbGUzMl90b19jcHUoZmUtPmdpZCk7Ci0JaWYgKCBpbm9kZS0+aV9naWQgPT0gLTEgKSBpbm9kZS0+aV9naWQgPSBVREZfU0IoaW5vZGUtPmlfc2IpLT5zX2dpZDsKKwlpZiAoaW5vZGUtPmlfZ2lkID09IC0xIHx8IFVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLAorCQkJCQlVREZfRkxBR19HSURfSUdOT1JFKSkKKwkJaW5vZGUtPmlfZ2lkID0gVURGX1NCKGlub2RlLT5pX3NiKS0+c19naWQ7CiAKIAlpbm9kZS0+aV9ubGluayA9IGxlMTZfdG9fY3B1KGZlLT5maWxlTGlua0NvdW50KTsKIAlpZiAoIWlub2RlLT5pX25saW5rKQpAQCAtMTMzNSwxMSArMTMzOSwxMyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChpbm9kZS0+aV91aWQgIT0gVURGX1NCKGlub2RlLT5pX3NiKS0+c191aWQpCi0JCWZlLT51aWQgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV91aWQpOworCWlmIChVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfVUlEX0ZPUkdFVCkpCisJCWZlLT51aWQgPSBjcHVfdG9fbGUzMigtMSk7CisJZWxzZSBmZS0+dWlkID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfdWlkKTsKIAotCWlmIChpbm9kZS0+aV9naWQgIT0gVURGX1NCKGlub2RlLT5pX3NiKS0+c19naWQpCi0JCWZlLT5naWQgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9naWQpOworCWlmIChVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfR0lEX0ZPUkdFVCkpCisJCWZlLT5naWQgPSBjcHVfdG9fbGUzMigtMSk7CisJZWxzZSBmZS0+Z2lkID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfZ2lkKTsKIAogCXVkZnBlcm1zID0JKChpbm9kZS0+aV9tb2RlICYgU19JUldYTykgICAgICkgfAogCQkJKChpbm9kZS0+aV9tb2RlICYgU19JUldYRykgPDwgMikgfApkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCA0YTZmNDlhLi5lNDU3ODlmIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYworKysgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMTQwLDcgKzE0MCw4IEBACiB7CiAJdWRmX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJ1ZGZfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgdWRmX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAodWRmX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI2OSw3ICsyNzAsNyBAQAogCU9wdF9naWQsIE9wdF91aWQsIE9wdF91bWFzaywgT3B0X3Nlc3Npb24sIE9wdF9sYXN0YmxvY2ssCiAJT3B0X2FuY2hvciwgT3B0X3ZvbHVtZSwgT3B0X3BhcnRpdGlvbiwgT3B0X2ZpbGVzZXQsCiAJT3B0X3Jvb3RkaXIsIE9wdF91dGY4LCBPcHRfaW9jaGFyc2V0LAotCU9wdF9lcnIKKwlPcHRfZXJyLCBPcHRfdWZvcmdldCwgT3B0X3VpZ25vcmUsIE9wdF9nZm9yZ2V0LCBPcHRfZ2lnbm9yZQogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMjgyLDYgKzI4MywxMCBAQAogCXtPcHRfYWRpbmljYiwgImFkaW5pY2IifSwKIAl7T3B0X3Nob3J0YWQsICJzaG9ydGFkIn0sCiAJe09wdF9sb25nYWQsICJsb25nYWQifSwKKwl7T3B0X3Vmb3JnZXQsICJ1aWQ9Zm9yZ2V0In0sCisJe09wdF91aWdub3JlLCAidWlkPWlnbm9yZSJ9LAorCXtPcHRfZ2ZvcmdldCwgImdpZD1mb3JnZXQifSwKKwl7T3B0X2dpZ25vcmUsICJnaWQ9aWdub3JlIn0sCiAJe09wdF9naWQsICJnaWQ9JXUifSwKIAl7T3B0X3VpZCwgInVpZD0ldSJ9LAogCXtPcHRfdW1hc2ssICJ1bWFzaz0lbyJ9LApAQCAtNDE0LDYgKzQxOSwxOCBAQAogCQkJCXVvcHQtPmZsYWdzIHw9ICgxIDw8IFVERl9GTEFHX05MU19NQVApOwogCQkJCWJyZWFrOwogI2VuZGlmCisJCQljYXNlIE9wdF91aWdub3JlOgorCQkJCXVvcHQtPmZsYWdzIHw9ICgxIDw8IFVERl9GTEFHX1VJRF9JR05PUkUpOworCQkJCWJyZWFrOworCQkJY2FzZSBPcHRfdWZvcmdldDoKKwkJCQl1b3B0LT5mbGFncyB8PSAoMSA8PCBVREZfRkxBR19VSURfRk9SR0VUKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT3B0X2dpZ25vcmU6CisJCQkgICAgdW9wdC0+ZmxhZ3MgfD0gKDEgPDwgVURGX0ZMQUdfR0lEX0lHTk9SRSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9wdF9nZm9yZ2V0OgorCQkJICAgIHVvcHQtPmZsYWdzIHw9ICgxIDw8IFVERl9GTEFHX0dJRF9GT1JHRVQpOworCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlwcmludGsoS0VSTl9FUlIgInVkZjogYmFkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgogCQkJCQkJIm9yIG1pc3NpbmcgdmFsdWVcbiIsIHApOwpAQCAtNjQ0LDggKzY2MSw3IEBACiAJCSAqICAgICBsYXN0YmxvY2sKIAkJICogIGhvd2V2ZXIsIGlmIHRoZSBkaXNjIGlzbid0IGNsb3NlZCwgaXQgY291bGQgYmUgNTEyICovCiAKLQkJZm9yIChpPTA7ICghbGFzdGJsb2NrICYmIGk8c2l6ZW9mKGxhc3QpL3NpemVvZihpbnQpKTsgaSsrKQotCQl7CisJCWZvciAoaSA9IDA7ICFsYXN0YmxvY2sgJiYgaSA8IEFSUkFZX1NJWkUobGFzdCk7IGkrKykgewogCQkJaWYgKGxhc3RbaV0gPCAwIHx8ICEoYmggPSBzYl9icmVhZChzYiwgbGFzdFtpXSkpKQogCQkJewogCQkJCWlkZW50ID0gbG9jYXRpb24gPSAwOwpAQCAtNjU2LDcgKzY3Miw3IEBACiAJCQkJbG9jYXRpb24gPSBsZTMyX3RvX2NwdSgoKHRhZyAqKWJoLT5iX2RhdGEpLT50YWdMb2NhdGlvbik7CiAJCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CiAJCQl9Ci0JCisKIAkJCWlmIChpZGVudCA9PSBUQUdfSURFTlRfQVZEUCkKIAkJCXsKIAkJCQlpZiAobG9jYXRpb24gPT0gbGFzdFtpXSAtIFVERl9TQl9TRVNTSU9OKHNiKSkKQEAgLTczNyw4ICs3NTMsNyBAQAogCQl9CiAJfQogCi0JZm9yIChpPTA7IGk8c2l6ZW9mKFVERl9TQl9BTkNIT1Ioc2IpKS9zaXplb2YoaW50KTsgaSsrKQotCXsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShVREZfU0JfQU5DSE9SKHNiKSk7IGkrKykgewogCQlpZiAoVURGX1NCX0FOQ0hPUihzYilbaV0pCiAJCXsKIAkJCWlmICghKGJoID0gdWRmX3JlYWRfdGFnZ2VkKHNiLApAQCAtMTI5Nyw4ICsxMzEyLDcgQEAKIAlpZiAoIXNiKQogCQlyZXR1cm4gMTsKIAotCWZvciAoaT0wOyBpPHNpemVvZihVREZfU0JfQU5DSE9SKHNiKSkvc2l6ZW9mKGludCk7IGkrKykKLQl7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoVURGX1NCX0FOQ0hPUihzYikpOyBpKyspIHsKIAkJaWYgKFVERl9TQl9BTkNIT1Ioc2IpW2ldICYmIChiaCA9IHVkZl9yZWFkX3RhZ2dlZChzYiwKIAkJCVVERl9TQl9BTkNIT1Ioc2IpW2ldLCBVREZfU0JfQU5DSE9SKHNiKVtpXSwgJmlkZW50KSkpCiAJCXsKQEAgLTEzMDksNyArMTMyMyw3IEBACiAJCQltYWluX2UgPSBsZTMyX3RvX2NwdSggYW5jaG9yLT5tYWluVm9sRGVzY1NlcUV4dC5leHRMZW5ndGggKTsKIAkJCW1haW5fZSA9IG1haW5fZSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKIAkJCW1haW5fZSArPSBtYWluX3M7Ci0JCisKIAkJCS8qIExvY2F0ZSB0aGUgcmVzZXJ2ZSBzZXF1ZW5jZSAqLwogCQkJcmVzZXJ2ZV9zID0gbGUzMl90b19jcHUoYW5jaG9yLT5yZXNlcnZlVm9sRGVzY1NlcUV4dC5leHRMb2NhdGlvbik7CiAJCQlyZXNlcnZlX2UgPSBsZTMyX3RvX2NwdShhbmNob3ItPnJlc2VydmVWb2xEZXNjU2VxRXh0LmV4dExlbmd0aCk7CkBAIC0xMzI4LDEyICsxMzQyLDEwIEBACiAJCX0KIAl9CiAKLQlpZiAoaSA9PSBzaXplb2YoVURGX1NCX0FOQ0hPUihzYikpL3NpemVvZihpbnQpKQotCXsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKFVERl9TQl9BTkNIT1Ioc2IpKSkgewogCQl1ZGZfZGVidWcoIk5vIEFuY2hvciBibG9jayBmb3VuZFxuIik7CiAJCXJldHVybiAxOwotCX0KLQllbHNlCisJfSBlbHNlCiAJCXVkZl9kZWJ1ZygiVXNpbmcgYW5jaG9yIGluIGJsb2NrICVkXG4iLCBVREZfU0JfQU5DSE9SKHNiKVtpXSk7CiAKIAlmb3IgKGk9MDsgaTxVREZfU0JfTlVNUEFSVFMoc2IpOyBpKyspCkBAIC0xNDk5LDcgKzE1MTEsNyBAQAogCXNiLT5zX2ZzX2luZm8gPSBzYmk7CiAJbWVtc2V0KFVERl9TQihzYiksIDB4MDAsIHNpemVvZihzdHJ1Y3QgdWRmX3NiX2luZm8pKTsKIAotCWluaXRfTVVURVgoJnNiaS0+c19hbGxvY19zZW0pOworCW11dGV4X2luaXQoJnNiaS0+c19hbGxvY19tdXRleCk7CiAKIAlpZiAoIXVkZl9wYXJzZV9vcHRpb25zKChjaGFyICopb3B0aW9ucywgJnVvcHQpKQogCQlnb3RvIGVycm9yX291dDsKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZfc2IuaCBiL2ZzL3VkZi91ZGZfc2IuaAppbmRleCA2NjM2Njk4Li4xMTBmOGQ2IDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmX3NiLmgKKysrIGIvZnMvdWRmL3VkZl9zYi5oCkBAIC0yMCw2ICsyMCwxMCBAQAogI2RlZmluZSBVREZfRkxBR19WQVJDT05WCQk4CiAjZGVmaW5lIFVERl9GTEFHX05MU19NQVAJCTkKICNkZWZpbmUgVURGX0ZMQUdfVVRGOAkJCTEwCisjZGVmaW5lIFVERl9GTEFHX1VJRF9GT1JHRVQgICAgIDExICAgIC8qIHNhdmUgLTEgZm9yIHVpZCB0byBkaXNrICovCisjZGVmaW5lIFVERl9GTEFHX1VJRF9JR05PUkUgICAgIDEyICAgIC8qIHVzZSBzYiB1aWQgaW5zdGVhZCBvZiBvbiBkaXNrIHVpZCAqLworI2RlZmluZSBVREZfRkxBR19HSURfRk9SR0VUICAgICAxMworI2RlZmluZSBVREZfRkxBR19HSURfSUdOT1JFICAgICAxNAogCiAjZGVmaW5lIFVERl9QQVJUX0ZMQUdfVU5BTExPQ19CSVRNQVAJMHgwMDAxCiAjZGVmaW5lIFVERl9QQVJUX0ZMQUdfVU5BTExPQ19UQUJMRQkweDAwMDIKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9maWxlLmMgYi9mcy91ZnMvZmlsZS5jCmluZGV4IGVkNjlkN2ZlLi42MmFkNDgxIDEwMDY0NAotLS0gYS9mcy91ZnMvZmlsZS5jCisrKyBiL2ZzL3Vmcy9maWxlLmMKQEAgLTIzLDE4ICsyMyw4IEBACiAgKiAgZXh0MiBmcyByZWd1bGFyIGZpbGUgaGFuZGxpbmcgcHJpbWl0aXZlcwogICovCiAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC91ZnNfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogLyoKICAqIFdlIGhhdmUgbW9zdGx5IE5VTEwncyBoZXJlOiB0aGUgY3VycmVudCBkZWZhdWx0cyBhcmUgb2sgZm9yCmRpZmYgLS1naXQgYS9mcy91ZnMvbmFtZWkuYyBiL2ZzL3Vmcy9uYW1laS5jCmluZGV4IDI5NThjZGUuLjhkNWY5OGEgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9uYW1laS5jCisrKyBiL2ZzL3Vmcy9uYW1laS5jCkBAIC00MywxOCArNDMsNiBAQAogI2RlZmluZSBVRlNEKHgpCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIHVmc19pbmNfY291bnQoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlpbm9kZS0+aV9ubGluaysrOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdWZzX2RlY19jb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlub2RlLT5pX25saW5rLS07Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHVmc19hZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpbnQgZXJyID0gdWZzX2FkZF9saW5rKGRlbnRyeSwgaW5vZGUpOwpAQCAtNjIsNyArNTAsNyBAQAogCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCQlyZXR1cm4gMDsKIAl9Ci0JdWZzX2RlY19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCWlwdXQoaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xNzMsNyArMTYxLDcgQEAKIAlyZXR1cm4gZXJyOwogCiBvdXRfZmFpbDoKLQl1ZnNfZGVjX2NvdW50KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJaXB1dChpbm9kZSk7CiAJZ290byBvdXQ7CiB9CkBAIC0xOTEsNyArMTc5LDcgQEAKIAl9CiAKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JdWZzX2luY19jb3VudChpbm9kZSk7CisJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOwogCWF0b21pY19pbmMoJmlub2RlLT5pX2NvdW50KTsKIAogCWVycm9yID0gdWZzX2FkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7CkBAIC0yMDgsNyArMTk2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlsb2NrX2tlcm5lbCgpOwotCXVmc19pbmNfY291bnQoZGlyKTsKKwlpbm9kZV9pbmNfbGlua19jb3VudChkaXIpOwogCiAJaW5vZGUgPSB1ZnNfbmV3X2lub2RlKGRpciwgU19JRkRJUnxtb2RlKTsKIAllcnIgPSBQVFJfRVJSKGlub2RlKTsKQEAgLTIxOCw3ICsyMDYsNyBAQAogCWlub2RlLT5pX29wID0gJnVmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mb3AgPSAmdWZzX2Rpcl9vcGVyYXRpb25zOwogCi0JdWZzX2luY19jb3VudChpbm9kZSk7CisJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOwogCiAJZXJyID0gdWZzX21ha2VfZW1wdHkoaW5vZGUsIGRpcik7CiAJaWYgKGVycikKQEAgLTIzNCwxMSArMjIyLDExIEBACiAJcmV0dXJuIGVycjsKIAogb3V0X2ZhaWw6Ci0JdWZzX2RlY19jb3VudChpbm9kZSk7Ci0JdWZzX2RlY19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAlpcHV0IChpbm9kZSk7CiBvdXRfZGlyOgotCXVmc19kZWNfY291bnQoZGlyKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOwogCXVubG9ja19rZXJuZWwoKTsKIAlnb3RvIG91dDsKIH0KQEAgLTI2MCw3ICsyNDgsNyBAQAogCQlnb3RvIG91dDsKIAogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lOwotCXVmc19kZWNfY291bnQoaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAllcnIgPSAwOwogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKQEAgLTI3Nyw4ICsyNjUsOCBAQAogCQllcnIgPSB1ZnNfdW5saW5rKGRpciwgZGVudHJ5KTsKIAkJaWYgKCFlcnIpIHsKIAkJCWlub2RlLT5pX3NpemUgPSAwOwotCQkJdWZzX2RlY19jb3VudChpbm9kZSk7Ci0JCQl1ZnNfZGVjX2NvdW50KGRpcik7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOwogCQl9CiAJfQogCXVubG9ja19rZXJuZWwoKTsKQEAgLTMxOSwzNSArMzA3LDM1IEBACiAJCW5ld19kZSA9IHVmc19maW5kX2VudHJ5IChuZXdfZGVudHJ5LCAmbmV3X2JoKTsKIAkJaWYgKCFuZXdfZGUpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCXVmc19pbmNfY291bnQob2xkX2lub2RlKTsKKwkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJdWZzX3NldF9saW5rKG5ld19kaXIsIG5ld19kZSwgbmV3X2JoLCBvbGRfaW5vZGUpOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQlpZiAoZGlyX2RlKQogCQkJbmV3X2lub2RlLT5pX25saW5rLS07Ci0JCXVmc19kZWNfY291bnQobmV3X2lub2RlKTsKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQobmV3X2lub2RlKTsKIAl9IGVsc2UgewogCQlpZiAoZGlyX2RlKSB7CiAJCQllcnIgPSAtRU1MSU5LOwogCQkJaWYgKG5ld19kaXItPmlfbmxpbmsgPj0gVUZTX0xJTktfTUFYKQogCQkJCWdvdG8gb3V0X2RpcjsKIAkJfQotCQl1ZnNfaW5jX2NvdW50KG9sZF9pbm9kZSk7CisJCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IHVmc19hZGRfbGluayhuZXdfZGVudHJ5LCBvbGRfaW5vZGUpOwogCQlpZiAoZXJyKSB7Ci0JCQl1ZnNfZGVjX2NvdW50KG9sZF9pbm9kZSk7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQkJZ290byBvdXRfZGlyOwogCQl9CiAJCWlmIChkaXJfZGUpCi0JCQl1ZnNfaW5jX2NvdW50KG5ld19kaXIpOworCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CiAJfQogCiAJdWZzX2RlbGV0ZV9lbnRyeSAob2xkX2Rpciwgb2xkX2RlLCBvbGRfYmgpOwogCi0JdWZzX2RlY19jb3VudChvbGRfaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAKIAlpZiAoZGlyX2RlKSB7CiAJCXVmc19zZXRfbGluayhvbGRfaW5vZGUsIGRpcl9kZSwgZGlyX2JoLCBuZXdfZGlyKTsKLQkJdWZzX2RlY19jb3VudChvbGRfZGlyKTsKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2Rpcik7CiAJfQogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9zdXBlci5jIGIvZnMvdWZzL3N1cGVyLmMKaW5kZXggZTkwNTVlZi4uZGI5OGE0YyAxMDA2NDQKLS0tIGEvZnMvdWZzL3N1cGVyLmMKKysrIGIvZnMvdWZzL3N1cGVyLmMKQEAgLTU3NSw3ICs1NzUsNyBAQAogCQlpZiAoIXNpbGVudCkKIAkJCXByaW50aygiWW91IGRpZG4ndCBzcGVjaWZ5IHRoZSB0eXBlIG9mIHlvdXIgdWZzIGZpbGVzeXN0ZW1cblxuIgogCQkJIm1vdW50IC10IHVmcyAtbyB1ZnN0eXBlPSIKLQkJCSJzdW58c3VueDg2fDQ0YnNkfHVmczJ8NXhic2R8b2xkfGhwfG5leHRzdGVwfG5ldHhzdGVwLWNkfG9wZW5zdGVwIC4uLlxuXG4iCisJCQkic3VufHN1bng4Nnw0NGJzZHx1ZnMyfDV4YnNkfG9sZHxocHxuZXh0c3RlcHxuZXh0c3RlcC1jZHxvcGVuc3RlcCAuLi5cblxuIgogCQkJIj4+PldBUk5JTkc8PDwgV3JvbmcgdWZzdHlwZSBtYXkgY29ycnVwdCB5b3VyIGZpbGVzeXN0ZW0sICIKIAkJCSJkZWZhdWx0IGlzIHVmc3R5cGU9b2xkXG4iKTsKIAkJdWZzX3NldF9vcHQgKHNiaS0+c19tb3VudF9vcHQsIFVGU1RZUEVfT0xEKTsKQEAgLTExODQsNyArMTE4NCw4IEBACiB7CiAJdWZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJ1ZnNfaW5vZGVfY2FjaGUiLAogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgdWZzX2lub2RlX2luZm8pLAotCQkJCQkgICAgIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQkgICAgIDAsIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKKwkJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJCSAgICAgaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAodWZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZS1saW51eC0yLjYgYi9mcy94ZnMvTWFrZWZpbGUtbGludXgtMi42CmluZGV4IDk3YmQ0NzQuLjVkNzNlYWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZS1saW51eC0yLjYKKysrIGIvZnMveGZzL01ha2VmaWxlLWxpbnV4LTIuNgpAQCAtMSwzMyArMSwxOSBAQAogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisjIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAjCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAjCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0Ci0jIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICMKLSMgRnVydGhlciwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSB0aGF0IGl0IGlzCi0jIGZyZWUgb2YgdGhlIHJpZ2h0ZnVsIGNsYWltIG9mIGFueSB0aGlyZCBwZXJzb24gcmVnYXJkaW5nIGluZnJpbmdlbWVudAotIyBvciB0aGUgbGlrZS4gIEFueSBsaWNlbnNlIHByb3ZpZGVkIGhlcmVpbiwgd2hldGhlciBpbXBsaWVkIG9yCi0jIG90aGVyd2lzZSwgYXBwbGllcyBvbmx5IHRvIHRoaXMgc29mdHdhcmUgZmlsZS4gIFBhdGVudCBsaWNlbnNlcywgaWYKLSMgYW55LCBwcm92aWRlZCBoZXJlaW4gZG8gbm90IGFwcGx5IHRvIGNvbWJpbmF0aW9ucyBvZiB0aGlzIHByb2dyYW0gd2l0aAotIyBvdGhlciBzb2Z0d2FyZSwgb3IgYW55IG90aGVyIHByb2R1Y3Qgd2hhdHNvZXZlci4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKLSMgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotIwotIyBDb250YWN0IGluZm9ybWF0aW9uOiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCAxNjAwIEFtcGhpdGhlYXRyZSBQa3d5LAotIyBNb3VudGFpbiBWaWV3LCBDQSAgOTQwNDMsIG9yOgotIwotIyBodHRwOi8vd3d3LnNnaS5jb20KLSMKLSMgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgbm90aWNlLCBzZWU6Ci0jCi0jIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9HZW5JbmZvL1NHSUdQTE5vdGljZUV4cGxhbi8KKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAjCiAKIEVYVFJBX0NGTEFHUyArPQkgLUlmcy94ZnMgLUlmcy94ZnMvbGludXgtMi42IC1mdW5zaWduZWQtY2hhcgpAQCAtMzYsNyArMjIsNyBAQAogCiBpZmVxICgkKENPTkZJR19YRlNfREVCVUcpLHkpCiAJRVhUUkFfQ0ZMQUdTICs9IC1nIC1EU1RBVElDPSIiIC1EREVCVUcKLQlFWFRSQV9DRkxBR1MgKz0gLURQQUdFQlVGX0xPQ0tfVFJBQ0tJTkcKKwlFWFRSQV9DRkxBR1MgKz0gLURYRlNfQlVGX0xPQ0tfVFJBQ0tJTkcKIGVuZGlmCiBpZmVxICgkKENPTkZJR19YRlNfVFJBQ0UpLHkpCiAJRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0FMTE9DX1RSQUNFCkBAIC01MCw3ICszNiw3IEBACiAJRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0lMT0NLX1RSQUNFCiAJRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0xPR19UUkFDRQogCUVYVFJBX0NGTEFHUyArPSAtRFhGU19SV19UUkFDRQotCUVYVFJBX0NGTEFHUyArPSAtRFBBR0VCVUZfVFJBQ0UKKwlFWFRSQV9DRkxBR1MgKz0gLURYRlNfQlVGX1RSQUNFCiAJRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX1ZOT0RFX1RSQUNFCiBlbmRpZgogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L2ttZW0uaCBiL2ZzL3hmcy9saW51eC0yLjYva21lbS5oCmluZGV4IGM2NGEyOWNkLi4yY2ZkMzNkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L2ttZW0uaAorKysgYi9mcy94ZnMvbGludXgtMi42L2ttZW0uaApAQCAtMjMsMTcgKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKgotICogbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMKKyAqIFByb2Nlc3MgZmxhZ3MgaGFuZGxpbmcKICAqLwotI2RlZmluZSBLTV9TTEVFUAkweDAwMDF1Ci0jZGVmaW5lIEtNX05PU0xFRVAJMHgwMDAydQotI2RlZmluZSBLTV9OT0ZTCQkweDAwMDR1Ci0jZGVmaW5lIEtNX01BWUZBSUwJMHgwMDA4dQotCi0jZGVmaW5lCWttZW1fem9uZQlrbWVtX2NhY2hlCi0jZGVmaW5lIGttZW1fem9uZV90CXN0cnVjdCBrbWVtX2NhY2hlCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB4ZnNfcGZsYWdzX3Q7CiAKICNkZWZpbmUgUEZMQUdTX1RFU1RfTk9JTygpICAgICAgICAgICAgICAoY3VycmVudC0+ZmxhZ3MgJiBQRl9OT0lPKQogI2RlZmluZSBQRkxBR1NfVEVTVF9GU1RSQU5TKCkgICAgICAgICAgIChjdXJyZW50LT5mbGFncyAmIFBGX0ZTVFJBTlMpCkBAIC02Nyw3NCArNTgsMTAyIEBACiAJKihOU1RBVEVQKSA9ICooT1NUQVRFUCk7CVwKIH0gd2hpbGUgKDApCiAKLXN0YXRpYyBfX2lubGluZSBnZnBfdCBrbWVtX2ZsYWdzX2NvbnZlcnQodW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQotewotCWdmcF90CWxmbGFncyA9IF9fR0ZQX05PV0FSTjsJLyogd2UnbGwgcmVwb3J0IHByb2JsZW1zLCBpZiBuZWVkIGJlICovCisvKgorICogR2VuZXJhbCBtZW1vcnkgYWxsb2NhdGlvbiBpbnRlcmZhY2VzCisgKi8KIAotI2lmZGVmIERFQlVHCi0JaWYgKHVubGlrZWx5KGZsYWdzICYgfihLTV9TTEVFUHxLTV9OT1NMRUVQfEtNX05PRlN8S01fTUFZRkFJTCkpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICJYRlM6IG1lbW9yeSBhbGxvY2F0aW9uIHdpdGggd3JvbmcgZmxhZ3MgKCV4KVxuIiwgZmxhZ3MpOwotCQlCVUcoKTsKLQl9Ci0jZW5kaWYKKyNkZWZpbmUgS01fU0xFRVAJMHgwMDAxdQorI2RlZmluZSBLTV9OT1NMRUVQCTB4MDAwMnUKKyNkZWZpbmUgS01fTk9GUwkJMHgwMDA0dQorI2RlZmluZSBLTV9NQVlGQUlMCTB4MDAwOHUKKworLyoKKyAqIFdlIHVzZSBhIHNwZWNpYWwgcHJvY2VzcyBmbGFnIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxsYmFja3MgaW50bworICogdGhlIGZpbGVzeXN0ZW0gZHVyaW5nIHRyYW5zYWN0aW9ucy4gIFdlIHdpbGwgYWxzbyBpc3N1ZSBvdXIgb3duCisgKiB3YXJuaW5ncywgc28gd2UgZXhwbGljaXRseSBza2lwIGFueSBnZW5lcmljIG9uZXMgKHNpbGx5IG9mIHVzKS4KKyAqLworc3RhdGljIGlubGluZSBnZnBfdAora21lbV9mbGFnc19jb252ZXJ0KHVuc2lnbmVkIGludCBfX25vY2FzdCBmbGFncykKK3sKKwlnZnBfdAlsZmxhZ3M7CisKKwlCVUdfT04oZmxhZ3MgJiB+KEtNX1NMRUVQfEtNX05PU0xFRVB8S01fTk9GU3xLTV9NQVlGQUlMKSk7CiAKIAlpZiAoZmxhZ3MgJiBLTV9OT1NMRUVQKSB7Ci0JCWxmbGFncyB8PSBHRlBfQVRPTUlDOworCQlsZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOOwogCX0gZWxzZSB7Ci0JCWxmbGFncyB8PSBHRlBfS0VSTkVMOwotCi0JCS8qIGF2b2lkIHJlY3VzaXZlIGNhbGxiYWNrcyB0byBmaWxlc3lzdGVtIGR1cmluZyB0cmFuc2FjdGlvbnMgKi8KKwkJbGZsYWdzID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTjsKIAkJaWYgKFBGTEFHU19URVNUX0ZTVFJBTlMoKSB8fCAoZmxhZ3MgJiBLTV9OT0ZTKSkKIAkJCWxmbGFncyAmPSB+X19HRlBfRlM7CiAJfQotCi0gICAgICAgIHJldHVybiBsZmxhZ3M7CisJcmV0dXJuIGxmbGFnczsKIH0KIAotc3RhdGljIF9faW5saW5lIGttZW1fem9uZV90ICoKLWttZW1fem9uZV9pbml0KGludCBzaXplLCBjaGFyICp6b25lX25hbWUpCi17Ci0JcmV0dXJuIGttZW1fY2FjaGVfY3JlYXRlKHpvbmVfbmFtZSwgc2l6ZSwgMCwgMCwgTlVMTCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1rbWVtX3pvbmVfZnJlZShrbWVtX3pvbmVfdCAqem9uZSwgdm9pZCAqcHRyKQotewotCWttZW1fY2FjaGVfZnJlZSh6b25lLCBwdHIpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgdm9pZAota21lbV96b25lX2Rlc3Ryb3koa21lbV96b25lX3QgKnpvbmUpCi17Ci0JaWYgKHpvbmUgJiYga21lbV9jYWNoZV9kZXN0cm95KHpvbmUpKQotCQlCVUcoKTsKLX0KLQotZXh0ZXJuIHZvaWQgKmttZW1fem9uZV96YWxsb2Moa21lbV96b25lX3QgKiwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKLWV4dGVybiB2b2lkICprbWVtX3pvbmVfYWxsb2Moa21lbV96b25lX3QgKiwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKLQogZXh0ZXJuIHZvaWQgKmttZW1fYWxsb2Moc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwogZXh0ZXJuIHZvaWQgKmttZW1fcmVhbGxvYyh2b2lkICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOwogZXh0ZXJuIHZvaWQgKmttZW1femFsbG9jKHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICBrbWVtX2ZyZWUodm9pZCAqLCBzaXplX3QpOwogCisvKgorICogWm9uZSBpbnRlcmZhY2VzCisgKi8KKworI2RlZmluZSBLTV9aT05FX0hXQUxJR04JU0xBQl9IV0NBQ0hFX0FMSUdOCisjZGVmaW5lIEtNX1pPTkVfUkVDTEFJTQlTTEFCX1JFQ0xBSU1fQUNDT1VOVAorI2RlZmluZSBLTV9aT05FX1NQUkVBRAlTTEFCX01FTV9TUFJFQUQKKworI2RlZmluZSBrbWVtX3pvbmUJa21lbV9jYWNoZQorI2RlZmluZSBrbWVtX3pvbmVfdAlzdHJ1Y3Qga21lbV9jYWNoZQorCitzdGF0aWMgaW5saW5lIGttZW1fem9uZV90ICoKK2ttZW1fem9uZV9pbml0KGludCBzaXplLCBjaGFyICp6b25lX25hbWUpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfY3JlYXRlKHpvbmVfbmFtZSwgc2l6ZSwgMCwgMCwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUga21lbV96b25lX3QgKgora21lbV96b25lX2luaXRfZmxhZ3MoaW50IHNpemUsIGNoYXIgKnpvbmVfbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJICAgICB2b2lkICgqY29uc3RydWN0KSh2b2lkICosIGttZW1fem9uZV90ICosIHVuc2lnbmVkIGxvbmcpKQoreworCXJldHVybiBrbWVtX2NhY2hlX2NyZWF0ZSh6b25lX25hbWUsIHNpemUsIDAsIGZsYWdzLCBjb25zdHJ1Y3QsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2ttZW1fem9uZV9mcmVlKGttZW1fem9uZV90ICp6b25lLCB2b2lkICpwdHIpCit7CisJa21lbV9jYWNoZV9mcmVlKHpvbmUsIHB0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAora21lbV96b25lX2Rlc3Ryb3koa21lbV96b25lX3QgKnpvbmUpCit7CisJaWYgKHpvbmUgJiYga21lbV9jYWNoZV9kZXN0cm95KHpvbmUpKQorCQlCVUcoKTsKK30KKworZXh0ZXJuIHZvaWQgKmttZW1fem9uZV9hbGxvYyhrbWVtX3pvbmVfdCAqLCB1bnNpZ25lZCBpbnQgX19ub2Nhc3QpOworZXh0ZXJuIHZvaWQgKmttZW1fem9uZV96YWxsb2Moa21lbV96b25lX3QgKiwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKKworLyoKKyAqIExvdyBtZW1vcnkgY2FjaGUgc2hyaW5rZXJzCisgKi8KKwogdHlwZWRlZiBzdHJ1Y3Qgc2hyaW5rZXIgKmttZW1fc2hha2VyX3Q7CiB0eXBlZGVmIGludCAoKmttZW1fc2hha2VfZnVuY190KShpbnQsIGdmcF90KTsKIAotc3RhdGljIF9faW5saW5lIGttZW1fc2hha2VyX3QKK3N0YXRpYyBpbmxpbmUga21lbV9zaGFrZXJfdAoga21lbV9zaGFrZV9yZWdpc3RlcihrbWVtX3NoYWtlX2Z1bmNfdCBzZnVuYykKIHsKIAlyZXR1cm4gc2V0X3Nocmlua2VyKERFRkFVTFRfU0VFS1MsIHNmdW5jKTsKIH0KIAotc3RhdGljIF9faW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAoga21lbV9zaGFrZV9kZXJlZ2lzdGVyKGttZW1fc2hha2VyX3Qgc2hyaW5rZXIpCiB7CiAJcmVtb3ZlX3Nocmlua2VyKHNocmlua2VyKTsKIH0KIAotc3RhdGljIF9faW5saW5lIGludAorc3RhdGljIGlubGluZSBpbnQKIGttZW1fc2hha2VfYWxsb3coZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJcmV0dXJuIChnZnBfbWFzayAmIF9fR0ZQX1dBSVQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDhmMmJlZWMuLjk3ZmMwNTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTQzLDcgKzQzLDI5IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogCi1TVEFUSUMgdm9pZCB4ZnNfY291bnRfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqLCBpbnQgKiwgaW50ICosIGludCAqKTsKK1NUQVRJQyB2b2lkCit4ZnNfY291bnRfcGFnZV9zdGF0ZSgKKwlzdHJ1Y3QgcGFnZQkJKnBhZ2UsCisJaW50CQkJKmRlbGFsbG9jLAorCWludAkJCSp1bm1hcHBlZCwKKwlpbnQJCQkqdW53cml0dGVuKQoreworCXN0cnVjdCBidWZmZXJfaGVhZAkqYmgsICpoZWFkOworCisJKmRlbGFsbG9jID0gKnVubWFwcGVkID0gKnVud3JpdHRlbiA9IDA7CisKKwliaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisJZG8geworCQlpZiAoYnVmZmVyX3VwdG9kYXRlKGJoKSAmJiAhYnVmZmVyX21hcHBlZChiaCkpCisJCQkoKnVubWFwcGVkKSA9IDE7CisJCWVsc2UgaWYgKGJ1ZmZlcl91bndyaXR0ZW4oYmgpICYmICFidWZmZXJfZGVsYXkoYmgpKQorCQkJY2xlYXJfYnVmZmVyX3Vud3JpdHRlbihiaCk7CisJCWVsc2UgaWYgKGJ1ZmZlcl91bndyaXR0ZW4oYmgpKQorCQkJKCp1bndyaXR0ZW4pID0gMTsKKwkJZWxzZSBpZiAoYnVmZmVyX2RlbGF5KGJoKSkKKwkJCSgqZGVsYWxsb2MpID0gMTsKKwl9IHdoaWxlICgoYmggPSBiaC0+Yl90aGlzX3BhZ2UpICE9IGhlYWQpOworfQogCiAjaWYgZGVmaW5lZChYRlNfUldfVFJBQ0UpCiB2b2lkCkBAIC01NCw3ICs3Niw3IEBACiAJaW50CQltYXNrKQogewogCXhmc19pbm9kZV90CSppcDsKLQl2bm9kZV90CQkqdnAgPSBMSU5WRlNfR0VUX1ZQKGlub2RlKTsKKwl2bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKIAlsb2ZmX3QJCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCWxvZmZfdAkJb2Zmc2V0ID0gcGFnZV9vZmZzZXQocGFnZSk7CiAJaW50CQlkZWxhbGxvYyA9IC0xLCB1bm1hcHBlZCA9IC0xLCB1bndyaXR0ZW4gPSAtMTsKQEAgLTgxLDcgKzEwMyw3IEBACiAJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKWRlbGFsbG9jKSwKIAkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdW5tYXBwZWQpLAogCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZyl1bndyaXR0ZW4pLAotCQkodm9pZCAqKU5VTEwsCisJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfcGlkKCkpLAogCQkodm9pZCAqKU5VTEwpOwogfQogI2Vsc2UKQEAgLTE5Miw3ICsyMTQsNyBAQAogCWlvZW5kLT5pb191cHRvZGF0ZSA9IDE7IC8qIGNsZWFyZWQgaWYgYW55IEkvTyBmYWlscyAqLwogCWlvZW5kLT5pb19saXN0ID0gTlVMTDsKIAlpb2VuZC0+aW9fdHlwZSA9IHR5cGU7Ci0JaW9lbmQtPmlvX3Zub2RlID0gTElOVkZTX0dFVF9WUChpbm9kZSk7CisJaW9lbmQtPmlvX3Zub2RlID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CiAJaW9lbmQtPmlvX2J1ZmZlcl9oZWFkID0gTlVMTDsKIAlpb2VuZC0+aW9fYnVmZmVyX3RhaWwgPSBOVUxMOwogCWF0b21pY19pbmMoJmlvZW5kLT5pb192bm9kZS0+dl9pb2NvdW50KTsKQEAgLTIxNyw3ICsyMzksNyBAQAogCXhmc19pb21hcF90CQkqbWFwcCwKIAlpbnQJCQlmbGFncykKIHsKLQl2bm9kZV90CQkJKnZwID0gTElOVkZTX0dFVF9WUChpbm9kZSk7CisJdm5vZGVfdAkJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwogCWludAkJCWVycm9yLCBubWFwcyA9IDE7CiAKIAlWT1BfQk1BUCh2cCwgb2Zmc2V0LCBjb3VudCwgZmxhZ3MsIG1hcHAsICZubWFwcywgZXJyb3IpOwpAQCAtNDYyLDI4ICs0ODQsMzcgQEAKIH0KIAogU1RBVElDIHZvaWQKK3hmc19tYXBfYnVmZmVyKAorCXN0cnVjdCBidWZmZXJfaGVhZAkqYmgsCisJeGZzX2lvbWFwX3QJCSptcCwKKwl4ZnNfb2ZmX3QJCW9mZnNldCwKKwl1aW50CQkJYmxvY2tfYml0cykKK3sKKwlzZWN0b3JfdAkJYm47CisKKwlBU1NFUlQobXAtPmlvbWFwX2JuICE9IElPTUFQX0RBRERSX05VTEwpOworCisJYm4gPSAobXAtPmlvbWFwX2JuID4+IChibG9ja19iaXRzIC0gQkJTSElGVCkpICsKKwkgICAgICAoKG9mZnNldCAtIG1wLT5pb21hcF9vZmZzZXQpID4+IGJsb2NrX2JpdHMpOworCisJQVNTRVJUKGJuIHx8IChtcC0+aW9tYXBfZmxhZ3MgJiBJT01BUF9SRUFMVElNRSkpOworCisJYmgtPmJfYmxvY2tuciA9IGJuOworCXNldF9idWZmZXJfbWFwcGVkKGJoKTsKK30KKworU1RBVElDIHZvaWQKIHhmc19tYXBfYXRfb2Zmc2V0KAogCXN0cnVjdCBidWZmZXJfaGVhZAkqYmgsCiAJbG9mZl90CQkJb2Zmc2V0LAogCWludAkJCWJsb2NrX2JpdHMsCiAJeGZzX2lvbWFwX3QJCSppb21hcHApCiB7Ci0JeGZzX2RhZGRyX3QJCWJuOwotCWludAkJCXNlY3Rvcl9zaGlmdDsKLQogCUFTU0VSVCghKGlvbWFwcC0+aW9tYXBfZmxhZ3MgJiBJT01BUF9IT0xFKSk7CiAJQVNTRVJUKCEoaW9tYXBwLT5pb21hcF9mbGFncyAmIElPTUFQX0RFTEFZKSk7Ci0JQVNTRVJUKGlvbWFwcC0+aW9tYXBfYm4gIT0gSU9NQVBfREFERFJfTlVMTCk7Ci0KLQlzZWN0b3Jfc2hpZnQgPSBibG9ja19iaXRzIC0gQkJTSElGVDsKLQlibiA9IChpb21hcHAtPmlvbWFwX2JuID4+IHNlY3Rvcl9zaGlmdCkgKwotCSAgICAgICgob2Zmc2V0IC0gaW9tYXBwLT5pb21hcF9vZmZzZXQpID4+IGJsb2NrX2JpdHMpOwotCi0JQVNTRVJUKGJuIHx8IChpb21hcHAtPmlvbWFwX2ZsYWdzICYgSU9NQVBfUkVBTFRJTUUpKTsKLQlBU1NFUlQoKGJuIDw8IHNlY3Rvcl9zaGlmdCkgPj0gaW9tYXBwLT5pb21hcF9ibik7CiAKIAlsb2NrX2J1ZmZlcihiaCk7Ci0JYmgtPmJfYmxvY2tuciA9IGJuOworCXhmc19tYXBfYnVmZmVyKGJoLCBpb21hcHAsIG9mZnNldCwgYmxvY2tfYml0cyk7CiAJYmgtPmJfYmRldiA9IGlvbWFwcC0+aW9tYXBfdGFyZ2V0LT5idF9iZGV2OwogCXNldF9idWZmZXJfbWFwcGVkKGJoKTsKIAljbGVhcl9idWZmZXJfZGVsYXkoYmgpOwpAQCAtNTQwLDcgKzU3MSw3IEBACiAKIAkvKiBGaXJzdCBzdW0gZm9yd2FyZHMgaW4gdGhpcyBwYWdlICovCiAJZG8gewotCQlpZiAobWFwcGVkICE9IGJ1ZmZlcl9tYXBwZWQoYmgpKQorCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgKG1hcHBlZCAhPSBidWZmZXJfbWFwcGVkKGJoKSkpCiAJCQlyZXR1cm4gdG90YWw7CiAJCXRvdGFsICs9IGJoLT5iX3NpemU7CiAJfSB3aGlsZSAoKGJoID0gYmgtPmJfdGhpc19wYWdlKSAhPSBoZWFkKTsKQEAgLTYxNiw3ICs2NDcsNyBAQAogCQkJCWFjY2VwdGFibGUgPSAodHlwZSA9PSBJT01BUF9VTldSSVRURU4pOwogCQkJZWxzZSBpZiAoYnVmZmVyX2RlbGF5KGJoKSkKIAkJCQlhY2NlcHRhYmxlID0gKHR5cGUgPT0gSU9NQVBfREVMQVkpOwotCQkJZWxzZSBpZiAoYnVmZmVyX21hcHBlZChiaCkpCisJCQllbHNlIGlmIChidWZmZXJfZGlydHkoYmgpICYmIGJ1ZmZlcl9tYXBwZWQoYmgpKQogCQkJCWFjY2VwdGFibGUgPSAodHlwZSA9PSAwKTsKIAkJCWVsc2UKIAkJCQlicmVhazsKQEAgLTEwNDAsMjUwICsxMDcxLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1TVEFUSUMgaW50Ci1fX2xpbnZmc19nZXRfYmxvY2soCi0Jc3RydWN0IGlub2RlCQkqaW5vZGUsCi0Jc2VjdG9yX3QJCWlibG9jaywKLQl1bnNpZ25lZCBsb25nCQlibG9ja3MsCi0Jc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaF9yZXN1bHQsCi0JaW50CQkJY3JlYXRlLAotCWludAkJCWRpcmVjdCwKLQlibWFwaV9mbGFnc190CQlmbGFncykKLXsKLQl2bm9kZV90CQkJKnZwID0gTElOVkZTX0dFVF9WUChpbm9kZSk7Ci0JeGZzX2lvbWFwX3QJCWlvbWFwOwotCXhmc19vZmZfdAkJb2Zmc2V0OwotCXNzaXplX3QJCQlzaXplOwotCWludAkJCXJldHBiYm0gPSAxOwotCWludAkJCWVycm9yOwotCi0Jb2Zmc2V0ID0gKHhmc19vZmZfdClpYmxvY2sgPDwgaW5vZGUtPmlfYmxrYml0czsKLQlpZiAoYmxvY2tzKQotCQlzaXplID0gKHNzaXplX3QpIG1pbl90KHhmc19vZmZfdCwgTE9OR19NQVgsCi0JCQkJCSh4ZnNfb2ZmX3QpYmxvY2tzIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwotCWVsc2UKLQkJc2l6ZSA9IDEgPDwgaW5vZGUtPmlfYmxrYml0czsKLQotCVZPUF9CTUFQKHZwLCBvZmZzZXQsIHNpemUsCi0JCWNyZWF0ZSA/IGZsYWdzIDogQk1BUElfUkVBRCwgJmlvbWFwLCAmcmV0cGJibSwgZXJyb3IpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIC1lcnJvcjsKLQotCWlmIChyZXRwYmJtID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGlvbWFwLmlvbWFwX2JuICE9IElPTUFQX0RBRERSX05VTEwpIHsKLQkJeGZzX2RhZGRyX3QJYm47Ci0JCXhmc19vZmZfdAlkZWx0YTsKLQotCQkvKiBGb3IgdW53cml0dGVuIGV4dGVudHMgZG8gbm90IHJlcG9ydCBhIGRpc2sgYWRkcmVzcyBvbgotCQkgKiB0aGUgcmVhZCBjYXNlICh0cmVhdCBhcyBpZiB3ZSdyZSByZWFkaW5nIGludG8gYSBob2xlKS4KLQkJICovCi0JCWlmIChjcmVhdGUgfHwgIShpb21hcC5pb21hcF9mbGFncyAmIElPTUFQX1VOV1JJVFRFTikpIHsKLQkJCWRlbHRhID0gb2Zmc2V0IC0gaW9tYXAuaW9tYXBfb2Zmc2V0OwotCQkJZGVsdGEgPj49IGlub2RlLT5pX2Jsa2JpdHM7Ci0KLQkJCWJuID0gaW9tYXAuaW9tYXBfYm4gPj4gKGlub2RlLT5pX2Jsa2JpdHMgLSBCQlNISUZUKTsKLQkJCWJuICs9IGRlbHRhOwotCQkJQlVHX09OKCFibiAmJiAhKGlvbWFwLmlvbWFwX2ZsYWdzICYgSU9NQVBfUkVBTFRJTUUpKTsKLQkJCWJoX3Jlc3VsdC0+Yl9ibG9ja25yID0gYm47Ci0JCQlzZXRfYnVmZmVyX21hcHBlZChiaF9yZXN1bHQpOwotCQl9Ci0JCWlmIChjcmVhdGUgJiYgKGlvbWFwLmlvbWFwX2ZsYWdzICYgSU9NQVBfVU5XUklUVEVOKSkgewotCQkJaWYgKGRpcmVjdCkKLQkJCQliaF9yZXN1bHQtPmJfcHJpdmF0ZSA9IGlub2RlOwotCQkJc2V0X2J1ZmZlcl91bndyaXR0ZW4oYmhfcmVzdWx0KTsKLQkJCXNldF9idWZmZXJfZGVsYXkoYmhfcmVzdWx0KTsKLQkJfQotCX0KLQotCS8qIElmIHRoaXMgaXMgYSByZWFsdGltZSBmaWxlLCBkYXRhIG1pZ2h0IGJlIG9uIGEgbmV3IGRldmljZSAqLwotCWJoX3Jlc3VsdC0+Yl9iZGV2ID0gaW9tYXAuaW9tYXBfdGFyZ2V0LT5idF9iZGV2OwotCi0JLyogSWYgd2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYSBibG9jayBvdXQgYmV5b25kIGVvZiBhbmQKLQkgKiB3ZSBhcmUgbm93IGNvbWluZyBiYWNrIHRvIHVzZSBpdCB0aGVuIHdlIHdpbGwgbmVlZCB0bwotCSAqIGZsYWcgaXQgYXMgbmV3IGV2ZW4gaWYgaXQgaGFzIGEgZGlzayBhZGRyZXNzLgotCSAqLwotCWlmIChjcmVhdGUgJiYKLQkgICAgKCghYnVmZmVyX21hcHBlZChiaF9yZXN1bHQpICYmICFidWZmZXJfdXB0b2RhdGUoYmhfcmVzdWx0KSkgfHwKLQkgICAgIChvZmZzZXQgPj0gaV9zaXplX3JlYWQoaW5vZGUpKSB8fCAoaW9tYXAuaW9tYXBfZmxhZ3MgJiBJT01BUF9ORVcpKSkKLQkJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKLQotCWlmIChpb21hcC5pb21hcF9mbGFncyAmIElPTUFQX0RFTEFZKSB7Ci0JCUJVR19PTihkaXJlY3QpOwotCQlpZiAoY3JlYXRlKSB7Ci0JCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoX3Jlc3VsdCk7Ci0JCQlzZXRfYnVmZmVyX21hcHBlZChiaF9yZXN1bHQpOwotCQkJc2V0X2J1ZmZlcl9kZWxheShiaF9yZXN1bHQpOwotCQl9Ci0JfQotCi0JaWYgKGJsb2NrcykgewotCQlBU1NFUlQoaW9tYXAuaW9tYXBfYnNpemUgLSBpb21hcC5pb21hcF9kZWx0YSA+IDApOwotCQlvZmZzZXQgPSBtaW5fdCh4ZnNfb2ZmX3QsCi0JCQkJaW9tYXAuaW9tYXBfYnNpemUgLSBpb21hcC5pb21hcF9kZWx0YSwKLQkJCQkoeGZzX29mZl90KWJsb2NrcyA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKLQkJYmhfcmVzdWx0LT5iX3NpemUgPSAodTMyKSBtaW5fdCh4ZnNfb2ZmX3QsIFVJTlRfTUFYLCBvZmZzZXQpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQKLWxpbnZmc19nZXRfYmxvY2soCi0Jc3RydWN0IGlub2RlCQkqaW5vZGUsCi0Jc2VjdG9yX3QJCWlibG9jaywKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoX3Jlc3VsdCwKLQlpbnQJCQljcmVhdGUpCi17Ci0JcmV0dXJuIF9fbGludmZzX2dldF9ibG9jayhpbm9kZSwgaWJsb2NrLCAwLCBiaF9yZXN1bHQsCi0JCQkJCWNyZWF0ZSwgMCwgQk1BUElfV1JJVEUpOwotfQotCi1TVEFUSUMgaW50Ci1saW52ZnNfZ2V0X2Jsb2Nrc19kaXJlY3QoCi0Jc3RydWN0IGlub2RlCQkqaW5vZGUsCi0Jc2VjdG9yX3QJCWlibG9jaywKLQl1bnNpZ25lZCBsb25nCQltYXhfYmxvY2tzLAotCXN0cnVjdCBidWZmZXJfaGVhZAkqYmhfcmVzdWx0LAotCWludAkJCWNyZWF0ZSkKLXsKLQlyZXR1cm4gX19saW52ZnNfZ2V0X2Jsb2NrKGlub2RlLCBpYmxvY2ssIG1heF9ibG9ja3MsIGJoX3Jlc3VsdCwKLQkJCQkJY3JlYXRlLCAxLCBCTUFQSV9XUklURXxCTUFQSV9ESVJFQ1QpOwotfQotCi1TVEFUSUMgdm9pZAotbGludmZzX2VuZF9pb19kaXJlY3QoCi0Jc3RydWN0IGtpb2NiCSppb2NiLAotCWxvZmZfdAkJb2Zmc2V0LAotCXNzaXplX3QJCXNpemUsCi0Jdm9pZAkJKnByaXZhdGUpCi17Ci0JeGZzX2lvZW5kX3QJKmlvZW5kID0gaW9jYi0+cHJpdmF0ZTsKLQotCS8qCi0JICogTm9uLU5VTEwgcHJpdmF0ZSBkYXRhIG1lYW5zIHdlIG5lZWQgdG8gaXNzdWUgYSB0cmFuc2FjdGlvbiB0bwotCSAqIGNvbnZlcnQgYSByYW5nZSBmcm9tIHVud3JpdHRlbiB0byB3cml0dGVuIGV4dGVudHMuICBUaGlzIG5lZWRzCi0JICogdG8gaGFwcGVuIGZyb20gcHJvY2VzcyBjb250ZWN0IGJ1dCBhaW8rZGlvIEkvTyBjb21wbGV0aW9uCi0JICogaGFwcGVucyBmcm9tIGlycSBjb250ZXh0IHNvIHdlIG5lZWQgdG8gZGVmZXIgaXQgdG8gYSB3b3JrcXVldWUuCi0JICogVGhpcyBpcyBub3QgbmVzc2VjYXJ5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgSS9PLCBidXQgd2UgZG8KLQkgKiBpdCBhbnl3YXkgdG8ga2VlcCB0aGUgY29kZSB1bmlmb3JtIGFuZCBzaW1wbGVyLgotCSAqCi0JICogVGhlIGNvcmUgZGlyZWN0IEkvTyBjb2RlIG1pZ2h0IGJlIGNoYW5nZWQgdG8gYWx3YXlzIGNhbGwgdGhlCi0JICogY29tcGxldGlvbiBoYW5kbGVyIGluIHRoZSBmdXR1cmUsIGluIHdoaWNoIGNhc2UgYWxsIHRoaXMgY2FuCi0JICogZ28gYXdheS4KLQkgKi8KLQlpZiAocHJpdmF0ZSAmJiBzaXplID4gMCkgewotCQlpb2VuZC0+aW9fb2Zmc2V0ID0gb2Zmc2V0OwotCQlpb2VuZC0+aW9fc2l6ZSA9IHNpemU7Ci0JCXhmc19maW5pc2hfaW9lbmQoaW9lbmQpOwotCX0gZWxzZSB7Ci0JCUFTU0VSVChzaXplID49IDApOwotCQl4ZnNfZGVzdHJveV9pb2VuZChpb2VuZCk7Ci0JfQotCi0JLyoKLQkgKiBibG9ja2Rldl9kaXJlY3RfSU8gY2FuIHJldHVybiBhbiBlcnJvciBldmVuIGFmZXIgdGhlIEkvTwotCSAqIGNvbXBsZXRpb24gaGFuZGxlciB3YXMgY2FsbGVkLiAgVGh1cyB3ZSBuZWVkIHRvIHByb3RlY3QKLQkgKiBhZ2FpbnN0IGRvdWJsZS1mcmVlaW5nLgotCSAqLwotCWlvY2ItPnByaXZhdGUgPSBOVUxMOwotfQotCi1TVEFUSUMgc3NpemVfdAotbGludmZzX2RpcmVjdF9JTygKLQlpbnQJCQlydywKLQlzdHJ1Y3Qga2lvY2IJCSppb2NiLAotCWNvbnN0IHN0cnVjdCBpb3ZlYwkqaW92LAotCWxvZmZfdAkJCW9mZnNldCwKLQl1bnNpZ25lZCBsb25nCQlucl9zZWdzKQotewotCXN0cnVjdCBmaWxlCSpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOwotCXhmc19pb21hcF90CWlvbWFwOwotCWludAkJbWFwcyA9IDE7Ci0JaW50CQllcnJvcjsKLQlzc2l6ZV90CQlyZXQ7Ci0KLQlWT1BfQk1BUCh2cCwgb2Zmc2V0LCAwLCBCTUFQSV9ERVZJQ0UsICZpb21hcCwgJm1hcHMsIGVycm9yKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAtZXJyb3I7Ci0KLQlpb2NiLT5wcml2YXRlID0geGZzX2FsbG9jX2lvZW5kKGlub2RlLCBJT01BUF9VTldSSVRURU4pOwotCi0JcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX293bl9sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwKLQkJaW9tYXAuaW9tYXBfdGFyZ2V0LT5idF9iZGV2LAotCQlpb3YsIG9mZnNldCwgbnJfc2VncywKLQkJbGludmZzX2dldF9ibG9ja3NfZGlyZWN0LAotCQlsaW52ZnNfZW5kX2lvX2RpcmVjdCk7Ci0KLQlpZiAodW5saWtlbHkocmV0IDw9IDAgJiYgaW9jYi0+cHJpdmF0ZSkpCi0JCXhmc19kZXN0cm95X2lvZW5kKGlvY2ItPnByaXZhdGUpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotU1RBVElDIHNlY3Rvcl90Ci1saW52ZnNfYm1hcCgKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZywKLQlzZWN0b3JfdAkJYmxvY2spCi17Ci0Jc3RydWN0IGlub2RlCQkqaW5vZGUgPSAoc3RydWN0IGlub2RlICopbWFwcGluZy0+aG9zdDsKLQl2bm9kZV90CQkJKnZwID0gTElOVkZTX0dFVF9WUChpbm9kZSk7Ci0JaW50CQkJZXJyb3I7Ci0KLQl2bl90cmFjZV9lbnRyeSh2cCwgImxpbnZmc19ibWFwIiwgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOwotCi0JVk9QX1JXTE9DSyh2cCwgVlJXTE9DS19SRUFEKTsKLQlWT1BfRkxVU0hfUEFHRVModnAsICh4ZnNfb2ZmX3QpMCwgLTEsIDAsIEZJX1JFTUFQRiwgZXJyb3IpOwotCVZPUF9SV1VOTE9DSyh2cCwgVlJXTE9DS19SRUFEKTsKLQlyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBsaW52ZnNfZ2V0X2Jsb2NrKTsKLX0KLQotU1RBVElDIGludAotbGludmZzX3JlYWRwYWdlKAotCXN0cnVjdCBmaWxlCQkqdW51c2VkLAotCXN0cnVjdCBwYWdlCQkqcGFnZSkKLXsKLQlyZXR1cm4gbXBhZ2VfcmVhZHBhZ2UocGFnZSwgbGludmZzX2dldF9ibG9jayk7Ci19Ci0KLVNUQVRJQyBpbnQKLWxpbnZmc19yZWFkcGFnZXMoCi0Jc3RydWN0IGZpbGUJCSp1bnVzZWQsCi0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmcsCi0Jc3RydWN0IGxpc3RfaGVhZAkqcGFnZXMsCi0JdW5zaWduZWQJCW5yX3BhZ2VzKQotewotCXJldHVybiBtcGFnZV9yZWFkcGFnZXMobWFwcGluZywgcGFnZXMsIG5yX3BhZ2VzLCBsaW52ZnNfZ2V0X2Jsb2NrKTsKLX0KLQotU1RBVElDIHZvaWQKLXhmc19jb3VudF9wYWdlX3N0YXRlKAotCXN0cnVjdCBwYWdlCQkqcGFnZSwKLQlpbnQJCQkqZGVsYWxsb2MsCi0JaW50CQkJKnVubWFwcGVkLAotCWludAkJCSp1bndyaXR0ZW4pCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaCwgKmhlYWQ7Ci0KLQkqZGVsYWxsb2MgPSAqdW5tYXBwZWQgPSAqdW53cml0dGVuID0gMDsKLQotCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKLQlkbyB7Ci0JCWlmIChidWZmZXJfdXB0b2RhdGUoYmgpICYmICFidWZmZXJfbWFwcGVkKGJoKSkKLQkJCSgqdW5tYXBwZWQpID0gMTsKLQkJZWxzZSBpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkgJiYgIWJ1ZmZlcl9kZWxheShiaCkpCi0JCQljbGVhcl9idWZmZXJfdW53cml0dGVuKGJoKTsKLQkJZWxzZSBpZiAoYnVmZmVyX3Vud3JpdHRlbihiaCkpCi0JCQkoKnVud3JpdHRlbikgPSAxOwotCQllbHNlIGlmIChidWZmZXJfZGVsYXkoYmgpKQotCQkJKCpkZWxhbGxvYykgPSAxOwotCX0gd2hpbGUgKChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7Ci19Ci0KLQogLyoKICAqIHdyaXRlcGFnZTogQ2FsbGVkIGZyb20gb25lIG9mIHR3byBwbGFjZXM6CiAgKgpAQCAtMTMwNSw3ICsxMDkyLDcgQEAKICAqLwogCiBTVEFUSUMgaW50Ci1saW52ZnNfd3JpdGVwYWdlKAoreGZzX3ZtX3dyaXRlcGFnZSgKIAlzdHJ1Y3QgcGFnZQkJKnBhZ2UsCiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CkBAIC0xMzcxLDE2ICsxMTU4LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLVNUQVRJQyBpbnQKLWxpbnZmc19pbnZhbGlkYXRlX3BhZ2UoCi0Jc3RydWN0IHBhZ2UJCSpwYWdlLAotCXVuc2lnbmVkIGxvbmcJCW9mZnNldCkKLXsKLQl4ZnNfcGFnZV90cmFjZShYRlNfSU5WQUxJRFBBR0VfRU5URVIsCi0JCQlwYWdlLT5tYXBwaW5nLT5ob3N0LCBwYWdlLCBvZmZzZXQpOwotCXJldHVybiBibG9ja19pbnZhbGlkYXRlcGFnZShwYWdlLCBvZmZzZXQpOwotfQotCiAvKgogICogQ2FsbGVkIHRvIG1vdmUgYSBwYWdlIGludG8gY2xlYW5hYmxlIHN0YXRlIC0gYW5kIGZyb20gdGhlcmUKICAqIHRvIGJlIHJlbGVhc2VkLiBQb3NzaWJseSB0aGUgcGFnZSBpcyBhbHJlYWR5IGNsZWFuLiBXZSBhbHdheXMKQEAgLTE0MDEsNyArMTE3OCw3IEBACiAgKiAgICBmcmVlIHRoZW0gYW5kIHdlIHNob3VsZCBjb21lIGJhY2sgbGF0ZXIgdmlhIHdyaXRlcGFnZS4KICAqLwogU1RBVElDIGludAotbGludmZzX3JlbGVhc2VfcGFnZSgKK3hmc192bV9yZWxlYXNlcGFnZSgKIAlzdHJ1Y3QgcGFnZQkJKnBhZ2UsCiAJZ2ZwX3QJCQlnZnBfbWFzaykKIHsKQEAgLTE0MTQsNiArMTE5MSw5IEBACiAKIAl4ZnNfcGFnZV90cmFjZShYRlNfUkVMRUFTRVBBR0VfRU5URVIsIGlub2RlLCBwYWdlLCBnZnBfbWFzayk7CiAKKwlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpCisJCXJldHVybiAwOworCiAJeGZzX2NvdW50X3BhZ2Vfc3RhdGUocGFnZSwgJmRlbGFsbG9jLCAmdW5tYXBwZWQsICZ1bndyaXR0ZW4pOwogCWlmICghZGVsYWxsb2MgJiYgIXVud3JpdHRlbikKIAkJZ290byBmcmVlX2J1ZmZlcnM7CkBAIC0xNDQzLDI1ICsxMjIzLDI0NSBAQAogfQogCiBTVEFUSUMgaW50Ci1saW52ZnNfcHJlcGFyZV93cml0ZSgKK19feGZzX2dldF9ibG9jaygKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKKwlzZWN0b3JfdAkJaWJsb2NrLAorCXVuc2lnbmVkIGxvbmcJCWJsb2NrcywKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoX3Jlc3VsdCwKKwlpbnQJCQljcmVhdGUsCisJaW50CQkJZGlyZWN0LAorCWJtYXBpX2ZsYWdzX3QJCWZsYWdzKQoreworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKKwl4ZnNfaW9tYXBfdAkJaW9tYXA7CisJeGZzX29mZl90CQlvZmZzZXQ7CisJc3NpemVfdAkJCXNpemU7CisJaW50CQkJcmV0cGJibSA9IDE7CisJaW50CQkJZXJyb3I7CisKKwlvZmZzZXQgPSAoeGZzX29mZl90KWlibG9jayA8PCBpbm9kZS0+aV9ibGtiaXRzOworCWlmIChibG9ja3MpCisJCXNpemUgPSAoc3NpemVfdCkgbWluX3QoeGZzX29mZl90LCBMT05HX01BWCwKKwkJCQkJKHhmc19vZmZfdClibG9ja3MgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJZWxzZQorCQlzaXplID0gMSA8PCBpbm9kZS0+aV9ibGtiaXRzOworCisJVk9QX0JNQVAodnAsIG9mZnNldCwgc2l6ZSwKKwkJY3JlYXRlID8gZmxhZ3MgOiBCTUFQSV9SRUFELCAmaW9tYXAsICZyZXRwYmJtLCBlcnJvcik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gLWVycm9yOworCisJaWYgKHJldHBiYm0gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW9tYXAuaW9tYXBfYm4gIT0gSU9NQVBfREFERFJfTlVMTCkgeworCQkvKgorCQkgKiBGb3IgdW53cml0dGVuIGV4dGVudHMgZG8gbm90IHJlcG9ydCBhIGRpc2sgYWRkcmVzcyBvbgorCQkgKiB0aGUgcmVhZCBjYXNlICh0cmVhdCBhcyBpZiB3ZSdyZSByZWFkaW5nIGludG8gYSBob2xlKS4KKwkJICovCisJCWlmIChjcmVhdGUgfHwgIShpb21hcC5pb21hcF9mbGFncyAmIElPTUFQX1VOV1JJVFRFTikpIHsKKwkJCXhmc19tYXBfYnVmZmVyKGJoX3Jlc3VsdCwgJmlvbWFwLCBvZmZzZXQsCisJCQkJICAgICAgIGlub2RlLT5pX2Jsa2JpdHMpOworCQl9CisJCWlmIChjcmVhdGUgJiYgKGlvbWFwLmlvbWFwX2ZsYWdzICYgSU9NQVBfVU5XUklUVEVOKSkgeworCQkJaWYgKGRpcmVjdCkKKwkJCQliaF9yZXN1bHQtPmJfcHJpdmF0ZSA9IGlub2RlOworCQkJc2V0X2J1ZmZlcl91bndyaXR0ZW4oYmhfcmVzdWx0KTsKKwkJCXNldF9idWZmZXJfZGVsYXkoYmhfcmVzdWx0KTsKKwkJfQorCX0KKworCS8qIElmIHRoaXMgaXMgYSByZWFsdGltZSBmaWxlLCBkYXRhIG1pZ2h0IGJlIG9uIGEgbmV3IGRldmljZSAqLworCWJoX3Jlc3VsdC0+Yl9iZGV2ID0gaW9tYXAuaW9tYXBfdGFyZ2V0LT5idF9iZGV2OworCisJLyogSWYgd2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgYSBibG9jayBvdXQgYmV5b25kIGVvZiBhbmQKKwkgKiB3ZSBhcmUgbm93IGNvbWluZyBiYWNrIHRvIHVzZSBpdCB0aGVuIHdlIHdpbGwgbmVlZCB0bworCSAqIGZsYWcgaXQgYXMgbmV3IGV2ZW4gaWYgaXQgaGFzIGEgZGlzayBhZGRyZXNzLgorCSAqLworCWlmIChjcmVhdGUgJiYKKwkgICAgKCghYnVmZmVyX21hcHBlZChiaF9yZXN1bHQpICYmICFidWZmZXJfdXB0b2RhdGUoYmhfcmVzdWx0KSkgfHwKKwkgICAgIChvZmZzZXQgPj0gaV9zaXplX3JlYWQoaW5vZGUpKSB8fCAoaW9tYXAuaW9tYXBfZmxhZ3MgJiBJT01BUF9ORVcpKSkKKwkJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKKworCWlmIChpb21hcC5pb21hcF9mbGFncyAmIElPTUFQX0RFTEFZKSB7CisJCUJVR19PTihkaXJlY3QpOworCQlpZiAoY3JlYXRlKSB7CisJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoX3Jlc3VsdCk7CisJCQlzZXRfYnVmZmVyX21hcHBlZChiaF9yZXN1bHQpOworCQkJc2V0X2J1ZmZlcl9kZWxheShiaF9yZXN1bHQpOworCQl9CisJfQorCisJaWYgKGJsb2NrcykgeworCQlBU1NFUlQoaW9tYXAuaW9tYXBfYnNpemUgLSBpb21hcC5pb21hcF9kZWx0YSA+IDApOworCQlvZmZzZXQgPSBtaW5fdCh4ZnNfb2ZmX3QsCisJCQkJaW9tYXAuaW9tYXBfYnNpemUgLSBpb21hcC5pb21hcF9kZWx0YSwKKwkJCQkoeGZzX29mZl90KWJsb2NrcyA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKKwkJYmhfcmVzdWx0LT5iX3NpemUgPSAodTMyKSBtaW5fdCh4ZnNfb2ZmX3QsIFVJTlRfTUFYLCBvZmZzZXQpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQKK3hmc19nZXRfYmxvY2soCisJc3RydWN0IGlub2RlCQkqaW5vZGUsCisJc2VjdG9yX3QJCWlibG9jaywKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoX3Jlc3VsdCwKKwlpbnQJCQljcmVhdGUpCit7CisJcmV0dXJuIF9feGZzX2dldF9ibG9jayhpbm9kZSwgaWJsb2NrLCAwLCBiaF9yZXN1bHQsCisJCQkJCWNyZWF0ZSwgMCwgQk1BUElfV1JJVEUpOworfQorCitTVEFUSUMgaW50Cit4ZnNfZ2V0X2Jsb2Nrc19kaXJlY3QoCisJc3RydWN0IGlub2RlCQkqaW5vZGUsCisJc2VjdG9yX3QJCWlibG9jaywKKwl1bnNpZ25lZCBsb25nCQltYXhfYmxvY2tzLAorCXN0cnVjdCBidWZmZXJfaGVhZAkqYmhfcmVzdWx0LAorCWludAkJCWNyZWF0ZSkKK3sKKwlyZXR1cm4gX194ZnNfZ2V0X2Jsb2NrKGlub2RlLCBpYmxvY2ssIG1heF9ibG9ja3MsIGJoX3Jlc3VsdCwKKwkJCQkJY3JlYXRlLCAxLCBCTUFQSV9XUklURXxCTUFQSV9ESVJFQ1QpOworfQorCitTVEFUSUMgdm9pZAoreGZzX2VuZF9pb19kaXJlY3QoCisJc3RydWN0IGtpb2NiCSppb2NiLAorCWxvZmZfdAkJb2Zmc2V0LAorCXNzaXplX3QJCXNpemUsCisJdm9pZAkJKnByaXZhdGUpCit7CisJeGZzX2lvZW5kX3QJKmlvZW5kID0gaW9jYi0+cHJpdmF0ZTsKKworCS8qCisJICogTm9uLU5VTEwgcHJpdmF0ZSBkYXRhIG1lYW5zIHdlIG5lZWQgdG8gaXNzdWUgYSB0cmFuc2FjdGlvbiB0bworCSAqIGNvbnZlcnQgYSByYW5nZSBmcm9tIHVud3JpdHRlbiB0byB3cml0dGVuIGV4dGVudHMuICBUaGlzIG5lZWRzCisJICogdG8gaGFwcGVuIGZyb20gcHJvY2VzcyBjb250ZWN0IGJ1dCBhaW8rZGlvIEkvTyBjb21wbGV0aW9uCisJICogaGFwcGVucyBmcm9tIGlycSBjb250ZXh0IHNvIHdlIG5lZWQgdG8gZGVmZXIgaXQgdG8gYSB3b3JrcXVldWUuCisJICogVGhpcyBpcyBub3QgbmVzc2VjYXJ5IGZvciBzeW5jaHJvbm91cyBkaXJlY3QgSS9PLCBidXQgd2UgZG8KKwkgKiBpdCBhbnl3YXkgdG8ga2VlcCB0aGUgY29kZSB1bmlmb3JtIGFuZCBzaW1wbGVyLgorCSAqCisJICogVGhlIGNvcmUgZGlyZWN0IEkvTyBjb2RlIG1pZ2h0IGJlIGNoYW5nZWQgdG8gYWx3YXlzIGNhbGwgdGhlCisJICogY29tcGxldGlvbiBoYW5kbGVyIGluIHRoZSBmdXR1cmUsIGluIHdoaWNoIGNhc2UgYWxsIHRoaXMgY2FuCisJICogZ28gYXdheS4KKwkgKi8KKwlpZiAocHJpdmF0ZSAmJiBzaXplID4gMCkgeworCQlpb2VuZC0+aW9fb2Zmc2V0ID0gb2Zmc2V0OworCQlpb2VuZC0+aW9fc2l6ZSA9IHNpemU7CisJCXhmc19maW5pc2hfaW9lbmQoaW9lbmQpOworCX0gZWxzZSB7CisJCUFTU0VSVChzaXplID49IDApOworCQl4ZnNfZGVzdHJveV9pb2VuZChpb2VuZCk7CisJfQorCisJLyoKKwkgKiBibG9ja2Rldl9kaXJlY3RfSU8gY2FuIHJldHVybiBhbiBlcnJvciBldmVuIGFmZXIgdGhlIEkvTworCSAqIGNvbXBsZXRpb24gaGFuZGxlciB3YXMgY2FsbGVkLiAgVGh1cyB3ZSBuZWVkIHRvIHByb3RlY3QKKwkgKiBhZ2FpbnN0IGRvdWJsZS1mcmVlaW5nLgorCSAqLworCWlvY2ItPnByaXZhdGUgPSBOVUxMOworfQorCitTVEFUSUMgc3NpemVfdAoreGZzX3ZtX2RpcmVjdF9JTygKKwlpbnQJCQlydywKKwlzdHJ1Y3Qga2lvY2IJCSppb2NiLAorCWNvbnN0IHN0cnVjdCBpb3ZlYwkqaW92LAorCWxvZmZfdAkJCW9mZnNldCwKKwl1bnNpZ25lZCBsb25nCQlucl9zZWdzKQoreworCXN0cnVjdCBmaWxlCSpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOworCXhmc19pb21hcF90CWlvbWFwOworCWludAkJbWFwcyA9IDE7CisJaW50CQllcnJvcjsKKwlzc2l6ZV90CQlyZXQ7CisKKwlWT1BfQk1BUCh2cCwgb2Zmc2V0LCAwLCBCTUFQSV9ERVZJQ0UsICZpb21hcCwgJm1hcHMsIGVycm9yKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAtZXJyb3I7CisKKwlpb2NiLT5wcml2YXRlID0geGZzX2FsbG9jX2lvZW5kKGlub2RlLCBJT01BUF9VTldSSVRURU4pOworCisJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX293bl9sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwKKwkJaW9tYXAuaW9tYXBfdGFyZ2V0LT5idF9iZGV2LAorCQlpb3YsIG9mZnNldCwgbnJfc2VncywKKwkJeGZzX2dldF9ibG9ja3NfZGlyZWN0LAorCQl4ZnNfZW5kX2lvX2RpcmVjdCk7CisKKwlpZiAodW5saWtlbHkocmV0IDw9IDAgJiYgaW9jYi0+cHJpdmF0ZSkpCisJCXhmc19kZXN0cm95X2lvZW5kKGlvY2ItPnByaXZhdGUpOworCXJldHVybiByZXQ7Cit9CisKK1NUQVRJQyBpbnQKK3hmc192bV9wcmVwYXJlX3dyaXRlKAogCXN0cnVjdCBmaWxlCQkqZmlsZSwKIAlzdHJ1Y3QgcGFnZQkJKnBhZ2UsCiAJdW5zaWduZWQgaW50CQlmcm9tLAogCXVuc2lnbmVkIGludAkJdG8pCiB7Ci0JcmV0dXJuIGJsb2NrX3ByZXBhcmVfd3JpdGUocGFnZSwgZnJvbSwgdG8sIGxpbnZmc19nZXRfYmxvY2spOworCXJldHVybiBibG9ja19wcmVwYXJlX3dyaXRlKHBhZ2UsIGZyb20sIHRvLCB4ZnNfZ2V0X2Jsb2NrKTsKIH0KIAotc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBsaW52ZnNfYW9wcyA9IHsKLQkucmVhZHBhZ2UJCT0gbGludmZzX3JlYWRwYWdlLAotCS5yZWFkcGFnZXMJCT0gbGludmZzX3JlYWRwYWdlcywKLQkud3JpdGVwYWdlCQk9IGxpbnZmc193cml0ZXBhZ2UsCitTVEFUSUMgc2VjdG9yX3QKK3hmc192bV9ibWFwKAorCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nLAorCXNlY3Rvcl90CQlibG9jaykKK3sKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IChzdHJ1Y3QgaW5vZGUgKiltYXBwaW5nLT5ob3N0OworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKKwlpbnQJCQllcnJvcjsKKworCXZuX3RyYWNlX2VudHJ5KHZwLCBfX0ZVTkNUSU9OX18sIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKKworCVZPUF9SV0xPQ0sodnAsIFZSV0xPQ0tfUkVBRCk7CisJVk9QX0ZMVVNIX1BBR0VTKHZwLCAoeGZzX29mZl90KTAsIC0xLCAwLCBGSV9SRU1BUEYsIGVycm9yKTsKKwlWT1BfUldVTkxPQ0sodnAsIFZSV0xPQ0tfUkVBRCk7CisJcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLCBibG9jaywgeGZzX2dldF9ibG9jayk7Cit9CisKK1NUQVRJQyBpbnQKK3hmc192bV9yZWFkcGFnZSgKKwlzdHJ1Y3QgZmlsZQkJKnVudXNlZCwKKwlzdHJ1Y3QgcGFnZQkJKnBhZ2UpCit7CisJcmV0dXJuIG1wYWdlX3JlYWRwYWdlKHBhZ2UsIHhmc19nZXRfYmxvY2spOworfQorCitTVEFUSUMgaW50Cit4ZnNfdm1fcmVhZHBhZ2VzKAorCXN0cnVjdCBmaWxlCQkqdW51c2VkLAorCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nLAorCXN0cnVjdCBsaXN0X2hlYWQJKnBhZ2VzLAorCXVuc2lnbmVkCQlucl9wYWdlcykKK3sKKwlyZXR1cm4gbXBhZ2VfcmVhZHBhZ2VzKG1hcHBpbmcsIHBhZ2VzLCBucl9wYWdlcywgeGZzX2dldF9ibG9jayk7Cit9CisKK1NUQVRJQyBpbnQKK3hmc192bV9pbnZhbGlkYXRlcGFnZSgKKwlzdHJ1Y3QgcGFnZQkJKnBhZ2UsCisJdW5zaWduZWQgbG9uZwkJb2Zmc2V0KQoreworCXhmc19wYWdlX3RyYWNlKFhGU19JTlZBTElEUEFHRV9FTlRFUiwKKwkJCXBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UsIG9mZnNldCk7CisJcmV0dXJuIGJsb2NrX2ludmFsaWRhdGVwYWdlKHBhZ2UsIG9mZnNldCk7Cit9CisKK3N0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgeGZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyA9IHsKKwkucmVhZHBhZ2UJCT0geGZzX3ZtX3JlYWRwYWdlLAorCS5yZWFkcGFnZXMJCT0geGZzX3ZtX3JlYWRwYWdlcywKKwkud3JpdGVwYWdlCQk9IHhmc192bV93cml0ZXBhZ2UsCiAJLnN5bmNfcGFnZQkJPSBibG9ja19zeW5jX3BhZ2UsCi0JLnJlbGVhc2VwYWdlCQk9IGxpbnZmc19yZWxlYXNlX3BhZ2UsCi0JLmludmFsaWRhdGVwYWdlCQk9IGxpbnZmc19pbnZhbGlkYXRlX3BhZ2UsCi0JLnByZXBhcmVfd3JpdGUJCT0gbGludmZzX3ByZXBhcmVfd3JpdGUsCisJLnJlbGVhc2VwYWdlCQk9IHhmc192bV9yZWxlYXNlcGFnZSwKKwkuaW52YWxpZGF0ZXBhZ2UJCT0geGZzX3ZtX2ludmFsaWRhdGVwYWdlLAorCS5wcmVwYXJlX3dyaXRlCQk9IHhmc192bV9wcmVwYXJlX3dyaXRlLAogCS5jb21taXRfd3JpdGUJCT0gZ2VuZXJpY19jb21taXRfd3JpdGUsCi0JLmJtYXAJCQk9IGxpbnZmc19ibWFwLAotCS5kaXJlY3RfSU8JCT0gbGludmZzX2RpcmVjdF9JTywKKwkuYm1hcAkJCT0geGZzX3ZtX2JtYXAsCisJLmRpcmVjdF9JTwkJPSB4ZnNfdm1fZGlyZWN0X0lPLAogCS5taWdyYXRlcGFnZQkJPSBidWZmZXJfbWlncmF0ZV9wYWdlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuaAppbmRleCA1NTMzOWRkLi43OTU2OTlmIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5oCkBAIC00MCw3ICs0MCw3IEBACiAJc3RydWN0IHdvcmtfc3RydWN0CWlvX3dvcms7CS8qIHhmc2RhdGFkIHdvcmsgcXVldWUgKi8KIH0geGZzX2lvZW5kX3Q7CiAKLWV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGxpbnZmc19hb3BzOwotZXh0ZXJuIGludCBsaW52ZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CitleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zOworZXh0ZXJuIGludCB4ZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiAKICNlbmRpZiAvKiBfX1hGU19JT1BTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYwppbmRleCBiZmI0ZjI5Li45ZmIwMzEyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgogI2luY2x1ZGUgInhmc19saW51eC5oIgogCiBTVEFUSUMga21lbV96b25lX3QgKnhmc19idWZfem9uZTsKQEAgLTE4MDUsMTMgKzE4MDYsMTIgQEAKIGludCBfX2luaXQKIHhmc19idWZfaW5pdCh2b2lkKQogewotCWludAkJZXJyb3IgPSAtRU5PTUVNOwotCiAjaWZkZWYgWEZTX0JVRl9UUkFDRQogCXhmc19idWZfdHJhY2VfYnVmID0ga3RyYWNlX2FsbG9jKFhGU19CVUZfVFJBQ0VfU0laRSwgS01fU0xFRVApOwogI2VuZGlmCiAKLQl4ZnNfYnVmX3pvbmUgPSBrbWVtX3pvbmVfaW5pdChzaXplb2YoeGZzX2J1Zl90KSwgInhmc19idWYiKTsKKwl4ZnNfYnVmX3pvbmUgPSBrbWVtX3pvbmVfaW5pdF9mbGFncyhzaXplb2YoeGZzX2J1Zl90KSwgInhmc19idWYiLAorCQkJCQkJS01fWk9ORV9IV0FMSUdOLCBOVUxMKTsKIAlpZiAoIXhmc19idWZfem9uZSkKIAkJZ290byBvdXRfZnJlZV90cmFjZV9idWY7CiAKQEAgLTE4MzksNyArMTgzOSw3IEBACiAjaWZkZWYgWEZTX0JVRl9UUkFDRQogCWt0cmFjZV9mcmVlKHhmc19idWZfdHJhY2VfYnVmKTsKICNlbmRpZgotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYwppbmRleCA4MGViMjQ5Li5iNzY4ZWE5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYwpAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgInhmc19tb3VudC5oIgogI2luY2x1ZGUgInhmc19leHBvcnQuaCIKIAorU1RBVElDIHN0cnVjdCBkZW50cnkgZG90ZG90ID0geyAuZF9uYW1lLm5hbWUgPSAiLi4iLCAuZF9uYW1lLmxlbiA9IDIsIH07CisKIC8qCiAgKiBYRlMgZW5jb2RlcyBhbmQgZGVjb2RlcyB0aGUgZmlsZWlkIHBvcnRpb24gb2YgTkZTIGZpbGVoYW5kbGVzCiAgKiBpdHNlbGYgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZSBnZW5lcmljIE5GUyBjb2RlIGRvIGl0LiAgVGhpcwpAQCAtMzcsNyArMzksNyBAQAogICovCiAKIFNUQVRJQyBzdHJ1Y3QgZGVudHJ5ICoKLWxpbnZmc19kZWNvZGVfZmgoCit4ZnNfZnNfZGVjb2RlX2ZoKAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCiAJX191MzIJCQkqZmgsCiAJaW50CQkJZmhfbGVuLApAQCAtNzgsMTIgKzgwLDEyIEBACiAJfQogCiAJZmggPSAoX191MzIgKikmaWZpZDsKLQlyZXR1cm4gZmluZF9leHBvcnRlZF9kZW50cnkoc2IsIGZoLCBwYXJlbnQsIGFjY2VwdGFibGUsIGNvbnRleHQpOworCXJldHVybiBzYi0+c19leHBvcnRfb3AtPmZpbmRfZXhwb3J0ZWRfZGVudHJ5KHNiLCBmaCwgcGFyZW50LCBhY2NlcHRhYmxlLCBjb250ZXh0KTsKIH0KIAogCiBTVEFUSUMgaW50Ci1saW52ZnNfZW5jb2RlX2ZoKAoreGZzX2ZzX2VuY29kZV9maCgKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5LAogCV9fdTMyCQkJKmZoLAogCWludAkJCSptYXhfbGVuLApAQCAtOTUsNyArOTcsNyBAQAogCWludAkJCWxlbjsKIAlpbnQJCQlpczY0ID0gMDsKICNpZiBYRlNfQklHX0lOVU1TCi0JdmZzX3QJCQkqdmZzID0gTElOVkZTX0dFVF9WRlMoaW5vZGUtPmlfc2IpOworCXZmc190CQkJKnZmcyA9IHZmc19mcm9tX3NiKGlub2RlLT5pX3NiKTsKIAogCWlmICghKHZmcy0+dmZzX2ZsYWcgJiBWRlNfMzJCSVRJTk9ERVMpKSB7CiAJCS8qIGZpbGVzeXN0ZW0gbWF5IGNvbnRhaW4gNjRiaXQgaW5vZGUgbnVtYmVycyAqLwpAQCAtMTMwLDIxICsxMzIsMjEgQEAKIH0KIAogU1RBVElDIHN0cnVjdCBkZW50cnkgKgotbGludmZzX2dldF9kZW50cnkoCit4ZnNfZnNfZ2V0X2RlbnRyeSgKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAogCXZvaWQJCQkqZGF0YSkKIHsKIAl2bm9kZV90CQkJKnZwOwogCXN0cnVjdCBpbm9kZQkJKmlub2RlOwogCXN0cnVjdCBkZW50cnkJCSpyZXN1bHQ7Ci0JdmZzX3QJCQkqdmZzcCA9IExJTlZGU19HRVRfVkZTKHNiKTsKKwl2ZnNfdAkJCSp2ZnNwID0gdmZzX2Zyb21fc2Ioc2IpOwogCWludAkJCWVycm9yOwogCiAJVkZTX1ZHRVQodmZzcCwgJnZwLCAoZmlkX3QgKilkYXRhLCBlcnJvcik7CiAJaWYgKGVycm9yIHx8IHZwID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpIDsKIAotCWlub2RlID0gTElOVkZTX0dFVF9JUCh2cCk7CisJaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAJcmVzdWx0ID0gZF9hbGxvY19hbm9uKGlub2RlKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKIAkJaXB1dChpbm9kZSk7CkBAIC0xNTQsMjUgKzE1NiwyMCBAQAogfQogCiBTVEFUSUMgc3RydWN0IGRlbnRyeSAqCi1saW52ZnNfZ2V0X3BhcmVudCgKK3hmc19mc19nZXRfcGFyZW50KAogCXN0cnVjdCBkZW50cnkJCSpjaGlsZCkKIHsKIAlpbnQJCQllcnJvcjsKIAl2bm9kZV90CQkJKnZwLCAqY3ZwOwogCXN0cnVjdCBkZW50cnkJCSpwYXJlbnQ7Ci0Jc3RydWN0IGRlbnRyeQkJZG90ZG90OwotCi0JZG90ZG90LmRfbmFtZS5uYW1lID0gIi4uIjsKLQlkb3Rkb3QuZF9uYW1lLmxlbiA9IDI7Ci0JZG90ZG90LmRfaW5vZGUgPSBOVUxMOwogCiAJY3ZwID0gTlVMTDsKLQl2cCA9IExJTlZGU19HRVRfVlAoY2hpbGQtPmRfaW5vZGUpOworCXZwID0gdm5fZnJvbV9pbm9kZShjaGlsZC0+ZF9pbm9kZSk7CiAJVk9QX0xPT0tVUCh2cCwgJmRvdGRvdCwgJmN2cCwgMCwgTlVMTCwgTlVMTCwgZXJyb3IpOwogCWlmICh1bmxpa2VseShlcnJvcikpCiAJCXJldHVybiBFUlJfUFRSKC1lcnJvcik7CiAKLQlwYXJlbnQgPSBkX2FsbG9jX2Fub24oTElOVkZTX0dFVF9JUChjdnApKTsKKwlwYXJlbnQgPSBkX2FsbG9jX2Fub24odm5fdG9faW5vZGUoY3ZwKSk7CiAJaWYgKHVubGlrZWx5KCFwYXJlbnQpKSB7CiAJCVZOX1JFTEUoY3ZwKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CkBAIC0xODAsOSArMTc3LDkgQEAKIAlyZXR1cm4gcGFyZW50OwogfQogCi1zdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgbGludmZzX2V4cG9ydF9vcHMgPSB7Ci0JLmRlY29kZV9maAkJPSBsaW52ZnNfZGVjb2RlX2ZoLAotCS5lbmNvZGVfZmgJCT0gbGludmZzX2VuY29kZV9maCwKLQkuZ2V0X3BhcmVudAkJPSBsaW52ZnNfZ2V0X3BhcmVudCwKLQkuZ2V0X2RlbnRyeQkJPSBsaW52ZnNfZ2V0X2RlbnRyeSwKK3N0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyB4ZnNfZXhwb3J0X29wZXJhdGlvbnMgPSB7CisJLmRlY29kZV9maAkJPSB4ZnNfZnNfZGVjb2RlX2ZoLAorCS5lbmNvZGVfZmgJCT0geGZzX2ZzX2VuY29kZV9maCwKKwkuZ2V0X3BhcmVudAkJPSB4ZnNfZnNfZ2V0X3BhcmVudCwKKwkuZ2V0X2RlbnRyeQkJPSB4ZnNfZnNfZ2V0X2RlbnRyeSwKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKaW5kZXggY2VkNDQwNC4uMTg1NTY3YSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwpAQCAtNDMsMTMgKzQzLDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBsaW52ZnNfZmlsZV92bV9vcHM7CitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wczsKICNpZmRlZiBDT05GSUdfWEZTX0RNQVBJCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGxpbnZmc19kbWFwaV9maWxlX3ZtX29wczsKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2RtYXBpX2ZpbGVfdm1fb3BzOwogI2VuZGlmCiAKIFNUQVRJQyBpbmxpbmUgc3NpemVfdAotX19saW52ZnNfcmVhZCgKK19feGZzX2ZpbGVfcmVhZCgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLAogCWNoYXIJCQlfX3VzZXIgKmJ1ZiwKIAlpbnQJCQlpb2ZsYWdzLApAQCAtNTgsNyArNTgsNyBAQAogewogCXN0cnVjdCBpb3ZlYwkJaW92ID0ge2J1ZiwgY291bnR9OwogCXN0cnVjdCBmaWxlCQkqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0Jdm5vZGVfdAkJCSp2cCA9IExJTlZGU19HRVRfVlAoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzc2l6ZV90CQkJcnZhbDsKIAogCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKQEAgLTcxLDI4ICs3MSwyOCBAQAogCiAKIFNUQVRJQyBzc2l6ZV90Ci1saW52ZnNfYWlvX3JlYWQoCit4ZnNfZmlsZV9haW9fcmVhZCgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLAogCWNoYXIJCQlfX3VzZXIgKmJ1ZiwKIAlzaXplX3QJCQljb3VudCwKIAlsb2ZmX3QJCQlwb3MpCiB7Ci0JcmV0dXJuIF9fbGludmZzX3JlYWQoaW9jYiwgYnVmLCBJT19JU0FJTywgY291bnQsIHBvcyk7CisJcmV0dXJuIF9feGZzX2ZpbGVfcmVhZChpb2NiLCBidWYsIElPX0lTQUlPLCBjb3VudCwgcG9zKTsKIH0KIAogU1RBVElDIHNzaXplX3QKLWxpbnZmc19haW9fcmVhZF9pbnZpcygKK3hmc19maWxlX2Fpb19yZWFkX2ludmlzKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCiAJY2hhcgkJCV9fdXNlciAqYnVmLAogCXNpemVfdAkJCWNvdW50LAogCWxvZmZfdAkJCXBvcykKIHsKLQlyZXR1cm4gX19saW52ZnNfcmVhZChpb2NiLCBidWYsIElPX0lTQUlPfElPX0lOVklTLCBjb3VudCwgcG9zKTsKKwlyZXR1cm4gX194ZnNfZmlsZV9yZWFkKGlvY2IsIGJ1ZiwgSU9fSVNBSU98SU9fSU5WSVMsIGNvdW50LCBwb3MpOwogfQogCiAKIFNUQVRJQyBpbmxpbmUgc3NpemVfdAotX19saW52ZnNfd3JpdGUoCitfX3hmc19maWxlX3dyaXRlKAogCXN0cnVjdCBraW9jYgkqaW9jYiwKIAljb25zdCBjaGFyCV9fdXNlciAqYnVmLAogCWludAkJaW9mbGFncywKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXN0cnVjdCBpb3ZlYwlpb3YgPSB7KHZvaWQgX191c2VyICopYnVmLCBjb3VudH07CiAJc3RydWN0IGZpbGUJKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0Jdm5vZGVfdAkJKnZwID0gTElOVkZTX0dFVF9WUChpbm9kZSk7CisJdm5vZGVfdAkJKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CiAJc3NpemVfdAkJcnZhbDsKIAogCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKQEAgLTExNSwyOCArMTE1LDI4IEBACiAKIAogU1RBVElDIHNzaXplX3QKLWxpbnZmc19haW9fd3JpdGUoCit4ZnNfZmlsZV9haW9fd3JpdGUoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKIAljb25zdCBjaGFyCQlfX3VzZXIgKmJ1ZiwKIAlzaXplX3QJCQljb3VudCwKIAlsb2ZmX3QJCQlwb3MpCiB7Ci0JcmV0dXJuIF9fbGludmZzX3dyaXRlKGlvY2IsIGJ1ZiwgSU9fSVNBSU8sIGNvdW50LCBwb3MpOworCXJldHVybiBfX3hmc19maWxlX3dyaXRlKGlvY2IsIGJ1ZiwgSU9fSVNBSU8sIGNvdW50LCBwb3MpOwogfQogCiBTVEFUSUMgc3NpemVfdAotbGludmZzX2Fpb193cml0ZV9pbnZpcygKK3hmc19maWxlX2Fpb193cml0ZV9pbnZpcygKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLAogCWNvbnN0IGNoYXIJCV9fdXNlciAqYnVmLAogCXNpemVfdAkJCWNvdW50LAogCWxvZmZfdAkJCXBvcykKIHsKLQlyZXR1cm4gX19saW52ZnNfd3JpdGUoaW9jYiwgYnVmLCBJT19JU0FJT3xJT19JTlZJUywgY291bnQsIHBvcyk7CisJcmV0dXJuIF9feGZzX2ZpbGVfd3JpdGUoaW9jYiwgYnVmLCBJT19JU0FJT3xJT19JTlZJUywgY291bnQsIHBvcyk7CiB9CiAKIAogU1RBVElDIGlubGluZSBzc2l6ZV90Ci1fX2xpbnZmc19yZWFkdigKK19feGZzX2ZpbGVfcmVhZHYoCiAJc3RydWN0IGZpbGUJCSpmaWxlLAogCWNvbnN0IHN0cnVjdCBpb3ZlYyAJKmlvdiwKIAlpbnQJCQlpb2ZsYWdzLApAQCAtMTQ0LDggKzE0NCw4IEBACiAJbG9mZl90CQkJKnBwb3MpCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKLQl2bm9kZV90CQkqdnAgPSBMSU5WRlNfR0VUX1ZQKGlub2RlKTsKLQlzdHJ1Y3QJCWtpb2NiIGtpb2NiOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOworCXN0cnVjdCBraW9jYglraW9jYjsKIAlzc2l6ZV90CQlydmFsOwogCiAJaW5pdF9zeW5jX2tpb2NiKCZraW9jYiwgZmlsZSk7CkBAIC0xNjAsMjggKzE2MCwyOCBAQAogfQogCiBTVEFUSUMgc3NpemVfdAotbGludmZzX3JlYWR2KAoreGZzX2ZpbGVfcmVhZHYoCiAJc3RydWN0IGZpbGUJCSpmaWxlLAogCWNvbnN0IHN0cnVjdCBpb3ZlYyAJKmlvdiwKIAl1bnNpZ25lZCBsb25nCQlucl9zZWdzLAogCWxvZmZfdAkJCSpwcG9zKQogewotCXJldHVybiBfX2xpbnZmc19yZWFkdihmaWxlLCBpb3YsIDAsIG5yX3NlZ3MsIHBwb3MpOworCXJldHVybiBfX3hmc19maWxlX3JlYWR2KGZpbGUsIGlvdiwgMCwgbnJfc2VncywgcHBvcyk7CiB9CiAKIFNUQVRJQyBzc2l6ZV90Ci1saW52ZnNfcmVhZHZfaW52aXMoCit4ZnNfZmlsZV9yZWFkdl9pbnZpcygKIAlzdHJ1Y3QgZmlsZQkJKmZpbGUsCiAJY29uc3Qgc3RydWN0IGlvdmVjIAkqaW92LAogCXVuc2lnbmVkIGxvbmcJCW5yX3NlZ3MsCiAJbG9mZl90CQkJKnBwb3MpCiB7Ci0JcmV0dXJuIF9fbGludmZzX3JlYWR2KGZpbGUsIGlvdiwgSU9fSU5WSVMsIG5yX3NlZ3MsIHBwb3MpOworCXJldHVybiBfX3hmc19maWxlX3JlYWR2KGZpbGUsIGlvdiwgSU9fSU5WSVMsIG5yX3NlZ3MsIHBwb3MpOwogfQogCiAKIFNUQVRJQyBpbmxpbmUgc3NpemVfdAotX19saW52ZnNfd3JpdGV2KAorX194ZnNfZmlsZV93cml0ZXYoCiAJc3RydWN0IGZpbGUJCSpmaWxlLAogCWNvbnN0IHN0cnVjdCBpb3ZlYyAJKmlvdiwKIAlpbnQJCQlpb2ZsYWdzLApAQCAtMTg5LDggKzE4OSw4IEBACiAJbG9mZl90CQkJKnBwb3MpCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKLQl2bm9kZV90CQkqdnAgPSBMSU5WRlNfR0VUX1ZQKGlub2RlKTsKLQlzdHJ1Y3QJCWtpb2NiIGtpb2NiOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOworCXN0cnVjdCBraW9jYglraW9jYjsKIAlzc2l6ZV90CQlydmFsOwogCiAJaW5pdF9zeW5jX2tpb2NiKCZraW9jYiwgZmlsZSk7CkBAIC0yMDYsMzQgKzIwNiwzNCBAQAogCiAKIFNUQVRJQyBzc2l6ZV90Ci1saW52ZnNfd3JpdGV2KAoreGZzX2ZpbGVfd3JpdGV2KAogCXN0cnVjdCBmaWxlCQkqZmlsZSwKIAljb25zdCBzdHJ1Y3QgaW92ZWMgCSppb3YsCiAJdW5zaWduZWQgbG9uZwkJbnJfc2VncywKIAlsb2ZmX3QJCQkqcHBvcykKIHsKLQlyZXR1cm4gX19saW52ZnNfd3JpdGV2KGZpbGUsIGlvdiwgMCwgbnJfc2VncywgcHBvcyk7CisJcmV0dXJuIF9feGZzX2ZpbGVfd3JpdGV2KGZpbGUsIGlvdiwgMCwgbnJfc2VncywgcHBvcyk7CiB9CiAKIFNUQVRJQyBzc2l6ZV90Ci1saW52ZnNfd3JpdGV2X2ludmlzKAoreGZzX2ZpbGVfd3JpdGV2X2ludmlzKAogCXN0cnVjdCBmaWxlCQkqZmlsZSwKIAljb25zdCBzdHJ1Y3QgaW92ZWMgCSppb3YsCiAJdW5zaWduZWQgbG9uZwkJbnJfc2VncywKIAlsb2ZmX3QJCQkqcHBvcykKIHsKLQlyZXR1cm4gX19saW52ZnNfd3JpdGV2KGZpbGUsIGlvdiwgSU9fSU5WSVMsIG5yX3NlZ3MsIHBwb3MpOworCXJldHVybiBfX3hmc19maWxlX3dyaXRldihmaWxlLCBpb3YsIElPX0lOVklTLCBucl9zZWdzLCBwcG9zKTsKIH0KIAogU1RBVElDIHNzaXplX3QKLWxpbnZmc19zZW5kZmlsZSgKK3hmc19maWxlX3NlbmRmaWxlKAogCXN0cnVjdCBmaWxlCQkqZmlscCwKIAlsb2ZmX3QJCQkqcHBvcywKIAlzaXplX3QJCQljb3VudCwKIAlyZWFkX2FjdG9yX3QJCWFjdG9yLAogCXZvaWQJCQkqdGFyZ2V0KQogewotCXZub2RlX3QJCQkqdnAgPSBMSU5WRlNfR0VUX1ZQKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl2bm9kZV90CQkJKnZwID0gdm5fZnJvbV9pbm9kZShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3NpemVfdAkJCXJ2YWw7CiAKIAlWT1BfU0VOREZJTEUodnAsIGZpbHAsIHBwb3MsIDAsIGNvdW50LCBhY3RvciwgdGFyZ2V0LCBOVUxMLCBydmFsKTsKQEAgLTI0MiwxMSArMjQyLDExIEBACiAKIAogU1RBVElDIGludAotbGludmZzX29wZW4oCit4ZnNfZmlsZV9vcGVuKAogCXN0cnVjdCBpbm9kZQkqaW5vZGUsCiAJc3RydWN0IGZpbGUJKmZpbHApCiB7Ci0Jdm5vZGVfdAkJKnZwID0gTElOVkZTX0dFVF9WUChpbm9kZSk7CisJdm5vZGVfdAkJKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CiAJaW50CQllcnJvcjsKIAogCWlmICghKGZpbHAtPmZfZmxhZ3MgJiBPX0xBUkdFRklMRSkgJiYgaV9zaXplX3JlYWQoaW5vZGUpID4gTUFYX05PTl9MRlMpCkBAIC0yNTksMTEgKzI1OSwxMSBAQAogCiAKIFNUQVRJQyBpbnQKLWxpbnZmc19yZWxlYXNlKAoreGZzX2ZpbGVfcmVsZWFzZSgKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlLAogCXN0cnVjdCBmaWxlCSpmaWxwKQogewotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwogCWludAkJZXJyb3IgPSAwOwogCiAJaWYgKHZwKQpAQCAtMjczLDEzICsyNzMsMTMgQEAKIAogCiBTVEFUSUMgaW50Ci1saW52ZnNfZnN5bmMoCit4ZnNfZmlsZV9mc3luYygKIAlzdHJ1Y3QgZmlsZQkqZmlscCwKIAlzdHJ1Y3QgZGVudHJ5CSpkZW50cnksCiAJaW50CQlkYXRhc3luYykKIHsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwogCWludAkJZXJyb3I7CiAJaW50CQlmbGFncyA9IEZTWU5DX1dBSVQ7CiAKQEAgLTI5Miw3ICsyOTIsNyBAQAogfQogCiAvKgotICogbGludmZzX3JlYWRkaXIgbWFwcyB0byBWT1BfUkVBRERJUigpLgorICogeGZzX2ZpbGVfcmVhZGRpciBtYXBzIHRvIFZPUF9SRUFERElSKCkuCiAgKiBXZSBuZWVkIHRvIGJ1aWxkIGEgdWlvLCBjcmVkLCAuLi4KICAqLwogCkBAIC0zMDEsMTMgKzMwMSwxMyBAQAogI2lmZGVmIENPTkZJR19YRlNfRE1BUEkKIAogU1RBVElDIHN0cnVjdCBwYWdlICoKLWxpbnZmc19maWxlbWFwX25vcGFnZSgKK3hmc192bV9ub3BhZ2UoCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0CSphcmVhLAogCXVuc2lnbmVkIGxvbmcJCWFkZHJlc3MsCiAJaW50CQkJKnR5cGUpCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGFyZWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwogCXhmc19tb3VudF90CSptcCA9IFhGU19WRlNUT00odnAtPnZfdmZzcCk7CiAJaW50CQllcnJvcjsKIApAQCAtMzI0LDcgKzMyNCw3IEBACiAKIAogU1RBVElDIGludAotbGludmZzX3JlYWRkaXIoCit4ZnNfZmlsZV9yZWFkZGlyKAogCXN0cnVjdCBmaWxlCSpmaWxwLAogCXZvaWQJCSpkaXJlbnQsCiAJZmlsbGRpcl90CWZpbGxkaXIpCkBAIC0zNDAsNyArMzQwLDcgQEAKIAl4ZnNfb2ZmX3QJc3RhcnRfb2Zmc2V0LCBjdXJyX29mZnNldDsKIAl4ZnNfZGlyZW50X3QJKmRicCA9IE5VTEw7CiAKLQl2cCA9IExJTlZGU19HRVRfVlAoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOworCXZwID0gdm5fZnJvbV9pbm9kZShmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJQVNTRVJUKHZwKTsKIAogCS8qIFRyeSBmYWlybHkgaGFyZCB0byBnZXQgbWVtb3J5ICovCkBAIC00MDQsMzkgKzQwNCw0MCBAQAogCiAKIFNUQVRJQyBpbnQKLWxpbnZmc19maWxlX21tYXAoCit4ZnNfZmlsZV9tbWFwKAogCXN0cnVjdCBmaWxlCSpmaWxwLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBpbm9kZQkqaXAgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQl2bm9kZV90CQkqdnAgPSBMSU5WRlNfR0VUX1ZQKGlwKTsKLQl2YXR0cl90CQl2YSA9IHsgLnZhX21hc2sgPSBYRlNfQVRfVVBEQVRJTUUgfTsKKwl2bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKGlwKTsKKwl2YXR0cl90CQl2YXR0cjsKIAlpbnQJCWVycm9yOwogCi0Jdm1hLT52bV9vcHMgPSAmbGludmZzX2ZpbGVfdm1fb3BzOworCXZtYS0+dm1fb3BzID0gJnhmc19maWxlX3ZtX29wczsKIAogI2lmZGVmIENPTkZJR19YRlNfRE1BUEkKIAlpZiAodnAtPnZfdmZzcC0+dmZzX2ZsYWcgJiBWRlNfRE1JKSB7Ci0JCXZtYS0+dm1fb3BzID0gJmxpbnZmc19kbWFwaV9maWxlX3ZtX29wczsKKwkJdm1hLT52bV9vcHMgPSAmeGZzX2RtYXBpX2ZpbGVfdm1fb3BzOwogCX0KICNlbmRpZiAvKiBDT05GSUdfWEZTX0RNQVBJICovCiAKLQlWT1BfU0VUQVRUUih2cCwgJnZhLCBYRlNfQVRfVVBEQVRJTUUsIE5VTEwsIGVycm9yKTsKLQlpZiAoIWVycm9yKQotCQl2bl9yZXZhbGlkYXRlKHZwKTsJLyogdXBkYXRlIExpbnV4IGlub2RlIGZsYWdzICovCisJdmF0dHIudmFfbWFzayA9IFhGU19BVF9VUERBVElNRTsKKwlWT1BfU0VUQVRUUih2cCwgJnZhdHRyLCBYRlNfQVRfVVBEQVRJTUUsIE5VTEwsIGVycm9yKTsKKwlpZiAobGlrZWx5KCFlcnJvcikpCisJCV9fdm5fcmV2YWxpZGF0ZSh2cCwgJnZhdHRyKTsJLyogdXBkYXRlIGZsYWdzICovCiAJcmV0dXJuIDA7CiB9CiAKIAogU1RBVElDIGxvbmcKLWxpbnZmc19pb2N0bCgKK3hmc19maWxlX2lvY3RsKAogCXN0cnVjdCBmaWxlCSpmaWxwLAogCXVuc2lnbmVkIGludAljbWQsCiAJdW5zaWduZWQgbG9uZwlhcmcpCiB7CiAJaW50CQllcnJvcjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7Ci0Jdm5vZGVfdAkJKnZwID0gTElOVkZTX0dFVF9WUChpbm9kZSk7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwogCiAJVk9QX0lPQ1RMKHZwLCBpbm9kZSwgZmlscCwgMCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcsIGVycm9yKTsKIAlWTU9ESUZZKHZwKTsKQEAgLTQ1MSwxNCArNDUyLDE0IEBACiB9CiAKIFNUQVRJQyBsb25nCi1saW52ZnNfaW9jdGxfaW52aXMoCit4ZnNfZmlsZV9pb2N0bF9pbnZpcygKIAlzdHJ1Y3QgZmlsZQkqZmlscCwKIAl1bnNpZ25lZCBpbnQJY21kLAogCXVuc2lnbmVkIGxvbmcJYXJnKQogewogCWludAkJZXJyb3I7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwl2bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKIAogCUFTU0VSVCh2cCk7CiAJVk9QX0lPQ1RMKHZwLCBpbm9kZSwgZmlscCwgSU9fSU5WSVMsIGNtZCwgKHZvaWQgX191c2VyICopYXJnLCBlcnJvcik7CkBAIC00NzYsMTEgKzQ3NywxMSBAQAogI2lmZGVmIENPTkZJR19YRlNfRE1BUEkKICNpZmRlZiBIQVZFX1ZNT1BfTVBST1RFQ1QKIFNUQVRJQyBpbnQKLWxpbnZmc19tcHJvdGVjdCgKK3hmc192bV9tcHJvdGVjdCgKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAl1bnNpZ25lZCBpbnQJbmV3ZmxhZ3MpCiB7Ci0Jdm5vZGVfdAkJKnZwID0gTElOVkZTX0dFVF9WUCh2bWEtPnZtX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl2bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCWludAkJZXJyb3IgPSAwOwogCiAJaWYgKHZwLT52X3Zmc3AtPnZmc19mbGFnICYgVkZTX0RNSSkgewpAQCAtNTAzLDEwICs1MDQsMTAgQEAKICAqIGl0IGJhY2sgb25saW5lLgogICovCiBTVEFUSUMgaW50Ci1saW52ZnNfb3Blbl9leGVjKAoreGZzX2ZpbGVfb3Blbl9leGVjKAogCXN0cnVjdCBpbm9kZQkqaW5vZGUpCiB7Ci0Jdm5vZGVfdAkJKnZwID0gTElOVkZTX0dFVF9WUChpbm9kZSk7CisJdm5vZGVfdAkJKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CiAJeGZzX21vdW50X3QJKm1wID0gWEZTX1ZGU1RPTSh2cC0+dl92ZnNwKTsKIAlpbnQJCWVycm9yID0gMDsKIAl4ZnNfaW5vZGVfdAkqaXA7CkBAIC01MjcsNjkgKzUyOCw2OSBAQAogfQogI2VuZGlmIC8qIEhBVkVfRk9QX09QRU5fRVhFQyAqLwogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxpbnZmc19maWxlX29wZXJhdGlvbnMgPSB7CitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKLQkucmVhZHYJCT0gbGludmZzX3JlYWR2LAotCS53cml0ZXYJCT0gbGludmZzX3dyaXRldiwKLQkuYWlvX3JlYWQJPSBsaW52ZnNfYWlvX3JlYWQsCi0JLmFpb193cml0ZQk9IGxpbnZmc19haW9fd3JpdGUsCi0JLnNlbmRmaWxlCT0gbGludmZzX3NlbmRmaWxlLAotCS51bmxvY2tlZF9pb2N0bAk9IGxpbnZmc19pb2N0bCwKKwkucmVhZHYJCT0geGZzX2ZpbGVfcmVhZHYsCisJLndyaXRldgkJPSB4ZnNfZmlsZV93cml0ZXYsCisJLmFpb19yZWFkCT0geGZzX2ZpbGVfYWlvX3JlYWQsCisJLmFpb193cml0ZQk9IHhmc19maWxlX2Fpb193cml0ZSwKKwkuc2VuZGZpbGUJPSB4ZnNfZmlsZV9zZW5kZmlsZSwKKwkudW5sb2NrZWRfaW9jdGwJPSB4ZnNfZmlsZV9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JLmNvbXBhdF9pb2N0bAk9IGxpbnZmc19jb21wYXRfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHhmc19maWxlX2NvbXBhdF9pb2N0bCwKICNlbmRpZgotCS5tbWFwCQk9IGxpbnZmc19maWxlX21tYXAsCi0JLm9wZW4JCT0gbGludmZzX29wZW4sCi0JLnJlbGVhc2UJPSBsaW52ZnNfcmVsZWFzZSwKLQkuZnN5bmMJCT0gbGludmZzX2ZzeW5jLAorCS5tbWFwCQk9IHhmc19maWxlX21tYXAsCisJLm9wZW4JCT0geGZzX2ZpbGVfb3BlbiwKKwkucmVsZWFzZQk9IHhmc19maWxlX3JlbGVhc2UsCisJLmZzeW5jCQk9IHhmc19maWxlX2ZzeW5jLAogI2lmZGVmIEhBVkVfRk9QX09QRU5fRVhFQwotCS5vcGVuX2V4ZWMJPSBsaW52ZnNfb3Blbl9leGVjLAorCS5vcGVuX2V4ZWMJPSB4ZnNfZmlsZV9vcGVuX2V4ZWMsCiAjZW5kaWYKIH07CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGludmZzX2ludmlzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX2ludmlzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAotCS5yZWFkdgkJPSBsaW52ZnNfcmVhZHZfaW52aXMsCi0JLndyaXRldgkJPSBsaW52ZnNfd3JpdGV2X2ludmlzLAotCS5haW9fcmVhZAk9IGxpbnZmc19haW9fcmVhZF9pbnZpcywKLQkuYWlvX3dyaXRlCT0gbGludmZzX2Fpb193cml0ZV9pbnZpcywKLQkuc2VuZGZpbGUJPSBsaW52ZnNfc2VuZGZpbGUsCi0JLnVubG9ja2VkX2lvY3RsCT0gbGludmZzX2lvY3RsX2ludmlzLAorCS5yZWFkdgkJPSB4ZnNfZmlsZV9yZWFkdl9pbnZpcywKKwkud3JpdGV2CQk9IHhmc19maWxlX3dyaXRldl9pbnZpcywKKwkuYWlvX3JlYWQJPSB4ZnNfZmlsZV9haW9fcmVhZF9pbnZpcywKKwkuYWlvX3dyaXRlCT0geGZzX2ZpbGVfYWlvX3dyaXRlX2ludmlzLAorCS5zZW5kZmlsZQk9IHhmc19maWxlX3NlbmRmaWxlLAorCS51bmxvY2tlZF9pb2N0bAk9IHhmc19maWxlX2lvY3RsX2ludmlzLAogI2lmZGVmIENPTkZJR19DT01QQVQKLQkuY29tcGF0X2lvY3RsCT0gbGludmZzX2NvbXBhdF9pbnZpc19pb2N0bCwKKwkuY29tcGF0X2lvY3RsCT0geGZzX2ZpbGVfY29tcGF0X2ludmlzX2lvY3RsLAogI2VuZGlmCi0JLm1tYXAJCT0gbGludmZzX2ZpbGVfbW1hcCwKLQkub3BlbgkJPSBsaW52ZnNfb3BlbiwKLQkucmVsZWFzZQk9IGxpbnZmc19yZWxlYXNlLAotCS5mc3luYwkJPSBsaW52ZnNfZnN5bmMsCisJLm1tYXAJCT0geGZzX2ZpbGVfbW1hcCwKKwkub3BlbgkJPSB4ZnNfZmlsZV9vcGVuLAorCS5yZWxlYXNlCT0geGZzX2ZpbGVfcmVsZWFzZSwKKwkuZnN5bmMJCT0geGZzX2ZpbGVfZnN5bmMsCiB9OwogCiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGludmZzX2Rpcl9vcGVyYXRpb25zID0geworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfZGlyX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAotCS5yZWFkZGlyCT0gbGludmZzX3JlYWRkaXIsCi0JLnVubG9ja2VkX2lvY3RsCT0gbGludmZzX2lvY3RsLAorCS5yZWFkZGlyCT0geGZzX2ZpbGVfcmVhZGRpciwKKwkudW5sb2NrZWRfaW9jdGwJPSB4ZnNfZmlsZV9pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JLmNvbXBhdF9pb2N0bAk9IGxpbnZmc19jb21wYXRfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IHhmc19maWxlX2NvbXBhdF9pb2N0bCwKICNlbmRpZgotCS5mc3luYwkJPSBsaW52ZnNfZnN5bmMsCisJLmZzeW5jCQk9IHhmc19maWxlX2ZzeW5jLAogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBsaW52ZnNfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcyA9IHsKIAkubm9wYWdlCQk9IGZpbGVtYXBfbm9wYWdlLAogCS5wb3B1bGF0ZQk9IGZpbGVtYXBfcG9wdWxhdGUsCiB9OwogCiAjaWZkZWYgQ09ORklHX1hGU19ETUFQSQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBsaW52ZnNfZG1hcGlfZmlsZV92bV9vcHMgPSB7Ci0JLm5vcGFnZQkJPSBsaW52ZnNfZmlsZW1hcF9ub3BhZ2UsCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19kbWFwaV9maWxlX3ZtX29wcyA9IHsKKwkubm9wYWdlCQk9IHhmc192bV9ub3BhZ2UsCiAJLnBvcHVsYXRlCT0gZmlsZW1hcF9wb3B1bGF0ZSwKICNpZmRlZiBIQVZFX1ZNT1BfTVBST1RFQ1QKLQkubXByb3RlY3QJPSBsaW52ZnNfbXByb3RlY3QsCisJLm1wcm90ZWN0CT0geGZzX3ZtX21wcm90ZWN0LAogI2VuZGlmCiB9OwogI2VuZGlmIC8qIENPTkZJR19YRlNfRE1BUEkgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZzX3N1YnIuYwppbmRleCA0ZmE0YjFhLi41NzVmMmE3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19mc19zdWJyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZnNfc3Vici5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJaW50CQlmaW9wdCkKIHsKIAl2bm9kZV90CQkqdnAgPSBCSFZfVE9fVk5PREUoYmRwKTsKLQlzdHJ1Y3QgaW5vZGUJKmlwID0gTElOVkZTX0dFVF9JUCh2cCk7CisJc3RydWN0IGlub2RlCSppcCA9IHZuX3RvX2lub2RlKHZwKTsKIAogCWlmIChWTl9DQUNIRUQodnApKQogCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhpcC0+aV9tYXBwaW5nLCBmaXJzdCk7CkBAIC03Niw3ICs3Niw3IEBACiAJaW50CQlmaW9wdCkKIHsKIAl2bm9kZV90CQkqdnAgPSBCSFZfVE9fVk5PREUoYmRwKTsKLQlzdHJ1Y3QgaW5vZGUJKmlwID0gTElOVkZTX0dFVF9JUCh2cCk7CisJc3RydWN0IGlub2RlCSppcCA9IHZuX3RvX2lub2RlKHZwKTsKIAogCWlmIChWTl9DQUNIRUQodnApKSB7CiAJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaXAtPmlfbWFwcGluZyk7CkBAIC05OCw3ICs5OCw3IEBACiAJaW50CQlmaW9wdCkKIHsKIAl2bm9kZV90CQkqdnAgPSBCSFZfVE9fVk5PREUoYmRwKTsKLQlzdHJ1Y3QgaW5vZGUJKmlwID0gTElOVkZTX0dFVF9JUCh2cCk7CisJc3RydWN0IGlub2RlCSppcCA9IHZuX3RvX2lub2RlKHZwKTsKIAogCWlmIChWTl9DQUNIRUQodnApKSB7CiAJCWZpbGVtYXBfZmRhdGF3cml0ZShpcC0+aV9tYXBwaW5nKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IDRkYjQ3NzkuLjg0NDc4NDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJfQogCiAJLyogd2UgbmVlZCB0aGUgdm5vZGUgKi8KLQl2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CiAKIAkvKiBub3cgd2UgY2FuIGdyYWIgdGhlIGZzaWQgKi8KIAltZW1jcHkoJmhhbmRsZS5oYV9mc2lkLCB2cC0+dl92ZnNwLT52ZnNfYWx0ZnNpZCwgc2l6ZW9mKHhmc19mc2lkX3QpKTsKQEAgLTI1Niw3ICsyNTYsNyBAQAogCX0KIAogCXZwcCA9IFhGU19JVE9WKGlwKTsKLQlpbm9kZXAgPSBMSU5WRlNfR0VUX0lQKHZwcCk7CisJaW5vZGVwID0gdm5fdG9faW5vZGUodnBwKTsKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CiAKIAkqdnAgPSB2cHA7CkBAIC0zNDQsNyArMzQ0LDcgQEAKIAkJcmV0dXJuIC1YRlNfRVJST1IoLVBUUl9FUlIoZmlscCkpOwogCX0KIAlpZiAoaW5vZGUtPmlfbW9kZSAmIFNfSUZSRUcpCi0JCWZpbHAtPmZfb3AgPSAmbGludmZzX2ludmlzX2ZpbGVfb3BlcmF0aW9uczsKKwkJZmlscC0+Zl9vcCA9ICZ4ZnNfaW52aXNfZmlsZV9vcGVyYXRpb25zOwogCiAJZmRfaW5zdGFsbChuZXdfZmQsIGZpbHApOwogCXJldHVybiBuZXdfZmQ7CkBAIC03MTUsNyArNzE1LDcgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwOwogCXhmc19tb3VudF90CQkqbXA7CiAKLQl2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CiAKIAl2bl90cmFjZV9lbnRyeSh2cCwgInhmc19pb2N0bCIsIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKIApAQCAtMTE2MCwxMDUgKzExNjAsMTI5IEBACiAJdm9pZAkJCV9fdXNlciAqYXJnKQogewogCXN0cnVjdCBmc3hhdHRyCQlmYTsKLQl2YXR0cl90CQkJdmE7Ci0JaW50CQkJZXJyb3I7CisJc3RydWN0IHZhdHRyCQkqdmF0dHI7CisJaW50CQkJZXJyb3IgPSAwOwogCWludAkJCWF0dHJfZmxhZ3M7CiAJdW5zaWduZWQgaW50CQlmbGFnczsKIAorCXZhdHRyID0ga21hbGxvYyhzaXplb2YoKnZhdHRyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCF2YXR0cikpCisJCXJldHVybiAtRU5PTUVNOworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFhGU19JT0NfRlNHRVRYQVRUUjogewotCQl2YS52YV9tYXNrID0gWEZTX0FUX1hGTEFHUyB8IFhGU19BVF9FWFRTSVpFIHwgXAotCQkJICAgICBYRlNfQVRfTkVYVEVOVFMgfCBYRlNfQVRfUFJPSklEOwotCQlWT1BfR0VUQVRUUih2cCwgJnZhLCAwLCBOVUxMLCBlcnJvcik7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiAtZXJyb3I7CisJCXZhdHRyLT52YV9tYXNrID0gWEZTX0FUX1hGTEFHUyB8IFhGU19BVF9FWFRTSVpFIHwgXAorCQkJCSBYRlNfQVRfTkVYVEVOVFMgfCBYRlNfQVRfUFJPSklEOworCQlWT1BfR0VUQVRUUih2cCwgdmF0dHIsIDAsIE5VTEwsIGVycm9yKTsKKwkJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQkJZXJyb3IgPSAtZXJyb3I7CisJCQlicmVhazsKKwkJfQogCi0JCWZhLmZzeF94ZmxhZ3MJPSB2YS52YV94ZmxhZ3M7Ci0JCWZhLmZzeF9leHRzaXplCT0gdmEudmFfZXh0c2l6ZTsKLQkJZmEuZnN4X25leHRlbnRzID0gdmEudmFfbmV4dGVudHM7Ci0JCWZhLmZzeF9wcm9qaWQJPSB2YS52YV9wcm9qaWQ7CisJCWZhLmZzeF94ZmxhZ3MJPSB2YXR0ci0+dmFfeGZsYWdzOworCQlmYS5mc3hfZXh0c2l6ZQk9IHZhdHRyLT52YV9leHRzaXplOworCQlmYS5mc3hfbmV4dGVudHMgPSB2YXR0ci0+dmFfbmV4dGVudHM7CisJCWZhLmZzeF9wcm9qaWQJPSB2YXR0ci0+dmFfcHJvamlkOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZmEsIHNpemVvZihmYSkpKQotCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKLQkJcmV0dXJuIDA7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZmEsIHNpemVvZihmYSkpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAl9CiAKIAljYXNlIFhGU19JT0NfRlNTRVRYQVRUUjogewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmZhLCBhcmcsIHNpemVvZihmYSkpKQotCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZmYSwgYXJnLCBzaXplb2YoZmEpKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KIAogCQlhdHRyX2ZsYWdzID0gMDsKIAkJaWYgKGZpbHAtPmZfZmxhZ3MgJiAoT19OREVMQVl8T19OT05CTE9DSykpCiAJCQlhdHRyX2ZsYWdzIHw9IEFUVFJfTk9OQkxPQ0s7CiAKLQkJdmEudmFfbWFzayA9IFhGU19BVF9YRkxBR1MgfCBYRlNfQVRfRVhUU0laRSB8IFhGU19BVF9QUk9KSUQ7Ci0JCXZhLnZhX3hmbGFncyAgPSBmYS5mc3hfeGZsYWdzOwotCQl2YS52YV9leHRzaXplID0gZmEuZnN4X2V4dHNpemU7Ci0JCXZhLnZhX3Byb2ppZCAgPSBmYS5mc3hfcHJvamlkOworCQl2YXR0ci0+dmFfbWFzayA9IFhGU19BVF9YRkxBR1MgfCBYRlNfQVRfRVhUU0laRSB8IFhGU19BVF9QUk9KSUQ7CisJCXZhdHRyLT52YV94ZmxhZ3MgID0gZmEuZnN4X3hmbGFnczsKKwkJdmF0dHItPnZhX2V4dHNpemUgPSBmYS5mc3hfZXh0c2l6ZTsKKwkJdmF0dHItPnZhX3Byb2ppZCAgPSBmYS5mc3hfcHJvamlkOwogCi0JCVZPUF9TRVRBVFRSKHZwLCAmdmEsIGF0dHJfZmxhZ3MsIE5VTEwsIGVycm9yKTsKLQkJaWYgKCFlcnJvcikKLQkJCXZuX3JldmFsaWRhdGUodnApOwkvKiB1cGRhdGUgTGludXggaW5vZGUgZmxhZ3MgKi8KLQkJcmV0dXJuIC1lcnJvcjsKKwkJVk9QX1NFVEFUVFIodnAsIHZhdHRyLCBhdHRyX2ZsYWdzLCBOVUxMLCBlcnJvcik7CisJCWlmIChsaWtlbHkoIWVycm9yKSkKKwkJCV9fdm5fcmV2YWxpZGF0ZSh2cCwgdmF0dHIpOwkvKiB1cGRhdGUgZmxhZ3MgKi8KKwkJZXJyb3IgPSAtZXJyb3I7CisJCWJyZWFrOwogCX0KIAogCWNhc2UgWEZTX0lPQ19GU0dFVFhBVFRSQTogewotCQl2YS52YV9tYXNrID0gWEZTX0FUX1hGTEFHUyB8IFhGU19BVF9FWFRTSVpFIHwgXAotCQkJICAgICBYRlNfQVRfQU5FWFRFTlRTIHwgWEZTX0FUX1BST0pJRDsKLQkJVk9QX0dFVEFUVFIodnAsICZ2YSwgMCwgTlVMTCwgZXJyb3IpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gLWVycm9yOworCQl2YXR0ci0+dmFfbWFzayA9IFhGU19BVF9YRkxBR1MgfCBYRlNfQVRfRVhUU0laRSB8IFwKKwkJCQkgWEZTX0FUX0FORVhURU5UUyB8IFhGU19BVF9QUk9KSUQ7CisJCVZPUF9HRVRBVFRSKHZwLCB2YXR0ciwgMCwgTlVMTCwgZXJyb3IpOworCQlpZiAodW5saWtlbHkoZXJyb3IpKSB7CisJCQllcnJvciA9IC1lcnJvcjsKKwkJCWJyZWFrOworCQl9CiAKLQkJZmEuZnN4X3hmbGFncwk9IHZhLnZhX3hmbGFnczsKLQkJZmEuZnN4X2V4dHNpemUJPSB2YS52YV9leHRzaXplOwotCQlmYS5mc3hfbmV4dGVudHMgPSB2YS52YV9hbmV4dGVudHM7Ci0JCWZhLmZzeF9wcm9qaWQJPSB2YS52YV9wcm9qaWQ7CisJCWZhLmZzeF94ZmxhZ3MJPSB2YXR0ci0+dmFfeGZsYWdzOworCQlmYS5mc3hfZXh0c2l6ZQk9IHZhdHRyLT52YV9leHRzaXplOworCQlmYS5mc3hfbmV4dGVudHMgPSB2YXR0ci0+dmFfYW5leHRlbnRzOworCQlmYS5mc3hfcHJvamlkCT0gdmF0dHItPnZhX3Byb2ppZDsKIAotCQlpZiAoY29weV90b191c2VyKGFyZywgJmZhLCBzaXplb2YoZmEpKSkKLQkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7Ci0JCXJldHVybiAwOworCQlpZiAoY29weV90b191c2VyKGFyZywgJmZhLCBzaXplb2YoZmEpKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAJfQogCiAJY2FzZSBYRlNfSU9DX0dFVFhGTEFHUzogewogCQlmbGFncyA9IHhmc19kaTJseGZsYWdzKGlwLT5pX2QuZGlfZmxhZ3MpOwogCQlpZiAoY29weV90b191c2VyKGFyZywgJmZsYWdzLCBzaXplb2YoZmxhZ3MpKSkKLQkJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7Ci0JCXJldHVybiAwOworCQkJZXJyb3IgPSAtRUZBVUxUOworCQlicmVhazsKIAl9CiAKIAljYXNlIFhGU19JT0NfU0VUWEZMQUdTOiB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmZmxhZ3MsIGFyZywgc2l6ZW9mKGZsYWdzKSkpCi0JCQlyZXR1cm4gLVhGU19FUlJPUihFRkFVTFQpOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmZsYWdzLCBhcmcsIHNpemVvZihmbGFncykpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQogCiAJCWlmIChmbGFncyAmIH4oTElOVVhfWEZMQUdfSU1NVVRBQkxFIHwgTElOVVhfWEZMQUdfQVBQRU5EIHwgXAogCQkJICAgICAgTElOVVhfWEZMQUdfTk9BVElNRSB8IExJTlVYX1hGTEFHX05PRFVNUCB8IFwKLQkJCSAgICAgIExJTlVYX1hGTEFHX1NZTkMpKQotCQkJcmV0dXJuIC1YRlNfRVJST1IoRU9QTk9UU1VQUCk7CisJCQkgICAgICBMSU5VWF9YRkxBR19TWU5DKSkgeworCQkJZXJyb3IgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQl9CiAKIAkJYXR0cl9mbGFncyA9IDA7CiAJCWlmIChmaWxwLT5mX2ZsYWdzICYgKE9fTkRFTEFZfE9fTk9OQkxPQ0spKQogCQkJYXR0cl9mbGFncyB8PSBBVFRSX05PTkJMT0NLOwogCi0JCXZhLnZhX21hc2sgPSBYRlNfQVRfWEZMQUdTOwotCQl2YS52YV94ZmxhZ3MgPSB4ZnNfbWVyZ2VfaW9jX3hmbGFncyhmbGFncywKLQkJCQl4ZnNfaXAyeGZsYWdzKGlwKSk7CisJCXZhdHRyLT52YV9tYXNrID0gWEZTX0FUX1hGTEFHUzsKKwkJdmF0dHItPnZhX3hmbGFncyA9IHhmc19tZXJnZV9pb2NfeGZsYWdzKGZsYWdzLAorCQkJCQkJCXhmc19pcDJ4ZmxhZ3MoaXApKTsKIAotCQlWT1BfU0VUQVRUUih2cCwgJnZhLCBhdHRyX2ZsYWdzLCBOVUxMLCBlcnJvcik7Ci0JCWlmICghZXJyb3IpCi0JCQl2bl9yZXZhbGlkYXRlKHZwKTsJLyogdXBkYXRlIExpbnV4IGlub2RlIGZsYWdzICovCi0JCXJldHVybiAtZXJyb3I7CisJCVZPUF9TRVRBVFRSKHZwLCB2YXR0ciwgYXR0cl9mbGFncywgTlVMTCwgZXJyb3IpOworCQlpZiAobGlrZWx5KCFlcnJvcikpCisJCQlfX3ZuX3JldmFsaWRhdGUodnAsIHZhdHRyKTsJLyogdXBkYXRlIGZsYWdzICovCisJCWVycm9yID0gLWVycm9yOworCQlicmVhazsKIAl9CiAKIAljYXNlIFhGU19JT0NfR0VUVkVSU0lPTjogewotCQlmbGFncyA9IExJTlZGU19HRVRfSVAodnApLT5pX2dlbmVyYXRpb247CisJCWZsYWdzID0gdm5fdG9faW5vZGUodnApLT5pX2dlbmVyYXRpb247CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZmxhZ3MsIHNpemVvZihmbGFncykpKQotCQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKLQkJcmV0dXJuIDA7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCWJyZWFrOwogCX0KIAogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFRZOworCQllcnJvciA9IC1FTk9UVFk7CisJCWJyZWFrOwogCX0KKworCWtmcmVlKHZhdHRyKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIFNUQVRJQyBpbnQKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuYwppbmRleCBhN2M5YmExLi5iNjMyMWFiIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5jCkBAIC0xMDcsMTEgKzEwNywxMSBAQAogI2VuZGlmCiAKIFNUQVRJQyBsb25nCi1fX2xpbnZmc19jb21wYXRfaW9jdGwoaW50IG1vZGUsIHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreGZzX2NvbXBhdF9pb2N0bChpbnQgbW9kZSwgc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50CQllcnJvcjsKIAlzdHJ1Y3QJCWlub2RlICppbm9kZSA9IGYtPmZfZGVudHJ5LT5kX2lub2RlOwotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZub2RlX3QJCSp2cCA9IHZuX3RvX2lub2RlKGlub2RlKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBYRlNfSU9DX0RJT0lORk86CkBAIC0xOTYsMTkgKzE5NiwxOSBAQAogfQogCiBsb25nCi1saW52ZnNfY29tcGF0X2lvY3RsKAoreGZzX2ZpbGVfY29tcGF0X2lvY3RsKAogCXN0cnVjdCBmaWxlCQkqZiwKIAl1bnNpZ25lZAkJY21kLAogCXVuc2lnbmVkIGxvbmcJCWFyZykKIHsKLQlyZXR1cm4gX19saW52ZnNfY29tcGF0X2lvY3RsKDAsIGYsIGNtZCwgYXJnKTsKKwlyZXR1cm4geGZzX2NvbXBhdF9pb2N0bCgwLCBmLCBjbWQsIGFyZyk7CiB9CiAKIGxvbmcKLWxpbnZmc19jb21wYXRfaW52aXNfaW9jdGwoCit4ZnNfZmlsZV9jb21wYXRfaW52aXNfaW9jdGwoCiAJc3RydWN0IGZpbGUJCSpmLAogCXVuc2lnbmVkCQljbWQsCiAJdW5zaWduZWQgbG9uZwkJYXJnKQogewotCXJldHVybiBfX2xpbnZmc19jb21wYXRfaW9jdGwoSU9fSU5WSVMsIGYsIGNtZCwgYXJnKTsKKwlyZXR1cm4geGZzX2NvbXBhdF9pb2N0bChJT19JTlZJUywgZiwgY21kLCBhcmcpOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwzMi5oCmluZGV4IDAxMWMyNzMuLjAyZGU2ZTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsMzIuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bDMyLmgKQEAgLTE4LDcgKzE4LDcgQEAKICNpZm5kZWYgX19YRlNfSU9DVEwzMl9IX18KICNkZWZpbmUgX19YRlNfSU9DVEwzMl9IX18KIAotZXh0ZXJuIGxvbmcgbGludmZzX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gbG9uZyBsaW52ZnNfY29tcGF0X2ludmlzX2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gbG9uZyB4ZnNfZmlsZV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGxvbmcgeGZzX2ZpbGVfY29tcGF0X2ludmlzX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKIAogI2VuZGlmIC8qIF9fWEZTX0lPQ1RMMzJfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggZDdmNmYyZC4uYWY0ODc0MyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJeGZzX2lub2RlX3QJKmlwLAogCWludAkJZmxhZ3MpCiB7Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IExJTlZGU19HRVRfSVAoWEZTX0lUT1YoaXApKTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gdm5fdG9faW5vZGUoWEZTX0lUT1YoaXApKTsKIAl0aW1lc3BlY190CXR2OwogCiAJbmFub3RpbWUoJnR2KTsKQEAgLTE5OCwyMiArMTk4LDIyIEBACiAgKiBQdWxsIHRoZSBsaW5rIGNvdW50IGFuZCBzaXplIHVwIGZyb20gdGhlIHhmcyBpbm9kZSB0byB0aGUgbGludXggaW5vZGUKICAqLwogU1RBVElDIHZvaWQKLXZhbGlkYXRlX2ZpZWxkcygKLQlzdHJ1Y3QgaW5vZGUJKmlwKQoreGZzX3ZhbGlkYXRlX2ZpZWxkcygKKwlzdHJ1Y3QgaW5vZGUJKmlwLAorCXN0cnVjdCB2YXR0cgkqdmF0dHIpCiB7Ci0Jdm5vZGVfdAkJKnZwID0gTElOVkZTX0dFVF9WUChpcCk7Ci0JdmF0dHJfdAkJdmE7CisJdm5vZGVfdAkJKnZwID0gdm5fZnJvbV9pbm9kZShpcCk7CiAJaW50CQllcnJvcjsKIAotCXZhLnZhX21hc2sgPSBYRlNfQVRfTkxJTkt8WEZTX0FUX1NJWkV8WEZTX0FUX05CTE9DS1M7Ci0JVk9QX0dFVEFUVFIodnAsICZ2YSwgQVRUUl9MQVpZLCBOVUxMLCBlcnJvcik7Ci0JaWYgKGxpa2VseSghZXJyb3IpKSB7Ci0JCWlwLT5pX25saW5rID0gdmEudmFfbmxpbms7Ci0JCWlwLT5pX2Jsb2NrcyA9IHZhLnZhX25ibG9ja3M7CisJdmF0dHItPnZhX21hc2sgPSBYRlNfQVRfTkxJTkt8WEZTX0FUX1NJWkV8WEZTX0FUX05CTE9DS1M7CisJVk9QX0dFVEFUVFIodnAsIHZhdHRyLCBBVFRSX0xBWlksIE5VTEwsIGVycm9yKTsKKyAgCWlmIChsaWtlbHkoIWVycm9yKSkgeworCQlpcC0+aV9ubGluayA9IHZhdHRyLT52YV9ubGluazsKKwkJaXAtPmlfYmxvY2tzID0gdmF0dHItPnZhX25ibG9ja3M7CiAKLQkJLyogd2UncmUgdW5kZXIgaV9tdXRleCBzbyBpX3NpemUgY2FuJ3QgY2hhbmdlIHVuZGVyIHVzICovCi0JCWlmIChpX3NpemVfcmVhZChpcCkgIT0gdmEudmFfc2l6ZSkKLQkJCWlfc2l6ZV93cml0ZShpcCwgdmEudmFfc2l6ZSk7CisJCS8qIHdlJ3JlIHVuZGVyIGlfc2VtIHNvIGlfc2l6ZSBjYW4ndCBjaGFuZ2UgdW5kZXIgdXMgKi8KKwkJaWYgKGlfc2l6ZV9yZWFkKGlwKSAhPSB2YXR0ci0+dmFfc2l6ZSkKKwkJCWlfc2l6ZV93cml0ZShpcCwgdmF0dHItPnZhX3NpemUpOwogCX0KIH0KIApAQCAtMjI0LDExICsyMjQsMTEgQEAKICAqIGlub2RlLCBvZiBjb3Vyc2UsIHN1Y2ggdGhhdCBsb2cgcmVwbGF5IGNhbid0IGNhdXNlIHRoZXNlIHRvIGJlIGxvc3QpLgogICovCiBTVEFUSUMgaW50Ci1saW52ZnNfaW5pdF9zZWN1cml0eSgKK3hmc19pbml0X3NlY3VyaXR5KAogCXN0cnVjdCB2bm9kZQkqdnAsCiAJc3RydWN0IGlub2RlCSpkaXIpCiB7Ci0Jc3RydWN0IGlub2RlCSppcCA9IExJTlZGU19HRVRfSVAodnApOworCXN0cnVjdCBpbm9kZQkqaXAgPSB2bl90b19pbm9kZSh2cCk7CiAJc2l6ZV90CQlsZW5ndGg7CiAJdm9pZAkJKnZhbHVlOwogCWNoYXIJCSpuYW1lOwpAQCAtMjU3LDQ2ICsyNTcsNDYgQEAKICAqIFhYWChoY2gpOiAgbmZzZCBpcyBicm9rZW4sIGJldHRlciBmaXggaXQgaW5zdGVhZC4KICAqLwogU1RBVElDIGlubGluZSBpbnQKLWhhc19mc19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreGZzX2hhc19mc19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXJldHVybiAodGFzay0+ZnMgIT0gaW5pdF90YXNrLmZzKTsKIH0KIAogU1RBVElDIGlubGluZSB2b2lkCi1jbGVhbnVwX2lub2RlKAoreGZzX2NsZWFudXBfaW5vZGUoCiAJdm5vZGVfdAkJKmR2cCwKIAl2bm9kZV90CQkqdnAsCi0Jc3RydWN0IGRlbnRyeQkqZGVudHJ5LAkKKwlzdHJ1Y3QgZGVudHJ5CSpkZW50cnksCiAJaW50CQltb2RlKQogewogCXN0cnVjdCBkZW50cnkgICB0ZWFyZG93biA9IHt9OwotCWludCAgICAgICAgICAgICBlcnIyOworCWludCAgICAgICAgICAgICBlcnJvcjsKIAogCS8qIE9oLCB0aGUgaG9ycm9yLgotCSAqIElmIHdlIGNhbid0IGFkZCB0aGUgQUNMIG9yIHdlIGZhaWwgaW4gCi0JICogbGludmZzX2luaXRfc2VjdXJpdHkgd2UgbXVzdCBiYWNrIG91dC4KKwkgKiBJZiB3ZSBjYW4ndCBhZGQgdGhlIEFDTCBvciB3ZSBmYWlsIGluCisJICogeGZzX2luaXRfc2VjdXJpdHkgd2UgbXVzdCBiYWNrIG91dC4KIAkgKiBFTk9TUEMgY2FuIGhpdCBoZXJlLCBhbW9uZyBvdGhlciB0aGluZ3MuCiAJICovCi0JdGVhcmRvd24uZF9pbm9kZSA9IExJTlZGU19HRVRfSVAodnApOworCXRlYXJkb3duLmRfaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAJdGVhcmRvd24uZF9uYW1lID0gZGVudHJ5LT5kX25hbWU7CiAKIAlpZiAoU19JU0RJUihtb2RlKSkKLQkgIAlWT1BfUk1ESVIoZHZwLCAmdGVhcmRvd24sIE5VTEwsIGVycjIpOworCSAgCVZPUF9STURJUihkdnAsICZ0ZWFyZG93biwgTlVMTCwgZXJyb3IpOwogCWVsc2UKLQkJVk9QX1JFTU9WRShkdnAsICZ0ZWFyZG93biwgTlVMTCwgZXJyMik7CisJCVZPUF9SRU1PVkUoZHZwLCAmdGVhcmRvd24sIE5VTEwsIGVycm9yKTsKIAlWTl9SRUxFKHZwKTsKIH0KIAogU1RBVElDIGludAotbGludmZzX21rbm9kKAoreGZzX3ZuX21rbm9kKAogCXN0cnVjdCBpbm9kZQkqZGlyLAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwKIAlpbnQJCW1vZGUsCiAJZGV2X3QJCXJkZXYpCiB7CiAJc3RydWN0IGlub2RlCSppcDsKLQl2YXR0cl90CQl2YTsKLQl2bm9kZV90CQkqdnAgPSBOVUxMLCAqZHZwID0gTElOVkZTX0dFVF9WUChkaXIpOworCXZhdHRyX3QJCXZhdHRyID0geyAwIH07CisJdm5vZGVfdAkJKnZwID0gTlVMTCwgKmR2cCA9IHZuX2Zyb21faW5vZGUoZGlyKTsKIAl4ZnNfYWNsX3QJKmRlZmF1bHRfYWNsID0gTlVMTDsKIAlhdHRyZXhpc3RzX3QJdGVzdF9kZWZhdWx0X2FjbCA9IF9BQ0xfREVGQVVMVF9FWElTVFM7CiAJaW50CQllcnJvcjsKQEAgLTMwNSw5OSArMzA1LDk4IEBACiAJICogSXJpeCB1c2VzIE1pc3NlZCdlbSdWIHNwbGl0LCBidXQgZG9lc24ndCB3YW50IHRvIHNlZQogCSAqIHRoZSB1cHBlciA1IGJpdHMgb2YgKDE0Yml0KSBtYWpvci4KIAkgKi8KLQlpZiAoIXN5c3ZfdmFsaWRfZGV2KHJkZXYpIHx8IE1BSk9SKHJkZXYpICYgfjB4MWZmKQorCWlmICh1bmxpa2VseSghc3lzdl92YWxpZF9kZXYocmRldikgfHwgTUFKT1IocmRldikgJiB+MHgxZmYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh0ZXN0X2RlZmF1bHRfYWNsICYmIHRlc3RfZGVmYXVsdF9hY2woZHZwKSkgewotCQlpZiAoIV9BQ0xfQUxMT0MoZGVmYXVsdF9hY2wpKQorCWlmICh1bmxpa2VseSh0ZXN0X2RlZmF1bHRfYWNsICYmIHRlc3RfZGVmYXVsdF9hY2woZHZwKSkpIHsKKwkJaWYgKCFfQUNMX0FMTE9DKGRlZmF1bHRfYWNsKSkgewogCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAkJaWYgKCFfQUNMX0dFVF9ERUZBVUxUKGR2cCwgZGVmYXVsdF9hY2wpKSB7CiAJCQlfQUNMX0ZSRUUoZGVmYXVsdF9hY2wpOwogCQkJZGVmYXVsdF9hY2wgPSBOVUxMOwogCQl9CiAJfQogCi0JaWYgKElTX1BPU0lYQUNMKGRpcikgJiYgIWRlZmF1bHRfYWNsICYmIGhhc19mc19zdHJ1Y3QoY3VycmVudCkpCisJaWYgKElTX1BPU0lYQUNMKGRpcikgJiYgIWRlZmF1bHRfYWNsICYmIHhmc19oYXNfZnNfc3RydWN0KGN1cnJlbnQpKQogCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CiAKLQltZW1zZXQoJnZhLCAwLCBzaXplb2YodmEpKTsKLQl2YS52YV9tYXNrID0gWEZTX0FUX1RZUEV8WEZTX0FUX01PREU7Ci0JdmEudmFfbW9kZSA9IG1vZGU7CisJdmF0dHIudmFfbWFzayA9IFhGU19BVF9UWVBFfFhGU19BVF9NT0RFOworCXZhdHRyLnZhX21vZGUgPSBtb2RlOwogCiAJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CiAJY2FzZSBTX0lGQ0hSOiBjYXNlIFNfSUZCTEs6IGNhc2UgU19JRklGTzogY2FzZSBTX0lGU09DSzoKLQkJdmEudmFfcmRldiA9IHN5c3ZfZW5jb2RlX2RldihyZGV2KTsKLQkJdmEudmFfbWFzayB8PSBYRlNfQVRfUkRFVjsKKwkJdmF0dHIudmFfcmRldiA9IHN5c3ZfZW5jb2RlX2RldihyZGV2KTsKKwkJdmF0dHIudmFfbWFzayB8PSBYRlNfQVRfUkRFVjsKIAkJLypGQUxMVEhST1VHSCovCiAJY2FzZSBTX0lGUkVHOgotCQlWT1BfQ1JFQVRFKGR2cCwgZGVudHJ5LCAmdmEsICZ2cCwgTlVMTCwgZXJyb3IpOworCQlWT1BfQ1JFQVRFKGR2cCwgZGVudHJ5LCAmdmF0dHIsICZ2cCwgTlVMTCwgZXJyb3IpOwogCQlicmVhazsKIAljYXNlIFNfSUZESVI6Ci0JCVZPUF9NS0RJUihkdnAsIGRlbnRyeSwgJnZhLCAmdnAsIE5VTEwsIGVycm9yKTsKKwkJVk9QX01LRElSKGR2cCwgZGVudHJ5LCAmdmF0dHIsICZ2cCwgTlVMTCwgZXJyb3IpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnJvciA9IEVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKCFlcnJvcikKLQl7Ci0JCWVycm9yID0gbGludmZzX2luaXRfc2VjdXJpdHkodnAsIGRpcik7CisJaWYgKHVubGlrZWx5KCFlcnJvcikpIHsKKwkJZXJyb3IgPSB4ZnNfaW5pdF9zZWN1cml0eSh2cCwgZGlyKTsKIAkJaWYgKGVycm9yKQotCQkJY2xlYW51cF9pbm9kZShkdnAsIHZwLCBkZW50cnksIG1vZGUpOworCQkJeGZzX2NsZWFudXBfaW5vZGUoZHZwLCB2cCwgZGVudHJ5LCBtb2RlKTsKIAl9CiAKLQlpZiAoZGVmYXVsdF9hY2wpIHsKKwlpZiAodW5saWtlbHkoZGVmYXVsdF9hY2wpKSB7CiAJCWlmICghZXJyb3IpIHsKLQkJCWVycm9yID0gX0FDTF9JTkhFUklUKHZwLCAmdmEsIGRlZmF1bHRfYWNsKTsKLQkJCWlmICghZXJyb3IpIAorCQkJZXJyb3IgPSBfQUNMX0lOSEVSSVQodnAsICZ2YXR0ciwgZGVmYXVsdF9hY2wpOworCQkJaWYgKCFlcnJvcikKIAkJCQlWTU9ESUZZKHZwKTsKIAkJCWVsc2UKLQkJCQljbGVhbnVwX2lub2RlKGR2cCwgdnAsIGRlbnRyeSwgbW9kZSk7CisJCQkJeGZzX2NsZWFudXBfaW5vZGUoZHZwLCB2cCwgZGVudHJ5LCBtb2RlKTsKIAkJfQogCQlfQUNMX0ZSRUUoZGVmYXVsdF9hY2wpOwogCX0KIAotCWlmICghZXJyb3IpIHsKKwlpZiAobGlrZWx5KCFlcnJvcikpIHsKIAkJQVNTRVJUKHZwKTsKLQkJaXAgPSBMSU5WRlNfR0VUX0lQKHZwKTsKKwkJaXAgPSB2bl90b19pbm9kZSh2cCk7CiAKIAkJaWYgKFNfSVNDSFIobW9kZSkgfHwgU19JU0JMSyhtb2RlKSkKIAkJCWlwLT5pX3JkZXYgPSByZGV2OwogCQllbHNlIGlmIChTX0lTRElSKG1vZGUpKQotCQkJdmFsaWRhdGVfZmllbGRzKGlwKTsKKwkJCXhmc192YWxpZGF0ZV9maWVsZHMoaXAsICZ2YXR0cik7CiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpcCk7Ci0JCXZhbGlkYXRlX2ZpZWxkcyhkaXIpOworCQl4ZnNfdmFsaWRhdGVfZmllbGRzKGRpciwgJnZhdHRyKTsKIAl9CiAJcmV0dXJuIC1lcnJvcjsKIH0KIAogU1RBVElDIGludAotbGludmZzX2NyZWF0ZSgKK3hmc192bl9jcmVhdGUoCiAJc3RydWN0IGlub2RlCSpkaXIsCiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5LAogCWludAkJbW9kZSwKIAlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlyZXR1cm4gbGludmZzX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKKwlyZXR1cm4geGZzX3ZuX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIH0KIAogU1RBVElDIGludAotbGludmZzX21rZGlyKAoreGZzX3ZuX21rZGlyKAogCXN0cnVjdCBpbm9kZQkqZGlyLAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwKIAlpbnQJCW1vZGUpCiB7Ci0JcmV0dXJuIGxpbnZmc19ta25vZChkaXIsIGRlbnRyeSwgbW9kZXxTX0lGRElSLCAwKTsKKwlyZXR1cm4geGZzX3ZuX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlfFNfSUZESVIsIDApOwogfQogCiBTVEFUSUMgc3RydWN0IGRlbnRyeSAqCi1saW52ZnNfbG9va3VwKAoreGZzX3ZuX2xvb2t1cCgKIAlzdHJ1Y3QgaW5vZGUJKmRpciwKIAlzdHJ1Y3QgZGVudHJ5CSpkZW50cnksCiAJc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0Jc3RydWN0IHZub2RlCSp2cCA9IExJTlZGU19HRVRfVlAoZGlyKSwgKmN2cDsKKwlzdHJ1Y3Qgdm5vZGUJKnZwID0gdm5fZnJvbV9pbm9kZShkaXIpLCAqY3ZwOwogCWludAkJZXJyb3I7CiAKIAlpZiAoZGVudHJ5LT5kX25hbWUubGVuID49IE1BWE5BTUVMRU4pCkBAIC00MTEsMTEgKzQxMCwxMSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoTElOVkZTX0dFVF9JUChjdnApLCBkZW50cnkpOworCXJldHVybiBkX3NwbGljZV9hbGlhcyh2bl90b19pbm9kZShjdnApLCBkZW50cnkpOwogfQogCiBTVEFUSUMgaW50Ci1saW52ZnNfbGluaygKK3hmc192bl9saW5rKAogCXN0cnVjdCBkZW50cnkJKm9sZF9kZW50cnksCiAJc3RydWN0IGlub2RlCSpkaXIsCiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5KQpAQCAtNDIzLDk5ICs0MjIsMTAyIEBACiAJc3RydWN0IGlub2RlCSppcDsJLyogaW5vZGUgb2YgZ3V5IGJlaW5nIGxpbmtlZCB0byAqLwogCXZub2RlX3QJCSp0ZHZwOwkvKiB0YXJnZXQgZGlyZWN0b3J5IGZvciBuZXcgbmFtZS9saW5rICovCiAJdm5vZGVfdAkJKnZwOwkvKiB2cCBvZiBuYW1lIGJlaW5nIGxpbmtlZCAqLworCXZhdHRyX3QJCXZhdHRyOwogCWludAkJZXJyb3I7CiAKIAlpcCA9IG9sZF9kZW50cnktPmRfaW5vZGU7CS8qIGlub2RlIGJlaW5nIGxpbmtlZCB0byAqLwogCWlmIChTX0lTRElSKGlwLT5pX21vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JdGR2cCA9IExJTlZGU19HRVRfVlAoZGlyKTsKLQl2cCA9IExJTlZGU19HRVRfVlAoaXApOworCXRkdnAgPSB2bl9mcm9tX2lub2RlKGRpcik7CisJdnAgPSB2bl9mcm9tX2lub2RlKGlwKTsKIAogCVZPUF9MSU5LKHRkdnAsIHZwLCBkZW50cnksIE5VTEwsIGVycm9yKTsKLQlpZiAoIWVycm9yKSB7CisJaWYgKGxpa2VseSghZXJyb3IpKSB7CiAJCVZNT0RJRlkodGR2cCk7CiAJCVZOX0hPTEQodnApOwotCQl2YWxpZGF0ZV9maWVsZHMoaXApOworCQl4ZnNfdmFsaWRhdGVfZmllbGRzKGlwLCAmdmF0dHIpOwogCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaXApOwogCX0KIAlyZXR1cm4gLWVycm9yOwogfQogCiBTVEFUSUMgaW50Ci1saW52ZnNfdW5saW5rKAoreGZzX3ZuX3VubGluaygKIAlzdHJ1Y3QgaW5vZGUJKmRpciwKIAlzdHJ1Y3QgZGVudHJ5CSpkZW50cnkpCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZTsKIAl2bm9kZV90CQkqZHZwOwkvKiBkaXJlY3RvcnkgY29udGFpbmluZyBuYW1lIHRvIHJlbW92ZSAqLworCXZhdHRyX3QJCXZhdHRyOwogCWludAkJZXJyb3I7CiAKIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlkdnAgPSBMSU5WRlNfR0VUX1ZQKGRpcik7CisJZHZwID0gdm5fZnJvbV9pbm9kZShkaXIpOwogCiAJVk9QX1JFTU9WRShkdnAsIGRlbnRyeSwgTlVMTCwgZXJyb3IpOwotCWlmICghZXJyb3IpIHsKLQkJdmFsaWRhdGVfZmllbGRzKGRpcik7CS8qIEZvciBzaXplIG9ubHkgKi8KLQkJdmFsaWRhdGVfZmllbGRzKGlub2RlKTsKKwlpZiAobGlrZWx5KCFlcnJvcikpIHsKKwkJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhkaXIsICZ2YXR0cik7CS8qIHNpemUgbmVlZHMgdXBkYXRlICovCisJCXhmc192YWxpZGF0ZV9maWVsZHMoaW5vZGUsICZ2YXR0cik7CiAJfQotCiAJcmV0dXJuIC1lcnJvcjsKIH0KIAogU1RBVElDIGludAotbGludmZzX3N5bWxpbmsoCit4ZnNfdm5fc3ltbGluaygKIAlzdHJ1Y3QgaW5vZGUJKmRpciwKIAlzdHJ1Y3QgZGVudHJ5CSpkZW50cnksCiAJY29uc3QgY2hhcgkqc3ltbmFtZSkKIHsKIAlzdHJ1Y3QgaW5vZGUJKmlwOwotCXZhdHRyX3QJCXZhOworCXZhdHRyX3QJCXZhdHRyID0geyAwIH07CiAJdm5vZGVfdAkJKmR2cDsJLyogZGlyZWN0b3J5IGNvbnRhaW5pbmcgbmFtZSBvZiBzeW1saW5rICovCiAJdm5vZGVfdAkJKmN2cDsJLyogdXNlZCB0byBsb29rdXAgc3ltbGluayB0byBwdXQgaW4gZGVudHJ5ICovCiAJaW50CQllcnJvcjsKIAotCWR2cCA9IExJTlZGU19HRVRfVlAoZGlyKTsKKwlkdnAgPSB2bl9mcm9tX2lub2RlKGRpcik7CiAJY3ZwID0gTlVMTDsKIAotCW1lbXNldCgmdmEsIDAsIHNpemVvZih2YSkpOwotCXZhLnZhX21vZGUgPSBTX0lGTE5LIHwKKwl2YXR0ci52YV9tb2RlID0gU19JRkxOSyB8CiAJCShpcml4X3N5bWxpbmtfbW9kZSA/IDA3NzcgJiB+Y3VycmVudC0+ZnMtPnVtYXNrIDogU19JUldYVUdPKTsKLQl2YS52YV9tYXNrID0gWEZTX0FUX1RZUEV8WEZTX0FUX01PREU7CisJdmF0dHIudmFfbWFzayA9IFhGU19BVF9UWVBFfFhGU19BVF9NT0RFOwogCiAJZXJyb3IgPSAwOwotCVZPUF9TWU1MSU5LKGR2cCwgZGVudHJ5LCAmdmEsIChjaGFyICopc3ltbmFtZSwgJmN2cCwgTlVMTCwgZXJyb3IpOworCVZPUF9TWU1MSU5LKGR2cCwgZGVudHJ5LCAmdmF0dHIsIChjaGFyICopc3ltbmFtZSwgJmN2cCwgTlVMTCwgZXJyb3IpOwogCWlmIChsaWtlbHkoIWVycm9yICYmIGN2cCkpIHsKLQkJZXJyb3IgPSBsaW52ZnNfaW5pdF9zZWN1cml0eShjdnAsIGRpcik7CisJCWVycm9yID0geGZzX2luaXRfc2VjdXJpdHkoY3ZwLCBkaXIpOwogCQlpZiAobGlrZWx5KCFlcnJvcikpIHsKLQkJCWlwID0gTElOVkZTX0dFVF9JUChjdnApOworCQkJaXAgPSB2bl90b19pbm9kZShjdnApOwogCQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlwKTsKLQkJCXZhbGlkYXRlX2ZpZWxkcyhkaXIpOwotCQkJdmFsaWRhdGVfZmllbGRzKGlwKTsKKwkJCXhmc192YWxpZGF0ZV9maWVsZHMoZGlyLCAmdmF0dHIpOworCQkJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhpcCwgJnZhdHRyKTsKKwkJfSBlbHNlIHsKKwkJCXhmc19jbGVhbnVwX2lub2RlKGR2cCwgY3ZwLCBkZW50cnksIDApOwogCQl9CiAJfQogCXJldHVybiAtZXJyb3I7CiB9CiAKIFNUQVRJQyBpbnQKLWxpbnZmc19ybWRpcigKK3hmc192bl9ybWRpcigKIAlzdHJ1Y3QgaW5vZGUJKmRpciwKIAlzdHJ1Y3QgZGVudHJ5CSpkZW50cnkpCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQl2bm9kZV90CQkqZHZwID0gTElOVkZTX0dFVF9WUChkaXIpOworCXZub2RlX3QJCSpkdnAgPSB2bl9mcm9tX2lub2RlKGRpcik7CisJdmF0dHJfdAkJdmF0dHI7CiAJaW50CQllcnJvcjsKIAogCVZPUF9STURJUihkdnAsIGRlbnRyeSwgTlVMTCwgZXJyb3IpOwotCWlmICghZXJyb3IpIHsKLQkJdmFsaWRhdGVfZmllbGRzKGlub2RlKTsKLQkJdmFsaWRhdGVfZmllbGRzKGRpcik7CisJaWYgKGxpa2VseSghZXJyb3IpKSB7CisJCXhmc192YWxpZGF0ZV9maWVsZHMoaW5vZGUsICZ2YXR0cik7CisJCXhmc192YWxpZGF0ZV9maWVsZHMoZGlyLCAmdmF0dHIpOwogCX0KIAlyZXR1cm4gLWVycm9yOwogfQogCiBTVEFUSUMgaW50Ci1saW52ZnNfcmVuYW1lKAoreGZzX3ZuX3JlbmFtZSgKIAlzdHJ1Y3QgaW5vZGUJKm9kaXIsCiAJc3RydWN0IGRlbnRyeQkqb2RlbnRyeSwKIAlzdHJ1Y3QgaW5vZGUJKm5kaXIsCkBAIC01MjQsMjIgKzUyNiwyMSBAQAogCXN0cnVjdCBpbm9kZQkqbmV3X2lub2RlID0gbmRlbnRyeS0+ZF9pbm9kZTsKIAl2bm9kZV90CQkqZnZwOwkvKiBmcm9tIGRpcmVjdG9yeSAqLwogCXZub2RlX3QJCSp0dnA7CS8qIHRhcmdldCBkaXJlY3RvcnkgKi8KKwl2YXR0cl90CQl2YXR0cjsKIAlpbnQJCWVycm9yOwogCi0JZnZwID0gTElOVkZTX0dFVF9WUChvZGlyKTsKLQl0dnAgPSBMSU5WRlNfR0VUX1ZQKG5kaXIpOworCWZ2cCA9IHZuX2Zyb21faW5vZGUob2Rpcik7CisJdHZwID0gdm5fZnJvbV9pbm9kZShuZGlyKTsKIAogCVZPUF9SRU5BTUUoZnZwLCBvZGVudHJ5LCB0dnAsIG5kZW50cnksIE5VTEwsIGVycm9yKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAtZXJyb3I7Ci0KLQlpZiAobmV3X2lub2RlKQotCQl2YWxpZGF0ZV9maWVsZHMobmV3X2lub2RlKTsKLQotCXZhbGlkYXRlX2ZpZWxkcyhvZGlyKTsKLQlpZiAobmRpciAhPSBvZGlyKQotCQl2YWxpZGF0ZV9maWVsZHMobmRpcik7Ci0JcmV0dXJuIDA7CisJaWYgKGxpa2VseSghZXJyb3IpKSB7CisJCWlmIChuZXdfaW5vZGUpCisJCQl4ZnNfdmFsaWRhdGVfZmllbGRzKG5ld19pbm9kZSwgJnZhdHRyKTsKKwkJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhvZGlyLCAmdmF0dHIpOworCQlpZiAobmRpciAhPSBvZGlyKQorCQkJeGZzX3ZhbGlkYXRlX2ZpZWxkcyhuZGlyLCAmdmF0dHIpOworCX0KKwlyZXR1cm4gLWVycm9yOwogfQogCiAvKgpAQCAtNTQ4LDcgKzU0OSw3IEBACiAgKiB1aW8gaXMga21hbGxvY2VkIGZvciB0aGlzIHJlYXNvbi4uLgogICovCiBTVEFUSUMgdm9pZCAqCi1saW52ZnNfZm9sbG93X2xpbmsoCit4ZnNfdm5fZm9sbG93X2xpbmsoCiAJc3RydWN0IGRlbnRyeQkJKmRlbnRyeSwKIAlzdHJ1Y3QgbmFtZWlkYXRhCSpuZCkKIHsKQEAgLTU3NCw3ICs1NzUsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQl2cCA9IExJTlZGU19HRVRfVlAoZGVudHJ5LT5kX2lub2RlKTsKKwl2cCA9IHZuX2Zyb21faW5vZGUoZGVudHJ5LT5kX2lub2RlKTsKIAogCWlvdi5pb3ZfYmFzZSA9IGxpbms7CiAJaW92Lmlvdl9sZW4gPSBNQVhQQVRITEVOOwpAQCAtNTk5LDcgKzYwMCw3IEBACiB9CiAKIFNUQVRJQyB2b2lkCi1saW52ZnNfcHV0X2xpbmsoCit4ZnNfdm5fcHV0X2xpbmsoCiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5LAogCXN0cnVjdCBuYW1laWRhdGEgKm5kLAogCXZvaWQJCSpwKQpAQCAtNjEyLDEyICs2MTMsMTIgQEAKIAogI2lmZGVmIENPTkZJR19YRlNfUE9TSVhfQUNMCiBTVEFUSUMgaW50Ci1saW52ZnNfcGVybWlzc2lvbigKK3hmc192bl9wZXJtaXNzaW9uKAogCXN0cnVjdCBpbm9kZQkqaW5vZGUsCiAJaW50CQltb2RlLAogCXN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwogCWludAkJZXJyb3I7CiAKIAltb2RlIDw8PSA2OwkJLyogY29udmVydCBmcm9tIGxpbnV4IHRvIHZub2RlIGFjY2VzcyBiaXRzICovCkBAIC02MjUsMTcgKzYyNiwxNyBAQAogCXJldHVybiAtZXJyb3I7CiB9CiAjZWxzZQotI2RlZmluZSBsaW52ZnNfcGVybWlzc2lvbiBOVUxMCisjZGVmaW5lIHhmc192bl9wZXJtaXNzaW9uIE5VTEwKICNlbmRpZgogCiBTVEFUSUMgaW50Ci1saW52ZnNfZ2V0YXR0cigKK3hmc192bl9nZXRhdHRyKAogCXN0cnVjdCB2ZnNtb3VudAkqbW50LAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwKIAlzdHJ1Y3Qga3N0YXQJKnN0YXQpCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQl2bm9kZV90CQkqdnAgPSBMSU5WRlNfR0VUX1ZQKGlub2RlKTsKKwl2bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKIAlpbnQJCWVycm9yID0gMDsKIAogCWlmICh1bmxpa2VseSh2cC0+dl9mbGFnICYgVk1PRElGSUVEKSkKQEAgLTY0NiwxOCArNjQ3LDE3IEBACiB9CiAKIFNUQVRJQyBpbnQKLWxpbnZmc19zZXRhdHRyKAoreGZzX3ZuX3NldGF0dHIoCiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5LAogCXN0cnVjdCBpYXR0cgkqYXR0cikKIHsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXVuc2lnbmVkIGludAlpYV92YWxpZCA9IGF0dHItPmlhX3ZhbGlkOwotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOwotCXZhdHRyX3QJCXZhdHRyOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOworCXZhdHRyX3QJCXZhdHRyID0geyAwIH07CiAJaW50CQlmbGFncyA9IDA7CiAJaW50CQllcnJvcjsKIAotCW1lbXNldCgmdmF0dHIsIDAsIHNpemVvZih2YXR0cl90KSk7CiAJaWYgKGlhX3ZhbGlkICYgQVRUUl9VSUQpIHsKIAkJdmF0dHIudmFfbWFzayB8PSBYRlNfQVRfVUlEOwogCQl2YXR0ci52YV91aWQgPSBhdHRyLT5pYV91aWQ7CkBAIC02OTksMjggKzY5OSwyNyBAQAogI2VuZGlmCiAKIAlWT1BfU0VUQVRUUih2cCwgJnZhdHRyLCBmbGFncywgTlVMTCwgZXJyb3IpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIC1lcnJvcjsKLQl2bl9yZXZhbGlkYXRlKHZwKTsKLQlyZXR1cm4gZXJyb3I7CisJaWYgKGxpa2VseSghZXJyb3IpKQorCQlfX3ZuX3JldmFsaWRhdGUodnAsICZ2YXR0cik7CisJcmV0dXJuIC1lcnJvcjsKIH0KIAogU1RBVElDIHZvaWQKLWxpbnZmc190cnVuY2F0ZSgKK3hmc192bl90cnVuY2F0ZSgKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlKQogewotCWJsb2NrX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSwgbGludmZzX2dldF9ibG9jayk7CisJYmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplLCB4ZnNfZ2V0X2Jsb2NrKTsKIH0KIAogU1RBVElDIGludAotbGludmZzX3NldHhhdHRyKAoreGZzX3ZuX3NldHhhdHRyKAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwKIAljb25zdCBjaGFyCSpuYW1lLAogCWNvbnN0IHZvaWQJKmRhdGEsCiAJc2l6ZV90CQlzaXplLAogCWludAkJZmxhZ3MpCiB7Ci0Jdm5vZGVfdAkJKnZwID0gTElOVkZTX0dFVF9WUChkZW50cnktPmRfaW5vZGUpOworCXZub2RlX3QJCSp2cCA9IHZuX2Zyb21faW5vZGUoZGVudHJ5LT5kX2lub2RlKTsKIAljaGFyCQkqYXR0ciA9IChjaGFyICopbmFtZTsKIAlhdHRybmFtZXNfdAkqbmFtZXNwOwogCWludAkJeGZsYWdzID0gMDsKQEAgLTc0NCwxMyArNzQzLDEzIEBACiB9CiAKIFNUQVRJQyBzc2l6ZV90Ci1saW52ZnNfZ2V0eGF0dHIoCit4ZnNfdm5fZ2V0eGF0dHIoCiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5LAogCWNvbnN0IGNoYXIJKm5hbWUsCiAJdm9pZAkJKmRhdGEsCiAJc2l6ZV90CQlzaXplKQogewotCXZub2RlX3QJCSp2cCA9IExJTlZGU19HRVRfVlAoZGVudHJ5LT5kX2lub2RlKTsKKwl2bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKGRlbnRyeS0+ZF9pbm9kZSk7CiAJY2hhcgkJKmF0dHIgPSAoY2hhciAqKW5hbWU7CiAJYXR0cm5hbWVzX3QJKm5hbWVzcDsKIAlpbnQJCXhmbGFncyA9IDA7CkBAIC03NzQsMTIgKzc3MywxMiBAQAogfQogCiBTVEFUSUMgc3NpemVfdAotbGludmZzX2xpc3R4YXR0cigKK3hmc192bl9saXN0eGF0dHIoCiAJc3RydWN0IGRlbnRyeQkJKmRlbnRyeSwKIAljaGFyCQkJKmRhdGEsCiAJc2l6ZV90CQkJc2l6ZSkKIHsKLQl2bm9kZV90CQkJKnZwID0gTElOVkZTX0dFVF9WUChkZW50cnktPmRfaW5vZGUpOworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGRlbnRyeS0+ZF9pbm9kZSk7CiAJaW50CQkJZXJyb3IsIHhmbGFncyA9IEFUVFJfS0VSTkFNRUxTOwogCXNzaXplX3QJCQlyZXN1bHQ7CiAKQEAgLTc5NCwxMSArNzkzLDExIEBACiB9CiAKIFNUQVRJQyBpbnQKLWxpbnZmc19yZW1vdmV4YXR0cigKK3hmc192bl9yZW1vdmV4YXR0cigKIAlzdHJ1Y3QgZGVudHJ5CSpkZW50cnksCiAJY29uc3QgY2hhcgkqbmFtZSkKIHsKLQl2bm9kZV90CQkqdnAgPSBMSU5WRlNfR0VUX1ZQKGRlbnRyeS0+ZF9pbm9kZSk7CisJdm5vZGVfdAkJKnZwID0gdm5fZnJvbV9pbm9kZShkZW50cnktPmRfaW5vZGUpOwogCWNoYXIJCSphdHRyID0gKGNoYXIgKiluYW1lOwogCWF0dHJuYW1lc190CSpuYW1lc3A7CiAJaW50CQl4ZmxhZ3MgPSAwOwpAQCAtODE2LDQ1ICs4MTUsNDUgQEAKIH0KIAogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsaW52ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewotCS5wZXJtaXNzaW9uCQk9IGxpbnZmc19wZXJtaXNzaW9uLAotCS50cnVuY2F0ZQkJPSBsaW52ZnNfdHJ1bmNhdGUsCi0JLmdldGF0dHIJCT0gbGludmZzX2dldGF0dHIsCi0JLnNldGF0dHIJCT0gbGludmZzX3NldGF0dHIsCi0JLnNldHhhdHRyCQk9IGxpbnZmc19zZXR4YXR0ciwKLQkuZ2V0eGF0dHIJCT0gbGludmZzX2dldHhhdHRyLAotCS5saXN0eGF0dHIJCT0gbGludmZzX2xpc3R4YXR0ciwKLQkucmVtb3ZleGF0dHIJCT0gbGludmZzX3JlbW92ZXhhdHRyLAorc3RydWN0IGlub2RlX29wZXJhdGlvbnMgeGZzX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLnBlcm1pc3Npb24JCT0geGZzX3ZuX3Blcm1pc3Npb24sCisJLnRydW5jYXRlCQk9IHhmc192bl90cnVuY2F0ZSwKKwkuZ2V0YXR0cgkJPSB4ZnNfdm5fZ2V0YXR0ciwKKwkuc2V0YXR0cgkJPSB4ZnNfdm5fc2V0YXR0ciwKKwkuc2V0eGF0dHIJCT0geGZzX3ZuX3NldHhhdHRyLAorCS5nZXR4YXR0cgkJPSB4ZnNfdm5fZ2V0eGF0dHIsCisJLmxpc3R4YXR0cgkJPSB4ZnNfdm5fbGlzdHhhdHRyLAorCS5yZW1vdmV4YXR0cgkJPSB4ZnNfdm5fcmVtb3ZleGF0dHIsCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsaW52ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmNyZWF0ZQkJCT0gbGludmZzX2NyZWF0ZSwKLQkubG9va3VwCQkJPSBsaW52ZnNfbG9va3VwLAotCS5saW5rCQkJPSBsaW52ZnNfbGluaywKLQkudW5saW5rCQkJPSBsaW52ZnNfdW5saW5rLAotCS5zeW1saW5rCQk9IGxpbnZmc19zeW1saW5rLAotCS5ta2RpcgkJCT0gbGludmZzX21rZGlyLAotCS5ybWRpcgkJCT0gbGludmZzX3JtZGlyLAotCS5ta25vZAkJCT0gbGludmZzX21rbm9kLAotCS5yZW5hbWUJCQk9IGxpbnZmc19yZW5hbWUsCi0JLnBlcm1pc3Npb24JCT0gbGludmZzX3Blcm1pc3Npb24sCi0JLmdldGF0dHIJCT0gbGludmZzX2dldGF0dHIsCi0JLnNldGF0dHIJCT0gbGludmZzX3NldGF0dHIsCi0JLnNldHhhdHRyCQk9IGxpbnZmc19zZXR4YXR0ciwKLQkuZ2V0eGF0dHIJCT0gbGludmZzX2dldHhhdHRyLAotCS5saXN0eGF0dHIJCT0gbGludmZzX2xpc3R4YXR0ciwKLQkucmVtb3ZleGF0dHIJCT0gbGludmZzX3JlbW92ZXhhdHRyLAorc3RydWN0IGlub2RlX29wZXJhdGlvbnMgeGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0geworCS5jcmVhdGUJCQk9IHhmc192bl9jcmVhdGUsCisJLmxvb2t1cAkJCT0geGZzX3ZuX2xvb2t1cCwKKwkubGluawkJCT0geGZzX3ZuX2xpbmssCisJLnVubGluawkJCT0geGZzX3ZuX3VubGluaywKKwkuc3ltbGluawkJPSB4ZnNfdm5fc3ltbGluaywKKwkubWtkaXIJCQk9IHhmc192bl9ta2RpciwKKwkucm1kaXIJCQk9IHhmc192bl9ybWRpciwKKwkubWtub2QJCQk9IHhmc192bl9ta25vZCwKKwkucmVuYW1lCQkJPSB4ZnNfdm5fcmVuYW1lLAorCS5wZXJtaXNzaW9uCQk9IHhmc192bl9wZXJtaXNzaW9uLAorCS5nZXRhdHRyCQk9IHhmc192bl9nZXRhdHRyLAorCS5zZXRhdHRyCQk9IHhmc192bl9zZXRhdHRyLAorCS5zZXR4YXR0cgkJPSB4ZnNfdm5fc2V0eGF0dHIsCisJLmdldHhhdHRyCQk9IHhmc192bl9nZXR4YXR0ciwKKwkubGlzdHhhdHRyCQk9IHhmc192bl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyCQk9IHhmc192bl9yZW1vdmV4YXR0ciwKIH07CiAKLXN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxpbnZmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CitzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB4ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewogCS5yZWFkbGluawkJPSBnZW5lcmljX3JlYWRsaW5rLAotCS5mb2xsb3dfbGluawkJPSBsaW52ZnNfZm9sbG93X2xpbmssCi0JLnB1dF9saW5rCQk9IGxpbnZmc19wdXRfbGluaywKLQkucGVybWlzc2lvbgkJPSBsaW52ZnNfcGVybWlzc2lvbiwKLQkuZ2V0YXR0cgkJPSBsaW52ZnNfZ2V0YXR0ciwKLQkuc2V0YXR0cgkJPSBsaW52ZnNfc2V0YXR0ciwKLQkuc2V0eGF0dHIJCT0gbGludmZzX3NldHhhdHRyLAotCS5nZXR4YXR0cgkJPSBsaW52ZnNfZ2V0eGF0dHIsCi0JLmxpc3R4YXR0cgkJPSBsaW52ZnNfbGlzdHhhdHRyLAotCS5yZW1vdmV4YXR0cgkJPSBsaW52ZnNfcmVtb3ZleGF0dHIsCisJLmZvbGxvd19saW5rCQk9IHhmc192bl9mb2xsb3dfbGluaywKKwkucHV0X2xpbmsJCT0geGZzX3ZuX3B1dF9saW5rLAorCS5wZXJtaXNzaW9uCQk9IHhmc192bl9wZXJtaXNzaW9uLAorCS5nZXRhdHRyCQk9IHhmc192bl9nZXRhdHRyLAorCS5zZXRhdHRyCQk9IHhmc192bl9zZXRhdHRyLAorCS5zZXR4YXR0cgkJPSB4ZnNfdm5fc2V0eGF0dHIsCisJLmdldHhhdHRyCQk9IHhmc192bl9nZXR4YXR0ciwKKwkubGlzdHhhdHRyCQk9IHhmc192bl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyCQk9IHhmc192bl9yZW1vdmV4YXR0ciwKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmgKaW5kZXggNjg5OWE2Yi4uYTg0MTdkNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuaApAQCAtMTgsMTMgKzE4LDEzIEBACiAjaWZuZGVmIF9fWEZTX0lPUFNfSF9fCiAjZGVmaW5lIF9fWEZTX0lPUFNfSF9fCiAKLWV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsaW52ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxpbnZmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsaW52ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHhmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB4ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCi1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaW52ZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGludmZzX2ludmlzX2ZpbGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxpbnZmc19kaXJfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhmc19pbnZpc19maWxlX29wZXJhdGlvbnM7CiAKIGV4dGVybiBpbnQgeGZzX2lvY3RsKHN0cnVjdCBiaHZfZGVzYyAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgdW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCmluZGV4IDY3Mzg5YjcuLjFmZTA5ZjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaApAQCAtNzMsNiArNzMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC0xMDAsNiArMTAzLDExIEBACiAgKi8KICN1bmRlZiAgSEFWRV9SRUZDQUNIRQkvKiByZWZlcmVuY2UgY2FjaGUgbm90IG5lZWRlZCBmb3IgTkZTIGluIDIuNiAqLwogI2RlZmluZSBIQVZFX1NFTkRGSUxFCS8qIHNlbmRmaWxlKDIpIGV4aXN0cyBpbiAyLjYsIGJ1dCBub3QgaW4gMi40ICovCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBIQVZFX1BFUkNQVV9TQgkvKiBwZXIgY3B1IHN1cGVyYmxvY2sgY291bnRlcnMgYXJlIGEgMi42IGZlYXR1cmUgKi8KKyNlbHNlCisjdW5kZWYgIEhBVkVfUEVSQ1BVX1NCCS8qIHBlciBjcHUgc3VwZXJibG9jayBjb3VudGVycyBhcmUgYSAyLjYgZmVhdHVyZSAqLworI2VuZGlmCiAKIC8qCiAgKiBTdGF0ZSBmbGFnIGZvciB1bndyaXR0ZW4gZXh0ZW50IGJ1ZmZlcnMuCkBAIC0yMjYsNyArMjM0LDcgQEAKICNkZWZpbmUgeGZzX3NvcnQoYSxuLHMsZm4pCXNvcnQoYSxuLHMsZm4sTlVMTCkKICNkZWZpbmUgeGZzX3N0YWNrX3RyYWNlKCkJZHVtcF9zdGFjaygpCiAjZGVmaW5lIHhmc19pdHJ1bmNhdGVfZGF0YShpcCwgb2ZmKQlcCi0JKC12bXRydW5jYXRlKExJTlZGU19HRVRfSVAoWEZTX0lUT1YoaXApKSwgKG9mZikpKQorCSgtdm10cnVuY2F0ZSh2bl90b19pbm9kZShYRlNfSVRPVihpcCkpLCAob2ZmKSkpCiAjZGVmaW5lIHhmc19zdGF0dmZzX2ZzaWQoc3RhdHAsIG1wKQlcCiAJKHsgdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KChtcCktPm1fZGRldl90YXJncC0+YnRfZGV2KTsgXAogCSAgIF9fa2VybmVsX2ZzaWRfdCAqZnNpZCA9ICYoc3RhdHApLT5mX2ZzaWQ7CVwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggZTBhYjQ1Zi4uMDE2OTM2MCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpaW9mbGFncyksCiAJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgoaW8tPmlvX25ld19zaXplID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwKIAkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGlvLT5pb19uZXdfc2l6ZSAmIDB4ZmZmZmZmZmYpKSwKLQkJKHZvaWQgKilOVUxMLAorCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZyljdXJyZW50X3BpZCgpKSwKIAkJKHZvaWQgKilOVUxMLAogCQkodm9pZCAqKU5VTEwsCiAJCSh2b2lkICopTlVMTCwKQEAgLTExMyw3ICsxMTMsNyBAQAogCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoZmlyc3QgJiAweGZmZmZmZmZmKSksCiAJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgobGFzdCA+PiAzMikgJiAweGZmZmZmZmZmKSksCiAJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShsYXN0ICYgMHhmZmZmZmZmZikpLAotCQkodm9pZCAqKU5VTEwsCisJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfcGlkKCkpLAogCQkodm9pZCAqKU5VTEwsCiAJCSh2b2lkICopTlVMTCwKIAkJKHZvaWQgKilOVUxMLApAQCAtMjQ5LDkgKzI0OSw4IEBACiAJaWYgKG4gPCBzaXplKQogCQlzaXplID0gbjsKIAotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgeworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJcmV0dXJuIC1FSU87Ci0JfQogCiAJaWYgKHVubGlrZWx5KGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpCiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKQEAgLTI2NywxMCArMjY2LDE0IEBACiAJCQkJCWRtZmxhZ3MsICZsb2NrdHlwZSk7CiAJCWlmIChyZXQpIHsKIAkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0JCQlnb3RvIHVubG9ja19pc2VtOworCQkJZ290byB1bmxvY2tfbXV0ZXg7CiAJCX0KIAl9CiAKKwlpZiAodW5saWtlbHkoKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkgJiYgVk5fQ0FDSEVEKHZwKSkpCisJCVZPUF9GTFVTSElOVkFMX1BBR0VTKHZwLCBjdG9vZmYob2ZmdG9jdCgqb2Zmc2V0KSksCisJCQkJCQktMSwgRklfUkVNQVBGX0xPQ0tFRCk7CisKIAl4ZnNfcndfZW50ZXJfdHJhY2UoWEZTX1JFQURfRU5URVIsICZpcC0+aV9pb2NvcmUsCiAJCQkJKHZvaWQgKilpb3ZwLCBzZWdzLCAqb2Zmc2V0LCBpb2ZsYWdzKTsKIAlyZXQgPSBfX2dlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCBpb3ZwLCBzZWdzLCBvZmZzZXQpOwpAQCAtMjgxLDcgKzI4NCw3IEBACiAKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwogCi11bmxvY2tfaXNlbToKK3VubG9ja19tdXRleDoKIAlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTQzMiw3ICs0MzUsNyBAQAogCXhmc19mc2l6ZV90CWlzaXplLAkJLyogY3VycmVudCBpbm9kZSBzaXplICovCiAJeGZzX2ZzaXplX3QJZW5kX3NpemUpCS8qIHRlcm1pbmFsIGlub2RlIHNpemUgKi8KIHsKLQlzdHJ1Y3QgaW5vZGUJKmlwID0gTElOVkZTX0dFVF9JUCh2cCk7CisJc3RydWN0IGlub2RlCSppcCA9IHZuX3RvX2lub2RlKHZwKTsKIAl4ZnNfZmlsZW9mZl90CXN0YXJ0X3plcm9fZnNiOwogCXhmc19maWxlb2ZmX3QJZW5kX3plcm9fZnNiOwogCXhmc19maWxlb2ZmX3QJemVyb19jb3VudF9mc2I7CkBAIC01NzMsNyArNTc2LDcgQEAKIAl2cndsb2NrX3QJCWxvY2t0eXBlOwogCXNpemVfdAkJCW9jb3VudCA9IDAsIGNvdW50OwogCWxvZmZfdAkJCXBvczsKLQlpbnQJCQluZWVkX2lzZW0gPSAxLCBuZWVkX2ZsdXNoID0gMDsKKwlpbnQJCQluZWVkX2lfbXV0ZXggPSAxLCBuZWVkX2ZsdXNoID0gMDsKIAogCVhGU19TVEFUU19JTkMoeHNfd3JpdGVfY2FsbHMpOwogCkBAIC02MjIsMTQgKzYyNSwxNCBAQAogCQkJcmV0dXJuIFhGU19FUlJPUigtRUlOVkFMKTsKIAogCQlpZiAoIVZOX0NBQ0hFRCh2cCkgJiYgcG9zIDwgaV9zaXplX3JlYWQoaW5vZGUpKQotCQkJbmVlZF9pc2VtID0gMDsKKwkJCW5lZWRfaV9tdXRleCA9IDA7CiAKIAkJaWYgKFZOX0NBQ0hFRCh2cCkpCiAJCQluZWVkX2ZsdXNoID0gMTsKIAl9CiAKIHJlbG9jazoKLQlpZiAobmVlZF9pc2VtKSB7CisJaWYgKG5lZWRfaV9tdXRleCkgewogCQlpb2xvY2sgPSBYRlNfSU9MT0NLX0VYQ0w7CiAJCWxvY2t0eXBlID0gVlJXTE9DS19XUklURTsKIApAQCAtNjUxLDcgKzY1NCw3IEBACiAJCQkJCVNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpOwogCWlmIChlcnJvcikgewogCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7Ci0JCWdvdG8gb3V0X3VubG9ja19pc2VtOworCQlnb3RvIG91dF91bmxvY2tfbXV0ZXg7CiAJfQogCiAJbmV3X3NpemUgPSBwb3MgKyBjb3VudDsKQEAgLTY2Myw3ICs2NjYsNyBAQAogCQlsb2ZmX3QJCXNhdmVkc2l6ZSA9IHBvczsKIAkJaW50CQlkbWZsYWdzID0gRklMUF9ERUxBWV9GTEFHKGZpbGUpOwogCi0JCWlmIChuZWVkX2lzZW0pCisJCWlmIChuZWVkX2lfbXV0ZXgpCiAJCQlkbWZsYWdzIHw9IERNX0ZMQUdTX0lNVVg7CiAKIAkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTCk7CkBAIC02NzIsNyArNjc1LDcgQEAKIAkJCQkgICAgICBkbWZsYWdzLCAmbG9ja3R5cGUpOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKLQkJCWdvdG8gb3V0X3VubG9ja19pc2VtOworCQkJZ290byBvdXRfdW5sb2NrX211dGV4OwogCQl9CiAJCXhmc19pbG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKIAkJZXZlbnRzZW50ID0gMTsKQEAgLTcxMCw3ICs3MTMsNyBAQAogCQkJCQlpc2l6ZSwgcG9zICsgY291bnQpOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKLQkJCWdvdG8gb3V0X3VubG9ja19pc2VtOworCQkJZ290byBvdXRfdW5sb2NrX211dGV4OwogCQl9CiAJfQogCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwpAQCAtNzMxLDcgKzczNCw3IEBACiAJCQllcnJvciA9IC1yZW1vdmVfc3VpZChmaWxlLT5mX2RlbnRyeSk7CiAJCWlmICh1bmxpa2VseShlcnJvcikpIHsKIAkJCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKLQkJCWdvdG8gb3V0X3VubG9ja19pc2VtOworCQkJZ290byBvdXRfdW5sb2NrX211dGV4OwogCQl9CiAJfQogCkBAIC03NDcsMTQgKzc1MCwxNCBAQAogCQkJCQktMSwgRklfUkVNQVBGX0xPQ0tFRCk7CiAJCX0KIAotCQlpZiAobmVlZF9pc2VtKSB7CisJCWlmIChuZWVkX2lfbXV0ZXgpIHsKIAkJCS8qIGRlbW90ZSB0aGUgbG9jayBub3cgdGhlIGNhY2hlZCBwYWdlcyBhcmUgZ29uZSAqLwogCQkJWEZTX0lMT0NLX0RFTU9URShtcCwgaW8sIFhGU19JT0xPQ0tfRVhDTCk7CiAJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAogCQkJaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7CiAJCQlsb2NrdHlwZSA9IFZSV0xPQ0tfV1JJVEVfRElSRUNUOwotCQkJbmVlZF9pc2VtID0gMDsKKwkJCW5lZWRfaV9tdXRleCA9IDA7CiAJCX0KIAogIAkJeGZzX3J3X2VudGVyX3RyYWNlKFhGU19ESU9XUl9FTlRFUiwgaW8sICh2b2lkICopaW92cCwgc2VncywKQEAgLTc3Miw3ICs3NzUsNyBAQAogCQkJcG9zICs9IHJldDsKIAkJCWNvdW50IC09IHJldDsKIAotCQkJbmVlZF9pc2VtID0gMTsKKwkJCW5lZWRfaV9tdXRleCA9IDE7CiAJCQlpb2ZsYWdzICY9IH5JT19JU0RJUkVDVDsKIAkJCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKIAkJCWdvdG8gcmVsb2NrOwpAQCAtNzk0LDE0ICs3OTcsMTQgQEAKIAkgICAgIShpb2ZsYWdzICYgSU9fSU5WSVMpKSB7CiAKIAkJeGZzX3J3dW5sb2NrKGJkcCwgbG9ja3R5cGUpOwotCQlpZiAobmVlZF9pc2VtKQorCQlpZiAobmVlZF9pX211dGV4KQogCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKHhpcC0+aV9tb3VudCwgRE1fRVZFTlRfTk9TUEFDRSwgdnAsCiAJCQkJRE1fUklHSFRfTlVMTCwgdnAsIERNX1JJR0hUX05VTEwsIE5VTEwsIE5VTEwsCiAJCQkJMCwgMCwgMCk7IC8qIERlbGF5IGZsYWcgaW50ZW50aW9uYWxseSAgdW51c2VkICovCiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X25vdW5sb2NrczsKLQkJaWYgKG5lZWRfaXNlbSkKKwkJaWYgKG5lZWRfaV9tdXRleCkKIAkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAkJeGZzX3J3bG9jayhiZHAsIGxvY2t0eXBlKTsKIAkJcG9zID0geGlwLT5pX2QuZGlfc2l6ZTsKQEAgLTkwNSw5ICs5MDgsOSBAQAogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKIAkJfQotCQorCiAJCXhmc19yd3VubG9jayhiZHAsIGxvY2t0eXBlKTsKLQkJaWYgKG5lZWRfaXNlbSkKKwkJaWYgKG5lZWRfaV9tdXRleCkKIAkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCiAJCWVycm9yID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7CkBAIC05MTgsOCArOTIxLDggQEAKIAogIG91dF91bmxvY2tfaW50ZXJuYWw6CiAJeGZzX3J3dW5sb2NrKGJkcCwgbG9ja3R5cGUpOwotIG91dF91bmxvY2tfaXNlbToKLQlpZiAobmVlZF9pc2VtKQorIG91dF91bmxvY2tfbXV0ZXg6CisJaWYgKG5lZWRfaV9tdXRleCkKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAgb3V0X25vdW5sb2NrczoKIAlyZXR1cm4gLWVycm9yOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3RhdHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N0YXRzLmMKaW5kZXggODk1NTcyMC4uMWYwNTg5YSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3RhdHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdGF0cy5jCkBAIC01NiwyNCArNTYsMjEgQEAKIAl9OwogCiAJLyogTG9vcCBvdmVyIGFsbCBzdGF0cyBncm91cHMgKi8KLQlmb3IgKGk9aj1sZW4gPSAwOyBpIDwgc2l6ZW9mKHhzdGF0cykvc2l6ZW9mKHN0cnVjdCB4c3RhdHNfZW50cnkpOyBpKyspIHsKKwlmb3IgKGk9aj1sZW4gPSAwOyBpIDwgQVJSQVlfU0laRSh4c3RhdHMpOyBpKyspIHsKIAkJbGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCB4c3RhdHNbaV0uZGVzYyk7CiAJCS8qIGlubmVyIGxvb3AgZG9lcyBlYWNoIGdyb3VwICovCiAJCXdoaWxlIChqIDwgeHN0YXRzW2ldLmVuZHBvaW50KSB7CiAJCQl2YWwgPSAwOwogCQkJLyogc3VtIG92ZXIgYWxsIGNwdXMgKi8KLQkJCWZvciAoYyA9IDA7IGMgPCBOUl9DUFVTOyBjKyspIHsKLQkJCQlpZiAoIWNwdV9wb3NzaWJsZShjKSkgY29udGludWU7CisJCQlmb3JfZWFjaF9jcHUoYykKIAkJCQl2YWwgKz0gKigoKF9fdTMyKikmcGVyX2NwdSh4ZnNzdGF0cywgYykgKyBqKSk7Ci0JCQl9CiAJCQlsZW4gKz0gc3ByaW50ZihidWZmZXIgKyBsZW4sICIgJXUiLCB2YWwpOwogCQkJaisrOwogCQl9CiAJCWJ1ZmZlcltsZW4rK10gPSAnXG4nOwogCX0KIAkvKiBleHRyYSBwcmVjaXNpb24gY291bnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmICghY3B1X3Bvc3NpYmxlKGkpKSBjb250aW51ZTsKKwlmb3JfZWFjaF9jcHUoaSkgewogCQl4c194c3RyYXRfYnl0ZXMgKz0gcGVyX2NwdSh4ZnNzdGF0cywgaSkueHNfeHN0cmF0X2J5dGVzOwogCQl4c193cml0ZV9ieXRlcyArPSBwZXJfY3B1KHhmc3N0YXRzLCBpKS54c193cml0ZV9ieXRlczsKIAkJeHNfcmVhZF9ieXRlcyArPSBwZXJfY3B1KHhmc3N0YXRzLCBpKS54c19yZWFkX2J5dGVzOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggZjIyZTQyNi4uODM1NWZhZiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC01OSw4ICs1OSw4IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCi1TVEFUSUMgc3RydWN0IHF1b3RhY3RsX29wcyBsaW52ZnNfcW9wczsKLVNUQVRJQyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBsaW52ZnNfc29wczsKK1NUQVRJQyBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zOworU1RBVElDIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHhmc19zdXBlcl9vcGVyYXRpb25zOwogU1RBVElDIGttZW1fem9uZV90ICp4ZnNfdm5vZGVfem9uZTsKIFNUQVRJQyBrbWVtX3pvbmVfdCAqeGZzX2lvZW5kX3pvbmU7CiBtZW1wb29sX3QgKnhmc19pb2VuZF9wb29sOwpAQCAtNzYsOCArNzYsNiBAQAogCXN0cm5jcHkoYXJncy0+ZnNuYW1lLCBzYi0+c19pZCwgTUFYTkFNRUxFTik7CiAKIAkvKiBDb3B5IHRoZSBhbHJlYWR5LXBhcnNlZCBtb3VudCgyKSBmbGFncyB3ZSdyZSBpbnRlcmVzdGVkIGluICovCi0JaWYgKHNiLT5zX2ZsYWdzICYgTVNfTk9BVElNRSkKLQkJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX05PQVRJTUU7CiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfRElSU1lOQykKIAkJYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0RJUlNZTkM7CiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfU1lOQ0hST05PVVMpCkBAIC0xMjksMjEgKzEyNywyMSBAQAogewogCXN3aXRjaCAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgewogCWNhc2UgU19JRlJFRzoKLQkJaW5vZGUtPmlfb3AgPSAmbGludmZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtPmlfZm9wID0gJmxpbnZmc19maWxlX29wZXJhdGlvbnM7Ci0JCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmxpbnZmc19hb3BzOworCQlpbm9kZS0+aV9vcCA9ICZ4ZnNfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfZm9wID0gJnhmc19maWxlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJnhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnM7CiAJCWJyZWFrOwogCWNhc2UgU19JRkRJUjoKLQkJaW5vZGUtPmlfb3AgPSAmbGludmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotCQlpbm9kZS0+aV9mb3AgPSAmbGludmZzX2Rpcl9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9vcCA9ICZ4ZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZ4ZnNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGTE5LOgotCQlpbm9kZS0+aV9vcCA9ICZsaW52ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9vcCA9ICZ4ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpZiAoaW5vZGUtPmlfYmxvY2tzKQotCQkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmbGludmZzX2FvcHM7CisJCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZ4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlpbm9kZS0+aV9vcCA9ICZsaW52ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9vcCA9ICZ4ZnNfaW5vZGVfb3BlcmF0aW9uczsKIAkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9yZGV2KTsKIAkJYnJlYWs7CiAJfQpAQCAtMTU1LDcgKzE1Myw3IEBACiAJdm5vZGVfdAkJCSp2cCwKIAl4ZnNfaW5vZGVfdAkJKmlwKQogewotCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gTElOVkZTX0dFVF9JUCh2cCk7CisJc3RydWN0IGlub2RlCQkqaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAKIAlpbm9kZS0+aV9tb2RlCT0gaXAtPmlfZC5kaV9tb2RlOwogCWlub2RlLT5pX25saW5rCT0gaXAtPmlfZC5kaV9ubGluazsKQEAgLTIxMiw3ICsyMTAsNyBAQAogCWludAkJCXVubG9jaykKIHsKIAl4ZnNfaW5vZGVfdAkJKmlwID0gWEZTX0JIVlRPSShpbm9kZV9iaHYpOwotCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gTElOVkZTX0dFVF9JUCh2cCk7CisJc3RydWN0IGlub2RlCQkqaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAKIAlpZiAoIWlub2RlX2Jodi0+YmRfdm9iaikgewogCQl2cC0+dl92ZnNwID0gYmh2dG92ZnMoYmRwKTsKQEAgLTIzMCw3ICsyMjgsNyBAQAogCWlmIChpcC0+aV9kLmRpX21vZGUgIT0gMCAmJiB1bmxvY2sgJiYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKSB7CiAJCXhmc19yZXZhbGlkYXRlX2lub2RlKFhGU19CSFZUT00oYmRwKSwgdnAsIGlwKTsKIAkJeGZzX3NldF9pbm9kZW9wcyhpbm9kZSk7Ci0JCisKIAkJaXAtPmlfZmxhZ3MgJj0gflhGU19JTkVXOwogCQliYXJyaWVyKCk7CiAKQEAgLTMzNCw0MyArMzMyLDQyIEBACiB9CiAKIFNUQVRJQyBzdHJ1Y3QgaW5vZGUgKgotbGludmZzX2FsbG9jX2lub2RlKAoreGZzX2ZzX2FsbG9jX2lub2RlKAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IpCiB7CiAJdm5vZGVfdAkJCSp2cDsKIAotCXZwID0ga21lbV9jYWNoZV9hbGxvYyh4ZnNfdm5vZGVfem9uZSwga21lbV9mbGFnc19jb252ZXJ0KEtNX1NMRUVQKSk7Ci0JaWYgKCF2cCkKKwl2cCA9IGttZW1fem9uZV9hbGxvYyh4ZnNfdm5vZGVfem9uZSwgS01fU0xFRVApOworCWlmICh1bmxpa2VseSghdnApKQogCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gTElOVkZTX0dFVF9JUCh2cCk7CisJcmV0dXJuIHZuX3RvX2lub2RlKHZwKTsKIH0KIAogU1RBVElDIHZvaWQKLWxpbnZmc19kZXN0cm95X2lub2RlKAoreGZzX2ZzX2Rlc3Ryb3lfaW5vZGUoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUpCiB7Ci0Ja21lbV96b25lX2ZyZWUoeGZzX3Zub2RlX3pvbmUsIExJTlZGU19HRVRfVlAoaW5vZGUpKTsKKwlrbWVtX3pvbmVfZnJlZSh4ZnNfdm5vZGVfem9uZSwgdm5fZnJvbV9pbm9kZShpbm9kZSkpOwogfQogCiBTVEFUSUMgdm9pZAotbGludmZzX2lub2RlX2luaXRfb25jZSgKLQl2b2lkCQkJKmRhdGEsCi0Ja21lbV9jYWNoZV90CQkqY2FjaGVwLAoreGZzX2ZzX2lub2RlX2luaXRfb25jZSgKKwl2b2lkCQkJKnZub2RlLAorCWttZW1fem9uZV90CQkqem9uZXAsCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3MpCiB7Ci0Jdm5vZGVfdAkJCSp2cCA9ICh2bm9kZV90ICopZGF0YTsKLQogCWlmICgoZmxhZ3MgJiAoU0xBQl9DVE9SX1ZFUklGWXxTTEFCX0NUT1JfQ09OU1RSVUNUT1IpKSA9PQotCSAgICBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JCWlub2RlX2luaXRfb25jZShMSU5WRlNfR0VUX0lQKHZwKSk7CisJCSAgICAgIFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikKKwkJaW5vZGVfaW5pdF9vbmNlKHZuX3RvX2lub2RlKCh2bm9kZV90ICopdm5vZGUpKTsKIH0KIAogU1RBVElDIGludAotbGludmZzX2luaXRfem9uZXModm9pZCkKK3hmc19pbml0X3pvbmVzKHZvaWQpCiB7Ci0JeGZzX3Zub2RlX3pvbmUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgieGZzX3Zub2RlIiwKLQkJCQlzaXplb2Yodm5vZGVfdCksIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAotCQkJCWxpbnZmc19pbm9kZV9pbml0X29uY2UsIE5VTEwpOworCXhmc192bm9kZV96b25lID0ga21lbV96b25lX2luaXRfZmxhZ3Moc2l6ZW9mKHZub2RlX3QpLCAieGZzX3Zub2RlX3QiLAorCQkJCQlLTV9aT05FX0hXQUxJR04gfCBLTV9aT05FX1JFQ0xBSU0gfAorCQkJCQlLTV9aT05FX1NQUkVBRCwKKwkJCQkJeGZzX2ZzX2lub2RlX2luaXRfb25jZSk7CiAJaWYgKCF4ZnNfdm5vZGVfem9uZSkKIAkJZ290byBvdXQ7CiAKQEAgLTM3OSwxNCArMzc2LDEyIEBACiAJCWdvdG8gb3V0X2Rlc3Ryb3lfdm5vZGVfem9uZTsKIAogCXhmc19pb2VuZF9wb29sID0gbWVtcG9vbF9jcmVhdGUoNCAqIE1BWF9CVUZfUEVSX1BBR0UsCi0JCQltZW1wb29sX2FsbG9jX3NsYWIsIG1lbXBvb2xfZnJlZV9zbGFiLAotCQkJeGZzX2lvZW5kX3pvbmUpOworCQkJCQltZW1wb29sX2FsbG9jX3NsYWIsIG1lbXBvb2xfZnJlZV9zbGFiLAorCQkJCQl4ZnNfaW9lbmRfem9uZSk7CiAJaWYgKCF4ZnNfaW9lbmRfcG9vbCkKIAkJZ290byBvdXRfZnJlZV9pb2VuZF96b25lOwotCiAJcmV0dXJuIDA7CiAKLQogIG91dF9mcmVlX2lvZW5kX3pvbmU6CiAJa21lbV96b25lX2Rlc3Ryb3koeGZzX2lvZW5kX3pvbmUpOwogIG91dF9kZXN0cm95X3Zub2RlX3pvbmU6CkBAIC0zOTYsNyArMzkxLDcgQEAKIH0KIAogU1RBVElDIHZvaWQKLWxpbnZmc19kZXN0cm95X3pvbmVzKHZvaWQpCit4ZnNfZGVzdHJveV96b25lcyh2b2lkKQogewogCW1lbXBvb2xfZGVzdHJveSh4ZnNfaW9lbmRfcG9vbCk7CiAJa21lbV96b25lX2Rlc3Ryb3koeGZzX3Zub2RlX3pvbmUpOwpAQCAtNDA3LDE0ICs0MDIsMTQgQEAKICAqIEF0dGVtcHQgdG8gZmx1c2ggdGhlIGlub2RlLCB0aGlzIHdpbGwgYWN0dWFsbHkgZmFpbAogICogaWYgdGhlIGlub2RlIGlzIHBpbm5lZCwgYnV0IHdlIGRpcnR5IHRoZSBpbm9kZSBhZ2FpbgogICogYXQgdGhlIHBvaW50IHdoZW4gaXQgaXMgdW5waW5uZWQgYWZ0ZXIgYSBsb2cgd3JpdGUsCi0gKiBzaW5jZSB0aGlzIGlzIHdoZW4gdGhlIGlub2RlIGl0c2VsZiBiZWNvbWVzIGZsdXNoYWJsZS4gCisgKiBzaW5jZSB0aGlzIGlzIHdoZW4gdGhlIGlub2RlIGl0c2VsZiBiZWNvbWVzIGZsdXNoYWJsZS4KICAqLwogU1RBVElDIGludAotbGludmZzX3dyaXRlX2lub2RlKAoreGZzX2ZzX3dyaXRlX2lub2RlKAogCXN0cnVjdCBpbm9kZQkJKmlub2RlLAogCWludAkJCXN5bmMpCiB7Ci0Jdm5vZGVfdAkJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKIAlpbnQJCQllcnJvciA9IDAsIGZsYWdzID0gRkxVU0hfSU5PREU7CiAKIAlpZiAodnApIHsKQEAgLTQzNCwxMyArNDI5LDEzIEBACiB9CiAKIFNUQVRJQyB2b2lkCi1saW52ZnNfY2xlYXJfaW5vZGUoCit4ZnNfZnNfY2xlYXJfaW5vZGUoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUpCiB7Ci0Jdm5vZGVfdAkJCSp2cCA9IExJTlZGU19HRVRfVlAoaW5vZGUpOworCXZub2RlX3QJCQkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKIAlpbnQJCQllcnJvciwgY2FjaGU7CiAKLQl2bl90cmFjZV9lbnRyeSh2cCwgImNsZWFyX2lub2RlIiwgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOworCXZuX3RyYWNlX2VudHJ5KHZwLCBfX0ZVTkNUSU9OX18sIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKIAogCVhGU19TVEFUU19JTkModm5fcmVsZSk7CiAJWEZTX1NUQVRTX0lOQyh2bl9yZW1vdmUpOwpAQCAtNTE2LDcgKzUxMSw3IEBACiB4ZnNfZmx1c2hfaW5vZGUoCiAJeGZzX2lub2RlX3QJKmlwKQogewotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBMSU5WRlNfR0VUX0lQKFhGU19JVE9WKGlwKSk7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKFhGU19JVE9WKGlwKSk7CiAJc3RydWN0IHZmcwkqdmZzID0gWEZTX01UT1ZGUyhpcC0+aV9tb3VudCk7CiAKIAlpZ3JhYihpbm9kZSk7CkBAIC01NDEsNyArNTM2LDcgQEAKIHhmc19mbHVzaF9kZXZpY2UoCiAJeGZzX2lub2RlX3QJKmlwKQogewotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBMSU5WRlNfR0VUX0lQKFhGU19JVE9WKGlwKSk7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKFhGU19JVE9WKGlwKSk7CiAJc3RydWN0IHZmcwkqdmZzID0gWEZTX01UT1ZGUyhpcC0+aV9tb3VudCk7CiAKIAlpZ3JhYihpbm9kZSk7CkBAIC01NTAsNyArNTQ1LDcgQEAKIAl4ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LCAoeGZzX2xzbl90KTAsIFhGU19MT0dfRk9SQ0V8WEZTX0xPR19TWU5DKTsKIH0KIAotI2RlZmluZSBTWU5DRF9GTEFHUwkoU1lOQ19GU0RBVEF8U1lOQ19CREZMVVNIfFNZTkNfQVRUUikKKyNkZWZpbmUgU1lOQ0RfRkxBR1MJKFNZTkNfRlNEQVRBfFNZTkNfQkRGTFVTSHxTWU5DX0FUVFJ8U1lOQ19SRUZDQUNIRSkKIFNUQVRJQyB2b2lkCiB2ZnNfc3luY193b3JrZXIoCiAJdmZzX3QJCSp2ZnNwLApAQCAtNjEzLDcgKzYwOCw3IEBACiB9CiAKIFNUQVRJQyBpbnQKLWxpbnZmc19zdGFydF9zeW5jZCgKK3hmc19mc19zdGFydF9zeW5jZCgKIAl2ZnNfdAkJCSp2ZnNwKQogewogCXZmc3AtPnZmc19zeW5jX3dvcmsud19zeW5jZXIgPSB2ZnNfc3luY193b3JrZXI7CkBAIC02MjUsMjAgKzYyMCwyMCBAQAogfQogCiBTVEFUSUMgdm9pZAotbGludmZzX3N0b3Bfc3luY2QoCit4ZnNfZnNfc3RvcF9zeW5jZCgKIAl2ZnNfdAkJCSp2ZnNwKQogewogCWt0aHJlYWRfc3RvcCh2ZnNwLT52ZnNfc3luY190YXNrKTsKIH0KIAogU1RBVElDIHZvaWQKLWxpbnZmc19wdXRfc3VwZXIoCit4ZnNfZnNfcHV0X3N1cGVyKAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IpCiB7Ci0JdmZzX3QJCQkqdmZzcCA9IExJTlZGU19HRVRfVkZTKHNiKTsKKwl2ZnNfdAkJCSp2ZnNwID0gdmZzX2Zyb21fc2Ioc2IpOwogCWludAkJCWVycm9yOwogCi0JbGludmZzX3N0b3Bfc3luY2QodmZzcCk7CisJeGZzX2ZzX3N0b3Bfc3luY2QodmZzcCk7CiAJVkZTX1NZTkModmZzcCwgU1lOQ19BVFRSfFNZTkNfREVMV1JJLCBOVUxMLCBlcnJvcik7CiAJaWYgKCFlcnJvcikKIAkJVkZTX1VOTU9VTlQodmZzcCwgMCwgTlVMTCwgZXJyb3IpOwpAQCAtNjUyLDEwICs2NDcsMTAgQEAKIH0KIAogU1RBVElDIHZvaWQKLWxpbnZmc193cml0ZV9zdXBlcigKK3hmc19mc193cml0ZV9zdXBlcigKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiKQogewotCXZmc190CQkJKnZmc3AgPSBMSU5WRlNfR0VUX1ZGUyhzYik7CisJdmZzX3QJCQkqdmZzcCA9IHZmc19mcm9tX3NiKHNiKTsKIAlpbnQJCQllcnJvcjsKIAogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkgewpAQCAtNjY4LDExICs2NjMsMTEgQEAKIH0KIAogU1RBVElDIGludAotbGludmZzX3N5bmNfc3VwZXIoCit4ZnNfZnNfc3luY19zdXBlcigKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAogCWludAkJCXdhaXQpCiB7Ci0JdmZzX3QJCSp2ZnNwID0gTElOVkZTX0dFVF9WRlMoc2IpOworCXZmc190CQkqdmZzcCA9IHZmc19mcm9tX3NiKHNiKTsKIAlpbnQJCWVycm9yOwogCWludAkJZmxhZ3MgPSBTWU5DX0ZTREFUQTsKIApAQCAtNzA3LDExICs3MDIsMTEgQEAKIH0KIAogU1RBVElDIGludAotbGludmZzX3N0YXRmcygKK3hmc19mc19zdGF0ZnMoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKIAlzdHJ1Y3Qga3N0YXRmcwkJKnN0YXRwKQogewotCXZmc190CQkJKnZmc3AgPSBMSU5WRlNfR0VUX1ZGUyhzYik7CisJdmZzX3QJCQkqdmZzcCA9IHZmc19mcm9tX3NiKHNiKTsKIAlpbnQJCQllcnJvcjsKIAogCVZGU19TVEFUVkZTKHZmc3AsIHN0YXRwLCBOVUxMLCBlcnJvcik7CkBAIC03MTksMTIgKzcxNCwxMiBAQAogfQogCiBTVEFUSUMgaW50Ci1saW52ZnNfcmVtb3VudCgKK3hmc19mc19yZW1vdW50KAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCiAJaW50CQkJKmZsYWdzLAogCWNoYXIJCQkqb3B0aW9ucykKIHsKLQl2ZnNfdAkJCSp2ZnNwID0gTElOVkZTX0dFVF9WRlMoc2IpOworCXZmc190CQkJKnZmc3AgPSB2ZnNfZnJvbV9zYihzYik7CiAJc3RydWN0IHhmc19tb3VudF9hcmdzCSphcmdzID0geGZzX2FyZ3NfYWxsb2NhdGUoc2IpOwogCWludAkJCWVycm9yOwogCkBAIC03MzYsMTggKzczMSwxOCBAQAogfQogCiBTVEFUSUMgdm9pZAotbGludmZzX2ZyZWV6ZV9mcygKK3hmc19mc19sb2NrZnMoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYikKIHsKLQlWRlNfRlJFRVpFKExJTlZGU19HRVRfVkZTKHNiKSk7CisJVkZTX0ZSRUVaRSh2ZnNfZnJvbV9zYihzYikpOwogfQogCiBTVEFUSUMgaW50Ci1saW52ZnNfc2hvd19vcHRpb25zKAoreGZzX2ZzX3Nob3dfb3B0aW9ucygKIAlzdHJ1Y3Qgc2VxX2ZpbGUJCSptLAogCXN0cnVjdCB2ZnNtb3VudAkJKm1udCkKIHsKLQlzdHJ1Y3QgdmZzCQkqdmZzcCA9IExJTlZGU19HRVRfVkZTKG1udC0+bW50X3NiKTsKKwlzdHJ1Y3QgdmZzCQkqdmZzcCA9IHZmc19mcm9tX3NiKG1udC0+bW50X3NiKTsKIAlpbnQJCQllcnJvcjsKIAogCVZGU19TSE9XQVJHUyh2ZnNwLCBtLCBlcnJvcik7CkBAIC03NTUsMTEgKzc1MCwxMSBAQAogfQogCiBTVEFUSUMgaW50Ci1saW52ZnNfcXVvdGFzeW5jKAoreGZzX2ZzX3F1b3Rhc3luYygKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAogCWludAkJCXR5cGUpCiB7Ci0Jc3RydWN0IHZmcwkJKnZmc3AgPSBMSU5WRlNfR0VUX1ZGUyhzYik7CisJc3RydWN0IHZmcwkJKnZmc3AgPSB2ZnNfZnJvbV9zYihzYik7CiAJaW50CQkJZXJyb3I7CiAKIAlWRlNfUVVPVEFDVEwodmZzcCwgUV9YUVVPVEFTWU5DLCAwLCAoY2FkZHJfdClOVUxMLCBlcnJvcik7CkBAIC03NjcsMTEgKzc2MiwxMSBAQAogfQogCiBTVEFUSUMgaW50Ci1saW52ZnNfZ2V0eHN0YXRlKAoreGZzX2ZzX2dldHhzdGF0ZSgKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAogCXN0cnVjdCBmc19xdW90YV9zdGF0CSpmcXMpCiB7Ci0Jc3RydWN0IHZmcwkJKnZmc3AgPSBMSU5WRlNfR0VUX1ZGUyhzYik7CisJc3RydWN0IHZmcwkJKnZmc3AgPSB2ZnNfZnJvbV9zYihzYik7CiAJaW50CQkJZXJyb3I7CiAKIAlWRlNfUVVPVEFDVEwodmZzcCwgUV9YR0VUUVNUQVQsIDAsIChjYWRkcl90KWZxcywgZXJyb3IpOwpAQCAtNzc5LDEyICs3NzQsMTIgQEAKIH0KIAogU1RBVElDIGludAotbGludmZzX3NldHhzdGF0ZSgKK3hmc19mc19zZXR4c3RhdGUoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKIAl1bnNpZ25lZCBpbnQJCWZsYWdzLAogCWludAkJCW9wKQogewotCXN0cnVjdCB2ZnMJCSp2ZnNwID0gTElOVkZTX0dFVF9WRlMoc2IpOworCXN0cnVjdCB2ZnMJCSp2ZnNwID0gdmZzX2Zyb21fc2Ioc2IpOwogCWludAkJCWVycm9yOwogCiAJVkZTX1FVT1RBQ1RMKHZmc3AsIG9wLCAwLCAoY2FkZHJfdCkmZmxhZ3MsIGVycm9yKTsKQEAgLTc5MiwxMyArNzg3LDEzIEBACiB9CiAKIFNUQVRJQyBpbnQKLWxpbnZmc19nZXR4cXVvdGEoCit4ZnNfZnNfZ2V0eHF1b3RhKAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCiAJaW50CQkJdHlwZSwKIAlxaWRfdAkJCWlkLAogCXN0cnVjdCBmc19kaXNrX3F1b3RhCSpmZHEpCiB7Ci0Jc3RydWN0IHZmcwkJKnZmc3AgPSBMSU5WRlNfR0VUX1ZGUyhzYik7CisJc3RydWN0IHZmcwkJKnZmc3AgPSB2ZnNfZnJvbV9zYihzYik7CiAJaW50CQkJZXJyb3IsIGdldG1vZGU7CiAKIAlnZXRtb2RlID0gKHR5cGUgPT0gVVNSUVVPVEEpID8gUV9YR0VUUVVPVEEgOgpAQCAtODA4LDEzICs4MDMsMTMgQEAKIH0KIAogU1RBVElDIGludAotbGludmZzX3NldHhxdW90YSgKK3hmc19mc19zZXR4cXVvdGEoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKIAlpbnQJCQl0eXBlLAogCXFpZF90CQkJaWQsCiAJc3RydWN0IGZzX2Rpc2tfcXVvdGEJKmZkcSkKIHsKLQlzdHJ1Y3QgdmZzCQkqdmZzcCA9IExJTlZGU19HRVRfVkZTKHNiKTsKKwlzdHJ1Y3QgdmZzCQkqdmZzcCA9IHZmc19mcm9tX3NiKHNiKTsKIAlpbnQJCQllcnJvciwgc2V0bW9kZTsKIAogCXNldG1vZGUgPSAodHlwZSA9PSBVU1JRVU9UQSkgPyBRX1hTRVRRTElNIDoKQEAgLTgyNCwyMSArODE5LDE3IEBACiB9CiAKIFNUQVRJQyBpbnQKLWxpbnZmc19maWxsX3N1cGVyKAoreGZzX2ZzX2ZpbGxfc3VwZXIoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKIAl2b2lkCQkJKmRhdGEsCiAJaW50CQkJc2lsZW50KQogewogCXZub2RlX3QJCQkqcm9vdHZwOwotCXN0cnVjdCB2ZnMJCSp2ZnNwID0gdmZzX2FsbG9jYXRlKCk7CisJc3RydWN0IHZmcwkJKnZmc3AgPSB2ZnNfYWxsb2NhdGUoc2IpOwogCXN0cnVjdCB4ZnNfbW91bnRfYXJncwkqYXJncyA9IHhmc19hcmdzX2FsbG9jYXRlKHNiKTsKIAlzdHJ1Y3Qga3N0YXRmcwkJc3RhdHZmczsKIAlpbnQJCQllcnJvciwgZXJyb3IyOwogCi0JdmZzcC0+dmZzX3N1cGVyID0gc2I7Ci0JTElOVkZTX1NFVF9WRlMoc2IsIHZmc3ApOwotCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKLQkJdmZzcC0+dmZzX2ZsYWcgfD0gVkZTX1JET05MWTsKIAliaHZfaW5zZXJ0X2FsbF92ZnNvcHModmZzcCk7CiAKIAlWRlNfUEFSU0VBUkdTKHZmc3AsIChjaGFyICopZGF0YSwgYXJncywgMCwgZXJyb3IpOwpAQCAtODQ5LDEwICs4NDAsMTAgQEAKIAogCXNiX21pbl9ibG9ja3NpemUoc2IsIEJCU0laRSk7CiAjaWZkZWYgQ09ORklHX1hGU19FWFBPUlQKLQlzYi0+c19leHBvcnRfb3AgPSAmbGludmZzX2V4cG9ydF9vcHM7CisJc2ItPnNfZXhwb3J0X29wID0gJnhmc19leHBvcnRfb3BlcmF0aW9uczsKICNlbmRpZgotCXNiLT5zX3Fjb3AgPSAmbGludmZzX3FvcHM7Ci0Jc2ItPnNfb3AgPSAmbGludmZzX3NvcHM7CisJc2ItPnNfcWNvcCA9ICZ4ZnNfcXVvdGFjdGxfb3BlcmF0aW9uczsKKwlzYi0+c19vcCA9ICZ4ZnNfc3VwZXJfb3BlcmF0aW9uczsKIAogCVZGU19NT1VOVCh2ZnNwLCBhcmdzLCBOVUxMLCBlcnJvcik7CiAJaWYgKGVycm9yKSB7CkBAIC04NzYsNyArODY3LDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF91bm1vdW50OwogCi0Jc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChMSU5WRlNfR0VUX0lQKHJvb3R2cCkpOworCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qodm5fdG9faW5vZGUocm9vdHZwKSk7CiAJaWYgKCFzYi0+c19yb290KSB7CiAJCWVycm9yID0gRU5PTUVNOwogCQlnb3RvIGZhaWxfdm5yZWxlOwpAQCAtODg1LDcgKzg3Niw3IEBACiAJCWVycm9yID0gRUlOVkFMOwogCQlnb3RvIGZhaWxfdm5yZWxlOwogCX0KLQlpZiAoKGVycm9yID0gbGludmZzX3N0YXJ0X3N5bmNkKHZmc3ApKSkKKwlpZiAoKGVycm9yID0geGZzX2ZzX3N0YXJ0X3N5bmNkKHZmc3ApKSkKIAkJZ290byBmYWlsX3ZucmVsZTsKIAl2bl90cmFjZV9leGl0KHJvb3R2cCwgX19GVU5DVElPTl9fLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcyk7CiAKQEAgLTkxMCw0MSArOTAxLDQxIEBACiB9CiAKIFNUQVRJQyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKgotbGludmZzX2dldF9zYigKK3hmc19mc19nZXRfc2IoCiAJc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUJKmZzX3R5cGUsCiAJaW50CQkJZmxhZ3MsCiAJY29uc3QgY2hhcgkJKmRldl9uYW1lLAogCXZvaWQJCQkqZGF0YSkKIHsKLQlyZXR1cm4gZ2V0X3NiX2JkZXYoZnNfdHlwZSwgZmxhZ3MsIGRldl9uYW1lLCBkYXRhLCBsaW52ZnNfZmlsbF9zdXBlcik7CisJcmV0dXJuIGdldF9zYl9iZGV2KGZzX3R5cGUsIGZsYWdzLCBkZXZfbmFtZSwgZGF0YSwgeGZzX2ZzX2ZpbGxfc3VwZXIpOwogfQogCi1TVEFUSUMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbGludmZzX3NvcHMgPSB7Ci0JLmFsbG9jX2lub2RlCQk9IGxpbnZmc19hbGxvY19pbm9kZSwKLQkuZGVzdHJveV9pbm9kZQkJPSBsaW52ZnNfZGVzdHJveV9pbm9kZSwKLQkud3JpdGVfaW5vZGUJCT0gbGludmZzX3dyaXRlX2lub2RlLAotCS5jbGVhcl9pbm9kZQkJPSBsaW52ZnNfY2xlYXJfaW5vZGUsCi0JLnB1dF9zdXBlcgkJPSBsaW52ZnNfcHV0X3N1cGVyLAotCS53cml0ZV9zdXBlcgkJPSBsaW52ZnNfd3JpdGVfc3VwZXIsCi0JLnN5bmNfZnMJCT0gbGludmZzX3N5bmNfc3VwZXIsCi0JLndyaXRlX3N1cGVyX2xvY2tmcwk9IGxpbnZmc19mcmVlemVfZnMsCi0JLnN0YXRmcwkJCT0gbGludmZzX3N0YXRmcywKLQkucmVtb3VudF9mcwkJPSBsaW52ZnNfcmVtb3VudCwKLQkuc2hvd19vcHRpb25zCQk9IGxpbnZmc19zaG93X29wdGlvbnMsCitTVEFUSUMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeGZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CisJLmFsbG9jX2lub2RlCQk9IHhmc19mc19hbGxvY19pbm9kZSwKKwkuZGVzdHJveV9pbm9kZQkJPSB4ZnNfZnNfZGVzdHJveV9pbm9kZSwKKwkud3JpdGVfaW5vZGUJCT0geGZzX2ZzX3dyaXRlX2lub2RlLAorCS5jbGVhcl9pbm9kZQkJPSB4ZnNfZnNfY2xlYXJfaW5vZGUsCisJLnB1dF9zdXBlcgkJPSB4ZnNfZnNfcHV0X3N1cGVyLAorCS53cml0ZV9zdXBlcgkJPSB4ZnNfZnNfd3JpdGVfc3VwZXIsCisJLnN5bmNfZnMJCT0geGZzX2ZzX3N5bmNfc3VwZXIsCisJLndyaXRlX3N1cGVyX2xvY2tmcwk9IHhmc19mc19sb2NrZnMsCisJLnN0YXRmcwkJCT0geGZzX2ZzX3N0YXRmcywKKwkucmVtb3VudF9mcwkJPSB4ZnNfZnNfcmVtb3VudCwKKwkuc2hvd19vcHRpb25zCQk9IHhmc19mc19zaG93X29wdGlvbnMsCiB9OwogCi1TVEFUSUMgc3RydWN0IHF1b3RhY3RsX29wcyBsaW52ZnNfcW9wcyA9IHsKLQkucXVvdGFfc3luYwkJPSBsaW52ZnNfcXVvdGFzeW5jLAotCS5nZXRfeHN0YXRlCQk9IGxpbnZmc19nZXR4c3RhdGUsCi0JLnNldF94c3RhdGUJCT0gbGludmZzX3NldHhzdGF0ZSwKLQkuZ2V0X3hxdW90YQkJPSBsaW52ZnNfZ2V0eHF1b3RhLAotCS5zZXRfeHF1b3RhCQk9IGxpbnZmc19zZXR4cXVvdGEsCitTVEFUSUMgc3RydWN0IHF1b3RhY3RsX29wcyB4ZnNfcXVvdGFjdGxfb3BlcmF0aW9ucyA9IHsKKwkucXVvdGFfc3luYwkJPSB4ZnNfZnNfcXVvdGFzeW5jLAorCS5nZXRfeHN0YXRlCQk9IHhmc19mc19nZXR4c3RhdGUsCisJLnNldF94c3RhdGUJCT0geGZzX2ZzX3NldHhzdGF0ZSwKKwkuZ2V0X3hxdW90YQkJPSB4ZnNfZnNfZ2V0eHF1b3RhLAorCS5zZXRfeHF1b3RhCQk9IHhmc19mc19zZXR4cXVvdGEsCiB9OwogCiBTVEFUSUMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgeGZzX2ZzX3R5cGUgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJCT0gInhmcyIsCi0JLmdldF9zYgkJCT0gbGludmZzX2dldF9zYiwKKwkuZ2V0X3NiCQkJPSB4ZnNfZnNfZ2V0X3NiLAogCS5raWxsX3NiCQk9IGtpbGxfYmxvY2tfc3VwZXIsCiAJLmZzX2ZsYWdzCQk9IEZTX1JFUVVJUkVTX0RFViwKIH07CkBAIC05NjUsNyArOTU2LDcgQEAKIAogCWt0cmFjZV9pbml0KDY0KTsKIAotCWVycm9yID0gbGludmZzX2luaXRfem9uZXMoKTsKKwllcnJvciA9IHhmc19pbml0X3pvbmVzKCk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byB1bmRvX3pvbmVzOwogCkBAIC05ODEsMTQgKzk3MiwxMyBAQAogCWVycm9yID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmeGZzX2ZzX3R5cGUpOwogCWlmIChlcnJvcikKIAkJZ290byB1bmRvX3JlZ2lzdGVyOwotCVhGU19ETV9JTklUKCZ4ZnNfZnNfdHlwZSk7CiAJcmV0dXJuIDA7CiAKIHVuZG9fcmVnaXN0ZXI6CiAJeGZzX2J1Zl90ZXJtaW5hdGUoKTsKIAogdW5kb19idWZmZXJzOgotCWxpbnZmc19kZXN0cm95X3pvbmVzKCk7CisJeGZzX2Rlc3Ryb3lfem9uZXMoKTsKIAogdW5kb196b25lczoKIAlyZXR1cm4gZXJyb3I7CkBAIC05OTgsMTEgKzk4OCwxMCBAQAogZXhpdF94ZnNfZnMoIHZvaWQgKQogewogCXZmc19leGl0cXVvdGEoKTsKLQlYRlNfRE1fRVhJVCgmeGZzX2ZzX3R5cGUpOwogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmeGZzX2ZzX3R5cGUpOwogCXhmc19jbGVhbnVwKCk7CiAJeGZzX2J1Zl90ZXJtaW5hdGUoKTsKLQlsaW52ZnNfZGVzdHJveV96b25lcygpOworCXhmc19kZXN0cm95X3pvbmVzKCk7CiAJa3RyYWNlX3VuaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaAppbmRleCBkZjU5NDA4Li4zNzZiOTZjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKQEAgLTk4LDExICs5OCw2IEBACiAJCQkJWEZTX0RNQVBJX1NUUklORyBcCiAJCQkJWEZTX0RCR19TVFJJTkcgLyogREJHIG11c3QgYmUgbGFzdCAqLwogCi0jZGVmaW5lIExJTlZGU19HRVRfVkZTKHMpIFwKLQkodmZzX3QgKikoKHMpLT5zX2ZzX2luZm8pCi0jZGVmaW5lIExJTlZGU19TRVRfVkZTKHMsIHZmc3ApIFwKLQkoKHMpLT5zX2ZzX2luZm8gPSB2ZnNwKQotCiBzdHJ1Y3QgeGZzX2lub2RlOwogc3RydWN0IHhmc19tb3VudDsKIHN0cnVjdCB4ZnNfYnVmdGFyZzsKQEAgLTEyMCw2ICsxMTUsNiBAQAogZXh0ZXJuIHZvaWQgeGZzX2Jsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIHhmc19ibGtkZXZfaXNzdWVfZmx1c2goc3RydWN0IHhmc19idWZ0YXJnICopOwogCi1leHRlcm4gc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGxpbnZmc19leHBvcnRfb3BzOworZXh0ZXJuIHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyB4ZnNfZXhwb3J0X29wZXJhdGlvbnM7CiAKICNlbmRpZgkvKiBfX1hGU19TVVBFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5c2N0bC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3lzY3RsLmMKaW5kZXggYTAyNTY0OS4uNzA3OWNjOCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3lzY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3lzY3RsLmMKQEAgLTM4LDggKzM4LDcgQEAKIAogCWlmICghcmV0ICYmIHdyaXRlICYmICp2YWxwKSB7CiAJCXByaW50aygiWEZTIENsZWFyaW5nIHhmc3N0YXRzXG4iKTsKLQkJZm9yIChjID0gMDsgYyA8IE5SX0NQVVM7IGMrKykgewotCQkJaWYgKCFjcHVfcG9zc2libGUoYykpIGNvbnRpbnVlOworCQlmb3JfZWFjaF9jcHUoYykgewogCQkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCQkvKiBzYXZlIHZuX2FjdGl2ZSwgaXQncyBhIHVuaXZlcnNhbCB0cnV0aCEgKi8KIAkJCXZuX2FjdGl2ZSA9IHBlcl9jcHUoeGZzc3RhdHMsIGMpLnZuX2FjdGl2ZTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdmZzLmMKaW5kZXggYzg1NWQ2Mi4uNmY3YzlmNyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdmZzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdmZzLmMKQEAgLTIyNyw3ICsyMjcsOCBAQAogfQogCiB2ZnNfdCAqCi12ZnNfYWxsb2NhdGUoIHZvaWQgKQordmZzX2FsbG9jYXRlKAorCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IpCiB7CiAJc3RydWN0IHZmcwkJKnZmc3A7CiAKQEAgLTIzNiw5ICsyMzcsMjMgQEAKIAlJTklUX0xJU1RfSEVBRCgmdmZzcC0+dmZzX3N5bmNfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJnZmc3AtPnZmc19zeW5jX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZmc3AtPnZmc193YWl0X3NpbmdsZV9zeW5jX3Rhc2spOworCisJdmZzcC0+dmZzX3N1cGVyID0gc2I7CisJc2ItPnNfZnNfaW5mbyA9IHZmc3A7CisKKwlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXZmc3AtPnZmc19mbGFnIHw9IFZGU19SRE9OTFk7CisKIAlyZXR1cm4gdmZzcDsKIH0KIAordmZzX3QgKgordmZzX2Zyb21fc2IoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYikKK3sKKwlyZXR1cm4gKHZmc190ICopc2ItPnNfZnNfaW5mbzsKK30KKwogdm9pZAogdmZzX2RlYWxsb2NhdGUoCiAJc3RydWN0IHZmcwkJKnZmc3ApCkBAIC0yOTUsNyArMzEwLDcgQEAKIAliaHZfcmVtb3ZlX3Zmc29wcyh2ZnNwLCBWRlNfUE9TSVRJT05fRE0pOwogCWlmICghZnJlZWJhc2UpCiAJCXJldHVybjsKLQltcCA9IFhGU19CSFZUT00oYmh2X2xvb2t1cChWRlNfQkhWSEVBRCh2ZnNwKSwgJnhmc192ZnNvcHMpKTsKKwltcCA9IFhGU19WRlNUT00odmZzcCk7CiAJVkZTX1JFTU9WRUJIVih2ZnNwLCAmbXAtPm1fYmh2KTsKIAl4ZnNfbW91bnRfZnJlZShtcCwgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192ZnMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCmluZGV4IDU3Y2FmOWUuLjhmZWQzNTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oCkBAIC0xOTMsNyArMTkzLDggQEAKICNkZWZpbmUgdmZzX2Jodl9zZXRfY3VzdG9tKGIsbykJKCAoYiktPmJodl9jdXN0b20gPSAodm9pZCAqKShvKSkKICNkZWZpbmUgdmZzX2Jodl9jbHJfY3VzdG9tKGIpCSggKGIpLT5iaHZfY3VzdG9tID0gTlVMTCApCiAKLWV4dGVybiB2ZnNfdCAqdmZzX2FsbG9jYXRlKHZvaWQpOworZXh0ZXJuIHZmc190ICp2ZnNfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIHZmc190ICp2ZnNfZnJvbV9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBleHRlcm4gdm9pZCB2ZnNfZGVhbGxvY2F0ZSh2ZnNfdCAqKTsKIGV4dGVybiB2b2lkIHZmc19pbnNlcnRvcHModmZzX3QgKiwgYmh2X3Zmc29wc190ICopOwogZXh0ZXJuIHZvaWQgdmZzX2luc2VydGJodih2ZnNfdCAqLCBiaHZfZGVzY190ICosIHZmc29wc190ICosIHZvaWQgKik7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuYwppbmRleCAyNjBkZDg0Li5kMjdjMjViIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmMKQEAgLTU4LDcgKzU4LDcgQEAKIHZuX2luaXRpYWxpemUoCiAJc3RydWN0IGlub2RlCSppbm9kZSkKIHsKLQlzdHJ1Y3Qgdm5vZGUJKnZwID0gTElOVkZTX0dFVF9WUChpbm9kZSk7CisJc3RydWN0IHZub2RlCSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwogCiAJWEZTX1NUQVRTX0lOQyh2bl9hY3RpdmUpOwogCVhGU19TVEFUU19JTkModm5fYWxsb2MpOwpAQCAtODMsNyArODMsNyBAQAogCXZwLT52X3RyYWNlID0ga3RyYWNlX2FsbG9jKFZOT0RFX1RSQUNFX1NJWkUsIEtNX1NMRUVQKTsKICNlbmRpZgkvKiBYRlNfVk5PREVfVFJBQ0UgKi8KIAotCXZuX3RyYWNlX2V4aXQodnAsICJ2bl9pbml0aWFsaXplIiwgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOworCXZuX3RyYWNlX2V4aXQodnAsIF9fRlVOQ1RJT05fXywgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOwogCXJldHVybiB2cDsKIH0KIApAQCAtOTcsNyArOTcsNyBAQAogCXN0cnVjdCB2bm9kZQkqdnAsCiAJdmF0dHJfdAkJKnZhcCkKIHsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gTElOVkZTX0dFVF9JUCh2cCk7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKIAogCWlub2RlLT5pX21vZGUJICAgID0gdmFwLT52YV9tb2RlOwogCWlub2RlLT5pX25saW5rCSAgICA9IHZhcC0+dmFfbmxpbms7CkBAIC0xMjksMjQgKzEyOSwzMSBAQAogICogUmV2YWxpZGF0ZSB0aGUgTGludXggaW5vZGUgZnJvbSB0aGUgdm5vZGUuCiAgKi8KIGludAotdm5fcmV2YWxpZGF0ZSgKLQlzdHJ1Y3Qgdm5vZGUJKnZwKQorX192bl9yZXZhbGlkYXRlKAorCXN0cnVjdCB2bm9kZQkqdnAsCisJc3RydWN0IHZhdHRyCSp2YXR0cikKIHsKLQl2YXR0cl90CQl2YTsKIAlpbnQJCWVycm9yOwogCi0Jdm5fdHJhY2VfZW50cnkodnAsICJ2bl9yZXZhbGlkYXRlIiwgKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOwotCUFTU0VSVCh2cC0+dl9mYmh2ICE9IE5VTEwpOwotCi0JdmEudmFfbWFzayA9IFhGU19BVF9TVEFUfFhGU19BVF9YRkxBR1M7Ci0JVk9QX0dFVEFUVFIodnAsICZ2YSwgMCwgTlVMTCwgZXJyb3IpOwotCWlmICghZXJyb3IpIHsKLQkJdm5fcmV2YWxpZGF0ZV9jb3JlKHZwLCAmdmEpOworCXZuX3RyYWNlX2VudHJ5KHZwLCBfX0ZVTkNUSU9OX18sIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKKwl2YXR0ci0+dmFfbWFzayA9IFhGU19BVF9TVEFUIHwgWEZTX0FUX1hGTEFHUzsKKwlWT1BfR0VUQVRUUih2cCwgdmF0dHIsIDAsIE5VTEwsIGVycm9yKTsKKwlpZiAobGlrZWx5KCFlcnJvcikpIHsKKwkJdm5fcmV2YWxpZGF0ZV9jb3JlKHZwLCB2YXR0cik7CiAJCVZVTk1PRElGWSh2cCk7CiAJfQogCXJldHVybiAtZXJyb3I7CiB9CiAKK2ludAordm5fcmV2YWxpZGF0ZSgKKwlzdHJ1Y3Qgdm5vZGUJKnZwKQoreworCXZhdHRyX3QJCXZhdHRyOworCisJcmV0dXJuIF9fdm5fcmV2YWxpZGF0ZSh2cCwgJnZhdHRyKTsKK30KKwogLyoKICAqIEFkZCBhIHJlZmVyZW5jZSB0byBhIHJlZmVyZW5jZWQgdm5vZGUuCiAgKi8KQEAgLTE1OSw3ICsxNjYsNyBAQAogCVhGU19TVEFUU19JTkModm5faG9sZCk7CiAKIAlWTl9MT0NLKHZwKTsKLQlpbm9kZSA9IGlncmFiKExJTlZGU19HRVRfSVAodnApKTsKKwlpbm9kZSA9IGlncmFiKHZuX3RvX2lub2RlKHZwKSk7CiAJQVNTRVJUKGlub2RlKTsKIAlWTl9VTkxPQ0sodnAsIDApOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAppbmRleCAwZmUyNDE5Li4wNmY1ODQ1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKQEAgLTExNiw4ICsxMTYsMTQgQEAKIC8qCiAgKiBWbm9kZSB0byBMaW51eCBpbm9kZSBtYXBwaW5nLgogICovCi0jZGVmaW5lIExJTlZGU19HRVRfVlAoaW5vZGUpCSgodm5vZGVfdCAqKWxpc3RfZW50cnkoaW5vZGUsIHZub2RlX3QsIHZfaW5vZGUpKQotI2RlZmluZSBMSU5WRlNfR0VUX0lQKHZwKQkoJih2cCktPnZfaW5vZGUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2bm9kZSAqdm5fZnJvbV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAodm5vZGVfdCAqKWxpc3RfZW50cnkoaW5vZGUsIHZub2RlX3QsIHZfaW5vZGUpOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnZuX3RvX2lub2RlKHN0cnVjdCB2bm9kZSAqdm5vZGUpCit7CisJcmV0dXJuICZ2bm9kZS0+dl9pbm9kZTsKK30KIAogLyoKICAqIFZub2RlIGZsYWdzLgpAQCAtNDkwLDYgKzQ5Niw3IEBACiAJCQkgKHZtYXApLnZfaW5vCSA9ICh2cCktPnZfaW5vZGUuaV9pbm87IH0KIAogZXh0ZXJuIGludAl2bl9yZXZhbGlkYXRlKHN0cnVjdCB2bm9kZSAqKTsKK2V4dGVybiBpbnQJX192bl9yZXZhbGlkYXRlKHN0cnVjdCB2bm9kZSAqLCB2YXR0cl90ICopOwogZXh0ZXJuIHZvaWQJdm5fcmV2YWxpZGF0ZV9jb3JlKHN0cnVjdCB2bm9kZSAqLCB2YXR0cl90ICopOwogCiBleHRlcm4gdm9pZAl2bl9pb3dhaXQoc3RydWN0IHZub2RlICp2cCk7CkBAIC00OTcsNyArNTA0LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgdm5fY291bnQoc3RydWN0IHZub2RlICp2cCkKIHsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJkxJTlZGU19HRVRfSVAodnApLT5pX2NvdW50KTsKKwlyZXR1cm4gYXRvbWljX3JlYWQoJnZuX3RvX2lub2RlKHZwKS0+aV9jb3VudCk7CiB9CiAKIC8qCkBAIC01MTEsMTYgKzUxOCwxNiBAQAogCSAgdm5fdHJhY2VfaG9sZCh2cCwgX19GSUxFX18sIF9fTElORV9fLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcykpCiAjZGVmaW5lIFZOX1JFTEUodnApCQlcCiAJICAodm5fdHJhY2VfcmVsZSh2cCwgX19GSUxFX18sIF9fTElORV9fLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcyksIFwKLQkgICBpcHV0KExJTlZGU19HRVRfSVAodnApKSkKKwkgICBpcHV0KHZuX3RvX2lub2RlKHZwKSkpCiAjZWxzZQogI2RlZmluZSBWTl9IT0xEKHZwKQkJKCh2b2lkKXZuX2hvbGQodnApKQotI2RlZmluZSBWTl9SRUxFKHZwKQkJKGlwdXQoTElOVkZTX0dFVF9JUCh2cCkpKQorI2RlZmluZSBWTl9SRUxFKHZwKQkJKGlwdXQodm5fdG9faW5vZGUodnApKSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2bm9kZSAqdm5fZ3JhYihzdHJ1Y3Qgdm5vZGUgKnZwKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpZ3JhYihMSU5WRlNfR0VUX0lQKHZwKSk7Ci0JcmV0dXJuIGlub2RlID8gTElOVkZTX0dFVF9WUChpbm9kZSkgOiBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpZ3JhYih2bl90b19pbm9kZSh2cCkpOworCXJldHVybiBpbm9kZSA/IHZuX2Zyb21faW5vZGUoaW5vZGUpIDogTlVMTDsKIH0KIAogLyoKQEAgLTUyOCw3ICs1MzUsNyBAQAogICovCiAjZGVmaW5lIFZOQU1FKGRlbnRyeSkJCSgoY2hhciAqKSAoZGVudHJ5KS0+ZF9uYW1lLm5hbWUpCiAjZGVmaW5lIFZOQU1FTEVOKGRlbnRyeSkJKChkZW50cnkpLT5kX25hbWUubGVuKQotI2RlZmluZSBWTkFNRV9UT19WTk9ERShkZW50cnkpCShMSU5WRlNfR0VUX1ZQKChkZW50cnkpLT5kX2lub2RlKSkKKyNkZWZpbmUgVk5BTUVfVE9fVk5PREUoZGVudHJ5KQkodm5fZnJvbV9pbm9kZSgoZGVudHJ5KS0+ZF9pbm9kZSkpCiAKIC8qCiAgKiBWbm9kZSBzcGlubG9jayBtYW5pcHVsYXRpb24uCkBAIC01NTcsMTIgKzU2NCwxMiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdm5fbWFya19iYWQoc3RydWN0IHZub2RlICp2cCkKIHsKLQltYWtlX2JhZF9pbm9kZShMSU5WRlNfR0VUX0lQKHZwKSk7CisJbWFrZV9iYWRfaW5vZGUodm5fdG9faW5vZGUodnApKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgVk5fQkFEKHN0cnVjdCB2bm9kZSAqdnApCiB7Ci0JcmV0dXJuIGlzX2JhZF9pbm9kZShMSU5WRlNfR0VUX0lQKHZwKSk7CisJcmV0dXJuIGlzX2JhZF9pbm9kZSh2bl90b19pbm9kZSh2cCkpOwogfQogCiAvKgpAQCAtNTg3LDkgKzU5NCw5IEBACiAvKgogICogU29tZSB1c2VmdWwgcHJlZGljYXRlcy4KICAqLwotI2RlZmluZSBWTl9NQVBQRUQodnApCW1hcHBpbmdfbWFwcGVkKExJTlZGU19HRVRfSVAodnApLT5pX21hcHBpbmcpCi0jZGVmaW5lIFZOX0NBQ0hFRCh2cCkJKExJTlZGU19HRVRfSVAodnApLT5pX21hcHBpbmctPm5ycGFnZXMpCi0jZGVmaW5lIFZOX0RJUlRZKHZwKQltYXBwaW5nX3RhZ2dlZChMSU5WRlNfR0VUX0lQKHZwKS0+aV9tYXBwaW5nLCBcCisjZGVmaW5lIFZOX01BUFBFRCh2cCkJbWFwcGluZ19tYXBwZWQodm5fdG9faW5vZGUodnApLT5pX21hcHBpbmcpCisjZGVmaW5lIFZOX0NBQ0hFRCh2cCkJKHZuX3RvX2lub2RlKHZwKS0+aV9tYXBwaW5nLT5ucnBhZ2VzKQorI2RlZmluZSBWTl9ESVJUWSh2cCkJbWFwcGluZ190YWdnZWQodm5fdG9faW5vZGUodnApLT5pX21hcHBpbmcsIFwKIAkJCQkJUEFHRUNBQ0hFX1RBR19ESVJUWSkKICNkZWZpbmUgVk1PRElGWSh2cCkJVk5fRkxBR1NFVCh2cCwgVk1PRElGSUVEKQogI2RlZmluZSBWVU5NT0RJRlkodnApCVZOX0ZMQUdDTFIodnAsIFZNT0RJRklFRCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKaW5kZXggMmVjNmI0NC4uZTRlNWYwNSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKQEAgLTc5LDkgKzc5LDExIEBACiAKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2Zvcm1hdDsKIAlsb2d2ZWMtPmlfbGVuICA9IHNpemVvZih4ZnNfZHFfbG9nZm9ybWF0X3QpOworCVhMT0dfVkVDX1NFVF9UWVBFKGxvZ3ZlYywgWExPR19SRUdfVFlQRV9RRk9STUFUKTsKIAlsb2d2ZWMrKzsKIAlsb2d2ZWMtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmbG9naXRlbS0+cWxpX2RxdW90LT5xX2NvcmU7CiAJbG9ndmVjLT5pX2xlbiAgPSBzaXplb2YoeGZzX2Rpc2tfZHF1b3RfdCk7CisJWExPR19WRUNfU0VUX1RZUEUobG9ndmVjLCBYTE9HX1JFR19UWVBFX0RRVU9UKTsKIAogCUFTU0VSVCgyID09IGxvZ2l0ZW0tPnFsaV9pdGVtLmxpX2Rlc2MtPmxpZF9zaXplKTsKIAlsb2dpdGVtLT5xbGlfZm9ybWF0LnFsZl9zaXplID0gMjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCA1M2EwMGZiMi4uMWZiNzU3ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbS5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwpAQCAtNjgsNiArNjgsOSBAQAoga21lbV96b25lX3QJKnFtX2RxdHJ4em9uZTsKIFNUQVRJQyBrbWVtX3NoYWtlcl90CXhmc19xbV9zaGFrZXI7CiAKK1NUQVRJQyBjcmVkX3QJeGZzX3plcm9jcjsKK1NUQVRJQyB4ZnNfaW5vZGVfdAl4ZnNfemVyb2lubzsKKwogU1RBVElDIHZvaWQJeGZzX3FtX2xpc3RfaW5pdCh4ZnNfZHFsaXN0X3QgKiwgY2hhciAqLCBpbnQpOwogU1RBVElDIHZvaWQJeGZzX3FtX2xpc3RfZGVzdHJveSh4ZnNfZHFsaXN0X3QgKik7CiAKQEAgLTEzOTMsOCArMTM5Niw2IEBACiAJeGZzX3RyYW5zX3QJKnRwOwogCWludAkJZXJyb3I7CiAJdW5zaWduZWQgbG9uZwlzOwotCWNyZWRfdAkJemVyb2NyOwotCXhmc19pbm9kZV90CXplcm9pbm87CiAJaW50CQljb21taXR0ZWQ7CiAKIAl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1FNX1FJTk9DUkVBVEUpOwpAQCAtMTQwNiwxMSArMTQwNyw5IEBACiAJCXhmc190cmFuc19jYW5jZWwodHAsIDApOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotCW1lbXNldCgmemVyb2NyLCAwLCBzaXplb2YoemVyb2NyKSk7Ci0JbWVtc2V0KCZ6ZXJvaW5vLCAwLCBzaXplb2YoemVyb2lubykpOwogCi0JaWYgKChlcnJvciA9IHhmc19kaXJfaWFsbG9jKCZ0cCwgJnplcm9pbm8sIFNfSUZSRUcsIDEsIDAsCi0JCQkJICAgJnplcm9jciwgMCwgMSwgaXAsICZjb21taXR0ZWQpKSkgeworCWlmICgoZXJyb3IgPSB4ZnNfZGlyX2lhbGxvYygmdHAsICZ4ZnNfemVyb2lubywgU19JRlJFRywgMSwgMCwKKwkJCQkgICAmeGZzX3plcm9jciwgMCwgMSwgaXAsICZjb21taXR0ZWQpKSkgewogCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTIHwKIAkJCQkgWEZTX1RSQU5TX0FCT1JUKTsKIAkJcmV0dXJuIGVycm9yOwpAQCAtMTcwNSw5ICsxNzA0LDkgQEAKIAl4ZnNfcWNudF90CSpPX3J0YmxrcykKIHsKIAl4ZnNfZmlsYmxrc190CXJ0YmxrczsJCQkvKiB0b3RhbCBydCBibGtzICovCisJeGZzX2V4dG51bV90CWlkeDsJCQkvKiBleHRlbnQgcmVjb3JkIGluZGV4ICovCiAJeGZzX2lmb3JrX3QJKmlmcDsJCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KIAl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CQkvKiBudW1iZXIgb2YgZXh0ZW50IGVudHJpZXMgKi8KLQl4ZnNfYm1idF9yZWNfdAkqYmFzZTsJCQkvKiBiYXNlIG9mIGV4dGVudCBhcnJheSAqLwogCXhmc19ibWJ0X3JlY190CSplcDsJCQkvKiBwb2ludGVyIHRvIGFuIGV4dGVudCBlbnRyeSAqLwogCWludAkJZXJyb3I7CiAKQEAgLTE3MTgsMTAgKzE3MTcsMTEgQEAKIAkJCXJldHVybiBlcnJvcjsKIAl9CiAJcnRibGtzID0gMDsKLQluZXh0ZW50cyA9IGlmcC0+aWZfYnl0ZXMgLyBzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwotCWJhc2UgPSAmaWZwLT5pZl91MS5pZl9leHRlbnRzWzBdOwotCWZvciAoZXAgPSBiYXNlOyBlcCA8ICZiYXNlW25leHRlbnRzXTsgZXArKykKKwluZXh0ZW50cyA9IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCWZvciAoaWR4ID0gMDsgaWR4IDwgbmV4dGVudHM7IGlkeCsrKSB7CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCk7CiAJCXJ0YmxrcyArPSB4ZnNfYm1idF9nZXRfYmxvY2tjb3VudChlcCk7CisJfQogCSpPX3J0YmxrcyA9ICh4ZnNfcWNudF90KXJ0YmxrczsKIAlyZXR1cm4gMDsKIH0KQEAgLTI3ODksOSArMjc4OSw3IEBACiAJCXhmc19xbV9kcWRlc3Ryb3koZHFwKTsKIAkJZHFwID0gbmV4dGRxcDsKIAl9Ci0JLyoKLQkgKiBEb24ndCBib3RoZXIgYWJvdXQgdW5sb2NraW5nLgotCSAqLworCW11dGV4X3VubG9jaygmcWwtPnFoX2xvY2spOwogCW11dGV4X2Rlc3Ryb3koJnFsLT5xaF9sb2NrKTsKIAogCUFTU0VSVChxbC0+cWhfbmVsZW1zID09IDApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggOTA0MDJhMS4uNjgzOGIzNiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC0zNzQsNyArMzc0LDcgQEAKIAl2ZnNfYmh2X2Nscl9jdXN0b20oJnhmc19xbW9wcyk7CiAJeGZzX3FtX2NsZWFudXBfcHJvY2ZzKCk7CiAJaWYgKHFtX2Rxem9uZSkKLQkJa21lbV9jYWNoZV9kZXN0cm95KHFtX2Rxem9uZSk7CisJCWttZW1fem9uZV9kZXN0cm95KHFtX2Rxem9uZSk7CiAJaWYgKHFtX2RxdHJ4em9uZSkKLQkJa21lbV9jYWNoZV9kZXN0cm95KHFtX2RxdHJ4em9uZSk7CisJCWttZW1fem9uZV9kZXN0cm95KHFtX2RxdHJ4em9uZSk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9rdHJhY2UuYyBiL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCmluZGV4IDg0MWFhNGMuLmFkZGY1YTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCisrKyBiL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCkBAIC0zOSw4ICszOSw4IEBACiB2b2lkCiBrdHJhY2VfdW5pbml0KHZvaWQpCiB7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KGt0cmFjZV9oZHJfem9uZSk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KGt0cmFjZV9lbnRfem9uZSk7CisJa21lbV96b25lX2Rlc3Ryb3koa3RyYWNlX2hkcl96b25lKTsKKwlrbWVtX3pvbmVfZGVzdHJveShrdHJhY2VfZW50X3pvbmUpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvdXVpZC5jIGIvZnMveGZzL3N1cHBvcnQvdXVpZC5jCmluZGV4IGEzZDU2NWEuLmUxNTcwMTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L3V1aWQuYworKysgYi9mcy94ZnMvc3VwcG9ydC91dWlkLmMKQEAgLTIxLDEzICsyMSw2IEBACiBzdGF0aWMgaW50CXV1aWRfdGFibGVfc2l6ZTsKIHN0YXRpYyB1dWlkX3QJKnV1aWRfdGFibGU7CiAKLXZvaWQKLXV1aWRfaW5pdCh2b2lkKQotewotCW11dGV4X2luaXQoJnV1aWRfbW9uaXRvcik7Ci19Ci0KLQogLyogSVJJWCBpbnRlcnByZXRhdGlvbiBvZiBhbiB1dWlkX3QgKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlfX2JlMzIJdXVfdGltZWxvdzsKQEAgLTUwLDcgKzQzLDcgQEAKIAogCWZzaWRbMF0gPSAoYmUxNl90b19jcHUodXVwLT51dV9jbG9ja3NlcSkgPDwgMTYpIHwKIAkJICAgYmUxNl90b19jcHUodXVwLT51dV90aW1lbWlkKTsKLQlmc2lkWzFdID0gYmUxNl90b19jcHUodXVwLT51dV90aW1lbG93KTsKKwlmc2lkWzFdID0gYmUzMl90b19jcHUodXVwLT51dV90aW1lbG93KTsKIH0KIAogdm9pZApAQCAtMTM5LDMgKzEzMiw5IEBACiAJQVNTRVJUKGkgPCB1dWlkX3RhYmxlX3NpemUpOwogCW11dGV4X3VubG9jaygmdXVpZF9tb25pdG9yKTsKIH0KKwordm9pZAordXVpZF9pbml0KHZvaWQpCit7CisJbXV0ZXhfaW5pdCgmdXVpZF9tb25pdG9yKTsKK30KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWNsLmggYi9mcy94ZnMveGZzX2FjbC5oCmluZGV4IGY5MzE1YmMuLjUzOGQwZDYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWNsLmgKKysrIGIvZnMveGZzL3hmc19hY2wuaApAQCAtNTUsOCArNTUsOCBAQAogCiBleHRlcm4gc3RydWN0IGttZW1fem9uZSAqeGZzX2FjbF96b25lOwogI2RlZmluZSB4ZnNfYWNsX3pvbmVfaW5pdCh6b25lLCBuYW1lKQlcCi0JCSh6b25lKSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfYWNsX3QpLCBuYW1lKQotI2RlZmluZSB4ZnNfYWNsX3pvbmVfZGVzdHJveSh6b25lKQlrbWVtX2NhY2hlX2Rlc3Ryb3koem9uZSkKKwkJKHpvbmUpID0ga21lbV96b25lX2luaXQoc2l6ZW9mKHhmc19hY2xfdCksIChuYW1lKSkKKyNkZWZpbmUgeGZzX2FjbF96b25lX2Rlc3Ryb3koem9uZSkJa21lbV96b25lX2Rlc3Ryb3koem9uZSkKIAogZXh0ZXJuIGludCB4ZnNfYWNsX2luaGVyaXQoc3RydWN0IHZub2RlICosIHN0cnVjdCB2YXR0ciAqLCB4ZnNfYWNsX3QgKik7CiBleHRlcm4gaW50IHhmc19hY2xfaWFjY2VzcyhzdHJ1Y3QgeGZzX2lub2RlICosIG1vZGVfdCwgY3JlZF90ICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyLmMgYi9mcy94ZnMveGZzX2F0dHIuYwppbmRleCBlNWU5MWU5Li4wOTNmYWM0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHIuYworKysgYi9mcy94ZnMveGZzX2F0dHIuYwpAQCAtMTEyNyw4ICsxMTI3LDcgQEAKIAkJcmV0dXJuKGVycm9yKTsKIAlBU1NFUlQoYnAgIT0gTlVMTCk7CiAJbGVhZiA9IGJwLT5kYXRhOwotCWlmICh1bmxpa2VseShJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQkhPSBYRlNfQVRUUl9MRUFGX01BR0lDKSkgeworCWlmICh1bmxpa2VseShiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgIT0gWEZTX0FUVFJfTEVBRl9NQUdJQykpIHsKIAkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19hdHRyX2xlYWZfbGlzdCIsIFhGU19FUlJMRVZFTF9MT1csCiAJCQkJICAgICBjb250ZXh0LT5kcC0+aV9tb3VudCwgbGVhZik7CiAJCXhmc19kYV9icmVsc2UoTlVMTCwgYnApOwpAQCAtMTU0MSw4ICsxNTQwLDggQEAKIAkJCQkJCSAgICAgWEZTX0FUVFJfRk9SSyk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwotCQlBU1NFUlQoSU5UX0dFVCgoKHhmc19hdHRyX2xlYWZibG9ja190ICopCi0JCQkJICAgICAgYnAtPmRhdGEpLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQorCQlBU1NFUlQoYmUxNl90b19jcHUoKCh4ZnNfYXR0cl9sZWFmYmxvY2tfdCAqKQorCQkJCSAgICAgIGJwLT5kYXRhKS0+aGRyLmluZm8ubWFnaWMpCiAJCQkJCQkgICAgICAgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAKIAkJaWYgKChmb3Jrb2ZmID0geGZzX2F0dHJfc2hvcnRmb3JtX2FsbGZpdChicCwgZHApKSkgewpAQCAtMTc2Myw3ICsxNzYyLDcgQEAKIAkJCXJldHVybihlcnJvcik7CiAJCWlmIChicCkgewogCQkJbm9kZSA9IGJwLT5kYXRhOwotCQkJc3dpdGNoIChJTlRfR0VUKG5vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpKSB7CisJCQlzd2l0Y2ggKGJlMTZfdG9fY3B1KG5vZGUtPmhkci5pbmZvLm1hZ2ljKSkgewogCQkJY2FzZSBYRlNfREFfTk9ERV9NQUdJQzoKIAkJCQl4ZnNfYXR0cl90cmFjZV9sX2NuKCJ3cm9uZyBibGsiLCBjb250ZXh0LCBub2RlKTsKIAkJCQl4ZnNfZGFfYnJlbHNlKE5VTEwsIGJwKTsKQEAgLTE3NzEsMTggKzE3NzAsMTQgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgWEZTX0FUVFJfTEVBRl9NQUdJQzoKIAkJCQlsZWFmID0gYnAtPmRhdGE7Ci0JCQkJaWYgKGN1cnNvci0+aGFzaHZhbCA+Ci0JCQkJICAgIElOVF9HRVQobGVhZi0+ZW50cmllc1sKLQkJCQkJIElOVF9HRVQobGVhZi0+aGRyLmNvdW50LAotCQkJCQkJQVJDSF9DT05WRVJUKS0xXS5oYXNodmFsLAotCQkJCQkJCUFSQ0hfQ09OVkVSVCkpIHsKKwkJCQlpZiAoY3Vyc29yLT5oYXNodmFsID4gYmUzMl90b19jcHUobGVhZi0+ZW50cmllc1sKKwkJCQkgICAgYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KS0xXS5oYXNodmFsKSkgewogCQkJCQl4ZnNfYXR0cl90cmFjZV9sX2NsKCJ3cm9uZyBibGsiLAogCQkJCQkJCSAgIGNvbnRleHQsIGxlYWYpOwogCQkJCQl4ZnNfZGFfYnJlbHNlKE5VTEwsIGJwKTsKIAkJCQkJYnAgPSBOVUxMOwogCQkJCX0gZWxzZSBpZiAoY3Vyc29yLT5oYXNodmFsIDw9Ci0JCQkJCSAgICAgSU5UX0dFVChsZWFmLT5lbnRyaWVzWzBdLmhhc2h2YWwsCi0JCQkJCQkJQVJDSF9DT05WRVJUKSkgeworCQkJCQkgICAgIGJlMzJfdG9fY3B1KGxlYWYtPmVudHJpZXNbMF0uaGFzaHZhbCkpIHsKIAkJCQkJeGZzX2F0dHJfdHJhY2VfbF9jbCgibWF5YmUgd3JvbmcgYmxrIiwKIAkJCQkJCQkgICBjb250ZXh0LCBsZWFmKTsKIAkJCQkJeGZzX2RhX2JyZWxzZShOVUxMLCBicCk7CkBAIC0xODE3LDEwICsxODEyLDEwIEBACiAJCQkJcmV0dXJuKFhGU19FUlJPUihFRlNDT1JSVVBURUQpKTsKIAkJCX0KIAkJCW5vZGUgPSBicC0+ZGF0YTsKLQkJCWlmIChJTlRfR0VUKG5vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCisJCQlpZiAoYmUxNl90b19jcHUobm9kZS0+aGRyLmluZm8ubWFnaWMpCiAJCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQykKIAkJCQlicmVhazsKLQkJCWlmICh1bmxpa2VseShJTlRfR0VUKG5vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCisJCQlpZiAodW5saWtlbHkoYmUxNl90b19jcHUobm9kZS0+aGRyLmluZm8ubWFnaWMpCiAJCQkJCQkJIT0gWEZTX0RBX05PREVfTUFHSUMpKSB7CiAJCQkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19hdHRyX25vZGVfbGlzdCgzKSIsCiAJCQkJCQkgICAgIFhGU19FUlJMRVZFTF9MT1csCkBAIC0xODMwLDE5ICsxODI1LDE3IEBACiAJCQkJcmV0dXJuKFhGU19FUlJPUihFRlNDT1JSVVBURUQpKTsKIAkJCX0KIAkJCWJ0cmVlID0gbm9kZS0+YnRyZWU7Ci0JCQlmb3IgKGkgPSAwOwotCQkJCWkgPCBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpOwogCQkJCQkJCQlidHJlZSsrLCBpKyspIHsKIAkJCQlpZiAoY3Vyc29yLT5oYXNodmFsCi0JCQkJCQk8PSBJTlRfR0VUKGJ0cmVlLT5oYXNodmFsLAotCQkJCQkJCSAgICBBUkNIX0NPTlZFUlQpKSB7Ci0JCQkJCWN1cnNvci0+Ymxrbm8gPSBJTlRfR0VUKGJ0cmVlLT5iZWZvcmUsIEFSQ0hfQ09OVkVSVCk7CisJCQkJCQk8PSBiZTMyX3RvX2NwdShidHJlZS0+aGFzaHZhbCkpIHsKKwkJCQkJY3Vyc29yLT5ibGtubyA9IGJlMzJfdG9fY3B1KGJ0cmVlLT5iZWZvcmUpOwogCQkJCQl4ZnNfYXR0cl90cmFjZV9sX2NiKCJkZXNjZW5kaW5nIiwKIAkJCQkJCQkgICAgY29udGV4dCwgYnRyZWUpOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAoaSA9PSBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkgeworCQkJaWYgKGkgPT0gYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KSkgewogCQkJCXhmc19kYV9icmVsc2UoTlVMTCwgYnApOwogCQkJCXJldHVybigwKTsKIAkJCX0KQEAgLTE4NTgsNyArMTg1MSw3IEBACiAJICovCiAJZm9yICg7OykgewogCQlsZWFmID0gYnAtPmRhdGE7Ci0JCWlmICh1bmxpa2VseShJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCisJCWlmICh1bmxpa2VseShiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykKIAkJCQkJCSE9IFhGU19BVFRSX0xFQUZfTUFHSUMpKSB7CiAJCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2F0dHJfbm9kZV9saXN0KDQpIiwKIAkJCQkJICAgICBYRlNfRVJSTEVWRUxfTE9XLApAQCAtMTg2OSw3ICsxODYyLDcgQEAKIAkJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2xpc3RfaW50KGJwLCBjb250ZXh0KTsKIAkJaWYgKGVycm9yIHx8ICFsZWFmLT5oZHIuaW5mby5mb3J3KQogCQkJYnJlYWs7CS8qIG5vdCByZWFsbHkgYW4gZXJyb3IsIGJ1ZmZlciBmdWxsIG9yIEVPRiAqLwotCQljdXJzb3ItPmJsa25vID0gSU5UX0dFVChsZWFmLT5oZHIuaW5mby5mb3J3LCBBUkNIX0NPTlZFUlQpOworCQljdXJzb3ItPmJsa25vID0gYmUzMl90b19jcHUobGVhZi0+aGRyLmluZm8uZm9ydyk7CiAJCXhmc19kYV9icmVsc2UoTlVMTCwgYnApOwogCQllcnJvciA9IHhmc19kYV9yZWFkX2J1ZihOVUxMLCBjb250ZXh0LT5kcCwgY3Vyc29yLT5ibGtubywgLTEsCiAJCQkJCSAgICAgICZicCwgWEZTX0FUVFJfRk9SSyk7CkBAIC0yMjMyLDkgKzIyMjUsMTAgQEAKIAkJCQk6IDAsCiAJCShfX3BzdW5zaWduZWRfdCljb250ZXh0LT5kdXBjbnQsCiAJCShfX3BzdW5zaWduZWRfdCljb250ZXh0LT5mbGFncywKLQkJKF9fcHN1bnNpZ25lZF90KUlOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLAotCQkoX19wc3Vuc2lnbmVkX3QpSU5UX0dFVChub2RlLT5idHJlZVswXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpLAotCQkoX19wc3Vuc2lnbmVkX3QpSU5UX0dFVChub2RlLT5idHJlZVtJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKTsKKwkJKF9fcHN1bnNpZ25lZF90KWJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCksCisJCShfX3BzdW5zaWduZWRfdCliZTMyX3RvX2NwdShub2RlLT5idHJlZVswXS5oYXNodmFsKSwKKwkJKF9fcHN1bnNpZ25lZF90KWJlMzJfdG9fY3B1KG5vZGUtPmJ0cmVlWworCQkJCSAgICBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpLTFdLmhhc2h2YWwpKTsKIH0KIAogLyoKQEAgLTIyNjEsOCArMjI1NSw4IEBACiAJCQkJOiAwLAogCQkoX19wc3Vuc2lnbmVkX3QpY29udGV4dC0+ZHVwY250LAogCQkoX19wc3Vuc2lnbmVkX3QpY29udGV4dC0+ZmxhZ3MsCi0JCShfX3BzdW5zaWduZWRfdClJTlRfR0VUKGJ0cmVlLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpLAotCQkoX19wc3Vuc2lnbmVkX3QpSU5UX0dFVChidHJlZS0+YmVmb3JlLCBBUkNIX0NPTlZFUlQpLAorCQkoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUoYnRyZWUtPmhhc2h2YWwpLAorCQkoX19wc3Vuc2lnbmVkX3QpYmUzMl90b19jcHUoYnRyZWUtPmJlZm9yZSksCiAJCShfX3BzdW5zaWduZWRfdClOVUxMKTsKIH0KIApAQCAtMjI5MCw5ICsyMjg0LDEwIEBACiAJCQkJOiAwLAogCQkoX19wc3Vuc2lnbmVkX3QpY29udGV4dC0+ZHVwY250LAogCQkoX19wc3Vuc2lnbmVkX3QpY29udGV4dC0+ZmxhZ3MsCi0JCShfX3BzdW5zaWduZWRfdClJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSwKLQkJKF9fcHN1bnNpZ25lZF90KUlOVF9HRVQobGVhZi0+ZW50cmllc1swXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpLAotCQkoX19wc3Vuc2lnbmVkX3QpSU5UX0dFVChsZWFmLT5lbnRyaWVzW0lOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkpOworCQkoX19wc3Vuc2lnbmVkX3QpYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSwKKwkJKF9fcHN1bnNpZ25lZF90KWJlMzJfdG9fY3B1KGxlYWYtPmVudHJpZXNbMF0uaGFzaHZhbCksCisJCShfX3BzdW5zaWduZWRfdCliZTMyX3RvX2NwdShsZWFmLT5lbnRyaWVzWworCQkJCWJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCktMV0uaGFzaHZhbCkpOwogfQogCiAvKgpAQCAtMjUyMiw3ICsyNTE3LDcgQEAKIAlzdHJ1Y3Qgdm5vZGUJKnZwLAogCWNyZWRfdAkJKmNyZWQpCiB7Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IExJTlZGU19HRVRfSVAodnApOworCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAKIAlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtMjU0MCw3ICsyNTM1LDcgQEAKIAlzdHJ1Y3Qgdm5vZGUJKnZwLAogCWNyZWRfdAkJKmNyZWQpCiB7Ci0Jc3RydWN0IGlub2RlCSppbm9kZSA9IExJTlZGU19HRVRfSVAodnApOworCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSB2bl90b19pbm9kZSh2cCk7CiAKIAlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKaW5kZXggZmU5MWVhYy4uNzE3NjgyNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAl4ZnNfaWRhdGFfcmVhbGxvYyhkcCwgc2l6ZW9mKCpoZHIpLCBYRlNfQVRUUl9GT1JLKTsKIAloZHIgPSAoeGZzX2F0dHJfc2ZfaGRyX3QgKilpZnAtPmlmX3UxLmlmX2RhdGE7CiAJaGRyLT5jb3VudCA9IDA7Ci0JSU5UX1NFVChoZHItPnRvdHNpemUsIEFSQ0hfQ09OVkVSVCwgc2l6ZW9mKCpoZHIpKTsKKwloZHItPnRvdHNpemUgPSBjcHVfdG9fYmUxNihzaXplb2YoKmhkcikpOwogCXhmc190cmFuc19sb2dfaW5vZGUoYXJncy0+dHJhbnMsIGRwLCBYRlNfSUxPR19DT1JFIHwgWEZTX0lMT0dfQURBVEEpOwogfQogCkBAIC0yMjQsOCArMjI0LDcgQEAKIAlBU1NFUlQoaWZwLT5pZl9mbGFncyAmIFhGU19JRklOTElORSk7CiAJc2YgPSAoeGZzX2F0dHJfc2hvcnRmb3JtX3QgKilpZnAtPmlmX3UxLmlmX2RhdGE7CiAJc2ZlID0gJnNmLT5saXN0WzBdOwotCWZvciAoaSA9IDA7IGkgPCBJTlRfR0VUKHNmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7Ci0JCQkJc2ZlID0gWEZTX0FUVFJfU0ZfTkVYVEVOVFJZKHNmZSksIGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBzZi0+aGRyLmNvdW50OyBzZmUgPSBYRlNfQVRUUl9TRl9ORVhURU5UUlkoc2ZlKSwgaSsrKSB7CiAjaWZkZWYgREVCVUcKIAkJaWYgKHNmZS0+bmFtZWxlbiAhPSBhcmdzLT5uYW1lbGVuKQogCQkJY29udGludWU7CkBAIC0yNDgsMTMgKzI0NywxMyBAQAogCXNmZSA9ICh4ZnNfYXR0cl9zZl9lbnRyeV90ICopKChjaGFyICopc2YgKyBvZmZzZXQpOwogCiAJc2ZlLT5uYW1lbGVuID0gYXJncy0+bmFtZWxlbjsKLQlJTlRfU0VUKHNmZS0+dmFsdWVsZW4sIEFSQ0hfQ09OVkVSVCwgYXJncy0+dmFsdWVsZW4pOworCXNmZS0+dmFsdWVsZW4gPSBhcmdzLT52YWx1ZWxlbjsKIAlzZmUtPmZsYWdzID0gKGFyZ3MtPmZsYWdzICYgQVRUUl9TRUNVUkUpID8gWEZTX0FUVFJfU0VDVVJFIDoKIAkJCSgoYXJncy0+ZmxhZ3MgJiBBVFRSX1JPT1QpID8gWEZTX0FUVFJfUk9PVCA6IDApOwogCW1lbWNweShzZmUtPm5hbWV2YWwsIGFyZ3MtPm5hbWUsIGFyZ3MtPm5hbWVsZW4pOwogCW1lbWNweSgmc2ZlLT5uYW1ldmFsW2FyZ3MtPm5hbWVsZW5dLCBhcmdzLT52YWx1ZSwgYXJncy0+dmFsdWVsZW4pOwotCUlOVF9NT0Qoc2YtPmhkci5jb3VudCwgQVJDSF9DT05WRVJULCAxKTsKLQlJTlRfTU9EKHNmLT5oZHIudG90c2l6ZSwgQVJDSF9DT05WRVJULCBzaXplKTsKKwlzZi0+aGRyLmNvdW50Kys7CisJYmUxNl9hZGQoJnNmLT5oZHIudG90c2l6ZSwgc2l6ZSk7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZShhcmdzLT50cmFucywgZHAsIFhGU19JTE9HX0NPUkUgfCBYRlNfSUxPR19BREFUQSk7CiAKIAl4ZnNfc2J2ZXJzaW9uX2FkZF9hdHRyMihtcCwgYXJncy0+dHJhbnMpOwpAQCAtMjc3LDcgKzI3Niw3IEBACiAJYmFzZSA9IHNpemVvZih4ZnNfYXR0cl9zZl9oZHJfdCk7CiAJc2YgPSAoeGZzX2F0dHJfc2hvcnRmb3JtX3QgKilkcC0+aV9hZnAtPmlmX3UxLmlmX2RhdGE7CiAJc2ZlID0gJnNmLT5saXN0WzBdOwotCWVuZCA9IElOVF9HRVQoc2YtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKKwllbmQgPSBzZi0+aGRyLmNvdW50OwogCWZvciAoaSA9IDA7IGkgPCBlbmQ7IHNmZSA9IFhGU19BVFRSX1NGX05FWFRFTlRSWShzZmUpLAogCQkJCQliYXNlICs9IHNpemUsIGkrKykgewogCQlzaXplID0gWEZTX0FUVFJfU0ZfRU5UU0laRShzZmUpOwpAQCAtMzAwLDExICsyOTksMTEgQEAKIAkgKiBGaXggdXAgdGhlIGF0dHJpYnV0ZSBmb3JrIGRhdGEsIGNvdmVyaW5nIHRoZSBob2xlCiAJICovCiAJZW5kID0gYmFzZSArIHNpemU7Ci0JdG90c2l6ZSA9IElOVF9HRVQoc2YtPmhkci50b3RzaXplLCBBUkNIX0NPTlZFUlQpOworCXRvdHNpemUgPSBiZTE2X3RvX2NwdShzZi0+aGRyLnRvdHNpemUpOwogCWlmIChlbmQgIT0gdG90c2l6ZSkKIAkJbWVtbW92ZSgmKChjaGFyICopc2YpW2Jhc2VdLCAmKChjaGFyICopc2YpW2VuZF0sIHRvdHNpemUgLSBlbmQpOwotCUlOVF9NT0Qoc2YtPmhkci5jb3VudCwgQVJDSF9DT05WRVJULCAtMSk7Ci0JSU5UX01PRChzZi0+aGRyLnRvdHNpemUsIEFSQ0hfQ09OVkVSVCwgLXNpemUpOworCXNmLT5oZHIuY291bnQtLTsKKwliZTE2X2FkZCgmc2YtPmhkci50b3RzaXplLCAtc2l6ZSk7CiAKIAkvKgogCSAqIEZpeCB1cCB0aGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBhdHRyaWJ1dGUgZm9yawpAQCAtMzYwLDcgKzM1OSw3IEBACiAJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZJTkxJTkUpOwogCXNmID0gKHhmc19hdHRyX3Nob3J0Zm9ybV90ICopaWZwLT5pZl91MS5pZl9kYXRhOwogCXNmZSA9ICZzZi0+bGlzdFswXTsKLQlmb3IgKGkgPSAwOyBpIDwgSU5UX0dFVChzZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCWZvciAoaSA9IDA7IGkgPCBzZi0+aGRyLmNvdW50OwogCQkJCXNmZSA9IFhGU19BVFRSX1NGX05FWFRFTlRSWShzZmUpLCBpKyspIHsKIAkJaWYgKHNmZS0+bmFtZWxlbiAhPSBhcmdzLT5uYW1lbGVuKQogCQkJY29udGludWU7CkBAIC0zOTEsNyArMzkwLDcgQEAKIAlBU1NFUlQoYXJncy0+ZHAtPmlfZC5kaV9hZm9ybWF0ID09IFhGU19JRklOTElORSk7CiAJc2YgPSAoeGZzX2F0dHJfc2hvcnRmb3JtX3QgKilhcmdzLT5kcC0+aV9hZnAtPmlmX3UxLmlmX2RhdGE7CiAJc2ZlID0gJnNmLT5saXN0WzBdOwotCWZvciAoaSA9IDA7IGkgPCBJTlRfR0VUKHNmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7CisJZm9yIChpID0gMDsgaSA8IHNmLT5oZHIuY291bnQ7CiAJCQkJc2ZlID0gWEZTX0FUVFJfU0ZfTkVYVEVOVFJZKHNmZSksIGkrKykgewogCQlpZiAoc2ZlLT5uYW1lbGVuICE9IGFyZ3MtPm5hbWVsZW4pCiAJCQljb250aW51ZTsKQEAgLTQwNCwxNCArNDAzLDE0IEBACiAJCSAgICAoKHNmZS0+ZmxhZ3MgJiBYRlNfQVRUUl9ST09UKSAhPSAwKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXJncy0+ZmxhZ3MgJiBBVFRSX0tFUk5PVkFMKSB7Ci0JCQlhcmdzLT52YWx1ZWxlbiA9IElOVF9HRVQoc2ZlLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKTsKKwkJCWFyZ3MtPnZhbHVlbGVuID0gc2ZlLT52YWx1ZWxlbjsKIAkJCXJldHVybihYRlNfRVJST1IoRUVYSVNUKSk7CiAJCX0KLQkJaWYgKGFyZ3MtPnZhbHVlbGVuIDwgSU5UX0dFVChzZmUtPnZhbHVlbGVuLCBBUkNIX0NPTlZFUlQpKSB7Ci0JCQlhcmdzLT52YWx1ZWxlbiA9IElOVF9HRVQoc2ZlLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKTsKKwkJaWYgKGFyZ3MtPnZhbHVlbGVuIDwgc2ZlLT52YWx1ZWxlbikgeworCQkJYXJncy0+dmFsdWVsZW4gPSBzZmUtPnZhbHVlbGVuOwogCQkJcmV0dXJuKFhGU19FUlJPUihFUkFOR0UpKTsKIAkJfQotCQlhcmdzLT52YWx1ZWxlbiA9IElOVF9HRVQoc2ZlLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKTsKKwkJYXJncy0+dmFsdWVsZW4gPSBzZmUtPnZhbHVlbGVuOwogCQltZW1jcHkoYXJncy0+dmFsdWUsICZzZmUtPm5hbWV2YWxbYXJncy0+bmFtZWxlbl0sCiAJCQkJCQkgICAgYXJncy0+dmFsdWVsZW4pOwogCQlyZXR1cm4oWEZTX0VSUk9SKEVFWElTVCkpOwpAQCAtNDM4LDcgKzQzNyw3IEBACiAJZHAgPSBhcmdzLT5kcDsKIAlpZnAgPSBkcC0+aV9hZnA7CiAJc2YgPSAoeGZzX2F0dHJfc2hvcnRmb3JtX3QgKilpZnAtPmlmX3UxLmlmX2RhdGE7Ci0Jc2l6ZSA9IElOVF9HRVQoc2YtPmhkci50b3RzaXplLCBBUkNIX0NPTlZFUlQpOworCXNpemUgPSBiZTE2X3RvX2NwdShzZi0+aGRyLnRvdHNpemUpOwogCXRtcGJ1ZmZlciA9IGttZW1fYWxsb2Moc2l6ZSwgS01fU0xFRVApOwogCUFTU0VSVCh0bXBidWZmZXIgIT0gTlVMTCk7CiAJbWVtY3B5KHRtcGJ1ZmZlciwgaWZwLT5pZl91MS5pZl9kYXRhLCBzaXplKTsKQEAgLTQ4MSwxMSArNDgwLDExIEBACiAJbmFyZ3Mub2tub2VudCA9IDE7CiAKIAlzZmUgPSAmc2YtPmxpc3RbMF07Ci0JZm9yIChpID0gMDsgaSA8IElOVF9HRVQoc2YtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHNmLT5oZHIuY291bnQ7IGkrKykgewogCQluYXJncy5uYW1lID0gKGNoYXIgKilzZmUtPm5hbWV2YWw7CiAJCW5hcmdzLm5hbWVsZW4gPSBzZmUtPm5hbWVsZW47CiAJCW5hcmdzLnZhbHVlID0gKGNoYXIgKikmc2ZlLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOwotCQluYXJncy52YWx1ZWxlbiA9IElOVF9HRVQoc2ZlLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKTsKKwkJbmFyZ3MudmFsdWVsZW4gPSBzZmUtPnZhbHVlbGVuOwogCQluYXJncy5oYXNodmFsID0geGZzX2RhX2hhc2huYW1lKChjaGFyICopc2ZlLT5uYW1ldmFsLAogCQkJCQkJc2ZlLT5uYW1lbGVuKTsKIAkJbmFyZ3MuZmxhZ3MgPSAoc2ZlLT5mbGFncyAmIFhGU19BVFRSX1NFQ1VSRSkgPyBBVFRSX1NFQ1VSRSA6CkBAIC01MTQsMTEgKzUxMyw5IEBACiAKIAlzYSA9ICh4ZnNfYXR0cl9zZl9zb3J0X3QgKilhOwogCXNiID0gKHhmc19hdHRyX3NmX3NvcnRfdCAqKWI7Ci0JaWYgKElOVF9HRVQoc2EtPmhhc2gsIEFSQ0hfQ09OVkVSVCkKLQkJCQk8IElOVF9HRVQoc2ItPmhhc2gsIEFSQ0hfQ09OVkVSVCkpIHsKKwlpZiAoc2EtPmhhc2ggPCBzYi0+aGFzaCkgewogCQlyZXR1cm4oLTEpOwotCX0gZWxzZSBpZiAoSU5UX0dFVChzYS0+aGFzaCwgQVJDSF9DT05WRVJUKQotCQkJCT4gSU5UX0dFVChzYi0+aGFzaCwgQVJDSF9DT05WRVJUKSkgeworCX0gZWxzZSBpZiAoc2EtPmhhc2ggPiBzYi0+aGFzaCkgewogCQlyZXR1cm4oMSk7CiAJfSBlbHNlIHsKIAkJcmV0dXJuKHNhLT5lbnRubyAtIHNiLT5lbnRubyk7CkBAIC01NjAsMTAgKzU1Nyw4IEBACiAJICogSWYgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gsIGRvIG5vdCBib3RoZXIgd2l0aCBzb3J0aW5nLgogCSAqIE5vdGUgdGhlIGdlbmVyb3VzIGZ1ZGdlIGZhY3RvciBvZiAxNiBvdmVyaGVhZCBieXRlcyBwZXIgZW50cnkuCiAJICovCi0JaWYgKChkcC0+aV9hZnAtPmlmX2J5dGVzICsgSU5UX0dFVChzZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICogMTYpCi0JCQkJCQkJPCBjb250ZXh0LT5idWZzaXplKSB7Ci0JCWZvciAoaSA9IDAsIHNmZSA9ICZzZi0+bGlzdFswXTsKLQkJCQlpIDwgSU5UX0dFVChzZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOyBpKyspIHsKKwlpZiAoKGRwLT5pX2FmcC0+aWZfYnl0ZXMgKyBzZi0+aGRyLmNvdW50ICogMTYpIDwgY29udGV4dC0+YnVmc2l6ZSkgeworCQlmb3IgKGkgPSAwLCBzZmUgPSAmc2YtPmxpc3RbMF07IGkgPCBzZi0+aGRyLmNvdW50OyBpKyspIHsKIAkJCWF0dHJuYW1lc190CSpuYW1lc3A7CiAKIAkJCWlmICgoKGNvbnRleHQtPmZsYWdzICYgQVRUUl9TRUNVUkUpICE9IDApICE9CkBAIC01ODQsMTQgKzU3OSwxMyBAQAogCQkJaWYgKGNvbnRleHQtPmZsYWdzICYgQVRUUl9LRVJOT1ZBTCkgewogCQkJCUFTU0VSVChjb250ZXh0LT5mbGFncyAmIEFUVFJfS0VSTkFNRUxTKTsKIAkJCQljb250ZXh0LT5jb3VudCArPSBuYW1lc3AtPmF0dHJfbmFtZWxlbiArCi0JCQkJCUlOVF9HRVQoc2ZlLT5uYW1lbGVuLCBBUkNIX0NPTlZFUlQpICsgMTsKKwkJCQkJc2ZlLT5uYW1lbGVuICsgMTsKIAkJCX0KIAkJCWVsc2UgewogCQkJCWlmICh4ZnNfYXR0cl9wdXRfbGlzdGVudChjb250ZXh0LCBuYW1lc3AsCiAJCQkJCQkgICAoY2hhciAqKXNmZS0+bmFtZXZhbCwKIAkJCQkJCSAgIChpbnQpc2ZlLT5uYW1lbGVuLAotCQkJCQkJICAgKGludClJTlRfR0VUKHNmZS0+dmFsdWVsZW4sCi0JCQkJCQkJCUFSQ0hfQ09OVkVSVCkpKQorCQkJCQkJICAgKGludClzZmUtPnZhbHVlbGVuKSkKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCQlzZmUgPSBYRlNfQVRUUl9TRl9ORVhURU5UUlkoc2ZlKTsKQEAgLTYwMyw3ICs1OTcsNyBAQAogCS8qCiAJICogSXQgZGlkbid0IGFsbCBmaXQsIHNvIHdlIGhhdmUgdG8gc29ydCBldmVyeXRoaW5nIG9uIGhhc2h2YWwuCiAJICovCi0Jc2JzaXplID0gSU5UX0dFVChzZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICogc2l6ZW9mKCpzYnVmKTsKKwlzYnNpemUgPSBzZi0+aGRyLmNvdW50ICogc2l6ZW9mKCpzYnVmKTsKIAlzYnAgPSBzYnVmID0ga21lbV9hbGxvYyhzYnNpemUsIEtNX1NMRUVQKTsKIAogCS8qCkBAIC02MTEsOCArNjA1LDcgQEAKIAkgKiB0aGUgcmVsZXZhbnQgaW5mbyBmcm9tIG9ubHkgdGhvc2UgdGhhdCBtYXRjaCBpbnRvIGEgYnVmZmVyLgogCSAqLwogCW5zYnVmID0gMDsKLQlmb3IgKGkgPSAwLCBzZmUgPSAmc2YtPmxpc3RbMF07Ci0JCQlpIDwgSU5UX0dFVChzZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOyBpKyspIHsKKwlmb3IgKGkgPSAwLCBzZmUgPSAmc2YtPmxpc3RbMF07IGkgPCBzZi0+aGRyLmNvdW50OyBpKyspIHsKIAkJaWYgKHVubGlrZWx5KAogCQkgICAgKChjaGFyICopc2ZlIDwgKGNoYXIgKilzZikgfHwKIAkJICAgICgoY2hhciAqKXNmZSA+PSAoKGNoYXIgKilzZiArIGRwLT5pX2FmcC0+aWZfYnl0ZXMpKSkpIHsKQEAgLTYzNiw4ICs2MjksNyBAQAogCQkJY29udGludWU7CiAJCX0KIAkJc2JwLT5lbnRubyA9IGk7Ci0JCUlOVF9TRVQoc2JwLT5oYXNoLCBBUkNIX0NPTlZFUlQsCi0JCQl4ZnNfZGFfaGFzaG5hbWUoKGNoYXIgKilzZmUtPm5hbWV2YWwsIHNmZS0+bmFtZWxlbikpOworCQlzYnAtPmhhc2ggPSB4ZnNfZGFfaGFzaG5hbWUoKGNoYXIgKilzZmUtPm5hbWV2YWwsIHNmZS0+bmFtZWxlbik7CiAJCXNicC0+bmFtZSA9IChjaGFyICopc2ZlLT5uYW1ldmFsOwogCQlzYnAtPm5hbWVsZW4gPSBzZmUtPm5hbWVsZW47CiAJCS8qIFRoZXNlIGFyZSBieXRlcywgYW5kIGJvdGggb24tZGlzaywgZG9uJ3QgZW5kaWFuLWZsaXAgKi8KQEAgLTY2MCwxMiArNjUyLDEyIEBACiAJY3Vyc29yLT5pbml0dGVkID0gMTsKIAljdXJzb3ItPmJsa25vID0gMDsKIAlmb3IgKHNicCA9IHNidWYsIGkgPSAwOyBpIDwgbnNidWY7IGkrKywgc2JwKyspIHsKLQkJaWYgKElOVF9HRVQoc2JwLT5oYXNoLCBBUkNIX0NPTlZFUlQpID09IGN1cnNvci0+aGFzaHZhbCkgeworCQlpZiAoc2JwLT5oYXNoID09IGN1cnNvci0+aGFzaHZhbCkgewogCQkJaWYgKGN1cnNvci0+b2Zmc2V0ID09IGNvdW50KSB7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQljb3VudCsrOwotCQl9IGVsc2UgaWYgKElOVF9HRVQoc2JwLT5oYXNoLCBBUkNIX0NPTlZFUlQpID4gY3Vyc29yLT5oYXNodmFsKSB7CisJCX0gZWxzZSBpZiAoc2JwLT5oYXNoID4gY3Vyc29yLT5oYXNodmFsKSB7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTY4NSw4ICs2NzcsOCBAQAogCQkJKChzYnAtPmZsYWdzICYgWEZTX0FUVFJfUk9PVCkgPyAmYXR0cl90cnVzdGVkIDoKIAkJCSAgJmF0dHJfdXNlcik7CiAKLQkJaWYgKGN1cnNvci0+aGFzaHZhbCAhPSBJTlRfR0VUKHNicC0+aGFzaCwgQVJDSF9DT05WRVJUKSkgewotCQkJY3Vyc29yLT5oYXNodmFsID0gSU5UX0dFVChzYnAtPmhhc2gsIEFSQ0hfQ09OVkVSVCk7CisJCWlmIChjdXJzb3ItPmhhc2h2YWwgIT0gc2JwLT5oYXNoKSB7CisJCQljdXJzb3ItPmhhc2h2YWwgPSBzYnAtPmhhc2g7CiAJCQljdXJzb3ItPm9mZnNldCA9IDA7CiAJCX0KIAkJaWYgKGNvbnRleHQtPmZsYWdzICYgQVRUUl9LRVJOT1ZBTCkgewpAQCAtNjk2LDcgKzY4OCw3IEBACiAJCX0gZWxzZSB7CiAJCQlpZiAoeGZzX2F0dHJfcHV0X2xpc3RlbnQoY29udGV4dCwgbmFtZXNwLAogCQkJCQlzYnAtPm5hbWUsIHNicC0+bmFtZWxlbiwKLQkJCQkJSU5UX0dFVChzYnAtPnZhbHVlbGVuLCBBUkNIX0NPTlZFUlQpKSkKKwkJCQkJc2JwLT52YWx1ZWxlbikpCiAJCQkJYnJlYWs7CiAJCX0KIAkJY3Vyc29yLT5vZmZzZXQrKzsKQEAgLTcyMCwxMiArNzEyLDExIEBACiAJaW50IGJ5dGVzLCBpOwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpOwogCiAJZW50cnkgPSAmbGVhZi0+ZW50cmllc1swXTsKIAlieXRlcyA9IHNpemVvZihzdHJ1Y3QgeGZzX2F0dHJfc2ZfaGRyKTsKLQlmb3IgKGkgPSAwOyBpIDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7IGVudHJ5KyssIGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpOyBlbnRyeSsrLCBpKyspIHsKIAkJaWYgKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX0lOQ09NUExFVEUpCiAJCQljb250aW51ZTsJCS8qIGRvbid0IGNvcHkgcGFydGlhbCBlbnRyaWVzICovCiAJCWlmICghKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX0xPQ0FMKSkKQEAgLTczMywxMSArNzI0LDExIEBACiAJCW5hbWVfbG9jID0gWEZTX0FUVFJfTEVBRl9OQU1FX0xPQ0FMKGxlYWYsIGkpOwogCQlpZiAobmFtZV9sb2MtPm5hbWVsZW4gPj0gWEZTX0FUVFJfU0ZfRU5UU0laRV9NQVgpCiAJCQlyZXR1cm4oMCk7Ci0JCWlmIChJTlRfR0VUKG5hbWVfbG9jLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKSA+PSBYRlNfQVRUUl9TRl9FTlRTSVpFX01BWCkKKwkJaWYgKGJlMTZfdG9fY3B1KG5hbWVfbG9jLT52YWx1ZWxlbikgPj0gWEZTX0FUVFJfU0ZfRU5UU0laRV9NQVgpCiAJCQlyZXR1cm4oMCk7CiAJCWJ5dGVzICs9IHNpemVvZihzdHJ1Y3QgeGZzX2F0dHJfc2ZfZW50cnkpLTEKIAkJCQkrIG5hbWVfbG9jLT5uYW1lbGVuCi0JCQkJKyBJTlRfR0VUKG5hbWVfbG9jLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKTsKKwkJCQkrIGJlMTZfdG9fY3B1KG5hbWVfbG9jLT52YWx1ZWxlbik7CiAJfQogCWlmICgoZHAtPmlfbW91bnQtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQVRUUjIpICYmCiAJICAgIChieXRlcyA9PSBzaXplb2Yoc3RydWN0IHhmc19hdHRyX3NmX2hkcikpKQpAQCAtNzY2LDggKzc1Nyw3IEBACiAJQVNTRVJUKGJwICE9IE5VTEwpOwogCW1lbWNweSh0bXBidWZmZXIsIGJwLT5kYXRhLCBYRlNfTEJTSVpFKGRwLT5pX21vdW50KSk7CiAJbGVhZiA9ICh4ZnNfYXR0cl9sZWFmYmxvY2tfdCAqKXRtcGJ1ZmZlcjsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKIAltZW1zZXQoYnAtPmRhdGEsIDAsIFhGU19MQlNJWkUoZHAtPmlfbW91bnQpKTsKIAogCS8qCkBAIC04MTAsNyArODAwLDcgQEAKIAluYXJncy50cmFucyA9IGFyZ3MtPnRyYW5zOwogCW5hcmdzLm9rbm9lbnQgPSAxOwogCWVudHJ5ID0gJmxlYWYtPmVudHJpZXNbMF07Ci0JZm9yIChpID0gMDsgaSA8IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOyBlbnRyeSsrLCBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsgZW50cnkrKywgaSsrKSB7CiAJCWlmIChlbnRyeS0+ZmxhZ3MgJiBYRlNfQVRUUl9JTkNPTVBMRVRFKQogCQkJY29udGludWU7CS8qIGRvbid0IGNvcHkgcGFydGlhbCBlbnRyaWVzICovCiAJCWlmICghZW50cnktPm5hbWVpZHgpCkBAIC04MjAsOCArODEwLDggQEAKIAkJbmFyZ3MubmFtZSA9IChjaGFyICopbmFtZV9sb2MtPm5hbWV2YWw7CiAJCW5hcmdzLm5hbWVsZW4gPSBuYW1lX2xvYy0+bmFtZWxlbjsKIAkJbmFyZ3MudmFsdWUgPSAoY2hhciAqKSZuYW1lX2xvYy0+bmFtZXZhbFtuYXJncy5uYW1lbGVuXTsKLQkJbmFyZ3MudmFsdWVsZW4gPSBJTlRfR0VUKG5hbWVfbG9jLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKTsKLQkJbmFyZ3MuaGFzaHZhbCA9IElOVF9HRVQoZW50cnktPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7CisJCW5hcmdzLnZhbHVlbGVuID0gYmUxNl90b19jcHUobmFtZV9sb2MtPnZhbHVlbGVuKTsKKwkJbmFyZ3MuaGFzaHZhbCA9IGJlMzJfdG9fY3B1KGVudHJ5LT5oYXNodmFsKTsKIAkJbmFyZ3MuZmxhZ3MgPSAoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSA/IEFUVFJfU0VDVVJFIDoKIAkJCSAgICAgICgoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfUk9PVCkgPyBBVFRSX1JPT1QgOiAwKTsKIAkJeGZzX2F0dHJfc2hvcnRmb3JtX2FkZCgmbmFyZ3MsIGZvcmtvZmYpOwpAQCAtODc1LDEzICs4NjUsMTIgQEAKIAkJZ290byBvdXQ7CiAJbm9kZSA9IGJwMS0+ZGF0YTsKIAlsZWFmID0gYnAyLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpOwogCS8qIGJvdGggb24tZGlzaywgZG9uJ3QgZW5kaWFuLWZsaXAgdHdpY2UgKi8KIAlub2RlLT5idHJlZVswXS5oYXNodmFsID0KLQkJbGVhZi0+ZW50cmllc1tJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xIF0uaGFzaHZhbDsKLQlJTlRfU0VUKG5vZGUtPmJ0cmVlWzBdLmJlZm9yZSwgQVJDSF9DT05WRVJULCBibGtubyk7Ci0JSU5UX1NFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCwgMSk7CisJCWxlYWYtPmVudHJpZXNbYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KS0xIF0uaGFzaHZhbDsKKwlub2RlLT5idHJlZVswXS5iZWZvcmUgPSBjcHVfdG9fYmUzMihibGtubyk7CisJbm9kZS0+aGRyLmNvdW50ID0gY3B1X3RvX2JlMTYoMSk7CiAJeGZzX2RhX2xvZ19idWYoYXJncy0+dHJhbnMsIGJwMSwgMCwgWEZTX0xCU0laRShkcC0+aV9tb3VudCkgLSAxKTsKIAllcnJvciA9IDA7CiBvdXQ6CkBAIC05MjAsMTkgKzkwOSwxNiBAQAogCWxlYWYgPSBicC0+ZGF0YTsKIAltZW1zZXQoKGNoYXIgKilsZWFmLCAwLCBYRlNfTEJTSVpFKGRwLT5pX21vdW50KSk7CiAJaGRyID0gJmxlYWYtPmhkcjsKLQlJTlRfU0VUKGhkci0+aW5mby5tYWdpYywgQVJDSF9DT05WRVJULCBYRlNfQVRUUl9MRUFGX01BR0lDKTsKLQlJTlRfU0VUKGhkci0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQsIFhGU19MQlNJWkUoZHAtPmlfbW91bnQpKTsKKwloZHItPmluZm8ubWFnaWMgPSBjcHVfdG9fYmUxNihYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwloZHItPmZpcnN0dXNlZCA9IGNwdV90b19iZTE2KFhGU19MQlNJWkUoZHAtPmlfbW91bnQpKTsKIAlpZiAoIWhkci0+Zmlyc3R1c2VkKSB7Ci0JCUlOVF9TRVQoaGRyLT5maXJzdHVzZWQsIEFSQ0hfQ09OVkVSVCwKKwkJaGRyLT5maXJzdHVzZWQgPSBjcHVfdG9fYmUxNigKIAkJCVhGU19MQlNJWkUoZHAtPmlfbW91bnQpIC0gWEZTX0FUVFJfTEVBRl9OQU1FX0FMSUdOKTsKIAl9CiAKLQlJTlRfU0VUKGhkci0+ZnJlZW1hcFswXS5iYXNlLCBBUkNIX0NPTlZFUlQsCi0JCQkJCQlzaXplb2YoeGZzX2F0dHJfbGVhZl9oZHJfdCkpOwotCUlOVF9TRVQoaGRyLT5mcmVlbWFwWzBdLnNpemUsIEFSQ0hfQ09OVkVSVCwKLQkJCQkJICBJTlRfR0VUKGhkci0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQpCi0JCQkJCS0gSU5UX0dFVChoZHItPmZyZWVtYXBbMF0uYmFzZSwKLQkJCQkJCQkJQVJDSF9DT05WRVJUKSk7CisJaGRyLT5mcmVlbWFwWzBdLmJhc2UgPSBjcHVfdG9fYmUxNihzaXplb2YoeGZzX2F0dHJfbGVhZl9oZHJfdCkpOworCWhkci0+ZnJlZW1hcFswXS5zaXplID0gY3B1X3RvX2JlMTYoYmUxNl90b19jcHUoaGRyLT5maXJzdHVzZWQpIC0KKwkJCQkJICAgc2l6ZW9mKHhmc19hdHRyX2xlYWZfaGRyX3QpKTsKIAogCXhmc19kYV9sb2dfYnVmKGFyZ3MtPnRyYW5zLCBicCwgMCwgWEZTX0xCU0laRShkcC0+aV9tb3VudCkgLSAxKTsKIApAQCAtMTAwNCwxMCArOTkwLDkgQEAKIAlpbnQgdGFibGVzaXplLCBlbnRzaXplLCBzdW0sIHRtcCwgaTsKIAogCWxlYWYgPSBicC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKIAlBU1NFUlQoKGFyZ3MtPmluZGV4ID49IDApCi0JCSYmIChhcmdzLT5pbmRleCA8PSBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkpOworCQkmJiAoYXJncy0+aW5kZXggPD0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSkpOwogCWhkciA9ICZsZWFmLT5oZHI7CiAJZW50c2l6ZSA9IHhmc19hdHRyX2xlYWZfbmV3ZW50c2l6ZShhcmdzLT5uYW1lbGVuLCBhcmdzLT52YWx1ZWxlbiwKIAkJCSAgIGFyZ3MtPnRyYW5zLT50X21vdW50cC0+bV9zYi5zYl9ibG9ja3NpemUsIE5VTEwpOwpAQCAtMTAxNiwyNiArMTAwMSwyNSBAQAogCSAqIFNlYXJjaCB0aHJvdWdoIGZyZWVtYXAgZm9yIGZpcnN0LWZpdCBvbiBuZXcgbmFtZSBsZW5ndGguCiAJICogKG1heSBuZWVkIHRvIGZpZ3VyZSBpbiBzaXplIG9mIGVudHJ5IHN0cnVjdCB0b28pCiAJICovCi0JdGFibGVzaXplID0gKElOVF9HRVQoaGRyLT5jb3VudCwgQVJDSF9DT05WRVJUKSArIDEpCisJdGFibGVzaXplID0gKGJlMTZfdG9fY3B1KGhkci0+Y291bnQpICsgMSkKIAkJCQkJKiBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KQogCQkJCQkrIHNpemVvZih4ZnNfYXR0cl9sZWFmX2hkcl90KTsKIAltYXAgPSAmaGRyLT5mcmVlbWFwW1hGU19BVFRSX0xFQUZfTUFQU0laRS0xXTsKIAlmb3IgKHN1bSA9IDAsIGkgPSBYRlNfQVRUUl9MRUFGX01BUFNJWkUtMTsgaSA+PSAwOyBtYXAtLSwgaS0tKSB7Ci0JCWlmICh0YWJsZXNpemUgPiBJTlRfR0VUKGhkci0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQpKSB7Ci0JCQlzdW0gKz0gSU5UX0dFVChtYXAtPnNpemUsIEFSQ0hfQ09OVkVSVCk7CisJCWlmICh0YWJsZXNpemUgPiBiZTE2X3RvX2NwdShoZHItPmZpcnN0dXNlZCkpIHsKKwkJCXN1bSArPSBiZTE2X3RvX2NwdShtYXAtPnNpemUpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFtYXAtPnNpemUpCiAJCQljb250aW51ZTsJLyogbm8gc3BhY2UgaW4gdGhpcyBtYXAgKi8KIAkJdG1wID0gZW50c2l6ZTsKLQkJaWYgKElOVF9HRVQobWFwLT5iYXNlLCBBUkNIX0NPTlZFUlQpCi0JCQkJPCBJTlRfR0VUKGhkci0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQpKQorCQlpZiAoYmUxNl90b19jcHUobWFwLT5iYXNlKSA8IGJlMTZfdG9fY3B1KGhkci0+Zmlyc3R1c2VkKSkKIAkJCXRtcCArPSBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KTsKLQkJaWYgKElOVF9HRVQobWFwLT5zaXplLCBBUkNIX0NPTlZFUlQpID49IHRtcCkgeworCQlpZiAoYmUxNl90b19jcHUobWFwLT5zaXplKSA+PSB0bXApIHsKIAkJCXRtcCA9IHhmc19hdHRyX2xlYWZfYWRkX3dvcmsoYnAsIGFyZ3MsIGkpOwogCQkJcmV0dXJuKHRtcCk7CiAJCX0KLQkJc3VtICs9IElOVF9HRVQobWFwLT5zaXplLCBBUkNIX0NPTlZFUlQpOworCQlzdW0gKz0gYmUxNl90b19jcHUobWFwLT5zaXplKTsKIAl9CiAKIAkvKgpAQCAtMTA1Niw3ICsxMDQwLDcgQEAKIAkgKiBBZnRlciBjb21wYWN0aW9uLCB0aGUgYmxvY2sgaXMgZ3VhcmFudGVlZCB0byBoYXZlIG9ubHkgb25lCiAJICogZnJlZSByZWdpb24sIGluIGZyZWVtYXBbMF0uICBJZiBpdCBpcyBub3QgYmlnIGVub3VnaCwgZ2l2ZSB1cC4KIAkgKi8KLQlpZiAoSU5UX0dFVChoZHItPmZyZWVtYXBbMF0uc2l6ZSwgQVJDSF9DT05WRVJUKQorCWlmIChiZTE2X3RvX2NwdShoZHItPmZyZWVtYXBbMF0uc2l6ZSkKIAkJCQk8IChlbnRzaXplICsgc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCkpKQogCQlyZXR1cm4oWEZTX0VSUk9SKEVOT1NQQykpOwogCkBAIC0xMDc5LDQ1ICsxMDYzLDQyIEBACiAJaW50IHRtcCwgaTsKIAogCWxlYWYgPSBicC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKIAloZHIgPSAmbGVhZi0+aGRyOwogCUFTU0VSVCgobWFwaW5kZXggPj0gMCkgJiYgKG1hcGluZGV4IDwgWEZTX0FUVFJfTEVBRl9NQVBTSVpFKSk7Ci0JQVNTRVJUKChhcmdzLT5pbmRleCA+PSAwKQotCQkmJiAoYXJncy0+aW5kZXggPD0gSU5UX0dFVChoZHItPmNvdW50LCBBUkNIX0NPTlZFUlQpKSk7CisJQVNTRVJUKChhcmdzLT5pbmRleCA+PSAwKSAmJiAoYXJncy0+aW5kZXggPD0gYmUxNl90b19jcHUoaGRyLT5jb3VudCkpKTsKIAogCS8qCiAJICogRm9yY2Ugb3BlbiBzb21lIHNwYWNlIGluIHRoZSBlbnRyeSBhcnJheSBhbmQgZmlsbCBpdCBpbi4KIAkgKi8KIAllbnRyeSA9ICZsZWFmLT5lbnRyaWVzW2FyZ3MtPmluZGV4XTsKLQlpZiAoYXJncy0+aW5kZXggPCBJTlRfR0VUKGhkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCkpIHsKLQkJdG1wICA9IElOVF9HRVQoaGRyLT5jb3VudCwgQVJDSF9DT05WRVJUKSAtIGFyZ3MtPmluZGV4OworCWlmIChhcmdzLT5pbmRleCA8IGJlMTZfdG9fY3B1KGhkci0+Y291bnQpKSB7CisJCXRtcCAgPSBiZTE2X3RvX2NwdShoZHItPmNvdW50KSAtIGFyZ3MtPmluZGV4OwogCQl0bXAgKj0gc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCk7CiAJCW1lbW1vdmUoKGNoYXIgKikoZW50cnkrMSksIChjaGFyICopZW50cnksIHRtcCk7CiAJCXhmc19kYV9sb2dfYnVmKGFyZ3MtPnRyYW5zLCBicCwKIAkJICAgIFhGU19EQV9MT0dSQU5HRShsZWFmLCBlbnRyeSwgdG1wICsgc2l6ZW9mKCplbnRyeSkpKTsKIAl9Ci0JSU5UX01PRChoZHItPmNvdW50LCBBUkNIX0NPTlZFUlQsIDEpOworCWJlMTZfYWRkKCZoZHItPmNvdW50LCAxKTsKIAogCS8qCiAJICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBuZXcgc3RyaW5nIChhdCB0aGUgZW5kIG9mIHRoZSBydW4pLgogCSAqLwogCW1hcCA9ICZoZHItPmZyZWVtYXBbbWFwaW5kZXhdOwogCW1wID0gYXJncy0+dHJhbnMtPnRfbW91bnRwOwotCUFTU0VSVChJTlRfR0VUKG1hcC0+YmFzZSwgQVJDSF9DT05WRVJUKSA8IFhGU19MQlNJWkUobXApKTsKLQlBU1NFUlQoKElOVF9HRVQobWFwLT5iYXNlLCBBUkNIX0NPTlZFUlQpICYgMHgzKSA9PSAwKTsKLQlBU1NFUlQoSU5UX0dFVChtYXAtPnNpemUsIEFSQ0hfQ09OVkVSVCkgPj0KKwlBU1NFUlQoYmUxNl90b19jcHUobWFwLT5iYXNlKSA8IFhGU19MQlNJWkUobXApKTsKKwlBU1NFUlQoKGJlMTZfdG9fY3B1KG1hcC0+YmFzZSkgJiAweDMpID09IDApOworCUFTU0VSVChiZTE2X3RvX2NwdShtYXAtPnNpemUpID49CiAJCXhmc19hdHRyX2xlYWZfbmV3ZW50c2l6ZShhcmdzLT5uYW1lbGVuLCBhcmdzLT52YWx1ZWxlbiwKIAkJCQkJIG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSwgTlVMTCkpOwotCUFTU0VSVChJTlRfR0VUKG1hcC0+c2l6ZSwgQVJDSF9DT05WRVJUKSA8IFhGU19MQlNJWkUobXApKTsKLQlBU1NFUlQoKElOVF9HRVQobWFwLT5zaXplLCBBUkNIX0NPTlZFUlQpICYgMHgzKSA9PSAwKTsKLQlJTlRfTU9EKG1hcC0+c2l6ZSwgQVJDSF9DT05WRVJULAorCUFTU0VSVChiZTE2X3RvX2NwdShtYXAtPnNpemUpIDwgWEZTX0xCU0laRShtcCkpOworCUFTU0VSVCgoYmUxNl90b19jcHUobWFwLT5zaXplKSAmIDB4MykgPT0gMCk7CisJYmUxNl9hZGQoJm1hcC0+c2l6ZSwKIAkJLXhmc19hdHRyX2xlYWZfbmV3ZW50c2l6ZShhcmdzLT5uYW1lbGVuLCBhcmdzLT52YWx1ZWxlbiwKIAkJCQkJICBtcC0+bV9zYi5zYl9ibG9ja3NpemUsICZ0bXApKTsKLQlJTlRfU0VUKGVudHJ5LT5uYW1laWR4LCBBUkNIX0NPTlZFUlQsCi0JCQkJCUlOVF9HRVQobWFwLT5iYXNlLCBBUkNIX0NPTlZFUlQpCi0JCQkJICAgICAgKyBJTlRfR0VUKG1hcC0+c2l6ZSwgQVJDSF9DT05WRVJUKSk7Ci0JSU5UX1NFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJULCBhcmdzLT5oYXNodmFsKTsKKwllbnRyeS0+bmFtZWlkeCA9IGNwdV90b19iZTE2KGJlMTZfdG9fY3B1KG1hcC0+YmFzZSkgKworCQkJCSAgICAgYmUxNl90b19jcHUobWFwLT5zaXplKSk7CisJZW50cnktPmhhc2h2YWwgPSBjcHVfdG9fYmUzMihhcmdzLT5oYXNodmFsKTsKIAllbnRyeS0+ZmxhZ3MgPSB0bXAgPyBYRlNfQVRUUl9MT0NBTCA6IDA7CiAJZW50cnktPmZsYWdzIHw9IChhcmdzLT5mbGFncyAmIEFUVFJfU0VDVVJFKSA/IFhGU19BVFRSX1NFQ1VSRSA6CiAJCQkoKGFyZ3MtPmZsYWdzICYgQVRUUl9ST09UKSA/IFhGU19BVFRSX1JPT1QgOiAwKTsKQEAgLTExMzAsMTIgKzExMTEsMTAgQEAKIAl9CiAJeGZzX2RhX2xvZ19idWYoYXJncy0+dHJhbnMsIGJwLAogCQkJICBYRlNfREFfTE9HUkFOR0UobGVhZiwgZW50cnksIHNpemVvZigqZW50cnkpKSk7Ci0JQVNTRVJUKChhcmdzLT5pbmRleCA9PSAwKSB8fCAoSU5UX0dFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKQotCQkJCQkJPj0gSU5UX0dFVCgoZW50cnktMSktPmhhc2h2YWwsCi0JCQkJCQkJICAgIEFSQ0hfQ09OVkVSVCkpKTsKLQlBU1NFUlQoKGFyZ3MtPmluZGV4ID09IElOVF9HRVQoaGRyLT5jb3VudCwgQVJDSF9DT05WRVJUKS0xKSB8fAotCSAgICAgICAoSU5UX0dFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKQotCQkJICAgIDw9IChJTlRfR0VUKChlbnRyeSsxKS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSkpKTsKKwlBU1NFUlQoKGFyZ3MtPmluZGV4ID09IDApIHx8CisJICAgICAgIChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgPj0gYmUzMl90b19jcHUoKGVudHJ5LTEpLT5oYXNodmFsKSkpOworCUFTU0VSVCgoYXJncy0+aW5kZXggPT0gYmUxNl90b19jcHUoaGRyLT5jb3VudCktMSkgfHwKKwkgICAgICAgKGJlMzJfdG9fY3B1KGVudHJ5LT5oYXNodmFsKSA8PSBiZTMyX3RvX2NwdSgoZW50cnkrMSktPmhhc2h2YWwpKSk7CiAKIAkvKgogCSAqIENvcHkgdGhlIGF0dHJpYnV0ZSBuYW1lIGFuZCB2YWx1ZSBpbnRvIHRoZSBuZXcgc3BhY2UuCkBAIC0xMTQ5LDEwICsxMTI4LDEwIEBACiAJaWYgKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX0xPQ0FMKSB7CiAJCW5hbWVfbG9jID0gWEZTX0FUVFJfTEVBRl9OQU1FX0xPQ0FMKGxlYWYsIGFyZ3MtPmluZGV4KTsKIAkJbmFtZV9sb2MtPm5hbWVsZW4gPSBhcmdzLT5uYW1lbGVuOwotCQlJTlRfU0VUKG5hbWVfbG9jLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJULCBhcmdzLT52YWx1ZWxlbik7CisJCW5hbWVfbG9jLT52YWx1ZWxlbiA9IGNwdV90b19iZTE2KGFyZ3MtPnZhbHVlbGVuKTsKIAkJbWVtY3B5KChjaGFyICopbmFtZV9sb2MtPm5hbWV2YWwsIGFyZ3MtPm5hbWUsIGFyZ3MtPm5hbWVsZW4pOwogCQltZW1jcHkoKGNoYXIgKikmbmFtZV9sb2MtPm5hbWV2YWxbYXJncy0+bmFtZWxlbl0sIGFyZ3MtPnZhbHVlLAotCQkJCSAgIElOVF9HRVQobmFtZV9sb2MtPnZhbHVlbGVuLCBBUkNIX0NPTlZFUlQpKTsKKwkJCQkgICBiZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pKTsKIAl9IGVsc2UgewogCQluYW1lX3JtdCA9IFhGU19BVFRSX0xFQUZfTkFNRV9SRU1PVEUobGVhZiwgYXJncy0+aW5kZXgpOwogCQluYW1lX3JtdC0+bmFtZWxlbiA9IGFyZ3MtPm5hbWVsZW47CkBAIC0xMTcxLDI4ICsxMTUwLDIzIEBACiAJLyoKIAkgKiBVcGRhdGUgdGhlIGNvbnRyb2wgaW5mbyBmb3IgdGhpcyBsZWFmIG5vZGUKIAkgKi8KLQlpZiAoSU5UX0dFVChlbnRyeS0+bmFtZWlkeCwgQVJDSF9DT05WRVJUKQotCQkJCTwgSU5UX0dFVChoZHItPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJUKSkgeworCWlmIChiZTE2X3RvX2NwdShlbnRyeS0+bmFtZWlkeCkgPCBiZTE2X3RvX2NwdShoZHItPmZpcnN0dXNlZCkpIHsKIAkJLyogYm90aCBvbi1kaXNrLCBkb24ndCBlbmRpYW4tZmxpcCB0d2ljZSAqLwogCQloZHItPmZpcnN0dXNlZCA9IGVudHJ5LT5uYW1laWR4OwogCX0KLQlBU1NFUlQoSU5UX0dFVChoZHItPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJUKQotCQkJCT49ICgoSU5UX0dFVChoZHItPmNvdW50LCBBUkNIX0NPTlZFUlQpCi0JCQkJCSogc2l6ZW9mKCplbnRyeSkpK3NpemVvZigqaGRyKSkpOwotCXRtcCA9IChJTlRfR0VUKGhkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCktMSkKLQkJCQkJKiBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KQorCUFTU0VSVChiZTE2X3RvX2NwdShoZHItPmZpcnN0dXNlZCkgPj0KKwkgICAgICAgKChiZTE2X3RvX2NwdShoZHItPmNvdW50KSAqIHNpemVvZigqZW50cnkpKSArIHNpemVvZigqaGRyKSkpOworCXRtcCA9IChiZTE2X3RvX2NwdShoZHItPmNvdW50KS0xKSAqIHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpCiAJCQkJCSsgc2l6ZW9mKHhmc19hdHRyX2xlYWZfaGRyX3QpOwogCW1hcCA9ICZoZHItPmZyZWVtYXBbMF07CiAJZm9yIChpID0gMDsgaSA8IFhGU19BVFRSX0xFQUZfTUFQU0laRTsgbWFwKyssIGkrKykgewotCQlpZiAoSU5UX0dFVChtYXAtPmJhc2UsIEFSQ0hfQ09OVkVSVCkgPT0gdG1wKSB7Ci0JCQlJTlRfTU9EKG1hcC0+YmFzZSwgQVJDSF9DT05WRVJULAotCQkJCQlzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KSk7Ci0JCQlJTlRfTU9EKG1hcC0+c2l6ZSwgQVJDSF9DT05WRVJULAotCQkJCQktc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCkpOworCQlpZiAoYmUxNl90b19jcHUobWFwLT5iYXNlKSA9PSB0bXApIHsKKwkJCWJlMTZfYWRkKCZtYXAtPmJhc2UsIHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpKTsKKwkJCWJlMTZfYWRkKCZtYXAtPnNpemUsCisJCQkJIC0oKGludClzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KSkpOwogCQl9CiAJfQotCUlOVF9NT0QoaGRyLT51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCwKLQkJCQl4ZnNfYXR0cl9sZWFmX2VudHNpemUobGVhZiwgYXJncy0+aW5kZXgpKTsKKwliZTE2X2FkZCgmaGRyLT51c2VkYnl0ZXMsIHhmc19hdHRyX2xlYWZfZW50c2l6ZShsZWFmLCBhcmdzLT5pbmRleCkpOwogCXhmc19kYV9sb2dfYnVmKGFyZ3MtPnRyYW5zLCBicCwKIAkJWEZTX0RBX0xPR1JBTkdFKGxlYWYsIGhkciwgc2l6ZW9mKCpoZHIpKSk7CiAJcmV0dXJuKDApOwpAQCAtMTIyMywyOCArMTE5NywyNSBAQAogCWhkcl9zID0gJmxlYWZfcy0+aGRyOwogCWhkcl9kID0gJmxlYWZfZC0+aGRyOwogCWhkcl9kLT5pbmZvID0gaGRyX3MtPmluZm87CS8qIHN0cnVjdCBjb3B5ICovCi0JSU5UX1NFVChoZHJfZC0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQsIFhGU19MQlNJWkUobXApKTsKKwloZHJfZC0+Zmlyc3R1c2VkID0gY3B1X3RvX2JlMTYoWEZTX0xCU0laRShtcCkpOwogCS8qIGhhbmRsZSB0cnVuY2F0aW9uIGdyYWNlZnVsbHkgKi8KIAlpZiAoIWhkcl9kLT5maXJzdHVzZWQpIHsKLQkJSU5UX1NFVChoZHJfZC0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQsCisJCWhkcl9kLT5maXJzdHVzZWQgPSBjcHVfdG9fYmUxNigKIAkJCQlYRlNfTEJTSVpFKG1wKSAtIFhGU19BVFRSX0xFQUZfTkFNRV9BTElHTik7CiAJfQogCWhkcl9kLT51c2VkYnl0ZXMgPSAwOwogCWhkcl9kLT5jb3VudCA9IDA7CiAJaGRyX2QtPmhvbGVzID0gMDsKLQlJTlRfU0VUKGhkcl9kLT5mcmVlbWFwWzBdLmJhc2UsIEFSQ0hfQ09OVkVSVCwKLQkJCQkJc2l6ZW9mKHhmc19hdHRyX2xlYWZfaGRyX3QpKTsKLQlJTlRfU0VUKGhkcl9kLT5mcmVlbWFwWzBdLnNpemUsIEFSQ0hfQ09OVkVSVCwKLQkJCQlJTlRfR0VUKGhkcl9kLT5maXJzdHVzZWQsIEFSQ0hfQ09OVkVSVCkKLQkJCSAgICAgIC0gSU5UX0dFVChoZHJfZC0+ZnJlZW1hcFswXS5iYXNlLCBBUkNIX0NPTlZFUlQpKTsKKwloZHJfZC0+ZnJlZW1hcFswXS5iYXNlID0gY3B1X3RvX2JlMTYoc2l6ZW9mKHhmc19hdHRyX2xlYWZfaGRyX3QpKTsKKwloZHJfZC0+ZnJlZW1hcFswXS5zaXplID0gY3B1X3RvX2JlMTYoYmUxNl90b19jcHUoaGRyX2QtPmZpcnN0dXNlZCkgLQorCQkJCQkgICAgIHNpemVvZih4ZnNfYXR0cl9sZWFmX2hkcl90KSk7CiAKIAkvKgogCSAqIENvcHkgYWxsIGVudHJ5J3MgaW4gdGhlIHNhbWUgKHNvcnRlZCkgb3JkZXIsCiAJICogYnV0IGFsbG9jYXRlIG5hbWUvdmFsdWUgcGFpcnMgcGFja2VkIGFuZCBpbiBzZXF1ZW5jZS4KIAkgKi8KIAl4ZnNfYXR0cl9sZWFmX21vdmVlbnRzKGxlYWZfcywgMCwgbGVhZl9kLCAwLAotCQkJCShpbnQpSU5UX0dFVChoZHJfcy0+Y291bnQsIEFSQ0hfQ09OVkVSVCksIG1wKTsKLQorCQkJCWJlMTZfdG9fY3B1KGhkcl9zLT5jb3VudCksIG1wKTsKIAl4ZnNfZGFfbG9nX2J1Zih0cmFucywgYnAsIDAsIFhGU19MQlNJWkUobXApIC0gMSk7CiAKIAlrbWVtX2ZyZWUodG1wYnVmZmVyLCBYRlNfTEJTSVpFKG1wKSk7CkBAIC0xMjc5LDEwICsxMjUwLDggQEAKIAlBU1NFUlQoYmxrMi0+bWFnaWMgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAJbGVhZjEgPSBibGsxLT5icC0+ZGF0YTsKIAlsZWFmMiA9IGJsazItPmJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYxLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7Ci0JQVNTRVJUKElOVF9HRVQobGVhZjItPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZjEtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZjItPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKIAlhcmdzID0gc3RhdGUtPmFyZ3M7CiAKIAkvKgpAQCAtMTMxOSwyMiArMTI4OCwyMSBAQAogCS8qCiAJICogTW92ZSBhbnkgZW50cmllcyByZXF1aXJlZCBmcm9tIGxlYWYgdG8gbGVhZjoKIAkgKi8KLQlpZiAoY291bnQgPCBJTlRfR0VUKGhkcjEtPmNvdW50LCBBUkNIX0NPTlZFUlQpKSB7CisJaWYgKGNvdW50IDwgYmUxNl90b19jcHUoaGRyMS0+Y291bnQpKSB7CiAJCS8qCiAJCSAqIEZpZ3VyZSB0aGUgdG90YWwgYnl0ZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGxlYWYuCiAJCSAqLwogCQkvKiBudW1iZXIgZW50cmllcyBiZWluZyBtb3ZlZCAqLwotCQljb3VudCA9IElOVF9HRVQoaGRyMS0+Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSBjb3VudDsKLQkJc3BhY2UgID0gSU5UX0dFVChoZHIxLT51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCkgLSB0b3RhbGxlbjsKKwkJY291bnQgPSBiZTE2X3RvX2NwdShoZHIxLT5jb3VudCkgLSBjb3VudDsKKwkJc3BhY2UgID0gYmUxNl90b19jcHUoaGRyMS0+dXNlZGJ5dGVzKSAtIHRvdGFsbGVuOwogCQlzcGFjZSArPSBjb3VudCAqIHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpOwogCiAJCS8qCiAJCSAqIGxlYWYyIGlzIHRoZSBkZXN0aW5hdGlvbiwgY29tcGFjdCBpdCBpZiBpdCBsb29rcyB0aWdodC4KIAkJICovCi0JCW1heCAgPSBJTlRfR0VUKGhkcjItPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJUKQorCQltYXggID0gYmUxNl90b19jcHUoaGRyMi0+Zmlyc3R1c2VkKQogCQkJCQkJLSBzaXplb2YoeGZzX2F0dHJfbGVhZl9oZHJfdCk7Ci0JCW1heCAtPSBJTlRfR0VUKGhkcjItPmNvdW50LCBBUkNIX0NPTlZFUlQpCi0JCQkJCSogc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCk7CisJCW1heCAtPSBiZTE2X3RvX2NwdShoZHIyLT5jb3VudCkgKiBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KTsKIAkJaWYgKHNwYWNlID4gbWF4KSB7CiAJCQl4ZnNfYXR0cl9sZWFmX2NvbXBhY3QoYXJncy0+dHJhbnMsIGJsazItPmJwKTsKIAkJfQpAQCAtMTM0MiwxMyArMTMxMCwxMiBAQAogCQkvKgogCQkgKiBNb3ZlIGhpZ2ggZW50cmllcyBmcm9tIGxlYWYxIHRvIGxvdyBlbmQgb2YgbGVhZjIuCiAJCSAqLwotCQl4ZnNfYXR0cl9sZWFmX21vdmVlbnRzKGxlYWYxLAotCQkJCUlOVF9HRVQoaGRyMS0+Y291bnQsIEFSQ0hfQ09OVkVSVCktY291bnQsCisJCXhmc19hdHRyX2xlYWZfbW92ZWVudHMobGVhZjEsIGJlMTZfdG9fY3B1KGhkcjEtPmNvdW50KSAtIGNvdW50LAogCQkJCWxlYWYyLCAwLCBjb3VudCwgc3RhdGUtPm1wKTsKIAogCQl4ZnNfZGFfbG9nX2J1ZihhcmdzLT50cmFucywgYmxrMS0+YnAsIDAsIHN0YXRlLT5ibG9ja3NpemUtMSk7CiAJCXhmc19kYV9sb2dfYnVmKGFyZ3MtPnRyYW5zLCBibGsyLT5icCwgMCwgc3RhdGUtPmJsb2Nrc2l6ZS0xKTsKLQl9IGVsc2UgaWYgKGNvdW50ID4gSU5UX0dFVChoZHIxLT5jb3VudCwgQVJDSF9DT05WRVJUKSkgeworCX0gZWxzZSBpZiAoY291bnQgPiBiZTE2X3RvX2NwdShoZHIxLT5jb3VudCkpIHsKIAkJLyoKIAkJICogSSBhc3NlcnQgdGhhdCBzaW5jZSBhbGwgY2FsbGVycyBwYXNzIGluIGFuIGVtcHR5CiAJCSAqIHNlY29uZCBidWZmZXIsIHRoaXMgY29kZSBzaG91bGQgbmV2ZXIgZXhlY3V0ZS4KQEAgLTEzNTgsMTcgKzEzMjUsMTYgQEAKIAkJICogRmlndXJlIHRoZSB0b3RhbCBieXRlcyB0byBiZSBhZGRlZCB0byB0aGUgZGVzdGluYXRpb24gbGVhZi4KIAkJICovCiAJCS8qIG51bWJlciBlbnRyaWVzIGJlaW5nIG1vdmVkICovCi0JCWNvdW50IC09IElOVF9HRVQoaGRyMS0+Y291bnQsIEFSQ0hfQ09OVkVSVCk7Ci0JCXNwYWNlICA9IHRvdGFsbGVuIC0gSU5UX0dFVChoZHIxLT51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCk7CisJCWNvdW50IC09IGJlMTZfdG9fY3B1KGhkcjEtPmNvdW50KTsKKwkJc3BhY2UgID0gdG90YWxsZW4gLSBiZTE2X3RvX2NwdShoZHIxLT51c2VkYnl0ZXMpOwogCQlzcGFjZSArPSBjb3VudCAqIHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpOwogCiAJCS8qCiAJCSAqIGxlYWYxIGlzIHRoZSBkZXN0aW5hdGlvbiwgY29tcGFjdCBpdCBpZiBpdCBsb29rcyB0aWdodC4KIAkJICovCi0JCW1heCAgPSBJTlRfR0VUKGhkcjEtPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJUKQorCQltYXggID0gYmUxNl90b19jcHUoaGRyMS0+Zmlyc3R1c2VkKQogCQkJCQkJLSBzaXplb2YoeGZzX2F0dHJfbGVhZl9oZHJfdCk7Ci0JCW1heCAtPSBJTlRfR0VUKGhkcjEtPmNvdW50LCBBUkNIX0NPTlZFUlQpCi0JCQkJCSogc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCk7CisJCW1heCAtPSBiZTE2X3RvX2NwdShoZHIxLT5jb3VudCkgKiBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KTsKIAkJaWYgKHNwYWNlID4gbWF4KSB7CiAJCQl4ZnNfYXR0cl9sZWFmX2NvbXBhY3QoYXJncy0+dHJhbnMsIGJsazEtPmJwKTsKIAkJfQpAQCAtMTM3Nyw4ICsxMzQzLDcgQEAKIAkJICogTW92ZSBsb3cgZW50cmllcyBmcm9tIGxlYWYyIHRvIGhpZ2ggZW5kIG9mIGxlYWYxLgogCQkgKi8KIAkJeGZzX2F0dHJfbGVhZl9tb3ZlZW50cyhsZWFmMiwgMCwgbGVhZjEsCi0JCQkJKGludClJTlRfR0VUKGhkcjEtPmNvdW50LCBBUkNIX0NPTlZFUlQpLCBjb3VudCwKLQkJCQlzdGF0ZS0+bXApOworCQkJCWJlMTZfdG9fY3B1KGhkcjEtPmNvdW50KSwgY291bnQsIHN0YXRlLT5tcCk7CiAKIAkJeGZzX2RhX2xvZ19idWYoYXJncy0+dHJhbnMsIGJsazEtPmJwLCAwLCBzdGF0ZS0+YmxvY2tzaXplLTEpOwogCQl4ZnNfZGFfbG9nX2J1ZihhcmdzLT50cmFucywgYmxrMi0+YnAsIDAsIHN0YXRlLT5ibG9ja3NpemUtMSk7CkBAIC0xMzg3LDEyICsxMzUyLDEwIEBACiAJLyoKIAkgKiBDb3B5IG91dCBsYXN0IGhhc2h2YWwgaW4gZWFjaCBibG9jayBmb3IgQi10cmVlIGNvZGUuCiAJICovCi0JYmxrMS0+aGFzaHZhbCA9Ci0JICAgIElOVF9HRVQobGVhZjEtPmVudHJpZXNbSU5UX0dFVChsZWFmMS0+aGRyLmNvdW50LAotCQkJCSAgICBBUkNIX0NPTlZFUlQpLTFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7Ci0JYmxrMi0+aGFzaHZhbCA9Ci0JICAgIElOVF9HRVQobGVhZjItPmVudHJpZXNbSU5UX0dFVChsZWFmMi0+aGRyLmNvdW50LAotCQkJCSAgICBBUkNIX0NPTlZFUlQpLTFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7CisJYmxrMS0+aGFzaHZhbCA9IGJlMzJfdG9fY3B1KAorCQlsZWFmMS0+ZW50cmllc1tiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KS0xXS5oYXNodmFsKTsKKwlibGsyLT5oYXNodmFsID0gYmUzMl90b19jcHUoCisJCWxlYWYyLT5lbnRyaWVzW2JlMTZfdG9fY3B1KGxlYWYyLT5oZHIuY291bnQpLTFdLmhhc2h2YWwpOwogCiAJLyoKIAkgKiBBZGp1c3QgdGhlIGV4cGVjdGVkIGluZGV4IGZvciBpbnNlcnRpb24uCkBAIC0xNDA2LDEzICsxMzY5LDEyIEBACiAJICogaW5zZXJ0aW5nLiAgVGhlIGluZGV4L2Jsa25vIGZpZWxkcyByZWZlciB0byB0aGUgIm9sZCIgZW50cnksCiAJICogd2hpbGUgdGhlIGluZGV4Mi9ibGtubzIgZmllbGRzIHJlZmVyIHRvIHRoZSAibmV3IiBlbnRyeS4KIAkgKi8KLQlpZiAoYmxrMS0+aW5kZXggPiBJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpIHsKKwlpZiAoYmxrMS0+aW5kZXggPiBiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KSkgewogCQlBU1NFUlQoc3RhdGUtPmlubGVhZiA9PSAwKTsKLQkJYmxrMi0+aW5kZXggPSBibGsxLT5pbmRleAotCQkJCS0gSU5UX0dFVChsZWFmMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCQlibGsyLT5pbmRleCA9IGJsazEtPmluZGV4IC0gYmUxNl90b19jcHUobGVhZjEtPmhkci5jb3VudCk7CiAJCWFyZ3MtPmluZGV4ID0gYXJncy0+aW5kZXgyID0gYmxrMi0+aW5kZXg7CiAJCWFyZ3MtPmJsa25vID0gYXJncy0+Ymxrbm8yID0gYmxrMi0+Ymxrbm87Ci0JfSBlbHNlIGlmIChibGsxLT5pbmRleCA9PSBJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpIHsKKwl9IGVsc2UgaWYgKGJsazEtPmluZGV4ID09IGJlMTZfdG9fY3B1KGxlYWYxLT5oZHIuY291bnQpKSB7CiAJCWlmIChzdGF0ZS0+aW5sZWFmKSB7CiAJCQlhcmdzLT5pbmRleCA9IGJsazEtPmluZGV4OwogCQkJYXJncy0+Ymxrbm8gPSBibGsxLT5ibGtubzsKQEAgLTE0MjAsNyArMTM4Miw3IEBACiAJCQlhcmdzLT5ibGtubzIgPSBibGsyLT5ibGtubzsKIAkJfSBlbHNlIHsKIAkJCWJsazItPmluZGV4ID0gYmxrMS0+aW5kZXgKLQkJCQkgICAgLSBJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7CisJCQkJICAgIC0gYmUxNl90b19jcHUobGVhZjEtPmhkci5jb3VudCk7CiAJCQlhcmdzLT5pbmRleCA9IGFyZ3MtPmluZGV4MiA9IGJsazItPmluZGV4OwogCQkJYXJncy0+Ymxrbm8gPSBhcmdzLT5ibGtubzIgPSBibGsyLT5ibGtubzsKIAkJfQpAQCAtMTQ2NCwxNSArMTQyNiwxNCBAQAogCSAqIEV4YW1pbmUgZW50cmllcyB1bnRpbCB3ZSByZWR1Y2UgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgaW4KIAkgKiBieXRlIHVzYWdlIGJldHdlZW4gdGhlIHR3byBibG9ja3MgdG8gYSBtaW5pbXVtLgogCSAqLwotCW1heCA9IElOVF9HRVQoaGRyMS0+Y291bnQsIEFSQ0hfQ09OVkVSVCkKLQkJCSsgSU5UX0dFVChoZHIyLT5jb3VudCwgQVJDSF9DT05WRVJUKTsKKwltYXggPSBiZTE2X3RvX2NwdShoZHIxLT5jb3VudCkgKyBiZTE2X3RvX2NwdShoZHIyLT5jb3VudCk7CiAJaGFsZiAgPSAobWF4KzEpICogc2l6ZW9mKCplbnRyeSk7Ci0JaGFsZiArPSBJTlRfR0VUKGhkcjEtPnVzZWRieXRlcywgQVJDSF9DT05WRVJUKQotCQkJCSsgSU5UX0dFVChoZHIyLT51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkrIHhmc19hdHRyX2xlYWZfbmV3ZW50c2l6ZSgKLQkJCQkJCXN0YXRlLT5hcmdzLT5uYW1lbGVuLAotCQkJCQkJc3RhdGUtPmFyZ3MtPnZhbHVlbGVuLAotCQkJCQkJc3RhdGUtPmJsb2Nrc2l6ZSwgTlVMTCk7CisJaGFsZiArPSBiZTE2X3RvX2NwdShoZHIxLT51c2VkYnl0ZXMpICsKKwkJYmUxNl90b19jcHUoaGRyMi0+dXNlZGJ5dGVzKSArCisJCXhmc19hdHRyX2xlYWZfbmV3ZW50c2l6ZSgKKwkJCQlzdGF0ZS0+YXJncy0+bmFtZWxlbiwKKwkJCQlzdGF0ZS0+YXJncy0+dmFsdWVsZW4sCisJCQkJc3RhdGUtPmJsb2Nrc2l6ZSwgTlVMTCk7CiAJaGFsZiAvPSAyOwogCWxhc3RkZWx0YSA9IHN0YXRlLT5ibG9ja3NpemU7CiAJZW50cnkgPSAmbGVhZjEtPmVudHJpZXNbMF07CkBAIC0xNDk4LDcgKzE0NTksNyBAQAogCQkvKgogCQkgKiBXcmFwIGFyb3VuZCBpbnRvIHRoZSBzZWNvbmQgYmxvY2sgaWYgbmVjZXNzYXJ5LgogCQkgKi8KLQkJaWYgKGNvdW50ID09IElOVF9HRVQoaGRyMS0+Y291bnQsIEFSQ0hfQ09OVkVSVCkpIHsKKwkJaWYgKGNvdW50ID09IGJlMTZfdG9fY3B1KGhkcjEtPmNvdW50KSkgewogCQkJbGVhZjEgPSBsZWFmMjsKIAkJCWVudHJ5ID0gJmxlYWYxLT5lbnRyaWVzWzBdOwogCQkJaW5kZXggPSAwOwpAQCAtMTU2NiwxMiArMTUyNywxMiBAQAogCSAqLwogCWJsayA9ICZzdGF0ZS0+cGF0aC5ibGtbIHN0YXRlLT5wYXRoLmFjdGl2ZS0xIF07CiAJaW5mbyA9IGJsay0+YnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQoaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGluZm8tPm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKIAlsZWFmID0gKHhmc19hdHRyX2xlYWZibG9ja190ICopaW5mbzsKLQljb3VudCA9IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCWNvdW50ID0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsKIAlieXRlcyA9IHNpemVvZih4ZnNfYXR0cl9sZWFmX2hkcl90KSArCiAJCWNvdW50ICogc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCkgKwotCQlJTlRfR0VUKGxlYWYtPmhkci51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCk7CisJCWJlMTZfdG9fY3B1KGxlYWYtPmhkci51c2VkYnl0ZXMpOwogCWlmIChieXRlcyA+IChzdGF0ZS0+YmxvY2tzaXplID4+IDEpKSB7CiAJCSphY3Rpb24gPSAwOwkvKiBibGsgb3ZlciA1MCUsIGRvbid0IHRyeSB0byBqb2luICovCiAJCXJldHVybigwKTsKQEAgLTE1ODgsNyArMTU0OSw3IEBACiAJCSAqIE1ha2UgYWx0cGF0aCBwb2ludCB0byB0aGUgYmxvY2sgd2Ugd2FudCB0byBrZWVwIGFuZAogCQkgKiBwYXRoIHBvaW50IHRvIHRoZSBibG9jayB3ZSB3YW50IHRvIGRyb3AgKHRoaXMgb25lKS4KIAkJICovCi0JCWZvcndhcmQgPSBpbmZvLT5mb3J3OworCQlmb3J3YXJkID0gKGluZm8tPmZvcncgIT0gMCk7CiAJCW1lbWNweSgmc3RhdGUtPmFsdHBhdGgsICZzdGF0ZS0+cGF0aCwgc2l6ZW9mKHN0YXRlLT5wYXRoKSk7CiAJCWVycm9yID0geGZzX2RhX3BhdGhfc2hpZnQoc3RhdGUsICZzdGF0ZS0+YWx0cGF0aCwgZm9yd2FyZCwKIAkJCQkJCSAwLCAmcmV0dmFsKTsKQEAgLTE2MTAsMTMgKzE1NzEsMTIgQEAKIAkgKiB0byBzaHJpbmsgYW4gYXR0cmlidXRlIGxpc3Qgb3ZlciB0aW1lLgogCSAqLwogCS8qIHN0YXJ0IHdpdGggc21hbGxlciBibGsgbnVtICovCi0JZm9yd2FyZCA9IChJTlRfR0VUKGluZm8tPmZvcncsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJPCBJTlRfR0VUKGluZm8tPmJhY2ssIEFSQ0hfQ09OVkVSVCkpOworCWZvcndhcmQgPSAoYmUzMl90b19jcHUoaW5mby0+Zm9ydykgPCBiZTMyX3RvX2NwdShpbmZvLT5iYWNrKSk7CiAJZm9yIChpID0gMDsgaSA8IDI7IGZvcndhcmQgPSAhZm9yd2FyZCwgaSsrKSB7CiAJCWlmIChmb3J3YXJkKQotCQkJYmxrbm8gPSBJTlRfR0VUKGluZm8tPmZvcncsIEFSQ0hfQ09OVkVSVCk7CisJCQlibGtubyA9IGJlMzJfdG9fY3B1KGluZm8tPmZvcncpOwogCQllbHNlCi0JCQlibGtubyA9IElOVF9HRVQoaW5mby0+YmFjaywgQVJDSF9DT05WRVJUKTsKKwkJCWJsa25vID0gYmUzMl90b19jcHUoaW5mby0+YmFjayk7CiAJCWlmIChibGtubyA9PSAwKQogCQkJY29udGludWU7CiAJCWVycm9yID0geGZzX2RhX3JlYWRfYnVmKHN0YXRlLT5hcmdzLT50cmFucywgc3RhdGUtPmFyZ3MtPmRwLApAQCAtMTYyNiwxNCArMTU4NiwxMyBAQAogCQlBU1NFUlQoYnAgIT0gTlVMTCk7CiAKIAkJbGVhZiA9ICh4ZnNfYXR0cl9sZWFmYmxvY2tfdCAqKWluZm87Ci0JCWNvdW50ICA9IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCQljb3VudCAgPSBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpOwogCQlieXRlcyAgPSBzdGF0ZS0+YmxvY2tzaXplIC0gKHN0YXRlLT5ibG9ja3NpemU+PjIpOwotCQlieXRlcyAtPSBJTlRfR0VUKGxlYWYtPmhkci51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCk7CisJCWJ5dGVzIC09IGJlMTZfdG9fY3B1KGxlYWYtPmhkci51c2VkYnl0ZXMpOwogCQlsZWFmID0gYnAtPmRhdGE7Ci0JCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKLQkJY291bnQgKz0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7Ci0JCWJ5dGVzIC09IElOVF9HRVQobGVhZi0+aGRyLnVzZWRieXRlcywgQVJDSF9DT05WRVJUKTsKKwkJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwkJY291bnQgKz0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsKKwkJYnl0ZXMgLT0gYmUxNl90b19jcHUobGVhZi0+aGRyLnVzZWRieXRlcyk7CiAJCWJ5dGVzIC09IGNvdW50ICogc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCk7CiAJCWJ5dGVzIC09IHNpemVvZih4ZnNfYXR0cl9sZWFmX2hkcl90KTsKIAkJeGZzX2RhX2JyZWxzZShzdGF0ZS0+YXJncy0+dHJhbnMsIGJwKTsKQEAgLTE2ODUsMjEgKzE2NDQsMTggQEAKIAl4ZnNfbW91bnRfdCAqbXA7CiAKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAJaGRyID0gJmxlYWYtPmhkcjsKIAltcCA9IGFyZ3MtPnRyYW5zLT50X21vdW50cDsKLQlBU1NFUlQoKElOVF9HRVQoaGRyLT5jb3VudCwgQVJDSF9DT05WRVJUKSA+IDApCi0JCSYmIChJTlRfR0VUKGhkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCkgPCAoWEZTX0xCU0laRShtcCkvOCkpKTsKKwlBU1NFUlQoKGJlMTZfdG9fY3B1KGhkci0+Y291bnQpID4gMCkKKwkJJiYgKGJlMTZfdG9fY3B1KGhkci0+Y291bnQpIDwgKFhGU19MQlNJWkUobXApLzgpKSk7CiAJQVNTRVJUKChhcmdzLT5pbmRleCA+PSAwKQotCQkmJiAoYXJncy0+aW5kZXggPCBJTlRfR0VUKGhkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCkpKTsKLQlBU1NFUlQoSU5UX0dFVChoZHItPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJUKQotCQkJCT49ICgoSU5UX0dFVChoZHItPmNvdW50LCBBUkNIX0NPTlZFUlQpCi0JCQkJCSogc2l6ZW9mKCplbnRyeSkpK3NpemVvZigqaGRyKSkpOworCQkmJiAoYXJncy0+aW5kZXggPCBiZTE2X3RvX2NwdShoZHItPmNvdW50KSkpOworCUFTU0VSVChiZTE2X3RvX2NwdShoZHItPmZpcnN0dXNlZCkgPj0KKwkgICAgICAgKChiZTE2X3RvX2NwdShoZHItPmNvdW50KSAqIHNpemVvZigqZW50cnkpKSArIHNpemVvZigqaGRyKSkpOwogCWVudHJ5ID0gJmxlYWYtPmVudHJpZXNbYXJncy0+aW5kZXhdOwotCUFTU0VSVChJTlRfR0VUKGVudHJ5LT5uYW1laWR4LCBBUkNIX0NPTlZFUlQpCi0JCQkJPj0gSU5UX0dFVChoZHItPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJUKSk7Ci0JQVNTRVJUKElOVF9HRVQoZW50cnktPm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCkgPCBYRlNfTEJTSVpFKG1wKSk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGVudHJ5LT5uYW1laWR4KSA+PSBiZTE2X3RvX2NwdShoZHItPmZpcnN0dXNlZCkpOworCUFTU0VSVChiZTE2X3RvX2NwdShlbnRyeS0+bmFtZWlkeCkgPCBYRlNfTEJTSVpFKG1wKSk7CiAKIAkvKgogCSAqIFNjYW4gdGhyb3VnaCBmcmVlIHJlZ2lvbiB0YWJsZToKQEAgLTE3MDcsMzMgKzE2NjMsMzAgQEAKIAkgKiAgICBmaW5kIHNtYWxsZXN0IGZyZWUgcmVnaW9uIGluIGNhc2Ugd2UgbmVlZCB0byByZXBsYWNlIGl0LAogCSAqICAgIGFkanVzdCBhbnkgbWFwIHRoYXQgYm9yZGVycyB0aGUgZW50cnkgdGFibGUsCiAJICovCi0JdGFibGVzaXplID0gSU5UX0dFVChoZHItPmNvdW50LCBBUkNIX0NPTlZFUlQpCi0JCQkJCSogc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCkKKwl0YWJsZXNpemUgPSBiZTE2X3RvX2NwdShoZHItPmNvdW50KSAqIHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpCiAJCQkJCSsgc2l6ZW9mKHhmc19hdHRyX2xlYWZfaGRyX3QpOwogCW1hcCA9ICZoZHItPmZyZWVtYXBbMF07Ci0JdG1wID0gSU5UX0dFVChtYXAtPnNpemUsIEFSQ0hfQ09OVkVSVCk7CisJdG1wID0gYmUxNl90b19jcHUobWFwLT5zaXplKTsKIAliZWZvcmUgPSBhZnRlciA9IC0xOwogCXNtYWxsZXN0ID0gWEZTX0FUVFJfTEVBRl9NQVBTSVpFIC0gMTsKIAllbnRzaXplID0geGZzX2F0dHJfbGVhZl9lbnRzaXplKGxlYWYsIGFyZ3MtPmluZGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgWEZTX0FUVFJfTEVBRl9NQVBTSVpFOyBtYXArKywgaSsrKSB7Ci0JCUFTU0VSVChJTlRfR0VUKG1hcC0+YmFzZSwgQVJDSF9DT05WRVJUKSA8IFhGU19MQlNJWkUobXApKTsKLQkJQVNTRVJUKElOVF9HRVQobWFwLT5zaXplLCBBUkNIX0NPTlZFUlQpIDwgWEZTX0xCU0laRShtcCkpOwotCQlpZiAoSU5UX0dFVChtYXAtPmJhc2UsIEFSQ0hfQ09OVkVSVCkgPT0gdGFibGVzaXplKSB7Ci0JCQlJTlRfTU9EKG1hcC0+YmFzZSwgQVJDSF9DT05WRVJULAotCQkJCQktc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCkpOwotCQkJSU5UX01PRChtYXAtPnNpemUsIEFSQ0hfQ09OVkVSVCwKLQkJCQkJc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCkpOworCQlBU1NFUlQoYmUxNl90b19jcHUobWFwLT5iYXNlKSA8IFhGU19MQlNJWkUobXApKTsKKwkJQVNTRVJUKGJlMTZfdG9fY3B1KG1hcC0+c2l6ZSkgPCBYRlNfTEJTSVpFKG1wKSk7CisJCWlmIChiZTE2X3RvX2NwdShtYXAtPmJhc2UpID09IHRhYmxlc2l6ZSkgeworCQkJYmUxNl9hZGQoJm1hcC0+YmFzZSwKKwkJCQkgLSgoaW50KXNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpKSk7CisJCQliZTE2X2FkZCgmbWFwLT5zaXplLCBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KSk7CiAJCX0KIAotCQlpZiAoKElOVF9HRVQobWFwLT5iYXNlLCBBUkNIX0NPTlZFUlQpCi0JCQkJCSsgSU5UX0dFVChtYXAtPnNpemUsIEFSQ0hfQ09OVkVSVCkpCi0JCQkJPT0gSU5UX0dFVChlbnRyeS0+bmFtZWlkeCwgQVJDSF9DT05WRVJUKSkgeworCQlpZiAoKGJlMTZfdG9fY3B1KG1hcC0+YmFzZSkgKyBiZTE2X3RvX2NwdShtYXAtPnNpemUpKQorCQkJCT09IGJlMTZfdG9fY3B1KGVudHJ5LT5uYW1laWR4KSkgewogCQkJYmVmb3JlID0gaTsKLQkJfSBlbHNlIGlmIChJTlRfR0VUKG1hcC0+YmFzZSwgQVJDSF9DT05WRVJUKQotCQkJPT0gKElOVF9HRVQoZW50cnktPm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCkgKyBlbnRzaXplKSkgeworCQl9IGVsc2UgaWYgKGJlMTZfdG9fY3B1KG1hcC0+YmFzZSkKKwkJCT09IChiZTE2X3RvX2NwdShlbnRyeS0+bmFtZWlkeCkgKyBlbnRzaXplKSkgewogCQkJYWZ0ZXIgPSBpOwotCQl9IGVsc2UgaWYgKElOVF9HRVQobWFwLT5zaXplLCBBUkNIX0NPTlZFUlQpIDwgdG1wKSB7Ci0JCQl0bXAgPSBJTlRfR0VUKG1hcC0+c2l6ZSwgQVJDSF9DT05WRVJUKTsKKwkJfSBlbHNlIGlmIChiZTE2X3RvX2NwdShtYXAtPnNpemUpIDwgdG1wKSB7CisJCQl0bXAgPSBiZTE2X3RvX2NwdShtYXAtPnNpemUpOwogCQkJc21hbGxlc3QgPSBpOwogCQl9CiAJfQpAQCAtMTc0NSwzOCArMTY5OCwzNSBAQAogCWlmICgoYmVmb3JlID49IDApIHx8IChhZnRlciA+PSAwKSkgewogCQlpZiAoKGJlZm9yZSA+PSAwKSAmJiAoYWZ0ZXIgPj0gMCkpIHsKIAkJCW1hcCA9ICZoZHItPmZyZWVtYXBbYmVmb3JlXTsKLQkJCUlOVF9NT0QobWFwLT5zaXplLCBBUkNIX0NPTlZFUlQsIGVudHNpemUpOwotCQkJSU5UX01PRChtYXAtPnNpemUsIEFSQ0hfQ09OVkVSVCwKLQkJCQlJTlRfR0VUKGhkci0+ZnJlZW1hcFthZnRlcl0uc2l6ZSwKLQkJCQkJCQlBUkNIX0NPTlZFUlQpKTsKKwkJCWJlMTZfYWRkKCZtYXAtPnNpemUsIGVudHNpemUpOworCQkJYmUxNl9hZGQoJm1hcC0+c2l6ZSwKKwkJCQkgYmUxNl90b19jcHUoaGRyLT5mcmVlbWFwW2FmdGVyXS5zaXplKSk7CiAJCQloZHItPmZyZWVtYXBbYWZ0ZXJdLmJhc2UgPSAwOwogCQkJaGRyLT5mcmVlbWFwW2FmdGVyXS5zaXplID0gMDsKIAkJfSBlbHNlIGlmIChiZWZvcmUgPj0gMCkgewogCQkJbWFwID0gJmhkci0+ZnJlZW1hcFtiZWZvcmVdOwotCQkJSU5UX01PRChtYXAtPnNpemUsIEFSQ0hfQ09OVkVSVCwgZW50c2l6ZSk7CisJCQliZTE2X2FkZCgmbWFwLT5zaXplLCBlbnRzaXplKTsKIAkJfSBlbHNlIHsKIAkJCW1hcCA9ICZoZHItPmZyZWVtYXBbYWZ0ZXJdOwogCQkJLyogYm90aCBvbi1kaXNrLCBkb24ndCBlbmRpYW4gZmxpcCB0d2ljZSAqLwogCQkJbWFwLT5iYXNlID0gZW50cnktPm5hbWVpZHg7Ci0JCQlJTlRfTU9EKG1hcC0+c2l6ZSwgQVJDSF9DT05WRVJULCBlbnRzaXplKTsKKwkJCWJlMTZfYWRkKCZtYXAtPnNpemUsIGVudHNpemUpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogUmVwbGFjZSBzbWFsbGVzdCByZWdpb24gKGlmIGl0IGlzIHNtYWxsZXIgdGhhbiBmcmVlJ2QgZW50cnkpCiAJCSAqLwogCQltYXAgPSAmaGRyLT5mcmVlbWFwW3NtYWxsZXN0XTsKLQkJaWYgKElOVF9HRVQobWFwLT5zaXplLCBBUkNIX0NPTlZFUlQpIDwgZW50c2l6ZSkgewotCQkJSU5UX1NFVChtYXAtPmJhc2UsIEFSQ0hfQ09OVkVSVCwKLQkJCQkJSU5UX0dFVChlbnRyeS0+bmFtZWlkeCwgQVJDSF9DT05WRVJUKSk7Ci0JCQlJTlRfU0VUKG1hcC0+c2l6ZSwgQVJDSF9DT05WRVJULCBlbnRzaXplKTsKKwkJaWYgKGJlMTZfdG9fY3B1KG1hcC0+c2l6ZSkgPCBlbnRzaXplKSB7CisJCQltYXAtPmJhc2UgPSBjcHVfdG9fYmUxNihiZTE2X3RvX2NwdShlbnRyeS0+bmFtZWlkeCkpOworCQkJbWFwLT5zaXplID0gY3B1X3RvX2JlMTYoZW50c2l6ZSk7CiAJCX0KIAl9CiAKIAkvKgogCSAqIERpZCB3ZSByZW1vdmUgdGhlIGZpcnN0IGVudHJ5PwogCSAqLwotCWlmIChJTlRfR0VUKGVudHJ5LT5uYW1laWR4LCBBUkNIX0NPTlZFUlQpCi0JCQkJPT0gSU5UX0dFVChoZHItPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJUKSkKKwlpZiAoYmUxNl90b19jcHUoZW50cnktPm5hbWVpZHgpID09IGJlMTZfdG9fY3B1KGhkci0+Zmlyc3R1c2VkKSkKIAkJc21hbGxlc3QgPSAxOwogCWVsc2UKIAkJc21hbGxlc3QgPSAwOwpAQCAtMTc4NSwxOCArMTczNSwxOCBAQAogCSAqIENvbXByZXNzIHRoZSByZW1haW5pbmcgZW50cmllcyBhbmQgemVybyBvdXQgdGhlIHJlbW92ZWQgc3R1ZmYuCiAJICovCiAJbWVtc2V0KFhGU19BVFRSX0xFQUZfTkFNRShsZWFmLCBhcmdzLT5pbmRleCksIDAsIGVudHNpemUpOwotCUlOVF9NT0QoaGRyLT51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCwgLWVudHNpemUpOworCWJlMTZfYWRkKCZoZHItPnVzZWRieXRlcywgLWVudHNpemUpOwogCXhmc19kYV9sb2dfYnVmKGFyZ3MtPnRyYW5zLCBicCwKIAkgICAgIFhGU19EQV9MT0dSQU5HRShsZWFmLCBYRlNfQVRUUl9MRUFGX05BTUUobGVhZiwgYXJncy0+aW5kZXgpLAogCQkJCSAgIGVudHNpemUpKTsKIAotCXRtcCA9IChJTlRfR0VUKGhkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSBhcmdzLT5pbmRleCkKKwl0bXAgPSAoYmUxNl90b19jcHUoaGRyLT5jb3VudCkgLSBhcmdzLT5pbmRleCkKIAkJCQkJKiBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KTsKIAltZW1tb3ZlKChjaGFyICopZW50cnksIChjaGFyICopKGVudHJ5KzEpLCB0bXApOwotCUlOVF9NT0QoaGRyLT5jb3VudCwgQVJDSF9DT05WRVJULCAtMSk7CisJYmUxNl9hZGQoJmhkci0+Y291bnQsIC0xKTsKIAl4ZnNfZGFfbG9nX2J1ZihhcmdzLT50cmFucywgYnAsCiAJICAgIFhGU19EQV9MT0dSQU5HRShsZWFmLCBlbnRyeSwgdG1wICsgc2l6ZW9mKCplbnRyeSkpKTsKLQllbnRyeSA9ICZsZWFmLT5lbnRyaWVzW0lOVF9HRVQoaGRyLT5jb3VudCwgQVJDSF9DT05WRVJUKV07CisJZW50cnkgPSAmbGVhZi0+ZW50cmllc1tiZTE2X3RvX2NwdShoZHItPmNvdW50KV07CiAJbWVtc2V0KChjaGFyICopZW50cnksIDAsIHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpKTsKIAogCS8qCkBAIC0xODA4LDE4ICsxNzU4LDE3IEBACiAJaWYgKHNtYWxsZXN0KSB7CiAJCXRtcCA9IFhGU19MQlNJWkUobXApOwogCQllbnRyeSA9ICZsZWFmLT5lbnRyaWVzWzBdOwotCQlmb3IgKGkgPSBJTlRfR0VUKGhkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCktMTsKLQkJCQkJCWkgPj0gMDsgZW50cnkrKywgaS0tKSB7Ci0JCQlBU1NFUlQoSU5UX0dFVChlbnRyeS0+bmFtZWlkeCwgQVJDSF9DT05WRVJUKQotCQkJCT49IElOVF9HRVQoaGRyLT5maXJzdHVzZWQsIEFSQ0hfQ09OVkVSVCkpOwotCQkJQVNTRVJUKElOVF9HRVQoZW50cnktPm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCQk8IFhGU19MQlNJWkUobXApKTsKLQkJCWlmIChJTlRfR0VUKGVudHJ5LT5uYW1laWR4LCBBUkNIX0NPTlZFUlQpIDwgdG1wKQotCQkJCXRtcCA9IElOVF9HRVQoZW50cnktPm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCk7CisJCWZvciAoaSA9IGJlMTZfdG9fY3B1KGhkci0+Y291bnQpLTE7IGkgPj0gMDsgZW50cnkrKywgaS0tKSB7CisJCQlBU1NFUlQoYmUxNl90b19jcHUoZW50cnktPm5hbWVpZHgpID49CisJCQkgICAgICAgYmUxNl90b19jcHUoaGRyLT5maXJzdHVzZWQpKTsKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShlbnRyeS0+bmFtZWlkeCkgPCBYRlNfTEJTSVpFKG1wKSk7CisKKwkJCWlmIChiZTE2X3RvX2NwdShlbnRyeS0+bmFtZWlkeCkgPCB0bXApCisJCQkJdG1wID0gYmUxNl90b19jcHUoZW50cnktPm5hbWVpZHgpOwogCQl9Ci0JCUlOVF9TRVQoaGRyLT5maXJzdHVzZWQsIEFSQ0hfQ09OVkVSVCwgdG1wKTsKKwkJaGRyLT5maXJzdHVzZWQgPSBjcHVfdG9fYmUxNih0bXApOwogCQlpZiAoIWhkci0+Zmlyc3R1c2VkKSB7Ci0JCQlJTlRfU0VUKGhkci0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQsCisJCQloZHItPmZpcnN0dXNlZCA9IGNwdV90b19iZTE2KAogCQkJCQl0bXAgLSBYRlNfQVRUUl9MRUFGX05BTUVfQUxJR04pOwogCQl9CiAJfSBlbHNlIHsKQEAgLTE4MzMsOSArMTc4Miw4IEBACiAJICogImpvaW4iIHRoZSBsZWFmIHdpdGggYSBzaWJsaW5nIGlmIHNvLgogCSAqLwogCXRtcCAgPSBzaXplb2YoeGZzX2F0dHJfbGVhZl9oZHJfdCk7Ci0JdG1wICs9IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpCi0JCQkJCSogc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCk7Ci0JdG1wICs9IElOVF9HRVQobGVhZi0+aGRyLnVzZWRieXRlcywgQVJDSF9DT05WRVJUKTsKKwl0bXAgKz0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSAqIHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpOworCXRtcCArPSBiZTE2X3RvX2NwdShsZWFmLT5oZHIudXNlZGJ5dGVzKTsKIAlyZXR1cm4odG1wIDwgbXAtPm1fYXR0cl9tYWdpY3BjdCk7IC8qIGxlYWYgaXMgPCAzNyUgZnVsbCAqLwogfQogCkBAIC0xODU5LDIwICsxODA3LDE2IEBACiAJQVNTRVJUKHNhdmVfYmxrLT5tYWdpYyA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKIAlkcm9wX2xlYWYgPSBkcm9wX2Jsay0+YnAtPmRhdGE7CiAJc2F2ZV9sZWFmID0gc2F2ZV9ibGstPmJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGRyb3BfbGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpOwotCUFTU0VSVChJTlRfR0VUKHNhdmVfbGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShkcm9wX2xlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUoc2F2ZV9sZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAJZHJvcF9oZHIgPSAmZHJvcF9sZWFmLT5oZHI7CiAJc2F2ZV9oZHIgPSAmc2F2ZV9sZWFmLT5oZHI7CiAKIAkvKgogCSAqIFNhdmUgbGFzdCBoYXNodmFsIGZyb20gZHlpbmcgYmxvY2sgZm9yIGxhdGVyIEJ0cmVlIGZpeHVwLgogCSAqLwotCWRyb3BfYmxrLT5oYXNodmFsID0KLQkJSU5UX0dFVChkcm9wX2xlYWYtPmVudHJpZXNbSU5UX0dFVChkcm9wX2xlYWYtPmhkci5jb3VudCwKLQkJCQkJCUFSQ0hfQ09OVkVSVCktMV0uaGFzaHZhbCwKLQkJCQkJCQkJQVJDSF9DT05WRVJUKTsKKwlkcm9wX2Jsay0+aGFzaHZhbCA9IGJlMzJfdG9fY3B1KAorCQlkcm9wX2xlYWYtPmVudHJpZXNbYmUxNl90b19jcHUoZHJvcF9sZWFmLT5oZHIuY291bnQpLTFdLmhhc2h2YWwpOwogCiAJLyoKIAkgKiBDaGVjayBpZiB3ZSBuZWVkIGEgdGVtcCBidWZmZXIsIG9yIGNhbiB3ZSBkbyBpdCBpbiBwbGFjZS4KQEAgLTE4ODYsMTIgKzE4MzAsMTEgQEAKIAkJICovCiAJCWlmICh4ZnNfYXR0cl9sZWFmX29yZGVyKHNhdmVfYmxrLT5icCwgZHJvcF9ibGstPmJwKSkgewogCQkJeGZzX2F0dHJfbGVhZl9tb3ZlZW50cyhkcm9wX2xlYWYsIDAsIHNhdmVfbGVhZiwgMCwKLQkJCSAgICAgKGludClJTlRfR0VUKGRyb3BfaGRyLT5jb3VudCwgQVJDSF9DT05WRVJUKSwgbXApOworCQkJICAgICBiZTE2X3RvX2NwdShkcm9wX2hkci0+Y291bnQpLCBtcCk7CiAJCX0gZWxzZSB7CiAJCQl4ZnNfYXR0cl9sZWFmX21vdmVlbnRzKGRyb3BfbGVhZiwgMCwgc2F2ZV9sZWFmLAotCQkJCSAgSU5UX0dFVChzYXZlX2hkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCksCi0JCQkJICAoaW50KUlOVF9HRVQoZHJvcF9oZHItPmNvdW50LCBBUkNIX0NPTlZFUlQpLAotCQkJCSAgbXApOworCQkJCSAgYmUxNl90b19jcHUoc2F2ZV9oZHItPmNvdW50KSwKKwkJCQkgIGJlMTZfdG9fY3B1KGRyb3BfaGRyLT5jb3VudCksIG1wKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qCkBAIC0xOTA1LDI4ICsxODQ4LDI0IEBACiAJCXRtcF9oZHIgPSAmdG1wX2xlYWYtPmhkcjsKIAkJdG1wX2hkci0+aW5mbyA9IHNhdmVfaGRyLT5pbmZvOwkvKiBzdHJ1Y3QgY29weSAqLwogCQl0bXBfaGRyLT5jb3VudCA9IDA7Ci0JCUlOVF9TRVQodG1wX2hkci0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQsIHN0YXRlLT5ibG9ja3NpemUpOworCQl0bXBfaGRyLT5maXJzdHVzZWQgPSBjcHVfdG9fYmUxNihzdGF0ZS0+YmxvY2tzaXplKTsKIAkJaWYgKCF0bXBfaGRyLT5maXJzdHVzZWQpIHsKLQkJCUlOVF9TRVQodG1wX2hkci0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQsCisJCQl0bXBfaGRyLT5maXJzdHVzZWQgPSBjcHVfdG9fYmUxNigKIAkJCQlzdGF0ZS0+YmxvY2tzaXplIC0gWEZTX0FUVFJfTEVBRl9OQU1FX0FMSUdOKTsKIAkJfQogCQl0bXBfaGRyLT51c2VkYnl0ZXMgPSAwOwogCQlpZiAoeGZzX2F0dHJfbGVhZl9vcmRlcihzYXZlX2Jsay0+YnAsIGRyb3BfYmxrLT5icCkpIHsKIAkJCXhmc19hdHRyX2xlYWZfbW92ZWVudHMoZHJvcF9sZWFmLCAwLCB0bXBfbGVhZiwgMCwKLQkJCQkoaW50KUlOVF9HRVQoZHJvcF9oZHItPmNvdW50LCBBUkNIX0NPTlZFUlQpLAotCQkJCW1wKTsKKwkJCQliZTE2X3RvX2NwdShkcm9wX2hkci0+Y291bnQpLCBtcCk7CiAJCQl4ZnNfYXR0cl9sZWFmX21vdmVlbnRzKHNhdmVfbGVhZiwgMCwgdG1wX2xlYWYsCi0JCQkJICBJTlRfR0VUKHRtcF9sZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCksCi0JCQkJIChpbnQpSU5UX0dFVChzYXZlX2hkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCksCi0JCQkJIG1wKTsKKwkJCQkgIGJlMTZfdG9fY3B1KHRtcF9sZWFmLT5oZHIuY291bnQpLAorCQkJCSAgYmUxNl90b19jcHUoc2F2ZV9oZHItPmNvdW50KSwgbXApOwogCQl9IGVsc2UgewogCQkJeGZzX2F0dHJfbGVhZl9tb3ZlZW50cyhzYXZlX2xlYWYsIDAsIHRtcF9sZWFmLCAwLAotCQkJCShpbnQpSU5UX0dFVChzYXZlX2hkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCksCi0JCQkJbXApOworCQkJCWJlMTZfdG9fY3B1KHNhdmVfaGRyLT5jb3VudCksIG1wKTsKIAkJCXhmc19hdHRyX2xlYWZfbW92ZWVudHMoZHJvcF9sZWFmLCAwLCB0bXBfbGVhZiwKLQkJCQlJTlRfR0VUKHRtcF9sZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCksCi0JCQkJKGludClJTlRfR0VUKGRyb3BfaGRyLT5jb3VudCwgQVJDSF9DT05WRVJUKSwKLQkJCQltcCk7CisJCQkJYmUxNl90b19jcHUodG1wX2xlYWYtPmhkci5jb3VudCksCisJCQkJYmUxNl90b19jcHUoZHJvcF9oZHItPmNvdW50KSwgbXApOwogCQl9CiAJCW1lbWNweSgoY2hhciAqKXNhdmVfbGVhZiwgKGNoYXIgKil0bXBfbGVhZiwgc3RhdGUtPmJsb2Nrc2l6ZSk7CiAJCWttZW1fZnJlZSh0bXBidWZmZXIsIHN0YXRlLT5ibG9ja3NpemUpOwpAQCAtMTkzOCwxMCArMTg3Nyw4IEBACiAJLyoKIAkgKiBDb3B5IG91dCBsYXN0IGhhc2h2YWwgaW4gZWFjaCBibG9jayBmb3IgQi10cmVlIGNvZGUuCiAJICovCi0Jc2F2ZV9ibGstPmhhc2h2YWwgPQotCQlJTlRfR0VUKHNhdmVfbGVhZi0+ZW50cmllc1tJTlRfR0VUKHNhdmVfbGVhZi0+aGRyLmNvdW50LAotCQkJCQkJQVJDSF9DT05WRVJUKS0xXS5oYXNodmFsLAotCQkJCQkJCQlBUkNIX0NPTlZFUlQpOworCXNhdmVfYmxrLT5oYXNodmFsID0gYmUzMl90b19jcHUoCisJCXNhdmVfbGVhZi0+ZW50cmllc1tiZTE2X3RvX2NwdShzYXZlX2xlYWYtPmhkci5jb3VudCktMV0uaGFzaHZhbCk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xOTcyLDQ4ICsxOTA5LDQ1IEBACiAJeGZzX2RhaGFzaF90IGhhc2h2YWw7CiAKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKQorCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkKIAkJCQkJPCAoWEZTX0xCU0laRShhcmdzLT5kcC0+aV9tb3VudCkvOCkpOwogCiAJLyoKIAkgKiBCaW5hcnkgc2VhcmNoLiAgKG5vdGU6IHNtYWxsIGJsb2NrcyB3aWxsIHNraXAgdGhpcyBsb29wKQogCSAqLwogCWhhc2h2YWwgPSBhcmdzLT5oYXNodmFsOwotCXByb2JlID0gc3BhbiA9IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIC8gMjsKKwlwcm9iZSA9IHNwYW4gPSBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpIC8gMjsKIAlmb3IgKGVudHJ5ID0gJmxlYWYtPmVudHJpZXNbcHJvYmVdOyBzcGFuID4gNDsKIAkJICAgZW50cnkgPSAmbGVhZi0+ZW50cmllc1twcm9iZV0pIHsKIAkJc3BhbiAvPSAyOwotCQlpZiAoSU5UX0dFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSA8IGhhc2h2YWwpCisJCWlmIChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgPCBoYXNodmFsKQogCQkJcHJvYmUgKz0gc3BhbjsKLQkJZWxzZSBpZiAoSU5UX0dFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSA+IGhhc2h2YWwpCisJCWVsc2UgaWYgKGJlMzJfdG9fY3B1KGVudHJ5LT5oYXNodmFsKSA+IGhhc2h2YWwpCiAJCQlwcm9iZSAtPSBzcGFuOwogCQllbHNlCiAJCQlicmVhazsKIAl9CiAJQVNTRVJUKChwcm9iZSA+PSAwKSAmJiAKIAkgICAgICAgKCFsZWFmLT5oZHIuY291bnQKLQkgICAgICAgfHwgKHByb2JlIDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpKSk7Ci0JQVNTRVJUKChzcGFuIDw9IDQpIHx8IChJTlRfR0VUKGVudHJ5LT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQkJPT0gaGFzaHZhbCkpOworCSAgICAgICB8fCAocHJvYmUgPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpKSkpOworCUFTU0VSVCgoc3BhbiA8PSA0KSB8fCAoYmUzMl90b19jcHUoZW50cnktPmhhc2h2YWwpID09IGhhc2h2YWwpKTsKIAogCS8qCiAJICogU2luY2Ugd2UgbWF5IGhhdmUgZHVwbGljYXRlIGhhc2h2YWwncywgZmluZCB0aGUgZmlyc3QgbWF0Y2hpbmcKIAkgKiBoYXNodmFsIGluIHRoZSBsZWFmLgogCSAqLwotCXdoaWxlICgocHJvYmUgPiAwKSAmJiAoSU5UX0dFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKQotCQkJCQkJCT49IGhhc2h2YWwpKSB7CisJd2hpbGUgKChwcm9iZSA+IDApICYmIChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgPj0gaGFzaHZhbCkpIHsKIAkJZW50cnktLTsKIAkJcHJvYmUtLTsKIAl9Ci0Jd2hpbGUgKChwcm9iZSA8IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKQotCQkmJiAoSU5UX0dFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSA8IGhhc2h2YWwpKSB7CisJd2hpbGUgKChwcm9iZSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpICYmCisJICAgICAgIChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgPCBoYXNodmFsKSkgewogCQllbnRyeSsrOwogCQlwcm9iZSsrOwogCX0KLQlpZiAoKHByb2JlID09IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKQotCQkgICAgfHwgKElOVF9HRVQoZW50cnktPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgIT0gaGFzaHZhbCkpIHsKKwlpZiAoKHByb2JlID09IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpIHx8CisJICAgIChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgIT0gaGFzaHZhbCkpIHsKIAkJYXJncy0+aW5kZXggPSBwcm9iZTsKIAkJcmV0dXJuKFhGU19FUlJPUihFTk9BVFRSKSk7CiAJfQpAQCAtMjAyMSw4ICsxOTU1LDggQEAKIAkvKgogCSAqIER1cGxpY2F0ZSBrZXlzIG1heSBiZSBwcmVzZW50LCBzbyBzZWFyY2ggYWxsIG9mIHRoZW0gZm9yIGEgbWF0Y2guCiAJICovCi0JZm9yICggIDsgKHByb2JlIDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpCi0JCQkmJiAoSU5UX0dFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSA9PSBoYXNodmFsKTsKKwlmb3IgKCAgOyAocHJvYmUgPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpKSAmJgorCQkJKGJlMzJfdG9fY3B1KGVudHJ5LT5oYXNodmFsKSA9PSBoYXNodmFsKTsKIAkJCWVudHJ5KyssIHByb2JlKyspIHsKIC8qCiAgKiBHUk9UOiBBZGQgY29kZSB0byByZW1vdmUgaW5jb21wbGV0ZSBlbnRyaWVzLgpAQCAtMjA2NCwxMSArMTk5OCw5IEBACiAJCQkgICAgKChlbnRyeS0+ZmxhZ3MgJiBYRlNfQVRUUl9ST09UKSAhPSAwKSkKIAkJCQljb250aW51ZTsKIAkJCWFyZ3MtPmluZGV4ID0gcHJvYmU7Ci0JCQlhcmdzLT5ybXRibGtubwotCQkJCSAgPSBJTlRfR0VUKG5hbWVfcm10LT52YWx1ZWJsaywgQVJDSF9DT05WRVJUKTsKKwkJCWFyZ3MtPnJtdGJsa25vID0gYmUzMl90b19jcHUobmFtZV9ybXQtPnZhbHVlYmxrKTsKIAkJCWFyZ3MtPnJtdGJsa2NudCA9IFhGU19CX1RPX0ZTQihhcmdzLT5kcC0+aV9tb3VudCwKLQkJCQkJCSAgIElOVF9HRVQobmFtZV9ybXQtPnZhbHVlbGVuLAotCQkJCQkJCQlBUkNIX0NPTlZFUlQpKTsKKwkJCQkJCSAgIGJlMzJfdG9fY3B1KG5hbWVfcm10LT52YWx1ZWxlbikpOwogCQkJcmV0dXJuKFhGU19FUlJPUihFRVhJU1QpKTsKIAkJfQogCX0KQEAgLTIwOTAsMTggKzIwMjIsMTcgQEAKIAl4ZnNfYXR0cl9sZWFmX25hbWVfcmVtb3RlX3QgKm5hbWVfcm10OwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpCiAJCQkJCTwgKFhGU19MQlNJWkUoYXJncy0+ZHAtPmlfbW91bnQpLzgpKTsKLQlBU1NFUlQoYXJncy0+aW5kZXggPCAoKGludClJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkpOworCUFTU0VSVChhcmdzLT5pbmRleCA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpOwogCiAJZW50cnkgPSAmbGVhZi0+ZW50cmllc1thcmdzLT5pbmRleF07CiAJaWYgKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX0xPQ0FMKSB7CiAJCW5hbWVfbG9jID0gWEZTX0FUVFJfTEVBRl9OQU1FX0xPQ0FMKGxlYWYsIGFyZ3MtPmluZGV4KTsKIAkJQVNTRVJUKG5hbWVfbG9jLT5uYW1lbGVuID09IGFyZ3MtPm5hbWVsZW4pOwogCQlBU1NFUlQobWVtY21wKGFyZ3MtPm5hbWUsIG5hbWVfbG9jLT5uYW1ldmFsLCBhcmdzLT5uYW1lbGVuKSA9PSAwKTsKLQkJdmFsdWVsZW4gPSBJTlRfR0VUKG5hbWVfbG9jLT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKTsKKwkJdmFsdWVsZW4gPSBiZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pOwogCQlpZiAoYXJncy0+ZmxhZ3MgJiBBVFRSX0tFUk5PVkFMKSB7CiAJCQlhcmdzLT52YWx1ZWxlbiA9IHZhbHVlbGVuOwogCQkJcmV0dXJuKDApOwpAQCAtMjExNiw4ICsyMDQ3LDggQEAKIAkJbmFtZV9ybXQgPSBYRlNfQVRUUl9MRUFGX05BTUVfUkVNT1RFKGxlYWYsIGFyZ3MtPmluZGV4KTsKIAkJQVNTRVJUKG5hbWVfcm10LT5uYW1lbGVuID09IGFyZ3MtPm5hbWVsZW4pOwogCQlBU1NFUlQobWVtY21wKGFyZ3MtPm5hbWUsIG5hbWVfcm10LT5uYW1lLCBhcmdzLT5uYW1lbGVuKSA9PSAwKTsKLQkJdmFsdWVsZW4gPSBJTlRfR0VUKG5hbWVfcm10LT52YWx1ZWxlbiwgQVJDSF9DT05WRVJUKTsKLQkJYXJncy0+cm10Ymxrbm8gPSBJTlRfR0VUKG5hbWVfcm10LT52YWx1ZWJsaywgQVJDSF9DT05WRVJUKTsKKwkJdmFsdWVsZW4gPSBiZTMyX3RvX2NwdShuYW1lX3JtdC0+dmFsdWVsZW4pOworCQlhcmdzLT5ybXRibGtubyA9IGJlMzJfdG9fY3B1KG5hbWVfcm10LT52YWx1ZWJsayk7CiAJCWFyZ3MtPnJtdGJsa2NudCA9IFhGU19CX1RPX0ZTQihhcmdzLT5kcC0+aV9tb3VudCwgdmFsdWVsZW4pOwogCQlpZiAoYXJncy0+ZmxhZ3MgJiBBVFRSX0tFUk5PVkFMKSB7CiAJCQlhcmdzLT52YWx1ZWxlbiA9IHZhbHVlbGVuOwpAQCAtMjE1OSwzMiArMjA5MCwyOSBAQAogCS8qCiAJICogU2V0IHVwIGVudmlyb25tZW50LgogCSAqLwotCUFTU0VSVChJTlRfR0VUKGxlYWZfcy0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpOwotCUFTU0VSVChJTlRfR0VUKGxlYWZfZC0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmX3MtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZl9kLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAJaGRyX3MgPSAmbGVhZl9zLT5oZHI7CiAJaGRyX2QgPSAmbGVhZl9kLT5oZHI7Ci0JQVNTRVJUKChJTlRfR0VUKGhkcl9zLT5jb3VudCwgQVJDSF9DT05WRVJUKSA+IDApCi0JCQkJJiYgKElOVF9HRVQoaGRyX3MtPmNvdW50LCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk8IChYRlNfTEJTSVpFKG1wKS84KSkpOwotCUFTU0VSVChJTlRfR0VUKGhkcl9zLT5maXJzdHVzZWQsIEFSQ0hfQ09OVkVSVCkgPj0KLQkJKChJTlRfR0VUKGhkcl9zLT5jb3VudCwgQVJDSF9DT05WRVJUKQorCUFTU0VSVCgoYmUxNl90b19jcHUoaGRyX3MtPmNvdW50KSA+IDApICYmCisJICAgICAgIChiZTE2X3RvX2NwdShoZHJfcy0+Y291bnQpIDwgKFhGU19MQlNJWkUobXApLzgpKSk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGhkcl9zLT5maXJzdHVzZWQpID49CisJCSgoYmUxNl90b19jcHUoaGRyX3MtPmNvdW50KQogCQkJCQkqIHNpemVvZigqZW50cnlfcykpK3NpemVvZigqaGRyX3MpKSk7Ci0JQVNTRVJUKElOVF9HRVQoaGRyX2QtPmNvdW50LCBBUkNIX0NPTlZFUlQpIDwgKFhGU19MQlNJWkUobXApLzgpKTsKLQlBU1NFUlQoSU5UX0dFVChoZHJfZC0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQpID49Ci0JCSgoSU5UX0dFVChoZHJfZC0+Y291bnQsIEFSQ0hfQ09OVkVSVCkKKwlBU1NFUlQoYmUxNl90b19jcHUoaGRyX2QtPmNvdW50KSA8IChYRlNfTEJTSVpFKG1wKS84KSk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGhkcl9kLT5maXJzdHVzZWQpID49CisJCSgoYmUxNl90b19jcHUoaGRyX2QtPmNvdW50KQogCQkJCQkqIHNpemVvZigqZW50cnlfZCkpK3NpemVvZigqaGRyX2QpKSk7CiAKLQlBU1NFUlQoc3RhcnRfcyA8IElOVF9HRVQoaGRyX3MtPmNvdW50LCBBUkNIX0NPTlZFUlQpKTsKLQlBU1NFUlQoc3RhcnRfZCA8PSBJTlRfR0VUKGhkcl9kLT5jb3VudCwgQVJDSF9DT05WRVJUKSk7Ci0JQVNTRVJUKGNvdW50IDw9IElOVF9HRVQoaGRyX3MtPmNvdW50LCBBUkNIX0NPTlZFUlQpKTsKKwlBU1NFUlQoc3RhcnRfcyA8IGJlMTZfdG9fY3B1KGhkcl9zLT5jb3VudCkpOworCUFTU0VSVChzdGFydF9kIDw9IGJlMTZfdG9fY3B1KGhkcl9kLT5jb3VudCkpOworCUFTU0VSVChjb3VudCA8PSBiZTE2X3RvX2NwdShoZHJfcy0+Y291bnQpKTsKIAogCS8qCiAJICogTW92ZSB0aGUgZW50cmllcyBpbiB0aGUgZGVzdGluYXRpb24gbGVhZiB1cCB0byBtYWtlIGEgaG9sZT8KIAkgKi8KLQlpZiAoc3RhcnRfZCA8IElOVF9HRVQoaGRyX2QtPmNvdW50LCBBUkNIX0NPTlZFUlQpKSB7Ci0JCXRtcCAgPSBJTlRfR0VUKGhkcl9kLT5jb3VudCwgQVJDSF9DT05WRVJUKSAtIHN0YXJ0X2Q7CisJaWYgKHN0YXJ0X2QgPCBiZTE2X3RvX2NwdShoZHJfZC0+Y291bnQpKSB7CisJCXRtcCAgPSBiZTE2X3RvX2NwdShoZHJfZC0+Y291bnQpIC0gc3RhcnRfZDsKIAkJdG1wICo9IHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpOwogCQllbnRyeV9zID0gJmxlYWZfZC0+ZW50cmllc1tzdGFydF9kXTsKIAkJZW50cnlfZCA9ICZsZWFmX2QtPmVudHJpZXNbc3RhcnRfZCArIGNvdW50XTsKQEAgLTIxOTksOCArMjEyNyw4IEBACiAJZW50cnlfZCA9ICZsZWFmX2QtPmVudHJpZXNbc3RhcnRfZF07CiAJZGVzdGkgPSBzdGFydF9kOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgZW50cnlfcysrLCBlbnRyeV9kKyssIGRlc3RpKyssIGkrKykgewotCQlBU1NFUlQoSU5UX0dFVChlbnRyeV9zLT5uYW1laWR4LCBBUkNIX0NPTlZFUlQpCi0JCQkJPj0gSU5UX0dFVChoZHJfcy0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQpKTsKKwkJQVNTRVJUKGJlMTZfdG9fY3B1KGVudHJ5X3MtPm5hbWVpZHgpCisJCQkJPj0gYmUxNl90b19jcHUoaGRyX3MtPmZpcnN0dXNlZCkpOwogCQl0bXAgPSB4ZnNfYXR0cl9sZWFmX2VudHNpemUobGVhZl9zLCBzdGFydF9zICsgaSk7CiAjaWZkZWYgR1JPVAogCQkvKgpAQCAtMjIxMCwzNSArMjEzOCwzNSBAQAogCQkgKi8KIAkJaWYgKGVudHJ5X3MtPmZsYWdzICYgWEZTX0FUVFJfSU5DT01QTEVURSkgeyAvKiBza2lwIHBhcnRpYWxzPyAqLwogCQkJbWVtc2V0KFhGU19BVFRSX0xFQUZfTkFNRShsZWFmX3MsIHN0YXJ0X3MgKyBpKSwgMCwgdG1wKTsKLQkJCUlOVF9NT0QoaGRyX3MtPnVzZWRieXRlcywgQVJDSF9DT05WRVJULCAtdG1wKTsKLQkJCUlOVF9NT0QoaGRyX3MtPmNvdW50LCBBUkNIX0NPTlZFUlQsIC0xKTsKKwkJCWJlMTZfYWRkKCZoZHJfcy0+dXNlZGJ5dGVzLCAtdG1wKTsKKwkJCWJlMTZfYWRkKCZoZHJfcy0+Y291bnQsIC0xKTsKIAkJCWVudHJ5X2QtLTsJLyogdG8gY29tcGVuc2F0ZSBmb3IgKysgaW4gbG9vcCBoZHIgKi8KIAkJCWRlc3RpLS07CiAJCQlpZiAoKHN0YXJ0X3MgKyBpKSA8IG9mZnNldCkKIAkJCQlyZXN1bHQrKzsJLyogaW5zZXJ0aW9uIGluZGV4IGFkanVzdG1lbnQgKi8KIAkJfSBlbHNlIHsKICNlbmRpZiAvKiBHUk9UICovCi0JCQlJTlRfTU9EKGhkcl9kLT5maXJzdHVzZWQsIEFSQ0hfQ09OVkVSVCwgLXRtcCk7CisJCQliZTE2X2FkZCgmaGRyX2QtPmZpcnN0dXNlZCwgLXRtcCk7CiAJCQkvKiBib3RoIG9uLWRpc2ssIGRvbid0IGVuZGlhbiBmbGlwIHR3aWNlICovCiAJCQllbnRyeV9kLT5oYXNodmFsID0gZW50cnlfcy0+aGFzaHZhbDsKIAkJCS8qIGJvdGggb24tZGlzaywgZG9uJ3QgZW5kaWFuIGZsaXAgdHdpY2UgKi8KIAkJCWVudHJ5X2QtPm5hbWVpZHggPSBoZHJfZC0+Zmlyc3R1c2VkOwogCQkJZW50cnlfZC0+ZmxhZ3MgPSBlbnRyeV9zLT5mbGFnczsKLQkJCUFTU0VSVChJTlRfR0VUKGVudHJ5X2QtPm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCkgKyB0bXAKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShlbnRyeV9kLT5uYW1laWR4KSArIHRtcAogCQkJCQkJCTw9IFhGU19MQlNJWkUobXApKTsKIAkJCW1lbW1vdmUoWEZTX0FUVFJfTEVBRl9OQU1FKGxlYWZfZCwgZGVzdGkpLAogCQkJCVhGU19BVFRSX0xFQUZfTkFNRShsZWFmX3MsIHN0YXJ0X3MgKyBpKSwgdG1wKTsKLQkJCUFTU0VSVChJTlRfR0VUKGVudHJ5X3MtPm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCkgKyB0bXAKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShlbnRyeV9zLT5uYW1laWR4KSArIHRtcAogCQkJCQkJCTw9IFhGU19MQlNJWkUobXApKTsKIAkJCW1lbXNldChYRlNfQVRUUl9MRUFGX05BTUUobGVhZl9zLCBzdGFydF9zICsgaSksIDAsIHRtcCk7Ci0JCQlJTlRfTU9EKGhkcl9zLT51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCwgLXRtcCk7Ci0JCQlJTlRfTU9EKGhkcl9kLT51c2VkYnl0ZXMsIEFSQ0hfQ09OVkVSVCwgdG1wKTsKLQkJCUlOVF9NT0QoaGRyX3MtPmNvdW50LCBBUkNIX0NPTlZFUlQsIC0xKTsKLQkJCUlOVF9NT0QoaGRyX2QtPmNvdW50LCBBUkNIX0NPTlZFUlQsIDEpOwotCQkJdG1wID0gSU5UX0dFVChoZHJfZC0+Y291bnQsIEFSQ0hfQ09OVkVSVCkKKwkJCWJlMTZfYWRkKCZoZHJfcy0+dXNlZGJ5dGVzLCAtdG1wKTsKKwkJCWJlMTZfYWRkKCZoZHJfZC0+dXNlZGJ5dGVzLCB0bXApOworCQkJYmUxNl9hZGQoJmhkcl9zLT5jb3VudCwgLTEpOworCQkJYmUxNl9hZGQoJmhkcl9kLT5jb3VudCwgMSk7CisJCQl0bXAgPSBiZTE2X3RvX2NwdShoZHJfZC0+Y291bnQpCiAJCQkJCQkqIHNpemVvZih4ZnNfYXR0cl9sZWFmX2VudHJ5X3QpCiAJCQkJCQkrIHNpemVvZih4ZnNfYXR0cl9sZWFmX2hkcl90KTsKLQkJCUFTU0VSVChJTlRfR0VUKGhkcl9kLT5maXJzdHVzZWQsIEFSQ0hfQ09OVkVSVCkgPj0gdG1wKTsKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShoZHJfZC0+Zmlyc3R1c2VkKSA+PSB0bXApOwogI2lmZGVmIEdST1QKIAkJfQogI2VuZGlmIC8qIEdST1QgKi8KQEAgLTIyNDcsNyArMjE3NSw3IEBACiAJLyoKIAkgKiBaZXJvIG91dCB0aGUgZW50cmllcyB3ZSBqdXN0IGNvcGllZC4KIAkgKi8KLQlpZiAoc3RhcnRfcyA9PSBJTlRfR0VUKGhkcl9zLT5jb3VudCwgQVJDSF9DT05WRVJUKSkgeworCWlmIChzdGFydF9zID09IGJlMTZfdG9fY3B1KGhkcl9zLT5jb3VudCkpIHsKIAkJdG1wID0gY291bnQgKiBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KTsKIAkJZW50cnlfcyA9ICZsZWFmX3MtPmVudHJpZXNbc3RhcnRfc107CiAJCUFTU0VSVCgoKGNoYXIgKillbnRyeV9zICsgdG1wKSA8PQpAQCAtMjI1OCwxNSArMjE4NiwxNCBAQAogCQkgKiBNb3ZlIHRoZSByZW1haW5pbmcgZW50cmllcyBkb3duIHRvIGZpbGwgdGhlIGhvbGUsCiAJCSAqIHRoZW4gemVybyB0aGUgZW50cmllcyBhdCB0aGUgdG9wLgogCQkgKi8KLQkJdG1wICA9IElOVF9HRVQoaGRyX3MtPmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gY291bnQ7CisJCXRtcCAgPSBiZTE2X3RvX2NwdShoZHJfcy0+Y291bnQpIC0gY291bnQ7CiAJCXRtcCAqPSBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KTsKIAkJZW50cnlfcyA9ICZsZWFmX3MtPmVudHJpZXNbc3RhcnRfcyArIGNvdW50XTsKIAkJZW50cnlfZCA9ICZsZWFmX3MtPmVudHJpZXNbc3RhcnRfc107CiAJCW1lbW1vdmUoKGNoYXIgKillbnRyeV9kLCAoY2hhciAqKWVudHJ5X3MsIHRtcCk7CiAKIAkJdG1wID0gY291bnQgKiBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KTsKLQkJZW50cnlfcyA9ICZsZWFmX3MtPmVudHJpZXNbSU5UX0dFVChoZHJfcy0+Y291bnQsCi0JCQkJCQkJQVJDSF9DT05WRVJUKV07CisJCWVudHJ5X3MgPSAmbGVhZl9zLT5lbnRyaWVzW2JlMTZfdG9fY3B1KGhkcl9zLT5jb3VudCldOwogCQlBU1NFUlQoKChjaGFyICopZW50cnlfcyArIHRtcCkgPD0KIAkJICAgICAgICgoY2hhciAqKWxlYWZfcyArIFhGU19MQlNJWkUobXApKSk7CiAJCW1lbXNldCgoY2hhciAqKWVudHJ5X3MsIDAsIHRtcCk7CkBAIC0yMjc1LDE0ICsyMjAyLDExIEBACiAJLyoKIAkgKiBGaWxsIGluIHRoZSBmcmVlbWFwIGluZm9ybWF0aW9uCiAJICovCi0JSU5UX1NFVChoZHJfZC0+ZnJlZW1hcFswXS5iYXNlLCBBUkNIX0NPTlZFUlQsCi0JCQkJCXNpemVvZih4ZnNfYXR0cl9sZWFmX2hkcl90KSk7Ci0JSU5UX01PRChoZHJfZC0+ZnJlZW1hcFswXS5iYXNlLCBBUkNIX0NPTlZFUlQsCi0JCQkJSU5UX0dFVChoZHJfZC0+Y291bnQsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJKiBzaXplb2YoeGZzX2F0dHJfbGVhZl9lbnRyeV90KSk7Ci0JSU5UX1NFVChoZHJfZC0+ZnJlZW1hcFswXS5zaXplLCBBUkNIX0NPTlZFUlQsCi0JCQkJSU5UX0dFVChoZHJfZC0+Zmlyc3R1c2VkLCBBUkNIX0NPTlZFUlQpCi0JCQkgICAgICAtIElOVF9HRVQoaGRyX2QtPmZyZWVtYXBbMF0uYmFzZSwgQVJDSF9DT05WRVJUKSk7CisJaGRyX2QtPmZyZWVtYXBbMF0uYmFzZSA9IGNwdV90b19iZTE2KHNpemVvZih4ZnNfYXR0cl9sZWFmX2hkcl90KSk7CisJYmUxNl9hZGQoJmhkcl9kLT5mcmVlbWFwWzBdLmJhc2UsIGJlMTZfdG9fY3B1KGhkcl9kLT5jb3VudCkgKgorCQkJc2l6ZW9mKHhmc19hdHRyX2xlYWZfZW50cnlfdCkpOworCWhkcl9kLT5mcmVlbWFwWzBdLnNpemUgPSBjcHVfdG9fYmUxNihiZTE2X3RvX2NwdShoZHJfZC0+Zmlyc3R1c2VkKQorCQkJICAgICAgLSBiZTE2X3RvX2NwdShoZHJfZC0+ZnJlZW1hcFswXS5iYXNlKSk7CiAJaGRyX2QtPmZyZWVtYXBbMV0uYmFzZSA9IDA7CiAJaGRyX2QtPmZyZWVtYXBbMl0uYmFzZSA9IDA7CiAJaGRyX2QtPmZyZWVtYXBbMV0uc2l6ZSA9IDA7CkBAIC0yMzAxLDE4ICsyMjI1LDE2IEBACiAKIAlsZWFmMSA9IGxlYWYxX2JwLT5kYXRhOwogCWxlYWYyID0gbGVhZjJfYnAtPmRhdGE7Ci0JQVNTRVJUKChJTlRfR0VUKGxlYWYxLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQykgJiYKLQkgICAgICAgKElOVF9HRVQobGVhZjItPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfQVRUUl9MRUFGX01BR0lDKSk7Ci0JaWYgKCAgIChJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgPiAwKQotCSAgICAmJiAoSU5UX0dFVChsZWFmMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID4gMCkKLQkgICAgJiYgKCAgIChJTlRfR0VUKGxlYWYyLT5lbnRyaWVzWyAwIF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSA8Ci0JCSAgICAgIElOVF9HRVQobGVhZjEtPmVudHJpZXNbIDAgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKQotCQl8fCAoSU5UX0dFVChsZWFmMi0+ZW50cmllc1tJTlRfR0VUKGxlYWYyLT5oZHIuY291bnQsCi0JCQkJQVJDSF9DT05WRVJUKS0xXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpIDwKLQkJICAgICAgSU5UX0dFVChsZWFmMS0+ZW50cmllc1tJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsCi0JCQkJQVJDSF9DT05WRVJUKS0xXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKSkgKSB7CisJQVNTRVJUKChiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmluZm8ubWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpICYmCisJICAgICAgIChiZTE2X3RvX2NwdShsZWFmMi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpKTsKKwlpZiAoKGJlMTZfdG9fY3B1KGxlYWYxLT5oZHIuY291bnQpID4gMCkgJiYKKwkgICAgKGJlMTZfdG9fY3B1KGxlYWYyLT5oZHIuY291bnQpID4gMCkgJiYKKwkgICAgKChiZTMyX3RvX2NwdShsZWFmMi0+ZW50cmllc1swXS5oYXNodmFsKSA8CisJICAgICAgYmUzMl90b19jcHUobGVhZjEtPmVudHJpZXNbMF0uaGFzaHZhbCkpIHx8CisJICAgICAoYmUzMl90b19jcHUobGVhZjItPmVudHJpZXNbCisJCQliZTE2X3RvX2NwdShsZWFmMi0+aGRyLmNvdW50KS0xXS5oYXNodmFsKSA8CisJICAgICAgYmUzMl90b19jcHUobGVhZjEtPmVudHJpZXNbCisJCQliZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KS0xXS5oYXNodmFsKSkpKSB7CiAJCXJldHVybigxKTsKIAl9CiAJcmV0dXJuKDApOwpAQCAtMjMyNywxNCArMjI0OSwxMiBAQAogCXhmc19hdHRyX2xlYWZibG9ja190ICpsZWFmOwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpOwogCWlmIChjb3VudCkKLQkJKmNvdW50ID0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7CisJCSpjb3VudCA9IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCk7CiAJaWYgKCFsZWFmLT5oZHIuY291bnQpCiAJCXJldHVybigwKTsKLQlyZXR1cm4oSU5UX0dFVChsZWFmLT5lbnRyaWVzW0lOVF9HRVQobGVhZi0+aGRyLmNvdW50LAotCQkJCUFSQ0hfQ09OVkVSVCktMV0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSk7CisJcmV0dXJuIGJlMzJfdG9fY3B1KGxlYWYtPmVudHJpZXNbYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KS0xXS5oYXNodmFsKTsKIH0KIAogLyoKQEAgLTIzNDgsMTMgKzIyNjgsMTEgQEAKIAl4ZnNfYXR0cl9sZWFmX25hbWVfcmVtb3RlX3QgKm5hbWVfcm10OwogCWludCBzaXplOwogCi0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAJaWYgKGxlYWYtPmVudHJpZXNbaW5kZXhdLmZsYWdzICYgWEZTX0FUVFJfTE9DQUwpIHsKIAkJbmFtZV9sb2MgPSBYRlNfQVRUUl9MRUFGX05BTUVfTE9DQUwobGVhZiwgaW5kZXgpOwogCQlzaXplID0gWEZTX0FUVFJfTEVBRl9FTlRTSVpFX0xPQ0FMKG5hbWVfbG9jLT5uYW1lbGVuLAotCQkJCQkJICAgSU5UX0dFVChuYW1lX2xvYy0+dmFsdWVsZW4sCi0JCQkJCQkJCUFSQ0hfQ09OVkVSVCkpOworCQkJCQkJICAgYmUxNl90b19jcHUobmFtZV9sb2MtPnZhbHVlbGVuKSk7CiAJfSBlbHNlIHsKIAkJbmFtZV9ybXQgPSBYRlNfQVRUUl9MRUFGX05BTUVfUkVNT1RFKGxlYWYsIGluZGV4KTsKIAkJc2l6ZSA9IFhGU19BVFRSX0xFQUZfRU5UU0laRV9SRU1PVEUobmFtZV9ybXQtPm5hbWVsZW4pOwpAQCAtMjQxMiwyMiArMjMzMCwyMCBAQAogCSAqLwogCWlmIChjb250ZXh0LT5yZXN5bmNoKSB7CiAJCWVudHJ5ID0gJmxlYWYtPmVudHJpZXNbMF07Ci0JCWZvciAoaSA9IDA7IGkgPCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKLQkJCQkJCQllbnRyeSsrLCBpKyspIHsKLQkJCWlmIChJTlRfR0VUKGVudHJ5LT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQkJPT0gY3Vyc29yLT5oYXNodmFsKSB7CisJCWZvciAoaSA9IDA7IGkgPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpOyBlbnRyeSsrLCBpKyspIHsKKwkJCWlmIChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgPT0gY3Vyc29yLT5oYXNodmFsKSB7CiAJCQkJaWYgKGN1cnNvci0+b2Zmc2V0ID09IGNvbnRleHQtPmR1cGNudCkgewogCQkJCQljb250ZXh0LT5kdXBjbnQgPSAwOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQkJY29udGV4dC0+ZHVwY250Kys7Ci0JCQl9IGVsc2UgaWYgKElOVF9HRVQoZW50cnktPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCQk+IGN1cnNvci0+aGFzaHZhbCkgeworCQkJfSBlbHNlIGlmIChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgPgorCQkJCQljdXJzb3ItPmhhc2h2YWwpIHsKIAkJCQljb250ZXh0LT5kdXBjbnQgPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWlmIChpID09IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKSB7CisJCWlmIChpID09IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpIHsKIAkJCXhmc19hdHRyX3RyYWNlX2xfYygibm90IGZvdW5kIiwgY29udGV4dCk7CiAJCQlyZXR1cm4oMCk7CiAJCX0KQEAgLTI0NDEsMTIgKzIzNTcsMTIgQEAKIAkgKiBXZSBoYXZlIGZvdW5kIG91ciBwbGFjZSwgc3RhcnQgY29weWluZyBvdXQgdGhlIG5ldyBhdHRyaWJ1dGVzLgogCSAqLwogCXJldHZhbCA9IDA7Ci0JZm9yICggIDsgKGkgPCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkKKwlmb3IgKCAgOyAoaSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpCiAJICAgICAmJiAocmV0dmFsID09IDApOyBlbnRyeSsrLCBpKyspIHsKIAkJYXR0cm5hbWVzX3QJKm5hbWVzcDsKIAotCQlpZiAoSU5UX0dFVChlbnRyeS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSAhPSBjdXJzb3ItPmhhc2h2YWwpIHsKLQkJCWN1cnNvci0+aGFzaHZhbCA9IElOVF9HRVQoZW50cnktPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7CisJCWlmIChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgIT0gY3Vyc29yLT5oYXNodmFsKSB7CisJCQljdXJzb3ItPmhhc2h2YWwgPSBiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCk7CiAJCQljdXJzb3ItPm9mZnNldCA9IDA7CiAJCX0KIApAQCAtMjQ3NSw4ICsyMzkxLDcgQEAKIAkJCQlyZXR2YWwgPSB4ZnNfYXR0cl9wdXRfbGlzdGVudChjb250ZXh0LCBuYW1lc3AsCiAJCQkJCShjaGFyICopbmFtZV9sb2MtPm5hbWV2YWwsCiAJCQkJCShpbnQpbmFtZV9sb2MtPm5hbWVsZW4sCi0JCQkJCShpbnQpSU5UX0dFVChuYW1lX2xvYy0+dmFsdWVsZW4sCi0JCQkJCQkJCUFSQ0hfQ09OVkVSVCkpOworCQkJCQliZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCW5hbWVfcm10ID0gWEZTX0FUVFJfTEVBRl9OQU1FX1JFTU9URShsZWFmLCBpKTsKQEAgLTI0ODgsOCArMjQwMyw3IEBACiAJCQkJcmV0dmFsID0geGZzX2F0dHJfcHV0X2xpc3RlbnQoY29udGV4dCwgbmFtZXNwLAogCQkJCQkoY2hhciAqKW5hbWVfcm10LT5uYW1lLAogCQkJCQkoaW50KW5hbWVfcm10LT5uYW1lbGVuLAotCQkJCQkoaW50KUlOVF9HRVQobmFtZV9ybXQtPnZhbHVlbGVuLAotCQkJCQkJCQlBUkNIX0NPTlZFUlQpKTsKKwkJCQkJYmUzMl90b19jcHUobmFtZV9ybXQtPnZhbHVlbGVuKSk7CiAJCQl9CiAJCX0KIAkJaWYgKHJldHZhbCA9PSAwKSB7CkBAIC0yNTk2LDkgKzI1MTAsOCBAQAogCUFTU0VSVChicCAhPSBOVUxMKTsKIAogCWxlYWYgPSBicC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7Ci0JQVNTRVJUKGFyZ3MtPmluZGV4IDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGFyZ3MtPmluZGV4IDwgYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSk7CiAJQVNTRVJUKGFyZ3MtPmluZGV4ID49IDApOwogCWVudHJ5ID0gJmxlYWYtPmVudHJpZXNbIGFyZ3MtPmluZGV4IF07CiAJQVNTRVJUKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX0lOQ09NUExFVEUpOwpAQCAtMjYxMyw3ICsyNTI2LDcgQEAKIAkJbmFtZWxlbiA9IG5hbWVfcm10LT5uYW1lbGVuOwogCQluYW1lID0gKGNoYXIgKiluYW1lX3JtdC0+bmFtZTsKIAl9Ci0JQVNTRVJUKElOVF9HRVQoZW50cnktPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPT0gYXJncy0+aGFzaHZhbCk7CisJQVNTRVJUKGJlMzJfdG9fY3B1KGVudHJ5LT5oYXNodmFsKSA9PSBhcmdzLT5oYXNodmFsKTsKIAlBU1NFUlQobmFtZWxlbiA9PSBhcmdzLT5uYW1lbGVuKTsKIAlBU1NFUlQobWVtY21wKG5hbWUsIGFyZ3MtPm5hbWUsIG5hbWVsZW4pID09IDApOwogI2VuZGlmIC8qIERFQlVHICovCkBAIC0yNjI1LDggKzI1MzgsOCBAQAogCWlmIChhcmdzLT5ybXRibGtubykgewogCQlBU1NFUlQoKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX0xPQ0FMKSA9PSAwKTsKIAkJbmFtZV9ybXQgPSBYRlNfQVRUUl9MRUFGX05BTUVfUkVNT1RFKGxlYWYsIGFyZ3MtPmluZGV4KTsKLQkJSU5UX1NFVChuYW1lX3JtdC0+dmFsdWVibGssIEFSQ0hfQ09OVkVSVCwgYXJncy0+cm10Ymxrbm8pOwotCQlJTlRfU0VUKG5hbWVfcm10LT52YWx1ZWxlbiwgQVJDSF9DT05WRVJULCBhcmdzLT52YWx1ZWxlbik7CisJCW5hbWVfcm10LT52YWx1ZWJsayA9IGNwdV90b19iZTMyKGFyZ3MtPnJtdGJsa25vKTsKKwkJbmFtZV9ybXQtPnZhbHVlbGVuID0gY3B1X3RvX2JlMzIoYXJncy0+dmFsdWVsZW4pOwogCQl4ZnNfZGFfbG9nX2J1ZihhcmdzLT50cmFucywgYnAsCiAJCQkgWEZTX0RBX0xPR1JBTkdFKGxlYWYsIG5hbWVfcm10LCBzaXplb2YoKm5hbWVfcm10KSkpOwogCX0KQEAgLTI2NjMsOSArMjU3Niw4IEBACiAJQVNTRVJUKGJwICE9IE5VTEwpOwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKLQlBU1NFUlQoYXJncy0+aW5kZXggPCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYXJncy0+aW5kZXggPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpKTsKIAlBU1NFUlQoYXJncy0+aW5kZXggPj0gMCk7CiAJZW50cnkgPSAmbGVhZi0+ZW50cmllc1sgYXJncy0+aW5kZXggXTsKIApAQCAtMjczNiwxNiArMjY0OCwxNCBAQAogCX0KIAogCWxlYWYxID0gYnAxLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYxLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7Ci0JQVNTRVJUKGFyZ3MtPmluZGV4IDwgSU5UX0dFVChsZWFmMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZjEtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYXJncy0+aW5kZXggPCBiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KSk7CiAJQVNTRVJUKGFyZ3MtPmluZGV4ID49IDApOwogCWVudHJ5MSA9ICZsZWFmMS0+ZW50cmllc1sgYXJncy0+aW5kZXggXTsKIAogCWxlYWYyID0gYnAyLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYyLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7Ci0JQVNTRVJUKGFyZ3MtPmluZGV4MiA8IElOVF9HRVQobGVhZjItPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYyLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGFyZ3MtPmluZGV4MiA8IGJlMTZfdG9fY3B1KGxlYWYyLT5oZHIuY291bnQpKTsKIAlBU1NFUlQoYXJncy0+aW5kZXgyID49IDApOwogCWVudHJ5MiA9ICZsZWFmMi0+ZW50cmllc1sgYXJncy0+aW5kZXgyIF07CiAKQEAgLTI3NjgsNyArMjY3OCw3IEBACiAJCW5hbWVsZW4yID0gbmFtZV9ybXQtPm5hbWVsZW47CiAJCW5hbWUyID0gKGNoYXIgKiluYW1lX3JtdC0+bmFtZTsKIAl9Ci0JQVNTRVJUKElOVF9HRVQoZW50cnkxLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID09IElOVF9HRVQoZW50cnkyLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKTsKKwlBU1NFUlQoYmUzMl90b19jcHUoZW50cnkxLT5oYXNodmFsKSA9PSBiZTMyX3RvX2NwdShlbnRyeTItPmhhc2h2YWwpKTsKIAlBU1NFUlQobmFtZWxlbjEgPT0gbmFtZWxlbjIpOwogCUFTU0VSVChtZW1jbXAobmFtZTEsIG5hbWUyLCBuYW1lbGVuMSkgPT0gMCk7CiAjZW5kaWYgLyogREVCVUcgKi8KQEAgLTI3ODIsOCArMjY5Miw4IEBACiAJaWYgKGFyZ3MtPnJtdGJsa25vKSB7CiAJCUFTU0VSVCgoZW50cnkxLT5mbGFncyAmIFhGU19BVFRSX0xPQ0FMKSA9PSAwKTsKIAkJbmFtZV9ybXQgPSBYRlNfQVRUUl9MRUFGX05BTUVfUkVNT1RFKGxlYWYxLCBhcmdzLT5pbmRleCk7Ci0JCUlOVF9TRVQobmFtZV9ybXQtPnZhbHVlYmxrLCBBUkNIX0NPTlZFUlQsIGFyZ3MtPnJtdGJsa25vKTsKLQkJSU5UX1NFVChuYW1lX3JtdC0+dmFsdWVsZW4sIEFSQ0hfQ09OVkVSVCwgYXJncy0+dmFsdWVsZW4pOworCQluYW1lX3JtdC0+dmFsdWVibGsgPSBjcHVfdG9fYmUzMihhcmdzLT5ybXRibGtubyk7CisJCW5hbWVfcm10LT52YWx1ZWxlbiA9IGNwdV90b19iZTMyKGFyZ3MtPnZhbHVlbGVuKTsKIAkJeGZzX2RhX2xvZ19idWYoYXJncy0+dHJhbnMsIGJwMSwKIAkJCSBYRlNfREFfTE9HUkFOR0UobGVhZjEsIG5hbWVfcm10LCBzaXplb2YoKm5hbWVfcm10KSkpOwogCX0KQEAgLTI4NDIsOSArMjc1Miw5IEBACiAJICogVGhpcyBpcyBhIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCEKIAkgKi8KIAlpbmZvID0gYnAtPmRhdGE7Ci0JaWYgKElOVF9HRVQoaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RBX05PREVfTUFHSUMpIHsKKwlpZiAoYmUxNl90b19jcHUoaW5mby0+bWFnaWMpID09IFhGU19EQV9OT0RFX01BR0lDKSB7CiAJCWVycm9yID0geGZzX2F0dHJfbm9kZV9pbmFjdGl2ZSh0cmFucywgZHAsIGJwLCAxKTsKLQl9IGVsc2UgaWYgKElOVF9HRVQoaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQykgeworCX0gZWxzZSBpZiAoYmUxNl90b19jcHUoaW5mby0+bWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpIHsKIAkJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2luYWN0aXZlKHRyYW5zLCBkcCwgYnApOwogCX0gZWxzZSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTyk7CkBAIC0yODkyLDE1ICsyODAyLDE0IEBACiAJfQogCiAJbm9kZSA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKG5vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJCQk9PSBYRlNfREFfTk9ERV9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KG5vZGUtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfREFfTk9ERV9NQUdJQyk7CiAJcGFyZW50X2Jsa25vID0geGZzX2RhX2Jsa25vKGJwKTsJLyogc2F2ZSBmb3IgcmUtcmVhZCBsYXRlciAqLwotCWNvdW50ID0gSU5UX0dFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7CisJY291bnQgPSBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpOwogCWlmICghY291bnQpIHsKIAkJeGZzX2RhX2JyZWxzZSgqdHJhbnMsIGJwKTsKIAkJcmV0dXJuKDApOwogCX0KLQljaGlsZF9mc2IgPSBJTlRfR0VUKG5vZGUtPmJ0cmVlWzBdLmJlZm9yZSwgQVJDSF9DT05WRVJUKTsKKwljaGlsZF9mc2IgPSBiZTMyX3RvX2NwdShub2RlLT5idHJlZVswXS5iZWZvcmUpOwogCXhmc19kYV9icmVsc2UoKnRyYW5zLCBicCk7CS8qIG5vIGxvY2tzIGZvciBsYXRlciB0cmFucyAqLwogCiAJLyoKQEAgLTI5MjcsMTIgKzI4MzYsMTAgQEAKIAkJCSAqIEludmFsaWRhdGUgdGhlIHN1YnRyZWUsIGhvd2V2ZXIgd2UgaGF2ZSB0by4KIAkJCSAqLwogCQkJaW5mbyA9IGNoaWxkX2JwLT5kYXRhOwotCQkJaWYgKElOVF9HRVQoaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCQk9PSBYRlNfREFfTk9ERV9NQUdJQykgeworCQkJaWYgKGJlMTZfdG9fY3B1KGluZm8tPm1hZ2ljKSA9PSBYRlNfREFfTk9ERV9NQUdJQykgewogCQkJCWVycm9yID0geGZzX2F0dHJfbm9kZV9pbmFjdGl2ZSh0cmFucywgZHAsCiAJCQkJCQljaGlsZF9icCwgbGV2ZWwrMSk7Ci0JCQl9IGVsc2UgaWYgKElOVF9HRVQoaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpIHsKKwkJCX0gZWxzZSBpZiAoYmUxNl90b19jcHUoaW5mby0+bWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpIHsKIAkJCQllcnJvciA9IHhmc19hdHRyX2xlYWZfaW5hY3RpdmUodHJhbnMsIGRwLAogCQkJCQkJY2hpbGRfYnApOwogCQkJfSBlbHNlIHsKQEAgLTI5NjIsNyArMjg2OSw3IEBACiAJCQkJJmJwLCBYRlNfQVRUUl9GT1JLKTsKIAkJCWlmIChlcnJvcikKIAkJCQlyZXR1cm4oZXJyb3IpOwotCQkJY2hpbGRfZnNiID0gSU5UX0dFVChub2RlLT5idHJlZVtpKzFdLmJlZm9yZSwgQVJDSF9DT05WRVJUKTsKKwkJCWNoaWxkX2ZzYiA9IGJlMzJfdG9fY3B1KG5vZGUtPmJ0cmVlW2krMV0uYmVmb3JlKTsKIAkJCXhmc19kYV9icmVsc2UoKnRyYW5zLCBicCk7CiAJCX0KIAkJLyoKQEAgLTI5OTEsMTcgKzI4OTgsMTYgQEAKIAlpbnQgZXJyb3IsIGNvdW50LCBzaXplLCB0bXAsIGk7CiAKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCT09IFhGU19BVFRSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAKIAkvKgogCSAqIENvdW50IHRoZSBudW1iZXIgb2YgInJlbW90ZSIgdmFsdWUgZXh0ZW50cy4KIAkgKi8KIAljb3VudCA9IDA7CiAJZW50cnkgPSAmbGVhZi0+ZW50cmllc1swXTsKLQlmb3IgKGkgPSAwOyBpIDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7IGVudHJ5KyssIGkrKykgewotCQlpZiAoICAgSU5UX0dFVChlbnRyeS0+bmFtZWlkeCwgQVJDSF9DT05WRVJUKQotCQkgICAgJiYgKChlbnRyeS0+ZmxhZ3MgJiBYRlNfQVRUUl9MT0NBTCkgPT0gMCkpIHsKKwlmb3IgKGkgPSAwOyBpIDwgYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsgZW50cnkrKywgaSsrKSB7CisJCWlmIChiZTE2X3RvX2NwdShlbnRyeS0+bmFtZWlkeCkgJiYKKwkJICAgICgoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfTE9DQUwpID09IDApKSB7CiAJCQluYW1lX3JtdCA9IFhGU19BVFRSX0xFQUZfTkFNRV9SRU1PVEUobGVhZiwgaSk7CiAJCQlpZiAobmFtZV9ybXQtPnZhbHVlYmxrKQogCQkJCWNvdW50Kys7CkBAIC0zMDI3LDE3ICsyOTMzLDE0IEBACiAJICovCiAJbHAgPSBsaXN0OwogCWVudHJ5ID0gJmxlYWYtPmVudHJpZXNbMF07Ci0JZm9yIChpID0gMDsgaSA8IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOyBlbnRyeSsrLCBpKyspIHsKLQkJaWYgKCAgIElOVF9HRVQoZW50cnktPm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCkKLQkJICAgICYmICgoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfTE9DQUwpID09IDApKSB7CisJZm9yIChpID0gMDsgaSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCk7IGVudHJ5KyssIGkrKykgeworCQlpZiAoYmUxNl90b19jcHUoZW50cnktPm5hbWVpZHgpICYmCisJCSAgICAoKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX0xPQ0FMKSA9PSAwKSkgewogCQkJbmFtZV9ybXQgPSBYRlNfQVRUUl9MRUFGX05BTUVfUkVNT1RFKGxlYWYsIGkpOwogCQkJaWYgKG5hbWVfcm10LT52YWx1ZWJsaykgewotCQkJCS8qIGJvdGggb24tZGlzaywgZG9uJ3QgZW5kaWFuIGZsaXAgdHdpY2UgKi8KLQkJCQlscC0+dmFsdWVibGsgPSBuYW1lX3JtdC0+dmFsdWVibGs7Ci0JCQkJSU5UX1NFVChscC0+dmFsdWVsZW4sIEFSQ0hfQ09OVkVSVCwKLQkJCQkJCVhGU19CX1RPX0ZTQihkcC0+aV9tb3VudCwKLQkJCQkJCSAgICBJTlRfR0VUKG5hbWVfcm10LT52YWx1ZWxlbiwKLQkJCQkJCQkgICAgICBBUkNIX0NPTlZFUlQpKSk7CisJCQkJbHAtPnZhbHVlYmxrID0gYmUzMl90b19jcHUobmFtZV9ybXQtPnZhbHVlYmxrKTsKKwkJCQlscC0+dmFsdWVsZW4gPSBYRlNfQl9UT19GU0IoZHAtPmlfbW91bnQsCisJCQkJCQkgICAgYmUzMl90b19jcHUobmFtZV9ybXQtPnZhbHVlbGVuKSk7CiAJCQkJbHArKzsKIAkJCX0KIAkJfQpAQCAtMzA1MCwxMCArMjk1Myw4IEBACiAJZXJyb3IgPSAwOwogCWZvciAobHAgPSBsaXN0LCBpID0gMDsgaSA8IGNvdW50OyBpKyssIGxwKyspIHsKIAkJdG1wID0geGZzX2F0dHJfbGVhZl9mcmVleHRlbnQodHJhbnMsIGRwLAotCQkJCQkJICAgICBJTlRfR0VUKGxwLT52YWx1ZWJsaywKLQkJCQkJCQkJQVJDSF9DT05WRVJUKSwKLQkJCQkJCSAgICAgSU5UX0dFVChscC0+dmFsdWVsZW4sCi0JCQkJCQkJCUFSQ0hfQ09OVkVSVCkpOworCQkJCWxwLT52YWx1ZWJsaywgbHAtPnZhbHVlbGVuKTsKKwogCQlpZiAoZXJyb3IgPT0gMCkKIAkJCWVycm9yID0gdG1wOwkvKiBzYXZlIG9ubHkgdGhlIDFzdCBlcnJubyAqLwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmggYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5oCmluZGV4IDU0MWUzNDEwLi41MWMzZWUxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmgKQEAgLTczLDM5ICs3MywzOSBAQAogI2RlZmluZSBYRlNfQVRUUl9MRUFGX01BUFNJWkUJMwkvKiBob3cgbWFueSBmcmVlc3BhY2Ugc2xvdHMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfbGVhZl9tYXAgewkvKiBSTEUgbWFwIG9mIGZyZWUgYnl0ZXMgKi8KLQlfX3VpbnQxNl90CWJhc2U7CSAJLyogYmFzZSBvZiBmcmVlIHJlZ2lvbiAqLwotCV9fdWludDE2X3QJc2l6ZTsJICAJLyogbGVuZ3RoIG9mIGZyZWUgcmVnaW9uICovCisJX19iZTE2CWJhc2U7CQkJICAvKiBiYXNlIG9mIGZyZWUgcmVnaW9uICovCisJX19iZTE2CXNpemU7CQkJICAvKiBsZW5ndGggb2YgZnJlZSByZWdpb24gKi8KIH0geGZzX2F0dHJfbGVhZl9tYXBfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfbGVhZl9oZHIgewkvKiBjb25zdGFudC1zdHJ1Y3R1cmUgaGVhZGVyIGJsb2NrICovCiAJeGZzX2RhX2Jsa2luZm9fdCBpbmZvOwkJLyogYmxvY2sgdHlwZSwgbGlua3MsIGV0Yy4gKi8KLQlfX3VpbnQxNl90CWNvdW50OwkJLyogY291bnQgb2YgYWN0aXZlIGxlYWZfZW50cnkncyAqLwotCV9fdWludDE2X3QJdXNlZGJ5dGVzOwkvKiBudW0gYnl0ZXMgb2YgbmFtZXMvdmFsdWVzIHN0b3JlZCAqLwotCV9fdWludDE2X3QJZmlyc3R1c2VkOwkvKiBmaXJzdCB1c2VkIGJ5dGUgaW4gbmFtZSBhcmVhICovCi0JX191aW50OF90CWhvbGVzOwkJLyogIT0gMCBpZiBibGsgbmVlZHMgY29tcGFjdGlvbiAqLwotCV9fdWludDhfdAlwYWQxOworCV9fYmUxNgljb3VudDsJCQkvKiBjb3VudCBvZiBhY3RpdmUgbGVhZl9lbnRyeSdzICovCisJX19iZTE2CXVzZWRieXRlczsJCS8qIG51bSBieXRlcyBvZiBuYW1lcy92YWx1ZXMgc3RvcmVkICovCisJX19iZTE2CWZpcnN0dXNlZDsJCS8qIGZpcnN0IHVzZWQgYnl0ZSBpbiBuYW1lIGFyZWEgKi8KKwlfX3U4CWhvbGVzOwkJCS8qICE9IDAgaWYgYmxrIG5lZWRzIGNvbXBhY3Rpb24gKi8KKwlfX3U4CXBhZDE7CiAJeGZzX2F0dHJfbGVhZl9tYXBfdCBmcmVlbWFwW1hGU19BVFRSX0xFQUZfTUFQU0laRV07CiAJCQkJCS8qIE4gbGFyZ2VzdCBmcmVlIHJlZ2lvbnMgKi8KIH0geGZzX2F0dHJfbGVhZl9oZHJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfbGVhZl9lbnRyeSB7CS8qIHNvcnRlZCBvbiBrZXksIG5vdCBuYW1lICovCi0JeGZzX2RhaGFzaF90CWhhc2h2YWw7CS8qIGhhc2ggdmFsdWUgb2YgbmFtZSAqLwotCV9fdWludDE2X3QJbmFtZWlkeDsJLyogaW5kZXggaW50byBidWZmZXIgb2YgbmFtZS92YWx1ZSAqLwotCV9fdWludDhfdAlmbGFnczsJCS8qIExPQ0FML1JPT1QvU0VDVVJFL0lOQ09NUExFVEUgZmxhZyAqLwotCV9fdWludDhfdAlwYWQyOwkJLyogdW51c2VkIHBhZCBieXRlICovCisJX19iZTMyCWhhc2h2YWw7CQkvKiBoYXNoIHZhbHVlIG9mIG5hbWUgKi8KKyAJX19iZTE2CW5hbWVpZHg7CQkvKiBpbmRleCBpbnRvIGJ1ZmZlciBvZiBuYW1lL3ZhbHVlICovCisJX191OAlmbGFnczsJCQkvKiBMT0NBTC9ST09UL1NFQ1VSRS9JTkNPTVBMRVRFIGZsYWcgKi8KKwlfX3U4CXBhZDI7CQkJLyogdW51c2VkIHBhZCBieXRlICovCiB9IHhmc19hdHRyX2xlYWZfZW50cnlfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfbGVhZl9uYW1lX2xvY2FsIHsKLQlfX3VpbnQxNl90CXZhbHVlbGVuOwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gdmFsdWUgKi8KLQlfX3VpbnQ4X3QJbmFtZWxlbjsJLyogbGVuZ3RoIG9mIG5hbWUgYnl0ZXMgKi8KLQlfX3VpbnQ4X3QJbmFtZXZhbFsxXTsJLyogbmFtZS92YWx1ZSBieXRlcyAqLworCV9fYmUxNgl2YWx1ZWxlbjsJCS8qIG51bWJlciBvZiBieXRlcyBpbiB2YWx1ZSAqLworCV9fdTgJbmFtZWxlbjsJCS8qIGxlbmd0aCBvZiBuYW1lIGJ5dGVzICovCisJX191OAluYW1ldmFsWzFdOwkJLyogbmFtZS92YWx1ZSBieXRlcyAqLwogfSB4ZnNfYXR0cl9sZWFmX25hbWVfbG9jYWxfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfbGVhZl9uYW1lX3JlbW90ZSB7Ci0JeGZzX2RhYmxrX3QJdmFsdWVibGs7CS8qIGJsb2NrIG51bWJlciBvZiB2YWx1ZSBieXRlcyAqLwotCV9fdWludDMyX3QJdmFsdWVsZW47CS8qIG51bWJlciBvZiBieXRlcyBpbiB2YWx1ZSAqLwotCV9fdWludDhfdAluYW1lbGVuOwkvKiBsZW5ndGggb2YgbmFtZSBieXRlcyAqLwotCV9fdWludDhfdAluYW1lWzFdOwkvKiBuYW1lIGJ5dGVzICovCisJX19iZTMyCXZhbHVlYmxrOwkJLyogYmxvY2sgbnVtYmVyIG9mIHZhbHVlIGJ5dGVzICovCisJX19iZTMyCXZhbHVlbGVuOwkJLyogbnVtYmVyIG9mIGJ5dGVzIGluIHZhbHVlICovCisJX191OAluYW1lbGVuOwkJLyogbGVuZ3RoIG9mIG5hbWUgYnl0ZXMgKi8KKwlfX3U4CW5hbWVbMV07CQkvKiBuYW1lIGJ5dGVzICovCiB9IHhmc19hdHRyX2xlYWZfbmFtZV9yZW1vdGVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfbGVhZmJsb2NrIHsKQEAgLTE0Myw4ICsxNDMsOCBAQAogc3RhdGljIGlubGluZSB4ZnNfYXR0cl9sZWFmX25hbWVfcmVtb3RlX3QgKgogeGZzX2F0dHJfbGVhZl9uYW1lX3JlbW90ZSh4ZnNfYXR0cl9sZWFmYmxvY2tfdCAqbGVhZnAsIGludCBpZHgpCiB7Ci0JcmV0dXJuICh4ZnNfYXR0cl9sZWFmX25hbWVfcmVtb3RlX3QgKikgJigoY2hhciAqKQotCQkobGVhZnApKVtJTlRfR0VUKChsZWFmcCktPmVudHJpZXNbaWR4XS5uYW1laWR4LCBBUkNIX0NPTlZFUlQpXTsKKwlyZXR1cm4gKHhmc19hdHRyX2xlYWZfbmFtZV9yZW1vdGVfdCAqKQorCQkmKChjaGFyICopbGVhZnApW2JlMTZfdG9fY3B1KGxlYWZwLT5lbnRyaWVzW2lkeF0ubmFtZWlkeCldOwogfQogCiAjZGVmaW5lIFhGU19BVFRSX0xFQUZfTkFNRV9MT0NBTChsZWFmcCxpZHgpCVwKQEAgLTE1MiwxNiArMTUyLDE1IEBACiBzdGF0aWMgaW5saW5lIHhmc19hdHRyX2xlYWZfbmFtZV9sb2NhbF90ICoKIHhmc19hdHRyX2xlYWZfbmFtZV9sb2NhbCh4ZnNfYXR0cl9sZWFmYmxvY2tfdCAqbGVhZnAsIGludCBpZHgpCiB7Ci0JcmV0dXJuICh4ZnNfYXR0cl9sZWFmX25hbWVfbG9jYWxfdCAqKSAmKChjaGFyICopCi0JCShsZWFmcCkpW0lOVF9HRVQoKGxlYWZwKS0+ZW50cmllc1tpZHhdLm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCldOworCXJldHVybiAoeGZzX2F0dHJfbGVhZl9uYW1lX2xvY2FsX3QgKikKKwkJJigoY2hhciAqKWxlYWZwKVtiZTE2X3RvX2NwdShsZWFmcC0+ZW50cmllc1tpZHhdLm5hbWVpZHgpXTsKIH0KIAogI2RlZmluZSBYRlNfQVRUUl9MRUFGX05BTUUobGVhZnAsaWR4KQkJXAogCXhmc19hdHRyX2xlYWZfbmFtZShsZWFmcCxpZHgpCiBzdGF0aWMgaW5saW5lIGNoYXIgKnhmc19hdHRyX2xlYWZfbmFtZSh4ZnNfYXR0cl9sZWFmYmxvY2tfdCAqbGVhZnAsIGludCBpZHgpCiB7Ci0JcmV0dXJuICgmKChjaGFyICopCi0JCShsZWFmcCkpW0lOVF9HRVQoKGxlYWZwKS0+ZW50cmllc1tpZHhdLm5hbWVpZHgsIEFSQ0hfQ09OVkVSVCldKTsKKwlyZXR1cm4gJigoY2hhciAqKWxlYWZwKVtiZTE2X3RvX2NwdShsZWFmcC0+ZW50cmllc1tpZHhdLm5hbWVpZHgpXTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9zZi5oIGIvZnMveGZzL3hmc19hdHRyX3NmLmgKaW5kZXggZmZlZDZjYS4uZjY3ZjkxNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyX3NmLmgKKysrIGIvZnMveGZzL3hmc19hdHRyX3NmLmgKQEAgLTMyLDggKzMyLDggQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfc2hvcnRmb3JtIHsKIAlzdHJ1Y3QgeGZzX2F0dHJfc2ZfaGRyIHsJLyogY29uc3RhbnQtc3RydWN0dXJlIGhlYWRlciBibG9jayAqLwotCQlfX3VpbnQxNl90IHRvdHNpemU7CS8qIHRvdGFsIGJ5dGVzIGluIHNob3J0Zm9ybSBsaXN0ICovCi0JCV9fdWludDhfdCBjb3VudDsJLyogY291bnQgb2YgYWN0aXZlIGVudHJpZXMgKi8KKwkJX19iZTE2CXRvdHNpemU7CS8qIHRvdGFsIGJ5dGVzIGluIHNob3J0Zm9ybSBsaXN0ICovCisJCV9fdTgJY291bnQ7CS8qIGNvdW50IG9mIGFjdGl2ZSBlbnRyaWVzICovCiAJfSBoZHI7CiAJc3RydWN0IHhmc19hdHRyX3NmX2VudHJ5IHsKIAkJX191aW50OF90IG5hbWVsZW47CS8qIGFjdHVhbCBsZW5ndGggb2YgbmFtZSAobm8gTlVMTCkgKi8KQEAgLTY2LDggKzY2LDggQEAKICNkZWZpbmUgWEZTX0FUVFJfU0ZfTkVYVEVOVFJZKHNmZXApCQkvKiBuZXh0IGVudHJ5IGluIHN0cnVjdCAqLyBcCiAJKCh4ZnNfYXR0cl9zZl9lbnRyeV90ICopKChjaGFyICopKHNmZXApICsgWEZTX0FUVFJfU0ZfRU5UU0laRShzZmVwKSkpCiAjZGVmaW5lIFhGU19BVFRSX1NGX1RPVFNJWkUoZHApCQkJLyogdG90YWwgc3BhY2UgaW4gdXNlICovIFwKLQkoSU5UX0dFVCgoKHhmc19hdHRyX3Nob3J0Zm9ybV90ICopCVwKLQkJKChkcCktPmlfYWZwLT5pZl91MS5pZl9kYXRhKSktPmhkci50b3RzaXplLCBBUkNIX0NPTlZFUlQpKQorCShiZTE2X3RvX2NwdSgoKHhmc19hdHRyX3Nob3J0Zm9ybV90ICopCVwKKwkJKChkcCktPmlfYWZwLT5pZl91MS5pZl9kYXRhKSktPmhkci50b3RzaXplKSkKIAogI2lmIGRlZmluZWQoWEZTX0FUVFJfVFJBQ0UpCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCA3MDYyNWU1Li4yZDcwMmU0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtODksNyArODksNyBAQAogCWludAkJCSpmbGFncyk7CS8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KIAogLyoKLSAqIENhbGxlZCBieSB4ZnNfYm1hcGkgdG8gdXBkYXRlIGV4dGVudCBsaXN0IHN0cnVjdHVyZSBhbmQgdGhlIGJ0cmVlCisgKiBDYWxsZWQgYnkgeGZzX2JtYXBpIHRvIHVwZGF0ZSBmaWxlIGV4dGVudCByZWNvcmRzIGFuZCB0aGUgYnRyZWUKICAqIGFmdGVyIGFsbG9jYXRpbmcgc3BhY2UgKG9yIGRvaW5nIGEgZGVsYXllZCBhbGxvY2F0aW9uKS4KICAqLwogU1RBVElDIGludAkJCQkvKiBlcnJvciAqLwpAQCAtOTcsNyArOTcsNyBAQAogCXhmc19pbm9kZV90CQkqaXAsCS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCiAJeGZzX2V4dG51bV90CQlpZHgsCS8qIGV4dGVudCBudW1iZXIgdG8gdXBkYXRlL2luc2VydCAqLwogCXhmc19idHJlZV9jdXJfdAkJKipjdXJwLAkvKiBpZiAqY3VycCBpcyBudWxsLCBub3QgYSBidHJlZSAqLwotCXhmc19ibWJ0X2lyZWNfdAkJKm5ldywJLyogbmV3IGRhdGEgdG8gcHV0IGluIGV4dGVudCBsaXN0ICovCisJeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBhZGQgdG8gZmlsZSBleHRlbnRzICovCiAJeGZzX2ZzYmxvY2tfdAkJKmZpcnN0LAkvKiBwb2ludGVyIHRvIGZpcnN0YmxvY2sgdmFyaWFibGUgKi8KIAl4ZnNfYm1hcF9mcmVlX3QJCSpmbGlzdCwJLyogbGlzdCBvZiBleHRlbnRzIHRvIGJlIGZyZWVkICovCiAJaW50CQkJKmxvZ2ZsYWdzcCwgLyogaW5vZGUgbG9nZ2luZyBmbGFncyAqLwpAQCAtMTEzLDcgKzExMyw3IEBACiAJeGZzX2lub2RlX3QJCSppcCwJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KIAl4ZnNfZXh0bnVtX3QJCWlkeCwJLyogZXh0ZW50IG51bWJlciB0byB1cGRhdGUvaW5zZXJ0ICovCiAJeGZzX2J0cmVlX2N1cl90CQkqKmN1cnAsCS8qIGlmICpjdXJwIGlzIG51bGwsIG5vdCBhIGJ0cmVlICovCi0JeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBwdXQgaW4gZXh0ZW50IGxpc3QgKi8KKwl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAl4ZnNfZmlsYmxrc190CQkqZG5ldywJLyogbmV3IGRlbGF5ZWQtYWxsb2MgaW5kaXJlY3QgYmxvY2tzICovCiAJeGZzX2ZzYmxvY2tfdAkJKmZpcnN0LAkvKiBwb2ludGVyIHRvIGZpcnN0YmxvY2sgdmFyaWFibGUgKi8KIAl4ZnNfYm1hcF9mcmVlX3QJCSpmbGlzdCwJLyogbGlzdCBvZiBleHRlbnRzIHRvIGJlIGZyZWVkICovCkBAIC0xMjksNyArMTI5LDcgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwLAkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGlmIG51bGwsIG5vdCBhIGJ0cmVlICovCi0JeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBwdXQgaW4gZXh0ZW50IGxpc3QgKi8KKwl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KIAlpbnQJCQlyc3ZkKTsJLyogT0sgdG8gYWxsb2NhdGUgcmVzZXJ2ZWQgYmxvY2tzICovCiAKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXhmc19pbm9kZV90CQkqaXAsCS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCiAJeGZzX2V4dG51bV90CQlpZHgsCS8qIGV4dGVudCBudW1iZXIgdG8gdXBkYXRlL2luc2VydCAqLwogCXhmc19idHJlZV9jdXJfdAkJKmN1ciwJLyogaWYgbnVsbCwgbm90IGEgYnRyZWUgKi8KLQl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIHB1dCBpbiBleHRlbnQgbGlzdCAqLworCXhmc19ibWJ0X2lyZWNfdAkJKm5ldywJLyogbmV3IGRhdGEgdG8gYWRkIHRvIGZpbGUgZXh0ZW50cyAqLwogCWludAkJCSpsb2dmbGFnc3AsIC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KIAlpbnQJCQl3aGljaGZvcmspOyAvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwogCkBAIC0xNTUsNyArMTU1LDcgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwLAkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSoqY3VycCwJLyogaWYgKmN1cnAgaXMgbnVsbCwgbm90IGEgYnRyZWUgKi8KLQl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIHB1dCBpbiBleHRlbnQgbGlzdCAqLworCXhmc19ibWJ0X2lyZWNfdAkJKm5ldywJLyogbmV3IGRhdGEgdG8gYWRkIHRvIGZpbGUgZXh0ZW50cyAqLwogCWludAkJCSpsb2dmbGFnc3ApOyAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCiAKIC8qCkBAIC0xNjksNyArMTY5LDcgQEAKIC8qCiAgKiBUcmFuc2Zvcm0gYSBidHJlZSBmb3JtYXQgZmlsZSB3aXRoIG9ubHkgb25lIGxlYWYgbm9kZSwgd2hlcmUgdGhlCiAgKiBleHRlbnRzIGxpc3Qgd2lsbCBmaXQgaW4gdGhlIGlub2RlLCBpbnRvIGFuIGV4dGVudHMgZm9ybWF0IGZpbGUuCi0gKiBTaW5jZSB0aGUgZXh0ZW50IGxpc3QgaXMgYWxyZWFkeSBpbi1jb3JlLCBhbGwgd2UgaGF2ZSB0byBkbyBpcworICogU2luY2UgdGhlIGZpbGUgZXh0ZW50cyBhcmUgYWxyZWFkeSBpbi1jb3JlLCBhbGwgd2UgaGF2ZSB0byBkbyBpcwogICogZ2l2ZSB1cCB0aGUgc3BhY2UgZm9yIHRoZSBidHJlZSByb290IGFuZCBwaXRjaCB0aGUgbGVhZiBibG9jay4KICAqLwogU1RBVElDIGludAkJCQkvKiBlcnJvciAqLwpAQCAtMTkxLDcgKzE5MSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIENhbGxlZCBieSB4ZnNfYm1hcGkgdG8gdXBkYXRlIGV4dGVudCBsaXN0IHN0cnVjdHVyZSBhbmQgdGhlIGJ0cmVlCisgKiBDYWxsZWQgYnkgeGZzX2JtYXBpIHRvIHVwZGF0ZSBmaWxlIGV4dGVudCByZWNvcmRzIGFuZCB0aGUgYnRyZWUKICAqIGFmdGVyIHJlbW92aW5nIHNwYWNlIChvciB1bmRvaW5nIGEgZGVsYXllZCBhbGxvY2F0aW9uKS4KICAqLwogU1RBVElDIGludAkJCQkvKiBlcnJvciAqLwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJeGZzX2V4dG51bV90CQlpZHgsCS8qIGV4dGVudCBudW1iZXIgdG8gdXBkYXRlL2luc2VydCAqLwogCXhmc19ibWFwX2ZyZWVfdAkJKmZsaXN0LAkvKiBsaXN0IG9mIGV4dGVudHMgdG8gYmUgZnJlZWQgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGlmIG51bGwsIG5vdCBhIGJ0cmVlICovCi0JeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBwdXQgaW4gZXh0ZW50IGxpc3QgKi8KKwl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KIAlpbnQJCQl3aGljaGZvcmssIC8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiAJaW50CQkJcnN2ZCk7CSAvKiBPSyB0byBhbGxvY2F0ZSByZXNlcnZlZCBibG9ja3MgKi8KQEAgLTIxNywxOCArMjE3LDYgQEAKIAl4ZnNfYm1hcF9mcmVlX2l0ZW1fdAkqZnJlZSk7CS8qIGxpc3QgaXRlbSB0byBiZSBmcmVlZCAqLwogCiAvKgotICogUmVtb3ZlIGNvdW50IGVudHJpZXMgZnJvbSB0aGUgZXh0ZW50cyBhcnJheSBmb3IgaW5vZGUgImlwIiwgc3RhcnRpbmcKLSAqIGF0IGluZGV4ICJpZHgiLiAgQ29waWVzIHRoZSByZW1haW5pbmcgaXRlbXMgZG93biBvdmVyIHRoZSBkZWxldGVkIG9uZXMsCi0gKiBhbmQgZ2l2ZXMgYmFjayB0aGUgZXhjZXNzIG1lbW9yeS4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19ibWFwX2RlbGV0ZV9leGxpc3QoCi0JeGZzX2lub2RlX3QJKmlwLAkJLyogaW5jb2RlIGlub2RlIHBvaW50ZXIgKi8KLQl4ZnNfZXh0bnVtX3QJaWR4LAkJLyogc3RhcnRpbmcgZGVsZXRlIGluZGV4ICovCi0JeGZzX2V4dG51bV90CWNvdW50LAkJLyogY291bnQgb2YgaXRlbXMgdG8gZGVsZXRlICovCi0JaW50CQl3aGljaGZvcmspOwkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwotCi0vKgogICogQ29udmVydCBhbiBleHRlbnRzLWZvcm1hdCBmaWxlIGludG8gYSBidHJlZS1mb3JtYXQgZmlsZS4KICAqIFRoZSBuZXcgZmlsZSB3aWxsIGhhdmUgYSByb290IGJsb2NrIChpbiB0aGUgaW5vZGUpIGFuZCBhIHNpbmdsZSBjaGlsZCBibG9jay4KICAqLwpAQCAtMjQ0LDE4ICsyMzIsNiBAQAogCWludAkJCXdoaWNoZm9yayk7CS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiAKIC8qCi0gKiBJbnNlcnQgbmV3IGl0ZW0ocykgaW4gdGhlIGV4dGVudCBsaXN0IGZvciBpbm9kZSAiaXAiLgotICogQ291bnQgbmV3IGl0ZW1zIGFyZSBpbnNlcnRlZCBhdCBvZmZzZXQgaWR4LgotICovCi1TVEFUSUMgdm9pZAoteGZzX2JtYXBfaW5zZXJ0X2V4bGlzdCgKLQl4ZnNfaW5vZGVfdAkqaXAsCQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwotCXhmc19leHRudW1fdAlpZHgsCQkvKiBzdGFydGluZyBpbmRleCBvZiBuZXcgaXRlbXMgKi8KLQl4ZnNfZXh0bnVtX3QJY291bnQsCQkvKiBudW1iZXIgb2YgaW5zZXJ0ZWQgaXRlbXMgKi8KLQl4ZnNfYm1idF9pcmVjX3QJKm5ldywJCS8qIGl0ZW1zIHRvIGluc2VydCAqLwotCWludAkJd2hpY2hmb3JrKTsJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KLQotLyoKICAqIENvbnZlcnQgYSBsb2NhbCBmaWxlIHRvIGFuIGV4dGVudHMgZmlsZS4KICAqIFRoaXMgY29kZSBpcyBzb3J0IG9mIGJvZ3VzLCBzaW5jZSB0aGUgZmlsZSBkYXRhIG5lZWRzIHRvIGdldAogICogbG9nZ2VkIHNvIGl0IHdvbid0IGJlIGxvc3QuICBUaGUgYm1hcC1sZXZlbCBtYW5pcHVsYXRpb25zIGFyZSBvaywgdGhvdWdoLgpAQCAtMzE2LDcgKzI5Miw3IEBACiAJaW50CQl3aGljaGZvcmspOwkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwogCiAvKgotICogQWRkIGJtYXAgdHJhY2UgZW50cnkgcHJpb3IgdG8gYSBjYWxsIHRvIHhmc19ibWFwX2RlbGV0ZV9leGxpc3QuCisgKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBwcmlvciB0byBhIGNhbGwgdG8geGZzX2lleHRfcmVtb3ZlLgogICovCiBTVEFUSUMgdm9pZAogeGZzX2JtYXBfdHJhY2VfZGVsZXRlKApAQCAtMzI4LDcgKzMwNCw3IEBACiAJaW50CQl3aGljaGZvcmspOwkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwogCiAvKgotICogQWRkIGJtYXAgdHJhY2UgZW50cnkgcHJpb3IgdG8gYSBjYWxsIHRvIHhmc19ibWFwX2luc2VydF9leGxpc3QsIG9yCisgKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBwcmlvciB0byBhIGNhbGwgdG8geGZzX2lleHRfaW5zZXJ0LCBvcgogICogcmVhZGluZyBpbiB0aGUgZXh0ZW50cyBsaXN0IGZyb20gdGhlIGRpc2sgKGluIHRoZSBidHJlZSkuCiAgKi8KIFNUQVRJQyB2b2lkCkBAIC0zNDMsNyArMzE5LDcgQEAKIAlpbnQJCXdoaWNoZm9yayk7CS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiAKIC8qCi0gKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBhZnRlciB1cGRhdGluZyBhbiBleHRlbnQgbGlzdCBlbnRyeSBpbiBwbGFjZS4KKyAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IGFmdGVyIHVwZGF0aW5nIGFuIGV4dGVudCByZWNvcmQgaW4gcGxhY2UuCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZSgKQEAgLTM1NCw3ICszMzAsNyBAQAogCWludAkJd2hpY2hmb3JrKTsJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KIAogLyoKLSAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IHByaW9yIHRvIHVwZGF0aW5nIGFuIGV4dGVudCBsaXN0IGVudHJ5IGluIHBsYWNlLgorICogQWRkIGJtYXAgdHJhY2UgZW50cnkgcHJpb3IgdG8gdXBkYXRpbmcgYW4gZXh0ZW50IHJlY29yZCBpbiBwbGFjZS4KICAqLwogU1RBVElDIHZvaWQKIHhmc19ibWFwX3RyYWNlX3ByZV91cGRhdGUoCkBAIC00MTMsMTkgKzM4OSwyNCBAQAogeGZzX2JtYXBfY291bnRfdHJlZSgKIAl4ZnNfbW91bnRfdCAgICAgKm1wLAogCXhmc190cmFuc190ICAgICAqdHAsCisJeGZzX2lmb3JrX3QJKmlmcCwKIAl4ZnNfZnNibG9ja190ICAgYmxvY2tubywKIAlpbnQgICAgICAgICAgICAgbGV2ZWxpbiwKIAlpbnQJCSpjb3VudCk7CiAKIFNUQVRJQyBpbnQKIHhmc19ibWFwX2NvdW50X2xlYXZlcygKLQl4ZnNfYm1idF9yZWNfdAkJKmZycCwKKwl4ZnNfaWZvcmtfdAkJKmlmcCwKKwl4ZnNfZXh0bnVtX3QJCWlkeCwKIAlpbnQJCQludW1yZWNzLAogCWludAkJCSpjb3VudCk7CiAKIFNUQVRJQyBpbnQKIHhmc19ibWFwX2Rpc2tfY291bnRfbGVhdmVzKAotCXhmc19ibWJ0X3JlY190CQkqZnJwLAorCXhmc19pZm9ya190CQkqaWZwLAorCXhmc19tb3VudF90CQkqbXAsCisJeGZzX2V4dG51bV90CQlpZHgsCisJeGZzX2JtYnRfYmxvY2tfdAkqYmxvY2ssCiAJaW50CQkJbnVtcmVjcywKIAlpbnQJCQkqY291bnQpOwogCkBAIC01MzcsNyArNTE4LDcgQEAKIH0KIAogLyoKLSAqIENhbGxlZCBieSB4ZnNfYm1hcGkgdG8gdXBkYXRlIGV4dGVudCBsaXN0IHN0cnVjdHVyZSBhbmQgdGhlIGJ0cmVlCisgKiBDYWxsZWQgYnkgeGZzX2JtYXBpIHRvIHVwZGF0ZSBmaWxlIGV4dGVudCByZWNvcmRzIGFuZCB0aGUgYnRyZWUKICAqIGFmdGVyIGFsbG9jYXRpbmcgc3BhY2UgKG9yIGRvaW5nIGEgZGVsYXllZCBhbGxvY2F0aW9uKS4KICAqLwogU1RBVElDIGludAkJCQkvKiBlcnJvciAqLwpAQCAtNTQ1LDcgKzUyNiw3IEBACiAJeGZzX2lub2RlX3QJCSppcCwJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KIAl4ZnNfZXh0bnVtX3QJCWlkeCwJLyogZXh0ZW50IG51bWJlciB0byB1cGRhdGUvaW5zZXJ0ICovCiAJeGZzX2J0cmVlX2N1cl90CQkqKmN1cnAsCS8qIGlmICpjdXJwIGlzIG51bGwsIG5vdCBhIGJ0cmVlICovCi0JeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBwdXQgaW4gZXh0ZW50IGxpc3QgKi8KKwl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAl4ZnNfZnNibG9ja190CQkqZmlyc3QsCS8qIHBvaW50ZXIgdG8gZmlyc3RibG9jayB2YXJpYWJsZSAqLwogCXhmc19ibWFwX2ZyZWVfdAkJKmZsaXN0LAkvKiBsaXN0IG9mIGV4dGVudHMgdG8gYmUgZnJlZWQgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCkBAIC01NzgsNyArNTU5LDcgQEAKIAlpZiAobmV4dGVudHMgPT0gMCkgewogCQl4ZnNfYm1hcF90cmFjZV9pbnNlcnQoZm5hbWUsICJpbnNlcnQgZW1wdHkiLCBpcCwgMCwgMSwgbmV3LAogCQkJTlVMTCwgd2hpY2hmb3JrKTsKLQkJeGZzX2JtYXBfaW5zZXJ0X2V4bGlzdChpcCwgMCwgMSwgbmV3LCB3aGljaGZvcmspOworCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCAwLCAxLCBuZXcpOwogCQlBU1NFUlQoY3VyID09IE5VTEwpOwogCQlpZnAtPmlmX2xhc3RleCA9IDA7CiAJCWlmICghSVNOVUxMU1RBUlRCTE9DSyhuZXctPmJyX3N0YXJ0YmxvY2spKSB7CkBAIC02MTQsNyArNTk1LDcgQEAKIAkJLyoKIAkJICogR2V0IHRoZSByZWNvcmQgcmVmZXJyZWQgdG8gYnkgaWR4LgogCQkgKi8KLQkJeGZzX2JtYnRfZ2V0X2FsbCgmaWZwLT5pZl91MS5pZl9leHRlbnRzW2lkeF0sICZwcmV2KTsKKwkJeGZzX2JtYnRfZ2V0X2FsbCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KSwgJnByZXYpOwogCQkvKgogCQkgKiBJZiBpdCdzIGEgcmVhbCBhbGxvY2F0aW9uIHJlY29yZCwgYW5kIHRoZSBuZXcgYWxsb2NhdGlvbiBlbmRzCiAJCSAqIGFmdGVyIHRoZSBzdGFydCBvZiB0aGUgcmVmZXJyZWQgdG8gcmVjb3JkLCB0aGVuIHdlJ3JlIGZpbGxpbmcKQEAgLTcxNCwxNCArNjk1LDEzIEBACiAJeGZzX2lub2RlX3QJCSppcCwJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KIAl4ZnNfZXh0bnVtX3QJCWlkeCwJLyogZXh0ZW50IG51bWJlciB0byB1cGRhdGUvaW5zZXJ0ICovCiAJeGZzX2J0cmVlX2N1cl90CQkqKmN1cnAsCS8qIGlmICpjdXJwIGlzIG51bGwsIG5vdCBhIGJ0cmVlICovCi0JeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBwdXQgaW4gZXh0ZW50IGxpc3QgKi8KKwl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAl4ZnNfZmlsYmxrc190CQkqZG5ldywJLyogbmV3IGRlbGF5ZWQtYWxsb2MgaW5kaXJlY3QgYmxvY2tzICovCiAJeGZzX2ZzYmxvY2tfdAkJKmZpcnN0LAkvKiBwb2ludGVyIHRvIGZpcnN0YmxvY2sgdmFyaWFibGUgKi8KIAl4ZnNfYm1hcF9mcmVlX3QJCSpmbGlzdCwJLyogbGlzdCBvZiBleHRlbnRzIHRvIGJlIGZyZWVkICovCiAJaW50CQkJKmxvZ2ZsYWdzcCwgLyogaW5vZGUgbG9nZ2luZyBmbGFncyAqLwogCWludAkJCXJzdmQpCS8qIE9LIHRvIHVzZSByZXNlcnZlZCBkYXRhIGJsb2NrIGFsbG9jYXRpb24gKi8KIHsKLQl4ZnNfYm1idF9yZWNfdAkJKmJhc2U7CS8qIGJhc2Ugb2YgZXh0ZW50IGVudHJ5IGxpc3QgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXI7CS8qIGJ0cmVlIGN1cnNvciAqLwogCWludAkJCWRpZmY7CS8qIHRlbXAgdmFsdWUgKi8KIAl4ZnNfYm1idF9yZWNfdAkJKmVwOwkvKiBleHRlbnQgZW50cnkgZm9yIGlkeCAqLwpAQCAtNzMwLDYgKzcxMCw3IEBACiAJc3RhdGljIGNoYXIJCWZuYW1lW10gPSAieGZzX2JtYXBfYWRkX2V4dGVudF9kZWxheV9yZWFsIjsKICNlbmRpZgogCWludAkJCWk7CS8qIHRlbXAgc3RhdGUgKi8KKwl4ZnNfaWZvcmtfdAkJKmlmcDsJLyogaW5vZGUgZm9yayBwb2ludGVyICovCiAJeGZzX2ZpbGVvZmZfdAkJbmV3X2VuZG9mZjsJLyogZW5kIG9mZnNldCBvZiBuZXcgZW50cnkgKi8KIAl4ZnNfYm1idF9pcmVjX3QJCXJbM107CS8qIG5laWdoYm9yIGV4dGVudCBlbnRyaWVzICovCiAJCQkJCS8qIGxlZnQgaXMgMCwgcmlnaHQgaXMgMSwgcHJldiBpcyAyICovCkBAIC03NjMsOCArNzQ0LDggQEAKIAkgKiBTZXQgdXAgYSBidW5jaCBvZiB2YXJpYWJsZXMgdG8gbWFrZSB0aGUgdGVzdHMgc2ltcGxlci4KIAkgKi8KIAljdXIgPSAqY3VycDsKLQliYXNlID0gaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50czsKLQllcCA9ICZiYXNlW2lkeF07CisJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgWEZTX0RBVEFfRk9SSyk7CisJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KTsKIAl4ZnNfYm1idF9nZXRfYWxsKGVwLCAmUFJFVik7CiAJbmV3X2VuZG9mZiA9IG5ldy0+YnJfc3RhcnRvZmYgKyBuZXctPmJyX2Jsb2NrY291bnQ7CiAJQVNTRVJUKFBSRVYuYnJfc3RhcnRvZmYgPD0gbmV3LT5icl9zdGFydG9mZik7CkBAIC03ODEsNyArNzYyLDcgQEAKIAkgKiBEb24ndCBzZXQgY29udGlndW91cyBpZiB0aGUgY29tYmluZWQgZXh0ZW50IHdvdWxkIGJlIHRvbyBsYXJnZS4KIAkgKi8KIAlpZiAoU1RBVEVfU0VUX1RFU1QoTEVGVF9WQUxJRCwgaWR4ID4gMCkpIHsKLQkJeGZzX2JtYnRfZ2V0X2FsbChlcCAtIDEsICZMRUZUKTsKKwkJeGZzX2JtYnRfZ2V0X2FsbCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksICZMRUZUKTsKIAkJU1RBVEVfU0VUKExFRlRfREVMQVksIElTTlVMTFNUQVJUQkxPQ0soTEVGVC5icl9zdGFydGJsb2NrKSk7CiAJfQogCVNUQVRFX1NFVChMRUZUX0NPTlRJRywKQEAgLTc5OCw3ICs3NzksNyBAQAogCWlmIChTVEFURV9TRVRfVEVTVChSSUdIVF9WQUxJRCwKIAkJCWlkeCA8CiAJCQlpcC0+aV9kZi5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkgLSAxKSkgewotCQl4ZnNfYm1idF9nZXRfYWxsKGVwICsgMSwgJlJJR0hUKTsKKwkJeGZzX2JtYnRfZ2V0X2FsbCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4ICsgMSksICZSSUdIVCk7CiAJCVNUQVRFX1NFVChSSUdIVF9ERUxBWSwgSVNOVUxMU1RBUlRCTE9DSyhSSUdIVC5icl9zdGFydGJsb2NrKSk7CiAJfQogCVNUQVRFX1NFVChSSUdIVF9DT05USUcsCkBAIC04MjUsMTQgKzgwNiwxNCBAQAogCQkgKi8KIAkJeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZShmbmFtZSwgIkxGfFJGfExDfFJDIiwgaXAsIGlkeCAtIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAgLSAxLAorCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQlMRUZULmJyX2Jsb2NrY291bnQgKyBQUkVWLmJyX2Jsb2NrY291bnQgKwogCQkJUklHSFQuYnJfYmxvY2tjb3VudCk7CiAJCXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKGZuYW1lLCAiTEZ8UkZ8TEN8UkMiLCBpcCwgaWR4IC0gMSwKIAkJCVhGU19EQVRBX0ZPUkspOwogCQl4ZnNfYm1hcF90cmFjZV9kZWxldGUoZm5hbWUsICJMRnxSRnxMQ3xSQyIsIGlwLCBpZHgsIDIsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfZGVsZXRlX2V4bGlzdChpcCwgaWR4LCAyLCBYRlNfREFUQV9GT1JLKTsKKwkJeGZzX2lleHRfcmVtb3ZlKGlmcCwgaWR4LCAyKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cy0tOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC04NjcsMTQgKzg0OCwxNCBAQAogCQkgKi8KIAkJeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZShmbmFtZSwgIkxGfFJGfExDIiwgaXAsIGlkeCAtIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAgLSAxLAorCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQlMRUZULmJyX2Jsb2NrY291bnQgKyBQUkVWLmJyX2Jsb2NrY291bnQpOwogCQl4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZShmbmFtZSwgIkxGfFJGfExDIiwgaXAsIGlkeCAtIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKIAkJeGZzX2JtYXBfdHJhY2VfZGVsZXRlKGZuYW1lLCAiTEZ8UkZ8TEMiLCBpcCwgaWR4LCAxLAogCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCXhmc19ibWFwX2RlbGV0ZV9leGxpc3QoaXAsIGlkeCwgMSwgWEZTX0RBVEFfRk9SSyk7CisJCXhmc19pZXh0X3JlbW92ZShpZnAsIGlkeCwgMSk7CiAJCWlmIChjdXIgPT0gTlVMTCkKIAkJCXJ2YWwgPSBYRlNfSUxPR19ERVhUOwogCQllbHNlIHsKQEAgLTkwOCw3ICs4ODksNyBAQAogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHg7CiAJCXhmc19ibWFwX3RyYWNlX2RlbGV0ZShmbmFtZSwgIkxGfFJGfFJDIiwgaXAsIGlkeCArIDEsIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfZGVsZXRlX2V4bGlzdChpcCwgaWR4ICsgMSwgMSwgWEZTX0RBVEFfRk9SSyk7CisJCXhmc19pZXh0X3JlbW92ZShpZnAsIGlkeCArIDEsIDEpOwogCQlpZiAoY3VyID09IE5VTEwpCiAJCQlydmFsID0gWEZTX0lMT0dfREVYVDsKIAkJZWxzZSB7CkBAIC05NjQsNyArOTQ1LDcgQEAKIAkJICovCiAJCXhmc19ibWFwX3RyYWNlX3ByZV91cGRhdGUoZm5hbWUsICJMRnxMQyIsIGlwLCBpZHggLSAxLAogCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KGVwIC0gMSwKKwkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLAogCQkJTEVGVC5icl9ibG9ja2NvdW50ICsgbmV3LT5icl9ibG9ja2NvdW50KTsKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0b2ZmKGVwLAogCQkJUFJFVi5icl9zdGFydG9mZiArIG5ldy0+YnJfYmxvY2tjb3VudCk7CkBAIC0xMDEwLDcgKzk5MSw3IEBACiAJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KGVwLCB0ZW1wKTsKIAkJeGZzX2JtYXBfdHJhY2VfaW5zZXJ0KGZuYW1lLCAiTEYiLCBpcCwgaWR4LCAxLCBuZXcsIE5VTEwsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfaW5zZXJ0X2V4bGlzdChpcCwgaWR4LCAxLCBuZXcsIFhGU19EQVRBX0ZPUkspOworCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHgsIDEsIG5ldyk7CiAJCWlwLT5pX2RmLmlmX2xhc3RleCA9IGlkeDsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cysrOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC0xMDM5LDggKzEwMjAsNyBAQAogCQl0ZW1wID0gWEZTX0ZJTEJMS1NfTUlOKHhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcCksCiAJCQlTVEFSVEJMT0NLVkFMKFBSRVYuYnJfc3RhcnRibG9jaykgLQogCQkJKGN1ciA/IGN1ci0+YmNfcHJpdmF0ZS5iLmFsbG9jYXRlZCA6IDApKTsKLQkJYmFzZSA9IGlwLT5pX2RmLmlmX3UxLmlmX2V4dGVudHM7Ci0JCWVwID0gJmJhc2VbaWR4ICsgMV07CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCArIDEpOwogCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayhlcCwgTlVMTFNUQVJUQkxPQ0soKGludCl0ZW1wKSk7CiAJCXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKGZuYW1lLCAiTEYiLCBpcCwgaWR4ICsgMSwKIAkJCVhGU19EQVRBX0ZPUkspOwpAQCAtMTA1OCw3ICsxMDM4LDggQEAKIAkJeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZShmbmFtZSwgIlJGfFJDIiwgaXAsIGlkeCArIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwotCQl4ZnNfYm1idF9zZXRfYWxsZihlcCArIDEsIG5ldy0+YnJfc3RhcnRvZmYsIG5ldy0+YnJfc3RhcnRibG9jaywKKwkJeGZzX2JtYnRfc2V0X2FsbGYoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCArIDEpLAorCQkJbmV3LT5icl9zdGFydG9mZiwgbmV3LT5icl9zdGFydGJsb2NrLAogCQkJbmV3LT5icl9ibG9ja2NvdW50ICsgUklHSFQuYnJfYmxvY2tjb3VudCwKIAkJCVJJR0hULmJyX3N0YXRlKTsKIAkJeGZzX2JtYXBfdHJhY2VfcG9zdF91cGRhdGUoZm5hbWUsICJSRnxSQyIsIGlwLCBpZHggKyAxLApAQCAtMTA5OCw3ICsxMDc5LDcgQEAKIAkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwogCQl4ZnNfYm1hcF90cmFjZV9pbnNlcnQoZm5hbWUsICJSRiIsIGlwLCBpZHggKyAxLCAxLAogCQkJbmV3LCBOVUxMLCBYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfaW5zZXJ0X2V4bGlzdChpcCwgaWR4ICsgMSwgMSwgbmV3LCBYRlNfREFUQV9GT1JLKTsKKwkJeGZzX2lleHRfaW5zZXJ0KGlmcCwgaWR4ICsgMSwgMSwgbmV3KTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4ICsgMTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cysrOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC0xMTI3LDggKzExMDgsNyBAQAogCQl0ZW1wID0gWEZTX0ZJTEJMS1NfTUlOKHhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcCksCiAJCQlTVEFSVEJMT0NLVkFMKFBSRVYuYnJfc3RhcnRibG9jaykgLQogCQkJKGN1ciA/IGN1ci0+YmNfcHJpdmF0ZS5iLmFsbG9jYXRlZCA6IDApKTsKLQkJYmFzZSA9IGlwLT5pX2RmLmlmX3UxLmlmX2V4dGVudHM7Ci0JCWVwID0gJmJhc2VbaWR4XTsKKwkJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KTsKIAkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAsIE5VTExTVEFSVEJMT0NLKChpbnQpdGVtcCkpOwogCQl4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZShmbmFtZSwgIlJGIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CiAJCSpkbmV3ID0gdGVtcDsKQEAgLTExNDksNyArMTEyOSw3IEBACiAJCXJbMV0uYnJfYmxvY2tjb3VudCA9IHRlbXAyOwogCQl4ZnNfYm1hcF90cmFjZV9pbnNlcnQoZm5hbWUsICIwIiwgaXAsIGlkeCArIDEsIDIsICZyWzBdLCAmclsxXSwKIAkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfYm1hcF9pbnNlcnRfZXhsaXN0KGlwLCBpZHggKyAxLCAyLCAmclswXSwgWEZTX0RBVEFfRk9SSyk7CisJCXhmc19pZXh0X2luc2VydChpZnAsIGlkeCArIDEsIDIsICZyWzBdKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4ICsgMTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cysrOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC0xMjA0LDEzICsxMTg0LDEzIEBACiAJCQkJfQogCQkJfQogCQl9Ci0JCWJhc2UgPSBpcC0+aV9kZi5pZl91MS5pZl9leHRlbnRzOwotCQllcCA9ICZiYXNlW2lkeF07CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCk7CiAJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKGVwLCBOVUxMU1RBUlRCTE9DSygoaW50KXRlbXApKTsKIAkJeGZzX2JtYXBfdHJhY2VfcG9zdF91cGRhdGUoZm5hbWUsICIwIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CiAJCXhmc19ibWFwX3RyYWNlX3ByZV91cGRhdGUoZm5hbWUsICIwIiwgaXAsIGlkeCArIDIsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAgKyAyLCBOVUxMU1RBUlRCTE9DSygoaW50KXRlbXAyKSk7CisJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggKyAyKSwKKwkJCU5VTExTVEFSVEJMT0NLKChpbnQpdGVtcDIpKTsKIAkJeGZzX2JtYXBfdHJhY2VfcG9zdF91cGRhdGUoZm5hbWUsICIwIiwgaXAsIGlkeCArIDIsCiAJCQlYRlNfREFUQV9GT1JLKTsKIAkJKmRuZXcgPSB0ZW1wICsgdGVtcDI7CkBAIC0xMjU0LDEwICsxMjM0LDkgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwLAkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSoqY3VycCwJLyogaWYgKmN1cnAgaXMgbnVsbCwgbm90IGEgYnRyZWUgKi8KLQl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIHB1dCBpbiBleHRlbnQgbGlzdCAqLworCXhmc19ibWJ0X2lyZWNfdAkJKm5ldywJLyogbmV3IGRhdGEgdG8gYWRkIHRvIGZpbGUgZXh0ZW50cyAqLwogCWludAkJCSpsb2dmbGFnc3ApIC8qIGlub2RlIGxvZ2dpbmcgZmxhZ3MgKi8KIHsKLQl4ZnNfYm1idF9yZWNfdAkJKmJhc2U7CS8qIGJhc2Ugb2YgZXh0ZW50IGVudHJ5IGxpc3QgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXI7CS8qIGJ0cmVlIGN1cnNvciAqLwogCXhmc19ibWJ0X3JlY190CQkqZXA7CS8qIGV4dGVudCBlbnRyeSBmb3IgaWR4ICovCiAJaW50CQkJZXJyb3I7CS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLwpAQCAtMTI2NSw2ICsxMjQ0LDcgQEAKIAlzdGF0aWMgY2hhcgkJZm5hbWVbXSA9ICJ4ZnNfYm1hcF9hZGRfZXh0ZW50X3Vud3JpdHRlbl9yZWFsIjsKICNlbmRpZgogCWludAkJCWk7CS8qIHRlbXAgc3RhdGUgKi8KKwl4ZnNfaWZvcmtfdAkJKmlmcDsJLyogaW5vZGUgZm9yayBwb2ludGVyICovCiAJeGZzX2ZpbGVvZmZfdAkJbmV3X2VuZG9mZjsJLyogZW5kIG9mZnNldCBvZiBuZXcgZW50cnkgKi8KIAl4ZnNfZXhudHN0X3QJCW5ld2V4dDsJLyogbmV3IGV4dGVudCBzdGF0ZSAqLwogCXhmc19leG50c3RfdAkJb2xkZXh0OwkvKiBvbGQgZXh0ZW50IHN0YXRlICovCkBAIC0xMjk4LDggKzEyNzgsOCBAQAogCSAqLwogCWVycm9yID0gMDsKIAljdXIgPSAqY3VycDsKLQliYXNlID0gaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50czsKLQllcCA9ICZiYXNlW2lkeF07CisJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgWEZTX0RBVEFfRk9SSyk7CisJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KTsKIAl4ZnNfYm1idF9nZXRfYWxsKGVwLCAmUFJFVik7CiAJbmV3ZXh0ID0gbmV3LT5icl9zdGF0ZTsKIAlvbGRleHQgPSAobmV3ZXh0ID09IFhGU19FWFRfVU5XUklUVEVOKSA/CkBAIC0xMzIwLDcgKzEzMDAsNyBAQAogCSAqIERvbid0IHNldCBjb250aWd1b3VzIGlmIHRoZSBjb21iaW5lZCBleHRlbnQgd291bGQgYmUgdG9vIGxhcmdlLgogCSAqLwogCWlmIChTVEFURV9TRVRfVEVTVChMRUZUX1ZBTElELCBpZHggPiAwKSkgewotCQl4ZnNfYm1idF9nZXRfYWxsKGVwIC0gMSwgJkxFRlQpOworCQl4ZnNfYm1idF9nZXRfYWxsKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwgJkxFRlQpOwogCQlTVEFURV9TRVQoTEVGVF9ERUxBWSwgSVNOVUxMU1RBUlRCTE9DSyhMRUZULmJyX3N0YXJ0YmxvY2spKTsKIAl9CiAJU1RBVEVfU0VUKExFRlRfQ09OVElHLApAQCAtMTMzNyw3ICsxMzE3LDcgQEAKIAlpZiAoU1RBVEVfU0VUX1RFU1QoUklHSFRfVkFMSUQsCiAJCQlpZHggPAogCQkJaXAtPmlfZGYuaWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpIC0gMSkpIHsKLQkJeGZzX2JtYnRfZ2V0X2FsbChlcCArIDEsICZSSUdIVCk7CisJCXhmc19ibWJ0X2dldF9hbGwoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCArIDEpLCAmUklHSFQpOwogCQlTVEFURV9TRVQoUklHSFRfREVMQVksIElTTlVMTFNUQVJUQkxPQ0soUklHSFQuYnJfc3RhcnRibG9jaykpOwogCX0KIAlTVEFURV9TRVQoUklHSFRfQ09OVElHLApAQCAtMTM2MywxNCArMTM0MywxNCBAQAogCQkgKi8KIAkJeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZShmbmFtZSwgIkxGfFJGfExDfFJDIiwgaXAsIGlkeCAtIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAgLSAxLAorCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQlMRUZULmJyX2Jsb2NrY291bnQgKyBQUkVWLmJyX2Jsb2NrY291bnQgKwogCQkJUklHSFQuYnJfYmxvY2tjb3VudCk7CiAJCXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKGZuYW1lLCAiTEZ8UkZ8TEN8UkMiLCBpcCwgaWR4IC0gMSwKIAkJCVhGU19EQVRBX0ZPUkspOwogCQl4ZnNfYm1hcF90cmFjZV9kZWxldGUoZm5hbWUsICJMRnxSRnxMQ3xSQyIsIGlwLCBpZHgsIDIsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfZGVsZXRlX2V4bGlzdChpcCwgaWR4LCAyLCBYRlNfREFUQV9GT1JLKTsKKwkJeGZzX2lleHRfcmVtb3ZlKGlmcCwgaWR4LCAyKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cyAtPSAyOwogCQlpZiAoY3VyID09IE5VTEwpCkBAIC0xNDA5LDE0ICsxMzg5LDE0IEBACiAJCSAqLwogCQl4ZnNfYm1hcF90cmFjZV9wcmVfdXBkYXRlKGZuYW1lLCAiTEZ8UkZ8TEMiLCBpcCwgaWR4IC0gMSwKIAkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCAtIDEsCisJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwKIAkJCUxFRlQuYnJfYmxvY2tjb3VudCArIFBSRVYuYnJfYmxvY2tjb3VudCk7CiAJCXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKGZuYW1lLCAiTEZ8UkZ8TEMiLCBpcCwgaWR4IC0gMSwKIAkJCVhGU19EQVRBX0ZPUkspOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggLSAxOwogCQl4ZnNfYm1hcF90cmFjZV9kZWxldGUoZm5hbWUsICJMRnxSRnxMQyIsIGlwLCBpZHgsIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfZGVsZXRlX2V4bGlzdChpcCwgaWR4LCAxLCBYRlNfREFUQV9GT1JLKTsKKwkJeGZzX2lleHRfcmVtb3ZlKGlmcCwgaWR4LCAxKTsKIAkJaXAtPmlfZC5kaV9uZXh0ZW50cy0tOwogCQlpZiAoY3VyID09IE5VTEwpCiAJCQlydmFsID0gWEZTX0lMT0dfQ09SRSB8IFhGU19JTE9HX0RFWFQ7CkBAIC0xNDU2LDcgKzE0MzYsNyBAQAogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHg7CiAJCXhmc19ibWFwX3RyYWNlX2RlbGV0ZShmbmFtZSwgIkxGfFJGfFJDIiwgaXAsIGlkeCArIDEsIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfZGVsZXRlX2V4bGlzdChpcCwgaWR4ICsgMSwgMSwgWEZTX0RBVEFfRk9SSyk7CisJCXhmc19pZXh0X3JlbW92ZShpZnAsIGlkeCArIDEsIDEpOwogCQlpcC0+aV9kLmRpX25leHRlbnRzLS07CiAJCWlmIChjdXIgPT0gTlVMTCkKIAkJCXJ2YWwgPSBYRlNfSUxPR19DT1JFIHwgWEZTX0lMT0dfREVYVDsKQEAgLTE1MTYsNyArMTQ5Niw3IEBACiAJCSAqLwogCQl4ZnNfYm1hcF90cmFjZV9wcmVfdXBkYXRlKGZuYW1lLCAiTEZ8TEMiLCBpcCwgaWR4IC0gMSwKIAkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCAtIDEsCisJCXhmc19ibWJ0X3NldF9ibG9ja2NvdW50KHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwKIAkJCUxFRlQuYnJfYmxvY2tjb3VudCArIG5ldy0+YnJfYmxvY2tjb3VudCk7CiAJCXhmc19ibWJ0X3NldF9zdGFydG9mZihlcCwKIAkJCVBSRVYuYnJfc3RhcnRvZmYgKyBuZXctPmJyX2Jsb2NrY291bnQpOwpAQCAtMTU3MSw3ICsxNTUxLDcgQEAKIAkJeGZzX2JtYXBfdHJhY2VfcG9zdF91cGRhdGUoZm5hbWUsICJMRiIsIGlwLCBpZHgsIFhGU19EQVRBX0ZPUkspOwogCQl4ZnNfYm1hcF90cmFjZV9pbnNlcnQoZm5hbWUsICJMRiIsIGlwLCBpZHgsIDEsIG5ldywgTlVMTCwKIAkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfYm1hcF9pbnNlcnRfZXhsaXN0KGlwLCBpZHgsIDEsIG5ldywgWEZTX0RBVEFfRk9SSyk7CisJCXhmc19pZXh0X2luc2VydChpZnAsIGlkeCwgMSwgbmV3KTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4OwogCQlpcC0+aV9kLmRpX25leHRlbnRzKys7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTE2MDksNyArMTU4OSw4IEBACiAJCQlQUkVWLmJyX2Jsb2NrY291bnQgLSBuZXctPmJyX2Jsb2NrY291bnQpOwogCQl4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZShmbmFtZSwgIlJGfFJDIiwgaXAsIGlkeCwKIAkJCVhGU19EQVRBX0ZPUkspOwotCQl4ZnNfYm1idF9zZXRfYWxsZihlcCArIDEsIG5ldy0+YnJfc3RhcnRvZmYsIG5ldy0+YnJfc3RhcnRibG9jaywKKwkJeGZzX2JtYnRfc2V0X2FsbGYoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCArIDEpLAorCQkJbmV3LT5icl9zdGFydG9mZiwgbmV3LT5icl9zdGFydGJsb2NrLAogCQkJbmV3LT5icl9ibG9ja2NvdW50ICsgUklHSFQuYnJfYmxvY2tjb3VudCwgbmV3ZXh0KTsKIAkJeGZzX2JtYXBfdHJhY2VfcG9zdF91cGRhdGUoZm5hbWUsICJSRnxSQyIsIGlwLCBpZHggKyAxLAogCQkJWEZTX0RBVEFfRk9SSyk7CkBAIC0xNjQ5LDcgKzE2MzAsNyBAQAogCQl4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZShmbmFtZSwgIlJGIiwgaXAsIGlkeCwgWEZTX0RBVEFfRk9SSyk7CiAJCXhmc19ibWFwX3RyYWNlX2luc2VydChmbmFtZSwgIlJGIiwgaXAsIGlkeCArIDEsIDEsCiAJCQluZXcsIE5VTEwsIFhGU19EQVRBX0ZPUkspOwotCQl4ZnNfYm1hcF9pbnNlcnRfZXhsaXN0KGlwLCBpZHggKyAxLCAxLCBuZXcsIFhGU19EQVRBX0ZPUkspOworCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHggKyAxLCAxLCBuZXcpOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggKyAxOwogCQlpcC0+aV9kLmRpX25leHRlbnRzKys7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTE2OTYsNyArMTY3Nyw3IEBACiAJCXJbMV0uYnJfc3RhdGUgPSBvbGRleHQ7CiAJCXhmc19ibWFwX3RyYWNlX2luc2VydChmbmFtZSwgIjAiLCBpcCwgaWR4ICsgMSwgMiwgJnJbMF0sICZyWzFdLAogCQkJWEZTX0RBVEFfRk9SSyk7Ci0JCXhmc19ibWFwX2luc2VydF9leGxpc3QoaXAsIGlkeCArIDEsIDIsICZyWzBdLCBYRlNfREFUQV9GT1JLKTsKKwkJeGZzX2lleHRfaW5zZXJ0KGlmcCwgaWR4ICsgMSwgMiwgJnJbMF0pOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggKyAxOwogCQlpcC0+aV9kLmRpX25leHRlbnRzICs9IDI7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTE3NzAsMTUgKzE3NTEsMTUgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwLAkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGlmIG51bGwsIG5vdCBhIGJ0cmVlICovCi0JeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBwdXQgaW4gZXh0ZW50IGxpc3QgKi8KKwl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCiAJaW50CQkJcnN2ZCkJCS8qIE9LIHRvIGFsbG9jYXRlIHJlc2VydmVkIGJsb2NrcyAqLwogewotCXhmc19ibWJ0X3JlY190CQkqYmFzZTsJLyogYmFzZSBvZiBleHRlbnQgZW50cnkgbGlzdCAqLwotCXhmc19ibWJ0X3JlY190CQkqZXA7CS8qIGV4dGVudCBsaXN0IGVudHJ5IGZvciBpZHggKi8KKwl4ZnNfYm1idF9yZWNfdAkJKmVwOwkvKiBleHRlbnQgcmVjb3JkIGZvciBpZHggKi8KICNpZmRlZiBYRlNfQk1BUF9UUkFDRQogCXN0YXRpYyBjaGFyCQlmbmFtZVtdID0gInhmc19ibWFwX2FkZF9leHRlbnRfaG9sZV9kZWxheSI7CiAjZW5kaWYKKwl4ZnNfaWZvcmtfdAkJKmlmcDsJLyogaW5vZGUgZm9yayBwb2ludGVyICovCiAJeGZzX2JtYnRfaXJlY190CQlsZWZ0OwkvKiBsZWZ0IG5laWdoYm9yIGV4dGVudCBlbnRyeSAqLwogCXhmc19maWxibGtzX3QJCW5ld2xlbj0wOwkvKiBuZXcgaW5kaXJlY3Qgc2l6ZSAqLwogCXhmc19maWxibGtzX3QJCW9sZGxlbj0wOwkvKiBvbGQgaW5kaXJlY3Qgc2l6ZSAqLwpAQCAtMTc5OSwxNSArMTc4MCwxNSBAQAogCQkJCSAgICAgICAoKHN0YXRlICY9IH5NQVNLKGIpKSwgMCkpCiAjZGVmaW5lCVNXSVRDSF9TVEFURQkJKHN0YXRlICYgTUFTSzIoTEVGVF9DT05USUcsIFJJR0hUX0NPTlRJRykpCiAKLQliYXNlID0gaXAtPmlfZGYuaWZfdTEuaWZfZXh0ZW50czsKLQllcCA9ICZiYXNlW2lkeF07CisJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgWEZTX0RBVEFfRk9SSyk7CisJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4KTsKIAlzdGF0ZSA9IDA7CiAJQVNTRVJUKElTTlVMTFNUQVJUQkxPQ0sobmV3LT5icl9zdGFydGJsb2NrKSk7CiAJLyoKIAkgKiBDaGVjayBhbmQgc2V0IGZsYWdzIGlmIHRoaXMgc2VnbWVudCBoYXMgYSBsZWZ0IG5laWdoYm9yCiAJICovCiAJaWYgKFNUQVRFX1NFVF9URVNUKExFRlRfVkFMSUQsIGlkeCA+IDApKSB7Ci0JCXhmc19ibWJ0X2dldF9hbGwoZXAgLSAxLCAmbGVmdCk7CisJCXhmc19ibWJ0X2dldF9hbGwoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLCAmbGVmdCk7CiAJCVNUQVRFX1NFVChMRUZUX0RFTEFZLCBJU05VTExTVEFSVEJMT0NLKGxlZnQuYnJfc3RhcnRibG9jaykpOwogCX0KIAkvKgpAQCAtMTg0NCwyMyArMTgyNSwyNCBAQAogCQkvKgogCQkgKiBOZXcgYWxsb2NhdGlvbiBpcyBjb250aWd1b3VzIHdpdGggZGVsYXllZCBhbGxvY2F0aW9ucwogCQkgKiBvbiB0aGUgbGVmdCBhbmQgb24gdGhlIHJpZ2h0LgotCQkgKiBNZXJnZSBhbGwgdGhyZWUgaW50byBhIHNpbmdsZSBleHRlbnQgbGlzdCBlbnRyeS4KKwkJICogTWVyZ2UgYWxsIHRocmVlIGludG8gYSBzaW5nbGUgZXh0ZW50IHJlY29yZC4KIAkJICovCiAJCXRlbXAgPSBsZWZ0LmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgKwogCQkJcmlnaHQuYnJfYmxvY2tjb3VudDsKIAkJeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZShmbmFtZSwgIkxDfFJDIiwgaXAsIGlkeCAtIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAgLSAxLCB0ZW1wKTsKKwkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLCB0ZW1wKTsKIAkJb2xkbGVuID0gU1RBUlRCTE9DS1ZBTChsZWZ0LmJyX3N0YXJ0YmxvY2spICsKIAkJCVNUQVJUQkxPQ0tWQUwobmV3LT5icl9zdGFydGJsb2NrKSArCiAJCQlTVEFSVEJMT0NLVkFMKHJpZ2h0LmJyX3N0YXJ0YmxvY2spOwogCQluZXdsZW4gPSB4ZnNfYm1hcF93b3JzdF9pbmRsZW4oaXAsIHRlbXApOwotCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayhlcCAtIDEsIE5VTExTVEFSVEJMT0NLKChpbnQpbmV3bGVuKSk7CisJCXhmc19ibWJ0X3NldF9zdGFydGJsb2NrKHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggLSAxKSwKKwkJCU5VTExTVEFSVEJMT0NLKChpbnQpbmV3bGVuKSk7CiAJCXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKGZuYW1lLCAiTEN8UkMiLCBpcCwgaWR4IC0gMSwKIAkJCVhGU19EQVRBX0ZPUkspOwogCQl4ZnNfYm1hcF90cmFjZV9kZWxldGUoZm5hbWUsICJMQ3xSQyIsIGlwLCBpZHgsIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfZGVsZXRlX2V4bGlzdChpcCwgaWR4LCAxLCBYRlNfREFUQV9GT1JLKTsKKwkJeGZzX2lleHRfcmVtb3ZlKGlmcCwgaWR4LCAxKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKIAkJYnJlYWs7CiAKQEAgLTE4NzMsMTEgKzE4NTUsMTIgQEAKIAkJdGVtcCA9IGxlZnQuYnJfYmxvY2tjb3VudCArIG5ldy0+YnJfYmxvY2tjb3VudDsKIAkJeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZShmbmFtZSwgIkxDIiwgaXAsIGlkeCAtIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAgLSAxLCB0ZW1wKTsKKwkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLCB0ZW1wKTsKIAkJb2xkbGVuID0gU1RBUlRCTE9DS1ZBTChsZWZ0LmJyX3N0YXJ0YmxvY2spICsKIAkJCVNUQVJUQkxPQ0tWQUwobmV3LT5icl9zdGFydGJsb2NrKTsKIAkJbmV3bGVuID0geGZzX2JtYXBfd29yc3RfaW5kbGVuKGlwLCB0ZW1wKTsKLQkJeGZzX2JtYnRfc2V0X3N0YXJ0YmxvY2soZXAgLSAxLCBOVUxMU1RBUlRCTE9DSygoaW50KW5ld2xlbikpOworCQl4ZnNfYm1idF9zZXRfc3RhcnRibG9jayh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCisJCQlOVUxMU1RBUlRCTE9DSygoaW50KW5ld2xlbikpOwogCQl4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZShmbmFtZSwgIkxDIiwgaXAsIGlkeCAtIDEsCiAJCQlYRlNfREFUQV9GT1JLKTsKIAkJaXAtPmlfZGYuaWZfbGFzdGV4ID0gaWR4IC0gMTsKQEAgLTE5MDksNyArMTg5Miw3IEBACiAJCW9sZGxlbiA9IG5ld2xlbiA9IDA7CiAJCXhmc19ibWFwX3RyYWNlX2luc2VydChmbmFtZSwgIjAiLCBpcCwgaWR4LCAxLCBuZXcsIE5VTEwsCiAJCQlYRlNfREFUQV9GT1JLKTsKLQkJeGZzX2JtYXBfaW5zZXJ0X2V4bGlzdChpcCwgaWR4LCAxLCBuZXcsIFhGU19EQVRBX0ZPUkspOworCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHgsIDEsIG5ldyk7CiAJCWlwLT5pX2RmLmlmX2xhc3RleCA9IGlkeDsKIAkJYnJlYWs7CiAJfQpAQCAtMTk0MCw3ICsxOTIzLDcgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwLAkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAkJaWR4LAkvKiBleHRlbnQgbnVtYmVyIHRvIHVwZGF0ZS9pbnNlcnQgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGlmIG51bGwsIG5vdCBhIGJ0cmVlICovCi0JeGZzX2JtYnRfaXJlY190CQkqbmV3LAkvKiBuZXcgZGF0YSB0byBwdXQgaW4gZXh0ZW50IGxpc3QgKi8KKwl4ZnNfYm1idF9pcmVjX3QJCSpuZXcsCS8qIG5ldyBkYXRhIHRvIGFkZCB0byBmaWxlIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCiAJaW50CQkJd2hpY2hmb3JrKSAvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwogewpAQCAtMTk3MCwxMyArMTk1MywxMyBAQAogCiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKIAlBU1NFUlQoaWR4IDw9IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpKTsKLQllcCA9ICZpZnAtPmlmX3UxLmlmX2V4dGVudHNbaWR4XTsKKwllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpOwogCXN0YXRlID0gMDsKIAkvKgogCSAqIENoZWNrIGFuZCBzZXQgZmxhZ3MgaWYgdGhpcyBzZWdtZW50IGhhcyBhIGxlZnQgbmVpZ2hib3IuCiAJICovCiAJaWYgKFNUQVRFX1NFVF9URVNUKExFRlRfVkFMSUQsIGlkeCA+IDApKSB7Ci0JCXhmc19ibWJ0X2dldF9hbGwoZXAgLSAxLCAmbGVmdCk7CisJCXhmc19ibWJ0X2dldF9hbGwoeGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCAtIDEpLCAmbGVmdCk7CiAJCVNUQVRFX1NFVChMRUZUX0RFTEFZLCBJU05VTExTVEFSVEJMT0NLKGxlZnQuYnJfc3RhcnRibG9jaykpOwogCX0KIAkvKgpAQCAtMjAxOSwxOCArMjAwMiwxOCBAQAogCQkvKgogCQkgKiBOZXcgYWxsb2NhdGlvbiBpcyBjb250aWd1b3VzIHdpdGggcmVhbCBhbGxvY2F0aW9ucyBvbiB0aGUKIAkJICogbGVmdCBhbmQgb24gdGhlIHJpZ2h0LgotCQkgKiBNZXJnZSBhbGwgdGhyZWUgaW50byBhIHNpbmdsZSBleHRlbnQgbGlzdCBlbnRyeS4KKwkJICogTWVyZ2UgYWxsIHRocmVlIGludG8gYSBzaW5nbGUgZXh0ZW50IHJlY29yZC4KIAkJICovCiAJCXhmc19ibWFwX3RyYWNlX3ByZV91cGRhdGUoZm5hbWUsICJMQ3xSQyIsIGlwLCBpZHggLSAxLAogCQkJd2hpY2hmb3JrKTsKLQkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAgLSAxLAorCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQlsZWZ0LmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQgKwogCQkJcmlnaHQuYnJfYmxvY2tjb3VudCk7CiAJCXhmc19ibWFwX3RyYWNlX3Bvc3RfdXBkYXRlKGZuYW1lLCAiTEN8UkMiLCBpcCwgaWR4IC0gMSwKIAkJCXdoaWNoZm9yayk7CiAJCXhmc19ibWFwX3RyYWNlX2RlbGV0ZShmbmFtZSwgIkxDfFJDIiwgaXAsCiAJCQlpZHgsIDEsIHdoaWNoZm9yayk7Ci0JCXhmc19ibWFwX2RlbGV0ZV9leGxpc3QoaXAsIGlkeCwgMSwgd2hpY2hmb3JrKTsKKwkJeGZzX2lleHRfcmVtb3ZlKGlmcCwgaWR4LCAxKTsKIAkJaWZwLT5pZl9sYXN0ZXggPSBpZHggLSAxOwogCQlYRlNfSUZPUktfTkVYVF9TRVQoaXAsIHdoaWNoZm9yaywKIAkJCVhGU19JRk9SS19ORVhURU5UUyhpcCwgd2hpY2hmb3JrKSAtIDEpOwpAQCAtMjA2Miw3ICsyMDQ1LDcgQEAKIAkJICogTWVyZ2UgdGhlIG5ldyBhbGxvY2F0aW9uIHdpdGggdGhlIGxlZnQgbmVpZ2hib3IuCiAJCSAqLwogCQl4ZnNfYm1hcF90cmFjZV9wcmVfdXBkYXRlKGZuYW1lLCAiTEMiLCBpcCwgaWR4IC0gMSwgd2hpY2hmb3JrKTsKLQkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAgLSAxLAorCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudCh4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaWR4IC0gMSksCiAJCQlsZWZ0LmJyX2Jsb2NrY291bnQgKyBuZXctPmJyX2Jsb2NrY291bnQpOwogCQl4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZShmbmFtZSwgIkxDIiwgaXAsIGlkeCAtIDEsIHdoaWNoZm9yayk7CiAJCWlmcC0+aWZfbGFzdGV4ID0gaWR4IC0gMTsKQEAgLTIxMTYsNyArMjA5OSw3IEBACiAJCSAqLwogCQl4ZnNfYm1hcF90cmFjZV9pbnNlcnQoZm5hbWUsICIwIiwgaXAsIGlkeCwgMSwgbmV3LCBOVUxMLAogCQkJd2hpY2hmb3JrKTsKLQkJeGZzX2JtYXBfaW5zZXJ0X2V4bGlzdChpcCwgaWR4LCAxLCBuZXcsIHdoaWNoZm9yayk7CisJCXhmc19pZXh0X2luc2VydChpZnAsIGlkeCwgMSwgbmV3KTsKIAkJaWZwLT5pZl9sYXN0ZXggPSBpZHg7CiAJCVhGU19JRk9SS19ORVhUX1NFVChpcCwgd2hpY2hmb3JrLAogCQkJWEZTX0lGT1JLX05FWFRFTlRTKGlwLCB3aGljaGZvcmspICsgMSk7CkBAIC0yMzExLDI1ICsyMjk0LDE1IEBACiAKICNkZWZpbmUgWEZTX0FMTE9DX0dBUF9VTklUUwk0CiAKLS8qCi0gKiB4ZnNfYm1hcF9hbGxvYyBpcyBjYWxsZWQgYnkgeGZzX2JtYXBpIHRvIGFsbG9jYXRlIGFuIGV4dGVudCBmb3IgYSBmaWxlLgotICogSXQgZmlndXJlcyBvdXQgd2hlcmUgdG8gYXNrIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRvciB0byBwdXQgdGhlIG5ldyBleHRlbnQuCi0gKi8KIFNUQVRJQyBpbnQKLXhmc19ibWFwX2FsbG9jKAoreGZzX2JtYXBfYWRqYWNlbnQoCiAJeGZzX2JtYWxsb2NhX3QJKmFwKQkJLyogYm1hcCBhbGxvYyBhcmd1bWVudCBzdHJ1Y3QgKi8KIHsKIAl4ZnNfZnNibG9ja190CWFkanVzdDsJCS8qIGFkanVzdG1lbnQgdG8gYmxvY2sgbnVtYmVycyAqLwotCXhmc19hbGxvY3R5cGVfdAlhdHlwZT0wOwkvKiB0eXBlIGZvciBhbGxvY2F0aW9uIHJvdXRpbmVzICovCi0JaW50CQllcnJvcjsJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLwogCXhmc19hZ251bWJlcl90CWZiX2Fnbm87CS8qIGFnIG51bWJlciBvZiBhcC0+Zmlyc3RibG9jayAqLwogCXhmc19tb3VudF90CSptcDsJCS8qIG1vdW50IHBvaW50IHN0cnVjdHVyZSAqLwogCWludAkJbnVsbGZiOwkJLyogdHJ1ZSBpZiBhcC0+Zmlyc3RibG9jayBpc24ndCBzZXQgKi8KIAlpbnQJCXJ0OwkJLyogdHJ1ZSBpZiBpbm9kZSBpcyByZWFsdGltZSAqLwotCXhmc19leHRsZW5fdAlwcm9kID0gMDsJLyogcHJvZHVjdCBmYWN0b3IgZm9yIGFsbG9jYXRvcnMgKi8KLQl4ZnNfZXh0bGVuX3QJcmFsZW4gPSAwOwkvKiByZWFsdGltZSBhbGxvY2F0aW9uIGxlbmd0aCAqLwotCXhmc19leHRsZW5fdAlhbGlnbjsJCS8qIG1pbmltdW0gYWxsb2NhdGlvbiBhbGlnbm1lbnQgKi8KLQl4ZnNfcnRibG9ja190CXJ0eDsKIAogI2RlZmluZQlJU1ZBTElEKHgseSkJXAogCShydCA/IFwKQEAgLTIzMzgsNzUgKzIzMTEsMTAgQEAKIAkJWEZTX0ZTQl9UT19BR05PKG1wLCB4KSA8IG1wLT5tX3NiLnNiX2FnY291bnQgJiYgXAogCQlYRlNfRlNCX1RPX0FHQk5PKG1wLCB4KSA8IG1wLT5tX3NiLnNiX2FnYmxvY2tzKQogCi0JLyoKLQkgKiBTZXQgdXAgdmFyaWFibGVzLgotCSAqLwogCW1wID0gYXAtPmlwLT5pX21vdW50OwogCW51bGxmYiA9IGFwLT5maXJzdGJsb2NrID09IE5VTExGU0JMT0NLOwogCXJ0ID0gWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGFwLT5pcCkgJiYgYXAtPnVzZXJkYXRhOwogCWZiX2Fnbm8gPSBudWxsZmIgPyBOVUxMQUdOVU1CRVIgOiBYRlNfRlNCX1RPX0FHTk8obXAsIGFwLT5maXJzdGJsb2NrKTsKLQlpZiAocnQpIHsKLQkJYWxpZ24gPSBhcC0+aXAtPmlfZC5kaV9leHRzaXplID8KLQkJCWFwLT5pcC0+aV9kLmRpX2V4dHNpemUgOiBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKLQkJLyogU2V0IHByb2QgdG8gbWF0Y2ggdGhlIGV4dGVudCBzaXplICovCi0JCXByb2QgPSBhbGlnbiAvIG1wLT5tX3NiLnNiX3JleHRzaXplOwotCi0JCWVycm9yID0geGZzX2JtYXBfZXh0c2l6ZV9hbGlnbihtcCwgYXAtPmdvdHAsIGFwLT5wcmV2cCwKLQkJCQkJCWFsaWduLCBydCwgYXAtPmVvZiwgMCwKLQkJCQkJCWFwLT5jb252LCAmYXAtPm9mZiwgJmFwLT5hbGVuKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCQlBU1NFUlQoYXAtPmFsZW4pOwotCQlBU1NFUlQoYXAtPmFsZW4gJSBtcC0+bV9zYi5zYl9yZXh0c2l6ZSA9PSAwKTsKLQotCQkvKgotCQkgKiBJZiB0aGUgb2Zmc2V0ICYgbGVuZ3RoIGFyZSBub3QgcGVyZmVjdGx5IGFsaWduZWQKLQkJICogdGhlbiBraWxsIHByb2QsIGl0IHdpbGwganVzdCBnZXQgdXMgaW4gdHJvdWJsZS4KLQkJICovCi0JCWlmIChkb19tb2QoYXAtPm9mZiwgYWxpZ24pIHx8IGFwLT5hbGVuICUgYWxpZ24pCi0JCQlwcm9kID0gMTsKLQkJLyoKLQkJICogU2V0IHJhbGVuIHRvIGJlIHRoZSBhY3R1YWwgcmVxdWVzdGVkIGxlbmd0aCBpbiBydGV4dGVudHMuCi0JCSAqLwotCQlyYWxlbiA9IGFwLT5hbGVuIC8gbXAtPm1fc2Iuc2JfcmV4dHNpemU7Ci0JCS8qCi0JCSAqIElmIHRoZSBvbGQgdmFsdWUgd2FzIGNsb3NlIGVub3VnaCB0byBNQVhFWFRMRU4gdGhhdAotCQkgKiB3ZSByb3VuZGVkIHVwIHRvIGl0LCBjdXQgaXQgYmFjayBzbyBpdCdzIHZhbGlkIGFnYWluLgotCQkgKiBOb3RlIHRoYXQgaWYgaXQncyBhIHJlYWxseSBsYXJnZSByZXF1ZXN0IChiaWdnZXIgdGhhbgotCQkgKiBNQVhFWFRMRU4pLCB3ZSBkb24ndCBoZWFyIGFib3V0IHRoYXQgbnVtYmVyLCBhbmQgY2FuJ3QKLQkJICogYWRqdXN0IHRoZSBzdGFydGluZyBwb2ludCB0byBtYXRjaCBpdC4KLQkJICovCi0JCWlmIChyYWxlbiAqIG1wLT5tX3NiLnNiX3JleHRzaXplID49IE1BWEVYVExFTikKLQkJCXJhbGVuID0gTUFYRVhUTEVOIC8gbXAtPm1fc2Iuc2JfcmV4dHNpemU7Ci0JCS8qCi0JCSAqIElmIGl0J3MgYW4gYWxsb2NhdGlvbiB0byBhbiBlbXB0eSBmaWxlIGF0IG9mZnNldCAwLAotCQkgKiBwaWNrIGFuIGV4dGVudCB0aGF0IHdpbGwgc3BhY2UgdGhpbmdzIG91dCBpbiB0aGUgcnQgYXJlYS4KLQkJICovCi0JCWlmIChhcC0+ZW9mICYmIGFwLT5vZmYgPT0gMCkgewotCQkJZXJyb3IgPSB4ZnNfcnRwaWNrX2V4dGVudChtcCwgYXAtPnRwLCByYWxlbiwgJnJ0eCk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIGVycm9yOwotCQkJYXAtPnJ2YWwgPSBydHggKiBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKLQkJfSBlbHNlCi0JCQlhcC0+cnZhbCA9IDA7Ci0JfSBlbHNlIHsKLQkJYWxpZ24gPSAoYXAtPnVzZXJkYXRhICYmIGFwLT5pcC0+aV9kLmRpX2V4dHNpemUgJiYKLQkJCShhcC0+aXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfRVhUU0laRSkpID8KLQkJCWFwLT5pcC0+aV9kLmRpX2V4dHNpemUgOiAwOwotCQlpZiAodW5saWtlbHkoYWxpZ24pKSB7Ci0JCQllcnJvciA9IHhmc19ibWFwX2V4dHNpemVfYWxpZ24obXAsIGFwLT5nb3RwLCBhcC0+cHJldnAsCi0JCQkJCQkJYWxpZ24sIHJ0LAotCQkJCQkJCWFwLT5lb2YsIDAsIGFwLT5jb252LAotCQkJCQkJCSZhcC0+b2ZmLCAmYXAtPmFsZW4pOwotCQkJQVNTRVJUKCFlcnJvcik7Ci0JCQlBU1NFUlQoYXAtPmFsZW4pOwotCQl9Ci0JCWlmIChudWxsZmIpCi0JCQlhcC0+cnZhbCA9IFhGU19JTk9fVE9fRlNCKG1wLCBhcC0+aXAtPmlfaW5vKTsKLQkJZWxzZQotCQkJYXAtPnJ2YWwgPSBhcC0+Zmlyc3RibG9jazsKLQl9Ci0KIAkvKgogCSAqIElmIGFsbG9jYXRpbmcgYXQgZW9mLCBhbmQgdGhlcmUncyBhIHByZXZpb3VzIHJlYWwgYmxvY2ssCiAJICogdHJ5IHRvIHVzZSBpdCdzIGxhc3QgYmxvY2sgYXMgb3VyIHN0YXJ0aW5nIHBvaW50LgpAQCAtMjUzMSwyODcgKzI0MzksMzg0IEBACiAJCWVsc2UgaWYgKGdvdGJubyAhPSBOVUxMRlNCTE9DSykKIAkJCWFwLT5ydmFsID0gZ290Ym5vOwogCX0KKyN1bmRlZiBJU1ZBTElECisJcmV0dXJuIDA7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19ibWFwX3J0YWxsb2MoCisJeGZzX2JtYWxsb2NhX3QJKmFwKQkJLyogYm1hcCBhbGxvYyBhcmd1bWVudCBzdHJ1Y3QgKi8KK3sKKwl4ZnNfYWxsb2N0eXBlX3QJYXR5cGUgPSAwOwkvKiB0eXBlIGZvciBhbGxvY2F0aW9uIHJvdXRpbmVzICovCisJaW50CQllcnJvcjsJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLworCXhmc19tb3VudF90CSptcDsJCS8qIG1vdW50IHBvaW50IHN0cnVjdHVyZSAqLworCXhmc19leHRsZW5fdAlwcm9kID0gMDsJLyogcHJvZHVjdCBmYWN0b3IgZm9yIGFsbG9jYXRvcnMgKi8KKwl4ZnNfZXh0bGVuX3QJcmFsZW4gPSAwOwkvKiByZWFsdGltZSBhbGxvY2F0aW9uIGxlbmd0aCAqLworCXhmc19leHRsZW5fdAlhbGlnbjsJCS8qIG1pbmltdW0gYWxsb2NhdGlvbiBhbGlnbm1lbnQgKi8KKwl4ZnNfcnRibG9ja190CXJ0eDsJCS8qIHJlYWx0aW1lIGV4dGVudCBudW1iZXIgKi8KKwl4ZnNfcnRibG9ja190CXJ0YjsKKworCW1wID0gYXAtPmlwLT5pX21vdW50OworCWFsaWduID0gYXAtPmlwLT5pX2QuZGlfZXh0c2l6ZSA/CisJCWFwLT5pcC0+aV9kLmRpX2V4dHNpemUgOiBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKKwlwcm9kID0gYWxpZ24gLyBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKKwllcnJvciA9IHhmc19ibWFwX2V4dHNpemVfYWxpZ24obXAsIGFwLT5nb3RwLCBhcC0+cHJldnAsCisJCQkJCWFsaWduLCAxLCBhcC0+ZW9mLCAwLAorCQkJCQlhcC0+Y29udiwgJmFwLT5vZmYsICZhcC0+YWxlbik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJQVNTRVJUKGFwLT5hbGVuKTsKKwlBU1NFUlQoYXAtPmFsZW4gJSBtcC0+bV9zYi5zYl9yZXh0c2l6ZSA9PSAwKTsKKworCS8qCisJICogSWYgdGhlIG9mZnNldCAmIGxlbmd0aCBhcmUgbm90IHBlcmZlY3RseSBhbGlnbmVkCisJICogdGhlbiBraWxsIHByb2QsIGl0IHdpbGwganVzdCBnZXQgdXMgaW4gdHJvdWJsZS4KKwkgKi8KKwlpZiAoZG9fbW9kKGFwLT5vZmYsIGFsaWduKSB8fCBhcC0+YWxlbiAlIGFsaWduKQorCQlwcm9kID0gMTsKKwkvKgorCSAqIFNldCByYWxlbiB0byBiZSB0aGUgYWN0dWFsIHJlcXVlc3RlZCBsZW5ndGggaW4gcnRleHRlbnRzLgorCSAqLworCXJhbGVuID0gYXAtPmFsZW4gLyBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKKwkvKgorCSAqIElmIHRoZSBvbGQgdmFsdWUgd2FzIGNsb3NlIGVub3VnaCB0byBNQVhFWFRMRU4gdGhhdAorCSAqIHdlIHJvdW5kZWQgdXAgdG8gaXQsIGN1dCBpdCBiYWNrIHNvIGl0J3MgdmFsaWQgYWdhaW4uCisJICogTm90ZSB0aGF0IGlmIGl0J3MgYSByZWFsbHkgbGFyZ2UgcmVxdWVzdCAoYmlnZ2VyIHRoYW4KKwkgKiBNQVhFWFRMRU4pLCB3ZSBkb24ndCBoZWFyIGFib3V0IHRoYXQgbnVtYmVyLCBhbmQgY2FuJ3QKKwkgKiBhZGp1c3QgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIG1hdGNoIGl0LgorCSAqLworCWlmIChyYWxlbiAqIG1wLT5tX3NiLnNiX3JleHRzaXplID49IE1BWEVYVExFTikKKwkJcmFsZW4gPSBNQVhFWFRMRU4gLyBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKKwkvKgorCSAqIElmIGl0J3MgYW4gYWxsb2NhdGlvbiB0byBhbiBlbXB0eSBmaWxlIGF0IG9mZnNldCAwLAorCSAqIHBpY2sgYW4gZXh0ZW50IHRoYXQgd2lsbCBzcGFjZSB0aGluZ3Mgb3V0IGluIHRoZSBydCBhcmVhLgorCSAqLworCWlmIChhcC0+ZW9mICYmIGFwLT5vZmYgPT0gMCkgeworCQllcnJvciA9IHhmc19ydHBpY2tfZXh0ZW50KG1wLCBhcC0+dHAsIHJhbGVuLCAmcnR4KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQlhcC0+cnZhbCA9IHJ0eCAqIG1wLT5tX3NiLnNiX3JleHRzaXplOworCX0gZWxzZSB7CisJCWFwLT5ydmFsID0gMDsKKwl9CisKKwl4ZnNfYm1hcF9hZGphY2VudChhcCk7CisKKwkvKgorCSAqIFJlYWx0aW1lIGFsbG9jYXRpb24sIGRvbmUgdGhyb3VnaCB4ZnNfcnRhbGxvY2F0ZV9leHRlbnQuCisJICovCisJYXR5cGUgPSBhcC0+cnZhbCA9PSAwID8gIFhGU19BTExPQ1RZUEVfQU5ZX0FHIDogWEZTX0FMTE9DVFlQRV9ORUFSX0JOTzsKKwlkb19kaXYoYXAtPnJ2YWwsIG1wLT5tX3NiLnNiX3JleHRzaXplKTsKKwlydGIgPSBhcC0+cnZhbDsKKwlhcC0+YWxlbiA9IHJhbGVuOworCWlmICgoZXJyb3IgPSB4ZnNfcnRhbGxvY2F0ZV9leHRlbnQoYXAtPnRwLCBhcC0+cnZhbCwgMSwgYXAtPmFsZW4sCisJCQkJJnJhbGVuLCBhdHlwZSwgYXAtPndhc2RlbCwgcHJvZCwgJnJ0YikpKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKHJ0YiA9PSBOVUxMRlNCTE9DSyAmJiBwcm9kID4gMSAmJgorCSAgICAoZXJyb3IgPSB4ZnNfcnRhbGxvY2F0ZV9leHRlbnQoYXAtPnRwLCBhcC0+cnZhbCwgMSwKKwkJCQkJICAgYXAtPmFsZW4sICZyYWxlbiwgYXR5cGUsCisJCQkJCSAgIGFwLT53YXNkZWwsIDEsICZydGIpKSkKKwkJcmV0dXJuIGVycm9yOworCWFwLT5ydmFsID0gcnRiOworCWlmIChhcC0+cnZhbCAhPSBOVUxMRlNCTE9DSykgeworCQlhcC0+cnZhbCAqPSBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKKwkJcmFsZW4gKj0gbXAtPm1fc2Iuc2JfcmV4dHNpemU7CisJCWFwLT5hbGVuID0gcmFsZW47CisJCWFwLT5pcC0+aV9kLmRpX25ibG9ja3MgKz0gcmFsZW47CisJCXhmc190cmFuc19sb2dfaW5vZGUoYXAtPnRwLCBhcC0+aXAsIFhGU19JTE9HX0NPUkUpOworCQlpZiAoYXAtPndhc2RlbCkKKwkJCWFwLT5pcC0+aV9kZWxheWVkX2Jsa3MgLT0gcmFsZW47CisJCS8qCisJCSAqIEFkanVzdCB0aGUgZGlzayBxdW90YSBhbHNvLiBUaGlzIHdhcyByZXNlcnZlZAorCQkgKiBlYXJsaWVyLgorCQkgKi8KKwkJWEZTX1RSQU5TX01PRF9EUVVPVF9CWUlOTyhtcCwgYXAtPnRwLCBhcC0+aXAsCisJCQlhcC0+d2FzZGVsID8gWEZTX1RSQU5TX0RRX0RFTFJUQkNPVU5UIDoKKwkJCQkJWEZTX1RSQU5TX0RRX1JUQkNPVU5ULCAobG9uZykgcmFsZW4pOworCX0gZWxzZSB7CisJCWFwLT5hbGVuID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19ibWFwX2J0YWxsb2MoCisJeGZzX2JtYWxsb2NhX3QJKmFwKQkJLyogYm1hcCBhbGxvYyBhcmd1bWVudCBzdHJ1Y3QgKi8KK3sKKwl4ZnNfbW91bnRfdAkqbXA7CQkvKiBtb3VudCBwb2ludCBzdHJ1Y3R1cmUgKi8KKwl4ZnNfYWxsb2N0eXBlX3QJYXR5cGUgPSAwOwkvKiB0eXBlIGZvciBhbGxvY2F0aW9uIHJvdXRpbmVzICovCisJeGZzX2V4dGxlbl90CWFsaWduOwkJLyogbWluaW11bSBhbGxvY2F0aW9uIGFsaWdubWVudCAqLworCXhmc19hZ251bWJlcl90CWFnOworCXhmc19hZ251bWJlcl90CWZiX2Fnbm87CS8qIGFnIG51bWJlciBvZiBhcC0+Zmlyc3RibG9jayAqLworCXhmc19hZ251bWJlcl90CXN0YXJ0YWc7CisJeGZzX2FsbG9jX2FyZ190CWFyZ3M7CisJeGZzX2V4dGxlbl90CWJsZW47CisJeGZzX2V4dGxlbl90CWRlbHRhOworCXhmc19leHRsZW5fdAlsb25nZXN0OworCXhmc19leHRsZW5fdAluZWVkOworCXhmc19leHRsZW5fdAluZXh0bWlubGVuID0gMDsKKwl4ZnNfcGVyYWdfdAkqcGFnOworCWludAkJbnVsbGZiOwkJLyogdHJ1ZSBpZiBhcC0+Zmlyc3RibG9jayBpc24ndCBzZXQgKi8KKwlpbnQJCWlzYWxpZ25lZDsKKwlpbnQJCW5vdGluaXQ7CisJaW50CQl0cnlhZ2FpbjsKKwlpbnQJCWVycm9yOworCisJbXAgPSBhcC0+aXAtPmlfbW91bnQ7CisJYWxpZ24gPSAoYXAtPnVzZXJkYXRhICYmIGFwLT5pcC0+aV9kLmRpX2V4dHNpemUgJiYKKwkJKGFwLT5pcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19FWFRTSVpFKSkgPworCQlhcC0+aXAtPmlfZC5kaV9leHRzaXplIDogMDsKKwlpZiAodW5saWtlbHkoYWxpZ24pKSB7CisJCWVycm9yID0geGZzX2JtYXBfZXh0c2l6ZV9hbGlnbihtcCwgYXAtPmdvdHAsIGFwLT5wcmV2cCwKKwkJCQkJCWFsaWduLCAwLCBhcC0+ZW9mLCAwLCBhcC0+Y29udiwKKwkJCQkJCSZhcC0+b2ZmLCAmYXAtPmFsZW4pOworCQlBU1NFUlQoIWVycm9yKTsKKwkJQVNTRVJUKGFwLT5hbGVuKTsKKwl9CisJbnVsbGZiID0gYXAtPmZpcnN0YmxvY2sgPT0gTlVMTEZTQkxPQ0s7CisJZmJfYWdubyA9IG51bGxmYiA/IE5VTExBR05VTUJFUiA6IFhGU19GU0JfVE9fQUdOTyhtcCwgYXAtPmZpcnN0YmxvY2spOworCWlmIChudWxsZmIpCisJCWFwLT5ydmFsID0gWEZTX0lOT19UT19GU0IobXAsIGFwLT5pcC0+aV9pbm8pOworCWVsc2UKKwkJYXAtPnJ2YWwgPSBhcC0+Zmlyc3RibG9jazsKKworCXhmc19ibWFwX2FkamFjZW50KGFwKTsKKwogCS8qCiAJICogSWYgYWxsb3dlZCwgdXNlIGFwLT5ydmFsOyBvdGhlcndpc2UgbXVzdCB1c2UgZmlyc3RibG9jayBzaW5jZQogCSAqIGl0J3MgaW4gdGhlIHJpZ2h0IGFsbG9jYXRpb24gZ3JvdXAuCiAJICovCi0JaWYgKG51bGxmYiB8fCBydCB8fCBYRlNfRlNCX1RPX0FHTk8obXAsIGFwLT5ydmFsKSA9PSBmYl9hZ25vKQorCWlmIChudWxsZmIgfHwgWEZTX0ZTQl9UT19BR05PKG1wLCBhcC0+cnZhbCkgPT0gZmJfYWdubykKIAkJOwogCWVsc2UKIAkJYXAtPnJ2YWwgPSBhcC0+Zmlyc3RibG9jazsKIAkvKgotCSAqIFJlYWx0aW1lIGFsbG9jYXRpb24sIGRvbmUgdGhyb3VnaCB4ZnNfcnRhbGxvY2F0ZV9leHRlbnQuCi0JICovCi0JaWYgKHJ0KSB7Ci0jaWZuZGVmIF9fS0VSTkVMX18KLQkJQVNTRVJUKDApOwotI2Vsc2UKLQkJeGZzX3J0YmxvY2tfdAlydGI7Ci0KLQkJYXR5cGUgPSBhcC0+cnZhbCA9PSAwID8KLQkJCVhGU19BTExPQ1RZUEVfQU5ZX0FHIDogWEZTX0FMTE9DVFlQRV9ORUFSX0JOTzsKLQkJZG9fZGl2KGFwLT5ydmFsLCBtcC0+bV9zYi5zYl9yZXh0c2l6ZSk7Ci0JCXJ0YiA9IGFwLT5ydmFsOwotCQlhcC0+YWxlbiA9IHJhbGVuOwotCQlpZiAoKGVycm9yID0geGZzX3J0YWxsb2NhdGVfZXh0ZW50KGFwLT50cCwgYXAtPnJ2YWwsIDEsIGFwLT5hbGVuLAotCQkJCSZyYWxlbiwgYXR5cGUsIGFwLT53YXNkZWwsIHByb2QsICZydGIpKSkKLQkJCXJldHVybiBlcnJvcjsKLQkJaWYgKHJ0YiA9PSBOVUxMRlNCTE9DSyAmJiBwcm9kID4gMSAmJgotCQkgICAgKGVycm9yID0geGZzX3J0YWxsb2NhdGVfZXh0ZW50KGFwLT50cCwgYXAtPnJ2YWwsIDEsCi0JCQkJCQkgICBhcC0+YWxlbiwgJnJhbGVuLCBhdHlwZSwKLQkJCQkJCSAgIGFwLT53YXNkZWwsIDEsICZydGIpKSkKLQkJCXJldHVybiBlcnJvcjsKLQkJYXAtPnJ2YWwgPSBydGI7Ci0JCWlmIChhcC0+cnZhbCAhPSBOVUxMRlNCTE9DSykgewotCQkJYXAtPnJ2YWwgKj0gbXAtPm1fc2Iuc2JfcmV4dHNpemU7Ci0JCQlyYWxlbiAqPSBtcC0+bV9zYi5zYl9yZXh0c2l6ZTsKLQkJCWFwLT5hbGVuID0gcmFsZW47Ci0JCQlhcC0+aXAtPmlfZC5kaV9uYmxvY2tzICs9IHJhbGVuOwotCQkJeGZzX3RyYW5zX2xvZ19pbm9kZShhcC0+dHAsIGFwLT5pcCwgWEZTX0lMT0dfQ09SRSk7Ci0JCQlpZiAoYXAtPndhc2RlbCkKLQkJCQlhcC0+aXAtPmlfZGVsYXllZF9ibGtzIC09IHJhbGVuOwotCQkJLyoKLQkJCSAqIEFkanVzdCB0aGUgZGlzayBxdW90YSBhbHNvLiBUaGlzIHdhcyByZXNlcnZlZAotCQkJICogZWFybGllci4KLQkJCSAqLwotCQkJWEZTX1RSQU5TX01PRF9EUVVPVF9CWUlOTyhtcCwgYXAtPnRwLCBhcC0+aXAsCi0JCQkJYXAtPndhc2RlbCA/IFhGU19UUkFOU19EUV9ERUxSVEJDT1VOVCA6Ci0JCQkJCQlYRlNfVFJBTlNfRFFfUlRCQ09VTlQsCi0JCQkJKGxvbmcpIHJhbGVuKTsKLQkJfSBlbHNlCi0JCQlhcC0+YWxlbiA9IDA7Ci0jZW5kaWYJLyogX19LRVJORUxfXyAqLwotCX0KLQkvKgogCSAqIE5vcm1hbCBhbGxvY2F0aW9uLCBkb25lIHRocm91Z2ggeGZzX2FsbG9jX3ZleHRlbnQuCiAJICovCi0JZWxzZSB7Ci0JCXhmc19hZ251bWJlcl90CWFnOwotCQl4ZnNfYWxsb2NfYXJnX3QJYXJnczsKLQkJeGZzX2V4dGxlbl90CWJsZW47Ci0JCXhmc19leHRsZW5fdAlkZWx0YTsKLQkJaW50CQlpc2FsaWduZWQ7Ci0JCXhmc19leHRsZW5fdAlsb25nZXN0OwotCQl4ZnNfZXh0bGVuX3QJbmVlZDsKLQkJeGZzX2V4dGxlbl90CW5leHRtaW5sZW49MDsKLQkJaW50CQlub3Rpbml0OwotCQl4ZnNfcGVyYWdfdAkqcGFnOwotCQl4ZnNfYWdudW1iZXJfdAlzdGFydGFnOwotCQlpbnQJCXRyeWFnYWluOwotCi0JCXRyeWFnYWluID0gaXNhbGlnbmVkID0gMDsKLQkJYXJncy50cCA9IGFwLT50cDsKLQkJYXJncy5tcCA9IG1wOwotCQlhcmdzLmZzYm5vID0gYXAtPnJ2YWw7Ci0JCWFyZ3MubWF4bGVuID0gTUlOKGFwLT5hbGVuLCBtcC0+bV9zYi5zYl9hZ2Jsb2Nrcyk7Ci0JCWJsZW4gPSAwOwotCQlpZiAobnVsbGZiKSB7Ci0JCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX1NUQVJUX0JOTzsKLQkJCWFyZ3MudG90YWwgPSBhcC0+dG90YWw7Ci0JCQkvKgotCQkJICogRmluZCB0aGUgbG9uZ2VzdCBhdmFpbGFibGUgc3BhY2UuCi0JCQkgKiBXZSdyZSBnb2luZyB0byB0cnkgZm9yIHRoZSB3aG9sZSBhbGxvY2F0aW9uIGF0IG9uY2UuCi0JCQkgKi8KLQkJCXN0YXJ0YWcgPSBhZyA9IFhGU19GU0JfVE9fQUdOTyhtcCwgYXJncy5mc2Jubyk7Ci0JCQlub3Rpbml0ID0gMDsKLQkJCWRvd25fcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJCXdoaWxlIChibGVuIDwgYXAtPmFsZW4pIHsKLQkJCQlwYWcgPSAmbXAtPm1fcGVyYWdbYWddOwotCQkJCWlmICghcGFnLT5wYWdmX2luaXQgJiYKLQkJCQkgICAgKGVycm9yID0geGZzX2FsbG9jX3BhZ2ZfaW5pdChtcCwgYXJncy50cCwKLQkJCQkJICAgIGFnLCBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSkpIHsKLQkJCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJCQkJcmV0dXJuIGVycm9yOwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIFNlZSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0Li4uCi0JCQkJICovCi0JCQkJaWYgKHBhZy0+cGFnZl9pbml0KSB7Ci0JCQkJCW5lZWQgPSBYRlNfTUlOX0ZSRUVMSVNUX1BBRyhwYWcsIG1wKTsKLQkJCQkJZGVsdGEgPSBuZWVkID4gcGFnLT5wYWdmX2ZsY291bnQgPwotCQkJCQkJbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50IDogMDsKLQkJCQkJbG9uZ2VzdCA9IChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKSA/Ci0JCQkJCQkocGFnLT5wYWdmX2xvbmdlc3QgLSBkZWx0YSkgOgotCQkJCQkJKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fAotCQkJCQkJIHBhZy0+cGFnZl9sb25nZXN0ID4gMCk7Ci0JCQkJCWlmIChibGVuIDwgbG9uZ2VzdCkKLQkJCQkJCWJsZW4gPSBsb25nZXN0OwotCQkJCX0gZWxzZQotCQkJCQlub3Rpbml0ID0gMTsKLQkJCQlpZiAoKythZyA9PSBtcC0+bV9zYi5zYl9hZ2NvdW50KQotCQkJCQlhZyA9IDA7Ci0JCQkJaWYgKGFnID09IHN0YXJ0YWcpCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJCS8qCi0JCQkgKiBTaW5jZSB0aGUgYWJvdmUgbG9vcCBkaWQgYSBCVUZfVFJZTE9DSywgaXQgaXMKLQkJCSAqIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgc3BhY2UgZm9yIHRoaXMgcmVxdWVzdC4KLQkJCSAqLwotCQkJaWYgKG5vdGluaXQgfHwgYmxlbiA8IGFwLT5taW5sZW4pCi0JCQkJYXJncy5taW5sZW4gPSBhcC0+bWlubGVuOwotCQkJLyoKLQkJCSAqIElmIHRoZSBiZXN0IHNlZW4gbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgcmVxdWVzdAotCQkJICogbGVuZ3RoLCB1c2UgdGhlIGJlc3QgYXMgdGhlIG1pbmltdW0uCi0JCQkgKi8KLQkJCWVsc2UgaWYgKGJsZW4gPCBhcC0+YWxlbikKLQkJCQlhcmdzLm1pbmxlbiA9IGJsZW47Ci0JCQkvKgotCQkJICogT3RoZXJ3aXNlIHdlJ3ZlIHNlZW4gYW4gZXh0ZW50IGFzIGJpZyBhcyBhbGVuLAotCQkJICogdXNlIHRoYXQgYXMgdGhlIG1pbmltdW0uCi0JCQkgKi8KLQkJCWVsc2UKLQkJCQlhcmdzLm1pbmxlbiA9IGFwLT5hbGVuOwotCQl9IGVsc2UgaWYgKGFwLT5sb3cpIHsKLQkJCWFyZ3MudHlwZSA9IFhGU19BTExPQ1RZUEVfRklSU1RfQUc7Ci0JCQlhcmdzLnRvdGFsID0gYXJncy5taW5sZW4gPSBhcC0+bWlubGVuOwotCQl9IGVsc2UgewotCQkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9ORUFSX0JOTzsKLQkJCWFyZ3MudG90YWwgPSBhcC0+dG90YWw7Ci0JCQlhcmdzLm1pbmxlbiA9IGFwLT5taW5sZW47Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGFwLT51c2VyZGF0YSAmJiBhcC0+aXAtPmlfZC5kaV9leHRzaXplICYmCi0JCQkgICAgKGFwLT5pcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19FWFRTSVpFKSkpIHsKLQkJCWFyZ3MucHJvZCA9IGFwLT5pcC0+aV9kLmRpX2V4dHNpemU7Ci0JCQlpZiAoKGFyZ3MubW9kID0gKHhmc19leHRsZW5fdClkb19tb2QoYXAtPm9mZiwgYXJncy5wcm9kKSkpCi0JCQkJYXJncy5tb2QgPSAoeGZzX2V4dGxlbl90KShhcmdzLnByb2QgLSBhcmdzLm1vZCk7Ci0JCX0gZWxzZSBpZiAodW5saWtlbHkobXAtPm1fc2Iuc2JfYmxvY2tzaXplID49IE5CUFApKSB7Ci0JCQlhcmdzLnByb2QgPSAxOwotCQkJYXJncy5tb2QgPSAwOwotCQl9IGVsc2UgewotCQkJYXJncy5wcm9kID0gTkJQUCA+PiBtcC0+bV9zYi5zYl9ibG9ja2xvZzsKLQkJCWlmICgoYXJncy5tb2QgPSAoeGZzX2V4dGxlbl90KShkb19tb2QoYXAtPm9mZiwgYXJncy5wcm9kKSkpKQotCQkJCWFyZ3MubW9kID0gKHhmc19leHRsZW5fdCkoYXJncy5wcm9kIC0gYXJncy5tb2QpOwotCQl9CisJdHJ5YWdhaW4gPSBpc2FsaWduZWQgPSAwOworCWFyZ3MudHAgPSBhcC0+dHA7CisJYXJncy5tcCA9IG1wOworCWFyZ3MuZnNibm8gPSBhcC0+cnZhbDsKKwlhcmdzLm1heGxlbiA9IE1JTihhcC0+YWxlbiwgbXAtPm1fc2Iuc2JfYWdibG9ja3MpOworCWJsZW4gPSAwOworCWlmIChudWxsZmIpIHsKKwkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9TVEFSVF9CTk87CisJCWFyZ3MudG90YWwgPSBhcC0+dG90YWw7CiAJCS8qCi0JCSAqIElmIHdlIGFyZSBub3QgbG93IG9uIGF2YWlsYWJsZSBkYXRhIGJsb2NrcywgYW5kIHRoZQotCQkgKiB1bmRlcmx5aW5nIGxvZ2ljYWwgdm9sdW1lIG1hbmFnZXIgaXMgYSBzdHJpcGUsIGFuZAotCQkgKiB0aGUgZmlsZSBvZmZzZXQgaXMgemVybyB0aGVuIHRyeSB0byBhbGxvY2F0ZSBkYXRhCi0JCSAqIGJsb2NrcyBvbiBzdHJpcGUgdW5pdCBib3VuZGFyeS4KLQkJICogTk9URTogYXAtPmFlb2YgaXMgb25seSBzZXQgaWYgdGhlIGFsbG9jYXRpb24gbGVuZ3RoCi0JCSAqIGlzID49IHRoZSBzdHJpcGUgdW5pdCBhbmQgdGhlIGFsbG9jYXRpb24gb2Zmc2V0IGlzCi0JCSAqIGF0IHRoZSBlbmQgb2YgZmlsZS4KKwkJICogRmluZCB0aGUgbG9uZ2VzdCBhdmFpbGFibGUgc3BhY2UuCisJCSAqIFdlJ3JlIGdvaW5nIHRvIHRyeSBmb3IgdGhlIHdob2xlIGFsbG9jYXRpb24gYXQgb25jZS4KIAkJICovCi0JCWlmICghYXAtPmxvdyAmJiBhcC0+YWVvZikgewotCQkJaWYgKCFhcC0+b2ZmKSB7Ci0JCQkJYXJncy5hbGlnbm1lbnQgPSBtcC0+bV9kYWxpZ247Ci0JCQkJYXR5cGUgPSBhcmdzLnR5cGU7Ci0JCQkJaXNhbGlnbmVkID0gMTsKLQkJCQkvKgotCQkJCSAqIEFkanVzdCBmb3IgYWxpZ25tZW50Ci0JCQkJICovCi0JCQkJaWYgKGJsZW4gPiBhcmdzLmFsaWdubWVudCAmJiBibGVuIDw9IGFwLT5hbGVuKQotCQkJCQlhcmdzLm1pbmxlbiA9IGJsZW4gLSBhcmdzLmFsaWdubWVudDsKLQkJCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogRmlyc3QgdHJ5IGFuIGV4YWN0IGJubyBhbGxvY2F0aW9uLgotCQkJCSAqIElmIGl0IGZhaWxzIHRoZW4gZG8gYSBuZWFyIG9yIHN0YXJ0IGJubwotCQkJCSAqIGFsbG9jYXRpb24gd2l0aCBhbGlnbm1lbnQgdHVybmVkIG9uLgotCQkJCSAqLwotCQkJCWF0eXBlID0gYXJncy50eXBlOwotCQkJCXRyeWFnYWluID0gMTsKLQkJCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX1RISVNfQk5POwotCQkJCWFyZ3MuYWxpZ25tZW50ID0gMTsKLQkJCQkvKgotCQkJCSAqIENvbXB1dGUgdGhlIG1pbmxlbithbGlnbm1lbnQgZm9yIHRoZQotCQkJCSAqIG5leHQgY2FzZS4gIFNldCBzbG9wIHNvIHRoYXQgdGhlIHZhbHVlCi0JCQkJICogb2YgbWlubGVuK2FsaWdubWVudCtzbG9wIGRvZXNuJ3QgZ28gdXAKLQkJCQkgKiBiZXR3ZWVuIHRoZSBjYWxscy4KLQkJCQkgKi8KLQkJCQlpZiAoYmxlbiA+IG1wLT5tX2RhbGlnbiAmJiBibGVuIDw9IGFwLT5hbGVuKQotCQkJCQluZXh0bWlubGVuID0gYmxlbiAtIG1wLT5tX2RhbGlnbjsKLQkJCQllbHNlCi0JCQkJCW5leHRtaW5sZW4gPSBhcmdzLm1pbmxlbjsKLQkJCQlpZiAobmV4dG1pbmxlbiArIG1wLT5tX2RhbGlnbiA+IGFyZ3MubWlubGVuICsgMSkKLQkJCQkJYXJncy5taW5hbGlnbnNsb3AgPQotCQkJCQkJbmV4dG1pbmxlbiArIG1wLT5tX2RhbGlnbiAtCi0JCQkJCQlhcmdzLm1pbmxlbiAtIDE7Ci0JCQkJZWxzZQotCQkJCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7CisJCXN0YXJ0YWcgPSBhZyA9IFhGU19GU0JfVE9fQUdOTyhtcCwgYXJncy5mc2Jubyk7CisJCW5vdGluaXQgPSAwOworCQlkb3duX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCXdoaWxlIChibGVuIDwgYXAtPmFsZW4pIHsKKwkJCXBhZyA9ICZtcC0+bV9wZXJhZ1thZ107CisJCQlpZiAoIXBhZy0+cGFnZl9pbml0ICYmCisJCQkgICAgKGVycm9yID0geGZzX2FsbG9jX3BhZ2ZfaW5pdChtcCwgYXJncy50cCwKKwkJCQkgICAgYWcsIFhGU19BTExPQ19GTEFHX1RSWUxPQ0spKSkgeworCQkJCXVwX3JlYWQoJm1wLT5tX3BlcmFnbG9jayk7CisJCQkJcmV0dXJuIGVycm9yOwogCQkJfQotCQl9IGVsc2UgewotCQkJYXJncy5hbGlnbm1lbnQgPSAxOwotCQkJYXJncy5taW5hbGlnbnNsb3AgPSAwOworCQkJLyoKKwkJCSAqIFNlZSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0Li4uCisJCQkgKi8KKwkJCWlmIChwYWctPnBhZ2ZfaW5pdCkgeworCQkJCW5lZWQgPSBYRlNfTUlOX0ZSRUVMSVNUX1BBRyhwYWcsIG1wKTsKKwkJCQlkZWx0YSA9IG5lZWQgPiBwYWctPnBhZ2ZfZmxjb3VudCA/CisJCQkJCW5lZWQgLSBwYWctPnBhZ2ZfZmxjb3VudCA6IDA7CisJCQkJbG9uZ2VzdCA9IChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKSA/CisJCQkJCShwYWctPnBhZ2ZfbG9uZ2VzdCAtIGRlbHRhKSA6CisJCQkJCShwYWctPnBhZ2ZfZmxjb3VudCA+IDAgfHwKKwkJCQkJIHBhZy0+cGFnZl9sb25nZXN0ID4gMCk7CisJCQkJaWYgKGJsZW4gPCBsb25nZXN0KQorCQkJCQlibGVuID0gbG9uZ2VzdDsKKwkJCX0gZWxzZQorCQkJCW5vdGluaXQgPSAxOworCQkJaWYgKCsrYWcgPT0gbXAtPm1fc2Iuc2JfYWdjb3VudCkKKwkJCQlhZyA9IDA7CisJCQlpZiAoYWcgPT0gc3RhcnRhZykKKwkJCQlicmVhazsKIAkJfQotCQlhcmdzLm1pbmxlZnQgPSBhcC0+bWlubGVmdDsKLQkJYXJncy53YXNkZWwgPSBhcC0+d2FzZGVsOwotCQlhcmdzLmlzZmwgPSAwOwotCQlhcmdzLnVzZXJkYXRhID0gYXAtPnVzZXJkYXRhOworCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOworCQkvKgorCQkgKiBTaW5jZSB0aGUgYWJvdmUgbG9vcCBkaWQgYSBCVUZfVFJZTE9DSywgaXQgaXMKKwkJICogcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3IgdGhpcyByZXF1ZXN0LgorCQkgKi8KKwkJaWYgKG5vdGluaXQgfHwgYmxlbiA8IGFwLT5taW5sZW4pCisJCQlhcmdzLm1pbmxlbiA9IGFwLT5taW5sZW47CisJCS8qCisJCSAqIElmIHRoZSBiZXN0IHNlZW4gbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgcmVxdWVzdAorCQkgKiBsZW5ndGgsIHVzZSB0aGUgYmVzdCBhcyB0aGUgbWluaW11bS4KKwkJICovCisJCWVsc2UgaWYgKGJsZW4gPCBhcC0+YWxlbikKKwkJCWFyZ3MubWlubGVuID0gYmxlbjsKKwkJLyoKKwkJICogT3RoZXJ3aXNlIHdlJ3ZlIHNlZW4gYW4gZXh0ZW50IGFzIGJpZyBhcyBhbGVuLAorCQkgKiB1c2UgdGhhdCBhcyB0aGUgbWluaW11bS4KKwkJICovCisJCWVsc2UKKwkJCWFyZ3MubWlubGVuID0gYXAtPmFsZW47CisJfSBlbHNlIGlmIChhcC0+bG93KSB7CisJCWFyZ3MudHlwZSA9IFhGU19BTExPQ1RZUEVfRklSU1RfQUc7CisJCWFyZ3MudG90YWwgPSBhcmdzLm1pbmxlbiA9IGFwLT5taW5sZW47CisJfSBlbHNlIHsKKwkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9ORUFSX0JOTzsKKwkJYXJncy50b3RhbCA9IGFwLT50b3RhbDsKKwkJYXJncy5taW5sZW4gPSBhcC0+bWlubGVuOworCX0KKwlpZiAodW5saWtlbHkoYXAtPnVzZXJkYXRhICYmIGFwLT5pcC0+aV9kLmRpX2V4dHNpemUgJiYKKwkJICAgIChhcC0+aXAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfRVhUU0laRSkpKSB7CisJCWFyZ3MucHJvZCA9IGFwLT5pcC0+aV9kLmRpX2V4dHNpemU7CisJCWlmICgoYXJncy5tb2QgPSAoeGZzX2V4dGxlbl90KWRvX21vZChhcC0+b2ZmLCBhcmdzLnByb2QpKSkKKwkJCWFyZ3MubW9kID0gKHhmc19leHRsZW5fdCkoYXJncy5wcm9kIC0gYXJncy5tb2QpOworCX0gZWxzZSBpZiAodW5saWtlbHkobXAtPm1fc2Iuc2JfYmxvY2tzaXplID49IE5CUFApKSB7CisJCWFyZ3MucHJvZCA9IDE7CisJCWFyZ3MubW9kID0gMDsKKwl9IGVsc2UgeworCQlhcmdzLnByb2QgPSBOQlBQID4+IG1wLT5tX3NiLnNiX2Jsb2NrbG9nOworCQlpZiAoKGFyZ3MubW9kID0gKHhmc19leHRsZW5fdCkoZG9fbW9kKGFwLT5vZmYsIGFyZ3MucHJvZCkpKSkKKwkJCWFyZ3MubW9kID0gKHhmc19leHRsZW5fdCkoYXJncy5wcm9kIC0gYXJncy5tb2QpOworCX0KKwkvKgorCSAqIElmIHdlIGFyZSBub3QgbG93IG9uIGF2YWlsYWJsZSBkYXRhIGJsb2NrcywgYW5kIHRoZQorCSAqIHVuZGVybHlpbmcgbG9naWNhbCB2b2x1bWUgbWFuYWdlciBpcyBhIHN0cmlwZSwgYW5kCisJICogdGhlIGZpbGUgb2Zmc2V0IGlzIHplcm8gdGhlbiB0cnkgdG8gYWxsb2NhdGUgZGF0YQorCSAqIGJsb2NrcyBvbiBzdHJpcGUgdW5pdCBib3VuZGFyeS4KKwkgKiBOT1RFOiBhcC0+YWVvZiBpcyBvbmx5IHNldCBpZiB0aGUgYWxsb2NhdGlvbiBsZW5ndGgKKwkgKiBpcyA+PSB0aGUgc3RyaXBlIHVuaXQgYW5kIHRoZSBhbGxvY2F0aW9uIG9mZnNldCBpcworCSAqIGF0IHRoZSBlbmQgb2YgZmlsZS4KKwkgKi8KKwlpZiAoIWFwLT5sb3cgJiYgYXAtPmFlb2YpIHsKKwkJaWYgKCFhcC0+b2ZmKSB7CisJCQlhcmdzLmFsaWdubWVudCA9IG1wLT5tX2RhbGlnbjsKKwkJCWF0eXBlID0gYXJncy50eXBlOworCQkJaXNhbGlnbmVkID0gMTsKKwkJCS8qCisJCQkgKiBBZGp1c3QgZm9yIGFsaWdubWVudAorCQkJICovCisJCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXAtPmFsZW4pCisJCQkJYXJncy5taW5sZW4gPSBibGVuIC0gYXJncy5hbGlnbm1lbnQ7CisJCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRmlyc3QgdHJ5IGFuIGV4YWN0IGJubyBhbGxvY2F0aW9uLgorCQkJICogSWYgaXQgZmFpbHMgdGhlbiBkbyBhIG5lYXIgb3Igc3RhcnQgYm5vCisJCQkgKiBhbGxvY2F0aW9uIHdpdGggYWxpZ25tZW50IHR1cm5lZCBvbi4KKwkJCSAqLworCQkJYXR5cGUgPSBhcmdzLnR5cGU7CisJCQl0cnlhZ2FpbiA9IDE7CisJCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX1RISVNfQk5POworCQkJYXJncy5hbGlnbm1lbnQgPSAxOworCQkJLyoKKwkJCSAqIENvbXB1dGUgdGhlIG1pbmxlbithbGlnbm1lbnQgZm9yIHRoZQorCQkJICogbmV4dCBjYXNlLiAgU2V0IHNsb3Agc28gdGhhdCB0aGUgdmFsdWUKKwkJCSAqIG9mIG1pbmxlbithbGlnbm1lbnQrc2xvcCBkb2Vzbid0IGdvIHVwCisJCQkgKiBiZXR3ZWVuIHRoZSBjYWxscy4KKwkJCSAqLworCQkJaWYgKGJsZW4gPiBtcC0+bV9kYWxpZ24gJiYgYmxlbiA8PSBhcC0+YWxlbikKKwkJCQluZXh0bWlubGVuID0gYmxlbiAtIG1wLT5tX2RhbGlnbjsKKwkJCWVsc2UKKwkJCQluZXh0bWlubGVuID0gYXJncy5taW5sZW47CisJCQlpZiAobmV4dG1pbmxlbiArIG1wLT5tX2RhbGlnbiA+IGFyZ3MubWlubGVuICsgMSkKKwkJCQlhcmdzLm1pbmFsaWduc2xvcCA9CisJCQkJCW5leHRtaW5sZW4gKyBtcC0+bV9kYWxpZ24gLQorCQkJCQlhcmdzLm1pbmxlbiAtIDE7CisJCQllbHNlCisJCQkJYXJncy5taW5hbGlnbnNsb3AgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJYXJncy5hbGlnbm1lbnQgPSAxOworCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7CisJfQorCWFyZ3MubWlubGVmdCA9IGFwLT5taW5sZWZ0OworCWFyZ3Mud2FzZGVsID0gYXAtPndhc2RlbDsKKwlhcmdzLmlzZmwgPSAwOworCWFyZ3MudXNlcmRhdGEgPSBhcC0+dXNlcmRhdGE7CisJaWYgKChlcnJvciA9IHhmc19hbGxvY192ZXh0ZW50KCZhcmdzKSkpCisJCXJldHVybiBlcnJvcjsKKwlpZiAodHJ5YWdhaW4gJiYgYXJncy5mc2JubyA9PSBOVUxMRlNCTE9DSykgeworCQkvKgorCQkgKiBFeGFjdCBhbGxvY2F0aW9uIGZhaWxlZC4gTm93IHRyeSB3aXRoIGFsaWdubWVudAorCQkgKiB0dXJuZWQgb24uCisJCSAqLworCQlhcmdzLnR5cGUgPSBhdHlwZTsKKwkJYXJncy5mc2JubyA9IGFwLT5ydmFsOworCQlhcmdzLmFsaWdubWVudCA9IG1wLT5tX2RhbGlnbjsKKwkJYXJncy5taW5sZW4gPSBuZXh0bWlubGVuOworCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7CisJCWlzYWxpZ25lZCA9IDE7CiAJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfdmV4dGVudCgmYXJncykpKQogCQkJcmV0dXJuIGVycm9yOwotCQlpZiAodHJ5YWdhaW4gJiYgYXJncy5mc2JubyA9PSBOVUxMRlNCTE9DSykgewotCQkJLyoKLQkJCSAqIEV4YWN0IGFsbG9jYXRpb24gZmFpbGVkLiBOb3cgdHJ5IHdpdGggYWxpZ25tZW50Ci0JCQkgKiB0dXJuZWQgb24uCi0JCQkgKi8KLQkJCWFyZ3MudHlwZSA9IGF0eXBlOwotCQkJYXJncy5mc2JubyA9IGFwLT5ydmFsOwotCQkJYXJncy5hbGlnbm1lbnQgPSBtcC0+bV9kYWxpZ247Ci0JCQlhcmdzLm1pbmxlbiA9IG5leHRtaW5sZW47Ci0JCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7Ci0JCQlpc2FsaWduZWQgPSAxOwotCQkJaWYgKChlcnJvciA9IHhmc19hbGxvY192ZXh0ZW50KCZhcmdzKSkpCi0JCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0JCWlmIChpc2FsaWduZWQgJiYgYXJncy5mc2JubyA9PSBOVUxMRlNCTE9DSykgewotCQkJLyoKLQkJCSAqIGFsbG9jYXRpb24gZmFpbGVkLCBzbyB0dXJuIG9mZiBhbGlnbm1lbnQgYW5kCi0JCQkgKiB0cnkgYWdhaW4uCi0JCQkgKi8KLQkJCWFyZ3MudHlwZSA9IGF0eXBlOwotCQkJYXJncy5mc2JubyA9IGFwLT5ydmFsOwotCQkJYXJncy5hbGlnbm1lbnQgPSAwOwotCQkJaWYgKChlcnJvciA9IHhmc19hbGxvY192ZXh0ZW50KCZhcmdzKSkpCi0JCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0JCWlmIChhcmdzLmZzYm5vID09IE5VTExGU0JMT0NLICYmIG51bGxmYiAmJgotCQkgICAgYXJncy5taW5sZW4gPiBhcC0+bWlubGVuKSB7Ci0JCQlhcmdzLm1pbmxlbiA9IGFwLT5taW5sZW47Ci0JCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX1NUQVJUX0JOTzsKLQkJCWFyZ3MuZnNibm8gPSBhcC0+cnZhbDsKLQkJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfdmV4dGVudCgmYXJncykpKQotCQkJCXJldHVybiBlcnJvcjsKLQkJfQotCQlpZiAoYXJncy5mc2JubyA9PSBOVUxMRlNCTE9DSyAmJiBudWxsZmIpIHsKLQkJCWFyZ3MuZnNibm8gPSAwOwotCQkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9GSVJTVF9BRzsKLQkJCWFyZ3MudG90YWwgPSBhcC0+bWlubGVuOwotCQkJYXJncy5taW5sZWZ0ID0gMDsKLQkJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfdmV4dGVudCgmYXJncykpKQotCQkJCXJldHVybiBlcnJvcjsKLQkJCWFwLT5sb3cgPSAxOwotCQl9Ci0JCWlmIChhcmdzLmZzYm5vICE9IE5VTExGU0JMT0NLKSB7Ci0JCQlhcC0+Zmlyc3RibG9jayA9IGFwLT5ydmFsID0gYXJncy5mc2JubzsKLQkJCUFTU0VSVChudWxsZmIgfHwgZmJfYWdubyA9PSBhcmdzLmFnbm8gfHwKLQkJCSAgICAgICAoYXAtPmxvdyAmJiBmYl9hZ25vIDwgYXJncy5hZ25vKSk7Ci0JCQlhcC0+YWxlbiA9IGFyZ3MubGVuOwotCQkJYXAtPmlwLT5pX2QuZGlfbmJsb2NrcyArPSBhcmdzLmxlbjsKLQkJCXhmc190cmFuc19sb2dfaW5vZGUoYXAtPnRwLCBhcC0+aXAsIFhGU19JTE9HX0NPUkUpOwotCQkJaWYgKGFwLT53YXNkZWwpCi0JCQkJYXAtPmlwLT5pX2RlbGF5ZWRfYmxrcyAtPSBhcmdzLmxlbjsKLQkJCS8qCi0JCQkgKiBBZGp1c3QgdGhlIGRpc2sgcXVvdGEgYWxzby4gVGhpcyB3YXMgcmVzZXJ2ZWQKLQkJCSAqIGVhcmxpZXIuCi0JCQkgKi8KLQkJCVhGU19UUkFOU19NT0RfRFFVT1RfQllJTk8obXAsIGFwLT50cCwgYXAtPmlwLAotCQkJCWFwLT53YXNkZWwgPyBYRlNfVFJBTlNfRFFfREVMQkNPVU5UIDoKLQkJCQkJCVhGU19UUkFOU19EUV9CQ09VTlQsCi0JCQkJKGxvbmcpIGFyZ3MubGVuKTsKLQkJfSBlbHNlIHsKLQkJCWFwLT5ydmFsID0gTlVMTEZTQkxPQ0s7Ci0JCQlhcC0+YWxlbiA9IDA7Ci0JCX0KKwl9CisJaWYgKGlzYWxpZ25lZCAmJiBhcmdzLmZzYm5vID09IE5VTExGU0JMT0NLKSB7CisJCS8qCisJCSAqIGFsbG9jYXRpb24gZmFpbGVkLCBzbyB0dXJuIG9mZiBhbGlnbm1lbnQgYW5kCisJCSAqIHRyeSBhZ2Fpbi4KKwkJICovCisJCWFyZ3MudHlwZSA9IGF0eXBlOworCQlhcmdzLmZzYm5vID0gYXAtPnJ2YWw7CisJCWFyZ3MuYWxpZ25tZW50ID0gMDsKKwkJaWYgKChlcnJvciA9IHhmc19hbGxvY192ZXh0ZW50KCZhcmdzKSkpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCWlmIChhcmdzLmZzYm5vID09IE5VTExGU0JMT0NLICYmIG51bGxmYiAmJgorCSAgICBhcmdzLm1pbmxlbiA+IGFwLT5taW5sZW4pIHsKKwkJYXJncy5taW5sZW4gPSBhcC0+bWlubGVuOworCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX1NUQVJUX0JOTzsKKwkJYXJncy5mc2JubyA9IGFwLT5ydmFsOworCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX3ZleHRlbnQoJmFyZ3MpKSkKKwkJCXJldHVybiBlcnJvcjsKKwl9CisJaWYgKGFyZ3MuZnNibm8gPT0gTlVMTEZTQkxPQ0sgJiYgbnVsbGZiKSB7CisJCWFyZ3MuZnNibm8gPSAwOworCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX0ZJUlNUX0FHOworCQlhcmdzLnRvdGFsID0gYXAtPm1pbmxlbjsKKwkJYXJncy5taW5sZWZ0ID0gMDsKKwkJaWYgKChlcnJvciA9IHhmc19hbGxvY192ZXh0ZW50KCZhcmdzKSkpCisJCQlyZXR1cm4gZXJyb3I7CisJCWFwLT5sb3cgPSAxOworCX0KKwlpZiAoYXJncy5mc2JubyAhPSBOVUxMRlNCTE9DSykgeworCQlhcC0+Zmlyc3RibG9jayA9IGFwLT5ydmFsID0gYXJncy5mc2JubzsKKwkJQVNTRVJUKG51bGxmYiB8fCBmYl9hZ25vID09IGFyZ3MuYWdubyB8fAorCQkgICAgICAgKGFwLT5sb3cgJiYgZmJfYWdubyA8IGFyZ3MuYWdubykpOworCQlhcC0+YWxlbiA9IGFyZ3MubGVuOworCQlhcC0+aXAtPmlfZC5kaV9uYmxvY2tzICs9IGFyZ3MubGVuOworCQl4ZnNfdHJhbnNfbG9nX2lub2RlKGFwLT50cCwgYXAtPmlwLCBYRlNfSUxPR19DT1JFKTsKKwkJaWYgKGFwLT53YXNkZWwpCisJCQlhcC0+aXAtPmlfZGVsYXllZF9ibGtzIC09IGFyZ3MubGVuOworCQkvKgorCQkgKiBBZGp1c3QgdGhlIGRpc2sgcXVvdGEgYWxzby4gVGhpcyB3YXMgcmVzZXJ2ZWQKKwkJICogZWFybGllci4KKwkJICovCisJCVhGU19UUkFOU19NT0RfRFFVT1RfQllJTk8obXAsIGFwLT50cCwgYXAtPmlwLAorCQkJYXAtPndhc2RlbCA/IFhGU19UUkFOU19EUV9ERUxCQ09VTlQgOgorCQkJCQlYRlNfVFJBTlNfRFFfQkNPVU5ULAorCQkJKGxvbmcpIGFyZ3MubGVuKTsKKwl9IGVsc2UgeworCQlhcC0+cnZhbCA9IE5VTExGU0JMT0NLOworCQlhcC0+YWxlbiA9IDA7CiAJfQogCXJldHVybiAwOwotI3VuZGVmCUlTVkFMSUQKK30KKworLyoKKyAqIHhmc19ibWFwX2FsbG9jIGlzIGNhbGxlZCBieSB4ZnNfYm1hcGkgdG8gYWxsb2NhdGUgYW4gZXh0ZW50IGZvciBhIGZpbGUuCisgKiBJdCBmaWd1cmVzIG91dCB3aGVyZSB0byBhc2sgdGhlIHVuZGVybHlpbmcgYWxsb2NhdG9yIHRvIHB1dCB0aGUgbmV3IGV4dGVudC4KKyAqLworU1RBVElDIGludAoreGZzX2JtYXBfYWxsb2MoCisJeGZzX2JtYWxsb2NhX3QJKmFwKQkJLyogYm1hcCBhbGxvYyBhcmd1bWVudCBzdHJ1Y3QgKi8KK3sKKwlpZiAoKGFwLT5pcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19SRUFMVElNRSkgJiYgYXAtPnVzZXJkYXRhKQorCQlyZXR1cm4geGZzX2JtYXBfcnRhbGxvYyhhcCk7CisJcmV0dXJuIHhmc19ibWFwX2J0YWxsb2MoYXApOwogfQogCiAvKgogICogVHJhbnNmb3JtIGEgYnRyZWUgZm9ybWF0IGZpbGUgd2l0aCBvbmx5IG9uZSBsZWFmIG5vZGUsIHdoZXJlIHRoZQogICogZXh0ZW50cyBsaXN0IHdpbGwgZml0IGluIHRoZSBpbm9kZSwgaW50byBhbiBleHRlbnRzIGZvcm1hdCBmaWxlLgotICogU2luY2UgdGhlIGV4dGVudCBsaXN0IGlzIGFscmVhZHkgaW4tY29yZSwgYWxsIHdlIGhhdmUgdG8gZG8gaXMKKyAqIFNpbmNlIHRoZSBmaWxlIGV4dGVudHMgYXJlIGFscmVhZHkgaW4tY29yZSwgYWxsIHdlIGhhdmUgdG8gZG8gaXMKICAqIGdpdmUgdXAgdGhlIHNwYWNlIGZvciB0aGUgYnRyZWUgcm9vdCBhbmQgcGl0Y2ggdGhlIGxlYWYgYmxvY2suCiAgKi8KIFNUQVRJQyBpbnQJCQkJLyogZXJyb3IgKi8KQEAgLTI4NjgsNyArMjg3Myw3IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgYnkgeGZzX2JtYXBpIHRvIHVwZGF0ZSBleHRlbnQgbGlzdCBzdHJ1Y3R1cmUgYW5kIHRoZSBidHJlZQorICogQ2FsbGVkIGJ5IHhmc19ibWFwaSB0byB1cGRhdGUgZmlsZSBleHRlbnQgcmVjb3JkcyBhbmQgdGhlIGJ0cmVlCiAgKiBhZnRlciByZW1vdmluZyBzcGFjZSAob3IgdW5kb2luZyBhIGRlbGF5ZWQgYWxsb2NhdGlvbikuCiAgKi8KIFNUQVRJQyBpbnQJCQkJLyogZXJyb3IgKi8KQEAgLTI4NzgsNyArMjg4Myw3IEBACiAJeGZzX2V4dG51bV90CQlpZHgsCS8qIGV4dGVudCBudW1iZXIgdG8gdXBkYXRlL2RlbGV0ZSAqLwogCXhmc19ibWFwX2ZyZWVfdAkJKmZsaXN0LAkvKiBsaXN0IG9mIGV4dGVudHMgdG8gYmUgZnJlZWQgKi8KIAl4ZnNfYnRyZWVfY3VyX3QJCSpjdXIsCS8qIGlmIG51bGwsIG5vdCBhIGJ0cmVlICovCi0JeGZzX2JtYnRfaXJlY190CQkqZGVsLAkvKiBkYXRhIHRvIHJlbW92ZSBmcm9tIGV4dGVudCBsaXN0ICovCisJeGZzX2JtYnRfaXJlY190CQkqZGVsLAkvKiBkYXRhIHRvIHJlbW92ZSBmcm9tIGV4dGVudHMgKi8KIAlpbnQJCQkqbG9nZmxhZ3NwLCAvKiBpbm9kZSBsb2dnaW5nIGZsYWdzICovCiAJaW50CQkJd2hpY2hmb3JrLCAvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwogCWludAkJCXJzdmQpCS8qIE9LIHRvIGFsbG9jYXRlIHJlc2VydmVkIGJsb2NrcyAqLwpAQCAtMjkwMyw3ICsyOTA4LDYgQEAKIAl4ZnNfZmlsYmxrc190CQluYmxrczsJLyogcXVvdGEvc2IgYmxvY2sgY291bnQgKi8KIAl4ZnNfYm1idF9pcmVjX3QJCW5ldzsJLyogbmV3IHJlY29yZCB0byBiZSBpbnNlcnRlZCAqLwogCS8qIFJFRkVSRU5DRUQgKi8KLQl4ZnNfZXh0bnVtX3QJCW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZXh0ZW50cyBpbiBsaXN0ICovCiAJdWludAkJCXFmaWVsZDsJLyogcXVvdGEgZmllbGQgdG8gdXBkYXRlICovCiAJeGZzX2ZpbGJsa3NfdAkJdGVtcDsJLyogZm9yIGluZGlyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMgKi8KIAl4ZnNfZmlsYmxrc190CQl0ZW1wMjsJLyogZm9yIGluZGlyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMgKi8KQEAgLTI5MTEsMTAgKzI5MTUsMTAgQEAKIAlYRlNfU1RBVFNfSU5DKHhzX2RlbF9leGxpc3QpOwogCW1wID0gaXAtPmlfbW91bnQ7CiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKLQluZXh0ZW50cyA9IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwotCUFTU0VSVChpZHggPj0gMCAmJiBpZHggPCBuZXh0ZW50cyk7CisJQVNTRVJUKChpZHggPj0gMCkgJiYgKGlkeCA8IGlmcC0+aWZfYnl0ZXMgLworCQkodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpKSk7CiAJQVNTRVJUKGRlbC0+YnJfYmxvY2tjb3VudCA+IDApOwotCWVwID0gJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tpZHhdOworCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCk7CiAJeGZzX2JtYnRfZ2V0X2FsbChlcCwgJmdvdCk7CiAJQVNTRVJUKGdvdC5icl9zdGFydG9mZiA8PSBkZWwtPmJyX3N0YXJ0b2ZmKTsKIAlkZWxfZW5kb2ZmID0gZGVsLT5icl9zdGFydG9mZiArIGRlbC0+YnJfYmxvY2tjb3VudDsKQEAgLTI5OTAsNyArMjk5NCw3IEBACiAJCSAqIE1hdGNoZXMgdGhlIHdob2xlIGV4dGVudC4gIERlbGV0ZSB0aGUgZW50cnkuCiAJCSAqLwogCQl4ZnNfYm1hcF90cmFjZV9kZWxldGUoZm5hbWUsICIzIiwgaXAsIGlkeCwgMSwgd2hpY2hmb3JrKTsKLQkJeGZzX2JtYXBfZGVsZXRlX2V4bGlzdChpcCwgaWR4LCAxLCB3aGljaGZvcmspOworCQl4ZnNfaWV4dF9yZW1vdmUoaWZwLCBpZHgsIDEpOwogCQlpZnAtPmlmX2xhc3RleCA9IGlkeDsKIAkJaWYgKGRlbGF5KQogCQkJYnJlYWs7CkBAIC0zMTYwLDcgKzMxNjQsNyBAQAogCQl4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZShmbmFtZSwgIjAiLCBpcCwgaWR4LCB3aGljaGZvcmspOwogCQl4ZnNfYm1hcF90cmFjZV9pbnNlcnQoZm5hbWUsICIwIiwgaXAsIGlkeCArIDEsIDEsICZuZXcsIE5VTEwsCiAJCQl3aGljaGZvcmspOwotCQl4ZnNfYm1hcF9pbnNlcnRfZXhsaXN0KGlwLCBpZHggKyAxLCAxLCAmbmV3LCB3aGljaGZvcmspOworCQl4ZnNfaWV4dF9pbnNlcnQoaWZwLCBpZHggKyAxLCAxLCAmbmV3KTsKIAkJaWZwLT5pZl9sYXN0ZXggPSBpZHggKyAxOwogCQlicmVhazsKIAl9CkBAIC0zMjEzLDMxICszMjE3LDYgQEAKIH0KIAogLyoKLSAqIFJlbW92ZSBjb3VudCBlbnRyaWVzIGZyb20gdGhlIGV4dGVudHMgYXJyYXkgZm9yIGlub2RlICJpcCIsIHN0YXJ0aW5nCi0gKiBhdCBpbmRleCAiaWR4Ii4gIENvcGllcyB0aGUgcmVtYWluaW5nIGl0ZW1zIGRvd24gb3ZlciB0aGUgZGVsZXRlZCBvbmVzLAotICogYW5kIGdpdmVzIGJhY2sgdGhlIGV4Y2VzcyBtZW1vcnkuCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfYm1hcF9kZWxldGVfZXhsaXN0KAotCXhmc19pbm9kZV90CSppcCwJCS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCi0JeGZzX2V4dG51bV90CWlkeCwJCS8qIHN0YXJ0aW5nIGRlbGV0ZSBpbmRleCAqLwotCXhmc19leHRudW1fdAljb3VudCwJCS8qIGNvdW50IG9mIGl0ZW1zIHRvIGRlbGV0ZSAqLwotCWludAkJd2hpY2hmb3JrKQkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwotewotCXhmc19ibWJ0X3JlY190CSpiYXNlOwkJLyogYmFzZSBvZiBleHRlbnQgbGlzdCAqLwotCXhmc19pZm9ya190CSppZnA7CQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KLQl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CS8qIG51bWJlciBvZiBleHRlbnRzIGluIGxpc3QgYWZ0ZXIgKi8KLQotCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7Ci0JQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRFTlRTKTsKLQliYXNlID0gaWZwLT5pZl91MS5pZl9leHRlbnRzOwotCW5leHRlbnRzID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkgLSBjb3VudDsKLQltZW1tb3ZlKCZiYXNlW2lkeF0sICZiYXNlW2lkeCArIGNvdW50XSwKLQkJKG5leHRlbnRzIC0gaWR4KSAqIHNpemVvZigqYmFzZSkpOwotCXhmc19pZXh0X3JlYWxsb2MoaXAsIC1jb3VudCwgd2hpY2hmb3JrKTsKLX0KLQotLyoKICAqIENvbnZlcnQgYW4gZXh0ZW50cy1mb3JtYXQgZmlsZSBpbnRvIGEgYnRyZWUtZm9ybWF0IGZpbGUuCiAgKiBUaGUgbmV3IGZpbGUgd2lsbCBoYXZlIGEgcm9vdCBibG9jayAoaW4gdGhlIGlub2RlKSBhbmQgYSBzaW5nbGUgY2hpbGQgYmxvY2suCiAgKi8KQEAgLTMyNTgsMTMgKzMyMzcsMTMgQEAKIAl4ZnNfYm1idF9yZWNfdAkJKmFycDsJCS8qIGNoaWxkIHJlY29yZCBwb2ludGVyICovCiAJeGZzX2JtYnRfYmxvY2tfdAkqYmxvY2s7CQkvKiBidHJlZSByb290IGJsb2NrICovCiAJeGZzX2J0cmVlX2N1cl90CQkqY3VyOwkJLyogYm1hcCBidHJlZSBjdXJzb3IgKi8KLQl4ZnNfYm1idF9yZWNfdAkJKmVwOwkJLyogZXh0ZW50IGxpc3QgcG9pbnRlciAqLworCXhmc19ibWJ0X3JlY190CQkqZXA7CQkvKiBleHRlbnQgcmVjb3JkIHBvaW50ZXIgKi8KIAlpbnQJCQllcnJvcjsJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLwotCXhmc19leHRudW1fdAkJaSwgY250OwkJLyogZXh0ZW50IGxpc3QgaW5kZXggKi8KKwl4ZnNfZXh0bnVtX3QJCWksIGNudDsJCS8qIGV4dGVudCByZWNvcmQgaW5kZXggKi8KIAl4ZnNfaWZvcmtfdAkJKmlmcDsJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLwogCXhmc19ibWJ0X2tleV90CQkqa3A7CQkvKiByb290IGJsb2NrIGtleSBwb2ludGVyICovCiAJeGZzX21vdW50X3QJCSptcDsJCS8qIG1vdW50IHN0cnVjdHVyZSAqLwotCXhmc19leHRudW1fdAkJbmV4dGVudHM7CS8qIGV4dGVudCBsaXN0IHNpemUgKi8KKwl4ZnNfZXh0bnVtX3QJCW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZmlsZSBleHRlbnRzICovCiAJeGZzX2JtYnRfcHRyX3QJCSpwcDsJCS8qIHJvb3QgYmxvY2sgYWRkcmVzcyBwb2ludGVyICovCiAKIAlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwpAQCAtMzM0Myw3ICszMzIyLDggQEAKIAlhYmxvY2stPmJiX3JpZ2h0c2liID0gY3B1X3RvX2JlNjQoTlVMTERGU0JOTyk7CiAJYXJwID0gWEZTX0JNQVBfUkVDX0lBRERSKGFibG9jaywgMSwgY3VyKTsKIAluZXh0ZW50cyA9IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwotCWZvciAoZXAgPSBpZnAtPmlmX3UxLmlmX2V4dGVudHMsIGNudCA9IGkgPSAwOyBpIDwgbmV4dGVudHM7IGkrKywgZXArKykgeworCWZvciAoY250ID0gaSA9IDA7IGkgPCBuZXh0ZW50czsgaSsrKSB7CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGkpOwogCQlpZiAoIUlTTlVMTFNUQVJUQkxPQ0soeGZzX2JtYnRfZ2V0X3N0YXJ0YmxvY2soZXApKSkgewogCQkJYXJwLT5sMCA9IElOVF9HRVQoZXAtPmwwLCBBUkNIX0NPTlZFUlQpOwogCQkJYXJwLT5sMSA9IElOVF9HRVQoZXAtPmwxLCBBUkNIX0NPTlZFUlQpOwpAQCAtMzM3MywzNCArMzM1Myw2IEBACiB9CiAKIC8qCi0gKiBJbnNlcnQgbmV3IGl0ZW0ocykgaW4gdGhlIGV4dGVudCBsaXN0IGZvciBpbm9kZSAiaXAiLgotICogQ291bnQgbmV3IGl0ZW1zIGFyZSBpbnNlcnRlZCBhdCBvZmZzZXQgaWR4LgotICovCi1TVEFUSUMgdm9pZAoteGZzX2JtYXBfaW5zZXJ0X2V4bGlzdCgKLQl4ZnNfaW5vZGVfdAkqaXAsCQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwotCXhmc19leHRudW1fdAlpZHgsCQkvKiBzdGFydGluZyBpbmRleCBvZiBuZXcgaXRlbXMgKi8KLQl4ZnNfZXh0bnVtX3QJY291bnQsCQkvKiBudW1iZXIgb2YgaW5zZXJ0ZWQgaXRlbXMgKi8KLQl4ZnNfYm1idF9pcmVjX3QJKm5ldywJCS8qIGl0ZW1zIHRvIGluc2VydCAqLwotCWludAkJd2hpY2hmb3JrKQkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwotewotCXhmc19ibWJ0X3JlY190CSpiYXNlOwkJLyogZXh0ZW50IGxpc3QgYmFzZSAqLwotCXhmc19pZm9ya190CSppZnA7CQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KLQl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CS8qIGV4dGVudCBsaXN0IHNpemUgKi8KLQl4ZnNfZXh0bnVtX3QJdG87CQkvKiBleHRlbnQgbGlzdCBpbmRleCAqLwotCi0JaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKLQlBU1NFUlQoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVEVOVFMpOwotCXhmc19pZXh0X3JlYWxsb2MoaXAsIGNvdW50LCB3aGljaGZvcmspOwotCWJhc2UgPSBpZnAtPmlmX3UxLmlmX2V4dGVudHM7Ci0JbmV4dGVudHMgPSBpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKLQltZW1tb3ZlKCZiYXNlW2lkeCArIGNvdW50XSwgJmJhc2VbaWR4XSwKLQkJKG5leHRlbnRzIC0gKGlkeCArIGNvdW50KSkgKiBzaXplb2YoKmJhc2UpKTsKLQlmb3IgKHRvID0gaWR4OyB0byA8IGlkeCArIGNvdW50OyB0bysrLCBuZXcrKykKLQkJeGZzX2JtYnRfc2V0X2FsbCgmYmFzZVt0b10sIG5ldyk7Ci19Ci0KLS8qCiAgKiBIZWxwZXIgcm91dGluZSB0byByZXNldCBpbm9kZSBkaV9mb3Jrb2ZmIGZpZWxkIHdoZW4gc3dpdGNoaW5nCiAgKiBhdHRyaWJ1dGUgZm9yayBmcm9tIGxvY2FsIHRvIGV4dGVudCBmb3JtYXQgLSB3ZSByZXNldCBpdCB3aGVyZQogICogcG9zc2libGUgdG8gbWFrZSBzcGFjZSBhdmFpbGFibGUgZm9yIGlubGluZSBkYXRhIGZvcmsgZXh0ZW50cy4KQEAgLTM0NTcsMTIgKzM0MDksMTMgQEAKIAllcnJvciA9IDA7CiAJaWYgKGlmcC0+aWZfYnl0ZXMpIHsKIAkJeGZzX2FsbG9jX2FyZ190CWFyZ3M7CS8qIGFsbG9jYXRpb24gYXJndW1lbnRzICovCi0JCXhmc19idWZfdAkqYnA7CS8qIGJ1ZmZlciBmb3IgZXh0ZW50IGxpc3QgYmxvY2sgKi8KLQkJeGZzX2JtYnRfcmVjX3QJKmVwOwkvKiBleHRlbnQgbGlzdCBwb2ludGVyICovCisJCXhmc19idWZfdAkqYnA7CS8qIGJ1ZmZlciBmb3IgZXh0ZW50IGJsb2NrICovCisJCXhmc19ibWJ0X3JlY190CSplcDsJLyogZXh0ZW50IHJlY29yZCBwb2ludGVyICovCiAKIAkJYXJncy50cCA9IHRwOwogCQlhcmdzLm1wID0gaXAtPmlfbW91bnQ7Ci0JCUFTU0VSVChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGSU5MSU5FKTsKKwkJQVNTRVJUKChpZnAtPmlmX2ZsYWdzICYKKwkJCShYRlNfSUZJTkxJTkV8WEZTX0lGRVhURU5UU3xYRlNfSUZFWFRJUkVDKSkgPT0gWEZTX0lGSU5MSU5FKTsKIAkJLyoKIAkJICogQWxsb2NhdGUgYSBibG9jay4gIFdlIGtub3cgd2UgbmVlZCBvbmx5IG9uZSwgc2luY2UgdGhlCiAJCSAqIGZpbGUgY3VycmVudGx5IGZpdHMgaW4gYW4gaW5vZGUuCkBAIC0zNDkyLDggKzM0NDUsOCBAQAogCQl4ZnNfdHJhbnNfbG9nX2J1Zih0cCwgYnAsIDAsIGlmcC0+aWZfYnl0ZXMgLSAxKTsKIAkJeGZzX2JtYXBfZm9ya29mZl9yZXNldChhcmdzLm1wLCBpcCwgd2hpY2hmb3JrKTsKIAkJeGZzX2lkYXRhX3JlYWxsb2MoaXAsIC1pZnAtPmlmX2J5dGVzLCB3aGljaGZvcmspOwotCQl4ZnNfaWV4dF9yZWFsbG9jKGlwLCAxLCB3aGljaGZvcmspOwotCQllcCA9IGlmcC0+aWZfdTEuaWZfZXh0ZW50czsKKwkJeGZzX2lleHRfYWRkKGlmcCwgMCwgMSk7CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIDApOwogCQl4ZnNfYm1idF9zZXRfYWxsZihlcCwgMCwgYXJncy5mc2JubywgMSwgWEZTX0VYVF9OT1JNKTsKIAkJeGZzX2JtYXBfdHJhY2VfcG9zdF91cGRhdGUoZm5hbWUsICJuZXciLCBpcCwgMCwgd2hpY2hmb3JrKTsKIAkJWEZTX0lGT1JLX05FWFRfU0VUKGlwLCB3aGljaGZvcmssIDEpOwpAQCAtMzUxOCw3ICszNDcxLDcgQEAKIHhmc19ibWFwX2RvX3NlYXJjaF9leHRlbnRzKAogCXhmc19ibWJ0X3JlY190CSpiYXNlLAkJLyogYmFzZSBvZiBleHRlbnQgbGlzdCAqLwogCXhmc19leHRudW1fdAlsYXN0eCwJCS8qIGxhc3QgZXh0ZW50IGluZGV4IHVzZWQgKi8KLQl4ZnNfZXh0bnVtX3QJbmV4dGVudHMsCS8qIGV4dGVudCBsaXN0IHNpemUgKi8KKwl4ZnNfZXh0bnVtX3QJbmV4dGVudHMsCS8qIG51bWJlciBvZiBmaWxlIGV4dGVudHMgKi8KIAl4ZnNfZmlsZW9mZl90CWJubywJCS8qIGJsb2NrIG51bWJlciBzZWFyY2hlZCBmb3IgKi8KIAlpbnQJCSplb2ZwLAkJLyogb3V0OiBlbmQgb2YgZmlsZSBmb3VuZCAqLwogCXhmc19leHRudW1fdAkqbGFzdHhwLAkvKiBvdXQ6IGxhc3QgZXh0ZW50IGluZGV4ICovCkBAIC0zNTY5LDkgKzM1MjIsOSBAQAogCQlnb3QuYnJfYmxvY2tjb3VudCA9IHhmc19ibWJ0X2dldF9ibG9ja2NvdW50KGVwKTsKIAkJKmVvZnAgPSAwOwogCX0gZWxzZSB7Ci0JCS8qIGJpbmFyeSBzZWFyY2ggdGhlIGV4dGVudHMgYXJyYXkgKi8KIAkJbG93ID0gMDsKIAkJaGlnaCA9IG5leHRlbnRzIC0gMTsKKwkJLyogYmluYXJ5IHNlYXJjaCB0aGUgZXh0ZW50cyBhcnJheSAqLwogCQl3aGlsZSAobG93IDw9IGhpZ2gpIHsKIAkJCVhGU19TVEFUU19JTkMoeHNfY21wX2V4bGlzdCk7CiAJCQlsYXN0eCA9IChsb3cgKyBoaWdoKSA+PiAxOwpAQCAtMzYyMiw2ICszNTc1LDU3IEBACiB9CiAKIC8qCisgKiBTZWFyY2ggdGhlIGV4dGVudCByZWNvcmRzIGZvciB0aGUgZW50cnkgY29udGFpbmluZyBibG9jayBibm8uCisgKiBJZiBibm8gbGllcyBpbiBhIGhvbGUsIHBvaW50IHRvIHRoZSBuZXh0IGVudHJ5LiAgSWYgYm5vIGxpZXMKKyAqIHBhc3QgZW9mLCAqZW9mcCB3aWxsIGJlIHNldCwgYW5kICpwcmV2cCB3aWxsIGNvbnRhaW4gdGhlIGxhc3QKKyAqIGVudHJ5IChudWxsIGlmIG5vbmUpLiAgRWxzZSwgKmxhc3R4cCB3aWxsIGJlIHNldCB0byB0aGUgaW5kZXgKKyAqIG9mIHRoZSBmb3VuZCBlbnRyeTsgKmdvdHAgd2lsbCBjb250YWluIHRoZSBlbnRyeS4KKyAqLworeGZzX2JtYnRfcmVjX3QgKgkJCS8qIHBvaW50ZXIgdG8gZm91bmQgZXh0ZW50IGVudHJ5ICovCit4ZnNfYm1hcF9zZWFyY2hfbXVsdGlfZXh0ZW50cygKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJeGZzX2ZpbGVvZmZfdAlibm8sCQkvKiBibG9jayBudW1iZXIgc2VhcmNoZWQgZm9yICovCisJaW50CQkqZW9mcCwJCS8qIG91dDogZW5kIG9mIGZpbGUgZm91bmQgKi8KKwl4ZnNfZXh0bnVtX3QJKmxhc3R4cCwJLyogb3V0OiBsYXN0IGV4dGVudCBpbmRleCAqLworCXhmc19ibWJ0X2lyZWNfdAkqZ290cCwJCS8qIG91dDogZXh0ZW50IGVudHJ5IGZvdW5kICovCisJeGZzX2JtYnRfaXJlY190CSpwcmV2cCkJCS8qIG91dDogcHJldmlvdXMgZXh0ZW50IGVudHJ5IGZvdW5kICovCit7CisJeGZzX2JtYnRfcmVjX3QJKmVwOwkJLyogZXh0ZW50IHJlY29yZCBwb2ludGVyICovCisJeGZzX2V4dG51bV90CWxhc3R4OwkJLyogbGFzdCBleHRlbnQgaW5kZXggKi8KKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgZXh0ZW50IGVudHJ5IHN0cnVjdHVyZSB0byBjYXRjaCBhY2Nlc3MgdG8KKwkgKiB1bmluaXRpYWxpemVkIGJyX3N0YXJ0YmxvY2sgZmllbGQuCisJICovCisJZ290cC0+YnJfc3RhcnRvZmYgPSAweGZmYTVhNWE1YTVhNWE1YTVMTDsKKwlnb3RwLT5icl9ibG9ja2NvdW50ID0gMHhhNTVhNWE1YTVhNWE1YTVhTEw7CisJZ290cC0+YnJfc3RhdGUgPSBYRlNfRVhUX0lOVkFMSUQ7CisjaWYgWEZTX0JJR19CTEtOT1MKKwlnb3RwLT5icl9zdGFydGJsb2NrID0gMHhmZmZmYTVhNWE1YTVhNWE1TEw7CisjZWxzZQorCWdvdHAtPmJyX3N0YXJ0YmxvY2sgPSAweGZmZmZhNWE1OworI2VuZGlmCisJcHJldnAtPmJyX3N0YXJ0b2ZmID0gTlVMTEZJTEVPRkY7CisKKwllcCA9IHhmc19pZXh0X2Jub190b19leHQoaWZwLCBibm8sICZsYXN0eCk7CisJaWYgKGxhc3R4ID4gMCkgeworCQl4ZnNfYm1idF9nZXRfYWxsKHhmc19pZXh0X2dldF9leHQoaWZwLCBsYXN0eCAtIDEpLCBwcmV2cCk7CisJfQorCWlmIChsYXN0eCA8IChpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSkpIHsKKwkJeGZzX2JtYnRfZ2V0X2FsbChlcCwgZ290cCk7CisJCSplb2ZwID0gMDsKKwl9IGVsc2UgeworCQlpZiAobGFzdHggPiAwKSB7CisJCQkqZ290cCA9ICpwcmV2cDsKKwkJfQorCQkqZW9mcCA9IDE7CisJCWVwID0gTlVMTDsKKwl9CisJKmxhc3R4cCA9IGxhc3R4OworCXJldHVybiBlcDsKK30KKworLyoKICAqIFNlYXJjaCB0aGUgZXh0ZW50cyBsaXN0IGZvciB0aGUgaW5vZGUsIGZvciB0aGUgZXh0ZW50IGNvbnRhaW5pbmcgYm5vLgogICogSWYgYm5vIGxpZXMgaW4gYSBob2xlLCBwb2ludCB0byB0aGUgbmV4dCBlbnRyeS4gIElmIGJubyBsaWVzIHBhc3QgZW9mLAogICogKmVvZnAgd2lsbCBiZSBzZXQsIGFuZCAqcHJldnAgd2lsbCBjb250YWluIHRoZSBsYXN0IGVudHJ5IChudWxsIGlmIG5vbmUpLgpAQCAtMzYzOSwyMCArMzY0MywxNCBAQAogCXhmc19ibWJ0X2lyZWNfdCAqcHJldnApICAgICAgICAgLyogb3V0OiBwcmV2aW91cyBleHRlbnQgZW50cnkgZm91bmQgKi8KIHsKIAl4ZnNfaWZvcmtfdAkqaWZwOwkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCi0JeGZzX2JtYnRfcmVjX3QgICpiYXNlOyAgICAgICAgICAvKiBiYXNlIG9mIGV4dGVudCBsaXN0ICovCi0JeGZzX2V4dG51bV90ICAgIGxhc3R4OyAgICAgICAgICAvKiBsYXN0IGV4dGVudCBpbmRleCB1c2VkICovCi0JeGZzX2V4dG51bV90ICAgIG5leHRlbnRzOyAgICAgICAvKiBleHRlbnQgbGlzdCBzaXplICovCi0JeGZzX2JtYnRfcmVjX3QgICplcDsgICAgICAgICAgICAvKiBleHRlbnQgbGlzdCBlbnRyeSBwb2ludGVyICovCisJeGZzX2JtYnRfcmVjX3QgICplcDsgICAgICAgICAgICAvKiBleHRlbnQgcmVjb3JkIHBvaW50ZXIgKi8KIAlpbnQJCXJ0OwkJLyogcmVhbHRpbWUgZmxhZyAgICAqLwogCiAJWEZTX1NUQVRTX0lOQyh4c19sb29rX2V4bGlzdCk7CiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKLQlsYXN0eCA9IGlmcC0+aWZfbGFzdGV4OwotCW5leHRlbnRzID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7Ci0JYmFzZSA9ICZpZnAtPmlmX3UxLmlmX2V4dGVudHNbMF07CiAKLQllcCA9IHhmc19ibWFwX2RvX3NlYXJjaF9leHRlbnRzKGJhc2UsIGxhc3R4LCBuZXh0ZW50cywgYm5vLCBlb2ZwLAotCQkJCQkgIGxhc3R4cCwgZ290cCwgcHJldnApOworCWVwID0geGZzX2JtYXBfc2VhcmNoX211bHRpX2V4dGVudHMoaWZwLCBibm8sIGVvZnAsIGxhc3R4cCwgZ290cCwgcHJldnApOworCiAJcnQgPSAod2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspICYmIFhGU19JU19SRUFMVElNRV9JTk9ERShpcCk7CiAJaWYgKHVubGlrZWx5KCFydCAmJiAhZ290cC0+YnJfc3RhcnRibG9jayAmJiAoKmxhc3R4cCAhPSBOVUxMRVhUTlVNKSkpIHsKICAgICAgICAgICAgICAgICBjbW5fZXJyKENFX1BBTklDLCJBY2Nlc3MgdG8gYmxvY2sgemVybzogZnM6IDwlcz4gaW5vZGU6ICVsbGQgIgpAQCAtMzczMiw3ICszNzMwLDcgQEAKIH0KIAogLyoKLSAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IHByaW9yIHRvIGEgY2FsbCB0byB4ZnNfYm1hcF9kZWxldGVfZXhsaXN0LgorICogQWRkIGJtYXAgdHJhY2UgZW50cnkgcHJpb3IgdG8gYSBjYWxsIHRvIHhmc19pZXh0X3JlbW92ZS4KICAqLwogU1RBVElDIHZvaWQKIHhmc19ibWFwX3RyYWNlX2RlbGV0ZSgKQEAgLTM3NDcsMTMgKzM3NDUsMTMgQEAKIAogCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7CiAJeGZzX2JtYXBfdHJhY2VfYWRkZW50cnkoWEZTX0JNQVBfS1RSQUNFX0RFTEVURSwgZm5hbWUsIGRlc2MsIGlwLCBpZHgsCi0JCWNudCwgJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tpZHhdLAotCQljbnQgPT0gMiA/ICZpZnAtPmlmX3UxLmlmX2V4dGVudHNbaWR4ICsgMV0gOiBOVUxMLAorCQljbnQsIHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpLAorCQljbnQgPT0gMiA/IHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggKyAxKSA6IE5VTEwsCiAJCXdoaWNoZm9yayk7CiB9CiAKIC8qCi0gKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBwcmlvciB0byBhIGNhbGwgdG8geGZzX2JtYXBfaW5zZXJ0X2V4bGlzdCwgb3IKKyAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IHByaW9yIHRvIGEgY2FsbCB0byB4ZnNfaWV4dF9pbnNlcnQsIG9yCiAgKiByZWFkaW5nIGluIHRoZSBleHRlbnRzIGxpc3QgZnJvbSB0aGUgZGlzayAoaW4gdGhlIGJ0cmVlKS4KICAqLwogU1RBVElDIHZvaWQKQEAgLTM3ODMsNyArMzc4MSw3IEBACiB9CiAKIC8qCi0gKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBhZnRlciB1cGRhdGluZyBhbiBleHRlbnQgbGlzdCBlbnRyeSBpbiBwbGFjZS4KKyAqIEFkZCBibWFwIHRyYWNlIGVudHJ5IGFmdGVyIHVwZGF0aW5nIGFuIGV4dGVudCByZWNvcmQgaW4gcGxhY2UuCiAgKi8KIFNUQVRJQyB2b2lkCiB4ZnNfYm1hcF90cmFjZV9wb3N0X3VwZGF0ZSgKQEAgLTM3OTcsMTEgKzM3OTUsMTEgQEAKIAogCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7CiAJeGZzX2JtYXBfdHJhY2VfYWRkZW50cnkoWEZTX0JNQVBfS1RSQUNFX1BPU1RfVVAsIGZuYW1lLCBkZXNjLCBpcCwgaWR4LAotCQkxLCAmaWZwLT5pZl91MS5pZl9leHRlbnRzW2lkeF0sIE5VTEwsIHdoaWNoZm9yayk7CisJCTEsIHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpLCBOVUxMLCB3aGljaGZvcmspOwogfQogCiAvKgotICogQWRkIGJtYXAgdHJhY2UgZW50cnkgcHJpb3IgdG8gdXBkYXRpbmcgYW4gZXh0ZW50IGxpc3QgZW50cnkgaW4gcGxhY2UuCisgKiBBZGQgYm1hcCB0cmFjZSBlbnRyeSBwcmlvciB0byB1cGRhdGluZyBhbiBleHRlbnQgcmVjb3JkIGluIHBsYWNlLgogICovCiBTVEFUSUMgdm9pZAogeGZzX2JtYXBfdHJhY2VfcHJlX3VwZGF0ZSgKQEAgLTM4MTUsNyArMzgxMyw3IEBACiAKIAlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwogCXhmc19ibWFwX3RyYWNlX2FkZGVudHJ5KFhGU19CTUFQX0tUUkFDRV9QUkVfVVAsIGZuYW1lLCBkZXNjLCBpcCwgaWR4LCAxLAotCQkmaWZwLT5pZl91MS5pZl9leHRlbnRzW2lkeF0sIE5VTEwsIHdoaWNoZm9yayk7CisJCXhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpLCBOVUxMLCB3aGljaGZvcmspOwogfQogI2VuZGlmCS8qIFhGU19CTUFQX1RSQUNFICovCiAKQEAgLTM4OTIsNyArMzg5MCw3IEBACiAJaW50CQkJcnN2ZCkJCS8qIHhhY3QgbWF5IHVzZSByZXNlcnZlZCBibGtzICovCiB7CiAJeGZzX2ZzYmxvY2tfdAkJZmlyc3RibG9jazsJLyogMXN0IGJsb2NrL2FnIGFsbG9jYXRlZCAqLwotCXhmc19ibWFwX2ZyZWVfdAkJZmxpc3Q7CQkvKiBmcmVlZCBleHRlbnQgbGlzdCAqLworCXhmc19ibWFwX2ZyZWVfdAkJZmxpc3Q7CQkvKiBmcmVlZCBleHRlbnQgcmVjb3JkcyAqLwogCXhmc19tb3VudF90CQkqbXA7CQkvKiBtb3VudCBzdHJ1Y3R1cmUgKi8KIAl4ZnNfdHJhbnNfdAkJKnRwOwkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCXVuc2lnbmVkIGxvbmcJCXM7CQkvKiBzcGlubG9jayBzcGwgdmFsdWUgKi8KQEAgLTQxNDYsNyArNDE0NCw3IEBACiAJeGZzX2VmZF9sb2dfaXRlbV90CSplZmQ7CQkvKiBleHRlbnQgZnJlZSBkYXRhICovCiAJeGZzX2VmaV9sb2dfaXRlbV90CSplZmk7CQkvKiBleHRlbnQgZnJlZSBpbnRlbnRpb24gKi8KIAlpbnQJCQllcnJvcjsJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLwotCXhmc19ibWFwX2ZyZWVfaXRlbV90CSpmcmVlOwkJLyogZnJlZSBleHRlbnQgbGlzdCBpdGVtICovCisJeGZzX2JtYXBfZnJlZV9pdGVtX3QJKmZyZWU7CQkvKiBmcmVlIGV4dGVudCBpdGVtICovCiAJdW5zaWduZWQgaW50CQlsb2dyZXM7CQkvKiBuZXcgbG9nIHJlc2VydmF0aW9uICovCiAJdW5zaWduZWQgaW50CQlsb2djb3VudDsJLyogbmV3IGxvZyBjb3VudCAqLwogCXhmc19tb3VudF90CQkqbXA7CQkvKiBmaWxlc3lzdGVtIG1vdW50IHN0cnVjdHVyZSAqLwpAQCAtNDI0Miw5ICs0MjQwLDkgQEAKIAl4ZnNfZmlsZW9mZl90CSpmaXJzdF91bnVzZWQsCQkvKiB1bnVzZWQgYmxvY2sgKi8KIAlpbnQJCXdoaWNoZm9yaykJCS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiB7Ci0JeGZzX2JtYnRfcmVjX3QJKmJhc2U7CQkJLyogYmFzZSBvZiBleHRlbnQgYXJyYXkgKi8KIAl4ZnNfYm1idF9yZWNfdAkqZXA7CQkJLyogcG9pbnRlciB0byBhbiBleHRlbnQgZW50cnkgKi8KIAlpbnQJCWVycm9yOwkJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLworCWludAkJaWR4OwkJCS8qIGV4dGVudCByZWNvcmQgaW5kZXggKi8KIAl4ZnNfaWZvcmtfdAkqaWZwOwkJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLwogCXhmc19maWxlb2ZmX3QJbGFzdGFkZHI7CQkvKiBsYXN0IGJsb2NrIG51bWJlciBzZWVuICovCiAJeGZzX2ZpbGVvZmZfdAlsb3dlc3Q7CQkJLyogbG93ZXN0IHVzZWZ1bCBibG9jayAqLwpAQCAtNDI2NSwxMCArNDI2Myw4IEBACiAJCXJldHVybiBlcnJvcjsKIAlsb3dlc3QgPSAqZmlyc3RfdW51c2VkOwogCW5leHRlbnRzID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7Ci0JYmFzZSA9ICZpZnAtPmlmX3UxLmlmX2V4dGVudHNbMF07Ci0JZm9yIChsYXN0YWRkciA9IDAsIG1heCA9IGxvd2VzdCwgZXAgPSBiYXNlOwotCSAgICAgZXAgPCAmYmFzZVtuZXh0ZW50c107Ci0JICAgICBlcCsrKSB7CisJZm9yIChpZHggPSAwLCBsYXN0YWRkciA9IDAsIG1heCA9IGxvd2VzdDsgaWR4IDwgbmV4dGVudHM7IGlkeCsrKSB7CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCk7CiAJCW9mZiA9IHhmc19ibWJ0X2dldF9zdGFydG9mZihlcCk7CiAJCS8qCiAJCSAqIFNlZSBpZiB0aGUgaG9sZSBiZWZvcmUgdGhpcyBleHRlbnQgd2lsbCB3b3JrLgpAQCAtNDI4Nyw4ICs0MjgzLDggQEAKIC8qCiAgKiBSZXR1cm5zIHRoZSBmaWxlLXJlbGF0aXZlIGJsb2NrIG51bWJlciBvZiB0aGUgbGFzdCBibG9jayArIDEgYmVmb3JlCiAgKiBsYXN0X2Jsb2NrIChpbnB1dCB2YWx1ZSkgaW4gdGhlIGZpbGUuCi0gKiBUaGlzIGlzIG5vdCBiYXNlZCBvbiBpX3NpemUsIGl0IGlzIGJhc2VkIG9uIHRoZSBleHRlbnQgbGlzdC4KLSAqIFJldHVybnMgMCBmb3IgbG9jYWwgZmlsZXMsIGFzIHRoZXkgZG8gbm90IGhhdmUgYW4gZXh0ZW50IGxpc3QuCisgKiBUaGlzIGlzIG5vdCBiYXNlZCBvbiBpX3NpemUsIGl0IGlzIGJhc2VkIG9uIHRoZSBleHRlbnQgcmVjb3Jkcy4KKyAqIFJldHVybnMgMCBmb3IgbG9jYWwgZmlsZXMsIGFzIHRoZXkgZG8gbm90IGhhdmUgZXh0ZW50IHJlY29yZHMuCiAgKi8KIGludAkJCQkJCS8qIGVycm9yICovCiB4ZnNfYm1hcF9sYXN0X2JlZm9yZSgKQEAgLTQzMzUsOCArNDMzMSw4IEBACiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBmaWxlLXJlbGF0aXZlIGJsb2NrIG51bWJlciBvZiB0aGUgZmlyc3QgYmxvY2sgcGFzdCBlb2YgaW4KLSAqIHRoZSBmaWxlLiAgVGhpcyBpcyBub3QgYmFzZWQgb24gaV9zaXplLCBpdCBpcyBiYXNlZCBvbiB0aGUgZXh0ZW50IGxpc3QuCi0gKiBSZXR1cm5zIDAgZm9yIGxvY2FsIGZpbGVzLCBhcyB0aGV5IGRvIG5vdCBoYXZlIGFuIGV4dGVudCBsaXN0LgorICogdGhlIGZpbGUuICBUaGlzIGlzIG5vdCBiYXNlZCBvbiBpX3NpemUsIGl0IGlzIGJhc2VkIG9uIHRoZSBleHRlbnQgcmVjb3Jkcy4KKyAqIFJldHVybnMgMCBmb3IgbG9jYWwgZmlsZXMsIGFzIHRoZXkgZG8gbm90IGhhdmUgZXh0ZW50IHJlY29yZHMuCiAgKi8KIGludAkJCQkJCS8qIGVycm9yICovCiB4ZnNfYm1hcF9sYXN0X29mZnNldCgKQEAgLTQzNDUsNyArNDM0MSw2IEBACiAJeGZzX2ZpbGVvZmZfdAkqbGFzdF9ibG9jaywJCS8qIGxhc3QgYmxvY2sgKi8KIAlpbnQJCXdoaWNoZm9yaykJCS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiB7Ci0JeGZzX2JtYnRfcmVjX3QJKmJhc2U7CQkJLyogYmFzZSBvZiBleHRlbnQgYXJyYXkgKi8KIAl4ZnNfYm1idF9yZWNfdAkqZXA7CQkJLyogcG9pbnRlciB0byBsYXN0IGV4dGVudCAqLwogCWludAkJZXJyb3I7CQkJLyogZXJyb3IgcmV0dXJuIHZhbHVlICovCiAJeGZzX2lmb3JrX3QJKmlmcDsJCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KQEAgLTQzNjgsOSArNDM2Myw3IEBACiAJCSpsYXN0X2Jsb2NrID0gMDsKIAkJcmV0dXJuIDA7CiAJfQotCWJhc2UgPSAmaWZwLT5pZl91MS5pZl9leHRlbnRzWzBdOwotCUFTU0VSVChiYXNlICE9IE5VTEwpOwotCWVwID0gJmJhc2VbbmV4dGVudHMgLSAxXTsKKwllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBuZXh0ZW50cyAtIDEpOwogCSpsYXN0X2Jsb2NrID0geGZzX2JtYnRfZ2V0X3N0YXJ0b2ZmKGVwKSArIHhmc19ibWJ0X2dldF9ibG9ja2NvdW50KGVwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0MDAsNyArNDM5Myw3IEBACiAJCXJldHVybiAwOwogCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7CiAJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRFTlRTKTsKLQllcCA9IGlmcC0+aWZfdTEuaWZfZXh0ZW50czsKKwllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCAwKTsKIAl4ZnNfYm1idF9nZXRfYWxsKGVwLCAmcyk7CiAJcnZhbCA9IHMuYnJfc3RhcnRvZmYgPT0gMCAmJiBzLmJyX2Jsb2NrY291bnQgPT0gMTsKIAlpZiAocnZhbCAmJiB3aGljaGZvcmsgPT0gWEZTX0RBVEFfRk9SSykKQEAgLTQ0MzUsNyArNDQyOCw2IEBACiAJeGZzX2JtYnRfcHRyX3QJCSpwcDsJLyogcG9pbnRlciB0byBibG9jayBhZGRyZXNzICovCiAJLyogUkVGRVJFTkNFRCAqLwogCXhmc19leHRudW1fdAkJcm9vbTsJLyogbnVtYmVyIG9mIGVudHJpZXMgdGhlcmUncyByb29tIGZvciAqLwotCXhmc19ibWJ0X3JlY190CQkqdHJwOwkvKiB0YXJnZXQgcmVjb3JkIHBvaW50ZXIgKi8KIAogCWJubyA9IE5VTExGU0JMT0NLOwogCW1wID0gaXAtPmlfbW91bnQ7CkBAIC00NDc4LDE2ICs0NDcwLDE2IEBACiAJLyoKIAkgKiBIZXJlIHdpdGggYnAgYW5kIGJsb2NrIHNldCB0byB0aGUgbGVmdG1vc3QgbGVhZiBub2RlIGluIHRoZSB0cmVlLgogCSAqLwotCXJvb20gPSBpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKCp0cnApOwotCXRycCA9IGlmcC0+aWZfdTEuaWZfZXh0ZW50czsKKwlyb29tID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7CiAJaSA9IDA7CiAJLyoKLQkgKiBMb29wIG92ZXIgYWxsIGxlYWYgbm9kZXMuICBDb3B5IGluZm9ybWF0aW9uIHRvIHRoZSBleHRlbnQgbGlzdC4KKwkgKiBMb29wIG92ZXIgYWxsIGxlYWYgbm9kZXMuICBDb3B5IGluZm9ybWF0aW9uIHRvIHRoZSBleHRlbnQgcmVjb3Jkcy4KIAkgKi8KIAlmb3IgKDs7KSB7Ci0JCXhmc19ibWJ0X3JlY190CSpmcnAsICp0ZW1wOworCQl4ZnNfYm1idF9yZWNfdAkqZnJwLCAqdHJwOwogCQl4ZnNfZnNibG9ja190CW5leHRibm87CiAJCXhmc19leHRudW1fdAludW1fcmVjczsKKwkJeGZzX2V4dG51bV90CXN0YXJ0OwogCiAKIAkJbnVtX3JlY3MgPSBiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcyk7CkBAIC00NTExLDEyICs0NTAzLDEzIEBACiAJCWlmIChuZXh0Ym5vICE9IE5VTExGU0JMT0NLKQogCQkJeGZzX2J0cmVlX3JlYWRhX2J1ZmwobXAsIG5leHRibm8sIDEpOwogCQkvKgotCQkgKiBDb3B5IHJlY29yZHMgaW50byB0aGUgZXh0ZW50IGxpc3QuCisJCSAqIENvcHkgcmVjb3JkcyBpbnRvIHRoZSBleHRlbnQgcmVjb3Jkcy4KIAkJICovCiAJCWZycCA9IFhGU19CVFJFRV9SRUNfQUREUihtcC0+bV9zYi5zYl9ibG9ja3NpemUsIHhmc19ibWJ0LAogCQkJYmxvY2ssIDEsIG1wLT5tX2JtYXBfZG14clswXSk7Ci0JCXRlbXAgPSB0cnA7Ci0JCWZvciAoaiA9IDA7IGogPCBudW1fcmVjczsgaisrLCBmcnArKywgdHJwKyspIHsKKwkJc3RhcnQgPSBpOworCQlmb3IgKGogPSAwOyBqIDwgbnVtX3JlY3M7IGorKywgaSsrLCBmcnArKykgeworCQkJdHJwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGkpOwogCQkJdHJwLT5sMCA9IElOVF9HRVQoZnJwLT5sMCwgQVJDSF9DT05WRVJUKTsKIAkJCXRycC0+bDEgPSBJTlRfR0VUKGZycC0+bDEsIEFSQ0hfQ09OVkVSVCk7CiAJCX0KQEAgLTQ1MjYsMTQgKzQ1MTksMTQgQEAKIAkJCSAqIGFueSAib2xkZXIiIGRhdGEgYm1hcCBidHJlZSByZWNvcmRzIGZvciBhCiAJCQkgKiBzZXQgYml0IGluIHRoZSAiZXh0ZW50IGZsYWciIHBvc2l0aW9uLgogCQkJICovCi0JCQlpZiAodW5saWtlbHkoeGZzX2NoZWNrX25vc3RhdGVfZXh0ZW50cyh0ZW1wLCBudW1fcmVjcykpKSB7CisJCQlpZiAodW5saWtlbHkoeGZzX2NoZWNrX25vc3RhdGVfZXh0ZW50cyhpZnAsCisJCQkJCXN0YXJ0LCBudW1fcmVjcykpKSB7CiAJCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2JtYXBfcmVhZF9leHRlbnRzKDIpIiwKIAkJCQkJCSBYRlNfRVJSTEVWRUxfTE9XLAogCQkJCQkJIGlwLT5pX21vdW50KTsKIAkJCQlnb3RvIGVycm9yMDsKIAkJCX0KIAkJfQotCQlpICs9IG51bV9yZWNzOwogCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBicCk7CiAJCWJubyA9IG5leHRibm87CiAJCS8qCkBAIC00NTQ2LDcgKzQ1MzksNyBAQAogCQkJcmV0dXJuIGVycm9yOwogCQlibG9jayA9IFhGU19CVUZfVE9fQk1CVF9CTE9DSyhicCk7CiAJfQotCUFTU0VSVChpID09IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoKnRycCkpOworCUFTU0VSVChpID09IChpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSkpOwogCUFTU0VSVChpID09IFhGU19JRk9SS19ORVhURU5UUyhpcCwgd2hpY2hmb3JrKSk7CiAJeGZzX2JtYXBfdHJhY2VfZXhsaXN0KGZuYW1lLCBpcCwgaSwgd2hpY2hmb3JrKTsKIAlyZXR1cm4gMDsKQEAgLTQ1NTcsNyArNDU1MCw3IEBACiAKICNpZmRlZiBYRlNfQk1BUF9UUkFDRQogLyoKLSAqIEFkZCBibWFwIHRyYWNlIGluc2VydCBlbnRyaWVzIGZvciBhbGwgdGhlIGNvbnRlbnRzIG9mIHRoZSBleHRlbnQgbGlzdC4KKyAqIEFkZCBibWFwIHRyYWNlIGluc2VydCBlbnRyaWVzIGZvciBhbGwgdGhlIGNvbnRlbnRzIG9mIHRoZSBleHRlbnQgcmVjb3Jkcy4KICAqLwogdm9pZAogeGZzX2JtYXBfdHJhY2VfZXhsaXN0KApAQCAtNDU2NiwxNiArNDU1OSwxNSBAQAogCXhmc19leHRudW1fdAljbnQsCQkvKiBjb3VudCBvZiBlbnRyaWVzIGluIHRoZSBsaXN0ICovCiAJaW50CQl3aGljaGZvcmspCS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiB7Ci0JeGZzX2JtYnRfcmVjX3QJKmJhc2U7CQkvKiBiYXNlIG9mIGV4dGVudCBsaXN0ICovCi0JeGZzX2JtYnRfcmVjX3QJKmVwOwkJLyogY3VycmVudCBlbnRyeSBpbiBleHRlbnQgbGlzdCAqLwotCXhmc19leHRudW1fdAlpZHg7CQkvKiBleHRlbnQgbGlzdCBlbnRyeSBudW1iZXIgKi8KKwl4ZnNfYm1idF9yZWNfdAkqZXA7CQkvKiBjdXJyZW50IGV4dGVudCByZWNvcmQgKi8KKwl4ZnNfZXh0bnVtX3QJaWR4OwkJLyogZXh0ZW50IHJlY29yZCBpbmRleCAqLwogCXhmc19pZm9ya190CSppZnA7CQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KLQl4ZnNfYm1idF9pcmVjX3QJczsJCS8qIGV4dGVudCBsaXN0IHJlY29yZCAqLworCXhmc19ibWJ0X2lyZWNfdAlzOwkJLyogZmlsZSBleHRlbnQgcmVjb3JkICovCiAKIAlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwotCUFTU0VSVChjbnQgPT0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZigqYmFzZSkpOwotCWJhc2UgPSBpZnAtPmlmX3UxLmlmX2V4dGVudHM7Ci0JZm9yIChpZHggPSAwLCBlcCA9IGJhc2U7IGlkeCA8IGNudDsgaWR4KyssIGVwKyspIHsKKwlBU1NFUlQoY250ID09IChpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSkpOworCWZvciAoaWR4ID0gMDsgaWR4IDwgY250OyBpZHgrKykgeworCQllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpOwogCQl4ZnNfYm1idF9nZXRfYWxsKGVwLCAmcyk7CiAJCXhmc19ibWFwX3RyYWNlX2luc2VydChmbmFtZSwgImV4bGlzdCIsIGlwLCBpZHgsIDEsICZzLCBOVUxMLAogCQkJd2hpY2hmb3JrKTsKQEAgLTQ2NjEsMTQgKzQ2NTMsMTAgQEAKIAl4ZnNfYm1hbGxvY2FfdAlibWE7CQkvKiBhcmdzIGZvciB4ZnNfYm1hcF9hbGxvYyAqLwogCXhmc19idHJlZV9jdXJfdAkqY3VyOwkJLyogYm1hcCBidHJlZSBjdXJzb3IgKi8KIAl4ZnNfZmlsZW9mZl90CWVuZDsJCS8qIGVuZCBvZiBtYXBwZWQgZmlsZSByZWdpb24gKi8KLQlpbnQJCWVvZjsJCS8qIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIGV4dGVudCBsaXN0ICovCi0JY2hhcgkJY29udGlnOwkJLyogYWxsb2NhdGlvbiBtdXN0IGJlIG9uZSBleHRlbnQgKi8KLQljaGFyCQlkZWxheTsJCS8qIHRoaXMgcmVxdWVzdCBpcyBmb3IgZGVsYXllZCBhbGxvYyAqLwotCWNoYXIJCWV4YWN0OwkJLyogZG9uJ3QgZG8gYWxsIG9mIHdhc2RlbGF5ZWQgZXh0ZW50ICovCi0JY2hhcgkJY29udmVydDsJLyogdW53cml0dGVuIGV4dGVudCBJL08gY29tcGxldGlvbiAqLwotCXhmc19ibWJ0X3JlY190CSplcDsJCS8qIGV4dGVudCBsaXN0IGVudHJ5IHBvaW50ZXIgKi8KKwlpbnQJCWVvZjsJCS8qIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIGV4dGVudHMgKi8KKwl4ZnNfYm1idF9yZWNfdAkqZXA7CQkvKiBleHRlbnQgcmVjb3JkIHBvaW50ZXIgKi8KIAlpbnQJCWVycm9yOwkJLyogZXJyb3IgcmV0dXJuICovCi0JeGZzX2JtYnRfaXJlY190CWdvdDsJCS8qIGN1cnJlbnQgZXh0ZW50IGxpc3QgcmVjb3JkICovCisJeGZzX2JtYnRfaXJlY190CWdvdDsJCS8qIGN1cnJlbnQgZmlsZSBleHRlbnQgcmVjb3JkICovCiAJeGZzX2lmb3JrX3QJKmlmcDsJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLwogCXhmc19leHRsZW5fdAlpbmRsZW47CQkvKiBpbmRpcmVjdCBibG9ja3MgbGVuZ3RoICovCiAJeGZzX2V4dG51bV90CWxhc3R4OwkJLyogbGFzdCB1c2VmdWwgZXh0ZW50IG51bWJlciAqLwpAQCAtNDY4MCwxNyArNDY2OCwxMyBAQAogCWludAkJbmFsbG9jczsJLyogbnVtYmVyIG9mIGV4dGVudHMgYWxsb2NcJ2QgKi8KIAl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CS8qIG51bWJlciBvZiBleHRlbnRzIGluIGZpbGUgKi8KIAl4ZnNfZmlsZW9mZl90CW9ibm87CQkvKiBvbGQgYmxvY2sgbnVtYmVyIChvZmZzZXQpICovCi0JeGZzX2JtYnRfaXJlY190CXByZXY7CQkvKiBwcmV2aW91cyBleHRlbnQgbGlzdCByZWNvcmQgKi8KKwl4ZnNfYm1idF9pcmVjX3QJcHJldjsJCS8qIHByZXZpb3VzIGZpbGUgZXh0ZW50IHJlY29yZCAqLwogCWludAkJdG1wX2xvZ2ZsYWdzOwkvKiB0ZW1wIGZsYWdzIGhvbGRlciAqLwogCWludAkJd2hpY2hmb3JrOwkvKiBkYXRhIG9yIGF0dHIgZm9yayAqLwogCWNoYXIJCWluaG9sZTsJCS8qIGN1cnJlbnQgbG9jYXRpb24gaXMgaG9sZSBpbiBmaWxlICovCi0JY2hhcgkJc3RhdGVsZXNzOwkvKiBpZ25vcmUgc3RhdGUgZmxhZyBzZXQgKi8KLQljaGFyCQl0cmltOwkJLyogb3V0cHV0IHRyaW1tZWQgdG8gbWF0Y2ggcmFuZ2UgKi8KLQljaGFyCQl1c2VyZGF0YTsJLyogYWxsb2NhdGluZyBub24tbWV0YWRhdGEgKi8KIAljaGFyCQl3YXNkZWxheTsJLyogb2xkIGV4dGVudCB3YXMgZGVsYXllZCAqLwogCWNoYXIJCXdyOwkJLyogdGhpcyBpcyBhIHdyaXRlIHJlcXVlc3QgKi8KIAljaGFyCQlydDsJCS8qIHRoaXMgaXMgYSByZWFsdGltZSBmaWxlICovCi0JY2hhcgkJcnN2ZDsJCS8qIE9LIHRvIGFsbG9jYXRlIHJlc2VydmVkIGJsb2NrcyAqLwogI2lmZGVmIERFQlVHCiAJeGZzX2ZpbGVvZmZfdAlvcmlnX2JubzsJLyogb3JpZ2luYWwgYmxvY2sgbnVtYmVyIHZhbHVlICovCiAJaW50CQlvcmlnX2ZsYWdzOwkvKiBvcmlnaW5hbCBmbGFncyBhcmcgdmFsdWUgKi8KQEAgLTQ3MjcsMTUgKzQ3MTEsOCBAQAogCQlYRlNfU1RBVFNfSU5DKHhzX2Jsa19tYXB3KTsKIAllbHNlCiAJCVhGU19TVEFUU19JTkMoeHNfYmxrX21hcHIpOwotCWRlbGF5ID0gKGZsYWdzICYgWEZTX0JNQVBJX0RFTEFZKSAhPSAwOwotCXRyaW0gPSAoZmxhZ3MgJiBYRlNfQk1BUElfRU5USVJFKSA9PSAwOwotCXVzZXJkYXRhID0gKGZsYWdzICYgWEZTX0JNQVBJX01FVEFEQVRBKSA9PSAwOwotCWNvbnZlcnQgPSAoZmxhZ3MgJiBYRlNfQk1BUElfQ09OVkVSVCkgIT0gMDsKLQlleGFjdCA9IChmbGFncyAmIFhGU19CTUFQSV9FWEFDVCkgIT0gMDsKLQlyc3ZkID0gKGZsYWdzICYgWEZTX0JNQVBJX1JTVkJMT0NLUykgIT0gMDsKLQljb250aWcgPSAoZmxhZ3MgJiBYRlNfQk1BUElfQ09OVElHKSAhPSAwOwogCS8qCi0JICogc3RhdGVsZXNzIGlzIHVzZWQgdG8gY29tYmluZSBleHRlbnRzIHdoaWNoCisJICogSUdTVEFURSBmbGFnIGlzIHVzZWQgdG8gY29tYmluZSBleHRlbnRzIHdoaWNoCiAJICogZGlmZmVyIG9ubHkgZHVlIHRvIHRoZSBzdGF0ZSBvZiB0aGUgZXh0ZW50cy4KIAkgKiBUaGlzIHRlY2huaXF1ZSBpcyB1c2VkIGZyb20geGZzX2dldGJtYXAoKQogCSAqIHdoZW4gdGhlIGNhbGxlciBkb2VzIG5vdCB3aXNoIHRvIHNlZSB0aGUKQEAgLTQ3NTEsMTAgKzQ3MjgsOSBAQAogCSAqIHhmc19zdHJhdF9jb21wKCksIHdoZXJlIHRoZSB4ZnNfYm1hcGkoKSBjYWxsCiAJICogaXMgdHJhbnNhY3Rpb25lZCwgYW5kIHRoZSBleHRlbnRzIGNvbWJpbmVkLgogCSAqLwotCXN0YXRlbGVzcyA9IChmbGFncyAmIFhGU19CTUFQSV9JR1NUQVRFKSAhPSAwOwotCWlmIChzdGF0ZWxlc3MgJiYgd3IpCS8qIGlmIHdyaXRpbmcgdW53cml0dGVuIHNwYWNlLCBubyAqLwotCQl3ciA9IDA7CQkvKiBhbGxvY2F0aW9ucyBhcmUgYWxsb3dlZCAqLwotCUFTU0VSVCh3ciB8fCAhZGVsYXkpOworCWlmICgoZmxhZ3MgJiBYRlNfQk1BUElfSUdTVEFURSkgJiYgd3IpCS8qIGlmIHdyaXRpbmcgdW53cml0dGVuIHNwYWNlICovCisJCXdyID0gMDsJCQkJLyogbm8gYWxsb2NhdGlvbnMgYXJlIGFsbG93ZWQgKi8KKwlBU1NFUlQod3IgfHwgIShmbGFncyAmIFhGU19CTUFQSV9ERUxBWSkpOwogCWxvZ2ZsYWdzID0gMDsKIAluYWxsb2NzID0gMDsKIAljdXIgPSBOVUxMOwpAQCAtNDc4OSw3ICs0NzY1LDcgQEAKIAkJaWYgKGVvZiAmJiAhd3IpCiAJCQlnb3QuYnJfc3RhcnRvZmYgPSBlbmQ7CiAJCWluaG9sZSA9IGVvZiB8fCBnb3QuYnJfc3RhcnRvZmYgPiBibm87Ci0JCXdhc2RlbGF5ID0gd3IgJiYgIWluaG9sZSAmJiAhZGVsYXkgJiYKKwkJd2FzZGVsYXkgPSB3ciAmJiAhaW5ob2xlICYmICEoZmxhZ3MgJiBYRlNfQk1BUElfREVMQVkpICYmCiAJCQlJU05VTExTVEFSVEJMT0NLKGdvdC5icl9zdGFydGJsb2NrKTsKIAkJLyoKIAkJICogRmlyc3QsIGRlYWwgd2l0aCB0aGUgaG9sZSBiZWZvcmUgdGhlIGFsbG9jYXRlZCBzcGFjZQpAQCAtNDgwMSwxMSArNDc3NywxMSBAQAogCQkJICogYWxsb2NhdGUgdGhlIHN0dWZmIGFza2VkIGZvciBpbiB0aGlzIGJtYXAgY2FsbAogCQkJICogYnV0IHRoYXQgd291bGRuJ3QgYmUgYXMgZ29vZC4KIAkJCSAqLwotCQkJaWYgKHdhc2RlbGF5ICYmICFleGFjdCkgeworCQkJaWYgKHdhc2RlbGF5ICYmICEoZmxhZ3MgJiBYRlNfQk1BUElfRVhBQ1QpKSB7CiAJCQkJYWxlbiA9ICh4ZnNfZXh0bGVuX3QpZ290LmJyX2Jsb2NrY291bnQ7CiAJCQkJYW9mZiA9IGdvdC5icl9zdGFydG9mZjsKIAkJCQlpZiAobGFzdHggIT0gTlVMTEVYVE5VTSAmJiBsYXN0eCkgewotCQkJCQllcCA9ICZpZnAtPmlmX3UxLmlmX2V4dGVudHNbbGFzdHggLSAxXTsKKwkJCQkJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgbGFzdHggLSAxKTsKIAkJCQkJeGZzX2JtYnRfZ2V0X2FsbChlcCwgJnByZXYpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAod2FzZGVsYXkpIHsKQEAgLTQ4MjMsOCArNDc5OSw4IEBACiAJCQkJCQkJZ290LmJyX3N0YXJ0b2ZmIC0gYm5vKTsKIAkJCQlhb2ZmID0gYm5vOwogCQkJfQotCQkJbWlubGVuID0gY29udGlnID8gYWxlbiA6IDE7Ci0JCQlpZiAoZGVsYXkpIHsKKwkJCW1pbmxlbiA9IChmbGFncyAmIFhGU19CTUFQSV9DT05USUcpID8gYWxlbiA6IDE7CisJCQlpZiAoZmxhZ3MgJiBYRlNfQk1BUElfREVMQVkpIHsKIAkJCQl4ZnNfZXh0bGVuX3QJZXh0c3o7CiAKIAkJCQkvKiBGaWd1cmUgb3V0IHRoZSBleHRlbnQgc2l6ZSwgYWRqdXN0IGFsZW4gKi8KQEAgLTQ4MzcsNyArNDgxMyw5IEBACiAJCQkJaWYgKGV4dHN6KSB7CiAJCQkJCWVycm9yID0geGZzX2JtYXBfZXh0c2l6ZV9hbGlnbihtcCwKIAkJCQkJCQkmZ290LCAmcHJldiwgZXh0c3osCi0JCQkJCQkJcnQsIGVvZiwgZGVsYXksIGNvbnZlcnQsCisJCQkJCQkJcnQsIGVvZiwKKwkJCQkJCQlmbGFncyZYRlNfQk1BUElfREVMQVksCisJCQkJCQkJZmxhZ3MmWEZTX0JNQVBJX0NPTlZFUlQsCiAJCQkJCQkJJmFvZmYsICZhbGVuKTsKIAkJCQkJQVNTRVJUKCFlcnJvcik7CiAJCQkJfQpAQCAtNDg3NSwyNCArNDg1MywyOSBAQAogCQkJCWlmIChydCkgewogCQkJCQllcnJvciA9IHhmc19tb2RfaW5jb3JlX3NiKG1wLAogCQkJCQkJCVhGU19TQlNfRlJFWFRFTlRTLAotCQkJCQkJCS0oZXh0c3opLCByc3ZkKTsKKwkJCQkJCQktKGV4dHN6KSwgKGZsYWdzICYKKwkJCQkJCQlYRlNfQk1BUElfUlNWQkxPQ0tTKSk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJZXJyb3IgPSB4ZnNfbW9kX2luY29yZV9zYihtcCwKIAkJCQkJCQlYRlNfU0JTX0ZEQkxPQ0tTLAotCQkJCQkJCS0oYWxlbiksIHJzdmQpOworCQkJCQkJCS0oYWxlbiksIChmbGFncyAmCisJCQkJCQkJWEZTX0JNQVBJX1JTVkJMT0NLUykpOwogCQkJCX0KIAkJCQlpZiAoIWVycm9yKSB7CiAJCQkJCWVycm9yID0geGZzX21vZF9pbmNvcmVfc2IobXAsCiAJCQkJCQkJWEZTX1NCU19GREJMT0NLUywKLQkJCQkJCQktKGluZGxlbiksIHJzdmQpOworCQkJCQkJCS0oaW5kbGVuKSwgKGZsYWdzICYKKwkJCQkJCQlYRlNfQk1BUElfUlNWQkxPQ0tTKSk7CiAJCQkJCWlmIChlcnJvciAmJiBydCkKIAkJCQkJCXhmc19tb2RfaW5jb3JlX3NiKG1wLAogCQkJCQkJCVhGU19TQlNfRlJFWFRFTlRTLAotCQkJCQkJCWV4dHN6LCByc3ZkKTsKKwkJCQkJCQlleHRzeiwgKGZsYWdzICYKKwkJCQkJCQlYRlNfQk1BUElfUlNWQkxPQ0tTKSk7CiAJCQkJCWVsc2UgaWYgKGVycm9yKQogCQkJCQkJeGZzX21vZF9pbmNvcmVfc2IobXAsCiAJCQkJCQkJWEZTX1NCU19GREJMT0NLUywKLQkJCQkJCQlhbGVuLCByc3ZkKTsKKwkJCQkJCQlhbGVuLCAoZmxhZ3MgJgorCQkJCQkJCVhGU19CTUFQSV9SU1ZCTE9DS1MpKTsKIAkJCQl9CiAKIAkJCQlpZiAoZXJyb3IpIHsKQEAgLTQ5MjUsNyArNDkwOCw3IEBACiAJCQkJLyogSW5kaWNhdGUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdXNlciBkYXRhCiAJCQkJICogaW4gdGhlIGZpbGUsIG9yIGp1c3QgYW55IHVzZXIgZGF0YS4KIAkJCQkgKi8KLQkJCQlpZiAodXNlcmRhdGEpIHsKKwkJCQlpZiAoIShmbGFncyAmIFhGU19CTUFQSV9NRVRBREFUQSkpIHsKIAkJCQkJYm1hLnVzZXJkYXRhID0gKGFvZmYgPT0gMCkgPwogCQkJCQkJWEZTX0FMTE9DX0lOSVRJQUxfVVNFUl9EQVRBIDoKIAkJCQkJCVhGU19BTExPQ19VU0VSREFUQTsKQEAgLTQ5MzcsNyArNDkyMCw3IEBACiAJCQkJYm1hLmZpcnN0YmxvY2sgPSAqZmlyc3RibG9jazsKIAkJCQlibWEuYWxlbiA9IGFsZW47CiAJCQkJYm1hLm9mZiA9IGFvZmY7Ci0JCQkJYm1hLmNvbnYgPSBjb252ZXJ0OworCQkJCWJtYS5jb252ID0gKGZsYWdzICYgWEZTX0JNQVBJX0NPTlZFUlQpOwogCQkJCWJtYS53YXNkZWwgPSB3YXNkZWxheTsKIAkJCQlibWEubWlubGVuID0gbWlubGVuOwogCQkJCWJtYS5sb3cgPSBmbGlzdC0+eGJmX2xvdzsKQEAgLTQ5NDgsNyArNDkzMSw4IEBACiAJCQkJICogaXMgbGFyZ2VyIHRoYW4gYSBzdHJpcGUgdW5pdC4KIAkJCQkgKi8KIAkJCQlpZiAobXAtPm1fZGFsaWduICYmIGFsZW4gPj0gbXAtPm1fZGFsaWduICYmCi0JCQkJICAgIHVzZXJkYXRhICYmIHdoaWNoZm9yayA9PSBYRlNfREFUQV9GT1JLKSB7CisJCQkJICAgICghKGZsYWdzICYgWEZTX0JNQVBJX01FVEFEQVRBKSkgJiYKKwkJCQkgICAgKHdoaWNoZm9yayA9PSBYRlNfREFUQV9GT1JLKSkgewogCQkJCQlpZiAoKGVycm9yID0geGZzX2JtYXBfaXNhZW9mKGlwLCBhb2ZmLAogCQkJCQkJCXdoaWNoZm9yaywgJmJtYS5hZW9mKSkpCiAJCQkJCQlnb3RvIGVycm9yMDsKQEAgLTUwMTEsMTkgKzQ5OTUsMTkgQEAKIAkJCX0KIAkJCWVycm9yID0geGZzX2JtYXBfYWRkX2V4dGVudChpcCwgbGFzdHgsICZjdXIsICZnb3QsCiAJCQkJZmlyc3RibG9jaywgZmxpc3QsICZ0bXBfbG9nZmxhZ3MsIHdoaWNoZm9yaywKLQkJCQlyc3ZkKTsKKwkJCQkoZmxhZ3MgJiBYRlNfQk1BUElfUlNWQkxPQ0tTKSk7CiAJCQlsb2dmbGFncyB8PSB0bXBfbG9nZmxhZ3M7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBlcnJvcjA7CiAJCQlsYXN0eCA9IGlmcC0+aWZfbGFzdGV4OwotCQkJZXAgPSAmaWZwLT5pZl91MS5pZl9leHRlbnRzW2xhc3R4XTsKKwkJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGxhc3R4KTsKIAkJCW5leHRlbnRzID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7CiAJCQl4ZnNfYm1idF9nZXRfYWxsKGVwLCAmZ290KTsKIAkJCUFTU0VSVChnb3QuYnJfc3RhcnRvZmYgPD0gYW9mZik7CiAJCQlBU1NFUlQoZ290LmJyX3N0YXJ0b2ZmICsgZ290LmJyX2Jsb2NrY291bnQgPj0KIAkJCQlhb2ZmICsgYWxlbik7CiAjaWZkZWYgREVCVUcKLQkJCWlmIChkZWxheSkgeworCQkJaWYgKGZsYWdzICYgWEZTX0JNQVBJX0RFTEFZKSB7CiAJCQkJQVNTRVJUKElTTlVMTFNUQVJUQkxPQ0soZ290LmJyX3N0YXJ0YmxvY2spKTsKIAkJCQlBU1NFUlQoU1RBUlRCTE9DS1ZBTChnb3QuYnJfc3RhcnRibG9jaykgPiAwKTsKIAkJCX0KQEAgLTUwNTIsMTQgKzUwMzYsMTUgQEAKIAkJICogVGhlbiBkZWFsIHdpdGggdGhlIGFsbG9jYXRlZCBzcGFjZSB3ZSBmb3VuZC4KIAkJICovCiAJCUFTU0VSVChlcCAhPSBOVUxMKTsKLQkJaWYgKHRyaW0gJiYgKGdvdC5icl9zdGFydG9mZiArIGdvdC5icl9ibG9ja2NvdW50ID4gb2JubykpIHsKKwkJaWYgKCEoZmxhZ3MgJiBYRlNfQk1BUElfRU5USVJFKSAmJgorCQkgICAgKGdvdC5icl9zdGFydG9mZiArIGdvdC5icl9ibG9ja2NvdW50ID4gb2JubykpIHsKIAkJCWlmIChvYm5vID4gYm5vKQogCQkJCWJubyA9IG9ibm87CiAJCQlBU1NFUlQoKGJubyA+PSBvYm5vKSB8fCAobiA9PSAwKSk7CiAJCQlBU1NFUlQoYm5vIDwgZW5kKTsKIAkJCW12YWwtPmJyX3N0YXJ0b2ZmID0gYm5vOwogCQkJaWYgKElTTlVMTFNUQVJUQkxPQ0soZ290LmJyX3N0YXJ0YmxvY2spKSB7Ci0JCQkJQVNTRVJUKCF3ciB8fCBkZWxheSk7CisJCQkJQVNTRVJUKCF3ciB8fCAoZmxhZ3MgJiBYRlNfQk1BUElfREVMQVkpKTsKIAkJCQltdmFsLT5icl9zdGFydGJsb2NrID0gREVMQVlTVEFSVEJMT0NLOwogCQkJfSBlbHNlCiAJCQkJbXZhbC0+YnJfc3RhcnRibG9jayA9CkBAIC01MDgxLDcgKzUwNjYsNyBAQAogCQl9IGVsc2UgewogCQkJKm12YWwgPSBnb3Q7CiAJCQlpZiAoSVNOVUxMU1RBUlRCTE9DSyhtdmFsLT5icl9zdGFydGJsb2NrKSkgewotCQkJCUFTU0VSVCghd3IgfHwgZGVsYXkpOworCQkJCUFTU0VSVCghd3IgfHwgKGZsYWdzICYgWEZTX0JNQVBJX0RFTEFZKSk7CiAJCQkJbXZhbC0+YnJfc3RhcnRibG9jayA9IERFTEFZU1RBUlRCTE9DSzsKIAkJCX0KIAkJfQpAQCAtNTEwNywxMiArNTA5MiwxMiBAQAogCQkJbXZhbC0+YnJfc3RhdGUgPSBYRlNfRVhUX05PUk07CiAJCQllcnJvciA9IHhmc19ibWFwX2FkZF9leHRlbnQoaXAsIGxhc3R4LCAmY3VyLCBtdmFsLAogCQkJCWZpcnN0YmxvY2ssIGZsaXN0LCAmdG1wX2xvZ2ZsYWdzLCB3aGljaGZvcmssCi0JCQkJcnN2ZCk7CisJCQkJKGZsYWdzICYgWEZTX0JNQVBJX1JTVkJMT0NLUykpOwogCQkJbG9nZmxhZ3MgfD0gdG1wX2xvZ2ZsYWdzOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gZXJyb3IwOwogCQkJbGFzdHggPSBpZnAtPmlmX2xhc3RleDsKLQkJCWVwID0gJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tsYXN0eF07CisJCQllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBsYXN0eCk7CiAJCQluZXh0ZW50cyA9IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwogCQkJeGZzX2JtYnRfZ2V0X2FsbChlcCwgJmdvdCk7CiAJCQkvKgpAQCAtNTEyNCw5ICs1MTA5LDEwIEBACiAJCQkJY29udGludWU7CiAJCX0KIAotCQlBU1NFUlQoIXRyaW0gfHwKKwkJQVNTRVJUKChmbGFncyAmIFhGU19CTUFQSV9FTlRJUkUpIHx8CiAJCSAgICAgICAoKG12YWwtPmJyX3N0YXJ0b2ZmICsgbXZhbC0+YnJfYmxvY2tjb3VudCkgPD0gZW5kKSk7Ci0JCUFTU0VSVCghdHJpbSB8fCAobXZhbC0+YnJfYmxvY2tjb3VudCA8PSBsZW4pIHx8CisJCUFTU0VSVCgoZmxhZ3MgJiBYRlNfQk1BUElfRU5USVJFKSB8fAorCQkgICAgICAgKG12YWwtPmJyX2Jsb2NrY291bnQgPD0gbGVuKSB8fAogCQkgICAgICAgKG12YWwtPmJyX3N0YXJ0b2ZmIDwgb2JubykpOwogCQlibm8gPSBtdmFsLT5icl9zdGFydG9mZiArIG12YWwtPmJyX2Jsb2NrY291bnQ7CiAJCWxlbiA9IGVuZCAtIGJubzsKQEAgLTUxNDEsNyArNTEyNyw4IEBACiAJCQkgICBtdmFsWy0xXS5icl9zdGFydGJsb2NrICE9IEhPTEVTVEFSVEJMT0NLICYmCiAJCQkgICBtdmFsLT5icl9zdGFydGJsb2NrID09CiAJCQkgICBtdmFsWy0xXS5icl9zdGFydGJsb2NrICsgbXZhbFstMV0uYnJfYmxvY2tjb3VudCAmJgotCQkJICAgKHN0YXRlbGVzcyB8fCBtdmFsWy0xXS5icl9zdGF0ZSA9PSBtdmFsLT5icl9zdGF0ZSkpIHsKKwkJCSAgICgoZmxhZ3MgJiBYRlNfQk1BUElfSUdTVEFURSkgfHwKKwkJCQltdmFsWy0xXS5icl9zdGF0ZSA9PSBtdmFsLT5icl9zdGF0ZSkpIHsKIAkJCUFTU0VSVChtdmFsLT5icl9zdGFydG9mZiA9PQogCQkJICAgICAgIG12YWxbLTFdLmJyX3N0YXJ0b2ZmICsgbXZhbFstMV0uYnJfYmxvY2tjb3VudCk7CiAJCQltdmFsWy0xXS5icl9ibG9ja2NvdW50ICs9IG12YWwtPmJyX2Jsb2NrY291bnQ7CkBAIC01MTY4LDggKzUxNTUsNyBAQAogCQkvKgogCQkgKiBFbHNlIGdvIG9uIHRvIHRoZSBuZXh0IHJlY29yZC4KIAkJICovCi0JCWVwKys7Ci0JCWxhc3R4Kys7CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsICsrbGFzdHgpOwogCQlpZiAobGFzdHggPj0gbmV4dGVudHMpIHsKIAkJCWVvZiA9IDE7CiAJCQlwcmV2ID0gZ290OwpAQCAtNTE5OSw3ICs1MTg1LDcgQEAKIGVycm9yMDoKIAkvKgogCSAqIExvZyBldmVyeXRoaW5nLiAgRG8gdGhpcyBhZnRlciBjb252ZXJzaW9uLCB0aGVyZSdzIG5vIHBvaW50IGluCi0JICogbG9nZ2luZyB0aGUgZXh0ZW50IGxpc3QgaWYgd2UndmUgY29udmVydGVkIHRvIGJ0cmVlIGZvcm1hdC4KKwkgKiBsb2dnaW5nIHRoZSBleHRlbnQgcmVjb3JkcyBpZiB3ZSd2ZSBjb252ZXJ0ZWQgdG8gYnRyZWUgZm9ybWF0LgogCSAqLwogCWlmICgobG9nZmxhZ3MgJiBYRlNfSUxPR19GRVhUKHdoaWNoZm9yaykpICYmCiAJICAgIFhGU19JRk9SS19GT1JNQVQoaXAsIHdoaWNoZm9yaykgIT0gWEZTX0RJTk9ERV9GTVRfRVhURU5UUykKQEAgLTUyNTIsMTIgKzUyMzgsMTIgQEAKIAl4ZnNfZnNibG9ja190CSpmc2IsCQkvKiBvdXRwdXQ6IG1hcHBlZCBibG9jayAqLwogCXhmc19maWxlb2ZmX3QJYm5vKQkJLyogc3RhcnRpbmcgZmlsZSBvZmZzLiBtYXBwZWQgKi8KIHsKLQlpbnQJCWVvZjsJCS8qIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIGV4dGVudCBsaXN0ICovCisJaW50CQllb2Y7CQkvKiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiBleHRlbnRzICovCiAJaW50CQllcnJvcjsJCS8qIGVycm9yIHJldHVybiAqLwotCXhmc19ibWJ0X2lyZWNfdAlnb3Q7CQkvKiBjdXJyZW50IGV4dGVudCBsaXN0IHJlY29yZCAqLworCXhmc19ibWJ0X2lyZWNfdAlnb3Q7CQkvKiBjdXJyZW50IGZpbGUgZXh0ZW50IHJlY29yZCAqLwogCXhmc19pZm9ya190CSppZnA7CQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KIAl4ZnNfZXh0bnVtX3QJbGFzdHg7CQkvKiBsYXN0IHVzZWZ1bCBleHRlbnQgbnVtYmVyICovCi0JeGZzX2JtYnRfaXJlY190CXByZXY7CQkvKiBwcmV2aW91cyBleHRlbnQgbGlzdCByZWNvcmQgKi8KKwl4ZnNfYm1idF9pcmVjX3QJcHJldjsJCS8qIHByZXZpb3VzIGZpbGUgZXh0ZW50IHJlY29yZCAqLwogCiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKIAlpZiAodW5saWtlbHkoCkBAIC01MzEyLDE4ICs1Mjk4LDE4IEBACiAJeGZzX2J0cmVlX2N1cl90CQkqY3VyOwkJLyogYm1hcCBidHJlZSBjdXJzb3IgKi8KIAl4ZnNfYm1idF9pcmVjX3QJCWRlbDsJCS8qIGV4dGVudCBiZWluZyBkZWxldGVkICovCiAJaW50CQkJZW9mOwkJLyogaXMgZGVsZXRpbmcgYXQgZW9mICovCi0JeGZzX2JtYnRfcmVjX3QJCSplcDsJCS8qIGV4dGVudCBsaXN0IGVudHJ5IHBvaW50ZXIgKi8KKwl4ZnNfYm1idF9yZWNfdAkJKmVwOwkJLyogZXh0ZW50IHJlY29yZCBwb2ludGVyICovCiAJaW50CQkJZXJyb3I7CQkvKiBlcnJvciByZXR1cm4gdmFsdWUgKi8KIAl4ZnNfZXh0bnVtX3QJCWV4dG5vOwkJLyogZXh0ZW50IG51bWJlciBpbiBsaXN0ICovCi0JeGZzX2JtYnRfaXJlY190CQlnb3Q7CQkvKiBjdXJyZW50IGV4dGVudCBsaXN0IGVudHJ5ICovCisJeGZzX2JtYnRfaXJlY190CQlnb3Q7CQkvKiBjdXJyZW50IGV4dGVudCByZWNvcmQgKi8KIAl4ZnNfaWZvcmtfdAkJKmlmcDsJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLwogCWludAkJCWlzcnQ7CQkvKiBmcmVlaW5nIGluIHJ0IGFyZWEgKi8KIAl4ZnNfZXh0bnVtX3QJCWxhc3R4OwkJLyogbGFzdCBleHRlbnQgaW5kZXggdXNlZCAqLwogCWludAkJCWxvZ2ZsYWdzOwkvKiB0cmFuc2FjdGlvbiBsb2dnaW5nIGZsYWdzICovCiAJeGZzX2V4dGxlbl90CQltb2Q7CQkvKiBydCBleHRlbnQgb2Zmc2V0ICovCiAJeGZzX21vdW50X3QJCSptcDsJCS8qIG1vdW50IHN0cnVjdHVyZSAqLwotCXhmc19leHRudW1fdAkJbmV4dGVudHM7CS8qIHNpemUgb2YgZXh0ZW50IGxpc3QgKi8KLQl4ZnNfYm1idF9pcmVjX3QJCXByZXY7CQkvKiBwcmV2aW91cyBleHRlbnQgbGlzdCBlbnRyeSAqLworCXhmc19leHRudW1fdAkJbmV4dGVudHM7CS8qIG51bWJlciBvZiBmaWxlIGV4dGVudHMgKi8KKwl4ZnNfYm1idF9pcmVjX3QJCXByZXY7CQkvKiBwcmV2aW91cyBleHRlbnQgcmVjb3JkICovCiAJeGZzX2ZpbGVvZmZfdAkJc3RhcnQ7CQkvKiBmaXJzdCBmaWxlIG9mZnNldCBkZWxldGVkICovCiAJaW50CQkJdG1wX2xvZ2ZsYWdzOwkvKiBwYXJ0aWFsIGxvZ2dpbmcgZmxhZ3MgKi8KIAlpbnQJCQl3YXNkZWw7CQkvKiB3YXMgYSBkZWxheWVkIGFsbG9jIGV4dGVudCAqLwpAQCAtNTM2OSw3ICs1MzU1LDcgQEAKIAkgKiBmaWxlLCBiYWNrIHVwIHRvIHRoZSBsYXN0IGJsb2NrIGlmIHNvLi4uCiAJICovCiAJaWYgKGVvZikgewotCQllcCA9ICZpZnAtPmlmX3UxLmlmX2V4dGVudHNbLS1sYXN0eF07CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIC0tbGFzdHgpOwogCQl4ZnNfYm1idF9nZXRfYWxsKGVwLCAmZ290KTsKIAkJYm5vID0gZ290LmJyX3N0YXJ0b2ZmICsgZ290LmJyX2Jsb2NrY291bnQgLSAxOwogCX0KQEAgLTUzOTMsNyArNTM3OSw3IEBACiAJCWlmIChnb3QuYnJfc3RhcnRvZmYgPiBibm8pIHsKIAkJCWlmICgtLWxhc3R4IDwgMCkKIAkJCQlicmVhazsKLQkJCWVwLS07CisJCQllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBsYXN0eCk7CiAJCQl4ZnNfYm1idF9nZXRfYWxsKGVwLCAmZ290KTsKIAkJfQogCQkvKgpAQCAtNTQ0MCw3ICs1NDI2LDggQEAKIAkJCQkJZGVsLmJyX2Jsb2NrY291bnQgOiBtb2Q7CiAJCQkJaWYgKGJubyA8IGdvdC5icl9zdGFydG9mZikgewogCQkJCQlpZiAoLS1sYXN0eCA+PSAwKQotCQkJCQkJeGZzX2JtYnRfZ2V0X2FsbCgtLWVwLCAmZ290KTsKKwkJCQkJCXhmc19ibWJ0X2dldF9hbGwoeGZzX2lleHRfZ2V0X2V4dCgKKwkJCQkJCQlpZnAsIGxhc3R4KSwgJmdvdCk7CiAJCQkJfQogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtNTUwMCw3ICs1NDg3LDggQEAKIAkJCQkgKiB0cnkgYWdhaW4uCiAJCQkJICovCiAJCQkJQVNTRVJUKGxhc3R4ID4gMCk7Ci0JCQkJeGZzX2JtYnRfZ2V0X2FsbChlcCAtIDEsICZwcmV2KTsKKwkJCQl4ZnNfYm1idF9nZXRfYWxsKHhmc19pZXh0X2dldF9leHQoaWZwLAorCQkJCQkJbGFzdHggLSAxKSwgJnByZXYpOwogCQkJCUFTU0VSVChwcmV2LmJyX3N0YXRlID09IFhGU19FWFRfTk9STSk7CiAJCQkJQVNTRVJUKCFJU05VTExTVEFSVEJMT0NLKHByZXYuYnJfc3RhcnRibG9jaykpOwogCQkJCUFTU0VSVChkZWwuYnJfc3RhcnRibG9jayA9PQpAQCAtNTU4NywxMiArNTU3NSwxMiBAQAogCQkgKiBJZiBub3QgZG9uZSBnbyBvbiB0byB0aGUgbmV4dCAocHJldmlvdXMpIHJlY29yZC4KIAkJICogUmVzZXQgZXAgaW4gY2FzZSB0aGUgZXh0ZW50cyBhcnJheSB3YXMgcmUtYWxsb2NlZC4KIAkJICovCi0JCWVwID0gJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tsYXN0eF07CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGxhc3R4KTsKIAkJaWYgKGJubyAhPSAoeGZzX2ZpbGVvZmZfdCktMSAmJiBibm8gPj0gc3RhcnQpIHsKIAkJCWlmIChsYXN0eCA+PSBYRlNfSUZPUktfTkVYVEVOVFMoaXAsIHdoaWNoZm9yaykgfHwKIAkJCSAgICB4ZnNfYm1idF9nZXRfc3RhcnRvZmYoZXApID4gYm5vKSB7Ci0JCQkJbGFzdHgtLTsKLQkJCQllcC0tOworCQkJCWlmICgtLWxhc3R4ID49IDApCisJCQkJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGxhc3R4KTsKIAkJCX0KIAkJCWlmIChsYXN0eCA+PSAwKQogCQkJCXhmc19ibWJ0X2dldF9hbGwoZXAsICZnb3QpOwpAQCAtNTYzNiw3ICs1NjI0LDcgQEAKIGVycm9yMDoKIAkvKgogCSAqIExvZyBldmVyeXRoaW5nLiAgRG8gdGhpcyBhZnRlciBjb252ZXJzaW9uLCB0aGVyZSdzIG5vIHBvaW50IGluCi0JICogbG9nZ2luZyB0aGUgZXh0ZW50IGxpc3QgaWYgd2UndmUgY29udmVydGVkIHRvIGJ0cmVlIGZvcm1hdC4KKwkgKiBsb2dnaW5nIHRoZSBleHRlbnQgcmVjb3JkcyBpZiB3ZSd2ZSBjb252ZXJ0ZWQgdG8gYnRyZWUgZm9ybWF0LgogCSAqLwogCWlmICgobG9nZmxhZ3MgJiBYRlNfSUxPR19GRVhUKHdoaWNoZm9yaykpICYmCiAJICAgIFhGU19JRk9SS19GT1JNQVQoaXAsIHdoaWNoZm9yaykgIT0gWEZTX0RJTk9ERV9GTVRfRVhURU5UUykKQEAgLTU4OTIsOSArNTg4MCw5IEBACiB7CiAJaW50CQllcnJvcjsJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLwogCXhmc19pZm9ya190CSppZnA7CQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KLQl4ZnNfYm1idF9yZWNfdAkqbGFzdHJlYzsJLyogZXh0ZW50IGxpc3QgZW50cnkgcG9pbnRlciAqLwotCXhmc19leHRudW1fdAluZXh0ZW50czsJLyogc2l6ZSBvZiBleHRlbnQgbGlzdCAqLwotCXhmc19ibWJ0X2lyZWNfdAlzOwkJLyogZXhwYW5kZWQgZXh0ZW50IGxpc3QgZW50cnkgKi8KKwl4ZnNfYm1idF9yZWNfdAkqbGFzdHJlYzsJLyogZXh0ZW50IHJlY29yZCBwb2ludGVyICovCisJeGZzX2V4dG51bV90CW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZmlsZSBleHRlbnRzICovCisJeGZzX2JtYnRfaXJlY190CXM7CQkvKiBleHBhbmRlZCBleHRlbnQgcmVjb3JkICovCiAKIAlBU1NFUlQod2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspOwogCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7CkBAIC01OTA5LDcgKzU4OTcsNyBAQAogCS8qCiAJICogR28gdG8gdGhlIGxhc3QgZXh0ZW50CiAJICovCi0JbGFzdHJlYyA9ICZpZnAtPmlmX3UxLmlmX2V4dGVudHNbbmV4dGVudHMgLSAxXTsKKwlsYXN0cmVjID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIG5leHRlbnRzIC0gMSk7CiAJeGZzX2JtYnRfZ2V0X2FsbChsYXN0cmVjLCAmcyk7CiAJLyoKIAkgKiBDaGVjayB3ZSBhcmUgYWxsb2NhdGluZyBpbiB0aGUgbGFzdCBleHRlbnQgKGZvciBkZWxheWVkIGFsbG9jYXRpb25zKQpAQCAtNTkzNiw4ICs1OTI0LDggQEAKIAl4ZnNfZnNibG9ja190CWJsb2NrY291bnQ7CS8qIGV4dGVudCBibG9jayBjb3VudCAqLwogCWludAkJZXJyb3I7CQkvKiBlcnJvciByZXR1cm4gdmFsdWUgKi8KIAl4ZnNfaWZvcmtfdAkqaWZwOwkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCi0JeGZzX2JtYnRfcmVjX3QJKmxhc3RyZWM7CS8qIGV4dGVudCBsaXN0IGVudHJ5IHBvaW50ZXIgKi8KLQl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CS8qIHNpemUgb2YgZXh0ZW50IGxpc3QgKi8KKwl4ZnNfYm1idF9yZWNfdAkqbGFzdHJlYzsJLyogZXh0ZW50IHJlY29yZCBwb2ludGVyICovCisJeGZzX2V4dG51bV90CW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZmlsZSBleHRlbnRzICovCiAJeGZzX2ZpbGVvZmZfdAlzdGFydG9mZjsJLyogZXh0ZW50IHN0YXJ0aW5nIGZpbGUgb2Zmc2V0ICovCiAKIAlBU1NFUlQod2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspOwpAQCAtNTk1Myw3ICs1OTQxLDcgQEAKIAkvKgogCSAqIEdvIHRvIHRoZSBsYXN0IGV4dGVudAogCSAqLwotCWxhc3RyZWMgPSAmaWZwLT5pZl91MS5pZl9leHRlbnRzW25leHRlbnRzIC0gMV07CisJbGFzdHJlYyA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBuZXh0ZW50cyAtIDEpOwogCXN0YXJ0b2ZmID0geGZzX2JtYnRfZ2V0X3N0YXJ0b2ZmKGxhc3RyZWMpOwogCWJsb2NrY291bnQgPSB4ZnNfYm1idF9nZXRfYmxvY2tjb3VudChsYXN0cmVjKTsKIAkqZW9mID0gZW5kb2ZmID49IHN0YXJ0b2ZmICsgYmxvY2tjb3VudDsKQEAgLTU5NjksMTggKzU5NTcsMjEgQEAKIAl4ZnNfaW5vZGVfdAkJKmlwLAkJLyogaW5jb3JlIGlub2RlIHBvaW50ZXIgKi8KIAlpbnQJCQl3aGljaGZvcmspCS8qIGRhdGEgb3IgYXR0ciBmb3JrICovCiB7Ci0JeGZzX2JtYnRfcmVjX3QJCSpiYXNlOwkJLyogYmFzZSBvZiBleHRlbnRzIGxpc3QgKi8KIAl4ZnNfYm1idF9yZWNfdAkJKmVwOwkJLyogY3VycmVudCBleHRlbnQgZW50cnkgKi8KKwl4ZnNfZXh0bnVtX3QJCWlkeDsJCS8qIGV4dGVudCByZWNvcmQgaW5kZXggKi8KIAl4ZnNfaWZvcmtfdAkJKmlmcDsJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLwogCXhmc19leHRudW1fdAkJbmV4dGVudHM7CS8qIG51bWJlciBvZiBleHRlbnRzIGluIGxpc3QgKi8KKwl4ZnNfYm1idF9yZWNfdAkJKm5leHRwOwkJLyogbmV4dCBleHRlbnQgZW50cnkgKi8KIAogCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7CiAJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRFTlRTKTsKLQliYXNlID0gaWZwLT5pZl91MS5pZl9leHRlbnRzOwogCW5leHRlbnRzID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7Ci0JZm9yIChlcCA9IGJhc2U7IGVwIDwgJmJhc2VbbmV4dGVudHMgLSAxXTsgZXArKykgeworCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIDApOworCWZvciAoaWR4ID0gMDsgaWR4IDwgbmV4dGVudHMgLSAxOyBpZHgrKykgeworCQluZXh0cCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHggKyAxKTsKIAkJeGZzX2J0cmVlX2NoZWNrX3JlYyhYRlNfQlROVU1fQk1BUCwgKHZvaWQgKillcCwKLQkJCSh2b2lkICopKGVwICsgMSkpOworCQkJKHZvaWQgKikobmV4dHApKTsKKwkJZXAgPSBuZXh0cDsKIAl9CiB9CiAKQEAgLTYxMTksMTIgKzYxMTAsMTQgQEAKIAl4ZnNfZnNibG9ja190CQlibm87CS8qIGJsb2NrICMgb2YgImJsb2NrIiAqLwogCXhmc19idWZfdAkJKmJwOwkvKiBidWZmZXIgZm9yICJibG9jayIgKi8KIAlpbnQJCQllcnJvcjsJLyogZXJyb3IgcmV0dXJuIHZhbHVlICovCi0JeGZzX2V4dG51bV90CQlpPTA7CS8qIGluZGV4IGludG8gdGhlIGV4dGVudHMgbGlzdCAqLworCXhmc19leHRudW1fdAkJaT0wLCBqOwkvKiBpbmRleCBpbnRvIHRoZSBleHRlbnRzIGxpc3QgKi8KIAl4ZnNfaWZvcmtfdAkJKmlmcDsJLyogZm9yayBzdHJ1Y3R1cmUgKi8KIAlpbnQJCQlsZXZlbDsJLyogYnRyZWUgbGV2ZWwsIGZvciBjaGVja2luZyAqLwogCXhmc19tb3VudF90CQkqbXA7CS8qIGZpbGUgc3lzdGVtIG1vdW50IHN0cnVjdHVyZSAqLwogCXhmc19ibWJ0X3B0cl90CQkqcHA7CS8qIHBvaW50ZXIgdG8gYmxvY2sgYWRkcmVzcyAqLwotCXhmc19ibWJ0X3JlY190CQkqZXAsICpsYXN0cDsJLyogZXh0ZW50IHBvaW50ZXJzIGluIGJsb2NrIGVudHJ5ICovCisJeGZzX2JtYnRfcmVjX3QJCSplcDsJLyogcG9pbnRlciB0byBjdXJyZW50IGV4dGVudCAqLworCXhmc19ibWJ0X3JlY190CQkqbGFzdHA7IC8qIHBvaW50ZXIgdG8gcHJldmlvdXMgZXh0ZW50ICovCisJeGZzX2JtYnRfcmVjX3QJCSpuZXh0cDsJLyogcG9pbnRlciB0byBuZXh0IGV4dGVudCAqLwogCWludAkJCWJwX3JlbGVhc2UgPSAwOwogCiAJaWYgKFhGU19JRk9SS19GT1JNQVQoaXAsIHdoaWNoZm9yaykgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUpIHsKQEAgLTYxOTQsNyArNjE4Nyw2IEBACiAJICovCiAJbGFzdHAgPSBOVUxMOwogCWZvciAoOzspIHsKLQkJeGZzX2JtYnRfcmVjX3QJKmZycDsKIAkJeGZzX2ZzYmxvY2tfdAluZXh0Ym5vOwogCQl4ZnNfZXh0bnVtX3QJbnVtX3JlY3M7CiAKQEAgLTYyMTMsMTggKzYyMDUsMjAgQEAKIAkJICogY29uZm9ybSB3aXRoIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGlzIG9uZS4KIAkJICovCiAKLQkJZnJwID0gWEZTX0JUUkVFX1JFQ19BRERSKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSwgeGZzX2JtYnQsCisJCWVwID0gWEZTX0JUUkVFX1JFQ19BRERSKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSwgeGZzX2JtYnQsCiAJCQlibG9jaywgMSwgbXAtPm1fYm1hcF9kbXhyWzBdKTsKLQotCQlmb3IgKGVwID0gZnJwO2VwIDwgZnJwICsgKG51bV9yZWNzIC0gMSk7IGVwKyspIHsKKwkJZm9yIChqID0gMTsgaiA8IG51bV9yZWNzOyBqKyspIHsKKwkJCW5leHRwID0gWEZTX0JUUkVFX1JFQ19BRERSKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSwgeGZzX2JtYnQsCisJCQkJYmxvY2ssIGogKyAxLCBtcC0+bV9ibWFwX2RteHJbMF0pOwogCQkJaWYgKGxhc3RwKSB7CiAJCQkJeGZzX2J0cmVlX2NoZWNrX3JlYyhYRlNfQlROVU1fQk1BUCwKIAkJCQkJKHZvaWQgKilsYXN0cCwgKHZvaWQgKillcCk7CiAJCQl9CiAJCQl4ZnNfYnRyZWVfY2hlY2tfcmVjKFhGU19CVE5VTV9CTUFQLCAodm9pZCAqKWVwLAotCQkJCSh2b2lkICopKGVwICsgMSkpOworCQkJCSh2b2lkICopKG5leHRwKSk7CisJCQlsYXN0cCA9IGVwOworCQkJZXAgPSBuZXh0cDsKIAkJfQotCQlsYXN0cCA9IGZycCArIG51bV9yZWNzIC0gMTsgLyogRm9yIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLwogCiAJCWkgKz0gbnVtX3JlY3M7CiAJCWlmIChicF9yZWxlYXNlKSB7CkBAIC02Mjg4LDcgKzYyODIsNyBAQAogCW1wID0gaXAtPmlfbW91bnQ7CiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKIAlpZiAoIFhGU19JRk9SS19GT1JNQVQoaXAsIHdoaWNoZm9yaykgPT0gWEZTX0RJTk9ERV9GTVRfRVhURU5UUyApIHsKLQkJaWYgKHVubGlrZWx5KHhmc19ibWFwX2NvdW50X2xlYXZlcyhpZnAtPmlmX3UxLmlmX2V4dGVudHMsCisJCWlmICh1bmxpa2VseSh4ZnNfYm1hcF9jb3VudF9sZWF2ZXMoaWZwLCAwLAogCQkJaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCksCiAJCQljb3VudCkgPCAwKSkgewogCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2JtYXBfY291bnRfYmxvY2tzKDEpIiwKQEAgLTYzMTAsNyArNjMwNCw3IEBACiAJQVNTRVJUKFhGU19GU0JfVE9fQUdCTk8obXAsIElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpKSA8IG1wLT5tX3NiLnNiX2FnYmxvY2tzKTsKIAlibm8gPSBJTlRfR0VUKCpwcCwgQVJDSF9DT05WRVJUKTsKIAotCWlmICh1bmxpa2VseSh4ZnNfYm1hcF9jb3VudF90cmVlKG1wLCB0cCwgYm5vLCBsZXZlbCwgY291bnQpIDwgMCkpIHsKKwlpZiAodW5saWtlbHkoeGZzX2JtYXBfY291bnRfdHJlZShtcCwgdHAsIGlmcCwgYm5vLCBsZXZlbCwgY291bnQpIDwgMCkpIHsKIAkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2JtYXBfY291bnRfYmxvY2tzKDIpIiwgWEZTX0VSUkxFVkVMX0xPVywKIAkJCQkgbXApOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CkBAIC02MzI3LDYgKzYzMjEsNyBAQAogeGZzX2JtYXBfY291bnRfdHJlZSgKIAl4ZnNfbW91bnRfdCAgICAgKm1wLCAgICAgICAgICAgIC8qIGZpbGUgc3lzdGVtIG1vdW50IHBvaW50ICovCiAJeGZzX3RyYW5zX3QgICAgICp0cCwgICAgICAgICAgICAvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCisJeGZzX2lmb3JrX3QJKmlmcCwJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLwogCXhmc19mc2Jsb2NrX3QgICBibG9ja25vLAkvKiBmaWxlIHN5c3RlbSBibG9jayBudW1iZXIgKi8KIAlpbnQgICAgICAgICAgICAgbGV2ZWxpbiwJLyogbGV2ZWwgaW4gYnRyZWUgKi8KIAlpbnQJCSpjb3VudCkJCS8qIENvdW50IG9mIGJsb2NrcyAqLwpAQCAtNjMzOSw3ICs2MzM0LDYgQEAKIAl4ZnNfZnNibG9ja190CQluZXh0Ym5vOwogCXhmc19ibWJ0X2Jsb2NrX3QgICAgICAgICpibG9jaywgKm5leHRibG9jazsKIAlpbnQJCQludW1yZWNzOwotCXhmc19ibWJ0X3JlY190CQkqZnJwOwogCiAJaWYgKChlcnJvciA9IHhmc19idHJlZV9yZWFkX2J1ZmwobXAsIHRwLCBibm8sIDAsICZicCwgWEZTX0JNQVBfQlRSRUVfUkVGKSkpCiAJCXJldHVybiBlcnJvcjsKQEAgLTYzNjQsNyArNjM1OCw3IEBACiAJCQl4ZnNfYm1idCwgYmxvY2ssIDEsIG1wLT5tX2JtYXBfZG14clsxXSk7CiAJCWJubyA9IElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpOwogCQlpZiAodW5saWtlbHkoKGVycm9yID0KLQkJICAgICB4ZnNfYm1hcF9jb3VudF90cmVlKG1wLCB0cCwgYm5vLCBsZXZlbCwgY291bnQpKSA8IDApKSB7CisJCSAgICAgeGZzX2JtYXBfY291bnRfdHJlZShtcCwgdHAsIGlmcCwgYm5vLCBsZXZlbCwgY291bnQpKSA8IDApKSB7CiAJCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBicCk7CiAJCQlYRlNfRVJST1JfUkVQT1JUKCJ4ZnNfYm1hcF9jb3VudF90cmVlKDEpIiwKIAkJCQkJIFhGU19FUlJMRVZFTF9MT1csIG1wKTsKQEAgLTYzNzYsOSArNjM3MCw4IEBACiAJCWZvciAoOzspIHsKIAkJCW5leHRibm8gPSBiZTY0X3RvX2NwdShibG9jay0+YmJfcmlnaHRzaWIpOwogCQkJbnVtcmVjcyA9IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKTsKLQkJCWZycCA9IFhGU19CVFJFRV9SRUNfQUREUihtcC0+bV9zYi5zYl9ibG9ja3NpemUsCi0JCQkJeGZzX2JtYnQsIGJsb2NrLCAxLCBtcC0+bV9ibWFwX2RteHJbMF0pOwotCQkJaWYgKHVubGlrZWx5KHhmc19ibWFwX2Rpc2tfY291bnRfbGVhdmVzKGZycCwgbnVtcmVjcywgY291bnQpIDwgMCkpIHsKKwkJCWlmICh1bmxpa2VseSh4ZnNfYm1hcF9kaXNrX2NvdW50X2xlYXZlcyhpZnAsIG1wLAorCQkJCQkwLCBibG9jaywgbnVtcmVjcywgY291bnQpIDwgMCkpIHsKIAkJCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBicCk7CiAJCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2JtYXBfY291bnRfdHJlZSgyKSIsCiAJCQkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbXApOwpAQCAtNjM5OSwzMyArNjM5Miw0NSBAQAogfQogCiAvKgotICogQ291bnQgbGVhZiBibG9ja3MgZ2l2ZW4gYSBwb2ludGVyIHRvIGFuIGV4dGVudCBsaXN0LgorICogQ291bnQgbGVhZiBibG9ja3MgZ2l2ZW4gYSByYW5nZSBvZiBleHRlbnQgcmVjb3Jkcy4KICAqLwogaW50CiB4ZnNfYm1hcF9jb3VudF9sZWF2ZXMoCi0JeGZzX2JtYnRfcmVjX3QJCSpmcnAsCisJeGZzX2lmb3JrX3QJCSppZnAsCisJeGZzX2V4dG51bV90CQlpZHgsCiAJaW50CQkJbnVtcmVjcywKIAlpbnQJCQkqY291bnQpCiB7CiAJaW50CQliOworCXhmc19ibWJ0X3JlY190CSpmcnA7CiAKLQlmb3IgKCBiID0gMTsgYiA8PSBudW1yZWNzOyBiKyssIGZycCsrKQorCWZvciAoYiA9IDA7IGIgPCBudW1yZWNzOyBiKyspIHsKKwkJZnJwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCArIGIpOwogCQkqY291bnQgKz0geGZzX2JtYnRfZ2V0X2Jsb2NrY291bnQoZnJwKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBDb3VudCBsZWFmIGJsb2NrcyBnaXZlbiBhIHBvaW50ZXIgdG8gYW4gZXh0ZW50IGxpc3Qgb3JpZ2luYWxseSBpbiBidHJlZSBmb3JtYXQuCisgKiBDb3VudCBsZWFmIGJsb2NrcyBnaXZlbiBhIHJhbmdlIG9mIGV4dGVudCByZWNvcmRzIG9yaWdpbmFsbHkKKyAqIGluIGJ0cmVlIGZvcm1hdC4KICAqLwogaW50CiB4ZnNfYm1hcF9kaXNrX2NvdW50X2xlYXZlcygKLQl4ZnNfYm1idF9yZWNfdAkJKmZycCwKKwl4ZnNfaWZvcmtfdAkJKmlmcCwKKwl4ZnNfbW91bnRfdAkJKm1wLAorCXhmc19leHRudW1fdAkJaWR4LAorCXhmc19ibWJ0X2Jsb2NrX3QJKmJsb2NrLAogCWludAkJCW51bXJlY3MsCiAJaW50CQkJKmNvdW50KQogewogCWludAkJYjsKKwl4ZnNfYm1idF9yZWNfdAkqZnJwOwogCi0JZm9yICggYiA9IDE7IGIgPD0gbnVtcmVjczsgYisrLCBmcnArKykKKwlmb3IgKGIgPSAxOyBiIDw9IG51bXJlY3M7IGIrKykgeworCQlmcnAgPSBYRlNfQlRSRUVfUkVDX0FERFIobXAtPm1fc2Iuc2JfYmxvY2tzaXplLAorCQkJeGZzX2JtYnQsIGJsb2NrLCBpZHggKyBiLCBtcC0+bV9ibWFwX2RteHJbMF0pOwogCQkqY291bnQgKz0geGZzX2JtYnRfZGlza19nZXRfYmxvY2tjb3VudChmcnApOworCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5oIGIvZnMveGZzL3hmc19ibWFwLmgKaW5kZXggMTJjYzYzZC4uMDExY2NhYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmgKKysrIGIvZnMveGZzL3hmc19ibWFwLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAogc3RydWN0IGdldGJtYXA7CiBzdHJ1Y3QgeGZzX2JtYnRfaXJlYzsKK3N0cnVjdCB4ZnNfaWZvcms7CiBzdHJ1Y3QgeGZzX2lub2RlOwogc3RydWN0IHhmc19tb3VudDsKIHN0cnVjdCB4ZnNfdHJhbnM7CkBAIC0zNDcsOSArMzQ4LDI4IEBACiAgKi8KIGludAogeGZzX2NoZWNrX25vc3RhdGVfZXh0ZW50cygKLQl4ZnNfYm1idF9yZWNfdAkJKmVwLAorCXN0cnVjdCB4ZnNfaWZvcmsJKmlmcCwKKwl4ZnNfZXh0bnVtX3QJCWlkeCwKIAl4ZnNfZXh0bnVtX3QJCW51bSk7CiAKKy8qCisgKiBDYWxsIHhmc19ibWFwX2RvX3NlYXJjaF9leHRlbnRzKCkgdG8gc2VhcmNoIGZvciB0aGUgZXh0ZW50CisgKiByZWNvcmQgY29udGFpbmluZyBibG9jayBibm8uIElmIGluIG11bHRpLWxldmVsIGluLWNvcmUgZXh0ZW50CisgKiBhbGxvY2F0aW9uIG1vZGUsIGZpbmQgYW5kIGV4dHJhY3QgdGhlIHRhcmdldCBleHRlbnQgYnVmZmVyLAorICogb3RoZXJ3aXNlIGp1c3QgdXNlIHRoZSBkaXJlY3QgZXh0ZW50IGxpc3QuCisgKi8KK3hmc19ibWJ0X3JlY190ICoKK3hmc19ibWFwX3NlYXJjaF9tdWx0aV9leHRlbnRzKHN0cnVjdCB4ZnNfaWZvcmsgKiwgeGZzX2ZpbGVvZmZfdCwgaW50ICosCisJCQl4ZnNfZXh0bnVtX3QgKiwgeGZzX2JtYnRfaXJlY190ICosIHhmc19ibWJ0X2lyZWNfdCAqKTsKKworLyoKKyAqIFNlYXJjaCBhbiBleHRlbnQgbGlzdCBmb3IgdGhlIGV4dGVudCB3aGljaCBpbmNsdWRlcyBibG9jaworICogYm5vLgorICovCit4ZnNfYm1idF9yZWNfdCAqeGZzX2JtYXBfZG9fc2VhcmNoX2V4dGVudHMoeGZzX2JtYnRfcmVjX3QgKiwKKwkJCXhmc19leHRudW1fdCwgeGZzX2V4dG51bV90LCB4ZnNfZmlsZW9mZl90LCBpbnQgKiwKKwkJCXhmc19leHRudW1fdCAqLCB4ZnNfYm1idF9pcmVjX3QgKiwgeGZzX2JtYnRfaXJlY190ICopOworCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX19YRlNfQk1BUF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKaW5kZXggM2YxMzgzZC4uYmVhNDQ3MDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jCkBAIC0yNzU0LDcgKzI3NTQsNyBAQAogfQogCiAvKgotICogQ2hlY2sgYW4gZXh0ZW50IGxpc3QsIHdoaWNoIGhhcyBqdXN0IGJlZW4gcmVhZCwgZm9yCisgKiBDaGVjayBleHRlbnQgcmVjb3Jkcywgd2hpY2ggaGF2ZSBqdXN0IGJlZW4gcmVhZCwgZm9yCiAgKiBhbnkgYml0IGluIHRoZSBleHRlbnQgZmxhZyBmaWVsZC4gQVNTRVJUIG9uIGRlYnVnCiAgKiBrZXJuZWxzLCBhcyB0aGlzIGNvbmRpdGlvbiBzaG91bGQgbm90IG9jY3VyLgogICogUmV0dXJuIGFuIGVycm9yIGNvbmRpdGlvbiAoMSkgaWYgYW55IGZsYWdzIGZvdW5kLApAQCAtMjc2MywxMCArMjc2MywxNCBAQAogCiBpbnQKIHhmc19jaGVja19ub3N0YXRlX2V4dGVudHMoCi0JeGZzX2JtYnRfcmVjX3QJCSplcCwKKwl4ZnNfaWZvcmtfdAkJKmlmcCwKKwl4ZnNfZXh0bnVtX3QJCWlkeCwKIAl4ZnNfZXh0bnVtX3QJCW51bSkKIHsKLQlmb3IgKDsgbnVtID4gMDsgbnVtLS0sIGVwKyspIHsKKwl4ZnNfYm1idF9yZWNfdAkJKmVwOworCisJZm9yICg7IG51bSA+IDA7IG51bS0tLCBpZHgrKykgeworCQllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBpZHgpOwogCQlpZiAoKGVwLT5sMCA+PgogCQkgICAgICg2NCAtIEJNQlRfRVhOVEZMQUdfQklUTEVOKSkgIT0gMCkgewogCQkJQVNTRVJUKDApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmggYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaAppbmRleCBlMDk1YTJkLi42NDc4Y2ZhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaApAQCAtMzcyLDE0ICszNzIsNiBAQAogCQkJCXhmc19leG50c3RfdCAqLCBpbnQgKik7CiAjZW5kaWYKIAotLyoKLSAqIFNlYXJjaCBhbiBleHRlbnQgbGlzdCBmb3IgdGhlIGV4dGVudCB3aGljaCBpbmNsdWRlcyBibG9jawotICogYm5vLgotICovCi14ZnNfYm1idF9yZWNfdCAqeGZzX2JtYXBfZG9fc2VhcmNoX2V4dGVudHMoeGZzX2JtYnRfcmVjX3QgKiwKLQkJCXhmc19leHRudW1fdCwgeGZzX2V4dG51bV90LCB4ZnNfZmlsZW9mZl90LCBpbnQgKiwKLQkJCXhmc19leHRudW1fdCAqLCB4ZnNfYm1idF9pcmVjX3QgKiwgeGZzX2JtYnRfaXJlY190ICopOwotCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX19YRlNfQk1BUF9CVFJFRV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfY2xudC5oIGIvZnMveGZzL3hmc19jbG50LmgKaW5kZXggZjU3Y2M5YS4uMDIyZmZmNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19jbG50LmgKKysrIGIvZnMveGZzL3hmc19jbG50LmgKQEAgLTY4LDggKzY4LDYgQEAKIAkJCQkJCSAqIGVuZm9yY2VtZW50ICovCiAjZGVmaW5lIFhGU01OVF9QUVVPVEFFTkYJMHgwMDAwMDA0MAkvKiBJUklYIHByb2plY3QgcXVvdGEgbGltaXQKIAkJCQkJCSAqIGVuZm9yY2VtZW50ICovCi0jZGVmaW5lIFhGU01OVF9OT0FUSU1FCQkweDAwMDAwMTAwCS8qIGRvbid0IG1vZGlmeSBhY2Nlc3MKLQkJCQkJCSAqIHRpbWVzIG9uIHJlYWRzICovCiAjZGVmaW5lIFhGU01OVF9OT0FMSUdOCQkweDAwMDAwMjAwCS8qIGRvbid0IGFsbG9jYXRlIGF0CiAJCQkJCQkgKiBzdHJpcGUgYm91bmRhcmllcyovCiAjZGVmaW5lIFhGU01OVF9SRVRFUlIJCTB4MDAwMDA0MDAJLyogcmV0dXJuIGVycm9yIHRvIHVzZXIgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwppbmRleCA0NzM2NzFmLi40YmFlM2E3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCkBAIC0xMjYsMTAgKzEyNiwxMCBAQAogCW5vZGUgPSBicC0+ZGF0YTsKIAlub2RlLT5oZHIuaW5mby5mb3J3ID0gMDsKIAlub2RlLT5oZHIuaW5mby5iYWNrID0gMDsKLQlJTlRfU0VUKG5vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQsIFhGU19EQV9OT0RFX01BR0lDKTsKKwlub2RlLT5oZHIuaW5mby5tYWdpYyA9IGNwdV90b19iZTE2KFhGU19EQV9OT0RFX01BR0lDKTsKIAlub2RlLT5oZHIuaW5mby5wYWQgPSAwOwogCW5vZGUtPmhkci5jb3VudCA9IDA7Ci0JSU5UX1NFVChub2RlLT5oZHIubGV2ZWwsIEFSQ0hfQ09OVkVSVCwgbGV2ZWwpOworCW5vZGUtPmhkci5sZXZlbCA9IGNwdV90b19iZTE2KGxldmVsKTsKIAogCXhmc19kYV9sb2dfYnVmKHRwLCBicCwKIAkJWEZTX0RBX0xPR1JBTkdFKG5vZGUsICZub2RlLT5oZHIsIHNpemVvZihub2RlLT5oZHIpKSk7CkBAIC0yOTAsMjggKzI5MCwyOCBAQAogCiAJbm9kZSA9IG9sZGJsay0+YnAtPmRhdGE7CiAJaWYgKG5vZGUtPmhkci5pbmZvLmZvcncpIHsKLQkJaWYgKElOVF9HRVQobm9kZS0+aGRyLmluZm8uZm9ydywgQVJDSF9DT05WRVJUKSA9PSBhZGRibGstPmJsa25vKSB7CisJCWlmIChiZTMyX3RvX2NwdShub2RlLT5oZHIuaW5mby5mb3J3KSA9PSBhZGRibGstPmJsa25vKSB7CiAJCQlicCA9IGFkZGJsay0+YnA7CiAJCX0gZWxzZSB7CiAJCQlBU1NFUlQoc3RhdGUtPmV4dHJhdmFsaWQpOwogCQkJYnAgPSBzdGF0ZS0+ZXh0cmFibGsuYnA7CiAJCX0KIAkJbm9kZSA9IGJwLT5kYXRhOwotCQlJTlRfU0VUKG5vZGUtPmhkci5pbmZvLmJhY2ssIEFSQ0hfQ09OVkVSVCwgb2xkYmxrLT5ibGtubyk7CisJCW5vZGUtPmhkci5pbmZvLmJhY2sgPSBjcHVfdG9fYmUzMihvbGRibGstPmJsa25vKTsKIAkJeGZzX2RhX2xvZ19idWYoc3RhdGUtPmFyZ3MtPnRyYW5zLCBicCwKIAkJICAgIFhGU19EQV9MT0dSQU5HRShub2RlLCAmbm9kZS0+aGRyLmluZm8sCiAJCSAgICBzaXplb2Yobm9kZS0+aGRyLmluZm8pKSk7CiAJfQogCW5vZGUgPSBvbGRibGstPmJwLT5kYXRhOwotCWlmIChJTlRfR0VUKG5vZGUtPmhkci5pbmZvLmJhY2ssIEFSQ0hfQ09OVkVSVCkpIHsKLQkJaWYgKElOVF9HRVQobm9kZS0+aGRyLmluZm8uYmFjaywgQVJDSF9DT05WRVJUKSA9PSBhZGRibGstPmJsa25vKSB7CisJaWYgKG5vZGUtPmhkci5pbmZvLmJhY2spIHsKKwkJaWYgKGJlMzJfdG9fY3B1KG5vZGUtPmhkci5pbmZvLmJhY2spID09IGFkZGJsay0+Ymxrbm8pIHsKIAkJCWJwID0gYWRkYmxrLT5icDsKIAkJfSBlbHNlIHsKIAkJCUFTU0VSVChzdGF0ZS0+ZXh0cmF2YWxpZCk7CiAJCQlicCA9IHN0YXRlLT5leHRyYWJsay5icDsKIAkJfQogCQlub2RlID0gYnAtPmRhdGE7Ci0JCUlOVF9TRVQobm9kZS0+aGRyLmluZm8uZm9ydywgQVJDSF9DT05WRVJULCBvbGRibGstPmJsa25vKTsKKwkJbm9kZS0+aGRyLmluZm8uZm9ydyA9IGNwdV90b19iZTMyKG9sZGJsay0+Ymxrbm8pOwogCQl4ZnNfZGFfbG9nX2J1ZihzdGF0ZS0+YXJncy0+dHJhbnMsIGJwLAogCQkgICAgWEZTX0RBX0xPR1JBTkdFKG5vZGUsICZub2RlLT5oZHIuaW5mbywKIAkJICAgIHNpemVvZihub2RlLT5oZHIuaW5mbykpKTsKQEAgLTM1OSwxNCArMzU5LDE0IEBACiAJQVNTRVJUKGJwICE9IE5VTEwpOwogCW5vZGUgPSBicC0+ZGF0YTsKIAlvbGRyb290ID0gYmxrMS0+YnAtPmRhdGE7Ci0JaWYgKElOVF9HRVQob2xkcm9vdC0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RBX05PREVfTUFHSUMpIHsKLQkJc2l6ZSA9IChpbnQpKChjaGFyICopJm9sZHJvb3QtPmJ0cmVlW0lOVF9HRVQob2xkcm9vdC0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpXSAtCisJaWYgKGJlMTZfdG9fY3B1KG9sZHJvb3QtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfREFfTk9ERV9NQUdJQykgeworCQlzaXplID0gKGludCkoKGNoYXIgKikmb2xkcm9vdC0+YnRyZWVbYmUxNl90b19jcHUob2xkcm9vdC0+aGRyLmNvdW50KV0gLQogCQkJICAgICAoY2hhciAqKW9sZHJvb3QpOwogCX0gZWxzZSB7CiAJCUFTU0VSVChYRlNfRElSX0lTX1YyKG1wKSk7Ci0JCUFTU0VSVChJTlRfR0VUKG9sZHJvb3QtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKTsKKwkJQVNTRVJUKGJlMTZfdG9fY3B1KG9sZHJvb3QtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CiAJCWxlYWYgPSAoeGZzX2RpcjJfbGVhZl90ICopb2xkcm9vdDsKLQkJc2l6ZSA9IChpbnQpKChjaGFyICopJmxlYWYtPmVudHNbSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCldIC0KKwkJc2l6ZSA9IChpbnQpKChjaGFyICopJmxlYWYtPmVudHNbYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KV0gLQogCQkJICAgICAoY2hhciAqKWxlYWYpOwogCX0KIAltZW1jcHkobm9kZSwgb2xkcm9vdCwgc2l6ZSk7CkBAIC0zODEsMTggKzM4MSwxOCBAQAogCWVycm9yID0geGZzX2RhX25vZGVfY3JlYXRlKGFyZ3MsCiAJCWFyZ3MtPndoaWNoZm9yayA9PSBYRlNfREFUQV9GT1JLICYmCiAJCVhGU19ESVJfSVNfVjIobXApID8gbXAtPm1fZGlybGVhZmJsayA6IDAsCi0JCUlOVF9HRVQobm9kZS0+aGRyLmxldmVsLCBBUkNIX0NPTlZFUlQpICsgMSwgJmJwLCBhcmdzLT53aGljaGZvcmspOworCQliZTE2X3RvX2NwdShub2RlLT5oZHIubGV2ZWwpICsgMSwgJmJwLCBhcmdzLT53aGljaGZvcmspOwogCWlmIChlcnJvcikKIAkJcmV0dXJuKGVycm9yKTsKIAlub2RlID0gYnAtPmRhdGE7Ci0JSU5UX1NFVChub2RlLT5idHJlZVswXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQsIGJsazEtPmhhc2h2YWwpOwotCUlOVF9TRVQobm9kZS0+YnRyZWVbMF0uYmVmb3JlLCBBUkNIX0NPTlZFUlQsIGJsazEtPmJsa25vKTsKLQlJTlRfU0VUKG5vZGUtPmJ0cmVlWzFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCwgYmxrMi0+aGFzaHZhbCk7Ci0JSU5UX1NFVChub2RlLT5idHJlZVsxXS5iZWZvcmUsIEFSQ0hfQ09OVkVSVCwgYmxrMi0+Ymxrbm8pOwotCUlOVF9TRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQsIDIpOworCW5vZGUtPmJ0cmVlWzBdLmhhc2h2YWwgPSBjcHVfdG9fYmUzMihibGsxLT5oYXNodmFsKTsKKwlub2RlLT5idHJlZVswXS5iZWZvcmUgPSBjcHVfdG9fYmUzMihibGsxLT5ibGtubyk7CisJbm9kZS0+YnRyZWVbMV0uaGFzaHZhbCA9IGNwdV90b19iZTMyKGJsazItPmhhc2h2YWwpOworCW5vZGUtPmJ0cmVlWzFdLmJlZm9yZSA9IGNwdV90b19iZTMyKGJsazItPmJsa25vKTsKKwlub2RlLT5oZHIuY291bnQgPSBjcHVfdG9fYmUxNigyKTsKIAogI2lmZGVmIERFQlVHCi0JaWYgKElOVF9HRVQob2xkcm9vdC0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpIHsKKwlpZiAoYmUxNl90b19jcHUob2xkcm9vdC0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKSB7CiAJCUFTU0VSVChibGsxLT5ibGtubyA+PSBtcC0+bV9kaXJsZWFmYmxrICYmCiAJCSAgICAgICBibGsxLT5ibGtubyA8IG1wLT5tX2RpcmZyZWVibGspOwogCQlBU1NFUlQoYmxrMi0+Ymxrbm8gPj0gbXAtPm1fZGlybGVhZmJsayAmJgpAQCAtNDI0LDcgKzQyNCw3IEBACiAJaW50IHVzZWV4dHJhOwogCiAJbm9kZSA9IG9sZGJsay0+YnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobm9kZS0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RBX05PREVfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShub2RlLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpOwogCiAJLyoKIAkgKiBXaXRoIFYyIHRoZSBleHRyYSBibG9jayBpcyBkYXRhIG9yIGZyZWVzcGFjZS4KQEAgLTQzNSw3ICs0MzUsNyBAQAogCS8qCiAJICogRG8gd2UgaGF2ZSB0byBzcGxpdCB0aGUgbm9kZT8KIAkgKi8KLQlpZiAoKElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICsgbmV3Y291bnQpID4gc3RhdGUtPm5vZGVfZW50cykgeworCWlmICgoYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KSArIG5ld2NvdW50KSA+IHN0YXRlLT5ub2RlX2VudHMpIHsKIAkJLyoKIAkJICogQWxsb2NhdGUgYSBuZXcgbm9kZSwgYWRkIHRvIHRoZSBkb3VibHkgbGlua2VkIGNoYWluIG9mCiAJCSAqIG5vZGVzLCB0aGVuIG1vdmUgc29tZSBvZiBvdXIgZXhjZXNzIGVudHJpZXMgaW50byBpdC4KQEAgLTQ3Miw3ICs0NzIsNyBAQAogCSAqIElmIHdlIGhhZCBkb3VibGUtc3BsaXQgb3AgYmVsb3cgdXMsIHRoZW4gYWRkIHRoZSBleHRyYSBibG9jayB0b28uCiAJICovCiAJbm9kZSA9IG9sZGJsay0+YnAtPmRhdGE7Ci0JaWYgKG9sZGJsay0+aW5kZXggPD0gSU5UX0dFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpIHsKKwlpZiAob2xkYmxrLT5pbmRleCA8PSBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpKSB7CiAJCW9sZGJsay0+aW5kZXgrKzsKIAkJeGZzX2RhX25vZGVfYWRkKHN0YXRlLCBvbGRibGssIGFkZGJsayk7CiAJCWlmICh1c2VleHRyYSkgewpAQCAtNTE2LDE3ICs1MTYsMTcgQEAKIAkgKiBGaWd1cmUgb3V0IGhvdyBtYW55IGVudHJpZXMgbmVlZCB0byBtb3ZlLCBhbmQgaW4gd2hpY2ggZGlyZWN0aW9uLgogCSAqIFN3YXAgdGhlIG5vZGVzIGFyb3VuZCBpZiB0aGF0IG1ha2VzIGl0IHNpbXBsZXIuCiAJICovCi0JaWYgKChJTlRfR0VUKG5vZGUxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgPiAwKSAmJiAoSU5UX0dFVChub2RlMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID4gMCkgJiYKLQkgICAgKChJTlRfR0VUKG5vZGUyLT5idHJlZVsgMCBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPCBJTlRfR0VUKG5vZGUxLT5idHJlZVsgMCBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkpIHx8Ci0JICAgICAoSU5UX0dFVChub2RlMi0+YnRyZWVbIElOVF9HRVQobm9kZTItPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xIF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSA8Ci0JICAgICAgSU5UX0dFVChub2RlMS0+YnRyZWVbIElOVF9HRVQobm9kZTEtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xIF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSkpKSB7CisJaWYgKChiZTE2X3RvX2NwdShub2RlMS0+aGRyLmNvdW50KSA+IDApICYmIChiZTE2X3RvX2NwdShub2RlMi0+aGRyLmNvdW50KSA+IDApICYmCisJICAgICgoYmUzMl90b19jcHUobm9kZTItPmJ0cmVlWzBdLmhhc2h2YWwpIDwgYmUzMl90b19jcHUobm9kZTEtPmJ0cmVlWzBdLmhhc2h2YWwpKSB8fAorCSAgICAgKGJlMzJfdG9fY3B1KG5vZGUyLT5idHJlZVtiZTE2X3RvX2NwdShub2RlMi0+aGRyLmNvdW50KS0xXS5oYXNodmFsKSA8CisJICAgICAgYmUzMl90b19jcHUobm9kZTEtPmJ0cmVlW2JlMTZfdG9fY3B1KG5vZGUxLT5oZHIuY291bnQpLTFdLmhhc2h2YWwpKSkpIHsKIAkJdG1wbm9kZSA9IG5vZGUxOwogCQlub2RlMSA9IG5vZGUyOwogCQlub2RlMiA9IHRtcG5vZGU7CiAJfQotCUFTU0VSVChJTlRfR0VUKG5vZGUxLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfREFfTk9ERV9NQUdJQyk7Ci0JQVNTRVJUKElOVF9HRVQobm9kZTItPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKTsKLQljb3VudCA9IChJTlRfR0VUKG5vZGUxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSBJTlRfR0VUKG5vZGUyLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpIC8gMjsKKwlBU1NFUlQoYmUxNl90b19jcHUobm9kZTEtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfREFfTk9ERV9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KG5vZGUyLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpOworCWNvdW50ID0gKGJlMTZfdG9fY3B1KG5vZGUxLT5oZHIuY291bnQpIC0gYmUxNl90b19jcHUobm9kZTItPmhkci5jb3VudCkpIC8gMjsKIAlpZiAoY291bnQgPT0gMCkKIAkJcmV0dXJuOwogCXRwID0gc3RhdGUtPmFyZ3MtPnRyYW5zOwpAQCAtNTM3LDcgKzUzNyw3IEBACiAJCS8qCiAJCSAqIE1vdmUgZWxlbWVudHMgaW4gbm9kZTIgdXAgdG8gbWFrZSBhIGhvbGUuCiAJCSAqLwotCQlpZiAoKHRtcCA9IElOVF9HRVQobm9kZTItPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkgPiAwKSB7CisJCWlmICgodG1wID0gYmUxNl90b19jcHUobm9kZTItPmhkci5jb3VudCkpID4gMCkgewogCQkJdG1wICo9ICh1aW50KXNpemVvZih4ZnNfZGFfbm9kZV9lbnRyeV90KTsKIAkJCWJ0cmVlX3MgPSAmbm9kZTItPmJ0cmVlWzBdOwogCQkJYnRyZWVfZCA9ICZub2RlMi0+YnRyZWVbY291bnRdOwpAQCAtNTQ4LDEzICs1NDgsMTIgQEAKIAkJICogTW92ZSB0aGUgcmVxJ2QgQi10cmVlIGVsZW1lbnRzIGZyb20gaGlnaCBpbiBub2RlMSB0bwogCQkgKiBsb3cgaW4gbm9kZTIuCiAJCSAqLwotCQlJTlRfTU9EKG5vZGUyLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCwgY291bnQpOworCQliZTE2X2FkZCgmbm9kZTItPmhkci5jb3VudCwgY291bnQpOwogCQl0bXAgPSBjb3VudCAqICh1aW50KXNpemVvZih4ZnNfZGFfbm9kZV9lbnRyeV90KTsKLQkJYnRyZWVfcyA9ICZub2RlMS0+YnRyZWVbSU5UX0dFVChub2RlMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gY291bnRdOworCQlidHJlZV9zID0gJm5vZGUxLT5idHJlZVtiZTE2X3RvX2NwdShub2RlMS0+aGRyLmNvdW50KSAtIGNvdW50XTsKIAkJYnRyZWVfZCA9ICZub2RlMi0+YnRyZWVbMF07CiAJCW1lbWNweShidHJlZV9kLCBidHJlZV9zLCB0bXApOwotCQlJTlRfTU9EKG5vZGUxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCwgLShjb3VudCkpOwotCisJCWJlMTZfYWRkKCZub2RlMS0+aGRyLmNvdW50LCAtY291bnQpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIE1vdmUgdGhlIHJlcSdkIEItdHJlZSBlbGVtZW50cyBmcm9tIGxvdyBpbiBub2RlMiB0bwpAQCAtNTYzLDIxICs1NjIsMjEgQEAKIAkJY291bnQgPSAtY291bnQ7CiAJCXRtcCA9IGNvdW50ICogKHVpbnQpc2l6ZW9mKHhmc19kYV9ub2RlX2VudHJ5X3QpOwogCQlidHJlZV9zID0gJm5vZGUyLT5idHJlZVswXTsKLQkJYnRyZWVfZCA9ICZub2RlMS0+YnRyZWVbSU5UX0dFVChub2RlMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpXTsKKwkJYnRyZWVfZCA9ICZub2RlMS0+YnRyZWVbYmUxNl90b19jcHUobm9kZTEtPmhkci5jb3VudCldOwogCQltZW1jcHkoYnRyZWVfZCwgYnRyZWVfcywgdG1wKTsKLQkJSU5UX01PRChub2RlMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQsIGNvdW50KTsKKwkJYmUxNl9hZGQoJm5vZGUxLT5oZHIuY291bnQsIGNvdW50KTsKIAkJeGZzX2RhX2xvZ19idWYodHAsIGJsazEtPmJwLAogCQkJWEZTX0RBX0xPR1JBTkdFKG5vZGUxLCBidHJlZV9kLCB0bXApKTsKIAogCQkvKgogCQkgKiBNb3ZlIGVsZW1lbnRzIGluIG5vZGUyIGRvd24gdG8gZmlsbCB0aGUgaG9sZS4KIAkJICovCi0JCXRtcCAgPSBJTlRfR0VUKG5vZGUyLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSBjb3VudDsKKwkJdG1wICA9IGJlMTZfdG9fY3B1KG5vZGUyLT5oZHIuY291bnQpIC0gY291bnQ7CiAJCXRtcCAqPSAodWludClzaXplb2YoeGZzX2RhX25vZGVfZW50cnlfdCk7CiAJCWJ0cmVlX3MgPSAmbm9kZTItPmJ0cmVlW2NvdW50XTsKIAkJYnRyZWVfZCA9ICZub2RlMi0+YnRyZWVbMF07CiAJCW1lbW1vdmUoYnRyZWVfZCwgYnRyZWVfcywgdG1wKTsKLQkJSU5UX01PRChub2RlMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQsIC0oY291bnQpKTsKKwkJYmUxNl9hZGQoJm5vZGUyLT5oZHIuY291bnQsIC1jb3VudCk7CiAJfQogCiAJLyoKQEAgLTU4OCw3ICs1ODcsNyBAQAogCXhmc19kYV9sb2dfYnVmKHRwLCBibGsyLT5icCwKIAkJWEZTX0RBX0xPR1JBTkdFKG5vZGUyLCAmbm9kZTItPmhkciwKIAkJCXNpemVvZihub2RlMi0+aGRyKSArCi0JCQlzaXplb2Yobm9kZTItPmJ0cmVlWzBdKSAqIElOVF9HRVQobm9kZTItPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkpOworCQkJc2l6ZW9mKG5vZGUyLT5idHJlZVswXSkgKiBiZTE2X3RvX2NwdShub2RlMi0+aGRyLmNvdW50KSkpOwogCiAJLyoKIAkgKiBSZWNvcmQgdGhlIGxhc3QgaGFzaHZhbCBmcm9tIGVhY2ggYmxvY2sgZm9yIHVwd2FyZCBwcm9wYWdhdGlvbi4KQEAgLTU5NiwxNSArNTk1LDE1IEBACiAJICovCiAJbm9kZTEgPSBibGsxLT5icC0+ZGF0YTsKIAlub2RlMiA9IGJsazItPmJwLT5kYXRhOwotCWJsazEtPmhhc2h2YWwgPSBJTlRfR0VUKG5vZGUxLT5idHJlZVsgSU5UX0dFVChub2RlMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpOwotCWJsazItPmhhc2h2YWwgPSBJTlRfR0VUKG5vZGUyLT5idHJlZVsgSU5UX0dFVChub2RlMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpOworCWJsazEtPmhhc2h2YWwgPSBiZTMyX3RvX2NwdShub2RlMS0+YnRyZWVbYmUxNl90b19jcHUobm9kZTEtPmhkci5jb3VudCktMV0uaGFzaHZhbCk7CisJYmxrMi0+aGFzaHZhbCA9IGJlMzJfdG9fY3B1KG5vZGUyLT5idHJlZVtiZTE2X3RvX2NwdShub2RlMi0+aGRyLmNvdW50KS0xXS5oYXNodmFsKTsKIAogCS8qCiAJICogQWRqdXN0IHRoZSBleHBlY3RlZCBpbmRleCBmb3IgaW5zZXJ0aW9uLgogCSAqLwotCWlmIChibGsxLT5pbmRleCA+PSBJTlRfR0VUKG5vZGUxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpIHsKLQkJYmxrMi0+aW5kZXggPSBibGsxLT5pbmRleCAtIElOVF9HRVQobm9kZTEtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKLQkJYmxrMS0+aW5kZXggPSBJTlRfR0VUKG5vZGUxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgKyAxOwkvKiBtYWtlIGl0IGludmFsaWQgKi8KKwlpZiAoYmxrMS0+aW5kZXggPj0gYmUxNl90b19jcHUobm9kZTEtPmhkci5jb3VudCkpIHsKKwkJYmxrMi0+aW5kZXggPSBibGsxLT5pbmRleCAtIGJlMTZfdG9fY3B1KG5vZGUxLT5oZHIuY291bnQpOworCQlibGsxLT5pbmRleCA9IGJlMTZfdG9fY3B1KG5vZGUxLT5oZHIuY291bnQpICsgMTsJLyogbWFrZSBpdCBpbnZhbGlkICovCiAJfQogfQogCkBAIC02MjIsOCArNjIxLDggQEAKIAogCW5vZGUgPSBvbGRibGstPmJwLT5kYXRhOwogCW1wID0gc3RhdGUtPm1wOwotCUFTU0VSVChJTlRfR0VUKG5vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKTsKLQlBU1NFUlQoKG9sZGJsay0+aW5kZXggPj0gMCkgJiYgKG9sZGJsay0+aW5kZXggPD0gSU5UX0dFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobm9kZS0+aGRyLmluZm8ubWFnaWMpID09IFhGU19EQV9OT0RFX01BR0lDKTsKKwlBU1NFUlQoKG9sZGJsay0+aW5kZXggPj0gMCkgJiYgKG9sZGJsay0+aW5kZXggPD0gYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KSkpOwogCUFTU0VSVChuZXdibGstPmJsa25vICE9IDApOwogCWlmIChzdGF0ZS0+YXJncy0+d2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUksgJiYgWEZTX0RJUl9JU19WMihtcCkpCiAJCUFTU0VSVChuZXdibGstPmJsa25vID49IG1wLT5tX2RpcmxlYWZibGsgJiYKQEAgLTYzNCwyMiArNjMzLDIyIEBACiAJICovCiAJdG1wID0gMDsKIAlidHJlZSA9ICZub2RlLT5idHJlZVsgb2xkYmxrLT5pbmRleCBdOwotCWlmIChvbGRibGstPmluZGV4IDwgSU5UX0dFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpIHsKLQkJdG1wID0gKElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gb2xkYmxrLT5pbmRleCkgKiAodWludClzaXplb2YoKmJ0cmVlKTsKKwlpZiAob2xkYmxrLT5pbmRleCA8IGJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCkpIHsKKwkJdG1wID0gKGJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCkgLSBvbGRibGstPmluZGV4KSAqICh1aW50KXNpemVvZigqYnRyZWUpOwogCQltZW1tb3ZlKGJ0cmVlICsgMSwgYnRyZWUsIHRtcCk7CiAJfQotCUlOVF9TRVQoYnRyZWUtPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCwgbmV3YmxrLT5oYXNodmFsKTsKLQlJTlRfU0VUKGJ0cmVlLT5iZWZvcmUsIEFSQ0hfQ09OVkVSVCwgbmV3YmxrLT5ibGtubyk7CisJYnRyZWUtPmhhc2h2YWwgPSBjcHVfdG9fYmUzMihuZXdibGstPmhhc2h2YWwpOworCWJ0cmVlLT5iZWZvcmUgPSBjcHVfdG9fYmUzMihuZXdibGstPmJsa25vKTsKIAl4ZnNfZGFfbG9nX2J1ZihzdGF0ZS0+YXJncy0+dHJhbnMsIG9sZGJsay0+YnAsCiAJCVhGU19EQV9MT0dSQU5HRShub2RlLCBidHJlZSwgdG1wICsgc2l6ZW9mKCpidHJlZSkpKTsKLQlJTlRfTU9EKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJULCArMSk7CisJYmUxNl9hZGQoJm5vZGUtPmhkci5jb3VudCwgMSk7CiAJeGZzX2RhX2xvZ19idWYoc3RhdGUtPmFyZ3MtPnRyYW5zLCBvbGRibGstPmJwLAogCQlYRlNfREFfTE9HUkFOR0Uobm9kZSwgJm5vZGUtPmhkciwgc2l6ZW9mKG5vZGUtPmhkcikpKTsKIAogCS8qCiAJICogQ29weSB0aGUgbGFzdCBoYXNoIHZhbHVlIGZyb20gdGhlIG9sZGJsayB0byBwcm9wYWdhdGUgdXB3YXJkcy4KIAkgKi8KLQlvbGRibGstPmhhc2h2YWwgPSBJTlRfR0VUKG5vZGUtPmJ0cmVlWyBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xIF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKTsKKwlvbGRibGstPmhhc2h2YWwgPSBiZTMyX3RvX2NwdShub2RlLT5idHJlZVtiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpLTEgXS5oYXNodmFsKTsKIH0KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTc2OCwyMSArNzY3LDIxIEBACiAJQVNTRVJUKGFyZ3MgIT0gTlVMTCk7CiAJQVNTRVJUKHJvb3RfYmxrLT5tYWdpYyA9PSBYRlNfREFfTk9ERV9NQUdJQyk7CiAJb2xkcm9vdCA9IHJvb3RfYmxrLT5icC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChvbGRyb290LT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfREFfTk9ERV9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KG9sZHJvb3QtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfREFfTk9ERV9NQUdJQyk7CiAJQVNTRVJUKCFvbGRyb290LT5oZHIuaW5mby5mb3J3KTsKIAlBU1NFUlQoIW9sZHJvb3QtPmhkci5pbmZvLmJhY2spOwogCiAJLyoKIAkgKiBJZiB0aGUgcm9vdCBoYXMgbW9yZSB0aGFuIG9uZSBjaGlsZCwgdGhlbiBkb24ndCBkbyBhbnl0aGluZy4KIAkgKi8KLQlpZiAoSU5UX0dFVChvbGRyb290LT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgPiAxKQorCWlmIChiZTE2X3RvX2NwdShvbGRyb290LT5oZHIuY291bnQpID4gMSkKIAkJcmV0dXJuKDApOwogCiAJLyoKIAkgKiBSZWFkIGluIHRoZSAob25seSkgY2hpbGQgYmxvY2ssIHRoZW4gY29weSB0aG9zZSBieXRlcyBpbnRvCiAJICogdGhlIHJvb3QgYmxvY2sncyBidWZmZXIgYW5kIGZyZWUgdGhlIG9yaWdpbmFsIGNoaWxkIGJsb2NrLgogCSAqLwotCWNoaWxkID0gSU5UX0dFVChvbGRyb290LT5idHJlZVsgMCBdLmJlZm9yZSwgQVJDSF9DT05WRVJUKTsKKwljaGlsZCA9IGJlMzJfdG9fY3B1KG9sZHJvb3QtPmJ0cmVlWzBdLmJlZm9yZSk7CiAJQVNTRVJUKGNoaWxkICE9IDApOwogCWVycm9yID0geGZzX2RhX3JlYWRfYnVmKGFyZ3MtPnRyYW5zLCBhcmdzLT5kcCwgY2hpbGQsIC0xLCAmYnAsCiAJCQkJCSAgICAgYXJncy0+d2hpY2hmb3JrKTsKQEAgLTc5MCwxMSArNzg5LDExIEBACiAJCXJldHVybihlcnJvcik7CiAJQVNTRVJUKGJwICE9IE5VTEwpOwogCWJsa2luZm8gPSBicC0+ZGF0YTsKLQlpZiAoSU5UX0dFVChvbGRyb290LT5oZHIubGV2ZWwsIEFSQ0hfQ09OVkVSVCkgPT0gMSkgewotCQlBU1NFUlQoSU5UX0dFVChibGtpbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSWF9MRUFGX01BR0lDKHN0YXRlLT5tcCkgfHwKLQkJICAgICAgIElOVF9HRVQoYmxraW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJaWYgKGJlMTZfdG9fY3B1KG9sZHJvb3QtPmhkci5sZXZlbCkgPT0gMSkgeworCQlBU1NFUlQoYmUxNl90b19jcHUoYmxraW5mby0+bWFnaWMpID09IFhGU19ESVJYX0xFQUZfTUFHSUMoc3RhdGUtPm1wKSB8fAorCQkgICAgICAgYmUxNl90b19jcHUoYmxraW5mby0+bWFnaWMpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpOwogCX0gZWxzZSB7Ci0JCUFTU0VSVChJTlRfR0VUKGJsa2luZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKTsKKwkJQVNTRVJUKGJlMTZfdG9fY3B1KGJsa2luZm8tPm1hZ2ljKSA9PSBYRlNfREFfTk9ERV9NQUdJQyk7CiAJfQogCUFTU0VSVCghYmxraW5mby0+Zm9ydyk7CiAJQVNTRVJUKCFibGtpbmZvLT5iYWNrKTsKQEAgLTgzMCw5ICs4MjksOSBAQAogCSAqLwogCWJsayA9ICZzdGF0ZS0+cGF0aC5ibGtbIHN0YXRlLT5wYXRoLmFjdGl2ZS0xIF07CiAJaW5mbyA9IGJsay0+YnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQoaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RBX05PREVfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShpbmZvLT5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpOwogCW5vZGUgPSAoeGZzX2RhX2ludG5vZGVfdCAqKWluZm87Ci0JY291bnQgPSBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKKwljb3VudCA9IGJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCk7CiAJaWYgKGNvdW50ID4gKHN0YXRlLT5ub2RlX2VudHMgPj4gMSkpIHsKIAkJKmFjdGlvbiA9IDA7CS8qIGJsayBvdmVyIDUwJSwgZG9uJ3QgdHJ5IHRvIGpvaW4gKi8KIAkJcmV0dXJuKDApOwkvKiBibGsgb3ZlciA1MCUsIGRvbid0IHRyeSB0byBqb2luICovCkBAIC04NDksNyArODQ4LDcgQEAKIAkJICogTWFrZSBhbHRwYXRoIHBvaW50IHRvIHRoZSBibG9jayB3ZSB3YW50IHRvIGtlZXAgYW5kCiAJCSAqIHBhdGggcG9pbnQgdG8gdGhlIGJsb2NrIHdlIHdhbnQgdG8gZHJvcCAodGhpcyBvbmUpLgogCQkgKi8KLQkJZm9yd2FyZCA9IGluZm8tPmZvcnc7CisJCWZvcndhcmQgPSAoaW5mby0+Zm9ydyAhPSAwKTsKIAkJbWVtY3B5KCZzdGF0ZS0+YWx0cGF0aCwgJnN0YXRlLT5wYXRoLCBzaXplb2Yoc3RhdGUtPnBhdGgpKTsKIAkJZXJyb3IgPSB4ZnNfZGFfcGF0aF9zaGlmdChzdGF0ZSwgJnN0YXRlLT5hbHRwYXRoLCBmb3J3YXJkLAogCQkJCQkJIDAsICZyZXR2YWwpOwpAQCAtODcxLDEzICs4NzAsMTIgQEAKIAkgKiB0byBzaHJpbmsgYSBkaXJlY3Rvcnkgb3ZlciB0aW1lLgogCSAqLwogCS8qIHN0YXJ0IHdpdGggc21hbGxlciBibGsgbnVtICovCi0JZm9yd2FyZCA9IChJTlRfR0VUKGluZm8tPmZvcncsIEFSQ0hfQ09OVkVSVCkKLQkJCQk8IElOVF9HRVQoaW5mby0+YmFjaywgQVJDSF9DT05WRVJUKSk7CisJZm9yd2FyZCA9IChiZTMyX3RvX2NwdShpbmZvLT5mb3J3KSA8IGJlMzJfdG9fY3B1KGluZm8tPmJhY2spKTsKIAlmb3IgKGkgPSAwOyBpIDwgMjsgZm9yd2FyZCA9ICFmb3J3YXJkLCBpKyspIHsKIAkJaWYgKGZvcndhcmQpCi0JCQlibGtubyA9IElOVF9HRVQoaW5mby0+Zm9ydywgQVJDSF9DT05WRVJUKTsKKwkJCWJsa25vID0gYmUzMl90b19jcHUoaW5mby0+Zm9ydyk7CiAJCWVsc2UKLQkJCWJsa25vID0gSU5UX0dFVChpbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQpOworCQkJYmxrbm8gPSBiZTMyX3RvX2NwdShpbmZvLT5iYWNrKTsKIAkJaWYgKGJsa25vID09IDApCiAJCQljb250aW51ZTsKIAkJZXJyb3IgPSB4ZnNfZGFfcmVhZF9idWYoc3RhdGUtPmFyZ3MtPnRyYW5zLCBzdGF0ZS0+YXJncy0+ZHAsCkBAIC04ODksMTAgKzg4NywxMCBAQAogCQlub2RlID0gKHhmc19kYV9pbnRub2RlX3QgKilpbmZvOwogCQljb3VudCAgPSBzdGF0ZS0+bm9kZV9lbnRzOwogCQljb3VudCAtPSBzdGF0ZS0+bm9kZV9lbnRzID4+IDI7Ci0JCWNvdW50IC09IElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCQljb3VudCAtPSBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpOwogCQlub2RlID0gYnAtPmRhdGE7Ci0JCUFTU0VSVChJTlRfR0VUKG5vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKTsKLQkJY291bnQgLT0gSU5UX0dFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7CisJCUFTU0VSVChiZTE2X3RvX2NwdShub2RlLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpOworCQljb3VudCAtPSBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpOwogCQl4ZnNfZGFfYnJlbHNlKHN0YXRlLT5hcmdzLT50cmFucywgYnApOwogCQlpZiAoY291bnQgPj0gMCkKIAkJCWJyZWFrOwkvKiBmaXRzIHdpdGggYXQgbGVhc3QgMjUlIHRvIHNwYXJlICovCkBAIC05NzMsMTYgKzk3MSwxNiBAQAogCX0KIAlmb3IgKGJsay0tLCBsZXZlbC0tOyBsZXZlbCA+PSAwOyBibGstLSwgbGV2ZWwtLSkgewogCQlub2RlID0gYmxrLT5icC0+ZGF0YTsKLQkJQVNTRVJUKElOVF9HRVQobm9kZS0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RBX05PREVfTUFHSUMpOworCQlBU1NFUlQoYmUxNl90b19jcHUobm9kZS0+aGRyLmluZm8ubWFnaWMpID09IFhGU19EQV9OT0RFX01BR0lDKTsKIAkJYnRyZWUgPSAmbm9kZS0+YnRyZWVbIGJsay0+aW5kZXggXTsKLQkJaWYgKElOVF9HRVQoYnRyZWUtPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPT0gbGFzdGhhc2gpCisJCWlmIChiZTMyX3RvX2NwdShidHJlZS0+aGFzaHZhbCkgPT0gbGFzdGhhc2gpCiAJCQlicmVhazsKIAkJYmxrLT5oYXNodmFsID0gbGFzdGhhc2g7Ci0JCUlOVF9TRVQoYnRyZWUtPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCwgbGFzdGhhc2gpOworCQlidHJlZS0+aGFzaHZhbCA9IGNwdV90b19iZTMyKGxhc3RoYXNoKTsKIAkJeGZzX2RhX2xvZ19idWYoc3RhdGUtPmFyZ3MtPnRyYW5zLCBibGstPmJwLAogCQkJCSAgWEZTX0RBX0xPR1JBTkdFKG5vZGUsIGJ0cmVlLCBzaXplb2YoKmJ0cmVlKSkpOwogCi0JCWxhc3RoYXNoID0gSU5UX0dFVChub2RlLT5idHJlZVsgSU5UX0dFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCktMSBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7CisJCWxhc3RoYXNoID0gYmUzMl90b19jcHUobm9kZS0+YnRyZWVbYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KS0xXS5oYXNodmFsKTsKIAl9CiB9CiAKQEAgLTk5NywyNSArOTk1LDI1IEBACiAJaW50IHRtcDsKIAogCW5vZGUgPSBkcm9wX2Jsay0+YnAtPmRhdGE7Ci0JQVNTRVJUKGRyb3BfYmxrLT5pbmRleCA8IElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKTsKKwlBU1NFUlQoZHJvcF9ibGstPmluZGV4IDwgYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KSk7CiAJQVNTRVJUKGRyb3BfYmxrLT5pbmRleCA+PSAwKTsKIAogCS8qCiAJICogQ29weSBvdmVyIHRoZSBvZmZlbmRpbmcgZW50cnksIG9yIGp1c3QgemVybyBpdCBvdXQuCiAJICovCiAJYnRyZWUgPSAmbm9kZS0+YnRyZWVbZHJvcF9ibGstPmluZGV4XTsKLQlpZiAoZHJvcF9ibGstPmluZGV4IDwgKElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEpKSB7Ci0JCXRtcCAgPSBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIGRyb3BfYmxrLT5pbmRleCAtIDE7CisJaWYgKGRyb3BfYmxrLT5pbmRleCA8IChiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpLTEpKSB7CisJCXRtcCAgPSBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpIC0gZHJvcF9ibGstPmluZGV4IC0gMTsKIAkJdG1wICo9ICh1aW50KXNpemVvZih4ZnNfZGFfbm9kZV9lbnRyeV90KTsKIAkJbWVtbW92ZShidHJlZSwgYnRyZWUgKyAxLCB0bXApOwogCQl4ZnNfZGFfbG9nX2J1ZihzdGF0ZS0+YXJncy0+dHJhbnMsIGRyb3BfYmxrLT5icCwKIAkJICAgIFhGU19EQV9MT0dSQU5HRShub2RlLCBidHJlZSwgdG1wKSk7Ci0JCWJ0cmVlID0gJm5vZGUtPmJ0cmVlWyBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xIF07CisJCWJ0cmVlID0gJm5vZGUtPmJ0cmVlW2JlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCktMV07CiAJfQogCW1lbXNldCgoY2hhciAqKWJ0cmVlLCAwLCBzaXplb2YoeGZzX2RhX25vZGVfZW50cnlfdCkpOwogCXhmc19kYV9sb2dfYnVmKHN0YXRlLT5hcmdzLT50cmFucywgZHJvcF9ibGstPmJwLAogCSAgICBYRlNfREFfTE9HUkFOR0Uobm9kZSwgYnRyZWUsIHNpemVvZigqYnRyZWUpKSk7Ci0JSU5UX01PRChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCwgLTEpOworCWJlMTZfYWRkKCZub2RlLT5oZHIuY291bnQsIC0xKTsKIAl4ZnNfZGFfbG9nX2J1ZihzdGF0ZS0+YXJncy0+dHJhbnMsIGRyb3BfYmxrLT5icCwKIAkgICAgWEZTX0RBX0xPR1JBTkdFKG5vZGUsICZub2RlLT5oZHIsIHNpemVvZihub2RlLT5oZHIpKSk7CiAKQEAgLTEwMjMsNyArMTAyMSw3IEBACiAJICogQ29weSB0aGUgbGFzdCBoYXNoIHZhbHVlIGZyb20gdGhlIGJsb2NrIHRvIHByb3BhZ2F0ZSB1cHdhcmRzLgogCSAqLwogCWJ0cmVlLS07Ci0JZHJvcF9ibGstPmhhc2h2YWwgPSBJTlRfR0VUKGJ0cmVlLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpOworCWRyb3BfYmxrLT5oYXNodmFsID0gYmUzMl90b19jcHUoYnRyZWUtPmhhc2h2YWwpOwogfQogCiAvKgpAQCAtMTA0MSw0MCArMTAzOSw0MCBAQAogCiAJZHJvcF9ub2RlID0gZHJvcF9ibGstPmJwLT5kYXRhOwogCXNhdmVfbm9kZSA9IHNhdmVfYmxrLT5icC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChkcm9wX25vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKTsKLQlBU1NFUlQoSU5UX0dFVChzYXZlX25vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUoZHJvcF9ub2RlLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShzYXZlX25vZGUtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfREFfTk9ERV9NQUdJQyk7CiAJdHAgPSBzdGF0ZS0+YXJncy0+dHJhbnM7CiAKIAkvKgogCSAqIElmIHRoZSBkeWluZyBibG9jayBoYXMgbG93ZXIgaGFzaHZhbHMsIHRoZW4gbW92ZSBhbGwgdGhlCiAJICogZWxlbWVudHMgaW4gdGhlIHJlbWFpbmluZyBibG9jayB1cCB0byBtYWtlIGEgaG9sZS4KIAkgKi8KLQlpZiAoKElOVF9HRVQoZHJvcF9ub2RlLT5idHJlZVsgMCBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPCBJTlRfR0VUKHNhdmVfbm9kZS0+YnRyZWVbIDAgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKSB8fAotCSAgICAoSU5UX0dFVChkcm9wX25vZGUtPmJ0cmVlWyBJTlRfR0VUKGRyb3Bfbm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpIDwKLQkgICAgIElOVF9HRVQoc2F2ZV9ub2RlLT5idHJlZVsgSU5UX0dFVChzYXZlX25vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xIF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSkpCisJaWYgKChiZTMyX3RvX2NwdShkcm9wX25vZGUtPmJ0cmVlWzBdLmhhc2h2YWwpIDwgYmUzMl90b19jcHUoc2F2ZV9ub2RlLT5idHJlZVsgMCBdLmhhc2h2YWwpKSB8fAorCSAgICAoYmUzMl90b19jcHUoZHJvcF9ub2RlLT5idHJlZVtiZTE2X3RvX2NwdShkcm9wX25vZGUtPmhkci5jb3VudCktMV0uaGFzaHZhbCkgPAorCSAgICAgYmUzMl90b19jcHUoc2F2ZV9ub2RlLT5idHJlZVtiZTE2X3RvX2NwdShzYXZlX25vZGUtPmhkci5jb3VudCktMV0uaGFzaHZhbCkpKQogCXsKLQkJYnRyZWUgPSAmc2F2ZV9ub2RlLT5idHJlZVsgSU5UX0dFVChkcm9wX25vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSBdOwotCQl0bXAgPSBJTlRfR0VUKHNhdmVfbm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICogKHVpbnQpc2l6ZW9mKHhmc19kYV9ub2RlX2VudHJ5X3QpOworCQlidHJlZSA9ICZzYXZlX25vZGUtPmJ0cmVlW2JlMTZfdG9fY3B1KGRyb3Bfbm9kZS0+aGRyLmNvdW50KV07CisJCXRtcCA9IGJlMTZfdG9fY3B1KHNhdmVfbm9kZS0+aGRyLmNvdW50KSAqICh1aW50KXNpemVvZih4ZnNfZGFfbm9kZV9lbnRyeV90KTsKIAkJbWVtbW92ZShidHJlZSwgJnNhdmVfbm9kZS0+YnRyZWVbMF0sIHRtcCk7CiAJCWJ0cmVlID0gJnNhdmVfbm9kZS0+YnRyZWVbMF07CiAJCXhmc19kYV9sb2dfYnVmKHRwLCBzYXZlX2Jsay0+YnAsCiAJCQlYRlNfREFfTE9HUkFOR0Uoc2F2ZV9ub2RlLCBidHJlZSwKLQkJCQkoSU5UX0dFVChzYXZlX25vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSArIElOVF9HRVQoZHJvcF9ub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpICoKKwkJCQkoYmUxNl90b19jcHUoc2F2ZV9ub2RlLT5oZHIuY291bnQpICsgYmUxNl90b19jcHUoZHJvcF9ub2RlLT5oZHIuY291bnQpKSAqCiAJCQkJc2l6ZW9mKHhmc19kYV9ub2RlX2VudHJ5X3QpKSk7CiAJfSBlbHNlIHsKLQkJYnRyZWUgPSAmc2F2ZV9ub2RlLT5idHJlZVsgSU5UX0dFVChzYXZlX25vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSBdOworCQlidHJlZSA9ICZzYXZlX25vZGUtPmJ0cmVlW2JlMTZfdG9fY3B1KHNhdmVfbm9kZS0+aGRyLmNvdW50KV07CiAJCXhmc19kYV9sb2dfYnVmKHRwLCBzYXZlX2Jsay0+YnAsCiAJCQlYRlNfREFfTE9HUkFOR0Uoc2F2ZV9ub2RlLCBidHJlZSwKLQkJCQlJTlRfR0VUKGRyb3Bfbm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICoKKwkJCQliZTE2X3RvX2NwdShkcm9wX25vZGUtPmhkci5jb3VudCkgKgogCQkJCXNpemVvZih4ZnNfZGFfbm9kZV9lbnRyeV90KSkpOwogCX0KIAogCS8qCiAJICogTW92ZSBhbGwgdGhlIEItdHJlZSBlbGVtZW50cyBmcm9tIGRyb3BfYmxrIHRvIHNhdmVfYmxrLgogCSAqLwotCXRtcCA9IElOVF9HRVQoZHJvcF9ub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgKiAodWludClzaXplb2YoeGZzX2RhX25vZGVfZW50cnlfdCk7CisJdG1wID0gYmUxNl90b19jcHUoZHJvcF9ub2RlLT5oZHIuY291bnQpICogKHVpbnQpc2l6ZW9mKHhmc19kYV9ub2RlX2VudHJ5X3QpOwogCW1lbWNweShidHJlZSwgJmRyb3Bfbm9kZS0+YnRyZWVbMF0sIHRtcCk7Ci0JSU5UX01PRChzYXZlX25vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJULCBJTlRfR0VUKGRyb3Bfbm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKTsKKwliZTE2X2FkZCgmc2F2ZV9ub2RlLT5oZHIuY291bnQsIGJlMTZfdG9fY3B1KGRyb3Bfbm9kZS0+aGRyLmNvdW50KSk7CiAKIAl4ZnNfZGFfbG9nX2J1Zih0cCwgc2F2ZV9ibGstPmJwLAogCQlYRlNfREFfTE9HUkFOR0Uoc2F2ZV9ub2RlLCAmc2F2ZV9ub2RlLT5oZHIsCkBAIC0xMDgzLDcgKzEwODEsNyBAQAogCS8qCiAJICogU2F2ZSB0aGUgbGFzdCBoYXNodmFsIGluIHRoZSByZW1haW5pbmcgYmxvY2sgZm9yIHVwd2FyZCBwcm9wYWdhdGlvbi4KIAkgKi8KLQlzYXZlX2Jsay0+aGFzaHZhbCA9IElOVF9HRVQoc2F2ZV9ub2RlLT5idHJlZVsgSU5UX0dFVChzYXZlX25vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xIF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKTsKKwlzYXZlX2Jsay0+aGFzaHZhbCA9IGJlMzJfdG9fY3B1KHNhdmVfbm9kZS0+YnRyZWVbYmUxNl90b19jcHUoc2F2ZV9ub2RlLT5oZHIuY291bnQpLTFdLmhhc2h2YWwpOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTEzOCw0NiArMTEzNiw0NiBAQAogCQkJcmV0dXJuKGVycm9yKTsKIAkJfQogCQljdXJyID0gYmxrLT5icC0+ZGF0YTsKLQkJQVNTRVJUKElOVF9HRVQoY3Vyci0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RBX05PREVfTUFHSUMgfHwKLQkJICAgICAgIElOVF9HRVQoY3Vyci0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUlhfTEVBRl9NQUdJQyhzdGF0ZS0+bXApIHx8Ci0JCSAgICAgICBJTlRfR0VUKGN1cnItPm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19BVFRSX0xFQUZfTUFHSUMpOworCQlBU1NFUlQoYmUxNl90b19jcHUoY3Vyci0+bWFnaWMpID09IFhGU19EQV9OT0RFX01BR0lDIHx8CisJCSAgICAgICBiZTE2X3RvX2NwdShjdXJyLT5tYWdpYykgPT0gWEZTX0RJUlhfTEVBRl9NQUdJQyhzdGF0ZS0+bXApIHx8CisJCSAgICAgICBiZTE2X3RvX2NwdShjdXJyLT5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAKIAkJLyoKIAkJICogU2VhcmNoIGFuIGludGVybWVkaWF0ZSBub2RlIGZvciBhIG1hdGNoLgogCQkgKi8KLQkJYmxrLT5tYWdpYyA9IElOVF9HRVQoY3Vyci0+bWFnaWMsIEFSQ0hfQ09OVkVSVCk7Ci0JCWlmIChJTlRfR0VUKGN1cnItPm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKSB7CisJCWJsay0+bWFnaWMgPSBiZTE2X3RvX2NwdShjdXJyLT5tYWdpYyk7CisJCWlmIChibGstPm1hZ2ljID09IFhGU19EQV9OT0RFX01BR0lDKSB7CiAJCQlub2RlID0gYmxrLT5icC0+ZGF0YTsKLQkJCWJsay0+aGFzaHZhbCA9IElOVF9HRVQobm9kZS0+YnRyZWVbIElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpOworCQkJYmxrLT5oYXNodmFsID0gYmUzMl90b19jcHUobm9kZS0+YnRyZWVbYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KS0xXS5oYXNodmFsKTsKIAogCQkJLyoKIAkJCSAqIEJpbmFyeSBzZWFyY2guICAobm90ZTogc21hbGwgYmxvY2tzIHdpbGwgc2tpcCBsb29wKQogCQkJICovCi0JCQltYXggPSBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKKwkJCW1heCA9IGJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCk7CiAJCQlwcm9iZSA9IHNwYW4gPSBtYXggLyAyOwogCQkJaGFzaHZhbCA9IGFyZ3MtPmhhc2h2YWw7CiAJCQlmb3IgKGJ0cmVlID0gJm5vZGUtPmJ0cmVlW3Byb2JlXTsgc3BhbiA+IDQ7CiAJCQkJICAgYnRyZWUgPSAmbm9kZS0+YnRyZWVbcHJvYmVdKSB7CiAJCQkJc3BhbiAvPSAyOwotCQkJCWlmIChJTlRfR0VUKGJ0cmVlLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpIDwgaGFzaHZhbCkKKwkJCQlpZiAoYmUzMl90b19jcHUoYnRyZWUtPmhhc2h2YWwpIDwgaGFzaHZhbCkKIAkJCQkJcHJvYmUgKz0gc3BhbjsKLQkJCQllbHNlIGlmIChJTlRfR0VUKGJ0cmVlLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID4gaGFzaHZhbCkKKwkJCQllbHNlIGlmIChiZTMyX3RvX2NwdShidHJlZS0+aGFzaHZhbCkgPiBoYXNodmFsKQogCQkJCQlwcm9iZSAtPSBzcGFuOwogCQkJCWVsc2UKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCQlBU1NFUlQoKHByb2JlID49IDApICYmIChwcm9iZSA8IG1heCkpOwotCQkJQVNTRVJUKChzcGFuIDw9IDQpIHx8IChJTlRfR0VUKGJ0cmVlLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID09IGhhc2h2YWwpKTsKKwkJCUFTU0VSVCgoc3BhbiA8PSA0KSB8fCAoYmUzMl90b19jcHUoYnRyZWUtPmhhc2h2YWwpID09IGhhc2h2YWwpKTsKIAogCQkJLyoKIAkJCSAqIFNpbmNlIHdlIG1heSBoYXZlIGR1cGxpY2F0ZSBoYXNodmFsJ3MsIGZpbmQgdGhlIGZpcnN0CiAJCQkgKiBtYXRjaGluZyBoYXNodmFsIGluIHRoZSBub2RlLgogCQkJICovCi0JCQl3aGlsZSAoKHByb2JlID4gMCkgJiYgKElOVF9HRVQoYnRyZWUtPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPj0gaGFzaHZhbCkpIHsKKwkJCXdoaWxlICgocHJvYmUgPiAwKSAmJiAoYmUzMl90b19jcHUoYnRyZWUtPmhhc2h2YWwpID49IGhhc2h2YWwpKSB7CiAJCQkJYnRyZWUtLTsKIAkJCQlwcm9iZS0tOwogCQkJfQotCQkJd2hpbGUgKChwcm9iZSA8IG1heCkgJiYgKElOVF9HRVQoYnRyZWUtPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPCBoYXNodmFsKSkgeworCQkJd2hpbGUgKChwcm9iZSA8IG1heCkgJiYgKGJlMzJfdG9fY3B1KGJ0cmVlLT5oYXNodmFsKSA8IGhhc2h2YWwpKSB7CiAJCQkJYnRyZWUrKzsKIAkJCQlwcm9iZSsrOwogCQkJfQpAQCAtMTE4NywyMSArMTE4NSwyMSBAQAogCQkJICovCiAJCQlpZiAocHJvYmUgPT0gbWF4KSB7CiAJCQkJYmxrLT5pbmRleCA9IG1heC0xOwotCQkJCWJsa25vID0gSU5UX0dFVChub2RlLT5idHJlZVsgbWF4LTEgXS5iZWZvcmUsIEFSQ0hfQ09OVkVSVCk7CisJCQkJYmxrbm8gPSBiZTMyX3RvX2NwdShub2RlLT5idHJlZVttYXgtMV0uYmVmb3JlKTsKIAkJCX0gZWxzZSB7CiAJCQkJYmxrLT5pbmRleCA9IHByb2JlOwotCQkJCWJsa25vID0gSU5UX0dFVChidHJlZS0+YmVmb3JlLCBBUkNIX0NPTlZFUlQpOworCQkJCWJsa25vID0gYmUzMl90b19jcHUoYnRyZWUtPmJlZm9yZSk7CiAJCQl9CiAJCX0KLQkJZWxzZSBpZiAoSU5UX0dFVChjdXJyLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKSB7CisJCWVsc2UgaWYgKGJlMTZfdG9fY3B1KGN1cnItPm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKSB7CiAJCQlibGstPmhhc2h2YWwgPSB4ZnNfYXR0cl9sZWFmX2xhc3RoYXNoKGJsay0+YnAsIE5VTEwpOwogCQkJYnJlYWs7CiAJCX0KLQkJZWxzZSBpZiAoSU5UX0dFVChjdXJyLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpIHsKKwkJZWxzZSBpZiAoYmUxNl90b19jcHUoY3Vyci0+bWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQykgewogCQkJYmxrLT5oYXNodmFsID0geGZzX2Rpcl9sZWFmX2xhc3RoYXNoKGJsay0+YnAsIE5VTEwpOwogCQkJYnJlYWs7CiAJCX0KLQkJZWxzZSBpZiAoSU5UX0dFVChjdXJyLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQykgeworCQllbHNlIGlmIChiZTE2X3RvX2NwdShjdXJyLT5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpIHsKIAkJCWJsay0+aGFzaHZhbCA9IHhmc19kaXIyX2xlYWZuX2xhc3RoYXNoKGJsay0+YnAsIE5VTEwpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEyNzQsOCArMTI3Miw4IEBACiAJQVNTRVJUKG9sZF9ibGstPm1hZ2ljID09IFhGU19EQV9OT0RFX01BR0lDIHx8CiAJICAgICAgIG9sZF9ibGstPm1hZ2ljID09IFhGU19ESVJYX0xFQUZfTUFHSUMoc3RhdGUtPm1wKSB8fAogCSAgICAgICBvbGRfYmxrLT5tYWdpYyA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKLQlBU1NFUlQob2xkX2Jsay0+bWFnaWMgPT0gSU5UX0dFVChvbGRfaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkpOwotCUFTU0VSVChuZXdfYmxrLT5tYWdpYyA9PSBJTlRfR0VUKG5ld19pbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSk7CisJQVNTRVJUKG9sZF9ibGstPm1hZ2ljID09IGJlMTZfdG9fY3B1KG9sZF9pbmZvLT5tYWdpYykpOworCUFTU0VSVChuZXdfYmxrLT5tYWdpYyA9PSBiZTE2X3RvX2NwdShuZXdfaW5mby0+bWFnaWMpKTsKIAlBU1NFUlQob2xkX2Jsay0+bWFnaWMgPT0gbmV3X2Jsay0+bWFnaWMpOwogCiAJc3dpdGNoIChvbGRfYmxrLT5tYWdpYykgewpAQCAtMTMwMiw0NyArMTMwMCw0NCBAQAogCQkvKgogCQkgKiBMaW5rIG5ldyBibG9jayBpbiBiZWZvcmUgZXhpc3RpbmcgYmxvY2suCiAJCSAqLwotCQlJTlRfU0VUKG5ld19pbmZvLT5mb3J3LCBBUkNIX0NPTlZFUlQsIG9sZF9ibGstPmJsa25vKTsKLQkJbmV3X2luZm8tPmJhY2sgPSBvbGRfaW5mby0+YmFjazsgLyogSU5UXzogZGlyZWN0IGNvcHkgKi8KLQkJaWYgKElOVF9HRVQob2xkX2luZm8tPmJhY2ssIEFSQ0hfQ09OVkVSVCkpIHsKKwkJbmV3X2luZm8tPmZvcncgPSBjcHVfdG9fYmUzMihvbGRfYmxrLT5ibGtubyk7CisJCW5ld19pbmZvLT5iYWNrID0gb2xkX2luZm8tPmJhY2s7CisJCWlmIChvbGRfaW5mby0+YmFjaykgewogCQkJZXJyb3IgPSB4ZnNfZGFfcmVhZF9idWYoYXJncy0+dHJhbnMsIGFyZ3MtPmRwLAotCQkJCQkJSU5UX0dFVChvbGRfaW5mby0+YmFjaywKLQkJCQkJCQlBUkNIX0NPTlZFUlQpLCAtMSwgJmJwLAotCQkJCQkJYXJncy0+d2hpY2hmb3JrKTsKKwkJCQkJCWJlMzJfdG9fY3B1KG9sZF9pbmZvLT5iYWNrKSwKKwkJCQkJCS0xLCAmYnAsIGFyZ3MtPndoaWNoZm9yayk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJcmV0dXJuKGVycm9yKTsKIAkJCUFTU0VSVChicCAhPSBOVUxMKTsKIAkJCXRtcF9pbmZvID0gYnAtPmRhdGE7Ci0JCQlBU1NFUlQoSU5UX0dFVCh0bXBfaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gSU5UX0dFVChvbGRfaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkpOwotCQkJQVNTRVJUKElOVF9HRVQodG1wX2luZm8tPmZvcncsIEFSQ0hfQ09OVkVSVCkgPT0gb2xkX2Jsay0+Ymxrbm8pOwotCQkJSU5UX1NFVCh0bXBfaW5mby0+Zm9ydywgQVJDSF9DT05WRVJULCBuZXdfYmxrLT5ibGtubyk7CisJCQlBU1NFUlQoYmUxNl90b19jcHUodG1wX2luZm8tPm1hZ2ljKSA9PSBiZTE2X3RvX2NwdShvbGRfaW5mby0+bWFnaWMpKTsKKwkJCUFTU0VSVChiZTMyX3RvX2NwdSh0bXBfaW5mby0+Zm9ydykgPT0gb2xkX2Jsay0+Ymxrbm8pOworCQkJdG1wX2luZm8tPmZvcncgPSBjcHVfdG9fYmUzMihuZXdfYmxrLT5ibGtubyk7CiAJCQl4ZnNfZGFfbG9nX2J1ZihhcmdzLT50cmFucywgYnAsIDAsIHNpemVvZigqdG1wX2luZm8pLTEpOwogCQkJeGZzX2RhX2J1Zl9kb25lKGJwKTsKIAkJfQotCQlJTlRfU0VUKG9sZF9pbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQsIG5ld19ibGstPmJsa25vKTsKKwkJb2xkX2luZm8tPmJhY2sgPSBjcHVfdG9fYmUzMihuZXdfYmxrLT5ibGtubyk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogTGluayBuZXcgYmxvY2sgaW4gYWZ0ZXIgZXhpc3RpbmcgYmxvY2suCiAJCSAqLwotCQluZXdfaW5mby0+Zm9ydyA9IG9sZF9pbmZvLT5mb3J3OyAvKiBJTlRfOiBkaXJlY3QgY29weSAqLwotCQlJTlRfU0VUKG5ld19pbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQsIG9sZF9ibGstPmJsa25vKTsKLQkJaWYgKElOVF9HRVQob2xkX2luZm8tPmZvcncsIEFSQ0hfQ09OVkVSVCkpIHsKKwkJbmV3X2luZm8tPmZvcncgPSBvbGRfaW5mby0+Zm9ydzsKKwkJbmV3X2luZm8tPmJhY2sgPSBjcHVfdG9fYmUzMihvbGRfYmxrLT5ibGtubyk7CisJCWlmIChvbGRfaW5mby0+Zm9ydykgewogCQkJZXJyb3IgPSB4ZnNfZGFfcmVhZF9idWYoYXJncy0+dHJhbnMsIGFyZ3MtPmRwLAotCQkJCQkJSU5UX0dFVChvbGRfaW5mby0+Zm9ydywgQVJDSF9DT05WRVJUKSwgLTEsICZicCwKLQkJCQkJCWFyZ3MtPndoaWNoZm9yayk7CisJCQkJCQliZTMyX3RvX2NwdShvbGRfaW5mby0+Zm9ydyksCisJCQkJCQktMSwgJmJwLCBhcmdzLT53aGljaGZvcmspOwogCQkJaWYgKGVycm9yKQogCQkJCXJldHVybihlcnJvcik7CiAJCQlBU1NFUlQoYnAgIT0gTlVMTCk7CiAJCQl0bXBfaW5mbyA9IGJwLT5kYXRhOwotCQkJQVNTRVJUKElOVF9HRVQodG1wX2luZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpCi0JCQkJICAgID09IElOVF9HRVQob2xkX2luZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpKTsKLQkJCUFTU0VSVChJTlRfR0VUKHRtcF9pbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQpCi0JCQkJICAgID09IG9sZF9ibGstPmJsa25vKTsKLQkJCUlOVF9TRVQodG1wX2luZm8tPmJhY2ssIEFSQ0hfQ09OVkVSVCwgbmV3X2Jsay0+Ymxrbm8pOworCQkJQVNTRVJUKHRtcF9pbmZvLT5tYWdpYyA9PSBvbGRfaW5mby0+bWFnaWMpOworCQkJQVNTRVJUKGJlMzJfdG9fY3B1KHRtcF9pbmZvLT5iYWNrKSA9PSBvbGRfYmxrLT5ibGtubyk7CisJCQl0bXBfaW5mby0+YmFjayA9IGNwdV90b19iZTMyKG5ld19ibGstPmJsa25vKTsKIAkJCXhmc19kYV9sb2dfYnVmKGFyZ3MtPnRyYW5zLCBicCwgMCwgc2l6ZW9mKCp0bXBfaW5mbyktMSk7CiAJCQl4ZnNfZGFfYnVmX2RvbmUoYnApOwogCQl9Ci0JCUlOVF9TRVQob2xkX2luZm8tPmZvcncsIEFSQ0hfQ09OVkVSVCwgbmV3X2Jsay0+Ymxrbm8pOworCQlvbGRfaW5mby0+Zm9ydyA9IGNwdV90b19iZTMyKG5ld19ibGstPmJsa25vKTsKIAl9CiAKIAl4ZnNfZGFfbG9nX2J1ZihhcmdzLT50cmFucywgb2xkX2Jsay0+YnAsIDAsIHNpemVvZigqdG1wX2luZm8pIC0gMSk7CkBAIC0xMzYwLDEzICsxMzU1LDEzIEBACiAKIAlub2RlMSA9IG5vZGUxX2JwLT5kYXRhOwogCW5vZGUyID0gbm9kZTJfYnAtPmRhdGE7Ci0JQVNTRVJUKChJTlRfR0VUKG5vZGUxLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfREFfTk9ERV9NQUdJQykgJiYKLQkgICAgICAgKElOVF9HRVQobm9kZTItPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKSk7Ci0JaWYgKChJTlRfR0VUKG5vZGUxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgPiAwKSAmJiAoSU5UX0dFVChub2RlMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID4gMCkgJiYKLQkgICAgKChJTlRfR0VUKG5vZGUyLT5idHJlZVsgMCBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPAotCSAgICAgIElOVF9HRVQobm9kZTEtPmJ0cmVlWyAwIF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSkgfHwKLQkgICAgIChJTlRfR0VUKG5vZGUyLT5idHJlZVsgSU5UX0dFVChub2RlMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpIDwKLQkgICAgICBJTlRfR0VUKG5vZGUxLT5idHJlZVsgSU5UX0dFVChub2RlMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKSkpIHsKKwlBU1NFUlQoKGJlMTZfdG9fY3B1KG5vZGUxLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpICYmCisJICAgICAgIChiZTE2X3RvX2NwdShub2RlMi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19EQV9OT0RFX01BR0lDKSk7CisJaWYgKChiZTE2X3RvX2NwdShub2RlMS0+aGRyLmNvdW50KSA+IDApICYmIChiZTE2X3RvX2NwdShub2RlMi0+aGRyLmNvdW50KSA+IDApICYmCisJICAgICgoYmUzMl90b19jcHUobm9kZTItPmJ0cmVlWzBdLmhhc2h2YWwpIDwKKwkgICAgICBiZTMyX3RvX2NwdShub2RlMS0+YnRyZWVbMF0uaGFzaHZhbCkpIHx8CisJICAgICAoYmUzMl90b19jcHUobm9kZTItPmJ0cmVlW2JlMTZfdG9fY3B1KG5vZGUyLT5oZHIuY291bnQpLTFdLmhhc2h2YWwpIDwKKwkgICAgICBiZTMyX3RvX2NwdShub2RlMS0+YnRyZWVbYmUxNl90b19jcHUobm9kZTEtPmhkci5jb3VudCktMV0uaGFzaHZhbCkpKSkgewogCQlyZXR1cm4oMSk7CiAJfQogCXJldHVybigwKTsKQEAgLTEzODEsMTIgKzEzNzYsMTIgQEAKIAl4ZnNfZGFfaW50bm9kZV90ICpub2RlOwogCiAJbm9kZSA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKG5vZGUtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19EQV9OT0RFX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobm9kZS0+aGRyLmluZm8ubWFnaWMpID09IFhGU19EQV9OT0RFX01BR0lDKTsKIAlpZiAoY291bnQpCi0JCSpjb3VudCA9IElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCQkqY291bnQgPSBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpOwogCWlmICghbm9kZS0+aGRyLmNvdW50KQogCQlyZXR1cm4oMCk7Ci0JcmV0dXJuKElOVF9HRVQobm9kZS0+YnRyZWVbIElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKTsKKwlyZXR1cm4gYmUzMl90b19jcHUobm9kZS0+YnRyZWVbYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KS0xXS5oYXNodmFsKTsKIH0KIAogLyoKQEAgLTE0MTEsNTAgKzE0MDYsNDcgQEAKIAlBU1NFUlQoc2F2ZV9ibGstPm1hZ2ljID09IFhGU19EQV9OT0RFX01BR0lDIHx8CiAJICAgICAgIHNhdmVfYmxrLT5tYWdpYyA9PSBYRlNfRElSWF9MRUFGX01BR0lDKHN0YXRlLT5tcCkgfHwKIAkgICAgICAgc2F2ZV9ibGstPm1hZ2ljID09IFhGU19BVFRSX0xFQUZfTUFHSUMpOwotCUFTU0VSVChzYXZlX2Jsay0+bWFnaWMgPT0gSU5UX0dFVChzYXZlX2luZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpKTsKLQlBU1NFUlQoZHJvcF9ibGstPm1hZ2ljID09IElOVF9HRVQoZHJvcF9pbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSk7CisJQVNTRVJUKHNhdmVfYmxrLT5tYWdpYyA9PSBiZTE2X3RvX2NwdShzYXZlX2luZm8tPm1hZ2ljKSk7CisJQVNTRVJUKGRyb3BfYmxrLT5tYWdpYyA9PSBiZTE2X3RvX2NwdShkcm9wX2luZm8tPm1hZ2ljKSk7CiAJQVNTRVJUKHNhdmVfYmxrLT5tYWdpYyA9PSBkcm9wX2Jsay0+bWFnaWMpOwotCUFTU0VSVCgoSU5UX0dFVChzYXZlX2luZm8tPmZvcncsIEFSQ0hfQ09OVkVSVCkgPT0gZHJvcF9ibGstPmJsa25vKSB8fAotCSAgICAgICAoSU5UX0dFVChzYXZlX2luZm8tPmJhY2ssIEFSQ0hfQ09OVkVSVCkgPT0gZHJvcF9ibGstPmJsa25vKSk7Ci0JQVNTRVJUKChJTlRfR0VUKGRyb3BfaW5mby0+Zm9ydywgQVJDSF9DT05WRVJUKSA9PSBzYXZlX2Jsay0+Ymxrbm8pIHx8Ci0JICAgICAgIChJTlRfR0VUKGRyb3BfaW5mby0+YmFjaywgQVJDSF9DT05WRVJUKSA9PSBzYXZlX2Jsay0+Ymxrbm8pKTsKKwlBU1NFUlQoKGJlMzJfdG9fY3B1KHNhdmVfaW5mby0+Zm9ydykgPT0gZHJvcF9ibGstPmJsa25vKSB8fAorCSAgICAgICAoYmUzMl90b19jcHUoc2F2ZV9pbmZvLT5iYWNrKSA9PSBkcm9wX2Jsay0+Ymxrbm8pKTsKKwlBU1NFUlQoKGJlMzJfdG9fY3B1KGRyb3BfaW5mby0+Zm9ydykgPT0gc2F2ZV9ibGstPmJsa25vKSB8fAorCSAgICAgICAoYmUzMl90b19jcHUoZHJvcF9pbmZvLT5iYWNrKSA9PSBzYXZlX2Jsay0+Ymxrbm8pKTsKIAogCS8qCiAJICogVW5saW5rIHRoZSBsZWFmIGJsb2NrIGZyb20gdGhlIGRvdWJseSBsaW5rZWQgY2hhaW4gb2YgbGVhdmVzLgogCSAqLwotCWlmIChJTlRfR0VUKHNhdmVfaW5mby0+YmFjaywgQVJDSF9DT05WRVJUKSA9PSBkcm9wX2Jsay0+Ymxrbm8pIHsKLQkJc2F2ZV9pbmZvLT5iYWNrID0gZHJvcF9pbmZvLT5iYWNrOyAvKiBJTlRfOiBkaXJlY3QgY29weSAqLwotCQlpZiAoSU5UX0dFVChkcm9wX2luZm8tPmJhY2ssIEFSQ0hfQ09OVkVSVCkpIHsKKwlpZiAoYmUzMl90b19jcHUoc2F2ZV9pbmZvLT5iYWNrKSA9PSBkcm9wX2Jsay0+Ymxrbm8pIHsKKwkJc2F2ZV9pbmZvLT5iYWNrID0gZHJvcF9pbmZvLT5iYWNrOworCQlpZiAoZHJvcF9pbmZvLT5iYWNrKSB7CiAJCQllcnJvciA9IHhmc19kYV9yZWFkX2J1ZihhcmdzLT50cmFucywgYXJncy0+ZHAsCi0JCQkJCQlJTlRfR0VUKGRyb3BfaW5mby0+YmFjaywKLQkJCQkJCQlBUkNIX0NPTlZFUlQpLCAtMSwgJmJwLAotCQkJCQkJYXJncy0+d2hpY2hmb3JrKTsKKwkJCQkJCWJlMzJfdG9fY3B1KGRyb3BfaW5mby0+YmFjayksCisJCQkJCQktMSwgJmJwLCBhcmdzLT53aGljaGZvcmspOwogCQkJaWYgKGVycm9yKQogCQkJCXJldHVybihlcnJvcik7CiAJCQlBU1NFUlQoYnAgIT0gTlVMTCk7CiAJCQl0bXBfaW5mbyA9IGJwLT5kYXRhOwotCQkJQVNTRVJUKElOVF9HRVQodG1wX2luZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IElOVF9HRVQoc2F2ZV9pbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSk7Ci0JCQlBU1NFUlQoSU5UX0dFVCh0bXBfaW5mby0+Zm9ydywgQVJDSF9DT05WRVJUKSA9PSBkcm9wX2Jsay0+Ymxrbm8pOwotCQkJSU5UX1NFVCh0bXBfaW5mby0+Zm9ydywgQVJDSF9DT05WRVJULCBzYXZlX2Jsay0+Ymxrbm8pOworCQkJQVNTRVJUKHRtcF9pbmZvLT5tYWdpYyA9PSBzYXZlX2luZm8tPm1hZ2ljKTsKKwkJCUFTU0VSVChiZTMyX3RvX2NwdSh0bXBfaW5mby0+Zm9ydykgPT0gZHJvcF9ibGstPmJsa25vKTsKKwkJCXRtcF9pbmZvLT5mb3J3ID0gY3B1X3RvX2JlMzIoc2F2ZV9ibGstPmJsa25vKTsKIAkJCXhmc19kYV9sb2dfYnVmKGFyZ3MtPnRyYW5zLCBicCwgMCwKIAkJCQkJCSAgICBzaXplb2YoKnRtcF9pbmZvKSAtIDEpOwogCQkJeGZzX2RhX2J1Zl9kb25lKGJwKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXNhdmVfaW5mby0+Zm9ydyA9IGRyb3BfaW5mby0+Zm9ydzsgLyogSU5UXzogZGlyZWN0IGNvcHkgKi8KLQkJaWYgKElOVF9HRVQoZHJvcF9pbmZvLT5mb3J3LCBBUkNIX0NPTlZFUlQpKSB7CisJCXNhdmVfaW5mby0+Zm9ydyA9IGRyb3BfaW5mby0+Zm9ydzsKKwkJaWYgKGRyb3BfaW5mby0+Zm9ydykgewogCQkJZXJyb3IgPSB4ZnNfZGFfcmVhZF9idWYoYXJncy0+dHJhbnMsIGFyZ3MtPmRwLAotCQkJCQkJSU5UX0dFVChkcm9wX2luZm8tPmZvcncsIEFSQ0hfQ09OVkVSVCksIC0xLCAmYnAsCi0JCQkJCQlhcmdzLT53aGljaGZvcmspOworCQkJCQkJYmUzMl90b19jcHUoZHJvcF9pbmZvLT5mb3J3KSwKKwkJCQkJCS0xLCAmYnAsIGFyZ3MtPndoaWNoZm9yayk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJcmV0dXJuKGVycm9yKTsKIAkJCUFTU0VSVChicCAhPSBOVUxMKTsKIAkJCXRtcF9pbmZvID0gYnAtPmRhdGE7Ci0JCQlBU1NFUlQoSU5UX0dFVCh0bXBfaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkgICAgPT0gSU5UX0dFVChzYXZlX2luZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpKTsKLQkJCUFTU0VSVChJTlRfR0VUKHRtcF9pbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQpCi0JCQkJICAgID09IGRyb3BfYmxrLT5ibGtubyk7Ci0JCQlJTlRfU0VUKHRtcF9pbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQsIHNhdmVfYmxrLT5ibGtubyk7CisJCQlBU1NFUlQodG1wX2luZm8tPm1hZ2ljID09IHNhdmVfaW5mby0+bWFnaWMpOworCQkJQVNTRVJUKGJlMzJfdG9fY3B1KHRtcF9pbmZvLT5iYWNrKSA9PSBkcm9wX2Jsay0+Ymxrbm8pOworCQkJdG1wX2luZm8tPmJhY2sgPSBjcHVfdG9fYmUzMihzYXZlX2Jsay0+Ymxrbm8pOwogCQkJeGZzX2RhX2xvZ19idWYoYXJncy0+dHJhbnMsIGJwLCAwLAogCQkJCQkJICAgIHNpemVvZigqdG1wX2luZm8pIC0gMSk7CiAJCQl4ZnNfZGFfYnVmX2RvbmUoYnApOwpAQCAtMTQ5NywxNCArMTQ4OSwxNCBAQAogCWZvciAoYmxrID0gJnBhdGgtPmJsa1tsZXZlbF07IGxldmVsID49IDA7IGJsay0tLCBsZXZlbC0tKSB7CiAJCUFTU0VSVChibGstPmJwICE9IE5VTEwpOwogCQlub2RlID0gYmxrLT5icC0+ZGF0YTsKLQkJQVNTRVJUKElOVF9HRVQobm9kZS0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RBX05PREVfTUFHSUMpOwotCQlpZiAoZm9yd2FyZCAmJiAoYmxrLT5pbmRleCA8IElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEpKSB7CisJCUFTU0VSVChiZTE2X3RvX2NwdShub2RlLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpOworCQlpZiAoZm9yd2FyZCAmJiAoYmxrLT5pbmRleCA8IGJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCktMSkpIHsKIAkJCWJsay0+aW5kZXgrKzsKLQkJCWJsa25vID0gSU5UX0dFVChub2RlLT5idHJlZVsgYmxrLT5pbmRleCBdLmJlZm9yZSwgQVJDSF9DT05WRVJUKTsKKwkJCWJsa25vID0gYmUzMl90b19jcHUobm9kZS0+YnRyZWVbYmxrLT5pbmRleF0uYmVmb3JlKTsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKCFmb3J3YXJkICYmIChibGstPmluZGV4ID4gMCkpIHsKIAkJCWJsay0+aW5kZXgtLTsKLQkJCWJsa25vID0gSU5UX0dFVChub2RlLT5idHJlZVsgYmxrLT5pbmRleCBdLmJlZm9yZSwgQVJDSF9DT05WRVJUKTsKKwkJCWJsa25vID0gYmUzMl90b19jcHUobm9kZS0+YnRyZWVbYmxrLT5pbmRleF0uYmVmb3JlKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTUzNiwxOCArMTUyOCwxOCBAQAogCQkJcmV0dXJuKGVycm9yKTsKIAkJQVNTRVJUKGJsay0+YnAgIT0gTlVMTCk7CiAJCWluZm8gPSBibGstPmJwLT5kYXRhOwotCQlBU1NFUlQoSU5UX0dFVChpbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfREFfTk9ERV9NQUdJQyB8fAotCQkgICAgICAgSU5UX0dFVChpbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSWF9MRUFGX01BR0lDKHN0YXRlLT5tcCkgfHwKLQkJICAgICAgIElOVF9HRVQoaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7Ci0JCWJsay0+bWFnaWMgPSBJTlRfR0VUKGluZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpOwotCQlpZiAoSU5UX0dFVChpbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfREFfTk9ERV9NQUdJQykgeworCQlBU1NFUlQoYmUxNl90b19jcHUoaW5mby0+bWFnaWMpID09IFhGU19EQV9OT0RFX01BR0lDIHx8CisJCSAgICAgICBiZTE2X3RvX2NwdShpbmZvLT5tYWdpYykgPT0gWEZTX0RJUlhfTEVBRl9NQUdJQyhzdGF0ZS0+bXApIHx8CisJCSAgICAgICBiZTE2X3RvX2NwdShpbmZvLT5tYWdpYykgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CisJCWJsay0+bWFnaWMgPSBiZTE2X3RvX2NwdShpbmZvLT5tYWdpYyk7CisJCWlmIChibGstPm1hZ2ljID09IFhGU19EQV9OT0RFX01BR0lDKSB7CiAJCQlub2RlID0gKHhmc19kYV9pbnRub2RlX3QgKilpbmZvOwotCQkJYmxrLT5oYXNodmFsID0gSU5UX0dFVChub2RlLT5idHJlZVsgSU5UX0dFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCktMSBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7CisJCQlibGstPmhhc2h2YWwgPSBiZTMyX3RvX2NwdShub2RlLT5idHJlZVtiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpLTFdLmhhc2h2YWwpOwogCQkJaWYgKGZvcndhcmQpCiAJCQkJYmxrLT5pbmRleCA9IDA7CiAJCQllbHNlCi0JCQkJYmxrLT5pbmRleCA9IElOVF9HRVQobm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTE7Ci0JCQlibGtubyA9IElOVF9HRVQobm9kZS0+YnRyZWVbIGJsay0+aW5kZXggXS5iZWZvcmUsIEFSQ0hfQ09OVkVSVCk7CisJCQkJYmxrLT5pbmRleCA9IGJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCktMTsKKwkJCWJsa25vID0gYmUzMl90b19jcHUobm9kZS0+YnRyZWVbYmxrLT5pbmRleF0uYmVmb3JlKTsKIAkJfSBlbHNlIHsKIAkJCUFTU0VSVChsZXZlbCA9PSBwYXRoLT5hY3RpdmUtMSk7CiAJCQlibGstPmluZGV4ID0gMDsKQEAgLTE3ODgsNDAgKzE3ODAsNDAgQEAKIAkvKgogCSAqIEdldCB2YWx1ZXMgZnJvbSB0aGUgbW92ZWQgYmxvY2suCiAJICovCi0JaWYgKElOVF9HRVQoZGVhZF9pbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpIHsKKwlpZiAoYmUxNl90b19jcHUoZGVhZF9pbmZvLT5tYWdpYykgPT0gWEZTX0RJUl9MRUFGX01BR0lDKSB7CiAJCUFTU0VSVChYRlNfRElSX0lTX1YxKG1wKSk7CiAJCWRlYWRfbGVhZiA9ICh4ZnNfZGlyX2xlYWZibG9ja190ICopZGVhZF9pbmZvOwogCQlkZWFkX2xldmVsID0gMDsKIAkJZGVhZF9oYXNoID0KIAkJCUlOVF9HRVQoZGVhZF9sZWFmLT5lbnRyaWVzW0lOVF9HRVQoZGVhZF9sZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpOwotCX0gZWxzZSBpZiAoSU5UX0dFVChkZWFkX2luZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKSB7CisJfSBlbHNlIGlmIChiZTE2X3RvX2NwdShkZWFkX2luZm8tPm1hZ2ljKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQykgewogCQlBU1NFUlQoWEZTX0RJUl9JU19WMihtcCkpOwogCQlkZWFkX2xlYWYyID0gKHhmc19kaXIyX2xlYWZfdCAqKWRlYWRfaW5mbzsKIAkJZGVhZF9sZXZlbCA9IDA7Ci0JCWRlYWRfaGFzaCA9IElOVF9HRVQoZGVhZF9sZWFmMi0+ZW50c1tJTlRfR0VUKGRlYWRfbGVhZjItPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7CisJCWRlYWRfaGFzaCA9IGJlMzJfdG9fY3B1KGRlYWRfbGVhZjItPmVudHNbYmUxNl90b19jcHUoZGVhZF9sZWFmMi0+aGRyLmNvdW50KSAtIDFdLmhhc2h2YWwpOwogCX0gZWxzZSB7Ci0JCUFTU0VSVChJTlRfR0VUKGRlYWRfaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RBX05PREVfTUFHSUMpOworCQlBU1NFUlQoYmUxNl90b19jcHUoZGVhZF9pbmZvLT5tYWdpYykgPT0gWEZTX0RBX05PREVfTUFHSUMpOwogCQlkZWFkX25vZGUgPSAoeGZzX2RhX2ludG5vZGVfdCAqKWRlYWRfaW5mbzsKLQkJZGVhZF9sZXZlbCA9IElOVF9HRVQoZGVhZF9ub2RlLT5oZHIubGV2ZWwsIEFSQ0hfQ09OVkVSVCk7Ci0JCWRlYWRfaGFzaCA9IElOVF9HRVQoZGVhZF9ub2RlLT5idHJlZVtJTlRfR0VUKGRlYWRfbm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gMV0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKTsKKwkJZGVhZF9sZXZlbCA9IGJlMTZfdG9fY3B1KGRlYWRfbm9kZS0+aGRyLmxldmVsKTsKKwkJZGVhZF9oYXNoID0gYmUzMl90b19jcHUoZGVhZF9ub2RlLT5idHJlZVtiZTE2X3RvX2NwdShkZWFkX25vZGUtPmhkci5jb3VudCkgLSAxXS5oYXNodmFsKTsKIAl9CiAJc2liX2J1ZiA9IHBhcl9idWYgPSBOVUxMOwogCS8qCiAJICogSWYgdGhlIG1vdmVkIGJsb2NrIGhhcyBhIGxlZnQgc2libGluZywgZml4IHVwIHRoZSBwb2ludGVycy4KIAkgKi8KLQlpZiAoKHNpYl9ibGtubyA9IElOVF9HRVQoZGVhZF9pbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQpKSkgeworCWlmICgoc2liX2Jsa25vID0gYmUzMl90b19jcHUoZGVhZF9pbmZvLT5iYWNrKSkpIHsKIAkJaWYgKChlcnJvciA9IHhmc19kYV9yZWFkX2J1Zih0cCwgaXAsIHNpYl9ibGtubywgLTEsICZzaWJfYnVmLCB3KSkpCiAJCQlnb3RvIGRvbmU7CiAJCXNpYl9pbmZvID0gc2liX2J1Zi0+ZGF0YTsKIAkJaWYgKHVubGlrZWx5KAotCQkgICAgSU5UX0dFVChzaWJfaW5mby0+Zm9ydywgQVJDSF9DT05WRVJUKSAhPSBsYXN0X2Jsa25vIHx8Ci0JCSAgICBJTlRfR0VUKHNpYl9pbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSAhPSBJTlRfR0VUKGRlYWRfaW5mby0+bWFnaWMsIEFSQ0hfQ09OVkVSVCkpKSB7CisJCSAgICBiZTMyX3RvX2NwdShzaWJfaW5mby0+Zm9ydykgIT0gbGFzdF9ibGtubyB8fAorCQkgICAgc2liX2luZm8tPm1hZ2ljICE9IGRlYWRfaW5mby0+bWFnaWMpKSB7CiAJCQlYRlNfRVJST1JfUkVQT1JUKCJ4ZnNfZGFfc3dhcF9sYXN0YmxvY2soMikiLAogCQkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbXApOwogCQkJZXJyb3IgPSBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQlJTlRfU0VUKHNpYl9pbmZvLT5mb3J3LCBBUkNIX0NPTlZFUlQsIGRlYWRfYmxrbm8pOworCQlzaWJfaW5mby0+Zm9ydyA9IGNwdV90b19iZTMyKGRlYWRfYmxrbm8pOwogCQl4ZnNfZGFfbG9nX2J1Zih0cCwgc2liX2J1ZiwKIAkJCVhGU19EQV9MT0dSQU5HRShzaWJfaW5mbywgJnNpYl9pbmZvLT5mb3J3LAogCQkJCQlzaXplb2Yoc2liX2luZm8tPmZvcncpKSk7CkBAIC0xODMxLDIwICsxODIzLDE5IEBACiAJLyoKIAkgKiBJZiB0aGUgbW92ZWQgYmxvY2sgaGFzIGEgcmlnaHQgc2libGluZywgZml4IHVwIHRoZSBwb2ludGVycy4KIAkgKi8KLQlpZiAoKHNpYl9ibGtubyA9IElOVF9HRVQoZGVhZF9pbmZvLT5mb3J3LCBBUkNIX0NPTlZFUlQpKSkgeworCWlmICgoc2liX2Jsa25vID0gYmUzMl90b19jcHUoZGVhZF9pbmZvLT5mb3J3KSkpIHsKIAkJaWYgKChlcnJvciA9IHhmc19kYV9yZWFkX2J1Zih0cCwgaXAsIHNpYl9ibGtubywgLTEsICZzaWJfYnVmLCB3KSkpCiAJCQlnb3RvIGRvbmU7CiAJCXNpYl9pbmZvID0gc2liX2J1Zi0+ZGF0YTsKIAkJaWYgKHVubGlrZWx5KAotCQkgICAgICAgSU5UX0dFVChzaWJfaW5mby0+YmFjaywgQVJDSF9DT05WRVJUKSAhPSBsYXN0X2Jsa25vCi0JCSAgICB8fCBJTlRfR0VUKHNpYl9pbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCSE9IElOVF9HRVQoZGVhZF9pbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSkpIHsKKwkJICAgICAgIGJlMzJfdG9fY3B1KHNpYl9pbmZvLT5iYWNrKSAhPSBsYXN0X2Jsa25vIHx8CisJCSAgICAgICBzaWJfaW5mby0+bWFnaWMgIT0gZGVhZF9pbmZvLT5tYWdpYykpIHsKIAkJCVhGU19FUlJPUl9SRVBPUlQoInhmc19kYV9zd2FwX2xhc3RibG9jaygzKSIsCiAJCQkJCSBYRlNfRVJSTEVWRUxfTE9XLCBtcCk7CiAJCQllcnJvciA9IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCUlOVF9TRVQoc2liX2luZm8tPmJhY2ssIEFSQ0hfQ09OVkVSVCwgZGVhZF9ibGtubyk7CisJCXNpYl9pbmZvLT5iYWNrID0gY3B1X3RvX2JlMzIoZGVhZF9ibGtubyk7CiAJCXhmc19kYV9sb2dfYnVmKHRwLCBzaWJfYnVmLAogCQkJWEZTX0RBX0xPR1JBTkdFKHNpYl9pbmZvLCAmc2liX2luZm8tPmJhY2ssCiAJCQkJCXNpemVvZihzaWJfaW5mby0+YmFjaykpKTsKQEAgLTE4NjEsMjYgKzE4NTIsMjYgQEAKIAkJCWdvdG8gZG9uZTsKIAkJcGFyX25vZGUgPSBwYXJfYnVmLT5kYXRhOwogCQlpZiAodW5saWtlbHkoCi0JCSAgICBJTlRfR0VUKHBhcl9ub2RlLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSAhPSBYRlNfREFfTk9ERV9NQUdJQyB8fAotCQkgICAgKGxldmVsID49IDAgJiYgbGV2ZWwgIT0gSU5UX0dFVChwYXJfbm9kZS0+aGRyLmxldmVsLCBBUkNIX0NPTlZFUlQpICsgMSkpKSB7CisJCSAgICBiZTE2X3RvX2NwdShwYXJfbm9kZS0+aGRyLmluZm8ubWFnaWMpICE9IFhGU19EQV9OT0RFX01BR0lDIHx8CisJCSAgICAobGV2ZWwgPj0gMCAmJiBsZXZlbCAhPSBiZTE2X3RvX2NwdShwYXJfbm9kZS0+aGRyLmxldmVsKSArIDEpKSkgewogCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2RhX3N3YXBfbGFzdGJsb2NrKDQpIiwKIAkJCQkJIFhGU19FUlJMRVZFTF9MT1csIG1wKTsKIAkJCWVycm9yID0gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJCQlnb3RvIGRvbmU7CiAJCX0KLQkJbGV2ZWwgPSBJTlRfR0VUKHBhcl9ub2RlLT5oZHIubGV2ZWwsIEFSQ0hfQ09OVkVSVCk7CisJCWxldmVsID0gYmUxNl90b19jcHUocGFyX25vZGUtPmhkci5sZXZlbCk7CiAJCWZvciAoZW50bm8gPSAwOwotCQkgICAgIGVudG5vIDwgSU5UX0dFVChwYXJfbm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICYmCi0JCSAgICAgSU5UX0dFVChwYXJfbm9kZS0+YnRyZWVbZW50bm9dLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPCBkZWFkX2hhc2g7CisJCSAgICAgZW50bm8gPCBiZTE2X3RvX2NwdShwYXJfbm9kZS0+aGRyLmNvdW50KSAmJgorCQkgICAgIGJlMzJfdG9fY3B1KHBhcl9ub2RlLT5idHJlZVtlbnRub10uaGFzaHZhbCkgPCBkZWFkX2hhc2g7CiAJCSAgICAgZW50bm8rKykKIAkJCWNvbnRpbnVlOwotCQlpZiAodW5saWtlbHkoZW50bm8gPT0gSU5UX0dFVChwYXJfbm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKSkgeworCQlpZiAodW5saWtlbHkoZW50bm8gPT0gYmUxNl90b19jcHUocGFyX25vZGUtPmhkci5jb3VudCkpKSB7CiAJCQlYRlNfRVJST1JfUkVQT1JUKCJ4ZnNfZGFfc3dhcF9sYXN0YmxvY2soNSkiLAogCQkJCQkgWEZTX0VSUkxFVkVMX0xPVywgbXApOwogCQkJZXJyb3IgPSBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQlwYXJfYmxrbm8gPSBJTlRfR0VUKHBhcl9ub2RlLT5idHJlZVtlbnRub10uYmVmb3JlLCBBUkNIX0NPTlZFUlQpOworCQlwYXJfYmxrbm8gPSBiZTMyX3RvX2NwdShwYXJfbm9kZS0+YnRyZWVbZW50bm9dLmJlZm9yZSk7CiAJCWlmIChsZXZlbCA9PSBkZWFkX2xldmVsICsgMSkKIAkJCWJyZWFrOwogCQl4ZnNfZGFfYnJlbHNlKHRwLCBwYXJfYnVmKTsKQEAgLTE4OTIsMTMgKzE4ODMsMTMgQEAKIAkgKi8KIAlmb3IgKDs7KSB7CiAJCWZvciAoOwotCQkgICAgIGVudG5vIDwgSU5UX0dFVChwYXJfbm9kZS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICYmCi0JCSAgICAgSU5UX0dFVChwYXJfbm9kZS0+YnRyZWVbZW50bm9dLmJlZm9yZSwgQVJDSF9DT05WRVJUKSAhPSBsYXN0X2Jsa25vOworCQkgICAgIGVudG5vIDwgYmUxNl90b19jcHUocGFyX25vZGUtPmhkci5jb3VudCkgJiYKKwkJICAgICBiZTMyX3RvX2NwdShwYXJfbm9kZS0+YnRyZWVbZW50bm9dLmJlZm9yZSkgIT0gbGFzdF9ibGtubzsKIAkJICAgICBlbnRubysrKQogCQkJY29udGludWU7Ci0JCWlmIChlbnRubyA8IElOVF9HRVQocGFyX25vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkKKwkJaWYgKGVudG5vIDwgYmUxNl90b19jcHUocGFyX25vZGUtPmhkci5jb3VudCkpCiAJCQlicmVhazsKLQkJcGFyX2Jsa25vID0gSU5UX0dFVChwYXJfbm9kZS0+aGRyLmluZm8uZm9ydywgQVJDSF9DT05WRVJUKTsKKwkJcGFyX2Jsa25vID0gYmUzMl90b19jcHUocGFyX25vZGUtPmhkci5pbmZvLmZvcncpOwogCQl4ZnNfZGFfYnJlbHNlKHRwLCBwYXJfYnVmKTsKIAkJcGFyX2J1ZiA9IE5VTEw7CiAJCWlmICh1bmxpa2VseShwYXJfYmxrbm8gPT0gMCkpIHsKQEAgLTE5MTEsOCArMTkwMiw4IEBACiAJCQlnb3RvIGRvbmU7CiAJCXBhcl9ub2RlID0gcGFyX2J1Zi0+ZGF0YTsKIAkJaWYgKHVubGlrZWx5KAotCQkgICAgSU5UX0dFVChwYXJfbm9kZS0+aGRyLmxldmVsLCBBUkNIX0NPTlZFUlQpICE9IGxldmVsIHx8Ci0JCSAgICBJTlRfR0VUKHBhcl9ub2RlLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSAhPSBYRlNfREFfTk9ERV9NQUdJQykpIHsKKwkJICAgIGJlMTZfdG9fY3B1KHBhcl9ub2RlLT5oZHIubGV2ZWwpICE9IGxldmVsIHx8CisJCSAgICBiZTE2X3RvX2NwdShwYXJfbm9kZS0+aGRyLmluZm8ubWFnaWMpICE9IFhGU19EQV9OT0RFX01BR0lDKSkgewogCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2RhX3N3YXBfbGFzdGJsb2NrKDcpIiwKIAkJCQkJIFhGU19FUlJMRVZFTF9MT1csIG1wKTsKIAkJCWVycm9yID0gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CkBAIC0xOTIzLDcgKzE5MTQsNyBAQAogCS8qCiAJICogVXBkYXRlIHRoZSBwYXJlbnQgZW50cnkgcG9pbnRpbmcgdG8gdGhlIG1vdmVkIGJsb2NrLgogCSAqLwotCUlOVF9TRVQocGFyX25vZGUtPmJ0cmVlW2VudG5vXS5iZWZvcmUsIEFSQ0hfQ09OVkVSVCwgZGVhZF9ibGtubyk7CisJcGFyX25vZGUtPmJ0cmVlW2VudG5vXS5iZWZvcmUgPSBjcHVfdG9fYmUzMihkZWFkX2Jsa25vKTsKIAl4ZnNfZGFfbG9nX2J1Zih0cCwgcGFyX2J1ZiwKIAkJWEZTX0RBX0xPR1JBTkdFKHBhcl9ub2RlLCAmcGFyX25vZGUtPmJ0cmVlW2VudG5vXS5iZWZvcmUsCiAJCQkJc2l6ZW9mKHBhcl9ub2RlLT5idHJlZVtlbnRub10uYmVmb3JlKSkpOwpAQCAtMjIwMyw4ICsyMTk0LDggQEAKIAkJaW5mbyA9IHJicC0+ZGF0YTsKIAkJZGF0YSA9IHJicC0+ZGF0YTsKIAkJZnJlZSA9IHJicC0+ZGF0YTsKLQkJbWFnaWMgPSBJTlRfR0VUKGluZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpOwotCQltYWdpYzEgPSBJTlRfR0VUKGRhdGEtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKTsKKwkJbWFnaWMgPSBiZTE2X3RvX2NwdShpbmZvLT5tYWdpYyk7CisJCW1hZ2ljMSA9IGJlMzJfdG9fY3B1KGRhdGEtPmhkci5tYWdpYyk7CiAJCWlmICh1bmxpa2VseSgKIAkJICAgIFhGU19URVNUX0VSUk9SKChtYWdpYyAhPSBYRlNfREFfTk9ERV9NQUdJQykgJiYKIAkJCQkgICAobWFnaWMgIT0gWEZTX0RJUl9MRUFGX01BR0lDKSAmJgpAQCAtMjIxMyw3ICsyMjA0LDcgQEAKIAkJCQkgICAobWFnaWMgIT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpICYmCiAJCQkJICAgKG1hZ2ljMSAhPSBYRlNfRElSMl9CTE9DS19NQUdJQykgJiYKIAkJCQkgICAobWFnaWMxICE9IFhGU19ESVIyX0RBVEFfTUFHSUMpICYmCi0JCQkJICAgKElOVF9HRVQoZnJlZS0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpICE9IFhGU19ESVIyX0ZSRUVfTUFHSUMpLAorCQkJCSAgIChiZTMyX3RvX2NwdShmcmVlLT5oZHIubWFnaWMpICE9IFhGU19ESVIyX0ZSRUVfTUFHSUMpLAogCQkJCW1wLCBYRlNfRVJSVEFHX0RBX1JFQURfQlVGLAogCQkJCVhGU19SQU5ET01fREFfUkVBRF9CVUYpKSkgewogCQkJeGZzX2J1ZnRyYWNlKCJEQSBSRUFEIEVSUk9SIiwgcmJwLT5icHNbMF0pOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kYV9idHJlZS5oIGIvZnMveGZzL3hmc19kYV9idHJlZS5oCmluZGV4IDQxMzUyMTEuLjI0M2E3MzAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmgKQEAgLTQ1LDEwICs0NSwxMCBAQAogCShYRlNfRElSX0lTX1YxKG1wKSA/IFhGU19ESVJfTEVBRl9NQUdJQyA6IFhGU19ESVIyX0xFQUZOX01BR0lDKQogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZGFfYmxraW5mbyB7Ci0JeGZzX2RhYmxrX3QgZm9ydzsJCQkvKiBwcmV2aW91cyBibG9jayBpbiBsaXN0ICovCi0JeGZzX2RhYmxrX3QgYmFjazsJCQkvKiBmb2xsb3dpbmcgYmxvY2sgaW4gbGlzdCAqLwotCV9fdWludDE2X3QgbWFnaWM7CQkJLyogdmFsaWRpdHkgY2hlY2sgb24gYmxvY2sgKi8KLQlfX3VpbnQxNl90IHBhZDsJCQkJLyogdW51c2VkICovCisJX19iZTMyCQlmb3J3OwkJCS8qIHByZXZpb3VzIGJsb2NrIGluIGxpc3QgKi8KKwlfX2JlMzIJCWJhY2s7CQkJLyogZm9sbG93aW5nIGJsb2NrIGluIGxpc3QgKi8KKwlfX2JlMTYJCW1hZ2ljOwkJCS8qIHZhbGlkaXR5IGNoZWNrIG9uIGJsb2NrICovCisJX19iZTE2CQlwYWQ7CQkJLyogdW51c2VkICovCiB9IHhmc19kYV9ibGtpbmZvX3Q7CiAKIC8qCkBAIC02NSwxMiArNjUsMTIgQEAKIHR5cGVkZWYgc3RydWN0IHhmc19kYV9pbnRub2RlIHsKIAlzdHJ1Y3QgeGZzX2RhX25vZGVfaGRyIHsJLyogY29uc3RhbnQtc3RydWN0dXJlIGhlYWRlciBibG9jayAqLwogCQl4ZnNfZGFfYmxraW5mb190IGluZm87CS8qIGJsb2NrIHR5cGUsIGxpbmtzLCBldGMuICovCi0JCV9fdWludDE2X3QgY291bnQ7CS8qIGNvdW50IG9mIGFjdGl2ZSBlbnRyaWVzICovCi0JCV9fdWludDE2X3QgbGV2ZWw7CS8qIGxldmVsIGFib3ZlIGxlYXZlcyAobGVhZiA9PSAwKSAqLworCQlfX2JlMTYJY291bnQ7CQkvKiBjb3VudCBvZiBhY3RpdmUgZW50cmllcyAqLworCQlfX2JlMTYJbGV2ZWw7CQkvKiBsZXZlbCBhYm92ZSBsZWF2ZXMgKGxlYWYgPT0gMCkgKi8KIAl9IGhkcjsKIAlzdHJ1Y3QgeGZzX2RhX25vZGVfZW50cnkgewotCQl4ZnNfZGFoYXNoX3QgaGFzaHZhbDsJLyogaGFzaCB2YWx1ZSBmb3IgdGhpcyBkZXNjZW5kYW50ICovCi0JCXhmc19kYWJsa190IGJlZm9yZTsJLyogQnRyZWUgYmxvY2sgYmVmb3JlIHRoaXMga2V5ICovCisJCV9fYmUzMgloYXNodmFsOwkvKiBoYXNoIHZhbHVlIGZvciB0aGlzIGRlc2NlbmRhbnQgKi8KKwkJX19iZTMyCWJlZm9yZTsJCS8qIEJ0cmVlIGJsb2NrIGJlZm9yZSB0aGlzIGtleSAqLwogCX0gYnRyZWVbMV07CQkJLyogdmFyaWFibGUgc2l6ZWQgYXJyYXkgb2Yga2V5cyAqLwogfSB4ZnNfZGFfaW50bm9kZV90OwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2RhX25vZGVfaGRyIHhmc19kYV9ub2RlX2hkcl90OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kZnJhZy5jIGIvZnMveGZzL3hmc19kZnJhZy5jCmluZGV4IGM2MTkxZDAuLjQ5NjhhNjMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGZyYWcuYworKysgYi9mcy94ZnMveGZzX2RmcmFnLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAogCS8qIFB1bGwgaW5mb3JtYXRpb24gZm9yIHRoZSB0YXJnZXQgZmQgKi8KIAlpZiAoKChmcCA9IGZnZXQoKGludClzeHAtPnN4X2ZkdGFyZ2V0KSkgPT0gTlVMTCkgfHwKLQkgICAgKCh2cCA9IExJTlZGU19HRVRfVlAoZnAtPmZfZGVudHJ5LT5kX2lub2RlKSkgPT0gTlVMTCkpICB7CisJICAgICgodnAgPSB2bl9mcm9tX2lub2RlKGZwLT5mX2RlbnRyeS0+ZF9pbm9kZSkpID09IE5VTEwpKSAgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwogCQlnb3RvIGVycm9yMDsKIAl9CkBAIC05NSw3ICs5NSw3IEBACiAJfQogCiAJaWYgKCgodGZwID0gZmdldCgoaW50KXN4cC0+c3hfZmR0bXApKSA9PSBOVUxMKSB8fAotCSAgICAoKHR2cCA9IExJTlZGU19HRVRfVlAodGZwLT5mX2RlbnRyeS0+ZF9pbm9kZSkpID09IE5VTEwpKSB7CisJICAgICgodHZwID0gdm5fZnJvbV9pbm9kZSh0ZnAtPmZfZGVudHJ5LT5kX2lub2RlKSkgPT0gTlVMTCkpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKIAkJZ290byBlcnJvcjA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIuYyBiL2ZzL3hmcy94ZnNfZGlyLmMKaW5kZXggYmI4N2QyYS4uOWNjNzAyYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIuYworKysgYi9mcy94ZnMveGZzX2Rpci5jCkBAIC02MzQsNyArNjM0LDcgQEAKIAkJcmV0dXJuKHJldHZhbCk7CiAJQVNTRVJUKGJwICE9IE5VTEwpOwogCWxlYWYgPSBicC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUl9MRUFGX01BR0lDKTsKIAlyZXR2YWwgPSB4ZnNfZGlyX2xlYWZfbG9va3VwX2ludChicCwgYXJncywgJmluZGV4KTsKIAlpZiAocmV0dmFsID09IEVFWElTVCkgewogCQkodm9pZCl4ZnNfZGlyX2xlYWZfcmVtb3ZlKGFyZ3MtPnRyYW5zLCBicCwgaW5kZXgpOwpAQCAtOTEyLDcgKzkxMiw3IEBACiAJCQlyZXR1cm4oZXJyb3IpOwogCQlpZiAoYnApCiAJCQlsZWFmID0gYnAtPmRhdGE7Ci0JCWlmIChicCAmJiBJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpICE9IFhGU19ESVJfTEVBRl9NQUdJQykgeworCQlpZiAoYnAgJiYgYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpICE9IFhGU19ESVJfTEVBRl9NQUdJQykgewogCQkJeGZzX2Rpcl90cmFjZV9nX2R1Yigibm9kZTogYmxvY2sgbm90IGEgbGVhZiIsCiAJCQkJCQkgICBkcCwgdWlvLCBibm8pOwogCQkJeGZzX2RhX2JyZWxzZSh0cmFucywgYnApOwpAQCAtOTQ5LDE3ICs5NDksMTcgQEAKIAkJCWlmIChicCA9PSBOVUxMKQogCQkJCXJldHVybihYRlNfRVJST1IoRUZTQ09SUlVQVEVEKSk7CiAJCQlub2RlID0gYnAtPmRhdGE7Ci0JCQlpZiAoSU5UX0dFVChub2RlLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSAhPSBYRlNfREFfTk9ERV9NQUdJQykKKwkJCWlmIChiZTE2X3RvX2NwdShub2RlLT5oZHIuaW5mby5tYWdpYykgIT0gWEZTX0RBX05PREVfTUFHSUMpCiAJCQkJYnJlYWs7CiAJCQlidHJlZSA9ICZub2RlLT5idHJlZVswXTsKIAkJCXhmc19kaXJfdHJhY2VfZ19kdW4oIm5vZGU6IG5vZGUgZGV0YWlsIiwgZHAsIHVpbywgbm9kZSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgSU5UX0dFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7IGJ0cmVlKyssIGkrKykgewotCQkJCWlmIChJTlRfR0VUKGJ0cmVlLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID49IGNvb2toYXNoKSB7Ci0JCQkJCWJubyA9IElOVF9HRVQoYnRyZWUtPmJlZm9yZSwgQVJDSF9DT05WRVJUKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpOyBidHJlZSsrLCBpKyspIHsKKwkJCQlpZiAoYmUzMl90b19jcHUoYnRyZWUtPmhhc2h2YWwpID49IGNvb2toYXNoKSB7CisJCQkJCWJubyA9IGJlMzJfdG9fY3B1KGJ0cmVlLT5iZWZvcmUpOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAoaSA9PSBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkgeworCQkJaWYgKGkgPT0gYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KSkgewogCQkJCXhmc19kYV9icmVsc2UodHJhbnMsIGJwKTsKIAkJCQl4ZnNfZGlyX3RyYWNlX2dfZHUoIm5vZGU6IGhhc2ggYmV5b25kIEVPRiIsCiAJCQkJCQkJICBkcCwgdWlvKTsKQEAgLTk4Miw3ICs5ODIsNyBAQAogCSAqLwogCWZvciAoOzspIHsKIAkJbGVhZiA9IGJwLT5kYXRhOwotCQlpZiAodW5saWtlbHkoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSAhPSBYRlNfRElSX0xFQUZfTUFHSUMpKSB7CisJCWlmICh1bmxpa2VseShiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgIT0gWEZTX0RJUl9MRUFGX01BR0lDKSkgewogCQkJeGZzX2Rpcl90cmFjZV9nX2R1bCgibm9kZTogbm90IGEgbGVhZiIsIGRwLCB1aW8sIGxlYWYpOwogCQkJeGZzX2RhX2JyZWxzZSh0cmFucywgYnApOwogCQkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19kaXJfbm9kZV9nZXRkZW50cygxKSIsCkBAIC05OTAsNyArOTkwLDcgQEAKIAkJCXJldHVybiBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKIAkJfQogCQl4ZnNfZGlyX3RyYWNlX2dfZHVsKCJub2RlOiBsZWFmIGRldGFpbCIsIGRwLCB1aW8sIGxlYWYpOwotCQlpZiAoKG5leHRibm8gPSBJTlRfR0VUKGxlYWYtPmhkci5pbmZvLmZvcncsIEFSQ0hfQ09OVkVSVCkpKSB7CisJCWlmICgobmV4dGJubyA9IGJlMzJfdG9fY3B1KGxlYWYtPmhkci5pbmZvLmZvcncpKSkgewogCQkJbmV4dGRhID0geGZzX2RhX3JlYWRhX2J1Zih0cmFucywgZHAsIG5leHRibm8sCiAJCQkJCQkgIFhGU19EQVRBX0ZPUkspOwogCQl9IGVsc2UKQEAgLTExMTgsMjEgKzExMTgsMjAgQEAKIHhmc19kaXJfdHJhY2VfZ19kdW4oY2hhciAqd2hlcmUsIHhmc19pbm9kZV90ICpkcCwgdWlvX3QgKnVpbywKIAkJCXhmc19kYV9pbnRub2RlX3QgKm5vZGUpCiB7Ci0JaW50CWxhc3QgPSBJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDE7CisJaW50CWxhc3QgPSBiZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpIC0gMTsKIAogCXhmc19kaXJfdHJhY2VfZW50ZXIoWEZTX0RJUl9LVFJBQ0VfR19EVU4sIHdoZXJlLAogCQkgICAgICh2b2lkICopZHAsICh2b2lkICopZHAtPmlfbW91bnQsCiAJCSAgICAgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHVpby0+dWlvX29mZnNldCA+PiAzMikpLAogCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh1aW8tPnVpb19vZmZzZXQgJiAweEZGRkZGRkZGKSksCiAJCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZyl1aW8tPnVpb19yZXNpZCwKKwkJICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWJlMzJfdG9fY3B1KG5vZGUtPmhkci5pbmZvLmZvcncpLAogCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpCi0JCQlJTlRfR0VUKG5vZGUtPmhkci5pbmZvLmZvcncsIEFSQ0hfQ09OVkVSVCksCisJCQliZTE2X3RvX2NwdShub2RlLT5oZHIuY291bnQpLAogCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpCi0JCQlJTlRfR0VUKG5vZGUtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSwKKwkJCWJlMzJfdG9fY3B1KG5vZGUtPmJ0cmVlWzBdLmhhc2h2YWwpLAogCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpCi0JCQlJTlRfR0VUKG5vZGUtPmJ0cmVlWzBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCksCi0JCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykKLQkJCUlOVF9HRVQobm9kZS0+YnRyZWVbbGFzdF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSwKKwkJCWJlMzJfdG9fY3B1KG5vZGUtPmJ0cmVlW2xhc3RdLmhhc2h2YWwpLAogCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwogfQogCkBAIC0xMTUwLDggKzExNDksNyBAQAogCQkgICAgICh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh1aW8tPnVpb19vZmZzZXQgPj4gMzIpKSwKIAkJICAgICAodm9pZCAqKSgodW5zaWduZWQgbG9uZykodWlvLT51aW9fb2Zmc2V0ICYgMHhGRkZGRkZGRikpLAogCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpdWlvLT51aW9fcmVzaWQsCi0JCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZykKLQkJCUlOVF9HRVQobGVhZi0+aGRyLmluZm8uZm9ydywgQVJDSF9DT05WRVJUKSwKKwkJICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWJlMzJfdG9fY3B1KGxlYWYtPmhkci5pbmZvLmZvcncpLAogCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpCiAJCQlJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSwKIAkJICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyLmggYi9mcy94ZnMveGZzX2RpcjIuaAppbmRleCAzMTU4ZjVkLi43ZGQzNjRiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjIuaAorKysgYi9mcy94ZnMveGZzX2RpcjIuaApAQCAtNTUsMTYgKzU1LDE2IEBACiAvKgogICogQnl0ZSBvZmZzZXQgaW4gYSBkaXJlY3RvcnkuCiAgKi8KLXR5cGVkZWYJeGZzX29mZl90CQl4ZnNfZGlyMl9vZmZfdDsKK3R5cGVkZWYJeGZzX29mZl90CXhmc19kaXIyX29mZl90OwogCiAvKgogICogRm9yIGdldGRlbnRzLCBhcmd1bWVudCBzdHJ1Y3QgZm9yIHB1dCByb3V0aW5lcy4KICAqLwogdHlwZWRlZiBpbnQgKCp4ZnNfZGlyMl9wdXRfdCkoc3RydWN0IHhmc19kaXIyX3B1dF9hcmdzICpwYSk7CiB0eXBlZGVmIHN0cnVjdCB4ZnNfZGlyMl9wdXRfYXJncyB7Ci0JeGZzX29mZl90CQljb29rOwkJLyogY29va2llIG9mIChuZXh0KSBlbnRyeSAqLworCXhmc19vZmZfdAljb29rOwkJLyogY29va2llIG9mIChuZXh0KSBlbnRyeSAqLwogCXhmc19pbnRpbm9fdAlpbm87CQkvKiBpbm9kZSBudW1iZXIgKi8KLQlzdHJ1Y3QgeGZzX2RpcmVudAkqZGJwOwkJLyogYnVmZmVyIHBvaW50ZXIgKi8KKwl4ZnNfZGlyZW50X3QJKmRicDsJCS8qIGJ1ZmZlciBwb2ludGVyICovCiAJY2hhcgkJKm5hbWU7CQkvKiBkaXJlY3RvcnkgZW50cnkgbmFtZSAqLwogCWludAkJbmFtZWxlbjsJLyogbGVuZ3RoIG9mIG5hbWUgKi8KIAlpbnQJCWRvbmU7CQkvKiBvdXRwdXQ6IHNldCBpZiB2YWx1ZSB3YXMgc3RvcmVkICovCkBAIC03NSwxOCArNzUsMTMgQEAKIC8qCiAgKiBPdGhlciBpbnRlcmZhY2VzIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGRpciB2MiBjb2RlLgogICovCi1leHRlcm4gaW50Ci0JeGZzX2RpcjJfZ3Jvd19pbm9kZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsIGludCBzcGFjZSwKLQkJCSAgICB4ZnNfZGlyMl9kYl90ICpkYnApOwotCi1leHRlcm4gaW50Ci0JeGZzX2RpcjJfaXNibG9jayhzdHJ1Y3QgeGZzX3RyYW5zICp0cCwgc3RydWN0IHhmc19pbm9kZSAqZHAsIGludCAqdnApOwotCi1leHRlcm4gaW50Ci0JeGZzX2RpcjJfaXNsZWFmKHN0cnVjdCB4ZnNfdHJhbnMgKnRwLCBzdHJ1Y3QgeGZzX2lub2RlICpkcCwgaW50ICp2cCk7Ci0KLWV4dGVybiBpbnQKLQl4ZnNfZGlyMl9zaHJpbmtfaW5vZGUoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLCB4ZnNfZGlyMl9kYl90IGRiLAotCQkJICAgICAgc3RydWN0IHhmc19kYWJ1ZiAqYnApOworZXh0ZXJuIGludCB4ZnNfZGlyMl9ncm93X2lub2RlKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywgaW50IHNwYWNlLAorCQkJCXhmc19kaXIyX2RiX3QgKmRicCk7CitleHRlcm4gaW50IHhmc19kaXIyX2lzYmxvY2soc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfaW5vZGUgKmRwLAorCQkJCWludCAqdnApOworZXh0ZXJuIGludCB4ZnNfZGlyMl9pc2xlYWYoc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfaW5vZGUgKmRwLAorCQkJCWludCAqdnApOworZXh0ZXJuIGludCB4ZnNfZGlyMl9zaHJpbmtfaW5vZGUoc3RydWN0IHhmc19kYV9hcmdzICphcmdzLCB4ZnNfZGlyMl9kYl90IGRiLAorCQkJCXN0cnVjdCB4ZnNfZGFidWYgKmJwKTsKIAogI2VuZGlmCS8qIF9fWEZTX0RJUjJfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfYmxvY2suYyBiL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCmluZGV4IDMxYmM5OWYuLmJkNWNlZTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCkBAIC04MSw3ICs4MSw3IEBACiAJeGZzX21vdW50X3QJCSptcDsJCS8qIGZpbGVzeXN0ZW0gbW91bnQgcG9pbnQgKi8KIAlpbnQJCQluZWVkbG9nOwkvKiBuZWVkIHRvIGxvZyBoZWFkZXIgKi8KIAlpbnQJCQluZWVkc2NhbjsJLyogbmVlZCB0byByZXNjYW4gZnJlZXNwYWNlICovCi0JeGZzX2RpcjJfZGF0YV9vZmZfdAkqdGFncDsJCS8qIHBvaW50ZXIgdG8gdGFnIHZhbHVlICovCisJX19iZTE2CQkJKnRhZ3A7CQkvKiBwb2ludGVyIHRvIHRhZyB2YWx1ZSAqLwogCXhmc190cmFuc190CQkqdHA7CQkvKiB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmUgKi8KIAogCXhmc19kaXIyX3RyYWNlX2FyZ3MoImJsb2NrX2FkZG5hbWUiLCBhcmdzKTsKQEAgLTEwMCw4ICsxMDAsNyBAQAogCS8qCiAJICogQ2hlY2sgdGhlIG1hZ2ljIG51bWJlciwgY29ycnVwdGVkIGlmIHdyb25nLgogCSAqLwotCWlmICh1bmxpa2VseShJTlRfR0VUKGJsb2NrLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkKLQkJCQkJCSE9IFhGU19ESVIyX0JMT0NLX01BR0lDKSkgeworCWlmICh1bmxpa2VseShiZTMyX3RvX2NwdShibG9jay0+aGRyLm1hZ2ljKSAhPSBYRlNfRElSMl9CTE9DS19NQUdJQykpIHsKIAkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19kaXIyX2Jsb2NrX2FkZG5hbWUiLAogCQkJCSAgICAgWEZTX0VSUkxFVkVMX0xPVywgbXAsIGJsb2NrKTsKIAkJeGZzX2RhX2JyZWxzZSh0cCwgYnApOwpAQCAtMTIxLDM4ICsxMjAsMzggQEAKIAkJLyoKIAkJICogVGFnIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBsZWFmIGVudHJ5LgogCQkgKi8KLQkJdGFncCA9ICh4ZnNfZGlyMl9kYXRhX29mZl90ICopYmxwIC0gMTsKKwkJdGFncCA9IChfX2JlMTYgKilibHAgLSAxOwogCQkvKgogCQkgKiBEYXRhIG9iamVjdCBqdXN0IGJlZm9yZSB0aGUgZmlyc3QgbGVhZiBlbnRyeS4KIAkJICovCi0JCWVuZGR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopKChjaGFyICopYmxvY2sgKyBJTlRfR0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQpKTsKKwkJZW5kZHVwID0gKHhmc19kaXIyX2RhdGFfdW51c2VkX3QgKikoKGNoYXIgKilibG9jayArIGJlMTZfdG9fY3B1KCp0YWdwKSk7CiAJCS8qCiAJCSAqIElmIGl0J3Mgbm90IGZyZWUgdGhlbiBjYW4ndCBkbyB0aGlzIGFkZCB3aXRob3V0IGNsZWFuaW5nIHVwOgogCQkgKiB0aGUgc3BhY2UgYmVmb3JlIHRoZSBmaXJzdCBsZWFmIGVudHJ5IG5lZWRzIHRvIGJlIGZyZWUgc28gaXQKIAkJICogY2FuIGJlIGV4cGFuZGVkIHRvIGhvbGQgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBlbnRyeS4KIAkJICovCi0JCWlmIChJTlRfR0VUKGVuZGR1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJUKSAhPSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKQorCQlpZiAoYmUxNl90b19jcHUoZW5kZHVwLT5mcmVldGFnKSAhPSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKQogCQkJZHVwID0gZW5kZHVwID0gTlVMTDsKIAkJLyoKIAkJICogQ2hlY2sgb3V0IHRoZSBiaWdnZXN0IGZyZWVzcGFjZSBhbmQgc2VlIGlmIGl0J3MgdGhlIHNhbWUgb25lLgogCQkgKi8KIAkJZWxzZSB7CiAJCQlkdXAgPSAoeGZzX2RpcjJfZGF0YV91bnVzZWRfdCAqKQotCQkJICAgICAgKChjaGFyICopYmxvY2sgKyBJTlRfR0VUKGJmWzBdLm9mZnNldCwgQVJDSF9DT05WRVJUKSk7CisJCQkgICAgICAoKGNoYXIgKilibG9jayArIGJlMTZfdG9fY3B1KGJmWzBdLm9mZnNldCkpOwogCQkJaWYgKGR1cCA9PSBlbmRkdXApIHsKIAkJCQkvKgogCQkJCSAqIEl0IGlzIHRoZSBiaWdnZXN0IGZyZWVzcGFjZSwgaXMgaXQgdG9vIHNtYWxsCiAJCQkJICogdG8gaG9sZCB0aGUgbmV3IGxlYWYgdG9vPwogCQkJCSAqLwotCQkJCWlmIChJTlRfR0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpIDwgbGVuICsgKHVpbnQpc2l6ZW9mKCpibHApKSB7CisJCQkJaWYgKGJlMTZfdG9fY3B1KGR1cC0+bGVuZ3RoKSA8IGxlbiArICh1aW50KXNpemVvZigqYmxwKSkgewogCQkJCQkvKgogCQkJCQkgKiBZZXMsIHdlIHVzZSB0aGUgc2Vjb25kLWxhcmdlc3QKIAkJCQkJICogZW50cnkgaW5zdGVhZCBpZiBpdCB3b3Jrcy4KIAkJCQkJICovCi0JCQkJCWlmIChJTlRfR0VUKGJmWzFdLmxlbmd0aCwgQVJDSF9DT05WRVJUKSA+PSBsZW4pCisJCQkJCWlmIChiZTE2X3RvX2NwdShiZlsxXS5sZW5ndGgpID49IGxlbikKIAkJCQkJCWR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopCiAJCQkJCQkgICAgICAoKGNoYXIgKilibG9jayArCi0JCQkJCQkgICAgICAgSU5UX0dFVChiZlsxXS5vZmZzZXQsIEFSQ0hfQ09OVkVSVCkpOworCQkJCQkJICAgICAgIGJlMTZfdG9fY3B1KGJmWzFdLm9mZnNldCkpOwogCQkJCQllbHNlCiAJCQkJCQlkdXAgPSBOVUxMOwogCQkJCX0KQEAgLTE2MSw3ICsxNjAsNyBAQAogCQkJCSAqIE5vdCB0aGUgc2FtZSBmcmVlIGVudHJ5LAogCQkJCSAqIGp1c3QgY2hlY2sgaXRzIGxlbmd0aC4KIAkJCQkgKi8KLQkJCQlpZiAoSU5UX0dFVChkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKSA8IGxlbikgeworCQkJCWlmIChiZTE2X3RvX2NwdShkdXAtPmxlbmd0aCkgPCBsZW4pIHsKIAkJCQkJZHVwID0gTlVMTDsKIAkJCQl9CiAJCQl9CkBAIC0xNzIsOSArMTcxLDkgQEAKIAkgKiBJZiB0aGVyZSBhcmUgc3RhbGUgZW50cmllcyB3ZSdsbCB1c2Ugb25lIGZvciB0aGUgbGVhZi4KIAkgKiBJcyB0aGUgYmlnZ2VzdCBlbnRyeSBlbm91Z2ggdG8gYXZvaWQgY29tcGFjdGlvbj8KIAkgKi8KLQllbHNlIGlmIChJTlRfR0VUKGJmWzBdLmxlbmd0aCwgQVJDSF9DT05WRVJUKSA+PSBsZW4pIHsKKwllbHNlIGlmIChiZTE2X3RvX2NwdShiZlswXS5sZW5ndGgpID49IGxlbikgewogCQlkdXAgPSAoeGZzX2RpcjJfZGF0YV91bnVzZWRfdCAqKQotCQkgICAgICAoKGNoYXIgKilibG9jayArIElOVF9HRVQoYmZbMF0ub2Zmc2V0LCBBUkNIX0NPTlZFUlQpKTsKKwkJICAgICAgKChjaGFyICopYmxvY2sgKyBiZTE2X3RvX2NwdShiZlswXS5vZmZzZXQpKTsKIAkJY29tcGFjdCA9IDA7CiAJfQogCS8qCkBAIC0xODQsMjAgKzE4MywyMCBAQAogCQkvKgogCQkgKiBUYWcganVzdCBiZWZvcmUgdGhlIGZpcnN0IGxlYWYgZW50cnkuCiAJCSAqLwotCQl0YWdwID0gKHhmc19kaXIyX2RhdGFfb2ZmX3QgKilibHAgLSAxOworCQl0YWdwID0gKF9fYmUxNiAqKWJscCAtIDE7CiAJCS8qCiAJCSAqIERhdGEgb2JqZWN0IGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBsZWFmIGVudHJ5LgogCQkgKi8KLQkJZHVwID0gKHhmc19kaXIyX2RhdGFfdW51c2VkX3QgKikoKGNoYXIgKilibG9jayArIElOVF9HRVQoKnRhZ3AsIEFSQ0hfQ09OVkVSVCkpOworCQlkdXAgPSAoeGZzX2RpcjJfZGF0YV91bnVzZWRfdCAqKSgoY2hhciAqKWJsb2NrICsgYmUxNl90b19jcHUoKnRhZ3ApKTsKIAkJLyoKIAkJICogSWYgaXQncyBub3QgZnJlZSB0aGVuIHRoZSBkYXRhIHdpbGwgZ28gd2hlcmUgdGhlCiAJCSAqIGxlYWYgZGF0YSBzdGFydHMgbm93LCBpZiBpdCB3b3JrcyBhdCBhbGwuCiAJCSAqLwotCQlpZiAoSU5UX0dFVChkdXAtPmZyZWV0YWcsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfREFUQV9GUkVFX1RBRykgewotCQkJaWYgKElOVF9HRVQoZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkgKyAoSU5UX0dFVChidHAtPnN0YWxlLCBBUkNIX0NPTlZFUlQpIC0gMSkgKgorCQlpZiAoYmUxNl90b19jcHUoZHVwLT5mcmVldGFnKSA9PSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKSB7CisJCQlpZiAoYmUxNl90b19jcHUoZHVwLT5sZW5ndGgpICsgKGJlMzJfdG9fY3B1KGJ0cC0+c3RhbGUpIC0gMSkgKgogCQkJICAgICh1aW50KXNpemVvZigqYmxwKSA8IGxlbikKIAkJCQlkdXAgPSBOVUxMOwotCQl9IGVsc2UgaWYgKChJTlRfR0VUKGJ0cC0+c3RhbGUsIEFSQ0hfQ09OVkVSVCkgLSAxKSAqICh1aW50KXNpemVvZigqYmxwKSA8IGxlbikKKwkJfSBlbHNlIGlmICgoYmUzMl90b19jcHUoYnRwLT5zdGFsZSkgLSAxKSAqICh1aW50KXNpemVvZigqYmxwKSA8IGxlbikKIAkJCWR1cCA9IE5VTEw7CiAJCWVsc2UKIAkJCWR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopYmxwOwpAQCAtMjQzLDExICsyNDIsMTEgQEAKIAkJaW50CWZyb21pZHg7CQkvKiBzb3VyY2UgbGVhZiBpbmRleCAqLwogCQlpbnQJdG9pZHg7CQkJLyogdGFyZ2V0IGxlYWYgaW5kZXggKi8KIAotCQlmb3IgKGZyb21pZHggPSB0b2lkeCA9IElOVF9HRVQoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDEsCisJCWZvciAoZnJvbWlkeCA9IHRvaWR4ID0gYmUzMl90b19jcHUoYnRwLT5jb3VudCkgLSAxLAogCQkJaGlnaHN0YWxlID0gbGZsb2doaWdoID0gLTE7CiAJCSAgICAgZnJvbWlkeCA+PSAwOwogCQkgICAgIGZyb21pZHgtLSkgewotCQkJaWYgKElOVF9HRVQoYmxwW2Zyb21pZHhdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSKSB7CisJCQlpZiAoYmUzMl90b19jcHUoYmxwW2Zyb21pZHhdLmFkZHJlc3MpID09IFhGU19ESVIyX05VTExfREFUQVBUUikgewogCQkJCWlmIChoaWdoc3RhbGUgPT0gLTEpCiAJCQkJCWhpZ2hzdGFsZSA9IHRvaWR4OwogCQkJCWVsc2UgewpAQCAtMjYwLDE1ICsyNTksMTUgQEAKIAkJCQlibHBbdG9pZHhdID0gYmxwW2Zyb21pZHhdOwogCQkJdG9pZHgtLTsKIAkJfQotCQlsZmxvZ2xvdyA9IHRvaWR4ICsgMSAtIChJTlRfR0VUKGJ0cC0+c3RhbGUsIEFSQ0hfQ09OVkVSVCkgLSAxKTsKLQkJbGZsb2doaWdoIC09IElOVF9HRVQoYnRwLT5zdGFsZSwgQVJDSF9DT05WRVJUKSAtIDE7Ci0JCUlOVF9NT0QoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJULCAtKElOVF9HRVQoYnRwLT5zdGFsZSwgQVJDSF9DT05WRVJUKSAtIDEpKTsKKwkJbGZsb2dsb3cgPSB0b2lkeCArIDEgLSAoYmUzMl90b19jcHUoYnRwLT5zdGFsZSkgLSAxKTsKKwkJbGZsb2doaWdoIC09IGJlMzJfdG9fY3B1KGJ0cC0+c3RhbGUpIC0gMTsKKwkJYmUzMl9hZGQoJmJ0cC0+Y291bnQsIC0oYmUzMl90b19jcHUoYnRwLT5zdGFsZSkgLSAxKSk7CiAJCXhmc19kaXIyX2RhdGFfbWFrZV9mcmVlKHRwLCBicCwKIAkJCSh4ZnNfZGlyMl9kYXRhX2FvZmZfdCkoKGNoYXIgKilibHAgLSAoY2hhciAqKWJsb2NrKSwKLQkJCSh4ZnNfZGlyMl9kYXRhX2FvZmZfdCkoKElOVF9HRVQoYnRwLT5zdGFsZSwgQVJDSF9DT05WRVJUKSAtIDEpICogc2l6ZW9mKCpibHApKSwKKwkJCSh4ZnNfZGlyMl9kYXRhX2FvZmZfdCkoKGJlMzJfdG9fY3B1KGJ0cC0+c3RhbGUpIC0gMSkgKiBzaXplb2YoKmJscCkpLAogCQkJJm5lZWRsb2csICZuZWVkc2Nhbik7Ci0JCWJscCArPSBJTlRfR0VUKGJ0cC0+c3RhbGUsIEFSQ0hfQ09OVkVSVCkgLSAxOwotCQlJTlRfU0VUKGJ0cC0+c3RhbGUsIEFSQ0hfQ09OVkVSVCwgMSk7CisJCWJscCArPSBiZTMyX3RvX2NwdShidHAtPnN0YWxlKSAtIDE7CisJCWJ0cC0+c3RhbGUgPSBjcHVfdG9fYmUzMigxKTsKIAkJLyoKIAkJICogSWYgd2Ugbm93IG5lZWQgdG8gcmVidWlsZCB0aGUgYmVzdGZyZWUgbWFwLCBkbyBzby4KIAkJICogVGhpcyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlIHRoZSBuZXh0IGNhbGwgdG8gdXNlX2ZyZWUuCkBAIC0yODMsMjMgKzI4MiwyMyBAQAogCSAqIFNldCBsZWFmIGxvZ2dpbmcgYm91bmRhcmllcyB0byBpbXBvc3NpYmxlIHN0YXRlLgogCSAqIEZvciB0aGUgbm8tc3RhbGUgY2FzZSB0aGV5J3JlIHNldCBleHBsaWNpdGx5LgogCSAqLwotCWVsc2UgaWYgKElOVF9HRVQoYnRwLT5zdGFsZSwgQVJDSF9DT05WRVJUKSkgewotCQlsZmxvZ2xvdyA9IElOVF9HRVQoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJUKTsKKwllbHNlIGlmIChidHAtPnN0YWxlKSB7CisJCWxmbG9nbG93ID0gYmUzMl90b19jcHUoYnRwLT5jb3VudCk7CiAJCWxmbG9naGlnaCA9IC0xOwogCX0KIAkvKgogCSAqIEZpbmQgdGhlIHNsb3QgdGhhdCdzIGZpcnN0IGxvd2VyIHRoYW4gb3VyIGhhc2ggdmFsdWUsIC0xIGlmIG5vbmUuCiAJICovCi0JZm9yIChsb3cgPSAwLCBoaWdoID0gSU5UX0dFVChidHAtPmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gMTsgbG93IDw9IGhpZ2g7ICkgeworCWZvciAobG93ID0gMCwgaGlnaCA9IGJlMzJfdG9fY3B1KGJ0cC0+Y291bnQpIC0gMTsgbG93IDw9IGhpZ2g7ICkgewogCQltaWQgPSAobG93ICsgaGlnaCkgPj4gMTsKLQkJaWYgKChoYXNoID0gSU5UX0dFVChibHBbbWlkXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKSA9PSBhcmdzLT5oYXNodmFsKQorCQlpZiAoKGhhc2ggPSBiZTMyX3RvX2NwdShibHBbbWlkXS5oYXNodmFsKSkgPT0gYXJncy0+aGFzaHZhbCkKIAkJCWJyZWFrOwogCQlpZiAoaGFzaCA8IGFyZ3MtPmhhc2h2YWwpCiAJCQlsb3cgPSBtaWQgKyAxOwogCQllbHNlCiAJCQloaWdoID0gbWlkIC0gMTsKIAl9Ci0Jd2hpbGUgKG1pZCA+PSAwICYmIElOVF9HRVQoYmxwW21pZF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSA+PSBhcmdzLT5oYXNodmFsKSB7CisJd2hpbGUgKG1pZCA+PSAwICYmIGJlMzJfdG9fY3B1KGJscFttaWRdLmhhc2h2YWwpID49IGFyZ3MtPmhhc2h2YWwpIHsKIAkJbWlkLS07CiAJfQogCS8qCkBAIC0zMTEsMTQgKzMxMCwxNCBAQAogCQkgKi8KIAkJeGZzX2RpcjJfZGF0YV91c2VfZnJlZSh0cCwgYnAsIGVuZGR1cCwKIAkJCSh4ZnNfZGlyMl9kYXRhX2FvZmZfdCkKLQkJCSgoY2hhciAqKWVuZGR1cCAtIChjaGFyICopYmxvY2sgKyBJTlRfR0VUKGVuZGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpIC0KKwkJCSgoY2hhciAqKWVuZGR1cCAtIChjaGFyICopYmxvY2sgKyBiZTE2X3RvX2NwdShlbmRkdXAtPmxlbmd0aCkgLQogCQkJIHNpemVvZigqYmxwKSksCiAJCQkoeGZzX2RpcjJfZGF0YV9hb2ZmX3Qpc2l6ZW9mKCpibHApLAogCQkJJm5lZWRsb2csICZuZWVkc2Nhbik7CiAJCS8qCiAJCSAqIFVwZGF0ZSB0aGUgdGFpbCAoZW50cnkgY291bnQpLgogCQkgKi8KLQkJSU5UX01PRChidHAtPmNvdW50LCBBUkNIX0NPTlZFUlQsICsxKTsKKwkJYmUzMl9hZGQoJmJ0cC0+Y291bnQsIDEpOwogCQkvKgogCQkgKiBJZiB3ZSBub3cgbmVlZCB0byByZWJ1aWxkIHRoZSBiZXN0ZnJlZSBtYXAsIGRvIHNvLgogCQkgKiBUaGlzIG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgdGhlIG5leHQgY2FsbCB0byB1c2VfZnJlZS4KQEAgLTM0NiwxMiArMzQ1LDEyIEBACiAJZWxzZSB7CiAJCWZvciAobG93c3RhbGUgPSBtaWQ7CiAJCSAgICAgbG93c3RhbGUgPj0gMCAmJgotCQkJSU5UX0dFVChibHBbbG93c3RhbGVdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgIT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSOworCQkJYmUzMl90b19jcHUoYmxwW2xvd3N0YWxlXS5hZGRyZXNzKSAhPSBYRlNfRElSMl9OVUxMX0RBVEFQVFI7CiAJCSAgICAgbG93c3RhbGUtLSkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGhpZ2hzdGFsZSA9IG1pZCArIDE7Ci0JCSAgICAgaGlnaHN0YWxlIDwgSU5UX0dFVChidHAtPmNvdW50LCBBUkNIX0NPTlZFUlQpICYmCi0JCQlJTlRfR0VUKGJscFtoaWdoc3RhbGVdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgIT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSICYmCisJCSAgICAgaGlnaHN0YWxlIDwgYmUzMl90b19jcHUoYnRwLT5jb3VudCkgJiYKKwkJCWJlMzJfdG9fY3B1KGJscFtoaWdoc3RhbGVdLmFkZHJlc3MpICE9IFhGU19ESVIyX05VTExfREFUQVBUUiAmJgogCQkJKGxvd3N0YWxlIDwgMCB8fCBtaWQgLSBsb3dzdGFsZSA+IGhpZ2hzdGFsZSAtIG1pZCk7CiAJCSAgICAgaGlnaHN0YWxlKyspCiAJCQljb250aW51ZTsKQEAgLTM1OSw3ICszNTgsNyBAQAogCQkgKiBNb3ZlIGVudHJpZXMgdG93YXJkIHRoZSBsb3ctbnVtYmVyZWQgc3RhbGUgZW50cnkuCiAJCSAqLwogCQlpZiAobG93c3RhbGUgPj0gMCAmJgotCQkgICAgKGhpZ2hzdGFsZSA9PSBJTlRfR0VUKGJ0cC0+Y291bnQsIEFSQ0hfQ09OVkVSVCkgfHwKKwkJICAgIChoaWdoc3RhbGUgPT0gYmUzMl90b19jcHUoYnRwLT5jb3VudCkgfHwKIAkJICAgICBtaWQgLSBsb3dzdGFsZSA8PSBoaWdoc3RhbGUgLSBtaWQpKSB7CiAJCQlpZiAobWlkIC0gbG93c3RhbGUpCiAJCQkJbWVtbW92ZSgmYmxwW2xvd3N0YWxlXSwgJmJscFtsb3dzdGFsZSArIDFdLApAQCAtMzcxLDcgKzM3MCw3IEBACiAJCSAqIE1vdmUgZW50cmllcyB0b3dhcmQgdGhlIGhpZ2gtbnVtYmVyZWQgc3RhbGUgZW50cnkuCiAJCSAqLwogCQllbHNlIHsKLQkJCUFTU0VSVChoaWdoc3RhbGUgPCBJTlRfR0VUKGJ0cC0+Y291bnQsIEFSQ0hfQ09OVkVSVCkpOworCQkJQVNTRVJUKGhpZ2hzdGFsZSA8IGJlMzJfdG9fY3B1KGJ0cC0+Y291bnQpKTsKIAkJCW1pZCsrOwogCQkJaWYgKGhpZ2hzdGFsZSAtIG1pZCkKIAkJCQltZW1tb3ZlKCZibHBbbWlkICsgMV0sICZibHBbbWlkXSwKQEAgLTM3OSw3ICszNzgsNyBAQAogCQkJbGZsb2dsb3cgPSBNSU4obWlkLCBsZmxvZ2xvdyk7CiAJCQlsZmxvZ2hpZ2ggPSBNQVgoaGlnaHN0YWxlLCBsZmxvZ2hpZ2gpOwogCQl9Ci0JCUlOVF9NT0QoYnRwLT5zdGFsZSwgQVJDSF9DT05WRVJULCAtMSk7CisJCWJlMzJfYWRkKCZidHAtPnN0YWxlLCAtMSk7CiAJfQogCS8qCiAJICogUG9pbnQgdG8gdGhlIG5ldyBkYXRhIGVudHJ5LgpAQCAtMzg4LDggKzM4Nyw5IEBACiAJLyoKIAkgKiBGaWxsIGluIHRoZSBsZWFmIGVudHJ5LgogCSAqLwotCUlOVF9TRVQoYmxwW21pZF0uaGFzaHZhbCwgQVJDSF9DT05WRVJULCBhcmdzLT5oYXNodmFsKTsKLQlJTlRfU0VUKGJscFttaWRdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCwgWEZTX0RJUjJfQllURV9UT19EQVRBUFRSKG1wLCAoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spKTsKKwlibHBbbWlkXS5oYXNodmFsID0gY3B1X3RvX2JlMzIoYXJncy0+aGFzaHZhbCk7CisJYmxwW21pZF0uYWRkcmVzcyA9IGNwdV90b19iZTMyKFhGU19ESVIyX0JZVEVfVE9fREFUQVBUUihtcCwKKwkJCQkoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spKTsKIAl4ZnNfZGlyMl9ibG9ja19sb2dfbGVhZih0cCwgYnAsIGxmbG9nbG93LCBsZmxvZ2hpZ2gpOwogCS8qCiAJICogTWFyayBzcGFjZSBmb3IgdGhlIGRhdGEgZW50cnkgdXNlZC4KQEAgLTQwNCw3ICs0MDQsNyBAQAogCWRlcC0+bmFtZWxlbiA9IGFyZ3MtPm5hbWVsZW47CiAJbWVtY3B5KGRlcC0+bmFtZSwgYXJncy0+bmFtZSwgYXJncy0+bmFtZWxlbik7CiAJdGFncCA9IFhGU19ESVIyX0RBVEFfRU5UUllfVEFHX1AoZGVwKTsKLQlJTlRfU0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQsICh4ZnNfZGlyMl9kYXRhX29mZl90KSgoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spKTsKKwkqdGFncCA9IGNwdV90b19iZTE2KChjaGFyICopZGVwIC0gKGNoYXIgKilibG9jayk7CiAJLyoKIAkgKiBDbGVhbiB1cCB0aGUgYmVzdGZyZWUgYXJyYXkgYW5kIGxvZyB0aGUgaGVhZGVyLCB0YWlsLCBhbmQgZW50cnkuCiAJICovCkBAIC00ODUsOCArNDg1LDggQEAKIAkJLyoKIAkJICogVW51c2VkLCBza2lwIGl0LgogCQkgKi8KLQkJaWYgKElOVF9HRVQoZHVwLT5mcmVldGFnLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfRlJFRV9UQUcpIHsKLQkJCXB0ciArPSBJTlRfR0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpOworCQlpZiAoYmUxNl90b19jcHUoZHVwLT5mcmVldGFnKSA9PSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKSB7CisJCQlwdHIgKz0gYmUxNl90b19jcHUoZHVwLT5sZW5ndGgpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNjIyLDcgKzYyMiw3IEBACiAJICogR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgbGVhZiBlbnRyeSwgdG8gcG9pbnQgdG8gdGhlIGRhdGEuCiAJICovCiAJZGVwID0gKHhmc19kaXIyX2RhdGFfZW50cnlfdCAqKQotCSAgICAgICgoY2hhciAqKWJsb2NrICsgWEZTX0RJUjJfREFUQVBUUl9UT19PRkYobXAsIElOVF9HRVQoYmxwW2VudF0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSkpOworCSAgICAgICgoY2hhciAqKWJsb2NrICsgWEZTX0RJUjJfREFUQVBUUl9UT19PRkYobXAsIGJlMzJfdG9fY3B1KGJscFtlbnRdLmFkZHJlc3MpKSk7CiAJLyoKIAkgKiBGaWxsIGluIGlub2RlIG51bWJlciwgcmVsZWFzZSB0aGUgYmxvY2suCiAJICovCkBAIC02NzQsMTAgKzY3NCwxMCBAQAogCSAqIExvb3AgZG9pbmcgYSBiaW5hcnkgc2VhcmNoIGZvciBvdXIgaGFzaCB2YWx1ZS4KIAkgKiBGaW5kIG91ciBlbnRyeSwgRU5PRU5UIGlmIGl0J3Mgbm90IHRoZXJlLgogCSAqLwotCWZvciAobG93ID0gMCwgaGlnaCA9IElOVF9HRVQoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDE7IDsgKSB7CisJZm9yIChsb3cgPSAwLCBoaWdoID0gYmUzMl90b19jcHUoYnRwLT5jb3VudCkgLSAxOyA7ICkgewogCQlBU1NFUlQobG93IDw9IGhpZ2gpOwogCQltaWQgPSAobG93ICsgaGlnaCkgPj4gMTsKLQkJaWYgKChoYXNoID0gSU5UX0dFVChibHBbbWlkXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKSA9PSBhcmdzLT5oYXNodmFsKQorCQlpZiAoKGhhc2ggPSBiZTMyX3RvX2NwdShibHBbbWlkXS5oYXNodmFsKSkgPT0gYXJncy0+aGFzaHZhbCkKIAkJCWJyZWFrOwogCQlpZiAoaGFzaCA8IGFyZ3MtPmhhc2h2YWwpCiAJCQlsb3cgPSBtaWQgKyAxOwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJLyoKIAkgKiBCYWNrIHVwIHRvIHRoZSBmaXJzdCBvbmUgd2l0aCB0aGUgcmlnaHQgaGFzaCB2YWx1ZS4KIAkgKi8KLQl3aGlsZSAobWlkID4gMCAmJiBJTlRfR0VUKGJscFttaWQgLSAxXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID09IGFyZ3MtPmhhc2h2YWwpIHsKKwl3aGlsZSAobWlkID4gMCAmJiBiZTMyX3RvX2NwdShibHBbbWlkIC0gMV0uaGFzaHZhbCkgPT0gYXJncy0+aGFzaHZhbCkgewogCQltaWQtLTsKIAl9CiAJLyoKQEAgLTcwMCw3ICs3MDAsNyBAQAogCSAqIHJpZ2h0IGhhc2ggdmFsdWUgbG9va2luZyBmb3Igb3VyIG5hbWUuCiAJICovCiAJZG8gewotCQlpZiAoKGFkZHIgPSBJTlRfR0VUKGJscFttaWRdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKKwkJaWYgKChhZGRyID0gYmUzMl90b19jcHUoYmxwW21pZF0uYWRkcmVzcykpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKIAkJCWNvbnRpbnVlOwogCQkvKgogCQkgKiBHZXQgcG9pbnRlciB0byB0aGUgZW50cnkgZnJvbSB0aGUgbGVhZi4KQEAgLTcxNyw3ICs3MTcsNyBAQAogCQkJKmVudG5vID0gbWlkOwogCQkJcmV0dXJuIDA7CiAJCX0KLQl9IHdoaWxlICgrK21pZCA8IElOVF9HRVQoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJUKSAmJiBJTlRfR0VUKGJscFttaWRdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPT0gaGFzaCk7CisJfSB3aGlsZSAoKyttaWQgPCBiZTMyX3RvX2NwdShidHAtPmNvdW50KSAmJiBiZTMyX3RvX2NwdShibHBbbWlkXS5oYXNodmFsKSA9PSBoYXNoKTsKIAkvKgogCSAqIE5vIG1hdGNoLCByZWxlYXNlIHRoZSBidWZmZXIgYW5kIHJldHVybiBFTk9FTlQuCiAJICovCkBAIC03NjcsNyArNzY3LDcgQEAKIAkgKiBQb2ludCB0byB0aGUgZGF0YSBlbnRyeSB1c2luZyB0aGUgbGVhZiBlbnRyeS4KIAkgKi8KIAlkZXAgPSAoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICopCi0JICAgICAgKChjaGFyICopYmxvY2sgKyBYRlNfRElSMl9EQVRBUFRSX1RPX09GRihtcCwgSU5UX0dFVChibHBbZW50XS5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpKSk7CisJICAgICAgKChjaGFyICopYmxvY2sgKyBYRlNfRElSMl9EQVRBUFRSX1RPX09GRihtcCwgYmUzMl90b19jcHUoYmxwW2VudF0uYWRkcmVzcykpKTsKIAkvKgogCSAqIE1hcmsgdGhlIGRhdGEgZW50cnkncyBzcGFjZSBmcmVlLgogCSAqLwpAQCAtNzc4LDEyICs3NzgsMTIgQEAKIAkvKgogCSAqIEZpeCB1cCB0aGUgYmxvY2sgdGFpbC4KIAkgKi8KLQlJTlRfTU9EKGJ0cC0+c3RhbGUsIEFSQ0hfQ09OVkVSVCwgKzEpOworCWJlMzJfYWRkKCZidHAtPnN0YWxlLCAxKTsKIAl4ZnNfZGlyMl9ibG9ja19sb2dfdGFpbCh0cCwgYnApOwogCS8qCiAJICogUmVtb3ZlIHRoZSBsZWFmIGVudHJ5IGJ5IG1hcmtpbmcgaXQgc3RhbGUuCiAJICovCi0JSU5UX1NFVChibHBbZW50XS5hZGRyZXNzLCBBUkNIX0NPTlZFUlQsIFhGU19ESVIyX05VTExfREFUQVBUUik7CisJYmxwW2VudF0uYWRkcmVzcyA9IGNwdV90b19iZTMyKFhGU19ESVIyX05VTExfREFUQVBUUik7CiAJeGZzX2RpcjJfYmxvY2tfbG9nX2xlYWYodHAsIGJwLCBlbnQsIGVudCk7CiAJLyoKIAkgKiBGaXggdXAgYmVzdGZyZWUsIGxvZyB0aGUgaGVhZGVyIGlmIG5lY2Vzc2FyeS4KQEAgLTg0Myw3ICs4NDMsNyBAQAogCSAqIFBvaW50IHRvIHRoZSBkYXRhIGVudHJ5IHdlIG5lZWQgdG8gY2hhbmdlLgogCSAqLwogCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKikKLQkgICAgICAoKGNoYXIgKilibG9jayArIFhGU19ESVIyX0RBVEFQVFJfVE9fT0ZGKG1wLCBJTlRfR0VUKGJscFtlbnRdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkpKTsKKwkgICAgICAoKGNoYXIgKilibG9jayArIFhGU19ESVIyX0RBVEFQVFJfVE9fT0ZGKG1wLCBiZTMyX3RvX2NwdShibHBbZW50XS5hZGRyZXNzKSkpOwogCUFTU0VSVChJTlRfR0VUKGRlcC0+aW51bWJlciwgQVJDSF9DT05WRVJUKSAhPSBhcmdzLT5pbnVtYmVyKTsKIAkvKgogCSAqIENoYW5nZSB0aGUgaW5vZGUgbnVtYmVyIHRvIHRoZSBuZXcgdmFsdWUuCkBAIC04NjgsOCArODY4LDggQEAKIAogCWxhID0gYTsKIAlsYiA9IGI7Ci0JcmV0dXJuIElOVF9HRVQobGEtPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPCBJTlRfR0VUKGxiLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID8gLTEgOgotCQkoSU5UX0dFVChsYS0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSA+IElOVF9HRVQobGItPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPyAxIDogMCk7CisJcmV0dXJuIGJlMzJfdG9fY3B1KGxhLT5oYXNodmFsKSA8IGJlMzJfdG9fY3B1KGxiLT5oYXNodmFsKSA/IC0xIDoKKwkJKGJlMzJfdG9fY3B1KGxhLT5oYXNodmFsKSA+IGJlMzJfdG9fY3B1KGxiLT5oYXNodmFsKSA/IDEgOiAwKTsKIH0KIAogLyoKQEAgLTg4MSw3ICs4ODEsNyBAQAogCXhmc19kYWJ1Zl90CQkqbGJwLAkJLyogbGVhZiBidWZmZXIgKi8KIAl4ZnNfZGFidWZfdAkJKmRicCkJCS8qIGRhdGEgYnVmZmVyICovCiB7Ci0JeGZzX2RpcjJfZGF0YV9vZmZfdAkqYmVzdHNwOwkvKiBsZWFmIGJlc3RzIHRhYmxlICovCisJX19iZTE2CQkJKmJlc3RzcDsJLyogbGVhZiBiZXN0cyB0YWJsZSAqLwogCXhmc19kaXIyX2Jsb2NrX3QJKmJsb2NrOwkJLyogYmxvY2sgc3RydWN0dXJlICovCiAJeGZzX2RpcjJfYmxvY2tfdGFpbF90CSpidHA7CQkvKiBibG9jayB0YWlsICovCiAJeGZzX2lub2RlX3QJCSpkcDsJCS8qIGluY29yZSBkaXJlY3RvcnkgaW5vZGUgKi8KQEAgLTg5Niw3ICs4OTYsNyBAQAogCWludAkJCW5lZWRzY2FuOwkvKiBuZWVkIHRvIHNjYW4gZm9yIGJlc3RmcmVlICovCiAJeGZzX2RpcjJfc2ZfaGRyX3QJc2ZoOwkJLyogc2hvcnRmb3JtIGhlYWRlciAqLwogCWludAkJCXNpemU7CQkvKiBieXRlcyB1c2VkICovCi0JeGZzX2RpcjJfZGF0YV9vZmZfdAkqdGFncDsJCS8qIGVuZCBvZiBlbnRyeSAodGFnKSAqLworCV9fYmUxNgkJCSp0YWdwOwkJLyogZW5kIG9mIGVudHJ5ICh0YWcpICovCiAJaW50CQkJdG87CQkvKiBibG9jay9sZWFmIHRvIGluZGV4ICovCiAJeGZzX3RyYW5zX3QJCSp0cDsJCS8qIHRyYW5zYWN0aW9uIHBvaW50ZXIgKi8KIApAQCAtOTA1LDcgKzkwNSw3IEBACiAJdHAgPSBhcmdzLT50cmFuczsKIAltcCA9IGRwLT5pX21vdW50OwogCWxlYWYgPSBsYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMpOwogCWx0cCA9IFhGU19ESVIyX0xFQUZfVEFJTF9QKG1wLCBsZWFmKTsKIAkvKgogCSAqIElmIHRoZXJlIGFyZSBkYXRhIGJsb2NrcyBvdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUsIHRha2UgdGhpcwpAQCAtOTE1LDExICs5MTUsMTEgQEAKIAkgKi8KIAl3aGlsZSAoZHAtPmlfZC5kaV9zaXplID4gbXAtPm1fZGlyYmxrc2l6ZSkgewogCQliZXN0c3AgPSBYRlNfRElSMl9MRUFGX0JFU1RTX1AobHRwKTsKLQkJaWYgKElOVF9HRVQoYmVzdHNwW0lOVF9HRVQobHRwLT5iZXN0Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxXSwgQVJDSF9DT05WRVJUKSA9PQorCQlpZiAoYmUxNl90b19jcHUoYmVzdHNwW2JlMzJfdG9fY3B1KGx0cC0+YmVzdGNvdW50KSAtIDFdKSA9PQogCQkgICAgbXAtPm1fZGlyYmxrc2l6ZSAtICh1aW50KXNpemVvZihibG9jay0+aGRyKSkgewogCQkJaWYgKChlcnJvciA9CiAJCQkgICAgeGZzX2RpcjJfbGVhZl90cmltX2RhdGEoYXJncywgbGJwLAotCQkJCSAgICAoeGZzX2RpcjJfZGJfdCkoSU5UX0dFVChsdHAtPmJlc3Rjb3VudCwgQVJDSF9DT05WRVJUKSAtIDEpKSkpCisJCQkJICAgICh4ZnNfZGlyMl9kYl90KShiZTMyX3RvX2NwdShsdHAtPmJlc3Rjb3VudCkgLSAxKSkpKQogCQkJCWdvdG8gb3V0OwogCQl9IGVsc2UgewogCQkJZXJyb3IgPSAwOwpAQCAtOTM1LDI4ICs5MzUsMjkgQEAKIAkJZ290byBvdXQ7CiAJfQogCWJsb2NrID0gZGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGJsb2NrLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfREFUQV9NQUdJQyk7CisJQVNTRVJUKGJlMzJfdG9fY3B1KGJsb2NrLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0RBVEFfTUFHSUMpOwogCS8qCiAJICogU2l6ZSBvZiB0aGUgImxlYWYiIGFyZWEgaW4gdGhlIGJsb2NrLgogCSAqLwogCXNpemUgPSAodWludClzaXplb2YoYmxvY2stPnRhaWwpICsKLQkgICAgICAgKHVpbnQpc2l6ZW9mKCpsZXApICogKElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gSU5UX0dFVChsZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCkpOworCSAgICAgICAodWludClzaXplb2YoKmxlcCkgKiAoYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSAtIGJlMTZfdG9fY3B1KGxlYWYtPmhkci5zdGFsZSkpOwogCS8qCiAJICogTG9vayBhdCB0aGUgbGFzdCBkYXRhIGVudHJ5LgogCSAqLwotCXRhZ3AgPSAoeGZzX2RpcjJfZGF0YV9vZmZfdCAqKSgoY2hhciAqKWJsb2NrICsgbXAtPm1fZGlyYmxrc2l6ZSkgLSAxOwotCWR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopKChjaGFyICopYmxvY2sgKyBJTlRfR0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQpKTsKKwl0YWdwID0gKF9fYmUxNiAqKSgoY2hhciAqKWJsb2NrICsgbXAtPm1fZGlyYmxrc2l6ZSkgLSAxOworCWR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopKChjaGFyICopYmxvY2sgKyBiZTE2X3RvX2NwdSgqdGFncCkpOwogCS8qCiAJICogSWYgaXQncyBub3QgZnJlZSBvciBpcyB0b28gc2hvcnQgd2UgY2FuJ3QgZG8gaXQuCiAJICovCi0JaWYgKElOVF9HRVQoZHVwLT5mcmVldGFnLCBBUkNIX0NPTlZFUlQpICE9IFhGU19ESVIyX0RBVEFfRlJFRV9UQUcgfHwgSU5UX0dFVChkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKSA8IHNpemUpIHsKKwlpZiAoYmUxNl90b19jcHUoZHVwLT5mcmVldGFnKSAhPSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHIHx8CisJICAgIGJlMTZfdG9fY3B1KGR1cC0+bGVuZ3RoKSA8IHNpemUpIHsKIAkJZXJyb3IgPSAwOwogCQlnb3RvIG91dDsKIAl9CiAJLyoKIAkgKiBTdGFydCBjb252ZXJ0aW5nIGl0IHRvIGJsb2NrIGZvcm0uCiAJICovCi0JSU5UX1NFVChibG9jay0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQsIFhGU19ESVIyX0JMT0NLX01BR0lDKTsKKwlibG9jay0+aGRyLm1hZ2ljID0gY3B1X3RvX2JlMzIoWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOwogCW5lZWRsb2cgPSAxOwogCW5lZWRzY2FuID0gMDsKIAkvKgpAQCAtOTY4LDIwICs5NjksMjAgQEAKIAkgKiBJbml0aWFsaXplIHRoZSBibG9jayB0YWlsLgogCSAqLwogCWJ0cCA9IFhGU19ESVIyX0JMT0NLX1RBSUxfUChtcCwgYmxvY2spOwotCUlOVF9TRVQoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJULCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIElOVF9HRVQobGVhZi0+aGRyLnN0YWxlLCBBUkNIX0NPTlZFUlQpKTsKKwlidHAtPmNvdW50ID0gY3B1X3RvX2JlMzIoYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSAtIGJlMTZfdG9fY3B1KGxlYWYtPmhkci5zdGFsZSkpOwogCWJ0cC0+c3RhbGUgPSAwOwogCXhmc19kaXIyX2Jsb2NrX2xvZ190YWlsKHRwLCBkYnApOwogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgYmxvY2sgbGVhZiBhcmVhLiAgV2UgY29tcGFjdCBvdXQgc3RhbGUgZW50cmllcy4KIAkgKi8KIAlsZXAgPSBYRlNfRElSMl9CTE9DS19MRUFGX1AoYnRwKTsKLQlmb3IgKGZyb20gPSB0byA9IDA7IGZyb20gPCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsgZnJvbSsrKSB7Ci0JCWlmIChJTlRfR0VUKGxlYWYtPmVudHNbZnJvbV0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9OVUxMX0RBVEFQVFIpCisJZm9yIChmcm9tID0gdG8gPSAwOyBmcm9tIDwgYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsgZnJvbSsrKSB7CisJCWlmIChiZTMyX3RvX2NwdShsZWFmLT5lbnRzW2Zyb21dLmFkZHJlc3MpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKIAkJCWNvbnRpbnVlOwogCQlsZXBbdG8rK10gPSBsZWFmLT5lbnRzW2Zyb21dOwogCX0KLQlBU1NFUlQodG8gPT0gSU5UX0dFVChidHAtPmNvdW50LCBBUkNIX0NPTlZFUlQpKTsKLQl4ZnNfZGlyMl9ibG9ja19sb2dfbGVhZih0cCwgZGJwLCAwLCBJTlRfR0VUKGJ0cC0+Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxKTsKKwlBU1NFUlQodG8gPT0gYmUzMl90b19jcHUoYnRwLT5jb3VudCkpOworCXhmc19kaXIyX2Jsb2NrX2xvZ19sZWFmKHRwLCBkYnAsIDAsIGJlMzJfdG9fY3B1KGJ0cC0+Y291bnQpIC0gMSk7CiAJLyoKIAkgKiBTY2FuIHRoZSBiZXN0ZnJlZSBpZiB3ZSBuZWVkIGl0IGFuZCBsb2cgdGhlIGRhdGEgYmxvY2sgaGVhZGVyLgogCSAqLwpAQCAtMTA0Myw3ICsxMDQ0LDcgQEAKIAlpbnQJCQlvZmZzZXQ7CQkvKiB0YXJnZXQgYmxvY2sgb2Zmc2V0ICovCiAJeGZzX2RpcjJfc2ZfZW50cnlfdAkqc2ZlcDsJCS8qIHNmIGVudHJ5IHBvaW50ZXIgKi8KIAl4ZnNfZGlyMl9zZl90CQkqc2ZwOwkJLyogc2hvcnRmb3JtIHN0cnVjdHVyZSAqLwotCXhmc19kaXIyX2RhdGFfb2ZmX3QJKnRhZ3A7CQkvKiBlbmQgb2YgZGF0YSBlbnRyeSAqLworCV9fYmUxNgkJCSp0YWdwOwkJLyogZW5kIG9mIGRhdGEgZW50cnkgKi8KIAl4ZnNfdHJhbnNfdAkJKnRwOwkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCiAJeGZzX2RpcjJfdHJhY2VfYXJncygic2ZfdG9fYmxvY2siLCBhcmdzKTsKQEAgLTEwOTUsMTIgKzEwOTYsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAlibG9jayA9IGJwLT5kYXRhOwotCUlOVF9TRVQoYmxvY2stPmhkci5tYWdpYywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9CTE9DS19NQUdJQyk7CisJYmxvY2stPmhkci5tYWdpYyA9IGNwdV90b19iZTMyKFhGU19ESVIyX0JMT0NLX01BR0lDKTsKIAkvKgogCSAqIENvbXB1dGUgc2l6ZSBvZiBibG9jayAidGFpbCIgYXJlYS4KIAkgKi8KIAlpID0gKHVpbnQpc2l6ZW9mKCpidHApICsKLQkgICAgKElOVF9HRVQoc2ZwLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgKyAyKSAqICh1aW50KXNpemVvZih4ZnNfZGlyMl9sZWFmX2VudHJ5X3QpOworCSAgICAoc2ZwLT5oZHIuY291bnQgKyAyKSAqICh1aW50KXNpemVvZih4ZnNfZGlyMl9sZWFmX2VudHJ5X3QpOwogCS8qCiAJICogVGhlIHdob2xlIHRoaW5nIGlzIGluaXRpYWxpemVkIHRvIGZyZWUgYnkgdGhlIGluaXQgcm91dGluZS4KIAkgKiBTYXkgd2UncmUgdXNpbmcgdGhlIGxlYWYgYW5kIHRhaWwgYXJlYS4KQEAgLTExMTQsNyArMTExNSw3IEBACiAJICogRmlsbCBpbiB0aGUgdGFpbC4KIAkgKi8KIAlidHAgPSBYRlNfRElSMl9CTE9DS19UQUlMX1AobXAsIGJsb2NrKTsKLQlJTlRfU0VUKGJ0cC0+Y291bnQsIEFSQ0hfQ09OVkVSVCwgSU5UX0dFVChzZnAtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSArIDIpOwkvKiAuLCAuLiAqLworCWJ0cC0+Y291bnQgPSBjcHVfdG9fYmUzMihzZnAtPmhkci5jb3VudCArIDIpOwkvKiAuLCAuLiAqLwogCWJ0cC0+c3RhbGUgPSAwOwogCWJscCA9IFhGU19ESVIyX0JMT0NLX0xFQUZfUChidHApOwogCWVuZG9mZnNldCA9ICh1aW50KSgoY2hhciAqKWJscCAtIChjaGFyICopYmxvY2spOwpAQCAtMTEyMyw3ICsxMTI0LDcgQEAKIAkgKi8KIAl4ZnNfZGlyMl9kYXRhX3VzZV9mcmVlKHRwLCBicCwgZHVwLAogCQkoeGZzX2RpcjJfZGF0YV9hb2ZmX3QpKChjaGFyICopZHVwIC0gKGNoYXIgKilibG9jayksCi0JCUlOVF9HRVQoZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCksICZuZWVkbG9nLCAmbmVlZHNjYW4pOworCQliZTE2X3RvX2NwdShkdXAtPmxlbmd0aCksICZuZWVkbG9nLCAmbmVlZHNjYW4pOwogCS8qCiAJICogQ3JlYXRlIGVudHJ5IGZvciAuCiAJICovCkBAIC0xMTMzLDEwICsxMTM0LDExIEBACiAJZGVwLT5uYW1lbGVuID0gMTsKIAlkZXAtPm5hbWVbMF0gPSAnLic7CiAJdGFncCA9IFhGU19ESVIyX0RBVEFfRU5UUllfVEFHX1AoZGVwKTsKLQlJTlRfU0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQsICh4ZnNfZGlyMl9kYXRhX29mZl90KSgoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spKTsKKwkqdGFncCA9IGNwdV90b19iZTE2KChjaGFyICopZGVwIC0gKGNoYXIgKilibG9jayk7CiAJeGZzX2RpcjJfZGF0YV9sb2dfZW50cnkodHAsIGJwLCBkZXApOwotCUlOVF9TRVQoYmxwWzBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCwgeGZzX2Rpcl9oYXNoX2RvdCk7Ci0JSU5UX1NFVChibHBbMF0uYWRkcmVzcywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9CWVRFX1RPX0RBVEFQVFIobXAsIChjaGFyICopZGVwIC0gKGNoYXIgKilibG9jaykpOworCWJscFswXS5oYXNodmFsID0gY3B1X3RvX2JlMzIoeGZzX2Rpcl9oYXNoX2RvdCk7CisJYmxwWzBdLmFkZHJlc3MgPSBjcHVfdG9fYmUzMihYRlNfRElSMl9CWVRFX1RPX0RBVEFQVFIobXAsCisJCQkJKGNoYXIgKilkZXAgLSAoY2hhciAqKWJsb2NrKSk7CiAJLyoKIAkgKiBDcmVhdGUgZW50cnkgZm9yIC4uCiAJICovCkBAIC0xMTQ2LDE1ICsxMTQ4LDE2IEBACiAJZGVwLT5uYW1lbGVuID0gMjsKIAlkZXAtPm5hbWVbMF0gPSBkZXAtPm5hbWVbMV0gPSAnLic7CiAJdGFncCA9IFhGU19ESVIyX0RBVEFfRU5UUllfVEFHX1AoZGVwKTsKLQlJTlRfU0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQsICh4ZnNfZGlyMl9kYXRhX29mZl90KSgoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spKTsKKwkqdGFncCA9IGNwdV90b19iZTE2KChjaGFyICopZGVwIC0gKGNoYXIgKilibG9jayk7CiAJeGZzX2RpcjJfZGF0YV9sb2dfZW50cnkodHAsIGJwLCBkZXApOwotCUlOVF9TRVQoYmxwWzFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCwgeGZzX2Rpcl9oYXNoX2RvdGRvdCk7Ci0JSU5UX1NFVChibHBbMV0uYWRkcmVzcywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9CWVRFX1RPX0RBVEFQVFIobXAsIChjaGFyICopZGVwIC0gKGNoYXIgKilibG9jaykpOworCWJscFsxXS5oYXNodmFsID0gY3B1X3RvX2JlMzIoeGZzX2Rpcl9oYXNoX2RvdGRvdCk7CisJYmxwWzFdLmFkZHJlc3MgPSBjcHVfdG9fYmUzMihYRlNfRElSMl9CWVRFX1RPX0RBVEFQVFIobXAsCisJCQkJKGNoYXIgKilkZXAgLSAoY2hhciAqKWJsb2NrKSk7CiAJb2Zmc2V0ID0gWEZTX0RJUjJfREFUQV9GSVJTVF9PRkZTRVQ7CiAJLyoKIAkgKiBMb29wIG92ZXIgZXhpc3RpbmcgZW50cmllcywgc3R1ZmYgdGhlbSBpbi4KIAkgKi8KLQlpZiAoKGkgPSAwKSA9PSBJTlRfR0VUKHNmcC0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKQorCWlmICgoaSA9IDApID09IHNmcC0+aGRyLmNvdW50KQogCQlzZmVwID0gTlVMTDsKIAllbHNlCiAJCXNmZXAgPSBYRlNfRElSMl9TRl9GSVJTVEVOVFJZKHNmcCk7CkBAIC0xMTc2LDE1ICsxMTc5LDE0IEBACiAJCWlmIChvZmZzZXQgPCBuZXdvZmZzZXQpIHsKIAkJCWR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopCiAJCQkgICAgICAoKGNoYXIgKilibG9jayArIG9mZnNldCk7Ci0JCQlJTlRfU0VUKGR1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKTsKLQkJCUlOVF9TRVQoZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCwgbmV3b2Zmc2V0IC0gb2Zmc2V0KTsKLQkJCUlOVF9TRVQoKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKGR1cCksIEFSQ0hfQ09OVkVSVCwKLQkJCQkoeGZzX2RpcjJfZGF0YV9vZmZfdCkKKwkJCWR1cC0+ZnJlZXRhZyA9IGNwdV90b19iZTE2KFhGU19ESVIyX0RBVEFfRlJFRV9UQUcpOworCQkJZHVwLT5sZW5ndGggPSBjcHVfdG9fYmUxNihuZXdvZmZzZXQgLSBvZmZzZXQpOworCQkJKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKGR1cCkgPSBjcHVfdG9fYmUxNigKIAkJCQkoKGNoYXIgKilkdXAgLSAoY2hhciAqKWJsb2NrKSk7CiAJCQl4ZnNfZGlyMl9kYXRhX2xvZ191bnVzZWQodHAsIGJwLCBkdXApOwogCQkJKHZvaWQpeGZzX2RpcjJfZGF0YV9mcmVlaW5zZXJ0KCh4ZnNfZGlyMl9kYXRhX3QgKilibG9jaywKIAkJCQlkdXAsICZkdW1teSk7Ci0JCQlvZmZzZXQgKz0gSU5UX0dFVChkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKTsKKwkJCW9mZnNldCArPSBiZTE2X3RvX2NwdShkdXAtPmxlbmd0aCk7CiAJCQljb250aW51ZTsKIAkJfQogCQkvKgpAQCAtMTE5NiwxMyArMTE5OCwxNCBAQAogCQlkZXAtPm5hbWVsZW4gPSBzZmVwLT5uYW1lbGVuOwogCQltZW1jcHkoZGVwLT5uYW1lLCBzZmVwLT5uYW1lLCBkZXAtPm5hbWVsZW4pOwogCQl0YWdwID0gWEZTX0RJUjJfREFUQV9FTlRSWV9UQUdfUChkZXApOwotCQlJTlRfU0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQsICh4ZnNfZGlyMl9kYXRhX29mZl90KSgoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spKTsKKwkJKnRhZ3AgPSBjcHVfdG9fYmUxNigoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spOwogCQl4ZnNfZGlyMl9kYXRhX2xvZ19lbnRyeSh0cCwgYnAsIGRlcCk7Ci0JCUlOVF9TRVQoYmxwWzIgKyBpXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQsIHhmc19kYV9oYXNobmFtZSgoY2hhciAqKXNmZXAtPm5hbWUsIHNmZXAtPm5hbWVsZW4pKTsKLQkJSU5UX1NFVChibHBbMiArIGldLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCwgWEZTX0RJUjJfQllURV9UT19EQVRBUFRSKG1wLAorCQlibHBbMiArIGldLmhhc2h2YWwgPSBjcHVfdG9fYmUzMih4ZnNfZGFfaGFzaG5hbWUoCisJCQkJCShjaGFyICopc2ZlcC0+bmFtZSwgc2ZlcC0+bmFtZWxlbikpOworCQlibHBbMiArIGldLmFkZHJlc3MgPSBjcHVfdG9fYmUzMihYRlNfRElSMl9CWVRFX1RPX0RBVEFQVFIobXAsCiAJCQkJCQkgKGNoYXIgKilkZXAgLSAoY2hhciAqKWJsb2NrKSk7CiAJCW9mZnNldCA9IChpbnQpKChjaGFyICopKHRhZ3AgKyAxKSAtIChjaGFyICopYmxvY2spOwotCQlpZiAoKytpID09IElOVF9HRVQoc2ZwLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpCisJCWlmICgrK2kgPT0gc2ZwLT5oZHIuY291bnQpCiAJCQlzZmVwID0gTlVMTDsKIAkJZWxzZQogCQkJc2ZlcCA9IFhGU19ESVIyX1NGX05FWFRFTlRSWShzZnAsIHNmZXApOwpAQCAtMTIxMiwxMyArMTIxNSwxMyBAQAogCS8qCiAJICogU29ydCB0aGUgbGVhZiBlbnRyaWVzIGJ5IGhhc2ggdmFsdWUuCiAJICovCi0JeGZzX3NvcnQoYmxwLCBJTlRfR0VUKGJ0cC0+Y291bnQsIEFSQ0hfQ09OVkVSVCksIHNpemVvZigqYmxwKSwgeGZzX2RpcjJfYmxvY2tfc29ydCk7CisJeGZzX3NvcnQoYmxwLCBiZTMyX3RvX2NwdShidHAtPmNvdW50KSwgc2l6ZW9mKCpibHApLCB4ZnNfZGlyMl9ibG9ja19zb3J0KTsKIAkvKgogCSAqIExvZyB0aGUgbGVhZiBlbnRyeSBhcmVhIGFuZCB0YWlsLgogCSAqIEFscmVhZHkgbG9nZ2VkIHRoZSBoZWFkZXIgaW4gZGF0YV9pbml0LCBpZ25vcmUgbmVlZGxvZy4KIAkgKi8KIAlBU1NFUlQobmVlZHNjYW4gPT0gMCk7Ci0JeGZzX2RpcjJfYmxvY2tfbG9nX2xlYWYodHAsIGJwLCAwLCBJTlRfR0VUKGJ0cC0+Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxKTsKKwl4ZnNfZGlyMl9ibG9ja19sb2dfbGVhZih0cCwgYnAsIDAsIGJlMzJfdG9fY3B1KGJ0cC0+Y291bnQpIC0gMSk7CiAJeGZzX2RpcjJfYmxvY2tfbG9nX3RhaWwodHAsIGJwKTsKIAl4ZnNfZGlyMl9kYXRhX2NoZWNrKGRwLCBicCk7CiAJeGZzX2RhX2J1Zl9kb25lKGJwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5oIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmgKaW5kZXggYTJlNWNiOS4uNjcyMmVmZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmgKKysrIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmgKQEAgLTQzLDggKzQzLDggQEAKICNkZWZpbmUJWEZTX0RJUjJfQkxPQ0tfTUFHSUMJMHg1ODQ0MzI0MgkvKiBYRDJCOiBmb3Igb25lIGJsb2NrIGRpcnMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2RpcjJfYmxvY2tfdGFpbCB7Ci0JX191aW50MzJfdAljb3VudDsJCQkvKiBjb3VudCBvZiBsZWFmIGVudHJpZXMgKi8KLQlfX3VpbnQzMl90CXN0YWxlOwkJCS8qIGNvdW50IG9mIHN0YWxlIGxmIGVudHJpZXMgKi8KKwlfX2JlMzIJCWNvdW50OwkJCS8qIGNvdW50IG9mIGxlYWYgZW50cmllcyAqLworCV9fYmUzMgkJc3RhbGU7CQkJLyogY291bnQgb2Ygc3RhbGUgbGYgZW50cmllcyAqLwogfSB4ZnNfZGlyMl9ibG9ja190YWlsX3Q7CiAKIC8qCkBAIC03NSw4ICs3NSw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnNfZGlyMl9sZWFmX2VudHJ5ICoKIHhmc19kaXIyX2Jsb2NrX2xlYWZfcCh4ZnNfZGlyMl9ibG9ja190YWlsX3QgKmJ0cCkKIHsKLQlyZXR1cm4gKCgoc3RydWN0IHhmc19kaXIyX2xlYWZfZW50cnkgKikKLQkJKGJ0cCkpIC0gSU5UX0dFVCgoYnRwKS0+Y291bnQsIEFSQ0hfQ09OVkVSVCkpOworCXJldHVybiAoKHN0cnVjdCB4ZnNfZGlyMl9sZWFmX2VudHJ5ICopYnRwKSAtIGJlMzJfdG9fY3B1KGJ0cC0+Y291bnQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2RhdGEuYyBiL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmMKaW5kZXggNWI3YzQ3ZS4uYmIzZDAzZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2RhdGEuYworKysgYi9mcy94ZnMveGZzX2RpcjJfZGF0YS5jCkBAIC03MCwxMSArNzAsMTEgQEAKIAogCW1wID0gZHAtPmlfbW91bnQ7CiAJZCA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGQtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8Ci0JICAgICAgIElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0JMT0NLX01BR0lDKTsKKwlBU1NFUlQoYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8CisJICAgICAgIGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOwogCWJmID0gZC0+aGRyLmJlc3RmcmVlOwogCXAgPSAoY2hhciAqKWQtPnU7Ci0JaWYgKElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0JMT0NLX01BR0lDKSB7CisJaWYgKGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpIHsKIAkJYnRwID0gWEZTX0RJUjJfQkxPQ0tfVEFJTF9QKG1wLCAoeGZzX2RpcjJfYmxvY2tfdCAqKWQpOwogCQlsZXAgPSBYRlNfRElSMl9CTE9DS19MRUFGX1AoYnRwKTsKIAkJZW5kcCA9IChjaGFyICopbGVwOwpAQCAtOTYsOCArOTYsOCBAQAogCQlBU1NFUlQoIWJmWzJdLm9mZnNldCk7CiAJCWZyZWVzZWVuIHw9IDEgPDwgMjsKIAl9Ci0JQVNTRVJUKElOVF9HRVQoYmZbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpID49IElOVF9HRVQoYmZbMV0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpKTsKLQlBU1NFUlQoSU5UX0dFVChiZlsxXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkgPj0gSU5UX0dFVChiZlsyXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkpOworCUFTU0VSVChiZTE2X3RvX2NwdShiZlswXS5sZW5ndGgpID49IGJlMTZfdG9fY3B1KGJmWzFdLmxlbmd0aCkpOworCUFTU0VSVChiZTE2X3RvX2NwdShiZlsxXS5sZW5ndGgpID49IGJlMTZfdG9fY3B1KGJmWzJdLmxlbmd0aCkpOwogCS8qCiAJICogTG9vcCBvdmVyIHRoZSBkYXRhL3VudXNlZCBlbnRyaWVzLgogCSAqLwpAQCAtMTA4LDE4ICsxMDgsMjAgQEAKIAkJICogSWYgd2UgZmluZCBpdCwgYWNjb3VudCBmb3IgdGhhdCwgZWxzZSBtYWtlIHN1cmUgaXQKIAkJICogZG9lc24ndCBuZWVkIHRvIGJlIHRoZXJlLgogCQkgKi8KLQkJaWYgKElOVF9HRVQoZHVwLT5mcmVldGFnLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfRlJFRV9UQUcpIHsKKwkJaWYgKGJlMTZfdG9fY3B1KGR1cC0+ZnJlZXRhZykgPT0gWEZTX0RJUjJfREFUQV9GUkVFX1RBRykgewogCQkJQVNTRVJUKGxhc3RmcmVlID09IDApOwotCQkJQVNTRVJUKElOVF9HRVQoKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKGR1cCksIEFSQ0hfQ09OVkVSVCkgPT0KKwkJCUFTU0VSVChiZTE2X3RvX2NwdSgqWEZTX0RJUjJfREFUQV9VTlVTRURfVEFHX1AoZHVwKSkgPT0KIAkJCSAgICAgICAoY2hhciAqKWR1cCAtIChjaGFyICopZCk7CiAJCQlkZnAgPSB4ZnNfZGlyMl9kYXRhX2ZyZWVmaW5kKGQsIGR1cCk7CiAJCQlpZiAoZGZwKSB7CiAJCQkJaSA9IChpbnQpKGRmcCAtIGJmKTsKIAkJCQlBU1NFUlQoKGZyZWVzZWVuICYgKDEgPDwgaSkpID09IDApOwogCQkJCWZyZWVzZWVuIHw9IDEgPDwgaTsKLQkJCX0gZWxzZQotCQkJCUFTU0VSVChJTlRfR0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpIDw9IElOVF9HRVQoYmZbMl0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpKTsKLQkJCXAgKz0gSU5UX0dFVChkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKTsKKwkJCX0gZWxzZSB7CisJCQkJQVNTRVJUKGJlMTZfdG9fY3B1KGR1cC0+bGVuZ3RoKSA8PQorCQkJCSAgICAgICBiZTE2X3RvX2NwdShiZlsyXS5sZW5ndGgpKTsKKwkJCX0KKwkJCXAgKz0gYmUxNl90b19jcHUoZHVwLT5sZW5ndGgpOwogCQkJbGFzdGZyZWUgPSAxOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEzMiwyMSArMTM0LDIxIEBACiAJCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKilwOwogCQlBU1NFUlQoZGVwLT5uYW1lbGVuICE9IDApOwogCQlBU1NFUlQoeGZzX2Rpcl9pbm9fdmFsaWRhdGUobXAsIElOVF9HRVQoZGVwLT5pbnVtYmVyLCBBUkNIX0NPTlZFUlQpKSA9PSAwKTsKLQkJQVNTRVJUKElOVF9HRVQoKlhGU19ESVIyX0RBVEFfRU5UUllfVEFHX1AoZGVwKSwgQVJDSF9DT05WRVJUKSA9PQorCQlBU1NFUlQoYmUxNl90b19jcHUoKlhGU19ESVIyX0RBVEFfRU5UUllfVEFHX1AoZGVwKSkgPT0KIAkJICAgICAgIChjaGFyICopZGVwIC0gKGNoYXIgKilkKTsKIAkJY291bnQrKzsKIAkJbGFzdGZyZWUgPSAwOwotCQlpZiAoSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpIHsKKwkJaWYgKGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpIHsKIAkJCWFkZHIgPSBYRlNfRElSMl9EQl9PRkZfVE9fREFUQVBUUihtcCwgbXAtPm1fZGlyZGF0YWJsaywKIAkJCQkoeGZzX2RpcjJfZGF0YV9hb2ZmX3QpCiAJCQkJKChjaGFyICopZGVwIC0gKGNoYXIgKilkKSk7CiAJCQloYXNoID0geGZzX2RhX2hhc2huYW1lKChjaGFyICopZGVwLT5uYW1lLCBkZXAtPm5hbWVsZW4pOwotCQkJZm9yIChpID0gMDsgaSA8IElOVF9HRVQoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJUKTsgaSsrKSB7Ci0JCQkJaWYgKElOVF9HRVQobGVwW2ldLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgPT0gYWRkciAmJgotCQkJCSAgICBJTlRfR0VUKGxlcFtpXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID09IGhhc2gpCisJCQlmb3IgKGkgPSAwOyBpIDwgYmUzMl90b19jcHUoYnRwLT5jb3VudCk7IGkrKykgeworCQkJCWlmIChiZTMyX3RvX2NwdShsZXBbaV0uYWRkcmVzcykgPT0gYWRkciAmJgorCQkJCSAgICBiZTMyX3RvX2NwdShsZXBbaV0uaGFzaHZhbCkgPT0gaGFzaCkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlBU1NFUlQoaSA8IElOVF9HRVQoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJUKSk7CisJCQlBU1NFUlQoaSA8IGJlMzJfdG9fY3B1KGJ0cC0+Y291bnQpKTsKIAkJfQogCQlwICs9IFhGU19ESVIyX0RBVEFfRU5UU0laRShkZXAtPm5hbWVsZW4pOwogCX0KQEAgLTE1NCwxNSArMTU2LDE1IEBACiAJICogTmVlZCB0byBoYXZlIHNlZW4gYWxsIHRoZSBlbnRyaWVzIGFuZCBhbGwgdGhlIGJlc3RmcmVlIHNsb3RzLgogCSAqLwogCUFTU0VSVChmcmVlc2VlbiA9PSA3KTsKLQlpZiAoSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpIHsKLQkJZm9yIChpID0gc3RhbGUgPSAwOyBpIDwgSU5UX0dFVChidHAtPmNvdW50LCBBUkNIX0NPTlZFUlQpOyBpKyspIHsKLQkJCWlmIChJTlRfR0VUKGxlcFtpXS5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKKwlpZiAoYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9CTE9DS19NQUdJQykgeworCQlmb3IgKGkgPSBzdGFsZSA9IDA7IGkgPCBiZTMyX3RvX2NwdShidHAtPmNvdW50KTsgaSsrKSB7CisJCQlpZiAoYmUzMl90b19jcHUobGVwW2ldLmFkZHJlc3MpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKIAkJCQlzdGFsZSsrOwogCQkJaWYgKGkgPiAwKQotCQkJCUFTU0VSVChJTlRfR0VUKGxlcFtpXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID49IElOVF9HRVQobGVwW2kgLSAxXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKTsKKwkJCQlBU1NFUlQoYmUzMl90b19jcHUobGVwW2ldLmhhc2h2YWwpID49IGJlMzJfdG9fY3B1KGxlcFtpIC0gMV0uaGFzaHZhbCkpOwogCQl9Ci0JCUFTU0VSVChjb3VudCA9PSBJTlRfR0VUKGJ0cC0+Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSBJTlRfR0VUKGJ0cC0+c3RhbGUsIEFSQ0hfQ09OVkVSVCkpOwotCQlBU1NFUlQoc3RhbGUgPT0gSU5UX0dFVChidHAtPnN0YWxlLCBBUkNIX0NPTlZFUlQpKTsKKwkJQVNTRVJUKGNvdW50ID09IGJlMzJfdG9fY3B1KGJ0cC0+Y291bnQpIC0gYmUzMl90b19jcHUoYnRwLT5zdGFsZSkpOworCQlBU1NFUlQoc3RhbGUgPT0gYmUzMl90b19jcHUoYnRwLT5zdGFsZSkpOwogCX0KIH0KICNlbmRpZgpAQCAtMTkwLDggKzE5Miw4IEBACiAJICogQ2hlY2sgb3JkZXIsIG5vbi1vdmVybGFwcGluZyBlbnRyaWVzLCBhbmQgaWYgd2UgZmluZCB0aGUKIAkgKiBvbmUgd2UncmUgbG9va2luZyBmb3IgaXQgaGFzIHRvIGJlIGV4YWN0LgogCSAqLwotCUFTU0VSVChJTlRfR0VUKGQtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8Ci0JICAgICAgIElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0JMT0NLX01BR0lDKTsKKwlBU1NFUlQoYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8CisJICAgICAgIGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOwogCWZvciAoZGZwID0gJmQtPmhkci5iZXN0ZnJlZVswXSwgc2Vlbnplcm8gPSBtYXRjaGVkID0gMDsKIAkgICAgIGRmcCA8ICZkLT5oZHIuYmVzdGZyZWVbWEZTX0RJUjJfREFUQV9GRF9DT1VOVF07CiAJICAgICBkZnArKykgewpAQCAtMjAxLDIzICsyMDMsMjQgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCUFTU0VSVChzZWVuemVybyA9PSAwKTsKLQkJaWYgKElOVF9HRVQoZGZwLT5vZmZzZXQsIEFSQ0hfQ09OVkVSVCkgPT0gb2ZmKSB7CisJCWlmIChiZTE2X3RvX2NwdShkZnAtPm9mZnNldCkgPT0gb2ZmKSB7CiAJCQltYXRjaGVkID0gMTsKLQkJCUFTU0VSVChJTlRfR0VUKGRmcC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpID09IElOVF9HRVQoZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkpOwotCQl9IGVsc2UgaWYgKG9mZiA8IElOVF9HRVQoZGZwLT5vZmZzZXQsIEFSQ0hfQ09OVkVSVCkpCi0JCQlBU1NFUlQob2ZmICsgSU5UX0dFVChkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKSA8PSBJTlRfR0VUKGRmcC0+b2Zmc2V0LCBBUkNIX0NPTlZFUlQpKTsKKwkJCUFTU0VSVChkZnAtPmxlbmd0aCA9PSBkdXAtPmxlbmd0aCk7CisJCX0gZWxzZSBpZiAob2ZmIDwgYmUxNl90b19jcHUoZGZwLT5vZmZzZXQpKQorCQkJQVNTRVJUKG9mZiArIGJlMTZfdG9fY3B1KGR1cC0+bGVuZ3RoKSA8PSBiZTE2X3RvX2NwdShkZnAtPm9mZnNldCkpOwogCQllbHNlCi0JCQlBU1NFUlQoSU5UX0dFVChkZnAtPm9mZnNldCwgQVJDSF9DT05WRVJUKSArIElOVF9HRVQoZGZwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkgPD0gb2ZmKTsKLQkJQVNTRVJUKG1hdGNoZWQgfHwgSU5UX0dFVChkZnAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKSA+PSBJTlRfR0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpKTsKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShkZnAtPm9mZnNldCkgKyBiZTE2X3RvX2NwdShkZnAtPmxlbmd0aCkgPD0gb2ZmKTsKKwkJQVNTRVJUKG1hdGNoZWQgfHwgYmUxNl90b19jcHUoZGZwLT5sZW5ndGgpID49IGJlMTZfdG9fY3B1KGR1cC0+bGVuZ3RoKSk7CiAJCWlmIChkZnAgPiAmZC0+aGRyLmJlc3RmcmVlWzBdKQotCQkJQVNTRVJUKElOVF9HRVQoZGZwWy0xXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkgPj0gSU5UX0dFVChkZnBbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpKTsKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShkZnBbLTFdLmxlbmd0aCkgPj0gYmUxNl90b19jcHUoZGZwWzBdLmxlbmd0aCkpOwogCX0KICNlbmRpZgogCS8qCiAJICogSWYgdGhpcyBpcyBzbWFsbGVyIHRoYW4gdGhlIHNtYWxsZXN0IGJlc3RmcmVlIGVudHJ5LAogCSAqIGl0IGNhbid0IGJlIHRoZXJlIHNpbmNlIHRoZXkncmUgc29ydGVkLgogCSAqLwotCWlmIChJTlRfR0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpIDwgSU5UX0dFVChkLT5oZHIuYmVzdGZyZWVbWEZTX0RJUjJfREFUQV9GRF9DT1VOVCAtIDFdLmxlbmd0aCwgQVJDSF9DT05WRVJUKSkKKwlpZiAoYmUxNl90b19jcHUoZHVwLT5sZW5ndGgpIDwKKwkgICAgYmUxNl90b19jcHUoZC0+aGRyLmJlc3RmcmVlW1hGU19ESVIyX0RBVEFfRkRfQ09VTlQgLSAxXS5sZW5ndGgpKQogCQlyZXR1cm4gTlVMTDsKIAkvKgogCSAqIExvb2sgYXQgdGhlIHRocmVlIGJlc3RmcmVlIGVudHJpZXMgZm9yIG91ciBndXkuCkBAIC0yMjcsNyArMjMwLDcgQEAKIAkgICAgIGRmcCsrKSB7CiAJCWlmICghZGZwLT5vZmZzZXQpCiAJCQlyZXR1cm4gTlVMTDsKLQkJaWYgKElOVF9HRVQoZGZwLT5vZmZzZXQsIEFSQ0hfQ09OVkVSVCkgPT0gb2ZmKQorCQlpZiAoYmUxNl90b19jcHUoZGZwLT5vZmZzZXQpID09IG9mZikKIAkJCXJldHVybiBkZnA7CiAJfQogCS8qCkBAIC0yNDksMjkgKzI1MiwyOSBAQAogCXhmc19kaXIyX2RhdGFfZnJlZV90CW5ldzsJCS8qIG5ldyBiZXN0ZnJlZSBlbnRyeSAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotCUFTU0VSVChJTlRfR0VUKGQtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8Ci0JICAgICAgIElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0JMT0NLX01BR0lDKTsKKwlBU1NFUlQoYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8CisJICAgICAgIGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOwogI2VuZGlmCiAJZGZwID0gZC0+aGRyLmJlc3RmcmVlOwotCUlOVF9DT1BZKG5ldy5sZW5ndGgsIGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpOwotCUlOVF9TRVQobmV3Lm9mZnNldCwgQVJDSF9DT05WRVJULCAoeGZzX2RpcjJfZGF0YV9vZmZfdCkoKGNoYXIgKilkdXAgLSAoY2hhciAqKWQpKTsKKwluZXcubGVuZ3RoID0gZHVwLT5sZW5ndGg7CisJbmV3Lm9mZnNldCA9IGNwdV90b19iZTE2KChjaGFyICopZHVwIC0gKGNoYXIgKilkKTsKIAkvKgogCSAqIEluc2VydCBhdCBwb3NpdGlvbiAwLCAxLCBvciAyOyBvciBub3QgYXQgYWxsLgogCSAqLwotCWlmIChJTlRfR0VUKG5ldy5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkgPiBJTlRfR0VUKGRmcFswXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkpIHsKKwlpZiAoYmUxNl90b19jcHUobmV3Lmxlbmd0aCkgPiBiZTE2X3RvX2NwdShkZnBbMF0ubGVuZ3RoKSkgewogCQlkZnBbMl0gPSBkZnBbMV07CiAJCWRmcFsxXSA9IGRmcFswXTsKIAkJZGZwWzBdID0gbmV3OwogCQkqbG9naGVhZCA9IDE7CiAJCXJldHVybiAmZGZwWzBdOwogCX0KLQlpZiAoSU5UX0dFVChuZXcubGVuZ3RoLCBBUkNIX0NPTlZFUlQpID4gSU5UX0dFVChkZnBbMV0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpKSB7CisJaWYgKGJlMTZfdG9fY3B1KG5ldy5sZW5ndGgpID4gYmUxNl90b19jcHUoZGZwWzFdLmxlbmd0aCkpIHsKIAkJZGZwWzJdID0gZGZwWzFdOwogCQlkZnBbMV0gPSBuZXc7CiAJCSpsb2doZWFkID0gMTsKIAkJcmV0dXJuICZkZnBbMV07CiAJfQotCWlmIChJTlRfR0VUKG5ldy5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkgPiBJTlRfR0VUKGRmcFsyXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkpIHsKKwlpZiAoYmUxNl90b19jcHUobmV3Lmxlbmd0aCkgPiBiZTE2X3RvX2NwdShkZnBbMl0ubGVuZ3RoKSkgewogCQlkZnBbMl0gPSBuZXc7CiAJCSpsb2doZWFkID0gMTsKIAkJcmV0dXJuICZkZnBbMl07CkBAIC0yODksOCArMjkyLDggQEAKIAlpbnQJCQkqbG9naGVhZCkJLyogb3V0OiBsb2cgZGF0YSBoZWFkZXIgKi8KIHsKICNpZmRlZiBfX0tFUk5FTF9fCi0JQVNTRVJUKElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfTUFHSUMgfHwKLQkgICAgICAgSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOworCUFTU0VSVChiZTMyX3RvX2NwdShkLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0RBVEFfTUFHSUMgfHwKKwkgICAgICAgYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9CTE9DS19NQUdJQyk7CiAjZW5kaWYKIAkvKgogCSAqIEl0J3MgdGhlIGZpcnN0IGVudHJ5LCBzbGlkZSB0aGUgbmV4dCAyIHVwLgpAQCAtMzM0LDggKzMzNyw4IEBACiAJY2hhcgkJCSpwOwkJLyogY3VycmVudCBlbnRyeSBwb2ludGVyICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0JQVNTRVJUKElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfTUFHSUMgfHwKLQkgICAgICAgSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOworCUFTU0VSVChiZTMyX3RvX2NwdShkLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0RBVEFfTUFHSUMgfHwKKwkgICAgICAgYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9CTE9DS19NQUdJQyk7CiAjZW5kaWYKIAkvKgogCSAqIFN0YXJ0IGJ5IGNsZWFyaW5nIHRoZSB0YWJsZS4KQEAgLTM0OCw3ICszNTEsNyBAQAogCXAgPSAoY2hhciAqKWQtPnU7CiAJaWYgKGFlbmRwKQogCQllbmRwID0gYWVuZHA7Ci0JZWxzZSBpZiAoSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpIHsKKwllbHNlIGlmIChiZTMyX3RvX2NwdShkLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0JMT0NLX01BR0lDKSB7CiAJCWJ0cCA9IFhGU19ESVIyX0JMT0NLX1RBSUxfUChtcCwgKHhmc19kaXIyX2Jsb2NrX3QgKilkKTsKIAkJZW5kcCA9IChjaGFyICopWEZTX0RJUjJfQkxPQ0tfTEVBRl9QKGJ0cCk7CiAJfSBlbHNlCkBAIC0zNjEsMTEgKzM2NCwxMSBAQAogCQkvKgogCQkgKiBJZiBpdCdzIGEgZnJlZSBlbnRyeSwgaW5zZXJ0IGl0LgogCQkgKi8KLQkJaWYgKElOVF9HRVQoZHVwLT5mcmVldGFnLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfRlJFRV9UQUcpIHsKKwkJaWYgKGJlMTZfdG9fY3B1KGR1cC0+ZnJlZXRhZykgPT0gWEZTX0RJUjJfREFUQV9GUkVFX1RBRykgewogCQkJQVNTRVJUKChjaGFyICopZHVwIC0gKGNoYXIgKilkID09Ci0JCQkgICAgICAgSU5UX0dFVCgqWEZTX0RJUjJfREFUQV9VTlVTRURfVEFHX1AoZHVwKSwgQVJDSF9DT05WRVJUKSk7CisJCQkgICAgICAgYmUxNl90b19jcHUoKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKGR1cCkpKTsKIAkJCXhmc19kaXIyX2RhdGFfZnJlZWluc2VydChkLCBkdXAsIGxvZ2hlYWQpOwotCQkJcCArPSBJTlRfR0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpOworCQkJcCArPSBiZTE2X3RvX2NwdShkdXAtPmxlbmd0aCk7CiAJCX0KIAkJLyoKIAkJICogRm9yIGFjdGl2ZSBlbnRyaWVzLCBjaGVjayB0aGVpciB0YWdzIGFuZCBza2lwIHRoZW0uCkBAIC0zNzMsNyArMzc2LDcgQEAKIAkJZWxzZSB7CiAJCQlkZXAgPSAoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICopcDsKIAkJCUFTU0VSVCgoY2hhciAqKWRlcCAtIChjaGFyICopZCA9PQotCQkJICAgICAgIElOVF9HRVQoKlhGU19ESVIyX0RBVEFfRU5UUllfVEFHX1AoZGVwKSwgQVJDSF9DT05WRVJUKSk7CisJCQkgICAgICAgYmUxNl90b19jcHUoKlhGU19ESVIyX0RBVEFfRU5UUllfVEFHX1AoZGVwKSkpOwogCQkJcCArPSBYRlNfRElSMl9EQVRBX0VOVFNJWkUoZGVwLT5uYW1lbGVuKTsKIAkJfQogCX0KQEAgLTQxNSw4ICs0MTgsOCBAQAogCSAqIEluaXRpYWxpemUgdGhlIGhlYWRlci4KIAkgKi8KIAlkID0gYnAtPmRhdGE7Ci0JSU5UX1NFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCwgWEZTX0RJUjJfREFUQV9NQUdJQyk7Ci0JSU5UX1NFVChkLT5oZHIuYmVzdGZyZWVbMF0ub2Zmc2V0LCBBUkNIX0NPTlZFUlQsICh4ZnNfZGlyMl9kYXRhX29mZl90KXNpemVvZihkLT5oZHIpKTsKKwlkLT5oZHIubWFnaWMgPSBjcHVfdG9fYmUzMihYRlNfRElSMl9EQVRBX01BR0lDKTsKKwlkLT5oZHIuYmVzdGZyZWVbMF0ub2Zmc2V0ID0gY3B1X3RvX2JlMTYoc2l6ZW9mKGQtPmhkcikpOwogCWZvciAoaSA9IDE7IGkgPCBYRlNfRElSMl9EQVRBX0ZEX0NPVU5UOyBpKyspIHsKIAkJZC0+aGRyLmJlc3RmcmVlW2ldLmxlbmd0aCA9IDA7CiAJCWQtPmhkci5iZXN0ZnJlZVtpXS5vZmZzZXQgPSAwOwpAQCAtNDI1LDEzICs0MjgsMTIgQEAKIAkgKiBTZXQgdXAgYW4gdW51c2VkIGVudHJ5IGZvciB0aGUgYmxvY2sncyBib2R5LgogCSAqLwogCWR1cCA9ICZkLT51WzBdLnVudXNlZDsKLQlJTlRfU0VUKGR1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKTsKKwlkdXAtPmZyZWV0YWcgPSBjcHVfdG9fYmUxNihYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKTsKIAogCXQ9bXAtPm1fZGlyYmxrc2l6ZSAtICh1aW50KXNpemVvZihkLT5oZHIpOwotCUlOVF9TRVQoZC0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aCwgQVJDSF9DT05WRVJULCB0KTsKLQlJTlRfU0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQsIHQpOwotCUlOVF9TRVQoKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKGR1cCksIEFSQ0hfQ09OVkVSVCwKLQkJKHhmc19kaXIyX2RhdGFfb2ZmX3QpKChjaGFyICopZHVwIC0gKGNoYXIgKilkKSk7CisJZC0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aCA9IGNwdV90b19iZTE2KHQpOworCWR1cC0+bGVuZ3RoID0gY3B1X3RvX2JlMTYodCk7CisJKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKGR1cCkgPSBjcHVfdG9fYmUxNigoY2hhciAqKWR1cCAtIChjaGFyICopZCk7CiAJLyoKIAkgKiBMb2cgaXQgYW5kIHJldHVybiBpdC4KIAkgKi8KQEAgLTQ1Myw4ICs0NTUsOCBAQAogCXhmc19kaXIyX2RhdGFfdAkJKmQ7CQkvKiBkYXRhIGJsb2NrIHBvaW50ZXIgKi8KIAogCWQgPSBicC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfREFUQV9NQUdJQyB8fAotCSAgICAgICBJTlRfR0VUKGQtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9CTE9DS19NQUdJQyk7CisJQVNTRVJUKGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfREFUQV9NQUdJQyB8fAorCSAgICAgICBiZTMyX3RvX2NwdShkLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0JMT0NLX01BR0lDKTsKIAl4ZnNfZGFfbG9nX2J1Zih0cCwgYnAsICh1aW50KSgoY2hhciAqKWRlcCAtIChjaGFyICopZCksCiAJCSh1aW50KSgoY2hhciAqKShYRlNfRElSMl9EQVRBX0VOVFJZX1RBR19QKGRlcCkgKyAxKSAtCiAJCSAgICAgICAoY2hhciAqKWQgLSAxKSk7CkBAIC00NzEsOCArNDczLDggQEAKIAl4ZnNfZGlyMl9kYXRhX3QJCSpkOwkJLyogZGF0YSBibG9jayBwb2ludGVyICovCiAKIAlkID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfTUFHSUMgfHwKLQkgICAgICAgSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOworCUFTU0VSVChiZTMyX3RvX2NwdShkLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0RBVEFfTUFHSUMgfHwKKwkgICAgICAgYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9CTE9DS19NQUdJQyk7CiAJeGZzX2RhX2xvZ19idWYodHAsIGJwLCAodWludCkoKGNoYXIgKikmZC0+aGRyIC0gKGNoYXIgKilkKSwKIAkJKHVpbnQpKHNpemVvZihkLT5oZHIpIC0gMSkpOwogfQpAQCAtNDg5LDggKzQ5MSw4IEBACiAJeGZzX2RpcjJfZGF0YV90CQkqZDsJCS8qIGRhdGEgYmxvY2sgcG9pbnRlciAqLwogCiAJZCA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGQtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8Ci0JICAgICAgIElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0JMT0NLX01BR0lDKTsKKwlBU1NFUlQoYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8CisJICAgICAgIGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOwogCS8qCiAJICogTG9nIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSB1bnVzZWQgZW50cnkuCiAJICovCkBAIC01MzMsMTIgKzUzNSwxMiBAQAogCS8qCiAJICogRmlndXJlIG91dCB3aGVyZSB0aGUgZW5kIG9mIHRoZSBkYXRhIGFyZWEgaXMuCiAJICovCi0JaWYgKElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfTUFHSUMpCisJaWYgKGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfREFUQV9NQUdJQykKIAkJZW5kcHRyID0gKGNoYXIgKilkICsgbXAtPm1fZGlyYmxrc2l6ZTsKIAllbHNlIHsKIAkJeGZzX2RpcjJfYmxvY2tfdGFpbF90CSpidHA7CS8qIGJsb2NrIHRhaWwgKi8KIAotCQlBU1NFUlQoSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOworCQlBU1NFUlQoYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9CTE9DS19NQUdJQyk7CiAJCWJ0cCA9IFhGU19ESVIyX0JMT0NLX1RBSUxfUChtcCwgKHhmc19kaXIyX2Jsb2NrX3QgKilkKTsKIAkJZW5kcHRyID0gKGNoYXIgKilYRlNfRElSMl9CTE9DS19MRUFGX1AoYnRwKTsKIAl9CkBAIC01NDcsMTEgKzU0OSwxMSBAQAogCSAqIHRoZSBwcmV2aW91cyBlbnRyeSBhbmQgc2VlIGlmIGl0J3MgZnJlZS4KIAkgKi8KIAlpZiAob2Zmc2V0ID4gc2l6ZW9mKGQtPmhkcikpIHsKLQkJeGZzX2RpcjJfZGF0YV9vZmZfdAkqdGFncDsJLyogdGFnIGp1c3QgYmVmb3JlIHVzICovCisJCV9fYmUxNgkJCSp0YWdwOwkvKiB0YWcganVzdCBiZWZvcmUgdXMgKi8KIAotCQl0YWdwID0gKHhmc19kaXIyX2RhdGFfb2ZmX3QgKikoKGNoYXIgKilkICsgb2Zmc2V0KSAtIDE7Ci0JCXByZXZkdXAgPSAoeGZzX2RpcjJfZGF0YV91bnVzZWRfdCAqKSgoY2hhciAqKWQgKyBJTlRfR0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQpKTsKLQkJaWYgKElOVF9HRVQocHJldmR1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJUKSAhPSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKQorCQl0YWdwID0gKF9fYmUxNiAqKSgoY2hhciAqKWQgKyBvZmZzZXQpIC0gMTsKKwkJcHJldmR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopKChjaGFyICopZCArIGJlMTZfdG9fY3B1KCp0YWdwKSk7CisJCWlmIChiZTE2X3RvX2NwdShwcmV2ZHVwLT5mcmVldGFnKSAhPSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKQogCQkJcHJldmR1cCA9IE5VTEw7CiAJfSBlbHNlCiAJCXByZXZkdXAgPSBOVUxMOwpAQCAtNTYyLDcgKzU2NCw3IEBACiAJaWYgKChjaGFyICopZCArIG9mZnNldCArIGxlbiA8IGVuZHB0cikgewogCQlwb3N0ZHVwID0KIAkJCSh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopKChjaGFyICopZCArIG9mZnNldCArIGxlbik7Ci0JCWlmIChJTlRfR0VUKHBvc3RkdXAtPmZyZWV0YWcsIEFSQ0hfQ09OVkVSVCkgIT0gWEZTX0RJUjJfREFUQV9GUkVFX1RBRykKKwkJaWYgKGJlMTZfdG9fY3B1KHBvc3RkdXAtPmZyZWV0YWcpICE9IFhGU19ESVIyX0RBVEFfRlJFRV9UQUcpCiAJCQlwb3N0ZHVwID0gTlVMTDsKIAl9IGVsc2UKIAkJcG9zdGR1cCA9IE5VTEw7CkBAIC01ODYsMTMgKzU4OCwxMyBAQAogCQkgKiBzaW5jZSB0aGUgdGhpcmQgYmVzdGZyZWUgaXMgdGhlcmUsIHRoZXJlIG1pZ2h0IGJlIG1vcmUKIAkJICogZW50cmllcy4KIAkJICovCi0JCW5lZWRzY2FuID0gZC0+aGRyLmJlc3RmcmVlWzJdLmxlbmd0aDsKKwkJbmVlZHNjYW4gPSAoZC0+aGRyLmJlc3RmcmVlWzJdLmxlbmd0aCAhPSAwKTsKIAkJLyoKIAkJICogRml4IHVwIHRoZSBuZXcgYmlnIGZyZWVzcGFjZS4KIAkJICovCi0JCUlOVF9NT0QocHJldmR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQsIGxlbiArIElOVF9HRVQocG9zdGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpKTsKLQkJSU5UX1NFVCgqWEZTX0RJUjJfREFUQV9VTlVTRURfVEFHX1AocHJldmR1cCksIEFSQ0hfQ09OVkVSVCwKLQkJCSh4ZnNfZGlyMl9kYXRhX29mZl90KSgoY2hhciAqKXByZXZkdXAgLSAoY2hhciAqKWQpKTsKKwkJYmUxNl9hZGQoJnByZXZkdXAtPmxlbmd0aCwgbGVuICsgYmUxNl90b19jcHUocG9zdGR1cC0+bGVuZ3RoKSk7CisJCSpYRlNfRElSMl9EQVRBX1VOVVNFRF9UQUdfUChwcmV2ZHVwKSA9CisJCQljcHVfdG9fYmUxNigoY2hhciAqKXByZXZkdXAgLSAoY2hhciAqKWQpOwogCQl4ZnNfZGlyMl9kYXRhX2xvZ191bnVzZWQodHAsIGJwLCBwcmV2ZHVwKTsKIAkJaWYgKCFuZWVkc2NhbikgewogCQkJLyoKQEAgLTYxNCw3ICs2MTYsNyBAQAogCQkJICovCiAJCQlkZnAgPSB4ZnNfZGlyMl9kYXRhX2ZyZWVpbnNlcnQoZCwgcHJldmR1cCwgbmVlZGxvZ3ApOwogCQkJQVNTRVJUKGRmcCA9PSAmZC0+aGRyLmJlc3RmcmVlWzBdKTsKLQkJCUFTU0VSVChJTlRfR0VUKGRmcC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpID09IElOVF9HRVQocHJldmR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpKTsKKwkJCUFTU0VSVChkZnAtPmxlbmd0aCA9PSBwcmV2ZHVwLT5sZW5ndGgpOwogCQkJQVNTRVJUKCFkZnBbMV0ubGVuZ3RoKTsKIAkJCUFTU0VSVCghZGZwWzJdLmxlbmd0aCk7CiAJCX0KQEAgLTYyNCw5ICs2MjYsOSBAQAogCSAqLwogCWVsc2UgaWYgKHByZXZkdXApIHsKIAkJZGZwID0geGZzX2RpcjJfZGF0YV9mcmVlZmluZChkLCBwcmV2ZHVwKTsKLQkJSU5UX01PRChwcmV2ZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCwgbGVuKTsKLQkJSU5UX1NFVCgqWEZTX0RJUjJfREFUQV9VTlVTRURfVEFHX1AocHJldmR1cCksIEFSQ0hfQ09OVkVSVCwKLQkJCSh4ZnNfZGlyMl9kYXRhX29mZl90KSgoY2hhciAqKXByZXZkdXAgLSAoY2hhciAqKWQpKTsKKwkJYmUxNl9hZGQoJnByZXZkdXAtPmxlbmd0aCwgbGVuKTsKKwkJKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKHByZXZkdXApID0KKwkJCWNwdV90b19iZTE2KChjaGFyICopcHJldmR1cCAtIChjaGFyICopZCk7CiAJCXhmc19kaXIyX2RhdGFfbG9nX3VudXNlZCh0cCwgYnAsIHByZXZkdXApOwogCQkvKgogCQkgKiBJZiB0aGUgcHJldmlvdXMgZW50cnkgd2FzIGluIHRoZSB0YWJsZSwgdGhlIG5ldyBlbnRyeQpAQCAtNjQwLDggKzY0MiwxMCBAQAogCQkvKgogCQkgKiBPdGhlcndpc2Ugd2UgbmVlZCBhIHNjYW4gaWYgdGhlIG5ldyBlbnRyeSBpcyBiaWcgZW5vdWdoLgogCQkgKi8KLQkJZWxzZQotCQkJbmVlZHNjYW4gPSBJTlRfR0VUKHByZXZkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKSA+IElOVF9HRVQoZC0+aGRyLmJlc3RmcmVlWzJdLmxlbmd0aCwgQVJDSF9DT05WRVJUKTsKKwkJZWxzZSB7CisJCQluZWVkc2NhbiA9IGJlMTZfdG9fY3B1KHByZXZkdXAtPmxlbmd0aCkgPgorCQkJCSAgIGJlMTZfdG9fY3B1KGQtPmhkci5iZXN0ZnJlZVsyXS5sZW5ndGgpOworCQl9CiAJfQogCS8qCiAJICogVGhlIGZvbGxvd2luZyBlbnRyeSBpcyBmcmVlLCBtZXJnZSB3aXRoIGl0LgpAQCAtNjQ5LDEwICs2NTMsMTAgQEAKIAllbHNlIGlmIChwb3N0ZHVwKSB7CiAJCWRmcCA9IHhmc19kaXIyX2RhdGFfZnJlZWZpbmQoZCwgcG9zdGR1cCk7CiAJCW5ld2R1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopKChjaGFyICopZCArIG9mZnNldCk7Ci0JCUlOVF9TRVQobmV3ZHVwLT5mcmVldGFnLCBBUkNIX0NPTlZFUlQsIFhGU19ESVIyX0RBVEFfRlJFRV9UQUcpOwotCQlJTlRfU0VUKG5ld2R1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQsIGxlbiArIElOVF9HRVQocG9zdGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpKTsKLQkJSU5UX1NFVCgqWEZTX0RJUjJfREFUQV9VTlVTRURfVEFHX1AobmV3ZHVwKSwgQVJDSF9DT05WRVJULAotCQkJKHhmc19kaXIyX2RhdGFfb2ZmX3QpKChjaGFyICopbmV3ZHVwIC0gKGNoYXIgKilkKSk7CisJCW5ld2R1cC0+ZnJlZXRhZyA9IGNwdV90b19iZTE2KFhGU19ESVIyX0RBVEFfRlJFRV9UQUcpOworCQluZXdkdXAtPmxlbmd0aCA9IGNwdV90b19iZTE2KGxlbiArIGJlMTZfdG9fY3B1KHBvc3RkdXAtPmxlbmd0aCkpOworCQkqWEZTX0RJUjJfREFUQV9VTlVTRURfVEFHX1AobmV3ZHVwKSA9CisJCQljcHVfdG9fYmUxNigoY2hhciAqKW5ld2R1cCAtIChjaGFyICopZCk7CiAJCXhmc19kaXIyX2RhdGFfbG9nX3VudXNlZCh0cCwgYnAsIG5ld2R1cCk7CiAJCS8qCiAJCSAqIElmIHRoZSBmb2xsb3dpbmcgZW50cnkgd2FzIGluIHRoZSB0YWJsZSwgdGhlIG5ldyBlbnRyeQpAQCAtNjY2LDE4ICs2NzAsMjAgQEAKIAkJLyoKIAkJICogT3RoZXJ3aXNlIHdlIG5lZWQgYSBzY2FuIGlmIHRoZSBuZXcgZW50cnkgaXMgYmlnIGVub3VnaC4KIAkJICovCi0JCWVsc2UKLQkJCW5lZWRzY2FuID0gSU5UX0dFVChuZXdkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKSA+IElOVF9HRVQoZC0+aGRyLmJlc3RmcmVlWzJdLmxlbmd0aCwgQVJDSF9DT05WRVJUKTsKKwkJZWxzZSB7CisJCQluZWVkc2NhbiA9IGJlMTZfdG9fY3B1KG5ld2R1cC0+bGVuZ3RoKSA+CisJCQkJICAgYmUxNl90b19jcHUoZC0+aGRyLmJlc3RmcmVlWzJdLmxlbmd0aCk7CisJCX0KIAl9CiAJLyoKIAkgKiBOZWl0aGVyIG5laWdoYm9yIGlzIGZyZWUuICBNYWtlIGEgbmV3IGVudHJ5LgogCSAqLwogCWVsc2UgewogCQluZXdkdXAgPSAoeGZzX2RpcjJfZGF0YV91bnVzZWRfdCAqKSgoY2hhciAqKWQgKyBvZmZzZXQpOwotCQlJTlRfU0VUKG5ld2R1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKTsKLQkJSU5UX1NFVChuZXdkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJULCBsZW4pOwotCQlJTlRfU0VUKCpYRlNfRElSMl9EQVRBX1VOVVNFRF9UQUdfUChuZXdkdXApLCBBUkNIX0NPTlZFUlQsCi0JCQkoeGZzX2RpcjJfZGF0YV9vZmZfdCkoKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpKTsKKwkJbmV3ZHVwLT5mcmVldGFnID0gY3B1X3RvX2JlMTYoWEZTX0RJUjJfREFUQV9GUkVFX1RBRyk7CisJCW5ld2R1cC0+bGVuZ3RoID0gY3B1X3RvX2JlMTYobGVuKTsKKwkJKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKG5ld2R1cCkgPQorCQkJY3B1X3RvX2JlMTYoKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpOwogCQl4ZnNfZGlyMl9kYXRhX2xvZ191bnVzZWQodHAsIGJwLCBuZXdkdXApOwogCQkodm9pZCl4ZnNfZGlyMl9kYXRhX2ZyZWVpbnNlcnQoZCwgbmV3ZHVwLCBuZWVkbG9ncCk7CiAJfQpAQCAtNzA3LDE4ICs3MTMsMTggQEAKIAlpbnQJCQlvbGRsZW47CQkvKiBvbGQgdW51c2VkIGVudHJ5J3MgbGVuZ3RoICovCiAKIAlkID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQoZC0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfTUFHSUMgfHwKLQkgICAgICAgSU5UX0dFVChkLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOwotCUFTU0VSVChJTlRfR0VUKGR1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKTsKKwlBU1NFUlQoYmUzMl90b19jcHUoZC0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDIHx8CisJICAgICAgIGJlMzJfdG9fY3B1KGQtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfQkxPQ0tfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShkdXAtPmZyZWV0YWcpID09IFhGU19ESVIyX0RBVEFfRlJFRV9UQUcpOwogCUFTU0VSVChvZmZzZXQgPj0gKGNoYXIgKilkdXAgLSAoY2hhciAqKWQpOwotCUFTU0VSVChvZmZzZXQgKyBsZW4gPD0gKGNoYXIgKilkdXAgKyBJTlRfR0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpIC0gKGNoYXIgKilkKTsKLQlBU1NFUlQoKGNoYXIgKilkdXAgLSAoY2hhciAqKWQgPT0gSU5UX0dFVCgqWEZTX0RJUjJfREFUQV9VTlVTRURfVEFHX1AoZHVwKSwgQVJDSF9DT05WRVJUKSk7CisJQVNTRVJUKG9mZnNldCArIGxlbiA8PSAoY2hhciAqKWR1cCArIGJlMTZfdG9fY3B1KGR1cC0+bGVuZ3RoKSAtIChjaGFyICopZCk7CisJQVNTRVJUKChjaGFyICopZHVwIC0gKGNoYXIgKilkID09IGJlMTZfdG9fY3B1KCpYRlNfRElSMl9EQVRBX1VOVVNFRF9UQUdfUChkdXApKSk7CiAJLyoKIAkgKiBMb29rIHVwIHRoZSBlbnRyeSBpbiB0aGUgYmVzdGZyZWUgdGFibGUuCiAJICovCiAJZGZwID0geGZzX2RpcjJfZGF0YV9mcmVlZmluZChkLCBkdXApOwotCW9sZGxlbiA9IElOVF9HRVQoZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCk7Ci0JQVNTRVJUKGRmcCB8fCBvbGRsZW4gPD0gSU5UX0dFVChkLT5oZHIuYmVzdGZyZWVbMl0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpKTsKKwlvbGRsZW4gPSBiZTE2X3RvX2NwdShkdXAtPmxlbmd0aCk7CisJQVNTRVJUKGRmcCB8fCBvbGRsZW4gPD0gYmUxNl90b19jcHUoZC0+aGRyLmJlc3RmcmVlWzJdLmxlbmd0aCkpOwogCS8qCiAJICogQ2hlY2sgZm9yIGFsaWdubWVudCB3aXRoIGZyb250IGFuZCBiYWNrIG9mIHRoZSBlbnRyeS4KIAkgKi8KQEAgLTczMiw3ICs3MzgsNyBAQAogCSAqLwogCWlmIChtYXRjaGZyb250ICYmIG1hdGNoYmFjaykgewogCQlpZiAoZGZwKSB7Ci0JCQluZWVkc2NhbiA9IGQtPmhkci5iZXN0ZnJlZVsyXS5vZmZzZXQ7CisJCQluZWVkc2NhbiA9IChkLT5oZHIuYmVzdGZyZWVbMl0ub2Zmc2V0ICE9IDApOwogCQkJaWYgKCFuZWVkc2NhbikKIAkJCQl4ZnNfZGlyMl9kYXRhX2ZyZWVyZW1vdmUoZCwgZGZwLCBuZWVkbG9ncCk7CiAJCX0KQEAgLTc0MywxMCArNzQ5LDEwIEBACiAJICovCiAJZWxzZSBpZiAobWF0Y2hmcm9udCkgewogCQluZXdkdXAgPSAoeGZzX2RpcjJfZGF0YV91bnVzZWRfdCAqKSgoY2hhciAqKWQgKyBvZmZzZXQgKyBsZW4pOwotCQlJTlRfU0VUKG5ld2R1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKTsKLQkJSU5UX1NFVChuZXdkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJULCBvbGRsZW4gLSBsZW4pOwotCQlJTlRfU0VUKCpYRlNfRElSMl9EQVRBX1VOVVNFRF9UQUdfUChuZXdkdXApLCBBUkNIX0NPTlZFUlQsCi0JCQkoeGZzX2RpcjJfZGF0YV9vZmZfdCkoKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpKTsKKwkJbmV3ZHVwLT5mcmVldGFnID0gY3B1X3RvX2JlMTYoWEZTX0RJUjJfREFUQV9GUkVFX1RBRyk7CisJCW5ld2R1cC0+bGVuZ3RoID0gY3B1X3RvX2JlMTYob2xkbGVuIC0gbGVuKTsKKwkJKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKG5ld2R1cCkgPQorCQkJY3B1X3RvX2JlMTYoKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpOwogCQl4ZnNfZGlyMl9kYXRhX2xvZ191bnVzZWQodHAsIGJwLCBuZXdkdXApOwogCQkvKgogCQkgKiBJZiBpdCB3YXMgaW4gdGhlIHRhYmxlLCByZW1vdmUgaXQgYW5kIGFkZCB0aGUgbmV3IG9uZS4KQEAgLTc1NSw4ICs3NjEsOCBAQAogCQkJeGZzX2RpcjJfZGF0YV9mcmVlcmVtb3ZlKGQsIGRmcCwgbmVlZGxvZ3ApOwogCQkJZGZwID0geGZzX2RpcjJfZGF0YV9mcmVlaW5zZXJ0KGQsIG5ld2R1cCwgbmVlZGxvZ3ApOwogCQkJQVNTRVJUKGRmcCAhPSBOVUxMKTsKLQkJCUFTU0VSVChJTlRfR0VUKGRmcC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpID09IElOVF9HRVQobmV3ZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkpOwotCQkJQVNTRVJUKElOVF9HRVQoZGZwLT5vZmZzZXQsIEFSQ0hfQ09OVkVSVCkgPT0gKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpOworCQkJQVNTRVJUKGRmcC0+bGVuZ3RoID09IG5ld2R1cC0+bGVuZ3RoKTsKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShkZnAtPm9mZnNldCkgPT0gKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpOwogCQkJLyoKIAkJCSAqIElmIHdlIGdvdCBpbnNlcnRlZCBhdCB0aGUgbGFzdCBzbG90LAogCQkJICogdGhhdCBtZWFucyB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIHdhcyBhIGJldHRlcgpAQCAtNzcxLDEwICs3NzcsOSBAQAogCSAqLwogCWVsc2UgaWYgKG1hdGNoYmFjaykgewogCQluZXdkdXAgPSBkdXA7Ci0JCUlOVF9TRVQobmV3ZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCwgKHhmc19kaXIyX2RhdGFfb2ZmX3QpCi0JCQkoKChjaGFyICopZCArIG9mZnNldCkgLSAoY2hhciAqKW5ld2R1cCkpOwotCQlJTlRfU0VUKCpYRlNfRElSMl9EQVRBX1VOVVNFRF9UQUdfUChuZXdkdXApLCBBUkNIX0NPTlZFUlQsCi0JCQkoeGZzX2RpcjJfZGF0YV9vZmZfdCkoKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpKTsKKwkJbmV3ZHVwLT5sZW5ndGggPSBjcHVfdG9fYmUxNigoKGNoYXIgKilkICsgb2Zmc2V0KSAtIChjaGFyICopbmV3ZHVwKTsKKwkJKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKG5ld2R1cCkgPQorCQkJY3B1X3RvX2JlMTYoKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpOwogCQl4ZnNfZGlyMl9kYXRhX2xvZ191bnVzZWQodHAsIGJwLCBuZXdkdXApOwogCQkvKgogCQkgKiBJZiBpdCB3YXMgaW4gdGhlIHRhYmxlLCByZW1vdmUgaXQgYW5kIGFkZCB0aGUgbmV3IG9uZS4KQEAgLTc4Myw4ICs3ODgsOCBAQAogCQkJeGZzX2RpcjJfZGF0YV9mcmVlcmVtb3ZlKGQsIGRmcCwgbmVlZGxvZ3ApOwogCQkJZGZwID0geGZzX2RpcjJfZGF0YV9mcmVlaW5zZXJ0KGQsIG5ld2R1cCwgbmVlZGxvZ3ApOwogCQkJQVNTRVJUKGRmcCAhPSBOVUxMKTsKLQkJCUFTU0VSVChJTlRfR0VUKGRmcC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpID09IElOVF9HRVQobmV3ZHVwLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkpOwotCQkJQVNTRVJUKElOVF9HRVQoZGZwLT5vZmZzZXQsIEFSQ0hfQ09OVkVSVCkgPT0gKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpOworCQkJQVNTRVJUKGRmcC0+bGVuZ3RoID09IG5ld2R1cC0+bGVuZ3RoKTsKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShkZnAtPm9mZnNldCkgPT0gKGNoYXIgKiluZXdkdXAgLSAoY2hhciAqKWQpOwogCQkJLyoKIAkJCSAqIElmIHdlIGdvdCBpbnNlcnRlZCBhdCB0aGUgbGFzdCBzbG90LAogCQkJICogdGhhdCBtZWFucyB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIHdhcyBhIGJldHRlcgpAQCAtNzk5LDE2ICs4MDQsMTUgQEAKIAkgKi8KIAllbHNlIHsKIAkJbmV3ZHVwID0gZHVwOwotCQlJTlRfU0VUKG5ld2R1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQsICh4ZnNfZGlyMl9kYXRhX29mZl90KQotCQkJKCgoY2hhciAqKWQgKyBvZmZzZXQpIC0gKGNoYXIgKiluZXdkdXApKTsKLQkJSU5UX1NFVCgqWEZTX0RJUjJfREFUQV9VTlVTRURfVEFHX1AobmV3ZHVwKSwgQVJDSF9DT05WRVJULAotCQkJKHhmc19kaXIyX2RhdGFfb2ZmX3QpKChjaGFyICopbmV3ZHVwIC0gKGNoYXIgKilkKSk7CisJCW5ld2R1cC0+bGVuZ3RoID0gY3B1X3RvX2JlMTYoKChjaGFyICopZCArIG9mZnNldCkgLSAoY2hhciAqKW5ld2R1cCk7CisJCSpYRlNfRElSMl9EQVRBX1VOVVNFRF9UQUdfUChuZXdkdXApID0KKwkJCWNwdV90b19iZTE2KChjaGFyICopbmV3ZHVwIC0gKGNoYXIgKilkKTsKIAkJeGZzX2RpcjJfZGF0YV9sb2dfdW51c2VkKHRwLCBicCwgbmV3ZHVwKTsKIAkJbmV3ZHVwMiA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopKChjaGFyICopZCArIG9mZnNldCArIGxlbik7Ci0JCUlOVF9TRVQobmV3ZHVwMi0+ZnJlZXRhZywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKTsKLQkJSU5UX1NFVChuZXdkdXAyLT5sZW5ndGgsIEFSQ0hfQ09OVkVSVCwgb2xkbGVuIC0gbGVuIC0gSU5UX0dFVChuZXdkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKSk7Ci0JCUlOVF9TRVQoKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKG5ld2R1cDIpLCBBUkNIX0NPTlZFUlQsCi0JCQkoeGZzX2RpcjJfZGF0YV9vZmZfdCkoKGNoYXIgKiluZXdkdXAyIC0gKGNoYXIgKilkKSk7CisJCW5ld2R1cDItPmZyZWV0YWcgPSBjcHVfdG9fYmUxNihYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKTsKKwkJbmV3ZHVwMi0+bGVuZ3RoID0gY3B1X3RvX2JlMTYob2xkbGVuIC0gbGVuIC0gYmUxNl90b19jcHUobmV3ZHVwLT5sZW5ndGgpKTsKKwkJKlhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKG5ld2R1cDIpID0KKwkJCWNwdV90b19iZTE2KChjaGFyICopbmV3ZHVwMiAtIChjaGFyICopZCk7CiAJCXhmc19kaXIyX2RhdGFfbG9nX3VudXNlZCh0cCwgYnAsIG5ld2R1cDIpOwogCQkvKgogCQkgKiBJZiB0aGUgb2xkIGVudHJ5IHdhcyBpbiB0aGUgdGFibGUsIHdlIG5lZWQgdG8gc2NhbgpAQCAtODE5LDcgKzgyMyw3IEBACiAJCSAqIHRoZSAyIG5ldyB3aWxsIHdvcmsuCiAJCSAqLwogCQlpZiAoZGZwKSB7Ci0JCQluZWVkc2NhbiA9IGQtPmhkci5iZXN0ZnJlZVsyXS5sZW5ndGg7CisJCQluZWVkc2NhbiA9IChkLT5oZHIuYmVzdGZyZWVbMl0ubGVuZ3RoICE9IDApOwogCQkJaWYgKCFuZWVkc2NhbikgewogCQkJCXhmc19kaXIyX2RhdGFfZnJlZXJlbW92ZShkLCBkZnAsIG5lZWRsb2dwKTsKIAkJCQkodm9pZCl4ZnNfZGlyMl9kYXRhX2ZyZWVpbnNlcnQoZCwgbmV3ZHVwLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2RhdGEuaCBiL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmgKaW5kZXggNWUzYTdmOS4uMDg0N2NiYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2RhdGEuaAorKysgYi9mcy94ZnMveGZzX2RpcjJfZGF0YS5oCkBAIC02NSw4ICs2NSw4IEBACiAgKiBUaGUgZnJlZXNwYWNlIHdpbGwgYmUgZm9ybWF0dGVkIGFzIGEgeGZzX2RpcjJfZGF0YV91bnVzZWRfdC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2RpcjJfZGF0YV9mcmVlIHsKLQl4ZnNfZGlyMl9kYXRhX29mZl90CW9mZnNldDsJCS8qIHN0YXJ0IG9mIGZyZWVzcGFjZSAqLwotCXhmc19kaXIyX2RhdGFfb2ZmX3QJbGVuZ3RoOwkJLyogbGVuZ3RoIG9mIGZyZWVzcGFjZSAqLworCV9fYmUxNgkJCW9mZnNldDsJCS8qIHN0YXJ0IG9mIGZyZWVzcGFjZSAqLworCV9fYmUxNgkJCWxlbmd0aDsJCS8qIGxlbmd0aCBvZiBmcmVlc3BhY2UgKi8KIH0geGZzX2RpcjJfZGF0YV9mcmVlX3Q7CiAKIC8qCkBAIC03NSw3ICs3NSw3IEBACiAgKiBUaGUgY29kZSBrbm93cyB0aGF0IFhGU19ESVIyX0RBVEFfRkRfQ09VTlQgaXMgMy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2RpcjJfZGF0YV9oZHIgewotCV9fdWludDMyX3QJCW1hZ2ljOwkJLyogWEZTX0RJUjJfREFUQV9NQUdJQyAqLworCV9fYmUzMgkJCW1hZ2ljOwkJLyogWEZTX0RJUjJfREFUQV9NQUdJQyAqLwogCQkJCQkJLyogb3IgWEZTX0RJUjJfQkxPQ0tfTUFHSUMgKi8KIAl4ZnNfZGlyMl9kYXRhX2ZyZWVfdAliZXN0ZnJlZVtYRlNfRElSMl9EQVRBX0ZEX0NPVU5UXTsKIH0geGZzX2RpcjJfZGF0YV9oZHJfdDsKQEAgLTk3LDEwICs5NywxMCBAQAogICogVGFnIGFwcGVhcnMgYXMgdGhlIGxhc3QgMiBieXRlcy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2RpcjJfZGF0YV91bnVzZWQgewotCV9fdWludDE2X3QJCWZyZWV0YWc7CS8qIFhGU19ESVIyX0RBVEFfRlJFRV9UQUcgKi8KLQl4ZnNfZGlyMl9kYXRhX29mZl90CWxlbmd0aDsJCS8qIHRvdGFsIGZyZWUgbGVuZ3RoICovCisJX19iZTE2CQkJZnJlZXRhZzsJLyogWEZTX0RJUjJfREFUQV9GUkVFX1RBRyAqLworCV9fYmUxNgkJCWxlbmd0aDsJCS8qIHRvdGFsIGZyZWUgbGVuZ3RoICovCiAJCQkJCQkvKiB2YXJpYWJsZSBvZmZzZXQgKi8KLQl4ZnNfZGlyMl9kYXRhX29mZl90CXRhZzsJCS8qIHN0YXJ0aW5nIG9mZnNldCBvZiB1cyAqLworCV9fYmUxNgkJCXRhZzsJCS8qIHN0YXJ0aW5nIG9mZnNldCBvZiB1cyAqLwogfSB4ZnNfZGlyMl9kYXRhX3VudXNlZF90OwogCiB0eXBlZGVmIHVuaW9uIHsKQEAgLTEzNCwxMiArMTM0LDExIEBACiAgKiBQb2ludGVyIHRvIGFuIGVudHJ5J3MgdGFnIHdvcmQuCiAgKi8KICNkZWZpbmUJWEZTX0RJUjJfREFUQV9FTlRSWV9UQUdfUChkZXApCXhmc19kaXIyX2RhdGFfZW50cnlfdGFnX3AoZGVwKQotc3RhdGljIGlubGluZSB4ZnNfZGlyMl9kYXRhX29mZl90ICoKK3N0YXRpYyBpbmxpbmUgX19iZTE2ICoKIHhmc19kaXIyX2RhdGFfZW50cnlfdGFnX3AoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICpkZXApCiB7Ci0JcmV0dXJuICh4ZnNfZGlyMl9kYXRhX29mZl90ICopIFwKLQkJICgoY2hhciAqKShkZXApICsgWEZTX0RJUjJfREFUQV9FTlRTSVpFKChkZXApLT5uYW1lbGVuKSAtIFwKLQkJICAodWludClzaXplb2YoeGZzX2RpcjJfZGF0YV9vZmZfdCkpOworCXJldHVybiAoX19iZTE2ICopKChjaGFyICopZGVwICsKKwkJWEZTX0RJUjJfREFUQV9FTlRTSVpFKGRlcC0+bmFtZWxlbikgLSBzaXplb2YoX19iZTE2KSk7CiB9CiAKIC8qCkBAIC0xNDcsMTIgKzE0NiwxMSBAQAogICovCiAjZGVmaW5lCVhGU19ESVIyX0RBVEFfVU5VU0VEX1RBR19QKGR1cCkgXAogCXhmc19kaXIyX2RhdGFfdW51c2VkX3RhZ19wKGR1cCkKLXN0YXRpYyBpbmxpbmUgeGZzX2RpcjJfZGF0YV9vZmZfdCAqCitzdGF0aWMgaW5saW5lIF9fYmUxNiAqCiB4ZnNfZGlyMl9kYXRhX3VudXNlZF90YWdfcCh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICpkdXApCiB7Ci0JcmV0dXJuICh4ZnNfZGlyMl9kYXRhX29mZl90ICopIFwKLQkJICgoY2hhciAqKShkdXApICsgSU5UX0dFVCgoZHVwKS0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpIFwKLQkJCQktICh1aW50KXNpemVvZih4ZnNfZGlyMl9kYXRhX29mZl90KSk7CisJcmV0dXJuIChfX2JlMTYgKikoKGNoYXIgKilkdXAgKworCQkJYmUxNl90b19jcHUoZHVwLT5sZW5ndGgpIC0gc2l6ZW9mKF9fYmUxNikpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKaW5kZXggZDM0MmI2Yi4uMDg2NDhiMTggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwpAQCAtNjYsNyArNjYsNyBAQAogCXhmc19kYV9hcmdzX3QJCSphcmdzLAkJLyogb3BlcmF0aW9uIGFyZ3VtZW50cyAqLwogCXhmc19kYWJ1Zl90CQkqZGJwKQkJLyogaW5wdXQgYmxvY2sncyBidWZmZXIgKi8KIHsKLQl4ZnNfZGlyMl9kYXRhX29mZl90CSpiZXN0c3A7CS8qIGxlYWYncyBiZXN0c3AgZW50cmllcyAqLworCV9fYmUxNgkJCSpiZXN0c3A7CS8qIGxlYWYncyBiZXN0c3AgZW50cmllcyAqLwogCXhmc19kYWJsa190CQlibGtubzsJCS8qIGxlYWYgYmxvY2sncyBibm8gKi8KIAl4ZnNfZGlyMl9ibG9ja190CSpibG9jazsJCS8qIGJsb2NrIHN0cnVjdHVyZSAqLwogCXhmc19kaXIyX2xlYWZfZW50cnlfdAkqYmxwOwkJLyogYmxvY2sncyBsZWFmIGVudHJpZXMgKi8KQEAgLTExMSwxNCArMTExLDE0IEBACiAJLyoKIAkgKiBTZXQgdGhlIGNvdW50cyBpbiB0aGUgbGVhZiBoZWFkZXIuCiAJICovCi0JSU5UX0NPUFkobGVhZi0+aGRyLmNvdW50LCBidHAtPmNvdW50LCBBUkNIX0NPTlZFUlQpOyAvKiBJTlRfOiB0eXBlIGNoYW5nZSAqLwotCUlOVF9DT1BZKGxlYWYtPmhkci5zdGFsZSwgYnRwLT5zdGFsZSwgQVJDSF9DT05WRVJUKTsgLyogSU5UXzogdHlwZSBjaGFuZ2UgKi8KKwlsZWFmLT5oZHIuY291bnQgPSBjcHVfdG9fYmUxNihiZTMyX3RvX2NwdShidHAtPmNvdW50KSk7CisJbGVhZi0+aGRyLnN0YWxlID0gY3B1X3RvX2JlMTYoYmUzMl90b19jcHUoYnRwLT5zdGFsZSkpOwogCS8qCiAJICogQ291bGQgY29tcGFjdCB0aGVzZSBidXQgSSB0aGluayB3ZSBhbHdheXMgZG8gdGhlIGNvbnZlcnNpb24KIAkgKiBhZnRlciBzcXVlZXppbmcgb3V0IHN0YWxlIGVudHJpZXMuCiAJICovCi0JbWVtY3B5KGxlYWYtPmVudHMsIGJscCwgSU5UX0dFVChidHAtPmNvdW50LCBBUkNIX0NPTlZFUlQpICogc2l6ZW9mKHhmc19kaXIyX2xlYWZfZW50cnlfdCkpOwotCXhmc19kaXIyX2xlYWZfbG9nX2VudHModHAsIGxicCwgMCwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxKTsKKwltZW1jcHkobGVhZi0+ZW50cywgYmxwLCBiZTMyX3RvX2NwdShidHAtPmNvdW50KSAqIHNpemVvZih4ZnNfZGlyMl9sZWFmX2VudHJ5X3QpKTsKKwl4ZnNfZGlyMl9sZWFmX2xvZ19lbnRzKHRwLCBsYnAsIDAsIGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgLSAxKTsKIAluZWVkc2NhbiA9IDA7CiAJbmVlZGxvZyA9IDE7CiAJLyoKQEAgLTEzMyw3ICsxMzMsNyBAQAogCS8qCiAJICogRml4IHVwIHRoZSBibG9jayBoZWFkZXIsIG1ha2UgaXQgYSBkYXRhIGJsb2NrLgogCSAqLwotCUlOVF9TRVQoYmxvY2stPmhkci5tYWdpYywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9EQVRBX01BR0lDKTsKKwlibG9jay0+aGRyLm1hZ2ljID0gY3B1X3RvX2JlMzIoWEZTX0RJUjJfREFUQV9NQUdJQyk7CiAJaWYgKG5lZWRzY2FuKQogCQl4ZnNfZGlyMl9kYXRhX2ZyZWVzY2FuKG1wLCAoeGZzX2RpcjJfZGF0YV90ICopYmxvY2ssICZuZWVkbG9nLAogCQkJTlVMTCk7CkBAIC0xNDEsOSArMTQxLDkgQEAKIAkgKiBTZXQgdXAgbGVhZiB0YWlsIGFuZCBiZXN0cyB0YWJsZS4KIAkgKi8KIAlsdHAgPSBYRlNfRElSMl9MRUFGX1RBSUxfUChtcCwgbGVhZik7Ci0JSU5UX1NFVChsdHAtPmJlc3Rjb3VudCwgQVJDSF9DT05WRVJULCAxKTsKKwlsdHAtPmJlc3Rjb3VudCA9IGNwdV90b19iZTMyKDEpOwogCWJlc3RzcCA9IFhGU19ESVIyX0xFQUZfQkVTVFNfUChsdHApOwotCUlOVF9DT1BZKGJlc3RzcFswXSwgYmxvY2stPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCk7CisJYmVzdHNwWzBdID0gIGJsb2NrLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoOwogCS8qCiAJICogTG9nIHRoZSBkYXRhIGhlYWRlciBhbmQgbGVhZiBiZXN0cyB0YWJsZS4KIAkgKi8KQEAgLTE2Myw3ICsxNjMsNyBAQAogeGZzX2RpcjJfbGVhZl9hZGRuYW1lKAogCXhmc19kYV9hcmdzX3QJCSphcmdzKQkJLyogb3BlcmF0aW9uIGFyZ3VtZW50cyAqLwogewotCXhmc19kaXIyX2RhdGFfb2ZmX3QJKmJlc3RzcDsJLyogZnJlZXNwYWNlIHRhYmxlIGluIGxlYWYgKi8KKwlfX2JlMTYJCQkqYmVzdHNwOwkvKiBmcmVlc3BhY2UgdGFibGUgaW4gbGVhZiAqLwogCWludAkJCWNvbXBhY3Q7CS8qIG5lZWQgdG8gY29tcGFjdCBsZWF2ZXMgKi8KIAl4ZnNfZGlyMl9kYXRhX3QJCSpkYXRhOwkJLyogZGF0YSBibG9jayBzdHJ1Y3R1cmUgKi8KIAl4ZnNfZGFidWZfdAkJKmRicDsJCS8qIGRhdGEgYmxvY2sgYnVmZmVyICovCkBAIC0xODcsNyArMTg3LDcgQEAKIAlpbnQJCQluZWVkYnl0ZXM7CS8qIGxlYWYgYmxvY2sgYnl0ZXMgbmVlZGVkICovCiAJaW50CQkJbmVlZGxvZzsJLyogbmVlZCB0byBsb2cgZGF0YSBoZWFkZXIgKi8KIAlpbnQJCQluZWVkc2NhbjsJLyogbmVlZCB0byByZXNjYW4gZGF0YSBmcmVlICovCi0JeGZzX2RpcjJfZGF0YV9vZmZfdAkqdGFncDsJCS8qIGVuZCBvZiBkYXRhIGVudHJ5ICovCisJX19iZTE2CQkJKnRhZ3A7CQkvKiBlbmQgb2YgZGF0YSBlbnRyeSAqLwogCXhmc190cmFuc190CQkqdHA7CQkvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCiAJeGZzX2RpcjJfZGJfdAkJdXNlX2Jsb2NrOwkvKiBkYXRhIGJsb2NrIG51bWJlciAqLwogCkBAIC0yMjIsMTQgKzIyMiwxNCBAQAogCSAqIGluIGEgZGF0YSBibG9jaywgaW1wcm92aW5nIHRoZSBsb29rdXAgb2YgdGhvc2UgZW50cmllcy4KIAkgKi8KIAlmb3IgKHVzZV9ibG9jayA9IC0xLCBsZXAgPSAmbGVhZi0+ZW50c1tpbmRleF07Ci0JICAgICBpbmRleCA8IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICYmIElOVF9HRVQobGVwLT5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID09IGFyZ3MtPmhhc2h2YWw7CisJICAgICBpbmRleCA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgJiYgYmUzMl90b19jcHUobGVwLT5oYXNodmFsKSA9PSBhcmdzLT5oYXNodmFsOwogCSAgICAgaW5kZXgrKywgbGVwKyspIHsKLQkJaWYgKElOVF9HRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKKwkJaWYgKGJlMzJfdG9fY3B1KGxlcC0+YWRkcmVzcykgPT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSKQogCQkJY29udGludWU7Ci0JCWkgPSBYRlNfRElSMl9EQVRBUFRSX1RPX0RCKG1wLCBJTlRfR0VUKGxlcC0+YWRkcmVzcywgQVJDSF9DT05WRVJUKSk7Ci0JCUFTU0VSVChpIDwgSU5UX0dFVChsdHAtPmJlc3Rjb3VudCwgQVJDSF9DT05WRVJUKSk7Ci0JCUFTU0VSVChJTlRfR0VUKGJlc3RzcFtpXSwgQVJDSF9DT05WRVJUKSAhPSBOVUxMREFUQU9GRik7Ci0JCWlmIChJTlRfR0VUKGJlc3RzcFtpXSwgQVJDSF9DT05WRVJUKSA+PSBsZW5ndGgpIHsKKwkJaSA9IFhGU19ESVIyX0RBVEFQVFJfVE9fREIobXAsIGJlMzJfdG9fY3B1KGxlcC0+YWRkcmVzcykpOworCQlBU1NFUlQoaSA8IGJlMzJfdG9fY3B1KGx0cC0+YmVzdGNvdW50KSk7CisJCUFTU0VSVChiZTE2X3RvX2NwdShiZXN0c3BbaV0pICE9IE5VTExEQVRBT0ZGKTsKKwkJaWYgKGJlMTZfdG9fY3B1KGJlc3RzcFtpXSkgPj0gbGVuZ3RoKSB7CiAJCQl1c2VfYmxvY2sgPSBpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTIzOCwxMyArMjM4LDEzIEBACiAJICogRGlkbid0IGZpbmQgYSBibG9jayB5ZXQsIGxpbmVhciBzZWFyY2ggYWxsIHRoZSBkYXRhIGJsb2Nrcy4KIAkgKi8KIAlpZiAodXNlX2Jsb2NrID09IC0xKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBJTlRfR0VUKGx0cC0+YmVzdGNvdW50LCBBUkNIX0NPTlZFUlQpOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGJlMzJfdG9fY3B1KGx0cC0+YmVzdGNvdW50KTsgaSsrKSB7CiAJCQkvKgogCQkJICogUmVtZW1iZXIgYSBibG9jayB3ZSBzZWUgdGhhdCdzIG1pc3NpbmcuCiAJCQkgKi8KLQkJCWlmIChJTlRfR0VUKGJlc3RzcFtpXSwgQVJDSF9DT05WRVJUKSA9PSBOVUxMREFUQU9GRiAmJiB1c2VfYmxvY2sgPT0gLTEpCisJCQlpZiAoYmUxNl90b19jcHUoYmVzdHNwW2ldKSA9PSBOVUxMREFUQU9GRiAmJiB1c2VfYmxvY2sgPT0gLTEpCiAJCQkJdXNlX2Jsb2NrID0gaTsKLQkJCWVsc2UgaWYgKElOVF9HRVQoYmVzdHNwW2ldLCBBUkNIX0NPTlZFUlQpID49IGxlbmd0aCkgeworCQkJZWxzZSBpZiAoYmUxNl90b19jcHUoYmVzdHNwW2ldKSA+PSBsZW5ndGgpIHsKIAkJCQl1c2VfYmxvY2sgPSBpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjYwLDIxICsyNjAsMjEgQEAKIAkgKiBOb3cga2lsbCB1c2VfYmxvY2sgaWYgaXQgcmVmZXJzIHRvIGEgbWlzc2luZyBibG9jaywgc28gd2UKIAkgKiBjYW4gdXNlIGl0IGFzIGFuIGluZGljYXRpb24gb2YgYWxsb2NhdGlvbiBuZWVkZWQuCiAJICovCi0JaWYgKHVzZV9ibG9jayAhPSAtMSAmJiBJTlRfR0VUKGJlc3RzcFt1c2VfYmxvY2tdLCBBUkNIX0NPTlZFUlQpID09IE5VTExEQVRBT0ZGKQorCWlmICh1c2VfYmxvY2sgIT0gLTEgJiYgYmUxNl90b19jcHUoYmVzdHNwW3VzZV9ibG9ja10pID09IE5VTExEQVRBT0ZGKQogCQl1c2VfYmxvY2sgPSAtMTsKIAkvKgogCSAqIElmIHdlIGRvbid0IGhhdmUgZW5vdWdoIGZyZWUgYnl0ZXMgYnV0IHdlIGNhbiBtYWtlIGVub3VnaAogCSAqIGJ5IGNvbXBhY3Rpbmcgb3V0IHN0YWxlIGVudHJpZXMsIHdlJ2xsIGRvIHRoYXQuCiAJICovCi0JaWYgKChjaGFyICopYmVzdHNwIC0gKGNoYXIgKikmbGVhZi0+ZW50c1tJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKV0gPCBuZWVkYnl0ZXMgJiYKLQkgICAgSU5UX0dFVChsZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCkgPiAxKSB7CisJaWYgKChjaGFyICopYmVzdHNwIC0gKGNoYXIgKikmbGVhZi0+ZW50c1tiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpXSA8IG5lZWRieXRlcyAmJgorCSAgICBiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpID4gMSkgewogCQljb21wYWN0ID0gMTsKIAl9CiAJLyoKIAkgKiBPdGhlcndpc2UgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZnJlZSBieXRlcyB3ZSBuZWVkIHRvCiAJICogY29udmVydCB0byBub2RlIGZvcm0uCiAJICovCi0JZWxzZSBpZiAoKGNoYXIgKiliZXN0c3AgLSAoY2hhciAqKSZsZWFmLT5lbnRzW0lOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpXSA8CisJZWxzZSBpZiAoKGNoYXIgKiliZXN0c3AgLSAoY2hhciAqKSZsZWFmLT5lbnRzW2JlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCldIDwKIAkJIG5lZWRieXRlcykgewogCQkvKgogCQkgKiBKdXN0IGNoZWNraW5nIG9yIG5vIHNwYWNlIHJlc2VydmF0aW9uLCBnaXZlIHVwLgpAQCAtMzMwLDggKzMzMCw4IEBACiAJICogVGhlcmUgYXJlIHN0YWxlIGVudHJpZXMsIHNvIHdlJ2xsIG5lZWQgbG9nLWxvdyBhbmQgbG9nLWhpZ2gKIAkgKiBpbXBvc3NpYmx5IGJhZCB2YWx1ZXMgbGF0ZXIuCiAJICovCi0JZWxzZSBpZiAoSU5UX0dFVChsZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCkpIHsKLQkJbGZsb2dsb3cgPSBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKKwllbHNlIGlmIChiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpKSB7CisJCWxmbG9nbG93ID0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsKIAkJbGZsb2doaWdoID0gLTE7CiAJfQogCS8qCkBAIC0zNTgsMTMgKzM1OCwxMyBAQAogCQkgKiBJZiB3ZSdyZSBhZGRpbmcgYSBuZXcgZGF0YSBibG9jayBvbiB0aGUgZW5kIHdlIG5lZWQgdG8KIAkJICogZXh0ZW5kIHRoZSBiZXN0cyB0YWJsZS4gIENvcHkgaXQgdXAgb25lIGVudHJ5LgogCQkgKi8KLQkJaWYgKHVzZV9ibG9jayA+PSBJTlRfR0VUKGx0cC0+YmVzdGNvdW50LCBBUkNIX0NPTlZFUlQpKSB7CisJCWlmICh1c2VfYmxvY2sgPj0gYmUzMl90b19jcHUobHRwLT5iZXN0Y291bnQpKSB7CiAJCQliZXN0c3AtLTsKIAkJCW1lbW1vdmUoJmJlc3RzcFswXSwgJmJlc3RzcFsxXSwKLQkJCQlJTlRfR0VUKGx0cC0+YmVzdGNvdW50LCBBUkNIX0NPTlZFUlQpICogc2l6ZW9mKGJlc3RzcFswXSkpOwotCQkJSU5UX01PRChsdHAtPmJlc3Rjb3VudCwgQVJDSF9DT05WRVJULCArMSk7CisJCQkJYmUzMl90b19jcHUobHRwLT5iZXN0Y291bnQpICogc2l6ZW9mKGJlc3RzcFswXSkpOworCQkJYmUzMl9hZGQoJmx0cC0+YmVzdGNvdW50LCAxKTsKIAkJCXhmc19kaXIyX2xlYWZfbG9nX3RhaWwodHAsIGxicCk7Ci0JCQl4ZnNfZGlyMl9sZWFmX2xvZ19iZXN0cyh0cCwgbGJwLCAwLCBJTlRfR0VUKGx0cC0+YmVzdGNvdW50LCBBUkNIX0NPTlZFUlQpIC0gMSk7CisJCQl4ZnNfZGlyMl9sZWFmX2xvZ19iZXN0cyh0cCwgbGJwLCAwLCBiZTMyX3RvX2NwdShsdHAtPmJlc3Rjb3VudCkgLSAxKTsKIAkJfQogCQkvKgogCQkgKiBJZiB3ZSdyZSBmaWxsaW5nIGluIGEgcHJldmlvdXNseSBlbXB0eSBibG9jayBqdXN0IGxvZyBpdC4KQEAgLTM3Miw3ICszNzIsNyBAQAogCQllbHNlCiAJCQl4ZnNfZGlyMl9sZWFmX2xvZ19iZXN0cyh0cCwgbGJwLCB1c2VfYmxvY2ssIHVzZV9ibG9jayk7CiAJCWRhdGEgPSBkYnAtPmRhdGE7Ci0JCUlOVF9DT1BZKGJlc3RzcFt1c2VfYmxvY2tdLCBkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpOworCQliZXN0c3BbdXNlX2Jsb2NrXSA9IGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGg7CiAJCWdyb3duID0gMTsKIAl9CiAJLyoKQEAgLTM5NCw4ICszOTQsOCBAQAogCSAqIFBvaW50IHRvIHRoZSBiaWdnZXN0IGZyZWVzcGFjZSBpbiBvdXIgZGF0YSBibG9jay4KIAkgKi8KIAlkdXAgPSAoeGZzX2RpcjJfZGF0YV91bnVzZWRfdCAqKQotCSAgICAgICgoY2hhciAqKWRhdGEgKyBJTlRfR0VUKGRhdGEtPmhkci5iZXN0ZnJlZVswXS5vZmZzZXQsIEFSQ0hfQ09OVkVSVCkpOwotCUFTU0VSVChJTlRfR0VUKGR1cC0+bGVuZ3RoLCBBUkNIX0NPTlZFUlQpID49IGxlbmd0aCk7CisJICAgICAgKChjaGFyICopZGF0YSArIGJlMTZfdG9fY3B1KGRhdGEtPmhkci5iZXN0ZnJlZVswXS5vZmZzZXQpKTsKKwlBU1NFUlQoYmUxNl90b19jcHUoZHVwLT5sZW5ndGgpID49IGxlbmd0aCk7CiAJbmVlZHNjYW4gPSBuZWVkbG9nID0gMDsKIAkvKgogCSAqIE1hcmsgdGhlIGluaXRpYWwgcGFydCBvZiBvdXIgZnJlZXNwYWNlIGluIHVzZSBmb3IgdGhlIG5ldyBlbnRyeS4KQEAgLTQxMSw3ICs0MTEsNyBAQAogCWRlcC0+bmFtZWxlbiA9IGFyZ3MtPm5hbWVsZW47CiAJbWVtY3B5KGRlcC0+bmFtZSwgYXJncy0+bmFtZSwgZGVwLT5uYW1lbGVuKTsKIAl0YWdwID0gWEZTX0RJUjJfREFUQV9FTlRSWV9UQUdfUChkZXApOwotCUlOVF9TRVQoKnRhZ3AsIEFSQ0hfQ09OVkVSVCwgKHhmc19kaXIyX2RhdGFfb2ZmX3QpKChjaGFyICopZGVwIC0gKGNoYXIgKilkYXRhKSk7CisJKnRhZ3AgPSBjcHVfdG9fYmUxNigoY2hhciAqKWRlcCAtIChjaGFyICopZGF0YSk7CiAJLyoKIAkgKiBOZWVkIHRvIHNjYW4gZml4IHVwIHRoZSBiZXN0ZnJlZSB0YWJsZS4KIAkgKi8KQEAgLTQyNyw4ICs0MjcsOCBAQAogCSAqIElmIHRoZSBiZXN0cyB0YWJsZSBuZWVkcyB0byBiZSBjaGFuZ2VkLCBkbyBpdC4KIAkgKiBMb2cgdGhlIGNoYW5nZSB1bmxlc3Mgd2UndmUgYWxyZWFkeSBkb25lIHRoYXQuCiAJICovCi0JaWYgKElOVF9HRVQoYmVzdHNwW3VzZV9ibG9ja10sIEFSQ0hfQ09OVkVSVCkgIT0gSU5UX0dFVChkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpKSB7Ci0JCUlOVF9DT1BZKGJlc3RzcFt1c2VfYmxvY2tdLCBkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpOworCWlmIChiZTE2X3RvX2NwdShiZXN0c3BbdXNlX2Jsb2NrXSkgIT0gYmUxNl90b19jcHUoZGF0YS0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aCkpIHsKKwkJYmVzdHNwW3VzZV9ibG9ja10gPSBkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoOwogCQlpZiAoIWdyb3duKQogCQkJeGZzX2RpcjJfbGVhZl9sb2dfYmVzdHModHAsIGxicCwgdXNlX2Jsb2NrLCB1c2VfYmxvY2spOwogCX0KQEAgLTQ0MCwxNSArNDQwLDE1IEBACiAJCS8qCiAJCSAqIGxlcCBpcyBzdGlsbCBnb29kIGFzIHRoZSBpbmRleCBsZWFmIGVudHJ5LgogCQkgKi8KLQkJaWYgKGluZGV4IDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpCisJCWlmIChpbmRleCA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpCiAJCQltZW1tb3ZlKGxlcCArIDEsIGxlcCwKLQkJCQkoSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSBpbmRleCkgKiBzaXplb2YoKmxlcCkpOworCQkJCShiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpIC0gaW5kZXgpICogc2l6ZW9mKCpsZXApKTsKIAkJLyoKIAkJICogUmVjb3JkIGxvdyBhbmQgaGlnaCBsb2dnaW5nIGluZGljZXMgZm9yIHRoZSBsZWFmLgogCQkgKi8KIAkJbGZsb2dsb3cgPSBpbmRleDsKLQkJbGZsb2doaWdoID0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7Ci0JCUlOVF9NT0QobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQsICsxKTsKKwkJbGZsb2doaWdoID0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsKKwkJYmUxNl9hZGQoJmxlYWYtPmhkci5jb3VudCwgMSk7CiAJfQogCS8qCiAJICogVGhlcmUgYXJlIHN0YWxlIGVudHJpZXMuCkBAIC00NjgsNyArNDY4LDcgQEAKIAkJCSAqLwogCQkJZm9yIChsb3dzdGFsZSA9IGluZGV4IC0gMTsKIAkJCSAgICAgbG93c3RhbGUgPj0gMCAmJgotCQkJCUlOVF9HRVQobGVhZi0+ZW50c1tsb3dzdGFsZV0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSAhPQorCQkJCWJlMzJfdG9fY3B1KGxlYWYtPmVudHNbbG93c3RhbGVdLmFkZHJlc3MpICE9CiAJCQkJWEZTX0RJUjJfTlVMTF9EQVRBUFRSOwogCQkJICAgICBsb3dzdGFsZS0tKQogCQkJCWNvbnRpbnVlOwpAQCAtNDc4LDggKzQ3OCw4IEBACiAJCQkgKiBsb3dzdGFsZSBlbnRyeSB3b3VsZCBiZSBiZXR0ZXIuCiAJCQkgKi8KIAkJCWZvciAoaGlnaHN0YWxlID0gaW5kZXg7Ci0JCQkgICAgIGhpZ2hzdGFsZSA8IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICYmCi0JCQkJSU5UX0dFVChsZWFmLT5lbnRzW2hpZ2hzdGFsZV0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSAhPQorCQkJICAgICBoaWdoc3RhbGUgPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpICYmCisJCQkJYmUzMl90b19jcHUobGVhZi0+ZW50c1toaWdoc3RhbGVdLmFkZHJlc3MpICE9CiAJCQkJWEZTX0RJUjJfTlVMTF9EQVRBUFRSICYmCiAJCQkJKGxvd3N0YWxlIDwgMCB8fAogCQkJCSBpbmRleCAtIGxvd3N0YWxlIC0gMSA+PSBoaWdoc3RhbGUgLSBpbmRleCk7CkBAIC00OTAsMTAgKzQ5MCwxMCBAQAogCQkgKiBJZiB0aGUgbG93IG9uZSBpcyBiZXR0ZXIsIHVzZSBpdC4KIAkJICovCiAJCWlmIChsb3dzdGFsZSA+PSAwICYmCi0JCSAgICAoaGlnaHN0YWxlID09IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIHx8CisJCSAgICAoaGlnaHN0YWxlID09IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgfHwKIAkJICAgICBpbmRleCAtIGxvd3N0YWxlIC0gMSA8IGhpZ2hzdGFsZSAtIGluZGV4KSkgewogCQkJQVNTRVJUKGluZGV4IC0gbG93c3RhbGUgLSAxID49IDApOwotCQkJQVNTRVJUKElOVF9HRVQobGVhZi0+ZW50c1tsb3dzdGFsZV0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSA9PQorCQkJQVNTRVJUKGJlMzJfdG9fY3B1KGxlYWYtPmVudHNbbG93c3RhbGVdLmFkZHJlc3MpID09CiAJCQkgICAgICAgWEZTX0RJUjJfTlVMTF9EQVRBUFRSKTsKIAkJCS8qCiAJCQkgKiBDb3B5IGVudHJpZXMgdXAgdG8gY292ZXIgdGhlIHN0YWxlIGVudHJ5CkBAIC01MTIsNyArNTEyLDcgQEAKIAkJICovCiAJCWVsc2UgewogCQkJQVNTRVJUKGhpZ2hzdGFsZSAtIGluZGV4ID49IDApOwotCQkJQVNTRVJUKElOVF9HRVQobGVhZi0+ZW50c1toaWdoc3RhbGVdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgPT0KKwkJCUFTU0VSVChiZTMyX3RvX2NwdShsZWFmLT5lbnRzW2hpZ2hzdGFsZV0uYWRkcmVzcykgPT0KIAkJCSAgICAgICBYRlNfRElSMl9OVUxMX0RBVEFQVFIpOwogCQkJLyoKIAkJCSAqIENvcHkgZW50cmllcyBkb3duIHRvIGNvcHZlciB0aGUgc3RhbGUgZW50cnkKQEAgLTUyNiwxMyArNTI2LDE0IEBACiAJCQlsZmxvZ2xvdyA9IE1JTihpbmRleCwgbGZsb2dsb3cpOwogCQkJbGZsb2doaWdoID0gTUFYKGhpZ2hzdGFsZSwgbGZsb2doaWdoKTsKIAkJfQotCQlJTlRfTU9EKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJULCAtMSk7CisJCWJlMTZfYWRkKCZsZWFmLT5oZHIuc3RhbGUsIC0xKTsKIAl9CiAJLyoKIAkgKiBGaWxsIGluIHRoZSBuZXcgbGVhZiBlbnRyeS4KIAkgKi8KLQlJTlRfU0VUKGxlcC0+aGFzaHZhbCwgQVJDSF9DT05WRVJULCBhcmdzLT5oYXNodmFsKTsKLQlJTlRfU0VUKGxlcC0+YWRkcmVzcywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9EQl9PRkZfVE9fREFUQVBUUihtcCwgdXNlX2Jsb2NrLCBJTlRfR0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQpKSk7CisJbGVwLT5oYXNodmFsID0gY3B1X3RvX2JlMzIoYXJncy0+aGFzaHZhbCk7CisJbGVwLT5hZGRyZXNzID0gY3B1X3RvX2JlMzIoWEZTX0RJUjJfREJfT0ZGX1RPX0RBVEFQVFIobXAsIHVzZV9ibG9jaywKKwkJCQliZTE2X3RvX2NwdSgqdGFncCkpKTsKIAkvKgogCSAqIExvZyB0aGUgbGVhZiBmaWVsZHMgYW5kIGdpdmUgdXAgdGhlIGJ1ZmZlcnMuCiAJICovCkBAIC01NjMsMzAgKzU2NCwzMCBAQAogCiAJbGVhZiA9IGJwLT5kYXRhOwogCW1wID0gZHAtPmlfbW91bnQ7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMpOwogCS8qCiAJICogVGhpcyB2YWx1ZSBpcyBub3QgcmVzdHJpY3RpdmUgZW5vdWdoLgogCSAqIFNob3VsZCBmYWN0b3IgaW4gdGhlIHNpemUgb2YgdGhlIGJlc3RzIHRhYmxlIGFzIHdlbGwuCiAJICogV2UgY2FuIGRlZHVjZSBhIHZhbHVlIGZvciB0aGF0IGZyb20gZGlfc2l6ZS4KIAkgKi8KLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgPD0gWEZTX0RJUjJfTUFYX0xFQUZfRU5UUyhtcCkpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpIDw9IFhGU19ESVIyX01BWF9MRUFGX0VOVFMobXApKTsKIAlsdHAgPSBYRlNfRElSMl9MRUFGX1RBSUxfUChtcCwgbGVhZik7CiAJLyoKIAkgKiBMZWF2ZXMgYW5kIGJlc3RzIGRvbid0IG92ZXJsYXAuCiAJICovCi0JQVNTRVJUKChjaGFyICopJmxlYWYtPmVudHNbSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCldIDw9CisJQVNTRVJUKChjaGFyICopJmxlYWYtPmVudHNbYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KV0gPD0KIAkgICAgICAgKGNoYXIgKilYRlNfRElSMl9MRUFGX0JFU1RTX1AobHRwKSk7CiAJLyoKIAkgKiBDaGVjayBoYXNoIHZhbHVlIG9yZGVyLCBjb3VudCBzdGFsZSBlbnRyaWVzLgogCSAqLwotCWZvciAoaSA9IHN0YWxlID0gMDsgaSA8IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOyBpKyspIHsKLQkJaWYgKGkgKyAxIDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpCi0JCQlBU1NFUlQoSU5UX0dFVChsZWFmLT5lbnRzW2ldLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPD0KLQkJCSAgICAgICBJTlRfR0VUKGxlYWYtPmVudHNbaSArIDFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkpOwotCQlpZiAoSU5UX0dFVChsZWFmLT5lbnRzW2ldLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSKQorCWZvciAoaSA9IHN0YWxlID0gMDsgaSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCk7IGkrKykgeworCQlpZiAoaSArIDEgPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpKQorCQkJQVNTRVJUKGJlMzJfdG9fY3B1KGxlYWYtPmVudHNbaV0uaGFzaHZhbCkgPD0KKwkJCSAgICAgICBiZTMyX3RvX2NwdShsZWFmLT5lbnRzW2kgKyAxXS5oYXNodmFsKSk7CisJCWlmIChiZTMyX3RvX2NwdShsZWFmLT5lbnRzW2ldLmFkZHJlc3MpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKIAkJCXN0YWxlKys7CiAJfQotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKSA9PSBzdGFsZSk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5zdGFsZSkgPT0gc3RhbGUpOwogfQogI2VuZGlmCS8qIERFQlVHICovCiAKQEAgLTYxMSw4ICs2MTIsOCBAQAogCS8qCiAJICogQ29tcHJlc3Mgb3V0IHRoZSBzdGFsZSBlbnRyaWVzIGluIHBsYWNlLgogCSAqLwotCWZvciAoZnJvbSA9IHRvID0gMCwgbG9nbG93ID0gLTE7IGZyb20gPCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsgZnJvbSsrKSB7Ci0JCWlmIChJTlRfR0VUKGxlYWYtPmVudHNbZnJvbV0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9OVUxMX0RBVEFQVFIpCisJZm9yIChmcm9tID0gdG8gPSAwLCBsb2dsb3cgPSAtMTsgZnJvbSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCk7IGZyb20rKykgeworCQlpZiAoYmUzMl90b19jcHUobGVhZi0+ZW50c1tmcm9tXS5hZGRyZXNzKSA9PSBYRlNfRElSMl9OVUxMX0RBVEFQVFIpCiAJCQljb250aW51ZTsKIAkJLyoKIAkJICogT25seSBhY3R1YWxseSBjb3B5IHRoZSBlbnRyaWVzIHRoYXQgYXJlIGRpZmZlcmVudC4KQEAgLTYyNyw4ICs2MjgsOCBAQAogCS8qCiAJICogVXBkYXRlIGFuZCBsb2cgdGhlIGhlYWRlciwgbG9nIHRoZSBsZWFmIGVudHJpZXMuCiAJICovCi0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLnN0YWxlLCBBUkNIX0NPTlZFUlQpID09IGZyb20gLSB0byk7Ci0JSU5UX01PRChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCwgLShJTlRfR0VUKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKSkpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpID09IGZyb20gLSB0byk7CisJYmUxNl9hZGQoJmxlYWYtPmhkci5jb3VudCwgLShiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpKSk7CiAJbGVhZi0+aGRyLnN0YWxlID0gMDsKIAl4ZnNfZGlyMl9sZWFmX2xvZ19oZWFkZXIoYXJncy0+dHJhbnMsIGJwKTsKIAlpZiAobG9nbG93ICE9IC0xKQpAQCAtNjYyLDE0ICs2NjMsMTQgQEAKIAlpbnQJCXRvOwkJLyogZGVzdGluYXRpb24gY29weSBpbmRleCAqLwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKSA+IDEpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpID4gMSk7CiAJaW5kZXggPSAqaW5kZXhwOwogCS8qCiAJICogRmluZCB0aGUgZmlyc3Qgc3RhbGUgZW50cnkgYmVmb3JlIG91ciBpbmRleCwgaWYgYW55LgogCSAqLwogCWZvciAobG93c3RhbGUgPSBpbmRleCAtIDE7CiAJICAgICBsb3dzdGFsZSA+PSAwICYmCi0JCUlOVF9HRVQobGVhZi0+ZW50c1tsb3dzdGFsZV0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSAhPSBYRlNfRElSMl9OVUxMX0RBVEFQVFI7CisJCWJlMzJfdG9fY3B1KGxlYWYtPmVudHNbbG93c3RhbGVdLmFkZHJlc3MpICE9IFhGU19ESVIyX05VTExfREFUQVBUUjsKIAkgICAgIGxvd3N0YWxlLS0pCiAJCWNvbnRpbnVlOwogCS8qCkBAIC02NzcsOCArNjc4LDggQEAKIAkgKiBTdG9wIGlmIHRoZSBhbnN3ZXIgd291bGQgYmUgd29yc2UgdGhhbiBsb3dzdGFsZS4KIAkgKi8KIAlmb3IgKGhpZ2hzdGFsZSA9IGluZGV4OwotCSAgICAgaGlnaHN0YWxlIDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgJiYKLQkJSU5UX0dFVChsZWFmLT5lbnRzW2hpZ2hzdGFsZV0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSAhPSBYRlNfRElSMl9OVUxMX0RBVEFQVFIgJiYKKwkgICAgIGhpZ2hzdGFsZSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgJiYKKwkJYmUzMl90b19jcHUobGVhZi0+ZW50c1toaWdoc3RhbGVdLmFkZHJlc3MpICE9IFhGU19ESVIyX05VTExfREFUQVBUUiAmJgogCQkobG93c3RhbGUgPCAwIHx8IGluZGV4IC0gbG93c3RhbGUgPiBoaWdoc3RhbGUgLSBpbmRleCk7CiAJICAgICBoaWdoc3RhbGUrKykKIAkJY29udGludWU7CkBAIC02ODYsNyArNjg3LDcgQEAKIAkgKiBQaWNrIHRoZSBiZXR0ZXIgb2YgbG93c3RhbGUgYW5kIGhpZ2hzdGFsZS4KIAkgKi8KIAlpZiAobG93c3RhbGUgPj0gMCAmJgotCSAgICAoaGlnaHN0YWxlID09IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIHx8CisJICAgIChoaWdoc3RhbGUgPT0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSB8fAogCSAgICAgaW5kZXggLSBsb3dzdGFsZSA8PSBoaWdoc3RhbGUgLSBpbmRleCkpCiAJCWtlZXBzdGFsZSA9IGxvd3N0YWxlOwogCWVsc2UKQEAgLTY5NSwxNCArNjk2LDE0IEBACiAJICogQ29weSB0aGUgZW50cmllcyBpbiBwbGFjZSwgcmVtb3ZpbmcgYWxsIHRoZSBzdGFsZSBlbnRyaWVzCiAJICogZXhjZXB0IGtlZXBzdGFsZS4KIAkgKi8KLQlmb3IgKGZyb20gPSB0byA9IDA7IGZyb20gPCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsgZnJvbSsrKSB7CisJZm9yIChmcm9tID0gdG8gPSAwOyBmcm9tIDwgYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsgZnJvbSsrKSB7CiAJCS8qCiAJCSAqIE5vdGljZSB0aGUgbmV3IHZhbHVlIG9mIGluZGV4LgogCQkgKi8KIAkJaWYgKGluZGV4ID09IGZyb20pCiAJCQluZXdpbmRleCA9IHRvOwogCQlpZiAoZnJvbSAhPSBrZWVwc3RhbGUgJiYKLQkJICAgIElOVF9HRVQobGVhZi0+ZW50c1tmcm9tXS5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX05VTExfREFUQVBUUikgeworCQkgICAgYmUzMl90b19jcHUobGVhZi0+ZW50c1tmcm9tXS5hZGRyZXNzKSA9PSBYRlNfRElSMl9OVUxMX0RBVEFQVFIpIHsKIAkJCWlmIChmcm9tID09IHRvKQogCQkJCSpsb3dsb2dwID0gdG87CiAJCQljb250aW51ZTsKQEAgLTczMCw4ICs3MzEsOCBAQAogCS8qCiAJICogQWRqdXN0IHRoZSBsZWFmIGhlYWRlciB2YWx1ZXMuCiAJICovCi0JSU5UX01PRChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCwgLShmcm9tIC0gdG8pKTsKLQlJTlRfU0VUKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJULCAxKTsKKwliZTE2X2FkZCgmbGVhZi0+aGRyLmNvdW50LCAtKGZyb20gLSB0bykpOworCWxlYWYtPmhkci5zdGFsZSA9IGNwdV90b19iZTE2KDEpOwogCS8qCiAJICogUmVtZW1iZXIgdGhlIGxvdy9oaWdoIHN0YWxlIHZhbHVlIG9ubHkgaW4gdGhlICJyaWdodCIKIAkgKiBkaXJlY3Rpb24uCkBAIC03MzksOCArNzQwLDggQEAKIAlpZiAobG93c3RhbGUgPj0gbmV3aW5kZXgpCiAJCWxvd3N0YWxlID0gLTE7CiAJZWxzZQotCQloaWdoc3RhbGUgPSBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKLQkqaGlnaGxvZ3AgPSBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDE7CisJCWhpZ2hzdGFsZSA9IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCk7CisJKmhpZ2hsb2dwID0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSAtIDE7CiAJKmxvd3N0YWxlcCA9IGxvd3N0YWxlOwogCSpoaWdoc3RhbGVwID0gaGlnaHN0YWxlOwogfQpAQCAtNzY2LDcgKzc2Nyw3IEBACiAJeGZzX2RpcjJfZGF0YV9lbnRyeV90CSpkZXA7CQkvKiBkYXRhIGVudHJ5ICovCiAJeGZzX2RpcjJfZGF0YV91bnVzZWRfdAkqZHVwOwkJLyogdW51c2VkIGVudHJ5ICovCiAJaW50CQkJZW9mOwkJLyogcmVhY2hlZCBlbmQgb2YgZGlyZWN0b3J5ICovCi0JaW50CQkJZXJyb3I9MDsJCS8qIGVycm9yIHJldHVybiB2YWx1ZSAqLworCWludAkJCWVycm9yID0gMDsJLyogZXJyb3IgcmV0dXJuIHZhbHVlICovCiAJaW50CQkJaTsJCS8qIHRlbXBvcmFyeSBsb29wIGluZGV4ICovCiAJaW50CQkJajsJCS8qIHRlbXBvcmFyeSBsb29wIGluZGV4ICovCiAJaW50CQkJbGVuZ3RoOwkJLyogdGVtcG9yYXJ5IGxlbmd0aCB2YWx1ZSAqLwpAQCAtNzc4LDggKzc3OSw4IEBACiAJeGZzX21vdW50X3QJCSptcDsJCS8qIGZpbGVzeXN0ZW0gbW91bnQgcG9pbnQgKi8KIAl4ZnNfZGlyMl9vZmZfdAkJbmV3b2ZmOwkJLyogbmV3IGN1cm9mZiBhZnRlciBuZXcgYmxrICovCiAJaW50CQkJbm1hcDsJCS8qIG1hcHBpbmdzIHRvIGFzayB4ZnNfYm1hcGkgKi8KLQl4ZnNfZGlyMl9wdXRfYXJnc190CXA7CQkvKiBmb3JtYXR0aW5nIGFyZyBidW5kbGUgKi8KLQljaGFyCQkJKnB0cj1OVUxMOwkJLyogcG9pbnRlciB0byBjdXJyZW50IGRhdGEgKi8KKwl4ZnNfZGlyMl9wdXRfYXJnc190CSpwOwkJLyogZm9ybWF0dGluZyBhcmcgYnVuZGxlICovCisJY2hhcgkJCSpwdHIgPSBOVUxMOwkvKiBwb2ludGVyIHRvIGN1cnJlbnQgZGF0YSAqLwogCWludAkJCXJhX2N1cnJlbnQ7CS8qIG51bWJlciBvZiByZWFkLWFoZWFkIGJsa3MgKi8KIAlpbnQJCQlyYV9pbmRleDsJLyogKm1hcCBpbmRleCBmb3IgcmVhZC1haGVhZCAqLwogCWludAkJCXJhX29mZnNldDsJLyogbWFwIGVudHJ5IG9mZnNldCBmb3IgcmEgKi8KQEAgLTc5Nyw5ICs3OTgsMTAgQEAKIAkvKgogCSAqIFNldHVwIGZvcm1hdHRpbmcgYXJndW1lbnRzLgogCSAqLwotCXAuZGJwID0gZGJwOwotCXAucHV0ID0gcHV0OwotCXAudWlvID0gdWlvOworCXAgPSBrbWVtX2FsbG9jKHNpemVvZigqcCksIEtNX1NMRUVQKTsKKwlwLT5kYnAgPSBkYnA7CisJcC0+cHV0ID0gcHV0OworCXAtPnVpbyA9IHVpbzsKIAkvKgogCSAqIFNldCB1cCB0byBibWFwIGEgbnVtYmVyIG9mIGJsb2NrcyBiYXNlZCBvbiB0aGUgY2FsbGVyJ3MKIAkgKiBidWZmZXIgc2l6ZSwgdGhlIGRpcmVjdG9yeSBibG9jayBzaXplLCBhbmQgdGhlIGZpbGVzeXN0ZW0KQEAgLTEwNDYsMTEgKzEwNDgsMTAgQEAKIAkJCQl3aGlsZSAoKGNoYXIgKilwdHIgLSAoY2hhciAqKWRhdGEgPCBieXRlb2ZmKSB7CiAJCQkJCWR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopcHRyOwogCi0JCQkJCWlmIChJTlRfR0VUKGR1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJUKQorCQkJCQlpZiAoYmUxNl90b19jcHUoZHVwLT5mcmVldGFnKQogCQkJCQkJICA9PSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKSB7CiAKLQkJCQkJCWxlbmd0aCA9IElOVF9HRVQoZHVwLT5sZW5ndGgsCi0JCQkJCQkJCSBBUkNIX0NPTlZFUlQpOworCQkJCQkJbGVuZ3RoID0gYmUxNl90b19jcHUoZHVwLT5sZW5ndGgpOwogCQkJCQkJcHRyICs9IGxlbmd0aDsKIAkJCQkJCWNvbnRpbnVlOwogCQkJCQl9CkBAIC0xMDc5LDkgKzEwODAsOCBAQAogCQkvKgogCQkgKiBObywgaXQncyB1bnVzZWQsIHNraXAgb3ZlciBpdC4KIAkJICovCi0JCWlmIChJTlRfR0VUKGR1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJUKQotCQkJCQkJPT0gWEZTX0RJUjJfREFUQV9GUkVFX1RBRykgewotCQkJbGVuZ3RoID0gSU5UX0dFVChkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKTsKKwkJaWYgKGJlMTZfdG9fY3B1KGR1cC0+ZnJlZXRhZykgPT0gWEZTX0RJUjJfREFUQV9GUkVFX1RBRykgeworCQkJbGVuZ3RoID0gYmUxNl90b19jcHUoZHVwLT5sZW5ndGgpOwogCQkJcHRyICs9IGxlbmd0aDsKIAkJCWN1cm9mZiArPSBsZW5ndGg7CiAJCQljb250aW51ZTsKQEAgLTEwOTIsMjQgKzEwOTIsMjQgQEAKIAkJICovCiAJCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKilwdHI7CiAKLQkJcC5uYW1lbGVuID0gZGVwLT5uYW1lbGVuOworCQlwLT5uYW1lbGVuID0gZGVwLT5uYW1lbGVuOwogCi0JCWxlbmd0aCA9IFhGU19ESVIyX0RBVEFfRU5UU0laRShwLm5hbWVsZW4pOworCQlsZW5ndGggPSBYRlNfRElSMl9EQVRBX0VOVFNJWkUocC0+bmFtZWxlbik7CiAKLQkJcC5jb29rID0gWEZTX0RJUjJfQllURV9UT19EQVRBUFRSKG1wLCBjdXJvZmYgKyBsZW5ndGgpOworCQlwLT5jb29rID0gWEZTX0RJUjJfQllURV9UT19EQVRBUFRSKG1wLCBjdXJvZmYgKyBsZW5ndGgpOwogCi0JCXAuaW5vID0gSU5UX0dFVChkZXAtPmludW1iZXIsIEFSQ0hfQ09OVkVSVCk7CisJCXAtPmlubyA9IElOVF9HRVQoZGVwLT5pbnVtYmVyLCBBUkNIX0NPTlZFUlQpOwogI2lmIFhGU19CSUdfSU5VTVMKLQkJcC5pbm8gKz0gbXAtPm1faW5vYWRkOworCQlwLT5pbm8gKz0gbXAtPm1faW5vYWRkOwogI2VuZGlmCi0JCXAubmFtZSA9IChjaGFyICopZGVwLT5uYW1lOworCQlwLT5uYW1lID0gKGNoYXIgKilkZXAtPm5hbWU7CiAKLQkJZXJyb3IgPSBwLnB1dCgmcCk7CisJCWVycm9yID0gcC0+cHV0KHApOwogCiAJCS8qCiAJCSAqIFdvbid0IGZpdC4gIFJldHVybiB0byBjYWxsZXIuCiAJCSAqLwotCQlpZiAoIXAuZG9uZSkgeworCQlpZiAoIXAtPmRvbmUpIHsKIAkJCWVvZiA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMTEyOSw2ICsxMTI5LDcgQEAKIAllbHNlCiAJCXVpby0+dWlvX29mZnNldCA9IFhGU19ESVIyX0JZVEVfVE9fREFUQVBUUihtcCwgY3Vyb2ZmKTsKIAlrbWVtX2ZyZWUobWFwLCBtYXBfc2l6ZSAqIHNpemVvZigqbWFwKSk7CisJa21lbV9mcmVlKHAsIHNpemVvZigqcCkpOwogCWlmIChicCkKIAkJeGZzX2RhX2JyZWxzZSh0cCwgYnApOwogCXJldHVybiBlcnJvcjsKQEAgLTExNzEsNyArMTE3Miw3IEBACiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBoZWFkZXIuCiAJICovCi0JSU5UX1NFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJULCBtYWdpYyk7CisJbGVhZi0+aGRyLmluZm8ubWFnaWMgPSBjcHVfdG9fYmUxNihtYWdpYyk7CiAJbGVhZi0+aGRyLmluZm8uZm9ydyA9IDA7CiAJbGVhZi0+aGRyLmluZm8uYmFjayA9IDA7CiAJbGVhZi0+aGRyLmNvdW50ID0gMDsKQEAgLTEyMDEsMTMgKzEyMDIsMTMgQEAKIAlpbnQJCQlmaXJzdCwJCS8qIGZpcnN0IGVudHJ5IHRvIGxvZyAqLwogCWludAkJCWxhc3QpCQkvKiBsYXN0IGVudHJ5IHRvIGxvZyAqLwogewotCXhmc19kaXIyX2RhdGFfb2ZmX3QJKmZpcnN0YjsJLyogcG9pbnRlciB0byBmaXJzdCBlbnRyeSAqLwotCXhmc19kaXIyX2RhdGFfb2ZmX3QJKmxhc3RiOwkJLyogcG9pbnRlciB0byBsYXN0IGVudHJ5ICovCisJX19iZTE2CQkJKmZpcnN0YjsJLyogcG9pbnRlciB0byBmaXJzdCBlbnRyeSAqLworCV9fYmUxNgkJCSpsYXN0YjsJCS8qIHBvaW50ZXIgdG8gbGFzdCBlbnRyeSAqLwogCXhmc19kaXIyX2xlYWZfdAkJKmxlYWY7CQkvKiBsZWFmIHN0cnVjdHVyZSAqLwogCXhmc19kaXIyX2xlYWZfdGFpbF90CSpsdHA7CQkvKiBsZWFmIHRhaWwgc3RydWN0dXJlICovCiAKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMpOwogCWx0cCA9IFhGU19ESVIyX0xFQUZfVEFJTF9QKHRwLT50X21vdW50cCwgbGVhZik7CiAJZmlyc3RiID0gWEZTX0RJUjJfTEVBRl9CRVNUU19QKGx0cCkgKyBmaXJzdDsKIAlsYXN0YiA9IFhGU19ESVIyX0xFQUZfQkVTVFNfUChsdHApICsgbGFzdDsKQEAgLTEyMzAsOCArMTIzMSw4IEBACiAJeGZzX2RpcjJfbGVhZl90CQkqbGVhZjsJCS8qIGxlYWYgc3RydWN0dXJlICovCiAKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMgfHwKLQkgICAgICAgSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSMl9MRUFGMV9NQUdJQyB8fAorCSAgICAgICBiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOwogCWZpcnN0bGVwID0gJmxlYWYtPmVudHNbZmlyc3RdOwogCWxhc3RsZXAgPSAmbGVhZi0+ZW50c1tsYXN0XTsKIAl4ZnNfZGFfbG9nX2J1Zih0cCwgYnAsICh1aW50KSgoY2hhciAqKWZpcnN0bGVwIC0gKGNoYXIgKilsZWFmKSwKQEAgLTEyNDksOCArMTI1MCw4IEBACiAJeGZzX2RpcjJfbGVhZl90CQkqbGVhZjsJCS8qIGxlYWYgc3RydWN0dXJlICovCiAKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMgfHwKLQkgICAgICAgSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSMl9MRUFGMV9NQUdJQyB8fAorCSAgICAgICBiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOwogCXhmc19kYV9sb2dfYnVmKHRwLCBicCwgKHVpbnQpKChjaGFyICopJmxlYWYtPmhkciAtIChjaGFyICopbGVhZiksCiAJCSh1aW50KShzaXplb2YobGVhZi0+aGRyKSAtIDEpKTsKIH0KQEAgLTEyNjksNyArMTI3MCw3IEBACiAKIAltcCA9IHRwLT50X21vdW50cDsKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRjFfTUFHSUMpOwogCWx0cCA9IFhGU19ESVIyX0xFQUZfVEFJTF9QKG1wLCBsZWFmKTsKIAl4ZnNfZGFfbG9nX2J1Zih0cCwgYnAsICh1aW50KSgoY2hhciAqKWx0cCAtIChjaGFyICopbGVhZiksCiAJCSh1aW50KShtcC0+bV9kaXJibGtzaXplIC0gMSkpOwpAQCAtMTMxNCw3ICsxMzE1LDcgQEAKIAkgKi8KIAlkZXAgPSAoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICopCiAJICAgICAgKChjaGFyICopZGJwLT5kYXRhICsKLQkgICAgICAgWEZTX0RJUjJfREFUQVBUUl9UT19PRkYoZHAtPmlfbW91bnQsIElOVF9HRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpKSk7CisJICAgICAgIFhGU19ESVIyX0RBVEFQVFJfVE9fT0ZGKGRwLT5pX21vdW50LCBiZTMyX3RvX2NwdShsZXAtPmFkZHJlc3MpKSk7CiAJLyoKIAkgKiBSZXR1cm4gdGhlIGZvdW5kIGlub2RlIG51bWJlci4KIAkgKi8KQEAgLTEzNzMsMTcgKzEzNzQsMTcgQEAKIAkgKiBsb29raW5nIHRvIG1hdGNoIHRoZSBuYW1lLgogCSAqLwogCWZvciAobGVwID0gJmxlYWYtPmVudHNbaW5kZXhdLCBkYnAgPSBOVUxMLCBjdXJkYiA9IC0xOwotCSAgICAgaW5kZXggPCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAmJiBJTlRfR0VUKGxlcC0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSA9PSBhcmdzLT5oYXNodmFsOworCSAgICAgaW5kZXggPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpICYmIGJlMzJfdG9fY3B1KGxlcC0+aGFzaHZhbCkgPT0gYXJncy0+aGFzaHZhbDsKIAkgICAgIGxlcCsrLCBpbmRleCsrKSB7CiAJCS8qCiAJCSAqIFNraXAgb3ZlciBzdGFsZSBsZWFmIGVudHJpZXMuCiAJCSAqLwotCQlpZiAoSU5UX0dFVChsZXAtPmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSKQorCQlpZiAoYmUzMl90b19jcHUobGVwLT5hZGRyZXNzKSA9PSBYRlNfRElSMl9OVUxMX0RBVEFQVFIpCiAJCQljb250aW51ZTsKIAkJLyoKIAkJICogR2V0IHRoZSBuZXcgZGF0YSBibG9jayBudW1iZXIuCiAJCSAqLwotCQluZXdkYiA9IFhGU19ESVIyX0RBVEFQVFJfVE9fREIobXAsIElOVF9HRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpKTsKKwkJbmV3ZGIgPSBYRlNfRElSMl9EQVRBUFRSX1RPX0RCKG1wLCBiZTMyX3RvX2NwdShsZXAtPmFkZHJlc3MpKTsKIAkJLyoKIAkJICogSWYgaXQncyBub3QgdGhlIHNhbWUgYXMgdGhlIG9sZCBkYXRhIGJsb2NrIG51bWJlciwKIAkJICogbmVlZCB0byBwaXRjaCB0aGUgb2xkIG9uZSBhbmQgcmVhZCB0aGUgbmV3IG9uZS4KQEAgLTE0MDYsNyArMTQwNyw3IEBACiAJCSAqLwogCQlkZXAgPSAoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICopCiAJCSAgICAgICgoY2hhciAqKWRicC0+ZGF0YSArCi0JCSAgICAgICBYRlNfRElSMl9EQVRBUFRSX1RPX09GRihtcCwgSU5UX0dFVChsZXAtPmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkpKTsKKwkJICAgICAgIFhGU19ESVIyX0RBVEFQVFJfVE9fT0ZGKG1wLCBiZTMyX3RvX2NwdShsZXAtPmFkZHJlc3MpKSk7CiAJCS8qCiAJCSAqIElmIGl0IG1hdGNoZXMgdGhlbiByZXR1cm4gaXQuCiAJCSAqLwpAQCAtMTQzNSw3ICsxNDM2LDcgQEAKIHhmc19kaXIyX2xlYWZfcmVtb3ZlbmFtZSgKIAl4ZnNfZGFfYXJnc190CQkqYXJncykJCS8qIG9wZXJhdGlvbiBhcmd1bWVudHMgKi8KIHsKLQl4ZnNfZGlyMl9kYXRhX29mZl90CSpiZXN0c3A7CS8qIGxlYWYgYmxvY2sgYmVzdCBmcmVlc3BhY2UgKi8KKwlfX2JlMTYJCQkqYmVzdHNwOwkvKiBsZWFmIGJsb2NrIGJlc3QgZnJlZXNwYWNlICovCiAJeGZzX2RpcjJfZGF0YV90CQkqZGF0YTsJCS8qIGRhdGEgYmxvY2sgc3RydWN0dXJlICovCiAJeGZzX2RpcjJfZGJfdAkJZGI7CQkvKiBkYXRhIGJsb2NrIG51bWJlciAqLwogCXhmc19kYWJ1Zl90CQkqZGJwOwkJLyogZGF0YSBibG9jayBidWZmZXIgKi8KQEAgLTE0NzEsMTQgKzE0NzIsMTQgQEAKIAkgKiBQb2ludCB0byB0aGUgbGVhZiBlbnRyeSwgdXNlIHRoYXQgdG8gcG9pbnQgdG8gdGhlIGRhdGEgZW50cnkuCiAJICovCiAJbGVwID0gJmxlYWYtPmVudHNbaW5kZXhdOwotCWRiID0gWEZTX0RJUjJfREFUQVBUUl9UT19EQihtcCwgSU5UX0dFVChsZXAtPmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkpOworCWRiID0gWEZTX0RJUjJfREFUQVBUUl9UT19EQihtcCwgYmUzMl90b19jcHUobGVwLT5hZGRyZXNzKSk7CiAJZGVwID0gKHhmc19kaXIyX2RhdGFfZW50cnlfdCAqKQotCSAgICAgICgoY2hhciAqKWRhdGEgKyBYRlNfRElSMl9EQVRBUFRSX1RPX09GRihtcCwgSU5UX0dFVChsZXAtPmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkpKTsKKwkgICAgICAoKGNoYXIgKilkYXRhICsgWEZTX0RJUjJfREFUQVBUUl9UT19PRkYobXAsIGJlMzJfdG9fY3B1KGxlcC0+YWRkcmVzcykpKTsKIAluZWVkc2NhbiA9IG5lZWRsb2cgPSAwOwotCW9sZGJlc3QgPSBJTlRfR0VUKGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCk7CisJb2xkYmVzdCA9IGJlMTZfdG9fY3B1KGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgpOwogCWx0cCA9IFhGU19ESVIyX0xFQUZfVEFJTF9QKG1wLCBsZWFmKTsKIAliZXN0c3AgPSBYRlNfRElSMl9MRUFGX0JFU1RTX1AobHRwKTsKLQlBU1NFUlQoSU5UX0dFVChiZXN0c3BbZGJdLCBBUkNIX0NPTlZFUlQpID09IG9sZGJlc3QpOworCUFTU0VSVChiZTE2X3RvX2NwdShiZXN0c3BbZGJdKSA9PSBvbGRiZXN0KTsKIAkvKgogCSAqIE1hcmsgdGhlIGZvcm1lciBkYXRhIGVudHJ5IHVudXNlZC4KIAkgKi8KQEAgLTE0ODgsOSArMTQ4OSw5IEBACiAJLyoKIAkgKiBXZSBqdXN0IG1hcmsgdGhlIGxlYWYgZW50cnkgc3RhbGUgYnkgcHV0dGluZyBhIG51bGwgaW4gaXQuCiAJICovCi0JSU5UX01PRChsZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCwgKzEpOworCWJlMTZfYWRkKCZsZWFmLT5oZHIuc3RhbGUsIDEpOwogCXhmc19kaXIyX2xlYWZfbG9nX2hlYWRlcih0cCwgbGJwKTsKLQlJTlRfU0VUKGxlcC0+YWRkcmVzcywgQVJDSF9DT05WRVJULCBYRlNfRElSMl9OVUxMX0RBVEFQVFIpOworCWxlcC0+YWRkcmVzcyA9IGNwdV90b19iZTMyKFhGU19ESVIyX05VTExfREFUQVBUUik7CiAJeGZzX2RpcjJfbGVhZl9sb2dfZW50cyh0cCwgbGJwLCBpbmRleCwgaW5kZXgpOwogCS8qCiAJICogU2NhbiB0aGUgZnJlZXNwYWNlIGluIHRoZSBkYXRhIGJsb2NrIGFnYWluIGlmIG5lY2Vzc2FyeSwKQEAgLTE1MDQsMTUgKzE1MDUsMTUgQEAKIAkgKiBJZiB0aGUgbG9uZ2VzdCBmcmVlc3BhY2UgaW4gdGhlIGRhdGEgYmxvY2sgaGFzIGNoYW5nZWQsCiAJICogcHV0IHRoZSBuZXcgdmFsdWUgaW4gdGhlIGJlc3RzIHRhYmxlIGFuZCBsb2cgdGhhdC4KIAkgKi8KLQlpZiAoSU5UX0dFVChkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpICE9IG9sZGJlc3QpIHsKLQkJSU5UX0NPUFkoYmVzdHNwW2RiXSwgZGF0YS0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aCwgQVJDSF9DT05WRVJUKTsKKwlpZiAoYmUxNl90b19jcHUoZGF0YS0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aCkgIT0gb2xkYmVzdCkgeworCQliZXN0c3BbZGJdID0gZGF0YS0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aDsKIAkJeGZzX2RpcjJfbGVhZl9sb2dfYmVzdHModHAsIGxicCwgZGIsIGRiKTsKIAl9CiAJeGZzX2RpcjJfZGF0YV9jaGVjayhkcCwgZGJwKTsKIAkvKgogCSAqIElmIHRoZSBkYXRhIGJsb2NrIGlzIG5vdyBlbXB0eSB0aGVuIGdldCByaWQgb2YgdGhlIGRhdGEgYmxvY2suCiAJICovCi0JaWYgKElOVF9HRVQoZGF0YS0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aCwgQVJDSF9DT05WRVJUKSA9PQorCWlmIChiZTE2X3RvX2NwdShkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoKSA9PQogCSAgICBtcC0+bV9kaXJibGtzaXplIC0gKHVpbnQpc2l6ZW9mKGRhdGEtPmhkcikpIHsKIAkJQVNTRVJUKGRiICE9IG1wLT5tX2RpcmRhdGFibGspOwogCQlpZiAoKGVycm9yID0geGZzX2RpcjJfc2hyaW5rX2lub2RlKGFyZ3MsIGRiLCBkYnApKSkgewpAQCAtMTUzNSwxMiArMTUzNiwxMiBAQAogCQkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGRhdGEgYmxvY2sgdGhlbiBjb21wYWN0IHRoZQogCQkgKiBiZXN0cyB0YWJsZSBieSBnZXR0aW5nIHJpZCBvZiBlbnRyaWVzLgogCQkgKi8KLQkJaWYgKGRiID09IElOVF9HRVQobHRwLT5iZXN0Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxKSB7CisJCWlmIChkYiA9PSBiZTMyX3RvX2NwdShsdHAtPmJlc3Rjb3VudCkgLSAxKSB7CiAJCQkvKgogCQkJICogTG9vayBmb3IgdGhlIGxhc3QgYWN0aXZlIGVudHJ5IChpKS4KIAkJCSAqLwogCQkJZm9yIChpID0gZGIgLSAxOyBpID4gMDsgaS0tKSB7Ci0JCQkJaWYgKElOVF9HRVQoYmVzdHNwW2ldLCBBUkNIX0NPTlZFUlQpICE9IE5VTExEQVRBT0ZGKQorCQkJCWlmIChiZTE2X3RvX2NwdShiZXN0c3BbaV0pICE9IE5VTExEQVRBT0ZGKQogCQkJCQlicmVhazsKIAkJCX0KIAkJCS8qCkBAIC0xNTQ4LDEyICsxNTQ5LDEyIEBACiAJCQkgKiBlbmQgYXJlIHJlbW92ZWQuCiAJCQkgKi8KIAkJCW1lbW1vdmUoJmJlc3RzcFtkYiAtIGldLCBiZXN0c3AsCi0JCQkJKElOVF9HRVQobHRwLT5iZXN0Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSAoZGIgLSBpKSkgKiBzaXplb2YoKmJlc3RzcCkpOwotCQkJSU5UX01PRChsdHAtPmJlc3Rjb3VudCwgQVJDSF9DT05WRVJULCAtKGRiIC0gaSkpOworCQkJCShiZTMyX3RvX2NwdShsdHAtPmJlc3Rjb3VudCkgLSAoZGIgLSBpKSkgKiBzaXplb2YoKmJlc3RzcCkpOworCQkJYmUzMl9hZGQoJmx0cC0+YmVzdGNvdW50LCAtKGRiIC0gaSkpOwogCQkJeGZzX2RpcjJfbGVhZl9sb2dfdGFpbCh0cCwgbGJwKTsKLQkJCXhmc19kaXIyX2xlYWZfbG9nX2Jlc3RzKHRwLCBsYnAsIDAsIElOVF9HRVQobHRwLT5iZXN0Y291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxKTsKKwkJCXhmc19kaXIyX2xlYWZfbG9nX2Jlc3RzKHRwLCBsYnAsIDAsIGJlMzJfdG9fY3B1KGx0cC0+YmVzdGNvdW50KSAtIDEpOwogCQl9IGVsc2UKLQkJCUlOVF9TRVQoYmVzdHNwW2RiXSwgQVJDSF9DT05WRVJULCBOVUxMREFUQU9GRik7CisJCQliZXN0c3BbZGJdID0gY3B1X3RvX2JlMTYoTlVMTERBVEFPRkYpOwogCX0KIAkvKgogCSAqIElmIHRoZSBkYXRhIGJsb2NrIHdhcyBub3QgdGhlIGZpcnN0IG9uZSwgZHJvcCBpdC4KQEAgLTE2MDQsNyArMTYwNSw3IEBACiAJICovCiAJZGVwID0gKHhmc19kaXIyX2RhdGFfZW50cnlfdCAqKQogCSAgICAgICgoY2hhciAqKWRicC0+ZGF0YSArCi0JICAgICAgIFhGU19ESVIyX0RBVEFQVFJfVE9fT0ZGKGRwLT5pX21vdW50LCBJTlRfR0VUKGxlcC0+YWRkcmVzcywgQVJDSF9DT05WRVJUKSkpOworCSAgICAgICBYRlNfRElSMl9EQVRBUFRSX1RPX09GRihkcC0+aV9tb3VudCwgYmUzMl90b19jcHUobGVwLT5hZGRyZXNzKSkpOwogCUFTU0VSVChhcmdzLT5pbnVtYmVyICE9IElOVF9HRVQoZGVwLT5pbnVtYmVyLCBBUkNIX0NPTlZFUlQpKTsKIAkvKgogCSAqIFB1dCB0aGUgbmV3IGlub2RlIG51bWJlciBpbiwgbG9nIGl0LgpAQCAtMTY0NSwxMSArMTY0NiwxMSBAQAogCSAqIE5vdGUsIHRoZSB0YWJsZSBjYW5ub3QgYmUgZW1wdHksIHNvIHdlIGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgbG9vcC4KIAkgKiBCaW5hcnkgc2VhcmNoIHRoZSBsZWFmIGVudHJpZXMgbG9va2luZyBmb3Igb3VyIGhhc2ggdmFsdWUuCiAJICovCi0JZm9yIChsZXAgPSBsZWFmLT5lbnRzLCBsb3cgPSAwLCBoaWdoID0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxLAorCWZvciAobGVwID0gbGVhZi0+ZW50cywgbG93ID0gMCwgaGlnaCA9IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgLSAxLAogCQloYXNod2FudCA9IGFyZ3MtPmhhc2h2YWw7CiAJICAgICBsb3cgPD0gaGlnaDsgKSB7CiAJCW1pZCA9IChsb3cgKyBoaWdoKSA+PiAxOwotCQlpZiAoKGhhc2ggPSBJTlRfR0VUKGxlcFttaWRdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkpID09IGhhc2h3YW50KQorCQlpZiAoKGhhc2ggPSBiZTMyX3RvX2NwdShsZXBbbWlkXS5oYXNodmFsKSkgPT0gaGFzaHdhbnQpCiAJCQlicmVhazsKIAkJaWYgKGhhc2ggPCBoYXNod2FudCkKIAkJCWxvdyA9IG1pZCArIDE7CkBAIC0xNjYwLDcgKzE2NjEsNyBAQAogCSAqIEZvdW5kIG9uZSwgYmFjayB1cCB0aHJvdWdoIGFsbCB0aGUgZXF1YWwgaGFzaCB2YWx1ZXMuCiAJICovCiAJaWYgKGhhc2ggPT0gaGFzaHdhbnQpIHsKLQkJd2hpbGUgKG1pZCA+IDAgJiYgSU5UX0dFVChsZXBbbWlkIC0gMV0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSA9PSBoYXNod2FudCkgeworCQl3aGlsZSAobWlkID4gMCAmJiBiZTMyX3RvX2NwdShsZXBbbWlkIC0gMV0uaGFzaHZhbCkgPT0gaGFzaHdhbnQpIHsKIAkJCW1pZC0tOwogCQl9CiAJfQpAQCAtMTY4Miw3ICsxNjgzLDcgQEAKIAl4ZnNfZGFidWZfdAkJKmxicCwJCS8qIGxlYWYgYnVmZmVyICovCiAJeGZzX2RpcjJfZGJfdAkJZGIpCQkvKiBkYXRhIGJsb2NrIG51bWJlciAqLwogewotCXhmc19kaXIyX2RhdGFfb2ZmX3QJKmJlc3RzcDsJLyogbGVhZiBiZXN0cyB0YWJsZSAqLworCV9fYmUxNgkJCSpiZXN0c3A7CS8qIGxlYWYgYmVzdHMgdGFibGUgKi8KICNpZmRlZiBERUJVRwogCXhmc19kaXIyX2RhdGFfdAkJKmRhdGE7CQkvKiBkYXRhIGJsb2NrIHN0cnVjdHVyZSAqLwogI2VuZGlmCkBAIC0xNzA2LDcgKzE3MDcsNyBAQAogCX0KICNpZmRlZiBERUJVRwogCWRhdGEgPSBkYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQoZGF0YS0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0RBVEFfTUFHSUMpOworCUFTU0VSVChiZTMyX3RvX2NwdShkYXRhLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0RBVEFfTUFHSUMpOwogI2VuZGlmCiAJLyogdGhpcyBzZWVtcyB0byBiZSBhbiBlcnJvcgogCSAqIGRhdGEgaXMgb25seSB2YWxpZCBpZiBERUJVRyBpcyBkZWZpbmVkPwpAQCAtMTcxNSw5ICsxNzE2LDkgQEAKIAogCWxlYWYgPSBsYnAtPmRhdGE7CiAJbHRwID0gWEZTX0RJUjJfTEVBRl9UQUlMX1AobXAsIGxlYWYpOwotCUFTU0VSVChJTlRfR0VUKGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkgPT0KKwlBU1NFUlQoYmUxNl90b19jcHUoZGF0YS0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aCkgPT0KIAkgICAgICAgbXAtPm1fZGlyYmxrc2l6ZSAtICh1aW50KXNpemVvZihkYXRhLT5oZHIpKTsKLQlBU1NFUlQoZGIgPT0gSU5UX0dFVChsdHAtPmJlc3Rjb3VudCwgQVJDSF9DT05WRVJUKSAtIDEpOworCUFTU0VSVChkYiA9PSBiZTMyX3RvX2NwdShsdHAtPmJlc3Rjb3VudCkgLSAxKTsKIAkvKgogCSAqIEdldCByaWQgb2YgdGhlIGRhdGEgYmxvY2suCiAJICovCkBAIC0xNzMwLDEwICsxNzMxLDEwIEBACiAJICogRWxpbWluYXRlIHRoZSBsYXN0IGJlc3RzIGVudHJ5IGZyb20gdGhlIHRhYmxlLgogCSAqLwogCWJlc3RzcCA9IFhGU19ESVIyX0xFQUZfQkVTVFNfUChsdHApOwotCUlOVF9NT0QobHRwLT5iZXN0Y291bnQsIEFSQ0hfQ09OVkVSVCwgLTEpOwotCW1lbW1vdmUoJmJlc3RzcFsxXSwgJmJlc3RzcFswXSwgSU5UX0dFVChsdHAtPmJlc3Rjb3VudCwgQVJDSF9DT05WRVJUKSAqIHNpemVvZigqYmVzdHNwKSk7CisJYmUzMl9hZGQoJmx0cC0+YmVzdGNvdW50LCAtMSk7CisJbWVtbW92ZSgmYmVzdHNwWzFdLCAmYmVzdHNwWzBdLCBiZTMyX3RvX2NwdShsdHAtPmJlc3Rjb3VudCkgKiBzaXplb2YoKmJlc3RzcCkpOwogCXhmc19kaXIyX2xlYWZfbG9nX3RhaWwodHAsIGxicCk7Ci0JeGZzX2RpcjJfbGVhZl9sb2dfYmVzdHModHAsIGxicCwgMCwgSU5UX0dFVChsdHAtPmJlc3Rjb3VudCwgQVJDSF9DT05WRVJUKSAtIDEpOworCXhmc19kaXIyX2xlYWZfbG9nX2Jlc3RzKHRwLCBsYnAsIDAsIGJlMzJfdG9fY3B1KGx0cC0+YmVzdGNvdW50KSAtIDEpOwogCXJldHVybiAwOwogfQogCkBAIC0xODA1LDcgKzE4MDYsNyBAQAogCQlyZXR1cm4gMDsKIAlsYnAgPSBzdGF0ZS0+cGF0aC5ibGtbMF0uYnA7CiAJbGVhZiA9IGxicC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CiAJLyoKIAkgKiBSZWFkIHRoZSBmcmVlc3BhY2UgYmxvY2suCiAJICovCkBAIC0xODE0LDE1ICsxODE1LDE1IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAJZnJlZSA9IGZicC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChmcmVlLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfRlJFRV9NQUdJQyk7CisJQVNTRVJUKGJlMzJfdG9fY3B1KGZyZWUtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfRlJFRV9NQUdJQyk7CiAJQVNTRVJUKCFmcmVlLT5oZHIuZmlyc3RkYik7CiAJLyoKIAkgKiBOb3cgc2VlIGlmIHRoZSBsZWFmbiBhbmQgZnJlZSBkYXRhIHdpbGwgZml0IGluIGEgbGVhZjEuCiAJICogSWYgbm90LCByZWxlYXNlIHRoZSBidWZmZXIgYW5kIGdpdmUgdXAuCiAJICovCiAJaWYgKCh1aW50KXNpemVvZihsZWFmLT5oZHIpICsKLQkgICAgKElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gSU5UX0dFVChsZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCkpICogKHVpbnQpc2l6ZW9mKGxlYWYtPmVudHNbMF0pICsKLQkgICAgSU5UX0dFVChmcmVlLT5oZHIubnZhbGlkLCBBUkNIX0NPTlZFUlQpICogKHVpbnQpc2l6ZW9mKGxlYWYtPmJlc3RzWzBdKSArCisJICAgIChiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpIC0gYmUxNl90b19jcHUobGVhZi0+aGRyLnN0YWxlKSkgKiAodWludClzaXplb2YobGVhZi0+ZW50c1swXSkgKworCSAgICBiZTMyX3RvX2NwdShmcmVlLT5oZHIubnZhbGlkKSAqICh1aW50KXNpemVvZihsZWFmLT5iZXN0c1swXSkgKwogCSAgICAodWludClzaXplb2YobGVhZi0+dGFpbCkgPgogCSAgICBtcC0+bV9kaXJibGtzaXplKSB7CiAJCXhmc19kYV9icmVsc2UodHAsIGZicCk7CkBAIC0xODMyLDIyICsxODMzLDIyIEBACiAJICogSWYgdGhlIGxlYWYgaGFzIGFueSBzdGFsZSBlbnRyaWVzIGluIGl0LCBjb21wcmVzcyB0aGVtIG91dC4KIAkgKiBUaGUgY29tcGFjdCByb3V0aW5lIHdpbGwgbG9nIHRoZSBoZWFkZXIuCiAJICovCi0JaWYgKElOVF9HRVQobGVhZi0+aGRyLnN0YWxlLCBBUkNIX0NPTlZFUlQpKQorCWlmIChiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpKQogCQl4ZnNfZGlyMl9sZWFmX2NvbXBhY3QoYXJncywgbGJwKTsKIAllbHNlCiAJCXhmc19kaXIyX2xlYWZfbG9nX2hlYWRlcih0cCwgbGJwKTsKLQlJTlRfU0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQsIFhGU19ESVIyX0xFQUYxX01BR0lDKTsKKwlsZWFmLT5oZHIuaW5mby5tYWdpYyA9IGNwdV90b19iZTE2KFhGU19ESVIyX0xFQUYxX01BR0lDKTsKIAkvKgogCSAqIFNldCB1cCB0aGUgbGVhZiB0YWlsIGZyb20gdGhlIGZyZWVzcGFjZSBibG9jay4KIAkgKi8KIAlsdHAgPSBYRlNfRElSMl9MRUFGX1RBSUxfUChtcCwgbGVhZik7Ci0JSU5UX0NPUFkobHRwLT5iZXN0Y291bnQsIGZyZWUtPmhkci5udmFsaWQsIEFSQ0hfQ09OVkVSVCk7CisJbHRwLT5iZXN0Y291bnQgPSBmcmVlLT5oZHIubnZhbGlkOwogCS8qCiAJICogU2V0IHVwIHRoZSBsZWFmIGJlc3RzIHRhYmxlLgogCSAqLwogCW1lbWNweShYRlNfRElSMl9MRUFGX0JFU1RTX1AobHRwKSwgZnJlZS0+YmVzdHMsCi0JCUlOVF9HRVQobHRwLT5iZXN0Y291bnQsIEFSQ0hfQ09OVkVSVCkgKiBzaXplb2YobGVhZi0+YmVzdHNbMF0pKTsKLQl4ZnNfZGlyMl9sZWFmX2xvZ19iZXN0cyh0cCwgbGJwLCAwLCBJTlRfR0VUKGx0cC0+YmVzdGNvdW50LCBBUkNIX0NPTlZFUlQpIC0gMSk7CisJCWJlMzJfdG9fY3B1KGx0cC0+YmVzdGNvdW50KSAqIHNpemVvZihsZWFmLT5iZXN0c1swXSkpOworCXhmc19kaXIyX2xlYWZfbG9nX2Jlc3RzKHRwLCBsYnAsIDAsIGJlMzJfdG9fY3B1KGx0cC0+YmVzdGNvdW50KSAtIDEpOwogCXhmc19kaXIyX2xlYWZfbG9nX3RhaWwodHAsIGxicCk7CiAJeGZzX2RpcjJfbGVhZl9jaGVjayhkcCwgbGJwKTsKIAkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuaCBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmgKaW5kZXggMTM5Mzk5My4uZjU3Y2ExMTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmgKKysrIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuaApAQCAtNDYsMjMgKzQ2LDIzIEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19kaXIyX2xlYWZfaGRyIHsKIAl4ZnNfZGFfYmxraW5mb190CWluZm87CQkvKiBoZWFkZXIgZm9yIGRhIHJvdXRpbmVzICovCi0JX191aW50MTZfdAkJY291bnQ7CQkvKiBjb3VudCBvZiBlbnRyaWVzICovCi0JX191aW50MTZfdAkJc3RhbGU7CQkvKiBjb3VudCBvZiBzdGFsZSBlbnRyaWVzICovCisJX19iZTE2CQkJY291bnQ7CQkvKiBjb3VudCBvZiBlbnRyaWVzICovCisJX19iZTE2CQkJc3RhbGU7CQkvKiBjb3VudCBvZiBzdGFsZSBlbnRyaWVzICovCiB9IHhmc19kaXIyX2xlYWZfaGRyX3Q7CiAKIC8qCiAgKiBMZWFmIGJsb2NrIGVudHJ5LgogICovCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZGlyMl9sZWFmX2VudHJ5IHsKLQl4ZnNfZGFoYXNoX3QJCWhhc2h2YWw7CS8qIGhhc2ggdmFsdWUgb2YgbmFtZSAqLwotCXhmc19kaXIyX2RhdGFwdHJfdAlhZGRyZXNzOwkvKiBhZGRyZXNzIG9mIGRhdGEgZW50cnkgKi8KKwlfX2JlMzIJCQloYXNodmFsOwkvKiBoYXNoIHZhbHVlIG9mIG5hbWUgKi8KKwlfX2JlMzIJCQlhZGRyZXNzOwkvKiBhZGRyZXNzIG9mIGRhdGEgZW50cnkgKi8KIH0geGZzX2RpcjJfbGVhZl9lbnRyeV90OwogCiAvKgogICogTGVhZiBibG9jayB0YWlsLgogICovCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZGlyMl9sZWFmX3RhaWwgewotCV9fdWludDMyX3QJCWJlc3Rjb3VudDsKKwlfX2JlMzIJCQliZXN0Y291bnQ7CiB9IHhmc19kaXIyX2xlYWZfdGFpbF90OwogCiAvKgpAQCAtMTA1LDExICsxMDUsMTAgQEAKICAqIEdldCBhZGRyZXNzIG9mIHRoZSBiZXN0cyBhcnJheSBpbiB0aGUgc2luZ2xlLWxlYWYgYmxvY2suCiAgKi8KICNkZWZpbmUJWEZTX0RJUjJfTEVBRl9CRVNUU19QKGx0cCkJeGZzX2RpcjJfbGVhZl9iZXN0c19wKGx0cCkKLXN0YXRpYyBpbmxpbmUgeGZzX2RpcjJfZGF0YV9vZmZfdCAqCitzdGF0aWMgaW5saW5lIF9fYmUxNiAqCiB4ZnNfZGlyMl9sZWFmX2Jlc3RzX3AoeGZzX2RpcjJfbGVhZl90YWlsX3QgKmx0cCkKIHsKLQlyZXR1cm4gKHhmc19kaXIyX2RhdGFfb2ZmX3QgKikKLQkJKGx0cCkgLSBJTlRfR0VUKChsdHApLT5iZXN0Y291bnQsIEFSQ0hfQ09OVkVSVCk7CisJcmV0dXJuIChfX2JlMTYgKilsdHAgLSBiZTMyX3RvX2NwdShsdHAtPmJlc3Rjb3VudCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5jIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwppbmRleCA2NDFmODYzLi5hZjU1NmYxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAl4ZnNfZGlyMl9mcmVlX3QJCSpmcmVlOwkJLyogZnJlZXNwYWNlIHN0cnVjdHVyZSAqLwogCiAJZnJlZSA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGZyZWUtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9GUkVFX01BR0lDKTsKKwlBU1NFUlQoYmUzMl90b19jcHUoZnJlZS0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9GUkVFX01BR0lDKTsKIAl4ZnNfZGFfbG9nX2J1Zih0cCwgYnAsCiAJCSh1aW50KSgoY2hhciAqKSZmcmVlLT5iZXN0c1tmaXJzdF0gLSAoY2hhciAqKWZyZWUpLAogCQkodWludCkoKGNoYXIgKikmZnJlZS0+YmVzdHNbbGFzdF0gLSAoY2hhciAqKWZyZWUgKwpAQCAtOTQsNyArOTQsNyBAQAogCXhmc19kaXIyX2ZyZWVfdAkJKmZyZWU7CQkvKiBmcmVlc3BhY2Ugc3RydWN0dXJlICovCiAKIAlmcmVlID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQoZnJlZS0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0ZSRUVfTUFHSUMpOworCUFTU0VSVChiZTMyX3RvX2NwdShmcmVlLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0ZSRUVfTUFHSUMpOwogCXhmc19kYV9sb2dfYnVmKHRwLCBicCwgKHVpbnQpKChjaGFyICopJmZyZWUtPmhkciAtIChjaGFyICopZnJlZSksCiAJCSh1aW50KShzaXplb2YoeGZzX2RpcjJfZnJlZV9oZHJfdCkgLSAxKSk7CiB9CkBAIC0xMTQsMTQgKzExNCwxNCBAQAogCXhmc19kYWJ1Zl90CQkqZmJwOwkJLyogZnJlZXNwYWNlIGJ1ZmZlciAqLwogCXhmc19kaXIyX2RiX3QJCWZkYjsJCS8qIGZyZWVzcGFjZSBibG9jayBudW1iZXIgKi8KIAl4ZnNfZGlyMl9mcmVlX3QJCSpmcmVlOwkJLyogZnJlZXNwYWNlIHN0cnVjdHVyZSAqLwotCXhmc19kaXIyX2RhdGFfb2ZmX3QJKmZyb207CQkvKiBwb2ludGVyIHRvIGZyZWVzcGFjZSBlbnRyeSAqLworCV9fYmUxNgkJCSpmcm9tOwkJLyogcG9pbnRlciB0byBmcmVlc3BhY2UgZW50cnkgKi8KIAlpbnQJCQlpOwkJLyogbGVhZiBmcmVlc3BhY2UgaW5kZXggKi8KIAl4ZnNfZGlyMl9sZWFmX3QJCSpsZWFmOwkJLyogbGVhZiBzdHJ1Y3R1cmUgKi8KIAl4ZnNfZGlyMl9sZWFmX3RhaWxfdAkqbHRwOwkJLyogbGVhZiB0YWlsIHN0cnVjdHVyZSAqLwogCXhmc19tb3VudF90CQkqbXA7CQkvKiBmaWxlc3lzdGVtIG1vdW50IHBvaW50ICovCiAJaW50CQkJbjsJCS8qIGNvdW50IG9mIGxpdmUgZnJlZXNwYyBlbnRzICovCiAJeGZzX2RpcjJfZGF0YV9vZmZfdAlvZmY7CQkvKiBmcmVlc3BhY2UgZW50cnkgdmFsdWUgKi8KLQl4ZnNfZGlyMl9kYXRhX29mZl90CSp0bzsJCS8qIHBvaW50ZXIgdG8gZnJlZXNwYWNlIGVudHJ5ICovCisJX19iZTE2CQkJKnRvOwkJLyogcG9pbnRlciB0byBmcmVlc3BhY2UgZW50cnkgKi8KIAl4ZnNfdHJhbnNfdAkJKnRwOwkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCiAJeGZzX2RpcjJfdHJhY2VfYXJnc19iKCJsZWFmX3RvX25vZGUiLCBhcmdzLCBsYnApOwpAQCAtMTQ5LDI4ICsxNDksMjggQEAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGZyZWVzcGFjZSBibG9jayBoZWFkZXIuCiAJICovCi0JSU5UX1NFVChmcmVlLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCwgWEZTX0RJUjJfRlJFRV9NQUdJQyk7CisJZnJlZS0+aGRyLm1hZ2ljID0gY3B1X3RvX2JlMzIoWEZTX0RJUjJfRlJFRV9NQUdJQyk7CiAJZnJlZS0+aGRyLmZpcnN0ZGIgPSAwOwotCUFTU0VSVChJTlRfR0VUKGx0cC0+YmVzdGNvdW50LCBBUkNIX0NPTlZFUlQpIDw9ICh1aW50KWRwLT5pX2QuZGlfc2l6ZSAvIG1wLT5tX2RpcmJsa3NpemUpOwotCUlOVF9DT1BZKGZyZWUtPmhkci5udmFsaWQsIGx0cC0+YmVzdGNvdW50LCBBUkNIX0NPTlZFUlQpOworCUFTU0VSVChiZTMyX3RvX2NwdShsdHAtPmJlc3Rjb3VudCkgPD0gKHVpbnQpZHAtPmlfZC5kaV9zaXplIC8gbXAtPm1fZGlyYmxrc2l6ZSk7CisJZnJlZS0+aGRyLm52YWxpZCA9IGx0cC0+YmVzdGNvdW50OwogCS8qCiAJICogQ29weSBmcmVlc3BhY2UgZW50cmllcyBmcm9tIHRoZSBsZWFmIGJsb2NrIHRvIHRoZSBuZXcgYmxvY2suCiAJICogQ291bnQgYWN0aXZlIGVudHJpZXMuCiAJICovCiAJZm9yIChpID0gbiA9IDAsIGZyb20gPSBYRlNfRElSMl9MRUFGX0JFU1RTX1AobHRwKSwgdG8gPSBmcmVlLT5iZXN0czsKLQkgICAgIGkgPCBJTlRfR0VUKGx0cC0+YmVzdGNvdW50LCBBUkNIX0NPTlZFUlQpOyBpKyssIGZyb20rKywgdG8rKykgewotCQlpZiAoKG9mZiA9IElOVF9HRVQoKmZyb20sIEFSQ0hfQ09OVkVSVCkpICE9IE5VTExEQVRBT0ZGKQorCSAgICAgaSA8IGJlMzJfdG9fY3B1KGx0cC0+YmVzdGNvdW50KTsgaSsrLCBmcm9tKyssIHRvKyspIHsKKwkJaWYgKChvZmYgPSBiZTE2X3RvX2NwdSgqZnJvbSkpICE9IE5VTExEQVRBT0ZGKQogCQkJbisrOwotCQlJTlRfU0VUKCp0bywgQVJDSF9DT05WRVJULCBvZmYpOworCQkqdG8gPSBjcHVfdG9fYmUxNihvZmYpOwogCX0KLQlJTlRfU0VUKGZyZWUtPmhkci5udXNlZCwgQVJDSF9DT05WRVJULCBuKTsKLQlJTlRfU0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQsIFhGU19ESVIyX0xFQUZOX01BR0lDKTsKKwlmcmVlLT5oZHIubnVzZWQgPSBjcHVfdG9fYmUzMihuKTsKKwlsZWFmLT5oZHIuaW5mby5tYWdpYyA9IGNwdV90b19iZTE2KFhGU19ESVIyX0xFQUZOX01BR0lDKTsKIAkvKgogCSAqIExvZyBldmVyeXRoaW5nLgogCSAqLwogCXhmc19kaXIyX2xlYWZfbG9nX2hlYWRlcih0cCwgbGJwKTsKIAl4ZnNfZGlyMl9mcmVlX2xvZ19oZWFkZXIodHAsIGZicCk7Ci0JeGZzX2RpcjJfZnJlZV9sb2dfYmVzdHModHAsIGZicCwgMCwgSU5UX0dFVChmcmVlLT5oZHIubnZhbGlkLCBBUkNIX0NPTlZFUlQpIC0gMSk7CisJeGZzX2RpcjJfZnJlZV9sb2dfYmVzdHModHAsIGZicCwgMCwgYmUzMl90b19jcHUoZnJlZS0+aGRyLm52YWxpZCkgLSAxKTsKIAl4ZnNfZGFfYnVmX2RvbmUoZmJwKTsKIAl4ZnNfZGlyMl9sZWFmbl9jaGVjayhkcCwgbGJwKTsKIAlyZXR1cm4gMDsKQEAgLTIxNywxNSArMjE3LDE1IEBACiAJICogYSBjb21wYWN0LgogCSAqLwogCi0JaWYgKElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX01BWF9MRUFGX0VOVFMobXApKSB7CisJaWYgKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgPT0gWEZTX0RJUjJfTUFYX0xFQUZfRU5UUyhtcCkpIHsKIAkJaWYgKCFsZWFmLT5oZHIuc3RhbGUpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NQQyk7Ci0JCWNvbXBhY3QgPSBJTlRfR0VUKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKSA+IDE7CisJCWNvbXBhY3QgPSBiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpID4gMTsKIAl9IGVsc2UKIAkJY29tcGFjdCA9IDA7Ci0JQVNTRVJUKGluZGV4ID09IDAgfHwgSU5UX0dFVChsZWFmLT5lbnRzW2luZGV4IC0gMV0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSA8PSBhcmdzLT5oYXNodmFsKTsKLQlBU1NFUlQoaW5kZXggPT0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgfHwKLQkgICAgICAgSU5UX0dFVChsZWFmLT5lbnRzW2luZGV4XS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpID49IGFyZ3MtPmhhc2h2YWwpOworCUFTU0VSVChpbmRleCA9PSAwIHx8IGJlMzJfdG9fY3B1KGxlYWYtPmVudHNbaW5kZXggLSAxXS5oYXNodmFsKSA8PSBhcmdzLT5oYXNodmFsKTsKKwlBU1NFUlQoaW5kZXggPT0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSB8fAorCSAgICAgICBiZTMyX3RvX2NwdShsZWFmLT5lbnRzW2luZGV4XS5oYXNodmFsKSA+PSBhcmdzLT5oYXNodmFsKTsKIAogCWlmIChhcmdzLT5qdXN0Y2hlY2spCiAJCXJldHVybiAwOwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJICogU2V0IGltcG9zc2libGUgbG9nZ2luZyBpbmRpY2VzIGZvciB0aGlzIGNhc2UuCiAJICovCiAJZWxzZSBpZiAobGVhZi0+aGRyLnN0YWxlKSB7Ci0JCWxmbG9nbG93ID0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7CisJCWxmbG9nbG93ID0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsKIAkJbGZsb2doaWdoID0gLTE7CiAJfQogCS8qCkBAIC0yNTAsMTIgKzI1MCwxMiBAQAogCSAqLwogCWlmICghbGVhZi0+aGRyLnN0YWxlKSB7CiAJCWxlcCA9ICZsZWFmLT5lbnRzW2luZGV4XTsKLQkJaWYgKGluZGV4IDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpCisJCWlmIChpbmRleCA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpCiAJCQltZW1tb3ZlKGxlcCArIDEsIGxlcCwKLQkJCQkoSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSBpbmRleCkgKiBzaXplb2YoKmxlcCkpOworCQkJCShiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpIC0gaW5kZXgpICogc2l6ZW9mKCpsZXApKTsKIAkJbGZsb2dsb3cgPSBpbmRleDsKLQkJbGZsb2doaWdoID0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7Ci0JCUlOVF9NT0QobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQsICsxKTsKKwkJbGZsb2doaWdoID0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KTsKKwkJYmUxNl9hZGQoJmxlYWYtPmhkci5jb3VudCwgMSk7CiAJfQogCS8qCiAJICogVGhlcmUgYXJlIHN0YWxlIGVudHJpZXMuICBXZSdsbCB1c2Ugb25lIGZvciB0aGUgbmV3IGVudHJ5LgpAQCAtMjcxLDcgKzI3MSw3IEBACiAJCQkgKi8KIAkJCWZvciAobG93c3RhbGUgPSBpbmRleCAtIDE7CiAJCQkgICAgIGxvd3N0YWxlID49IDAgJiYKLQkJCQlJTlRfR0VUKGxlYWYtPmVudHNbbG93c3RhbGVdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgIT0KKwkJCQliZTMyX3RvX2NwdShsZWFmLT5lbnRzW2xvd3N0YWxlXS5hZGRyZXNzKSAhPQogCQkJCVhGU19ESVIyX05VTExfREFUQVBUUjsKIAkJCSAgICAgbG93c3RhbGUtLSkKIAkJCQljb250aW51ZTsKQEAgLTI4MSw4ICsyODEsOCBAQAogCQkJICogbG93c3RhbGUgYWxyZWFkeSBmb3VuZC4KIAkJCSAqLwogCQkJZm9yIChoaWdoc3RhbGUgPSBpbmRleDsKLQkJCSAgICAgaGlnaHN0YWxlIDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgJiYKLQkJCQlJTlRfR0VUKGxlYWYtPmVudHNbaGlnaHN0YWxlXS5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpICE9CisJCQkgICAgIGhpZ2hzdGFsZSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgJiYKKwkJCQliZTMyX3RvX2NwdShsZWFmLT5lbnRzW2hpZ2hzdGFsZV0uYWRkcmVzcykgIT0KIAkJCQlYRlNfRElSMl9OVUxMX0RBVEFQVFIgJiYKIAkJCQkobG93c3RhbGUgPCAwIHx8CiAJCQkJIGluZGV4IC0gbG93c3RhbGUgLSAxID49IGhpZ2hzdGFsZSAtIGluZGV4KTsKQEAgLTI5NCw5ICsyOTQsOSBAQAogCQkgKiBTaGlmdCBlbnRyaWVzIHVwIHRvd2FyZCB0aGUgc3RhbGUgc2xvdC4KIAkJICovCiAJCWlmIChsb3dzdGFsZSA+PSAwICYmCi0JCSAgICAoaGlnaHN0YWxlID09IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIHx8CisJCSAgICAoaGlnaHN0YWxlID09IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgfHwKIAkJICAgICBpbmRleCAtIGxvd3N0YWxlIC0gMSA8IGhpZ2hzdGFsZSAtIGluZGV4KSkgewotCQkJQVNTRVJUKElOVF9HRVQobGVhZi0+ZW50c1tsb3dzdGFsZV0uYWRkcmVzcywgQVJDSF9DT05WRVJUKSA9PQorCQkJQVNTRVJUKGJlMzJfdG9fY3B1KGxlYWYtPmVudHNbbG93c3RhbGVdLmFkZHJlc3MpID09CiAJCQkgICAgICAgWEZTX0RJUjJfTlVMTF9EQVRBUFRSKTsKIAkJCUFTU0VSVChpbmRleCAtIGxvd3N0YWxlIC0gMSA+PSAwKTsKIAkJCWlmIChpbmRleCAtIGxvd3N0YWxlIC0gMSA+IDApCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkJICogU2hpZnQgZW50cmllcyBkb3duIHRvd2FyZCB0aGUgc3RhbGUgc2xvdC4KIAkJICovCiAJCWVsc2UgewotCQkJQVNTRVJUKElOVF9HRVQobGVhZi0+ZW50c1toaWdoc3RhbGVdLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgPT0KKwkJCUFTU0VSVChiZTMyX3RvX2NwdShsZWFmLT5lbnRzW2hpZ2hzdGFsZV0uYWRkcmVzcykgPT0KIAkJCSAgICAgICBYRlNfRElSMl9OVUxMX0RBVEFQVFIpOwogCQkJQVNTRVJUKGhpZ2hzdGFsZSAtIGluZGV4ID49IDApOwogCQkJaWYgKGhpZ2hzdGFsZSAtIGluZGV4ID4gMCkKQEAgLTMyMywxMyArMzIzLDE0IEBACiAJCQlsZmxvZ2xvdyA9IE1JTihpbmRleCwgbGZsb2dsb3cpOwogCQkJbGZsb2doaWdoID0gTUFYKGhpZ2hzdGFsZSwgbGZsb2doaWdoKTsKIAkJfQotCQlJTlRfTU9EKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJULCAtMSk7CisJCWJlMTZfYWRkKCZsZWFmLT5oZHIuc3RhbGUsIC0xKTsKIAl9CiAJLyoKIAkgKiBJbnNlcnQgdGhlIG5ldyBlbnRyeSwgbG9nIGV2ZXJ5dGhpbmcuCiAJICovCi0JSU5UX1NFVChsZXAtPmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCwgYXJncy0+aGFzaHZhbCk7Ci0JSU5UX1NFVChsZXAtPmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCwgWEZTX0RJUjJfREJfT0ZGX1RPX0RBVEFQVFIobXAsIGFyZ3MtPmJsa25vLCBhcmdzLT5pbmRleCkpOworCWxlcC0+aGFzaHZhbCA9IGNwdV90b19iZTMyKGFyZ3MtPmhhc2h2YWwpOworCWxlcC0+YWRkcmVzcyA9IGNwdV90b19iZTMyKFhGU19ESVIyX0RCX09GRl9UT19EQVRBUFRSKG1wLAorCQkJCWFyZ3MtPmJsa25vLCBhcmdzLT5pbmRleCkpOwogCXhmc19kaXIyX2xlYWZfbG9nX2hlYWRlcih0cCwgYnApOwogCXhmc19kaXIyX2xlYWZfbG9nX2VudHModHAsIGJwLCBsZmxvZ2xvdywgbGZsb2doaWdoKTsKIAl4ZnNfZGlyMl9sZWFmbl9jaGVjayhkcCwgYnApOwpAQCAtMzUyLDE3ICszNTMsMTcgQEAKIAogCWxlYWYgPSBicC0+ZGF0YTsKIAltcCA9IGRwLT5pX21vdW50OwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgPD0gWEZTX0RJUjJfTUFYX0xFQUZfRU5UUyhtcCkpOwotCWZvciAoaSA9IHN0YWxlID0gMDsgaSA8IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOyBpKyspIHsKLQkJaWYgKGkgKyAxIDwgSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpIHsKLQkJCUFTU0VSVChJTlRfR0VUKGxlYWYtPmVudHNbaV0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSA8PQotCQkJICAgICAgIElOVF9HRVQobGVhZi0+ZW50c1tpICsgMV0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKSk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgPD0gWEZTX0RJUjJfTUFYX0xFQUZfRU5UUyhtcCkpOworCWZvciAoaSA9IHN0YWxlID0gMDsgaSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCk7IGkrKykgeworCQlpZiAoaSArIDEgPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpKSB7CisJCQlBU1NFUlQoYmUzMl90b19jcHUobGVhZi0+ZW50c1tpXS5oYXNodmFsKSA8PQorCQkJICAgICAgIGJlMzJfdG9fY3B1KGxlYWYtPmVudHNbaSArIDFdLmhhc2h2YWwpKTsKIAkJfQotCQlpZiAoSU5UX0dFVChsZWFmLT5lbnRzW2ldLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSKQorCQlpZiAoYmUzMl90b19jcHUobGVhZi0+ZW50c1tpXS5hZGRyZXNzKSA9PSBYRlNfRElSMl9OVUxMX0RBVEFQVFIpCiAJCQlzdGFsZSsrOwogCX0KLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCkgPT0gc3RhbGUpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpID09IHN0YWxlKTsKIH0KICNlbmRpZgkvKiBERUJVRyAqLwogCkBAIC0zNzgsMTIgKzM3OSwxMiBAQAogCXhmc19kaXIyX2xlYWZfdAkqbGVhZjsJCQkvKiBsZWFmIHN0cnVjdHVyZSAqLwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKTsKIAlpZiAoY291bnQpCi0JCSpjb3VudCA9IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCQkqY291bnQgPSBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpOwogCWlmICghbGVhZi0+aGRyLmNvdW50KQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gSU5UX0dFVChsZWFmLT5lbnRzW0lOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gMV0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKTsKKwlyZXR1cm4gYmUzMl90b19jcHUobGVhZi0+ZW50c1tiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpIC0gMV0uaGFzaHZhbCk7CiB9CiAKIC8qCkBAIC00MTksOSArNDIwLDkgQEAKIAl0cCA9IGFyZ3MtPnRyYW5zOwogCW1wID0gZHAtPmlfbW91bnQ7CiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKTsKICNpZmRlZiBfX0tFUk5FTF9fCi0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID4gMCk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgPiAwKTsKICNlbmRpZgogCXhmc19kaXIyX2xlYWZuX2NoZWNrKGRwLCBicCk7CiAJLyoKQEAgLTQ0Myw3ICs0NDQsNyBAQAogCQljdXJkYiA9IC0xOwogCQlsZW5ndGggPSBYRlNfRElSMl9EQVRBX0VOVFNJWkUoYXJncy0+bmFtZWxlbik7CiAJCWlmICgoZnJlZSA9IChjdXJicCA/IGN1cmJwLT5kYXRhIDogTlVMTCkpKQotCQkJQVNTRVJUKElOVF9HRVQoZnJlZS0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0ZSRUVfTUFHSUMpOworCQkJQVNTRVJUKGJlMzJfdG9fY3B1KGZyZWUtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfRlJFRV9NQUdJQyk7CiAJfQogCS8qCiAJICogRm9yIG90aGVycywgaXQncyBhIGRhdGEgYmxvY2sgYnVmZmVyLCBnZXQgdGhlIGJsb2NrIG51bWJlci4KQEAgLTQ1NiwxNyArNDU3LDE3IEBACiAJICogTG9vcCBvdmVyIGxlYWYgZW50cmllcyB3aXRoIHRoZSByaWdodCBoYXNoIHZhbHVlLgogCSAqLwogCWZvciAobGVwID0gJmxlYWYtPmVudHNbaW5kZXhdOwotCSAgICAgaW5kZXggPCBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAmJiBJTlRfR0VUKGxlcC0+aGFzaHZhbCwgQVJDSF9DT05WRVJUKSA9PSBhcmdzLT5oYXNodmFsOworCSAgICAgaW5kZXggPCBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpICYmIGJlMzJfdG9fY3B1KGxlcC0+aGFzaHZhbCkgPT0gYXJncy0+aGFzaHZhbDsKIAkgICAgIGxlcCsrLCBpbmRleCsrKSB7CiAJCS8qCiAJCSAqIFNraXAgc3RhbGUgbGVhZiBlbnRyaWVzLgogCQkgKi8KLQkJaWYgKElOVF9HRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKKwkJaWYgKGJlMzJfdG9fY3B1KGxlcC0+YWRkcmVzcykgPT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSKQogCQkJY29udGludWU7CiAJCS8qCiAJCSAqIFB1bGwgdGhlIGRhdGEgYmxvY2sgbnVtYmVyIGZyb20gdGhlIGVudHJ5LgogCQkgKi8KLQkJbmV3ZGIgPSBYRlNfRElSMl9EQVRBUFRSX1RPX0RCKG1wLCBJTlRfR0VUKGxlcC0+YWRkcmVzcywgQVJDSF9DT05WRVJUKSk7CisJCW5ld2RiID0gWEZTX0RJUjJfREFUQVBUUl9UT19EQihtcCwgYmUzMl90b19jcHUobGVwLT5hZGRyZXNzKSk7CiAJCS8qCiAJCSAqIEZvciBhZGRuYW1lLCB3ZSdyZSBsb29raW5nIGZvciBhIHBsYWNlIHRvIHB1dCB0aGUgbmV3IGVudHJ5LgogCQkgKiBXZSB3YW50IHRvIHVzZSBhIGRhdGEgYmxvY2sgd2l0aCBhbiBlbnRyeSBvZiBlcXVhbApAQCAtNTA2LDE1ICs1MDcsMTUgQEAKIAkJCQkJfQogCQkJCQljdXJmZGIgPSBuZXdmZGI7CiAJCQkJCWZyZWUgPSBjdXJicC0+ZGF0YTsKLQkJCQkJQVNTRVJUKElOVF9HRVQoZnJlZS0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09CisJCQkJCUFTU0VSVChiZTMyX3RvX2NwdShmcmVlLT5oZHIubWFnaWMpID09CiAJCQkJCSAgICAgICBYRlNfRElSMl9GUkVFX01BR0lDKTsKLQkJCQkJQVNTRVJUKChJTlRfR0VUKGZyZWUtPmhkci5maXJzdGRiLCBBUkNIX0NPTlZFUlQpICUKKwkJCQkJQVNTRVJUKChiZTMyX3RvX2NwdShmcmVlLT5oZHIuZmlyc3RkYikgJQogCQkJCQkJWEZTX0RJUjJfTUFYX0ZSRUVfQkVTVFMobXApKSA9PQogCQkJCQkgICAgICAgMCk7Ci0JCQkJCUFTU0VSVChJTlRfR0VUKGZyZWUtPmhkci5maXJzdGRiLCBBUkNIX0NPTlZFUlQpIDw9IGN1cmRiKTsKKwkJCQkJQVNTRVJUKGJlMzJfdG9fY3B1KGZyZWUtPmhkci5maXJzdGRiKSA8PSBjdXJkYik7CiAJCQkJCUFTU0VSVChjdXJkYiA8Ci0JCQkJCSAgICAgICBJTlRfR0VUKGZyZWUtPmhkci5maXJzdGRiLCBBUkNIX0NPTlZFUlQpICsKLQkJCQkJICAgICAgIElOVF9HRVQoZnJlZS0+aGRyLm52YWxpZCwgQVJDSF9DT05WRVJUKSk7CisJCQkJCSAgICAgICBiZTMyX3RvX2NwdShmcmVlLT5oZHIuZmlyc3RkYikgKworCQkJCQkgICAgICAgYmUzMl90b19jcHUoZnJlZS0+aGRyLm52YWxpZCkpOwogCQkJCX0KIAkJCQkvKgogCQkJCSAqIEdldCB0aGUgaW5kZXggZm9yIG91ciBlbnRyeS4KQEAgLTUyMywxMiArNTI0LDEyIEBACiAJCQkJLyoKIAkJCQkgKiBJZiBpdCBoYXMgcm9vbSwgcmV0dXJuIGl0LgogCQkJCSAqLwotCQkJCWlmICh1bmxpa2VseShJTlRfR0VUKGZyZWUtPmJlc3RzW2ZpXSwgQVJDSF9DT05WRVJUKSA9PSBOVUxMREFUQU9GRikpIHsKKwkJCQlpZiAodW5saWtlbHkoYmUxNl90b19jcHUoZnJlZS0+YmVzdHNbZmldKSA9PSBOVUxMREFUQU9GRikpIHsKIAkJCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2RpcjJfbGVhZm5fbG9va3VwX2ludCIsCiAJCQkJCQkJIFhGU19FUlJMRVZFTF9MT1csIG1wKTsKIAkJCQkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCQkJCX0KLQkJCQlpZiAoSU5UX0dFVChmcmVlLT5iZXN0c1tmaV0sIEFSQ0hfQ09OVkVSVCkgPj0gbGVuZ3RoKSB7CisJCQkJaWYgKGJlMTZfdG9fY3B1KGZyZWUtPmJlc3RzW2ZpXSkgPj0gbGVuZ3RoKSB7CiAJCQkJCSppbmRleHAgPSBpbmRleDsKIAkJCQkJc3RhdGUtPmV4dHJhdmFsaWQgPSAxOwogCQkJCQlzdGF0ZS0+ZXh0cmFibGsuYnAgPSBjdXJicDsKQEAgLTU3Miw3ICs1NzMsNyBAQAogCQkJICovCiAJCQlkZXAgPSAoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICopCiAJCQkgICAgICAoKGNoYXIgKiljdXJicC0+ZGF0YSArCi0JCQkgICAgICAgWEZTX0RJUjJfREFUQVBUUl9UT19PRkYobXAsIElOVF9HRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpKSk7CisJCQkgICAgICAgWEZTX0RJUjJfREFUQVBUUl9UT19PRkYobXAsIGJlMzJfdG9fY3B1KGxlcC0+YWRkcmVzcykpKTsKIAkJCS8qCiAJCQkgKiBDb21wYXJlIHRoZSBlbnRyeSwgcmV0dXJuIGl0IGlmIGl0IG1hdGNoZXMuCiAJCQkgKi8KQEAgLTYxOSw3ICs2MjAsNyBAQAogCSAqIFJldHVybiB0aGUgZmluYWwgaW5kZXgsIHRoYXQgd2lsbCBiZSB0aGUgaW5zZXJ0aW9uIHBvaW50LgogCSAqLwogCSppbmRleHAgPSBpbmRleDsKLQlBU1NFUlQoaW5kZXggPT0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgfHwgYXJncy0+b2tub2VudCk7CisJQVNTRVJUKGluZGV4ID09IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgfHwgYXJncy0+b2tub2VudCk7CiAJcmV0dXJuIFhGU19FUlJPUihFTk9FTlQpOwogfQogCkBAIC02NTcsMTIgKzY1OCwxMiBAQAogCSAqIGRlc3RpbmF0aW9uIGxlYWYgZW50cmllcywgb3BlbiB1cCBhIGhvbGUgaW4gdGhlIGRlc3RpbmF0aW9uCiAJICogdG8gaG9sZCB0aGUgbmV3IGVudHJpZXMuCiAJICovCi0JaWYgKHN0YXJ0X2QgPCBJTlRfR0VUKGxlYWZfZC0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKSB7CisJaWYgKHN0YXJ0X2QgPCBiZTE2X3RvX2NwdShsZWFmX2QtPmhkci5jb3VudCkpIHsKIAkJbWVtbW92ZSgmbGVhZl9kLT5lbnRzW3N0YXJ0X2QgKyBjb3VudF0sICZsZWFmX2QtPmVudHNbc3RhcnRfZF0sCi0JCQkoSU5UX0dFVChsZWFmX2QtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIHN0YXJ0X2QpICoKKwkJCShiZTE2X3RvX2NwdShsZWFmX2QtPmhkci5jb3VudCkgLSBzdGFydF9kKSAqCiAJCQlzaXplb2YoeGZzX2RpcjJfbGVhZl9lbnRyeV90KSk7CiAJCXhmc19kaXIyX2xlYWZfbG9nX2VudHModHAsIGJwX2QsIHN0YXJ0X2QgKyBjb3VudCwKLQkJCWNvdW50ICsgSU5UX0dFVChsZWFmX2QtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDEpOworCQkJY291bnQgKyBiZTE2X3RvX2NwdShsZWFmX2QtPmhkci5jb3VudCkgLSAxKTsKIAl9CiAJLyoKIAkgKiBJZiB0aGUgc291cmNlIGhhcyBzdGFsZSBsZWF2ZXMsIGNvdW50IHRoZSBvbmVzIGluIHRoZSBjb3B5IHJhbmdlCkBAIC02NzIsNyArNjczLDcgQEAKIAkJaW50CWk7CQkJLyogdGVtcCBsZWFmIGluZGV4ICovCiAKIAkJZm9yIChpID0gc3RhcnRfcywgc3RhbGUgPSAwOyBpIDwgc3RhcnRfcyArIGNvdW50OyBpKyspIHsKLQkJCWlmIChJTlRfR0VUKGxlYWZfcy0+ZW50c1tpXS5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKKwkJCWlmIChiZTMyX3RvX2NwdShsZWFmX3MtPmVudHNbaV0uYWRkcmVzcykgPT0gWEZTX0RJUjJfTlVMTF9EQVRBUFRSKQogCQkJCXN0YWxlKys7CiAJCX0KIAl9IGVsc2UKQEAgLTY4Nyw3ICs2ODgsNyBAQAogCSAqIElmIHRoZXJlIGFyZSBzb3VyY2UgZW50cmllcyBhZnRlciB0aGUgb25lcyB3ZSBjb3BpZWQsCiAJICogZGVsZXRlIHRoZSBvbmVzIHdlIGNvcGllZCBieSBzbGlkaW5nIHRoZSBuZXh0IG9uZXMgZG93bi4KIAkgKi8KLQlpZiAoc3RhcnRfcyArIGNvdW50IDwgSU5UX0dFVChsZWFmX3MtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkgeworCWlmIChzdGFydF9zICsgY291bnQgPCBiZTE2X3RvX2NwdShsZWFmX3MtPmhkci5jb3VudCkpIHsKIAkJbWVtbW92ZSgmbGVhZl9zLT5lbnRzW3N0YXJ0X3NdLCAmbGVhZl9zLT5lbnRzW3N0YXJ0X3MgKyBjb3VudF0sCiAJCQljb3VudCAqIHNpemVvZih4ZnNfZGlyMl9sZWFmX2VudHJ5X3QpKTsKIAkJeGZzX2RpcjJfbGVhZl9sb2dfZW50cyh0cCwgYnBfcywgc3RhcnRfcywgc3RhcnRfcyArIGNvdW50IC0gMSk7CkBAIC02OTUsMTAgKzY5NiwxMCBAQAogCS8qCiAJICogVXBkYXRlIHRoZSBoZWFkZXJzIGFuZCBsb2cgdGhlbS4KIAkgKi8KLQlJTlRfTU9EKGxlYWZfcy0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQsIC0oY291bnQpKTsKLQlJTlRfTU9EKGxlYWZfcy0+aGRyLnN0YWxlLCBBUkNIX0NPTlZFUlQsIC0oc3RhbGUpKTsKLQlJTlRfTU9EKGxlYWZfZC0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQsIGNvdW50KTsKLQlJTlRfTU9EKGxlYWZfZC0+aGRyLnN0YWxlLCBBUkNIX0NPTlZFUlQsIHN0YWxlKTsKKwliZTE2X2FkZCgmbGVhZl9zLT5oZHIuY291bnQsIC0oY291bnQpKTsKKwliZTE2X2FkZCgmbGVhZl9zLT5oZHIuc3RhbGUsIC0oc3RhbGUpKTsKKwliZTE2X2FkZCgmbGVhZl9kLT5oZHIuY291bnQsIGNvdW50KTsKKwliZTE2X2FkZCgmbGVhZl9kLT5oZHIuc3RhbGUsIHN0YWxlKTsKIAl4ZnNfZGlyMl9sZWFmX2xvZ19oZWFkZXIodHAsIGJwX3MpOwogCXhmc19kaXIyX2xlYWZfbG9nX2hlYWRlcih0cCwgYnBfZCk7CiAJeGZzX2RpcjJfbGVhZm5fY2hlY2soYXJncy0+ZHAsIGJwX3MpOwpAQCAtNzE5LDEzICs3MjAsMTMgQEAKIAogCWxlYWYxID0gbGVhZjFfYnAtPmRhdGE7CiAJbGVhZjIgPSBsZWFmMl9icC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmMS0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOwotCUFTU0VSVChJTlRfR0VUKGxlYWYyLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7Ci0JaWYgKElOVF9HRVQobGVhZjEtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSA+IDAgJiYKLQkgICAgSU5UX0dFVChsZWFmMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID4gMCAmJgotCSAgICAoSU5UX0dFVChsZWFmMi0+ZW50c1swXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpIDwgSU5UX0dFVChsZWFmMS0+ZW50c1swXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpIHx8Ci0JICAgICBJTlRfR0VUKGxlYWYyLT5lbnRzW0lOVF9HRVQobGVhZjItPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPAotCSAgICAgSU5UX0dFVChsZWFmMS0+ZW50c1tJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSAxXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKSkKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZjEtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYyLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOworCWlmIChiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KSA+IDAgJiYKKwkgICAgYmUxNl90b19jcHUobGVhZjItPmhkci5jb3VudCkgPiAwICYmCisJICAgIChiZTMyX3RvX2NwdShsZWFmMi0+ZW50c1swXS5oYXNodmFsKSA8IGJlMzJfdG9fY3B1KGxlYWYxLT5lbnRzWzBdLmhhc2h2YWwpIHx8CisJICAgICBiZTMyX3RvX2NwdShsZWFmMi0+ZW50c1tiZTE2X3RvX2NwdShsZWFmMi0+aGRyLmNvdW50KSAtIDFdLmhhc2h2YWwpIDwKKwkgICAgIGJlMzJfdG9fY3B1KGxlYWYxLT5lbnRzW2JlMTZfdG9fY3B1KGxlYWYxLT5oZHIuY291bnQpIC0gMV0uaGFzaHZhbCkpKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTc2OCw5ICs3NjksOSBAQAogCX0KIAlsZWFmMSA9IGJsazEtPmJwLT5kYXRhOwogCWxlYWYyID0gYmxrMi0+YnAtPmRhdGE7Ci0Jb2xkc3VtID0gSU5UX0dFVChsZWFmMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICsgSU5UX0dFVChsZWFmMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCW9sZHN1bSA9IGJlMTZfdG9fY3B1KGxlYWYxLT5oZHIuY291bnQpICsgYmUxNl90b19jcHUobGVhZjItPmhkci5jb3VudCk7CiAjaWZkZWYgREVCVUcKLQlvbGRzdGFsZSA9IElOVF9HRVQobGVhZjEtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKSArIElOVF9HRVQobGVhZjItPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKTsKKwlvbGRzdGFsZSA9IGJlMTZfdG9fY3B1KGxlYWYxLT5oZHIuc3RhbGUpICsgYmUxNl90b19jcHUobGVhZjItPmhkci5zdGFsZSk7CiAjZW5kaWYKIAltaWQgPSBvbGRzdW0gPj4gMTsKIAkvKgpAQCAtNzgwLDEwICs3ODEsMTAgQEAKIAlpZiAob2xkc3VtICYgMSkgewogCQl4ZnNfZGFoYXNoX3QJbWlkaGFzaDsJLyogbWlkZGxlIGVudHJ5IGhhc2ggdmFsdWUgKi8KIAotCQlpZiAobWlkID49IElOVF9HRVQobGVhZjEtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkKLQkJCW1pZGhhc2ggPSBJTlRfR0VUKGxlYWYyLT5lbnRzW21pZCAtIElOVF9HRVQobGVhZjEtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKV0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKTsKKwkJaWYgKG1pZCA+PSBiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KSkKKwkJCW1pZGhhc2ggPSBiZTMyX3RvX2NwdShsZWFmMi0+ZW50c1ttaWQgLSBiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KV0uaGFzaHZhbCk7CiAJCWVsc2UKLQkJCW1pZGhhc2ggPSBJTlRfR0VUKGxlYWYxLT5lbnRzW21pZF0uaGFzaHZhbCwgQVJDSF9DT05WRVJUKTsKKwkJCW1pZGhhc2ggPSBiZTMyX3RvX2NwdShsZWFmMS0+ZW50c1ttaWRdLmhhc2h2YWwpOwogCQlpc2xlZnQgPSBhcmdzLT5oYXNodmFsIDw9IG1pZGhhc2g7CiAJfQogCS8qCkBAIC03OTcsMzAgKzc5OCwzMCBAQAogCSAqIENhbGN1bGF0ZSBtb3ZlZCBlbnRyeSBjb3VudC4gIFBvc2l0aXZlIG1lYW5zIGxlZnQtdG8tcmlnaHQsCiAJICogbmVnYXRpdmUgbWVhbnMgcmlnaHQtdG8tbGVmdC4gIFRoZW4gbW92ZSB0aGUgZW50cmllcy4KIAkgKi8KLQljb3VudCA9IElOVF9HRVQobGVhZjEtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIG1pZCArIChpc2xlZnQgPT0gMCk7CisJY291bnQgPSBiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KSAtIG1pZCArIChpc2xlZnQgPT0gMCk7CiAJaWYgKGNvdW50ID4gMCkKIAkJeGZzX2RpcjJfbGVhZm5fbW92ZWVudHMoYXJncywgYmxrMS0+YnAsCi0JCQlJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSBjb3VudCwgYmxrMi0+YnAsIDAsIGNvdW50KTsKKwkJCWJlMTZfdG9fY3B1KGxlYWYxLT5oZHIuY291bnQpIC0gY291bnQsIGJsazItPmJwLCAwLCBjb3VudCk7CiAJZWxzZSBpZiAoY291bnQgPCAwKQogCQl4ZnNfZGlyMl9sZWFmbl9tb3ZlZW50cyhhcmdzLCBibGsyLT5icCwgMCwgYmxrMS0+YnAsCi0JCQlJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCksIGNvdW50KTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpICsgSU5UX0dFVChsZWFmMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID09IG9sZHN1bSk7Ci0JQVNTRVJUKElOVF9HRVQobGVhZjEtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKSArIElOVF9HRVQobGVhZjItPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKSA9PSBvbGRzdGFsZSk7CisJCQliZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KSwgY291bnQpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KSArIGJlMTZfdG9fY3B1KGxlYWYyLT5oZHIuY291bnQpID09IG9sZHN1bSk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYxLT5oZHIuc3RhbGUpICsgYmUxNl90b19jcHUobGVhZjItPmhkci5zdGFsZSkgPT0gb2xkc3RhbGUpOwogCS8qCiAJICogTWFyayB3aGV0aGVyIHdlJ3JlIGluc2VydGluZyBpbnRvIHRoZSBvbGQgb3IgbmV3IGxlYWYuCiAJICovCi0JaWYgKElOVF9HRVQobGVhZjEtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSA8IElOVF9HRVQobGVhZjItPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSkKKwlpZiAoYmUxNl90b19jcHUobGVhZjEtPmhkci5jb3VudCkgPCBiZTE2X3RvX2NwdShsZWFmMi0+aGRyLmNvdW50KSkKIAkJc3RhdGUtPmlubGVhZiA9IHN3YXA7Ci0JZWxzZSBpZiAoSU5UX0dFVChsZWFmMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID4gSU5UX0dFVChsZWFmMi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKQorCWVsc2UgaWYgKGJlMTZfdG9fY3B1KGxlYWYxLT5oZHIuY291bnQpID4gYmUxNl90b19jcHUobGVhZjItPmhkci5jb3VudCkpCiAJCXN0YXRlLT5pbmxlYWYgPSAhc3dhcDsKIAllbHNlCiAJCXN0YXRlLT5pbmxlYWYgPQotCQkJc3dhcCBeIChibGsxLT5pbmRleCA8PSBJTlRfR0VUKGxlYWYxLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpOworCQkJc3dhcCBeIChibGsxLT5pbmRleCA8PSBiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmNvdW50KSk7CiAJLyoKIAkgKiBBZGp1c3QgdGhlIGV4cGVjdGVkIGluZGV4IGZvciBpbnNlcnRpb24uCiAJICovCiAJaWYgKCFzdGF0ZS0+aW5sZWFmKQotCQlibGsyLT5pbmRleCA9IGJsazEtPmluZGV4IC0gSU5UX0dFVChsZWFmMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOworCQlibGsyLT5pbmRleCA9IGJsazEtPmluZGV4IC0gYmUxNl90b19jcHUobGVhZjEtPmhkci5jb3VudCk7CiAJCiAJLyogCiAJICogRmluYWxseSBzYW5pdHkgY2hlY2sganVzdCB0byBtYWtlIHN1cmUgd2UgYXJlIG5vdCByZXR1cm5pbmcgYSBuZWdhdGl2ZSBpbmRleCAKQEAgLTg2Nyw3ICs4NjgsNyBAQAogCXRwID0gYXJncy0+dHJhbnM7CiAJbXAgPSBkcC0+aV9tb3VudDsKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOwogCS8qCiAJICogUG9pbnQgdG8gdGhlIGVudHJ5IHdlJ3JlIHJlbW92aW5nLgogCSAqLwpAQCAtODc1LDE3ICs4NzYsMTcgQEAKIAkvKgogCSAqIEV4dHJhY3QgdGhlIGRhdGEgYmxvY2sgYW5kIG9mZnNldCBmcm9tIHRoZSBlbnRyeS4KIAkgKi8KLQlkYiA9IFhGU19ESVIyX0RBVEFQVFJfVE9fREIobXAsIElOVF9HRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpKTsKKwlkYiA9IFhGU19ESVIyX0RBVEFQVFJfVE9fREIobXAsIGJlMzJfdG9fY3B1KGxlcC0+YWRkcmVzcykpOwogCUFTU0VSVChkYmxrLT5ibGtubyA9PSBkYik7Ci0Jb2ZmID0gWEZTX0RJUjJfREFUQVBUUl9UT19PRkYobXAsIElOVF9HRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpKTsKKwlvZmYgPSBYRlNfRElSMl9EQVRBUFRSX1RPX09GRihtcCwgYmUzMl90b19jcHUobGVwLT5hZGRyZXNzKSk7CiAJQVNTRVJUKGRibGstPmluZGV4ID09IG9mZik7CiAJLyoKIAkgKiBLaWxsIHRoZSBsZWFmIGVudHJ5IGJ5IG1hcmtpbmcgaXQgc3RhbGUuCiAJICogTG9nIHRoZSBsZWFmIGJsb2NrIGNoYW5nZXMuCiAJICovCi0JSU5UX01PRChsZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCwgKzEpOworCWJlMTZfYWRkKCZsZWFmLT5oZHIuc3RhbGUsIDEpOwogCXhmc19kaXIyX2xlYWZfbG9nX2hlYWRlcih0cCwgYnApOwotCUlOVF9TRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQsIFhGU19ESVIyX05VTExfREFUQVBUUik7CisJbGVwLT5hZGRyZXNzID0gY3B1X3RvX2JlMzIoWEZTX0RJUjJfTlVMTF9EQVRBUFRSKTsKIAl4ZnNfZGlyMl9sZWFmX2xvZ19lbnRzKHRwLCBicCwgaW5kZXgsIGluZGV4KTsKIAkvKgogCSAqIE1ha2UgdGhlIGRhdGEgZW50cnkgZnJlZS4gIEtlZXAgdHJhY2sgb2YgdGhlIGxvbmdlc3QgZnJlZXNwYWNlCkBAIC04OTQsNyArODk1LDcgQEAKIAlkYnAgPSBkYmxrLT5icDsKIAlkYXRhID0gZGJwLT5kYXRhOwogCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKikoKGNoYXIgKilkYXRhICsgb2ZmKTsKLQlsb25nZXN0ID0gSU5UX0dFVChkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpOworCWxvbmdlc3QgPSBiZTE2X3RvX2NwdShkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoKTsKIAluZWVkbG9nID0gbmVlZHNjYW4gPSAwOwogCXhmc19kaXIyX2RhdGFfbWFrZV9mcmVlKHRwLCBkYnAsIG9mZiwKIAkJWEZTX0RJUjJfREFUQV9FTlRTSVpFKGRlcC0+bmFtZWxlbiksICZuZWVkbG9nLCAmbmVlZHNjYW4pOwpAQCAtOTExLDcgKzkxMiw3IEBACiAJICogSWYgdGhlIGxvbmdlc3QgZGF0YSBibG9jayBmcmVlc3BhY2UgY2hhbmdlcywgbmVlZCB0byB1cGRhdGUKIAkgKiB0aGUgY29ycmVzcG9uZGluZyBmcmVlYmxvY2sgZW50cnkuCiAJICovCi0JaWYgKGxvbmdlc3QgPCBJTlRfR0VUKGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCkpIHsKKwlpZiAobG9uZ2VzdCA8IGJlMTZfdG9fY3B1KGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgpKSB7CiAJCWludAkJZXJyb3I7CQkvKiBlcnJvciByZXR1cm4gdmFsdWUgKi8KIAkJeGZzX2RhYnVmX3QJKmZicDsJCS8qIGZyZWVibG9jayBidWZmZXIgKi8KIAkJeGZzX2RpcjJfZGJfdAlmZGI7CQkvKiBmcmVlYmxvY2sgYmxvY2sgbnVtYmVyICovCkBAIC05MjksMTUgKzkzMCwxNSBAQAogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCWZyZWUgPSBmYnAtPmRhdGE7Ci0JCUFTU0VSVChJTlRfR0VUKGZyZWUtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9GUkVFX01BR0lDKTsKLQkJQVNTRVJUKElOVF9HRVQoZnJlZS0+aGRyLmZpcnN0ZGIsIEFSQ0hfQ09OVkVSVCkgPT0KKwkJQVNTRVJUKGJlMzJfdG9fY3B1KGZyZWUtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfRlJFRV9NQUdJQyk7CisJCUFTU0VSVChiZTMyX3RvX2NwdShmcmVlLT5oZHIuZmlyc3RkYikgPT0KIAkJICAgICAgIFhGU19ESVIyX01BWF9GUkVFX0JFU1RTKG1wKSAqCiAJCSAgICAgICAoZmRiIC0gWEZTX0RJUjJfRlJFRV9GSVJTVERCKG1wKSkpOwogCQkvKgogCQkgKiBDYWxjdWxhdGUgd2hpY2ggZW50cnkgd2UgbmVlZCB0byBmaXguCiAJCSAqLwogCQlmaW5kZXggPSBYRlNfRElSMl9EQl9UT19GRElOREVYKG1wLCBkYik7Ci0JCWxvbmdlc3QgPSBJTlRfR0VUKGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCk7CisJCWxvbmdlc3QgPSBiZTE2X3RvX2NwdShkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoKTsKIAkJLyoKIAkJICogSWYgdGhlIGRhdGEgYmxvY2sgaXMgbm93IGVtcHR5IHdlIGNhbiBnZXQgcmlkIG9mIGl0CiAJCSAqICh1c3VhbGx5KS4KQEAgLTk2OSw3ICs5NzAsNyBAQAogCQkJLyoKIAkJCSAqIE9uZSBsZXNzIHVzZWQgZW50cnkgaW4gdGhlIGZyZWUgdGFibGUuCiAJCQkgKi8KLQkJCUlOVF9NT0QoZnJlZS0+aGRyLm51c2VkLCBBUkNIX0NPTlZFUlQsIC0xKTsKKwkJCWZyZWUtPmhkci5udXNlZCA9IGNwdV90b19iZTMyKC0xKTsKIAkJCXhmc19kaXIyX2ZyZWVfbG9nX2hlYWRlcih0cCwgZmJwKTsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIHdhcyB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgdGFibGUsIHdlIGNhbgpAQCAtOTc3LDIxICs5NzgsMjEgQEAKIAkJCSAqIGVudHJpZXMgYXQgdGhlIGVuZCByZWZlcnJpbmcgdG8gbm9uLWV4aXN0ZW50CiAJCQkgKiBkYXRhIGJsb2NrcywgZ2V0IHRob3NlIHRvby4KIAkJCSAqLwotCQkJaWYgKGZpbmRleCA9PSBJTlRfR0VUKGZyZWUtPmhkci5udmFsaWQsIEFSQ0hfQ09OVkVSVCkgLSAxKSB7CisJCQlpZiAoZmluZGV4ID09IGJlMzJfdG9fY3B1KGZyZWUtPmhkci5udmFsaWQpIC0gMSkgewogCQkJCWludAlpOwkJLyogZnJlZSBlbnRyeSBpbmRleCAqLwogCiAJCQkJZm9yIChpID0gZmluZGV4IC0gMTsKLQkJCQkgICAgIGkgPj0gMCAmJiBJTlRfR0VUKGZyZWUtPmJlc3RzW2ldLCBBUkNIX0NPTlZFUlQpID09IE5VTExEQVRBT0ZGOworCQkJCSAgICAgaSA+PSAwICYmIGJlMTZfdG9fY3B1KGZyZWUtPmJlc3RzW2ldKSA9PSBOVUxMREFUQU9GRjsKIAkJCQkgICAgIGktLSkKIAkJCQkJY29udGludWU7Ci0JCQkJSU5UX1NFVChmcmVlLT5oZHIubnZhbGlkLCBBUkNIX0NPTlZFUlQsIGkgKyAxKTsKKwkJCQlmcmVlLT5oZHIubnZhbGlkID0gY3B1X3RvX2JlMzIoaSArIDEpOwogCQkJCWxvZ2ZyZWUgPSAwOwogCQkJfQogCQkJLyoKIAkJCSAqIE5vdCB0aGUgbGFzdCBlbnRyeSwganVzdCBwdW5jaCBpdCBvdXQuCiAJCQkgKi8KIAkJCWVsc2UgewotCQkJCUlOVF9TRVQoZnJlZS0+YmVzdHNbZmluZGV4XSwgQVJDSF9DT05WRVJULCBOVUxMREFUQU9GRik7CisJCQkJZnJlZS0+YmVzdHNbZmluZGV4XSA9IGNwdV90b19iZTE2KE5VTExEQVRBT0ZGKTsKIAkJCQlsb2dmcmVlID0gMTsKIAkJCX0KIAkJCS8qCkBAIC0xMDE3LDcgKzEwMTgsNyBAQAogCQkgKiB0aGUgbmV3IHZhbHVlLgogCQkgKi8KIAkJZWxzZSB7Ci0JCQlJTlRfU0VUKGZyZWUtPmJlc3RzW2ZpbmRleF0sIEFSQ0hfQ09OVkVSVCwgbG9uZ2VzdCk7CisJCQlmcmVlLT5iZXN0c1tmaW5kZXhdID0gY3B1X3RvX2JlMTYobG9uZ2VzdCk7CiAJCQlsb2dmcmVlID0gMTsKIAkJfQogCQkvKgpAQCAtMTAzOSw3ICsxMDQwLDcgQEAKIAkqcnZhbCA9CiAJCSgodWludClzaXplb2YobGVhZi0+aGRyKSArCiAJCSAodWludClzaXplb2YobGVhZi0+ZW50c1swXSkgKgotCQkgKElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIC0gSU5UX0dFVChsZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCkpKSA8CisJCSAoYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSAtIGJlMTZfdG9fY3B1KGxlYWYtPmhkci5zdGFsZSkpKSA8CiAJCW1wLT5tX2Rpcl9tYWdpY3BjdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMzgsOSArMTEzOSw5IEBACiAJICovCiAJYmxrID0gJnN0YXRlLT5wYXRoLmJsa1tzdGF0ZS0+cGF0aC5hY3RpdmUgLSAxXTsKIAlpbmZvID0gYmxrLT5icC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChpbmZvLT5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGluZm8tPm1hZ2ljKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CiAJbGVhZiA9ICh4ZnNfZGlyMl9sZWFmX3QgKilpbmZvOwotCWNvdW50ID0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSBJTlRfR0VUKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKTsKKwljb3VudCA9IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkgLSBiZTE2X3RvX2NwdShsZWFmLT5oZHIuc3RhbGUpOwogCWJ5dGVzID0gKHVpbnQpc2l6ZW9mKGxlYWYtPmhkcikgKyBjb3VudCAqICh1aW50KXNpemVvZihsZWFmLT5lbnRzWzBdKTsKIAlpZiAoYnl0ZXMgPiAoc3RhdGUtPmJsb2Nrc2l6ZSA+PiAxKSkgewogCQkvKgpAQCAtMTE2MCw3ICsxMTYxLDcgQEAKIAkJICogTWFrZSBhbHRwYXRoIHBvaW50IHRvIHRoZSBibG9jayB3ZSB3YW50IHRvIGtlZXAgYW5kCiAJCSAqIHBhdGggcG9pbnQgdG8gdGhlIGJsb2NrIHdlIHdhbnQgdG8gZHJvcCAodGhpcyBvbmUpLgogCQkgKi8KLQkJZm9yd2FyZCA9IGluZm8tPmZvcnc7CisJCWZvcndhcmQgPSAoaW5mby0+Zm9ydyAhPSAwKTsKIAkJbWVtY3B5KCZzdGF0ZS0+YWx0cGF0aCwgJnN0YXRlLT5wYXRoLCBzaXplb2Yoc3RhdGUtPnBhdGgpKTsKIAkJZXJyb3IgPSB4ZnNfZGFfcGF0aF9zaGlmdChzdGF0ZSwgJnN0YXRlLT5hbHRwYXRoLCBmb3J3YXJkLCAwLAogCQkJJnJ2YWwpOwpAQCAtMTE3Niw5ICsxMTc3LDkgQEAKIAkgKiBXZSBwcmVmZXIgY29hbGVzY2luZyB3aXRoIHRoZSBsb3dlciBudW1iZXJlZCBzaWJsaW5nIHNvIGFzCiAJICogdG8gc2hyaW5rIGEgZGlyZWN0b3J5IG92ZXIgdGltZS4KIAkgKi8KLQlmb3J3YXJkID0gSU5UX0dFVChpbmZvLT5mb3J3LCBBUkNIX0NPTlZFUlQpIDwgSU5UX0dFVChpbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQpOworCWZvcndhcmQgPSBiZTMyX3RvX2NwdShpbmZvLT5mb3J3KSA8IGJlMzJfdG9fY3B1KGluZm8tPmJhY2spOwogCWZvciAoaSA9IDAsIGJwID0gTlVMTDsgaSA8IDI7IGZvcndhcmQgPSAhZm9yd2FyZCwgaSsrKSB7Ci0JCWJsa25vID0gZm9yd2FyZCA/SU5UX0dFVCggaW5mby0+Zm9ydywgQVJDSF9DT05WRVJUKSA6IElOVF9HRVQoaW5mby0+YmFjaywgQVJDSF9DT05WRVJUKTsKKwkJYmxrbm8gPSBmb3J3YXJkID8gYmUzMl90b19jcHUoaW5mby0+Zm9ydykgOiBiZTMyX3RvX2NwdShpbmZvLT5iYWNrKTsKIAkJaWYgKGJsa25vID09IDApCiAJCQljb250aW51ZTsKIAkJLyoKQEAgLTExOTQsMTEgKzExOTUsMTEgQEAKIAkJICogQ291bnQgYnl0ZXMgaW4gdGhlIHR3byBibG9ja3MgY29tYmluZWQuCiAJCSAqLwogCQlsZWFmID0gKHhmc19kaXIyX2xlYWZfdCAqKWluZm87Ci0JCWNvdW50ID0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkgLSBJTlRfR0VUKGxlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKTsKKwkJY291bnQgPSBiZTE2X3RvX2NwdShsZWFmLT5oZHIuY291bnQpIC0gYmUxNl90b19jcHUobGVhZi0+aGRyLnN0YWxlKTsKIAkJYnl0ZXMgPSBzdGF0ZS0+YmxvY2tzaXplIC0gKHN0YXRlLT5ibG9ja3NpemUgPj4gMik7CiAJCWxlYWYgPSBicC0+ZGF0YTsKLQkJQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOwotCQljb3VudCArPSBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIElOVF9HRVQobGVhZi0+aGRyLnN0YWxlLCBBUkNIX0NPTlZFUlQpOworCQlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKTsKKwkJY291bnQgKz0gYmUxNl90b19jcHUobGVhZi0+aGRyLmNvdW50KSAtIGJlMTZfdG9fY3B1KGxlYWYtPmhkci5zdGFsZSk7CiAJCWJ5dGVzIC09IGNvdW50ICogKHVpbnQpc2l6ZW9mKGxlYWYtPmVudHNbMF0pOwogCQkvKgogCQkgKiBGaXRzIHdpdGggYXQgbGVhc3QgMjUlIHRvIHNwYXJlLgpAQCAtMTI1NiwyNyArMTI1NywyNyBAQAogCUFTU0VSVChzYXZlX2Jsay0+bWFnaWMgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOwogCWRyb3BfbGVhZiA9IGRyb3BfYmxrLT5icC0+ZGF0YTsKIAlzYXZlX2xlYWYgPSBzYXZlX2Jsay0+YnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQoZHJvcF9sZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7Ci0JQVNTRVJUKElOVF9HRVQoc2F2ZV9sZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGRyb3BfbGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUoc2F2ZV9sZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMpOwogCS8qCiAJICogSWYgdGhlcmUgYXJlIGFueSBzdGFsZSBsZWFmIGVudHJpZXMsIHRha2UgdGhpcyBvcHBvcnR1bml0eQogCSAqIHRvIHB1cmdlIHRoZW0uCiAJICovCi0JaWYgKElOVF9HRVQoZHJvcF9sZWFmLT5oZHIuc3RhbGUsIEFSQ0hfQ09OVkVSVCkpCisJaWYgKGRyb3BfbGVhZi0+aGRyLnN0YWxlKQogCQl4ZnNfZGlyMl9sZWFmX2NvbXBhY3QoYXJncywgZHJvcF9ibGstPmJwKTsKLQlpZiAoSU5UX0dFVChzYXZlX2xlYWYtPmhkci5zdGFsZSwgQVJDSF9DT05WRVJUKSkKKwlpZiAoc2F2ZV9sZWFmLT5oZHIuc3RhbGUpCiAJCXhmc19kaXIyX2xlYWZfY29tcGFjdChhcmdzLCBzYXZlX2Jsay0+YnApOwogCS8qCiAJICogTW92ZSB0aGUgZW50cmllcyBmcm9tIGRyb3AgdG8gdGhlIGFwcHJvcHJpYXRlIGVuZCBvZiBzYXZlLgogCSAqLwotCWRyb3BfYmxrLT5oYXNodmFsID0gSU5UX0dFVChkcm9wX2xlYWYtPmVudHNbSU5UX0dFVChkcm9wX2xlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7CisJZHJvcF9ibGstPmhhc2h2YWwgPSBiZTMyX3RvX2NwdShkcm9wX2xlYWYtPmVudHNbYmUxNl90b19jcHUoZHJvcF9sZWFmLT5oZHIuY291bnQpIC0gMV0uaGFzaHZhbCk7CiAJaWYgKHhmc19kaXIyX2xlYWZuX29yZGVyKHNhdmVfYmxrLT5icCwgZHJvcF9ibGstPmJwKSkKIAkJeGZzX2RpcjJfbGVhZm5fbW92ZWVudHMoYXJncywgZHJvcF9ibGstPmJwLCAwLCBzYXZlX2Jsay0+YnAsIDAsCi0JCQlJTlRfR0VUKGRyb3BfbGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKTsKKwkJCWJlMTZfdG9fY3B1KGRyb3BfbGVhZi0+aGRyLmNvdW50KSk7CiAJZWxzZQogCQl4ZnNfZGlyMl9sZWFmbl9tb3ZlZW50cyhhcmdzLCBkcm9wX2Jsay0+YnAsIDAsIHNhdmVfYmxrLT5icCwKLQkJCUlOVF9HRVQoc2F2ZV9sZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCksIElOVF9HRVQoZHJvcF9sZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCkpOwotCXNhdmVfYmxrLT5oYXNodmFsID0gSU5UX0dFVChzYXZlX2xlYWYtPmVudHNbSU5UX0dFVChzYXZlX2xlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSAtIDFdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCk7CisJCQliZTE2X3RvX2NwdShzYXZlX2xlYWYtPmhkci5jb3VudCksIGJlMTZfdG9fY3B1KGRyb3BfbGVhZi0+aGRyLmNvdW50KSk7CisJc2F2ZV9ibGstPmhhc2h2YWwgPSBiZTMyX3RvX2NwdShzYXZlX2xlYWYtPmVudHNbYmUxNl90b19jcHUoc2F2ZV9sZWFmLT5oZHIuY291bnQpIC0gMV0uaGFzaHZhbCk7CiAJeGZzX2RpcjJfbGVhZm5fY2hlY2soYXJncy0+ZHAsIHNhdmVfYmxrLT5icCk7CiB9CiAKQEAgLTEzNzgsNyArMTM3OSw3IEBACiAJeGZzX21vdW50X3QJCSptcDsJCS8qIGZpbGVzeXN0ZW0gbW91bnQgcG9pbnQgKi8KIAlpbnQJCQluZWVkbG9nOwkvKiBuZWVkIHRvIGxvZyBkYXRhIGhlYWRlciAqLwogCWludAkJCW5lZWRzY2FuOwkvKiBuZWVkIHRvIHJlc2NhbiBkYXRhIGZyZWVzICovCi0JeGZzX2RpcjJfZGF0YV9vZmZfdAkqdGFncDsJCS8qIGRhdGEgZW50cnkgdGFnIHBvaW50ZXIgKi8KKwlfX2JlMTYJCQkqdGFncDsJCS8qIGRhdGEgZW50cnkgdGFnIHBvaW50ZXIgKi8KIAl4ZnNfdHJhbnNfdAkJKnRwOwkJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLwogCiAJZHAgPSBhcmdzLT5kcDsKQEAgLTEzOTcsNyArMTM5OCw3IEBACiAJCSAqLwogCQlpZmJubyA9IGZibGstPmJsa25vOwogCQlmcmVlID0gZmJwLT5kYXRhOwotCQlBU1NFUlQoSU5UX0dFVChmcmVlLT5oZHIubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUjJfRlJFRV9NQUdJQyk7CisJCUFTU0VSVChiZTMyX3RvX2NwdShmcmVlLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0ZSRUVfTUFHSUMpOwogCQlmaW5kZXggPSBmYmxrLT5pbmRleDsKIAkJLyoKIAkJICogVGhpcyBtZWFucyB0aGUgZnJlZSBlbnRyeSBzaG93ZWQgdGhhdCB0aGUgZGF0YSBibG9jayBoYWQKQEAgLTE0MDUsMTAgKzE0MDYsMTAgQEAKIAkJICogVXNlIHRoYXQgZGF0YSBibG9jay4KIAkJICovCiAJCWlmIChmaW5kZXggPj0gMCkgewotCQkJQVNTRVJUKGZpbmRleCA8IElOVF9HRVQoZnJlZS0+aGRyLm52YWxpZCwgQVJDSF9DT05WRVJUKSk7Ci0JCQlBU1NFUlQoSU5UX0dFVChmcmVlLT5iZXN0c1tmaW5kZXhdLCBBUkNIX0NPTlZFUlQpICE9IE5VTExEQVRBT0ZGKTsKLQkJCUFTU0VSVChJTlRfR0VUKGZyZWUtPmJlc3RzW2ZpbmRleF0sIEFSQ0hfQ09OVkVSVCkgPj0gbGVuZ3RoKTsKLQkJCWRibm8gPSBJTlRfR0VUKGZyZWUtPmhkci5maXJzdGRiLCBBUkNIX0NPTlZFUlQpICsgZmluZGV4OworCQkJQVNTRVJUKGZpbmRleCA8IGJlMzJfdG9fY3B1KGZyZWUtPmhkci5udmFsaWQpKTsKKwkJCUFTU0VSVChiZTE2X3RvX2NwdShmcmVlLT5iZXN0c1tmaW5kZXhdKSAhPSBOVUxMREFUQU9GRik7CisJCQlBU1NFUlQoYmUxNl90b19jcHUoZnJlZS0+YmVzdHNbZmluZGV4XSkgPj0gbGVuZ3RoKTsKKwkJCWRibm8gPSBiZTMyX3RvX2NwdShmcmVlLT5oZHIuZmlyc3RkYikgKyBmaW5kZXg7CiAJCX0KIAkJLyoKIAkJICogVGhlIGRhdGEgYmxvY2sgbG9va2VkIGF0IGRpZG4ndCBoYXZlIGVub3VnaCByb29tLgpAQCAtMTQ4MSwyMCArMTQ4MiwyMCBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJZnJlZSA9IGZicC0+ZGF0YTsKLQkJCUFTU0VSVChJTlRfR0VUKGZyZWUtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9GUkVFX01BR0lDKTsKKwkJCUFTU0VSVChiZTMyX3RvX2NwdShmcmVlLT5oZHIubWFnaWMpID09IFhGU19ESVIyX0ZSRUVfTUFHSUMpOwogCQkJZmluZGV4ID0gMDsKIAkJfQogCQkvKgogCQkgKiBMb29rIGF0IHRoZSBjdXJyZW50IGZyZWUgZW50cnkuICBJcyBpdCBnb29kIGVub3VnaD8KIAkJICovCi0JCWlmIChJTlRfR0VUKGZyZWUtPmJlc3RzW2ZpbmRleF0sIEFSQ0hfQ09OVkVSVCkgIT0gTlVMTERBVEFPRkYgJiYKLQkJICAgIElOVF9HRVQoZnJlZS0+YmVzdHNbZmluZGV4XSwgQVJDSF9DT05WRVJUKSA+PSBsZW5ndGgpCi0JCQlkYm5vID0gSU5UX0dFVChmcmVlLT5oZHIuZmlyc3RkYiwgQVJDSF9DT05WRVJUKSArIGZpbmRleDsKKwkJaWYgKGJlMTZfdG9fY3B1KGZyZWUtPmJlc3RzW2ZpbmRleF0pICE9IE5VTExEQVRBT0ZGICYmCisJCSAgICBiZTE2X3RvX2NwdShmcmVlLT5iZXN0c1tmaW5kZXhdKSA+PSBsZW5ndGgpCisJCQlkYm5vID0gYmUzMl90b19jcHUoZnJlZS0+aGRyLmZpcnN0ZGIpICsgZmluZGV4OwogCQllbHNlIHsKIAkJCS8qCiAJCQkgKiBBcmUgd2UgZG9uZSB3aXRoIHRoZSBmcmVlYmxvY2s/CiAJCQkgKi8KLQkJCWlmICgrK2ZpbmRleCA9PSBJTlRfR0VUKGZyZWUtPmhkci5udmFsaWQsIEFSQ0hfQ09OVkVSVCkpIHsKKwkJCWlmICgrK2ZpbmRleCA9PSBiZTMyX3RvX2NwdShmcmVlLT5oZHIubnZhbGlkKSkgewogCQkJCS8qCiAJCQkJICogRHJvcCB0aGUgYmxvY2suCiAJCQkJICovCkBAIC0xNjA4LDE1ICsxNjA5LDE1IEBACiAJCQkgKiBpdHMgZmlyc3Qgc2xvdCBhcyBvdXIgZW1wdHkgc2xvdC4KIAkJCSAqLwogCQkJZnJlZSA9IGZicC0+ZGF0YTsKLQkJCUlOVF9TRVQoZnJlZS0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQsIFhGU19ESVIyX0ZSRUVfTUFHSUMpOwotCQkJSU5UX1NFVChmcmVlLT5oZHIuZmlyc3RkYiwgQVJDSF9DT05WRVJULAorCQkJZnJlZS0+aGRyLm1hZ2ljID0gY3B1X3RvX2JlMzIoWEZTX0RJUjJfRlJFRV9NQUdJQyk7CisJCQlmcmVlLT5oZHIuZmlyc3RkYiA9IGNwdV90b19iZTMyKAogCQkJCShmYm5vIC0gWEZTX0RJUjJfRlJFRV9GSVJTVERCKG1wKSkgKgogCQkJCVhGU19ESVIyX01BWF9GUkVFX0JFU1RTKG1wKSk7CiAJCQlmcmVlLT5oZHIubnZhbGlkID0gMDsKIAkJCWZyZWUtPmhkci5udXNlZCA9IDA7CiAJCX0gZWxzZSB7CiAJCQlmcmVlID0gZmJwLT5kYXRhOwotCQkJQVNTRVJUKElOVF9HRVQoZnJlZS0+aGRyLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVIyX0ZSRUVfTUFHSUMpOworCQkJQVNTRVJUKGJlMzJfdG9fY3B1KGZyZWUtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfRlJFRV9NQUdJQyk7CiAJCX0KIAogCQkvKgpAQCAtMTYyNywyMCArMTYyOCwyMCBAQAogCQkgKiBJZiBpdCdzIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZW50cmllcyBpbiB0aGUKIAkJICogZnJlZXNwYWNlIGJsb2NrLCBleHRlbmQgdGhhdCB0YWJsZS4KIAkJICovCi0JCWlmIChmaW5kZXggPj0gSU5UX0dFVChmcmVlLT5oZHIubnZhbGlkLCBBUkNIX0NPTlZFUlQpKSB7CisJCWlmIChmaW5kZXggPj0gYmUzMl90b19jcHUoZnJlZS0+aGRyLm52YWxpZCkpIHsKIAkJCUFTU0VSVChmaW5kZXggPCBYRlNfRElSMl9NQVhfRlJFRV9CRVNUUyhtcCkpOwotCQkJSU5UX1NFVChmcmVlLT5oZHIubnZhbGlkLCBBUkNIX0NPTlZFUlQsIGZpbmRleCArIDEpOworCQkJZnJlZS0+aGRyLm52YWxpZCA9IGNwdV90b19iZTMyKGZpbmRleCArIDEpOwogCQkJLyoKIAkJCSAqIFRhZyBuZXcgZW50cnkgc28gbnVzZWQgd2lsbCBnbyB1cC4KIAkJCSAqLwotCQkJSU5UX1NFVChmcmVlLT5iZXN0c1tmaW5kZXhdLCBBUkNIX0NPTlZFUlQsIE5VTExEQVRBT0ZGKTsKKwkJCWZyZWUtPmJlc3RzW2ZpbmRleF0gPSBjcHVfdG9fYmUxNihOVUxMREFUQU9GRik7CiAJCX0KIAkJLyoKIAkJICogSWYgdGhpcyBlbnRyeSB3YXMgZm9yIGFuIGVtcHR5IGRhdGEgYmxvY2sKIAkJICogKHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlKSB0aGVuIHVwZGF0ZSB0aGUgaGVhZGVyLgogCQkgKi8KLQkJaWYgKElOVF9HRVQoZnJlZS0+YmVzdHNbZmluZGV4XSwgQVJDSF9DT05WRVJUKSA9PSBOVUxMREFUQU9GRikgewotCQkJSU5UX01PRChmcmVlLT5oZHIubnVzZWQsIEFSQ0hfQ09OVkVSVCwgKzEpOworCQlpZiAoYmUxNl90b19jcHUoZnJlZS0+YmVzdHNbZmluZGV4XSkgPT0gTlVMTERBVEFPRkYpIHsKKwkJCWJlMzJfYWRkKCZmcmVlLT5oZHIubnVzZWQsIDEpOwogCQkJeGZzX2RpcjJfZnJlZV9sb2dfaGVhZGVyKHRwLCBmYnApOwogCQl9CiAJCS8qCkBAIC0xNjQ5LDcgKzE2NTAsNyBAQAogCQkgKiBjaGFuZ2UgYWdhaW4uCiAJCSAqLwogCQlkYXRhID0gZGJwLT5kYXRhOwotCQlJTlRfQ09QWShmcmVlLT5iZXN0c1tmaW5kZXhdLCBkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpOworCQlmcmVlLT5iZXN0c1tmaW5kZXhdID0gZGF0YS0+aGRyLmJlc3RmcmVlWzBdLmxlbmd0aDsKIAkJbG9nZnJlZSA9IDE7CiAJfQogCS8qCkBAIC0xNjc3LDEyICsxNjc4LDEyIEBACiAJCWRhdGEgPSBkYnAtPmRhdGE7CiAJCWxvZ2ZyZWUgPSAwOwogCX0KLQlBU1NFUlQoSU5UX0dFVChkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpID49IGxlbmd0aCk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgpID49IGxlbmd0aCk7CiAJLyoKIAkgKiBQb2ludCB0byB0aGUgZXhpc3RpbmcgdW51c2VkIHNwYWNlLgogCSAqLwogCWR1cCA9ICh4ZnNfZGlyMl9kYXRhX3VudXNlZF90ICopCi0JICAgICAgKChjaGFyICopZGF0YSArIElOVF9HRVQoZGF0YS0+aGRyLmJlc3RmcmVlWzBdLm9mZnNldCwgQVJDSF9DT05WRVJUKSk7CisJICAgICAgKChjaGFyICopZGF0YSArIGJlMTZfdG9fY3B1KGRhdGEtPmhkci5iZXN0ZnJlZVswXS5vZmZzZXQpKTsKIAluZWVkc2NhbiA9IG5lZWRsb2cgPSAwOwogCS8qCiAJICogTWFyayB0aGUgZmlyc3QgcGFydCBvZiB0aGUgdW51c2VkIHNwYWNlLCBpbnVzZSBmb3IgdXMuCkBAIC0xNjk4LDcgKzE2OTksNyBAQAogCWRlcC0+bmFtZWxlbiA9IGFyZ3MtPm5hbWVsZW47CiAJbWVtY3B5KGRlcC0+bmFtZSwgYXJncy0+bmFtZSwgZGVwLT5uYW1lbGVuKTsKIAl0YWdwID0gWEZTX0RJUjJfREFUQV9FTlRSWV9UQUdfUChkZXApOwotCUlOVF9TRVQoKnRhZ3AsIEFSQ0hfQ09OVkVSVCwgKHhmc19kaXIyX2RhdGFfb2ZmX3QpKChjaGFyICopZGVwIC0gKGNoYXIgKilkYXRhKSk7CisJKnRhZ3AgPSBjcHVfdG9fYmUxNigoY2hhciAqKWRlcCAtIChjaGFyICopZGF0YSk7CiAJeGZzX2RpcjJfZGF0YV9sb2dfZW50cnkodHAsIGRicCwgZGVwKTsKIAkvKgogCSAqIFJlc2NhbiB0aGUgYmxvY2sgZm9yIGJlc3RmcmVlIGlmIG5lZWRlZC4KQEAgLTE3MTMsOCArMTcxNCw4IEBACiAJLyoKIAkgKiBJZiB0aGUgZnJlZXNwYWNlIGVudHJ5IGlzIG5vdyB3cm9uZywgdXBkYXRlIGl0LgogCSAqLwotCWlmIChJTlRfR0VUKGZyZWUtPmJlc3RzW2ZpbmRleF0sIEFSQ0hfQ09OVkVSVCkgIT0gSU5UX0dFVChkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoLCBBUkNIX0NPTlZFUlQpKSB7Ci0JCUlOVF9DT1BZKGZyZWUtPmJlc3RzW2ZpbmRleF0sIGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgsIEFSQ0hfQ09OVkVSVCk7CisJaWYgKGJlMTZfdG9fY3B1KGZyZWUtPmJlc3RzW2ZpbmRleF0pICE9IGJlMTZfdG9fY3B1KGRhdGEtPmhkci5iZXN0ZnJlZVswXS5sZW5ndGgpKSB7CisJCWZyZWUtPmJlc3RzW2ZpbmRleF0gPSBkYXRhLT5oZHIuYmVzdGZyZWVbMF0ubGVuZ3RoOwogCQlsb2dmcmVlID0gMTsKIAl9CiAJLyoKQEAgLTE3MzEsNyArMTczMiw3IEBACiAJICogUmV0dXJuIHRoZSBkYXRhIGJsb2NrIGFuZCBvZmZzZXQgaW4gYXJncywgdGhlbiBkcm9wIHRoZSBkYXRhIGJsb2NrLgogCSAqLwogCWFyZ3MtPmJsa25vID0gKHhmc19kYWJsa190KWRibm87Ci0JYXJncy0+aW5kZXggPSBJTlRfR0VUKCp0YWdwLCBBUkNIX0NPTlZFUlQpOworCWFyZ3MtPmluZGV4ID0gYmUxNl90b19jcHUoKnRhZ3ApOwogCXhmc19kYV9idWZfZG9uZShkYnApOwogCXJldHVybiAwOwogfQpAQCAtMTkwMCwxMCArMTkwMSwxMCBAQAogCQkgKiBQb2ludCB0byB0aGUgZGF0YSBlbnRyeS4KIAkJICovCiAJCWRhdGEgPSBzdGF0ZS0+ZXh0cmFibGsuYnAtPmRhdGE7Ci0JCUFTU0VSVChJTlRfR0VUKGRhdGEtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9EQVRBX01BR0lDKTsKKwkJQVNTRVJUKGJlMzJfdG9fY3B1KGRhdGEtPmhkci5tYWdpYykgPT0gWEZTX0RJUjJfREFUQV9NQUdJQyk7CiAJCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKikKIAkJICAgICAgKChjaGFyICopZGF0YSArCi0JCSAgICAgICBYRlNfRElSMl9EQVRBUFRSX1RPX09GRihzdGF0ZS0+bXAsIElOVF9HRVQobGVwLT5hZGRyZXNzLCBBUkNIX0NPTlZFUlQpKSk7CisJCSAgICAgICBYRlNfRElSMl9EQVRBUFRSX1RPX09GRihzdGF0ZS0+bXAsIGJlMzJfdG9fY3B1KGxlcC0+YWRkcmVzcykpKTsKIAkJQVNTRVJUKGludW0gIT0gSU5UX0dFVChkZXAtPmludW1iZXIsIEFSQ0hfQ09OVkVSVCkpOwogCQkvKgogCQkgKiBGaWxsIGluIHRoZSBuZXcgaW5vZGUgbnVtYmVyIGFuZCBsb2cgdGhlIGVudHJ5LgpAQCAtMTk2NiwxMSArMTk2NywxMSBAQAogCQlyZXR1cm4gMDsKIAl9CiAJZnJlZSA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGZyZWUtPmhkci5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9GUkVFX01BR0lDKTsKKwlBU1NFUlQoYmUzMl90b19jcHUoZnJlZS0+aGRyLm1hZ2ljKSA9PSBYRlNfRElSMl9GUkVFX01BR0lDKTsKIAkvKgogCSAqIElmIHRoZXJlIGFyZSB1c2VkIGVudHJpZXMsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KIAkgKi8KLQlpZiAoSU5UX0dFVChmcmVlLT5oZHIubnVzZWQsIEFSQ0hfQ09OVkVSVCkgPiAwKSB7CisJaWYgKGJlMzJfdG9fY3B1KGZyZWUtPmhkci5udXNlZCkgPiAwKSB7CiAJCXhmc19kYV9icmVsc2UodHAsIGJwKTsKIAkJKnJ2YWxwID0gMDsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbm9kZS5oIGIvZnMveGZzL3hmc19kaXIyX25vZGUuaAppbmRleCAwYWI4ZmJkNS4uYzdjODcwZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX25vZGUuaAorKysgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5oCkBAIC00MSwxNSArNDEsMTUgQEAKICNkZWZpbmUJWEZTX0RJUjJfRlJFRV9NQUdJQwkweDU4NDQzMjQ2CS8qIFhEMkYgKi8KIAogdHlwZWRlZglzdHJ1Y3QgeGZzX2RpcjJfZnJlZV9oZHIgewotCV9fdWludDMyX3QJCW1hZ2ljOwkJLyogWEZTX0RJUjJfRlJFRV9NQUdJQyAqLwotCV9faW50MzJfdAkJZmlyc3RkYjsJLyogZGIgb2YgZmlyc3QgZW50cnkgKi8KLQlfX2ludDMyX3QJCW52YWxpZDsJCS8qIGNvdW50IG9mIHZhbGlkIGVudHJpZXMgKi8KLQlfX2ludDMyX3QJCW51c2VkOwkJLyogY291bnQgb2YgdXNlZCBlbnRyaWVzICovCisJX19iZTMyCQkJbWFnaWM7CQkvKiBYRlNfRElSMl9GUkVFX01BR0lDICovCisJX19iZTMyCQkJZmlyc3RkYjsJLyogZGIgb2YgZmlyc3QgZW50cnkgKi8KKwlfX2JlMzIJCQludmFsaWQ7CQkvKiBjb3VudCBvZiB2YWxpZCBlbnRyaWVzICovCisJX19iZTMyCQkJbnVzZWQ7CQkvKiBjb3VudCBvZiB1c2VkIGVudHJpZXMgKi8KIH0geGZzX2RpcjJfZnJlZV9oZHJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2RpcjJfZnJlZSB7CiAJeGZzX2RpcjJfZnJlZV9oZHJfdAloZHI7CQkvKiBibG9jayBoZWFkZXIgKi8KLQl4ZnNfZGlyMl9kYXRhX29mZl90CWJlc3RzWzFdOwkvKiBiZXN0IGZyZWUgY291bnRzICovCisJX19iZTE2CQkJYmVzdHNbMV07CS8qIGJlc3QgZnJlZSBjb3VudHMgKi8KIAkJCQkJCS8qIHVudXNlZCBlbnRyaWVzIGFyZSAtMSAqLwogfSB4ZnNfZGlyMl9mcmVlX3Q7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9zZi5jIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKaW5kZXggZWM4ZTc0Ny4uZDk4YTQxZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX3NmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKQEAgLTk4LDggKzk4LDggQEAKIAkvKgogCSAqIEl0ZXJhdGUgb3ZlciB0aGUgYmxvY2sncyBkYXRhIGVudHJpZXMgYnkgdXNpbmcgdGhlIGxlYWYgcG9pbnRlcnMuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IElOVF9HRVQoYnRwLT5jb3VudCwgQVJDSF9DT05WRVJUKTsgaSsrKSB7Ci0JCWlmICgoYWRkciA9IElOVF9HRVQoYmxwW2ldLmFkZHJlc3MsIEFSQ0hfQ09OVkVSVCkpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKKwlmb3IgKGkgPSAwOyBpIDwgYmUzMl90b19jcHUoYnRwLT5jb3VudCk7IGkrKykgeworCQlpZiAoKGFkZHIgPSBiZTMyX3RvX2NwdShibHBbaV0uYWRkcmVzcykpID09IFhGU19ESVIyX05VTExfREFUQVBUUikKIAkJCWNvbnRpbnVlOwogCQkvKgogCQkgKiBDYWxjdWxhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIGVudHJ5IGF0IGhhbmQuCkBAIC0yMjAsOCArMjIwLDggQEAKIAkJICogSWYgaXQncyB1bnVzZWQsIGp1c3Qgc2tpcCBvdmVyIGl0LgogCQkgKi8KIAkJZHVwID0gKHhmc19kaXIyX2RhdGFfdW51c2VkX3QgKilwdHI7Ci0JCWlmIChJTlRfR0VUKGR1cC0+ZnJlZXRhZywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSMl9EQVRBX0ZSRUVfVEFHKSB7Ci0JCQlwdHIgKz0gSU5UX0dFVChkdXAtPmxlbmd0aCwgQVJDSF9DT05WRVJUKTsKKwkJaWYgKGJlMTZfdG9fY3B1KGR1cC0+ZnJlZXRhZykgPT0gWEZTX0RJUjJfREFUQV9GUkVFX1RBRykgeworCQkJcHRyICs9IGJlMTZfdG9fY3B1KGR1cC0+bGVuZ3RoKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKilwdHI7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Rpcl9sZWFmLmMgYi9mcy94ZnMveGZzX2Rpcl9sZWFmLmMKaW5kZXggZTgzMDc0MC4uZWU4ODc1MSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyX2xlYWYuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJQVNTRVJUKGRwLT5pX2RmLmlmX3UxLmlmX2RhdGEgIT0gTlVMTCk7CiAJc2YgPSAoeGZzX2Rpcl9zaG9ydGZvcm1fdCAqKWRwLT5pX2RmLmlmX3UxLmlmX2RhdGE7CiAJc2ZlID0gJnNmLT5saXN0WzBdOwotCWZvciAoaSA9IElOVF9HRVQoc2YtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xOyBpID49IDA7IGktLSkgeworCWZvciAoaSA9IHNmLT5oZHIuY291bnQtMTsgaSA+PSAwOyBpLS0pIHsKIAkJaWYgKHNmZS0+bmFtZWxlbiA9PSBhcmdzLT5uYW1lbGVuICYmCiAJCSAgICBhcmdzLT5uYW1lWzBdID09IHNmZS0+bmFtZVswXSAmJgogCQkgICAgbWVtY21wKGFyZ3MtPm5hbWUsIHNmZS0+bmFtZSwgYXJncy0+bmFtZWxlbikgPT0gMCkKQEAgLTE5Myw3ICsxOTMsNyBAQAogCVhGU19ESVJfU0ZfUFVUX0RJUklOTygmYXJncy0+aW51bWJlciwgJnNmZS0+aW51bWJlcik7CiAJc2ZlLT5uYW1lbGVuID0gYXJncy0+bmFtZWxlbjsKIAltZW1jcHkoc2ZlLT5uYW1lLCBhcmdzLT5uYW1lLCBzZmUtPm5hbWVsZW4pOwotCUlOVF9NT0Qoc2YtPmhkci5jb3VudCwgQVJDSF9DT05WRVJULCArMSk7CisJc2YtPmhkci5jb3VudCsrOwogCiAJZHAtPmlfZC5kaV9zaXplICs9IHNpemU7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZShhcmdzLT50cmFucywgZHAsIFhGU19JTE9HX0NPUkUgfCBYRlNfSUxPR19EREFUQSk7CkBAIC0yMjcsNyArMjI3LDcgQEAKIAliYXNlID0gc2l6ZW9mKHhmc19kaXJfc2ZfaGRyX3QpOwogCXNmID0gKHhmc19kaXJfc2hvcnRmb3JtX3QgKilkcC0+aV9kZi5pZl91MS5pZl9kYXRhOwogCXNmZSA9ICZzZi0+bGlzdFswXTsKLQlmb3IgKGkgPSBJTlRfR0VUKHNmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCktMTsgaSA+PSAwOyBpLS0pIHsKKwlmb3IgKGkgPSBzZi0+aGRyLmNvdW50LTE7IGkgPj0gMDsgaS0tKSB7CiAJCXNpemUgPSBYRlNfRElSX1NGX0VOVFNJWkVfQllFTlRSWShzZmUpOwogCQlpZiAoc2ZlLT5uYW1lbGVuID09IGFyZ3MtPm5hbWVsZW4gJiYKIAkJICAgIHNmZS0+bmFtZVswXSA9PSBhcmdzLT5uYW1lWzBdICYmCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkJbWVtbW92ZSgmKChjaGFyICopc2YpW2Jhc2VdLCAmKChjaGFyICopc2YpW2Jhc2Urc2l6ZV0sCiAJCQkJCSAgICAgIGRwLT5pX2QuZGlfc2l6ZSAtIChiYXNlK3NpemUpKTsKIAl9Ci0JSU5UX01PRChzZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQsIC0xKTsKKwlzZi0+aGRyLmNvdW50LS07CiAKIAl4ZnNfaWRhdGFfcmVhbGxvYyhkcCwgLXNpemUsIFhGU19EQVRBX0ZPUkspOwogCWRwLT5pX2QuZGlfc2l6ZSAtPSBzaXplOwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJCXJldHVybihYRlNfRVJST1IoRUVYSVNUKSk7CiAJfQogCXNmZSA9ICZzZi0+bGlzdFswXTsKLQlmb3IgKGkgPSBJTlRfR0VUKHNmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCktMTsgaSA+PSAwOyBpLS0pIHsKKwlmb3IgKGkgPSBzZi0+aGRyLmNvdW50LTE7IGkgPj0gMDsgaS0tKSB7CiAJCWlmIChzZmUtPm5hbWVsZW4gPT0gYXJncy0+bmFtZWxlbiAmJgogCQkgICAgc2ZlLT5uYW1lWzBdID09IGFyZ3MtPm5hbWVbMF0gJiYKIAkJICAgIG1lbWNtcChhcmdzLT5uYW1lLCBzZmUtPm5hbWUsIGFyZ3MtPm5hbWVsZW4pID09IDApIHsKQEAgLTM3NSw3ICszNzUsNyBAQAogCQlnb3RvIG91dDsKIAogCXNmZSA9ICZzZi0+bGlzdFswXTsKLQlmb3IgKGkgPSAwOyBpIDwgSU5UX0dFVChzZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2YtPmhkci5jb3VudDsgaSsrKSB7CiAJCWFyZ3MubmFtZSA9IChjaGFyICopKHNmZS0+bmFtZSk7CiAJCWFyZ3MubmFtZWxlbiA9IHNmZS0+bmFtZWxlbjsKIAkJYXJncy5oYXNodmFsID0geGZzX2RhX2hhc2huYW1lKChjaGFyICopKHNmZS0+bmFtZSksCkBAIC00MjgsNyArNDI4LDcgQEAKIAlzZiA9ICh4ZnNfZGlyX3Nob3J0Zm9ybV90ICopZHAtPmlfZGYuaWZfdTEuaWZfZGF0YTsKIAljb29raGFzaCA9IFhGU19EQV9DT09LSUVfSEFTSChtcCwgdWlvLT51aW9fb2Zmc2V0KTsKIAl3YW50X2VudG5vID0gWEZTX0RBX0NPT0tJRV9FTlRSWShtcCwgdWlvLT51aW9fb2Zmc2V0KTsKLQluc2J1ZiA9IElOVF9HRVQoc2YtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSArIDI7CisJbnNidWYgPSBzZi0+aGRyLmNvdW50ICsgMjsKIAlzYnNpemUgPSAobnNidWYgKyAxKSAqIHNpemVvZigqc2J1Zik7CiAJc2JwID0gc2J1ZiA9IGttZW1fYWxsb2Moc2JzaXplLCBLTV9TTEVFUCk7CiAKQEAgLTQ2MCw4ICs0NjAsNyBAQAogCS8qCiAJICogU2NhbiB0aGUgZGlyZWN0b3J5IGRhdGEgZm9yIHRoZSByZXN0IG9mIHRoZSBlbnRyaWVzLgogCSAqLwotCWZvciAoaSA9IDAsIHNmZSA9ICZzZi0+bGlzdFswXTsKLQkJCWkgPCBJTlRfR0VUKHNmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7IGkrKykgeworCWZvciAoaSA9IDAsIHNmZSA9ICZzZi0+bGlzdFswXTsgaSA8IHNmLT5oZHIuY291bnQ7IGkrKykgewogCiAJCWlmICh1bmxpa2VseSgKIAkJICAgICgoY2hhciAqKXNmZSA8IChjaGFyICopc2YpIHx8CkBAIC02MDAsNyArNTk5LDcgQEAKIAl9CiAJQVNTRVJUKGFyZ3MtPm5hbWVsZW4gIT0gMSB8fCBhcmdzLT5uYW1lWzBdICE9ICcuJyk7CiAJc2ZlID0gJnNmLT5saXN0WzBdOwotCWZvciAoaSA9IElOVF9HRVQoc2YtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xOyBpID49IDA7IGktLSkgeworCWZvciAoaSA9IHNmLT5oZHIuY291bnQtMTsgaSA+PSAwOyBpLS0pIHsKIAkJaWYgKHNmZS0+bmFtZWxlbiA9PSBhcmdzLT5uYW1lbGVuICYmCiAJCSAgICBzZmUtPm5hbWVbMF0gPT0gYXJncy0+bmFtZVswXSAmJgogCQkgICAgbWVtY21wKGFyZ3MtPm5hbWUsIHNmZS0+bmFtZSwgYXJncy0+bmFtZWxlbikgPT0gMCkgewpAQCAtNjQ0LDcgKzY0Myw3IEBACiAJQVNTRVJUKGJwICE9IE5VTEwpOwogCW1lbWNweSh0bXBidWZmZXIsIGJwLT5kYXRhLCBYRlNfTEJTSVpFKGRwLT5pX21vdW50KSk7CiAJbGVhZiA9ICh4ZnNfZGlyX2xlYWZibG9ja190ICopdG1wYnVmZmVyOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOwogCW1lbXNldChicC0+ZGF0YSwgMCwgWEZTX0xCU0laRShkcC0+aV9tb3VudCkpOwogCiAJLyoKQEAgLTc0MiwxMSArNzQxLDEzIEBACiAJfQogCW5vZGUgPSBicDEtPmRhdGE7CiAJbGVhZiA9IGJwMi0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOwotCUlOVF9TRVQobm9kZS0+YnRyZWVbMF0uaGFzaHZhbCwgQVJDSF9DT05WRVJULCBJTlRfR0VUKGxlYWYtPmVudHJpZXNbIElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpLTEgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJbm9kZS0+YnRyZWVbMF0uaGFzaHZhbCA9IGNwdV90b19iZTMyKAorCQlJTlRfR0VUKGxlYWYtPmVudHJpZXNbCisJCQlJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKS0xXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKTsKIAl4ZnNfZGFfYnVmX2RvbmUoYnAyKTsKLQlJTlRfU0VUKG5vZGUtPmJ0cmVlWzBdLmJlZm9yZSwgQVJDSF9DT05WRVJULCBibGtubyk7Ci0JSU5UX1NFVChub2RlLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCwgMSk7CisJbm9kZS0+YnRyZWVbMF0uYmVmb3JlID0gY3B1X3RvX2JlMzIoYmxrbm8pOworCW5vZGUtPmhkci5jb3VudCA9IGNwdV90b19iZTE2KDEpOwogCXhmc19kYV9sb2dfYnVmKGFyZ3MtPnRyYW5zLCBicDEsCiAJCVhGU19EQV9MT0dSQU5HRShub2RlLCAmbm9kZS0+YnRyZWVbMF0sIHNpemVvZihub2RlLT5idHJlZVswXSkpKTsKIAl4ZnNfZGFfYnVmX2RvbmUoYnAxKTsKQEAgLTc4MSw3ICs3ODIsNyBAQAogCWxlYWYgPSBicC0+ZGF0YTsKIAltZW1zZXQoKGNoYXIgKilsZWFmLCAwLCBYRlNfTEJTSVpFKGRwLT5pX21vdW50KSk7CiAJaGRyID0gJmxlYWYtPmhkcjsKLQlJTlRfU0VUKGhkci0+aW5mby5tYWdpYywgQVJDSF9DT05WRVJULCBYRlNfRElSX0xFQUZfTUFHSUMpOworCWhkci0+aW5mby5tYWdpYyA9IGNwdV90b19iZTE2KFhGU19ESVJfTEVBRl9NQUdJQyk7CiAJSU5UX1NFVChoZHItPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJULCBYRlNfTEJTSVpFKGRwLT5pX21vdW50KSk7CiAJaWYgKCFoZHItPmZpcnN0dXNlZCkKIAkJSU5UX1NFVChoZHItPmZpcnN0dXNlZCwgQVJDSF9DT05WRVJULCBYRlNfTEJTSVpFKGRwLT5pX21vdW50KSAtIDEpOwpAQCAtODYwLDcgKzg2MSw3IEBACiAJaW50IHRhYmxlc2l6ZSwgZW50c2l6ZSwgc3VtLCBpLCB0bXAsIGVycm9yOwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOwogCUFTU0VSVCgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDw9IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKSk7CiAJaGRyID0gJmxlYWYtPmhkcjsKIAllbnRzaXplID0gWEZTX0RJUl9MRUFGX0VOVFNJWkVfQllOQU1FKGFyZ3MtPm5hbWVsZW4pOwpAQCAtOTQwLDcgKzk0MSw3IEBACiAJaW50IHRtcCwgaTsKIAogCWxlYWYgPSBicC0+ZGF0YTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUl9MRUFGX01BR0lDKTsKIAloZHIgPSAmbGVhZi0+aGRyOwogCUFTU0VSVCgobWFwaW5kZXggPj0gMCkgJiYgKG1hcGluZGV4IDwgWEZTX0RJUl9MRUFGX01BUFNJWkUpKTsKIAlBU1NFUlQoKGluZGV4ID49IDApICYmIChpbmRleCA8PSBJTlRfR0VUKGhkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCkpKTsKQEAgLTEwOTcsOCArMTA5OCw4IEBACiAJQVNTRVJUKGJsazItPm1hZ2ljID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CiAJbGVhZjEgPSBibGsxLT5icC0+ZGF0YTsKIAlsZWFmMiA9IGJsazItPmJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYxLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOwotCUFTU0VSVChJTlRfR0VUKGxlYWYyLT5oZHIuaW5mby5tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOworCUFTU0VSVChiZTE2X3RvX2NwdShsZWFmMS0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYyLT5oZHIuaW5mby5tYWdpYykgPT0gWEZTX0RJUl9MRUFGX01BR0lDKTsKIAogCS8qCiAJICogQ2hlY2sgb3JkZXJpbmcgb2YgYmxvY2tzLCByZXZlcnNlIGlmIGl0IG1ha2VzIHRoaW5ncyBzaW1wbGVyLgpAQCAtMTMyNSw3ICsxMzI2LDcgQEAKIAkgKi8KIAlibGsgPSAmc3RhdGUtPnBhdGguYmxrWyBzdGF0ZS0+cGF0aC5hY3RpdmUtMSBdOwogCWluZm8gPSBibGstPmJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGluZm8tPm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGluZm8tPm1hZ2ljKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOwogCWxlYWYgPSAoeGZzX2Rpcl9sZWFmYmxvY2tfdCAqKWluZm87CiAJY291bnQgPSBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKIAlieXRlcyA9ICh1aW50KXNpemVvZih4ZnNfZGlyX2xlYWZfaGRyX3QpICsKQEAgLTEzNDgsNyArMTM0OSw3IEBACiAJCSAqIE1ha2UgYWx0cGF0aCBwb2ludCB0byB0aGUgYmxvY2sgd2Ugd2FudCB0byBrZWVwIGFuZAogCQkgKiBwYXRoIHBvaW50IHRvIHRoZSBibG9jayB3ZSB3YW50IHRvIGRyb3AgKHRoaXMgb25lKS4KIAkJICovCi0JCWZvcndhcmQgPSBpbmZvLT5mb3J3OworCQlmb3J3YXJkID0gKGluZm8tPmZvcncgIT0gMCk7CiAJCW1lbWNweSgmc3RhdGUtPmFsdHBhdGgsICZzdGF0ZS0+cGF0aCwgc2l6ZW9mKHN0YXRlLT5wYXRoKSk7CiAJCWVycm9yID0geGZzX2RhX3BhdGhfc2hpZnQoc3RhdGUsICZzdGF0ZS0+YWx0cGF0aCwgZm9yd2FyZCwKIAkJCQkJCSAwLCAmcmV0dmFsKTsKQEAgLTEzNjksMTIgKzEzNzAsMTIgQEAKIAkgKiBXZSBwcmVmZXIgY29hbGVzY2luZyB3aXRoIHRoZSBsb3dlciBudW1iZXJlZCBzaWJsaW5nIHNvIGFzCiAJICogdG8gc2hyaW5rIGEgZGlyZWN0b3J5IG92ZXIgdGltZS4KIAkgKi8KLQlmb3J3YXJkID0gKElOVF9HRVQoaW5mby0+Zm9ydywgQVJDSF9DT05WRVJUKSA8IElOVF9HRVQoaW5mby0+YmFjaywgQVJDSF9DT05WRVJUKSk7CS8qIHN0YXJ0IHdpdGggc21hbGxlciBibGsgbnVtICovCisJZm9yd2FyZCA9IChiZTMyX3RvX2NwdShpbmZvLT5mb3J3KSA8IGJlMzJfdG9fY3B1KGluZm8tPmJhY2spKTsJLyogc3RhcnQgd2l0aCBzbWFsbGVyIGJsayBudW0gKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgZm9yd2FyZCA9ICFmb3J3YXJkLCBpKyspIHsKIAkJaWYgKGZvcndhcmQpCi0JCQlibGtubyA9IElOVF9HRVQoaW5mby0+Zm9ydywgQVJDSF9DT05WRVJUKTsKKwkJCWJsa25vID0gYmUzMl90b19jcHUoaW5mby0+Zm9ydyk7CiAJCWVsc2UKLQkJCWJsa25vID0gSU5UX0dFVChpbmZvLT5iYWNrLCBBUkNIX0NPTlZFUlQpOworCQkJYmxrbm8gPSBiZTMyX3RvX2NwdShpbmZvLT5iYWNrKTsKIAkJaWYgKGJsa25vID09IDApCiAJCQljb250aW51ZTsKIAkJZXJyb3IgPSB4ZnNfZGFfcmVhZF9idWYoc3RhdGUtPmFyZ3MtPnRyYW5zLCBzdGF0ZS0+YXJncy0+ZHAsCkBAIC0xMzg5LDcgKzEzOTAsNyBAQAogCQlieXRlcyAgPSBzdGF0ZS0+YmxvY2tzaXplIC0gKHN0YXRlLT5ibG9ja3NpemU+PjIpOwogCQlieXRlcyAtPSBJTlRfR0VUKGxlYWYtPmhkci5uYW1lYnl0ZXMsIEFSQ0hfQ09OVkVSVCk7CiAJCWxlYWYgPSBicC0+ZGF0YTsKLQkJQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUl9MRUFGX01BR0lDKTsKKwkJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOwogCQljb3VudCArPSBJTlRfR0VUKGxlYWYtPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKTsKIAkJYnl0ZXMgLT0gSU5UX0dFVChsZWFmLT5oZHIubmFtZWJ5dGVzLCBBUkNIX0NPTlZFUlQpOwogCQlieXRlcyAtPSBjb3VudCAqICgodWludClzaXplb2YoeGZzX2Rpcl9sZWFmX25hbWVfdCkgLSAxKTsKQEAgLTE0NDcsNyArMTQ0OCw3IEBACiAJeGZzX21vdW50X3QgKm1wOwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOwogCWhkciA9ICZsZWFmLT5oZHI7CiAJbXAgPSB0cmFucy0+dF9tb3VudHA7CiAJQVNTRVJUKChJTlRfR0VUKGhkci0+Y291bnQsIEFSQ0hfQ09OVkVSVCkgPiAwKSAmJiAoSU5UX0dFVChoZHItPmNvdW50LCBBUkNIX0NPTlZFUlQpIDwgKFhGU19MQlNJWkUobXApLzgpKSk7CkBAIC0xNTk5LDggKzE2MDAsOCBAQAogCUFTU0VSVChzYXZlX2Jsay0+bWFnaWMgPT0gWEZTX0RJUl9MRUFGX01BR0lDKTsKIAlkcm9wX2xlYWYgPSBkcm9wX2Jsay0+YnAtPmRhdGE7CiAJc2F2ZV9sZWFmID0gc2F2ZV9ibGstPmJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGRyb3BfbGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUl9MRUFGX01BR0lDKTsKLQlBU1NFUlQoSU5UX0dFVChzYXZlX2xlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGRyb3BfbGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KHNhdmVfbGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CiAJZHJvcF9oZHIgPSAmZHJvcF9sZWFmLT5oZHI7CiAJc2F2ZV9oZHIgPSAmc2F2ZV9sZWFmLT5oZHI7CiAKQEAgLTE2OTUsNyArMTY5Niw3IEBACiAJeGZzX2RhaGFzaF90IGhhc2h2YWw7CiAKIAlsZWFmID0gYnAtPmRhdGE7Ci0JQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUl9MRUFGX01BR0lDKTsKKwlBU1NFUlQoYmUxNl90b19jcHUobGVhZi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CiAJQVNTRVJUKElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpIDwgKFhGU19MQlNJWkUoYXJncy0+ZHAtPmlfbW91bnQpLzgpKTsKIAogCS8qCkBAIC0xNzgyLDggKzE3ODMsOCBAQAogCS8qCiAJICogU2V0IHVwIGVudmlyb25tZW50LgogCSAqLwotCUFTU0VSVChJTlRfR0VUKGxlYWZfcy0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgPT0gWEZTX0RJUl9MRUFGX01BR0lDKTsKLQlBU1NFUlQoSU5UX0dFVChsZWFmX2QtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWZfcy0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWZfZC0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CiAJaGRyX3MgPSAmbGVhZl9zLT5oZHI7CiAJaGRyX2QgPSAmbGVhZl9kLT5oZHI7CiAJQVNTRVJUKChJTlRfR0VUKGhkcl9zLT5jb3VudCwgQVJDSF9DT05WRVJUKSA+IDApICYmIChJTlRfR0VUKGhkcl9zLT5jb3VudCwgQVJDSF9DT05WRVJUKSA8IChYRlNfTEJTSVpFKG1wKS84KSkpOwpAQCAtMTg4Myw4ICsxODg0LDggQEAKIAogCWxlYWYxID0gbGVhZjFfYnAtPmRhdGE7CiAJbGVhZjIgPSBsZWFmMl9icC0+ZGF0YTsKLQlBU1NFUlQoKElOVF9HRVQobGVhZjEtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQykgJiYKLQkgICAgICAgKElOVF9HRVQobGVhZjItPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQykpOworCUFTU0VSVCgoYmUxNl90b19jcHUobGVhZjEtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpICYmCisJICAgICAgIChiZTE2X3RvX2NwdShsZWFmMi0+aGRyLmluZm8ubWFnaWMpID09IFhGU19ESVJfTEVBRl9NQUdJQykpOwogCWlmICgoSU5UX0dFVChsZWFmMS0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpID4gMCkgJiYgKElOVF9HRVQobGVhZjItPmhkci5jb3VudCwgQVJDSF9DT05WRVJUKSA+IDApICYmCiAJICAgICgoSU5UX0dFVChsZWFmMi0+ZW50cmllc1sgMCBdLmhhc2h2YWwsIEFSQ0hfQ09OVkVSVCkgPAogCSAgICAgIElOVF9HRVQobGVhZjEtPmVudHJpZXNbIDAgXS5oYXNodmFsLCBBUkNIX0NPTlZFUlQpKSB8fApAQCAtMTkwNCw3ICsxOTA1LDcgQEAKIAl4ZnNfZGlyX2xlYWZibG9ja190ICpsZWFmOwogCiAJbGVhZiA9IGJwLT5kYXRhOwotCUFTU0VSVChJTlRfR0VUKGxlYWYtPmhkci5pbmZvLm1hZ2ljLCBBUkNIX0NPTlZFUlQpID09IFhGU19ESVJfTEVBRl9NQUdJQyk7CisJQVNTRVJUKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSA9PSBYRlNfRElSX0xFQUZfTUFHSUMpOwogCWlmIChjb3VudCkKIAkJKmNvdW50ID0gSU5UX0dFVChsZWFmLT5oZHIuY291bnQsIEFSQ0hfQ09OVkVSVCk7CiAJaWYgKCFsZWFmLT5oZHIuY291bnQpCkBAIC0xOTQwLDcgKzE5NDEsNyBAQAogCiAJbXAgPSBkcC0+aV9tb3VudDsKIAlsZWFmID0gYnAtPmRhdGE7Ci0JaWYgKElOVF9HRVQobGVhZi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkgIT0gWEZTX0RJUl9MRUFGX01BR0lDKSB7CisJaWYgKGJlMTZfdG9fY3B1KGxlYWYtPmhkci5pbmZvLm1hZ2ljKSAhPSBYRlNfRElSX0xFQUZfTUFHSUMpIHsKIAkJKmVvYnAgPSAxOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVOT0VOVCk7CS8qIFhYWCB3cm9uZyBjb2RlICovCiAJfQpAQCAtMTk5Miw3ICsxOTkzLDcgQEAKIAogCWlmIChpID09IElOVF9HRVQobGVhZi0+aGRyLmNvdW50LCBBUkNIX0NPTlZFUlQpKSB7CiAJCXhmc19kaXJfdHJhY2VfZ19kdSgibGVhZjogaGFzaCBub3QgZm91bmQiLCBkcCwgdWlvKTsKLQkJaWYgKCFJTlRfR0VUKGxlYWYtPmhkci5pbmZvLmZvcncsIEFSQ0hfQ09OVkVSVCkpCisJCWlmICghbGVhZi0+aGRyLmluZm8uZm9ydykKIAkJCXVpby0+dWlvX29mZnNldCA9CiAJCQkJWEZTX0RBX01BS0VfQ09PS0lFKG1wLCAwLCAwLCBYRlNfREFfTUFYSEFTSCk7CiAJCS8qCkBAIC0yMDQ3LDggKzIwNDgsNyBAQAogCQkJeGZzX2Rpcl90cmFjZV9nX2R1YygibGVhZjogbWlkZGxlIGNvb2tpZSAgIiwKIAkJCQkJCSAgIGRwLCB1aW8sIHAuY29vay5vKTsKIAotCQl9IGVsc2UgaWYgKCh0aGlzaGFzaCA9IElOVF9HRVQobGVhZi0+aGRyLmluZm8uZm9ydywKLQkJCQkJCQlBUkNIX0NPTlZFUlQpKSkgeworCQl9IGVsc2UgaWYgKCh0aGlzaGFzaCA9IGJlMzJfdG9fY3B1KGxlYWYtPmhkci5pbmZvLmZvcncpKSkgewogCQkJeGZzX2RhYnVmX3QgKmJwMjsKIAkJCXhmc19kaXJfbGVhZmJsb2NrX3QgKmxlYWYyOwogCkBAIC0yMDY0LDkgKzIwNjQsOSBAQAogCQkJbGVhZjIgPSBicDItPmRhdGE7CiAKIAkJCWlmICh1bmxpa2VseSgKLQkJCSAgICAgICAoSU5UX0dFVChsZWFmMi0+aGRyLmluZm8ubWFnaWMsIEFSQ0hfQ09OVkVSVCkKKwkJCSAgICAgICAoYmUxNl90b19jcHUobGVhZjItPmhkci5pbmZvLm1hZ2ljKQogCQkJCQkJIT0gWEZTX0RJUl9MRUFGX01BR0lDKQotCQkJICAgIHx8IChJTlRfR0VUKGxlYWYyLT5oZHIuaW5mby5iYWNrLCBBUkNIX0NPTlZFUlQpCisJCQkgICAgfHwgKGJlMzJfdG9fY3B1KGxlYWYyLT5oZHIuaW5mby5iYWNrKQogCQkJCQkJIT0gYm5vKSkpIHsJLyogR1JPVCAqLwogCQkJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfZGlyX2xlYWZfZ2V0ZGVudHNfaW50KDMpIiwKIAkJCQkJCSAgICAgWEZTX0VSUkxFVkVMX0xPVywgbXAsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Rpcl9zZi5oIGIvZnMveGZzL3hmc19kaXJfc2YuaAppbmRleCBmZTQ0YzZmLi41YjIwYjRkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Rpcl9zZi5oCisrKyBiL2ZzL3hmcy94ZnNfZGlyX3NmLmgKQEAgLTM1LDE5ICszNSwyMSBAQAogICogYW5kIHRoZSBlbGVtZW50cyBtdWNoIGJlIG1lbWNweSdkIG91dCBpbnRvIGEgd29yayBhcmVhIHRvIGdldCBjb3JyZWN0CiAgKiBhbGlnbm1lbnQgZm9yIHRoZSBpbm9kZSBudW1iZXIgZmllbGRzLgogICovCit0eXBlZGVmIHN0cnVjdCB4ZnNfZGlyX3NmX2hkciB7CQkvKiBjb25zdGFudC1zdHJ1Y3R1cmUgaGVhZGVyIGJsb2NrICovCisJeGZzX2Rpcl9pbm9fdAlwYXJlbnQ7CQkvKiBwYXJlbnQgZGlyIGlub2RlIG51bWJlciAqLworCV9fdWludDhfdAljb3VudDsJCS8qIGNvdW50IG9mIGFjdGl2ZSBlbnRyaWVzICovCit9IHhmc19kaXJfc2ZfaGRyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHhmc19kaXJfc2ZfZW50cnkgeworCXhmc19kaXJfaW5vX3QJaW51bWJlcjsJLyogcmVmZXJlbmNlZCBpbm9kZSBudW1iZXIgKi8KKwlfX3VpbnQ4X3QJbmFtZWxlbjsJLyogYWN0dWFsIGxlbmd0aCBvZiBuYW1lIChubyBOVUxMKSAqLworCV9fdWludDhfdAluYW1lWzFdOwkvKiBuYW1lICovCit9IHhmc19kaXJfc2ZfZW50cnlfdDsKKwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2Rpcl9zaG9ydGZvcm0gewotCXN0cnVjdCB4ZnNfZGlyX3NmX2hkciB7CQkvKiBjb25zdGFudC1zdHJ1Y3R1cmUgaGVhZGVyIGJsb2NrICovCi0JCXhmc19kaXJfaW5vX3QgcGFyZW50OwkvKiBwYXJlbnQgZGlyIGlub2RlIG51bWJlciAqLwotCQlfX3VpbnQ4X3QgY291bnQ7CS8qIGNvdW50IG9mIGFjdGl2ZSBlbnRyaWVzICovCi0JfSBoZHI7Ci0Jc3RydWN0IHhmc19kaXJfc2ZfZW50cnkgewotCQl4ZnNfZGlyX2lub190IGludW1iZXI7CS8qIHJlZmVyZW5jZWQgaW5vZGUgbnVtYmVyICovCi0JCV9fdWludDhfdCBuYW1lbGVuOwkvKiBhY3R1YWwgbGVuZ3RoIG9mIG5hbWUgKG5vIE5VTEwpICovCi0JCV9fdWludDhfdCBuYW1lWzFdOwkvKiBuYW1lICovCi0JfSBsaXN0WzFdOwkJCS8qIHZhcmlhYmxlIHNpemVkIGFycmF5ICovCisJeGZzX2Rpcl9zZl9oZHJfdAloZHI7CisJeGZzX2Rpcl9zZl9lbnRyeV90CWxpc3RbMV07CS8qIHZhcmlhYmxlIHNpemVkIGFycmF5ICovCiB9IHhmc19kaXJfc2hvcnRmb3JtX3Q7Ci10eXBlZGVmIHN0cnVjdCB4ZnNfZGlyX3NmX2hkciB4ZnNfZGlyX3NmX2hkcl90OwotdHlwZWRlZiBzdHJ1Y3QgeGZzX2Rpcl9zZl9lbnRyeSB4ZnNfZGlyX3NmX2VudHJ5X3Q7CiAKIC8qCiAgKiBXZSBnZW5lcmF0ZSB0aGlzIHRoZW4gc29ydCBpdCwgc28gdGhhdCByZWFkZGlycyBhcmUgcmV0dXJuZWQgaW4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZG1hcGkuaCBiL2ZzL3hmcy94ZnNfZG1hcGkuaAppbmRleCBiNGM3ZjJiLi4wMGIxNTQwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RtYXBpLmgKKysrIGIvZnMveGZzL3hmc19kbWFwaS5oCkBAIC0xOTEsMTQgKzE5MSw0IEBACiAKIGV4dGVybiBzdHJ1Y3QgYmh2X3Zmc29wcyB4ZnNfZG1vcHM7CiAKLSNpZmRlZiBDT05GSUdfWEZTX0RNQVBJCi12b2lkIHhmc19kbV9pbml0KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICopOwotdm9pZCB4ZnNfZG1fZXhpdChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqKTsKLSNkZWZpbmUgWEZTX0RNX0lOSVQoZnN0eXBlKQl4ZnNfZG1faW5pdChmc3R5cGUpCi0jZGVmaW5lIFhGU19ETV9FWElUKGZzdHlwZSkJeGZzX2RtX2V4aXQoZnN0eXBlKQotI2Vsc2UKLSNkZWZpbmUgWEZTX0RNX0lOSVQoZnN0eXBlKQotI2RlZmluZSBYRlNfRE1fRVhJVChmc3R5cGUpCi0jZW5kaWYKLQogI2VuZGlmICAvKiBfX1hGU19ETUFQSV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCBiNGQ5NzFiLi41NmNhYTg4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC00NjIsNiArNDYyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nCXM7CiAKKwl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzX2xhenkobXApOwogCXMgPSBYRlNfU0JfTE9DSyhtcCk7CiAJY250LT5mcmVlZGF0YSA9IG1wLT5tX3NiLnNiX2ZkYmxvY2tzOwogCWNudC0+ZnJlZXJ0eCA9IG1wLT5tX3NiLnNiX2ZyZXh0ZW50czsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IDhmM2ZhZTEuLjAwMjQ4OTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtMTM4LDggKzEzOCw2IEBACiAJaW50CQl2ZXJzaW9uOwkvKiBpbm9kZSB2ZXJzaW9uIG51bWJlciB0byB1c2UgKi8KIAlpbnQJCWlzYWxpZ25lZDsJLyogaW5vZGUgYWxsb2NhdGlvbiBhdCBzdHJpcGUgdW5pdCAqLwogCQkJCQkvKiBib3VuZGFyeSAqLwotCXhmc19kaW5vZGVfY29yZV90IGRpYzsgICAgICAgICAgLyogYSBkaW5vZGVfY29yZSB0byBjb3B5IHRvIG5ldyAqLwotCQkJCQkvKiBpbm9kZXMgKi8KIAogCWFyZ3MudHAgPSB0cDsKIAlhcmdzLm1wID0gdHAtPnRfbW91bnRwOwpAQCAtMjUwLDEwICsyNDgsNiBAQAogCWVsc2UKIAkJdmVyc2lvbiA9IFhGU19ESU5PREVfVkVSU0lPTl8xOwogCi0JbWVtc2V0KCZkaWMsIDAsIHNpemVvZih4ZnNfZGlub2RlX2NvcmVfdCkpOwotCUlOVF9TRVQoZGljLmRpX21hZ2ljLCBBUkNIX0NPTlZFUlQsIFhGU19ESU5PREVfTUFHSUMpOwotCUlOVF9TRVQoZGljLmRpX3ZlcnNpb24sIEFSQ0hfQ09OVkVSVCwgdmVyc2lvbik7Ci0KIAlmb3IgKGogPSAwOyBqIDwgbmJ1ZnM7IGorKykgewogCQkvKgogCQkgKiBHZXQgdGhlIGJsb2NrLgpAQCAtMjY2LDEyICsyNjAsMTMgQEAKIAkJQVNTRVJUKGZidWYpOwogCQlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoZmJ1ZikpOwogCQkvKgotCQkgKiBMb29wIG92ZXIgdGhlIGlub2RlcyBpbiB0aGlzIGJ1ZmZlci4KKwkJICogU2V0IGluaXRpYWwgdmFsdWVzIGZvciB0aGUgaW5vZGVzIGluIHRoaXMgYnVmZmVyLgogCQkgKi8KLQorCQl4ZnNfYmlvemVybyhmYnVmLCAwLCBuaW5vZGVzIDw8IGFyZ3MubXAtPm1fc2Iuc2JfaW5vZGVsb2cpOwogCQlmb3IgKGkgPSAwOyBpIDwgbmlub2RlczsgaSsrKSB7CiAJCQlmcmVlID0gWEZTX01BS0VfSVBUUihhcmdzLm1wLCBmYnVmLCBpKTsKLQkJCW1lbWNweSgmKGZyZWUtPmRpX2NvcmUpLCAmZGljLCBzaXplb2YoeGZzX2Rpbm9kZV9jb3JlX3QpKTsKKwkJCUlOVF9TRVQoZnJlZS0+ZGlfY29yZS5kaV9tYWdpYywgQVJDSF9DT05WRVJULCBYRlNfRElOT0RFX01BR0lDKTsKKwkJCUlOVF9TRVQoZnJlZS0+ZGlfY29yZS5kaV92ZXJzaW9uLCBBUkNIX0NPTlZFUlQsIHZlcnNpb24pOwogCQkJSU5UX1NFVChmcmVlLT5kaV9uZXh0X3VubGlua2VkLCBBUkNIX0NPTlZFUlQsIE5VTExBR0lOTyk7CiAJCQl4ZnNfaWFsbG9jX2xvZ19kaSh0cCwgZmJ1ZiwgaSwKIAkJCQlYRlNfRElfQ09SRV9CSVRTIHwgWEZTX0RJX05FWFRfVU5MSU5LRUQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCA4ZTM4MGExLi4zY2UzNWE2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJCQkJZ290byBmaW5pc2hfaW5vZGU7CiAKIAkJCX0gZWxzZSBpZiAodnAgIT0gaW5vZGVfdnApIHsKLQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTElOVkZTX0dFVF9JUChpbm9kZV92cCk7CisJCQkJc3RydWN0IGlub2RlICppbm9kZSA9IHZuX3RvX2lub2RlKGlub2RlX3ZwKTsKIAogCQkJCS8qIFRoZSBpbm9kZSBpcyBiZWluZyB0b3JuIGRvd24sIHBhdXNlIGFuZAogCQkJCSAqIHRyeSBhZ2Fpbi4KQEAgLTQ5NSw3ICs0OTUsNyBAQAogCWlmICgoaW5vZGUgPSBpZ2V0X2xvY2tlZChYRlNfTVRPVkZTKG1wKS0+dmZzX3N1cGVyLCBpbm8pKSkgewogCQl4ZnNfaW5vZGVfdAkqaXA7CiAKLQkJdnAgPSBMSU5WRlNfR0VUX1ZQKGlub2RlKTsKKwkJdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKIAkJaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpIHsKIAkJCXZuX2luaXRpYWxpemUoaW5vZGUpOwogCQkJZXJyb3IgPSB4ZnNfaWdldF9jb3JlKHZwLCBtcCwgdHAsIGlubywgZmxhZ3MsCkBAIC02MTcsNyArNjE3LDcgQEAKIAkgICAgIHVpbnQJCWxvY2tfZmxhZ3MpCiB7CiAJdm5vZGVfdAkJKnZwID0gWEZTX0lUT1YoaXApOwotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBMSU5WRlNfR0VUX0lQKHZwKTsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gdm5fdG9faW5vZGUodnApOwogCiAJdm5fdHJhY2VfZW50cnkodnAsICJ4ZnNfaXB1dF9uZXciLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCAxZDdmNWE3Li44OGE1MTdmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC03NiwxNiArNzYsMTggQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc192YWxpZGF0ZV9leHRlbnRzKAotCXhmc19ibWJ0X3JlY190CQkqZXAsCisJeGZzX2lmb3JrX3QJCSppZnAsCiAJaW50CQkJbnJlY3MsCiAJaW50CQkJZGlzaywKIAl4ZnNfZXhudGZtdF90CQlmbXQpCiB7CisJeGZzX2JtYnRfcmVjX3QJCSplcDsKIAl4ZnNfYm1idF9pcmVjX3QJCWlyZWM7CiAJeGZzX2JtYnRfcmVjX3QJCXJlYzsKIAlpbnQJCQlpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yZWNzOyBpKyspIHsKKwkJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaSk7CiAJCXJlYy5sMCA9IGdldF91bmFsaWduZWQoKF9fdWludDY0X3QqKSZlcC0+bDApOwogCQlyZWMubDEgPSBnZXRfdW5hbGlnbmVkKChfX3VpbnQ2NF90KikmZXAtPmwxKTsKIAkJaWYgKGRpc2spCkBAIC05NCwxMSArOTYsMTAgQEAKIAkJCXhmc19ibWJ0X2dldF9hbGwoJnJlYywgJmlyZWMpOwogCQlpZiAoZm10ID09IFhGU19FWFRGTVRfTk9TVEFURSkKIAkJCUFTU0VSVChpcmVjLmJyX3N0YXRlID09IFhGU19FWFRfTk9STSk7Ci0JCWVwKys7CiAJfQogfQogI2Vsc2UgLyogREVCVUcgKi8KLSNkZWZpbmUgeGZzX3ZhbGlkYXRlX2V4dGVudHMoZXAsIG5yZWNzLCBkaXNrLCBmbXQpCisjZGVmaW5lIHhmc192YWxpZGF0ZV9leHRlbnRzKGlmcCwgbnJlY3MsIGRpc2ssIGZtdCkKICNlbmRpZiAvKiBERUJVRyAqLwogCiAvKgpAQCAtMjUyLDcgKzI1Myw4IEBACiAJeGZzX2lub2RlX3QJKmlwLAogCXhmc19kaW5vZGVfdAkqKmRpcHAsCiAJeGZzX2J1Zl90CSoqYnBwLAotCXhmc19kYWRkcl90CWJubykKKwl4ZnNfZGFkZHJfdAlibm8sCisJdWludAkJaW1hcF9mbGFncykKIHsKIAl4ZnNfYnVmX3QJKmJwOwogCWludAkJZXJyb3I7CkBAIC0yNjgsMTAgKzI3MCw5IEBACiAJCSAqIGlub2RlIG9uIGRpc2suCiAJCSAqLwogCQlpbWFwLmltX2Jsa25vID0gYm5vOwotCQllcnJvciA9IHhmc19pbWFwKG1wLCB0cCwgaXAtPmlfaW5vLCAmaW1hcCwgWEZTX0lNQVBfTE9PS1VQKTsKLQkJaWYgKGVycm9yICE9IDApIHsKKwkJaWYgKChlcnJvciA9IHhmc19pbWFwKG1wLCB0cCwgaXAtPmlfaW5vLCAmaW1hcCwKKwkJCQkJWEZTX0lNQVBfTE9PS1VQIHwgaW1hcF9mbGFncykpKQogCQkJcmV0dXJuIGVycm9yOwotCQl9CiAKIAkJLyoKIAkJICogSWYgdGhlIGlub2RlIG51bWJlciBtYXBzIHRvIGEgYmxvY2sgb3V0c2lkZSB0aGUgYm91bmRzCkBAIC0zMzUsOSArMzM2LDEwIEBACiAJICogKGlmIERFQlVHIGtlcm5lbCkgb3IgdGhlIGZpcnN0IGlub2RlIGluIHRoZSBidWZmZXIsIG90aGVyd2lzZS4KIAkgKi8KICNpZmRlZiBERUJVRwotCW5pID0gQkJUT0IoaW1hcC5pbV9sZW4pID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nOworCW5pID0gKGltYXBfZmxhZ3MgJiBYRlNfSU1BUF9CVUxLU1RBVCkgPyAwIDoKKwkJKEJCVE9CKGltYXAuaW1fbGVuKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZyk7CiAjZWxzZQotCW5pID0gMTsKKwluaSA9IChpbWFwX2ZsYWdzICYgWEZTX0lNQVBfQlVMS1NUQVQpID8gMCA6IDE7CiAjZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgbmk7IGkrKykgewogCQlpbnQJCWRpX29rOwpAQCAtNTA0LDcgKzUwNiw3IEBACiAJc3dpdGNoIChJTlRfR0VUKGRpcC0+ZGlfY29yZS5kaV9hZm9ybWF0LCBBUkNIX0NPTlZFUlQpKSB7CiAJY2FzZSBYRlNfRElOT0RFX0ZNVF9MT0NBTDoKIAkJYXRwID0gKHhmc19hdHRyX3Nob3J0Zm9ybV90ICopWEZTX0RGT1JLX0FQVFIoZGlwKTsKLQkJc2l6ZSA9IChpbnQpSU5UX0dFVChhdHAtPmhkci50b3RzaXplLCBBUkNIX0NPTlZFUlQpOworCQlzaXplID0gYmUxNl90b19jcHUoYXRwLT5oZHIudG90c2l6ZSk7CiAJCWVycm9yID0geGZzX2lmb3JtYXRfbG9jYWwoaXAsIGRpcCwgWEZTX0FUVFJfRk9SSywgc2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgWEZTX0RJTk9ERV9GTVRfRVhURU5UUzoKQEAgLTU5Nyw3ICs1OTksNiBAQAogCXhmc19ibWJ0X3JlY190CSplcCwgKmRwOwogCXhmc19pZm9ya190CSppZnA7CiAJaW50CQluZXg7Ci0JaW50CQlyZWFsX3NpemU7CiAJaW50CQlzaXplOwogCWludAkJaTsKIApAQCAtNjE5LDIzICs2MjAsMjAgQEAKIAkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCX0KIAotCXJlYWxfc2l6ZSA9IDA7CisJaWZwLT5pZl9yZWFsX2J5dGVzID0gMDsKIAlpZiAobmV4ID09IDApCiAJCWlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9IE5VTEw7CiAJZWxzZSBpZiAobmV4IDw9IFhGU19JTkxJTkVfRVhUUykKIAkJaWZwLT5pZl91MS5pZl9leHRlbnRzID0gaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0OwotCWVsc2UgewotCQlpZnAtPmlmX3UxLmlmX2V4dGVudHMgPSBrbWVtX2FsbG9jKHNpemUsIEtNX1NMRUVQKTsKLQkJQVNTRVJUKGlmcC0+aWZfdTEuaWZfZXh0ZW50cyAhPSBOVUxMKTsKLQkJcmVhbF9zaXplID0gc2l6ZTsKLQl9CisJZWxzZQorCQl4ZnNfaWV4dF9hZGQoaWZwLCAwLCBuZXgpOworCiAJaWZwLT5pZl9ieXRlcyA9IHNpemU7Ci0JaWZwLT5pZl9yZWFsX2J5dGVzID0gcmVhbF9zaXplOwogCWlmIChzaXplKSB7CiAJCWRwID0gKHhmc19ibWJ0X3JlY190ICopIFhGU19ERk9SS19QVFIoZGlwLCB3aGljaGZvcmspOwotCQl4ZnNfdmFsaWRhdGVfZXh0ZW50cyhkcCwgbmV4LCAxLCBYRlNfRVhURk1UX0lOT0RFKGlwKSk7Ci0JCWVwID0gaWZwLT5pZl91MS5pZl9leHRlbnRzOwotCQlmb3IgKGkgPSAwOyBpIDwgbmV4OyBpKyssIGVwKyssIGRwKyspIHsKKwkJeGZzX3ZhbGlkYXRlX2V4dGVudHMoaWZwLCBuZXgsIDEsIFhGU19FWFRGTVRfSU5PREUoaXApKTsKKwkJZm9yIChpID0gMDsgaSA8IG5leDsgaSsrLCBkcCsrKSB7CisJCQllcCA9IHhmc19pZXh0X2dldF9leHQoaWZwLCBpKTsKIAkJCWVwLT5sMCA9IElOVF9HRVQoZ2V0X3VuYWxpZ25lZCgoX191aW50NjRfdCopJmRwLT5sMCksCiAJCQkJCQkJCUFSQ0hfQ09OVkVSVCk7CiAJCQllcC0+bDEgPSBJTlRfR0VUKGdldF91bmFsaWduZWQoKF9fdWludDY0X3QqKSZkcC0+bDEpLApAQCAtNjQ2LDcgKzY0NCw3IEBACiAJCWlmICh3aGljaGZvcmsgIT0gWEZTX0RBVEFfRk9SSyB8fAogCQkJWEZTX0VYVEZNVF9JTk9ERShpcCkgPT0gWEZTX0VYVEZNVF9OT1NUQVRFKQogCQkJCWlmICh1bmxpa2VseSh4ZnNfY2hlY2tfbm9zdGF0ZV9leHRlbnRzKAotCQkJCSAgICBpZnAtPmlmX3UxLmlmX2V4dGVudHMsIG5leCkpKSB7CisJCQkJICAgIGlmcCwgMCwgbmV4KSkpIHsKIAkJCQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2lmb3JtYXRfZXh0ZW50cygyKSIsCiAJCQkJCQkJIFhGU19FUlJMRVZFTF9MT1csCiAJCQkJCQkJIGlwLT5pX21vdW50KTsKQEAgLTg3MSw5ICs4NjksOCBAQAogCSAqIHJldHVybiBOVUxMIGFzIHdlbGwuICBTZXQgaV9ibGtubyB0byAwIHNvIHRoYXQgeGZzX2l0b2JwKCkgd2lsbAogCSAqIGtub3cgdGhhdCB0aGlzIGlzIGEgbmV3IGluY29yZSBpbm9kZS4KIAkgKi8KLQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmYnAsIGJubyk7Ci0KLQlpZiAoZXJyb3IgIT0gMCkgeworCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZicCwgYm5vLCAwKTsKKwlpZiAoZXJyb3IpIHsKIAkJa21lbV96b25lX2ZyZWUoeGZzX2lub2RlX3pvbmUsIGlwKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTEwMTUsNiArMTAxMiw3IEBACiB7CiAJaW50CQllcnJvcjsKIAl4ZnNfaWZvcmtfdAkqaWZwOworCXhmc19leHRudW1fdAluZXh0ZW50czsKIAlzaXplX3QJCXNpemU7CiAKIAlpZiAodW5saWtlbHkoWEZTX0lGT1JLX0ZPUk1BVChpcCwgd2hpY2hmb3JrKSAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSkpIHsKQEAgLTEwMjIsMjYgKzEwMjAsMjQgQEAKIAkJCQkgaXAtPmlfbW91bnQpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQotCXNpemUgPSBYRlNfSUZPUktfTkVYVEVOVFMoaXAsIHdoaWNoZm9yaykgKiAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCW5leHRlbnRzID0gWEZTX0lGT1JLX05FWFRFTlRTKGlwLCB3aGljaGZvcmspOworCXNpemUgPSBuZXh0ZW50cyAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CiAJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgd2hpY2hmb3JrKTsKKwogCS8qCiAJICogV2Uga25vdyB0aGF0IHRoZSBzaXplIGlzIHZhbGlkIChpdCdzIGNoZWNrZWQgaW4gaWZvcm1hdF9idHJlZSkKIAkgKi8KLQlpZnAtPmlmX3UxLmlmX2V4dGVudHMgPSBrbWVtX2FsbG9jKHNpemUsIEtNX1NMRUVQKTsKLQlBU1NFUlQoaWZwLT5pZl91MS5pZl9leHRlbnRzICE9IE5VTEwpOwogCWlmcC0+aWZfbGFzdGV4ID0gTlVMTEVYVE5VTTsKLQlpZnAtPmlmX2J5dGVzID0gaWZwLT5pZl9yZWFsX2J5dGVzID0gKGludClzaXplOworCWlmcC0+aWZfYnl0ZXMgPSBpZnAtPmlmX3JlYWxfYnl0ZXMgPSAwOwogCWlmcC0+aWZfZmxhZ3MgfD0gWEZTX0lGRVhURU5UUzsKKwl4ZnNfaWV4dF9hZGQoaWZwLCAwLCBuZXh0ZW50cyk7CiAJZXJyb3IgPSB4ZnNfYm1hcF9yZWFkX2V4dGVudHModHAsIGlwLCB3aGljaGZvcmspOwogCWlmIChlcnJvcikgewotCQlrbWVtX2ZyZWUoaWZwLT5pZl91MS5pZl9leHRlbnRzLCBzaXplKTsKLQkJaWZwLT5pZl91MS5pZl9leHRlbnRzID0gTlVMTDsKLQkJaWZwLT5pZl9ieXRlcyA9IGlmcC0+aWZfcmVhbF9ieXRlcyA9IDA7CisJCXhmc19pZXh0X2Rlc3Ryb3koaWZwKTsKIAkJaWZwLT5pZl9mbGFncyAmPSB+WEZTX0lGRVhURU5UUzsKIAkJcmV0dXJuIGVycm9yOwogCX0KLQl4ZnNfdmFsaWRhdGVfZXh0ZW50cygoeGZzX2JtYnRfcmVjX3QgKilpZnAtPmlmX3UxLmlmX2V4dGVudHMsCi0JCVhGU19JRk9SS19ORVhURU5UUyhpcCwgd2hpY2hmb3JrKSwgMCwgWEZTX0VYVEZNVF9JTk9ERShpcCkpOworCXhmc192YWxpZGF0ZV9leHRlbnRzKGlmcCwgbmV4dGVudHMsIDAsIFhGU19FWFRGTVRfSU5PREUoaXApKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM3NiwxMCArMTM3MiwxMCBAQAogCQkgICAgICh2b2lkKikodW5zaWduZWQgbG9uZykoKHRvc3NfZmluaXNoID4+IDMyKSAmIDB4ZmZmZmZmZmYpLAogCQkgICAgICh2b2lkKikodW5zaWduZWQgbG9uZykodG9zc19maW5pc2ggJiAweGZmZmZmZmZmKSwKIAkJICAgICAodm9pZCopKHVuc2lnbmVkIGxvbmcpY3VycmVudF9jcHUoKSwKLQkJICAgICAodm9pZCopMCwKLQkJICAgICAodm9pZCopMCwKLQkJICAgICAodm9pZCopMCwKLQkJICAgICAodm9pZCopMCk7CisJCSAgICAgKHZvaWQqKSh1bnNpZ25lZCBsb25nKWN1cnJlbnRfcGlkKCksCisJCSAgICAgKHZvaWQqKU5VTEwsCisJCSAgICAgKHZvaWQqKU5VTEwsCisJCSAgICAgKHZvaWQqKU5VTEwpOwogfQogI2Vsc2UKICNkZWZpbmUJeGZzX2l0cnVuY190cmFjZSh0YWcsIGlwLCBmbGFnLCBuZXdfc2l6ZSwgdG9zc19zdGFydCwgdG9zc19maW5pc2gpCkBAIC0xMzk3LDYgKzEzOTMsMTYgQEAKICAqIGNhbGxpbmcgaW50byB0aGUgYnVmZmVyL3BhZ2UgY2FjaGUgY29kZSBhbmQgd2UgY2FuJ3QgaG9sZCB0aGUKICAqIGlub2RlIGxvY2sgd2hlbiB3ZSBkbyBzby4KICAqCisgKiBXZSBuZWVkIHRvIHdhaXQgZm9yIGFueSBkaXJlY3QgSS9PcyBpbiBmbGlnaHQgdG8gY29tcGxldGUgYmVmb3JlIHdlCisgKiBwcm9jZWVkIHdpdGggdGhlIHRydW5jYXRlLiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBleHRlbnRzCisgKiBiZWluZyByZWFkIG9yIHdyaXR0ZW4gYnkgdGhlIGRpcmVjdCBJL09zIGZyb20gYmVpbmcgcmVtb3ZlZCB3aGlsZSB0aGUKKyAqIEkvTyBpcyBpbiBmbGlnaHQgYXMgdGhlcmUgaXMgbm8gb3RoZXIgbWV0aG9kIG9mIHN5bmNocm9uaXNpbmcKKyAqIGRpcmVjdCBJL08gd2l0aCB0aGUgdHJ1bmNhdGUgb3BlcmF0aW9uLiAgQWxzbywgYmVjYXVzZSB3ZSBob2xkCisgKiB0aGUgSU9MT0NLIGluIGV4Y2x1c2l2ZSBtb2RlLCB3ZSBwcmV2ZW50IG5ldyBkaXJlY3QgSS9PcyBmcm9tIGJlaW5nCisgKiBzdGFydGVkIHVudGlsIHRoZSB0cnVuY2F0ZSBjb21wbGV0ZXMgYW5kIGRyb3BzIHRoZSBsb2NrLiBFc3NlbnRpYWxseSwKKyAqIHRoZSB2bl9pb3dhaXQoKSBjYWxsIGZvcm1zIGFuIEkvTyBiYXJyaWVyIHRoYXQgcHJvdmlkZXMgc3RyaWN0IG9yZGVyaW5nCisgKiBiZXR3ZWVuIGRpcmVjdCBJL09zIGFuZCB0aGUgdHJ1bmNhdGUgb3BlcmF0aW9uLgorICoKICAqIFRoZSBmbGFncyBwYXJhbWV0ZXIgY2FuIGhhdmUgZWl0aGVyIHRoZSB2YWx1ZSBYRlNfSVRSVU5DX0RFRklOSVRFCiAgKiBvciBYRlNfSVRSVU5DX01BWUJFLiAgVGhlIFhGU19JVFJVTkNfTUFZQkUgdmFsdWUgc2hvdWxkIGJlIHVzZWQKICAqIGluIHRoZSBjYXNlIHRoYXQgdGhlIGNhbGxlciBpcyBsb2NraW5nIHRoaW5ncyBvdXQgb2Ygb3JkZXIgYW5kCkBAIC0xNDI0LDYgKzE0MzAsOSBAQAogCiAJbXAgPSBpcC0+aV9tb3VudDsKIAl2cCA9IFhGU19JVE9WKGlwKTsKKworCXZuX2lvd2FpdCh2cCk7ICAvKiB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhbnkgcGVuZGluZyBESU9zICovCisJCiAJLyoKIAkgKiBDYWxsIFZPUF9UT1NTX1BBR0VTKCkgb3IgVk9QX0ZMVVNISU5WQUxfUEFHRVMoKSB0byBnZXQgcmlkIG9mIHBhZ2VzIGFuZCBidWZmZXJzCiAJICogb3ZlcmxhcHBpbmcgdGhlIHJlZ2lvbiBiZWluZyByZW1vdmVkLiAgV2UgaGF2ZSB0byB1c2UKQEAgLTE4OTksNyArMTkwOCw3IEBACiAJCSAqIEhlcmUgd2UgcHV0IHRoZSBoZWFkIHBvaW50ZXIgaW50byBvdXIgbmV4dCBwb2ludGVyLAogCQkgKiBhbmQgdGhlbiB3ZSBmYWxsIHRocm91Z2ggdG8gcG9pbnQgdGhlIGhlYWQgYXQgdXMuCiAJCSAqLwotCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCAwKTsKKwkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgMCwgMCk7CiAJCWlmIChlcnJvcikgewogCQkJcmV0dXJuIGVycm9yOwogCQl9CkBAIC0yMDA4LDcgKzIwMTcsNyBAQAogCQkgKiBvZiBkZWFsaW5nIHdpdGggdGhlIGJ1ZmZlciB3aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8KIAkJICogY2hhbmdlIGl0LgogCQkgKi8KLQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmlicCwgMCk7CisJCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIDAsIDApOwogCQlpZiAoZXJyb3IpIHsKIAkJCWNtbl9lcnIoQ0VfV0FSTiwKIAkJCQkieGZzX2l1bmxpbmtfcmVtb3ZlOiB4ZnNfaXRvYnAoKSAgcmV0dXJuZWQgYW4gZXJyb3IgJWQgb24gJXMuICBSZXR1cm5pbmcgZXJyb3IuIiwKQEAgLTIwNzAsNyArMjA3OSw3IEBACiAJCSAqIE5vdyBsYXN0X2licCBwb2ludHMgdG8gdGhlIGJ1ZmZlciBwcmV2aW91cyB0byB1cyBvbgogCQkgKiB0aGUgdW5saW5rZWQgbGlzdC4gIFB1bGwgdXMgZnJvbSB0aGUgbGlzdC4KIAkJICovCi0JCWVycm9yID0geGZzX2l0b2JwKG1wLCB0cCwgaXAsICZkaXAsICZpYnAsIDApOworCQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmaWJwLCAwLCAwKTsKIAkJaWYgKGVycm9yKSB7CiAJCQljbW5fZXJyKENFX1dBUk4sCiAJCQkJInhmc19pdW5saW5rX3JlbW92ZTogeGZzX2l0b2JwKCkgIHJldHVybmVkIGFuIGVycm9yICVkIG9uICVzLiAgUmV0dXJuaW5nIGVycm9yLiIsCkBAIC0yNDc2LDkyICsyNDg1LDYgQEAKIAogCiAvKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCBmb3IgaWZfZXh0ZW50cwotICogaXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZC4gIFRoZSBjaGFuZ2UgaW4gc2l6ZSBpcyBpbmRpY2F0ZWQgYnkKLSAqIHRoZSBudW1iZXIgb2YgZXh0ZW50cyB0aGF0IG5lZWQgdG8gYmUgYWRkZWQgb3IgZGVsZXRlZCBpbiB0aGUKLSAqIGV4dF9kaWZmIHBhcmFtZXRlci4KLSAqCi0gKiBJZiB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCBoYXMgZGVjcmVhc2VkIGJlbG93IHRoZSBzaXplIG9mIHRoZQotICogaW5saW5lIGJ1ZmZlciwgdGhlbiBzd2l0Y2ggdG8gdXNpbmcgdGhlIGlubGluZSBidWZmZXIuICBPdGhlcndpc2UsCi0gKiB1c2Uga21lbV9yZWFsbG9jKCkgb3Iga21lbV9hbGxvYygpIHRvIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCi0gKiB0byB3aGF0IGlzIG5lZWRlZC4KLSAqCi0gKiBpcCAtLSB0aGUgaW5vZGUgd2hvc2UgaWZfZXh0ZW50cyBhcmVhIGlzIGNoYW5naW5nCi0gKiBleHRfZGlmZiAtLSB0aGUgY2hhbmdlIGluIHRoZSBudW1iZXIgb2YgZXh0ZW50cywgcG9zaXRpdmUgb3IgbmVnYXRpdmUsCi0gKgkgcmVxdWVzdGVkIGZvciB0aGUgaWZfZXh0ZW50cyBhcnJheS4KLSAqLwotdm9pZAoteGZzX2lleHRfcmVhbGxvYygKLQl4ZnNfaW5vZGVfdAkqaXAsCi0JaW50CQlleHRfZGlmZiwKLQlpbnQJCXdoaWNoZm9yaykKLXsKLQlpbnQJCWJ5dGVfZGlmZjsKLQl4ZnNfaWZvcmtfdAkqaWZwOwotCWludAkJbmV3X3NpemU7Ci0JdWludAkJcm5ld19zaXplOwotCi0JaWYgKGV4dF9kaWZmID09IDApIHsKLQkJcmV0dXJuOwotCX0KLQotCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7Ci0JYnl0ZV9kaWZmID0gZXh0X2RpZmYgKiAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwotCW5ld19zaXplID0gKGludClpZnAtPmlmX2J5dGVzICsgYnl0ZV9kaWZmOwotCUFTU0VSVChuZXdfc2l6ZSA+PSAwKTsKLQotCWlmIChuZXdfc2l6ZSA9PSAwKSB7Ci0JCWlmIChpZnAtPmlmX3UxLmlmX2V4dGVudHMgIT0gaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0KSB7Ci0JCQlBU1NFUlQoaWZwLT5pZl9yZWFsX2J5dGVzICE9IDApOwotCQkJa21lbV9mcmVlKGlmcC0+aWZfdTEuaWZfZXh0ZW50cywgaWZwLT5pZl9yZWFsX2J5dGVzKTsKLQkJfQotCQlpZnAtPmlmX3UxLmlmX2V4dGVudHMgPSBOVUxMOwotCQlybmV3X3NpemUgPSAwOwotCX0gZWxzZSBpZiAobmV3X3NpemUgPD0gc2l6ZW9mKGlmcC0+aWZfdTIuaWZfaW5saW5lX2V4dCkpIHsKLQkJLyoKLQkJICogSWYgdGhlIHZhbGlkIGV4dGVudHMgY2FuIGZpdCBpbiBpZl9pbmxpbmVfZXh0LAotCQkgKiBjb3B5IHRoZW0gZnJvbSB0aGUgbWFsbG9jJ2QgdmVjdG9yIGFuZCBmcmVlIGl0LgotCQkgKi8KLQkJaWYgKGlmcC0+aWZfdTEuaWZfZXh0ZW50cyAhPSBpZnAtPmlmX3UyLmlmX2lubGluZV9leHQpIHsKLQkJCS8qCi0JCQkgKiBGb3Igbm93LCBlbXB0eSBmaWxlcyBhcmUgZm9ybWF0IEVYVEVOVFMsCi0JCQkgKiBzbyB0aGUgaWZfZXh0ZW50cyBwb2ludGVyIGlzIG51bGwuCi0JCQkgKi8KLQkJCWlmIChpZnAtPmlmX3UxLmlmX2V4dGVudHMpIHsKLQkJCQltZW1jcHkoaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0LAotCQkJCQlpZnAtPmlmX3UxLmlmX2V4dGVudHMsIG5ld19zaXplKTsKLQkJCQlrbWVtX2ZyZWUoaWZwLT5pZl91MS5pZl9leHRlbnRzLAotCQkJCQkgIGlmcC0+aWZfcmVhbF9ieXRlcyk7Ci0JCQl9Ci0JCQlpZnAtPmlmX3UxLmlmX2V4dGVudHMgPSBpZnAtPmlmX3UyLmlmX2lubGluZV9leHQ7Ci0JCX0KLQkJcm5ld19zaXplID0gMDsKLQl9IGVsc2UgewotCQlybmV3X3NpemUgPSBuZXdfc2l6ZTsKLQkJaWYgKChybmV3X3NpemUgJiAocm5ld19zaXplIC0gMSkpICE9IDApCi0JCQlybmV3X3NpemUgPSB4ZnNfaXJvdW5kdXAocm5ld19zaXplKTsKLQkJLyoKLQkJICogU3R1Y2sgd2l0aCBtYWxsb2MvcmVhbGxvYy4KLQkJICovCi0JCWlmIChpZnAtPmlmX3UxLmlmX2V4dGVudHMgPT0gaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0KSB7Ci0JCQlpZnAtPmlmX3UxLmlmX2V4dGVudHMgPSAoeGZzX2JtYnRfcmVjX3QgKikKLQkJCQlrbWVtX2FsbG9jKHJuZXdfc2l6ZSwgS01fU0xFRVApOwotCQkJbWVtY3B5KGlmcC0+aWZfdTEuaWZfZXh0ZW50cywgaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0LAotCQkJICAgICAgc2l6ZW9mKGlmcC0+aWZfdTIuaWZfaW5saW5lX2V4dCkpOwotCQl9IGVsc2UgaWYgKHJuZXdfc2l6ZSAhPSBpZnAtPmlmX3JlYWxfYnl0ZXMpIHsKLQkJCWlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9ICh4ZnNfYm1idF9yZWNfdCAqKQotCQkJICBrbWVtX3JlYWxsb2MoaWZwLT5pZl91MS5pZl9leHRlbnRzLAotCQkJCQlybmV3X3NpemUsCi0JCQkJCWlmcC0+aWZfcmVhbF9ieXRlcywKLQkJCQkJS01fTk9GUyk7Ci0JCX0KLQl9Ci0JaWZwLT5pZl9yZWFsX2J5dGVzID0gcm5ld19zaXplOwotCWlmcC0+aWZfYnl0ZXMgPSBuZXdfc2l6ZTsKLX0KLQotCi0vKgogICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCBmb3IgaWZfZGF0YQogICogaXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZC4gIFRoZSBjaGFuZ2UgaW4gc2l6ZSBpcyBpbmRpY2F0ZWQgYnkKICAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIG9yIGRlbGV0ZWQgaW4gdGhlCkBAIC0yNzIwLDEyICsyNjQzLDExIEBACiAJCQlpZnAtPmlmX3JlYWxfYnl0ZXMgPSAwOwogCQl9CiAJfSBlbHNlIGlmICgoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVEVOVFMpICYmCi0JCSAgIChpZnAtPmlmX3UxLmlmX2V4dGVudHMgIT0gTlVMTCkgJiYKLQkJICAgKGlmcC0+aWZfdTEuaWZfZXh0ZW50cyAhPSBpZnAtPmlmX3UyLmlmX2lubGluZV9leHQpKSB7CisJCSAgICgoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVElSRUMpIHx8CisJCSAgICAoKGlmcC0+aWZfdTEuaWZfZXh0ZW50cyAhPSBOVUxMKSAmJgorCQkgICAgIChpZnAtPmlmX3UxLmlmX2V4dGVudHMgIT0gaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0KSkpKSB7CiAJCUFTU0VSVChpZnAtPmlmX3JlYWxfYnl0ZXMgIT0gMCk7Ci0JCWttZW1fZnJlZShpZnAtPmlmX3UxLmlmX2V4dGVudHMsIGlmcC0+aWZfcmVhbF9ieXRlcyk7Ci0JCWlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9IE5VTEw7Ci0JCWlmcC0+aWZfcmVhbF9ieXRlcyA9IDA7CisJCXhmc19pZXh0X2Rlc3Ryb3koaWZwKTsKIAl9CiAJQVNTRVJUKGlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9PSBOVUxMIHx8CiAJICAgICAgIGlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9PSBpZnAtPmlmX3UyLmlmX2lubGluZV9leHQpOwpAQCAtMjgxNCw3ICsyNzM2LDcgQEAKIAogCQkvKiBtYWtlIHN5bmMgY29tZSBiYWNrIGFuZCBmbHVzaCB0aGlzIGlub2RlICovCiAJCWlmICh2cCkgewotCQkJc3RydWN0IGlub2RlCSppbm9kZSA9IExJTlZGU19HRVRfSVAodnApOworCQkJc3RydWN0IGlub2RlCSppbm9kZSA9IHZuX3RvX2lub2RlKHZwKTsKIAogCQkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykpCiAJCQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKQEAgLTI5MDIsMTYgKzI4MjQsMTUgQEAKIAkgKiB0aGUgZGVsYXllZCBvbmVzLiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKIAkgKiBub24tZGVsYXllZCBleHRlbnQuCiAJICovCi0JZXAgPSBpZnAtPmlmX3UxLmlmX2V4dGVudHM7CiAJZGVzdF9lcCA9IGJ1ZmZlcjsKIAljb3BpZWQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBucmVjczsgaSsrKSB7CisJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGkpOwogCQlzdGFydF9ibG9jayA9IHhmc19ibWJ0X2dldF9zdGFydGJsb2NrKGVwKTsKIAkJaWYgKElTTlVMTFNUQVJUQkxPQ0soc3RhcnRfYmxvY2spKSB7CiAJCQkvKgogCQkJICogSXQncyBhIGRlbGF5ZWQgYWxsb2NhdGlvbiBleHRlbnQsIHNvIHNraXAgaXQuCiAJCQkgKi8KLQkJCWVwKys7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0yOTIxLDExICsyODQyLDEwIEBACiAJCXB1dF91bmFsaWduZWQoSU5UX0dFVChlcC0+bDEsIEFSQ0hfQ09OVkVSVCksCiAJCQkgICAgICAoX191aW50NjRfdCopJmRlc3RfZXAtPmwxKTsKIAkJZGVzdF9lcCsrOwotCQllcCsrOwogCQljb3BpZWQrKzsKIAl9CiAJQVNTRVJUKGNvcGllZCAhPSAwKTsKLQl4ZnNfdmFsaWRhdGVfZXh0ZW50cyhidWZmZXIsIGNvcGllZCwgMSwgWEZTX0VYVEZNVF9JTk9ERShpcCkpOworCXhmc192YWxpZGF0ZV9leHRlbnRzKGlmcCwgY29waWVkLCAxLCBYRlNfRVhURk1UX0lOT0RFKGlwKSk7CiAKIAlyZXR1cm4gKGNvcGllZCAqICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkpOwogfQpAQCAtMjk5NSw4ICsyOTE1LDEwIEBACiAJY2FzZSBYRlNfRElOT0RFX0ZNVF9FWFRFTlRTOgogCQlBU1NFUlQoKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRFTlRTKSB8fAogCQkgICAgICAgIShpaXAtPmlsaV9mb3JtYXQuaWxmX2ZpZWxkcyAmIGV4dGZsYWdbd2hpY2hmb3JrXSkpOwotCQlBU1NFUlQoKGlmcC0+aWZfdTEuaWZfZXh0ZW50cyAhPSBOVUxMKSB8fCAoaWZwLT5pZl9ieXRlcyA9PSAwKSk7Ci0JCUFTU0VSVCgoaWZwLT5pZl91MS5pZl9leHRlbnRzID09IE5VTEwpIHx8IChpZnAtPmlmX2J5dGVzID4gMCkpOworCQlBU1NFUlQoKHhmc19pZXh0X2dldF9leHQoaWZwLCAwKSAhPSBOVUxMKSB8fAorCQkJKGlmcC0+aWZfYnl0ZXMgPT0gMCkpOworCQlBU1NFUlQoKHhmc19pZXh0X2dldF9leHQoaWZwLCAwKSA9PSBOVUxMKSB8fAorCQkJKGlmcC0+aWZfYnl0ZXMgPiAwKSk7CiAJCWlmICgoaWlwLT5pbGlfZm9ybWF0LmlsZl9maWVsZHMgJiBleHRmbGFnW3doaWNoZm9ya10pICYmCiAJCSAgICAoaWZwLT5pZl9ieXRlcyA+IDApKSB7CiAJCQlBU1NFUlQoWEZTX0lGT1JLX05FWFRFTlRTKGlwLCB3aGljaGZvcmspID4gMCk7CkBAIC0zMTE0LDggKzMwMzYsOCBAQAogCS8qCiAJICogR2V0IHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgb24tZGlzayBpbm9kZS4KIAkgKi8KLQllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsICZicCwgMCk7Ci0JaWYgKGVycm9yICE9IDApIHsKKwllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsICZkaXAsICZicCwgMCwgMCk7CisJaWYgKGVycm9yKSB7CiAJCXhmc19pZnVubG9jayhpcCk7CiAJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0zNjEwLDcgKzM1MzIsNyBAQAogewogCWludAkJZXJyb3I7CiAJbW9kZV90CQlvcmdtb2RlID0gbW9kZTsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gTElOVkZTX0dFVF9JUChYRlNfSVRPVihpcCkpOworCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSB2bl90b19pbm9kZShYRlNfSVRPVihpcCkpOwogCiAJaWYgKG1vZGUgJiBTX0lXVVNSKSB7CiAJCXVtb2RlX3QJCWltb2RlID0gaW5vZGUtPmlfbW9kZTsKQEAgLTM3MDQsMyArMzYyNiwxMTAwIEBACiAJCSAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CiB9CiAjZW5kaWYKKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGV4dGVudCByZWNvcmQgYXQgZmlsZSBpbmRleCBpZHguCisgKi8KK3hmc19ibWJ0X3JlY190ICoKK3hmc19pZXh0X2dldF9leHQoCisJeGZzX2lmb3JrX3QJKmlmcCwJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLworCXhmc19leHRudW1fdAlpZHgpCQkvKiBpbmRleCBvZiB0YXJnZXQgZXh0ZW50ICovCit7CisJQVNTRVJUKGlkeCA+PSAwKTsKKwlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKSAmJiAoaWR4ID09IDApKSB7CisJCXJldHVybiBpZnAtPmlmX3UxLmlmX2V4dF9pcmVjLT5lcl9leHRidWY7CisJfSBlbHNlIGlmIChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQykgeworCQl4ZnNfZXh0X2lyZWNfdAkqZXJwOwkJLyogaXJlYyBwb2ludGVyICovCisJCWludAkJZXJwX2lkeCA9IDA7CS8qIGlyZWMgaW5kZXggKi8KKwkJeGZzX2V4dG51bV90CXBhZ2VfaWR4ID0gaWR4OwkvKiBleHQgaW5kZXggaW4gdGFyZ2V0IGxpc3QgKi8KKworCQllcnAgPSB4ZnNfaWV4dF9pZHhfdG9faXJlYyhpZnAsICZwYWdlX2lkeCwgJmVycF9pZHgsIDApOworCQlyZXR1cm4gJmVycC0+ZXJfZXh0YnVmW3BhZ2VfaWR4XTsKKwl9IGVsc2UgaWYgKGlmcC0+aWZfYnl0ZXMpIHsKKwkJcmV0dXJuICZpZnAtPmlmX3UxLmlmX2V4dGVudHNbaWR4XTsKKwl9IGVsc2UgeworCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBJbnNlcnQgbmV3IGl0ZW0ocykgaW50byB0aGUgZXh0ZW50IHJlY29yZHMgZm9yIGluY29yZSBpbm9kZQorICogZm9yayAnaWZwJy4gICdjb3VudCcgbmV3IGl0ZW1zIGFyZSBpbnNlcnRlZCBhdCBpbmRleCAnaWR4Jy4KKyAqLwordm9pZAoreGZzX2lleHRfaW5zZXJ0KAorCXhmc19pZm9ya190CSppZnAsCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KKwl4ZnNfZXh0bnVtX3QJaWR4LAkJLyogc3RhcnRpbmcgaW5kZXggb2YgbmV3IGl0ZW1zICovCisJeGZzX2V4dG51bV90CWNvdW50LAkJLyogbnVtYmVyIG9mIGluc2VydGVkIGl0ZW1zICovCisJeGZzX2JtYnRfaXJlY190CSpuZXcpCQkvKiBpdGVtcyB0byBpbnNlcnQgKi8KK3sKKwl4ZnNfYm1idF9yZWNfdAkqZXA7CQkvKiBleHRlbnQgcmVjb3JkIHBvaW50ZXIgKi8KKwl4ZnNfZXh0bnVtX3QJaTsJCS8qIGV4dGVudCByZWNvcmQgaW5kZXggKi8KKworCUFTU0VSVChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhURU5UUyk7CisJeGZzX2lleHRfYWRkKGlmcCwgaWR4LCBjb3VudCk7CisJZm9yIChpID0gaWR4OyBpIDwgaWR4ICsgY291bnQ7IGkrKywgbmV3KyspIHsKKwkJZXAgPSB4ZnNfaWV4dF9nZXRfZXh0KGlmcCwgaSk7CisJCXhmc19ibWJ0X3NldF9hbGwoZXAsIG5ldyk7CisJfQorfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgYW1vdW50IG9mIHNwYWNlIHJlcXVpcmVkIGZvciBpbmNvcmUgZmlsZQorICogZXh0ZW50cyBuZWVkcyB0byBiZSBpbmNyZWFzZWQuIFRoZSBleHRfZGlmZiBwYXJhbWV0ZXIgc3RvcmVzIHRoZQorICogbnVtYmVyIG9mIG5ldyBleHRlbnRzIGJlaW5nIGFkZGVkIGFuZCB0aGUgaWR4IHBhcmFtZXRlciBjb250YWlucworICogdGhlIGV4dGVudCBpbmRleCB3aGVyZSB0aGUgbmV3IGV4dGVudHMgd2lsbCBiZSBhZGRlZC4gSWYgdGhlIG5ldworICogZXh0ZW50cyBhcmUgYmVpbmcgYXBwZW5kZWQsIHRoZW4gd2UganVzdCBuZWVkIHRvIChyZSlhbGxvY2F0ZSBhbmQKKyAqIGluaXRpYWxpemUgdGhlIHNwYWNlLiBPdGhlcndpc2UsIGlmIHRoZSBuZXcgZXh0ZW50cyBhcmUgYmVpbmcKKyAqIGluc2VydGVkIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgZXhpc3RpbmcgZW50cmllcywgYSBiaXQgbW9yZSB3b3JrCisgKiBpcyByZXF1aXJlZCB0byBtYWtlIHJvb20gZm9yIHRoZSBuZXcgZXh0ZW50cyB0byBiZSBpbnNlcnRlZC4gVGhlCisgKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgaW4gdGhlIG5ldyBleHRlbnQgZW50cmllcyB1cG9uCisgKiByZXR1cm4uCisgKi8KK3ZvaWQKK3hmc19pZXh0X2FkZCgKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJeGZzX2V4dG51bV90CWlkeCwJCS8qIGluZGV4IHRvIGJlZ2luIGFkZGluZyBleHRzICovCisJaW50CQlleHRfZGlmZikJLyogbnVibWVyIG9mIGV4dGVudHMgdG8gYWRkICovCit7CisJaW50CQlieXRlX2RpZmY7CS8qIG5ldyBieXRlcyBiZWluZyBhZGRlZCAqLworCWludAkJbmV3X3NpemU7CS8qIHNpemUgb2YgZXh0ZW50cyBhZnRlciBhZGRpbmcgKi8KKwl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CS8qIG51bWJlciBvZiBleHRlbnRzIGluIGZpbGUgKi8KKworCW5leHRlbnRzID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJQVNTRVJUKChpZHggPj0gMCkgJiYgKGlkeCA8PSBuZXh0ZW50cykpOworCWJ5dGVfZGlmZiA9IGV4dF9kaWZmICogc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKKwluZXdfc2l6ZSA9IGlmcC0+aWZfYnl0ZXMgKyBieXRlX2RpZmY7CisJLyoKKwkgKiBJZiB0aGUgbmV3IG51bWJlciBvZiBleHRlbnRzIChuZXh0ZW50cyArIGV4dF9kaWZmKQorCSAqIGZpdHMgaW5zaWRlIHRoZSBpbm9kZSwgdGhlbiBjb250aW51ZSB0byB1c2UgdGhlIGlubGluZQorCSAqIGV4dGVudCBidWZmZXIuCisJICovCisJaWYgKG5leHRlbnRzICsgZXh0X2RpZmYgPD0gWEZTX0lOTElORV9FWFRTKSB7CisJCWlmIChpZHggPCBuZXh0ZW50cykgeworCQkJbWVtbW92ZSgmaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0W2lkeCArIGV4dF9kaWZmXSwKKwkJCQkmaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0W2lkeF0sCisJCQkJKG5leHRlbnRzIC0gaWR4KSAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCkpOworCQkJbWVtc2V0KCZpZnAtPmlmX3UyLmlmX2lubGluZV9leHRbaWR4XSwgMCwgYnl0ZV9kaWZmKTsKKwkJfQorCQlpZnAtPmlmX3UxLmlmX2V4dGVudHMgPSBpZnAtPmlmX3UyLmlmX2lubGluZV9leHQ7CisJCWlmcC0+aWZfcmVhbF9ieXRlcyA9IDA7CisJCWlmcC0+aWZfbGFzdGV4ID0gbmV4dGVudHMgKyBleHRfZGlmZjsKKwl9CisJLyoKKwkgKiBPdGhlcndpc2UgdXNlIGEgbGluZWFyIChkaXJlY3QpIGV4dGVudCBsaXN0LgorCSAqIElmIHRoZSBleHRlbnRzIGFyZSBjdXJyZW50bHkgaW5zaWRlIHRoZSBpbm9kZSwKKwkgKiB4ZnNfaWV4dF9yZWFsbG9jX2RpcmVjdCB3aWxsIHN3aXRjaCB1cyBmcm9tCisJICogaW5saW5lIHRvIGRpcmVjdCBleHRlbnQgYWxsb2NhdGlvbiBtb2RlLgorCSAqLworCWVsc2UgaWYgKG5leHRlbnRzICsgZXh0X2RpZmYgPD0gWEZTX0xJTkVBUl9FWFRTKSB7CisJCXhmc19pZXh0X3JlYWxsb2NfZGlyZWN0KGlmcCwgbmV3X3NpemUpOworCQlpZiAoaWR4IDwgbmV4dGVudHMpIHsKKwkJCW1lbW1vdmUoJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tpZHggKyBleHRfZGlmZl0sCisJCQkJJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tpZHhdLAorCQkJCShuZXh0ZW50cyAtIGlkeCkgKiBzaXplb2YoeGZzX2JtYnRfcmVjX3QpKTsKKwkJCW1lbXNldCgmaWZwLT5pZl91MS5pZl9leHRlbnRzW2lkeF0sIDAsIGJ5dGVfZGlmZik7CisJCX0KKwl9CisJLyogSW5kaXJlY3Rpb24gYXJyYXkgKi8KKwllbHNlIHsKKwkJeGZzX2V4dF9pcmVjX3QJKmVycDsKKwkJaW50CQllcnBfaWR4ID0gMDsKKwkJaW50CQlwYWdlX2lkeCA9IGlkeDsKKworCQlBU1NFUlQobmV4dGVudHMgKyBleHRfZGlmZiA+IFhGU19MSU5FQVJfRVhUUyk7CisJCWlmIChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQykgeworCQkJZXJwID0geGZzX2lleHRfaWR4X3RvX2lyZWMoaWZwLCAmcGFnZV9pZHgsICZlcnBfaWR4LCAxKTsKKwkJfSBlbHNlIHsKKwkJCXhmc19pZXh0X2lyZWNfaW5pdChpZnApOworCQkJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKTsKKwkJCWVycCA9IGlmcC0+aWZfdTEuaWZfZXh0X2lyZWM7CisJCX0KKwkJLyogRXh0ZW50cyBmaXQgaW4gdGFyZ2V0IGV4dGVudCBwYWdlICovCisJCWlmIChlcnAgJiYgZXJwLT5lcl9leHRjb3VudCArIGV4dF9kaWZmIDw9IFhGU19MSU5FQVJfRVhUUykgeworCQkJaWYgKHBhZ2VfaWR4IDwgZXJwLT5lcl9leHRjb3VudCkgeworCQkJCW1lbW1vdmUoJmVycC0+ZXJfZXh0YnVmW3BhZ2VfaWR4ICsgZXh0X2RpZmZdLAorCQkJCQkmZXJwLT5lcl9leHRidWZbcGFnZV9pZHhdLAorCQkJCQkoZXJwLT5lcl9leHRjb3VudCAtIHBhZ2VfaWR4KSAqCisJCQkJCXNpemVvZih4ZnNfYm1idF9yZWNfdCkpOworCQkJCW1lbXNldCgmZXJwLT5lcl9leHRidWZbcGFnZV9pZHhdLCAwLCBieXRlX2RpZmYpOworCQkJfQorCQkJZXJwLT5lcl9leHRjb3VudCArPSBleHRfZGlmZjsKKwkJCXhmc19pZXh0X2lyZWNfdXBkYXRlX2V4dG9mZnMoaWZwLCBlcnBfaWR4ICsgMSwgZXh0X2RpZmYpOworCQl9CisJCS8qIEluc2VydCBhIG5ldyBleHRlbnQgcGFnZSAqLworCQllbHNlIGlmIChlcnApIHsKKwkJCXhmc19pZXh0X2FkZF9pbmRpcmVjdF9tdWx0aShpZnAsCisJCQkJZXJwX2lkeCwgcGFnZV9pZHgsIGV4dF9kaWZmKTsKKwkJfQorCQkvKgorCQkgKiBJZiBleHRlbnQocykgYXJlIGJlaW5nIGFwcGVuZGVkIHRvIHRoZSBsYXN0IHBhZ2UgaW4KKwkJICogdGhlIGluZGlyZWN0aW9uIGFycmF5IGFuZCB0aGUgbmV3IGV4dGVudChzKSBkb24ndCBmaXQKKwkJICogaW4gdGhlIHBhZ2UsIHRoZW4gZXJwIGlzIE5VTEwgYW5kIGVycF9pZHggaXMgc2V0IHRvCisJCSAqIHRoZSBuZXh0IGluZGV4IG5lZWRlZCBpbiB0aGUgaW5kaXJlY3Rpb24gYXJyYXkuCisJCSAqLworCQllbHNlIHsKKwkJCWludAljb3VudCA9IGV4dF9kaWZmOworCisJCQl3aGlsZSAoY291bnQpIHsKKwkJCQllcnAgPSB4ZnNfaWV4dF9pcmVjX25ldyhpZnAsIGVycF9pZHgpOworCQkJCWVycC0+ZXJfZXh0Y291bnQgPSBjb3VudDsKKwkJCQljb3VudCAtPSBNSU4oY291bnQsIChpbnQpWEZTX0xJTkVBUl9FWFRTKTsKKwkJCQlpZiAoY291bnQpIHsKKwkJCQkJZXJwX2lkeCsrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZnAtPmlmX2J5dGVzID0gbmV3X3NpemU7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIGluY29yZSBleHRlbnRzIGFyZSBiZWluZyBhZGRlZCB0byB0aGUgaW5kaXJlY3Rpb24KKyAqIGFycmF5IGFuZCB0aGUgbmV3IGV4dGVudHMgZG8gbm90IGZpdCBpbiB0aGUgdGFyZ2V0IGV4dGVudCBsaXN0LiBUaGUKKyAqIGVycF9pZHggcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBpcmVjIGluZGV4IGZvciB0aGUgdGFyZ2V0IGV4dGVudCBsaXN0CisgKiBpbiB0aGUgaW5kaXJlY3Rpb24gYXJyYXksIGFuZCB0aGUgaWR4IHBhcmFtZXRlciBjb250YWlucyB0aGUgZXh0ZW50CisgKiBpbmRleCB3aXRoaW4gdGhlIGxpc3QuIFRoZSBudW1iZXIgb2YgZXh0ZW50cyBiZWluZyBhZGRlZCBpcyBzdG9yZWQKKyAqIGluIHRoZSBjb3VudCBwYXJhbWV0ZXIuCisgKgorICogICAgfC0tLS0tLS18ICAgfC0tLS0tLS18CisgKiAgICB8ICAgICAgIHwgICB8ICAgICAgIHwgICAgaWR4IC0gbnVtYmVyIG9mIGV4dGVudHMgYmVmb3JlIGlkeAorICogICAgfCAgaWR4ICB8ICAgfCBjb3VudCB8CisgKiAgICB8ICAgICAgIHwgICB8ICAgICAgIHwgICAgY291bnQgLSBudW1iZXIgb2YgZXh0ZW50cyBiZWluZyBpbnNlcnRlZCBhdCBpZHgKKyAqICAgIHwtLS0tLS0tfCAgIHwtLS0tLS0tfAorICogICAgfCBjb3VudCB8ICAgfCBuZXgyICB8ICAgIG5leDIgLSBudW1iZXIgb2YgZXh0ZW50cyBhZnRlciBpZHggKyBjb3VudAorICogICAgfC0tLS0tLS18ICAgfC0tLS0tLS18CisgKi8KK3ZvaWQKK3hmc19pZXh0X2FkZF9pbmRpcmVjdF9tdWx0aSgKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLworCWludAkJZXJwX2lkeCwJCS8qIHRhcmdldCBleHRlbnQgaXJlYyBpbmRleCAqLworCXhmc19leHRudW1fdAlpZHgsCQkJLyogaW5kZXggd2l0aGluIHRhcmdldCBsaXN0ICovCisJaW50CQljb3VudCkJCQkvKiBuZXcgZXh0ZW50cyBiZWluZyBhZGRlZCAqLworeworCWludAkJYnl0ZV9kaWZmOwkJLyogbmV3IGJ5dGVzIGJlaW5nIGFkZGVkICovCisJeGZzX2V4dF9pcmVjX3QJKmVycDsJCQkvKiBwb2ludGVyIHRvIGlyZWMgZW50cnkgKi8KKwl4ZnNfZXh0bnVtX3QJZXh0X2RpZmY7CQkvKiBudW1iZXIgb2YgZXh0ZW50cyB0byBhZGQgKi8KKwl4ZnNfZXh0bnVtX3QJZXh0X2NudDsJCS8qIG5ldyBleHRlbnRzIHN0aWxsIG5lZWRlZCAqLworCXhmc19leHRudW1fdAluZXgyOwkJCS8qIGV4dGVudHMgYWZ0ZXIgaWR4ICsgY291bnQgKi8KKwl4ZnNfYm1idF9yZWNfdAkqbmV4Ml9lcCA9IE5VTEw7CS8qIHRlbXAgbGlzdCBmb3IgbmV4MiBleHRlbnRzICovCisJaW50CQlubGlzdHM7CQkJLyogbnVtYmVyIG9mIGlyZWMncyAobGlzdHMpICovCisKKwlBU1NFUlQoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVElSRUMpOworCWVycCA9ICZpZnAtPmlmX3UxLmlmX2V4dF9pcmVjW2VycF9pZHhdOworCW5leDIgPSBlcnAtPmVyX2V4dGNvdW50IC0gaWR4OworCW5saXN0cyA9IGlmcC0+aWZfcmVhbF9ieXRlcyAvIFhGU19JRVhUX0JVRlNaOworCisJLyoKKwkgKiBTYXZlIHNlY29uZCBwYXJ0IG9mIHRhcmdldCBleHRlbnQgbGlzdAorCSAqIChhbGwgZXh0ZW50cyBwYXN0ICovCisJaWYgKG5leDIpIHsKKwkJYnl0ZV9kaWZmID0gbmV4MiAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJCW5leDJfZXAgPSAoeGZzX2JtYnRfcmVjX3QgKikga21lbV9hbGxvYyhieXRlX2RpZmYsIEtNX1NMRUVQKTsKKwkJbWVtbW92ZShuZXgyX2VwLCAmZXJwLT5lcl9leHRidWZbaWR4XSwgYnl0ZV9kaWZmKTsKKwkJZXJwLT5lcl9leHRjb3VudCAtPSBuZXgyOworCQl4ZnNfaWV4dF9pcmVjX3VwZGF0ZV9leHRvZmZzKGlmcCwgZXJwX2lkeCArIDEsIC1uZXgyKTsKKwkJbWVtc2V0KCZlcnAtPmVyX2V4dGJ1ZltpZHhdLCAwLCBieXRlX2RpZmYpOworCX0KKworCS8qCisJICogQWRkIHRoZSBuZXcgZXh0ZW50cyB0byB0aGUgZW5kIG9mIHRoZSB0YXJnZXQKKwkgKiBsaXN0LCB0aGVuIGFsbG9jYXRlIG5ldyBpcmVjIHJlY29yZChzKSBhbmQKKwkgKiBleHRlbnQgYnVmZmVyKHMpIGFzIG5lZWRlZCB0byBzdG9yZSB0aGUgcmVzdAorCSAqIG9mIHRoZSBuZXcgZXh0ZW50cy4KKwkgKi8KKwlleHRfY250ID0gY291bnQ7CisJZXh0X2RpZmYgPSBNSU4oZXh0X2NudCwgKGludClYRlNfTElORUFSX0VYVFMgLSBlcnAtPmVyX2V4dGNvdW50KTsKKwlpZiAoZXh0X2RpZmYpIHsKKwkJZXJwLT5lcl9leHRjb3VudCArPSBleHRfZGlmZjsKKwkJeGZzX2lleHRfaXJlY191cGRhdGVfZXh0b2ZmcyhpZnAsIGVycF9pZHggKyAxLCBleHRfZGlmZik7CisJCWV4dF9jbnQgLT0gZXh0X2RpZmY7CisJfQorCXdoaWxlIChleHRfY250KSB7CisJCWVycF9pZHgrKzsKKwkJZXJwID0geGZzX2lleHRfaXJlY19uZXcoaWZwLCBlcnBfaWR4KTsKKwkJZXh0X2RpZmYgPSBNSU4oZXh0X2NudCwgKGludClYRlNfTElORUFSX0VYVFMpOworCQllcnAtPmVyX2V4dGNvdW50ID0gZXh0X2RpZmY7CisJCXhmc19pZXh0X2lyZWNfdXBkYXRlX2V4dG9mZnMoaWZwLCBlcnBfaWR4ICsgMSwgZXh0X2RpZmYpOworCQlleHRfY250IC09IGV4dF9kaWZmOworCX0KKworCS8qIEFkZCBuZXgyIGV4dGVudHMgYmFjayB0byBpbmRpcmVjdGlvbiBhcnJheSAqLworCWlmIChuZXgyKSB7CisJCXhmc19leHRudW1fdAlleHRfYXZhaWw7CisJCWludAkJaTsKKworCQlieXRlX2RpZmYgPSBuZXgyICogc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKKwkJZXh0X2F2YWlsID0gWEZTX0xJTkVBUl9FWFRTIC0gZXJwLT5lcl9leHRjb3VudDsKKwkJaSA9IDA7CisJCS8qCisJCSAqIElmIG5leDIgZXh0ZW50cyBmaXQgaW4gdGhlIGN1cnJlbnQgcGFnZSwgYXBwZW5kCisJCSAqIG5leDJfZXAgYWZ0ZXIgdGhlIG5ldyBleHRlbnRzLgorCQkgKi8KKwkJaWYgKG5leDIgPD0gZXh0X2F2YWlsKSB7CisJCQlpID0gZXJwLT5lcl9leHRjb3VudDsKKwkJfQorCQkvKgorCQkgKiBPdGhlcndpc2UsIGNoZWNrIGlmIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUKKwkJICogbmV4dCBwYWdlLgorCQkgKi8KKwkJZWxzZSBpZiAoKGVycF9pZHggPCBubGlzdHMgLSAxKSAmJgorCQkJIChuZXgyIDw9IChleHRfYXZhaWwgPSBYRlNfTElORUFSX0VYVFMgLQorCQkJICBpZnAtPmlmX3UxLmlmX2V4dF9pcmVjW2VycF9pZHgrMV0uZXJfZXh0Y291bnQpKSkgeworCQkJZXJwX2lkeCsrOworCQkJZXJwKys7CisJCQkvKiBDcmVhdGUgYSBob2xlIGZvciBuZXgyIGV4dGVudHMgKi8KKwkJCW1lbW1vdmUoJmVycC0+ZXJfZXh0YnVmW25leDJdLCBlcnAtPmVyX2V4dGJ1ZiwKKwkJCQllcnAtPmVyX2V4dGNvdW50ICogc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJCX0KKwkJLyoKKwkJICogRmluYWwgY2hvaWNlLCBjcmVhdGUgYSBuZXcgZXh0ZW50IHBhZ2UgZm9yCisJCSAqIG5leDIgZXh0ZW50cy4KKwkJICovCisJCWVsc2UgeworCQkJZXJwX2lkeCsrOworCQkJZXJwID0geGZzX2lleHRfaXJlY19uZXcoaWZwLCBlcnBfaWR4KTsKKwkJfQorCQltZW1tb3ZlKCZlcnAtPmVyX2V4dGJ1ZltpXSwgbmV4Ml9lcCwgYnl0ZV9kaWZmKTsKKwkJa21lbV9mcmVlKG5leDJfZXAsIGJ5dGVfZGlmZik7CisJCWVycC0+ZXJfZXh0Y291bnQgKz0gbmV4MjsKKwkJeGZzX2lleHRfaXJlY191cGRhdGVfZXh0b2ZmcyhpZnAsIGVycF9pZHggKyAxLCBuZXgyKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIGluY29yZSBmaWxlCisgKiBleHRlbnRzIG5lZWRzIHRvIGJlIGRlY3JlYXNlZC4gVGhlIGV4dF9kaWZmIHBhcmFtZXRlciBzdG9yZXMgdGhlCisgKiBudW1iZXIgb2YgZXh0ZW50cyB0byBiZSByZW1vdmVkIGFuZCB0aGUgaWR4IHBhcmFtZXRlciBjb250YWlucworICogdGhlIGV4dGVudCBpbmRleCB3aGVyZSB0aGUgZXh0ZW50cyB3aWxsIGJlIHJlbW92ZWQgZnJvbS4KKyAqCisgKiBJZiB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCBoYXMgZGVjcmVhc2VkIGJlbG93IHRoZSBsaW5lYXIKKyAqIGxpbWl0LCBYRlNfSUVYVF9CVUZTWiwgdGhlbiBzd2l0Y2ggdG8gdXNpbmcgdGhlIGNvbnRpZ3VvdXMKKyAqIGV4dGVudCBhcnJheS4gIE90aGVyd2lzZSwgdXNlIGttZW1fcmVhbGxvYygpIHRvIGFkanVzdCB0aGUKKyAqIHNpemUgdG8gd2hhdCBpcyBuZWVkZWQuCisgKi8KK3ZvaWQKK3hmc19pZXh0X3JlbW92ZSgKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJeGZzX2V4dG51bV90CWlkeCwJCS8qIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGV4dHMgKi8KKwlpbnQJCWV4dF9kaWZmKQkvKiBudW1iZXIgb2YgZXh0ZW50cyB0byByZW1vdmUgKi8KK3sKKwl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CS8qIG51bWJlciBvZiBleHRlbnRzIGluIGZpbGUgKi8KKwlpbnQJCW5ld19zaXplOwkvKiBzaXplIG9mIGV4dGVudHMgYWZ0ZXIgcmVtb3ZhbCAqLworCisJQVNTRVJUKGV4dF9kaWZmID4gMCk7CisJbmV4dGVudHMgPSBpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKKwluZXdfc2l6ZSA9IChuZXh0ZW50cyAtIGV4dF9kaWZmKSAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisKKwlpZiAobmV3X3NpemUgPT0gMCkgeworCQl4ZnNfaWV4dF9kZXN0cm95KGlmcCk7CisJfSBlbHNlIGlmIChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQykgeworCQl4ZnNfaWV4dF9yZW1vdmVfaW5kaXJlY3QoaWZwLCBpZHgsIGV4dF9kaWZmKTsKKwl9IGVsc2UgaWYgKGlmcC0+aWZfcmVhbF9ieXRlcykgeworCQl4ZnNfaWV4dF9yZW1vdmVfZGlyZWN0KGlmcCwgaWR4LCBleHRfZGlmZik7CisJfSBlbHNlIHsKKwkJeGZzX2lleHRfcmVtb3ZlX2lubGluZShpZnAsIGlkeCwgZXh0X2RpZmYpOworCX0KKwlpZnAtPmlmX2J5dGVzID0gbmV3X3NpemU7Cit9CisKKy8qCisgKiBUaGlzIHJlbW92ZXMgZXh0X2RpZmYgZXh0ZW50cyBmcm9tIHRoZSBpbmxpbmUgYnVmZmVyLCBiZWdpbm5pbmcKKyAqIGF0IGV4dGVudCBpbmRleCBpZHguCisgKi8KK3ZvaWQKK3hmc19pZXh0X3JlbW92ZV9pbmxpbmUoCisJeGZzX2lmb3JrX3QJKmlmcCwJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLworCXhmc19leHRudW1fdAlpZHgsCQkvKiBpbmRleCB0byBiZWdpbiByZW1vdmluZyBleHRzICovCisJaW50CQlleHRfZGlmZikJLyogbnVtYmVyIG9mIGV4dGVudHMgdG8gcmVtb3ZlICovCit7CisJaW50CQluZXh0ZW50czsJLyogbnVtYmVyIG9mIGV4dGVudHMgaW4gZmlsZSAqLworCisJQVNTRVJUKCEoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVElSRUMpKTsKKwlBU1NFUlQoaWR4IDwgWEZTX0lOTElORV9FWFRTKTsKKwluZXh0ZW50cyA9IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCUFTU0VSVCgoKG5leHRlbnRzIC0gZXh0X2RpZmYpID4gMCkgJiYKKwkJKG5leHRlbnRzIC0gZXh0X2RpZmYpIDwgWEZTX0lOTElORV9FWFRTKTsKKworCWlmIChpZHggKyBleHRfZGlmZiA8IG5leHRlbnRzKSB7CisJCW1lbW1vdmUoJmlmcC0+aWZfdTIuaWZfaW5saW5lX2V4dFtpZHhdLAorCQkJJmlmcC0+aWZfdTIuaWZfaW5saW5lX2V4dFtpZHggKyBleHRfZGlmZl0sCisJCQkobmV4dGVudHMgLSAoaWR4ICsgZXh0X2RpZmYpKSAqCisJCQkgc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJCW1lbXNldCgmaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0W25leHRlbnRzIC0gZXh0X2RpZmZdLAorCQkJMCwgZXh0X2RpZmYgKiBzaXplb2YoeGZzX2JtYnRfcmVjX3QpKTsKKwl9IGVsc2UgeworCQltZW1zZXQoJmlmcC0+aWZfdTIuaWZfaW5saW5lX2V4dFtpZHhdLCAwLAorCQkJZXh0X2RpZmYgKiBzaXplb2YoeGZzX2JtYnRfcmVjX3QpKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIHJlbW92ZXMgZXh0X2RpZmYgZXh0ZW50cyBmcm9tIGEgbGluZWFyIChkaXJlY3QpIGV4dGVudCBsaXN0LAorICogYmVnaW5uaW5nIGF0IGV4dGVudCBpbmRleCBpZHguIElmIHRoZSBleHRlbnRzIGFyZSBiZWluZyByZW1vdmVkCisgKiBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QgKGllLiB0cnVuY2F0ZSkgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gcmUtCisgKiBhbGxvY2F0ZSB0aGUgbGlzdCB0byByZW1vdmUgdGhlIGV4dHJhIHNwYWNlLiBPdGhlcndpc2UsIGlmIHRoZQorICogZXh0ZW50cyBhcmUgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIGV4aXN0aW5nIGV4dGVudAorICogZW50cmllcywgdGhlbiB3ZSBmaXJzdCBuZWVkIHRvIG1vdmUgdGhlIGV4dGVudCByZWNvcmRzIGJlZ2lubmluZworICogYXQgaWR4ICsgZXh0X2RpZmYgdXAgaW4gdGhlIGxpc3QgdG8gb3ZlcndyaXRlIHRoZSByZWNvcmRzIGJlaW5nCisgKiByZW1vdmVkLCB0aGVuIHJlbW92ZSB0aGUgZXh0cmEgc3BhY2UgdmlhIGttZW1fcmVhbGxvYy4KKyAqLwordm9pZAoreGZzX2lleHRfcmVtb3ZlX2RpcmVjdCgKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJeGZzX2V4dG51bV90CWlkeCwJCS8qIGluZGV4IHRvIGJlZ2luIHJlbW92aW5nIGV4dHMgKi8KKwlpbnQJCWV4dF9kaWZmKQkvKiBudW1iZXIgb2YgZXh0ZW50cyB0byByZW1vdmUgKi8KK3sKKwl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CS8qIG51bWJlciBvZiBleHRlbnRzIGluIGZpbGUgKi8KKwlpbnQJCW5ld19zaXplOwkvKiBzaXplIG9mIGV4dGVudHMgYWZ0ZXIgcmVtb3ZhbCAqLworCisJQVNTRVJUKCEoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVElSRUMpKTsKKwluZXdfc2l6ZSA9IGlmcC0+aWZfYnl0ZXMgLQorCQkoZXh0X2RpZmYgKiBzaXplb2YoeGZzX2JtYnRfcmVjX3QpKTsKKwluZXh0ZW50cyA9IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCisJaWYgKG5ld19zaXplID09IDApIHsKKwkJeGZzX2lleHRfZGVzdHJveShpZnApOworCQlyZXR1cm47CisJfQorCS8qIE1vdmUgZXh0ZW50cyB1cCBpbiB0aGUgbGlzdCAoaWYgbmVlZGVkKSAqLworCWlmIChpZHggKyBleHRfZGlmZiA8IG5leHRlbnRzKSB7CisJCW1lbW1vdmUoJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tpZHhdLAorCQkJJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tpZHggKyBleHRfZGlmZl0sCisJCQkobmV4dGVudHMgLSAoaWR4ICsgZXh0X2RpZmYpKSAqCisJCQkgc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJfQorCW1lbXNldCgmaWZwLT5pZl91MS5pZl9leHRlbnRzW25leHRlbnRzIC0gZXh0X2RpZmZdLAorCQkwLCBleHRfZGlmZiAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCkpOworCS8qCisJICogUmVhbGxvY2F0ZSB0aGUgZGlyZWN0IGV4dGVudCBsaXN0LiBJZiB0aGUgZXh0ZW50cworCSAqIHdpbGwgZml0IGluc2lkZSB0aGUgaW5vZGUgdGhlbiB4ZnNfaWV4dF9yZWFsbG9jX2RpcmVjdAorCSAqIHdpbGwgc3dpdGNoIGZyb20gZGlyZWN0IHRvIGlubGluZSBleHRlbnQgYWxsb2NhdGlvbgorCSAqIG1vZGUgZm9yIHVzLgorCSAqLworCXhmc19pZXh0X3JlYWxsb2NfZGlyZWN0KGlmcCwgbmV3X3NpemUpOworCWlmcC0+aWZfYnl0ZXMgPSBuZXdfc2l6ZTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gaW5jb3JlIGV4dGVudHMgYXJlIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUKKyAqIGluZGlyZWN0aW9uIGFycmF5IGFuZCB0aGUgZXh0ZW50cyBiZWluZyByZW1vdmVkIHNwYW4gbXVsdGlwbGUgZXh0ZW50CisgKiBidWZmZXJzLiBUaGUgaWR4IHBhcmFtZXRlciBjb250YWlucyB0aGUgZmlsZSBleHRlbnQgaW5kZXggd2hlcmUgd2UKKyAqIHdhbnQgdG8gYmVnaW4gcmVtb3ZpbmcgZXh0ZW50cywgYW5kIHRoZSBjb3VudCBwYXJhbWV0ZXIgY29udGFpbnMKKyAqIGhvdyBtYW55IGV4dGVudHMgbmVlZCB0byBiZSByZW1vdmVkLgorICoKKyAqICAgIHwtLS0tLS0tfCAgIHwtLS0tLS0tfAorICogICAgfCBuZXgxICB8ICAgfCAgICAgICB8ICAgIG5leDEgLSBudW1iZXIgb2YgZXh0ZW50cyBiZWZvcmUgaWR4CisgKiAgICB8LS0tLS0tLXwgICB8IGNvdW50IHwKKyAqICAgIHwgICAgICAgfCAgIHwgICAgICAgfCAgICBjb3VudCAtIG51bWJlciBvZiBleHRlbnRzIGJlaW5nIHJlbW92ZWQgYXQgaWR4CisgKiAgICB8IGNvdW50IHwgICB8LS0tLS0tLXwKKyAqICAgIHwgICAgICAgfCAgIHwgbmV4MiAgfCAgICBuZXgyIC0gbnVtYmVyIG9mIGV4dGVudHMgYWZ0ZXIgaWR4ICsgY291bnQKKyAqICAgIHwtLS0tLS0tfCAgIHwtLS0tLS0tfAorICovCit2b2lkCit4ZnNfaWV4dF9yZW1vdmVfaW5kaXJlY3QoCisJeGZzX2lmb3JrX3QJKmlmcCwJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLworCXhmc19leHRudW1fdAlpZHgsCQkvKiBpbmRleCB0byBiZWdpbiByZW1vdmluZyBleHRlbnRzICovCisJaW50CQljb3VudCkJCS8qIG51bWJlciBvZiBleHRlbnRzIHRvIHJlbW92ZSAqLworeworCXhmc19leHRfaXJlY190CSplcnA7CQkvKiBpbmRpcmVjdGlvbiBhcnJheSBwb2ludGVyICovCisJaW50CQllcnBfaWR4ID0gMDsJLyogaW5kaXJlY3Rpb24gYXJyYXkgaW5kZXggKi8KKwl4ZnNfZXh0bnVtX3QJZXh0X2NudDsJLyogZXh0ZW50cyBsZWZ0IHRvIHJlbW92ZSAqLworCXhmc19leHRudW1fdAlleHRfZGlmZjsJLyogZXh0ZW50cyB0byByZW1vdmUgaW4gY3VycmVudCBsaXN0ICovCisJeGZzX2V4dG51bV90CW5leDE7CQkvKiBudW1iZXIgb2YgZXh0ZW50cyBiZWZvcmUgaWR4ICovCisJeGZzX2V4dG51bV90CW5leDI7CQkvKiBleHRlbnRzIGFmdGVyIGlkeCArIGNvdW50ICovCisJaW50CQlubGlzdHM7CQkvKiBlbnRyaWVzIGluIGluZGlyZWN0b24gYXJyYXkgKi8KKwlpbnQJCXBhZ2VfaWR4ID0gaWR4OwkvKiBpbmRleCBpbiB0YXJnZXQgZXh0ZW50IGxpc3QgKi8KKworCUFTU0VSVChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQyk7CisJZXJwID0geGZzX2lleHRfaWR4X3RvX2lyZWMoaWZwLCAgJnBhZ2VfaWR4LCAmZXJwX2lkeCwgMCk7CisJQVNTRVJUKGVycCAhPSBOVUxMKTsKKwlubGlzdHMgPSBpZnAtPmlmX3JlYWxfYnl0ZXMgLyBYRlNfSUVYVF9CVUZTWjsKKwluZXgxID0gcGFnZV9pZHg7CisJZXh0X2NudCA9IGNvdW50OworCXdoaWxlIChleHRfY250KSB7CisJCW5leDIgPSBNQVgoKGVycC0+ZXJfZXh0Y291bnQgLSAobmV4MSArIGV4dF9jbnQpKSwgMCk7CisJCWV4dF9kaWZmID0gTUlOKGV4dF9jbnQsIChlcnAtPmVyX2V4dGNvdW50IC0gbmV4MSkpOworCQkvKgorCQkgKiBDaGVjayBmb3IgZGVsZXRpb24gb2YgZW50aXJlIGxpc3Q7CisJCSAqIHhmc19pZXh0X2lyZWNfcmVtb3ZlKCkgdXBkYXRlcyBleHRlbnQgb2Zmc2V0cy4KKwkJICovCisJCWlmIChleHRfZGlmZiA9PSBlcnAtPmVyX2V4dGNvdW50KSB7CisJCQl4ZnNfaWV4dF9pcmVjX3JlbW92ZShpZnAsIGVycF9pZHgpOworCQkJZXh0X2NudCAtPSBleHRfZGlmZjsKKwkJCW5leDEgPSAwOworCQkJaWYgKGV4dF9jbnQpIHsKKwkJCQlBU1NFUlQoZXJwX2lkeCA8IGlmcC0+aWZfcmVhbF9ieXRlcyAvCisJCQkJCVhGU19JRVhUX0JVRlNaKTsKKwkJCQllcnAgPSAmaWZwLT5pZl91MS5pZl9leHRfaXJlY1tlcnBfaWR4XTsKKwkJCQluZXgxID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogTW92ZSBleHRlbnRzIHVwIChpZiBuZWVkZWQpICovCisJCWlmIChuZXgyKSB7CisJCQltZW1tb3ZlKCZlcnAtPmVyX2V4dGJ1ZltuZXgxXSwKKwkJCQkmZXJwLT5lcl9leHRidWZbbmV4MSArIGV4dF9kaWZmXSwKKwkJCQluZXgyICogc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJCX0KKwkJLyogWmVybyBvdXQgcmVzdCBvZiBwYWdlICovCisJCW1lbXNldCgmZXJwLT5lcl9leHRidWZbbmV4MSArIG5leDJdLCAwLCAoWEZTX0lFWFRfQlVGU1ogLQorCQkJKChuZXgxICsgbmV4MikgKiBzaXplb2YoeGZzX2JtYnRfcmVjX3QpKSkpOworCQkvKiBVcGRhdGUgcmVtYWluaW5nIGNvdW50ZXJzICovCisJCWVycC0+ZXJfZXh0Y291bnQgLT0gZXh0X2RpZmY7CisJCXhmc19pZXh0X2lyZWNfdXBkYXRlX2V4dG9mZnMoaWZwLCBlcnBfaWR4ICsgMSwgLWV4dF9kaWZmKTsKKwkJZXh0X2NudCAtPSBleHRfZGlmZjsKKwkJbmV4MSA9IDA7CisJCWVycF9pZHgrKzsKKwkJZXJwKys7CisJfQorCWlmcC0+aWZfYnl0ZXMgLT0gY291bnQgKiBzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCXhmc19pZXh0X2lyZWNfY29tcGFjdChpZnApOworfQorCisvKgorICogQ3JlYXRlLCBkZXN0cm95LCBvciByZXNpemUgYSBsaW5lYXIgKGRpcmVjdCkgYmxvY2sgb2YgZXh0ZW50cy4KKyAqLwordm9pZAoreGZzX2lleHRfcmVhbGxvY19kaXJlY3QoCisJeGZzX2lmb3JrX3QJKmlmcCwJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLworCWludAkJbmV3X3NpemUpCS8qIG5ldyBzaXplIG9mIGV4dGVudHMgKi8KK3sKKwlpbnQJCXJuZXdfc2l6ZTsJLyogcmVhbCBuZXcgc2l6ZSBvZiBleHRlbnRzICovCisKKwlybmV3X3NpemUgPSBuZXdfc2l6ZTsKKworCUFTU0VSVCghKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKSB8fAorCQkoKG5ld19zaXplID49IDApICYmIChuZXdfc2l6ZSA8PSBYRlNfSUVYVF9CVUZTWikgJiYKKwkJIChuZXdfc2l6ZSAhPSBpZnAtPmlmX3JlYWxfYnl0ZXMpKSk7CisKKwkvKiBGcmVlIGV4dGVudCByZWNvcmRzICovCisJaWYgKG5ld19zaXplID09IDApIHsKKwkJeGZzX2lleHRfZGVzdHJveShpZnApOworCX0KKwkvKiBSZXNpemUgZGlyZWN0IGV4dGVudCBsaXN0IGFuZCB6ZXJvIGFueSBuZXcgYnl0ZXMgKi8KKwllbHNlIGlmIChpZnAtPmlmX3JlYWxfYnl0ZXMpIHsKKwkJLyogQ2hlY2sgaWYgZXh0ZW50cyB3aWxsIGZpdCBpbnNpZGUgdGhlIGlub2RlICovCisJCWlmIChuZXdfc2l6ZSA8PSBYRlNfSU5MSU5FX0VYVFMgKiBzaXplb2YoeGZzX2JtYnRfcmVjX3QpKSB7CisJCQl4ZnNfaWV4dF9kaXJlY3RfdG9faW5saW5lKGlmcCwgbmV3X3NpemUgLworCQkJCSh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkpOworCQkJaWZwLT5pZl9ieXRlcyA9IG5ld19zaXplOworCQkJcmV0dXJuOworCQl9CisJCWlmICgobmV3X3NpemUgJiAobmV3X3NpemUgLSAxKSkgIT0gMCkgeworCQkJcm5ld19zaXplID0geGZzX2lyb3VuZHVwKG5ld19zaXplKTsKKwkJfQorCQlpZiAocm5ld19zaXplICE9IGlmcC0+aWZfcmVhbF9ieXRlcykgeworCQkJaWZwLT5pZl91MS5pZl9leHRlbnRzID0gKHhmc19ibWJ0X3JlY190ICopCisJCQkJa21lbV9yZWFsbG9jKGlmcC0+aWZfdTEuaWZfZXh0ZW50cywKKwkJCQkJCXJuZXdfc2l6ZSwKKwkJCQkJCWlmcC0+aWZfcmVhbF9ieXRlcywKKwkJCQkJCUtNX1NMRUVQKTsKKwkJfQorCQlpZiAocm5ld19zaXplID4gaWZwLT5pZl9yZWFsX2J5dGVzKSB7CisJCQltZW1zZXQoJmlmcC0+aWZfdTEuaWZfZXh0ZW50c1tpZnAtPmlmX2J5dGVzIC8KKwkJCQkodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpXSwgMCwKKwkJCQlybmV3X3NpemUgLSBpZnAtPmlmX3JlYWxfYnl0ZXMpOworCQl9CisJfQorCS8qCisJICogU3dpdGNoIGZyb20gdGhlIGlubGluZSBleHRlbnQgYnVmZmVyIHRvIGEgZGlyZWN0CisJICogZXh0ZW50IGxpc3QuIEJlIHN1cmUgdG8gaW5jbHVkZSB0aGUgaW5saW5lIGV4dGVudAorCSAqIGJ5dGVzIGluIG5ld19zaXplLgorCSAqLworCWVsc2UgeworCQluZXdfc2l6ZSArPSBpZnAtPmlmX2J5dGVzOworCQlpZiAoKG5ld19zaXplICYgKG5ld19zaXplIC0gMSkpICE9IDApIHsKKwkJCXJuZXdfc2l6ZSA9IHhmc19pcm91bmR1cChuZXdfc2l6ZSk7CisJCX0KKwkJeGZzX2lleHRfaW5saW5lX3RvX2RpcmVjdChpZnAsIHJuZXdfc2l6ZSk7CisJfQorCWlmcC0+aWZfcmVhbF9ieXRlcyA9IHJuZXdfc2l6ZTsKKwlpZnAtPmlmX2J5dGVzID0gbmV3X3NpemU7Cit9CisKKy8qCisgKiBTd2l0Y2ggZnJvbSBsaW5lYXIgKGRpcmVjdCkgZXh0ZW50IHJlY29yZHMgdG8gaW5saW5lIGJ1ZmZlci4KKyAqLwordm9pZAoreGZzX2lleHRfZGlyZWN0X3RvX2lubGluZSgKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJeGZzX2V4dG51bV90CW5leHRlbnRzKQkvKiBudW1iZXIgb2YgZXh0ZW50cyBpbiBmaWxlICovCit7CisJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRFTlRTKTsKKwlBU1NFUlQobmV4dGVudHMgPD0gWEZTX0lOTElORV9FWFRTKTsKKwkvKgorCSAqIFRoZSBpbmxpbmUgYnVmZmVyIHdhcyB6ZXJvZWQgd2hlbiB3ZSBzd2l0Y2hlZAorCSAqIGZyb20gaW5saW5lIHRvIGRpcmVjdCBleHRlbnQgYWxsb2NhdGlvbiBtb2RlLAorCSAqIHNvIHdlIGRvbid0IG5lZWQgdG8gY2xlYXIgaXQgaGVyZS4KKwkgKi8KKwltZW1jcHkoaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0LCBpZnAtPmlmX3UxLmlmX2V4dGVudHMsCisJCW5leHRlbnRzICogc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJa21lbV9mcmVlKGlmcC0+aWZfdTEuaWZfZXh0ZW50cywgS01fU0xFRVApOworCWlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9IGlmcC0+aWZfdTIuaWZfaW5saW5lX2V4dDsKKwlpZnAtPmlmX3JlYWxfYnl0ZXMgPSAwOworfQorCisvKgorICogU3dpdGNoIGZyb20gaW5saW5lIGJ1ZmZlciB0byBsaW5lYXIgKGRpcmVjdCkgZXh0ZW50IHJlY29yZHMuCisgKiBuZXdfc2l6ZSBzaG91bGQgYWxyZWFkeSBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IHBvd2VyIG9mIDIKKyAqIGJ5IHRoZSBjYWxsZXIgKHdoZW4gYXBwcm9wcmlhdGUpLCBzbyB1c2UgbmV3X3NpemUgYXMgaXQgaXMuCisgKiBIb3dldmVyLCBzaW5jZSBuZXdfc2l6ZSBtYXkgYmUgcm91bmRlZCB1cCwgd2UgY2FuJ3QgdXBkYXRlCisgKiBpZl9ieXRlcyBoZXJlLiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gdXBkYXRlCisgKiBpZl9ieXRlcyB1cG9uIHJldHVybi4KKyAqLwordm9pZAoreGZzX2lleHRfaW5saW5lX3RvX2RpcmVjdCgKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJaW50CQluZXdfc2l6ZSkJLyogbnVtYmVyIG9mIGV4dGVudHMgaW4gZmlsZSAqLworeworCWlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9ICh4ZnNfYm1idF9yZWNfdCAqKQorCQlrbWVtX2FsbG9jKG5ld19zaXplLCBLTV9TTEVFUCk7CisJbWVtc2V0KGlmcC0+aWZfdTEuaWZfZXh0ZW50cywgMCwgbmV3X3NpemUpOworCWlmIChpZnAtPmlmX2J5dGVzKSB7CisJCW1lbWNweShpZnAtPmlmX3UxLmlmX2V4dGVudHMsIGlmcC0+aWZfdTIuaWZfaW5saW5lX2V4dCwKKwkJCWlmcC0+aWZfYnl0ZXMpOworCQltZW1zZXQoaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0LCAwLCBYRlNfSU5MSU5FX0VYVFMgKgorCQkJc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJfQorCWlmcC0+aWZfcmVhbF9ieXRlcyA9IG5ld19zaXplOworfQorCisvKgorICogUmVzaXplIGFuIGV4dGVudCBpbmRpcmVjdGlvbiBhcnJheSB0byBuZXdfc2l6ZSBieXRlcy4KKyAqLwordm9pZAoreGZzX2lleHRfcmVhbGxvY19pbmRpcmVjdCgKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJaW50CQluZXdfc2l6ZSkJLyogbmV3IGluZGlyZWN0aW9uIGFycmF5IHNpemUgKi8KK3sKKwlpbnQJCW5saXN0czsJCS8qIG51bWJlciBvZiBpcmVjJ3MgKGV4IGxpc3RzKSAqLworCWludAkJc2l6ZTsJCS8qIGN1cnJlbnQgaW5kaXJlY3Rpb24gYXJyYXkgc2l6ZSAqLworCisJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKTsKKwlubGlzdHMgPSBpZnAtPmlmX3JlYWxfYnl0ZXMgLyBYRlNfSUVYVF9CVUZTWjsKKwlzaXplID0gbmxpc3RzICogc2l6ZW9mKHhmc19leHRfaXJlY190KTsKKwlBU1NFUlQoaWZwLT5pZl9yZWFsX2J5dGVzKTsKKwlBU1NFUlQoKG5ld19zaXplID49IDApICYmIChuZXdfc2l6ZSAhPSBzaXplKSk7CisJaWYgKG5ld19zaXplID09IDApIHsKKwkJeGZzX2lleHRfZGVzdHJveShpZnApOworCX0gZWxzZSB7CisJCWlmcC0+aWZfdTEuaWZfZXh0X2lyZWMgPSAoeGZzX2V4dF9pcmVjX3QgKikKKwkJCWttZW1fcmVhbGxvYyhpZnAtPmlmX3UxLmlmX2V4dF9pcmVjLAorCQkJCW5ld19zaXplLCBzaXplLCBLTV9TTEVFUCk7CisJfQorfQorCisvKgorICogU3dpdGNoIGZyb20gaW5kaXJlY3Rpb24gYXJyYXkgdG8gbGluZWFyIChkaXJlY3QpIGV4dGVudCBhbGxvY2F0aW9ucy4KKyAqLwordm9pZAoreGZzX2lleHRfaW5kaXJlY3RfdG9fZGlyZWN0KAorCSB4ZnNfaWZvcmtfdAkqaWZwKQkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCit7CisJeGZzX2JtYnRfcmVjX3QJKmVwOwkJLyogZXh0ZW50IHJlY29yZCBwb2ludGVyICovCisJeGZzX2V4dG51bV90CW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZXh0ZW50cyBpbiBmaWxlICovCisJaW50CQlzaXplOwkJLyogc2l6ZSBvZiBmaWxlIGV4dGVudHMgKi8KKworCUFTU0VSVChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQyk7CisJbmV4dGVudHMgPSBpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKKwlBU1NFUlQobmV4dGVudHMgPD0gWEZTX0xJTkVBUl9FWFRTKTsKKwlzaXplID0gbmV4dGVudHMgKiBzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCisJeGZzX2lleHRfaXJlY19jb21wYWN0X2Z1bGwoaWZwKTsKKwlBU1NFUlQoaWZwLT5pZl9yZWFsX2J5dGVzID09IFhGU19JRVhUX0JVRlNaKTsKKworCWVwID0gaWZwLT5pZl91MS5pZl9leHRfaXJlYy0+ZXJfZXh0YnVmOworCWttZW1fZnJlZShpZnAtPmlmX3UxLmlmX2V4dF9pcmVjLCBzaXplb2YoeGZzX2V4dF9pcmVjX3QpKTsKKwlpZnAtPmlmX2ZsYWdzICY9IH5YRlNfSUZFWFRJUkVDOworCWlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9IGVwOworCWlmcC0+aWZfYnl0ZXMgPSBzaXplOworCWlmIChuZXh0ZW50cyA8IFhGU19MSU5FQVJfRVhUUykgeworCQl4ZnNfaWV4dF9yZWFsbG9jX2RpcmVjdChpZnAsIHNpemUpOworCX0KK30KKworLyoKKyAqIEZyZWUgaW5jb3JlIGZpbGUgZXh0ZW50cy4KKyAqLwordm9pZAoreGZzX2lleHRfZGVzdHJveSgKKwl4ZnNfaWZvcmtfdAkqaWZwKQkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCit7CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKSB7CisJCWludAllcnBfaWR4OworCQlpbnQJbmxpc3RzOworCisJCW5saXN0cyA9IGlmcC0+aWZfcmVhbF9ieXRlcyAvIFhGU19JRVhUX0JVRlNaOworCQlmb3IgKGVycF9pZHggPSBubGlzdHMgLSAxOyBlcnBfaWR4ID49IDAgOyBlcnBfaWR4LS0pIHsKKwkJCXhmc19pZXh0X2lyZWNfcmVtb3ZlKGlmcCwgZXJwX2lkeCk7CisJCX0KKwkJaWZwLT5pZl9mbGFncyAmPSB+WEZTX0lGRVhUSVJFQzsKKwl9IGVsc2UgaWYgKGlmcC0+aWZfcmVhbF9ieXRlcykgeworCQlrbWVtX2ZyZWUoaWZwLT5pZl91MS5pZl9leHRlbnRzLCBpZnAtPmlmX3JlYWxfYnl0ZXMpOworCX0gZWxzZSBpZiAoaWZwLT5pZl9ieXRlcykgeworCQltZW1zZXQoaWZwLT5pZl91Mi5pZl9pbmxpbmVfZXh0LCAwLCBYRlNfSU5MSU5FX0VYVFMgKgorCQkJc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJfQorCWlmcC0+aWZfdTEuaWZfZXh0ZW50cyA9IE5VTEw7CisJaWZwLT5pZl9yZWFsX2J5dGVzID0gMDsKKwlpZnAtPmlmX2J5dGVzID0gMDsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGV4dGVudCByZWNvcmQgZm9yIGZpbGUgc3lzdGVtIGJsb2NrIGJuby4KKyAqLworeGZzX2JtYnRfcmVjX3QgKgkJCS8qIHBvaW50ZXIgdG8gZm91bmQgZXh0ZW50IHJlY29yZCAqLworeGZzX2lleHRfYm5vX3RvX2V4dCgKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJeGZzX2ZpbGVvZmZfdAlibm8sCQkvKiBibG9jayBudW1iZXIgdG8gc2VhcmNoIGZvciAqLworCXhmc19leHRudW1fdAkqaWR4cCkJCS8qIGluZGV4IG9mIHRhcmdldCBleHRlbnQgKi8KK3sKKwl4ZnNfYm1idF9yZWNfdAkqYmFzZTsJCS8qIHBvaW50ZXIgdG8gZmlyc3QgZXh0ZW50ICovCisJeGZzX2ZpbGJsa3NfdAlibG9ja2NvdW50ID0gMDsJLyogbnVtYmVyIG9mIGJsb2NrcyBpbiBleHRlbnQgKi8KKwl4ZnNfYm1idF9yZWNfdAkqZXAgPSBOVUxMOwkvKiBwb2ludGVyIHRvIHRhcmdldCBleHRlbnQgKi8KKwl4ZnNfZXh0X2lyZWNfdAkqZXJwID0gTlVMTDsJLyogaW5kaXJlY3Rpb24gYXJyYXkgcG9pbnRlciAqLworCWludAkJaGlnaDsJCS8qIHVwcGVyIGJvdW5kcnkgaW4gc2VhcmNoICovCisJeGZzX2V4dG51bV90CWlkeCA9IDA7CS8qIGluZGV4IG9mIHRhcmdldCBleHRlbnQgKi8KKwlpbnQJCWxvdzsJCS8qIGxvd2VyIGJvdW5kcnkgaW4gc2VhcmNoICovCisJeGZzX2V4dG51bV90CW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZmlsZSBleHRlbnRzICovCisJeGZzX2ZpbGVvZmZfdAlzdGFydG9mZiA9IDA7CS8qIHN0YXJ0IG9mZnNldCBvZiBleHRlbnQgKi8KKworCW5leHRlbnRzID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJaWYgKG5leHRlbnRzID09IDApIHsKKwkJKmlkeHAgPSAwOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbG93ID0gMDsKKwlpZiAoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVElSRUMpIHsKKwkJLyogRmluZCB0YXJnZXQgZXh0ZW50IGxpc3QgKi8KKwkJaW50CWVycF9pZHggPSAwOworCQllcnAgPSB4ZnNfaWV4dF9ibm9fdG9faXJlYyhpZnAsIGJubywgJmVycF9pZHgpOworCQliYXNlID0gZXJwLT5lcl9leHRidWY7CisJCWhpZ2ggPSBlcnAtPmVyX2V4dGNvdW50IC0gMTsKKwl9IGVsc2UgeworCQliYXNlID0gaWZwLT5pZl91MS5pZl9leHRlbnRzOworCQloaWdoID0gbmV4dGVudHMgLSAxOworCX0KKwkvKiBCaW5hcnkgc2VhcmNoIGV4dGVudCByZWNvcmRzICovCisJd2hpbGUgKGxvdyA8PSBoaWdoKSB7CisJCWlkeCA9IChsb3cgKyBoaWdoKSA+PiAxOworCQllcCA9IGJhc2UgKyBpZHg7CisJCXN0YXJ0b2ZmID0geGZzX2JtYnRfZ2V0X3N0YXJ0b2ZmKGVwKTsKKwkJYmxvY2tjb3VudCA9IHhmc19ibWJ0X2dldF9ibG9ja2NvdW50KGVwKTsKKwkJaWYgKGJubyA8IHN0YXJ0b2ZmKSB7CisJCQloaWdoID0gaWR4IC0gMTsKKwkJfSBlbHNlIGlmIChibm8gPj0gc3RhcnRvZmYgKyBibG9ja2NvdW50KSB7CisJCQlsb3cgPSBpZHggKyAxOworCQl9IGVsc2UgeworCQkJLyogQ29udmVydCBiYWNrIHRvIGZpbGUtYmFzZWQgZXh0ZW50IGluZGV4ICovCisJCQlpZiAoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVElSRUMpIHsKKwkJCQlpZHggKz0gZXJwLT5lcl9leHRvZmY7CisJCQl9CisJCQkqaWR4cCA9IGlkeDsKKwkJCXJldHVybiBlcDsKKwkJfQorCX0KKwkvKiBDb252ZXJ0IGJhY2sgdG8gZmlsZS1iYXNlZCBleHRlbnQgaW5kZXggKi8KKwlpZiAoaWZwLT5pZl9mbGFncyAmIFhGU19JRkVYVElSRUMpIHsKKwkJaWR4ICs9IGVycC0+ZXJfZXh0b2ZmOworCX0KKwlpZiAoYm5vID49IHN0YXJ0b2ZmICsgYmxvY2tjb3VudCkgeworCQlpZiAoKytpZHggPT0gbmV4dGVudHMpIHsKKwkJCWVwID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWVwID0geGZzX2lleHRfZ2V0X2V4dChpZnAsIGlkeCk7CisJCX0KKwl9CisJKmlkeHAgPSBpZHg7CisJcmV0dXJuIGVwOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaW5kaXJlY3Rpb24gYXJyYXkgZW50cnkgY29udGFpbmluZyB0aGUKKyAqIGV4dGVudCByZWNvcmQgZm9yIGZpbGVzeXN0ZW0gYmxvY2sgYm5vLiBTdG9yZSB0aGUgaW5kZXggb2YgdGhlCisgKiB0YXJnZXQgaXJlYyBpbiAqZXJwX2lkeHAuCisgKi8KK3hmc19leHRfaXJlY190ICoJCQkvKiBwb2ludGVyIHRvIGZvdW5kIGV4dGVudCByZWNvcmQgKi8KK3hmc19pZXh0X2Jub190b19pcmVjKAorCXhmc19pZm9ya190CSppZnAsCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KKwl4ZnNfZmlsZW9mZl90CWJubywJCS8qIGJsb2NrIG51bWJlciB0byBzZWFyY2ggZm9yICovCisJaW50CQkqZXJwX2lkeHApCS8qIGlyZWMgaW5kZXggb2YgdGFyZ2V0IGV4dCBsaXN0ICovCit7CisJeGZzX2V4dF9pcmVjX3QJKmVycCA9IE5VTEw7CS8qIGluZGlyZWN0aW9uIGFycmF5IHBvaW50ZXIgKi8KKwl4ZnNfZXh0X2lyZWNfdAkqZXJwX25leHQ7CS8qIG5leHQgaW5kaXJlY3Rpb24gYXJyYXkgZW50cnkgKi8KKwlpbnQJCWVycF9pZHg7CS8qIGluZGlyZWN0aW9uIGFycmF5IGluZGV4ICovCisJaW50CQlubGlzdHM7CQkvKiBudW1iZXIgb2YgZXh0ZW50IGlyZWMncyAobGlzdHMpICovCisJaW50CQloaWdoOwkJLyogYmluYXJ5IHNlYXJjaCB1cHBlciBsaW1pdCAqLworCWludAkJbG93OwkJLyogYmluYXJ5IHNlYXJjaCBsb3dlciBsaW1pdCAqLworCisJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKTsKKwlubGlzdHMgPSBpZnAtPmlmX3JlYWxfYnl0ZXMgLyBYRlNfSUVYVF9CVUZTWjsKKwllcnBfaWR4ID0gMDsKKwlsb3cgPSAwOworCWhpZ2ggPSBubGlzdHMgLSAxOworCXdoaWxlIChsb3cgPD0gaGlnaCkgeworCQllcnBfaWR4ID0gKGxvdyArIGhpZ2gpID4+IDE7CisJCWVycCA9ICZpZnAtPmlmX3UxLmlmX2V4dF9pcmVjW2VycF9pZHhdOworCQllcnBfbmV4dCA9IGVycF9pZHggPCBubGlzdHMgLSAxID8gZXJwICsgMSA6IE5VTEw7CisJCWlmIChibm8gPCB4ZnNfYm1idF9nZXRfc3RhcnRvZmYoZXJwLT5lcl9leHRidWYpKSB7CisJCQloaWdoID0gZXJwX2lkeCAtIDE7CisJCX0gZWxzZSBpZiAoZXJwX25leHQgJiYgYm5vID49CisJCQkgICB4ZnNfYm1idF9nZXRfc3RhcnRvZmYoZXJwX25leHQtPmVyX2V4dGJ1ZikpIHsKKwkJCWxvdyA9IGVycF9pZHggKyAxOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisJKmVycF9pZHhwID0gZXJwX2lkeDsKKwlyZXR1cm4gZXJwOworfQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaW5kaXJlY3Rpb24gYXJyYXkgZW50cnkgY29udGFpbmluZyB0aGUKKyAqIGV4dGVudCByZWNvcmQgYXQgZmlsZSBleHRlbnQgaW5kZXggKmlkeHAuIFN0b3JlIHRoZSBpbmRleCBvZiB0aGUKKyAqIHRhcmdldCBpcmVjIGluICplcnBfaWR4cCBhbmQgc3RvcmUgdGhlIHBhZ2UgaW5kZXggb2YgdGhlIHRhcmdldAorICogZXh0ZW50IHJlY29yZCBpbiAqaWR4cC4KKyAqLworeGZzX2V4dF9pcmVjX3QgKgoreGZzX2lleHRfaWR4X3RvX2lyZWMoCisJeGZzX2lmb3JrX3QJKmlmcCwJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLworCXhmc19leHRudW1fdAkqaWR4cCwJCS8qIGV4dGVudCBpbmRleCAoZmlsZSAtPiBwYWdlKSAqLworCWludAkJKmVycF9pZHhwLAkvKiBwb2ludGVyIHRvIHRhcmdldCBpcmVjICovCisJaW50CQlyZWFsbG9jKQkvKiBuZXcgYnl0ZXMgd2VyZSBqdXN0IGFkZGVkICovCit7CisJeGZzX2V4dF9pcmVjX3QJKnByZXY7CQkvKiBwb2ludGVyIHRvIHByZXZpb3VzIGlyZWMgKi8KKwl4ZnNfZXh0X2lyZWNfdAkqZXJwID0gTlVMTDsJLyogcG9pbnRlciB0byBjdXJyZW50IGlyZWMgKi8KKwlpbnQJCWVycF9pZHg7CS8qIGluZGlyZWN0aW9uIGFycmF5IGluZGV4ICovCisJaW50CQlubGlzdHM7CQkvKiBudW1iZXIgb2YgaXJlYydzIChleCBsaXN0cykgKi8KKwlpbnQJCWhpZ2g7CQkvKiBiaW5hcnkgc2VhcmNoIHVwcGVyIGxpbWl0ICovCisJaW50CQlsb3c7CQkvKiBiaW5hcnkgc2VhcmNoIGxvd2VyIGxpbWl0ICovCisJeGZzX2V4dG51bV90CXBhZ2VfaWR4ID0gKmlkeHA7IC8qIGV4dGVudCBpbmRleCBpbiB0YXJnZXQgbGlzdCAqLworCisJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKTsKKwlBU1NFUlQocGFnZV9pZHggPj0gMCAmJiBwYWdlX2lkeCA8PQorCQlpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJbmxpc3RzID0gaWZwLT5pZl9yZWFsX2J5dGVzIC8gWEZTX0lFWFRfQlVGU1o7CisJZXJwX2lkeCA9IDA7CisJbG93ID0gMDsKKwloaWdoID0gbmxpc3RzIC0gMTsKKworCS8qIEJpbmFyeSBzZWFyY2ggZXh0ZW50IGlyZWMncyAqLworCXdoaWxlIChsb3cgPD0gaGlnaCkgeworCQllcnBfaWR4ID0gKGxvdyArIGhpZ2gpID4+IDE7CisJCWVycCA9ICZpZnAtPmlmX3UxLmlmX2V4dF9pcmVjW2VycF9pZHhdOworCQlwcmV2ID0gZXJwX2lkeCA+IDAgPyBlcnAgLSAxIDogTlVMTDsKKwkJaWYgKHBhZ2VfaWR4IDwgZXJwLT5lcl9leHRvZmYgfHwgKHBhZ2VfaWR4ID09IGVycC0+ZXJfZXh0b2ZmICYmCisJCSAgICAgcmVhbGxvYyAmJiBwcmV2ICYmIHByZXYtPmVyX2V4dGNvdW50IDwgWEZTX0xJTkVBUl9FWFRTKSkgeworCQkJaGlnaCA9IGVycF9pZHggLSAxOworCQl9IGVsc2UgaWYgKHBhZ2VfaWR4ID4gZXJwLT5lcl9leHRvZmYgKyBlcnAtPmVyX2V4dGNvdW50IHx8CisJCQkgICAocGFnZV9pZHggPT0gZXJwLT5lcl9leHRvZmYgKyBlcnAtPmVyX2V4dGNvdW50ICYmCisJCQkgICAgIXJlYWxsb2MpKSB7CisJCQlsb3cgPSBlcnBfaWR4ICsgMTsKKwkJfSBlbHNlIGlmIChwYWdlX2lkeCA9PSBlcnAtPmVyX2V4dG9mZiArIGVycC0+ZXJfZXh0Y291bnQgJiYKKwkJCSAgIGVycC0+ZXJfZXh0Y291bnQgPT0gWEZTX0xJTkVBUl9FWFRTKSB7CisJCQlBU1NFUlQocmVhbGxvYyk7CisJCQlwYWdlX2lkeCA9IDA7CisJCQllcnBfaWR4Kys7CisJCQllcnAgPSBlcnBfaWR4IDwgbmxpc3RzID8gZXJwICsgMSA6IE5VTEw7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXBhZ2VfaWR4IC09IGVycC0+ZXJfZXh0b2ZmOworCQkJYnJlYWs7CisJCX0KKwl9CisJKmlkeHAgPSBwYWdlX2lkeDsKKwkqZXJwX2lkeHAgPSBlcnBfaWR4OworCXJldHVybihlcnApOworfQorCisvKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5kaXJlY3Rpb24gYXJyYXkgb25jZSB0aGUgc3BhY2UgbmVlZGVkCisgKiBmb3IgaW5jb3JlIGV4dGVudHMgaW5jcmVhc2VzIGFib3ZlIFhGU19JRVhUX0JVRlNaLgorICovCit2b2lkCit4ZnNfaWV4dF9pcmVjX2luaXQoCisJeGZzX2lmb3JrX3QJKmlmcCkJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLworeworCXhmc19leHRfaXJlY190CSplcnA7CQkvKiBpbmRpcmVjdGlvbiBhcnJheSBwb2ludGVyICovCisJeGZzX2V4dG51bV90CW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZXh0ZW50cyBpbiBmaWxlICovCisKKwlBU1NFUlQoIShpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQykpOworCW5leHRlbnRzID0gaWZwLT5pZl9ieXRlcyAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJQVNTRVJUKG5leHRlbnRzIDw9IFhGU19MSU5FQVJfRVhUUyk7CisKKwllcnAgPSAoeGZzX2V4dF9pcmVjX3QgKikKKwkJa21lbV9hbGxvYyhzaXplb2YoeGZzX2V4dF9pcmVjX3QpLCBLTV9TTEVFUCk7CisKKwlpZiAobmV4dGVudHMgPT0gMCkgeworCQlpZnAtPmlmX3UxLmlmX2V4dGVudHMgPSAoeGZzX2JtYnRfcmVjX3QgKikKKwkJCWttZW1fYWxsb2MoWEZTX0lFWFRfQlVGU1osIEtNX1NMRUVQKTsKKwl9IGVsc2UgaWYgKCFpZnAtPmlmX3JlYWxfYnl0ZXMpIHsKKwkJeGZzX2lleHRfaW5saW5lX3RvX2RpcmVjdChpZnAsIFhGU19JRVhUX0JVRlNaKTsKKwl9IGVsc2UgaWYgKGlmcC0+aWZfcmVhbF9ieXRlcyA8IFhGU19JRVhUX0JVRlNaKSB7CisJCXhmc19pZXh0X3JlYWxsb2NfZGlyZWN0KGlmcCwgWEZTX0lFWFRfQlVGU1opOworCX0KKwllcnAtPmVyX2V4dGJ1ZiA9IGlmcC0+aWZfdTEuaWZfZXh0ZW50czsKKwllcnAtPmVyX2V4dGNvdW50ID0gbmV4dGVudHM7CisJZXJwLT5lcl9leHRvZmYgPSAwOworCisJaWZwLT5pZl9mbGFncyB8PSBYRlNfSUZFWFRJUkVDOworCWlmcC0+aWZfcmVhbF9ieXRlcyA9IFhGU19JRVhUX0JVRlNaOworCWlmcC0+aWZfYnl0ZXMgPSBuZXh0ZW50cyAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJaWZwLT5pZl91MS5pZl9leHRfaXJlYyA9IGVycDsKKworCXJldHVybjsKK30KKworLyoKKyAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IGVudHJ5IGluIHRoZSBpbmRpcmVjdGlvbiBhcnJheS4KKyAqLworeGZzX2V4dF9pcmVjX3QgKgoreGZzX2lleHRfaXJlY19uZXcoCisJeGZzX2lmb3JrX3QJKmlmcCwJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLworCWludAkJZXJwX2lkeCkJLyogaW5kZXggZm9yIG5ldyBpcmVjICovCit7CisJeGZzX2V4dF9pcmVjX3QJKmVycDsJCS8qIGluZGlyZWN0aW9uIGFycmF5IHBvaW50ZXIgKi8KKwlpbnQJCWk7CQkvKiBsb29wIGNvdW50ZXIgKi8KKwlpbnQJCW5saXN0czsJCS8qIG51bWJlciBvZiBpcmVjJ3MgKGV4IGxpc3RzKSAqLworCisJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKTsKKwlubGlzdHMgPSBpZnAtPmlmX3JlYWxfYnl0ZXMgLyBYRlNfSUVYVF9CVUZTWjsKKworCS8qIFJlc2l6ZSBpbmRpcmVjdGlvbiBhcnJheSAqLworCXhmc19pZXh0X3JlYWxsb2NfaW5kaXJlY3QoaWZwLCArK25saXN0cyAqCisJCQkJICBzaXplb2YoeGZzX2V4dF9pcmVjX3QpKTsKKwkvKgorCSAqIE1vdmUgcmVjb3JkcyBkb3duIGluIHRoZSBhcnJheSBzbyB0aGUKKwkgKiBuZXcgcGFnZSBjYW4gdXNlIGVycF9pZHguCisJICovCisJZXJwID0gaWZwLT5pZl91MS5pZl9leHRfaXJlYzsKKwlmb3IgKGkgPSBubGlzdHMgLSAxOyBpID4gZXJwX2lkeDsgaS0tKSB7CisJCW1lbW1vdmUoJmVycFtpXSwgJmVycFtpLTFdLCBzaXplb2YoeGZzX2V4dF9pcmVjX3QpKTsKKwl9CisJQVNTRVJUKGkgPT0gZXJwX2lkeCk7CisKKwkvKiBJbml0aWFsaXplIG5ldyBleHRlbnQgcmVjb3JkICovCisJZXJwID0gaWZwLT5pZl91MS5pZl9leHRfaXJlYzsKKwllcnBbZXJwX2lkeF0uZXJfZXh0YnVmID0gKHhmc19ibWJ0X3JlY190ICopCisJCWttZW1fYWxsb2MoWEZTX0lFWFRfQlVGU1osIEtNX1NMRUVQKTsKKwlpZnAtPmlmX3JlYWxfYnl0ZXMgPSBubGlzdHMgKiBYRlNfSUVYVF9CVUZTWjsKKwltZW1zZXQoZXJwW2VycF9pZHhdLmVyX2V4dGJ1ZiwgMCwgWEZTX0lFWFRfQlVGU1opOworCWVycFtlcnBfaWR4XS5lcl9leHRjb3VudCA9IDA7CisJZXJwW2VycF9pZHhdLmVyX2V4dG9mZiA9IGVycF9pZHggPiAwID8KKwkJZXJwW2VycF9pZHgtMV0uZXJfZXh0b2ZmICsgZXJwW2VycF9pZHgtMV0uZXJfZXh0Y291bnQgOiAwOworCXJldHVybiAoJmVycFtlcnBfaWR4XSk7Cit9CisKKy8qCisgKiBSZW1vdmUgYSByZWNvcmQgZnJvbSB0aGUgaW5kaXJlY3Rpb24gYXJyYXkuCisgKi8KK3ZvaWQKK3hmc19pZXh0X2lyZWNfcmVtb3ZlKAorCXhmc19pZm9ya190CSppZnAsCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KKwlpbnQJCWVycF9pZHgpCS8qIGlyZWMgaW5kZXggdG8gcmVtb3ZlICovCit7CisJeGZzX2V4dF9pcmVjX3QJKmVycDsJCS8qIGluZGlyZWN0aW9uIGFycmF5IHBvaW50ZXIgKi8KKwlpbnQJCWk7CQkvKiBsb29wIGNvdW50ZXIgKi8KKwlpbnQJCW5saXN0czsJCS8qIG51bWJlciBvZiBpcmVjJ3MgKGV4IGxpc3RzKSAqLworCisJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKTsKKwlubGlzdHMgPSBpZnAtPmlmX3JlYWxfYnl0ZXMgLyBYRlNfSUVYVF9CVUZTWjsKKwllcnAgPSAmaWZwLT5pZl91MS5pZl9leHRfaXJlY1tlcnBfaWR4XTsKKwlpZiAoZXJwLT5lcl9leHRidWYpIHsKKwkJeGZzX2lleHRfaXJlY191cGRhdGVfZXh0b2ZmcyhpZnAsIGVycF9pZHggKyAxLAorCQkJLWVycC0+ZXJfZXh0Y291bnQpOworCQlrbWVtX2ZyZWUoZXJwLT5lcl9leHRidWYsIFhGU19JRVhUX0JVRlNaKTsKKwl9CisJLyogQ29tcGFjdCBleHRlbnQgcmVjb3JkcyAqLworCWVycCA9IGlmcC0+aWZfdTEuaWZfZXh0X2lyZWM7CisJZm9yIChpID0gZXJwX2lkeDsgaSA8IG5saXN0cyAtIDE7IGkrKykgeworCQltZW1tb3ZlKCZlcnBbaV0sICZlcnBbaSsxXSwgc2l6ZW9mKHhmc19leHRfaXJlY190KSk7CisJfQorCS8qCisJICogTWFudWFsbHkgZnJlZSB0aGUgbGFzdCBleHRlbnQgcmVjb3JkIGZyb20gdGhlIGluZGlyZWN0aW9uCisJICogYXJyYXkuICBBIGNhbGwgdG8geGZzX2lleHRfcmVhbGxvY19pbmRpcmVjdCgpIHdpdGggYSBzaXplCisJICogb2YgemVybyB3b3VsZCByZXN1bHQgaW4gYSBjYWxsIHRvIHhmc19pZXh0X2Rlc3Ryb3koKSB3aGljaAorCSAqIHdvdWxkIGluIHR1cm4gY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLCBjcmVhdGluZyBhIG5hc3R5CisJICogaW5maW5pdGUgbG9vcC4KKwkgKi8KKwlpZiAoLS1ubGlzdHMpIHsKKwkJeGZzX2lleHRfcmVhbGxvY19pbmRpcmVjdChpZnAsCisJCQlubGlzdHMgKiBzaXplb2YoeGZzX2V4dF9pcmVjX3QpKTsKKwl9IGVsc2UgeworCQlrbWVtX2ZyZWUoaWZwLT5pZl91MS5pZl9leHRfaXJlYywKKwkJCXNpemVvZih4ZnNfZXh0X2lyZWNfdCkpOworCX0KKwlpZnAtPmlmX3JlYWxfYnl0ZXMgPSBubGlzdHMgKiBYRlNfSUVYVF9CVUZTWjsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHRvIGNsZWFuIHVwIGxhcmdlIGFtb3VudHMgb2YgdW51c2VkIG1lbW9yeSBhbGxvY2F0ZWQKKyAqIGJ5IHRoZSBpbmRpcmVjdGlvbiBhcnJheS4gIEJlZm9yZSBjb21wYWN0aW5nIGFueXRoaW5nIHRob3VnaCwgdmVyaWZ5CisgKiB0aGF0IHRoZSBpbmRpcmVjdGlvbiBhcnJheSBpcyBzdGlsbCBuZWVkZWQgYW5kIHN3aXRjaCBiYWNrIHRvIHRoZQorICogbGluZWFyIGV4dGVudCBsaXN0IChvciBldmVuIHRoZSBpbmxpbmUgYnVmZmVyKSBpZiBwb3NzaWJsZS4gIFRoZQorICogY29tcGFjdGlvbiBwb2xpY3kgaXMgYXMgZm9sbG93czoKKyAqCisgKiAgICBGdWxsIENvbXBhY3Rpb246IEV4dGVudHMgZml0IGludG8gYSBzaW5nbGUgcGFnZSAob3IgaW5saW5lIGJ1ZmZlcikKKyAqICAgIEZ1bGwgQ29tcGFjdGlvbjogRXh0ZW50cyBvY2N1cHkgbGVzcyB0aGFuIDEwJSBvZiBhbGxvY2F0ZWQgc3BhY2UKKyAqIFBhcnRpYWwgQ29tcGFjdGlvbjogRXh0ZW50cyBvY2N1cHkgPiAxMCUgYW5kIDwgNTAlIG9mIGFsbG9jYXRlZCBzcGFjZQorICogICAgICBObyBDb21wYWN0aW9uOiBFeHRlbnRzIG9jY3VweSBhdCBsZWFzdCA1MCUgb2YgYWxsb2NhdGVkIHNwYWNlCisgKi8KK3ZvaWQKK3hmc19pZXh0X2lyZWNfY29tcGFjdCgKKwl4ZnNfaWZvcmtfdAkqaWZwKQkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCit7CisJeGZzX2V4dG51bV90CW5leHRlbnRzOwkvKiBudW1iZXIgb2YgZXh0ZW50cyBpbiBmaWxlICovCisJaW50CQlubGlzdHM7CQkvKiBudW1iZXIgb2YgaXJlYydzIChleCBsaXN0cykgKi8KKworCUFTU0VSVChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQyk7CisJbmxpc3RzID0gaWZwLT5pZl9yZWFsX2J5dGVzIC8gWEZTX0lFWFRfQlVGU1o7CisJbmV4dGVudHMgPSBpZnAtPmlmX2J5dGVzIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKKworCWlmIChuZXh0ZW50cyA9PSAwKSB7CisJCXhmc19pZXh0X2Rlc3Ryb3koaWZwKTsKKwl9IGVsc2UgaWYgKG5leHRlbnRzIDw9IFhGU19JTkxJTkVfRVhUUykgeworCQl4ZnNfaWV4dF9pbmRpcmVjdF90b19kaXJlY3QoaWZwKTsKKwkJeGZzX2lleHRfZGlyZWN0X3RvX2lubGluZShpZnAsIG5leHRlbnRzKTsKKwl9IGVsc2UgaWYgKG5leHRlbnRzIDw9IFhGU19MSU5FQVJfRVhUUykgeworCQl4ZnNfaWV4dF9pbmRpcmVjdF90b19kaXJlY3QoaWZwKTsKKwl9IGVsc2UgaWYgKG5leHRlbnRzIDwgKG5saXN0cyAqIFhGU19MSU5FQVJfRVhUUykgPj4gMykgeworCQl4ZnNfaWV4dF9pcmVjX2NvbXBhY3RfZnVsbChpZnApOworCX0gZWxzZSBpZiAobmV4dGVudHMgPCAobmxpc3RzICogWEZTX0xJTkVBUl9FWFRTKSA+PiAxKSB7CisJCXhmc19pZXh0X2lyZWNfY29tcGFjdF9wYWdlcyhpZnApOworCX0KK30KKworLyoKKyAqIENvbWJpbmUgZXh0ZW50cyBmcm9tIG5laWdoYm9yaW5nIGV4dGVudCBwYWdlcy4KKyAqLwordm9pZAoreGZzX2lleHRfaXJlY19jb21wYWN0X3BhZ2VzKAorCXhmc19pZm9ya190CSppZnApCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KK3sKKwl4ZnNfZXh0X2lyZWNfdAkqZXJwLCAqZXJwX25leHQ7LyogcG9pbnRlcnMgdG8gaXJlYyBlbnRyaWVzICovCisJaW50CQllcnBfaWR4ID0gMDsJLyogaW5kaXJlY3Rpb24gYXJyYXkgaW5kZXggKi8KKwlpbnQJCW5saXN0czsJCS8qIG51bWJlciBvZiBpcmVjJ3MgKGV4IGxpc3RzKSAqLworCisJQVNTRVJUKGlmcC0+aWZfZmxhZ3MgJiBYRlNfSUZFWFRJUkVDKTsKKwlubGlzdHMgPSBpZnAtPmlmX3JlYWxfYnl0ZXMgLyBYRlNfSUVYVF9CVUZTWjsKKwl3aGlsZSAoZXJwX2lkeCA8IG5saXN0cyAtIDEpIHsKKwkJZXJwID0gJmlmcC0+aWZfdTEuaWZfZXh0X2lyZWNbZXJwX2lkeF07CisJCWVycF9uZXh0ID0gZXJwICsgMTsKKwkJaWYgKGVycF9uZXh0LT5lcl9leHRjb3VudCA8PQorCQkgICAgKFhGU19MSU5FQVJfRVhUUyAtIGVycC0+ZXJfZXh0Y291bnQpKSB7CisJCQltZW1tb3ZlKCZlcnAtPmVyX2V4dGJ1ZltlcnAtPmVyX2V4dGNvdW50XSwKKwkJCQllcnBfbmV4dC0+ZXJfZXh0YnVmLCBlcnBfbmV4dC0+ZXJfZXh0Y291bnQgKgorCQkJCXNpemVvZih4ZnNfYm1idF9yZWNfdCkpOworCQkJZXJwLT5lcl9leHRjb3VudCArPSBlcnBfbmV4dC0+ZXJfZXh0Y291bnQ7CisJCQkvKgorCQkJICogRnJlZSBwYWdlIGJlZm9yZSByZW1vdmluZyBleHRlbnQgcmVjb3JkCisJCQkgKiBzbyBlcl9leHRvZmZzIGRvbid0IGdldCBtb2RpZmllZCBpbgorCQkJICogeGZzX2lleHRfaXJlY19yZW1vdmUuCisJCQkgKi8KKwkJCWttZW1fZnJlZShlcnBfbmV4dC0+ZXJfZXh0YnVmLCBYRlNfSUVYVF9CVUZTWik7CisJCQllcnBfbmV4dC0+ZXJfZXh0YnVmID0gTlVMTDsKKwkJCXhmc19pZXh0X2lyZWNfcmVtb3ZlKGlmcCwgZXJwX2lkeCArIDEpOworCQkJbmxpc3RzID0gaWZwLT5pZl9yZWFsX2J5dGVzIC8gWEZTX0lFWFRfQlVGU1o7CisJCX0gZWxzZSB7CisJCQllcnBfaWR4Kys7CisJCX0KKwl9Cit9CisKKy8qCisgKiBGdWxseSBjb21wYWN0IHRoZSBleHRlbnQgcmVjb3JkcyBtYW5hZ2VkIGJ5IHRoZSBpbmRpcmVjdGlvbiBhcnJheS4KKyAqLwordm9pZAoreGZzX2lleHRfaXJlY19jb21wYWN0X2Z1bGwoCisJeGZzX2lmb3JrX3QJKmlmcCkJCQkvKiBpbm9kZSBmb3JrIHBvaW50ZXIgKi8KK3sKKwl4ZnNfYm1idF9yZWNfdAkqZXAsICplcF9uZXh0OwkJLyogZXh0ZW50IHJlY29yZCBwb2ludGVycyAqLworCXhmc19leHRfaXJlY190CSplcnAsICplcnBfbmV4dDsJLyogZXh0ZW50IGlyZWMgcG9pbnRlcnMgKi8KKwlpbnQJCWVycF9pZHggPSAwOwkJLyogZXh0ZW50IGlyZWMgaW5kZXggKi8KKwlpbnQJCWV4dF9hdmFpbDsJCS8qIGVtcHR5IGVudHJpZXMgaW4gZXggbGlzdCAqLworCWludAkJZXh0X2RpZmY7CQkvKiBudW1iZXIgb2YgZXh0cyB0byBhZGQgKi8KKwlpbnQJCW5saXN0czsJCQkvKiBudW1iZXIgb2YgaXJlYydzIChleCBsaXN0cykgKi8KKworCUFTU0VSVChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQyk7CisJbmxpc3RzID0gaWZwLT5pZl9yZWFsX2J5dGVzIC8gWEZTX0lFWFRfQlVGU1o7CisJZXJwID0gaWZwLT5pZl91MS5pZl9leHRfaXJlYzsKKwllcCA9ICZlcnAtPmVyX2V4dGJ1ZltlcnAtPmVyX2V4dGNvdW50XTsKKwllcnBfbmV4dCA9IGVycCArIDE7CisJZXBfbmV4dCA9IGVycF9uZXh0LT5lcl9leHRidWY7CisJd2hpbGUgKGVycF9pZHggPCBubGlzdHMgLSAxKSB7CisJCWV4dF9hdmFpbCA9IFhGU19MSU5FQVJfRVhUUyAtIGVycC0+ZXJfZXh0Y291bnQ7CisJCWV4dF9kaWZmID0gTUlOKGV4dF9hdmFpbCwgZXJwX25leHQtPmVyX2V4dGNvdW50KTsKKwkJbWVtY3B5KGVwLCBlcF9uZXh0LCBleHRfZGlmZiAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCkpOworCQllcnAtPmVyX2V4dGNvdW50ICs9IGV4dF9kaWZmOworCQllcnBfbmV4dC0+ZXJfZXh0Y291bnQgLT0gZXh0X2RpZmY7CisJCS8qIFJlbW92ZSBuZXh0IHBhZ2UgKi8KKwkJaWYgKGVycF9uZXh0LT5lcl9leHRjb3VudCA9PSAwKSB7CisJCQkvKgorCQkJICogRnJlZSBwYWdlIGJlZm9yZSByZW1vdmluZyBleHRlbnQgcmVjb3JkCisJCQkgKiBzbyBlcl9leHRvZmZzIGRvbid0IGdldCBtb2RpZmllZCBpbgorCQkJICogeGZzX2lleHRfaXJlY19yZW1vdmUuCisJCQkgKi8KKwkJCWttZW1fZnJlZShlcnBfbmV4dC0+ZXJfZXh0YnVmLAorCQkJCWVycF9uZXh0LT5lcl9leHRjb3VudCAqIHNpemVvZih4ZnNfYm1idF9yZWNfdCkpOworCQkJZXJwX25leHQtPmVyX2V4dGJ1ZiA9IE5VTEw7CisJCQl4ZnNfaWV4dF9pcmVjX3JlbW92ZShpZnAsIGVycF9pZHggKyAxKTsKKwkJCWVycCA9ICZpZnAtPmlmX3UxLmlmX2V4dF9pcmVjW2VycF9pZHhdOworCQkJbmxpc3RzID0gaWZwLT5pZl9yZWFsX2J5dGVzIC8gWEZTX0lFWFRfQlVGU1o7CisJCS8qIFVwZGF0ZSBuZXh0IHBhZ2UgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIE1vdmUgcmVzdCBvZiBwYWdlIHVwIHRvIGJlY29tZSBuZXh0IG5ldyBwYWdlICovCisJCQltZW1tb3ZlKGVycF9uZXh0LT5lcl9leHRidWYsIGVwX25leHQsCisJCQkJZXJwX25leHQtPmVyX2V4dGNvdW50ICogc2l6ZW9mKHhmc19ibWJ0X3JlY190KSk7CisJCQllcF9uZXh0ID0gZXJwX25leHQtPmVyX2V4dGJ1ZjsKKwkJCW1lbXNldCgmZXBfbmV4dFtlcnBfbmV4dC0+ZXJfZXh0Y291bnRdLCAwLAorCQkJCShYRlNfTElORUFSX0VYVFMgLSBlcnBfbmV4dC0+ZXJfZXh0Y291bnQpICoKKwkJCQlzaXplb2YoeGZzX2JtYnRfcmVjX3QpKTsKKwkJfQorCQlpZiAoZXJwLT5lcl9leHRjb3VudCA9PSBYRlNfTElORUFSX0VYVFMpIHsKKwkJCWVycF9pZHgrKzsKKwkJCWlmIChlcnBfaWR4IDwgbmxpc3RzKQorCQkJCWVycCA9ICZpZnAtPmlmX3UxLmlmX2V4dF9pcmVjW2VycF9pZHhdOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJCWVwID0gJmVycC0+ZXJfZXh0YnVmW2VycC0+ZXJfZXh0Y291bnRdOworCQllcnBfbmV4dCA9IGVycCArIDE7CisJCWVwX25leHQgPSBlcnBfbmV4dC0+ZXJfZXh0YnVmOworCX0KK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgZXJfZXh0b2ZmIGZpZWxkIGluIHRoZSBpbmRpcmVjdGlvbgorICogYXJyYXkgd2hlbiBleHRlbnRzIGhhdmUgYmVlbiBhZGRlZCBvciByZW1vdmVkIGZyb20gb25lIG9mIHRoZQorICogZXh0ZW50IGxpc3RzLiBlcnBfaWR4IGNvbnRhaW5zIHRoZSBpcmVjIGluZGV4IHRvIGJlZ2luIHVwZGF0aW5nCisgKiBhdCBhbmQgZXh0X2RpZmYgY29udGFpbnMgdGhlIG51bWJlciBvZiBleHRlbnRzIHRoYXQgd2VyZSBhZGRlZAorICogb3IgcmVtb3ZlZC4KKyAqLwordm9pZAoreGZzX2lleHRfaXJlY191cGRhdGVfZXh0b2ZmcygKKwl4ZnNfaWZvcmtfdAkqaWZwLAkJLyogaW5vZGUgZm9yayBwb2ludGVyICovCisJaW50CQllcnBfaWR4LAkvKiBpcmVjIGluZGV4IHRvIHVwZGF0ZSAqLworCWludAkJZXh0X2RpZmYpCS8qIG51bWJlciBvZiBuZXcgZXh0ZW50cyAqLworeworCWludAkJaTsJCS8qIGxvb3AgY291bnRlciAqLworCWludAkJbmxpc3RzOwkJLyogbnVtYmVyIG9mIGlyZWMncyAoZXggbGlzdHMgKi8KKworCUFTU0VSVChpZnAtPmlmX2ZsYWdzICYgWEZTX0lGRVhUSVJFQyk7CisJbmxpc3RzID0gaWZwLT5pZl9yZWFsX2J5dGVzIC8gWEZTX0lFWFRfQlVGU1o7CisJZm9yIChpID0gZXJwX2lkeDsgaSA8IG5saXN0czsgaSsrKSB7CisJCWlmcC0+aWZfdTEuaWZfZXh0X2lyZWNbaV0uZXJfZXh0b2ZmICs9IGV4dF9kaWZmOworCX0KK30KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAxY2ZiY2YxLi4zOWVmOWMzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC0yNSwxMCArMjUsMzcgQEAKICNkZWZpbmUJWEZTX0FUVFJfRk9SSwkxCiAKIC8qCisgKiBUaGUgZm9sbG93aW5nIHhmc19leHRfaXJlY190IHN0cnVjdCBpbnRyb2R1Y2VzIGEgc2Vjb25kICh0b3ApIGxldmVsCisgKiB0byB0aGUgaW4tY29yZSBleHRlbnQgYWxsb2NhdGlvbiBzY2hlbWUuIFRoZXNlIHN0cnVjdHMgYXJlIGFsbG9jYXRlZAorICogaW4gYSBjb250aWd1b3VzIGJsb2NrLCBjcmVhdGluZyBhbiBpbmRpcmVjdGlvbiBhcnJheSB3aGVyZSBlYWNoIGVudHJ5CisgKiAoaXJlYykgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgYnVmZmVyIG9mIGluLWNvcmUgZXh0ZW50IHJlY29yZHMgd2hpY2gKKyAqIGl0IG1hbmFnZXMuIEVhY2ggZXh0ZW50IGJ1ZmZlciBpcyA0ayBpbiBzaXplLCBzaW5jZSA0ayBpcyB0aGUgc3lzdGVtCisgKiBwYWdlIHNpemUgb24gTGludXggaTM4NiBhbmQgc3lzdGVtcyB3aXRoIGxhcmdlciBwYWdlIHNpemVzIGRvbid0IHNlZW0KKyAqIHRvIGdhaW4gbXVjaCwgaWYgYW55dGhpbmcsIGJ5IHVzaW5nIHRoZWlyIG5hdGl2ZSBwYWdlIHNpemUgYXMgdGhlCisgKiBleHRlbnQgYnVmZmVyIHNpemUuIEFsc28sIHVzaW5nIDRrIGV4dGVudCBidWZmZXJzIGV2ZXJ5d2hlcmUgcHJvdmlkZXMKKyAqIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgZm9yIENYRlMgYWNyb3NzIGRpZmZlcmVudCBwbGF0Zm9ybXMuCisgKgorICogVGhlcmUgaXMgY3VycmVudGx5IG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgaXJlYydzIChleHRlbnQgbGlzdHMpCisgKiBhbGxvd2VkLCBzbyBoZWF2aWx5IGZyYWdtZW50ZWQgZmlsZXMgbWF5IHJlcXVpcmUgYW4gaW5kaXJlY3Rpb24gYXJyYXkKKyAqIHdoaWNoIHNwYW5zIG11bHRpcGxlIHN5c3RlbSBwYWdlcyBvZiBtZW1vcnkuIFRoZSBudW1iZXIgb2YgZXh0ZW50cworICogd2hpY2ggd291bGQgcmVxdWlyZSB0aGlzIGFtb3VudCBvZiBjb250aWd1b3VzIG1lbW9yeSBpcyB2ZXJ5IGxhcmdlCisgKiBhbmQgc2hvdWxkIG5vdCBjYXVzZSBwcm9ibGVtcyBpbiB0aGUgZm9yZXNlZWFibGUgZnV0dXJlLiBIb3dldmVyLAorICogaWYgdGhlIG1lbW9yeSBuZWVkZWQgZm9yIHRoZSBjb250aWd1b3VzIGFycmF5IGV2ZXIgYmVjb21lcyBhIHByb2JsZW0sCisgKiBpdCBpcyBwb3NzaWJsZSB0aGF0IGEgdGhpcmQgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gbWF5IGJlIHJlcXVpcmVkLgorICovCit0eXBlZGVmIHN0cnVjdCB4ZnNfZXh0X2lyZWMgeworCXhmc19ibWJ0X3JlY190CSplcl9leHRidWY7CS8qIGJsb2NrIG9mIGV4dGVudCByZWNvcmRzICovCisJeGZzX2V4dG51bV90CWVyX2V4dG9mZjsJLyogZXh0ZW50IG9mZnNldCBpbiBmaWxlICovCisJeGZzX2V4dG51bV90CWVyX2V4dGNvdW50OwkvKiBudW1iZXIgb2YgZXh0ZW50cyBpbiBwYWdlL2Jsb2NrICovCit9IHhmc19leHRfaXJlY190OworCisvKgogICogRmlsZSBpbmNvcmUgZXh0ZW50IGluZm9ybWF0aW9uLCBwcmVzZW50IGZvciBlYWNoIG9mIGRhdGEgJiBhdHRyIGZvcmtzLgogICovCi0jZGVmaW5lCVhGU19JTkxJTkVfRVhUUwkyCi0jZGVmaW5lCVhGU19JTkxJTkVfREFUQQkzMgorI2RlZmluZQlYRlNfSUVYVF9CVUZTWgkJNDA5NgorI2RlZmluZQlYRlNfTElORUFSX0VYVFMJCShYRlNfSUVYVF9CVUZTWiAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCkpCisjZGVmaW5lCVhGU19JTkxJTkVfRVhUUwkJMgorI2RlZmluZQlYRlNfSU5MSU5FX0RBVEEJCTMyCiB0eXBlZGVmIHN0cnVjdCB4ZnNfaWZvcmsgewogCWludAkJCWlmX2J5dGVzOwkvKiBieXRlcyBpbiBpZl91MSAqLwogCWludAkJCWlmX3JlYWxfYnl0ZXM7CS8qIGJ5dGVzIGFsbG9jYXRlZCBpbiBpZl91MSAqLwpAQCAtMzksNiArNjYsNyBAQAogCXhmc19leHRudW1fdAkJaWZfbGFzdGV4OwkvKiBsYXN0IGlmX2V4dGVudHMgdXNlZCAqLwogCXVuaW9uIHsKIAkJeGZzX2JtYnRfcmVjX3QJKmlmX2V4dGVudHM7CS8qIGxpbmVhciBtYXAgZmlsZSBleHRzICovCisJCXhmc19leHRfaXJlY190CSppZl9leHRfaXJlYzsJLyogaXJlYyBtYXAgZmlsZSBleHRzICovCiAJCWNoYXIJCSppZl9kYXRhOwkvKiBpbmxpbmUgZmlsZSBkYXRhICovCiAJfSBpZl91MTsKIAl1bmlvbiB7CkBAIC02MSwyMCArODksMTYgQEAKIC8qCiAgKiBQZXItZm9yayBpbmNvcmUgaW5vZGUgZmxhZ3MuCiAgKi8KLSNkZWZpbmUJWEZTX0lGSU5MSU5FCTB4MDAwMQkvKiBJbmxpbmUgZGF0YSBpcyByZWFkIGluICovCi0jZGVmaW5lCVhGU19JRkVYVEVOVFMJMHgwMDAyCS8qIEFsbCBleHRlbnQgcG9pbnRlcnMgYXJlIHJlYWQgaW4gKi8KLSNkZWZpbmUJWEZTX0lGQlJPT1QJMHgwMDA0CS8qIGlfYnJvb3QgcG9pbnRzIHRvIHRoZSBibWFwIGItdHJlZSByb290ICovCisjZGVmaW5lCVhGU19JRklOTElORQkweDAxCS8qIElubGluZSBkYXRhIGlzIHJlYWQgaW4gKi8KKyNkZWZpbmUJWEZTX0lGRVhURU5UUwkweDAyCS8qIEFsbCBleHRlbnQgcG9pbnRlcnMgYXJlIHJlYWQgaW4gKi8KKyNkZWZpbmUJWEZTX0lGQlJPT1QJMHgwNAkvKiBpX2Jyb290IHBvaW50cyB0byB0aGUgYm1hcCBiLXRyZWUgcm9vdCAqLworI2RlZmluZQlYRlNfSUZFWFRJUkVDCTB4MDgJLyogSW5kaXJlY3Rpb24gYXJyYXkgb2YgZXh0ZW50IGJsb2NrcyAqLwogCiAvKgotICogRmxhZ3MgZm9yIHhmc19pbWFwKCkgYW5kIHhmc19kaWxvY2F0ZSgpLgorICogRmxhZ3MgZm9yIHhmc19pdG9icCgpLCB4ZnNfaW1hcCgpIGFuZCB4ZnNfZGlsb2NhdGUoKS4KICAqLwotI2RlZmluZQlYRlNfSU1BUF9MT09LVVAJCTB4MQotCi0vKgotICogTWF4aW11bSBudW1iZXIgb2YgZXh0ZW50IHBvaW50ZXJzIGluIGlmX3UxLmlmX2V4dGVudHMuCi0gKi8KLSNkZWZpbmUJWEZTX01BWF9JTkNPUkVfRVhURU5UUwkzMjc2OAotCisjZGVmaW5lIFhGU19JTUFQX0xPT0tVUAkJMHgxCisjZGVmaW5lIFhGU19JTUFQX0JVTEtTVEFUCTB4MgogCiAjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IGJodl9kZXNjOwpAQCAtMzk4LDcgKzQyMiw3IEBACiAgKi8KIGludAkJeGZzX2l0b2JwKHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc190cmFucyAqLAogCQkJICB4ZnNfaW5vZGVfdCAqLCB4ZnNfZGlub2RlX3QgKiosIHN0cnVjdCB4ZnNfYnVmICoqLAotCQkJICB4ZnNfZGFkZHJfdCk7CisJCQkgIHhmc19kYWRkcl90LCB1aW50KTsKIGludAkJeGZzX2lyZWFkKHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc190cmFucyAqLCB4ZnNfaW5vX3QsCiAJCQkgIHhmc19pbm9kZV90ICoqLCB4ZnNfZGFkZHJfdCk7CiBpbnQJCXhmc19pcmVhZF9leHRlbnRzKHN0cnVjdCB4ZnNfdHJhbnMgKiwgeGZzX2lub2RlX3QgKiwgaW50KTsKQEAgLTQ0MCw2ICs0NjQsMzIgQEAKIAogdm9pZAkJeGZzX3N5bmNocm9uaXplX2F0aW1lKHhmc19pbm9kZV90ICopOwogCit4ZnNfYm1idF9yZWNfdAkqeGZzX2lleHRfZ2V0X2V4dCh4ZnNfaWZvcmtfdCAqLCB4ZnNfZXh0bnVtX3QpOwordm9pZAkJeGZzX2lleHRfaW5zZXJ0KHhmc19pZm9ya190ICosIHhmc19leHRudW1fdCwgeGZzX2V4dG51bV90LAorCQkJCXhmc19ibWJ0X2lyZWNfdCAqKTsKK3ZvaWQJCXhmc19pZXh0X2FkZCh4ZnNfaWZvcmtfdCAqLCB4ZnNfZXh0bnVtX3QsIGludCk7Cit2b2lkCQl4ZnNfaWV4dF9hZGRfaW5kaXJlY3RfbXVsdGkoeGZzX2lmb3JrX3QgKiwgaW50LCB4ZnNfZXh0bnVtX3QsIGludCk7Cit2b2lkCQl4ZnNfaWV4dF9yZW1vdmUoeGZzX2lmb3JrX3QgKiwgeGZzX2V4dG51bV90LCBpbnQpOwordm9pZAkJeGZzX2lleHRfcmVtb3ZlX2lubGluZSh4ZnNfaWZvcmtfdCAqLCB4ZnNfZXh0bnVtX3QsIGludCk7Cit2b2lkCQl4ZnNfaWV4dF9yZW1vdmVfZGlyZWN0KHhmc19pZm9ya190ICosIHhmc19leHRudW1fdCwgaW50KTsKK3ZvaWQJCXhmc19pZXh0X3JlbW92ZV9pbmRpcmVjdCh4ZnNfaWZvcmtfdCAqLCB4ZnNfZXh0bnVtX3QsIGludCk7Cit2b2lkCQl4ZnNfaWV4dF9yZWFsbG9jX2RpcmVjdCh4ZnNfaWZvcmtfdCAqLCBpbnQpOwordm9pZAkJeGZzX2lleHRfcmVhbGxvY19pbmRpcmVjdCh4ZnNfaWZvcmtfdCAqLCBpbnQpOwordm9pZAkJeGZzX2lleHRfaW5kaXJlY3RfdG9fZGlyZWN0KHhmc19pZm9ya190ICopOwordm9pZAkJeGZzX2lleHRfZGlyZWN0X3RvX2lubGluZSh4ZnNfaWZvcmtfdCAqLCB4ZnNfZXh0bnVtX3QpOwordm9pZAkJeGZzX2lleHRfaW5saW5lX3RvX2RpcmVjdCh4ZnNfaWZvcmtfdCAqLCBpbnQpOwordm9pZAkJeGZzX2lleHRfZGVzdHJveSh4ZnNfaWZvcmtfdCAqKTsKK3hmc19ibWJ0X3JlY190CSp4ZnNfaWV4dF9ibm9fdG9fZXh0KHhmc19pZm9ya190ICosIHhmc19maWxlb2ZmX3QsIGludCAqKTsKK3hmc19leHRfaXJlY190CSp4ZnNfaWV4dF9ibm9fdG9faXJlYyh4ZnNfaWZvcmtfdCAqLCB4ZnNfZmlsZW9mZl90LCBpbnQgKik7Cit4ZnNfZXh0X2lyZWNfdAkqeGZzX2lleHRfaWR4X3RvX2lyZWMoeGZzX2lmb3JrX3QgKiwgeGZzX2V4dG51bV90ICosIGludCAqLCBpbnQpOwordm9pZAkJeGZzX2lleHRfaXJlY19pbml0KHhmc19pZm9ya190ICopOworeGZzX2V4dF9pcmVjX3QgKnhmc19pZXh0X2lyZWNfbmV3KHhmc19pZm9ya190ICosIGludCk7Cit2b2lkCQl4ZnNfaWV4dF9pcmVjX3JlbW92ZSh4ZnNfaWZvcmtfdCAqLCBpbnQpOwordm9pZAkJeGZzX2lleHRfaXJlY19jb21wYWN0KHhmc19pZm9ya190ICopOwordm9pZAkJeGZzX2lleHRfaXJlY19jb21wYWN0X3BhZ2VzKHhmc19pZm9ya190ICopOwordm9pZAkJeGZzX2lleHRfaXJlY19jb21wYWN0X2Z1bGwoeGZzX2lmb3JrX3QgKik7Cit2b2lkCQl4ZnNfaWV4dF9pcmVjX3VwZGF0ZV9leHRvZmZzKHhmc19pZm9ya190ICosIGludCwgaW50KTsKKwogI2RlZmluZSB4ZnNfaXBpbmNvdW50KGlwKQkoKHVuc2lnbmVkIGludCkgYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSkKIAogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmMKaW5kZXggNzg4OTE3ZjMuLmQ1ZGZlZGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYworKysgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpY291bnQpLAogCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoKGlvLT5pb19uZXdfc2l6ZSA+PiAzMikgJiAweGZmZmZmZmZmKSksCiAJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKShpby0+aW9fbmV3X3NpemUgJiAweGZmZmZmZmZmKSksCi0JCSh2b2lkICopTlVMTCwKKwkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpY3VycmVudF9waWQoKSksCiAJCSh2b2lkICopTlVMTCwKIAkJKHZvaWQgKilOVUxMLAogCQkodm9pZCAqKU5VTEwsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCBjNTk0NTBlLi4zMjI0N2I2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTU2Miw3ICs1NjIsOCBAQAogCQkJCQkJaWYgKGJwKQogCQkJCQkJCXhmc19idWZfcmVsc2UoYnApOwogCQkJCQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLAotCQkJCQkJCQkgICZkaXAsICZicCwgYm5vKTsKKwkJCQkJCQkJJmRpcCwgJmJwLCBibm8sCisJCQkJCQkJCVhGU19JTUFQX0JVTEtTVEFUKTsKIAkJCQkJCWlmICghZXJyb3IpCiAJCQkJCQkJY2x1c3RpZHggPSBpcC0+aV9ib2Zmc2V0IC8gbXAtPm1fc2Iuc2JfaW5vZGVzaXplOwogCQkJCQkJa21lbV96b25lX2ZyZWUoeGZzX2lub2RlX3pvbmUsIGlwKTsKQEAgLTU3MCw2ICs1NzEsOCBAQAogCQkJCQkJCQkgICBtcCwgWEZTX0VSUlRBR19CVUxLU1RBVF9SRUFEX0NIVU5LLAogCQkJCQkJCQkgICBYRlNfUkFORE9NX0JVTEtTVEFUX1JFQURfQ0hVTkspKSB7CiAJCQkJCQkJYnAgPSBOVUxMOworCQkJCQkJCXVibGVmdCA9IDA7CisJCQkJCQkJcnZhbCA9IGVycm9yOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggN2Q0NmNiZC4uYWRkMTNmNSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtMzI0OSw3ICszMjQ5LDcgQEAKIAkJCQkJICogbmV4dCBpbm9kZSBpbiB0aGUgYnVja2V0LgogCQkJCQkgKi8KIAkJCQkJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIE5VTEwsIGlwLCAmZGlwLAotCQkJCQkJCSZpYnAsIDApOworCQkJCQkJCSZpYnAsIDAsIDApOwogCQkJCQlBU1NFUlQoZXJyb3IgfHwgKGRpcCAhPSBOVUxMKSk7CiAJCQkJfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21vdW50LmMKaW5kZXggNjIxODhlYS4uMjBlOGFiYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5jCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuYwpAQCAtNTEsMTEgKzUxLDMyIEBACiBTVEFUSUMgdm9pZAl4ZnNfdXVpZF91bm1vdW50KHhmc19tb3VudF90ICptcCk7CiBTVEFUSUMgdm9pZAl4ZnNfdW5tb3VudGZzX3dhaXQoeGZzX21vdW50X3QgKik7CiAKKworI2lmZGVmIEhBVkVfUEVSQ1BVX1NCCitTVEFUSUMgdm9pZAl4ZnNfaWNzYl9kZXN0cm95X2NvdW50ZXJzKHhmc19tb3VudF90ICopOworU1RBVElDIHZvaWQJeGZzX2ljc2JfYmFsYW5jZV9jb3VudGVyKHhmc19tb3VudF90ICosIHhmc19zYl9maWVsZF90LCBpbnQpOworU1RBVElDIHZvaWQJeGZzX2ljc2Jfc3luY19jb3VudGVycyh4ZnNfbW91bnRfdCAqKTsKK1NUQVRJQyBpbnQJeGZzX2ljc2JfbW9kaWZ5X2NvdW50ZXJzKHhmc19tb3VudF90ICosIHhmc19zYl9maWVsZF90LAorCQkJCQkJaW50LCBpbnQpOworU1RBVElDIGludAl4ZnNfaWNzYl9tb2RpZnlfY291bnRlcnNfbG9ja2VkKHhmc19tb3VudF90ICosIHhmc19zYl9maWVsZF90LAorCQkJCQkJaW50LCBpbnQpOworU1RBVElDIGludAl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIoeGZzX21vdW50X3QgKiwgeGZzX3NiX2ZpZWxkX3QpOworCisjZWxzZQorCisjZGVmaW5lIHhmc19pY3NiX2Rlc3Ryb3lfY291bnRlcnMobXApCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIGEsIGIpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHhmc19pY3NiX3N5bmNfY291bnRlcnMobXApCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB4ZnNfaWNzYl9tb2RpZnlfY291bnRlcnMobXAsIGEsIGIsIGMpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHhmc19pY3NiX21vZGlmeV9jb3VudGVyc19sb2NrZWQobXAsIGEsIGIsIGMpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotICAgIHNob3J0IG9mZnNldDsKLSAgICBzaG9ydCB0eXBlOyAgICAgLyogMCA9IGludGVnZXIKLQkJKiAxID0gYmluYXJ5IC8gc3RyaW5nIChubyB0cmFuc2xhdGlvbikKLQkJKi8KKwlzaG9ydCBvZmZzZXQ7CisJc2hvcnQgdHlwZTsJLyogMCA9IGludGVnZXIKKwkJCSAqIDEgPSBiaW5hcnkgLyBzdHJpbmcgKG5vIHRyYW5zbGF0aW9uKQorCQkJICovCiB9IHhmc19zYl9pbmZvW10gPSB7CiAgICAgeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfbWFnaWNudW0pLCAgIDAgfSwKICAgICB7IG9mZnNldG9mKHhmc19zYl90LCBzYl9ibG9ja3NpemUpLCAgMCB9LApAQCAtMTEzLDcgKzEzNCwxMSBAQAogewogCXhmc19tb3VudF90ICptcDsKIAotCW1wID0ga21lbV96YWxsb2Moc2l6ZW9mKCptcCksIEtNX1NMRUVQKTsKKwltcCA9IGttZW1femFsbG9jKHNpemVvZih4ZnNfbW91bnRfdCksIEtNX1NMRUVQKTsKKworCWlmICh4ZnNfaWNzYl9pbml0X2NvdW50ZXJzKG1wKSkgeworCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfTk9fUEVSQ1BVX1NCOworCX0KIAogCUFJTF9MT0NLSU5JVCgmbXAtPm1fYWlsX2xvY2ssICJ4ZnNfYWlsIik7CiAJc3BpbmxvY2tfaW5pdCgmbXAtPm1fc2JfbG9jaywgInhmc19zYiIpOwpAQCAtMTM2LDggKzE2MSw4IEBACiAgKi8KIHZvaWQKIHhmc19tb3VudF9mcmVlKAotCXhmc19tb3VudF90ICptcCwKLQlpbnQJICAgIHJlbW92ZV9iaHYpCisJeGZzX21vdW50X3QJKm1wLAorCWludAkJcmVtb3ZlX2JodikKIHsKIAlpZiAobXAtPm1faWhhc2gpCiAJCXhmc19paGFzaF9mcmVlKG1wKTsKQEAgLTE3Nyw2ICsyMDIsNyBAQAogCQlWRlNfUkVNT1ZFQkhWKHZmc3AsICZtcC0+bV9iaHYpOwogCX0KIAorCXhmc19pY3NiX2Rlc3Ryb3lfY291bnRlcnMobXApOwogCWttZW1fZnJlZShtcCwgc2l6ZW9mKHhmc19tb3VudF90KSk7CiB9CiAKQEAgLTI0Miw5ICsyNjgsMTIgQEAKIAkgICAgc2JwLT5zYl9ibG9ja2xvZyA+IFhGU19NQVhfQkxPQ0tTSVpFX0xPRwkJCXx8CiAJICAgIHNicC0+c2JfaW5vZGVzaXplIDwgWEZTX0RJTk9ERV9NSU5fU0laRQkJCXx8CiAJICAgIHNicC0+c2JfaW5vZGVzaXplID4gWEZTX0RJTk9ERV9NQVhfU0laRQkJCXx8CisJICAgIHNicC0+c2JfaW5vZGVsb2cgPCBYRlNfRElOT0RFX01JTl9MT0cJCQl8fAorCSAgICBzYnAtPnNiX2lub2RlbG9nID4gWEZTX0RJTk9ERV9NQVhfTE9HCQkJfHwKKwkgICAgKHNicC0+c2JfYmxvY2tsb2cgLSBzYnAtPnNiX2lub2RlbG9nICE9IHNicC0+c2JfaW5vcGJsb2cpCXx8CiAJICAgIChzYnAtPnNiX3JleHRzaXplICogc2JwLT5zYl9ibG9ja3NpemUgPiBYRlNfTUFYX1JURVhUU0laRSkJfHwKIAkgICAgKHNicC0+c2JfcmV4dHNpemUgKiBzYnAtPnNiX2Jsb2Nrc2l6ZSA8IFhGU19NSU5fUlRFWFRTSVpFKQl8fAotCSAgICBzYnAtPnNiX2ltYXhfcGN0ID4gMTAwKSkgeworCSAgICAoc2JwLT5zYl9pbWF4X3BjdCA+IDEwMCB8fCBzYnAtPnNiX2ltYXhfcGN0IDwgMSkpKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogU0Igc2FuaXR5IGNoZWNrIDEgZmFpbGVkIik7CiAJCVhGU19DT1JSVVBUSU9OX0VSUk9SKCJ4ZnNfbW91bnRfdmFsaWRhdGVfc2IoMykiLAogCQkJCSAgICAgWEZTX0VSUkxFVkVMX0xPVywgbXAsIHNicCk7CkBAIC01MjcsNiArNTU2LDEwIEBACiAJCUFTU0VSVChYRlNfQlVGX1ZBTFVTRU1BKGJwKSA8PSAwKTsKIAl9CiAKKwl4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIFhGU19TQlNfSUNPVU5ULCAwKTsKKwl4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIFhGU19TQlNfSUZSRUUsIDApOworCXhmc19pY3NiX2JhbGFuY2VfY291bnRlcihtcCwgWEZTX1NCU19GREJMT0NLUywgMCk7CisKIAltcC0+bV9zYl9icCA9IGJwOwogCXhmc19idWZfcmVsc2UoYnApOwogCUFTU0VSVChYRlNfQlVGX1ZBTFVTRU1BKGJwKSA+IDApOwpAQCAtMTE1NCw2ICsxMTg3LDkgQEAKIAlzYnAgPSB4ZnNfZ2V0c2IobXAsIDApOwogCWlmICghKFhGU19NVE9WRlMobXApLT52ZnNfZmxhZyAmIFZGU19SRE9OTFkgfHwKIAkJWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpKSB7CisKKwkJeGZzX2ljc2Jfc3luY19jb3VudGVycyhtcCk7CisKIAkJLyoKIAkJICogbWFyayBzaGFyZWQtcmVhZG9ubHkgaWYgZGVzaXJlZAogCQkgKi8KQEAgLTEyMjcsNyArMTI2Myw2IEBACiAKIAl4ZnNfdHJhbnNfbG9nX2J1Zih0cCwgYnAsIGZpcnN0LCBsYXN0KTsKIH0KLQogLyoKICAqIHhmc19tb2RfaW5jb3JlX3NiX3VubG9ja2VkKCkgaXMgYSB1dGlsaXR5IHJvdXRpbmUgY29tbW9uIHVzZWQgdG8gYXBwbHkKICAqIGEgZGVsdGEgdG8gYSBzcGVjaWZpZWQgZmllbGQgaW4gdGhlIGluLWNvcmUgc3VwZXJibG9jay4gIFNpbXBseQpAQCAtMTIzNyw3ICsxMjcyLDcgQEAKICAqCiAgKiBUaGUgU0JfTE9DSyBtdXN0IGJlIGhlbGQgd2hlbiB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkLgogICovCi1TVEFUSUMgaW50CitpbnQKIHhmc19tb2RfaW5jb3JlX3NiX3VubG9ja2VkKHhmc19tb3VudF90ICptcCwgeGZzX3NiX2ZpZWxkX3QgZmllbGQsCiAJCQlpbnQgZGVsdGEsIGludCByc3ZkKQogewpAQCAtMTQwNiw5ICsxNDQxLDI2IEBACiAJdW5zaWduZWQgbG9uZwlzOwogCWludAlzdGF0dXM7CiAKLQlzID0gWEZTX1NCX0xPQ0sobXApOwotCXN0YXR1cyA9IHhmc19tb2RfaW5jb3JlX3NiX3VubG9ja2VkKG1wLCBmaWVsZCwgZGVsdGEsIHJzdmQpOwotCVhGU19TQl9VTkxPQ0sobXAsIHMpOworCS8qIGNoZWNrIGZvciBwZXItY3B1IGNvdW50ZXJzICovCisJc3dpdGNoIChmaWVsZCkgeworI2lmZGVmIEhBVkVfUEVSQ1BVX1NCCisJY2FzZSBYRlNfU0JTX0lDT1VOVDoKKwljYXNlIFhGU19TQlNfSUZSRUU6CisJY2FzZSBYRlNfU0JTX0ZEQkxPQ0tTOgorCQlpZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9OT19QRVJDUFVfU0IpKSB7CisJCQlzdGF0dXMgPSB4ZnNfaWNzYl9tb2RpZnlfY291bnRlcnMobXAsIGZpZWxkLAorCQkJCQkJCWRlbHRhLCByc3ZkKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZBTExUSFJPVUdIICovCisjZW5kaWYKKwlkZWZhdWx0OgorCQlzID0gWEZTX1NCX0xPQ0sobXApOworCQlzdGF0dXMgPSB4ZnNfbW9kX2luY29yZV9zYl91bmxvY2tlZChtcCwgZmllbGQsIGRlbHRhLCByc3ZkKTsKKwkJWEZTX1NCX1VOTE9DSyhtcCwgcyk7CisJCWJyZWFrOworCX0KKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE0NDUsOCArMTQ5NywyNiBAQAogCQkgKiBmcm9tIHRoZSBsb29wIHNvIHdlJ2xsIGZhbGwgaW50byB0aGUgdW5kbyBsb29wCiAJCSAqIGJlbG93LgogCQkgKi8KLQkJc3RhdHVzID0geGZzX21vZF9pbmNvcmVfc2JfdW5sb2NrZWQobXAsIG1zYnAtPm1zYl9maWVsZCwKLQkJCQkJCSAgICBtc2JwLT5tc2JfZGVsdGEsIHJzdmQpOworCQlzd2l0Y2ggKG1zYnAtPm1zYl9maWVsZCkgeworI2lmZGVmIEhBVkVfUEVSQ1BVX1NCCisJCWNhc2UgWEZTX1NCU19JQ09VTlQ6CisJCWNhc2UgWEZTX1NCU19JRlJFRToKKwkJY2FzZSBYRlNfU0JTX0ZEQkxPQ0tTOgorCQkJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9fUEVSQ1BVX1NCKSkgeworCQkJCXN0YXR1cyA9IHhmc19pY3NiX21vZGlmeV9jb3VudGVyc19sb2NrZWQobXAsCisJCQkJCQkJbXNicC0+bXNiX2ZpZWxkLAorCQkJCQkJCW1zYnAtPm1zYl9kZWx0YSwgcnN2ZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBGQUxMVEhST1VHSCAqLworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlzdGF0dXMgPSB4ZnNfbW9kX2luY29yZV9zYl91bmxvY2tlZChtcCwKKwkJCQkJCW1zYnAtPm1zYl9maWVsZCwKKwkJCQkJCW1zYnAtPm1zYl9kZWx0YSwgcnN2ZCk7CisJCQlicmVhazsKKwkJfQorCiAJCWlmIChzdGF0dXMgIT0gMCkgewogCQkJYnJlYWs7CiAJCX0KQEAgLTE0NjMsOCArMTUzMywyOCBAQAogCWlmIChzdGF0dXMgIT0gMCkgewogCQltc2JwLS07CiAJCXdoaWxlIChtc2JwID49IG1zYikgewotCQkJc3RhdHVzID0geGZzX21vZF9pbmNvcmVfc2JfdW5sb2NrZWQobXAsCi0JCQkJICAgIG1zYnAtPm1zYl9maWVsZCwgLShtc2JwLT5tc2JfZGVsdGEpLCByc3ZkKTsKKwkJCXN3aXRjaCAobXNicC0+bXNiX2ZpZWxkKSB7CisjaWZkZWYgSEFWRV9QRVJDUFVfU0IKKwkJCWNhc2UgWEZTX1NCU19JQ09VTlQ6CisJCQljYXNlIFhGU19TQlNfSUZSRUU6CisJCQljYXNlIFhGU19TQlNfRkRCTE9DS1M6CisJCQkJaWYgKCEobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9fUEVSQ1BVX1NCKSkgeworCQkJCQlzdGF0dXMgPQorCQkJCQkgICAgeGZzX2ljc2JfbW9kaWZ5X2NvdW50ZXJzX2xvY2tlZChtcCwKKwkJCQkJCQltc2JwLT5tc2JfZmllbGQsCisJCQkJCQkJLShtc2JwLT5tc2JfZGVsdGEpLAorCQkJCQkJCXJzdmQpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlzdGF0dXMgPSB4ZnNfbW9kX2luY29yZV9zYl91bmxvY2tlZChtcCwKKwkJCQkJCQltc2JwLT5tc2JfZmllbGQsCisJCQkJCQkJLShtc2JwLT5tc2JfZGVsdGEpLAorCQkJCQkJCXJzdmQpOworCQkJCWJyZWFrOworCQkJfQogCQkJQVNTRVJUKHN0YXR1cyA9PSAwKTsKIAkJCW1zYnAtLTsKIAkJfQpAQCAtMTU3NywzICsxNjY3LDUyNSBAQAogCXhmc19tb2Rfc2IodHAsIGZpZWxkcyk7CiAJeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCwgTlVMTCk7CiB9CisKKworI2lmZGVmIEhBVkVfUEVSQ1BVX1NCCisvKgorICogUGVyLWNwdSBpbmNvcmUgc3VwZXJibG9jayBjb3VudGVycworICoKKyAqIFNpbXBsZSBjb25jZXB0LCBkaWZmaWN1bHQgaW1wbGVtZW50YXRpb24KKyAqCisgKiBCYXNpY2FsbHksIHJlcGxhY2UgdGhlIGluY29yZSBzdXBlcmJsb2NrIGNvdW50ZXJzIHdpdGggYSBkaXN0cmlidXRlZCBwZXIgY3B1CisgKiBjb3VudGVyIGZvciBjb250ZW5kZWQgZmllbGRzIChlLmcuICBmcmVlIGJsb2NrIGNvdW50KS4KKyAqCisgKiBEaWZmaWN1bHRpZXMgYXJpc2UgaW4gdGhhdCB0aGUgaW5jb3JlIHNiIGlzIHVzZWQgZm9yIEVOT1NQQyBjaGVja2luZywgYW5kCisgKiBoZW5jZSBuZWVkcyB0byBiZSBhY2N1cmF0ZWx5IHJlYWQgd2hlbiB3ZSBhcmUgcnVubmluZyBsb3cgb24gc3BhY2UuIEhlbmNlCisgKiB0aGVyZSBpcyBhIG1ldGhvZCB0byBlbmFibGUgYW5kIGRpc2FibGUgdGhlIHBlci1jcHUgY291bnRlcnMgYmFzZWQgb24gaG93CisgKiBtdWNoICJzdHVmZiIgaXMgYXZhaWxhYmxlIGluIHRoZW0uCisgKgorICogQmFzaWNhbGx5LCBhIGNvdW50ZXIgaXMgZW5hYmxlZCBpZiB0aGVyZSBpcyBlbm91Z2ggZnJlZSByZXNvdXJjZSB0byBqdXN0aWZ5CisgKiBydW5uaW5nIGEgcGVyLWNwdSBmYXN0LXBhdGguIElmIHRoZSBwZXItY3B1IGNvdW50ZXIgcnVucyBvdXQgKGkuZS4gYSBsb2NhbAorICogRU5PU1BDKSwgdGhlbiB3ZSBkaXNhYmxlIHRoZSBjb3VudGVycyB0byBzeW5jaHJvbmlzZSBhbGwgY2FsbGVycyBhbmQKKyAqIHJlLWRpc3RyaWJ1dGUgdGhlIGF2YWlsYWJsZSByZXNvdXJjZXMuCisgKgorICogSWYsIG9uY2Ugd2UgcmVkaXN0cmlidXRlZCB0aGUgYXZhaWxhYmxlIHJlc291cmNlcywgd2Ugc3RpbGwgZ2V0IGEgZmFpbHVyZSwKKyAqIHdlIGRpc2FibGUgdGhlIHBlci1jcHUgY291bnRlciBhbmQgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoLgorICoKKyAqIFRoZSBzbG93IHBhdGggaXMgdGhlIGN1cnJlbnQgeGZzX21vZF9pbmNvcmVfc2IoKSBmdW5jdGlvbi4gIFRoaXMgbWVhbnMgdGhhdAorICogd2hlbiB3ZSBkaXNhYmxlIGEgcGVyLWNwdSBjb3VudGVyLCB3ZSBuZWVkIHRvIGRyYWluIGl0J3MgcmVzb3VyY2VzIGJhY2sgdG8KKyAqIHRoZSBnbG9iYWwgc3VwZXJibG9jay4gV2UgZG8gdGhpcyBhZnRlciBkaXNhYmxpbmcgdGhlIGNvdW50ZXIgdG8gcHJldmVudAorICogbW9yZSB0aHJlYWRzIGZyb20gcXVldWVpbmcgdXAgb24gdGhlIGNvdW50ZXIuCisgKgorICogRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCB3ZSBzdGlsbCBuZWVkIGEgbG9jayBpbiB0aGUgZmFzdCBwYXRoIHRvIGVuYWJsZQorICogc3luY2hyb25pc2F0aW9uIGJldHdlZW4gdGhlIGdsb2JhbCBjb3VudGVycyBhbmQgdGhlIHBlci1jcHUgY291bnRlcnMuIFRoaXMKKyAqIGlzIG5vdCBhIHByb2JsZW0gYmVjYXVzZSB0aGUgbG9jayB3aWxsIGJlIGxvY2FsIHRvIGEgQ1BVIGFsbW9zdCBhbGwgdGhlIHRpbWUKKyAqIGFuZCBoYXZlIGxpdHRsZSBjb250ZW50aW9uIGV4Y2VwdCB3aGVuIHdlIGdldCB0byBFTk9TUEMgY29uZGl0aW9ucy4KKyAqCisgKiBCYXNpY2FsbHksIHRoaXMgbG9jayBiZWNvbWVzIGEgYmFycmllciB0aGF0IGVuYWJsZXMgdXMgdG8gbG9jayBvdXQgdGhlIGZhc3QKKyAqIHBhdGggd2hpbGUgd2UgZG8gdGhpbmdzIGxpa2UgZW5hYmxpbmcgYW5kIGRpc2FibGluZyBjb3VudGVycyBhbmQKKyAqIHN5bmNocm9uaXNpbmcgdGhlIGNvdW50ZXJzLgorICoKKyAqIExvY2tpbmcgcnVsZXM6CisgKgorICogCTEuIFhGU19TQl9MT0NLKCkgYmVmb3JlIHBpY2tpbmcgdXAgcGVyLWNwdSBsb2NrcworICogCTIuIHBlci1jcHUgbG9ja3MgYWx3YXlzIHBpY2tlZCB1cCB2aWEgZm9yX2VhY2hfb25saW5lX2NwdSgpIG9yZGVyCisgKiAJMy4gYWNjdXJhdGUgY291bnRlciBzeW5jIHJlcXVpcmVzIFhGU19TQl9MT0NLICsgcGVyIGNwdSBsb2NrcworICogCTQuIG1vZGlmeWluZyBwZXItY3B1IGNvdW50ZXJzIHJlcXVpcmVzIGhvbGRpbmcgcGVyLWNwdSBsb2NrCisgKiAJNS4gbW9kaWZ5aW5nIGdsb2JhbCBjb3VudGVycyByZXF1aXJlcyBob2xkaW5nIFhGU19TQl9MT0NLCisgKgk2LiBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBjb3VudGVyIHJlcXVpcmVzIGhvbGRpbmcgdGhlIFhGU19TQl9MT0NLCisgKgkgICBhbmQgX25vbmVfIG9mIHRoZSBwZXItY3B1IGxvY2tzLgorICoKKyAqIERpc2FibGVkIGNvdW50ZXJzIGFyZSBvbmx5IGV2ZXIgcmUtZW5hYmxlZCBieSBhIGJhbGFuY2Ugb3BlcmF0aW9uCisgKiB0aGF0IHJlc3VsdHMgaW4gbW9yZSBmcmVlIHJlc291cmNlcyBwZXIgQ1BVIHRoYW4gYSBnaXZlbiB0aHJlc2hvbGQuCisgKiBUbyBlbnN1cmUgY291bnRlcnMgZG9uJ3QgcmVtYWluIGRpc2FibGVkLCB0aGV5IGFyZSByZWJhbGFuY2VkIHdoZW4KKyAqIHRoZSBnbG9iYWwgcmVzb3VyY2UgZ29lcyBhYm92ZSBhIGhpZ2hlciB0aHJlc2hvbGQgKGkuZS4gc29tZSBoeXN0ZXJlc2lzCisgKiBpcyBwcmVzZW50IHRvIHByZXZlbnQgdGhyYXNoaW5nKS4KKyAqLworCisvKgorICogaG90LXBsdWcgQ1BVIG5vdGlmaWVyIHN1cHBvcnQuCisgKgorICogV2UgY2Fubm90IHVzZSB0aGUgaG90Y3B1X3JlZ2lzdGVyKCkgZnVuY3Rpb24gYmVjYXVzZSBpdCBkb2VzCisgKiBub3QgYWxsb3cgbm90aWZpZXIgaW5zdGFuY2VzLiBXZSBuZWVkIGEgbm90aWZpZXIgcGVyIGZpbGVzeXN0ZW0KKyAqIGFzIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB0aGUgZmlsZXN5c3RlbSB0byBiYWxhbmNlCisgKiB0aGUgY291bnRlcnMgb3V0LiBUaGlzIGlzIGFjaGVpdmVkIGJ5IGhhdmluZyBhIG5vdGlmaWVyIGJsb2NrCisgKiBlbWJlZGRlZCBpbiB0aGUgeGZzX21vdW50X3QgYW5kIGRvaW5nIHBvaW50ZXIgbWFnaWMgdG8gZ2V0IHRoZQorICogbW91bnQgcG9pbnRlciBmcm9tIHRoZSBub3RpZmllciBibG9jayBhZGRyZXNzLgorICovCitTVEFUSUMgaW50Cit4ZnNfaWNzYl9jcHVfbm90aWZ5KAorCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCXZvaWQgKmhjcHUpCit7CisJeGZzX2ljc2JfY250c190ICpjbnRwOworCXhmc19tb3VudF90CSptcDsKKwlpbnQJCXM7CisKKwltcCA9ICh4ZnNfbW91bnRfdCAqKWNvbnRhaW5lcl9vZihuZmIsIHhmc19tb3VudF90LCBtX2ljc2Jfbm90aWZpZXIpOworCWNudHAgPSAoeGZzX2ljc2JfY250c190ICopCisJCQlwZXJfY3B1X3B0cihtcC0+bV9zYl9jbnRzLCAodW5zaWduZWQgbG9uZyloY3B1KTsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJCS8qIEVhc3kgQ2FzZSAtIGluaXRpYWxpemUgdGhlIGFyZWEgYW5kIGxvY2tzLCBhbmQKKwkJICogdGhlbiByZWJhbGFuY2Ugd2hlbiBvbmxpbmUgZG9lcyBldmVyeXRoaW5nIGVsc2UgZm9yIHVzLiAqLworCQltZW1zZXQoY250cCwgMCwgc2l6ZW9mKHhmc19pY3NiX2NudHNfdCkpOworCQlicmVhazsKKwljYXNlIENQVV9PTkxJTkU6CisJCXhmc19pY3NiX2JhbGFuY2VfY291bnRlcihtcCwgWEZTX1NCU19JQ09VTlQsIDApOworCQl4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIFhGU19TQlNfSUZSRUUsIDApOworCQl4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIobXAsIFhGU19TQlNfRkRCTE9DS1MsIDApOworCQlicmVhazsKKwljYXNlIENQVV9ERUFEOgorCQkvKiBEaXNhYmxlIGFsbCB0aGUgY291bnRlcnMsIHRoZW4gZm9sZCB0aGUgZGVhZCBjcHUncworCQkgKiBjb3VudCBpbnRvIHRoZSB0b3RhbCBvbiB0aGUgZ2xvYmFsIHN1cGVyYmxvY2sgYW5kCisJCSAqIHJlLWVuYWJsZSB0aGUgY291bnRlcnMuICovCisJCXMgPSBYRlNfU0JfTE9DSyhtcCk7CisJCXhmc19pY3NiX2Rpc2FibGVfY291bnRlcihtcCwgWEZTX1NCU19JQ09VTlQpOworCQl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIobXAsIFhGU19TQlNfSUZSRUUpOworCQl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIobXAsIFhGU19TQlNfRkRCTE9DS1MpOworCisJCW1wLT5tX3NiLnNiX2ljb3VudCArPSBjbnRwLT5pY3NiX2ljb3VudDsKKwkJbXAtPm1fc2Iuc2JfaWZyZWUgKz0gY250cC0+aWNzYl9pZnJlZTsKKwkJbXAtPm1fc2Iuc2JfZmRibG9ja3MgKz0gY250cC0+aWNzYl9mZGJsb2NrczsKKworCQltZW1zZXQoY250cCwgMCwgc2l6ZW9mKHhmc19pY3NiX2NudHNfdCkpOworCisJCXhmc19pY3NiX2JhbGFuY2VfY291bnRlcihtcCwgWEZTX1NCU19JQ09VTlQsIFhGU19JQ1NCX1NCX0xPQ0tFRCk7CisJCXhmc19pY3NiX2JhbGFuY2VfY291bnRlcihtcCwgWEZTX1NCU19JRlJFRSwgWEZTX0lDU0JfU0JfTE9DS0VEKTsKKwkJeGZzX2ljc2JfYmFsYW5jZV9jb3VudGVyKG1wLCBYRlNfU0JTX0ZEQkxPQ0tTLCBYRlNfSUNTQl9TQl9MT0NLRUQpOworCQlYRlNfU0JfVU5MT0NLKG1wLCBzKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworaW50Cit4ZnNfaWNzYl9pbml0X2NvdW50ZXJzKAorCXhmc19tb3VudF90CSptcCkKK3sKKwl4ZnNfaWNzYl9jbnRzX3QgKmNudHA7CisJaW50CQlpOworCisJbXAtPm1fc2JfY250cyA9IGFsbG9jX3BlcmNwdSh4ZnNfaWNzYl9jbnRzX3QpOworCWlmIChtcC0+bV9zYl9jbnRzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbXAtPm1faWNzYl9ub3RpZmllci5ub3RpZmllcl9jYWxsID0geGZzX2ljc2JfY3B1X25vdGlmeTsKKwltcC0+bV9pY3NiX25vdGlmaWVyLnByaW9yaXR5ID0gMDsKKwlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJm1wLT5tX2ljc2Jfbm90aWZpZXIpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWNudHAgPSAoeGZzX2ljc2JfY250c190ICopcGVyX2NwdV9wdHIobXAtPm1fc2JfY250cywgaSk7CisJCW1lbXNldChjbnRwLCAwLCBzaXplb2YoeGZzX2ljc2JfY250c190KSk7CisJfQorCS8qCisJICogc3RhcnQgd2l0aCBhbGwgY291bnRlcnMgZGlzYWJsZWQgc28gdGhhdCB0aGUKKwkgKiBpbml0aWFsIGJhbGFuY2Uga2lja3MgdXMgb2ZmIGNvcnJlY3RseQorCSAqLworCW1wLT5tX2ljc2JfY291bnRlcnMgPSAtMTsKKwlyZXR1cm4gMDsKK30KKworU1RBVElDIHZvaWQKK3hmc19pY3NiX2Rlc3Ryb3lfY291bnRlcnMoCisJeGZzX21vdW50X3QJKm1wKQoreworCWlmIChtcC0+bV9zYl9jbnRzKSB7CisJCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZtcC0+bV9pY3NiX25vdGlmaWVyKTsKKwkJZnJlZV9wZXJjcHUobXAtPm1fc2JfY250cyk7CisJfQorfQorCitTVEFUSUMgaW5saW5lIHZvaWQKK3hmc19pY3NiX2xvY2tfY250cigKKwl4ZnNfaWNzYl9jbnRzX3QJKmljc2JwKQoreworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KFhGU19JQ1NCX0ZMQUdfTE9DSywgJmljc2JwLT5pY3NiX2ZsYWdzKSkgeworCQluZGVsYXkoMTAwMCk7CisJfQorfQorCitTVEFUSUMgaW5saW5lIHZvaWQKK3hmc19pY3NiX3VubG9ja19jbnRyKAorCXhmc19pY3NiX2NudHNfdAkqaWNzYnApCit7CisJY2xlYXJfYml0KFhGU19JQ1NCX0ZMQUdfTE9DSywgJmljc2JwLT5pY3NiX2ZsYWdzKTsKK30KKworCitTVEFUSUMgaW5saW5lIHZvaWQKK3hmc19pY3NiX2xvY2tfYWxsX2NvdW50ZXJzKAorCXhmc19tb3VudF90CSptcCkKK3sKKwl4ZnNfaWNzYl9jbnRzX3QgKmNudHA7CisJaW50CQlpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWNudHAgPSAoeGZzX2ljc2JfY250c190ICopcGVyX2NwdV9wdHIobXAtPm1fc2JfY250cywgaSk7CisJCXhmc19pY3NiX2xvY2tfY250cihjbnRwKTsKKwl9Cit9CisKK1NUQVRJQyBpbmxpbmUgdm9pZAoreGZzX2ljc2JfdW5sb2NrX2FsbF9jb3VudGVycygKKwl4ZnNfbW91bnRfdAkqbXApCit7CisJeGZzX2ljc2JfY250c190ICpjbnRwOworCWludAkJaTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQljbnRwID0gKHhmc19pY3NiX2NudHNfdCAqKXBlcl9jcHVfcHRyKG1wLT5tX3NiX2NudHMsIGkpOworCQl4ZnNfaWNzYl91bmxvY2tfY250cihjbnRwKTsKKwl9Cit9CisKK1NUQVRJQyB2b2lkCit4ZnNfaWNzYl9jb3VudCgKKwl4ZnNfbW91bnRfdAkqbXAsCisJeGZzX2ljc2JfY250c190CSpjbnQsCisJaW50CQlmbGFncykKK3sKKwl4ZnNfaWNzYl9jbnRzX3QgKmNudHA7CisJaW50CQlpOworCisJbWVtc2V0KGNudCwgMCwgc2l6ZW9mKHhmc19pY3NiX2NudHNfdCkpOworCisJaWYgKCEoZmxhZ3MgJiBYRlNfSUNTQl9MQVpZX0NPVU5UKSkKKwkJeGZzX2ljc2JfbG9ja19hbGxfY291bnRlcnMobXApOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCWNudHAgPSAoeGZzX2ljc2JfY250c190ICopcGVyX2NwdV9wdHIobXAtPm1fc2JfY250cywgaSk7CisJCWNudC0+aWNzYl9pY291bnQgKz0gY250cC0+aWNzYl9pY291bnQ7CisJCWNudC0+aWNzYl9pZnJlZSArPSBjbnRwLT5pY3NiX2lmcmVlOworCQljbnQtPmljc2JfZmRibG9ja3MgKz0gY250cC0+aWNzYl9mZGJsb2NrczsKKwl9CisKKwlpZiAoIShmbGFncyAmIFhGU19JQ1NCX0xBWllfQ09VTlQpKQorCQl4ZnNfaWNzYl91bmxvY2tfYWxsX2NvdW50ZXJzKG1wKTsKK30KKworU1RBVElDIGludAoreGZzX2ljc2JfY291bnRlcl9kaXNhYmxlZCgKKwl4ZnNfbW91bnRfdAkqbXAsCisJeGZzX3NiX2ZpZWxkX3QJZmllbGQpCit7CisJQVNTRVJUKChmaWVsZCA+PSBYRlNfU0JTX0lDT1VOVCkgJiYgKGZpZWxkIDw9IFhGU19TQlNfRkRCTE9DS1MpKTsKKwlyZXR1cm4gdGVzdF9iaXQoZmllbGQsICZtcC0+bV9pY3NiX2NvdW50ZXJzKTsKK30KKworU1RBVElDIGludAoreGZzX2ljc2JfZGlzYWJsZV9jb3VudGVyKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfc2JfZmllbGRfdAlmaWVsZCkKK3sKKwl4ZnNfaWNzYl9jbnRzX3QJY250OworCisJQVNTRVJUKChmaWVsZCA+PSBYRlNfU0JTX0lDT1VOVCkgJiYgKGZpZWxkIDw9IFhGU19TQlNfRkRCTE9DS1MpKTsKKworCXhmc19pY3NiX2xvY2tfYWxsX2NvdW50ZXJzKG1wKTsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoZmllbGQsICZtcC0+bV9pY3NiX2NvdW50ZXJzKSkgeworCQkvKiBkcmFpbiBiYWNrIHRvIHN1cGVyYmxvY2sgKi8KKworCQl4ZnNfaWNzYl9jb3VudChtcCwgJmNudCwgWEZTX0lDU0JfU0JfTE9DS0VEfFhGU19JQ1NCX0xBWllfQ09VTlQpOworCQlzd2l0Y2goZmllbGQpIHsKKwkJY2FzZSBYRlNfU0JTX0lDT1VOVDoKKwkJCW1wLT5tX3NiLnNiX2ljb3VudCA9IGNudC5pY3NiX2ljb3VudDsKKwkJCWJyZWFrOworCQljYXNlIFhGU19TQlNfSUZSRUU6CisJCQltcC0+bV9zYi5zYl9pZnJlZSA9IGNudC5pY3NiX2lmcmVlOworCQkJYnJlYWs7CisJCWNhc2UgWEZTX1NCU19GREJMT0NLUzoKKwkJCW1wLT5tX3NiLnNiX2ZkYmxvY2tzID0gY250Lmljc2JfZmRibG9ja3M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJfQorCisJeGZzX2ljc2JfdW5sb2NrX2FsbF9jb3VudGVycyhtcCk7CisKKwlyZXR1cm4gMDsKK30KKworU1RBVElDIHZvaWQKK3hmc19pY3NiX2VuYWJsZV9jb3VudGVyKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfc2JfZmllbGRfdAlmaWVsZCwKKwl1aW50NjRfdAljb3VudCwKKwl1aW50NjRfdAlyZXNpZCkKK3sKKwl4ZnNfaWNzYl9jbnRzX3QJKmNudHA7CisJaW50CQlpOworCisJQVNTRVJUKChmaWVsZCA+PSBYRlNfU0JTX0lDT1VOVCkgJiYgKGZpZWxkIDw9IFhGU19TQlNfRkRCTE9DS1MpKTsKKworCXhmc19pY3NiX2xvY2tfYWxsX2NvdW50ZXJzKG1wKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJY250cCA9IHBlcl9jcHVfcHRyKG1wLT5tX3NiX2NudHMsIGkpOworCQlzd2l0Y2ggKGZpZWxkKSB7CisJCWNhc2UgWEZTX1NCU19JQ09VTlQ6CisJCQljbnRwLT5pY3NiX2ljb3VudCA9IGNvdW50ICsgcmVzaWQ7CisJCQlicmVhazsKKwkJY2FzZSBYRlNfU0JTX0lGUkVFOgorCQkJY250cC0+aWNzYl9pZnJlZSA9IGNvdW50ICsgcmVzaWQ7CisJCQlicmVhazsKKwkJY2FzZSBYRlNfU0JTX0ZEQkxPQ0tTOgorCQkJY250cC0+aWNzYl9mZGJsb2NrcyA9IGNvdW50ICsgcmVzaWQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwkJcmVzaWQgPSAwOworCX0KKwljbGVhcl9iaXQoZmllbGQsICZtcC0+bV9pY3NiX2NvdW50ZXJzKTsKKwl4ZnNfaWNzYl91bmxvY2tfYWxsX2NvdW50ZXJzKG1wKTsKK30KKworU1RBVElDIHZvaWQKK3hmc19pY3NiX3N5bmNfY291bnRlcnNfaW50KAorCXhmc19tb3VudF90CSptcCwKKwlpbnQJCWZsYWdzKQoreworCXhmc19pY3NiX2NudHNfdAljbnQ7CisJaW50CQlzOworCisJLyogUGFzcyAxOiBsb2NrIGFsbCBjb3VudGVycyAqLworCWlmICgoZmxhZ3MgJiBYRlNfSUNTQl9TQl9MT0NLRUQpID09IDApCisJCXMgPSBYRlNfU0JfTE9DSyhtcCk7CisKKwl4ZnNfaWNzYl9jb3VudChtcCwgJmNudCwgZmxhZ3MpOworCisJLyogU3RlcCAzOiB1cGRhdGUgbXAtPm1fc2IgZmllbGRzICovCisJaWYgKCF4ZnNfaWNzYl9jb3VudGVyX2Rpc2FibGVkKG1wLCBYRlNfU0JTX0lDT1VOVCkpCisJCW1wLT5tX3NiLnNiX2ljb3VudCA9IGNudC5pY3NiX2ljb3VudDsKKwlpZiAoIXhmc19pY3NiX2NvdW50ZXJfZGlzYWJsZWQobXAsIFhGU19TQlNfSUZSRUUpKQorCQltcC0+bV9zYi5zYl9pZnJlZSA9IGNudC5pY3NiX2lmcmVlOworCWlmICgheGZzX2ljc2JfY291bnRlcl9kaXNhYmxlZChtcCwgWEZTX1NCU19GREJMT0NLUykpCisJCW1wLT5tX3NiLnNiX2ZkYmxvY2tzID0gY250Lmljc2JfZmRibG9ja3M7CisKKwlpZiAoKGZsYWdzICYgWEZTX0lDU0JfU0JfTE9DS0VEKSA9PSAwKQorCQlYRlNfU0JfVU5MT0NLKG1wLCBzKTsKK30KKworLyoKKyAqIEFjY3VyYXRlIHVwZGF0ZSBvZiBwZXItY3B1IGNvdW50ZXJzIHRvIGluY29yZSBzdXBlcmJsb2NrCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzKAorCXhmc19tb3VudF90CSptcCkKK3sKKwl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzX2ludChtcCwgMCk7Cit9CisKKy8qCisgKiBsYXp5IGFkZGl0aW9uIHVzZWQgZm9yIHRoaW5ncyBsaWtlIGRmLCBiYWNrZ3JvdW5kIHNiIHN5bmNzLCBldGMKKyAqLwordm9pZAoreGZzX2ljc2Jfc3luY19jb3VudGVyc19sYXp5KAorCXhmc19tb3VudF90CSptcCkKK3sKKwl4ZnNfaWNzYl9zeW5jX2NvdW50ZXJzX2ludChtcCwgWEZTX0lDU0JfTEFaWV9DT1VOVCk7Cit9CisKKy8qCisgKiBCYWxhbmNlIGFuZCBlbmFibGUvZGlzYWJsZSBjb3VudGVycyBhcyBuZWNlc3NhcnkuCisgKgorICogVGhyZXNob2xkcyBmb3IgcmUtZW5hYmxpbmcgY291bnRlcnMgYXJlIHNvbWV3aGF0IG1hZ2ljLgorICogaW5vZGUgY291bnRzIGFyZSBjaG9zZW4gdG8gYmUgdGhlIHNhbWUgbnVtYmVyIGFzIHNpbmdsZQorICogb24gZGlzayBhbGxvY2F0aW9uIGNodW5rIHBlciBDUFUsIGFuZCBmcmVlIGJsb2NrcyBpcworICogc29tZXRoaW5nIGZhciBlbm91Z2ggemVybyB0aGF0IHdlIGFyZW4ndCBnb2luZyB0aHJhc2gKKyAqIHdoZW4gd2UgZ2V0IG5lYXIgRU5PU1BDLgorICovCisjZGVmaW5lIFhGU19JQ1NCX0lOT19DTlRSX1JFRU5BQkxFCTY0CisjZGVmaW5lIFhGU19JQ1NCX0ZEQkxLX0NOVFJfUkVFTkFCTEUJNTEyCitTVEFUSUMgdm9pZAoreGZzX2ljc2JfYmFsYW5jZV9jb3VudGVyKAorCXhmc19tb3VudF90CSptcCwKKwl4ZnNfc2JfZmllbGRfdCAgZmllbGQsCisJaW50CQlmbGFncykKK3sKKwl1aW50NjRfdAljb3VudCwgcmVzaWQgPSAwOworCWludAkJd2VpZ2h0ID0gbnVtX29ubGluZV9jcHVzKCk7CisJaW50CQlzOworCisJaWYgKCEoZmxhZ3MgJiBYRlNfSUNTQl9TQl9MT0NLRUQpKQorCQlzID0gWEZTX1NCX0xPQ0sobXApOworCisJLyogZGlzYWJsZSBjb3VudGVyIGFuZCBzeW5jIGNvdW50ZXIgKi8KKwl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIobXAsIGZpZWxkKTsKKworCS8qIHVwZGF0ZSBjb3VudGVycyAgLSBmaXJzdCBDUFUgZ2V0cyByZXNpZHVhbCovCisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgWEZTX1NCU19JQ09VTlQ6CisJCWNvdW50ID0gbXAtPm1fc2Iuc2JfaWNvdW50OworCQlyZXNpZCA9IGRvX2Rpdihjb3VudCwgd2VpZ2h0KTsKKwkJaWYgKGNvdW50IDwgWEZTX0lDU0JfSU5PX0NOVFJfUkVFTkFCTEUpCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJY2FzZSBYRlNfU0JTX0lGUkVFOgorCQljb3VudCA9IG1wLT5tX3NiLnNiX2lmcmVlOworCQlyZXNpZCA9IGRvX2Rpdihjb3VudCwgd2VpZ2h0KTsKKwkJaWYgKGNvdW50IDwgWEZTX0lDU0JfSU5PX0NOVFJfUkVFTkFCTEUpCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJY2FzZSBYRlNfU0JTX0ZEQkxPQ0tTOgorCQljb3VudCA9IG1wLT5tX3NiLnNiX2ZkYmxvY2tzOworCQlyZXNpZCA9IGRvX2Rpdihjb3VudCwgd2VpZ2h0KTsKKwkJaWYgKGNvdW50IDwgWEZTX0lDU0JfRkRCTEtfQ05UUl9SRUVOQUJMRSkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJeGZzX2ljc2JfZW5hYmxlX2NvdW50ZXIobXAsIGZpZWxkLCBjb3VudCwgcmVzaWQpOworb3V0OgorCWlmICghKGZsYWdzICYgWEZTX0lDU0JfU0JfTE9DS0VEKSkKKwkJWEZTX1NCX1VOTE9DSyhtcCwgcyk7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19pY3NiX21vZGlmeV9jb3VudGVyc19pbnQoCisJeGZzX21vdW50X3QJKm1wLAorCXhmc19zYl9maWVsZF90CWZpZWxkLAorCWludAkJZGVsdGEsCisJaW50CQlyc3ZkLAorCWludAkJZmxhZ3MpCit7CisJeGZzX2ljc2JfY250c190CSppY3NicDsKKwlsb25nIGxvbmcJbGNvdW50ZXI7CS8qIGxvbmcgY291bnRlciBmb3IgNjQgYml0IGZpZWxkcyAqLworCWludAkJY3B1LCBzLCBsb2NrZWQgPSAwOworCWludAkJcmV0ID0gMCwgYmFsYW5jZV9kb25lID0gMDsKKworYWdhaW46CisJY3B1ID0gZ2V0X2NwdSgpOworCWljc2JwID0gKHhmc19pY3NiX2NudHNfdCAqKXBlcl9jcHVfcHRyKG1wLT5tX3NiX2NudHMsIGNwdSksCisJeGZzX2ljc2JfbG9ja19jbnRyKGljc2JwKTsKKwlpZiAodW5saWtlbHkoeGZzX2ljc2JfY291bnRlcl9kaXNhYmxlZChtcCwgZmllbGQpKSkKKwkJZ290byBzbG93X3BhdGg7CisKKwlzd2l0Y2ggKGZpZWxkKSB7CisJY2FzZSBYRlNfU0JTX0lDT1VOVDoKKwkJbGNvdW50ZXIgPSBpY3NicC0+aWNzYl9pY291bnQ7CisJCWxjb3VudGVyICs9IGRlbHRhOworCQlpZiAodW5saWtlbHkobGNvdW50ZXIgPCAwKSkKKwkJCWdvdG8gc2xvd19wYXRoOworCQlpY3NicC0+aWNzYl9pY291bnQgPSBsY291bnRlcjsKKwkJYnJlYWs7CisKKwljYXNlIFhGU19TQlNfSUZSRUU6CisJCWxjb3VudGVyID0gaWNzYnAtPmljc2JfaWZyZWU7CisJCWxjb3VudGVyICs9IGRlbHRhOworCQlpZiAodW5saWtlbHkobGNvdW50ZXIgPCAwKSkKKwkJCWdvdG8gc2xvd19wYXRoOworCQlpY3NicC0+aWNzYl9pZnJlZSA9IGxjb3VudGVyOworCQlicmVhazsKKworCWNhc2UgWEZTX1NCU19GREJMT0NLUzoKKwkJQlVHX09OKChtcC0+bV9yZXNibGtzIC0gbXAtPm1fcmVzYmxrc19hdmFpbCkgIT0gMCk7CisKKwkJbGNvdW50ZXIgPSBpY3NicC0+aWNzYl9mZGJsb2NrczsKKwkJbGNvdW50ZXIgKz0gZGVsdGE7CisJCWlmICh1bmxpa2VseShsY291bnRlciA8IDApKQorCQkJZ290byBzbG93X3BhdGg7CisJCWljc2JwLT5pY3NiX2ZkYmxvY2tzID0gbGNvdW50ZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJeGZzX2ljc2JfdW5sb2NrX2NudHIoaWNzYnApOworCXB1dF9jcHUoKTsKKwlpZiAobG9ja2VkKQorCQlYRlNfU0JfVU5MT0NLKG1wLCBzKTsKKwlyZXR1cm4gMDsKKworCS8qCisJICogVGhlIHNsb3cgcGF0aCBuZWVkcyB0byBiZSBydW4gd2l0aCB0aGUgU0JMT0NLCisJICogaGVsZCBzbyB0aGF0IHdlIHByZXZlbnQgb3RoZXIgdGhyZWFkcyBmcm9tCisJICogYXR0ZW1wdGluZyB0byBydW4gdGhpcyBwYXRoIGF0IHRoZSBzYW1lIHRpbWUuCisJICogdGhpcyBwcm92aWRlcyBleGNsdXNpb24gZm9yIHRoZSBiYWxhbmNpbmcgY29kZSwKKwkgKiBhbmQgZXhjbHVzaXZlIGZhbGxiYWNrIGlmIHRoZSBiYWxhbmNlIGRvZXMgbm90CisJICogcHJvdmlkZSBlbm91Z2ggcmVzb3VyY2VzIHRvIGNvbnRpbnVlIGluIGFuIHVubG9ja2VkCisJICogbWFubmVyLgorCSAqLworc2xvd19wYXRoOgorCXhmc19pY3NiX3VubG9ja19jbnRyKGljc2JwKTsKKwlwdXRfY3B1KCk7CisKKwkvKiBuZWVkIHRvIGhvbGQgc3VwZXJibG9jayBpbmNhc2Ugd2UgbmVlZAorCSAqIHRvIGRpc2FibGUgYSBjb3VudGVyICovCisJaWYgKCEoZmxhZ3MgJiBYRlNfSUNTQl9TQl9MT0NLRUQpKSB7CisJCXMgPSBYRlNfU0JfTE9DSyhtcCk7CisJCWxvY2tlZCA9IDE7CisJCWZsYWdzIHw9IFhGU19JQ1NCX1NCX0xPQ0tFRDsKKwl9CisJaWYgKCFiYWxhbmNlX2RvbmUpIHsKKwkJeGZzX2ljc2JfYmFsYW5jZV9jb3VudGVyKG1wLCBmaWVsZCwgZmxhZ3MpOworCQliYWxhbmNlX2RvbmUgPSAxOworCQlnb3RvIGFnYWluOworCX0gZWxzZSB7CisJCS8qCisJCSAqIHdlIG1pZ2h0IG5vdCBoYXZlIGVub3VnaCBvbiB0aGlzIGxvY2FsCisJCSAqIGNwdSB0byBhbGxvY2F0ZSBmb3IgYSBidWxrIHJlcXVlc3QuCisJCSAqIFdlIG5lZWQgdG8gZHJhaW4gdGhpcyBmaWVsZCBmcm9tIGFsbCBDUFVzCisJCSAqIGFuZCBkaXNhYmxlIHRoZSBjb3VudGVyIGZhc3RwYXRoCisJCSAqLworCQl4ZnNfaWNzYl9kaXNhYmxlX2NvdW50ZXIobXAsIGZpZWxkKTsKKwl9CisKKwlyZXQgPSB4ZnNfbW9kX2luY29yZV9zYl91bmxvY2tlZChtcCwgZmllbGQsIGRlbHRhLCByc3ZkKTsKKworCWlmIChsb2NrZWQpCisJCVhGU19TQl9VTkxPQ0sobXAsIHMpOworCXJldHVybiByZXQ7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19pY3NiX21vZGlmeV9jb3VudGVycygKKwl4ZnNfbW91bnRfdAkqbXAsCisJeGZzX3NiX2ZpZWxkX3QJZmllbGQsCisJaW50CQlkZWx0YSwKKwlpbnQJCXJzdmQpCit7CisJcmV0dXJuIHhmc19pY3NiX21vZGlmeV9jb3VudGVyc19pbnQobXAsIGZpZWxkLCBkZWx0YSwgcnN2ZCwgMCk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBzdXBlcmJsb2NrIGlzIGFscmVhZHkgbG9ja2VkCisgKi8KK1NUQVRJQyBpbnQKK3hmc19pY3NiX21vZGlmeV9jb3VudGVyc19sb2NrZWQoCisJeGZzX21vdW50X3QJKm1wLAorCXhmc19zYl9maWVsZF90CWZpZWxkLAorCWludAkJZGVsdGEsCisJaW50CQlyc3ZkKQoreworCXJldHVybiB4ZnNfaWNzYl9tb2RpZnlfY291bnRlcnNfaW50KG1wLCBmaWVsZCwgZGVsdGEsCisJCQkJCQlyc3ZkLCBYRlNfSUNTQl9TQl9MT0NLRUQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggY2QzY2Y5Ni4uZWJkNzM5NiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMjY3LDYgKzI2NywzNCBAQAogI2RlZmluZSBYRlNfSU9ET05FKHZmc3ApIFwKIAkoKihtcCktPm1faW9fb3BzLnhmc19pb2RvbmUpKHZmc3ApCiAKKyNpZmRlZiBIQVZFX1BFUkNQVV9TQgorCisvKgorICogVmFsaWQgcGVyLWNwdSBpbmNvcmUgc3VwZXJibG9jayBjb3VudGVycy4gTm90ZSB0aGF0IGlmIHlvdSBhZGQgbmV3IGNvdW50ZXJzLAorICogeW91IG1heSBuZWVkIHRvIGRlZmluZSBuZXcgY291bnRlciBkaXNhYmxlZCBiaXQgZmllbGQgZGVzY3JpcHRvcnMgYXMgdGhlcmUKKyAqIGFyZSBtb3JlIHBvc3NpYmxlIGZpZWxkcyBpbiB0aGUgc3VwZXJibG9jayB0aGF0IGNhbiBmaXQgaW4gYSBiaXRmaWVsZCBvbiBhCisgKiAzMiBiaXQgcGxhdGZvcm0uIFRoZSBYRlNfU0JTXyogdmFsdWVzIGZvciB0aGUgY3VycmVudCBjdXJyZW50IGNvdW50ZXJzIGp1c3QKKyAqIGZpdC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeGZzX2ljc2JfY250cyB7CisJdWludDY0X3QJaWNzYl9mZGJsb2NrczsKKwl1aW50NjRfdAlpY3NiX2lmcmVlOworCXVpbnQ2NF90CWljc2JfaWNvdW50OworCXVuc2lnbmVkIGxvbmcJaWNzYl9mbGFnczsKK30geGZzX2ljc2JfY250c190OworCisjZGVmaW5lIFhGU19JQ1NCX0ZMQUdfTE9DSwkoMSA8PCAwKQkvKiBjb3VudGVyIGxvY2sgYml0ICovCisKKyNkZWZpbmUgWEZTX0lDU0JfU0JfTE9DS0VECSgxIDw8IDApCS8qIHNiIGFscmVhZHkgbG9ja2VkICovCisjZGVmaW5lIFhGU19JQ1NCX0xBWllfQ09VTlQJKDEgPDwgMSkJLyogYWNjdXJhY3kgbm90IG5lZWRlZCAqLworCitleHRlcm4gaW50CXhmc19pY3NiX2luaXRfY291bnRlcnMoc3RydWN0IHhmc19tb3VudCAqKTsKK2V4dGVybiB2b2lkCXhmc19pY3NiX3N5bmNfY291bnRlcnNfbGF6eShzdHJ1Y3QgeGZzX21vdW50ICopOworCisjZWxzZQorI2RlZmluZSB4ZnNfaWNzYl9pbml0X2NvdW50ZXJzKG1wKQkoMCkKKyNkZWZpbmUgeGZzX2ljc2Jfc3luY19jb3VudGVyc19sYXp5KG1wKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX21vdW50IHsKIAliaHZfZGVzY190CQltX2JodjsJCS8qIHZmcyB4ZnMgYmVoYXZpb3IgKi8KQEAgLTM3Miw2ICs0MDAsMTEgQEAKIAlzdHJ1Y3QgeGZzX3Ftb3BzCW1fcW1fb3BzOwkvKiB2ZWN0b3Igb2YgWFFNIG9wcyAqLwogCXN0cnVjdCB4ZnNfaW9vcHMJbV9pb19vcHM7CS8qIHZlY3RvciBvZiBJL08gb3BzICovCiAJYXRvbWljX3QJCW1fYWN0aXZlX3RyYW5zOwkvKiBudW1iZXIgdHJhbnMgZnJvemVuICovCisjaWZkZWYgSEFWRV9QRVJDUFVfU0IKKwl4ZnNfaWNzYl9jbnRzX3QJCSptX3NiX2NudHM7CS8qIHBlci1jcHUgc3VwZXJibG9jayBjb3VudGVycyAqLworCXVuc2lnbmVkIGxvbmcJCW1faWNzYl9jb3VudGVyczsgLyogZGlzYWJsZWQgcGVyLWNwdSBjb3VudGVycyAqLworCXN0cnVjdCBub3RpZmllcl9ibG9jawltX2ljc2Jfbm90aWZpZXI7IC8qIGhvdHBsdWcgY3B1IG5vdGlmaWVyICovCisjZW5kaWYKIH0geGZzX21vdW50X3Q7CiAKIC8qCkBAIC0zODYsOCArNDE5LDYgQEAKICNkZWZpbmUgWEZTX01PVU5UX0ZTX1NIVVRET1dOCSgxVUxMIDw8IDQpCS8qIGF0b21pYyBzdG9wIG9mIGFsbCBmaWxlc3lzdGVtCiAJCQkJCQkgICBvcGVyYXRpb25zLCB0eXBpY2FsbHkgZm9yCiAJCQkJCQkgICBkaXNrIGVycm9ycyBpbiBtZXRhZGF0YSAqLwotI2RlZmluZSBYRlNfTU9VTlRfTk9BVElNRQkoMVVMTCA8PCA1KQkvKiBkb24ndCBtb2RpZnkgaW5vZGUgYWNjZXNzCi0JCQkJCQkgICB0aW1lcyBvbiByZWFkcyAqLwogI2RlZmluZSBYRlNfTU9VTlRfUkVURVJSCSgxVUxMIDw8IDYpICAgICAvKiByZXR1cm4gYWxpZ25tZW50IGVycm9ycyB0bwogCQkJCQkJICAgdXNlciAqLwogI2RlZmluZSBYRlNfTU9VTlRfTk9BTElHTgkoMVVMTCA8PCA3KQkvKiB0dXJuIG9mZiBzdHJpcGUgYWxpZ25tZW50CkBAIC00MTEsNiArNDQyLDggQEAKICNkZWZpbmUgWEZTX01PVU5UX0RJUlNZTkMJKDFVTEwgPDwgMjEpCS8qIHN5bmNocm9ub3VzIGRpcmVjdG9yeSBvcHMgKi8KICNkZWZpbmUgWEZTX01PVU5UX0NPTVBBVF9JT1NJWkUJKDFVTEwgPDwgMjIpCS8qIGRvbid0IHJlcG9ydCBsYXJnZSBwcmVmZXJyZWQKIAkJCQkJCSAqIEkvTyBzaXplIGluIHN0YXQoKSAqLworI2RlZmluZSBYRlNfTU9VTlRfTk9fUEVSQ1BVX1NCCSgxVUxMIDw8IDIzKQkvKiBkb24ndCB1c2UgcGVyLWNwdSBzdXBlcmJsb2NrCisJCQkJCQkgICBjb3VudGVycyAqLwogCiAKIC8qCkBAIC00NzMsMTEgKzUwNiw2IEBACiAjZGVmaW5lIFhGU19TSFVURE9XTl9SRU1PVEVfUkVRIDB4MTAJLyogU2h1dGRvd24gY2FtZSBmcm9tIHJlbW90ZSBjZWxsICovCiAKIC8qCi0gKiB4ZmxhZ3MgZm9yIHhmc19zeW5jc3ViCi0gKi8KLSNkZWZpbmUgWEZTX1hTWU5DX1JFTE9DCQkweDAxCi0KLS8qCiAgKiBGbGFncyBmb3IgeGZzX21vdW50ZnMKICAqLwogI2RlZmluZSBYRlNfTUZTSV9TRUNPTkQJCTB4MDEJLyogU2Vjb25kYXJ5IG1vdW50IC0tIHNraXAgc3R1ZmYgKi8KQEAgLTU0OCw2ICs1NzYsOCBAQAogZXh0ZXJuIGludAl4ZnNfdW5tb3VudGZzX3dyaXRlc2IoeGZzX21vdW50X3QgKik7CiBleHRlcm4gaW50CXhmc191bm1vdW50X2ZsdXNoKHhmc19tb3VudF90ICosIGludCk7CiBleHRlcm4gaW50CXhmc19tb2RfaW5jb3JlX3NiKHhmc19tb3VudF90ICosIHhmc19zYl9maWVsZF90LCBpbnQsIGludCk7CitleHRlcm4gaW50CXhmc19tb2RfaW5jb3JlX3NiX3VubG9ja2VkKHhmc19tb3VudF90ICosIHhmc19zYl9maWVsZF90LAorCQkJaW50LCBpbnQpOwogZXh0ZXJuIGludAl4ZnNfbW9kX2luY29yZV9zYl9iYXRjaCh4ZnNfbW91bnRfdCAqLCB4ZnNfbW9kX3NiX3QgKiwKIAkJCXVpbnQsIGludCk7CiBleHRlcm4gc3RydWN0IHhmc19idWYgKnhmc19nZXRzYih4ZnNfbW91bnRfdCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydGFsbG9jLmMgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwppbmRleCAwNmZjMDYxLi41YjQxMzk0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J0YWxsb2MuYworKysgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwpAQCAtMTMwLDcgKzEzMCw4IEBACiAJCS8qCiAJCSAqIExvY2sgdGhlIGlub2RlLgogCQkgKi8KLQkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgaW5vLCAwLCBYRlNfSUxPQ0tfRVhDTCwgJmlwKSkpCisJCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfaWdldChtcCwgdHAsIGlubywgMCwKKwkJCQkJCVhGU19JTE9DS19FWENMLCAmaXApKSkKIAkJCWdvdG8gZXJyb3JfZXhpdDsKIAkJWEZTX0JNQVBfSU5JVCgmZmxpc3QsICZmaXJzdGJsb2NrKTsKIAkJLyoKQEAgLTE3MCw4ICsxNzEsOCBAQAogCQkJLyoKIAkJCSAqIExvY2sgdGhlIGJpdG1hcCBpbm9kZS4KIAkJCSAqLwotCQkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgaW5vLCAwLCBYRlNfSUxPQ0tfRVhDTCwKLQkJCQkJJmlwKSkpCisJCQlpZiAoKGVycm9yID0geGZzX3RyYW5zX2lnZXQobXAsIHRwLCBpbm8sIDAsCisJCQkJCQkJWEZTX0lMT0NLX0VYQ0wsICZpcCkpKQogCQkJCWdvdG8gZXJyb3JfZXhpdDsKIAkJCS8qCiAJCQkgKiBHZXQgYSBidWZmZXIgZm9yIHRoZSBibG9jay4KQEAgLTIwMjMsOCArMjAyNCw4IEBACiAJCS8qCiAJCSAqIExvY2sgb3V0IG90aGVyIGNhbGxlcnMgYnkgZ3JhYmJpbmcgdGhlIGJpdG1hcCBpbm9kZSBsb2NrLgogCQkgKi8KLQkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgMCwgbXAtPm1fc2Iuc2JfcmJtaW5vLAotCQkJCVhGU19JTE9DS19FWENMLCAmaXApKSkKKwkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgbXAtPm1fc2Iuc2JfcmJtaW5vLCAwLAorCQkJCQkJWEZTX0lMT0NLX0VYQ0wsICZpcCkpKQogCQkJZ290byBlcnJvcl9leGl0OwogCQlBU1NFUlQoaXAgPT0gbXAtPm1fcmJtaXApOwogCQkvKgpAQCAtMjAzNyw4ICsyMDM4LDggQEAKIAkJLyoKIAkJICogR2V0IHRoZSBzdW1tYXJ5IGlub2RlIGludG8gdGhlIHRyYW5zYWN0aW9uLgogCQkgKi8KLQkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgbXAtPm1fc2Iuc2JfcnN1bWlubywKLQkJCQkwLCBYRlNfSUxPQ0tfRVhDTCwgJmlwKSkpCisJCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfaWdldChtcCwgdHAsIG1wLT5tX3NiLnNiX3JzdW1pbm8sIDAsCisJCQkJCQlYRlNfSUxPQ0tfRVhDTCwgJmlwKSkpCiAJCQlnb3RvIGVycm9yX2V4aXQ7CiAJCUFTU0VSVChpcCA9PSBtcC0+bV9yc3VtaXApOwogCQkvKgpAQCAtMjE1OCwxMCArMjE1OSw5IEBACiAJLyoKIAkgKiBMb2NrIG91dCBvdGhlciBjYWxsZXJzIGJ5IGdyYWJiaW5nIHRoZSBiaXRtYXAgaW5vZGUgbG9jay4KIAkgKi8KLQllcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgbXAtPm1fc2Iuc2JfcmJtaW5vLCAwLCBYRlNfSUxPQ0tfRVhDTCwgJmlwKTsKLQlpZiAoZXJyb3IpIHsKKwlpZiAoKGVycm9yID0geGZzX3RyYW5zX2lnZXQobXAsIHRwLCBtcC0+bV9zYi5zYl9yYm1pbm8sIDAsCisJCQkJCVhGU19JTE9DS19FWENMLCAmaXApKSkKIAkJcmV0dXJuIGVycm9yOwotCX0KIAlzdW1icCA9IE5VTEw7CiAJLyoKIAkgKiBBbGxvY2F0ZSBieSBzaXplLCBvciBuZWFyIGFub3RoZXIgYmxvY2ssIG9yIGV4YWN0bHkgYXQgc29tZSBibG9jay4KQEAgLTIyMjEsMTAgKzIyMjEsOSBAQAogCS8qCiAJICogU3luY2hyb25pemUgYnkgbG9ja2luZyB0aGUgYml0bWFwIGlub2RlLgogCSAqLwotCWVycm9yID0geGZzX3RyYW5zX2lnZXQobXAsIHRwLCBtcC0+bV9zYi5zYl9yYm1pbm8sIDAsIFhGU19JTE9DS19FWENMLCAmaXApOwotCWlmIChlcnJvcikgeworCWlmICgoZXJyb3IgPSB4ZnNfdHJhbnNfaWdldChtcCwgdHAsIG1wLT5tX3NiLnNiX3JibWlubywgMCwKKwkJCQkJWEZTX0lMT0NLX0VYQ0wsICZpcCkpKQogCQlyZXR1cm4gZXJyb3I7Ci0JfQogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgZGVmaW5lZChERUJVRykKIAkvKgogCSAqIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgd2hvbGUgcmFuZ2UgaXMgY3VycmVudGx5IGFsbG9jYXRlZC4KQEAgLTIzNjUsOCArMjM2NCw4IEBACiAJX191aW50NjRfdAlzZXE7CQkvKiBzZXF1ZW5jZSBudW1iZXIgb2YgZmlsZSBjcmVhdGlvbiAqLwogCV9fdWludDY0X3QJKnNlcXA7CQkvKiBwb2ludGVyIHRvIHNlcW5vIGluIGlub2RlICovCiAKLQllcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgbXAtPm1fc2Iuc2JfcmJtaW5vLCAwLCBYRlNfSUxPQ0tfRVhDTCwgJmlwKTsKLQlpZiAoZXJyb3IpCisJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgbXAtPm1fc2Iuc2JfcmJtaW5vLCAwLAorCQkJCQlYRlNfSUxPQ0tfRVhDTCwgJmlwKSkpCiAJCXJldHVybiBlcnJvcjsKIAlBU1NFUlQoaXAgPT0gbXAtPm1fcmJtaXApOwogCXNlcXAgPSAoX191aW50NjRfdCAqKSZpcC0+aV9kLmRpX2F0aW1lOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydy5oIGIvZnMveGZzL3hmc19ydy5oCmluZGV4IGRlODVlZWYuLmU2Mzc5NTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcncuaAorKysgYi9mcy94ZnMveGZzX3J3LmgKQEAgLTg5LDYgKzg5LDcgQEAKICAqLwogZXh0ZXJuIGludCB4ZnNfcndsb2NrKGJodl9kZXNjX3QgKmJkcCwgdnJ3bG9ja190IHdyaXRlX2xvY2spOwogZXh0ZXJuIHZvaWQgeGZzX3J3dW5sb2NrKGJodl9kZXNjX3QgKmJkcCwgdnJ3bG9ja190IHdyaXRlX2xvY2spOworZXh0ZXJuIGludCB4ZnNfc2V0YXR0cihiaHZfZGVzY190ICpiZHAsIHZhdHRyX3QgKnZhcCwgaW50IGZsYWdzLCBjcmVkX3QgKmNyZWRwKTsKIGV4dGVybiBpbnQgeGZzX2NoYW5nZV9maWxlX3NwYWNlKGJodl9kZXNjX3QgKmJkcCwgaW50IGNtZCwgeGZzX2Zsb2NrNjRfdCAqYmYsCiAJCQkJIHhmc19vZmZfdCBvZmZzZXQsIGNyZWRfdCAqY3JlZHAsIGludCBmbGFncyk7CiBleHRlcm4gaW50IHhmc19zZXRfZG1hdHRycyhiaHZfZGVzY190ICpiZHAsIHVfaW50IGV2bWFzaywgdV9pbnQxNl90IHN0YXRlLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5jIGIvZnMveGZzL3hmc190cmFucy5jCmluZGV4IGQzZDcxNGUuLjI5MTg5NTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuYworKysgYi9mcy94ZnMveGZzX3RyYW5zLmMKQEAgLTU1LDEwICs1NSwxNDEgQEAKIFNUQVRJQyB2b2lkCXhmc190cmFuc19jaHVua19jb21taXR0ZWQoeGZzX2xvZ19pdGVtX2NodW5rX3QgKiwgeGZzX2xzbl90LCBpbnQpOwogU1RBVElDIHZvaWQJeGZzX3RyYW5zX2ZyZWUoeGZzX3RyYW5zX3QgKik7CiAKLWttZW1fem9uZV90CQkqeGZzX3RyYW5zX3pvbmU7CitrbWVtX3pvbmVfdAkqeGZzX3RyYW5zX3pvbmU7CiAKIAogLyoKKyAqIFJlc2VydmF0aW9uIGZ1bmN0aW9ucyBoZXJlIGF2b2lkIGEgaHVnZSBzdGFjayBpbiB4ZnNfdHJhbnNfaW5pdAorICogZHVlIHRvIHJlZ2lzdGVyIG92ZXJmbG93IGZyb20gdGVtcG9yYXJpZXMgaW4gdGhlIGNhbGN1bGF0aW9ucy4KKyAqLworCitTVEFUSUMgdWludAoreGZzX2NhbGNfd3JpdGVfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19XUklURV9MT0dfUkVTKG1wKSArIFhGU19EUVVPVF9MT0dSRVMobXApOworfQorCitTVEFUSUMgdWludAoreGZzX2NhbGNfaXRydW5jYXRlX3Jlc2VydmF0aW9uKHhmc19tb3VudF90ICptcCkKK3sKKwlyZXR1cm4gWEZTX0NBTENfSVRSVU5DQVRFX0xPR19SRVMobXApICsgWEZTX0RRVU9UX0xPR1JFUyhtcCk7Cit9CisKK1NUQVRJQyB1aW50Cit4ZnNfY2FsY19yZW5hbWVfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19SRU5BTUVfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX2xpbmtfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19MSU5LX0xPR19SRVMobXApICsgWEZTX0RRVU9UX0xPR1JFUyhtcCk7Cit9CisKK1NUQVRJQyB1aW50Cit4ZnNfY2FsY19yZW1vdmVfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19SRU1PVkVfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX3N5bWxpbmtfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19TWU1MSU5LX0xPR19SRVMobXApICsgWEZTX0RRVU9UX0xPR1JFUyhtcCk7Cit9CisKK1NUQVRJQyB1aW50Cit4ZnNfY2FsY19jcmVhdGVfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19DUkVBVEVfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX21rZGlyX3Jlc2VydmF0aW9uKHhmc19tb3VudF90ICptcCkKK3sKKwlyZXR1cm4gWEZTX0NBTENfTUtESVJfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX2lmcmVlX3Jlc2VydmF0aW9uKHhmc19tb3VudF90ICptcCkKK3sKKwlyZXR1cm4gWEZTX0NBTENfSUZSRUVfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX2ljaGFuZ2VfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19JQ0hBTkdFX0xPR19SRVMobXApICsgWEZTX0RRVU9UX0xPR1JFUyhtcCk7Cit9CisKK1NUQVRJQyB1aW50Cit4ZnNfY2FsY19ncm93ZGF0YV9yZXNlcnZhdGlvbih4ZnNfbW91bnRfdCAqbXApCit7CisJcmV0dXJuIFhGU19DQUxDX0dST1dEQVRBX0xPR19SRVMobXApOworfQorCitTVEFUSUMgdWludAoreGZzX2NhbGNfZ3Jvd3J0YWxsb2NfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19HUk9XUlRBTExPQ19MT0dfUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX2dyb3dydHplcm9fcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19HUk9XUlRaRVJPX0xPR19SRVMobXApOworfQorCitTVEFUSUMgdWludAoreGZzX2NhbGNfZ3Jvd3J0ZnJlZV9yZXNlcnZhdGlvbih4ZnNfbW91bnRfdCAqbXApCit7CisJcmV0dXJuIFhGU19DQUxDX0dST1dSVEZSRUVfTE9HX1JFUyhtcCk7Cit9CisKK1NUQVRJQyB1aW50Cit4ZnNfY2FsY19zd3JpdGVfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19TV1JJVEVfTE9HX1JFUyhtcCk7Cit9CisKK1NUQVRJQyB1aW50Cit4ZnNfY2FsY193cml0ZWlkX3Jlc2VydmF0aW9uKHhmc19tb3VudF90ICptcCkKK3sKKwlyZXR1cm4gWEZTX0NBTENfV1JJVEVJRF9MT0dfUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX2FkZGFmb3JrX3Jlc2VydmF0aW9uKHhmc19tb3VudF90ICptcCkKK3sKKwlyZXR1cm4gWEZTX0NBTENfQUREQUZPUktfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX2F0dHJpbnZhbF9yZXNlcnZhdGlvbih4ZnNfbW91bnRfdCAqbXApCit7CisJcmV0dXJuIFhGU19DQUxDX0FUVFJJTlZBTF9MT0dfUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX2F0dHJzZXRfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19BVFRSU0VUX0xPR19SRVMobXApICsgWEZTX0RRVU9UX0xPR1JFUyhtcCk7Cit9CisKK1NUQVRJQyB1aW50Cit4ZnNfY2FsY19hdHRycm1fcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19BVFRSUk1fTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKTsKK30KKworU1RBVElDIHVpbnQKK3hmc19jYWxjX2NsZWFyX2FnaV9idWNrZXRfcmVzZXJ2YXRpb24oeGZzX21vdW50X3QgKm1wKQoreworCXJldHVybiBYRlNfQ0FMQ19DTEVBUl9BR0lfQlVDS0VUX0xPR19SRVMobXApOworfQorCisvKgogICogSW5pdGlhbGl6ZSB0aGUgcHJlY29tcHV0ZWQgdHJhbnNhY3Rpb24gcmVzZXJ2YXRpb24gdmFsdWVzCiAgKiBpbiB0aGUgbW91bnQgc3RydWN0dXJlLgogICovCkBAIC02OSwzOSArMjAwLDI3IEBACiAJeGZzX3RyYW5zX3Jlc2VydmF0aW9uc190CSpyZXNwOwogCiAJcmVzcCA9ICYobXAtPm1fcmVzZXJ2YXRpb25zKTsKLQlyZXNwLT50cl93cml0ZSA9Ci0JCSh1aW50KShYRlNfQ0FMQ19XUklURV9MT0dfUkVTKG1wKSArIFhGU19EUVVPVF9MT0dSRVMobXApKTsKLQlyZXNwLT50cl9pdHJ1bmNhdGUgPQotCQkodWludCkoWEZTX0NBTENfSVRSVU5DQVRFX0xPR19SRVMobXApICsgWEZTX0RRVU9UX0xPR1JFUyhtcCkpOwotCXJlc3AtPnRyX3JlbmFtZSA9Ci0JCSh1aW50KShYRlNfQ0FMQ19SRU5BTUVfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKSk7Ci0JcmVzcC0+dHJfbGluayA9ICh1aW50KVhGU19DQUxDX0xJTktfTE9HX1JFUyhtcCk7Ci0JcmVzcC0+dHJfcmVtb3ZlID0KLQkJKHVpbnQpKFhGU19DQUxDX1JFTU9WRV9MT0dfUkVTKG1wKSArIFhGU19EUVVPVF9MT0dSRVMobXApKTsKLQlyZXNwLT50cl9zeW1saW5rID0KLQkJKHVpbnQpKFhGU19DQUxDX1NZTUxJTktfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKSk7Ci0JcmVzcC0+dHJfY3JlYXRlID0KLQkJKHVpbnQpKFhGU19DQUxDX0NSRUFURV9MT0dfUkVTKG1wKSArIFhGU19EUVVPVF9MT0dSRVMobXApKTsKLQlyZXNwLT50cl9ta2RpciA9Ci0JCSh1aW50KShYRlNfQ0FMQ19NS0RJUl9MT0dfUkVTKG1wKSArIFhGU19EUVVPVF9MT0dSRVMobXApKTsKLQlyZXNwLT50cl9pZnJlZSA9Ci0JCSh1aW50KShYRlNfQ0FMQ19JRlJFRV9MT0dfUkVTKG1wKSArIFhGU19EUVVPVF9MT0dSRVMobXApKTsKLQlyZXNwLT50cl9pY2hhbmdlID0KLQkJKHVpbnQpKFhGU19DQUxDX0lDSEFOR0VfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKSk7Ci0JcmVzcC0+dHJfZ3Jvd2RhdGEgPSAodWludClYRlNfQ0FMQ19HUk9XREFUQV9MT0dfUkVTKG1wKTsKLQlyZXNwLT50cl9zd3JpdGUgPSAodWludClYRlNfQ0FMQ19TV1JJVEVfTE9HX1JFUyhtcCk7Ci0JcmVzcC0+dHJfd3JpdGVpZCA9ICh1aW50KVhGU19DQUxDX1dSSVRFSURfTE9HX1JFUyhtcCk7Ci0JcmVzcC0+dHJfYWRkYWZvcmsgPQotCQkodWludCkoWEZTX0NBTENfQUREQUZPUktfTE9HX1JFUyhtcCkgKyBYRlNfRFFVT1RfTE9HUkVTKG1wKSk7Ci0JcmVzcC0+dHJfYXR0cmludmFsID0gKHVpbnQpWEZTX0NBTENfQVRUUklOVkFMX0xPR19SRVMobXApOwotCXJlc3AtPnRyX2F0dHJzZXQgPQotCQkodWludCkoWEZTX0NBTENfQVRUUlNFVF9MT0dfUkVTKG1wKSArIFhGU19EUVVPVF9MT0dSRVMobXApKTsKLQlyZXNwLT50cl9hdHRycm0gPQotCQkodWludCkoWEZTX0NBTENfQVRUUlJNX0xPR19SRVMobXApICsgWEZTX0RRVU9UX0xPR1JFUyhtcCkpOwotCXJlc3AtPnRyX2NsZWFyYWdpID0gKHVpbnQpWEZTX0NBTENfQ0xFQVJfQUdJX0JVQ0tFVF9MT0dfUkVTKG1wKTsKLQlyZXNwLT50cl9ncm93cnRhbGxvYyA9ICh1aW50KVhGU19DQUxDX0dST1dSVEFMTE9DX0xPR19SRVMobXApOwotCXJlc3AtPnRyX2dyb3dydHplcm8gPSAodWludClYRlNfQ0FMQ19HUk9XUlRaRVJPX0xPR19SRVMobXApOwotCXJlc3AtPnRyX2dyb3dydGZyZWUgPSAodWludClYRlNfQ0FMQ19HUk9XUlRGUkVFX0xPR19SRVMobXApOworCXJlc3AtPnRyX3dyaXRlID0geGZzX2NhbGNfd3JpdGVfcmVzZXJ2YXRpb24obXApOworCXJlc3AtPnRyX2l0cnVuY2F0ZSA9IHhmc19jYWxjX2l0cnVuY2F0ZV9yZXNlcnZhdGlvbihtcCk7CisJcmVzcC0+dHJfcmVuYW1lID0geGZzX2NhbGNfcmVuYW1lX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl9saW5rID0geGZzX2NhbGNfbGlua19yZXNlcnZhdGlvbihtcCk7CisJcmVzcC0+dHJfcmVtb3ZlID0geGZzX2NhbGNfcmVtb3ZlX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl9zeW1saW5rID0geGZzX2NhbGNfc3ltbGlua19yZXNlcnZhdGlvbihtcCk7CisJcmVzcC0+dHJfY3JlYXRlID0geGZzX2NhbGNfY3JlYXRlX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl9ta2RpciA9IHhmc19jYWxjX21rZGlyX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl9pZnJlZSA9IHhmc19jYWxjX2lmcmVlX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl9pY2hhbmdlID0geGZzX2NhbGNfaWNoYW5nZV9yZXNlcnZhdGlvbihtcCk7CisJcmVzcC0+dHJfZ3Jvd2RhdGEgPSB4ZnNfY2FsY19ncm93ZGF0YV9yZXNlcnZhdGlvbihtcCk7CisJcmVzcC0+dHJfc3dyaXRlID0geGZzX2NhbGNfc3dyaXRlX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl93cml0ZWlkID0geGZzX2NhbGNfd3JpdGVpZF9yZXNlcnZhdGlvbihtcCk7CisJcmVzcC0+dHJfYWRkYWZvcmsgPSB4ZnNfY2FsY19hZGRhZm9ya19yZXNlcnZhdGlvbihtcCk7CisJcmVzcC0+dHJfYXR0cmludmFsID0geGZzX2NhbGNfYXR0cmludmFsX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl9hdHRyc2V0ID0geGZzX2NhbGNfYXR0cnNldF9yZXNlcnZhdGlvbihtcCk7CisJcmVzcC0+dHJfYXR0cnJtID0geGZzX2NhbGNfYXR0cnJtX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl9jbGVhcmFnaSA9IHhmc19jYWxjX2NsZWFyX2FnaV9idWNrZXRfcmVzZXJ2YXRpb24obXApOworCXJlc3AtPnRyX2dyb3dydGFsbG9jID0geGZzX2NhbGNfZ3Jvd3J0YWxsb2NfcmVzZXJ2YXRpb24obXApOworCXJlc3AtPnRyX2dyb3dydHplcm8gPSB4ZnNfY2FsY19ncm93cnR6ZXJvX3Jlc2VydmF0aW9uKG1wKTsKKwlyZXNwLT50cl9ncm93cnRmcmVlID0geGZzX2NhbGNfZ3Jvd3J0ZnJlZV9yZXNlcnZhdGlvbihtcCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmggYi9mcy94ZnMveGZzX3RyYW5zLmgKaW5kZXggZDc3OTAxYy4uZTQ4YmVmYTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zLmgKQEAgLTM4MCw3ICszODAsNyBAQAogCXhmc190cmFuc19oZWFkZXJfdAl0X2hlYWRlcjsJLyogaGVhZGVyIGZvciBpbi1sb2cgdHJhbnMgKi8KIAl1bnNpZ25lZCBpbnQJCXRfYnVzeV9mcmVlOwkvKiBidXN5IGRlc2NzIGZyZWUgKi8KIAl4ZnNfbG9nX2J1c3lfY2h1bmtfdAl0X2J1c3k7CQkvKiBidXN5L2FzeW5jIGZyZWUgYmxvY2tzICovCi0gICAgICAgIHhmc19wZmxhZ3NfdCAgICAgICAgICAgIHRfcGZsYWdzOyAgICAgICAvKiBzYXZlZCBwZmxhZ3Mgc3RhdGUgKi8KKwl1bnNpZ25lZCBsb25nCQl0X3BmbGFnczsJLyogc2F2ZWQgcHJvY2VzcyBmbGFncyBzdGF0ZSAqLwogfSB4ZnNfdHJhbnNfdDsKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdmZzb3BzLmMgYi9mcy94ZnMveGZzX3Zmc29wcy5jCmluZGV4IGI2YWQzNzAuLmQ0ZWM0ZGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdmZzb3BzLmMKKysrIGIvZnMveGZzL3hmc192ZnNvcHMuYwpAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUgInhmc19jbG50LmgiCiAjaW5jbHVkZSAieGZzX2Zzb3BzLmgiCiAKLVNUQVRJQyBpbnQgeGZzX3N5bmMoYmh2X2Rlc2NfdCAqLCBpbnQsIGNyZWRfdCAqKTsKK1NUQVRJQyBpbnQJeGZzX3N5bmMoYmh2X2Rlc2NfdCAqLCBpbnQsIGNyZWRfdCAqKTsKIAogaW50CiB4ZnNfaW5pdCh2b2lkKQpAQCAtNzcsMTEgKzc3LDEyIEBACiAJCQkJCQkgInhmc19ibWFwX2ZyZWVfaXRlbSIpOwogCXhmc19idHJlZV9jdXJfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfYnRyZWVfY3VyX3QpLAogCQkJCQkgICAgInhmc19idHJlZV9jdXIiKTsKLQl4ZnNfaW5vZGVfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfaW5vZGVfdCksICJ4ZnNfaW5vZGUiKTsKIAl4ZnNfdHJhbnNfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfdHJhbnNfdCksICJ4ZnNfdHJhbnMiKTsKIAl4ZnNfZGFfc3RhdGVfem9uZSA9CiAJCWttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfZGFfc3RhdGVfdCksICJ4ZnNfZGFfc3RhdGUiKTsKIAl4ZnNfZGFidWZfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfZGFidWZfdCksICJ4ZnNfZGFidWYiKTsKKwl4ZnNfaWZvcmtfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfaWZvcmtfdCksICJ4ZnNfaWZvcmsiKTsKKwl4ZnNfYWNsX3pvbmVfaW5pdCh4ZnNfYWNsX3pvbmUsICJ4ZnNfYWNsIik7CiAKIAkvKgogCSAqIFRoZSBzaXplIG9mIHRoZSB6b25lIGFsbG9jYXRlZCBidWYgbG9nIGl0ZW0gaXMgdGhlIG1heGltdW0KQEAgLTkzLDE3ICs5NCwzMCBAQAogCQkJCSgoKFhGU19NQVhfQkxPQ0tTSVpFIC8gWEZTX0JMSV9DSFVOSykgLwogCQkJCSAgTkJXT1JEKSAqIHNpemVvZihpbnQpKSksCiAJCQkgICAgICAgInhmc19idWZfaXRlbSIpOwotCXhmc19lZmRfem9uZSA9IGttZW1fem9uZV9pbml0KChzaXplb2YoeGZzX2VmZF9sb2dfaXRlbV90KSArCi0JCQkJICAgICAgICgoWEZTX0VGRF9NQVhfRkFTVF9FWFRFTlRTIC0gMSkgKiBzaXplb2YoeGZzX2V4dGVudF90KSkpLAorCXhmc19lZmRfem9uZSA9CisJCWttZW1fem9uZV9pbml0KChzaXplb2YoeGZzX2VmZF9sb2dfaXRlbV90KSArCisJCQkgICAgICAgKChYRlNfRUZEX01BWF9GQVNUX0VYVEVOVFMgLSAxKSAqCisJCQkJIHNpemVvZih4ZnNfZXh0ZW50X3QpKSksCiAJCQkJICAgICAgInhmc19lZmRfaXRlbSIpOwotCXhmc19lZmlfem9uZSA9IGttZW1fem9uZV9pbml0KChzaXplb2YoeGZzX2VmaV9sb2dfaXRlbV90KSArCi0JCQkJICAgICAgICgoWEZTX0VGSV9NQVhfRkFTVF9FWFRFTlRTIC0gMSkgKiBzaXplb2YoeGZzX2V4dGVudF90KSkpLAorCXhmc19lZmlfem9uZSA9CisJCWttZW1fem9uZV9pbml0KChzaXplb2YoeGZzX2VmaV9sb2dfaXRlbV90KSArCisJCQkgICAgICAgKChYRlNfRUZJX01BWF9GQVNUX0VYVEVOVFMgLSAxKSAqCisJCQkJIHNpemVvZih4ZnNfZXh0ZW50X3QpKSksCiAJCQkJICAgICAgInhmc19lZmlfaXRlbSIpOwotCXhmc19pZm9ya196b25lID0ga21lbV96b25lX2luaXQoc2l6ZW9mKHhmc19pZm9ya190KSwgInhmc19pZm9yayIpOwotCXhmc19pbGlfem9uZSA9IGttZW1fem9uZV9pbml0KHNpemVvZih4ZnNfaW5vZGVfbG9nX2l0ZW1fdCksICJ4ZnNfaWxpIik7Ci0JeGZzX2NoYXNobGlzdF96b25lID0ga21lbV96b25lX2luaXQoc2l6ZW9mKHhmc19jaGFzaGxpc3RfdCksCi0JCQkJCSAgICAieGZzX2NoYXNobGlzdCIpOwotCXhmc19hY2xfem9uZV9pbml0KHhmc19hY2xfem9uZSwgInhmc19hY2wiKTsKKworCS8qCisJICogVGhlc2Ugem9uZXMgd2FycmFudCBzcGVjaWFsIG1lbW9yeSBhbGxvY2F0b3IgaGludHMKKwkgKi8KKwl4ZnNfaW5vZGVfem9uZSA9CisJCWttZW1fem9uZV9pbml0X2ZsYWdzKHNpemVvZih4ZnNfaW5vZGVfdCksICJ4ZnNfaW5vZGUiLAorCQkJCQlLTV9aT05FX0hXQUxJR04gfCBLTV9aT05FX1JFQ0xBSU0gfAorCQkJCQlLTV9aT05FX1NQUkVBRCwgTlVMTCk7CisJeGZzX2lsaV96b25lID0KKwkJa21lbV96b25lX2luaXRfZmxhZ3Moc2l6ZW9mKHhmc19pbm9kZV9sb2dfaXRlbV90KSwgInhmc19pbGkiLAorCQkJCQlLTV9aT05FX1NQUkVBRCwgTlVMTCk7CisJeGZzX2NoYXNobGlzdF96b25lID0KKwkJa21lbV96b25lX2luaXRfZmxhZ3Moc2l6ZW9mKHhmc19jaGFzaGxpc3RfdCksICJ4ZnNfY2hhc2hsaXN0IiwKKwkJCQkJS01fWk9ORV9TUFJFQUQsIE5VTEwpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBnbG9iYWwgdHJhY2UgYnVmZmVycy4KQEAgLTE3NiwxOCArMTkwLDE4IEBACiAJa3RyYWNlX2ZyZWUoeGZzX2FsbG9jX3RyYWNlX2J1Zik7CiAjZW5kaWYKIAotCWttZW1fY2FjaGVfZGVzdHJveSh4ZnNfYm1hcF9mcmVlX2l0ZW1fem9uZSk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHhmc19idHJlZV9jdXJfem9uZSk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHhmc19pbm9kZV96b25lKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koeGZzX3RyYW5zX3pvbmUpOwotCWttZW1fY2FjaGVfZGVzdHJveSh4ZnNfZGFfc3RhdGVfem9uZSk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHhmc19kYWJ1Zl96b25lKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koeGZzX2J1Zl9pdGVtX3pvbmUpOwotCWttZW1fY2FjaGVfZGVzdHJveSh4ZnNfZWZkX3pvbmUpOwotCWttZW1fY2FjaGVfZGVzdHJveSh4ZnNfZWZpX3pvbmUpOwotCWttZW1fY2FjaGVfZGVzdHJveSh4ZnNfaWZvcmtfem9uZSk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHhmc19pbGlfem9uZSk7Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHhmc19jaGFzaGxpc3Rfem9uZSk7CisJa21lbV96b25lX2Rlc3Ryb3koeGZzX2JtYXBfZnJlZV9pdGVtX3pvbmUpOworCWttZW1fem9uZV9kZXN0cm95KHhmc19idHJlZV9jdXJfem9uZSk7CisJa21lbV96b25lX2Rlc3Ryb3koeGZzX2lub2RlX3pvbmUpOworCWttZW1fem9uZV9kZXN0cm95KHhmc190cmFuc196b25lKTsKKwlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfZGFfc3RhdGVfem9uZSk7CisJa21lbV96b25lX2Rlc3Ryb3koeGZzX2RhYnVmX3pvbmUpOworCWttZW1fem9uZV9kZXN0cm95KHhmc19idWZfaXRlbV96b25lKTsKKwlrbWVtX3pvbmVfZGVzdHJveSh4ZnNfZWZkX3pvbmUpOworCWttZW1fem9uZV9kZXN0cm95KHhmc19lZmlfem9uZSk7CisJa21lbV96b25lX2Rlc3Ryb3koeGZzX2lmb3JrX3pvbmUpOworCWttZW1fem9uZV9kZXN0cm95KHhmc19pbGlfem9uZSk7CisJa21lbV96b25lX2Rlc3Ryb3koeGZzX2NoYXNobGlzdF96b25lKTsKIH0KIAogLyoKQEAgLTI1OCw4ICsyNzIsNiBAQAogCQltcC0+bV9pbm9hZGQgPSBYRlNfSU5PNjRfT0ZGU0VUOwogCX0KICNlbmRpZgotCWlmIChhcC0+ZmxhZ3MgJiBYRlNNTlRfTk9BVElNRSkKLQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX05PQVRJTUU7CiAJaWYgKGFwLT5mbGFncyAmIFhGU01OVF9SRVRFUlIpCiAJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9SRVRFUlI7CiAJaWYgKGFwLT5mbGFncyAmIFhGU01OVF9OT0FMSUdOKQpAQCAtNjIwLDcgKzYzMiw3IEBACiAJeGZzX21vdW50X3QJCSptcCkKIHsKIAlpbnQJCQljb3VudCA9IDAsIHBpbmNvdW50OwotCQkKKwogCXhmc19yZWZjYWNoZV9wdXJnZV9tcChtcCk7CiAJeGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMCk7CiAJeGZzX2ZpbmlzaF9yZWNsYWltX2FsbChtcCwgMCk7CkBAIC02MzEsNyArNjQzLDcgQEAKIAkgKiBtZXRhIGRhdGEgKHR5cGljYWxseSBkaXJlY3RvcnkgdXBkYXRlcykuCiAJICogV2hpY2ggdGhlbiBtdXN0IGJlIGZsdXNoZWQgYW5kIGxvZ2dlZCBiZWZvcmUKIAkgKiB3ZSBjYW4gd3JpdGUgdGhlIHVubW91bnQgcmVjb3JkLgotCSAqLyAKKwkgKi8KIAlkbyB7CiAJCXhmc19zeW5jc3ViKG1wLCBTWU5DX1JFTU9VTlR8U1lOQ19BVFRSfFNZTkNfV0FJVCwgMCwgTlVMTCk7CiAJCXBpbmNvdW50ID0geGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMSk7CkBAIC02NTQsMTEgKzY2Niw2IEBACiAJeGZzX21vdW50X3QJKm1wID0gWEZTX0JIVlRPTShiZHApOwogCWludAkJZXJyb3I7CiAKLQlpZiAoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfTk9BVElNRSkKLQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX05PQVRJTUU7Ci0JZWxzZQotCQltcC0+bV9mbGFncyAmPSB+WEZTX01PVU5UX05PQVRJTUU7Ci0KIAlpZiAoYXJncy0+ZmxhZ3MgJiBYRlNNTlRfQkFSUklFUikKIAkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX0JBUlJJRVI7CiAJZWxzZQpAQCAtODE0LDYgKzgyMSw3IEBACiAKIAlzdGF0cC0+Zl90eXBlID0gWEZTX1NCX01BR0lDOwogCisJeGZzX2ljc2Jfc3luY19jb3VudGVyc19sYXp5KG1wKTsKIAlzID0gWEZTX1NCX0xPQ0sobXApOwogCXN0YXRwLT5mX2JzaXplID0gc2JwLT5zYl9ibG9ja3NpemU7CiAJbHNpemUgPSBzYnAtPnNiX2xvZ3N0YXJ0ID8gc2JwLT5zYl9sb2dibG9ja3MgOiAwOwpAQCAtMTIyMSw3ICsxMjI5LDcgQEAKIAkJCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwogCiAJCQkJCWVycm9yID0geGZzX2l0b2JwKG1wLCBOVUxMLCBpcCwKLQkJCQkJCQkgICZkaXAsICZicCwgMCk7CisJCQkJCQkJICAmZGlwLCAmYnAsIDAsIDApOwogCQkJCQlpZiAoIWVycm9yKSB7CiAJCQkJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAkJCQkJfSBlbHNlIHsKQEAgLTE2OTAsMTAgKzE2OTgsNyBAQAogCWludAkJCWlvc2l6ZTsKIAogCWFyZ3MtPmZsYWdzMiB8PSBYRlNNTlQyX0NPTVBBVF9JT1NJWkU7Ci0KLSNpZiAwCS8qIFhYWDogb2ZmIGJ5IGRlZmF1bHQsIHVudGlsIHNvbWUgcmVtYWluaW5nIGlzc3VlcyBpcm9uZWQgb3V0ICovCi0JYXJncy0+ZmxhZ3MgfD0gWEZTTU5UX0lERUxFVEU7IC8qIGRlZmF1bHQgdG8gb24gKi8KLSNlbmRpZgorCWFyZ3MtPmZsYWdzIHw9IFhGU01OVF9JREVMRVRFOwogCiAJaWYgKCFvcHRpb25zKQogCQlnb3RvIGRvbmU7CkBAIC0xOTAzLDcgKzE5MDgsNiBAQAogCQl7IFhGU19NT1VOVF9OT1VVSUQsCQkiLCIgTU5UT1BUX05PVVVJRCB9LAogCQl7IFhGU19NT1VOVF9OT1JFQ09WRVJZLAkJIiwiIE1OVE9QVF9OT1JFQ09WRVJZIH0sCiAJCXsgWEZTX01PVU5UX09TWU5DSVNPU1lOQywJIiwiIE1OVE9QVF9PU1lOQ0lTT1NZTkMgfSwKLQkJeyBYRlNfTU9VTlRfSURFTEVURSwJCSIsIiBNTlRPUFRfTk9JS0VFUCB9LAogCQl7IDAsIE5VTEwgfQogCX07CiAJc3RydWN0IHByb2NfeGZzX2luZm8JKnhmc19pbmZvcDsKQEAgLTE5MzksNiArMTk0Myw4IEBACiAJCXNlcV9wcmludGYobSwgIiwiIE1OVE9QVF9TV0lEVEggIj0lZCIsCiAJCQkJKGludClYRlNfRlNCX1RPX0JCKG1wLCBtcC0+bV9zd2lkdGgpKTsKIAorCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0lERUxFVEUpKQorCQlzZXFfcHJpbnRmKG0sICIsIiBNTlRPUFRfSUtFRVApOwogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0NPTVBBVF9JT1NJWkUpKQogCQlzZXFfcHJpbnRmKG0sICIsIiBNTlRPUFRfTEFSR0VJTyk7CiAJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggZWFhYjM1NS4uMGYwYTY0ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtNjE1LDYgKzYxNSw3IEBACiAJCQljb2RlID0geGZzX2lncm93X3N0YXJ0KGlwLCB2YXAtPnZhX3NpemUsIGNyZWRwKTsKIAkJfQogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQl2bl9pb3dhaXQodnApOyAvKiB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhbnkgcGVuZGluZyBESU9zICovCiAJCWlmICghY29kZSkKIAkJCWNvZGUgPSB4ZnNfaXRydW5jYXRlX2RhdGEoaXAsIHZhcC0+dmFfc2l6ZSk7CiAJCWlmIChjb2RlKSB7CkBAIC0xMzM0LDcgKzEzMzUsNyBAQAogCSAqLwogCWRvbmUgPSAwOwogCVhGU19CTUFQX0lOSVQoJmZyZWVfbGlzdCwgJmZpcnN0X2Jsb2NrKTsKLQlubWFwcyA9IHNpemVvZihtdmFsKSAvIHNpemVvZihtdmFsWzBdKTsKKwlubWFwcyA9IEFSUkFZX1NJWkUobXZhbCk7CiAJaWYgKChlcnJvciA9IHhmc19ibWFwaSh0cCwgaXAsIDAsIFhGU19CX1RPX0ZTQihtcCwgc2l6ZSksCiAJCQlYRlNfQk1BUElfTUVUQURBVEEsICZmaXJzdF9ibG9jaywgMCwgbXZhbCwgJm5tYXBzLAogCQkJJmZyZWVfbGlzdCkpKQpAQCAtMTU1Niw3ICsxNTU3LDcgQEAKIAkJCWlmICgoZXJyb3IgPSB4ZnNfaW5hY3RpdmVfZnJlZV9lb2ZibG9ja3MobXAsIGlwKSkpCiAJCQkJcmV0dXJuIGVycm9yOwogCQkJLyogVXBkYXRlIGxpbnV4IGlub2RlIGJsb2NrIGNvdW50IGFmdGVyIGZyZWUgYWJvdmUgKi8KLQkJCUxJTlZGU19HRVRfSVAodnApLT5pX2Jsb2NrcyA9IFhGU19GU0JfVE9fQkIobXAsCisJCQl2bl90b19pbm9kZSh2cCktPmlfYmxvY2tzID0gWEZTX0ZTQl9UT19CQihtcCwKIAkJCQlpcC0+aV9kLmRpX25ibG9ja3MgKyBpcC0+aV9kZWxheWVkX2Jsa3MpOwogCQl9CiAJfQpAQCAtMTYzNyw3ICsxNjM4LDcgQEAKIAkJCWlmICgoZXJyb3IgPSB4ZnNfaW5hY3RpdmVfZnJlZV9lb2ZibG9ja3MobXAsIGlwKSkpCiAJCQkJcmV0dXJuIFZOX0lOQUNUSVZFX0NBQ0hFOwogCQkJLyogVXBkYXRlIGxpbnV4IGlub2RlIGJsb2NrIGNvdW50IGFmdGVyIGZyZWUgYWJvdmUgKi8KLQkJCUxJTlZGU19HRVRfSVAodnApLT5pX2Jsb2NrcyA9IFhGU19GU0JfVE9fQkIobXAsCisJCQl2bl90b19pbm9kZSh2cCktPmlfYmxvY2tzID0gWEZTX0ZTQl9UT19CQihtcCwKIAkJCQlpcC0+aV9kLmRpX25ibG9ja3MgKyBpcC0+aV9kZWxheWVkX2Jsa3MpOwogCQl9CiAJCWdvdG8gb3V0OwpAQCAtMzE4Niw3ICszMTg3LDcgQEAKIAogCS8qIEZhbGwgdGhyb3VnaCB0byBzdGRfcmV0dXJuIHdpdGggZXJyb3IgPSAwIG9yIHRoZSBlcnJubwogCSAqIGZyb20geGZzX3RyYW5zX2NvbW1pdC4gKi8KLXN0ZF9yZXR1cm46Cisgc3RkX3JldHVybjoKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChkaXJfdnAtPnZfdmZzcCwgZHAsIERNX0VWRU5UX1BPU1RSRU1PVkUpKSB7CiAJCSh2b2lkKSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1BPU1RSRU1PVkUsCiAJCQkJCWRpcl92cCwgRE1fUklHSFRfTlVMTCwKQEAgLTMxOTYsMTIgKzMxOTcsMTIgQEAKIAl9CiAJcmV0dXJuIGVycm9yOwogCi1lcnJvcjE6CisgZXJyb3IxOgogCXhmc19ibWFwX2NhbmNlbCgmZnJlZV9saXN0KTsKIAljYW5jZWxfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwogCS8qIEZBTExUSFJPVUdIICovCiAKLWVycm9yX3JldHVybjoKKyBlcnJvcl9yZXR1cm46CiAJeGZzX3RyYW5zX2NhbmNlbCh0cCwgY2FuY2VsX2ZsYWdzKTsKIAlnb3RvIHN0ZF9yZXR1cm47CiB9CkBAIC00MzEwLDggKzQzMTEsMTAgQEAKIAlBU1NFUlQoYXR0cl9mbGFncyAmIEFUVFJfTk9MT0NLID8gYXR0cl9mbGFncyAmIEFUVFJfRE1JIDogMSk7CiAJaWYgKGF0dHJfZmxhZ3MgJiBBVFRSX05PTE9DSykKIAkJbmVlZF9pb2xvY2sgPSAwOwotCWlmIChuZWVkX2lvbG9jaykKKwlpZiAobmVlZF9pb2xvY2spIHsKIAkJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOworCQl2bl9pb3dhaXQodnApOwkvKiB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhbnkgcGVuZGluZyBESU9zICovCisJfQogCiAJcm91bmRpbmcgPSBNQVgoKF9fdWludDhfdCkoMSA8PCBtcC0+bV9zYi5zYl9ibG9ja2xvZyksCiAJCQkoX191aW50OF90KU5CUFApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCAwYjU0ZTlhLi42ZGNhM2Q1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtMjY5LDcgKzI2OSw3IEBACiAKIHN0cnVjdCBhY3BpX2RldmljZV93YWtldXAgewogCWFjcGlfaGFuZGxlIGdwZV9kZXZpY2U7Ci0JYWNwaV9pbnRlZ2VyIGdwZV9udW1iZXI7OworCWFjcGlfaW50ZWdlciBncGVfbnVtYmVyOwogCWFjcGlfaW50ZWdlciBzbGVlcF9zdGF0ZTsKIAlzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdCByZXNvdXJjZXM7CiAJc3RydWN0IGFjcGlfZGV2aWNlX3dha2V1cF9zdGF0ZSBzdGF0ZTsKQEAgLTMzMCw2ICszMzAsNyBAQAogaW50IGFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBhY3BpX2RyaXZlciAqZHJpdmVyKTsKIGludCBhY3BpX2J1c19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICoqY2hpbGQsIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LAogCQkgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSk7CitpbnQgYWNwaV9idXNfdHJpbShzdHJ1Y3QgYWNwaV9kZXZpY2UgKnN0YXJ0LCBpbnQgcm1kZXZpY2UpOwogaW50IGFjcGlfYnVzX3N0YXJ0KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIAogaW50IGFjcGlfbWF0Y2hfaWRzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBjaGFyICppZHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaW8uaCBiL2luY2x1ZGUvYXNtLWFscGhhL2lvLmgKaW5kZXggODcxZGQ3YS4uM2ViYmVlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9pby5oCkBAIC01MzQsOSArNTM0LDYgQEAKICNkZWZpbmUgZXRoX2lvX2NvcHlfYW5kX3N1bShza2Isc3JjLGxlbix1bnVzZWQpIFwKICAgbWVtY3B5X2Zyb21pbygoc2tiKS0+ZGF0YSxzcmMsbGVuKQogCi0jZGVmaW5lIGlzYV9ldGhfaW9fY29weV9hbmRfc3VtKHNrYixzcmMsbGVuLHVudXNlZCkgXAotICBpc2FfbWVtY3B5X2Zyb21pbygoc2tiKS0+ZGF0YSxzcmMsbGVuKQotCiBzdGF0aWMgaW5saW5lIGludAogY2hlY2tfc2lnbmF0dXJlKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqaW9fYWRkciwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2lnbmF0dXJlLCBpbnQgbGVuZ3RoKQpAQCAtNTUwLDg3ICs1NDcsNiBAQAogCXJldHVybiAxOwogfQogCi0KLS8qCi0gKiBJU0Egc3BhY2UgaXMgbWFwcGVkIHRvIHNvbWUgbWFjaGluZS1zcGVjaWZpYyBsb2NhdGlvbiBvbiBBbHBoYS4KLSAqIENhbGwgaW50byB0aGUgZXhpc3RpbmcgaG9va3MgdG8gZ2V0IHRoZSBhZGRyZXNzIHRyYW5zbGF0ZWQuCi0gKi8KLQotc3RhdGljIGlubGluZSB1OAotaXNhX3JlYWRiKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXZvaWQgX19pb21lbSAqYWRkciA9IGlvcmVtYXAob2Zmc2V0LCAxKTsKLQl1OCByZXQgPSByZWFkYihhZGRyKTsKLQlpb3VubWFwKGFkZHIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2Ci1pc2FfcmVhZHcodW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gaW9yZW1hcChvZmZzZXQsIDIpOwotCXUxNiByZXQgPSByZWFkdyhhZGRyKTsKLQlpb3VubWFwKGFkZHIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyCi1pc2FfcmVhZGwodW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gaW9yZW1hcChvZmZzZXQsIDIpOwotCXUzMiByZXQgPSByZWFkbChhZGRyKTsKLQlpb3VubWFwKGFkZHIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaXNhX3dyaXRlYih1OCBiLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBpb3JlbWFwKG9mZnNldCwgMik7Ci0Jd3JpdGViKGIsIGFkZHIpOwotCWlvdW5tYXAoYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaXNhX3dyaXRldyh1MTYgdywgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gaW9yZW1hcChvZmZzZXQsIDIpOwotCXdyaXRldyh3LCBhZGRyKTsKLQlpb3VubWFwKGFkZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWlzYV93cml0ZWwodTMyIGwsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXZvaWQgX19pb21lbSAqYWRkciA9IGlvcmVtYXAob2Zmc2V0LCAyKTsKLQl3cml0ZWwobCwgYWRkcik7Ci0JaW91bm1hcChhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1pc2FfbWVtc2V0X2lvKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1OCB2YWwsIGxvbmcgbikKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBpb3JlbWFwKG9mZnNldCwgbik7Ci0JbWVtc2V0X2lvKGFkZHIsIHZhbCwgbik7Ci0JaW91bm1hcChhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1pc2FfbWVtY3B5X2Zyb21pbyh2b2lkICpkZXN0LCB1bnNpZ25lZCBsb25nIG9mZnNldCwgbG9uZyBuKQotewotCXZvaWQgX19pb21lbSAqYWRkciA9IGlvcmVtYXAob2Zmc2V0LCBuKTsKLQltZW1jcHlfZnJvbWlvKGRlc3QsIGFkZHIsIG4pOwotCWlvdW5tYXAoYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaXNhX21lbWNweV90b2lvKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCB2b2lkICpzcmMsIGxvbmcgbikKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBpb3JlbWFwKG9mZnNldCwgbik7Ci0JbWVtY3B5X3RvaW8oYWRkciwgc3JjLCBuKTsKLQlpb3VubWFwKGFkZHIpOwotfQotCiAvKgogICogVGhlIEFscGhhIEplbnNlbiBoYXJkd2FyZSBmb3Igc29tZSByYXRoZXIgc3RyYW5nZSByZWFzb24gcHV0cwogICogdGhlIFJUQyBjbG9jayBhdCAweDE3MCBpbnN0ZWFkIG9mIDB4NzAuIFByb2JhYmx5IGR1ZSB0byBzb21lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbW11X2NvbnRleHQuaAppbmRleCA2ZjkyNDgyLi4wYzAxN2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL21tdV9jb250ZXh0LmgKQEAgLTIzMSw5ICsyMzEsOCBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKLQkJaWYgKGNwdV9vbmxpbmUoaSkpCi0JCQltbS0+Y29udGV4dFtpXSA9IDA7CisJZm9yX2VhY2hfb25saW5lX2NwdShpKQorCQltbS0+Y29udGV4dFtpXSA9IDA7CiAJaWYgKHRzayAhPSBjdXJyZW50KQogCQl0YXNrX3RocmVhZF9pbmZvKHRzayktPnBjYi5wdGJyCiAJCSAgPSAoKHVuc2lnbmVkIGxvbmcpbW0tPnBnZCAtIElERU5UX0FERFIpID4+IFBBR0VfU0hJRlQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wb2xsLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wb2xsLmgKaW5kZXggMzRmMzMzYi4uOTU3MDcxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BvbGwuaApAQCAtMTMsNiArMTMsOCBAQAogI2RlZmluZSBQT0xMV1JCQU5ECSgxIDw8IDkpCiAjZGVmaW5lIFBPTExNU0cJCSgxIDw8IDEwKQogI2RlZmluZSBQT0xMUkVNT1ZFCSgxIDw8IDExKQorI2RlZmluZSBQT0xMUkRIVVAgICAgICAgKDEgPDwgMTIpCisKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3RvcG9sb2d5LmgKaW5kZXggZWI3NDBlMi4uNDIwY2NkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvdG9wb2xvZ3kuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS90b3BvbG9neS5oCkBAIC0yNyw4ICsyNyw4IEBACiAJY3B1bWFza190IG5vZGVfY3B1X21hc2sgPSBDUFVfTUFTS19OT05FOwogCWludCBjcHU7CiAKLQlmb3IoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgY3B1KyspIHsKLQkJaWYgKGNwdV9vbmxpbmUoY3B1KSAmJiAoY3B1X3RvX25vZGUoY3B1KSA9PSBub2RlKSkKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoY3B1X3RvX25vZGUoY3B1KSA9PSBub2RlKQogCQkJY3B1X3NldChjcHUsIG5vZGVfY3B1X21hc2spOwogCX0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOTkzNmMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvcGFyYW0uaAotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgTmljb2xhcyBCZWxsaWRvIFkgT3J0ZWdhCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfUEFSQU1fSAotI2RlZmluZSBfX0FTTV9BUkNIX1BBUkFNX0gKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUEFSQU1fSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfZW1hYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX2VtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmMwOTFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX2VtYWMuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9lbWFjLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSXZhbiBLb2tzaGF5c2t5CisgKiBDb3B5cmlnaHQgKEMpIFNBTiBQZW9wbGUKKyAqCisgKiBFdGhlcm5ldCBNQUMgcmVnaXN0ZXJzLgorICogQmFzZWQgb24gQVQ5MVJNOTIwMCBkYXRhc2hlZXQgcmV2aXNpb24gRS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQVQ5MVJNOTIwMF9FTUFDX0gKKyNkZWZpbmUgQVQ5MVJNOTIwMF9FTUFDX0gKKworI2RlZmluZQlBVDkxX0VNQUNfQ1RMCQkweDAwCS8qIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19MQgkJKDEgPDwgIDApCS8qIExvb3BiYWNrICovCisjZGVmaW5lCQlBVDkxX0VNQUNfTEJMCQkoMSA8PCAgMSkJLyogTG9vcGJhY2sgTG9jYWwgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19SRQkJKDEgPDwgIDIpCS8qIFJlY2VpdmUgRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX0VNQUNfVEUJCSgxIDw8ICAzKQkvKiBUcmFuc21pdCBFbmFibGUgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19NUEUJCSgxIDw8ICA0KQkvKiBNYW5hZ2VtZW50IFBvcnQgRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX0VNQUNfQ1NSCQkoMSA8PCAgNSkJLyogQ2xlYXIgU3RhdGlzdGljcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19JTkNTVEFUCSgxIDw8ICA2KQkvKiBJbmNyZW1lbnQgU3RhdGlzdGljcyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19XRVMJCSgxIDw8ICA3KQkvKiBXcml0ZSBFbmFibGUgZm9yIFN0YXRpc3RpY3MgUmVnaXN0ZXJzICovCisjZGVmaW5lCQlBVDkxX0VNQUNfQlAJCSgxIDw8ICA4KQkvKiBCYWNrIFByZXNzdXJlICovCisKKyNkZWZpbmUJQVQ5MV9FTUFDX0NGRwkJMHgwNAkvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0VNQUNfU1BECQkoMSA8PCAgMCkJLyogU3BlZWQgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19GRAkJKDEgPDwgIDEpCS8qIEZ1bGwgRHVwbGV4ICovCisjZGVmaW5lCQlBVDkxX0VNQUNfQlIJCSgxIDw8ICAyKQkvKiBCaXQgUmF0ZSAqLworI2RlZmluZQkJQVQ5MV9FTUFDX0NBRgkJKDEgPDwgIDQpCS8qIENvcHkgQWxsIEZyYW1lcyAqLworI2RlZmluZQkJQVQ5MV9FTUFDX05CQwkJKDEgPDwgIDUpCS8qIE5vIEJyb2FkY2FzdCAqLworI2RlZmluZQkJQVQ5MV9FTUFDX01USQkJKDEgPDwgIDYpCS8qIE11bHRpY2FzdCBIYXNoIEVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9FTUFDX1VOSQkJKDEgPDwgIDcpCS8qIFVuaWNhc3QgSGFzaCBFbmFibGUgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19CSUcJCSgxIDw8ICA4KQkvKiBSZWNlaXZlIDE1MjIgQnl0ZXMgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19FQUUJCSgxIDw8ICA5KQkvKiBFeHRlcm5hbCBBZGRyZXNzIE1hdGNoIEVuYWJsZSAqLworI2RlZmluZQkJQVQ5MV9FTUFDX0NMSwkJKDMgPDwgMTApCS8qIE1EQyBDbG9jayBEaXZpc29yICovCisjZGVmaW5lCQlBVDkxX0VNQUNfQ0xLX0RJVjgJCSgwIDw8IDEwKQorI2RlZmluZQkJQVQ5MV9FTUFDX0NMS19ESVYxNgkJKDEgPDwgMTApCisjZGVmaW5lCQlBVDkxX0VNQUNfQ0xLX0RJVjMyCQkoMiA8PCAxMCkKKyNkZWZpbmUJCUFUOTFfRU1BQ19DTEtfRElWNjQJCSgzIDw8IDEwKQorI2RlZmluZQkJQVQ5MV9FTUFDX1JUWQkJKDEgPDwgMTIpCS8qIFJldHJ5IFRlc3QgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19STUlJCQkoMSA8PCAxMykJLyogUmVkdWNlIE1JSSAoUk1JSSkgKi8KKworI2RlZmluZQlBVDkxX0VNQUNfU1IJCTB4MDgJLyogU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0VNQUNfU1JfTElOSwkoMSA8PCAgMCkJLyogTGluayAqLworI2RlZmluZQkJQVQ5MV9FTUFDX1NSX01ESU8JKDEgPDwgIDEpCS8qIE1ESU8gcGluICovCisjZGVmaW5lCQlBVDkxX0VNQUNfU1JfSURMRQkoMSA8PCAgMikJLyogUEhZIGlkbGUgKi8KKworI2RlZmluZQlBVDkxX0VNQUNfVEFSCQkweDBjCS8qIFRyYW5zbWl0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKworI2RlZmluZQlBVDkxX0VNQUNfVENSCQkweDEwCS8qIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19MRU4JCSgweDdmZiA8PCAwKQkvKiBUcmFuc21pdCBGcmFtZSBMZW5ndGggKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19OQ1JDCQkoMSAgICAgPDwgMTUpCS8qIE5vIENSQyAqLworCisjZGVmaW5lCUFUOTFfRU1BQ19UU1IJCTB4MTQJLyogVHJhbnNtaXQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0VNQUNfVFNSX09WUgkoMSA8PCAgMCkJLyogVHJhbnNtaXQgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19UU1JfQ09MCSgxIDw8ICAxKQkvKiBDb2xsaXNpb24gT2NjdXJyZWQgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19UU1JfUkxFCSgxIDw8ICAyKQkvKiBSZXRyeSBMaW1pdCBFeGNlZWRlZCAqLworI2RlZmluZQkJQVQ5MV9FTUFDX1RTUl9JRExFCSgxIDw8ICAzKQkvKiBUcmFuc21pdHRlciBJZGxlICovCisjZGVmaW5lCQlBVDkxX0VNQUNfVFNSX0JOUQkoMSA8PCAgNCkJLyogVHJhbnNtaXQgQnVmZmVyIG5vdCBRdWV1ZWQgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19UU1JfQ09NUAkoMSA8PCAgNSkJLyogVHJhbnNtaXQgQ29tcGxldGUgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19UU1JfVU5ECSgxIDw8ICA2KQkvKiBUcmFuc21pdCBVbmRlcnJ1biAqLworCisjZGVmaW5lCUFUOTFfRU1BQ19SQlFQCQkweDE4CS8qIFJlY2VpdmUgQnVmZmVyIFF1ZXVlIFBvaW50ZXIgKi8KKworI2RlZmluZQlBVDkxX0VNQUNfUlNSCQkweDIwCS8qIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0VNQUNfUlNSX0JOQQkoMSA8PCAgMCkJLyogQnVmZmVyIE5vdCBBdmFpbGFibGUgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19SU1JfUkVDCSgxIDw8ICAxKQkvKiBGcmFtZSBSZWNlaXZlZCAqLworI2RlZmluZQkJQVQ5MV9FTUFDX1JTUl9PVlIJKDEgPDwgIDIpCS8qIFJYIE92ZXJydW4gKi8KKworI2RlZmluZQlBVDkxX0VNQUNfSVNSCQkweDI0CS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19ET05FCQkoMSA8PCAgMCkJLyogTWFuYWdlbWVudCBEb25lICovCisjZGVmaW5lCQlBVDkxX0VNQUNfUkNPTQkJKDEgPDwgIDEpCS8qIFJlY2VpdmUgQ29tcGxldGUgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19SQk5BCQkoMSA8PCAgMikJLyogUmVjZWl2ZSBCdWZmZXIgTm90IEF2YWlsYWJsZSAqLworI2RlZmluZQkJQVQ5MV9FTUFDX1RPVlIJCSgxIDw8ICAzKQkvKiBUcmFuc21pdCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZQkJQVQ5MV9FTUFDX1RVTkQJCSgxIDw8ICA0KQkvKiBUcmFuc21pdCBCdWZmZXIgVW5kZXJydW4gKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19SVFJZCQkoMSA8PCAgNSkJLyogUmV0cnkgTGltaXQgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19UQlJFCQkoMSA8PCAgNikJLyogVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyIEVtcHR5ICovCisjZGVmaW5lCQlBVDkxX0VNQUNfVENPTQkJKDEgPDwgIDcpCS8qIFRyYW5zbWl0IENvbXBsZXRlICovCisjZGVmaW5lCQlBVDkxX0VNQUNfVElETEUJCSgxIDw8ICA4KQkvKiBUcmFuc21pdCBJZGxlICovCisjZGVmaW5lCQlBVDkxX0VNQUNfTElOSwkJKDEgPDwgIDkpCS8qIExpbmsgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19ST1ZSCQkoMSA8PCAxMCkJLyogUlggT3ZlcnJ1biAqLworI2RlZmluZQkJQVQ5MV9FTUFDX0FCVAkJKDEgPDwgMTEpCS8qIEFib3J0ICovCisKKyNkZWZpbmUJQVQ5MV9FTUFDX0lFUgkJMHgyOAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfRU1BQ19JRFIJCTB4MmMJLyogSW50ZXJydXB0IERpc2FibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9FTUFDX0lNUgkJMHgzMAkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworCisjZGVmaW5lCUFUOTFfRU1BQ19NQU4JCTB4MzQJLyogUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX0VNQUNfREFUQQkJKDB4ZmZmZiA8PCAwKQkvKiBNRElPIERhdGEgKi8KKyNkZWZpbmUJCUFUOTFfRU1BQ19SRUdBCQkoMHgxZgk8PCAxOCkJLyogTURJTyBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9FTUFDX1BIWUEJCSgweDFmCTw8IDIzKQkvKiBNRElPIFBIWSBBZGRyZXNzICovCisjZGVmaW5lCQlBVDkxX0VNQUNfUlcJCSgzCTw8IDI4KQkvKiBSZWFkL1dyaXRlIG9wZXJhdGlvbiAqLworI2RlZmluZQkJCUFUOTFfRU1BQ19SV19XCQkoMSA8PCAyOCkKKyNkZWZpbmUJCQlBVDkxX0VNQUNfUldfUgkJKDIgPDwgMjgpCisjZGVmaW5lCQlBVDkxX0VNQUNfTUFOXzgwMl8zCTB4NDAwMjAwMDAJLyogSUVFRSA4MDIuMyB2YWx1ZSAqLworCisvKgorICogU3RhdGlzdGljcyBSZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX0ZSQQkJMHg0MAkvKiBGcmFtZXMgVHJhbnNtaXR0ZWQgT0sgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX1NDT0wJCTB4NDQJLyogU2luZ2xlIENvbGxpc2lvbiBGcmFtZSAqLworI2RlZmluZSBBVDkxX0VNQUNfTUNPTAkJMHg0OAkvKiBNdWx0aXBsZSBDb2xsaXNpb24gRnJhbWUgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX09LCQkweDRjCS8qIEZyYW1lcyBSZWNlaXZlZCBPSyAqLworI2RlZmluZSBBVDkxX0VNQUNfU0VRRQkJMHg1MAkvKiBGcmFtZSBDaGVjayBTZXF1ZW5jZSBFcnJvciAqLworI2RlZmluZSBBVDkxX0VNQUNfQUxFCQkweDU0CS8qIEFsaWdubWVtdCBFcnJvciAqLworI2RlZmluZSBBVDkxX0VNQUNfRFRFCQkweDU4CS8qIERlZmZlcmVkIFRyYW5zbWlzc2lvbiBGcmFtZSAqLworI2RlZmluZSBBVDkxX0VNQUNfTENPTAkJMHg1YwkvKiBMYXRlIENvbGxpc2lvbiAqLworI2RlZmluZSBBVDkxX0VNQUNfRUNPTAkJMHg2MAkvKiBFeGNlc3NpdmUgQ29sbGlzaW9uICovCisjZGVmaW5lIEFUOTFfRU1BQ19UVUUJCTB4NjQJLyogVHJhbnNtaXQgVW5kZXJydW4gRXJyb3IgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX0NTRQkJMHg2OAkvKiBDYXJyaWVyIFNlbnNlIEVycm9yICovCisjZGVmaW5lIEFUOTFfRU1BQ19EUkZDCQkweDZjCS8qIERpc2NhcmQgUlggRnJhbWUgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX1JPVgkJMHg3MAkvKiBSZWNlaXZlIE92ZXJydW4gKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX0NERQkJMHg3NAkvKiBDb2RlIEVycm9yICovCisjZGVmaW5lIEFUOTFfRU1BQ19FTFIJCTB4NzgJLyogRXhjZXNzaXZlIExlbmd0aCBFcnJvciAqLworI2RlZmluZSBBVDkxX0VNQUNfUkpCCQkweDdjCS8qIFJlY2VpdmUgSmFiYmVyICovCisjZGVmaW5lIEFUOTFfRU1BQ19VU0YJCTB4ODAJLyogVW5kZXJzaXplIEZyYW1lICovCisjZGVmaW5lIEFUOTFfRU1BQ19TUUVFCQkweDg0CS8qIFNRRSBUZXN0IEVycm9yICovCisKKy8qCisgKiBBZGRyZXNzIFJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBBVDkxX0VNQUNfSFNMCQkweDkwCS8qIEhhc2ggQWRkcmVzcyBMb3cgWzMxOjBdICovCisjZGVmaW5lIEFUOTFfRU1BQ19IU0gJCTB4OTQJLyogSGFzaCBBZGRyZXNzIEhpZ2ggWzYzOjMyXSAqLworI2RlZmluZSBBVDkxX0VNQUNfU0ExTAkJMHg5OAkvKiBTcGVjaWZpYyBBZGRyZXNzIDEgTG93LCBieXRlcyAwLTMgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX1NBMUgJCTB4OWMJLyogU3BlY2lmaWMgQWRkcmVzcyAxIEhpZ2gsIGJ5dGVzIDQtNSAqLworI2RlZmluZSBBVDkxX0VNQUNfU0EyTAkJMHhhMAkvKiBTcGVjaWZpYyBBZGRyZXNzIDIgTG93LCBieXRlcyAwLTMgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX1NBMkgJCTB4YTQJLyogU3BlY2lmaWMgQWRkcmVzcyAyIEhpZ2gsIGJ5dGVzIDQtNSAqLworI2RlZmluZSBBVDkxX0VNQUNfU0EzTAkJMHhhOAkvKiBTcGVjaWZpYyBBZGRyZXNzIDMgTG93LCBieXRlcyAwLTMgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX1NBM0gJCTB4YWMJLyogU3BlY2lmaWMgQWRkcmVzcyAzIEhpZ2gsIGJ5dGVzIDQtNSAqLworI2RlZmluZSBBVDkxX0VNQUNfU0E0TAkJMHhiMAkvKiBTcGVjaWZpYyBBZGRyZXNzIDQgTG93LCBieXRlcyAwLTMgKi8KKyNkZWZpbmUgQVQ5MV9FTUFDX1NBNEgJCTB4YjQJLyogU3BlY2lmaWMgQWRkcmVzcyA0IEhpZ2gsIGJ5dGVzIDQtNSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ncGlvLmgKaW5kZXggMGYwYTYxZS4uNjE3NmFiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9ncGlvLmgKQEAgLTE4Myw2ICsxODMsNyBAQAogZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX2lucHV0KHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOwogZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX291dHB1dCh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSk7CiBleHRlcm4gaW50IGF0OTFfc2V0X2RlZ2xpdGNoKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKTsKK2V4dGVybiBpbnQgYXQ5MV9zZXRfbXVsdGlfZHJpdmUodW5zaWduZWQgcGluLCBpbnQgaXNfb24pOwogCiAvKiBjYWxsYWJsZSBhdCBhbnkgdGltZSAqLwogZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ4MGY4NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9wYXJhbS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMyBTQU4gUGVvcGxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9QQVJBTV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfUEFSQU1fSAotCi0vKgotICogV2UgdXNlIGRlZmF1bHQgcGFyYW1zCi0gKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9kZWJ1Zy1tYWNyby5TCmluZGV4IGE1ZDQ4OWQuLjlhMmI2N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9kZWJ1Zy1tYWNyby5TCkBAIC0xNywxNSArMTcsNSBAQAogCQlvcnIJXHJ4LCBccngsICMweDAwMDAwYmUwCiAJCS5lbmRtCiAKLQkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4Ci0JCXN0cmIJXHJkLCBbXHJ4XQotCQkuZW5kbQotCi0JCS5tYWNybwlidXN5dWFydCxyZCxyeAotCQkuZW5kbQotCi0JCS5tYWNybwl3YWl0dWFydCxyZCxyeAotMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjMHgxNF0KLQkJdHN0CVxyZCwgIzB4MjAKLQkJYmVxCTEwMDFiCi0JCS5lbmRtCisjZGVmaW5lIFVBUlRfU0hJRlQJMgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzRiZjY5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9wYXJhbS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE5leHVzIEVsZWN0cm9uaWNzIEx0ZAotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZmNmJkMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9wYXJhbS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvZGVidWctbWFjcm8uUwppbmRleCBkY2QwM2E0Li5mNjFjYWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9kZWJ1Zy1tYWNyby5TCkBAIC0xNiwxOSArMTYsNiBAQAogCQlvcnIJXHJ4LCBccngsICMweDAwMDAwYmUwCiAJCS5lbmRtCiAKLQkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4Ci0JCXN0cmIJXHJkLCBbXHJ4XQotCQkuZW5kbQotCi0JCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMjoJCWxkcmIJXHJkLCBbXHJ4LCAjMHgxNF0KLQkJYW5kCVxyZCwgXHJkLCAjMHg2MAotCQl0ZXEJXHJkLCAjMHg2MAotCQlibmUJMTAwMmIKLQkJLmVuZG0KLQotCQkubWFjcm8Jd2FpdHVhcnQscmQscngKLTEwMDE6CQlsZHJiCVxyZCwgW1xyeCwgIzB4MThdCi0JCXRzdAlccmQsICMweDEwCi0JCWJlcQkxMDAxYgotCQkuZW5kbQorI2RlZmluZSBVQVJUX1NISUZUCTIKKyNkZWZpbmUgRkxPV19DT05UUk9MCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLTgyNTAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2ExMTAvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUxOWIwOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMTEwL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTExMC9wYXJhbS5oCi0gKi8KLSNkZWZpbmUgSFoJMjAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2RlYnVnLW1hY3JvLlMKaW5kZXggOTdkMTVmYy4uYjQ4Y2VjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvZGVidWctbWFjcm8uUwpAQCAtMjMsMjIgKzIzLDEwIEBACiAJCW9ycglccngsIFxyeCwgIzB4MDAwMDAzZjgKIAkJLmVuZG0KIAotCQkubWFjcm8Jc2VuZHVhcnQscmQscngKLQkJc3RyYglccmQsIFtccnhdCi0JCS5lbmRtCisjZGVmaW5lIFVBUlRfU0hJRlQJMAorI2RlZmluZSBGTE9XX0NPTlRST0wKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgogCi0JCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMjoJCWxkcmIJXHJkLCBbXHJ4LCAjMHg1XQotCQlhbmQJXHJkLCBccmQsICMweDYwCi0JCXRlcQlccmQsICMweDYwCi0JCWJuZQkxMDAyYgotCQkuZW5kbQotCi0JCS5tYWNybwl3YWl0dWFydCxyZCxyeAotMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjMHg2XQotCQl0c3QJXHJkLCAjMHgxMAotCQliZXEJMTAwMWIKLQkJLmVuZG0KICNlbHNlCiAJLyogRm9yIEVCU0EyODUgZGVidWdnaW5nICovCiAJCS5lcXUJZGMyMTI4NV9oaWdoLCBBUk1DU1JfQkFTRSAmIDB4ZmYwMDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyNzEwMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9wYXJhbS5oCi0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3NTY1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZGVidWctbWFjcm8uUworICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9lcDkzeHgtcmVncy5oPgorCisJCS5tYWNybwlhZGRydWFydCxyeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCQlAIE1NVSBlbmFibGVkPworCQlsZHJlcQlccngsID1FUDkzWFhfQVBCX1BIWVNfQkFTRQlAIFBoeXNpY2FsIGJhc2UKKwkJbGRybmUJXHJ4LCA9RVA5M1hYX0FQQl9WSVJUX0JBU0UJQCB2aXJ0dWFsIGJhc2UKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDBjMDAwMAorCQkuZW5kbQorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLXBsMDF4LlM+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4YjNhYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9kbWEuaApAQCAtMCwwICsxLDMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZG1hLmgKKyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDE0MGEyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9lbnRyeS1tYWNyby5TCisgKiBJUlEgZGVtdWx0aXBsZXhpbmcgZm9yIEVQOTN4eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8YXNtL2FyY2gvZXA5M3h4LXJlZ3MuaD4KKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJCWxkcglcYmFzZSwgPShFUDkzWFhfQUhCX1ZJUlRfQkFTRSkKKwkJb3JyCVxiYXNlLCBcYmFzZSwgIzB4MDAwYjAwMDAKKwkJbW92CVxpcnFuciwgIzAKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2VdCQlAIGxvd2VyIDMyIGludGVycnVwdHMKKwkJY21wCVxpcnFzdGF0LCAjMAorCQlibmUJMTAwMWYKKworCQllb3IJXGJhc2UsIFxiYXNlLCAjMHgwMDA3MDAwMAorCQlsZHIJXGlycXN0YXQsIFtcYmFzZV0JCUAgdXBwZXIgMzIgaW50ZXJydXB0cworCQljbXAJXGlycXN0YXQsICMwCisJCWJlcQkxMDAyZgorCQltb3YJXGlycW5yLCAjMHgyMAorCisxMDAxOgorCQltb3ZzCVx0bXAsIFxpcnFzdGF0LCBsc2wgIzE2CisJCW1vdm5lCVxpcnFzdGF0LCBcdG1wCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMTYKKworCQltb3ZzCVx0bXAsIFxpcnFzdGF0LCBsc2wgIzgKKwkJbW92bmUJXGlycXN0YXQsIFx0bXAKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICM4CisKKwkJbW92cwlcdG1wLCBcaXJxc3RhdCwgbHNsICM0CisJCW1vdm5lCVxpcnFzdGF0LCBcdG1wCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjNAorCisJCW1vdnMJXHRtcCwgXGlycXN0YXQsIGxzbCAjMgorCQltb3ZuZQlcaXJxc3RhdCwgXHRtcAorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzIKKworCQltb3ZzCVx0bXAsIFxpcnFzdGF0LCBsc2wgIzEKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMxCisJCW9ycnMJXGJhc2UsIFxiYXNlLCAjMQorCisxMDAyOgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2VwOTN4eC1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZXA5M3h4LXJlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWNlYTBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2VwOTN4eC1yZWdzLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZXA5M3h4LXJlZ3MuaAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9FUDkzWFhfUkVHU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRVA5M1hYX1JFR1NfSAorCisvKgorICogRVA5M3h4IGxpbnV4IG1lbW9yeSBtYXA6CisgKgorICogdmlydAkJcGh5cwkJc2l6ZQorICogZmU4MDAwMDAJCQk1TQkJcGVyLXBsYXRmb3JtIG1hcHBpbmdzCisgKiBmZWQwMDAwMAk4MDgwMDAwMAkyTQkJQVBCCisgKiBmZWYwMDAwMAk4MDAwMDAwMAkxTQkJQUhCCisgKi8KKworI2RlZmluZSBFUDkzWFhfQUhCX1BIWVNfQkFTRQkJMHg4MDAwMDAwMAorI2RlZmluZSBFUDkzWFhfQUhCX1ZJUlRfQkFTRQkJMHhmZWYwMDAwMAorI2RlZmluZSBFUDkzWFhfQUhCX1NJWkUJCQkweDAwMTAwMDAwCisKKyNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTX0JBU0UJCTB4ODA4MDAwMDAKKyNkZWZpbmUgRVA5M1hYX0FQQl9WSVJUX0JBU0UJCTB4ZmVkMDAwMDAKKyNkZWZpbmUgRVA5M1hYX0FQQl9TSVpFCQkJMHgwMDIwMDAwMAorCisKKy8qIEFIQiBwZXJpcGhlcmFscyAqLworI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDAwMDAwKQorCisjZGVmaW5lIEVQOTNYWF9FVEhFUk5FVF9CQVNFCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDEwMDAwKQorCisjZGVmaW5lIEVQOTNYWF9VU0JfQkFTRQkJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwMjAwMDApCisjZGVmaW5lIEVQOTNYWF9VU0JfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDIwMDAwKQorCisjZGVmaW5lIEVQOTNYWF9SQVNURVJfQkFTRQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAzMDAwMCkKKworI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDQwMDAwKQorCisjZGVmaW5lIEVQOTNYWF9TRFJBTV9DT05UUk9MTEVSX0JBU0UJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDA2MDAwMCkKKworI2RlZmluZSBFUDkzWFhfUENNQ0lBX0NPTlRST0xMRVJfQkFTRQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDgwMDAwKQorCisjZGVmaW5lIEVQOTNYWF9CT09UX1JPTV9CQVNFCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDkwMDAwKQorCisjZGVmaW5lIEVQOTNYWF9JREVfQkFTRQkJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwYTAwMDApCisKKyNkZWZpbmUgRVA5M1hYX1ZJQzFfQkFTRQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDBiMDAwMCkKKworI2RlZmluZSBFUDkzWFhfVklDMl9CQVNFCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMGMwMDAwKQorCisKKy8qIEFQQiBwZXJpcGhlcmFscyAqLworI2RlZmluZSBFUDkzWFhfVElNRVJfQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDAxMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSX1JFRyh4KQkJKEVQOTNYWF9USU1FUl9CQVNFICsgKHgpKQorI2RlZmluZSBFUDkzWFhfVElNRVIxX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHgwMCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMV9WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDA0KQorI2RlZmluZSBFUDkzWFhfVElNRVIxX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHgwOCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMV9DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDBjKQorI2RlZmluZSBFUDkzWFhfVElNRVIyX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHgyMCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMl9WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDI0KQorI2RlZmluZSBFUDkzWFhfVElNRVIyX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHgyOCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSMl9DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDJjKQorI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0xPVwkJRVA5M1hYX1RJTUVSX1JFRygweDYwKQorI2RlZmluZSBFUDkzWFhfVElNRVI0X1ZBTFVFX0hJR0gJRVA5M1hYX1RJTUVSX1JFRygweDY0KQorI2RlZmluZSBFUDkzWFhfVElNRVIzX0xPQUQJCUVQOTNYWF9USU1FUl9SRUcoMHg4MCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSM19WQUxVRQkJRVA5M1hYX1RJTUVSX1JFRygweDg0KQorI2RlZmluZSBFUDkzWFhfVElNRVIzX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHg4OCkKKyNkZWZpbmUgRVA5M1hYX1RJTUVSM19DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDhjKQorCisjZGVmaW5lIEVQOTNYWF9JMlNfQkFTRQkJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwMjAwMDApCisKKyNkZWZpbmUgRVA5M1hYX1NFQ1VSSVRZX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwMzAwMDApCisKKyNkZWZpbmUgRVA5M1hYX0dQSU9fQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDA0MDAwMCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fUkVHKHgpCQkoRVA5M1hYX0dQSU9fQkFTRSArICh4KSkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfVFlQRTEJCUVQOTNYWF9HUElPX1JFRygweDkwKQorI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMgkJRVA5M1hYX0dQSU9fUkVHKDB4OTQpCisjZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX0FDSwkJRVA5M1hYX0dQSU9fUkVHKDB4OTgpCisjZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX0VOQUJMRQlFUDkzWFhfR1BJT19SRUcoMHg5YykKKyNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfU1RBVFVTCUVQOTNYWF9HUElPX1JFRygweGEwKQorI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9UWVBFMQkJRVA5M1hYX0dQSU9fUkVHKDB4YWMpCisjZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1RZUEUyCQlFUDkzWFhfR1BJT19SRUcoMHhiMCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfQUNLCQlFUDkzWFhfR1BJT19SRUcoMHhiNCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweGI4KQorI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YmMpCisKKyNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDA4MDAwMCkKKworI2RlZmluZSBFUDkzWFhfU1BJX0JBU0UJCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMGEwMDAwKQorCisjZGVmaW5lIEVQOTNYWF9JUkRBX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwYjAwMDApCisKKyNkZWZpbmUgRVA5M1hYX1VBUlQxX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwYzAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUMV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwYzAwMDApCisKKyNkZWZpbmUgRVA5M1hYX1VBUlQyX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwZDAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUMl9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwZDAwMDApCisKKyNkZWZpbmUgRVA5M1hYX1VBUlQzX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwZTAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUM19QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwZTAwMDApCisKKyNkZWZpbmUgRVA5M1hYX0tFWV9NQVRSSVhfQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDBmMDAwMCkKKworI2RlZmluZSBFUDkzWFhfQURDX0JBU0UJCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMTAwMDAwKQorI2RlZmluZSBFUDkzWFhfVE9VQ0hTQ1JFRU5fQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDEwMDAwMCkKKworI2RlZmluZSBFUDkzWFhfUFdNX0JBU0UJCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMTEwMDAwKQorCisjZGVmaW5lIEVQOTNYWF9SVENfQkFTRQkJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAxMjAwMDApCisKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMTMwMDAwKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1JFRyh4KQkJKEVQOTNYWF9TWVNDT05fQkFTRSArICh4KSkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9QT1dFUl9TVEFURQlFUDkzWFhfU1lTQ09OX1JFRygweDAwKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wJRVA5M1hYX1NZU0NPTl9SRUcoMHgwNCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTE9DS19VQVJUQkFVRAkweDIwMDAwMDAwCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xPQ0tfVVNIX0VOCTB4MTAwMDAwMDAKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9IQUxUCQlFUDkzWFhfU1lTQ09OX1JFRygweDA4KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NUQU5EQlkJCUVQOTNYWF9TWVNDT05fUkVHKDB4MGMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRwlFUDkzWFhfU1lTQ09OX1JFRygweDgwKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfQ1JVTkNIX0VOQUJMRQkweDAwODAwMDAwCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1dMT0NLCQlFUDkzWFhfU1lTQ09OX1JFRygweGMwKQorCisjZGVmaW5lIEVQOTNYWF9XQVRDSERPR19CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMTQwMDAwKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2dlc2JjOTMxMi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2dlc2JjOTMxMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGIzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZ2VzYmM5MzEyLmgKQEAgLTAsMCArMSwzIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2dlc2JjOTMxMi5oCisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9ncGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTE0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZ3Bpby5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2dwaW8uaAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9HUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9HUElPX0gKKworI2RlZmluZSBHUElPX0lOCQkJCTAKKyNkZWZpbmUgR1BJT19PVVQJCQkxCisKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTE9XCQkJMAorI2RlZmluZSBFUDkzWFhfR1BJT19ISUdICQkxCisKK2V4dGVybiB2b2lkIGdwaW9fbGluZV9jb25maWcoaW50IGxpbmUsIGludCBkaXJlY3Rpb24pOworZXh0ZXJuIGludCAgZ3Bpb19saW5lX2dldChpbnQgbGluZSk7CitleHRlcm4gdm9pZCBncGlvX2xpbmVfc2V0KGludCBsaW5lLCBpbnQgdmFsdWUpOworCisvKiBHUElPIHBvcnQgQS4gICovCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfQSh4KQkJKCh4KSArIDApCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRUdQSU8wCQlFUDkzWFhfR1BJT19MSU5FX0EoMCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9FR1BJTzEJCUVQOTNYWF9HUElPX0xJTkVfQSgxKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0VHUElPMgkJRVA5M1hYX0dQSU9fTElORV9BKDIpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRUdQSU8zCQlFUDkzWFhfR1BJT19MSU5FX0EoMykKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9FR1BJTzQJCUVQOTNYWF9HUElPX0xJTkVfQSg0KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0VHUElPNQkJRVA5M1hYX0dQSU9fTElORV9BKDUpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRUdQSU82CQlFUDkzWFhfR1BJT19MSU5FX0EoNikKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9FR1BJTzcJCUVQOTNYWF9HUElPX0xJTkVfQSg3KQorCisvKiBHUElPIHBvcnQgQi4gICovCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfQih4KQkJKCh4KSArIDgpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRUdQSU84CQlFUDkzWFhfR1BJT19MSU5FX0IoMCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9FR1BJTzkJCUVQOTNYWF9HUElPX0xJTkVfQigxKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0VHUElPMTAJRVA5M1hYX0dQSU9fTElORV9CKDIpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRUdQSU8xMQlFUDkzWFhfR1BJT19MSU5FX0IoMykKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9FR1BJTzEyCUVQOTNYWF9HUElPX0xJTkVfQig0KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0VHUElPMTMJRVA5M1hYX0dQSU9fTElORV9CKDUpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRUdQSU8xNAlFUDkzWFhfR1BJT19MSU5FX0IoNikKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9FR1BJTzE1CUVQOTNYWF9HUElPX0xJTkVfQig3KQorCisvKiBHUElPIHBvcnQgQy4gICovCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfQyh4KQkJKCh4KSArIDE2KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1JPVzAJCUVQOTNYWF9HUElPX0xJTkVfQygwKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1JPVzEJCUVQOTNYWF9HUElPX0xJTkVfQygxKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1JPVzIJCUVQOTNYWF9HUElPX0xJTkVfQygyKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1JPVzMJCUVQOTNYWF9HUElPX0xJTkVfQygzKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1JPVzQJCUVQOTNYWF9HUElPX0xJTkVfQyg0KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1JPVzUJCUVQOTNYWF9HUElPX0xJTkVfQyg1KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1JPVzYJCUVQOTNYWF9HUElPX0xJTkVfQyg2KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1JPVzcJCUVQOTNYWF9HUElPX0xJTkVfQyg3KQorCisvKiBHUElPIHBvcnQgRC4gICovCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRCh4KQkJKCh4KSArIDI0KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0NPTDAJCUVQOTNYWF9HUElPX0xJTkVfRCgwKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0NPTDEJCUVQOTNYWF9HUElPX0xJTkVfRCgxKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0NPTDIJCUVQOTNYWF9HUElPX0xJTkVfRCgyKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0NPTDMJCUVQOTNYWF9HUElPX0xJTkVfRCgzKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0NPTDQJCUVQOTNYWF9HUElPX0xJTkVfRCg0KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0NPTDUJCUVQOTNYWF9HUElPX0xJTkVfRCg1KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0NPTDYJCUVQOTNYWF9HUElPX0xJTkVfRCg2KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0NPTDcJCUVQOTNYWF9HUElPX0xJTkVfRCg3KQorCisvKiBHUElPIHBvcnQgRS4gICovCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRSh4KQkJKCh4KSArIDMyKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0dSTEVECQlFUDkzWFhfR1BJT19MSU5FX0UoMCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9SRExFRAkJRVA5M1hYX0dQSU9fTElORV9FKDEpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRElPUm4JCUVQOTNYWF9HUElPX0xJTkVfRSgyKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0lERUNTMW4JRVA5M1hYX0dQSU9fTElORV9FKDMpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfSURFQ1MybglFUDkzWFhfR1BJT19MSU5FX0UoNCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9JREVEQTAJCUVQOTNYWF9HUElPX0xJTkVfRSg1KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0lERURBMQkJRVA5M1hYX0dQSU9fTElORV9FKDYpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfSURFREEyCQlFUDkzWFhfR1BJT19MSU5FX0UoNykKKworLyogR1BJTyBwb3J0IEYuICAqLworI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0YoeCkJCSgoeCkgKyA0MCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9XUAkJRVA5M1hYX0dQSU9fTElORV9GKDApCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfTUNDRDEJCUVQOTNYWF9HUElPX0xJTkVfRigxKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX01DQ0QyCQlFUDkzWFhfR1BJT19MSU5FX0YoMikKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9NQ0JWRDEJCUVQOTNYWF9HUElPX0xJTkVfRigzKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX01DQlZEMgkJRVA5M1hYX0dQSU9fTElORV9GKDQpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfVlMxCQlFUDkzWFhfR1BJT19MSU5FX0YoNSkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9SRUFEWQkJRVA5M1hYX0dQSU9fTElORV9GKDYpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfVlMyCQlFUDkzWFhfR1BJT19MSU5FX0YoNykKKworLyogR1BJTyBwb3J0IEcuICAqLworI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0coeCkJCSgoeCkgKyA0OCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9FRUNMSwkJRVA5M1hYX0dQSU9fTElORV9HKDApCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfRUVEQVQJCUVQOTNYWF9HUElPX0xJTkVfRygxKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1NMQTAJCUVQOTNYWF9HUElPX0xJTkVfRygyKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX1NMQTEJCUVQOTNYWF9HUElPX0xJTkVfRygzKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0REMTIJCUVQOTNYWF9HUElPX0xJTkVfRyg0KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0REMTMJCUVQOTNYWF9HUElPX0xJTkVfRyg1KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0REMTQJCUVQOTNYWF9HUElPX0xJTkVfRyg2KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0REMTUJCUVQOTNYWF9HUElPX0xJTkVfRyg3KQorCisvKiBHUElPIHBvcnQgSC4gICovCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfSCh4KQkJKCh4KSArIDU2KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0REMAkJRVA5M1hYX0dQSU9fTElORV9IKDApCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfREQxCQlFUDkzWFhfR1BJT19MSU5FX0goMSkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9ERDIJCUVQOTNYWF9HUElPX0xJTkVfSCgyKQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0REMwkJRVA5M1hYX0dQSU9fTElORV9IKDMpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfREQ0CQlFUDkzWFhfR1BJT19MSU5FX0goNCkKKyNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9ERDUJCUVQOTNYWF9HUElPX0xJTkVfSCg1KQorI2RlZmluZSBFUDkzWFhfR1BJT19MSU5FX0RENgkJRVA5M1hYX0dQSU9fTElORV9IKDYpCisjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfREQ3CQlFUDkzWFhfR1BJT19MSU5FX0goNykKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2OWY0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvaGFyZHdhcmUuaAorICovCisKKyNpbmNsdWRlICJlcDkzeHgtcmVncy5oIgorCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCisKKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisjaW5jbHVkZSAiZ2VzYmM5MzEyLmgiCisjaW5jbHVkZSAidHM3Mnh4LmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNGQyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvaW8uaApAQCAtMCwwICsxLDggQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvaW8uaAorICovCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBfX2lvKHApCQkJKCh2b2lkIF9faW9tZW0gKikocCkpCisjZGVmaW5lIF9fbWVtX3BjaShwKQkJKHApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTQyZjVkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2lycXMuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L2lycXMuaAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0gKKworI2RlZmluZSBJUlFfRVA5M1hYX0NPTU1SWAkJMgorI2RlZmluZSBJUlFfRVA5M1hYX0NPTU1UWAkJMworI2RlZmluZSBJUlFfRVA5M1hYX1RJTUVSMQkJNAorI2RlZmluZSBJUlFfRVA5M1hYX1RJTUVSMgkJNQorI2RlZmluZSBJUlFfRVA5M1hYX0FBQ0lOVFIJCTYKKyNkZWZpbmUgSVJRX0VQOTNYWF9ETUFNMlAwCQk3CisjZGVmaW5lIElSUV9FUDkzWFhfRE1BTTJQMQkJOAorI2RlZmluZSBJUlFfRVA5M1hYX0RNQU0yUDIJCTkKKyNkZWZpbmUgSVJRX0VQOTNYWF9ETUFNMlAzCQkxMAorI2RlZmluZSBJUlFfRVA5M1hYX0RNQU0yUDQJCTExCisjZGVmaW5lIElSUV9FUDkzWFhfRE1BTTJQNQkJMTIKKyNkZWZpbmUgSVJRX0VQOTNYWF9ETUFNMlA2CQkxMworI2RlZmluZSBJUlFfRVA5M1hYX0RNQU0yUDcJCTE0CisjZGVmaW5lIElSUV9FUDkzWFhfRE1BTTJQOAkJMTUKKyNkZWZpbmUgSVJRX0VQOTNYWF9ETUFNMlA5CQkxNgorI2RlZmluZSBJUlFfRVA5M1hYX0RNQU0yTTAJCTE3CisjZGVmaW5lIElSUV9FUDkzWFhfRE1BTTJNMQkJMTgKKyNkZWZpbmUgSVJRX0VQOTNYWF9HUElPME1VWAkJMjAKKyNkZWZpbmUgSVJRX0VQOTNYWF9HUElPMU1VWAkJMjEKKyNkZWZpbmUgSVJRX0VQOTNYWF9HUElPMk1VWAkJMjIKKyNkZWZpbmUgSVJRX0VQOTNYWF9HUElPM01VWAkJMjIKKyNkZWZpbmUgSVJRX0VQOTNYWF9VQVJUMVJYCQkyMworI2RlZmluZSBJUlFfRVA5M1hYX1VBUlQxVFgJCTI0CisjZGVmaW5lIElSUV9FUDkzWFhfVUFSVDJSWAkJMjUKKyNkZWZpbmUgSVJRX0VQOTNYWF9VQVJUMlRYCQkyNgorI2RlZmluZSBJUlFfRVA5M1hYX1VBUlQzUlgJCTI3CisjZGVmaW5lIElSUV9FUDkzWFhfVUFSVDNUWAkJMjgKKyNkZWZpbmUgSVJRX0VQOTNYWF9LRVkJCQkyOQorI2RlZmluZSBJUlFfRVA5M1hYX1RPVUNICQkzMAorI2RlZmluZSBFUDkzWFhfVklDMV9WQUxJRF9JUlFfTUFTSwkweDdmZmZmZmZjCisKKyNkZWZpbmUgSVJRX0VQOTNYWF9FWFQwCQkJMzIKKyNkZWZpbmUgSVJRX0VQOTNYWF9FWFQxCQkJMzMKKyNkZWZpbmUgSVJRX0VQOTNYWF9FWFQyCQkJMzQKKyNkZWZpbmUgSVJRX0VQOTNYWF82NEhaCQkJMzUKKyNkZWZpbmUgSVJRX0VQOTNYWF9XQVRDSERPRwkJMzYKKyNkZWZpbmUgSVJRX0VQOTNYWF9SVEMJCQkzNworI2RlZmluZSBJUlFfRVA5M1hYX0lSREEJCQkzOAorI2RlZmluZSBJUlFfRVA5M1hYX0VUSEVSTkVUCQkzOQorI2RlZmluZSBJUlFfRVA5M1hYX0VYVDMJCQk0MAorI2RlZmluZSBJUlFfRVA5M1hYX1BST0cJCQk0MQorI2RlZmluZSBJUlFfRVA5M1hYXzFIWgkJCTQyCisjZGVmaW5lIElSUV9FUDkzWFhfVlNZTkMJCTQzCisjZGVmaW5lIElSUV9FUDkzWFhfVklERU9fRklGTwkJNDQKKyNkZWZpbmUgSVJRX0VQOTNYWF9TU1AxUlgJCTQ1CisjZGVmaW5lIElSUV9FUDkzWFhfU1NQMVRYCQk0NgorI2RlZmluZSBJUlFfRVA5M1hYX0dQSU80TVVYCQk0NworI2RlZmluZSBJUlFfRVA5M1hYX0dQSU81TVVYCQk0OAorI2RlZmluZSBJUlFfRVA5M1hYX0dQSU82TVVYCQk0OQorI2RlZmluZSBJUlFfRVA5M1hYX0dQSU83TVVYCQk1MAorI2RlZmluZSBJUlFfRVA5M1hYX1RJTUVSMwkJNTEKKyNkZWZpbmUgSVJRX0VQOTNYWF9VQVJUMQkJNTIKKyNkZWZpbmUgSVJRX0VQOTNYWF9TU1AJCQk1MworI2RlZmluZSBJUlFfRVA5M1hYX1VBUlQyCQk1NAorI2RlZmluZSBJUlFfRVA5M1hYX1VBUlQzCQk1NQorI2RlZmluZSBJUlFfRVA5M1hYX1VTQgkJCTU2CisjZGVmaW5lIElSUV9FUDkzWFhfRVRIRVJORVRfUE1FCQk1NworI2RlZmluZSBJUlFfRVA5M1hYX0RTUAkJCTU4CisjZGVmaW5lIElSUV9FUDkzWFhfR1BJT19BQgkJNTkKKyNkZWZpbmUgSVJRX0VQOTNYWF9TQUkJCQk2MAorI2RlZmluZSBFUDkzWFhfVklDMl9WQUxJRF9JUlFfTUFTSwkweDFmZmZmZmZmCisKKyNkZWZpbmUgSVJRX0VQOTNYWF9HUElPKHgpCQkoNjQgKyAoeCkpCisKKyNkZWZpbmUgTlJfRVA5M1hYX0lSUVMJCQlJUlFfRVA5M1hYX0dQSU8oMTYpCisKKyNkZWZpbmUgRVA5M1hYX0JPQVJEX0lSUSh4KQkJKE5SX0VQOTNYWF9JUlFTICsgKHgpKQorI2RlZmluZSBFUDkzWFhfQk9BUkRfSVJRUwkJMzIKKworI2RlZmluZSBOUl9JUlFTCQkJCShOUl9FUDkzWFhfSVJRUyArIEVQOTNYWF9CT0FSRF9JUlFTKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMWE1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvbWVtb3J5LmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9tZW1vcnkuaAorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KQlfX3BoeXNfdG9fdmlydCh4KQorI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCV9fdmlydF90b19waHlzKHgpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOWNiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvcGxhdGZvcm0uaApAQCAtMCwwICsxLDE0IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3BsYXRmb3JtLmgKKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit2b2lkIGVwOTN4eF9tYXBfaW8odm9pZCk7Cit2b2lkIGVwOTN4eF9pbml0X2lycSh2b2lkKTsKK3ZvaWQgZXA5M3h4X2luaXRfdGltZSh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgZXA5M3h4X2luaXRfZGV2aWNlcyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGVwOTN4eF90aW1lcjsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWI3MTg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3N5c3RlbS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvc3lzdGVtLmgKKyAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJdTMyIGRldmljZWNmZzsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwlkZXZpY2VjZmcgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUcpOworCV9fcmF3X3dyaXRlbCgweGFhLCBFUDkzWFhfU1lTQ09OX1NXTE9DSyk7CisJX19yYXdfd3JpdGVsKGRldmljZWNmZyB8IDB4ODAwMDAwMDAsIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRyk7CisJX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKKwlfX3Jhd193cml0ZWwoZGV2aWNlY2ZnICYgfjB4ODAwMDAwMDAsIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRyk7CisKKwl3aGlsZSAoMSkKKwkJOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTQwYmRkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3RpbWV4LmgKQEAgLTAsMCArMSw1IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3RpbWV4LmgKKyAqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJOTgzMDQwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdHM3Mnh4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdHM3Mnh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyMjE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC90czcyeHguaApAQCAtMCwwICsxLDkwIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3RzNzJ4eC5oCisgKi8KKworLyoKKyAqIFRTNzJ4eCBtZW1vcnkgbWFwOgorICoKKyAqIHZpcnQJCXBoeXMJCXNpemUKKyAqIGZlYmZmMDAwCTIyMDAwMDAwCTRLCW1vZGVsIG51bWJlciByZWdpc3RlcgorICogZmViZmUwMDAJMjI0MDAwMDAJNEsJb3B0aW9ucyByZWdpc3RlcgorICogZmViZmQwMDAJMjI4MDAwMDAJNEsJb3B0aW9ucyByZWdpc3RlciAjMgorICogZmViZmMwMDAJWzY3XTAwMDAwMDAJNEsJTkFORCBkYXRhIHJlZ2lzdGVyCisgKiBmZWJmYjAwMAlbNjddMDQwMDAwMAk0SwlOQU5EIGNvbnRyb2wgcmVnaXN0ZXIKKyAqIGZlYmZhMDAwCVs2N10wODAwMDAwCTRLCU5BTkQgYnVzeSByZWdpc3RlcgorICovCisKKyNkZWZpbmUgVFM3MlhYX01PREVMX1BIWVNfQkFTRQkJMHgyMjAwMDAwMAorI2RlZmluZSBUUzcyWFhfTU9ERUxfVklSVF9CQVNFCQkweGZlYmZmMDAwCisjZGVmaW5lIFRTNzJYWF9NT0RFTF9TSVpFCQkweDAwMDAxMDAwCisKKyNkZWZpbmUgVFM3MlhYX01PREVMX1RTNzIwMAkJMHgwMAorI2RlZmluZSBUUzcyWFhfTU9ERUxfVFM3MjUwCQkweDAxCisjZGVmaW5lIFRTNzJYWF9NT0RFTF9UUzcyNjAJCTB4MDIKKworCisjZGVmaW5lIFRTNzJYWF9PUFRJT05TX1BIWVNfQkFTRQkweDIyNDAwMDAwCisjZGVmaW5lIFRTNzJYWF9PUFRJT05TX1ZJUlRfQkFTRQkweGZlYmZlMDAwCisjZGVmaW5lIFRTNzJYWF9PUFRJT05TX1NJWkUJCTB4MDAwMDEwMDAKKworI2RlZmluZSBUUzcyWFhfT1BUSU9OU19DT00yX1JTNDg1CTB4MDIKKyNkZWZpbmUgVFM3MlhYX09QVElPTlNfTUFYMTk3CQkweDAxCisKKworI2RlZmluZSBUUzcyWFhfT1BUSU9OUzJfUEhZU19CQVNFCTB4MjI4MDAwMDAKKyNkZWZpbmUgVFM3MlhYX09QVElPTlMyX1ZJUlRfQkFTRQkweGZlYmZkMDAwCisjZGVmaW5lIFRTNzJYWF9PUFRJT05TMl9TSVpFCQkweDAwMDAxMDAwCisKKyNkZWZpbmUgVFM3MlhYX09QVElPTlMyX1RTOTQyMAkJMHgwNAorI2RlZmluZSBUUzcyWFhfT1BUSU9OUzJfVFM5NDIwX0JPT1QJMHgwMgorCisKKyNkZWZpbmUgVFM3MlhYX05PUl9QSFlTX0JBU0UJCTB4NjAwMDAwMDAKKyNkZWZpbmUgVFM3MlhYX05PUjJfUEhZU19CQVNFCQkweDYyMDAwMDAwCisKKyNkZWZpbmUgVFM3MlhYX05BTkQxX0RBVEFfUEhZU19CQVNFCTB4NjAwMDAwMDAKKyNkZWZpbmUgVFM3MlhYX05BTkQyX0RBVEFfUEhZU19CQVNFCTB4NzAwMDAwMDAKKyNkZWZpbmUgVFM3MlhYX05BTkRfREFUQV9WSVJUX0JBU0UJMHhmZWJmYzAwMAorI2RlZmluZSBUUzcyWFhfTkFORF9EQVRBX1NJWkUJCTB4MDAwMDEwMDAKKworI2RlZmluZSBUUzcyWFhfTkFORDFfQ09OVFJPTF9QSFlTX0JBU0UJMHg2MDQwMDAwMAorI2RlZmluZSBUUzcyWFhfTkFORDJfQ09OVFJPTF9QSFlTX0JBU0UJMHg3MDQwMDAwMAorI2RlZmluZSBUUzcyWFhfTkFORF9DT05UUk9MX1ZJUlRfQkFTRQkweGZlYmZiMDAwCisjZGVmaW5lIFRTNzJYWF9OQU5EX0NPTlRST0xfU0laRQkweDAwMDAxMDAwCisKKyNkZWZpbmUgVFM3MlhYX05BTkQxX0JVU1lfUEhZU19CQVNFCTB4NjA4MDAwMDAKKyNkZWZpbmUgVFM3MlhYX05BTkQyX0JVU1lfUEhZU19CQVNFCTB4NzA4MDAwMDAKKyNkZWZpbmUgVFM3MlhYX05BTkRfQlVTWV9WSVJUX0JBU0UJMHhmZWJmYTAwMAorI2RlZmluZSBUUzcyWFhfTkFORF9CVVNZX1NJWkUJCTB4MDAwMDEwMDAKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW5saW5lIGludCBib2FyZF9pc190czcyMDAodm9pZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoVFM3MlhYX01PREVMX1ZJUlRfQkFTRSkgPT0gVFM3MlhYX01PREVMX1RTNzIwMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYm9hcmRfaXNfdHM3MjUwKHZvaWQpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRiKFRTNzJYWF9NT0RFTF9WSVJUX0JBU0UpID09IFRTNzJYWF9NT0RFTF9UUzcyNTA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJvYXJkX2lzX3RzNzI2MCh2b2lkKQoreworCXJldHVybiBfX3Jhd19yZWFkYihUUzcyWFhfTU9ERUxfVklSVF9CQVNFKSA9PSBUUzcyWFhfTU9ERUxfVFM3MjYwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19tYXgxOTdfaW5zdGFsbGVkKHZvaWQpCit7CisJcmV0dXJuICEhKF9fcmF3X3JlYWRiKFRTNzJYWF9PUFRJT05TX1ZJUlRfQkFTRSkgJgorCQkJCQlUUzcyWFhfT1BUSU9OU19NQVgxOTcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc190czk0MjBfaW5zdGFsbGVkKHZvaWQpCit7CisJcmV0dXJuICEhKF9fcmF3X3JlYWRiKFRTNzJYWF9PUFRJT05TMl9WSVJUX0JBU0UpICYKKwkJCQkJVFM3MlhYX09QVElPTlMyX1RTOTQyMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MTBkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdW5jb21wcmVzcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGFzbS9hcmNoL2VwOTN4eC1yZWdzLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9fcmF3X3JlYWRiKHVuc2lnbmVkIGludCBwdHIpCit7CisJcmV0dXJuICooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwdHIpOworfQorCitzdGF0aWMgdm9pZCBfX3Jhd193cml0ZWIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgaW50IHB0cikKK3sKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcHRyKSA9IHZhbHVlOworfQorCisKKyNkZWZpbmUgUEhZU19VQVJUMV9EQVRBCQkweDgwOGMwMDAwCisjZGVmaW5lIFBIWVNfVUFSVDFfRkxBRwkJMHg4MDhjMDAxOAorI2RlZmluZSBVQVJUMV9GTEFHX1RYRkYJCTB4MjAKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBwdXRjKGNoYXIgYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKwkJLyogVHJhbnNtaXQgZmlmbyBub3QgZnVsbD8gICovCisJCWlmICghKF9fcmF3X3JlYWRiKFBIWVNfVUFSVDFfRkxBRykgJiBVQVJUMV9GTEFHX1RYRkYpKQorCQkJYnJlYWs7CisJfQorCisJX19yYXdfd3JpdGViKGMsIFBIWVNfVUFSVDFfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dHN0cihjb25zdCBjaGFyICpzKQoreworCXdoaWxlICgqcykgeworCQlwdXRjKCpzKTsKKwkJaWYgKCpzID09ICdcbicpCisJCQlwdXRjKCdccicpOworCQlzKys7CisJfQorfQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDVlYTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZXA5M3h4L3ZtYWxsb2MuaApAQCAtMCwwICsxLDUgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvdm1hbGxvYy5oCisgKi8KKworI2RlZmluZSBWTUFMTE9DX0VORAkweGZlODAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2lycS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzgyMWU5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2lycS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L2lycS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgSnVuZ2p1biBLaW0KLSAqICAgICAgICAgICAoQykgMjAwMyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+Ci0gKiAgICAgICAgICAgKEMpIDIwMDMgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Ci0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0lSUV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfSVJRX0gKLQotZXh0ZXJuIHZvaWQgX19pbml0IGg3MjB4X2luaXRfaXJxICh2b2lkKTsKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1oNzIweC9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjgwMjM1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWg3MjB4L3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaDcyMHgvcGFyYW0uaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBKdW5nanVuIEtpbQotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9QQVJBTV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfUEFSQU1fSAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteC9pcnEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1ZTA2NS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvaXJxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlteGFkcy9pcnEuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLSNkZWZpbmUgZml4dXBfaXJxKGkpCShpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3MjRmMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXgvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14L3BhcmFtLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL2RlYnVnLW1hY3JvLlMKaW5kZXggMDMxZDMwOS4uODViMzI3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvZGVidWctbWFjcm8uUwpAQCAtMTEsOCArMTEsNiBAQAogICoKICovCiAKLSNpbmNsdWRlIDxsaW51eC9hbWJhL3NlcmlhbC5oPgotCiAJCS5tYWNybwlhZGRydWFydCxyeAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CkBAIC0yMSwxOCArMTksNCBAQAogCQlhZGRuZQlccngsIFxyeCwgIzB4MTYwMDAwMDAgPj4gNAogCQkuZW5kbQogCi0JCS5tYWNybwlzZW5kdWFydCxyZCxyeAotCQlzdHJiCVxyZCwgW1xyeCwgI1VBUlQwMXhfRFJdCi0JCS5lbmRtCi0KLQkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MThdCUAgVUFSVEZMRwotCQl0c3QJXHJkLCAjMSA8PCA1CQlAIFVBUlRGTEdVVFhGRiAtIDEgd2hlbiBmdWxsCi0JCWJuZQkxMDAxYgotCQkuZW5kbQotCi0JCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMToJCWxkcglccmQsIFtccngsICMweDE4XQlAIFVBUlRGTEcKLQkJdHN0CVxyZCwgIzEgPDwgMwkJQCBVQVJURkxHVUJVU1kgLSAxIHdoZW4gYnVzeQotCQlibmUJMTAwMWIKLQkJLmVuZG0KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctcGwwMXguUz4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNTgyZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3IvcGFyYW0uaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RlYnVnLW1hY3JvLlMKaW5kZXggY2MxNWY4MC4uY2UwMDdlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RlYnVnLW1hY3JvLlMKQEAgLTI4LDIxICsyOCw4IEBACiAjZW5kaWYKIAkJLmVuZG0KIAotCQkubWFjcm8Jc2VuZHVhcnQscmQscngKLQkJc3RyYglccmQsIFtccnhdCi0JCS5lbmRtCi0KLQkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4Ci0xMDAyOgkJbGRyYglccmQsIFtccngsICMweDVdCi0JCWFuZAlccmQsIFxyZCwgIzB4NjAKLQkJdGVxCVxyZCwgIzB4NjAKLQkJYm5lCTEwMDJiCi0JCS5lbmRtCi0KLQkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CiAjaWYgIWRlZmluZWQoQ09ORklHX0FSQ0hfSVE4MDMyMSkgfHwgIWRlZmluZWQoQ09ORklHX0FSQ0hfSVEzMTI0NCkgfHwgIWRlZmluZWQoQ09ORklHX0FSQ0hfSVE4MDMzMSkKLTEwMDE6CQlsZHJiCVxyZCwgW1xyeCwgIzB4Nl0KLQkJdHN0CVxyZCwgIzB4MTAKLQkJYmVxCTEwMDFiCisjZGVmaW5lIEZMT1dfQ09OVFJPTAogI2VuZGlmCi0JCS5lbmRtCisjZGVmaW5lIFVBUlRfU0hJRlQJMAorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2Y0MDRlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9wYXJhbS5oCi0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvZGVidWctbWFjcm8uUwppbmRleCA1NjMxZTA4Li5iYzhiMzk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9kZWJ1Zy1tYWNyby5TCkBAIC0yMywxOCArMjMsNSBAQAogI2VuZGlmCiAJCS5lbmRtCiAKLQkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4Ci0JCXN0cmIJXHJkLCBbXHJ4XQotCQkuZW5kbQotCi0JCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMjoJCWxkcmIJXHJkLCBbXHJ4LCAjMHgxNF0KLQkJdHN0CVxyZCwgIzB4MjAKLQkJYmVxCTEwMDJiCi0JCS5lbmRtCi0KLQkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4Ci0JCW5vcAotCQlub3AKLQkJbm9wCi0JCS5lbmRtCisjZGVmaW5lIFVBUlRfU0hJRlQJMgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9pcnEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEwMGIyMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lycS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2lycS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2RlZmluZSBmaXh1cF9pcnEoaXJxKSAgKGlycSkKLQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4ZHAyeDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4ZHAyeDAwLmgKaW5kZXggMjI5MzgxYy4uNTQ2ZTJlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peGRwMngwMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhkcDJ4MDAuaApAQCAtNzIsMTIgKzcyLDExIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgotICogTWFzdGVyIE5QVSB3aWxsIGFsd2F5cyBoYXZlIGZsYXNoIGFuZCBiZSBQQ0kgbWFzdGVyLgotICogU2xhdmUgTlBVIG1heSBvciBtYXkgbm90IGhhdmUgZmxhc2ggYnV0IHdpbGwgbmV2ZXIgYmUgUENJIG1hc3Rlci4KKyAqIFRoZSBtYXN0ZXIgTlBVIGlzIGFsd2F5cyBQQ0kgbWFzdGVyLgogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpeGRwMngwMF9tYXN0ZXJfbnB1KHZvaWQpCiB7Ci0JcmV0dXJuICgoaXhwMjAwMF9oYXNfZmxhc2goKSkgJiYgKGl4cDIwMDBfaXNfcGNpbWFzdGVyKCkpKTsKKwlyZXR1cm4gISFpeHAyMDAwX2lzX3BjaW1hc3RlcigpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peHAyMDAwLXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvaXhwMjAwMC1yZWdzLmgKaW5kZXggMmI1N2Y5MS4uY2NhZTRiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9peHAyMDAwLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL2l4cDIwMDAtcmVncy5oCkBAIC0zNTMsOCArMzUzLDggQEAKICAqIE1hc2tzIGFuZCBzaGlmdHMgZm9yIHZhcmlvdXMgZmllbGRzIGluIHRoZSBXVEMgYW5kIFJUQyByZWdpc3RlcnMuCiAgKi8KICNkZWZpbmUJU0xPV1BPUlRfV1JUQ19NQVNLX0hECQkweDAwMDMKLSNkZWZpbmUJU0xPV1BPUlRfV1JUQ19NQVNLX1NVCQkweDAwM2MKLSNkZWZpbmUJU0xPV1BPUlRfV1JUQ19NQVNLX1BXCQkweDAzYzAKKyNkZWZpbmUJU0xPV1BPUlRfV1JUQ19NQVNLX1BXCQkweDAwM2MKKyNkZWZpbmUJU0xPV1BPUlRfV1JUQ19NQVNLX1NVCQkweDAzYzAKIAogI2RlZmluZQlTTE9XUE9SVF9XUlRDX1NISUZUX0hECQkweDAwCiAjZGVmaW5lCVNMT1dQT1JUX1dSVENfU0hJRlRfU1UJCTB4MDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY0NmQ5ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9wYXJhbS5oCi0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHAyMDAwL3N5c3RlbS5oCmluZGV4IGRkYmJiMzQuLjNjYzlhMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC9zeXN0ZW0uaApAQCAtMzcsNyArMzcsNyBAQAogCSAqIHRvIGNhdXNlIGEgY29tcGxldGUgcmVzZXQgb2YgdGhlIENQVSBhbmQgYWxsIGV4dGVybmFsIGRldmljZXMKIAkgKiBhbmQgbW92ZSB0aGUgZmxhc2ggYmFuayByZWdpc3RlciBiYWNrIHRvIDAuCiAJICovCi0JaWYgKG1hY2hpbmVfaXNfaXhkcDI4MDEoKSkgeworCWlmIChtYWNoaW5lX2lzX2l4ZHAyODAxKCkgfHwgbWFjaGluZV9pc19peGRwMjh4NSgpKSB7CiAJCXVuc2lnbmVkIGxvbmcgcmVzZXRfcmVnID0gKklYRFAyWDAxX0NQTERfUkVTRVRfUkVHOwogCiAJCXJlc2V0X3JlZyA9IDB4NTVBQTAwMDAgfCAocmVzZXRfcmVnICYgMHgwMDAwRkZGRik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kZWJ1Zy1tYWNyby5TCmluZGV4IDJlMjM2NTEuLjM3YmM4ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kZWJ1Zy1tYWNyby5TCkBAIC0yMCwxNiArMjAsNSBAQAogCQkJCQkJQCBieXRlIHdyaXRlcyB1c2VkIC0gQmlnIEVuZGlhbi4KICAgICAgICAgICAgICAgICAuZW5kbQogCi0gICAgICAgICAgICAgICAubWFjcm8gIHNlbmR1YXJ0LHJkLHJ4Ci0gICAgICAgICAgICAgICAgc3RyYiAgICBccmQsIFtccnhdCi0gICAgICAgICAgICAgICAgLmVuZG0KLQotICAgICAgICAgICAgICAgIC5tYWNybyAgd2FpdHVhcnQscmQscngKLTEwMDI6ICAgICAgICAgICBsZHJiICAgIFxyZCwgW1xyeCwgIzB4MTRdCi0gICAgICAgICAgICAgICAgYW5kICAgICBccmQsIFxyZCwgIzB4NjAJCUAgY2hlY2sgVEhSRSBhbmQgVEVNVCBiaXRzCi0gICAgICAgICAgICAgICAgdGVxICAgICBccmQsICMweDYwCi0gICAgICAgICAgICAgICAgYm5lICAgICAxMDAyYgotICAgICAgICAgICAgICAgIC5lbmRtCi0KLSAgICAgICAgICAgICAgICAubWFjcm8gIGJ1c3l1YXJ0LHJkLHJ4Ci0gICAgICAgICAgICAgICAgLmVuZG0KKyNkZWZpbmUgVUFSVF9TSElGVAkyCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYnVnLTgyNTAuUz4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkYTcwNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0vKgotICogaXJxLmggCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jZGVmaW5lIGZpeHVwX2lycShpcnEpICAoaXJxKQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbmFzMTAwZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25hczEwMGQuaAppbmRleCA1MWFjMDE4MC4uODQ0NjdhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25hczEwMGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbmFzMTAwZC5oCkBAIC0xOSw4ICsxOSw4IEBACiAjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIHRoaXMgZGlyZWN0bHksIGluc3RlYWQgI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPiIKICNlbmRpZgogCi0jZGVmaW5lIE5BUzEwMERfU0RBX1BJTgkJNgotI2RlZmluZSBOQVMxMDBEX1NDTF9QSU4JCTUKKyNkZWZpbmUgTkFTMTAwRF9TREFfUElOCQk1CisjZGVmaW5lIE5BUzEwMERfU0NMX1BJTgkJNgogCiAvKgogICogTkFTMTAwRCBQQ0kgSVJRcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE3NTcxMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wYXJhbS5oCi0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3BsYXRmb3JtLmgKaW5kZXggZGFmOTc5MC4uMTNhZWUxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L3BsYXRmb3JtLmgKQEAgLTM4LDYgKzM4LDMzIEBACiAjZGVmaW5lCUlYUDRYWF9FWFBfQlVTX0JBU0UocmVnaW9uKVwKIAkJKElYUDRYWF9FWFBfQlVTX0JBU0VfUEhZUyArICgocmVnaW9uKSAqIGl4cDR4eF9leHBfYnVzX3NpemUpKQogCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0VORChyZWdpb24pXAorCQkoSVhQNFhYX0VYUF9CVVNfQkFTRShyZWdpb24pICsgaXhwNHh4X2V4cF9idXNfc2l6ZSAtIDEpCisKKy8qIFRob3NlIG1hY3JvcyBjYW4gYmUgdXNlZCB0byBhZGp1c3QgdGltaW5nIGFuZCBjb25maWd1cmUKKyAqIG90aGVyIGZlYXR1cmVzIGZvciBlYWNoIHJlZ2lvbi4KKyAqLworCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX1JFQ09WRVJZX1QoeCkJKCgoeCkgJiAweDBmKSA8PCAxNikKKyNkZWZpbmUgSVhQNFhYX0VYUF9CVVNfSE9MRF9UKHgpCSgoKHgpICYgMHgwMykgPDwgMjApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX1NUUk9CRV9UKHgpCSgoKHgpICYgMHgwZikgPDwgMjIpCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX1NFVFVQX1QoeCkJKCgoeCkgJiAweDAzKSA8PCAyNikKKyNkZWZpbmUgSVhQNFhYX0VYUF9CVVNfQUREUl9UKHgpCSgoKHgpICYgMHgwMykgPDwgMjgpCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX1NJWkUoeCkJCSgoKHgpICYgMHgwZikgPDwgMTApCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NZQ0xFUyh4KQkoKCh4KSAmIDB4MDMpIDw8IDE0KQorCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0NTX0VOCQkoMUwgPDwgMzEpCisjZGVmaW5lIElYUDRYWF9FWFBfQlVTX0JZVEVfUkQxNgkoMUwgPDwgNikKKyNkZWZpbmUgSVhQNFhYX0VYUF9CVVNfSFJEWV9QT0wJCSgxTCA8PCA1KQorI2RlZmluZSBJWFA0WFhfRVhQX0JVU19NVVhfRU4JCSgxTCA8PCA0KQorI2RlZmluZSBJWFA0WFhfRVhQX0JVU19TUExUX0VOCQkoMUwgPDwgMykKKyNkZWZpbmUgSVhQNFhYX0VYUF9CVVNfV1JfRU4JCSgxTCA8PCAxKQorI2RlZmluZSBJWFA0WFhfRVhQX0JVU19CWVRFX0VOCQkoMUwgPDwgMCkKKworI2RlZmluZSBJWFA0WFhfRVhQX0JVU19DWUNMRVNfSU5URUwJMHgwMAorI2RlZmluZSBJWFA0WFhfRVhQX0JVU19DWUNMRVNfTU9UT1JPTEEJMHgwMQorI2RlZmluZSBJWFA0WFhfRVhQX0JVU19DWUNMRVNfSFBJCTB4MDIKKwogI2RlZmluZSBJWFA0WFhfRkxBU0hfV1JJVEFCTEUJKDB4MikKICNkZWZpbmUgSVhQNFhYX0ZMQVNIX0RFRkFVTFQJKDB4YmNkMjNjNDApCiAjZGVmaW5lIElYUDRYWF9GTEFTSF9XUklURQkoMHhiY2QyM2M0MikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTYyYTEyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3BhcmFtLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgUm9iIFNjb3R0IChyc2NvdHRAbXRyb2IuZmRucy5uZXQpCi0gKiAgICAgICAgICAgICAgICAgICAgU3RldmUgSGlsbCAoc2poaWxsQGNvdHcuY29tKQotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZQotICogTGlua1VwIFN5c3RlbXMgTDcyMDAgU09DIGRldmVsb3BtZW50IGJvYXJkLgotICoKLSAqIENoYW5nZWxvZzoKLSAqICAgMDQtMjEtMjAwMCBSUyAgICAgIENyZWF0ZWQgTDcyMDAgdmVyc2lvbgotICogICAwNC0yNS0yMDAwIFNKSCAgICAgQ2xlYW5lZCB1cCBmaWxlCi0gKiAgIDA1LTAzLTIwMDAgU0pIICAgICBDaGFuZ2UgY29tbWVudHMgYW5kIHJhdGUKLSAqLwotCi0vKgotICogU2VlICd0aW1lLmgnIGZvciBob3cgdGhlIFJUQyBIWiByYXRlIGlzIHNldAotICovCi0jZGVmaW5lIEhaIDEyOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNWYwYjEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9pcnEuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi12b2lkIF9faW5pdCBsaDdhNDB4X2luaXRfYm9hcmRfaXJxICh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNhZDBiYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLS8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvcGFyYW0uaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQ29hc3RhbCBFbnZpcm9ubWVudGFsIFN5c3RlbXMKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWNlOWFkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BhcmFtLmgKLSAqCi0gKi8KLQotI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUl9IWgotI2RlZmluZSBIWglDT05GSUdfT01BUF8zMktfVElNRVJfSFoKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2F1ZGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYXVkaW8uaAppbmRleCA2MDk3NmY4Li4xN2VjY2Q3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYXVkaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYXVkaW8uaApAQCAtNiw4ICs2LDggQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewotCWludCAoKnN0YXJ0dXApKHNuZF9wY21fc3Vic3RyZWFtX3QgKiwgdm9pZCAqKTsKLQl2b2lkICgqc2h1dGRvd24pKHNuZF9wY21fc3Vic3RyZWFtX3QgKiwgdm9pZCAqKTsKKwlpbnQgKCpzdGFydHVwKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKiwgdm9pZCAqKTsKKwl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqLCB2b2lkICopOwogCXZvaWQgKCpzdXNwZW5kKSh2b2lkICopOwogCXZvaWQgKCpyZXN1bWUpKHZvaWQgKik7CiAJdm9pZCAqcHJpdjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RlYnVnLW1hY3JvLlMKaW5kZXggYjZlYzY4OC4uOTAxMmNiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2RlYnVnLW1hY3JvLlMKQEAgLTIxLDE4ICsyMSw1IEBACiAJCW9ycglccngsIFxyeCwgIzB4MDAxMDAwMDAKIAkJLmVuZG0KIAotCQkubWFjcm8Jc2VuZHVhcnQscmQscngKLQkJc3RyCVxyZCwgW1xyeCwgIzBdCi0JCS5lbmRtCi0KLQkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4Ci0xMDAyOgkJbGRyCVxyZCwgW1xyeCwgIzB4MTRdCi0JCXRzdAlccmQsICMoMSA8PCA2KQotCQliZXEJMTAwMmIKLQkJLmVuZG0KLQotCQkubWFjcm8Jd2FpdHVhcnQscmQscngKLTEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjMHgxNF0KLQkJdHN0CVxyZCwgIygxIDw8IDUpCi0JCWJlcQkxMDAxYgotCQkuZW5kbQorI2RlZmluZSBVQVJUX1NISUZUCTIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGM2MGY1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnEuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaXJxLmgKLSAqCi0gKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKLSAqIENyZWF0ZWQ6CUp1biAxNSwgMjAwMQotICogQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNkZWZpbmUgZml4dXBfaXJxKHgpCSh4KQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTk3ZDgyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9wYXJhbS5oCi0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9kZWJ1Zy1tYWNyby5TCmluZGV4IDAxN2FkOTkuLmYxN2VmYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvZGVidWctbWFjcm8uUwpAQCAtMTEsOCArMTEsNiBAQAogICoKICovCiAKLSNpbmNsdWRlIDxsaW51eC9hbWJhL3NlcmlhbC5oPgotCiAJCS5tYWNybwlhZGRydWFydCxyeAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CkBAIC0yMSwxOCArMTksNCBAQAogCQlvcnIJXHJ4LCBccngsICMweDAwMDA5MDAwCiAJCS5lbmRtCiAKLQkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4Ci0JCXN0cmIJXHJkLCBbXHJ4LCAjVUFSVDAxeF9EUl0KLQkJLmVuZG0KLQotCQkubWFjcm8Jd2FpdHVhcnQscmQscngKLTEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjMHgxOF0JQCBVQVJURkxHCi0JCXRzdAlccmQsICMxIDw8IDUJCUAgVUFSVEZMR1VUWEZGIC0gMSB3aGVuIGZ1bGwKLQkJYm5lCTEwMDFiCi0JCS5lbmRtCi0KLQkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MThdCUAgVUFSVEZMRwotCQl0c3QJXHJkLCAjMSA8PCAzCQlAIFVBUlRGTEdVQlVTWSAtIDEgd2hlbiBidXN5Ci0JCWJuZQkxMDAxYgotCQkuZW5kbQorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy1wbDAxeC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJlYWx2aWV3L3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YjEyMzUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvcGFyYW0uaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIExpbWl0ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXJwYy9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2RlYnVnLW1hY3JvLlMKaW5kZXggNDU2ZDNkNy4uYzYzNGM4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL2RlYnVnLW1hY3JvLlMKQEAgLTIwLDE5ICsyMCw2IEBACiAJCW9ycglccngsIFxyeCwgIzB4MDAwMDBmZTAKIAkJLmVuZG0KIAotCQkubWFjcm8Jc2VuZHVhcnQscmQscngKLQkJc3RyYglccmQsIFtccnhdCi0JCS5lbmRtCi0KLQkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyYglccmQsIFtccngsICMweDE0XQotCQlhbmQJXHJkLCBccmQsICMweDYwCi0JCXRlcQlccmQsICMweDYwCi0JCWJuZQkxMDAxYgotCQkuZW5kbQotCi0JCS5tYWNybwl3YWl0dWFydCxyZCxyeAotMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjMHgxOF0KLQkJdHN0CVxyZCwgIzB4MTAKLQkJYmVxCTEwMDFiCi0JCS5lbmRtCisjZGVmaW5lIFVBUlRfU0hJRlQJMgorI2RlZmluZSBGTE9XX0NPTlRST0wKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcnBjL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIxZGNkNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvcGFyYW0uaAotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL29zaXJpcy1jcGxkLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL29zaXJpcy1jcGxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkMWFlMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLWNwbGQuaApAQCAtMCwwICsxLDI1IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL29zaXJpcy1jcGxkLmgKKyAqCisgKiAoYykgMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIE9TSVJJUyAtIENQTEQgY29udHJvbCBjb25zdGFudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09TSVJJU0NQTERfSAorI2RlZmluZSBfX0FTTV9BUkNIX09TSVJJU0NQTERfSAorCisvKiBDVFJMMSAtIE5BTkQgV1AgY29udHJvbCAqLworCisjZGVmaW5lIE9TSVJJU19DVFJMMV9OQU5EU0VMCQkoMHgzKQorI2RlZmluZSBPU0lSSVNfQ1RSTDFfQk9PVF9JTlQJCSgxPDwzKQorI2RlZmluZSBPU0lSSVNfQ1RSTDFfUENNQ0lBCQkoMTw8NCkKKyNkZWZpbmUgT1NJUklTX0NUUkwxX1BDTUNJQV9uV0FJVAkoMTw8NikKKyNkZWZpbmUgT1NJUklTX0NUUkwxX1BDTUNJQV9uSU9JUzE2CSgxPDw3KQorCisjZW5kaWYgLyogX19BU01fQVJDSF9PU0lSSVNDUExEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLW1hcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9vc2lyaXMtbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0YjBjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLW1hcC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLW1hcC5oCisgKgorICogKGMpIDIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBPU0lSSVMgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDaGFuZ2Vsb2c6CisqLworCisvKiBuZWVkcyBhcmNoL21hcC5oIGluY2x1ZGluZyB3aXRoIHRoaXMgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX09TSVJJU01BUF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT1NJUklTTUFQX0gKKworLyogc3RhcnQgcGVyaXBoZXJhbHMgb2ZmIGFmdGVyIHRoZSBTM0MyNDEwICovCisKKyNkZWZpbmUgT1NJUklTX0lPQUREUih4KQkoUzNDMjQxMF9BRERSKCh4KSArIDB4MDUwMDAwMDApKQorCisjZGVmaW5lIE9TSVJJU19QQV9DUExECQkoUzNDMjQxMF9DUzEgfCAoMzw8MjUpKQorCisvKiB3ZSBwdXQgdGhlIENQTEQgcmVnaXN0ZXJzIG5leHQsIHRvIGdldCB0aGVtIG91dCBvZiB0aGUgd2F5ICovCisKKyNkZWZpbmUgT1NJUklTX1ZBX0NUUkwxCSAgICBPU0lSSVNfSU9BRERSKDB4MDAwMDAwMDApCSAvKiAweDAxMzAwMDAwICovCisjZGVmaW5lIE9TSVJJU19QQV9DVFJMMQkgICAgKE9TSVJJU19QQV9DUExEKQorCisjZGVmaW5lIE9TSVJJU19WQV9DVFJMMgkgICAgT1NJUklTX0lPQUREUigweDAwMTAwMDAwKQkgLyogMHgwMTQwMDAwMCAqLworI2RlZmluZSBPU0lSSVNfUEFfQ1RSTDIJICAgIChPU0lSSVNfUEFfQ1BMRCArICgxPDwyNCkpCisKKyNkZWZpbmUgT1NJUklTX1ZBX0NUUkwzCSAgICBPU0lSSVNfSU9BRERSKDB4MDAyMDAwMDApCSAvKiAweDAxNTAwMDAwICovCisjZGVmaW5lIE9TSVJJU19QQV9DVFJMMwkgICAgKE9TSVJJU19QQV9DUExEICsgKDI8PDI0KSkKKworI2RlZmluZSBPU0lSSVNfVkFfQ1RSTDQJICAgIE9TSVJJU19JT0FERFIoMHgwMDMwMDAwMCkJIC8qIDB4MDE2MDAwMDAgKi8KKyNkZWZpbmUgT1NJUklTX1BBX0NUUkw0CSAgICAoT1NJUklTX1BBX0NQTEQgKyAoMzw8MjQpKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9PU0lSSVNNQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODNkM2YxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcGFyYW0uaAotICoKLSAqIChjKSAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcwotICogIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MyNDEwIC0gTWFjaGluZSBwYXJhbWV0ZXJzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKiAgMDItU2VwLTIwMDMgQkpEICBDcmVhdGVkIGZpbGUKLSAqICAxMi1NYXItMjAwNCBCSkQgIEFkZGVkIGluY2x1ZGUgcHJvdGVjdGlvbgotKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX1BBUkFNX0gKLSNkZWZpbmUgX19BU01fQVJDSF9QQVJBTV9ICi0KLS8qIHdlIGNhbm5vdCBnZXQgb3VyIHRpbWVyIGRvd24gdG8gMTAwSHogd2l0aCB0aGUgc2V0dXAgYXMgaXMsIGJ1dCB3ZSBjYW4KLSAqIG1hbmFnZSAyMDAgY2xvY2sgdGlja3MgcGVyIHNlY29uZC4uLiBpZiB0aGlzIGlzIGEgcHJvYmxlbSwgd2UgY2FuIGFsd2F5cwotICogYWRkIGEgc29mdHdhcmUgcHJlLXNjYWxlciB0byB0aGUgZXZpbCB0aW1lciBzeXN0ZW1zLgotKi8KLQotI2RlZmluZSBIWiAgIDIwMAotCi0jZW5kaWYgLyogX19BU01fQVJDSF9QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaAppbmRleCA5Njk3ZjkzLi5kMjU3NDA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKQEAgLTk3OSw2ICs5NzksNyBAQAogI2RlZmluZSBTM0MyNDEwX01JU0NDUl9DTEswX0hDTEsgICAgKDM8PDQpCiAjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX0NMSzBfUENMSyAgICAoNDw8NCkKICNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfQ0xLMF9EQ0xLMCAgICg1PDw0KQorI2RlZmluZSBTM0MyNDEwX01JU0NDUl9DTEswX01BU0sgICAgKDc8PDQpCiAKICNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfQ0xLMV9NUExMICAgICgwPDw4KQogI2RlZmluZSBTM0MyNDEwX01JU0NDUl9DTEsxX1VQTEwgICAgKDE8PDgpCkBAIC05ODYsNiArOTg3LDcgQEAKICNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfQ0xLMV9IQ0xLICAgICgzPDw4KQogI2RlZmluZSBTM0MyNDEwX01JU0NDUl9DTEsxX1BDTEsgICAgKDQ8PDgpCiAjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX0NMSzFfRENMSzEgICAoNTw8OCkKKyNkZWZpbmUgUzNDMjQxMF9NSVNDQ1JfQ0xLMV9NQVNLICAgICg3PDw4KQogCiAjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX1VTQlNVU1BORDAgICAoMTw8MTIpCiAjZGVmaW5lIFMzQzI0MTBfTUlTQ0NSX1VTQlNVU1BORDEgICAoMTw8MTMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kZWJ1Zy1tYWNyby5TCmluZGV4IDc1NWZhMzQuLjI2N2MzMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kZWJ1Zy1tYWNyby5TCkBAIC0xMCw2ICsxMCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAqLworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCiAJCS5tYWNybwlhZGRydWFydCxyeAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY3NDg4OS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvcGFyYW0uaAotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2hhcmsvcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk3ZWViNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zaGFyay9wYXJhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXNoYXJrL3BhcmFtLmgKLSAqCi0gKiBieSBBbGV4YW5kZXIgU2NodWx6Ci0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2RlYnVnLW1hY3JvLlMKaW5kZXggZWY2MTY3MS4uZmUxMDZkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2RlYnVnLW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL2RlYnVnLW1hY3JvLlMKQEAgLTExLDggKzExLDYgQEAKICAqCiAqLwogCi0jaW5jbHVkZSA8bGludXgvYW1iYS9zZXJpYWwuaD4KLQogCQkubWFjcm8JYWRkcnVhcnQscngKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwpAQCAtMjIsMTggKzIwLDQgQEAKIAkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMTAwMAogCQkuZW5kbQogCi0JCS5tYWNybwlzZW5kdWFydCxyZCxyeAotCQlzdHJiCVxyZCwgW1xyeCwgI1VBUlQwMXhfRFJdCi0JCS5lbmRtCi0KLQkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MThdCUAgVUFSVEZMRwotCQl0c3QJXHJkLCAjMSA8PCA1CQlAIFVBUlRGTEdVVFhGRiAtIDEgd2hlbiBmdWxsCi0JCWJuZQkxMDAxYgotCQkuZW5kbQotCi0JCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMToJCWxkcglccmQsIFtccngsICMweDE4XQlAIFVBUlRGTEcKLQkJdHN0CVxyZCwgIzEgPDwgMwkJQCBVQVJURkxHVUJVU1kgLSAxIHdoZW4gYnVzeQotCQlibmUJMTAwMWIKLQkJLmVuZG0KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctcGwwMXguUz4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9wYXJhbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0Yjg5NzMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtdmVyc2F0aWxlL3BhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXZlcnNhdGlsZS9wYXJhbS5oCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMiBBUk0gTGltaXRlZAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1hcm0vZGVsYXkuaAppbmRleCAxNzA0MzYwLi5iMmRlZGExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZGVsYXkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZGVsYXkuaApAQCAtNiw2ICs2LDggQEAKICNpZm5kZWYgX19BU01fQVJNX0RFTEFZX0gKICNkZWZpbmUgX19BU01fQVJNX0RFTEFZX0gKIAorI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgkvKiBIWiAqLworCiBleHRlcm4gdm9pZCBfX2RlbGF5KGludCBsb29wcyk7CiAKIC8qCkBAIC0xMyw3ICsxNSw3IEBACiAgKiBpdCwgaXQgbWVhbnMgdGhhdCB5b3UncmUgY2FsbGluZyB1ZGVsYXkoKSB3aXRoIGFuIG91dCBvZiByYW5nZSB2YWx1ZS4KICAqCiAgKiBXaXRoIGN1cnJlbnRseSBpbXBvc2VkIGxpbWl0cywgdGhpcyBtZWFucyB0aGF0IHdlIHN1cHBvcnQgYSBtYXggZGVsYXkKLSAqIG9mIDIwMDB1cyBhbmQgNjcxIGJvZ29taXBzCisgKiBvZiAyMDAwdXMuIEZ1cnRoZXIgbGltaXRzOiBIWjw9MTAwMCBhbmQgYm9nb21pcHM8PTMzNTUKICAqLwogZXh0ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOwogCkBAIC0zMiwxMCArMzQsMTAgQEAKIAogI2RlZmluZSBNQVhfVURFTEFZX01TIDIKIAotI2RlZmluZSB1ZGVsYXkobikJCQkJCQlcCi0JKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8JCQkJXAotCSAgKChuKSA+IChNQVhfVURFTEFZX01TICogMTAwMCkgPyBfX2JhZF91ZGVsYXkoKSA6CVwKLQkJCV9fY29uc3RfdWRlbGF5KChuKSAqIDB4NjhkYnVsKSkgOglcCisjZGVmaW5lIHVkZWxheShuKQkJCQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8JCQkJCVwKKwkgICgobikgPiAoTUFYX1VERUxBWV9NUyAqIDEwMDApID8gX19iYWRfdWRlbGF5KCkgOgkJXAorCQkJX19jb25zdF91ZGVsYXkoKG4pICogKCgyMTk5MDIzVSpIWik+PjExKSkpIDoJXAogCSAgX191ZGVsYXkobikpCiAKICNlbmRpZiAvKiBkZWZpbmVkKF9BUk1fREVMQVlfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmggYi9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCmluZGV4IGY3NDMwZTMuLjYyNDZiZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaApAQCAtNTUsOCArNTUsMTAgQEAKIAl1bnNpZ25lZCBpbnQgc2F2ZVtGUF9TT0ZUX1NJWkVdOwkJLyogdW5kZWZpbmVkIGluZm9ybWF0aW9uICovCiB9OwogCisjZGVmaW5lIElXTU1YVF9TSVpFCTB4OTgKKwogc3RydWN0IGl3bW14dF9zdHJ1Y3QgewotCXVuc2lnbmVkIGludCBzYXZlWzB4OTgvc2l6ZW9mKGludCkgKyAxXTsKKwl1bnNpZ25lZCBpbnQgc2F2ZVtJV01NWFRfU0laRSAvIHNpemVvZih1bnNpZ25lZCBpbnQpXTsKIH07CiAKIHVuaW9uIGZwX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlMgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVidWctODI1MC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTRmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVidWctODI1MC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVidWctODI1MC5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisKKwkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cmIJXHJkLCBbXHJ4LCAjVUFSVF9UWCA8PCBVQVJUX1NISUZUXQorCQkuZW5kbQorCisJCS5tYWNybwlidXN5dWFydCxyZCxyeAorMTAwMjoJCWxkcmIJXHJkLCBbXHJ4LCAjVUFSVF9MU1IgPDwgVUFSVF9TSElGVF0KKwkJYW5kCVxyZCwgXHJkLCAjVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUKKwkJdGVxCVxyZCwgI1VBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFCisJCWJuZQkxMDAyYgorCQkuZW5kbQorCisJCS5tYWNybwl3YWl0dWFydCxyZCxyeAorI2lmZGVmIEZMT1dfQ09OVFJPTAorMTAwMToJCWxkcmIJXHJkLCBbXHJ4LCAjVUFSVF9NU1IgPDwgVUFSVF9TSElGVF0KKwkJdHN0CVxyZCwgI1VBUlRfTVNSX0NUUworCQliZXEJMTAwMWIKKyNlbmRpZgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2RlYnVnLXBsMDF4LlMgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvZGVidWctcGwwMXguUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjBkMGY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2RlYnVnLXBsMDF4LlMKQEAgLTAsMCArMSwyOSBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9kZWJ1Zy1tYWNyby5TCisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+CisKKwkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJCXN0cmIJXHJkLCBbXHJ4LCAjVUFSVDAxeF9EUl0KKwkJLmVuZG0KKworCQkubWFjcm8Jd2FpdHVhcnQscmQscngKKzEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjVUFSVDAxeF9GUl0KKwkJdHN0CVxyZCwgI1VBUlQwMXhfRlJfVFhGRgorCQlibmUJMTAwMWIKKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDE6CQlsZHIJXHJkLCBbXHJ4LCAjVUFSVDAxeF9GUl0KKwkJdHN0CVxyZCwgI1VBUlQwMXhfRlJfQlVTWQorCQlibmUJMTAwMWIKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDIwMDAvdWVuZ2luZS5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3VlbmdpbmUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwMjAwMC91ZW5naW5lLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS91ZW5naW5lLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS92aWMuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS92aWMuaAppbmRleCA4MTgyNWViLi5lZDljYTM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvdmljLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3ZpYy5oCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIFZJQ19WRUNUX0NOVExfRU5BQkxFCQkoMSA8PCA1KQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotdm9pZCB2aWNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiB2aWNfc291cmNlcyk7Cit2b2lkIHZpY19pbml0KHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50IGlycV9zdGFydCwgdTMyIHZpY19zb3VyY2VzKTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKaW5kZXggZmQwMTQ3ZS4uYjM0NzlmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKQEAgLTIyNiw0MiArMjI2LDYgQEAKICNlbmRpZgkvKiBfX21lbV9wY2kgKi8KIAogLyoKLSAqIElmIHRoaXMgYXJjaGl0ZWN0dXJlIGhhcyBJU0EgSU8sIHRoZW4gZGVmaW5lIHRoZSBpc2FfcmVhZC9pc2Ffd3JpdGUKLSAqIG1hY3Jvcy4KLSAqLwotI2lmZGVmIF9fbWVtX2lzYQotCi0jZGVmaW5lIGlzYV9yZWFkYihhZGRyKQkJCV9fcmF3X3JlYWRiKF9fbWVtX2lzYShhZGRyKSkKLSNkZWZpbmUgaXNhX3JlYWR3KGFkZHIpCQkJX19yYXdfcmVhZHcoX19tZW1faXNhKGFkZHIpKQotI2RlZmluZSBpc2FfcmVhZGwoYWRkcikJCQlfX3Jhd19yZWFkbChfX21lbV9pc2EoYWRkcikpCi0jZGVmaW5lIGlzYV93cml0ZWIodmFsLGFkZHIpCQlfX3Jhd193cml0ZWIodmFsLF9fbWVtX2lzYShhZGRyKSkKLSNkZWZpbmUgaXNhX3dyaXRldyh2YWwsYWRkcikJCV9fcmF3X3dyaXRldyh2YWwsX19tZW1faXNhKGFkZHIpKQotI2RlZmluZSBpc2Ffd3JpdGVsKHZhbCxhZGRyKQkJX19yYXdfd3JpdGVsKHZhbCxfX21lbV9pc2EoYWRkcikpCi0jZGVmaW5lIGlzYV9tZW1zZXRfaW8oYSxiLGMpCQlfbWVtc2V0X2lvKF9fbWVtX2lzYShhKSwoYiksKGMpKQotI2RlZmluZSBpc2FfbWVtY3B5X2Zyb21pbyhhLGIsYykJX21lbWNweV9mcm9taW8oKGEpLF9fbWVtX2lzYShiKSwoYykpCi0jZGVmaW5lIGlzYV9tZW1jcHlfdG9pbyhhLGIsYykJCV9tZW1jcHlfdG9pbyhfX21lbV9pc2EoKGEpKSwoYiksKGMpKQotCi0jZGVmaW5lIGlzYV9ldGhfaW9fY29weV9hbmRfc3VtKGEsYixjLGQpIFwKLQkJCQlldGhfY29weV9hbmRfc3VtKChhKSxfX21lbV9pc2EoYiksKGMpLChkKSkKLQotI2Vsc2UJLyogX19tZW1faXNhICovCi0KLSNkZWZpbmUgaXNhX3JlYWRiKGFkZHIpCQkJKF9fcmVhZHdyaXRlX2J1ZygiaXNhX3JlYWRiIiksMCkKLSNkZWZpbmUgaXNhX3JlYWR3KGFkZHIpCQkJKF9fcmVhZHdyaXRlX2J1ZygiaXNhX3JlYWR3IiksMCkKLSNkZWZpbmUgaXNhX3JlYWRsKGFkZHIpCQkJKF9fcmVhZHdyaXRlX2J1ZygiaXNhX3JlYWRsIiksMCkKLSNkZWZpbmUgaXNhX3dyaXRlYih2YWwsYWRkcikJCV9fcmVhZHdyaXRlX2J1ZygiaXNhX3dyaXRlYiIpCi0jZGVmaW5lIGlzYV93cml0ZXcodmFsLGFkZHIpCQlfX3JlYWR3cml0ZV9idWcoImlzYV93cml0ZXciKQotI2RlZmluZSBpc2Ffd3JpdGVsKHZhbCxhZGRyKQkJX19yZWFkd3JpdGVfYnVnKCJpc2Ffd3JpdGVsIikKLSNkZWZpbmUgaXNhX21lbXNldF9pbyhhLGIsYykJCV9fcmVhZHdyaXRlX2J1ZygiaXNhX21lbXNldF9pbyIpCi0jZGVmaW5lIGlzYV9tZW1jcHlfZnJvbWlvKGEsYixjKQlfX3JlYWR3cml0ZV9idWcoImlzYV9tZW1jcHlfZnJvbWlvIikKLSNkZWZpbmUgaXNhX21lbWNweV90b2lvKGEsYixjKQkJX19yZWFkd3JpdGVfYnVnKCJpc2FfbWVtY3B5X3RvaW8iKQotCi0jZGVmaW5lIGlzYV9ldGhfaW9fY29weV9hbmRfc3VtKGEsYixjLGQpIFwKLQkJCQlfX3JlYWR3cml0ZV9idWcoImlzYV9ldGhfaW9fY29weV9hbmRfc3VtIikKLQotI2VuZGlmCS8qIF9fbWVtX2lzYSAqLwotCi0vKgogICogaW9yZW1hcCBhbmQgZnJpZW5kcy4KICAqCiAgKiBpb3JlbWFwIHRha2VzIGEgUENJIG1lbW9yeSBhZGRyZXNzLCBhcyBzcGVjaWZpZWQgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9pcnEuaAppbmRleCA3NzcyNDMyLi42MGI1MTA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2lycS5oCkBAIC0yNyw3ICsyNyw3IEBACiAKIC8qCiAgKiBUaGVzZSBjb3JyZXNwb25kIHdpdGggdGhlIFNBX1RSSUdHRVJfKiBkZWZpbmVzLCBhbmQgdGhlcmVmb3JlIHRoZQotICogSVJRUkVTT1VSQ0VfSVJRXyogZGVmaW5lcy4KKyAqIElPUkVTT1VSQ0VfSVJRXyogZGVmaW5lcy4KICAqLwogI2RlZmluZSBfX0lSUVRfUklTRURHRQkoMSA8PCAwKQogI2RlZmluZSBfX0lSUVRfRkFMRURHRQkoMSA8PCAxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvYXJjaC5oCmluZGV4IDJjZDU3YjQuLmZkMmY5YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2FyY2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9hcmNoLmgKQEAgLTEwLDE5ICsxMCwxNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQogc3RydWN0IHRhZzsKIHN0cnVjdCBtZW1pbmZvOwogc3RydWN0IHN5c190aW1lcjsKIAogc3RydWN0IG1hY2hpbmVfZGVzYyB7CiAJLyoKLQkgKiBOb3RlISBUaGUgZmlyc3QgZml2ZSBlbGVtZW50cyBhcmUgdXNlZAorCSAqIE5vdGUhIFRoZSBmaXJzdCBmb3VyIGVsZW1lbnRzIGFyZSB1c2VkCiAJICogYnkgYXNzZW1ibGVyIGNvZGUgaW4gaGVhZC1hcm12LlMKIAkgKi8KIAl1bnNpZ25lZCBpbnQJCW5yOwkJLyogYXJjaGl0ZWN0dXJlIG51bWJlcgkqLwotCXVuc2lnbmVkIGludCBfX2RlcHJlY2F0ZWQgcGh5c19yYW07CS8qIHN0YXJ0IG9mIHBoeXNpY2FsIHJhbSAqLwogCXVuc2lnbmVkIGludAkJcGh5c19pbzsJLyogc3RhcnQgb2YgcGh5c2ljYWwgaW8JKi8KIAl1bnNpZ25lZCBpbnQJCWlvX3BnX29mZnN0OwkvKiBieXRlIG9mZnNldCBmb3IgaW8gCiAJCQkJCQkgKiBwYWdlIHRhYmUgZW50cnkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL2lycS5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJxLmgKaW5kZXggMGNlNmNhNS4uZDRkNDIwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvaXJxLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlzdHJ1Y3QgaXJxY2hpcAkqY2hpcDsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kOwotCXZvaWQJCSpjaGlwZGF0YTsKKwl2b2lkIF9faW9tZW0JKmJhc2U7CiAJdm9pZAkJKmRhdGE7CiAJdW5zaWduZWQgaW50CWRpc2FibGVfZGVwdGg7CiAKQEAgLTc0LDYgKzc0LDcgQEAKIAl1bnNpZ25lZCBpbnQJbm9hdXRvZW5hYmxlIDogMTsJLyogZG9uJ3QgYXV0b21hdGljYWxseSBlbmFibGUgSVJRICovCiAJdW5zaWduZWQgaW50CXVudXNlZCAgIDoyNTsKIAorCXVuc2lnbmVkIGludAlpcnFzX3VuaGFuZGxlZDsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NkaXI7CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMTMsOCArMTE0LDggQEAKICNkZWZpbmUgc2V0X2lycV9oYW5kbGVyKGlycSxoYW5kbGVyKQkJX19zZXRfaXJxX2hhbmRsZXIoaXJxLGhhbmRsZXIsMCkKICNkZWZpbmUgc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLGhhbmRsZXIpCV9fc2V0X2lycV9oYW5kbGVyKGlycSxoYW5kbGVyLDEpCiAjZGVmaW5lIHNldF9pcnFfZGF0YShpcnEsZCkJCQlkbyB7IGlycV9kZXNjW2lycV0uZGF0YSA9IGQ7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNldF9pcnFfY2hpcGRhdGEoaXJxLGQpCQkJZG8geyBpcnFfZGVzY1tpcnFdLmNoaXBkYXRhID0gZDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZ2V0X2lycV9jaGlwZGF0YShpcnEpCQkJKGlycV9kZXNjW2lycV0uY2hpcGRhdGEpCisjZGVmaW5lIHNldF9pcnFfY2hpcGRhdGEoaXJxLGQpCQkJZG8geyBpcnFfZGVzY1tpcnFdLmJhc2UgPSBkOyB9IHdoaWxlICgwKQorI2RlZmluZSBnZXRfaXJxX2NoaXBkYXRhKGlycSkJCQkoaXJxX2Rlc2NbaXJxXS5iYXNlKQogCiB2b2lkIHNldF9pcnFfY2hpcCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxY2hpcCAqKTsKIHZvaWQgc2V0X2lycV9mbGFncyh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vcGFyYW0uaAppbmRleCA5NDIyM2Q0ZC4uMTU4MDY0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BhcmFtLmgKQEAgLTExLDEyICsxMSw3IEBACiAjZGVmaW5lIF9fQVNNX1BBUkFNX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSMgaW5jbHVkZSA8YXNtL2FyY2gvcGFyYW0uaD4JCS8qIGZvciBrZXJuZWwgdmVyc2lvbiBvZiBIWiAqLwotCi0jIGlmbmRlZiBIWgotIyAgZGVmaW5lIEhaCQkxMDAJCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLSMgZW5kaWYKLQorIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCiAjIGRlZmluZSBVU0VSX0haCTEwMAkJLyogVXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCiAjIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogbGlrZSB0aW1lcygpICovCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BvbGwuaCBiL2luY2x1ZGUvYXNtLWFybS9wb2xsLmgKaW5kZXggMjc0NGNhOC4uNTAzMGIyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcG9sbC5oCkBAIC0xNiw2ICsxNiw3IEBACiAjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCiAjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAogI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCiAKIHN0cnVjdCBwb2xsZmQgewogCWludCBmZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaAppbmRleCBlYjJkZThjLi5lYzkxZDFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCkBAIC00MTUsNiArNDE1LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitleHRlcm4gdm9pZCBkaXNhYmxlX2hsdCh2b2lkKTsKK2V4dGVybiB2b2lkIGVuYWJsZV9obHQodm9pZCk7CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaAppbmRleCAzM2EzM2NiLi5jZmJjY2I2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdGhyZWFkX2luZm8uaApAQCAtNTksNyArNTksNyBAQAogCXN0cnVjdCBjcHVfY29udGV4dF9zYXZlCWNwdV9jb250ZXh0OwkvKiBjcHUgY29udGV4dCAqLwogCV9fdTgJCQl1c2VkX2NwWzE2XTsJLyogdGhyZWFkIHVzZWQgY29wcm8gKi8KIAl1bnNpZ25lZCBsb25nCQl0cF92YWx1ZTsKLQl1bmlvbiBmcF9zdGF0ZQkJZnBzdGF0ZTsKKwl1bmlvbiBmcF9zdGF0ZQkJZnBzdGF0ZSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiAJdW5pb24gdmZwX3N0YXRlCQl2ZnBzdGF0ZTsKIAlzdHJ1Y3QgcmVzdGFydF9ibG9jawlyZXN0YXJ0X2Jsb2NrOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKaW5kZXggOTM4N2E1ZS4uMGMyYWNjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKQEAgLTM0MCw2ICszNDAsMTIgQEAKIAkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzYsIDEiIDogOiAiciIgKGthZGRyKSk7CiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9JX1BBR0UpKQogCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAoa2FkZHIpKTsKKworCS8qIFRoZSBBUk0gQVJNIHN0YXRlcyB0aGF0IHRoZSBjb21wbGV0aW9uIG9mIGEgVExCIG1haW50ZW5hbmNlCisJICogb3BlcmF0aW9uIGlzIG9ubHkgZ3VhcmFudGVlZCBieSBhIERTQiBpbnN0cnVjdGlvbgorCSAqLworCWlmICh0bGJfZmxhZyhUTEJfVjZfVV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8IFRMQl9WNl9JX1BBR0UpKQorCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIDogOiAiciIgKHplcm8pKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3BvbGwuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3BvbGwuaAppbmRleCBmZGZkYWIwLi45Y2NiN2Y0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcG9sbC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIFBPTExXUk5PUk0JMHgwMTAwCiAjZGVmaW5lIFBPTExXUkJBTkQJMHgwMjAwCiAjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAorI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCiAKIHN0cnVjdCBwb2xsZmQgewogCWludCBmZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcG9sbC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wb2xsLmgKaW5kZXggMWMwZWZjMy4uMWIyNWQ0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wb2xsLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgUE9MTFdSQkFORAk1MTIKICNkZWZpbmUgUE9MTE1TRwkJMTAyNAogI2RlZmluZSBQT0xMUkVNT1ZFCTQwOTYKKyNkZWZpbmUgUE9MTFJESFVQICAgICAgIDgxOTIKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWNyaXMvc3lzdGVtLmgKaW5kZXggZDQ4NjcwMS4uMWQ2M2MyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3N5c3RlbS5oCkBAIC03MSw0ICs3MSw2IEBACiAKICNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKIAordm9pZCBkZWZhdWx0X2lkbGUodm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3BvbGwuaCBiL2luY2x1ZGUvYXNtLWZydi9wb2xsLmgKaW5kZXggOGNiY2Q2MC4uYzhmZTg4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcG9sbC5oCkBAIC0xMiw2ICsxMiw3IEBACiAjZGVmaW5lIFBPTExSREJBTkQJMTI4CiAjZGVmaW5lIFBPTExXUkJBTkQJMjU2CiAjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAorI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCiAKIHN0cnVjdCBwb2xsZmQgewogCWludCBmZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCmluZGV4IDQwMGMyYjQuLjFhNTY1YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApAQCAtNyw3ICs3LDcgQEAKICNpZmRlZiBDT05GSUdfQlVHCiAjaWZuZGVmIEhBVkVfQVJDSF9CVUcKICNkZWZpbmUgQlVHKCkgZG8geyBcCi0JcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCXByaW50aygiQlVHOiBmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKIAlwYW5pYygiQlVHISIpOyBcCiB9IHdoaWxlICgwKQogI2VuZGlmCkBAIC0xOSw3ICsxOSw3IEBACiAjaWZuZGVmIEhBVkVfQVJDSF9XQVJOX09OCiAjZGVmaW5lIFdBUk5fT04oY29uZGl0aW9uKSBkbyB7IFwKIAlpZiAodW5saWtlbHkoKGNvbmRpdGlvbikhPTApKSB7IFwKLQkJcHJpbnRrKCJCYWRuZXNzIGluICVzIGF0ICVzOiVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwkJcHJpbnRrKCJCVUc6IHdhcm5pbmcgYXQgJXM6JWQvJXMoKVxuIiwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyBcCiAJCWR1bXBfc3RhY2soKTsgXAogCX0gXAogfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCmluZGV4IDkwNDRhZWIuLjc4Y2Y0NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaApAQCAtMTksMTAgKzE5LDkgQEAKICNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKIGRvIHsJCQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAotCWZvciAoX19pID0gMDsgX19pIDwgTlJfQ1BVUzsgX19pKyspCQkJXAotCQlpZiAoY3B1X3Bvc3NpYmxlKF9faSkpCQkJCVwKLQkJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldFtfX2ldLAlcCi0JCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJXAorCWZvcl9lYWNoX2NwdShfX2kpCQkJCQlcCisJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldFtfX2ldLAkJXAorCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJCVwKIH0gd2hpbGUgKDApCiAjZWxzZSAvKiAhIFNNUCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmFsaWduZWQuaAppbmRleCA0ZGM4ZGRiLi4wOWVjNDQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3VuYWxpZ25lZC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5hbGlnbmVkLmgKQEAgLTc4LDcgKzc4LDcgQEAKIAogI2RlZmluZSBfX2dldF91bmFsaWduZWQocHRyLCBzaXplKSAoewkJXAogCWNvbnN0IHZvaWQgKl9fZ3VfcCA9IHB0cjsJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgdmFsOwkJCVwKKwlfX3U2NCB2YWw7CQkJCVwKIAlzd2l0Y2ggKHNpemUpIHsJCQkJXAogCWNhc2UgMToJCQkJCVwKIAkJdmFsID0gKihjb25zdCBfX3U4ICopX19ndV9wOwlcCkBAIC05NSw3ICs5NSw3IEBACiAJZGVmYXVsdDoJCQkJXAogCQliYWRfdW5hbGlnbmVkX2FjY2Vzc19sZW5ndGgoKTsJXAogCX07CQkJCQlcCi0JdmFsOwkJCQkJXAorCShfX3R5cGVvZl9fKCoocHRyKSkpdmFsOwkJXAogfSkKIAogI2RlZmluZSBfX3B1dF91bmFsaWduZWQodmFsLCBwdHIsIHNpemUpCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggMzVkZTIwYy4uOWQxMTU1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtNTgsNiArNTgsMTMgQEAKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa3N5bXRhYl9ncGwpID0gLjsJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCisJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZS1vbmx5IHN5bWJvbHMgKi8JCVwKKwlfX2tzeW10YWJfZ3BsX2Z1dHVyZSA6IEFUKEFERFIoX19rc3ltdGFiX2dwbF9mdXR1cmUpIC0gTE9BRF9PRkZTRVQpIHsgXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYl9ncGxfZnV0dXJlKSA9IC47CVwKKwkJKihfX2tzeW10YWJfZ3BsX2Z1dHVyZSkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa3N5bXRhYl9ncGxfZnV0dXJlKSA9IC47CVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHN5bWJvbHMgKi8JCQlcCiAJX19rY3JjdGFiICAgICAgICAgOiBBVChBRERSKF9fa2NyY3RhYikgLSBMT0FEX09GRlNFVCkgewkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa2NyY3RhYikgPSAuOwkJCVwKQEAgLTcyLDYgKzc5LDEzIEBACiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tjcmN0YWJfZ3BsKSA9IC47CQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAorCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IEdQTC1mdXR1cmUtb25seSBzeW1ib2xzICovCQlcCisJX19rY3JjdGFiX2dwbF9mdXR1cmUgOiBBVChBRERSKF9fa2NyY3RhYl9ncGxfZnV0dXJlKSAtIExPQURfT0ZGU0VUKSB7IFwKKwkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZSkgPSAuOwlcCisJCSooX19rY3JjdGFiX2dwbF9mdXR1cmUpCQkJCQlcCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZSkgPSAuOwlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IHN0cmluZ3MgKi8JCQkJXAogICAgICAgICBfX2tzeW10YWJfc3RyaW5ncyA6IEFUKEFERFIoX19rc3ltdGFiX3N0cmluZ3MpIC0gTE9BRF9PRkZTRVQpIHsJXAogCQkqKF9fa3N5bXRhYl9zdHJpbmdzKQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcG9sbC5oIGIvaW5jbHVkZS9hc20taDgzMDAvcG9sbC5oCmluZGV4IGJmNDlhYjguLmZjNTIxMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wb2xsLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNkZWZpbmUgUE9MTFJEQkFORAkxMjgKICNkZWZpbmUgUE9MTFdSQkFORAkyNTYKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hY3BpLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaAppbmRleCA1NTA1OWFiLi4yMGY1MjM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FjcGkuaApAQCAtMTAzLDYgKzEwMywxMiBAQAogICAgICAgICA6Ij1yIihuX2hpKSwgIj1yIihuX2xvKSAgICAgXAogICAgICAgICA6IjAiKG5faGkpLCAiMSIobl9sbykpCiAKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKK2V4dGVybiB2b2lkIGNoZWNrX2FjcGlfcGNpKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19hY3BpX3BjaSh2b2lkKSB7IH0KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FDUEkgCiBleHRlcm4gaW50IGFjcGlfbGFwaWM7CiBleHRlcm4gaW50IGFjcGlfaW9hcGljOwpAQCAtMTI4LDggKzEzNCw2IEBACiBleHRlcm4gaW50IHNraXBfaW9hcGljX3NldHVwOwogZXh0ZXJuIGludCBhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGU7CiAKLWV4dGVybiB2b2lkIGNoZWNrX2FjcGlfcGNpKHZvaWQpOwotCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9pb2FwaWNfc2V0dXAodm9pZCkKIHsKIAlza2lwX2lvYXBpY19zZXR1cCA9IDE7CkBAIC0xNDIsOCArMTQ2LDYgQEAKIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2lvYXBpY19zZXR1cCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19hY3BpX3BjaSh2b2lkKSB7IH0KLQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25vaXJxX3NldCh2b2lkKSB7IGFjcGlfbm9pcnEgPSAxOyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2FsdGVybmF0aXZlLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FsdGVybmF0aXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwMWRlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYWx0ZXJuYXRpdmUuaApAQCAtMCwwICsxLDEyOSBAQAorI2lmbmRlZiBfSTM4Nl9BTFRFUk5BVElWRV9ICisjZGVmaW5lIF9JMzg2X0FMVEVSTkFUSVZFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RydWN0IGFsdF9pbnN0ciB7CisJdTggKmluc3RyOyAJCS8qIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJdTggKnJlcGxhY2VtZW50OworCXU4ICBjcHVpZDsJCS8qIGNwdWlkIGJpdCBzZXQgZm9yIHJlcGxhY2VtZW50ICovCisJdTggIGluc3RybGVuOwkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJdTggIHJlcGxhY2VtZW50bGVuOyAJLyogbGVuZ3RoIG9mIG5ldyBpbnN0cnVjdGlvbiwgPD0gaW5zdHJsZW4gKi8KKwl1OCAgcGFkOworfTsKKworZXh0ZXJuIHZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzKHN0cnVjdCBhbHRfaW5zdHIgKnN0YXJ0LCBzdHJ1Y3QgYWx0X2luc3RyICplbmQpOworCitzdHJ1Y3QgbW9kdWxlOworZXh0ZXJuIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfYWRkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqbmFtZSwKKwkJCQkJdm9pZCAqbG9ja3MsIHZvaWQgKmxvY2tzX2VuZCwKKwkJCQkJdm9pZCAqdGV4dCwgdm9pZCAqdGV4dF9lbmQpOworZXh0ZXJuIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCk7CitleHRlcm4gdm9pZCBhbHRlcm5hdGl2ZXNfc21wX3N3aXRjaChpbnQgc21wKTsKKworI2VuZGlmCisKKy8qCisgKiBBbHRlcm5hdGl2ZSBpbnN0cnVjdGlvbnMgZm9yIGRpZmZlcmVudCBDUFUgdHlwZXMgb3IgY2FwYWJpbGl0aWVzLgorICoKKyAqIFRoaXMgYWxsb3dzIHRvIHVzZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zIGV2ZW4gb24gZ2VuZXJpYyBiaW5hcnkKKyAqIGtlcm5lbHMuCisgKgorICogbGVuZ3RoIG9mIG9sZGluc3RyIG11c3QgYmUgbG9uZ2VyIG9yIGVxdWFsIHRoZSBsZW5ndGggb2YgbmV3aW5zdHIKKyAqIEl0IGNhbiBiZSBwYWRkZWQgd2l0aCBub3BzIGFzIG5lZWRlZC4KKyAqCisgKiBGb3Igbm9uIGJhcnJpZXIgbGlrZSBpbmxpbmVzIHBsZWFzZSBkZWZpbmUgbmV3IHZhcmlhbnRzCisgKiB3aXRob3V0IHZvbGF0aWxlIGFuZCBtZW1vcnkgY2xvYmJlci4KKyAqLworI2RlZmluZSBhbHRlcm5hdGl2ZShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpCQkJXAorCWFzbSB2b2xhdGlsZSAoIjY2MTpcblx0IiBvbGRpbnN0ciAiXG42NjI6XG4iIAkJCVwKKwkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIJCVwKKwkJICAgICAgIiAgLmFsaWduIDRcbiIJCQkJCVwKKwkJICAgICAgIiAgLmxvbmcgNjYxYlxuIiAgICAgICAgICAgIC8qIGxhYmVsICovCQlcCisJCSAgICAgICIgIC5sb25nIDY2M2ZcbiIJCSAgLyogbmV3IGluc3RydWN0aW9uICovCVwKKwkJICAgICAgIiAgLmJ5dGUgJWMwXG4iICAgICAgICAgICAgIC8qIGZlYXR1cmUgYml0ICovCVwKKwkJICAgICAgIiAgLmJ5dGUgNjYyYi02NjFiXG4iICAgICAgIC8qIHNvdXJjZWxlbiAqLwlcCisJCSAgICAgICIgIC5ieXRlIDY2NGYtNjYzZlxuIiAgICAgICAvKiByZXBsYWNlbWVudGxlbiAqLwlcCisJCSAgICAgICIucHJldmlvdXNcbiIJCQkJCVwKKwkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF4XCJcbiIJCVwKKwkJICAgICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAgLyogcmVwbGFjZW1lbnQgKi9cCisJCSAgICAgICIucHJldmlvdXMiIDo6ICJpIiAoZmVhdHVyZSkgOiAibWVtb3J5IikKKworLyoKKyAqIEFsdGVybmF0aXZlIGlubGluZSBhc3NlbWJseSB3aXRoIGlucHV0LgorICoKKyAqIFBlY3VsYXJpdGllczoKKyAqIE5vIG1lbW9yeSBjbG9iYmVyIGhlcmUuCisgKiBBcmd1bWVudCBudW1iZXJzIHN0YXJ0IHdpdGggMS4KKyAqIEJlc3QgaXMgdG8gdXNlIGNvbnN0cmFpbnRzIHRoYXQgYXJlIGZpeGVkIHNpemUgKGxpa2UgKCUxKSAuLi4gInIiKQorICogSWYgeW91IHVzZSB2YXJpYWJsZSBzaXplZCBjb25zdHJhaW50cyBsaWtlICJtIiBvciAiZyIgaW4gdGhlCisgKiByZXBsYWNlbWVudCBtYWFrZSBzdXJlIHRvIHBhZCB0byB0aGUgd29yc3QgY2FzZSBsZW5ndGguCisgKi8KKyNkZWZpbmUgYWx0ZXJuYXRpdmVfaW5wdXQob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBpbnB1dC4uLikJXAorCWFzbSB2b2xhdGlsZSAoIjY2MTpcblx0IiBvbGRpbnN0ciAiXG42NjI6XG4iCQkJXAorCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJXAorCQkgICAgICAiICAuYWxpZ24gNFxuIgkJCQkJXAorCQkgICAgICAiICAubG9uZyA2NjFiXG4iICAgICAgICAgICAgLyogbGFiZWwgKi8JCVwKKwkJICAgICAgIiAgLmxvbmcgNjYzZlxuIgkJICAvKiBuZXcgaW5zdHJ1Y3Rpb24gKi8gXAorCQkgICAgICAiICAuYnl0ZSAlYzBcbiIgICAgICAgICAgICAgLyogZmVhdHVyZSBiaXQgKi8JXAorCQkgICAgICAiICAuYnl0ZSA2NjJiLTY2MWJcbiIgICAgICAgLyogc291cmNlbGVuICovCVwKKwkJICAgICAgIiAgLmJ5dGUgNjY0Zi02NjNmXG4iICAgICAgIC8qIHJlcGxhY2VtZW50bGVuICovIAlcCisJCSAgICAgICIucHJldmlvdXNcbiIJCQkJCVwKKwkJICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF4XCJcbiIJCVwKKwkJICAgICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAgLyogcmVwbGFjZW1lbnQgKi9cCisJCSAgICAgICIucHJldmlvdXMiIDo6ICJpIiAoZmVhdHVyZSksICMjaW5wdXQpCisKKy8qCisgKiBBbHRlcm5hdGl2ZSBpbmxpbmUgYXNzZW1ibHkgZm9yIFNNUC4KKyAqCisgKiBhbHRlcm5hdGl2ZV9zbXAoKSB0YWtlcyB0d28gdmVyc2lvbnMgKFNNUCBmaXJzdCwgVVAgc2Vjb25kKSBhbmQgaXMKKyAqIGZvciBtb3JlIGNvbXBsZXggc3R1ZmYgc3VjaCBhcyBzcGlubG9ja3MuCisgKgorICogVGhlIExPQ0tfUFJFRklYIG1hY3JvIGRlZmluZWQgaGVyZSByZXBsYWNlcyB0aGUgTE9DSyBhbmQKKyAqIExPQ0tfUFJFRklYIG1hY3JvcyB1c2VkIGV2ZXJ5d2hlcmUgaW4gdGhlIHNvdXJjZSB0cmVlLgorICoKKyAqIFNNUCBhbHRlcm5hdGl2ZXMgdXNlIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcyBhcyB0aGUgb3RoZXIKKyAqIGFsdGVybmF0aXZlcyBhbmQgdGhlIFg4Nl9GRUFUVVJFX1VQIGZsYWcgdG8gaW5kaWNhdGUgdGhlIGNhc2Ugb2YgYQorICogVVAgc3lzdGVtIHJ1bm5pbmcgYSBTTVAga2VybmVsLiAgVGhlIGV4aXN0aW5nIGFwcGx5X2FsdGVybmF0aXZlcygpCisgKiB3b3JrcyBmaW5lIGZvciBwYXRjaGluZyBhIFNNUCBrZXJuZWwgZm9yIFVQLgorICoKKyAqIFRoZSBTTVAgYWx0ZXJuYXRpdmUgdGFibGVzIGNhbiBiZSBrZXB0IGFmdGVyIGJvb3QgYW5kIGNvbnRhaW4gYm90aAorICogVVAgYW5kIFNNUCB2ZXJzaW9ucyBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHRvIGFsbG93IHN3aXRjaGluZyBiYWNrIHRvCisgKiBTTVAgYXQgcnVudGltZSwgd2hlbiBob3RwbHVnZ2luZyBpbiBhIG5ldyBDUFUsIHdoaWNoIGlzIGVzcGVjaWFsbHkKKyAqIHVzZWZ1bCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCisgKgorICogVGhlIHZlcnkgY29tbW9uIGxvY2sgcHJlZml4IGlzIGhhbmRsZWQgYXMgc3BlY2lhbCBjYXNlIGluIGEKKyAqIHNlcGFyYXRlIHRhYmxlIHdoaWNoIGlzIGEgcHVyZSBhZGRyZXNzIGxpc3Qgd2l0aG91dCByZXBsYWNlbWVudCBwdHIKKyAqIGFuZCBzaXplIGluZm9ybWF0aW9uLiAgVGhhdCBrZWVwcyB0aGUgdGFibGUgc2l6ZXMgc21hbGwuCisgKi8KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgYWx0ZXJuYXRpdmVfc21wKHNtcGluc3RyLCB1cGluc3RyLCBhcmdzLi4uKQkJCVwKKwlhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgc21waW5zdHIgIlxuNjYyOlxuIiAJCQlcCisJCSAgICAgICIuc2VjdGlvbiAuc21wX2FsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJXAorCQkgICAgICAiICAuYWxpZ24gNFxuIgkJCQkJXAorCQkgICAgICAiICAubG9uZyA2NjFiXG4iICAgICAgICAgICAgLyogbGFiZWwgKi8JCVwKKwkJICAgICAgIiAgLmxvbmcgNjYzZlxuIgkJICAvKiBuZXcgaW5zdHJ1Y3Rpb24gKi8JXAorCQkgICAgICAiICAuYnl0ZSAweDY4XG4iICAgICAgICAgICAgLyogWDg2X0ZFQVRVUkVfVVAgKi8JXAorCQkgICAgICAiICAuYnl0ZSA2NjJiLTY2MWJcbiIgICAgICAgLyogc291cmNlbGVuICovCVwKKwkJICAgICAgIiAgLmJ5dGUgNjY0Zi02NjNmXG4iICAgICAgIC8qIHJlcGxhY2VtZW50bGVuICovCVwKKwkJICAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAorCQkgICAgICAiLnNlY3Rpb24gLnNtcF9hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF3eFwiXG4iICAgCVwKKwkJICAgICAgIjY2Mzpcblx0IiB1cGluc3RyICJcbiIgICAgIC8qIHJlcGxhY2VtZW50ICovCVwKKwkJICAgICAgIjY2NDpcblx0LmZpbGwgNjYyYi02NjFiLDEsMHg0MlxuIiAvKiBzcGFjZSBmb3Igb3JpZ2luYWwgKi8gXAorCQkgICAgICAiLnByZXZpb3VzIiA6IGFyZ3MpCisKKyNkZWZpbmUgTE9DS19QUkVGSVggXAorCQkiLnNlY3Rpb24gLnNtcF9sb2NrcyxcImFcIlxuIglcCisJCSIgIC5hbGlnbiA0XG4iCQkJXAorCQkiICAubG9uZyA2NjFmXG4iIC8qIGFkZHJlc3MgKi8JXAorCQkiLnByZXZpb3VzXG4iCQkJXAorCSAgICAgICAJIjY2MTpcblx0bG9jazsgIgorCisjZWxzZSAvKiAhIENPTkZJR19TTVAgKi8KKyNkZWZpbmUgYWx0ZXJuYXRpdmVfc21wKHNtcGluc3RyLCB1cGluc3RyLCBhcmdzLi4uKSBcCisJYXNtIHZvbGF0aWxlICh1cGluc3RyIDogYXJncykKKyNkZWZpbmUgTE9DS19QUkVGSVggIiIKKyNlbmRpZgorCisjZW5kaWYgLyogX0kzODZfQUxURVJOQVRJVkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAppbmRleCBkMzBiODU3Li5mZjlhYzhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaApAQCAtMTM3LDYgKzEzNyw4IEBACiB2b2lkIHN3aXRjaF9pcGlfdG9fQVBJQ190aW1lcih2b2lkICpjcHVtYXNrKTsKICNkZWZpbmUgQVJDSF9BUElDVElNRVJfU1RPUFNfT05fQzMJMQogCitleHRlcm4gaW50IHRpbWVyX292ZXJfODI1NDsKKwogI2Vsc2UgLyogIUNPTkZJR19YODZfTE9DQUxfQVBJQyAqLwogc3RhdGljIGlubGluZSB2b2lkIGxhcGljX3NodXRkb3duKHZvaWQpIHsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2FyY2hfaG9va3MuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXJjaF9ob29rcy5oCmluZGV4IDI4Yjk2YTYuLjIzOGNmNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYXJjaF9ob29rcy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYXJjaF9ob29rcy5oCkBAIC0yNCw0ICsyNCw3IEBACiBleHRlcm4gdm9pZCB0aW1lX2luaXRfaG9vayh2b2lkKTsKIGV4dGVybiB2b2lkIG1jYV9ubWlfaG9vayh2b2lkKTsKIAorZXh0ZXJuIGludCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqKTsKK2V4dGVybiB2b2lkIGVhcmx5X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwxLDIpKSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKaW5kZXggZGU2NDlkMy4uMjJkODBlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCkBAIC0xMCwxMiArMTAsNiBAQAogICogcmVzb3VyY2UgY291bnRpbmcgZXRjLi4KICAqLwogCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBMT0NLICJsb2NrIDsgIgotI2Vsc2UKLSNkZWZpbmUgTE9DSyAiIgotI2VuZGlmCi0KIC8qCiAgKiBNYWtlIHN1cmUgZ2NjIGRvZXNuJ3QgdHJ5IHRvIGJlIGNsZXZlciBhbmQgbW92ZSB0aGluZ3MgYXJvdW5kCiAgKiBvbiB1cy4gV2UgbmVlZCB0byB1c2UgX2V4YWN0bHlfIHRoZSBhZGRyZXNzIHRoZSB1c2VyIGdhdmUgdXMsCkBAIC01Miw3ICs0Niw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLICJhZGRsICUxLCUwIgorCQlMT0NLX1BSRUZJWCAiYWRkbCAlMSwlMCIKIAkJOiI9bSIgKHYtPmNvdW50ZXIpCiAJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CiB9CkBAIC02Nyw3ICs2MSw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLICJzdWJsICUxLCUwIgorCQlMT0NLX1BSRUZJWCAic3VibCAlMSwlMCIKIAkJOiI9bSIgKHYtPmNvdW50ZXIpCiAJCToiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7CiB9CkBAIC04Niw3ICs4MCw3IEBACiAJdW5zaWduZWQgY2hhciBjOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCUxPQ0sgInN1YmwgJTIsJTA7IHNldGUgJTEiCisJCUxPQ0tfUFJFRklYICJzdWJsICUyLCUwOyBzZXRlICUxIgogCQk6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQogCQk6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGM7CkBAIC0xMDEsNyArOTUsNyBAQAogc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLICJpbmNsICUwIgorCQlMT0NLX1BSRUZJWCAiaW5jbCAlMCIKIAkJOiI9bSIgKHYtPmNvdW50ZXIpCiAJCToibSIgKHYtPmNvdW50ZXIpKTsKIH0KQEAgLTExNSw3ICsxMDksNyBAQAogc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfZGVjKGF0b21pY190ICp2KQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLICJkZWNsICUwIgorCQlMT0NLX1BSRUZJWCAiZGVjbCAlMCIKIAkJOiI9bSIgKHYtPmNvdW50ZXIpCiAJCToibSIgKHYtPmNvdW50ZXIpKTsKIH0KQEAgLTEzMyw3ICsxMjcsNyBAQAogCXVuc2lnbmVkIGNoYXIgYzsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLICJkZWNsICUwOyBzZXRlICUxIgorCQlMT0NLX1BSRUZJWCAiZGVjbCAlMDsgc2V0ZSAlMSIKIAkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKIAkJOiJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGMgIT0gMDsKQEAgLTE1Miw3ICsxNDYsNyBAQAogCXVuc2lnbmVkIGNoYXIgYzsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLICJpbmNsICUwOyBzZXRlICUxIgorCQlMT0NLX1BSRUZJWCAiaW5jbCAlMDsgc2V0ZSAlMSIKIAkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKIAkJOiJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGMgIT0gMDsKQEAgLTE3Miw3ICsxNjYsNyBAQAogCXVuc2lnbmVkIGNoYXIgYzsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLICJhZGRsICUyLCUwOyBzZXRzICUxIgorCQlMT0NLX1BSRUZJWCAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKIAkJOiI9bSIgKHYtPmNvdW50ZXIpLCAiPXFtIiAoYykKIAkJOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwogCXJldHVybiBjOwpAQCAtMTk1LDcgKzE4OSw3IEBACiAJLyogTW9kZXJuIDQ4NisgcHJvY2Vzc29yICovCiAJX19pID0gaTsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJTE9DSyAieGFkZGwgJTAsICUxOyIKKwkJTE9DS19QUkVGSVggInhhZGRsICUwLCAlMTsiCiAJCToiPXIiKGkpCiAJCToibSIodi0+Y291bnRlciksICIwIihpKSk7CiAJcmV0dXJuIGkgKyBfX2k7CkBAIC0yMzEsOCArMjI1LDE0IEBACiAoewkJCQkJCQkJXAogCWludCBjLCBvbGQ7CQkJCQkJXAogCWMgPSBhdG9taWNfcmVhZCh2KTsJCQkJCVwKLQl3aGlsZSAoYyAhPSAodSkgJiYgKG9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSkpICE9IGMpIFwKKwlmb3IgKDs7KSB7CQkJCQkJXAorCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsJCVwKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAogCQljID0gb2xkOwkJCQkJXAorCX0JCQkJCQkJXAogCWMgIT0gKHUpOwkJCQkJCVwKIH0pCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQpAQCAtMjQyLDExICsyNDIsMTEgQEAKIAogLyogVGhlc2UgYXJlIHg4Ni1zcGVjaWZpYywgdXNlZCBieSBzb21lIGhlYWRlciBmaWxlcyAqLwogI2RlZmluZSBhdG9taWNfY2xlYXJfbWFzayhtYXNrLCBhZGRyKSBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLICJhbmRsICUwLCUxIiBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIgXAogOiA6ICJyIiAofihtYXNrKSksIm0iICgqYWRkcikgOiAibWVtb3J5IikKIAogI2RlZmluZSBhdG9taWNfc2V0X21hc2sobWFzaywgYWRkcikgXAotX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DSyAib3JsICUwLCUxIiBcCitfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAib3JsICUwLCUxIiBcCiA6IDogInIiIChtYXNrKSwibSIgKCooYWRkcikpIDogIm1lbW9yeSIpCiAKIC8qIEF0b21pYyBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IHNlcmlhbGl6aW5nIG9uIHg4NiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmgKaW5kZXggODhlNmNhMjQuLjdkMjBiOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaApAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAKIC8qCiAgKiBUaGVzZSBoYXZlIHRvIGJlIGRvbmUgd2l0aCBpbmxpbmUgYXNzZW1ibHk6IHRoYXQgd2F5IHRoZSBiaXQtc2V0dGluZwpAQCAtMTYsMTIgKzE3LDYgQEAKICAqIGJpdCAwIGlzIHRoZSBMU0Igb2YgYWRkcjsgYml0IDMyIGlzIHRoZSBMU0Igb2YgKGFkZHIrMSkuCiAgKi8KIAotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgTE9DS19QUkVGSVggImxvY2sgOyAiCi0jZWxzZQotI2RlZmluZSBMT0NLX1BSRUZJWCAiIgotI2VuZGlmCi0KICNkZWZpbmUgQUREUiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIpCiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9jYWNoZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9jYWNoZS5oCmluZGV4IDYxNTkxMWUuLmNhMTVjOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2NhY2hlLmgKQEAgLTEwLDQgKzEwLDYgQEAKICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQogCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvY3B1ZmVhdHVyZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmgKaW5kZXggYzRlYzJhNC4uNWMwYjU4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9jcHVmZWF0dXJlLmgKQEAgLTcwLDYgKzcwLDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfUDMJCSgzKjMyKyA2KSAvKiBQMyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9QNAkJKDMqMzIrIDcpIC8qIFA0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyAoMyozMisgOCkgLyogVFNDIHRpY2tzIGF0IGEgY29uc3RhbnQgcmF0ZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9VUAkJKDMqMzIrIDkpIC8qIHNtcCBrZXJuZWwgcnVubmluZyBvbiB1cCAqLwogCiAvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwMSAoZWN4KSwgd29yZCA0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTTMJKDQqMzIrIDApIC8qIFN0cmVhbWluZyBTSU1EIEV4dGVuc2lvbnMtMyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9kZXNjLmggYi9pbmNsdWRlL2FzbS1pMzg2L2Rlc2MuaAppbmRleCA0OTRlNzNiLi44OWI4YjgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2Rlc2MuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2Rlc2MuaApAQCAtMjQsMTEgKzI0LDEzIEBACiAJdW5zaWduZWQgc2hvcnQgcGFkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLWV4dGVybiBzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0IGlkdF9kZXNjciwgY3B1X2dkdF9kZXNjcltOUl9DUFVTXTsKK2V4dGVybiBzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0IGlkdF9kZXNjcjsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgWGd0X2Rlc2Nfc3RydWN0LCBjcHVfZ2R0X2Rlc2NyKTsKKwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXNjX3N0cnVjdCAqZ2V0X2NwdV9nZHRfdGFibGUodW5zaWduZWQgaW50IGNwdSkKIHsKLQlyZXR1cm4gKChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKiljcHVfZ2R0X2Rlc2NyW2NwdV0uYWRkcmVzcyk7CisJcmV0dXJuIChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKilwZXJfY3B1KGNwdV9nZHRfZGVzY3IsIGNwdSkuYWRkcmVzczsKIH0KIAogI2RlZmluZSBsb2FkX1RSX2Rlc2MoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygibHRyICV3MCI6OiJxIiAoR0RUX0VOVFJZX1RTUyo4KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaW8uaCBiL2luY2x1ZGUvYXNtLWkzODYvaW8uaAppbmRleCAwMzIzM2MyLi43OTY3MGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2lvLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pby5oCkBAIC0yMTksMjMgKzIxOSwxMSBAQAogICovCiAjZGVmaW5lIF9fSVNBX0lPX2Jhc2UgKChjaGFyIF9faW9tZW0gKikoUEFHRV9PRkZTRVQpKQogCi0jZGVmaW5lIGlzYV9yZWFkYihhKSByZWFkYihfX0lTQV9JT19iYXNlICsgKGEpKQotI2RlZmluZSBpc2FfcmVhZHcoYSkgcmVhZHcoX19JU0FfSU9fYmFzZSArIChhKSkKLSNkZWZpbmUgaXNhX3JlYWRsKGEpIHJlYWRsKF9fSVNBX0lPX2Jhc2UgKyAoYSkpCi0jZGVmaW5lIGlzYV93cml0ZWIoYixhKSB3cml0ZWIoYixfX0lTQV9JT19iYXNlICsgKGEpKQotI2RlZmluZSBpc2Ffd3JpdGV3KHcsYSkgd3JpdGV3KHcsX19JU0FfSU9fYmFzZSArIChhKSkKLSNkZWZpbmUgaXNhX3dyaXRlbChsLGEpIHdyaXRlbChsLF9fSVNBX0lPX2Jhc2UgKyAoYSkpCi0jZGVmaW5lIGlzYV9tZW1zZXRfaW8oYSxiLGMpCQltZW1zZXRfaW8oX19JU0FfSU9fYmFzZSArIChhKSwoYiksKGMpKQotI2RlZmluZSBpc2FfbWVtY3B5X2Zyb21pbyhhLGIsYykJbWVtY3B5X2Zyb21pbygoYSksX19JU0FfSU9fYmFzZSArIChiKSwoYykpCi0jZGVmaW5lIGlzYV9tZW1jcHlfdG9pbyhhLGIsYykJCW1lbWNweV90b2lvKF9fSVNBX0lPX2Jhc2UgKyAoYSksKGIpLChjKSkKLQotCiAvKgogICogQWdhaW4sIGkzODYgZG9lcyBub3QgcmVxdWlyZSBtZW0gSU8gc3BlY2lmaWMgZnVuY3Rpb24uCiAgKi8KIAogI2RlZmluZSBldGhfaW9fY29weV9hbmRfc3VtKGEsYixjLGQpCQlldGhfY29weV9hbmRfc3VtKChhKSwodm9pZCBfX2ZvcmNlICopKGIpLChjKSwoZCkpCi0jZGVmaW5lIGlzYV9ldGhfaW9fY29weV9hbmRfc3VtKGEsYixjLGQpCWV0aF9jb3B5X2FuZF9zdW0oKGEpLCh2b2lkIF9fZm9yY2UgKikoX19JU0FfSU9fYmFzZSArIChiKSksKGMpLChkKSkKIAogLyoqCiAgKgljaGVja19zaWduYXR1cmUJCS0JZmluZCBCSU9TIHNpZ25hdHVyZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYva3Byb2Jlcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9rcHJvYmVzLmgKaW5kZXggMjdjYWMwNS4uYTBkMmQ3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9rcHJvYmVzLmgKQEAgLTI3LDYgKzI3LDkgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogCisjZGVmaW5lICBfX0FSQ0hfV0FOVF9LUFJPQkVTX0lOU05fU0xPVAorCitzdHJ1Y3Qga3Byb2JlOwogc3RydWN0IHB0X3JlZ3M7CiAKIHR5cGVkZWYgdTgga3Byb2JlX29wY29kZV90OwpAQCAtNDAsMTQgKzQzLDE0IEBACiAKICNkZWZpbmUgSlBST0JFX0VOVFJZKHBlbnRyeSkJKGtwcm9iZV9vcGNvZGVfdCAqKXBlbnRyeQogI2RlZmluZSBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKLSNkZWZpbmUgYXJjaF9yZW1vdmVfa3Byb2JlKHApCWRvIHt9IHdoaWxlICgwKQogCit2b2lkIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKTsKIHZvaWQga3JldHByb2JlX3RyYW1wb2xpbmUodm9pZCk7CiAKIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKi8KIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gewogCS8qIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uICovCi0Ja3Byb2JlX29wY29kZV90IGluc25bTUFYX0lOU05fU0laRV07CisJa3Byb2JlX29wY29kZV90ICppbnNuOwogfTsKIAogc3RydWN0IHByZXZfa3Byb2JlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2RvX3RpbWVyLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9kb190aW1lci5oCmluZGV4IDU2MjExNDEuLjYzMTJjM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2RvX3RpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvZG9fdGltZXIuaApAQCAtMTgsNyArMTgsNyBAQAogewogCWRvX3RpbWVyKHJlZ3MpOwogI2lmbmRlZiBDT05GSUdfU01QCi0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKKwl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGVfdm0ocmVncykpOwogI2VuZGlmCiAvKgogICogSW4gdGhlIFNNUCBjYXNlIHdlIHVzZSB0aGUgbG9jYWwgQVBJQyB0aW1lciBpbnRlcnJ1cHQgdG8gZG8gdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfbXBwYXJzZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWVzNzAwMC9tYWNoX21wcGFyc2UuaAppbmRleCA0YTA2MzdhLi45OWY2NmJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZXM3MDAwL21hY2hfbXBwYXJzZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1lczcwMDAvbWFjaF9tcHBhcnNlLmgKQEAgLTMwLDcgKzMwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZXM3MDAwX2NoZWNrX2RzZHQoKQorI2lmZGVmIENPTkZJR19BQ1BJCitzdGF0aWMgaW5saW5lIGludCBlczcwMDBfY2hlY2tfZHNkdCh2b2lkKQogewogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gTlVMTDsKIAlpZighYWNwaV9nZXRfdGFibGVfaGVhZGVyX2Vhcmx5KEFDUElfRFNEVCwgJmhlYWRlcikpCkBAIC01NCw2ICs1NSwxMSBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfbWFkdF9vZW1fY2hlY2soY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfTVBQQVJTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvZG9fdGltZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9kb190aW1lci5oCmluZGV4IDkyZDYzOGYuLjk1NTY4ZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9kb190aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9kb190aW1lci5oCkBAIC0xMSw3ICsxMSw3IEBACiAKIAlkb190aW1lcihyZWdzKTsKICNpZm5kZWYgQ09ORklHX1NNUAotCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlX3ZtKHJlZ3MpKTsKICNlbmRpZgogLyoKICAqIEluIHRoZSBTTVAgY2FzZSB3ZSB1c2UgdGhlIGxvY2FsIEFQSUMgdGltZXIgaW50ZXJydXB0IHRvIGRvIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZveWFnZXIvZG9fdGltZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmgKaW5kZXggYWU1MTBlNS4uZWFmNTE4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZveWFnZXIvZG9fdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9kb190aW1lci5oCkBAIC01LDcgKzUsNyBAQAogewogCWRvX3RpbWVyKHJlZ3MpOwogI2lmbmRlZiBDT05GSUdfU01QCi0JdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKKwl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGVfdm0ocmVncykpOwogI2VuZGlmCiAKIAl2b3lhZ2VyX3RpbWVyX2ludGVycnVwdChyZWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmggYi9pbmNsdWRlL2FzbS1pMzg2L21wc3BlYy5oCmluZGV4IDY0YTBiOGUuLjYyMTEzZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tcHNwZWMuaApAQCAtMjIsNyArMjIsNiBAQAogZXh0ZXJuIGludCBtcF9pcnFfZW50cmllczsKIGV4dGVybiBzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgbXBfaXJxcyBbTUFYX0lSUV9TT1VSQ0VTXTsKIGV4dGVybiBpbnQgbXBjX2RlZmF1bHRfdHlwZTsKLWV4dGVybiBpbnQgbXBfYnVzX2lkX3RvX3BjaV9idXMgW01BWF9NUF9CVVNTRVNdOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkcjsKIGV4dGVybiBpbnQgcGljX21vZGU7CiBleHRlcm4gaW50IHVzaW5nX2FwaWNfdGltZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L210cnIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXRyci5oCmluZGV4IDViNmNlZGEuLjY0Y2Y5MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbXRyci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXRyci5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKICNkZWZpbmUJTVRSUl9JT0NUTF9CQVNFCSdNJwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L211dGV4LmggYi9pbmNsdWRlL2FzbS1pMzg2L211dGV4LmgKaW5kZXggOWIyMTk5ZS4uMDVhNTM4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbXV0ZXguaApAQCAtOSw2ICs5LDggQEAKICNpZm5kZWYgX0FTTV9NVVRFWF9ICiAjZGVmaW5lIF9BU01fTVVURVhfSAogCisjaW5jbHVkZSAiYXNtL2FsdGVybmF0aXZlLmgiCisKIC8qKgogICogIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayAtIHRyeSB0byB0YWtlIHRoZSBsb2NrIGJ5IG1vdmluZyB0aGUgY291bnQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDEgdG8gYSAwIHZhbHVlCkBAIC0yNyw3ICsyOSw3IEBACiAJdHlwZWNoZWNrX2ZuKGZhc3RjYWxsIHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKIAkJCQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCUxPQ0sJIiAgIGRlY2wgKCUlZWF4KQlcbiIJCQlcCisJCUxPQ0tfUFJFRklYICIgICBkZWNsICglJWVheCkJXG4iCQkJXAogCQkJIiAgIGpzIDJmCQlcbiIJCQlcCiAJCQkiMToJCQlcbiIJCQlcCiAJCQkJCQkJCQlcCkBAIC04Myw3ICs4NSw3IEBACiAJdHlwZWNoZWNrX2ZuKGZhc3RjYWxsIHZvaWQgKCopKGF0b21pY190ICopLCBmYWlsX2ZuKTsJCVwKIAkJCQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCUxPQ0sJIiAgIGluY2wgKCUlZWF4KQlcbiIJCQlcCisJCUxPQ0tfUFJFRklYICIgICBpbmNsICglJWVheCkJXG4iCQkJXAogCQkJIiAgIGpsZSAyZgkJXG4iCQkJXAogCQkJIjE6CQkJXG4iCQkJXAogCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IDc0ZWY3MjEuLjI3YmRlOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmgKQEAgLTYxLDQgKzYxLDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgKHB0ZSkucHRlX2xvdyB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCit2b2lkIHZtYWxsb2Nfc3luY19hbGwodm9pZCk7CisKICNlbmRpZiAvKiBfSTM4Nl9QR1RBQkxFXzJMRVZFTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmgKaW5kZXggZjFhOGI0NS4uMzZhNWFhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTNsZXZlbC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwuaApAQCAtMTUyLDQgKzE1Miw2IEBACiAKICNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCB4KQkJZG8geyB9IHdoaWxlICgwKQogCisjZGVmaW5lIHZtYWxsb2Nfc3luY19hbGwoKSAoKHZvaWQpMCkKKwogI2VuZGlmIC8qIF9JMzg2X1BHVEFCTEVfM0xFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKaW5kZXggMDg4YTk0NS4uZWUwNTZjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKQEAgLTIxOSwxMyArMjE5LDEyIEBACiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCiAgKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCiAgKi8KLSNkZWZpbmUgX19MQVJHRV9QVEUgKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpCiBzdGF0aWMgaW5saW5lIGludCBwdGVfdXNlcihwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfVVNFUjsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQkJeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIF9QQUdFX1VTRVI7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfRElSVFk7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfQUNDRVNTRUQ7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfUlc7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9odWdlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuICgocHRlKS5wdGVfbG93ICYgX19MQVJHRV9QVEUpID09IF9fTEFSR0VfUFRFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfaHVnZShwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlKS5wdGVfbG93ICYgX1BBR0VfUFNFOyB9CiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29ya3MgaWYgcHRlX3ByZXNlbnQoKSBpcyBub3QgdHJ1ZS4KQEAgLTI0Miw3ICsyNDEsNyBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpCXsgKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCXsgKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpCXsgKHB0ZSkucHRlX2xvdyB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkJeyAocHRlKS5wdGVfbG93IHw9IF9fTEFSR0VfUFRFOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQl7IChwdGUpLnB0ZV9sb3cgfD0gX1BBR0VfUFNFOyByZXR1cm4gcHRlOyB9CiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcG9sbC5oIGIvaW5jbHVkZS9hc20taTM4Ni9wb2xsLmgKaW5kZXggYWVjYzgwYS4uMmNkNDkyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wb2xsLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9yd2xvY2suaCBiL2luY2x1ZGUvYXNtLWkzODYvcndsb2NrLmgKaW5kZXggYjU3Y2M3YS4uOTRmMDAxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9yd2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3J3bG9jay5oCkBAIC0yMSwyMSArMjEsMjMgQEAKICNkZWZpbmUgUldfTE9DS19CSUFTX1NUUgkiMHgwMTAwMDAwMCIKIAogI2RlZmluZSBfX2J1aWxkX3JlYWRfbG9ja19wdHIocncsIGhlbHBlcikgICBcCi0JYXNtIHZvbGF0aWxlKExPQ0sgInN1YmwgJDEsKCUwKVxuXHQiIFwKLQkJICAgICAiam5zIDFmXG4iIFwKLQkJICAgICAiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAotCQkgICAgICIxOlxuIiBcCi0JCSAgICAgOjoiYSIgKHJ3KSA6ICJtZW1vcnkiKQorCWFsdGVybmF0aXZlX3NtcCgibG9jazsgc3VibCAkMSwoJTApXG5cdCIgXAorCQkJImpucyAxZlxuIiBcCisJCQkiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAorCQkJIjE6XG4iLCBcCisJCQkic3VibCAkMSwoJTApXG5cdCIsIFwKKwkJCToiYSIgKHJ3KSA6ICJtZW1vcnkiKQogCiAjZGVmaW5lIF9fYnVpbGRfcmVhZF9sb2NrX2NvbnN0KHJ3LCBoZWxwZXIpICAgXAotCWFzbSB2b2xhdGlsZShMT0NLICJzdWJsICQxLCUwXG5cdCIgXAotCQkgICAgICJqbnMgMWZcbiIgXAotCQkgICAgICJwdXNobCAlJWVheFxuXHQiIFwKLQkJICAgICAibGVhbCAlMCwlJWVheFxuXHQiIFwKLQkJICAgICAiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAotCQkgICAgICJwb3BsICUlZWF4XG5cdCIgXAotCQkgICAgICIxOlxuIiBcCi0JCSAgICAgOiI9bSIgKCoodm9sYXRpbGUgaW50ICopcncpIDogOiAibWVtb3J5IikKKwlhbHRlcm5hdGl2ZV9zbXAoImxvY2s7IHN1YmwgJDEsJTBcblx0IiBcCisJCQkiam5zIDFmXG4iIFwKKwkJCSJwdXNobCAlJWVheFxuXHQiIFwKKwkJCSJsZWFsICUwLCUlZWF4XG5cdCIgXAorCQkJImNhbGwgIiBoZWxwZXIgIlxuXHQiIFwKKwkJCSJwb3BsICUlZWF4XG5cdCIgXAorCQkJIjE6XG4iLCBcCisJCQkic3VibCAkMSwlMFxuXHQiLCBcCisJCQkiPW0iICgqKHZvbGF0aWxlIGludCAqKXJ3KSA6IDogIm1lbW9yeSIpCiAKICNkZWZpbmUgX19idWlsZF9yZWFkX2xvY2socncsIGhlbHBlcikJZG8geyBcCiAJCQkJCQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AocncpKSBcCkBAIC00NSwyMSArNDcsMjMgQEAKIAkJCQkJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBfX2J1aWxkX3dyaXRlX2xvY2tfcHRyKHJ3LCBoZWxwZXIpIFwKLQlhc20gdm9sYXRpbGUoTE9DSyAic3VibCAkIiBSV19MT0NLX0JJQVNfU1RSICIsKCUwKVxuXHQiIFwKLQkJICAgICAianogMWZcbiIgXAotCQkgICAgICJjYWxsICIgaGVscGVyICJcblx0IiBcCi0JCSAgICAgIjE6XG4iIFwKLQkJICAgICA6OiJhIiAocncpIDogIm1lbW9yeSIpCisJYWx0ZXJuYXRpdmVfc21wKCJsb2NrOyBzdWJsICQiIFJXX0xPQ0tfQklBU19TVFIgIiwoJTApXG5cdCIgXAorCQkJImp6IDFmXG4iIFwKKwkJCSJjYWxsICIgaGVscGVyICJcblx0IiBcCisJCQkiMTpcbiIsIFwKKwkJCSJzdWJsICQiIFJXX0xPQ0tfQklBU19TVFIgIiwoJTApXG5cdCIsIFwKKwkJCToiYSIgKHJ3KSA6ICJtZW1vcnkiKQogCiAjZGVmaW5lIF9fYnVpbGRfd3JpdGVfbG9ja19jb25zdChydywgaGVscGVyKSBcCi0JYXNtIHZvbGF0aWxlKExPQ0sgInN1YmwgJCIgUldfTE9DS19CSUFTX1NUUiAiLCUwXG5cdCIgXAotCQkgICAgICJqeiAxZlxuIiBcCi0JCSAgICAgInB1c2hsICUlZWF4XG5cdCIgXAotCQkgICAgICJsZWFsICUwLCUlZWF4XG5cdCIgXAotCQkgICAgICJjYWxsICIgaGVscGVyICJcblx0IiBcCi0JCSAgICAgInBvcGwgJSVlYXhcblx0IiBcCi0JCSAgICAgIjE6XG4iIFwKLQkJICAgICA6Ij1tIiAoKih2b2xhdGlsZSBpbnQgKilydykgOiA6ICJtZW1vcnkiKQorCWFsdGVybmF0aXZlX3NtcCgibG9jazsgc3VibCAkIiBSV19MT0NLX0JJQVNfU1RSICIsJTBcblx0IiBcCisJCQkianogMWZcbiIgXAorCQkJInB1c2hsICUlZWF4XG5cdCIgXAorCQkJImxlYWwgJTAsJSVlYXhcblx0IiBcCisJCQkiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAorCQkJInBvcGwgJSVlYXhcblx0IiBcCisJCQkiMTpcbiIsIFwKKwkJCSJzdWJsICQiIFJXX0xPQ0tfQklBU19TVFIgIiwlMFxuXHQiLCBcCisJCQkiPW0iICgqKHZvbGF0aWxlIGludCAqKXJ3KSA6IDogIm1lbW9yeSIpCiAKICNkZWZpbmUgX19idWlsZF93cml0ZV9sb2NrKHJ3LCBoZWxwZXIpCWRvIHsgXAogCQkJCQkJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJ3KSkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2VtYXBob3JlLmgKaW5kZXggNmE0MmIyMS4uZjdhMGYzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NlbWFwaG9yZS5oCkBAIC05OSw3ICs5OSw3IEBACiAJbWlnaHRfc2xlZXAoKTsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIiMgYXRvbWljIGRvd24gb3BlcmF0aW9uXG5cdCIKLQkJTE9DSyAiZGVjbCAlMFxuXHQiICAgICAvKiAtLXNlbS0+Y291bnQgKi8KKwkJTE9DS19QUkVGSVggImRlY2wgJTBcblx0IiAgICAgLyogLS1zZW0tPmNvdW50ICovCiAJCSJqcyAyZlxuIgogCQkiMTpcbiIKIAkJTE9DS19TRUNUSU9OX1NUQVJUKCIiKQpAQCAtMTIzLDcgKzEyMyw3IEBACiAJbWlnaHRfc2xlZXAoKTsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJIiMgYXRvbWljIGludGVycnVwdGlibGUgZG93biBvcGVyYXRpb25cblx0IgotCQlMT0NLICJkZWNsICUxXG5cdCIgICAgIC8qIC0tc2VtLT5jb3VudCAqLworCQlMT0NLX1BSRUZJWCAiZGVjbCAlMVxuXHQiICAgICAvKiAtLXNlbS0+Y291bnQgKi8KIAkJImpzIDJmXG5cdCIKIAkJInhvcmwgJTAsJTBcbiIKIAkJIjE6XG4iCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiIyBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxuXHQiCi0JCUxPQ0sgImRlY2wgJTFcblx0IiAgICAgLyogLS1zZW0tPmNvdW50ICovCisJCUxPQ0tfUFJFRklYICJkZWNsICUxXG5cdCIgICAgIC8qIC0tc2VtLT5jb3VudCAqLwogCQkianMgMmZcblx0IgogCQkieG9ybCAlMCwlMFxuIgogCQkiMTpcbiIKQEAgLTE3Myw3ICsxNzMsNyBAQAogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiIyBhdG9taWMgdXAgb3BlcmF0aW9uXG5cdCIKLQkJTE9DSyAiaW5jbCAlMFxuXHQiICAgICAvKiArK3NlbS0+Y291bnQgKi8KKwkJTE9DS19QUkVGSVggImluY2wgJTBcblx0IiAgICAgLyogKytzZW0tPmNvdW50ICovCiAJCSJqbGUgMmZcbiIKIAkJIjE6XG4iCiAJCUxPQ0tfU0VDVElPTl9TVEFSVCgiIikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaAppbmRleCAyMzYwNDM1Li5kNzZiNzY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oCkBAIC0zNSwzMSArMzUsNDEgQEAKICNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrX3N0cmluZ19mbGFncyBcCiAJIlxuMTpcdCIgXAogCSJsb2NrIDsgZGVjYiAlMFxuXHQiIFwKLQkiam5zIDRmXG5cdCIgXAorCSJqbnMgNWZcbiIgXAogCSIyOlx0IiBcCiAJInRlc3RsICQweDIwMCwgJTFcblx0IiBcCi0JImp6IDNmXG5cdCIgXAotCSJzdGlcblx0IiBcCisJImp6IDRmXG5cdCIgXAorCSJzdGlcbiIgXAogCSIzOlx0IiBcCiAJInJlcDtub3Bcblx0IiBcCiAJImNtcGIgJDAsICUwXG5cdCIgXAogCSJqbGUgM2Jcblx0IiBcCiAJImNsaVxuXHQiIFwKIAkiam1wIDFiXG4iIFwKLQkiNDpcblx0IgorCSI0Olx0IiBcCisJInJlcDtub3Bcblx0IiBcCisJImNtcGIgJDAsICUwXG5cdCIgXAorCSJqZyAxYlxuXHQiIFwKKwkiam1wIDRiXG4iIFwKKwkiNTpcblx0IgorCisjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19zdHJpbmdfdXAgXAorCSJcblx0ZGVjYiAlMCIKIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJX19yYXdfc3Bpbl9sb2NrX3N0cmluZwotCQk6Ij1tIiAobG9jay0+c2xvY2spIDogOiAibWVtb3J5Iik7CisJYWx0ZXJuYXRpdmVfc21wKAorCQlfX3Jhd19zcGluX2xvY2tfc3RyaW5nLAorCQlfX3Jhd19zcGluX2xvY2tfc3RyaW5nX3VwLAorCQkiPW0iIChsb2NrLT5zbG9jaykgOiA6ICJtZW1vcnkiKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJX19yYXdfc3Bpbl9sb2NrX3N0cmluZ19mbGFncwotCQk6Ij1tIiAobG9jay0+c2xvY2spIDogInIiIChmbGFncykgOiAibWVtb3J5Iik7CisJYWx0ZXJuYXRpdmVfc21wKAorCQlfX3Jhd19zcGluX2xvY2tfc3RyaW5nX2ZsYWdzLAorCQlfX3Jhd19zcGluX2xvY2tfc3RyaW5nX3VwLAorCQkiPW0iIChsb2NrLT5zbG9jaykgOiAiciIgKGZsYWdzKSA6ICJtZW1vcnkiKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQpAQCAtMTc4LDEyICsxODgsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3JlYWRfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCiB7Ci0JYXNtIHZvbGF0aWxlKCJsb2NrIDsgaW5jbCAlMCIgOiI9bSIgKHJ3LT5sb2NrKSA6IDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jbCAlMCIgOiI9bSIgKHJ3LT5sb2NrKSA6IDogIm1lbW9yeSIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfdW5sb2NrKHJhd19yd2xvY2tfdCAqcncpCiB7Ci0JYXNtIHZvbGF0aWxlKCJsb2NrIDsgYWRkbCAkIiBSV19MT0NLX0JJQVNfU1RSICIsICUwIgorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiYWRkbCAkIiBSV19MT0NLX0JJQVNfU1RSICIsICUwIgogCQkJCSA6ICI9bSIgKHJ3LT5sb2NrKSA6IDogIm1lbW9yeSIpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaAppbmRleCAzOTkxNDVhLi4xOWNjNzljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKQEAgLTM1Miw2NyArMzUyLDYgQEAKIAogI2VuZGlmCiAgICAgCi0jaWZkZWYgX19LRVJORUxfXwotc3RydWN0IGFsdF9pbnN0ciB7IAotCV9fdTggKmluc3RyOyAJCS8qIG9yaWdpbmFsIGluc3RydWN0aW9uICovCi0JX191OCAqcmVwbGFjZW1lbnQ7Ci0JX191OCAgY3B1aWQ7CQkvKiBjcHVpZCBiaXQgc2V0IGZvciByZXBsYWNlbWVudCAqLwotCV9fdTggIGluc3RybGVuOwkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCi0JX191OCAgcmVwbGFjZW1lbnRsZW47IAkvKiBsZW5ndGggb2YgbmV3IGluc3RydWN0aW9uLCA8PSBpbnN0cmxlbiAqLyAKLQlfX3U4ICBwYWQ7Ci19OyAKLSNlbmRpZgotCi0vKiAKLSAqIEFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmb3IgZGlmZmVyZW50IENQVSB0eXBlcyBvciBjYXBhYmlsaXRpZXMuCi0gKiAKLSAqIFRoaXMgYWxsb3dzIHRvIHVzZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zIGV2ZW4gb24gZ2VuZXJpYyBiaW5hcnkKLSAqIGtlcm5lbHMuCi0gKiAKLSAqIGxlbmd0aCBvZiBvbGRpbnN0ciBtdXN0IGJlIGxvbmdlciBvciBlcXVhbCB0aGUgbGVuZ3RoIG9mIG5ld2luc3RyCi0gKiBJdCBjYW4gYmUgcGFkZGVkIHdpdGggbm9wcyBhcyBuZWVkZWQuCi0gKiAKLSAqIEZvciBub24gYmFycmllciBsaWtlIGlubGluZXMgcGxlYXNlIGRlZmluZSBuZXcgdmFyaWFudHMKLSAqIHdpdGhvdXQgdm9sYXRpbGUgYW5kIG1lbW9yeSBjbG9iYmVyLgotICovCi0jZGVmaW5lIGFsdGVybmF0aXZlKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkgCVwKLQlhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgb2xkaW5zdHIgIlxuNjYyOlxuIiAJCSAgICAgXAotCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIiAgICAgCSAgICAgXAotCQkgICAgICAiICAuYWxpZ24gNFxuIgkJCQkgICAgICAgXAotCQkgICAgICAiICAubG9uZyA2NjFiXG4iICAgICAgICAgICAgLyogbGFiZWwgKi8gICAgICAgICAgXAotCQkgICAgICAiICAubG9uZyA2NjNmXG4iCQkgIC8qIG5ldyBpbnN0cnVjdGlvbiAqLyAJXAotCQkgICAgICAiICAuYnl0ZSAlYzBcbiIgICAgICAgICAgICAgLyogZmVhdHVyZSBiaXQgKi8gICAgXAotCQkgICAgICAiICAuYnl0ZSA2NjJiLTY2MWJcbiIgICAgICAgLyogc291cmNlbGVuICovICAgICAgXAotCQkgICAgICAiICAuYnl0ZSA2NjRmLTY2M2ZcbiIgICAgICAgLyogcmVwbGFjZW1lbnRsZW4gKi8gXAotCQkgICAgICAiLnByZXZpb3VzXG4iCQkJCQkJXAotCQkgICAgICAiLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LFwiYXhcIlxuIgkJCVwKLQkJICAgICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAgLyogcmVwbGFjZW1lbnQgKi8gICAgXAotCQkgICAgICAiLnByZXZpb3VzIiA6OiAiaSIgKGZlYXR1cmUpIDogIm1lbW9yeSIpICAKLQotLyoKLSAqIEFsdGVybmF0aXZlIGlubGluZSBhc3NlbWJseSB3aXRoIGlucHV0LgotICogCi0gKiBQZWN1bGFyaXRpZXM6Ci0gKiBObyBtZW1vcnkgY2xvYmJlciBoZXJlLiAKLSAqIEFyZ3VtZW50IG51bWJlcnMgc3RhcnQgd2l0aCAxLgotICogQmVzdCBpcyB0byB1c2UgY29uc3RyYWludHMgdGhhdCBhcmUgZml4ZWQgc2l6ZSAobGlrZSAoJTEpIC4uLiAiciIpCi0gKiBJZiB5b3UgdXNlIHZhcmlhYmxlIHNpemVkIGNvbnN0cmFpbnRzIGxpa2UgIm0iIG9yICJnIiBpbiB0aGUgCi0gKiByZXBsYWNlbWVudCBtYWFrZSBzdXJlIHRvIHBhZCB0byB0aGUgd29yc3QgY2FzZSBsZW5ndGguCi0gKi8KLSNkZWZpbmUgYWx0ZXJuYXRpdmVfaW5wdXQob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBpbnB1dC4uLikJCVwKLQlhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgb2xkaW5zdHIgIlxuNjYyOlxuIgkJCQlcCi0JCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iCQkJXAotCQkgICAgICAiICAuYWxpZ24gNFxuIgkJCQkJCVwKLQkJICAgICAgIiAgLmxvbmcgNjYxYlxuIiAgICAgICAgICAgIC8qIGxhYmVsICovCQkJXAotCQkgICAgICAiICAubG9uZyA2NjNmXG4iCQkgIC8qIG5ldyBpbnN0cnVjdGlvbiAqLyAJXAotCQkgICAgICAiICAuYnl0ZSAlYzBcbiIgICAgICAgICAgICAgLyogZmVhdHVyZSBiaXQgKi8JCVwKLQkJICAgICAgIiAgLmJ5dGUgNjYyYi02NjFiXG4iICAgICAgIC8qIHNvdXJjZWxlbiAqLwkJXAotCQkgICAgICAiICAuYnl0ZSA2NjRmLTY2M2ZcbiIgICAgICAgLyogcmVwbGFjZW1lbnRsZW4gKi8gCQlcCi0JCSAgICAgICIucHJldmlvdXNcbiIJCQkJCQlcCi0JCSAgICAgICIuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsXCJheFwiXG4iCQkJXAotCQkgICAgICAiNjYzOlxuXHQiIG5ld2luc3RyICJcbjY2NDpcbiIgICAvKiByZXBsYWNlbWVudCAqLyAJXAotCQkgICAgICAiLnByZXZpb3VzIiA6OiAiaSIgKGZlYXR1cmUpLCAjI2lucHV0KQotCiAvKgogICogRm9yY2Ugc3RyaWN0IENQVSBvcmRlcmluZy4KICAqIEFuZCB5ZXMsIHRoaXMgaXMgcmVxdWlyZWQgb24gVVAgdG9vIHdoZW4gd2UncmUgdGFsa2luZwpAQCAtNTU4LDUgKzQ5Nyw4IEBACiB9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGFyY2hfYWxpZ25fc3RhY2sodW5zaWduZWQgbG9uZyBzcCk7CitleHRlcm4gdm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpOworCit2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oCmluZGV4IDNmMTMzN2MuLjM3MTQ1N2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oCkBAIC0xOTcsMTMgKzE5NywxNSBAQAogCiAjZGVmaW5lIHB1dF91c2VyKHgscHRyKQkJCQkJCVwKICh7CWludCBfX3JldF9wdTsJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsOwkJCQlcCiAJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCVwKKwlfX3B1X3ZhbCA9IHg7CQkJCQkJXAogCXN3aXRjaChzaXplb2YoKihwdHIpKSkgewkJCQlcCi0JY2FzZSAxOiBfX3B1dF91c2VyXzEoeCwgcHRyKTsgYnJlYWs7CQkJXAotCWNhc2UgMjogX19wdXRfdXNlcl8yKHgsIHB0cik7IGJyZWFrOwkJCVwKLQljYXNlIDQ6IF9fcHV0X3VzZXJfNCh4LCBwdHIpOyBicmVhazsJCQlcCi0JY2FzZSA4OiBfX3B1dF91c2VyXzgoeCwgcHRyKTsgYnJlYWs7CQkJXAotCWRlZmF1bHQ6X19wdXRfdXNlcl9YKHgsIHB0cik7IGJyZWFrOwkJCVwKKwljYXNlIDE6IF9fcHV0X3VzZXJfMShfX3B1X3ZhbCwgcHRyKTsgYnJlYWs7CQlcCisJY2FzZSAyOiBfX3B1dF91c2VyXzIoX19wdV92YWwsIHB0cik7IGJyZWFrOwkJXAorCWNhc2UgNDogX19wdXRfdXNlcl80KF9fcHVfdmFsLCBwdHIpOyBicmVhazsJCVwKKwljYXNlIDg6IF9fcHV0X3VzZXJfOChfX3B1X3ZhbCwgcHRyKTsgYnJlYWs7CQlcCisJZGVmYXVsdDpfX3B1dF91c2VyX1goX19wdV92YWwsIHB0cik7IGJyZWFrOwkJXAogCX0JCQkJCQkJXAogCV9fcmV0X3B1OwkJCQkJCVwKIH0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaAppbmRleCBkYzgxYTU1Li5kOGFmZDBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKQEAgLTM0Nyw5ICszNDcsOSBAQAogdHlwZSBuYW1lKHR5cGUxIGFyZzEpIFwKIHsgXAogbG9uZyBfX3JlczsgXAotX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgXAorX19hc21fXyB2b2xhdGlsZSAoInB1c2ggJSVlYnggOyBtb3ZsICUyLCUlZWJ4IDsgaW50ICQweDgwIDsgcG9wICUlZWJ4IiBcCiAJOiAiPWEiIChfX3JlcykgXAotCTogIjAiIChfX05SXyMjbmFtZSksImIiICgobG9uZykoYXJnMSkpIDogIm1lbW9yeSIpOyBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSwicmkiICgobG9uZykoYXJnMSkpIDogIm1lbW9yeSIpOyBcCiBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCiB9CiAKQEAgLTM1Nyw5ICszNTcsMTAgQEAKIHR5cGUgbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIpIFwKIHsgXAogbG9uZyBfX3JlczsgXAotX19hc21fXyB2b2xhdGlsZSAoImludCAkMHg4MCIgXAorX19hc21fXyB2b2xhdGlsZSAoInB1c2ggJSVlYnggOyBtb3ZsICUyLCUlZWJ4IDsgaW50ICQweDgwIDsgcG9wICUlZWJ4IiBcCiAJOiAiPWEiIChfX3JlcykgXAotCTogIjAiIChfX05SXyMjbmFtZSksImIiICgobG9uZykoYXJnMSkpLCJjIiAoKGxvbmcpKGFyZzIpKSA6ICJtZW1vcnkiKTsgXAorCTogIjAiIChfX05SXyMjbmFtZSksInJpIiAoKGxvbmcpKGFyZzEpKSwiYyIgKChsb25nKShhcmcyKSkgXAorCTogIm1lbW9yeSIpOyBcCiBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCiB9CiAKQEAgLTM2Nyw5ICszNjgsOSBAQAogdHlwZSBuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczKSBcCiB7IFwKIGxvbmcgX19yZXM7IFwKLV9fYXNtX18gdm9sYXRpbGUgKCJpbnQgJDB4ODAiIFwKK19fYXNtX18gdm9sYXRpbGUgKCJwdXNoICUlZWJ4IDsgbW92bCAlMiwlJWVieCA7IGludCAkMHg4MCA7IHBvcCAlJWVieCIgXAogCTogIj1hIiAoX19yZXMpIFwKLQk6ICIwIiAoX19OUl8jI25hbWUpLCJiIiAoKGxvbmcpKGFyZzEpKSwiYyIgKChsb25nKShhcmcyKSksIFwKKwk6ICIwIiAoX19OUl8jI25hbWUpLCJyaSIgKChsb25nKShhcmcxKSksImMiICgobG9uZykoYXJnMikpLCBcCiAJCSAgImQiICgobG9uZykoYXJnMykpIDogIm1lbW9yeSIpOyBcCiBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCiB9CkBAIC0zNzgsOSArMzc5LDkgQEAKIHR5cGUgbmFtZSAodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkgXAogeyBcCiBsb25nIF9fcmVzOyBcCi1fX2FzbV9fIHZvbGF0aWxlICgiaW50ICQweDgwIiBcCitfX2FzbV9fIHZvbGF0aWxlICgicHVzaCAlJWVieCA7IG1vdmwgJTIsJSVlYnggOyBpbnQgJDB4ODAgOyBwb3AgJSVlYngiIFwKIAk6ICI9YSIgKF9fcmVzKSBcCi0JOiAiMCIgKF9fTlJfIyNuYW1lKSwiYiIgKChsb25nKShhcmcxKSksImMiICgobG9uZykoYXJnMikpLCBcCisJOiAiMCIgKF9fTlJfIyNuYW1lKSwicmkiICgobG9uZykoYXJnMSkpLCJjIiAoKGxvbmcpKGFyZzIpKSwgXAogCSAgImQiICgobG9uZykoYXJnMykpLCJTIiAoKGxvbmcpKGFyZzQpKSA6ICJtZW1vcnkiKTsgXAogX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAogfSAKQEAgLTM5MCwxMCArMzkxLDEyIEBACiB0eXBlIG5hbWUgKHR5cGUxIGFyZzEsdHlwZTIgYXJnMix0eXBlMyBhcmczLHR5cGU0IGFyZzQsdHlwZTUgYXJnNSkgXAogeyBcCiBsb25nIF9fcmVzOyBcCi1fX2FzbV9fIHZvbGF0aWxlICgiaW50ICQweDgwIiBcCitfX2FzbV9fIHZvbGF0aWxlICgicHVzaCAlJWVieCA7IG1vdmwgJTIsJSVlYnggOyBtb3ZsICUxLCUlZWF4IDsgIiBcCisgICAgICAgICAgICAgICAgICAiaW50ICQweDgwIDsgcG9wICUlZWJ4IiBcCiAJOiAiPWEiIChfX3JlcykgXAotCTogIjAiIChfX05SXyMjbmFtZSksImIiICgobG9uZykoYXJnMSkpLCJjIiAoKGxvbmcpKGFyZzIpKSwgXAotCSAgImQiICgobG9uZykoYXJnMykpLCJTIiAoKGxvbmcpKGFyZzQpKSwiRCIgKChsb25nKShhcmc1KSkgOiAibWVtb3J5Iik7IFwKKwk6ICJpIiAoX19OUl8jI25hbWUpLCJyaSIgKChsb25nKShhcmcxKSksImMiICgobG9uZykoYXJnMikpLCBcCisJICAiZCIgKChsb25nKShhcmczKSksIlMiICgobG9uZykoYXJnNCkpLCJEIiAoKGxvbmcpKGFyZzUpKSBcCisJOiAibWVtb3J5Iik7IFwKIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKIH0KIApAQCAtNDAyLDExICs0MDUsMTQgQEAKIHR5cGUgbmFtZSAodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1LHR5cGU2IGFyZzYpIFwKIHsgXAogbG9uZyBfX3JlczsgXAotX19hc21fXyB2b2xhdGlsZSAoInB1c2ggJSVlYnAgOyBtb3ZsICUlZWF4LCUlZWJwIDsgbW92bCAlMSwlJWVheCA7IGludCAkMHg4MCA7IHBvcCAlJWVicCIgXAorICBzdHJ1Y3QgeyBsb25nIF9fYTE7IGxvbmcgX19hNjsgfSBfX3MgPSB7IChsb25nKWFyZzEsIChsb25nKWFyZzYgfTsgXAorX19hc21fXyB2b2xhdGlsZSAoInB1c2ggJSVlYnAgOyBwdXNoICUlZWJ4IDsgbW92bCA0KCUyKSwlJWVicCA7ICIgXAorICAgICAgICAgICAgICAgICAgIm1vdmwgMCglMiksJSVlYnggOyBtb3ZsICUxLCUlZWF4IDsgaW50ICQweDgwIDsgIiBcCisgICAgICAgICAgICAgICAgICAicG9wICUlZWJ4IDsgIHBvcCAlJWVicCIgXAogCTogIj1hIiAoX19yZXMpIFwKLQk6ICJpIiAoX19OUl8jI25hbWUpLCJiIiAoKGxvbmcpKGFyZzEpKSwiYyIgKChsb25nKShhcmcyKSksIFwKLQkgICJkIiAoKGxvbmcpKGFyZzMpKSwiUyIgKChsb25nKShhcmc0KSksIkQiICgobG9uZykoYXJnNSkpLCBcCi0JICAiMCIgKChsb25nKShhcmc2KSkgOiAibWVtb3J5Iik7IFwKKwk6ICJpIiAoX19OUl8jI25hbWUpLCIwIiAoKGxvbmcpKCZfX3MpKSwiYyIgKChsb25nKShhcmcyKSksIFwKKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiUyIgKChsb25nKShhcmc0KSksIkQiICgobG9uZykoYXJnNSkpIFwKKwk6ICJtZW1vcnkiKTsgXAogX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsgXAogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20taWE2NC9hdG9taWMuaAppbmRleCBkM2UwZGZhLi41NjllYzc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYXRvbWljLmgKQEAgLTk1LDggKzk1LDE0IEBACiAoewkJCQkJCQkJXAogCWludCBjLCBvbGQ7CQkJCQkJXAogCWMgPSBhdG9taWNfcmVhZCh2KTsJCQkJCVwKLQl3aGlsZSAoYyAhPSAodSkgJiYgKG9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSkpICE9IGMpIFwKKwlmb3IgKDs7KSB7CQkJCQkJXAorCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsJCVwKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAogCQljID0gb2xkOwkJCQkJXAorCX0JCQkJCQkJXAogCWMgIT0gKHUpOwkJCQkJCVwKIH0pCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oIGIvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oCmluZGV4IDQwZGQyNTE5Li5mMGExMDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oCkBAIC0yNSw0ICsyNSw2IEBACiAjIGRlZmluZSBTTVBfQ0FDSEVfQllURVMJKDEgPDwgMykKICNlbmRpZgogCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorCiAjZW5kaWYgLyogX0FTTV9JQTY0X0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaW50ZWxfaW50cmluLmggYi9pbmNsdWRlL2FzbS1pYTY0L2ludGVsX2ludHJpbi5oCmluZGV4IGE3MTIyZDguLmQwNjliNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaW50ZWxfaW50cmluLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pbnRlbF9pbnRyaW4uaApAQCAtNSwxMTMgKzUsMTAgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwMyBKdW4gTmFrYWppbWEgPGp1bi5uYWthamltYUBpbnRlbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwMyBTdXJlc2ggU2lkZGhhIDxzdXJlc2guYi5zaWRkaGFAaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgSG9uZ2ppdSBMdSA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CiAgKgogICovCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXZvaWQgIF9fbGZldGNoKGludCBsZmhpbnQsIHZvaWQgKnkpOwotdm9pZCAgX19sZmV0Y2hfZXhjbChpbnQgbGZoaW50LCB2b2lkICp5KTsKLXZvaWQgIF9fbGZldGNoX2ZhdWx0KGludCBsZmhpbnQsIHZvaWQgKnkpOwotdm9pZCAgX19sZmV0Y2hfZmF1bHRfZXhjbChpbnQgbGZoaW50LCB2b2lkICp5KTsKLQotLyogSW4gdGhlIGZvbGxvd2luZywgd2hpY2hGbG9hdFJlZyBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIDAtMTI3ICovCi12b2lkICBfX2xkZnMoY29uc3QgaW50IHdoaWNoRmxvYXRSZWcsIHZvaWQgKnNyYyk7Ci12b2lkICBfX2xkZmQoY29uc3QgaW50IHdoaWNoRmxvYXRSZWcsIHZvaWQgKnNyYyk7Ci12b2lkICBfX2xkZmUoY29uc3QgaW50IHdoaWNoRmxvYXRSZWcsIHZvaWQgKnNyYyk7Ci12b2lkICBfX2xkZjgoY29uc3QgaW50IHdoaWNoRmxvYXRSZWcsIHZvaWQgKnNyYyk7Ci12b2lkICBfX2xkZl9maWxsKGNvbnN0IGludCB3aGljaEZsb2F0UmVnLCB2b2lkICpzcmMpOwotdm9pZCAgX19zdGZzKHZvaWQgKmRzdCwgY29uc3QgaW50IHdoaWNoRmxvYXRSZWcpOwotdm9pZCAgX19zdGZkKHZvaWQgKmRzdCwgY29uc3QgaW50IHdoaWNoRmxvYXRSZWcpOwotdm9pZCAgX19zdGZlKHZvaWQgKmRzdCwgY29uc3QgaW50IHdoaWNoRmxvYXRSZWcpOwotdm9pZCAgX19zdGY4KHZvaWQgKmRzdCwgY29uc3QgaW50IHdoaWNoRmxvYXRSZWcpOwotdm9pZCAgX19zdGZfc3BpbGwodm9pZCAqZHN0LCBjb25zdCBpbnQgd2hpY2hGbG9hdFJlZyk7Ci0KLXZvaWQgIF9fc3QxX3JlbCh2b2lkICpkc3QsIGNvbnN0IF9fczggIHZhbHVlKTsKLXZvaWQgIF9fc3QyX3JlbCh2b2lkICpkc3QsIGNvbnN0IF9fczE2IHZhbHVlKTsKLXZvaWQgIF9fc3Q0X3JlbCh2b2lkICpkc3QsIGNvbnN0IF9fczMyIHZhbHVlKTsKLXZvaWQgIF9fc3Q4X3JlbCh2b2lkICpkc3QsIGNvbnN0IF9fczY0IHZhbHVlKTsKLV9fdTggIF9fbGQxX2FjcSh2b2lkICpzcmMpOwotX191MTYgX19sZDJfYWNxKHZvaWQgKnNyYyk7Ci1fX3UzMiBfX2xkNF9hY3Eodm9pZCAqc3JjKTsKLV9fdTY0IF9fbGQ4X2FjcSh2b2lkICpzcmMpOwotCi1fX3U2NCBfX2ZldGNoYWRkNF9hY3EoX191MzIgKmFkZGVuZCwgY29uc3QgaW50IGluY3JlbWVudCk7Ci1fX3U2NCBfX2ZldGNoYWRkNF9yZWwoX191MzIgKmFkZGVuZCwgY29uc3QgaW50IGluY3JlbWVudCk7Ci1fX3U2NCBfX2ZldGNoYWRkOF9hY3EoX191NjQgKmFkZGVuZCwgY29uc3QgaW50IGluY3JlbWVudCk7Ci1fX3U2NCBfX2ZldGNoYWRkOF9yZWwoX191NjQgKmFkZGVuZCwgY29uc3QgaW50IGluY3JlbWVudCk7Ci0KLV9fdTY0IF9fZ2V0Zl9leHAoZG91YmxlIGQpOwotCi0vKiBPUyBSZWxhdGVkIEl0YW5pdW0oUikgSW50cmluc2ljcyAgKi8KLQotLyogVGhlIG5hbWVzIHRvIHVzZSBmb3Igd2hpY2hSZWcgYW5kIHdoaWNoSW5kUmVnIGJlbG93IGNvbWUgZnJvbQotICAgdGhlIGluY2x1ZGUgZmlsZSBhc20vaWE2NHJlZ3MuaCAqLwotCi1fX3U2NCBfX2dldEluZFJlZyhjb25zdCBpbnQgd2hpY2hJbmRSZWcsIF9fczY0IGluZGV4KTsKLV9fdTY0IF9fZ2V0UmVnKGNvbnN0IGludCB3aGljaFJlZyk7Ci0KLXZvaWQgIF9fc2V0SW5kUmVnKGNvbnN0IGludCB3aGljaEluZFJlZywgX19zNjQgaW5kZXgsIF9fdTY0IHZhbHVlKTsKLXZvaWQgIF9fc2V0UmVnKGNvbnN0IGludCB3aGljaFJlZywgX191NjQgdmFsdWUpOwotCi12b2lkICBfX21mKHZvaWQpOwotdm9pZCAgX19tZmEodm9pZCk7Ci12b2lkICBfX3N5bmNpKHZvaWQpOwotdm9pZCAgX19pdGNkKF9fczY0IHBhKTsKLXZvaWQgIF9faXRjaShfX3M2NCBwYSk7Ci12b2lkICBfX2l0cmQoX19zNjQgd2hpY2hUcmFuc1JlZywgX19zNjQgcGEpOwotdm9pZCAgX19pdHJpKF9fczY0IHdoaWNoVHJhbnNSZWcsIF9fczY0IHBhKTsKLXZvaWQgIF9fcHRjZShfX3M2NCB2YSk7Ci12b2lkICBfX3B0Y2woX19zNjQgdmEsIF9fczY0IHBhZ2Vzeik7Ci12b2lkICBfX3B0Y2coX19zNjQgdmEsIF9fczY0IHBhZ2Vzeik7Ci12b2lkICBfX3B0Y2dhKF9fczY0IHZhLCBfX3M2NCBwYWdlc3opOwotdm9pZCAgX19wdHJpKF9fczY0IHZhLCBfX3M2NCBwYWdlc3opOwotdm9pZCAgX19wdHJkKF9fczY0IHZhLCBfX3M2NCBwYWdlc3opOwotdm9pZCAgX19pbnZhbGEgKHZvaWQpOwotdm9pZCAgX19pbnZhbGFfZ3IoY29uc3QgaW50IHdoaWNoR2VuZXJhbFJlZyAvKiAwLTEyNyAqLyApOwotdm9pZCAgX19pbnZhbGFfZnIoY29uc3QgaW50IHdoaWNoRmxvYXRSZWcgLyogMC0xMjcgKi8gKTsKLXZvaWQgIF9fbm9wKGNvbnN0IGludCk7Ci12b2lkICBfX2ZjKF9fdTY0ICphZGRyKTsKLXZvaWQgIF9fc3VtKGludCBtYXNrKTsKLXZvaWQgIF9fcnVtKGludCBtYXNrKTsKLXZvaWQgIF9fc3NtKGludCBtYXNrKTsKLXZvaWQgIF9fcnNtKGludCBtYXNrKTsKLV9fdTY0IF9fdGhhc2goX19zNjQpOwotX191NjQgX190dGFnKF9fczY0KTsKLV9fczY0IF9fdHBhKF9fczY0KTsKLQotLyogSW50cmluc2ljcyBmb3IgaW1wbGVtZW50aW5nIGdldC9wdXRfdXNlciBtYWNyb3MgKi8KLXZvaWQgX19zdF91c2VyKGNvbnN0IGNoYXIgKnRhYmxlTmFtZSwgX191NjQgYWRkciwgY2hhciBzaXplLCBjaGFyIHJlbG9jVHlwZSwgX191NjQgdmFsKTsKLXZvaWQgX19sZF91c2VyKGNvbnN0IGNoYXIgKnRhYmxlTmFtZSwgX191NjQgYWRkciwgY2hhciBzaXplLCBjaGFyIHJlbG9jVHlwZSk7Ci0KLS8qIFRoaXMgaW50cmluc2ljIGRvZXMgbm90IGdlbmVyYXRlIGNvZGUsIGl0IGNyZWF0ZXMgYSBiYXJyaWVyIGFjcm9zcyB3aGljaAotICogdGhlIGNvbXBpbGVyIHdpbGwgbm90IHNjaGVkdWxlIGRhdGEgYWNjZXNzIGluc3RydWN0aW9ucy4KLSAqLwotdm9pZCBfX21lbW9yeV9iYXJyaWVyKHZvaWQpOwotCi12b2lkIF9faXNybHoodm9pZCk7Ci12b2lkIF9fZHNybHoodm9pZCk7Ci0KLV9fdTY0ICBfbTY0X211eDEoX191NjQgYSwgY29uc3QgaW50IG4pOwotX191NjQgIF9fdGhhc2goX191NjQpOwotCi0vKiBMb2NrIGFuZCBBdG9taWMgT3BlcmF0aW9uIFJlbGF0ZWQgSW50cmluc2ljcyAqLwotX191NjQgX0ludGVybG9ja2VkRXhjaGFuZ2U4KHZvbGF0aWxlIF9fdTggKnRyZ3QsIF9fdTggdmFsdWUpOwotX191NjQgX0ludGVybG9ja2VkRXhjaGFuZ2UxNih2b2xhdGlsZSBfX3UxNiAqdHJndCwgX191MTYgdmFsdWUpOwotX19zNjQgX0ludGVybG9ja2VkRXhjaGFuZ2Uodm9sYXRpbGUgX191MzIgKnRyZ3QsIF9fdTMyIHZhbHVlKTsKLV9fczY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlNjQodm9sYXRpbGUgX191NjQgKnRyZ3QsIF9fdTY0IHZhbHVlKTsKLQotX191NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlOF9yZWwodm9sYXRpbGUgX191OCAqZGVzdCwgX191NjQgeGNoZywgX191NjQgY29tcCk7Ci1fX3U2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U4X2FjcSh2b2xhdGlsZSBfX3U4ICpkZXN0LCBfX3U2NCB4Y2hnLCBfX3U2NCBjb21wKTsKLV9fdTY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTE2X3JlbCh2b2xhdGlsZSBfX3UxNiAqZGVzdCwgX191NjQgeGNoZywgX191NjQgY29tcCk7Ci1fX3U2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UxNl9hY3Eodm9sYXRpbGUgX191MTYgKmRlc3QsIF9fdTY0IHhjaGcsIF9fdTY0IGNvbXApOwotX191NjQgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlX3JlbCh2b2xhdGlsZSBfX3UzMiAqZGVzdCwgX191NjQgeGNoZywgX191NjQgY29tcCk7Ci1fX3U2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VfYWNxKHZvbGF0aWxlIF9fdTMyICpkZXN0LCBfX3U2NCB4Y2hnLCBfX3U2NCBjb21wKTsKLV9fdTY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0X3JlbCh2b2xhdGlsZSBfX3U2NCAqZGVzdCwgX191NjQgeGNoZywgX191NjQgY29tcCk7Ci1fX3U2NCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2U2NF9hY3Eodm9sYXRpbGUgX191NjQgKmRlc3QsIF9fdTY0IHhjaGcsIF9fdTY0IGNvbXApOwotCi1fX3M2NCBfbTY0X2RlcF9taShjb25zdCBpbnQgdiwgX19zNjQgcywgY29uc3QgaW50IHAsIGNvbnN0IGludCBsZW4pOwotX19zNjQgX202NF9zaHJwKF9fczY0IGEsIF9fczY0IGIsIGNvbnN0IGludCBjb3VudCk7Ci1fX3M2NCBfbTY0X3BvcGNudChfX3M2NCBhKTsKKyNpbmNsdWRlIDxpYTY0aW50cmluLmg+CiAKICNkZWZpbmUgaWE2NF9iYXJyaWVyKCkJCV9fbWVtb3J5X2JhcnJpZXIoKQogCkBAIC0xMjIsMTUgKzE5LDE2IEBACiAjZGVmaW5lIGlhNjRfZ2V0cmVnCQlfX2dldFJlZwogI2RlZmluZSBpYTY0X3NldHJlZwkJX19zZXRSZWcKIAotI2RlZmluZSBpYTY0X2hpbnQoeCkKKyNkZWZpbmUgaWE2NF9oaW50CQlfX2hpbnQKKyNkZWZpbmUgaWE2NF9oaW50X3BhdXNlCQlfX2hpbnRfcGF1c2UKIAotI2RlZmluZSBpYTY0X211eDFfYnJjc3QJIDAKLSNkZWZpbmUgaWE2NF9tdXgxX21peAkJIDgKLSNkZWZpbmUgaWE2NF9tdXgxX3NodWYJCSA5Ci0jZGVmaW5lIGlhNjRfbXV4MV9hbHQJCTEwCi0jZGVmaW5lIGlhNjRfbXV4MV9yZXYJCTExCisjZGVmaW5lIGlhNjRfbXV4MV9icmNzdAkJX202NF9tdXgxX2JyY3N0CisjZGVmaW5lIGlhNjRfbXV4MV9taXgJCV9tNjRfbXV4MV9taXgKKyNkZWZpbmUgaWE2NF9tdXgxX3NodWYJCV9tNjRfbXV4MV9zaHVmCisjZGVmaW5lIGlhNjRfbXV4MV9hbHQJCV9tNjRfbXV4MV9hbHQKKyNkZWZpbmUgaWE2NF9tdXgxX3JldgkJX202NF9tdXgxX3JldgogCi0jZGVmaW5lIGlhNjRfbXV4MQkJX202NF9tdXgxCisjZGVmaW5lIGlhNjRfbXV4MSh4LHYpCQlfbV90b19pbnQ2NChfbTY0X211eDEoX21fZnJvbV9pbnQ2NCh4KSwgKHYpKSkKICNkZWZpbmUgaWE2NF9wb3BjbnQJCV9tNjRfcG9wY250CiAjZGVmaW5lIGlhNjRfZ2V0Zl9leHAJCV9fZ2V0Zl9leHAKICNkZWZpbmUgaWE2NF9zaHJwCQlfbTY0X3NocnAKQEAgLTE1OCw3ICs1Niw3IEBACiAjZGVmaW5lIGlhNjRfc3RmOAkJX19zdGY4CiAjZGVmaW5lIGlhNjRfc3RmX3NwaWxsCQlfX3N0Zl9zcGlsbAogCi0jZGVmaW5lIGlhNjRfbWYJCV9fbWYKKyNkZWZpbmUgaWE2NF9tZgkJCV9fbWYKICNkZWZpbmUgaWE2NF9tZmEJCV9fbWZhCiAKICNkZWZpbmUgaWE2NF9mZXRjaGFkZDRfYWNxCV9fZmV0Y2hhZGQ0X2FjcQpAQCAtMjM0LDEwICsxMzIsMTAgQEAKIAogLyogVmFsdWVzIGZvciBsZmhpbnQgaW4gX19sZmV0Y2ggYW5kIF9fbGZldGNoX2ZhdWx0ICovCiAKLSNkZWZpbmUgaWE2NF9sZmhpbnRfbm9uZSAgIAkwCi0jZGVmaW5lIGlhNjRfbGZoaW50X250MSAgICAJMQotI2RlZmluZSBpYTY0X2xmaGludF9udDIgICAgCTIKLSNkZWZpbmUgaWE2NF9sZmhpbnRfbnRhICAgIAkzCisjZGVmaW5lIGlhNjRfbGZoaW50X25vbmUJX19sZmhpbnRfbm9uZQorI2RlZmluZSBpYTY0X2xmaGludF9udDEJCV9fbGZoaW50X250MQorI2RlZmluZSBpYTY0X2xmaGludF9udDIJCV9fbGZoaW50X250MgorI2RlZmluZSBpYTY0X2xmaGludF9udGEJCV9fbGZoaW50X250YQogCiAjZGVmaW5lIGlhNjRfbGZldGNoCQlfX2xmZXRjaAogI2RlZmluZSBpYTY0X2xmZXRjaF9leGNsCV9fbGZldGNoX2V4Y2wKQEAgLTI1NCw0ICsxNTIsNiBAQAogCX0JCQkJCQlcCiB9IHdoaWxlICgwKQogCisjZGVmaW5lIF9fYnVpbHRpbl90cmFwKCkJX19icmVhaygwKTsKKwogI2VuZGlmIC8qIF9BU01fSUE2NF9JTlRFTF9JTlRSSU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9saW5rYWdlLmggYi9pbmNsdWRlL2FzbS1pYTY0L2xpbmthZ2UuaAppbmRleCAxNGNkNzJjLi5lZjIyYTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2xpbmthZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2xpbmthZ2UuaApAQCAtMSw2ICsxLDE0IEBACiAjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAogI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKwogI2RlZmluZSBhc21saW5rYWdlIENQUF9BU01MSU5LQUdFIF9fYXR0cmlidXRlX18oKHN5c2NhbGxfbGlua2FnZSkpCiAKKyNlbHNlCisKKyNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KKworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmggYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaAppbmRleCBjYTVlYTk5Li5jM2U0ZWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWMuaApAQCAtMjAsNiArMjAsNyBAQAogc3RydWN0IHBhZ2U7CiBzdHJ1Y3QgbW1fc3RydWN0Owogc3RydWN0IHBjaV9idXM7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKIHR5cGVkZWYgdm9pZCBpYTY0X212X3NldHVwX3QgKGNoYXIgKiopOwogdHlwZWRlZiB2b2lkIGlhNjRfbXZfY3B1X2luaXRfdCAodm9pZCk7CkBAIC0zNCw2ICszNSw3IEBACiAJCQkJICAgICAgIHU4IHNpemUpOwogdHlwZWRlZiBpbnQgaWE2NF9tdl9wY2lfbGVnYWN5X3dyaXRlX3QgKHN0cnVjdCBwY2lfYnVzICosIHUxNiBwb3J0LCB1MzIgdmFsLAogCQkJCQl1OCBzaXplKTsKK3R5cGVkZWYgdm9pZCBpYTY0X212X21pZ3JhdGVfdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrKTsKIAogLyogRE1BLW1hcHBpbmcgaW50ZXJmYWNlOiAqLwogdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX2luaXQgKHZvaWQpOwpAQCAtODUsNiArODcsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCittYWNodmVjX25vb3BfdGFzayAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworfQorCiBleHRlcm4gdm9pZCBtYWNodmVjX3NldHVwIChjaGFyICoqKTsKIGV4dGVybiB2b2lkIG1hY2h2ZWNfdGltZXJfaW50ZXJydXB0IChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBtYWNodmVjX2RtYV9zeW5jX3NpbmdsZSAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7CkBAIC0xNDYsNiArMTUzLDcgQEAKICMgIGRlZmluZSBwbGF0Zm9ybV9yZWFkd19yZWxheGVkICAgICAgICBpYTY0X212LnJlYWR3X3JlbGF4ZWQKICMgIGRlZmluZSBwbGF0Zm9ybV9yZWFkbF9yZWxheGVkICAgICAgICBpYTY0X212LnJlYWRsX3JlbGF4ZWQKICMgIGRlZmluZSBwbGF0Zm9ybV9yZWFkcV9yZWxheGVkICAgICAgICBpYTY0X212LnJlYWRxX3JlbGF4ZWQKKyMgIGRlZmluZSBwbGF0Zm9ybV9taWdyYXRlCQlpYTY0X212Lm1pZ3JhdGUKICMgZW5kaWYKIAogLyogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMTYpKSkgaXMgcmVxdWlyZWQgdG8gbWFrZSBzaXplIG9mIHRoZQpAQCAtMTk0LDYgKzIwMiw3IEBACiAJaWE2NF9tdl9yZWFkd19yZWxheGVkX3QgKnJlYWR3X3JlbGF4ZWQ7CiAJaWE2NF9tdl9yZWFkbF9yZWxheGVkX3QgKnJlYWRsX3JlbGF4ZWQ7CiAJaWE2NF9tdl9yZWFkcV9yZWxheGVkX3QgKnJlYWRxX3JlbGF4ZWQ7CisJaWE2NF9tdl9taWdyYXRlX3QgKm1pZ3JhdGU7CiB9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDE2KSkpOyAvKiBhbGlnbiBhdHRyaWI/IHNlZSBhYm92ZSBjb21tZW50ICovCiAKICNkZWZpbmUgTUFDSFZFQ19JTklUKG5hbWUpCQkJXApAQCAtMjM4LDYgKzI0Nyw3IEBACiAJcGxhdGZvcm1fcmVhZHdfcmVsYXhlZCwJCQlcCiAJcGxhdGZvcm1fcmVhZGxfcmVsYXhlZCwJCQlcCiAJcGxhdGZvcm1fcmVhZHFfcmVsYXhlZCwJCQlcCisJcGxhdGZvcm1fbWlncmF0ZSwJCQlcCiB9CiAKIGV4dGVybiBzdHJ1Y3QgaWE2NF9tYWNoaW5lX3ZlY3RvciBpYTY0X212OwpAQCAtMzg2LDUgKzM5Niw4IEBACiAjaWZuZGVmIHBsYXRmb3JtX3JlYWRxX3JlbGF4ZWQKICMgZGVmaW5lIHBsYXRmb3JtX3JlYWRxX3JlbGF4ZWQJX19pYTY0X3JlYWRxX3JlbGF4ZWQKICNlbmRpZgorI2lmbmRlZiBwbGF0Zm9ybV9taWdyYXRlCisjIGRlZmluZSBwbGF0Zm9ybV9taWdyYXRlIG1hY2h2ZWNfbm9vcF90YXNrCisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9NQUNIVkVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19zbjIuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlY19zbjIuaAppbmRleCAwM2QwMGZhLi5kYTFkNDM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21hY2h2ZWNfc24yLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjX3NuMi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLCAyMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywyMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCkBAIC02Niw2ICs2Niw3IEBACiBleHRlcm4gaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2U7CiBleHRlcm4gaWE2NF9tdl9kbWFfbWFwcGluZ19lcnJvcglzbl9kbWFfbWFwcGluZ19lcnJvcjsKIGV4dGVybiBpYTY0X212X2RtYV9zdXBwb3J0ZWQJCXNuX2RtYV9zdXBwb3J0ZWQ7CitleHRlcm4gaWE2NF9tdl9taWdyYXRlX3QJCXNuX21pZ3JhdGU7CiAKIC8qCiAgKiBUaGlzIHN0dWZmIGhhcyBkdWFsIHVzZSEKQEAgLTExNSw2ICsxMTYsNyBAQAogI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKICNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCXNuX2RtYV9tYXBwaW5nX2Vycm9yCiAjZGVmaW5lIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJCXNuX2RtYV9zdXBwb3J0ZWQKKyNkZWZpbmUgcGxhdGZvcm1fbWlncmF0ZQkJc25fbWlncmF0ZQogCiAjaW5jbHVkZSA8YXNtL3NuL2lvLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmggYi9pbmNsdWRlL2FzbS1pYTY0L21jYS5oCmluZGV4IGM3ZDljOWUuLmJmYmJiOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tY2EuaApAQCAtMTMxLDYgKzEzMSw4IEBACiAvKiBBcnJheSBvZiBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgZWFjaCBDUFUncyBNQ0EgYXJlYS4gICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfbWNhW05SX0NQVVNdOwogCitleHRlcm4gaW50IGNwZV92ZWN0b3I7CitleHRlcm4gaW50IGlhNjRfY3BlX2lycTsKIGV4dGVybiB2b2lkIGlhNjRfbWNhX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpYTY0X21jYV9jcHVfaW5pdCh2b2lkICopOwogZXh0ZXJuIHZvaWQgaWE2NF9vc19tY2FfZGlzcGF0Y2godm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmggYi9pbmNsdWRlL2FzbS1pYTY0L211dGV4LmgKaW5kZXggNDU4YzFmNy4uNWEzMjI0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbXV0ZXguaApAQCAtMSw5ICsxLDkyIEBACiAvKgotICogUHVsbCBpbiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIG11dGV4IGZhc3RwYXRoLgorICogaWE2NCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbXV0ZXggZmFzdHBhdGguCiAgKgotICogVE9ETzogaW1wbGVtZW50IG9wdGltaXplZCBwcmltaXRpdmVzIGluc3RlYWQsIG9yIGxlYXZlIHRoZSBnZW5lcmljCi0gKiBpbXBsZW1lbnRhdGlvbiBpbiBwbGFjZSwgb3IgcGljayB0aGUgYXRvbWljX3hjaGcoKSBiYXNlZCBnZW5lcmljCi0gKiBpbXBsZW1lbnRhdGlvbi4gKHNlZSBhc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggZm9yIGRldGFpbHMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgS2VuIENoZW4gPGtlbm5ldGgudy5jaGVuQGludGVsLmNvbT4KKyAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL211dGV4LWRlYy5oPgorI2lmbmRlZiBfQVNNX01VVEVYX0gKKyNkZWZpbmUgX0FTTV9NVVRFWF9ICisKKy8qKgorICogIF9fbXV0ZXhfZmFzdHBhdGhfbG9jayAtIHRyeSB0byB0YWtlIHRoZSBsb2NrIGJ5IG1vdmluZyB0aGUgY291bnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIDEgdG8gYSAwIHZhbHVlCisgKiAgQGNvdW50OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqICBAZmFpbF9mbjogZnVuY3Rpb24gdG8gY2FsbCBpZiB0aGUgb3JpZ2luYWwgdmFsdWUgd2FzIG5vdCAxCisgKgorICogQ2hhbmdlIHRoZSBjb3VudCBmcm9tIDEgdG8gYSB2YWx1ZSBsb3dlciB0aGFuIDEsIGFuZCBjYWxsIDxmYWlsX2ZuPiBpZgorICogaXQgd2Fzbid0IDEgb3JpZ2luYWxseS4gVGhpcyBmdW5jdGlvbiBNVVNUIGxlYXZlIHRoZSB2YWx1ZSBsb3dlciB0aGFuCisgKiAxIGV2ZW4gd2hlbiB0aGUgIjEiIGFzc2VydGlvbiB3YXNuJ3QgdHJ1ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX211dGV4X2Zhc3RwYXRoX2xvY2soYXRvbWljX3QgKmNvdW50LCB2b2lkICgqZmFpbF9mbikoYXRvbWljX3QgKikpCit7CisJaWYgKHVubGlrZWx5KGlhNjRfZmV0Y2hhZGQ0X2FjcShjb3VudCwgLTEpICE9IDEpKQorCQlmYWlsX2ZuKGNvdW50KTsKK30KKworLyoqCisgKiAgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbCAtIHRyeSB0byB0YWtlIHRoZSBsb2NrIGJ5IG1vdmluZyB0aGUgY291bnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAxIHRvIGEgMCB2YWx1ZQorICogIEBjb3VudDogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiAgQGZhaWxfZm46IGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBub3QgMQorICoKKyAqIENoYW5nZSB0aGUgY291bnQgZnJvbSAxIHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAxLCBhbmQgY2FsbCA8ZmFpbF9mbj4gaWYKKyAqIGl0IHdhc24ndCAxIG9yaWdpbmFsbHkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSBmYXN0cGF0aCBzdWNjZWVkcywKKyAqIG9yIGFueXRoaW5nIHRoZSBzbG93IHBhdGggZnVuY3Rpb24gcmV0dXJucy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwoYXRvbWljX3QgKmNvdW50LCBpbnQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3sKKwlpZiAodW5saWtlbHkoaWE2NF9mZXRjaGFkZDRfYWNxKGNvdW50LCAtMSkgIT0gMSkpCisJCXJldHVybiBmYWlsX2ZuKGNvdW50KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgX19tdXRleF9mYXN0cGF0aF91bmxvY2sgLSB0cnkgdG8gcHJvbW90ZSB0aGUgY291bnQgZnJvbSAwIHRvIDEKKyAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogIEBmYWlsX2ZuOiBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBvcmlnaW5hbCB2YWx1ZSB3YXMgbm90IDAKKyAqCisgKiBUcnkgdG8gcHJvbW90ZSB0aGUgY291bnQgZnJvbSAwIHRvIDEuIElmIGl0IHdhc24ndCAwLCBjYWxsIDxmYWlsX2ZuPi4KKyAqIEluIHRoZSBmYWlsdXJlIGNhc2UsIHRoaXMgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBlaXRoZXIgc2V0IHRoZSB2YWx1ZSB0bworICogMSwgb3IgdG8gc2V0IGl0IHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAxLgorICoKKyAqIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBzZXRzIGl0IHRvIGEgdmFsdWUgb2YgbG93ZXIgdGhhbiAxLCB0aGVuIHRoZQorICogX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKSBtYWNybyBuZWVkcyB0byByZXR1cm4gMSwgaXQgbmVlZHMKKyAqIHRvIHJldHVybiAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX211dGV4X2Zhc3RwYXRoX3VubG9jayhhdG9taWNfdCAqY291bnQsIHZvaWQgKCpmYWlsX2ZuKShhdG9taWNfdCAqKSkKK3sKKwlpbnQgcmV0ID0gaWE2NF9mZXRjaGFkZDRfcmVsKGNvdW50LCAxKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpCisJCWZhaWxfZm4oY291bnQpOworfQorCisjZGVmaW5lIF9fbXV0ZXhfc2xvd3BhdGhfbmVlZHNfdG9fdW5sb2NrKCkJCTEKKworLyoqCisgKiBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2sgLSB0cnkgdG8gYWNxdWlyZSB0aGUgbXV0ZXgsIHdpdGhvdXQgd2FpdGluZworICoKKyAqICBAY291bnQ6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogIEBmYWlsX2ZuOiBmYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIENoYW5nZSB0aGUgY291bnQgZnJvbSAxIHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAxLCBhbmQgcmV0dXJuIDAgKGZhaWx1cmUpCisgKiBpZiBpdCB3YXNuJ3QgMSBvcmlnaW5hbGx5LCBvciByZXR1cm4gMSAoc3VjY2Vzcykgb3RoZXJ3aXNlLiBUaGlzIGZ1bmN0aW9uCisgKiBNVVNUIGxlYXZlIHRoZSB2YWx1ZSBsb3dlciB0aGFuIDEgZXZlbiB3aGVuIHRoZSAiMSIgYXNzZXJ0aW9uIHdhc24ndCB0cnVlLgorICogQWRkaXRpb25hbGx5LCBpZiB0aGUgdmFsdWUgd2FzIDwgMCBvcmlnaW5hbGx5LCB0aGlzIGZ1bmN0aW9uIG11c3Qgbm90IGxlYXZlCisgKiBpdCB0byAwIG9uIGZhaWx1cmUuCisgKgorICogSWYgdGhlIGFyY2hpdGVjdHVyZSBoYXMgbm8gZWZmZWN0aXZlIHRyeWxvY2sgdmFyaWFudCwgaXQgc2hvdWxkIGNhbGwgdGhlCisgKiA8ZmFpbF9mbj4gc3BpbmxvY2stYmFzZWQgdHJ5bG9jayB2YXJpYW50IHVuY29uZGl0aW9uYWxseS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK19fbXV0ZXhfZmFzdHBhdGhfdHJ5bG9jayhhdG9taWNfdCAqY291bnQsIGludCAoKmZhaWxfZm4pKGF0b21pY190ICopKQoreworCWlmIChsaWtlbHkoY21weGNoZ19hY3EoY291bnQsIDEsIDApKSA9PSAxKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGFnZS5oCmluZGV4IDVlNjM2MmEuLjNhYjI3MzMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaApAQCAtNTcsNiArNTcsOCBAQAogCiAjIGRlZmluZSBIQVZFX0FSQ0hfSFVHRVRMQl9VTk1BUFBFRF9BUkVBCiAjIGRlZmluZSBBUkNIX0hBU19IVUdFUEFHRV9PTkxZX1JBTkdFCisjIGRlZmluZSBBUkNIX0hBU19QUkVQQVJFX0hVR0VQQUdFX1JBTkdFCisjIGRlZmluZSBBUkNIX0hBU19IVUdFVExCX0ZSRUVfUEdEX1JBTkdFCiAjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwogCiAjaWZkZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCmluZGV4IGUyNTYwYzUuLmMwZjgxNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGd0YWJsZS5oCkBAIC0zMTQsNyArMzE0LDcgQEAKICNkZWZpbmUgcHRlX21reW91bmcocHRlKQkoX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfQSkpCiAjZGVmaW5lIHB0ZV9ta2NsZWFuKHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9EKSkKICNkZWZpbmUgcHRlX21rZGlydHkocHRlKQkoX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfRCkpCi0jZGVmaW5lIHB0ZV9ta2h1Z2UocHRlKQkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1ApKQorI2RlZmluZSBwdGVfbWtodWdlKHB0ZSkJCShfX3B0ZShwdGVfdmFsKHB0ZSkpKQogCiAvKgogICogTWFjcm8gdG8gYSBwYWdlIHByb3RlY3Rpb24gdmFsdWUgYXMgInVuY2FjaGVhYmxlIi4gIE5vdGUgdGhhdCAicHJvdGVjdGlvbiIgaXMgcmVhbGx5IGEKQEAgLTUwNSw5ICs1MDUsNiBAQAogI2RlZmluZSBIVUdFVExCX1BHRElSX1NISUZUCShIUEFHRV9TSElGVCArIDIqKFBBR0VfU0hJRlQtMykpCiAjZGVmaW5lIEhVR0VUTEJfUEdESVJfU0laRQkoX19JQTY0X1VMKDEpIDw8IEhVR0VUTEJfUEdESVJfU0hJRlQpCiAjZGVmaW5lIEhVR0VUTEJfUEdESVJfTUFTSwkofihIVUdFVExCX1BHRElSX1NJWkUtMSkpCi1zdHJ1Y3QgbW11X2dhdGhlcjsKLXZvaWQgaHVnZXRsYl9mcmVlX3BnZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqKnRsYiwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQl1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBjZWlsaW5nKTsKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wb2xsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BvbGwuaAppbmRleCAxNjAyNThhLi5iY2FmOWYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BvbGwuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBQT0xMV1JCQU5ECTB4MDIwMAogI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKICNkZWZpbmUgUE9MTFJFTU9WRQkweDEwMDAKKyNkZWZpbmUgUE9MTFJESFVQICAgICAgIDB4MjAwMAogCiBzdHJ1Y3QgcG9sbGZkIHsKIAlpbnQgZmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaAppbmRleCAyM2M4ZTFiLi4xMjhmZWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKQEAgLTUwLDcgKzUwLDggQEAKICNkZWZpbmUgSUE2NF9USFJFQURfUE1fVkFMSUQJKF9fSUE2NF9VTCgxKSA8PCAyKQkvKiBwZXJmb3JtYW5jZSByZWdpc3RlcnMgdmFsaWQ/ICovCiAjZGVmaW5lIElBNjRfVEhSRUFEX1VBQ19OT1BSSU5UCShfX0lBNjRfVUwoMSkgPDwgMykJLyogZG9uJ3QgbG9nIHVuYWxpZ25lZCBhY2Nlc3NlcyAqLwogI2RlZmluZSBJQTY0X1RIUkVBRF9VQUNfU0lHQlVTCShfX0lBNjRfVUwoMSkgPDwgNCkJLyogZ2VuZXJhdGUgU0lHQlVTIG9uIHVuYWxpZ25lZCBhY2MuICovCi0JCQkJCQkJLyogYml0IDUgaXMgY3VycmVudGx5IHVudXNlZCAqLworI2RlZmluZSBJQTY0X1RIUkVBRF9NSUdSQVRJT04JKF9fSUE2NF9VTCgxKSA8PCA1KQkvKiByZXF1aXJlIG1pZ3JhdGlvbgorCQkJCQkJCSAgIHN5bmMgYXQgY3R4IHN3ICovCiAjZGVmaW5lIElBNjRfVEhSRUFEX0ZQRU1VX05PUFJJTlQgKF9fSUE2NF9VTCgxKSA8PCA2KQkvKiBkb24ndCBsb2cgYW55IGZwc3dhIGZhdWx0cyAqLwogI2RlZmluZSBJQTY0X1RIUkVBRF9GUEVNVV9TSUdGUEUgIChfX0lBNjRfVUwoMSkgPDwgNykJLyogc2VuZCBhIFNJR0ZQRSBmb3IgZnBzd2EgZmF1bHRzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NpZ25hbC5oCmluZGV4IDYwODE2OGQuLjVlMzI4ZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zaWduYWwuaApAQCAtMTU4LDggKzE1OCw2IEBACiAKICNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQogCi12b2lkIHNldF9zaWdkZWxheWVkKHBpZF90IHBpZCwgaW50IHNpZ25vLCBpbnQgY29kZSwgdm9pZCBfX3VzZXIgKmFkZHIpOwotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjIGVuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vYWRkcnMuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYWRkcnMuaAppbmRleCAyYzMyZTRiLi4xZDllZmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2FkZHJzLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9hZGRycy5oCkBAIC0yODMsNSArMjgzLDEzIEBACiAjZGVmaW5lIFJFTU9URV9IVUJfTChuLCBhKQkJSFVCX0woUkVNT1RFX0hVQl9BRERSKChuKSwgKGEpKSkKICNkZWZpbmUgUkVNT1RFX0hVQl9TKG4sIGEsIGQpCQlIVUJfUyhSRU1PVEVfSFVCX0FERFIoKG4pLCAoYSkpLCAoZCkpCiAKKy8qCisgKiBDb3JldGFsayBhZGRyZXNzIGJyZWFrZG93bgorICovCisjZGVmaW5lIENUQUxLX05BU0lEX1NIRlQJCTQwCisjZGVmaW5lIENUQUxLX05BU0lEX01BU0sJCSgweDNGRkZVTEwgPDwgQ1RBTEtfTkFTSURfU0hGVCkKKyNkZWZpbmUgQ1RBTEtfQ0lEX1NIRlQJCQkzOAorI2RlZmluZSBDVEFMS19DSURfTUFTSwkJCSgweDNVTEwgPDwgQ1RBTEtfQ0lEX1NIRlQpCisjZGVmaW5lIENUQUxLX05PREVfT0ZGU0VUCQkweDNGRkZGRkZGRkYKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9TTl9BRERSU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2FyY2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vYXJjaC5oCmluZGV4IDkxYzMxYmU4Li4xNmFkYzkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL2FyY2guaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL2FyY2guaApAQCAtMzEsNyArMzEsOCBAQAogICogCXRvIEFDUEkzLjAsIHRoaXMgbGltaXQgd2lsbCBiZSByZW1vdmVkLiBUaGUgbm90aW9uIG9mICJjb21wYWN0IG5vZGVzIgogICogCXNob3VsZCBiZSBkZWxldGVkIGFuZCBUSU9zIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBNQVhfTlVNTk9ERVMuCiAgKi8KLSNkZWZpbmUgTUFYX0NPTVBBQ1RfTk9ERVMJNTEyCisjZGVmaW5lIE1BWF9USU9fTk9ERVMJCU1BWF9OVU1OT0RFUworI2RlZmluZSBNQVhfQ09NUEFDVF9OT0RFUwkoTUFYX05VTU5PREVTICsgTUFYX1RJT19OT0RFUykKIAogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIGFsbCBwYXJ0aXRpb25zIGFuZCBpbiBhbGwgY29oZXJlbmN5IGRvbWFpbnMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3J3X21tci5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9yd19tbXIuaAppbmRleCBmNDBmZDFhLi4yZDc4ZjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3J3X21tci5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vcndfbW1yLmgKQEAgLTMsMTUgKzMsMTQgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKi8KICNpZm5kZWYgX0FTTV9JQTY0X1NOX1JXX01NUl9ICiAjZGVmaW5lIF9BU01fSUE2NF9TTl9SV19NTVJfSAogCiAKIC8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgbWFjcm9zIHVzZWQgdG8gYWNjZXNzIE1NUiByZWdpc3RlcnMgdmlhCi0gKiB1bmNhY2hlZCBwaHlzaWNhbCBhZGRyZXNzZXMuCisgKiBUaGlzIGZpbGUgdGhhdCBhY2Nlc3MgTU1ScyB2aWEgdW5jYWNoZWQgcGh5c2ljYWwgYWRkcmVzc2VzLgogICogCXBpb19waHlzX3JlYWRfbW1yICAtIHJlYWQgYW4gTU1SCiAgKiAJcGlvX3BoeXNfd3JpdGVfbW1yIC0gd3JpdGUgYW4gTU1SCiAgKiAJcGlvX2F0b21pY19waHlzX3dyaXRlX21tcnMgLSBhdG9taWNhbGx5IHdyaXRlIDEgb3IgMiBNTVJzIHdpdGggcHNyLmljPTAKQEAgLTIyLDUzICsyMSw4IEBACiAgKi8KIAogCi1leHRlcm4gaW5saW5lIGxvbmcKLXBpb19waHlzX3JlYWRfbW1yKHZvbGF0aWxlIGxvbmcgKm1tcikgCi17Ci0JbG9uZyB2YWw7Ci0gICAgICAgIGFzbSB2b2xhdGlsZQotICAgICAgICAgICAgKCJtb3YgcjI9cHNyOzsiCi0gICAgICAgICAgICAgInJzbSBwc3IuaSB8IHBzci5kdDs7IgotICAgICAgICAgICAgICJzcmx6Lmk7OyIKLSAgICAgICAgICAgICAibGQ4LmFjcSAlMD1bJTFdOzsiCi0gICAgICAgICAgICAgIm1vdiBwc3IubD1yMjs7IgotICAgICAgICAgICAgICJzcmx6Lmk7OyIKLSAgICAgICAgICAgICA6ICI9ciIodmFsKQotICAgICAgICAgICAgIDogInIiKG1tcikKLQkgICAgIDogInIyIik7Ci0gICAgICAgIHJldHVybiB2YWw7Ci19Ci0KLQotCi1leHRlcm4gaW5saW5lIHZvaWQKLXBpb19waHlzX3dyaXRlX21tcih2b2xhdGlsZSBsb25nICptbXIsIGxvbmcgdmFsKSAKLXsKLSAgICAgICAgYXNtIHZvbGF0aWxlCi0gICAgICAgICAgICAoIm1vdiByMj1wc3I7OyIKLSAgICAgICAgICAgICAicnNtIHBzci5pIHwgcHNyLmR0OzsiCi0gICAgICAgICAgICAgInNybHouaTs7IgotICAgICAgICAgICAgICJzdDgucmVsIFslMF09JTE7OyIKLSAgICAgICAgICAgICAibW92IHBzci5sPXIyOzsiCi0gICAgICAgICAgICAgInNybHouaTs7IgotCSAgICAgOjogInIiKG1tciksICJyIih2YWwpCi0gICAgICAgICAgICAgOiAicjIiLCAibWVtb3J5Iik7Ci19ICAgICAgICAgICAgCi0KLWV4dGVybiBpbmxpbmUgdm9pZAotcGlvX2F0b21pY19waHlzX3dyaXRlX21tcnModm9sYXRpbGUgbG9uZyAqbW1yMSwgbG9uZyB2YWwxLCB2b2xhdGlsZSBsb25nICptbXIyLCBsb25nIHZhbDIpIAotewotICAgICAgICBhc20gdm9sYXRpbGUKLSAgICAgICAgICAgICgibW92IHIyPXBzcjs7IgotICAgICAgICAgICAgICJyc20gcHNyLmkgfCBwc3IuZHQgfCBwc3IuaWM7OyIKLQkgICAgICJjbXAubmUgcDkscDA9JTIscjA7IgotICAgICAgICAgICAgICJzcmx6Lmk7OyIKLSAgICAgICAgICAgICAic3Q4LnJlbCBbJTBdPSUxOyIKLSAgICAgICAgICAgICAiKHA5KSBzdDgucmVsIFslMl09JTM7OyIKLSAgICAgICAgICAgICAibW92IHBzci5sPXIyOzsiCi0gICAgICAgICAgICAgInNybHouaTs7IgotCSAgICAgOjogInIiKG1tcjEpLCAiciIodmFsMSksICJyIihtbXIyKSwgInIiKHZhbDIpCi0gICAgICAgICAgICAgOiAicDkiLCAicjIiLCAibWVtb3J5Iik7Ci19ICAgICAgICAgICAgCitleHRlcm4gbG9uZyBwaW9fcGh5c19yZWFkX21tcih2b2xhdGlsZSBsb25nICptbXIpOyAKK2V4dGVybiB2b2lkIHBpb19waHlzX3dyaXRlX21tcih2b2xhdGlsZSBsb25nICptbXIsIGxvbmcgdmFsKTsKK2V4dGVybiB2b2lkIHBpb19hdG9taWNfcGh5c193cml0ZV9tbXJzKHZvbGF0aWxlIGxvbmcgKm1tcjEsIGxvbmcgdmFsMSwgdm9sYXRpbGUgbG9uZyAqbW1yMiwgbG9uZyB2YWwyKTsgCiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfU05fUldfTU1SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCmluZGV4IGU3N2YwYzkuLmI1NDZkZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaApAQCAtMTAzNyw3ICsxMDM3LDcgQEAKIAogLyoqKioqIEJFR0lOIEhBQ0sgLSB0ZW1wIHRpbCBvbGQgcHJvbXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCAqKioqKioqKi8KIAlpZiAocmV0X3N0dWZmLnN0YXR1cyA9PSBTQUxSRVRfTk9UX0lNUExFTUVOVEVEKSB7Ci0JCWludCBuYXNpZCA9IGdldF9zYXBpY2lkKCkgJiAweGZmZjs7CisJCWludCBuYXNpZCA9IGdldF9zYXBpY2lkKCkgJiAweGZmZjsKICNkZWZpbmUgU0hfU0hVQl9JRF9OT0RFU19QRVJfQklUX01BU0sgMHgwMDFmMDAwMDAwMDAwMDAwVUwKICNkZWZpbmUgU0hfU0hVQl9JRF9OT0RFU19QRVJfQklUX1NIRlQgNDgKIAkJaWYgKHNodWJ0eXBlKSAqc2h1YnR5cGUgPSAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jZS5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi90aW9jZS5oCmluZGV4IGQ0Yzk5MDcuLjg5MzQ2OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vdGlvY2UuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3Rpb2NlLmgKQEAgLTExLDcgKzExLDcgQEAKIAogLyogQ0UgQVNJQyBwYXJ0ICYgbWZnciBpbmZvcm1hdGlvbiAgKi8KICNkZWZpbmUgVElPQ0VfUEFSVF9OVU0JCQkweENFMDAKLSNkZWZpbmUgVElPQ0VfTUZHUl9OVU0JCQkweDM2CisjZGVmaW5lIFRJT0NFX1NSQ19JRAkJCTB4MDEKICNkZWZpbmUgVElPQ0VfUkVWX0EJCQkweDEKIAogLyogQ0UgVmlydHVhbCBQUEIgVmVuZG9yL0RldmljZSBJRHMgKi8KQEAgLTIwLDcgKzIwLDcgQEAKIAogLyogQ0UgSG9zdCBCcmlkZ2UgVmVuZG9yL0RldmljZSBJRHMgKi8KICNkZWZpbmUgQ0VfSE9TVF9CUklER0VfVkVORE9SX0lECTB4MTBhOQotI2RlZmluZSBDRV9IT1NUX0JSSURHRV9ERVZJQ0VfSUQJMHg0MDAzCisjZGVmaW5lIENFX0hPU1RfQlJJREdFX0RFVklDRV9JRAkweDQwMDEKIAogCiAjZGVmaW5lIFRJT0NFX05VTV9NNDBfQVRFUwkJNDA5NgpAQCAtNDYzLDYgKzQ2MywyNSBAQAogCXU2NAljZV9lbmRfb2Zfc3RydWN0OwkJCS8qIDB4MDQ0NDAwICovCiB9IHRpb2NlX3Q7CiAKKy8qIGNlX2xzaVhfZ2JfY2ZnMSByZWdpc3RlciBiaXQgbWFza3MgJiBzaGlmdHMgKi8KKyNkZWZpbmUgQ0VfTFNJX0dCX0NGRzFfUlhMMFNfVEhTX1NIRlQJMAorI2RlZmluZSBDRV9MU0lfR0JfQ0ZHMV9SWEwwU19USFNfTUFTSwkoMHhmZlVMTCA8PCAwKQorI2RlZmluZSBDRV9MU0lfR0JfQ0ZHMV9SWEwwU19TTVBfU0hGVAk4CisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX1JYTDBTX1NNUF9NQVNLCSgweGZVTEwgPDwgOCk7CisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX1JYTDBTX0FESl9TSEZUCTEyCisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX1JYTDBTX0FESl9NQVNLCSgweDdVTEwgPDwgMTIpCisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX1JYTDBTX0ZMVF9TSEZUCTE1CisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX1JYTDBTX0ZMVF9NQVNLCSgweDFVTEwgPDwgMTUpCisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX0xQQktfU0VMX1NIRlQJMTYKKyNkZWZpbmUgQ0VfTFNJX0dCX0NGRzFfTFBCS19TRUxfTUFTSwkoMHgzVUxMIDw8IDE2KQorI2RlZmluZSBDRV9MU0lfR0JfQ0ZHMV9MUEJLX0VOX1NIRlQJMTgKKyNkZWZpbmUgQ0VfTFNJX0dCX0NGRzFfTFBCS19FTl9NQVNLCSgweDFVTEwgPDwgMTgpCisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX1JWUlNfTEJfU0hGVAkxOQorI2RlZmluZSBDRV9MU0lfR0JfQ0ZHMV9SVlJTX0xCX01BU0sJKDB4MVVMTCA8PCAxOSkKKyNkZWZpbmUgQ0VfTFNJX0dCX0NGRzFfUlZSU19DTEtfU0hGVAkyMAorI2RlZmluZSBDRV9MU0lfR0JfQ0ZHMV9SVlJTX0NMS19NQVNLCSgweDNVTEwgPDwgMjApCisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX1NMRl9UU19TSEZUCTI0CisjZGVmaW5lIENFX0xTSV9HQl9DRkcxX1NMRl9UU19NQVNLCSgweGZVTEwgPDwgMjQpCiAKIC8qIGNlX2FkbV9pbnRfbWFzay9jZV9hZG1faW50X3N0YXR1cyByZWdpc3RlciBiaXQgZGVmaW5lcyAqLwogI2RlZmluZSBDRV9BRE1fSU5UX0NFX0VSUk9SX1NIRlQJCTAKQEAgLTU5Miw2ICs2MTEsMTEgQEAKICNkZWZpbmUgQ0VfVVJFX1JEX01SR19FTkFCTEUJCSgweDFVTEwgPDwgMCkKICNkZWZpbmUgQ0VfVVJFX1dSVF9NUkdfRU5BQkxFMQkJKDB4MVVMTCA8PCA0KQogI2RlZmluZSBDRV9VUkVfV1JUX01SR19FTkFCTEUyCQkoMHgxVUxMIDw8IDUpCisjZGVmaW5lIENFX1VSRV9XUlRfTVJHX1RJTUVSX1NIRlQJMTIKKyNkZWZpbmUgQ0VfVVJFX1dSVF9NUkdfVElNRVJfTUFTSwkoMHg3RkZVTEwgPDwgQ0VfVVJFX1dSVF9NUkdfVElNRVJfU0hGVCkKKyNkZWZpbmUgQ0VfVVJFX1dSVF9NUkdfVElNRVIoeCkJCSgoKHU2NCkoeCkgPDwgXAorCQkJCQkgIENFX1VSRV9XUlRfTVJHX1RJTUVSX1NIRlQpICYgXAorCQkJCQkgQ0VfVVJFX1dSVF9NUkdfVElNRVJfTUFTSykKICNkZWZpbmUgQ0VfVVJFX1JTUFFfQllQQVNTX0RJU0FCTEUJKDB4MVVMTCA8PCAyNCkKICNkZWZpbmUgQ0VfVVJFX1VQU19EQVQxX1BBUl9ESVNBQkxFCSgweDFVTEwgPDwgMzIpCiAjZGVmaW5lIENFX1VSRV9VUFNfSERSMV9QQVJfRElTQUJMRQkoMHgxVUxMIDw8IDMzKQpAQCAtNjUzLDggKzY3NywxMiBAQAogI2RlZmluZSBDRV9VUkVfU0kJCQkoMHgxVUxMIDw8IDApCiAjZGVmaW5lIENFX1VSRV9FTEFMX1NIRlQJCTQKICNkZWZpbmUgQ0VfVVJFX0VMQUxfTUFTSwkJKDB4N1VMTCA8PCBDRV9VUkVfRUxBTF9TSEZUKQorI2RlZmluZSBDRV9VUkVfRUxBTF9TRVQobikJCSgoKHU2NCkobikgPDwgQ0VfVVJFX0VMQUxfU0hGVCkgJiBcCisJCQkJCSBDRV9VUkVfRUxBTF9NQVNLKQogI2RlZmluZSBDRV9VUkVfRUxBTDFfU0hGVAkJOAogI2RlZmluZSBDRV9VUkVfRUxBTDFfTUFTSwkJKDB4N1VMTCA8PCBDRV9VUkVfRUxBTDFfU0hGVCkKKyNkZWZpbmUgQ0VfVVJFX0VMQUwxX1NFVChuKQkJKCgodTY0KShuKSA8PCBDRV9VUkVfRUxBTDFfU0hGVCkgJiBcCisJCQkJCSBDRV9VUkVfRUxBTDFfTUFTSykKICNkZWZpbmUgQ0VfVVJFX1NDQwkJCSgweDFVTEwgPDwgMTIpCiAjZGVmaW5lIENFX1VSRV9QTjFfU0hGVAkJCTE2CiAjZGVmaW5lIENFX1VSRV9QTjFfTUFTSwkJCSgweEZGVUxMIDw8IENFX1VSRV9QTjFfU0hGVCkKQEAgLTY3NSw4ICs3MDMsMTIgQEAKICNkZWZpbmUgQ0VfVVJFX0hQQwkJCSgweDFVTEwgPDwgNikKICNkZWZpbmUgQ0VfVVJFX1NQTFZfU0hGVAkJNwogI2RlZmluZSBDRV9VUkVfU1BMVl9NQVNLCQkoMHhGRlVMTCA8PCBDRV9VUkVfU1BMVl9TSEZUKQorI2RlZmluZSBDRV9VUkVfU1BMVl9TRVQobikJCSgoKHU2NCkobikgPDwgQ0VfVVJFX1NQTFZfU0hGVCkgJiBcCisJCQkJCSBDRV9VUkVfU1BMVl9NQVNLKQogI2RlZmluZSBDRV9VUkVfU1BMU19TSEZUCQkxNQogI2RlZmluZSBDRV9VUkVfU1BMU19NQVNLCQkoMHgzVUxMIDw8IENFX1VSRV9TUExTX1NIRlQpCisjZGVmaW5lIENFX1VSRV9TUExTX1NFVChuKQkJKCgodTY0KShuKSA8PCBDRV9VUkVfU1BMU19TSEZUKSAmIFwKKwkJCQkJIENFX1VSRV9TUExTX01BU0spCiAjZGVmaW5lIENFX1VSRV9QU04xX1NIRlQJCTE5CiAjZGVmaW5lIENFX1VSRV9QU04xX01BU0sJCSgweDFGRkZVTEwgPDwgQ0VfVVJFX1BTTjFfU0hGVCkKICNkZWZpbmUgQ0VfVVJFX1BTTjJfU0hGVAkJMzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwYy5oCmluZGV4IGRmN2Y1ZjQuLmFhM2I4YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi94cGMuaApAQCAtMTIyNywyOCArMTIyNyw2IEBACiAKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgKgoteHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCB2b2lkICoqYmFzZSkKLXsKLQkvKiBzZWUgaWYga21hbGxvYyB3aWxsIGdpdmUgdXMgY2FjaGxpbmUgYWxpZ25lZCBtZW1vcnkgYnkgZGVmYXVsdCAqLwotCSpiYXNlID0ga21hbGxvYyhzaXplLCBmbGFncyk7Ci0JaWYgKCpiYXNlID09IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmICgodTY0KSAqYmFzZSA9PSBMMV9DQUNIRV9BTElHTigodTY0KSAqYmFzZSkpIHsKLQkJcmV0dXJuICpiYXNlOwotCX0KLQlrZnJlZSgqYmFzZSk7Ci0KLQkvKiBub3BlLCB3ZSdsbCBoYXZlIHRvIGRvIGl0IG91cnNlbHZlcyAqLwotCSpiYXNlID0ga21hbGxvYyhzaXplICsgTDFfQ0FDSEVfQllURVMsIGZsYWdzKTsKLQlpZiAoKmJhc2UgPT0gTlVMTCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuICh2b2lkICopIEwxX0NBQ0hFX0FMSUdOKCh1NjQpICpiYXNlKTsKLX0KLQotCiAvKgogICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjaGFubmVsIGFjdGl2aXR5IHRvL2Zyb20gdGhlIHNwZWNpZmllZAogICogcGFydGl0aW9uLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKaW5kZXggMDYyNTM4Ny4uMmYzNjIwNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaApAQCAtMjQ0LDYgKzI0NCwxMyBAQAogCQlfX2lhNjRfc2F2ZV9mcHUoKHByZXYpLT50aHJlYWQuZnBoKTsJCQkJXAogCX0JCQkJCQkJCQlcCiAJX19zd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCk7CQkJCQkJXAorCS8qICJuZXh0IiBpbiBvbGQgY29udGV4dCBpcyAiY3VycmVudCIgaW4gbmV3IGNvbnRleHQgKi8JCQlcCisJaWYgKHVubGlrZWx5KChjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBJQTY0X1RIUkVBRF9NSUdSQVRJT04pICYmCSAgICAgICBcCisJCSAgICAgKHRhc2tfY3B1KGN1cnJlbnQpICE9CQkJCSAgICAgICBcCisJCSAgICAgIAkJICAgICAgdGFza190aHJlYWRfaW5mbyhjdXJyZW50KS0+bGFzdF9jcHUpKSkgeyBcCisJCXBsYXRmb3JtX21pZ3JhdGUoY3VycmVudCk7CQkJCSAgICAgICBcCisJCXRhc2tfdGhyZWFkX2luZm8oY3VycmVudCktPmxhc3RfY3B1ID0gdGFza19jcHUoY3VycmVudCk7ICAgICAgIFwKKwl9CQkJCQkJCQkgICAgICAgXAogfSB3aGlsZSAoMCkKICNlbHNlCiAjIGRlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpCV9fc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCkBAIC0yNTgsNiArMjY1LDggQEAKIAogI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQogCit2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKTsKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20taWE2NC90aHJlYWRfaW5mby5oCmluZGV4IDFkNjUxOGYuLjU2Mzk0YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RocmVhZF9pbmZvLmgKQEAgLTI2LDE2ICsyNiwxMCBAQAogCXN0cnVjdCBleGVjX2RvbWFpbiAqZXhlY19kb21haW47LyogZXhlY3V0aW9uIGRvbWFpbiAqLwogCV9fdTMyIGZsYWdzOwkJCS8qIHRocmVhZF9pbmZvIGZsYWdzIChzZWUgVElGXyopICovCiAJX191MzIgY3B1OwkJCS8qIGN1cnJlbnQgQ1BVICovCisJX191MzIgbGFzdF9jcHU7CQkJLyogTGFzdCBDUFUgdGhyZWFkIHJhbiBvbiAqLwogCW1tX3NlZ21lbnRfdCBhZGRyX2xpbWl0OwkvKiB1c2VyLWxldmVsIGFkZHJlc3Mgc3BhY2UgbGltaXQgKi8KIAlpbnQgcHJlZW1wdF9jb3VudDsJCS8qIDA9cHJlbXB0YWJsZSwgPDA9QlVHOyB3aWxsIGFsc28gc2VydmUgYXMgYmgtY291bnRlciAqLwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrIHJlc3RhcnRfYmxvY2s7Ci0Jc3RydWN0IHsKLQkJaW50IHNpZ25vOwotCQlpbnQgY29kZTsKLQkJdm9pZCBfX3VzZXIgKmFkZHI7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTsKLQkJcGlkX3QgcGlkOwotCX0gc2lnZGVsYXllZDsJCQkvKiBTYXZlZCBpbmZvcm1hdGlvbiBmb3IgVElGX1NJR0RFTEFZRUQgKi8KIH07CiAKICNkZWZpbmUgVEhSRUFEX1NJWkUJCQlLRVJORUxfU1RBQ0tfU0laRQpAQCAtODksNyArODMsNiBAQAogI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTIJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLwogI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQkzCS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTQJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KLSNkZWZpbmUgVElGX1NJR0RFTEFZRUQJCTUJLyogc2lnbmFsIGRlbGF5ZWQgZnJvbSBNQ0EvSU5JVC9OTUkvUE1JIGNvbnRleHQgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE2CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE3CiAjZGVmaW5lIFRJRl9NQ0FfSU5JVAkJMTgJLyogdGhpcyB0YXNrIGlzIHByb2Nlc3NpbmcgTUNBIG9yIElOSVQgKi8KQEAgLTEwMSwxMyArOTQsMTIgQEAKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxIDw8IFRJRl9OT1RJRllfUkVTVU1FKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxIDw8IFRJRl9TSUdQRU5ESU5HKQogI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMSA8PCBUSUZfTkVFRF9SRVNDSEVEKQotI2RlZmluZSBfVElGX1NJR0RFTEFZRUQJCSgxIDw8IFRJRl9TSUdERUxBWUVEKQogI2RlZmluZSBfVElGX1BPTExJTkdfTlJGTEFHCSgxIDw8IFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl9NQ0FfSU5JVAkJKDEgPDwgVElGX01DQV9JTklUKQogI2RlZmluZSBfVElGX0RCX0RJU0FCTEVECSgxIDw8IFRJRl9EQl9ESVNBQkxFRCkKIAogLyogIndvcmsgdG8gZG8gb24gdXNlci1yZXR1cm4iIGJpdHMgKi8KLSNkZWZpbmUgVElGX0FMTFdPUktfTUFTSwkoX1RJRl9OT1RJRllfUkVTVU1FfF9USUZfU0lHUEVORElOR3xfVElGX05FRURfUkVTQ0hFRHxfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUfF9USUZfU0lHREVMQVlFRCkKKyNkZWZpbmUgVElGX0FMTFdPUktfTUFTSwkoX1RJRl9OT1RJRllfUkVTVU1FfF9USUZfU0lHUEVORElOR3xfVElGX05FRURfUkVTQ0hFRHxfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUKQogLyogbGlrZSBUSUZfQUxMV09SS19CSVRTIGJ1dCBzYW5zIFRJRl9TWVNDQUxMX1RSQUNFIG9yIFRJRl9TWVNDQUxMX0FVRElUICovCiAjZGVmaW5lIFRJRl9XT1JLX01BU0sJCShUSUZfQUxMV09SS19NQVNLJn4oX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVCkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcG9sbC5oIGIvaW5jbHVkZS9hc20tbTMyci9wb2xsLmgKaW5kZXggNDNiN2FjZi4uOWUwZTcwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wb2xsLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKaW5kZXggMDZjMTJhMC4uZDZhMmM2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCkBAIC0yMzksNyArMjM5LDcgQEAKIAkJIglicmEJMmY7CQlcbiIKICAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zbgkJXG4iCiAJCSIxOiIKLQkJCU0zMlJfVU5MT0NLIiAlMiwgQCUxOwlcbiIKKwkJCU0zMlJfVU5MT0NLIiAlMCwgQCUxOwlcbiIKICAgICAgICAgICAgICAgICAiICAgICAgIC5maWxsaW5zbgkJXG4iCiAJCSIyOiIKIAkJCTogIj0mciIgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKaW5kZXggMGRhN2M0Ny4uZThhZTYxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmgKQEAgLTMyOCw3ICszMjgsNyBAQAogICAgICAgICAgICAgICAgICIgICAgICAgLmxvbmcgMWIsNGJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICIgICAgICAgLmxvbmcgMmIsNGJcbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICIucHJldmlvdXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIDogIj1yIihlcnIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogIj0mciIoZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICA6ICJyIih4KSwgInIiKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpCQlcCiAgICAgICAgICAgICAgICAgOiAicjE0IiwgIm1lbW9yeSIpCiAKQEAgLTM1Myw3ICszNTMsNyBAQAogCQkiCS5sb25nIDFiLDRiXG4iCQkJCQlcCiAJCSIJLmxvbmcgMmIsNGJcbiIJCQkJCVwKIAkJIi5wcmV2aW91cyIJCQkJCQlcCi0JCTogIj1yIihlcnIpCQkJCQkJXAorCQk6ICI9JnIiKGVycikJCQkJCQlcCiAJCTogInIiKHgpLCAiciIoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikJCVwKIAkJOiAicjE0IiwgIm1lbW9yeSIpCiAjZWxzZQpAQCAtMzk4LDcgKzM5OCw3IEBACiAJCSIJLmJhbGlnbiA0XG4iCQkJCQlcCiAJCSIJLmxvbmcgMWIsM2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91cyIJCQkJCQlcCi0JCTogIj1yIihlcnIpCQkJCQkJXAorCQk6ICI9JnIiKGVycikJCQkJCQlcCiAJCTogInIiKHgpLCAiciIoYWRkciksICJpIigtRUZBVUxUKSwgIjAiKGVycikJCVwKIAkJOiAicjE0IiwgIm1lbW9yeSIpCiAKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCQkiCS5iYWxpZ24gNFxuIgkJCQkJXAogCQkiCS5sb25nIDFiLDNiXG4iCQkJCQlcCiAJCSIucHJldmlvdXMiCQkJCQkJXAotCQk6ICI9ciIoZXJyKSwgIj0mciIoeCkJCQkJCVwKKwkJOiAiPSZyIihlcnIpLCAiPSZyIih4KQkJCQkJXAogCQk6ICJyIihhZGRyKSwgImkiKC1FRkFVTFQpLCAiMCIoZXJyKQkJCVwKIAkJOiAicjE0IiwgIm1lbW9yeSIpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1tNjhrL2F0b21pYy5oCmluZGV4IGE0YTg0ZDUuLjczMmQ2OTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaApAQCAtNTUsNiArNTUsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1JNV19JTlNOUworCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJaW50IHQsIHRtcDsKQEAgLTgyLDcgKzgzLDEyIEBACiAJCQk6ICJnIiAoaSksICIyIiAoYXRvbWljX3JlYWQodikpKTsKIAlyZXR1cm4gdDsKIH0KKworI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQorI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKKwogI2Vsc2UgLyogIUNPTkZJR19STVdfSU5TTlMgKi8KKwogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICogdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTEwLDYgKzExNiwzMiBAQAogCiAJcmV0dXJuIHQ7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBpbnQgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHByZXY7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHJldiA9IGF0b21pY19yZWFkKHYpOworCWlmIChwcmV2ID09IG9sZCkKKwkJYXRvbWljX3NldCh2LCBuZXcpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcHJldjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlwcmV2ID0gYXRvbWljX3JlYWQodik7CisJYXRvbWljX3NldCh2LCBuZXcpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcHJldjsKK30KKwogI2VuZGlmIC8qICFDT05GSUdfUk1XX0lOU05TICovCiAKICNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJYXRvbWljX3N1Yl9yZXR1cm4oMSwgKHYpKQpAQCAtMTM5LDE1ICsxNzEsMTggQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygib3JsICUxLCUwIiA6ICIrbSIgKCp2KSA6ICJpZCIgKG1hc2spKTsKIH0KIAotI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvLCBuKSAoKGludCljbXB4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG8pLCAobikpKQotI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgbmV3KSkKLQogI2RlZmluZSBhdG9taWNfYWRkX3VubGVzcyh2LCBhLCB1KQkJCQlcCiAoewkJCQkJCQkJXAogCWludCBjLCBvbGQ7CQkJCQkJXAogCWMgPSBhdG9taWNfcmVhZCh2KTsJCQkJCVwKLQl3aGlsZSAoYyAhPSAodSkgJiYgKG9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSkpICE9IGMpIFwKKwlmb3IgKDs7KSB7CQkJCQkJXAorCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsJCVwKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAogCQljID0gb2xkOwkJCQkJXAorCX0JCQkJCQkJXAogCWMgIT0gKHUpOwkJCQkJCVwKIH0pCiAjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pcnEuaCBiL2luY2x1ZGUvYXNtLW02OGsvaXJxLmgKaW5kZXggMzI1Yzg2Zi4uOWFjMDQ3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lycS5oCkBAIC03OSw3ICs3OSw3IEBACiAKIGV4dGVybiB2b2lkICgqZW5hYmxlX2lycSkodW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkICgqZGlzYWJsZV9pcnEpKHVuc2lnbmVkIGludCk7Ci0jZGVmaW5lIGVuYWJsZV9pcnFfbm9zeW5jCWVuYWJsZV9pcnEKKyNkZWZpbmUgZGlzYWJsZV9pcnFfbm9zeW5jCWRpc2FibGVfaXJxCiAKIHN0cnVjdCBwdF9yZWdzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BvbGwuaCBiL2luY2x1ZGUvYXNtLW02OGsvcG9sbC5oCmluZGV4IGM0YjY5YzQuLjBmYjg4NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcG9sbC5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIFBPTExXUkJBTkQJMjU2CiAjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAogI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCiAKIHN0cnVjdCBwb2xsZmQgewogCWludCBmZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcmF3X2lvLmggYi9pbmNsdWRlL2FzbS1tNjhrL3Jhd19pby5oCmluZGV4IDU0MzliY2EuLjgxMWNjZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvcmF3X2lvLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9yYXdfaW8uaApAQCAtMzM2LDYgKzMzNiw3IEBACiAJCTogImQwIiwgImEwIiwgImExIiwgImQ2Iik7CiB9CiAKKyNkZWZpbmUgX19yYXdfd3JpdGVsIHJhd19vdXRsCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1taXBzL2F0b21pYy5oCmluZGV4IDY1NGI5N2QuLjJjOGI4NTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaApAQCAtMjUwLDcgKzI1MCwxMCBAQAogCQkiCXN1YnUJJTAsICUxLCAlMwkJCQlcbiIKIAkJIglibHR6CSUwLCAxZgkJCQkJXG4iCiAJCSIJc2MJJTAsICUyCQkJCQlcbiIKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKIAkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgorCQkiCSBzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKIAkJIglzeW5jCQkJCQkJXG4iCiAJCSIxOgkJCQkJCQlcbiIKIAkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKQEAgLTI2Niw3ICsyNjksMTAgQEAKIAkJIglzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCiAJCSIJYmx0egklMCwgMWYJCQkJCVxuIgogCQkiCXNjCSUwLCAlMgkJCQkJXG4iCisJCSIJLnNldAlub3Jlb3JkZXIJCQkJXG4iCiAJCSIJYmVxegklMCwgMWIJCQkJCVxuIgorCQkiCSBzdWJ1CSUwLCAlMSwgJTMJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKIAkJIglzeW5jCQkJCQkJXG4iCiAJCSIxOgkJCQkJCQlcbiIKIAkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKQEAgLTU5OCw3ICs2MDQsMTAgQEAKIAkJIglkc3VidQklMCwgJTEsICUzCQkJCVxuIgogCQkiCWJsdHoJJTAsIDFmCQkJCQlcbiIKIAkJIglzY2QJJTAsICUyCQkJCQlcbiIKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKIAkJIgliZXF6bAklMCwgMWIJCQkJCVxuIgorCQkiCSBkc3VidQklMCwgJTEsICUzCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCiAJCSIJc3luYwkJCQkJCVxuIgogCQkiMToJCQkJCQkJXG4iCiAJCSIJLnNldAltaXBzMAkJCQkJXG4iCkBAIC02MTQsNyArNjIzLDEwIEBACiAJCSIJZHN1YnUJJTAsICUxLCAlMwkJCQlcbiIKIAkJIglibHR6CSUwLCAxZgkJCQkJXG4iCiAJCSIJc2NkCSUwLCAlMgkJCQkJXG4iCisJCSIJLnNldAlub3Jlb3JkZXIJCQkJXG4iCiAJCSIJYmVxegklMCwgMWIJCQkJCVxuIgorCQkiCSBkc3VidQklMCwgJTEsICUzCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCiAJCSIJc3luYwkJCQkJCVxuIgogCQkiMToJCQkJCQkJXG4iCiAJCSIJLnNldAltaXBzMAkJCQkJXG4iCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tbWlwcy9ieXRlb3JkZXIuaAppbmRleCA1ODRmODEyLi5hZWZjMDJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYnl0ZW9yZGVyLmgKQEAgLTM5LDYgKzM5LDI0IEBACiB9CiAjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpCV9fX2FyY2hfX3N3YWIzMih4KQogCisjaWZkZWYgQ09ORklHX0NQVV9NSVBTNjRfUjIKKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3U2NCBfX19hcmNoX19zd2FiNjQoX191NjQgeCkKK3sKKwlfX2FzbV9fKAorCSIJZHNiaAklMCwgJTEJCQlcbiIKKwkiCWRzaGQJJTAsICUwCQkJXG4iCisJIglkcm90cgklMCwgJTAsIDMyCQlcbiIKKwk6ICI9ciIgKHgpCisJOiAiciIgKHgpKTsKKworCXJldHVybiB4OworfQorCisjZGVmaW5lIF9fYXJjaF9fc3dhYjY0KHgpCV9fX2FyY2hfX3N3YWI2NCh4KQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9NSVBTNjRfUjIgKi8KKwogI2VuZGlmIC8qIENPTkZJR19DUFVfTUlQU1IyICovCiAKICNpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY29tcGF0LmggYi9pbmNsdWRlL2FzbS1taXBzL2NvbXBhdC5oCmluZGV4IDM1ZDI2MDQuLjAwMTJiZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jb21wYXQuaApAQCAtMTI4LDE3ICsxMjgsMTcgQEAKICAqLwogdHlwZWRlZiB1MzIJCWNvbXBhdF91cHRyX3Q7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqY29tcGF0X3B0cihjb21wYXRfdXB0cl90IHVwdHIpCitzdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICpjb21wYXRfcHRyKGNvbXBhdF91cHRyX3QgdXB0cikKIHsKLQlyZXR1cm4gKHZvaWQgKikobG9uZyl1cHRyOworCXJldHVybiAodm9pZCBfX3VzZXIgKikobG9uZyl1cHRyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmNvbXBhdF9hbGxvY191c2VyX3NwYWNlKGxvbmcgbGVuKQorc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X2FsbG9jX3VzZXJfc3BhY2UobG9uZyBsZW4pCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikKIAkJKCh1bnNpZ25lZCBsb25nKSBjdXJyZW50X3RocmVhZF9pbmZvKCkgKyBUSFJFQURfU0laRSAtIDMyKSAtIDE7CiAKLQlyZXR1cm4gKHZvaWQgKikgKHJlZ3MtPnJlZ3NbMjldIC0gbGVuKTsKKwlyZXR1cm4gKHZvaWQgX191c2VyICopIChyZWdzLT5yZWdzWzI5XSAtIGxlbik7CiB9CiAjaWYgZGVmaW5lZCAoX19NSVBTRUxfXykKICNkZWZpbmUgX19DT01QQVRfRU5ESUFOX1NXQVBfXyAJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmgKaW5kZXggNzhjOWNjMi4uM2YyYjZkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCkBAIC05Niw2ICs5Niw5IEBACiAjaWZuZGVmIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwogI2RlZmluZSBjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMJKGNwdV9kYXRhWzBdLmljYWNoZS5mbGFncyAmIE1JUFNfQ0FDSEVfSUNfRl9EQykKICNlbmRpZgorI2lmbmRlZiBjcHVfaGFzX3BpbmRleGVkX2RjYWNoZQorI2RlZmluZSBjcHVfaGFzX3BpbmRleGVkX2RjYWNoZQkoY3B1X2RhdGFbMF0uZGNhY2hlLmZsYWdzICYgTUlQU19DQUNIRV9QSU5ERVgpCisjZW5kaWYKIAogLyoKICAqIEktQ2FjaGUgc25vb3BzIHJlbW90ZSBzdG9yZS4gIFRoaXMgb25seSBtYXR0ZXJzIG9uIFNNUC4gIFNvbWUgbXVsdGlwcm9jZXNzb3JzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmgKaW5kZXggZDVjZjUxOS4uMTQwYmUxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWluZm8uaApAQCAtMzksNiArMzksNyBAQAogI2RlZmluZSBNSVBTX0NBQ0hFX0FMSUFTRVMJMHgwMDAwMDAwNAkvKiBDYWNoZSBjb3VsZCBoYXZlIGFsaWFzZXMgKi8KICNkZWZpbmUgTUlQU19DQUNIRV9JQ19GX0RDCTB4MDAwMDAwMDgJLyogSWMgY2FuIHJlZmlsbCBmcm9tIEQtY2FjaGUgKi8KICNkZWZpbmUgTUlQU19JQ19TTk9PUFNfUkVNT1RFCTB4MDAwMDAwMTAJLyogSWMgc25vb3BzIHJlbW90ZSBzdG9yZXMgKi8KKyNkZWZpbmUgTUlQU19DQUNIRV9QSU5ERVgJMHgwMDAwMDAyMAkvKiBQaHlzaWNhbGx5IGluZGV4ZWQgY2FjaGUgKi8KIAogc3RydWN0IGNwdWluZm9fbWlwcyB7CiAJdW5zaWduZWQgbG9uZwkJdWRlbGF5X3ZhbDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmgKaW5kZXggNjExMWEwYy4uZmViMjlhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmgKQEAgLTMsNyArMyw5IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKiAgIHdyaXR0ZW4gYnkgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgogICovCiAjaWZuZGVmIF9BU01fSEFaQVJEU19ICiAjZGVmaW5lIF9BU01fSEFaQVJEU19ICkBAIC03NCw4ICs3Niw3IEBACiAjZGVmaW5lIGlycV9kaXNhYmxlX2hhemFyZAogCV9laGIKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IxMDAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1JNOTAwMCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NCMSkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9SMTAwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9STTkwMDApCiAKIC8qCiAgKiBSMTAwMDAgcm9ja3MgLSBhbGwgaGF6YXJkcyBoYW5kbGVkIGluIGhhcmR3YXJlLCBzbyB0aGlzIGJlY29tZXMgYSBub2JyYWluZXIuCkBAIC05OSwxMyArMTAwLDEzIEBACiAjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KIAogX19hc21fXygKLQkiCS5tYWNybwlfc3Nub3AJCQkJCVxuXHQiCi0JIglzbGwJJDAsICQwLCAxCQkJCVxuXHQiCi0JIgkuZW5kbQkJCQkJCVxuXHQiCi0JIgkJCQkJCQlcblx0IgotCSIJLm1hY3JvCV9laGIJCQkJCVxuXHQiCi0JIglzbGwJJDAsICQwLCAzCQkJCVxuXHQiCi0JIgkuZW5kbQkJCQkJCVxuXHQiKTsKKwkiCS5tYWNybwlfc3Nub3AJCQkJCVxuIgorCSIJc2xsCSQwLCAkMCwgMQkJCQlcbiIKKwkiCS5lbmRtCQkJCQkJXG4iCisJIgkJCQkJCQlcbiIKKwkiCS5tYWNybwlfZWhiCQkJCQlcbiIKKwkiCXNsbAkkMCwgJDAsIDMJCQkJXG4iCisJIgkuZW5kbQkJCQkJCVxuIik7CiAKICNpZmRlZiBDT05GSUdfQ1BVX1JNOTAwMAogCkBAIC0xMTcsMTcgKzExOCwyMSBAQAogCiAjZGVmaW5lIG10YzBfdGxid19oYXphcmQoKQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSIuc2V0XHRtaXBzMzJcblx0IgkJCQkJXAotCQkiX3Nzbm9wOyBfc3Nub3A7IF9zc25vcDsgX3Nzbm9wXG5cdCIJCQlcCi0JCSIuc2V0XHRtaXBzMCIpCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCVwKKwkiCV9zc25vcAkJCQkJCVxuIglcCisJIglfc3Nub3AJCQkJCQlcbiIJXAorCSIJX3Nzbm9wCQkJCQkJXG4iCVwKKwkiCV9zc25vcAkJCQkJCVxuIglcCisJIgkuc2V0CW1pcHMwCQkJCQlcbiIpCiAKICNkZWZpbmUgdGxid191c2VfaGF6YXJkKCkJCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCQkiLnNldFx0bWlwczMyXG5cdCIJCQkJCVwKLQkJIl9zc25vcDsgX3Nzbm9wOyBfc3Nub3A7IF9zc25vcFxuXHQiCQkJXAotCQkiLnNldFx0bWlwczAiKQotCi0jZGVmaW5lIGJhY2tfdG9fYmFja19jMF9oYXphcmQoKQlkbyB7IH0gd2hpbGUgKDApCisJIgkuc2V0CW1pcHMzMgkJCQkJXG4iCVwKKwkiCV9zc25vcAkJCQkJCVxuIglcCisJIglfc3Nub3AJCQkJCQlcbiIJXAorCSIJX3Nzbm9wCQkJCQkJXG4iCVwKKwkiCV9zc25vcAkJCQkJCVxuIglcCisJIgkuc2V0CW1pcHMwCQkJCQlcbiIpCiAKICNlbHNlCiAKQEAgLTEzNiwxNSArMTQxLDI1IEBACiAgKi8KICNkZWZpbmUgbXRjMF90bGJ3X2hhemFyZCgpCQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkJIi5zZXQgbm9yZW9yZGVyXG5cdCIJCQkJCVwKLQkJIm5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7XG5cdCIJCQlcCi0JCSIuc2V0IHJlb3JkZXJcblx0IikKKwkiCS5zZXQJbm9yZW9yZGVyCQkJCVxuIglcCisJIglub3AJCQkJCQlcbiIJXAorCSIJbm9wCQkJCQkJXG4iCVwKKwkiCW5vcAkJCQkJCVxuIglcCisJIglub3AJCQkJCQlcbiIJXAorCSIJbm9wCQkJCQkJXG4iCVwKKwkiCW5vcAkJCQkJCVxuIglcCisJIgkuc2V0CXJlb3JkZXIJCQkJCVxuIikKIAogI2RlZmluZSB0bGJ3X3VzZV9oYXphcmQoKQkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JCSIuc2V0IG5vcmVvcmRlclxuXHQiCQkJCQlcCi0JCSJub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wO1xuXHQiCQkJXAotCQkiLnNldCByZW9yZGVyXG5cdCIpCisJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIJXAorCSIJbm9wCQkJCQkJXG4iCVwKKwkiCW5vcAkJCQkJCVxuIglcCisJIglub3AJCQkJCQlcbiIJXAorCSIJbm9wCQkJCQkJXG4iCVwKKwkiCW5vcAkJCQkJCVxuIglcCisJIglub3AJCQkJCQlcbiIJXAorCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIpCiAKICNlbmRpZgogCkBAIC0xNTYsNDkgKzE3MSwyNiBAQAogCiAjaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKIAotX19hc21fXygKLQkiCS5tYWNyb1x0aXJxX2VuYWJsZV9oYXphcmQJCQlcblx0IgotCSIJX2VoYgkJCQkJCVxuXHQiCi0JIgkuZW5kbQkJCQkJCVxuXHQiCi0JIgkJCQkJCQlcblx0IgotCSIJLm1hY3JvXHRpcnFfZGlzYWJsZV9oYXphcmQJCQlcblx0IgotCSIJX2VoYgkJCQkJCVxuXHQiCi0JIgkuZW5kbQkJCQkJCVxuXHQiCi0JIgkJCQkJCQlcblx0IgotCSIJLm1hY3JvXHRiYWNrX3RvX2JhY2tfYzBfaGF6YXJkCQkJXG5cdCIKLQkiCV9laGIJCQkJCQlcblx0IgotCSIJLmVuZG0iKTsKK19fYXNtX18oIgkubWFjcm8JaXJxX2VuYWJsZV9oYXphcmQJCQlcbiIKKwkiCV9laGIJCQkJCQlcbiIKKwkiCS5lbmRtCQkJCQkJXG4iCisJIgkJCQkJCQlcbiIKKwkiCS5tYWNybwlpcnFfZGlzYWJsZV9oYXphcmQJCQlcbiIKKwkiCV9laGIJCQkJCQlcbiIKKwkiCS5lbmRtCQkJCQkJXG4iKTsKIAotI2RlZmluZSBpcnFfZW5hYmxlX2hhemFyZCgpCQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkiaXJxX2VuYWJsZV9oYXphcmQiKQotCi0jZGVmaW5lIGlycV9kaXNhYmxlX2hhemFyZCgpCQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkiaXJxX2Rpc2FibGVfaGF6YXJkIikKLQotI2RlZmluZSBiYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JImJhY2tfdG9fYmFja19jMF9oYXphcmQiKQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjEwMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUk05MDAwKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU0IxKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IxMDAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1JNOTAwMCkKIAogLyoKICAqIFIxMDAwMCByb2NrcyAtIGFsbCBoYXphcmRzIGhhbmRsZWQgaW4gaGFyZHdhcmUsIHNvIHRoaXMgYmVjb21lcyBhIG5vYnJhaW5lci4KICAqLwogCiBfX2FzbV9fKAotCSIJLm1hY3JvXHRpcnFfZW5hYmxlX2hhemFyZAkJCVxuXHQiCi0JIgkuZW5kbQkJCQkJCVxuXHQiCi0JIgkJCQkJCQlcblx0IgotCSIJLm1hY3JvXHRpcnFfZGlzYWJsZV9oYXphcmQJCQlcblx0IgotCSIJLmVuZG0iKTsKLQotI2RlZmluZSBpcnFfZW5hYmxlX2hhemFyZCgpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgaXJxX2Rpc2FibGVfaGF6YXJkKCkJZG8geyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGJhY2tfdG9fYmFja19jMF9oYXphcmQoKQlkbyB7IH0gd2hpbGUgKDApCisJIgkubWFjcm8JaXJxX2VuYWJsZV9oYXphcmQJCQlcbiIKKwkiCS5lbmRtCQkJCQkJXG4iCisJIgkJCQkJCQlcbiIKKwkiCS5tYWNybwlpcnFfZGlzYWJsZV9oYXphcmQJCQlcbiIKKwkiCS5lbmRtCQkJCQkJXG4iKTsKIAogI2Vsc2UKIApAQCAtMjA5LDI5ICsyMDEsNjMgQEAKICAqLwogCiBfX2FzbV9fKAotCSIJIwkJCQkJCVxuXHQiCi0JIgkjIFRoZXJlIGlzIGEgaGF6YXJkIGJ1dCB3ZSBkbyBub3QgY2FyZQkJXG5cdCIKLQkiCSMJCQkJCQlcblx0IgotCSIJLm1hY3JvXHRpcnFfZW5hYmxlX2hhemFyZAkJCVxuXHQiCi0JIgkuZW5kbQkJCQkJCVxuXHQiCi0JIgkJCQkJCQlcblx0IgotCSIJLm1hY3JvXHRpcnFfZGlzYWJsZV9oYXphcmQJCQlcblx0IgotCSIJX3Nzbm9wOyBfc3Nub3A7IF9zc25vcAkJCQlcblx0IgotCSIJLmVuZG0iKTsKLQotI2RlZmluZSBpcnFfZW5hYmxlX2hhemFyZCgpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgaXJxX2Rpc2FibGVfaGF6YXJkKCkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCSJpcnFfZGlzYWJsZV9oYXphcmQiKQotCi0jZGVmaW5lIGJhY2tfdG9fYmFja19jMF9oYXphcmQoKQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkiCS5zZXQgbm9yZW9yZGVyCQkJCVxuIgkJXAotCSIJbm9wOyBub3A7IG5vcAkJCQlcbiIJCVwKLQkiCS5zZXQgcmVvcmRlcgkJCQlcbiIpCisJIgkjCQkJCQkJXG4iCisJIgkjIFRoZXJlIGlzIGEgaGF6YXJkIGJ1dCB3ZSBkbyBub3QgY2FyZQkJXG4iCisJIgkjCQkJCQkJXG4iCisJIgkubWFjcm9cdGlycV9lbmFibGVfaGF6YXJkCQkJXG4iCisJIgkuZW5kbQkJCQkJCVxuIgorCSIJCQkJCQkJXG4iCisJIgkubWFjcm9cdGlycV9kaXNhYmxlX2hhemFyZAkJCVxuIgorCSIJX3Nzbm9wCQkJCQkJXG4iCisJIglfc3Nub3AJCQkJCQlcbiIKKwkiCV9zc25vcAkJCQkJCVxuIgorCSIJLmVuZG0JCQkJCQlcbiIpOwogCiAjZW5kaWYKIAorI2RlZmluZSBpcnFfZW5hYmxlX2hhemFyZCgpCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJpcnFfZW5hYmxlX2hhemFyZCIpCisjZGVmaW5lIGlycV9kaXNhYmxlX2hhemFyZCgpCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJpcnFfZGlzYWJsZV9oYXphcmQiKQorCisKKy8qCisgKiBCYWNrLXRvLWJhY2sgaGF6YXJkcyAtCisgKgorICogV2hhdCBpcyBuZWVkZWQgdG8gc2VwYXJhdGUgYSBtb3ZlIHRvIGNwMCBmcm9tIGEgc3Vic2VxdWVudCByZWFkIGZyb20gdGhlCisgKiBzYW1lIGNwMCByZWdpc3Rlcj8KKyAqLworI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCisKK19fYXNtX18oIgkubWFjcm8JYmFja190b19iYWNrX2MwX2hhemFyZAkJCVxuIgorCSIJX2VoYgkJCQkJCVxuIgorCSIJLmVuZG0JCQkJCQlcbiIpOworCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjEwMDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUk05MDAwKSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU0IxKQorCitfX2FzbV9fKCIJLm1hY3JvCWJhY2tfdG9fYmFja19jMF9oYXphcmQJCQlcbiIKKwkiCS5lbmRtCQkJCQkJXG4iKTsKKworI2Vsc2UKKworX19hc21fXygiCS5tYWNybwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkCQkJXG4iCisJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKKwkiCV9zc25vcAkJCQkJCVxuIgorCSIJX3Nzbm9wCQkJCQkJXG4iCisJIglfc3Nub3AJCQkJCQlcbiIKKwkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCisJIgkuZW5kbSIpOworCisjZW5kaWYKKworI2RlZmluZSBiYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiYmFja190b19iYWNrX2MwX2hhemFyZCIpCisKKworLyoKKyAqIEluc3RydWN0aW9uIGV4ZWN1dGlvbiBoYXphcmQKKyAqLwogI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCiAvKgogICogZ2NjIGhhcyBhIHRyYWRpdGlvbiBvZiBtaXNzY29tcGlsaW5nIHRoZSBwcmV2aW91cyBjb25zdHJ1Y3QgdXNpbmcgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lvLmggYi9pbmNsdWRlL2FzbS1taXBzL2lvLmgKaW5kZXggNWE0YzhhNS4uNmIxN2ViOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaW8uaApAQCAtNCw3ICs0LDcgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1IFdhbGRvcmYgR21iSAotICogQ29weXJpZ2h0IChDKSAxOTk0IC0gMjAwMCBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5NCAtIDIwMDAsIDA2IFJhbGYgQmFlY2hsZQogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKglBdXRob3I6CU1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KQEAgLTQwLDU2ICs0MCwxMyBAQAogICogaGFyZHdhcmUuICBBbiBleGFtcGxlIHVzZSB3b3VsZCBiZSBmb3IgZmxhc2ggbWVtb3J5IHRoYXQncyB1c2VkIGZvcgogICogZXhlY3V0ZSBpbiBwbGFjZS4KICAqLwotIyBkZWZpbmUgX19yYXdfaW9zd2FiYih4KQkoeCkKLSMgZGVmaW5lIF9fcmF3X2lvc3dhYncoeCkJKHgpCi0jIGRlZmluZSBfX3Jhd19pb3N3YWJsKHgpCSh4KQotIyBkZWZpbmUgX19yYXdfaW9zd2FicSh4KQkoeCkKLSMgZGVmaW5lIF9fX19yYXdfaW9zd2FicSh4KQkoeCkKKyMgZGVmaW5lIF9fcmF3X2lvc3dhYmIoYSx4KQkoeCkKKyMgZGVmaW5lIF9fcmF3X2lvc3dhYncoYSx4KQkoeCkKKyMgZGVmaW5lIF9fcmF3X2lvc3dhYmwoYSx4KQkoeCkKKyMgZGVmaW5lIF9fcmF3X2lvc3dhYnEoYSx4KQkoeCkKKyMgZGVmaW5lIF9fX19yYXdfaW9zd2FicShhLHgpCSh4KQogCi0vKgotICogU2FuZSBoYXJkd2FyZSBvZmZlcnMgc3dhcHBpbmcgb2YgUENJL0lTQSBJL08gc3BhY2UgYWNjZXNzZXMgaW4gaGFyZHdhcmU7Ci0gKiBsZXNzIHNhbmUgaGFyZHdhcmUgZm9yY2VzIHNvZnR3YXJlIHRvIGZpZGRsZSB3aXRoIHRoaXMuLi4KLSAqCi0gKiBSZWdhcmRsZXNzLCBpZiB0aGUgaG9zdCBidXMgZW5kaWFubmVzcyBtaXNtYXRjaGVzIHRoYXQgb2YgUENJL0lTQSwgdGhlbgotICogeW91IGNhbid0IGhhdmUgdGhlIG51bWVyaWNhbCB2YWx1ZSBvZiBkYXRhIGFuZCBieXRlIGFkZHJlc3NlcyB3aXRoaW4KLSAqIG11bHRpYnl0ZSBxdWFudGl0aWVzIGJvdGggcHJlc2VydmVkIGF0IHRoZSBzYW1lIHRpbWUuICBIZW5jZSB0d28KLSAqIHZhcmlhdGlvbnMgb2YgZnVuY3Rpb25zOiBub24tcHJlZml4ZWQgb25lcyB0aGF0IHByZXNlcnZlIHRoZSB2YWx1ZQotICogYW5kIHByZWZpeGVkIG9uZXMgdGhhdCBwcmVzZXJ2ZSBieXRlIGFkZHJlc3Nlcy4gIFRoZSBsYXR0ZXJzIGFyZQotICogdHlwaWNhbGx5IHVzZWQgZm9yIG1vdmluZyByYXcgZGF0YSBiZXR3ZWVuIGEgcGVyaXBoZXJhbCBhbmQgbWVtb3J5IChjZi4KLSAqIHN0cmluZyBJL08gZnVuY3Rpb25zKSwgaGVuY2UgdGhlICJfX21lbV8iIHByZWZpeC4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NXQVBfSU9fU1BBQ0UpCi0KLSMgZGVmaW5lIGlvc3dhYmIoeCkJCSh4KQotIyBkZWZpbmUgX19tZW1faW9zd2FiYih4KQkoeCkKLSMgaWZkZWYgQ09ORklHX1NHSV9JUDIyCi0vKgotICogSVAyMiBzZWVtcyBicmFpbmRlYWQgZW5vdWdoIHRvIHN3YXAgMTZiaXRzIHZhbHVlcyBpbiBoYXJkd2FyZSwgYnV0Ci0gKiBub3QgMzJiaXRzLiAgR28gZmlndXJlLi4uIENhbid0IHRlbGwgd2l0aG91dCBkb2N1bWVudGF0aW9uLgotICovCi0jICBkZWZpbmUgaW9zd2Fidyh4KQkJKHgpCi0jICBkZWZpbmUgX19tZW1faW9zd2Fidyh4KQlsZTE2X3RvX2NwdSh4KQotIyBlbHNlCi0jICBkZWZpbmUgaW9zd2Fidyh4KQkJbGUxNl90b19jcHUoeCkKLSMgIGRlZmluZSBfX21lbV9pb3N3YWJ3KHgpCSh4KQotIyBlbmRpZgotIyBkZWZpbmUgaW9zd2FibCh4KQkJbGUzMl90b19jcHUoeCkKLSMgZGVmaW5lIF9fbWVtX2lvc3dhYmwoeCkJKHgpCi0jIGRlZmluZSBpb3N3YWJxKHgpCQlsZTY0X3RvX2NwdSh4KQotIyBkZWZpbmUgX19tZW1faW9zd2FicSh4KQkoeCkKLQotI2Vsc2UKLQotIyBkZWZpbmUgaW9zd2FiYih4KQkJKHgpCi0jIGRlZmluZSBfX21lbV9pb3N3YWJiKHgpCSh4KQotIyBkZWZpbmUgaW9zd2Fidyh4KQkJKHgpCi0jIGRlZmluZSBfX21lbV9pb3N3YWJ3KHgpCWNwdV90b19sZTE2KHgpCi0jIGRlZmluZSBpb3N3YWJsKHgpCQkoeCkKLSMgZGVmaW5lIF9fbWVtX2lvc3dhYmwoeCkJY3B1X3RvX2xlMzIoeCkKLSMgZGVmaW5lIGlvc3dhYnEoeCkJCSh4KQotIyBkZWZpbmUgX19tZW1faW9zd2FicSh4KQljcHVfdG9fbGUzMih4KQotCi0jZW5kaWYKKy8qIGlvc3dhYltid2xxXSwgX19tZW1faW9zd2FiW2J3bHFdIGFyZSBkZWZpbmVkIGluIG1hbmdsZS1wb3J0LmggKi8KIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKIApAQCAtMTAzLDggKzYwLDIwIEBACiAgKi8KIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIG1pcHNfaW9fcG9ydF9iYXNlOwogCi0jZGVmaW5lIHNldF9pb19wb3J0X2Jhc2UoYmFzZSkJXAotCWRvIHsgKiAodW5zaWduZWQgbG9uZyAqKSAmbWlwc19pb19wb3J0X2Jhc2UgPSAoYmFzZSk7IH0gd2hpbGUgKDApCisvKgorICogR2NjIHdpbGwgZ2VuZXJhdGUgY29kZSB0byBsb2FkIHRoZSB2YWx1ZSBvZiBtaXBzX2lvX3BvcnRfYmFzZSBhZnRlciBlYWNoCisgKiBmdW5jdGlvbiBjYWxsIHdoaWNoIG1heSBiZSBmYWlybHkgd2FzdGVmdWwgaW4gc29tZSBjYXNlcy4gIFNvIHdlIGRvbid0CisgKiBwbGF5IHF1aXRlIGJ5IHRoZSBib29rLiAgV2UgdGVsbCBnY2MgbWlwc19pb19wb3J0X2Jhc2UgaXMgYSBsb25nIHZhcmlhYmxlCisgKiB3aGljaCBzb2x2ZXMgdGhlIGNvZGUgZ2VuZXJhdGlvbiBpc3N1ZS4gIE5vdyB3ZSBuZWVkIHRvIHZpb2xhdGUgdGhlCisgKiBhbGlhc2luZyBydWxlcyBhIGxpdHRsZSB0byBtYWtlIGluaXRpYWxpemF0aW9uIHBvc3NpYmxlIGFuZCBmaW5hbGx5IHdlCisgKiB3aWxsIG5lZWQgdGhlIGJhcnJpZXIoKSB0byBmaWdodCBzaWRlIGVmZmVjdHMgb2YgdGhlIGFsaWFzaW5nIGNoYXQuCisgKiBUaGlzIHRyaWNrZXJ5IHdpbGwgZXZlbnR1YWxseSBjb2xsYXBzZSB1bmRlciBnY2MncyBvcHRpbWl6ZXIuICBPaCB3ZWxsLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lvX3BvcnRfYmFzZSh1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJKiAodW5zaWduZWQgbG9uZyAqKSAmbWlwc19pb19wb3J0X2Jhc2UgPSBiYXNlOworCWJhcnJpZXIoKTsKK30KIAogLyoKICAqIFRoYW5rcyB0byBKYW1lcyB2YW4gQXJ0c2RhbGVuIGZvciBhIGJldHRlciB0aW1pbmctZml4IHRoYW4KQEAgLTI4Myw2ICsyNTIsMjQgQEAKIAlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCBfQ0FDSEVfVU5DQUNIRUQpCiAKIC8qCisgKiBpb3JlbWFwX2NhY2hhYmxlIC0gICBtYXAgYnVzIG1lbW9yeSBpbnRvIENQVSBzcGFjZQorICogQG9mZnNldDogICAgICAgICBidXMgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CisgKiBAc2l6ZTogICAgICAgICAgIHNpemUgb2YgdGhlIHJlc291cmNlIHRvIG1hcAorICoKKyAqIGlvcmVtYXBfbm9jYWNoZSBwZXJmb3JtcyBhIHBsYXRmb3JtIHNwZWNpZmljIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgdG8KKyAqIG1ha2UgYnVzIG1lbW9yeSBDUFUgYWNjZXNzaWJsZSB2aWEgdGhlIHJlYWRiL3JlYWR3L3JlYWRsL3dyaXRlYi8KKyAqIHdyaXRldy93cml0ZWwgZnVuY3Rpb25zIGFuZCB0aGUgb3RoZXIgbW1pbyBoZWxwZXJzLiBUaGUgcmV0dXJuZWQKKyAqIGFkZHJlc3MgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdXNhYmxlIGRpcmVjdGx5IGFzIGEgdmlydHVhbAorICogYWRkcmVzcy4KKyAqCisgKiBUaGlzIHZlcnNpb24gb2YgaW9yZW1hcCBlbnN1cmVzIHRoYXQgdGhlIG1lbW9yeSBpcyBtYXJrZWQgY2FjaGFibGUgYnkKKyAqIHRoZSBDUFUuICBBbHNvIGVuYWJsZXMgZnVsbCB3cml0ZS1jb21iaW5pbmcuICBVc2VmdWwgZm9yIHNvbWUKKyAqIG1lbW9yeS1saWtlIHJlZ2lvbnMgb24gSS9PIGJ1c3Nlcy4KKyAqLworI2RlZmluZSBpb3JlbWFwX2NhY2hhYmxlKG9mZnNldCwgc2l6ZSkJCQkJCVwKKwlfX2lvcmVtYXBfbW9kZSgob2Zmc2V0KSwgKHNpemUpLCBQQUdFX0NBQ0hBQkxFX0RFRkFVTFQpCisKKy8qCiAgKiBUaGVzZSB0d28gYXJlIE1JUFMgc3BlY2lmaWMgaW9yZW1hcCB2YXJpYW50LiAgaW9yZW1hcF9jYWNoZWFibGVfY293CiAgKiByZXF1ZXN0cyBhIGNhY2hhYmxlIG1hcHBpbmcsIGlvcmVtYXBfdW5jYWNoZWRfYWNjZWxlcmF0ZWQgcmVxdWVzdHMgYQogICogbWFwcGluZyB1c2luZyB0aGUgdW5jYWNoZWQgYWNjZWxlcmF0ZWQgbW9kZSB3aGljaCBpc24ndCBzdXBwb3J0ZWQgb24KQEAgLTMxNiw3ICszMDMsNyBAQAogCQkJCQkJCQkJXAogCV9fbWVtID0gKHZvaWQgKilfX3N3aXp6bGVfYWRkcl8jI2J3bHEoKHVuc2lnbmVkIGxvbmcpKG1lbSkpOwlcCiAJCQkJCQkJCQlcCi0JX192YWwgPSBwZngjI2lvc3dhYiMjYndscSh2YWwpOwkJCQkJXAorCV9fdmFsID0gcGZ4IyNpb3N3YWIjI2J3bHEoX19tZW0sIHZhbCk7CQkJCVwKIAkJCQkJCQkJCVwKIAlpZiAoc2l6ZW9mKHR5cGUpICE9IHNpemVvZih1NjQpIHx8IHNpemVvZih1NjQpID09IHNpemVvZihsb25nKSkJXAogCQkqX19tZW0gPSBfX3ZhbDsJCQkJCQlcCkBAIC0zNzEsNyArMzU4LDcgQEAKIAkJQlVHKCk7CQkJCQkJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcmV0dXJuIHBmeCMjaW9zd2FiIyNid2xxKF9fdmFsKTsJCQkJXAorCXJldHVybiBwZngjI2lvc3dhYiMjYndscShfX21lbSwgX192YWwpOwkJCQlcCiB9CiAKICNkZWZpbmUgX19CVUlMRF9JT1BPUlRfU0lOR0xFKHBmeCwgYndscSwgdHlwZSwgcCwgc2xvdykJCQlcCkBAIC0zODEsMTAgKzM2OCw5IEBACiAJdm9sYXRpbGUgdHlwZSAqX19hZGRyOwkJCQkJCVwKIAl0eXBlIF9fdmFsOwkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcG9ydCA9IF9fc3dpenpsZV9hZGRyXyMjYndscShwb3J0KTsJCQkJXAotCV9fYWRkciA9ICh2b2lkICopKG1pcHNfaW9fcG9ydF9iYXNlICsgcG9ydCk7CQkJXAorCV9fYWRkciA9ICh2b2lkICopX19zd2l6emxlX2FkZHJfIyNid2xxKG1pcHNfaW9fcG9ydF9iYXNlICsgcG9ydCk7IFwKIAkJCQkJCQkJCVwKLQlfX3ZhbCA9IHBmeCMjaW9zd2FiIyNid2xxKHZhbCk7CQkJCQlcCisJX192YWwgPSBwZngjI2lvc3dhYiMjYndscShfX2FkZHIsIHZhbCk7CQkJCVwKIAkJCQkJCQkJCVwKIAkvKiBSZWFsbHksIHdlIHdhbnQgdGhpcyB0byBiZSBhdG9taWMgKi8JCQkJXAogCUJVSUxEX0JVR19PTihzaXplb2YodHlwZSkgPiBzaXplb2YodW5zaWduZWQgbG9uZykpOwkJXApAQCAtMzk4LDE1ICszODQsMTQgQEAKIAl2b2xhdGlsZSB0eXBlICpfX2FkZHI7CQkJCQkJXAogCXR5cGUgX192YWw7CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwb3J0ID0gX19zd2l6emxlX2FkZHJfIyNid2xxKHBvcnQpOwkJCQlcCi0JX19hZGRyID0gKHZvaWQgKikobWlwc19pb19wb3J0X2Jhc2UgKyBwb3J0KTsJCQlcCisJX19hZGRyID0gKHZvaWQgKilfX3N3aXp6bGVfYWRkcl8jI2J3bHEobWlwc19pb19wb3J0X2Jhc2UgKyBwb3J0KTsgXAogCQkJCQkJCQkJXAogCUJVSUxEX0JVR19PTihzaXplb2YodHlwZSkgPiBzaXplb2YodW5zaWduZWQgbG9uZykpOwkJXAogCQkJCQkJCQkJXAogCV9fdmFsID0gKl9fYWRkcjsJCQkJCQlcCiAJc2xvdzsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlyZXR1cm4gcGZ4IyNpb3N3YWIjI2J3bHEoX192YWwpOwkJCQlcCisJcmV0dXJuIHBmeCMjaW9zd2FiIyNid2xxKF9fYWRkciwgX192YWwpOwkJCVwKIH0KIAogI2RlZmluZSBfX0JVSUxEX01FTU9SWV9QRlgoYnVzLCBid2xxLCB0eXBlKQkJCQlcCkBAIC01NzEsMjQgKzU1NiwxMSBAQAogICovCiAjZGVmaW5lIF9fSVNBX0lPX2Jhc2UgKChjaGFyICopKGlzYV9zbG90X29mZnNldCkpCiAKLSNkZWZpbmUgaXNhX3JlYWRiKGEpCQlyZWFkYihfX0lTQV9JT19iYXNlICsgKGEpKQotI2RlZmluZSBpc2FfcmVhZHcoYSkJCXJlYWR3KF9fSVNBX0lPX2Jhc2UgKyAoYSkpCi0jZGVmaW5lIGlzYV9yZWFkbChhKQkJcmVhZGwoX19JU0FfSU9fYmFzZSArIChhKSkKLSNkZWZpbmUgaXNhX3JlYWRxKGEpCQlyZWFkcShfX0lTQV9JT19iYXNlICsgKGEpKQotI2RlZmluZSBpc2Ffd3JpdGViKGIsYSkJCXdyaXRlYihiLF9fSVNBX0lPX2Jhc2UgKyAoYSkpCi0jZGVmaW5lIGlzYV93cml0ZXcodyxhKQkJd3JpdGV3KHcsX19JU0FfSU9fYmFzZSArIChhKSkKLSNkZWZpbmUgaXNhX3dyaXRlbChsLGEpCQl3cml0ZWwobCxfX0lTQV9JT19iYXNlICsgKGEpKQotI2RlZmluZSBpc2Ffd3JpdGVxKHEsYSkJCXdyaXRlcShxLF9fSVNBX0lPX2Jhc2UgKyAoYSkpCi0jZGVmaW5lIGlzYV9tZW1zZXRfaW8oYSxiLGMpCW1lbXNldF9pbyhfX0lTQV9JT19iYXNlICsgKGEpLChiKSwoYykpCi0jZGVmaW5lIGlzYV9tZW1jcHlfZnJvbWlvKGEsYixjKSBtZW1jcHlfZnJvbWlvKChhKSxfX0lTQV9JT19iYXNlICsgKGIpLChjKSkKLSNkZWZpbmUgaXNhX21lbWNweV90b2lvKGEsYixjKQltZW1jcHlfdG9pbyhfX0lTQV9JT19iYXNlICsgKGEpLChiKSwoYykpCi0KIC8qCiAgKiBXZSBkb24ndCBoYXZlIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21pbygpIHlldCwgc28gd2UgY2hlYXQgaGVyZSBhbmQKICAqIGp1c3QgY29weSBpdC4gVGhlIG5ldCBjb2RlIHdpbGwgdGhlbiBkbyB0aGUgY2hlY2tzdW0gbGF0ZXIuCiAgKi8KICNkZWZpbmUgZXRoX2lvX2NvcHlfYW5kX3N1bShza2Isc3JjLGxlbix1bnVzZWQpIG1lbWNweV9mcm9taW8oKHNrYiktPmRhdGEsKHNyYyksKGxlbikpCi0jZGVmaW5lIGlzYV9ldGhfaW9fY29weV9hbmRfc3VtKGEsYixjLGQpIGV0aF9jb3B5X2FuZF9zdW0oKGEpLChiKSwoYyksKGQpKQogCiAvKgogICogICAgIGNoZWNrX3NpZ25hdHVyZSAgICAgICAgIC0gICAgICAgZmluZCBCSU9TIHNpZ25hdHVyZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbGlua2FnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9saW5rYWdlLmgKaW5kZXggMjkxYzJkMC4uYjYxODVkM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbGlua2FnZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbGlua2FnZS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKICNkZWZpbmUgX19BU01fTElOS0FHRV9ICiAKLS8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuLi4gKi8KKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtY29iYWx0L2NvYmFsdC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWNvYmFsdC9jb2JhbHQuaAppbmRleCA3OGUxZGYyLi5iM2M1ZWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtY29iYWx0L2NvYmFsdC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1jb2JhbHQvY29iYWx0LmgKQEAgLTExMyw0ICsxMTMsNiBAQAogIyBkZWZpbmUgQ09CQUxUX0tFWV9TRUxFQ1QJKDEgPDwgNykKICMgZGVmaW5lIENPQkFMVF9LRVlfTUFTSwkweGZlCiAKKyNkZWZpbmUgQ09CQUxUX1VBUlQJCSgodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBDS1NFRzFBRERSKDB4MWM4MDAwMDApKQorCiAjZW5kaWYgLyogX19BU01fQ09CQUxUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL21hbmdsZS1wb3J0LmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9tYW5nbGUtcG9ydC5oCmluZGV4IDRhOThkODMuLjZlMWIwYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL21hbmdsZS1wb3J0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvbWFuZ2xlLXBvcnQuaApAQCAtMTMsNCArMTMsNDAgQEAKICNkZWZpbmUgX19zd2l6emxlX2FkZHJfbChwb3J0KQkocG9ydCkKICNkZWZpbmUgX19zd2l6emxlX2FkZHJfcShwb3J0KQkocG9ydCkKIAorLyoKKyAqIFNhbmUgaGFyZHdhcmUgb2ZmZXJzIHN3YXBwaW5nIG9mIFBDSS9JU0EgSS9PIHNwYWNlIGFjY2Vzc2VzIGluIGhhcmR3YXJlOworICogbGVzcyBzYW5lIGhhcmR3YXJlIGZvcmNlcyBzb2Z0d2FyZSB0byBmaWRkbGUgd2l0aCB0aGlzLi4uCisgKgorICogUmVnYXJkbGVzcywgaWYgdGhlIGhvc3QgYnVzIGVuZGlhbm5lc3MgbWlzbWF0Y2hlcyB0aGF0IG9mIFBDSS9JU0EsIHRoZW4KKyAqIHlvdSBjYW4ndCBoYXZlIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgZGF0YSBhbmQgYnl0ZSBhZGRyZXNzZXMgd2l0aGluCisgKiBtdWx0aWJ5dGUgcXVhbnRpdGllcyBib3RoIHByZXNlcnZlZCBhdCB0aGUgc2FtZSB0aW1lLiAgSGVuY2UgdHdvCisgKiB2YXJpYXRpb25zIG9mIGZ1bmN0aW9uczogbm9uLXByZWZpeGVkIG9uZXMgdGhhdCBwcmVzZXJ2ZSB0aGUgdmFsdWUKKyAqIGFuZCBwcmVmaXhlZCBvbmVzIHRoYXQgcHJlc2VydmUgYnl0ZSBhZGRyZXNzZXMuICBUaGUgbGF0dGVycyBhcmUKKyAqIHR5cGljYWxseSB1c2VkIGZvciBtb3ZpbmcgcmF3IGRhdGEgYmV0d2VlbiBhIHBlcmlwaGVyYWwgYW5kIG1lbW9yeSAoY2YuCisgKiBzdHJpbmcgSS9PIGZ1bmN0aW9ucyksIGhlbmNlIHRoZSAiX19tZW1fIiBwcmVmaXguCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TV0FQX0lPX1NQQUNFKQorCisjIGRlZmluZSBpb3N3YWJiKGEseCkJCSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FiYihhLHgpCSh4KQorIyBkZWZpbmUgaW9zd2FidyhhLHgpCQlsZTE2X3RvX2NwdSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FidyhhLHgpCSh4KQorIyBkZWZpbmUgaW9zd2FibChhLHgpCQlsZTMyX3RvX2NwdSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FibChhLHgpCSh4KQorIyBkZWZpbmUgaW9zd2FicShhLHgpCQlsZTY0X3RvX2NwdSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FicShhLHgpCSh4KQorCisjZWxzZQorCisjIGRlZmluZSBpb3N3YWJiKGEseCkJCSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FiYihhLHgpCSh4KQorIyBkZWZpbmUgaW9zd2FidyhhLHgpCQkoeCkKKyMgZGVmaW5lIF9fbWVtX2lvc3dhYncoYSx4KQljcHVfdG9fbGUxNih4KQorIyBkZWZpbmUgaW9zd2FibChhLHgpCQkoeCkKKyMgZGVmaW5lIF9fbWVtX2lvc3dhYmwoYSx4KQljcHVfdG9fbGUzMih4KQorIyBkZWZpbmUgaW9zd2FicShhLHgpCQkoeCkKKyMgZGVmaW5lIF9fbWVtX2lvc3dhYnEoYSx4KQljcHVfdG9fbGUzMih4KQorCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fQVNNX01BQ0hfR0VORVJJQ19NQU5HTEVfUE9SVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9tYW5nbGUtcG9ydC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcvbWFuZ2xlLXBvcnQuaAppbmRleCBmNzZjNDQ4Li5kNjE1MzEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9tYW5nbGUtcG9ydC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L21hbmdsZS1wb3J0LmgKQEAgLTEzLDQgKzEzLDEzIEBACiAjZGVmaW5lIF9fc3dpenpsZV9hZGRyX2wocG9ydCkJKHBvcnQpCiAjZGVmaW5lIF9fc3dpenpsZV9hZGRyX3EocG9ydCkJKHBvcnQpCiAKKyMgZGVmaW5lIGlvc3dhYmIoYSx4KQkJKHgpCisjIGRlZmluZSBfX21lbV9pb3N3YWJiKGEseCkJKHgpCisjIGRlZmluZSBpb3N3YWJ3KGEseCkJCSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FidyhhLHgpCWNwdV90b19sZTE2KHgpCisjIGRlZmluZSBpb3N3YWJsKGEseCkJCSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FibChhLHgpCWNwdV90b19sZTMyKHgpCisjIGRlZmluZSBpb3N3YWJxKGEseCkJCSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FicShhLHgpCWNwdV90b19sZTMyKHgpCisKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQMjdfTUFOR0xFX1BPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvbWFuZ2xlLXBvcnQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL21hbmdsZS1wb3J0LmgKaW5kZXggNmUyNWI1Mi4uODEzMjBlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvbWFuZ2xlLXBvcnQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9tYW5nbGUtcG9ydC5oCkBAIC0xNCw0ICsxNCwxMyBAQAogI2RlZmluZSBfX3N3aXp6bGVfYWRkcl9sKHBvcnQpCShwb3J0KQogI2RlZmluZSBfX3N3aXp6bGVfYWRkcl9xKHBvcnQpCShwb3J0KQogCisjIGRlZmluZSBpb3N3YWJiKGEseCkJCSh4KQorIyBkZWZpbmUgX19tZW1faW9zd2FiYihhLHgpCSh4KQorIyBkZWZpbmUgaW9zd2FidyhhLHgpCQkoeCkKKyMgZGVmaW5lIF9fbWVtX2lvc3dhYncoYSx4KQljcHVfdG9fbGUxNih4KQorIyBkZWZpbmUgaW9zd2FibChhLHgpCQkoeCkKKyMgZGVmaW5lIF9fbWVtX2lvc3dhYmwoYSx4KQljcHVfdG9fbGUzMih4KQorIyBkZWZpbmUgaW9zd2FicShhLHgpCQkoeCkKKyMgZGVmaW5lIF9fbWVtX2lvc3dhYnEoYSx4KQljcHVfdG9fbGUzMih4KQorCiAjZW5kaWYgLyogX19BU01fTUFDSF9JUDMyX01BTkdMRV9QT1JUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggOWY5MmFlZC4uZTA2YWY2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTI5LDcgKzI5LDExIEBACiAvKiAjZGVmaW5lIGNwdV9oYXNfcHJlZmV0Y2gJPyAqLwogI2RlZmluZSBjcHVfaGFzX21jaGVjawkJMQogLyogI2RlZmluZSBjcHVfaGFzX2VqdGFnCT8gKi8KKyNpZmRlZiBDT05GSUdfQ1BVX0hBU19MTFNDCiAjZGVmaW5lIGNwdV9oYXNfbGxzYwkJMQorI2Vsc2UKKyNkZWZpbmUgY3B1X2hhc19sbHNjCQkwCisjZW5kaWYKIC8qICNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQk/ICovCiAvKiAjZGVmaW5lIGNwdV9oYXNfZGNfYWxpYXNlcwk/ICovCiAvKiAjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYyA/ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKaW5kZXggMTljZGY3Ni4uNjFjZjIyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaApAQCAtMzMsMTIgKzMzLDcgQEAKIAl3cml0ZV9jMF9jb250ZXh0KCh1bnNpZ25lZCBsb25nKSBzbXBfcHJvY2Vzc29yX2lkKCkgPDwgMjUpOwlcCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChzd2FwcGVyX3BnX2RpcikKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKSAmJiAhZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCi0jZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAotCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpICZwZ2RfY3VycmVudFtzbXBfcHJvY2Vzc29yX2lkKCldIDw8IDIzKTsgXAotCVRMQk1JU1NfSEFORExFUl9TRVRVUF9QR0Qoc3dhcHBlcl9wZ19kaXIpCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCisjaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAogCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAyNik7CVwKIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHN3YXBwZXJfcGdfZGlyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaAppbmRleCAwY2ZmNjRjLi40ZDZiYzQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtMzIuaApAQCAtMjA2LDcgKzIwNiw3IEBACiAJLyogZml4bWUgKi8KICNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9wdGUpICgoKF9wdGUpLnB0ZV9oaWdoID4+IDYpICsgKChfcHRlKS5wdGVfaGlnaCAmIDB4M2YpKQogI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSBcCi0gCSgocHRlX3QpeygoKG9mZikgJiAweDNmKSArICgob2ZmKSA8PCA2KSArIF9QQUdFX0ZJTEUpfSkKKwkoKHB0ZV90KXsoKChvZmYpICYgMHgzZikgKyAoKG9mZikgPDwgNikgKyBfUEFHRV9GSUxFKX0pCiAKICNlbHNlCiAjZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BvbGwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcG9sbC5oCmluZGV4IGEwMDBmMWYuLjcwODgxZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcG9sbC5oCkBAIC0xNyw2ICsxNyw3IEBACiAvKiBUaGVzZSBzZWVtIHRvIGJlIG1vcmUgb3IgbGVzcyBub25zdGFuZGFyZCAuLi4gICovCiAjZGVmaW5lIFBPTExNU0cJCTB4MDQwMAogI2RlZmluZSBQT0xMUkVNT1ZFCTB4MTAwMAorI2RlZmluZSBQT0xMUkRIVVAgICAgICAgMHgyMDAwCiAKIHN0cnVjdCBwb2xsZmQgewogCWludCBmZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcjRrY2FjaGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcjRrY2FjaGUuaAppbmRleCA5NjMyYzI3Li45MGMzNzQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3I0a2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9yNGtjYWNoZS5oCkBAIC0yNTcsNyArMjU3LDggQEAKIAkJCQkJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBibGFzdF8jI3BmeCMjY2FjaGUjI2xzaXplIyNfcGFnZV9pbmRleGVkKHVuc2lnbmVkIGxvbmcgcGFnZSkgXAogewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcGFnZTsJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGluZGV4bWFzayA9IGN1cnJlbnRfY3B1X2RhdGEuZGVzYy53YXlzaXplIC0gMTsJXAorCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBJTkRFWF9CQVNFICsgKHBhZ2UgJiBpbmRleG1hc2spOwkJXAogCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQQUdFX1NJWkU7CQkJCVwKIAl1bnNpZ25lZCBsb25nIHdzX2luYyA9IDFVTCA8PCBjdXJyZW50X2NwdV9kYXRhLmRlc2Mud2F5Yml0OwlcCiAJdW5zaWduZWQgbG9uZyB3c19lbmQgPSBjdXJyZW50X2NwdV9kYXRhLmRlc2Mud2F5cyA8PAkJXApAQCAtMzAyLDUgKzMwMyw2IEBACiBfX0JVSUxEX0JMQVNUX0NBQ0hFX1JBTkdFKHMsIHNjYWNoZSwgSGl0X1dyaXRlYmFja19JbnZfU0QsICkKIC8qIGJsYXN0X2ludl9kY2FjaGVfcmFuZ2UgKi8KIF9fQlVJTERfQkxBU1RfQ0FDSEVfUkFOR0UoaW52X2QsIGRjYWNoZSwgSGl0X0ludmFsaWRhdGVfRCwgKQorX19CVUlMRF9CTEFTVF9DQUNIRV9SQU5HRShpbnZfcywgc2NhY2hlLCBIaXRfSW52YWxpZGF0ZV9TRCwgKQogCiAjZW5kaWYgLyogX0FTTV9SNEtDQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MC5oCmluZGV4IGE0NzRjMjkuLmIwOWUxNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MC5oCkBAIC00NSw4ICs0NSw4IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHBlcmlwaF9yZXY7CiBleHRlcm4gdW5zaWduZWQgaW50IHpiYnVzX21oejsKIAorZXh0ZXJuIHZvaWQgc2IxMjUwX2hwdF9zZXR1cCh2b2lkKTsKIGV4dGVybiB2b2lkIHNiMTI1MF90aW1lX2luaXQodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYjEyNTBfZ2V0dGltZW9mZnNldCh2b2lkKTsKIGV4dGVybiB2b2lkIHNiMTI1MF9tYXNrX2lycShpbnQgY3B1LCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIHNiMTI1MF91bm1hc2tfaXJxKGludCBjcHUsIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgc2IxMjUwX3NtcF9maW5pc2godm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfc2NkLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfc2NkLmgKaW5kZXggYTY2N2JjMS4uZjQxNzhiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX3NjZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9zY2QuaApAQCAtMzU5LDE0ICszNTksMTUgQEAKICAqLwogCiAjZGVmaW5lIFZfU0NEX1RJTUVSX0ZSRVEgICAgICAgICAgICAxMDAwMDAwCisjZGVmaW5lIFZfU0NEX1RJTUVSX1dJRFRIICAgICAgICAgICAyMwogCiAjZGVmaW5lIFNfU0NEX1RJTUVSX0lOSVQgICAgICAgICAgICAwCi0jZGVmaW5lIE1fU0NEX1RJTUVSX0lOSVQgICAgICAgICAgICBfU0JfTUFLRU1BU0soMjAsU19TQ0RfVElNRVJfSU5JVCkKKyNkZWZpbmUgTV9TQ0RfVElNRVJfSU5JVCAgICAgICAgICAgIF9TQl9NQUtFTUFTSyhWX1NDRF9USU1FUl9XSURUSCxTX1NDRF9USU1FUl9JTklUKQogI2RlZmluZSBWX1NDRF9USU1FUl9JTklUKHgpICAgICAgICAgX1NCX01BS0VWQUxVRSh4LFNfU0NEX1RJTUVSX0lOSVQpCiAjZGVmaW5lIEdfU0NEX1RJTUVSX0lOSVQoeCkgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NDRF9USU1FUl9JTklULE1fU0NEX1RJTUVSX0lOSVQpCiAKICNkZWZpbmUgU19TQ0RfVElNRVJfQ05UICAgICAgICAgICAgIDAKLSNkZWZpbmUgTV9TQ0RfVElNRVJfQ05UICAgICAgICAgICAgIF9TQl9NQUtFTUFTSygyMCxTX1NDRF9USU1FUl9DTlQpCisjZGVmaW5lIE1fU0NEX1RJTUVSX0NOVCAgICAgICAgICAgICBfU0JfTUFLRU1BU0soVl9TQ0RfVElNRVJfV0lEVEgsU19TQ0RfVElNRVJfQ05UKQogI2RlZmluZSBWX1NDRF9USU1FUl9DTlQoeCkgICAgICAgICBfU0JfTUFLRVZBTFVFKHgsU19TQ0RfVElNRVJfQ05UKQogI2RlZmluZSBHX1NDRF9USU1FUl9DTlQoeCkgICAgICAgICBfU0JfR0VUVkFMVUUoeCxTX1NDRF9USU1FUl9DTlQsTV9TQ0RfVElNRVJfQ05UKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaAppbmRleCA2ZmU5MDNlLi5kODM0OWU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKQEAgLTE0NywxNiArMTQ3LDM0IEBACiAKIC8qIElSSVggY29tcGF0aWJsZSBzdGFja190ICAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewotCXZvaWQgKnNzX3NwOworCXZvaWQgX191c2VyICpzc19zcDsKIAlzaXplX3Qgc3Nfc2l6ZTsKIAlpbnQgc3NfZmxhZ3M7CiB9IHN0YWNrX3Q7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgogCiAjZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKIAorc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgZG9fc2lnbmFsMzIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitleHRlcm4gaW50IHNldHVwX2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqIGthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKyAgICAgICAgaW50IHNpZ25yLCBzaWdzZXRfdCAqc2V0KTsKK2V4dGVybiBpbnQgc2V0dXBfcnRfZnJhbWUoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbyk7CisKK2V4dGVybiBpbnQgc2V0dXBfZnJhbWVfMzIoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQpOworZXh0ZXJuIGludCBzZXR1cF9ydF9mcmFtZV8zMihzdHJ1Y3Qga19zaWdhY3Rpb24gKiBrYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisgICAgICAgIGludCBzaWduciwgc2lnc2V0X3QgKnNldCwgc2lnaW5mb190ICppbmZvKTsKKworZXh0ZXJuIGludCBzZXR1cF9ydF9mcmFtZV9uMzIoc3RydWN0IGtfc2lnYWN0aW9uICoga2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorICAgICAgICBpbnQgc2lnbnIsIHNpZ3NldF90ICpzZXQsIHNpZ2luZm9fdCAqaW5mbyk7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NtcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbXAuaAppbmRleCA1NjE4ZjFlLi43NWM2ZmU3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NtcC5oCkBAIC01OCw3ICs1OCw5IEBACiAJcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9jYWxsb3V0X21hcCk7CiB9CiAKLS8qIFRoZXNlIGFyZSBkZWZpbmVkIGJ5IHRoZSBib2FyZC1zcGVjaWZpYyBjb2RlLiAqLworLyoKKyAqIFRoZXNlIGFyZSBkZWZpbmVkIGJ5IHRoZSBib2FyZC1zcGVjaWZpYyBjb2RlLgorICovCiAKIC8qCiAgKiBDYXVzZSB0aGUgZnVuY3Rpb24gZGVzY3JpYmVkIGJ5IGNhbGxfZGF0YSB0byBiZSBleGVjdXRlZCBvbiB0aGUgcGFzc2VkCkBAIC03OSw3ICs4MSwxMiBAQAogZXh0ZXJuIHZvaWQgcHJvbV9pbml0X3NlY29uZGFyeSh2b2lkKTsKIAogLyoKLSAqIERldGVjdCBhdmFpbGFibGUgQ1BVcywgcG9wdWxhdGUgcGh5c19jcHVfcHJlc2VudF9tYXAgYmVmb3JlIHNtcF9pbml0CisgKiBQb3B1bGF0ZSBjcHVfcG9zc2libGVfbWFwIGJlZm9yZSBzbXBfaW5pdCwgY2FsbGVkIGZyb20gc2V0dXBfYXJjaC4KKyAqLworZXh0ZXJuIHZvaWQgcGxhdF9zbXBfc2V0dXAodm9pZCk7CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgaW5pdF9JUlEgYnV0IGJlZm9yZSBfX2NwdV91cC4KICAqLwogZXh0ZXJuIHZvaWQgcHJvbV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oCmluZGV4IGQwMjhlMjguLjk3MDlmZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2tsY29uZmlnLmgKQEAgLTk5LDcgKzk5LDcgQEAKICNkZWZpbmUgRU5BQkxFX0JPQVJEIAkJMHgwMQogI2RlZmluZSBGQUlMRURfQk9BUkQgIAkJMHgwMgogI2RlZmluZSBEVVBMSUNBVEVfQk9BUkQgCTB4MDQgICAgLyogQm9hcmRzIGxpa2UgbWlkcGxhbmVzL3JvdXRlcnMgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgIGFyZSBkaXNjb3ZlcmVkIHR3aWNlLiBVc2Ugb25lIG9mIHRoZW0gKi8KKwkJCQkJICAgYXJlIGRpc2NvdmVyZWQgdHdpY2UuIFVzZSBvbmUgb2YgdGhlbSAqLwogI2RlZmluZSBWSVNJVEVEX0JPQVJECQkweDA4CS8qIFVzZWQgZm9yIGNvbXBhY3QgaHViIG51bWJlcmluZy4gKi8KICNkZWZpbmUgTE9DQUxfTUFTVEVSX0lPNgkweDEwIAkvKiBtYXN0ZXIgaW82IGZvciB0aGF0IG5vZGUgKi8KICNkZWZpbmUgR0xPQkFMX01BU1RFUl9JTzYJMHgyMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuL21hcHBlZF9rZXJuZWwuaAppbmRleCAzYTE3ODQ2ZC4uNTllZGIyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKQEAgLTIzLDExICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCi0jaWZkZWYgQ09ORklHX0JVSUxEX0VMRjY0CiAjZGVmaW5lIFJFUF9CQVNFCUNBQ19CQVNFCi0jZWxzZQotI2RlZmluZSBSRVBfQkFTRQlDS1NFRzAKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BUFBFRF9LRVJORUwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViaW8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1YmlvLmgKaW5kZXggODBjZjZhNS4uZjMxNGRhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHViaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJpby5oCkBAIC0yMjksNyArMjI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGljc3JfbGxwX2VuOgkgMSwJLyogTExQIGVuYWJsZSBiaXQgKi8KICAgICAgICAgICAgICAgICAgCWljc3JfcnN2ZDI6CSAxLCAgICAgLyogcmVzZXJ2ZXIgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGljc3Jfd3JtX3Jlc2V0OgkgMSwJLyogV2FybSByZXNldCBiaXQgKi8KLSAgICAJCQlpY3NyX3JzdmQxOgkgMiwJLyogRGF0YSByZWFkeSBvZmZzZXQgKi8KKwkJCWljc3JfcnN2ZDE6CSAyLAkvKiBEYXRhIHJlYWR5IG9mZnNldCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaWNzcl9udWxsX3RvOgkgNjsJLyogTnVsbCB0aW1lb3V0ICAgKi8KIAogICAgICAgICB9IGljc3JfZmllbGRzX3M7CkBAIC0yNzQsOSArMjc0LDkgQEAKIAl1NjQgcGVyZl9zZWxfcmVnOwogCXN0cnVjdCB7CiAJCXU2NCAJcGVyZl9yc3ZkICA6IDQ4LAotCQkgICAgICAgIHBlcmZfaWNjdCAgOiAgOCwKLQkJICAgICAgICBwZXJmX2lwcHIxIDogIDQsCi0gIAkJICAgICAgICBwZXJmX2lwcHIwIDogIDQ7CisJCQlwZXJmX2ljY3QgIDogIDgsCisJCSAJcGVyZl9pcHByMSA6ICA0LAorCQkJcGVyZl9pcHByMCA6ICA0OwogCX0gcGVyZl9zZWxfYml0czsKIH0gaW9fcGVyZl9zZWxfdDsKIApAQCAtMjg3LDggKzI4Nyw4IEBACiAJdTY0CXBlcmZfY250OwogCXN0cnVjdCB7CiAJCXU2NAlwZXJmX3JzdmQxIDogMzIsCi0gIAkJCSAgICAgICAgcGVyZl9yc3ZkMiA6IDEyLAotICAJCQkgICAgICAgIHBlcmZfY250ICAgOiAyMDsKKwkJCXBlcmZfcnN2ZDIgOiAxMiwKKwkJCXBlcmZfY250ICAgOiAyMDsKIAl9IHBlcmZfY250X2JpdHM7CiB9IGlvX3BlcmZfY250X3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKaW5kZXggYTg5MTlkYy4uMmFjZjNlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zdGFja2ZyYW1lLmgKQEAgLTYzLDE3ICs2Myw3IEBACiAJCWFkZHUJazEsIGswCiAJCUxPTkdfTAlrMSwgJWxvKGtlcm5lbHNwKShrMSkKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKSAmJiAhZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCi0JCU1GQzAJazEsIENQMF9DT05URVhUCi0JCWRzcmEJazEsIDIzCi0JCWx1aQlrMCwgJWhpKHBnZF9jdXJyZW50KQotCQlhZGRpdQlrMCwgJWxvKHBnZF9jdXJyZW50KQotCQlkc3VidQlrMSwgazAKLQkJbHVpCWswLCAlaGkoa2VybmVsc3ApCi0JCWRhZGR1CWsxLCBrMAotCQlMT05HX0wJazEsICVsbyhrZXJuZWxzcCkoazEpCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCisjaWZkZWYgQ09ORklHXzY0QklUCiAJCU1GQzAJazEsIENQMF9DT05URVhUCiAJCWx1aQlrMCwgJWhpZ2hlc3Qoa2VybmVsc3ApCiAJCWRzcmwJazEsIDIzCkBAIC05MSwxMSArODEsNyBAQAogCQltZmMwCVx0ZW1wLCBDUDBfQ09OVEVYVAogCQlzcmwJXHRlbXAsIDIzCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkgJiYgIWRlZmluZWQoQ09ORklHX0JVSUxEX0VMRjY0KQotCQlsdwlcdGVtcCwgVElfQ1BVKGdwKQotCQlkc2xsCVx0ZW1wLCAzCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCisjaWZkZWYgQ09ORklHXzY0QklUCiAJCU1GQzAJXHRlbXAsIENQMF9DT05URVhUCiAJCWRzcmwJXHRlbXAsIDIzCiAjZW5kaWYKQEAgLTEwMyw3ICs4OSw3IEBACiAJCS5lbmRtCiAjZWxzZQogCQkubWFjcm8JZ2V0X3NhdmVkX3NwCS8qIFVuaXByb2Nlc3NvciB2YXJpYXRpb24gKi8KLSNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfQlVJTERfRUxGNjQpCisjaWZkZWYgQ09ORklHXzY0QklUCiAJCWx1aQlrMSwgJWhpZ2hlc3Qoa2VybmVsc3ApCiAJCWRhZGRpdQlrMSwgJWhpZ2hlcihrZXJuZWxzcCkKIAkJZHNsbAlrMSwgazEsIDE2CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAppbmRleCBlOGU1ZDQxLi40MDk3ZmFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKQEAgLTI4NiwxMCArMjg2LDEwIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCiB7CiAJc3dpdGNoIChzaXplKSB7Ci0JCWNhc2UgNDoKLQkJCXJldHVybiBfX3hjaGdfdTMyKHB0ciwgeCk7Ci0JCWNhc2UgODoKLQkJCXJldHVybiBfX3hjaGdfdTY0KHB0ciwgeCk7CisJY2FzZSA0OgorCQlyZXR1cm4gX194Y2hnX3UzMihwdHIsIHgpOworCWNhc2UgODoKKwkJcmV0dXJuIF9feGNoZ191NjQocHRyLCB4KTsKIAl9CiAJX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CiAJcmV0dXJuIHg7CkBAIC0zMjIsNyArMzIyLDcgQEAKICNlbmRpZgogCQkiMjoJCQkJCQkJXG4iCiAJCSIJLnNldAlwb3AJCQkJCVxuIgotCQk6ICI9JnIiIChyZXR2YWwpLCAiPW0iICgqbSkKKwkJOiAiPSZyIiAocmV0dmFsKSwgIj1SIiAoKm0pCiAJCTogIlIiICgqbSksICJKciIgKG9sZCksICJKciIgKG5ldykKIAkJOiAibWVtb3J5Iik7CiAJfSBlbHNlIGlmIChjcHVfaGFzX2xsc2MpIHsKQEAgLTM0Miw3ICszNDIsNyBAQAogI2VuZGlmCiAJCSIyOgkJCQkJCQlcbiIKIAkJIgkuc2V0CXBvcAkJCQkJXG4iCi0JCTogIj0mciIgKHJldHZhbCksICI9bSIgKCptKQorCQk6ICI9JnIiIChyZXR2YWwpLCAiPVIiICgqbSkKIAkJOiAiUiIgKCptKSwgIkpyIiAob2xkKSwgIkpyIiAobmV3KQogCQk6ICJtZW1vcnkiKTsKIAl9IGVsc2UgewpAQCAtMzc5LDcgKzM3OSw3IEBACiAjZW5kaWYKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zZXQJcG9wCQkJCQlcbiIKLQkJOiAiPSZyIiAocmV0dmFsKSwgIj1tIiAoKm0pCisJCTogIj0mciIgKHJldHZhbCksICI9UiIgKCptKQogCQk6ICJSIiAoKm0pLCAiSnIiIChvbGQpLCAiSnIiIChuZXcpCiAJCTogIm1lbW9yeSIpOwogCX0gZWxzZSBpZiAoY3B1X2hhc19sbHNjKSB7CkBAIC0zOTcsNyArMzk3LDcgQEAKICNlbmRpZgogCQkiMjoJCQkJCQkJXG4iCiAJCSIJLnNldAlwb3AJCQkJCVxuIgotCQk6ICI9JnIiIChyZXR2YWwpLCAiPW0iICgqbSkKKwkJOiAiPSZyIiAocmV0dmFsKSwgIj1SIiAoKm0pCiAJCTogIlIiICgqbSksICJKciIgKG9sZCksICJKciIgKG5ldykKIAkJOiAibWVtb3J5Iik7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdGVybWJpdHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdGVybWJpdHMuaAppbmRleCBjMjljNjViLi5mYTZkMDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3Rlcm1iaXRzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90ZXJtYml0cy5oCkBAIC03Nyw3ICs3Nyw3IEBACiAjZGVmaW5lIElYQU5ZCTAwMDQwMDAJCS8qIEFueSBjaGFyYWN0ZXIgd2lsbCByZXN0YXJ0IGFmdGVyIHN0b3AuICAqLwogI2RlZmluZSBJWE9GRgkwMDEwMDAwCQkvKiBFbmFibGUgc3RhcnQvc3RvcCBpbnB1dCBjb250cm9sLiAgKi8KICNkZWZpbmUgSU1BWEJFTAkwMDIwMDAwCQkvKiBSaW5nIGJlbGwgd2hlbiBpbnB1dCBxdWV1ZSBpcyBmdWxsLiAgKi8KLSNkZWZpbmUgSVVURjgJMDA0MDAwMAkJLyogSW5wdXQgaXMgVVRGOCAqLworI2RlZmluZSBJVVRGOAkwMDQwMDAwCQkvKiBJbnB1dCBpcyBVVEYtOCAqLwogCiAvKiBjX29mbGFnIGJpdHMgKi8KICNkZWZpbmUgT1BPU1QJMDAwMDAwMQkJLyogUGVyZm9ybSBvdXRwdXQgcHJvY2Vzc2luZy4gICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1taXBzL3RocmVhZF9pbmZvLmgKaW5kZXggZmExOTNmOC4uZjhkOTdkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGhyZWFkX2luZm8uaApAQCAtMzEsNyArMzEsNyBAQAogCWludAkJCXByZWVtcHRfY291bnQ7CS8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLwogCiAJbW1fc2VnbWVudF90CQlhZGRyX2xpbWl0OwkvKiB0aHJlYWQgYWRkcmVzcyBzcGFjZToKLQkJCQkJIAkgICAwLTB4QkZGRkZGRkYgZm9yIHVzZXItdGhlYWQKKwkJCQkJCSAgIDAtMHhCRkZGRkZGRiBmb3IgdXNlci10aGVhZAogCQkJCQkJICAgMC0weEZGRkZGRkZGIGZvciBrZXJuZWwtdGhyZWFkCiAJCQkJCQkqLwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCmluZGV4IDdhNTUzZTkuLmI5NmYzZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCkBAIC0yMzMsNyArMjMzLDcgQEAKICNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LHB0cixzaXplKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJbG9uZyBfX2d1X2VyciA9IC1FRkFVTFQ7CQkJCQlcCi0JY29uc3Qgdm9pZCBfX3VzZXIgKiBfX2d1X3B0ciA9IChwdHIpOwkJCQlcCisJY29uc3QgX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqIF9fZ3VfcHRyID0gKHB0cik7CQlcCiAJCQkJCQkJCQlcCiAJaWYgKGxpa2VseShhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICBfX2d1X3B0ciwgc2l6ZSkpKQkJXAogCQlfX2dldF91c2VyX2NvbW1vbigoeCksIHNpemUsIF9fZ3VfcHRyKTsJCQlcCkBAIC0yNTgsNyArMjU4LDcgQEAKIAk6ICI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV90bXApCQkJCVwKIAk6ICIwIiAoMCksICJvIiAoX19tKGFkZHIpKSwgImkiICgtRUZBVUxUKSk7CQkJXAogCQkJCQkJCQkJXAotCSh2YWwpID0gKF9fdHlwZW9mX18odmFsKSkgX19ndV90bXA7CQkJCVwKKwkodmFsKSA9IChfX3R5cGVvZl9fKCooYWRkcikpKSBfX2d1X3RtcDsJCQkJXAogfQogCiAvKgpAQCAtMjg0LDcgKzI4NCw3IEBACiAJIgkucHJldmlvdXMJCQkJCVxuIglcCiAJOiAiPXIiIChfX2d1X2VyciksICI9JnIiIChfX2d1X3RtcCkJCQkJXAogCTogIjAiICgwKSwgInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSk7CQkJCVwKLQkodmFsKSA9IF9fZ3VfdG1wOwkJCQkJCVwKKwkodmFsKSA9IChfX3R5cGVvZl9fKCooYWRkcikpKSBfX2d1X3RtcDsJCQkJXAogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKaW5kZXggNzY5MzA1ZC4uYjVjNzhhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCkBAIC0zMTMsNyArMzEzLDcgQEAKICNkZWZpbmUgX19OUl9ta25vZGF0CQkJKF9fTlJfTGludXggKyAyOTApCiAjZGVmaW5lIF9fTlJfZmNob3duYXQJCQkoX19OUl9MaW51eCArIDI5MSkKICNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCQkoX19OUl9MaW51eCArIDI5MikKLSNkZWZpbmUgX19OUl9uZXdmc3RhdGF0CQkJKF9fTlJfTGludXggKyAyOTMpCisjZGVmaW5lIF9fTlJfZnN0YXRhdAkJCShfX05SX0xpbnV4ICsgMjkzKQogI2RlZmluZSBfX05SX3VubGlua2F0CQkJKF9fTlJfTGludXggKyAyOTQpCiAjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCQkoX19OUl9MaW51eCArIDI5NSkKICNkZWZpbmUgX19OUl9saW5rYXQJCQkoX19OUl9MaW51eCArIDI5NikKQEAgLTU5Myw3ICs1OTMsNyBAQAogI2RlZmluZSBfX05SX21rbm9kYXQJCQkoX19OUl9MaW51eCArIDI0OSkKICNkZWZpbmUgX19OUl9mY2hvd25hdAkJCShfX05SX0xpbnV4ICsgMjUwKQogI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJCShfX05SX0xpbnV4ICsgMjUxKQotI2RlZmluZSBfX05SX25ld2ZzdGF0YXQJCQkoX19OUl9MaW51eCArIDI1MikKKyNkZWZpbmUgX19OUl9mc3RhdGF0CQkJKF9fTlJfTGludXggKyAyNTIpCiAjZGVmaW5lIF9fTlJfdW5saW5rYXQJCQkoX19OUl9MaW51eCArIDI1MykKICNkZWZpbmUgX19OUl9yZW5hbWVhdAkJCShfX05SX0xpbnV4ICsgMjU0KQogI2RlZmluZSBfX05SX2xpbmthdAkJCShfX05SX0xpbnV4ICsgMjU1KQpAQCAtODc3LDcgKzg3Nyw3IEBACiAjZGVmaW5lIF9fTlJfbWtub2RhdAkJCShfX05SX0xpbnV4ICsgMjUzKQogI2RlZmluZSBfX05SX2ZjaG93bmF0CQkJKF9fTlJfTGludXggKyAyNTQpCiAjZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkJKF9fTlJfTGludXggKyAyNTUpCi0jZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdAkJCShfX05SX0xpbnV4ICsgMjU2KQorI2RlZmluZSBfX05SX2ZzdGF0YXQJCQkoX19OUl9MaW51eCArIDI1NikKICNkZWZpbmUgX19OUl91bmxpbmthdAkJCShfX05SX0xpbnV4ICsgMjU3KQogI2RlZmluZSBfX05SX3JlbmFtZWF0CQkJKF9fTlJfTGludXggKyAyNTgpCiAjZGVmaW5lIF9fTlJfbGlua2F0CQkJKF9fTlJfTGludXggKyAyNTkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZnYS5oIGIvaW5jbHVkZS9hc20tbWlwcy92Z2EuaAppbmRleCBjYTVjZWM5Li4zNDc1NWMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3ZnYS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdmdhLmgKQEAgLTI2LDYgKzI2LDkgQEAKICAqICA8bGludXgvdnRfYnVmZmVyLmg+IGhhcyBhbHJlYWR5IGRvbmUgdGhlIHJpZ2h0IGpvYiBmb3IgdXMuCiAgKi8KIAorI3VuZGVmIHNjcl93cml0ZXcKKyN1bmRlZiBzY3JfcmVhZHcKKwogc3RhdGljIGlubGluZSB2b2lkIHNjcl93cml0ZXcodTE2IHZhbCwgdm9sYXRpbGUgdTE2ICphZGRyKQogewogCSphZGRyID0gY3B1X3RvX2xlMTYodmFsKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmgKaW5kZXggOTNmMTc5Zi4uYWU1MGY4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmgKQEAgLTI5LDYgKzI5LDggQEAKIAogI2RlZmluZSBTTVBfQ0FDSEVfQllURVMgTDFfQ0FDSEVfQllURVMKIAorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKwogZXh0ZXJuIHZvaWQgZmx1c2hfZGF0YV9jYWNoZV9sb2NhbCh2b2lkICopOyAgLyogZmx1c2hlcyBsb2NhbCBkYXRhLWNhY2hlIG9ubHkgKi8KIGV4dGVybiB2b2lkIGZsdXNoX2luc3RydWN0aW9uX2NhY2hlX2xvY2FsKHZvaWQgKik7IC8qIGZsdXNoZXMgbG9jYWwgY29kZS1jYWNoZSBvbmx5ICovCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaAppbmRleCAwZGIwMGFkLi5iZTBjNzIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaApAQCAtMjk0LDIyICsyOTQsNiBAQAogdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCwgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpzcmMsIGludCBjb3VudCk7CiB2b2lkIG1lbWNweV90b2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBjb3VudCk7CiAKLS8qIFN1cHBvcnQgb2xkIGRyaXZlcnMgd2hpY2ggZG9uJ3QgaW9yZW1hcC4KLSAqIE5CIHRoaXMgaW50ZXJmYWNlIGlzIHNjaGVkdWxlZCB0byBkaXNhcHBlYXIgaW4gMi41Ci0gKi8KLQotI2RlZmluZSBfX2lzYV9hZGRyKHgpICh2b2lkIF9faW9tZW0gKikoRl9FWFRFTkQoMHhmYzAwMDAwMCkgfCAoeCkpCi0jZGVmaW5lIGlzYV9yZWFkYihhKSByZWFkYihfX2lzYV9hZGRyKGEpKQotI2RlZmluZSBpc2FfcmVhZHcoYSkgcmVhZHcoX19pc2FfYWRkcihhKSkKLSNkZWZpbmUgaXNhX3JlYWRsKGEpIHJlYWRsKF9faXNhX2FkZHIoYSkpCi0jZGVmaW5lIGlzYV93cml0ZWIoYixhKSB3cml0ZWIoKGIpLCBfX2lzYV9hZGRyKGEpKQotI2RlZmluZSBpc2Ffd3JpdGV3KGIsYSkgd3JpdGV3KChiKSwgX19pc2FfYWRkcihhKSkKLSNkZWZpbmUgaXNhX3dyaXRlbChiLGEpIHdyaXRlbCgoYiksIF9faXNhX2FkZHIoYSkpCi0jZGVmaW5lIGlzYV9tZW1zZXRfaW8oYSxiLGMpIG1lbXNldF9pbyhfX2lzYV9hZGRyKGEpLCAoYiksIChjKSkKLSNkZWZpbmUgaXNhX21lbWNweV9mcm9taW8oYSxiLGMpIG1lbWNweV9mcm9taW8oKGEpLCBfX2lzYV9hZGRyKGIpLCAoYykpCi0jZGVmaW5lIGlzYV9tZW1jcHlfdG9pbyhhLGIsYykgbWVtY3B5X3RvaW8oX19pc2FfYWRkcihhKSwgKGIpLCAoYykpCi0KLQogLyoKICAqIFhYWCAtIFdlIGRvbid0IGhhdmUgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbWlvKCkgeWV0LCBzbyB3ZSBjaGVhdCBoZXJlIGFuZCAKICAqIGp1c3QgY29weSBpdC4gVGhlIG5ldCBjb2RlIHdpbGwgdGhlbiBkbyB0aGUgY2hlY2tzdW0gbGF0ZXIuIFByZXNlbnRseSAKQEAgLTMxOCw4ICszMDIsNiBAQAogCiAjZGVmaW5lIGV0aF9pb19jb3B5X2FuZF9zdW0oc2tiLHNyYyxsZW4sdW51c2VkKSBcCiAgIG1lbWNweV9mcm9taW8oKHNrYiktPmRhdGEsKHNyYyksKGxlbikpCi0jZGVmaW5lIGlzYV9ldGhfaW9fY29weV9hbmRfc3VtKHNrYixzcmMsbGVuLHVudXNlZCkgXAotICBpc2FfbWVtY3B5X2Zyb21pbygoc2tiKS0+ZGF0YSwoc3JjKSwobGVuKSkKIAogLyogUG9ydC1zcGFjZSBJTyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcG9sbC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BvbGwuaAppbmRleCAxYzFkYTg2Li4yMGU0ZDAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wb2xsLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKaW5kZXggMTQ3YTM4ZC4uYmIzYzBhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCkBAIC04LDYgKzgsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKQEAgLTE3NiwyMCArMTc3LDI5IEBACiAgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgaXQgd2FzIG5vdCBAdS4KICAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgogICovCi0jZGVmaW5lIGF0b21pY19hZGRfdW5sZXNzKHYsIGEsIHUpCQkJXAotKHsJCQkJCQkJXAotCWludCBjLCBvbGQ7CQkJCQlcCi0JYyA9IGF0b21pY19yZWFkKHYpOwkJCQlcCi0JZm9yICg7OykgewkJCQkJXAotCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCVwKLQkJCWJyZWFrOwkJCQlcCi0JCW9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CVwKLQkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJXAotCQkJYnJlYWs7CQkJCVwKLQkJYyA9IG9sZDsJCQkJXAotCX0JCQkJCQlcCi0JYyAhPSAodSk7CQkJCQlcCi19KQorc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCit7CisJaW50IHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJTFdTWU5DX09OX1NNUAorIjE6CWx3YXJ4CSUwLDAsJTEJCSMgYXRvbWljX2FkZF91bmxlc3NcblwKKwljbXB3CTAsJTAsJTMgXG5cCisJYmVxLQkyZiBcblwKKwlhZGQJJTAsJTIsJTAgXG4iCisJUFBDNDA1X0VSUjc3KDAsJTIpCisiCXN0d2N4LgklMCwwLCUxIFxuXAorCWJuZS0JMWIgXG4iCisJSVNZTkNfT05fU01QCisiCXN1YmYJJTAsJTIsJTAgXG5cCisyOiIKKwk6ICI9JnIiICh0KQorCTogInIiICgmdi0+Y291bnRlciksICJyIiAoYSksICJyIiAodSkKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0ICE9IHU7Cit9CisKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKICNkZWZpbmUgYXRvbWljX3N1Yl9hbmRfdGVzdChhLCB2KQkoYXRvbWljX3N1Yl9yZXR1cm4oKGEpLCAodikpID09IDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKaW5kZXggNjQyMTA1NC4uZmU0NWY2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaApAQCAtMjAsNiArMjAsOCBAQAogI2RlZmluZSBQUENfRkVBVFVSRV9QT1dFUjVfUExVUwkJMHgwMDAyMDAwMAogI2RlZmluZSBQUENfRkVBVFVSRV9DRUxMCQkweDAwMDEwMDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX0JPT0tFCQkweDAwMDA4MDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX1NNVAkJCTB4MDAwMDQwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfSUNBQ0hFX1NOT09QCTB4MDAwMDIwMDAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0xMDAsMzggKzEwMiw0MCBAQAogI2RlZmluZSBDUFVfRlRSX05FRURfQ09IRVJFTlQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCiAjZGVmaW5lIENQVV9GVFJfTk9fQlRJQwkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwNDAwMDApCiAjZGVmaW5lIENQVV9GVFJfQklHX1BIWVMJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwODAwMDApCi0jZGVmaW5lIENQVV9GVFJfTk9EU0lTUkFMSUdOICAJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAxMDAwMDApCisjZGVmaW5lIENQVV9GVFJfTk9EU0lTUkFMSUdOCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMTAwMDAwKQogCiAjaWZkZWYgX19wb3dlcnBjNjRfXwogLyogQWRkIHRoZSA2NGIgcHJvY2Vzc29yIHVuaXF1ZSBmZWF0dXJlcyBpbiB0aGUgdG9wIGhhbGYgb2YgdGhlIHdvcmQgKi8KLSNkZWZpbmUgQ1BVX0ZUUl9TTEIgICAgICAgICAgIAkJQVNNX0NPTlNUKDB4MDAwMDAwMDEwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl8xNk1fUEFHRSAgICAgIAkJQVNNX0NPTlNUKDB4MDAwMDAwMDIwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9UTEJJRUwgICAgICAgICAJCUFTTV9DT05TVCgweDAwMDAwMDA0MDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfTk9FWEVDVVRFICAgICAJCUFTTV9DT05TVCgweDAwMDAwMDA4MDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfSUFCUiAgCQkJQVNNX0NPTlNUKDB4MDAwMDAwMjAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9NTUNSQSAgCQkJQVNNX0NPTlNUKDB4MDAwMDAwNDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9TTEIJCQlBU01fQ09OU1QoMHgwMDAwMDAwMTAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSXzE2TV9QQUdFCQlBU01fQ09OU1QoMHgwMDAwMDAwMjAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX1RMQklFTAkJCUFTTV9DT05TVCgweDAwMDAwMDA0MDAwMDAwMDApCisjZGVmaW5lIENQVV9GVFJfTk9FWEVDVVRFCQlBU01fQ09OU1QoMHgwMDAwMDAwODAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX0lBQlIJCQlBU01fQ09OU1QoMHgwMDAwMDAyMDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX01NQ1JBCQkJQVNNX0NPTlNUKDB4MDAwMDAwNDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9DVFJMCQkJQVNNX0NPTlNUKDB4MDAwMDAwODAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9TTVQgIAkJCUFTTV9DT05TVCgweDAwMDAwMTAwMDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFICAJQVNNX0NPTlNUKDB4MDAwMDAyMDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9TTVQJCQlBU01fQ09OU1QoMHgwMDAwMDEwMDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRQkJQVNNX0NPTlNUKDB4MDAwMDAyMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRQkJQVNNX0NPTlNUKDB4MDAwMDA0MDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9NTUNSQV9TSUhWCQlBU01fQ09OU1QoMHgwMDAwMDgwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0NJX0xBUkdFX1BBR0UJCUFTTV9DT05TVCgweDAwMDAxMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfUEFVU0VfWkVSTwkJQVNNX0NPTlNUKDB4MDAwMDIwMDAwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9QVVJSCQkJQVNNX0NPTlNUKDB4MDAwMDQwMDAwMDAwMDAwMCkKICNlbHNlCiAvKiBlbnN1cmUgb24gMzJiIHByb2Nlc3NvcnMgdGhlIGZsYWdzIGFyZSBhdmFpbGFibGUgZm9yIGNvbXBpbGluZyBidXQKICAqIGRvbid0IGRvIGFueXRoaW5nICovCi0jZGVmaW5lIENQVV9GVFJfU0xCICAgICAgICAgICAJCUFTTV9DT05TVCgweDApCi0jZGVmaW5lIENQVV9GVFJfMTZNX1BBR0UgICAgICAJCUFTTV9DT05TVCgweDApCi0jZGVmaW5lIENQVV9GVFJfVExCSUVMICAgICAgICAgCQlBU01fQ09OU1QoMHgwKQotI2RlZmluZSBDUFVfRlRSX05PRVhFQ1VURSAgICAgCQlBU01fQ09OU1QoMHgwKQotI2RlZmluZSBDUFVfRlRSX0lBQlIgIAkJCUFTTV9DT05TVCgweDApCi0jZGVmaW5lIENQVV9GVFJfTU1DUkEgIAkJCUFTTV9DT05TVCgweDApCisjZGVmaW5lIENQVV9GVFJfU0xCCQkJQVNNX0NPTlNUKDB4MCkKKyNkZWZpbmUgQ1BVX0ZUUl8xNk1fUEFHRQkJQVNNX0NPTlNUKDB4MCkKKyNkZWZpbmUgQ1BVX0ZUUl9UTEJJRUwJCQlBU01fQ09OU1QoMHgwKQorI2RlZmluZSBDUFVfRlRSX05PRVhFQ1VURQkJQVNNX0NPTlNUKDB4MCkKKyNkZWZpbmUgQ1BVX0ZUUl9JQUJSCQkJQVNNX0NPTlNUKDB4MCkKKyNkZWZpbmUgQ1BVX0ZUUl9NTUNSQQkJCUFTTV9DT05TVCgweDApCiAjZGVmaW5lIENQVV9GVFJfQ1RSTAkJCUFTTV9DT05TVCgweDApCi0jZGVmaW5lIENQVV9GVFJfU01UICAJCQlBU01fQ09OU1QoMHgwKQotI2RlZmluZSBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSAgCUFTTV9DT05TVCgweDApCisjZGVmaW5lIENQVV9GVFJfU01UCQkJQVNNX0NPTlNUKDB4MCkKKyNkZWZpbmUgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUJCUFTTV9DT05TVCgweDApCiAjZGVmaW5lIENQVV9GVFJfTE9DS0xFU1NfVExCSUUJCUFTTV9DT05TVCgweDApCiAjZGVmaW5lIENQVV9GVFJfTU1DUkFfU0lIVgkJQVNNX0NPTlNUKDB4MCkKICNkZWZpbmUgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFCQlBU01fQ09OU1QoMHgwKQorI2RlZmluZSBDUFVfRlRSX1BVUlIJCQlBU01fQ09OU1QoMHgwKQogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0xNTksOSArMTYzLDExIEBACiAjZW5kaWYKIAogLyogV2UgbmVlZCB0byBtYXJrIGFsbCBwYWdlcyBhcyBiZWluZyBjb2hlcmVudCBpZiB3ZSdyZSBTTVAgb3Igd2UKLSAqIGhhdmUgYSA3NFs0NV14IGFuZCBhbiBNUEMxMDcgaG9zdCBicmlkZ2UuCisgKiBoYXZlIGEgNzRbNDVdeCBhbmQgYW4gTVBDMTA3IGhvc3QgYnJpZGdlLiBBbHNvIDgzeHggcmVxdWlyZXMKKyAqIGl0IGZvciBQQ0kgInN0cmVhbWluZy9wcmVmZXRjaCIgdG8gd29yayBwcm9wZXJseS4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfTVBDMTBYX0JSSURHRSkKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX01QQzEwWF9CUklER0UpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19QUENfODN4eCkKICNkZWZpbmUgQ1BVX0ZUUl9DT01NT04gICAgICAgICAgICAgICAgICBDUFVfRlRSX05FRURfQ09IRVJFTlQKICNlbHNlCiAjZGVmaW5lIENQVV9GVFJfQ09NTU9OICAgICAgICAgICAgICAgICAgMApAQCAtMjc3LDcgKzI4Myw4IEBACiAJQ1BVX0ZUUlNfRzJfTEUgPSBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9NQVlCRV9DQU5fRE9aRSB8CiAJICAgIENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9NQVlCRV9DQU5fTkFQIHwgQ1BVX0ZUUl9IQVNfSElHSF9CQVRTLAogCUNQVV9GVFJTX0UzMDAgPSBDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9NQVlCRV9DQU5fRE9aRSB8Ci0JICAgIENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9NQVlCRV9DQU5fTkFQIHwgQ1BVX0ZUUl9IQVNfSElHSF9CQVRTLAorCSAgICBDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTUFZQkVfQ0FOX05BUCB8IENQVV9GVFJfSEFTX0hJR0hfQkFUUyB8CisJICAgIENQVV9GVFJfQ09NTU9OLAogCUNQVV9GVFJTX0NMQVNTSUMzMiA9IENQVV9GVFJfQ09NTU9OIHwgQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8CiAJICAgIENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9IUFRFX1RBQkxFLAogCUNQVV9GVFJTX1BPV0VSM18zMiA9IENQVV9GVFJfQ09NTU9OIHwgQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8CkBAIC0zMTMsNyArMzIwLDcgQEAKIAkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwKIAkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBDUFVfRlRSX0xPQ0tMRVNTX1RMQklFIHwKLQkgICAgQ1BVX0ZUUl9NTUNSQV9TSUhWLAorCSAgICBDUFVfRlRSX01NQ1JBX1NJSFYgfCBDUFVfRlRSX1BVUlIsCiAJQ1BVX0ZUUlNfQ0VMTCA9IENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8CiAJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8CiAJICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGltZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0aW1lLmgKaW5kZXggNmQ2OGFkNy4uYTIxMTg1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0aW1lLmgKQEAgLTEgKzEsMjAzIEBACisvKgorICogRGVmaW5pdGlvbnMgZm9yIG1lYXN1cmluZyBjcHV0aW1lIG9uIHBvd2VycGMgbWFjaGluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIElmIHdlIGhhdmUgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcsIHdlIG1lYXN1cmUgY3B1IHRpbWUgaW4KKyAqIHRoZSBzYW1lIHVuaXRzIGFzIHRoZSB0aW1lYmFzZS4gIE90aGVyd2lzZSB3ZSBtZWFzdXJlIGNwdSB0aW1lCisgKiBpbiBqaWZmaWVzIHVzaW5nIHRoZSBnZW5lcmljIGRlZmluaXRpb25zLgorICovCisKKyNpZm5kZWYgX19QT1dFUlBDX0NQVVRJTUVfSAorI2RlZmluZSBfX1BPV0VSUENfQ1BVVElNRV9ICisKKyNpZm5kZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisjZWxzZQorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKwordHlwZWRlZiB1NjQgY3B1dGltZV90OwordHlwZWRlZiB1NjQgY3B1dGltZTY0X3Q7CisKKyNkZWZpbmUgY3B1dGltZV96ZXJvCQkJKChjcHV0aW1lX3QpMCkKKyNkZWZpbmUgY3B1dGltZV9tYXgJCQkoKH4oKGNwdXRpbWVfdCkwKSA+PiAxKSAtIDEpCisjZGVmaW5lIGNwdXRpbWVfYWRkKF9fYSwgX19iKQkJKChfX2EpICsgIChfX2IpKQorI2RlZmluZSBjcHV0aW1lX3N1YihfX2EsIF9fYikJCSgoX19hKSAtICAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9kaXYoX19hLCBfX24pCQkoKF9fYSkgLyAgKF9fbikpCisjZGVmaW5lIGNwdXRpbWVfaGFsdmUoX19hKQkJKChfX2EpID4+IDEpCisjZGVmaW5lIGNwdXRpbWVfZXEoX19hLCBfX2IpCQkoKF9fYSkgPT0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfZ3QoX19hLCBfX2IpCQkoKF9fYSkgPiAgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfZ2UoX19hLCBfX2IpCQkoKF9fYSkgPj0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfbHQoX19hLCBfX2IpCQkoKF9fYSkgPCAgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfbGUoX19hLCBfX2IpCQkoKF9fYSkgPD0gKF9fYikpCisKKyNkZWZpbmUgY3B1dGltZTY0X3plcm8JCQkoKGNwdXRpbWU2NF90KTApCisjZGVmaW5lIGNwdXRpbWU2NF9hZGQoX19hLCBfX2IpCQkoKF9fYSkgKyAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV90b19jcHV0aW1lNjQoX19jdCkJKF9fY3QpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWUgPC0+IGppZmZpZXMKKyAqLworZXh0ZXJuIHU2NCBfX2NwdXRpbWVfamlmZmllc19mYWN0b3I7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjcHV0aW1lX3RvX2ppZmZpZXMoY29uc3QgY3B1dGltZV90IGN0KQoreworCXJldHVybiBtdWxoZHUoY3QsIF9fY3B1dGltZV9qaWZmaWVzX2ZhY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1dGltZV90IGppZmZpZXNfdG9fY3B1dGltZShjb25zdCB1bnNpZ25lZCBsb25nIGppZikKK3sKKwljcHV0aW1lX3QgY3Q7CisJdW5zaWduZWQgbG9uZyBzZWM7CisKKwkvKiBoYXZlIHRvIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3cgKi8KKwljdCA9IGppZiAlIEhaOworCXNlYyA9IGppZiAvIEhaOworCWlmIChjdCkgeworCQljdCAqPSB0Yl90aWNrc19wZXJfc2VjOworCQlkb19kaXYoY3QsIEhaKTsKKwl9CisJaWYgKHNlYykKKwkJY3QgKz0gKGNwdXRpbWVfdCkgc2VjICogdGJfdGlja3NfcGVyX3NlYzsKKwlyZXR1cm4gY3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGNwdXRpbWU2NF90b19qaWZmaWVzNjQoY29uc3QgY3B1dGltZV90IGN0KQoreworCXJldHVybiBtdWxoZHUoY3QsIF9fY3B1dGltZV9qaWZmaWVzX2ZhY3Rvcik7Cit9CisKKy8qCisgKiBDb252ZXJ0IGNwdXRpbWUgPC0+IG1pbGxpc2Vjb25kcworICovCitleHRlcm4gdTY0IF9fY3B1dGltZV9tc2VjX2ZhY3RvcjsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNwdXRpbWVfdG9fbXNlY3MoY29uc3QgY3B1dGltZV90IGN0KQoreworCXJldHVybiBtdWxoZHUoY3QsIF9fY3B1dGltZV9tc2VjX2ZhY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1dGltZV90IG1zZWNzX3RvX2NwdXRpbWUoY29uc3QgdW5zaWduZWQgbG9uZyBtcykKK3sKKwljcHV0aW1lX3QgY3Q7CisJdW5zaWduZWQgbG9uZyBzZWM7CisKKwkvKiBoYXZlIHRvIGJlIGEgbGl0dGxlIGNhcmVmdWwgYWJvdXQgb3ZlcmZsb3cgKi8KKwljdCA9IG1zICUgMTAwMDsKKwlzZWMgPSBtcyAvIDEwMDA7CisJaWYgKGN0KSB7CisJCWN0ICo9IHRiX3RpY2tzX3Blcl9zZWM7CisJCWRvX2RpdihjdCwgMTAwMCk7CisJfQorCWlmIChzZWMpCisJCWN0ICs9IChjcHV0aW1lX3QpIHNlYyAqIHRiX3RpY2tzX3Blcl9zZWM7CisJcmV0dXJuIGN0OworfQorCisvKgorICogQ29udmVydCBjcHV0aW1lIDwtPiBzZWNvbmRzCisgKi8KK2V4dGVybiB1NjQgX19jcHV0aW1lX3NlY19mYWN0b3I7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjcHV0aW1lX3RvX3NlY3MoY29uc3QgY3B1dGltZV90IGN0KQoreworCXJldHVybiBtdWxoZHUoY3QsIF9fY3B1dGltZV9zZWNfZmFjdG9yKTsKK30KKworc3RhdGljIGlubGluZSBjcHV0aW1lX3Qgc2Vjc190b19jcHV0aW1lKGNvbnN0IHVuc2lnbmVkIGxvbmcgc2VjKQoreworCXJldHVybiAoY3B1dGltZV90KSBzZWMgKiB0Yl90aWNrc19wZXJfc2VjOworfQorCisvKgorICogQ29udmVydCBjcHV0aW1lIDwtPiB0aW1lc3BlYworICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1dGltZV90b190aW1lc3BlYyhjb25zdCBjcHV0aW1lX3QgY3QsIHN0cnVjdCB0aW1lc3BlYyAqcCkKK3sKKwl1NjQgeCA9IGN0OworCXVuc2lnbmVkIGludCBmcmFjOworCisJZnJhYyA9IGRvX2Rpdih4LCB0Yl90aWNrc19wZXJfc2VjKTsKKwlwLT50dl9zZWMgPSB4OworCXggPSAodTY0KSBmcmFjICogMTAwMDAwMDAwMDsKKwlkb19kaXYoeCwgdGJfdGlja3NfcGVyX3NlYyk7CisJcC0+dHZfbnNlYyA9IHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1dGltZV90IHRpbWVzcGVjX3RvX2NwdXRpbWUoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpwKQoreworCWNwdXRpbWVfdCBjdDsKKworCWN0ID0gKHU2NCkgcC0+dHZfbnNlYyAqIHRiX3RpY2tzX3Blcl9zZWM7CisJZG9fZGl2KGN0LCAxMDAwMDAwMDAwKTsKKwlyZXR1cm4gY3QgKyAodTY0KSBwLT50dl9zZWMgKiB0Yl90aWNrc19wZXJfc2VjOworfQorCisvKgorICogQ29udmVydCBjcHV0aW1lIDwtPiB0aW1ldmFsCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHV0aW1lX3RvX3RpbWV2YWwoY29uc3QgY3B1dGltZV90IGN0LCBzdHJ1Y3QgdGltZXZhbCAqcCkKK3sKKwl1NjQgeCA9IGN0OworCXVuc2lnbmVkIGludCBmcmFjOworCisJZnJhYyA9IGRvX2Rpdih4LCB0Yl90aWNrc19wZXJfc2VjKTsKKwlwLT50dl9zZWMgPSB4OworCXggPSAodTY0KSBmcmFjICogMTAwMDAwMDsKKwlkb19kaXYoeCwgdGJfdGlja3NfcGVyX3NlYyk7CisJcC0+dHZfdXNlYyA9IHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgY3B1dGltZV90IHRpbWV2YWxfdG9fY3B1dGltZShjb25zdCBzdHJ1Y3QgdGltZXZhbCAqcCkKK3sKKwljcHV0aW1lX3QgY3Q7CisKKwljdCA9ICh1NjQpIHAtPnR2X3VzZWMgKiB0Yl90aWNrc19wZXJfc2VjOworCWRvX2RpdihjdCwgMTAwMDAwMCk7CisJcmV0dXJuIGN0ICsgKHU2NCkgcC0+dHZfc2VjICogdGJfdGlja3NfcGVyX3NlYzsKK30KKworLyoKKyAqIENvbnZlcnQgY3B1dGltZSA8LT4gY2xvY2tfdCAodW5pdHMgb2YgMS9VU0VSX0haIHNlY29uZHMpCisgKi8KK2V4dGVybiB1NjQgX19jcHV0aW1lX2Nsb2NrdF9mYWN0b3I7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjcHV0aW1lX3RvX2Nsb2NrX3QoY29uc3QgY3B1dGltZV90IGN0KQoreworCXJldHVybiBtdWxoZHUoY3QsIF9fY3B1dGltZV9jbG9ja3RfZmFjdG9yKTsKK30KKworc3RhdGljIGlubGluZSBjcHV0aW1lX3QgY2xvY2tfdF90b19jcHV0aW1lKGNvbnN0IHVuc2lnbmVkIGxvbmcgY2xrKQoreworCWNwdXRpbWVfdCBjdDsKKwl1bnNpZ25lZCBsb25nIHNlYzsKKworCS8qIGhhdmUgdG8gYmUgYSBsaXR0bGUgY2FyZWZ1bCBhYm91dCBvdmVyZmxvdyAqLworCWN0ID0gY2xrICUgVVNFUl9IWjsKKwlzZWMgPSBjbGsgLyBVU0VSX0haOworCWlmIChjdCkgeworCQljdCAqPSB0Yl90aWNrc19wZXJfc2VjOworCQlkb19kaXYoY3QsIFVTRVJfSFopOworCX0KKwlpZiAoc2VjKQorCQljdCArPSAoY3B1dGltZV90KSBzZWMgKiB0Yl90aWNrc19wZXJfc2VjOworCXJldHVybiBjdDsKK30KKworI2RlZmluZSBjcHV0aW1lNjRfdG9fY2xvY2tfdChjdCkJY3B1dGltZV90b19jbG9ja190KChjcHV0aW1lX3QpKGN0KSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyAqLworI2VuZGlmIC8qIF9fUE9XRVJQQ19DUFVUSU1FX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaC5oCmluZGV4IGIyNjNmYjIuLjUyMDc3NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiBzdHJ1Y3QgcGNpX2RldjsKK3N0cnVjdCBwY2lfYnVzOwogc3RydWN0IGRldmljZV9ub2RlOwogCiAjaWZkZWYgQ09ORklHX0VFSApAQCAtNjAsOCArNjEsOSBAQAogICogdG8gZmluaXNoIHRoZSBlZWggc2V0dXAgZm9yIHRoaXMgZGV2aWNlLgogICovCiB2b2lkIGVlaF9hZGRfZGV2aWNlX2Vhcmx5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKK3ZvaWQgZWVoX2FkZF9kZXZpY2VfbGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgZWVoX2FkZF9kZXZpY2VfdHJlZV9lYXJseShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci12b2lkIGVlaF9hZGRfZGV2aWNlX2xhdGUoc3RydWN0IHBjaV9kZXYgKik7Cit2b2lkIGVlaF9hZGRfZGV2aWNlX3RyZWVfbGF0ZShzdHJ1Y3QgcGNpX2J1cyAqKTsKIAogLyoqCiAgKiBlZWhfcmVtb3ZlX2RldmljZSAtIHVuZG8gRUVIIHNldHVwIGZvciB0aGUgaW5kaWNhdGVkIHBjaSBkZXZpY2UKQEAgLTEyMiw2ICsxMjQsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZWVoX2FkZF9kZXZpY2VfdHJlZV9lYXJseShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKSB7IH0KIAorc3RhdGljIGlubGluZSB2b2lkIGVlaF9hZGRfZGV2aWNlX3RyZWVfbGF0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKSB7IH0KKwogc3RhdGljIGlubGluZSB2b2lkIGVlaF9yZW1vdmVfYnVzX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH0KICNkZWZpbmUgRUVIX1BPU1NJQkxFX0VSUk9SKHZhbCwgdHlwZSkgKDApCiAjZGVmaW5lIEVFSF9JT19FUlJPUl9WQUxVRShzaXplKSAoLTFVTCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaAppbmRleCBmODA0YjM0Li5jZTM3ODgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zpcm13YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9maXJtd2FyZS5oCkBAIC00MSw2ICs0MSw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfTVVMVElUQ0UJKDFVTDw8MTkpCiAjZGVmaW5lIEZXX0ZFQVRVUkVfU1BMUEFSCSgxVUw8PDIwKQogI2RlZmluZSBGV19GRUFUVVJFX0lTRVJJRVMJKDFVTDw8MjEpCisjZGVmaW5lIEZXX0ZFQVRVUkVfTFBBUgkJKDFVTDw8MjIpCiAKIGVudW0gewogI2lmZGVmIENPTkZJR19QUEM2NApAQCAtNTEsMTAgKzUyLDEwIEBACiAJCUZXX0ZFQVRVUkVfTUlHUkFURSB8IEZXX0ZFQVRVUkVfUEVSRk1PTiB8IEZXX0ZFQVRVUkVfQ1JRIHwKIAkJRldfRkVBVFVSRV9WSU8gfCBGV19GRUFUVVJFX1JETUEgfCBGV19GRUFUVVJFX0xMQU4gfAogCQlGV19GRUFUVVJFX0JVTEsgfCBGV19GRUFUVVJFX1hEQUJSIHwgRldfRkVBVFVSRV9NVUxUSVRDRSB8Ci0JCUZXX0ZFQVRVUkVfU1BMUEFSLAorCQlGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiwKIAlGV19GRUFUVVJFX1BTRVJJRVNfQUxXQVlTID0gMCwKLQlGV19GRUFUVVJFX0lTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX0lTRVJJRVMsCi0JRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyA9IEZXX0ZFQVRVUkVfSVNFUklFUywKKwlGV19GRUFUVVJFX0lTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX0lTRVJJRVMgfCBGV19GRUFUVVJFX0xQQVIsCisJRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKIAlGV19GRUFUVVJFX1BPU1NJQkxFID0KICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKIAkJRldfRkVBVFVSRV9QU0VSSUVTX1BPU1NJQkxFIHwKQEAgLTg5LDE1ICs5MCw2IEBACiAJCShGV19GRUFUVVJFX1BPU1NJQkxFICYgcHBjNjRfZmlybXdhcmVfZmVhdHVyZXMgJiBmZWF0dXJlKTsKIH0KIAotI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIGxvbmcgdmFsOwotICAgIGNoYXIgKiBuYW1lOwotfSBmaXJtd2FyZV9mZWF0dXJlX3Q7Ci0KLWV4dGVybiBmaXJtd2FyZV9mZWF0dXJlX3QgZmlybXdhcmVfZmVhdHVyZXNfdGFibGVbXTsKLSNlbmRpZgotCiBleHRlcm4gdm9pZCBzeXN0ZW1fcmVzZXRfZndubWkodm9pZCk7CiBleHRlcm4gdm9pZCBtYWNoaW5lX2NoZWNrX2Z3bm1pKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAppbmRleCA4ZWI3ZTg1Li41MWY4N2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKQEAgLTQ3OSw2ICs0NzksMTAgQEAKIHN0cnVjdCBpcnFhY3Rpb247CiBzdHJ1Y3QgcHRfcmVnczsKIAorI2RlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKKworZXh0ZXJuIHZvaWQgX19kb19zb2Z0aXJxKHZvaWQpOworCiAjaWZkZWYgQ09ORklHX0lSUVNUQUNLUwogLyoKICAqIFBlci1jcHUgc3RhY2tzIGZvciBoYW5kbGluZyBoYXJkIGFuZCBzb2Z0IGludGVycnVwdHMuCkBAIC00OTEsOCArNDk1LDYgQEAKIGV4dGVybiBpbnQgY2FsbF9fX2RvX0lSUShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJc3RydWN0IHRocmVhZF9pbmZvICp0cCk7CiAKLSNkZWZpbmUgX19BUkNIX0hBU19ET19TT0ZUSVJRCi0KICNlbHNlCiAjZGVmaW5lIGlycV9jdHhfaW5pdCgpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9tZi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL21mLmgKaW5kZXggODU3ZTUyMC4uZWI4NTFhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL21mLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL21mLmgKQEAgLTQxLDE2ICs0MSwxMSBAQAogCQl1bnNpZ25lZCBjb3VudCwgTUZDb21wbGV0ZUhhbmRsZXIgaGRsciwgdm9pZCAqdXNlclRva2VuKTsKIAogZXh0ZXJuIHZvaWQgbWZfcG93ZXJfb2ZmKHZvaWQpOwotZXh0ZXJuIHZvaWQgbWZfcmVib290KHZvaWQpOworZXh0ZXJuIHZvaWQgbWZfcmVib290KGNoYXIgKmNtZCk7CiAKIGV4dGVybiB2b2lkIG1mX2Rpc3BsYXlfc3JjKHUzMiB3b3JkKTsKIGV4dGVybiB2b2lkIG1mX2Rpc3BsYXlfcHJvZ3Jlc3ModTE2IHZhbHVlKTsKLWV4dGVybiB2b2lkIG1mX2NsZWFyX3NyYyh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgbWZfaW5pdCh2b2lkKTsKIAotZXh0ZXJuIGludCBtZl9nZXRfcnRjKHN0cnVjdCBydGNfdGltZSAqdG0pOwotZXh0ZXJuIGludCBtZl9nZXRfYm9vdF9ydGMoc3RydWN0IHJ0Y190aW1lICp0bSk7Ci1leHRlcm4gaW50IG1mX3NldF9ydGMoc3RydWN0IHJ0Y190aW1lICp0bSk7Ci0KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfSVNFUklFU19NRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2tleGVjLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2tleGVjLmgKaW5kZXggYmRhMmYyMS4uNmEyYWYyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rZXhlYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMva2V4ZWMuaApAQCAtOTMsNyArOTMsOCBAQAogCQkJIm1meGVyICAlMFxuIgogCQkJInN0ZCAgICAlMCwgMjk2KCUyKVxuIgogCQkJOiAiPSZyIiAodG1wMSksICI9JnIiICh0bXAyKQotCQkJOiAiYiIgKG5ld3JlZ3MpKTsKKwkJCTogImIiIChuZXdyZWdzKQorCQkJOiAibWVtb3J5Iik7CiAJfQogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbG1iLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2xtYi5oCmluZGV4IGQzNTQ2YzQuLjBjNTg4MGY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2xtYi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbG1iLmgKQEAgLTE5LDggKzE5LDYgQEAKIAogI2RlZmluZSBNQVhfTE1CX1JFR0lPTlMgMTI4CiAKLSNkZWZpbmUgTE1CX0FMTE9DX0FOWVdIRVJFCTAKLQogc3RydWN0IGxtYl9wcm9wZXJ0eSB7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTQzLDIwICs0MSwxOSBAQAogCiBleHRlcm4gdm9pZCBfX2luaXQgbG1iX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgbG1iX2FuYWx5emUodm9pZCk7Ci1leHRlcm4gbG9uZyBfX2luaXQgbG1iX2FkZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiBsb25nIF9faW5pdCBsbWJfcmVzZXJ2ZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBsbWJfYWxsb2ModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgbG1iX2FsbG9jX2Jhc2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKLQkJCQkJICAgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gbG9uZyBfX2luaXQgbG1iX2FkZCh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gbG9uZyBfX2luaXQgbG1iX3Jlc2VydmUodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9hbGxvY19iYXNlKHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBtYXhfYWRkcik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgX19sbWJfYWxsb2NfYmFzZSh1bnNpZ25lZCBsb25nIHNpemUsCisJCXVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgbWF4X2FkZHIpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9waHlzX21lbV9zaXplKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0IGxtYl9lbmRfb2ZfRFJBTSh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBsbWJfYWJzX3RvX3BoeXModW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBfX2luaXQgbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgX19pbml0IGxtYl9lbmZvcmNlX21lbW9yeV9saW1pdCh1bnNpZ25lZCBsb25nIG1lbW9yeV9saW1pdCk7CiAKIGV4dGVybiB2b2lkIGxtYl9kdW1wX2FsbCh2b2lkKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW9faG9sZV9zdGFydDsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBsbWJfc2l6ZV9ieXRlcyhzdHJ1Y3QgbG1iX3JlZ2lvbiAqdHlwZSwgdW5zaWduZWQgbG9uZyByZWdpb25fbnIpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXUuaAppbmRleCBkMDk2ZDllLi4zMWY3MjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11LmgKQEAgLTExMiw2ICsxMTIsNyBAQAogfSBocHRlX3Q7CiAKIGV4dGVybiBocHRlX3QgKmh0YWJfYWRkcmVzczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGh0YWJfc2l6ZV9ieXRlczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGh0YWJfaGFzaF9tYXNrOwogCiAvKgpAQCAtMjM1LDcgKzIzNiw2IEBACiBleHRlcm4gdm9pZCBocHRlX2luaXRfbmF0aXZlKHZvaWQpOwogZXh0ZXJuIHZvaWQgaHB0ZV9pbml0X2xwYXIodm9pZCk7CiBleHRlcm4gdm9pZCBocHRlX2luaXRfaVNlcmllcyh2b2lkKTsKLWV4dGVybiB2b2lkIG1tX2luaXRfcHBjNjQodm9pZCk7CiAKIGV4dGVybiBsb25nIHBTZXJpZXNfbHBhcl9ocHRlX2luc2VydCh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhLCB1bnNpZ25lZCBsb25nIHBycG4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCmluZGV4IGM5YWRkOGYuLjQ0NjViOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFjYS5oCkBAIC01NCw3ICs1NCw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAKIAkvKgotCSAqIE1BR0lDOiB0aGUgc3BpbmxvY2sgZnVuY3Rpb25zIGluIGFyY2gvcHBjNjQvbGliL2xvY2tzLmMKKwkgKiBNQUdJQzogdGhlIHNwaW5sb2NrIGZ1bmN0aW9ucyBpbiBhcmNoL3Bvd2VycGMvbGliL2xvY2tzLmMgCiAJICogbG9hZCBsb2NrX3Rva2VuIGFuZCBwYWNhX2luZGV4IHdpdGggYSBzaW5nbGUgbHd6CiAJICogaW5zdHJ1Y3Rpb24uICBUaGV5IG11c3QgdHJhdmVsIHRvZ2V0aGVyIGFuZCBiZSBwcm9wZXJseQogCSAqIGFsaWduZWQuCkBAIC05Niw2ICs5NiwxMSBAQAogCXU2NCBzYXZlZF9yMTsJCQkvKiByMSBzYXZlIGZvciBSVEFTIGNhbGxzICovCiAJdTY0IHNhdmVkX21zcjsJCQkvKiBNU1Igc2F2ZWQgaGVyZSBieSBlbnRlcl9ydGFzICovCiAJdTggcHJvY19lbmFibGVkOwkJLyogaXJxIHNvZnQtZW5hYmxlIGZsYWcgKi8KKworCS8qIFN0dWZmIGZvciBhY2N1cmF0ZSB0aW1lIGFjY291bnRpbmcgKi8KKwl1NjQgdXNlcl90aW1lOwkJCS8qIGFjY3VtdWxhdGVkIHVzZXJtb2RlIFRCIHRpY2tzICovCisJdTY0IHN5c3RlbV90aW1lOwkJLyogYWNjdW11bGF0ZWQgc3lzdGVtIFRCIHRpY2tzICovCisJdTY0IHN0YXJ0cHVycjsJCQkvKiBQVVJSL1RCIHZhbHVlIHNuYXBzaG90ICovCiB9OwogCiBleHRlcm4gc3RydWN0IHBhY2Ffc3RydWN0IHBhY2FbXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BlcmNwdS5oCmluZGV4IGUzMTkyMmMuLjQ2NDMwMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZXJjcHUuaApAQCAtMjcsMTAgKzI3LDkgQEAKICNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKIGRvIHsJCQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAotCWZvciAoX19pID0gMDsgX19pIDwgTlJfQ1BVUzsgX19pKyspCQkJXAotCQlpZiAoY3B1X3Bvc3NpYmxlKF9faSkpCQkJCVwKLQkJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldChfX2kpLAlcCi0JCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJXAorCWZvcl9lYWNoX2NwdShfX2kpCQkJCQlcCisJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldChfX2kpLAkJXAorCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJCVwKIH0gd2hpbGUgKDApCiAKIGV4dGVybiB2b2lkIHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUtNGsuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS00ay5oCmluZGV4IGU5NTkwYzAuLmIyZTE4NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS00ay5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS00ay5oCkBAIC02Miw5ICs2MiwxNCBAQAogLyogc2hpZnQgdG8gcHV0IHBhZ2UgbnVtYmVyIGludG8gcHRlICovCiAjZGVmaW5lIFBURV9SUE5fU0hJRlQJKDE3KQogCi0jZGVmaW5lIF9fcmVhbF9wdGUoZSxwKQkJKChyZWFsX3B0ZV90KShlKSkKLSNkZWZpbmUgX19ycHRlX3RvX3B0ZShyKQkocikKLSNkZWZpbmUgX19ycHRlX3RvX2hpZHgocixpbmRleCkJKHB0ZV92YWwoKHIpKSA+PiAxMikKKyNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUworI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCSgocmVhbF9wdGVfdCl7KGUpfSkKKyNkZWZpbmUgX19ycHRlX3RvX3B0ZShyKQkoKHIpLnB0ZSkKKyNlbHNlCisjZGVmaW5lIF9fcmVhbF9wdGUoZSxwKQkJKGUpCisjZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKF9fcHRlKHIpKQorI2VuZGlmCisjZGVmaW5lIF9fcnB0ZV90b19oaWR4KHIsaW5kZXgpCShwdGVfdmFsKF9fcnB0ZV90b19wdGUocikpID4+IDEyKQogCiAjZGVmaW5lIHB0ZV9pdGVyYXRlX2hhc2hlZF9zdWJwYWdlcyhycHRlLCBwc2l6ZSwgdmEsIGluZGV4LCBzaGlmdCkgICAgICAgXAogCWRvIHsJCQkJCQkJICAgICAgICAgXApAQCAtODgsNCArOTMsNCBAQAogICAgICgoKGFkZHIpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVEIC0gMSkpKQogCiAjZGVmaW5lIHB1ZF9FUlJPUihlKSBcCi0JcHJpbnRrKCIlczolZDogYmFkIHBtZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHVkX3ZhbChlKSkKKwlwcmludGsoIiVzOiVkOiBiYWQgcHVkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdWRfdmFsKGUpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUuaAppbmRleCBlMzg5MzEzLi5lOWYxZjQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUuaApAQCAtMTg4LDkgKzE4OCwxMyBAQAogI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKChwdGVfdmFsKHgpPj5QVEVfUlBOX1NISUZUKSkpCiAjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQogCisjZGVmaW5lIFBNRF9CQURfQklUUwkJKFBURV9UQUJMRV9TSVpFLTEpCisjZGVmaW5lIFBVRF9CQURfQklUUwkJKFBNRF9UQUJMRV9TSVpFLTEpCisKICNkZWZpbmUgcG1kX3NldChwbWRwLCBwbWR2YWwpIAkocG1kX3ZhbCgqKHBtZHApKSA9IChwbWR2YWwpKQogI2RlZmluZSBwbWRfbm9uZShwbWQpCQkoIXBtZF92YWwocG1kKSkKLSNkZWZpbmUJcG1kX2JhZChwbWQpCQkocG1kX3ZhbChwbWQpID09IDApCisjZGVmaW5lCXBtZF9iYWQocG1kKQkJKCFpc19rZXJuZWxfYWRkcihwbWRfdmFsKHBtZCkpIFwKKwkJCQkgfHwgKHBtZF92YWwocG1kKSAmIFBNRF9CQURfQklUUykpCiAjZGVmaW5lCXBtZF9wcmVzZW50KHBtZCkJKHBtZF92YWwocG1kKSAhPSAwKQogI2RlZmluZQlwbWRfY2xlYXIocG1kcCkJCShwbWRfdmFsKCoocG1kcCkpID0gMCkKICNkZWZpbmUgcG1kX3BhZ2Vfa2VybmVsKHBtZCkJKHBtZF92YWwocG1kKSAmIH5QTURfTUFTS0VEX0JJVFMpCkBAIC0xOTgsNyArMjAyLDggQEAKIAogI2RlZmluZSBwdWRfc2V0KHB1ZHAsIHB1ZHZhbCkJKHB1ZF92YWwoKihwdWRwKSkgPSAocHVkdmFsKSkKICNkZWZpbmUgcHVkX25vbmUocHVkKQkJKCFwdWRfdmFsKHB1ZCkpCi0jZGVmaW5lIHB1ZF9iYWQocHVkKQkJKChwdWRfdmFsKHB1ZCkpID09IDApCisjZGVmaW5lCXB1ZF9iYWQocHVkKQkJKCFpc19rZXJuZWxfYWRkcihwdWRfdmFsKHB1ZCkpIFwKKwkJCQkgfHwgKHB1ZF92YWwocHVkKSAmIFBVRF9CQURfQklUUykpCiAjZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkJKHB1ZF92YWwocHVkKSAhPSAwKQogI2RlZmluZSBwdWRfY2xlYXIocHVkcCkJCShwdWRfdmFsKCoocHVkcCkpID0gMCkKICNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJKHB1ZF92YWwocHVkKSAmIH5QVURfTUFTS0VEX0JJVFMpCkBAIC00NjgsMTEgKzQ3Myw2IEBACiAKIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotI2RlZmluZSBodWdldGxiX2ZyZWVfcGdkX3JhbmdlKHRsYiwgYWRkciwgZW5kLCBmbG9vciwgY2VpbGluZykgXAotCWZyZWVfcGdkX3JhbmdlKHRsYiwgYWRkciwgZW5kLCBmbG9vciwgY2VpbGluZykKLSNlbmRpZgotCiAvKgogICogVGhpcyBnZXRzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGhhbmRsaW5nIGEgcGFnZSBmYXVsdCwgd2hlbgogICogdGhlIGtlcm5lbCBoYXMgcHV0IGEgbmV3IFBURSBpbnRvIHRoZSBwYWdlIHRhYmxlIGZvciB0aGUgcHJvY2Vzcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcG9sbC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wb2xsLmgKaW5kZXggZWRkMjA1NC4uOWM3ZDEyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wb2xsLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYy1wY2kuaAppbmRleCBmODA0ODJjLi5jZjc5YmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYy1wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYy1wY2kuaApAQCAtMzgsNiArMzgsNyBAQAogCiB2b2lkIHBjaV9kZXZzX3BoYl9pbml0KHZvaWQpOwogdm9pZCBwY2lfZGV2c19waGJfaW5pdF9keW5hbWljKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKTsKK2ludCBzZXR1cF9waGIoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKTsKIHZvaWQgX19kZXZpbml0IHNjYW5fcGhiKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CiAKIC8qIEZyb20gcnRhc19wY2kuaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaAppbmRleCBhYjg2ODhkLi5kZDFjMGE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaApAQCAtMTUsNiArMTUsNDggQEAKICNkZWZpbmUgU1pMCQkJKEJJVFNfUEVSX0xPTkcvOCkKIAogLyoKKyAqIFN0dWZmIGZvciBhY2N1cmF0ZSBDUFUgdGltZSBhY2NvdW50aW5nLgorICogVGhlc2UgbWFjcm9zIGhhbmRsZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIHVzZXIgYW5kIHN5c3RlbSBzdGF0ZQorICogaW4gZXhjZXB0aW9uIGVudHJ5IGFuZCBleGl0IGFuZCBhY2N1bXVsYXRlIHRpbWUgdG8gdGhlCisgKiB1c2VyX3RpbWUgYW5kIHN5c3RlbV90aW1lIGZpZWxkcyBpbiB0aGUgcGFjYS4KKyAqLworCisjaWZuZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisjZGVmaW5lIEFDQ09VTlRfQ1BVX1VTRVJfRU5UUlkocmEsIHJiKQorI2RlZmluZSBBQ0NPVU5UX0NQVV9VU0VSX0VYSVQocmEsIHJiKQorI2Vsc2UKKyNkZWZpbmUgQUNDT1VOVF9DUFVfVVNFUl9FTlRSWShyYSwgcmIpCQkJCQlcCisJYmVxCTJmOwkJCS8qIGlmIGZyb20ga2VybmVsIG1vZGUgKi8JXAorQkVHSU5fRlRSX1NFQ1RJT047CQkJCQkJCVwKKwltZnNwcglyYSxTUFJOX1BVUlI7CQkvKiBnZXQgcHJvY2Vzc29yIHV0aWwuIHJlZyAqLwlcCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9QVVJSKTsJCQkJCVwKK0JFR0lOX0ZUUl9TRUNUSU9OOwkJCQkJCQlcCisJbWZ0YglyYTsJCQkvKiBvciBnZXQgVEIgaWYgbm8gUFVSUiAqLwlcCitFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9QVVJSKTsJCQkJCVwKKwlsZAlyYixQQUNBX1NUQVJUUFVSUihyMTMpOwkJCQlcCisJc3RkCXJhLFBBQ0FfU1RBUlRQVVJSKHIxMyk7CQkJCQlcCisJc3ViZglyYixyYixyYTsJCS8qIHN1YnRyYWN0IHN0YXJ0IHZhbHVlICovCVwKKwlsZAlyYSxQQUNBX1VTRVJfVElNRShyMTMpOwkJCQkJXAorCWFkZAlyYSxyYSxyYjsJCS8qIGFkZCBvbiB0byB1c2VyIHRpbWUgKi8JXAorCXN0ZAlyYSxQQUNBX1VTRVJfVElNRShyMTMpOwkJCQkJXAorMjoKKworI2RlZmluZSBBQ0NPVU5UX0NQVV9VU0VSX0VYSVQocmEsIHJiKQkJCQkJXAorQkVHSU5fRlRSX1NFQ1RJT047CQkJCQkJCVwKKwltZnNwcglyYSxTUFJOX1BVUlI7CQkvKiBnZXQgcHJvY2Vzc29yIHV0aWwuIHJlZyAqLwlcCitFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9QVVJSKTsJCQkJCVwKK0JFR0lOX0ZUUl9TRUNUSU9OOwkJCQkJCQlcCisJbWZ0YglyYTsJCQkvKiBvciBnZXQgVEIgaWYgbm8gUFVSUiAqLwlcCitFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9QVVJSKTsJCQkJCVwKKwlsZAlyYixQQUNBX1NUQVJUUFVSUihyMTMpOwkJCQlcCisJc3RkCXJhLFBBQ0FfU1RBUlRQVVJSKHIxMyk7CQkJCQlcCisJc3ViZglyYixyYixyYTsJCS8qIHN1YnRyYWN0IHN0YXJ0IHZhbHVlICovCVwKKwlsZAlyYSxQQUNBX1NZU1RFTV9USU1FKHIxMyk7CQkJCVwKKwlhZGQJcmEscmEscmI7CQkvKiBhZGQgb24gdG8gdXNlciB0aW1lICovCVwKKwlzdGQJcmEsUEFDQV9TWVNURU1fVElNRShyMTMpOworI2VuZGlmCisKKy8qCiAgKiBNYWNyb3MgZm9yIHN0b3JpbmcgcmVnaXN0ZXJzIGludG8gYW5kIGxvYWRpbmcgcmVnaXN0ZXJzIGZyb20KICAqIGV4Y2VwdGlvbiBmcmFtZXMuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb2Nlc3Nvci5oCmluZGV4IDQxNWZhMzkuLjFjNjRhMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9jZXNzb3IuaApAQCAtNTIsNyArNTIsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgcGxhdGZvcm1faXNfcHNlcmllcygpCShfbWFjaGluZSA9PSBQTEFURk9STV9QU0VSSUVTIHx8IFwKIAkJCQkgX21hY2hpbmUgPT0gUExBVEZPUk1fUFNFUklFU19MUEFSKQotI2RlZmluZSBwbGF0Zm9ybV9pc19scGFyKCkJKCEhKF9tYWNoaW5lICYgUExBVEZPUk1fTFBBUikpCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfTVVMVElQTEFURk9STSkKIGV4dGVybiBpbnQgX21hY2hpbmU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCmluZGV4IGNiZDI5N2YuLjc4MmUxM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCkBAIC0xMjYsOCArMTI2LDE0IEBACiAvKiBOZXcgc3R5bGUgbm9kZSBsb29rdXAgKi8KIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2ZpbmRfbm9kZV9ieV9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZnJvbSwKIAljb25zdCBjaGFyICpuYW1lKTsKKyNkZWZpbmUgZm9yX2VhY2hfbm9kZV9ieV9uYW1lKGRuLCBuYW1lKSBcCisJZm9yIChkbiA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsIG5hbWUpOyBkbjsgXAorCSAgICAgZG4gPSBvZl9maW5kX25vZGVfYnlfbmFtZShkbiwgbmFtZSkpCiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfdHlwZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmZyb20sCiAJY29uc3QgY2hhciAqdHlwZSk7CisjZGVmaW5lIGZvcl9lYWNoX25vZGVfYnlfdHlwZShkbiwgdHlwZSkgXAorCWZvciAoZG4gPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCB0eXBlKTsgZG47IFwKKwkgICAgIGRuID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZG4sIHR5cGUpKQogZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpmcm9tLAogCWNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmNvbXBhdCk7CiBleHRlcm4gc3RydWN0IGRldmljZV9ub2RlICpvZl9maW5kX25vZGVfYnlfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCmluZGV4IDEyZWNjOWIuLjcyYmZlM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaApAQCAtNjE1LDI3ICs2MTUsOSBAQAogI2RlZmluZSBwcm9jX3RyYXAoKQlhc20gdm9sYXRpbGUoInRyYXAiKQogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci1zdGF0aWMgaW5saW5lIHZvaWQgcHBjNjRfcnVubGF0Y2hfb24odm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGN0cmw7CiAKLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ1RSTCkpIHsKLQkJY3RybCA9IG1mc3ByKFNQUk5fQ1RSTEYpOwotCQljdHJsIHw9IENUUkxfUlVOTEFUQ0g7Ci0JCW10c3ByKFNQUk5fQ1RSTFQsIGN0cmwpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHBwYzY0X3J1bmxhdGNoX29mZih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3RybDsKLQotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DVFJMKSkgewotCQljdHJsID0gbWZzcHIoU1BSTl9DVFJMRik7Ci0JCWN0cmwgJj0gfkNUUkxfUlVOTEFUQ0g7Ci0JCW10c3ByKFNQUk5fQ1RSTFQsIGN0cmwpOwotCX0KLX0KK2V4dGVybiB2b2lkIHBwYzY0X3J1bmxhdGNoX29uKHZvaWQpOworZXh0ZXJuIHZvaWQgcHBjNjRfcnVubGF0Y2hfb2ZmKHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzY29tOTcwX3JlYWQodW5zaWduZWQgaW50IGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgc2NvbTk3MF93cml0ZSh1bnNpZ25lZCBpbnQgYWRkcmVzcywgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CkBAIC02NDUsMTUgKzYyNyw2IEBACiAjZGVmaW5lIF9fZ2V0X1NQKCkJKHt1bnNpZ25lZCBsb25nIHNwOyBcCiAJCQlhc20gdm9sYXRpbGUoIm1yICUwLDEiOiAiPXIiIChzcCkpOyBzcDt9KQogCi0jZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2RlZmluZSBSVU5MQVRDSF9PTihSRUcpCQkJXAotQkVHSU5fRlRSX1NFQ1RJT04JCQkJXAotCW1mc3ByCShSRUcpLFNQUk5fQ1RSTEY7CQlcCi0Jb3JpCShSRUcpLChSRUcpLENUUkxfUlVOTEFUQ0g7CVwKLQltdHNwcglTUFJOX0NUUkxULChSRUcpOwkJXAotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ1RSTCkKLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcndzZW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcndzZW0uaAppbmRleCA3OWJhZTQ5Li4yYzJmZTk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3J3c2VtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yd3NlbS5oCkBAIC00LDcgKzQsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogLyoKLSAqIGluY2x1ZGUvYXNtLXBwYzY0L3J3c2VtLmg6IFIvVyBzZW1hcGhvcmVzIGZvciBQUEMgdXNpbmcgdGhlIHN0dWZmCisgKiBpbmNsdWRlL2FzbS1wb3dlcnBjL3J3c2VtLmg6IFIvVyBzZW1hcGhvcmVzIGZvciBQUEMgdXNpbmcgdGhlIHN0dWZmCiAgKiBpbiBsaWIvcndzZW0uYy4gIEFkYXB0ZWQgbGFyZ2VseSBmcm9tIGluY2x1ZGUvYXNtLWkzODYvcndzZW0uaAogICogYnkgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5bmNoLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5bmNoLmgKaW5kZXggYzkwZDlkOS4uMmNkYTNjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zeW5jaC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3luY2guaApAQCAtMTUsNyArMTUsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIElTWU5DX09OX1NNUAkiXG5cdGlzeW5jIgorI2RlZmluZSBJU1lOQ19PTl9TTVAJIlxuXHRpc3luY1xuIgogI2RlZmluZSBMV1NZTkNfT05fU01QCV9fc3RyaW5naWZ5KExXU1lOQykgIlxuIgogI2Vsc2UKICNkZWZpbmUgSVNZTkNfT05fU01QCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaAppbmRleCBkOWJmNTM2Li42NWY1YTdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKQEAgLTE3MSw2ICsxNzEsOCBAQAogCiAvKiBFQkNESUMgLT4gQVNDSUkgY29udmVyc2lvbiBmb3IgWzAtOUEtWl0gb24gaVNlcmllcyAqLwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZTJhKHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIqIHN0cm5lMmEodW5zaWduZWQgY2hhciAqZGVzdCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBzaXplX3Qgbik7CiAKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIGV4dGVybiB2b2lkIG5vdGVfc2NzaV9ob3N0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqLCB2b2lkICopOwpAQCAtNDI0LDUgKzQyNiw5IEBACiAJY3JlYXRlX2JyYW5jaChhZGRyLCBmdW5jX2FkZHIsIEJSQU5DSF9TRVRfTElOSyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworZXh0ZXJuIHZvaWQgYWNjb3VudF9zeXN0ZW1fdnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICopOworI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmgKaW5kZXggYzA0NGVjMS4uZmZjNzQ2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaApAQCAtMzcsNyArMzcsNiBAQAogCWludAkJcHJlZW1wdF9jb3VudDsJCS8qIDAgPT4gcHJlZW1wdGFibGUsCiAJCQkJCQkgICA8MCA9PiBCVUcgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jayByZXN0YXJ0X2Jsb2NrOwotCXZvaWQgX191c2VyICpudmdwcnNfZnJhbWU7CiAJLyogbG93IGxldmVsIGZsYWdzIC0gaGFzIGF0b21pYyBvcGVyYXRpb25zIGRvbmUgb24gaXQgKi8KIAl1bnNpZ25lZCBsb25nCWZsYWdzIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiB9OwpAQCAtMTEzLDE0ICsxMTIsMTMgQEAKICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTQJLyogdHJ1ZSBpZiBwb2xsX2lkbGUoKSBpcyBwb2xsaW5nCiAJCQkJCSAgIFRJRl9ORUVEX1JFU0NIRUQgKi8KICNkZWZpbmUgVElGXzMyQklUCQk1CS8qIDMyIGJpdCBiaW5hcnkgKi8KLS8qICNkZWZpbmUgU1BBUkUJCTYgKi8KKyNkZWZpbmUgVElGX1JVTkxBVENICQk2CS8qIElzIHRoZSBydW5sYXRjaCBlbmFibGVkPyAqLwogI2RlZmluZSBUSUZfQUJJX1BFTkRJTkcJCTcJLyogMzIvNjQgYml0IHN3aXRjaCBuZWVkZWQgKi8KICNkZWZpbmUgVElGX1NZU0NBTExfQVVESVQJOAkvKiBzeXNjYWxsIGF1ZGl0aW5nIGFjdGl2ZSAqLwogI2RlZmluZSBUSUZfU0lOR0xFU1RFUAkJOQkvKiBzaW5nbGVzdGVwcGluZyBhY3RpdmUgKi8KICNkZWZpbmUgVElGX01FTURJRQkJMTAKICNkZWZpbmUgVElGX1NFQ0NPTVAJCTExCS8qIHNlY3VyZSBjb21wdXRpbmcgKi8KICNkZWZpbmUgVElGX1JFU1RPUkVBTEwJCTEyCS8qIFJlc3RvcmUgYWxsIHJlZ3MgKGltcGxpZXMgTk9FUlJPUikgKi8KLSNkZWZpbmUgVElGX1NBVkVfTlZHUFJTCQkxMwkvKiBTYXZlIHIxNC1yMzEgaW4gc2lnbmFsIGZyYW1lICovCiAjZGVmaW5lIFRJRl9OT0VSUk9SCQkxNAkvKiBGb3JjZSBzdWNjZXNzZnVsIHN5c2NhbGwgcmV0dXJuICovCiAjZGVmaW5lIFRJRl9SRVNUT1JFX1NJR01BU0sJMTUJLyogUmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwgKi8KIApAQCAtMTMxLDIxICsxMjksMTkgQEAKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCiAjZGVmaW5lIF9USUZfUE9MTElOR19OUkZMQUcJKDE8PFRJRl9QT0xMSU5HX05SRkxBRykKICNkZWZpbmUgX1RJRl8zMkJJVAkJKDE8PFRJRl8zMkJJVCkKLS8qICNkZWZpbmUgX1NQQVJFCQkoMTw8U1BBUkUpICovCisjZGVmaW5lIF9USUZfUlVOTEFUQ0gJCSgxPDxUSUZfUlVOTEFUQ0gpCiAjZGVmaW5lIF9USUZfQUJJX1BFTkRJTkcJKDE8PFRJRl9BQklfUEVORElORykKICNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKICNkZWZpbmUgX1RJRl9TSU5HTEVTVEVQCQkoMTw8VElGX1NJTkdMRVNURVApCiAjZGVmaW5lIF9USUZfU0VDQ09NUAkJKDE8PFRJRl9TRUNDT01QKQogI2RlZmluZSBfVElGX1JFU1RPUkVBTEwJCSgxPDxUSUZfUkVTVE9SRUFMTCkKLSNkZWZpbmUgX1RJRl9TQVZFX05WR1BSUwkoMTw8VElGX1NBVkVfTlZHUFJTKQogI2RlZmluZSBfVElGX05PRVJST1IJCSgxPDxUSUZfTk9FUlJPUikKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDE8PFRJRl9SRVNUT1JFX1NJR01BU0spCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UX09SX0EJKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVR8X1RJRl9TRUNDT01QKQogCiAjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sJKF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfU0lHUEVORElORyB8IFwKLQkJCQkgX1RJRl9ORUVEX1JFU0NIRUQgfCBfVElGX1JFU1RPUkVBTEwgfCBcCi0JCQkJIF9USUZfUkVTVE9SRV9TSUdNQVNLKQotI2RlZmluZSBfVElGX1BFUlNZU0NBTExfTUFTSwkoX1RJRl9SRVNUT1JFQUxMfF9USUZfTk9FUlJPUnxfVElGX1NBVkVfTlZHUFJTKQorCQkJCSBfVElGX05FRURfUkVTQ0hFRCB8IF9USUZfUkVTVE9SRV9TSUdNQVNLKQorI2RlZmluZSBfVElGX1BFUlNZU0NBTExfTUFTSwkoX1RJRl9SRVNUT1JFQUxMfF9USUZfTk9FUlJPUikKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWUuaAppbmRleCBiYWRkYzlhLi45MTIxMThkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWUuaApAQCAtNDEsNiArNDEsNyBAQAogCiBleHRlcm4gdm9pZCBnZW5lcmljX2NhbGlicmF0ZV9kZWNyKHZvaWQpOwogZXh0ZXJuIHZvaWQgd2FrZXVwX2RlY3JlbWVudGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgc25hcHNob3RfdGltZWJhc2Uodm9pZCk7CiAKIC8qIFNvbWUgc2FuZSBkZWZhdWx0czogMTI1IE1IeiB0aW1lYmFzZSwgMUdIeiBwcm9jZXNzb3IgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHBwY19wcm9jX2ZyZXE7CkBAIC0yMjEsNSArMjIyLDE5IEBACiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY3B1X3VzYWdlLCBjcHVfdXNhZ2VfYXJyYXkpOwogCisjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKK2V4dGVybiB2b2lkIGFjY291bnRfcHJvY2Vzc192dGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisjZWxzZQorI2RlZmluZSBhY2NvdW50X3Byb2Nlc3NfdnRpbWUodHNrKQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HKSAmJiBkZWZpbmVkKENPTkZJR19QUENfU1BMUEFSKQorZXh0ZXJuIHZvaWQgY2FsY3VsYXRlX3N0ZWFsX3RpbWUodm9pZCk7CitleHRlcm4gdm9pZCBzbmFwc2hvdF90aW1lYmFzZXModm9pZCk7CisjZWxzZQorI2RlZmluZSBjYWxjdWxhdGVfc3RlYWxfdGltZSgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzbmFwc2hvdF90aW1lYmFzZXMoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fUFBDNjRfVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaGFycmllci5oIGIvaW5jbHVkZS9hc20tcHBjL2hhcnJpZXIuaAppbmRleCAzNmM3M2FiLi43YWNkN2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaGFycmllci5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9oYXJyaWVyLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICogYXJjaC9wcGMva2VybmVsL2hhcnJpZXIuaAotICoKICAqIERlZmluaXRpb25zIGZvciBNb3Rvcm9sYSBNQ0cgSGFycmllciBOb3J0aCBCcmlkZ2UgJiBNZW1vcnkgY29udHJvbGxlcgogICoKICAqIEF1dGhvcjogRGFsZSBGYXJuc3dvcnRoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtNDR4LmggYi9pbmNsdWRlL2FzbS1wcGMvaWJtNDR4LmgKaW5kZXggZjgzNTA2Ni4uM2FjYzM4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2libTQ0eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pYm00NHguaApAQCAtMjksNyArMjksNyBAQAogCiAvKiBUTEIgZW50cnkgb2Zmc2V0L3NpemUgdXNlZCBmb3IgcGlubmluZyBrZXJuZWwgbG93bWVtICovCiAjZGVmaW5lIFBQQzQ0eF9QSU5fU0hJRlQJMjgKLSNkZWZpbmUgUFBDNDR4X1BJTl9TSVpFCQkoMSA8PCBQUEM0NHhfUElOX1NISUZUKQorI2RlZmluZSBQUENfUElOX1NJWkUJCSgxIDw8IFBQQzQ0eF9QSU5fU0hJRlQpCiAKIC8qIExvd2VzdCBUTEIgc2xvdCBjb25zdW1lZCBieSB0aGUgZGVmYXVsdCBwaW5uZWQgVExCcyAqLwogI2RlZmluZSBQUEM0NHhfTE9XX1NMT1QJCTYzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtNHh4LmggYi9pbmNsdWRlL2FzbS1wcGMvaWJtNHh4LmgKaW5kZXggNmMyOGFlNy4uMzhmOTk3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2libTR4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pYm00eHguaApAQCAtNTEsNiArNTEsMTAgQEAKICNpbmNsdWRlIDxwbGF0Zm9ybXMvNHh4L3hpbGlueF9tbDMwMC5oPgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19YSUxJTlhfTUw0MDMpCisjaW5jbHVkZSA8cGxhdGZvcm1zLzR4eC94aWxpbnhfbWw0MDMuaD4KKyNlbmRpZgorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaWZkZWYgQ09ORklHXzQweApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2lvLmggYi9pbmNsdWRlL2FzbS1wcGMvaW8uaAppbmRleCBkZjljZjZlLi5iOTE5ZDhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW8uaApAQCAtNTc1LDQgKzU3NSwxMSBAQAogICovCiAjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCiAKKy8qIGFjY2VzcyBwb3J0cyAqLworI2RlZmluZSBzZXRiaXRzMzIoX2FkZHIsIF92KSBvdXRfYmUzMigoX2FkZHIpLCBpbl9iZTMyKF9hZGRyKSB8ICAoX3YpKQorI2RlZmluZSBjbHJiaXRzMzIoX2FkZHIsIF92KSBvdXRfYmUzMigoX2FkZHIpLCBpbl9iZTMyKF9hZGRyKSAmIH4oX3YpKQorCisjZGVmaW5lIHNldGJpdHMxNihfYWRkciwgX3YpIG91dF9iZTE2KChfYWRkciksIGluX2JlMTYoX2FkZHIpIHwgIChfdikpCisjZGVmaW5lIGNscmJpdHMxNihfYWRkciwgX3YpIG91dF9iZTE2KChfYWRkciksIGluX2JlMTYoX2FkZHIpICYgfihfdikpCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcHBjL21hY2hkZXAuaAppbmRleCAzOTIwMGRlLi5hM2U4YTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbWFjaGRlcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tYWNoZGVwLmgKQEAgLTE1NCwxOSArMTU0LDYgQEAKIAogZXh0ZXJuIHZvaWQgc2V0dXBfcGNpX3B0cnModm9pZCk7CiAKLS8qCi0gKiBQb3dlciBtYWNpbnRvc2hlcyBoYXZlIGVpdGhlciBhIENVREEgb3IgYSBQTVUgY29udHJvbGxpbmcKLSAqIHN5c3RlbSByZXNldCwgcG93ZXIsIE5WUkFNLCBSVEMuCi0gKi8KLXR5cGVkZWYgZW51bSBzeXNfY3RybGVyX2tpbmQgewotCVNZU19DVFJMRVJfVU5LTk9XTiA9IDAsCi0JU1lTX0NUUkxFUl9DVURBID0gMSwKLQlTWVNfQ1RSTEVSX1BNVSA9IDIsCi0JU1lTX0NUUkxFUl9TTVUgPSAzLAotfSBzeXNfY3RybGVyX3Q7Ci0KLWV4dGVybiBzeXNfY3RybGVyX3Qgc3lzX2N0cmxlcjsKLQogI2lmZGVmIENPTkZJR19TTVAKIHN0cnVjdCBzbXBfb3BzX3QgewogCXZvaWQgICgqbWVzc2FnZV9wYXNzKShpbnQgdGFyZ2V0LCBpbnQgbXNnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tcGMxMHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGMxMHguaAppbmRleCA3N2IxZTA5Li5iMzBhNmEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjMTB4LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21wYzEweC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGFyY2gvcHBjL2tlcm5lbC9tcGMxMHguaAotICoKICAqIENvbW1vbiByb3V0aW5lcyBmb3IgdGhlIE1vdG9yb2xhIFNQUyBNUEMxMDYvODI0MC8xMDcgSG9zdCBicmlkZ2UvTWVtCiAgKiBjdGxyL0VQSUMvZXRjLgogICoKQEAgLTE2NSw2ICsxNjMsNyBAQAogCU1QQzEwWF9ETUExLAogCU1QQzEwWF9VQVJUMCwKIAlNUEMxMFhfVUFSVDEsCisJTlVNX1BQQ19TWVNfREVWUywKIH07CiAKIGludCBtcGMxMHhfYnJpZGdlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzUyeHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM1Mnh4LmgKaW5kZXggYTA1NWUwNy4uNjE2N2Y3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzUyeHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjNTJ4eC5oCkBAIC02MCw2ICs2MCw3IEBACiAJTVBDNTJ4eF9BVEEsCiAJTVBDNTJ4eF9JMkMxLAogCU1QQzUyeHhfSTJDMiwKKwlOVU1fUFBDX1NZU19ERVZTLAogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzgyNjAuaAppbmRleCAzMjE0NTI2Li42YmE2OWE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwLmgKQEAgLTgzLDYgKzgzLDcgQEAKIAlNUEM4Mnh4X0NQTV9TTUMyLAogCU1QQzgyeHhfQ1BNX1VTQiwKIAlNUEM4Mnh4X1NFQzEsCisJTlVNX1BQQ19TWVNfREVWUywKIH07CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzgzeHguaAppbmRleCA3Y2RmNjBmLi4zYzIzZmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmgKQEAgLTEwOCw2ICsxMDgsNyBAQAogCU1QQzgzeHhfVVNCMl9EUiwKIAlNUEM4M3h4X1VTQjJfTVBILAogCU1QQzgzeHhfTURJTywKKwlOVU1fUFBDX1NZU19ERVZTLAogfTsKIAogI2VuZGlmIC8qIENPTkZJR184M3h4ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjODV4eC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzg1eHguaAppbmRleCBjOGE5NmFhLi5mNDcwMDJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjODV4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4NXh4LmgKQEAgLTEzOSw2ICsxMzksNyBAQAogCU1QQzg1eHhfZVRTRUM0LAogCU1QQzg1eHhfSUlDMiwKIAlNUEM4NXh4X01ESU8sCisJTlVNX1BQQ19TWVNfREVWUywKIH07CiAKIC8qIEludGVybmFsIGludGVycnVwdHMgYXJlIGFsbCBMZXZlbCBTZW5zaXRpdmUsIGFuZCBQb3NpdGl2ZSBQb2xhcml0eSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oCmluZGV4IDQ2ZjE1OWMuLjM1MTVhN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmgKQEAgLTExMSw4ICsxMTEsMTEgQEAKIAlNUEM4eHhfQ1BNX1NNQzEsCiAJTVBDOHh4X0NQTV9TTUMyLAogCU1QQzh4eF9DUE1fVVNCLAorCU5VTV9QUENfU1lTX0RFVlMsCiB9OwogCisjZGVmaW5lIFBQQ19QSU5fU0laRQkoMjQgKiAxMDI0ICogMTAyNCkJLyogMjRNYnl0ZXMgb2YgZGF0YSBwaW5uZWQgKi8KKwogI2lmbmRlZiBCT0FSRF9DSElQX05BTUUKICNkZWZpbmUgQk9BUkRfQ0hJUF9OQU1FICIiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCmluZGV4IDZkMWMzOWUuLmUxYzYyZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JCS8qIEZvciBUQVNLX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4JCQkvKiBGb3Igc3ViLWFyY2ggc3BlY2lmaWMgUFBDX1BJTl9TSVpFICovCiBzdHJ1Y3QgbW1fc3RydWN0OwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB2YV90b19waHlzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CkBAIC0xMjcsOSArMTI4LDggQEAKICAqIG9mIFJBTS4gIC0tIENvcnQKICAqLwogI2RlZmluZSBWTUFMTE9DX09GRlNFVCAoMHgxMDAwMDAwKSAvKiAxNk0gKi8KLSNpZmRlZiBDT05GSUdfNDR4Ci0jaW5jbHVkZSA8YXNtL2libTQ0eC5oPgotI2RlZmluZSBWTUFMTE9DX1NUQVJUICgoKF9BTElHTigobG9uZyloaWdoX21lbW9yeSwgUFBDNDR4X1BJTl9TSVpFKSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpKQorI2lmZGVmIFBQQ19QSU5fU0laRQorI2RlZmluZSBWTUFMTE9DX1NUQVJUICgoKF9BTElHTigobG9uZyloaWdoX21lbW9yeSwgUFBDX1BJTl9TSVpFKSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpKQogI2Vsc2UKICNkZWZpbmUgVk1BTExPQ19TVEFSVCAoKCgobG9uZyloaWdoX21lbW9yeSArIFZNQUxMT0NfT0ZGU0VUKSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oIGIvaW5jbHVkZS9hc20tcHBjL3BwY19zeXMuaAppbmRleCA4M2Q4Yzc3Li40Yjk0ZjcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcHBjX3N5cy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGNfc3lzLmgKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfTVBDMTBYX0JSSURHRSkKICNpbmNsdWRlIDxhc20vbXBjMTB4Lmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19YSUxJTlhfVklSVEVYKQorI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgvdmlydGV4Lmg+CiAjZWxzZQogI2Vycm9yICJuZWVkIGRlZmluaXRpb24gb2YgcHBjX3N5c19kZXZpY2VzIgogI2VuZGlmCkBAIC00NCw5ICs0NiwyNiBAQAogCXUzMiAJCQl2YWx1ZTsKIAl1MzIgCQkJbnVtX2RldmljZXM7CiAJY2hhciAJCQkqcHBjX3N5c19uYW1lOworCXU4CQkJY29uZmlnW05VTV9QUENfU1lTX0RFVlNdOwogCWVudW0gcHBjX3N5c19kZXZpY2VzIAkqZGV2aWNlX2xpc3Q7CiB9OwogCitzdHJ1Y3QgcGxhdGZvcm1fbm90aWZ5X2Rldl9tYXAgeworCWNvbnN0IGNoYXIgKmJ1c19pZDsKKwl2b2lkICgqcnRuKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogcGRldiwgaW50IGlkeCk7Cit9OworCitlbnVtIHBsYXRmb3JtX2RldmljZV9mdW5jIHsKKwlQUENfU1lTX0ZVTkNfRFVNTVkgPSAwLAorCVBQQ19TWVNfRlVOQ19FVEggPSAxLAorCVBQQ19TWVNfRlVOQ19VQVJUID0gMiwKKwlQUENfU1lTX0ZVTkNfSExEQyA9IDMsCisJUFBDX1NZU19GVU5DX1VTQiA9IDQsCisJUFBDX1NZU19GVU5DX0lSREEgPSA1LAorfTsKKworI2RlZmluZSBQUENfU1lTX0NPTkZJR19ESVNBQkxFRAkJMQorCiAvKiBkZXNjcmliZXMgYWxsIHNwZWNpZmljIGNoaXBzIGFuZCB3aGljaCBkZXZpY2VzIHRoZXkgaGF2ZSBvbiB0aGVtICovCiBleHRlcm4gc3RydWN0IHBwY19zeXNfc3BlYyBwcGNfc3lzX3NwZWNzW107CiBleHRlcm4gc3RydWN0IHBwY19zeXNfc3BlYyAqY3VyX3BwY19zeXNfc3BlYzsKQEAgLTcyLDUgKzkxLDIwIEBACiAvKiByZW1vdmUgYSBkZXZpY2UgZnJvbSB0aGUgc3lzdGVtICovCiBleHRlcm4gdm9pZCBwcGNfc3lzX2RldmljZV9yZW1vdmUoZW51bSBwcGNfc3lzX2RldmljZXMgZGV2KTsKIAorLyogRnVuY3Rpb24gYXNzaWdubWVudCBzdHVmZiAqLwordm9pZCBwcGNfc3lzX2RldmljZV9pbml0ZnVuYyh2b2lkKTsKK3ZvaWQgcHBjX3N5c19kZXZpY2Vfc2V0ZnVuYyhlbnVtIHBwY19zeXNfZGV2aWNlcyBkZXYsCisJCQkgICAgZW51bSBwbGF0Zm9ybV9kZXZpY2VfZnVuYyBmdW5jKTsKK3ZvaWQgcHBjX3N5c19kZXZpY2Vfc2V0X2Z1bmNfYWxsKGVudW0gcGxhdGZvcm1fZGV2aWNlX2Z1bmMgZnVuYyk7CisKK3ZvaWQgcGxhdGZvcm1fbm90aWZ5X21hcChjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fbm90aWZ5X2Rldl9tYXAgKm1hcCwKKwkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisvKiBFbmFibGUgLyBkaXNhYmxlIHN0dWZmICovCit2b2lkIHBwY19zeXNfZGV2aWNlX2Rpc2FibGUoZW51bSBwcGNfc3lzX2RldmljZXMgZGV2KTsKK3ZvaWQgcHBjX3N5c19kZXZpY2VfZW5hYmxlKGVudW0gcHBjX3N5c19kZXZpY2VzIGRldik7Cit2b2lkIHBwY19zeXNfZGV2aWNlX2VuYWJsZV9hbGwodm9pZCk7Cit2b2lkIHBwY19zeXNfZGV2aWNlX2Rpc2FibGVfYWxsKHZvaWQpOworCiAjZW5kaWYJCQkJLyogX19BU01fUFBDX1NZU19IICovCiAjZW5kaWYJCQkJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3RpbWUuaCBiL2luY2x1ZGUvYXNtLXBwYy90aW1lLmgKaW5kZXggMzIxZmI3NS4uYzg2MTEyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3RpbWUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdGltZS5oCkBAIC0xNTMsNSArMTUzLDEwIEBACiAoe3Vuc2lnbmVkIHo7IGFzbSAoIm11bGh3dSAlMCwlMSwlMiIgOiAiPXIiICh6KSA6ICJyIiAoeCksICJyIiAoeSkpOyB6O30pCiAKIHVuc2lnbmVkIG11bGh3dV9zY2FsZV9mYWN0b3IodW5zaWduZWQsIHVuc2lnbmVkKTsKKworI2RlZmluZSBhY2NvdW50X3Byb2Nlc3NfdnRpbWUodHNrKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBjYWxjdWxhdGVfc3RlYWxfdGltZSgpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzbmFwc2hvdF90aW1lYmFzZXMoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKwogI2VuZGlmIC8qIF9fQVNNX1RJTUVfSF9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3RvZGMuaCBiL2luY2x1ZGUvYXNtLXBwYy90b2RjLmgKaW5kZXggODRiYWU3ZC4uOTM3YzdkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3RvZGMuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvdG9kYy5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLXBwYy90b2RjLmgKLSAqCiAgKiBEZWZpbml0aW9ucyBmb3IgdGhlIE00OFR4eCBhbmQgbWMxNDY4MTggc2VyaWVzIG9mIFRpbWUgb2YgZGF5L1JlYWwgVGltZQogICogQ2xvY2sgY2hpcHMuCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3hwYXJhbWV0ZXJzLmggYi9pbmNsdWRlL2FzbS1wcGMveHBhcmFtZXRlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU0ZWFjNi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGMveHBhcmFtZXRlcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1wcGMveHBhcmFtZXRlcnMuaAotICoKLSAqIFRoaXMgZmlsZSBpbmNsdWRlcyB0aGUgY29ycmVjdCB4cGFyYW1ldGVycy5oIGZvciB0aGUgQ09ORklHJ2VkIGJvYXJkCi0gKgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogMjAwNCAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZAotICogImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfWElMSU5YX01MMzAwKQotI2luY2x1ZGUgPHBsYXRmb3Jtcy80eHgveHBhcmFtZXRlcnMveHBhcmFtZXRlcnNfbWwzMDAuaD4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKaW5kZXggYmU2ZmVmZTIuLmRlMWQ5OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaApAQCAtODksMTAgKzg5LDE1IEBACiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF91bmxlc3MoYXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKIHsKIAlpbnQgYywgb2xkOwotCiAJYyA9IGF0b21pY19yZWFkKHYpOwotCXdoaWxlIChjICE9IHUgJiYgKG9sZCA9IGF0b21pY19jbXB4Y2hnKHYsIGMsIGMgKyBhKSkgIT0gYykKKwlmb3IgKDs7KSB7CisJCWlmICh1bmxpa2VseShjID09IHUpKQorCQkJYnJlYWs7CisJCW9sZCA9IGF0b21pY19jbXB4Y2hnKHYsIGMsIGMgKyBhKTsKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCisJCQlicmVhazsKIAkJYyA9IG9sZDsKKwl9CiAJcmV0dXJuIGMgIT0gdTsKIH0KIApAQCAtMTY3LDEwICsxNzIsMTUgQEAKIAkJCQkJICBsb25nIGxvbmcgYSwgbG9uZyBsb25nIHUpCiB7CiAJbG9uZyBsb25nIGMsIG9sZDsKLQogCWMgPSBhdG9taWM2NF9yZWFkKHYpOwotCXdoaWxlIChjICE9IHUgJiYgKG9sZCA9IGF0b21pYzY0X2NtcHhjaGcodiwgYywgYyArIGEpKSAhPSBjKQorCWZvciAoOzspIHsKKwkJaWYgKHVubGlrZWx5KGMgPT0gdSkpCisJCQlicmVhazsKKwkJb2xkID0gYXRvbWljNjRfY21weGNoZyh2LCBjLCBjICsgYSk7CisJCWlmIChsaWtlbHkob2xkID09IGMpKQorCQkJYnJlYWs7CiAJCWMgPSBvbGQ7CisJfQogCXJldHVybiBjICE9IHU7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvYnVnLmggYi9pbmNsdWRlL2FzbS1zMzkwL2J1Zy5oCmluZGV4IGEyZTc0MzAuLjdkZGFhMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9idWcuaApAQCAtNCw5ICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCisKICNkZWZpbmUgQlVHKCkgZG8geyBcCi0gICAgICAgIHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5sb25nIDAiKTsgXAorCXByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwlfX2J1aWx0aW5fdHJhcCgpOyBcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZGFzZC5oIGIvaW5jbHVkZS9hc20tczM5MC9kYXNkLmgKaW5kZXggYzc0NGZmMy4uMTYzMGMyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9kYXNkLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9kYXNkLmgKQEAgLTIwNCw4ICsyMDQsNyBAQAogICoKICAqIEhlcmUgaXN0IGhvdyB0aGUgaW9jdGwtbnIgc2hvdWxkIGJlIHVzZWQ6CiAgKiAgICAwIC0gICAzMSAgIERBU0QgZHJpdmVyIGl0c2VsZgotICogICAzMiAtICAyMjkgICBzdGlsbCBvcGVuCi0gKiAgMjMwIC0gIDIzOSAgIERBU0QgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nCisgKiAgIDMyIC0gIDIzOSAgIHN0aWxsIG9wZW4KICAqICAyNDAgLSAgMjU1ICAgcmVzZXJ2ZWQgZm9yIEVNQyAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0yMzcsMjIgKzIzNiwxMiBAQAogI2RlZmluZSBCSU9EQVNEUFNSRCAgICBfSU9SKERBU0RfSU9DVExfTEVUVEVSLDQsZGFzZF9yc3NkX3BlcmZfc3RhdHNfdCkKIC8qIEdldCBBdHRyaWJ1dGVzIChjYWNoZSBvcGVyYXRpb25zKSAqLwogI2RlZmluZSBCSU9EQVNER0FUVFIgICBfSU9SKERBU0RfSU9DVExfTEVUVEVSLDUsYXR0cmliX2RhdGFfdCkgCi0vKiByZXRyaWV2ZSBleHRlbmRlZCBlcnJvci1yZXBvcnRpbmcgdmFsdWUgKi8KLSNkZWZpbmUgQklPREFTREVFUkdFVCAgX0lPUihEQVNEX0lPQ1RMX0xFVFRFUiw2LGludCkKIAogCiAvKiAjZGVmaW5lIEJJT0RBU0RGT1JNQVQgIF9JT1coSU9DVExfTEVUVEVSLDAsZm9ybWF0X2RhdGFfdCkgLCBkZXByZWNhdGVkICovCiAjZGVmaW5lIEJJT0RBU0RGTVQgICAgIF9JT1coREFTRF9JT0NUTF9MRVRURVIsMSxmb3JtYXRfZGF0YV90KSAKIC8qIFNldCBBdHRyaWJ1dGVzIChjYWNoZSBvcGVyYXRpb25zKSAqLwogI2RlZmluZSBCSU9EQVNEU0FUVFIgICBfSU9XKERBU0RfSU9DVExfTEVUVEVSLDIsYXR0cmliX2RhdGFfdCkgCi0vKiByZXRyaWV2ZSBleHRlbmRlZCBlcnJvci1yZXBvcnRpbmcgdmFsdWUgKi8KLSNkZWZpbmUgQklPREFTREVFUlNFVCAgX0lPVyhEQVNEX0lPQ1RMX0xFVFRFUiwzLGludCkKLQotCi0vKiByZW1vdmUgYWxsIHJlY29yZHMgZnJvbSB0aGUgZWVyIGJ1ZmZlciAqLwotI2RlZmluZSBEQVNEX0VFUl9QVVJHRSAgICAgICBfSU8oREFTRF9JT0NUTF9MRVRURVIsMjMwKQotLyogc2V0IHRoZSBudW1iZXIgb2YgcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgdGhlIGludGVybmFsIGVlciBidWZmZXIgKi8KLSNkZWZpbmUgREFTRF9FRVJfU0VUQlVGU0laRSAgX0lPVyhEQVNEX0lPQ1RMX0xFVFRFUiwyMzAsaW50KQogCiAKICNlbmRpZgkJCQkvKiBEQVNEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1zMzkwL3BlcmNwdS5oCmluZGV4IDEyM2ZjYWMuLmUxMGVkODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wZXJjcHUuaApAQCAtNDYsMTAgKzQ2LDkgQEAKICNkZWZpbmUgcGVyY3B1X21vZGNvcHkocGNwdWRzdCwgc3JjLCBzaXplKQkJCVwKIGRvIHsJCQkJCQkJCVwKIAl1bnNpZ25lZCBpbnQgX19pOwkJCQkJXAotCWZvciAoX19pID0gMDsgX19pIDwgTlJfQ1BVUzsgX19pKyspCQkJXAotCQlpZiAoY3B1X3Bvc3NpYmxlKF9faSkpCQkJCVwKLQkJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldFtfX2ldLAlcCi0JCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJXAorCWZvcl9lYWNoX2NwdShfX2kpCQkJCQlcCisJCW1lbWNweSgocGNwdWRzdCkrX19wZXJfY3B1X29mZnNldFtfX2ldLAkJXAorCQkgICAgICAgKHNyYyksIChzaXplKSk7CQkJCVwKIH0gd2hpbGUgKDApCiAKICNlbHNlIC8qICEgU01QICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCmluZGV4IDM0MTdkZDcuLmUyOGFhZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oCkBAIC0xNTgsMTEgKzE1OCw0IEBACiAKICNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLHB0ZSkgdGxiX3JlbW92ZV9wYWdlKHRsYixwdGUpCiAKLS8qCi0gKiBUaGlzIGVzdGFibGlzaGVzIGtlcm5lbCB2aXJ0dWFsIG1hcHBpbmdzIChlLmcuLCBhcyBhIHJlc3VsdCBvZiBhCi0gKiB2bWFsbG9jIGNhbGwpLiAgU2luY2UgczM5MC1lc2FtZSB1c2VzIGEgc2VwYXJhdGUga2VybmVsIHBhZ2UgdGFibGUsCi0gKiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuLi4gOikKLSAqLwotI2RlZmluZSBzZXRfcGdkaXIoYWRkcixlbnRyeSkgZG8geyB9IHdoaWxlKDApCi0KICNlbmRpZiAvKiBfUzM5MF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcG9sbC5oIGIvaW5jbHVkZS9hc20tczM5MC9wb2xsLmgKaW5kZXggZTkwYTVjYS4uNmY3ZjY1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wb2xsLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmgKaW5kZXggYjJlNjVlOC4uNmE4OWRiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCkBAIC0xMTgsNiArMTE4LDggQEAKIGV4dGVybiB2b2lkIGFjY291bnRfdnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgYWNjb3VudF90aWNrX3Z0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIGFjY291bnRfc3lzdGVtX3Z0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKyNlbHNlCisjZGVmaW5lIGFjY291bnRfdnRpbWUoeCkgZG8geyAvKiBlbXB0eSAqLyB9IHdoaWxlICgwKQogI2VuZGlmCiAKICNkZWZpbmUgZmluaXNoX2FyY2hfc3dpdGNoKHByZXYpIGRvIHsJCQkJCSAgICAgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL2lvLmgKaW5kZXggYjBiMjkzNy4uMmMzYWZlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9pby5oCkBAIC0xNzQsMjAgKzE3NCw2IEBACiAJZ2VuZXJpY19pb19iYXNlID0gcGJhc2U7CiB9CiAKLSNkZWZpbmUgaXNhX3JlYWRiKGEpIHJlYWRiKGlvcG9ydF9tYXAoYSwgMSkpCi0jZGVmaW5lIGlzYV9yZWFkdyhhKSByZWFkdyhpb3BvcnRfbWFwKGEsIDIpKQotI2RlZmluZSBpc2FfcmVhZGwoYSkgcmVhZGwoaW9wb3J0X21hcChhLCA0KSkKLSNkZWZpbmUgaXNhX3dyaXRlYihiLGEpIHdyaXRlYihiLGlvcG9ydF9tYXAoYSwgMSkpCi0jZGVmaW5lIGlzYV93cml0ZXcodyxhKSB3cml0ZXcodyxpb3BvcnRfbWFwKGEsIDIpKQotI2RlZmluZSBpc2Ffd3JpdGVsKGwsYSkgd3JpdGVsKGwsaW9wb3J0X21hcChhLCA0KSkKLQotI2RlZmluZSBpc2FfbWVtc2V0X2lvKGEsYixjKSBcCi0gIG1lbXNldCgodm9pZCAqKShpb3BvcnRfbWFwKCh1bnNpZ25lZCBsb25nKShhKSwgMSkpLChiKSwoYykpCi0jZGVmaW5lIGlzYV9tZW1jcHlfZnJvbWlvKGEsYixjKSBcCi0gIG1lbWNweSgoYSksKHZvaWQgKikoaW9wb3J0X21hcCgodW5zaWduZWQgbG9uZykoYiksIDEpKSwoYykpCi0jZGVmaW5lIGlzYV9tZW1jcHlfdG9pbyhhLGIsYykgXAotICBtZW1jcHkoKHZvaWQgKikoaW9wb3J0X21hcCgodW5zaWduZWQgbG9uZykoYSksIDEpKSwoYiksKGMpKQotCiAvKiBXZSByZWFsbHkgd2FudCB0byB0cnkgYW5kIGdldCB0aGVzZSB0byBtZW1jcHkgZXRjICovCiBleHRlcm4gdm9pZCBtZW1jcHlfZnJvbWlvKHZvaWQgKiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wb2xsLmggYi9pbmNsdWRlL2FzbS1zaC9wb2xsLmgKaW5kZXggNTJmOTViOS4uZGJjYTliMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BvbGwuaApAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBQT0xMV1JCQU5ECTB4MDIwMAogI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKICNkZWZpbmUgUE9MTFJFTU9WRQkweDEwMDAKKyNkZWZpbmUgUE9MTFJESFVQICAgICAgIDB4MjAwMAogCiBzdHJ1Y3QgcG9sbGZkIHsKIAlpbnQgZmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXNoNjQvcGdhbGxvYy5oCmluZGV4IDY3ODI1MWEuLmIyOWRkNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGdhbGxvYy5oCkBAIC0xNjcsMjIgKzE2Nyw2IEBACiAKIGV4dGVybiBpbnQgZG9fY2hlY2tfcGd0X2NhY2hlKGludCwgaW50KTsKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wZ2Rpcih1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBnZF90IGVudHJ5KQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqIHA7Ci0JcGdkX3QgKnBnZDsKLQotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JZm9yX2VhY2hfcHJvY2VzcyhwKSB7Ci0JCWlmICghcC0+bW0pCi0JCQljb250aW51ZTsKLQkJKnBnZF9vZmZzZXQocC0+bW0sYWRkcmVzcykgPSBlbnRyeTsKLQl9Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCWZvciAocGdkID0gKHBnZF90ICopcGdkX3F1aWNrbGlzdDsgcGdkOyBwZ2QgPSAocGdkX3QgKikqKHVuc2lnbmVkIGxvbmcgKilwZ2QpCi0JCXBnZFthZGRyZXNzID4+IFBHRElSX1NISUZUXSA9IGVudHJ5OwotfQotCiAjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcHRlKSBcCiAJc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsgKHVuc2lnbmVkIGxvbmcpIChwdGUpKSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9wb2xsLmggYi9pbmNsdWRlL2FzbS1zaDY0L3BvbGwuaAppbmRleCBhNDIwZDE0Li4zYTZjYmFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3BvbGwuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBQT0xMV1JOT1JNCTB4MDEwMAogI2RlZmluZSBQT0xMV1JCQU5ECTB4MDIwMAogI2RlZmluZSBQT0xMTVNHCQkweDA0MDAKKyNkZWZpbmUgUE9MTFJESFVQICAgICAgIDB4MjAwMAogCiBzdHJ1Y3QgcG9sbGZkIHsKIAlpbnQgZmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9jcHVkYXRhLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9jcHVkYXRhLmgKaW5kZXggZWMwZDllZi4uYTJjNGQ1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvY3B1ZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2NwdWRhdGEuaApAQCAtMTgsNiArMTgsNyBAQAogCXVuc2lnbmVkIGludCBjb3VudGVyOwogCWludCBwcm9tX25vZGU7CiAJaW50IG1pZDsKKwlpbnQgbmV4dDsKIH0gY3B1aW5mb19zcGFyYzsKIAogREVDTEFSRV9QRVJfQ1BVKGNwdWluZm9fc3BhcmMsIF9fY3B1X2RhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaWRwcm9tLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pZHByb20uaAppbmRleCBkODU2ZTY0Li41OTA4M2VkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9pZHByb20uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pZHByb20uaApAQCAtNywyNyArNywxOSBAQAogI2lmbmRlZiBfU1BBUkNfSURQUk9NX0gKICNkZWZpbmUgX1NQQVJDX0lEUFJPTV9ICiAKLS8qIE9mZnNldCBpbnRvIHRoZSBFRVBST00gd2hlcmUgdGhlIGlkIFBST00gaXMgbG9jYXRlZCBvbiB0aGUgNGMgKi8KLSNkZWZpbmUgSURQUk9NX09GRlNFVCAgMHg3ZDgKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0vKiBPbiBzdW40bTsgcGh5c2ljYWwuICovCi0vKiBNaWNyb1NQQVJDKC1JSSkgZG9lcyBub3QgZGVjb2RlIDMxcmQgYml0LCBidXQgaXQgd29ya3MuICovCi0jZGVmaW5lIElEUFJPTV9PRkZTRVRfTSAgMHhmZDgKLQotc3RydWN0IGlkcHJvbQotewotCXVuc2lnbmVkIGNoYXIJaWRfZm9ybWF0OwkvKiBGb3JtYXQgaWRlbnRpZmllciAoYWx3YXlzIDB4MDEpICovCi0JdW5zaWduZWQgY2hhcglpZF9tYWNodHlwZTsJLyogTWFjaGluZSB0eXBlICovCi0JdW5zaWduZWQgY2hhcglpZF9ldGhhZGRyWzZdOwkvKiBIYXJkd2FyZSBldGhlcm5ldCBhZGRyZXNzICovCi0JbG9uZwkJaWRfZGF0ZTsJLyogRGF0ZSBvZiBtYW51ZmFjdHVyZSAqLwotCXVuc2lnbmVkIGludAlpZF9zZXJudW06MjQ7CS8qIFVuaXF1ZSBzZXJpYWwgbnVtYmVyICovCi0JdW5zaWduZWQgY2hhcglpZF9ja3N1bTsJLyogQ2hlY2tzdW0gLSB4b3Igb2YgdGhlIGRhdGEgYnl0ZXMgKi8KLQl1bnNpZ25lZCBjaGFyCXJlc2VydmVkWzE2XTsKK3N0cnVjdCBpZHByb20geworCXU4CQlpZF9mb3JtYXQ7CS8qIEZvcm1hdCBpZGVudGlmaWVyIChhbHdheXMgMHgwMSkgKi8KKwl1OAkJaWRfbWFjaHR5cGU7CS8qIE1hY2hpbmUgdHlwZSAqLworCXU4CQlpZF9ldGhhZGRyWzZdOwkvKiBIYXJkd2FyZSBldGhlcm5ldCBhZGRyZXNzICovCisJczMyCQlpZF9kYXRlOwkvKiBEYXRlIG9mIG1hbnVmYWN0dXJlICovCisJdTMyCQlpZF9zZXJudW06MjQ7CS8qIFVuaXF1ZSBzZXJpYWwgbnVtYmVyICovCisJdTgJCWlkX2Nrc3VtOwkvKiBDaGVja3N1bSAtIHhvciBvZiB0aGUgZGF0YSBieXRlcyAqLworCXU4CQlyZXNlcnZlZFsxNl07CiB9OwogCiBleHRlcm4gc3RydWN0IGlkcHJvbSAqaWRwcm9tOwogZXh0ZXJuIHZvaWQgaWRwcm9tX2luaXQodm9pZCk7CiAKLSNkZWZpbmUgSURQUk9NX1NJWkUgIChzaXplb2Yoc3RydWN0IGlkcHJvbSkpCi0KICNlbmRpZiAvKiAhKF9TUEFSQ19JRFBST01fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL29wbGliLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9vcGxpYi5oCmluZGV4IGQwZDc2YjMuLmYyODNmOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL29wbGliLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvb3BsaWIuaApAQCAtMTY1LDYgKzE2NSw3IEBACiAJUFJPTURFVl9JVFRZQSwJCQkvKiBpbnB1dCBmcm9tIHR0eWEgKi8KIAlQUk9NREVWX0lUVFlCLAkJCS8qIGlucHV0IGZyb20gdHR5YiAqLwogCVBST01ERVZfSVJTQywJCQkvKiBpbnB1dCBmcm9tIHJzYyAqLworCVBST01ERVZfSVZDT05TLAkJCS8qIGlucHV0IGZyb20gdmlydHVhbC1jb25zb2xlICovCiAJUFJPTURFVl9JX1VOSywKIH07CiAKQEAgLTE3Nyw2ICsxNzgsNyBAQAogCVBST01ERVZfT1RUWUEsCQkJLyogdG8gdHR5YSAqLwogCVBST01ERVZfT1RUWUIsCQkJLyogdG8gdHR5YiAqLwogCVBST01ERVZfT1JTQywJCQkvKiB0byByc2MgKi8KKwlQUk9NREVWX09WQ09OUywJCQkvKiB0byB2aXJ0dWFsLWNvbnNvbGUgKi8KIAlQUk9NREVWX09fVU5LLAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZS5oCmluZGV4IGIzM2MzNTQuLjllZWE4ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlLmgKQEAgLTI2OSwxMSArMjY5LDE0IEBACiAKIEJURklYVVBERUZfQ0FMTF9DT05TVChwdGVfdCwgbWtfcHRlX3BoeXMsIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KQogQlRGSVhVUERFRl9DQUxMX0NPTlNUKHB0ZV90LCBta19wdGVfaW8sIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90LCBpbnQpCitCVEZJWFVQREVGX0NBTExfQ09OU1QocGdwcm90X3QsIHBncHJvdF9ub25jYWNoZWQsIHBncHJvdF90KQogCiAjZGVmaW5lIG1rX3B0ZShwYWdlLHBncHJvdCkgQlRGSVhVUF9DQUxMKG1rX3B0ZSkocGFnZSxwZ3Byb3QpCiAjZGVmaW5lIG1rX3B0ZV9waHlzKHBhZ2UscGdwcm90KSBCVEZJWFVQX0NBTEwobWtfcHRlX3BoeXMpKHBhZ2UscGdwcm90KQogI2RlZmluZSBta19wdGVfaW8ocGFnZSxwZ3Byb3Qsc3BhY2UpIEJURklYVVBfQ0FMTChta19wdGVfaW8pKHBhZ2UscGdwcm90LHNwYWNlKQogCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocGdwcm90KSBCVEZJWFVQX0NBTEwocGdwcm90X25vbmNhY2hlZCkocGdwcm90KQorCiBCVEZJWFVQREVGX0lOVChwdGVfbW9kaWZ5X21hc2spCiAKIHN0YXRpYyBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkgX19hdHRyaWJ1dGVfY29uc3RfXzsKQEAgLTMwOSw5ICszMTIsNiBAQAogI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJZG97fXdoaWxlKDApCiAjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQlkb3t9d2hpbGUoMCkKIAotLyogVGhlIHBlcm1pc3Npb25zIGZvciBwZ3Byb3RfdmFsIHRvIG1ha2UgYSBwYWdlIG1hcHBlZCBvbiB0aGUgb2JpbyBzcGFjZSAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBwZ19pb2JpdHM7Ci0KIC8qIENlcnRhaW4gYXJjaGl0ZWN0dXJlcyBuZWVkIHRvIGRvIHNwZWNpYWwgdGhpbmdzIHdoZW4gcHRlJ3MKICAqIHdpdGhpbiBhIHBhZ2UgdGFibGUgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLiAgVGh1cywgdGhlIGZvbGxvd2luZwogICogaG9vayBpcyBtYWRlIGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3BvbGwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3BvbGwuaAppbmRleCAzZGRjYzY0Li4yNmYxM2ZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvcG9sbC5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIFBPTExXUkJBTkQJMjU2CiAjZGVmaW5lIFBPTExNU0cJCTUxMgogI2RlZmluZSBQT0xMUkVNT1ZFCTEwMjQKKyNkZWZpbmUgUE9MTFJESFVQICAgICAgIDIwNDgKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc21wLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaAppbmRleCA1ODBjNTFkLi45OGM0NmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaApAQCAtODEsMTYgKzgxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIF9fdm9sYXRpbGVfXyBpbnQgX19jcHVfbnVtYmVyX21hcFtOUl9DUFVTXTsKLWV4dGVybiBfX3ZvbGF0aWxlX18gaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOwotCiBzdGF0aWMgaW5saW5lIGludCBjcHVfbG9naWNhbF9tYXAoaW50IGNwdSkKIHsKLQlyZXR1cm4gX19jcHVfbG9naWNhbF9tYXBbY3B1XTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGNwdV9udW1iZXJfbWFwKGludCBjcHUpCi17Ci0JcmV0dXJuIF9fY3B1X251bWJlcl9tYXBbY3B1XTsKKwlyZXR1cm4gY3B1OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBoYXJkX3NtcDRtX3Byb2Nlc3Nvcl9pZCh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zb2NrZXQuaAppbmRleCAwOTU3NWI2Li40ZTBjZTNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zb2NrZXQuaApAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZSBTT19USU1FU1RBTVAJCTB4MDAxZAogI2RlZmluZSBTQ01fVElNRVNUQU1QCQlTT19USU1FU1RBTVAKIAotI2RlZmluZSBTT19QRUVSU0VDCQkweDEwMGUKKyNkZWZpbmUgU09fUEVFUlNFQwkJMHgwMDFlCiAKIC8qIFNlY3VyaXR5IGxldmVscyAtIGFzIHBlciBOUkwgSVB2NiAtIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nICovCiAjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OCQkweDUwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zcGlubG9jay5oCmluZGV4IGUzNDRjOTguLjMzNTBjOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2suaApAQCAtOTQsNyArOTQsNyBAQAogI2RlZmluZSBfX3Jhd19yZWFkX2xvY2sobG9jaykgXAogZG8gewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCi0JX19yYXdfcmVhZF9sb2NrKGxvY2spOyBcCisJX19yZWFkX2xvY2sobG9jayk7IFwKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IFwKIH0gd2hpbGUoMCkKIApAQCAtMTE0LDExICsxMTQsMTEgQEAKICNkZWZpbmUgX19yYXdfcmVhZF91bmxvY2sobG9jaykgXAogZG8gewl1bnNpZ25lZCBsb25nIGZsYWdzOyBcCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBcCi0JX19yYXdfcmVhZF91bmxvY2sobG9jayk7IFwKKwlfX3JlYWRfdW5sb2NrKGxvY2spOyBcCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyBcCiB9IHdoaWxlKDApCiAKLWV4dGVybiBfX2lubGluZV9fIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQorc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX2xvY2socmF3X3J3bG9ja190ICpydykKIHsKIAlyZWdpc3RlciByYXdfcndsb2NrX3QgKmxwIGFzbSgiZzEiKTsKIAlscCA9IHJ3OwpAQCAtMTMxLDkgKzEzMSwyOCBAQAogCTogImcyIiwgImc0IiwgIm1lbW9yeSIsICJjYyIpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBfX3Jhd193cml0ZV90cnlsb2NrKHJhd19yd2xvY2tfdCAqcncpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHN0dWIgWyUxICsgM10sICUwIgorCQkJICAgICA6ICI9ciIgKHZhbCkKKwkJCSAgICAgOiAiciIgKCZydy0+bG9jaykKKwkJCSAgICAgOiAibWVtb3J5Iik7CisKKwlpZiAodmFsID09IDApIHsKKwkJdmFsID0gcnctPmxvY2sgJiB+MHhmZjsKKwkJaWYgKHZhbCkKKwkJCSgodm9sYXRpbGUgdTgqKSZydy0+bG9jaylbM10gPSAwOworCX0KKworCXJldHVybiAodmFsID09IDApOworfQorCiAjZGVmaW5lIF9fcmF3X3dyaXRlX3VubG9jayhydykJZG8geyAocncpLT5sb2NrID0gMDsgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhsb2NrKSBnZW5lcmljX19yYXdfcmVhZF90cnlsb2NrKGxvY2spCiAKICNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdWFjY2Vzcy5oCmluZGV4IGY4ZjFlYzEuLjNjZjEzMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy91YWNjZXNzLmgKQEAgLTEyMCwxNyArMTIwLDYgQEAKIGRlZmF1bHQ6IF9fcHVfcmV0ID0gX19wdXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKIH0gfSBlbHNlIHsgX19wdV9yZXQgPSAtRUZBVUxUOyB9IF9fcHVfcmV0OyB9KQogCi0jZGVmaW5lIF9fcHV0X3VzZXJfY2hlY2tfcmV0KHgsYWRkcixzaXplLHJldHZhbCkgKHsgXAotcmVnaXN0ZXIgaW50IF9fZm9vIF9fYXNtX18gKCJsMSIpOyBcCi1pZiAoX19hY2Nlc3Nfb2soYWRkcixzaXplKSkgeyBcCi1zd2l0Y2ggKHNpemUpIHsgXAotY2FzZSAxOiBfX3B1dF91c2VyX2FzbV9yZXQoeCxiLGFkZHIscmV0dmFsLF9fZm9vKTsgYnJlYWs7IFwKLWNhc2UgMjogX19wdXRfdXNlcl9hc21fcmV0KHgsaCxhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCi1jYXNlIDQ6IF9fcHV0X3VzZXJfYXNtX3JldCh4LCxhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCi1jYXNlIDg6IF9fcHV0X3VzZXJfYXNtX3JldCh4LGQsYWRkcixyZXR2YWwsX19mb28pOyBicmVhazsgXAotZGVmYXVsdDogaWYgKF9fcHV0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IGJyZWFrOyBcCi19IH0gZWxzZSByZXR1cm4gcmV0dmFsOyB9KQotCiAjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LGFkZHIsc2l6ZSkgKHsgXAogcmVnaXN0ZXIgaW50IF9fcHVfcmV0OyBcCiBzd2l0Y2ggKHNpemUpIHsgXApAQCAtMTQxLDE2ICsxMzAsNiBAQAogZGVmYXVsdDogX19wdV9yZXQgPSBfX3B1dF91c2VyX2JhZCgpOyBicmVhazsgXAogfSBfX3B1X3JldDsgfSkKIAotI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2tfcmV0KHgsYWRkcixzaXplLHJldHZhbCkgKHsgXAotcmVnaXN0ZXIgaW50IF9fZm9vIF9fYXNtX18gKCJsMSIpOyBcCi1zd2l0Y2ggKHNpemUpIHsgXAotY2FzZSAxOiBfX3B1dF91c2VyX2FzbV9yZXQoeCxiLGFkZHIscmV0dmFsLF9fZm9vKTsgYnJlYWs7IFwKLWNhc2UgMjogX19wdXRfdXNlcl9hc21fcmV0KHgsaCxhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCi1jYXNlIDQ6IF9fcHV0X3VzZXJfYXNtX3JldCh4LCxhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCi1jYXNlIDg6IF9fcHV0X3VzZXJfYXNtX3JldCh4LGQsYWRkcixyZXR2YWwsX19mb28pOyBicmVhazsgXAotZGVmYXVsdDogaWYgKF9fcHV0X3VzZXJfYmFkKCkpIHJldHVybiByZXR2YWw7IGJyZWFrOyBcCi19IH0pCi0KICNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCxzaXplLGFkZHIscmV0KQkJCQkJXAogX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKIAkiLyogUHV0IHVzZXIgYXNtLCBpbmxpbmUuICovXG4iCQkJCQlcCkBAIC0xNzAsMzIgKzE0OSw2IEBACiAgICAgICAgOiAiPSZyIiAocmV0KSA6ICJyIiAoeCksICJtIiAoKl9fbShhZGRyKSksCQkJXAogCSAiaSIgKC1FRkFVTFQpKQogCi0jZGVmaW5lIF9fcHV0X3VzZXJfYXNtX3JldCh4LHNpemUsYWRkcixyZXQsZm9vKQkJCQlcCi1pZiAoX19idWlsdGluX2NvbnN0YW50X3AocmV0KSAmJiByZXQgPT0gLUVGQVVMVCkJCQlcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAotCSIvKiBQdXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKLSIxOlx0Igkic3QiI3NpemUgIiAlMSwgJTJcblxuXHQiCQkJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKLQkiLndvcmQJMWIsIF9fcmV0X2VmYXVsdFxuXG5cdCIJCQkJCVwKLQkiLnByZXZpb3VzXG5cblx0IgkJCQkJCVwKLSAgICAgICA6ICI9ciIgKGZvbykgOiAiciIgKHgpLCAibSIgKCpfX20oYWRkcikpKTsJCQlcCi1lbHNlCQkJCQkJCQkJXAotX19hc21fXyBfX3ZvbGF0aWxlKAkJCQkJCQlcCi0JIi8qIFB1dCB1c2VyIGFzbSByZXQsIGlubGluZS4gKi9cbiIJCQkJXAotIjE6XHQiCSJzdCIjc2l6ZSAiICUxLCAlMlxuXG5cdCIJCQkJCVwKLQkiLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuIgkJCQkJCQlcCi0iMzpcblx0IgkJCQkJCQkJXAotCSJyZXRcblx0IgkJCQkJCQlcCi0JIiByZXN0b3JlICUlZzAsICUzLCAlJW8wXG5cdCIJCQkJCVwKLQkiLnByZXZpb3VzXG5cblx0IgkJCQkJCVwKLQkiLnNlY3Rpb24gX19leF90YWJsZSwjYWxsb2Ncblx0IgkJCQlcCi0JIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAotCSIud29yZAkxYiwgM2JcblxuXHQiCQkJCQkJXAotCSIucHJldmlvdXNcblxuXHQiCQkJCQkJXAotICAgICAgIDogIj1yIiAoZm9vKSA6ICJyIiAoeCksICJtIiAoKl9fbShhZGRyKSksICJpIiAocmV0KSkKLQogZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKIAogI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgsYWRkcixzaXplLHR5cGUpICh7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYS5vdXQuaAppbmRleCAwMmFmMjg5Li4zNWNiNWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Eub3V0LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hLm91dC5oCkBAIC05NSw3ICs5NSwxMSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jZGVmaW5lIFNUQUNLX1RPUCAodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpID8gMHhmMDAwMDAwMCA6IDB4ODAwMDAwMDAwMDBMKQorI2RlZmluZSBTVEFDS19UT1AzMgkoKDFVTCA8PCAzMlVMKSAtIFBBR0VfU0laRSkKKyNkZWZpbmUgU1RBQ0tfVE9QNjQJKDB4MDAwMDA4MDAwMDAwMDAwMFVMIC0gKDFVTCA8PCAzMlVMKSkKKworI2RlZmluZSBTVEFDS19UT1AgKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKKwkJICAgU1RBQ0tfVE9QMzIgOiBTVEFDS19UT1A2NCkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXNpLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2FzaS5oCmluZGV4IDUzNDg1NTYuLjY2MmEyMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXNpLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hc2kuaApAQCAtMjUsMTQgKzI1LDI3IEBACiAKIC8qIFNwaXRGaXJlIGFuZCBsYXRlciBleHRlbmRlZCBBU0lzLiAgVGhlICIoSUlJKSIgbWFya2VyIGRlc2lnbmF0ZXMKICAqIFVsdHJhU3BhcmMtSUlJIGFuZCBsYXRlciBzcGVjaWZpYyBBU0lzLiAgVGhlICIoQ01UKSIgbWFya2VyIGRlc2lnbmF0ZXMKLSAqIENoaXAgTXVsdGkgVGhyZWFkaW5nIHNwZWNpZmljIEFTSXMuCisgKiBDaGlwIE11bHRpIFRocmVhZGluZyBzcGVjaWZpYyBBU0lzLiAgIihORykiIGRlc2lnbmF0ZXMgTmlhZ2FyYSBzcGVjaWZpYworICogQVNJcywgIig0VikiIGRlc2lnbmF0ZXMgU1VONFYgc3BlY2lmaWMgQVNJcy4KICAqLwogI2RlZmluZSBBU0lfUEhZU19VU0VfRUMJCTB4MTQgLyogUEFERFIsIEUtY2FjaGFibGUJCSovCiAjZGVmaW5lIEFTSV9QSFlTX0JZUEFTU19FQ19FCTB4MTUgLyogUEFERFIsIEUtYml0CQkJKi8KKyNkZWZpbmUgQVNJX0JMS19BSVVQXzRWCQkweDE2IC8qICg0VikgUHJpbSwgdXNlciwgYmxvY2sgbGQvc3QJKi8KKyNkZWZpbmUgQVNJX0JMS19BSVVTXzRWCQkweDE3IC8qICg0VikgU2VjLCB1c2VyLCBibG9jayBsZC9zdAkqLwogI2RlZmluZSBBU0lfUEhZU19VU0VfRUNfTAkweDFjIC8qIFBBRERSLCBFLWNhY2hhYmxlLCBsaXR0bGUgZW5kaWFuKi8KICNkZWZpbmUgQVNJX1BIWVNfQllQQVNTX0VDX0VfTAkweDFkIC8qIFBBRERSLCBFLWJpdCwgbGl0dGxlIGVuZGlhbgkqLworI2RlZmluZSBBU0lfQkxLX0FJVVBfTF80VgkweDFlIC8qICg0VikgUHJpbSwgdXNlciwgYmxvY2ssIGwtZW5kaWFuKi8KKyNkZWZpbmUgQVNJX0JMS19BSVVTX0xfNFYJMHgxZiAvKiAoNFYpIFNlYywgdXNlciwgYmxvY2ssIGwtZW5kaWFuCSovCisjZGVmaW5lIEFTSV9TQ1JBVENIUEFECQkweDIwIC8qICg0VikgU2NyYXRjaCBQYWQgUmVnaXN0ZXJzCSovCisjZGVmaW5lIEFTSV9NTVUJCQkweDIxIC8qICg0VikgTU1VIENvbnRleHQgUmVnaXN0ZXJzCSovCisjZGVmaW5lIEFTSV9CTEtfSU5JVF9RVUFEX0xERF9BSVVTIDB4MjMgLyogKE5HKSBpbml0LXN0b3JlLCB0d2luIGxvYWQsCisJCQkJCSAqIHNlY29uZGFyeSwgdXNlcgorCQkJCQkgKi8KICNkZWZpbmUgQVNJX05VQ0xFVVNfUVVBRF9MREQJMHgyNCAvKiBDYWNoYWJsZSwgcXdvcmQgbG9hZAkJKi8KKyNkZWZpbmUgQVNJX1FVRVVFCQkweDI1IC8qICg0VikgSW50ZXJydXB0IFF1ZXVlIFJlZ2lzdGVycwkqLworI2RlZmluZSBBU0lfUVVBRF9MRERfUEhZU180VgkweDI2IC8qICg0VikgUGh5c2ljYWwsIHF3b3JkIGxvYWQJKi8KICNkZWZpbmUgQVNJX05VQ0xFVVNfUVVBRF9MRERfTAkweDJjIC8qIENhY2hhYmxlLCBxd29yZCBsb2FkLCBsLWVuZGlhbiAJKi8KKyNkZWZpbmUgQVNJX1FVQURfTEREX1BIWVNfTF80VgkweDJlIC8qICg0VikgUGh5cywgcXdvcmQgbG9hZCwgbC1lbmRpYW4JKi8KICNkZWZpbmUgQVNJX1BDQUNIRV9EQVRBX1NUQVRVUwkweDMwIC8qIChJSUkpIFBDYWNoZSBkYXRhIHN0YXQgUkFNIGRpYWcJKi8KICNkZWZpbmUgQVNJX1BDQUNIRV9EQVRBCQkweDMxIC8qIChJSUkpIFBDYWNoZSBkYXRhIFJBTSBkaWFnCSovCiAjZGVmaW5lIEFTSV9QQ0FDSEVfVEFHCQkweDMyIC8qIChJSUkpIFBDYWNoZSB0YWcgUkFNIGRpYWcJKi8KQEAgLTEzNyw2ICsxNTAsOSBAQAogI2RlZmluZSBBU0lfRkwxNl9TTAkJMHhkYiAvKiBTZWNvbmRhcnksIDEgMTYtYml0LCBmcHUgbGQvc3QsTCovCiAjZGVmaW5lIEFTSV9CTEtfQ09NTUlUX1AJMHhlMCAvKiBQcmltYXJ5LCBibGsgc3RvcmUgY29tbWl0CSovCiAjZGVmaW5lIEFTSV9CTEtfQ09NTUlUX1MJMHhlMSAvKiBTZWNvbmRhcnksIGJsayBzdG9yZSBjb21taXQJKi8KKyNkZWZpbmUgQVNJX0JMS19JTklUX1FVQURfTEREX1AJMHhlMiAvKiAoTkcpIGluaXQtc3RvcmUsIHR3aW4gbG9hZCwKKwkJCQkgICAgICAqIHByaW1hcnksIGltcGxpY2l0CisJCQkJICAgICAgKi8KICNkZWZpbmUgQVNJX0JMS19QCQkweGYwIC8qIFByaW1hcnksIGJsayBsZC9zdAkJKi8KICNkZWZpbmUgQVNJX0JMS19TCQkweGYxIC8qIFNlY29uZGFyeSwgYmxrIGxkL3N0CQkqLwogI2RlZmluZSBBU0lfQkxLX1BMCQkweGY4IC8qIFByaW1hcnksIGJsayBsZC9zdCwgbGl0dGxlCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdG9taWMuaAppbmRleCAyNTI1NmJkLi40NjhlYjQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXRvbWljLmgKQEAgLTc4LDkgKzc4LDE1IEBACiAoewkJCQkJCQkJXAogCWludCBjLCBvbGQ7CQkJCQkJXAogCWMgPSBhdG9taWNfcmVhZCh2KTsJCQkJCVwKLQl3aGlsZSAoYyAhPSAodSkgJiYgKG9sZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSkpICE9IGMpIFwKKwlmb3IgKDs7KSB7CQkJCQkJXAorCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQkJCQlcCisJCQlicmVhazsJCQkJCVwKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKTsJCVwKKwkJaWYgKGxpa2VseShvbGQgPT0gYykpCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAogCQljID0gb2xkOwkJCQkJXAotCWMgIT0gKHUpOwkJCQkJCVwKKwl9CQkJCQkJCVwKKwlsaWtlbHkoYyAhPSAodSkpOwkJCQkJXAogfSkKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGUuaAppbmRleCBmN2QzNWEyLi5lOWRmMTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jYWNoZS5oCkBAIC0xMyw0ICsxMyw2IEBACiAjZGVmaW5lICAgICAgICBTTVBfQ0FDSEVfQllURVNfU0hJRlQJNgogI2RlZmluZSAgICAgICAgU01QX0NBQ0hFX0JZVEVTCQkoMSA8PCBTTVBfQ0FDSEVfQllURVNfU0hJRlQpIC8qIEwyIGNhY2hlIGxpbmUgc2l6ZS4gKi8KIAorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NwdWRhdGEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCmluZGV4IDc0ZGU3OWQuLjlkNmE2ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY3B1ZGF0YS5oCkBAIC0xLDQxICsxLDIyNyBAQAogLyogY3B1ZGF0YS5oOiBQZXItY3B1IHBhcmFtZXRlcnMuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KIAogI2lmbmRlZiBfU1BBUkM2NF9DUFVEQVRBX0gKICNkZWZpbmUgX1NQQVJDNjRfQ1BVREFUQV9ICiAKKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS9hc2kuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8qIERjYWNoZSBsaW5lIDEgKi8KIAl1bnNpZ25lZCBpbnQJX19zb2Z0aXJxX3BlbmRpbmc7IC8qIG11c3QgYmUgMXN0LCBzZWUgcnRyYXAuUyAqLwogCXVuc2lnbmVkIGludAltdWx0aXBsaWVyOwogCXVuc2lnbmVkIGludAljb3VudGVyOwotCXVuc2lnbmVkIGludAlpZGxlX3ZvbHVtZTsKKwl1bnNpZ25lZCBpbnQJX19wYWQxOwogCXVuc2lnbmVkIGxvbmcJY2xvY2tfdGljazsJLyogJXRpY2sncyBwZXIgc2Vjb25kICovCiAJdW5zaWduZWQgbG9uZwl1ZGVsYXlfdmFsOwogCi0JLyogRGNhY2hlIGxpbmUgMiAqLwotCXVuc2lnbmVkIGludAlwZ2NhY2hlX3NpemU7Ci0JdW5zaWduZWQgaW50CV9fcGFkMTsKLQl1bnNpZ25lZCBsb25nCSpwdGVfY2FjaGVbMl07Ci0JdW5zaWduZWQgbG9uZwkqcGdkX2NhY2hlOwotCi0JLyogRGNhY2hlIGxpbmUgMywgcmFyZWx5IHVzZWQgKi8KKwkvKiBEY2FjaGUgbGluZSAyLCByYXJlbHkgdXNlZCAqLwogCXVuc2lnbmVkIGludAlkY2FjaGVfc2l6ZTsKIAl1bnNpZ25lZCBpbnQJZGNhY2hlX2xpbmVfc2l6ZTsKIAl1bnNpZ25lZCBpbnQJaWNhY2hlX3NpemU7CiAJdW5zaWduZWQgaW50CWljYWNoZV9saW5lX3NpemU7CiAJdW5zaWduZWQgaW50CWVjYWNoZV9zaXplOwogCXVuc2lnbmVkIGludAllY2FjaGVfbGluZV9zaXplOwotCXVuc2lnbmVkIGludAlfX3BhZDI7CiAJdW5zaWduZWQgaW50CV9fcGFkMzsKKwl1bnNpZ25lZCBpbnQJX19wYWQ0OwogfSBjcHVpbmZvX3NwYXJjOwogCiBERUNMQVJFX1BFUl9DUFUoY3B1aW5mb19zcGFyYywgX19jcHVfZGF0YSk7CiAjZGVmaW5lIGNwdV9kYXRhKF9fY3B1KQkJcGVyX2NwdShfX2NwdV9kYXRhLCAoX19jcHUpKQogI2RlZmluZSBsb2NhbF9jcHVfZGF0YSgpCV9fZ2V0X2NwdV92YXIoX19jcHVfZGF0YSkKIAorLyogVHJhcCBoYW5kbGluZyBjb2RlIG5lZWRzIHRvIGdldCBhdCBhIGZldyBjcml0aWNhbCB2YWx1ZXMgdXBvbgorICogdHJhcCBlbnRyeSBhbmQgdG8gcHJvY2VzcyBUU0IgbWlzc2VzLiAgVGhlc2UgY2Fubm90IGJlIGluIHRoZQorICogcGVyX2NwdSgpIGFyZWEgYXMgd2UgcmVhbGx5IG5lZWQgdG8gbG9jayB0aGVtIGludG8gdGhlIFRMQiBhbmQKKyAqIHRodXMgbWFrZSB0aGVtIHBhcnQgb2YgdGhlIG1haW4ga2VybmVsIGltYWdlLiAgQXMgYSByZXN1bHQgd2UKKyAqIHRyeSB0byBtYWtlIHRoaXMgYXMgc21hbGwgYXMgcG9zc2libGUuCisgKgorICogVGhpcyBpcyBwYWRkZWQgb3V0IGFuZCBhbGlnbmVkIHRvIDY0LWJ5dGVzIHRvIGF2b2lkIGZhbHNlIHNoYXJpbmcKKyAqIG9uIFNNUC4KKyAqLworCisvKiBJZiB5b3UgbW9kaWZ5IHRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlLCBwbGVhc2UgdXBkYXRlCisgKiBUUkFQX0JMT0NLX1NaX1NISUZUIGJlbG93LgorICovCitzdHJ1Y3QgdGhyZWFkX2luZm87CitzdHJ1Y3QgdHJhcF9wZXJfY3B1IHsKKy8qIEQtY2FjaGUgbGluZSAxOiBCYXNpYyB0aHJlYWQgaW5mb3JtYXRpb24sIGNwdSBhbmQgZGV2aWNlIG1vbmRvIHF1ZXVlcyAqLworCXN0cnVjdCB0aHJlYWRfaW5mbwkqdGhyZWFkOworCXVuc2lnbmVkIGxvbmcJCXBnZF9wYWRkcjsKKwl1bnNpZ25lZCBsb25nCQljcHVfbW9uZG9fcGE7CisJdW5zaWduZWQgbG9uZwkJZGV2X21vbmRvX3BhOworCisvKiBELWNhY2hlIGxpbmUgMjogRXJyb3IgTW9uZG8gUXVldWUgYW5kIGtlcm5lbCBidWZmZXIgcG9pbnRlcnMgKi8KKwl1bnNpZ25lZCBsb25nCQlyZXN1bV9tb25kb19wYTsKKwl1bnNpZ25lZCBsb25nCQlyZXN1bV9rZXJuZWxfYnVmX3BhOworCXVuc2lnbmVkIGxvbmcJCW5vbnJlc3VtX21vbmRvX3BhOworCXVuc2lnbmVkIGxvbmcJCW5vbnJlc3VtX2tlcm5lbF9idWZfcGE7CisKKy8qIERjYWNoZSBsaW5lcyAzLCA0LCA1LCBhbmQgNjogSHlwZXJ2aXNvciBGYXVsdCBTdGF0dXMgKi8KKwlzdHJ1Y3QgaHZfZmF1bHRfc3RhdHVzCWZhdWx0X2luZm87CisKKy8qIERjYWNoZSBsaW5lIDc6IFBoeXNpY2FsIGFkZHJlc3NlcyBvZiBDUFUgc2VuZCBtb25kbyBibG9jayBhbmQgQ1BVIGxpc3QuICAqLworCXVuc2lnbmVkIGxvbmcJCWNwdV9tb25kb19ibG9ja19wYTsKKwl1bnNpZ25lZCBsb25nCQljcHVfbGlzdF9wYTsKKwl1bnNpZ25lZCBsb25nCQl0c2JfaHVnZTsKKwl1bnNpZ25lZCBsb25nCQl0c2JfaHVnZV90ZW1wOworCisvKiBEY2FjaGUgbGluZSA4OiBVbnVzZWQsIG5lZWRlZCB0byBrZWVwIHRyYXBfYmxvY2sgYSBwb3dlci1vZi0yIGluIHNpemUuICAqLworCXVuc2lnbmVkIGxvbmcJCV9fcGFkMls0XTsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKK2V4dGVybiBzdHJ1Y3QgdHJhcF9wZXJfY3B1IHRyYXBfYmxvY2tbTlJfQ1BVU107CitleHRlcm4gdm9pZCBpbml0X2N1cl9jcHVfdHJhcChzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CitleHRlcm4gdm9pZCBzZXR1cF90YmEodm9pZCk7CisKK3N0cnVjdCBjcHVpZF9wYXRjaF9lbnRyeSB7CisJdW5zaWduZWQgaW50CWFkZHI7CisJdW5zaWduZWQgaW50CWNoZWV0YWhfc2FmYXJpWzRdOworCXVuc2lnbmVkIGludAljaGVldGFoX2pidXNbNF07CisJdW5zaWduZWQgaW50CXN0YXJmaXJlWzRdOworCXVuc2lnbmVkIGludAlzdW40dls0XTsKK307CitleHRlcm4gc3RydWN0IGNwdWlkX3BhdGNoX2VudHJ5IF9fY3B1aWRfcGF0Y2gsIF9fY3B1aWRfcGF0Y2hfZW5kOworCitzdHJ1Y3Qgc3VuNHZfMWluc25fcGF0Y2hfZW50cnkgeworCXVuc2lnbmVkIGludAlhZGRyOworCXVuc2lnbmVkIGludAlpbnNuOworfTsKK2V4dGVybiBzdHJ1Y3Qgc3VuNHZfMWluc25fcGF0Y2hfZW50cnkgX19zdW40dl8xaW5zbl9wYXRjaCwKKwlfX3N1bjR2XzFpbnNuX3BhdGNoX2VuZDsKKworc3RydWN0IHN1bjR2XzJpbnNuX3BhdGNoX2VudHJ5IHsKKwl1bnNpZ25lZCBpbnQJYWRkcjsKKwl1bnNpZ25lZCBpbnQJaW5zbnNbMl07Cit9OworZXh0ZXJuIHN0cnVjdCBzdW40dl8yaW5zbl9wYXRjaF9lbnRyeSBfX3N1bjR2XzJpbnNuX3BhdGNoLAorCV9fc3VuNHZfMmluc25fcGF0Y2hfZW5kOworCisjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCisKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX1RIUkVBRAkJMHgwMAorI2RlZmluZSBUUkFQX1BFUl9DUFVfUEdEX1BBRERSCQkweDA4CisjZGVmaW5lIFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fUEEJMHgxMAorI2RlZmluZSBUUkFQX1BFUl9DUFVfREVWX01PTkRPX1BBCTB4MTgKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX1JFU1VNX01PTkRPX1BBCTB4MjAKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX1JFU1VNX0tCVUZfUEEJMHgyOAorI2RlZmluZSBUUkFQX1BFUl9DUFVfTk9OUkVTVU1fTU9ORE9fUEEJMHgzMAorI2RlZmluZSBUUkFQX1BFUl9DUFVfTk9OUkVTVU1fS0JVRl9QQQkweDM4CisjZGVmaW5lIFRSQVBfUEVSX0NQVV9GQVVMVF9JTkZPCQkweDQwCisjZGVmaW5lIFRSQVBfUEVSX0NQVV9DUFVfTU9ORE9fQkxPQ0tfUEEJMHhjMAorI2RlZmluZSBUUkFQX1BFUl9DUFVfQ1BVX0xJU1RfUEEJMHhjOAorI2RlZmluZSBUUkFQX1BFUl9DUFVfVFNCX0hVR0UJCTB4ZDAKKyNkZWZpbmUgVFJBUF9QRVJfQ1BVX1RTQl9IVUdFX1RFTVAJMHhkOAorCisjZGVmaW5lIFRSQVBfQkxPQ0tfU1pfU0hJRlQJCTgKKworI2luY2x1ZGUgPGFzbS9zY3JhdGNocGFkLmg+CisKKyNkZWZpbmUgX19HRVRfQ1BVSUQoUkVHKQkJCQlcCisJLyogU3BpdGZpcmUgaW1wbGVtZW50YXRpb24gKGRlZmF1bHQpLiAqLwlcCis2NjE6CWxkeGEJCVslZzBdIEFTSV9VUEFfQ09ORklHLCBSRUc7CVwKKwlzcmx4CQlSRUcsIDE3LCBSRUc7CQkJXAorCSBhbmQJCVJFRywgMHgxZiwgUkVHOwkJCVwKKwlub3A7CQkJCQkJXAorCS5zZWN0aW9uCS5jcHVpZF9wYXRjaCwgImF4IjsJCVwKKwkvKiBJbnN0cnVjdGlvbiBsb2NhdGlvbi4gKi8JCQlcCisJLndvcmQJCTY2MWI7CQkJCVwKKwkvKiBDaGVldGFoIFNhZmFyaSBpbXBsZW1lbnRhdGlvbi4gKi8JCVwKKwlsZHhhCQlbJWcwXSBBU0lfU0FGQVJJX0NPTkZJRywgUkVHOwlcCisJc3JseAkJUkVHLCAxNywgUkVHOwkJCVwKKwlhbmQJCVJFRywgMHgzZmYsIFJFRzsJCVwKKwlub3A7CQkJCQkJXAorCS8qIENoZWV0YWggSkJVUyBpbXBsZW1lbnRhdGlvbi4gKi8JCVwKKwlsZHhhCQlbJWcwXSBBU0lfSkJVU19DT05GSUcsIFJFRzsJXAorCXNybHgJCVJFRywgMTcsIFJFRzsJCQlcCisJYW5kCQlSRUcsIDB4MWYsIFJFRzsJCQlcCisJbm9wOwkJCQkJCVwKKwkvKiBTdGFyZmlyZSBpbXBsZW1lbnRhdGlvbi4gKi8JCQlcCisJc2V0aGkJCSVoaSgweDFmZmY0MDAwMGQwID4+IDkpLCBSRUc7CVwKKwlzbGx4CQlSRUcsIDksIFJFRzsJCQlcCisJb3IJCVJFRywgMHhkMCwgUkVHOwkJCVwKKwlsZHV3YQkJW1JFR10gQVNJX1BIWVNfQllQQVNTX0VDX0UsIFJFRztcCisJLyogc3VuNHYgaW1wbGVtZW50YXRpb24uICovCQkJXAorCW1vdgkJU0NSQVRDSFBBRF9DUFVJRCwgUkVHOwkJXAorCWxkeGEJCVtSRUddIEFTSV9TQ1JBVENIUEFELCBSRUc7CVwKKwlub3A7CQkJCQkJXAorCW5vcDsJCQkJCQlcCisJLnByZXZpb3VzOworCisjaWZkZWYgQ09ORklHX1NNUAorCisjZGVmaW5lIFRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKKwlfX0dFVF9DUFVJRChUTVApCQkJXAorCXNldGhpCSVoaSh0cmFwX2Jsb2NrKSwgREVTVDsJCVwKKwlzbGx4CVRNUCwgVFJBUF9CTE9DS19TWl9TSElGVCwgVE1QOwlcCisJb3IJREVTVCwgJWxvKHRyYXBfYmxvY2spLCBERVNUOwlcCisJYWRkCURFU1QsIFRNUCwgREVTVDsJCVwKKworLyogQ2xvYmJlcnMgVE1QLCBjdXJyZW50IGFkZHJlc3Mgc3BhY2UgUEdEIHBoeXMgYWRkcmVzcyBpbnRvIERFU1QuICAqLworI2RlZmluZSBUUkFQX0xPQURfUEdEX1BIWVMoREVTVCwgVE1QKQkJXAorCVRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKKwlsZHgJW0RFU1QgKyBUUkFQX1BFUl9DUFVfUEdEX1BBRERSXSwgREVTVDsKKworLyogQ2xvYmJlcnMgVE1QLCBsb2FkcyBsb2NhbCBwcm9jZXNzb3IncyBJUlEgd29yayBhcmVhIGludG8gREVTVC4gICovCisjZGVmaW5lIFRSQVBfTE9BRF9JUlFfV09SSyhERVNULCBUTVApCQlcCisJX19HRVRfQ1BVSUQoVE1QKQkJCVwKKwlzZXRoaQklaGkoX19pcnFfd29yayksIERFU1Q7CQlcCisJc2xseAlUTVAsIDYsIFRNUDsJCQlcCisJb3IJREVTVCwgJWxvKF9faXJxX3dvcmspLCBERVNUOwlcCisJYWRkCURFU1QsIFRNUCwgREVTVDsKKworLyogQ2xvYmJlcnMgVE1QLCBsb2FkcyBERVNUIHdpdGggY3VycmVudCB0aHJlYWQgaW5mbyBwb2ludGVyLiAgKi8KKyNkZWZpbmUgVFJBUF9MT0FEX1RIUkVBRF9SRUcoREVTVCwgVE1QKQkJXAorCVRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKKwlsZHgJW0RFU1QgKyBUUkFQX1BFUl9DUFVfVEhSRUFEXSwgREVTVDsKKworLyogR2l2ZW4gdGhlIGN1cnJlbnQgdGhyZWFkIGluZm8gcG9pbnRlciBpbiBUSFIsIGxvYWQgdGhlIHBlci1jcHUKKyAqIGFyZWEgYmFzZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzb3IgaW50byBERVNULiAgUkVHMSwgUkVHMiwgYW5kIFJFRzMgYXJlCisgKiBjbG9iYmVyZWQuCisgKgorICogWW91IGFic29sdXRlbHkgY2Fubm90IHVzZSBERVNUIGFzIGEgdGVtcG9yYXJ5IGluIHRoaXMgY29kZS4gIFRoZQorICogcmVhc29uIGlzIHRoYXQgdHJhcHMgY2FuIGhhcHBlbiBkdXJpbmcgZXhlY3V0aW9uLCBhbmQgcmV0dXJuIGZyb20KKyAqIHRyYXAgd2lsbCBsb2FkIHRoZSBmdWxseSByZXNvbHZlZCBERVNUIHBlci1jcHUgYmFzZS4gIFRoaXMgY2FuIGNvcnJ1cHQKKyAqIHRoZSBjYWxjdWxhdGlvbnMgZG9uZSBieSB0aGUgbWFjcm8gbWlkLXN0cmVhbS4KKyAqLworI2RlZmluZSBMT0FEX1BFUl9DUFVfQkFTRShERVNULCBUSFIsIFJFRzEsIFJFRzIsIFJFRzMpCVwKKwlsZHViCVtUSFIgKyBUSV9DUFVdLCBSRUcxOwkJCVwKKwlzZXRoaQklaGkoX19wZXJfY3B1X3NoaWZ0KSwgUkVHMzsJCVwKKwlzZXRoaQklaGkoX19wZXJfY3B1X2Jhc2UpLCBSRUcyOwkJXAorCWxkeAlbUkVHMyArICVsbyhfX3Blcl9jcHVfc2hpZnQpXSwgUkVHMzsJXAorCWxkeAlbUkVHMiArICVsbyhfX3Blcl9jcHVfYmFzZSldLCBSRUcyOwlcCisJc2xseAlSRUcxLCBSRUczLCBSRUczOwkJCVwKKwlhZGQJUkVHMywgUkVHMiwgREVTVDsKKworI2Vsc2UKKworI2RlZmluZSBUUkFQX0xPQURfVFJBUF9CTE9DSyhERVNULCBUTVApCQlcCisJc2V0aGkJJWhpKHRyYXBfYmxvY2spLCBERVNUOwkJXAorCW9yCURFU1QsICVsbyh0cmFwX2Jsb2NrKSwgREVTVDsJXAorCisvKiBVbmlwcm9jZXNzb3IgdmVyc2lvbnMsIHdlIGtub3cgdGhlIGNwdWlkIGlzIHplcm8uICAqLworI2RlZmluZSBUUkFQX0xPQURfUEdEX1BIWVMoREVTVCwgVE1QKQkJXAorCVRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKKwlsZHgJW0RFU1QgKyBUUkFQX1BFUl9DUFVfUEdEX1BBRERSXSwgREVTVDsKKworI2RlZmluZSBUUkFQX0xPQURfSVJRX1dPUksoREVTVCwgVE1QKQkJXAorCXNldGhpCSVoaShfX2lycV93b3JrKSwgREVTVDsJCVwKKwlvcglERVNULCAlbG8oX19pcnFfd29yayksIERFU1Q7CisKKyNkZWZpbmUgVFJBUF9MT0FEX1RIUkVBRF9SRUcoREVTVCwgVE1QKQkJXAorCVRSQVBfTE9BRF9UUkFQX0JMT0NLKERFU1QsIFRNUCkJCVwKKwlsZHgJW0RFU1QgKyBUUkFQX1BFUl9DUFVfVEhSRUFEXSwgREVTVDsKKworLyogTm8gcGVyLWNwdSBhcmVhcyBvbiB1bmlwcm9jZXNzb3IsIHNvIG5vIG5lZWQgdG8gbG9hZCBERVNULiAgKi8KKyNkZWZpbmUgTE9BRF9QRVJfQ1BVX0JBU0UoREVTVCwgVEhSLCBSRUcxLCBSRUcyLCBSRUczKQorCisjZW5kaWYgLyogIShDT05GSUdfU01QKSAqLworCiAjZW5kaWYgLyogX1NQQVJDNjRfQ1BVREFUQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2VsZi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9lbGYuaAppbmRleCA2OTUzOWE4Li4zMDNkODVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZWxmLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3NwaXRmaXJlLmg+CiAjZW5kaWYKIAogLyoKQEAgLTY4LDYgKzY5LDcgQEAKICNkZWZpbmUgSFdDQVBfU1BBUkNfTVVMRElWICAgICAgOAogI2RlZmluZSBIV0NBUF9TUEFSQ19WOQkJMTYKICNkZWZpbmUgSFdDQVBfU1BBUkNfVUxUUkEzCTMyCisjZGVmaW5lIEhXQ0FQX1NQQVJDX0JMS0lOSVQJNjQKIAogLyoKICAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgpAQCAtMTQ1LDExICsxNDcsMjEgQEAKICAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCiAKIC8qIE9uIFVsdHJhLCB3ZSBzdXBwb3J0IGFsbCBvZiB0aGUgdjggY2FwYWJpbGl0aWVzLiAqLwotI2RlZmluZSBFTEZfSFdDQVAJKChIV0NBUF9TUEFSQ19GTFVTSCB8IEhXQ0FQX1NQQVJDX1NUQkFSIHwgXAotCQkJICBIV0NBUF9TUEFSQ19TV0FQIHwgSFdDQVBfU1BBUkNfTVVMRElWIHwgXAotCQkJICBIV0NBUF9TUEFSQ19WOSkgfCBcCi0JCQkgKCh0bGJfdHlwZSA9PSBjaGVldGFoIHx8IHRsYl90eXBlID09IGNoZWV0YWhfcGx1cykgPyBcCi0JCQkgIEhXQ0FQX1NQQVJDX1VMVFJBMyA6IDApKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc3BhcmM2NF9lbGZfaHdjYXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY2FwID0gKEhXQ0FQX1NQQVJDX0ZMVVNIIHwgSFdDQVBfU1BBUkNfU1RCQVIgfAorCQkJICAgIEhXQ0FQX1NQQVJDX1NXQVAgfCBIV0NBUF9TUEFSQ19NVUxESVYgfAorCQkJICAgIEhXQ0FQX1NQQVJDX1Y5KTsKKworCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoIHx8IHRsYl90eXBlID09IGNoZWV0YWhfcGx1cykKKwkJY2FwIHw9IEhXQ0FQX1NQQVJDX1VMVFJBMzsKKwllbHNlIGlmICh0bGJfdHlwZSA9PSBoeXBlcnZpc29yKQorCQljYXAgfD0gSFdDQVBfU1BBUkNfQkxLSU5JVDsKKworCXJldHVybiBjYXA7Cit9CisKKyNkZWZpbmUgRUxGX0hXQ0FQCXNwYXJjNjRfZWxmX2h3Y2FwKCk7CiAKIC8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgogICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZnV0ZXguaAppbmRleCA2YTMzMmE5Li4zNGM0YjQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mdXRleC5oCkBAIC0xLDYgKzEsODYgQEAKLSNpZm5kZWYgX0FTTV9GVVRFWF9ICi0jZGVmaW5lIF9BU01fRlVURVhfSAorI2lmbmRlZiBfU1BBUkM2NF9GVVRFWF9ICisjZGVmaW5lIF9TUEFSQzY0X0ZVVEVYX0gKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Z1dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2VuZGlmCisjZGVmaW5lIF9fZnV0ZXhfY2FzX29wKGluc24sIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJXAorCSJcbjE6CWxkdXdhCVslM10gJSVhc2ksICUyXG4iCQlcCisJIgkiIGluc24gIlxuIgkJCQlcCisJIjI6CWNhc2EJWyUzXSAlJWFzaSwgJTIsICUxXG4iCQlcCisJIgljbXAJJTIsICUxXG4iCQkJXAorCSIJYm5lLHBuCSUlaWNjLCAxYlxuIgkJCVwKKwkiCSBtb3YJMCwgJTBcbiIJCQlcCisJIjM6XG4iCQkJCQkJXAorCSIJLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG4iCVwKKwkiCS5hbGlnbgk0XG4iCQkJCVwKKwkiNDoJYmEJM2JcbiIJCQkJXAorCSIJIG1vdgklNSwgJTBcbiIJCQlcCisJIgkucHJldmlvdXNcbiIJCQkJXAorCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAorCSIJLmFsaWduCTRcbiIJCQkJXAorCSIJLndvcmQJMWIsIDRiXG4iCQkJXAorCSIJLndvcmQJMmIsIDRiXG4iCQkJXAorCSIJLnByZXZpb3VzXG4iCQkJCVwKKwk6ICI9JnIiIChyZXQpLCAiPSZyIiAob2xkdmFsKSwgIj0mciIgKHRlbSkJXAorCTogInIiICh1YWRkciksICJyIiAob3BhcmcpLCAiaSIgKC1FRkFVTFQpCVwKKwk6ICJtZW1vcnkiKQorCitzdGF0aWMgaW5saW5lIGludCBmdXRleF9hdG9taWNfb3BfaW51c2VyKGludCBlbmNvZGVkX29wLCBpbnQgX191c2VyICp1YWRkcikKK3sKKwlpbnQgb3AgPSAoZW5jb2RlZF9vcCA+PiAyOCkgJiA3OworCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKKwlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKKwlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOworCWludCBvbGR2YWwgPSAwLCByZXQsIHRlbTsKKworCWlmICh1bmxpa2VseSghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZihpbnQpKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICh1bmxpa2VseSgoKCh1bnNpZ25lZCBsb25nKSB1YWRkcikgJiAweDNVTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKKwkJb3BhcmcgPSAxIDw8IG9wYXJnOworCisJaW5jX3ByZWVtcHRfY291bnQoKTsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIEZVVEVYX09QX1NFVDoKKwkJX19mdXRleF9jYXNfb3AoIm1vdlx0JTQsICUxIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQUREOgorCQlfX2Z1dGV4X2Nhc19vcCgiYWRkXHQlMiwgJTQsICUxIiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfT1I6CisJCV9fZnV0ZXhfY2FzX29wKCJvclx0JTIsICU0LCAlMSIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FORE46CisJCV9fZnV0ZXhfY2FzX29wKCJhbmRcdCUyLCAlNCwgJTEiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9YT1I6CisJCV9fZnV0ZXhfY2FzX29wKCJ4b3JcdCUyLCAlNCwgJTEiLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1NZUzsKKwl9CisKKwlkZWNfcHJlZW1wdF9jb3VudCgpOworCisJaWYgKCFyZXQpIHsKKwkJc3dpdGNoIChjbXApIHsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfRVE6IHJldCA9IChvbGR2YWwgPT0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX05FOiByZXQgPSAob2xkdmFsICE9IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9MVDogcmV0ID0gKG9sZHZhbCA8IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9HRTogcmV0ID0gKG9sZHZhbCA+PSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTEU6IHJldCA9IChvbGR2YWwgPD0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0dUOiByZXQgPSAob2xkdmFsID4gY21wYXJnKTsgYnJlYWs7CisJCWRlZmF1bHQ6IHJldCA9IC1FTk9TWVM7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmIC8qICEoX1NQQVJDNjRfRlVURVhfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaGVhZC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9oZWFkLmgKaW5kZXggMGFiZDNhNi4uNjc5NjBhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9oZWFkLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9oZWFkLmgKQEAgLTQsMTIgKzQsMjEgQEAKIAogI2luY2x1ZGUgPGFzbS9wc3RhdGUuaD4KIAorCS8qIHdycHIJJWcwLCB2YWwsICVnbCAqLworI2RlZmluZSBTRVRfR0wodmFsKQlcCisJLndvcmQJMHhhMTkwMjAwMCB8IHZhbAorCisJLyogcmRwciAlZ2wsICVnTiAqLworI2RlZmluZSBHRVRfR0xfR0xPQkFMKE4pCVwKKwkud29yZAkweDgxNTQwMDAwIHwgKE4gPDwgMjUpCisKICNkZWZpbmUgS0VSTkJBU0UJMHg0MDAwMDAKIAogI2RlZmluZQlQVFJFR1NfT0ZGCShTVEFDS19CSUFTICsgU1RBQ0tGUkFNRV9TWikKIAogI2RlZmluZSBfX0NIRUVUQUhfSUQJMHgwMDNlMDAxNAogI2RlZmluZSBfX0pBTEFQRU5PX0lECTB4MDAzZTAwMTYKKyNkZWZpbmUgX19TRVJSQU5PX0lECTB4MDAzZTAwMjIKIAogI2RlZmluZSBDSEVFVEFIX01BTlVGCQkweDAwM2UKICNkZWZpbmUgQ0hFRVRBSF9JTVBMCQkweDAwMTQgLyogVWx0cmEtSUlJICAgKi8KQEAgLTE5LDYgKzI4LDEyIEBACiAjZGVmaW5lIFBBTlRIRVJfSU1QTAkJMHgwMDE5IC8qIFVsdHJhLUlWKyAgICovCiAjZGVmaW5lIFNFUlJBTk9fSU1QTAkJMHgwMDIyIC8qIFVsdHJhLUlJSWkrICovCiAKKyNkZWZpbmUgQlJBTkNIX0lGX1NVTjRWKHRtcDEsbGFiZWwpCQlcCisJc2V0aGkJJWhpKGlzX3N1bjR2KSwgJXRtcDE7CQlcCisJbGR1dwlbJXRtcDEgKyAlbG8oaXNfc3VuNHYpXSwgJXRtcDE7IFwKKwlicm56LHBuCSV0bXAxLCBsYWJlbDsJCQlcCisJIG5vcAorCiAjZGVmaW5lIEJSQU5DSF9JRl9DSEVFVEFIX0JBU0UodG1wMSx0bXAyLGxhYmVsKQlcCiAJcmRwcgkldmVyLCAldG1wMTsJCQlcCiAJc2V0aGkJJWhpKF9fQ0hFRVRBSF9JRCksICV0bXAyOwlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2h5cGVydmlzb3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaHlwZXJ2aXNvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMmJmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2h5cGVydmlzb3IuaApAQCAtMCwwICsxLDIxMjggQEAKKyNpZm5kZWYgX1NQQVJDNjRfSFlQRVJWSVNPUl9ICisjZGVmaW5lIF9TUEFSQzY0X0hZUEVSVklTT1JfSAorCisvKiBTdW40diBoeXBlcnZpc29yIGludGVyZmFjZXMgYW5kIGRlZmluZXMuCisgKgorICogSHlwZXJ2aXNvciBjYWxscyBhcmUgbWFkZSB2aWEgdHJhcHMgdG8gc29mdHdhcmUgdHJhcHMgbnVtYmVyIDB4ODAKKyAqIGFuZCBhYm92ZS4gIFJlZ2lzdGVycyAlbzAgdG8gJW81IHNlcnZlIGFzIGFyZ3VtZW50LCBzdGF0dXMsIGFuZAorICogcmV0dXJuIHZhbHVlIHJlZ2lzdGVycy4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHRoZXNlIHRyYXBzLiAgRmlyc3QgdGhlcmUgYXJlIHRoZSBub3JtYWwKKyAqICJmYXN0IHRyYXBzIiB3aGljaCB1c2Ugc29mdHdhcmUgdHJhcCAweDgwIGFuZCBlbmNvZGUgdGhlIGZ1bmN0aW9uCisgKiB0byBpbnZva2UgYnkgbnVtYmVyIGluIHJlZ2lzdGVyICVvNS4gIEFyZ3VtZW50IGFuZCByZXR1cm4gdmFsdWUKKyAqIGhhbmRsaW5nIGlzIGFzIGZvbGxvd3M6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgICVvNSAgfCBmdW5jdGlvbiBudW1iZXIgfCAgICAgdW5kZWZpbmVkICAgICB8CisgKiB8ICAlbzAgIHwgICBhcmd1bWVudCAwICAgIHwgICByZXR1cm4gc3RhdHVzICAgfAorICogfCAgJW8xICB8ICAgYXJndW1lbnQgMSAgICB8ICAgcmV0dXJuIHZhbHVlIDEgIHwKKyAqIHwgICVvMiAgfCAgIGFyZ3VtZW50IDIgICAgfCAgIHJldHVybiB2YWx1ZSAyICB8CisgKiB8ICAlbzMgIHwgICBhcmd1bWVudCAzICAgIHwgICByZXR1cm4gdmFsdWUgMyAgfAorICogfCAgJW80ICB8ICAgYXJndW1lbnQgNCAgICB8ICAgcmV0dXJuIHZhbHVlIDQgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIHNlY29uZCB0eXBlIGFyZSAiaHlwZXItZmFzdCB0cmFwcyIgd2hpY2ggZW5jb2RlIHRoZSBmdW5jdGlvbgorICogbnVtYmVyIGluIHRoZSBzb2Z0d2FyZSB0cmFwIG51bWJlciBpdHNlbGYuICBTbyB0aGVzZSB1c2UgdHJhcAorICogbnVtYmVycyA+IDB4ODAuICBUaGUgcmVnaXN0ZXIgdXNhZ2UgZm9yIGh5cGVyLWZhc3QgdHJhcHMgaXMgYXMKKyAqIGZvbGxvd3M6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgICVvMCAgfCAgIGFyZ3VtZW50IDAgICAgfCAgIHJldHVybiBzdGF0dXMgICB8CisgKiB8ICAlbzEgIHwgICBhcmd1bWVudCAxICAgIHwgICByZXR1cm4gdmFsdWUgMSAgfAorICogfCAgJW8yICB8ICAgYXJndW1lbnQgMiAgICB8ICAgcmV0dXJuIHZhbHVlIDIgIHwKKyAqIHwgICVvMyAgfCAgIGFyZ3VtZW50IDMgICAgfCAgIHJldHVybiB2YWx1ZSAzICB8CisgKiB8ICAlbzQgIHwgICBhcmd1bWVudCA0ICAgIHwgICByZXR1cm4gdmFsdWUgNCAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBSZWdpc3RlcnMgcHJvdmlkaW5nIGV4cGxpY2l0IGFyZ3VtZW50cyB0byB0aGUgaHlwZXJ2aXNvciBjYWxscworICogYXJlIHZvbGF0aWxlIGFjcm9zcyB0aGUgY2FsbC4gIFVwb24gcmV0dXJuIHRoZWlyIHZhbHVlcyBhcmUKKyAqIHVuZGVmaW5lZCB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgYXMgY29udGFpbmluZyBhIHBhcnRpY3VsYXIKKyAqIHJldHVybiB2YWx1ZSBieSB0aGUgc3BlY2lmaWMgY2FsbC4gIFRoZSByZXR1cm4gc3RhdHVzIGlzIGFsd2F5cworICogcmV0dXJuZWQgaW4gcmVnaXN0ZXIgJW8wLCB6ZXJvIGluZGljYXRlcyBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCisgKiB0aGUgaHlwZXJ2aXNvciBjYWxsIGFuZCBvdGhlciB2YWx1ZXMgaW5kaWNhdGUgYW4gZXJyb3Igc3RhdHVzIGFzCisgKiBkZWZpbmVkIGJlbG93LiAgU28sIGZvciBleGFtcGxlLCBpZiBhIGh5cGVyLWZhc3QgdHJhcCB0YWtlcworICogYXJndW1lbnRzIDAsIDEsIGFuZCAyLCB0aGVuICVvMCwgJW8xLCBhbmQgJW8yIGFyZSB2b2xhdGlsZSBhY3Jvc3MKKyAqIHRoZSBjYWxsIGFuZCAlbzMsICVvNCwgYW5kICVvNSB3b3VsZCBiZSBwcmVzZXJ2ZWQuCisgKgorICogSWYgdGhlIGh5cGVydmlzb3IgdHJhcCBpcyBpbnZhbGlkLCBvciB0aGUgZmFzdCB0cmFwIGZ1bmN0aW9uIG51bWJlcgorICogaXMgaW52YWxpZCwgSFZfRUJBRFRSQVAgd2lsbCBiZSByZXR1cm5lZCBpbiAlbzAuICBBbHNvLCBhbGwgNjQtYml0cworICogb2YgdGhlIGFyZ3VtZW50IGFuZCByZXR1cm4gdmFsdWVzIGFyZSBzaWduaWZpY2FudC4KKyAqLworCisvKiBUcmFwIG51bWJlcnMuICAqLworI2RlZmluZSBIVl9GQVNUX1RSQVAJCTB4ODAKKyNkZWZpbmUgSFZfTU1VX01BUF9BRERSX1RSQVAJMHg4MworI2RlZmluZSBIVl9NTVVfVU5NQVBfQUREUl9UUkFQCTB4ODQKKyNkZWZpbmUgSFZfVFRSQUNFX0FEREVOVFJZX1RSQVAJMHg4NQorI2RlZmluZSBIVl9DT1JFX1RSQVAJCTB4ZmYKKworLyogRXJyb3IgY29kZXMuICAqLworI2RlZmluZSBIVl9FT0sJCQkJMCAgLyogU3VjY2Vzc2Z1bCByZXR1cm4gICAgICAgICAgICAqLworI2RlZmluZSBIVl9FTk9DUFUJCQkxICAvKiBJbnZhbGlkIENQVSBpZCAgICAgICAgICAgICAgICovCisjZGVmaW5lIEhWX0VOT1JBRERSCQkJMiAgLyogSW52YWxpZCByZWFsIGFkZHJlc3MgICAgICAgICAqLworI2RlZmluZSBIVl9FTk9JTlRSCQkJMyAgLyogSW52YWxpZCBpbnRlcnJ1cHQgaWQgICAgICAgICAqLworI2RlZmluZSBIVl9FQkFEUEdTWgkJCTQgIC8qIEludmFsaWQgcGFnZXNpemUgZW5jb2RpbmcgICAgKi8KKyNkZWZpbmUgSFZfRUJBRFRTQgkJCTUgIC8qIEludmFsaWQgVFNCIGRlc2NyaXB0aW9uICAgICAgKi8KKyNkZWZpbmUgSFZfRUlOVkFMCQkJNiAgLyogSW52YWxpZCBhcmd1bWVudCAgICAgICAgICAgICAqLworI2RlZmluZSBIVl9FQkFEVFJBUAkJCTcgIC8qIEludmFsaWQgZnVuY3Rpb24gbnVtYmVyICAgICAgKi8KKyNkZWZpbmUgSFZfRUJBREFMSUdOCQkJOCAgLyogSW52YWxpZCBhZGRyZXNzIGFsaWdubWVudCAgICAqLworI2RlZmluZSBIVl9FV09VTERCTE9DSwkJCTkgIC8qIENhbm5vdCBjb21wbGV0ZSB3L28gYmxvY2tpbmcgKi8KKyNkZWZpbmUgSFZfRU5PQUNDRVNTCQkJMTAgLyogTm8gYWNjZXNzIHRvIHJlc291cmNlICAgICAgICAqLworI2RlZmluZSBIVl9FSU8JCQkJMTEgLyogSS9PIGVycm9yICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIVl9FQ1BVRVJST1IJCQkxMiAvKiBDUFUgaW4gZXJyb3Igc3RhdGUgICAgICAgICAgICovCisjZGVmaW5lIEhWX0VOT1RTVVBQT1JURUQJCTEzIC8qIEZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgICAgICAgKi8KKyNkZWZpbmUgSFZfRU5PTUFQCQkJMTQgLyogTm8gbWFwcGluZyBmb3VuZCAgICAgICAgICAgICAqLworI2RlZmluZSBIVl9FVE9PTUFOWQkJCTE1IC8qIFRvbyBtYW55IGl0ZW1zIHNwZWNpZmllZCAgICAgKi8KKworLyogbWFjaF9leGl0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9FWElUCisgKiBBUkcwOglleGl0IGNvZGUKKyAqIEVSUk9SUzoJVGhpcyBzZXJ2aWNlIGRvZXMgbm90IHJldHVybi4KKyAqCisgKiBTdG9wIGFsbCBDUFVzIGluIHRoZSB2aXJ0dWFsIGRvbWFpbiBhbmQgcGxhY2UgdGhlbSBpbnRvIHRoZSBzdG9wcGVkCisgKiBzdGF0ZS4gIFRoZSA2NC1iaXQgZXhpdCBjb2RlIG1heSBiZSBwYXNzZWQgdG8gYSBzZXJ2aWNlIGVudGl0eSBhcworICogdGhlIGRvbWFpbidzIGV4aXQgc3RhdHVzLiAgT24gc3lzdGVtcyB3aXRob3V0IGEgc2VydmljZSBlbnRpdHksIHRoZQorICogZG9tYWluIHdpbGwgdW5kZXJnbyBhIHJlc2V0LCBhbmQgdGhlIGJvb3QgZmlybXdhcmUgd2lsbCBiZQorICogcmVsb2FkZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHJldHVybiB0byB0aGUgZ3Vlc3QgdGhhdCBpbnZva2VzIGl0LgorICoKKyAqIE5vdGU6IEJ5IGNvbnZlbnRpb24gYW4gZXhpdCBjb2RlIG9mIHplcm8gZGVub3RlcyBhIHN1Y2Nlc3NmdWwgZXhpdCBieQorICogICAgICAgdGhlIGd1ZXN0IGNvZGUuICBBIG5vbi16ZXJvIGV4aXQgY29kZSBkZW5vdGVzIGEgZ3Vlc3Qgc3BlY2lmaWMKKyAqICAgICAgIGVycm9yIGluZGljYXRpb24uCisgKgorICovCisjZGVmaW5lIEhWX0ZBU1RfTUFDSF9FWElUCQkweDAwCisKKy8qIERvbWFpbiBzZXJ2aWNlcy4gICovCisKKy8qIG1hY2hfZGVzYygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfREVTQworICogQVJHMDoJYnVmZmVyCisgKiBBUkcxOglsZW5ndGgKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbGVuZ3RoCisgKiBFUlJPUlM6CUhWX0VCQURBTElHTglCdWZmZXIgaXMgYmFkbHkgYWxpZ25lZAorICoJCUhWX0VOT1JBRERSCUJ1ZmZlciBpcyB0byBhbiBpbGxlZ2FsIHJlYWwgYWRkcmVzcy4KKyAqCQlIVl9FSU5WQUwJQnVmZmVyIGxlbmd0aCBpcyB0b28gc21hbGwgZm9yIGNvbXBsZXRlCisgKgkJCQltYWNoaW5lIGRlc2NyaXB0aW9uLgorICoKKyAqIENvcHkgdGhlIG1vc3QgY3VycmVudCBtYWNoaW5lIGRlc2NyaXB0aW9uIGludG8gdGhlIGJ1ZmZlciBpbmRpY2F0ZWQKKyAqIGJ5IHRoZSByZWFsIGFkZHJlc3MgaW4gQVJHMC4gIFRoZSBidWZmZXIgcHJvdmlkZWQgbXVzdCBiZSAxNiBieXRlCisgKiBhbGlnbmVkLiAgVXBvbiBzdWNjZXNzIG9yIEhWX0VJTlZBTCwgdGhpcyBzZXJ2aWNlIHJldHVybnMgdGhlCisgKiBhY3R1YWwgc2l6ZSBvZiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBpbiB0aGUgUkVUMSByZXR1cm4gdmFsdWUuCisgKgorICogTm90ZTogQSBtZXRob2Qgb2YgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIGJ1ZmZlciBzaXplIGZvciB0aGUKKyAqICAgICAgIG1hY2hpbmUgZGVzY3JpcHRpb24gaXMgdG8gZmlyc3QgY2FsbCB0aGlzIHNlcnZpY2Ugd2l0aCBhIGJ1ZmZlcgorICogICAgICAgbGVuZ3RoIG9mIDAgYnl0ZXMuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NQUNIX0RFU0MJCTB4MDEKKworLyogbWFjaF9leGl0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9TSVIKKyAqIEVSUk9SUzoJVGhpcyBzZXJ2aWNlIGRvZXMgbm90IHJldHVybi4KKyAqCisgKiBQZXJmb3JtIGEgc29mdHdhcmUgaW5pdGlhdGVkIHJlc2V0IG9mIHRoZSB2aXJ0dWFsIG1hY2hpbmUgZG9tYWluLgorICogQWxsIENQVXMgYXJlIGNhcHR1cmVkIGFzIHNvb24gYXMgcG9zc2libGUsIGFsbCBoYXJkd2FyZSBkZXZpY2VzIGFyZQorICogcmV0dXJuZWQgdG8gdGhlIGVudHJ5IGRlZmF1bHQgc3RhdGUsIGFuZCB0aGUgZG9tYWluIGlzIHJlc3RhcnRlZCBhdAorICogdGhlIFNJUiAodHJhcCB0eXBlIDB4MDQpIHJlYWwgdHJhcCB0YWJsZSAoUlRCQSkgZW50cnkgcG9pbnQgb24gb25lCisgKiBvZiB0aGUgQ1BVcy4gIFRoZSBzaW5nbGUgQ1BVIHJlc3RhcnRlZCBpcyBzZWxlY3RlZCBhcyBkZXRlcm1pbmVkIGJ5CisgKiBwbGF0Zm9ybSBzcGVjaWZpYyBwb2xpY3kuICBNZW1vcnkgaXMgcHJlc2VydmVkIGFjcm9zcyB0aGlzCisgKiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NQUNIX1NJUgkJMHgwMgorCisvKiBtYWNoX3NldF9zb2Z0X3N0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTUFDSF9TRVRfU09GVF9TVEFURQorICogQVJHMDoJc29mdHdhcmUgc3RhdGUKKyAqIEFSRzE6CXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCXNvZnR3YXJlIHN0YXRlIG5vdCB2YWxpZCBvciBzb2Z0d2FyZSBzdGF0ZQorICoJCQkJZGVzY3JpcHRpb24gaXMgbm90IE5VTEwgdGVybWluYXRlZAorICoJCUVOT1JBRERSCXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIgaXMgbm90IGEKKyAqCQkJCXZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVCQURBTElHTkVECXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIGlzIG5vdCBjb3JyZWN0bHkKKyAqCQkJCWFsaWduZWQKKyAqCisgKiBUaGlzIGFsbG93cyB0aGUgZ3Vlc3QgdG8gcmVwb3J0IGl0J3Mgc29mdCBzdGF0ZSB0byB0aGUgaHlwZXJ2aXNvci4gIFRoZXJlCisgKiBhcmUgdHdvIHByaW1hcnkgY29tcG9uZW50cyB0byB0aGlzIHN0YXRlLiAgVGhlIGZpcnN0IHBhcnQgc3RhdGVzIHdoZXRoZXIKKyAqIHRoZSBndWVzdCBzb2Z0d2FyZSBpcyBydW5uaW5nIG9yIG5vdC4gIFRoZSBzZWNvbmQgY29udGFpbnRzIG9wdGlvbmFsCisgKiBkZXRhaWxzIHNwZWNpZmljIHRvIHRoZSBzb2Z0d2FyZS4KKyAqCisgKiBUaGUgc29mdHdhcmUgc3RhdGUgYXJndW1lbnQgaXMgZGVmaW5lZCBiZWxvdyBpbiBIVl9TT0ZUX1NUQVRFXyosIGFuZAorICogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGd1ZXN0IGlzIG9wZXJhdGluZyBub3JtYWxseSBvciBpbiBhIHRyYW5zaXRpb25hbAorICogc3RhdGUuCisgKgorICogVGhlIHNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIGFyZ3VtZW50IGlzIGEgcmVhbCBhZGRyZXNzIG9mIGEgZGF0YSBidWZmZXIKKyAqIG9mIHNpemUgMzItYnl0ZXMgYWxpZ25lZCBvbiBhIDMyLWJ5dGUgYm91bmRhcnkuICBJdCBpcyB0cmVhdGVkIGFzIGEgTlVMTAorICogdGVybWluYXRlZCA3LWJpdCBBU0NJSSBzdHJpbmcgb2YgdXAgdG8gMzEgY2hhcmFjdGVycyBub3QgaW5jbHVkaW5nIHRoZQorICogTlVMTCB0ZXJtaW5hdGlvbi4KKyAqLworI2RlZmluZSBIVl9GQVNUX01BQ0hfU0VUX1NPRlRfU1RBVEUJMHgwMworI2RlZmluZSAgSFZfU09GVF9TVEFURV9OT1JNQUwJCSAweDAxCisjZGVmaW5lICBIVl9TT0ZUX1NUQVRFX1RSQU5TSVRJT04JIDB4MDIKKworLyogbWFjaF9nZXRfc29mdF9zdGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01BQ0hfR0VUX1NPRlRfU1RBVEUKKyAqIEFSRzA6CXNvZnR3YXJlIHN0YXRlIGRlc2NyaXB0aW9uIHBvaW50ZXIKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJc29mdHdhcmUgc3RhdGUKKyAqIEVSUk9SUzoJRU5PUkFERFIJc29mdHdhcmUgc3RhdGUgZGVzY3JpcHRpb24gcG9pbnRlciBpcyBub3QgYQorICoJCQkJdmFsaWQgcmVhbCBhZGRyZXNzCisgKgkJRUJBREFMSUdORUQJc29mdHdhcmUgc3RhdGUgZGVzY3JpcHRpb24gaXMgbm90IGNvcnJlY3RseQorICoJCQkJYWxpZ25lZAorICoKKyAqIFJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBndWVzdCdzIHNvZnR3YXJlIHN0YXRlLiAgVGhlIHJ1bGVzCisgKiBmb3IgdGhlIHNvZnR3YXJlIHN0YXRlIHBvaW50ZXIgYXJlIHRoZSBzYW1lIGFzIGZvciBtYWNoX3NldF9zb2Z0X3N0YXRlKCkKKyAqIGFib3ZlLgorICovCisjZGVmaW5lIEhWX0ZBU1RfTUFDSF9HRVRfU09GVF9TVEFURQkweDA0CisKKy8qIENQVSBzZXJ2aWNlcy4KKyAqCisgKiBDUFVzIHJlcHJlc2VudCBkZXZpY2VzIHRoYXQgY2FuIGV4ZWN1dGUgc29mdHdhcmUgdGhyZWFkcy4gIEEgc2luZ2xlCisgKiBjaGlwIHRoYXQgY29udGFpbnMgbXVsdGlwbGUgY29yZXMgb3Igc3RyYW5kcyBpcyByZXByZXNlbnRlZCBhcworICogbXVsdGlwbGUgQ1BVcyB3aXRoIHVuaXF1ZSBDUFUgaWRlbnRpZmllcnMuICBDUFVzIGFyZSBleHBvcnRlZCB0bworICogT0JQIHZpYSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiAoYW5kIHRvIHRoZSBPUyB2aWEgdGhlIE9CUCBkZXZpY2UKKyAqIHRyZWUpLiAgQ1BVcyBhcmUgYWx3YXlzIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6IHN0b3BwZWQsIHJ1bm5pbmcsCisgKiBvciBlcnJvci4KKyAqCisgKiBBIENQVSBJRCBpcyBhIHByZS1hc3NpZ25lZCAxNi1iaXQgdmFsdWUgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEKKyAqIENQVSB3aXRoaW4gYSBsb2dpY2FsIGRvbWFpbi4gIE9wZXJhdGlvbnMgdGhhdCBhcmUgdG8gYmUgcGVyZm9ybWVkCisgKiBvbiBtdWx0aXBsZSBDUFVzIHNwZWNpZnkgdGhlbSB2aWEgYSBDUFUgbGlzdC4gIEEgQ1BVIGxpc3QgaXMgYW4KKyAqIGFycmF5IGluIHJlYWwgbWVtb3J5LCBvZiB3aGljaCBlYWNoIDE2LWJpdCB3b3JkIGlzIGEgQ1BVIElELiAgQ1BVCisgKiBsaXN0cyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlIEFQSSBhcyB0d28gYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzCisgKiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgKDE2LWJpdCB3b3JkcykgaW4gdGhlIENQVSBsaXN0LCBhbmQgdGhlCisgKiBzZWNvbmQgaXMgdGhlIChyZWFsIGFkZHJlc3MpIHBvaW50ZXIgdG8gdGhlIENQVSBJRCBsaXN0LgorICovCisKKy8qIGNwdV9zdGFydCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9TVEFSVAorICogQVJHMDoJQ1BVIElECisgKiBBUkcxOglQQworICogQVJHMToJUlRCQQorICogQVJHMToJdGFyZ2V0IEFSRzAKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFTk9DUFUJCUludmFsaWQgQ1BVIElECisgKgkJRUlOVkFMCQlUYXJnZXQgQ1BVIElEIGlzIG5vdCBpbiB0aGUgc3RvcHBlZCBzdGF0ZQorICoJCUVOT1JBRERSCUludmFsaWQgUEMgb3IgUlRCQSByZWFsIGFkZHJlc3MKKyAqCQlFQkFEQUxJR04JVW5hbGlnbmVkIFBDIG9yIHVuYWxpZ25lZCBSVEJBCisgKgkJRVdPVUxEQkxPQ0sJU3RhcnRpbmcgcmVzb3VyY2VzIGFyZSBub3QgYXZhaWxhYmxlCisgKgorICogU3RhcnQgQ1BVIHdpdGggZ2l2ZW4gQ1BVIElEIHdpdGggUEMgaW4gJXBjIGFuZCB3aXRoIGEgcmVhbCB0cmFwCisgKiBiYXNlIGFkZHJlc3MgdmFsdWUgb2YgUlRCQS4gIFRoZSBpbmRpY2F0ZWQgQ1BVIG11c3QgYmUgaW4gdGhlCisgKiBzdG9wcGVkIHN0YXRlLiAgVGhlIHN1cHBsaWVkIFJUQkEgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMjU2IGJ5dGUKKyAqIGJvdW5kYXJ5LiAgT24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB0aGUgc3BlY2lmaWVkIENQVSB3aWxsIGJlIGluCisgKiB0aGUgcnVubmluZyBzdGF0ZSBhbmQgd2lsbCBiZSBzdXBwbGllZCB3aXRoICJ0YXJnZXQgQVJHMCIgaW4gJW8wCisgKiBhbmQgUlRCQSBpbiAldGJhLgorICovCisjZGVmaW5lIEhWX0ZBU1RfQ1BVX1NUQVJUCQkweDEwCisKKy8qIGNwdV9zdG9wKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX1NUT1AKKyAqIEFSRzA6CUNQVSBJRAorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVOT0NQVQkJSW52YWxpZCBDUFUgSUQKKyAqCQlFSU5WQUwJCVRhcmdldCBDUFUgSUQgaXMgdGhlIGN1cnJlbnQgY3B1CisgKgkJRUlOVkFMCQlUYXJnZXQgQ1BVIElEIGlzIG5vdCBpbiB0aGUgcnVubmluZyBzdGF0ZQorICoJCUVXT1VMREJMT0NLCVN0b3BwaW5nIHJlc291cmNlcyBhcmUgbm90IGF2YWlsYWJsZQorICoJCUVOT1RTVVBQT1JURUQJTm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCisgKgorICogVGhlIHNwZWNpZmllZCBDUFUgaXMgc3RvcHBlZC4gIFRoZSBpbmRpY2F0ZWQgQ1BVIG11c3QgYmUgaW4gdGhlCisgKiBydW5uaW5nIHN0YXRlLiAgT24gY29tcGxldGlvbiwgaXQgd2lsbCBiZSBpbiB0aGUgc3RvcHBlZCBzdGF0ZS4gIEl0CisgKiBpcyBub3QgbGVnYWwgdG8gc3RvcCB0aGUgY3VycmVudCBDUFUuCisgKgorICogTm90ZTogQXMgdGhpcyBzZXJ2aWNlIGNhbm5vdCBiZSB1c2VkIHRvIHN0b3AgdGhlIGN1cnJlbnQgY3B1LCB0aGlzIHNlcnZpY2UKKyAqICAgICAgIG1heSBub3QgYmUgdXNlZCB0byBzdG9wIHRoZSBsYXN0IHJ1bm5pbmcgQ1BVIGluIGEgZG9tYWluLiAgVG8gc3RvcAorICogICAgICAgYW5kIGV4aXQgYSBydW5uaW5nIGRvbWFpbiwgYSBndWVzdCBtdXN0IHVzZSB0aGUgbWFjaF9leGl0KCkgc2VydmljZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NQVV9TVE9QCQkweDExCisKKy8qIGNwdV95aWVsZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9ZSUVMRAorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CU5vIHBvc3NpYmxlIGVycm9yLgorICoKKyAqIFN1c3BlbmQgZXhlY3V0aW9uIG9uIHRoZSBjdXJyZW50IENQVS4gIEV4ZWN1dGlvbiB3aWxsIHJlc3VtZSB3aGVuCisgKiBhbiBpbnRlcnJ1cHQgKGRldmljZSwgJXN0aWNrX2NvbXBhcmUsIG9yIGNyb3NzLWNhbGwpIGlzIHRhcmdldGVkIHRvCisgKiB0aGUgQ1BVLiAgT24gc29tZSBDUFVzLCB0aGlzIEFQSSBtYXkgYmUgdXNlZCBieSB0aGUgaHlwZXJ2aXNvciB0bworICogc2F2ZSBwb3dlciBieSBkaXNhYmxpbmcgaGFyZHdhcmUgc3RyYW5kcy4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NQVV9ZSUVMRAkJMHgxMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfY3B1X3lpZWxkKHZvaWQpOworI2VuZGlmCisKKy8qIGNwdV9xY29uZigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9RQ09ORgorICogQVJHMDoJcXVldWUKKyAqIEFSRzE6CWJhc2UgcmVhbCBhZGRyZXNzCisgKiBBUkcyOgludW1iZXIgb2YgZW50cmllcworICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVOT1JBRERSCUludmFsaWQgYmFzZSByZWFsIGFkZHJlc3MKKyAqCQlFSU5WQUwJCUludmFsaWQgcXVldWUgb3IgbnVtYmVyIG9mIGVudHJpZXMgaXMgbGVzcworICoJCQkJdGhhbiAyIG9yIHRvbyBsYXJnZS4KKyAqCQlFQkFEQUxJR04JQmFzZSByZWFsIGFkZHJlc3MgaXMgbm90IGNvcnJlY3RseSBhbGlnbmVkCisgKgkJCQlmb3Igc2l6ZS4KKyAqCisgKiBDb25maWd1cmUgdGhlIGdpdmVuIHF1ZXVlIHRvIGJlIHBsYWNlZCBhdCB0aGUgZ2l2ZW4gYmFzZSByZWFsCisgKiBhZGRyZXNzLCB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgZW50cmllcy4gIFRoZSBudW1iZXIgb2YgZW50cmllcworICogbXVzdCBiZSBhIHBvd2VyIG9mIDIuICBUaGUgYmFzZSByZWFsIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkCisgKiBleGFjdGx5IHRvIG1hdGNoIHRoZSBxdWV1ZSBzaXplLiAgRWFjaCBxdWV1ZSBlbnRyeSBpcyA2NCBieXRlcworICogbG9uZywgc28gZm9yIGV4YW1wbGUgYSAzMiBlbnRyeSBxdWV1ZSBtdXN0IGJlIGFsaWduZWQgb24gYSAyMDQ4CisgKiBieXRlIHJlYWwgYWRkcmVzcyBib3VuZGFyeS4KKyAqCisgKiBUaGUgc3BlY2lmaWVkIHF1ZXVlIGlzIHVuY29uZmlndXJlZCBpZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaXMgZ2l2ZW4KKyAqIGFzIHplcm8uCisgKgorICogRm9yIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhpcyBBUEkgc2VydmljZSwgdGhlIGFyZ3VtZW50IHF1ZXVlIGlzIGRlZmluZWQKKyAqIGFzIGZvbGxvd3M6CisgKgorICoJcXVldWUJCWRlc2NyaXB0aW9uCisgKgktLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJMHgzYwkJY3B1IG1vbmRvIHF1ZXVlCisgKgkweDNkCQlkZXZpY2UgbW9uZG8gcXVldWUKKyAqCTB4M2UJCXJlc3VtYWJsZSBlcnJvciBxdWV1ZQorICoJMHgzZgkJbm9uLXJlc3VtYWJsZSBlcnJvciBxdWV1ZQorICoKKyAqIE5vdGU6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGZvciBlYWNoIHF1ZXVlIGZvciBhIHNwZWNpZmljIGNwdSBtYXkKKyAqICAgICAgIGJlIGRldGVybWluZWQgZnJvbSB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbi4KKyAqLworI2RlZmluZSBIVl9GQVNUX0NQVV9RQ09ORgkJMHgxNAorI2RlZmluZSAgSFZfQ1BVX1FVRVVFX0NQVV9NT05ETwkJIDB4M2MKKyNkZWZpbmUgIEhWX0NQVV9RVUVVRV9ERVZJQ0VfTU9ORE8JIDB4M2QKKyNkZWZpbmUgIEhWX0NQVV9RVUVVRV9SRVNfRVJST1IJCSAweDNlCisjZGVmaW5lICBIVl9DUFVfUVVFVUVfTk9OUkVTX0VSUk9SCSAweDNmCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9jcHVfcWNvbmYodW5zaWduZWQgbG9uZyB0eXBlLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBxdWV1ZV9wYWRkciwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbnVtX3F1ZXVlX2VudHJpZXMpOworI2VuZGlmCisKKy8qIGNwdV9xaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9RSU5GTworICogQVJHMDoJcXVldWUKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJYmFzZSByZWFsIGFkZHJlc3MKKyAqIFJFVDE6CW51bWJlciBvZiBlbnRyaWVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBxdWV1ZQorICoKKyAqIFJldHVybiB0aGUgY29uZmlndXJhdGlvbiBpbmZvIGZvciB0aGUgZ2l2ZW4gcXVldWUuICBUaGUgYmFzZSByZWFsCisgKiBhZGRyZXNzIGFuZCBudW1iZXIgb2YgZW50cmllcyBvZiB0aGUgZGVmaW5lZCBxdWV1ZSBhcmUgcmV0dXJuZWQuCisgKiBUaGUgcXVldWUgYXJndW1lbnQgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgY3B1X3Fjb25mKCkgYWJvdmUuCisgKgorICogSWYgdGhlIHNwZWNpZmllZCBxdWV1ZSBpcyBhIHZhbGlkIHF1ZXVlIG51bWJlciwgYnV0IG5vIHF1ZXVlIGhhcworICogYmVlbiBkZWZpbmVkLCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2lsbCBiZSBzZXQgdG8gemVybyBhbmQgdGhlCisgKiBiYXNlIHJlYWwgYWRkcmVzcyByZXR1cm5lZCBpcyB1bmRlZmluZWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DUFVfUUlORk8JCTB4MTUKKworLyogY3B1X21vbmRvX3NlbmQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfTU9ORE9fU0VORAorICogQVJHMC0xOglDUFUgbGlzdAorICogQVJHMjoJZGF0YSByZWFsIGFkZHJlc3MKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFQkFEQUxJR04JTW9uZG8gZGF0YSBpcyBub3QgNjQtYnl0ZSBhbGlnbmVkIG9yIENQVSBsaXN0CisgKgkJCQlpcyBub3QgMi1ieXRlIGFsaWduZWQuCisgKgkJRU5PUkFERFIJSW52YWxpZCBkYXRhIG1vbmRvIGFkZHJlc3MsIG9yIGludmFsaWQgY3B1IGxpc3QKKyAqCQkJCWFkZHJlc3MuCisgKgkJRU5PQ1BVCQlJbnZhbGlkIGNwdSBpbiBDUFUgbGlzdAorICoJCUVXT1VMREJMT0NLCVNvbWUgb3IgYWxsIG9mIHRoZSBsaXN0ZWQgQ1BVcyBkaWQgbm90IHJlY2VpdmUKKyAqCQkJCXRoZSBtb25kbworICoJCUVDUFVFUlJPUglPbmUgb3IgbW9yZSBvZiB0aGUgbGlzdGVkIENQVXMgYXJlIGluIGVycm9yCisgKgkJCQlzdGF0ZSwgdXNlIEhWX0ZBU1RfQ1BVX1NUQVRFIHRvIHNlZSB3aGljaCBvbmVzCisgKgkJRUlOVkFMCQlDUFUgbGlzdCBpbmNsdWRlcyBjYWxsZXIncyBDUFUgSUQKKyAqCisgKiBTZW5kIGEgbW9uZG8gaW50ZXJydXB0IHRvIHRoZSBDUFVzIGluIHRoZSBnaXZlbiBDUFUgbGlzdCB3aXRoIHRoZQorICogNjQtYnl0ZXMgYXQgdGhlIGdpdmVuIGRhdGEgcmVhbCBhZGRyZXNzLiAgVGhlIGRhdGEgbXVzdCBiZSA2NC1ieXRlCisgKiBhbGlnbmVkLiAgVGhlIG1vbmRvIGRhdGEgd2lsbCBiZSBkZWxpdmVyZWQgdG8gdGhlIGNwdV9tb25kbyBxdWV1ZXMKKyAqIG9mIHRoZSByZWNpcGllbnQgQ1BVcy4KKyAqCisgKiBJbiBhbGwgY2FzZXMsIGVycm9yIG9yIG5vdCwgdGhlIENQVXMgaW4gdGhlIENQVSBsaXN0IHRvIHdoaWNoIHRoZQorICogbW9uZG8gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZCB3aWxsIGJlIGluZGljYXRlZCBieSBoYXZpbmcKKyAqIHRoZWlyIGVudHJ5IGluIENQVSBsaXN0IHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUgMHhmZmZmLgorICovCisjZGVmaW5lIEhWX0ZBU1RfQ1BVX01PTkRPX1NFTkQJCTB4NDIKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2NwdV9tb25kb19zZW5kKHVuc2lnbmVkIGxvbmcgY3B1X2NvdW50LCB1bnNpZ25lZCBsb25nIGNwdV9saXN0X3BhLCB1bnNpZ25lZCBsb25nIG1vbmRvX2Jsb2NrX3BhKTsKKyNlbmRpZgorCisvKiBjcHVfbXlpZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9NWUlECisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CUNQVSBJRAorICogRVJST1JTOglObyBlcnJvcnMgZGVmaW5lZC4KKyAqCisgKiBSZXR1cm4gdGhlIGh5cGVydmlzb3IgSUQgaGFuZGxlIGZvciB0aGUgY3VycmVudCBDUFUuICBVc2UgYnkgYQorICogdmlydHVhbCBDUFUgdG8gZGlzY292ZXIgaXQncyBvd24gaWRlbnRpdHkuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DUFVfTVlJRAkJMHgxNgorCisvKiBjcHVfc3RhdGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9DUFVfU1RBVEUKKyAqIEFSRzA6CUNQVSBJRAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglzdGF0ZQorICogRVJST1JTOglFTk9DUFUJCUludmFsaWQgQ1BVIElECisgKgorICogUmV0cmlldmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIENQVSB3aXRoIHRoZSBnaXZlbiBDUFUgSUQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DUFVfU1RBVEUJCTB4MTcKKyNkZWZpbmUgIEhWX0NQVV9TVEFURV9TVE9QUEVECQkgMHgwMQorI2RlZmluZSAgSFZfQ1BVX1NUQVRFX1JVTk5JTkcJCSAweDAyCisjZGVmaW5lICBIVl9DUFVfU1RBVEVfRVJST1IJCSAweDAzCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gbG9uZyBzdW40dl9jcHVfc3RhdGUodW5zaWduZWQgbG9uZyBjcHVpZCk7CisjZW5kaWYKKworLyogY3B1X3NldF9ydGJhKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ1BVX1NFVF9SVEJBCisgKiBBUkcwOglSVEJBCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXByZXZpb3VzIFJUQkEKKyAqIEVSUk9SUzoJRU5PUkFERFIJSW52YWxpZCBSVEJBIHJlYWwgYWRkcmVzcworICoJCUVCQURBTElHTglSVEJBIGlzIGluY29ycmVjdGx5IGFsaWduZWQgZm9yIGEgdHJhcCB0YWJsZQorICoKKyAqIFNldCB0aGUgcmVhbCB0cmFwIGJhc2UgYWRkcmVzcyBvZiB0aGUgbG9jYWwgY3B1IHRvIHRoZSBnaXZlbiBSVEJBLgorICogVGhlIHN1cHBsaWVkIFJUQkEgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMjU2IGJ5dGUgYm91bmRhcnkuICBVcG9uCisgKiBzdWNjZXNzIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgUlRCQSBpcyByZXR1cm5lZCBpbiBSRVQxLgorICoKKyAqIE5vdGU6IFRoaXMgc2VydmljZSBkb2VzIG5vdCBhZmZlY3QgJXRiYQorICovCisjZGVmaW5lIEhWX0ZBU1RfQ1BVX1NFVF9SVEJBCQkweDE4CisKKy8qIGNwdV9zZXRfcnRiYSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0NQVV9HRVRfUlRCQQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglwcmV2aW91cyBSVEJBCisgKiBFUlJPUlM6CU5vIHBvc3NpYmxlIGVycm9yLgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgUlRCQSBpbiBSRVQxLgorICovCisjZGVmaW5lIEhWX0ZBU1RfQ1BVX0dFVF9SVEJBCQkweDE5CisKKy8qIE1NVSBzZXJ2aWNlcy4KKyAqCisgKiBMYXlvdXQgb2YgYSBUU0IgZGVzY3JpcHRpb24gZm9yIG1tdV90c2JfY3R4eyxub259MCgpIGNhbGxzLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGh2X3RzYl9kZXNjciB7CisJdW5zaWduZWQgc2hvcnQJCXBnc3pfaWR4OworCXVuc2lnbmVkIHNob3J0CQlhc3NvYzsKKwl1bnNpZ25lZCBpbnQJCW51bV90dGVzOwkvKiBpbiBUVEVzICovCisJdW5zaWduZWQgaW50CQljdHhfaWR4OworCXVuc2lnbmVkIGludAkJcGdzel9tYXNrOworCXVuc2lnbmVkIGxvbmcJCXRzYl9iYXNlOworCXVuc2lnbmVkIGxvbmcJCXJlc3Y7Cit9OworI2VuZGlmCisjZGVmaW5lIEhWX1RTQl9ERVNDUl9QR1NaX0lEWF9PRkZTRVQJMHgwMAorI2RlZmluZSBIVl9UU0JfREVTQ1JfQVNTT0NfT0ZGU0VUCTB4MDIKKyNkZWZpbmUgSFZfVFNCX0RFU0NSX05VTV9UVEVTX09GRlNFVAkweDA0CisjZGVmaW5lIEhWX1RTQl9ERVNDUl9DVFhfSURYX09GRlNFVAkweDA4CisjZGVmaW5lIEhWX1RTQl9ERVNDUl9QR1NaX01BU0tfT0ZGU0VUCTB4MGMKKyNkZWZpbmUgSFZfVFNCX0RFU0NSX1RTQl9CQVNFX09GRlNFVAkweDEwCisjZGVmaW5lIEhWX1RTQl9ERVNDUl9SRVNWX09GRlNFVAkweDE4CisKKy8qIFBhZ2Ugc2l6ZSBiaXRtYXNrLiAgKi8KKyNkZWZpbmUgSFZfUEdTWl9NQVNLXzhLCQkJKDEgPDwgMCkKKyNkZWZpbmUgSFZfUEdTWl9NQVNLXzY0SwkJKDEgPDwgMSkKKyNkZWZpbmUgSFZfUEdTWl9NQVNLXzUxMksJCSgxIDw8IDIpCisjZGVmaW5lIEhWX1BHU1pfTUFTS180TUIJCSgxIDw8IDMpCisjZGVmaW5lIEhWX1BHU1pfTUFTS18zMk1CCQkoMSA8PCA0KQorI2RlZmluZSBIVl9QR1NaX01BU0tfMjU2TUIJCSgxIDw8IDUpCisjZGVmaW5lIEhWX1BHU1pfTUFTS18yR0IJCSgxIDw8IDYpCisjZGVmaW5lIEhWX1BHU1pfTUFTS18xNkdCCQkoMSA8PCA3KQorCisvKiBQYWdlIHNpemUgaW5kZXguICBUaGUgdmFsdWUgZ2l2ZW4gaW4gdGhlIFRTQiBkZXNjcmlwdG9yIG11c3QgY29ycmVzcG9uZAorICogdG8gdGhlIHNtYWxsZXN0IHBhZ2Ugc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIHBnc3pfbWFzayBwYWdlIHNpemUgYml0bWFzay4KKyAqLworI2RlZmluZSBIVl9QR1NaX0lEWF84SwkJCTAKKyNkZWZpbmUgSFZfUEdTWl9JRFhfNjRLCQkJMQorI2RlZmluZSBIVl9QR1NaX0lEWF81MTJLCQkyCisjZGVmaW5lIEhWX1BHU1pfSURYXzRNQgkJCTMKKyNkZWZpbmUgSFZfUEdTWl9JRFhfMzJNQgkJNAorI2RlZmluZSBIVl9QR1NaX0lEWF8yNTZNQgkJNQorI2RlZmluZSBIVl9QR1NaX0lEWF8yR0IJCQk2CisjZGVmaW5lIEhWX1BHU1pfSURYXzE2R0IJCTcKKworLyogTU1VIGZhdWx0IHN0YXR1cyBhcmVhLgorICoKKyAqIE1NVSByZWxhdGVkIGZhdWx0cyBoYXZlIHRoZWlyIHN0YXR1cyBhbmQgZmF1bHQgYWRkcmVzcyBpbmZvcm1hdGlvbgorICogcGxhY2VkIGludG8gYSBtZW1vcnkgcmVnaW9uIG1hZGUgYXZhaWxhYmxlIGJ5IHByaXZpbGVnZWQgY29kZS4gIEVhY2gKKyAqIHZpcnR1YWwgcHJvY2Vzc29yIG11c3QgbWFrZSBhIG1tdV9mYXVsdF9hcmVhX2NvbmYoKSBjYWxsIHRvIHRlbGwgdGhlCisgKiBoeXBlcnZpc29yIHdoZXJlIHRoYXQgcHJvY2Vzc29yJ3MgZmF1bHQgc3RhdHVzIHNob3VsZCBiZSBzdG9yZWQuCisgKgorICogVGhlIGZhdWx0IHN0YXR1cyBibG9jayBpcyBhIG11bHRpcGxlIG9mIDY0LWJ5dGVzIGFuZCBtdXN0IGJlIGFsaWduZWQKKyAqIG9uIGEgNjQtYnl0ZSBib3VuZGFyeS4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBodl9mYXVsdF9zdGF0dXMgeworCXVuc2lnbmVkIGxvbmcJCWlfZmF1bHRfdHlwZTsKKwl1bnNpZ25lZCBsb25nCQlpX2ZhdWx0X2FkZHI7CisJdW5zaWduZWQgbG9uZwkJaV9mYXVsdF9jdHg7CisJdW5zaWduZWQgbG9uZwkJaV9yZXNlcnZlZFs1XTsKKwl1bnNpZ25lZCBsb25nCQlkX2ZhdWx0X3R5cGU7CisJdW5zaWduZWQgbG9uZwkJZF9mYXVsdF9hZGRyOworCXVuc2lnbmVkIGxvbmcJCWRfZmF1bHRfY3R4OworCXVuc2lnbmVkIGxvbmcJCWRfcmVzZXJ2ZWRbNV07Cit9OworI2VuZGlmCisjZGVmaW5lIEhWX0ZBVUxUX0lfVFlQRV9PRkZTRVQJMHgwMAorI2RlZmluZSBIVl9GQVVMVF9JX0FERFJfT0ZGU0VUCTB4MDgKKyNkZWZpbmUgSFZfRkFVTFRfSV9DVFhfT0ZGU0VUCTB4MTAKKyNkZWZpbmUgSFZfRkFVTFRfRF9UWVBFX09GRlNFVAkweDQwCisjZGVmaW5lIEhWX0ZBVUxUX0RfQUREUl9PRkZTRVQJMHg0OAorI2RlZmluZSBIVl9GQVVMVF9EX0NUWF9PRkZTRVQJMHg1MAorCisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfRkFTVF9NSVNTCTEKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9GQVNUX1BST1QJMgorI2RlZmluZSBIVl9GQVVMVF9UWVBFX01NVV9NSVNTCTMKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9JTlZfUkEJNAorI2RlZmluZSBIVl9GQVVMVF9UWVBFX1BSSVZfVklPTAk1CisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfUFJPVF9WSU9MCTYKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9ORk8JNworI2RlZmluZSBIVl9GQVVMVF9UWVBFX05GT19TRUZGCTgKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9JTlZfVkEJOQorI2RlZmluZSBIVl9GQVVMVF9UWVBFX0lOVl9BU0kJMTAKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9OQ19BVE9NSUMJMTEKKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9QUklWX0FDVAkxMgorI2RlZmluZSBIVl9GQVVMVF9UWVBFX1JFU1YxCTEzCisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfVU5BTElHTkVECTE0CisjZGVmaW5lIEhWX0ZBVUxUX1RZUEVfSU5WX1BHU1oJMTUKKy8qIFZhbHVlcyAxNiAtLT4gLTIgYXJlIHJlc2VydmVkLiAgKi8KKyNkZWZpbmUgSFZfRkFVTFRfVFlQRV9NVUxUSVBMRQktMQorCisvKiBGbGFncyBhcmd1bWVudCBmb3IgbW11X3ttYXAsdW5tYXB9X2FkZHIoKSwgbW11X2RlbWFwX3twYWdlLGNvbnRleHQsYWxsfSgpLAorICogYW5kIG1tdV97bWFwLHVubWFwfV9wZXJtX2FkZHIoKS4KKyAqLworI2RlZmluZSBIVl9NTVVfRE1NVQkJCTB4MDEKKyNkZWZpbmUgSFZfTU1VX0lNTVUJCQkweDAyCisjZGVmaW5lIEhWX01NVV9BTEwJCQkoSFZfTU1VX0RNTVUgfCBIVl9NTVVfSU1NVSkKKworLyogbW11X21hcF9hZGRyKCkKKyAqIFRSQVA6CUhWX01NVV9NQVBfQUREUl9UUkFQCisgKiBBUkcwOgl2aXJ0dWFsIGFkZHJlc3MKKyAqIEFSRzE6CW1tdSBjb250ZXh0CisgKiBBUkcyOglUVEUKKyAqIEFSRzM6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCB2aXJ0dWFsIGFkZHJlc3MsIG1tdSBjb250ZXh0LCBvciBmbGFncworICoJCUVCQURQR1NaCUludmFsaWQgcGFnZSBzaXplIHZhbHVlCisgKgkJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MgaW4gVFRFCisgKgorICogQ3JlYXRlIGEgbm9uLXBlcm1hbmVudCBtYXBwaW5nIHVzaW5nIHRoZSBnaXZlbiBUVEUsIHZpcnR1YWwKKyAqIGFkZHJlc3MsIGFuZCBtbXUgY29udGV4dC4gIFRoZSBmbGFncyBhcmd1bWVudCBkZXRlcm1pbmVzIHdoaWNoCisgKiAoZGF0YSwgb3IgaW5zdHJ1Y3Rpb24sIG9yIGJvdGgpIFRMQiB0aGUgbWFwcGluZyBnZXRzIGxvYWRlZCBpbnRvLgorICoKKyAqIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgdGhlIHZhbGlkIGJpdCBpcyBjbGVhciBpbiB0aGUgVFRFLgorICoKKyAqIE5vdGU6IFRoaXMgQVBJIGNhbGwgaXMgZm9yIHByaXZpbGVnZWQgY29kZSB0byBzcGVjaWZ5IHRlbXBvcmFyeSB0cmFuc2xhdGlvbgorICogICAgICAgbWFwcGluZ3Mgd2l0aG91dCB0aGUgbmVlZCB0byBjcmVhdGUgYW5kIG1hbmFnZSBhIFRTQi4KKyAqLworCisvKiBtbXVfdW5tYXBfYWRkcigpCisgKiBUUkFQOglIVl9NTVVfVU5NQVBfQUREUl9UUkFQCisgKiBBUkcwOgl2aXJ0dWFsIGFkZHJlc3MKKyAqIEFSRzE6CW1tdSBjb250ZXh0CisgKiBBUkcyOglmbGFncyAoSFZfTU1VX3tJTU1VLERNTVV9KQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgdmlydHVhbCBhZGRyZXNzLCBtbXUgY29udGV4dCwgb3IgZmxhZ3MKKyAqCisgKiBEZW1hcHMgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgZ2l2ZW4gbW11IGNvbnRleHQgb24gdGhpcworICogQ1BVLiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGRlbWFwIHBhZ2VzIG1hcHBlZAorICogd2l0aCBtbXVfbWFwX2FkZHIuICBUaGlzIHNlcnZpY2UgaXMgZXF1aXZhbGVudCB0byBpbnZva2luZworICogbW11X2RlbWFwX3BhZ2UoKSB3aXRoIG9ubHkgdGhlIGN1cnJlbnQgQ1BVIGluIHRoZSBDUFUgbGlzdC4gVGhlCisgKiBmbGFncyBhcmd1bWVudCBkZXRlcm1pbmVzIHdoaWNoIChkYXRhLCBvciBpbnN0cnVjdGlvbiwgb3IgYm90aCkgVExCCisgKiB0aGUgbWFwcGluZyBnZXRzIHVubWFwcGVkIGZyb20uCisgKgorICogQXR0ZW1wdGluZyB0byBwZXJmb3JtIGFuIHVubWFwIG9wZXJhdGlvbiBmb3IgYSBwcmV2aW91c2x5IGRlZmluZWQKKyAqIHBlcm1hbmVudCBtYXBwaW5nIHdpbGwgaGF2ZSB1bmRlZmluZWQgcmVzdWx0cy4KKyAqLworCisvKiBtbXVfdHNiX2N0eDAoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfVFNCX0NUWDAKKyAqIEFSRzA6CW51bWJlciBvZiBUU0IgZGVzY3JpcHRpb25zCisgKiBBUkcxOglUU0IgZGVzY3JpcHRpb25zIHBvaW50ZXIKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFTk9SQUREUgkJSW52YWxpZCBUU0IgZGVzY3JpcHRpb25zIHBvaW50ZXIgb3IKKyAqCQkJCQlUU0IgYmFzZSB3aXRoaW4gYSBkZXNjcmlwdG9yCisgKgkJRUJBREFMSUdOCQlUU0IgZGVzY3JpcHRpb25zIHBvaW50ZXIgaXMgbm90IGFsaWduZWQKKyAqCQkJCQl0byBhbiA4LWJ5dGUgYm91bmRhcnksIG9yIFRTQiBiYXNlCisgKgkJCQkJd2l0aGluIGEgZGVzY3JpcHRvciBpcyBub3QgYWxpZ25lZCBmb3IKKyAqCQkJCQl0aGUgZ2l2ZW4gVFNCIHNpemUKKyAqCQlFQkFEUEdTWgkJSW52YWxpZCBwYWdlIHNpemUgaW4gYSBUU0IgZGVzY3JpcHRvcgorICoJCUVCQURUU0IJCQlJbnZhbGlkIGFzc29jaWF0aXZpdHkgb3Igc2l6ZSBpbiBhIFRTQgorICoJCQkJCWRlc2NyaXB0b3IKKyAqCQlFSU5WQUwJCQlJbnZhbGlkIG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb25zLCBvcgorICoJCQkJCWludmFsaWQgY29udGV4dCBpbmRleCBpbiBhIFRTQgorICoJCQkJCWRlc2NyaXB0b3IsIG9yIGluZGV4IHBhZ2Ugc2l6ZSBub3QKKyAqCQkJCQllcXVhbCB0byBzbWFsbGVzdCBwYWdlIHNpemUgaW4gcGFnZQorICoJCQkJCXNpemUgYml0bWFzayBmaWVsZC4KKyAqCisgKiBDb25maWd1cmVzIHRoZSBUU0JzIGZvciB0aGUgY3VycmVudCBDUFUgZm9yIHZpcnR1YWwgYWRkcmVzc2VzIHdpdGgKKyAqIGNvbnRleHQgemVyby4gIFRoZSBUU0IgZGVzY3JpcHRpb25zIHBvaW50ZXIgaXMgYSBwb2ludGVyIHRvIGFuCisgKiBhcnJheSBvZiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbnMuCisgKgorICogTm90ZTogVGhlIG1heGltdW0gbnVtYmVyIG9mIFRTQnMgYXZhaWxhYmxlIHRvIGEgdmlydHVhbCBDUFUgaXMgZ2l2ZW4gYnkgdGhlCisgKiAgICAgICBtbXUtbWF4LSN0c2JzIHByb3BlcnR5IG9mIHRoZSBjcHUncyBjb3JyZXNwb25kaW5nICJjcHUiIG5vZGUgaW4gdGhlCisgKiAgICAgICBtYWNoaW5lIGRlc2NyaXB0aW9uLgorICovCisjZGVmaW5lIEhWX0ZBU1RfTU1VX1RTQl9DVFgwCQkweDIwCisKKy8qIG1tdV90c2JfY3R4bm9uMCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9UU0JfQ1RYTk9OMAorICogQVJHMDoJbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbnMKKyAqIEFSRzE6CVRTQiBkZXNjcmlwdGlvbnMgcG9pbnRlcgorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CVNhbWUgYXMgZm9yIG1tdV90c2JfY3R4MCgpIGFib3ZlLgorICoKKyAqIENvbmZpZ3VyZXMgdGhlIFRTQnMgZm9yIHRoZSBjdXJyZW50IENQVSBmb3IgdmlydHVhbCBhZGRyZXNzZXMgd2l0aAorICogbm9uLXplcm8gY29udGV4dHMuICBUaGUgVFNCIGRlc2NyaXB0aW9ucyBwb2ludGVyIGlzIGEgcG9pbnRlciB0byBhbgorICogYXJyYXkgb2YgdGhlIGdpdmVuIG51bWJlciBvZiBUU0IgZGVzY3JpcHRpb25zLgorICoKKyAqIE5vdGU6IEEgbWF4aW11bSBvZiAxNiBUU0JzIG1heSBiZSBzcGVjaWZpZWQgaW4gdGhlIFRTQiBkZXNjcmlwdGlvbiBsaXN0LgorICovCisjZGVmaW5lIEhWX0ZBU1RfTU1VX1RTQl9DVFhOT04wCQkweDIxCisKKy8qIG1tdV9kZW1hcF9wYWdlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTU1VX0RFTUFQX1BBR0UKKyAqIEFSRzA6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KKyAqIEFSRzE6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KKyAqIEFSRzI6CXZpcnR1YWwgYWRkcmVzcworICogQVJHMzoJbW11IGNvbnRleHQKKyAqIEFSRzQ6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ1dGFsIGFkZHJlc3MsIGNvbnRleHQsIG9yCisgKgkJCQkJZmxhZ3MgdmFsdWUKKyAqCQlFTk9UU1VQUE9SVEVECQlBUkcwIG9yIEFSRzEgaXMgbm9uLXplcm8KKyAqCisgKiBEZW1hcHMgYW55IHBhZ2UgbWFwcGluZyBvZiB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzIGluIHRoZSBnaXZlbgorICogbW11IGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IHZpcnR1YWwgQ1BVLiAgQW55IHZpcnR1YWxseSB0YWdnZWQKKyAqIGNhY2hlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBrZXB0IGNvbnNpc3RlbnQuICBUaGUgZmxhZ3MgYXJndW1lbnQKKyAqIGRldGVybWluZXMgd2hpY2ggVExCIChpbnN0cnVjdGlvbiwgb3IgZGF0YSwgb3IgYm90aCkgcGFydGljaXBhdGUgaW4KKyAqIHRoZSBvcGVyYXRpb24uCisgKgorICogQVJHMCBhbmQgQVJHMSBhcmUgYm90aCByZXNlcnZlZCBhbmQgbXVzdCBiZSBzZXQgdG8gemVyby4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9ERU1BUF9QQUdFCQkweDIyCisKKy8qIG1tdV9kZW1hcF9jdHgoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfREVNQVBfQ1RYCisgKiBBUkcwOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcxOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcyOgltbXUgY29udGV4dAorICogQVJHMzoJZmxhZ3MgKEhWX01NVV97SU1NVSxETU1VfSkKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCQlJbnZhbGlkIGNvbnRleHQgb3IgZmxhZ3MgdmFsdWUKKyAqCQlFTk9UU1VQUE9SVEVECQlBUkcwIG9yIEFSRzEgaXMgbm9uLXplcm8KKyAqCisgKiBEZW1hcHMgYWxsIG5vbi1wZXJtYW5lbnQgdmlydHVhbCBwYWdlIG1hcHBpbmdzIHByZXZpb3VzbHkgc3BlY2lmaWVkCisgKiBmb3IgdGhlIGdpdmVuIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IHZpcnR1YWwgQ1BVLiAgQW55IHZpcnR1YWwKKyAqIHRhZ2dlZCBjYWNoZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUga2VwdCBjb25zaXN0ZW50LiAgVGhlIGZsYWdzCisgKiBhcmd1bWVudCBkZXRlcm1pbmVzIHdoaWNoIFRMQiAoaW5zdHJ1Y3Rpb24sIG9yIGRhdGEsIG9yIGJvdGgpCisgKiBwYXJ0aWNpcGF0ZSBpbiB0aGUgb3BlcmF0aW9uLgorICoKKyAqIEFSRzAgYW5kIEFSRzEgYXJlIGJvdGggcmVzZXJ2ZWQgYW5kIG11c3QgYmUgc2V0IHRvIHplcm8uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVfREVNQVBfQ1RYCQkweDIzCisKKy8qIG1tdV9kZW1hcF9hbGwoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfREVNQVBfQUxMCisgKiBBUkcwOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcxOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcyOglmbGFncyAoSFZfTU1VX3tJTU1VLERNTVV9KQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJCUludmFsaWQgZmxhZ3MgdmFsdWUKKyAqCQlFTk9UU1VQUE9SVEVECQlBUkcwIG9yIEFSRzEgaXMgbm9uLXplcm8KKyAqCisgKiBEZW1hcHMgYWxsIG5vbi1wZXJtYW5lbnQgdmlydHVhbCBwYWdlIG1hcHBpbmdzIHByZXZpb3VzbHkgc3BlY2lmaWVkCisgKiBmb3IgdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuICBBbnkgdmlydHVhbCB0YWdnZWQgY2FjaGVzIGFyZQorICogZ3VhcmFudGVlZCB0byBiZSBrZXB0IGNvbnNpc3RlbnQuICBUaGUgZmxhZ3MgYXJndW1lbnQgZGV0ZXJtaW5lcworICogd2hpY2ggVExCIChpbnN0cnVjdGlvbiwgb3IgZGF0YSwgb3IgYm90aCkgcGFydGljaXBhdGUgaW4gdGhlCisgKiBvcGVyYXRpb24uCisgKgorICogQVJHMCBhbmQgQVJHMSBhcmUgYm90aCByZXNlcnZlZCBhbmQgbXVzdCBiZSBzZXQgdG8gemVyby4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9ERU1BUF9BTEwJCTB4MjQKKworLyogbW11X21hcF9wZXJtX2FkZHIoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfTUFQX1BFUk1fQUREUgorICogQVJHMDoJdmlydHVhbCBhZGRyZXNzCisgKiBBUkcxOglyZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCisgKiBBUkcyOglUVEUKKyAqIEFSRzM6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ1dGFsIGFkZHJlc3Mgb3IgZmxhZ3MgdmFsdWUKKyAqCQlFQkFEUEdTWgkJSW52YWxpZCBwYWdlIHNpemUgdmFsdWUKKyAqCQlFTk9SQUREUgkJSW52YWxpZCByZWFsIGFkZHJlc3MgaW4gVFRFCisgKgkJRVRPT01BTlkJCVRvbyBtYW55IG1hcHBpbmdzIChtYXggb2YgOCByZWFjaGVkKQorICoKKyAqIENyZWF0ZSBhIHBlcm1hbmVudCBtYXBwaW5nIHVzaW5nIHRoZSBnaXZlbiBUVEUgYW5kIHZpcnR1YWwgYWRkcmVzcworICogZm9yIGNvbnRleHQgMCBvbiB0aGUgY2FsbGluZyB2aXJ0dWFsIENQVS4gIEEgbWF4aW11bSBvZiA4IHN1Y2gKKyAqIHBlcm1hbmVudCBtYXBwaW5ncyBtYXkgYmUgc3BlY2lmaWVkIGJ5IHByaXZpbGVnZWQgY29kZS4gIE1hcHBpbmdzCisgKiBtYXkgYmUgcmVtb3ZlZCB3aXRoIG1tdV91bm1hcF9wZXJtX2FkZHIoKS4KKyAqCisgKiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIGEgVFRFIHdpdGggdGhlIHZhbGlkIGJpdCBjbGVhciBpcyBnaXZlbi4KKyAqCisgKiBOb3RlOiBUaGlzIGNhbGwgaXMgdXNlZCB0byBzcGVjaWZ5IGFkZHJlc3Mgc3BhY2UgbWFwcGluZ3MgZm9yIHdoaWNoCisgKiAgICAgICBwcml2aWxlZ2VkIGNvZGUgZG9lcyBub3QgZXhwZWN0IHRvIHJlY2VpdmUgbWlzc2VzLiAgRm9yIGV4YW1wbGUsCisgKiAgICAgICB0aGlzIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byBtYXAga2VybmVsIG51Y2xldXMgY29kZSBhbmQgZGF0YS4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9NQVBfUEVSTV9BRERSCTB4MjUKKworLyogbW11X2ZhdWx0X2FyZWFfY29uZigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9GQVVMVF9BUkVBX0NPTkYKKyAqIEFSRzA6CXJlYWwgYWRkcmVzcworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglwcmV2aW91cyBtbXUgZmF1bHQgYXJlYSByZWFsIGFkZHJlc3MKKyAqIEVSUk9SUzoJRU5PUkFERFIJCUludmFsaWQgcmVhbCBhZGRyZXNzCisgKgkJRUJBREFMSUdOCQlJbnZhbGlkIGFsaWdubWVudCBmb3IgZmF1bHQgYXJlYQorICoKKyAqIENvbmZpZ3VyZSB0aGUgTU1VIGZhdWx0IHN0YXR1cyBhcmVhIGZvciB0aGUgY2FsbGluZyBDUFUuICBBIDY0LWJ5dGUKKyAqIGFsaWduZWQgcmVhbCBhZGRyZXNzIHNwZWNpZmllcyB3aGVyZSBNTVUgZmF1bHQgc3RhdHVzIGluZm9ybWF0aW9uCisgKiBpcyBwbGFjZWQuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBwcmV2aW91c2x5IHNwZWNpZmllZCBhcmVhLCBvciAwCisgKiBmb3IgdGhlIGZpcnN0IGludm9jYXRpb24uICBTcGVjaWZ5aW5nIGEgZmF1bHQgYXJlYSBhdCByZWFsIGFkZHJlc3MKKyAqIDAgaXMgbm90IGFsbG93ZWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVfRkFVTFRfQVJFQV9DT05GCTB4MjYKKworLyogbW11X2VuYWJsZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9FTkFCTEUKKyAqIEFSRzA6CWVuYWJsZSBmbGFnCisgKiBBUkcxOglyZXR1cm4gdGFyZ2V0IGFkZHJlc3MKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFTk9SQUREUgkJSW52YWxpZCByZWFsIGFkZHJlc3Mgd2hlbiBkaXNhYmxpbmcKKyAqCQkJCQl0cmFuc2xhdGlvbi4KKyAqCQlFQkFEQUxJR04JCVRoZSByZXR1cm4gdGFyZ2V0IGFkZHJlc3MgaXMgbm90CisgKgkJCQkJYWxpZ25lZCB0byBhbiBpbnN0cnVjdGlvbi4KKyAqCQlFSU5WQUwJCQlUaGUgZW5hYmxlIGZsYWcgcmVxdWVzdCB0aGUgY3VycmVudAorICoJCQkJCW9wZXJhdGluZyBtb2RlIChlLmcuIGRpc2FibGUgaWYgYWxyZWFkeQorICoJCQkJCWRpc2FibGVkKQorICoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIHZpcnR1YWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBmb3IgdGhlIGNhbGxpbmcgQ1BVCisgKiB3aXRoaW4gdGhlIHZpcnR1YWwgbWFjaGluZSBkb21haW4uICBJZiB0aGUgZW5hYmxlIGZsYWcgaXMgemVybywKKyAqIHRyYW5zbGF0aW9uIGlzIGRpc2FibGVkLCBhbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBlbmFibGUKKyAqIHRyYW5zbGF0aW9uLgorICoKKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCB0aGUgbmV3bHkgc2VsZWN0ZWQgdHJhbnNsYXRpb24gbW9kZQorICogd2lsbCBiZSBhY3RpdmUuICBJZiB0aGUgbW11IGlzIGJlaW5nIGVuYWJsZWQsIHRoZW4gdGhlIHJldHVybgorICogdGFyZ2V0IGFkZHJlc3MgaXMgYSB2aXJ0dWFsIGFkZHJlc3MgZWxzZSBpdCBpcyBhIHJlYWwgYWRkcmVzcy4KKyAqCisgKiBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgY29udHJvbCB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBnaXZlbgorICogcmV0dXJuIHRhcmdldCBhZGRyZXNzIChpZS4gdGhlIGNwdSB3aWxsIGp1bXAgdG8gdGhhdCBhZGRyZXNzKS4gIE9uCisgKiBmYWlsdXJlLCB0aGUgcHJldmlvdXMgbW11IG1vZGUgcmVtYWlucyBhbmQgdGhlIHRyYXAgc2ltcGx5IHJldHVybnMKKyAqIGFzIG5vcm1hbCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIGluIFJFVDAuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVfRU5BQkxFCQkweDI3CisKKy8qIG1tdV91bm1hcF9wZXJtX2FkZHIoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfVU5NQVBfUEVSTV9BRERSCisgKiBBUkcwOgl2aXJ0dWFsIGFkZHJlc3MKKyAqIEFSRzE6CXJlc2VydmVkLCBtdXN0IGJlIHplcm8KKyAqIEFSRzI6CWZsYWdzIChIVl9NTVVfe0lNTVUsRE1NVX0pCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQkJSW52YWxpZCB2aXJ1dGFsIGFkZHJlc3Mgb3IgZmxhZ3MgdmFsdWUKKyAqCQlFTk9NQVAJCQlTcGVjaWZpZWQgbWFwcGluZyB3YXMgbm90IGZvdW5kCisgKgorICogRGVtYXBzIGFueSBwZXJtYW5lbnQgcGFnZSBtYXBwaW5nIChlc3RhYmxpc2hlZCB2aWEKKyAqIG1tdV9tYXBfcGVybV9hZGRyKCkpIGF0IHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MgZm9yIGNvbnRleHQgMCBvbgorICogdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuICBBbnkgdmlydHVhbCB0YWdnZWQgY2FjaGVzIGFyZSBndWFyYW50ZWVkCisgKiB0byBiZSBrZXB0IGNvbnNpc3RlbnQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVfVU5NQVBfUEVSTV9BRERSCTB4MjgKKworLyogbW11X3RzYl9jdHgwX2luZm8oKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfVFNCX0NUWDBfSU5GTworICogQVJHMDoJbWF4IFRTQnMKKyAqIEFSRzE6CWJ1ZmZlciBwb2ludGVyCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW51bWJlciBvZiBUU0JzCisgKiBFUlJPUlM6CUVJTlZBTAkJCVN1cHBsaWVkIGJ1ZmZlciBpcyB0b28gc21hbGwKKyAqCQlFQkFEQUxJR04JCVRoZSBidWZmZXIgcG9pbnRlciBpcyBiYWRseSBhbGlnbmVkCisgKgkJRU5PUkFERFIJCUludmFsaWQgcmVhbCBhZGRyZXNzIGZvciBidWZmZXIgcG9pbnRlcgorICoKKyAqIFJldHVybiB0aGUgVFNCIGNvbmZpZ3VyYXRpb24gYXMgcHJldmlvdXMgZGVmaW5lZCBieSBtbXVfdHNiX2N0eDAoKQorICogaW50byB0aGUgcHJvdmlkZWQgYnVmZmVyLiAgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBnaXZlbiBpbiBBUkcxCisgKiBpbiB0ZXJtcyBvZiB0aGUgbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbiBlbnRyaWVzLgorICoKKyAqIFVwb24gcmV0dXJuLCBSRVQxIGFsd2F5cyBjb250YWlucyB0aGUgbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbnMKKyAqIHByZXZpb3VzbHkgY29uZmlndXJlZC4gIElmIHplcm8gVFNCcyB3ZXJlIGNvbmZpZ3VyZWQsIEVPSyBpcworICogcmV0dXJuZWQgd2l0aCBSRVQxIGNvbnRhaW5pbmcgMC4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9UU0JfQ1RYMF9JTkZPCTB4MjkKKworLyogbW11X3RzYl9jdHhub24wX2luZm8oKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9NTVVfVFNCX0NUWE5PTjBfSU5GTworICogQVJHMDoJbWF4IFRTQnMKKyAqIEFSRzE6CWJ1ZmZlciBwb2ludGVyCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW51bWJlciBvZiBUU0JzCisgKiBFUlJPUlM6CUVJTlZBTAkJCVN1cHBsaWVkIGJ1ZmZlciBpcyB0b28gc21hbGwKKyAqCQlFQkFEQUxJR04JCVRoZSBidWZmZXIgcG9pbnRlciBpcyBiYWRseSBhbGlnbmVkCisgKgkJRU5PUkFERFIJCUludmFsaWQgcmVhbCBhZGRyZXNzIGZvciBidWZmZXIgcG9pbnRlcgorICoKKyAqIFJldHVybiB0aGUgVFNCIGNvbmZpZ3VyYXRpb24gYXMgcHJldmlvdXMgZGVmaW5lZCBieQorICogbW11X3RzYl9jdHhub24wKCkgaW50byB0aGUgcHJvdmlkZWQgYnVmZmVyLiAgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgorICogaXMgZ2l2ZW4gaW4gQVJHMSBpbiB0ZXJtcyBvZiB0aGUgbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbiBlbnRyaWVzLgorICoKKyAqIFVwb24gcmV0dXJuLCBSRVQxIGFsd2F5cyBjb250YWlucyB0aGUgbnVtYmVyIG9mIFRTQiBkZXNjcmlwdGlvbnMKKyAqIHByZXZpb3VzbHkgY29uZmlndXJlZC4gIElmIHplcm8gVFNCcyB3ZXJlIGNvbmZpZ3VyZWQsIEVPSyBpcworICogcmV0dXJuZWQgd2l0aCBSRVQxIGNvbnRhaW5pbmcgMC4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVV9UU0JfQ1RYTk9OMF9JTkZPCTB4MmEKKworLyogbW11X2ZhdWx0X2FyZWFfaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVV9GQVVMVF9BUkVBX0lORk8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJZmF1bHQgYXJlYSByZWFsIGFkZHJlc3MKKyAqIEVSUk9SUzoJTm8gZXJyb3JzIGRlZmluZWQuCisgKgorICogUmV0dXJuIHRoZSBjdXJyZW50bHkgZGVmaW5lZCBNTVUgZmF1bHQgc3RhdHVzIGFyZWEgZm9yIHRoZSBjdXJyZW50CisgKiBDUFUuICBUaGUgcmVhbCBhZGRyZXNzIG9mIHRoZSBmYXVsdCBzdGF0dXMgYXJlYSBpcyByZXR1cm5lZCBpbgorICogUkVUMSwgb3IgMCBpcyByZXR1cm5lZCBpbiBSRVQxIGlmIG5vIGZhdWx0IHN0YXR1cyBhcmVhIGlzIGRlZmluZWQuCisgKgorICogTm90ZTogbW11X2ZhdWx0X2FyZWFfY29uZigpIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIChSRVQxKQorICogICAgICAgZnJvbSB0aGlzIHNlcnZpY2UgaWYgdGhlcmUgaXMgYSBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGZhdWx0CisgKgkgYXJlYSBmb3IgYSBjcHUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVfRkFVTFRfQVJFQV9JTkZPCTB4MmIKKworLyogQ2FjaGUgYW5kIE1lbW9yeSBzZXJ2aWNlcy4gKi8KKworLyogbWVtX3NjcnViKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTUVNX1NDUlVCCisgKiBBUkcwOglyZWFsIGFkZHJlc3MKKyAqIEFSRzE6CWxlbmd0aAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglsZW5ndGggc2NydWJiZWQKKyAqIEVSUk9SUzoJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MKKyAqCQlFQkFEQUxJR04JU3RhcnQgYWRkcmVzcyBvciBsZW5ndGggYXJlIG5vdCBjb3JyZWN0bHkKKyAqCQkJCWFsaWduZWQKKyAqCQlFSU5WQUwJCUxlbmd0aCBpcyB6ZXJvCisgKgorICogWmVybyB0aGUgbWVtb3J5IGNvbnRlbnRzIGluIHRoZSByYW5nZSByZWFsIGFkZHJlc3MgdG8gcmVhbCBhZGRyZXNzCisgKiBwbHVzIGxlbmd0aCBtaW51cyAxLiAgQWxzbywgdmFsaWQgRUNDIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGF0CisgKiBtZW1vcnkgYWRkcmVzcyByYW5nZS4gIFNjcnViYmluZyBpcyBzdGFydGVkIGF0IHRoZSBnaXZlbiByZWFsCisgKiBhZGRyZXNzLCBidXQgbWF5IG5vdCBzY3J1YiB0aGUgZW50aXJlIGdpdmVuIGxlbmd0aC4gIFRoZSBhY3R1YWwKKyAqIGxlbmd0aCBzY3J1YmJlZCB3aWxsIGJlIHJldHVybmVkIGluIFJFVDEuCisgKgorICogVGhlIHJlYWwgYWRkcmVzcyBhbmQgbGVuZ3RoIG11c3QgYmUgYWxpZ25lZCBvbiBhbiA4SyBib3VuZGFyeSwgb3IKKyAqIGNvbnRhaW4gdGhlIHN0YXJ0IGFkZHJlc3MgYW5kIGxlbmd0aCBmcm9tIGEgc3VuNHYgZXJyb3IgcmVwb3J0LgorICoKKyAqIE5vdGU6IFRoZXJlIGFyZSB0d28gdXNlcyBmb3IgdGhpcyBmdW5jdGlvbi4gIFRoZSBmaXJzdCB1c2UgaXMgdG8gYmxvY2sgY2xlYXIKKyAqICAgICAgIGFuZCBpbml0aWFsaXplIG1lbW9yeSBhbmQgdGhlIHNlY29uZCBpcyB0byBzY3J1YiBhbiB1IG5jb3JyZWN0YWJsZQorICogICAgICAgZXJyb3IgcmVwb3J0ZWQgdmlhIGEgcmVzdW1hYmxlIG9yIG5vbi1yZXN1bWFibGUgdHJhcC4gIFRoZSBzZWNvbmQKKyAqICAgICAgIHVzZSByZXF1aXJlcyB0aGUgYXJndW1lbnRzIHRvIGJlIGVxdWFsIHRvIHRoZSByZWFsIGFkZHJlc3MgYW5kIGxlbmd0aAorICogICAgICAgcHJvdmlkZWQgaW4gYSBzdW40diBtZW1vcnkgZXJyb3IgcmVwb3J0LgorICovCisjZGVmaW5lIEhWX0ZBU1RfTUVNX1NDUlVCCQkweDMxCisKKy8qIG1lbV9zeW5jKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfTUVNX1NZTkMKKyAqIEFSRzA6CXJlYWwgYWRkcmVzcworICogQVJHMToJbGVuZ3RoCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWxlbmd0aCBzeW5jZWQKKyAqIEVSUk9SUzoJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MKKyAqCQlFQkFEQUxJR04JU3RhcnQgYWRkcmVzcyBvciBsZW5ndGggYXJlIG5vdCBjb3JyZWN0bHkKKyAqCQkJCWFsaWduZWQKKyAqCQlFSU5WQUwJCUxlbmd0aCBpcyB6ZXJvCisgKgorICogRm9yY2UgdGhlIG5leHQgYWNjZXNzIHdpdGhpbiB0aGUgcmVhbCBhZGRyZXNzIHRvIHJlYWwgYWRkcmVzcyBwbHVzCisgKiBsZW5ndGggbWludXMgMSB0byBiZSBmZXRjaGVzIGZyb20gbWFpbiBzeXN0ZW0gbWVtb3J5LiAgTGVzcyB0aGFuCisgKiB0aGUgZ2l2ZW4gbGVuZ3RoIG1heSBiZSBzeW5jZWQsIHRoZSBhY3R1YWwgYW1vdW50IHN5bmNlZCBpcworICogcmV0dXJuZWQgaW4gUkVUMS4gIFRoZSByZWFsIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgb24KKyAqIGFuIDhLIGJvdW5kYXJ5LgorICovCisjZGVmaW5lIEhWX0ZBU1RfTUVNX1NZTkMJCTB4MzIKKworLyogVGltZSBvZiBkYXkgc2VydmljZXMuCisgKgorICogVGhlIGh5cGVydmlzb3IgbWFpbnRhaW5zIHRoZSB0aW1lIG9mIGRheSBvbiBhIHBlci1kb21haW4gYmFzaXMuCisgKiBDaGFuZ2luZyB0aGUgdGltZSBvZiBkYXkgaW4gb25lIGRvbWFpbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHRpbWUgb2YKKyAqIGRheSBvbiBhbnkgb3RoZXIgZG9tYWluLgorICoKKyAqIFRpbWUgaXMgZGVzY3JpYmVkIGJ5IGEgc2luZ2xlIHVuc2lnbmVkIDY0LWJpdCB3b3JkIHdoaWNoIGlzIHRoZQorICogbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVOSVggRXBvY2ggKDAwOjAwOjAwIFVUQywgSmFudWFyeSAxLAorICogMTk3MCkuCisgKi8KKworLyogdG9kX2dldCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1RPRF9HRVQKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJVE9ECisgKiBFUlJPUlM6CUVXT1VMREJMT0NLCVRPRCByZXNvdXJjZSBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQorICoJCUVOT1RTVVBQT1JURUQJSWYgVE9EIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybQorICoKKyAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIG9mIGRheS4gIE1heSBibG9jayBpZiBUT0QgYWNjZXNzIGlzCisgKiB0ZW1wb3JhcmlseSBub3QgcG9zc2libGUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9UT0RfR0VUCQkJMHg1MAorCisvKiB0b2Rfc2V0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVE9EX1NFVAorICogQVJHMDoJVE9ECisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRVdPVUxEQkxPQ0sJVE9EIHJlc291cmNlIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlCisgKgkJRU5PVFNVUFBPUlRFRAlJZiBUT0Qgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCisgKgorICogVGhlIGN1cnJlbnQgdGltZSBvZiBkYXkgaXMgc2V0IHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gQVJHMC4gIE1heQorICogYmxvY2sgaWYgVE9EIGFjY2VzcyBpcyB0ZW1wb3JhcmlseSBub3QgcG9zc2libGUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9UT0RfU0VUCQkJMHg1MQorCisvKiBDb25zb2xlIHNlcnZpY2VzICovCisKKy8qIGNvbl9nZXRjaGFyKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ09OU19HRVRDSEFSCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWNoYXJhY3RlcgorICogRVJST1JTOglFV09VTERCTE9DSwlObyBjaGFyYWN0ZXIgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybnMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29sZSBkZXZpY2UuICBJZiBubyBjaGFyYWN0ZXIgaXMKKyAqIGF2YWlsYWJsZSB0aGVuIGFuIEVXT1VMREJMT0NLIGVycm9yIGlzIHJldHVybmVkLiAgSWYgYSBjaGFyYWN0ZXIgaXMKKyAqIGF2YWlsYWJsZSwgdGhlbiB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIEVPSyBhbmQgdGhlIGNoYXJhY3RlciB2YWx1ZQorICogaXMgaW4gUkVUMS4KKyAqCisgKiBBIHZpcnR1YWwgQlJFQUsgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIDY0LWJpdCB2YWx1ZSAtMS4KKyAqCisgKiBBIHZpcnR1YWwgSFVQIHNpZ25hbCBpcyByZXByZXNlbnRlZCBieSB0aGUgNjQtYml0IHZhbHVlIC0yLgorICovCisjZGVmaW5lIEhWX0ZBU1RfQ09OU19HRVRDSEFSCQkweDYwCisKKy8qIGNvbl9wdXRjaGFyKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfQ09OU19QVVRDSEFSCisgKiBBUkcwOgljaGFyYWN0ZXIKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUlsbGVnYWwgY2hhcmFjdGVyCisgKgkJRVdPVUxEQkxPQ0sJT3V0cHV0IGJ1ZmZlciBjdXJyZW50bHkgZnVsbCwgd291bGQgYmxvY2sKKyAqCisgKiBTZW5kIGEgY2hhcmFjdGVyIHRvIHRoZSBjb25zb2xlIGRldmljZS4gIE9ubHkgY2hhcmFjdGVyIHZhbHVlcworICogYmV0d2VlbiAwIGFuZCAyNTUgbWF5IGJlIHVzZWQuICBWYWx1ZXMgb3V0c2lkZSB0aGlzIHJhbmdlIGFyZQorICogaW52YWxpZCBleGNlcHQgZm9yIHRoZSA2NC1iaXQgdmFsdWUgLTEgd2hpY2ggaXMgdXNlZCB0byBzZW5kIGEKKyAqIHZpcnR1YWwgQlJFQUsuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9DT05TX1BVVENIQVIJCTB4NjEKKworLyogVHJhcCB0cmFjZSBzZXJ2aWNlcy4KKyAqCisgKiBUaGUgaHlwZXJ2aXNvciBwcm92aWRlcyBhIHRyYXAgdHJhY2luZyBjYXBhYmlsaXR5IGZvciBwcml2aWxlZ2VkCisgKiBjb2RlIHJ1bm5pbmcgb24gZWFjaCB2aXJ0dWFsIENQVS4gIFByaXZpbGVnZWQgY29kZSBwcm92aWRlcyBhCisgKiByb3VuZC1yb2JpbiB0cmFwIHRyYWNlIHF1ZXVlIHdpdGhpbiB3aGljaCB0aGUgaHlwZXJ2aXNvciB3cml0ZXMKKyAqIDY0LWJ5dGUgZW50cmllcyBkZXRhaWxpbmcgaHlwZXJwcml2aWxlZ2VkIHRyYXBzIHRha2VuIG4gYmVoYWxmIG9mCisgKiBwcml2aWxlZ2VkIGNvZGUuICBUaGlzIGlzIHByb3ZpZGVkIGFzIGEgZGVidWdnaW5nIGNhcGFiaWxpdHkgZm9yCisgKiBwcml2aWxlZ2VkIGNvZGUuCisgKgorICogVGhlIHRyYXAgdHJhY2UgY29udHJvbCBzdHJ1Y3R1cmUgaXMgNjQtYnl0ZXMgbG9uZyBhbmQgcGxhY2VkIGF0IHRoZQorICogc3RhcnQgKG9mZnNldCAwKSBvZiB0aGUgdHJhcCB0cmFjZSBidWZmZXIsIGFuZCBpcyBkZXNjcmliZWQgYXMKKyAqIGZvbGxvd3M6CisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgaHZfdHJhcF90cmFjZV9jb250cm9sIHsKKwl1bnNpZ25lZCBsb25nCQloZWFkX29mZnNldDsKKwl1bnNpZ25lZCBsb25nCQl0YWlsX29mZnNldDsKKwl1bnNpZ25lZCBsb25nCQlfX3Jlc2VydmVkWzB4MzAgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOworfTsKKyNlbmRpZgorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0NUUkxfSEVBRF9PRkZTRVQJMHgwMAorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0NUUkxfVEFJTF9PRkZTRVQJMHgwOAorCisvKiBUaGUgaGVhZCBvZmZzZXQgaXMgdGhlIG9mZnNldCBvZiB0aGUgbW9zdCByZWNlbnRseSBjb21wbGV0ZWQgZW50cnkKKyAqIGluIHRoZSB0cmFwLXRyYWNlIGJ1ZmZlci4gIFRoZSB0YWlsIG9mZnNldCBpcyB0aGUgb2Zmc2V0IG9mIHRoZQorICogbmV4dCBlbnRyeSB0byBiZSB3cml0dGVuLiAgVGhlIGNvbnRyb2wgc3RydWN0dXJlIGlzIG93bmVkIGFuZAorICogbW9kaWZpZWQgYnkgdGhlIGh5cGVydmlzb3IuICBBIGd1ZXN0IG1heSBub3QgbW9kaWZ5IHRoZSBjb250cm9sCisgKiBzdHJ1Y3R1cmUgY29udGVudHMuICBBdHRlbXB0cyB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiB1bmRlZmluZWQKKyAqIGJlaGF2aW9yIGZvciB0aGUgZ3Vlc3QuCisgKgorICogRWFjaCB0cmFwIHRyYWNlIGJ1ZmZlciBlbnRyeSBpcyBsYXllZCBvdXQgYXMgZm9sbG93czoKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCBodl90cmFwX3RyYWNlX2VudHJ5IHsKKwl1bnNpZ25lZCBjaGFyCXR5cGU7CQkvKiBIeXBlcnZpc29yIG9yIGd1ZXN0IGVudHJ5PwkqLworCXVuc2lnbmVkIGNoYXIJaHBzdGF0ZTsJLyogSHlwZXItcHJpdmlsZWdlZCBzdGF0ZQkqLworCXVuc2lnbmVkIGNoYXIJdGw7CQkvKiBUcmFwIGxldmVsCQkJKi8KKwl1bnNpZ25lZCBjaGFyCWdsOwkJLyogR2xvYmFsIHJlZ2lzdGVyIGxldmVsCSovCisJdW5zaWduZWQgc2hvcnQJdHQ7CQkvKiBUcmFwIHR5cGUJCQkqLworCXVuc2lnbmVkIHNob3J0CXRhZzsJCS8qIEV4dGVuZGVkIHRyYXAgaWRlbnRpZmllcgkqLworCXVuc2lnbmVkIGxvbmcJdHN0YXRlOwkJLyogVHJhcCBzdGF0ZQkJCSovCisJdW5zaWduZWQgbG9uZwl0aWNrOwkJLyogVGljawkJCQkqLworCXVuc2lnbmVkIGxvbmcJdHBjOwkJLyogVHJhcCBQQwkJCSovCisJdW5zaWduZWQgbG9uZwlmMTsJCS8qIEVudHJ5IHNwZWNpZmljCQkqLworCXVuc2lnbmVkIGxvbmcJZjI7CQkvKiBFbnRyeSBzcGVjaWZpYwkJKi8KKwl1bnNpZ25lZCBsb25nCWYzOwkJLyogRW50cnkgc3BlY2lmaWMJCSovCisJdW5zaWduZWQgbG9uZwlmNDsJCS8qIEVudHJ5IHNwZWNpZmljCQkqLworfTsKKyNlbmRpZgorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RZUEUJMHgwMAorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX0hQU1RBVEUJMHgwMQorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RMCQkweDAyCisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfR0wJCTB4MDMKKyNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9UVAkJMHgwNAorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RBRwkJMHgwNgorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX1RTVEFURQkweDA4CisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfVElDSwkweDEwCisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfVFBDCQkweDE4CisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfRjEJCTB4MjAKKyNkZWZpbmUgSFZfVFJBUF9UUkFDRV9FTlRSWV9GMgkJMHgyOAorI2RlZmluZSBIVl9UUkFQX1RSQUNFX0VOVFJZX0YzCQkweDMwCisjZGVmaW5lIEhWX1RSQVBfVFJBQ0VfRU5UUllfRjQJCTB4MzgKKworLyogVGhlIHR5cGUgZmllbGQgaXMgZW5jb2RlZCBhcyBmb2xsb3dzLiAgKi8KKyNkZWZpbmUgSFZfVFJBUF9UWVBFX1VOREVGCQkweDAwIC8qIEVudHJ5IGNvbnRlbnQgdW5kZWZpbmVkICAgICAqLworI2RlZmluZSBIVl9UUkFQX1RZUEVfSFYJCQkweDAxIC8qIEh5cGVydmlzb3IgdHJhcCBlbnRyeSAgICAgICAqLworI2RlZmluZSBIVl9UUkFQX1RZUEVfR1VFU1QJCTB4ZmYgLyogQWRkZWQgdmlhIHR0cmFjZV9hZGRlbnRyeSgpICovCisKKy8qIHR0cmFjZV9idWZfY29uZigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1RUUkFDRV9CVUZfQ09ORgorICogQVJHMDoJcmVhbCBhZGRyZXNzCisgKiBBUkcxOgludW1iZXIgb2YgZW50cmllcworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgludW1iZXIgb2YgZW50cmllcworICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVJTlZBTAkJU2l6ZSBpcyB0b28gc21hbGwKKyAqCQlFQkFEQUxJR04JUmVhbCBhZGRyZXNzIG5vdCBhbGlnbmVkIG9uIDY0LWJ5dGUgYm91bmRhcnkKKyAqCisgKiBSZXF1ZXN0cyBoeXBlcnZpc29yIHRyYXAgdHJhY2luZyBhbmQgZGVjbGFyZXMgYSB2aXJ0dWFsIENQVSdzIHRyYXAKKyAqIHRyYWNlIGJ1ZmZlciB0byB0aGUgaHlwZXJ2aXNvci4gIFRoZSByZWFsIGFkZHJlc3Mgc3VwcGxpZXMgdGhlIHJlYWwKKyAqIGJhc2UgYWRkcmVzcyBvZiB0aGUgdHJhcCB0cmFjZSBxdWV1ZSBhbmQgbXVzdCBiZSA2NC1ieXRlIGFsaWduZWQuCisgKiBTcGVjaWZ5aW5nIGEgdmFsdWUgb2YgMCBmb3IgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc2FibGVzIHRyYXAKKyAqIHRyYWNpbmcgZm9yIHRoZSBjYWxsaW5nIHZpcnR1YWwgQ1BVLiAgVGhlIGJ1ZmZlciBhbGxvY2F0ZWQgbXVzdCBiZQorICogc2l6ZWQgZm9yIGEgcG93ZXIgb2YgdHdvIG51bWJlciBvZiA2NC1ieXRlIHRyYXAgdHJhY2UgZW50cmllcyBwbHVzCisgKiBhbiBpbml0aWFsIDY0LWJ5dGUgY29udHJvbCBzdHJ1Y3R1cmUuCisgKiAKKyAqIFRoaXMgbWF5IGJlIGludm9rZWQgYW55IG51bWJlciBvZiB0aW1lcyBzbyB0aGF0IGEgdmlydHVhbCBDUFUgbWF5CisgKiByZWxvY2F0ZSBhIHRyYXAgdHJhY2UgYnVmZmVyIG9yIGNyZWF0ZSAic25hcHNob3RzIiBvZiBpbmZvcm1hdGlvbi4KKyAqCisgKiBJZiB0aGUgcmVhbCBhZGRyZXNzIGlzIGlsbGVnYWwgb3IgYmFkbHkgYWxpZ25lZCwgdGhlbiB0cmFwIHRyYWNpbmcKKyAqIGlzIGRpc2FibGVkIGFuZCBhbiBlcnJvciBpcyByZXR1cm5lZC4KKyAqCisgKiBVcG9uIGZhaWx1cmUgd2l0aCBFSU5WQUwsIHRoaXMgc2VydmljZSBjYWxsIHJldHVybnMgaW4gUkVUMSB0aGUKKyAqIG1pbmltdW0gbnVtYmVyIG9mIGJ1ZmZlciBlbnRyaWVzIHJlcXVpcmVkLiAgVXBvbiBvdGhlciBmYWlsdXJlcworICogUkVUMSBpcyB1bmRlZmluZWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9UVFJBQ0VfQlVGX0NPTkYJCTB4OTAKKworLyogdHRyYWNlX2J1Zl9pbmZvKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfVFRSQUNFX0JVRl9JTkZPCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcworICogUkVUMjoJc2l6ZQorICogRVJST1JTOglOb25lIGRlZmluZWQuCisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBhbmQgbG9jYXRpb24gb2YgdGhlIHByZXZpb3VzbHkgZGVjbGFyZWQgdHJhcC10cmFjZQorICogYnVmZmVyLiAgSW4gdGhlIGV2ZW50IHRoYXQgbm8gYnVmZmVyIHdhcyBwcmV2aW91c2x5IGRlZmluZWQsIG9yIHRoZQorICogYnVmZmVyIGlzIGRpc2FibGVkLCB0aGlzIGNhbGwgd2lsbCByZXR1cm4gYSBzaXplIG9mIHplcm8gYnl0ZXMuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9UVFJBQ0VfQlVGX0lORk8JCTB4OTEKKworLyogdHRyYWNlX2VuYWJsZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1RUUkFDRV9FTkFCTEUKKyAqIEFSRzA6CWVuYWJsZQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglwcmV2aW91cyBlbmFibGUgc3RhdGUKKyAqIEVSUk9SUzoJRUlOVkFMCQlObyB0cmFwIHRyYWNlIGJ1ZmZlciBjdXJyZW50bHkgZGVmaW5lZAorICoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIHRyYXAgdHJhY2luZywgYW5kIHJldHVybiB0aGUgcHJldmlvdXMgZW5hYmxlZAorICogc3RhdGUgaW4gUkVUMS4gIEZ1dHVyZSBzeXN0ZW1zIG1heSBkZWZpbmUgdmFyaW91cyBmbGFncyBmb3IgdGhlCisgKiBlbmFibGUgYXJndW1lbnQgKEFSRzApLCBmb3IgdGhlIG1vbWVudCBhIGd1ZXN0IHNob3VsZCBwYXNzCisgKiAiKHVpbnQ2NF90KSAtMSIgdG8gZW5hYmxlLCBhbmQgIih1aW50NjRfdCkgMCIgdG8gZGlzYWJsZSBhbGwKKyAqIHRyYWNpbmcgLSB3aGljaCB3aWxsIGVuc3VyZSBmdXR1cmUgY29tcGF0YWJpbGl0eS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1RUUkFDRV9FTkFCTEUJCTB4OTIKKworLyogdHRyYWNlX2ZyZWV6ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1RUUkFDRV9GUkVFWkUKKyAqIEFSRzA6CWZyZWV6ZQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglwcmV2aW91cyBmcmVlemUgc3RhdGUKKyAqIEVSUk9SUzoJRUlOVkFMCQlObyB0cmFwIHRyYWNlIGJ1ZmZlciBjdXJyZW50bHkgZGVmaW5lZAorICoKKyAqIEZyZWV6ZSBvciB1bmZyZWV6ZSB0cmFwIHRyYWNpbmcsIHJldHVybmluZyB0aGUgcHJldmlvdXMgZnJlZXplCisgKiBzdGF0ZSBpbiBSRVQxLiAgQSBndWVzdCBzaG91bGQgcGFzcyBhIG5vbi16ZXJvIHZhbHVlIHRvIGZyZWV6ZSBhbmQKKyAqIGEgemVybyB2YWx1ZSB0byB1bmZyZWV6ZSBhbGwgdHJhY2luZy4gIFRoZSByZXR1cm5lZCBwcmV2aW91cyBzdGF0ZQorICogaXMgMCBmb3Igbm90IGZyb3plbiBhbmQgMSBmb3IgZnJvemVuLgorICovCisjZGVmaW5lIEhWX0ZBU1RfVFRSQUNFX0ZSRUVaRQkJMHg5MworCisvKiB0dHJhY2VfYWRkZW50cnkoKQorICogVFJBUDoJSFZfVFRSQUNFX0FEREVOVFJZX1RSQVAKKyAqIEFSRzA6CXRhZyAoMTYtYml0cykKKyAqIEFSRzE6CWRhdGEgd29yZCAwCisgKiBBUkcyOglkYXRhIHdvcmQgMQorICogQVJHMzoJZGF0YSB3b3JkIDIKKyAqIEFSRzQ6CWRhdGEgd29yZCAzCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlObyB0cmFwIHRyYWNlIGJ1ZmZlciBjdXJyZW50bHkgZGVmaW5lZAorICoKKyAqIEFkZCBhbiBlbnRyeSB0byB0aGUgdHJhcCB0cmFjZSBidWZmZXIuICBVcG9uIHJldHVybiBvbmx5IEFSRzAvUkVUMAorICogaXMgbW9kaWZpZWQgLSBub25lIG9mIHRoZSBvdGhlciByZWdpc3RlcnMgaG9sZGluZyBhcmd1bWVudHMgYXJlCisgKiB2b2xhdGlsZSBhY3Jvc3MgdGhpcyBoeXBlcnZpc29yIHNlcnZpY2UuCisgKi8KKworLyogQ29yZSBkdW1wIHNlcnZpY2VzLgorICoKKyAqIFNpbmNlIHRoZSBoeXBlcnZpc29yIHZpcmF1bGl6ZXMgYW5kIHRodXMgb2JzY3VyZXMgYSBsb3Qgb2YgdGhlCisgKiBwaHlzaWNhbCBtYWNoaW5lIGxheW91dCBhbmQgc3RhdGUsIHRyYWRpdGlvbmFsIE9TIGNyYXNoIGR1bXBzIGNhbgorICogYmUgZGlmZmljdWx0IHRvIGRpYWdub3NlIGVzcGVjaWFsbHkgd2hlbiB0aGUgcHJvYmxlbSBpcyBhCisgKiBjb25maWd1cmF0aW9uIGVycm9yIG9mIHNvbWUgc29ydC4KKyAqCisgKiBUaGUgZHVtcCBzZXJ2aWNlcyBwcm92aWRlIGFuIG9wYXF1ZSBidWZmZXIgaW50byB3aGljaCB0aGUKKyAqIGh5cGVydmlzb3IgY2FuIHBsYWNlIGl0J3MgaW50ZXJuYWwgc3RhdGUgaW4gb3JkZXIgdG8gYXNzaXN0IGluCisgKiBkZWJ1Z2dpbmcgc3VjaCBzaXR1YXRpb25zLiAgVGhlIGNvbnRlbnRzIGFyZSBvcGFxdWUgYW5kIGV4dHJlbWVseQorICogcGxhdGZvcm0gYW5kIGh5cGVydmlzb3IgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuICBUaGUgZ3Vlc3QsIGR1cmluZworICogYSBjb3JlIGR1bXAsIHJlcXVlc3RzIHRoYXQgdGhlIGh5cGVydmlzb3IgdXBkYXRlIGFueSBpbmZvcm1hdGlvbiBpbgorICogdGhlIGR1bXAgYnVmZmVyIGluIHByZXBhcmF0aW9uIHRvIGJlaW5nIGR1bXBlZCBhcyBwYXJ0IG9mIHRoZQorICogZG9tYWluJ3MgbWVtb3J5IGltYWdlLgorICovCisKKy8qIGR1bXBfYnVmX3VwZGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0RVTVBfQlVGX1VQREFURQorICogQVJHMDoJcmVhbCBhZGRyZXNzCisgKiBBUkcxOglzaXplCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlcXVpcmVkIHNpemUgb2YgZHVtcCBidWZmZXIKKyAqIEVSUk9SUzoJRU5PUkFERFIJSW52YWxpZCByZWFsIGFkZHJlc3MKKyAqCQlFQkFEQUxJR04JUmVhbCBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgNjQtYnl0ZQorICoJCQkJYm91bmRhcnkKKyAqCQlFSU5WQUwJCVNpemUgaXMgbm9uLXplcm8gYnV0IGxlc3MgdGhhbiBtaW5pbXVtIHNpemUKKyAqCQkJCXJlcXVpcmVkCisgKgkJRU5PVFNVUFBPUlRFRAlPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiBjdXJyZW50IGxvZ2ljYWwKKyAqCQkJCWRvbWFpbgorICoKKyAqIERlY2xhcmUgYSBkb21haW4gZHVtcCBidWZmZXIgdG8gdGhlIGh5cGVydmlzb3IuICBUaGUgcmVhbCBhZGRyZXNzCisgKiBwcm92aWRlZCBmb3IgdGhlIGRvbWFpbiBkdW1wIGJ1ZmZlciBtdXN0IGJlIDY0LWJ5dGUgYWxpZ25lZC4gIFRoZQorICogc2l6ZSBzcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIGR1bXAgYnVmZmVyIGFuZCBtYXkgYmUgbGFyZ2VyIHRoYW4KKyAqIHRoZSBtaW5pbXVtIHNpemUgc3BlY2lmaWVkIGluIHRoZSBtYWNoaW5lIGRlc2NyaXB0aW9uLiAgVGhlCisgKiBoeXBlcnZpc29yIHdpbGwgZmlsbCB0aGUgZHVtcCBidWZmZXIgd2l0aCBvcGFxdWUgZGF0YS4KKyAqCisgKiBOb3RlOiBBIGd1ZXN0IG1heSBlbGVjdCB0byBpbmNsdWRlIGR1bXAgYnVmZmVyIGNvbnRlbnRzIGFzIHBhcnQgb2YgYSBjcmFzaAorICogICAgICAgZHVtcCB0byBhc3Npc3Qgd2l0aCBkZWJ1Z2dpbmcuICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYW55IG51bWJlcgorICogICAgICAgb2YgdGltZXMgc28gdGhhdCBhIGd1ZXN0IG1heSByZWxvY2F0ZSBhIGR1bXAgYnVmZmVyLCBvciBjcmVhdGUKKyAqICAgICAgICJzbmFwc2hvdHMiIG9mIGFueSBkdW1wLWJ1ZmZlciBpbmZvcm1hdGlvbi4gIEVhY2ggY2FsbCB0bworICogICAgICAgZHVtcF9idWZfdXBkYXRlKCkgYXRvbWljYWxseSBkZWNsYXJlcyB0aGUgbmV3IGR1bXAgYnVmZmVyIHRvIHRoZQorICogICAgICAgaHlwZXJ2aXNvci4KKyAqCisgKiBBIHNwZWNpZmllZCBzaXplIG9mIDAgdW5jb25maWd1cmVzIHRoZSBkdW1wIGJ1ZmZlci4gIElmIHRoZSByZWFsCisgKiBhZGRyZXNzIGlzIGlsbGVnYWwgb3IgYmFkbHkgYWxpZ25lZCwgdGhlbiBhbnkgY3VycmVudGx5IGFjdGl2ZSBkdW1wCisgKiBidWZmZXIgaXMgZGlzYWJsZWQgYW5kIGFuIGVycm9yIGlzIHJldHVybmVkLgorICoKKyAqIEluIHRoZSBldmVudCB0aGF0IHRoZSBjYWxsIGZhaWxzIHdpdGggRUlOVkFMLCBSRVQxIGNvbnRhaW5zIHRoZQorICogbWluaW11bSBzaXplIHJlcXVpcmVzIGJ5IHRoZSBoeXBlcnZpc29yIGZvciBhIHZhbGlkIGR1bXAgYnVmZmVyLgorICovCisjZGVmaW5lIEhWX0ZBU1RfRFVNUF9CVUZfVVBEQVRFCQkweDk0CisKKy8qIGR1bXBfYnVmX2luZm8oKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9EVU1QX0JVRl9JTkZPCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcyBvZiBjdXJyZW50IGR1bXAgYnVmZmVyCisgKiBSRVQyOglzaXplIG9mIGN1cnJlbnQgZHVtcCBidWZmZXIKKyAqIEVSUk9SUzoJTm8gZXJyb3JzIGRlZmluZWQuCisgKgorICogUmV0dXJuIHRoZSBjdXJyZW50bHkgY29uZmlndXJlcyBkdW1wIGJ1ZmZlciBkZXNjcmlwdGlvbi4gIEEKKyAqIHJldHVybmVkIHNpemUgb2YgMCBieXRlcyBpbmRpY2F0ZXMgYW4gdW5kZWZpbmVkIGR1bXAgYnVmZmVyLiAgSW4KKyAqIHRoaXMgY2FzZSB0aGUgcmV0dXJuIGFkZHJlc3MgaW4gUkVUMSBpcyB1bmRlZmluZWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9EVU1QX0JVRl9JTkZPCQkweDk1CisKKy8qIERldmljZSBpbnRlcnJ1cHQgc2VydmljZXMuCisgKgorICogRGV2aWNlIGludGVycnVwdHMgYXJlIGFsbG9jYXRlZCB0byBzeXN0ZW0gYnVzIGJyaWRnZXMgYnkgdGhlIGh5cGVydmlzb3IsCisgKiBhbmQgZGVzY3JpYmVkIHRvIE9CUCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbi4gIE9CUCB0aGVuIGRlc2NyaWJlcworICogdGhlc2UgaW50ZXJydXB0cyB0byB0aGUgT1MgdmlhIHByb3BlcnRpZXMgaW4gdGhlIGRldmljZSB0cmVlLgorICoKKyAqIFRlcm1pbm9sb2d5OgorICoKKyAqCWNwdWlkCQlVbmlxdWUgb3BhcXVlIHZhbHVlIHdoaWNoIHJlcHJlc2VudHMgYSB0YXJnZXQgY3B1LgorICoKKyAqCWRldmhhbmRsZQlEZXZpY2UgaGFuZGxlLiAgSXQgdW5pcXVlbHkgaWRlbnRpZmllcyBhIGRldmljZSwgYW5kCisgKgkJCWNvbnNpc3RlcyBvZiB0aGUgbG93ZXIgMjgtYml0cyBvZiB0aGUgaGktY2VsbCBvZiB0aGUKKyAqCQkJZmlyc3QgZW50cnkgb2YgdGhlIGRldmljZSdzICJyZWciIHByb3BlcnR5IGluIHRoZQorICoJCQlPQlAgZGV2aWNlIHRyZWUuCisgKgorICoJZGV2aW5vCQlEZXZpY2UgaW50ZXJydXB0IG51bWJlci4gIFNwZWNpZmllcyB0aGUgcmVsYXRpdmUKKyAqCQkJaW50ZXJydXB0IG51bWJlciB3aXRoaW4gdGhlIGRldmljZS4gIFRoZSB1bmlxdWUKKyAqCQkJY29tYmluYXRpb24gb2YgZGV2aGFuZGxlIGFuZCBkZXZpbm8gYXJlIHVzZWQgdG8KKyAqCQkJaWRlbnRpZnkgYSBzcGVjaWZpYyBkZXZpY2UgaW50ZXJydXB0LgorICoKKyAqCQkJTm90ZTogVGhlIGRldmlubyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgdmFsdWVzIGluIHRoZQorICoJCQkgICAgICAiaW50ZXJydXB0cyIgcHJvcGVydHkgb3IgImludGVycnVwdC1tYXAiIHByb3BlcnR5CisgKgkJCSAgICAgIGluIHRoZSBPQlAgZGV2aWNlIHRyZWUgZm9yIHRoYXQgZGV2aWNlLgorICoKKyAqCXN5c2lubwkJU3lzdGVtIGludGVycnVwdCBudW1iZXIuICBBIDY0LWJpdCB1bnNpZ25lZCBpbnRlcmdlcgorICoJCQlyZXByZXNlbnRpbmcgYSB1bmlxdWUgaW50ZXJydXB0IHdpdGhpbiBhIHZpcnR1YWwKKyAqCQkJbWFjaGluZS4KKyAqCisgKglpbnRyX3N0YXRlCUEgZmxhZyByZXByZXNlbnRpbmcgdGhlIGludGVycnVwdCBzdGF0ZSBmb3IgYSBnaXZlbgorICoJCQlzeXNpbm8uICBUaGUgc3RhdGUgdmFsdWVzIGFyZSBkZWZpbmVkIGJlbG93LgorICoKKyAqCWludHJfZW5hYmxlZAlBIGZsYWcgcmVwcmVzZW50aW5nIHRoZSAnZW5hYmxlZCcgc3RhdGUgZm9yIGEgZ2l2ZW4KKyAqCQkJc3lzaW5vLiAgVGhlIGVuYWJsZSB2YWx1ZXMgYXJlIGRlZmluZWQgYmVsb3cuCisgKi8KKworI2RlZmluZSBIVl9JTlRSX1NUQVRFX0lETEUJCTAgLyogTm90aGluZyBwZW5kaW5nICovCisjZGVmaW5lIEhWX0lOVFJfU1RBVEVfUkVDRUlWRUQJCTEgLyogSW50ZXJydXB0IHJlY2VpdmVkIGJ5IGhhcmR3YXJlICovCisjZGVmaW5lIEhWX0lOVFJfU1RBVEVfREVMSVZFUkVECQkyIC8qIEludGVycnVwdCBkZWxpdmVyZWQgdG8gcXVldWUgKi8KKworI2RlZmluZSBIVl9JTlRSX0RJU0FCTEVECQkwIC8qIHN5c2lubyBub3QgZW5hYmxlZCAqLworI2RlZmluZSBIVl9JTlRSX0VOQUJMRUQJCQkxIC8qIHN5c2lubyBlbmFibGVkICovCisKKy8qIGludHJfZGV2aW5vX3RvX3N5c2lubygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0lOVFJfREVWSU5PMlNZU0lOTworICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOglkZXZpbm8KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJc3lzaW5vCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUvZGV2aW5vCisgKgorICogQ29udmVydHMgYSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IG51bWJlciBvZiB0aGUgZ2l2ZW4KKyAqIGRldmhhbmRsZS9kZXZpbm8gaW50byBhIHN5c3RlbSBzcGVjaWZpYyBpbm8gKHN5c2lubykuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9JTlRSX0RFVklOTzJTWVNJTk8JMHhhMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfZGV2aW5vX3RvX3N5c2lubyh1bnNpZ25lZCBsb25nIGRldmhhbmRsZSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGV2aW5vKTsKKyNlbmRpZgorCisvKiBpbnRyX2dldGVuYWJsZWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9JTlRSX0dFVEVOQUJMRUQKKyAqIEFSRzA6CXN5c2lubworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglpbnRyX2VuYWJsZWQgKEhWX0lOVFJfe0RJU0FCTEVELEVOQUJMRUR9KQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgc3lzaW5vCisgKgorICogUmV0dXJucyBpbnRlcnJ1cHQgZW5hYmxlZCBzdGF0ZSBpbiBSRVQxIGZvciB0aGUgaW50ZXJydXB0IGRlZmluZWQKKyAqIGJ5IHRoZSBnaXZlbiBzeXNpbm8uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9JTlRSX0dFVEVOQUJMRUQJCTB4YTEKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2ludHJfZ2V0ZW5hYmxlZCh1bnNpZ25lZCBsb25nIHN5c2lubyk7CisjZW5kaWYKKworLyogaW50cl9zZXRlbmFibGVkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfSU5UUl9TRVRFTkFCTEVECisgKiBBUkcwOglzeXNpbm8KKyAqIEFSRzE6CWludHJfZW5hYmxlZCAoSFZfSU5UUl97RElTQUJMRUQsRU5BQkxFRH0pCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHN5c2lubyBvciBpbnRyX2VuYWJsZWQgdmFsdWUKKyAqCisgKiBTZXQgdGhlICdlbmFibGVkJyBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0IHN5c2luby4KKyAqLworI2RlZmluZSBIVl9GQVNUX0lOVFJfU0VURU5BQkxFRAkJMHhhMgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfaW50cl9zZXRlbmFibGVkKHVuc2lnbmVkIGxvbmcgc3lzaW5vLCB1bnNpZ25lZCBsb25nIGludHJfZW5hYmxlZCk7CisjZW5kaWYKKworLyogaW50cl9nZXRzdGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0lOVFJfR0VUU1RBVEUKKyAqIEFSRzA6CXN5c2lubworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglpbnRyX3N0YXRlIChIVl9JTlRSX1NUQVRFXyopCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBzeXNpbm8KKyAqCisgKiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGludGVycnVwdCBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBzeXNpbm8uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9JTlRSX0dFVFNUQVRFCQkweGEzCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW40dl9pbnRyX2dldHN0YXRlKHVuc2lnbmVkIGxvbmcgc3lzaW5vKTsKKyNlbmRpZgorCisvKiBpbnRyX3NldHN0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfSU5UUl9TRVRTVEFURQorICogQVJHMDoJc3lzaW5vCisgKiBBUkcxOglpbnRyX3N0YXRlIChIVl9JTlRSX1NUQVRFXyopCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHN5c2lubyBvciBpbnRyX3N0YXRlIHZhbHVlCisgKgorICogU2V0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0IGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gc3lzaW5vCisgKiB2YWx1ZS4KKyAqCisgKiBOb3RlOiBTZXR0aW5nIHRoZSBzdGF0ZSB0byBIVl9JTlRSX1NUQVRFX0lETEUgY2xlYXJzIGFueSBwZW5kaW5nCisgKiAgICAgICBpbnRlcnJ1cHQgZm9yIHN5c2luby4KKyAqLworI2RlZmluZSBIVl9GQVNUX0lOVFJfU0VUU1RBVEUJCTB4YTQKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2ludHJfc2V0c3RhdGUodW5zaWduZWQgbG9uZyBzeXNpbm8sIHVuc2lnbmVkIGxvbmcgaW50cl9zdGF0ZSk7CisjZW5kaWYKKworLyogaW50cl9nZXR0YXJnZXQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9JTlRSX0dFVFRBUkdFVAorICogQVJHMDoJc3lzaW5vCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWNwdWlkCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBzeXNpbm8KKyAqCisgKiBSZXR1cm5zIENQVSB0aGF0IGlzIHRoZSBjdXJyZW50IHRhcmdldCBvZiB0aGUgaW50ZXJydXB0IGRlZmluZWQgYnkKKyAqIHRoZSBnaXZlbiBzeXNpbm8uICBUaGUgQ1BVIHZhbHVlIHJldHVybmVkIGlzIHVuZGVmaW5lZCBpZiB0aGUgdGFyZ2V0CisgKiBoYXMgbm90IGJlZW4gc2V0IHZpYSBpbnRyX3NldHRhcmdldCgpLgorICovCisjZGVmaW5lIEhWX0ZBU1RfSU5UUl9HRVRUQVJHRVQJCTB4YTUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR2X2ludHJfZ2V0dGFyZ2V0KHVuc2lnbmVkIGxvbmcgc3lzaW5vKTsKKyNlbmRpZgorCisvKiBpbnRyX3NldHRhcmdldCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX0lOVFJfU0VUVEFSR0VUCisgKiBBUkcwOglzeXNpbm8KKyAqIEFSRzE6CWNwdWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHN5c2lubworICoJCUVOT0NQVQkJSW52YWxpZCBjcHVpZAorICoKKyAqIFNldCB0aGUgdGFyZ2V0IENQVSBmb3IgdGhlIGludGVycnVwdCBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBzeXNpbm8uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9JTlRSX1NFVFRBUkdFVAkJMHhhNgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3VuNHZfaW50cl9zZXR0YXJnZXQodW5zaWduZWQgbG9uZyBzeXNpbm8sIHVuc2lnbmVkIGxvbmcgY3B1aWQpOworI2VuZGlmCisKKy8qIFBDSSBJTyBzZXJ2aWNlcy4KKyAqCisgKiBTZWUgdGhlIHRlcm1pbm9sb2d5IGRlc2NyaXB0aW9ucyBpbiB0aGUgZGV2aWNlIGludGVycnVwdCBzZXJ2aWNlcworICogc2VjdGlvbiBhYm92ZSBhcyB0aG9zZSBhcHBseSBoZXJlIHRvby4gIEhlcmUgYXJlIHRlcm1pbm9sb2d5CisgKiBkZWZpbml0aW9ucyBzcGVjaWZpYyB0byB0aGVzZSBQQ0kgSU8gc2VydmljZXM6CisgKgorICoJdHNibnVtCQlUU0IgbnVtYmVyLiAgSW5kZW50aWZpZXMgd2hpY2ggaW8tdHNiIGlzIHVzZWQuCisgKgkJCUZvciB0aGlzIHZlcnNpb24gb2YgdGhlIHNwZWNpZmljYXRpb24sIHRzYm51bQorICoJCQltdXN0IGJlIHplcm8uCisgKgorICoJdHNiaW5kZXgJVFNCIGluZGV4LiAgSWRlbnRpZmllcyB3aGljaCBlbnRyeSBpbiB0aGUgVFNCCisgKgkJCWlzIHVzZWQuICBUaGUgZmlyc3QgZW50cnkgaXMgemVyby4KKyAqCisgKgl0c2JpZAkJQSA2NC1iaXQgYWxpZ25lZCBkYXRhIHN0cnVjdHVyZSB3aGljaCBjb250YWlucworICoJCQlhIHRzYm51bSBhbmQgYSB0c2JpbmRleC4gIEJpdHMgNjM6MzIgY29udGFpbiB0aGUKKyAqCQkJdHNibnVtIGFuZCBiaXRzIDMxOjAwIGNvbnRhaW4gdGhlIHRzYmluZGV4LgorICoKKyAqCQkJVXNlIHRoZSBIVl9QQ0lfVFNCSUQoKSBtYWNybyB0byBjb25zdHJ1Y3Qgc3VjaAorICogCQkJdmFsdWVzLgorICoKKyAqCWlvX2F0dHJpYnV0ZXMJSU8gYXR0cmlidXRlcyBmb3IgSU9NTVUgbWFwcGluZ3MuICBPbmUgb2YgbW9yZQorICoJCQlvZiB0aGUgYXR0cml0YnV0ZSBiaXRzIGFyZSBzdG9yZXMgaW4gYSA2NC1iaXQKKyAqCQkJdmFsdWUuICBUaGUgdmFsdWVzIGFyZSBkZWZpbmVkIGJlbG93LgorICoKKyAqCXJfYWRkcgkJNjQtYml0IHJlYWwgYWRkcmVzcworICoKKyAqCXBjaV9kZXZpY2UJUENJIGRldmljZSBhZGRyZXNzLiAgQSBQQ0kgZGV2aWNlIGFkZHJlc3MgaWRlbnRpZmllcworICoJCQlhIHNwZWNpZmljIGRldmljZSBvbiBhIHNwZWNpZmljIFBDSSBidXMgc2VnbWVudC4KKyAqCQkJQSBQQ0kgZGV2aWNlIGFkZHJlc3MgaWEgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlcgorICoJCQl3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICoKKyAqCQkJCTAwMDAwMDAwLmJiYmJiYmJiLmRkZGRkZmZmLjAwMDAwMDAwCisgKgorICoJCQlVc2UgdGhlIEhWX1BDSV9ERVZJQ0VfQlVJTEQoKSBtYWNybyB0byBjb25zdHJ1Y3QKKyAqCQkJc3VjaCB2YWx1ZXMuCisgKgorICoJcGNpX2NvbmZpZ19vZmZzZXQKKyAqCQkJUENJIGNvbmZpZ3VyZWF0aW9uIHNwYWNlIG9mZnNldC4gIEZvciBjb252ZW50aW9uYWwKKyAqCQkJUENJIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyNTUuICBGb3IgZXh0ZW5kZWQKKyAqCQkJY29uZmlndXJhdGlvbiBzcGFjZSwgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDQwOTUuCisgKgorICoJCQlOb3RlOiBGb3IgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjZXNzZXMsIHRoZSBvZmZzZXQKKyAqCQkJICAgICAgbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBhY2Nlc3Mgc2l6ZS4KKyAqCisgKgllcnJvcl9mbGFnCUEgcmV0dXJuIHZhbHVlIHdoaWNoIHNwZWNpZmllcyBpZiB0aGUgYWN0aW9uIHN1Y2NlZWRlZAorICoJCQlvciBmYWlsZWQuICAwIG1lYW5zIG5vIGVycm9yLCBub24tMCBtZWFucyBzb21lIGVycm9yCisgKgkJCW9jY3VycmVkIHdoaWxlIHBlcmZvcm1pbmcgdGhlIHNlcnZpY2UuCisgKgorICoJaW9fc3luY19kaXJlY3Rpb24KKyAqCQkJRGlyZWN0aW9uIGRlZmluaXRpb24gZm9yIHBjaV9kbWFfc3luYygpLCBkZWZpbmVkCisgKgkJCWJlbG93IGluIEhWX1BDSV9TWU5DXyouCisgKgorICoJaW9fcGFnZV9saXN0CUEgbGlzdCBvZiBpb19wYWdlX2FkZHJlc3NlcywgYW4gaW9fcGFnZV9hZGRyZXNzIGlzCisgKgkJCWEgcmVhbCBhZGRyZXNzLgorICoKKyAqCWlvX3BhZ2VfbGlzdF9wCUEgcG9pbnRlciB0byBhbiBpb19wYWdlX2xpc3QuCisgKgorICoJInNpemUgYmFzZWQgYnl0ZSBzd2FwIiAtIFNvbWUgZnVuY3Rpb25zIGRvIHNpemUgYmFzZWQgYnl0ZSBzd2FwcGluZworICoJCQkJIHdoaWNoIGFsbG93cyBzdyB0byBhY2Nlc3MgcG9pbnRlcnMgYW5kCisgKgkJCQkgY291bnRlcnMgaW4gbmF0aXZlIGZvcm0gd2hlbiB0aGUgcHJvY2Vzc29yCisgKgkJCQkgb3BlcmF0ZXMgaW4gYSBkaWZmZXJlbnQgZW5kaWFubmVzcyB0aGFuIHRoZQorICoJCQkJIElPIGJ1cy4gIFNpemUtYmFzZWQgYnl0ZSBzd2FwcGluZyBjb252ZXJ0cyBhCisgKgkJCQkgbXVsdGktYnl0ZSBmaWVsZCBiZXR3ZWVuIGJpZy1lbmRpYW4gYW5kCisgKgkJCQkgbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisgKi8KKworI2RlZmluZSBIVl9QQ0lfTUFQX0FUVFJfUkVBRAkJMHgwMQorI2RlZmluZSBIVl9QQ0lfTUFQX0FUVFJfV1JJVEUJCTB4MDIKKworI2RlZmluZSBIVl9QQ0lfREVWSUNFX0JVSUxEKGIsZCxmKQlcCisJKCgoKGIpICYgMHhmZikgPDwgMTYpIHwgXAorCSAoKChkKSAmIDB4MWYpIDw8IDExKSB8IFwKKwkgKCgoZikgJiAweDA3KSA8PCAgOCkpCisKKyNkZWZpbmUgSFZfUENJX1RTQklEKF9fdHNiX251bSwgX190c2JfaW5kZXgpIFwKKwkoKCgodTY0KShfX3RzYl9udW0pKSA8PCAzMlVMKSB8ICgodTY0KShfX3RzYl9pbmRleCkpKQorCisjZGVmaW5lIEhWX1BDSV9TWU5DX0ZPUl9ERVZJQ0UJCTB4MDEKKyNkZWZpbmUgSFZfUENJX1NZTkNfRk9SX0NQVQkJMHgwMgorCisvKiBwY2lfaW9tbXVfbWFwKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX0lPTU1VX01BUAorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgl0c2JpZAorICogQVJHMjoJI3R0ZXMKKyAqIEFSRzM6CWlvX2F0dHJpYnV0ZXMKKyAqIEFSRzQ6CWlvX3BhZ2VfbGlzdF9wCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CSN0dGVzIG1hcHBlZAorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlL3RzYm51bS90c2JpbmRleC9pb19hdHRyaWJ1dGVzCisgKgkJRUJBREFMSUdOCUltcHJvcGVybHkgYWxpZ25lZCByZWFsIGFkZHJlc3MKKyAqCQlFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoKKyAqIENyZWF0ZSBJT01NVSBtYXBwaW5ncyBpbiB0aGUgc3VuNHYgZGV2aWNlIGRlZmluZWQgYnkgdGhlIGdpdmVuCisgKiBkZXZoYW5kbGUuICBUaGUgbWFwcGluZ3MgYXJlIGNyZWF0ZWQgaW4gdGhlIFRTQiBkZWZpbmVkIGJ5IHRoZQorICogdHNibnVtIGNvbXBvbmVudCBvZiB0aGUgZ2l2ZW4gdHNiaWQuICBUaGUgZmlyc3QgbWFwcGluZyBpcyBjcmVhdGVkCisgKiBpbiB0aGUgVFNCIGkgbmRleCBkZWZpbmVkIGJ5IHRoZSB0c2JpbmRleCBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHRzYmlkLgorICogVGhlIGNhbGwgY3JlYXRlcyB1cCB0byAjdHRlcyBtYXBwaW5ncywgdGhlIGZpcnN0IG9uZSBhdCB0c2JudW0sIHRzYmluZGV4LAorICogdGhlIHNlY29uZCBhdCB0c2JudW0sIHRzYmluZGV4ICsgMSwgZXRjLgorICoKKyAqIEFsbCBtYXBwaW5ncyBhcmUgY3JlYXRlZCB3aXRoIHRoZSBhdHRyaWJ1dGVzIGRlZmluZWQgYnkgdGhlIGlvX2F0dHJpYnV0ZXMKKyAqIGFyZ3VtZW50LiAgVGhlIHBhZ2UgbWFwcGluZyBhZGRyZXNzZXMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgaW9fcGFnZV9saXN0CisgKiBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBpb19wYWdlX2xpc3RfcCwgd2hpY2ggaXMgYSBwb2ludGVyIHRvIHRoZSBpb19wYWdlX2xpc3QuCisgKiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIGlvX3BhZ2VfbGlzdCBpcyB0aGUgYWRkcmVzcyBmb3IgdGhlIGZpcnN0IGlvdHRlLCB0aGUKKyAqIDJuZCBmb3IgdGhlIDJuZCBpb3R0ZSwgYW5kIHNvIG9uLgorICoKKyAqIEVhY2ggaW9fcGFnZV9hZGRyZXNzIGluIHRoZSBpb19wYWdlX2xpc3QgbXVzdCBiZSBhcHByb3ByaWF0ZWx5IGFsaWduZWQuCisgKiAjdHRlcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiAgRm9yIHRoaXMgdmVyc2lvbiBvZiB0aGUgc3BlYywgdGhlIHRzYm51bQorICogY29tcG9uZW50IG9mIHRoZSBnaXZlbiB0c2JpZCBtdXN0IGJlIHplcm8uCisgKgorICogUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiBtYXBwaW5ncyBjcmVhdGVzLCB3aGljaCBtYXkgYmUgbGVzcyB0aGFuCisgKiBvciBlcXVhbCB0byB0aGUgYXJndW1lbnQgI3R0ZXMuICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIHdoaWNoCisgKiBpcyBsZXNzIHRoYW4gdGhlICN0dGVzLCB0aGUgY2FsbGVyIG1heSBjb250aW51cyB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoCisgKiBhbiB1cGRhdGVkIHRzYmlkLCAjdHRlcywgaW9fcGFnZV9saXN0X3AgYXJndW1lbnRzIHVudGlsIGFsbCBwYWdlcyBhcmUKKyAqIG1hcHBlZC4KKyAqCisgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGltcGx5IGFuIGlvdHRlIGNhY2hlIGZsdXNoLiAgVGhlIGd1ZXN0IG11c3QKKyAqICAgICAgIGRlbWFwIGFuIGVudHJ5IGJlZm9yZSByZS1tYXBwaW5nIGl0LgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX0lPTU1VX01BUAkJMHhiMAorCisvKiBwY2lfaW9tbXVfZGVtYXAoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfSU9NTVVfREVNQVAKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJdHNiaWQKKyAqIEFSRzI6CSN0dGVzCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CSN0dGVzIGRlbWFwcGVkCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUvdHNibnVtL3RzYmluZGV4CisgKgorICogRGVtYXAgYW5kIGZsdXNoIElPTU1VIG1hcHBpbmdzIGluIHRoZSBkZXZpY2UgZGVmaW5lZCBieSB0aGUgZ2l2ZW4KKyAqIGRldmhhbmRsZS4gIERlbWFwcyB1cCB0byAjdHRlcyBlbnRyaWVzIGluIHRoZSBUU0IgZGVmaW5lZCBieSB0aGUgdHNibnVtCisgKiBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHRzYmlkLCBzdGFydGluZyBhdCB0aGUgVFNCIGluZGV4IGRlZmluZWQgYnkgdGhlCisgKiB0c2JpbmRleCBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHRzYmlkLgorICoKKyAqIEZvciB0aGlzIHZlcnNpb24gb2YgdGhlIHNwZWMsIHRoZSB0c2JudW0gb2YgdGhlIGdpdmVuIHRzYmlkIG11c3QgYmUgemVyby4KKyAqICN0dGVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uCisgKgorICogUmV0dXJucyB0aGUgYWN0dWFsIG51bWJlciBvZiB0dGVzIGRlbWFwcGVkLCB3aGljaCBtYXkgYmUgbGVzcyB0aGFuIG9yIGVxdWFsCisgKiB0byB0aGUgYXJndW1lbnQgI3R0ZXMuICBJZiAjdHRlcyBkZW1hcHBlZCBpcyBsZXNzIHRoYW4gI3R0ZXMsIHRoZSBjYWxsZXIKKyAqIG1heSBjb250aW51ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCB1cGRhdGVkIHRzYmlkIGFuZCAjdHRlcyBhcmd1bWVudHMKKyAqIHVudGlsIGFsbCBwYWdlcyBhcmUgZGVtYXBwZWQuCisgKgorICogTm90ZTogRW50cmllcyBkbyBub3QgaGF2ZSB0byBiZSBtYXBwZWQgdG8gYmUgZGVtYXBwZWQuICBBIGRlbWFwIG9mIGFuCisgKiAgICAgICB1bm1hcHBlZCBwYWdlIHdpbGwgZmx1c2ggdGhlIGVudHJ5IGZyb20gdGhlIHR0ZSBjYWNoZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9JT01NVV9ERU1BUAkJMHhiMQorCisvKiBwY2lfaW9tbXVfZ2V0bWFwKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX0lPTU1VX0dFVE1BUAorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgl0c2JpZAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglpb19hdHRyaWJ1dGVzCisgKiBSRVQyOglyZWFsIGFkZHJlc3MKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZS90c2JudW0vdHNiaW5kZXgKKyAqCQlFTk9NQVAJCU1hcHBpbmcgaXMgbm90IHZhbGlkLCBubyB0cmFuc2xhdGlvbiBleGlzdHMKKyAqCisgKiBSZWFkIGFuZCByZXR1cm4gdGhlIG1hcHBpbmcgaW4gdGhlIGRldmljZSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZQorICogYW5kIHRzYmlkLiAgSWYgc3VjY2Vzc2Z1bCwgdGhlIGlvX2F0dHJpYnV0ZXMgc2hhbGwgYmUgcmV0dXJuZWQgaW4gUkVUMQorICogYW5kIHRoZSBwYWdlIGFkZHJlc3Mgb2YgdGhlIG1hcHBpbmcgc2hhbGwgYmUgcmV0dXJuZWQgaW4gUkVUMi4KKyAqCisgKiBGb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBzcGVjLCB0aGUgdHNibnVtIGNvbXBvbmVudCBvZiB0aGUgZ2l2ZW4gdHNiaWQKKyAqIG11c3QgYmUgemVyby4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9JT01NVV9HRVRNQVAJMHhiMgorCisvKiBwY2lfaW9tbXVfZ2V0YnlwYXNzKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX0lPTU1VX0dFVEJZUEFTUworICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOglyZWFsIGFkZHJlc3MKKyAqIEFSRzI6CWlvX2F0dHJpYnV0ZXMKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJaW9fYWRkcgorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlL2lvX2F0dHJpYnV0ZXMKKyAqCQlFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVOT1RTVVBQT1JURUQJRnVuY3Rpb24gbm90IHN1cHBvcnRlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uLgorICoKKyAqIENyZWF0ZSBhICJzcGVjaWFsIiBtYXBwaW5nIGluIHRoZSBkZXZpY2UgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUsCisgKiBmb3IgdGhlIGdpdmVuIHJlYWwgYWRkcmVzcyBhbmQgYXR0cmlidXRlcy4gIFJldHVybiB0aGUgSU8gYWRkcmVzcyBpbiBSRVQxCisgKiBpZiBzdWNjZXNzZnVsLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX0lPTU1VX0dFVEJZUEFTUwkweGIzCisKKy8qIHBjaV9jb25maWdfZ2V0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX0NPTkZJR19HRVQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJcGNpX2RldmljZQorICogQVJHMjoJcGNpX2NvbmZpZ19vZmZzZXQKKyAqIEFSRzM6CXNpemUKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJZXJyb3JfZmxhZworICogUkVUMjoJZGF0YQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlL3BjaV9kZXZpY2Uvb2Zmc2V0L3NpemUKKyAqCQlFQkFEQUxJR04JcGNpX2NvbmZpZ19vZmZzZXQgbm90IHNpemUgYWxpZ25lZAorICoJCUVOT0FDQ0VTUwlBY2Nlc3MgdG8gdGhpcyBvZmZzZXQgaXMgbm90IHBlcm1pdHRlZAorICoKKyAqIFJlYWQgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZm9yIHRoZSBhZGFwdGVyIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4KKyAqIGRldmhhbmRsZS4gIFJlYWQgc2l6ZSAoMSwgMiwgb3IgNCkgYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBnaXZlbgorICogcGNpX2RldmljZSwgYXQgcGNpX2NvbmZpZ19vZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZpY2UncworICogY29uZmlndXJhdGlvbiBzcGFjZS4gIElmIHRoZXJlIHdhcyBubyBlcnJvciwgUkVUMSBpcyBzZXQgdG8gemVybyBhbmQKKyAqIFJFVDIgaXMgc2V0IHRvIHRoZSBkYXRhIHJlYWQuICBJbnNpZ25pZmljYW50IGJpdHMgaW4gUkVUMiBhcmUgbm90CisgKiBndWFyZW50ZWVkIHRvIGhhdmUgYW55IHNwZWNpZmljIHZhbHVlIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSBpZ25vcmVkLgorICoKKyAqIFRoZSBkYXRhIHJldHVybmVkIGluIFJFVDIgaXMgc2l6ZSBiYXNlZCBieXRlIHN3YXBwZWQuCisgKgorICogSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgcmVhZCwgc2V0IFJFVDEgdG8gYSBub24temVybyB2YWx1ZS4gIFRoZQorICogZ2l2ZW4gcGNpX2NvbmZpZ19vZmZzZXQgbXVzdCBiZSAnc2l6ZScgYWxpZ25lZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9DT05GSUdfR0VUCQkweGI0CisKKy8qIHBjaV9jb25maWdfcHV0KCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX0NPTkZJR19QVVQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJcGNpX2RldmljZQorICogQVJHMjoJcGNpX2NvbmZpZ19vZmZzZXQKKyAqIEFSRzM6CXNpemUKKyAqIEFSRzQ6CWRhdGEKKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJZXJyb3JfZmxhZworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlL3BjaV9kZXZpY2Uvb2Zmc2V0L3NpemUKKyAqCQlFQkFEQUxJR04JcGNpX2NvbmZpZ19vZmZzZXQgbm90IHNpemUgYWxpZ25lZAorICoJCUVOT0FDQ0VTUwlBY2Nlc3MgdG8gdGhpcyBvZmZzZXQgaXMgbm90IHBlcm1pdHRlZAorICoKKyAqIFdyaXRlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGZvciB0aGUgYWRhcHRlciBkZXNjcmliZWQgYnkgdGhlIGdpdmVuCisgKiBkZXZoYW5kbGUuICBXcml0ZSBzaXplICgxLCAyLCBvciA0KSBieXRlcyBvZiBkYXRhIGluIGEgc2luZ2xlIG9wZXJhdGlvbiwKKyAqIGF0IHBjaV9jb25maWdfb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlJ3MgY29uZmlndXJhdGlvbgorICogc3BhY2UuICBUaGUgZGF0YSBhcmd1bWVudCBjb250YWlucyB0aGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIGNvbmZpZ3VyYXRpb24KKyAqIHNwYWNlLiAgUHJpb3IgdG8gd3JpdGluZywgdGhlIGRhdGEgaXMgc2l6ZSBiYXNlZCBieXRlIHN3YXBwZWQuCisgKgorICogSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgd3JpdGUgYWNjZXNzLCBkbyBub3QgZ2VuZXJhdGUgYW4gZXJyb3IKKyAqIHJlcG9ydCwgZG8gc2V0IFJFVDEgdG8gYSBub24temVybyB2YWx1ZS4gIE90aGVyd2lzZSBSRVQxIGlzIHplcm8uCisgKiBUaGUgZ2l2ZW4gcGNpX2NvbmZpZ19vZmZzZXQgbXVzdCBiZSAnc2l6ZScgYWxpZ25lZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHBlcm1pdHRlZCB0byByZWFkIGZyb20gb2Zmc2V0IHplcm8gaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAqIHNwYWNlIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gcGNpX2RldmljZSBpZiBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlCisgKiB3cml0ZSBhY2Nlc3MgdG8gY29uZmlnIHNwYWNlIGNvbXBsZXRlcy4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9DT05GSUdfUFVUCQkweGI1CisKKy8qIHBjaV9wZWVrKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX1BFRUsKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJcmVhbCBhZGRyZXNzCisgKiBBUkcyOglzaXplCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWVycm9yX2ZsYWcKKyAqIFJFVDI6CWRhdGEKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBzaXplCisgKgkJRUJBREFMSUdOCUltcHJvcGVybHkgYWxpZ25lZCByZWFsIGFkZHJlc3MKKyAqCQlFTk9SQUREUglCYWQgcmVhbCBhZGRyZXNzCisgKgkJRU5PQUNDRVNTCUd1ZXN0IGFjY2VzcyBwcm9oaWJpdGVkCisgKgorICogQXR0ZW1wdCB0byByZWFkIHRoZSBJTyBhZGRyZXNzIGdpdmVuIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUsIHJlYWwgYWRkcmVzcywKKyAqIGFuZCBzaXplLiAgU2l6ZSBtdXN0IGJlIDEsIDIsIDQsIG9yIDguICBUaGUgcmVhZCBpcyBwZXJmb3JtZWQgYXMgYSBzaW5nbGUKKyAqIGFjY2VzcyBvcGVyYXRpb24gdXNpbmcgdGhlIGdpdmVuIHNpemUuICBJZiBhbiBlcnJvciBvY2N1cnMgd2hlbiByZWFkaW5nCisgKiBmcm9tIHRoZSBnaXZlbiBsb2NhdGlvbiwgZG8gbm90IGdlbmVyYXRlIGFuIGVycm9yIHJlcG9ydCwgYnV0IHJldHVybiBhCisgKiBub24temVybyB2YWx1ZSBpbiBSRVQxLiAgSWYgdGhlIHJlYWQgd2FzIHN1Y2Nlc3NmdWwsIHJldHVybiB6ZXJvIGluIFJFVDEKKyAqIGFuZCByZXR1cm4gdGhlIGFjdHVhbCBkYXRhIHJlYWQgaW4gUkVUMi4gIFRoZSBkYXRhIHJldHVybmVkIGlzIHNpemUgYmFzZWQKKyAqIGJ5dGUgc3dhcHBlZC4KKyAqCisgKiBOb24tc2lnbmlmaWNhbnQgYml0cyBpbiBSRVQyIGFyZSBub3QgZ3VhcmVudGVlZCB0byBoYXZlIGFueSBzcGVjaWZpYyB2YWx1ZQorICogYW5kIHRoZXJlZm9yZSBtdXN0IGJlIGlnbm9yZWQuICBJZiBSRVQxIGlzIHJldHVybmVkIGFzIG5vbi16ZXJvLCB0aGUgZGF0YSAKKyAqIHZhbHVlIGlzIG5vdCBndWFyZW50ZWVkIHRvIGhhdmUgYW55IHNwZWNpZmljIHZhbHVlIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHJlYWQgZnJvbSB0aGUgZ2l2ZW4gZGV2aGFuZGxlLCByZWFsCisgKiBhZGRyZXNzLCB3aGljaCBtdXN0IGJlIGFuIElPIGFkZHJlc3MuICBUaGUgYXJndW1lbnQgcmVhbCBhZGRyZXNzIG11c3QgYmUgYQorICogc2l6ZSBhbGlnbmVkIGFkZHJlc3MuCisgKgorICogVGhlIGh5cGVydmlzb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJsb2NrIGFjY2VzcyB0byBhbnkKKyAqIElPIGFkZHJlc3MgdGhhdCB0aGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIGFjY2Vzcy4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9QRUVLCQkweGI2CisKKy8qIHBjaV9wb2tlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX1BPS0UKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJcmVhbCBhZGRyZXNzCisgKiBBUkcyOglzaXplCisgKiBBUkczOglkYXRhCisgKiBBUkc0OglwY2lfZGV2aWNlCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CWVycm9yX2ZsYWcKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSwgc2l6ZSwgb3IgcGNpX2RldmljZQorICoJCUVCQURBTElHTglJbXByb3Blcmx5IGFsaWduZWQgcmVhbCBhZGRyZXNzCisgKgkJRU5PUkFERFIJQmFkIHJlYWwgYWRkcmVzcworICoJCUVOT0FDQ0VTUwlHdWVzdCBhY2Nlc3MgcHJvaGliaXRlZAorICoJCUVOT1RTVVBQT1JURUQJRnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBieSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIEF0dGVtcHQgdG8gd3JpdGUgZGF0YSB0byB0aGUgSU8gYWRkcmVzcyBnaXZlbiBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlLAorICogcmVhbCBhZGRyZXNzLCBhbmQgc2l6ZS4gIFNpemUgbXVzdCBiZSAxLCAyLCA0LCBvciA4LiAgVGhlIHdyaXRlIGlzCisgKiBwZXJmb3JtZWQgYXMgYSBzaW5nbGUgYWNjZXNzIG9wZXJhdGlvbiB1c2luZyB0aGUgZ2l2ZW4gc2l6ZS4gUHJpb3IgdG8KKyAqIHdyaXRpbmcgdGhlIGRhdGEgaXMgc2l6ZSBiYXNlZCBzd2FwcGVkLgorICoKKyAqIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIHdyaXRpbmcgdG8gdGhlIGdpdmVuIGxvY2F0aW9uLCBkbyBub3QgZ2VuZXJhdGUgYW4KKyAqIGVycm9yIHJlcG9ydCwgYnV0IHJldHVybiBhIG5vbi16ZXJvIHZhbHVlIGluIFJFVDEuICBJZiB0aGUgd3JpdGUgd2FzCisgKiBzdWNjZXNzZnVsLCByZXR1cm4gemVybyBpbiBSRVQxLgorICoKKyAqIHBjaV9kZXZpY2UgZGVzY3JpYmVzIHRoZSBjb25maWd1cmF0aW9uIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBiZWluZworICogd3JpdHRlbiB0by4gIFRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgc2FmZWx5IHJlYWQgZnJvbSBvZmZzZXQgMCB3aXRoCisgKiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBvZiB0aGUgZGV2aWNlIGRlc2NyaWJlZCBieSBkZXZoYW5kbGUgYW5kCisgKiBwY2lfZGV2aWNlIGluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSB3cml0ZSBwb3J0aW9uIG9mIHRoZSBvcGVyYXRpb24KKyAqIGNvbXBsZXRlcworICoKKyAqIEFueSBlcnJvciB0aGF0IG9jY3VycyBkdWUgdG8gdGhlIHJlYWQgc2hhbGwgYmUgcmVwb3J0ZWQgdXNpbmcgdGhlIG5vcm1hbAorICogZXJyb3IgcmVwb3J0aW5nIG1lY2hhbmlzbXMgLi4gdGhlIHJlYWQgZXJyb3IgaXMgbm90IHN1cHByZXNzZWQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgZ2l2ZW4gZGV2aGFuZGxlLCByZWFsCisgKiBhZGRyZXNzLCB3aGljaCBtdXN0IGJlIGFuIElPIGFkZHJlc3MuICBUaGUgYXJndW1lbnQgcmVhbCBhZGRyZXNzIG11c3QgYmUgYQorICogc2l6ZSBhbGlnbmVkIGFkZHJlc3MuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHJlYWQgZnJvbQorICogdGhlIGdpdmVuIGRldmhhbmRsZSwgcGNpX2RldmljZSBjb2ZpZ3VyYXRpb24gc3BhY2Ugb2Zmc2V0IDAuCisgKgorICogVGhlIGh5cGVydmlzb3IgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJsb2NrIGFjY2VzcyB0byBhbnkKKyAqIElPIGFkZHJlc3MgdGhhdCB0aGUgZ3Vlc3QgZG9lcyBub3QgaGF2ZSBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIGFjY2Vzcy4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9QT0tFCQkweGI3CisKKy8qIHBjaV9kbWFfc3luYygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9ETUFfU1lOQworICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOglyZWFsIGFkZHJlc3MKKyAqIEFSRzI6CXNpemUKKyAqIEFSRzM6CWlvX3N5bmNfZGlyZWN0aW9uCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CSNzeW5jZWQKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBpb19zeW5jX2RpcmVjdGlvbgorICoJCUVOT1JBRERSCUJhZCByZWFsIGFkZHJlc3MKKyAqCisgKiBTeW5jaHJvbml6ZSBhIG1lbW9yeSByZWdpb24gZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiByZWFsIGFkZHJlc3MgYW5kIHNpemUsCisgKiBmb3IgdGhlIGRldmljZSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgdXNpbmcgdGhlIGRpcmVjdGlvbihzKQorICogZGVmaW5lZCBieSB0aGUgZ2l2ZW4gaW9fc3luY19kaXJlY3Rpb24uICBUaGUgYXJndW1lbnQgc2l6ZSBpcyB0aGUgc2l6ZSBvZgorICogdGhlIG1lbW9yeSByZWdpb24gaW4gYnl0ZXMuCisgKgorICogUmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHN5bmNocm9uaXplZCBpbiB0aGUgcmV0dXJuIHZhbHVlICNzeW5jZWQsCisgKiB3aGljaCBtYXkgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBhcmd1bWVudCBzaXplLiAgSWYgdGhlIHJldHVybgorICogdmFsdWUgI3N5bmNlZCBpcyBsZXNzIHRoYW4gc2l6ZSwgdGhlIGNhbGxlciBtdXN0IGNvbnRpbnVlIHRvIGNhbGwgdGhpcworICogZnVuY3Rpb24gd2l0aCB1cGRhdGVkIHJlYWwgYWRkcmVzcyBhbmQgc2l6ZSBhcmd1bWVudHMgdW50aWwgdGhlIGVudGlyZQorICogbWVtb3J5IHJlZ2lvbiBpcyBzeW5jaHJvbml6ZWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfRE1BX1NZTkMJCTB4YjgKKworLyogUENJIE1TSSBzZXJ2aWNlcy4gICovCisKKyNkZWZpbmUgSFZfTVNJVFlQRV9NU0kzMgkJMHgwMAorI2RlZmluZSBIVl9NU0lUWVBFX01TSTY0CQkweDAxCisKKyNkZWZpbmUgSFZfTVNJUVNUQVRFX0lETEUJCTB4MDAKKyNkZWZpbmUgSFZfTVNJUVNUQVRFX0VSUk9SCQkweDAxCisKKyNkZWZpbmUgSFZfTVNJUV9JTlZBTElECQkJMHgwMAorI2RlZmluZSBIVl9NU0lRX1ZBTElECQkJMHgwMQorCisjZGVmaW5lIEhWX01TSVNUQVRFX0lETEUJCTB4MDAKKyNkZWZpbmUgSFZfTVNJU1RBVEVfREVMSVZFUkVECQkweDAxCisKKyNkZWZpbmUgSFZfTVNJVkFMSURfSU5WQUxJRAkJMHgwMAorI2RlZmluZSBIVl9NU0lWQUxJRF9WQUxJRAkJMHgwMQorCisjZGVmaW5lIEhWX1BDSUVfTVNHVFlQRV9QTUVfTVNHCQkweDE4CisjZGVmaW5lIEhWX1BDSUVfTVNHVFlQRV9QTUVfQUNLX01TRwkweDFiCisjZGVmaW5lIEhWX1BDSUVfTVNHVFlQRV9DT1JSX01TRwkweDMwCisjZGVmaW5lIEhWX1BDSUVfTVNHVFlQRV9OT05GQVRBTF9NU0cJMHgzMQorI2RlZmluZSBIVl9QQ0lFX01TR1RZUEVfRkFUQUxfTVNHCTB4MzMKKworI2RlZmluZSBIVl9NU0dfSU5WQUxJRAkJCTB4MDAKKyNkZWZpbmUgSFZfTVNHX1ZBTElECQkJMHgwMQorCisvKiBwY2lfbXNpcV9jb25mKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfQ09ORgorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2lxaWQKKyAqIEFSRzI6CXJlYWwgYWRkcmVzcworICogQVJHMzoJbnVtYmVyIG9mIGVudHJpZXMKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlLCBtc2lxaWQgb3IgbmVudHJpZXMKKyAqCQlFQkFEQUxJR04JSW1wcm9wZXJseSBhbGlnbmVkIHJlYWwgYWRkcmVzcworICoJCUVOT1JBRERSCUJhZCByZWFsIGFkZHJlc3MKKyAqCisgKiBDb25maWd1cmUgdGhlIE1TSSBxdWV1ZSBnaXZlbiBieSB0aGUgZGV2aGFuZGxlIGFuZCBtc2lxaWQgYXJndW1lbnRzLAorICogYW5kIHRvIGJlIHBsYWNlZCBhdCB0aGUgZ2l2ZW4gcmVhbCBhZGRyZXNzIGFuZCBiZSBvZiB0aGUgZ2l2ZW4KKyAqIG51bWJlciBvZiBlbnRyaWVzLiAgVGhlIHJlYWwgYWRkcmVzcyBtdXN0IGJlIGFsaWduZWQgZXhhY3RseSB0byBtYXRjaAorICogdGhlIHF1ZXVlIHNpemUuICBFYWNoIHF1ZXVlIGVudHJ5IGlzIDY0LWJ5dGVzIGxvbmcsIHNvIGYuZS4gYSAzMiBlbnRyeQorICogcXVldWUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMjA0OCBieXRlIHJlYWwgYWRkcmVzcyBib3VuZGFyeS4gIFRoZSBNU0ktRVEKKyAqIEhlYWQgYW5kIFRhaWwgYXJlIGluaXRpYWxpemVkIHNvIHRoYXQgdGhlIE1TSS1FUSBpcyAnZW1wdHknLgorICoKKyAqIEltcGxlbWVudGF0aW9uIE5vdGU6IENlcnRhaW4gaW1wbGVtZW50YXRpb25zIGhhdmUgZml4ZWQgc2l6ZWQgcXVldWVzLiAgSW4KKyAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY2FzZSwgbnVtYmVyIG9mIGVudHJpZXMgbXVzdCBjb250YWluIHRoZSBjb3JyZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX0NPTkYJCTB4YzAKKworLyogcGNpX21zaXFfaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX0lORk8KKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcworICogUkVUMjoJbnVtYmVyIG9mIGVudHJpZXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSBvciBtc2lxaWQKKyAqCisgKiBSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBNU0kgcXVldWUgZGVzY3JpYmVkCisgKiBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZCBtc2lxaWQuICBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBxdWV1ZQorICogaXMgcmV0dXJuZWQgaW4gQVJHMSBhbmQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGlzIHJldHVybmVkIGluIEFSRzIuCisgKiBJZiB0aGUgcXVldWUgaXMgdW5jb25maWd1cmVkLCB0aGUgcmVhbCBhZGRyZXNzIGlzIHVuZGVmaW5lZCBhbmQgdGhlCisgKiBudW1iZXIgb2YgZW50cmllcyB3aWxsIGJlIHJldHVybmVkIGFzIHplcm8uCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJUV9JTkZPCQkweGMxCisKKy8qIHBjaV9tc2lxX2dldHZhbGlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfR0VUVkFMSUQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW1zaXF2YWxpZAkoSFZfTVNJUV9WQUxJRCBvciBIVl9NU0lRX0lOVkFMSUQpCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpcWlkCisgKgorICogR2V0IHRoZSB2YWxpZCBzdGF0ZSBvZiB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZAorICogbXNpcWlkLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSVFfR0VUVkFMSUQJMHhjMgorCisvKiBwY2lfbXNpcV9zZXR2YWxpZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX1NFVFZBTElECisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CW1zaXFpZAorICogQVJHMjoJbXNpcXZhbGlkCShIVl9NU0lRX1ZBTElEIG9yIEhWX01TSVFfSU5WQUxJRCkKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZCBvciBtc2lxdmFsaWQKKyAqCQkJCXZhbHVlIG9yIE1TSSBFUSBpcyB1bmluaXRpYWxpemVkCisgKgorICogU2V0IHRoZSB2YWxpZCBzdGF0ZSBvZiB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZAorICogbXNpcWlkIHRvIHRoZSBnaXZlbiBtc2lxdmFsaWQuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJUV9TRVRWQUxJRAkweGMzCisKKy8qIHBjaV9tc2lxX2dldHN0YXRlKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSVFfR0VUU1RBVEUKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW1zaXFzdGF0ZQkoSFZfTVNJUVNUQVRFX0lETEUgb3IgSFZfTVNJUVNUQVRFX0VSUk9SKQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZAorICoKKyAqIEdldCB0aGUgc3RhdGUgb2YgdGhlIE1TSS1FUSBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQKKyAqIG1zaXFpZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX0dFVFNUQVRFCTB4YzQKKworLyogcGNpX21zaXFfZ2V0dmFsaWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9HRVRWQUxJRAorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2lxaWQKKyAqIEFSRzI6CW1zaXFzdGF0ZQkoSFZfTVNJUVNUQVRFX0lETEUgb3IgSFZfTVNJUVNUQVRFX0VSUk9SKQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpcWlkIG9yIG1zaXFzdGF0ZQorICoJCQkJdmFsdWUgb3IgTVNJIEVRIGlzIHVuaW5pdGlhbGl6ZWQKKyAqCisgKiBTZXQgdGhlIHN0YXRlIG9mIHRoZSBNU0ktRVEgZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kCisgKiBtc2lxaWQgdG8gdGhlIGdpdmVuIG1zaXF2YWxpZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX1NFVFNUQVRFCTB4YzUKKworLyogcGNpX21zaXFfZ2V0aGVhZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lRX0dFVEhFQUQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW1zaXFoZWFkCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpcWlkCisgKgorICogR2V0IHRoZSBjdXJyZW50IE1TSSBFUSBxdWV1ZSBoZWFkIGZvciB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUKKyAqIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpcWlkLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSVFfR0VUSEVBRAkweGM2CisKKy8qIHBjaV9tc2lxX3NldGhlYWQoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9TRVRIRUFECisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CW1zaXFpZAorICogQVJHMjoJbXNpcWhlYWQKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZCBvciBtc2lxaGVhZCwKKyAqCQkJCW9yIE1TSSBFUSBpcyB1bmluaXRpYWxpemVkCisgKgorICogU2V0IHRoZSBjdXJyZW50IE1TSSBFUSBxdWV1ZSBoZWFkIGZvciB0aGUgTVNJLUVRIGRlc2NyaWJlZCBieSB0aGUKKyAqIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpcWlkLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSVFfU0VUSEVBRAkweGM3CisKKy8qIHBjaV9tc2lxX2dldHRhaWwoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJUV9HRVRUQUlMCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CW1zaXFpZAorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgltc2lxdGFpbAorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaXFpZAorICoKKyAqIEdldCB0aGUgY3VycmVudCBNU0kgRVEgcXVldWUgdGFpbCBmb3IgdGhlIE1TSS1FUSBkZXNjcmliZWQgYnkgdGhlCisgKiBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaXFpZC4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lRX0dFVFRBSUwJMHhjOAorCisvKiBwY2lfbXNpX2dldHZhbGlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSV9HRVRWQUxJRAorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2ludW0KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbXNpdmFsaWRzdGF0ZQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bQorICoKKyAqIEdldCB0aGUgY3VycmVudCB2YWxpZC9lbmFibGVkIHN0YXRlIGZvciB0aGUgTVNJIGRlZmluZWQgYnkgdGhlCisgKiBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaW51bS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lfR0VUVkFMSUQJMHhjOQorCisvKiBwY2lfbXNpX3NldHZhbGlkKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfUENJX01TSV9TRVRWQUxJRAorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2ludW0KKyAqIEFSRzI6CW1zaXZhbGlkc3RhdGUKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bSBvciBtc2l2YWxpZHN0YXRlCisgKgorICogU2V0IHRoZSBjdXJyZW50IHZhbGlkL2VuYWJsZWQgc3RhdGUgZm9yIHRoZSBNU0kgZGVmaW5lZCBieSB0aGUKKyAqIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpbnVtLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSV9TRVRWQUxJRAkweGNhCisKKy8qIHBjaV9tc2lfZ2V0bXNpcSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lfR0VUTVNJUQorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2ludW0KKyAqIFJFVDA6CXN0YXR1cworICogUkVUMToJbXNpcWlkCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpbnVtIG9yIE1TSSBpcyB1bmJvdW5kCisgKgorICogR2V0IHRoZSBNU0kgRVEgdGhhdCB0aGUgTVNJIGRlZmluZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQKKyAqIG1zaW51bSBpcyBib3VuZCB0by4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0lfR0VUTVNJUQkJMHhjYgorCisvKiBwY2lfbXNpX3NldG1zaXEoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJX1NFVE1TSVEKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpbnVtCisgKiBBUkcyOgltc2l0eXBlCisgKiBBUkczOgltc2lxaWQKKyAqIFJFVDA6CXN0YXR1cworICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bSBvciBtc2lxaWQKKyAqCisgKiBTZXQgdGhlIE1TSSBFUSB0aGF0IHRoZSBNU0kgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gZGV2aGFuZGxlIGFuZAorICogbXNpbnVtIGlzIGJvdW5kIHRvLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSV9TRVRNU0lRCQkweGNjCisKKy8qIHBjaV9tc2lfZ2V0c3RhdGUoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNJX0dFVFNUQVRFCisgKiBBUkcwOglkZXZoYW5kbGUKKyAqIEFSRzE6CW1zaW51bQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgltc2lzdGF0ZQorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zaW51bQorICoKKyAqIEdldCB0aGUgc3RhdGUgb2YgdGhlIE1TSSBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zaW51bS4KKyAqIElmIG5vdCBpbml0aWFsaXplZCwgcmV0dXJuIEhWX01TSVNUQVRFX0lETEUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNJX0dFVFNUQVRFCTB4Y2QKKworLyogcGNpX21zaV9zZXRzdGF0ZSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0lfU0VUU1RBVEUKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNpbnVtCisgKiBBUkcyOgltc2lzdGF0ZQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNpbnVtIG9yIG1zaXN0YXRlCisgKgorICogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgTVNJIGRlZmluZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNpbnVtLgorICovCisjZGVmaW5lIEhWX0ZBU1RfUENJX01TSV9TRVRTVEFURQkweGNlCisKKy8qIHBjaV9tc2dfZ2V0bXNpcSgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0dfR0VUTVNJUQorICogQVJHMDoJZGV2aGFuZGxlCisgKiBBUkcxOgltc2d0eXBlCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CW1zaXFpZAorICogRVJST1JTOglFSU5WQUwJCUludmFsaWQgZGV2aGFuZGxlIG9yIG1zZ3R5cGUKKyAqCisgKiBHZXQgdGhlIE1TSSBFUSBvZiB0aGUgTVNHIGRlZmluZWQgYnkgdGhlIGdpdmVuIGRldmhhbmRsZSBhbmQgbXNndHlwZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0dfR0VUTVNJUQkJMHhkMAorCisvKiBwY2lfbXNnX3NldG1zaXEoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9QQ0lfTVNHX1NFVE1TSVEKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNndHlwZQorICogQVJHMjoJbXNpcWlkCisgKiBSRVQwOglzdGF0dXMKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIGRldmhhbmRsZSwgbXNndHlwZSwgb3IgbXNpcWlkCisgKgorICogU2V0IHRoZSBNU0kgRVEgb2YgdGhlIE1TRyBkZWZpbmVkIGJ5IHRoZSBnaXZlbiBkZXZoYW5kbGUgYW5kIG1zZ3R5cGUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNHX1NFVE1TSVEJCTB4ZDEKKworLyogcGNpX21zZ19nZXR2YWxpZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0dfR0VUVkFMSUQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNndHlwZQorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOgltc2d2YWxpZHN0YXRlCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNndHlwZQorICoKKyAqIEdldCB0aGUgdmFsaWQvZW5hYmxlZCBzdGF0ZSBvZiB0aGUgTVNHIGRlZmluZWQgYnkgdGhlIGdpdmVuCisgKiBkZXZoYW5kbGUgYW5kIG1zZ3R5cGUuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9QQ0lfTVNHX0dFVFZBTElECTB4ZDIKKworLyogcGNpX21zZ19zZXR2YWxpZCgpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX1BDSV9NU0dfU0VUVkFMSUQKKyAqIEFSRzA6CWRldmhhbmRsZQorICogQVJHMToJbXNndHlwZQorICogQVJHMjoJbXNndmFsaWRzdGF0ZQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBkZXZoYW5kbGUgb3IgbXNndHlwZSBvciBtc2d2YWxpZHN0YXRlCisgKgorICogU2V0IHRoZSB2YWxpZC9lbmFibGVkIHN0YXRlIG9mIHRoZSBNU0cgZGVmaW5lZCBieSB0aGUgZ2l2ZW4KKyAqIGRldmhhbmRsZSBhbmQgbXNndHlwZS4KKyAqLworI2RlZmluZSBIVl9GQVNUX1BDSV9NU0dfU0VUVkFMSUQJMHhkMworCisvKiBQZXJmb3JtYW5jZSBjb3VudGVyIHNlcnZpY2VzLiAgKi8KKworI2RlZmluZSBIVl9QRVJGX0pCVVNfUEVSRl9DVFJMX1JFRwkweDAwCisjZGVmaW5lIEhWX1BFUkZfSkJVU19QRVJGX0NOVF9SRUcJMHgwMQorI2RlZmluZSBIVl9QRVJGX0RSQU1fUEVSRl9DVFJMX1JFR18wCTB4MDIKKyNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ05UX1JFR18wCTB4MDMKKyNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ1RSTF9SRUdfMQkweDA0CisjZGVmaW5lIEhWX1BFUkZfRFJBTV9QRVJGX0NOVF9SRUdfMQkweDA1CisjZGVmaW5lIEhWX1BFUkZfRFJBTV9QRVJGX0NUUkxfUkVHXzIJMHgwNgorI2RlZmluZSBIVl9QRVJGX0RSQU1fUEVSRl9DTlRfUkVHXzIJMHgwNworI2RlZmluZSBIVl9QRVJGX0RSQU1fUEVSRl9DVFJMX1JFR18zCTB4MDgKKyNkZWZpbmUgSFZfUEVSRl9EUkFNX1BFUkZfQ05UX1JFR18zCTB4MDkKKworLyogZ2V0X3BlcmZyZWcoKQorICogVFJBUDoJSFZfRkFTVF9UUkFQCisgKiBGVU5DVElPTjoJSFZfRkFTVF9HRVRfUEVSRlJFRworICogQVJHMDoJcGVyZm9ybWFuY2UgcmVnIG51bWJlcgorICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglwZXJmb3JtYW5jZSByZWcgdmFsdWUKKyAqIEVSUk9SUzoJRUlOVkFMCQlJbnZhbGlkIHBlcmZvcm1hbmNlIHJlZ2lzdGVyIG51bWJlcgorICoJCUVOT0FDQ0VTUwlObyBhY2Nlc3MgYWxsb3dlZCB0byBwZXJmb3JtYW5jZSBjb3VudGVycworICoKKyAqIFJlYWQgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBEUkFNL0pCVVMgcGVyZm9ybWFuY2UgY291bnRlci9jb250cm9sIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIEhWX0ZBU1RfR0VUX1BFUkZSRUcJCTB4MTAwCisKKy8qIHNldF9wZXJmcmVnKCkKKyAqIFRSQVA6CUhWX0ZBU1RfVFJBUAorICogRlVOQ1RJT046CUhWX0ZBU1RfU0VUX1BFUkZSRUcKKyAqIEFSRzA6CXBlcmZvcm1hbmNlIHJlZyBudW1iZXIKKyAqIEFSRzE6CXBlcmZvcm1hbmNlIHJlZyB2YWx1ZQorICogUkVUMDoJc3RhdHVzCisgKiBFUlJPUlM6CUVJTlZBTAkJSW52YWxpZCBwZXJmb3JtYW5jZSByZWdpc3RlciBudW1iZXIKKyAqCQlFTk9BQ0NFU1MJTm8gYWNjZXNzIGFsbG93ZWQgdG8gcGVyZm9ybWFuY2UgY291bnRlcnMKKyAqCisgKiBXcml0ZSB0aGUgZ2l2ZW4gcGVyZm9ybWFuY2UgcmVnIHZhbHVlIHRvIHRoZSBnaXZlbiBEUkFNL0pCVVMKKyAqIHBlcmZvcm1hbmNlIGNvdW50ZXIvY29udHJvbCByZWdpc3Rlci4KKyAqLworI2RlZmluZSBIVl9GQVNUX1NFVF9QRVJGUkVHCQkweDEwMQorCisvKiBNTVUgc3RhdGlzdGljcyBzZXJ2aWNlcy4KKyAqCisgKiBUaGUgaHlwZXJ2aXNvciBtYWludGFpbnMgTU1VIHN0YXRpc3RpY3MgYW5kIHByaXZpbGVnZWQgY29kZSBwcm92aWRlcworICogYSBidWZmZXIgd2hlcmUgdGhlc2Ugc3RhdGlzdGljcyBjYW4gYmUgY29sbGVjdGVkLiAgSXQgaXMgY29udGludWFsbHkKKyAqIHVwZGF0ZWQgb25jZSBjb25maWd1cmVkLiAgVGhlIGxheW91dCBpcyBhcyBmb2xsb3dzOgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGh2X21tdV9zdGF0aXN0aWNzIHsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX2hpdHNfY3R4MF84a190dGU7CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHgwXzhrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX2hpdHNfY3R4MF82NGtfdHRlOworCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfdGlja3NfY3R4MF82NGtfdHRlOworCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDFbMl07CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eDBfNG1iX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX3RpY2tzX2N0eDBfNG1iX3R0ZTsKKwl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQyWzJdOworCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfaGl0c19jdHgwXzI1Nm1iX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX3RpY2tzX2N0eDBfMjU2bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDNbNF07CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eG5vbjBfOGtfdHRlOworCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfdGlja3NfY3R4bm9uMF84a190dGU7CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl9oaXRzX2N0eG5vbjBfNjRrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX3RpY2tzX2N0eG5vbjBfNjRrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQ0WzJdOworCXVuc2lnbmVkIGxvbmcgaW1tdV90c2JfaGl0c19jdHhub24wXzRtYl90dGU7CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHhub24wXzRtYl90dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkNVsyXTsKKwl1bnNpZ25lZCBsb25nIGltbXVfdHNiX2hpdHNfY3R4bm9uMF8yNTZtYl90dGU7CisJdW5zaWduZWQgbG9uZyBpbW11X3RzYl90aWNrc19jdHhub24wXzI1Nm1iX3R0ZTsKKwl1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQ2WzRdOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfaGl0c19jdHgwXzhrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX3RpY2tzX2N0eDBfOGtfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfaGl0c19jdHgwXzY0a190dGU7CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl90aWNrc19jdHgwXzY0a190dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkN1syXTsKKwl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4MF80bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4MF80bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDhbMl07CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl9oaXRzX2N0eDBfMjU2bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4MF8yNTZtYl90dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkOVs0XTsKKwl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4bm9uMF84a190dGU7CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl90aWNrc19jdHhub24wXzhrX3R0ZTsKKwl1bnNpZ25lZCBsb25nIGRtbXVfdHNiX2hpdHNfY3R4bm9uMF82NGtfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4bm9uMF82NGtfdHRlOworCXVuc2lnbmVkIGxvbmcgX19yZXNlcnZlZDEwWzJdOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfaGl0c19jdHhub24wXzRtYl90dGU7CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl90aWNrc19jdHhub24wXzRtYl90dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkMTFbMl07CisJdW5zaWduZWQgbG9uZyBkbW11X3RzYl9oaXRzX2N0eG5vbjBfMjU2bWJfdHRlOworCXVuc2lnbmVkIGxvbmcgZG1tdV90c2JfdGlja3NfY3R4bm9uMF8yNTZtYl90dGU7CisJdW5zaWduZWQgbG9uZyBfX3Jlc2VydmVkMTJbNF07Cit9OworI2VuZGlmCisKKy8qIG1tdXN0YXRfY29uZigpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVVNUQVRfQ09ORgorICogQVJHMDoJcmVhbCBhZGRyZXNzCisgKiBSRVQwOglzdGF0dXMKKyAqIFJFVDE6CXJlYWwgYWRkcmVzcworICogRVJST1JTOglFTk9SQUREUglJbnZhbGlkIHJlYWwgYWRkcmVzcworICoJCUVCQURBTElHTglSZWFsIGFkZHJlc3Mgbm90IGFsaWduZWQgb24gNjQtYnl0ZSBib3VuZGFyeQorICoJCUVCQURUUkFQCUFQSSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcHJvY2Vzc29yCisgKgorICogRW5hYmxlIE1NVSBzdGF0aXN0aWMgZ2F0aGVyaW5nIHVzaW5nIHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIHJlYWwKKyAqIGFkZHJlc3Mgb24gdGhlIGN1cnJlbnQgdmlydHVhbCBDUFUuICBUaGUgbmV3IGJ1ZmZlciByZWFsIGFkZHJlc3MKKyAqIGlzIGdpdmVuIGluIEFSRzEsIGFuZCB0aGUgcHJldmlvdXNseSBzcGVjaWZpZWQgYnVmZmVyIHJlYWwgYWRkcmVzcworICogaXMgcmV0dXJuZWQgaW4gUkVUMSwgb3IgaXMgcmV0dXJuZWQgYXMgemVybyBmb3IgdGhlIGZpcnN0IGludm9jYXRpb24uCisgKgorICogSWYgdGhlIHBhc3NlZCBpbiByZWFsIGFkZHJlc3MgYXJndW1lbnQgaXMgemVybywgdGhpcyB3aWxsIGRpc2FibGUKKyAqIE1NVSBzdGF0aXN0aWMgY29sbGVjdGlvbiBvbiB0aGUgY3VycmVudCB2aXJ0dWFsIENQVS4gIElmIGFuIGVycm9yIGlzCisgKiByZXR1cm5lZCB0aGVuIG5vIHN0YXRpc3RpY3MgYXJlIGNvbGxlY3RlZC4KKyAqCisgKiBUaGUgYnVmZmVyIGNvbnRlbnRzIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBhbGwgemVyb3MgYmVmb3JlIGJlaW5nCisgKiBnaXZlbiB0byB0aGUgaHlwZXJ2aXNvciBvciBlbHNlIHRoZSBzdGF0aXN0aWNzIHdpbGwgYmUgbWVhbmluZ2xlc3MuCisgKi8KKyNkZWZpbmUgSFZfRkFTVF9NTVVTVEFUX0NPTkYJCTB4MTAyCisKKy8qIG1tdXN0YXRfaW5mbygpCisgKiBUUkFQOglIVl9GQVNUX1RSQVAKKyAqIEZVTkNUSU9OOglIVl9GQVNUX01NVVNUQVRfSU5GTworICogUkVUMDoJc3RhdHVzCisgKiBSRVQxOglyZWFsIGFkZHJlc3MKKyAqIEVSUk9SUzoJRUJBRFRSQVAJQVBJIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3IKKyAqCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHJlYWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKKyAqIE1NVSBzdGF0aXN0aWNzIGJ1ZmZlciBvbiB0aGUgY3VycmVudCB2aXJ0dWFsIENQVS4KKyAqLworI2RlZmluZSBIVl9GQVNUX01NVVNUQVRfSU5GTwkJMHgxMDMKKworLyogRnVuY3Rpb24gbnVtYmVycyBmb3IgSFZfQ09SRV9UUkFQLiAgKi8KKyNkZWZpbmUgSFZfQ09SRV9WRVIJCQkweDAwCisjZGVmaW5lIEhWX0NPUkVfUFVUQ0hBUgkJCTB4MDEKKyNkZWZpbmUgSFZfQ09SRV9FWElUCQkJMHgwMgorCisjZW5kaWYgLyogIShfU1BBUkM2NF9IWVBFUlZJU09SX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkcHJvbS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pZHByb20uaAppbmRleCA3MDE0ODNjLi43N2ZiZjk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkcHJvbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRwcm9tLmgKQEAgLTksMTUgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotLyogT2Zmc2V0IGludG8gdGhlIEVFUFJPTSB3aGVyZSB0aGUgaWQgUFJPTSBpcyBsb2NhdGVkIG9uIHRoZSA0YyAqLwotI2RlZmluZSBJRFBST01fT0ZGU0VUICAweDdkOAotCi0vKiBPbiBzdW40bTsgcGh5c2ljYWwuICovCi0vKiBNaWNyb1NQQVJDKC1JSSkgZG9lcyBub3QgZGVjb2RlIDMxcmQgYml0LCBidXQgaXQgd29ya3MuICovCi0jZGVmaW5lIElEUFJPTV9PRkZTRVRfTSAgMHhmZDgKLQotc3RydWN0IGlkcHJvbQoteworc3RydWN0IGlkcHJvbSB7CiAJdTgJCWlkX2Zvcm1hdDsJLyogRm9ybWF0IGlkZW50aWZpZXIgKGFsd2F5cyAweDAxKSAqLwogCXU4CQlpZF9tYWNodHlwZTsJLyogTWFjaGluZSB0eXBlICovCiAJdTgJCWlkX2V0aGFkZHJbNl07CS8qIEhhcmR3YXJlIGV0aGVybmV0IGFkZHJlc3MgKi8KQEAgLTMwLDYgKzIyLDQgQEAKIGV4dGVybiBzdHJ1Y3QgaWRwcm9tICppZHByb207CiBleHRlcm4gdm9pZCBpZHByb21faW5pdCh2b2lkKTsKIAotI2RlZmluZSBJRFBST01fU0laRSAgKHNpemVvZihzdHJ1Y3QgaWRwcm9tKSkKLQogI2VuZGlmIC8qICEoX1NQQVJDX0lEUFJPTV9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pbnRyX3F1ZXVlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2ludHJfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDYwNzdkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pbnRyX3F1ZXVlLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfU1BBUkM2NF9JTlRSX1FVRVVFX0gKKyNkZWZpbmUgX1NQQVJDNjRfSU5UUl9RVUVVRV9ICisKKy8qIFN1bjR2IGludGVycnVwdCBxdWV1ZSByZWdpc3RlcnMsIGFjY2Vzc2VkIHZpYSBBU0lfUVVFVUUuICAqLworCisjZGVmaW5lIElOVFJRX0NQVV9NT05ET19IRUFECSAgMHgzYzAgLyogQ1BVIG1vbmRvIGhlYWQJICAgICAgICAgICovCisjZGVmaW5lIElOVFJRX0NQVV9NT05ET19UQUlMCSAgMHgzYzggLyogQ1BVIG1vbmRvIHRhaWwJICAgICAgICAgICovCisjZGVmaW5lIElOVFJRX0RFVklDRV9NT05ET19IRUFECSAgMHgzZDAgLyogRGV2aWNlIG1vbmRvIGhlYWQJICAgICAgICAgICovCisjZGVmaW5lIElOVFJRX0RFVklDRV9NT05ET19UQUlMCSAgMHgzZDggLyogRGV2aWNlIG1vbmRvIHRhaWwJICAgICAgICAgICovCisjZGVmaW5lIElOVFJRX1JFU1VNX01PTkRPX0hFQUQJICAweDNlMCAvKiBSZXN1bWFibGUgZXJyb3IgbW9uZG8gaGVhZCAgICAgKi8KKyNkZWZpbmUgSU5UUlFfUkVTVU1fTU9ORE9fVEFJTAkgIDB4M2U4IC8qIFJlc3VtYWJsZSBlcnJvciBtb25kbyB0YWlsICAgICAqLworI2RlZmluZSBJTlRSUV9OT05SRVNVTV9NT05ET19IRUFEIDB4M2YwIC8qIE5vbi1yZXN1bWFibGUgZXJyb3IgbW9uZG8gaGVhZCAqLworI2RlZmluZSBJTlRSUV9OT05SRVNVTV9NT05ET19UQUlMIDB4M2Y4IC8qIE5vbi1yZXN1bWFibGUgZXJyb3IgbW9uZG8gaGVhZCAqLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9JTlRSX1FVRVVFX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnEuaAppbmRleCA4YjcwZWRjLi5kZTMzZDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxLmgKQEAgLTcyLDggKzcyLDExIEBACiAjZGVmaW5lIElNQVBfVkFMSUQJCTB4ODAwMDAwMDAJLyogSVJRIEVuYWJsZWQJCSovCiAjZGVmaW5lIElNQVBfVElEX1VQQQkJMHg3YzAwMDAwMAkvKiBVUEEgVGFyZ2V0SUQJCSovCiAjZGVmaW5lIElNQVBfVElEX0pCVVMJCTB4N2MwMDAwMDAJLyogSkJVUyBUYXJnZXRJRAkqLworI2RlZmluZSBJTUFQX1RJRF9TSElGVAkJMjYKICNkZWZpbmUgSU1BUF9BSURfU0FGQVJJCQkweDdjMDAwMDAwCS8qIFNhZmFyaSBBZ2VudElECSovCisjZGVmaW5lIElNQVBfQUlEX1NISUZUCQkyNgogI2RlZmluZSBJTUFQX05JRF9TQUZBUkkJCTB4MDNlMDAwMDAJLyogU2FmYXJpIE5vZGVJRAkqLworI2RlZmluZSBJTUFQX05JRF9TSElGVAkJMjEKICNkZWZpbmUgSU1BUF9JR04JCTB4MDAwMDA3YzAJLyogSVJRIEdyb3VwIE51bWJlcgkqLwogI2RlZmluZSBJTUFQX0lOTwkJMHgwMDAwMDAzZgkvKiBJUlEgTnVtYmVyCQkqLwogI2RlZmluZSBJTUFQX0lOUgkJMHgwMDAwMDdmZgkvKiBGdWxsIGludGVycnVwdCBudW1iZXIqLwpAQCAtMTExLDYgKzExNCw3IEBACiAjZGVmaW5lIGRpc2FibGVfaXJxX25vc3luYyBkaXNhYmxlX2lycQogZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBidWlsZF9pcnEoaW50IHBpbCwgaW50IGlub2ZpeHVwLCB1bnNpZ25lZCBsb25nIGljbHIsIHVuc2lnbmVkIGxvbmcgaW1hcCk7CitleHRlcm4gdW5zaWduZWQgaW50IHN1bjR2X2J1aWxkX2lycSh1MzIgZGV2aGFuZGxlLCB1bnNpZ25lZCBpbnQgZGV2aW5vLCBpbnQgcGlsLCB1bnNpZ25lZCBjaGFyIGZsYWdzKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc2J1c19idWlsZF9pcnEodm9pZCAqc2J1cywgdW5zaWduZWQgaW50IGlubyk7CiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X3NvZnRpbnQodW5zaWduZWQgbG9uZyBiaXRzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11LmgKaW5kZXggODYyN2VlZC4uMmQ0ZjJlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdS5oCkBAIC00LDIwICs0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jb25zdC5oPgorI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CiAKLS8qCi0gKiBGb3IgdGhlIDhrIHBhZ2VzaXplIGtlcm5lbCwgdXNlIG9ubHkgMTAgaHcgY29udGV4dCBiaXRzIHRvIG9wdGltaXplIHNvbWUKLSAqIHNoaWZ0cyBpbiB0aGUgZmFzdCB0bGJtaXNzIGhhbmRsZXJzLCBpbnN0ZWFkIG9mIGFsbCAxMyBiaXRzIChzcGVjaWZpY2FsbHkKLSAqIGZvciB2cHRlIG9mZnNldCBjYWxjdWxhdGlvbikuIEZvciBvdGhlciBwYWdlc2l6ZXMsIHRoaXMgb3B0aW1pemF0aW9uIGluCi0gKiB0aGUgdGxiaGFuZGxlcnMgY2FuIG5vdCBiZSBkb25lOyBidXQgc3RpbGwsIGFsbCAxMyBiaXRzIGNhbiBub3QgYmUgdXNlZAotICogYmVjYXVzZSB0aGUgdGxiIGhhbmRsZXJzIHVzZSAiYW5kY2MiIGluc3RydWN0aW9uIHdoaWNoIHNpZ24gZXh0ZW5kcyAxMwotICogYml0IGFyZ3VtZW50cy4KLSAqLwotI2lmIFBBR0VfU0hJRlQgPT0gMTMKLSNkZWZpbmUgQ1RYX05SX0JJVFMJCTEwCi0jZWxzZQotI2RlZmluZSBDVFhfTlJfQklUUwkJMTIKLSNlbmRpZgorI2RlZmluZSBDVFhfTlJfQklUUwkJMTMKIAogI2RlZmluZSBUQUdfQ09OVEVYVF9CSVRTCSgoX0FDKDEsVUwpIDw8IENUWF9OUl9CSVRTKSAtIF9BQygxLFVMKSkKIApAQCAtOTAsMTAgKzc5LDUwIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNkZWZpbmUgVFNCX0VOVFJZX0FMSUdOTUVOVAkxNgorCitzdHJ1Y3QgdHNiIHsKKwl1bnNpZ25lZCBsb25nIHRhZzsKKwl1bnNpZ25lZCBsb25nIHB0ZTsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChUU0JfRU5UUllfQUxJR05NRU5UKSkpOworCitleHRlcm4gdm9pZCBfX3RzYl9pbnNlcnQodW5zaWduZWQgbG9uZyBlbnQsIHVuc2lnbmVkIGxvbmcgdGFnLCB1bnNpZ25lZCBsb25nIHB0ZSk7CitleHRlcm4gdm9pZCB0c2JfZmx1c2godW5zaWduZWQgbG9uZyBlbnQsIHVuc2lnbmVkIGxvbmcgdGFnKTsKK2V4dGVybiB2b2lkIHRzYl9pbml0KHN0cnVjdCB0c2IgKnRzYiwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworc3RydWN0IHRzYl9jb25maWcgeworCXN0cnVjdCB0c2IJCSp0c2I7CisJdW5zaWduZWQgbG9uZwkJdHNiX3Jzc19saW1pdDsKKwl1bnNpZ25lZCBsb25nCQl0c2JfbmVudHJpZXM7CisJdW5zaWduZWQgbG9uZwkJdHNiX3JlZ192YWw7CisJdW5zaWduZWQgbG9uZwkJdHNiX21hcF92YWRkcjsKKwl1bnNpZ25lZCBsb25nCQl0c2JfbWFwX3B0ZTsKK307CisKKyNkZWZpbmUgTU1fVFNCX0JBU0UJMAorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorI2RlZmluZSBNTV9UU0JfSFVHRQkxCisjZGVmaW5lIE1NX05VTV9UU0JTCTIKKyNlbHNlCisjZGVmaW5lIE1NX05VTV9UU0JTCTEKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZwlzcGFyYzY0X2N0eF92YWw7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBsb25nCQlzcGFyYzY0X2N0eF92YWw7CisJdW5zaWduZWQgbG9uZwkJaHVnZV9wdGVfY291bnQ7CisJc3RydWN0IHRzYl9jb25maWcJdHNiX2Jsb2NrW01NX05VTV9UU0JTXTsKKwlzdHJ1Y3QgaHZfdHNiX2Rlc2NyCXRzYl9kZXNjcltNTV9OVU1fVFNCU107CiB9IG1tX2NvbnRleHRfdDsKIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAorI2RlZmluZSBUU0JfQ09ORklHX1RTQgkJMHgwMAorI2RlZmluZSBUU0JfQ09ORklHX1JTU19MSU1JVAkweDA4CisjZGVmaW5lIFRTQl9DT05GSUdfTkVOVFJJRVMJMHgxMAorI2RlZmluZSBUU0JfQ09ORklHX1JFR19WQUwJMHgxOAorI2RlZmluZSBUU0JfQ09ORklHX01BUF9WQUREUgkweDIwCisjZGVmaW5lIFRTQl9DT05GSUdfTUFQX1BURQkweDI4CisKICNlbmRpZiAvKiBfX01NVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdV9jb250ZXh0LmgKaW5kZXggNTdlZTdiMy4uMjMzN2ViNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11X2NvbnRleHQuaApAQCAtMTksOTYgKzE5LDEwMyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X2NvbnRleHRfYm1hcFtdOwogCiBleHRlcm4gdm9pZCBnZXRfbmV3X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdm9pZCBzbXBfbmV3X21tdV9jb250ZXh0X3ZlcnNpb24odm9pZCk7CisjZWxzZQorI2RlZmluZSBzbXBfbmV3X21tdV9jb250ZXh0X3ZlcnNpb24oKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKIAotLyogSW5pdGlhbGl6ZSBhIG5ldyBtbXUgY29udGV4dC4gIFRoaXMgaXMgaW52b2tlZCB3aGVuIGEgbmV3Ci0gKiBhZGRyZXNzIHNwYWNlIGluc3RhbmNlICh1bmlxdWUgb3Igc2hhcmVkKSBpcyBpbnN0YW50aWF0ZWQuCi0gKiBUaGlzIGp1c3QgbmVlZHMgdG8gc2V0IG1tLT5jb250ZXh0IHRvIGFuIGludmFsaWQgY29udGV4dC4KLSAqLwotI2RlZmluZSBpbml0X25ld19jb250ZXh0KF9fdHNrLCBfX21tKQlcCi0JKCgoX19tbSktPmNvbnRleHQuc3BhcmM2NF9jdHhfdmFsID0gMFVMKSwgMCkKK2V4dGVybiBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIAotLyogRGVzdHJveSBhIGRlYWQgY29udGV4dC4gIFRoaXMgb2NjdXJzIHdoZW4gbW1wdXQgZHJvcHMgdGhlCi0gKiBtbV91c2VycyBjb3VudCB0byB6ZXJvLCB0aGUgbW1hcHMgaGF2ZSBiZWVuIHJlbGVhc2VkLCBhbmQKLSAqIGFsbCB0aGUgcGFnZSB0YWJsZXMgaGF2ZSBiZWVuIGZsdXNoZWQuICBPdXIgam9iIGlzIHRvIGRlc3Ryb3kKLSAqIGFueSByZW1haW5pbmcgcHJvY2Vzc29yLXNwZWNpZmljIHN0YXRlLCBhbmQgaW4gdGhlIHNwYXJjNjQKLSAqIGNhc2UgdGhpcyBqdXN0IG1lYW5zIGZyZWVpbmcgdXAgdGhlIG1tdSBjb250ZXh0IElEIGhlbGQgYnkKLSAqIHRoaXMgdGFzayBpZiB2YWxpZC4KLSAqLwotI2RlZmluZSBkZXN0cm95X2NvbnRleHQoX19tbSkJCQkJCVwKLWRvIHsJc3Bpbl9sb2NrKCZjdHhfYWxsb2NfbG9jayk7CQkJCVwKLQlpZiAoQ1RYX1ZBTElEKChfX21tKS0+Y29udGV4dCkpIHsJCQlcCi0JCXVuc2lnbmVkIGxvbmcgbnIgPSBDVFhfTlJCSVRTKChfX21tKS0+Y29udGV4dCk7CVwKLQkJbW11X2NvbnRleHRfYm1hcFtucj4+Nl0gJj0gfigxVUwgPDwgKG5yICYgNjMpKTsJXAotCX0JCQkJCQkJXAotCXNwaW5fdW5sb2NrKCZjdHhfYWxsb2NfbG9jayk7CQkJCVwKLX0gd2hpbGUoMCkKK2V4dGVybiB2b2lkIF9fdHNiX2NvbnRleHRfc3dpdGNoKHVuc2lnbmVkIGxvbmcgcGdkX3BhLAorCQkJCSBzdHJ1Y3QgdHNiX2NvbmZpZyAqdHNiX2Jhc2UsCisJCQkJIHN0cnVjdCB0c2JfY29uZmlnICp0c2JfaHVnZSwKKwkJCQkgdW5zaWduZWQgbG9uZyB0c2JfZGVzY3JfcGEpOwogCi0vKiBSZWxvYWQgdGhlIHR3byBjb3JlIHZhbHVlcyB1c2VkIGJ5IFRMQiBtaXNzIGhhbmRsZXIKLSAqIHByb2Nlc3Npbmcgb24gc3BhcmM2NC4gIFRoZXkgYXJlOgotICogMSkgVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbW0tPnBnZCwgd2hlbiBmdWxsIHBhZ2UKLSAqICAgIHRhYmxlIHdhbGtzIGFyZSBuZWNlc3NhcnksIHRoaXMgaXMgd2hlcmUgdGhlCi0gKiAgICBzZWFyY2ggYmVnaW5zLgotICogMikgQSAiUEdEIGNhY2hlIi4gIEZvciAzMi1iaXQgdGFza3Mgb25seSBwZ2RbMF0gaXMKLSAqICAgIGV2ZXIgdXNlZCBzaW5jZSB0aGF0IG1hcHMgdGhlIGVudGlyZSBsb3cgNEdCCi0gKiAgICBjb21wbGV0ZWx5LiAgVG8gc3BlZWQgdXAgVExCIG1pc3MgcHJvY2Vzc2luZyB3ZQotICogICAgbWFrZSB0aGlzIHZhbHVlIGF2YWlsYWJsZSB0byB0aGUgaGFuZGxlcnMuICBUaGlzCi0gKiAgICBkZWNyZWFzZXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdHJhZmZpYyBpbmN1cnJlZC4KLSAqLwotI2RlZmluZSByZWxvYWRfdGxibWlzc19zdGF0ZShfX3RzaywgX19tbSkgXAotZG8geyBcCi0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBwYWRkciBhc20oIm81Iik7IFwKLQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHBnZF9jYWNoZSBhc20oIm80Iik7IFwKLQlwYWRkciA9IF9fcGEoKF9fbW0pLT5wZ2QpOyBcCi0JcGdkX2NhY2hlID0gMFVMOyBcCi0JaWYgKHRhc2tfdGhyZWFkX2luZm8oX190c2spLT5mbGFncyAmIF9USUZfMzJCSVQpIFwKLQkJcGdkX2NhY2hlID0gZ2V0X3BnZF9jYWNoZSgoX19tbSktPnBnZCk7IFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid3JwcgklJWcwLCAweDQ5NCwgJSVwc3RhdGVcblx0IiBcCi0JCQkgICAgICJtb3YJJTMsICUlZzRcblx0IiBcCi0JCQkgICAgICJtb3YJJTAsICUlZzdcblx0IiBcCi0JCQkgICAgICJzdHhhCSUxLCBbJSVnNF0gJTJcblx0IiBcCi0JCQkgICAgICJtZW1iYXIJI1N5bmNcblx0IiBcCi0JCQkgICAgICJ3cnByCSUlZzAsIDB4MDk2LCAlJXBzdGF0ZSIgXAotCQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8gXAotCQkJICAgICA6ICJyIiAocGFkZHIpLCAiciIgKHBnZF9jYWNoZSksXAotCQkJICAgICAgICJpIiAoQVNJX0RNTVUpLCAiaSIgKFRTQl9SRUcpKTsgXAotfSB3aGlsZSgwKQorc3RhdGljIGlubGluZSB2b2lkIHRzYl9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlfX3RzYl9jb250ZXh0X3N3aXRjaChfX3BhKG1tLT5wZ2QpLAorCQkJICAgICAmbW0tPmNvbnRleHQudHNiX2Jsb2NrWzBdLAorI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwkJCSAgICAgKG1tLT5jb250ZXh0LnRzYl9ibG9ja1sxXS50c2IgPworCQkJICAgICAgJm1tLT5jb250ZXh0LnRzYl9ibG9ja1sxXSA6CisJCQkgICAgICBOVUxMKQorI2Vsc2UKKwkJCSAgICAgTlVMTAorI2VuZGlmCisJCQkgICAgICwgX19wYSgmbW0tPmNvbnRleHQudHNiX2Rlc2NyWzBdKSk7Cit9CisKK2V4dGVybiB2b2lkIHRzYl9ncm93KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHRzYl9pbmRleCwgdW5zaWduZWQgbG9uZyBtbV9yc3MpOworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB2b2lkIHNtcF90c2Jfc3luYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisjZWxzZQorI2RlZmluZSBzbXBfdHNiX3N5bmMoX19tbSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCiAKIC8qIFNldCBNTVUgY29udGV4dCBpbiB0aGUgYWN0dWFsIGhhcmR3YXJlLiAqLwogI2RlZmluZSBsb2FkX3NlY29uZGFyeV9jb250ZXh0KF9fbW0pIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R4YQklMCwgWyUxXSAlMlxuXHQiIFwKLQkJCSAgICAgImZsdXNoCSUlZzYiIFwKLQkJCSAgICAgOiAvKiBObyBvdXRwdXRzICovIFwKLQkJCSAgICAgOiAiciIgKENUWF9IV0JJVFMoKF9fbW0pLT5jb250ZXh0KSksIFwKLQkJCSAgICAgICAiciIgKFNFQ09OREFSWV9DT05URVhUKSwgImkiIChBU0lfRE1NVSkpCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIFwKKwkiXG42NjE6CXN0eGEJCSUwLCBbJTFdICUyXG4iIFwKKwkiCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgXCJheFwiXG4iIFwKKwkiCS53b3JkCQk2NjFiXG4iIFwKKwkiCXN0eGEJCSUwLCBbJTFdICUzXG4iIFwKKwkiCS5wcmV2aW91c1xuIiBcCisJIglmbHVzaAkJJSVnNlxuIiBcCisJOiAvKiBObyBvdXRwdXRzICovIFwKKwk6ICJyIiAoQ1RYX0hXQklUUygoX19tbSktPmNvbnRleHQpKSwgXAorCSAgInIiIChTRUNPTkRBUllfQ09OVEVYVCksICJpIiAoQVNJX0RNTVUpLCAiaSIgKEFTSV9NTVUpKQogCiBleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9tbSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIAotLyogU3dpdGNoIHRoZSBjdXJyZW50IE1NIGNvbnRleHQuICovCisvKiBTd2l0Y2ggdGhlIGN1cnJlbnQgTU0gY29udGV4dC4gIEludGVycnVwdHMgYXJlIGRpc2FibGVkLiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JdW5zaWduZWQgbG9uZyBjdHhfdmFsaWQ7CisJdW5zaWduZWQgbG9uZyBjdHhfdmFsaWQsIGZsYWdzOwogCWludCBjcHU7CiAKLQkvKiBOb3RlOiBwYWdlX3RhYmxlX2xvY2sgaXMgdXNlZCBoZXJlIHRvIHNlcmlhbGl6ZSBzd2l0Y2hfbW0KLQkgKiBhbmQgYWN0aXZhdGVfbW0sIGFuZCB0aGVpciBjYWxscyB0byBnZXRfbmV3X21tdV9jb250ZXh0LgotCSAqIFRoaXMgdXNlIG9mIHBhZ2VfdGFibGVfbG9jayBpcyB1bnJlbGF0ZWQgdG8gaXRzIG90aGVyIHVzZXMuCi0JICovIAotCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1tLT5jb250ZXh0LmxvY2ssIGZsYWdzKTsKIAljdHhfdmFsaWQgPSBDVFhfVkFMSUQobW0tPmNvbnRleHQpOwogCWlmICghY3R4X3ZhbGlkKQogCQlnZXRfbmV3X21tdV9jb250ZXh0KG1tKTsKLQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAKLQlpZiAoIWN0eF92YWxpZCB8fCAob2xkX21tICE9IG1tKSkgewotCQlsb2FkX3NlY29uZGFyeV9jb250ZXh0KG1tKTsKLQkJcmVsb2FkX3RsYm1pc3Nfc3RhdGUodHNrLCBtbSk7Ci0JfQorCS8qIFdlIGhhdmUgdG8gYmUgZXh0cmVtZWx5IGNhcmVmdWwgaGVyZSBvciBlbHNlIHdlIHdpbGwgbWlzcworCSAqIGEgVFNCIGdyb3cgaWYgd2Ugc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gYSBrZXJuZWwKKwkgKiB0aHJlYWQgYW5kIGFuIGFkZHJlc3Mgc3BhY2Ugd2hpY2ggaGFzIGl0J3MgVFNCIHNpemUgaW5jcmVhc2VkCisJICogb24gYW5vdGhlciBwcm9jZXNzb3IuCisJICoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0byBwbGF5IHNvbWUgZ2FtZXMgaW4gb3JkZXIgdG8gb3B0aW1pemUgdGhlCisJICogc3dpdGNoLCBidXQgdGhlIHNhZmVzdCB0aGluZyB0byBkbyBpcyB0byB1bmNvbmRpdGlvbmFsbHkKKwkgKiBwZXJmb3JtIHRoZSBzZWNvbmRhcnkgY29udGV4dCBsb2FkIGFuZCB0aGUgVFNCIGNvbnRleHQgc3dpdGNoLgorCSAqCisJICogRm9yIHJlZmVyZW5jZSB0aGUgYmFkIGNhc2UgaXMsIGZvciBhZGRyZXNzIHNwYWNlICJBIjoKKwkgKgorCSAqCQlDUFUgMAkJCUNQVSAxCisJICoJcnVuIGFkZHJlc3Mgc3BhY2UgQQorCSAqCXNldCBjcHUwJ3MgYml0cyBpbiBjcHVfdm1fbWFzaworCSAqCXN3aXRjaCB0byBrZXJuZWwgdGhyZWFkLCBib3Jyb3cKKwkgKglhZGRyZXNzIHNwYWNlIEEgdmlhIGVudHJ5X2xhenlfdGxiCisJICoJCQkJCXJ1biBhZGRyZXNzIHNwYWNlIEEKKwkgKgkJCQkJc2V0IGNwdTEncyBiaXQgaW4gY3B1X3ZtX21hc2sKKwkgKgkJCQkJZmx1c2hfdGxiX3BlbmRpbmcoKQorCSAqCQkJCQlyZXNldCBjcHVfdm1fbWFzayB0byBqdXN0IGNwdTEKKwkgKgkJCQkJVFNCIGdyb3cKKwkgKglydW4gYWRkcmVzcyBzcGFjZSBBCisJICoJY29udGV4dCB3YXMgdmFsaWQsIHNvIHNraXAKKwkgKglUU0IgY29udGV4dCBzd2l0Y2gKKwkgKgorCSAqIEF0IHRoYXQgcG9pbnQgY3B1MCBjb250aW51ZXMgdG8gdXNlIGEgc3RhbGUgVFNCLCB0aGUgb25lIGZyb20KKwkgKiBiZWZvcmUgdGhlIFRTQiBncm93IHBlcmZvcm1lZCBvbiBjcHUxLiAgY3B1MSBkaWQgbm90IGNyb3NzLWNhbGwKKwkgKiBjcHUwIHRvIHVwZGF0ZSBpdCdzIFRTQiBiZWNhdXNlIGF0IHRoYXQgcG9pbnQgdGhlIGNwdV92bV9tYXNrCisJICogb25seSBoYWQgY3B1MSBzZXQgaW4gaXQuCisJICovCisJbG9hZF9zZWNvbmRhcnlfY29udGV4dChtbSk7CisJdHNiX2NvbnRleHRfc3dpdGNoKG1tKTsKIAotCS8qIEV2ZW4gaWYgKG1tID09IG9sZF9tbSkgd2UgX211c3RfIGNoZWNrCi0JICogdGhlIGNwdV92bV9tYXNrLiAgSWYgd2UgZG8gbm90IHdlIGNvdWxkCi0JICogY29ycnVwdCB0aGUgVExCIHN0YXRlIGJlY2F1c2Ugb2YgaG93Ci0JICogc21wX2ZsdXNoX3RsYl97cGFnZSxyYW5nZSxtbX0gb24gc3BhcmM2NAotCSAqIGFuZCBsYXp5IHRsYiBzd2l0Y2hlcyB3b3JrLiAtRGF2ZU0KKwkvKiBBbnkgdGltZSBhIHByb2Nlc3NvciBydW5zIGEgY29udGV4dCBvbiBhbiBhZGRyZXNzIHNwYWNlCisJICogZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBtdXN0IGZsdXNoIHRoYXQgY29udGV4dCBvdXQgb2YgdGhlCisJICogbG9jYWwgVExCLgogCSAqLwogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpZiAoIWN0eF92YWxpZCB8fCAhY3B1X2lzc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKSkgewpAQCAtMTE2LDYgKzEyMyw3IEBACiAJCV9fZmx1c2hfdGxiX21tKENUWF9IV0JJVFMobW0tPmNvbnRleHQpLAogCQkJICAgICAgIFNFQ09OREFSWV9DT05URVhUKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOwogfQogCiAjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCkBAIC0xMjMsMjMgKzEzMSwyMCBAQAogLyogQWN0aXZhdGUgYSBuZXcgTU0gaW5zdGFuY2UgZm9yIHRoZSBjdXJyZW50IHRhc2suICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHU7CiAKLQkvKiBOb3RlOiBwYWdlX3RhYmxlX2xvY2sgaXMgdXNlZCBoZXJlIHRvIHNlcmlhbGl6ZSBzd2l0Y2hfbW0KLQkgKiBhbmQgYWN0aXZhdGVfbW0sIGFuZCB0aGVpciBjYWxscyB0byBnZXRfbmV3X21tdV9jb250ZXh0LgotCSAqIFRoaXMgdXNlIG9mIHBhZ2VfdGFibGVfbG9jayBpcyB1bnJlbGF0ZWQgdG8gaXRzIG90aGVyIHVzZXMuCi0JICovIAotCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1tLT5jb250ZXh0LmxvY2ssIGZsYWdzKTsKIAlpZiAoIUNUWF9WQUxJRChtbS0+Y29udGV4dCkpCiAJCWdldF9uZXdfbW11X2NvbnRleHQobW0pOwogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpZiAoIWNwdV9pc3NldChjcHUsIG1tLT5jcHVfdm1fbWFzaykpCiAJCWNwdV9zZXQoY3B1LCBtbS0+Y3B1X3ZtX21hc2spOwotCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAogCWxvYWRfc2Vjb25kYXJ5X2NvbnRleHQobW0pOwogCV9fZmx1c2hfdGxiX21tKENUWF9IV0JJVFMobW0tPmNvbnRleHQpLCBTRUNPTkRBUllfQ09OVEVYVCk7Ci0JcmVsb2FkX3RsYm1pc3Nfc3RhdGUoY3VycmVudCwgbW0pOworCXRzYl9jb250ZXh0X3N3aXRjaChtbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW0tPmNvbnRleHQubG9jaywgZmxhZ3MpOwogfQogCiAjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L251bW5vZGVzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L251bW5vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3ZTdlNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbnVtbm9kZXMuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgX1NQQVJDNjRfTlVNTk9ERVNfSAorI2RlZmluZSBfU1BBUkM2NF9OVU1OT0RFU19ICisKKyNkZWZpbmUgTk9ERVNfU0hJRlQJMAorCisjZW5kaWYgLyogIShfU1BBUkM2NF9OVU1OT0RFU19IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oCmluZGV4IDNjNTliMjYuLmM3NTQ2NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BsaWIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmgKQEAgLTEyLDE4ICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+CiAKLS8qIEVudW1lcmF0aW9uIHRvIGRlc2NyaWJlIHRoZSBwcm9tIG1ham9yIHZlcnNpb24gd2UgaGF2ZSBkZXRlY3RlZC4gKi8KLWVudW0gcHJvbV9tYWpvcl92ZXJzaW9uIHsKLQlQUk9NX1YwLCAgICAgIC8qIE9yaWdpbmFsIHN1bjRjIFYwIHByb20gKi8KLQlQUk9NX1YyLCAgICAgIC8qIHN1bjRjIGFuZCBlYXJseSBzdW40bSBWMiBwcm9tICovCi0JUFJPTV9WMywgICAgICAvKiBzdW40bSBhbmQgbGF0ZXIsIHVwIHRvIHN1bjRkL3N1bjRlIG1hY2hpbmVzIFYzICovCi0JUFJPTV9QMTI3NSwgICAvKiBJRUVFIGNvbXBsaWFudCBJU0EgYmFzZWQgU3VuIFBST00sIG9ubHkgc3VuNHUgKi8KLSAgICAgICAgUFJPTV9BUDEwMDAsICAvKiBhY3R1YWxseSBubyBwcm9tIGF0IGFsbCAqLwotfTsKLQotZXh0ZXJuIGVudW0gcHJvbV9tYWpvcl92ZXJzaW9uIHByb21fdmVyczsKLS8qIFJldmlzaW9uLCBhbmQgZmlybXdhcmUgcmV2aXNpb24uICovCi1leHRlcm4gdW5zaWduZWQgaW50IHByb21fcmV2LCBwcm9tX3ByZXY7CisvKiBPQlAgdmVyc2lvbiBzdHJpbmcuICovCitleHRlcm4gY2hhciBwcm9tX3ZlcnNpb25bXTsKIAogLyogUm9vdCBub2RlIG9mIHRoZSBwcm9tIGRldmljZSB0cmVlLCB0aGlzIHN0YXlzIGNvbnN0YW50IGFmdGVyCiAgKiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4KQEAgLTM5LDYgKzI5LDkgQEAKIGV4dGVybiBpbnQgcHJvbV9jaG9zZW5fbm9kZTsKIAogLyogSGVscGVyIHZhbHVlcyBhbmQgc3RyaW5ncyBpbiBhcmNoL3NwYXJjNjQva2VybmVsL2hlYWQuUyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9wZWVyX25hbWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIHByb21fY29tcGF0aWJsZV9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBwcm9tX3Jvb3RfY29tcGF0aWJsZVtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgcHJvbV9maW5kZGV2X25hbWVbXTsKIGV4dGVybiBjb25zdCBjaGFyIHByb21fY2hvc2VuX3BhdGhbXTsKIGV4dGVybiBjb25zdCBjaGFyIHByb21fZ2V0cHJvcF9uYW1lW107CkBAIC0xMzAsMTUgKzEyMyw2IEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBjaGFyIHByb21fZ2V0X2lkcHJvbShjaGFyICppZHBfYnVmZmVyLCBpbnQgaWRwYnVmX3NpemUpOwogCi0vKiBHZXQgdGhlIHByb20gbWFqb3IgdmVyc2lvbi4gKi8KLWV4dGVybiBpbnQgcHJvbV92ZXJzaW9uKHZvaWQpOwotCi0vKiBHZXQgdGhlIHByb20gcGx1Z2luIHJldmlzaW9uLiAqLwotZXh0ZXJuIGludCBwcm9tX2dldHJldih2b2lkKTsKLQotLyogR2V0IHRoZSBwcm9tIGZpcm13YXJlIHJldmlzaW9uLiAqLwotZXh0ZXJuIGludCBwcm9tX2dldHByZXYodm9pZCk7Ci0KIC8qIENoYXJhY3RlciBvcGVyYXRpb25zIHRvL2Zyb20gdGhlIGNvbnNvbGUuLi4uICovCiAKIC8qIE5vbi1ibG9ja2luZyBnZXQgY2hhcmFjdGVyIGZyb20gY29uc29sZS4gKi8KQEAgLTE2NCw2ICsxNDgsNyBAQAogCVBST01ERVZfSVRUWUEsCQkJLyogaW5wdXQgZnJvbSB0dHlhICovCiAJUFJPTURFVl9JVFRZQiwJCQkvKiBpbnB1dCBmcm9tIHR0eWIgKi8KIAlQUk9NREVWX0lSU0MsCQkJLyogaW5wdXQgZnJvbSByc2MgKi8KKwlQUk9NREVWX0lWQ09OUywJCQkvKiBpbnB1dCBmcm9tIHZpcnR1YWwtY29uc29sZSAqLwogCVBST01ERVZfSV9VTkssCiB9OwogCkBAIC0xNzYsNiArMTYxLDcgQEAKIAlQUk9NREVWX09UVFlBLAkJCS8qIHRvIHR0eWEgKi8KIAlQUk9NREVWX09UVFlCLAkJCS8qIHRvIHR0eWIgKi8KIAlQUk9NREVWX09SU0MsCQkJLyogdG8gcnNjICovCisJUFJPTURFVl9PVkNPTlMsCQkJLyogdG8gdmlydHVhbC1jb25zb2xlICovCiAJUFJPTURFVl9PX1VOSywKIH07CiAKQEAgLTE4MywxMCArMTY5LDE4IEBACiAKIC8qIE11bHRpcHJvY2Vzc29yIG9wZXJhdGlvbnMuLi4gKi8KICNpZmRlZiBDT05GSUdfU01QCi0vKiBTdGFydCB0aGUgQ1BVIHdpdGggdGhlIGdpdmVuIGRldmljZSB0cmVlIG5vZGUsIGNvbnRleHQgdGFibGUsIGFuZCBjb250ZXh0Ci0gKiBhdCB0aGUgcGFzc2VkIHByb2dyYW0gY291bnRlci4KKy8qIFN0YXJ0IHRoZSBDUFUgd2l0aCB0aGUgZ2l2ZW4gZGV2aWNlIHRyZWUgbm9kZSBhdCB0aGUgcGFzc2VkIHByb2dyYW0KKyAqIGNvdW50ZXIgd2l0aCB0aGUgZ2l2ZW4gYXJnIHBhc3NlZCBpbiB2aWEgcmVnaXN0ZXIgJW8wLgogICovCi1leHRlcm4gdm9pZCBwcm9tX3N0YXJ0Y3B1KGludCBjcHVub2RlLCB1bnNpZ25lZCBsb25nIHBjLCB1bnNpZ25lZCBsb25nIG8wKTsKK2V4dGVybiB2b2lkIHByb21fc3RhcnRjcHUoaW50IGNwdW5vZGUsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworLyogU3RhcnQgdGhlIENQVSB3aXRoIHRoZSBnaXZlbiBjcHUgSUQgYXQgdGhlIHBhc3NlZCBwcm9ncmFtCisgKiBjb3VudGVyIHdpdGggdGhlIGdpdmVuIGFyZyBwYXNzZWQgaW4gdmlhIHJlZ2lzdGVyICVvMC4KKyAqLworZXh0ZXJuIHZvaWQgcHJvbV9zdGFydGNwdV9jcHVpZChpbnQgY3B1aWQsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworLyogU3RvcCB0aGUgQ1BVIHdpdGggdGhlIGdpdmVuIGNwdSBJRC4gICovCitleHRlcm4gdm9pZCBwcm9tX3N0b3BjcHVfY3B1aWQoaW50IGNwdWlkKTsKIAogLyogU3RvcCB0aGUgY3VycmVudCBDUFUuICovCiBleHRlcm4gdm9pZCBwcm9tX3N0b3BzZWxmKHZvaWQpOwpAQCAtMzM1LDYgKzMyOSw3IEBACiAKIC8qIENsaWVudCBpbnRlcmZhY2UgbGV2ZWwgcm91dGluZXMuICovCiBleHRlcm4gdm9pZCBwcm9tX3NldF90cmFwX3RhYmxlKHVuc2lnbmVkIGxvbmcgdGJhKTsKK2V4dGVybiB2b2lkIHByb21fc2V0X3RyYXBfdGFibGVfc3VuNHYodW5zaWduZWQgbG9uZyB0YmEsIHVuc2lnbmVkIGxvbmcgbW1mc2EpOwogCiBleHRlcm4gbG9uZyBwMTI3NV9jbWQoY29uc3QgY2hhciAqLCBsb25nLCAuLi4pOwogCQkJCSAgIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaAppbmRleCA1NDI2YmIyLi42NmZlNGFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaApAQCAtMzAsNiArMzAsMjMgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQikKKyNkZWZpbmUgSFBBR0VfU0hJRlQJCTIyCisjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJLKQorI2RlZmluZSBIUEFHRV9TSElGVAkJMTkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0SykKKyNkZWZpbmUgSFBBR0VfU0hJRlQJCTE2CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyNkZWZpbmUgSFBBR0VfU0laRQkJKF9BQygxLFVMKSA8PCBIUEFHRV9TSElGVCkKKyNkZWZpbmUgSFBBR0VfTUFTSwkJKH4oSFBBR0VfU0laRSAtIDFVTCkpCisjZGVmaW5lIEhVR0VUTEJfUEFHRV9PUkRFUgkoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKQorI2RlZmluZSBBUkNIX0hBU19TRVRDTEVBUl9IVUdFX1BURQorI2RlZmluZSBBUkNIX0hBU19IVUdFVExCX1BSRUZBVUxUX0hPT0sKKyNkZWZpbmUgSEFWRV9BUkNIX0hVR0VUTEJfVU5NQVBQRURfQVJFQQorI2VuZGlmCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIGV4dGVybiB2b2lkIF9jbGVhcl9wYWdlKHZvaWQgKnBhZ2UpOwpAQCAtOTAsMjQgKzEwNyw5IEBACiAKICNlbmRpZiAvKiAoU1RSSUNUX01NX1RZUEVDSEVDS1MpICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIpCi0jZGVmaW5lIEhQQUdFX1NISUZUCQkyMgotI2VsaWYgZGVmaW5lZChDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNTEySykKLSNkZWZpbmUgSFBBR0VfU0hJRlQJCTE5Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspCi0jZGVmaW5lIEhQQUdFX1NISUZUCQkxNgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0jZGVmaW5lIEhQQUdFX1NJWkUJCShfQUMoMSxVTCkgPDwgSFBBR0VfU0hJRlQpCi0jZGVmaW5lIEhQQUdFX01BU0sJCSh+KEhQQUdFX1NJWkUgLSAxVUwpKQotI2RlZmluZSBIVUdFVExCX1BBR0VfT1JERVIJKEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCkKLSNkZWZpbmUgQVJDSF9IQVNfU0VUQ0xFQVJfSFVHRV9QVEUKLSNkZWZpbmUgQVJDSF9IQVNfSFVHRVRMQl9QUkVGQVVMVF9IT09LCi0jZW5kaWYKLQogI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/IFwKLQkJCQkgKF9BQygweDAwMDAwMDAwNzAwMDAwMDAsVUwpKSA6IChQQUdFX09GRlNFVCkpCisJCQkJIChfQUMoMHgwMDAwMDAwMDcwMDAwMDAwLFVMKSkgOiBcCisJCQkJIChfQUMoMHhmZmZmZjgwMDAwMDAwMDAwLFVMKSArICgxVUwgPDwgMzJVTCkpKQogCiAjZW5kaWYgLyogIShfX0FTU0VNQkxZX18pICovCiAKQEAgLTEyNCwxNyArMTI2LDEwIEBACiAjZGVmaW5lIF9fcGEoeCkJCQkoKHVuc2lnbmVkIGxvbmcpKHgpIC0gUEFHRV9PRkZTRVQpCiAjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpICh4KSArIFBBR0VfT0ZGU0VUKSkKIAotLyogUEZOcyBhcmUgcmVhbCBwaHlzaWNhbCBwYWdlIG51bWJlcnMuICBIb3dldmVyLCBtZW1fbWFwIG9ubHkgYmVnaW5zIHRvIHJlY29yZAotICogcGVyLXBhZ2UgaW5mb3JtYXRpb24gc3RhcnRpbmcgYXQgcGZuX2Jhc2UuICBUaGlzIGlzIHRvIGhhbmRsZSBzeXN0ZW1zIHdoZXJlCi0gKiB0aGUgZmlyc3QgcGh5c2ljYWwgcGFnZSBpbiB0aGUgbWFjaGluZSBpcyBhdCBzb21lIGh1Z2UgcGh5c2ljYWwgYWRkcmVzcywKLSAqIHN1Y2ggYXMgNEdCLiAgIFRoaXMgaXMgY29tbW9uIG9uIGEgcGFydGl0aW9uZWQgRTEwMDAwLCBmb3IgZXhhbXBsZS4KLSAqLwotZXh0ZXJuIHN0cnVjdCBwYWdlICpwZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHBmbik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBwYWdlX3RvX3BmbihzdHJ1Y3QgcGFnZSAqKTsKKyNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikJX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQogCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcik+PlBBR0VfU0hJRlQpCiAKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgoKHBmbiktKHBmbl9iYXNlKSkgPCBtYXhfbWFwbnIpCiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAKICNkZWZpbmUgdmlydF90b19waHlzIF9fcGEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGJtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BibS5oCmluZGV4IGRkMzVhMmMuLjEzOTZmMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGJtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYm0uaApAQCAtMTM5LDYgKzEzOSw5IEBACiAJLyogT3BhcXVlIDMyLWJpdCBzeXN0ZW0gYnVzIFBvcnQgSUQuICovCiAJdTMyCQkJCXBvcnRpZDsKIAorCS8qIE9wYXF1ZSAzMi1iaXQgaGFuZGxlIHVzZWQgZm9yIGh5cGVydmlzb3IgY2FsbHMuICAqLworCXUzMgkJCQlkZXZoYW5kbGU7CisKIAkvKiBDaGlwc2V0IHZlcnNpb24gaW5mb3JtYXRpb24uICovCiAJaW50CQkJCWNoaXBfdHlwZTsKICNkZWZpbmUgUEJNX0NISVBfVFlQRV9TQUJSRQkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wY2kuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGNpLmgKaW5kZXggODliZDcxYi4uN2M1YTU4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BjaS5oCkBAIC00MSwxMCArNDEsMjYgQEAKIAogc3RydWN0IHBjaV9kZXY7CiAKK3N0cnVjdCBwY2lfaW9tbXVfb3BzIHsKKwl2b2lkICooKmFsbG9jX2NvbnNpc3RlbnQpKHN0cnVjdCBwY2lfZGV2ICosIHNpemVfdCwgZG1hX2FkZHJfdCAqKTsKKwl2b2lkICgqZnJlZV9jb25zaXN0ZW50KShzdHJ1Y3QgcGNpX2RldiAqLCBzaXplX3QsIHZvaWQgKiwgZG1hX2FkZHJfdCk7CisJZG1hX2FkZHJfdCAoKm1hcF9zaW5nbGUpKHN0cnVjdCBwY2lfZGV2ICosIHZvaWQgKiwgc2l6ZV90LCBpbnQpOworCXZvaWQgKCp1bm1hcF9zaW5nbGUpKHN0cnVjdCBwY2lfZGV2ICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKKwlpbnQgKCptYXBfc2cpKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7CisJdm9pZCAoKnVubWFwX3NnKShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworCXZvaWQgKCpkbWFfc3luY19zaW5nbGVfZm9yX2NwdSkoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOworCXZvaWQgKCpkbWFfc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOworfTsKKworZXh0ZXJuIHN0cnVjdCBwY2lfaW9tbXVfb3BzICpwY2lfaW9tbXVfb3BzOworCiAvKiBBbGxvY2F0ZSBhbmQgbWFwIGtlcm5lbCBidWZmZXIgdXNpbmcgY29uc2lzdGVudCBtb2RlIERNQSBmb3IgYSBkZXZpY2UuCiAgKiBod2RldiBzaG91bGQgYmUgdmFsaWQgc3RydWN0IHBjaV9kZXYgcG9pbnRlciBmb3IgUENJIGRldmljZXMuCiAgKi8KLWV4dGVybiB2b2lkICpwY2lfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSkKK3sKKwlyZXR1cm4gcGNpX2lvbW11X29wcy0+YWxsb2NfY29uc2lzdGVudChod2Rldiwgc2l6ZSwgZG1hX2hhbmRsZSk7Cit9CiAKIC8qIEZyZWUgYW5kIHVubWFwIGEgY29uc2lzdGVudCBETUEgYnVmZmVyLgogICogY3B1X2FkZHIgaXMgd2hhdCB3YXMgcmV0dXJuZWQgZnJvbSBwY2lfYWxsb2NfY29uc2lzdGVudCwKQEAgLTU0LDcgKzcwLDEwIEBACiAgKiBSZWZlcmVuY2VzIHRvIHRoZSBtZW1vcnkgYW5kIG1hcHBpbmdzIGFzc29jaWF0ZWQgd2l0aCBjcHVfYWRkci9kbWFfYWRkcgogICogcGFzdCB0aGlzIGNhbGwgYXJlIGlsbGVnYWwuCiAgKi8KLWV4dGVybiB2b2lkIHBjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQoreworCXJldHVybiBwY2lfaW9tbXVfb3BzLT5mcmVlX2NvbnNpc3RlbnQoaHdkZXYsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKK30KIAogLyogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KICAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgpAQCAtNjIsNyArODEsMTAgQEAKICAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeQogICogdW50aWwgZWl0aGVyIHBjaV91bm1hcF9zaW5nbGUgb3IgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IGlzIHBlcmZvcm1lZC4KICAqLwotZXh0ZXJuIGRtYV9hZGRyX3QgcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJcmV0dXJuIHBjaV9pb21tdV9vcHMtPm1hcF9zaW5nbGUoaHdkZXYsIHB0ciwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KIAogLyogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIGRtYV9hZGRyIGFuZCBzaXplCiAgKiBtdXN0IG1hdGNoIHdoYXQgd2FzIHByb3ZpZGVkIGZvciBpbiBhIHByZXZpb3VzIHBjaV9tYXBfc2luZ2xlIGNhbGwuICBBbGwKQEAgLTcxLDcgKzkzLDEwIEBACiAgKiBBZnRlciB0aGlzIGNhbGwsIHJlYWRzIGJ5IHRoZSBjcHUgdG8gdGhlIGJ1ZmZlciBhcmUgZ3VhcmFudGVlZCB0byBzZWUKICAqIHdoYXRldmVyIHRoZSBkZXZpY2Ugd3JvdGUgdGhlcmUuCiAgKi8KLWV4dGVybiB2b2lkIHBjaV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCXBjaV9pb21tdV9vcHMtPnVubWFwX3NpbmdsZShod2RldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbik7Cit9CiAKIC8qIE5vIGhpZ2htZW0gb24gc3BhcmM2NCwgcGx1cyB3ZSBoYXZlIGFuIElPTU1VLCBzbyBtYXBwaW5nIHBhZ2VzIGlzIGVhc3kuICovCiAjZGVmaW5lIHBjaV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZiwgc2l6ZSwgZGlyKSBcCkBAIC0xMDcsMTUgKzEzMiwxOSBAQAogICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKICAqIHRoZSBzYW1lIGhlcmUuCiAgKi8KLWV4dGVybiBpbnQgcGNpX21hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIGludCBwY2lfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQoreworCXJldHVybiBwY2lfaW9tbXVfb3BzLT5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKK30KIAogLyogVW5tYXAgYSBzZXQgb2Ygc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9ucy4KICAqIEFnYWluLCBjcHUgcmVhZCBydWxlcyBjb25jZXJuaW5nIGNhbGxzIGhlcmUgYXJlIHRoZSBzYW1lIGFzIGZvcgogICogcGNpX3VubWFwX3NpbmdsZSgpIGFib3ZlLgogICovCi1leHRlcm4gdm9pZCBwY2lfdW5tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJIGludCBuaHdlbnRzLCBpbnQgZGlyZWN0aW9uKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdW5tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cywgaW50IGRpcmVjdGlvbikKK3sKKwlwY2lfaW9tbXVfb3BzLT51bm1hcF9zZyhod2Rldiwgc2csIG5od2VudHMsIGRpcmVjdGlvbik7Cit9CiAKIC8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2luZ2xlCiAgKiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24gYWZ0ZXIgYSB0cmFuc2Zlci4KQEAgLTEyNyw4ICsxNTYsMTAgQEAKICAqIG11c3QgZmlyc3QgcGVyZm9ybSBhIHBjaV9kbWFfc3luY19mb3JfZGV2aWNlLCBhbmQgdGhlbiB0aGUKICAqIGRldmljZSBhZ2FpbiBvd25zIHRoZSBidWZmZXIuCiAgKi8KLWV4dGVybiB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOworc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJcGNpX2lvbW11X29wcy0+ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLApAQCAtMTQ0LDcgKzE3NSwxMCBAQAogICogVGhlIHNhbWUgYXMgcGNpX2RtYV9zeW5jX3NpbmdsZV8qIGJ1dCBmb3IgYSBzY2F0dGVyLWdhdGhlciBsaXN0LAogICogc2FtZSBydWxlcyBhbmQgdXNhZ2UuCiAgKi8KLWV4dGVybiB2b2lkIHBjaV9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworCXBjaV9pb21tdV9vcHMtPmRtYV9zeW5jX3NnX2Zvcl9jcHUoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcmVjdGlvbik7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcGNpX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGVyY3B1LmgKaW5kZXggYWVhNGU1MS4uODIwMzJlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BlcmNwdS5oCkBAIC0yNiwxMCArMjYsOSBAQAogI2RlZmluZSBwZXJjcHVfbW9kY29weShwY3B1ZHN0LCBzcmMsIHNpemUpCQkJXAogZG8gewkJCQkJCQkJXAogCXVuc2lnbmVkIGludCBfX2k7CQkJCQlcCi0JZm9yIChfX2kgPSAwOyBfX2kgPCBOUl9DUFVTOyBfX2krKykJCQlcCi0JCWlmIChjcHVfcG9zc2libGUoX19pKSkJCQkJXAotCQkJbWVtY3B5KChwY3B1ZHN0KStfX3Blcl9jcHVfb2Zmc2V0KF9faSksCVwKLQkJCSAgICAgICAoc3JjKSwgKHNpemUpKTsJCQlcCisJZm9yX2VhY2hfY3B1KF9faSkJCQkJCVwKKwkJbWVtY3B5KChwY3B1ZHN0KStfX3Blcl9jcHVfb2Zmc2V0KF9faSksCQlcCisJCSAgICAgICAoc3JjKSwgKHNpemUpKTsJCQkJXAogfSB3aGlsZSAoMCkKICNlbHNlIC8qICEgU01QICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKaW5kZXggYTk2MDY3Yy4uMTJlNGEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ2FsbG9jLmgKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgogI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+CkBAIC0xMywxNzIgKzE0LDU5IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyogUGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcuICovCi0jaWZkZWYgQ09ORklHX1NNUAotLyogU2xpaWlpY2NrICovCi0jZGVmaW5lIHBndF9xdWlja2xpc3RzCWxvY2FsX2NwdV9kYXRhKCkKLSNlbHNlCi1leHRlcm4gc3RydWN0IHBndGFibGVfY2FjaGVfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nICpwZ2RfY2FjaGU7Ci0JdW5zaWduZWQgbG9uZyAqcHRlX2NhY2hlWzJdOwotCXVuc2lnbmVkIGludCBwZ2NhY2hlX3NpemU7Ci19IHBndF9xdWlja2xpc3RzOwotI2VuZGlmCi0jZGVmaW5lIHBnZF9xdWlja2xpc3QJCShwZ3RfcXVpY2tsaXN0cy5wZ2RfY2FjaGUpCi0jZGVmaW5lIHBtZF9xdWlja2xpc3QJCSgodW5zaWduZWQgbG9uZyAqKTApCi0jZGVmaW5lIHB0ZV9xdWlja2xpc3QJCShwZ3RfcXVpY2tsaXN0cy5wdGVfY2FjaGUpCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZQkocGd0X3F1aWNrbGlzdHMucGdjYWNoZV9zaXplKQorZXh0ZXJuIGttZW1fY2FjaGVfdCAqcGd0YWJsZV9jYWNoZTsKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBmcmVlX3BnZF9mYXN0KHBnZF90ICpwZ2QpCitzdGF0aWMgaW5saW5lIHBnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JKih1bnNpZ25lZCBsb25nICopcGdkID0gKHVuc2lnbmVkIGxvbmcpIHBnZF9xdWlja2xpc3Q7Ci0JcGdkX3F1aWNrbGlzdCA9ICh1bnNpZ25lZCBsb25nICopIHBnZDsKLQlwZ3RhYmxlX2NhY2hlX3NpemUrKzsKLQlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBndGFibGVfY2FjaGUsIEdGUF9LRVJORUwpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBwZ2RfdCAqZ2V0X3BnZF9mYXN0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2ZyZWUocGdkX3QgKnBnZCkKIHsKLQl1bnNpZ25lZCBsb25nICpyZXQ7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZigocmV0ID0gcGdkX3F1aWNrbGlzdCkgIT0gTlVMTCkgewotCQlwZ2RfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7Ci0JCXJldFswXSA9IDA7Ci0JCXBndGFibGVfY2FjaGVfc2l6ZS0tOwotCQlwcmVlbXB0X2VuYWJsZSgpOwotCX0gZWxzZSB7Ci0JCXByZWVtcHRfZW5hYmxlKCk7Ci0JCXJldCA9ICh1bnNpZ25lZCBsb25nICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7Ci0JCWlmKHJldCkKLQkJCW1lbXNldChyZXQsIDAsIFBBR0VfU0laRSk7Ci0JfQotCXJldHVybiAocGdkX3QgKilyZXQ7CisJa21lbV9jYWNoZV9mcmVlKHBndGFibGVfY2FjaGUsIHBnZCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZnJlZV9wZ2Rfc2xvdyhwZ2RfdCAqcGdkKQotewotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwZ2QpOwotfQotCi0jaWZkZWYgRENBQ0hFX0FMSUFTSU5HX1BPU1NJQkxFCi0jZGVmaW5lIFZQVEVfQ09MT1IoYWRkcmVzcykJCSgoKGFkZHJlc3MpID4+IChQQUdFX1NISUZUICsgMTApKSAmIDFVTCkKLSNkZWZpbmUgRENBQ0hFX0NPTE9SKGFkZHJlc3MpCQkoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIDFVTCkKLSNlbHNlCi0jZGVmaW5lIFZQVEVfQ09MT1IoYWRkcmVzcykJCTAKLSNkZWZpbmUgRENBQ0hFX0NPTE9SKGFkZHJlc3MpCQkwCi0jZW5kaWYKLQogI2RlZmluZSBwdWRfcG9wdWxhdGUoTU0sIFBVRCwgUE1EKQlwdWRfc2V0KFBVRCwgUE1EKQogCi1zdGF0aWMgX19pbmxpbmVfXyBwbWRfdCAqcG1kX2FsbG9jX29uZV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyAqcmV0OwotCWludCBjb2xvciA9IDA7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAocHRlX3F1aWNrbGlzdFtjb2xvcl0gPT0gTlVMTCkKLQkJY29sb3IgPSAxOwotCi0JaWYoKHJldCA9ICh1bnNpZ25lZCBsb25nICopcHRlX3F1aWNrbGlzdFtjb2xvcl0pICE9IE5VTEwpIHsKLQkJcHRlX3F1aWNrbGlzdFtjb2xvcl0gPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKLQkJcmV0WzBdID0gMDsKLQkJcGd0YWJsZV9jYWNoZV9zaXplLS07Ci0JfQotCXByZWVtcHRfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gKHBtZF90ICopcmV0OworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBndGFibGVfY2FjaGUsCisJCQkJR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBwbWRfdCAqcG1kX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGlubGluZSB2b2lkIHBtZF9mcmVlKHBtZF90ICpwbWQpCiB7Ci0JcG1kX3QgKnBtZDsKLQotCXBtZCA9IHBtZF9hbGxvY19vbmVfZmFzdChtbSwgYWRkcmVzcyk7Ci0JaWYgKCFwbWQpIHsKLQkJcG1kID0gKHBtZF90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKLQkJaWYgKHBtZCkKLQkJCW1lbXNldChwbWQsIDAsIFBBR0VfU0laRSk7Ci0JfQotCXJldHVybiBwbWQ7CisJa21lbV9jYWNoZV9mcmVlKHBndGFibGVfY2FjaGUsIHBtZCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZnJlZV9wbWRfZmFzdChwbWRfdCAqcG1kKQorc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXVuc2lnbmVkIGxvbmcgY29sb3IgPSBEQ0FDSEVfQ09MT1IoKHVuc2lnbmVkIGxvbmcpcG1kKTsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCSoodW5zaWduZWQgbG9uZyAqKXBtZCA9ICh1bnNpZ25lZCBsb25nKSBwdGVfcXVpY2tsaXN0W2NvbG9yXTsKLQlwdGVfcXVpY2tsaXN0W2NvbG9yXSA9ICh1bnNpZ25lZCBsb25nICopIHBtZDsKLQlwZ3RhYmxlX2NhY2hlX3NpemUrKzsKLQlwcmVlbXB0X2VuYWJsZSgpOworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKHBndGFibGVfY2FjaGUsCisJCQkJR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZyZWVfcG1kX3Nsb3cocG1kX3QgKnBtZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBtZCk7CisJcmV0dXJuIHZpcnRfdG9fcGFnZShwdGVfYWxsb2Nfb25lX2tlcm5lbChtbSwgYWRkcmVzcykpOwogfQorCQkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwocHRlX3QgKnB0ZSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUocGd0YWJsZV9jYWNoZSwgcHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBwYWdlICpwdGVwYWdlKQoreworCXB0ZV9mcmVlX2tlcm5lbChwYWdlX2FkZHJlc3MocHRlcGFnZSkpOworfQorCiAKICNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChNTSwgUE1ELCBQVEUpCXBtZF9zZXQoUE1ELCBQVEUpCiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShNTSxQTUQsUFRFX1BBR0UpCQlcCiAJcG1kX3BvcHVsYXRlX2tlcm5lbChNTSxQTUQscGFnZV9hZGRyZXNzKFBURV9QQUdFKSkKIAotZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqCi1wdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcHRlX3QgKnB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKG1tLCBhZGRyKTsKLQotCWlmIChwdGUpCi0JCXJldHVybiB2aXJ0X3RvX3BhZ2UocHRlKTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBwdGVfdCAqcHRlX2FsbG9jX29uZV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0JdW5zaWduZWQgbG9uZyBjb2xvciA9IFZQVEVfQ09MT1IoYWRkcmVzcyk7Ci0JdW5zaWduZWQgbG9uZyAqcmV0OwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYoKHJldCA9ICh1bnNpZ25lZCBsb25nICopcHRlX3F1aWNrbGlzdFtjb2xvcl0pICE9IE5VTEwpIHsKLQkJcHRlX3F1aWNrbGlzdFtjb2xvcl0gPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKLQkJcmV0WzBdID0gMDsKLQkJcGd0YWJsZV9jYWNoZV9zaXplLS07Ci0JfQotCXByZWVtcHRfZW5hYmxlKCk7Ci0JcmV0dXJuIChwdGVfdCAqKXJldDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBmcmVlX3B0ZV9mYXN0KHB0ZV90ICpwdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBjb2xvciA9IERDQUNIRV9DT0xPUigodW5zaWduZWQgbG9uZylwdGUpOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JKih1bnNpZ25lZCBsb25nICopcHRlID0gKHVuc2lnbmVkIGxvbmcpIHB0ZV9xdWlja2xpc3RbY29sb3JdOwotCXB0ZV9xdWlja2xpc3RbY29sb3JdID0gKHVuc2lnbmVkIGxvbmcgKikgcHRlOwotCXBndGFibGVfY2FjaGVfc2l6ZSsrOwotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZnJlZV9wdGVfc2xvdyhwdGVfdCAqcHRlKQotewotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpCi17Ci0JZnJlZV9wdGVfZmFzdChwdGUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IHBhZ2UgKnB0ZXBhZ2UpCi17Ci0JZnJlZV9wdGVfZmFzdChwYWdlX2FkZHJlc3MocHRlcGFnZSkpOwotfQotCi0jZGVmaW5lIHBtZF9mcmVlKHBtZCkJCWZyZWVfcG1kX2Zhc3QocG1kKQotI2RlZmluZSBwZ2RfZnJlZShwZ2QpCQlmcmVlX3BnZF9mYXN0KHBnZCkKLSNkZWZpbmUgcGdkX2FsbG9jKG1tKQkJZ2V0X3BnZF9mYXN0KCkKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogX1NQQVJDNjRfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCmluZGV4IGYwYTliNDQuLmM0NGU3NDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCkBAIC0yNSw3ICsyNSw4IEBACiAjaW5jbHVkZSA8YXNtL2NvbnN0Lmg+CiAKIC8qIFRoZSBrZXJuZWwgaW1hZ2Ugb2NjdXBpZXMgMHg0MDAwMDAwIHRvIDB4MTAwMDAwMCAoNE1CIC0tPiAzMk1CKS4KLSAqIFRoZSBwYWdlIGNvcHkgYmxvY2tvcHMgY2FuIHVzZSAweDIwMDAwMDAgdG8gMHgxMDAwMDAwMC4KKyAqIFRoZSBwYWdlIGNvcHkgYmxvY2tvcHMgY2FuIHVzZSAweDIwMDAwMDAgdG8gMHg0MDAwMDAwLgorICogVGhlIFRTQiBpcyBtYXBwZWQgaW4gdGhlIDB4NDAwMDAwMCB0byAweDYwMDAwMDAgcmFuZ2UuCiAgKiBUaGUgUFJPTSByZXNpZGVzIGluIGFuIGFyZWEgc3Bhbm5pbmcgMHhmMDAwMDAwMCB0byAweDEwMDAwMDAwMC4KICAqIFRoZSB2bWFsbG9jIGFyZWEgc3BhbnMgMHgxMDAwMDAwMDAgdG8gMHgyMDAwMDAwMDAuCiAgKiBTaW5jZSBtb2R1bGVzIG5lZWQgdG8gYmUgaW4gdGhlIGxvd2VzdCAzMi1iaXRzIG9mIHRoZSBhZGRyZXNzIHNwYWNlLApAQCAtMzQsNiArMzUsNyBAQAogICogMHg0MDAwMDAwMDAuCiAgKi8KICNkZWZpbmUJVExCVEVNUF9CQVNFCQlfQUMoMHgwMDAwMDAwMDAyMDAwMDAwLFVMKQorI2RlZmluZQlUU0JNQVBfQkFTRQkJX0FDKDB4MDAwMDAwMDAwNDAwMDAwMCxVTCkKICNkZWZpbmUgTU9EVUxFU19WQUREUgkJX0FDKDB4MDAwMDAwMDAxMDAwMDAwMCxVTCkKICNkZWZpbmUgTU9EVUxFU19MRU4JCV9BQygweDAwMDAwMDAwZTAwMDAwMDAsVUwpCiAjZGVmaW5lIE1PRFVMRVNfRU5ECQlfQUMoMHgwMDAwMDAwMGYwMDAwMDAwLFVMKQpAQCAtODgsMTMyICs5MCwxMzQgQEAKIAogI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwogCi0vKiBTcGl0ZmlyZS9DaGVldGFoIFRURSBiaXRzLiAqLwotI2RlZmluZSBfUEFHRV9WQUxJRAlfQUMoMHg4MDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBWYWxpZCBUVEUgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1IJCV9BQygweDgwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIEtlZXAgcmVmIGJpdCB1cCB0byBkYXRlKi8KLSNkZWZpbmUgX1BBR0VfU1o0TUIJX0FDKDB4NjAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNE1CIFBhZ2UgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9TWjUxMksJX0FDKDB4NDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNTEySyBQYWdlICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9TWjY0SwlfQUMoMHgyMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiA2NEsgUGFnZSAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NaOEsJX0FDKDB4MDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogOEsgUGFnZSAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9ORk8JX0FDKDB4MTAwMDAwMDAwMDAwMDAwMCxVTCkgLyogTm8gRmF1bHQgT25seSAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9JRQlfQUMoMHgwODAwMDAwMDAwMDAwMDAwLFVMKSAvKiBJbnZlcnQgRW5kaWFubmVzcyAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NPRlQyCV9BQygweDA3RkMwMDAwMDAwMDAwMDAsVUwpIC8qIFNvZnR3YXJlIGJpdHMsIHNldCAyICAgKi8KLSNkZWZpbmUgX1BBR0VfUkVTMQlfQUMoMHgwMDAyMDAwMDAwMDAwMDAwLFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1NaMzJNQglfQUMoMHgwMDAxMDAwMDAwMDAwMDAwLFVMKSAvKiAoUGFudGhlcikgMzJNQiBwYWdlICAgICovCi0jZGVmaW5lIF9QQUdFX1NaMjU2TUIJX0FDKDB4MjAwMTAwMDAwMDAwMDAwMCxVTCkgLyogKFBhbnRoZXIpIDI1Nk1CIHBhZ2UgICAqLwotI2RlZmluZSBfUEFHRV9TTglfQUMoMHgwMDAwODAwMDAwMDAwMDAwLFVMKSAvKiAoQ2hlZXRhaCkgU25vb3AgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX1JFUzIJX0FDKDB4MDAwMDc4MDAwMDAwMDAwMCxVTCkgLyogUmVzZXJ2ZWQgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9QQUREUl9TRglfQUMoMHgwMDAwMDFGRkZGRkZFMDAwLFVMKSAvKiAoU3BpdGZpcmUpIHBhZGRyWzQwOjEzXSovCi0jZGVmaW5lIF9QQUdFX1BBRERSCV9BQygweDAwMDAwN0ZGRkZGRkUwMDAsVUwpIC8qIChDaGVldGFoKSBwYWRkcls0MjoxM10gKi8KLSNkZWZpbmUgX1BBR0VfU09GVAlfQUMoMHgwMDAwMDAwMDAwMDAxRjgwLFVMKSAvKiBTb2Z0d2FyZSBiaXRzICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX0wJCV9BQygweDAwMDAwMDAwMDAwMDAwNDAsVUwpIC8qIExvY2tlZCBUVEUgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfQ1AJX0FDKDB4MDAwMDAwMDAwMDAwMDAyMCxVTCkgLyogQ2FjaGVhYmxlIGluIFAtQ2FjaGUgICAqLwotI2RlZmluZSBfUEFHRV9DVglfQUMoMHgwMDAwMDAwMDAwMDAwMDEwLFVMKSAvKiBDYWNoZWFibGUgaW4gVi1DYWNoZSAgICovCi0jZGVmaW5lIF9QQUdFX0UJCV9BQygweDAwMDAwMDAwMDAwMDAwMDgsVUwpIC8qIHNpZGUtRWZmZWN0ICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfUAkJX0FDKDB4MDAwMDAwMDAwMDAwMDAwNCxVTCkgLyogUHJpdmlsZWdlZCBQYWdlICAgICAgICAqLwotI2RlZmluZSBfUEFHRV9XCQlfQUMoMHgwMDAwMDAwMDAwMDAwMDAyLFVMKSAvKiBXcml0YWJsZSAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQUdFX0cJCV9BQygweDAwMDAwMDAwMDAwMDAwMDEsVUwpIC8qIEdsb2JhbCAgICAgICAgICAgICAgICAgKi8KKy8qIFBURSBiaXRzIHdoaWNoIGFyZSB0aGUgc2FtZSBpbiBTVU40VSBhbmQgU1VONFYgZm9ybWF0LiAgKi8KKyNkZWZpbmUgX1BBR0VfVkFMSUQJICBfQUMoMHg4MDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBWYWxpZCBUVEUgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9SCSAgCSAgX0FDKDB4ODAwMDAwMDAwMDAwMDAwMCxVTCkgLyogS2VlcCByZWYgYml0IHVwdG9kYXRlKi8KIAotLyogSGVyZSBhcmUgdGhlIFNwaXRGaXJlIHNvZnR3YXJlIGJpdHMgd2UgdXNlIGluIHRoZSBUVEUncy4KLSAqCi0gKiBXQVJOSU5HOiBJZiB5b3UgYXJlIGdvaW5nIHRvIHRyeSBhbmQgc3RhcnQgdXNpbmcgc29tZQotICogICAgICAgICAgb2YgdGhlIHNvZnQyIGJpdHMsIHlvdSB3aWxsIG5lZWQgdG8gbWFrZQotICogICAgICAgICAgbW9kaWZpY2F0aW9ucyB0byB0aGUgc3dhcCBlbnRyeSBpbXBsZW1lbnRhdGlvbi4KLSAqCSAgICBGb3IgZXhhbXBsZSwgb25lIHRoaW5nIHRoYXQgY291bGQgaGFwcGVuIGlzIHRoYXQKLSAqICAgICAgICAgIHN3cF9lbnRyeV90b19wdGUoKSB3b3VsZCBCVUdfT04oKSBpZiB5b3UgdHJpZWQKLSAqICAgICAgICAgIHRvIHVzZSBvbmUgb2YgdGhlIHNvZnQyIGJpdHMgZm9yIF9QQUdFX0ZJTEUuCi0gKgotICogTGlrZSBvdGhlciBhcmNoaXRlY3R1cmVzLCBJIGhhdmUgYWxpYXNlZCBfUEFHRV9GSUxFIHdpdGgKLSAqIF9QQUdFX01PRElGSUVELiAgVGhpcyB3b3JrcyBiZWNhdXNlIF9QQUdFX0ZJTEUgaXMgbmV2ZXIKLSAqIGludGVycHJldGVkIHRoYXQgd2F5IHVubGVzcyBfUEFHRV9QUkVTRU5UIGlzIGNsZWFyLgotICovCi0jZGVmaW5lIF9QQUdFX0VYRUMJX0FDKDB4MDAwMDAwMDAwMDAwMTAwMCxVTCkJLyogRXhlY3V0YWJsZSBTVyBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfTU9ESUZJRUQJX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkJLyogTW9kaWZpZWQgKGRpcnR5KSAgKi8KLSNkZWZpbmUgX1BBR0VfRklMRQlfQUMoMHgwMDAwMDAwMDAwMDAwODAwLFVMKQkvKiBQYWdlY2FjaGUgcGFnZSAgICAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAlfQUMoMHgwMDAwMDAwMDAwMDAwNDAwLFVMKQkvKiBBY2Nlc3NlZCAocmVmJ2QpICAqLwotI2RlZmluZSBfUEFHRV9SRUFECV9BQygweDAwMDAwMDAwMDAwMDAyMDAsVUwpCS8qIFJlYWRhYmxlIFNXIEJpdCAgICovCi0jZGVmaW5lIF9QQUdFX1dSSVRFCV9BQygweDAwMDAwMDAwMDAwMDAxMDAsVUwpCS8qIFdyaXRhYmxlIFNXIEJpdCAgICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJX0FDKDB4MDAwMDAwMDAwMDAwMDA4MCxVTCkJLyogUHJlc2VudCAgICAgICAgICAgKi8KKy8qIFNVTjRVIHB0ZSBiaXRzLi4uICovCisjZGVmaW5lIF9QQUdFX1NaNE1CXzRVCSAgX0FDKDB4NjAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNE1CIFBhZ2UgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1o1MTJLXzRVCSAgX0FDKDB4NDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogNTEySyBQYWdlICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1o2NEtfNFUJICBfQUMoMHgyMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiA2NEsgUGFnZSAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjhLXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwMCxVTCkgLyogOEsgUGFnZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfTkZPXzRVCSAgX0FDKDB4MTAwMDAwMDAwMDAwMDAwMCxVTCkgLyogTm8gRmF1bHQgT25seSAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfSUVfNFUJICBfQUMoMHgwODAwMDAwMDAwMDAwMDAwLFVMKSAvKiBJbnZlcnQgRW5kaWFubmVzcyAgICAqLworI2RlZmluZSBfUEFHRV9TT0ZUMl80VQkgIF9BQygweDA3RkMwMDAwMDAwMDAwMDAsVUwpIC8qIFNvZnR3YXJlIGJpdHMsIHNldCAyICovCisjZGVmaW5lIF9QQUdFX1JFUzFfNFUJICBfQUMoMHgwMDAyMDAwMDAwMDAwMDAwLFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjMyTUJfNFUJICBfQUMoMHgwMDAxMDAwMDAwMDAwMDAwLFVMKSAvKiAoUGFudGhlcikgMzJNQiBwYWdlICAqLworI2RlZmluZSBfUEFHRV9TWjI1Nk1CXzRVICBfQUMoMHgyMDAxMDAwMDAwMDAwMDAwLFVMKSAvKiAoUGFudGhlcikgMjU2TUIgcGFnZSAqLworI2RlZmluZSBfUEFHRV9TWkFMTF80VQkgIF9BQygweDYwMDEwMDAwMDAwMDAwMDAsVUwpIC8qIEFsbCBwZ3N6IGJpdHMgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NOXzRVCSAgX0FDKDB4MDAwMDgwMDAwMDAwMDAwMCxVTCkgLyogKENoZWV0YWgpIFNub29wICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVTMl80VQkgIF9BQygweDAwMDA3ODAwMDAwMDAwMDAsVUwpIC8qIFJlc2VydmVkICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1BBRERSXzRVCSAgX0FDKDB4MDAwMDA3RkZGRkZGRTAwMCxVTCkgLyogKENoZWV0YWgpIHBhWzQyOjEzXSAgKi8KKyNkZWZpbmUgX1BBR0VfU09GVF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDFGODAsVUwpIC8qIFNvZnR3YXJlIGJpdHM6ICAgICAgICovCisjZGVmaW5lIF9QQUdFX0VYRUNfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAxMDAwLFVMKSAvKiBFeGVjdXRhYmxlIFNXIGJpdCAgICAqLworI2RlZmluZSBfUEFHRV9NT0RJRklFRF80VSBfQUMoMHgwMDAwMDAwMDAwMDAwODAwLFVMKSAvKiBNb2RpZmllZCAoZGlydHkpICAgICAqLworI2RlZmluZSBfUEFHRV9GSUxFXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogUGFnZWNhY2hlIHBhZ2UgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRURfNFUgX0FDKDB4MDAwMDAwMDAwMDAwMDQwMCxVTCkgLyogQWNjZXNzZWQgKHJlZidkKSAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVBRF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAyMDAsVUwpIC8qIFJlYWRhYmxlIFNXIEJpdCAgICAgICovCisjZGVmaW5lIF9QQUdFX1dSSVRFXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDEwMCxVTCkgLyogV3JpdGFibGUgU1cgQml0ICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVF80VSAgX0FDKDB4MDAwMDAwMDAwMDAwMDA4MCxVTCkgLyogUHJlc2VudCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfTF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAwNDAsVUwpIC8qIExvY2tlZCBUVEUgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX0NQXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAyMCxVTCkgLyogQ2FjaGVhYmxlIGluIFAtQ2FjaGUgKi8KKyNkZWZpbmUgX1BBR0VfQ1ZfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDEwLFVMKSAvKiBDYWNoZWFibGUgaW4gVi1DYWNoZSAqLworI2RlZmluZSBfUEFHRV9FXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwOCxVTCkgLyogc2lkZS1FZmZlY3QgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUF80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDQsVUwpIC8qIFByaXZpbGVnZWQgUGFnZSAgICAgICovCisjZGVmaW5lIF9QQUdFX1dfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAyLFVMKSAvKiBXcml0YWJsZSAgICAgICAgICAgICAqLworCisvKiBTVU40ViBwdGUgYml0cy4uLiAqLworI2RlZmluZSBfUEFHRV9ORk9fNFYJICBfQUMoMHg0MDAwMDAwMDAwMDAwMDAwLFVMKSAvKiBObyBGYXVsdCBPbmx5ICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TT0ZUMl80VgkgIF9BQygweDNGMDAwMDAwMDAwMDAwMDAsVUwpIC8qIFNvZnR3YXJlIGJpdHMsIHNldCAyICovCisjZGVmaW5lIF9QQUdFX01PRElGSUVEXzRWIF9BQygweDIwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIE1vZGlmaWVkIChkaXJ0eSkgICAgICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEXzRWIF9BQygweDEwMDAwMDAwMDAwMDAwMDAsVUwpIC8qIEFjY2Vzc2VkIChyZWYnZCkgICAgICovCisjZGVmaW5lIF9QQUdFX1JFQURfNFYJICBfQUMoMHgwODAwMDAwMDAwMDAwMDAwLFVMKSAvKiBSZWFkYWJsZSBTVyBCaXQgICAgICAqLworI2RlZmluZSBfUEFHRV9XUklURV80VgkgIF9BQygweDA0MDAwMDAwMDAwMDAwMDAsVUwpIC8qIFdyaXRhYmxlIFNXIEJpdCAgICAgICovCisjZGVmaW5lIF9QQUdFX1BBRERSXzRWCSAgX0FDKDB4MDBGRkZGRkZGRkZGRTAwMCxVTCkgLyogcGFkZHJbNTU6MTNdICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfSUVfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAxMDAwLFVMKSAvKiBJbnZlcnQgRW5kaWFubmVzcyAgICAqLworI2RlZmluZSBfUEFHRV9FXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogc2lkZS1FZmZlY3QgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfQ1BfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwNDAwLFVMKSAvKiBDYWNoZWFibGUgaW4gUC1DYWNoZSAqLworI2RlZmluZSBfUEFHRV9DVl80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAyMDAsVUwpIC8qIENhY2hlYWJsZSBpbiBWLUNhY2hlICovCisjZGVmaW5lIF9QQUdFX1BfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMTAwLFVMKSAvKiBQcml2aWxlZ2VkIFBhZ2UgICAgICAqLworI2RlZmluZSBfUEFHRV9FWEVDXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDA4MCxVTCkgLyogRXhlY3V0YWJsZSBQYWdlICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfV180VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwNDAsVUwpIC8qIFdyaXRhYmxlICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NPRlRfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDMwLFVMKSAvKiBTb2Z0d2FyZSBiaXRzICAgICAgICAqLworI2RlZmluZSBfUEFHRV9GSUxFXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAyMCxVTCkgLyogUGFnZWNhY2hlIHBhZ2UgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVF80ViAgX0FDKDB4MDAwMDAwMDAwMDAwMDAxMCxVTCkgLyogUHJlc2VudCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfUkVTVl80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDgsVUwpIC8qIFJlc2VydmVkICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NaMTZHQl80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDcsVUwpIC8qIDE2R0IgUGFnZSAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NaMkdCXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwNixVTCkgLyogMkdCIFBhZ2UgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1oyNTZNQl80ViAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwNSxVTCkgLyogMjU2TUIgUGFnZSAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1ozMk1CXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAwNCxVTCkgLyogMzJNQiBQYWdlICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BBR0VfU1o0TUJfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAzLFVMKSAvKiA0TUIgUGFnZSAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjUxMktfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAyLFVMKSAvKiA1MTJLIFBhZ2UgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWjY0S180VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDEsVUwpIC8qIDY0SyBQYWdlICAgICAgICAgICAgICovCisjZGVmaW5lIF9QQUdFX1NaOEtfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDAwLFVMKSAvKiA4SyBQYWdlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUEFHRV9TWkFMTF80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMDcsVUwpIC8qIEFsbCBwZ3N6IGJpdHMgICAgICAgICovCiAKICNpZiBQQUdFX1NISUZUID09IDEzCi0jZGVmaW5lIF9QQUdFX1NaQklUUwlfUEFHRV9TWjhLCisjZGVmaW5lIF9QQUdFX1NaQklUU180VQlfUEFHRV9TWjhLXzRVCisjZGVmaW5lIF9QQUdFX1NaQklUU180VglfUEFHRV9TWjhLXzRWCiAjZWxpZiBQQUdFX1NISUZUID09IDE2Ci0jZGVmaW5lIF9QQUdFX1NaQklUUwlfUEFHRV9TWjY0SworI2RlZmluZSBfUEFHRV9TWkJJVFNfNFUJX1BBR0VfU1o2NEtfNFUKKyNkZWZpbmUgX1BBR0VfU1pCSVRTXzRWCV9QQUdFX1NaNjRLXzRWCiAjZWxpZiBQQUdFX1NISUZUID09IDE5Ci0jZGVmaW5lIF9QQUdFX1NaQklUUwlfUEFHRV9TWjUxMksKKyNkZWZpbmUgX1BBR0VfU1pCSVRTXzRVCV9QQUdFX1NaNTEyS180VQorI2RlZmluZSBfUEFHRV9TWkJJVFNfNFYJX1BBR0VfU1o1MTJLXzRWCiAjZWxpZiBQQUdFX1NISUZUID09IDIyCi0jZGVmaW5lIF9QQUdFX1NaQklUUwlfUEFHRV9TWjRNQgorI2RlZmluZSBfUEFHRV9TWkJJVFNfNFUJX1BBR0VfU1o0TUJfNFUKKyNkZWZpbmUgX1BBR0VfU1pCSVRTXzRWCV9QQUdFX1NaNE1CXzRWCiAjZWxzZQogI2Vycm9yIFdyb25nIFBBR0VfU0hJRlQgc3BlY2lmaWVkCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQikKLSNkZWZpbmUgX1BBR0VfU1pIVUdFCV9QQUdFX1NaNE1CCisjZGVmaW5lIF9QQUdFX1NaSFVHRV80VQlfUEFHRV9TWjRNQl80VQorI2RlZmluZSBfUEFHRV9TWkhVR0VfNFYJX1BBR0VfU1o0TUJfNFYKICNlbGlmIGRlZmluZWQoQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMkspCi0jZGVmaW5lIF9QQUdFX1NaSFVHRQlfUEFHRV9TWjUxMksKKyNkZWZpbmUgX1BBR0VfU1pIVUdFXzRVCV9QQUdFX1NaNTEyS180VQorI2RlZmluZSBfUEFHRV9TWkhVR0VfNFYJX1BBR0VfU1o1MTJLXzRWCiAjZWxpZiBkZWZpbmVkKENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NEspCi0jZGVmaW5lIF9QQUdFX1NaSFVHRQlfUEFHRV9TWjY0SworI2RlZmluZSBfUEFHRV9TWkhVR0VfNFUJX1BBR0VfU1o2NEtfNFUKKyNkZWZpbmUgX1BBR0VfU1pIVUdFXzRWCV9QQUdFX1NaNjRLXzRWCiAjZW5kaWYKIAotI2RlZmluZSBfUEFHRV9DQUNIRQkoX1BBR0VfQ1AgfCBfUEFHRV9DVikKKy8qIFRoZXNlIGFyZSBhY3R1YWxseSBmaWxsZWQgaW4gYXQgYm9vdCB0aW1lIGJ5IHN1bjR7dSx2fV9wZ3Byb3RfaW5pdCgpICovCisjZGVmaW5lIF9fUDAwMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1AwMDEJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMDEwCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUDAxMQlfX3BncHJvdCgwKQorI2RlZmluZSBfX1AxMDAJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19QMTAxCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUDExMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1AxMTEJX19wZ3Byb3QoMCkKIAotI2RlZmluZSBfX0RJUlRZX0JJVFMJKF9QQUdFX01PRElGSUVEIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9XKQotI2RlZmluZSBfX0FDQ0VTU19CSVRTCShfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9SKQotI2RlZmluZSBfX1BSSVZfQklUUwlfUEFHRV9QCi0KLSNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9DQUNIRSkKLQotLyogRG9uJ3Qgc2V0IHRoZSBUVEUgX1BBR0VfVyBiaXQgaGVyZSwgZWxzZSB0aGUgZGlydHkgYml0IG5ldmVyIGdldHMgc2V0LiAqLwotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdCAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1ZBTElEIHwgX1BBR0VfQ0FDSEUgfCBcCi0JCQkJICBfX0FDQ0VTU19CSVRTIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9FWEVDKQotCi0jZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdCAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1ZBTElEIHwgX1BBR0VfQ0FDSEUgfCBcCi0JCQkJICBfX0FDQ0VTU19CSVRTIHwgX1BBR0VfRVhFQykKLQotI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVkFMSUQgfCBfUEFHRV9DQUNIRSB8IFwKLQkJCQkgIF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9FWEVDKQotCi0jZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVkFMSUQgfCBfUEFHRV9DQUNIRSB8IFwKLQkJCQkgIF9fUFJJVl9CSVRTIHwgXAotCQkJCSAgX19BQ0NFU1NfQklUUyB8IF9fRElSVFlfQklUUyB8IF9QQUdFX0VYRUMpCi0KLSNkZWZpbmUgUEFHRV9TSEFSRURfTk9FWEVDCV9fcGdwcm90IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVkFMSUQgfCBcCi0JCQkJCSAgX1BBR0VfQ0FDSEUgfCBcCi0JCQkJCSAgX19BQ0NFU1NfQklUUyB8IF9QQUdFX1dSSVRFKQotCi0jZGVmaW5lIFBBR0VfQ09QWV9OT0VYRUMJX19wZ3Byb3QgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9WQUxJRCB8IFwKLQkJCQkJICBfUEFHRV9DQUNIRSB8IF9fQUNDRVNTX0JJVFMpCi0KLSNkZWZpbmUgUEFHRV9SRUFET05MWV9OT0VYRUMJX19wZ3Byb3QgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9WQUxJRCB8IFwKLQkJCQkJICBfUEFHRV9DQUNIRSB8IF9fQUNDRVNTX0JJVFMpCi0KLSNkZWZpbmUgX1BGTl9NQVNLCV9QQUdFX1BBRERSCi0KLSNkZWZpbmUgcGdfaW9iaXRzIChfUEFHRV9WQUxJRCB8IF9QQUdFX1BSRVNFTlQgfCBfX0RJUlRZX0JJVFMgfCBcCi0JCSAgIF9fQUNDRVNTX0JJVFMgfCBfUEFHRV9FKQotCi0jZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFlfTk9FWEVDCi0jZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFlfTk9FWEVDCi0jZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFlfTk9FWEVDCi0jZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDExMAlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMTExCVBBR0VfQ09QWQotCi0jZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFlfTk9FWEVDCi0jZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRF9OT0VYRUMKLSNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVEX05PRVhFQwotI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAwMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MwMDEJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMDEwCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzAxMQlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MxMDAJX19wZ3Byb3QoMCkKKyNkZWZpbmUgX19TMTAxCV9fcGdwcm90KDApCisjZGVmaW5lIF9fUzExMAlfX3BncHJvdCgwKQorI2RlZmluZSBfX1MxMTEJX19wZ3Byb3QoMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGZuX2Jhc2U7CitleHRlcm4gcHRlX3QgbWtfcHRlX2lvKHVuc2lnbmVkIGxvbmcsIHBncHJvdF90LCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBwdGVfc3pfYml0cyh1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gcGdwcm90X3QgUEFHRV9LRVJORUw7CitleHRlcm4gcGdwcm90X3QgUEFHRV9LRVJORUxfTE9DS0VEOworZXh0ZXJuIHBncHJvdF90IFBBR0VfQ09QWTsKK2V4dGVybiBwZ3Byb3RfdCBQQUdFX1NIQVJFRDsKKworLyogWFhYIFRoaXMgdWdseW5lc3MgaXMgZm9yIHRoZSBhdHlmYiBkcml2ZXIncyBzcGFyYyBtbWFwKCkgc3VwcG9ydC4gWFhYICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBfUEFHRV9JRTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9QQUdFX0U7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfUEFHRV9DQUNIRTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGdfaW9iaXRzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX1BBR0VfQUxMX1NaX0JJVFM7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfUEFHRV9TWkJJVFM7CiAKIGV4dGVybiBzdHJ1Y3QgcGFnZSAqbWVtX21hcF96ZXJvOwogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpCShtZW1fbWFwX3plcm8pCkBAIC0yMjMsMjcgKzIyNyw0MDMgQEAKICAqIHRoZSBmaXJzdCBwaHlzaWNhbCBwYWdlIGluIHRoZSBtYWNoaW5lIGlzIGF0IHNvbWUgaHVnZSBwaHlzaWNhbCBhZGRyZXNzLAogICogc3VjaCBhcyA0R0IuICAgVGhpcyBpcyBjb21tb24gb24gYSBwYXJ0aXRpb25lZCBFMTAwMDAsIGZvciBleGFtcGxlLgogICovCitzdGF0aWMgaW5saW5lIHB0ZV90IHBmbl9wdGUodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHByb3QpCit7CisJdW5zaWduZWQgbG9uZyBwYWRkciA9IHBmbiA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgc3pfYml0czsKIAotI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJXAotCV9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9TWkJJVFMpCisJc3pfYml0cyA9IDBVTDsKKwlpZiAoX1BBR0VfU1pCSVRTXzRVICE9IDBVTCB8fCBfUEFHRV9TWkJJVFNfNFYgIT0gMFVMKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiXG42NjE6CXNldGhpCQkldWhpKCUxKSwgJTBcbiIKKwkJIglzbGx4CQklMCwgMzIsICUwXG4iCisJCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkJIgkud29yZAkJNjYxYlxuIgorCQkiCW1vdgkJJTIsICUwXG4iCisJCSIJbm9wXG4iCisJCSIJLnByZXZpb3VzXG4iCisJCTogIj1yIiAoc3pfYml0cykKKwkJOiAiaSIgKF9QQUdFX1NaQklUU180VSksICJpIiAoX1BBR0VfU1pCSVRTXzRWKSk7CisJfQorCXJldHVybiBfX3B0ZShwYWRkciB8IHN6X2JpdHMgfCBwZ3Byb3RfdmFsKHByb3QpKTsKK30KICNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCiAKLSNkZWZpbmUgcHRlX3Bmbih4KQkJKChwdGVfdmFsKHgpICYgX1BBR0VfUEFERFIpPj5QQUdFX1NISUZUKQotI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IG9yaWdfcHRlLCBwZ3Byb3RfdCBuZXdfcHJvdCkKKy8qIFRoaXMgb25lIGNhbiBiZSBkb25lIHdpdGggdHdvIHNoaWZ0cy4gICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3BmbihwdGVfdCBwdGUpCiB7Ci0JcHRlX3QgX19wdGU7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBwcmVzZXJ2ZV9tYXNrID0gKF9QRk5fTUFTSyB8Ci0JCQkJCSAgICAgX1BBR0VfTU9ESUZJRUQgfCBfUEFHRV9BQ0NFU1NFRCB8Ci0JCQkJCSAgICAgX1BBR0VfQ0FDSEUgfCBfUEFHRV9FIHwKLQkJCQkJICAgICBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfU1pCSVRTKTsKKwl1bnNpZ25lZCBsb25nIHJldDsKIAotCXB0ZV92YWwoX19wdGUpID0gKHB0ZV92YWwob3JpZ19wdGUpICYgcHJlc2VydmVfbWFzaykgfAotCQkocGdwcm90X3ZhbChuZXdfcHJvdCkgJiB+cHJlc2VydmVfbWFzayk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOglzbGx4CQklMSwgJTIsICUwXG4iCisJIglzcmx4CQklMCwgJTMsICUwXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCXNsbHgJCSUxLCAlNCwgJTBcbiIKKwkiCXNybHgJCSUwLCAlNSwgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAocmV0KQorCTogInIiIChwdGVfdmFsKHB0ZSkpLAorCSAgImkiICgyMSksICJpIiAoMjEgKyBQQUdFX1NISUZUKSwKKwkgICJpIiAoOCksICJpIiAoOCArIFBBR0VfU0hJRlQpKTsKIAotCXJldHVybiBfX3B0ZTsKKwlyZXR1cm4gcmV0OwogfQorI2RlZmluZSBwdGVfcGFnZSh4KSBwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBwcm90KQoreworCXVuc2lnbmVkIGxvbmcgbWFzaywgdG1wOworCisJLyogU1VONFU6IDB4NjAwMzA3ZmZmZmZmZWNiOCAobmVnYXRlZCA9PSAweDlmZmNmODAwMDAwMDEzNDcpCisJICogU1VONFY6IDB4MzBmZmZmZmZmZmZmZWUxNyAobmVnYXRlZCA9PSAweGNmMDAwMDAwMDAwMDExZTgpCisJICoKKwkgKiBFdmVuIGlmIHdlIHVzZSBuZWdhdGlvbiB0cmlja3MgdGhlIHJlc3VsdCBpcyBzdGlsbCBhIDYKKwkgKiBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgc28gZG9uJ3QgdHJ5IHRvIHBsYXkgZmFuY3kgYW5kIGp1c3QKKwkgKiBkbyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24uCisJICoKKwkgKiBOb3RlOiBXZSBlbmNvZGUgdGhpcyBpbnRvIDMgc3VuNHYgMi1pbnNuIHBhdGNoIHNlcXVlbmNlcy4KKwkgKi8KKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJc2V0aGkJCSUldWhpKCUyKSwgJTFcbiIKKwkiCXNldGhpCQklJWhpKCUyKSwgJTBcbiIKKwkiXG42NjI6CW9yCQklMSwgJSV1bG8oJTIpLCAlMVxuIgorCSIJb3IJCSUwLCAlJWxvKCUyKSwgJTBcbiIKKwkiXG42NjM6CXNsbHgJCSUxLCAzMiwgJTFcbiIKKwkiCW9yCQklMCwgJTEsICUwXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCXNldGhpCQklJXVoaSglMyksICUxXG4iCisJIglzZXRoaQkJJSVoaSglMyksICUwXG4iCisJIgkud29yZAkJNjYyYlxuIgorCSIJb3IJCSUxLCAlJXVsbyglMyksICUxXG4iCisJIglvcgkJJTAsICUlbG8oJTMpLCAlMFxuIgorCSIJLndvcmQJCTY2M2JcbiIKKwkiCXNsbHgJCSUxLCAzMiwgJTFcbiIKKwkiCW9yCQklMCwgJTEsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKG1hc2spLCAiPXIiICh0bXApCisJOiAiaSIgKF9QQUdFX1BBRERSXzRVIHwgX1BBR0VfTU9ESUZJRURfNFUgfCBfUEFHRV9BQ0NFU1NFRF80VSB8CisJICAgICAgIF9QQUdFX0NQXzRVIHwgX1BBR0VfQ1ZfNFUgfCBfUEFHRV9FXzRVIHwgX1BBR0VfUFJFU0VOVF80VSB8CisJICAgICAgIF9QQUdFX1NaQklUU180VSksCisJICAiaSIgKF9QQUdFX1BBRERSXzRWIHwgX1BBR0VfTU9ESUZJRURfNFYgfCBfUEFHRV9BQ0NFU1NFRF80ViB8CisJICAgICAgIF9QQUdFX0NQXzRWIHwgX1BBR0VfQ1ZfNFYgfCBfUEFHRV9FXzRWIHwgX1BBR0VfUFJFU0VOVF80ViB8CisJICAgICAgIF9QQUdFX1NaQklUU180VikpOworCisJcmV0dXJuIF9fcHRlKChwdGVfdmFsKHB0ZSkgJiBtYXNrKSB8IChwZ3Byb3RfdmFsKHByb3QpICYgfm1hc2spKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwZ29mZl90b19wdGUodW5zaWduZWQgbG9uZyBvZmYpCit7CisJb2ZmIDw8PSBQQUdFX1NISUZUOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOglvcgkJJTAsICUyLCAlMFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglvcgkJJTAsICUzLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChvZmYpCisJOiAiMCIgKG9mZiksICJpIiAoX1BBR0VfRklMRV80VSksICJpIiAoX1BBR0VfRklMRV80VikpOworCisJcmV0dXJuIF9fcHRlKG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcGdwcm90X25vbmNhY2hlZChwZ3Byb3RfdCBwcm90KQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gcGdwcm90X3ZhbChwcm90KTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJYW5kbgkJJTAsICUyLCAlMFxuIgorCSIJb3IJCSUwLCAlMywgJTBcbiIKKwkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCisJIgkud29yZAkJNjYxYlxuIgorCSIJYW5kbgkJJTAsICU0LCAlMFxuIgorCSIJb3IJCSUwLCAlMywgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAodmFsKQorCTogIjAiICh2YWwpLCAiaSIgKF9QQUdFX0NQXzRVIHwgX1BBR0VfQ1ZfNFUpLCAiaSIgKF9QQUdFX0VfNFUpLAorCSAgICAgICAgICAgICAiaSIgKF9QQUdFX0NQXzRWIHwgX1BBR0VfQ1ZfNFYpLCAiaSIgKF9QQUdFX0VfNFYpKTsKKworCXJldHVybiBfX3BncHJvdCh2YWwpOworfQorLyogVmFyaW91cyBwaWVjZXMgb2YgY29kZSBjaGVjayBmb3IgcGxhdGZvcm0gc3VwcG9ydCBieSBpZmRlZiB0ZXN0aW5nCisgKiBvbiAicGdwcm90X25vbmNhY2hlZCIuICBUaGF0J3MgYnJva2VuIGFuZCBzaG91bGQgYmUgZml4ZWQsIGJ1dCBmb3IKKyAqIG5vdy4uLgorICovCisjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQgcGdwcm90X25vbmNhY2hlZAorCisjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CXNldGhpCQklJXVoaSglMSksICUwXG4iCisJIglzbGx4CQklMCwgMzIsICUwXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCW1vdgkJJTIsICUwXG4iCisJIglub3BcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAobWFzaykKKwk6ICJpIiAoX1BBR0VfU1pIVUdFXzRVKSwgImkiIChfUEFHRV9TWkhVR0VfNFYpKTsKKworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBtYXNrKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKSwgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOglvcgkJJTAsICUzLCAlMFxuIgorCSIJbm9wXG4iCisJIlxuNjYyOglub3BcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTQpLCAlMVxuIgorCSIJc2xseAkJJTEsIDMyLCAlMVxuIgorCSIJLndvcmQJCTY2MmJcbiIKKwkiCW9yCQklMSwgJSVsbyglNCksICUxXG4iCisJIglvcgkJJTAsICUxLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiICh2YWwpLCAiPXIiICh0bXApCisJOiAiMCIgKHZhbCksICJpIiAoX1BBR0VfTU9ESUZJRURfNFUgfCBfUEFHRV9XXzRVKSwKKwkgICJpIiAoX1BBR0VfTU9ESUZJRURfNFYgfCBfUEFHRV9XXzRWKSk7CisKKwlyZXR1cm4gX19wdGUodmFsKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsKHB0ZSksIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJYW5kbgkJJTAsICUzLCAlMFxuIgorCSIJbm9wXG4iCisJIlxuNjYyOglub3BcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTQpLCAlMVxuIgorCSIJc2xseAkJJTEsIDMyLCAlMVxuIgorCSIJLndvcmQJCTY2MmJcbiIKKwkiCW9yCQklMSwgJSVsbyglNCksICUxXG4iCisJIglhbmRuCQklMCwgJTEsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKHZhbCksICI9ciIgKHRtcCkKKwk6ICIwIiAodmFsKSwgImkiIChfUEFHRV9NT0RJRklFRF80VSB8IF9QQUdFX1dfNFUpLAorCSAgImkiIChfUEFHRV9NT0RJRklFRF80ViB8IF9QQUdFX1dfNFYpKTsKKworCXJldHVybiBfX3B0ZSh2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKSwgbWFzazsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJbW92CQklMSwgJTBcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgorCSIJc2xseAkJJTAsIDMyLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChtYXNrKQorCTogImkiIChfUEFHRV9XUklURV80VSksICJpIiAoX1BBR0VfV1JJVEVfNFYpKTsKKworCXJldHVybiBfX3B0ZSh2YWwgfCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKSwgdG1wOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOglhbmRuCQklMCwgJTMsICUwXG4iCisJIglub3BcbiIKKwkiXG42NjI6CW5vcFxuIgorCSIJbm9wXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCXNldGhpCQklJXVoaSglNCksICUxXG4iCisJIglzbGx4CQklMSwgMzIsICUxXG4iCisJIgkud29yZAkJNjYyYlxuIgorCSIJb3IJCSUxLCAlJWxvKCU0KSwgJTFcbiIKKwkiCWFuZG4JCSUwLCAlMSwgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAodmFsKSwgIj1yIiAodG1wKQorCTogIjAiICh2YWwpLCAiaSIgKF9QQUdFX1dSSVRFXzRVIHwgX1BBR0VfV180VSksCisJICAiaSIgKF9QQUdFX1dSSVRFXzRWIHwgX1BBR0VfV180VikpOworCisJcmV0dXJuIF9fcHRlKHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CW1vdgkJJTEsICUwXG4iCisJIglub3BcbiIKKwkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCisJIgkud29yZAkJNjYxYlxuIgorCSIJc2V0aGkJCSUldWhpKCUyKSwgJTBcbiIKKwkiCXNsbHgJCSUwLCAzMiwgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAobWFzaykKKwk6ICJpIiAoX1BBR0VfQUNDRVNTRURfNFUpLCAiaSIgKF9QQUdFX0FDQ0VTU0VEXzRWKSk7CisKKwltYXNrIHw9IF9QQUdFX1I7CisKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpICYgfm1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3lvdW5nKHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CW1vdgkJJTEsICUwXG4iCisJIglub3BcbiIKKwkiCS5zZWN0aW9uCS5zdW40dl8yaW5zbl9wYXRjaCwgXCJheFwiXG4iCisJIgkud29yZAkJNjYxYlxuIgorCSIJc2V0aGkJCSUldWhpKCUyKSwgJTBcbiIKKwkiCXNsbHgJCSUwLCAzMiwgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAobWFzaykKKwk6ICJpIiAoX1BBR0VfQUNDRVNTRURfNFUpLCAiaSIgKF9QQUdFX0FDQ0VTU0VEXzRWKSk7CisKKwltYXNrIHw9IF9QQUdFX1I7CisKKwlyZXR1cm4gX19wdGUocHRlX3ZhbChwdGUpIHwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfeW91bmcocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJbW92CQklMSwgJTBcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgorCSIJc2xseAkJJTAsIDMyLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChtYXNrKQorCTogImkiIChfUEFHRV9BQ0NFU1NFRF80VSksICJpIiAoX1BBR0VfQUNDRVNTRURfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfZGlydHkocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJbW92CQklMSwgJTBcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgorCSIJc2xseAkJJTAsIDMyLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChtYXNrKQorCTogImkiIChfUEFHRV9NT0RJRklFRF80VSksICJpIiAoX1BBR0VfTU9ESUZJRURfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfd3JpdGUocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSJcbjY2MToJbW92CQklMSwgJTBcbiIKKwkiCW5vcFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglzZXRoaQkJJSV1aGkoJTIpLCAlMFxuIgorCSIJc2xseAkJJTAsIDMyLCAlMFxuIgorCSIJLnByZXZpb3VzXG4iCisJOiAiPXIiIChtYXNrKQorCTogImkiIChfUEFHRV9XUklURV80VSksICJpIiAoX1BBR0VfV1JJVEVfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfZXhlYyhwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOglzZXRoaQkJJSVoaSglMSksICUwXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCW1vdgkJJTIsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKG1hc2spCisJOiAiaSIgKF9QQUdFX0VYRUNfNFUpLCAiaSIgKF9QQUdFX0VYRUNfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcmVhZChwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIlxuNjYxOgltb3YJCSUxLCAlMFxuIgorCSIJbm9wXG4iCisJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgorCSIJLndvcmQJCTY2MWJcbiIKKwkiCXNldGhpCQklJXVoaSglMiksICUwXG4iCisJIglzbGx4CQklMCwgMzIsICUwXG4iCisJIgkucHJldmlvdXNcbiIKKwk6ICI9ciIgKG1hc2spCisJOiAiaSIgKF9QQUdFX1JFQURfNFUpLCAiaSIgKF9QQUdFX1JFQURfNFYpKTsKKworCXJldHVybiAocHRlX3ZhbChwdGUpICYgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfZmlsZShwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsKHB0ZSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CWFuZAkJJTAsICUyLCAlMFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglhbmQJCSUwLCAlMywgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAodmFsKQorCTogIjAiICh2YWwpLCAiaSIgKF9QQUdFX0ZJTEVfNFUpLCAiaSIgKF9QQUdFX0ZJTEVfNFYpKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcHJlc2VudChwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBwdGVfdmFsKHB0ZSk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiXG42NjE6CWFuZAkJJTAsICUyLCAlMFxuIgorCSIJLnNlY3Rpb24JLnN1bjR2XzFpbnNuX3BhdGNoLCBcImF4XCJcbiIKKwkiCS53b3JkCQk2NjFiXG4iCisJIglhbmQJCSUwLCAlMywgJTBcbiIKKwkiCS5wcmV2aW91c1xuIgorCTogIj1yIiAodmFsKQorCTogIjAiICh2YWwpLCAiaSIgKF9QQUdFX1BSRVNFTlRfNFUpLCAiaSIgKF9QQUdFX1BSRVNFTlRfNFYpKTsKKworCXJldHVybiB2YWw7Cit9CisKICNkZWZpbmUgcG1kX3NldChwbWRwLCBwdGVwKQlcCiAJKHBtZF92YWwoKihwbWRwKSkgPSAoX19wYSgodW5zaWduZWQgbG9uZykgKHB0ZXApKSA+PiAxMVVMKSkKICNkZWZpbmUgcHVkX3NldChwdWRwLCBwbWRwKQlcCkBAIC0yNTMsOCArNjMzLDYgQEAKICNkZWZpbmUgcG1kX3BhZ2UocG1kKSAJCQl2aXJ0X3RvX3BhZ2UoKHZvaWQgKilfX3BtZF9wYWdlKHBtZCkpCiAjZGVmaW5lIHB1ZF9wYWdlKHB1ZCkJCVwKIAkoKHVuc2lnbmVkIGxvbmcpIF9fdmEoKCgodW5zaWduZWQgbG9uZylwdWRfdmFsKHB1ZCkpPDwxMVVMKSkpCi0jZGVmaW5lIHB0ZV9ub25lKHB0ZSkgCQkJKCFwdGVfdmFsKHB0ZSkpCi0jZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQogI2RlZmluZSBwbWRfbm9uZShwbWQpCQkJKCFwbWRfdmFsKHBtZCkpCiAjZGVmaW5lIHBtZF9iYWQocG1kKQkJCSgwKQogI2RlZmluZSBwbWRfcHJlc2VudChwbWQpCQkocG1kX3ZhbChwbWQpICE9IDBVKQpAQCAtMjY0LDMwICs2NDIsOCBAQAogI2RlZmluZSBwdWRfcHJlc2VudChwdWQpCQkocHVkX3ZhbChwdWQpICE9IDBVKQogI2RlZmluZSBwdWRfY2xlYXIocHVkcCkJCQkocHVkX3ZhbCgqKHB1ZHApKSA9IDBVKQogCi0vKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCi0gKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCi0gKi8KLSNkZWZpbmUgcHRlX3JlYWQocHRlKQkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1JFQUQpCi0jZGVmaW5lIHB0ZV9leGVjKHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9FWEVDKQotI2RlZmluZSBwdGVfd3JpdGUocHRlKQkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1dSSVRFKQotI2RlZmluZSBwdGVfZGlydHkocHRlKQkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX01PRElGSUVEKQotI2RlZmluZSBwdGVfeW91bmcocHRlKQkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEKQotI2RlZmluZSBwdGVfd3Jwcm90ZWN0KHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSAmIH4oX1BBR0VfV1JJVEV8X1BBR0VfVykpKQotI2RlZmluZSBwdGVfcmRwcm90ZWN0KHB0ZSkJXAotCShfX3B0ZSgoKHB0ZV92YWwocHRlKTw8MVVMKT4+MVVMKSAmIH5fUEFHRV9SRUFEKSkKLSNkZWZpbmUgcHRlX21rY2xlYW4ocHRlKQlcCi0JKF9fcHRlKHB0ZV92YWwocHRlKSAmIH4oX1BBR0VfTU9ESUZJRUR8X1BBR0VfVykpKQotI2RlZmluZSBwdGVfbWtvbGQocHRlKQkJXAotCShfX3B0ZSgoKHB0ZV92YWwocHRlKTw8MVVMKT4+MVVMKSAmIH5fUEFHRV9BQ0NFU1NFRCkpCi0KLS8qIFBlcm1hbmVudCBhZGRyZXNzIG9mIGEgcGFnZS4gKi8KLSNkZWZpbmUgX19wYWdlX2FkZHJlc3MocGFnZSkJcGFnZV9hZGRyZXNzKHBhZ2UpCi0KLS8qIEJlIHZlcnkgY2FyZWZ1bCB3aGVuIHlvdSBjaGFuZ2UgdGhlc2UgdGhyZWUsIHRoZXkgYXJlIGRlbGljYXRlLiAqLwotI2RlZmluZSBwdGVfbWt5b3VuZyhwdGUpCShfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1IpKQotI2RlZmluZSBwdGVfbWt3cml0ZShwdGUpCShfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9XUklURSkpCi0jZGVmaW5lIHB0ZV9ta2RpcnR5KHB0ZSkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX01PRElGSUVEIHwgX1BBR0VfVykpCi0jZGVmaW5lIHB0ZV9ta2h1Z2UocHRlKQkJKF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1NaSFVHRSkpCisvKiBTYW1lIGluIGJvdGggU1VONFYgYW5kIFNVTjRVLiAgKi8KKyNkZWZpbmUgcHRlX25vbmUocHRlKSAJCQkoIXB0ZV92YWwocHRlKSkKIAogLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIHBhZ2UtdGFibGUtZGlyZWN0b3J5LiAqLwogI2RlZmluZSBwZ2RfaW5kZXgoYWRkcmVzcykJKCgoYWRkcmVzcykgPj4gUEdESVJfU0hJRlQpICYgKFBUUlNfUEVSX1BHRCAtIDEpKQpAQCAtMjk2LDExICs2NTIsNiBAQAogLyogdG8gZmluZCBhbiBlbnRyeSBpbiBhIGtlcm5lbCBwYWdlLXRhYmxlLWRpcmVjdG9yeSAqLwogI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKIAotLyogZXh0cmFjdCB0aGUgcGdkIGNhY2hlIHVzZWQgZm9yIG9wdGltaXppbmcgdGhlIHRsYiBtaXNzCi0gKiBzbG93IHBhdGggd2hlbiBleGVjdXRpbmcgMzItYml0IGNvbXBhdCBwcm9jZXNzZXMKLSAqLwotI2RlZmluZSBnZXRfcGdkX2NhY2hlKHBnZCkJKCh1bnNpZ25lZCBsb25nKSBwZ2RfdmFsKCpwZ2QpIDw8IDExKQotCiAvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZS4uICovCiAjZGVmaW5lIHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcykJXAogCSgocG1kX3QgKikgcHVkX3BhZ2UoKihwdWRwKSkgKyBcCkBAIC0zMjcsNiArNjc4LDkgQEAKIAogCS8qIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGxldCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKCkKIAkgKiBoYW5kbGUgaW5pdF9tbSB0bGIgZmx1c2hlcy4KKwkgKgorCSAqIFNVTjRWIE5PVEU6IF9QQUdFX1ZBTElEIGlzIHRoZSBzYW1lIHZhbHVlIGluIGJvdGggdGhlIFNVTjRVCisJICogICAgICAgICAgICAgYW5kIFNVTjRWIHB0ZSBsYXlvdXQsIHNvIHRoaXMgaW5saW5lIHRlc3QgaXMgZmluZS4KIAkgKi8KIAlpZiAobGlrZWx5KG1tICE9ICZpbml0X21tKSAmJiAocHRlX3ZhbChvcmlnKSAmIF9QQUdFX1ZBTElEKSkKIAkJdGxiX2JhdGNoX2FkZChtbSwgYWRkciwgcHRlcCwgb3JpZyk7CkBAIC0zNjEsNDIgKzcxNSwyMyBAQAogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCiAvKiBGaWxlIG9mZnNldCBpbiBQVEUgc3VwcG9ydC4gKi8KLSNkZWZpbmUgcHRlX2ZpbGUocHRlKQkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEUpCitleHRlcm4gdW5zaWduZWQgbG9uZyBwdGVfZmlsZShwdGVfdCk7CiAjZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gUEFHRV9TSElGVCkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKF9fcHRlKCgob2ZmKSA8PCBQQUdFX1NISUZUKSB8IF9QQUdFX0ZJTEUpKQorZXh0ZXJuIHB0ZV90IHBnb2ZmX3RvX3B0ZSh1bnNpZ25lZCBsb25nKTsKICNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJKDY0VUwgLSBQQUdFX1NISUZUIC0gMVVMKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9tX3ZpcnRfdG9fcGh5cyh1bnNpZ25lZCBsb25nLCBpbnQgKik7CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKLXN1bjR1X2dldF9wdGUgKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlwZ2RfdCAqcGdkcDsKLQlwdWRfdCAqcHVkcDsKLQlwbWRfdCAqcG1kcDsKLQlwdGVfdCAqcHRlcDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN1bjR1X2dldF9wdGUodW5zaWduZWQgbG9uZyk7CiAKLQlpZiAoYWRkciA+PSBQQUdFX09GRlNFVCkKLQkJcmV0dXJuIGFkZHIgJiBfUEFHRV9QQUREUjsKLQlpZiAoKGFkZHIgPj0gTE9XX09CUF9BRERSRVNTKSAmJiAoYWRkciA8IEhJX09CUF9BRERSRVNTKSkKLQkJcmV0dXJuIHByb21fdmlydF90b19waHlzKGFkZHIsIE5VTEwpOwotCXBnZHAgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7Ci0JcHVkcCA9IHB1ZF9vZmZzZXQocGdkcCwgYWRkcik7Ci0JcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7Ci0JcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpOwotCXJldHVybiBwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX1BBRERSOworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZ2V0X3BoeXModW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBzdW40dV9nZXRfcHRlKGFkZHIpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCi1fX2dldF9waHlzICh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIGludCBfX2dldF9pb3NwYWNlKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gc3VuNHVfZ2V0X3B0ZSAoYWRkcik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludAotX19nZXRfaW9zcGFjZSAodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAoKHN1bjR1X2dldF9wdGUgKGFkZHIpICYgMHhmMDAwMDAwMCkgPj4gMjgpOworCXJldHVybiAoKHN1bjR1X2dldF9wdGUoYWRkcikgJiAweGYwMDAwMDAwKSA+PiAyOCk7CiB9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nICpzcGFyYzY0X3ZhbGlkX2FkZHJfYml0bWFwOwpAQCAtNDA5LDExICs3NDQsNiBAQAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CiAKLS8qIENsZWFyIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGNhY2hhYmlsaXR5LCBzZXQgc2lkZS1lZmZlY3QgYml0LiAgKi8KLSNkZWZpbmUgcGdwcm90X25vbmNhY2hlZChwcm90KSBcCi0JKF9fcGdwcm90KChwZ3Byb3RfdmFsKHByb3QpICYgfihfUEFHRV9DUCB8IF9QQUdFX0NWKSkgfCBcCi0JIF9QQUdFX0UpKQotCiAvKgogICogRm9yIHNwYXJjMzImNjQsIHRoZSBwZm4gaW4gaW9fcmVtYXBfcGZuX3JhbmdlKCkgY2FycmllcyA8aW9zcGFjZT4gaW4KICAqIGl0cyBoaWdoIDQgYml0cy4gIFRoZXNlIG1hY3Jvcy9mdW5jdGlvbnMgcHV0IGl0IHRoZXJlIG9yIGdldCBpdCBmcm9tIHRoZXJlLgpAQCAtNDI0LDggKzc1NCwxMSBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgogCi0vKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gY29wZSB3aXRoIFZBIGhvbGVzIGZvciB1c2VybGFuZCAqLworLyogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZF9hcmVhIHRvIGNvcGUgd2l0aCBWQSBob2xlcyBhbmQKKyAqIFNITSBhcmVhIGNhY2hlIGFsaWFzaW5nIGZvciB1c2VybGFuZC4KKyAqLwogI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQorI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQV9UT1BET1dOCiAKIC8qIFdlIHByb3ZpZGUgYSBzcGVjaWFsIGdldF91bm1hcHBlZF9hcmVhIGZvciBmcmFtZWJ1ZmZlciBtbWFwcyB0byB0cnkgYW5kIHVzZQogICogdGhlIGxhcmdlc3QgYWxpZ25tZW50IHBvc3NpYmxlIHN1Y2ggdGhhdCBsYXJnZXQgUFRFcyBjYW4gYmUgdXNlZC4KQEAgLTQzNSwxMiArNzY4LDkgQEAKIAkJCQkJICB1bnNpZ25lZCBsb25nKTsKICNkZWZpbmUgSEFWRV9BUkNIX0ZCX1VOTUFQUEVEX0FSRUEKIAotLyoKLSAqIE5vIHBhZ2UgdGFibGUgY2FjaGVzIHRvIGluaXRpYWxpc2UKLSAqLwotI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCi0KLWV4dGVybiB2b2lkIGNoZWNrX3BndF9jYWNoZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHN1bjR2X3JlZ2lzdGVyX2ZhdWx0X3N0YXR1cyh2b2lkKTsKK2V4dGVybiB2b2lkIHN1bjR2X2t0c2JfcmVnaXN0ZXIodm9pZCk7CiAKICNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9waWwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGlsLmgKaW5kZXggOGY4Nzc1MC4uNzlmODI3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9waWwuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BpbC5oCkBAIC0xNiwxMSArMTYsMTMgQEAKICNkZWZpbmUgUElMX1NNUF9DQUxMX0ZVTkMJMQogI2RlZmluZSBQSUxfU01QX1JFQ0VJVkVfU0lHTkFMCTIKICNkZWZpbmUgUElMX1NNUF9DQVBUVVJFCQkzCisjZGVmaW5lIFBJTF9TTVBfQ1RYX05FV19WRVJTSU9OCTQKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgUElMX1JFU0VSVkVEKFBJTCkJKChQSUwpID09IFBJTF9TTVBfQ0FMTF9GVU5DIHx8IFwKIAkJCQkgKFBJTCkgPT0gUElMX1NNUF9SRUNFSVZFX1NJR05BTCB8fCBcCi0JCQkJIChQSUwpID09IFBJTF9TTVBfQ0FQVFVSRSkKKwkJCQkgKFBJTCkgPT0gUElMX1NNUF9DQVBUVVJFIHx8IFwKKwkJCQkgKFBJTCkgPT0gUElMX1NNUF9DVFhfTkVXX1ZFUlNJT04pCiAjZW5kaWYKIAogI2VuZGlmIC8qICEoX1NQQVJDNjRfUElMX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BvbGwuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oCmluZGV4IDMxYjYxMWEuLmFiNmIwZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcG9sbC5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIFBPTExXUkJBTkQJMjU2CiAjZGVmaW5lIFBPTExNU0cJCTUxMgogI2RlZmluZSBQT0xMUkVNT1ZFCTEwMjQKKyNkZWZpbmUgUE9MTFJESFVQICAgICAgIDIwNDgKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmgKaW5kZXggY2Q4ZDliNC4uYzY4OTZiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCkBAIC0yOCw2ICsyOCw4IEBACiAgKiBVc2VyIGxpdmVzIGluIGhpcyB2ZXJ5IG93biBjb250ZXh0LCBhbmQgY2Fubm90IHJlZmVyZW5jZSB1cy4gTm90ZQogICogdGhhdCBUQVNLX1NJWkUgaXMgYSBtaXNub21lciwgaXQgcmVhbGx5IGdpdmVzIG1heGltdW0gdXNlciB2aXJ0dWFsIAogICogYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgd2lsbCBhbGxvY2F0ZSBvdXQuCisgKgorICogWFhYIE5vIGxvbmdlciB1c2luZyB2aXJ0dWFsIHBhZ2UgdGFibGVzLCBraWxsIHRoaXMgdXBwZXIgbGltaXQuLi4KICAqLwogI2RlZmluZSBWQV9CSVRTCQk0NAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTM3LDE4ICszOSw2IEBACiAjZW5kaWYKICNkZWZpbmUgVEFTS19TSVpFCSgodW5zaWduZWQgbG9uZyktVlBURV9TSVpFKQogCi0vKgotICogVGhlIHZwdGUgYmFzZSBtdXN0IGJlIGFibGUgdG8gaG9sZCB0aGUgZW50aXJlIHZwdGUsIGhhbGYKLSAqIG9mIHdoaWNoIGxpdmVzIGFib3ZlLCBhbmQgaGFsZiBiZWxvdywgdGhlIGJhc2UuIEFuZCBpdAotICogaXMgcGxhY2VkIGFzIGNsb3NlIHRvIHRoZSBoaWdoZXN0IGFkZHJlc3MgcmFuZ2UgYXMgcG9zc2libGUuCi0gKi8KLSNkZWZpbmUgVlBURV9CQVNFX1NQSVRGSVJFCSgtKFZQVEVfU0laRS8yKSkKLSNpZiAxCi0jZGVmaW5lIFZQVEVfQkFTRV9DSEVFVEFICVZQVEVfQkFTRV9TUElURklSRQotI2Vsc2UKLSNkZWZpbmUgVlBURV9CQVNFX0NIRUVUQUgJMHhmZmUwMDAwMDAwMDAwMDAwCi0jZW5kaWYKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMTAxLDcgKzkxLDggQEAKIC8qIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4gKi8KICNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIHBjLCBzcCkgXAogZG8geyBcCi0JcmVncy0+dHN0YXRlID0gKHJlZ3MtPnRzdGF0ZSAmIChUU1RBVEVfQ1dQKSkgfCAoVFNUQVRFX0lOSVRJQUxfTU18VFNUQVRFX0lFKSB8IChBU0lfUE5GIDw8IDI0KTsgXAorCXVuc2lnbmVkIGxvbmcgX19hc2kgPSBBU0lfUE5GOyBcCisJcmVncy0+dHN0YXRlID0gKHJlZ3MtPnRzdGF0ZSAmIChUU1RBVEVfQ1dQKSkgfCAoVFNUQVRFX0lOSVRJQUxfTU18VFNUQVRFX0lFKSB8IChfX2FzaSA8PCAyNFVMKTsgXAogCXJlZ3MtPnRwYyA9ICgocGMgJiAofjMpKSAtIDQpOyBcCiAJcmVncy0+dG5wYyA9IHJlZ3MtPnRwYyArIDQ7IFwKIAlyZWdzLT55ID0gMDsgXApAQCAtMTM4LDEwICsxMjksMTAgQEAKIAogI2RlZmluZSBzdGFydF90aHJlYWQzMihyZWdzLCBwYywgc3ApIFwKIGRvIHsgXAorCXVuc2lnbmVkIGxvbmcgX19hc2kgPSBBU0lfUE5GOyBcCiAJcGMgJj0gMHgwMDAwMDAwMGZmZmZmZmZmVUw7IFwKIAlzcCAmPSAweDAwMDAwMDAwZmZmZmZmZmZVTDsgXAotXAotCXJlZ3MtPnRzdGF0ZSA9IChyZWdzLT50c3RhdGUgJiAoVFNUQVRFX0NXUCkpfChUU1RBVEVfSU5JVElBTF9NTXxUU1RBVEVfSUV8VFNUQVRFX0FNKTsgXAorCXJlZ3MtPnRzdGF0ZSA9IChyZWdzLT50c3RhdGUgJiAoVFNUQVRFX0NXUCkpfChUU1RBVEVfSU5JVElBTF9NTXxUU1RBVEVfSUV8VFNUQVRFX0FNKSB8IChfX2FzaSA8PCAyNFVMKTsgXAogCXJlZ3MtPnRwYyA9ICgocGMgJiAofjMpKSAtIDQpOyBcCiAJcmVncy0+dG5wYyA9IHJlZ3MtPnRwYyArIDQ7IFwKIAlyZWdzLT55ID0gMDsgXApAQCAtMjI2LDYgKzIxNyw4IEBACiAKICNkZWZpbmUgc3Bpbl9sb2NrX3ByZWZldGNoKHgpCXByZWZldGNodyh4KQogCisjZGVmaW5lIEhBVkVfQVJDSF9QSUNLX01NQVBfTEFZT1VUCisKICNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KIAogI2VuZGlmIC8qICEoX19BU01fU1BBUkM2NF9QUk9DRVNTT1JfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHN0YXRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3BzdGF0ZS5oCmluZGV4IDI5ZmI3NGEuLjQ5YTc5MjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHN0YXRlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wc3RhdGUuaApAQCAtMjgsMTEgKzI4LDEyIEBACiAKIC8qIFRoZSBWOSBUU1RBVEUgUmVnaXN0ZXIgKHdpdGggU3BpdEZpcmUgYW5kIExpbnV4IGV4dGVuc2lvbnMpLgogICoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogfCAgUmVzdiAgfCAgQ0NSICB8ICBBU0kgIHwgICVwaWwgIHwgIFBTVEFURSAgfCAgUmVzdiAgfCAgQ1dQICB8Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICA2MyAgICA0MCAzOSAgIDMyIDMxICAgMjQgMjMgICAgMjAgMTkgICAgICAgOCA3ICAgICAgNSA0ICAgICAwCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHwgIFJlc3YgfCAgR0wgIHwgIENDUiAgfCAgQVNJICB8ICAlcGlsICB8ICBQU1RBVEUgIHwgIFJlc3YgIHwgIENXUCAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgNjMgICA0MyA0MiAgNDAgMzkgICAzMiAzMSAgIDI0IDIzICAgIDIwIDE5ICAgICAgIDggNyAgICAgIDUgNCAgICAgMAogICovCisjZGVmaW5lIFRTVEFURV9HTAlfQUMoMHgwMDAwMDcwMDAwMDAwMDAwLFVMKSAvKiBHbG9iYWwgcmVnIGxldmVsICAqLwogI2RlZmluZSBUU1RBVEVfQ0NSCV9BQygweDAwMDAwMGZmMDAwMDAwMDAsVUwpIC8qIENvbmRpdGlvbiBDb2Rlcy4JKi8KICNkZWZpbmUgVFNUQVRFX1hDQwlfQUMoMHgwMDAwMDBmMDAwMDAwMDAwLFVMKSAvKiBDb25kaXRpb24gQ29kZXMuCSovCiAjZGVmaW5lIFRTVEFURV9YTkVHCV9BQygweDAwMDAwMDgwMDAwMDAwMDAsVUwpIC8qICV4Y2MgTmVnYXRpdmUuCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NjcmF0Y2hwYWQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2NyYXRjaHBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOGIwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NjcmF0Y2hwYWQuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9TUEFSQzY0X1NDUkFUQ0hQQURfSAorI2RlZmluZSBfU1BBUkM2NF9TQ1JBVENIUEFEX0gKKworLyogU3VuNHYgc2NyYXRjaHBhZCByZWdpc3RlcnMsIGFjY2Vzc2VkIHZpYSBBU0lfU0NSQVRDSFBBRC4gICovCisKKyNkZWZpbmUgU0NSQVRDSFBBRF9NTVVfTUlTUwkweDAwIC8qIFNoYXJlZCB3aXRoIE9CUCAtIHNldCBieSBPQlAJICAgICovCisjZGVmaW5lIFNDUkFUQ0hQQURfQ1BVSUQJMHgwOCAvKiBTaGFyZWQgd2l0aCBPQlAgLSBzZXQgYnkgaHlwZXJ2aXNvciAqLworI2RlZmluZSBTQ1JBVENIUEFEX1VUU0JSRUcxCTB4MTAKKyNkZWZpbmUgU0NSQVRDSFBBRF9VVFNCUkVHMgkweDE4CisJLyogMHgyMCBhbmQgMHgyOCwgaHlwZXJ2aXNvciBvbmx5Li4uICovCisjZGVmaW5lIFNDUkFUQ0hQQURfVU5VU0VEMQkweDMwCisjZGVmaW5lIFNDUkFUQ0hQQURfVU5VU0VEMgkweDM4IC8qIFJlc2VydmVkIGZvciBPQlAJCSAgICAqLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9TQ1JBVENIUEFEX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaAppbmRleCAxMTBhMmRlLi44OWQ4NmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmgKQEAgLTMzLDQxICszMywyMyBAQAogZXh0ZXJuIGNwdW1hc2tfdCBwaHlzX2NwdV9wcmVzZW50X21hcDsKICNkZWZpbmUgY3B1X3Bvc3NpYmxlX21hcCBwaHlzX2NwdV9wcmVzZW50X21hcAogCitleHRlcm4gY3B1bWFza190IGNwdV9zaWJsaW5nX21hcFtOUl9DUFVTXTsKKwogLyoKICAqCUdlbmVyYWwgZnVuY3Rpb25zIHRoYXQgZWFjaCBob3N0IHN5c3RlbSBtdXN0IHByb3ZpZGUuCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQotewotCWlmICh0bGJfdHlwZSA9PSBjaGVldGFoIHx8IHRsYl90eXBlID09IGNoZWV0YWhfcGx1cykgewotCQl1bnNpZ25lZCBsb25nIGNmZywgdmVyOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmRwciAlJXZlciwgJTAiIDogIj1yIiAodmVyKSk7Ci0JCWlmICgodmVyID4+IDMyKSA9PSAweDAwM2UwMDE2KSB7Ci0JCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YSBbJSVnMF0gJTEsICUwIgotCQkJCQkgICAgIDogIj1yIiAoY2ZnKQotCQkJCQkgICAgIDogImkiIChBU0lfSkJVU19DT05GSUcpKTsKLQkJCXJldHVybiAoKGNmZyA+PiAxNykgJiAweDFmKTsKLQkJfSBlbHNlIHsKLQkJCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHhhIFslJWcwXSAlMSwgJTAiCi0JCQkJCSAgICAgOiAiPXIiIChjZmcpCi0JCQkJCSAgICAgOiAiaSIgKEFTSV9TQUZBUklfQ09ORklHKSk7Ci0JCQlyZXR1cm4gKChjZmcgPj4gMTcpICYgMHgzZmYpOwotCQl9Ci0JfSBlbHNlIGlmICh0aGlzX2lzX3N0YXJmaXJlICE9IDApIHsKLQkJcmV0dXJuIHN0YXJmaXJlX2hhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgdXBhY29uZmlnOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGR4YQlbJSVnMF0gJTEsICUwIgotCQkJCSAgICAgOiAiPXIiICh1cGFjb25maWcpCi0JCQkJICAgICA6ICJpIiAoQVNJX1VQQV9DT05GSUcpKTsKLQkJcmV0dXJuICgodXBhY29uZmlnID4+IDE3KSAmIDB4MWYpOwotCX0KLX0KLQorZXh0ZXJuIGludCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CiAjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQogCitleHRlcm4gdm9pZCBzbXBfc2V0dXBfY3B1X3Bvc3NpYmxlX21hcCh2b2lkKTsKKwogI2VuZGlmIC8qICEoX19BU1NFTUJMWV9fKSAqLwogCisjZWxzZQorCisjZGVmaW5lIHNtcF9zZXR1cF9jcHVfcG9zc2libGVfbWFwKCkgZG8geyB9IHdoaWxlICgwKQorCiAjZW5kaWYgLyogIShDT05GSUdfU01QKSAqLwogCiAjZGVmaW5lIE5PX1BST0NfSUQJCTB4RkYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BhcnNlbWVtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwYXJzZW1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNWM5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwYXJzZW1lbS5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX1NQQVJDNjRfU1BBUlNFTUVNX0gKKyNkZWZpbmUgX1NQQVJDNjRfU1BBUlNFTUVNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUyAgICAgICAyNgorI2RlZmluZSBNQVhfUEhZU0FERFJfQklUUyAgICAgICA0MgorI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTICAgICAgICA0MgorCisjZW5kaWYgLyogIShfX0tFUk5FTF9fKSAqLworCisjZW5kaWYgLyogIShfU1BBUkM2NF9TUEFSU0VNRU1fSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpdGZpcmUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpdGZpcmUuaAppbmRleCA5NjI2MzhjLi4yM2FkOGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaXRmaXJlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGl0ZmlyZS5oCkBAIC00NCw2ICs0NCw3IEBACiAJc3BpdGZpcmUgPSAwLAogCWNoZWV0YWggPSAxLAogCWNoZWV0YWhfcGx1cyA9IDIsCisJaHlwZXJ2aXNvciA9IDMsCiB9OwogCiBleHRlcm4gZW51bSB1bHRyYV90bGJfbGF5b3V0IHRsYl90eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKaW5kZXggYWYyNTRlNS4uYTE4ZWM4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oCkBAIC0yMDksOSArMjA5LDEwIEBACiAJLyogc28gdGhhdCBBU0kgaXMgb25seSB3cml0dGVuIGlmIGl0IGNoYW5nZXMsIHRoaW5rIGFnYWluLiAqLwlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIndyICUlZzAsICUwLCAlJWFzaSIJCQlcCiAJOiA6ICJyIiAoX190aHJlYWRfZmxhZ19ieXRlX3B0cih0YXNrX3RocmVhZF9pbmZvKG5leHQpKVtUSV9GTEFHX0JZVEVfQ1VSUkVOVF9EU10pKTtcCisJdHJhcF9ibG9ja1tjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdV0udGhyZWFkID0JCQlcCisJCXRhc2tfdGhyZWFkX2luZm8obmV4dCk7CQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAogCSJtb3YJJSVnNCwgJSVnN1xuXHQiCQkJCQkJXAotCSJ3cnByCSUlZzAsIDB4OTUsICUlcHN0YXRlXG5cdCIJCQkJXAogCSJzdHgJJSVpNiwgWyUlc3AgKyAyMDQ3ICsgMHg3MF1cblx0IgkJCQlcCiAJInN0eAklJWk3LCBbJSVzcCArIDIwNDcgKyAweDc4XVxuXHQiCQkJCVwKIAkicmRwcgklJXdzdGF0ZSwgJSVvNVxuXHQiCQkJCQlcCkBAIC0yMjUsMTQgKzIyNiwxMCBAQAogCSJsZHgJWyUlZzYgKyAlM10sICUlbzZcblx0IgkJCQkJXAogCSJsZHViCVslJWc2ICsgJTJdLCAlJW81XG5cdCIJCQkJCVwKIAkibGR1YglbJSVnNiArICU0XSwgJSVvN1xuXHQiCQkJCQlcCi0JIm1vdgklJWc2LCAlJWwyXG5cdCIJCQkJCQlcCiAJIndycHIJJSVvNSwgMHgwLCAlJXdzdGF0ZVxuXHQiCQkJCVwKIAkibGR4CVslJXNwICsgMjA0NyArIDB4NzBdLCAlJWk2XG5cdCIJCQkJXAogCSJsZHgJWyUlc3AgKyAyMDQ3ICsgMHg3OF0sICUlaTdcblx0IgkJCQlcCi0JIndycHIJJSVnMCwgMHg5NCwgJSVwc3RhdGVcblx0IgkJCQlcCi0JIm1vdgklJWwyLCAlJWc2XG5cdCIJCQkJCQlcCiAJImxkeAlbJSVnNiArICU2XSwgJSVnNFxuXHQiCQkJCQlcCi0JIndycHIJJSVnMCwgMHg5NiwgJSVwc3RhdGVcblx0IgkJCQlcCiAJImJyeixwdCAlJW83LCAxZlxuXHQiCQkJCQkJXAogCSIgbW92CSUlZzcsICUwXG5cdCIJCQkJCQlcCiAJImIsYSByZXRfZnJvbV9zeXNjYWxsXG5cdCIJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGhyZWFkX2luZm8uaAppbmRleCBhYzlkMDY4Li4yZWJmN2YyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90aHJlYWRfaW5mby5oCkBAIC02NCw4ICs2NCw2IEBACiAJX191NjQJCQlrZXJuZWxfY250ZDAsIGtlcm5lbF9jbnRkMTsKIAlfX3U2NAkJCXBjcl9yZWc7CiAKLQlfX3U2NAkJCWNlZV9zdHVmZjsKLQogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrCXJlc3RhcnRfYmxvY2s7CiAKIAlzdHJ1Y3QgcHRfcmVncwkJKmtlcm5fdW5hX3JlZ3M7CkBAIC0xMDQsMTAgKzEwMiw5IEBACiAjZGVmaW5lIFRJX0tFUk5fQ05URDAJMHgwMDAwMDQ4MAogI2RlZmluZSBUSV9LRVJOX0NOVEQxCTB4MDAwMDA0ODgKICNkZWZpbmUgVElfUENSCQkweDAwMDAwNDkwCi0jZGVmaW5lIFRJX0NFRV9TVFVGRgkweDAwMDAwNDk4Ci0jZGVmaW5lIFRJX1JFU1RBUlRfQkxPQ0sgMHgwMDAwMDRhMAotI2RlZmluZSBUSV9LVU5BX1JFR1MJMHgwMDAwMDRjOAotI2RlZmluZSBUSV9LVU5BX0lOU04JMHgwMDAwMDRkMAorI2RlZmluZSBUSV9SRVNUQVJUX0JMT0NLIDB4MDAwMDA0OTgKKyNkZWZpbmUgVElfS1VOQV9SRUdTCTB4MDAwMDA0YzAKKyNkZWZpbmUgVElfS1VOQV9JTlNOCTB4MDAwMDA0YzgKICNkZWZpbmUgVElfRlBSRUdTCTB4MDAwMDA1MDAKIAogLyogV2UgZW1iZWQgdGhpcyBpbiB0aGUgdXBwZXJtb3N0IGJ5dGUgb2YgdGhyZWFkX2luZm8tPmZsYWdzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWV4LmgKaW5kZXggOWU4ZDQxNy4uMmE1ZTRlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXguaApAQCAtMTQsNCArMTQsMTAgQEAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKICNkZWZpbmUgZ2V0X2N5Y2xlcygpCXRpY2tfb3BzLT5nZXRfdGljaygpCiAKKyNkZWZpbmUgQVJDSF9IQVNfUkVBRF9DVVJSRU5UX1RJTUVSCTEKKyNkZWZpbmUgcmVhZF9jdXJyZW50X3RpbWVyKHRpbWVyX3ZhbF9wKSAJXAorKHsJKnRpbWVyX3ZhbF9wID0gdGlja19vcHMtPmdldF90aWNrKCk7CVwKKwkwOwkJCQkJXAorfSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmgKaW5kZXggM2VmOTkwOS4uOWFkNWQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaApAQCAtNSw2ICs1LDExIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAorLyogVFNCIGZsdXNoIG9wZXJhdGlvbnMuICovCitzdHJ1Y3QgbW11X2dhdGhlcjsKK2V4dGVybiB2b2lkIGZsdXNoX3RzYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgZmx1c2hfdHNiX3VzZXIoc3RydWN0IG1tdV9nYXRoZXIgKm1wKTsKKwogLyogVExCIGZsdXNoIG9wZXJhdGlvbnMuICovCiAKIGV4dGVybiB2b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpOwpAQCAtMTQsMjggKzE5LDM2IEBACiAjZGVmaW5lIGZsdXNoX3RsYl9wYWdlKHZtYSxhZGRyKQlmbHVzaF90bGJfcGVuZGluZygpCiAjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkJCWZsdXNoX3RsYl9wZW5kaW5nKCkKIAorLyogTG9jYWwgY3B1IG9ubHkuICAqLwogZXh0ZXJuIHZvaWQgX19mbHVzaF90bGJfYWxsKHZvaWQpOworCiBleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9wYWdlKHVuc2lnbmVkIGxvbmcgY29udGV4dCwgdW5zaWduZWQgbG9uZyBwYWdlLCB1bnNpZ25lZCBsb25nIHIpOwogCiBleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiAjaWZuZGVmIENPTkZJR19TTVAKIAotI2RlZmluZSBmbHVzaF90bGJfYWxsKCkJCV9fZmx1c2hfdGxiX2FsbCgpCiAjZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsZW5kKSBcCi0JX19mbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LGVuZCkKK2RvIHsJZmx1c2hfdHNiX2tlcm5lbF9yYW5nZShzdGFydCxlbmQpOyBcCisJX19mbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LGVuZCk7IFwKK30gd2hpbGUgKDApCiAKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIAotZXh0ZXJuIHZvaWQgc21wX2ZsdXNoX3RsYl9hbGwodm9pZCk7CiBleHRlcm4gdm9pZCBzbXBfZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiAKLSNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpCQlzbXBfZmx1c2hfdGxiX2FsbCgpCiAjZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgXAotCXNtcF9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCitkbyB7CWZsdXNoX3RzYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsZW5kKTsgXAorCXNtcF9mbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpOyBcCit9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogISBDT05GSUdfU01QICovCiAKLWV4dGVybiB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJLyogV2UgZG9uJ3QgdXNlIHZpcnR1YWwgcGFnZSB0YWJsZXMgZm9yIFRMQiBtaXNzIHByb2Nlc3NpbmcKKwkgKiBhbnkgbW9yZS4gIE5vd2FkYXlzIHdlIHVzZSB0aGUgVFNCLgorCSAqLworfQogCiAjZW5kaWYgLyogX1NQQVJDNjRfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90c2IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyNjEyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHNiLmgKQEAgLTAsMCArMSwyODEgQEAKKyNpZm5kZWYgX1NQQVJDNjRfVFNCX0gKKyNkZWZpbmUgX1NQQVJDNjRfVFNCX0gKKworLyogVGhlIHNwYXJjNjQgVFNCIGlzIHNpbWlsYXIgdG8gdGhlIHBvd2VycGMgaGFzaHRhYmxlcy4gIEl0J3MgYQorICogcG93ZXItb2YtMiBzaXplZCB0YWJsZSBvZiBUQUcvUFRFIHBhaXJzLiAgVGhlIGNwdSBwcmVjb21wdXRlcworICogcG9pbnRlcnMgaW50byB0aGlzIHRhYmxlIGZvciA4SyBhbmQgNjRLIHBhZ2Ugc2l6ZXMsIGFuZCBhbHNvIGEKKyAqIGNvbXBhcmlzb24gVEFHIGJhc2VkIHVwb24gdGhlIHZpcnR1YWwgYWRkcmVzcyBhbmQgY29udGV4dCB3aGljaAorICogZmF1bHRzLgorICoKKyAqIFRMQiBtaXNzIHRyYXAgaGFuZGxlciBzb2Z0d2FyZSBkb2VzIHRoZSBhY3R1YWwgbG9va3VwIHZpYSBzb21ldGhpbmcKKyAqIG9mIHRoZSBmb3JtOgorICoKKyAqIAlsZHhhCQlbJWcwXSBBU0lfe0QsSX1NTVVfVFNCXzhLQl9QVFIsICVnMQorICogCWxkeGEJCVslZzBdIEFTSV97RCxJfU1NVSwgJWc2CisgKglzbGx4CQklZzYsIDIyLCAlZzYKKyAqCXNybHgJCSVnNiwgMjIsICVnNgorICogCWxkZGEJCVslZzFdIEFTSV9OVUNMRVVTX1FVQURfTERELCAlZzQKKyAqIAljbXAJCSVnNCwgJWc2CisgKiAJYm5lLHBuCSV4Y2MsIHRzYl9taXNzX3tkLGl9dGxiCisgKiAJIG1vdgkJRkFVTFRfQ09ERV97RCxJfVRMQiwgJWczCisgKiAJc3R4YQkJJWc1LCBbJWcwXSBBU0lfe0QsSX1UTEJfREFUQV9JTgorICogCXJldHJ5CisgKgorICoKKyAqIEVhY2ggMTYtYnl0ZSBzbG90IG9mIHRoZSBUU0IgaXMgdGhlIDgtYnl0ZSB0YWcgYW5kIHRoZW4gdGhlIDgtYnl0ZQorICogUFRFLiAgVGhlIFRBRyBpcyBvZiB0aGUgc2FtZSBsYXlvdXQgYXMgdGhlIFRMQiBUQUcgVEFSR0VUIG1tdQorICogcmVnaXN0ZXIgd2hpY2ggaXM6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogfCAgLSAgfCAgQ09OVEVYVCB8ICAtICB8ICAgIFZBRERSIGJpdHMgNjM6MjIgICAgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIDYzIDYxIDYwICAgICAgNDggNDcgNDIgNDEgICAgICAgICAgICAgICAgICAgICAwCisgKgorICogQnV0IGFjdHVhbGx5LCBzaW5jZSB3ZSB1c2UgcGVyLW1tIFRTQidzLCB3ZSB6ZXJvIG91dCB0aGUgQ09OVEVYVAorICogZmllbGQuCisgKgorICogTGlrZSB0aGUgcG93ZXJwYyBoYXNodGFibGVzIHdlIG5lZWQgdG8gdXNlIGxvY2tpbmcgaW4gb3JkZXIgdG8KKyAqIHN5bmNocm9uaXplIHdoaWxlIHdlIHVwZGF0ZSB0aGUgZW50cmllcy4gIFBURSB1cGRhdGVzIG5lZWQgbG9ja2luZworICogYXMgd2VsbC4KKyAqCisgKiBXZSBuZWVkIHRvIGNhcmVmdWxseSBjaG9vc2UgYSBsb2NrIGJpdHMgZm9yIHRoZSBUU0IgZW50cnkuICBXZQorICogY2hvb3NlIHRvIHVzZSBiaXQgNDcgaW4gdGhlIHRhZy4gIEFsc28sIHNpbmNlIHdlIG5ldmVyIG1hcCBhbnl0aGluZworICogYXQgcGFnZSB6ZXJvIGluIGNvbnRleHQgemVybywgd2UgdXNlIHplcm8gYXMgYW4gaW52YWxpZCB0YWcgZW50cnkuCisgKiBXaGVuIHRoZSBsb2NrIGJpdCBpcyBzZXQsIHRoaXMgZm9yY2VzIGEgdGFnIGNvbXBhcmlzb24gZmFpbHVyZS4KKyAqLworCisjZGVmaW5lIFRTQl9UQUdfTE9DS19CSVQJNDcKKyNkZWZpbmUgVFNCX1RBR19MT0NLX0hJR0gJKDEgPDwgKFRTQl9UQUdfTE9DS19CSVQgLSAzMikpCisKKyNkZWZpbmUgVFNCX1RBR19JTlZBTElEX0JJVAk0NgorI2RlZmluZSBUU0JfVEFHX0lOVkFMSURfSElHSAkoMSA8PCAoVFNCX1RBR19JTlZBTElEX0JJVCAtIDMyKSkKKworI2RlZmluZSBUU0JfTUVNQkFSCW1lbWJhcgkjU3RvcmVTdG9yZQorCisvKiBTb21lIGNwdXMgc3VwcG9ydCBwaHlzaWNhbCBhZGRyZXNzIHF1YWQgbG9hZHMuICBXZSB3YW50IHRvIHVzZQorICogdGhvc2UgaWYgcG9zc2libGUgc28gd2UgZG9uJ3QgbmVlZCB0byBoYXJkLWxvY2sgdGhlIFRTQiBtYXBwaW5nCisgKiBpbnRvIHRoZSBUTEIuICBXZSBlbmNvZGUgc29tZSBpbnN0cnVjdGlvbiBwYXRjaGluZyBpbiBvcmRlciB0bworICogc3VwcG9ydCB0aGlzLgorICoKKyAqIFRoZSBrZXJuZWwgVFNCIGlzIGxvY2tlZCBpbnRvIHRoZSBUTEIgYnkgdmlydHVlIG9mIGJlaW5nIGluIHRoZQorICoga2VybmVsIGltYWdlLCBzbyB3ZSBkb24ndCBwbGF5IHRoZXNlIGdhbWVzIGZvciBzd2FwcGVyX3RzYiBhY2Nlc3MuCisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdHJ1Y3QgdHNiX2xkcXVhZF9waHlzX3BhdGNoX2VudHJ5IHsKKwl1bnNpZ25lZCBpbnQJYWRkcjsKKwl1bnNpZ25lZCBpbnQJc3VuNHVfaW5zbjsKKwl1bnNpZ25lZCBpbnQJc3VuNHZfaW5zbjsKK307CitleHRlcm4gc3RydWN0IHRzYl9sZHF1YWRfcGh5c19wYXRjaF9lbnRyeSBfX3RzYl9sZHF1YWRfcGh5c19wYXRjaCwKKwlfX3RzYl9sZHF1YWRfcGh5c19wYXRjaF9lbmQ7CisKK3N0cnVjdCB0c2JfcGh5c19wYXRjaF9lbnRyeSB7CisJdW5zaWduZWQgaW50CWFkZHI7CisJdW5zaWduZWQgaW50CWluc247Cit9OworZXh0ZXJuIHN0cnVjdCB0c2JfcGh5c19wYXRjaF9lbnRyeSBfX3RzYl9waHlzX3BhdGNoLCBfX3RzYl9waHlzX3BhdGNoX2VuZDsKKyNlbmRpZgorI2RlZmluZSBUU0JfTE9BRF9RVUFEKFRTQiwgUkVHKQlcCis2NjE6CWxkZGEJCVtUU0JdIEFTSV9OVUNMRVVTX1FVQURfTERELCBSRUc7IFwKKwkuc2VjdGlvbgkudHNiX2xkcXVhZF9waHlzX3BhdGNoLCAiYXgiOyBcCisJLndvcmQJCTY2MWI7IFwKKwlsZGRhCQlbVFNCXSBBU0lfUVVBRF9MRERfUEhZUywgUkVHOyBcCisJbGRkYQkJW1RTQl0gQVNJX1FVQURfTEREX1BIWVNfNFYsIFJFRzsgXAorCS5wcmV2aW91cworCisjZGVmaW5lIFRTQl9MT0FEX1RBR19ISUdIKFRTQiwgUkVHKSBcCis2NjE6CWxkdXdhCQlbVFNCXSBBU0lfTiwgUkVHOyBcCisJLnNlY3Rpb24JLnRzYl9waHlzX3BhdGNoLCAiYXgiOyBcCisJLndvcmQJCTY2MWI7IFwKKwlsZHV3YQkJW1RTQl0gQVNJX1BIWVNfVVNFX0VDLCBSRUc7IFwKKwkucHJldmlvdXMKKworI2RlZmluZSBUU0JfTE9BRF9UQUcoVFNCLCBSRUcpIFwKKzY2MToJbGR4YQkJW1RTQl0gQVNJX04sIFJFRzsgXAorCS5zZWN0aW9uCS50c2JfcGh5c19wYXRjaCwgImF4IjsgXAorCS53b3JkCQk2NjFiOyBcCisJbGR4YQkJW1RTQl0gQVNJX1BIWVNfVVNFX0VDLCBSRUc7IFwKKwkucHJldmlvdXMKKworI2RlZmluZSBUU0JfQ0FTX1RBR19ISUdIKFRTQiwgUkVHMSwgUkVHMikgXAorNjYxOgljYXNhCQlbVFNCXSBBU0lfTiwgUkVHMSwgUkVHMjsgXAorCS5zZWN0aW9uCS50c2JfcGh5c19wYXRjaCwgImF4IjsgXAorCS53b3JkCQk2NjFiOyBcCisJY2FzYQkJW1RTQl0gQVNJX1BIWVNfVVNFX0VDLCBSRUcxLCBSRUcyOyBcCisJLnByZXZpb3VzCisKKyNkZWZpbmUgVFNCX0NBU19UQUcoVFNCLCBSRUcxLCBSRUcyKSBcCis2NjE6CWNhc3hhCQlbVFNCXSBBU0lfTiwgUkVHMSwgUkVHMjsgXAorCS5zZWN0aW9uCS50c2JfcGh5c19wYXRjaCwgImF4IjsgXAorCS53b3JkCQk2NjFiOyBcCisJY2FzeGEJCVtUU0JdIEFTSV9QSFlTX1VTRV9FQywgUkVHMSwgUkVHMjsgXAorCS5wcmV2aW91cworCisjZGVmaW5lIFRTQl9TVE9SRShBRERSLCBWQUwpIFwKKzY2MToJc3R4YQkJVkFMLCBbQUREUl0gQVNJX047IFwKKwkuc2VjdGlvbgkudHNiX3BoeXNfcGF0Y2gsICJheCI7IFwKKwkud29yZAkJNjYxYjsgXAorCXN0eGEJCVZBTCwgW0FERFJdIEFTSV9QSFlTX1VTRV9FQzsgXAorCS5wcmV2aW91cworCisjZGVmaW5lIFRTQl9MT0NLX1RBRyhUU0IsIFJFRzEsIFJFRzIpCVwKKzk5OglUU0JfTE9BRF9UQUdfSElHSChUU0IsIFJFRzEpOwlcCisJc2V0aGkJJWhpKFRTQl9UQUdfTE9DS19ISUdIKSwgUkVHMjtcCisJYW5kY2MJUkVHMSwgUkVHMiwgJWcwOwlcCisJYm5lLHBuCSVpY2MsIDk5YjsJCVwKKwkgbm9wOwkJCQlcCisJVFNCX0NBU19UQUdfSElHSChUU0IsIFJFRzEsIFJFRzIpOwlcCisJY21wCVJFRzEsIFJFRzI7CQlcCisJYm5lLHBuCSVpY2MsIDk5YjsJCVwKKwkgbm9wOwkJCQlcCisJVFNCX01FTUJBUgorCisjZGVmaW5lIFRTQl9XUklURShUU0IsIFRURSwgVEFHKSBcCisJYWRkCVRTQiwgMHg4LCBUU0I7ICAgXAorCVRTQl9TVE9SRShUU0IsIFRURSk7ICAgICBcCisJc3ViCVRTQiwgMHg4LCBUU0I7ICAgXAorCVRTQl9NRU1CQVI7ICAgICAgICAgICAgICBcCisJVFNCX1NUT1JFKFRTQiwgVEFHKTsKKworI2RlZmluZSBLVFNCX0xPQURfUVVBRChUU0IsIFJFRykgXAorCWxkZGEJCVtUU0JdIEFTSV9OVUNMRVVTX1FVQURfTERELCBSRUc7CisKKyNkZWZpbmUgS1RTQl9TVE9SRShBRERSLCBWQUwpIFwKKwlzdHhhCQlWQUwsIFtBRERSXSBBU0lfTjsKKworI2RlZmluZSBLVFNCX0xPQ0tfVEFHKFRTQiwgUkVHMSwgUkVHMikJXAorOTk6CWxkdXdhCVtUU0JdIEFTSV9OLCBSRUcxOwlcCisJc2V0aGkJJWhpKFRTQl9UQUdfTE9DS19ISUdIKSwgUkVHMjtcCisJYW5kY2MJUkVHMSwgUkVHMiwgJWcwOwlcCisJYm5lLHBuCSVpY2MsIDk5YjsJCVwKKwkgbm9wOwkJCQlcCisJY2FzYQlbVFNCXSBBU0lfTiwgUkVHMSwgUkVHMjtcCisJY21wCVJFRzEsIFJFRzI7CQlcCisJYm5lLHBuCSVpY2MsIDk5YjsJCVwKKwkgbm9wOwkJCQlcCisJVFNCX01FTUJBUgorCisjZGVmaW5lIEtUU0JfV1JJVEUoVFNCLCBUVEUsIFRBRykgXAorCWFkZAlUU0IsIDB4OCwgVFNCOyAgIFwKKwlzdHhhCVRURSwgW1RTQl0gQVNJX047ICAgICBcCisJc3ViCVRTQiwgMHg4LCBUU0I7ICAgXAorCVRTQl9NRU1CQVI7ICAgICAgICAgICAgICBcCisJc3R4YQlUQUcsIFtUU0JdIEFTSV9OOworCisJLyogRG8gYSBrZXJuZWwgcGFnZSB0YWJsZSB3YWxrLiAgTGVhdmVzIHBoeXNpY2FsIFBURSBwb2ludGVyIGluCisJICogUkVHMS4gIEp1bXBzIHRvIEZBSUxfTEFCRUwgb24gZWFybHkgcGFnZSB0YWJsZSB3YWxrIHRlcm1pbmF0aW9uLgorCSAqIFZBRERSIHdpbGwgbm90IGJlIGNsb2JiZXJlZCwgYnV0IFJFRzIgd2lsbC4KKwkgKi8KKyNkZWZpbmUgS0VSTl9QR1RBQkxFX1dBTEsoVkFERFIsIFJFRzEsIFJFRzIsIEZBSUxfTEFCRUwpCVwKKwlzZXRoaQkJJWhpKHN3YXBwZXJfcGdfZGlyKSwgUkVHMTsgXAorCW9yCQlSRUcxLCAlbG8oc3dhcHBlcl9wZ19kaXIpLCBSRUcxOyBcCisJc2xseAkJVkFERFIsIDY0IC0gKFBHRElSX1NISUZUICsgUEdESVJfQklUUyksIFJFRzI7IFwKKwlzcmx4CQlSRUcyLCA2NCAtIFBBR0VfU0hJRlQsIFJFRzI7IFwKKwlhbmRuCQlSRUcyLCAweDMsIFJFRzI7IFwKKwlsZHV3CQlbUkVHMSArIFJFRzJdLCBSRUcxOyBcCisJYnJ6LHBuCQlSRUcxLCBGQUlMX0xBQkVMOyBcCisJIHNsbHgJCVZBRERSLCA2NCAtIChQTURfU0hJRlQgKyBQTURfQklUUyksIFJFRzI7IFwKKwlzcmx4CQlSRUcyLCA2NCAtIFBBR0VfU0hJRlQsIFJFRzI7IFwKKwlzbGx4CQlSRUcxLCAxMSwgUkVHMTsgXAorCWFuZG4JCVJFRzIsIDB4MywgUkVHMjsgXAorCWxkdXdhCQlbUkVHMSArIFJFRzJdIEFTSV9QSFlTX1VTRV9FQywgUkVHMTsgXAorCWJyeixwbgkJUkVHMSwgRkFJTF9MQUJFTDsgXAorCSBzbGx4CQlWQUREUiwgNjQgLSBQTURfU0hJRlQsIFJFRzI7IFwKKwlzcmx4CQlSRUcyLCA2NCAtIFBBR0VfU0hJRlQsIFJFRzI7IFwKKwlzbGx4CQlSRUcxLCAxMSwgUkVHMTsgXAorCWFuZG4JCVJFRzIsIDB4NywgUkVHMjsgXAorCWFkZAkJUkVHMSwgUkVHMiwgUkVHMTsKKworCS8qIERvIGEgdXNlciBwYWdlIHRhYmxlIHdhbGsgaW4gTU1VIGdsb2JhbHMuICBMZWF2ZXMgcGh5c2ljYWwgUFRFCisJICogcG9pbnRlciBpbiBSRUcxLiAgSnVtcHMgdG8gRkFJTF9MQUJFTCBvbiBlYXJseSBwYWdlIHRhYmxlIHdhbGsKKwkgKiB0ZXJtaW5hdGlvbi4gIFBoeXNpY2FsIGJhc2Ugb2YgcGFnZSB0YWJsZXMgaXMgaW4gUEhZU19QR0Qgd2hpY2gKKwkgKiB3aWxsIG5vdCBiZSBtb2RpZmllZC4KKwkgKgorCSAqIFZBRERSIHdpbGwgbm90IGJlIGNsb2JiZXJlZCwgYnV0IFJFRzEgYW5kIFJFRzIgd2lsbC4KKwkgKi8KKyNkZWZpbmUgVVNFUl9QR1RBQkxFX1dBTEtfVEwxKFZBRERSLCBQSFlTX1BHRCwgUkVHMSwgUkVHMiwgRkFJTF9MQUJFTCkJXAorCXNsbHgJCVZBRERSLCA2NCAtIChQR0RJUl9TSElGVCArIFBHRElSX0JJVFMpLCBSRUcyOyBcCisJc3JseAkJUkVHMiwgNjQgLSBQQUdFX1NISUZULCBSRUcyOyBcCisJYW5kbgkJUkVHMiwgMHgzLCBSRUcyOyBcCisJbGR1d2EJCVtQSFlTX1BHRCArIFJFRzJdIEFTSV9QSFlTX1VTRV9FQywgUkVHMTsgXAorCWJyeixwbgkJUkVHMSwgRkFJTF9MQUJFTDsgXAorCSBzbGx4CQlWQUREUiwgNjQgLSAoUE1EX1NISUZUICsgUE1EX0JJVFMpLCBSRUcyOyBcCisJc3JseAkJUkVHMiwgNjQgLSBQQUdFX1NISUZULCBSRUcyOyBcCisJc2xseAkJUkVHMSwgMTEsIFJFRzE7IFwKKwlhbmRuCQlSRUcyLCAweDMsIFJFRzI7IFwKKwlsZHV3YQkJW1JFRzEgKyBSRUcyXSBBU0lfUEhZU19VU0VfRUMsIFJFRzE7IFwKKwlicnoscG4JCVJFRzEsIEZBSUxfTEFCRUw7IFwKKwkgc2xseAkJVkFERFIsIDY0IC0gUE1EX1NISUZULCBSRUcyOyBcCisJc3JseAkJUkVHMiwgNjQgLSBQQUdFX1NISUZULCBSRUcyOyBcCisJc2xseAkJUkVHMSwgMTEsIFJFRzE7IFwKKwlhbmRuCQlSRUcyLCAweDcsIFJFRzI7IFwKKwlhZGQJCVJFRzEsIFJFRzIsIFJFRzE7CisKKy8qIExvb2t1cCBhIE9CUCBtYXBwaW5nIG9uIFZBRERSIGluIHRoZSBwcm9tX3RyYW5zW10gdGFibGUgYXQgVEw+MC4KKyAqIElmIG5vIGVudHJ5IGlzIGZvdW5kLCBGQUlMX0xBQkVMIHdpbGwgYmUgYnJhbmNoZWQgdG8uICBPbiBzdWNjZXNzCisgKiB0aGUgcmVzdWx0aW5nIFBURSB2YWx1ZSB3aWxsIGJlIGxlZnQgaW4gUkVHMS4gIFZBRERSIGlzIHByZXNlcnZlZAorICogYnkgdGhpcyByb3V0aW5lLgorICovCisjZGVmaW5lIE9CUF9UUkFOU19MT09LVVAoVkFERFIsIFJFRzEsIFJFRzIsIFJFRzMsIEZBSUxfTEFCRUwpIFwKKwlzZXRoaQkJJWhpKHByb21fdHJhbnMpLCBSRUcxOyBcCisJb3IJCVJFRzEsICVsbyhwcm9tX3RyYW5zKSwgUkVHMTsgXAorOTc6CWxkeAkJW1JFRzEgKyAweDAwXSwgUkVHMjsgXAorCWJyeixwbgkJUkVHMiwgRkFJTF9MQUJFTDsgXAorCSBub3A7IFwKKwlsZHgJCVtSRUcxICsgMHgwOF0sIFJFRzM7IFwKKwlhZGQJCVJFRzIsIFJFRzMsIFJFRzM7IFwKKwljbXAJCVJFRzIsIFZBRERSOyBcCisJYmd1LHB0CQkleGNjLCA5OGY7IFwKKwkgY21wCQlWQUREUiwgUkVHMzsgXAorCWJnZXUscHQJCSV4Y2MsIDk4ZjsgXAorCSBsZHgJCVtSRUcxICsgMHgxMF0sIFJFRzM7IFwKKwlzdWIJCVZBRERSLCBSRUcyLCBSRUcyOyBcCisJYmEscHQJCSV4Y2MsIDk5ZjsgXAorCSBhZGQJCVJFRzMsIFJFRzIsIFJFRzE7IFwKKzk4OgliYSxwdAkJJXhjYywgOTdiOyBcCisJIGFkZAkJUkVHMSwgKDMgKiA4KSwgUkVHMTsgXAorOTk6CisKKwkvKiBXZSB1c2UgYSAzMksgVFNCIGZvciB0aGUgd2hvbGUga2VybmVsLCB0aGlzIGFsbG93cyB0bworCSAqIGhhbmRsZSBhYm91dCAxNk1CIG9mIG1vZHVsZXMgYW5kIHZtYWxsb2MgbWFwcGluZ3Mgd2l0aG91dAorCSAqIGluY3VycmluZyBtYW55IGhhc2ggY29uZmxpY3RzLgorCSAqLworI2RlZmluZSBLRVJORUxfVFNCX1NJWkVfQllURVMJKDMyICogMTAyNCkKKyNkZWZpbmUgS0VSTkVMX1RTQl9ORU5UUklFUwlcCisJKEtFUk5FTF9UU0JfU0laRV9CWVRFUyAvIDE2KQorI2RlZmluZSBLRVJORUxfVFNCNE1fTkVOVFJJRVMJNDA5NgorCisJLyogRG8gYSBrZXJuZWwgVFNCIGxvb2t1cCBhdCB0bD4wIG9uIFZBRERSK1RBRywgYnJhbmNoIHRvIE9LX0xBQkVMCisJICogb24gVFNCIGhpdC4gIFJFRzEsIFJFRzIsIFJFRzMsIGFuZCBSRUc0IGFyZSB1c2VkIGFzIHRlbXBvcmFyaWVzCisJICogYW5kIHRoZSBmb3VuZCBUVEUgd2lsbCBiZSBsZWZ0IGluIFJFRzEuICBSRUczIGFuZCBSRUc0IG11c3QKKwkgKiBiZSBhbiBldmVuL29kZCBwYWlyIG9mIHJlZ2lzdGVycy4KKwkgKgorCSAqIFZBRERSIGFuZCBUQUcgd2lsbCBiZSBwcmVzZXJ2ZWQgYW5kIG5vdCBjbG9iYmVyZWQgYnkgdGhpcyBtYWNyby4KKwkgKi8KKyNkZWZpbmUgS0VSTl9UU0JfTE9PS1VQX1RMMShWQUREUiwgVEFHLCBSRUcxLCBSRUcyLCBSRUczLCBSRUc0LCBPS19MQUJFTCkgXAorCXNldGhpCQklaGkoc3dhcHBlcl90c2IpLCBSRUcxOyBcCisJb3IJCVJFRzEsICVsbyhzd2FwcGVyX3RzYiksIFJFRzE7IFwKKwlzcmx4CQlWQUREUiwgUEFHRV9TSElGVCwgUkVHMjsgXAorCWFuZAkJUkVHMiwgKEtFUk5FTF9UU0JfTkVOVFJJRVMgLSAxKSwgUkVHMjsgXAorCXNsbHgJCVJFRzIsIDQsIFJFRzI7IFwKKwlhZGQJCVJFRzEsIFJFRzIsIFJFRzI7IFwKKwlLVFNCX0xPQURfUVVBRChSRUcyLCBSRUczKTsgXAorCWNtcAkJUkVHMywgVEFHOyBcCisJYmUsYSxwdAkJJXhjYywgT0tfTEFCRUw7IFwKKwkgbW92CQlSRUc0LCBSRUcxOworCisJLyogVGhpcyB2ZXJzaW9uIHVzZXMgYSB0cmljaywgdGhlIFRBRyBpcyBhbHJlYWR5IChWQUREUiA+PiAyMikgc28KKwkgKiB3ZSBjYW4gbWFrZSB1c2Ugb2YgdGhhdCBmb3IgdGhlIGluZGV4IGNvbXB1dGF0aW9uLgorCSAqLworI2RlZmluZSBLRVJOX1RTQjRNX0xPT0tVUF9UTDEoVEFHLCBSRUcxLCBSRUcyLCBSRUczLCBSRUc0LCBPS19MQUJFTCkgXAorCXNldGhpCQklaGkoc3dhcHBlcl80bV90c2IpLCBSRUcxOyBcCisJb3IJCVJFRzEsICVsbyhzd2FwcGVyXzRtX3RzYiksIFJFRzE7IFwKKwlhbmQJCVRBRywgKEtFUk5FTF9UU0JfTkVOVFJJRVMgLSAxKSwgUkVHMjsgXAorCXNsbHgJCVJFRzIsIDQsIFJFRzI7IFwKKwlhZGQJCVJFRzEsIFJFRzIsIFJFRzI7IFwKKwlLVFNCX0xPQURfUVVBRChSRUcyLCBSRUczKTsgXAorCWNtcAkJUkVHMywgVEFHOyBcCisJYmUsYSxwdAkJJXhjYywgT0tfTEFCRUw7IFwKKwkgbW92CQlSRUc0LCBSRUcxOworCisjZW5kaWYgLyogIShfU1BBUkM2NF9UU0JfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3R0YWJsZS5oCmluZGV4IDI3ODRmODAuLjJkNWUzYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaApAQCAtOTMsNyArOTMsNyBAQAogCQogI2RlZmluZSBTWVNDQUxMX1RSQVAocm91dGluZSwgc3lzdGJsKQkJCVwKIAlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAotCWJhLHB0CSV4Y2MsIHNjZXRyYXA7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcDsJCQkJXAogMTA5Ogkgb3IJJWc3LCAlbG8oMTA5YiksICVnNzsJCQlcCiAJc2V0aGkJJWhpKHN5c3RibCksICVsNzsJCQlcCiAJYmEscHQJJXhjYywgcm91dGluZTsJCQkJXApAQCAtMTA5LDE0ICsxMDksMTQgQEAKIAlub3A7bm9wO25vcDsKIAkKICNkZWZpbmUgVFJBUF9VVFJBUChoYW5kbGVyLGx2bCkJCQkJXAotCWxkeAlbJWc2ICsgVElfVVRSQVBTXSwgJWcxOwkJCVwKLQlzZXRoaQklaGkoMTA5ZiksICVnNzsJCQkJXAotCWJyeixwbgklZzEsIHV0cmFwOwkJCQlcCi0JIG9yCSVnNywgJWxvKDEwOWYpLCAlZzc7CQkJXAotCWJhLHB0CSV4Y2MsIHV0cmFwOwkJCQlcCi0xMDk6CSBsZHgJWyVnMSArIGhhbmRsZXIqOF0sICVnMTsJCQlcCi0JYmEscHQJJXhjYywgdXRyYXBfaWxsOwkJCVwKLQkgbW92CWx2bCwgJW8xOworCW1vdgloYW5kbGVyLCAlZzM7CQkJCVwKKwliYSxwdAkleGNjLCB1dHJhcF90cmFwOwkJCVwKKwkgbW92CWx2bCwgJWc0OwkJCQlcCisJbm9wOwkJCQkJCVwKKwlub3A7CQkJCQkJXAorCW5vcDsJCQkJCQlcCisJbm9wOwkJCQkJCVwKKwlub3A7CiAKICNpZmRlZiBDT05GSUdfU1VOT1NfRU1VTAogI2RlZmluZSBTVU5PU19TWVNDQUxMX1RSQVAgU1lTQ0FMTF9UUkFQKGxpbnV4X3NwYXJjX3N5c2NhbGwzMiwgc3Vub3Nfc3lzX3RhYmxlKQpAQCAtMTM2LDggKzEzNiw2IEBACiAjZWxzZQogI2RlZmluZSBTT0xBUklTX1NZU0NBTExfVFJBUCBUUkFQKHNvbGFyaXNfc3lzY2FsbCkKICNlbmRpZgotLyogRklYTUU6IFdyaXRlIHRoZXNlIGFjdHVhbGx5ICovCQotI2RlZmluZSBORVRCU0RfU1lTQ0FMTF9UUkFQIFRSQVAobmV0YnNkX3N5c2NhbGwpCiAjZGVmaW5lIEJSRUFLUE9JTlRfVFJBUCBUUkFQKGJyZWFrcG9pbnRfdHJhcCkKIAogI2RlZmluZSBUUkFQX0lSUShyb3V0aW5lLCBsZXZlbCkJCQlcCkBAIC0xODIsNiArMTgwLDI2IEBACiAjZGVmaW5lIEtQUk9CRVNfVFJBUChsdmwpIFRSQVBfQVJHKGJhZF90cmFwLCBsdmwpCiAjZW5kaWYKIAorI2RlZmluZSBTVU40Vl9JVFNCX01JU1MJCQkJCVwKKwlsZHhhCVslZzBdIEFTSV9TQ1JBVENIUEFELCAlZzI7CQlcCisJbGR4CVslZzIgKyBIVl9GQVVMVF9JX0FERFJfT0ZGU0VUXSwgJWc0OwlcCisJbGR4CVslZzIgKyBIVl9GQVVMVF9JX0NUWF9PRkZTRVRdLCAlZzU7CVwKKwlzcmx4CSVnNCwgMjIsICVnNjsJCQkJXAorCWJhLHB0CSV4Y2MsIHN1bjR2X2l0c2JfbWlzczsJCQlcCisJIG5vcDsJCQkJCQlcCisJbm9wOwkJCQkJCVwKKwlub3A7CisKKyNkZWZpbmUgU1VONFZfRFRTQl9NSVNTCQkJCQlcCisJbGR4YQlbJWcwXSBBU0lfU0NSQVRDSFBBRCwgJWcyOwkJXAorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9BRERSX09GRlNFVF0sICVnNDsJXAorCWxkeAlbJWcyICsgSFZfRkFVTFRfRF9DVFhfT0ZGU0VUXSwgJWc1OwlcCisJc3JseAklZzQsIDIyLCAlZzY7CQkJCVwKKwliYSxwdAkleGNjLCBzdW40dl9kdHNiX21pc3M7CQkJXAorCSBub3A7CQkJCQkJXAorCW5vcDsJCQkJCQlcCisJbm9wOworCiAvKiBCZWZvcmUgdG91Y2hpbmcgdGhlc2UgbWFjcm9zLCB5b3Ugb3dlIGl0IHRvIHlvdXJzZWxmIHRvIGdvIGFuZAogICogc2VlIGhvdyBhcmNoL3NwYXJjNjQva2VybmVsL3dpbmZpeHVwLlMgd29ya3MuLi4gLURhdmVNCiAgKgpAQCAtMjIxLDYgKzIzOSwzMSBAQAogCXNhdmVkOyByZXRyeTsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJXAogCW5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwogCisjZGVmaW5lIFNQSUxMXzBfTk9STUFMX0VUUkFQCQkJCVwKK2V0cmFwX2tlcm5lbF9zcGlsbDoJCQkJCVwKKwlzdHgJJWwwLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MDBdOwkJXAorCXN0eAklbDEsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwOF07CQlcCisJc3R4CSVsMiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDEwXTsJCVwKKwlzdHgJJWwzLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MThdOwkJXAorCXN0eAklbDQsIFslc3AgKyBTVEFDS19CSUFTICsgMHgyMF07CQlcCisJc3R4CSVsNSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDI4XTsJCVwKKwlzdHgJJWw2LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MzBdOwkJXAorCXN0eAklbDcsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzOF07CQlcCisJc3R4CSVpMCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDQwXTsJCVwKKwlzdHgJJWkxLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NDhdOwkJXAorCXN0eAklaTIsIFslc3AgKyBTVEFDS19CSUFTICsgMHg1MF07CQlcCisJc3R4CSVpMywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDU4XTsJCVwKKwlzdHgJJWk0LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NjBdOwkJXAorCXN0eAklaTUsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2OF07CQlcCisJc3R4CSVpNiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDcwXTsJCVwKKwlzdHgJJWk3LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NzhdOwkJXAorCXNhdmVkOwkJCQkJCVwKKwlzdWIJJWcxLCAyLCAlZzE7CQkJCVwKKwliYSxwdAkleGNjLCBldHJhcF9zYXZlOwkJCVwKKwl3cnByCSVnMSwgJWN3cDsJCQkJXAorCW5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwkJXAorCW5vcDsgbm9wOyBub3A7IG5vcDsKKwogLyogTm9ybWFsIDY0Yml0IHNwaWxsICovCiAjZGVmaW5lIFNQSUxMXzFfR0VORVJJQyhBU0kpCQkJCVwKIAlhZGQJJXNwLCBTVEFDS19CSUFTICsgMHgwMCwgJWcxOwkJXApAQCAtMjU0LDYgKzI5Nyw2NyBAQAogCWIsYSxwdAkleGNjLCBzcGlsbF9maXh1cF9tbmE7CQkJXAogCWIsYSxwdAkleGNjLCBzcGlsbF9maXh1cDsKIAorI2RlZmluZSBTUElMTF8xX0dFTkVSSUNfRVRSQVAJCQkJXAorZXRyYXBfdXNlcl9zcGlsbF82NGJpdDoJCQkJCVwKKwlzdHhhCSVsMCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDAwXSAlYXNpOwlcCisJc3R4YQklbDEsIFslc3AgKyBTVEFDS19CSUFTICsgMHgwOF0gJWFzaTsJXAorCXN0eGEJJWwyLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MTBdICVhc2k7CVwKKwlzdHhhCSVsMywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDE4XSAlYXNpOwlcCisJc3R4YQklbDQsIFslc3AgKyBTVEFDS19CSUFTICsgMHgyMF0gJWFzaTsJXAorCXN0eGEJJWw1LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4MjhdICVhc2k7CVwKKwlzdHhhCSVsNiwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDMwXSAlYXNpOwlcCisJc3R4YQklbDcsIFslc3AgKyBTVEFDS19CSUFTICsgMHgzOF0gJWFzaTsJXAorCXN0eGEJJWkwLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NDBdICVhc2k7CVwKKwlzdHhhCSVpMSwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDQ4XSAlYXNpOwlcCisJc3R4YQklaTIsIFslc3AgKyBTVEFDS19CSUFTICsgMHg1MF0gJWFzaTsJXAorCXN0eGEJJWkzLCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NThdICVhc2k7CVwKKwlzdHhhCSVpNCwgWyVzcCArIFNUQUNLX0JJQVMgKyAweDYwXSAlYXNpOwlcCisJc3R4YQklaTUsIFslc3AgKyBTVEFDS19CSUFTICsgMHg2OF0gJWFzaTsJXAorCXN0eGEJJWk2LCBbJXNwICsgU1RBQ0tfQklBUyArIDB4NzBdICVhc2k7CVwKKwlzdHhhCSVpNywgWyVzcCArIFNUQUNLX0JJQVMgKyAweDc4XSAlYXNpOwlcCisJc2F2ZWQ7CQkJCQkJXAorCXN1YgklZzEsIDIsICVnMTsJCQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwX3NhdmU7CQkJXAorCSB3cnByCSVnMSwgJWN3cDsJCQkJXAorCW5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7CQkJCVwKKwliYSxhLHB0CSV4Y2MsIGV0cmFwX3NwaWxsX2ZpeHVwXzY0Yml0OwkJXAorCWJhLGEscHQJJXhjYywgZXRyYXBfc3BpbGxfZml4dXBfNjRiaXQ7CQlcCisJYmEsYSxwdAkleGNjLCBldHJhcF9zcGlsbF9maXh1cF82NGJpdDsKKworI2RlZmluZSBTUElMTF8xX0dFTkVSSUNfRVRSQVBfRklYVVAJCQlcCitldHJhcF9zcGlsbF9maXh1cF82NGJpdDoJCQkJXAorCWxkdWIJWyVnNiArIFRJX1dTQVZFRF0sICVnMTsJCQlcCisJc2xsCSVnMSwgMywgJWczOwkJCQlcCisJYWRkCSVnNiwgJWczLCAlZzM7CQkJCVwKKwlzdHgJJXNwLCBbJWczICsgVElfUldJTl9TUFRSU107CQlcCisJc2xsCSVnMSwgNywgJWczOwkJCQlcCisJYWRkCSVnNiwgJWczLCAlZzM7CQkJCVwKKwlzdHgJJWwwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDBdOwlcCisJc3R4CSVsMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDA4XTsJXAorCXN0eAklbDIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxMF07CVwKKwlzdHgJJWwzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MThdOwlcCisJc3R4CSVsNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDIwXTsJXAorCXN0eAklbDUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyOF07CVwKKwlzdHgJJWw2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MzBdOwlcCisJc3R4CSVsNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDM4XTsJXAorCXN0eAklaTAsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg0MF07CVwKKwlzdHgJJWkxLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NDhdOwlcCisJc3R4CSVpMiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDUwXTsJXAorCXN0eAklaTMsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg1OF07CVwKKwlzdHgJJWk0LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NjBdOwlcCisJc3R4CSVpNSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDY4XTsJXAorCXN0eAklaTYsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHg3MF07CVwKKwlzdHgJJWk3LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4NzhdOwlcCisJYWRkCSVnMSwgMSwgJWcxOwkJCQlcCisJc3RiCSVnMSwgWyVnNiArIFRJX1dTQVZFRF07CQkJXAorCXNhdmVkOwkJCQkJCVwKKwlyZHByCSVjd3AsICVnMTsJCQkJXAorCXN1YgklZzEsIDIsICVnMTsJCQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwX3NhdmU7CQkJXAorCSB3cnByCSVnMSwgJWN3cDsJCQkJXAorCW5vcDsgbm9wOyBub3AKKwogLyogTm9ybWFsIDMyYml0IHNwaWxsICovCiAjZGVmaW5lIFNQSUxMXzJfR0VORVJJQyhBU0kpCQkJCVwKIAlzcmwJJXNwLCAwLCAlc3A7CQkJCVwKQEAgLTI4Nyw2ICszOTEsNjggQEAKIAliLGEscHQJJXhjYywgc3BpbGxfZml4dXBfbW5hOwkJCVwKIAliLGEscHQJJXhjYywgc3BpbGxfZml4dXA7CiAKKyNkZWZpbmUgU1BJTExfMl9HRU5FUklDX0VUUkFQCQlcCitldHJhcF91c2VyX3NwaWxsXzMyYml0OgkJCVwKKwlzcmwJJXNwLCAwLCAlc3A7CQlcCisJc3R3YQklbDAsIFslc3AgKyAweDAwXSAlYXNpOwlcCisJc3R3YQklbDEsIFslc3AgKyAweDA0XSAlYXNpOwlcCisJc3R3YQklbDIsIFslc3AgKyAweDA4XSAlYXNpOwlcCisJc3R3YQklbDMsIFslc3AgKyAweDBjXSAlYXNpOwlcCisJc3R3YQklbDQsIFslc3AgKyAweDEwXSAlYXNpOwlcCisJc3R3YQklbDUsIFslc3AgKyAweDE0XSAlYXNpOwlcCisJc3R3YQklbDYsIFslc3AgKyAweDE4XSAlYXNpOwlcCisJc3R3YQklbDcsIFslc3AgKyAweDFjXSAlYXNpOwlcCisJc3R3YQklaTAsIFslc3AgKyAweDIwXSAlYXNpOwlcCisJc3R3YQklaTEsIFslc3AgKyAweDI0XSAlYXNpOwlcCisJc3R3YQklaTIsIFslc3AgKyAweDI4XSAlYXNpOwlcCisJc3R3YQklaTMsIFslc3AgKyAweDJjXSAlYXNpOwlcCisJc3R3YQklaTQsIFslc3AgKyAweDMwXSAlYXNpOwlcCisJc3R3YQklaTUsIFslc3AgKyAweDM0XSAlYXNpOwlcCisJc3R3YQklaTYsIFslc3AgKyAweDM4XSAlYXNpOwlcCisJc3R3YQklaTcsIFslc3AgKyAweDNjXSAlYXNpOwlcCisJc2F2ZWQ7CQkJCVwKKwlzdWIJJWcxLCAyLCAlZzE7CQlcCisJYmEscHQJJXhjYywgZXRyYXBfc2F2ZTsJXAorCSB3cnByCSVnMSwgJWN3cDsJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7CQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOwkJXAorCWJhLGEscHQJJXhjYywgZXRyYXBfc3BpbGxfZml4dXBfMzJiaXQ7IFwKKwliYSxhLHB0CSV4Y2MsIGV0cmFwX3NwaWxsX2ZpeHVwXzMyYml0OyBcCisJYmEsYSxwdAkleGNjLCBldHJhcF9zcGlsbF9maXh1cF8zMmJpdDsKKworI2RlZmluZSBTUElMTF8yX0dFTkVSSUNfRVRSQVBfRklYVVAJCQlcCitldHJhcF9zcGlsbF9maXh1cF8zMmJpdDoJCQkJXAorCWxkdWIJWyVnNiArIFRJX1dTQVZFRF0sICVnMTsJCQlcCisJc2xsCSVnMSwgMywgJWczOwkJCQlcCisJYWRkCSVnNiwgJWczLCAlZzM7CQkJCVwKKwlzdHgJJXNwLCBbJWczICsgVElfUldJTl9TUFRSU107CQlcCisJc2xsCSVnMSwgNywgJWczOwkJCQlcCisJYWRkCSVnNiwgJWczLCAlZzM7CQkJCVwKKwlzdHcJJWwwLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MDBdOwlcCisJc3R3CSVsMSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDA0XTsJXAorCXN0dwklbDIsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgwOF07CVwKKwlzdHcJJWwzLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MGNdOwlcCisJc3R3CSVsNCwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDEwXTsJXAorCXN0dwklbDUsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgxNF07CVwKKwlzdHcJJWw2LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MThdOwlcCisJc3R3CSVsNywgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDFjXTsJXAorCXN0dwklaTAsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyMF07CVwKKwlzdHcJJWkxLCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MjRdOwlcCisJc3R3CSVpMiwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDI4XTsJXAorCXN0dwklaTMsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgyY107CVwKKwlzdHcJJWk0LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4MzBdOwlcCisJc3R3CSVpNSwgWyVnMyArIFRJX1JFR19XSU5ET1cgKyAweDM0XTsJXAorCXN0dwklaTYsIFslZzMgKyBUSV9SRUdfV0lORE9XICsgMHgzOF07CVwKKwlzdHcJJWk3LCBbJWczICsgVElfUkVHX1dJTkRPVyArIDB4M2NdOwlcCisJYWRkCSVnMSwgMSwgJWcxOwkJCQlcCisJc3RiCSVnMSwgWyVnNiArIFRJX1dTQVZFRF07CQkJXAorCXNhdmVkOwkJCQkJCVwKKwlyZHByCSVjd3AsICVnMTsJCQkJXAorCXN1YgklZzEsIDIsICVnMTsJCQkJXAorCWJhLHB0CSV4Y2MsIGV0cmFwX3NhdmU7CQkJXAorCSB3cnByCSVnMSwgJWN3cDsJCQkJXAorCW5vcDsgbm9wOyBub3AKKwogI2RlZmluZSBTUElMTF8xX05PUk1BTCBTUElMTF8xX0dFTkVSSUMoQVNJX0FJVVApCiAjZGVmaW5lIFNQSUxMXzJfTk9STUFMIFNQSUxMXzJfR0VORVJJQyhBU0lfQUlVUCkKICNkZWZpbmUgU1BJTExfM19OT1JNQUwgU1BJTExfMF9OT1JNQUwKQEAgLTMyNSw2ICs0OTEsMzUgQEAKIAlyZXN0b3JlZDsgcmV0cnk7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CVwKIAlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsKIAorI2RlZmluZSBGSUxMXzBfTk9STUFMX1JUUkFQCQkJCVwKK2tlcm5fcnR0X2ZpbGw6CQkJCQkJXAorCXJkcHIJJWN3cCwgJWcxOwkJCQlcCisJc3ViCSVnMSwgMSwgJWcxOwkJCQlcCisJd3JwcgklZzEsICVjd3A7CQkJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDAwXSwgJWwwOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MDhdLCAlbDE7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgxMF0sICVsMjsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDE4XSwgJWwzOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MjBdLCAlbDQ7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHgyOF0sICVsNTsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDMwXSwgJWw2OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4MzhdLCAlbDc7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg0MF0sICVpMDsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDQ4XSwgJWkxOwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NTBdLCAlaTI7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg1OF0sICVpMzsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDYwXSwgJWk0OwkJXAorCWxkeAlbJXNwICsgU1RBQ0tfQklBUyArIDB4NjhdLCAlaTU7CQlcCisJbGR4CVslc3AgKyBTVEFDS19CSUFTICsgMHg3MF0sICVpNjsJCVwKKwlsZHgJWyVzcCArIFNUQUNLX0JJQVMgKyAweDc4XSwgJWk3OwkJXAorCXJlc3RvcmVkOwkJCQkJXAorCWFkZAklZzEsIDEsICVnMTsJCQkJXAorCWJhLHB0CSV4Y2MsIGtlcm5fcnR0X3Jlc3RvcmU7CQkJXAorCSB3cnByCSVnMSwgJWN3cDsJCQkJXAorCW5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7CisKKwogLyogTm9ybWFsIDY0Yml0IGZpbGwgKi8KICNkZWZpbmUgRklMTF8xX0dFTkVSSUMoQVNJKQkJCQlcCiAJYWRkCSVzcCwgU1RBQ0tfQklBUyArIDB4MDAsICVnMTsJCVwKQEAgLTM1Niw2ICs1NTEsMzMgQEAKIAliLGEscHQJJXhjYywgZmlsbF9maXh1cF9tbmE7CQkJXAogCWIsYSxwdAkleGNjLCBmaWxsX2ZpeHVwOwogCisjZGVmaW5lIEZJTExfMV9HRU5FUklDX1JUUkFQCQkJCVwKK3VzZXJfcnR0X2ZpbGxfNjRiaXQ6CQkJCQlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MDBdICVhc2ksICVsMDsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDA4XSAlYXNpLCAlbDE7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHgxMF0gJWFzaSwgJWwyOwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MThdICVhc2ksICVsMzsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDIwXSAlYXNpLCAlbDQ7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHgyOF0gJWFzaSwgJWw1OwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4MzBdICVhc2ksICVsNjsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDM4XSAlYXNpLCAlbDc7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg0MF0gJWFzaSwgJWkwOwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NDhdICVhc2ksICVpMTsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDUwXSAlYXNpLCAlaTI7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg1OF0gJWFzaSwgJWkzOwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NjBdICVhc2ksICVpNDsJXAorCWxkeGEJWyVzcCArIFNUQUNLX0JJQVMgKyAweDY4XSAlYXNpLCAlaTU7CVwKKwlsZHhhCVslc3AgKyBTVEFDS19CSUFTICsgMHg3MF0gJWFzaSwgJWk2OwlcCisJbGR4YQlbJXNwICsgU1RBQ0tfQklBUyArIDB4NzhdICVhc2ksICVpNzsJXAorCWJhLHB0CSV4Y2MsIHVzZXJfcnR0X3ByZV9yZXN0b3JlOwkJXAorCSByZXN0b3JlZDsJCQkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOwkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCisJYmEsYSxwdAkleGNjLCB1c2VyX3J0dF9maWxsX2ZpeHVwOwkJXAorCWJhLGEscHQJJXhjYywgdXNlcl9ydHRfZmlsbF9maXh1cDsJCVwKKwliYSxhLHB0CSV4Y2MsIHVzZXJfcnR0X2ZpbGxfZml4dXA7CisKKwogLyogTm9ybWFsIDMyYml0IGZpbGwgKi8KICNkZWZpbmUgRklMTF8yX0dFTkVSSUMoQVNJKQkJCQlcCiAJc3JsCSVzcCwgMCwgJXNwOwkJCQlcCkBAIC0zODcsNiArNjA5LDM0IEBACiAJYixhLHB0CSV4Y2MsIGZpbGxfZml4dXBfbW5hOwkJCVwKIAliLGEscHQJJXhjYywgZmlsbF9maXh1cDsKIAorI2RlZmluZSBGSUxMXzJfR0VORVJJQ19SVFJBUAkJCQlcCit1c2VyX3J0dF9maWxsXzMyYml0OgkJCQkJXAorCXNybAklc3AsIDAsICVzcDsJCQkJXAorCWxkdXdhCVslc3AgKyAweDAwXSAlYXNpLCAlbDA7CQkJXAorCWxkdXdhCVslc3AgKyAweDA0XSAlYXNpLCAlbDE7CQkJXAorCWxkdXdhCVslc3AgKyAweDA4XSAlYXNpLCAlbDI7CQkJXAorCWxkdXdhCVslc3AgKyAweDBjXSAlYXNpLCAlbDM7CQkJXAorCWxkdXdhCVslc3AgKyAweDEwXSAlYXNpLCAlbDQ7CQkJXAorCWxkdXdhCVslc3AgKyAweDE0XSAlYXNpLCAlbDU7CQkJXAorCWxkdXdhCVslc3AgKyAweDE4XSAlYXNpLCAlbDY7CQkJXAorCWxkdXdhCVslc3AgKyAweDFjXSAlYXNpLCAlbDc7CQkJXAorCWxkdXdhCVslc3AgKyAweDIwXSAlYXNpLCAlaTA7CQkJXAorCWxkdXdhCVslc3AgKyAweDI0XSAlYXNpLCAlaTE7CQkJXAorCWxkdXdhCVslc3AgKyAweDI4XSAlYXNpLCAlaTI7CQkJXAorCWxkdXdhCVslc3AgKyAweDJjXSAlYXNpLCAlaTM7CQkJXAorCWxkdXdhCVslc3AgKyAweDMwXSAlYXNpLCAlaTQ7CQkJXAorCWxkdXdhCVslc3AgKyAweDM0XSAlYXNpLCAlaTU7CQkJXAorCWxkdXdhCVslc3AgKyAweDM4XSAlYXNpLCAlaTY7CQkJXAorCWxkdXdhCVslc3AgKyAweDNjXSAlYXNpLCAlaTc7CQkJXAorCWJhLHB0CSV4Y2MsIHVzZXJfcnR0X3ByZV9yZXN0b3JlOwkJXAorCSByZXN0b3JlZDsJCQkJCVwKKwlub3A7IG5vcDsgbm9wOyBub3A7IG5vcDsJCQlcCisJbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7CQkJXAorCWJhLGEscHQJJXhjYywgdXNlcl9ydHRfZmlsbF9maXh1cDsJCVwKKwliYSxhLHB0CSV4Y2MsIHVzZXJfcnR0X2ZpbGxfZml4dXA7CQlcCisJYmEsYSxwdAkleGNjLCB1c2VyX3J0dF9maWxsX2ZpeHVwOworCQkKKwogI2RlZmluZSBGSUxMXzFfTk9STUFMIEZJTExfMV9HRU5FUklDKEFTSV9BSVVQKQogI2RlZmluZSBGSUxMXzJfTk9STUFMIEZJTExfMl9HRU5FUklDKEFTSV9BSVVQKQogI2RlZmluZSBGSUxMXzNfTk9STUFMIEZJTExfMF9OT1JNQUwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKaW5kZXggMjAzZThlZS4uYWZlMjM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC91YWNjZXNzLmgKQEAgLTExNCwxNiArMTE0LDYgQEAKIGRlZmF1bHQ6IF9fcHVfcmV0ID0gX19wdXRfdXNlcl9iYWQoKTsgYnJlYWs7IFwKIH0gX19wdV9yZXQ7IH0pCiAKLSNkZWZpbmUgX19wdXRfdXNlcl9ub2NoZWNrX3JldChkYXRhLGFkZHIsc2l6ZSxyZXR2YWwpICh7IFwKLXJlZ2lzdGVyIGludCBfX2ZvbyBfX2FzbV9fICgibDEiKTsgXAotc3dpdGNoIChzaXplKSB7IFwKLWNhc2UgMTogX19wdXRfdXNlcl9hc21fcmV0KGRhdGEsYixhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCi1jYXNlIDI6IF9fcHV0X3VzZXJfYXNtX3JldChkYXRhLGgsYWRkcixyZXR2YWwsX19mb28pOyBicmVhazsgXAotY2FzZSA0OiBfX3B1dF91c2VyX2FzbV9yZXQoZGF0YSx3LGFkZHIscmV0dmFsLF9fZm9vKTsgYnJlYWs7IFwKLWNhc2UgODogX19wdXRfdXNlcl9hc21fcmV0KGRhdGEseCxhZGRyLHJldHZhbCxfX2Zvbyk7IGJyZWFrOyBcCi1kZWZhdWx0OiBpZiAoX19wdXRfdXNlcl9iYWQoKSkgcmV0dXJuIHJldHZhbDsgYnJlYWs7IFwKLX0gfSkKLQogI2RlZmluZSBfX3B1dF91c2VyX2FzbSh4LHNpemUsYWRkcixyZXQpCQkJCQlcCiBfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAogCSIvKiBQdXQgdXNlciBhc20sIGlubGluZS4gKi9cbiIJCQkJCVwKQEAgLTEzNiw0MCArMTI2LDEzIEBACiAJImIJMmJcblx0IgkJCQkJCQlcCiAJIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKIAkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAotCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXHQiCQkJCQlcCiAJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAogCSIud29yZAkxYiwgM2Jcblx0IgkJCQkJCVwKIAkiLnByZXZpb3VzXG5cblx0IgkJCQkJCVwKICAgICAgICA6ICI9ciIgKHJldCkgOiAiciIgKHgpLCAiciIgKF9fbShhZGRyKSksCQkJCVwKIAkgImkiICgtRUZBVUxUKSkKIAotI2RlZmluZSBfX3B1dF91c2VyX2FzbV9yZXQoeCxzaXplLGFkZHIscmV0LGZvbykJCQkJXAotaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJldCkgJiYgcmV0ID09IC1FRkFVTFQpCQkJXAotX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJCVwKLQkiLyogUHV0IHVzZXIgYXNtIHJldCwgaW5saW5lLiAqL1xuIgkJCQlcCi0iMTpcdCIJInN0IiNzaXplICJhICUxLCBbJTJdICUlYXNpXG5cblx0IgkJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKLQkiLndvcmQJMWIsIF9fcmV0X2VmYXVsdFxuXG5cdCIJCQkJCVwKLQkiLnByZXZpb3VzXG5cblx0IgkJCQkJCVwKLSAgICAgICA6ICI9ciIgKGZvbykgOiAiciIgKHgpLCAiciIgKF9fbShhZGRyKSkpOwkJCVwKLWVsc2UJCQkJCQkJCQlcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJXAotCSIvKiBQdXQgdXNlciBhc20gcmV0LCBpbmxpbmUuICovXG4iCQkJCVwKLSIxOlx0Igkic3QiI3NpemUgImEgJTEsIFslMl0gJSVhc2lcblxuXHQiCQkJCVwKLQkiLnNlY3Rpb24gLmZpeHVwLCNhbGxvYywjZXhlY2luc3RyXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuIgkJCQkJCQlcCi0iMzpcblx0IgkJCQkJCQkJXAotCSJyZXRcblx0IgkJCQkJCQlcCi0JIiByZXN0b3JlICUlZzAsICUzLCAlJW8wXG5cblx0IgkJCQkJXAotCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJXAotCSIuYWxpZ24JNFxuXHQiCQkJCQkJCVwKLQkiLndvcmQJMWIsIDNiXG5cblx0IgkJCQkJCVwKLQkiLnByZXZpb3VzXG5cblx0IgkJCQkJCVwKLSAgICAgICA6ICI9ciIgKGZvbykgOiAiciIgKHgpLCAiciIgKF9fbShhZGRyKSksCQkJCVwKLSAgICAgICAgICJpIiAocmV0KSkKLQogZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKIAogI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soZGF0YSxhZGRyLHNpemUsdHlwZSkgKHsgXApAQCAtMjA2LDcgKzE2OSw3IEBACiAJImIJMmJcblx0IgkJCQkJCQlcCiAJIiBtb3YJJTMsICUwXG5cblx0IgkJCQkJCVwKIAkiLnByZXZpb3VzXG5cdCIJCQkJCQkJXAotCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXHQiCQkJCQlcCiAJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAogCSIud29yZAkxYiwgM2JcblxuXHQiCQkJCQkJXAogCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCkBAIC0yMTgsNyArMTgxLDcgQEAKIF9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQlcCiAJIi8qIEdldCB1c2VyIGFzbSByZXQsIGlubGluZS4gKi9cbiIJCQkJXAogIjE6XHQiCSJsZCIjc2l6ZSAiYSBbJTFdICUlYXNpLCAlMFxuXG5cdCIJCQkJXAotCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCQkJCVwKKwkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXHQiCQkJCQlcCiAJIi5hbGlnbgk0XG5cdCIJCQkJCQkJXAogCSIud29yZAkxYixfX3JldF9lZmF1bHRcblxuXHQiCQkJCQlcCiAJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKQEAgLTIzMyw3ICsxOTYsNyBAQAogCSJyZXRcblx0IgkJCQkJCQlcCiAJIiByZXN0b3JlICUlZzAsICUyLCAlJW8wXG5cblx0IgkJCQkJXAogCSIucHJldmlvdXNcblx0IgkJCQkJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIJCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG5cdCIJCQkJCVwKIAkiLmFsaWduCTRcblx0IgkJCQkJCQlcCiAJIi53b3JkCTFiLCAzYlxuXG5cdCIJCQkJCQlcCiAJIi5wcmV2aW91c1xuXHQiCQkJCQkJCVwKQEAgLTI4OSwxNCArMjUyLDcgQEAKIH0KICNkZWZpbmUgX19jb3B5X2luX3VzZXIgY29weV9pbl91c2VyCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2J6ZXJvX25vYXNpKHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCi1fX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQkKLQlyZXR1cm4gX19iemVyb19ub2FzaShhZGRyLCBzaXplKTsKLX0KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NsZWFyX3VzZXIodm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyk7CiAKICNkZWZpbmUgY2xlYXJfdXNlciBfX2NsZWFyX3VzZXIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC92ZGV2LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3ZkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTZlNmJlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC92ZGV2LmgKQEAgLTAsMCArMSwxNiBAQAorLyogdmRldi5oOiBTVU40ViB2aXJ0dWFsIGRldmljZSBpbnRlcmZhY2VzIGFuZCBkZWZpbmVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CisgKi8KKworI2lmbmRlZiBfU1BBUkM2NF9WREVWX0gKKyNkZWZpbmUgX1NQQVJDNjRfVkRFVl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gdTMyIHN1bjR2X3ZkZXZfZGV2aGFuZGxlOworZXh0ZXJuIGludCBzdW40dl92ZGV2X3Jvb3Q7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3VuNHZfdmRldl9kZXZpY2VfaW50ZXJydXB0KHVuc2lnbmVkIGludCk7CisKKyNlbmRpZiAvKiAhKF9TUEFSQzY0X1ZERVZfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQveG9yLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oCmluZGV4IDhiM2E3ZTQuLjhjZTNmMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQveG9yLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC94b3IuaApAQCAtMiw5ICsyLDExIEBACiAgKiBpbmNsdWRlL2FzbS1zcGFyYzY0L3hvci5oCiAgKgogICogSGlnaCBzcGVlZCB4b3JfYmxvY2sgb3BlcmF0aW9uIGZvciBSQUlENC81IHV0aWxpemluZyB0aGUKLSAqIFVsdHJhU3BhcmMgVmlzdWFsIEluc3RydWN0aW9uIFNldC4KKyAqIFVsdHJhU3BhcmMgVmlzdWFsIEluc3RydWN0aW9uIFNldCBhbmQgTmlhZ2FyYSBibG9jay1pbml0CisgKiB0d2luLWxvYWQgaW5zdHJ1Y3Rpb25zLgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSBKYWt1YiBKZWxpbmVrIChqakB1bHRyYS5saW51eC5jeikKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNiw4ICsxOCw3IEBACiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgotI2luY2x1ZGUgPGFzbS9hc2kuaD4KKyNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KIAogZXh0ZXJuIHZvaWQgeG9yX3Zpc18yKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKIGV4dGVybiB2b2lkIHhvcl92aXNfMyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKQEAgLTM3LDQgKzM4LDI5IEBACiAgICAgICAgIC5kb181CT0geG9yX3Zpc181LAogfTsKIAotI2RlZmluZSBYT1JfVFJZX1RFTVBMQVRFUyAgICAgICB4b3Jfc3BlZWQoJnhvcl9ibG9ja19WSVMpCitleHRlcm4gdm9pZCB4b3JfbmlhZ2FyYV8yKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIHhvcl9uaWFnYXJhXzModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCisJCQkgIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfbmlhZ2FyYV80KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkJICB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gdm9pZCB4b3JfbmlhZ2FyYV81KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorCQkJICB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworc3RhdGljIHN0cnVjdCB4b3JfYmxvY2tfdGVtcGxhdGUgeG9yX2Jsb2NrX25pYWdhcmEgPSB7CisgICAgICAgIC5uYW1lCT0gIk5pYWdhcmEiLAorICAgICAgICAuZG9fMgk9IHhvcl9uaWFnYXJhXzIsCisgICAgICAgIC5kb18zCT0geG9yX25pYWdhcmFfMywKKyAgICAgICAgLmRvXzQJPSB4b3JfbmlhZ2FyYV80LAorICAgICAgICAuZG9fNQk9IHhvcl9uaWFnYXJhXzUsCit9OworCisjdW5kZWYgWE9SX1RSWV9URU1QTEFURVMKKyNkZWZpbmUgWE9SX1RSWV9URU1QTEFURVMJCQkJXAorCWRvIHsJCQkJCQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX1ZJUyk7CQlcCisJCXhvcl9zcGVlZCgmeG9yX2Jsb2NrX25pYWdhcmEpOwkJXAorCX0gd2hpbGUgKDApCisKKy8qIEZvciBWSVMgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IE5pYWdhcmEuICAqLworI2RlZmluZSBYT1JfU0VMRUNUX1RFTVBMQVRFKEZBU1RFU1QpIFwKKwkodGxiX3R5cGUgPT0gaHlwZXJ2aXNvciA/ICZ4b3JfYmxvY2tfbmlhZ2FyYSA6ICZ4b3JfYmxvY2tfVklTKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYWx0ZXJuYXRpdmUuaCBiL2luY2x1ZGUvYXNtLXVtL2FsdGVybmF0aXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY0MzQzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXVtL2FsdGVybmF0aXZlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fVU1fQUxURVJOQVRJVkVfSAorI2RlZmluZSBfX1VNX0FMVEVSTkFUSVZFX0gKKworI2luY2x1ZGUgImFzbS9hcmNoL2FsdGVybmF0aXZlLmgiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9saW5rYWdlLmggYi9pbmNsdWRlL2FzbS12ODUwL2xpbmthZ2UuaAppbmRleCAyOTFjMmQwLi5iNjE4NWQzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9saW5rYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9saW5rYWdlLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAogI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKIAotLyogTm90aGluZyB0byBzZWUgaGVyZS4uLiAqLworI2lmZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvcG9sbC5oIGIvaW5jbHVkZS9hc20tdjg1MC9wb2xsLmgKaW5kZXggMDM2OTU2Mi4uYzEwMTc2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9wb2xsLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9wb2xsLmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgUE9MTFdSQkFORAkweDAxMDAKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oCmluZGV4IDRiNWNkNTUuLmNlY2JmN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmgKQEAgLTQwNSw4ICs0MDUsMTQgQEAKICh7CQkJCQkJCQlcCiAJaW50IGMsIG9sZDsJCQkJCQlcCiAJYyA9IGF0b21pY19yZWFkKHYpOwkJCQkJXAotCXdoaWxlIChjICE9ICh1KSAmJiAob2xkID0gYXRvbWljX2NtcHhjaGcoKHYpLCBjLCBjICsgKGEpKSkgIT0gYykgXAorCWZvciAoOzspIHsJCQkJCQlcCisJCWlmICh1bmxpa2VseShjID09ICh1KSkpCQkJCVwKKwkJCWJyZWFrOwkJCQkJXAorCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwkJXAorCQlpZiAobGlrZWx5KG9sZCA9PSBjKSkJCQkJXAorCQkJYnJlYWs7CQkJCQlcCiAJCWMgPSBvbGQ7CQkJCQlcCisJfQkJCQkJCQlcCiAJYyAhPSAodSk7CQkJCQkJXAogfSkKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCmluZGV4IDI2M2YwYTIuLmM4MDQzYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWNoZS5oCkBAIC0yMCw2ICsyMCw4IEBACiAgICAgICAgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBhZ2VfYWxpZ25lZCIpKSkKICNlbmRpZgogCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCmluZGV4IDlkYWMxOGRiLi5hODVmZTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaApAQCAtMjY5LDIzICsyNjksMTEgQEAKICAqLwogI2RlZmluZSBfX0lTQV9JT19iYXNlICgoY2hhciBfX2lvbWVtICopKFBBR0VfT0ZGU0VUKSkKIAotI2RlZmluZSBpc2FfcmVhZGIoYSkgcmVhZGIoX19JU0FfSU9fYmFzZSArIChhKSkKLSNkZWZpbmUgaXNhX3JlYWR3KGEpIHJlYWR3KF9fSVNBX0lPX2Jhc2UgKyAoYSkpCi0jZGVmaW5lIGlzYV9yZWFkbChhKSByZWFkbChfX0lTQV9JT19iYXNlICsgKGEpKQotI2RlZmluZSBpc2Ffd3JpdGViKGIsYSkgd3JpdGViKGIsX19JU0FfSU9fYmFzZSArIChhKSkKLSNkZWZpbmUgaXNhX3dyaXRldyh3LGEpIHdyaXRldyh3LF9fSVNBX0lPX2Jhc2UgKyAoYSkpCi0jZGVmaW5lIGlzYV93cml0ZWwobCxhKSB3cml0ZWwobCxfX0lTQV9JT19iYXNlICsgKGEpKQotI2RlZmluZSBpc2FfbWVtc2V0X2lvKGEsYixjKQkJbWVtc2V0X2lvKF9fSVNBX0lPX2Jhc2UgKyAoYSksKGIpLChjKSkKLSNkZWZpbmUgaXNhX21lbWNweV9mcm9taW8oYSxiLGMpCW1lbWNweV9mcm9taW8oKGEpLF9fSVNBX0lPX2Jhc2UgKyAoYiksKGMpKQotI2RlZmluZSBpc2FfbWVtY3B5X3RvaW8oYSxiLGMpCQltZW1jcHlfdG9pbyhfX0lTQV9JT19iYXNlICsgKGEpLChiKSwoYykpCi0KLQogLyoKICAqIEFnYWluLCB4ODYtNjQgZG9lcyBub3QgcmVxdWlyZSBtZW0gSU8gc3BlY2lmaWMgZnVuY3Rpb24uCiAgKi8KIAogI2RlZmluZSBldGhfaW9fY29weV9hbmRfc3VtKGEsYixjLGQpCQlldGhfY29weV9hbmRfc3VtKChhKSwodm9pZCAqKShiKSwoYyksKGQpKQotI2RlZmluZSBpc2FfZXRoX2lvX2NvcHlfYW5kX3N1bShhLGIsYyxkKQlldGhfY29weV9hbmRfc3VtKChhKSwodm9pZCAqKShfX0lTQV9JT19iYXNlICsgKGIpKSwoYyksKGQpKQogCiAvKioKICAqCWNoZWNrX3NpZ25hdHVyZQkJLQlmaW5kIEJJT1Mgc2lnbmF0dXJlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaAppbmRleCAxNmU0YmU0Li4xOWYwYzgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaApAQCAtMzQsMTIgKzM0LDEyIEBACiAJdW5zaWduZWQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewogCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLwotCQljbGVhcl9iaXQoY3B1LCAmcHJldi0+Y3B1X3ZtX21hc2spOworCQljcHVfY2xlYXIoY3B1LCBwcmV2LT5jcHVfdm1fbWFzayk7CiAjaWZkZWYgQ09ORklHX1NNUAogCQl3cml0ZV9wZGEobW11X3N0YXRlLCBUTEJTVEFURV9PSyk7CiAJCXdyaXRlX3BkYShhY3RpdmVfbW0sIG5leHQpOwogI2VuZGlmCi0JCXNldF9iaXQoY3B1LCAmbmV4dC0+Y3B1X3ZtX21hc2spOworCQljcHVfc2V0KGNwdSwgbmV4dC0+Y3B1X3ZtX21hc2spOwogCQlsb2FkX2NyMyhuZXh0LT5wZ2QpOwogCiAJCWlmICh1bmxpa2VseShuZXh0LT5jb250ZXh0LmxkdCAhPSBwcmV2LT5jb250ZXh0LmxkdCkpIApAQCAtNTAsNyArNTAsNyBAQAogCQl3cml0ZV9wZGEobW11X3N0YXRlLCBUTEJTVEFURV9PSyk7CiAJCWlmIChyZWFkX3BkYShhY3RpdmVfbW0pICE9IG5leHQpCiAJCQlvdXRfb2ZfbGluZV9idWcoKTsKLQkJaWYoIXRlc3RfYW5kX3NldF9iaXQoY3B1LCAmbmV4dC0+Y3B1X3ZtX21hc2spKSB7CisJCWlmICghY3B1X3Rlc3RfYW5kX3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKSkgewogCQkJLyogV2Ugd2VyZSBpbiBsYXp5IHRsYiBtb2RlIGFuZCBsZWF2ZV9tbSBkaXNhYmxlZCAKIAkJCSAqIHRsYiBmbHVzaCBJUEkgZGVsaXZlcnkuIFdlIG11c3QgcmVsb2FkIENSMwogCQkJICogdG8gbWFrZSBzdXJlIHRvIHVzZSBubyBmcmVlZCBwYWdlIHRhYmxlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wY2kuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wY2kuaAppbmRleCBmZDAzZTE1Li44YTA1YWYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BjaS5oCkBAIC0xOSw4ICsxOSw2IEBACiAjZW5kaWYKICNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAogCi1leHRlcm4gaW50IG5vX2lvbW11LCBmb3JjZV9pb21tdTsKLQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX21lbV9zdGFydDsKICNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MTAwMAogI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCShwY2lfbWVtX3N0YXJ0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BlcmNwdS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BlcmNwdS5oCmluZGV4IDI5YTZiMDQuLjQ0MDViNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGVyY3B1LmgKQEAgLTI2LDEwICsyNiw5IEBACiAjZGVmaW5lIHBlcmNwdV9tb2Rjb3B5KHBjcHVkc3QsIHNyYywgc2l6ZSkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IF9faTsJCQkJCVwKLQlmb3IgKF9faSA9IDA7IF9faSA8IE5SX0NQVVM7IF9faSsrKQkJCVwKLQkJaWYgKGNwdV9wb3NzaWJsZShfX2kpKQkJCQlcCi0JCQltZW1jcHkoKHBjcHVkc3QpK19fcGVyX2NwdV9vZmZzZXQoX19pKSwJXAotCQkJICAgICAgIChzcmMpLCAoc2l6ZSkpOwkJCVwKKwlmb3JfZWFjaF9jcHUoX19pKQkJCQkJXAorCQltZW1jcHkoKHBjcHVkc3QpK19fcGVyX2NwdV9vZmZzZXQoX19pKSwJCVwKKwkJICAgICAgIChzcmMpLCAoc2l6ZSkpOwkJCQlcCiB9IHdoaWxlICgwKQogCiBleHRlcm4gdm9pZCBzZXR1cF9wZXJfY3B1X2FyZWFzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wZ3RhYmxlLmgKaW5kZXggOGZiZjRkZC4uZGVmOTAzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGd0YWJsZS5oCkBAIC0xMzEsNyArMTMxLDcgQEAKICNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQogI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCiAKLSNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRS9QR0RJUl9TSVpFKQorI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoKFRBU0tfU0laRS0xKS9QR0RJUl9TSVpFKzEpCiAjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0yNzMsNyArMjczLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfaHVnZShwdGVfdCBwdGUpCQl7IHJldHVybiAocHRlX3ZhbChwdGUpICYgX19MQVJHRV9QVEUpID09IF9fTEFSR0VfUFRFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfaHVnZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QU0U7IH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9VU0VSKSk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfVVNFUikpOyByZXR1cm4gcHRlOyB9CkBAIC0yODUsNyArMjg1LDcgQEAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfRElSVFkpKTsgcmV0dXJuIHB0ZTsgfQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9BQ0NFU1NFRCkpOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkJeyBzZXRfcHRlKCZwdGUsIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX1JXKSk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpCXsgc2V0X3B0ZSgmcHRlLCBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfX0xBUkdFX1BURSkpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKQl7IHNldF9wdGUoJnB0ZSwgX19wdGUocHRlX3ZhbChwdGUpIHwgX1BBR0VfUFNFKSk7IHJldHVybiBwdGU7IH0KIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCkBAIC0yOTMsMTkgKzI5MywxOSBAQAogewogCWlmICghcHRlX2RpcnR5KCpwdGVwKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChfUEFHRV9CSVRfRElSVFksIHB0ZXApOworCXJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQoX1BBR0VfQklUX0RJUlRZLCAmcHRlcC0+cHRlKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKIAlpZiAoIXB0ZV95b3VuZygqcHRlcCkpCiAJCXJldHVybiAwOwotCXJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQoX1BBR0VfQklUX0FDQ0VTU0VELCBwdGVwKTsKKwlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KF9QQUdFX0JJVF9BQ0NFU1NFRCwgJnB0ZXAtPnB0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7Ci0JY2xlYXJfYml0KF9QQUdFX0JJVF9SVywgcHRlcCk7CisJY2xlYXJfYml0KF9QQUdFX0JJVF9SVywgJnB0ZXAtPnB0ZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcG9sbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BvbGwuaAppbmRleCBjNDNjYmJhLi5jMDQ3NWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcG9sbC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wb2xsLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgUE9MTFdSQkFORAkweDAyMDAKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUJMHgxMDAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcHJvdG8uaAppbmRleCBlY2EzZjJkLi4zYmE4ZmQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcHJvdG8uaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcHJvdG8uaApAQCAtMzksNyArMzksNiBAQAogZXh0ZXJuIHZvaWQgaWEzMl9zeXNjYWxsKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW9tbXVfaG9sZV9pbml0KHZvaWQpOwogCi1leHRlcm4gdm9pZCB0aW1lX2luaXRfZ3RvZCh2b2lkKTsKIGV4dGVybiBpbnQgcG10aW1lcl9tYXJrX29mZnNldCh2b2lkKTsKIGV4dGVybiB2b2lkIHBtdGltZXJfcmVzdW1lKHZvaWQpOwogZXh0ZXJuIHZvaWQgcG10aW1lcl93YWl0KHVuc2lnbmVkKTsKQEAgLTEzNCw2ICsxMzMsNyBAQAogCiBleHRlcm4gaW50IHJlYm9vdF9mb3JjZTsKIGV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTsKK2V4dGVybiBpbnQgc2V0dXBfYWRkaXRpb25hbF9jcHVzKGNoYXIgKik7CiAKIGV4dGVybiB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BvbGwuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wb2xsLmgKaW5kZXggZGZmZTQ0Ny4uNmZkOTQ3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BvbGwuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcG9sbC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNkZWZpbmUgUE9MTE1TRwkJMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUJMHgwODAwCisjZGVmaW5lIFBPTExSREhVUCAgICAgICAweDIwMDAKIAogc3RydWN0IHBvbGxmZCB7CiAJaW50IGZkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY3BpLmggYi9pbmNsdWRlL2xpbnV4L2FjcGkuaAppbmRleCA4NGQzZDlmLi5kM2JjMjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjcGkuaApAQCAtNDI3LDcgKzQyNyw4IEBACiBleHRlcm4gc3RydWN0IGFjcGlfdGFibGVfbWNmZ19jb25maWcgKnBjaV9tbWNmZ19jb25maWc7CiBleHRlcm4gaW50IHBjaV9tbWNmZ19jb25maWdfbnVtOwogCi1leHRlcm4gaW50IHNiZl9wb3J0IDsKK2V4dGVybiBpbnQgc2JmX3BvcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBhY3BpX3ZpZGVvX2ZsYWdzOwogCiAjZWxzZQkvKiAhQ09ORklHX0FDUEkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QuaCBiL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgKaW5kZXggNmI4ZDczZC4uOWNmNjRiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oCkBAIC01NCw2ICs1NCw3IEBACiAjZGVmaW5lIENOVExfTENEQlBQNAkJKDIgPDwgMSkKICNkZWZpbmUgQ05UTF9MQ0RCUFA4CQkoMyA8PCAxKQogI2RlZmluZSBDTlRMX0xDREJQUDE2CQkoNCA8PCAxKQorI2RlZmluZSBDTlRMX0xDREJQUDE2XzU2NQkoNiA8PCAxKQogI2RlZmluZSBDTlRMX0xDREJQUDI0CQkoNSA8PCAxKQogI2RlZmluZSBDTlRMX0xDREJXCQkoMSA8PCA0KQogI2RlZmluZSBDTlRMX0xDRFRGVAkJKDEgPDwgNSkKQEAgLTIwOSw3ICsyMTAsMTYgQEAKIAkJdmFsIHw9IENOVExfTENEQlBQODsKIAkJYnJlYWs7CiAJY2FzZSAxNjoKLQkJdmFsIHw9IENOVExfTENEQlBQMTY7CisJCS8qCisJCSAqIFBMMTEwIGNhbm5vdCBjaG9vc2UgYmV0d2VlbiA1NTUxIGFuZCA1NjUgbW9kZXMgaW4KKwkJICogaXRzIGNvbnRyb2wgcmVnaXN0ZXIKKwkJICovCisJCWlmICgoZmItPmRldi0+cGVyaXBoaWQgJiAweDAwMGZmZmZmKSA9PSAweDAwMDQxMTEwKQorCQkJdmFsIHw9IENOVExfTENEQlBQMTY7CisJCWVsc2UgaWYgKGZiLT5mYi52YXIuZ3JlZW4ubGVuZ3RoID09IDUpCisJCQl2YWwgfD0gQ05UTF9MQ0RCUFAxNjsKKwkJZWxzZQorCQkJdmFsIHw9IENOVExfTENEQlBQMTZfNTY1OwogCQlicmVhazsKIAljYXNlIDMyOgogCQl2YWwgfD0gQ05UTF9MQ0RCUFAyNDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCmluZGV4IDcxOThmMTIuLjIzMWJhMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApAQCAtMjA2LDcgKzIwNiw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgQXJjUHJvdG8gKmFyY19wcm90b19tYXBbMjU2XSwgKmFyY19wcm90b19kZWZhdWx0LAogCSphcmNfYmNhc3RfcHJvdG8sICphcmNfcmF3X3Byb3RvOwotZXh0ZXJuIHN0cnVjdCBBcmNQcm90byBhcmNfcHJvdG9fbnVsbDsKIAogCiAvKgpAQCAtMzM0LDE3ICszMzMsOSBAQAogI2RlZmluZSBhcmNuZXRfZHVtcF9za2IoZGV2LHNrYixkZXNjKSA7CiAjZW5kaWYKIAotI2lmIChBUkNORVRfREVCVUdfTUFYICYgRF9SWCkgfHwgKEFSQ05FVF9ERUJVR19NQVggJiBEX1RYKQotdm9pZCBhcmNuZXRfZHVtcF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1Zm51bSwgY2hhciAqZGVzYywKLQkJCWludCB0YWtlX2FyY25ldF9sb2NrKTsKLSNlbHNlCi0jZGVmaW5lIGFyY25ldF9kdW1wX3BhY2tldChkZXYsIGJ1Zm51bSwgZGVzYyx0YWtlX2FyY25ldF9sb2NrKSA7Ci0jZW5kaWYKLQogdm9pZCBhcmNuZXRfdW5yZWdpc3Rlcl9wcm90byhzdHJ1Y3QgQXJjUHJvdG8gKnByb3RvKTsKIGlycXJldHVybl90IGFyY25ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfYXJjZGV2KGNoYXIgKm5hbWUpOwotdm9pZCBhcmNuZXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1Zm51bSk7CiAKICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJCQkJLyogX0xJTlVYX0FSQ0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0YS5oIGIvaW5jbHVkZS9saW51eC9hdGEuaAppbmRleCA5NGY3N2NjLi4zMTJhMmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRhLmgKQEAgLTE0Niw2ICsxNDYsOCBAQAogIAlBVEFfQ01EX1NUQU5EQllOT1cxCT0gMHhFMCwKICAJQVRBX0NNRF9JRExFSU1NRURJQVRFCT0gMHhFMSwKIAlBVEFfQ01EX0lOSVRfREVWX1BBUkFNUwk9IDB4OTEsCisJQVRBX0NNRF9SRUFEX05BVElWRV9NQVgJPSAweEY4LAorCUFUQV9DTURfUkVBRF9OQVRJVkVfTUFYX0VYVCA9IDB4MjcsCiAKIAkvKiBTRVRGRUFUVVJFUyBzdHVmZiAqLwogCVNFVEZFQVRVUkVTX1hGRVIJPSAweDAzLApAQCAtMjA0LDcgKzIwNiw2IEBACiAJQVRBX1BST1RfVU5LTk9XTiwJLyogdW5rbm93bi9pbnZhbGlkICovCiAJQVRBX1BST1RfTk9EQVRBLAkvKiBubyBkYXRhICovCiAJQVRBX1BST1RfUElPLAkJLyogUElPIHNpbmdsZSBzZWN0b3IgKi8KLQlBVEFfUFJPVF9QSU9fTVVMVCwJLyogUElPIG11bHRpcGxlIHNlY3RvciAqLwogCUFUQV9QUk9UX0RNQSwJCS8qIERNQSAqLwogCUFUQV9QUk9UX0FUQVBJLAkJLyogcGFja2V0IGNvbW1hbmQsIFBJTyBkYXRhIHhmZXIqLwogCUFUQV9QUk9UX0FUQVBJX05PREFUQSwJLyogcGFja2V0IGNvbW1hbmQsIG5vIGRhdGEgKi8KQEAgLTI0NywxOCArMjQ4LDIyIEBACiB9OwogCiAjZGVmaW5lIGF0YV9pZF9pc19hdGEoaWQpCSgoKGlkKVswXSAmICgxIDw8IDE1KSkgPT0gMCkKKyNkZWZpbmUgYXRhX2lkX2lzX2NmYShpZCkJKChpZClbMF0gPT0gMHg4NDhBKQogI2RlZmluZSBhdGFfaWRfaXNfc2F0YShpZCkJKChpZClbOTNdID09IDApCiAjZGVmaW5lIGF0YV9pZF9yYWhlYWRfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgNikpCiAjZGVmaW5lIGF0YV9pZF93Y2FjaGVfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgNSkpCisjZGVmaW5lIGF0YV9pZF9ocGFfZW5hYmxlZChpZCkJKChpZClbODVdICYgKDEgPDwgMTApKQogI2RlZmluZSBhdGFfaWRfaGFzX2Z1YShpZCkJKChpZClbODRdICYgKDEgPDwgNikpCiAjZGVmaW5lIGF0YV9pZF9oYXNfZmx1c2goaWQpCSgoaWQpWzgzXSAmICgxIDw8IDEyKSkKICNkZWZpbmUgYXRhX2lkX2hhc19mbHVzaF9leHQoaWQpICgoaWQpWzgzXSAmICgxIDw8IDEzKSkKICNkZWZpbmUgYXRhX2lkX2hhc19sYmE0OChpZCkJKChpZClbODNdICYgKDEgPDwgMTApKQorI2RlZmluZSBhdGFfaWRfaGFzX2hwYShpZCkJKChpZClbODJdICYgKDEgPDwgMTApKQogI2RlZmluZSBhdGFfaWRfaGFzX3djYWNoZShpZCkJKChpZClbODJdICYgKDEgPDwgNSkpCiAjZGVmaW5lIGF0YV9pZF9oYXNfcG0oaWQpCSgoaWQpWzgyXSAmICgxIDw8IDMpKQogI2RlZmluZSBhdGFfaWRfaGFzX2xiYShpZCkJKChpZClbNDldICYgKDEgPDwgOSkpCiAjZGVmaW5lIGF0YV9pZF9oYXNfZG1hKGlkKQkoKGlkKVs0OV0gJiAoMSA8PCA4KSkKICNkZWZpbmUgYXRhX2lkX3JlbW92ZWFibGUoaWQpCSgoaWQpWzBdICYgKDEgPDwgNykpCisjZGVmaW5lIGF0YV9pZF9oYXNfZHdvcmRfaW8oaWQpCSgoaWQpWzUwXSAmICgxIDw8IDApKQogI2RlZmluZSBhdGFfaWRfdTMyKGlkLG4pCVwKIAkoKCh1MzIpIChpZClbKG4pICsgMV0gPDwgMTYpIHwgKCh1MzIpIChpZClbKG4pXSkpCiAjZGVmaW5lIGF0YV9pZF91NjQoaWQsbikJXApAQCAtMjY3LDYgKzI3MiwxNiBAQAogCSAgKCh1NjQpIChpZClbKG4pICsgMV0gPDwgMTYpIHwJXAogCSAgKCh1NjQpIChpZClbKG4pICsgMF0pICkKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRhX2lkX21ham9yX3ZlcnNpb24oY29uc3QgdTE2ICppZCkKK3sKKwl1bnNpZ25lZCBpbnQgbXZlcjsKKworCWZvciAobXZlciA9IDE0OyBtdmVyID49IDE7IG12ZXItLSkKKwkJaWYgKGlkW0FUQV9JRF9NQUpPUl9WRVJdICYgKDEgPDwgbXZlcikpCisJCQlicmVhazsKKwlyZXR1cm4gbXZlcjsKK30KKwogc3RhdGljIGlubGluZSBpbnQgYXRhX2lkX2N1cnJlbnRfY2hzX3ZhbGlkKGNvbnN0IHUxNiAqaWQpCiB7CiAJLyogRm9yIEFUQS0xIGRldmljZXMsIGlmIHRoZSBJTklUSUFMSVpFIERFVklDRSBQQVJBTUVURVJTIGNvbW1hbmQgCkBAIC0zMDIsNCArMzE3LDE2IEBACiAJCQk9PSBBVEFfRFJEWSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGxiYV8yOF9vayh1NjQgYmxvY2ssIHUzMiBuX2Jsb2NrKQoreworCS8qIGNoZWNrIHRoZSBlbmRpbmcgYmxvY2sgbnVtYmVyICovCisJcmV0dXJuICgoYmxvY2sgKyBuX2Jsb2NrIC0gMSkgPCAoKHU2NCkxIDw8IDI4KSkgJiYgKG5fYmxvY2sgPD0gMjU2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGJhXzQ4X29rKHU2NCBibG9jaywgdTMyIG5fYmxvY2spCit7CisJLyogY2hlY2sgdGhlIGVuZGluZyBibG9jayBudW1iZXIgKi8KKwlyZXR1cm4gKChibG9jayArIG5fYmxvY2sgLSAxKSA8ICgodTY0KTEgPDwgNDgpKSAmJiAobl9ibG9jayA8PSA2NTUzNik7Cit9CisKICNlbmRpZiAvKiBfX0xJTlVYX0FUQV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0bWFwLmggYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCmluZGV4IDdkOGZmOTcuLmQ5ZWQyNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0bWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRtYXAuaApAQCAtNDYsNiArNDYsOSBAQAogICogYml0bWFwX3BhcnNlKHVidWYsIHVsZW4sIGRzdCwgbmJpdHMpCQlQYXJzZSBiaXRtYXAgZHN0IGZyb20gdXNlciBidWYKICAqIGJpdG1hcF9zY25saXN0cHJpbnRmKGJ1ZiwgbGVuLCBzcmMsIG5iaXRzKQlQcmludCBiaXRtYXAgc3JjIGFzIGxpc3QgdG8gYnVmCiAgKiBiaXRtYXBfcGFyc2VsaXN0KGJ1ZiwgZHN0LCBuYml0cykJCVBhcnNlIGJpdG1hcCBkc3QgZnJvbSBsaXN0CisgKiBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihiaXRtYXAsIGJpdHMsIG9yZGVyKQlGaW5kIGFuZCBhbGxvY2F0ZSBiaXQgcmVnaW9uCisgKiBiaXRtYXBfcmVsZWFzZV9yZWdpb24oYml0bWFwLCBwb3MsIG9yZGVyKQlGcmVlIHNwZWNpZmllZCBiaXQgcmVnaW9uCisgKiBiaXRtYXBfYWxsb2NhdGVfcmVnaW9uKGJpdG1hcCwgcG9zLCBvcmRlcikJQWxsb2NhdGUgc3BlY2lmaWVkIGJpdCByZWdpb24KICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggMjA4NjUwYjEuLmYxNzUyNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMTc1LDQgKzE3NSwxMSBAQAogCXJldHVybiAod29yZCA+PiBzaGlmdCkgfCAod29yZCA8PCAoMzIgLSBzaGlmdCkpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGZsc19sb25nKHVuc2lnbmVkIGxvbmcgbCkKK3sKKwlpZiAoc2l6ZW9mKGwpID09IDQpCisJCXJldHVybiBmbHMobCk7CisJcmV0dXJuIGZsczY0KGwpOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDg2MGU3YTQuLmMxNzk5NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMjIsNiArMjIsNyBAQAogc3RydWN0IGVsZXZhdG9yX3F1ZXVlOwogdHlwZWRlZiBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgZWxldmF0b3JfdDsKIHN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlOworc3RydWN0IGJsa190cmFjZTsKIAogI2RlZmluZSBCTEtERVZfTUlOX1JRCTQKICNkZWZpbmUgQkxLREVWX01BWF9SUQkxMjgJLyogRGVmYXVsdCBtYXhpbXVtICovCkBAIC01OCw3ICs1OSw3IEBACiAJICogY2lyY3VsYXIgbGlzdCBvZiBjZnFfaW9fY29udGV4dHMgYmVsb25naW5nIHRvIGEgcHJvY2VzcyBpbyBjb250ZXh0CiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CisJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcVsyXTsKIAl2b2lkICprZXk7CiAKIAlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jOwpAQCAtNjksNiArNzAsOCBAQAogCXVuc2lnbmVkIGxvbmcgdHRpbWVfc2FtcGxlczsKIAl1bnNpZ25lZCBsb25nIHR0aW1lX21lYW47CiAKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2xpc3Q7CisKIAl2b2lkICgqZHRvcikoc3RydWN0IGNmcV9pb19jb250ZXh0ICopOwogCXZvaWQgKCpleGl0KShzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKik7CiB9OwpAQCAtNDA0LDggKzQwNyw2IEBACiAKIAlzdHJ1Y3QgYmxrX3F1ZXVlX3RhZwkqcXVldWVfdGFnczsKIAotCWF0b21pY190CQlyZWZjbnQ7Ci0KIAl1bnNpZ25lZCBpbnQJCW5yX3NvcnRlZDsKIAl1bnNpZ25lZCBpbnQJCWluX2ZsaWdodDsKIApAQCAtNDE2LDYgKzQxNyw4IEBACiAJdW5zaWduZWQgaW50CQlzZ19yZXNlcnZlZF9zaXplOwogCWludAkJCW5vZGU7CiAKKwlzdHJ1Y3QgYmxrX3RyYWNlCSpibGtfdHJhY2U7CisKIAkvKgogCSAqIHJlc2VydmVkIGZvciBmbHVzaCBvcGVyYXRpb25zCiAJICovCkBAIC00MjQsNiArNDI3LDggQEAKIAlzdHJ1Y3QgcmVxdWVzdAkJcHJlX2ZsdXNoX3JxLCBiYXJfcnEsIHBvc3RfZmx1c2hfcnE7CiAJc3RydWN0IHJlcXVlc3QJCSpvcmlnX2Jhcl9ycTsKIAl1bnNpZ25lZCBpbnQJCWJpX3NpemU7CisKKwlzdHJ1Y3QgbXV0ZXgJCXN5c2ZzX2xvY2s7CiB9OwogCiAjZGVmaW5lIFJRX0lOQUNUSVZFCQkoLTEpCkBAIC03MjUsNyArNzMwLDcgQEAKIGludCBibGtfZ2V0X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqKTsKIHJlcXVlc3RfcXVldWVfdCAqYmxrX2FsbG9jX3F1ZXVlKGdmcF90KTsKIHJlcXVlc3RfcXVldWVfdCAqYmxrX2FsbG9jX3F1ZXVlX25vZGUoZ2ZwX3QsIGludCk7Ci0jZGVmaW5lIGJsa19wdXRfcXVldWUocSkgYmxrX2NsZWFudXBfcXVldWUoKHEpKQorZXh0ZXJuIHZvaWQgYmxrX3B1dF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKik7CiAKIC8qCiAgKiB0YWcgc3R1ZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNGQzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0wLDAgKzEsMjc3IEBACisjaWZuZGVmIEJMS1RSQUNFX0gKKyNkZWZpbmUgQkxLVFJBQ0VfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcmVsYXkuaD4KKworLyoKKyAqIFRyYWNlIGNhdGVnb3JpZXMKKyAqLworZW51bSBibGt0cmFjZV9jYXQgeworCUJMS19UQ19SRUFECT0gMSA8PCAwLAkvKiByZWFkcyAqLworCUJMS19UQ19XUklURQk9IDEgPDwgMSwJLyogd3JpdGVzICovCisJQkxLX1RDX0JBUlJJRVIJPSAxIDw8IDIsCS8qIGJhcnJpZXIgKi8KKwlCTEtfVENfU1lOQwk9IDEgPDwgMywJLyogYmFycmllciAqLworCUJMS19UQ19RVUVVRQk9IDEgPDwgNCwJLyogcXVldWVpbmcvbWVyZ2luZyAqLworCUJMS19UQ19SRVFVRVVFCT0gMSA8PCA1LAkvKiByZXF1ZXVlaW5nICovCisJQkxLX1RDX0lTU1VFCT0gMSA8PCA2LAkvKiBpc3N1ZSAqLworCUJMS19UQ19DT01QTEVURQk9IDEgPDwgNywJLyogY29tcGxldGlvbnMgKi8KKwlCTEtfVENfRlMJPSAxIDw8IDgsCS8qIGZzIHJlcXVlc3RzICovCisJQkxLX1RDX1BDCT0gMSA8PCA5LAkvKiBwYyByZXF1ZXN0cyAqLworCUJMS19UQ19OT1RJRlkJPSAxIDw8IDEwLAkvKiBzcGVjaWFsIG1lc3NhZ2UgKi8KKworCUJMS19UQ19FTkQJPSAxIDw8IDE1LAkvKiBvbmx5IDE2LWJpdHMsIHJlbWluZGVyICovCit9OworCisjZGVmaW5lIEJMS19UQ19TSElGVAkJKDE2KQorI2RlZmluZSBCTEtfVENfQUNUKGFjdCkJCSgoYWN0KSA8PCBCTEtfVENfU0hJRlQpCisKKy8qCisgKiBCYXNpYyB0cmFjZSBhY3Rpb25zCisgKi8KK2VudW0gYmxrdHJhY2VfYWN0IHsKKwlfX0JMS19UQV9RVUVVRSA9IDEsCQkvKiBxdWV1ZWQgKi8KKwlfX0JMS19UQV9CQUNLTUVSR0UsCQkvKiBiYWNrIG1lcmdlZCB0byBleGlzdGluZyBycSAqLworCV9fQkxLX1RBX0ZST05UTUVSR0UsCQkvKiBmcm9udCBtZXJnZSB0byBleGlzdGluZyBycSAqLworCV9fQkxLX1RBX0dFVFJRLAkJCS8qIGFsbG9jYXRlZCBuZXcgcmVxdWVzdCAqLworCV9fQkxLX1RBX1NMRUVQUlEsCQkvKiBzbGVlcGluZyBvbiBycSBhbGxvY2F0aW9uICovCisJX19CTEtfVEFfUkVRVUVVRSwJCS8qIHJlcXVlc3QgcmVxdWV1ZWQgKi8KKwlfX0JMS19UQV9JU1NVRSwJCQkvKiBzZW50IHRvIGRyaXZlciAqLworCV9fQkxLX1RBX0NPTVBMRVRFLAkJLyogY29tcGxldGVkIGJ5IGRyaXZlciAqLworCV9fQkxLX1RBX1BMVUcsCQkJLyogcXVldWUgd2FzIHBsdWdnZWQgKi8KKwlfX0JMS19UQV9VTlBMVUdfSU8sCQkvKiBxdWV1ZSB3YXMgdW5wbHVnZ2VkIGJ5IGlvICovCisJX19CTEtfVEFfVU5QTFVHX1RJTUVSLAkJLyogcXVldWUgd2FzIHVucGx1Z2dlZCBieSB0aW1lciAqLworCV9fQkxLX1RBX0lOU0VSVCwJCS8qIGluc2VydCByZXF1ZXN0ICovCisJX19CTEtfVEFfU1BMSVQsCQkJLyogYmlvIHdhcyBzcGxpdCAqLworCV9fQkxLX1RBX0JPVU5DRSwJCS8qIGJpbyB3YXMgYm91bmNlZCAqLworCV9fQkxLX1RBX1JFTUFQLAkJCS8qIGJpbyB3YXMgcmVtYXBwZWQgKi8KK307CisKKy8qCisgKiBUcmFjZSBhY3Rpb25zIGluIGZ1bGwuIEFkZGl0aW9uYWxseSwgcmVhZCBvciB3cml0ZSBpcyBtYXNrZWQKKyAqLworI2RlZmluZSBCTEtfVEFfUVVFVUUJCShfX0JMS19UQV9RVUVVRSB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKKyNkZWZpbmUgQkxLX1RBX0JBQ0tNRVJHRQkoX19CTEtfVEFfQkFDS01FUkdFIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZSBCTEtfVEFfRlJPTlRNRVJHRQkoX19CTEtfVEFfRlJPTlRNRVJHRSB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKKyNkZWZpbmUJQkxLX1RBX0dFVFJRCQkoX19CTEtfVEFfR0VUUlEgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisjZGVmaW5lCUJMS19UQV9TTEVFUFJRCQkoX19CTEtfVEFfU0xFRVBSUSB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKKyNkZWZpbmUJQkxLX1RBX1JFUVVFVUUJCShfX0JMS19UQV9SRVFVRVVFIHwgQkxLX1RDX0FDVChCTEtfVENfUkVRVUVVRSkpCisjZGVmaW5lIEJMS19UQV9JU1NVRQkJKF9fQkxLX1RBX0lTU1VFIHwgQkxLX1RDX0FDVChCTEtfVENfSVNTVUUpKQorI2RlZmluZSBCTEtfVEFfQ09NUExFVEUJCShfX0JMS19UQV9DT01QTEVURXwgQkxLX1RDX0FDVChCTEtfVENfQ09NUExFVEUpKQorI2RlZmluZSBCTEtfVEFfUExVRwkJKF9fQkxLX1RBX1BMVUcgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisjZGVmaW5lIEJMS19UQV9VTlBMVUdfSU8JKF9fQkxLX1RBX1VOUExVR19JTyB8IEJMS19UQ19BQ1QoQkxLX1RDX1FVRVVFKSkKKyNkZWZpbmUgQkxLX1RBX1VOUExVR19USU1FUgkoX19CTEtfVEFfVU5QTFVHX1RJTUVSIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZSBCTEtfVEFfSU5TRVJUCQkoX19CTEtfVEFfSU5TRVJUIHwgQkxLX1RDX0FDVChCTEtfVENfUVVFVUUpKQorI2RlZmluZSBCTEtfVEFfU1BMSVQJCShfX0JMS19UQV9TUExJVCkKKyNkZWZpbmUgQkxLX1RBX0JPVU5DRQkJKF9fQkxLX1RBX0JPVU5DRSkKKyNkZWZpbmUgQkxLX1RBX1JFTUFQCQkoX19CTEtfVEFfUkVNQVAgfCBCTEtfVENfQUNUKEJMS19UQ19RVUVVRSkpCisKKyNkZWZpbmUgQkxLX0lPX1RSQUNFX01BR0lDCTB4NjU2MTc0MDAKKyNkZWZpbmUgQkxLX0lPX1RSQUNFX1ZFUlNJT04JMHgwNworCisvKgorICogVGhlIHRyYWNlIGl0c2VsZgorICovCitzdHJ1Y3QgYmxrX2lvX3RyYWNlIHsKKwl1MzIgbWFnaWM7CQkvKiBNQUdJQyA8PCA4IHwgdmVyc2lvbiAqLworCXUzMiBzZXF1ZW5jZTsJCS8qIGV2ZW50IG51bWJlciAqLworCXU2NCB0aW1lOwkJLyogaW4gbWljcm9zZWNvbmRzICovCisJdTY0IHNlY3RvcjsJCS8qIGRpc2sgb2Zmc2V0ICovCisJdTMyIGJ5dGVzOwkJLyogdHJhbnNmZXIgbGVuZ3RoICovCisJdTMyIGFjdGlvbjsJCS8qIHdoYXQgaGFwcGVuZWQgKi8KKwl1MzIgcGlkOwkJLyogd2hvIGRpZCBpdCAqLworCXUzMiBkZXZpY2U7CQkvKiBkZXZpY2UgbnVtYmVyICovCisJdTMyIGNwdTsJCS8qIG9uIHdoYXQgY3B1IGRpZCBpdCBoYXBwZW4gKi8KKwl1MTYgZXJyb3I7CQkvKiBjb21wbGV0aW9uIGVycm9yICovCisJdTE2IHBkdV9sZW47CQkvKiBsZW5ndGggb2YgZGF0YSBhZnRlciB0aGlzIHRyYWNlICovCit9OworCisvKgorICogVGhlIHJlbWFwIGV2ZW50CisgKi8KK3N0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgeworCXUzMiBkZXZpY2U7CisJdTMyIF9fcGFkOworCXU2NCBzZWN0b3I7Cit9OworCitlbnVtIHsKKwlCbGt0cmFjZV9zZXR1cCA9IDEsCisJQmxrdHJhY2VfcnVubmluZywKKwlCbGt0cmFjZV9zdG9wcGVkLAorfTsKKworc3RydWN0IGJsa190cmFjZSB7CisJaW50IHRyYWNlX3N0YXRlOworCXN0cnVjdCByY2hhbiAqcmNoYW47CisJdW5zaWduZWQgbG9uZyAqc2VxdWVuY2U7CisJdTE2IGFjdF9tYXNrOworCXU2NCBzdGFydF9sYmE7CisJdTY0IGVuZF9sYmE7CisJdTMyIHBpZDsKKwl1MzIgZGV2OworCXN0cnVjdCBkZW50cnkgKmRpcjsKKwlzdHJ1Y3QgZGVudHJ5ICpkcm9wcGVkX2ZpbGU7CisJYXRvbWljX3QgZHJvcHBlZDsKK307CisKKy8qCisgKiBVc2VyIHNldHVwIHN0cnVjdHVyZSBwYXNzZWQgd2l0aCBCTEtUUkFDRVNUQVJUCisgKi8KK3N0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCB7CisJY2hhciBuYW1lW0JERVZOQU1FX1NJWkVdOwkvKiBvdXRwdXQgKi8KKwl1MTYgYWN0X21hc2s7CQkJLyogaW5wdXQgKi8KKwl1MzIgYnVmX3NpemU7CQkJLyogaW5wdXQgKi8KKwl1MzIgYnVmX25yOwkJCS8qIGlucHV0ICovCisJdTY0IHN0YXJ0X2xiYTsKKwl1NjQgZW5kX2xiYTsKKwl1MzIgcGlkOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpCitleHRlcm4gaW50IGJsa190cmFjZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIHVuc2lnbmVkLCBjaGFyIF9fdXNlciAqKTsKK2V4dGVybiB2b2lkIGJsa190cmFjZV9zaHV0ZG93bihyZXF1ZXN0X3F1ZXVlX3QgKik7CitleHRlcm4gdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqLCBzZWN0b3JfdCwgaW50LCBpbnQsIHUzMiwgaW50LCBpbnQsIHZvaWQgKik7CisKKy8qKgorICogYmxrX2FkZF90cmFjZV9ycSAtIEFkZCBhIHRyYWNlIGZvciBhIHJlcXVlc3Qgb3JpZW50ZWQgYWN0aW9uCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBycToJCXRoZSBzb3VyY2UgcmVxdWVzdAorICogQHdoYXQ6CXRoZSBhY3Rpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBSZWNvcmRzIGFuIGFjdGlvbiBhZ2FpbnN0IGEgcmVxdWVzdC4gV2lsbCBsb2cgdGhlIGJpbyBvZmZzZXQgKyBzaXplLgorICoKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfYWRkX3RyYWNlX3JxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgIHUzMiB3aGF0KQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCWludCBydyA9IHJxLT5mbGFncyAmIDB4MDc7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKKwkJd2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19QQyk7CisJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgcnEtPmRhdGFfbGVuLCBydywgd2hhdCwgcnEtPmVycm9ycywgc2l6ZW9mKHJxLT5jbWQpLCBycS0+Y21kKTsKKwl9IGVsc2UgIHsKKwkJd2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19GUyk7CisJCV9fYmxrX2FkZF90cmFjZShidCwgcnEtPmhhcmRfc2VjdG9yLCBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDksIHJ3LCB3aGF0LCBycS0+ZXJyb3JzLCAwLCBOVUxMKTsKKwl9Cit9CisKKy8qKgorICogYmxrX2FkZF90cmFjZV9iaW8gLSBBZGQgYSB0cmFjZSBmb3IgYSBiaW8gb3JpZW50ZWQgYWN0aW9uCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBiaW86CXRoZSBzb3VyY2UgYmlvCisgKiBAd2hhdDoJdGhlIGFjdGlvbgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIFJlY29yZHMgYW4gYWN0aW9uIGFnYWluc3QgYSBiaW8uIFdpbGwgbG9nIHRoZSBiaW8gb2Zmc2V0ICsgc2l6ZS4KKyAqCisgKiovCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2FkZF90cmFjZV9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywKKwkJCQkgICAgIHUzMiB3aGF0KQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGxpa2VseSghYnQpKQorCQlyZXR1cm47CisKKwlfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsIHdoYXQsICFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSksIDAsIE5VTEwpOworfQorCisvKioKKyAqIGJsa19hZGRfdHJhY2VfZ2VuZXJpYyAtIEFkZCBhIHRyYWNlIGZvciBhIGdlbmVyaWMgYWN0aW9uCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBiaW86CXRoZSBzb3VyY2UgYmlvCisgKiBAcnc6CQl0aGUgZGF0YSBkaXJlY3Rpb24KKyAqIEB3aGF0Ogl0aGUgYWN0aW9uCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgUmVjb3JkcyBhIHNpbXBsZSB0cmFjZQorICoKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfYWRkX3RyYWNlX2dlbmVyaWMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJCSBzdHJ1Y3QgYmlvICpiaW8sIGludCBydywgdTMyIHdoYXQpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCWlmIChiaW8pCisJCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgd2hhdCk7CisJZWxzZQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIHJ3LCB3aGF0LCAwLCAwLCBOVUxMKTsKK30KKworLyoqCisgKiBibGtfYWRkX3RyYWNlX3BkdV9pbnQgLSBBZGQgYSB0cmFjZSBmb3IgYSBiaW8gd2l0aCBhbiBpbnRlZ2VyIHBheWxvYWQKKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQHdoYXQ6CXRoZSBhY3Rpb24KKyAqIEBiaW86CXRoZSBzb3VyY2UgYmlvCisgKiBAcGR1Ogl0aGUgaW50ZWdlciBwYXlsb2FkCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgQWRkcyBhIHRyYWNlIHdpdGggc29tZSBpbnRlZ2VyIHBheWxvYWQuIFRoaXMgbWlnaHQgYmUgYW4gdW5wbHVnCisgKiAgICAgb3B0aW9uIGdpdmVuIGFzIHRoZSBhY3Rpb24sIHdpdGggdGhlIGRlcHRoIGF0IHVucGx1ZyB0aW1lIGdpdmVuCisgKiAgICAgYXMgdGhlIHBheWxvYWQKKyAqCisgKiovCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2FkZF90cmFjZV9wZHVfaW50KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1MzIgd2hhdCwKKwkJCQkJIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHBkdSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKwl1NjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCWlmIChiaW8pCisJCV9fYmxrX2FkZF90cmFjZShidCwgYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywgd2hhdCwgIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwgc2l6ZW9mKHJwZHUpLCAmcnBkdSk7CisJZWxzZQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIHdoYXQsIDAsIHNpemVvZihycGR1KSwgJnJwZHUpOworfQorCisvKioKKyAqIGJsa19hZGRfdHJhY2VfcmVtYXAgLSBBZGQgYSB0cmFjZSBmb3IgYSByZW1hcCBvcGVyYXRpb24KKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQGJpbzoJdGhlIHNvdXJjZSBiaW8KKyAqIEBkZXY6CXRhcmdldCBkZXZpY2UKKyAqIEBmcm9tOglzb3VyY2Ugc2VjdG9yCisgKiBAdG86CQl0YXJnZXQgc2VjdG9yCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgRGV2aWNlIG1hcHBlciBvciByYWlkIHRhcmdldCBzb21ldGltZXMgbmVlZCB0byBzcGxpdCBhIGJpbyBiZWNhdXNlCisgKiAgICAgaXQgc3BhbnMgYSBzdHJpcGUgKG9yIHNpbWlsYXIpLiBBZGQgYSB0cmFjZSBmb3IgdGhhdCBhY3Rpb24uCisgKgorICoqLworc3RhdGljIGlubGluZSB2b2lkIGJsa19hZGRfdHJhY2VfcmVtYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywKKwkJCQkgICAgICAgZGV2X3QgZGV2LCBzZWN0b3JfdCBmcm9tLCBzZWN0b3JfdCB0bykKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHI7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCXIuZGV2aWNlID0gY3B1X3RvX2JlMzIoZGV2KTsKKwlyLnNlY3RvciA9IGNwdV90b19iZTY0KHRvKTsKKworCV9fYmxrX2FkZF90cmFjZShidCwgZnJvbSwgYmlvLT5iaV9zaXplLCBiaW8tPmJpX3J3LCBCTEtfVEFfUkVNQVAsICFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSksIHNpemVvZihyKSwgJnIpOworfQorCisjZWxzZSAvKiAhQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgKi8KKyNkZWZpbmUgYmxrX3RyYWNlX2lvY3RsKGJkZXYsIGNtZCwgYXJnKQkJKC1FTk9UVFkpCisjZGVmaW5lIGJsa190cmFjZV9zaHV0ZG93bihxKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmxrX2FkZF90cmFjZV9ycShxLCBycSwgd2hhdCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmxrX2FkZF90cmFjZV9iaW8ocSwgcnEsIHdoYXQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGJsa19hZGRfdHJhY2VfZ2VuZXJpYyhxLCBycSwgcncsIHdoYXQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmxrX2FkZF90cmFjZV9wZHVfaW50KHEsIHdoYXQsIGJpbywgcGR1KQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGJsa19hZGRfdHJhY2VfcmVtYXAocSwgYmlvLCBkZXYsIGYsIHQpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lPX1RSQUNFICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9jYWNoZS5oCmluZGV4IGQyMmU2MzIuLmNjNGIzYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NhY2hlLmgKQEAgLTEzLDkgKzEzLDcgQEAKICNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1g4NikgfHwgZGVmaW5lZChDT05GSUdfU1BBUkM2NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkgfHwgZGVmaW5lZChDT05GSUdfUEFSSVNDKQotI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKLSNlbHNlCisjaWZuZGVmIF9fcmVhZF9tb3N0bHkKICNkZWZpbmUgX19yZWFkX21vc3RseQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKaW5kZXggNWEyM2NlNy4uNjU0OGIzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTM1Nyw3ICszNTcsOCBAQAogCiAjZGVmaW5lIGNhcF9pc19mc19jYXAoYykgICAgIChDQVBfVE9fTUFTSyhjKSAmIENBUF9GU19NQVNLKQogCi1leHRlcm4gaW50IGNhcGFibGUoaW50IGNhcCk7CitpbnQgY2FwYWJsZShpbnQgY2FwKTsKK2ludCBfX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZHJvbS5oIGIvaW5jbHVkZS9saW51eC9jZHJvbS5oCmluZGV4IGI2OGZkZjEuLjNjOWIwYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2Ryb20uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nkcm9tLmgKQEAgLTM3OCw3ICszNzgsNiBAQAogI2RlZmluZSBDRENfTUVESUFfQ0hBTkdFRCAJMHg4MCAgICAvKiBtZWRpYSBjaGFuZ2VkICovCiAjZGVmaW5lIENEQ19QTEFZX0FVRElPCQkweDEwMCAgIC8qIGF1ZGlvIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBDRENfUkVTRVQgICAgICAgICAgICAgICAweDIwMCAgIC8qIGhhcmQgcmVzZXQgZGV2aWNlICovCi0jZGVmaW5lIENEQ19JT0NUTFMgICAgICAgICAgICAgIDB4NDAwICAgLyogZHJpdmVyIGhhcyBub24tc3RhbmRhcmQgaW9jdGxzICovCiAjZGVmaW5lIENEQ19EUklWRV9TVEFUVVMgICAgICAgIDB4ODAwICAgLyogZHJpdmVyIGltcGxlbWVudHMgZHJpdmUgc3RhdHVzICovCiAjZGVmaW5lIENEQ19HRU5FUklDX1BBQ0tFVAkweDEwMDAJLyogZHJpdmVyIGltcGxlbWVudHMgZ2VuZXJpYyBwYWNrZXRzICovCiAjZGVmaW5lIENEQ19DRF9SCQkweDIwMDAJLyogZHJpdmUgaXMgYSBDRC1SICovCkBAIC05NzQsOSArOTczLDcgQEAKIAlpbnQgKCpyZXNldCkgKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqKTsKIAkvKiBwbGF5IHN0dWZmICovCiAJaW50ICgqYXVkaW9faW9jdGwpIChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKix1bnNpZ25lZCBpbnQsIHZvaWQgKik7Ci0JLyogZGV2LXNwZWNpZmljICovCi0gCWludCAoKmRldl9pb2N0bCkgKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqLAotCQkJICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCiAvKiBkcml2ZXIgc3BlY2lmaWNhdGlvbnMgKi8KIAljb25zdCBpbnQgY2FwYWJpbGl0eTsgICAvKiBjYXBhYmlsaXR5IGZsYWdzICovCiAJaW50IG5fbWlub3JzOyAgICAgICAgICAgLyogbnVtYmVyIG9mIGFjdGl2ZSBtaW5vciBkZXZpY2VzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaAppbmRleCA4ZmFkNTBmLi5lZmI1MThmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKQEAgLTk3LDYgKzk3LDEwIEBACiBDT01QQVRJQkxFX0lPQ1RMKEJMS0ZMU0JVRikKIENPTVBBVElCTEVfSU9DVEwoQkxLU0VDVFNFVCkKIENPTVBBVElCTEVfSU9DVEwoQkxLU1NaR0VUKQorQ09NUEFUSUJMRV9JT0NUTChCTEtUUkFDRVNUQVJUKQorQ09NUEFUSUJMRV9JT0NUTChCTEtUUkFDRVNUT1ApCitDT01QQVRJQkxFX0lPQ1RMKEJMS1RSQUNFU0VUVVApCitDT01QQVRJQkxFX0lPQ1RMKEJMS1RSQUNFVEVBUkRPV04pCiBVTE9OR19JT0NUTChCTEtSQVNFVCkKIFVMT05HX0lPQ1RMKEJMS0ZSQVNFVCkKIC8qIFJBSUQgKi8KQEAgLTY5Niw2ICs3MDAsOCBAQAogQ09NUEFUSUJMRV9JT0NUTChNRU1VTkxPQ0spCiBDT01QQVRJQkxFX0lPQ1RMKE1FTUdFVFJFR0lPTkNPVU5UKQogQ09NUEFUSUJMRV9JT0NUTChNRU1HRVRSRUdJT05JTkZPKQorQ09NUEFUSUJMRV9JT0NUTChNRU1HRVRCQURCTE9DSykKK0NPTVBBVElCTEVfSU9DVEwoTUVNU0VUQkFEQkxPQ0spCiAvKiBOQkQgKi8KIFVMT05HX0lPQ1RMKE5CRF9TRVRfU09DSykKIFVMT05HX0lPQ1RMKE5CRF9TRVRfQkxLU0laRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1LmggYi9pbmNsdWRlL2xpbnV4L2NwdS5oCmluZGV4IDBlZDFkNDguLjA4ZDUwYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1LmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHUuaApAQCAtMzIsNyArMzIsNyBAQAogfTsKIAogZXh0ZXJuIGludCByZWdpc3Rlcl9jcHUoc3RydWN0IGNwdSAqLCBpbnQsIHN0cnVjdCBub2RlICopOwotZXh0ZXJuIHN0cnVjdCBzeXNfZGV2aWNlICpnZXRfY3B1X3N5c2RldihpbnQgY3B1KTsKK2V4dGVybiBzdHJ1Y3Qgc3lzX2RldmljZSAqZ2V0X2NwdV9zeXNkZXYodW5zaWduZWQgY3B1KTsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfY3B1KHN0cnVjdCBjcHUgKiwgc3RydWN0IG5vZGUgKik7CiAjZW5kaWYKQEAgLTc0LDcgKzc0LDYgQEAKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmZuIyNfbmIpOwkJCVwKIH0KIGludCBjcHVfZG93bih1bnNpZ25lZCBpbnQgY3B1KTsKLWV4dGVybiBpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpIHNtcF9wcmVwYXJlX2NwdShpbnQgY3B1KTsKICNkZWZpbmUgY3B1X2lzX29mZmxpbmUoY3B1KSB1bmxpa2VseSghY3B1X29ubGluZShjcHUpKQogI2Vsc2UKICNkZWZpbmUgbG9ja19jcHVfaG90cGx1ZygpCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKaW5kZXggNjBlNTZjNi4uOTllNjExNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKQEAgLTIxMiwxNyArMjEyLDE1IEBACiAJYml0bWFwX3NoaWZ0X2xlZnQoZHN0cC0+Yml0cywgc3JjcC0+Yml0cywgbiwgbmJpdHMpOwogfQogCi0jZGVmaW5lIGZpcnN0X2NwdShzcmMpIF9fZmlyc3RfY3B1KCYoc3JjKSwgTlJfQ1BVUykKLXN0YXRpYyBpbmxpbmUgaW50IF9fZmlyc3RfY3B1KGNvbnN0IGNwdW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQotewotCXJldHVybiBtaW5fdChpbnQsIG5iaXRzLCBmaW5kX2ZpcnN0X2JpdChzcmNwLT5iaXRzLCBuYml0cykpOwotfQotCi0jZGVmaW5lIG5leHRfY3B1KG4sIHNyYykgX19uZXh0X2NwdSgobiksICYoc3JjKSwgTlJfQ1BVUykKLXN0YXRpYyBpbmxpbmUgaW50IF9fbmV4dF9jcHUoaW50IG4sIGNvbnN0IGNwdW1hc2tfdCAqc3JjcCwgaW50IG5iaXRzKQotewotCXJldHVybiBtaW5fdChpbnQsIG5iaXRzLCBmaW5kX25leHRfYml0KHNyY3AtPmJpdHMsIG5iaXRzLCBuKzEpKTsKLX0KKyNpZmRlZiBDT05GSUdfU01QCitpbnQgX19maXJzdF9jcHUoY29uc3QgY3B1bWFza190ICpzcmNwKTsKKyNkZWZpbmUgZmlyc3RfY3B1KHNyYykgX19maXJzdF9jcHUoJihzcmMpKQoraW50IF9fbmV4dF9jcHUoaW50IG4sIGNvbnN0IGNwdW1hc2tfdCAqc3JjcCk7CisjZGVmaW5lIG5leHRfY3B1KG4sIHNyYykgX19uZXh0X2NwdSgobiksICYoc3JjKSkKKyNlbHNlCisjZGVmaW5lIGZpcnN0X2NwdShzcmMpCQkwCisjZGVmaW5lIG5leHRfY3B1KG4sIHNyYykJMQorI2VuZGlmCiAKICNkZWZpbmUgY3B1bWFza19vZl9jcHUoY3B1KQkJCQkJCVwKICh7CQkJCQkJCQkJXApAQCAtMzk4LDI3ICszOTYsMTcgQEAKICNkZWZpbmUgY3B1X3ByZXNlbnQoY3B1KQkoKGNwdSkgPT0gMCkKICNlbmRpZgogCi0jZGVmaW5lIGFueV9vbmxpbmVfY3B1KG1hc2spCQkJXAotKHsJCQkJCQlcCi0JaW50IGNwdTsJCQkJXAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgKG1hc2spKQkJXAotCQlpZiAoY3B1X29ubGluZShjcHUpKQkJXAotCQkJYnJlYWs7CQkJXAotCWNwdTsJCQkJCVwKLX0pCisjaWZkZWYgQ09ORklHX1NNUAoraW50IGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKHZvaWQpOworI2RlZmluZSBhbnlfb25saW5lX2NwdShtYXNrKSBfX2FueV9vbmxpbmVfY3B1KCYobWFzaykpCitpbnQgX19hbnlfb25saW5lX2NwdShjb25zdCBjcHVtYXNrX3QgKm1hc2spOworI2Vsc2UKKyNkZWZpbmUgaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKQkwCisjZGVmaW5lIGFueV9vbmxpbmVfY3B1KG1hc2spCQkwCisjZW5kaWYKIAogI2RlZmluZSBmb3JfZWFjaF9jcHUoY3B1KQkgIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfcG9zc2libGVfbWFwKQogI2RlZmluZSBmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfb25saW5lX21hcCkKICNkZWZpbmUgZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSBmb3JfZWFjaF9jcHVfbWFzaygoY3B1KSwgY3B1X3ByZXNlbnRfbWFwKQogCi0vKiBGaW5kIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHNtcF9wcm9jZXNzb3JfaWQoKSAqLwotI2RlZmluZSBoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpIFwKLSh7IFwKLQl1bnNpZ25lZCBpbnQgY3B1LCBoaWdoZXN0ID0gMDsgXAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1X3Bvc3NpYmxlX21hcCkgXAotCQloaWdoZXN0ID0gY3B1OyBcCi0JaGlnaGVzdDsgXAotfSkKLQotCiAjZW5kaWYgLyogX19MSU5VWF9DUFVNQVNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1c2V0LmggYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCmluZGV4IDNiYzYwNjkuLjkzNTQ3MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaApAQCAtNCw3ICs0LDcgQEAKICAqICBjcHVzZXQgaW50ZXJmYWNlCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBCVUxMIFNBCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKgogICovCiAKQEAgLTUxLDYgKzUxLDE4IEBACiBleHRlcm4gdm9pZCBjcHVzZXRfbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIGNwdXNldF91bmxvY2sodm9pZCk7CiAKK2V4dGVybiBpbnQgY3B1c2V0X21lbV9zcHJlYWRfbm9kZSh2b2lkKTsKKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X2RvX3BhZ2VfbWVtX3NwcmVhZCh2b2lkKQoreworCXJldHVybiBjdXJyZW50LT5mbGFncyAmIFBGX1NQUkVBRF9QQUdFOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfZG9fc2xhYl9tZW1fc3ByZWFkKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnQtPmZsYWdzICYgUEZfU1BSRUFEX1NMQUI7Cit9CisKICNlbHNlIC8qICFDT05GSUdfQ1BVU0VUUyAqLwogCiBzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfaW5pdF9lYXJseSh2b2lkKSB7IHJldHVybiAwOyB9CkBAIC05OSw2ICsxMTEsMjEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfbG9jayh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF91bmxvY2sodm9pZCkge30KIAorc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X21lbV9zcHJlYWRfbm9kZSh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfZG9fcGFnZV9tZW1fc3ByZWFkKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdXNldF9kb19zbGFiX21lbV9zcHJlYWQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qICFDT05GSUdfQ1BVU0VUUyAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NQVVNFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaAppbmRleCBkODhiZjhhLi4wYWIxYmMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCisrKyBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKQEAgLTIyOSw2ICsyMjksOCBAQAogCX0gY3J0X3U7CiAJCiAJc3RydWN0IGNyeXB0b19hbGcgKl9fY3J0X2FsZzsKKworCWNoYXIgX19jcnRfY3R4W10gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKSk7CiB9OwogCiAvKiAKQEAgLTMwMSw3ICszMDMsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkICpjcnlwdG9fdGZtX2N0eChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewotCXJldHVybiAodm9pZCAqKSZ0Zm1bMV07CisJcmV0dXJuIHRmbS0+X19jcnRfY3R4OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQodm9pZCkKK3sKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXJldHVybiBfX2FsaWdub2ZfXyh0Zm0tPl9fY3J0X2N0eCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaAppbmRleCA0MzYxZjM3Li5kMTBiZDMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKQEAgLTE2Miw2ICsxNjIsOCBAQAogI2RlZmluZSBEQ0FDSEVfUkVGRVJFTkNFRAkweDAwMDggIC8qIFJlY2VudGx5IHVzZWQsIGRvbid0IGRpc2NhcmQuICovCiAjZGVmaW5lIERDQUNIRV9VTkhBU0hFRAkJMHgwMDEwCQogCisjZGVmaW5lIERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVECTB4MDAyMCAvKiBQYXJlbnQgaW5vZGUgaXMgd2F0Y2hlZCAqLworCiBleHRlcm4gc3BpbmxvY2tfdCBkY2FjaGVfbG9jazsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjY3AuaCBiL2luY2x1ZGUvbGludXgvZGNjcC5oCmluZGV4IDA4ODUyOWYuLjY3NjMzM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNjcC5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBAZGNjcGhfc2VxIC0gc2VxdWVuY2UgbnVtYmVyIGhpZ2ggb3IgbG93IG9yZGVyIDI0IGJpdHMsIGRlcGVuZHMgb24gZGNjcGhfeAogICovCiBzdHJ1Y3QgZGNjcF9oZHIgewotCV9fdTE2CWRjY3BoX3Nwb3J0LAorCV9fYmUxNglkY2NwaF9zcG9ydCwKIAkJZGNjcGhfZHBvcnQ7CiAJX191OAlkY2NwaF9kb2ZmOwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQpAQCAtMzIsMTggKzMyLDE4IEBACiAjZW5kaWYKIAlfX3UxNglkY2NwaF9jaGVja3N1bTsKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKLQlfX3UzMglkY2NwaF94OjEsCisJX191OAlkY2NwaF94OjEsCiAJCWRjY3BoX3R5cGU6NCwKLQkJZGNjcGhfcmVzZXJ2ZWQ6MywKLQkJZGNjcGhfc2VxOjI0OworCQlkY2NwaF9yZXNlcnZlZDozOwogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCi0JX191MzIJZGNjcGhfcmVzZXJ2ZWQ6MywKKwlfX3U4CWRjY3BoX3Jlc2VydmVkOjMsCiAJCWRjY3BoX3R5cGU6NCwKLQkJZGNjcGhfeDoxLAotCQlkY2NwaF9zZXE6MjQ7CisJCWRjY3BoX3g6MTsKICNlbHNlCiAjZXJyb3IgICJBZGp1c3QgeW91ciA8YXNtL2J5dGVvcmRlci5oPiBkZWZpbmVzIgogI2VuZGlmCisJX191OAlkY2NwaF9zZXEyOworCV9fYmUxNglkY2NwaF9zZXE7CiB9OwogCiAvKioKQEAgLTUyLDcgKzUyLDcgQEAKICAqIEBkY2NwaF9zZXFfbG93IC0gbG93IDI0IGJpdHMgb2YgYSA0OCBiaXQgc2VxIHBhY2tldAogICovCiBzdHJ1Y3QgZGNjcF9oZHJfZXh0IHsKLQlfX3UzMglkY2NwaF9zZXFfbG93OworCV9fYmUzMglkY2NwaF9zZXFfbG93OwogfTsKIAogLyoqCkBAIC02Miw3ICs2Miw3IEBACiAgKiBAZGNjcGhfcmVxX29wdGlvbnMgLSBsaXN0IG9mIG9wdGlvbnMgKG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMiBiaXRzCiAgKi8KIHN0cnVjdCBkY2NwX2hkcl9yZXF1ZXN0IHsKLQlfX3UzMglkY2NwaF9yZXFfc2VydmljZTsKKwlfX2JlMzIJZGNjcGhfcmVxX3NlcnZpY2U7CiB9OwogLyoqCiAgKiBzdHJ1Y3QgZGNjcF9oZHJfYWNrX2JpdHMgLSBhY2tub3dsZWRnbWVudCBiaXRzIGNvbW1vbiB0byBtb3N0IHBhY2tldHMKQEAgLTcxLDkgKzcxLDkgQEAKICAqIEBkY2NwaF9yZXNwX2Fja19ucl9sb3cgLSA0OCBiaXQgYWNrIG51bWJlciBsb3cgb3JkZXIgYml0cywgY29udGFpbnMgR1NSCiAgKi8KIHN0cnVjdCBkY2NwX2hkcl9hY2tfYml0cyB7Ci0JX191MzIJZGNjcGhfcmVzZXJ2ZWQxOjgsCi0JCWRjY3BoX2Fja19ucl9oaWdoOjI0OwotCV9fdTMyCWRjY3BoX2Fja19ucl9sb3c7CisJX19iZTE2CWRjY3BoX3Jlc2VydmVkMTsKKwlfX2JlMTYJZGNjcGhfYWNrX25yX2hpZ2g7CisJX19iZTMyCWRjY3BoX2Fja19ucl9sb3c7CiB9OwogLyoqCiAgKiBzdHJ1Y3QgZGNjcF9oZHJfcmVzcG9uc2UgLSBDb25lY3Rpb24gaW5pdGlhdGlvbiByZXNwb25zZSBoZWFkZXIKQEAgLTg1LDcgKzg1LDcgQEAKICAqLwogc3RydWN0IGRjY3BfaGRyX3Jlc3BvbnNlIHsKIAlzdHJ1Y3QgZGNjcF9oZHJfYWNrX2JpdHMJZGNjcGhfcmVzcF9hY2s7Ci0JX191MzIJCQkJZGNjcGhfcmVzcF9zZXJ2aWNlOworCV9fYmUzMgkJCQlkY2NwaF9yZXNwX3NlcnZpY2U7CiB9OwogCiAvKioKQEAgLTE1NCw2ICsxNTQsMTAgQEAKIAlEQ0NQT19NQU5EQVRPUlkgPSAxLAogCURDQ1BPX01JTl9SRVNFUlZFRCA9IDMsCiAJRENDUE9fTUFYX1JFU0VSVkVEID0gMzEsCisJRENDUE9fQ0hBTkdFX0wgPSAzMiwKKwlEQ0NQT19DT05GSVJNX0wgPSAzMywKKwlEQ0NQT19DSEFOR0VfUiA9IDM0LAorCURDQ1BPX0NPTkZJUk1fUiA9IDM1LAogCURDQ1BPX05EUF9DT1VOVCA9IDM3LAogCURDQ1BPX0FDS19WRUNUT1JfMCA9IDM4LAogCURDQ1BPX0FDS19WRUNUT1JfMSA9IDM5LApAQCAtMTY4LDcgKzE3Miw5IEBACiAvKiBEQ0NQIGZlYXR1cmVzICovCiBlbnVtIHsKIAlEQ0NQRl9SRVNFUlZFRCA9IDAsCisJRENDUEZfQ0NJRCA9IDEsCiAJRENDUEZfU0VRVUVOQ0VfV0lORE9XID0gMywKKwlEQ0NQRl9BQ0tfUkFUSU8gPSA1LAogCURDQ1BGX1NFTkRfQUNLX1ZFQ1RPUiA9IDYsCiAJRENDUEZfU0VORF9ORFBfQ09VTlQgPSA3LAogCS8qIDEwLTEyNyByZXNlcnZlZCAqLwpAQCAtMTc2LDkgKzE4MiwxOCBAQAogCURDQ1BGX01BWF9DQ0lEX1NQRUNJRklDID0gMjU1LAogfTsKIAorLyogdGhpcyBzdHJ1Y3R1cmUgaXMgYXJndW1lbnQgdG8gRENDUF9TT0NLT1BUX0NIQU5HRV9YICovCitzdHJ1Y3QgZGNjcF9zb19mZWF0IHsKKwlfX3U4IGRjY3BzZl9mZWF0OworCV9fdTggKmRjY3BzZl92YWw7CisJX191OCBkY2Nwc2ZfbGVuOworfTsKKwogLyogRENDUCBzb2NrZXQgb3B0aW9ucyAqLwogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkUJMQogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfU0VSVklDRQkJMgorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0hBTkdFX0wJCTMKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0NIQU5HRV9SCQk0CiAjZGVmaW5lIERDQ1BfU09DS09QVF9DQ0lEX1JYX0lORk8JMTI4CiAjZGVmaW5lIERDQ1BfU09DS09QVF9DQ0lEX1RYX0lORk8JMTkyCiAKQEAgLTI1NCwxNiArMjY5LDEyIEBACiBzdGF0aWMgaW5saW5lIF9fdTY0IGRjY3BfaGRyX3NlcShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQotCV9fdTY0IHNlcV9uciA9IG50b2hsKGRoLT5kY2NwaF9zZXEgPDwgOCk7Ci0jZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKLQlfX3U2NCBzZXFfbnIgPSBudG9obChkaC0+ZGNjcGhfc2VxKTsKLSNlbHNlCi0jZXJyb3IgICJBZGp1c3QgeW91ciA8YXNtL2J5dGVvcmRlci5oPiBkZWZpbmVzIgotI2VuZGlmCisJX191NjQgc2VxX25yID0gIG50b2hzKGRoLT5kY2NwaF9zZXEpOwogCiAJaWYgKGRoLT5kY2NwaF94ICE9IDApCiAJCXNlcV9uciA9IChzZXFfbnIgPDwgMzIpICsgbnRvaGwoZGNjcF9oZHJ4KHNrYiktPmRjY3BoX3NlcV9sb3cpOworCWVsc2UKKwkJc2VxX25yICs9ICh1MzIpZGgtPmRjY3BoX3NlcTIgPDwgMTY7CiAKIAlyZXR1cm4gc2VxX25yOwogfQpAQCAtMjgxLDEzICsyOTIsNyBAQAogc3RhdGljIGlubGluZSB1NjQgZGNjcF9oZHJfYWNrX3NlcShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNvbnN0IHN0cnVjdCBkY2NwX2hkcl9hY2tfYml0cyAqZGhhY2sgPSBkY2NwX2hkcl9hY2tfYml0cyhza2IpOwotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQotCXJldHVybiAoKCh1NjQpbnRvaGwoZGhhY2stPmRjY3BoX2Fja19ucl9oaWdoIDw8IDgpKSA8PCAzMikgKyBudG9obChkaGFjay0+ZGNjcGhfYWNrX25yX2xvdyk7Ci0jZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKLQlyZXR1cm4gKCgodTY0KW50b2hsKGRoYWNrLT5kY2NwaF9hY2tfbnJfaGlnaCkpIDw8IDMyKSArIG50b2hsKGRoYWNrLT5kY2NwaF9hY2tfbnJfbG93KTsKLSNlbHNlCi0jZXJyb3IgICJBZGp1c3QgeW91ciA8YXNtL2J5dGVvcmRlci5oPiBkZWZpbmVzIgotI2VuZGlmCisJcmV0dXJuICgodTY0KW50b2hzKGRoYWNrLT5kY2NwaF9hY2tfbnJfaGlnaCkgPDwgMzIpICsgbnRvaGwoZGhhY2stPmRjY3BoX2Fja19ucl9sb3cpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX2hkcl9yZXNwb25zZSAqZGNjcF9oZHJfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTMxNCwzOCArMzE5LDYwIEBACiAKIC8qIGluaXRpYWwgdmFsdWVzIGZvciBlYWNoIGZlYXR1cmUgKi8KICNkZWZpbmUgRENDUEZfSU5JVElBTF9TRVFVRU5DRV9XSU5ET1cJCTEwMAotLyogRklYTUU6IGZvciBub3cgd2UncmUgdXNpbmcgQ0NJRCAzIChURlJDKSAqLwotI2RlZmluZSBEQ0NQRl9JTklUSUFMX0NDSUQJCQkzCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfU0VORF9BQ0tfVkVDVE9SCQkwCisjZGVmaW5lIERDQ1BGX0lOSVRJQUxfQUNLX1JBVElPCQkJMgorI2RlZmluZSBEQ0NQRl9JTklUSUFMX0NDSUQJCQkyCisjZGVmaW5lIERDQ1BGX0lOSVRJQUxfU0VORF9BQ0tfVkVDVE9SCQkxCiAvKiBGSVhNRTogZm9yIG5vdyB3ZSdyZSBkZWZhdWx0IHRvIDEgYnV0IGl0IHNob3VsZCByZWFsbHkgYmUgMCAqLwogI2RlZmluZSBEQ0NQRl9JTklUSUFMX1NFTkRfTkRQX0NPVU5UCQkxCiAKICNkZWZpbmUgRENDUF9ORFBfTElNSVQgMHhGRkZGRkYKIAogLyoqCi0gICogc3RydWN0IGRjY3Bfb3B0aW9ucyAtIG9wdGlvbiB2YWx1ZXMgZm9yIGEgRENDUCBjb25uZWN0aW9uCi0gICoJQGRjY3BvX3NlcXVlbmNlX3dpbmRvdyAtIFNlcXVlbmNlIFdpbmRvdyBGZWF0dXJlIChzZWN0aW9uIDcuNS4yKQotICAqCUBkY2Nwb19jY2lkIC0gQ29uZ2VzdGlvbiBDb250cm9sIElkIChDQ0lEKSAoc2VjdGlvbiAxMCkKLSAgKglAZGNjcG9fc2VuZF9hY2tfdmVjdG9yIC0gU2VuZCBBY2sgVmVjdG9yIEZlYXR1cmUgKHNlY3Rpb24gMTEuNSkKLSAgKglAZGNjcG9fc2VuZF9uZHBfY291bnQgLSBTZW5kIE5EUCBDb3VudCBGZWF0dXJlICg3LjcuMikKKyAgKiBzdHJ1Y3QgZGNjcF9taW5pc29jayAtIE1pbmltYWwgRENDUCBjb25uZWN0aW9uIHJlcHJlc2VudGF0aW9uCisgICoKKyAgKiBXaWxsIGJlIHVzZWQgdG8gcGFzcyB0aGUgc3RhdGUgZnJvbSBkY2NwX3JlcXVlc3Rfc29jayB0byBkY2NwX3NvY2suCisgICoKKyAgKiBAZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyAtIFNlcXVlbmNlIFdpbmRvdyBGZWF0dXJlIChzZWN0aW9uIDcuNS4yKQorICAqIEBkY2NwbXNfY2NpZCAtIENvbmdlc3Rpb24gQ29udHJvbCBJZCAoQ0NJRCkgKHNlY3Rpb24gMTApCisgICogQGRjY3Btc19zZW5kX2Fja192ZWN0b3IgLSBTZW5kIEFjayBWZWN0b3IgRmVhdHVyZSAoc2VjdGlvbiAxMS41KQorICAqIEBkY2NwbXNfc2VuZF9uZHBfY291bnQgLSBTZW5kIE5EUCBDb3VudCBGZWF0dXJlICg3LjcuMikKICAgKi8KLXN0cnVjdCBkY2NwX29wdGlvbnMgewotCV9fdTY0CWRjY3BvX3NlcXVlbmNlX3dpbmRvdzsKLQlfX3U4CWRjY3BvX3J4X2NjaWQ7Ci0JX191OAlkY2Nwb190eF9jY2lkOwotCV9fdTgJZGNjcG9fc2VuZF9hY2tfdmVjdG9yOwotCV9fdTgJZGNjcG9fc2VuZF9uZHBfY291bnQ7CitzdHJ1Y3QgZGNjcF9taW5pc29jayB7CisJX191NjQJCQlkY2NwbXNfc2VxdWVuY2Vfd2luZG93OworCV9fdTgJCQlkY2NwbXNfcnhfY2NpZDsKKwlfX3U4CQkJZGNjcG1zX3R4X2NjaWQ7CisJX191OAkJCWRjY3Btc19zZW5kX2Fja192ZWN0b3I7CisJX191OAkJCWRjY3Btc19zZW5kX25kcF9jb3VudDsKKwlfX3U4CQkJZGNjcG1zX2Fja19yYXRpbzsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWRjY3Btc19wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQJZGNjcG1zX2NvbmY7CiB9OwogCi1leHRlcm4gdm9pZCBfX2RjY3Bfb3B0aW9uc19pbml0KHN0cnVjdCBkY2NwX29wdGlvbnMgKmRjY3BvKTsKLWV4dGVybiB2b2lkIGRjY3Bfb3B0aW9uc19pbml0KHN0cnVjdCBkY2NwX29wdGlvbnMgKmRjY3BvKTsKK3N0cnVjdCBkY2NwX29wdF9jb25mIHsKKwlfX3U4CQkJKmRjY3BvY192YWw7CisJX191OAkJCWRjY3BvY19sZW47Cit9OworCitzdHJ1Y3QgZGNjcF9vcHRfcGVuZCB7CisJc3RydWN0IGxpc3RfaGVhZAlkY2Nwb3Bfbm9kZTsKKwlfX3U4CQkJZGNjcG9wX3R5cGU7CisJX191OAkJCWRjY3BvcF9mZWF0OworCV9fdTgJCSAgICAgICAgKmRjY3BvcF92YWw7CisJX191OAkJCWRjY3BvcF9sZW47CisJaW50CQkJZGNjcG9wX2NvbmY7CisJc3RydWN0IGRjY3Bfb3B0X2NvbmYgICAgKmRjY3BvcF9zYzsKK307CisKK2V4dGVybiB2b2lkIF9fZGNjcF9taW5pc29ja19pbml0KHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrKTsKK2V4dGVybiB2b2lkIGRjY3BfbWluaXNvY2tfaW5pdChzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayk7CisKIGV4dGVybiBpbnQgZGNjcF9wYXJzZV9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayB7CiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrIGRyZXFfaW5ldF9yc2s7CiAJX191NjQJCQkgZHJlcV9pc3M7CiAJX191NjQJCQkgZHJlcV9pc3I7Ci0JX191MzIJCQkgZHJlcV9zZXJ2aWNlOworCV9fYmUzMgkJCSBkcmVxX3NlcnZpY2U7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZGNjcF9yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQpAQCAtMzczLDEzICs0MDAsMTMgQEAKIAogc3RydWN0IGRjY3Bfc2VydmljZV9saXN0IHsKIAlfX3UzMglkY2Nwc2xfbnI7Ci0JX191MzIJZGNjcHNsX2xpc3RbMF07CisJX19iZTMyCWRjY3BzbF9saXN0WzBdOwogfTsKIAogI2RlZmluZSBEQ0NQX1NFUlZJQ0VfSU5WQUxJRF9WQUxVRSBodG9ubCgoX191MzIpLTEpCiAKIHN0YXRpYyBpbmxpbmUgaW50IGRjY3BfbGlzdF9oYXNfc2VydmljZShjb25zdCBzdHJ1Y3QgZGNjcF9zZXJ2aWNlX2xpc3QgKnNsLAotCQkJCQljb25zdCB1MzIgc2VydmljZSkKKwkJCQkJY29uc3QgX19iZTMyIHNlcnZpY2UpCiB7CiAJaWYgKGxpa2VseShzbCAhPSBOVUxMKSkgewogCQl1MzIgaSA9IHNsLT5kY2Nwc2xfbnI7CkBAIC00MjUsMTcgKzQ1MiwxNyBAQAogCV9fdTY0CQkJCWRjY3BzX2dzczsKIAlfX3U2NAkJCQlkY2Nwc19nc3I7CiAJX191NjQJCQkJZGNjcHNfZ2FyOwotCV9fdTMyCQkJCWRjY3BzX3NlcnZpY2U7CisJX19iZTMyCQkJCWRjY3BzX3NlcnZpY2U7CiAJc3RydWN0IGRjY3Bfc2VydmljZV9saXN0CSpkY2Nwc19zZXJ2aWNlX2xpc3Q7CiAJc3RydWN0IHRpbWV2YWwJCQlkY2Nwc190aW1lc3RhbXBfdGltZTsKIAlfX3UzMgkJCQlkY2Nwc190aW1lc3RhbXBfZWNobzsKIAlfX3UzMgkJCQlkY2Nwc19wYWNrZXRfc2l6ZTsKKwlfX3UxNgkJCQlkY2Nwc19sX2Fja19yYXRpbzsKKwlfX3UxNgkJCQlkY2Nwc19yX2Fja19yYXRpbzsKIAl1bnNpZ25lZCBsb25nCQkJZGNjcHNfbmRwX2NvdW50OwogCV9fdTMyCQkJCWRjY3BzX21zc19jYWNoZTsKLQlzdHJ1Y3QgZGNjcF9vcHRpb25zCQlkY2Nwc19vcHRpb25zOworCXN0cnVjdCBkY2NwX21pbmlzb2NrCQlkY2Nwc19taW5pc29jazsKIAlzdHJ1Y3QgZGNjcF9hY2t2ZWMJCSpkY2Nwc19oY19yeF9hY2t2ZWM7Ci0Jdm9pZAkJCQkqZGNjcHNfaGNfcnhfY2NpZF9wcml2YXRlOwotCXZvaWQJCQkJKmRjY3BzX2hjX3R4X2NjaWRfcHJpdmF0ZTsKIAlzdHJ1Y3QgY2NpZAkJCSpkY2Nwc19oY19yeF9jY2lkOwogCXN0cnVjdCBjY2lkCQkJKmRjY3BzX2hjX3R4X2NjaWQ7CiAJc3RydWN0IGRjY3Bfb3B0aW9uc19yZWNlaXZlZAlkY2Nwc19vcHRpb25zX3JlY2VpdmVkOwpAQCAtNDUwLDYgKzQ3NywxMSBAQAogCXJldHVybiAoc3RydWN0IGRjY3Bfc29jayAqKXNrOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX21pbmlzb2NrICpkY2NwX21zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIChzdHJ1Y3QgZGNjcF9taW5pc29jayAqKSZkY2NwX3NrKHNrKS0+ZGNjcHNfbWluaXNvY2s7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGRjY3Bfc2VydmljZV9ub3RfaW5pdGlhbGl6ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiBkY2NwX3NrKHNrKS0+ZGNjcHNfc2VydmljZSA9PSBEQ0NQX1NFUlZJQ0VfSU5WQUxJRF9WQUxVRTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGVidWdmcy5oIGIvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgKaW5kZXggYTVmYTZhNi4uNGIwNDI4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmgKQEAgLTIxLDYgKzIxLDExIEBACiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnM7CiAKK3N0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciB7CisJdm9pZCAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAogCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKQEAgLTM5LDYgKzQ0LDkgQEAKIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHUzMiAqdmFsdWUpOwogCitzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJCSAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJCSAgc3RydWN0IGRlYnVnZnNfYmxvYl93cmFwcGVyICpibG9iKTsKICNlbHNlCiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTk0LDYgKzEwMiwxMyBAQAogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfY3JlYXRlX2Jsb2IoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJICBzdHJ1Y3QgZGVidWdmc19ibG9iX3dyYXBwZXIgKmJsb2IpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDU4ZGYxOGQuLmY2ZTcyYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMzc4LDYgKzM3OCw3IEBACiBleHRlcm4gdm9pZCBkZXZpY2VfcmVsZWFzZV9kcml2ZXIoc3RydWN0IGRldmljZSAqIGRldik7CiBleHRlcm4gaW50ICBkZXZpY2VfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHZvaWQgZHJpdmVyX2F0dGFjaChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRydik7CitleHRlcm4gdm9pZCBkZXZpY2VfcmVwcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAKIC8qCkBAIC0zOTksNyArNDAwLDcgQEAKIGV4dGVybiB2b2lkIHB1dF9kZXZpY2Uoc3RydWN0IGRldmljZSAqIGRldik7CiAKIAotLyogZHJpdmVycy9iYXNlL3Bvd2VyLmMgKi8KKy8qIGRyaXZlcnMvYmFzZS9wb3dlci9zaHV0ZG93bi5jICovCiBleHRlcm4gdm9pZCBkZXZpY2Vfc2h1dGRvd24odm9pZCk7CiAKIApAQCAtNDI0LDYgKzQyNSw4IEBACiAJZGV2X3ByaW50ayhLRVJOX0lORk8gLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCiAjZGVmaW5lIGRldl93YXJuKGRldiwgZm9ybWF0LCBhcmcuLi4pCQlcCiAJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCisjZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmb3JtYXQsIGFyZy4uLikJCVwKKwlkZXZfcHJpbnRrKEtFUk5fTk9USUNFICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQogCiAvKiBDcmVhdGUgYWxpYXMsIHNvIEkgY2FuIGJlIGF1dG9sb2FkZWQuICovCiAjZGVmaW5lIE1PRFVMRV9BTElBU19DSEFSREVWKG1ham9yLG1pbm9yKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Rpby5oIGIvaW5jbHVkZS9saW51eC9kaW8uaAppbmRleCBmYWU5Mzk1Li4xZTY1ZWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Rpby5oCisrKyBiL2luY2x1ZGUvbGludXgvZGlvLmgKQEAgLTI3NiwzNyArMjc2LDUgQEAKIAlkZXZfc2V0X2RydmRhdGEoJmQtPmRldiwgZGF0YSk7CiB9CiAKLS8qCi0gKiBBIGhlbHBlciBmdW5jdGlvbiB3aGljaCBoZWxwcyBlbnN1cmUgY29ycmVjdCBkaW9fZHJpdmVyCi0gKiBzZXR1cCBhbmQgY2xlYW51cCBmb3IgY29tbW9ubHktZW5jb3VudGVyZWQgaG90cGx1Zy9tb2R1bGFyIGNhc2VzCi0gKgotICogVGhpcyBNVVNUIHN0YXkgaW4gYSBoZWFkZXIsIGFzIGl0IGNoZWNrcyBmb3IgLURNT0RVTEUKLSAqLwotc3RhdGljIGlubGluZSBpbnQgZGlvX21vZHVsZV9pbml0KHN0cnVjdCBkaW9fZHJpdmVyICpkcnYpCi17Ci0JaW50IHJjID0gZGlvX3JlZ2lzdGVyX2RyaXZlcihkcnYpOwotCi0JaWYgKHJjID4gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBpZmYgQ09ORklHX0hPVFBMVUcgYW5kIGJ1aWx0IGludG8ga2VybmVsLCB3ZSBzaG91bGQKLQkgKiBsZWF2ZSB0aGUgZHJpdmVyIGFyb3VuZCBmb3IgZnV0dXJlIGhvdHBsdWcgZXZlbnRzLgotCSAqIEZvciB0aGUgbW9kdWxlIGNhc2UsIGEgaG90cGx1ZyBkYWVtb24gb2Ygc29tZSBzb3J0Ci0JICogc2hvdWxkIGxvYWQgYSBtb2R1bGUgaW4gcmVzcG9uc2UgdG8gYW4gaW5zZXJ0IGV2ZW50LiAqLwotI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUcpICYmICFkZWZpbmVkKE1PRFVMRSkKLQlpZiAocmMgPT0gMCkKLQkJcmV0dXJuIDA7Ci0jZWxzZQotCWlmIChyYyA9PSAwKQotCQlyYyA9IC1FTk9ERVY7Ci0jZW5kaWYKLQotCS8qIGlmIHdlIGdldCBoZXJlLCB3ZSBuZWVkIHRvIGNsZWFuIHVwIERJTyBkcml2ZXIgaW5zdGFuY2UKLQkgKiBhbmQgcmV0dXJuIHNvbWUgc29ydCBvZiBlcnJvciAqLwotCWRpb191bnJlZ2lzdGVyX2RyaXZlcihkcnYpOwotCi0JcmV0dXJuIHJjOwotfQotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIG5kZWYgX0xJTlVYX0RJT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKaW5kZXggMmQ4MGNjNy4uYTg3MzEwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaApAQCAtMjAsNiArMjAsNyBAQAogI2RlZmluZSBETUFfMzFCSVRfTUFTSwkweDAwMDAwMDAwN2ZmZmZmZmZVTEwKICNkZWZpbmUgRE1BXzMwQklUX01BU0sJMHgwMDAwMDAwMDNmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8yOUJJVF9NQVNLCTB4MDAwMDAwMDAxZmZmZmZmZlVMTAorI2RlZmluZSBETUFfMjhCSVRfTUFTSwkweDAwMDAwMDAwMGZmZmZmZmZVTEwKIAogI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RuLmggYi9pbmNsdWRlL2xpbnV4L2RuLmgKaW5kZXggNzgyY2FlNC4uMTBiNmE2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbi5oCisrKyBiL2luY2x1ZGUvbGludXgvZG4uaApAQCAtNzEsMTcgKzcxLDE3IEBACiAKIHN0cnVjdCBkbl9uYWRkciAKIHsKLQl1bnNpZ25lZCBzaG9ydAkJYV9sZW47Ci0JdW5zaWduZWQgY2hhciBhX2FkZHJbRE5fTUFYQURETF07CisJX19sZTE2CQlhX2xlbjsKKwlfX3U4IGFfYWRkcltETl9NQVhBRERMXTsgLyogVHdvIGJ5dGVzIGxpdHRsZSBlbmRpYW4gKi8KIH07CiAKIHN0cnVjdCBzb2NrYWRkcl9kbgogewotCXVuc2lnbmVkIHNob3J0CQlzZG5fZmFtaWx5OwotCXVuc2lnbmVkIGNoYXIJCXNkbl9mbGFnczsKLQl1bnNpZ25lZCBjaGFyCQlzZG5fb2JqbnVtOwotCXVuc2lnbmVkIHNob3J0CQlzZG5fb2JqbmFtZWw7Ci0JdW5zaWduZWQgY2hhcgkJc2RuX29iam5hbWVbRE5fTUFYT0JKTF07CisJX191MTYJCXNkbl9mYW1pbHk7CisJX191OAkJc2RuX2ZsYWdzOworCV9fdTgJCXNkbl9vYmpudW07CisJX19sZTE2CQlzZG5fb2JqbmFtZWw7CisJX191OAkJc2RuX29iam5hbWVbRE5fTUFYT0JKTF07CiAJc3RydWN0ICAgZG5fbmFkZHIJc2RuX2FkZDsKIH07CiAjZGVmaW5lIHNkbl9ub2RlYWRkcmwgICBzZG5fYWRkLmFfbGVuICAgLyogTm9kZSBhZGRyZXNzIGxlbmd0aCAgKi8KQEAgLTkzLDM4ICs5MywzOCBAQAogICogREVDbmV0IHNldC9nZXQgRFNPX0NPTkRBVEEsIERTT19ESVNEQVRBIChvcHRpb25hbCBkYXRhKSBzdHJ1Y3R1cmUKICAqLwogc3RydWN0IG9wdGRhdGFfZG4gewotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgb3B0X3N0YXR1czsgICAgIC8qIEV4dGVuZGVkIHN0YXR1cyByZXR1cm4gKi8KKyAgICAgICAgX19sZTE2ICBvcHRfc3RhdHVzOyAgICAgLyogRXh0ZW5kZWQgc3RhdHVzIHJldHVybiAqLwogI2RlZmluZSBvcHRfc3RzIG9wdF9zdGF0dXMKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgIG9wdF9vcHRsOyAgICAgICAvKiBMZW5ndGggb2YgdXNlciBkYXRhICAgICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgICBvcHRfZGF0YVsxNl07ICAgLyogVXNlciBkYXRhICAgICAgICAgICAgICAqLworICAgICAgICBfX2xlMTYgIG9wdF9vcHRsOyAgICAgICAvKiBMZW5ndGggb2YgdXNlciBkYXRhICAgICovCisgICAgICAgIF9fdTggICBvcHRfZGF0YVsxNl07ICAgLyogVXNlciBkYXRhICAgICAgICAgICAgICAqLwogfTsKIAogc3RydWN0IGFjY2Vzc2RhdGFfZG4KIHsKLQl1bnNpZ25lZCBjaGFyCQlhY2NfYWNjbDsKLQl1bnNpZ25lZCBjaGFyCQlhY2NfYWNjW0ROX01BWEFDQ0xdOwotCXVuc2lnbmVkIGNoYXIgCQlhY2NfcGFzc2w7Ci0JdW5zaWduZWQgY2hhcgkJYWNjX3Bhc3NbRE5fTUFYQUNDTF07Ci0JdW5zaWduZWQgY2hhciAJCWFjY191c2VybDsKLQl1bnNpZ25lZCBjaGFyCQlhY2NfdXNlcltETl9NQVhBQ0NMXTsKKwlfX3U4CQlhY2NfYWNjbDsKKwlfX3U4CQlhY2NfYWNjW0ROX01BWEFDQ0xdOworCV9fdTggCQlhY2NfcGFzc2w7CisJX191OAkJYWNjX3Bhc3NbRE5fTUFYQUNDTF07CisJX191OCAJCWFjY191c2VybDsKKwlfX3U4CQlhY2NfdXNlcltETl9NQVhBQ0NMXTsKIH07CiAKIC8qCiAgKiBERUNuZXQgbG9naWNhbCBsaW5rIGluZm9ybWF0aW9uIHN0cnVjdHVyZQogICovCiBzdHJ1Y3QgbGlua2luZm9fZG4gewotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgaWRuX3NlZ3NpemU7ICAgIC8qIFNlZ21lbnQgc2l6ZSBmb3IgbGluayAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgaWRuX2xpbmtzdGF0ZTsgIC8qIExvZ2ljYWwgbGluayBzdGF0ZSAgICAqLworICAgICAgICBfX2xlMTYgIGlkbl9zZWdzaXplOyAgICAvKiBTZWdtZW50IHNpemUgZm9yIGxpbmsgKi8KKyAgICAgICAgX191OCAgIGlkbl9saW5rc3RhdGU7ICAvKiBMb2dpY2FsIGxpbmsgc3RhdGUgICAgKi8KIH07CiAKIC8qCiAgKiBFdGhlcm5ldCBhZGRyZXNzIGZvcm1hdCAoZm9yIERFQ25ldCkKICAqLwogdW5pb24gZXRoZXJhZGRyZXNzIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBkbmVfYWRkcls2XTsgICAgICAgICAgICAgLyogRnVsbCBldGhlcm5ldCBhZGRyZXNzICovCisgICAgICAgIF9fdTggZG5lX2FkZHJbNl07ICAgICAgICAgICAgIC8qIEZ1bGwgZXRoZXJuZXQgYWRkcmVzcyAqLwogICBzdHJ1Y3QgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZG5lX2hpb3JkWzRdOyAgICAvKiBERUNuZXQgSElPUkQgcHJlZml4ICAgKi8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRuZV9ub2RlYWRkclsyXTsgLyogREVDbmV0IG5vZGUgYWRkcmVzcyAgICovCisgICAgICAgICAgICAgICAgX191OCBkbmVfaGlvcmRbNF07ICAgIC8qIERFQ25ldCBISU9SRCBwcmVmaXggICAqLworICAgICAgICAgICAgICAgIF9fdTggZG5lX25vZGVhZGRyWzJdOyAvKiBERUNuZXQgbm9kZSBhZGRyZXNzICAgKi8KICAgfSBkbmVfcmVtb3RlOwogfTsKIApAQCAtMTMzLDcgKzEzMyw3IEBACiAgKiBERUNuZXQgcGh5c2ljYWwgc29ja2V0IGFkZHJlc3MgZm9ybWF0CiAgKi8KIHN0cnVjdCBkbl9hZGRyIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgZG5hX2ZhbWlseTsgICAgICAvKiBBRl9ERUNuZXQgICAgICAgICAgICAgICAqLworICAgICAgICBfX2xlMTYgZG5hX2ZhbWlseTsgICAgICAvKiBBRl9ERUNuZXQgICAgICAgICAgICAgICAqLwogICAgICAgICB1bmlvbiBldGhlcmFkZHJlc3MgZG5hX25ldGFkZHI7IC8qIERFQ25ldCBldGhlcm5ldCBhZGRyZXNzICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oIGIvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaAppbmRleCAyYjg3OTcwLi4wODc0YTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKQEAgLTEyMSw0ICsxMjEsMTcgQEAKICNkZWZpbmUgQVVESU9fU0VUX0FUVFJJQlVURVMgICAgICAgX0lPVygnbycsIDE3LCBhdWRpb19hdHRyaWJ1dGVzX3QpCiAjZGVmaW5lIEFVRElPX1NFVF9LQVJBT0tFICAgICAgICAgIF9JT1coJ28nLCAxOCwgYXVkaW9fa2FyYW9rZV90KQogCisvKioKKyAqIEFVRElPX0dFVF9QVFMKKyAqCisgKiBSZWFkIHRoZSAzMyBiaXQgcHJlc2VudGF0aW9uIHRpbWUgc3RhbXAgYXMgZGVmaW5lZAorICogaW4gSVRVIFQtUkVDLUguMjIyLjAgLyBJU08vSUVDIDEzODE4LTEuCisgKgorICogVGhlIFBUUyBzaG91bGQgYmVsb25nIHRvIHRoZSBjdXJyZW50bHkgcGxheWVkCisgKiBmcmFtZSBpZiBwb3NzaWJsZSwgYnV0IG1heSBhbHNvIGJlIGEgdmFsdWUgY2xvc2UgdG8gaXQKKyAqIGxpa2UgdGhlIFBUUyBvZiB0aGUgbGFzdCBkZWNvZGVkIGZyYW1lIG9yIHRoZSBsYXN0IFBUUworICogZXh0cmFjdGVkIGJ5IHRoZSBQRVMgcGFyc2VyLgorICovCisjZGVmaW5lIEFVRElPX0dFVF9QVFMgICAgICAgICAgICAgIF9JT1IoJ28nLCAxOSwgX191NjQpCisKICNlbmRpZiAvKiBfRFZCQVVESU9fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCmluZGV4IGI4MWU1OGIuLmZhZWJmZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaApAQCAtMjAwLDQgKzIwMCwxNyBAQAogI2RlZmluZSBWSURFT19HRVRfU0laRSAgICAgICAgICAgICBfSU9SKCdvJywgNTUsIHZpZGVvX3NpemVfdCkKICNkZWZpbmUgVklERU9fR0VUX0ZSQU1FX1JBVEUgICAgICAgX0lPUignbycsIDU2LCB1bnNpZ25lZCBpbnQpCiAKKy8qKgorICogVklERU9fR0VUX1BUUworICoKKyAqIFJlYWQgdGhlIDMzIGJpdCBwcmVzZW50YXRpb24gdGltZSBzdGFtcCBhcyBkZWZpbmVkCisgKiBpbiBJVFUgVC1SRUMtSC4yMjIuMCAvIElTTy9JRUMgMTM4MTgtMS4KKyAqCisgKiBUaGUgUFRTIHNob3VsZCBiZWxvbmcgdG8gdGhlIGN1cnJlbnRseSBwbGF5ZWQKKyAqIGZyYW1lIGlmIHBvc3NpYmxlLCBidXQgbWF5IGFsc28gYmUgYSB2YWx1ZSBjbG9zZSB0byBpdAorICogbGlrZSB0aGUgUFRTIG9mIHRoZSBsYXN0IGRlY29kZWQgZnJhbWUgb3IgdGhlIGxhc3QgUFRTCisgKiBleHRyYWN0ZWQgYnkgdGhlIFBFUyBwYXJzZXIuCisgKi8KKyNkZWZpbmUgVklERU9fR0VUX1BUUyAgICAgICAgICAgICAgX0lPUignbycsIDU3LCBfX3U2NCkKKwogI2VuZGlmIC8qX0RWQlZJREVPX0hfKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaCBiL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaAppbmRleCAxOGNmMWYzLi5hZDEzM2ZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCkBAIC00OCwxMCArNDgsMTcgQEAKIAogCWVsZXZhdG9yX2luaXRfZm4gKmVsZXZhdG9yX2luaXRfZm47CiAJZWxldmF0b3JfZXhpdF9mbiAqZWxldmF0b3JfZXhpdF9mbjsKKwl2b2lkICgqdHJpbSkoc3RydWN0IGlvX2NvbnRleHQgKik7CiB9OwogCiAjZGVmaW5lIEVMVl9OQU1FX01BWAkoMTYpCiAKK3N0cnVjdCBlbHZfZnNfZW50cnkgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoZWxldmF0b3JfdCAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoZWxldmF0b3JfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OworCiAvKgogICogaWRlbnRpZmllcyBhbiBlbGV2YXRvciB0eXBlLCBzdWNoIGFzIEFTIG9yIGRlYWRsaW5lCiAgKi8KQEAgLTYwLDcgKzY3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGVsZXZhdG9yX29wcyBvcHM7CiAJc3RydWN0IGVsZXZhdG9yX3R5cGUgKmVsZXZhdG9yX3R5cGU7Ci0Jc3RydWN0IGtvYmpfdHlwZSAqZWxldmF0b3Jfa3R5cGU7CisJc3RydWN0IGVsdl9mc19lbnRyeSAqZWxldmF0b3JfYXR0cnM7CiAJY2hhciBlbGV2YXRvcl9uYW1lW0VMVl9OQU1FX01BWF07CiAJc3RydWN0IG1vZHVsZSAqZWxldmF0b3Jfb3duZXI7CiB9OwpAQCAtNzQsNiArODEsNyBAQAogCXZvaWQgKmVsZXZhdG9yX2RhdGE7CiAJc3RydWN0IGtvYmplY3Qga29iajsKIAlzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZWxldmF0b3JfdHlwZTsKKwlzdHJ1Y3QgbXV0ZXggc3lzZnNfbG9jazsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oIGIvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaAppbmRleCAxMjg5ZjBlLi4xZTRiZGZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKQEAgLTUyLDcgKzUyLDEyIEBACiAjaWZkZWYgQ09ORklHX0VQT0xMCiAKIC8qIFVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZXBvbGwgYml0cyBpbnNpZGUgdGhlICJzdHJ1Y3QgZmlsZSIgKi8KLXZvaWQgZXZlbnRwb2xsX2luaXRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgZXZlbnRwb2xsX2luaXRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlJTklUX0xJU1RfSEVBRCgmZmlsZS0+Zl9lcF9saW5rcyk7CisJc3Bpbl9sb2NrX2luaXQoJmZpbGUtPmZfZXBfbG9jayk7Cit9CisKIAogLyogVXNlZCB0byByZWxlYXNlIHRoZSBlcG9sbCBiaXRzIGluc2lkZSB0aGUgInN0cnVjdCBmaWxlIiAqLwogdm9pZCBldmVudHBvbGxfcmVsZWFzZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTsKQEAgLTg1LDcgKzkwLDYgQEAKIAlldmVudHBvbGxfcmVsZWFzZV9maWxlKGZpbGUpOwogfQogCi0KICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBldmVudHBvbGxfaW5pdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlKSB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAppbmRleCBjMDI3MmQ3Li5lNzIzOWYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaApAQCAtNzcyLDkgKzc3MiwxMiBAQAogCiAKIC8qIGlub2RlLmMgKi8KLWV4dGVybiBpbnQgZXh0M19mb3JnZXQoaGFuZGxlX3QgKiwgaW50LCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7Ci1leHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZXh0M19nZXRibGsgKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBsb25nLCBpbnQsIGludCAqKTsKLWV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBleHQzX2JyZWFkIChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQsIGludCAqKTsKK2ludCBleHQzX2ZvcmdldChoYW5kbGVfdCAqLCBpbnQsIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKK3N0cnVjdCBidWZmZXJfaGVhZCAqIGV4dDNfZ2V0YmxrIChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgbG9uZywgaW50LCBpbnQgKik7CitzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBleHQzX2JyZWFkIChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQsIGludCAqKTsKK2ludCBleHQzX2dldF9ibG9ja19oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwlzZWN0b3JfdCBpYmxvY2ssIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlLAorCWludCBleHRlbmRfZGlza3NpemUpOwogCiBleHRlcm4gdm9pZCBleHQzX3JlYWRfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgIGV4dDNfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKaW5kZXggZTcxZGQ5OC4uN2FiZjkwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3cgewogCV9fdTMyCQkJX3Jzdl9zdGFydDsJLyogRmlyc3QgYnl0ZSByZXNlcnZlZCAqLwpAQCAtMTIyLDE2ICsxMjMsMTYgQEAKIAlfX3UxNiBpX2V4dHJhX2lzaXplOwogCiAJLyoKLQkgKiB0cnVuY2F0ZV9zZW0gaXMgZm9yIHNlcmlhbGlzaW5nIGV4dDNfdHJ1bmNhdGUoKSBhZ2FpbnN0CisJICogdHJ1bmNhdGVfbXV0ZXggaXMgZm9yIHNlcmlhbGlzaW5nIGV4dDNfdHJ1bmNhdGUoKSBhZ2FpbnN0CiAJICogZXh0M19nZXRibG9jaygpLiAgSW4gdGhlIDIuNCBleHQyIGRlc2lnbiwgZ3JlYXQgY2h1bmtzIG9mIGlub2RlJ3MKIAkgKiBkYXRhIHRyZWUgYXJlIGNob3BwZWQgb2ZmIGR1cmluZyB0cnVuY2F0ZS4gV2UgY2FuJ3QgZG8gdGhhdCBpbgogCSAqIGV4dDMgYmVjYXVzZSB3aGVuZXZlciB3ZSBwZXJmb3JtIGludGVybWVkaWF0ZSBjb21taXRzIGR1cmluZwogCSAqIHRydW5jYXRlLCB0aGUgaW5vZGUgYW5kIGFsbCB0aGUgbWV0YWRhdGEgYmxvY2tzICptdXN0KiBiZSBpbiBhCiAJICogY29uc2lzdGVudCBzdGF0ZSB3aGljaCBhbGxvd3MgdHJ1bmNhdGlvbiBvZiB0aGUgb3JwaGFucyB0byByZXN0YXJ0CiAJICogZHVyaW5nIHJlY292ZXJ5LiAgSGVuY2Ugd2UgbXVzdCBmaXggdGhlIGdldF9ibG9jay12cy10cnVuY2F0ZSByYWNlCi0JICogYnkgb3RoZXIgbWVhbnMsIHNvIHdlIGhhdmUgdHJ1bmNhdGVfc2VtLgorCSAqIGJ5IG90aGVyIG1lYW5zLCBzbyB3ZSBoYXZlIHRydW5jYXRlX211dGV4LgogCSAqLwotCXN0cnVjdCBzZW1hcGhvcmUgdHJ1bmNhdGVfc2VtOworCXN0cnVjdCBtdXRleCB0cnVuY2F0ZV9tdXRleDsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYWR2aXNlLmggYi9pbmNsdWRlL2xpbnV4L2ZhZHZpc2UuaAppbmRleCBlOGU3NDcxLi5iMjkxM2JiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZhZHZpc2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZhZHZpc2UuaApAQCAtMTgsNCArMTgsMTAgQEAKICNkZWZpbmUgUE9TSVhfRkFEVl9OT1JFVVNFCTUgLyogRGF0YSB3aWxsIGJlIGFjY2Vzc2VkIG9uY2UuICAqLwogI2VuZGlmCiAKKy8qCisgKiBMaW51eC1zcGVjaWZpYyBmYWR2aXNlKCkgZXh0ZW5zaW9uczoKKyAqLworI2RlZmluZSBMSU5VWF9GQURWX0FTWU5DX1dSSVRFCTMyCS8qIFN0YXJ0IHdyaXRlb3V0IG9uIHJhbmdlICovCisjZGVmaW5lIExJTlVYX0ZBRFZfV1JJVEVfV0FJVAkzMwkvKiBXYWl0IHVwb24gd3JpdGVvdXQgdG8gcmFuZ2UgKi8KKwogI2VuZGlmCS8qIEZBRFZJU0VfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWxlLmggYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaAppbmRleCA0MThiNjEwLi45ZjdjMjUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpbGUuaApAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qCiAgKiBUaGUgZGVmYXVsdCBmZCBhcnJheSBuZWVkcyB0byBiZSBhdCBsZWFzdCBCSVRTX1BFUl9MT05HLApAQCAtMTcsMTAgKzE4LDIyIEBACiAgKi8KICNkZWZpbmUgTlJfT1BFTl9ERUZBVUxUIEJJVFNfUEVSX0xPTkcKIAorLyoKKyAqIFRoZSBlbWJlZGRlZF9mZF9zZXQgaXMgYSBzbWFsbCBmZF9zZXQsCisgKiBzdWl0YWJsZSBmb3IgbW9zdCB0YXNrcyAod2hpY2ggb3BlbiA8PSBCSVRTX1BFUl9MT05HIGZpbGVzKQorICovCitzdHJ1Y3QgZW1iZWRkZWRfZmRfc2V0IHsKKwl1bnNpZ25lZCBsb25nIGZkc19iaXRzWzFdOworfTsKKworLyoKKyAqIE1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiBmZHM6IHdlIHVzZSBhIHNlcGFyYXRlbHkgYWxsb2NhdGVkIGZkX3NldAorICovCisjZGVmaW5lIEVNQkVEREVEX0ZEX1NFVF9TSVpFIChCSVRTX1BFUl9CWVRFICogc2l6ZW9mKHN0cnVjdCBlbWJlZGRlZF9mZF9zZXQpKQorCiBzdHJ1Y3QgZmR0YWJsZSB7CiAJdW5zaWduZWQgaW50IG1heF9mZHM7CiAJaW50IG1heF9mZHNldDsKLQlpbnQgbmV4dF9mZDsKIAlzdHJ1Y3QgZmlsZSAqKiBmZDsgICAgICAvKiBjdXJyZW50IGZkIGFycmF5ICovCiAJZmRfc2V0ICpjbG9zZV9vbl9leGVjOwogCWZkX3NldCAqb3Blbl9mZHM7CkBAIC0zMywxMyArNDYsMjAgQEAKICAqIE9wZW4gZmlsZSB0YWJsZSBzdHJ1Y3R1cmUKICAqLwogc3RydWN0IGZpbGVzX3N0cnVjdCB7CisgIC8qCisgICAqIHJlYWQgbW9zdGx5IHBhcnQKKyAgICovCiAJYXRvbWljX3QgY291bnQ7CiAJc3RydWN0IGZkdGFibGUgKmZkdDsKIAlzdHJ1Y3QgZmR0YWJsZSBmZHRhYjsKLQlmZF9zZXQgY2xvc2Vfb25fZXhlY19pbml0OwotCWZkX3NldCBvcGVuX2Zkc19pbml0OworICAvKgorICAgKiB3cml0dGVuIHBhcnQgb24gYSBzZXBhcmF0ZSBjYWNoZSBsaW5lIGluIFNNUAorICAgKi8KKwlzcGlubG9ja190IGZpbGVfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCWludCBuZXh0X2ZkOworCXN0cnVjdCBlbWJlZGRlZF9mZF9zZXQgY2xvc2Vfb25fZXhlY19pbml0OworCXN0cnVjdCBlbWJlZGRlZF9mZF9zZXQgb3Blbl9mZHNfaW5pdDsKIAlzdHJ1Y3QgZmlsZSAqIGZkX2FycmF5W05SX09QRU5fREVGQVVMVF07Ci0Jc3BpbmxvY2tfdCBmaWxlX2xvY2s7ICAgICAvKiBQcm90ZWN0cyBjb25jdXJyZW50IHdyaXRlcnMuICBOZXN0cyBpbnNpZGUgdHNrLT5hbGxvY19sb2NrICovCiB9OwogCiAjZGVmaW5lIGZpbGVzX2ZkdGFibGUoZmlsZXMpIChyY3VfZGVyZWZlcmVuY2UoKGZpbGVzKS0+ZmR0KSkKQEAgLTYwLDggKzgwLDYgQEAKIGV4dGVybiBpbnQgZ2V0X3VudXNlZF9mZCh2b2lkKTsKIGV4dGVybiB2b2lkIEZBU1RDQUxMKHB1dF91bnVzZWRfZmQodW5zaWduZWQgaW50IGZkKSk7CiBzdHJ1Y3Qga21lbV9jYWNoZTsKLWV4dGVybiB2b2lkIGZpbHBfY3Rvcih2b2lkICogb2JqcCwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBjZmxhZ3MpOwotZXh0ZXJuIHZvaWQgZmlscF9kdG9yKHZvaWQgKiBvYmpwLCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB1bnNpZ25lZCBsb25nIGRmbGFncyk7CiAKIGV4dGVybiBzdHJ1Y3QgZmlsZSAqKiBhbGxvY19mZF9hcnJheShpbnQpOwogZXh0ZXJuIHZvaWQgZnJlZV9mZF9hcnJheShzdHJ1Y3QgZmlsZSAqKiwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBlMDU5ZGE5Li4yMWU4Y2Y3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0zNSw2ICszNSw3IEBACiAJaW50IG1heF9maWxlczsJCS8qIHR1bmFibGUgKi8KIH07CiBleHRlcm4gc3RydWN0IGZpbGVzX3N0YXRfc3RydWN0IGZpbGVzX3N0YXQ7CitleHRlcm4gaW50IGdldF9tYXhfZmlsZXModm9pZCk7CiAKIHN0cnVjdCBpbm9kZXNfc3RhdF90IHsKIAlpbnQgbnJfaW5vZGVzOwpAQCAtNjQsNiArNjUsMTEgQEAKICNkZWZpbmUgRk1PREVfUFJFQUQJOAogI2RlZmluZSBGTU9ERV9QV1JJVEUJRk1PREVfUFJFQUQJLyogVGhlc2UgZ28gaGFuZCBpbiBoYW5kICovCiAKKy8qIEZpbGUgaXMgYmVpbmcgb3BlbmVkIGZvciBleGVjdXRpb24uIFByaW1hcnkgdXNlcnMgb2YgdGhpcyBmbGFnIGFyZQorICAgZGlzdHJpYnV0ZWQgZmlsZXN5c3RlbXMgdGhhdCBjYW4gdXNlIGl0IHRvIGFjaGlldmUgY29ycmVjdCBFVFhUQlVTWQorICAgYmVoYXZpb3IgZm9yIGNyb3NzLW5vZGUgZXhlY3V0aW9uL29wZW5pbmdfZm9yX3dyaXRpbmcgb2YgZmlsZXMgKi8KKyNkZWZpbmUgRk1PREVfRVhFQwkxNgorCiAjZGVmaW5lIFJXX01BU0sJCTEKICNkZWZpbmUgUldBX01BU0sJMgogI2RlZmluZSBSRUFEIDAKQEAgLTEwMiw3ICsxMDgsOSBAQAogI2RlZmluZSBNU19CSU5ECQk0MDk2CiAjZGVmaW5lIE1TX01PVkUJCTgxOTIKICNkZWZpbmUgTVNfUkVDCQkxNjM4NAotI2RlZmluZSBNU19WRVJCT1NFCTMyNzY4CisjZGVmaW5lIE1TX1ZFUkJPU0UJMzI3NjgJLyogV2FyIGlzIHBlYWNlLiBWZXJib3NpdHkgaXMgc2lsZW5jZS4KKwkJCQkgICBNU19WRVJCT1NFIGlzIGRlcHJlY2F0ZWQuICovCisjZGVmaW5lIE1TX1NJTEVOVAkzMjc2OAogI2RlZmluZSBNU19QT1NJWEFDTAkoMTw8MTYpCS8qIFZGUyBkb2VzIG5vdCBhcHBseSB0aGUgdW1hc2sgKi8KICNkZWZpbmUgTVNfVU5CSU5EQUJMRQkoMTw8MTcpCS8qIGNoYW5nZSB0byB1bmJpbmRhYmxlICovCiAjZGVmaW5lIE1TX1BSSVZBVEUJKDE8PDE4KQkvKiBjaGFuZ2UgdG8gcHJpdmF0ZSAqLwpAQCAtMTk2LDYgKzIwNCwxMCBAQAogI2RlZmluZSBCTEtCU1pHRVQgIF9JT1IoMHgxMiwxMTIsc2l6ZV90KQogI2RlZmluZSBCTEtCU1pTRVQgIF9JT1coMHgxMiwxMTMsc2l6ZV90KQogI2RlZmluZSBCTEtHRVRTSVpFNjQgX0lPUigweDEyLDExNCxzaXplX3QpCS8qIHJldHVybiBkZXZpY2Ugc2l6ZSBpbiBieXRlcyAodTY0ICphcmcpICovCisjZGVmaW5lIEJMS1RSQUNFU0VUVVAgX0lPV1IoMHgxMiwxMTUsc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwKQorI2RlZmluZSBCTEtUUkFDRVNUQVJUIF9JTygweDEyLDExNikKKyNkZWZpbmUgQkxLVFJBQ0VTVE9QIF9JTygweDEyLDExNykKKyNkZWZpbmUgQkxLVFJBQ0VURUFSRE9XTiBfSU8oMHgxMiwxMTgpCiAKICNkZWZpbmUgQk1BUF9JT0NUTCAxCQkvKiBvYnNvbGV0ZSAtIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgRklCTUFQCSAgIF9JTygweDAwLDEpCS8qIGJtYXAgYWNjZXNzICovCkBAIC0zNDMsNyArMzU1LDcgQEAKIAkvKiBXcml0ZSBiYWNrIHNvbWUgZGlydHkgcGFnZXMgZnJvbSB0aGlzIG1hcHBpbmcuICovCiAJaW50ICgqd3JpdGVwYWdlcykoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogCi0JLyogU2V0IGEgcGFnZSBkaXJ0eSAqLworCS8qIFNldCBhIHBhZ2UgZGlydHkuICBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGRpcnRpZWQgaXQgKi8KIAlpbnQgKCpzZXRfcGFnZV9kaXJ0eSkoc3RydWN0IHBhZ2UgKnBhZ2UpOwogCiAJaW50ICgqcmVhZHBhZ2VzKShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCkBAIC0zOTYsOCArNDA4LDggQEAKIAlkZXZfdAkJCWJkX2RldjsgIC8qIG5vdCBhIGtkZXZfdCAtIGl0J3MgYSBzZWFyY2gga2V5ICovCiAJc3RydWN0IGlub2RlICoJCWJkX2lub2RlOwkvKiB3aWxsIGRpZSAqLwogCWludAkJCWJkX29wZW5lcnM7Ci0Jc3RydWN0IHNlbWFwaG9yZQliZF9zZW07CS8qIG9wZW4vY2xvc2UgbXV0ZXggKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlCWJkX21vdW50X3NlbTsJLyogbW91bnQgbXV0ZXggKi8KKwlzdHJ1Y3QgbXV0ZXgJCWJkX211dGV4OwkvKiBvcGVuL2Nsb3NlIG11dGV4ICovCisJc3RydWN0IG11dGV4CQliZF9tb3VudF9tdXRleDsJLyogbW91bnQgbXV0ZXggKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWJkX2lub2RlczsKIAl2b2lkICoJCQliZF9ob2xkZXI7CiAJaW50CQkJYmRfaG9sZGVyczsKQEAgLTUwOCw3ICs1MjAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0lOT1RJRlkKIAlzdHJ1Y3QgbGlzdF9oZWFkCWlub3RpZnlfd2F0Y2hlczsgLyogd2F0Y2hlcyBvbiB0aGlzIGlub2RlICovCi0Jc3RydWN0IHNlbWFwaG9yZQlpbm90aWZ5X3NlbTsJLyogcHJvdGVjdHMgdGhlIHdhdGNoZXMgbGlzdCAqLworCXN0cnVjdCBtdXRleAkJaW5vdGlmeV9tdXRleDsJLyogcHJvdGVjdHMgdGhlIHdhdGNoZXMgbGlzdCAqLwogI2VuZGlmCiAKIAl1bnNpZ25lZCBsb25nCQlpX3N0YXRlOwpAQCAtODQ2LDcgKzg1OCw3IEBACiAJICogVGhlIG5leHQgZmllbGQgaXMgZm9yIFZGUyAqb25seSouIE5vIGZpbGVzeXN0ZW1zIGhhdmUgYW55IGJ1c2luZXNzCiAJICogZXZlbiBsb29raW5nIGF0IGl0LiBZb3UgaGFkIGJlZW4gd2FybmVkLgogCSAqLwotCXN0cnVjdCBzZW1hcGhvcmUgc192ZnNfcmVuYW1lX3NlbTsJLyogS2x1ZGdlICovCisJc3RydWN0IG11dGV4IHNfdmZzX3JlbmFtZV9tdXRleDsJLyogS2x1ZGdlICovCiAKIAkvKiBHcmFudWFsaXR5IG9mIGMvbS9hdGltZSBpbiBucy4KIAkgICBDYW5ub3QgYmUgd29yc2UgdGhhbiBhIHNlY29uZCAqLwpAQCAtMTExNCw2ICsxMTI2LDE4IEBACiAJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1NZTkMpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfaW5jX2xpbmtfY291bnQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbm9kZS0+aV9ubGluaysrOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfZGVjX2xpbmtfY291bnQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbm9kZS0+aV9ubGluay0tOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworfQorCiBleHRlcm4gdm9pZCB0b3VjaF9hdGltZShzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxlX2FjY2Vzc2VkKHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtMTQxOCw5ICsxNDQyLDYgQEAKIGV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfZmlmb19mb3BzOwogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd3JpdGVfZmlmb19mb3BzOwogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmR3cl9maWZvX2ZvcHM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWFkX3BpcGVfZm9wczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX3BpcGVfZm9wczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzOwogCiBleHRlcm4gaW50IGZzX21heV9yZW1vdW50X3JvKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIApAQCAtMTQ1Nyw2ICsxNDc4LDEyIEBACiBleHRlcm4gaW50IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogZXh0ZXJuIGludCBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCSAgICAgICAgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpOworZXh0ZXJuIGludCB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCXBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kKTsKK2V4dGVybiBpbnQgX19maWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgc3luY19tb2RlKTsKKworZXh0ZXJuIGxvbmcgZG9fZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGludCBkYXRhc3luYyk7CiBleHRlcm4gdm9pZCBzeW5jX3N1cGVycyh2b2lkKTsKIGV4dGVybiB2b2lkIHN5bmNfZmlsZXN5c3RlbXMoaW50IHdhaXQpOwogZXh0ZXJuIHZvaWQgZW1lcmdlbmN5X3N5bmModm9pZCk7CkBAIC0xNTM2LDcgKzE1NjMsNiBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBpbnQgcmVtb3ZlX3N1aWQoc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiB2b2lkIHJlbW92ZV9kcXVvdF9yZWYoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgc3RydWN0IGxpc3RfaGVhZCAqKTsKLWV4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIGlwcnVuZV9zZW07CiAKIGV4dGVybiB2b2lkIF9faW5zZXJ0X2lub2RlX2hhc2goc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcgaGFzaHZhbCk7CiBleHRlcm4gdm9pZCByZW1vdmVfaW5vZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKik7CkBAIC0xNjY2LDYgKzE2OTIsOCBAQAogZXh0ZXJuIGludCBwYWdlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKiwgaW50KTsKIGV4dGVybiB2b2lkICpwYWdlX2ZvbGxvd19saW5rX2xpZ2h0KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGV4dGVybiB2b2lkIHBhZ2VfcHV0X2xpbmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICosIHZvaWQgKik7CitleHRlcm4gaW50IF9fcGFnZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnN5bW5hbWUsIGludCBsZW4sCisJCWdmcF90IGdmcF9tYXNrKTsKIGV4dGVybiBpbnQgcGFnZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnN5bW5hbWUsIGludCBsZW4pOwogZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGludCBnZW5lcmljX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciBfX3VzZXIgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaCBiL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAppbmRleCBhOWYxY2ZkLi5hM2EwZTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCkBAIC04Myw1ICs4MywzMiBAQAogI2RlZmluZSBGU0xfSTJDX0RFVl9TRVBBUkFURV9ERlNSUgkweDAwMDAwMDAxCiAjZGVmaW5lIEZTTF9JMkNfREVWX0NMT0NLXzUyMDAJCTB4MDAwMDAwMDIKIAorCitlbnVtIGZzbF91c2IyX29wZXJhdGluZ19tb2RlcyB7CisJRlNMX1VTQjJfTVBIX0hPU1QsCisJRlNMX1VTQjJfRFJfSE9TVCwKKwlGU0xfVVNCMl9EUl9ERVZJQ0UsCisJRlNMX1VTQjJfRFJfT1RHLAorfTsKKworZW51bSBmc2xfdXNiMl9waHlfbW9kZXMgeworCUZTTF9VU0IyX1BIWV9OT05FLAorCUZTTF9VU0IyX1BIWV9VTFBJLAorCUZTTF9VU0IyX1BIWV9VVE1JLAorCUZTTF9VU0IyX1BIWV9VVE1JX1dJREUsCisJRlNMX1VTQjJfUEhZX1NFUklBTCwKK307CisKK3N0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHsKKwkvKiBib2FyZCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCWVudW0gZnNsX3VzYjJfb3BlcmF0aW5nX21vZGVzIG9wZXJhdGluZ19tb2RlOworCWVudW0gZnNsX3VzYjJfcGh5X21vZGVzIHBoeV9tb2RlOworCXVuc2lnbmVkIGludCBwb3J0X2VuYWJsZXM7Cit9OworCisvKiBGbGFncyBpbiBmc2xfdXNiMl9tcGhfcGxhdGZvcm1fZGF0YSAqLworI2RlZmluZSBGU0xfVVNCMl9QT1JUMF9FTkFCTEVECTB4MDAwMDAwMDEKKyNkZWZpbmUgRlNMX1VTQjJfUE9SVDFfRU5BQkxFRAkweDAwMDAwMDAyCisKICNlbmRpZgkJCQkvKiBfRlNMX0RFVklDRV9IXyAqLwogI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaCBiL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaAppbmRleCAwM2I4ZTc5Li5mN2U1MTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKKysrIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCkBAIC0xNyw2ICsxNywyNSBAQAogI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KIAogLyoKKyAqIGZzbm90aWZ5X2RfaW5zdGFudGlhdGUgLSBpbnN0YW50aWF0ZSBhIGRlbnRyeSBmb3IgaW5vZGUKKyAqIENhbGxlZCB3aXRoIGRjYWNoZV9sb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV9kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmVudHJ5LAorCQkJCQkJc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbm90aWZ5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKK30KKworLyoKKyAqIGZzbm90aWZ5X2RfbW92ZSAtIGVudHJ5IGhhcyBiZWVuIG1vdmVkCisgKiBDYWxsZWQgd2l0aCBkY2FjaGVfbG9jayBhbmQgZW50cnktPmRfbG9jayBoZWxkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmVudHJ5KQoreworCWlub3RpZnlfZF9tb3ZlKGVudHJ5KTsKK30KKworLyoKICAqIGZzbm90aWZ5X21vdmUgLSBmaWxlIG9sZF9uYW1lIGF0IG9sZF9kaXIgd2FzIG1vdmVkIHRvIG5ld19uYW1lIGF0IG5ld19kaXIKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X21vdmUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmgKaW5kZXggMGFiZTlkOS4uNjUyNjExYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5lcmljX3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaApAQCAtMTIsNiArMTIsOCBAQAogI2lmbmRlZiBHRU5FUklDX1NFUklBTF9ICiAjZGVmaW5lIEdFTkVSSUNfU0VSSUFMX0gKIAorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKIHN0cnVjdCByZWFsX2RyaXZlciB7CiAgIHZvaWQgICAgICAgICAgICAgICAgICAgICgqZGlzYWJsZV90eF9pbnRlcnJ1cHRzKSAodm9pZCAqKTsKICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKCplbmFibGVfdHhfaW50ZXJydXB0cykgKHZvaWQgKik7CkBAIC0zNCw3ICszNiw3IEBACiAgIGludCAgICAgICAgICAgICAgICAgICAgIHhtaXRfaGVhZDsKICAgaW50ICAgICAgICAgICAgICAgICAgICAgeG1pdF90YWlsOwogICBpbnQgICAgICAgICAgICAgICAgICAgICB4bWl0X2NudDsKLSAgc3RydWN0IHNlbWFwaG9yZSAgICAgICAgcG9ydF93cml0ZV9zZW07CisgIHN0cnVjdCBtdXRleCAgICAgICAgICAgIHBvcnRfd3JpdGVfbXV0ZXg7CiAgIGludCAgICAgICAgICAgICAgICAgICAgIGZsYWdzOwogICB3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBvcGVuX3dhaXQ7CiAgIHdhaXRfcXVldWVfaGVhZF90ICAgICAgIGNsb3NlX3dhaXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggZWVmNWNjZC4uZmQ2NDdmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtMTQ5LDIyICsxNDksMTYgQEAKICh7CQkJCQkJCQkJXAogCXR5cGVvZihnZW5kaXNrcC0+ZGtzdGF0cy0+ZmllbGQpIHJlcyA9IDA7CQkJXAogCWludCBpOwkJCQkJCQkJXAotCWZvciAoaT0wOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CQkJCQlcCi0JCWlmICghY3B1X3Bvc3NpYmxlKGkpKQkJCQkJXAotCQkJY29udGludWU7CQkJCQlcCisJZm9yX2VhY2hfY3B1KGkpCQkJCQkJCVwKIAkJcmVzICs9IHBlcl9jcHVfcHRyKGdlbmRpc2twLT5ka3N0YXRzLCBpKS0+ZmllbGQ7CVwKLQl9CQkJCQkJCQlcCiAJcmVzOwkJCQkJCQkJXAogfSkKIAogc3RhdGljIGlubGluZSB2b2lkIGRpc2tfc3RhdF9zZXRfYWxsKHN0cnVjdCBnZW5kaXNrICpnZW5kaXNrcCwgaW50IHZhbHVlKQl7CiAJaW50IGk7Ci0JZm9yIChpPTA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJaWYgKGNwdV9wb3NzaWJsZShpKSkgewotCQkJbWVtc2V0KHBlcl9jcHVfcHRyKGdlbmRpc2twLT5ka3N0YXRzLCBpKSwgdmFsdWUsCQotCQkJCQlzaXplb2YgKHN0cnVjdCBkaXNrX3N0YXRzKSk7Ci0JCX0KLQl9CisJZm9yX2VhY2hfY3B1KGkpCisJCW1lbXNldChwZXJfY3B1X3B0cihnZW5kaXNrcC0+ZGtzdGF0cywgaSksIHZhbHVlLAorCQkJCXNpemVvZiAoc3RydWN0IGRpc2tfc3RhdHMpKTsKIH0JCQogCQkJCQogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IDIwZjkxNDguLjc4NTFlNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMTU3LDkgKzE1Nyw5IEBACiAKIHZvaWQgcGFnZV9hbGxvY19pbml0KHZvaWQpOwogI2lmZGVmIENPTkZJR19OVU1BCi12b2lkIGRyYWluX3JlbW90ZV9wYWdlcyh2b2lkKTsKK3ZvaWQgZHJhaW5fbm9kZV9wYWdlcyhpbnQgbm9kZSk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGRyYWluX3JlbW90ZV9wYWdlcyh2b2lkKSB7IH07CitzdGF0aWMgaW5saW5lIHZvaWQgZHJhaW5fbm9kZV9wYWdlcyhpbnQgbm9kZSkgeyB9OwogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0xJTlVYX0dGUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCmluZGV4IDYzNjE1NDQuLjY0MDFjMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCkBAIC0xMTYsNiArMTE2LDEwIEBACiBleHRlcm4ga3RpbWVfdCBocnRpbWVyX2dldF9yZW1haW5pbmcoY29uc3Qgc3RydWN0IGhydGltZXIgKnRpbWVyKTsKIGV4dGVybiBpbnQgaHJ0aW1lcl9nZXRfcmVzKGNvbnN0IGNsb2NraWRfdCB3aGljaF9jbG9jaywgc3RydWN0IHRpbWVzcGVjICp0cCk7CiAKKyNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgorZXh0ZXJuIGt0aW1lX3QgaHJ0aW1lcl9nZXRfbmV4dF9ldmVudCh2b2lkKTsKKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2FjdGl2ZShjb25zdCBzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCiB7CiAJcmV0dXJuIHRpbWVyLT5zdGF0ZSA9PSBIUlRJTUVSX1BFTkRJTkc7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IDY4ZDgyYWQuLmQ2ZjEwMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0yMCwxMCArMjAsNyBAQAogaW50IGh1Z2V0bGJfcHJlZmF1bHQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogaW50IGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oY2hhciAqKTsKIGludCBodWdldGxiX3JlcG9ydF9ub2RlX21lbWluZm8oaW50LCBjaGFyICopOwotaW50IGlzX2h1Z2VwYWdlX21lbV9lbm91Z2goc2l6ZV90KTsKIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKTsKLXN0cnVjdCBwYWdlICphbGxvY19odWdlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOwotdm9pZCBmcmVlX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKIGludCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7CiAKQEAgLTM5LDE4ICszNiwzNSBAQAogCQkJICAgICAgaW50IHdyaXRlKTsKIHN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCQlwbWRfdCAqcG1kLCBpbnQgd3JpdGUpOwotaW50IGlzX2FsaWduZWRfaHVnZXBhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CiBpbnQgcG1kX2h1Z2UocG1kX3QgcG1kKTsKK3ZvaWQgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGVuZCwgcGdwcm90X3QgbmV3cHJvdCk7CiAKICNpZm5kZWYgQVJDSF9IQVNfSFVHRVBBR0VfT05MWV9SQU5HRQogI2RlZmluZSBpc19odWdlcGFnZV9vbmx5X3JhbmdlKG1tLCBhZGRyLCBsZW4pCTAKLSNkZWZpbmUgaHVnZXRsYl9mcmVlX3BnZF9yYW5nZSh0bGIsIGFkZHIsIGVuZCwgZmxvb3IsIGNlaWxpbmcpIFwKLQkJCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIEFSQ0hfSEFTX0hVR0VUTEJfRlJFRV9QR0RfUkFOR0UKKyNkZWZpbmUgaHVnZXRsYl9mcmVlX3BnZF9yYW5nZQlmcmVlX3BnZF9yYW5nZQorI2Vsc2UKK3ZvaWQgaHVnZXRsYl9mcmVlX3BnZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqKnRsYiwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIGZsb29yLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgY2VpbGluZyk7CiAjZW5kaWYKIAogI2lmbmRlZiBBUkNIX0hBU19QUkVQQVJFX0hVR0VQQUdFX1JBTkdFCi0jZGVmaW5lIHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UoYWRkciwgbGVuKQlcCi0JaXNfYWxpZ25lZF9odWdlcGFnZV9yYW5nZShhZGRyLCBsZW4pCisvKgorICogSWYgdGhlIGFyY2ggZG9lc24ndCBzdXBwbHkgc29tZXRoaW5nIGVsc2UsIGFzc3VtZSB0aGF0IGh1Z2VwYWdlCisgKiBzaXplIGFsaWduZWQgcmVnaW9ucyBhcmUgb2sgd2l0aG91dCBmdXJ0aGVyIHByZXBhcmF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGludCBwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaWYgKGxlbiAmIH5IUEFHRV9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoYWRkciAmIH5IUEFHRV9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KICNlbHNlCiBpbnQgcHJlcGFyZV9odWdlcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKICNlbmRpZgpAQCAtODcsMjAgKzEwMSwxNyBAQAogI2RlZmluZSBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzcmMsIGRzdCwgdm1hKQkoeyBCVUcoKTsgMDsgfSkKICNkZWZpbmUgaHVnZXRsYl9wcmVmYXVsdChtYXBwaW5nLCB2bWEpCQkoeyBCVUcoKTsgMDsgfSkKICNkZWZpbmUgdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlCVUcoKQotI2RlZmluZSBpc19odWdlcGFnZV9tZW1fZW5vdWdoKHNpemUpCQkwCiAjZGVmaW5lIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oYnVmKQkJMAogI2RlZmluZSBodWdldGxiX3JlcG9ydF9ub2RlX21lbWluZm8obiwgYnVmKQkwCiAjZGVmaW5lIGZvbGxvd19odWdlX3BtZChtbSwgYWRkciwgcG1kLCB3cml0ZSkJTlVMTAotI2RlZmluZSBpc19hbGlnbmVkX2h1Z2VwYWdlX3JhbmdlKGFkZHIsIGxlbikJMAogI2RlZmluZSBwcmVwYXJlX2h1Z2VwYWdlX3JhbmdlKGFkZHIsIGxlbikJKC1FSU5WQUwpCiAjZGVmaW5lIHBtZF9odWdlKHgpCTAKICNkZWZpbmUgaXNfaHVnZXBhZ2Vfb25seV9yYW5nZShtbSwgYWRkciwgbGVuKQkwCi0jZGVmaW5lIGh1Z2V0bGJfZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCBlbmQsIGZsb29yLCBjZWlsaW5nKSBcCi0JCQkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGFsbG9jX2h1Z2VfcGFnZSh2bWEsIGFkZHIpCQkoeyBOVUxMOyB9KQotI2RlZmluZSBmcmVlX2h1Z2VfcGFnZShwKQkJCSh7ICh2b2lkKShwKTsgQlVHKCk7IH0pCisjZGVmaW5lIGh1Z2V0bGJfZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCBlbmQsIGZsb29yLCBjZWlsaW5nKSAoe0JVRygpOyAwOyB9KQogI2RlZmluZSBodWdldGxiX2ZhdWx0KG1tLCB2bWEsIGFkZHIsIHdyaXRlKQkoeyBCVUcoKTsgMDsgfSkKIAorI2RlZmluZSBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHZtYSwgYWRkcmVzcywgZW5kLCBuZXdwcm90KQorCiAjaWZuZGVmIEhQQUdFX01BU0sKICNkZWZpbmUgSFBBR0VfTUFTSwlQQUdFX01BU0sJCS8qIEtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5ICovCiAjZGVmaW5lIEhQQUdFX1NJWkUJUEFHRV9TSVpFCkBAIC0xMjgsNiArMTM5LDggQEAKIAogc3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvIHsKIAlzdHJ1Y3Qgc2hhcmVkX3BvbGljeSBwb2xpY3k7CisJLyogUHJvdGVjdGVkIGJ5IHRoZSAoZ2xvYmFsKSBodWdldGxiX2xvY2sgKi8KKwl1bnNpZ25lZCBsb25nIHByZXJlc2VydmVkX2hwYWdlczsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApAQCAtMTQ0LDYgKzE1NywxMCBAQAogZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7CiBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl96ZXJvX3NldHVwKHNpemVfdCk7CitpbnQgaHVnZXRsYl9leHRlbmRfcmVzZXJ2YXRpb24oc3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXRsZWFzdF9ocGFnZXMpOwordm9pZCBodWdldGxiX3RydW5jYXRlX3Jlc2VydmF0aW9uKHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYXRtb3N0X2hwYWdlcyk7CiBpbnQgaHVnZXRsYl9nZXRfcXVvdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogdm9pZCBodWdldGxiX3B1dF9xdW90YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHdtb24tc3lzZnMuaCBiL2luY2x1ZGUvbGludXgvaHdtb24tc3lzZnMuaAppbmRleCA3ZWI0MDA0Li5hOTBjMDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h3bW9uLXN5c2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9od21vbi1zeXNmcy5oCkBAIC0yNywxMSArMjcsMTMgQEAKICNkZWZpbmUgdG9fc2Vuc29yX2Rldl9hdHRyKF9kZXZfYXR0cikgXAogCWNvbnRhaW5lcl9vZihfZGV2X2F0dHIsIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSwgZGV2X2F0dHIpCiAKLSNkZWZpbmUgU0VOU09SX0RFVklDRV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSxfaW5kZXgpCVwKLXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZW5zb3JfZGV2X2F0dHJfIyNfbmFtZSA9IHsJXAotCS5kZXZfYXR0ciA9CV9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpLAlcCi0JLmluZGV4ID0JX2luZGV4LAkJCQkJXAotfQorI2RlZmluZSBTRU5TT1JfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUsIF9pbmRleCkJXAorCXsgLmRldl9hdHRyID0gX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSksCVwKKwkgIC5pbmRleCA9IF9pbmRleCB9CisKKyNkZWZpbmUgU0VOU09SX0RFVklDRV9BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSwgX2luZGV4KQlcCitzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2Vuc29yX2Rldl9hdHRyXyMjX25hbWUJCVwKKwk9IFNFTlNPUl9BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSwgX2luZGV4KQogCiBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiB7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHI7CkBAIC00MSwxMSArNDMsMTMgQEAKICNkZWZpbmUgdG9fc2Vuc29yX2Rldl9hdHRyXzIoX2Rldl9hdHRyKSBcCiAJY29udGFpbmVyX29mKF9kZXZfYXR0ciwgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIsIGRldl9hdHRyKQogCisjZGVmaW5lIFNFTlNPUl9BVFRSXzIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCBfbnIsIF9pbmRleCkJXAorCXsgLmRldl9hdHRyID0gX19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSksCVwKKwkgIC5pbmRleCA9IF9pbmRleCwJCQkJCVwKKwkgIC5uciA9IF9uciB9CisKICNkZWZpbmUgU0VOU09SX0RFVklDRV9BVFRSXzIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlLF9ucixfaW5kZXgpCVwKLXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHNlbnNvcl9kZXZfYXR0cl8jI19uYW1lID0gewlcCi0JLmRldl9hdHRyID0JX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSksCVwKLQkuaW5kZXggPQlfaW5kZXgsCQkJCQlcCi0JLm5yID0JCV9uciwJCQkJCVwKLX0KK3N0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHNlbnNvcl9kZXZfYXR0cl8jI19uYW1lCQlcCisJPSBTRU5TT1JfQVRUUl8yKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSwgX25yLCBfaW5kZXgpCiAKICNlbmRpZiAvKiBfTElOVVhfSFdNT05fU1lTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaCBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKaW5kZXggNDc0YzhmNC4uNjc5YjQ2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC0xNzIsNyArMTcyLDYgQEAKICNkZWZpbmUgSTJDX0hXX0JfUklWQQkJMHgwMTAwMTAgLyogUml2YSBiYXNlZCBncmFwaGljcyBjYXJkcyAqLwogI2RlZmluZSBJMkNfSFdfQl9JT0MJCTB4MDEwMDExIC8qIElPQyBiaXQtd2lnZ2xpbmcgKi8KICNkZWZpbmUgSTJDX0hXX0JfVFNVTkEJCTB4MDEwMDEyIC8qIERFQyBUc3VuYW1pIGNoaXBzZXQgKi8KLSNkZWZpbmUgSTJDX0hXX0JfRlJPRE8JCTB4MDEwMDEzIC8qIDJkM0QgU0EtMTExMCBEZXZlbG9wbWVudCBCb2FyZCAqLwogI2RlZmluZSBJMkNfSFdfQl9PTUFIQQkJMHgwMTAwMTQgLyogT21haGEgSTJDIGludGVyZmFjZSAoQVJNKSAqLwogI2RlZmluZSBJMkNfSFdfQl9HVUlERQkJMHgwMTAwMTUgLyogR3VpZGUgYml0LWJhc2hlciAqLwogI2RlZmluZSBJMkNfSFdfQl9JWFAyMDAwCTB4MDEwMDE2IC8qIEdQSU8gb24gSVhQMjAwMCBzeXN0ZW1zICovCkBAIC0xODUsNiArMTg0LDcgQEAKICNkZWZpbmUgSTJDX0hXX0JfU0FWQUdFCQkweDAxMDAxZCAvKiBzYXZhZ2UgZnJhbWVidWZmZXIgZHJpdmVyICovCiAjZGVmaW5lIEkyQ19IV19CX1JBREVPTgkJMHgwMTAwMWUgLyogcmFkZW9uIGZyYW1lYnVmZmVyIGRyaXZlciAqLwogI2RlZmluZSBJMkNfSFdfQl9FTTI4WFgJCTB4MDEwMDFmIC8qIGVtMjh4eCB2aWRlbyBjYXB0dXJlIGNhcmRzICovCisjZGVmaW5lIEkyQ19IV19CX0NYMjM0MVgJMHgwMTAwMjAgLyogQ29uZXhhbnQgQ1gyMzQxWCBNUEVHIGVuY29kZXIgY2FyZHMgKi8KIAogLyogLS0tIFBDRiA4NTg0IGJhc2VkIGFsZ29yaXRobXMJCQkJCSovCiAjZGVmaW5lIEkyQ19IV19QX0xQCQkweDAyMDAwMCAvKiBQYXJhbGxlbCBwb3J0IGludGVyZmFjZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMuaCBiL2luY2x1ZGUvbGludXgvaTJjLmgKaW5kZXggNjNmMWQ2My4uMTYzNWVlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CS8qIGZvciBzdHJ1Y3QgZGV2aWNlICovCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogZm9yIGNvbXBsZXRpb24gKi8KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyogLS0tIEZvciBpMmMtaXNhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMjI1LDggKzIyNSw4IEBACiAJaW50ICgqY2xpZW50X3VucmVnaXN0ZXIpKHN0cnVjdCBpMmNfY2xpZW50ICopOwogCiAJLyogZGF0YSBmaWVsZHMgdGhhdCBhcmUgdmFsaWQgZm9yIGFsbCBkZXZpY2VzCSovCi0Jc3RydWN0IHNlbWFwaG9yZSBidXNfbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGNsaXN0X2xvY2s7CisJc3RydWN0IG11dGV4IGJ1c19sb2NrOworCXN0cnVjdCBtdXRleCBjbGlzdF9sb2NrOwogCiAJaW50IHRpbWVvdXQ7CiAJaW50IHJldHJpZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaAppbmRleCAwY2Y2YzhiLi5jNzcxYTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTQwLDE0ICs0MCwxNiBAQAogICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wdjZfbmRfcmEgewogCQkJX191OAkJaG9wX2xpbWl0OwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQotCQkJX191OAkJcmVzZXJ2ZWQ6NiwKKwkJCV9fdTgJCXJlc2VydmVkOjQsCisJCQkJCXJvdXRlcl9wcmVmOjIsCiAJCQkJCW90aGVyOjEsCiAJCQkJCW1hbmFnZWQ6MTsKIAogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCiAJCQlfX3U4CQltYW5hZ2VkOjEsCiAJCQkJCW90aGVyOjEsCi0JCQkJCXJlc2VydmVkOjY7CisJCQkJCXJvdXRlcl9wcmVmOjIsCisJCQkJCXJlc2VydmVkOjQ7CiAjZWxzZQogI2Vycm9yCSJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgogI2VuZGlmCkBAIC03MCw4ICs3MiwxMyBAQAogI2RlZmluZSBpY21wNl9hZGRyY29uZl9tYW5hZ2VkCWljbXA2X2RhdGF1bi51X25kX3JhLm1hbmFnZWQKICNkZWZpbmUgaWNtcDZfYWRkcmNvbmZfb3RoZXIJaWNtcDZfZGF0YXVuLnVfbmRfcmEub3RoZXIKICNkZWZpbmUgaWNtcDZfcnRfbGlmZXRpbWUJaWNtcDZfZGF0YXVuLnVfbmRfcmEucnRfbGlmZXRpbWUKKyNkZWZpbmUgaWNtcDZfcm91dGVyX3ByZWYJaWNtcDZfZGF0YXVuLnVfbmRfcmEucm91dGVyX3ByZWYKIH07CiAKKyNkZWZpbmUgSUNNUFY2X1JPVVRFUl9QUkVGX0xPVwkJMHgzCisjZGVmaW5lIElDTVBWNl9ST1VURVJfUFJFRl9NRURJVU0JMHgwCisjZGVmaW5lIElDTVBWNl9ST1VURVJfUFJFRl9ISUdICQkweDEKKyNkZWZpbmUgSUNNUFY2X1JPVVRFUl9QUkVGX0lOVkFMSUQJMHgyCiAKICNkZWZpbmUgSUNNUFY2X0RFU1RfVU5SRUFDSAkJMQogI2RlZmluZSBJQ01QVjZfUEtUX1RPT0JJRwkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggYTdmYzRjYy4uOGQyZGI0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC03OTIsNiArNzkyLDcgQEAKIAl1bnNpZ25lZAlub19kc2MgICAgIDogMTsJLyogMCBkZWZhdWx0LCAxIGRzY19vdmVybGFwIGRpc2FibGVkICovCiAJdW5zaWduZWQJYXV0b19wb2xsICA6IDE7IC8qIHN1cHBvcnRzIG5vcCBhdXRvLXBvbGwgKi8KIAl1bnNpZ25lZAlzZ19tYXBwZWQgIDogMTsJLyogc2dfdGFibGUgYW5kIHNnX25lbnRzIGFyZSByZWFkeSAqLworCXVuc2lnbmVkCW5vX2lvXzMyYml0IDogMTsgLyogMSA9IGNhbiBub3QgZG8gMzItYml0IElPIG9wcyAqLwogCiAJc3RydWN0IGRldmljZQlnZW5kZXY7CiAJc3RydWN0IGNvbXBsZXRpb24gZ2VuZGV2X3JlbF9jb21wOyAvKiBUbyBkZWFsIHdpdGggZGV2aWNlIHJlbGVhc2UoKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZi5oIGIvaW5jbHVkZS9saW51eC9pZi5oCmluZGV4IGNlNjI3ZDkuLjM3NGUyMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmLmgKQEAgLTMzLDcgKzMzLDcgQEAKICNkZWZpbmUJSUZGX0xPT1BCQUNLCTB4OAkJLyogaXMgYSBsb29wYmFjayBuZXQJCSovCiAjZGVmaW5lCUlGRl9QT0lOVE9QT0lOVAkweDEwCQkvKiBpbnRlcmZhY2UgaXMgaGFzIHAtcCBsaW5rCSovCiAjZGVmaW5lCUlGRl9OT1RSQUlMRVJTCTB4MjAJCS8qIGF2b2lkIHVzZSBvZiB0cmFpbGVycwkqLwotI2RlZmluZQlJRkZfUlVOTklORwkweDQwCQkvKiBpbnRlcmZhY2UgcnVubmluZyBhbmQgY2FycmllciBvayAqLworI2RlZmluZQlJRkZfUlVOTklORwkweDQwCQkvKiBpbnRlcmZhY2UgUkZDMjg2MyBPUEVSX1VQCSovCiAjZGVmaW5lCUlGRl9OT0FSUAkweDgwCQkvKiBubyBBUlAgcHJvdG9jb2wJCSovCiAjZGVmaW5lCUlGRl9QUk9NSVNDCTB4MTAwCQkvKiByZWNlaXZlIGFsbCBwYWNrZXRzCQkqLwogI2RlZmluZQlJRkZfQUxMTVVMVEkJMHgyMDAJCS8qIHJlY2VpdmUgYWxsIG11bHRpY2FzdCBwYWNrZXRzKi8KQEAgLTQzLDE1ICs0MywyMiBAQAogCiAjZGVmaW5lIElGRl9NVUxUSUNBU1QJMHgxMDAwCQkvKiBTdXBwb3J0cyBtdWx0aWNhc3QJCSovCiAKLSNkZWZpbmUgSUZGX1ZPTEFUSUxFCShJRkZfTE9PUEJBQ0t8SUZGX1BPSU5UT1BPSU5UfElGRl9CUk9BRENBU1R8SUZGX01BU1RFUnxJRkZfU0xBVkV8SUZGX1JVTk5JTkcpCi0KICNkZWZpbmUgSUZGX1BPUlRTRUwJMHgyMDAwICAgICAgICAgIC8qIGNhbiBzZXQgbWVkaWEgdHlwZQkJKi8KICNkZWZpbmUgSUZGX0FVVE9NRURJQQkweDQwMDAJCS8qIGF1dG8gbWVkaWEgc2VsZWN0IGFjdGl2ZQkqLwogI2RlZmluZSBJRkZfRFlOQU1JQwkweDgwMDAJCS8qIGRpYWx1cCBkZXZpY2Ugd2l0aCBjaGFuZ2luZyBhZGRyZXNzZXMqLwogCisjZGVmaW5lIElGRl9MT1dFUl9VUAkweDEwMDAwCQkvKiBkcml2ZXIgc2lnbmFscyBMMSB1cAkJKi8KKyNkZWZpbmUgSUZGX0RPUk1BTlQJMHgyMDAwMAkJLyogZHJpdmVyIHNpZ25hbHMgZG9ybWFudAkqLworCisjZGVmaW5lIElGRl9WT0xBVElMRQkoSUZGX0xPT1BCQUNLfElGRl9QT0lOVE9QT0lOVHxJRkZfQlJPQURDQVNUfFwKKwkJSUZGX01BU1RFUnxJRkZfU0xBVkV8SUZGX1JVTk5JTkd8SUZGX0xPV0VSX1VQfElGRl9ET1JNQU5UKQorCiAvKiBQcml2YXRlIChmcm9tIHVzZXIpIGludGVyZmFjZSBmbGFncyAobmV0ZGV2aWNlLT5wcml2X2ZsYWdzKS4gKi8KICNkZWZpbmUgSUZGXzgwMl8xUV9WTEFOIDB4MSAgICAgICAgICAgICAvKiA4MDIuMVEgVkxBTiBkZXZpY2UuICAgICAgICAgICovCiAjZGVmaW5lIElGRl9FQlJJREdFCTB4MgkJLyogRXRoZXJuZXQgYnJpZGdpbmcgZGV2aWNlLgkqLworI2RlZmluZSBJRkZfU0xBVkVfSU5BQ1RJVkUJMHg0CS8qIGJvbmRpbmcgc2xhdmUgbm90IHRoZSBjdXJyLiBhY3RpdmUgKi8KKyNkZWZpbmUgSUZGX01BU1RFUl84MDIzQUQJMHg4CS8qIGJvbmRpbmcgbWFzdGVyLCA4MDIuM2FkLiAJKi8KKyNkZWZpbmUgSUZGX01BU1RFUl9BTEIJMHgxMAkJLyogYm9uZGluZyBtYXN0ZXIsIGJhbGFuY2UtYWxiLgkqLwogCiAjZGVmaW5lIElGX0dFVF9JRkFDRQkweDAwMDEJCS8qIGZvciBxdWVyeWluZyBvbmx5ICovCiAjZGVmaW5lIElGX0dFVF9QUk9UTwkweDAwMDIKQEAgLTgwLDYgKzg3LDIyIEBACiAjZGVmaW5lIElGX1BST1RPX0ZSX0VUSF9QVkMgMHgyMDBCCiAjZGVmaW5lIElGX1BST1RPX1JBVyAgICAweDIwMEMgICAgICAgICAgLyogUkFXIFNvY2tldCAgICAgICAgICAgICAgICAgICAqLwogCisvKiBSRkMgMjg2MyBvcGVyYXRpb25hbCBzdGF0dXMgKi8KK2VudW0geworCUlGX09QRVJfVU5LTk9XTiwKKwlJRl9PUEVSX05PVFBSRVNFTlQsCisJSUZfT1BFUl9ET1dOLAorCUlGX09QRVJfTE9XRVJMQVlFUkRPV04sCisJSUZfT1BFUl9URVNUSU5HLAorCUlGX09QRVJfRE9STUFOVCwKKwlJRl9PUEVSX1VQLAorfTsKKworLyogbGluayBtb2RlcyAqLworZW51bSB7CisJSUZfTElOS19NT0RFX0RFRkFVTFQsCisJSUZfTElOS19NT0RFX0RPUk1BTlQsCS8qIGxpbWl0IHVwd2FyZCB0cmFuc2l0aW9uIHRvIGRvcm1hbnQgKi8KK307CiAKIC8qCiAgKglEZXZpY2UgbWFwcGluZyBzdHJ1Y3R1cmUuIEknZCBqdXN0IGdvbmUgb2ZmIGFuZCBkZXNpZ25lZCBhIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IDdhOTJjMWMuLmFiMDhmMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTYxLDYgKzYxLDcgQEAKICNkZWZpbmUgRVRIX1BfODAyMVEJMHg4MTAwICAgICAgICAgIC8qIDgwMi4xUSBWTEFOIEV4dGVuZGVkIEhlYWRlciAgKi8KICNkZWZpbmUgRVRIX1BfSVBYCTB4ODEzNwkJLyogSVBYIG92ZXIgRElYCQkJKi8KICNkZWZpbmUgRVRIX1BfSVBWNgkweDg2REQJCS8qIElQdjYgb3ZlciBibHVlYm9vawkJKi8KKyNkZWZpbmUgRVRIX1BfU0xPVwkweDg4MDkJCS8qIFNsb3cgUHJvdG9jb2wuIFNlZSA4MDIuM2FkIDQzQiAqLwogI2RlZmluZSBFVEhfUF9XQ0NQCTB4ODgzRQkJLyogV2ViLWNhY2hlIGNvb3JkaW5hdGlvbiBwcm90b2NvbAogCQkJCQkgKiBkZWZpbmVkIGluIGRyYWZ0LXdpbHNvbi13cmVjLXdjY3AtdjItMDAudHh0ICovCiAjZGVmaW5lIEVUSF9QX1BQUF9ESVNDCTB4ODg2MwkJLyogUFBQb0UgZGlzY292ZXJ5IG1lc3NhZ2VzICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbi5oIGIvaW5jbHVkZS9saW51eC9pbi5oCmluZGV4IGJhMzU1MzguLjk0ZjU1N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2luLmgKQEAgLTcyLDYgKzcyLDcgQEAKICNkZWZpbmUgSVBfRlJFRUJJTkQJMTUKICNkZWZpbmUgSVBfSVBTRUNfUE9MSUNZCTE2CiAjZGVmaW5lIElQX1hGUk1fUE9MSUNZCTE3CisjZGVmaW5lIElQX1BBU1NTRUMJMTgKIAogLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgSVBfUkVDVlJFVE9QVFMJSVBfUkVUT1BUUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCBmZDdhZjg2Li45MjI5N2ZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtMjUsNiArMjUsNyBAQAogCWludCAgICAgYXJwX2ZpbHRlcjsKIAlpbnQJYXJwX2Fubm91bmNlOwogCWludAlhcnBfaWdub3JlOworCWludAlhcnBfYWNjZXB0OwogCWludAltZWRpdW1faWQ7CiAJaW50CW5vX3hmcm07CiAJaW50CW5vX3BvbGljeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggZmY4ZDhiOC4uZWQwYWM3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTY5LDYgKzY5LDEwIEBACiAKIC8qIERlZmluZWQgaW4gaW5pdC9tYWluLmMgKi8KIGV4dGVybiBjaGFyIHNhdmVkX2NvbW1hbmRfbGluZVtdOworCisvKiB1c2VkIGJ5IGluaXQvbWFpbi5jICovCitleHRlcm4gdm9pZCBzZXR1cF9hcmNoKGNoYXIgKiopOworCiAjZW5kaWYKICAgCiAjaWZuZGVmIE1PRFVMRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggZGNmZDJlYy4uOTIxNDZmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC03LDExICs3LDEwIEBACiAjZGVmaW5lIElOSVRfRkRUQUJMRSBcCiB7CQkJCQkJCVwKIAkubWF4X2Zkcwk9IE5SX09QRU5fREVGQVVMVCwgCQlcCi0JLm1heF9mZHNldAk9IF9fRkRfU0VUU0laRSwgCQlcCi0JLm5leHRfZmQJPSAwLCAJCQkJXAorCS5tYXhfZmRzZXQJPSBFTUJFRERFRF9GRF9TRVRfU0laRSwJCVwKIAkuZmQJCT0gJmluaXRfZmlsZXMuZmRfYXJyYXlbMF0sIAlcCi0JLmNsb3NlX29uX2V4ZWMJPSAmaW5pdF9maWxlcy5jbG9zZV9vbl9leGVjX2luaXQsIFwKLQkub3Blbl9mZHMJPSAmaW5pdF9maWxlcy5vcGVuX2Zkc19pbml0LCAJXAorCS5jbG9zZV9vbl9leGVjCT0gKGZkX3NldCAqKSZpbml0X2ZpbGVzLmNsb3NlX29uX2V4ZWNfaW5pdCwgXAorCS5vcGVuX2Zkcwk9IChmZF9zZXQgKikmaW5pdF9maWxlcy5vcGVuX2Zkc19pbml0LCAJXAogCS5yY3UJCT0gUkNVX0hFQURfSU5JVCwgCQlcCiAJLmZyZWVfZmlsZXMJPSBOVUxMLAkJIAkJXAogCS5uZXh0CQk9IE5VTEwsCQkgCQlcCkBAIC0yMCw5ICsxOSwxMCBAQAogI2RlZmluZSBJTklUX0ZJTEVTIFwKIHsgCQkJCQkJCVwKIAkuY291bnQJCT0gQVRPTUlDX0lOSVQoMSksIAkJXAotCS5maWxlX2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQsIAkJXAogCS5mZHQJCT0gJmluaXRfZmlsZXMuZmR0YWIsIAkJXAogCS5mZHRhYgkJPSBJTklUX0ZEVEFCTEUsCQkJXAorCS5maWxlX2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQsIAkJXAorCS5uZXh0X2ZkCT0gMCwgCQkJCVwKIAkuY2xvc2Vfb25fZXhlY19pbml0ID0geyB7IDAsIH0gfSwgCQlcCiAJLm9wZW5fZmRzX2luaXQJPSB7IHsgMCwgfSB9LCAJCQlcCiAJLmZkX2FycmF5CT0geyBOVUxMLCB9IAkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oIGIvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKaW5kZXggMjY3Yzg4Yi4uMDllMDA0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKQEAgLTcxLDYgKzcxLDggQEAKIAogI2lmZGVmIENPTkZJR19JTk9USUZZCiAKK2V4dGVybiB2b2lkIGlub3RpZnlfZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGlub3RpZnlfZF9tb3ZlKHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHN0cnVjdCBpbm9kZSAqLCBfX3UzMiwgX191MzIsCiAJCQkJICAgICAgY29uc3QgY2hhciAqKTsKIGV4dGVybiB2b2lkIGlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudChzdHJ1Y3QgZGVudHJ5ICosIF9fdTMyLCBfX3UzMiwKQEAgLTgxLDYgKzgzLDE1IEBACiAKICNlbHNlCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbm90aWZ5X2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9kX21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgIF9fdTMyIG1hc2ssIF9fdTMyIGNvb2tpZSwKIAkJCQkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKaW5kZXggOWM4ZjRjOS4uMTI2M2Q4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pcHY2LmgKQEAgLTE0NSw2ICsxNDUsMTUgQEAKIAlfX3MzMgkJbWF4X2Rlc3luY19mYWN0b3I7CiAjZW5kaWYKIAlfX3MzMgkJbWF4X2FkZHJlc3NlczsKKwlfX3MzMgkJYWNjZXB0X3JhX2RlZnJ0cjsKKwlfX3MzMgkJYWNjZXB0X3JhX3BpbmZvOworI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGCisJX19zMzIJCWFjY2VwdF9yYV9ydHJfcHJlZjsKKwlfX3MzMgkJcnRyX3Byb2JlX2ludGVydmFsOworI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk8KKwlfX3MzMgkJYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW47CisjZW5kaWYKKyNlbmRpZgogCXZvaWQJCSpzeXNjdGw7CiB9OwogCkBAIC0xNjcsNiArMTc2LDExIEBACiAJREVWQ09ORl9NQVhfREVTWU5DX0ZBQ1RPUiwKIAlERVZDT05GX01BWF9BRERSRVNTRVMsCiAJREVWQ09ORl9GT1JDRV9NTERfVkVSU0lPTiwKKwlERVZDT05GX0FDQ0VQVF9SQV9ERUZSVFIsCisJREVWQ09ORl9BQ0NFUFRfUkFfUElORk8sCisJREVWQ09ORl9BQ0NFUFRfUkFfUlRSX1BSRUYsCisJREVWQ09ORl9SVFJfUFJPQkVfSU5URVJWQUwsCisJREVWQ09ORl9BQ0NFUFRfUkFfUlRfSU5GT19NQVhfUExFTiwKIAlERVZDT05GX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcHY2X3JvdXRlLmggYi9pbmNsdWRlL2xpbnV4L2lwdjZfcm91dGUuaAppbmRleCBkN2M0MWQxLi5iMzIzZmY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwdjZfcm91dGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwdjZfcm91dGUuaApAQCAtMjMsMTIgKzIzLDIyIEBACiAjZGVmaW5lIFJURl9OT05FWFRIT1AJMHgwMDIwMDAwMAkvKiByb3V0ZSB3aXRoIG5vIG5leHRob3AJKi8KICNkZWZpbmUgUlRGX0VYUElSRVMJMHgwMDQwMDAwMAogCisjZGVmaW5lIFJURl9ST1VURUlORk8JMHgwMDgwMDAwMAkvKiByb3V0ZSBpbmZvcm1hdGlvbiAtIFJBCSovCisKICNkZWZpbmUgUlRGX0NBQ0hFCTB4MDEwMDAwMDAJLyogY2FjaGUgZW50cnkJCQkqLwogI2RlZmluZSBSVEZfRkxPVwkweDAyMDAwMDAwCS8qIGZsb3cgc2lnbmlmaWNhbnQgcm91dGUJKi8KICNkZWZpbmUgUlRGX1BPTElDWQkweDA0MDAwMDAwCS8qIHBvbGljeSByb3V0ZQkJCSovCiAKKyNkZWZpbmUgUlRGX1BSRUYocHJlZikJKChwcmVmKSA8PCAyNykKKyNkZWZpbmUgUlRGX1BSRUZfTUFTSwkweDE4MDAwMDAwCisKICNkZWZpbmUgUlRGX0xPQ0FMCTB4ODAwMDAwMDAKIAorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgSVBWNl9FWFRSQUNUX1BSRUYoZmxhZykJKCgoZmxhZykgJiBSVEZfUFJFRl9NQVNLKSA+PiAyNykKKyNkZWZpbmUgSVBWNl9ERUNPREVfUFJFRihwcmVmKQkoKHByZWYpIF4gMikJLyogMTpsb3csMjptZWQsMzpoaWdoICovCisjZW5kaWYKKwogc3RydWN0IGluNl9ydG1zZyB7CiAJc3RydWN0IGluNl9hZGRyCQlydG1zZ19kc3Q7CiAJc3RydWN0IGluNl9hZGRyCQlydG1zZ19zcmM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lyZGEuaCBiL2luY2x1ZGUvbGludXgvaXJkYS5oCmluZGV4IDk1ZGVlMTcuLjA5ZDhmMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJkYS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJkYS5oCkBAIC03Niw2ICs3Niw3IEBACiAJSVJEQV9NQ1AyMTIwX0RPTkdMRSAgICAgID0gOSwKIAlJUkRBX0FDVDIwMExfRE9OR0xFICAgICAgPSAxMCwKIAlJUkRBX01BNjAwX0RPTkdMRSAgICAgICAgPSAxMSwKKwlJUkRBX1RPSU0zMjMyX0RPTkdMRSAgICAgPSAxMiwKIH0gSVJEQV9ET05HTEU7CiAKIC8qIFByb3RvY29sIHR5cGVzIHRvIGJlIHVzZWQgZm9yIFNPQ0tfREdSQU0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IDZjNWQ0YzguLmVlMmE4MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMTE0LDUzICsxMTQsOCBAQAogI2lmIGRlZmluZWQgKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSB8fCBkZWZpbmVkIChDT05GSUdfSVJRQkFMQU5DRSkKIGV4dGVybiBjcHVtYXNrX3QgcGVuZGluZ19pcnFfY3B1bWFza1tOUl9JUlFTXTsKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wZW5kaW5nX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKLXsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JZGVzYy0+bW92ZV9pcnEgPSAxOwotCXBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSA9IG1hc2s7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1vdmVfbmF0aXZlX2lycShpbnQgaXJxKQotewotCWNwdW1hc2tfdCB0bXA7Ci0JaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV9kZXNjcChpcnEpOwotCi0JaWYgKGxpa2VseSAoIWRlc2MtPm1vdmVfaXJxKSkKLQkJcmV0dXJuOwotCi0JZGVzYy0+bW92ZV9pcnEgPSAwOwotCi0JaWYgKGxpa2VseShjcHVzX2VtcHR5KHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSkpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWRlc2MtPmhhbmRsZXItPnNldF9hZmZpbml0eSkKLQkJcmV0dXJuOwotCi0JLyogbm90ZSAtIHdlIGhvbGQgdGhlIGRlc2MtPmxvY2sgKi8KLQljcHVzX2FuZCh0bXAsIHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSwgY3B1X29ubGluZV9tYXApOwotCi0JLyoKLQkgKiBJZiB0aGVyZSB3YXMgYSB2YWxpZCBtYXNrIHRvIHdvcmsgd2l0aCwgcGxlYXNlCi0JICogZG8gdGhlIGRpc2FibGUsIHJlLXByb2dyYW0sIGVuYWJsZSBzZXF1ZW5jZS4KLQkgKiBUaGlzIGlzICpub3QqIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGxldmVsIHRyaWdnZXJlZAotCSAqIGJ1dCBpbiBhIGVkZ2UgdHJpZ2dlciBjYXNlLCB3ZSBtaWdodCBiZSBzZXR0aW5nIHJ0ZQotCSAqIHdoZW4gYW4gYWN0aXZlIHRyaWdnZXIgaXMgY29tbWluZyBpbi4gVGhpcyBjb3VsZAotCSAqIGNhdXNlIHNvbWUgaW9hcGljcyB0byBtYWwtZnVuY3Rpb24uCi0JICogQmVpbmcgcGFyYW5vaWQgaSBndWVzcyEKLQkgKi8KLQlpZiAodW5saWtlbHkoIWNwdXNfZW1wdHkodG1wKSkpIHsKLQkJZGVzYy0+aGFuZGxlci0+ZGlzYWJsZShpcnEpOwotCQlkZXNjLT5oYW5kbGVyLT5zZXRfYWZmaW5pdHkoaXJxLHRtcCk7Ci0JCWRlc2MtPmhhbmRsZXItPmVuYWJsZShpcnEpOwotCX0KLQljcHVzX2NsZWFyKHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSk7Ci19Cit2b2lkIHNldF9wZW5kaW5nX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzayk7Cit2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKTsKIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQuaCBiL2luY2x1ZGUvbGludXgvamJkLmgKaW5kZXggNDFlZTc5OS4uNGZjN2RmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZC5oCkBAIC0yOCw2ICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvam91cm5hbC1oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvYml0X3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorCiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2VuZGlmCiAKQEAgLTU3NSw3ICs1NzgsNyBAQAogICogQGpfd2FpdF9jaGVja3BvaW50OiAgV2FpdCBxdWV1ZSB0byB0cmlnZ2VyIGNoZWNrcG9pbnRpbmcKICAqIEBqX3dhaXRfY29tbWl0OiBXYWl0IHF1ZXVlIHRvIHRyaWdnZXIgY29tbWl0CiAgKiBAal93YWl0X3VwZGF0ZXM6IFdhaXQgcXVldWUgdG8gd2FpdCBmb3IgdXBkYXRlcyB0byBjb21wbGV0ZQotICogQGpfY2hlY2twb2ludF9zZW06IFNlbWFwaG9yZSBmb3IgbG9ja2luZyBhZ2FpbnN0IGNvbmN1cnJlbnQgY2hlY2twb2ludHMKKyAqIEBqX2NoZWNrcG9pbnRfbXV0ZXg6IE11dGV4IGZvciBsb2NraW5nIGFnYWluc3QgY29uY3VycmVudCBjaGVja3BvaW50cwogICogQGpfaGVhZDogSm91cm5hbCBoZWFkIC0gaWRlbnRpZmllcyB0aGUgZmlyc3QgdW51c2VkIGJsb2NrIGluIHRoZSBqb3VybmFsCiAgKiBAal90YWlsOiBKb3VybmFsIHRhaWwgLSBpZGVudGlmaWVzIHRoZSBvbGRlc3Qgc3RpbGwtdXNlZCBibG9jayBpbiB0aGUKICAqICBqb3VybmFsLgpAQCAtNjQ1LDcgKzY0OCw3IEBACiAJaW50CQkJal9iYXJyaWVyX2NvdW50OwogCiAJLyogVGhlIGJhcnJpZXIgbG9jayBpdHNlbGYgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlCWpfYmFycmllcjsKKwlzdHJ1Y3QgbXV0ZXgJCWpfYmFycmllcjsKIAogCS8qCiAJICogVHJhbnNhY3Rpb25zOiBUaGUgY3VycmVudCBydW5uaW5nIHRyYW5zYWN0aW9uLi4uCkBAIC02ODcsNyArNjkwLDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdAlqX3dhaXRfdXBkYXRlczsKIAogCS8qIFNlbWFwaG9yZSBmb3IgbG9ja2luZyBhZ2FpbnN0IGNvbmN1cnJlbnQgY2hlY2twb2ludHMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIAlqX2NoZWNrcG9pbnRfc2VtOworCXN0cnVjdCBtdXRleAkgCWpfY2hlY2twb2ludF9tdXRleDsKIAogCS8qCiAJICogSm91cm5hbCBoZWFkOiBpZGVudGlmaWVzIHRoZSBmaXJzdCB1bnVzZWQgYmxvY2sgaW4gdGhlIGpvdXJuYWwuCkBAIC03ODYsNyArNzg5LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlqX2NvbW1pdF9pbnRlcnZhbDsKIAogCS8qIFRoZSB0aW1lciB1c2VkIHRvIHdha2V1cCB0aGUgY29tbWl0IHRocmVhZDogKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdAkqal9jb21taXRfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJal9jb21taXRfdGltZXI7CiAKIAkvKgogCSAqIFRoZSByZXZva2UgdGFibGU6IG1haW50YWlucyB0aGUgbGlzdCBvZiByZXZva2VkIGJsb2NrcyBpbiB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDNiNTA3YmYuLjAzZDZjZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtOTEsNiArOTEsOSBAQAogZXh0ZXJuIGxvbmcgKCpwYW5pY19ibGluaykobG9uZyB0aW1lKTsKIE5PUkVUX1RZUEUgdm9pZCBwYW5pYyhjb25zdCBjaGFyICogZm10LCAuLi4pCiAJX19hdHRyaWJ1dGVfXyAoKE5PUkVUX0FORCBmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2V4dGVybiB2b2lkIG9vcHNfZW50ZXIodm9pZCk7CitleHRlcm4gdm9pZCBvb3BzX2V4aXQodm9pZCk7CitleHRlcm4gaW50IG9vcHNfbWF5X3ByaW50KHZvaWQpOwogZmFzdGNhbGwgTk9SRVRfVFlQRSB2b2lkIGRvX2V4aXQobG9uZyBlcnJvcl9jb2RlKQogCUFUVFJJQl9OT1JFVDsKIE5PUkVUX1RZUEUgdm9pZCBjb21wbGV0ZV9hbmRfZXhpdChzdHJ1Y3QgY29tcGxldGlvbiAqLCBsb25nKQpAQCAtMTUxLDkgKzE1NCwxMCBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfY29uc3RfXyByb3VuZHVwX3Bvd19vZl90d28odW5zaWduZWQgbG9uZyB4KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX2F0dHJpYnV0ZV9jb25zdF9fIHJvdW5kdXBfcG93X29mX3R3byh1bnNpZ25lZCBsb25nIHgpCiB7Ci0JcmV0dXJuICgxVUwgPDwgZmxzKHggLSAxKSk7CisJcmV0dXJuIDFVTCA8PCBmbHNfbG9uZyh4IC0gMSk7CiB9CiAKIGV4dGVybiBpbnQgcHJpbnRrX3JhdGVsaW1pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21hbGxvY19zaXplcy5oIGIvaW5jbHVkZS9saW51eC9rbWFsbG9jX3NpemVzLmgKaW5kZXggZDgyZDRjMC4uYmRhMjNlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbWFsbG9jX3NpemVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbWFsbG9jX3NpemVzLmgKQEAgLTE5LDggKzE5LDEwIEBACiAJQ0FDSEUoMzI3NjgpCiAJQ0FDSEUoNjU1MzYpCiAJQ0FDSEUoMTMxMDcyKQotI2lmbmRlZiBDT05GSUdfTU1VCisjaWYgKE5SX0NQVVMgPiA1MTIpIHx8IChNQVhfTlVNTk9ERVMgPiAyNTYpIHx8ICFkZWZpbmVkKENPTkZJR19NTVUpCiAJQ0FDSEUoMjYyMTQ0KQorI2VuZGlmCisjaWZuZGVmIENPTkZJR19NTVUKIAlDQUNIRSg1MjQyODgpCiAJQ0FDSEUoMTA0ODU3NikKICNpZmRlZiBDT05GSUdfTEFSR0VfQUxMT0NTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tvYmpfbWFwLmggYi9pbmNsdWRlL2xpbnV4L2tvYmpfbWFwLmgKaW5kZXggY2JlN2Q4MC4uYmFmZTE3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rb2JqX21hcC5oCisrKyBiL2luY2x1ZGUvbGludXgva29ial9tYXAuaApAQCAtMSw2ICsxLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogdHlwZWRlZiBzdHJ1Y3Qga29iamVjdCAqa29ial9wcm9iZV90KGRldl90LCBpbnQgKiwgdm9pZCAqKTsKIHN0cnVjdCBrb2JqX21hcDsKQEAgLTksNiArOSw2IEBACiAJICAgICBrb2JqX3Byb2JlX3QgKiwgaW50ICgqKShkZXZfdCwgdm9pZCAqKSwgdm9pZCAqKTsKIHZvaWQga29ial91bm1hcChzdHJ1Y3Qga29ial9tYXAgKiwgZGV2X3QsIHVuc2lnbmVkIGxvbmcpOwogc3RydWN0IGtvYmplY3QgKmtvYmpfbG9va3VwKHN0cnVjdCBrb2JqX21hcCAqLCBkZXZfdCwgaW50ICopOwotc3RydWN0IGtvYmpfbWFwICprb2JqX21hcF9pbml0KGtvYmpfcHJvYmVfdCAqLCBzdHJ1Y3Qgc2VtYXBob3JlICopOworc3RydWN0IGtvYmpfbWFwICprb2JqX21hcF9pbml0KGtvYmpfcHJvYmVfdCAqLCBzdHJ1Y3QgbXV0ZXggKik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmggYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAppbmRleCAyYThkOGRhLi40Y2IxMjE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaApAQCAtNDEsOCArNDEsMTAgQEAKIAlLT0JKX0FERAk9IChfX2ZvcmNlIGtvYmplY3RfYWN0aW9uX3QpIDB4MDEsCS8qIGV4Y2x1c2l2ZSB0byBjb3JlICovCiAJS09CSl9SRU1PVkUJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDAyLAkvKiBleGNsdXNpdmUgdG8gY29yZSAqLwogCUtPQkpfQ0hBTkdFCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwMywJLyogZGV2aWNlIHN0YXRlIGNoYW5nZSAqLwotCUtPQkpfT0ZGTElORQk9IChfX2ZvcmNlIGtvYmplY3RfYWN0aW9uX3QpIDB4MDQsCS8qIGRldmljZSBvZmZsaW5lICovCi0JS09CSl9PTkxJTkUJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDA1LAkvKiBkZXZpY2Ugb25saW5lICovCisJS09CSl9NT1VOVAk9IChfX2ZvcmNlIGtvYmplY3RfYWN0aW9uX3QpIDB4MDQsCS8qIG1vdW50IGV2ZW50IGZvciBibG9jayBkZXZpY2VzIChicm9rZW4pICovCisJS09CSl9VTU9VTlQJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDA1LAkvKiB1bW91bnQgZXZlbnQgZm9yIGJsb2NrIGRldmljZXMgKGJyb2tlbikgKi8KKwlLT0JKX09GRkxJTkUJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDA2LAkvKiBkZXZpY2Ugb2ZmbGluZSAqLworCUtPQkpfT05MSU5FCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwNywJLyogZGV2aWNlIG9ubGluZSAqLwogfTsKIAogc3RydWN0IGtvYmplY3QgewpAQCAtNzgsNiArODAsOCBAQAogZXh0ZXJuIHN0cnVjdCBrb2JqZWN0ICoga29iamVjdF9nZXQoc3RydWN0IGtvYmplY3QgKik7CiBleHRlcm4gdm9pZCBrb2JqZWN0X3B1dChzdHJ1Y3Qga29iamVjdCAqKTsKIAorZXh0ZXJuIHN0cnVjdCBrb2JqZWN0ICprb2JqZWN0X2FkZF9kaXIoc3RydWN0IGtvYmplY3QgKiwgY29uc3QgY2hhciAqKTsKKwogZXh0ZXJuIGNoYXIgKiBrb2JqZWN0X2dldF9wYXRoKHN0cnVjdCBrb2JqZWN0ICosIGdmcF90KTsKIAogc3RydWN0IGtvYmpfdHlwZSB7CkBAIC0yNTMsNyArMjU3LDcgQEAKIGV4dGVybiBpbnQgc3Vic3lzX2NyZWF0ZV9maWxlKHN0cnVjdCBzdWJzeXN0ZW0gKiAsIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlICopOwogZXh0ZXJuIHZvaWQgc3Vic3lzX3JlbW92ZV9maWxlKHN0cnVjdCBzdWJzeXN0ZW0gKiAsIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlICopOwogCi0jaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykgJiBkZWZpbmVkKENPTkZJR19ORVQpCisjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykgJiYgZGVmaW5lZChDT05GSUdfTkVUKQogdm9pZCBrb2JqZWN0X3VldmVudChzdHJ1Y3Qga29iamVjdCAqa29iaiwgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24pOwogCiBpbnQgYWRkX3VldmVudF92YXIoY2hhciAqKmVudnAsIGludCBudW1fZW52cCwgaW50ICpjdXJfaW5kZXgsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaCBiL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCmluZGV4IDY2OTc1NmIuLjc3OGFkYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCisrKyBiL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpZmRlZiBDT05GSUdfS1BST0JFUwogI2luY2x1ZGUgPGFzbS9rcHJvYmVzLmg+CkBAIC0xNTIsNyArMTUzLDcgQEAKIH07CiAKIGV4dGVybiBzcGlubG9ja190IGtyZXRwcm9iZV9sb2NrOwotZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUga3Byb2JlX211dGV4OworZXh0ZXJuIHN0cnVjdCBtdXRleCBrcHJvYmVfbXV0ZXg7CiBleHRlcm4gaW50IGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7CiBleHRlcm4gdm9pZCBhcmNoX2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7CiBleHRlcm4gdm9pZCBhcmNoX2Rpc2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCA5ZTVkYjI5Li4wNDcxOTIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTM1LDcgKzM1LDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogLyoKLSAqIGNvbXBpbGUtdGltZSBvcHRpb25zCisgKiBjb21waWxlLXRpbWUgb3B0aW9uczogdG8gYmUgcmVtb3ZlZCBhcyBzb29uIGFzIGFsbCB0aGUgZHJpdmVycyBhcmUKKyAqIGNvbnZlcnRlZCB0byB0aGUgbmV3IGRlYnVnZ2luZyBtZWNoYW5pc20KICAqLwogI3VuZGVmIEFUQV9ERUJVRwkJLyogZGVidWdnaW5nIG91dHB1dCAqLwogI3VuZGVmIEFUQV9WRVJCT1NFX0RFQlVHCS8qIHlldCBtb3JlIGRlYnVnZ2luZyBvdXRwdXQgKi8KQEAgLTYxLDE1ICs2MiwzNyBAQAogCiAjZGVmaW5lIEJQUklOVEsoZm10LCBhcmdzLi4uKSBpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfREVCVUdNU0cpIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10LCBfX0ZVTkNUSU9OX18sICMjIGFyZ3MpCiAKLSNpZmRlZiBBVEFfTkRFQlVHCi0jZGVmaW5lIGFzc2VydChleHByKQotI2Vsc2UKLSNkZWZpbmUgYXNzZXJ0KGV4cHIpIFwKLSAgICAgICAgaWYodW5saWtlbHkoIShleHByKSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCBcCi0gICAgICAgICNleHByLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7ICAgICAgICAgIFwKLSAgICAgICAgfQotI2VuZGlmCisvKiBORVc6IGRlYnVnIGxldmVscyAqLworI2RlZmluZSBIQVZFX0xJQkFUQV9NU0cgMQorCitlbnVtIHsKKwlBVEFfTVNHX0RSVgk9IDB4MDAwMSwKKwlBVEFfTVNHX0lORk8JPSAweDAwMDIsCisJQVRBX01TR19QUk9CRQk9IDB4MDAwNCwKKwlBVEFfTVNHX1dBUk4JPSAweDAwMDgsCisJQVRBX01TR19NQUxMT0MJPSAweDAwMTAsCisJQVRBX01TR19DVEwJPSAweDAwMjAsCisJQVRBX01TR19JTlRSCT0gMHgwMDQwLAorCUFUQV9NU0dfRVJSCT0gMHgwMDgwLAorfTsKKworI2RlZmluZSBhdGFfbXNnX2RydihwKSAgICAoKHApLT5tc2dfZW5hYmxlICYgQVRBX01TR19EUlYpCisjZGVmaW5lIGF0YV9tc2dfaW5mbyhwKSAgICgocCktPm1zZ19lbmFibGUgJiBBVEFfTVNHX0lORk8pCisjZGVmaW5lIGF0YV9tc2dfcHJvYmUocCkgICgocCktPm1zZ19lbmFibGUgJiBBVEFfTVNHX1BST0JFKQorI2RlZmluZSBhdGFfbXNnX3dhcm4ocCkgICAoKHApLT5tc2dfZW5hYmxlICYgQVRBX01TR19XQVJOKQorI2RlZmluZSBhdGFfbXNnX21hbGxvYyhwKSAoKHApLT5tc2dfZW5hYmxlICYgQVRBX01TR19NQUxMT0MpCisjZGVmaW5lIGF0YV9tc2dfY3RsKHApICAgICgocCktPm1zZ19lbmFibGUgJiBBVEFfTVNHX0NUTCkKKyNkZWZpbmUgYXRhX21zZ19pbnRyKHApICAgKChwKS0+bXNnX2VuYWJsZSAmIEFUQV9NU0dfSU5UUikKKyNkZWZpbmUgYXRhX21zZ19lcnIocCkgICAgKChwKS0+bXNnX2VuYWJsZSAmIEFUQV9NU0dfRVJSKQorCitzdGF0aWMgaW5saW5lIHUzMiBhdGFfbXNnX2luaXQoaW50IGR2YWwsIGludCBkZWZhdWx0X21zZ19lbmFibGVfYml0cykKK3sKKwlpZiAoZHZhbCA8IDAgfHwgZHZhbCA+PSAoc2l6ZW9mKHUzMikgKiA4KSkKKwkJcmV0dXJuIGRlZmF1bHRfbXNnX2VuYWJsZV9iaXRzOyAvKiBzaG91bGQgYmUgMHgxIC0gb25seSBkcml2ZXIgaW5mbyBtc2dzICovCisJaWYgKCFkdmFsKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKDEgPDwgZHZhbCkgLSAxOworfQogCiAvKiBkZWZpbmVzIG9ubHkgZm9yIHRoZSBjb25zdGFudHMgd2hpY2ggZG9uJ3Qgd29yayB3ZWxsIGFzIGVudW1zICovCiAjZGVmaW5lIEFUQV9UQUdfUE9JU09OCQkweGZhZmJmY2ZkVQpAQCAtOTksOCArMTIyLDcgQEAKIAkvKiBzdHJ1Y3QgYXRhX2RldmljZSBzdHVmZiAqLwogCUFUQV9ERkxBR19MQkE0OAkJPSAoMSA8PCAwKSwgLyogZGV2aWNlIHN1cHBvcnRzIExCQTQ4ICovCiAJQVRBX0RGTEFHX1BJTwkJPSAoMSA8PCAxKSwgLyogZGV2aWNlIGN1cnJlbnRseSBpbiBQSU8gbW9kZSAqLwotCUFUQV9ERkxBR19MT0NLX1NFQ1RPUlMJPSAoMSA8PCAyKSwgLyogZG9uJ3QgYWRqdXN0IG1heF9zZWN0b3JzICovCi0JQVRBX0RGTEFHX0xCQQkJPSAoMSA8PCAzKSwgLyogZGV2aWNlIHN1cHBvcnRzIExCQSAqLworCUFUQV9ERkxBR19MQkEJCT0gKDEgPDwgMiksIC8qIGRldmljZSBzdXBwb3J0cyBMQkEgKi8KIAogCUFUQV9ERVZfVU5LTk9XTgkJPSAwLAkvKiB1bmtub3duIGRldmljZSAqLwogCUFUQV9ERVZfQVRBCQk9IDEsCS8qIEFUQSBkZXZpY2UgKi8KQEAgLTExNSw5ICsxMzcsOSBAQAogCUFUQV9GTEFHX1BPUlRfRElTQUJMRUQJPSAoMSA8PCAyKSwgLyogcG9ydCBpcyBkaXNhYmxlZCwgaWdub3JlIGl0ICovCiAJQVRBX0ZMQUdfU0FUQQkJPSAoMSA8PCAzKSwKIAlBVEFfRkxBR19OT19MRUdBQ1kJPSAoMSA8PCA0KSwgLyogbm8gbGVnYWN5IG1vZGUgY2hlY2sgKi8KLQlBVEFfRkxBR19TUlNUCQk9ICgxIDw8IDUpLCAvKiB1c2UgQVRBIFNSU1QsIG5vdCBFLkQuRC4gKi8KKwlBVEFfRkxBR19TUlNUCQk9ICgxIDw8IDUpLCAvKiAob2Jzb2xldGUpIHVzZSBBVEEgU1JTVCwgbm90IEUuRC5ELiAqLwogCUFUQV9GTEFHX01NSU8JCT0gKDEgPDwgNiksIC8qIHVzZSBNTUlPLCBub3QgUElPICovCi0JQVRBX0ZMQUdfU0FUQV9SRVNFVAk9ICgxIDw8IDcpLCAvKiB1c2UgQ09NUkVTRVQgKi8KKwlBVEFfRkxBR19TQVRBX1JFU0VUCT0gKDEgPDwgNyksIC8qIChvYnNvbGV0ZSkgdXNlIENPTVJFU0VUICovCiAJQVRBX0ZMQUdfUElPX0RNQQk9ICgxIDw8IDgpLCAvKiBQSU8gY21kcyB2aWEgRE1BICovCiAJQVRBX0ZMQUdfTk9JTlRSCQk9ICgxIDw8IDkpLCAvKiBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZQogCQkJCQkgICAgICogcHJvcGVyIEhTTSBpcyBpbiBwbGFjZS4gKi8KQEAgLTEyOSwxMCArMTUxLDE0IEBACiAJQVRBX0ZMQUdfUElPX0xCQTQ4CT0gKDEgPDwgMTMpLCAvKiBIb3N0IERNQSBlbmdpbmUgaXMgTEJBMjggb25seSAqLwogCUFUQV9GTEFHX0lSUV9NQVNLCT0gKDEgPDwgMTQpLCAvKiBNYXNrIElSUSBpbiBQSU8geGZlcnMgKi8KIAorCUFUQV9GTEFHX0ZMVVNIX1BPUlRfVEFTSyA9ICgxIDw8IDE1KSwgLyogRmx1c2ggcG9ydCB0YXNrICovCisJQVRBX0ZMQUdfSU5fRUgJCT0gKDEgPDwgMTYpLCAvKiBFSCBpbiBwcm9ncmVzcyAqLworCiAJQVRBX1FDRkxBR19BQ1RJVkUJPSAoMSA8PCAxKSwgLyogY21kIG5vdCB5ZXQgYWNrJ2QgdG8gc2NzaSBseWVyICovCiAJQVRBX1FDRkxBR19TRwkJPSAoMSA8PCAzKSwgLyogaGF2ZSBzL2cgdGFibGU/ICovCiAJQVRBX1FDRkxBR19TSU5HTEUJPSAoMSA8PCA0KSwgLyogbm8gcy9nLCBqdXN0IGEgc2luZ2xlIGJ1ZmZlciAqLwogCUFUQV9RQ0ZMQUdfRE1BTUFQCT0gQVRBX1FDRkxBR19TRyB8IEFUQV9RQ0ZMQUdfU0lOR0xFLAorCUFUQV9RQ0ZMQUdfRUhfU0NIRURVTEVEID0gKDEgPDwgNSksIC8qIEVIIHNjaGVkdWxlZCAqLwogCiAJLyogdmFyaW91cyBsZW5ndGhzIG9mIHRpbWUgKi8KIAlBVEFfVE1PVVRfRURECQk9IDUgKiBIWiwJLyogaGV1cmlzdGljICovCkBAIC0xNjIsMTEgKzE4OCwxOSBAQAogCVBPUlRfRElTQUJMRUQJCT0gMiwKIAogCS8qIGVuY29kaW5nIHZhcmlvdXMgc21hbGxlciBiaXRtYXBzIGludG8gYSBzaW5nbGUKLQkgKiB1bnNpZ25lZCBsb25nIGJpdG1hcAorCSAqIHVuc2lnbmVkIGludCBiaXRtYXAKIAkgKi8KLQlBVEFfU0hJRlRfVURNQQkJPSAwLAotCUFUQV9TSElGVF9NV0RNQQkJPSA4LAotCUFUQV9TSElGVF9QSU8JCT0gMTEsCisJQVRBX0JJVFNfUElPCQk9IDUsCisJQVRBX0JJVFNfTVdETUEJCT0gMywKKwlBVEFfQklUU19VRE1BCQk9IDgsCisKKwlBVEFfU0hJRlRfUElPCQk9IDAsCisJQVRBX1NISUZUX01XRE1BCQk9IEFUQV9TSElGVF9QSU8gKyBBVEFfQklUU19QSU8sCisJQVRBX1NISUZUX1VETUEJCT0gQVRBX1NISUZUX01XRE1BICsgQVRBX0JJVFNfTVdETUEsCisKKwlBVEFfTUFTS19QSU8JCT0gKCgxIDw8IEFUQV9CSVRTX1BJTykgLSAxKSA8PCBBVEFfU0hJRlRfUElPLAorCUFUQV9NQVNLX01XRE1BCQk9ICgoMSA8PCBBVEFfQklUU19NV0RNQSkgLSAxKSA8PCBBVEFfU0hJRlRfTVdETUEsCisJQVRBX01BU0tfVURNQQkJPSAoKDEgPDwgQVRBX0JJVFNfVURNQSkgLSAxKSA8PCBBVEFfU0hJRlRfVURNQSwKIAogCS8qIHNpemUgb2YgYnVmZmVyIHRvIHBhZCB4ZmVycyBlbmRpbmcgb24gdW5hbGlnbmVkIGJvdW5kYXJpZXMgKi8KIAlBVEFfRE1BX1BBRF9TWgkJPSA0LApAQCAtMTg5LDEwICsyMjMsMTUgQEAKIH07CiAKIGVudW0gYXRhX2NvbXBsZXRpb25fZXJyb3JzIHsKLQlBQ19FUlJfT1RIRVIJCT0gKDEgPDwgMCksCi0JQUNfRVJSX0RFVgkJPSAoMSA8PCAxKSwKLQlBQ19FUlJfQVRBX0JVUwkJPSAoMSA8PCAyKSwKLQlBQ19FUlJfSE9TVF9CVVMJCT0gKDEgPDwgMyksCisJQUNfRVJSX0RFVgkJPSAoMSA8PCAwKSwgLyogZGV2aWNlIHJlcG9ydGVkIGVycm9yICovCisJQUNfRVJSX0hTTQkJPSAoMSA8PCAxKSwgLyogaG9zdCBzdGF0ZSBtYWNoaW5lIHZpb2xhdGlvbiAqLworCUFDX0VSUl9USU1FT1VUCQk9ICgxIDw8IDIpLCAvKiB0aW1lb3V0ICovCisJQUNfRVJSX01FRElBCQk9ICgxIDw8IDMpLCAvKiBtZWRpYSBlcnJvciAqLworCUFDX0VSUl9BVEFfQlVTCQk9ICgxIDw8IDQpLCAvKiBBVEEgYnVzIGVycm9yICovCisJQUNfRVJSX0hPU1RfQlVTCQk9ICgxIDw8IDUpLCAvKiBob3N0IGJ1cyBlcnJvciAqLworCUFDX0VSUl9TWVNURU0JCT0gKDEgPDwgNiksIC8qIHN5c3RlbSBlcnJvciAqLworCUFDX0VSUl9JTlZBTElECQk9ICgxIDw8IDcpLCAvKiBpbnZhbGlkIGFyZ3VtZW50ICovCisJQUNfRVJSX09USEVSCQk9ICgxIDw8IDgpLCAvKiB1bmtub3duICovCiB9OwogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwpAQCAtMjAyLDcgKzI0MSwxMCBAQAogc3RydWN0IGF0YV9xdWV1ZWRfY21kOwogCiAvKiB0eXBlZGVmcyAqLwotdHlwZWRlZiBpbnQgKCphdGFfcWNfY2JfdCkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwordHlwZWRlZiB2b2lkICgqYXRhX3FjX2NiX3QpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK3R5cGVkZWYgdm9pZCAoKmF0YV9wcm9iZWluaXRfZm5fdCkoc3RydWN0IGF0YV9wb3J0ICopOwordHlwZWRlZiBpbnQgKCphdGFfcmVzZXRfZm5fdCkoc3RydWN0IGF0YV9wb3J0ICosIGludCwgdW5zaWduZWQgaW50ICopOwordHlwZWRlZiB2b2lkICgqYXRhX3Bvc3RyZXNldF9mbl90KShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKik7CiAKIHN0cnVjdCBhdGFfaW9wb3J0cyB7CiAJdW5zaWduZWQgbG9uZwkJY21kX2FkZHI7CkBAIC0zMDUsNyArMzQ3LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIEFUQV9ERkxBR194eHggKi8KIAl1bnNpZ25lZCBpbnQJCWNsYXNzOwkJLyogQVRBX0RFVl94eHggKi8KIAl1bnNpZ25lZCBpbnQJCWRldm5vOwkJLyogMCBvciAxICovCi0JdTE2CQkJaWRbQVRBX0lEX1dPUkRTXTsgLyogSURFTlRJRlkgeHh4IERFVklDRSBkYXRhICovCisJdTE2CQkJKmlkOwkJLyogSURFTlRJRlkgeHh4IERFVklDRSBkYXRhICovCiAJdTgJCQlwaW9fbW9kZTsKIAl1OAkJCWRtYV9tb2RlOwogCXU4CQkJeGZlcl9tb2RlOwpAQCAtMzEzLDYgKzM1NSwxMyBAQAogCiAJdW5zaWduZWQgaW50CQltdWx0aV9jb3VudDsJLyogc2VjdG9ycyBjb3VudCBmb3IKIAkJCQkJCSAgIFJFQUQvV1JJVEUgTVVMVElQTEUgKi8KKwl1bnNpZ25lZCBpbnQJCW1heF9zZWN0b3JzOwkvKiBwZXItZGV2aWNlIG1heCBzZWN0b3JzICovCisJdW5zaWduZWQgaW50CQljZGJfbGVuOworCisJLyogcGVyLWRldiB4ZmVyIG1hc2sgKi8KKwl1bnNpZ25lZCBpbnQJCXBpb19tYXNrOworCXVuc2lnbmVkIGludAkJbXdkbWFfbWFzazsKKwl1bnNpZ25lZCBpbnQJCXVkbWFfbWFzazsKIAogCS8qIGZvciBDSFMgYWRkcmVzc2luZyAqLwogCXUxNgkJCWN5bGluZGVyczsJLyogTnVtYmVyIG9mIGN5bGluZGVycyAqLwpAQCAtMzQyLDcgKzM5MSw2IEBACiAJdW5zaWduZWQgaW50CQltd2RtYV9tYXNrOwogCXVuc2lnbmVkIGludAkJdWRtYV9tYXNrOwogCXVuc2lnbmVkIGludAkJY2JsOwkvKiBjYWJsZSB0eXBlOyBBVEFfQ0JMX3h4eCAqLwotCXVuc2lnbmVkIGludAkJY2RiX2xlbjsKIAogCXN0cnVjdCBhdGFfZGV2aWNlCWRldmljZVtBVEFfTUFYX0RFVklDRVNdOwogCkBAIC0zNTIsMTMgKzQwMCwxNiBAQAogCiAJc3RydWN0IGF0YV9ob3N0X3N0YXRzCXN0YXRzOwogCXN0cnVjdCBhdGFfaG9zdF9zZXQJKmhvc3Rfc2V0OworCXN0cnVjdCBkZXZpY2UgCQkqZGV2OwogCi0Jc3RydWN0IHdvcmtfc3RydWN0CXBhY2tldF90YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdAlwb3J0X3Rhc2s7CiAKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcGlvX3Rhc2s7CiAJdW5zaWduZWQgaW50CQloc21fdGFza19zdGF0ZTsKIAl1bnNpZ25lZCBsb25nCQlwaW9fdGFza190aW1lb3V0OwogCisJdTMyCQkJbXNnX2VuYWJsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWVoX2RvbmVfcTsKKwogCXZvaWQJCQkqcHJpdmF0ZV9kYXRhOwogfTsKIApAQCAtMzc4LDcgKzQyOSw5IEBACiAJdTggICAoKmNoZWNrX2FsdHN0YXR1cykoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAJdm9pZCAoKmRldl9zZWxlY3QpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpOwogCi0Jdm9pZCAoKnBoeV9yZXNldCkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXZvaWQgKCpwaHlfcmVzZXQpIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsgLyogb2Jzb2xldGUgKi8KKwlpbnQgKCpwcm9iZV9yZXNldCkgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3Nlcyk7CisKIAl2b2lkICgqcG9zdF9zZXRfbW9kZSkgKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogCiAJaW50ICgqY2hlY2tfYXRhcGlfZG1hKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CkBAIC0zODcsNyArNDQwLDcgQEAKIAl2b2lkICgqYm1kbWFfc3RhcnQpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCXZvaWQgKCpxY19wcmVwKSAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7Ci0JaW50ICgqcWNfaXNzdWUpIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKKwl1bnNpZ25lZCBpbnQgKCpxY19pc3N1ZSkgKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogCiAJdm9pZCAoKmVuZ190aW1lb3V0KSAoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKQEAgLTQzNSw2ICs0ODgsMTggQEAKIGV4dGVybiB2b2lkIF9fc2F0YV9waHlfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBzYXRhX3BoeV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9idXNfcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CitleHRlcm4gaW50IGF0YV9kcml2ZV9wcm9iZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJYXRhX3Byb2JlaW5pdF9mbl90IHByb2JlaW5pdCwKKwkJCWF0YV9yZXNldF9mbl90IHNvZnRyZXNldCwgYXRhX3Jlc2V0X2ZuX3QgaGFyZHJlc2V0LAorCQkJYXRhX3Bvc3RyZXNldF9mbl90IHBvc3RyZXNldCwgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKK2V4dGVybiB2b2lkIGF0YV9zdGRfcHJvYmVpbml0KHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIGludCBhdGFfc3RkX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBpbnQgdmVyYm9zZSwKKwkJCSAgICAgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKK2V4dGVybiBpbnQgc2F0YV9zdGRfaGFyZHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIGludCB2ZXJib3NlLAorCQkJICAgICAgdW5zaWduZWQgaW50ICpjbGFzcyk7CitleHRlcm4gdm9pZCBhdGFfc3RkX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOworZXh0ZXJuIGludCBhdGFfZGV2X3JldmFsaWRhdGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIGludCBwb3N0X3Jlc2V0KTsKIGV4dGVybiB2b2lkIGF0YV9wb3J0X2Rpc2FibGUoc3RydWN0IGF0YV9wb3J0ICopOwogZXh0ZXJuIHZvaWQgYXRhX3N0ZF9wb3J0cyhzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkcik7CiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtNDQzLDYgKzUwOCw3IEBACiBleHRlcm4gdm9pZCBhdGFfcGNpX3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIGV4dGVybiBpbnQgYXRhX3BjaV9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgYXRhX3BjaV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2V4dGVybiBpbnQgYXRhX3BjaV9jbGVhcl9zaW1wbGV4KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiBleHRlcm4gaW50IGF0YV9kZXZpY2VfYWRkKGNvbnN0IHN0cnVjdCBhdGFfcHJvYmVfZW50ICplbnQpOwogZXh0ZXJuIHZvaWQgYXRhX2hvc3Rfc2V0X3JlbW92ZShzdHJ1Y3QgYXRhX2hvc3Rfc2V0ICpob3N0X3NldCk7CkBAIC00NTAsMTMgKzUxNiwyMCBAQAogZXh0ZXJuIGludCBhdGFfc2NzaV9pb2N0bChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKmRldiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gaW50IGF0YV9zY3NpX3F1ZXVlY21kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOwogZXh0ZXJuIGludCBhdGFfc2NzaV9lcnJvcihzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KTsKK2V4dGVybiB2b2lkIGF0YV9laF9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK2V4dGVybiB2b2lkIGF0YV9laF9xY19yZXRyeShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfcmVsZWFzZShzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgYXRhX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiBpbnQgYXRhX3Njc2lfZGV2aWNlX3Jlc3VtZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7Ci1leHRlcm4gaW50IGF0YV9zY3NpX2RldmljZV9zdXNwZW5kKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKK2V4dGVybiBpbnQgYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQoc3RydWN0IHNjc2lfZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBleHRlcm4gaW50IGF0YV9kZXZpY2VfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKLWV4dGVybiBpbnQgYXRhX2RldmljZV9zdXNwZW5kKHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKK2V4dGVybiBpbnQgYXRhX2RldmljZV9zdXNwZW5kKHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludCBhdGFfcmF0ZWxpbWl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfYnVzeV9zbGVlcChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9wYXQsCisJCQkJICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiB2b2lkIGF0YV9wb3J0X3F1ZXVlX3Rhc2soc3RydWN0IGF0YV9wb3J0ICphcCwgdm9pZCAoKmZuKSh2b2lkICopLAorCQkJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgZGVsYXkpOwogCiAvKgogICogRGVmYXVsdCBkcml2ZXIgb3BzIGltcGxlbWVudGF0aW9ucwpAQCAtNDcwLDI2ICs1NDMsMjkgQEAKIGV4dGVybiB1OCBhdGFfY2hlY2tfc3RhdHVzKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHU4IGF0YV9hbHRzdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfZXhlY19jb21tYW5kKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKTsKK2V4dGVybiBpbnQgYXRhX3N0ZF9wcm9iZV9yZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpOwogZXh0ZXJuIGludCBhdGFfcG9ydF9zdGFydCAoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfcG9ydF9zdG9wIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9ob3N0X3N0b3AgKHN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0KTsKIGV4dGVybiBpcnFyZXR1cm5fdCBhdGFfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIGF0YV9xY19wcmVwKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwotZXh0ZXJuIGludCBhdGFfcWNfaXNzdWVfcHJvdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKK2V4dGVybiB2b2lkIGF0YV9ub29wX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CitleHRlcm4gdW5zaWduZWQgaW50IGF0YV9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogZXh0ZXJuIHZvaWQgYXRhX3NnX2luaXRfb25lKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHZvaWQgKmJ1ZiwKIAkJdW5zaWduZWQgaW50IGJ1Zmxlbik7CiBleHRlcm4gdm9pZCBhdGFfc2dfaW5pdChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogCQkgdW5zaWduZWQgaW50IG5fZWxlbSk7CiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9kZXZfY2xhc3NpZnkoY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOwotZXh0ZXJuIHZvaWQgYXRhX2Rldl9pZF9zdHJpbmcoY29uc3QgdTE2ICppZCwgdW5zaWduZWQgY2hhciAqcywKLQkJCSAgICAgIHVuc2lnbmVkIGludCBvZnMsIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIHZvaWQgYXRhX2Rldl9jb25maWcoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGkpOworZXh0ZXJuIHZvaWQgYXRhX2lkX3N0cmluZyhjb25zdCB1MTYgKmlkLCB1bnNpZ25lZCBjaGFyICpzLAorCQkJICB1bnNpZ25lZCBpbnQgb2ZzLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIGF0YV9pZF9jX3N0cmluZyhjb25zdCB1MTYgKmlkLCB1bnNpZ25lZCBjaGFyICpzLAorCQkJICAgIHVuc2lnbmVkIGludCBvZnMsIHVuc2lnbmVkIGludCBsZW4pOwogZXh0ZXJuIHZvaWQgYXRhX2JtZG1hX3NldHVwIChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIGF0YV9ibWRtYV9zdGFydCAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gdm9pZCBhdGFfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB1OCAgIGF0YV9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfYm1kbWFfaXJxX2NsZWFyKHN0cnVjdCBhdGFfcG9ydCAqYXApOwotZXh0ZXJuIHZvaWQgYXRhX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOworZXh0ZXJuIHZvaWQgX19hdGFfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gdm9pZCBhdGFfZW5nX3RpbWVvdXQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2NzaV9zaW11bGF0ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IHNjc2lfY21uZCAqY21kLApAQCAtNDk4LDYgKzU3NCw4IEBACiAJCQkgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogCQkJICAgICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCBnZW9tW10pOwogZXh0ZXJuIGludCBhdGFfc2NzaV9zbGF2ZV9jb25maWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKK2V4dGVybiBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhX2Rldl9wYWlyKHN0cnVjdCBhdGFfcG9ydCAqYXAsIAorCQkJCSAgICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7CiAKIC8qCiAgKiBUaW1pbmcgaGVscGVycwpAQCAtNTQwLDcgKzYxOCw3IEBACiBleHRlcm4gc3RydWN0IGF0YV9wcm9iZV9lbnQgKgogYXRhX3BjaV9pbml0X25hdGl2ZV9tb2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqKnBvcnQsIGludCBwb3J0bWFzayk7CiBleHRlcm4gaW50IHBjaV90ZXN0X2NvbmZpZ19iaXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgKmJpdHMpOwotCitleHRlcm4gdW5zaWduZWQgbG9uZyBhdGFfcGNpX2RlZmF1bHRfZmlsdGVyKGNvbnN0IHN0cnVjdCBhdGFfcG9ydCAqLCBzdHJ1Y3QgYXRhX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKIApAQCAtNTU3LDI3ICs2MzUsNDMgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKgorYXRhX3FjX2ZpcnN0X3NnKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKHFjLT5uX2VsZW0pCisJCXJldHVybiBxYy0+X19zZzsKKwlpZiAocWMtPnBhZF9sZW4pCisJCXJldHVybiAmcWMtPnBhZF9zZ2VudDsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKgogYXRhX3FjX25leHRfc2coc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKIAlpZiAoc2cgPT0gJnFjLT5wYWRfc2dlbnQpCiAJCXJldHVybiBOVUxMOwogCWlmICgrK3NnIC0gcWMtPl9fc2cgPCBxYy0+bl9lbGVtKQogCQlyZXR1cm4gc2c7Ci0JcmV0dXJuIHFjLT5wYWRfbGVuID8gJnFjLT5wYWRfc2dlbnQgOiBOVUxMOworCWlmIChxYy0+cGFkX2xlbikKKwkJcmV0dXJuICZxYy0+cGFkX3NnZW50OworCXJldHVybiBOVUxMOwogfQogCiAjZGVmaW5lIGF0YV9mb3JfZWFjaF9zZyhzZywgcWMpIFwKLQlmb3IgKHNnID0gcWMtPl9fc2c7IHNnOyBzZyA9IGF0YV9xY19uZXh0X3NnKHNnLCBxYykpCisJZm9yIChzZyA9IGF0YV9xY19maXJzdF9zZyhxYyk7IHNnOyBzZyA9IGF0YV9xY19uZXh0X3NnKHNnLCBxYykpCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0YV90YWdfdmFsaWQodW5zaWduZWQgaW50IHRhZykKIHsKIAlyZXR1cm4gKHRhZyA8IEFUQV9NQVhfUVVFVUUpID8gMSA6IDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0YV9jbGFzc19wcmVzZW50KHVuc2lnbmVkIGludCBjbGFzcykKK3sKKwlyZXR1cm4gY2xhc3MgPT0gQVRBX0RFVl9BVEEgfHwgY2xhc3MgPT0gQVRBX0RFVl9BVEFQSTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRhX2Rldl9wcmVzZW50KGNvbnN0IHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuICgoZGV2LT5jbGFzcyA9PSBBVEFfREVWX0FUQSkgfHwKLQkJKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9BVEFQSSkpOworCXJldHVybiBhdGFfY2xhc3NfcHJlc2VudChkZXYtPmNsYXNzKTsKIH0KIAogc3RhdGljIGlubGluZSB1OCBhdGFfY2hrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtNjQ1LDkgKzczOSw5IEBACiAKIAlpZiAoc3RhdHVzICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpIHsKIAkJdW5zaWduZWQgbG9uZyBsID0gYXAtPmlvYWRkci5zdGF0dXNfYWRkcjsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIkFUQTogYWJub3JtYWwgc3RhdHVzIDB4JVggb24gcG9ydCAweCVsWFxuIiwKLQkJICAgICAgIHN0YXR1cywgbCk7CisJCWlmIChhdGFfbXNnX3dhcm4oYXApKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVRBOiBhYm5vcm1hbCBzdGF0dXMgMHglWCBvbiBwb3J0IDB4JWxYXG4iLAorCQkJCXN0YXR1cywgbCk7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTY4OSw2ICs3ODMsMjQgQEAKIAlhdGFfdGZfaW5pdChxYy0+YXAsICZxYy0+dGYsIHFjLT5kZXYtPmRldm5vKTsKIH0KIAorLyoqCisgKglhdGFfcWNfY29tcGxldGUgLSBDb21wbGV0ZSBhbiBhY3RpdmUgQVRBIGNvbW1hbmQKKyAqCUBxYzogQ29tbWFuZCB0byBjb21wbGV0ZQorICoJQGVycl9tYXNrOiBBVEEgU3RhdHVzIHJlZ2lzdGVyIGNvbnRlbnRzCisgKgorICoJSW5kaWNhdGUgdG8gdGhlIG1pZCBhbmQgdXBwZXIgbGF5ZXJzIHRoYXQgYW4gQVRBCisgKgljb21tYW5kIGhhcyBjb21wbGV0ZWQsIHdpdGggZWl0aGVyIGFuIG9rIG9yIG5vdC1vayBzdGF0dXMuCisgKgorICoJTE9DS0lORzoKKyAqCXNwaW5fbG9ja19pcnFzYXZlKGhvc3Rfc2V0IGxvY2spCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFfcWNfY29tcGxldGUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpZiAodW5saWtlbHkocWMtPmZsYWdzICYgQVRBX1FDRkxBR19FSF9TQ0hFRFVMRUQpKQorCQlyZXR1cm47CisKKwlfX2F0YV9xY19jb21wbGV0ZShxYyk7Cit9CiAKIC8qKgogICoJYXRhX2lycV9vbiAtIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIGEgcG9ydC4KQEAgLTczOSw3ICs4NTEsOCBAQAogCiAJc3RhdHVzID0gYXRhX2J1c3lfd2FpdChhcCwgYml0cywgMTAwMCk7CiAJaWYgKHN0YXR1cyAmIGJpdHMpCi0JCURQUklOVEsoImFibm9ybWFsIHN0YXR1cyAweCVYXG4iLCBzdGF0dXMpOworCQlpZiAoYXRhX21zZ19lcnIoYXApKQorCQkJcHJpbnRrKEtFUk5fRVJSICJhYm5vcm1hbCBzdGF0dXMgMHglWFxuIiwgc3RhdHVzKTsKIAogCS8qIGdldCBjb250cm9sbGVyIHN0YXR1czsgY2xlYXIgaW50ciwgZXJyIGJpdHMgKi8KIAlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfTU1JTykgewpAQCAtNzU3LDggKzg3MCwxMCBAQAogCQlwb3N0X3N0YXQgPSBpbmIoYXAtPmlvYWRkci5ibWRtYV9hZGRyICsgQVRBX0RNQV9TVEFUVVMpOwogCX0KIAotCVZQUklOVEsoImlycSBhY2s6IGhvc3Rfc3RhdCAweCVYLCBuZXcgaG9zdF9zdGF0IDB4JVgsIGRydl9zdGF0IDB4JVhcbiIsCi0JCWhvc3Rfc3RhdCwgcG9zdF9zdGF0LCBzdGF0dXMpOworCWlmIChhdGFfbXNnX2ludHIoYXApKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogaXJxIGFjazogaG9zdF9zdGF0IDB4JVgsIG5ldyBob3N0X3N0YXQgMHglWCwgZHJ2X3N0YXQgMHglWFxuIiwKKwkJCV9fRlVOQ1RJT05fXywKKwkJCWhvc3Rfc3RhdCwgcG9zdF9zdGF0LCBzdGF0dXMpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTc5NSw3ICs5MTAsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWNfZXJyX21hc2sodTggc3RhdHVzKQogewogCWlmIChzdGF0dXMgJiBBVEFfQlVTWSkKLQkJcmV0dXJuIEFDX0VSUl9BVEFfQlVTOworCQlyZXR1cm4gQUNfRVJSX0hTTTsKIAlpZiAoc3RhdHVzICYgKEFUQV9FUlIgfCBBVEFfREYpKQogCQlyZXR1cm4gQUNfRVJSX0RFVjsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKaW5kZXggMTQ3ZWIwMS4uYzA4Yzk5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKQEAgLTI4LDE3ICsyOCwyNyBAQAogI2RlZmluZSBBTElHTiBfX0FMSUdOCiAjZGVmaW5lIEFMSUdOX1NUUiBfX0FMSUdOX1NUUgogCisjaWZuZGVmIEVOVFJZCiAjZGVmaW5lIEVOVFJZKG5hbWUpIFwKICAgLmdsb2JsIG5hbWU7IFwKICAgQUxJR047IFwKICAgbmFtZToKKyNlbmRpZgogCiAjZGVmaW5lIEtQUk9CRV9FTlRSWShuYW1lKSBcCiAgIC5zZWN0aW9uIC5rcHJvYmVzLnRleHQsICJheCI7IFwKLSAgLmdsb2JsIG5hbWU7IFwKLSAgQUxJR047IFwKLSAgbmFtZToKKyAgRU5UUlkobmFtZSkKIAorI2lmbmRlZiBFTkQKKyNkZWZpbmUgRU5EKG5hbWUpIFwKKyAgLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2lmbmRlZiBFTkRQUk9DCisjZGVmaW5lIEVORFBST0MobmFtZSkgXAorICAudHlwZSBuYW1lLCBAZnVuY3Rpb247IFwKKyAgRU5EKG5hbWUpCisjZW5kaWYKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggNDcyMDhiZC4uNjcyNThiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0LmgKQEAgLTQxMSw2ICs0MTEsMTcgQEAKIAkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQogCiAvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbSAtCWl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUKKyAqCQkJY29udGludWluZyBmcm9tIGV4aXN0aW5nIHBvaW50CisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShwb3MsIGhlYWQsIG1lbWJlcikgCQkJXAorCWZvciAoOyBwcmVmZXRjaChwb3MtPm1lbWJlci5uZXh0KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJXAorCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCisKKy8qKgogICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIC0gaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiBsaXN0IGVudHJ5CiAgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KICAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCkBAIC00MzgsNiArNDQ5LDE5IEBACiAJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKIAogLyoqCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbSAtIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUKKyAqCQkJZnJvbSBleGlzdGluZyBwb2ludCBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiBsaXN0IGVudHJ5CisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbShwb3MsIG4sIGhlYWQsIG1lbWJlcikgCQkJXAorCWZvciAobiA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwkJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJCQkJCQlcCisJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKKworLyoqCiAgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZSAtIGl0ZXJhdGUgYmFja3dhcmRzIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlIHNhZmUgYWdhaW5zdAogICoJCQkJICAgICAgcmVtb3ZhbCBvZiBsaXN0IGVudHJ5CiAgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9vcC5oIGIvaW5jbHVkZS9saW51eC9sb29wLmgKaW5kZXggZjk2NTA2Ny4uZTc2Yzc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb29wLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb29wLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIC8qIFBvc3NpYmxlIHN0YXRlcyBvZiBkZXZpY2UgKi8KIGVudW0gewpAQCAtNjAsNyArNjEsNyBAQAogCWludAkJCWxvX3N0YXRlOwogCXN0cnVjdCBjb21wbGV0aW9uCWxvX2RvbmU7CiAJc3RydWN0IGNvbXBsZXRpb24JbG9fYmhfZG9uZTsKLQlzdHJ1Y3Qgc2VtYXBob3JlCWxvX2N0bF9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXgJCWxvX2N0bF9tdXRleDsKIAlpbnQJCQlsb19wZW5kaW5nOwogCiAJcmVxdWVzdF9xdWV1ZV90CQkqbG9fcXVldWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21ham9yLmggYi9pbmNsdWRlL2xpbnV4L21ham9yLmgKaW5kZXggZTM2YTQ2Ny4uMGE3NGM1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYWpvci5oCisrKyBiL2luY2x1ZGUvbGludXgvbWFqb3IuaApAQCAtMTEzLDYgKzExMyw3IEBACiAKICNkZWZpbmUgVUJEX01BSk9SCQk5OAogCisjZGVmaW5lIFBQX01BSk9SCQk5OQogI2RlZmluZSBKU0ZEX01BSk9SCQk5OQogCiAjZGVmaW5lIFBIT05FX01BSk9SCQkxMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaAppbmRleCAwMWYwM2JjLi45NjhiMWFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC02LDYgKzYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCitzdHJ1Y3QgcGFnZTsKK3N0cnVjdCB6b25lOworc3RydWN0IHBnbGlzdF9kYXRhOworCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiAvKgogICogcGdkYXQgcmVzaXppbmcgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaAppbmRleCBiYmQyMjIxLi42YTc2MjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKQEAgLTE0Nyw2ICsxNDcsNyBAQAogZXh0ZXJuIHZvaWQgbXBvbF9yZWJpbmRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkJY29uc3Qgbm9kZW1hc2tfdCAqbmV3KTsKIGV4dGVybiB2b2lkIG1wb2xfcmViaW5kX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBub2RlbWFza190ICpuZXcpOworZXh0ZXJuIHZvaWQgbXBvbF9maXhfZm9ya19jaGlsZF9mbGFnKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAjZGVmaW5lIHNldF9jcHVzZXRfYmVpbmdfcmVib3VuZCh4KSAoY3B1c2V0X2JlaW5nX3JlYm91bmQgPSAoeCkpCiAKICNpZmRlZiBDT05GSUdfQ1BVU0VUCkBAIC0yNDgsNiArMjQ5LDEwIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2ZpeF9mb3JrX2NoaWxkX2ZsYWcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQorCiAjZGVmaW5lIHNldF9jcHVzZXRfYmVpbmdfcmVib3VuZCh4KSBkbyB7fSB3aGlsZSAoMCkKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgem9uZWxpc3QgKmh1Z2Vfem9uZWxpc3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMDk5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaApAQCAtMCwwICsxLDM2IEBACisjaWZuZGVmIF9MSU5VWF9NSUdSQVRFX0gKKyNkZWZpbmUgX0xJTlVYX01JR1JBVEVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2lmZGVmIENPTkZJR19NSUdSQVRJT04KK2V4dGVybiBpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpOworZXh0ZXJuIGludCBwdXRiYWNrX2xydV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTsKK2V4dGVybiBpbnQgbWlncmF0ZV9wYWdlKHN0cnVjdCBwYWdlICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgbWlncmF0ZV9wYWdlX2NvcHkoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHBhZ2UgKik7CitleHRlcm4gaW50IG1pZ3JhdGVfcGFnZV9yZW1vdmVfcmVmZXJlbmNlcyhzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQpOworZXh0ZXJuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIHN0cnVjdCBsaXN0X2hlYWQgKnQsCisJCXN0cnVjdCBsaXN0X2hlYWQgKm1vdmVkLCBzdHJ1Y3QgbGlzdF9oZWFkICpmYWlsZWQpOworaW50IG1pZ3JhdGVfcGFnZXNfdG8oc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsCisJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50IGRlc3QpOworZXh0ZXJuIGludCBmYWlsX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKKworZXh0ZXJuIGludCBtaWdyYXRlX3ByZXAodm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzb2xhdGVfbHJ1X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCisJCQkJCXsgcmV0dXJuIC1FTk9TWVM7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB1dGJhY2tfbHJ1X3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgc3RydWN0IGxpc3RfaGVhZCAqdCwKKwlzdHJ1Y3QgbGlzdF9oZWFkICptb3ZlZCwgc3RydWN0IGxpc3RfaGVhZCAqZmFpbGVkKSB7IHJldHVybiAtRU5PU1lTOyB9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcHJlcCh2b2lkKSB7IHJldHVybiAtRU5PU1lTOyB9CisKKy8qIFBvc3NpYmxlIHNldHRpbmdzIGZvciB0aGUgbWlncmF0ZV9wYWdlKCkgbWV0aG9kIGluIGFkZHJlc3Nfb3BlcmF0aW9ucyAqLworI2RlZmluZSBtaWdyYXRlX3BhZ2UgTlVMTAorI2RlZmluZSBmYWlsX21pZ3JhdGVfcGFnZSBOVUxMCisKKyNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovCisjZW5kaWYgLyogX0xJTlVYX01JR1JBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDI2ZTE2NjMuLjZhYTAxNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI4Niw0MyArMjg2LDM0IEBACiAgKgogICogQWxzbywgbWFueSBrZXJuZWwgcm91dGluZXMgaW5jcmVhc2UgdGhlIHBhZ2UgY291bnQgYmVmb3JlIGEgY3JpdGljYWwKICAqIHJvdXRpbmUgc28gdGhleSBjYW4gYmUgc3VyZSB0aGUgcGFnZSBkb2Vzbid0IGdvIGF3YXkgZnJvbSB1bmRlciB0aGVtLgotICoKLSAqIFNpbmNlIDIuNi42IChhcHByb3gpLCBhIGZyZWUgcGFnZSBoYXMgLT5fY291bnQgPSAtMS4gIFRoaXMgaXMgc28gdGhhdCB3ZQotICogY2FuIHVzZSBhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCBwYWdlLT5fY291bnQpIHRvIGRldGVjdCB3aGVuIHRoZSBwYWdlCi0gKiBiZWNvbWVzIGZyZWUgYW5kIHNvIHRoYXQgd2UgY2FuIGFsc28gdXNlIGF0b21pY19pbmNfYW5kX3Rlc3QgdG8gYXRvbWljYWxseQotICogZGV0ZWN0IHdoZW4gd2UganVzdCB0cmllZCB0byBncmFiIGEgcmVmIG9uIGEgcGFnZSB3aGljaCBzb21lIG90aGVyIENQVSBoYXMKLSAqIGFscmVhZHkgZGVlbWVkIHRvIGJlIGZyZWVhYmxlLgotICoKLSAqIE5PIGNvZGUgc2hvdWxkIG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQgdGhpcyBpbnRlcm5hbCBkZXRhaWwhICBVc2UgdGhlIHByb3ZpZGVkCi0gKiBtYWNyb3Mgd2hpY2ggcmV0YWluIHRoZSBvbGQgcnVsZXM6IHBhZ2VfY291bnQocGFnZSkgPT0gMCBpcyBhIGZyZWUgcGFnZS4KICAqLwogCiAvKgogICogRHJvcCBhIHJlZiwgcmV0dXJuIHRydWUgaWYgdGhlIGxvZ2ljYWwgcmVmY291bnQgZmVsbCB0byB6ZXJvICh0aGUgcGFnZSBoYXMKICAqIG5vIHVzZXJzKQogICovCi0jZGVmaW5lIHB1dF9wYWdlX3Rlc3R6ZXJvKHApCQkJCVwKLQkoewkJCQkJCVwKLQkJQlVHX09OKGF0b21pY19yZWFkKCYocCktPl9jb3VudCkgPT0gLTEpO1wKLQkJYXRvbWljX2FkZF9uZWdhdGl2ZSgtMSwgJihwKS0+X2NvdW50KTsJXAotCX0pCitzdGF0aWMgaW5saW5lIGludCBwdXRfcGFnZV90ZXN0emVybyhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBhZ2UtPl9jb3VudCkgPT0gMCk7CisJcmV0dXJuIGF0b21pY19kZWNfYW5kX3Rlc3QoJnBhZ2UtPl9jb3VudCk7Cit9CiAKIC8qCi0gKiBHcmFiIGEgcmVmLCByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFnZSBwcmV2aW91c2x5IGhhZCBhIGxvZ2ljYWwgcmVmY291bnQgb2YKLSAqIHplcm8uICBpZTogcmV0dXJucyB0cnVlIGlmIHdlIGp1c3QgZ3JhYmJlZCBhbiBhbHJlYWR5LWRlZW1lZC10by1iZS1mcmVlIHBhZ2UKKyAqIFRyeSB0byBncmFiIGEgcmVmIHVubGVzcyB0aGUgcGFnZSBoYXMgYSByZWZjb3VudCBvZiB6ZXJvLCByZXR1cm4gZmFsc2UgaWYKKyAqIHRoYXQgaXMgdGhlIGNhc2UuCiAgKi8KLSNkZWZpbmUgZ2V0X3BhZ2VfdGVzdG9uZShwKQlhdG9taWNfaW5jX2FuZF90ZXN0KCYocCktPl9jb3VudCkKLQotI2RlZmluZSBzZXRfcGFnZV9jb3VudChwLHYpIAlhdG9taWNfc2V0KCYocCktPl9jb3VudCwgKHYpIC0gMSkKLSNkZWZpbmUgX19wdXRfcGFnZShwKQkJYXRvbWljX2RlYygmKHApLT5fY291bnQpCitzdGF0aWMgaW5saW5lIGludCBnZXRfcGFnZV91bmxlc3NfemVybyhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gYXRvbWljX2luY19ub3RfemVybygmcGFnZS0+X2NvdW50KTsKK30KIAogZXh0ZXJuIHZvaWQgRkFTVENBTEwoX19wYWdlX2NhY2hlX3JlbGVhc2Uoc3RydWN0IHBhZ2UgKikpOwogCiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmIChQYWdlQ29tcG91bmQocGFnZSkpCisJaWYgKHVubGlrZWx5KFBhZ2VDb21wb3VuZChwYWdlKSkpCiAJCXBhZ2UgPSAoc3RydWN0IHBhZ2UgKilwYWdlX3ByaXZhdGUocGFnZSk7Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZwYWdlLT5fY291bnQpICsgMTsKKwlyZXR1cm4gYXRvbWljX3JlYWQoJnBhZ2UtPl9jb3VudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTMzMiw4ICszMjMsMTkgQEAKIAlhdG9taWNfaW5jKCZwYWdlLT5fY291bnQpOwogfQogCisvKgorICogU2V0dXAgdGhlIHBhZ2UgY291bnQgYmVmb3JlIGJlaW5nIGZyZWVkIGludG8gdGhlIHBhZ2UgYWxsb2NhdG9yIGZvcgorICogdGhlIGZpcnN0IHRpbWUgKGJvb3Qgb3IgbWVtb3J5IGhvdHBsdWcpCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJYXRvbWljX3NldCgmcGFnZS0+X2NvdW50LCAxKTsKK30KKwogdm9pZCBwdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKK3ZvaWQgc3BsaXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKKwogLyoKICAqIE11bHRpcGxlIHByb2Nlc3NlcyBtYXkgInNlZSIgdGhlIHNhbWUgcGFnZS4gRS5nLiBmb3IgdW50b3VjaGVkCiAgKiBtYXBwaW5ncyBvZiAvZGV2L251bGwsIGFsbCBwcm9jZXNzZXMgc2VlIHRoZSBzYW1lIHBhZ2UgZnVsbCBvZgpAQCAtMTA0NiwxMiArMTA0OCwxNiBAQAogCiBpbnQgZHJvcF9jYWNoZXNfc3lzY3RsX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCiAJCQkJCXZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7Ci1pbnQgc2hyaW5rX3NsYWIodW5zaWduZWQgbG9uZyBzY2FubmVkLCBnZnBfdCBnZnBfbWFzaywKK3Vuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWIodW5zaWduZWQgbG9uZyBzY2FubmVkLCBnZnBfdCBnZnBfbWFzaywKIAkJCXVuc2lnbmVkIGxvbmcgbHJ1X3BhZ2VzKTsKIHZvaWQgZHJvcF9wYWdlY2FjaGUodm9pZCk7CiB2b2lkIGRyb3Bfc2xhYih2b2lkKTsKIAorI2lmbmRlZiBDT05GSUdfTU1VCisjZGVmaW5lIHJhbmRvbWl6ZV92YV9zcGFjZSAwCisjZWxzZQogZXh0ZXJuIGludCByYW5kb21pemVfdmFfc3BhY2U7CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfTU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggOGFjODU0Zi4uM2I2NzIzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCkBAIC0zMiw3ICszMiw3IEBACiB7CiAJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCQlfX0NsZWFyUGFnZUFjdGl2ZShwYWdlKTsKIAkJem9uZS0+bnJfYWN0aXZlLS07CiAJfSBlbHNlIHsKIAkJem9uZS0+bnJfaW5hY3RpdmUtLTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKaW5kZXggZjM4ODcyYS4uYmRjNTU2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKQEAgLTQ5LDcgKzQ5LDcgQEAKIC8qCiAgKiBUaGVzZSBhcmUgdGhlIGNvbW1hbmQgdHlwZXMuCiAgKi8KLSNkZWZpbmUgbW1jX2NtZF90eXBlKGNtZCkJKChjbWQpLT5mbGFncyAmIE1NQ19DTURfVFlQRSkKKyNkZWZpbmUgbW1jX2NtZF90eXBlKGNtZCkJKChjbWQpLT5mbGFncyAmIE1NQ19DTURfTUFTSykKIAogCXVuc2lnbmVkIGludAkJcmV0cmllczsJLyogbWF4IG51bWJlciBvZiByZXRyaWVzICovCiAJdW5zaWduZWQgaW50CQllcnJvcjsJCS8qIGNvbW1hbmQgZXJyb3IgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IDg0ZDc1ZjMuLmVhZWMxM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMTgzLDYgKzE4Myw3IEBACiAKIC8qIEZvciBldmVyeSBleHBvcnRlZCBzeW1ib2wsIHBsYWNlIGEgc3RydWN0IGluIHRoZSBfX2tzeW10YWIgc2VjdGlvbiAqLwogI2RlZmluZSBfX0VYUE9SVF9TWU1CT0woc3ltLCBzZWMpCQkJCVwKKwlleHRlcm4gdHlwZW9mKHN5bSkgc3ltOwkJCQkJXAogCV9fQ1JDX1NZTUJPTChzeW0sIHNlYykJCQkJCVwKIAlzdGF0aWMgY29uc3QgY2hhciBfX2tzdHJ0YWJfIyNzeW1bXQkJCVwKIAlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWJfc3RyaW5ncyIpKSkJCVwKQEAgLTE5OCw2ICsxOTksOSBAQAogI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTChzeW0pCQkJCQlcCiAJX19FWFBPUlRfU1lNQk9MKHN5bSwgIl9ncGwiKQogCisjZGVmaW5lIEVYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRShzeW0pCQkJCVwKKwlfX0VYUE9SVF9TWU1CT0woc3ltLCAiX2dwbF9mdXR1cmUiKQorCiAjZW5kaWYKIAogc3RydWN0IG1vZHVsZV9yZWYKQEAgLTI0Miw2ICsyNDYsNyBAQAogCS8qIFN5c2ZzIHN0dWZmLiAqLwogCXN0cnVjdCBtb2R1bGVfa29iamVjdCBta29iajsKIAlzdHJ1Y3QgbW9kdWxlX3BhcmFtX2F0dHJzICpwYXJhbV9hdHRyczsKKwlzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbW9kaW5mb19hdHRyczsKIAljb25zdCBjaGFyICp2ZXJzaW9uOwogCWNvbnN0IGNoYXIgKnNyY3ZlcnNpb247CiAKQEAgLTI1NSw2ICsyNjAsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX2dwbF9zeW1zOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmdwbF9jcmNzOwogCisJLyogc3ltYm9scyB0aGF0IHdpbGwgYmUgR1BMLW9ubHkgaW4gdGhlIG5lYXIgZnV0dXJlLiAqLworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpncGxfZnV0dXJlX3N5bXM7CisJdW5zaWduZWQgaW50IG51bV9ncGxfZnV0dXJlX3N5bXM7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqZ3BsX2Z1dHVyZV9jcmNzOworCiAJLyogRXhjZXB0aW9uIHRhYmxlICovCiAJdW5zaWduZWQgaW50IG51bV9leGVudHJpZXM7CiAJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXh0YWJsZTsKQEAgLTQ0MSw2ICs0NTEsNyBAQAogI2Vsc2UgLyogIUNPTkZJR19NT0RVTEVTLi4uICovCiAjZGVmaW5lIEVYUE9SVF9TWU1CT0woc3ltKQogI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTChzeW0pCisjZGVmaW5lIEVYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRShzeW0pCiAKIC8qIEdpdmVuIGFuIGFkZHJlc3MsIGxvb2sgZm9yIGl0IGluIHRoZSBleGNlcHRpb24gdGFibGVzLiAqLwogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICoKQEAgLTU0NCwyNSArNTU1LDYgQEAKIAogLyogQkVMT1cgSEVSRSBBTEwgVEhFU0UgQVJFIE9CU09MRVRFIEFORCBXSUxMIFZBTklTSCAqLwogCi1zdHJ1Y3Qgb2Jzb2xldGVfbW9kcGFybSB7Ci0JY2hhciBuYW1lWzY0XTsKLQljaGFyIHR5cGVbNjQtc2l6ZW9mKHZvaWQgKildOwotCXZvaWQgKmFkZHI7Ci19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgTU9EVUxFX1BBUk1fKHZvaWQpIHsgfQotI2lmZGVmIE1PRFVMRQotLyogREVQUkVDQVRFRDogRG8gbm90IHVzZS4gKi8KLSNkZWZpbmUgTU9EVUxFX1BBUk0odmFyLHR5cGUpCQkJCQkJICAgIFwKLWV4dGVybiBzdHJ1Y3Qgb2Jzb2xldGVfbW9kcGFybSBfX3Bhcm1fIyN2YXIgXAotX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19vYnNwYXJtIikpKTsgXAotc3RydWN0IG9ic29sZXRlX21vZHBhcm0gX19wYXJtXyMjdmFyID0gXAoteyBfX3N0cmluZ2lmeSh2YXIpLCB0eXBlLCAmTU9EVUxFX1BBUk1fIH07IFwKLV9fTU9EVUxFX1BBUk1fVFlQRSh2YXIsIHR5cGUpOwotI2Vsc2UKLSNkZWZpbmUgTU9EVUxFX1BBUk0odmFyLHR5cGUpIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSAqX19wYXJtXyMjdmFyID0gJk1PRFVMRV9QQVJNXzsKLSNlbmRpZgotCiAjZGVmaW5lIF9fTU9EVUxFX1NUUklORyh4KSBfX3N0cmluZ2lmeSh4KQogCiAvKiBVc2Ugc3ltYm9sX2dldCBhbmQgc3ltYm9sX3B1dCBpbnN0ZWFkLiAgWW91J2xsIHRoYW5rIG1lLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCmluZGV4IGI1Yzk4YzQuLjdjMGMyYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTE2MiwxMyArMTYyLDYgQEAKIGV4dGVybiBpbnQgcGFyYW1fc2V0X2NvcHlzdHJpbmcoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiBleHRlcm4gaW50IHBhcmFtX2dldF9zdHJpbmcoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiAKLWludCBwYXJhbV9hcnJheShjb25zdCBjaGFyICpuYW1lLAotCQljb25zdCBjaGFyICp2YWwsCi0JCXVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgsCi0JCXZvaWQgKmVsZW0sIGludCBlbGVtc2l6ZSwKLQkJaW50ICgqc2V0KShjb25zdCBjaGFyICosIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKSwKLQkJaW50ICpudW0pOwotCiAvKiBmb3IgZXhwb3J0aW5nIHBhcmFtZXRlcnMgaW4gL3N5cy9wYXJhbWV0ZXJzICovCiAKIHN0cnVjdCBtb2R1bGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzLmggYi9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzLmgKaW5kZXggZTkzM2UyYS4uNzc5ZTZhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXNkb3NfZnMuaApAQCAtMTg0LDYgKzE4NCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbmxzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBzdHJ1Y3QgZmF0X21vdW50X29wdGlvbnMgewogCXVpZF90IGZzX3VpZDsKQEAgLTE5OSw3ICsyMDAsNyBAQAogCQkgc3lzX2ltbXV0YWJsZToxLCAvKiBzZXQgPSBzeXN0ZW0gZmlsZXMgYXJlIGltbXV0YWJsZSAqLwogCQkgZG90c09LOjEsICAgICAgICAvKiBzZXQgPSBoaWRkZW4gYW5kIHN5c3RlbSBmaWxlcyBhcmUgbmFtZWQgJy5maWxlbmFtZScgKi8KIAkJIGlzdmZhdDoxLCAgICAgICAgLyogMD1ubyB2ZmF0IGxvbmcgZmlsZW5hbWUgc3VwcG9ydCwgMT12ZmF0IHN1cHBvcnQgKi8KLQkJIHV0Zjg6MSwJICAvKiBVc2Ugb2YgVVRGOCBjaGFyYWN0ZXIgc2V0IChEZWZhdWx0KSAqLworCQkgdXRmODoxLAkgIC8qIFVzZSBvZiBVVEYtOCBjaGFyYWN0ZXIgc2V0IChEZWZhdWx0KSAqLwogCQkgdW5pY29kZV94bGF0ZToxLCAvKiBjcmVhdGUgZXNjYXBlIHNlcXVlbmNlcyBmb3IgdW5oYW5kbGVkIFVuaWNvZGUgKi8KIAkJIG51bXRhaWw6MSwgICAgICAgLyogRG9lcyBmaXJzdCBhbGlhcyBoYXZlIGEgbnVtZXJpYyAnfjEnIHR5cGUgdGFpbD8gKi8KIAkJIGF0YXJpOjEsICAgICAgICAgLyogVXNlIEF0YXJpIEdFTURPUyB2YXJpYXRpb24gb2YgTVMtRE9TIGZzICovCkBAIC0yMjYsNyArMjI3LDcgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9jbHVzdGVyOyAgIC8qIG1heGltdW0gY2x1c3RlciBudW1iZXIgKi8KIAl1bnNpZ25lZCBsb25nIHJvb3RfY2x1c3RlcjsgIC8qIGZpcnN0IGNsdXN0ZXIgb2YgdGhlIHJvb3QgZGlyZWN0b3J5ICovCiAJdW5zaWduZWQgbG9uZyBmc2luZm9fc2VjdG9yOyAvKiBzZWN0b3IgbnVtYmVyIG9mIEZBVDMyIGZzaW5mbyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgZmF0X2xvY2s7CisJc3RydWN0IG11dGV4IGZhdF9sb2NrOwogCXVuc2lnbmVkIGludCBwcmV2X2ZyZWU7ICAgICAgLyogcHJldmlvdXNseSBhbGxvY2F0ZWQgY2x1c3RlciBudW1iZXIgKi8KIAl1bnNpZ25lZCBpbnQgZnJlZV9jbHVzdGVyczsgIC8qIC0xIGlmIHVuZGVmaW5lZCAqLwogCXN0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyBvcHRpb25zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdjY0M3h4LmggYi9pbmNsdWRlL2xpbnV4L212NjQzeHguaAppbmRleCAwYjA4Y2Q2Li45NTVkMzA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L212NjQzeHguaAorKysgYi9pbmNsdWRlL2xpbnV4L212NjQzeHguaApAQCAtMTIxNCw2ICsxMjE0LDcgQEAKICNkZWZpbmUgTVY2NDNYWF9FVEhfRk9SQ0VfQlBfTU9ERV9OT19KQU0JCTAKICNkZWZpbmUgTVY2NDNYWF9FVEhfRk9SQ0VfQlBfTU9ERV9KQU1fVFgJCSgxPDw3KQogI2RlZmluZSBNVjY0M1hYX0VUSF9GT1JDRV9CUF9NT0RFX0pBTV9UWF9PTl9SWF9FUlIJKDE8PDgpCisjZGVmaW5lIE1WNjQzWFhfRVRIX1NFUklBTF9QT1JUX0NPTlRST0xfUkVTRVJWRUQJKDE8PDkpCiAjZGVmaW5lIE1WNjQzWFhfRVRIX0ZPUkNFX0xJTktfRkFJTAkJCTAKICNkZWZpbmUgTVY2NDNYWF9FVEhfRE9fTk9UX0ZPUkNFX0xJTktfRkFJTAkJKDE8PDEwKQogI2RlZmluZSBNVjY0M1hYX0VUSF9SRVRSQU5TTUlUXzE2X0FUVEVNUFRTCQkwCkBAIC0xMjQzLDYgKzEyNDQsOCBAQAogI2RlZmluZSBNVjY0M1hYX0VUSF9TRVRfTUlJX1NQRUVEX1RPXzEwCQkJMAogI2RlZmluZSBNVjY0M1hYX0VUSF9TRVRfTUlJX1NQRUVEX1RPXzEwMAkJKDE8PDI0KQogCisjZGVmaW5lIE1WNjQzWFhfRVRIX01BWF9SWF9QQUNLRVRfTUFTSwkJCSgweDc8PDE3KQorCiAjZGVmaW5lCU1WNjQzWFhfRVRIX1BPUlRfU0VSSUFMX0NPTlRST0xfREVGQVVMVF9WQUxVRQkJXAogCQlNVjY0M1hYX0VUSF9ET19OT1RfRk9SQ0VfTElOS19QQVNTCXwJXAogCQlNVjY0M1hYX0VUSF9FTkFCTEVfQVVUT19ORUdfRk9SX0RVUExYCXwJXApAQCAtMTI4NSwyMyArMTI4OCwxNSBAQAogI2RlZmluZSBNVjY0M1hYX0VUSF9OQU1FCSJtdjY0M3h4X2V0aCIKIAogc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgewotCS8qIAotCSAqIE5vbi12YWx1ZXMgZm9yIG1hY19hZGRyLCBwaHlfYWRkciwgcG9ydF9jb25maWcsIGV0Yy4KLQkgKiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZS4gIFNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiBmb3JjZV8qIGZpZWxkLCBjYXVzZXMgdGhlIGRlZmF1bHQgdmFsdWUgdG8gYmUgb3ZlcnJpZGRlbgotCSAqIGV2ZW4gd2hlbiB6ZXJvLgotCSAqLwotCXVuc2lnbmVkIGludAlmb3JjZV9waHlfYWRkcjoxOwotCXVuc2lnbmVkIGludAlmb3JjZV9wb3J0X2NvbmZpZzoxOwotCXVuc2lnbmVkIGludAlmb3JjZV9wb3J0X2NvbmZpZ19leHRlbmQ6MTsKLQl1bnNpZ25lZCBpbnQJZm9yY2VfcG9ydF9zZG1hX2NvbmZpZzoxOwotCXVuc2lnbmVkIGludAlmb3JjZV9wb3J0X3NlcmlhbF9jb250cm9sOjE7Ci0JaW50CQlwaHlfYWRkcjsKIAljaGFyCQkqbWFjX2FkZHI7CS8qIHBvaW50ZXIgdG8gbWFjIGFkZHJlc3MgKi8KLQl1MzIJCXBvcnRfY29uZmlnOwotCXUzMgkJcG9ydF9jb25maWdfZXh0ZW5kOwotCXUzMgkJcG9ydF9zZG1hX2NvbmZpZzsKLQl1MzIJCXBvcnRfc2VyaWFsX2NvbnRyb2w7CisJdTE2CQlmb3JjZV9waHlfYWRkcjsJLyogZm9yY2Ugb3ZlcnJpZGUgaWYgcGh5X2FkZHIgPT0gMCAqLworCXUxNgkJcGh5X2FkZHI7CisKKwkvKiBJZiBzcGVlZCBpcyAwLCB0aGVuIHNwZWVkIGFuZCBkdXBsZXggYXJlIGF1dG9uZWdvdGlhdGVkLiAqLworCWludAkJc3BlZWQ7CQkvKiAwLCBTUEVFRF8xMCwgU1BFRURfMTAwLCBTUEVFRF8xMDAwICovCisJaW50CQlkdXBsZXg7CQkvKiBEVVBMRVhfSEFMRiBvciBEVVBMRVhfRlVMTCAqLworCisJLyogbm9uLXplcm8gdmFsdWVzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzIG92ZXJyaWRlIGRlZmF1bHRzICovCiAJdTMyCQl0eF9xdWV1ZV9zaXplOwogCXUzMgkJcnhfcXVldWVfc2l6ZTsKIAl1MzIJCXR4X3NyYW1fYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmJkLmggYi9pbmNsdWRlL2xpbnV4L25iZC5oCmluZGV4IGY5NWQ1MWYuLmE2Y2U0MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9uYmQuaApAQCAtMzgsNiArMzgsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKiB2YWx1ZXMgZm9yIGZsYWdzIGZpZWxkICovCiAjZGVmaW5lIE5CRF9SRUFEX09OTFkgMHgwMDAxCkBAIC01Nyw3ICs1OCw3IEBACiAJc3RydWN0IHJlcXVlc3QgKmFjdGl2ZV9yZXE7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgYWN0aXZlX3dxOwogCi0Jc3RydWN0IHNlbWFwaG9yZSB0eF9sb2NrOworCXN0cnVjdCBtdXRleCB0eF9sb2NrOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrOwogCWludCBibGtzaXplOwogCXU2NCBieXRlc2l6ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmNwX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvbmNwX2ZzX2kuaAppbmRleCA0MTViZTFlLi5iZGI0YzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9uY3BfZnNfaS5oCkBAIC0xOSw3ICsxOSw3IEBACiAJX19sZTMyCURvc0Rpck51bTsKIAlfX3U4CXZvbE51bWJlcjsKIAlfX2xlMzIJbndhdHRyOwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW07CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAJYXRvbWljX3QJb3BlbmVkOwogCWludAlhY2Nlc3M7CiAJaW50CWZsYWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgKaW5kZXggY2Y4NThlYi4uYjA4OWQ5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uY3BfbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogCkBAIC01MSw3ICs1Miw3IEBACiAJCQkJICAgcmVjZWl2ZSByZXBsaWVzICovCiAKIAlpbnQgbG9jazsJCS8qIFRvIHByZXZlbnQgbWlzbWF0Y2ggaW4gcHJvdG9jb2xzLiAqLwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBtdXRleCBtdXRleDsKIAogCWludCBjdXJyZW50X3NpemU7CS8qIGZvciBwYWNrZXQgcHJlcGFyYXRpb24gKi8KIAlpbnQgaGFzX3N1YmZ1bmN0aW9uOwpAQCAtOTYsNyArOTcsNyBAQAogCXN0cnVjdCB7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCB0cTsJCS8qIFNUUkVBTS9ER1JBTTogZGF0YS9lcnJvciByZWFkeSAqLwogCQlzdHJ1Y3QgbmNwX3JlcXVlc3RfcmVwbHkqIGNyZXE7CS8qIFNUUkVBTS9ER1JBTTogYXdhaXRpbmcgcmVwbHkgZnJvbSB0aGlzIHJlcXVlc3QgKi8KLQkJc3RydWN0IHNlbWFwaG9yZSBjcmVxX3NlbTsJLyogREdSQU0gb25seTogbG9jayBhY2Nlc3NlcyB0byByY3YuY3JlcSAqLworCQlzdHJ1Y3QgbXV0ZXggY3JlcV9tdXRleDsJLyogREdSQU0gb25seTogbG9jayBhY2Nlc3NlcyB0byByY3YuY3JlcSAqLwogCiAJCXVuc2lnbmVkIGludCBzdGF0ZTsJCS8qIFNUUkVBTSBvbmx5OiByZWNlaXZlciBzdGF0ZSAqLwogCQlzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggMjgxOTVhMi4uODRhNDkwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oCkBAIC0xNDMsMTIgKzE0MywxOCBAQAogCQkJCSAgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7CiAJaW50CQkoKmlvY3RsKSAgICAgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworCWludAkgCSgqY29tcGF0X2lvY3RsKSAoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAJaW50CQkoKmxpc3RlbikgICAgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZW4pOwogCWludAkJKCpzaHV0ZG93bikgIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpOwogCWludAkJKCpzZXRzb2Nrb3B0KShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOwogCWludAkJKCpnZXRzb2Nrb3B0KShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CisJaW50CQkoKmNvbXBhdF9zZXRzb2Nrb3B0KShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCisJCQkJICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworCWludAkJKCpjb21wYXRfZ2V0c29ja29wdCkoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLAorCQkJCSAgICAgIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOwogCWludAkJKCpzZW5kbXNnKSAgIChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJICAgICAgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbik7CiAJaW50CQkoKnJlY3Ztc2cpICAgKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKQEAgLTI0Nyw2ICsyNTMsOCBAQAogCSAgICAgIChmaWxlLCBzb2NrLCB3YWl0KSkgXAogU09DS0NBTExfV1JBUChuYW1lLCBpb2N0bCwgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIFwKIAkJCSB1bnNpZ25lZCBsb25nIGFyZyksIChzb2NrLCBjbWQsIGFyZykpIFwKK1NPQ0tDQUxMX1dSQVAobmFtZSwgY29tcGF0X2lvY3RsLCAoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgXAorCQkJIHVuc2lnbmVkIGxvbmcgYXJnKSwgKHNvY2ssIGNtZCwgYXJnKSkgXAogU09DS0NBTExfV1JBUChuYW1lLCBsaXN0ZW4sIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGVuKSwgKHNvY2ssIGxlbikpIFwKIFNPQ0tDQUxMX1dSQVAobmFtZSwgc2h1dGRvd24sIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpLCAoc29jaywgZmxhZ3MpKSBcCiBTT0NLQ0FMTF9XUkFQKG5hbWUsIHNldHNvY2tvcHQsIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBcCkBAIC0yNzEsNiArMjc5LDcgQEAKIAkuZ2V0bmFtZQk9IF9fbG9ja18jI25hbWUjI19nZXRuYW1lLAlcCiAJLnBvbGwJCT0gX19sb2NrXyMjbmFtZSMjX3BvbGwsCQlcCiAJLmlvY3RsCQk9IF9fbG9ja18jI25hbWUjI19pb2N0bCwJXAorCS5jb21wYXRfaW9jdGwJPSBfX2xvY2tfIyNuYW1lIyNfY29tcGF0X2lvY3RsLAlcCiAJLmxpc3RlbgkJPSBfX2xvY2tfIyNuYW1lIyNfbGlzdGVuLAlcCiAJLnNodXRkb3duCT0gX19sb2NrXyMjbmFtZSMjX3NodXRkb3duLAlcCiAJLnNldHNvY2tvcHQJPSBfX2xvY2tfIyNuYW1lIyNfc2V0c29ja29wdCwJXApAQCAtMjc5LDYgKzI4OCw3IEBACiAJLnJlY3Ztc2cJPSBfX2xvY2tfIyNuYW1lIyNfcmVjdm1zZywJXAogCS5tbWFwCQk9IF9fbG9ja18jI25hbWUjI19tbWFwLAkJXAogfTsKKwogI2VuZGlmCiAKICNkZWZpbmUgTU9EVUxFX0FMSUFTX05FVFBST1RPKHByb3RvKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA3ZmRhMDNkLi45NTBkYzU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTIzMCw3ICsyMzAsOCBAQAogCV9fTElOS19TVEFURV9TQ0hFRCwKIAlfX0xJTktfU1RBVEVfTk9DQVJSSUVSLAogCV9fTElOS19TVEFURV9SWF9TQ0hFRCwKLQlfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcKKwlfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcsCisJX19MSU5LX1NUQVRFX0RPUk1BTlQsCiB9OwogCiAKQEAgLTMzNSwxMSArMzM2LDE0IEBACiAJICovCiAKIAotCXVuc2lnbmVkIHNob3J0CQlmbGFnczsJLyogaW50ZXJmYWNlIGZsYWdzIChhIGxhIEJTRCkJKi8KKwl1bnNpZ25lZCBpbnQJCWZsYWdzOwkvKiBpbnRlcmZhY2UgZmxhZ3MgKGEgbGEgQlNEKQkqLwogCXVuc2lnbmVkIHNob3J0CQlnZmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIHByaXZfZmxhZ3M7IC8qIExpa2UgJ2ZsYWdzJyBidXQgaW52aXNpYmxlIHRvIHVzZXJzcGFjZS4gKi8KIAl1bnNpZ25lZCBzaG9ydAkJcGFkZGVkOwkvKiBIb3cgbXVjaCBwYWRkaW5nIGFkZGVkIGJ5IGFsbG9jX25ldGRldigpICovCiAKKwl1bnNpZ25lZCBjaGFyCQlvcGVyc3RhdGU7IC8qIFJGQzI4NjMgb3BlcnN0YXRlICovCisJdW5zaWduZWQgY2hhcgkJbGlua19tb2RlOyAvKiBtYXBwaW5nIHBvbGljeSB0byBvcGVyc3RhdGUgKi8KKwogCXVuc2lnbmVkCQltdHU7CS8qIGludGVyZmFjZSBNVFUgdmFsdWUJCSovCiAJdW5zaWduZWQgc2hvcnQJCXR5cGU7CS8qIGludGVyZmFjZSBoYXJkd2FyZSB0eXBlCSovCiAJdW5zaWduZWQgc2hvcnQJCWhhcmRfaGVhZGVyX2xlbjsJLyogaGFyZHdhcmUgaGRyIGxlbmd0aAkqLwpAQCAtNzA4LDEyICs3MTIsMTggQEAKIAlhdG9taWNfZGVjKCZkZXYtPnJlZmNudCk7CiB9CiAKLSNkZWZpbmUgX19kZXZfcHV0KGRldikgYXRvbWljX2RlYygmKGRldiktPnJlZmNudCkKLSNkZWZpbmUgZGV2X2hvbGQoZGV2KSBhdG9taWNfaW5jKCYoZGV2KS0+cmVmY250KQorc3RhdGljIGlubGluZSB2b2lkIGRldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJYXRvbWljX2luYygmZGV2LT5yZWZjbnQpOworfQogCiAvKiBDYXJyaWVyIGxvc3MgZGV0ZWN0aW9uLCBkaWFsIG9uIGRlbWFuZC4gVGhlIGZ1bmN0aW9ucyBuZXRpZl9jYXJyaWVyX29uCiAgKiBhbmQgX29mZiBtYXkgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsIGJ1dCBpdCBpcyBjYWxsZXIKICAqIHdobyBpcyByZXNwb25zaWJsZSBmb3Igc2VyaWFsaXphdGlvbiBvZiB0aGVzZSBjYWxscy4KKyAqCisgKiBUaGUgbmFtZSBjYXJyaWVyIGlzIGluYXBwcm9wcmlhdGUsIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgcmVhbGx5IGJlCisgKiBjYWxsZWQgbmV0aWZfbG93ZXJsYXllcl8qKCkgYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB0aGUgc3RhdGUgb2YgYW55CisgKiBraW5kIG9mIGxvd2VyIGxheWVyIG5vdCBqdXN0IGhhcmR3YXJlIG1lZGlhLgogICovCiAKIGV4dGVybiB2b2lkIGxpbmt3YXRjaF9maXJlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNzI5LDYgKzczOSwyOSBAQAogCiBleHRlcm4gdm9pZCBuZXRpZl9jYXJyaWVyX29mZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAorc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2Rvcm1hbnRfb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoX19MSU5LX1NUQVRFX0RPUk1BTlQsICZkZXYtPnN0YXRlKSkKKwkJbGlua3dhdGNoX2ZpcmVfZXZlbnQoZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2Rvcm1hbnRfb2ZmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX0xJTktfU1RBVEVfRE9STUFOVCwgJmRldi0+c3RhdGUpKQorCQlsaW5rd2F0Y2hfZmlyZV9ldmVudChkZXYpOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZXRpZl9kb3JtYW50KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHRlc3RfYml0KF9fTElOS19TVEFURV9ET1JNQU5ULCAmZGV2LT5zdGF0ZSk7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgbmV0aWZfb3Blcl91cChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CisJcmV0dXJuIChkZXYtPm9wZXJzdGF0ZSA9PSBJRl9PUEVSX1VQIHx8CisJCWRldi0+b3BlcnN0YXRlID09IElGX09QRVJfVU5LTk9XTiAvKiBiYWNrd2FyZCBjb21wYXQgKi8pOworfQorCiAvKiBIb3QtcGx1Z2dpbmcuICovCiBzdGF0aWMgaW5saW5lIGludCBuZXRpZl9kZXZpY2VfcHJlc2VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKaW5kZXggNDY4ODk2OS4uNDEyZTUyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCkBAIC04MCwxMCArODAsMTQgQEAKIAlpbnQgc2V0X29wdG1pbjsKIAlpbnQgc2V0X29wdG1heDsKIAlpbnQgKCpzZXQpKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdHZhbCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pOworCWludCAoKmNvbXBhdF9zZXQpKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdHZhbCwKKwkJCXZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKTsKIAogCWludCBnZXRfb3B0bWluOwogCWludCBnZXRfb3B0bWF4OwogCWludCAoKmdldCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0dmFsLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pOworCWludCAoKmNvbXBhdF9nZXQpKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdHZhbCwKKwkJCXZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbik7CiAKIAkvKiBOdW1iZXIgb2YgdXNlcnMgaW5zaWRlIHNldCgpIG9yIGdldCgpLiAqLwogCXVuc2lnbmVkIGludCB1c2U7CkBAIC0yNDYsNiArMjUwLDExIEBACiBpbnQgbmZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBwZiwgaW50IG9wdHZhbCwgY2hhciBfX3VzZXIgKm9wdCwKIAkJICBpbnQgKmxlbik7CiAKK2ludCBjb21wYXRfbmZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBwZiwgaW50IG9wdHZhbCwKKwkJY2hhciBfX3VzZXIgKm9wdCwgaW50IGxlbik7CitpbnQgY29tcGF0X25mX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgcGYsIGludCBvcHR2YWwsCisJCWNoYXIgX191c2VyICpvcHQsIGludCAqbGVuKTsKKwogLyogUGFja2V0IHF1ZXVpbmcgKi8KIHN0cnVjdCBuZl9xdWV1ZV9oYW5kbGVyIHsKIAlpbnQgKCpvdXRmbikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5mX2luZm8gKmluZm8sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCmluZGV4IDkzNGEyNDcuLjlmNWIxMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCkBAIC0xNjQsNiArMTY0LDcgQEAKICAJX19yZXM7CQkJCQkJCQlcCiB9KQogCitleHRlcm4gaW50IG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKHVuc2lnbmVkIGludCBncm91cCk7CiBleHRlcm4gaW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHVuc2lnbmVkIGdyb3VwLCAKIAkJCSAgaW50IGVjaG8pOwogZXh0ZXJuIGludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgcGlkLCBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCmluZGV4IGIwNGIwMzguLmE3NDk3YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKQEAgLTQ3LDYgKzQ3LDggQEAKIAlORlVMQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIAlORlVMQV9QUkVGSVgsCQkJLyogc3RyaW5nIHByZWZpeCAqLwogCU5GVUxBX1VJRCwJCQkvKiB1c2VyIGlkIG9mIHNvY2tldCAqLworCU5GVUxBX1NFUSwJCQkvKiBpbnN0YW5jZS1sb2NhbCBzZXF1ZW5jZSBudW1iZXIgKi8KKwlORlVMQV9TRVFfR0xPQkFMLAkJLyogZ2xvYmFsIHNlcXVlbmNlIG51bWJlciAqLwogCiAJX19ORlVMQV9NQVgKIH07CkBAIC03Nyw2ICs3OSw3IEBACiAJTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogdV9pbnQzMl90IGJ1ZmZlciBzaXplICovCiAJTkZVTEFfQ0ZHX1RJTUVPVVQsCQkvKiB1X2ludDMyX3QgaW4gMS8xMDAgcyAqLwogCU5GVUxBX0NGR19RVEhSRVNILAkJLyogdV9pbnQzMl90ICovCisJTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogdV9pbnQxNl90ICovCiAJX19ORlVMQV9DRkdfTUFYCiB9OwogI2RlZmluZSBORlVMQV9DRkdfTUFYIChfX05GVUxBX0NGR19NQVggLTEpCkBAIC04NSw0ICs4OCw3IEBACiAjZGVmaW5lIE5GVUxOTF9DT1BZX01FVEEJMHgwMQogI2RlZmluZSBORlVMTkxfQ09QWV9QQUNLRVQJMHgwMgogCisjZGVmaW5lIE5GVUxOTF9DRkdfRl9TRVEJMHgwMDAxCisjZGVmaW5lIE5GVUxOTF9DRkdfRl9TRVFfR0xPQkFMCTB4MDAwMgorCiAjZW5kaWYgLyogX05GTkVUTElOS19MT0dfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggNjUwMGQ0ZS4uMTM1MGU0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC00LDYgKzQsNjIgQEAKICNkZWZpbmUgWFRfRlVOQ1RJT05fTUFYTkFNRUxFTiAzMAogI2RlZmluZSBYVF9UQUJMRV9NQVhOQU1FTEVOIDMyCiAKK3N0cnVjdCB4dF9lbnRyeV9tYXRjaAoreworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCisJCQkvKiBVc2VkIGJ5IHVzZXJzcGFjZSAqLworCQkJY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CisKKwkJCXVfaW50OF90IHJldmlzaW9uOworCQl9IHVzZXI7CisJCXN0cnVjdCB7CisJCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKworCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLworCQkJc3RydWN0IHh0X21hdGNoICptYXRjaDsKKwkJfSBrZXJuZWw7CisKKwkJLyogVG90YWwgbGVuZ3RoICovCisJCXVfaW50MTZfdCBtYXRjaF9zaXplOworCX0gdTsKKworCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKK307CisKK3N0cnVjdCB4dF9lbnRyeV90YXJnZXQKK3sKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisKKwkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCisJCQljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKKworCQkJdV9pbnQ4X3QgcmV2aXNpb247CisJCX0gdXNlcjsKKwkJc3RydWN0IHsKKwkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKworCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLworCQkJc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OworCQl9IGtlcm5lbDsKKworCQkvKiBUb3RhbCBsZW5ndGggKi8KKwkJdV9pbnQxNl90IHRhcmdldF9zaXplOworCX0gdTsKKworCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKK307CisKK3N0cnVjdCB4dF9zdGFuZGFyZF90YXJnZXQKK3sKKwlzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0IHRhcmdldDsKKwlpbnQgdmVyZGljdDsKK307CisKIC8qIFRoZSBhcmd1bWVudCB0byBJUFRfU09fR0VUX1JFVklTSU9OXyouICBSZXR1cm5zIGhpZ2hlc3QgcmV2aXNpb24KICAqIGtlcm5lbCBzdXBwb3J0cywgaWYgPj0gcmV2aXNpb24uICovCiBzdHJ1Y3QgeHRfZ2V0X3JldmlzaW9uCkBAIC05Miw4ICsxNDgsNiBAQAogCiAJY29uc3QgY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CiAKLQl1X2ludDhfdCByZXZpc2lvbjsKLQogCS8qIFJldHVybiB0cnVlIG9yIGZhbHNlOiByZXR1cm4gRkFMU0UgYW5kIHNldCAqaG90ZHJvcCA9IDEgdG8KICAgICAgICAgICAgZm9yY2UgaW1tZWRpYXRlIHBhY2tldCBkcm9wLiAqLwogCS8qIEFyZ3VtZW50cyBjaGFuZ2VkIHNpbmNlIDIuNi45LCBhcyB0aGlzIG11c3Qgbm93IGhhbmRsZQpAQCAtMTAyLDYgKzE1Niw3IEBACiAJaW50ICgqbWF0Y2gpKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkJICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAJCSAgICAgaW50IG9mZnNldCwKIAkJICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTExMSwxNSArMTY2LDI1IEBACiAJLyogU2hvdWxkIHJldHVybiB0cnVlIG9yIGZhbHNlLiAqLwogCWludCAoKmNoZWNrZW50cnkpKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkJCSAgY29uc3Qgdm9pZCAqaXAsCisJCQkgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJCQkgIHZvaWQgKm1hdGNoaW5mbywKIAkJCSAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCiAJCQkgIHVuc2lnbmVkIGludCBob29rX21hc2spOwogCiAJLyogQ2FsbGVkIHdoZW4gZW50cnkgb2YgdGhpcyB0eXBlIGRlbGV0ZWQuICovCi0Jdm9pZCAoKmRlc3Ryb3kpKHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUpOworCXZvaWQgKCpkZXN0cm95KShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8sCisJCQl1bnNpZ25lZCBpbnQgbWF0Y2hpbmZvc2l6ZSk7CiAKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOworCisJY2hhciAqdGFibGU7CisJdW5zaWduZWQgaW50IG1hdGNoc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaG9va3M7CisJdW5zaWduZWQgc2hvcnQgcHJvdG87CisKKwl1bnNpZ25lZCBzaG9ydCBmYW1pbHk7CisJdV9pbnQ4X3QgcmV2aXNpb247CiB9OwogCiAvKiBSZWdpc3RyYXRpb24gaG9va3MgZm9yIHRhcmdldHMuICovCkBAIC0xMjksOCArMTk0LDYgQEAKIAogCWNvbnN0IGNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JdV9pbnQ4X3QgcmV2aXNpb247Ci0KIAkvKiBSZXR1cm5zIHZlcmRpY3QuIEFyZ3VtZW50IG9yZGVyIGNoYW5nZWQgc2luY2UgMi42LjksIGFzIHRoaXMKIAkgICBtdXN0IG5vdyBoYW5kbGUgbm9uLWxpbmVhciBza2JzLCB1c2luZyBza2JfY29weV9iaXRzIGFuZAogCSAgIHNrYl9pcF9tYWtlX3dyaXRhYmxlLiAqLwpAQCAtMTM4LDYgKzIwMSw3IEBACiAJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkJICAgICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAogCQkJICAgICAgIHZvaWQgKnVzZXJkYXRhKTsKIApAQCAtMTQ3LDE1ICsyMTEsMjUgQEAKIAkvKiBTaG91bGQgcmV0dXJuIHRydWUgb3IgZmFsc2UuICovCiAJaW50ICgqY2hlY2tlbnRyeSkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkJICBjb25zdCB2b2lkICplbnRyeSwKKwkJCSAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkJICB2b2lkICp0YXJnaW5mbywKIAkJCSAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKIAkJCSAgdW5zaWduZWQgaW50IGhvb2tfbWFzayk7CiAKIAkvKiBDYWxsZWQgd2hlbiBlbnRyeSBvZiB0aGlzIHR5cGUgZGVsZXRlZC4gKi8KLQl2b2lkICgqZGVzdHJveSkodm9pZCAqdGFyZ2luZm8sIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUpOworCXZvaWQgKCpkZXN0cm95KShjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsIHZvaWQgKnRhcmdpbmZvLAorCQkJdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSk7CiAKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOworCisJY2hhciAqdGFibGU7CisJdW5zaWduZWQgaW50IHRhcmdldHNpemU7CisJdW5zaWduZWQgaW50IGhvb2tzOworCXVuc2lnbmVkIHNob3J0IHByb3RvOworCisJdW5zaWduZWQgc2hvcnQgZmFtaWx5OworCXVfaW50OF90IHJldmlzaW9uOwogfTsKIAogLyogRnVybml0dXJlIHNob3BwaW5nLi4uICovCkBAIC0yMDIsMTAgKzI3NiwxNyBAQAogCWNoYXIgKmVudHJpZXNbTlJfQ1BVU107CiB9OwogCi1leHRlcm4gaW50IHh0X3JlZ2lzdGVyX3RhcmdldChpbnQgYWYsIHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCk7Ci1leHRlcm4gdm9pZCB4dF91bnJlZ2lzdGVyX3RhcmdldChpbnQgYWYsIHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCk7Ci1leHRlcm4gaW50IHh0X3JlZ2lzdGVyX21hdGNoKGludCBhZiwgc3RydWN0IHh0X21hdGNoICp0YXJnZXQpOwotZXh0ZXJuIHZvaWQgeHRfdW5yZWdpc3Rlcl9tYXRjaChpbnQgYWYsIHN0cnVjdCB4dF9tYXRjaCAqdGFyZ2V0KTsKK2V4dGVybiBpbnQgeHRfcmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gdm9pZCB4dF91bnJlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQpOworZXh0ZXJuIGludCB4dF9yZWdpc3Rlcl9tYXRjaChzdHJ1Y3QgeHRfbWF0Y2ggKnRhcmdldCk7CitleHRlcm4gdm9pZCB4dF91bnJlZ2lzdGVyX21hdGNoKHN0cnVjdCB4dF9tYXRjaCAqdGFyZ2V0KTsKKworZXh0ZXJuIGludCB4dF9jaGVja19tYXRjaChjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCisJCQkgIHVuc2lnbmVkIGludCBzaXplLCBjb25zdCBjaGFyICp0YWJsZSwgdW5zaWduZWQgaW50IGhvb2ssCisJCQkgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBpbnQgaW52X3Byb3RvKTsKK2V4dGVybiBpbnQgeHRfY2hlY2tfdGFyZ2V0KGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdW5zaWduZWQgc2hvcnQgZmFtaWx5LAorCQkJICAgdW5zaWduZWQgaW50IHNpemUsIGNvbnN0IGNoYXIgKnRhYmxlLCB1bnNpZ25lZCBpbnQgaG9vaywKKwkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBpbnQgaW52X3Byb3RvKTsKIAogZXh0ZXJuIGludCB4dF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJICAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqYm9vdHN0cmFwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODEzMmVjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBfWFRfUE9MSUNZX0gKKyNkZWZpbmUgX1hUX1BPTElDWV9ICisKKyNkZWZpbmUgWFRfUE9MSUNZX01BWF9FTEVNCTQKKworZW51bSB4dF9wb2xpY3lfZmxhZ3MKK3sKKwlYVF9QT0xJQ1lfTUFUQ0hfSU4JPSAweDEsCisJWFRfUE9MSUNZX01BVENIX09VVAk9IDB4MiwKKwlYVF9QT0xJQ1lfTUFUQ0hfTk9ORQk9IDB4NCwKKwlYVF9QT0xJQ1lfTUFUQ0hfU1RSSUNUCT0gMHg4LAorfTsKKworZW51bSB4dF9wb2xpY3lfbW9kZXMKK3sKKwlYVF9QT0xJQ1lfTU9ERV9UUkFOU1BPUlQsCisJWFRfUE9MSUNZX01PREVfVFVOTkVMCit9OworCitzdHJ1Y3QgeHRfcG9saWN5X3NwZWMKK3sKKwl1X2ludDhfdAlzYWRkcjoxLAorCQkJZGFkZHI6MSwKKwkJCXByb3RvOjEsCisJCQltb2RlOjEsCisJCQlzcGk6MSwKKwkJCXJlcWlkOjE7Cit9OworCit1bmlvbiB4dF9wb2xpY3lfYWRkcgoreworCXN0cnVjdCBpbl9hZGRyCWE0OworCXN0cnVjdCBpbjZfYWRkcglhNjsKK307CisKK3N0cnVjdCB4dF9wb2xpY3lfZWxlbQoreworCXVuaW9uIHh0X3BvbGljeV9hZGRyCXNhZGRyOworCXVuaW9uIHh0X3BvbGljeV9hZGRyCXNtYXNrOworCXVuaW9uIHh0X3BvbGljeV9hZGRyCWRhZGRyOworCXVuaW9uIHh0X3BvbGljeV9hZGRyCWRtYXNrOworCXVfaW50MzJfdAkJc3BpOworCXVfaW50MzJfdAkJcmVxaWQ7CisJdV9pbnQ4X3QJCXByb3RvOworCXVfaW50OF90CQltb2RlOworCisJc3RydWN0IHh0X3BvbGljeV9zcGVjCW1hdGNoOworCXN0cnVjdCB4dF9wb2xpY3lfc3BlYwlpbnZlcnQ7Cit9OworCitzdHJ1Y3QgeHRfcG9saWN5X2luZm8KK3sKKwlzdHJ1Y3QgeHRfcG9saWN5X2VsZW0gcG9sW1hUX1BPTElDWV9NQVhfRUxFTV07CisJdV9pbnQxNl90IGZsYWdzOworCXVfaW50MTZfdCBsZW47Cit9OworCisjZW5kaWYgLyogX1hUX1BPTElDWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaAppbmRleCBmZDIxNzk2Li42MmNjMjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKQEAgLTY1LDM1ICs2NSw4IEBACiAJdV9pbnQxNl90IGludmZsYWdzOwogfTsKIAotc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0Ci17Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdV9pbnQxNl90IHRhcmdldF9zaXplOwotCi0JCQkvKiBVc2VkIGJ5IHVzZXJzcGFjZSAqLwotCQkJY2hhciBuYW1lW0FSUFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKLQkJCXVfaW50OF90IHJldmlzaW9uOwotCQl9IHVzZXI7Ci0JCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7Ci0KLQkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KLQkJCXN0cnVjdCBhcnB0X3RhcmdldCAqdGFyZ2V0OwotCQl9IGtlcm5lbDsKLQotCQkvKiBUb3RhbCBsZW5ndGggKi8KLQkJdV9pbnQxNl90IHRhcmdldF9zaXplOwotCX0gdTsKLQotCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKLX07Ci0KLXN0cnVjdCBhcnB0X3N0YW5kYXJkX3RhcmdldAotewotCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCB0YXJnZXQ7Ci0JaW50IHZlcmRpY3Q7Ci19OworI2RlZmluZSBhcnB0X2VudHJ5X3RhcmdldCB4dF9lbnRyeV90YXJnZXQKKyNkZWZpbmUgYXJwdF9zdGFuZGFyZF90YXJnZXQgeHRfc3RhbmRhcmRfdGFyZ2V0CiAKIC8qIFZhbHVlcyBmb3IgImZsYWciIGZpZWxkIGluIHN0cnVjdCBhcnB0X2lwIChnZW5lcmFsIGFycCBzdHJ1Y3R1cmUpLgogICogTm8gZmxhZ3MgZGVmaW5lZCB5ZXQuCkBAIC0yNjMsOCArMjM2LDEwIEBACiAgKi8KICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgYXJwdF9yZWdpc3Rlcl90YXJnZXQodGd0KSB4dF9yZWdpc3Rlcl90YXJnZXQoTkZfQVJQLCB0Z3QpCi0jZGVmaW5lIGFycHRfdW5yZWdpc3Rlcl90YXJnZXQodGd0KSB4dF91bnJlZ2lzdGVyX3RhcmdldChORl9BUlAsIHRndCkKKyNkZWZpbmUgYXJwdF9yZWdpc3Rlcl90YXJnZXQodGd0KSAJXAorKHsJKHRndCktPmZhbWlseSA9IE5GX0FSUDsJCVwKKyAJeHRfcmVnaXN0ZXJfdGFyZ2V0KHRndCk7IH0pCisjZGVmaW5lIGFycHRfdW5yZWdpc3Rlcl90YXJnZXQodGd0KSB4dF91bnJlZ2lzdGVyX3RhcmdldCh0Z3QpCiAKIGV4dGVybiBpbnQgYXJwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgYXJwdF90YWJsZSAqdGFibGUsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGFycHRfcmVwbGFjZSAqcmVwbCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCmluZGV4IGRlNGQzOTcuLmE3NWI4NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCkBAIC00NywyMiArNDcsNiBAQAogI2RlZmluZSBCUk5GX0JSSURHRUQJCQkweDA4CiAjZGVmaW5lIEJSTkZfTkZfQlJJREdFX1BSRVJPVVRJTkcJMHgxMAogCi1zdGF0aWMgaW5saW5lCi1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV9hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqKm5mX2JyaWRnZSA9ICYoc2tiLT5uZl9icmlkZ2UpOwotCi0JaWYgKCgqbmZfYnJpZGdlID0ga21hbGxvYyhzaXplb2YoKipuZl9icmlkZ2UpLCBHRlBfQVRPTUlDKSkgIT0gTlVMTCkgewotCQlhdG9taWNfc2V0KCYoKm5mX2JyaWRnZSktPnVzZSwgMSk7Ci0JCSgqbmZfYnJpZGdlKS0+bWFzayA9IDA7Ci0JCSgqbmZfYnJpZGdlKS0+cGh5c2luZGV2ID0gKCpuZl9icmlkZ2UpLT5waHlzb3V0ZGV2ID0gTlVMTDsKLSNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKLQkJKCpuZl9icmlkZ2UpLT5uZXRvdXRkZXYgPSBOVUxMOwotI2VuZGlmCi0JfQotCi0JcmV0dXJuICpuZl9icmlkZ2U7Ci19CiAKIC8qIE9ubHkgdXNlZCBpbiBicl9mb3J3YXJkLmMgKi8KIHN0YXRpYyBpbmxpbmUKQEAgLTc3LDE3ICs2MSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lCi12b2lkIG5mX2JyaWRnZV9zYXZlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotICAgICAgICBpbnQgaGVhZGVyX3NpemUgPSAxNjsKLQotCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKQotCQloZWFkZXJfc2l6ZSA9IDE4OwotCi0JbWVtY3B5KHNrYi0+bmZfYnJpZGdlLT5kYXRhLCBza2ItPmRhdGEgLSBoZWFkZXJfc2l6ZSwgaGVhZGVyX3NpemUpOwotfQotCiAvKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgSVAgZnJhZ21lbnRpbmcgY29kZSBhbmQgaXQgZW5zdXJlcyB0aGVyZSBpcwogICogZW5vdWdoIHJvb20gZm9yIHRoZSBlbmNhcHN1bGF0aW5nIGhlYWRlciAoaWYgdGhlcmUgaXMgb25lKS4gKi8KIHN0YXRpYyBpbmxpbmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbG9nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2xvZy5oCmluZGV4IDM1OGZiYzguLjk2ZTIzMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbG9nLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9sb2cuaApAQCAtMyw2ICszLDcgQEAKIAogI2RlZmluZSBFQlRfTE9HX0lQIDB4MDEgLyogaWYgdGhlIGZyYW1lIGlzIG1hZGUgYnkgaXAsIGxvZyB0aGUgaXAgaW5mb3JtYXRpb24gKi8KICNkZWZpbmUgRUJUX0xPR19BUlAgMHgwMgorI2RlZmluZSBFQlRfTE9HX05GTE9HIDB4MDQKICNkZWZpbmUgRUJUX0xPR19NQVNLIChFQlRfTE9HX0lQIHwgRUJUX0xPR19BUlApCiAjZGVmaW5lIEVCVF9MT0dfUFJFRklYX1NJWkUgMzAKICNkZWZpbmUgRUJUX0xPR19XQVRDSEVSICJsb2ciCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaAppbmRleCAyMTU3NjVmLi5mMzJkNzVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKQEAgLTI5LDYgKzI5LDcgQEAKIH07CiAKIC8qIEFkZCBwcm90b2NvbCBoZWxwZXIgaW5jbHVkZSBmaWxlIGhlcmUgKi8KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcHRwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2FtYW5kYS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaD4KQEAgLTM3LDYgKzM4LDcgQEAKIC8qIHBlciBjb25udHJhY2s6IGFwcGxpY2F0aW9uIGhlbHBlciBwcml2YXRlIGRhdGEgKi8KIHVuaW9uIGlwX2Nvbm50cmFja19oZWxwIHsKIAkvKiBpbnNlcnQgY29ubnRyYWNrIGhlbHBlciBwcml2YXRlIGRhdGEgKG1hc3RlcikgaGVyZSAqLworCXN0cnVjdCBpcF9jdF9oMzIzX21hc3RlciBjdF9oMzIzX2luZm87CiAJc3RydWN0IGlwX2N0X3BwdHBfbWFzdGVyIGN0X3BwdHBfaW5mbzsKIAlzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciBjdF9mdHBfaW5mbzsKIAlzdHJ1Y3QgaXBfY3RfaXJjX21hc3RlciBjdF9pcmNfaW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTg3Y2VhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX0lQX0NPTk5UUkFDS19IMzIzX0gKKyNkZWZpbmUgX0lQX0NPTk5UUkFDS19IMzIzX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBSQVNfUE9SVCAxNzE5CisjZGVmaW5lIFE5MzFfUE9SVCAxNzIwCisjZGVmaW5lIEgzMjNfUlRQX0NIQU5ORUxfTUFYIDQJLyogQXVkaW8sIHZpZGVvLCBGQVggYW5kIG90aGVyICovCisKKy8qIFRoaXMgc3RydWN0dXJlIGV4aXN0cyBvbmx5IG9uY2UgcGVyIG1hc3RlciAqLworc3RydWN0IGlwX2N0X2gzMjNfbWFzdGVyIHsKKworCS8qIE9yaWdpbmFsIGFuZCBOQVRlZCBRLjkzMSBvciBILjI0NSBzaWduYWwgcG9ydHMgKi8KKwl1X2ludDE2X3Qgc2lnX3BvcnRbSVBfQ1RfRElSX01BWF07CisKKwkvKiBPcmlnaW5hbCBhbmQgTkFUZWQgUlRQIHBvcnRzICovCisJdV9pbnQxNl90IHJ0cF9wb3J0W0gzMjNfUlRQX0NIQU5ORUxfTUFYXVtJUF9DVF9ESVJfTUFYXTsKKworCXVuaW9uIHsKKwkJLyogUkFTIGNvbm5lY3Rpb24gdGltZW91dCAqLworCQl1X2ludDMyX3QgdGltZW91dDsKKworCQkvKiBOZXh0IFRQS1QgbGVuZ3RoIChmb3Igc2VwYXJhdGUgVFBLVCBoZWFkZXIgYW5kIGRhdGEpICovCisJCXVfaW50MTZfdCB0cGt0X2xlbltJUF9DVF9ESVJfTUFYXTsKKwl9OworfTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0LmgKaW5kZXggNDFhMTA3ZC4uZTlmNWVkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCkBAIC0yMyw3ICsyMyw3IEBACiAJICogbW9kaWZpY2F0aW9uIChpZiBhbnkpICovCiAJdV9pbnQzMl90IGNvcnJlY3Rpb25fcG9zOwogCS8qIHNlcXVlbmNlIG51bWJlciBvZmZzZXQgYmVmb3JlIGFuZCBhZnRlciBsYXN0IG1vZGlmaWNhdGlvbiAqLwotCWludDMyX3Qgb2Zmc2V0X2JlZm9yZSwgb2Zmc2V0X2FmdGVyOworCWludDE2X3Qgb2Zmc2V0X2JlZm9yZSwgb2Zmc2V0X2FmdGVyOwogfTsKIAogLyogU2luZ2xlIHJhbmdlIHNwZWNpZmljYXRpb24uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAppbmRleCA3NmJhMjRiLi5kNWI4YzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKQEAgLTUyLDYxICs1Miw5IEBACiAJdV9pbnQ4X3QgaW52ZmxhZ3M7CiB9OwogCi1zdHJ1Y3QgaXB0X2VudHJ5X21hdGNoCi17Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdV9pbnQxNl90IG1hdGNoX3NpemU7Ci0KLQkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCi0JCQljaGFyIG5hbWVbSVBUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07Ci0KLQkJCXVfaW50OF90IHJldmlzaW9uOwotCQl9IHVzZXI7Ci0JCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKLQotCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLwotCQkJc3RydWN0IGlwdF9tYXRjaCAqbWF0Y2g7Ci0JCX0ga2VybmVsOwotCi0JCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKLQl9IHU7Ci0KLQl1bnNpZ25lZCBjaGFyIGRhdGFbMF07Ci19OwotCi1zdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldAotewotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKLQotCQkJLyogVXNlZCBieSB1c2Vyc3BhY2UgKi8KLQkJCWNoYXIgbmFtZVtJUFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKLQotCQkJdV9pbnQ4X3QgcmV2aXNpb247Ci0JCX0gdXNlcjsKLQkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKLQotCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLwotCQkJc3RydWN0IGlwdF90YXJnZXQgKnRhcmdldDsKLQkJfSBrZXJuZWw7Ci0KLQkJLyogVG90YWwgbGVuZ3RoICovCi0JCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKLQl9IHU7Ci0KLQl1bnNpZ25lZCBjaGFyIGRhdGFbMF07Ci19OwotCi1zdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldAotewotCXN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0IHRhcmdldDsKLQlpbnQgdmVyZGljdDsKLX07CisjZGVmaW5lIGlwdF9lbnRyeV9tYXRjaCB4dF9lbnRyeV9tYXRjaAorI2RlZmluZSBpcHRfZW50cnlfdGFyZ2V0IHh0X2VudHJ5X3RhcmdldAorI2RlZmluZSBpcHRfc3RhbmRhcmRfdGFyZ2V0IHh0X3N0YW5kYXJkX3RhcmdldAogCiAjZGVmaW5lIGlwdF9jb3VudGVycyB4dF9jb3VudGVycwogCkBAIC0zMjEsMTEgKzI2OSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIGV4dGVybiB2b2lkIGlwdF9pbml0KHZvaWQpIF9faW5pdDsKIAotI2RlZmluZSBpcHRfcmVnaXN0ZXJfdGFyZ2V0KHRndCkgeHRfcmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQsIHRndCkKLSNkZWZpbmUgaXB0X3VucmVnaXN0ZXJfdGFyZ2V0KHRndCkgeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgdGd0KQorI2RlZmluZSBpcHRfcmVnaXN0ZXJfdGFyZ2V0KHRndCkgCVwKKyh7CSh0Z3QpLT5mYW1pbHkgPSBBRl9JTkVUOwlcCisgCXh0X3JlZ2lzdGVyX3RhcmdldCh0Z3QpOyB9KQorI2RlZmluZSBpcHRfdW5yZWdpc3Rlcl90YXJnZXQodGd0KSB4dF91bnJlZ2lzdGVyX3RhcmdldCh0Z3QpCiAKLSNkZWZpbmUgaXB0X3JlZ2lzdGVyX21hdGNoKG10Y2gpIHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsIG10Y2gpCi0jZGVmaW5lIGlwdF91bnJlZ2lzdGVyX21hdGNoKG10Y2gpIHh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgbXRjaCkKKyNkZWZpbmUgaXB0X3JlZ2lzdGVyX21hdGNoKG10Y2gpIAlcCisoewkobXRjaCktPmZhbWlseSA9IEFGX0lORVQ7CVwKKwl4dF9yZWdpc3Rlcl9tYXRjaChtdGNoKTsgfSkKKyNkZWZpbmUgaXB0X3VucmVnaXN0ZXJfbWF0Y2gobXRjaCkgeHRfdW5yZWdpc3Rlcl9tYXRjaChtdGNoKQogCiAvLyNkZWZpbmUgaXB0X3JlZ2lzdGVyX3RhYmxlKHRibCwgcmVwbCkgeHRfcmVnaXN0ZXJfdGFibGUoQUZfSU5FVCwgdGJsLCByZXBsKQogLy8jZGVmaW5lIGlwdF91bnJlZ2lzdGVyX3RhYmxlKHRibCkgeHRfdW5yZWdpc3Rlcl90YWJsZShBRl9JTkVULCB0YmwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCmluZGV4IDIyZDE2MTcuLjg5MmY5YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCkBAIC02LDcgKzYsOCBAQAogI2RlZmluZSBJUFRfTE9HX1RDUE9QVAkJMHgwMgkvKiBMb2cgVENQIG9wdGlvbnMgKi8KICNkZWZpbmUgSVBUX0xPR19JUE9QVAkJMHgwNAkvKiBMb2cgSVAgb3B0aW9ucyAqLwogI2RlZmluZSBJUFRfTE9HX1VJRAkJMHgwOAkvKiBMb2cgVUlEIG93bmluZyBsb2NhbCBzb2NrZXQgKi8KLSNkZWZpbmUgSVBUX0xPR19NQVNLCQkweDBmCisjZGVmaW5lIElQVF9MT0dfTkZMT0cJCTB4MTAJLyogTG9nIHVzaW5nIG5mX2xvZyBiYWNrZW5kICovCisjZGVmaW5lIElQVF9MT0dfTUFTSwkJMHgxZgogCiBzdHJ1Y3QgaXB0X2xvZ19pbmZvIHsKIAl1bnNpZ25lZCBjaGFyIGxldmVsOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wb2xpY3kuaAppbmRleCBhM2Y2ZWZmLi5iOTQ3OGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wb2xpY3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wb2xpY3kuaApAQCAtMSw1OCArMSwyMSBAQAogI2lmbmRlZiBfSVBUX1BPTElDWV9ICiAjZGVmaW5lIF9JUFRfUE9MSUNZX0gKIAotI2RlZmluZSBJUFRfUE9MSUNZX01BWF9FTEVNCTQKKyNkZWZpbmUgSVBUX1BPTElDWV9NQVhfRUxFTQkJWFRfUE9MSUNZX01BWF9FTEVNCiAKLWVudW0gaXB0X3BvbGljeV9mbGFncwotewotCUlQVF9QT0xJQ1lfTUFUQ0hfSU4JPSAweDEsCi0JSVBUX1BPTElDWV9NQVRDSF9PVVQJPSAweDIsCi0JSVBUX1BPTElDWV9NQVRDSF9OT05FCT0gMHg0LAotCUlQVF9QT0xJQ1lfTUFUQ0hfU1RSSUNUCT0gMHg4LAotfTsKKy8qIGlwdF9wb2xpY3lfZmxhZ3MgKi8KKyNkZWZpbmUgSVBUX1BPTElDWV9NQVRDSF9JTgkJWFRfUE9MSUNZX01BVENIX0lOCisjZGVmaW5lIElQVF9QT0xJQ1lfTUFUQ0hfT1VUCQlYVF9QT0xJQ1lfTUFUQ0hfT1VUCisjZGVmaW5lIElQVF9QT0xJQ1lfTUFUQ0hfTk9ORQkJWFRfUE9MSUNZX01BVENIX05PTkUKKyNkZWZpbmUgSVBUX1BPTElDWV9NQVRDSF9TVFJJQ1QJCVhUX1BPTElDWV9NQVRDSF9TVFJJQ1QKIAotZW51bSBpcHRfcG9saWN5X21vZGVzCi17Ci0JSVBUX1BPTElDWV9NT0RFX1RSQU5TUE9SVCwKLQlJUFRfUE9MSUNZX01PREVfVFVOTkVMCi19OworLyogaXB0X3BvbGljeV9tb2RlcyAqLworI2RlZmluZSBJUFRfUE9MSUNZX01PREVfVFJBTlNQT1JUCVhUX1BPTElDWV9NT0RFX1RSQU5TUE9SVAorI2RlZmluZSBJUFRfUE9MSUNZX01PREVfVFVOTkVMCQlYVF9QT0xJQ1lfTU9ERV9UVU5ORUwKIAotc3RydWN0IGlwdF9wb2xpY3lfc3BlYwotewotCXVfaW50OF90CXNhZGRyOjEsCi0JCQlkYWRkcjoxLAotCQkJcHJvdG86MSwKLQkJCW1vZGU6MSwKLQkJCXNwaToxLAotCQkJcmVxaWQ6MTsKLX07Ci0KLXVuaW9uIGlwdF9wb2xpY3lfYWRkcgotewotCXN0cnVjdCBpbl9hZGRyCWE0OwotCXN0cnVjdCBpbjZfYWRkcglhNjsKLX07Ci0KLXN0cnVjdCBpcHRfcG9saWN5X2VsZW0KLXsKLQl1bmlvbiBpcHRfcG9saWN5X2FkZHIJc2FkZHI7Ci0JdW5pb24gaXB0X3BvbGljeV9hZGRyCXNtYXNrOwotCXVuaW9uIGlwdF9wb2xpY3lfYWRkcglkYWRkcjsKLQl1bmlvbiBpcHRfcG9saWN5X2FkZHIJZG1hc2s7Ci0JdV9pbnQzMl90CQlzcGk7Ci0JdV9pbnQzMl90CQlyZXFpZDsKLQl1X2ludDhfdAkJcHJvdG87Ci0JdV9pbnQ4X3QJCW1vZGU7Ci0KLQlzdHJ1Y3QgaXB0X3BvbGljeV9zcGVjCW1hdGNoOwotCXN0cnVjdCBpcHRfcG9saWN5X3NwZWMJaW52ZXJ0OwotfTsKLQotc3RydWN0IGlwdF9wb2xpY3lfaW5mbwotewotCXN0cnVjdCBpcHRfcG9saWN5X2VsZW0gcG9sW0lQVF9QT0xJQ1lfTUFYX0VMRU1dOwotCXVfaW50MTZfdCBmbGFnczsKLQl1X2ludDE2X3QgbGVuOwotfTsKKyNkZWZpbmUgaXB0X3BvbGljeV9zcGVjCQkJeHRfcG9saWN5X3NwZWMKKyNkZWZpbmUgaXB0X3BvbGljeV9hZGRyCQkJeHRfcG9saWN5X2FkZHIKKyNkZWZpbmUgaXB0X3BvbGljeV9lbGVtCQkJeHRfcG9saWN5X2VsZW0KKyNkZWZpbmUgaXB0X3BvbGljeV9pbmZvCQkJeHRfcG9saWN5X2luZm8KIAogI2VuZGlmIC8qIF9JUFRfUE9MSUNZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKaW5kZXggZjI0OWI1Ny4uZDBkNWQxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKQEAgLTU2LDYwICs1Niw5IEBACiAJdV9pbnQ4X3QgaW52ZmxhZ3M7CiB9OwogCi0vKiBGSVhNRTogSWYgYWxpZ25tZW50IGluIGtlcm5lbCBkaWZmZXJlbnQgZnJvbSB1c2Vyc3BhY2U/IC0tUlIgKi8KLXN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoCi17Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdV9pbnQxNl90IG1hdGNoX3NpemU7Ci0KLQkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCi0JCQljaGFyIG5hbWVbSVA2VF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwotCQkJdV9pbnQ4X3QgcmV2aXNpb247Ci0JCX0gdXNlcjsKLQkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCBtYXRjaF9zaXplOwotCi0JCQkvKiBVc2VkIGluc2lkZSB0aGUga2VybmVsICovCi0JCQlzdHJ1Y3QgaXA2dF9tYXRjaCAqbWF0Y2g7Ci0JCX0ga2VybmVsOwotCi0JCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKLQl9IHU7Ci0KLQl1bnNpZ25lZCBjaGFyIGRhdGFbMF07Ci19OwotCi1zdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQKLXsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7Ci0KLQkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCi0JCQljaGFyIG5hbWVbSVA2VF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwotCQkJdV9pbnQ4X3QgcmV2aXNpb247Ci0JCX0gdXNlcjsKLQkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKLQotCQkJLyogVXNlZCBpbnNpZGUgdGhlIGtlcm5lbCAqLwotCQkJc3RydWN0IGlwNnRfdGFyZ2V0ICp0YXJnZXQ7Ci0JCX0ga2VybmVsOwotCi0JCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7Ci0JfSB1OwotCi0JdW5zaWduZWQgY2hhciBkYXRhWzBdOwotfTsKLQotc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0Ci17Ci0Jc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0IHRhcmdldDsKLQlpbnQgdmVyZGljdDsKLX07CisjZGVmaW5lIGlwNnRfZW50cnlfbWF0Y2ggeHRfZW50cnlfbWF0Y2gKKyNkZWZpbmUgaXA2dF9lbnRyeV90YXJnZXQgeHRfZW50cnlfdGFyZ2V0CisjZGVmaW5lIGlwNnRfc3RhbmRhcmRfdGFyZ2V0IHh0X3N0YW5kYXJkX3RhcmdldAogCiAjZGVmaW5lIGlwNnRfY291bnRlcnMJeHRfY291bnRlcnMKIApAQCAtMzM0LDExICsyODMsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiBleHRlcm4gdm9pZCBpcDZ0X2luaXQodm9pZCkgX19pbml0OwogCi0jZGVmaW5lIGlwNnRfcmVnaXN0ZXJfdGFyZ2V0KHRndCkgeHRfcmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQ2LCB0Z3QpCi0jZGVmaW5lIGlwNnRfdW5yZWdpc3Rlcl90YXJnZXQodGd0KSB4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVUNiwgdGd0KQorI2RlZmluZSBpcDZ0X3JlZ2lzdGVyX3RhcmdldCh0Z3QpIAkJXAorKHsJKHRndCktPmZhbWlseSA9IEFGX0lORVQ2OwkJXAorIAl4dF9yZWdpc3Rlcl90YXJnZXQodGd0KTsgfSkKKyNkZWZpbmUgaXA2dF91bnJlZ2lzdGVyX3RhcmdldCh0Z3QpIHh0X3VucmVnaXN0ZXJfdGFyZ2V0KHRndCkKIAotI2RlZmluZSBpcDZ0X3JlZ2lzdGVyX21hdGNoKG1hdGNoKSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgbWF0Y2gpCi0jZGVmaW5lIGlwNnRfdW5yZWdpc3Rlcl9tYXRjaChtYXRjaCkgeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgbWF0Y2gpCisjZGVmaW5lIGlwNnRfcmVnaXN0ZXJfbWF0Y2gobWF0Y2gpCQlcCisoewkobWF0Y2gpLT5mYW1pbHkgPSBBRl9JTkVUNjsJCVwKKwl4dF9yZWdpc3Rlcl9tYXRjaChtYXRjaCk7IH0pCisjZGVmaW5lIGlwNnRfdW5yZWdpc3Rlcl9tYXRjaChtYXRjaCkgeHRfdW5yZWdpc3Rlcl9tYXRjaChtYXRjaCkKIAogZXh0ZXJuIGludCBpcDZ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBpcDZ0X3RhYmxlICp0YWJsZSwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaAppbmRleCA5MDA4ZmY1Li4wNjBjMWExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTE9HLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCkBAIC02LDcgKzYsOCBAQAogI2RlZmluZSBJUDZUX0xPR19UQ1BPUFQJCTB4MDIJLyogTG9nIFRDUCBvcHRpb25zICovCiAjZGVmaW5lIElQNlRfTE9HX0lQT1BUCQkweDA0CS8qIExvZyBJUCBvcHRpb25zICovCiAjZGVmaW5lIElQNlRfTE9HX1VJRAkJMHgwOAkvKiBMb2cgVUlEIG93bmluZyBsb2NhbCBzb2NrZXQgKi8KLSNkZWZpbmUgSVA2VF9MT0dfTUFTSwkJMHgwZgorI2RlZmluZSBJUDZUX0xPR19ORkxPRwkJMHgxMAkvKiBMb2cgdXNpbmcgbmZfbG9nIGJhY2tlbmQgKi8KKyNkZWZpbmUgSVA2VF9MT0dfTUFTSwkJMHgxZgogCiBzdHJ1Y3QgaXA2dF9sb2dfaW5mbyB7CiAJdW5zaWduZWQgY2hhciBsZXZlbDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9wb2xpY3kuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9wb2xpY3kuaAppbmRleCA2NzFiZDgxLi42YmFiMzE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcG9saWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3BvbGljeS5oCkBAIC0xLDU4ICsxLDIxIEBACiAjaWZuZGVmIF9JUDZUX1BPTElDWV9ICiAjZGVmaW5lIF9JUDZUX1BPTElDWV9ICiAKLSNkZWZpbmUgSVA2VF9QT0xJQ1lfTUFYX0VMRU0JNAorI2RlZmluZSBJUDZUX1BPTElDWV9NQVhfRUxFTQkJWFRfUE9MSUNZX01BWF9FTEVNCiAKLWVudW0gaXA2dF9wb2xpY3lfZmxhZ3MKLXsKLQlJUDZUX1BPTElDWV9NQVRDSF9JTgkJPSAweDEsCi0JSVA2VF9QT0xJQ1lfTUFUQ0hfT1VUCQk9IDB4MiwKLQlJUDZUX1BPTElDWV9NQVRDSF9OT05FCQk9IDB4NCwKLQlJUDZUX1BPTElDWV9NQVRDSF9TVFJJQ1QJPSAweDgsCi19OworLyogaXA2dF9wb2xpY3lfZmxhZ3MgKi8KKyNkZWZpbmUgSVA2VF9QT0xJQ1lfTUFUQ0hfSU4JCVhUX1BPTElDWV9NQVRDSF9JTgorI2RlZmluZSBJUDZUX1BPTElDWV9NQVRDSF9PVVQJCVhUX1BPTElDWV9NQVRDSF9PVVQKKyNkZWZpbmUgSVA2VF9QT0xJQ1lfTUFUQ0hfTk9ORQkJWFRfUE9MSUNZX01BVENIX05PTkUKKyNkZWZpbmUgSVA2VF9QT0xJQ1lfTUFUQ0hfU1RSSUNUCVhUX1BPTElDWV9NQVRDSF9TVFJJQ1QKIAotZW51bSBpcDZ0X3BvbGljeV9tb2RlcwotewotCUlQNlRfUE9MSUNZX01PREVfVFJBTlNQT1JULAotCUlQNlRfUE9MSUNZX01PREVfVFVOTkVMCi19OworLyogaXA2dF9wb2xpY3lfbW9kZXMgKi8KKyNkZWZpbmUgSVA2VF9QT0xJQ1lfTU9ERV9UUkFOU1BPUlQJWFRfUE9MSUNZX01PREVfVFJBTlNQT1JUCisjZGVmaW5lIElQNlRfUE9MSUNZX01PREVfVFVOTkVMCQlYVF9QT0xJQ1lfTU9ERV9UVU5ORUwKIAotc3RydWN0IGlwNnRfcG9saWN5X3NwZWMKLXsKLQl1X2ludDhfdAlzYWRkcjoxLAotCQkJZGFkZHI6MSwKLQkJCXByb3RvOjEsCi0JCQltb2RlOjEsCi0JCQlzcGk6MSwKLQkJCXJlcWlkOjE7Ci19OwotCi11bmlvbiBpcDZ0X3BvbGljeV9hZGRyCi17Ci0Jc3RydWN0IGluX2FkZHIJYTQ7Ci0Jc3RydWN0IGluNl9hZGRyCWE2OwotfTsKLQotc3RydWN0IGlwNnRfcG9saWN5X2VsZW0KLXsKLQl1bmlvbiBpcDZ0X3BvbGljeV9hZGRyCXNhZGRyOwotCXVuaW9uIGlwNnRfcG9saWN5X2FkZHIJc21hc2s7Ci0JdW5pb24gaXA2dF9wb2xpY3lfYWRkcglkYWRkcjsKLQl1bmlvbiBpcDZ0X3BvbGljeV9hZGRyCWRtYXNrOwotCXVfaW50MzJfdAkJc3BpOwotCXVfaW50MzJfdAkJcmVxaWQ7Ci0JdV9pbnQ4X3QJCXByb3RvOwotCXVfaW50OF90CQltb2RlOwotCi0Jc3RydWN0IGlwNnRfcG9saWN5X3NwZWMJbWF0Y2g7Ci0Jc3RydWN0IGlwNnRfcG9saWN5X3NwZWMJaW52ZXJ0OwotfTsKLQotc3RydWN0IGlwNnRfcG9saWN5X2luZm8KLXsKLQlzdHJ1Y3QgaXA2dF9wb2xpY3lfZWxlbSBwb2xbSVA2VF9QT0xJQ1lfTUFYX0VMRU1dOwotCXVfaW50MTZfdCBmbGFnczsKLQl1X2ludDE2X3QgbGVuOwotfTsKKyNkZWZpbmUgaXA2dF9wb2xpY3lfc3BlYwkJeHRfcG9saWN5X3NwZWMKKyNkZWZpbmUgaXA2dF9wb2xpY3lfYWRkcgkJeHRfcG9saWN5X2FkZHIKKyNkZWZpbmUgaXA2dF9wb2xpY3lfZWxlbQkJeHRfcG9saWN5X2VsZW0KKyNkZWZpbmUgaXA2dF9wb2xpY3lfaW5mbwkJeHRfcG9saWN5X2luZm8KIAogI2VuZGlmIC8qIF9JUDZUX1BPTElDWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCmluZGV4IGMyNTZlYmUuLmY4ZjNkMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0bGluay5oCkBAIC0xNTEsNiArMTUxLDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBzb2NrICpuZXRsaW5rX2tlcm5lbF9jcmVhdGUoaW50IHVuaXQsIHVuc2lnbmVkIGludCBncm91cHMsIHZvaWQgKCppbnB1dCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuKSwgc3RydWN0IG1vZHVsZSAqbW9kdWxlKTsKIGV4dGVybiB2b2lkIG5ldGxpbmtfYWNrKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgZXJyKTsKK2V4dGVybiBpbnQgbmV0bGlua19oYXNfbGlzdGVuZXJzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGdyb3VwKTsKIGV4dGVybiBpbnQgbmV0bGlua191bmljYXN0KHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHBpZCwgaW50IG5vbmJsb2NrKTsKIGV4dGVybiBpbnQgbmV0bGlua19icm9hZGNhc3Qoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MzIgcGlkLAogCQkJICAgICBfX3UzMiBncm91cCwgZ2ZwX3QgYWxsb2NhdGlvbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCA1NDdkNjQ5Li5iNGRjNmUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTM5OCw3ICszOTgsNyBAQAogZXh0ZXJuIGludCBuZnNfcmVnaXN0ZXJfc3lzY3RsKHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZzX3VucmVnaXN0ZXJfc3lzY3RsKHZvaWQpOwogI2Vsc2UKLSNkZWZpbmUgbmZzX3JlZ2lzdGVyX3N5c2N0bCgpIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBuZnNfcmVnaXN0ZXJfc3lzY3RsKCkgMAogI2RlZmluZSBuZnNfdW5yZWdpc3Rlcl9zeXNjdGwoKSBkbyB7IH0gd2hpbGUoMCkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IGQ1Mjk5OWMuLjllYTYyOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC04Niw4ICs4Niw5IEBACiAgKiAtIFRoZSBfX3h4eF9wYWdlX3N0YXRlIHZhcmlhbnRzIGNhbiBiZSB1c2VkIHNhZmVseSB3aGVuIGludGVycnVwdHMgYXJlCiAgKiBkaXNhYmxlZC4KICAqIC0gVGhlIF9feHh4X3BhZ2Vfc3RhdGUgdmFyaWFudHMgY2FuIGJlIHVzZWQgaWYgdGhlIGZpZWxkIGlzIG9ubHkKLSAqIG1vZGlmaWVkIGZyb20gcHJvY2VzcyBjb250ZXh0LCBvciBvbmx5IG1vZGlmaWVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCi0gKiBJbiB0aGlzIGNhc2UsIHRoZSBmaWVsZCBzaG91bGQgYmUgY29tbWVudGVkIGhlcmUuCisgKiBtb2RpZmllZCBmcm9tIHByb2Nlc3MgY29udGV4dCBhbmQgcHJvdGVjdGVkIGZyb20gcHJlZW1wdGlvbiwgb3Igb25seQorICogbW9kaWZpZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gIEluIHRoaXMgY2FzZSwgdGhlIGZpZWxkIHNob3VsZCBiZQorICogY29tbWVudGVkIGhlcmUuCiAgKi8KIHN0cnVjdCBwYWdlX3N0YXRlIHsKIAl1bnNpZ25lZCBsb25nIG5yX2RpcnR5OwkJLyogRGlydHkgd3JpdGVhYmxlIHBhZ2VzICovCkBAIC0yMzksMjIgKzI0MCwxOSBAQAogI2RlZmluZSBfX0NsZWFyUGFnZURpcnR5KHBhZ2UpCV9fY2xlYXJfYml0KFBHX2RpcnR5LCAmKHBhZ2UpLT5mbGFncykKICNkZWZpbmUgVGVzdENsZWFyUGFnZURpcnR5KHBhZ2UpIHRlc3RfYW5kX2NsZWFyX2JpdChQR19kaXJ0eSwgJihwYWdlKS0+ZmxhZ3MpCiAKLSNkZWZpbmUgU2V0UGFnZUxSVShwYWdlKQlzZXRfYml0KFBHX2xydSwgJihwYWdlKS0+ZmxhZ3MpCiAjZGVmaW5lIFBhZ2VMUlUocGFnZSkJCXRlc3RfYml0KFBHX2xydSwgJihwYWdlKS0+ZmxhZ3MpCi0jZGVmaW5lIFRlc3RTZXRQYWdlTFJVKHBhZ2UpCXRlc3RfYW5kX3NldF9iaXQoUEdfbHJ1LCAmKHBhZ2UpLT5mbGFncykKLSNkZWZpbmUgVGVzdENsZWFyUGFnZUxSVShwYWdlKQl0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfbHJ1LCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgU2V0UGFnZUxSVShwYWdlKQlzZXRfYml0KFBHX2xydSwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIENsZWFyUGFnZUxSVShwYWdlKQljbGVhcl9iaXQoUEdfbHJ1LCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgX19DbGVhclBhZ2VMUlUocGFnZSkJX19jbGVhcl9iaXQoUEdfbHJ1LCAmKHBhZ2UpLT5mbGFncykKIAogI2RlZmluZSBQYWdlQWN0aXZlKHBhZ2UpCXRlc3RfYml0KFBHX2FjdGl2ZSwgJihwYWdlKS0+ZmxhZ3MpCiAjZGVmaW5lIFNldFBhZ2VBY3RpdmUocGFnZSkJc2V0X2JpdChQR19hY3RpdmUsICYocGFnZSktPmZsYWdzKQogI2RlZmluZSBDbGVhclBhZ2VBY3RpdmUocGFnZSkJY2xlYXJfYml0KFBHX2FjdGl2ZSwgJihwYWdlKS0+ZmxhZ3MpCi0jZGVmaW5lIFRlc3RDbGVhclBhZ2VBY3RpdmUocGFnZSkgdGVzdF9hbmRfY2xlYXJfYml0KFBHX2FjdGl2ZSwgJihwYWdlKS0+ZmxhZ3MpCi0jZGVmaW5lIFRlc3RTZXRQYWdlQWN0aXZlKHBhZ2UpIHRlc3RfYW5kX3NldF9iaXQoUEdfYWN0aXZlLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgX19DbGVhclBhZ2VBY3RpdmUocGFnZSkJX19jbGVhcl9iaXQoUEdfYWN0aXZlLCAmKHBhZ2UpLT5mbGFncykKIAogI2RlZmluZSBQYWdlU2xhYihwYWdlKQkJdGVzdF9iaXQoUEdfc2xhYiwgJihwYWdlKS0+ZmxhZ3MpCi0jZGVmaW5lIFNldFBhZ2VTbGFiKHBhZ2UpCXNldF9iaXQoUEdfc2xhYiwgJihwYWdlKS0+ZmxhZ3MpCi0jZGVmaW5lIENsZWFyUGFnZVNsYWIocGFnZSkJY2xlYXJfYml0KFBHX3NsYWIsICYocGFnZSktPmZsYWdzKQotI2RlZmluZSBUZXN0Q2xlYXJQYWdlU2xhYihwYWdlKQl0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfc2xhYiwgJihwYWdlKS0+ZmxhZ3MpCi0jZGVmaW5lIFRlc3RTZXRQYWdlU2xhYihwYWdlKQl0ZXN0X2FuZF9zZXRfYml0KFBHX3NsYWIsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBfX1NldFBhZ2VTbGFiKHBhZ2UpCV9fc2V0X2JpdChQR19zbGFiLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgX19DbGVhclBhZ2VTbGFiKHBhZ2UpCV9fY2xlYXJfYml0KFBHX3NsYWIsICYocGFnZSktPmZsYWdzKQogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KICNkZWZpbmUgUGFnZUhpZ2hNZW0ocGFnZSkJaXNfaGlnaG1lbShwYWdlX3pvbmUocGFnZSkpCkBAIC0zMjksOCArMzI3LDggQEAKICNkZWZpbmUgVGVzdENsZWFyUGFnZVJlY2xhaW0ocGFnZSkgdGVzdF9hbmRfY2xlYXJfYml0KFBHX3JlY2xhaW0sICYocGFnZSktPmZsYWdzKQogCiAjZGVmaW5lIFBhZ2VDb21wb3VuZChwYWdlKQl0ZXN0X2JpdChQR19jb21wb3VuZCwgJihwYWdlKS0+ZmxhZ3MpCi0jZGVmaW5lIFNldFBhZ2VDb21wb3VuZChwYWdlKQlzZXRfYml0KFBHX2NvbXBvdW5kLCAmKHBhZ2UpLT5mbGFncykKLSNkZWZpbmUgQ2xlYXJQYWdlQ29tcG91bmQocGFnZSkJY2xlYXJfYml0KFBHX2NvbXBvdW5kLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgX19TZXRQYWdlQ29tcG91bmQocGFnZSkJX19zZXRfYml0KFBHX2NvbXBvdW5kLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgX19DbGVhclBhZ2VDb21wb3VuZChwYWdlKSBfX2NsZWFyX2JpdChQR19jb21wb3VuZCwgJihwYWdlKS0+ZmxhZ3MpCiAKICNpZmRlZiBDT05GSUdfU1dBUAogI2RlZmluZSBQYWdlU3dhcENhY2hlKHBhZ2UpCXRlc3RfYml0KFBHX3N3YXBjYWNoZSwgJihwYWdlKS0+ZmxhZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IGVlNzAwYzYuLjgzOWYwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCkBAIC01MSw2ICs1MSwxMCBAQAogI2RlZmluZSBwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSkJcHV0X3BhZ2UocGFnZSkKIHZvaWQgcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnIsIGludCBjb2xkKTsKIAorI2lmZGVmIENPTkZJR19OVU1BCitleHRlcm4gc3RydWN0IHBhZ2UgKnBhZ2VfY2FjaGVfYWxsb2Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpOworZXh0ZXJuIHN0cnVjdCBwYWdlICpwYWdlX2NhY2hlX2FsbG9jX2NvbGQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpOworI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VfY2FjaGVfYWxsb2Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpCiB7CiAJcmV0dXJuIGFsbG9jX3BhZ2VzKG1hcHBpbmdfZ2ZwX21hc2soeCksIDApOwpAQCAtNjAsNiArNjQsNyBAQAogewogCXJldHVybiBhbGxvY19wYWdlcyhtYXBwaW5nX2dmcF9tYXNrKHgpfF9fR0ZQX0NPTEQsIDApOwogfQorI2VuZGlmCiAKIHR5cGVkZWYgaW50IGZpbGxlcl90KHZvaWQgKiwgc3RydWN0IHBhZ2UgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IGZlMWEyYjAuLjBhYWQ1YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtOTUsNiArOTUsMTEgQEAKIAlwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUgPSAoX19mb3JjZSBwY2lfY2hhbm5lbF9zdGF0ZV90KSAzLAogfTsKIAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2JpdHdpc2UgcGNpX2J1c19mbGFnc190OworZW51bSBwY2lfYnVzX2ZsYWdzIHsKKwlQQ0lfQlVTX0ZMQUdTX05PX01TSSA9IChwY2lfYnVzX2ZsYWdzX3QpIDEsCit9OworCiAvKgogICogVGhlIHBjaV9kZXYgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgUENJIGRldmljZXMuCiAgKi8KQEAgLTIwMyw3ICsyMDgsNyBAQAogCWNoYXIJCW5hbWVbNDhdOwogCiAJdW5zaWduZWQgc2hvcnQgIGJyaWRnZV9jdGw7CS8qIG1hbmFnZSBOT19JU0EvRkJCL2V0IGFsIGJlaGF2aW9ycyAqLwotCXVuc2lnbmVkIHNob3J0ICBwYWQyOworCXBjaV9idXNfZmxhZ3NfdCBidXNfZmxhZ3M7CS8qIEluaGVyaXRlZCBieSBjaGlsZCBidXNzZXMgKi8KIAlzdHJ1Y3QgZGV2aWNlCQkqYnJpZGdlOwogCXN0cnVjdCBjbGFzc19kZXZpY2UJY2xhc3NfZGV2OwogCXN0cnVjdCBiaW5fYXR0cmlidXRlCSpsZWdhY3lfaW87IC8qIGxlZ2FjeSBJL08gZm9yIHRoaXMgYnVzICovCkBAIC00ODUsOSArNDkwLDkgQEAKIHZvaWQgcGNpX2ZpeHVwX2lycXModTggKCopKHN0cnVjdCBwY2lfZGV2ICosIHU4ICopLAogCQkgICAgaW50ICgqKShzdHJ1Y3QgcGNpX2RldiAqLCB1OCwgdTgpKTsKICNkZWZpbmUgSEFWRV9QQ0lfUkVRX1JFR0lPTlMJMgotaW50IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKiwgY2hhciAqKTsKK2ludCBwY2lfcmVxdWVzdF9yZWdpb25zKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IGNoYXIgKik7CiB2b2lkIHBjaV9yZWxlYXNlX3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKik7Ci1pbnQgcGNpX3JlcXVlc3RfcmVnaW9uKHN0cnVjdCBwY2lfZGV2ICosIGludCwgY2hhciAqKTsKK2ludCBwY2lfcmVxdWVzdF9yZWdpb24oc3RydWN0IHBjaV9kZXYgKiwgaW50LCBjb25zdCBjaGFyICopOwogdm9pZCBwY2lfcmVsZWFzZV9yZWdpb24oc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIAogLyogZHJpdmVycy9wY2kvYnVzLmMgKi8KQEAgLTUxNiw2ICs1MjEsNyBAQAogdm9pZCBwY2lfd2Fsa19idXMoc3RydWN0IHBjaV9idXMgKnRvcCwgdm9pZCAoKmNiKShzdHJ1Y3QgcGNpX2RldiAqLCB2b2lkICopLAogCQkgIHZvaWQgKnVzZXJkYXRhKTsKIGludCBwY2lfY2ZnX3NwYWNlX3NpemUoc3RydWN0IHBjaV9kZXYgKmRldik7Cit1bnNpZ25lZCBjaGFyIHBjaV9idXNfbWF4X2J1c25yKHN0cnVjdCBwY2lfYnVzKiBidXMpOwogCiAvKiBrbWVtX2NhY2hlIHN0eWxlIHdyYXBwZXIgYXJvdW5kIHBjaV9hbGxvY19jb25zaXN0ZW50KCkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCA4MmI4M2RhLi42ZjA4MGFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1RJTUVSCQkweDA4MDIKICNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9SVEMJCTB4MDgwMwogI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1BDSV9IT1RQTFVHCTB4MDgwNAorI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1NESENJCQkweDA4MDUKICNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9PVEhFUgkJMHgwODgwCiAKICNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfSU5QVVQJCTB4MDkKQEAgLTg1Miw2ICs4NTMsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDMyCTB4MjQzMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNTEyCTB4MjUxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNTIyCTB4MjUyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDIyCTB4NTQyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDMyCTB4NTQzMgogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1lSSVgJCTB4MTA3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAJMHgwMDAwCkBAIC0xMzY1LDkgKzEzNjgsMTEgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IRQkgIDB4MDAwOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0xFCSAgMHgwMDA5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfR0NOQl9MRSAweDAwMTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19FUEIJICAweDAxMDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0CSAgMHgwMjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNQkgIDB4MDIwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjYgICAgMHgwMjAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwU0IgMHgwMjA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNElERSAweDAyMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFIDB4MDIxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUgMHgwMjEzCkBAIC0xNzUyLDYgKzE3NTcsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDBCCQkweGIwMGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfQjAwQwkJMHhiMDBjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IxMDAJCTB4YjEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CNzAwCQkweGI3MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfQjcwMQkJMHhiNzAxCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FWEFSCQkweDEzYTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTUyCTB4MDE1MgpAQCAtMTg1NCwxNiArMTg2MSwyNCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1TQkweDE2NWQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNU1fMgkweDE2NWUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcxNAkweDE2NjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcxNFMJMHgxNjY5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODAJMHgxNjZhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODBTCTB4MTY2YgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1RgkweDE2NmUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NE0JMHgxNjcyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTVNCTB4MTY3MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUwCTB4MTY3NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxCTB4MTY3NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzE1CTB4MTY3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzE1UwkweDE2NzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NAkweDE2N2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NQkweDE2N2IKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1ME0JMHgxNjdjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTFNCTB4MTY3ZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxRgkweDE2N2UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4N00JMHgxNjkzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODIJMHgxNjk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODcJMHgxNjliCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODgJMHgxNjljCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODkJMHgxNjlkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDJYCTB4MTZhNgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCmluZGV4IGJkNjcwOGUuLjY4MjUyNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKQEAgLTM5LDYgKzM5LDcgQEAKIH0KIAogdm9pZCBwZXJjcHVfY291bnRlcl9tb2Qoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIGxvbmcgYW1vdW50KTsKK2xvbmcgcGVyY3B1X2NvdW50ZXJfc3VtKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKTsKIAogc3RhdGljIGlubGluZSBsb25nIHBlcmNwdV9jb3VudGVyX3JlYWQoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCiB7CkBAIC05Miw2ICs5MywxMSBAQAogCXJldHVybiBmYmMtPmNvdW50OwogfQogCitzdGF0aWMgaW5saW5lIGxvbmcgcGVyY3B1X2NvdW50ZXJfc3VtKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQoreworCXJldHVybiBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKGZiYyk7Cit9CisKICNlbmRpZgkvKiBDT05GSUdfU01QICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfY291bnRlcl9pbmMoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjMzMwODQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvbGludXgvcGxhdGZvcm0uaCAtIHBsYXRmb3JtIGRyaXZlciBkZWZpbml0aW9ucwotICoKLSAqIEJlY2F1c2Ugb2YgdGhlIHByb2xpZmljIGNvbnN1bWVyaXNtIG9mIHRoZSBhdmVyYWdlIEFtZXJpY2FuLAotICogYW5kIHRoZSBkb21pbmFudCBtYXJrZXRpbmcgYnVkZ2V0cyBvZiBQQyBPRU1zLCB3ZSBoYXZlIGJlZW4KLSAqIGJsZXNzZWQgd2l0aCBmcmVxdWVudCB1cGRhdGVzIG9mIHRoZSBQQyBhcmNoaXRlY3R1cmUuIAotICoKLSAqIFdoaWxlIG1vc3Qgb2YgdGhlc2UgY2FsbHMgYXJlIHNpbmd1bGFyIHBlciBhcmNoaXRlY3R1cmUsIHRoZXkgCi0gKiByZXF1aXJlIGFuIGV4dHJhIGxheWVyIG9mIGFic3RyYWN0aW9uIG9uIHRoZSB4ODYgc28gdGhlIHJpZ2h0Ci0gKiBzdWJzeXN0ZW0gZ2V0cyB0aGUgcmlnaHQgY2FsbC4gCi0gKgotICogQmFzaWNhbGx5LCB0aGlzIGNvbnNvbGlkYXRlcyB0aGUgcG93ZXIgb2ZmIGFuZCByZWJvb3QgY2FsbGJhY2tzIAotICogaW50byBvbmUgc3RydWN0dXJlLCBhcyB3ZWxsIGFzIGFkZGluZyBwb3dlciBtYW5hZ2VtZW50IGhvb2tzLgotICoKLSAqIFdoZW4gYWRkaW5nIGEgcGxhdGZvcm0gZHJpdmVyLCBwbGVhc2UgbWFrZSBzdXJlIGFsbCBjYWxsYmFja3MgYXJlIAotICogZmlsbGVkLiBUaGVyZSBhcmUgZGVmYXVsdHMgZGVmaW5lZCBiZWxvdyB0aGF0IGRvIG5vdGhpbmc7IHVzZSB0aG9zZQotICogaWYgeW91IGRvIG5vdCBzdXBwb3J0IHRoYXQgY2FsbGJhY2suCi0gKi8gCi0KLSNpZm5kZWYgX1BMQVRGT1JNX0hfCi0jZGVmaW5lIF9QTEFURk9STV9IXwotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCBwbGF0Zm9ybV90IHsKLQljaGFyCSogbmFtZTsKLQl1MzIJc3VzcGVuZF9zdGF0ZXM7Ci0Jdm9pZAkoKnJlYm9vdCkoY2hhciAqIGNtZCk7Ci0Jdm9pZAkoKmhhbHQpKHZvaWQpOwotCXZvaWQJKCpwb3dlcl9vZmYpKHZvaWQpOwotCWludAkoKnN1c3BlbmQpKGludCBzdGF0ZSwgaW50IGZsYWdzKTsKLQl2b2lkCSgqaWRsZSkodm9pZCk7Ci19OwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX3QgKiBwbGF0Zm9ybTsKLWV4dGVybiB2b2lkIGRlZmF1bHRfcmVib290KGNoYXIgKiBjbWQpOwotZXh0ZXJuIHZvaWQgZGVmYXVsdF9oYWx0KHZvaWQpOwotZXh0ZXJuIGludCBkZWZhdWx0X3N1c3BlbmQoaW50IHN0YXRlLCBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpOwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNWJlODdiYS4uNmRmMjU4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMTg4LDYgKzE4OCw4IEBACiBleHRlcm4gdm9pZCBkZXZpY2VfcmVzdW1lKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1BNCitleHRlcm4gc3VzcGVuZF9kaXNrX21ldGhvZF90IHBtX2Rpc2tfbW9kZTsKKwogZXh0ZXJuIGludCBkZXZpY2Vfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCiAjZGVmaW5lIGRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShkZXYsdmFsKSBcCkBAIC0yMTUsNyArMjE3LDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRwbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICogZGV2KQogewotCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcGRldi5oIGIvaW5jbHVkZS9saW51eC9wcGRldi5oCmluZGV4IDE0MWM5NjUuLmYzNzZhNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BwZGV2LmgKQEAgLTE0LDggKzE0LDYgQEAKICAqIEFkZGVkIFBQR0VUTU9ERVMvUFBHRVRNT0RFL1BQR0VUUEhBU0UsIEZyZWQgQmFybmVzIDxmcm1iMkB1a2MuYWMudWs+LCAwMy8wMS8yMDAxCiAgKi8KIAotI2RlZmluZSBQUF9NQUpPUgk5OQotCiAjZGVmaW5lIFBQX0lPQ1RMCSdwJwogCiAvKiBTZXQgbW9kZSBmb3IgcmVhZC93cml0ZSAoZS5nLiBJRUVFMTI4NF9NT0RFX0VQUCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9wcm9maWxlLmgKaW5kZXggMDI2OTY5YS4uMWYyZmVhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcm9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wcm9maWxlLmgKQEAgLTE0LDYgKzE0LDcgQEAKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5Owogc3RydWN0IHB0X3JlZ3M7CitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiAKIC8qIGluaXQgYmFzaWMga2VybmVsIHByb2ZpbGVyICovCiB2b2lkIF9faW5pdCBwcm9maWxlX2luaXQodm9pZCk7CkBAIC0zMiw3ICszMyw2IEBACiAKICNpZmRlZiBDT05GSUdfUFJPRklMSU5HCiAKLXN0cnVjdCBub3RpZmllcl9ibG9jazsKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGEuaCBiL2luY2x1ZGUvbGludXgvcXVvdGEuaAppbmRleCBmMzNhZWIyLi4yZGFiNzFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBfX0RRVU9UX1ZFUlNJT05fXwkiZHF1b3RfNi41LjEiCiAjZGVmaW5lIF9fRFFVT1RfTlVNX1ZFUlNJT05fXwk2KjEwMDAwKzUqMTAwKzEKQEAgLTIwOCwxNCArMjA5LDEzIEBACiAjZGVmaW5lIERRX0ZBS0VfQgkzCS8qIG5vIGxpbWl0cyBvbmx5IHVzYWdlICovCiAjZGVmaW5lIERRX1JFQURfQgk0CS8qIGRxdW90IHdhcyByZWFkIGludG8gbWVtb3J5ICovCiAjZGVmaW5lIERRX0FDVElWRV9CCTUJLyogZHF1b3QgaXMgYWN0aXZlIChkcXVvdF9yZWxlYXNlIG5vdCBjYWxsZWQpICovCi0jZGVmaW5lIERRX1dBSVRGUkVFX0IJNgkvKiBkcXVvdCBiZWluZyB3YWl0ZWQgKGJ5IGludmFsaWRhdGVfZHF1b3RzKSAqLwogCiBzdHJ1Y3QgZHF1b3QgewogCXN0cnVjdCBobGlzdF9ub2RlIGRxX2hhc2g7CS8qIEhhc2ggbGlzdCBpbiBtZW1vcnkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRxX2ludXNlOwkvKiBMaXN0IG9mIGFsbCBxdW90YXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRxX2ZyZWU7CS8qIEZyZWUgbGlzdCBlbGVtZW50ICovCiAJc3RydWN0IGxpc3RfaGVhZCBkcV9kaXJ0eTsJLyogTGlzdCBvZiBkaXJ0eSBkcXVvdHMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGRxX2xvY2s7CS8qIGRxdW90IElPIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXggZHFfbG9jazsJCS8qIGRxdW90IElPIGxvY2sgKi8KIAlhdG9taWNfdCBkcV9jb3VudDsJCS8qIFVzZSBjb3VudCAqLwogCXdhaXRfcXVldWVfaGVhZF90IGRxX3dhaXRfdW51c2VkOwkvKiBXYWl0IHF1ZXVlIGZvciBkcXVvdCB0byBiZWNvbWUgdW51c2VkICovCiAJc3RydWN0IHN1cGVyX2Jsb2NrICpkcV9zYjsJLyogc3VwZXJibG9jayB0aGlzIGFwcGxpZXMgdG8gKi8KQEAgLTI4NSw4ICsyODUsOCBAQAogCiBzdHJ1Y3QgcXVvdGFfaW5mbyB7CiAJdW5zaWduZWQgaW50IGZsYWdzOwkJCS8qIEZsYWdzIGZvciBkaXNrcXVvdGFzIG9uIHRoaXMgZGV2aWNlICovCi0Jc3RydWN0IHNlbWFwaG9yZSBkcWlvX3NlbTsJCS8qIGxvY2sgZGV2aWNlIHdoaWxlIEkvTyBpbiBwcm9ncmVzcyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgZHFvbm9mZl9zZW07CQkvKiBTZXJpYWxpemUgcXVvdGFvbiAmIHF1b3Rhb2ZmICovCisJc3RydWN0IG11dGV4IGRxaW9fbXV0ZXg7CQkvKiBsb2NrIGRldmljZSB3aGlsZSBJL08gaW4gcHJvZ3Jlc3MgKi8KKwlzdHJ1Y3QgbXV0ZXggZHFvbm9mZl9tdXRleDsJCS8qIFNlcmlhbGl6ZSBxdW90YW9uICYgcXVvdGFvZmYgKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGRxcHRyX3NlbTsJCS8qIHNlcmlhbGl6ZSBvcHMgdXNpbmcgcXVvdGFfaW5mbyBzdHJ1Y3QsIHBvaW50ZXJzIGZyb20gaW5vZGUgdG8gZHF1b3RzICovCiAJc3RydWN0IGlub2RlICpmaWxlc1tNQVhRVU9UQVNdOwkJLyogaW5vZGVzIG9mIHF1b3RhZmlsZXMgKi8KIAlzdHJ1Y3QgbWVtX2RxaW5mbyBpbmZvW01BWFFVT1RBU107CS8qIEluZm9ybWF0aW9uIGZvciBlYWNoIHF1b3RhIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFkaXgtdHJlZS5oIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKaW5kZXggYzU3ZmYyZi4uZGQ4M2NjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKQEAgLTQ1LDYgKzQ1LDggQEAKIAkocm9vdCktPnJub2RlID0gTlVMTDsJCQkJCQlcCiB9IHdoaWxlICgwKQogCisjZGVmaW5lIFJBRElYX1RSRUVfTUFYX1RBR1MgMgorCiBpbnQgcmFkaXhfdHJlZV9pbnNlcnQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogdm9pZCAqcmFkaXhfdHJlZV9sb29rdXAoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqLCB1bnNpZ25lZCBsb25nKTsKIHZvaWQgKipyYWRpeF90cmVlX2xvb2t1cF9zbG90KHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKiwgdW5zaWduZWQgbG9uZyk7CkBAIC01NSwxNSArNTcsMTYgQEAKIGludCByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX3QgZ2ZwX21hc2spOwogdm9pZCByYWRpeF90cmVlX2luaXQodm9pZCk7CiB2b2lkICpyYWRpeF90cmVlX3RhZ19zZXQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCB0YWcpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgaW50IHRhZyk7CiB2b2lkICpyYWRpeF90cmVlX3RhZ19jbGVhcihzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LAotCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IHRhZyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBpbnQgdGFnKTsKIGludCByYWRpeF90cmVlX3RhZ19nZXQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGludCB0YWcpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgaW50IHRhZyk7CiB1bnNpZ25lZCBpbnQKIHJhZGl4X3RyZWVfZ2FuZ19sb29rdXBfdGFnKHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsIHZvaWQgKipyZXN1bHRzLAotCQl1bnNpZ25lZCBsb25nIGZpcnN0X2luZGV4LCB1bnNpZ25lZCBpbnQgbWF4X2l0ZW1zLCBpbnQgdGFnKTsKLWludCByYWRpeF90cmVlX3RhZ2dlZChzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LCBpbnQgdGFnKTsKKwkJdW5zaWduZWQgbG9uZyBmaXJzdF9pbmRleCwgdW5zaWduZWQgaW50IG1heF9pdGVtcywKKwkJdW5zaWduZWQgaW50IHRhZyk7CitpbnQgcmFkaXhfdHJlZV90YWdnZWQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgdW5zaWduZWQgaW50IHRhZyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYWRpeF90cmVlX3ByZWxvYWRfZW5kKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCmluZGV4IDlkNTQ5NGEuLjMwMDljODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCkBAIC0xMzAsNiArMTMwLDYgQEAKICAqIHdpdGggZmFpbHVyZSB3aGVuIGxhc3Qgd3JpdGUgY29tcGxldGVzIChhbmQgYWxsIGZhaWxlZCkuCiAgKiBSZWNvcmQgdGhhdCBiaV9lbmRfaW8gd2FzIGNhbGxlZCB3aXRoIHRoaXMgZmxhZy4uLgogICovCi0jZGVmaW5lCVIxQklPX1JldHVybmVkIDQKKyNkZWZpbmUJUjFCSU9fUmV0dXJuZWQgNgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCBiODdhZWZhLi41NjczMDA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC05OCwxOSArOTgsMjEgQEAKIAlsb25nICAJICAgICAgIAliYXRjaDsgICAgICAgICAgIC8qIEJhdGNoICMgZm9yIGN1cnJlbnQgUkNVIGJhdGNoICovCiAJc3RydWN0IHJjdV9oZWFkICpueHRsaXN0OwogCXN0cnVjdCByY3VfaGVhZCAqKm54dHRhaWw7Ci0JbG9uZyAgICAgICAgICAgIGNvdW50OyAvKiAjIG9mIHF1ZXVlZCBpdGVtcyAqLworCWxvbmcgICAgICAgICAgICBxbGVuOyAJIAkgLyogIyBvZiBxdWV1ZWQgY2FsbGJhY2tzICovCiAJc3RydWN0IHJjdV9oZWFkICpjdXJsaXN0OwogCXN0cnVjdCByY3VfaGVhZCAqKmN1cnRhaWw7CiAJc3RydWN0IHJjdV9oZWFkICpkb25lbGlzdDsKIAlzdHJ1Y3QgcmN1X2hlYWQgKipkb25ldGFpbDsKKwlsb25nCQlibGltaXQ7CQkgLyogVXBwZXIgbGltaXQgb24gYSBwcm9jZXNzZWQgYmF0Y2ggKi8KIAlpbnQgY3B1OwogCXN0cnVjdCByY3VfaGVhZCBiYXJyaWVyOworI2lmZGVmIENPTkZJR19TTVAKKwlsb25nCQlsYXN0X3JzX3FsZW47CSAvKiBxbGVuIGR1cmluZyB0aGUgbGFzdCByZXNjaGVkICovCisjZW5kaWYKIH07CiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9kYXRhKTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKLWV4dGVybiBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGs7Ci1leHRlcm4gc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9iaF9jdHJsYmxrOwogCiAvKgogICogSW5jcmVtZW50IHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlci4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCA3ZDUxMTQ5Li45MTJmMWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCWludCBkZV9lbnRyeWxlbjsKIAlpbnQgZGVfbmFtZWxlbjsKIAljaGFyICpkZV9uYW1lOwotCWNoYXIgKmRlX2dlbl9udW1iZXJfYml0X3N0cmluZzsKKwl1bnNpZ25lZCBsb25nICpkZV9nZW5fbnVtYmVyX2JpdF9zdHJpbmc7CiAKIAlfX3UzMiBkZV9kaXJfaWQ7CiAJX191MzIgZGVfb2JqZWN0aWQ7CkBAIC0xNzA0LDYgKzE3MDQsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfdHJhbnNhY3Rpb25fZnJlZV9zcGFjZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCkKK3sKKwlyZXR1cm4gdGgtPnRfYmxvY2tzX2FsbG9jYXRlZCAtIHRoLT50X2Jsb2Nrc19sb2dnZWQ7Cit9CisKIGludCByZWlzZXJmc19hc3luY19wcm9ncmVzc193YWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqcyk7CiAKIHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnJlaXNlcmZzX3BlcnNpc3RlbnRfdHJhbnNhY3Rpb24oc3RydWN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKaW5kZXggODcyODBlYi4uNTM1M2FmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaApAQCAtMTAxLDEzICsxMDEsMTMgQEAKICNlbHNlCiAKICNkZWZpbmUgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIDAKLSNkZWZpbmUgcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGlub2RlKQorI2RlZmluZSByZWlzZXJmc19tYXJrX2lub2RlX3ByaXZhdGUoaW5vZGUpIGRvIHs7fSB3aGlsZSgwKQogI2RlZmluZSByZWlzZXJmc19nZXR4YXR0ciBOVUxMCiAjZGVmaW5lIHJlaXNlcmZzX3NldHhhdHRyIE5VTEwKICNkZWZpbmUgcmVpc2VyZnNfbGlzdHhhdHRyIE5VTEwKICNkZWZpbmUgcmVpc2VyZnNfcmVtb3ZleGF0dHIgTlVMTAotI2RlZmluZSByZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhzYikKLSNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhzYikKKyNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoc2IpIGRvIHs7fSB3aGlsZSgwKQorI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKHNiKSBkbyB7O30gd2hpbGUoMCkKICNkZWZpbmUgcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhzYikKICNkZWZpbmUgcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKHNiKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlbGF5LmggYi9pbmNsdWRlL2xpbnV4L3JlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjYzE1MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmVsYXkuaApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvcmVsYXkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyAtIFRvbSBaYW51c3NpICh6YW51c3NpQHVzLmlibS5jb20pLCBJQk0gQ29ycAorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIC0gS2FyaW0gWWFnaG1vdXIgKGthcmltQG9wZXJzeXMuY29tKQorICoKKyAqIENPTkZJR19SRUxBWSBkZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb25zCisgKi8KKworI2lmbmRlZiBfTElOVVhfUkVMQVlfSAorI2RlZmluZSBfTElOVVhfUkVMQVlfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorCisvKiBOZWVkcyBhIF9tdWNoXyBiZXR0ZXIgbmFtZS4uLiAqLworI2RlZmluZSBGSVhfU0laRSh4KSAoKCgoeCkgLSAxKSAmIFBBR0VfTUFTSykgKyBQQUdFX1NJWkUpCisKKy8qCisgKiBUcmFja3MgY2hhbmdlcyB0byByY2hhbi9yY2hhbl9idWYgc3RydWN0cworICovCisjZGVmaW5lIFJFTEFZRlNfQ0hBTk5FTF9WRVJTSU9OCQk2CisKKy8qCisgKiBQZXItY3B1IHJlbGF5IGNoYW5uZWwgYnVmZmVyCisgKi8KK3N0cnVjdCByY2hhbl9idWYKK3sKKwl2b2lkICpzdGFydDsJCQkvKiBzdGFydCBvZiBjaGFubmVsIGJ1ZmZlciAqLworCXZvaWQgKmRhdGE7CQkJLyogc3RhcnQgb2YgY3VycmVudCBzdWItYnVmZmVyICovCisJc2l6ZV90IG9mZnNldDsJCQkvKiBjdXJyZW50IG9mZnNldCBpbnRvIHN1Yi1idWZmZXIgKi8KKwlzaXplX3Qgc3ViYnVmc19wcm9kdWNlZDsJLyogY291bnQgb2Ygc3ViLWJ1ZmZlcnMgcHJvZHVjZWQgKi8KKwlzaXplX3Qgc3ViYnVmc19jb25zdW1lZDsJLyogY291bnQgb2Ygc3ViLWJ1ZmZlcnMgY29uc3VtZWQgKi8KKwlzdHJ1Y3QgcmNoYW4gKmNoYW47CQkvKiBhc3NvY2lhdGVkIGNoYW5uZWwgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3dhaXQ7CS8qIHJlYWRlciB3YWl0IHF1ZXVlICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdha2VfcmVhZGVyczsgLyogcmVhZGVyIHdha2UtdXAgd29yayBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CQkvKiBjaGFubmVsIGZpbGUgZGVudHJ5ICovCisJc3RydWN0IGtyZWYga3JlZjsJCS8qIGNoYW5uZWwgYnVmZmVyIHJlZmNvdW50ICovCisJc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5OwkvKiBhcnJheSBvZiBjdXJyZW50IGJ1ZmZlciBwYWdlcyAqLworCXVuc2lnbmVkIGludCBwYWdlX2NvdW50OwkvKiBudW1iZXIgb2YgY3VycmVudCBidWZmZXIgcGFnZXMgKi8KKwl1bnNpZ25lZCBpbnQgZmluYWxpemVkOwkJLyogYnVmZmVyIGhhcyBiZWVuIGZpbmFsaXplZCAqLworCXNpemVfdCAqcGFkZGluZzsJCS8qIHBhZGRpbmcgY291bnRzIHBlciBzdWItYnVmZmVyICovCisJc2l6ZV90IHByZXZfcGFkZGluZzsJCS8qIHRlbXBvcmFyeSB2YXJpYWJsZSAqLworCXNpemVfdCBieXRlc19jb25zdW1lZDsJCS8qIGJ5dGVzIGNvbnN1bWVkIGluIGN1ciByZWFkIHN1YmJ1ZiAqLworCXVuc2lnbmVkIGludCBjcHU7CQkvKiB0aGlzIGJ1ZidzIGNwdSAqLworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qCisgKiBSZWxheSBjaGFubmVsIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCByY2hhbgoreworCXUzMiB2ZXJzaW9uOwkJCS8qIHRoZSB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0ICovCisJc2l6ZV90IHN1YmJ1Zl9zaXplOwkJLyogc3ViLWJ1ZmZlciBzaXplICovCisJc2l6ZV90IG5fc3ViYnVmczsJCS8qIG51bWJlciBvZiBzdWItYnVmZmVycyBwZXIgYnVmZmVyICovCisJc2l6ZV90IGFsbG9jX3NpemU7CQkvKiB0b3RhbCBidWZmZXIgc2l6ZSBhbGxvY2F0ZWQgKi8KKwlzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzICpjYjsJLyogY2xpZW50IGNhbGxiYWNrcyAqLworCXN0cnVjdCBrcmVmIGtyZWY7CQkvKiBjaGFubmVsIHJlZmNvdW50ICovCisJdm9pZCAqcHJpdmF0ZV9kYXRhOwkJLyogZm9yIHVzZXItZGVmaW5lZCBkYXRhICovCisJc2l6ZV90IGxhc3RfdG9vYmlnOwkJLyogdHJpZWQgdG8gbG9nIGV2ZW50ID4gc3ViYnVmIHNpemUgKi8KKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWZbTlJfQ1BVU107IC8qIHBlci1jcHUgY2hhbm5lbCBidWZmZXJzICovCit9OworCisvKgorICogUmVsYXkgY2hhbm5lbCBjbGllbnQgY2FsbGJhY2tzCisgKi8KK3N0cnVjdCByY2hhbl9jYWxsYmFja3MKK3sKKwkvKgorCSAqIHN1YmJ1Zl9zdGFydCAtIGNhbGxlZCBvbiBidWZmZXItc3dpdGNoIHRvIGEgbmV3IHN1Yi1idWZmZXIKKwkgKiBAYnVmOiB0aGUgY2hhbm5lbCBidWZmZXIgY29udGFpbmluZyB0aGUgbmV3IHN1Yi1idWZmZXIKKwkgKiBAc3ViYnVmOiB0aGUgc3RhcnQgb2YgdGhlIG5ldyBzdWItYnVmZmVyCisJICogQHByZXZfc3ViYnVmOiB0aGUgc3RhcnQgb2YgdGhlIHByZXZpb3VzIHN1Yi1idWZmZXIKKwkgKiBAcHJldl9wYWRkaW5nOiB1bnVzZWQgc3BhY2UgYXQgdGhlIGVuZCBvZiBwcmV2aW91cyBzdWItYnVmZmVyCisJICoKKwkgKiBUaGUgY2xpZW50IHNob3VsZCByZXR1cm4gMSB0byBjb250aW51ZSBsb2dnaW5nLCAwIHRvIHN0b3AKKwkgKiBsb2dnaW5nLgorCSAqCisJICogTk9URTogc3ViYnVmX3N0YXJ0IHdpbGwgYWxzbyBiZSBpbnZva2VkIHdoZW4gdGhlIGJ1ZmZlciBpcworCSAqICAgICAgIGNyZWF0ZWQsIHNvIHRoYXQgdGhlIGZpcnN0IHN1Yi1idWZmZXIgY2FuIGJlIGluaXRpYWxpemVkCisJICogICAgICAgaWYgbmVjZXNzYXJ5LiAgSW4gdGhpcyBjYXNlLCBwcmV2X3N1YmJ1ZiB3aWxsIGJlIE5VTEwuCisJICoKKwkgKiBOT1RFOiB0aGUgY2xpZW50IGNhbiByZXNlcnZlIGJ5dGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldworCSAqICAgICAgIHN1Yi1idWZmZXIgYnkgY2FsbGluZyBzdWJidWZfc3RhcnRfcmVzZXJ2ZSgpIGluIHRoaXMgY2FsbGJhY2suCisJICovCisJaW50ICgqc3ViYnVmX3N0YXJ0KSAoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJICAgICB2b2lkICpzdWJidWYsCisJCQkgICAgIHZvaWQgKnByZXZfc3ViYnVmLAorCQkJICAgICBzaXplX3QgcHJldl9wYWRkaW5nKTsKKworCS8qCisJICogYnVmX21hcHBlZCAtIHJlbGF5IGJ1ZmZlciBtbWFwIG5vdGlmaWNhdGlvbgorCSAqIEBidWY6IHRoZSBjaGFubmVsIGJ1ZmZlcgorCSAqIEBmaWxwOiByZWxheSBmaWxlIHBvaW50ZXIKKwkgKgorCSAqIENhbGxlZCB3aGVuIGEgcmVsYXkgZmlsZSBpcyBzdWNjZXNzZnVsbHkgbW1hcHBlZAorCSAqLworICAgICAgICB2b2lkICgqYnVmX21hcHBlZCkoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJICAgc3RydWN0IGZpbGUgKmZpbHApOworCisJLyoKKwkgKiBidWZfdW5tYXBwZWQgLSByZWxheSBidWZmZXIgdW5tYXAgbm90aWZpY2F0aW9uCisJICogQGJ1ZjogdGhlIGNoYW5uZWwgYnVmZmVyCisJICogQGZpbHA6IHJlbGF5IGZpbGUgcG9pbnRlcgorCSAqCisJICogQ2FsbGVkIHdoZW4gYSByZWxheSBmaWxlIGlzIHN1Y2Nlc3NmdWxseSB1bm1hcHBlZAorCSAqLworICAgICAgICB2b2lkICgqYnVmX3VubWFwcGVkKShzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxwKTsKKwkvKgorCSAqIGNyZWF0ZV9idWZfZmlsZSAtIGNyZWF0ZSBmaWxlIHRvIHJlcHJlc2VudCBhIHJlbGF5IGNoYW5uZWwgYnVmZmVyCisJICogQGZpbGVuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBjcmVhdGUKKwkgKiBAcGFyZW50OiB0aGUgcGFyZW50IG9mIHRoZSBmaWxlIHRvIGNyZWF0ZQorCSAqIEBtb2RlOiB0aGUgbW9kZSBvZiB0aGUgZmlsZSB0byBjcmVhdGUKKwkgKiBAYnVmOiB0aGUgY2hhbm5lbCBidWZmZXIKKwkgKiBAaXNfZ2xvYmFsOiBvdXRwYXJhbSAtIHNldCBub24temVybyBpZiB0aGUgYnVmZmVyIHNob3VsZCBiZSBnbG9iYWwKKwkgKgorCSAqIENhbGxlZCBkdXJpbmcgcmVsYXlfb3BlbigpLCBvbmNlIGZvciBlYWNoIHBlci1jcHUgYnVmZmVyLAorCSAqIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gY3JlYXRlIGEgZmlsZSB0byBiZSB1c2VkIHRvCisJICogcmVwcmVzZW50IHRoZSBjb3JyZXNwb25kaW5nIGNoYW5uZWwgYnVmZmVyLiAgSWYgdGhlIGZpbGUgaXMKKwkgKiBjcmVhdGVkIG91dHNpZGUgb2YgcmVsYXksIHRoZSBwYXJlbnQgbXVzdCBhbHNvIGV4aXN0IGluCisJICogdGhhdCBmaWxlc3lzdGVtLgorCSAqCisJICogVGhlIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gdGhlIGRlbnRyeSBvZiB0aGUgZmlsZSBjcmVhdGVkCisJICogdG8gcmVwcmVzZW50IHRoZSByZWxheSBidWZmZXIuCisJICoKKwkgKiBTZXR0aW5nIHRoZSBpc19nbG9iYWwgb3V0cGFyYW0gdG8gYSBub24temVybyB2YWx1ZSB3aWxsCisJICogY2F1c2UgcmVsYXlfb3BlbigpIHRvIGNyZWF0ZSBhIHNpbmdsZSBnbG9iYWwgYnVmZmVyIHJhdGhlcgorCSAqIHRoYW4gdGhlIGRlZmF1bHQgc2V0IG9mIHBlci1jcHUgYnVmZmVycy4KKwkgKgorCSAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5ZnMudHh0IGZvciBtb3JlIGluZm8uCisJICovCisJc3RydWN0IGRlbnRyeSAqKCpjcmVhdGVfYnVmX2ZpbGUpKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkJICBpbnQgbW9kZSwKKwkJCQkJICBzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisJCQkJCSAgaW50ICppc19nbG9iYWwpOworCisJLyoKKwkgKiByZW1vdmVfYnVmX2ZpbGUgLSByZW1vdmUgZmlsZSByZXByZXNlbnRpbmcgYSByZWxheSBjaGFubmVsIGJ1ZmZlcgorCSAqIEBkZW50cnk6IHRoZSBkZW50cnkgb2YgdGhlIGZpbGUgdG8gcmVtb3ZlCisJICoKKwkgKiBDYWxsZWQgZHVyaW5nIHJlbGF5X2Nsb3NlKCksIG9uY2UgZm9yIGVhY2ggcGVyLWNwdSBidWZmZXIsCisJICogdG8gYWxsb3cgdGhlIGNsaWVudCB0byByZW1vdmUgYSBmaWxlIHVzZWQgdG8gcmVwcmVzZW50IGEKKwkgKiBjaGFubmVsIGJ1ZmZlci4KKwkgKgorCSAqIFRoZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUgaWYgbm90LgorCSAqLworCWludCAoKnJlbW92ZV9idWZfZmlsZSkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK307CisKKy8qCisgKiBDT05GSUdfUkVMQVkga2VybmVsIEFQSSwga2VybmVsL3JlbGF5LmMKKyAqLworCitzdHJ1Y3QgcmNoYW4gKnJlbGF5X29wZW4oY29uc3QgY2hhciAqYmFzZV9maWxlbmFtZSwKKwkJCSBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkgc2l6ZV90IHN1YmJ1Zl9zaXplLAorCQkJIHNpemVfdCBuX3N1YmJ1ZnMsCisJCQkgc3RydWN0IHJjaGFuX2NhbGxiYWNrcyAqY2IpOworZXh0ZXJuIHZvaWQgcmVsYXlfY2xvc2Uoc3RydWN0IHJjaGFuICpjaGFuKTsKK2V4dGVybiB2b2lkIHJlbGF5X2ZsdXNoKHN0cnVjdCByY2hhbiAqY2hhbik7CitleHRlcm4gdm9pZCByZWxheV9zdWJidWZzX2NvbnN1bWVkKHN0cnVjdCByY2hhbiAqY2hhbiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3B1LAorCQkJCSAgIHNpemVfdCBjb25zdW1lZCk7CitleHRlcm4gdm9pZCByZWxheV9yZXNldChzdHJ1Y3QgcmNoYW4gKmNoYW4pOworZXh0ZXJuIGludCByZWxheV9idWZfZnVsbChzdHJ1Y3QgcmNoYW5fYnVmICpidWYpOworCitleHRlcm4gc2l6ZV90IHJlbGF5X3N3aXRjaF9zdWJidWYoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJCSAgc2l6ZV90IGxlbmd0aCk7CisKKy8qKgorICoJcmVsYXlfd3JpdGUgLSB3cml0ZSBkYXRhIGludG8gdGhlIGNoYW5uZWwKKyAqCUBjaGFuOiByZWxheSBjaGFubmVsCisgKglAZGF0YTogZGF0YSB0byBiZSB3cml0dGVuCisgKglAbGVuZ3RoOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqCisgKglXcml0ZXMgZGF0YSBpbnRvIHRoZSBjdXJyZW50IGNwdSdzIGNoYW5uZWwgYnVmZmVyLgorICoKKyAqCVByb3RlY3RzIHRoZSBidWZmZXIgYnkgZGlzYWJsaW5nIGludGVycnVwdHMuICBVc2UgdGhpcworICoJaWYgeW91IG1pZ2h0IGJlIGxvZ2dpbmcgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gIFRyeQorICoJX19yZWxheV93cml0ZSgpIGlmIHlvdSBrbm93IHlvdQl3b24ndCBiZSBsb2dnaW5nIGZyb20KKyAqCWludGVycnVwdCBjb250ZXh0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsYXlfd3JpdGUoc3RydWN0IHJjaGFuICpjaGFuLAorCQkJICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgICAgICAgc2l6ZV90IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByY2hhbl9idWYgKmJ1ZjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlidWYgPSBjaGFuLT5idWZbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlpZiAodW5saWtlbHkoYnVmLT5vZmZzZXQgKyBsZW5ndGggPiBjaGFuLT5zdWJidWZfc2l6ZSkpCisJCWxlbmd0aCA9IHJlbGF5X3N3aXRjaF9zdWJidWYoYnVmLCBsZW5ndGgpOworCW1lbWNweShidWYtPmRhdGEgKyBidWYtPm9mZnNldCwgZGF0YSwgbGVuZ3RoKTsKKwlidWYtPm9mZnNldCArPSBsZW5ndGg7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKioKKyAqCV9fcmVsYXlfd3JpdGUgLSB3cml0ZSBkYXRhIGludG8gdGhlIGNoYW5uZWwKKyAqCUBjaGFuOiByZWxheSBjaGFubmVsCisgKglAZGF0YTogZGF0YSB0byBiZSB3cml0dGVuCisgKglAbGVuZ3RoOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqCisgKglXcml0ZXMgZGF0YSBpbnRvIHRoZSBjdXJyZW50IGNwdSdzIGNoYW5uZWwgYnVmZmVyLgorICoKKyAqCVByb3RlY3RzIHRoZSBidWZmZXIgYnkgZGlzYWJsaW5nIHByZWVtcHRpb24uICBVc2UKKyAqCXJlbGF5X3dyaXRlKCkgaWYgeW91IG1pZ2h0IGJlIGxvZ2dpbmcgZnJvbSBpbnRlcnJ1cHQKKyAqCWNvbnRleHQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbGF5X3dyaXRlKHN0cnVjdCByY2hhbiAqY2hhbiwKKwkJCQkgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWY7CisKKwlidWYgPSBjaGFuLT5idWZbZ2V0X2NwdSgpXTsKKwlpZiAodW5saWtlbHkoYnVmLT5vZmZzZXQgKyBsZW5ndGggPiBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplKSkKKwkJbGVuZ3RoID0gcmVsYXlfc3dpdGNoX3N1YmJ1ZihidWYsIGxlbmd0aCk7CisJbWVtY3B5KGJ1Zi0+ZGF0YSArIGJ1Zi0+b2Zmc2V0LCBkYXRhLCBsZW5ndGgpOworCWJ1Zi0+b2Zmc2V0ICs9IGxlbmd0aDsKKwlwdXRfY3B1KCk7Cit9CisKKy8qKgorICoJcmVsYXlfcmVzZXJ2ZSAtIHJlc2VydmUgc2xvdCBpbiBjaGFubmVsIGJ1ZmZlcgorICoJQGNoYW46IHJlbGF5IGNoYW5uZWwKKyAqCUBsZW5ndGg6IG51bWJlciBvZiBieXRlcyB0byByZXNlcnZlCisgKgorICoJUmV0dXJucyBwb2ludGVyIHRvIHJlc2VydmVkIHNsb3QsIE5VTEwgaWYgZnVsbC4KKyAqCisgKglSZXNlcnZlcyBhIHNsb3QgaW4gdGhlIGN1cnJlbnQgY3B1J3MgY2hhbm5lbCBidWZmZXIuCisgKglEb2VzIG5vdCBwcm90ZWN0IHRoZSBidWZmZXIgYXQgYWxsIC0gY2FsbGVyIG11c3QgcHJvdmlkZQorICoJYXBwcm9wcmlhdGUgc3luY2hyb25pemF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnJlbGF5X3Jlc2VydmUoc3RydWN0IHJjaGFuICpjaGFuLCBzaXplX3QgbGVuZ3RoKQoreworCXZvaWQgKnJlc2VydmVkOworCXN0cnVjdCByY2hhbl9idWYgKmJ1ZiA9IGNoYW4tPmJ1ZltzbXBfcHJvY2Vzc29yX2lkKCldOworCisJaWYgKHVubGlrZWx5KGJ1Zi0+b2Zmc2V0ICsgbGVuZ3RoID4gYnVmLT5jaGFuLT5zdWJidWZfc2l6ZSkpIHsKKwkJbGVuZ3RoID0gcmVsYXlfc3dpdGNoX3N1YmJ1ZihidWYsIGxlbmd0aCk7CisJCWlmICghbGVuZ3RoKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJlc2VydmVkID0gYnVmLT5kYXRhICsgYnVmLT5vZmZzZXQ7CisJYnVmLT5vZmZzZXQgKz0gbGVuZ3RoOworCisJcmV0dXJuIHJlc2VydmVkOworfQorCisvKioKKyAqCXN1YmJ1Zl9zdGFydF9yZXNlcnZlIC0gcmVzZXJ2ZSBieXRlcyBhdCB0aGUgc3RhcnQgb2YgYSBzdWItYnVmZmVyCisgKglAYnVmOiByZWxheSBjaGFubmVsIGJ1ZmZlcgorICoJQGxlbmd0aDogbnVtYmVyIG9mIGJ5dGVzIHRvIHJlc2VydmUKKyAqCisgKglIZWxwZXIgZnVuY3Rpb24gdXNlZCB0byByZXNlcnZlIGJ5dGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAqCWEgc3ViLWJ1ZmZlciBpbiB0aGUgc3ViYnVmX3N0YXJ0KCkgY2FsbGJhY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdWJidWZfc3RhcnRfcmVzZXJ2ZShzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisJCQkJCXNpemVfdCBsZW5ndGgpCit7CisJQlVHX09OKGxlbmd0aCA+PSBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplIC0gMSk7CisJYnVmLT5vZmZzZXQgPSBsZW5ndGg7Cit9CisKKy8qCisgKiBleHBvcnRlZCByZWxheSBmaWxlIG9wZXJhdGlvbnMsIGtlcm5lbC9yZWxheS5jCisgKi8KK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlbGF5X2ZpbGVfb3BlcmF0aW9uczsKKworI2VuZGlmIC8qIF9MSU5VWF9SRUxBWV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCmluZGV4IDBiMmJhNjcuLmI3MzlhYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMuaApAQCAtMTEsOCArMTEsNiBAQAogI2lmbmRlZiBfTElOVVhfUlRDX0hfCiAjZGVmaW5lIF9MSU5VWF9SVENfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCiAvKgogICogVGhlIHN0cnVjdCB1c2VkIHRvIHBhc3MgZGF0YSB2aWEgdGhlIGZvbGxvd2luZyBpb2N0bC4gU2ltaWxhciB0byB0aGUKICAqIHN0cnVjdCB0bSBpbiA8dGltZS5oPiwgYnV0IGl0IG5lZWRzIHRvIGJlIGhlcmUgc28gdGhhdCB0aGUga2VybmVsIApAQCAtOTUsNiArOTMsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKIHR5cGVkZWYgc3RydWN0IHJ0Y190YXNrIHsKIAl2b2lkICgqZnVuYykodm9pZCAqcHJpdmF0ZV9kYXRhKTsKIAl2b2lkICpwcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCBkNTA0ODJiLi5kZjBjZGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTE5OSw2ICsxOTksNyBAQAogI2RlZmluZSBSVFBST1RfQklSRAkxMgkvKiBCSVJEICovCiAjZGVmaW5lIFJUUFJPVF9ETlJPVVRFRAkxMwkvKiBERUNuZXQgcm91dGluZyBkYWVtb24gKi8KICNkZWZpbmUgUlRQUk9UX1hPUlAJMTQJLyogWE9SUCAqLworI2RlZmluZSBSVFBST1RfTlRLCTE1CS8qIE5ldHN1a3VrdSAqLwogCiAvKiBydG1fc2NvcGUKIApAQCAtNzMzLDYgKzczNCw4IEBACiAjZGVmaW5lIElGTEFfTUFQIElGTEFfTUFQCiAJSUZMQV9XRUlHSFQsCiAjZGVmaW5lIElGTEFfV0VJR0hUIElGTEFfV0VJR0hUCisJSUZMQV9PUEVSU1RBVEUsCisJSUZMQV9MSU5LTU9ERSwKIAlfX0lGTEFfTUFYCiB9OwogCkBAIC04MzYsNiArODM5LDcgQEAKICNkZWZpbmUgUlRNR1JQX0lQVjRfSUZBRERSCTB4MTAKICNkZWZpbmUgUlRNR1JQX0lQVjRfTVJPVVRFCTB4MjAKICNkZWZpbmUgUlRNR1JQX0lQVjRfUk9VVEUJMHg0MAorI2RlZmluZSBSVE1HUlBfSVBWNF9SVUxFCTB4ODAKIAogI2RlZmluZSBSVE1HUlBfSVBWNl9JRkFERFIJMHgxMDAKICNkZWZpbmUgUlRNR1JQX0lQVjZfTVJPVVRFCTB4MjAwCkBAIC04NjYsNyArODcwLDggQEAKICNkZWZpbmUJUlROTEdSUF9JUFY0X01ST1VURQlSVE5MR1JQX0lQVjRfTVJPVVRFCiAJUlROTEdSUF9JUFY0X1JPVVRFLAogI2RlZmluZSBSVE5MR1JQX0lQVjRfUk9VVEUJUlROTEdSUF9JUFY0X1JPVVRFCi0JUlROTEdSUF9OT1AxLAorCVJUTkxHUlBfSVBWNF9SVUxFLAorI2RlZmluZSBSVE5MR1JQX0lQVjRfUlVMRQlSVE5MR1JQX0lQVjRfUlVMRQogCVJUTkxHUlBfSVBWNl9JRkFERFIsCiAjZGVmaW5lIFJUTkxHUlBfSVBWNl9JRkFERFIJUlROTEdSUF9JUFY2X0lGQUREUgogCVJUTkxHUlBfSVBWNl9NUk9VVEUsCkBAIC05MDUsNiArOTEwLDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiBleHRlcm4gc2l6ZV90IHJ0YXR0cl9zdHJsY3B5KGNoYXIgKmRlc3QsIGNvbnN0IHN0cnVjdCBydGF0dHIgKnJ0YSwgc2l6ZV90IHNpemUpOwogc3RhdGljIF9faW5saW5lX18gaW50IHJ0YXR0cl9zdHJjbXAoY29uc3Qgc3RydWN0IHJ0YXR0ciAqcnRhLCBjb25zdCBjaGFyICpzdHIpCkBAIC0xMDM2LDI0ICsxMDQyLDE3IEBACiAKIGV4dGVybiB2b2lkIHJ0bXNnX2lmaW5mbyhpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhbmdlKTsKIAotZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgcnRubF9zZW07Ci0KLSNkZWZpbmUgcnRubF9zaGxvY2soKQkJZG93bigmcnRubF9zZW0pCi0jZGVmaW5lIHJ0bmxfc2hsb2NrX25vd2FpdCgpCWRvd25fdHJ5bG9jaygmcnRubF9zZW0pCi0KLSNkZWZpbmUgcnRubF9zaHVubG9jaygpCWRvIHsgdXAoJnJ0bmxfc2VtKTsgXAotCQkgICAgICAgICAgICAgaWYgKHJ0bmwgJiYgcnRubC0+c2tfcmVjZWl2ZV9xdWV1ZS5xbGVuKSBcCi0JCQkJICAgICBydG5sLT5za19kYXRhX3JlYWR5KHJ0bmwsIDApOyBcCi0JCSAgICAgICAgfSB3aGlsZSgwKQotCisvKiBSVE5MIGlzIHVzZWQgYXMgYSBnbG9iYWwgbG9jayBmb3IgYWxsIGNoYW5nZXMgdG8gbmV0d29yayBjb25maWd1cmF0aW9uICAqLwogZXh0ZXJuIHZvaWQgcnRubF9sb2NrKHZvaWQpOwotZXh0ZXJuIGludCBydG5sX2xvY2tfaW50ZXJydXB0aWJsZSh2b2lkKTsKIGV4dGVybiB2b2lkIHJ0bmxfdW5sb2NrKHZvaWQpOworZXh0ZXJuIGludCBydG5sX3RyeWxvY2sodm9pZCk7CisKIGV4dGVybiB2b2lkIHJ0bmV0bGlua19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19ydG5sX3VubG9jayh2b2lkKTsKIAogI2RlZmluZSBBU1NFUlRfUlROTCgpIGRvIHsgXAotCWlmICh1bmxpa2VseShkb3duX3RyeWxvY2soJnJ0bmxfc2VtKSA9PSAwKSkgeyBcCi0JCXVwKCZydG5sX3NlbSk7IFwKKwlpZiAodW5saWtlbHkocnRubF90cnlsb2NrKCkpKSB7IFwKKwkJcnRubF91bmxvY2soKTsgXAogCQlwcmludGsoS0VSTl9FUlIgIlJUTkw6IGFzc2VydGlvbiBmYWlsZWQgYXQgJXMgKCVkKVxuIiwgXAogCQkgICAgICAgX19GSUxFX18sICBfX0xJTkVfXyk7IFwKIAkJZHVtcF9zdGFjaygpOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggYjZmNTFlMy4uZTAwNTRjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMjA2LDExICsyMDYsMTEgQEAKIGV4dGVybiB2b2lkIHNjaGVkdWxlcl90aWNrKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQCi1leHRlcm4gdm9pZCBzb2Z0bG9ja3VwX3RpY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgc29mdGxvY2t1cF90aWNrKHZvaWQpOwogZXh0ZXJuIHZvaWQgc3Bhd25fc29mdGxvY2t1cF90YXNrKHZvaWQpOwogZXh0ZXJuIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc29mdGxvY2t1cF90aWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlubGluZSB2b2lkIHNvZnRsb2NrdXBfdGljayh2b2lkKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIHNwYXduX3NvZnRsb2NrdXBfdGFzayh2b2lkKQpAQCAtMjk4LDggKzI5OCw5IEBACiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCQl1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIAl2b2lkICgqdW5tYXBfYXJlYSkgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOwotICAgICAgICB1bnNpZ25lZCBsb25nIG1tYXBfYmFzZTsJCS8qIGJhc2Ugb2YgbW1hcCBhcmVhICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgY2FjaGVkX2hvbGVfc2l6ZTsgICAgICAgICAvKiBpZiBub24temVybywgdGhlIGxhcmdlc3QgaG9sZSBiZWxvdyBmcmVlX2FyZWFfY2FjaGUgKi8KKwl1bnNpZ25lZCBsb25nIG1tYXBfYmFzZTsJCS8qIGJhc2Ugb2YgbW1hcCBhcmVhICovCisJdW5zaWduZWQgbG9uZyB0YXNrX3NpemU7CQkvKiBzaXplIG9mIHRhc2sgdm0gc3BhY2UgKi8KKwl1bnNpZ25lZCBsb25nIGNhY2hlZF9ob2xlX3NpemU7ICAgICAgICAgLyogaWYgbm9uLXplcm8sIHRoZSBsYXJnZXN0IGhvbGUgYmVsb3cgZnJlZV9hcmVhX2NhY2hlICovCiAJdW5zaWduZWQgbG9uZyBmcmVlX2FyZWFfY2FjaGU7CQkvKiBmaXJzdCBob2xlIG9mIHNpemUgY2FjaGVkX2hvbGVfc2l6ZSBvciBsYXJnZXIgKi8KIAlwZ2RfdCAqIHBnZDsKIAlhdG9taWNfdCBtbV91c2VyczsJCQkvKiBIb3cgbWFueSB1c2VycyB3aXRoIHVzZXIgc3BhY2U/ICovCkBAIC03MDUsNiArNzA2LDcgQEAKIAlwcmlvX2FycmF5X3QgKmFycmF5OwogCiAJdW5zaWduZWQgc2hvcnQgaW9wcmlvOworCXVuc2lnbmVkIGludCBidHJhY2Vfc2VxOwogCiAJdW5zaWduZWQgbG9uZyBzbGVlcF9hdmc7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVzdGFtcCwgbGFzdF9yYW47CkBAIC04NjcsNiArODY5LDcgQEAKIAlzdHJ1Y3QgY3B1c2V0ICpjcHVzZXQ7CiAJbm9kZW1hc2tfdCBtZW1zX2FsbG93ZWQ7CiAJaW50IGNwdXNldF9tZW1zX2dlbmVyYXRpb247CisJaW50IGNwdXNldF9tZW1fc3ByZWFkX3JvdG9yOwogI2VuZGlmCiAJYXRvbWljX3QgZnNfZXhjbDsJLyogaG9sZGluZyBmcyBleGNsdXNpdmUgcmVzb3VyY2VzICovCiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKQEAgLTg5MSw3ICs4OTQsNiBAQAogfQogCiBleHRlcm4gdm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwotZXh0ZXJuIHZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogI2RlZmluZSBnZXRfdGFza19zdHJ1Y3QodHNrKSBkbyB7IGF0b21pY19pbmMoJih0c2spLT51c2FnZSk7IH0gd2hpbGUoMCkKIAogZXh0ZXJuIHZvaWQgX19wdXRfdGFza19zdHJ1Y3RfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApOwpAQCAtOTI4LDYgKzkzMCw5IEBACiAjZGVmaW5lIFBGX0JPUlJPV0VEX01NCTB4MDA0MDAwMDAJLyogSSBhbSBhIGt0aHJlYWQgZG9pbmcgdXNlX21tICovCiAjZGVmaW5lIFBGX1JBTkRPTUlaRQkweDAwODAwMDAwCS8qIHJhbmRvbWl6ZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgKi8KICNkZWZpbmUgUEZfU1dBUFdSSVRFCTB4MDEwMDAwMDAJLyogQWxsb3dlZCB0byB3cml0ZSB0byBzd2FwICovCisjZGVmaW5lIFBGX1NQUkVBRF9QQUdFCTB4MDQwMDAwMDAJLyogU3ByZWFkIHBhZ2UgY2FjaGUgb3ZlciBjcHVzZXQgKi8KKyNkZWZpbmUgUEZfU1BSRUFEX1NMQUIJMHgwODAwMDAwMAkvKiBTcHJlYWQgc29tZSBzbGFiIGNhY2hlcyBvdmVyIGNwdXNldCAqLworI2RlZmluZSBQRl9NRU1QT0xJQ1kJMHgxMDAwMDAwMAkvKiBOb24tZGVmYXVsdCBOVU1BIG1lbXBvbGljeSAqLwogCiAvKgogICogT25seSB0aGUgX2N1cnJlbnRfIHRhc2sgY2FuIHJlYWQvd3JpdGUgdG8gdHNrLT5mbGFncywgYnV0IG90aGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggN2NiZWY0OC4uM2MxOWJlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtMTA0MCw2ICsxMDQwLDExIEBACiAgKglAZWZmZWN0aXZlIGNvbnRhaW5zIHRoZSBlZmZlY3RpdmUgY2FwYWJpbGl0eSBzZXQuCiAgKglAaW5oZXJpdGFibGUgY29udGFpbnMgdGhlIGluaGVyaXRhYmxlIGNhcGFiaWxpdHkgc2V0LgogICoJQHBlcm1pdHRlZCBjb250YWlucyB0aGUgcGVybWl0dGVkIGNhcGFiaWxpdHkgc2V0LgorICogQGNhcGFibGU6CisgKglDaGVjayB3aGV0aGVyIHRoZSBAdHNrIHByb2Nlc3MgaGFzIHRoZSBAY2FwIGNhcGFiaWxpdHkuCisgKglAdHNrIGNvbnRhaW5zIHRoZSB0YXNrX3N0cnVjdCBmb3IgdGhlIHByb2Nlc3MuCisgKglAY2FwIGNvbnRhaW5zIHRoZSBjYXBhYmlsaXR5IDxpbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaD4uCisgKglSZXR1cm4gMCBpZiB0aGUgY2FwYWJpbGl0eSBpcyBncmFudGVkIGZvciBAdHNrLgogICogQGFjY3Q6CiAgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBlbmFibGluZyBvciBkaXNhYmxpbmcgcHJvY2VzcyBhY2NvdW50aW5nLiAgSWYKICAqCWFjY291bnRpbmcgaXMgYmVpbmcgZW5hYmxlZCwgdGhlbiBAZmlsZSByZWZlcnMgdG8gdGhlIG9wZW4gZmlsZSB1c2VkIHRvCkBAIC0xMDUzLDExICsxMDU4LDYgQEAKICAqCUB0YWJsZSBjb250YWlucyB0aGUgY3RsX3RhYmxlIHN0cnVjdHVyZSBmb3IgdGhlIHN5c2N0bCB2YXJpYWJsZS4KICAqCUBvcCBjb250YWlucyB0aGUgb3BlcmF0aW9uICgwMDEgPSBzZWFyY2gsIDAwMiA9IHdyaXRlLCAwMDQgPSByZWFkKS4KICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KLSAqIEBjYXBhYmxlOgotICoJQ2hlY2sgd2hldGhlciB0aGUgQHRzayBwcm9jZXNzIGhhcyB0aGUgQGNhcCBjYXBhYmlsaXR5LgotICoJQHRzayBjb250YWlucyB0aGUgdGFza19zdHJ1Y3QgZm9yIHRoZSBwcm9jZXNzLgotICoJQGNhcCBjb250YWlucyB0aGUgY2FwYWJpbGl0eSA8aW5jbHVkZS9saW51eC9jYXBhYmlsaXR5Lmg+LgotICoJUmV0dXJuIDAgaWYgdGhlIGNhcGFiaWxpdHkgaXMgZ3JhbnRlZCBmb3IgQHRzay4KICAqIEBzeXNsb2c6CiAgKglDaGVjayBwZXJtaXNzaW9uIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGtlcm5lbCBtZXNzYWdlIHJpbmcgb3IgY2hhbmdpbmcKICAqCWxvZ2dpbmcgdG8gdGhlIGNvbnNvbGUuCkBAIC0xMDk5LDkgKzEwOTksOSBAQAogCQkJICAgIGtlcm5lbF9jYXBfdCAqIGVmZmVjdGl2ZSwKIAkJCSAgICBrZXJuZWxfY2FwX3QgKiBpbmhlcml0YWJsZSwKIAkJCSAgICBrZXJuZWxfY2FwX3QgKiBwZXJtaXR0ZWQpOworCWludCAoKmNhcGFibGUpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2ssIGludCBjYXApOwogCWludCAoKmFjY3QpIChzdHJ1Y3QgZmlsZSAqIGZpbGUpOwogCWludCAoKnN5c2N0bCkgKHN0cnVjdCBjdGxfdGFibGUgKiB0YWJsZSwgaW50IG9wKTsKLQlpbnQgKCpjYXBhYmxlKSAoc3RydWN0IHRhc2tfc3RydWN0ICogdHNrLCBpbnQgY2FwKTsKIAlpbnQgKCpxdW90YWN0bCkgKGludCBjbWRzLCBpbnQgdHlwZSwgaW50IGlkLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYik7CiAJaW50ICgqcXVvdGFfb24pIChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KTsKIAlpbnQgKCpzeXNsb2cpIChpbnQgdHlwZSk7CkBAIC0xMjg2LDcgKzEyODYsOCBAQAogCWludCAoKnNvY2tldF9zZXRzb2Nrb3B0KSAoc3RydWN0IHNvY2tldCAqIHNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUpOwogCWludCAoKnNvY2tldF9zaHV0ZG93bikgKHN0cnVjdCBzb2NrZXQgKiBzb2NrLCBpbnQgaG93KTsKIAlpbnQgKCpzb2NrZXRfc29ja19yY3Zfc2tiKSAoc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKiBza2IpOwotCWludCAoKnNvY2tldF9nZXRwZWVyc2VjKSAoc3RydWN0IHNvY2tldCAqc29jaywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuLCB1bnNpZ25lZCBsZW4pOworCWludCAoKnNvY2tldF9nZXRwZWVyc2VjX3N0cmVhbSkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbiwgdW5zaWduZWQgbGVuKTsKKwlpbnQgKCpzb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbSkgKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKipzZWNkYXRhLCB1MzIgKnNlY2xlbik7CiAJaW50ICgqc2tfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5KTsKIAl2b2lkICgqc2tfZnJlZV9zZWN1cml0eSkgKHN0cnVjdCBzb2NrICpzayk7CiAJdW5zaWduZWQgaW50ICgqc2tfZ2V0c2lkKSAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2kgKmZsLCB1OCBkaXIpOwpAQCAtMTM0Niw2ICsxMzQ3LDExIEBACiAJc2VjdXJpdHlfb3BzLT5jYXBzZXRfc2V0ICh0YXJnZXQsIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+Y2FwYWJsZSh0c2ssIGNhcCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2FjY3QgKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiBzZWN1cml0eV9vcHMtPmFjY3QgKGZpbGUpOwpAQCAtMjA0OSw2ICsyMDU1LDExIEBACiAJY2FwX2NhcHNldF9zZXQgKHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCkKK3sKKwlyZXR1cm4gY2FwX2NhcGFibGUodHNrLCBjYXApOworfQorCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9hY2N0IChzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTI3NDEsMTAgKzI3NTIsMTYgQEAKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfc29ja19yY3Zfc2tiIChzaywgc2tiKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWMoc3RydWN0IHNvY2tldCAqc29jaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKLQkJCQkJICAgICBpbnQgX191c2VyICpvcHRsZW4sIHVuc2lnbmVkIGxlbikKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NvY2tldF9nZXRwZWVyc2VjX3N0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkJICAgIGludCBfX3VzZXIgKm9wdGxlbiwgdW5zaWduZWQgbGVuKQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9nZXRwZWVyc2VjKHNvY2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pOworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9nZXRwZWVyc2VjX3N0cmVhbShzb2NrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqKnNlY2RhdGEsCisJCQkJCQkgICB1MzIgKnNlY2xlbikKK3sKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShza2IsIHNlY2RhdGEsIHNlY2xlbik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NrX2FsbG9jKHN0cnVjdCBzb2NrICpzaywgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHkpCkBAIC0yODYzLDggKzI4ODAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWMoc3RydWN0IHNvY2tldCAqc29jaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKLQkJCQkJICAgICBpbnQgX191c2VyICpvcHRsZW4sIHVuc2lnbmVkIGxlbikKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NvY2tldF9nZXRwZWVyc2VjX3N0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkJICAgIGludCBfX3VzZXIgKm9wdGxlbiwgdW5zaWduZWQgbGVuKQoreworCXJldHVybiAtRU5PUFJPVE9PUFQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKipzZWNkYXRhLAorCQkJCQkJICAgdTMyICpzZWNsZW4pCiB7CiAJcmV0dXJuIC1FTk9QUk9UT09QVDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaAppbmRleCA4NTBhOTc0Li5iOTVmNmViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCkBAIC00LDcgKzQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RydWN0IHNlcV9vcGVyYXRpb25zOwogc3RydWN0IGZpbGU7CkBAIC0xOSw3ICsxOSw3IEBACiAJc2l6ZV90IGNvdW50OwogCWxvZmZfdCBpbmRleDsKIAlsb2ZmX3QgdmVyc2lvbjsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAlzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgKm9wOwogCXZvaWQgKnByaXZhdGU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IDQwNDExMjIuLmMzMmU2MGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTEyNyw2ICsxMjcsOSBAQAogLyogSGlsc2NoZXIgbmV0eCAqLwogI2RlZmluZSBQT1JUX05FVFgJNzEKIAorLyogU1VONFYgSHlwZXJ2aXNvciBDb25zb2xlICovCisjZGVmaW5lIFBPUlRfU1VOSFYJNzIKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMzY2LDYgKzM2OSw5IEBACiBpbnQgdWFydF9zZXRfb3B0aW9ucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3QgY29uc29sZSAqY28sIGludCBiYXVkLAogCQkgICAgIGludCBwYXJpdHksIGludCBiaXRzLCBpbnQgZmxvdyk7CiBzdHJ1Y3QgdHR5X2RyaXZlciAqdWFydF9jb25zb2xlX2RldmljZShzdHJ1Y3QgY29uc29sZSAqY28sIGludCAqaW5kZXgpOwordm9pZCB1YXJ0X2NvbnNvbGVfd3JpdGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgY29uc3QgY2hhciAqcywKKwkJCXVuc2lnbmVkIGludCBjb3VudCwKKwkJCXZvaWQgKCpwdXRjaGFyKShzdHJ1Y3QgdWFydF9wb3J0ICosIGludCkpOwogCiAvKgogICogUG9ydC9kcml2ZXIgcmVnaXN0cmF0aW9uL3JlbW92YWwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX3JlZy5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfcmVnLmgKaW5kZXggNmEyYmI5NS4uM2M4YTZhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfcmVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfcmVnLmgKQEAgLTI0NywxMCArMjQ3LDEwIEBACiAjZGVmaW5lIFVBUlRfQ1RSCTB4RkYKIAogLyoKLSAqIFRoZSAxNkM5NTAgQWRkaXRpb25hbCBDb250cm9sIFJlaWdzdGVyCisgKiBUaGUgMTZDOTUwIEFkZGl0aW9uYWwgQ29udHJvbCBSZWdpc3RlcgogICovCiAjZGVmaW5lIFVBUlRfQUNSX1JYRElTCTB4MDEJLyogUmVjZWl2ZXIgZGlzYWJsZSAqLwotI2RlZmluZSBVQVJUX0FDUl9UWERJUwkweDAyCS8qIFJlY2VpdmVyIGRpc2FibGUgKi8KKyNkZWZpbmUgVUFSVF9BQ1JfVFhESVMJMHgwMgkvKiBUcmFuc21pdHRlciBkaXNhYmxlICovCiAjZGVmaW5lIFVBUlRfQUNSX0RTUkZDCTB4MDQJLyogRFNSIEZsb3cgQ29udHJvbCAqLwogI2RlZmluZSBVQVJUX0FDUl9UTEVOQgkweDIwCS8qIDk1MCB0cmlnZ2VyIGxldmVscyBlbmFibGUgKi8KICNkZWZpbmUgVUFSVF9BQ1JfSUNSUkQJMHg0MAkvKiBJQ1IgUmVhZCBlbmFibGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGFkN2NjMjIuLjYxM2I5NTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMjcwLDcgKzI3MCw2IEBACiAKIAl2b2lkCQkJKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCi0JX191MzIJCQluZm1hcms7CiAJc3RydWN0IG5mX2Nvbm50cmFjawkqbmZjdDsKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCiAJc3RydWN0IHNrX2J1ZmYJCSpuZmN0X3JlYXNtOwpAQCAtMjc4LDYgKzI3Nyw3IEBACiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIAlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8JKm5mX2JyaWRnZTsKICNlbmRpZgorCV9fdTMyCQkJbmZtYXJrOwogI2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVIgKi8KICNpZmRlZiBDT05GSUdfTkVUX1NDSEVECiAJX191MTYJCQl0Y19pbmRleDsJLyogdHJhZmZpYyBjb250cm9sIGluZGV4ICovCkBAIC0zMDQsNiArMzA0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAorZXh0ZXJuIHZvaWQga2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQJICAgICAgIF9fa2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwKIAkJCQkgICBnZnBfdCBwcmlvcml0eSwgaW50IGZjbG9uZSk7CkBAIC00MDQsMjIgKzQwNSw2IEBACiAgKi8KIAogLyoqCi0gKglrZnJlZV9za2IgLSBmcmVlIGFuIHNrX2J1ZmYKLSAqCUBza2I6IGJ1ZmZlciB0byBmcmVlCi0gKgotICoJRHJvcCBhIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyIGFuZCBmcmVlIGl0IGlmIHRoZSB1c2FnZSBjb3VudCBoYXMKLSAqCWhpdCB6ZXJvLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQga2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaWYgKGxpa2VseShhdG9taWNfcmVhZCgmc2tiLT51c2VycykgPT0gMSkpCi0JCXNtcF9ybWIoKTsKLQllbHNlIGlmIChsaWtlbHkoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKSkKLQkJcmV0dXJuOwotCV9fa2ZyZWVfc2tiKHNrYik7Ci19Ci0KLS8qKgogICoJc2tiX2Nsb25lZCAtIGlzIHRoZSBidWZmZXIgYSBjbG9uZQogICoJQHNrYjogYnVmZmVyIHRvIGNoZWNrCiAgKgpAQCAtMTE3NCwxMiArMTE1OSwxNCBAQAogICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcG9zdHB1bGxfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJIGNvbnN0IHZvaWQgKnN0YXJ0LCBpbnQgbGVuKQorCQkJCSAgICAgIGNvbnN0IHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKIAkJc2tiLT5jc3VtID0gY3N1bV9zdWIoc2tiLT5jc3VtLCBjc3VtX3BhcnRpYWwoc3RhcnQsIGxlbiwgMCkpOwogfQogCit1bnNpZ25lZCBjaGFyICpza2JfcHVsbF9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKTsKKwogLyoqCiAgKglwc2tiX3RyaW1fcmNzdW0gLSB0cmltIHJlY2VpdmVkIHNrYiBhbmQgdXBkYXRlIGNoZWNrc3VtCiAgKglAc2tiOiBidWZmZXIgdG8gdHJpbQpAQCAtMTM1MSwxNiArMTMzOCw2IEBACiAJCWtmcmVlX3NrYihza2IpOwogfQogI2VuZGlmCi1zdGF0aWMgaW5saW5lIHZvaWQgbmZfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQluZl9jb25udHJhY2tfcHV0KHNrYi0+bmZjdCk7Ci0Jc2tiLT5uZmN0ID0gTlVMTDsKLSNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCi0JbmZfY29ubnRyYWNrX3B1dF9yZWFzbShza2ItPm5mY3RfcmVhc20pOwotCXNrYi0+bmZjdF9yZWFzbSA9IE5VTEw7Ci0jZW5kaWYKLX0KLQogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCiBzdGF0aWMgaW5saW5lIHZvaWQgbmZfYnJpZGdlX3B1dChzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZSkKIHsKQEAgLTEzNzMsNiArMTM1MCwyMCBAQAogCQlhdG9taWNfaW5jKCZuZl9icmlkZ2UtPnVzZSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0JSSURHRV9ORVRGSUxURVIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCW5mX2Nvbm50cmFja19wdXQoc2tiLT5uZmN0KTsKKwlza2ItPm5mY3QgPSBOVUxMOworI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKKwluZl9jb25udHJhY2tfcHV0X3JlYXNtKHNrYi0+bmZjdF9yZWFzbSk7CisJc2tiLT5uZmN0X3JlYXNtID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCisJbmZfYnJpZGdlX3B1dChza2ItPm5mX2JyaWRnZSk7CisJc2tiLT5uZl9icmlkZ2UgPSBOVUxMOworI2VuZGlmCit9CisKICNlbHNlIC8qIENPTkZJR19ORVRGSUxURVIgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBuZl9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fQogI2VuZGlmIC8qIENPTkZJR19ORVRGSUxURVIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKaW5kZXggOGNmNTI5My4uMTVlMWQ5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKQEAgLTM4LDcgKzM4LDYgQEAKICNkZWZpbmUJU0xBQl9ERUJVR19JTklUSUFMCTB4MDAwMDAyMDBVTAkvKiBDYWxsIGNvbnN0cnVjdG9yIChhcyB2ZXJpZmllcikgKi8KICNkZWZpbmUJU0xBQl9SRURfWk9ORQkJMHgwMDAwMDQwMFVMCS8qIFJlZCB6b25lIG9ianMgaW4gYSBjYWNoZSAqLwogI2RlZmluZQlTTEFCX1BPSVNPTgkJMHgwMDAwMDgwMFVMCS8qIFBvaXNvbiBvYmplY3RzICovCi0jZGVmaW5lCVNMQUJfTk9fUkVBUAkJMHgwMDAwMTAwMFVMCS8qIG5ldmVyIHJlYXAgZnJvbSB0aGUgY2FjaGUgKi8KICNkZWZpbmUJU0xBQl9IV0NBQ0hFX0FMSUdOCTB4MDAwMDIwMDBVTAkvKiBhbGlnbiBvYmpzIG9uIGEgaC93IGNhY2hlIGxpbmVzICovCiAjZGVmaW5lIFNMQUJfQ0FDSEVfRE1BCQkweDAwMDA0MDAwVUwJLyogdXNlIEdGUF9ETUEgbWVtb3J5ICovCiAjZGVmaW5lIFNMQUJfTVVTVF9IV0NBQ0hFX0FMSUdOCTB4MDAwMDgwMDBVTAkvKiBmb3JjZSBhbGlnbm1lbnQgKi8KQEAgLTQ3LDYgKzQ2LDcgQEAKIAkJCQkJCSAgIHdoYXQgaXMgcmVjbGFpbWFibGUgbGF0ZXIqLwogI2RlZmluZSBTTEFCX1BBTklDCQkweDAwMDQwMDAwVUwJLyogcGFuaWMgaWYga21lbV9jYWNoZV9jcmVhdGUoKSBmYWlscyAqLwogI2RlZmluZSBTTEFCX0RFU1RST1lfQllfUkNVCTB4MDAwODAwMDBVTAkvKiBkZWZlciBmcmVlaW5nIHBhZ2VzIHRvIFJDVSAqLworI2RlZmluZSBTTEFCX01FTV9TUFJFQUQJCTB4MDAxMDAwMDBVTAkvKiBTcHJlYWQgc29tZSBtZW1vcnkgb3ZlciBjcHVzZXQgKi8KIAogLyogZmxhZ3MgcGFzc2VkIHRvIGEgY29uc3RydWN0b3IgZnVuYyAqLwogI2RlZmluZQlTTEFCX0NUT1JfQ09OU1RSVUNUT1IJMHgwMDFVTAkJLyogaWYgbm90IHNldCwgdGhlbiBkZWNvbnN0cnVjdG9yICovCkBAIC02NCw2ICs2NCw3IEBACiBleHRlcm4gaW50IGttZW1fY2FjaGVfZGVzdHJveShrbWVtX2NhY2hlX3QgKik7CiBleHRlcm4gaW50IGttZW1fY2FjaGVfc2hyaW5rKGttZW1fY2FjaGVfdCAqKTsKIGV4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKGttZW1fY2FjaGVfdCAqLCBnZnBfdCk7CitleHRlcm4gdm9pZCAqa21lbV9jYWNoZV96YWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QpOwogZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfdCAqLCB2b2lkICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NpemUoa21lbV9jYWNoZV90ICopOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmttZW1fY2FjaGVfbmFtZShrbWVtX2NhY2hlX3QgKik7CkBAIC03NywxMSArNzgsMTIgQEAKIH07CiBleHRlcm4gc3RydWN0IGNhY2hlX3NpemVzIG1hbGxvY19zaXplc1tdOwogCi0jaWZuZGVmIENPTkZJR19ERUJVR19TTEFCCiBleHRlcm4gdm9pZCAqX19rbWFsbG9jKHNpemVfdCwgZ2ZwX3QpOworI2lmbmRlZiBDT05GSUdfREVCVUdfU0xBQgorI2RlZmluZSBfX19fa21hbGxvYyhzaXplLCBmbGFncykgX19rbWFsbG9jKHNpemUsIGZsYWdzKQogI2Vsc2UKIGV4dGVybiB2b2lkICpfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemVfdCwgZ2ZwX3QsIHZvaWQqKTsKLSNkZWZpbmUgX19rbWFsbG9jKHNpemUsIGZsYWdzKSBcCisjZGVmaW5lIF9fX19rbWFsbG9jKHNpemUsIGZsYWdzKSBcCiAgICAgX19rbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQogI2VuZGlmCiAKQEAgLTEwOCw3ICsxMTAsMzAgQEAKIAlyZXR1cm4gX19rbWFsbG9jKHNpemUsIGZsYWdzKTsKIH0KIAotZXh0ZXJuIHZvaWQgKmt6YWxsb2Moc2l6ZV90LCBnZnBfdCk7CitleHRlcm4gdm9pZCAqX19remFsbG9jKHNpemVfdCwgZ2ZwX3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmt6YWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkgeworCQlpbnQgaSA9IDA7CisjZGVmaW5lIENBQ0hFKHgpIFwKKwkJaWYgKHNpemUgPD0geCkgXAorCQkJZ290byBmb3VuZDsgXAorCQllbHNlIFwKKwkJCWkrKzsKKyNpbmNsdWRlICJrbWFsbG9jX3NpemVzLmgiCisjdW5kZWYgQ0FDSEUKKwkJeworCQkJZXh0ZXJuIHZvaWQgX195b3VfY2Fubm90X2t6YWxsb2NfdGhhdF9tdWNoKHZvaWQpOworCQkJX195b3VfY2Fubm90X2t6YWxsb2NfdGhhdF9tdWNoKCk7CisJCX0KK2ZvdW5kOgorCQlyZXR1cm4ga21lbV9jYWNoZV96YWxsb2MoKGZsYWdzICYgR0ZQX0RNQSkgPworCQkJbWFsbG9jX3NpemVzW2ldLmNzX2RtYWNhY2hlcCA6CisJCQltYWxsb2Nfc2l6ZXNbaV0uY3NfY2FjaGVwLCBmbGFncyk7CisJfQorCXJldHVybiBfX2t6YWxsb2Moc2l6ZSwgZmxhZ3MpOworfQogCiAvKioKICAqIGtjYWxsb2MgLSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFuIGFycmF5LiBUaGUgbWVtb3J5IGlzIHNldCB0byB6ZXJvLgpAQCAtMTE4LDcgKzE0Myw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqa2NhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewotCWlmIChuICE9IDAgJiYgc2l6ZSA+IElOVF9NQVggLyBuKQorCWlmIChuICE9IDAgJiYgc2l6ZSA+IFVMT05HX01BWCAvIG4pCiAJCXJldHVybiBOVUxMOwogCXJldHVybiBremFsbG9jKG4gKiBzaXplLCBmbGFncyk7CiB9CkBAIC0xNTUsMTcgKzE4MCwxOCBAQAogCXZvaWQgKCopKHZvaWQgKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZykpOwogaW50IGttZW1fY2FjaGVfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqYyk7CiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpjLCBnZnBfdCBmbGFncyk7Cit2b2lkICprbWVtX2NhY2hlX3phbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7CiB2b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqYywgdm9pZCAqYik7CiBjb25zdCBjaGFyICprbWVtX2NhY2hlX25hbWUoc3RydWN0IGttZW1fY2FjaGUgKik7CiB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncyk7Ci12b2lkICpremFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncyk7Cit2b2lkICpfX2t6YWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqbSk7CiB1bnNpZ25lZCBpbnQga3NpemUoY29uc3Qgdm9pZCAqbSk7CiB1bnNpZ25lZCBpbnQga21lbV9jYWNoZV9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpjKTsKIAogc3RhdGljIGlubGluZSB2b2lkICprY2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7Ci0JcmV0dXJuIGt6YWxsb2MobiAqIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gX19remFsbG9jKG4gKiBzaXplLCBmbGFncyk7CiB9CiAKICNkZWZpbmUga21lbV9jYWNoZV9zaHJpbmsoZCkgKDApCkBAIC0xNzMsNiArMTk5LDggQEAKICNkZWZpbmUga21lbV9wdHJfdmFsaWRhdGUoYSwgYikgKDApCiAjZGVmaW5lIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjLCBmLCBuKSBrbWVtX2NhY2hlX2FsbG9jKGMsIGYpCiAjZGVmaW5lIGttYWxsb2Nfbm9kZShzLCBmLCBuKSBrbWFsbG9jKHMsIGYpCisjZGVmaW5lIGt6YWxsb2MocywgZikgX19remFsbG9jKHMsIGYpCisjZGVmaW5lIF9fX19rbWFsbG9jIGttYWxsb2MKIAogI2VuZGlmIC8qIENPTkZJR19TTE9CICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21wLmggYi9pbmNsdWRlL2xpbnV4L3NtcC5oCmluZGV4IDQ0MTUzZmQuLmQ2OTlhMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbXAuaApAQCAtNTIsMjMgKzUyLDEyIEBACiAvKgogICogQ2FsbCBhIGZ1bmN0aW9uIG9uIGFsbCBvdGhlciBwcm9jZXNzb3JzCiAgKi8KLWV4dGVybiBpbnQgc21wX2NhbGxfZnVuY3Rpb24gKHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCi0JCQkgICAgICBpbnQgcmV0cnksIGludCB3YWl0KTsKK2ludCBzbXBfY2FsbF9mdW5jdGlvbih2b2lkKCpmdW5jKSh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IHJldHJ5LCBpbnQgd2FpdCk7CiAKIC8qCiAgKiBDYWxsIGEgZnVuY3Rpb24gb24gYWxsIHByb2Nlc3NvcnMKICAqLwotc3RhdGljIGlubGluZSBpbnQgb25fZWFjaF9jcHUodm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKLQkJCSAgICAgIGludCByZXRyeSwgaW50IHdhaXQpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlyZXQgPSBzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCk7Ci0JZnVuYyhpbmZvKTsKLQlwcmVlbXB0X2VuYWJsZSgpOwotCXJldHVybiByZXQ7Ci19CitpbnQgb25fZWFjaF9jcHUodm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IHJldHJ5LCBpbnQgd2FpdCk7CiAKICNkZWZpbmUgTVNHX0FMTF9CVVRfU0VMRgkweDgwMDAJLyogQXNzdW1lIDwzMjc2OCBDUFUncyAqLwogI2RlZmluZSBNU0dfQUxMCQkJMHg4MDAxCkBAIC05NCw3ICs4MywxMyBAQAogI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCQkJMAogI2RlZmluZSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKQkJCTAKICNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb24oZnVuYyxpbmZvLHJldHJ5LHdhaXQpCSh7IDA7IH0pCi0jZGVmaW5lIG9uX2VhY2hfY3B1KGZ1bmMsaW5mbyxyZXRyeSx3YWl0KQkoeyBmdW5jKGluZm8pOyAwOyB9KQorI2RlZmluZSBvbl9lYWNoX2NwdShmdW5jLGluZm8scmV0cnksd2FpdCkJXAorCSh7CQkJCQlcCisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CQlcCisJCWZ1bmMoaW5mbyk7CQkJXAorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CQlcCisJCTA7CQkJCVwKKwl9KQogc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkgeyB9CiAjZGVmaW5lIG51bV9ib290aW5nX2NwdXMoKQkJCTEKICNkZWZpbmUgc21wX3ByZXBhcmVfYm9vdF9jcHUoKQkJCWRvIHt9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggYjAyZGRhNC4uOWFiMmRkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0xNTAsNiArMTUwLDcgQEAKIAogI2RlZmluZQlTQ01fUklHSFRTCTB4MDEJCS8qIHJ3OiBhY2Nlc3MgcmlnaHRzIChhcnJheSBvZiBpbnQpICovCiAjZGVmaW5lIFNDTV9DUkVERU5USUFMUyAweDAyCQkvKiBydzogc3RydWN0IHVjcmVkCQkqLworI2RlZmluZSBTQ01fU0VDVVJJVFkJMHgwMwkJLyogcnc6IHNlY3VyaXR5IGxhYmVsCQkqLwogCiBzdHJ1Y3QgdWNyZWQgewogCV9fdTMyCXBpZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDM2OWJlMzIuLmRlZTIyMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtMTgsNiArMTgsOCBAQAogZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CiBleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CiAKK2V4dGVybiBjaGFyICpzdHJuZHVwX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKiwgbG9uZyk7CisKIC8qCiAgKiBJbmNsdWRlIG1hY2hpbmUgc3BlY2lmaWMgaW5saW5lIHJvdXRpbmVzCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y3NvY2suaAppbmRleCBkMzNjNmZhLi5iNGFjYjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNzb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3Zjc29jay5oCkBAIC0zNiw3ICszNiw3IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNrX2RlZmVycmVkOwkvKiBkZWZlcnJlZCByZXF1ZXN0cyB0aGF0IG5lZWQgdG8KIAkJCQkJCSAqIGJlIHJldmlzdGVkICovCi0Jc3RydWN0IHNlbWFwaG9yZSAgICAgICAgc2tfc2VtOwkJLyogdG8gc2VyaWFsaXplIHNlbmRpbmcgZGF0YSAqLworCXN0cnVjdCBtdXRleAkJc2tfbXV0ZXg7CS8qIHRvIHNlcmlhbGl6ZSBzZW5kaW5nIGRhdGEgKi8KIAogCWludAkJCSgqc2tfcmVjdmZyb20pKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApOwogCWludAkJCSgqc2tfc2VuZHRvKShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggZjNlMTdkNS4uNTRlYWM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQAogI2RlZmluZSB2bV9zd2FwX2Z1bGwoKSAobnJfc3dhcF9wYWdlcyoyIDwgdG90YWxfc3dhcF9wYWdlcykKIAogLyogbGludXgvbW0vb29tX2tpbGwuYyAqLwotZXh0ZXJuIHZvaWQgb3V0X29mX21lbW9yeShnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyKTsKK2V4dGVybiB2b2lkIG91dF9vZl9tZW1vcnkoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcik7CiAKIC8qIGxpbnV4L21tL21lbW9yeS5jICovCiBleHRlcm4gdm9pZCBzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90LCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CkBAIC0xNzIsOSArMTcyLDI0IEBACiBleHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpOwogCiAvKiBsaW51eC9tbS92bXNjYW4uYyAqLwotZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqKiwgZ2ZwX3QpOwotZXh0ZXJuIGludCBzaHJpbmtfYWxsX21lbW9yeShpbnQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKiosIGdmcF90KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzOworZXh0ZXJuIGludCByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpOworCisvKiBwb3NzaWJsZSBvdXRjb21lIG9mIHBhZ2VvdXQoKSAqLwordHlwZWRlZiBlbnVtIHsKKwkvKiBmYWlsZWQgdG8gd3JpdGUgcGFnZSBvdXQsIHBhZ2UgaXMgbG9ja2VkICovCisJUEFHRV9LRUVQLAorCS8qIG1vdmUgcGFnZSB0byB0aGUgYWN0aXZlIGxpc3QsIHBhZ2UgaXMgbG9ja2VkICovCisJUEFHRV9BQ1RJVkFURSwKKwkvKiBwYWdlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIGRpc2sgc3VjY2Vzc2Z1bGx5LCBwYWdlIGlzIHVubG9ja2VkICovCisJUEFHRV9TVUNDRVNTLAorCS8qIHBhZ2UgaXMgY2xlYW4gYW5kIGxvY2tlZCAqLworCVBBR0VfQ0xFQU4sCit9IHBhZ2VvdXRfdDsKKworZXh0ZXJuIHBhZ2VvdXRfdCBwYWdlb3V0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCB6b25lX3JlY2xhaW1fbW9kZTsKQEAgLTE4OCwyNSArMjAzLDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01JR1JBVElPTgotZXh0ZXJuIGludCBpc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwKTsKLWV4dGVybiBpbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7Ci1leHRlcm4gaW50IG1pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKLWV4dGVybiB2b2lkIG1pZ3JhdGVfcGFnZV9jb3B5KHN0cnVjdCBwYWdlICosIHN0cnVjdCBwYWdlICopOwotZXh0ZXJuIGludCBtaWdyYXRlX3BhZ2VfcmVtb3ZlX3JlZmVyZW5jZXMoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHBhZ2UgKiwgaW50KTsKLWV4dGVybiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBzdHJ1Y3QgbGlzdF9oZWFkICp0LAotCQlzdHJ1Y3QgbGlzdF9oZWFkICptb3ZlZCwgc3RydWN0IGxpc3RfaGVhZCAqZmFpbGVkKTsKLWV4dGVybiBpbnQgZmFpbF9taWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHBhZ2UgKik7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcCkgeyByZXR1cm4gLUVOT1NZUzsgfQotc3RhdGljIGlubGluZSBpbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBzdHJ1Y3QgbGlzdF9oZWFkICp0LAotCXN0cnVjdCBsaXN0X2hlYWQgKm1vdmVkLCBzdHJ1Y3QgbGlzdF9oZWFkICpmYWlsZWQpIHsgcmV0dXJuIC1FTk9TWVM7IH0KLS8qIFBvc3NpYmxlIHNldHRpbmdzIGZvciB0aGUgbWlncmF0ZV9wYWdlKCkgbWV0aG9kIGluIGFkZHJlc3Nfb3BlcmF0aW9ucyAqLwotI2RlZmluZSBtaWdyYXRlX3BhZ2UgTlVMTAotI2RlZmluZSBmYWlsX21pZ3JhdGVfcGFnZSBOVUxMCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19NTVUKIC8qIGxpbnV4L21tL3NobWVtLmMgKi8KIGV4dGVybiBpbnQgc2htZW1fdW51c2Uoc3dwX2VudHJ5X3QgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlKTsKQEAgLTIzOCwxNCArMjM0LDE1IEBACiAvKiBsaW51eC9tbS9zd2FwZmlsZS5jICovCiBleHRlcm4gbG9uZyB0b3RhbF9zd2FwX3BhZ2VzOwogZXh0ZXJuIHVuc2lnbmVkIGludCBucl9zd2FwZmlsZXM7Ci1leHRlcm4gc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qgc3dhcF9pbmZvW107CiBleHRlcm4gdm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqKTsKIGV4dGVybiBzd3BfZW50cnlfdCBnZXRfc3dhcF9wYWdlKHZvaWQpOwotZXh0ZXJuIHN3cF9lbnRyeV90IGdldF9zd2FwX3BhZ2Vfb2ZfdHlwZShpbnQgdHlwZSk7CitleHRlcm4gc3dwX2VudHJ5X3QgZ2V0X3N3YXBfcGFnZV9vZl90eXBlKGludCk7CiBleHRlcm4gaW50IHN3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90KTsKIGV4dGVybiBpbnQgdmFsaWRfc3dhcGhhbmRsZXMoc3dwX2VudHJ5X3QsIHVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gdm9pZCBzd2FwX2ZyZWUoc3dwX2VudHJ5X3QpOwogZXh0ZXJuIHZvaWQgZnJlZV9zd2FwX2FuZF9jYWNoZShzd3BfZW50cnlfdCk7CitleHRlcm4gaW50IHN3YXBfdHlwZV9vZihkZXZfdCk7CitleHRlcm4gdW5zaWduZWQgaW50IGNvdW50X3N3YXBfcGFnZXMoaW50LCBpbnQpOwogZXh0ZXJuIHNlY3Rvcl90IG1hcF9zd2FwX3BhZ2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKiwgcGdvZmZfdCk7CiBleHRlcm4gc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2luZm9fc3RydWN0KHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgY2FuX3NoYXJlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCBkNzM1MDFiLi5lNDg3ZTNiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNTQzLDcgKzU0Myw3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3N5bWxpbmthdChjb25zdCBjaGFyIF9fdXNlciAqIG9sZG5hbWUsCiAJCQkgICAgICBpbnQgbmV3ZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqIG5ld25hbWUpOwogYXNtbGlua2FnZSBsb25nIHN5c19saW5rYXQoaW50IG9sZGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKm9sZG5hbWUsCi0JCQkgICBpbnQgbmV3ZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqbmV3bmFtZSk7CisJCQkgICBpbnQgbmV3ZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqbmV3bmFtZSwgaW50IGZsYWdzKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfcmVuYW1lYXQoaW50IG9sZGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiBvbGRuYW1lLAogCQkJICAgICBpbnQgbmV3ZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqIG5ld25hbWUpOwogYXNtbGlua2FnZSBsb25nIHN5c19mdXRpbWVzYXQoaW50IGRmZCwgY2hhciBfX3VzZXIgKmZpbGVuYW1lLApAQCAtNTY4LDUgKzU2OCw2IEBACiAJCQkJICAgICAgaW50IGZsYWcpOwogYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfb3BlbmF0KHVuc2lnbmVkIGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCQkgICBpbnQgZmxhZ3MsIGludCBtb2RlKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfdW5zaGFyZSh1bnNpZ25lZCBsb25nIHVuc2hhcmVfZmxhZ3MpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IDMyYTQxMzkuLjc2ZWFlZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaApAQCAtMTQ2LDYgKzE0Niw4IEBACiAJS0VSTl9SQU5ET01JWkU9NjgsIC8qIGludDogcmFuZG9taXplIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwogCUtFUk5fU0VUVUlEX0RVTVBBQkxFPTY5LCAvKiBpbnQ6IGJlaGF2aW91ciBvZiBkdW1wcyBmb3Igc2V0dWlkIGNvcmUgKi8KIAlLRVJOX1NQSU5fUkVUUlk9NzAsCS8qIGludDogbnVtYmVyIG9mIHNwaW5sb2NrIHJldHJpZXMgKi8KKwlLRVJOX0FDUElfVklERU9fRkxBR1M9NzEsIC8qIGludDogZmxhZ3MgZm9yIHNldHRpbmcgdXAgdmlkZW8gYWZ0ZXIgQUNQSSBzbGVlcCAqLworCUtFUk5fSUE2NF9VTkFMSUdORUQ9NzIsIC8qIGludDogaWE2NCB1bmFsaWduZWQgdXNlcmxhbmQgdHJhcCBlbmFibGUgKi8KIH07CiAKIApAQCAtMjA5LDYgKzIxMSw3IEBACiAJTkVUX1NDVFA9MTcsCiAJTkVUX0xMQz0xOCwKIAlORVRfTkVURklMVEVSPTE5LAorCU5FVF9EQ0NQPTIwLAogfTsKIAogLyogL3Byb2Mvc3lzL2tlcm5lbC9yYW5kb20gKi8KQEAgLTI1OSw2ICsyNjIsOCBAQAogCU5FVF9DT1JFX0RFVl9XRUlHSFQ9MTcsCiAJTkVUX0NPUkVfU09NQVhDT05OPTE4LAogCU5FVF9DT1JFX0JVREdFVD0xOSwKKwlORVRfQ09SRV9BRVZFTlRfRVRJTUU9MjAsCisJTkVUX0NPUkVfQUVWRU5UX1JTRVFUSD0yMSwKIH07CiAKIC8qIC9wcm9jL3N5cy9uZXQvZXRoZXJuZXQgKi8KQEAgLTM5NSw2ICs0MDAsOSBAQAogCU5FVF9UQ1BfQ09OR19DT05UUk9MPTExMCwKIAlORVRfVENQX0FCQz0xMTEsCiAJTkVUX0lQVjRfSVBGUkFHX01BWF9ESVNUPTExMiwKKyAJTkVUX1RDUF9NVFVfUFJPQklORz0xMTMsCisJTkVUX1RDUF9CQVNFX01TUz0xMTQsCisJTkVUX0lQVjRfVENQX1dPUktBUk9VTkRfU0lHTkVEX1dJTkRPV1M9MTE1LAogfTsKIAogZW51bSB7CkBAIC00NDksNiArNDU3LDcgQEAKIAlORVRfSVBWNF9DT05GX0FSUF9BTk5PVU5DRT0xOCwKIAlORVRfSVBWNF9DT05GX0FSUF9JR05PUkU9MTksCiAJTkVUX0lQVjRfQ09ORl9QUk9NT1RFX1NFQ09OREFSSUVTPTIwLAorCU5FVF9JUFY0X0NPTkZfQVJQX0FDQ0VQVD0yMSwKIAlfX05FVF9JUFY0X0NPTkZfTUFYCiB9OwogCkBAIC01MjksNiArNTM4LDExIEBACiAJTkVUX0lQVjZfTUFYX0RFU1lOQ19GQUNUT1I9MTUsCiAJTkVUX0lQVjZfTUFYX0FERFJFU1NFUz0xNiwKIAlORVRfSVBWNl9GT1JDRV9NTERfVkVSU0lPTj0xNywKKwlORVRfSVBWNl9BQ0NFUFRfUkFfREVGUlRSPTE4LAorCU5FVF9JUFY2X0FDQ0VQVF9SQV9QSU5GTz0xOSwKKwlORVRfSVBWNl9BQ0NFUFRfUkFfUlRSX1BSRUY9MjAsCisJTkVUX0lQVjZfUlRSX1BST0JFX0lOVEVSVkFMPTIxLAorCU5FVF9JUFY2X0FDQ0VQVF9SQV9SVF9JTkZPX01BWF9QTEVOPTIyLAogCV9fTkVUX0lQVjZfTUFYCiB9OwogCkBAIC01NjAsNiArNTc0LDIxIEBACiAJX19ORVRfTkVJR0hfTUFYCiB9OwogCisvKiAvcHJvYy9zeXMvbmV0L2RjY3AgKi8KK2VudW0geworCU5FVF9EQ0NQX0RFRkFVTFQ9MSwKK307CisKKy8qIC9wcm9jL3N5cy9uZXQvZGNjcC9kZWZhdWx0ICovCitlbnVtIHsKKwlORVRfRENDUF9ERUZBVUxUX1NFUV9XSU5ET1cgID0gMSwKKwlORVRfRENDUF9ERUZBVUxUX1JYX0NDSUQgICAgID0gMiwKKwlORVRfRENDUF9ERUZBVUxUX1RYX0NDSUQgICAgID0gMywKKwlORVRfRENDUF9ERUZBVUxUX0FDS19SQVRJTyAgID0gNCwKKwlORVRfRENDUF9ERUZBVUxUX1NFTkRfQUNLVkVDID0gNSwKKwlORVRfRENDUF9ERUZBVUxUX1NFTkRfTkRQICAgID0gNiwKK307CisKIC8qIC9wcm9jL3N5cy9uZXQvaXB4ICovCiBlbnVtIHsKIAlORVRfSVBYX1BQUk9QX0JST0FEQ0FTVElORz0xLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggZjJiYjIzOS4uNTQyZDM5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0zNDMsNiArMzQzLDEyIEBACiAJCV9fdTMyCXNlcTsKIAkJX191MzIJdGltZTsKIAl9IHJjdnFfc3BhY2U7CisKKy8qIFRDUC1zcGVjaWZpYyBNVFUgcHJvYmUgaW5mb3JtYXRpb24uICovCisJc3RydWN0IHsKKwkJX191MzIJCSAgcHJvYmVfc2VxX3N0YXJ0OworCQlfX3UzMgkJICBwcm9iZV9zZXFfZW5kOworCX0gbXR1X3Byb2JlOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGNwX3NvY2sgKnRjcF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWUuaCBiL2luY2x1ZGUvbGludXgvdGltZS5oCmluZGV4IGQ5Y2RiYTUuLmJmMGU3ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZS5oCkBAIC0xMDEsNiArMTAxLDcgQEAKIHN0cnVjdCBpdGltZXJ2YWw7CiBleHRlcm4gaW50IGRvX3NldGl0aW1lcihpbnQgd2hpY2gsIHN0cnVjdCBpdGltZXJ2YWwgKnZhbHVlLAogCQkJc3RydWN0IGl0aW1lcnZhbCAqb3ZhbHVlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm1fc2V0aXRpbWVyKHVuc2lnbmVkIGludCBzZWNvbmRzKTsKIGV4dGVybiBpbnQgZG9fZ2V0aXRpbWVyKGludCB3aGljaCwgc3RydWN0IGl0aW1lcnZhbCAqdmFsdWUpOwogZXh0ZXJuIHZvaWQgZ2V0bnN0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCA5Yjk4NzdmLi5lZTVhMDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC02OSwxMyArNjksMTMgQEAKICAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGFkZGVkCiAgKgogICogVGhlIGtlcm5lbCB3aWxsIGRvIGEgLT5mdW5jdGlvbigtPmRhdGEpIGNhbGxiYWNrIGZyb20gdGhlCi0gKiB0aW1lciBpbnRlcnJ1cHQgYXQgdGhlIC0+ZXhwaXJlZCBwb2ludCBpbiB0aGUgZnV0dXJlLiBUaGUKKyAqIHRpbWVyIGludGVycnVwdCBhdCB0aGUgLT5leHBpcmVzIHBvaW50IGluIHRoZSBmdXR1cmUuIFRoZQogICogY3VycmVudCB0aW1lIGlzICdqaWZmaWVzJy4KICAqCi0gKiBUaGUgdGltZXIncyAtPmV4cGlyZWQsIC0+ZnVuY3Rpb24gKGFuZCBpZiB0aGUgaGFuZGxlciB1c2VzIGl0LCAtPmRhdGEpCisgKiBUaGUgdGltZXIncyAtPmV4cGlyZXMsIC0+ZnVuY3Rpb24gKGFuZCBpZiB0aGUgaGFuZGxlciB1c2VzIGl0LCAtPmRhdGEpCiAgKiBmaWVsZHMgbXVzdCBiZSBzZXQgcHJpb3IgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICoKLSAqIFRpbWVycyB3aXRoIGFuIC0+ZXhwaXJlZCBmaWVsZCBpbiB0aGUgcGFzdCB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBuZXh0CisgKiBUaW1lcnMgd2l0aCBhbiAtPmV4cGlyZXMgZmllbGQgaW4gdGhlIHBhc3Qgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgbmV4dAogICogdGltZXIgdGljay4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKaW5kZXggYjdjYTEyMC4uODJkYzlhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1leC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXguaApAQCAtOTcsMzggKzk3LDExIEBACiAKICNkZWZpbmUgTUFYUEhBU0UgNTEyMDAwTCAgICAgICAgLyogbWF4IHBoYXNlIGVycm9yICh1cykgKi8KICNkZWZpbmUgTUFYRlJFUSAoNTEyTCA8PCBTSElGVF9VU0VDKSAgLyogbWF4IGZyZXF1ZW5jeSBlcnJvciAocHBtKSAqLwotI2RlZmluZSBNQVhUSU1FICgyMDBMIDw8IFBQU19BVkcpIC8qIG1heCBQUFMgZXJyb3IgKGppdHRlcikgKDIwMCB1cykgKi8KICNkZWZpbmUgTUlOU0VDIDE2TCAgICAgICAgICAgICAgLyogbWluIGludGVydmFsIGJldHdlZW4gdXBkYXRlcyAocykgKi8KICNkZWZpbmUgTUFYU0VDIDEyMDBMICAgICAgICAgICAgLyogbWF4IGludGVydmFsIGJldHdlZW4gdXBkYXRlcyAocykgKi8KICNkZWZpbmUJTlRQX1BIQVNFX0xJTUlUCShNQVhQSEFTRSA8PCA1KQkvKiBiZXlvbmQgbWF4LiBkaXNwZXJzaW9uICovCiAKIC8qCi0gKiBUaGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIHVzZWQgb25seSBpZiBhIHB1bHNlLXBlci1zZWNvbmQgKFBQUykKLSAqIHNpZ25hbCBpcyBhdmFpbGFibGUgYW5kIGNvbm5lY3RlZCB2aWEgYSBtb2RlbSBjb250cm9sIGxlYWQsIHN1Y2ggYXMKLSAqIHByb2R1Y2VkIGJ5IHRoZSBvcHRpb25hbCBwcHNjbG9jayBmZWF0dXJlIGluY29ycG9yYXRlZCBpbiB0aGUgU3VuCi0gKiBhc3luY2ggZHJpdmVyLiBUaGV5IGVzdGFibGlzaCB0aGUgZGVzaWduIHBhcmFtZXRlcnMgb2YgdGhlIGZyZXF1ZW5jeS0KLSAqIGxvY2sgbG9vcCB1c2VkIHRvIGRpc2NpcGxpbmUgdGhlIENQVSBjbG9jayBvc2NpbGxhdG9yIHRvIHRoZSBQUFMKLSAqIHNpZ25hbC4KLSAqCi0gKiBQUFNfQVZHIGlzIHRoZSBhdmVyYWdpbmcgZmFjdG9yIGZvciB0aGUgZnJlcXVlbmN5IGxvb3AsIGFzIHdlbGwgYXMKLSAqIHRoZSB0aW1lIGFuZCBmcmVxdWVuY3kgZGlzcGVyc2lvbi4KLSAqCi0gKiBQUFNfU0hJRlQgYW5kIFBQU19TSElGVE1BWCBzcGVjaWZ5IHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtCi0gKiBjYWxpYnJhdGlvbiBpbnRlcnZhbHMsIHJlc3BlY3RpdmVseSwgaW4gc2Vjb25kcyBhcyBhIHBvd2VyIG9mIHR3by4KLSAqCi0gKiBQUFNfVkFMSUQgaXMgdGhlIG1heGltdW0gaW50ZXJ2YWwgYmVmb3JlIHRoZSBQUFMgc2lnbmFsIGlzIGNvbnNpZGVyZWQKLSAqIGludmFsaWQgYW5kIHByb3RvY29sIHVwZGF0ZXMgdXNlZCBkaXJlY3RseSBpbnN0ZWFkLgotICoKLSAqIE1BWEdMSVRDSCBpcyB0aGUgbWF4aW11bSBpbnRlcnZhbCBiZWZvcmUgYSB0aW1lIG9mZnNldCBvZiBtb3JlIHRoYW4KLSAqIE1BWFRJTUUgaXMgYmVsaWV2ZWQuCi0gKi8KLSNkZWZpbmUgUFBTX0FWRyAyCQkvKiBwcHMgYXZlcmFnaW5nIGNvbnN0YW50IChzaGlmdCkgKi8KLSNkZWZpbmUgUFBTX1NISUZUIDIJCS8qIG1pbiBpbnRlcnZhbCBkdXJhdGlvbiAocykgKHNoaWZ0KSAqLwotI2RlZmluZSBQUFNfU0hJRlRNQVggOAkJLyogbWF4IGludGVydmFsIGR1cmF0aW9uIChzKSAoc2hpZnQpICovCi0jZGVmaW5lIFBQU19WQUxJRCAxMjAJCS8qIHBwcyBzaWduYWwgd2F0Y2hkb2cgbWF4IChzKSAqLwotI2RlZmluZSBNQVhHTElUQ0ggMzAJCS8qIHBwcyBzaWduYWwgZ2xpdGNoIG1heCAocykgKi8KLQotLyoKICAqIHN5c2NhbGwgaW50ZXJmYWNlIC0gdXNlZCAobWFpbmx5IGJ5IE5UUCBkYWVtb24pCiAgKiB0byBkaXNjaXBsaW5lIGtlcm5lbCBjbG9jayBvc2NpbGxhdG9yCiAgKi8KQEAgLTI0NiwyMCArMjE5LDYgQEAKIGV4dGVybiBsb25nIHRpbWVfYWRqdXN0OwkvKiBUaGUgYW1vdW50IG9mIGFkanRpbWUgbGVmdCAqLwogZXh0ZXJuIGxvbmcgdGltZV9uZXh0X2FkanVzdDsJLyogVmFsdWUgZm9yIHRpbWVfYWRqdXN0IGF0IG5leHQgdGljayAqLwogCi0vKiBpbnRlcmZhY2UgdmFyaWFibGVzIHBwcy0+dGltZXIgaW50ZXJydXB0ICovCi1leHRlcm4gbG9uZyBwcHNfb2Zmc2V0OwkJLyogcHBzIHRpbWUgb2Zmc2V0ICh1cykgKi8KLWV4dGVybiBsb25nIHBwc19qaXR0ZXI7CQkvKiB0aW1lIGRpc3BlcnNpb24gKGppdHRlcikgKHVzKSAqLwotZXh0ZXJuIGxvbmcgcHBzX2ZyZXE7CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgcHBtKSAqLwotZXh0ZXJuIGxvbmcgcHBzX3N0YWJpbDsJCS8qIGZyZXF1ZW5jeSBkaXNwZXJzaW9uIChzY2FsZWQgcHBtKSAqLwotZXh0ZXJuIGxvbmcgcHBzX3ZhbGlkOwkJLyogcHBzIHNpZ25hbCB3YXRjaGRvZyBjb3VudGVyICovCi0KLS8qIGludGVyZmFjZSB2YXJpYWJsZXMgcHBzLT5hZGp0aW1leCAqLwotZXh0ZXJuIGludCBwcHNfc2hpZnQ7CQkvKiBpbnRlcnZhbCBkdXJhdGlvbiAocykgKHNoaWZ0KSAqLwotZXh0ZXJuIGxvbmcgcHBzX2ppdGNudDsJCS8qIGppdHRlciBsaW1pdCBleGNlZWRlZCAqLwotZXh0ZXJuIGxvbmcgcHBzX2NhbGNudDsJCS8qIGNhbGlicmF0aW9uIGludGVydmFscyAqLwotZXh0ZXJuIGxvbmcgcHBzX2VycmNudDsJCS8qIGNhbGlicmF0aW9uIGVycm9ycyAqLwotZXh0ZXJuIGxvbmcgcHBzX3N0YmNudDsJCS8qIHN0YWJpbGl0eSBsaW1pdCBleGNlZWRlZCAqLwotCiAvKioKICAqIG50cF9jbGVhciAtIENsZWFycyB0aGUgTlRQIHN0YXRlIHZhcmlhYmxlcwogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5LmggYi9pbmNsdWRlL2xpbnV4L3R0eS5oCmluZGV4IGY0NWNkNzQuLmYxM2Y0OWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5LmgKKysrIGIvaW5jbHVkZS9saW51eC90dHkuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfbGRpc2MuaD4KICNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTIzMSw4ICsyMzIsOCBAQAogCWludCBjYW5vbl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgY2Fub25faGVhZDsKIAl1bnNpZ25lZCBpbnQgY2Fub25fY29sdW1uOwotCXN0cnVjdCBzZW1hcGhvcmUgYXRvbWljX3JlYWQ7Ci0Jc3RydWN0IHNlbWFwaG9yZSBhdG9taWNfd3JpdGU7CisJc3RydWN0IG11dGV4IGF0b21pY19yZWFkX2xvY2s7CisJc3RydWN0IG11dGV4IGF0b21pY193cml0ZV9sb2NrOwogCXVuc2lnbmVkIGNoYXIgKndyaXRlX2J1ZjsKIAlpbnQgd3JpdGVfY250OwogCXNwaW5sb2NrX3QgcmVhZF9sb2NrOwpAQCAtMzE5LDggKzMyMCw3IEBACiBleHRlcm4gdm9pZCB0dHlfd2FrZXVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgdHR5X2xkaXNjX2ZsdXNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCi1zdHJ1Y3Qgc2VtYXBob3JlOwotZXh0ZXJuIHN0cnVjdCBzZW1hcGhvcmUgdHR5X3NlbTsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggdHR5X211dGV4OwogCiAvKiBuX3R0eS5jICovCiBleHRlcm4gc3RydWN0IHR0eV9sZGlzYyB0dHlfbGRpc2NfTl9UVFk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmgKaW5kZXggMjIyZmFmOS4uMDk3NmExNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaApAQCAtMiwxOSArMiwxMyBAQAogI2RlZmluZSBfTElOVVhfVFRZX0ZMSVBfSAogCiBleHRlcm4gaW50IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHNpemVfdCBzaXplKTsKLWV4dGVybiBpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICpjaGFycywgc2l6ZV90IHNpemUpOwotZXh0ZXJuIGludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjaGFyICpmbGFncywgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIGNvbnN0IGNoYXIgKmZsYWdzLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKipjaGFycywgc2l6ZV90IHNpemUpOwogZXh0ZXJuIGludCB0dHlfcHJlcGFyZV9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICoqY2hhcnMsIGNoYXIgKipmbGFncywgc2l6ZV90IHNpemUpOwogCi0jaWZkZWYgSU5DTFVERV9JTkxJTkVfRlVOQ1MKLSNkZWZpbmUgX0lOTElORV8gZXh0ZXJuCi0jZWxzZQotI2RlZmluZSBfSU5MSU5FXyBzdGF0aWMgX19pbmxpbmVfXwotI2VuZGlmCi0KLV9JTkxJTkVfIGludCB0dHlfaW5zZXJ0X2ZsaXBfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQkJCSAgIHVuc2lnbmVkIGNoYXIgY2gsIGNoYXIgZmxhZykKK3N0YXRpYyBpbmxpbmUgaW50IHR0eV9pbnNlcnRfZmxpcF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgY2gsIGNoYXIgZmxhZykKIHsKIAlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGIgPSB0dHktPmJ1Zi50YWlsOwogCWlmICh0YiAmJiB0Yi0+YWN0aXZlICYmIHRiLT51c2VkIDwgdGItPnNpemUpIHsKQEAgLTI1LDcgKzE5LDcgQEAKIAlyZXR1cm4gdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyh0dHksICZjaCwgJmZsYWcsIDEpOwogfQogCi1fSU5MSU5FXyB2b2lkIHR0eV9zY2hlZHVsZV9mbGlwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitzdGF0aWMgaW5saW5lIHZvaWQgdHR5X3NjaGVkdWxlX2ZsaXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmggYi9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmgKaW5kZXggMWU3NTA4NC4uZmZhZjA1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvdWRmX2ZzX2kuaApAQCAtMTUsMjcgKzE1LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2lmbmRlZiBfRUNNQV8xNjdfSAotdHlwZWRlZiBzdHJ1Y3QKLXsKLQlfX3UzMgkJCWxvZ2ljYWxCbG9ja051bTsKLQlfX3UxNgkJCXBhcnRpdGlvblJlZmVyZW5jZU51bTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGxiX2FkZHI7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0JX191MzIJCQlleHRMZW5ndGg7Ci0JX191MzIJCQlleHRQb3NpdGlvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNob3J0X2FkOwotCi10eXBlZGVmIHN0cnVjdAotewotCV9fdTMyCQkJZXh0TGVuZ3RoOwotCWxiX2FkZHIJCQlleHRMb2NhdGlvbjsKLQlfX3U4CQkJaW1wVXNlWzZdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbG9uZ19hZDsKLSNlbmRpZgotCiBzdHJ1Y3QgdWRmX2lub2RlX2luZm8KIHsKIAlzdHJ1Y3QgdGltZXNwZWMJCWlfY3J0aW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZGZfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgKaW5kZXggYjE1ZmYyZS4uODBhZTllZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91ZGZfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VkZl9mc19zYi5oCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIF9VREZfRlNfU0JfSAogI2RlZmluZSBfVURGX0ZTX1NCX0ggMQogCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNwcmFnbWEgcGFjaygxKQogCkBAIC0xMTEsNyArMTExLDcgQEAKIAkvKiBWQVQgaW5vZGUgKi8KIAlzdHJ1Y3QgaW5vZGUJCSpzX3ZhdDsKIAotCXN0cnVjdCBzZW1hcGhvcmUJc19hbGxvY19zZW07CisJc3RydWN0IG11dGV4CQlzX2FsbG9jX211dGV4OwogfTsKIAogI2VuZGlmIC8qIF9VREZfRlNfU0JfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggODI3Y2M2ZC4uMTMwZDEyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0xMDE4LDggKzEwMTgsNiBAQAogCXVuc2lnbmVkIGNoYXIgZGVzY2luZGV4LCB2b2lkICpidWYsIGludCBzaXplKTsKIGV4dGVybiBpbnQgdXNiX2dldF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKIAlpbnQgdHlwZSwgaW50IHRhcmdldCwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gaW50IHVzYl9nZXRfc3RyaW5nKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JdW5zaWduZWQgc2hvcnQgbGFuZ2lkLCB1bnNpZ25lZCBjaGFyIGluZGV4LCB2b2lkICpidWYsIGludCBzaXplKTsKIGV4dGVybiBpbnQgdXNiX3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgaW5kZXgsCiAJY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX2dhZGdldC5oIGIvaW5jbHVkZS9saW51eC91c2JfZ2FkZ2V0LmgKaW5kZXggZmY4MTExNy4uMWQ3ODg3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JfZ2FkZ2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JfZ2FkZ2V0LmgKQEAgLTgwMSw3ICs4MDEsOSBAQAogICogQ2FsbCB0aGlzIGluIHlvdXIgZ2FkZ2V0IGRyaXZlcidzIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwKICAqIHRvIHRlbGwgdGhlIHVuZGVybHlpbmcgdXNiIGNvbnRyb2xsZXIgZHJpdmVyIGFib3V0IHlvdXIgZHJpdmVyLgogICogVGhlIGRyaXZlcidzIGJpbmQoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBiaW5kIGl0IHRvIGEKLSAqIGdhZGdldC4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgorICogZ2FkZ2V0IGJlZm9yZSB0aGlzIHJlZ2lzdHJhdGlvbiBjYWxsIHJldHVybnMuICBJdCdzIGV4cGVjdGVkIHRoYXQKKyAqIHRoZSBiaW5kKCkgZnVuY3Rpb25zIHdpbGwgYmUgaW4gaW5pdCBzZWN0aW9ucy4KKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgogICovCiBpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKIApAQCAtODE0LDcgKzgxNiw4IEBACiAgKiBnb2luZyBhd2F5LiAgSWYgdGhlIGNvbnRyb2xsZXIgaXMgY29ubmVjdGVkIHRvIGEgVVNCIGhvc3QsCiAgKiBpdCB3aWxsIGZpcnN0IGRpc2Nvbm5lY3QoKS4gIFRoZSBkcml2ZXIgaXMgYWxzbyByZXF1ZXN0ZWQKICAqIHRvIHVuYmluZCgpIGFuZCBjbGVhbiB1cCBhbnkgZGV2aWNlIHN0YXRlLCBiZWZvcmUgdGhpcyBwcm9jZWR1cmUKLSAqIGZpbmFsbHkgcmV0dXJucy4KKyAqIGZpbmFsbHkgcmV0dXJucy4gIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgdW5iaW5kKCkgZnVuY3Rpb25zCisgKiB3aWxsIGluIGluIGV4aXQgc2VjdGlvbnMsIHNvIG1heSBub3QgYmUgbGlua2VkIGluIHNvbWUga2VybmVscy4KICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHRoYXQgY2FuIHNsZWVwLgogICovCiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggNTIwOGIxMmQuLjIyNzViZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMTcsMTEgKzE3LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPiAvKiBuZWVkIHN0cnVjdCB0aW1ldmFsICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAvKiBuZWVkIF9fdXNlciAqLwogCiAKLSNkZWZpbmUgT0JTT0xFVEVfT1dORVIgMSAvKiBJdCB3aWxsIGJlIHJlbW92ZWQgZm9yIDIuNi4xNSAqLworI2RlZmluZSBPQlNPTEVURV9PV05FUiAxIC8qIEl0IHdpbGwgYmUgcmVtb3ZlZCBmb3IgMi42LjE3ICovCiAjZGVmaW5lIEhBVkVfVjRMMiAxCiAKIC8qCkBAIC00OCw2ICs0OSwxNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisvKiBNaW5vciBkZXZpY2UgYWxsb2NhdGlvbiAqLworI2RlZmluZSBNSU5PUl9WRkxfVFlQRV9HUkFCQkVSX01JTiAgIDAKKyNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfR1JBQkJFUl9NQVggIDYzCisjZGVmaW5lIE1JTk9SX1ZGTF9UWVBFX1JBRElPX01JTiAgICA2NAorI2RlZmluZSBNSU5PUl9WRkxfVFlQRV9SQURJT19NQVggICAxMjcKKyNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfVlRYX01JTiAgICAgMTkyCisjZGVmaW5lIE1JTk9SX1ZGTF9UWVBFX1ZUWF9NQVggICAgIDIyMworI2RlZmluZSBNSU5PUl9WRkxfVFlQRV9WQklfTUlOICAgICAyMjQKKyNkZWZpbmUgTUlOT1JfVkZMX1RZUEVfVkJJX01BWCAgICAgMjU1CisKICNkZWZpbmUgVkZMX1RZUEVfR1JBQkJFUgkwCiAjZGVmaW5lIFZGTF9UWVBFX1ZCSQkJMQogI2RlZmluZSBWRkxfVFlQRV9SQURJTwkJMgpAQCAtODAsNyArOTEsNyBAQAogCiAJLyogZm9yIHZpZGVvZGV2LmMgaW50ZW5hbCB1c2FnZSAtLSBwbGVhc2UgZG9uJ3QgdG91Y2ggKi8KIAlpbnQgdXNlcnM7ICAgICAgICAgICAgICAgICAgICAgLyogdmlkZW9fZXhjbHVzaXZlX3tvcGVufGNsb3NlfSAuLi4gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7ICAgICAgICAgLyogLi4uIGhlbHBlciBmdW5jdGlvbiB1c2VzIHRoZXNlICAgKi8KKwlzdHJ1Y3QgbXV0ZXggbG9jazsgICAgICAgICAgICAgLyogLi4uIGhlbHBlciBmdW5jdGlvbiB1c2VzIHRoZXNlICAgKi8KIAljaGFyIGRldmZzX25hbWVbNjRdOyAgICAgICAgICAgLyogZGV2ZnMgKi8KIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsgLyogc3lzZnMgKi8KIH07CkBAIC04NzIsNiArODgzLDcgQEAKICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcyCQkweDAwMDIKICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NBUAkJMHgwMDAyCiAjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMQkJMHgwMDAzCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMgkweDAwMDQKIAogc3RydWN0IHY0bDJfZnJlcXVlbmN5CiB7CkBAIC05NTIsMTMgKzk2NCw2OCBAQAogCV9fdTMyICAgcmVzZXJ2ZWRbMl07ICAgICAgICAgICAgLyogbXVzdCBiZSB6ZXJvICovCiB9OwogCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgICAgICAgICAgKDB4MDAwMSkKLSNkZWZpbmUgVjRMMl9TTElDRURfVlBTICAgICAgICAgICAgICAgICAoMHgwNDAwKQotI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSAgICAgICAgICgweDEwMDApCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU182MjUgICAgICAgICAgICAgKDB4NDAwMCkKKy8qIFRlbGV0ZXh0IFdvcmxkIFN5c3RlbSBUZWxldGV4dAorICAgKFdTVCksIGRlZmluZWQgb24gSVRVLVIgQlQuNjUzLTIgKi8KKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IgICAgICAoMHgwMDAwMDEpCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9DICAgICAgKDB4MDAwMDAyKQorI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0IgICAgICgweDAwMDAxMCkKKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfU0VDQU0gICAgICAoMHgwMDAwMjApCiAKLSNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQorLyogVGVsZXRleHQgTm9ydGggQW1lcmljYW4gQnJvYWRjYXN0IFRlbGV0ZXh0IFNwZWNpZmljYXRpb24KKyAgIChOQUJUUyksIGRlZmluZWQgb24gSVRVLVIgQlQuNjUzLTIgKi8KKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19DICAgICAoMHgwMDAwNDApCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfRCAgICAgKDB4MDAwMDgwKQorCisvKiBWaWRlbyBQcm9ncmFtIFN5c3RlbSwgZGVmaW5lZCBvbiBFVFMgMzAwIDIzMSovCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZQUyAgICAgICAgICAgICAgICAgKDB4MDAwNDAwKQorCisvKiBDbG9zZWQgQ2FwdGlvbiwgZGVmaW5lZCBvbiBFSUEtNjA4ICovCisjZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICAgICAgKDB4MDAxMDAwKQorI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzYyNSAgICAgICAgICgweDAwMjAwMCkKKworLyogV2lkZSBTY3JlZW4gU3lzdGVtLCBkZWZpbmVkIG9uIElUVS1SIEJUMTExOS4xICovCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU182MjUgICAgICAgICAgICAgKDB4MDA0MDAwKQorCisvKiBXaWRlIFNjcmVlbiBTeXN0ZW0sIGRlZmluZWQgb24gSUVDIDYxODgwICovCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU181MjUgICAgICAgICAgICAgKDB4MDA4MDAwKQorCisvKiBWZXJ0aWNhbCBJbnRlcnZhbCBUaW1lY29kZSAoVklUQyksIGRlZmluZWQgb24gU01QVEUgMTJNICovCisjZGVmaW5lIFY0bDJfU0xJQ0VEX1ZJVENfNjI1CQkoMHgwMTAwMDApCisjZGVmaW5lIFY0bDJfU0xJQ0VEX1ZJVENfNTI1CQkoMHgwMjAwMDApCisKKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQgkJKFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9CICB8XAorCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19CKQorCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1RFTEVURVhUCQkoVjRMMl9TTElDRURfVEVMRVRFWFRfUEFMX0IgIHxcCisJCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQyAgfFwKKwkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1NFQ0FNICB8XAorCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19CIHxcCisJCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0MgfFwKKwkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfRCkKKworI2RlZmluZSBWNEwyX1NMSUNFRF9DQVBUSU9OCQkoVjRMMl9TTElDRURfQ0FQVElPTl81MjUgICAgIHxcCisJCQkJCSBWNEwyX1NMSUNFRF9DQVBUSU9OXzYyNSkKKworI2RlZmluZSBWNEwyX1NMSUNFRF9XU1MJCQkoVjRMMl9TTElDRURfV1NTXzUyNSAgICAgICAgIHxcCisJCQkJCSBWNEwyX1NMSUNFRF9XU1NfNjI1KQorCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZJVEMJCShWNEwyX1NMSUNFRF9WSVRDXzUyNSAgICAgICAgfFwKKwkJCQkJIFY0TDJfU0xJQ0VEX1ZJVENfNjI1KQorCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV81MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX05UU0NfQiB8XAorCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfTlRTQ19DIHxcCisJCQkJCSBWNEwyX1NMSUNFRF9URUxFVEVYVF9OVFNDX0QgfFwKKwkJCQkJIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICB8XAorCQkJCQkgVjRMMl9TTElDRURfV1NTXzUyNSAgICAgICAgIHxcCisJCQkJCSBWNGwyX1NMSUNFRF9WSVRDXzUyNSkKKworI2RlZmluZSBWNEwyX1NMSUNFRF9WQklfNjI1ICAgICAgICAgICAgIChWNEwyX1NMSUNFRF9URUxFVEVYVF9QQUxfQiAgfFwKKwkJCQkJIFY0TDJfU0xJQ0VEX1RFTEVURVhUX1BBTF9DICB8XAorCQkJCQkgVjRMMl9TTElDRURfVEVMRVRFWFRfU0VDQU0gIHxcCisJCQkJCSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgfFwKKwkJCQkJIFY0TDJfU0xJQ0VEX0NBUFRJT05fNjI1ICAgICB8XAorCQkJCQkgVjRMMl9TTElDRURfV1NTXzYyNSAgICAgICAgIHxcCisJCQkJCSBWNGwyX1NMSUNFRF9WSVRDXzYyNSkKIAogc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKaW5kZXggZmFiNWFlZC4uNTMwYWUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKQEAgLTczLDYgKzczLDExIEBACiBpbnQgdnRfd2FpdGFjdGl2ZShpbnQgdnQpOwogdm9pZCBjaGFuZ2VfY29uc29sZShzdHJ1Y3QgdmNfZGF0YSAqbmV3X3ZjKTsKIHZvaWQgcmVzZXRfdmMoc3RydWN0IHZjX2RhdGEgKnZjKTsKKyNpZmRlZiBDT05GSUdfVlQKK2ludCBpc19jb25zb2xlX3N1c3BlbmRfc2FmZSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpc19jb25zb2xlX3N1c3BlbmRfc2FmZSh2b2lkKSB7IHJldHVybiAxOyB9CisjZW5kaWYKIAogLyoKICAqIHZjX3NjcmVlbi5jIHNoYXJlcyB0aGlzIHRlbXBvcmFyeSBidWZmZXIgd2l0aCB0aGUgY29uc29sZSB3cml0ZSBjb2RlIHNvIHRoYXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaCBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaAppbmRleCBhNTU1YTBmLi4xMzU4ODU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogVGhpcyBmaWxlIGRlZmluZSBhIHNldCBvZiBzdGFuZGFyZCB3aXJlbGVzcyBleHRlbnNpb25zCiAgKgotICogVmVyc2lvbiA6CTE5CTE4LjMuMDUKKyAqIFZlcnNpb24gOgkyMAkxNy4yLjA2CiAgKgogICogQXV0aG9ycyA6CUplYW4gVG91cnJpbGhlcyAtIEhQTCAtIDxqdEBocGwuaHAuY29tPgotICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDUgSmVhbiBUb3VycmlsaGVzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDYgSmVhbiBUb3VycmlsaGVzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogICovCiAKICNpZm5kZWYgX0xJTlVYX1dJUkVMRVNTX0gKQEAgLTgwLDcgKzgwLDcgQEAKICAqICh0aGVyZSBpcyBzb21lIHN0dWZmIHRoYXQgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLi4uKQogICogSSBqdXN0IHBsYW4gdG8gaW5jcmVtZW50IHdpdGggZWFjaCBuZXcgdmVyc2lvbi4KICAqLwotI2RlZmluZSBXSVJFTEVTU19FWFQJMTkKKyNkZWZpbmUgV0lSRUxFU1NfRVhUCTIwCiAKIC8qCiAgKiBDaGFuZ2VzIDoKQEAgLTIwNCw2ICsyMDQsMTAgQEAKICAqCS0gQWRkIElXX1FVQUxfQUxMX1VQREFURUQgYW5kIElXX1FVQUxfQUxMX0lOVkFMSUQgbWFjcm9zCiAgKgktIEFkZCBleHBsaWNpdCBmbGFnIHRvIHRlbGwgc3RhdHMgYXJlIGluIGRCbSA6IElXX1FVQUxfREJNCiAgKgktIEFkZCBJV19JT0NUTF9JRFgoKSBhbmQgSVdfRVZFTlRfSURYKCkgbWFjcm9zCisgKgorICogVjE5IHRvIFYyMAorICogLS0tLS0tLS0tLQorICoJLSBSdE5ldGxpbmsgcmVxdWVzdHMgc3VwcG9ydCAoU0VUL0dFVCkKICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDT05TVEFOVFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDg2YjExMTMuLjk1N2MyMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjAsNiArMjAsMTAgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIH07CiAKK3N0cnVjdCBleGVjdXRlX3dvcmsgeworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKwogI2RlZmluZSBfX1dPUktfSU5JVElBTElaRVIobiwgZiwgZCkgewkJCQlcCiAgICAgICAgIC5lbnRyeQk9IHsgJihuKS5lbnRyeSwgJihuKS5lbnRyeSB9LAkJCVwKIAkuZnVuYyA9IChmKSwJCQkJCQlcCkBAIC03NCw2ICs3OCw4IEBACiB2b2lkIGNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICosCiAJCQkJICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK2ludCBleGVjdXRlX2luX3Byb2Nlc3NfY29udGV4dCh2b2lkICgqZm4pKHZvaWQgKiksIHZvaWQgKiwKKwkJCSAgICAgICBzdHJ1Y3QgZXhlY3V0ZV93b3JrICopOwogCiAvKgogICogS2lsbCBvZmYgYSBwZW5kaW5nIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygpLiAgTm90ZSB0aGF0IHRoZSB3b3JrIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAppbmRleCBiZWFlZjVjLi41NmY5MmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKQEAgLTg4LDggKzg4LDggQEAKIC8qIFRoZXNlIGFyZSBleHBvcnRlZCB0byBzeXNjdGwuICovCiBleHRlcm4gaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW87CiBleHRlcm4gaW50IHZtX2RpcnR5X3JhdGlvOwotZXh0ZXJuIGludCBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzOwotZXh0ZXJuIGludCBkaXJ0eV9leHBpcmVfY2VudGlzZWNzOworZXh0ZXJuIGludCBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWw7CitleHRlcm4gaW50IGRpcnR5X2V4cGlyZV9pbnRlcnZhbDsKIGV4dGVybiBpbnQgYmxvY2tfZHVtcDsKIGV4dGVybiBpbnQgbGFwdG9wX21vZGU7CiAKQEAgLTk5LDcgKzk5LDE1IEBACiAJCQkJICAgICAgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKIAogdm9pZCBwYWdlX3dyaXRlYmFja19pbml0KHZvaWQpOwotdm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKK3ZvaWQgYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkJdW5zaWduZWQgbG9uZyBucl9wYWdlc19kaXJ0aWVkKTsKKworc3RhdGljIGlubGluZSB2b2lkCitiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIobWFwcGluZywgMSk7Cit9CisKIGludCBwZGZsdXNoX29wZXJhdGlvbih2b2lkICgqZm4pKHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGFyZzApOwogaW50IGRvX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGludCBzeW5jX3BhZ2VfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3gyNS5oIGIvaW5jbHVkZS9saW51eC94MjUuaAppbmRleCAxNmQ0NDkzLi5kMDM1ZTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3gyNS5oCisrKyBiL2luY2x1ZGUvbGludXgveDI1LmgKQEAgLTExLDYgKzExLDggQEAKICNpZm5kZWYJWDI1X0tFUk5FTF9ICiAjZGVmaW5lCVgyNV9LRVJORUxfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZQlTSU9DWDI1R1NVQlNDUklQCShTSU9DUFJPVE9QUklWQVRFICsgMCkKICNkZWZpbmUJU0lPQ1gyNVNTVUJTQ1JJUAkoU0lPQ1BST1RPUFJJVkFURSArIDEpCiAjZGVmaW5lCVNJT0NYMjVHRkFDSUxJVElFUwkoU0lPQ1BST1RPUFJJVkFURSArIDIpCkBAIC0yMSw2ICsyMyw4IEBACiAjZGVmaW5lIFNJT0NYMjVTQ1VETUFUQ0hMRU4JKFNJT0NQUk9UT1BSSVZBVEUgKyA3KQogI2RlZmluZSBTSU9DWDI1Q0FMTEFDQ1BUQVBQUlYgICAoU0lPQ1BST1RPUFJJVkFURSArIDgpCiAjZGVmaW5lIFNJT0NYMjVTRU5EQ0FMTEFDQ1BUICAgIChTSU9DUFJPVE9QUklWQVRFICsgOSkKKyNkZWZpbmUgU0lPQ1gyNUdEVEVGQUNJTElUSUVTIChTSU9DUFJPVE9QUklWQVRFICsgMTApCisjZGVmaW5lIFNJT0NYMjVTRFRFRkFDSUxJVElFUyAoU0lPQ1BST1RPUFJJVkFURSArIDExKQogCiAvKgogICoJVmFsdWVzIGZvciB7Z2V0LHNldH1zb2Nrb3B0LgpAQCAtNzcsNiArODEsOCBAQAogI2RlZmluZQlYMjVfTUFTS19QQUNLRVRfU0laRQkweDA0CiAjZGVmaW5lCVgyNV9NQVNLX1dJTkRPV19TSVpFCTB4MDgKIAorI2RlZmluZSBYMjVfTUFTS19DQUxMSU5HX0FFIDB4MTAKKyNkZWZpbmUgWDI1X01BU0tfQ0FMTEVEX0FFIDB4MjAKIAogCiAvKgpAQCAtOTksNiArMTA1LDI2IEBACiB9OwogCiAvKgorKiBJVFUgRFRFIGZhY2lsaXRpZXMKKyogT25seSB0aGUgY2FsbGVkIGFuZCBjYWxsaW5nIGFkZHJlc3MKKyogZXh0ZW5zaW9uIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCisqIFRoZSByZXN0IGFyZSBpbiBwbGFjZSB0byBhdm9pZCB0aGUgc3RydWN0CisqIGNoYW5naW5nIHNpemUgaWYgc29tZW9uZSBuZWVkcyB0aGVtIGxhdGVyCisqLworCitzdHJ1Y3QgeDI1X2R0ZV9mYWNpbGl0aWVzIHsKKwlfX3UxNiBkZWxheV9jdW11bDsKKwlfX3UxNiBkZWxheV90YXJnZXQ7CisJX191MTYgZGVsYXlfbWF4OworCV9fdTggbWluX3Rocm91Z2hwdXQ7CisJX191OCBleHBlZGl0ZWQ7CisJX191OCBjYWxsaW5nX2xlbjsKKwlfX3U4IGNhbGxlZF9sZW47CisJX191OCBjYWxsaW5nX2FlWzIwXTsKKwlfX3U4IGNhbGxlZF9hZVsyMF07Cit9OworCisvKgogICoJQ2FsbCBVc2VyIERhdGEgc3RydWN0dXJlLgogICovCiBzdHJ1Y3QgeDI1X2NhbGx1c2VyZGF0YSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IDgyZmJiNzUuLjZiNDJjYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC0xNTYsNiArMTU2LDEwIEBACiAJWEZSTV9NU0dfRkxVU0hQT0xJQ1ksCiAjZGVmaW5lIFhGUk1fTVNHX0ZMVVNIUE9MSUNZIFhGUk1fTVNHX0ZMVVNIUE9MSUNZCiAKKwlYRlJNX01TR19ORVdBRSwKKyNkZWZpbmUgWEZSTV9NU0dfTkVXQUUgWEZSTV9NU0dfTkVXQUUKKwlYRlJNX01TR19HRVRBRSwKKyNkZWZpbmUgWEZSTV9NU0dfR0VUQUUgWEZSTV9NU0dfR0VUQUUKIAlfX1hGUk1fTVNHX01BWAogfTsKICNkZWZpbmUgWEZSTV9NU0dfTUFYIChfX1hGUk1fTVNHX01BWCAtIDEpCkBAIC0xOTQsNiArMTk4LDIxIEBACiAJeGZybV9hZGRyZXNzX3QJZW5jYXBfb2E7CiB9OwogCisvKiBBRVZFTlQgZmxhZ3MgICovCitlbnVtIHhmcm1fYWVfZnR5cGVfdCB7CisJWEZSTV9BRV9VTlNQRUMsCisJWEZSTV9BRV9SVEhSPTEsCS8qIHJlcGxheSB0aHJlc2hvbGQqLworCVhGUk1fQUVfUlZBTD0yLCAvKiByZXBsYXkgdmFsdWUgKi8KKwlYRlJNX0FFX0xWQUw9NCwgLyogbGlmZXRpbWUgdmFsdWUgKi8KKwlYRlJNX0FFX0VUSFI9OCwgLyogZXhwaXJ5IHRpbWVyIHRocmVzaG9sZCAqLworCVhGUk1fQUVfQ1I9MTYsIC8qIEV2ZW50IGNhdXNlIGlzIHJlcGxheSB1cGRhdGUgKi8KKwlYRlJNX0FFX0NFPTMyLCAvKiBFdmVudCBjYXVzZSBpcyB0aW1lciBleHBpcnkgKi8KKwlYRlJNX0FFX0NVPTY0LCAvKiBFdmVudCBjYXVzZSBpcyBwb2xpY3kgdXBkYXRlICovCisJX19YRlJNX0FFX01BWAorCisjZGVmaW5lIFhGUk1fQUVfTUFYIChfX1hGUk1fQUVfTUFYIC0gMSkKK307CisKIC8qIE5ldGxpbmsgbWVzc2FnZSBhdHRyaWJ1dGVzLiAgKi8KIGVudW0geGZybV9hdHRyX3R5cGVfdCB7CiAJWEZSTUFfVU5TUEVDLApAQCAtMjA1LDYgKzIyNCwxMCBAQAogCVhGUk1BX1NBLAogCVhGUk1BX1BPTElDWSwKIAlYRlJNQV9TRUNfQ1RYLAkJLyogc3RydWN0IHhmcm1fc2VjX2N0eCAqLworCVhGUk1BX0xUSU1FX1ZBTCwKKwlYRlJNQV9SRVBMQVlfVkFMLAorCVhGUk1BX1JFUExBWV9USFJFU0gsCisJWEZSTUFfRVRJTUVSX1RIUkVTSCwKIAlfX1hGUk1BX01BWAogCiAjZGVmaW5lIFhGUk1BX01BWCAoX19YRlJNQV9NQVggLSAxKQpAQCAtMjM1LDYgKzI1OCwxMSBAQAogCV9fdTgJCQkJcHJvdG87CiB9OwogCitzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgeworCXN0cnVjdCB4ZnJtX3VzZXJzYV9pZAkJc2FfaWQ7CisJX191MzIJCQkJZmxhZ3M7Cit9OworCiBzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gewogCXN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvCQlpbmZvOwogCV9fdTMyCQkJCW1pbjsKQEAgLTMwNiw2ICszMzQsOCBAQAogI2RlZmluZSBYRlJNTkxHUlBfU0EJCVhGUk1OTEdSUF9TQQogCVhGUk1OTEdSUF9QT0xJQ1ksCiAjZGVmaW5lIFhGUk1OTEdSUF9QT0xJQ1kJWEZSTU5MR1JQX1BPTElDWQorCVhGUk1OTEdSUF9BRVZFTlRTLAorI2RlZmluZSBYRlJNTkxHUlBfQUVWRU5UUwlYRlJNTkxHUlBfQUVWRU5UUwogCV9fWEZSTU5MR1JQX01BWAogfTsKICNkZWZpbmUgWEZSTU5MR1JQX01BWAkoX19YRlJNTkxHUlBfTUFYIC0gMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvem9ycm8uaCBiL2luY2x1ZGUvbGludXgvem9ycm8uaAppbmRleCBiYTViNzI3Li4yZjEzNWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3pvcnJvLmgKKysrIGIvaW5jbHVkZS9saW51eC96b3Jyby5oCkBAIC0yNzEsMzkgKzI3MSw2IEBACiB9CiAKIAotLyoKLSAqIEEgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIGhlbHBzIGVuc3VyZSBjb3JyZWN0IHpvcnJvX2RyaXZlcgotICogc2V0dXAgYW5kIGNsZWFudXAgZm9yIGNvbW1vbmx5LWVuY291bnRlcmVkIGhvdHBsdWcvbW9kdWxhciBjYXNlcwotICoKLSAqIFRoaXMgTVVTVCBzdGF5IGluIGEgaGVhZGVyLCBhcyBpdCBjaGVja3MgZm9yIC1ETU9EVUxFCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHpvcnJvX21vZHVsZV9pbml0KHN0cnVjdCB6b3Jyb19kcml2ZXIgKmRydikKLXsKLQlpbnQgcmMgPSB6b3Jyb19yZWdpc3Rlcl9kcml2ZXIoZHJ2KTsKLQotCWlmIChyYyA+IDApCi0JCXJldHVybiAwOwotCi0JLyogaWZmIENPTkZJR19IT1RQTFVHIGFuZCBidWlsdCBpbnRvIGtlcm5lbCwgd2Ugc2hvdWxkCi0JICogbGVhdmUgdGhlIGRyaXZlciBhcm91bmQgZm9yIGZ1dHVyZSBob3RwbHVnIGV2ZW50cy4KLQkgKiBGb3IgdGhlIG1vZHVsZSBjYXNlLCBhIGhvdHBsdWcgZGFlbW9uIG9mIHNvbWUgc29ydAotCSAqIHNob3VsZCBsb2FkIGEgbW9kdWxlIGluIHJlc3BvbnNlIHRvIGFuIGluc2VydCBldmVudC4gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHKSAmJiAhZGVmaW5lZChNT0RVTEUpCi0JaWYgKHJjID09IDApCi0JCXJldHVybiAwOwotI2Vsc2UKLQlpZiAocmMgPT0gMCkKLQkJcmMgPSAtRU5PREVWOwotI2VuZGlmCi0KLQkvKiBpZiB3ZSBnZXQgaGVyZSwgd2UgbmVlZCB0byBjbGVhbiB1cCBab3JybyBkcml2ZXIgaW5zdGFuY2UKLQkgKiBhbmQgcmV0dXJuIHNvbWUgc29ydCBvZiBlcnJvciAqLwotCXpvcnJvX3VucmVnaXN0ZXJfZHJpdmVyKGRydik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLQogICAgIC8qCiAgICAgICogIEJpdG1hc2sgaW5kaWNhdGluZyBwb3J0aW9ucyBvZiBhdmFpbGFibGUgWm9ycm8gSUkgUkFNIHRoYXQgYXJlIHVudXNlZAogICAgICAqICBieSB0aGUgc3lzdGVtLiBFdmVyeSBiaXQgcmVwcmVzZW50cyBhIDY0SyBjaHVuaywgZm9yIGEgbWF4aW11bSBvZiA4TUIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvYXVkaW9jaGlwLmggYi9pbmNsdWRlL21lZGlhL2F1ZGlvY2hpcC5oCmluZGV4IDI5NWQyNTYuLjFmZDRhMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvYXVkaW9jaGlwLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9hdWRpb2NoaXAuaApAQCAtMjEsMTggKzIxLDQgQEAKIAlBVURJT19DSElQX01TUDM0WFgKIH07CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogYXVkaW8gaW5wdXRzICovCi0jZGVmaW5lIEFVRElPX1RVTkVSICAgICAgICAweDAwCi0jZGVmaW5lIEFVRElPX1JBRElPICAgICAgICAweDAxCi0jZGVmaW5lIEFVRElPX0VYVEVSTiAgICAgICAweDAyCi0jZGVmaW5lIEFVRElPX0lOVEVSTiAgICAgICAweDAzCi0jZGVmaW5lIEFVRElPX09GRiAgICAgICAgICAweDA0Ci0jZGVmaW5lIEFVRElPX09OICAgICAgICAgICAweDA1Ci0jZGVmaW5lIEFVRElPX0VYVEVSTl8xICAgICBBVURJT19FWFRFUk4KLSNkZWZpbmUgQVVESU9fRVhURVJOXzIgICAgIDB4MDYKLSNkZWZpbmUgQVVESU9fTVVURSAgICAgICAgIDB4ODAKLSNkZWZpbmUgQVVESU9fVU5NVVRFICAgICAgIDB4ODEKLQogI2VuZGlmIC8qIEFVRElPQ0hJUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2NzNTNsMzJhLmggYi9pbmNsdWRlL21lZGlhL2NzNTNsMzJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3NjE5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvY3M1M2wzMmEuaApAQCAtMCwwICsxLDM0IEBACisvKgorICAgIGNzNTNsMzJhLmggLSBkZWZpbml0aW9uIGZvciBjczUzbDMyYSBpbnB1dHMgYW5kIG91dHB1dHMKKworICAgIENvcHlyaWdodCAoQykgMjAwNiBIYW5zIFZlcmt1aWwgKGh2ZXJrdWlsQHhzNGFsbC5ubCkKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfQ1M1M0wzMkFfSF8KKyNkZWZpbmUgX0NTNTNMMzJBX0hfCisKKy8qIFRoZXJlIGFyZSAyIHBoeXNpY2FsIGlucHV0cywgYnV0IHRoZSBzZWNvbmQgaW5wdXQgY2FuIGJlCisgICBwbGFjZWQgaW4gdHdvIG1vZGVzLCB0aGUgZmlyc3QgbW9kZSBieXBhc3NlcyB0aGUgUEdBIChnYWluKSwKKyAgIHRoZSBzZWNvbmQgZ29lcyB0aHJvdWdoIHRoZSBQR0EuIEhlbmNlIHRoZXJlIGFyZSB0aHJlZQorICAgcG9zc2libGUgaW5wdXRzIHRvIGNob29zZSBmcm9tLiAqLworCisvKiBDUzUzTDMyQSBIVyBpbnB1dHMgKi8KKyNkZWZpbmUgQ1M1M0wzMkFfSU4wIDAKKyNkZWZpbmUgQ1M1M0wzMkFfSU4xIDEKKyNkZWZpbmUgQ1M1M0wzMkFfSU4yIDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2kyYy1hZGRyLmggYi9pbmNsdWRlL21lZGlhL2kyYy1hZGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmZjQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvaTJjLWFkZHIuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICoJVjRMIEkyQyBhZGRyZXNzIGxpc3QKKyAqCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDA2IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICoJQmFzZWQgb24gYSBwcmV2aW91cyBtYXBwaW5nIGJ5CisgKglSYWxwaCBNZXR6bGVyIChyamttQHRocC51bmkta29lbG4uZGUpCisgKglHZXJkIEtub3JyIDxrcmF4ZWxAZ29sZGJhY2guaW4tYmVybGluLmRlPgorICoKKyAqLworCisvKiBidHR2IGFkZHJlc3MgbGlzdCAqLworI2RlZmluZSBJMkNfQUREUl9UU0E1NTIyCTB4YzIKKyNkZWZpbmUgSTJDX0FERFJfVERBNzQzMgkweDhhCisjZGVmaW5lIEkyQ19BRERSX0JUODMyX0FMVDEJMHg4OAorI2RlZmluZSBJMkNfQUREUl9CVDgzMl9BTFQyCTB4OGEgLy8gYWx0ZXJuYXRlIHNldHRpbmcKKyNkZWZpbmUgSTJDX0FERFJfVERBODQyNQkweDgyCisjZGVmaW5lIEkyQ19BRERSX1REQTk4NDAJMHg4NAorI2RlZmluZSBJMkNfQUREUl9UREE5ODUwCTB4YjYgLyogYWxzbyB1c2VkIGJ5IDk4NTUsOTg3MyAqLworI2RlZmluZSBJMkNfQUREUl9UREE5ODc0CTB4YjAgLyogYWxzbyB1c2VkIGJ5IDk4NzUgKi8KKyNkZWZpbmUgSTJDX0FERFJfVERBOTg3NQkweGIwCisjZGVmaW5lIEkyQ19BRERSX0hBVVBFRQkJMHhhMAorI2RlZmluZSBJMkNfQUREUl9TVEJFRQkJMHhhZQorI2RlZmluZSBJMkNfQUREUl9WSFgJCTB4YzAKKyNkZWZpbmUgSTJDX0FERFJfTVNQMzQwMAkweDgwCisjZGVmaW5lIEkyQ19BRERSX01TUDM0MDBfQUxUCTB4ODgKKyNkZWZpbmUgSTJDX0FERFJfVEVBNjMwMAkweDgwIC8qIGFsc28gdXNlZCBieSA2MzIwICovCisjZGVmaW5lIEkyQ19BRERSX0RQTDM1MTgJMHg4NAorI2RlZmluZSBJMkNfQUREUl9UREE5ODg3CTB4ODYKKworLyoKKyAqIGkyYyBidXMgYWRkcmVzc2VzIGZvciB0aGUgY2hpcHMgc3VwcG9ydGVkIGJ5IHR2YXVkaW8uYworICovCisKKyNkZWZpbmUgSTJDX0FERFJfVERBODQyNQkweDgyCisjZGVmaW5lIEkyQ19BRERSX1REQTk4NDAJMHg4NCAvKiBhbHNvIHVzZWQgYnkgVEE4ODc0WiAqLworI2RlZmluZSBJMkNfQUREUl9UREE5ODV4X0wJMHhiNCAvKiBhbHNvIHVzZWQgYnkgOTg3MyAqLworI2RlZmluZSBJMkNfQUREUl9UREE5ODV4X0gJMHhiNgorI2RlZmluZSBJMkNfQUREUl9UREE5ODc0CTB4YjAgLyogYWxzbyB1c2VkIGJ5IDk4NzUgKi8KKworI2RlZmluZSBJMkNfQUREUl9URUE2MzAwCTB4ODAgLyogYWxzbyB1c2VkIGJ5IDYzMjAgKi8KKyNkZWZpbmUgSTJDX0FERFJfVEVBNjQyMAkweDk4CisKKyNkZWZpbmUgSTJDX0FERFJfUElDMTZDNTQJMHg5NiAvKiBQVjk1MSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggYWQzZTliYi4uMzAyZDViMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaApAQCAtNDcsMTMgKzQ3LDYgQEAKIAlpbnQgICAgICAgICAgICAgICAga2V5cHJlc3NlZDsgIC8qIGN1cnJlbnQgc3RhdGUgKi8KIH07CiAKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19yYzVfdHZbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3dpbmZhc3RbSVJfS0VZVEFCX1NJWkVdOwotZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Bpbm5hY2xlW0lSX0tFWVRBQl9TSVpFXTsKLWV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbXB0eVtJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfaGF1cHBhdWdlX25ld1tJUl9LRVlUQUJfU0laRV07Ci1leHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGl4ZWx2aWV3W0lSX0tFWVRBQl9TSVpFXTsKLQogdm9pZCBpcl9pbnB1dF9pbml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppciwKIAkJICAgaW50IGlyX3R5cGUsIElSX0tFWVRBQl9UWVBFICppcl9jb2Rlcyk7CiB2b2lkIGlyX2lucHV0X25va2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlyX2lucHV0X3N0YXRlICppcik7CkBAIC02NCw2ICs1NywzOSBAQAogaW50ICBpcl9kZWNvZGVfYmlwaGFzZSh1MzIgKnNhbXBsZXMsIGludCBjb3VudCwgaW50IGxvdywgaW50IGhpZ2gpOwogaW50ICBpcl9kZWNvZGVfcHVsc2VkaXN0YW5jZSh1MzIgKnNhbXBsZXMsIGludCBjb3VudCwgaW50IGxvdywgaW50IGhpZ2gpOwogCisvKiBLZXltYXBzIHRvIGJlIHVzZWQgYnkgb3RoZXIgbW9kdWxlcyAqLworCitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZW1wdHlbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYVtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2R2YnRbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2FwYWNfdmlld2NvbXBbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld1tJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbmVidWxhW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZiX3RbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2lvZGF0YV9iY3R2N2VbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2Fkc3RlY2hfZHZiX3RfcGNpW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19tc2lfdHZhbnl3aGVyZVtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfY2luZXJneV8xNDAwW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVydHZfMzAzW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbnR2X2xpdmVfZHZidF9wcm9bSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2VtX3RlcnJhdGVjW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19lbV9waW5uYWNsZV91c2JbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2ZseXZpZGVvW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19mbHlkdmJbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2NpbmVyZ3lbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2V6dHZbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYVtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfdmlkZW9tYXRlX3R2X3B2cltJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbWFubGlbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2dvdHZpZXc3MTM1W0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wdXJwbGV0dltJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGN0dl9zZWRuYVtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcHY5NTFbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3JjNV90dltJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfd2luZmFzdFtJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcGlubmFjbGVbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2hhdXBwYXVnZV9uZXdbSVJfS0VZVEFCX1NJWkVdOworCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvbXNwMzQwMC5oIGIvaW5jbHVkZS9tZWRpYS9tc3AzNDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlNjFhMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvbXNwMzQwMC5oCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICAgIG1zcDM0MDAuaCAtIGRlZmluaXRpb24gZm9yIG1zcDM0MDAgaW5wdXRzIGFuZCBvdXRwdXRzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX01TUDM0MDBfSF8KKyNkZWZpbmUgX01TUDM0MDBfSF8KKworLyogbXNwMzQwMCByb3V0aW5nCisgICA9PT09PT09PT09PT09PT0KKworICAgVGhlIG1zcDM0MDAgaGFzIGEgY29tcGxpY2F0ZWQgcm91dGluZyBzY2hlbWUgd2l0aCBtYW55IHBvc3NpYmxlCisgICBjb21iaW5hdGlvbnMuIFRoZSBkZXRhaWxzIGFyZSBhbGwgaW4gdGhlIGRhdGFzaGVldHMgYnV0IEkgd2lsbCB0cnkKKyAgIHRvIGdpdmUgYSBzaG9ydCBkZXNjcmlwdGlvbiBoZXJlLgorCisgICBJbnB1dHMKKyAgID09PT09PQorCisgICBUaGVyZSBhcmUgMSkgdHVuZXIgaW5wdXRzLCAyKSBJMlMgaW5wdXRzLCAzKSBTQ0FSVCBpbnB1dHMuIFlvdSB3aWxsIGhhdmUKKyAgIHRvIHNlbGVjdCB3aGljaCB0dW5lciBpbnB1dCB0byB1c2UgYW5kIHdoaWNoIFNDQVJUIGlucHV0IHRvIHVzZS4gVGhlCisgICBzZWxlY3RlZCB0dW5lciBpbnB1dCwgdGhlIHNlbGVjdGVkIFNDQVJUIGlucHV0IGFuZCBhbGwgSTJTIGlucHV0cyBnbyB0bworICAgdGhlIERTUCAodGhlIHR1bmVyIGlucHV0IGZpcnN0IGdvZXMgdGhyb3VnaCB0aGUgZGVtb2R1bGF0b3IpLgorCisgICBUaGUgRFNQIGhhbmRsZXMgdGhpbmdzIGxpa2Ugdm9sdW1lLCBiYXNzL3RyZWJsZSwgYmFsYW5jZSwgYW5kIHNvbWUgY2hpcHMKKyAgIGhhdmUgc3VwcG9ydCBmb3Igc3Vycm91bmQgc291bmQuIEl0IGhhcyBzZXZlcmFsIG91dHB1dHM6IE1BSU4sIEFVWCwgSTJTCisgICBhbmQgU0NBUlQxLzIuIEVhY2ggb3V0cHV0IGNhbiBzZWxlY3Qgd2hpY2ggRFNQIGlucHV0IHRvIHVzZS4gU28gdGhlIE1BSU4KKyAgIG91dHB1dCBjYW4gc2VsZWN0IHRoZSB0dW5lciBpbnB1dCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIHRoZSBTQ0FSVDEgb3V0cHV0CisgICB1c2VzIHRoZSBJMlMgaW5wdXQuCisKKyAgIE91dHB1dHMKKyAgID09PT09PT0KKworICAgTW9zdCBEU1Agb3V0cHV0cyBhcmUgYWxzbyB0aGUgb3V0cHV0cyBvZiB0aGUgbXNwMzQwMC4gSG93ZXZlciwgdGhlIFNDQVJUCisgICBvdXRwdXRzIG9mIHRoZSBtc3AzNDAwIGNhbiBzZWxlY3Qgd2hpY2ggaW5wdXQgdG8gdXNlOiBlaXRoZXIgdGhlIFNDQVJUMSBvcgorICAgU0NBUlQyIG91dHB1dCBmcm9tIHRoZSBEU1AsIG9yIHRoZSBtc3AzNDAwIFNDQVJUIGlucHV0cywgdGh1cyBjb21wbGV0ZWx5CisgICBieXBhc3NpbmcgdGhlIERTUC4KKworICAgU3VtbWFyeQorICAgPT09PT09PQorCisgICBTbyB0byBzcGVjaWZ5IGEgY29tcGxldGUgcm91dGluZyBzY2hlbWUgZm9yIHRoZSBtc3AzNDAwIHlvdSB3aWxsIGhhdmUgdG8KKyAgIHNwZWNpZnkgaW4gdGhlICdpbnB1dCcgZmllbGQgb2YgdGhlIHY0bDJfcm91dGluZyBzdHJ1Y3Q6CisKKyAgIDEpIHdoaWNoIHR1bmVyIGlucHV0IHRvIHVzZQorICAgMikgd2hpY2ggU0NBUlQgaW5wdXQgdG8gdXNlCisgICAzKSB3aGljaCBEU1AgaW5wdXQgdG8gdXNlIGZvciBlYWNoIERTUCBvdXRwdXQKKworICAgQW5kIGluIHRoZSAnb3V0cHV0JyBmaWVsZCBvZiB0aGUgdjRsMl9yb3V0aW5nIHN0cnVjdCB5b3Ugc3BlY2lmeToKKworICAgMSkgd2hpY2ggU0NBUlQgaW5wdXQgdG8gdXNlIGZvciBlYWNoIFNDQVJUIG91dHB1dAorCisgICBEZXBlbmRpbmcgb24gaG93IHRoZSBtc3AgaXMgd2lyZWQgdG8gdGhlIG90aGVyIGNvbXBvbmVudHMgeW91IGNhbgorICAgaWdub3JlIG9yIG11dGUgY2VydGFpbiBpbnB1dHMgb3Igb3V0cHV0cy4KKworICAgQWxzbywgZGVwZW5kaW5nIG9uIHRoZSBtc3AgdmVyc2lvbiBvbmx5IGEgc3Vic2V0IG9mIHRoZSBpbnB1dHMgb3IKKyAgIG91dHB1dHMgbWF5IGJlIHByZXNlbnQuIEF0IHRoZSBlbmQgb2YgdGhpcyBoZWFkZXIgc29tZSB0YWJsZXMgYXJlCisgICBhZGRlZCBjb250YWluaW5nIGEgbGlzdCBvZiB3aGF0IGlzIGF2YWlsYWJsZSBmb3IgZWFjaCBtc3AgdmVyc2lvbi4KKyAqLworCisvKiBJbnB1dHMgdG8gdGhlIERTUCB1bml0OiB0d28gaW5kZXBlbmRlbnQgc2VsZWN0aW9ucyBoYXZlIHRvIGJlIG1hZGU6CisgICAxKSB0aGUgdHVuZXIgKFNJRikgaW5wdXQKKyAgIDIpIHRoZSBTQ0FSVCBpbnB1dAorICAgQml0cyAwLTIgYXJlIHVzZWQgZm9yIHRoZSBTQ0FSVCBpbnB1dCBzZWxlY3QsIGJpdCAzIGlzIHVzZWQgZm9yIHRoZSB0dW5lcgorICAgaW5wdXQsIGJpdHMgNC03IGFyZSByZXNlcnZlZC4KKyAqLworCisvKiBTQ0FSVCBpbnB1dCB0byBEU1Agc2VsZWN0aW9uICovCisjZGVmaW5lIE1TUF9JTl9TQ0FSVF8xICAJMCAgLyogUGluIFNDMV9JTiAqLworI2RlZmluZSBNU1BfSU5fU0NBUlRfMiAgCTEgIC8qIFBpbiBTQzJfSU4gKi8KKyNkZWZpbmUgTVNQX0lOX1NDQVJUXzMgIAkyICAvKiBQaW4gU0MzX0lOICovCisjZGVmaW5lIE1TUF9JTl9TQ0FSVF80ICAJMyAgLyogUGluIFNDNF9JTiAqLworI2RlZmluZSBNU1BfSU5fTU9OTyAgICAgCTYgIC8qIFBpbiBNT05PX0lOICovCisjZGVmaW5lIE1TUF9JTl9NVVRFICAgICAJNyAgLyogTXV0ZSBEU1AgaW5wdXQgKi8KKyNkZWZpbmUgTVNQX1NDQVJUX1RPX0RTUChpbikgCShpbikKKy8qIFR1bmVyIGlucHV0IHRvIGRlbW9kdWxhdG9yIGFuZCBEU1Agc2VsZWN0aW9uICovCisjZGVmaW5lIE1TUF9JTl9UVU5FUl8xIAkJMCAgLyogQW5hbG9nIFNvdW5kIElGIGlucHV0IHBpbiBBTkFfSU4xICovCisjZGVmaW5lIE1TUF9JTl9UVU5FUl8yICAJMSAgLyogQW5hbG9nIFNvdW5kIElGIGlucHV0IHBpbiBBTkFfSU4yICovCisjZGVmaW5lIE1TUF9UVU5FUl9UT19EU1AoaW4pIAkoKGluKSA8PCAzKQorCisvKiBUaGUgbXNwIGhhcyB1cCB0byA1IERTUCBvdXRwdXRzLCBlYWNoIG91dHB1dCBjYW4gaW5kZXBlbmRlbnRseSBzZWxlY3QKKyAgIGEgRFNQIGlucHV0LgorCisgICBUaGUgRFNQIG91dHB1dHMgYXJlOiBsb3Vkc3BlYWtlciBvdXRwdXQgKGFrYSBNQUlOKSwgaGVhZHBob25lcyBvdXRwdXQKKyAgIChha2EgQVVYKSwgU0NBUlQxIERBIG91dHB1dCwgU0NBUlQyIERBIG91dHB1dCBhbmQgYW4gSTJTIG91dHB1dC4KKyAgIFRoZXJlIGFsc28gaXMgYSBxdWFzaS1wZWFrIGRldGVjdG9yIG91dHB1dCwgYnV0IHRoYXQgaXMgbm90IHVzZWQgYnkKKyAgIHRoaXMgZHJpdmVyIGFuZCBpcyBzZXQgdG8gdGhlIHNhbWUgaW5wdXQgYXMgdGhlIGxvdWRzcGVha2VyIG91dHB1dC4KKyAgIE5vdCBhbGwgb3V0cHV0cyBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBtc3AgbW9kZWxzLiBTZXR0aW5nIHRoZSBpbnB1dAorICAgb2YgYW4gdW5zdXBwb3J0ZWQgb3V0cHV0IHdpbGwgYmUgaWdub3JlZCBieSB0aGUgZHJpdmVyLgorCisgICBUaGVyZSBhcmUgdXAgdG8gMTYgRFNQIGlucHV0cyB0byBjaG9vc2UgZnJvbSwgc28gZWFjaCBvdXRwdXQgaXMKKyAgIGFzc2lnbmVkIDQgYml0cy4KKworICAgTm90ZTogdGhlIDQ0eDhHIGNhbiBtaXggdHdvIGlucHV0cyBhbmQgZmVlZCB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlCisgICBEU1AuIFRoaXMgaXMgY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZC4gQWxzbyBub3QgaW1wbGVtZW50ZWQgaXMgdGhlCisgICBtdWx0aS1jaGFubmVsIGNhcGFibGUgSTJTMyBpbnB1dCBvZiB0aGUgNDR4MEcuIElmIHNvbWVvbmUgY2FuIGRlbW9uc3RyYXRlCisgICBhIG5lZWQgZm9yIG9uZSBvZiB0aG9zZSBmZWF0dXJlcyB0aGVuIGFkZGl0aW9uYWwgc3VwcG9ydCBjYW4gYmUgYWRkZWQuICovCisjZGVmaW5lIE1TUF9EU1BfT1VUX1RVTkVSIAkwICAvKiBUdW5lciBvdXRwdXQgKi8KKyNkZWZpbmUgTVNQX0RTUF9PVVRfU0NBUlQgCTIgIC8qIFNDQVJUIG91dHB1dCAqLworI2RlZmluZSBNU1BfRFNQX09VVF9JMlMxIAk1ICAvKiBJMlMxIG91dHB1dCAqLworI2RlZmluZSBNU1BfRFNQX09VVF9JMlMyIAk2ICAvKiBJMlMyIG91dHB1dCAqLworI2RlZmluZSBNU1BfRFNQX09VVF9JMlMzICAgIAk3ICAvKiBJMlMzIG91dHB1dCAqLworI2RlZmluZSBNU1BfRFNQX09VVF9NQUlOX0FWQyAJMTEgLyogTUFJTiBBVkMgcHJvY2Vzc2VkIG91dHB1dCAqLworI2RlZmluZSBNU1BfRFNQX09VVF9NQUlOIAkxMiAvKiBNQUlOIG91dHB1dCAqLworI2RlZmluZSBNU1BfRFNQX09VVF9BVVggCTEzIC8qIEFVWCBvdXRwdXQgKi8KKyNkZWZpbmUgTVNQX0RTUF9UT19NQUlOKGluKSAgIAkoKGluKSA8PCA0KQorI2RlZmluZSBNU1BfRFNQX1RPX0FVWChpbikgICAgCSgoaW4pIDw8IDgpCisjZGVmaW5lIE1TUF9EU1BfVE9fU0NBUlQxKGluKSAJKChpbikgPDwgMTIpCisjZGVmaW5lIE1TUF9EU1BfVE9fU0NBUlQyKGluKSAJKChpbikgPDwgMTYpCisjZGVmaW5lIE1TUF9EU1BfVE9fSTJTKGluKSAgICAJKChpbikgPDwgMjApCisKKy8qIE91dHB1dCBTQ0FSVCBzZWxlY3Q6IHRoZSBTQ0FSVCBvdXRwdXRzIGNhbiBzZWxlY3Qgd2hpY2ggaW5wdXQKKyAgIHRvIHVzZS4gKi8KKyNkZWZpbmUgTVNQX09VVF9TQ0FSVDEgCQkwICAvKiBTQ0FSVDEgaW5wdXQsIGJ5cGFzc2luZyB0aGUgRFNQICovCisjZGVmaW5lIE1TUF9PVVRfU0NBUlQyIAkJMSAgLyogU0NBUlQyIGlucHV0LCBieXBhc3NpbmcgdGhlIERTUCAqLworI2RlZmluZSBNU1BfT1VUX1NDQVJUMyAJCTIgIC8qIFNDQVJUMyBpbnB1dCwgYnlwYXNzaW5nIHRoZSBEU1AgKi8KKyNkZWZpbmUgTVNQX09VVF9TQ0FSVDQgCQkzICAvKiBTQ0FSVDQgaW5wdXQsIGJ5cGFzc2luZyB0aGUgRFNQICovCisjZGVmaW5lIE1TUF9PVVRfU0NBUlQxX0RBIAk0ICAvKiBEU1AgU0NBUlQxIG91dHB1dCAqLworI2RlZmluZSBNU1BfT1VUX1NDQVJUMl9EQSAJNSAgLyogRFNQIFNDQVJUMiBvdXRwdXQgKi8KKyNkZWZpbmUgTVNQX09VVF9NT05PIAkJNiAgLyogTU9OTyBpbnB1dCwgYnlwYXNzaW5nIHRoZSBEU1AgKi8KKyNkZWZpbmUgTVNQX09VVF9NVVRFIAkJNyAgLyogTVVURSBvdXRwdXQgKi8KKyNkZWZpbmUgTVNQX09VVF9UT19TQ0FSVDEoaW4pICAgCShpbikKKyNkZWZpbmUgTVNQX09VVF9UT19TQ0FSVDIoaW4pICAgCSgoaW4pIDw8IDQpCisKKy8qIFNob3J0Y3V0IG1hY3JvcyAqLworI2RlZmluZSBNU1BfSU5QVVQoc2MsIHQsIG1haW5fYXV4X3NyYywgc2NfaTJzX3NyYykgXAorCShNU1BfU0NBUlRfVE9fRFNQKHNjKSB8IFwKKwkgTVNQX1RVTkVSX1RPX0RTUCh0KSB8IFwKKwkgTVNQX0RTUF9UT19NQUlOKG1haW5fYXV4X3NyYykgfCBcCisJIE1TUF9EU1BfVE9fQVVYKG1haW5fYXV4X3NyYykgfCBcCisJIE1TUF9EU1BfVE9fU0NBUlQxKHNjX2kyc19zcmMpIHwgXAorCSBNU1BfRFNQX1RPX1NDQVJUMihzY19pMnNfc3JjKSB8IFwKKwkgTVNQX0RTUF9UT19JMlMoc2NfaTJzX3NyYykpCisjZGVmaW5lIE1TUF9JTlBVVF9ERUZBVUxUIE1TUF9JTlBVVChNU1BfSU5fU0NBUlRfMSwgTVNQX0lOX1RVTkVSXzEsIFwKKwkJCQkgICAgTVNQX0RTUF9PVVRfVFVORVIsIE1TUF9EU1BfT1VUX1RVTkVSKQorI2RlZmluZSBNU1BfT1VUUFVUKHNjKSBcCisJKE1TUF9PVVRfVE9fU0NBUlQxKHNjKSB8IFwKKwkgTVNQX09VVF9UT19TQ0FSVDIoc2MpKQorLyogVGhpcyBlcXVhbHMgdGhlIFJFU0VUIHBvc2l0aW9uIG9mIHRoZSBtc3AzNDAwIEFDQiByZWdpc3RlciAqLworI2RlZmluZSBNU1BfT1VUUFVUX0RFRkFVTFQgKE1TUF9PVVRfVE9fU0NBUlQxKE1TUF9PVVRfU0NBUlQzKSB8IFwKKwkJCSAgICBNU1BfT1VUX1RPX1NDQVJUMihNU1BfT1VUX1NDQVJUMV9EQSkpCisKKy8qIFR1bmVyIGlucHV0cyB2cy4gbXNwIHZlcnNpb24gKi8KKy8qIENoaXAgICAgICBUVU5FUl8xICAgVFVORVJfMgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgbXNwMzR4MGIgIHkgICAgICAgICB5CisgICBtc3AzNHgwYyAgeSAgICAgICAgIHkKKyAgIG1zcDM0eDBkICB5ICAgICAgICAgeQorICAgbXNwMzR4NWQgIHkgICAgICAgICBuCisgICBtc3AzNHg3ZCAgeSAgICAgICAgIG4KKyAgIG1zcDM0eDBnICB5ICAgICAgICAgeQorICAgbXNwMzR4MWcgIHkgICAgICAgICB5CisgICBtc3AzNHgyZyAgeSAgICAgICAgIHkKKyAgIG1zcDM0eDVnICB5ICAgICAgICAgbgorICAgbXNwMzR4N2cgIHkgICAgICAgICBuCisgICBtc3A0NHgwZyAgeSAgICAgICAgIHkKKyAgIG1zcDQ0eDhnICB5ICAgICAgICAgeQorICovCisKKy8qIFNDQVJUIGlucHV0cyB2cy4gbXNwIHZlcnNpb24gKi8KKy8qIENoaXAgICAgICBTQzEgU0MyIFNDMyBTQzQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIG1zcDM0eDBiICB5ICAgeSAgIHkgICBuCisgICBtc3AzNHgwYyAgeSAgIHkgICB5ICAgbgorICAgbXNwMzR4MGQgIHkgICB5ICAgeSAgIHkKKyAgIG1zcDM0eDVkICB5ICAgeSAgIG4gICBuCisgICBtc3AzNHg3ZCAgeSAgIG4gICBuICAgbgorICAgbXNwMzR4MGcgIHkgICB5ICAgeSAgIHkKKyAgIG1zcDM0eDFnICB5ICAgeSAgIHkgICB5CisgICBtc3AzNHgyZyAgeSAgIHkgICB5ICAgeQorICAgbXNwMzR4NWcgIHkgICB5ICAgbiAgIG4KKyAgIG1zcDM0eDdnICB5ICAgbiAgIG4gICBuCisgICBtc3A0NHgwZyAgeSAgIHkgICB5ICAgeQorICAgbXNwNDR4OGcgIHkgICB5ICAgeSAgIHkKKyAqLworCisvKiBEU1AgaW5wdXRzIHZzLiBtc3AgdmVyc2lvbiAodHVuZXIgYW5kIFNDQVJUIGlucHV0cyBhcmUgYWx3YXlzIGF2YWlsYWJsZSkgKi8KKy8qIENoaXAgICAgICBJMlMxIEkyUzIgSTJTMyBNQUlOX0FWQyBNQUlOIEFVWAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBtc3AzNHgwYiAgeSAgICBuICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3AzNHgwYyAgeSAgICB5ICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3AzNHgwZCAgeSAgICB5ICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3AzNHg1ZCAgeSAgICB5ICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3AzNHg3ZCAgbiAgICBuICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3AzNHgwZyAgeSAgICB5ICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3AzNHgxZyAgeSAgICB5ICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3AzNHgyZyAgeSAgICB5ICAgIG4gICAgeSAgICAgICAgeSAgICB5CisgICBtc3AzNHg1ZyAgeSAgICB5ICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3AzNHg3ZyAgbiAgICBuICAgIG4gICAgbiAgICAgICAgbiAgICBuCisgICBtc3A0NHgwZyAgeSAgICB5ICAgIHkgICAgeSAgICAgICAgeSAgICB5CisgICBtc3A0NHg4ZyAgeSAgICB5ICAgIHkgICAgbiAgICAgICAgbiAgICBuCisgKi8KKworLyogRFNQIG91dHB1dHMgdnMuIG1zcCB2ZXJzaW9uICovCisvKiBDaGlwICAgICAgTUFJTiBBVVggU0NBUlQxIFNDQVJUMiBJMlMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgbXNwMzR4MGIgIHkgICAgeSAgIHkgICAgICBuICAgICAgeQorICAgbXNwMzR4MGMgIHkgICAgeSAgIHkgICAgICBuICAgICAgeQorICAgbXNwMzR4MGQgIHkgICAgeSAgIHkgICAgICB5ICAgICAgeQorICAgbXNwMzR4NWQgIHkgICAgbiAgIHkgICAgICBuICAgICAgeQorICAgbXNwMzR4N2QgIHkgICAgbiAgIHkgICAgICBuICAgICAgbgorICAgbXNwMzR4MGcgIHkgICAgeSAgIHkgICAgICB5ICAgICAgeQorICAgbXNwMzR4MWcgIHkgICAgeSAgIHkgICAgICB5ICAgICAgeQorICAgbXNwMzR4MmcgIHkgICAgeSAgIHkgICAgICB5ICAgICAgeQorICAgbXNwMzR4NWcgIHkgICAgbiAgIHkgICAgICBuICAgICAgeQorICAgbXNwMzR4N2cgIHkgICAgbiAgIHkgICAgICBuICAgICAgbgorICAgbXNwNDR4MGcgIHkgICAgeSAgIHkgICAgICB5ICAgICAgeQorICAgbXNwNDR4OGcgIHkgICAgeSAgIHkgICAgICB5ICAgICAgeQorICovCisKKyNlbmRpZiAvKiBNU1AzNDAwX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9yZHMuaCBiL2luY2x1ZGUvbWVkaWEvcmRzLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS92aWRlby9yZHMuaApyZW5hbWUgdG8gaW5jbHVkZS9tZWRpYS9yZHMuaAppbmRleCAwZDMwZWI3Li45NTFjMWFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9yZHMuaAorKysgYi9pbmNsdWRlL21lZGlhL3Jkcy5oCkBAIC00Miw3ICs0MiwzIEBACiAjZGVmaW5lIFJEU19DTURfUE9MTAlfSU9SKCdSJyw0LGludCkKIAogI2VuZGlmCi0KLQotCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKaW5kZXggMmJjNjM0Zi4uZmVlNTc5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKQEAgLTExLDYgKzExLDggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4JCS8qIGZvciBpMmMgc3Vic3lzdGVtICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBmb3IgYWNjZXNzaW5nIGRldmljZXMgKi8KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgkvKiBmb3Igdm1hbGxvYygpICovCiAjaW5jbHVkZSA8bGludXgvbW0uaD4JCS8qIGZvciB2bWFsbG9jX3RvX3BhZ2UoKSAqLwogCkBAIC0xMTIsNyArMTE0LDcgQEAKIAogCS8qIGRpZmZlcmVudCBkZXZpY2UgbG9ja3MgKi8KIAlzcGlubG9ja190CQkJc2xvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZQkJbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOwogCiAJdW5zaWduZWQgY2hhcgkJCV9faW9tZW0gKm1lbTsJCS8qIHBvaW50ZXIgdG8gbWFwcGVkIElPIG1lbW9yeSAqLwogCWludAkJCQlyZXZpc2lvbjsJLyogY2hpcCByZXZpc2lvbjsgbmVlZGVkIGZvciBidWctd29ya2Fyb3VuZHMqLwpAQCAtMTMzLDE1ICsxMzUsMTYgQEAKIAl2b2lkICgqdnZfY2FsbGJhY2spKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCB1bnNpZ25lZCBsb25nIHN0YXR1cyk7CiAKIAkvKiBpMmMtc3R1ZmYgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlCWkyY19sb2NrOwotCXUzMgkJCWkyY19iaXRyYXRlOwotCXN0cnVjdCBzYWE3MTQ2X2RtYQlkX2kyYzsJLyogcG9pbnRlciB0byBpMmMgbWVtb3J5ICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJaTJjX3dxOwotCWludAkJCWkyY19vcDsKKwlzdHJ1Y3QgbXV0ZXgJCQlpMmNfbG9jazsKKworCXUzMgkJCQlpMmNfYml0cmF0ZTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kbWEJCWRfaTJjOwkvKiBwb2ludGVyIHRvIGkyYyBtZW1vcnkgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAkJaTJjX3dxOworCWludAkJCQlpMmNfb3A7CiAKIAkvKiBtZW1vcmllcyAqLwotCXN0cnVjdCBzYWE3MTQ2X2RtYQlkX3JwczA7Ci0Jc3RydWN0IHNhYTcxNDZfZG1hCWRfcnBzMTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kbWEJCWRfcnBzMDsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kbWEJCWRfcnBzMTsKIH07CiAKIC8qIGZyb20gc2FhNzE0Nl9pMmMuYyAqLwpAQCAtMTUwLDcgKzE1Myw3IEBACiAKIC8qIGZyb20gc2FhNzE0Nl9jb3JlLmMgKi8KIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHNhYTcxNDZfZGV2aWNlczsKLWV4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIHNhYTcxNDZfZGV2aWNlc19sb2NrOworZXh0ZXJuIHN0cnVjdCBtdXRleCBzYWE3MTQ2X2RldmljZXNfbG9jazsKIGludCBzYWE3MTQ2X3JlZ2lzdGVyX2V4dGVuc2lvbihzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24qKTsKIGludCBzYWE3MTQ2X3VucmVnaXN0ZXJfZXh0ZW5zaW9uKHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiopOwogc3RydWN0IHNhYTcxNDZfZm9ybWF0KiBmb3JtYXRfYnlfZm91cmNjKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBpbnQgZm91cmNjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKaW5kZXggZTVlNzQ5ZS4uNDUwN2NiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2X3Z2LmgKQEAgLTE5Nyw3ICsxOTcsOCBAQAogdm9pZCBzYWE3MTQ2X2J1ZmZlcl9uZXh0KHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9kbWFxdWV1ZSAqcSxpbnQgdmJpKTsKIGludCBzYWE3MTQ2X2J1ZmZlcl9xdWV1ZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfZG1hcXVldWUgKnEsIHN0cnVjdCBzYWE3MTQ2X2J1ZiAqYnVmKTsKIHZvaWQgc2FhNzE0Nl9idWZmZXJfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpOwotdm9pZCBzYWE3MTQ2X2RtYV9mcmVlKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LHN0cnVjdCBzYWE3MTQ2X2J1ZiAqYnVmKTsKK3ZvaWQgc2FhNzE0Nl9kbWFfZnJlZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldixzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJCQlzdHJ1Y3Qgc2FhNzE0Nl9idWYgKmJ1Zik7CiAKIGludCBzYWE3MTQ2X3Z2X2luaXQoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYsIHN0cnVjdCBzYWE3MTQ2X2V4dF92diAqZXh0X3Z2KTsKIGludCBzYWE3MTQ2X3Z2X3JlbGVhc2Uoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci10eXBlcy5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci10eXBlcy5oCmluZGV4IDE1ODIxYWIuLmFkOWMxNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaAorKysgYi9pbmNsdWRlL21lZGlhL3R1bmVyLXR5cGVzLmgKQEAgLTE0LDYgKzE0LDcgQEAKIAogc3RydWN0IHR1bmVyX3JhbmdlIHsKIAl1bnNpZ25lZCBzaG9ydCBsaW1pdDsKKwl1bnNpZ25lZCBjaGFyIGNvbmZpZzsKIAl1bnNpZ25lZCBjaGFyIGNiOwogfTsKIApAQCAtMzgsNyArMzksNiBAQAogCSAqIHN0YXRpYyB1bmxlc3MgdGhlIGNvbnRyb2wgYnl0ZSB3YXMgc2VudCBmaXJzdC4KIAkgKi8KIAl1bnNpZ25lZCBpbnQgY2JfZmlyc3RfaWZfbG93ZXJfZnJlcToxOwotCXVuc2lnbmVkIGNoYXIgY29uZmlnOyAvKiB0byBiZSBtb3ZlZCBpbnRvIHN0cnVjdCB0dW5lcl9yYW5nZSBmb3IgZHZiLXBsbCBtZXJnZSAqLwogCiAJdW5zaWduZWQgaW50IGNvdW50OwogCXN0cnVjdCB0dW5lcl9yYW5nZSAqcmFuZ2VzOwpAQCAtNDYsNiArNDYsNyBAQAogCiBzdHJ1Y3QgdHVuZXJ0eXBlIHsKIAljaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBjb3VudDsKIAlzdHJ1Y3QgdHVuZXJfcGFyYW1zICpwYXJhbXM7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R1bmVyLmggYi9pbmNsdWRlL21lZGlhL3R1bmVyLmgKaW5kZXggYTViZWVhYy4uMDE3ZmVkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaApAQCAtMTEwLDEyICsxMTAsMTUgQEAKIAogI2RlZmluZSBUVU5FUl9MR19URFZTX0gwNjJGCQk2NAkvKiBEVmlDTyBGdXNpb25IRFRWIDUgKi8KICNkZWZpbmUgVFVORVJfWU1FQ19UVkY2NlQ1X0JfREZGCTY1CS8qIEFjb3JwIFk4NzhGICovCi0jZGVmaW5lIFRVTkVSX0xHX05UU0NfVEFMTl9NSU5JCQk2NgorI2RlZmluZSBUVU5FUl9MR19UQUxOCQkJNjYKICNkZWZpbmUgVFVORVJfUEhJTElQU19URDEzMTYJCTY3CiAKICNkZWZpbmUgVFVORVJfUEhJTElQU19UVVYxMjM2RAkJNjgJLyogQVRJIEhEVFYgV29uZGVyICovCiAjZGVmaW5lIFRVTkVSX1RORl81MzM1TUYgICAgICAgICAgICAgICAgNjkJLyogU2FicmVudCBCdDg0OCAgICovCiAjZGVmaW5lIFRVTkVSX1NBTVNVTkdfVENQTl8yMTIxUDMwQSAgICAgNzAgCS8qIEhhdXBwYXVnZSBQVlItNTAwTUNFIE5UU0MgKi8KKyNkZWZpbmUgVFVORVJfWENFSVZFX1hDMzAyOAkJNzEKKworI2RlZmluZSBUVU5FUl9USE9NU09OX0ZFNjYwMAkJNzIJLyogRFZpQ08gRnVzaW9uSERUViBEVkItVCBIeWJyaWQgKi8KIAogLyogdHYgY2FyZCBzcGVjaWZpYyAqLwogI2RlZmluZSBUREE5ODg3X1BSRVNFTlQgCQkoMTw8MCkKQEAgLTIwOSw2ICsyMTIsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGNvbnN0IGludCB0dW5lcl9jb3VudDsKIAogZXh0ZXJuIGludCBtaWNyb3R1bmVfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CitleHRlcm4gaW50IHhjMzAyOF9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKIGV4dGVybiBpbnQgdGRhODI5MF9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjKTsKIGV4dGVybiBpbnQgdGRhODI5MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CiBleHRlcm4gaW50IHRlYTU3NjdfdHVuZXJfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3R2YXVkaW8uaCBiL2luY2x1ZGUvbWVkaWEvdHZhdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTVhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL3R2YXVkaW8uaApAQCAtMCwwICsxLDMwIEBACisvKgorICAgIHR2YXVkaW8uaCAtIGRlZmluaXRpb24gZm9yIHR2YXVkaW8gaW5wdXRzCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX1RWQVVESU9fSAorI2RlZmluZSBfVFZBVURJT19ICisKKy8qIFRoZSB0dmF1ZGlvIG1vZHVsZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgaW5wdXRzOiAqLworI2RlZmluZSBUVkFVRElPX0lOUFVUX1RVTkVSICAwCisjZGVmaW5lIFRWQVVESU9fSU5QVVRfUkFESU8gIDEKKyNkZWZpbmUgVFZBVURJT19JTlBVVF9FWFRFUk4gMgorI2RlZmluZSBUVkFVRElPX0lOUFVUX0lOVEVSTiAzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCmluZGV4IGQ0MDMwYTcuLjY0MjUyMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKQEAgLTU4LDYgKzU4LDkgQEAKIC8qIFByaW50cyB0aGUgaW9jdGwgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtYXQgKi8KIGV4dGVybiB2b2lkIHY0bF9wcmludGtfaW9jdGwodW5zaWduZWQgaW50IGNtZCk7CiAKKy8qIFByaW50cyB0aGUgaW9jdGwgYW5kIGFyZyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAqLworZXh0ZXJuIHZvaWQgdjRsX3ByaW50a19pb2N0bF9hcmcoY2hhciAqcyx1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworCiAvKiBVc2UgdGhpcyBtYWNybyBmb3Igbm9uLUkyQyBkcml2ZXJzLiBQYXNzIHRoZSBkcml2ZXIgbmFtZSBhcyB0aGUgZmlyc3QgYXJnLiAqLwogI2RlZmluZSB2NGxfcHJpbnRfaW9jdGwobmFtZSwgY21kKSAgCQkgXAogCWRvIHsgIAkJCQkJIFwKQEAgLTEwMCw2ICsxMDMsNyBAQAogCVY0TDJfSURFTlRfVU5LTk9XTiA9IDAsCiAKIAkvKiBtb2R1bGUgc2FhNzExNTogcmVzZXJ2ZWQgcmFuZ2UgMTAwLTE0OSAqLworCVY0TDJfSURFTlRfU0FBNzExMyA9IDEwMywKIAlWNEwyX0lERU5UX1NBQTcxMTQgPSAxMDQsCiAJVjRMMl9JREVOVF9TQUE3MTE1ID0gMTA1LAogCkBAIC0xMTUsMjUgKzExOSwzMCBAQAogfTsKIAogLyogYXVkaW8gaW9jdGxzICovCi0vKiB2NGwgZGV2aWNlIHdhcyBvcGVuZWQgaW4gUmFkaW8gbW9kZSAqLwotI2RlZmluZSBBVURDX1NFVF9SQURJTyAgICAgICAgX0lPKCdkJyw4OCkKLS8qIHNlbGVjdCBmcm9tIFRWLHJhZGlvLGV4dGVybixNVVRFICovCi0jZGVmaW5lIEFVRENfU0VUX0lOUFVUICAgICAgICBfSU9XKCdkJyw4OSxpbnQpCiAKLS8qIG1zcDM0MDAgaW9jdGw6IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUgKi8KLXN0cnVjdCBtc3BfbWF0cml4IHsKLSAgaW50IGlucHV0OwotICBpbnQgb3V0cHV0OwotfTsKLSNkZWZpbmUgTVNQX1NFVF9NQVRSSVggICAgIF9JT1coJ20nLDE3LHN0cnVjdCBtc3BfbWF0cml4KQorLyogdjRsIGRldmljZSB3YXMgb3BlbmVkIGluIFJhZGlvIG1vZGUsIHRvIGJlIHJlcGxhY2VkIGJ5IFZJRElPQ19JTlRfU19UVU5FUl9NT0RFICovCisjZGVmaW5lIEFVRENfU0VUX1JBRElPICAgICAgICBfSU8oJ2QnLDg4KQogCiAvKiB0dW5lciBpb2N0bHMgKi8KKwogLyogU2V0cyB0dW5lciB0eXBlIGFuZCBpdHMgSTJDIGFkZHIgKi8KLSNkZWZpbmUgVFVORVJfU0VUX1RZUEVfQUREUiAgICAgICAgICBfSU9XKCdkJyw5MCxpbnQpCi0vKiBQdXRzIHR1bmVyIG9uIHBvd2Vyc2F2aW5nIHN0YXRlLCBkaXNhYmxpbmcgaXQsIGV4Y2VwdCBmb3IgaTJjICovCi0jZGVmaW5lIFRVTkVSX1NFVF9TVEFOREJZICAgICAgICAgICAgX0lPVygnZCcsOTEsaW50KQorI2RlZmluZSBUVU5FUl9TRVRfVFlQRV9BRERSICAgICAgICAgIF9JT1coJ2QnLCA5MCwgaW50KQorCisvKiBQdXRzIHR1bmVyIG9uIHBvd2Vyc2F2aW5nIHN0YXRlLCBkaXNhYmxpbmcgaXQsIGV4Y2VwdCBmb3IgaTJjLiBUbyBiZSByZXBsYWNlZAorICAgYnkgVklESU9DX0lOVF9TX1NUQU5EQlkuICovCisjZGVmaW5lIFRVTkVSX1NFVF9TVEFOREJZICAgICAgICAgICAgX0lPVygnZCcsIDkxLCBpbnQpCisKIC8qIFNldHMgdGRhOTg4NyBzcGVjaWZpYyBzdHVmZiwgbGlrZSBwb3J0MSwgcG9ydDIgYW5kIHFzcyAqLwotI2RlZmluZSBUREE5ODg3X1NFVF9DT05GSUcgICAgICAgICAgIF9JT1coJ2QnLDkyLGludCkKKyNkZWZpbmUgVERBOTg4N19TRVRfQ09ORklHICAgICAgICAgICBfSU9XKCdkJywgOTIsIGludCkKKworLyogU3dpdGNoIHRoZSB0dW5lciB0byBhIHNwZWNpZmljIHR1bmVyIG1vZGUuIFJlcGxhY2VtZW50IG9mIEFVRENfU0VUX1JBRElPICovCisjZGVmaW5lIFZJRElPQ19JTlRfU19UVU5FUl9NT0RFCSAgICAgX0lPVygnZCcsIDkzLCBlbnVtIHY0bDJfdHVuZXJfdHlwZSkKKworLyogR2VuZXJpYyBzdGFuZGJ5IGNvbW1hbmQuIFBhc3NpbmcgLTEgKGFsbCBiaXRzIHNldCB0byAxKSB3aWxsIHB1dCB0aGUgd2hvbGUKKyAgIGNoaXAgaW50byBzdGFuZGJ5IG1vZGUsIHZhbHVlIDAgd2lsbCBtYWtlIHRoZSBjaGlwIGZ1bGx5IGFjdGl2ZS4gU3BlY2lmaWMKKyAgIGJpdHMgY2FuIGJlIHVzZWQgYnkgY2VydGFpbiBjaGlwcyB0byBlbmFibGUvZGlzYWJsZSBzcGVjaWZpYyBzdWJzeXN0ZW1zLgorICAgUmVwbGFjZW1lbnQgb2YgVFVORVJfU0VUX1NUQU5EQlkuICovCisjZGVmaW5lIFZJRElPQ19JTlRfU19TVEFOREJZIAkgICAgIF9JT1coJ2QnLCA5NCwgdTMyKQogCiAvKiBvbmx5IGltcGxlbWVudGVkIGlmIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgZGVmaW5lZCAqLwogI2RlZmluZQlWSURJT0NfSU5UX1NfUkVHSVNURVIgCQlfSU9SICgnZCcsIDEwMCwgc3RydWN0IHY0bDJfcmVnaXN0ZXIpCkBAIC0xNjAsNyArMTY5LDggQEAKIAogLyogVXNlZCB0byBnZW5lcmF0ZSBWQkkgc2lnbmFscyBvbiBhIHZpZGVvIHNpZ25hbC4gdjRsMl9zbGljZWRfdmJpX2RhdGEgaXMKICAgIGZpbGxlZCB3aXRoIHRoZSBkYXRhIHBhY2tldHMgdGhhdCBzaG91bGQgYmUgb3V0cHV0LiBOb3RlIHRoYXQgaWYgeW91IHNldAotICAgdGhlIGxpbmUgZmllbGQgdG8gMCwgdGhlbiB0aGF0IFZCSSBzaWduYWwgaXMgZGlzYWJsZWQuICovCisgICB0aGUgbGluZSBmaWVsZCB0byAwLCB0aGVuIHRoYXQgVkJJIHNpZ25hbCBpcyBkaXNhYmxlZC4gSWYgbm8KKyAgIHZhbGlkIFZCSSBkYXRhIHdhcyBmb3VuZCwgdGhlbiB0aGUgdHlwZSBmaWVsZCBpcyBzZXQgdG8gMCBvbiByZXR1cm4uICovCiAjZGVmaW5lIFZJRElPQ19JTlRfU19WQklfREFUQSAJCV9JT1cgKCdkJywgMTA1LCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpCiAKIC8qIFVzZWQgdG8gb2J0YWluIHRoZSBzbGljZWQgVkJJIHBhY2tldCBmcm9tIGEgcmVhZGJhY2sgcmVnaXN0ZXIuIE5vdCBhbGwKQEAgLTE2OCwxMSArMTc4LDExIEBACiAgICByZWdpc3RlciBjb250YWlucyBpbnZhbGlkIG9yIGVycm9uZW91cyBkYXRhIC1FSU8gaXMgcmV0dXJuZWQuIE5vdGUgdGhhdAogICAgeW91IG11c3QgZmlsbCBpbiB0aGUgJ2lkJyBtZW1iZXIgYW5kIHRoZSAnZmllbGQnIG1lbWJlciAodG8gZGV0ZXJtaW5lCiAgICB3aGV0aGVyIENDIGRhdGEgZnJvbSB0aGUgZmlyc3Qgb3Igc2Vjb25kIGZpZWxkIHNob3VsZCBiZSBvYnRhaW5lZCkuICovCi0jZGVmaW5lIFZJRElPQ19JTlRfR19WQklfREFUQSAJCV9JT1dSKCdkJywgMTA2LCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKikKKyNkZWZpbmUgVklESU9DX0lOVF9HX1ZCSV9EQVRBIAkJX0lPV1IoJ2QnLCAxMDYsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSkKIAogLyogUmV0dXJucyB0aGUgY2hpcCBpZGVudGlmaWVyIG9yIFY0TDJfSURFTlRfVU5LTk9XTiBpZiBubyBpZGVudGlmaWNhdGlvbiBjYW4KICAgIGJlIG1hZGUuICovCi0jZGVmaW5lIFZJRElPQ19JTlRfR19DSElQX0lERU5UCQlfSU9SICgnZCcsIDEwNywgZW51bSB2NGwyX2NoaXBfaWRlbnQgKikKKyNkZWZpbmUgVklESU9DX0lOVF9HX0NISVBfSURFTlQJCV9JT1IgKCdkJywgMTA3LCBlbnVtIHY0bDJfY2hpcF9pZGVudCkKIAogLyogU2V0cyBJMlMgc3BlZWQgaW4gYnBzLiBUaGlzIGlzIHVzZWQgdG8gcHJvdmlkZSBhIHN0YW5kYXJkIHdheSB0byBzZWxlY3QgSTJTCiAgICBjbG9jayB1c2VkIGJ5IGRyaXZpbmcgZGlnaXRhbCBhdWRpbyBzdHJlYW1zIGF0IHNvbWUgYm9hcmQgZGVzaWducy4KQEAgLTE4MCw0ICsxOTAsMjUgQEAKICAgIElmIHRoZSBmcmVxdWVuY3kgaXMgbm90IHN1cHBvcnRlZCwgdGhlbiAtRUlOVkFMIGlzIHJldHVybmVkLiAqLwogI2RlZmluZSBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVRIAlfSU9XICgnZCcsIDEwOCwgdTMyKQogCisvKiBSb3V0aW5nIGRlZmluaXRpb24sIGRldmljZSBkZXBlbmRlbnQuIEl0IHNwZWNpZmllcyB3aGljaCBpbnB1dHMgKGlmIGFueSkKKyAgIHNob3VsZCBiZSByb3V0ZWQgdG8gd2hpY2ggb3V0cHV0cyAoaWYgYW55KS4gKi8KK3N0cnVjdCB2NGwyX3JvdXRpbmcgeworCXUzMiBpbnB1dDsKKwl1MzIgb3V0cHV0OworfTsKKworLyogVGhlc2UgaW50ZXJuYWwgY29tbWFuZHMgc2hvdWxkIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMKKyAgIG9mIGFuIGF1ZGlvL3ZpZGVvIGNoaXAuIFRoZXkgd2lsbCByZXBsYWNlIHRoZSB2NGwyIEFQSSBjb21tYW5kcworICAgVklESU9DX1MvR19JTlBVVCwgVklESU9DX1MvR19PVVRQVVQsIFZJRElPQ19TL0dfQVVESU8gYW5kIFZJRElPQ19TL0dfQVVET1VUCisgICB0aGF0IGFyZSBtZWFudCB0byBiZSB1c2VkIGJ5IHRoZSB1c2VyLgorICAgVGhlIGludGVybmFsIGNvbW1hbmRzIHNob3VsZCBiZSB1c2VkIHRvIHN3aXRjaCBpbnB1dHMvb3V0cHV0cworICAgYmVjYXVzZSBvbmx5IHRoZSBkcml2ZXIga25vd3MgaG93IHRvIG1hcCBhICdUZWxldmlzaW9uJyBpbnB1dCB0byB0aGUgcHJlY2lzZQorICAgaW5wdXQvb3V0cHV0IHJvdXRpbmcgb2YgYW4gQS9EIGNvbnZlcnRlciwgb3IgYSBEU1AsIG9yIGEgdmlkZW8gZGlnaXRpemVyLgorICAgVGhlc2UgZm91ciBjb21tYW5kcyBzaG91bGQgb25seSBiZSBzZW50IGRpcmVjdGx5IHRvIGFuIGkyYyBkZXZpY2UsIHRoZXkKKyAgIHNob3VsZCBub3QgYmUgYnJvYWRjYXN0IGFzIHRoZSByb3V0aW5nIGlzIHZlcnkgZGV2aWNlIHNwZWNpZmljLiAqLworI2RlZmluZQlWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORwlfSU9XICgnZCcsIDEwOSwgc3RydWN0IHY0bDJfcm91dGluZykKKyNkZWZpbmUJVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkcJX0lPUiAoJ2QnLCAxMTAsIHN0cnVjdCB2NGwyX3JvdXRpbmcpCisjZGVmaW5lCVZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HCV9JT1cgKCdkJywgMTExLCBzdHJ1Y3QgdjRsMl9yb3V0aW5nKQorI2RlZmluZQlWSURJT0NfSU5UX0dfVklERU9fUk9VVElORwlfSU9SICgnZCcsIDExMiwgc3RydWN0IHY0bDJfcm91dGluZykKKwogI2VuZGlmIC8qIFY0TDJfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvLWJ1Zi1kdmIuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW8tYnVmLWR2Yi5oCmluZGV4IGFkMGEwN2EuLmI3OGQ5MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdmlkZW8tYnVmLWR2Yi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdmlkZW8tYnVmLWR2Yi5oCkBAIC0xMSw3ICsxMSw3IEBACiAJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgZHZicTsKIAogCS8qIHZpZGVvLWJ1Zi1kdmIgc3RhdGUgaW5mbyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgICAgICAgICAgIGxvY2s7CisJc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgbG9jazsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgICAgICAgICAqdGhyZWFkOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIG5mZWVkczsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaCBiL2luY2x1ZGUvbWVkaWEvdmlkZW8tYnVmLmgKaW5kZXggOGVjZmQ3OC4uZmZmM2ZkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlby1idWYuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvLWJ1Zi5oCkBAIC0xLDE1ICsxLDIwIEBACiAvKgogICoKICAqIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdmlkZW80bGludXggY2FwdHVyZSBidWZmZXJzLCB0byBoYW5kbGUKLSAqIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBQQ0kgRE1BLiAgUmlnaHQgbm93IGJ0dHYgKyBzYWE3MTM0IHVzZSBpdC4KKyAqIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBQQ0kgRE1BLgorICogUmlnaHQgbm93LCBidHR2LCBzYWE3MTM0LCBzYWE3MTQ2IGFuZCBjeDg4IHVzZSBpdC4KICAqCiAgKiBUaGUgZnVuY3Rpb25zIGV4cGVjdCB0aGUgaGFyZHdhcmUgYmVpbmcgYWJsZSB0byBzY2F0dGVyIGdhdHRlcgogICogKGkuZS4gdGhlIGJ1ZmZlcnMgYXJlIG5vdCBsaW5lYXIgaW4gcGh5c2ljYWwgbWVtb3J5LCBidXQgZnJhZ21lbnRlZAogICogaW50byBQQUdFX1NJWkUgY2h1bmtzKS4gIFRoZXkgYWxzbyBhc3N1bWUgdGhlIGRyaXZlciBkb2VzIG5vdCBuZWVkCi0gKiB0byB0b3VjaCB0aGUgdmlkZW8gZGF0YSAodGh1cyBpdCBpcyBwcm9iYWJseSBub3QgdXNlZnVsIGZvciBVU0IgYXMKLSAqIGRhdGEgb2Z0ZW4gbXVzdCBiZSB1bmNvbXByZXNzZWQgYnkgdGhlIGRyaXZlcnMpLgorICogdG8gdG91Y2ggdGhlIHZpZGVvIGRhdGEuCisgKgorICogZGV2aWNlIHNwZWNpZmljIG1hcC91bm1hcC9zeW5jIHN0dWZmIG5vdyBhcmUgbWFwcGVkIGFzIGZpbGUgb3BlcmF0aW9ucworICogdG8gYWxsb3cgaXRzIHVzYWdlIGJ5IFVTQiBhbmQgdmlydHVhbCBkZXZpY2VzLgogICoKICAqIChjKSAyMDAxLDAyIEdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4KKyAqIChjKSAyMDA2IE1hdXJvIENhcnZhbGhvIENoZWhhYiwgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKyAqIChjKSAyMDA2IFRlZCBXYWx0aGVyIGFuZCBKb2huIFNva29sCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zOCw2ICs0Myw5IEBACiBzdHJ1Y3Qgc2NhdHRlcmxpc3QqIHZpZGVvYnVmX3BhZ2VzX3RvX3NnKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBucl9wYWdlcywKIAkJCQkJIGludCBvZmZzZXQpOwogCitzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyOworc3RydWN0IHZpZGVvYnVmX3F1ZXVlOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyoKQEAgLTQ5LDcgKzU3LDcgQEAKICAqCXBvaW50ZXIgKyBsZW5ndGguICBUaGUga2VybmVsIHZlcnNpb24ganVzdCB3YW50cyB0aGUgc2l6ZSBhbmQKICAqCWRvZXMgbWVtb3J5IGFsbG9jYXRpb24gdG9vIHVzaW5nIHZtYWxsb2NfMzIoKS4KICAqCi0gKiB2aWRlb2J1Zl9kbWFfcGNpXyooKQorICogdmlkZW9idWZfZG1hXyooKQogICoJc2VlIERvY3VtZW50YXRpb24vRE1BLW1hcHBpbmcudHh0LCB0aGVzZSBmdW5jdGlvbnMgdG8KICAqCWJhc2ljYWxseSB0aGUgc2FtZS4gIFRoZSBtYXAgZnVuY3Rpb24gZG9lcyBhbHNvIGJ1aWxkIGEKICAqCXNjYXR0ZXJsaXN0IGZvciB0aGUgYnVmZmVyIChhbmQgdW5tYXAgZnJlZXMgaXQgLi4uKQpAQCAtODYsMTIgKzk0LDE4IEBACiAJCQkgICAgIGludCBucl9wYWdlcyk7CiBpbnQgdmlkZW9idWZfZG1hX2luaXRfb3ZlcmxheShzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEsIGludCBkaXJlY3Rpb24sCiAJCQkgICAgICBkbWFfYWRkcl90IGFkZHIsIGludCBucl9wYWdlcyk7Ci1pbnQgdmlkZW9idWZfZG1hX3BjaV9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKLWludCB2aWRlb2J1Zl9kbWFfcGNpX3N5bmMoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJCSAgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKLWludCB2aWRlb2J1Zl9kbWFfcGNpX3VubWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CiBpbnQgdmlkZW9idWZfZG1hX2ZyZWUoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKIAoraW50IHZpZGVvYnVmX2RtYV9tYXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlKiBxLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CitpbnQgdmlkZW9idWZfZG1hX3N5bmMoc3RydWN0IHZpZGVvYnVmX3F1ZXVlKiBxLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CitpbnQgdmlkZW9idWZfZG1hX3VubWFwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSogcSxzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOworCisJLypGSVhNRTogdGhlc2UgdmFyaWFudHMgYXJlIHVzZWQgb25seSBvbiAqLWFsc2EgY29kZSwgd2hlcmUgdmlkZW9idWYgaXMKKwkgKiB1c2VkIHdpdGhvdXQgcXVldWUKKwkgKi8KK2ludCB2aWRlb2J1Zl9wY2lfZG1hX21hcChzdHJ1Y3QgcGNpX2RldiAqcGNpLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CitpbnQgdmlkZW9idWZfcGNpX2RtYV91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGNpLHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgpAQCAtMTE1LDkgKzEyOSw2IEBACiAgKgogICovCiAKLXN0cnVjdCB2aWRlb2J1Zl9idWZmZXI7Ci1zdHJ1Y3QgdmlkZW9idWZfcXVldWU7Ci0KIHN0cnVjdCB2aWRlb2J1Zl9tYXBwaW5nIHsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKQEAgLTE2NCw2ICsxNzUsMTAgQEAKIAlzdHJ1Y3QgdGltZXZhbCAgICAgICAgICB0czsKIH07CiAKK3R5cGVkZWYgaW50ICh2Yl9tYXBfc2dfdCkodm9pZCAqZGV2LHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LGludCBucl9wYWdlcywKKwkJCQkJaW50IGRpcmVjdGlvbik7CisKKwogc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyB7CiAJaW50ICgqYnVmX3NldHVwKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQkgdW5zaWduZWQgaW50ICpjb3VudCwgdW5zaWduZWQgaW50ICpzaXplKTsKQEAgLTE3NCwxMiArMTg5LDIwIEBACiAJCQkgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKTsKIAl2b2lkICgqYnVmX3JlbGVhc2UpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwKIAkJCSAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2Yik7CisKKwkvKiBIZWxwZXIgb3BlcmF0aW9ucyAtIGRldmljZSBkZXBlbmRlbnQuCisJICogSWYgbnVsbCwgdmlkZW9idWZfaW5pdCBkZWZhdWx0cyBhbGwgdG8gUENJIGhhbmRsaW5nCisJICovCisKKwl2Yl9tYXBfc2dfdAkqdmJfbWFwX3NnOworCXZiX21hcF9zZ190CSp2Yl9kbWFfc3luY19zZzsKKwl2Yl9tYXBfc2dfdAkqdmJfdW5tYXBfc2c7CiB9OwogCiBzdHJ1Y3QgdmlkZW9idWZfcXVldWUgewotCXN0cnVjdCBzZW1hcGhvcmUgICAgICAgICAgIGxvY2s7CisJc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgbG9jazsKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICAqaXJxbG9jazsKLQlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICAqcGNpOworCXZvaWQJCQkgICAqZGV2OyAvKiBvbiBwY2ksIHBvaW50cyB0byBzdHJ1Y3QgcGNpX2RldiAqLwogCiAJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgICAgdHlwZTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBpbnB1dHM7IC8qIGZvciBWNEwyX0JVRl9GTEFHX0lOUFVUICovCkBAIC0yMDQsMTIgKzIyNywxNSBAQAogCiB2b2lkKiB2aWRlb2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSk7CiBpbnQgdmlkZW9idWZfd2FpdG9uKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBpbnQgbm9uX2Jsb2NraW5nLCBpbnQgaW50cik7Ci1pbnQgdmlkZW9idWZfaW9sb2NrKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAotCQkgICAgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZidWYpOworaW50IHZpZGVvYnVmX2lvbG9jayhzdHJ1Y3QgdmlkZW9idWZfcXVldWUqIHEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmJ1Zik7CisKKy8qIE1hcHMgZm9wcyB0byBQQ0kgc3R1ZmYgKi8KK3ZvaWQgdmlkZW9idWZfcXVldWVfcGNpKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSogcSk7CiAKIHZvaWQgdmlkZW9idWZfcXVldWVfaW5pdChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCiAJCQkgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyAqb3BzLAotCQkJIHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkgdm9pZCAqZGV2LAogCQkJIHNwaW5sb2NrX3QgKmlycWxvY2ssCiAJCQkgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCiAJCQkgZW51bSB2NGwyX2ZpZWxkIGZpZWxkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS93bTg3NzUuaCBiL2luY2x1ZGUvbWVkaWEvd204Nzc1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3MzljNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvd204Nzc1LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAgICB3bTg3NzUuaCAtIGRlZmluaXRpb24gZm9yIHdtODc3NSBpbnB1dHMgYW5kIG91dHB1dHMKKworICAgIENvcHlyaWdodCAoQykgMjAwNiBIYW5zIFZlcmt1aWwgKGh2ZXJrdWlsQHhzNGFsbC5ubCkKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworI2lmbmRlZiBfV004Nzc1X0hfCisjZGVmaW5lIF9XTTg3NzVfSF8KKworLyogVGhlIFdNODc3NSBoYXMgNCBpbnB1dHMgYW5kIG9uZSBvdXRwdXQuIFplcm8gb3IgbW9yZSBpbnB1dHMKKyAgIGFyZSBtdWx0aXBsZXhlZCB0b2dldGhlciB0byB0aGUgb3V0cHV0LiBIZW5jZSB0aGVyZSBhcmUKKyAgIDE2IGNvbWJpbmF0aW9ucy4KKyAgIElmIG9ubHkgb25lIGlucHV0IGlzIGFjdGl2ZSAodGhlIG5vcm1hbCBjYXNlKSB0aGVuIHRoZQorICAgaW5wdXQgdmFsdWVzIDEsIDIsIDQgb3IgOCBzaG91bGQgYmUgdXNlZC4gKi8KKworI2RlZmluZSBXTTg3NzVfQUlOMSAxCisjZGVmaW5lIFdNODc3NV9BSU4yIDIKKyNkZWZpbmUgV004Nzc1X0FJTjMgNAorI2RlZmluZSBXTTg3NzVfQUlONCA4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCmluZGV4IGJmYzE3NzkuLjQyN2RhYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaAorKysgYi9pbmNsdWRlL25ldC9hZl91bml4LmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvdW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKIGV4dGVybiB2b2lkIHVuaXhfaW5mbGlnaHQoc3RydWN0IGZpbGUgKmZwKTsKQEAgLTcxLDcgKzcyLDcgQEAKICAgICAgICAgc3RydWN0IHVuaXhfYWRkcmVzcyAgICAgKmFkZHI7CiAgICAgICAgIHN0cnVjdCBkZW50cnkJCSpkZW50cnk7CiAgICAgICAgIHN0cnVjdCB2ZnNtb3VudAkJKm1udDsKLSAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAgICAgICAgcmVhZHNlbTsKKwlzdHJ1Y3QgbXV0ZXgJCXJlYWRsb2NrOwogICAgICAgICBzdHJ1Y3Qgc29jawkJKnBlZXI7CiAgICAgICAgIHN0cnVjdCBzb2NrCQkqb3RoZXI7CiAgICAgICAgIHN0cnVjdCBzb2NrCQkqZ2NfdHJlZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4MjUuaCBiL2luY2x1ZGUvbmV0L2F4MjUuaAppbmRleCAyMjUwYTE4Li5kMDUyYjIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9heDI1LmgKKysrIGIvaW5jbHVkZS9uZXQvYXgyNS5oCkBAIC0xMTAsOCArMTEwLDE1IEBACiBlbnVtIHsKIAlBWDI1X1BST1RPX1NURF9TSU1QTEVYLAogCUFYMjVfUFJPVE9fU1REX0RVUExFWCwKKyNpZmRlZiBDT05GSUdfQVgyNV9EQU1BX1NMQVZFCiAJQVgyNV9QUk9UT19EQU1BX1NMQVZFLAotCUFYMjVfUFJPVE9fREFNQV9NQVNURVIKKyNpZmRlZiBDT05GSUdfQVgyNV9EQU1BX01BU1RFUgorCUFYMjVfUFJPVE9fREFNQV9NQVNURVIsCisjZGVmaW5lIEFYMjVfUFJPVE9fTUFYIEFYMjVfUFJPVE9fREFNQV9NQVNURVIKKyNlbmRpZgorI2VuZGlmCisJX19BWDI1X1BST1RPX01BWCwKKwlBWDI1X1BST1RPX01BWCA9IF9fQVgyNV9QUk9UT19NQVggLTEKIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29tcGF0LmggYi9pbmNsdWRlL25ldC9jb21wYXQuaAppbmRleCAyOTBiYWI0Li44NjYyYjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb21wYXQuaAorKysgYi9pbmNsdWRlL25ldC9jb21wYXQuaApAQCAtMjMsNiArMjMsOSBAQAogCWNvbXBhdF9pbnRfdAljbXNnX3R5cGU7CiB9OwogCitzdHJ1Y3Qgc29jazsKK2V4dGVybiBpbnQgY29tcGF0X3NvY2tfZ2V0X3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKik7CisKICNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgKi8KICNkZWZpbmUgY29tcGF0X21zZ2hkcgltc2doZHIJCS8qIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzICovCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfQ09NUEFUKSAqLwpAQCAtMzQsNyArMzcsNiBAQAogZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2dldHNvY2tvcHQoaW50LCBpbnQsIGludCwgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKIGV4dGVybiBpbnQgcHV0X2Ntc2dfY29tcGF0KHN0cnVjdCBtc2doZHIqLCBpbnQsIGludCwgaW50LCB2b2lkICopOwogCi1zdHJ1Y3Qgc29jazsKIGV4dGVybiBpbnQgY21zZ2hkcl9mcm9tX3VzZXJfY29tcGF0X3RvX2tlcm4oc3RydWN0IG1zZ2hkciAqLCBzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CiAKICNlbmRpZiAvKiBORVRfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuLmggYi9pbmNsdWRlL25ldC9kbi5oCmluZGV4IGE0YjYxNjguLjQ2NWI3ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RuLmgKKysrIGIvaW5jbHVkZS9uZXQvZG4uaApAQCAtNiwxMCArNiw4IEBACiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBkbl9hZGRyZXNzOwotCi0jZGVmaW5lIGRuX250b2hzKHgpIGxlMTZfdG9fY3B1KCh1bnNpZ25lZCBzaG9ydCkoeCkpCi0jZGVmaW5lIGRuX2h0b25zKHgpIGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCkoeCkpCisjZGVmaW5lIGRuX250b2hzKHgpIGxlMTZfdG9fY3B1KHgpCisjZGVmaW5lIGRuX2h0b25zKHgpIGNwdV90b19sZTE2KHgpCiAKIHN0cnVjdCBkbl9zY3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gQ29udHJvbCBQb3J0ICovCiB7CkBAIC0zMSwzNiArMjksMzYgQEAKICNkZWZpbmUgRE5fQ0wgICAgMTUgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZWQgICAgICAgICAgICAgICAqLwogI2RlZmluZSBETl9DTiAgICAxNiAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlZCBOb3RpZmljYXRpb24gICovCiAKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgYWRkcmxvYzsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgYWRkcnJlbTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgbnVtZGF0OwotICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBudW1vdGg7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIG51bW90aF9yY3Y7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIG51bWRhdF9yY3Y7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIGFja3htdF9kYXQ7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIGFja3htdF9vdGg7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIGFja3Jjdl9kYXQ7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIGFja3Jjdl9vdGg7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIGZsb3dyZW1fc3c7Ci0JdW5zaWduZWQgY2hhcgkJZmxvd2xvY19zdzsKKyAgICAgICAgX19sZTE2ICAgICAgICAgIGFkZHJsb2M7CisgICAgICAgIF9fbGUxNiAgICAgICAgICBhZGRycmVtOworICAgICAgICBfX3UxNiAgICAgICAgICBudW1kYXQ7CisgICAgICAgIF9fdTE2ICAgICAgICAgIG51bW90aDsKKyAgICAgICAgX191MTYgICAgICAgICAgbnVtb3RoX3JjdjsKKyAgICAgICAgX191MTYgICAgICAgICAgbnVtZGF0X3JjdjsKKyAgICAgICAgX191MTYgICAgICAgICAgYWNreG10X2RhdDsKKyAgICAgICAgX191MTYgICAgICAgICAgYWNreG10X290aDsKKyAgICAgICAgX191MTYgICAgICAgICAgYWNrcmN2X2RhdDsKKyAgICAgICAgX191MTYgICAgICAgICAgYWNrcmN2X290aDsKKyAgICAgICAgX191OCAgICAgICAgICAgZmxvd3JlbV9zdzsKKwlfX3U4ICAgICAgICAgICBmbG93bG9jX3N3OwogI2RlZmluZSBETl9TRU5EICAgICAgICAgMgogI2RlZmluZSBETl9ET05UU0VORCAgICAgMQogI2RlZmluZSBETl9OT0NIQU5HRSAgICAgMAotCXVuc2lnbmVkIHNob3J0CQlmbG93cmVtX2RhdDsKLQl1bnNpZ25lZCBzaG9ydAkJZmxvd3JlbV9vdGg7Ci0JdW5zaWduZWQgc2hvcnQJCWZsb3dsb2NfZGF0OwotCXVuc2lnbmVkIHNob3J0CQlmbG93bG9jX290aDsKLQl1bnNpZ25lZCBjaGFyCQlzZXJ2aWNlc19yZW07Ci0JdW5zaWduZWQgY2hhcgkJc2VydmljZXNfbG9jOwotCXVuc2lnbmVkIGNoYXIJCWluZm9fcmVtOwotCXVuc2lnbmVkIGNoYXIJCWluZm9fbG9jOworCV9fdTE2CQlmbG93cmVtX2RhdDsKKwlfX3UxNgkJZmxvd3JlbV9vdGg7CisJX191MTYJCWZsb3dsb2NfZGF0OworCV9fdTE2CQlmbG93bG9jX290aDsKKwlfX3U4CQlzZXJ2aWNlc19yZW07CisJX191OAkJc2VydmljZXNfbG9jOworCV9fdTgJCWluZm9fcmVtOworCV9fdTgJCWluZm9fbG9jOwogCi0JdW5zaWduZWQgc2hvcnQJCXNlZ3NpemVfcmVtOwotCXVuc2lnbmVkIHNob3J0CQlzZWdzaXplX2xvYzsKKwlfX3UxNgkJc2Vnc2l6ZV9yZW07CisJX191MTYJCXNlZ3NpemVfbG9jOwogCi0JdW5zaWduZWQgY2hhcgkJbm9uYWdsZTsKLQl1bnNpZ25lZCBjaGFyCQltdWx0aV9pcmVxOwotCXVuc2lnbmVkIGNoYXIJCWFjY2VwdF9tb2RlOworCV9fdTgJCW5vbmFnbGU7CisJX191OAkJbXVsdGlfaXJlcTsKKwlfX3U4CQlhY2NlcHRfbW9kZTsKIAl1bnNpZ25lZCBsb25nCQlzZWdfdG90YWw7IC8qIFJ1bm5pbmcgdG90YWwgb2YgY3VycmVudCBzZWdtZW50ICovCiAKIAlzdHJ1Y3Qgb3B0ZGF0YV9kbiAgICAgY29ubmRhdGFfaW47CkBAIC0xNjAsNDAgKzE1OCw0MSBAQAogICovCiAjZGVmaW5lIEROX1NLQl9DQihza2IpICgoc3RydWN0IGRuX3NrYl9jYiAqKShza2IpLT5jYikKIHN0cnVjdCBkbl9za2JfY2IgewotCXVuc2lnbmVkIHNob3J0IGRzdDsKLQl1bnNpZ25lZCBzaG9ydCBzcmM7Ci0JdW5zaWduZWQgc2hvcnQgaG9wczsKLQl1bnNpZ25lZCBzaG9ydCBkc3RfcG9ydDsKLQl1bnNpZ25lZCBzaG9ydCBzcmNfcG9ydDsKLQl1bnNpZ25lZCBjaGFyIHNlcnZpY2VzOwotCXVuc2lnbmVkIGNoYXIgaW5mbzsKLQl1bnNpZ25lZCBjaGFyIHJ0X2ZsYWdzOwotCXVuc2lnbmVkIGNoYXIgbnNwX2ZsYWdzOwotCXVuc2lnbmVkIHNob3J0IHNlZ3NpemU7Ci0JdW5zaWduZWQgc2hvcnQgc2VnbnVtOwotCXVuc2lnbmVkIHNob3J0IHhtaXRfY291bnQ7CisJX19sZTE2IGRzdDsKKwlfX2xlMTYgc3JjOworCV9fdTE2IGhvcHM7CisJX19sZTE2IGRzdF9wb3J0OworCV9fbGUxNiBzcmNfcG9ydDsKKwlfX3U4IHNlcnZpY2VzOworCV9fdTggaW5mbzsKKwlfX3U4IHJ0X2ZsYWdzOworCV9fdTggbnNwX2ZsYWdzOworCV9fdTE2IHNlZ3NpemU7CisJX191MTYgc2VnbnVtOworCV9fdTE2IHhtaXRfY291bnQ7CiAJdW5zaWduZWQgbG9uZyBzdGFtcDsKIAlpbnQgaWlmOwogfTsKIAotc3RhdGljIGlubGluZSBkbl9hZGRyZXNzIGRuX2V0aDJkbih1bnNpZ25lZCBjaGFyICpldGhhZGRyKQorc3RhdGljIGlubGluZSBfX2xlMTYgZG5fZXRoMmRuKHVuc2lnbmVkIGNoYXIgKmV0aGFkZHIpCiB7Ci0JcmV0dXJuIGV0aGFkZHJbNF0gfCAoZXRoYWRkcls1XSA8PCA4KTsKKwlyZXR1cm4gZG5faHRvbnMoZXRoYWRkcls0XSB8IChldGhhZGRyWzVdIDw8IDgpKTsKIH0KIAotc3RhdGljIGlubGluZSBkbl9hZGRyZXNzIGRuX3NhZGRyMmRuKHN0cnVjdCBzb2NrYWRkcl9kbiAqc2FkZHIpCitzdGF0aWMgaW5saW5lIF9fbGUxNiBkbl9zYWRkcjJkbihzdHJ1Y3Qgc29ja2FkZHJfZG4gKnNhZGRyKQogewotCXJldHVybiAqKGRuX2FkZHJlc3MgKilzYWRkci0+c2RuX25vZGVhZGRyOworCXJldHVybiAqKF9fbGUxNiAqKXNhZGRyLT5zZG5fbm9kZWFkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbl9kbjJldGgodW5zaWduZWQgY2hhciAqZXRoYWRkciwgZG5fYWRkcmVzcyBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGRuX2RuMmV0aCh1bnNpZ25lZCBjaGFyICpldGhhZGRyLCBfX2xlMTYgYWRkcikKIHsKKwlfX3UxNiBhID0gZG5fbnRvaHMoYWRkcik7CiAJZXRoYWRkclswXSA9IDB4QUE7CiAJZXRoYWRkclsxXSA9IDB4MDA7CiAJZXRoYWRkclsyXSA9IDB4MDQ7CiAJZXRoYWRkclszXSA9IDB4MDA7Ci0JZXRoYWRkcls0XSA9ICh1bnNpZ25lZCBjaGFyKShhZGRyICYgMHhmZik7Ci0JZXRoYWRkcls1XSA9ICh1bnNpZ25lZCBjaGFyKShhZGRyID4+IDgpOworCWV0aGFkZHJbNF0gPSAoX191OCkoYSAmIDB4ZmYpOworCWV0aGFkZHJbNV0gPSAoX191OCkoYSA+PiA4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRuX3NrX3BvcnRzX2NvcHkoc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IGRuX3NjcCAqc2NwKQpAQCAtMjAyLDcgKzIwMSw3IEBACiAJZmwtPnVsaV91LmRucG9ydHMuZHBvcnQgPSBzY3AtPmFkZHJyZW07CiAJZmwtPnVsaV91LmRucG9ydHMub2JqbnVtID0gc2NwLT5hZGRyLnNkbl9vYmpudW07CiAJaWYgKGZsLT51bGlfdS5kbnBvcnRzLm9iam51bSA9PSAwKSB7Ci0JCWZsLT51bGlfdS5kbnBvcnRzLm9iam5hbWVsID0gc2NwLT5hZGRyLnNkbl9vYmpuYW1lbDsKKwkJZmwtPnVsaV91LmRucG9ydHMub2JqbmFtZWwgPSAoX191OClkbl9udG9ocyhzY3AtPmFkZHIuc2RuX29iam5hbWVsKTsKIAkJbWVtY3B5KGZsLT51bGlfdS5kbnBvcnRzLm9iam5hbWUsIHNjcC0+YWRkci5zZG5fb2JqbmFtZSwgMTYpOwogCX0KIH0KQEAgLTIxNyw3ICsyMTYsNyBAQAogZXh0ZXJuIHN0cnVjdCBzb2NrICpkbl9za2xpc3RfZmluZF9saXN0ZW5lcihzdHJ1Y3Qgc29ja2FkZHJfZG4gKmFkZHIpOwogZXh0ZXJuIHN0cnVjdCBzb2NrICpkbl9maW5kX2J5X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKICNkZWZpbmUgRE5fQVNDQlVGX0xFTiA5Ci1leHRlcm4gY2hhciAqZG5fYWRkcjJhc2MoZG5fYWRkcmVzcywgY2hhciAqKTsKK2V4dGVybiBjaGFyICpkbl9hZGRyMmFzYyhfX3UxNiwgY2hhciAqKTsKIGV4dGVybiBpbnQgZG5fZGVzdHJveV90aW1lcihzdHJ1Y3Qgc29jayAqc2spOwogCiBleHRlcm4gaW50IGRuX3NvY2thZGRyMnVzZXJuYW1lKHN0cnVjdCBzb2NrYWRkcl9kbiAqYWRkciwgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBjaGFyIHR5cGUpOwpAQCAtMjI2LDcgKzIyNSw3IEBACiBleHRlcm4gdm9pZCBkbl9zdGFydF9zbG93X3RpbWVyKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gdm9pZCBkbl9zdG9wX3Nsb3dfdGltZXIoc3RydWN0IHNvY2sgKnNrKTsKIAotZXh0ZXJuIGRuX2FkZHJlc3MgZGVjbmV0X2FkZHJlc3M7CitleHRlcm4gX19sZTE2IGRlY25ldF9hZGRyZXNzOwogZXh0ZXJuIGludCBkZWNuZXRfZGVidWdfbGV2ZWw7CiBleHRlcm4gaW50IGRlY25ldF90aW1lX3dhaXQ7CiBleHRlcm4gaW50IGRlY25ldF9kbl9jb3VudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RuX2Rldi5oIGIvaW5jbHVkZS9uZXQvZG5fZGV2LmgKaW5kZXggNWE4NmU3OC4uY2VlNDY4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZG5fZGV2LmgKKysrIGIvaW5jbHVkZS9uZXQvZG5fZGV2LmgKQEAgLTcsMTEgKzcsMTEgQEAKIHN0cnVjdCBkbl9pZmFkZHIgewogCXN0cnVjdCBkbl9pZmFkZHIgKmlmYV9uZXh0OwogCXN0cnVjdCBkbl9kZXYgICAgKmlmYV9kZXY7Ci0JZG5fYWRkcmVzcyAgICAgICBpZmFfbG9jYWw7Ci0JZG5fYWRkcmVzcyAgICAgICBpZmFfYWRkcmVzczsKLQl1bnNpZ25lZCBjaGFyICAgIGlmYV9mbGFnczsKLQl1bnNpZ25lZCBjaGFyICAgIGlmYV9zY29wZTsKLQljaGFyICAgICAgICAgICAgIGlmYV9sYWJlbFtJRk5BTVNJWl07CisJX19sZTE2ICAgICAgICAgICAgaWZhX2xvY2FsOworCV9fbGUxNiAgICAgICAgICAgIGlmYV9hZGRyZXNzOworCV9fdTggICAgICAgICAgICAgIGlmYV9mbGFnczsKKwlfX3U4ICAgICAgICAgICAgICBpZmFfc2NvcGU7CisJY2hhciAgICAgICAgICAgICAgaWZhX2xhYmVsW0lGTkFNU0laXTsKIH07CiAKICNkZWZpbmUgRE5fREVWX1NfUlUgIDAgLyogUnVuIC0gd29ya2luZyBub3JtYWxseSAgICovCkBAIC05MSw3ICs5MSw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJdW5zaWduZWQgbG9uZyB0MzsKIAlzdHJ1Y3QgbmVpZ2hfcGFybXMgKm5laWdoX3Bhcm1zOwotCXVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl07CisJX191OCBhZGRyW0VUSF9BTEVOXTsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpyb3V0ZXI7IC8qIERlZmF1bHQgcm91dGVyIG9uIGNpcmN1aXQgKi8KIAlzdHJ1Y3QgbmVpZ2hib3VyICpwZWVyOyAgIC8qIFBlZXIgb24gcG9pbnRvcG9pbnQgbGlua3MgKi8KIAl1bnNpZ25lZCBsb25nIHVwdGltZTsgICAgIC8qIFRpbWUgZGV2aWNlIHdlbnQgdXAgaW4gamlmZmllcyAqLwpAQCAtOTksNTYgKzk5LDU2IEBACiAKIHN0cnVjdCBkbl9zaG9ydF9wYWNrZXQKIHsKLQl1bnNpZ25lZCBjaGFyICAgbXNnZmxnOwotCXVuc2lnbmVkIHNob3J0ICBkc3Rub2RlOwotCXVuc2lnbmVkIHNob3J0ICBzcmNub2RlOwotCXVuc2lnbmVkIGNoYXIgICBmb3J3YXJkOworCV9fdTggICAgbXNnZmxnOworCV9fbGUxNiBkc3Rub2RlOworCV9fbGUxNiBzcmNub2RlOworCV9fdTggICBmb3J3YXJkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGRuX2xvbmdfcGFja2V0CiB7Ci0JdW5zaWduZWQgY2hhciAgIG1zZ2ZsZzsKLQl1bnNpZ25lZCBjaGFyICAgZF9hcmVhOwotCXVuc2lnbmVkIGNoYXIgICBkX3N1YmFyZWE7Ci0JdW5zaWduZWQgY2hhciAgIGRfaWRbNl07Ci0JdW5zaWduZWQgY2hhciAgIHNfYXJlYTsKLQl1bnNpZ25lZCBjaGFyICAgc19zdWJhcmVhOwotCXVuc2lnbmVkIGNoYXIgICBzX2lkWzZdOwotCXVuc2lnbmVkIGNoYXIgICBubDI7Ci0JdW5zaWduZWQgY2hhciAgIHZpc2l0X2N0OwotCXVuc2lnbmVkIGNoYXIgICBzX2NsYXNzOwotCXVuc2lnbmVkIGNoYXIgICBwdDsKKwlfX3U4ICAgbXNnZmxnOworCV9fdTggICBkX2FyZWE7CisJX191OCAgIGRfc3ViYXJlYTsKKwlfX3U4ICAgZF9pZFs2XTsKKwlfX3U4ICAgc19hcmVhOworCV9fdTggICBzX3N1YmFyZWE7CisJX191OCAgIHNfaWRbNl07CisJX191OCAgIG5sMjsKKwlfX3U4ICAgdmlzaXRfY3Q7CisJX191OCAgIHNfY2xhc3M7CisJX191OCAgIHB0OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERSUCAtIFJvdXRpbmcgbWVzc2FnZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RydWN0IGVuZG5vZGVfaGVsbG9fbWVzc2FnZQogewotCXVuc2lnbmVkIGNoYXIgICBtc2dmbGc7Ci0JdW5zaWduZWQgY2hhciAgIHRpdmVyWzNdOwotCXVuc2lnbmVkIGNoYXIgICBpZFs2XTsKLQl1bnNpZ25lZCBjaGFyICAgaWluZm87Ci0JdW5zaWduZWQgc2hvcnQgIGJsa3NpemU7Ci0JdW5zaWduZWQgY2hhciAgIGFyZWE7Ci0JdW5zaWduZWQgY2hhciAgIHNlZWRbOF07Ci0JdW5zaWduZWQgY2hhciAgIG5laWdoYm9yWzZdOwotCXVuc2lnbmVkIHNob3J0ICB0aW1lcjsKLQl1bnNpZ25lZCBjaGFyICAgbXBkOwotCXVuc2lnbmVkIGNoYXIgICBkYXRhbGVuOwotCXVuc2lnbmVkIGNoYXIgICBkYXRhWzJdOworCV9fdTggICBtc2dmbGc7CisJX191OCAgIHRpdmVyWzNdOworCV9fdTggICBpZFs2XTsKKwlfX3U4ICAgaWluZm87CisJX19sZTE2IGJsa3NpemU7CisJX191OCAgIGFyZWE7CisJX191OCAgIHNlZWRbOF07CisJX191OCAgIG5laWdoYm9yWzZdOworCV9fbGUxNiB0aW1lcjsKKwlfX3U4ICAgbXBkOworCV9fdTggICBkYXRhbGVuOworCV9fdTggICBkYXRhWzJdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IHJ0bm9kZV9oZWxsb19tZXNzYWdlCiB7Ci0JdW5zaWduZWQgY2hhciAgIG1zZ2ZsZzsKLQl1bnNpZ25lZCBjaGFyICAgdGl2ZXJbM107Ci0JdW5zaWduZWQgY2hhciAgIGlkWzZdOwotCXVuc2lnbmVkIGNoYXIgICBpaW5mbzsKLQl1bnNpZ25lZCBzaG9ydCAgYmxrc2l6ZTsKLQl1bnNpZ25lZCBjaGFyICAgcHJpb3JpdHk7Ci0JdW5zaWduZWQgY2hhciAgIGFyZWE7Ci0JdW5zaWduZWQgc2hvcnQgIHRpbWVyOwotCXVuc2lnbmVkIGNoYXIgICBtcGQ7CisJX191OCAgIG1zZ2ZsZzsKKwlfX3U4ICAgdGl2ZXJbM107CisJX191OCAgIGlkWzZdOworCV9fdTggICBpaW5mbzsKKwlfX2xlMTYgIGJsa3NpemU7CisJX191OCAgIHByaW9yaXR5OworCV9fdTggICBhcmVhOworCV9fbGUxNiAgdGltZXI7CisJX191OCAgIG1wZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIApAQCAtMTY5LDEyICsxNjksMTIgQEAKIAogZXh0ZXJuIGludCBkbl9kZXZfc2V0X2RlZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlKTsKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqZG5fZGV2X2dldF9kZWZhdWx0KHZvaWQpOwotZXh0ZXJuIGludCBkbl9kZXZfYmluZF9kZWZhdWx0KGRuX2FkZHJlc3MgKmFkZHIpOworZXh0ZXJuIGludCBkbl9kZXZfYmluZF9kZWZhdWx0KF9fbGUxNiAqYWRkcik7CiAKIGV4dGVybiBpbnQgcmVnaXN0ZXJfZG5hZGRyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2RuYWRkcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIAotc3RhdGljIGlubGluZSBpbnQgZG5fZGV2X2lzbG9jYWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZG5fYWRkcmVzcyBhZGRyKQorc3RhdGljIGlubGluZSBpbnQgZG5fZGV2X2lzbG9jYWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19sZTE2IGFkZHIpCiB7CiAJc3RydWN0IGRuX2RldiAqZG5fZGIgPSBkZXYtPmRuX3B0cjsKIAlzdHJ1Y3QgZG5faWZhZGRyICppZmE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kbl9maWIuaCBiL2luY2x1ZGUvbmV0L2RuX2ZpYi5oCmluZGV4IGNkM2M5NmQuLmExNWRjZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RuX2ZpYi5oCisrKyBiL2luY2x1ZGUvbmV0L2RuX2ZpYi5oCkBAIC0zNyw3ICszNyw3IEBACiAJaW50CQkJbmhfd2VpZ2h0OwogCWludAkJCW5oX3Bvd2VyOwogCWludAkJCW5oX29pZjsKLQl1MzIJCQluaF9ndzsKKwlfX2xlMTYJCQluaF9ndzsKIH07CiAKIHN0cnVjdCBkbl9maWJfaW5mbyB7CkBAIC00OCw3ICs0OCw3IEBACiAJaW50CQkJZmliX2RlYWQ7CiAJdW5zaWduZWQJCWZpYl9mbGFnczsKIAlpbnQJCQlmaWJfcHJvdG9jb2w7Ci0JZG5fYWRkcmVzcwkJZmliX3ByZWZzcmM7CisJX19sZTE2CQkJZmliX3ByZWZzcmM7CiAJX191MzIJCQlmaWJfcHJpb3JpdHk7CiAJX191MzIJCQlmaWJfbWV0cmljc1tSVEFYX01BWF07CiAjZGVmaW5lIGRuX2ZpYl9tdHUgIGZpYl9tZXRyaWNzW1JUQVhfTVRVLTFdCkBAIC03MSwxNSArNzEsMTUgQEAKICNkZWZpbmUgRE5fRklCX1JFU19PSUYocmVzKQkoRE5fRklCX1JFU19OSChyZXMpLm5oX29pZikKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXUxNglkYXR1bTsKKwlfX2xlMTYJZGF0dW07CiB9IGRuX2ZpYl9rZXlfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXUxNglkYXR1bTsKKwlfX2xlMTYJZGF0dW07CiB9IGRuX2ZpYl9oYXNoX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1MTYJZGF0dW07CisJX191MTYJZGF0dW07CiB9IGRuX2ZpYl9pZHhfdDsKIAogc3RydWN0IGRuX2ZpYl9ub2RlIHsKQEAgLTEyNiwxMSArMTI2LDExIEBACiAJCQljb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLAogCQkJc3RydWN0IGRuX2ZpYl9yZXMgKnJlcyk7CiBleHRlcm4gdm9pZCBkbl9maWJfcmVsZWFzZV9pbmZvKHN0cnVjdCBkbl9maWJfaW5mbyAqZmkpOwotZXh0ZXJuIHUxNiBkbl9maWJfZ2V0X2F0dHIxNihzdHJ1Y3QgcnRhdHRyICphdHRyLCBpbnQgYXR0cmxlbiwgaW50IHR5cGUpOworZXh0ZXJuIF9fbGUxNiBkbl9maWJfZ2V0X2F0dHIxNihzdHJ1Y3QgcnRhdHRyICphdHRyLCBpbnQgYXR0cmxlbiwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgZG5fZmliX2ZsdXNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgZG5fZmliX3NlbGVjdF9tdWx0aXBhdGgoY29uc3Qgc3RydWN0IGZsb3dpICpmbCwKIAkJCQkJc3RydWN0IGRuX2ZpYl9yZXMgKnJlcyk7Ci1leHRlcm4gaW50IGRuX2ZpYl9zeW5jX2Rvd24oZG5fYWRkcmVzcyBsb2NhbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCitleHRlcm4gaW50IGRuX2ZpYl9zeW5jX2Rvd24oX19sZTE2IGxvY2FsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCWludCBmb3JjZSk7CiBleHRlcm4gaW50IGRuX2ZpYl9zeW5jX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC0xNDgsOCArMTQ4LDggQEAKIGV4dGVybiB2b2lkIGRuX2ZpYl9ydWxlc19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZG5fZmliX3J1bGVzX2NsZWFudXAodm9pZCk7CiBleHRlcm4gdm9pZCBkbl9maWJfcnVsZV9wdXQoc3RydWN0IGRuX2ZpYl9ydWxlICopOwotZXh0ZXJuIF9fdTE2IGRuX2ZpYl9ydWxlc19wb2xpY3koX191MTYgc2FkZHIsIHN0cnVjdCBkbl9maWJfcmVzICpyZXMsIHVuc2lnbmVkICpmbGFncyk7Ci1leHRlcm4gdW5zaWduZWQgZG5ldF9hZGRyX3R5cGUoX191MTYgYWRkcik7CitleHRlcm4gX19sZTE2IGRuX2ZpYl9ydWxlc19wb2xpY3koX19sZTE2IHNhZGRyLCBzdHJ1Y3QgZG5fZmliX3JlcyAqcmVzLCB1bnNpZ25lZCAqZmxhZ3MpOworZXh0ZXJuIHVuc2lnbmVkIGRuZXRfYWRkcl90eXBlKF9fbGUxNiBhZGRyKTsKIGV4dGVybiBpbnQgZG5fZmliX2xvb2t1cChjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3QgZG5fZmliX3JlcyAqcmVzKTsKIAogLyoKQEAgLTE5NCwxMCArMTk0LDEwIEBACiAKICNlbmRpZiAvKiBDT05GSUdfREVDTkVUX1JPVVRFUiAqLwogCi1zdGF0aWMgaW5saW5lIHUxNiBkbmV0X21ha2VfbWFzayhpbnQgbikKK3N0YXRpYyBpbmxpbmUgX19sZTE2IGRuZXRfbWFrZV9tYXNrKGludCBuKQogewogICAgICAgICBpZiAobikKLSAgICAgICAgICAgICAgICByZXR1cm4gaHRvbnMofigoMTw8KDE2LW4pKS0xKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRuX2h0b25zKH4oKDE8PCgxNi1uKSktMSkpOwogICAgICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZG5fbmVpZ2guaCBiL2luY2x1ZGUvbmV0L2RuX25laWdoLmgKaW5kZXggNGIxZWIwMy4uNGNiNGFlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZG5fbmVpZ2guaAorKysgYi9pbmNsdWRlL25ldC9kbl9uZWlnaC5oCkBAIC03LDEzICs3LDEzIEBACiAgKi8KIHN0cnVjdCBkbl9uZWlnaCB7CiAgICAgICAgIHN0cnVjdCBuZWlnaGJvdXIgbjsKLQlkbl9hZGRyZXNzIGFkZHI7CisJX19sZTE2IGFkZHI7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAjZGVmaW5lIEROX05ERkxBR19SMSAgICAweDAwMDEgLyogUm91dGVyIEwxICAgICAgKi8KICNkZWZpbmUgRE5fTkRGTEFHX1IyICAgIDB4MDAwMiAvKiBSb3V0ZXIgTDIgICAgICAqLwogI2RlZmluZSBETl9OREZMQUdfUDMgICAgMHgwMDA0IC8qIFBoYXNlIElJSSBOb2RlICovCiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxrc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIHByaW9yaXR5OworCV9fdTggcHJpb3JpdHk7CiB9OwogCiBleHRlcm4gdm9pZCBkbl9uZWlnaF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZG5fbnNwLmggYi9pbmNsdWRlL25ldC9kbl9uc3AuaAppbmRleCBlNjE4MmI4Li45NmU4MTZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kbl9uc3AuaAorKysgYi9pbmNsdWRlL25ldC9kbl9uc3AuaApAQCAtNzIsNzcgKzcyLDc3IEBACiAKIHN0cnVjdCBuc3BfZGF0YV9zZWdfbXNnCiB7Ci0JdW5zaWduZWQgY2hhciAgIG1zZ2ZsZzsKLQl1bnNpZ25lZCBzaG9ydCAgZHN0YWRkcjsKLQl1bnNpZ25lZCBzaG9ydCAgc3JjYWRkcjsKKwlfX3U4ICAgbXNnZmxnOworCV9fbGUxNiBkc3RhZGRyOworCV9fbGUxNiBzcmNhZGRyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG5zcF9kYXRhX29wdF9tc2cKIHsKLQl1bnNpZ25lZCBzaG9ydCAgYWNrbnVtOwotCXVuc2lnbmVkIHNob3J0ICBzZWdudW07Ci0JdW5zaWduZWQgc2hvcnQgIGxzZmxnczsKKwlfX2xlMTYgYWNrbnVtOworCV9fbGUxNiBzZWdudW07CisJX19sZTE2IGxzZmxnczsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBuc3BfZGF0YV9vcHRfbXNnMQogewotCXVuc2lnbmVkIHNob3J0ICBhY2tudW07Ci0JdW5zaWduZWQgc2hvcnQgIHNlZ251bTsKKwlfX2xlMTYgYWNrbnVtOworCV9fbGUxNiBzZWdudW07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAKIC8qIEFja25vd2xlZGdtZW50IE1lc3NhZ2UgKGRhdGEvb3RoZXIgZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdHJ1Y3QgbnNwX2RhdGFfYWNrX21zZwogewotCXVuc2lnbmVkIGNoYXIgICBtc2dmbGc7Ci0JdW5zaWduZWQgc2hvcnQgIGRzdGFkZHI7Ci0JdW5zaWduZWQgc2hvcnQgIHNyY2FkZHI7Ci0JdW5zaWduZWQgc2hvcnQgIGFja251bTsKKwlfX3U4ICAgbXNnZmxnOworCV9fbGUxNiBkc3RhZGRyOworCV9fbGUxNiBzcmNhZGRyOworCV9fbGUxNiBhY2tudW07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBDb25uZWN0IEFja25vd2xlZGdtZW50IE1lc3NhZ2UgKi8KIHN0cnVjdCAgbnNwX2Nvbm5fYWNrX21zZwogewotCXVuc2lnbmVkIGNoYXIgICBtc2dmbGc7Ci0JdW5zaWduZWQgc2hvcnQgIGRzdGFkZHI7CisJX191OCBtc2dmbGc7CisJX19sZTE2IGRzdGFkZHI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAKIC8qIENvbm5lY3QgSW5pdGlhdGUvUmV0cmFuc21pdCBJbml0aWF0ZS9Db25uZWN0IENvbmZpcm0gKi8KIHN0cnVjdCAgbnNwX2Nvbm5faW5pdF9tc2cKIHsKLQl1bnNpZ25lZCBjaGFyICAgbXNnZmxnOworCV9fdTggICBtc2dmbGc7CiAjZGVmaW5lIE5TUF9DSSAgICAgIDB4MTggICAgICAgICAgICAvKiBDb25uZWN0IEluaXRpYXRlICAgICAqLwogI2RlZmluZSBOU1BfUkNJICAgICAweDY4ICAgICAgICAgICAgLyogUmV0cmFucy4gQ29ubiBJbml0ICAgKi8KLQl1bnNpZ25lZCBzaG9ydCAgZHN0YWRkcjsKLQl1bnNpZ25lZCBzaG9ydCAgc3JjYWRkcjsKLQl1bnNpZ25lZCBjaGFyICAgc2VydmljZXM7CisJX19sZTE2IGRzdGFkZHI7CisJX19sZTE2IHNyY2FkZHI7CisJX191OCAgIHNlcnZpY2VzOwogI2RlZmluZSBOU1BfRkNfTk9ORSAgIDB4MDAgICAgICAgICAgICAvKiBGbG93IENvbnRyb2wgTm9uZSAgICAqLwogI2RlZmluZSBOU1BfRkNfU1JDICAgIDB4MDQgICAgICAgICAgICAvKiBTZWcgUmVxLiBDb3VudCAgICAgICAqLwogI2RlZmluZSBOU1BfRkNfU0NNQyAgIDB4MDggICAgICAgICAgICAvKiBTZXNzLiBDb250cm9sIE1lc3MgICAqLwogI2RlZmluZSBOU1BfRkNfTUFTSyAgIDB4MGMgICAgICAgICAgICAvKiBGQyB0eXBlIG1hc2sgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIgICBpbmZvOwotCXVuc2lnbmVkIHNob3J0ICBzZWdzaXplOworCV9fdTggICBpbmZvOworCV9fbGUxNiBzZWdzaXplOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyogRGlzY29ubmVjdCBJbml0aWF0ZS9EaXNjb25uZWN0IENvbmZpcm0gKi8KIHN0cnVjdCAgbnNwX2Rpc2Nvbm5faW5pdF9tc2cKIHsKLQl1bnNpZ25lZCBjaGFyICAgbXNnZmxnOwotCXVuc2lnbmVkIHNob3J0ICBkc3RhZGRyOwotCXVuc2lnbmVkIHNob3J0ICBzcmNhZGRyOwotCXVuc2lnbmVkIHNob3J0ICByZWFzb247CisJX191OCAgIG1zZ2ZsZzsKKwlfX2xlMTYgZHN0YWRkcjsKKwlfX2xlMTYgc3JjYWRkcjsKKwlfX2xlMTYgcmVhc29uOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogCiAKIHN0cnVjdCAgc3Jjb2JqX2ZtdAogewotCWNoYXIgICAgICAgICAgICBmb3JtYXQ7Ci0JdW5zaWduZWQgY2hhciAgIHRhc2s7Ci0JdW5zaWduZWQgc2hvcnQgIGdycGNvZGU7Ci0JdW5zaWduZWQgc2hvcnQgIHVzcmNvZGU7Ci0JY2hhciAgICAgICAgICAgIGRsZW47CisJX191OCAgIGZvcm1hdDsKKwlfX3U4ICAgdGFzazsKKwlfX2xlMTYgZ3JwY29kZTsKKwlfX2xlMTYgdXNyY29kZTsKKwlfX3U4ICAgZGxlbjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCkBAIC0xNTAsNyArMTUwLDcgQEAKICAqIG51bWJlcnMgdXNlZCBpbiBOU1AuIFNpbWlsYXIgaW4gb3BlcmF0aW9uIHRvIHRoZSBmdW5jdGlvbnMKICAqIG9mIHRoZSBzYW1lIG5hbWUgaW4gVENQLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgZG5fYmVmb3JlKHVuc2lnbmVkIHNob3J0IHNlcTEsIHVuc2lnbmVkIHNob3J0IHNlcTIpCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZG5fYmVmb3JlKF9fdTE2IHNlcTEsIF9fdTE2IHNlcTIpCiB7CiAgICAgICAgIHNlcTEgJj0gMHgwZmZmOwogICAgICAgICBzZXEyICY9IDB4MGZmZjsKQEAgLTE1OSw3ICsxNTksNyBAQAogfQogCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBkbl9hZnRlcih1bnNpZ25lZCBzaG9ydCBzZXExLCB1bnNpZ25lZCBzaG9ydCBzZXEyKQorc3RhdGljIF9faW5saW5lX18gaW50IGRuX2FmdGVyKF9fdTE2IHNlcTEsIF9fdTE2IHNlcTIpCiB7CiAgICAgICAgIHNlcTEgJj0gMHgwZmZmOwogICAgICAgICBzZXEyICY9IDB4MGZmZjsKQEAgLTE2NywyMyArMTY3LDIzIEBACiAgICAgICAgIHJldHVybiAoaW50KSgoc2VxMiAtIHNlcTEpICYgMHgwZmZmKSA+IDIwNDg7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBkbl9lcXVhbCh1bnNpZ25lZCBzaG9ydCBzZXExLCB1bnNpZ25lZCBzaG9ydCBzZXEyKQorc3RhdGljIF9faW5saW5lX18gaW50IGRuX2VxdWFsKF9fdTE2IHNlcTEsIF9fdTE2IHNlcTIpCiB7CiAgICAgICAgIHJldHVybiAoKHNlcTEgXiBzZXEyKSAmIDB4MGZmZikgPT0gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gaW50IGRuX2JlZm9yZV9vcl9lcXVhbCh1bnNpZ25lZCBzaG9ydCBzZXExLCB1bnNpZ25lZCBzaG9ydCBzZXEyKQorc3RhdGljIF9faW5saW5lX18gaW50IGRuX2JlZm9yZV9vcl9lcXVhbChfX3UxNiBzZXExLCBfX3UxNiBzZXEyKQogewogCXJldHVybiAoZG5fYmVmb3JlKHNlcTEsIHNlcTIpIHx8IGRuX2VxdWFsKHNlcTEsIHNlcTIpKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXFfYWRkKHVuc2lnbmVkIHNob3J0ICpzZXEsIHVuc2lnbmVkIHNob3J0IG9mZikKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc2VxX2FkZChfX3UxNiAqc2VxLCBfX3UxNiBvZmYpCiB7CiAgICAgICAgICgqc2VxKSArPSBvZmY7CiAgICAgICAgICgqc2VxKSAmPSAweDBmZmY7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBzZXFfbmV4dCh1bnNpZ25lZCBzaG9ydCBzZXExLCB1bnNpZ25lZCBzaG9ydCBzZXEyKQorc3RhdGljIF9faW5saW5lX18gaW50IHNlcV9uZXh0KF9fdTE2IHNlcTEsIF9fdTE2IHNlcTIpCiB7CiAJcmV0dXJuIGRuX2VxdWFsKHNlcTEgKyAxLCBzZXEyKTsKIH0KQEAgLTE5MSw3ICsxOTEsNyBAQAogLyoKICAqIENhbiB3ZSBkZWxheSB0aGUgYWNrID8KICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHNlbmRhY2sodW5zaWduZWQgc2hvcnQgc2VxKQorc3RhdGljIF9faW5saW5lX18gaW50IHNlbmRhY2soX191MTYgc2VxKQogewogICAgICAgICByZXR1cm4gKGludCkoKHNlcSAmIDB4MTAwMCkgPyAwIDogMSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kbl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvZG5fcm91dGUuaAppbmRleCA1MTIyZGEzLi43NmY5NTdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kbl9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L2RuX3JvdXRlLmgKQEAgLTcxLDEyICs3MSwxMiBAQAogCQlzdHJ1Y3QgZG5fcm91dGUgKnJ0X25leHQ7CiAJfSB1OwogCi0JX191MTYgcnRfc2FkZHI7Ci0JX191MTYgcnRfZGFkZHI7Ci0JX191MTYgcnRfZ2F0ZXdheTsKLQlfX3UxNiBydF9sb2NhbF9zcmM7CS8qIFNvdXJjZSB1c2VkIGZvciBmb3J3YXJkaW5nIHBhY2tldHMgKi8KLQlfX3UxNiBydF9zcmNfbWFwOwotCV9fdTE2IHJ0X2RzdF9tYXA7CisJX19sZTE2IHJ0X3NhZGRyOworCV9fbGUxNiBydF9kYWRkcjsKKwlfX2xlMTYgcnRfZ2F0ZXdheTsKKwlfX2xlMTYgcnRfbG9jYWxfc3JjOwkvKiBTb3VyY2UgdXNlZCBmb3IgZm9yd2FyZGluZyBwYWNrZXRzICovCisJX19sZTE2IHJ0X3NyY19tYXA7CisJX19sZTE2IHJ0X2RzdF9tYXA7CiAKIAl1bnNpZ25lZCBydF9mbGFnczsKIAl1bnNpZ25lZCBydF90eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZmxvdy5oIGIvaW5jbHVkZS9uZXQvZmxvdy5oCmluZGV4IGVjN2ViODYuLjA0ZDg5ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Zsb3cuaAorKysgYi9pbmNsdWRlL25ldC9mbG93LmgKQEAgLTMwLDggKzMwLDggQEAKIAkJfSBpcDZfdTsKIAogCQlzdHJ1Y3QgewotCQkJX191MTYJCQlkYWRkcjsKLQkJCV9fdTE2CQkJc2FkZHI7CisJCQlfX2xlMTYJCQlkYWRkcjsKKwkJCV9fbGUxNgkJCXNhZGRyOwogCQkJX191MzIJCQlmd21hcms7CiAJCQlfX3U4CQkJc2NvcGU7CiAJCX0gZG5fdTsKQEAgLTY0LDggKzY0LDggQEAKIAkJfSBpY21wdDsKIAogCQlzdHJ1Y3QgewotCQkJX191MTYJc3BvcnQ7Ci0JCQlfX3UxNglkcG9ydDsKKwkJCV9fbGUxNglzcG9ydDsKKwkJCV9fbGUxNglkcG9ydDsKIAkJCV9fdTgJb2JqbnVtOwogCQkJX191OAlvYmpuYW1lbDsgLyogTm90IDE2IGJpdHMgc2luY2UgbWF4IHZhbCBpcyAxNiAqLwogCQkJX191OAlvYmpuYW1lWzE2XTsgLyogTm90IHplcm8gdGVybWluYXRlZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAppbmRleCA5YTkyYWVmLi40NzI1ZmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaApAQCAtMjIwLDYgKzIyMCw3IEBACiAvKiBBdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zICovCiAjZGVmaW5lIFdMQU5fQVVUSF9PUEVOIDAKICNkZWZpbmUgV0xBTl9BVVRIX1NIQVJFRF9LRVkgMQorI2RlZmluZSBXTEFOX0FVVEhfTEVBUCAyCiAKICNkZWZpbmUgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4gMTI4CiAKQEAgLTI5OSw2ICszMDAsMjMgQEAKIAlXTEFOX1JFQVNPTl9DSVBIRVJfU1VJVEVfUkVKRUNURUQgPSAyNCwKIH07CiAKKy8qIEFjdGlvbiBjYXRlZ29yaWVzIC0gODAyLjExaCAqLworZW51bSBpZWVlODAyMTFfYWN0aW9uY2F0ZWdvcmllcyB7CisJV0xBTl9BQ1RJT05fU1BFQ1RSVU1fTUdNVCA9IDAsCisJLyogUmVzZXJ2ZWQgMS0xMjcgICovCisJLyogRXJyb3IgICAgMTI4LTI1NSAqLworfTsKKworLyogQWN0aW9uIGRldGFpbHMgLSA4MDIuMTFoICovCitlbnVtIGllZWU4MDIxMV9hY3Rpb25kZXRhaWxzIHsKKwlXTEFOX0FDVElPTl9DQVRFR09SWV9NRUFTVVJFX1JFUVVFU1QgPSAwLAorCVdMQU5fQUNUSU9OX0NBVEVHT1JZX01FQVNVUkVfUkVQT1JUID0gMSwKKwlXTEFOX0FDVElPTl9DQVRFR09SWV9UUENfUkVRVUVTVCA9IDIsCisJV0xBTl9BQ1RJT05fQ0FURUdPUllfVFBDX1JFUE9SVCA9IDMsCisJV0xBTl9BQ1RJT05fQ0FURUdPUllfQ0hBTk5FTF9TV0lUQ0ggPSA0LAorCS8qIDUgLSAyNTUgUmVzZXJ2ZWQgKi8KK307CisKICNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCAoMTw8MCkKICNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1JTU0kgKDE8PDEpCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19OT0lTRSAoMTw8MikKQEAgLTM3Nyw2ICszOTUsOCBAQAogCXU4IG1hc2s7CiAJdTggZnJlcTsKIAl1MTYgbGVuOworCXU2NCB0c2Y7CisJdTMyIGJlYWNvbl90aW1lOwogfTsKIAogLyogSUVFRSA4MDIuMTEgcmVxdWlyZXMgdGhhdCBTVEEgc3VwcG9ydHMgY29uY3VycmVudCByZWNlcHRpb24gb2YgYXQgbGVhc3QKQEAgLTYwOCw2ICs2MjgsMjggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCB7CisJdTggaWQ7CisJdTggbGVuOworCXU4IG1vZGU7CisJdTggY2hhbm5lbDsKKwl1OCBjb3VudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbiB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCXU4IGNhdGVnb3J5OworCXU4IGFjdGlvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBpZWVlODAyMTFfYWN0aW9uX2V4Y2hhbmdlIHsKKwkJCXU4IHRva2VuOworCQkJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworCQl9IGV4Y2hhbmdlOworCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoIGNoYW5uZWxfc3dpdGNoOworCisJfSBmb3JtYXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwogCV9fbGUxNiByZWFzb247CkBAIC02OTIsNyArNzM0LDE1IEBACiAvKiBRb1Mgc3RydWN0dXJlICovCiAjZGVmaW5lIE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTICAgICAgKDE8PDMpCiAjZGVmaW5lIE5FVFdPUktfSEFTX1FPU19JTkZPUk1BVElPTiAgICAgKDE8PDQpCi0jZGVmaW5lIE5FVFdPUktfSEFTX1FPU19NQVNLICAgICAgICAgICAgKE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTIHwgTkVUV09SS19IQVNfUU9TX0lORk9STUFUSU9OKQorI2RlZmluZSBORVRXT1JLX0hBU19RT1NfTUFTSyAgICAgICAgICAgIChORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUyB8IFwKKwkJCQkJIE5FVFdPUktfSEFTX1FPU19JTkZPUk1BVElPTikKKworLyogODAyLjExaCAqLworI2RlZmluZSBORVRXT1JLX0hBU19QT1dFUl9DT05TVFJBSU5UICAgICgxPDw1KQorI2RlZmluZSBORVRXT1JLX0hBU19DU0EgICAgICAgICAgICAgICAgICgxPDw2KQorI2RlZmluZSBORVRXT1JLX0hBU19RVUlFVCAgICAgICAgICAgICAgICgxPDw3KQorI2RlZmluZSBORVRXT1JLX0hBU19JQlNTX0RGUyAgICAgICAgICAgICgxPDw4KQorI2RlZmluZSBORVRXT1JLX0hBU19UUENfUkVQT1JUICAgICAgICAgICgxPDw5KQogCiAjZGVmaW5lIFFPU19RVUVVRV9OVU0gICAgICAgICAgICAgICAgICAgNAogI2RlZmluZSBRT1NfT1VJX0xFTiAgICAgICAgICAgICAgICAgICAgIDMKQEAgLTc0OCw2ICs3OTgsOTEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK2VudW0gewkJCQkvKiBpZWVlODAyMTFfYmFzaWNfcmVwb3J0Lm1hcCAqLworCUlFRUU4MDIxMV9CQVNJQ19NQVBfQlNTID0gKDEgPDwgMCksCisJSUVFRTgwMjExX0JBU0lDX01BUF9PRkRNID0gKDEgPDwgMSksCisJSUVFRTgwMjExX0JBU0lDX01BUF9VTklERU5USUZJRUQgPSAoMSA8PCAyKSwKKwlJRUVFODAyMTFfQkFTSUNfTUFQX1JBREFSID0gKDEgPDwgMyksCisJSUVFRTgwMjExX0JBU0lDX01BUF9VTk1FQVNVUkVEID0gKDEgPDwgNCksCisJLyogQml0cyA1LTcgYXJlIHJlc2VydmVkICovCisKK307CitzdHJ1Y3QgaWVlZTgwMjExX2Jhc2ljX3JlcG9ydCB7CisJdTggY2hhbm5lbDsKKwlfX2xlNjQgc3RhcnRfdGltZTsKKwlfX2xlMTYgZHVyYXRpb247CisJdTggbWFwOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gewkJCQkvKiBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVxdWVzdC5tb2RlICovCisJLyogQml0IDAgaXMgcmVzZXJ2ZWQgKi8KKwlJRUVFODAyMTFfTUVBU1VSRU1FTlRfRU5BQkxFID0gKDEgPDwgMSksCisJSUVFRTgwMjExX01FQVNVUkVNRU5UX1JFUVVFU1QgPSAoMSA8PCAyKSwKKwlJRUVFODAyMTFfTUVBU1VSRU1FTlRfUkVQT1JUID0gKDEgPDwgMyksCisJLyogQml0cyA0LTcgYXJlIHJlc2VydmVkICovCit9OworCitlbnVtIHsKKwlJRUVFODAyMTFfUkVQT1JUX0JBU0lDID0gMCwJLyogcmVxdWlyZWQgKi8KKwlJRUVFODAyMTFfUkVQT1JUX0NDQSA9IDEsCS8qIG9wdGlvbmFsICovCisJSUVFRTgwMjExX1JFUE9SVF9SUEkgPSAyLAkvKiBvcHRpb25hbCAqLworCS8qIDMtMjU1IHJlc2VydmVkICovCit9OworCitzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyB7CisJdTggY2hhbm5lbDsKKwlfX2xlNjQgc3RhcnRfdGltZTsKKwlfX2xlMTYgZHVyYXRpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpZTsKKwl1OCB0b2tlbjsKKwl1OCBtb2RlOworCXU4IHR5cGU7CisJc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgcGFyYW1zWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVwb3J0IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpZTsKKwl1OCB0b2tlbjsKKwl1OCBtb2RlOworCXU4IHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgaWVlZTgwMjExX2Jhc2ljX3JlcG9ydCBiYXNpY1swXTsKKwl9IHU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV90cGNfcmVwb3J0IHsKKwl1OCB0cmFuc21pdF9wb3dlcjsKKwl1OCBsaW5rX21hcmdpbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfbWFwIHsKKwl1OCBjaGFubmVsOworCXU4IG1hcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX2lic3NfZGZzIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpZTsKKwl1OCBvd25lcltFVEhfQUxFTl07CisJdTggcmVjb3ZlcnlfaW50ZXJ2YWw7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX21hcCBjaGFubmVsX21hcFswXTsKK307CisKK3N0cnVjdCBpZWVlODAyMTFfY3NhIHsKKwl1OCBtb2RlOworCXU4IGNoYW5uZWw7CisJdTggY291bnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9xdWlldCB7CisJdTggY291bnQ7CisJdTggcGVyaW9kOworCXU4IGR1cmF0aW9uOworCXU4IG9mZnNldDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgewogCS8qIFRoZXNlIGVudHJpZXMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgYSB1bmlxdWUgbmV0d29yayAqLwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKQEAgLTc2Nyw3ICs5MDIsNyBAQAogCXU4IHJhdGVzX2V4X2xlbjsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZDsKIAl1OCBtb2RlOwotCXU4IGZsYWdzOworCXUzMiBmbGFnczsKIAl1MzIgbGFzdF9hc3NvY2lhdGU7CiAJdTMyIHRpbWVfc3RhbXBbMl07CiAJdTE2IGJlYWNvbl9pbnRlcnZhbDsKQEAgLTc3OSw2ICs5MTQsMjUgQEAKIAl1OCByc25faWVbTUFYX1dQQV9JRV9MRU5dOwogCXNpemVfdCByc25faWVfbGVuOwogCXN0cnVjdCBpZWVlODAyMTFfdGltX3BhcmFtZXRlcnMgdGltOworCisJLyogODAyLjExaCBpbmZvICovCisKKwkvKiBQb3dlciBDb25zdHJhaW50IC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCisJdTggcG93ZXJfY29uc3RyYWludDsKKworCS8qIFRQQyBSZXBvcnQgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3RwY19yZXBvcnQgdHBjX3JlcG9ydDsKKworCS8qIElCU1MgREZTIC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkIGFuZCBJQlNTCisJICogTk9URTogVGhpcyBpcyB2YXJpYWJsZSBsZW5ndGggYW5kIHNvIG11c3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5ICovCisJc3RydWN0IGllZWU4MDIxMV9pYnNzX2RmcyAqaWJzc19kZnM7CisKKwkvKiBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgLSBvcHRpb25hbCBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLworCXN0cnVjdCBpZWVlODAyMTFfY3NhIGNzYTsKKworCS8qIFF1aWV0IC0gb3B0aW9uYWwgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX3F1aWV0IHF1aWV0OworCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIApAQCAtOTI0LDcgKzEwNzgsMTAgQEAKIAlpbnQgKCpoYW5kbGVfYXV0aCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAogCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqIGF1dGgpOwogCWludCAoKmhhbmRsZV9kZWF1dGgpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqIGF1dGgpOworCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9kZWF1dGggKiBhdXRoKTsKKwlpbnQgKCpoYW5kbGVfYWN0aW9uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbiAqIGFjdGlvbiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKiBzdGF0cyk7CiAJaW50ICgqaGFuZGxlX2Rpc2Fzc29jKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqIGFzc29jKTsKIAlpbnQgKCpoYW5kbGVfYmVhY29uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCkBAIC0xMDkzLDYgKzEyNTAsNyBAQAogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X21ndChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX25ldHdvcmtfcmVzZXQoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKTsKIAogLyogaWVlZTgwMjExX2dlby5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmllZWU4MDIxMV9nZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlCkBAIC0xMTA1LDYgKzEyNjMsMTEgQEAKIGV4dGVybiBpbnQgaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkJICAgICAgdTggY2hhbm5lbCk7CiBleHRlcm4gdTggaWVlZTgwMjExX2ZyZXFfdG9fY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTMyIGZyZXEpOworZXh0ZXJuIHU4IGllZWU4MDIxMV9nZXRfY2hhbm5lbF9mbGFncyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCQkgICAgICB1OCBjaGFubmVsKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmllZWU4MDIxMV9nZXRfY2hhbm5lbChzdHJ1Y3QKKwkJCQkJCQkgICAgIGllZWU4MDIxMV9kZXZpY2UKKwkJCQkJCQkgICAgICppZWVlLCB1OCBjaGFubmVsKTsKIAogLyogaWVlZTgwMjExX3d4LmMgKi8KIGV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLApAQCAtMTEyMiw2ICsxMjg1LDE0IEBACiBleHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCQkgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCQkgY2hhciAqZXh0cmEpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2luY3JlbWVudF9zY2FucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9jcnlwdC5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExX2NyeXB0LmgKaW5kZXggY2Q4MmMzZS4uZWI0NzY0MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9jcnlwdC5oCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9jcnlwdC5oCkBAIC00Nyw3ICs0Nyw4IEBACiAJLyogZGVpbml0aWFsaXplIGNyeXB0byBjb250ZXh0IGFuZCBmcmVlIGFsbG9jYXRlZCBwcml2YXRlIGRhdGEgKi8KIAl2b2lkICgqZGVpbml0KSAodm9pZCAqcHJpdik7CiAKLQlpbnQgKCpidWlsZF9pdikgKHN0cnVjdCBza19idWZmICogc2tiLCBpbnQgaGRyX2xlbiwgdm9pZCAqcHJpdik7CisJaW50ICgqYnVpbGRfaXYpIChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgaW50IGhkcl9sZW4sCisJCQkgdTggKmtleSwgaW50IGtleWxlbiwgdm9pZCAqcHJpdik7CiAKIAkvKiBlbmNyeXB0L2RlY3J5cHQgcmV0dXJuIDwgMCBvbiBlcnJvciBvciA+PSAwIG9uIHN1Y2Nlc3MuIFRoZSByZXR1cm4KIAkgKiB2YWx1ZSBmcm9tIGRlY3J5cHRfbXBkdSBpcyBwYXNzZWQgYXMgdGhlIGtleWlkeCB2YWx1ZSBmb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTcxZDhjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogaWVlZTgwMjExc29mdG1hYy5oIC0gcHVibGljIGludGVyZmFjZSB0byB0aGUgc29mdG1hYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogICAgICAgICAgICAgICAgICAgIEpvc2VwaCBKZXphayA8am9zZWp4QGdlbnRvby5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICogICAgICAgICAgICAgICAgICAgIERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgorICogICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCisjaWZuZGVmIElFRUU4MDIxMVNPRlRNQUNfSF8KKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19IXworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorCisvKiBPbmNlIHRoZSBBUEkgaXMgY29uc2lkZXJlZCBtb3JlIG9yIGxlc3Mgc3RhYmxlLAorICogdGhpcyBzaG91bGQgYmUgaW5jcmVtZW50ZWQgb24gQVBJIGluY29tcGF0aWJsZSBjaGFuZ2VzLgorICovCisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfQVBJCTAKKworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX01BWF9SQVRFU19MRU4JCTgKKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19NQVhfRVhfUkFURVNfTEVOCTI1NQorCitzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8geworCXU4IGNvdW50OworCXU4IHJhdGVzW0lFRUU4MDIxMVNPRlRNQUNfTUFYX1JBVEVTX0xFTiArIElFRUU4MDIxMVNPRlRNQUNfTUFYX0VYX1JBVEVTX0xFTl07Cit9OworCisvKiBpbnRlcm5hbCBzdHJ1Y3R1cmVzICovCitzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrOworc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfc2NhbmluZm87CisKK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Vzc2lkIHsKKwl1OCBsZW47CisJY2hhciBkYXRhW0lXX0VTU0lEX01BWF9TSVpFKzFdOworfTsKKworc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfd3BhIHsKKwljaGFyICpJRTsKKwlpbnQgSUVsZW47CisJaW50IElFYnVmbGVuOworfTsKKworLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IGFzc29jaWF0aW9uCisgKgorICogRG8gd2UgbmVlZCBhIGxvY2sgZm9yIHRoaXM/CisgKiBXZSBvbmx5IGV2ZXIgdXNlIHRoaXMgc3RydWN0dXJlIGlubGluZWQKKyAqIGludG8gb3VyIGdsb2JhbCBzdHJ1Y3QuIEkndmUgdXNlZCBpdHMgbG9jaywKKyAqIGJ1dCBtYXliZSB3ZSBuZWVkIGEgbG9jYWwgb25lIGhlcmU/CisgKi8KK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX2luZm8geworCS8qCisJICogVGhpcyBpcyB0aGUgcmVxdWVzdGVkIEVTU0lELiBJdCBpcyB3cml0dGVuCisJICogb25seSBieSB0aGUgV1ggaGFuZGxlcnMuCisJICoKKwkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCByZXFfZXNzaWQ7CisJLyoKKwkgKiB0aGUgRVNTSUQgb2YgdGhlIG5ldHdvcmsgd2UncmUgY3VycmVudGx5CisJICogYXNzb2NpYXRlZCAob3IgdHJ5aW5nKSB0by4gVGhpcyBpcworCSAqIHVwZGF0ZWQgdG8gdGhlIG5ldHdvcmsncyBhY3R1YWwgRVNTSUQKKwkgKiBldmVuIGlmIHRoZSByZXF1ZXN0ZWQgRVNTSUQgd2FzICdBTlknCisJICovCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgYXNzb2NpYXRlX2Vzc2lkOworCQorCS8qIEJTU0lEIHdlJ3JlIHRyeWluZyB0byBhc3NvY2lhdGUgdG8gKi8KKwljaGFyIGJzc2lkW0VUSF9BTEVOXTsKKwkKKwkvKiBzb21lIGZsYWdzLgorCSAqIHN0YXRpY19lc3NpZCBpcyB2YWxpZCBpZiB0aGUgZXNzaWQgaXMgY29uc3RhbnQsCisJICogdGhpcyBpcyBmb3IgdXNlIGJ5IHRoZSB3eCBoYW5kbGVycyBvbmx5LgorCSAqCisJICogYXNzb2NpYXRpbmcgaXMgdHJ1ZSwgaWYgdGhlIG5ldHdvcmsgaGFzIGJlZW4KKwkgKiBhdXRoJ2VkIG9uIGFuZCB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYXNzb2NpYXRpbmcuCisJICoKKwkgKiBic3N2YWxpZCBpcyB0cnVlIGlmIHdlIGZvdW5kIGEgbWF0Y2hpbmcgbmV0d29yaworCSAqIGFuZCBzYXZlZCBpdCdzIEJTU0lEIGludG8gdGhlIGJzc2lkIGFib3ZlLgorCSAqLworCXU4IHN0YXRpY19lc3NpZDoxLAorCSAgIGFzc29jaWF0aW5nOjEsCisJICAgYnNzdmFsaWQ6MTsKKworCS8qIFNjYW4gcmV0cmllcyByZW1haW5pbmcgKi8KKwlpbnQgc2Nhbl9yZXRyeTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB0aW1lb3V0OworfTsKKworZW51bSB7CisJSUVFRTgwMjExU09GVE1BQ19BVVRIX09QRU5fUkVRVUVTVAk9IDEsCisJSUVFRTgwMjExU09GVE1BQ19BVVRIX09QRU5fUkVTUE9OU0UJPSAyLAorfTsKKworZW51bSB7CisJSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9SRVFVRVNUCT0gMSwKKwlJRUVFODAyMTFTT0ZUTUFDX0FVVEhfU0hBUkVEX0NIQUxMRU5HRSA9IDIsCisJSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9SRVNQT05TRQk9IDMsCisJSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9QQVNTCT0gNCwKK307CisKKy8qIFdlIHNob3VsZCBtYWtlIHRoZXNlIHR1bmFibGUKKyAqIEFVVEhfVElNRU9VVCBzZWVtcyByZWFsbHkgbG9uZywgYnV0IHRoYXQncyB3aGF0IGl0IGlzIGluIEJTRCAqLworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0FVVEhfVElNRU9VVAkJKDEyICogSFopCisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfQVVUSF9SRVRSWV9MSU1JVAk1CisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfQVNTT0NfU0NBTl9SRVRSWV9MSU1JVAkzCisKK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgeworCS8qIFRoZSBCaXQtUmF0ZSB0byBiZSB1c2VkIGZvciBtdWx0aWNhc3QgZnJhbWVzLiAqLworCXU4IG1jYXN0X3JhdGU7CisJLyogVGhlIEJpdC1SYXRlIHRvIGJlIHVzZWQgZm9yIG11bHRpY2FzdCBmYWxsYmFjaworCSAqIChJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGZhbGxiYWNrIGFuZCBoYXJkd2FyZS1yZXRyeSkKKwkgKi8KKwl1OCBtY2FzdF9mYWxsYmFjazsKKwkvKiBUaGUgQml0LVJhdGUgdG8gYmUgdXNlZCBmb3IgYW55IG90aGVyIChub3JtYWwpIGRhdGEgcGFja2V0LiAqLworCXU4IGRlZmF1bHRfcmF0ZTsKKwkvKiBUaGUgQml0LVJhdGUgdG8gYmUgdXNlZCBmb3IgZGVmYXVsdCBmYWxsYmFjaworCSAqIChJZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGZhbGxiYWNrIGFuZCBoYXJkd2FyZS1yZXRyeSkKKwkgKi8KKwl1OCBkZWZhdWx0X2ZhbGxiYWNrOworfTsKKworLyogQml0cyBmb3IgdHhyYXRlc19jaGFuZ2UgY2FsbGJhY2suICovCisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQJCSgxIDw8IDApIC8qIGRlZmF1bHRfcmF0ZSAqLworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUX0ZCQUNLCSgxIDw8IDEpIC8qIGRlZmF1bHRfZmFsbGJhY2sgKi8KKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUNBU1QJCSgxIDw8IDIpIC8qIG1jYXN0X3JhdGUgKi8KKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUNBU1RfRkJBQ0sJCSgxIDw8IDMpIC8qIG1jYXN0X2ZhbGxiYWNrICovCisKK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSB7CisJLyogODAyLjExIHN0cnVjdHVyZSBmb3IgZGF0YSBzdHVmZiAqLworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKKwkvKiBvbmx5IHZhbGlkIGlmIGFzc29jaWF0ZWQsIHRoZW4gaG9sZHMgdGhlIEFzc29jaWF0aW9uIElEICovCisJdTE2IGFzc29jaWF0aW9uX2lkOworCQorCS8qIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgY2FsbGJhY2tzIHRoYXQgdGhlIGRyaXZlcgorCSAqIHVzaW5nIHRoaXMgZnJhbWV3b3JrIGhhcyB0byBhc3NpZ24KKwkgKi8KKworCS8qIGFsd2F5cyBhc3NpZ24gdGhlc2UgKi8KKwl2b2lkICgqc2V0X2Jzc2lkX2ZpbHRlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkKTsKKwl2b2lkICgqc2V0X2NoYW5uZWwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwpOworCisJLyogYXNzaWduIGlmIHlvdSBuZWVkIGl0LCBpbmZvcm1hdGlvbmFsIG9ubHkgKi8KKwl2b2lkICgqbGlua19jaGFuZ2UpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisJLyogSWYgdGhlIGhhcmR3YXJlIGNhbiBkbyBzY2FubmluZywgYXNzaWduIF9hbGxfIHRocmVlIG9mIHRoZXNlIGNhbGxiYWNrcy4KKwkgKiBXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBjYWxsIGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZCgpLgorCSAqLworCQorCS8qIHdoZW4gY2FsbGVkLCBzdGFydF9zY2FuIGlzIGd1YXJhbnRlZWQgdG8gbm90IGJlIGNhbGxlZCBhZ2FpbgorCSAqIHVudGlsIHlvdSBjYWxsIGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9maW5pc2hlZC4KKwkgKiBSZXR1cm4gMCBpZiBzY2FubmluZyBjb3VsZCBzdGFydCwgZXJyb3Igb3RoZXJ3aXNlLgorCSAqIFNPRlRNQUMgQVVUSE9SUzogZG9uJ3QgY2FsbCB0aGlzLCB1c2UgaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuICovCisJaW50ICgqc3RhcnRfc2Nhbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJLyogdGhpcyBzaG91bGQgYmxvY2sgdW50aWwgYWZ0ZXIgaWVlZTgwMjExc29mdG1hY19zY2FuX2ZpbmlzaGVkIHdhcyBjYWxsZWQKKwkgKiBTT0ZUTUFDIEFVVEhPUlM6IGRvbid0IGNhbGwgdGhpcywgdXNlIGllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2NhbiAqLworCXZvaWQgKCp3YWl0X2Zvcl9zY2FuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwkvKiBzdG9wX3NjYW4gYWJvcnRzIGEgc2NhbiwgYnV0IGlzIGFzeW5jaHJvbm91cy4KKwkgKiBpZiB5b3Ugd2FudCB0byB3YWl0IGZvciBpdCB0b28sIHVzZSB3YWl0X2Zvcl9zY2FuCisJICogU09GVE1BQyBBVVRIT1JTOiBkb24ndCBjYWxsIHRoaXMsIHVzZSBpZWVlODAyMTFzb2Z0bWFjX3N0b3Bfc2NhbiAqLworCXZvaWQgKCpzdG9wX3NjYW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisJLyogd2UnbGwgbmVlZCBzb21ldGhpbmcgYWJvdXQgYmVhY29ucyBoZXJlIHRvbywgZm9yIEFQIG9yIGFkLWhvYyBtb2RlcyAqLworCisJLyogVHJhbnNtaXNzaW9uIHJhdGVzIHRvIGJlIHVzZWQgYnkgdGhlIGRyaXZlci4KKwkgKiBUaGUgU29mdE1BQyBmaWd1cmVzIG91dCB0aGUgYmVzdCBwb3NzaWJsZSByYXRlcy4KKwkgKiBUaGUgZHJpdmVyIGp1c3QgbmVlZHMgdG8gcmVhZCB0aGVtLgorCSAqLworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgdHhyYXRlczsKKwkvKiBJZiB0aGUgZHJpdmVyIG5lZWRzIHRvIGRvIHN0dWZmIG9uIFRYIHJhdGUgY2hhbmdlcywgYXNzaWduIHRoaXMgY2FsbGJhY2suICovCisJdm9pZCAoKnR4cmF0ZXNfY2hhbmdlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHUzMiBjaGFuZ2VzLCAvKiBzZWUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEcgZmxhZ3MgKi8KKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzICpyYXRlc19iZWZvcmVfY2hhbmdlKTsKKworCS8qIHByaXZhdGUgc3R1ZmYgZm9sbG93cyAqLworCS8qIHRoaXMgbG9jayBwcm90ZWN0cyB0aGlzIHN0cnVjdHVyZSAqLworCXNwaW5sb2NrX3QgbG9jazsKKwkKKwkvKiBjb3VwbGUgb2YgZmxhZ3MgKi8KKwl1OCBzY2FubmluZzoxLCAvKiBwcm90ZWN0cyBzY2FubmluZyBmcm9tIGJlaW5nIGRvbmUgbXVsdGlwbGUgdGltZXMgYXQgb25jZSAqLworCSAgIGFzc29jaWF0ZWQ6MTsKKwkKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19zY2FuaW5mbyAqc2NhbmluZm87CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXNzb2NfaW5mbyBhc3NvY2luZm87CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF1dGhfcXVldWU7CisJc3RydWN0IGxpc3RfaGVhZCBldmVudHM7CisKKyAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvIHJhdGVzaW5mbzsKKwlpbnQgdHhyYXRlX2JhZG5lc3M7CisJCisJLyogV1BBIHN0dWZmICovCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfd3BhIHdwYTsKKworCS8qIHdlIG5lZWQgdG8ga2VlcCBhIGxpc3Qgb2YgbmV0d29yayBzdHJ1Y3RzIHdlIGNvcGllZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19saXN0OworCQorCS8qIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpdGVtIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBkYXRhCisJICogYWxsb2NhdGVkIGJleW9uZCB0aGlzIHN0cnVjdHVyZSBieSBhbGxvY19pZWVlODAyMTEgKi8KKwl1OCBwcml2WzBdOworfTsKKworZXh0ZXJuIHZvaWQgaWVlZTgwMjExc29mdG1hY19zY2FuX2ZpbmlzaGVkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20pOworCitzdGF0aWMgaW5saW5lIHZvaWQgKiBpZWVlODAyMTFzb2Z0bWFjX3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKilpZWVlODAyMTFfcHJpdihkZXYpKS0+cHJpdjsKK30KKworZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICogYWxsb2NfaWVlZTgwMjExc29mdG1hYyhpbnQgc2l6ZW9mX3ByaXYpOworZXh0ZXJuIHZvaWQgZnJlZV9pZWVlODAyMTFzb2Z0bWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKiBDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91IGRldGVjdCBhIGxvc3QgVFggZnJhZ21lbnQuCisgKiAoSWYgdGhlIGRldmljZSBpbmRpY2F0ZXMgZmFpbHVyZSBvZiBBQ0sgUlgsIGZvciBleGFtcGxlLikKKyAqIEl0IGlzIHdpc2UgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBhcmUgYWJsZSB0byBkZXRlY3QgbG9zdCBwYWNrZXRzLAorICogYmVjYXVzZSBpdCBjb250cmlidXRlcyB0byB0aGUgVFggUmF0ZXMgYXV0byBhZGp1c3RtZW50LgorICovCitleHRlcm4gdm9pZCBpZWVlODAyMTFzb2Z0bWFjX2ZyYWdtZW50X2xvc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgdTE2IHdpcmVsZXNzX3NlcXVlbmNlX251bWJlcik7CisvKiBDYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIF9zdGFydCB0byB0ZWxsIHRoZSBzb2Z0bWFjIHdoYXQgcmF0ZXMKKyAqIHRoZSBodyBzdXBwb3J0cy4gVGhlIHJhdGVzIHBhcmFtZXRlciBpcyBjb3BpZWQsIHNvIHlvdSBjYW4KKyAqIGZyZWUgaXQgcmlnaHQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAKKyAqIE5vdGUgdGhhdCB0aGUgcmF0ZXMgbmVlZCB0byBiZSBzb3J0ZWQuICovCitleHRlcm4gdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NldF9yYXRlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjb3VudCwgdTggKnJhdGVzKTsKKworLyogU3RhcnQgdGhlIFNvZnRNQUMuIENhbGwgdGhpcyBhZnRlciB5b3UgaW5pdGlhbGl6ZWQgdGhlIGRldmljZQorICogYW5kIGl0IGlzIHJlYWR5IHRvIHJ1bi4KKyAqLworZXh0ZXJuIHZvaWQgaWVlZTgwMjExc29mdG1hY19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKy8qIFN0b3AgdGhlIFNvZnRNQUMuIENhbGwgdGhpcyBiZWZvcmUgeW91IHNodXRkb3duIHRoZSBkZXZpY2UuICovCitleHRlcm4gdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKy8qCisgKiBFdmVudCBzeXN0ZW0KKyAqLworCisvKiB2YWxpZCBldmVudCB0eXBlcyAqLworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FOWQkJCS0xIC8qcHJpdmF0ZSB1c2Ugb25seSovCisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfU0NBTl9GSU5JU0hFRAkJMAorI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURUQJCTEKKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfRkFJTEVECQkyCisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX1RJTUVPVVQJMworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhFTlRJQ0FURUQJCTQKKyNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BVVRIX0ZBSUxFRAkJNQorI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FVVEhfVElNRU9VVAkJNgorI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURV9ORVRfTk9UX0ZPVU5ECTcKKy8qIGtlZXAgdGhpcyB1cGRhdGVkISAqLworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0xBU1QJCQk3CisvKgorICogSWYgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgb2YgY2VydGFpbiBldmVudHMsIHlvdSBjYW4gY2FsbAorICogaWVlZTgwMjExc29mdG1hY19ub3RpZnlbX2F0b21pY10gd2l0aAorICogCS0gZXZlbnQgc2V0IHRvIG9uZSBvZiB0aGUgY29uc3RhbnRzIGJlbG93CisgKiAJLSBmdW4gc2V0IHRvIGEgZnVuY3Rpb24gcG9pbnRlciBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZQorICoJLSBjb250ZXh0IHNldCB0byB0aGUgY29udGV4dCBkYXRhIHlvdSB3YW50IHBhc3NlZAorICogVGhlIHJldHVybiB2YWx1ZSBpcyAwLCBvciBhbiBlcnJvci4KKyAqLwordHlwZWRlZiB2b2lkICgqbm90aWZ5X2Z1bmN0aW9uX3B0cikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqY29udGV4dCk7CisKKyNkZWZpbmUgaWVlZTgwMjExc29mdG1hY19ub3RpZnkoZGV2LCBldmVudCwgZnVuLCBjb250ZXh0KSBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9nZnAoZGV2LCBldmVudCwgZnVuLCBjb250ZXh0LCBHRlBfS0VSTkVMKTsKKyNkZWZpbmUgaWVlZTgwMjExc29mdG1hY19ub3RpZnlfYXRvbWljKGRldiwgZXZlbnQsIGZ1biwgY29udGV4dCkgaWVlZTgwMjExc29mdG1hY19ub3RpZnlfZ2ZwKGRldiwgZXZlbnQsIGZ1biwgY29udGV4dCwgR0ZQX0FUT01JQyk7CisKK2V4dGVybiBpbnQgaWVlZTgwMjExc29mdG1hY19ub3RpZnlfZ2ZwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJaW50IGV2ZW50LCBub3RpZnlfZnVuY3Rpb25fcHRyIGZ1biwgdm9pZCAqY29udGV4dCwgZ2ZwX3QgZ2ZwX21hc2spOworCisvKiBUbyBjbGVhciBwZW5kaW5nIHdvcmsgKGZvciBpZmNvbmZpZyBkb3duLCBldGMuKSAqLworZXh0ZXJuIHZvaWQKK2llZWU4MDIxMXNvZnRtYWNfY2xlYXJfcGVuZGluZ193b3JrKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20pOworCisjZW5kaWYgLyogSUVFRTgwMjExU09GVE1BQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hY193eC5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hY193eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMGJlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjX3d4LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcHJvdG90eXBlcyBmb3IgdGhlIHdpcmVsZXNzIGV4dGVuc2lvbgorICogaGFuZGxlcnMgdGhhdCB0aGUgc29mdG1hYyBBUEkgcHJvdmlkZXMuIEluY2x1ZGUgdGhpcyBmaWxlIHRvCisgKiB1c2UgdGhlIHd4IGhhbmRsZXJzLCB5b3UgY2FuIGFzc2lnbiB0aGVzZSBkaXJlY3RseS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqICAgICAgICAgICAgICAgICAgICBKb3NlcGggSmV6YWsgPGpvc2VqeEBnZW50b28ub3JnPgorICogICAgICAgICAgICAgICAgICAgIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKworI2lmbmRlZiBfSUVFRTgwMjExU09GVE1BQ19XWF9ICisjZGVmaW5lIF9JRUVFODAyMTFTT0ZUTUFDX1dYX0gKKworI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFzb2Z0bWFjLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKworZXh0ZXJuIGludAoraWVlZTgwMjExc29mdG1hY193eF90cmlnZ2VyX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkJIGNoYXIgKmV4dHJhKTsKKworZXh0ZXJuIGludAoraWVlZTgwMjExc29mdG1hY193eF9nZXRfc2Nhbl9yZXN1bHRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkJICAgICBjaGFyICpleHRyYSk7CisKK2V4dGVybiBpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkgICAgICBjaGFyICpleHRyYSk7CisKK2V4dGVybiBpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkgICAgICBjaGFyICpleHRyYSk7CisKK2V4dGVybiBpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkgICAgIGNoYXIgKmV4dHJhKTsKKworZXh0ZXJuIGludAoraWVlZTgwMjExc29mdG1hY193eF9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKKwkJCSAgICAgY2hhciAqZXh0cmEpOworCitleHRlcm4gaW50CitpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKKwkJCSAgICAgIGNoYXIgKmV4dHJhKTsKKworZXh0ZXJuIGludAoraWVlZTgwMjExc29mdG1hY193eF9zZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkgICAgICBjaGFyICpleHRyYSk7CisKK2V4dGVybiBpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCSAgICAgIGNoYXIgKmV4dHJhKTsKKworZXh0ZXJuIGludAoraWVlZTgwMjExc29mdG1hY193eF9nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJICAgICAgY2hhciAqZXh0cmEpOworI2VuZGlmIC8qIF9JRUVFODAyMTFTT0ZUTUFDX1dYICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaAppbmRleCBlYjhhZmUzLi5lNDU5ZTFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKQEAgLTE4MCwxMSArMTgwLDggQEAKIAogI2lmZGVmIENPTkZJR19JUFY2X1BSSVZBQ1kKIAl1OAkJCXJuZGlkWzhdOwotCXU4CQkJZW50cm9weVs4XTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAlyZWdlbl90aW1lcjsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyCSp0ZW1wYWRkcl9saXN0OwotCV9fdTgJCQl3b3JrX2V1aTY0WzhdOwotCV9fdTgJCQl3b3JrX2RpZ2VzdFsxNl07CiAjZW5kaWYKIAogCXN0cnVjdCBuZWlnaF9wYXJtcwkqbmRfcGFybXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaAppbmRleCBmYTU4N2M5Li45YmY3M2ZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKQEAgLTUwLDYgKzUwLDEyIEBACiAJCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKIAlpbnQJICAgICgqZ2V0c29ja29wdCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCAKIAkJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CisJaW50CSAgICAoKmNvbXBhdF9zZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKKwlpbnQJICAgICgqY29tcGF0X2dldHNvY2tvcHQpKHN0cnVjdCBzb2NrICpzaywKKwkJCQlpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CiAJdm9pZAkgICAgKCphZGRyMnNvY2thZGRyKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqKTsKIAlpbnQgc29ja2FkZHJfbGVuOwogfTsKQEAgLTcyLDYgKzc4LDcgQEAKICAqIEBpY3NrX3Byb2Jlc19vdXQ6CSAgIHVuYW5zd2VyZWQgMCB3aW5kb3cgcHJvYmVzCiAgKiBAaWNza19leHRfaGRyX2xlbjoJICAgTmV0d29yayBwcm90b2NvbCBvdmVyaGVhZCAoSVAvSVB2NiBvcHRpb25zKQogICogQGljc2tfYWNrOgkJICAgRGVsYXllZCBBQ0sgY29udHJvbCBkYXRhCisgKiBAaWNza19tdHVwOwkJICAgTVRVIHByb2JpbmcgY29udHJvbCBkYXRhCiAgKi8KIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayB7CiAJLyogaW5ldF9zb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyISAqLwpAQCAtMTA0LDYgKzExMSwxNiBAQAogCQlfX3UxNgkJICBsYXN0X3NlZ19zaXplOyAvKiBTaXplIG9mIGxhc3QgaW5jb21pbmcgc2VnbWVudAkgICAqLwogCQlfX3UxNgkJICByY3ZfbXNzOwkgLyogTVNTIHVzZWQgZm9yIGRlbGF5ZWQgQUNLIGRlY2lzaW9ucwkgICAqLyAKIAl9IGljc2tfYWNrOworCXN0cnVjdCB7CisJCWludAkJICBlbmFibGVkOworCisJCS8qIFJhbmdlIG9mIE1UVXMgdG8gc2VhcmNoICovCisJCWludAkJICBzZWFyY2hfaGlnaDsKKwkJaW50CQkgIHNlYXJjaF9sb3c7CisKKwkJLyogSW5mb3JtYXRpb24gb24gdGhlIGN1cnJlbnQgcHJvYmUuICovCisJCWludAkJICBwcm9iZV9zaXplOworCX0gaWNza19tdHVwOwogCXUzMgkJCSAgaWNza19jYV9wcml2WzE2XTsKICNkZWZpbmUgSUNTS19DQV9QUklWX1NJWkUJKDE2ICogc2l6ZW9mKHUzMikpCiB9OwpAQCAtMzEwLDQgKzMyNywxMyBAQAogCiBleHRlcm4gdm9pZCBpbmV0X2Nza19hZGRyMnNvY2thZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkcik7CiAKK2V4dGVybiBpbnQgaW5ldF9jc2tfY3RsX3NvY2tfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKipzb2NrLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCisJCQkJICAgIHVuc2lnbmVkIGNoYXIgcHJvdG9jb2wpOworCitleHRlcm4gaW50IGluZXRfY3NrX2NvbXBhdF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQkgICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworZXh0ZXJuIGludCBpbmV0X2Nza19jb21wYXRfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CiAjZW5kaWYgLyogX0lORVRfQ09OTkVDVElPTl9TT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IGZhYjNkNWIuLjhmZTYxNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtMzU2LDYgKzM1NiwxMCBAQAogZXh0ZXJuIGludAlpcF9jbXNnX3NlbmQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYyk7CiBleHRlcm4gaW50CWlwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKIGV4dGVybiBpbnQJaXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CitleHRlcm4gaW50CWNvbXBhdF9pcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLAorCQkJaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworZXh0ZXJuIGludAljb21wYXRfaXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKKwkJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOwogZXh0ZXJuIGludAlpcF9yYV9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgY2hhciBvbiwgdm9pZCAoKmRlc3RydWN0b3IpKHN0cnVjdCBzb2NrICopKTsKIAogZXh0ZXJuIGludCAJaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IDFmMmU0MjguLmEzOThhZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC03LDYgKzcsMjMgQEAKICNkZWZpbmUgSVA2X1JUX1BSSU9fS0VSTgk1MTIKICNkZWZpbmUgSVA2X1JUX0ZMT1dfTUFTSwkweDAwZmYKIAorc3RydWN0IHJvdXRlX2luZm8geworCV9fdTgJCQl0eXBlOworCV9fdTgJCQlsZW5ndGg7CisJX191OAkJCXByZWZpeF9sZW47CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisJX191OAkJCXJlc2VydmVkX2g6MywKKwkJCQlyb3V0ZV9wcmVmOjIsCisJCQkJcmVzZXJ2ZWRfbDozOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJX191OAkJCXJlc2VydmVkX2w6MywKKwkJCQlyb3V0ZV9wcmVmOjIsCisJCQkJcmVzZXJ2ZWRfaDozOworI2VuZGlmCisJX191MzIJCQlsaWZldGltZTsKKwlfX3U4CQkJcHJlZml4WzBdOwkvKiAwLDggb3IgMTYgKi8KK307CisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxuZXQvZmxvdy5oPgpAQCAtODcsMTEgKzEwNCwxNCBAQAogZXh0ZXJuIHN0cnVjdCBydDZfaW5mbyAqCXJ0Nl9nZXRfZGZsdF9yb3V0ZXIoc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBydDZfaW5mbyAqCXJ0Nl9hZGRfZGZsdF9yb3V0ZXIoc3RydWN0IGluNl9hZGRyICpnd2FkZHIsCi0JCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgcHJlZik7CiAKIGV4dGVybiB2b2lkCQkJcnQ2X3B1cmdlX2RmbHRfcm91dGVycyh2b2lkKTsKIAotZXh0ZXJuIHZvaWQJCQlydDZfcmVzZXRfZGZsdF9wb2ludGVyKHN0cnVjdCBydDZfaW5mbyAqcnQpOworZXh0ZXJuIGludAkJCXJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgdTggKm9wdCwgaW50IGxlbiwKKwkJCQkJICAgICAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpOwogCiBleHRlcm4gdm9pZAkJCXJ0Nl9yZWRpcmVjdChzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsCiAJCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCAzYjFkOTYzLi42ZDZmMDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0yODIsNiArMjgyLDE4IEBACiAJcmV0dXJuIG1lbWNtcCgoY29uc3Qgdm9pZCAqKSBhMSwgKGNvbnN0IHZvaWQgKikgYTIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK2lwdjZfbWFza2VkX2FkZHJfY21wKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEyKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJaWYgKChhMS0+czZfYWRkcjMyW2ldIF4gYTItPnM2X2FkZHIzMltpXSkgJiBtLT5zNl9hZGRyMzJbaV0pCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGlwdjZfYWRkcl9jb3B5KHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIpCiB7CiAJbWVtY3B5KCh2b2lkICopIGExLCAoY29uc3Qgdm9pZCAqKSBhMiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwpAQCAtNTA4LDYgKzUyMCwxNiBAQAogCQkJCQkJaW50IG9wdG5hbWUsCiAJCQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCAKIAkJCQkJCWludCBfX3VzZXIgKm9wdGxlbik7CitleHRlcm4gaW50CQkJY29tcGF0X2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQlpbnQgbGV2ZWwsCisJCQkJCQlpbnQgb3B0bmFtZSwKKwkJCQkJCWNoYXIgX191c2VyICpvcHR2YWwsCisJCQkJCQlpbnQgb3B0bGVuKTsKK2V4dGVybiBpbnQJCQljb21wYXRfaXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCWludCBsZXZlbCwKKwkJCQkJCWludCBvcHRuYW1lLAorCQkJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCQkJCWludCBfX3VzZXIgKm9wdGxlbik7CiAKIGV4dGVybiB2b2lkCQkJaXB2Nl9wYWNrZXRfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oIGIvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oCmluZGV4IGEyYzVlMGIuLjEwNTU5ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2l3X2hhbmRsZXIuaAorKysgYi9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKQEAgLTQsNyArNCw3IEBACiAgKiBWZXJzaW9uIDoJNwkxOC4zLjA1CiAgKgogICogQXV0aG9ycyA6CUplYW4gVG91cnJpbGhlcyAtIEhQTCAtIDxqdEBocGwuaHAuY29tPgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDUgSmVhbiBUb3VycmlsaGVzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgSmVhbiBUb3VycmlsaGVzLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogICovCiAKICNpZm5kZWYgX0lXX0hBTkRMRVJfSApAQCAtNDM2LDYgKzQzNiwxNiBAQAogLyogSGFuZGxlIElPQ1RMcywgY2FsbGVkIGluIG5ldC9jb3JlL2Rldi5jICovCiBleHRlcm4gaW50IHdpcmVsZXNzX3Byb2Nlc3NfaW9jdGwoc3RydWN0IGlmcmVxICppZnIsIHVuc2lnbmVkIGludCBjbWQpOwogCisvKiBIYW5kbGUgUnROZXRsaW5rIHJlcXVlc3RzLCBjYWxsZWQgaW4gbmV0L2NvcmUvcnRuZXRsaW5rLmMgKi8KK2V4dGVybiBpbnQgd2lyZWxlc3NfcnRuZXRsaW5rX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiwKKwkJCQkgIGNoYXIgKgkJZGF0YSwKKwkJCQkgIGludAkJCWxlbik7CitleHRlcm4gaW50IHdpcmVsZXNzX3J0bmV0bGlua19nZXQoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYsCisJCQkJICBjaGFyICoJCWRhdGEsCisJCQkJICBpbnQJCQlsZW4sCisJCQkJICBjaGFyICoqCQlwX2J1ZiwKKwkJCQkgIGludCAqCQkJcF9sZW4pOworCiAvKiBTZWNvbmQgOiBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgY2FsbGVkIGJ5IGRyaXZlciBtb2R1bGVzICovCiAKIC8qIFNlbmQgYSBzaW5nbGUgZXZlbnQgdG8gdXNlciBzcGFjZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjLmggYi9pbmNsdWRlL25ldC9sbGMuaAppbmRleCAxYWRiMmVmLi5mNTAyNDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGMuaAorKysgYi9pbmNsdWRlL25ldC9sbGMuaApAQCAtNzEsNyArNzEsNyBAQAogCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogCiBleHRlcm4gaW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICB1bnNpZ25lZCBjaGFyICpzYSwgdW5zaWduZWQgY2hhciAqZGEpOworCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSk7CiAKIGV4dGVybiB2b2lkIGxsY19hZGRfcGFjayhpbnQgdHlwZSwgdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBsbGNfc2FwICpzYXAsCiAJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaAppbmRleCBiYmFjODdlLi45MWZhMjcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTIyLDYgKzIyLDggQEAKIAlORF9PUFRfUFJFRklYX0lORk8gPSAzLAkJLyogUkZDMjQ2MSAqLwogCU5EX09QVF9SRURJUkVDVF9IRFIgPSA0LAkvKiBSRkMyNDYxICovCiAJTkRfT1BUX01UVSA9IDUsCQkJLyogUkZDMjQ2MSAqLworCV9fTkRfT1BUX0FSUkFZX01BWCwKKwlORF9PUFRfUk9VVEVfSU5GTyA9IDI0LAkJLyogUkZDNDE5MSAqLwogCV9fTkRfT1BUX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmggYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAppbmRleCA2ZmE5YWUxLi5iMDY2NmQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaAorKysgYi9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaApAQCAtNjgsNiArNjgsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5laWdoX3Bhcm1zICpuZXh0OwogCWludAkoKm5laWdoX3NldHVwKShzdHJ1Y3QgbmVpZ2hib3VyICopOworCXZvaWQJKCpuZWlnaF9kZXN0cnVjdG9yKShzdHJ1Y3QgbmVpZ2hib3VyICopOwogCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsOwogCiAJdm9pZAkqc3lzY3RsX3RhYmxlOwpAQCAtMTQ1LDcgKzE0Niw2IEBACiBzdHJ1Y3QgbmVpZ2hfb3BzCiB7CiAJaW50CQkJZmFtaWx5OwotCXZvaWQJCQkoKmRlc3RydWN0b3IpKHN0cnVjdCBuZWlnaGJvdXIgKik7CiAJdm9pZAkJCSgqc29saWNpdCkoc3RydWN0IG5laWdoYm91ciAqLCBzdHJ1Y3Qgc2tfYnVmZiopOwogCXZvaWQJCQkoKmVycm9yX3JlcG9ydCkoc3RydWN0IG5laWdoYm91ciAqLCBzdHJ1Y3Qgc2tfYnVmZiopOwogCWludAkJCSgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IDZkMDc1Y2EuLmI2ZjA5MDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTY3LDYgKzY3LDE4IEBACiAKIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyOwogCisvKiBuZl9jb25uIGZlYXR1cmUgZm9yIGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBhIGhlbHBlciAqLworc3RydWN0IG5mX2Nvbm5faGVscCB7CisJLyogSGVscGVyLiBpZiBhbnkgKi8KKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOworCisJdW5pb24gbmZfY29ubnRyYWNrX2hlbHAgaGVscDsKKworCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGV4cGVjdGVkIGNvbm5lY3Rpb25zICovCisJdW5zaWduZWQgaW50IGV4cGVjdGluZzsKK307CisKKwogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgogc3RydWN0IG5mX2Nvbm4KIHsKQEAgLTgxLDYgKzkzLDkgQEAKIAkvKiBIYXZlIHdlIHNlZW4gdHJhZmZpYyBib3RoIHdheXMgeWV0PyAoYml0c2V0KSAqLwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCisJLyogSWYgd2Ugd2VyZSBleHBlY3RlZCBieSBhbiBleHBlY3RhdGlvbiwgdGhpcyB3aWxsIGJlIGl0ICovCisJc3RydWN0IG5mX2Nvbm4gKm1hc3RlcjsKKwogCS8qIFRpbWVyIGZ1bmN0aW9uOyBkcm9wcyByZWZjbnQgd2hlbiBpdCBnb2VzIG9mZi4gKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OwogCkBAIC04OCwzOCArMTAzLDIyIEBACiAJLyogQWNjb3VudGluZyBJbmZvcm1hdGlvbiAoc2FtZSBjYWNoZSBsaW5lIGFzIG90aGVyIHdyaXR0ZW4gbWVtYmVycykgKi8KIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2NvdW50ZXIgY291bnRlcnNbSVBfQ1RfRElSX01BWF07CiAjZW5kaWYKLQkvKiBJZiB3ZSB3ZXJlIGV4cGVjdGVkIGJ5IGFuIGV4cGVjdGF0aW9uLCB0aGlzIHdpbGwgYmUgaXQgKi8KLQlzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyOwotCQotCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGV4cGVjdGVkIGNvbm5lY3Rpb25zICovCi0JdW5zaWduZWQgaW50IGV4cGVjdGluZzsKIAogCS8qIFVuaXF1ZSBJRCB0aGF0IGlkZW50aWZpZXMgdGhpcyBjb25udHJhY2sqLwogCXVuc2lnbmVkIGludCBpZDsKIAotCS8qIEhlbHBlci4gaWYgYW55ICovCi0Jc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKLQogCS8qIGZlYXR1cmVzIC0gbmF0LCBoZWxwZXIsIC4uLiB1c2VkIGJ5IGFsbG9jYXRpbmcgc3lzdGVtICovCiAJdV9pbnQzMl90IGZlYXR1cmVzOwogCi0JLyogU3RvcmFnZSByZXNlcnZlZCBmb3Igb3RoZXIgbW9kdWxlczogKi8KLQotCXVuaW9uIG5mX2Nvbm50cmFja19wcm90byBwcm90bzsKLQogI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKQogCXVfaW50MzJfdCBtYXJrOwogI2VuZGlmCiAKLQkvKiBUaGVzZSBtZW1iZXJzIGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICovCisJLyogU3RvcmFnZSByZXNlcnZlZCBmb3Igb3RoZXIgbW9kdWxlczogKi8KKwl1bmlvbiBuZl9jb25udHJhY2tfcHJvdG8gcHJvdG87CiAKLQl1bmlvbiBuZl9jb25udHJhY2tfaGVscCAqaGVscDsKLQotCS8qIExheWVyIDMgZGVwZW5kZW50IG1lbWJlcnMuIChleDogTkFUKSAqLwotCXVuaW9uIHsKLQkJc3RydWN0IG5mX2Nvbm50cmFja19pcHY0ICppcHY0OwotCX0gbDNwcm90bzsKLQl2b2lkICpkYXRhWzBdOworCS8qIGZlYXR1cmVzIGR5bmFtaWNhbGx5IGF0IHRoZSBlbmQ6IGhlbHBlciwgbmF0IChib3RoIG9wdGlvbmFsKSAqLworCWNoYXIgZGF0YVswXTsKIH07CiAKIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0CkBAIC0xOTYsNiArMTk1LDEwIEBACiAJbmZfY29ubnRyYWNrX3B1dCgmY3QtPmN0X2dlbmVyYWwpOwogfQogCisvKiBQcm90b2NvbCBtb2R1bGUgbG9hZGluZyAqLworZXh0ZXJuIGludCBuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KHVuc2lnbmVkIHNob3J0IGwzcHJvdG8pOworZXh0ZXJuIHZvaWQgbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KHVuc2lnbmVkIHNob3J0IGwzcHJvdG8pOworCiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICoKIF9fbmZfY29ubnRyYWNrX2ZpbmQoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqaWdub3JlZF9jb25udHJhY2spOwpAQCAtMzczLDEwICszNzYsMjMgQEAKICNkZWZpbmUgTkZfQ1RfRl9OVU0JNAogCiBleHRlcm4gaW50Ci1uZl9jb25udHJhY2tfcmVnaXN0ZXJfY2FjaGUodV9pbnQzMl90IGZlYXR1cmVzLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwKLQkJCSAgICBpbnQgKCppbml0X2Nvbm50cmFjaykoc3RydWN0IG5mX2Nvbm4gKiwgdV9pbnQzMl90KSk7CituZl9jb25udHJhY2tfcmVnaXN0ZXJfY2FjaGUodV9pbnQzMl90IGZlYXR1cmVzLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gdm9pZAogbmZfY29ubnRyYWNrX3VucmVnaXN0ZXJfY2FjaGUodV9pbnQzMl90IGZlYXR1cmVzKTsKIAorLyogdmFsaWQgY29tYmluYXRpb25zOgorICogYmFzaWM6IG5mX2Nvbm4sIG5mX2Nvbm4gLi4gbmZfY29ubl9oZWxwCisgKiBuYXQ6IG5mX2Nvbm4gLi4gbmZfY29ubl9uYXQsIG5mX2Nvbm4gLi4gbmZfY29ubl9uYXQsIG5mX2Nvbm4gaGVscAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mY3RfaGVscChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgbmZfY29ubik7CisKKwlpZiAoIShjdC0+ZmVhdHVyZXMgJiBORl9DVF9GX0hFTFApKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAoc3RydWN0IG5mX2Nvbm5faGVscCAqKSAoKHZvaWQgKiljdCArIG9mZnNldCk7Cit9CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX05GX0NPTk5UUkFDS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvcm91dGUuaAppbmRleCA5YzA0ZjE1Li45OGM5MTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTExMCw3ICsxMTAsNyBAQAogc3RydWN0IGluX2RldmljZTsKIGV4dGVybiBpbnQJCWlwX3J0X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZAkJaXBfcnRfcmVkaXJlY3QodTMyIG9sZF9ndywgdTMyIGRzdCwgdTMyIG5ld19ndywKLQkJCQkgICAgICAgdTMyIHNyYywgdTggdG9zLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwkJCQkgICAgICAgdTMyIHNyYywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZAkJaXBfcnRfYWR2aWNlKHN0cnVjdCBydGFibGUgKipycCwgaW50IGFkdmljZSk7CiBleHRlcm4gdm9pZAkJcnRfY2FjaGVfZmx1c2goaW50IGhvdyk7CiBleHRlcm4gaW50CQlfX2lwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IHJ0YWJsZSAqKiwgY29uc3Qgc3RydWN0IGZsb3dpICpmbHApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NtLmggYi9pbmNsdWRlL25ldC9zY20uaAppbmRleCBjM2ZhM2Q1Li41NDA2MTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY20uaAorKysgYi9pbmNsdWRlL25ldC9zY20uaApAQCAtMzcsMTAgKzM3LDEyIEBACiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2NtX3NlbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkJICAgICAgIHN0cnVjdCBzY21fY29va2llICpzY20pCiB7Ci0JbWVtc2V0KHNjbSwgMCwgc2l6ZW9mKCpzY20pKTsKLQlzY20tPmNyZWRzLnVpZCA9IGN1cnJlbnQtPnVpZDsKLQlzY20tPmNyZWRzLmdpZCA9IGN1cnJlbnQtPmdpZDsKLQlzY20tPmNyZWRzLnBpZCA9IGN1cnJlbnQtPnRnaWQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKKwlzY20tPmNyZWRzLnVpZCA9IHAtPnVpZDsKKwlzY20tPmNyZWRzLmdpZCA9IHAtPmdpZDsKKwlzY20tPmNyZWRzLnBpZCA9IHAtPnRnaWQ7CisJc2NtLT5mcCA9IE5VTEw7CisJc2NtLT5zZXEgPSAwOwogCWlmIChtc2ctPm1zZ19jb250cm9sbGVuIDw9IDApCiAJCXJldHVybiAwOwogCXJldHVybiBfX3NjbV9zZW5kKHNvY2ssIG1zZywgc2NtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKaW5kZXggMDcyZjQwNy4uZWJhOTlmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKQEAgLTUxNCw2ICs1MTQsMTYgQEAKIAkJCQkJIGludCBvcHRuYW1lLAogCQkJCQkgY2hhciBfX3VzZXIgKm9wdHZhbCwKIAkJCQkJIGludCBfX3VzZXIgKm9wdGxlbik7CisJaW50CQkoKmNvbXBhdF9zZXRzb2Nrb3B0KQkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgaW50IGxldmVsLAorCQkJCQkgaW50IG9wdG5hbWUsCisJCQkJCSBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkgaW50IG9wdGxlbik7CisJaW50CQkoKmNvbXBhdF9nZXRzb2Nrb3B0KQkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgaW50IGxldmVsLAorCQkJCQkgaW50IG9wdG5hbWUsCisJCQkJCSBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkgaW50IF9fdXNlciAqb3B0bGVuKTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICooKmdldF9kc3QpCShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkJIHVuaW9uIHNjdHBfYWRkciAqZGFkZHIsCiAJCQkJCSB1bmlvbiBzY3RwX2FkZHIgKnNhZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCAzMDc1ODAzLi4yYWE3M2MwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC0yMTAsNiArMjEwLDcgQEAKIAlnZnBfdAkJCXNrX2FsbG9jYXRpb247CiAJaW50CQkJc2tfc25kYnVmOwogCWludAkJCXNrX3JvdXRlX2NhcHM7CisJaW50CQkJc2tfcmN2bG93YXQ7CiAJdW5zaWduZWQgbG9uZyAJCXNrX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcJICAgICAgICBza19saW5nZXJ0aW1lOwogCS8qCkBAIC0yMzAsNyArMjMxLDYgQEAKIAl1bnNpZ25lZCBzaG9ydAkJc2tfbWF4X2Fja19iYWNrbG9nOwogCV9fdTMyCQkJc2tfcHJpb3JpdHk7CiAJc3RydWN0IHVjcmVkCQlza19wZWVyY3JlZDsKLQlpbnQJCQlza19yY3Zsb3dhdDsKIAlsb25nCQkJc2tfcmN2dGltZW87CiAJbG9uZwkJCXNrX3NuZHRpbWVvOwogCXN0cnVjdCBza19maWx0ZXIgICAgICAJKnNrX2ZpbHRlcjsKQEAgLTQ3OCw5ICs0NzgsOSBAQAogCXJjID0gX19jb25kaXRpb247CQkJCQlcCiAJaWYgKCFyYykgewkJCQkJCVwKIAkJKihfX3RpbWVvKSA9IHNjaGVkdWxlX3RpbWVvdXQoKihfX3RpbWVvKSk7CVwKLQkJcmMgPSBfX2NvbmRpdGlvbjsJCQkJXAogCX0JCQkJCQkJXAogCWxvY2tfc29jayhfX3NrKTsJCQkJCVwKKwlyYyA9IF9fY29uZGl0aW9uOwkJCQkJXAogCXJjOwkJCQkJCQlcCiB9KQogCkBAIC01MjAsNiArNTIwLDE0IEBACiAJaW50CQkJKCpnZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgCiAJCQkJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCAKIAkJCQkJaW50IF9fdXNlciAqb3B0aW9uKTsgIAkgCisJaW50CQkJKCpjb21wYXRfc2V0c29ja29wdCkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQlpbnQgbGV2ZWwsCisJCQkJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQlpbnQgb3B0bGVuKTsKKwlpbnQJCQkoKmNvbXBhdF9nZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCWludCBsZXZlbCwKKwkJCQkJaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkJCWludCBfX3VzZXIgKm9wdGlvbik7CiAJaW50CQkJKCpzZW5kbXNnKShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKIAlpbnQJCQkoKnJlY3Ztc2cpKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLApAQCAtODE2LDYgKzgyNCwxMCBAQAogCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiBleHRlcm4gaW50IHNvY2tfY29tbW9uX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworZXh0ZXJuIGludCBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCisJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworZXh0ZXJuIGludCBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCisJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKIAogZXh0ZXJuIHZvaWQgc2tfY29tbW9uX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2lwdC5oIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2lwdC5oCmluZGV4IDAyZWNjZWIuLmNiMzdhZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19pcHQuaAorKysgYi9pbmNsdWRlL25ldC90Y19hY3QvdGNfaXB0LmgKQEAgLTMsMTQgKzMsMTQgQEAKIAogI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CiAKLXN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0Oworc3RydWN0IHh0X2VudHJ5X3RhcmdldDsKIAogc3RydWN0IHRjZl9pcHQKIHsKIAl0Y2FfZ2VuKGlwdCk7CiAJdTMyIGhvb2s7CiAJY2hhciAqdG5hbWU7Ci0Jc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCA3N2YyMWM2Li45NDE4ZjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNjAsNiArNjAsOSBAQAogLyogTWluaW1hbCBSQ1ZfTVNTLiAqLwogI2RlZmluZSBUQ1BfTUlOX1JDVk1TUwkJNTM2VQogCisvKiBUaGUgbGVhc3QgTVRVIHRvIHVzZSBmb3IgcHJvYmluZyAqLworI2RlZmluZSBUQ1BfQkFTRV9NU1MJCTUxMgorCiAvKiBBZnRlciByZWNlaXZpbmcgdGhpcyBhbW91bnQgb2YgZHVwbGljYXRlIEFDS3MgZmFzdCByZXRyYW5zbWl0IHN0YXJ0cy4gKi8KICNkZWZpbmUgVENQX0ZBU1RSRVRSQU5TX1RIUkVTSCAzCiAKQEAgLTIxOSw2ICsyMjIsOSBAQAogZXh0ZXJuIGludCBzeXNjdGxfdGNwX21vZGVyYXRlX3JjdmJ1ZjsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF90c29fd2luX2Rpdmlzb3I7CiBleHRlcm4gaW50IHN5c2N0bF90Y3BfYWJjOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX210dV9wcm9iaW5nOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX2Jhc2VfbXNzOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX3dvcmthcm91bmRfc2lnbmVkX3dpbmRvd3M7CiAKIGV4dGVybiBhdG9taWNfdCB0Y3BfbWVtb3J5X2FsbG9jYXRlZDsKIGV4dGVybiBhdG9taWNfdCB0Y3Bfc29ja2V0c19hbGxvY2F0ZWQ7CkBAIC0zNDcsNiArMzUzLDEyIEBACiBleHRlcm4gaW50CQkJdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIAogCQkJCQkgICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIAogCQkJCQkgICAgICAgaW50IG9wdGxlbik7CitleHRlcm4gaW50CQkJY29tcGF0X3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywKKwkJCQkJaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKK2V4dGVybiBpbnQJCQljb21wYXRfdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLAorCQkJCQlpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKIGV4dGVybiB2b2lkCQkJdGNwX3NldF9rZWVwYWxpdmUoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTsKIGV4dGVybiBpbnQJCQl0Y3BfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgIHN0cnVjdCBtc2doZHIgKm1zZywKQEAgLTQ0Nyw2ICs0NTksMTAgQEAKIAogZXh0ZXJuIHZvaWQgdGNwX2luaXRpYWxpemVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2spOwogCitleHRlcm4gaW50IHRjcF9tdHVfdG9fbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IHBtdHUpOworZXh0ZXJuIGludCB0Y3BfbXNzX3RvX210dShzdHJ1Y3Qgc29jayAqc2ssIGludCBtc3MpOworZXh0ZXJuIHZvaWQgdGNwX210dXBfaW5pdChzdHJ1Y3Qgc29jayAqc2spOworCiBzdGF0aWMgaW5saW5lIHZvaWQgX190Y3BfZmFzdF9wYXRoX29uKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzbmRfd25kKQogewogCXRwLT5wcmVkX2ZsYWdzID0gaHRvbmwoKHRwLT50Y3BfaGVhZGVyX2xlbiA8PCAyNikgfApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveDI1LmggYi9pbmNsdWRlL25ldC94MjUuaAppbmRleCBmZWU2MmZmLi4wYWQ5MGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94MjUuaAorKysgYi9pbmNsdWRlL25ldC94MjUuaApAQCAtMTAxLDkgKzEwMSwxNyBAQAogI2RlZmluZQlYMjVfRkFDX1BBQ0tFVF9TSVpFCTB4NDIKICNkZWZpbmUJWDI1X0ZBQ19XSU5ET1dfU0laRQkweDQzCiAKLSNkZWZpbmUJWDI1X01BWF9GQUNfTEVOCQkyMAkJLyogUGxlbnR5IHRvIHNwYXJlICovCisjZGVmaW5lIFgyNV9NQVhfRkFDX0xFTiAJNjAKICNkZWZpbmUJWDI1X01BWF9DVURfTEVOCQkxMjgKIAorI2RlZmluZSBYMjVfRkFDX0NBTExJTkdfQUUgCTB4Q0IKKyNkZWZpbmUgWDI1X0ZBQ19DQUxMRURfQUUgCTB4QzkKKworI2RlZmluZSBYMjVfTUFSS0VSIAkJMHgwMAorI2RlZmluZSBYMjVfRFRFX1NFUlZJQ0VTIAkweDBGCisjZGVmaW5lIFgyNV9NQVhfQUVfTEVOIAkJNDAJCQkvKiBNYXggbnVtIG9mIHNlbWktb2N0ZXRzIGluIEFFIC0gT1NJIE53ICovCisjZGVmaW5lIFgyNV9NQVhfRFRFX0ZBQ0lMX0xFTgkyMQkJCS8qIE1heCBsZW5ndGggb2YgRFRFIGZhY2lsaXR5IHBhcmFtcyAqLworCiAvKioKICAqCXN0cnVjdCB4MjVfcm91dGUgLSB4MjUgcm91dGluZyBlbnRyeQogICoJQG5vZGUgLSBlbnRyeSBpbiB4MjVfbGlzdF9sb2NrCkBAIC0xNDgsNiArMTU2LDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKIAlzdHJ1Y3QgeDI1X2NhdXNlZGlhZwljYXVzZWRpYWc7CiAJc3RydWN0IHgyNV9mYWNpbGl0aWVzCWZhY2lsaXRpZXM7CisJc3RydWN0IHgyNV9kdGVfZmFjaWxpdGllcyBkdGVfZmFjaWxpdGllczsKIAlzdHJ1Y3QgeDI1X2NhbGx1c2VyZGF0YQljYWxsdXNlcmRhdGE7CiAJdW5zaWduZWQgbG9uZyAJCXZjX2ZhY2lsX21hc2s7CS8qIGluY19jYWxsIGZhY2lsaXRpZXMgbWFzayAqLwogfTsKQEAgLTE4MCw5ICsxODksMTMgQEAKIGV4dGVybiB2b2lkIHgyNV90ZXJtaW5hdGVfbGluayhzdHJ1Y3QgeDI1X25laWdoICopOwogCiAvKiB4MjVfZmFjaWxpdGllcy5jICovCi1leHRlcm4gaW50ICB4MjVfcGFyc2VfZmFjaWxpdGllcyhzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgeDI1X2ZhY2lsaXRpZXMgKiwgdW5zaWduZWQgbG9uZyAqKTsKLWV4dGVybiBpbnQgIHgyNV9jcmVhdGVfZmFjaWxpdGllcyh1bnNpZ25lZCBjaGFyICosIHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiBpbnQgIHgyNV9uZWdvdGlhdGVfZmFjaWxpdGllcyhzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgeDI1X2ZhY2lsaXRpZXMgKik7CitleHRlcm4gaW50IHgyNV9wYXJzZV9mYWNpbGl0aWVzKHN0cnVjdCBza19idWZmICosIHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqLAorCQkJCXN0cnVjdCB4MjVfZHRlX2ZhY2lsaXRpZXMgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQgeDI1X2NyZWF0ZV9mYWNpbGl0aWVzKHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IHgyNV9mYWNpbGl0aWVzICosCisJCQkJc3RydWN0IHgyNV9kdGVfZmFjaWxpdGllcyAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQgeDI1X25lZ290aWF0ZV9mYWNpbGl0aWVzKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBzb2NrICosCisJCQkJc3RydWN0IHgyNV9mYWNpbGl0aWVzICosCisJCQkJc3RydWN0IHgyNV9kdGVfZmFjaWxpdGllcyAqKTsKIGV4dGVybiB2b2lkIHgyNV9saW1pdF9mYWNpbGl0aWVzKHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqLCBzdHJ1Y3QgeDI1X25laWdoICopOwogCiAvKiB4MjVfaW4uYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IGQ2MTExYTIuLjYxYjc1MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9wZmtleXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtMjAsNyArMjEsMTEgQEAKIAogI2RlZmluZSBYRlJNX0FMSUdOOChsZW4pCSgoKGxlbikgKyA3KSAmIH43KQogCi1leHRlcm4gc3RydWN0IHNlbWFwaG9yZSB4ZnJtX2NmZ19zZW07CitleHRlcm4gc3RydWN0IHNvY2sgKnhmcm1fbmw7CitleHRlcm4gdTMyIHN5c2N0bF94ZnJtX2FldmVudF9ldGltZTsKK2V4dGVybiB1MzIgc3lzY3RsX3hmcm1fYWV2ZW50X3JzZXF0aDsKKworZXh0ZXJuIHN0cnVjdCBtdXRleCB4ZnJtX2NmZ19tdXRleDsKIAogLyogT3JnYW5pemF0aW9uIG9mIFNQRCBha2EgIlhGUk0gcnVsZXMiCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzNSw2ICsxNDAsMTYgQEAKIAkvKiBTdGF0ZSBmb3IgcmVwbGF5IGRldGVjdGlvbiAqLwogCXN0cnVjdCB4ZnJtX3JlcGxheV9zdGF0ZSByZXBsYXk7CiAKKwkvKiBSZXBsYXkgZGV0ZWN0aW9uIHN0YXRlIGF0IHRoZSB0aW1lIHdlIHNlbnQgdGhlIGxhc3Qgbm90aWZpY2F0aW9uICovCisJc3RydWN0IHhmcm1fcmVwbGF5X3N0YXRlIHByZXBsYXk7CisKKwkvKiBSZXBsYXkgZGV0ZWN0aW9uIG5vdGlmaWNhdGlvbiBzZXR0aW5ncyAqLworCXUzMgkJCXJlcGxheV9tYXhhZ2U7CisJdTMyCQkJcmVwbGF5X21heGRpZmY7CisKKwkvKiBSZXBsYXkgZGV0ZWN0aW9uIG5vdGlmaWNhdGlvbiB0aW1lciAqLworCXN0cnVjdCB0aW1lcl9saXN0CXJ0aW1lcjsKKwogCS8qIFN0YXRpc3RpY3MgKi8KIAlzdHJ1Y3QgeGZybV9zdGF0cwlzdGF0czsKIApAQCAtMTY5LDYgKzE4NCw3IEBACiAJCXUzMiBoYXJkOwogCQl1MzIgcHJvdG87CiAJCXUzMiBieWlkOworCQl1MzIgYWV2ZW50OwogCX0gZGF0YTsKIAogCXUzMglzZXE7CkBAIC0xOTksMTAgKzIxNSwxMyBAQAogZXh0ZXJuIGludCB4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pOwogZXh0ZXJuIHZvaWQga21fcG9saWN5X25vdGlmeShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBpbnQgZGlyLCBzdHJ1Y3Qga21fZXZlbnQgKmMpOwogZXh0ZXJuIHZvaWQga21fc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qga21fZXZlbnQgKmMpOwotCiAjZGVmaW5lIFhGUk1fQUNRX0VYUElSRVMJMzAKIAogc3RydWN0IHhmcm1fdG1wbDsKK2V4dGVybiBpbnQga21fcXVlcnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3RtcGwgKnQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sKTsKK2V4dGVybiB2b2lkIGttX3N0YXRlX2V4cGlyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBoYXJkLCB1MzIgcGlkKTsKK2V4dGVybiBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CisKIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyB7CiAJdW5zaWduZWQgc2hvcnQJCWZhbWlseTsKIAlyd2xvY2tfdAkJbG9jazsKQEAgLTIzMyw3ICsyNTIsNiBAQAogCWludAkJCSgqaW5pdF9zdGF0ZSkoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogCXZvaWQJCQkoKmRlc3RydWN0b3IpKHN0cnVjdCB4ZnJtX3N0YXRlICopOwogCWludAkJCSgqaW5wdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICosIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICosIHN0cnVjdCBza19idWZmICpza2IpOwotCWludAkJCSgqcG9zdF9pbnB1dCkoc3RydWN0IHhmcm1fc3RhdGUgKiwgc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50CQkJKCpvdXRwdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICosIHN0cnVjdCBza19idWZmICpwc2tiKTsKIAkvKiBFc3RpbWF0ZSBtYXhpbWFsIHNpemUgb2YgcmVzdWx0IG9mIHRyYW5zZm9ybWF0aW9uIG9mIGEgZGdyYW0gKi8KIAl1MzIJCQkoKmdldF9tYXhfc2l6ZSkoc3RydWN0IHhmcm1fc3RhdGUgKiwgaW50IHNpemUpOwpAQCAtMzA2LDcgKzMyNCwyMSBAQAogCXN0cnVjdCB4ZnJtX3RtcGwgICAgICAgCXhmcm1fdmVjW1hGUk1fTUFYX0RFUFRIXTsKIH07CiAKLSNkZWZpbmUgWEZSTV9LTV9USU1FT1VUCQkzMAorI2RlZmluZSBYRlJNX0tNX1RJTUVPVVQgICAgICAgICAgICAgICAgMzAKKy8qIHdoaWNoIHNlcW5vICovCisjZGVmaW5lIFhGUk1fUkVQTEFZX1NFUQkJMQorI2RlZmluZSBYRlJNX1JFUExBWV9PU0VRCTIKKyNkZWZpbmUgWEZSTV9SRVBMQVlfU0VRX01BU0sJMworLyogd2hhdCBoYXBwZW5lZCAqLworI2RlZmluZSBYRlJNX1JFUExBWV9VUERBVEUJWEZSTV9BRV9DUgorI2RlZmluZSBYRlJNX1JFUExBWV9USU1FT1VUCVhGUk1fQUVfQ0UKKworLyogZGVmYXVsdCBhZXZlbnQgdGltZW91dCBpbiB1bml0cyBvZiAxMDBtcyAqLworI2RlZmluZSBYRlJNX0FFX0VUSU1FCQkJMTAKKy8qIEFzeW5jIEV2ZW50IHRpbWVyIG11bHRpcGxpZXIgKi8KKyNkZWZpbmUgWEZSTV9BRV9FVEhfTQkJCTEwCisvKiBkZWZhdWx0IHNlcSB0aHJlc2hvbGQgc2l6ZSAqLworI2RlZmluZSBYRlJNX0FFX1NFUVRfU0laRQkJMgogCiBzdHJ1Y3QgeGZybV9tZ3IKIHsKQEAgLTQwMyw2ICs0MzUsMTEgQEAKIAogZXh0ZXJuIHZvaWQgX194ZnJtX3N0YXRlX2Rlc3Ryb3koc3RydWN0IHhmcm1fc3RhdGUgKik7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3hmcm1fc3RhdGVfcHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4KQoreworCWF0b21pY19kZWMoJngtPnJlZmNudCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX3N0YXRlX3B1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmeC0+cmVmY250KSkKQEAgLTg2MSw2ICs4OTgsNyBAQAogZXh0ZXJuIHZvaWQgeGZybV9zdGF0ZV9mbHVzaCh1OCBwcm90byk7CiBleHRlcm4gaW50IHhmcm1fcmVwbGF5X2NoZWNrKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgc2VxKTsKIGV4dGVybiB2b2lkIHhmcm1fcmVwbGF5X2FkdmFuY2Uoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBzZXEpOworZXh0ZXJuIHZvaWQgeGZybV9yZXBsYXlfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgZXZlbnQpOwogZXh0ZXJuIGludCB4ZnJtX3N0YXRlX2NoZWNrKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybV9zdGF0ZV9tdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBtdHUpOwogZXh0ZXJuIGludCB4ZnJtX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwpAQCAtOTIwLDcgKzk1OCw3IEBACiAKIGV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBrbV93YWl0cTsKIGV4dGVybiBpbnQga21fbmV3X21hcHBpbmcoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsIHUxNiBzcG9ydCk7Ci1leHRlcm4gdm9pZCBrbV9wb2xpY3lfZXhwaXJlZChzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpciwgaW50IGhhcmQpOworZXh0ZXJuIHZvaWQga21fcG9saWN5X2V4cGlyZWQoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIsIGludCBoYXJkLCB1MzIgcGlkKTsKIAogZXh0ZXJuIHZvaWQgeGZybV9pbnB1dF9pbml0KHZvaWQpOwogZXh0ZXJuIGludCB4ZnJtX3BhcnNlX3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBuZXh0aGRyLCB1MzIgKnNwaSwgdTMyICpzZXEpOwpAQCAtOTYxLDQgKzk5OSwyNCBAQAogCXJldHVybiBpbmRleCAmIDc7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm1fYWV2ZW50X2lzX29uKHZvaWQpCit7CisJc3RydWN0IHNvY2sgKm5sc2s7CisJaW50IHJldCA9IDA7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbmxzayA9IHJjdV9kZXJlZmVyZW5jZSh4ZnJtX25sKTsKKwlpZiAobmxzaykKKwkJcmV0ID0gbmV0bGlua19oYXNfbGlzdGVuZXJzKG5sc2ssIFhGUk1OTEdSUF9BRVZFTlRTKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9hZXZlbnRfZG9yZXBsYXkoc3RydWN0IHhmcm1fc3RhdGUgKngpCit7CisJaWYgKHhmcm1fYWV2ZW50X2lzX29uKCkpCisJCXhmcm1fcmVwbGF5X25vdGlmeSh4LCBYRlJNX1JFUExBWV9VUERBVEUpOworfQorCisKICNlbmRpZgkvKiBfTkVUX1hGUk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvZGV2aWNlX2lkLmggYi9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaAppbmRleCAzNDZkODFlLi5lMDRlMGIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaApAQCAtNzIsNiArNzIsMTUgQEAKIAkucHJvZF9pZCA9IHsgKHYxKSwgKHYyKSwgKHYzKSwgKHY0KSB9LCBcCiAJLnByb2RfaWRfaGFzaCA9IHsgKHZoMSksICh2aDIpLCAodmgzKSwgKHZoNCkgfSwgfQogCisjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEX1BST0RfSUQxKG1hbmYsIGNhcmQsIHYxLCB2aDEpIHsgXAorCS5tYXRjaF9mbGFncyA9IFBDTUNJQV9ERVZfSURfTUFUQ0hfTUFORl9JRHwgXAorCQkJUENNQ0lBX0RFVl9JRF9NQVRDSF9DQVJEX0lEfCBcCisJCQlQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQxLCBcCisJLm1hbmZfaWQgPSAobWFuZiksIFwKKwkuY2FyZF9pZCA9IChjYXJkKSwgXAorCS5wcm9kX2lkID0geyAodjEpLCBOVUxMLCBOVUxMLCBOVUxMIH0sIFwKKwkucHJvZF9pZF9oYXNoID0geyAodmgxKSwgMCwgMCwgMCB9LCB9CisKIAogLyogbXVsdGktZnVuY3Rpb24gZGV2aWNlcyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfZm1yX3Bvb2wuaCBiL2luY2x1ZGUvcmRtYS9pYl9mbXJfcG9vbC5oCmluZGV4IDg2YjdlOTMuLjRhY2U1NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9mbXJfcG9vbC5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9mbXJfcG9vbC5oCkBAIC00Myw2ICs0Myw3IEBACiAvKioKICAqIHN0cnVjdCBpYl9mbXJfcG9vbF9wYXJhbSAtIFBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIEZNUiBwb29sCiAgKiBAbWF4X3BhZ2VzX3Blcl9mbXI6TWF4aW11bSBudW1iZXIgb2YgcGFnZXMgcGVyIG1hcCByZXF1ZXN0LgorICogQHBhZ2Vfc2hpZnQ6IExvZzIgb2Ygc2l6ZW9mICJwYWdlcyIgbWFwcGVkIGJ5IHRoaXMgZm1yCiAgKiBAYWNjZXNzOkFjY2VzcyBmbGFncyBmb3IgRk1ScyBpbiBwb29sLgogICogQHBvb2xfc2l6ZTpOdW1iZXIgb2YgRk1ScyB0byBhbGxvY2F0ZSBmb3IgcG9vbC4KICAqIEBkaXJ0eV93YXRlcm1hcms6Rmx1c2ggaXMgdHJpZ2dlcmVkIHdoZW4gQGRpcnR5X3dhdGVybWFyayBkaXJ0eQpAQCAtNTUsNiArNTYsNyBAQAogICovCiBzdHJ1Y3QgaWJfZm1yX3Bvb2xfcGFyYW0gewogCWludCAgICAgICAgICAgICAgICAgICAgIG1heF9wYWdlc19wZXJfZm1yOworCWludCAgICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2hpZnQ7CiAJZW51bSBpYl9hY2Nlc3NfZmxhZ3MgICAgYWNjZXNzOwogCWludCAgICAgICAgICAgICAgICAgICAgIHBvb2xfc2l6ZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICBkaXJ0eV93YXRlcm1hcms7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfbWFkLmggYi9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKaW5kZXggMmMxMzM1MC4uNTFhYjhlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX21hZC5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9tYWQuaApAQCAtMzMsNyArMzMsNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKgotICogJElkOiBpYl9tYWQuaCAyNzc1IDIwMDUtMDctMDIgMTM6NDI6MTJaIGhhbHIgJAorICogJElkOiBpYl9tYWQuaCA1NTk2IDIwMDYtMDMtMDMgMDE6MDA6MDdaIHNlYW4uaGVmdHkgJAogICovCiAKICNpZiAhZGVmaW5lZCggSUJfTUFEX0ggKQpAQCAtMjA4LDE1ICsyMDgsMjMgQEAKIC8qKgogICogaWJfbWFkX3NlbmRfYnVmIC0gTUFEIGRhdGEgYnVmZmVyIGFuZCB3b3JrIHJlcXVlc3QgZm9yIHNlbmRzLgogICogQG5leHQ6IEEgcG9pbnRlciB1c2VkIHRvIGNoYWluIHRvZ2V0aGVyIE1BRHMgZm9yIHBvc3RpbmcuCi0gKiBAbWFkOiBSZWZlcmVuY2VzIGFuIGFsbG9jYXRlZCBNQUQgZGF0YSBidWZmZXIuCisgKiBAbWFkOiBSZWZlcmVuY2VzIGFuIGFsbG9jYXRlZCBNQUQgZGF0YSBidWZmZXIgZm9yIE1BRHMgdGhhdCBkbyBub3QgaGF2ZQorICogICBSTVBQIGFjdGl2ZS4gIEZvciBNQURzIHVzaW5nIFJNUFAsIHJlZmVyZW5jZXMgdGhlIGNvbW1vbiBhbmQgbWFuYWdlbWVudAorICogICBjbGFzcyBzcGVjaWZpYyBoZWFkZXJzLgogICogQG1hZF9hZ2VudDogTUFEIGFnZW50IHRoYXQgYWxsb2NhdGVkIHRoZSBidWZmZXIuCiAgKiBAYWg6IFRoZSBhZGRyZXNzIGhhbmRsZSB0byB1c2Ugd2hlbiBzZW5kaW5nIHRoZSBNQUQuCiAgKiBAY29udGV4dDogVXNlci1jb250cm9sbGVkIGNvbnRleHQgZmllbGRzLgorICogQGhkcl9sZW46IEluZGljYXRlcyB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBoZWFkZXIgb2YgdGhlIE1BRC4gIFRoaXMgbGVuZ3RoCisgKiAgIGluY2x1ZGVzIHRoZSBjb21tb24gTUFELCBSTVBQLCBhbmQgY2xhc3Mgc3BlY2lmaWMgaGVhZGVycy4KKyAqIEBkYXRhX2xlbjogSW5kaWNhdGVzIHRoZSB0b3RhbCBzaXplIG9mIHVzZXItdHJhbnNmZXJyZWQgZGF0YS4KKyAqIEBzZWdfY291bnQ6IFRoZSBudW1iZXIgb2YgUk1QUCBzZWdtZW50cyBhbGxvY2F0ZWQgZm9yIHRoaXMgc2VuZC4KKyAqIEBzZWdfc2l6ZTogU2l6ZSBvZiBlYWNoIFJNUFAgc2VnbWVudC4KICAqIEB0aW1lb3V0X21zOiBUaW1lIHRvIHdhaXQgZm9yIGEgcmVzcG9uc2UuCiAgKiBAcmV0cmllczogTnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGEgcmVxdWVzdCBmb3IgYSByZXNwb25zZS4KICAqCiAgKiBVc2VycyBhcmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgTUFEIGJ1ZmZlciBpdHNlbGYsIHdpdGggdGhlCi0gKiBleGNlcHRpb24gb2Ygc3BlY2lmeWluZyB0aGUgcGF5bG9hZCBsZW5ndGggZmllbGQgaW4gYW55IFJNUFAgTUFELgorICogZXhjZXB0aW9uIG9mIGFueSBSTVBQIGhlYWRlci4gIEFkZGl0aW9uYWwgc2VnbWVudCBidWZmZXIgc3BhY2UgYWxsb2NhdGVkCisgKiBiZXlvbmQgZGF0YV9sZW4gaXMgcGFkZGluZy4KICAqLwogc3RydWN0IGliX21hZF9zZW5kX2J1ZiB7CiAJc3RydWN0IGliX21hZF9zZW5kX2J1ZgkqbmV4dDsKQEAgLTIyNCw2ICsyMzIsMTAgQEAKIAlzdHJ1Y3QgaWJfbWFkX2FnZW50CSptYWRfYWdlbnQ7CiAJc3RydWN0IGliX2FoCQkqYWg7CiAJdm9pZAkJCSpjb250ZXh0WzJdOworCWludAkJCWhkcl9sZW47CisJaW50CQkJZGF0YV9sZW47CisJaW50CQkJc2VnX2NvdW50OworCWludAkJCXNlZ19zaXplOwogCWludAkJCXRpbWVvdXRfbXM7CiAJaW50CQkJcmV0cmllczsKIH07CkBAIC0yOTksNyArMzExLDcgQEAKICAqIEBtYWRfcmVjdl93YzogUmVjZWl2ZWQgd29yayBjb21wbGV0aW9uIGluZm9ybWF0aW9uIG9uIHRoZSByZWNlaXZlZCBNQUQuCiAgKgogICogTUFEcyByZWNlaXZlZCBpbiByZXNwb25zZSB0byBhIHNlbmQgcmVxdWVzdCBvcGVyYXRpb24gd2lsbCBiZSBoYW5kZWQgdG8KLSAqIHRoZSB1c2VyIGFmdGVyIHRoZSBzZW5kIG9wZXJhdGlvbiBjb21wbGV0ZXMuICBBbGwgZGF0YSBidWZmZXJzIGdpdmVuCisgKiB0aGUgdXNlciBiZWZvcmUgdGhlIHNlbmQgb3BlcmF0aW9uIGNvbXBsZXRlcy4gIEFsbCBkYXRhIGJ1ZmZlcnMgZ2l2ZW4KICAqIHRvIHJlZ2lzdGVyZWQgYWdlbnRzIHRocm91Z2ggdGhpcyByb3V0aW5lIGFyZSBvd25lZCBieSB0aGUgcmVjZWl2aW5nCiAgKiBjbGllbnQsIGV4Y2VwdCBmb3Igc25vb3BpbmcgYWdlbnRzLiAgQ2xpZW50cyBzbm9vcGluZyBNQURzIHNob3VsZCBub3QKICAqIG1vZGlmeSB0aGUgZGF0YSByZWZlcmVuY2VkIGJ5IEBtYWRfcmVjdl93Yy4KQEAgLTQ4NSwxNyArNDk3LDYgQEAKIGludCBpYl9wb3N0X3NlbmRfbWFkKHN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKnNlbmRfYnVmLAogCQkgICAgIHN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKipiYWRfc2VuZF9idWYpOwogCi0vKioKLSAqIGliX2NvYWxlc2NlX3JlY3ZfbWFkIC0gQ29hbGVzY2VzIHJlY2VpdmVkIE1BRCBkYXRhIGludG8gYSBzaW5nbGUgYnVmZmVyLgotICogQG1hZF9yZWN2X3djOiBXb3JrIGNvbXBsZXRpb24gaW5mb3JtYXRpb24gZm9yIGEgcmVjZWl2ZWQgTUFELgotICogQGJ1ZjogVXNlci1wcm92aWRlZCBkYXRhIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBjb2FsZXNjZWQgYnVmZmVycy4gIFRoZQotICogICByZWZlcmVuY2VkIGJ1ZmZlciBzaG91bGQgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIG1hZF9sZW4gc3BlY2lmaWVkCi0gKiAgIGJ5IEBtYWRfcmVjdl93Yy4KLSAqCi0gKiBUaGlzIGNhbGwgY29waWVzIGEgY2hhaW4gb2YgcmVjZWl2ZWQgTUFEIHNlZ21lbnRzIGludG8gYSBzaW5nbGUgZGF0YSBidWZmZXIsCi0gKiByZW1vdmluZyBkdXBsaWNhdGVkIGhlYWRlcnMuCi0gKi8KLXZvaWQgaWJfY29hbGVzY2VfcmVjdl9tYWQoc3RydWN0IGliX21hZF9yZWN2X3djICptYWRfcmVjdl93Yywgdm9pZCAqYnVmKTsKIAogLyoqCiAgKiBpYl9mcmVlX3JlY3ZfbWFkIC0gUmV0dXJucyBkYXRhIGJ1ZmZlcnMgdXNlZCB0byByZWNlaXZlIGEgTUFELgpAQCAtNTkwLDkgKzU5MSwxMCBAQAogICogd2l0aCBhbiBpbml0aWFsaXplZCB3b3JrIHJlcXVlc3Qgc3RydWN0dXJlLiAgVXNlcnMgbWF5IG1vZGlmeSB0aGUgcmV0dXJuZWQKICAqIE1BRCBkYXRhIGJ1ZmZlciBiZWZvcmUgcG9zdGluZyB0aGUgc2VuZC4KICAqCi0gKiBUaGUgcmV0dXJuZWQgZGF0YSBidWZmZXIgd2lsbCBiZSBjbGVhcmVkLiAgVXNlcnMgYXJlIHJlc3BvbnNpYmxlIGZvcgotICogaW5pdGlhbGl6aW5nIHRoZSBjb21tb24gTUFEIGFuZCBhbnkgY2xhc3Mgc3BlY2lmaWMgaGVhZGVycy4gIElmIEBybXBwX2FjdGl2ZQotICogaXMgc2V0LCB0aGUgUk1QUCBoZWFkZXIgd2lsbCBiZSBpbml0aWFsaXplZCBmb3Igc2VuZGluZy4KKyAqIFRoZSByZXR1cm5lZCBNQUQgaGVhZGVyLCBjbGFzcyBzcGVjaWZpYyBoZWFkZXJzLCBhbmQgYW55IHBhZGRpbmcgd2lsbCBiZQorICogY2xlYXJlZC4gIFVzZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBjb21tb24gTUFEIGhlYWRlciwKKyAqIGFueSBjbGFzcyBzcGVjaWZpYyBoZWFkZXIsIGFuZCBNQUQgZGF0YSBhcmVhLgorICogSWYgQHJtcHBfYWN0aXZlIGlzIHNldCwgdGhlIFJNUFAgaGVhZGVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgZm9yIHNlbmRpbmcuCiAgKi8KIHN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKiBpYl9jcmVhdGVfc2VuZF9tYWQoc3RydWN0IGliX21hZF9hZ2VudCAqbWFkX2FnZW50LAogCQkJCQkgICAgdTMyIHJlbW90ZV9xcG4sIHUxNiBwa2V5X2luZGV4LApAQCAtNjAxLDYgKzYwMywxNiBAQAogCQkJCQkgICAgZ2ZwX3QgZ2ZwX21hc2spOwogCiAvKioKKyAqIGliX2dldF9ybXBwX3NlZ21lbnQgLSByZXR1cm5zIHRoZSBkYXRhIGJ1ZmZlciBmb3IgYSBnaXZlbiBSTVBQIHNlZ21lbnQuCisgKiBAc2VuZF9idWY6IFByZXZpb3VzbHkgYWxsb2NhdGVkIHNlbmQgZGF0YSBidWZmZXIuCisgKiBAc2VnX251bTogbnVtYmVyIG9mIHNlZ21lbnQgdG8gcmV0dXJuCisgKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciBvZiBhbiBSTVBQIE1BRC4KKyAqIFVzZXJzIG11c3QgcHJvdmlkZSBzeW5jaHJvbml6YXRpb24gdG8gQHNlbmRfYnVmIGFyb3VuZCB0aGlzIGNhbGwuCisgKi8KK3ZvaWQgKmliX2dldF9ybXBwX3NlZ21lbnQoc3RydWN0IGliX21hZF9zZW5kX2J1ZiAqc2VuZF9idWYsIGludCBzZWdfbnVtKTsKKworLyoqCiAgKiBpYl9mcmVlX3NlbmRfbWFkIC0gUmV0dXJucyBkYXRhIGJ1ZmZlcnMgdXNlZCB0byBzZW5kIGEgTUFELgogICogQHNlbmRfYnVmOiBQcmV2aW91c2x5IGFsbG9jYXRlZCBzZW5kIGRhdGEgYnVmZmVyLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaAppbmRleCA1ZmYxNDkwLi4zMzhlZDQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKQEAgLTEsNyArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFBhdGhTY2FsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiBNZWxsYW5veCBUZWNobm9sb2dpZXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC00Myw3ICs0NCw3IEBACiAgKiBJbmNyZW1lbnQgdGhpcyB2YWx1ZSBpZiBhbnkgY2hhbmdlcyB0aGF0IGJyZWFrIHVzZXJzcGFjZSBBQkkKICAqIGNvbXBhdGliaWxpdHkgYXJlIG1hZGUuCiAgKi8KLSNkZWZpbmUgSUJfVVNFUl9WRVJCU19BQklfVkVSU0lPTgk0CisjZGVmaW5lIElCX1VTRVJfVkVSQlNfQUJJX1ZFUlNJT04JNgogCiBlbnVtIHsKIAlJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVCwKQEAgLTI2NSw2ICsyNjYsMTcgQEAKIAlfX3UzMiBjcWU7CiB9OwogCitzdHJ1Y3QgaWJfdXZlcmJzX3Jlc2l6ZV9jcSB7CisJX191NjQgcmVzcG9uc2U7CisJX191MzIgY3FfaGFuZGxlOworCV9fdTMyIGNxZTsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfcmVzaXplX2NxX3Jlc3AgeworCV9fdTMyIGNxZTsKK307CisKIHN0cnVjdCBpYl91dmVyYnNfcG9sbF9jcSB7CiAJX191NjQgcmVzcG9uc2U7CiAJX191MzIgY3FfaGFuZGxlOwpAQCAtMzM4LDYgKzM1MCw3IEBACiAJX191MzIgbWF4X3NlbmRfc2dlOwogCV9fdTMyIG1heF9yZWN2X3NnZTsKIAlfX3UzMiBtYXhfaW5saW5lX2RhdGE7CisJX191MzIgcmVzZXJ2ZWQ7CiB9OwogCiAvKgpAQCAtMzU5LDYgKzM3Miw0NyBAQAogCV9fdTggIHBvcnRfbnVtOwogfTsKIAorc3RydWN0IGliX3V2ZXJic19xdWVyeV9xcCB7CisJX191NjQgcmVzcG9uc2U7CisJX191MzIgcXBfaGFuZGxlOworCV9fdTMyIGF0dHJfbWFzazsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfcXVlcnlfcXBfcmVzcCB7CisJc3RydWN0IGliX3V2ZXJic19xcF9kZXN0IGRlc3Q7CisJc3RydWN0IGliX3V2ZXJic19xcF9kZXN0IGFsdF9kZXN0OworCV9fdTMyIG1heF9zZW5kX3dyOworCV9fdTMyIG1heF9yZWN2X3dyOworCV9fdTMyIG1heF9zZW5kX3NnZTsKKwlfX3UzMiBtYXhfcmVjdl9zZ2U7CisJX191MzIgbWF4X2lubGluZV9kYXRhOworCV9fdTMyIHFrZXk7CisJX191MzIgcnFfcHNuOworCV9fdTMyIHNxX3BzbjsKKwlfX3UzMiBkZXN0X3FwX251bTsKKwlfX3UzMiBxcF9hY2Nlc3NfZmxhZ3M7CisJX191MTYgcGtleV9pbmRleDsKKwlfX3UxNiBhbHRfcGtleV9pbmRleDsKKwlfX3U4ICBxcF9zdGF0ZTsKKwlfX3U4ICBjdXJfcXBfc3RhdGU7CisJX191OCAgcGF0aF9tdHU7CisJX191OCAgcGF0aF9taWdfc3RhdGU7CisJX191OCAgZW5fc3FkX2FzeW5jX25vdGlmeTsKKwlfX3U4ICBtYXhfcmRfYXRvbWljOworCV9fdTggIG1heF9kZXN0X3JkX2F0b21pYzsKKwlfX3U4ICBtaW5fcm5yX3RpbWVyOworCV9fdTggIHBvcnRfbnVtOworCV9fdTggIHRpbWVvdXQ7CisJX191OCAgcmV0cnlfY250OworCV9fdTggIHJucl9yZXRyeTsKKwlfX3U4ICBhbHRfcG9ydF9udW07CisJX191OCAgYWx0X3RpbWVvdXQ7CisJX191OCAgc3Ffc2lnX2FsbDsKKwlfX3U4ICByZXNlcnZlZFs1XTsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKIHN0cnVjdCBpYl91dmVyYnNfbW9kaWZ5X3FwIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3FwX2Rlc3QgZGVzdDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3FwX2Rlc3QgYWx0X2Rlc3Q7CkBAIC00MTUsNyArNDY5LDcgQEAKIH07CiAKIHN0cnVjdCBpYl91dmVyYnNfc2VuZF93ciB7Ci0JX191NjQgd3JfaWQ7IAorCV9fdTY0IHdyX2lkOwogCV9fdTMyIG51bV9zZ2U7CiAJX191MzIgb3Bjb2RlOwogCV9fdTMyIHNlbmRfZmxhZ3M7CkBAIC00ODksNyArNTQzLDcgQEAKIAogc3RydWN0IGliX3V2ZXJic19nbG9iYWxfcm91dGUgewogCV9fdTggIGRnaWRbMTZdOwotCV9fdTMyIGZsb3dfbGFiZWw7ICAgIAorCV9fdTMyIGZsb3dfbGFiZWw7CiAJX191OCAgc2dpZF9pbmRleDsKIAlfX3U4ICBob3BfbGltaXQ7CiAJX191OCAgdHJhZmZpY19jbGFzczsKQEAgLTU1MSw2ICs2MDUsOSBAQAogCiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9zcnFfcmVzcCB7CiAJX191MzIgc3JxX2hhbmRsZTsKKwlfX3UzMiBtYXhfd3I7CisJX191MzIgbWF4X3NnZTsKKwlfX3UzMiByZXNlcnZlZDsKIH07CiAKIHN0cnVjdCBpYl91dmVyYnNfbW9kaWZ5X3NycSB7CkBAIC01NjEsNiArNjE4LDIwIEBACiAJX191NjQgZHJpdmVyX2RhdGFbMF07CiB9OwogCitzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3NycSB7CisJX191NjQgcmVzcG9uc2U7CisJX191MzIgc3JxX2hhbmRsZTsKKwlfX3UzMiByZXNlcnZlZDsKKwlfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CisKK3N0cnVjdCBpYl91dmVyYnNfcXVlcnlfc3JxX3Jlc3AgeworCV9fdTMyIG1heF93cjsKKwlfX3UzMiBtYXhfc2dlOworCV9fdTMyIHNycV9saW1pdDsKKwlfX3UzMiByZXNlcnZlZDsKK307CisKIHN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9zcnEgewogCV9fdTY0IHJlc3BvbnNlOwogCV9fdTMyIHNycV9oYW5kbGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCmluZGV4IDIyZmM4ODYuLmMxYWQ2MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCkBAIC01LDcgKzUsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA0IFZvbHRhaXJlIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgQ2lzY28gU3lzdGVtcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTIyMiwxMSArMjIyLDEzIEBACiB9OwogCiBlbnVtIGliX2RldmljZV9tb2RpZnlfZmxhZ3MgewotCUlCX0RFVklDRV9NT0RJRllfU1lTX0lNQUdFX0dVSUQJPSAxCisJSUJfREVWSUNFX01PRElGWV9TWVNfSU1BR0VfR1VJRAk9IDEgPDwgMCwKKwlJQl9ERVZJQ0VfTU9ESUZZX05PREVfREVTQwk9IDEgPDwgMQogfTsKIAogc3RydWN0IGliX2RldmljZV9tb2RpZnkgewogCXU2NAlzeXNfaW1hZ2VfZ3VpZDsKKwljaGFyCW5vZGVfZGVzY1s2NF07CiB9OwogCiBlbnVtIGliX3BvcnRfbW9kaWZ5X2ZsYWdzIHsKQEAgLTY0OSw3ICs2NTEsNyBAQAogc3RydWN0IGliX2Ztcl9hdHRyIHsKIAlpbnQJbWF4X3BhZ2VzOwogCWludAltYXhfbWFwczsKLQl1OAlwYWdlX3NpemU7CisJdTgJcGFnZV9zaGlmdDsKIH07CiAKIHN0cnVjdCBpYl91Y29udGV4dCB7CkBAIC04ODAsNyArODgyLDggQEAKIAkJCQkJCXN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwKIAkJCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqZGVzdHJveV9jcSkoc3RydWN0IGliX2NxICpjcSk7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpyZXNpemVfY3EpKHN0cnVjdCBpYl9jcSAqY3EsIGludCBjcWUpOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcmVzaXplX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgY3FlLAorCQkJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpwb2xsX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgbnVtX2VudHJpZXMsCiAJCQkJCSAgICAgIHN0cnVjdCBpYl93YyAqd2MpOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcGVla19jcSkoc3RydWN0IGliX2NxICpjcSwgaW50IHdjX2NudCk7CkBAIC05NTAsNiArOTUzLDcgQEAKIAl1NjQJCQkgICAgIHV2ZXJic19jbWRfbWFzazsKIAlpbnQJCQkgICAgIHV2ZXJic19hYmlfdmVyOwogCisJY2hhcgkJCSAgICAgbm9kZV9kZXNjWzY0XTsKIAlfX2JlNjQJCQkgICAgIG5vZGVfZ3VpZDsKIAl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVfdHlwZTsKIAl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNfcG9ydF9jbnQ7CkBAIC05ODYsNiArOTkwLDI0IEBACiAJcmV0dXJuIGNvcHlfdG9fdXNlcih1ZGF0YS0+b3V0YnVmLCBzcmMsIGxlbikgPyAtRUZBVUxUIDogMDsKIH0KIAorLyoqCisgKiBpYl9tb2RpZnlfcXBfaXNfb2sgLSBDaGVjayB0aGF0IHRoZSBzdXBwbGllZCBhdHRyaWJ1dGUgbWFzaworICogY29udGFpbnMgYWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgYW5kIG5vIGF0dHJpYnV0ZXMgbm90IGFsbG93ZWQgZm9yCisgKiB0aGUgZ2l2ZW4gUVAgc3RhdGUgdHJhbnNpdGlvbi4KKyAqIEBjdXJfc3RhdGU6IEN1cnJlbnQgUVAgc3RhdGUKKyAqIEBuZXh0X3N0YXRlOiBOZXh0IFFQIHN0YXRlCisgKiBAdHlwZTogUVAgdHlwZQorICogQG1hc2s6IE1hc2sgb2Ygc3VwcGxpZWQgUVAgYXR0cmlidXRlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBhIGxvdy1sZXZlbCBkcml2ZXIncworICogbW9kaWZ5X3FwIG1ldGhvZCBjYW4gdXNlIHRvIHZhbGlkYXRlIHRoZSBjb25zdW1lcidzIGlucHV0LiAgSXQKKyAqIGNoZWNrcyB0aGF0IGN1cl9zdGF0ZSBhbmQgbmV4dF9zdGF0ZSBhcmUgdmFsaWQgUVAgc3RhdGVzLCB0aGF0IGEKKyAqIHRyYW5zaXRpb24gZnJvbSBjdXJfc3RhdGUgdG8gbmV4dF9zdGF0ZSBpcyBhbGxvd2VkIGJ5IHRoZSBJQiBzcGVjLAorICogYW5kIHRoYXQgdGhlIGF0dHJpYnV0ZSBtYXNrIHN1cHBsaWVkIGlzIGFsbG93ZWQgZm9yIHRoZSB0cmFuc2l0aW9uLgorICovCitpbnQgaWJfbW9kaWZ5X3FwX2lzX29rKGVudW0gaWJfcXBfc3RhdGUgY3VyX3N0YXRlLCBlbnVtIGliX3FwX3N0YXRlIG5leHRfc3RhdGUsCisJCSAgICAgICBlbnVtIGliX3FwX3R5cGUgdHlwZSwgZW51bSBpYl9xcF9hdHRyX21hc2sgbWFzayk7CisKIGludCBpYl9yZWdpc3Rlcl9ldmVudF9oYW5kbGVyICAoc3RydWN0IGliX2V2ZW50X2hhbmRsZXIgKmV2ZW50X2hhbmRsZXIpOwogaW50IGliX3VucmVnaXN0ZXJfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnRfaGFuZGxlciAqZXZlbnRfaGFuZGxlcik7CiB2b2lkIGliX2Rpc3BhdGNoX2V2ZW50KHN0cnVjdCBpYl9ldmVudCAqZXZlbnQpOwpAQCAtMTA3OCw3ICsxMTAwLDkgQEAKICAqIGliX2NyZWF0ZV9zcnEgLSBDcmVhdGVzIGEgU1JRIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3RlY3Rpb24KICAqICAgZG9tYWluLgogICogQHBkOiBUaGUgcHJvdGVjdGlvbiBkb21haW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBTUlEuCi0gKiBAc3JxX2luaXRfYXR0cjogQSBsaXN0IG9mIGluaXRpYWwgYXR0cmlidXRlcyByZXF1aXJlZCB0byBjcmVhdGUgdGhlIFNSUS4KKyAqIEBzcnFfaW5pdF9hdHRyOiBBIGxpc3Qgb2YgaW5pdGlhbCBhdHRyaWJ1dGVzIHJlcXVpcmVkIHRvIGNyZWF0ZSB0aGUKKyAqICAgU1JRLiAgSWYgU1JRIGNyZWF0aW9uIHN1Y2NlZWRzLCB0aGVuIHRoZSBhdHRyaWJ1dGVzIGFyZSB1cGRhdGVkIHRvCisgKiAgIHRoZSBhY3R1YWwgY2FwYWJpbGl0aWVzIG9mIHRoZSBjcmVhdGVkIFNSUS4KICAqCiAgKiBzcnFfYXR0ci0+bWF4X3dyIGFuZCBzcnFfYXR0ci0+bWF4X3NnZSBhcmUgcmVhZCB0aGUgZGV0ZXJtaW5lIHRoZQogICogcmVxdWVzdGVkIHNpemUgb2YgdGhlIFNSUSwgYW5kIHNldCB0byB0aGUgYWN0dWFsIHZhbHVlcyBhbGxvY2F0ZWQKQEAgLTExMzcsNyArMTE2MSw5IEBACiAgKiBpYl9jcmVhdGVfcXAgLSBDcmVhdGVzIGEgUVAgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvdGVjdGlvbgogICogICBkb21haW4uCiAgKiBAcGQ6IFRoZSBwcm90ZWN0aW9uIGRvbWFpbiBhc3NvY2lhdGVkIHdpdGggdGhlIFFQLgotICogQHFwX2luaXRfYXR0cjogQSBsaXN0IG9mIGluaXRpYWwgYXR0cmlidXRlcyByZXF1aXJlZCB0byBjcmVhdGUgdGhlIFFQLgorICogQHFwX2luaXRfYXR0cjogQSBsaXN0IG9mIGluaXRpYWwgYXR0cmlidXRlcyByZXF1aXJlZCB0byBjcmVhdGUgdGhlCisgKiAgIFFQLiAgSWYgUVAgY3JlYXRpb24gc3VjY2VlZHMsIHRoZW4gdGhlIGF0dHJpYnV0ZXMgYXJlIHVwZGF0ZWQgdG8KKyAqICAgdGhlIGFjdHVhbCBjYXBhYmlsaXRpZXMgb2YgdGhlIGNyZWF0ZWQgUVAuCiAgKi8KIHN0cnVjdCBpYl9xcCAqaWJfY3JlYXRlX3FwKHN0cnVjdCBpYl9wZCAqcGQsCiAJCQkgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICpxcF9pbml0X2F0dHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKaW5kZXggOWMzMzEyNS4uYzYwYjhmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaS5oCkBAIC00MzMsNiArNDMzLDQgQEAKIC8qIFVzZWQgdG8gb2J0YWluIHRoZSBQQ0kgbG9jYXRpb24gb2YgYSBkZXZpY2UgKi8KICNkZWZpbmUgU0NTSV9JT0NUTF9HRVRfUENJCQkweDUzODcKIAotaW50IHNjc2lfZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQodm9pZCAoKmZuKSh2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7Ci0KICNlbmRpZiAvKiBfU0NTSV9TQ1NJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAppbmRleCA3NTI5ZjQzLi4xYWNlMWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCkBAIC0xMDQsMTAgKzEwNCwxMCBAQAogCQkJCSAgIAkgICB3b3JraW5nIG9uICovCiAKICNkZWZpbmUgU0NTSV9TRU5TRV9CVUZGRVJTSVpFIAk5NgotCXVuc2lnbmVkIGNoYXIgc2Vuc2VfYnVmZmVyW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CQkvKiBvYnRhaW5lZCBieSBSRVFVRVNUIFNFTlNFCi0JCQkJCQkgKiB3aGVuIENIRUNLIENPTkRJVElPTiBpcwotCQkJCQkJICogcmVjZWl2ZWQgb24gb3JpZ2luYWwgY29tbWFuZCAKLQkJCQkJCSAqIChhdXRvLXNlbnNlKSAqLworCXVuc2lnbmVkIGNoYXIgc2Vuc2VfYnVmZmVyW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CisJCQkJLyogb2J0YWluZWQgYnkgUkVRVUVTVCBTRU5TRSB3aGVuCisJCQkJICogQ0hFQ0sgQ09ORElUSU9OIGlzIHJlY2VpdmVkIG9uIG9yaWdpbmFsCisJCQkJICogY29tbWFuZCAoYXV0by1zZW5zZSkgKi8KIAogCS8qIExvdy1sZXZlbCBkb25lIGZ1bmN0aW9uIC0gY2FuIGJlIHVzZWQgYnkgbG93LWxldmVsIGRyaXZlciB0byBwb2ludAogCSAqICAgICAgICB0byBjb21wbGV0aW9uIGZ1bmN0aW9uLiAgTm90IHVzZWQgYnkgbWlkL3VwcGVyIGxldmVsIGNvZGUuICovCkBAIC0xMjAsMTIgKzEyMCwxMiBAQAogCXN0cnVjdCBzY3NpX3BvaW50ZXIgU0NwOwkvKiBTY3JhdGNocGFkIHVzZWQgYnkgc29tZSBob3N0IGFkYXB0ZXJzICovCiAKIAl1bnNpZ25lZCBjaGFyICpob3N0X3NjcmliYmxlOwkvKiBUaGUgaG9zdCBhZGFwdGVyIGlzIGFsbG93ZWQgdG8KLQkJCQkJICAgKiBjYWxsIHNjc2lfbWFsbG9jIGFuZCBnZXQgc29tZSBtZW1vcnkKLQkJCQkJICAgKiBhbmQgaGFuZyBpdCBoZXJlLiAgICAgVGhlIGhvc3QgYWRhcHRlcgotCQkJCQkgICAqIGlzIGFsc28gZXhwZWN0ZWQgdG8gY2FsbCBzY3NpX2ZyZWUKLQkJCQkJICAgKiB0byByZWxlYXNlIHRoaXMgbWVtb3J5LiAgKFRoZSBtZW1vcnkKLQkJCQkJICAgKiBvYnRhaW5lZCBieSBzY3NpX21hbGxvYyBpcyBndWFyYW50ZWVkCi0JCQkJCSAgICogdG8gYmUgYXQgYW4gYWRkcmVzcyA8IDE2TWIpLiAqLworCQkJCQkgKiBjYWxsIHNjc2lfbWFsbG9jIGFuZCBnZXQgc29tZSBtZW1vcnkKKwkJCQkJICogYW5kIGhhbmcgaXQgaGVyZS4gIFRoZSBob3N0IGFkYXB0ZXIKKwkJCQkJICogaXMgYWxzbyBleHBlY3RlZCB0byBjYWxsIHNjc2lfZnJlZQorCQkJCQkgKiB0byByZWxlYXNlIHRoaXMgbWVtb3J5LiAgKFRoZSBtZW1vcnkKKwkJCQkJICogb2J0YWluZWQgYnkgc2NzaV9tYWxsb2MgaXMgZ3VhcmFudGVlZAorCQkJCQkgKiB0byBiZSBhdCBhbiBhZGRyZXNzIDwgMTZNYikuICovCiAKIAlpbnQgcmVzdWx0OwkJLyogU3RhdHVzIGNvZGUgZnJvbSBsb3dlciBsZXZlbCBkcml2ZXIgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCAyOTBlM2I0Li44OTVkMjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHN0cnVjdCByZXF1ZXN0X3F1ZXVlOwpAQCAtNzMsNyArNzQsNiBAQAogCXVuc2lnbmVkIHNlY3Rvcl9zaXplOwkvKiBzaXplIGluIGJ5dGVzICovCiAKIAl2b2lkICpob3N0ZGF0YTsJCS8qIGF2YWlsYWJsZSB0byBsb3ctbGV2ZWwgZHJpdmVyICovCi0JY2hhciBkZXZmc19uYW1lWzI1Nl07CS8qIGRldmZzIGp1bmsgKi8KIAljaGFyIHR5cGU7CiAJY2hhciBzY3NpX2xldmVsOwogCWNoYXIgaW5xX3BlcmlwaF9xdWFsOwkvKiBQUSBmcm9tIElOUVVJUlkgZGF0YSAqLwkKQEAgLTEzOCw2ICsxMzgsOCBAQAogCXN0cnVjdCBkZXZpY2UJCXNkZXZfZ2VuZGV2OwogCXN0cnVjdCBjbGFzc19kZXZpY2UJc2Rldl9jbGFzc2RldjsKIAorCXN0cnVjdCBleGVjdXRlX3dvcmsJZXc7IC8qIHVzZWQgdG8gZ2V0IHByb2Nlc3MgY29udGV4dCBvbiBwdXQgKi8KKwogCWVudW0gc2NzaV9kZXZpY2Vfc3RhdGUgc2Rldl9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nCQlzZGV2X2RhdGFbMF07CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpOwpAQCAtMTU0LDYgKzE1NiwxMSBAQAogI2RlZmluZSBzY21kX3ByaW50ayhwcmVmaXgsIHNjbWQsIGZtdCwgYS4uLikJXAogCWRldl9wcmludGsocHJlZml4LCAmKHNjbWQpLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LCBmbXQsICMjYSkKIAorZW51bSBzY3NpX3RhcmdldF9zdGF0ZSB7CisJU1RBUkdFVF9SVU5OSU5HID0gMSwKKwlTVEFSR0VUX0RFTCwKK307CisKIC8qCiAgKiBzY3NpX3RhcmdldDogcmVwcmVzZW50YXRpb24gb2YgYSBzY3NpIHRhcmdldCwgZm9yIG5vdywgdGhpcyBpcyBvbmx5CiAgKiB1c2VkIGZvciBzaW5nbGVfbHVuIGRldmljZXMuIElmIG5vIG9uZSBoYXMgYWN0aXZlIElPIHRvIHRoZSB0YXJnZXQsCkBAIC0xNjgsOCArMTc1LDEzIEBACiAJdW5zaWduZWQgaW50CQljaGFubmVsOwogCXVuc2lnbmVkIGludAkJaWQ7IC8qIHRhcmdldCBpZCAuLi4gcmVwbGFjZQogCQkJCSAgICAgKiBzY3NpX2RldmljZS5pZCBldmVudHVhbGx5ICovCi0JdW5zaWduZWQgbG9uZwkJY3JlYXRlOjE7IC8qIHNpZ25hbCB0aGF0IGl0IG5lZWRzIHRvIGJlIGFkZGVkICovCisJdW5zaWduZWQgaW50CQljcmVhdGU6MTsgLyogc2lnbmFsIHRoYXQgaXQgbmVlZHMgdG8gYmUgYWRkZWQgKi8KKwl1bnNpZ25lZCBpbnQJCXBkdF8xZl9mb3Jfbm9fbHVuOwkvKiBQRFQgPSAweDFmICovCisJCQkJCQkvKiBtZWFucyBubyBsdW4gcHJlc2VudCAqLworCiAJY2hhcgkJCXNjc2lfbGV2ZWw7CisJc3RydWN0IGV4ZWN1dGVfd29yawlldzsKKwllbnVtIHNjc2lfdGFyZ2V0X3N0YXRlCXN0YXRlOwogCXZvaWQgCQkJKmhvc3RkYXRhOyAvKiBhdmFpbGFibGUgdG8gbG93LWxldmVsIGRyaXZlciAqLwogCXVuc2lnbmVkIGxvbmcJCXN0YXJnZXRfZGF0YVswXTsgLyogZm9yIHRoZSB0cmFuc3BvcnQgKi8KIAkvKiBzdGFyZ2V0X2RhdGEgbXVzdCBiZSB0aGUgbGFzdCBlbGVtZW50ISEhISAqLwpAQCAtMjQ5LDYgKzI2MSwxMSBAQAogCQkJICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuLCBpbnQgdGltZW91dCwKIAkJCSAgIGludCByZXRyaWVzLCBzdHJ1Y3Qgc2NzaV9tb2RlX2RhdGEgKmRhdGEsCiAJCQkgICBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKik7CitleHRlcm4gaW50IHNjc2lfbW9kZV9zZWxlY3Qoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcGYsIGludCBzcCwKKwkJCSAgICBpbnQgbW9kZXBhZ2UsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbiwKKwkJCSAgICBpbnQgdGltZW91dCwgaW50IHJldHJpZXMsCisJCQkgICAgc3RydWN0IHNjc2lfbW9kZV9kYXRhICpkYXRhLAorCQkJICAgIHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqKTsKIGV4dGVybiBpbnQgc2NzaV90ZXN0X3VuaXRfcmVhZHkoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgdGltZW91dCwKIAkJCQlpbnQgcmV0cmllcyk7CiBleHRlcm4gaW50IHNjc2lfZGV2aWNlX3NldF9zdGF0ZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCkBAIC0yODEsNiArMjk4LDExIEBACiAJCQkgICAgICB2b2lkICgqZG9uZSkodm9pZCAqLCBjaGFyICosIGludCwgaW50KSwKIAkJCSAgICAgIGdmcF90IGdmcCk7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX2RldmljZV9yZXByb2JlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlkZXZpY2VfcmVwcm9iZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZGV2X2NoYW5uZWwoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewogCXJldHVybiBzZGV2LT5jaGFubmVsOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZWguaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2VoLmgKaW5kZXggZmFiZDg3OS4uZDE2MDg4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZWguaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9laC5oCkBAIC0zNSw2ICszNSw5IEBACiB9CiAKIAorZXh0ZXJuIHZvaWQgc2NzaV9laF9maW5pc2hfY21kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9xKTsKK2V4dGVybiB2b2lkIHNjc2lfZWhfZmx1c2hfZG9uZV9xKHN0cnVjdCBsaXN0X2hlYWQgKmRvbmVfcSk7CiBleHRlcm4gdm9pZCBzY3NpX3JlcG9ydF9idXNfcmVzZXQoc3RydWN0IFNjc2lfSG9zdCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KHN0cnVjdCBTY3NpX0hvc3QgKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCBzY3NpX2Jsb2NrX3doZW5fcHJvY2Vzc2luZ19lcnJvcnMoc3RydWN0IHNjc2lfZGV2aWNlICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCmluZGV4IDgyNzk5MjkuLmRjNjg2MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKQEAgLTE0NywyMCArMTQ3LDYgQEAKIAlpbnQgKCogZWhfaG9zdF9yZXNldF9oYW5kbGVyKShzdHJ1Y3Qgc2NzaV9jbW5kICopOwogCiAJLyoKLQkgKiBUaGlzIGlzIGFuIG9wdGlvbmFsIHJvdXRpbmUgdG8gbm90aWZ5IHRoZSBob3N0IHRoYXQgdGhlIHNjc2kKLQkgKiB0aW1lciBqdXN0IGZpcmVkLiAgVGhlIHJldHVybnMgdGVsbCB0aGUgdGltZXIgcm91dGluZSB3aGF0IHRvCi0JICogZG8gYWJvdXQgdGhpczoKLQkgKgotCSAqIEVIX0hBTkRMRUQ6CQlJIGZpeGVkIHRoZSBlcnJvciwgcGxlYXNlIGNvbXBsZXRlIHRoZSBjb21tYW5kCi0JICogRUhfUkVTRVRfVElNRVI6CUkgbmVlZCBtb3JlIHRpbWUsIHJlc2V0IHRoZSB0aW1lciBhbmQKLQkgKgkJCWJlZ2luIGNvdW50aW5nIGFnYWluCi0JICogRUhfTk9UX0hBTkRMRUQJQmVnaW4gbm9ybWFsIGVycm9yIHJlY292ZXJ5Ci0JICoKLQkgKiBTdGF0dXM6IE9QVElPTkFMCi0JICovCi0JZW51bSBzY3NpX2VoX3RpbWVyX3JldHVybiAoKiBlaF90aW1lZF9vdXQpKHN0cnVjdCBzY3NpX2NtbmQgKik7Ci0KLQkvKgogCSAqIEJlZm9yZSB0aGUgbWlkIGxheWVyIGF0dGVtcHRzIHRvIHNjYW4gZm9yIGEgbmV3IGRldmljZSB3aGVyZSBub25lCiAJICogY3VycmVudGx5IGV4aXN0cywgaXQgd2lsbCBjYWxsIHRoaXMgZW50cnkgaW4geW91ciBkcml2ZXIuICBTaG91bGQKIAkgKiB5b3VyIGRyaXZlciBuZWVkIHRvIGFsbG9jYXRlIGFueSBzdHJ1Y3RzIG9yIHBlcmZvcm0gYW55IG90aGVyIGluaXQKQEAgLTMwMCw3ICsyODYsNyBAQAogCSAqIHN1c3BlbmQgc3VwcG9ydAogCSAqLwogCWludCAoKnJlc3VtZSkoc3RydWN0IHNjc2lfZGV2aWNlICopOwotCWludCAoKnN1c3BlbmQpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIAogCS8qCiAJICogTmFtZSBvZiBwcm9jIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaAppbmRleCBlN2IxMDU0Li5iMzY1N2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnQuaApAQCAtNDgsNiArNDgsMTcgQEAKIAkgKiBUcnVlIGlmIHRoZSB0cmFuc3BvcnQgd2FudHMgdG8gdXNlIGEgaG9zdC1iYXNlZCB3b3JrLXF1ZXVlCiAJICovCiAJdW5zaWduZWQgaW50IGNyZWF0ZV93b3JrX3F1ZXVlIDogMTsKKworCS8qCisJICogVGhpcyBpcyBhbiBvcHRpb25hbCByb3V0aW5lIHRoYXQgYWxsb3dzIHRoZSB0cmFuc3BvcnQgdG8gYmVjb21lCisJICogaW52b2x2ZWQgd2hlbiBhIHNjc2kgaW8gdGltZXIgZmlyZXMuIFRoZSByZXR1cm4gdmFsdWUgdGVsbHMgdGhlCisJICogdGltZXIgcm91dGluZSBob3cgdG8gZmluaXNoIHRoZSBpbyB0aW1lb3V0IGhhbmRsaW5nOgorCSAqIEVIX0hBTkRMRUQ6CQlJIGZpeGVkIHRoZSBlcnJvciwgcGxlYXNlIGNvbXBsZXRlIHRoZSBjb21tYW5kCisJICogRUhfUkVTRVRfVElNRVI6CUkgbmVlZCBtb3JlIHRpbWUsIHJlc2V0IHRoZSB0aW1lciBhbmQKKwkgKgkJCWJlZ2luIGNvdW50aW5nIGFnYWluCisJICogRUhfTk9UX0hBTkRMRUQJQmVnaW4gbm9ybWFsIGVycm9yIHJlY292ZXJ5CisJICovCisJZW51bSBzY3NpX2VoX3RpbWVyX3JldHVybiAoKiBlaF90aW1lZF9vdXQpKHN0cnVjdCBzY3NpX2NtbmQgKik7CiB9OwogCiAjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19zaG9zdCh0YykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5oCmluZGV4IGI5MTQwMGIuLjkzY2ZiNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAlTQVNfU0FUQV9QT1JUX1NFTEVDVE9SLAogCVNBU19MSU5LX1JBVEVfMV81X0dCUFMsCiAJU0FTX0xJTktfUkFURV8zXzBfR0JQUywKKwlTQVNfTElOS19SQVRFXzZfMF9HQlBTLAogCVNBU19MSU5LX1ZJUlRVQUwsCiB9OwogCkBAIC04OSwxMSArOTAsNDUgQEAKIAlkZXZfdG9fcnBoeSgoY2RldiktPmRldikKICNkZWZpbmUgcnBoeV90b19zaG9zdChycGh5KSBcCiAJZGV2X3RvX3Nob3N0KChycGh5KS0+ZGV2LnBhcmVudCkKKyNkZWZpbmUgdGFyZ2V0X3RvX3JwaHkodGFyZykgXAorCWRldl90b19ycGh5KCh0YXJnKS0+ZGV2LnBhcmVudCkKIAorc3RydWN0IHNhc19lbmRfZGV2aWNlIHsKKwlzdHJ1Y3Qgc2FzX3JwaHkJCXJwaHk7CisJLyogZmxhZ3MgKi8KKwl1bnNpZ25lZAkJcmVhZHlfbGVkX21lYW5pbmc6MTsKKwkvKiBwYXJhbWV0ZXJzICovCisJdTE2CQkJSV9UX25leHVzX2xvc3NfdGltZW91dDsKKwl1MTYJCQlpbml0aWF0b3JfcmVzcG9uc2VfdGltZW91dDsKK307CisjZGVmaW5lIHJwaHlfdG9fZW5kX2RldmljZShyKSBcCisJY29udGFpbmVyX29mKChyKSwgc3RydWN0IHNhc19lbmRfZGV2aWNlLCBycGh5KQorCitzdHJ1Y3Qgc2FzX2V4cGFuZGVyX2RldmljZSB7CisJaW50ICAgIGxldmVsOworCisJI2RlZmluZSBTQVNfRVhQQU5ERVJfVkVORE9SX0lEX0xFTgk4CisJY2hhciAgIHZlbmRvcl9pZFtTQVNfRVhQQU5ERVJfVkVORE9SX0lEX0xFTisxXTsKKwkjZGVmaW5lIFNBU19FWFBBTkRFUl9QUk9EVUNUX0lEX0xFTgkxNgorCWNoYXIgICBwcm9kdWN0X2lkW1NBU19FWFBBTkRFUl9QUk9EVUNUX0lEX0xFTisxXTsKKwkjZGVmaW5lIFNBU19FWFBBTkRFUl9QUk9EVUNUX1JFVl9MRU4JNAorCWNoYXIgICBwcm9kdWN0X3JldltTQVNfRVhQQU5ERVJfUFJPRFVDVF9SRVZfTEVOKzFdOworCSNkZWZpbmUgU0FTX0VYUEFOREVSX0NPTVBPTkVOVF9WRU5ET1JfSURfTEVOCTgKKwljaGFyICAgY29tcG9uZW50X3ZlbmRvcl9pZFtTQVNfRVhQQU5ERVJfQ09NUE9ORU5UX1ZFTkRPUl9JRF9MRU4rMV07CisJdTE2ICAgIGNvbXBvbmVudF9pZDsKKwl1OCAgICAgY29tcG9uZW50X3JldmlzaW9uX2lkOworCisJc3RydWN0IHNhc19ycGh5CQlycGh5OworCit9OworI2RlZmluZSBycGh5X3RvX2V4cGFuZGVyX2RldmljZShyKSBcCisJY29udGFpbmVyX29mKChyKSwgc3RydWN0IHNhc19leHBhbmRlcl9kZXZpY2UsIHJwaHkpCiAKIC8qIFRoZSBmdW5jdGlvbnMgYnkgd2hpY2ggdGhlIHRyYW5zcG9ydCBjbGFzcyBhbmQgdGhlIGRyaXZlciBjb21tdW5pY2F0ZSAqLwogc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSB7CiAJaW50ICgqZ2V0X2xpbmtlcnJvcnMpKHN0cnVjdCBzYXNfcGh5ICopOworCWludCAoKmdldF9lbmNsb3N1cmVfaWRlbnRpZmllcikoc3RydWN0IHNhc19ycGh5ICosIHU2NCAqKTsKKwlpbnQgKCpnZXRfYmF5X2lkZW50aWZpZXIpKHN0cnVjdCBzYXNfcnBoeSAqKTsKIAlpbnQgKCpwaHlfcmVzZXQpKHN0cnVjdCBzYXNfcGh5ICosIGludCk7CiB9OwogCkBAIC0xMDYsNyArMTQxLDggQEAKIGV4dGVybiB2b2lkIHNhc19waHlfZGVsZXRlKHN0cnVjdCBzYXNfcGh5ICopOwogZXh0ZXJuIGludCBzY3NpX2lzX3Nhc19waHkoY29uc3Qgc3RydWN0IGRldmljZSAqKTsKIAotZXh0ZXJuIHN0cnVjdCBzYXNfcnBoeSAqc2FzX3JwaHlfYWxsb2Moc3RydWN0IHNhc19waHkgKik7CitleHRlcm4gc3RydWN0IHNhc19ycGh5ICpzYXNfZW5kX2RldmljZV9hbGxvYyhzdHJ1Y3Qgc2FzX3BoeSAqKTsKK2V4dGVybiBzdHJ1Y3Qgc2FzX3JwaHkgKnNhc19leHBhbmRlcl9hbGxvYyhzdHJ1Y3Qgc2FzX3BoeSAqLCBlbnVtIHNhc19kZXZpY2VfdHlwZSk7CiB2b2lkIHNhc19ycGh5X2ZyZWUoc3RydWN0IHNhc19ycGh5ICopOwogZXh0ZXJuIGludCBzYXNfcnBoeV9hZGQoc3RydWN0IHNhc19ycGh5ICopOwogZXh0ZXJuIHZvaWQgc2FzX3JwaHlfZGVsZXRlKHN0cnVjdCBzYXNfcnBoeSAqKTsKQEAgLTExNSw1ICsxNTEsMTcgQEAKIGV4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKgogc2FzX2F0dGFjaF90cmFuc3BvcnQoc3RydWN0IHNhc19mdW5jdGlvbl90ZW1wbGF0ZSAqKTsKIGV4dGVybiB2b2lkIHNhc19yZWxlYXNlX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKik7CitpbnQgc2FzX3JlYWRfcG9ydF9tb2RlX3BhZ2Uoc3RydWN0IHNjc2lfZGV2aWNlICopOworCitzdGF0aWMgaW5saW5lIGludAorc2NzaV9pc19zYXNfZXhwYW5kZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc2FzX3JwaHkgKnJwaHk7CisJaWYgKCFzY3NpX2lzX3Nhc19ycGh5KGRldikpCisJCXJldHVybiAwOworCXJwaHkgPSBkZXZfdG9fcnBoeShkZXYpOworCXJldHVybiBycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSA9PSBTQVNfRkFOT1VUX0VYUEFOREVSX0RFVklDRSB8fAorCQlycGh5LT5pZGVudGlmeS5kZXZpY2VfdHlwZSA9PSBTQVNfRURHRV9FWFBBTkRFUl9ERVZJQ0U7Cit9CiAKICNlbmRpZiAvKiBTQ1NJX1RSQU5TUE9SVF9TQVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCmluZGV4IGZiNWEyZmYuLjVlMWQ2MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKQEAgLTE0OCw1ICsxNDgsOSBAQAogdm9pZCBzcGlfZHZfZGV2aWNlKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKIHZvaWQgc3BpX2Rpc3BsYXlfeGZlcl9hZ3JlZW1lbnQoc3RydWN0IHNjc2lfdGFyZ2V0ICopOwogaW50IHNwaV9wcmludF9tc2coY29uc3QgdW5zaWduZWQgY2hhciAqKTsKK2ludCBzcGlfcG9wdWxhdGVfd2lkdGhfbXNnKHVuc2lnbmVkIGNoYXIgKm1zZywgaW50IHdpZHRoKTsKK2ludCBzcGlfcG9wdWxhdGVfc3luY19tc2codW5zaWduZWQgY2hhciAqbXNnLCBpbnQgcGVyaW9kLCBpbnQgb2Zmc2V0KTsKK2ludCBzcGlfcG9wdWxhdGVfcHByX21zZyh1bnNpZ25lZCBjaGFyICptc2csIGludCBwZXJpb2QsIGludCBvZmZzZXQsIGludCB3aWR0aCwKKwkJaW50IG9wdGlvbnMpOwogCiAjZW5kaWYgLyogU0NTSV9UUkFOU1BPUlRfU1BJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWM5N19jb2RlYy5oIGIvaW5jbHVkZS9zb3VuZC9hYzk3X2NvZGVjLmgKaW5kZXggYjBiM2VhNy4uYjQ1YTczNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9hYzk3X2NvZGVjLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hYzk3X2NvZGVjLmgKQEAgLTQzMyw2ICs0MzMsMTIgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2M7CiB9OwogCisvKiBzdGF0aWMgcmVzb2x1dGlvbiB0YWJsZSAqLworc3RydWN0IHNuZF9hYzk3X3Jlc190YWJsZSB7CisJdW5zaWduZWQgc2hvcnQgcmVnOwkvKiByZWdpc3RlciAqLworCXVuc2lnbmVkIHNob3J0IGJpdHM7CS8qIHJlc29sdXRpb24gYml0bWFzayAqLworfTsKKwogc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIHsKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAJdm9pZCAoKnByaXZhdGVfZnJlZSkgKHN0cnVjdCBzbmRfYWM5NyAqYWM5Nyk7CkBAIC00NDAsOCArNDQ2LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBudW07CS8qIG51bWJlciBvZiBjb2RlYzogMCA9IHByaW1hcnksIDEgPSBzZWNvbmRhcnkgKi8KIAl1bnNpZ25lZCBzaG9ydCBhZGRyOwkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGNvZGVjIFswLTNdICovCiAJdW5zaWduZWQgaW50IHNjYXBzOwkvKiBkcml2ZXIgY2FwYWJpbGl0aWVzICovCi0JdW5zaWduZWQgaW50IGxpbWl0ZWRfcmVnczsgLyogYWxsb3cgbGltaXRlZCByZWdpc3RlcnMgb25seSAqLwotCURFQ0xBUkVfQklUTUFQKHJlZ19hY2Nlc3NlZCwgMHg4MCk7IC8qIGJpdCBmbGFncyAqLworCWNvbnN0IHN0cnVjdCBzbmRfYWM5N19yZXNfdGFibGUgKnJlc190YWJsZTsJLyogc3RhdGljIHJlc29sdXRpb24gKi8KIH07CiAKIHN0cnVjdCBzbmRfYWM5NyB7CkBAIC00NTYsMjAgKzQ2MSwyMCBAQAogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19yZWdzOwogCXVuc2lnbmVkIHNob3J0IHN1YnN5c3RlbV92ZW5kb3I7CiAJdW5zaWduZWQgc2hvcnQgc3Vic3lzdGVtX2RldmljZTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHJlZ19tdXRleDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHBhZ2VfbXV0ZXg7CS8qIG11dGV4IGZvciBBRDE4eHggbXVsdGktY29kZWNzIGFuZCBwYWdpbmcgKDIuMykgKi8KKwlzdHJ1Y3QgbXV0ZXggcmVnX211dGV4OworCXN0cnVjdCBtdXRleCBwYWdlX211dGV4OwkvKiBtdXRleCBmb3IgQUQxOHh4IG11bHRpLWNvZGVjcyBhbmQgcGFnaW5nICgyLjMpICovCiAJdW5zaWduZWQgc2hvcnQgbnVtOwkvKiBudW1iZXIgb2YgY29kZWM6IDAgPSBwcmltYXJ5LCAxID0gc2Vjb25kYXJ5ICovCiAJdW5zaWduZWQgc2hvcnQgYWRkcjsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBjb2RlYyBbMC0zXSAqLwogCXVuc2lnbmVkIGludCBpZDsJLyogaWRlbnRpZmljYXRpb24gb2YgY29kZWMgKi8KIAl1bnNpZ25lZCBzaG9ydCBjYXBzOwkvKiBjYXBhYmlsaXRpZXMgKHJlZ2lzdGVyIDApICovCiAJdW5zaWduZWQgc2hvcnQgZXh0X2lkOwkvKiBleHRlbmRlZCBmZWF0dXJlIGlkZW50aWZpY2F0aW9uIChyZWdpc3RlciAyOCkgKi8KIAl1bnNpZ25lZCBzaG9ydCBleHRfbWlkOwkvKiBleHRlbmRlZCBtb2RlbSBJRCAocmVnaXN0ZXIgM0MpICovCisJY29uc3Qgc3RydWN0IHNuZF9hYzk3X3Jlc190YWJsZSAqcmVzX3RhYmxlOwkvKiBzdGF0aWMgcmVzb2x1dGlvbiAqLwogCXVuc2lnbmVkIGludCBzY2FwczsJLyogZHJpdmVyIGNhcGFiaWxpdGllcyAqLwogCXVuc2lnbmVkIGludCBmbGFnczsJLyogc3BlY2lmaWMgY29kZSAqLwogCXVuc2lnbmVkIGludCByYXRlc1s2XTsJLyogc2VlIEFDOTdfUkFURVNfKiBkZWZpbmVzICovCiAJdW5zaWduZWQgaW50IHNwZGlmX3N0YXR1czsKIAl1bnNpZ25lZCBzaG9ydCByZWdzWzB4ODBdOyAvKiByZWdpc3RlciBjYWNoZSAqLwotCXVuc2lnbmVkIGludCBsaW1pdGVkX3JlZ3M7IC8qIGFsbG93IGxpbWl0ZWQgcmVnaXN0ZXJzIG9ubHkgKi8KIAlERUNMQVJFX0JJVE1BUChyZWdfYWNjZXNzZWQsIDB4ODApOyAvKiBiaXQgZmxhZ3MgKi8KIAl1bmlvbiB7CQkJLyogdmVuZG9yIHNwZWNpZmljIGNvZGUgKi8KIAkJc3RydWN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWQxODQ4LmggYi9pbmNsdWRlL3NvdW5kL2FkMTg0OC5oCmluZGV4IDFhMjc1OWYuLjU3YWYxZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYWQxODQ4LmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hZDE4NDguaApAQCAtMTU0LDcgKzE1NCw3IEBACiAjZW5kaWYKIAogCXNwaW5sb2NrX3QgcmVnX2xvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX211dGV4OworCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwogfTsKIAogLyogZXhwb3J0ZWQgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2FrNDUzMV9jb2RlYy5oIGIvaW5jbHVkZS9zb3VuZC9hazQ1MzFfY29kZWMuaAppbmRleCBlZGYwNDA3Li5mYjMwZmFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FrNDUzMV9jb2RlYy5oCisrKyBiL2luY2x1ZGUvc291bmQvYWs0NTMxX2NvZGVjLmgKQEAgLTcxLDcgKzcxLDcgQEAKIAl2b2lkICgqcHJpdmF0ZV9mcmVlKSAoc3RydWN0IHNuZF9hazQ1MzEgKmFrNDUzMSk7CiAJLyogLS0tICovCiAJdW5zaWduZWQgY2hhciByZWdzWzB4MjBdOwotCXN0cnVjdCBzZW1hcGhvcmUgcmVnX211dGV4OworCXN0cnVjdCBtdXRleCByZWdfbXV0ZXg7CiB9OwogCiBpbnQgc25kX2FrNDUzMV9taXhlcihzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfYWs0NTMxICpfYWs0NTMxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb3JlLmggYi9pbmNsdWRlL3NvdW5kL2NvcmUuaAppbmRleCAzMDkzZTNkLi4xNDRiZGMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvcmUuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvcmUuaApAQCAtMjMsNyArMjMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkJLyogd2FrZV91cCgpICovCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgkJLyogc3RydWN0IHNlbWFwaG9yZSAqLworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CQkvKiBzdHJ1Y3QgbXV0ZXggKi8KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgkJLyogc3RydWN0IHJ3X3NlbWFwaG9yZSAqLwogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgkJLyogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKi8KICNpbmNsdWRlIDxsaW51eC9wbS5oPgkJCS8qIHBtX21lc3NhZ2VfdCAqLwpAQCAtMTM3LDcgKzEzNyw3IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAl1bnNpZ25lZCBpbnQgcG93ZXJfc3RhdGU7CS8qIHBvd2VyIHN0YXRlICovCi0Jc3RydWN0IHNlbWFwaG9yZSBwb3dlcl9sb2NrOwkvKiBwb3dlciBsb2NrICovCisJc3RydWN0IG11dGV4IHBvd2VyX2xvY2s7CS8qIHBvd2VyIGxvY2sgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBwb3dlcl9zbGVlcDsKICNlbmRpZgogCkBAIC0xNTAsMTIgKzE1MCwxMiBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGlubGluZSB2b2lkIHNuZF9wb3dlcl9sb2NrKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKIHsKLQlkb3duKCZjYXJkLT5wb3dlcl9sb2NrKTsKKwltdXRleF9sb2NrKCZjYXJkLT5wb3dlcl9sb2NrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNuZF9wb3dlcl91bmxvY2soc3RydWN0IHNuZF9jYXJkICpjYXJkKQogewotCXVwKCZjYXJkLT5wb3dlcl9sb2NrKTsKKwltdXRleF91bmxvY2soJmNhcmQtPnBvd2VyX2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzbmRfcG93ZXJfZ2V0X3N0YXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvY3M0MjMxLmggYi9pbmNsdWRlL3NvdW5kL2NzNDIzMS5oCmluZGV4IGFjNmE1ZDguLjYwYjViOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY3M0MjMxLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9jczQyMzEuaApAQCAtMjQ4LDggKzI0OCw4IEBACiAJdW5zaWduZWQgaW50IGNfZG1hX3NpemU7CiAKIAlzcGlubG9ja190IHJlZ19sb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgbWNlX211dGV4OwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggbWNlX211dGV4OworCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwogCiAJaW50ICgqcmF0ZV9jb25zdHJhaW50KSAoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CiAJdm9pZCAoKnNldF9wbGF5YmFja19mb3JtYXQpIChzdHJ1Y3Qgc25kX2NzNDIzMSAqY2hpcCwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMsIHVuc2lnbmVkIGNoYXIgcGRmcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eC5oIGIvaW5jbHVkZS9zb3VuZC9jczQ2eHguaAppbmRleCAxOTliNTA5Li44MGIyOTc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NzNDZ4eC5oCisrKyBiL2luY2x1ZGUvc291bmQvY3M0Nnh4LmgKQEAgLTE3MTEsNyArMTcxMSw3IEBACiAJaW50IGN1cnJlbnRfZ3BpbzsKICNlbmRpZgogI2lmZGVmIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNwb3NfbXV0ZXg7CisJc3RydWN0IG11dGV4IHNwb3NfbXV0ZXg7CiAKIAlzdHJ1Y3QgZHNwX3Nwb3NfaW5zdGFuY2UgKiBkc3Bfc3Bvc19pbnN0YW5jZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9lbXUxMGsxLmggYi9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaAppbmRleCA5NTFlNDBkLi4xODZlMDBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaAorKysgYi9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS1pbmRpcmVjdC5oPgogI2luY2x1ZGUgPHNvdW5kL3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBERUZJTkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMDIyLDcgKzEwMjMsNyBAQAogCWludCBncHJfc2l6ZTsJCQkvKiBzaXplIG9mIGFsbG9jYXRlZCBHUFIgY29udHJvbHMgKi8KIAlpbnQgZ3ByX2NvdW50OwkJCS8qIGNvdW50IG9mIHVzZWQga2NvbnRyb2xzICovCiAJc3RydWN0IGxpc3RfaGVhZCBncHJfY3RsOwkvKiBHUFIgY29udHJvbHMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY20gcGNtWzhdOwogCXNwaW5sb2NrX3QgaXJxX2xvY2s7CiAJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9pcnEgKmlycV9oYW5kbGVyczsKQEAgLTExMjIsNyArMTEyMyw2IEBACiAJc3BpbmxvY2tfdCByZWdfbG9jazsKIAlzcGlubG9ja190IGVtdV9sb2NrOwogCXNwaW5sb2NrX3Qgdm9pY2VfbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHB0Yl9sb2NrOwogCiAJc3RydWN0IHNuZF9lbXUxMGsxX3ZvaWNlIHZvaWNlc1tOVU1fR107CiAJc3RydWN0IHNuZF9lbXUxMGsxX3ZvaWNlIHAxNnZfdm9pY2VzWzRdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9lbXV4X3N5bnRoLmggYi9pbmNsdWRlL3NvdW5kL2VtdXhfc3ludGguaAppbmRleCBiMmQ2YjJhLi5kOGNiNTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2VtdXhfc3ludGguaAorKysgYi9pbmNsdWRlL3NvdW5kL2VtdXhfc3ludGguaApAQCAtMTEzLDcgKzExMyw3IEBACiAJc3RydWN0IHNuZF9lbXV4X3ZvaWNlICp2b2ljZXM7CS8qIFZvaWNlcyAoRU1VICdjaGFubmVsJykgKi8KIAlpbnQgdXNlX3RpbWU7CS8qIGFsbG9jYXRpb24gY291bnRlciAqLwogCXNwaW5sb2NrX3Qgdm9pY2VfbG9jazsJLyogTG9jayBmb3Igdm9pY2UgYWNjZXNzICovCi0Jc3RydWN0IHNlbWFwaG9yZSByZWdpc3Rlcl9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggcmVnaXN0ZXJfbXV0ZXg7CiAJaW50IGNsaWVudDsJCS8qIEZvciB0aGUgc2VxdWVuY2VyIGNsaWVudCAqLwogCWludCBwb3J0c1tTTkRSVl9FTVVYX01BWF9QT1JUU107CS8qIFRoZSBwb3J0cyBmb3IgdGhpcyBkZXZpY2UgKi8KIAlzdHJ1Y3Qgc25kX2VtdXhfcG9ydCAqcG9ydHB0cnNbU05EUlZfRU1VWF9NQVhfUE9SVFNdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9ndXMuaCBiL2luY2x1ZGUvc291bmQvZ3VzLmgKaW5kZXggNjNkYTUwZi4uNjhhNjY0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9ndXMuaAorKysgYi9pbmNsdWRlL3NvdW5kL2d1cy5oCkBAIC0yMDksNyArMjA5LDcgQEAKIAlzdHJ1Y3Qgc25kX2dmMV9iYW5rX2luZm8gYmFua3NfMTZbNF07CiAJc3RydWN0IHNuZF9nZjFfbWVtX2Jsb2NrICpmaXJzdDsKIAlzdHJ1Y3Qgc25kX2dmMV9tZW1fYmxvY2sgKmxhc3Q7Ci0Jc3RydWN0IHNlbWFwaG9yZSBtZW1vcnlfbXV0ZXg7CisJc3RydWN0IG11dGV4IG1lbW9yeV9tdXRleDsKIH07CiAKIHN0cnVjdCBzbmRfZ2YxX2RtYV9ibG9jayB7CkBAIC00NjcsOCArNDY3LDggQEAKIAlzcGlubG9ja190IGRtYV9sb2NrOwogCXNwaW5sb2NrX3QgcGNtX3ZvbHVtZV9sZXZlbF9sb2NrOwogCXNwaW5sb2NrX3QgdWFydF9jbWRfbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGRtYV9tdXRleDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHJlZ2lzdGVyX211dGV4OworCXN0cnVjdCBtdXRleCBkbWFfbXV0ZXg7CisJc3RydWN0IG11dGV4IHJlZ2lzdGVyX211dGV4OwogfTsKIAogLyogSS9PIGZ1bmN0aW9ucyBmb3IgR0YxL0ludGVyV2F2ZSBjaGlwIC0gZ3VzX2lvLmMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaHdkZXAuaCBiL2luY2x1ZGUvc291bmQvaHdkZXAuaAppbmRleCBjNjc5ZTViLi45NGMzODdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2h3ZGVwLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9od2RlcC5oCkBAIC02MCw3ICs2MCw3IEBACiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCXZvaWQgKCpwcml2YXRlX2ZyZWUpIChzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCk7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fbXV0ZXg7CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAJaW50IHVzZWQ7CiAJdW5zaWduZWQgaW50IGRzcF9sb2FkZWQ7CiAJdW5zaWduZWQgaW50IGV4Y2x1c2l2ZTogMTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaTJjLmggYi9pbmNsdWRlL3NvdW5kL2kyYy5oCmluZGV4IDgxZWIyM2UuLmQxMjVmZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvaTJjLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9pMmMuaApAQCAtNTUsNyArNTUsNyBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsJLyogY2FyZCB3aGljaCBJMkMgYmVsb25ncyB0byAqLwogCWNoYXIgbmFtZVszMl07CQkvKiBzb21lIHVzZWZ1bCBsYWJlbCAqLwogCi0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrX211dGV4OworCXN0cnVjdCBtdXRleCBsb2NrX211dGV4OwogCiAJc3RydWN0IHNuZF9pMmNfYnVzICptYXN0ZXI7CS8qIG1hc3RlciBidXMgd2hlbiBTQ0svU0NMIGlzIHNoYXJlZCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgYnVzZXM7CS8qIG1hc3Rlcjogc2xhdmUgYnVzZXMgc2hhcmluZyBTQ0svU0NMLCBzbGF2ZTogbGluayBsaXN0ICovCkBAIC04NCwxNyArODQsMTcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfaTJjX2xvY2soc3RydWN0IHNuZF9pMmNfYnVzICpidXMpCiB7CiAJaWYgKGJ1cy0+bWFzdGVyKQotCQlkb3duKCZidXMtPm1hc3Rlci0+bG9ja19tdXRleCk7CisJCW11dGV4X2xvY2soJmJ1cy0+bWFzdGVyLT5sb2NrX211dGV4KTsKIAllbHNlCi0JCWRvd24oJmJ1cy0+bG9ja19tdXRleCk7CisJCW11dGV4X2xvY2soJmJ1cy0+bG9ja19tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfaTJjX3VubG9jayhzdHJ1Y3Qgc25kX2kyY19idXMgKmJ1cykKIHsKIAlpZiAoYnVzLT5tYXN0ZXIpCi0JCXVwKCZidXMtPm1hc3Rlci0+bG9ja19tdXRleCk7CisJCW11dGV4X3VubG9jaygmYnVzLT5tYXN0ZXItPmxvY2tfbXV0ZXgpOwogCWVsc2UKLQkJdXAoJmJ1cy0+bG9ja19tdXRleCk7CisJCW11dGV4X3VubG9jaygmYnVzLT5sb2NrX211dGV4KTsKIH0KIAogaW50IHNuZF9pMmNfc2VuZGJ5dGVzKHN0cnVjdCBzbmRfaTJjX2RldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBjaGFyICpieXRlcywgaW50IGNvdW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvaW5mby5oIGIvaW5jbHVkZS9zb3VuZC9pbmZvLmgKaW5kZXggOGVhNWM3NC4uZjIzZDgzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9pbmZvLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9pbmZvLmgKQEAgLTg0LDcgKzg0LDcgQEAKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAJdm9pZCAoKnByaXZhdGVfZnJlZSkoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSk7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwotCXN0cnVjdCBzZW1hcGhvcmUgYWNjZXNzOworCXN0cnVjdCBtdXRleCBhY2Nlc3M7CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX09TU0VNVUwpICYmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL21peGVyX29zcy5oIGIvaW5jbHVkZS9zb3VuZC9taXhlcl9vc3MuaAppbmRleCBjYTViNDgyLi4xOTdiOWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL21peGVyX29zcy5oCisrKyBiL2luY2x1ZGUvc291bmQvbWl4ZXJfb3NzLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAkJCSAgdW5zaWduZWQgaW50IGFjdGl2ZV9pbmRleCk7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhX3JlY3NyYzsKIAl2b2lkICgqcHJpdmF0ZV9mcmVlX3JlY3NyYykoc3RydWN0IHNuZF9taXhlcl9vc3MgKm1peGVyKTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHJlZ19tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggcmVnX211dGV4OwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19lbnRyeTsKIAlpbnQgb3NzX2Rldl9hbGxvYzsKIAkvKiAtLS0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvb3BsMy5oIGIvaW5jbHVkZS9zb3VuZC9vcGwzLmgKaW5kZXggODMzOTI2NC4uODJmZGIwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9vcGwzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9vcGwzLmgKQEAgLTUzLDYgKzUzLDcgQEAKIAogI2luY2x1ZGUgImRyaXZlci5oIgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJod2RlcC5oIgogI2luY2x1ZGUgInRpbWVyLmgiCkBAIC0yMjksNyArMjMwLDYgQEAKICNkZWZpbmUgT1BMM19IV19PUEwzX0NTCQkweDAzMDIJLyogQ1M0MjMyL0NTNDIzNisgKi8KICNkZWZpbmUgT1BMM19IV19PUEwzX0ZNODAxCTB4MDMwMwkvKiBGTTgwMSAqLwogI2RlZmluZSBPUEwzX0hXX09QTDNfQ1M0MjgxCTB4MDMwNAkvKiBDUzQyODEgKi8KLSNkZWZpbmUgT1BMM19IV19PUEwzX1BDOTgJMHgwMzA1CS8qIFBDOTgwMCAqLwogI2RlZmluZSBPUEwzX0hXX09QTDQJCTB4MDQwMAkvKiBZTUYyNzhCL1lNRjI5NSAqLwogI2RlZmluZSBPUEwzX0hXX09QTDRfTUwJCTB4MDQwMQkvKiBZTUY3MDQvWU1GNzIxICovCiAjZGVmaW5lIE9QTDNfSFdfTUFTSwkJMHhmZjAwCkBAIC0zMTIsNyArMzEyLDcgQEAKIAlpbnQgc3lzX3RpbWVyX3N0YXR1czsJCS8qIHN5c3RlbSB0aW1lciBydW4gc3RhdHVzICovCiAJc3BpbmxvY2tfdCBzeXNfdGltZXJfbG9jazsJLyogTG9jayBmb3Igc3lzdGVtIHRpbWVyIGFjY2VzcyAqLwogI2VuZGlmCi0Jc3RydWN0IHNlbWFwaG9yZSBhY2Nlc3NfbXV0ZXg7CS8qIGxvY2tpbmcgKi8KKwlzdHJ1Y3QgbXV0ZXggYWNjZXNzX211dGV4OwkvKiBsb2NraW5nICovCiB9OwogCiAvKiBvcGwzLmMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtLmggYi9pbmNsdWRlL3NvdW5kL3BjbS5oCmluZGV4IDMxNDI2OGEuLjE1Yjg4NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcGNtLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY20uaApAQCAtNDIwLDcgKzQyMCw3IEBACiAJY2hhciBpZFs2NF07CiAJY2hhciBuYW1lWzgwXTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdHIgc3RyZWFtc1syXTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fbXV0ZXg7CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwogCXZvaWQgKnByaXZhdGVfZGF0YTsKIAl2b2lkICgqcHJpdmF0ZV9mcmVlKSAoc3RydWN0IHNuZF9wY20gKnBjbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaCBiL2luY2x1ZGUvc291bmQvcGNtX29zcy5oCmluZGV4IGZkZGFkZGQuLmJmZjA3NzhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbV9vc3MuaApAQCAtNTYsOCArNTYsMTAgQEAKIAlzaXplX3QgbW1hcF9ieXRlczsKIAljaGFyICpidWZmZXI7CQkJCS8qIHZtYWxsb2NhdGVkIHBlcmlvZCAqLwogCXNpemVfdCBidWZmZXJfdXNlZDsJCQkvKiB1c2VkIGxlbmd0aCBmcm9tIHBlcmlvZCBidWZmZXIgKi8KKyNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luX2ZpcnN0OwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luX2xhc3Q7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgcHJldl9od19wdHJfaW50ZXJydXB0OwogfTsKIApAQCAtNzMsNyArNzUsNyBAQAogCiBzdHJ1Y3Qgc25kX3BjbV9vc3Nfc3RyZWFtIHsKIAlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwX2xpc3Q7CS8qIHNldHVwIGxpc3QgKi8KLSAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzZXR1cF9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggc2V0dXBfbXV0ZXg7CiAJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpwcm9jX2VudHJ5OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmggYi9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaAppbmRleCBkMTliZGRmLi41ODRlNzNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaAorKysgYi9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX1NFUVVFTkNFUikgfHwgZGVmaW5lZChDT05GSUdfU05EX1NFUVVFTkNFUl9NT0RVTEUpCiAjaW5jbHVkZSAic2VxX2RldmljZS5oIgpAQCAtMTMwLDcgKzEzMCw3IEBACiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCXZvaWQgKCpwcml2YXRlX2ZyZWUpIChzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpKTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CiAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmRldjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2IxNl9jc3AuaCBiL2luY2x1ZGUvc291bmQvc2IxNl9jc3AuaAppbmRleCAzYjQ0ZDRiLi5jYWY2ZmUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NiMTZfY3NwLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zYjE2X2NzcC5oCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpxc291bmRfc3dpdGNoOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnFzb3VuZF9zcGFjZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgYWNjZXNzX211dGV4OwkvKiBsb2NraW5nICovCisJc3RydWN0IG11dGV4IGFjY2Vzc19tdXRleDsJLyogbG9ja2luZyAqLwogfTsKIAogaW50IHNuZF9zYl9jc3BfbmV3KHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfaHdkZXAgKiogcmh3ZGVwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2VxX2luc3RyLmggYi9pbmNsdWRlL3NvdW5kL3NlcV9pbnN0ci5oCmluZGV4IGRiNzY0ZjAuLmYyZGIwM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc2VxX2luc3RyLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zZXFfaW5zdHIuaApAQCAtNjQsNyArNjQsNyBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOwogCXNwaW5sb2NrX3Qgb3BzX2xvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcHNfbXV0ZXg7CisJc3RydWN0IG11dGV4IG9wc19tdXRleDsKIAl1bnNpZ25lZCBsb25nIG9wc19mbGFnczsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc291bmRmb250LmggYi9pbmNsdWRlL3NvdW5kL3NvdW5kZm9udC5oCmluZGV4IDYxYTAxMGMuLmY5NWQ5OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc291bmRmb250LmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb3VuZGZvbnQuaApAQCAtOTMsNyArOTMsNyBAQAogCWludCBzYW1wbGVfbG9ja2VkOwkvKiBsb2NrZWQgdGltZSBmb3Igc2FtcGxlICovCiAJc3RydWN0IHNuZF9zZl9jYWxsYmFjayBjYWxsYmFjazsJLyogY2FsbGJhY2sgZnVuY3Rpb25zICovCiAJaW50IHByZXNldHNfbG9ja2VkOwotCXN0cnVjdCBzZW1hcGhvcmUgcHJlc2V0c19tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggcHJlc2V0c19tdXRleDsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHNuZF91dGlsX21lbWhkciAqbWVtaGRyOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdXRpbF9tZW0uaCBiL2luY2x1ZGUvc291bmQvdXRpbF9tZW0uaAppbmRleCA2OTk0NGJiYi4uYTFmYjcwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC91dGlsX21lbS5oCisrKyBiL2luY2x1ZGUvc291bmQvdXRpbF9tZW0uaApAQCAtMSw1ICsxLDcgQEAKICNpZm5kZWYgX19TT1VORF9VVElMX01FTV9ICiAjZGVmaW5lIF9fU09VTkRfVVRJTF9NRU1fSAorCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFRha2FzaGkgSXdhaSA8dGl3YWlAc3VzZS5kZT4KICAqCkBAIC00MCw3ICs0Miw3IEBACiAJaW50IG5ibG9ja3M7CQkJLyogIyBvZiBhbGxvY2F0ZWQgYmxvY2tzICovCiAJdW5zaWduZWQgaW50IHVzZWQ7CQkvKiB1c2VkIG1lbW9yeSBzaXplICovCiAJaW50IGJsb2NrX2V4dHJhX3NpemU7CQkvKiBleHRyYSBkYXRhIHNpemUgb2YgY2h1bmsgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGJsb2NrX211dGV4OwkvKiBsb2NrICovCisJc3RydWN0IG11dGV4IGJsb2NrX211dGV4OwkvKiBsb2NrICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmggYi9pbmNsdWRlL3NvdW5kL3ZlcnNpb24uaAppbmRleCA5MTlkYTBkZC4uNGYwZTY1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTEsMyArMSwzIEBACiAvKiBpbmNsdWRlL3ZlcnNpb24uaC4gIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLwotI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xMXJjMiIKLSNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIgKFdlZCBKYW4gMDQgMDg6NTc6MjAgMjAwNiBVVEMpIgorI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xMXJjNCIKKyNkZWZpbmUgQ09ORklHX1NORF9EQVRFICIgKFdlZCBNYXIgMjIgMTA6Mjc6MjQgMjAwNiBVVEMpIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC92eF9jb3JlLmggYi9pbmNsdWRlL3NvdW5kL3Z4X2NvcmUuaAppbmRleCA1ZmQ2ZjMzLi45ODIxYTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3Z4X2NvcmUuaAorKysgYi9pbmNsdWRlL3NvdW5kL3Z4X2NvcmUuaApAQCAtMjA2LDcgKzIwNiw3IEBACiAJaW50IGF1ZGlvX21vbml0b3JbNF07CQkJLyogcGxheWJhY2sgaHctbW9uaXRvciBsZXZlbCAqLwogCXVuc2lnbmVkIGNoYXIgYXVkaW9fbW9uaXRvcl9hY3RpdmVbNF07CS8qIHBsYXliYWNrIGh3LW1vbml0b3IgbXV0ZS91bm11dGUgKi8KIAotCXN0cnVjdCBzZW1hcGhvcmUgbWl4ZXJfbXV0ZXg7CisJc3RydWN0IG11dGV4IG1peGVyX211dGV4OwogCiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZVs0XTsgLyogbG9hZGVkIGZpcm13YXJlIGRhdGEgKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3ltZnBjaS5oIGIvaW5jbHVkZS9zb3VuZC95bWZwY2kuaAppbmRleCBkNTY3YmZkLi5kNDFjZGE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3ltZnBjaS5oCisrKyBiL2luY2x1ZGUvc291bmQveW1mcGNpLmgKQEAgLTI2OSw5ICsyNjksMTAgQEAKIAllbnVtIHNuZF95bWZwY2lfcGNtX3R5cGUgdHlwZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3ltZnBjaV92b2ljZSAqdm9pY2VzWzJdOwkvKiBwbGF5YmFjayBvbmx5ICovCi0JdW5zaWduZWQgaW50IHJ1bm5pbmc6IDE7Ci0JdW5zaWduZWQgaW50IG91dHB1dF9mcm9udDogMTsKLQl1bnNpZ25lZCBpbnQgb3V0cHV0X3JlYXI6IDE7CisJdW5zaWduZWQgaW50IHJ1bm5pbmc6IDEsCisJICAgICAgICAgICAgIG91dHB1dF9mcm9udDogMSwKKwkgICAgICAgICAgICAgb3V0cHV0X3JlYXI6IDEsCisJICAgICAgICAgICAgIHN3YXBfcmVhcjogMTsKIAl1bnNpZ25lZCBpbnQgdXBkYXRlX3BjbV92b2w7CiAJdTMyIHBlcmlvZF9zaXplOwkJLyogY2FjaGVkIGZyb20gcnVudGltZS0+cGVyaW9kX3NpemUgKi8KIAl1MzIgYnVmZmVyX3NpemU7CQkvKiBjYWNoZWQgZnJvbSBydW50aW1lLT5idWZmZXJfc2l6ZSAqLwpAQCAtMzQ0LDYgKzM0NSw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbCAqc3BkaWZfcGNtX2N0bDsKIAlpbnQgbW9kZV9kdXA0Y2g7CiAJaW50IHJlYXJfb3BlbmVkOworCWludCByZWFyX3N3YXA7CiAJaW50IHNwZGlmX29wZW5lZDsKIAlzdHJ1Y3QgewogCQl1MTYgbGVmdDsKQEAgLTM3Niw3ICszNzgsNyBAQAogaW50IHNuZF95bWZwY2lfcGNtMihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGludCBzbmRfeW1mcGNpX3BjbV9zcGRpZihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKIGludCBzbmRfeW1mcGNpX3BjbV80Y2goc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7Ci1pbnQgc25kX3ltZnBjaV9taXhlcihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IHJlYXJfc3dpdGNoKTsKK2ludCBzbmRfeW1mcGNpX21peGVyKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgcmVhcl9zd2l0Y2gsIGludCByZWFyX3N3YXApOwogaW50IHNuZF95bWZwY2lfdGltZXIoc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCBkZXZpY2UpOwogCiAjZW5kaWYgLyogX19TT1VORF9ZTUZQQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9wbTNmYi5oIGIvaW5jbHVkZS92aWRlby9wbTNmYi5oCmluZGV4IDZmNGVhODAuLmFjMDIxMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vcG0zZmIuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3BtM2ZiLmgKQEAgLTExMjgsMTAgKzExMjgsNyBAQAogI2VuZGlmCiAKIC8qIG1heCBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGJvYXJkICovCi0vKiB3YXJuaW5nIDogbWFrZSBzdXJlIG1vZHVsZSBhcnJheSBkZWYncyBhcmUgY29oZXJlbnQgd2l0aCBQTTNfTUFYX0JPQVJEICovCiAjZGVmaW5lIFBNM19NQVhfQk9BUkQgNAotI2RlZmluZSBQTTNfTUFYX0JPQVJEX01PRFVMRV9BUlJBWV9TSE9SVCAiMS00aCIKLSNkZWZpbmUgUE0zX01BWF9CT0FSRF9NT0RVTEVfQVJSQVlfU1RSSU5HICIxLTRzIgogCiAvKiBtYXggc2l6ZSBvZiBvcHRpb25zICovCiAjZGVmaW5lIFBNM19PUFRJT05TX1NJWkUgMjU2CmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggNDExNjAwYy4uM2IzNmExZCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMjE0LDYgKzIxNCwxNyBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKK2NvbmZpZyBSRUxBWQorCWJvb2wgIktlcm5lbC0+dXNlciBzcGFjZSByZWxheSBzdXBwb3J0IChmb3JtZXJseSByZWxheWZzKSIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHJlbGF5IGludGVyZmFjZSBzdXBwb3J0IGluCisJICBjZXJ0YWluIGZpbGUgc3lzdGVtcyAoc3VjaCBhcyBkZWJ1Z2ZzKS4KKwkgIEl0IGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgYW4gZWZmaWNpZW50IG1lY2hhbmlzbSBmb3IgdG9vbHMgYW5kCisJICBmYWNpbGl0aWVzIHRvIHJlbGF5IGxhcmdlIGFtb3VudHMgb2YgZGF0YSBmcm9tIGtlcm5lbCBzcGFjZSB0bworCSAgdXNlciBzcGFjZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogc291cmNlICJ1c3IvS2NvbmZpZyIKIAogY29uZmlnIFVJRDE2CkBAIC00MjIsMTUgKzQzMyw2IEBACiAJICBybW1vZCkuICBUaGlzIGlzIG1haW5seSBmb3Iga2VybmVsIGRldmVsb3BlcnMgYW5kIGRlc3BlcmF0ZSB1c2Vycy4KIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBPQlNPTEVURV9NT0RQQVJNCi0JYm9vbAotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gTU9EVUxFUwotCWhlbHAKLQkgIFlvdSBuZWVkIHRoaXMgb3B0aW9uIHRvIHVzZSBtb2R1bGUgcGFyYW1ldGVycyBvbiBtb2R1bGVzIHdoaWNoCi0JICBoYXZlIG5vdCBiZWVuIGNvbnZlcnRlZCB0byB0aGUgbmV3IG1vZHVsZSBwYXJhbWV0ZXIgc3lzdGVtIHlldC4KLQkgIElmIHVuc3VyZSwgc2F5IFkuCi0KIGNvbmZpZyBNT0RWRVJTSU9OUwogCWJvb2wgIk1vZHVsZSB2ZXJzaW9uaW5nIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBNT0RVTEVTCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuYwppbmRleCBiMjdjMTEwLi44YjY3MWZlIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50cy5jCisrKyBiL2luaXQvZG9fbW91bnRzLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogaW50IF9faW5pdGRhdGEgcmRfZG9sb2FkOwkvKiAxID0gbG9hZCBSQU0gZGlzaywgMCA9IGRvbid0IGxvYWQgKi8KIAotaW50IHJvb3RfbW91bnRmbGFncyA9IE1TX1JET05MWSB8IE1TX1ZFUkJPU0U7CitpbnQgcm9vdF9tb3VudGZsYWdzID0gTVNfUkRPTkxZIHwgTVNfU0lMRU5UOwogY2hhciAqIF9faW5pdGRhdGEgcm9vdF9kZXZpY2VfbmFtZTsKIHN0YXRpYyBjaGFyIF9faW5pdGRhdGEgc2F2ZWRfcm9vdF9uYW1lWzY0XTsKIApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHNfaW5pdHJkLmMgYi9pbml0L2RvX21vdW50c19pbml0cmQuYwppbmRleCBhMDVjYWJkLi40MDVmOTAzIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50c19pbml0cmQuYworKysgYi9pbml0L2RvX21vdW50c19pbml0cmQuYwpAQCAtNTYsNiArNTYsNyBAQAogCXN5c19jaHJvb3QoIi4iKTsKIAltb3VudF9kZXZmc19mcyAoKTsKIAorCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwogCXBpZCA9IGtlcm5lbF90aHJlYWQoZG9fbGludXhyYywgIi9saW51eHJjIiwgU0lHQ0hMRCk7CiAJaWYgKHBpZCA+IDApIHsKIAkJd2hpbGUgKHBpZCAhPSBzeXNfd2FpdDQoLTEsIE5VTEwsIDAsIE5VTEwpKQpkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggNjM3MzQ0Yi4uNzdiOTM0YyAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC01MDYsNiArNTA2LDcgQEAKIAkJcGFuaWMoZXJyKTsKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAlpZiAoaW5pdHJkX3N0YXJ0KSB7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfUkFNCiAJCWludCBmZDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY2hlY2tpbmcgaWYgaW1hZ2UgaXMgaW5pdHJhbWZzLi4uIik7CiAJCWVyciA9IHVucGFja190b19yb290ZnMoKGNoYXIgKilpbml0cmRfc3RhcnQsCkBAIC01MjUsNiArNTI2LDE1IEBACiAJCQlzeXNfY2xvc2UoZmQpOwogCQkJZnJlZV9pbml0cmQoKTsKIAkJfQorI2Vsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVW5wYWNraW5nIGluaXRyYW1mcy4uLiIpOworCQllcnIgPSB1bnBhY2tfdG9fcm9vdGZzKChjaGFyICopaW5pdHJkX3N0YXJ0LAorCQkJaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCwgMCk7CisJCWlmIChlcnIpCisJCQlwYW5pYyhlcnIpOworCQlwcmludGsoIiBkb25lXG4iKTsKKwkJZnJlZV9pbml0cmQoKTsKKyNlbmRpZgogCX0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA0YzE5NGM0Li4wMDZkY2Q1IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMzA2LDggKzMwNiw2IEBACiB9CiBfX3NldHVwKCJyZGluaXQ9IiwgcmRpbml0X3NldHVwKTsKIAotZXh0ZXJuIHZvaWQgc2V0dXBfYXJjaChjaGFyICoqKTsKLQogI2lmbmRlZiBDT05GSUdfU01QCiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKQEAgLTMyNSw3ICszMjMsNyBAQAogI2Vsc2UKIAogI2lmZGVmIF9fR0VORVJJQ19QRVJfQ1BVCi11bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU107Cit1bnNpZ25lZCBsb25nIF9fcGVyX2NwdV9vZmZzZXRbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKIAogRVhQT1JUX1NZTUJPTChfX3Blcl9jcHVfb2Zmc2V0KTsKIApAQCAtMzMzLDYgKzMzMSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzaXplLCBpOwogCWNoYXIgKnB0cjsKKwl1bnNpZ25lZCBsb25nIG5yX3Bvc3NpYmxlX2NwdXMgPSBudW1fcG9zc2libGVfY3B1cygpOwogCiAJLyogQ29weSBzZWN0aW9uIGZvciBlYWNoIENQVSAod2UgZGlzY2FyZCB0aGUgb3JpZ2luYWwpICovCiAJc2l6ZSA9IEFMSUdOKF9fcGVyX2NwdV9lbmQgLSBfX3Blcl9jcHVfc3RhcnQsIFNNUF9DQUNIRV9CWVRFUyk7CkBAIC0zNDAsMTIgKzMzOSwxMiBAQAogCWlmIChzaXplIDwgUEVSQ1BVX0VOT1VHSF9ST09NKQogCQlzaXplID0gUEVSQ1BVX0VOT1VHSF9ST09NOwogI2VuZGlmCisJcHRyID0gYWxsb2NfYm9vdG1lbShzaXplICogbnJfcG9zc2libGVfY3B1cyk7CiAKLQlwdHIgPSBhbGxvY19ib290bWVtKHNpemUgKiBOUl9DUFVTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyssIHB0ciArPSBzaXplKSB7CisJZm9yX2VhY2hfY3B1KGkpIHsKIAkJX19wZXJfY3B1X29mZnNldFtpXSA9IHB0ciAtIF9fcGVyX2NwdV9zdGFydDsKIAkJbWVtY3B5KHB0ciwgX19wZXJfY3B1X3N0YXJ0LCBfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0KTsKKwkJcHRyICs9IHNpemU7CiAJfQogfQogI2VuZGlmIC8qICFfX0dFTkVSSUNfUEVSX0NQVSAqLwpAQCAtNDM4LDYgKzQzNywxNSBAQAogICoJQWN0aXZhdGUgdGhlIGZpcnN0IHByb2Nlc3Nvci4KICAqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgYm9vdF9jcHVfaW5pdCh2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJLyogTWFyayB0aGUgYm9vdCBjcHUgInByZXNlbnQiLCAib25saW5lIiBldGMgZm9yIFNNUCBhbmQgVVAgY2FzZSAqLworCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7CisJY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7CisJY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOworfQorCiBhc21saW5rYWdlIHZvaWQgX19pbml0IHN0YXJ0X2tlcm5lbCh2b2lkKQogewogCWNoYXIgKiBjb21tYW5kX2xpbmU7CkBAIC00NDcsMTcgKzQ1NSwxMyBAQAogICogZW5hYmxlIHRoZW0KICAqLwogCWxvY2tfa2VybmVsKCk7CisJYm9vdF9jcHVfaW5pdCgpOwogCXBhZ2VfYWRkcmVzc19pbml0KCk7CiAJcHJpbnRrKEtFUk5fTk9USUNFKTsKIAlwcmludGsobGludXhfYmFubmVyKTsKIAlzZXR1cF9hcmNoKCZjb21tYW5kX2xpbmUpOwogCXNldHVwX3Blcl9jcHVfYXJlYXMoKTsKLQotCS8qCi0JICogTWFyayB0aGUgYm9vdCBjcHUgIm9ubGluZSIgc28gdGhhdCBpdCBjYW4gY2FsbCBjb25zb2xlIGRyaXZlcnMgaW4KLQkgKiBwcmludGsoKSBhbmQgY2FuIGFjY2VzcyBpdHMgcGVyLWNwdSBzdG9yYWdlLgotCSAqLwotCXNtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7CisJc21wX3ByZXBhcmVfYm9vdF9jcHUoKTsJLyogYXJjaC1zcGVjaWZpYyBib290LWNwdSBob29rcyAqLwogCiAJLyoKIAkgKiBTZXQgdXAgdGhlIHNjaGVkdWxlciBwcmlvciBzdGFydGluZyBhbnkgaW50ZXJydXB0cyAoc3VjaCBhcyB0aGUKQEAgLTU2NSwxNyArNTY5LDIzIEBACiAJaW50IGNvdW50ID0gcHJlZW1wdF9jb3VudCgpOwogCiAJZm9yIChjYWxsID0gX19pbml0Y2FsbF9zdGFydDsgY2FsbCA8IF9faW5pdGNhbGxfZW5kOyBjYWxsKyspIHsKLQkJY2hhciAqbXNnOworCQljaGFyICptc2cgPSBOVUxMOworCQljaGFyIG1zZ2J1Zls0MF07CisJCWludCByZXN1bHQ7CiAKIAkJaWYgKGluaXRjYWxsX2RlYnVnKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ2FsbGluZyBpbml0Y2FsbCAweCVwIiwgKmNhbGwpOwotCQkJcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woIjogJXMoKSIsICh1bnNpZ25lZCBsb25nKSAqY2FsbCk7CisJCQlwcmludGsoIkNhbGxpbmcgaW5pdGNhbGwgMHglcCIsICpjYWxsKTsKKwkJCXByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCI6ICVzKCkiLAorCQkJCQkodW5zaWduZWQgbG9uZykgKmNhbGwpOwogCQkJcHJpbnRrKCJcbiIpOwogCQl9CiAKLQkJKCpjYWxsKSgpOworCQlyZXN1bHQgPSAoKmNhbGwpKCk7CiAKLQkJbXNnID0gTlVMTDsKKwkJaWYgKHJlc3VsdCAmJiAocmVzdWx0ICE9IC1FTk9ERVYgfHwgaW5pdGNhbGxfZGVidWcpKSB7CisJCQlzcHJpbnRmKG1zZ2J1ZiwgImVycm9yIGNvZGUgJWQiLCByZXN1bHQpOworCQkJbXNnID0gbXNnYnVmOworCQl9CiAJCWlmIChwcmVlbXB0X2NvdW50KCkgIT0gY291bnQpIHsKIAkJCW1zZyA9ICJwcmVlbXB0aW9uIGltYmFsYW5jZSI7CiAJCQlwcmVlbXB0X2NvdW50KCkgPSBjb3VudDsKQEAgLTU4NSw4ICs1OTUsMTAgQEAKIAkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJfQogCQlpZiAobXNnKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJlcnJvciBpbiBpbml0Y2FsbCBhdCAweCVwOiAiCi0JCQkJInJldHVybmVkIHdpdGggJXNcbiIsICpjYWxsLCBtc2cpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW5pdGNhbGwgYXQgMHglcCIsICpjYWxsKTsKKwkJCXByaW50X2ZuX2Rlc2NyaXB0b3Jfc3ltYm9sKCI6ICVzKCkiLAorCQkJCQkodW5zaWduZWQgbG9uZykgKmNhbGwpOworCQkJcHJpbnRrKCI6IHJldHVybmVkIHdpdGggJXNcbiIsIG1zZyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCBmZDJlMjZiLi44NWM1MmZkIDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC01MSw3ICs1MSw2IEBACiAjZGVmaW5lIEhBUkRfTVNHTUFYIAkoMTMxMDcyL3NpemVvZih2b2lkKikpCiAjZGVmaW5lIERGTFRfTVNHU0laRU1BWCA4MTkyCS8qIG1heCBtZXNzYWdlIHNpemUgKi8KIAotI2RlZmluZSBOT1RJRllfQ09PS0lFX0xFTgkzMgogCiBzdHJ1Y3QgZXh0X3dhaXRfcXVldWUgewkJLyogcXVldWUgb2Ygc2xlZXBpbmcgdGFza3MgKi8KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CmRpZmYgLS1naXQgYS9pcGMvbXNnLmMgYi9pcGMvbXNnLmMKaW5kZXggZmJmNzU3MDYuLjYwYzFlNWMgMTAwNjQ0Ci0tLSBhL2lwYy9tc2cuYworKysgYi9pcGMvbXNnLmMKQEAgLTIyMCw4ICsyMjAsNyBAQAogCQlyZXQgPSAtRUVYSVNUOwogCX0gZWxzZSB7CiAJCW1zcSA9IG1zZ19sb2NrKGlkKTsKLQkJaWYobXNxPT1OVUxMKQotCQkJQlVHKCk7CisJCUJVR19PTihtc3E9PU5VTEwpOwogCQlpZiAoaXBjcGVybXMoJm1zcS0+cV9wZXJtLCBtc2dmbGcpKQogCQkJcmV0ID0gLUVBQ0NFUzsKIAkJZWxzZSB7CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggOTE2MjEyMy4uMTZmZTI3OCAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtODE0LDYgKzgxNCw5IEBACiAJbG9mZl90IHNpemUgPSAwOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCisJaWYgKGFkZHIgJiB+UEFHRV9NQVNLKQorCQlyZXR1cm4gcmV0dmFsOworCiAJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNGFlMGZiZC4uYWViZDdhNyAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpICs9IGlycS8KIG9iai0kKENPTkZJR19TRUNDT01QKSArPSBzZWNjb21wLm8KIG9iai0kKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKSArPSByY3V0b3J0dXJlLm8KK29iai0kKENPTkZJR19SRUxBWSkgKz0gcmVsYXkubwogCiBpZm5lcSAoJChDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSKSx5KQogIyBBY2NvcmRpbmcgdG8gQWxhbiBNb2RyYSA8YWxhbkBsaW51eGNhcmUuY29tLmF1PiwgdGhlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGlzCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCA2ODVjMjUxLi5jNDM5NGFiIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTg0MSw3ICs4NDEsNyBAQAogCiAJZm9yIChhdXggPSBjb250ZXh0LT5hdXg7IGF1eDsgYXV4ID0gYXV4LT5uZXh0KSB7CiAKLQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgR0ZQX0tFUk5FTCwgYXV4LT50eXBlKTsKKwkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgZ2ZwX21hc2ssIGF1eC0+dHlwZSk7CiAJCWlmICghYWIpCiAJCQljb250aW51ZTsgLyogYXVkaXRfcGFuaWMgaGFzIGJlZW4gY2FsbGVkICovCiAKQEAgLTg3OCwxNCArODc4LDE0IEBACiAJfQogCiAJaWYgKGNvbnRleHQtPnB3ZCAmJiBjb250ZXh0LT5wd2RtbnQpIHsKLQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgR0ZQX0tFUk5FTCwgQVVESVRfQ1dEKTsKKwkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgZ2ZwX21hc2ssIEFVRElUX0NXRCk7CiAJCWlmIChhYikgewogCQkJYXVkaXRfbG9nX2RfcGF0aChhYiwgImN3ZD0iLCBjb250ZXh0LT5wd2QsIGNvbnRleHQtPnB3ZG1udCk7CiAJCQlhdWRpdF9sb2dfZW5kKGFiKTsKIAkJfQogCX0KIAlmb3IgKGkgPSAwOyBpIDwgY29udGV4dC0+bmFtZV9jb3VudDsgaSsrKSB7Ci0JCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIEdGUF9LRVJORUwsIEFVRElUX1BBVEgpOworCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChjb250ZXh0LCBnZnBfbWFzaywgQVVESVRfUEFUSCk7CiAJCWlmICghYWIpCiAJCQljb250aW51ZTsgLyogYXVkaXRfcGFuaWMgaGFzIGJlZW4gY2FsbGVkICovCiAKQEAgLTk1OCw3ICs5NTgsNyBAQAogCSAqCiAJICogaTM4NiAgICAgbm8KIAkgKiB4ODZfNjQgICBubwotCSAqIHBwYzY0ICAgIHllcyAoc2VlIGFyY2gvcHBjNjQva2VybmVsL21pc2MuUykKKwkgKiBwcGM2NCAgICB5ZXMgKHNlZSBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWlzYy5TKQogCSAqCiAJICogVGhpcyBhbHNvIGhhcHBlbnMgd2l0aCB2bTg2IGVtdWxhdGlvbiBpbiBhIG5vbi1uZXN0ZWQgbWFubmVyCiAJICogKGVudHJpZXMgd2l0aG91dCBleGl0cyksIHNvIHRoaXMgY2FzZSBtdXN0IGJlIGNhdWdodC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCmluZGV4IGJmYTNjOTIuLjFhNGQ4YTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jYXBhYmlsaXR5LmMKKysrIGIva2VybmVsL2NhcGFiaWxpdHkuYwpAQCAtMjMzLDMgKzIzMywxOSBAQAogCiAgICAgIHJldHVybiByZXQ7CiB9CisKK2ludCBfX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKQoreworCWlmIChzZWN1cml0eV9jYXBhYmxlKHQsIGNhcCkgPT0gMCkgeworCQl0LT5mbGFncyB8PSBQRl9TVVBFUlBSSVY7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woX19jYXBhYmxlKTsKKworaW50IGNhcGFibGUoaW50IGNhcCkKK3sKKwlyZXR1cm4gX19jYXBhYmxlKGN1cnJlbnQsIGNhcCk7Cit9CitFWFBPUlRfU1lNQk9MKGNhcGFibGUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IGU4ODJjNmIuLjhiZTIyYmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTIyMyw4ICsyMjMsNyBAQAogCXJldCA9IF9fY3B1X3VwKGNwdSk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIG91dF9ub3RpZnk7Ci0JaWYgKCFjcHVfb25saW5lKGNwdSkpCi0JCUJVRygpOworCUJVR19PTighY3B1X29ubGluZShjcHUpKTsKIAogCS8qIE5vdyBjYWxsIG5vdGlmaWVyIGluIHByZXBhcmF0aW9uLiAqLwogCW5vdGlmaWVyX2NhbGxfY2hhaW4oJmNwdV9jaGFpbiwgQ1BVX09OTElORSwgaGNwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggMTI4MTVkMy4uMThhZWExYiAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtNCwxNSArNCwxNCBAQAogICogIFByb2Nlc3NvciBhbmQgTWVtb3J5IHBsYWNlbWVudCBjb25zdHJhaW50cyBmb3Igc2V0cyBvZiB0YXNrcy4KICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEJVTEwgU0EuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKgogICogIFBvcnRpb25zIGRlcml2ZWQgZnJvbSBQYXRyaWNrIE1vY2hlbCdzIHN5c2ZzIGNvZGUuCiAgKiAgc3lzZnMgaXMgQ29weXJpZ2h0IChjKSAyMDAxLTMgUGF0cmljayBNb2NoZWwKLSAqICBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMDQgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICoKLSAqICAyMDAzLTEwLTEwIFdyaXR0ZW4gYnkgU2ltb24gRGVyciA8c2ltb24uZGVyckBidWxsLm5ldD4KKyAqICAyMDAzLTEwLTEwIFdyaXR0ZW4gYnkgU2ltb24gRGVyci4KICAqICAyMDAzLTEwLTIyIFVwZGF0ZXMgYnkgU3RlcGhlbiBIZW1taW5nZXIuCi0gKiAgMjAwNCBNYXktSnVseSBSZXdvcmsgYnkgUGF1bCBKYWNrc29uIDxwakBzZ2kuY29tPgorICogIDIwMDQgTWF5LUp1bHkgUmV3b3JrIGJ5IFBhdWwgSmFja3Nvbi4KICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoZSBMaW51eApAQCAtNTMsNyArNTIsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgQ1BVU0VUX1NVUEVSX01BR0lDCQkweDI3ZTBlYgogCkBAIC0xMDgsMzcgKzEwNyw0OSBAQAogCUNTX01FTV9FWENMVVNJVkUsCiAJQ1NfTUVNT1JZX01JR1JBVEUsCiAJQ1NfUkVNT1ZFRCwKLQlDU19OT1RJRllfT05fUkVMRUFTRQorCUNTX05PVElGWV9PTl9SRUxFQVNFLAorCUNTX1NQUkVBRF9QQUdFLAorCUNTX1NQUkVBRF9TTEFCLAogfSBjcHVzZXRfZmxhZ2JpdHNfdDsKIAogLyogY29udmVuaWVudCB0ZXN0cyBmb3IgdGhlc2UgYml0cyAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfY3B1X2V4Y2x1c2l2ZShjb25zdCBzdHJ1Y3QgY3B1c2V0ICpjcykKIHsKLQlyZXR1cm4gISF0ZXN0X2JpdChDU19DUFVfRVhDTFVTSVZFLCAmY3MtPmZsYWdzKTsKKwlyZXR1cm4gdGVzdF9iaXQoQ1NfQ1BVX0VYQ0xVU0lWRSwgJmNzLT5mbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX21lbV9leGNsdXNpdmUoY29uc3Qgc3RydWN0IGNwdXNldCAqY3MpCiB7Ci0JcmV0dXJuICEhdGVzdF9iaXQoQ1NfTUVNX0VYQ0xVU0lWRSwgJmNzLT5mbGFncyk7CisJcmV0dXJuIHRlc3RfYml0KENTX01FTV9FWENMVVNJVkUsICZjcy0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19yZW1vdmVkKGNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzKQogewotCXJldHVybiAhIXRlc3RfYml0KENTX1JFTU9WRUQsICZjcy0+ZmxhZ3MpOworCXJldHVybiB0ZXN0X2JpdChDU19SRU1PVkVELCAmY3MtPmZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X29uX3JlbGVhc2UoY29uc3Qgc3RydWN0IGNwdXNldCAqY3MpCiB7Ci0JcmV0dXJuICEhdGVzdF9iaXQoQ1NfTk9USUZZX09OX1JFTEVBU0UsICZjcy0+ZmxhZ3MpOworCXJldHVybiB0ZXN0X2JpdChDU19OT1RJRllfT05fUkVMRUFTRSwgJmNzLT5mbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX21lbW9yeV9taWdyYXRlKGNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzKQogewotCXJldHVybiAhIXRlc3RfYml0KENTX01FTU9SWV9NSUdSQVRFLCAmY3MtPmZsYWdzKTsKKwlyZXR1cm4gdGVzdF9iaXQoQ1NfTUVNT1JZX01JR1JBVEUsICZjcy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19zcHJlYWRfcGFnZShjb25zdCBzdHJ1Y3QgY3B1c2V0ICpjcykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoQ1NfU1BSRUFEX1BBR0UsICZjcy0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19zcHJlYWRfc2xhYihjb25zdCBzdHJ1Y3QgY3B1c2V0ICpjcykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoQ1NfU1BSRUFEX1NMQUIsICZjcy0+ZmxhZ3MpOwogfQogCiAvKgotICogSW5jcmVtZW50IHRoaXMgYXRvbWljIGludGVnZXIgZXZlcnl0aW1lIGFueSBjcHVzZXQgY2hhbmdlcyBpdHMKKyAqIEluY3JlbWVudCB0aGlzIGludGVnZXIgZXZlcnl0aW1lIGFueSBjcHVzZXQgY2hhbmdlcyBpdHMKICAqIG1lbXNfYWxsb3dlZCB2YWx1ZS4gIFVzZXJzIG9mIGNwdXNldHMgY2FuIHRyYWNrIHRoaXMgZ2VuZXJhdGlvbgogICogbnVtYmVyLCBhbmQgYXZvaWQgaGF2aW5nIHRvIGxvY2sgYW5kIHJlbG9hZCBtZW1zX2FsbG93ZWQgdW5sZXNzCiAgKiB0aGUgY3B1c2V0IHRoZXkncmUgdXNpbmcgY2hhbmdlcyBnZW5lcmF0aW9uLgpAQCAtMTUyLDggKzE2MywxMSBAQAogICogb24gZXZlcnkgdmlzaXQgdG8gX19hbGxvY19wYWdlcygpLCB0byBlZmZpY2llbnRseSBjaGVjayB3aGV0aGVyCiAgKiBpdHMgY3VycmVudC0+Y3B1c2V0LT5tZW1zX2FsbG93ZWQgaGFzIGNoYW5nZWQsIHJlcXVpcmluZyBhbiB1cGRhdGUKICAqIG9mIGl0cyBjdXJyZW50LT5tZW1zX2FsbG93ZWQuCisgKgorICogU2luY2UgY3B1c2V0X21lbXNfZ2VuZXJhdGlvbiBpcyBndWFyZGVkIGJ5IG1hbmFnZV9tdXRleCwKKyAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFyayBpdCBhdG9taWMuCiAgKi8KLXN0YXRpYyBhdG9taWNfdCBjcHVzZXRfbWVtc19nZW5lcmF0aW9uID0gQVRPTUlDX0lOSVQoMSk7CitzdGF0aWMgaW50IGNwdXNldF9tZW1zX2dlbmVyYXRpb247CiAKIHN0YXRpYyBzdHJ1Y3QgY3B1c2V0IHRvcF9jcHVzZXQgPSB7CiAJLmZsYWdzID0gKCgxIDw8IENTX0NQVV9FWENMVVNJVkUpIHwgKDEgPDwgQ1NfTUVNX0VYQ0xVU0lWRSkpLApAQCAtMTY4LDYzICsxODIsNTcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmNwdXNldF9zYjsKIAogLyoKLSAqIFdlIGhhdmUgdHdvIGdsb2JhbCBjcHVzZXQgc2VtYXBob3JlcyBiZWxvdy4gIFRoZXkgY2FuIG5lc3QuCi0gKiBJdCBpcyBvayB0byBmaXJzdCB0YWtlIG1hbmFnZV9zZW0sIHRoZW4gbmVzdCBjYWxsYmFja19zZW0uICBXZSBhbHNvCisgKiBXZSBoYXZlIHR3byBnbG9iYWwgY3B1c2V0IG11dGV4ZXMgYmVsb3cuICBUaGV5IGNhbiBuZXN0LgorICogSXQgaXMgb2sgdG8gZmlyc3QgdGFrZSBtYW5hZ2VfbXV0ZXgsIHRoZW4gbmVzdCBjYWxsYmFja19tdXRleC4gIFdlIGFsc28KICAqIHJlcXVpcmUgdGFraW5nIHRhc2tfbG9jaygpIHdoZW4gZGVyZWZlcmVuY2luZyBhIHRhc2tzIGNwdXNldCBwb2ludGVyLgogICogU2VlICJUaGUgdGFza19sb2NrKCkgZXhjZXB0aW9uIiwgYXQgdGhlIGVuZCBvZiB0aGlzIGNvbW1lbnQuCiAgKgotICogQSB0YXNrIG11c3QgaG9sZCBib3RoIHNlbWFwaG9yZXMgdG8gbW9kaWZ5IGNwdXNldHMuICBJZiBhIHRhc2sKLSAqIGhvbGRzIG1hbmFnZV9zZW0sIHRoZW4gaXQgYmxvY2tzIG90aGVycyB3YW50aW5nIHRoYXQgc2VtYXBob3JlLAotICogZW5zdXJpbmcgdGhhdCBpdCBpcyB0aGUgb25seSB0YXNrIGFibGUgdG8gYWxzbyBhY3F1aXJlIGNhbGxiYWNrX3NlbQorICogQSB0YXNrIG11c3QgaG9sZCBib3RoIG11dGV4ZXMgdG8gbW9kaWZ5IGNwdXNldHMuICBJZiBhIHRhc2sKKyAqIGhvbGRzIG1hbmFnZV9tdXRleCwgdGhlbiBpdCBibG9ja3Mgb3RoZXJzIHdhbnRpbmcgdGhhdCBtdXRleCwKKyAqIGVuc3VyaW5nIHRoYXQgaXQgaXMgdGhlIG9ubHkgdGFzayBhYmxlIHRvIGFsc28gYWNxdWlyZSBjYWxsYmFja19tdXRleAogICogYW5kIGJlIGFibGUgdG8gbW9kaWZ5IGNwdXNldHMuICBJdCBjYW4gcGVyZm9ybSB2YXJpb3VzIGNoZWNrcyBvbgogICogdGhlIGNwdXNldCBzdHJ1Y3R1cmUgZmlyc3QsIGtub3dpbmcgbm90aGluZyB3aWxsIGNoYW5nZS4gIEl0IGNhbgotICogYWxzbyBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUganVzdCBob2xkaW5nIG1hbmFnZV9zZW0uICBXaGlsZSBpdCBpcworICogYWxzbyBhbGxvY2F0ZSBtZW1vcnkgd2hpbGUganVzdCBob2xkaW5nIG1hbmFnZV9tdXRleC4gIFdoaWxlIGl0IGlzCiAgKiBwZXJmb3JtaW5nIHRoZXNlIGNoZWNrcywgdmFyaW91cyBjYWxsYmFjayByb3V0aW5lcyBjYW4gYnJpZWZseQotICogYWNxdWlyZSBjYWxsYmFja19zZW0gdG8gcXVlcnkgY3B1c2V0cy4gIE9uY2UgaXQgaXMgcmVhZHkgdG8gbWFrZQotICogdGhlIGNoYW5nZXMsIGl0IHRha2VzIGNhbGxiYWNrX3NlbSwgYmxvY2tpbmcgZXZlcnlvbmUgZWxzZS4KKyAqIGFjcXVpcmUgY2FsbGJhY2tfbXV0ZXggdG8gcXVlcnkgY3B1c2V0cy4gIE9uY2UgaXQgaXMgcmVhZHkgdG8gbWFrZQorICogdGhlIGNoYW5nZXMsIGl0IHRha2VzIGNhbGxiYWNrX211dGV4LCBibG9ja2luZyBldmVyeW9uZSBlbHNlLgogICoKICAqIENhbGxzIHRvIHRoZSBrZXJuZWwgbWVtb3J5IGFsbG9jYXRvciBjYW4gbm90IGJlIG1hZGUgd2hpbGUgaG9sZGluZwotICogY2FsbGJhY2tfc2VtLCBhcyB0aGF0IHdvdWxkIHJpc2sgZG91YmxlIHRyaXBwaW5nIG9uIGNhbGxiYWNrX3NlbQorICogY2FsbGJhY2tfbXV0ZXgsIGFzIHRoYXQgd291bGQgcmlzayBkb3VibGUgdHJpcHBpbmcgb24gY2FsbGJhY2tfbXV0ZXgKICAqIGZyb20gb25lIG9mIHRoZSBjYWxsYmFja3MgaW50byB0aGUgY3B1c2V0IGNvZGUgZnJvbSB3aXRoaW4KICAqIF9fYWxsb2NfcGFnZXMoKS4KICAqCi0gKiBJZiBhIHRhc2sgaXMgb25seSBob2xkaW5nIGNhbGxiYWNrX3NlbSwgdGhlbiBpdCBoYXMgcmVhZC1vbmx5CisgKiBJZiBhIHRhc2sgaXMgb25seSBob2xkaW5nIGNhbGxiYWNrX211dGV4LCB0aGVuIGl0IGhhcyByZWFkLW9ubHkKICAqIGFjY2VzcyB0byBjcHVzZXRzLgogICoKICAqIFRoZSB0YXNrX3N0cnVjdCBmaWVsZHMgbWVtc19hbGxvd2VkIGFuZCBtZW1zX2dlbmVyYXRpb24gbWF5IG9ubHkKICAqIGJlIGFjY2Vzc2VkIGluIHRoZSBjb250ZXh0IG9mIHRoYXQgdGFzaywgc28gcmVxdWlyZSBubyBsb2Nrcy4KICAqCiAgKiBBbnkgdGFzayBjYW4gaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgdGhlIGNvdW50IGZpZWxkIHdpdGhvdXQgbG9jay4KLSAqIFNvIGluIGdlbmVyYWwsIGNvZGUgaG9sZGluZyBtYW5hZ2Vfc2VtIG9yIGNhbGxiYWNrX3NlbSBjYW4ndCByZWx5CisgKiBTbyBpbiBnZW5lcmFsLCBjb2RlIGhvbGRpbmcgbWFuYWdlX211dGV4IG9yIGNhbGxiYWNrX211dGV4IGNhbid0IHJlbHkKICAqIG9uIHRoZSBjb3VudCBmaWVsZCBub3QgY2hhbmdpbmcuICBIb3dldmVyLCBpZiB0aGUgY291bnQgZ29lcyB0bwotICogemVybywgdGhlbiBvbmx5IGF0dGFjaF90YXNrKCksIHdoaWNoIGhvbGRzIGJvdGggc2VtYXBob3JlcywgY2FuCisgKiB6ZXJvLCB0aGVuIG9ubHkgYXR0YWNoX3Rhc2soKSwgd2hpY2ggaG9sZHMgYm90aCBtdXRleGVzLCBjYW4KICAqIGluY3JlbWVudCBpdCBhZ2Fpbi4gIEJlY2F1c2UgYSBjb3VudCBvZiB6ZXJvIG1lYW5zIHRoYXQgbm8gdGFza3MKICAqIGFyZSBjdXJyZW50bHkgYXR0YWNoZWQsIHRoZXJlZm9yZSB0aGVyZSBpcyBubyB3YXkgYSB0YXNrIGF0dGFjaGVkCiAgKiB0byB0aGF0IGNwdXNldCBjYW4gZm9yayAodGhlIG90aGVyIHdheSB0byBpbmNyZW1lbnQgdGhlIGNvdW50KS4KLSAqIFNvIGNvZGUgaG9sZGluZyBtYW5hZ2Vfc2VtIG9yIGNhbGxiYWNrX3NlbSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0CisgKiBTbyBjb2RlIGhvbGRpbmcgbWFuYWdlX211dGV4IG9yIGNhbGxiYWNrX211dGV4IGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQKICAqIGlmIHRoZSBjb3VudCBpcyB6ZXJvLCBpdCB3aWxsIHN0YXkgemVyby4gIFNpbWlsYXJseSwgaWYgYSB0YXNrCi0gKiBob2xkcyBtYW5hZ2Vfc2VtIG9yIGNhbGxiYWNrX3NlbSBvbiBhIGNwdXNldCB3aXRoIHplcm8gY291bnQsIGl0CisgKiBob2xkcyBtYW5hZ2VfbXV0ZXggb3IgY2FsbGJhY2tfbXV0ZXggb24gYSBjcHVzZXQgd2l0aCB6ZXJvIGNvdW50LCBpdAogICoga25vd3MgdGhhdCB0aGUgY3B1c2V0IHdvbid0IGJlIHJlbW92ZWQsIGFzIGNwdXNldF9ybWRpcigpIG5lZWRzCi0gKiBib3RoIG9mIHRob3NlIHNlbWFwaG9yZXMuCi0gKgotICogQSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gdG8gaW1wcm92ZSBwYXJhbGxlbGlzbSB3b3VsZCBiZSB0byBtYWtlCi0gKiBjYWxsYmFja19zZW0gYSBSL1cgc2VtYXBob3JlIChyd3NlbSksIGFsbG93aW5nIHRoZSBjYWxsYmFjayByb3V0aW5lcwotICogdG8gcHJvY2VlZCBpbiBwYXJhbGxlbCwgd2l0aCByZWFkIGFjY2VzcywgdW50aWwgdGhlIGhvbGRlciBvZgotICogbWFuYWdlX3NlbSBuZWVkZWQgdG8gdGFrZSB0aGlzIHJ3c2VtIGZvciBleGNsdXNpdmUgd3JpdGUgYWNjZXNzCi0gKiBhbmQgbW9kaWZ5IHNvbWUgY3B1c2V0cy4KKyAqIGJvdGggb2YgdGhvc2UgbXV0ZXhlcy4KICAqCiAgKiBUaGUgY3B1c2V0X2NvbW1vbl9maWxlX3dyaXRlIGhhbmRsZXIgZm9yIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkKLSAqIHRoZSBjcHVzZXQgaGllcmFyY2h5IGhvbGRzIG1hbmFnZV9zZW0gYWNyb3NzIHRoZSBlbnRpcmUgb3BlcmF0aW9uLAorICogdGhlIGNwdXNldCBoaWVyYXJjaHkgaG9sZHMgbWFuYWdlX211dGV4IGFjcm9zcyB0aGUgZW50aXJlIG9wZXJhdGlvbiwKICAqIHNpbmdsZSB0aHJlYWRpbmcgYWxsIHN1Y2ggY3B1c2V0IG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRoZSBzeXN0ZW0uCiAgKgotICogVGhlIGNwdXNldF9jb21tb25fZmlsZV9yZWFkKCkgaGFuZGxlcnMgb25seSBob2xkIGNhbGxiYWNrX3NlbSBhY3Jvc3MKKyAqIFRoZSBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZCgpIGhhbmRsZXJzIG9ubHkgaG9sZCBjYWxsYmFja19tdXRleCBhY3Jvc3MKICAqIHNtYWxsIHBpZWNlcyBvZiBjb2RlLCBzdWNoIGFzIHdoZW4gcmVhZGluZyBvdXQgcG9zc2libHkgbXVsdGktd29yZAogICogY3B1bWFza3MgYW5kIG5vZGVtYXNrcy4KICAqCiAgKiBUaGUgZm9yayBhbmQgZXhpdCBjYWxsYmFja3MgY3B1c2V0X2ZvcmsoKSBhbmQgY3B1c2V0X2V4aXQoKSwgZG9uJ3QKLSAqICh1c3VhbGx5KSB0YWtlIGVpdGhlciBzZW1hcGhvcmUuICBUaGVzZSBhcmUgdGhlIHR3byBtb3N0IHBlcmZvcm1hbmNlCisgKiAodXN1YWxseSkgdGFrZSBlaXRoZXIgbXV0ZXguICBUaGVzZSBhcmUgdGhlIHR3byBtb3N0IHBlcmZvcm1hbmNlCiAgKiBjcml0aWNhbCBwaWVjZXMgb2YgY29kZSBoZXJlLiAgVGhlIGV4Y2VwdGlvbiBvY2N1cnMgb24gY3B1c2V0X2V4aXQoKSwKLSAqIHdoZW4gYSB0YXNrIGluIGEgbm90aWZ5X29uX3JlbGVhc2UgY3B1c2V0IGV4aXRzLiAgVGhlbiBtYW5hZ2Vfc2VtCisgKiB3aGVuIGEgdGFzayBpbiBhIG5vdGlmeV9vbl9yZWxlYXNlIGNwdXNldCBleGl0cy4gIFRoZW4gbWFuYWdlX211dGV4CiAgKiBpcyB0YWtlbiwgYW5kIGlmIHRoZSBjcHVzZXQgY291bnQgaXMgemVybywgYSB1c2VybW9kZSBjYWxsIG1hZGUKICAqIHRvIC9zYmluL2NwdXNldF9yZWxlYXNlX2FnZW50IHdpdGggdGhlIG5hbWUgb2YgdGhlIGNwdXNldCAocGF0aAogICogcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgY3B1c2V0IGZpbGUgc3lzdGVtKSBhcyB0aGUgYXJndW1lbnQuCkBAIC0yNDIsOSArMjUwLDkgQEAKICAqCiAgKiBUaGUgbmVlZCBmb3IgdGhpcyBleGNlcHRpb24gYXJpc2VzIGZyb20gdGhlIGFjdGlvbiBvZiBhdHRhY2hfdGFzaygpLAogICogd2hpY2ggb3ZlcndyaXRlcyBvbmUgdGFza3MgY3B1c2V0IHBvaW50ZXIgd2l0aCBhbm90aGVyLiAgSXQgZG9lcwotICogc28gdXNpbmcgYm90aCBzZW1hcGhvcmVzLCBob3dldmVyIHRoZXJlIGFyZSBzZXZlcmFsIHBlcmZvcm1hbmNlCisgKiBzbyB1c2luZyBib3RoIG11dGV4ZXMsIGhvd2V2ZXIgdGhlcmUgYXJlIHNldmVyYWwgcGVyZm9ybWFuY2UKICAqIGNyaXRpY2FsIHBsYWNlcyB0aGF0IG5lZWQgdG8gcmVmZXJlbmNlIHRhc2stPmNwdXNldCB3aXRob3V0IHRoZQotICogZXhwZW5zZSBvZiBncmFiYmluZyBhIHN5c3RlbSBnbG9iYWwgc2VtYXBob3JlLiAgVGhlcmVmb3JlIGV4Y2VwdCBhcworICogZXhwZW5zZSBvZiBncmFiYmluZyBhIHN5c3RlbSBnbG9iYWwgbXV0ZXguICBUaGVyZWZvcmUgZXhjZXB0IGFzCiAgKiBub3RlZCBiZWxvdywgd2hlbiBkZXJlZmVyZW5jaW5nIG9yLCBhcyBpbiBhdHRhY2hfdGFzaygpLCBtb2RpZnlpbmcKICAqIGEgdGFza3MgY3B1c2V0IHBvaW50ZXIgd2UgdXNlIHRhc2tfbG9jaygpLCB3aGljaCBhY3RzIG9uIGEgc3BpbmxvY2sKICAqICh0YXNrLT5hbGxvY19sb2NrKSBhbHJlYWR5IGluIHRoZSB0YXNrX3N0cnVjdCByb3V0aW5lbHkgdXNlZCBmb3IKQEAgLTI1Niw4ICsyNjQsOCBAQAogICogdGhlIHJvdXRpbmUgY3B1c2V0X3VwZGF0ZV90YXNrX21lbW9yeV9zdGF0ZSgpLgogICovCiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKG1hbmFnZV9zZW0pOwotc3RhdGljIERFQ0xBUkVfTVVURVgoY2FsbGJhY2tfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgobWFuYWdlX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2FsbGJhY2tfbXV0ZXgpOwogCiAvKgogICogQSBjb3VwbGUgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMgcmVxdWlyZWQsIGR1ZSB0byBjeWNsaWMgcmVmZXJlbmNlIGxvb3A6CkBAIC00MzIsNyArNDQwLDcgQEAKIH0KIAogLyoKLSAqIENhbGwgd2l0aCBtYW5hZ2Vfc2VtIGhlbGQuICBXcml0ZXMgcGF0aCBvZiBjcHVzZXQgaW50byBidWYuCisgKiBDYWxsIHdpdGggbWFuYWdlX211dGV4IGhlbGQuICBXcml0ZXMgcGF0aCBvZiBjcHVzZXQgaW50byBidWYuCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGVycm9yLgogICovCiAKQEAgLTQ4NCwxMSArNDkyLDExIEBACiAgKiBzdGF0dXMgb2YgdGhlIC9zYmluL2NwdXNldF9yZWxlYXNlX2FnZW50IHRhc2ssIHNvIG5vIHNlbnNlIGhvbGRpbmcKICAqIG91ciBjYWxsZXIgdXAgZm9yIHRoYXQuCiAgKgotICogV2hlbiB3ZSBoYWQgb25seSBvbmUgY3B1c2V0IHNlbWFwaG9yZSwgd2UgaGFkIHRvIGNhbGwgdGhpcworICogV2hlbiB3ZSBoYWQgb25seSBvbmUgY3B1c2V0IG11dGV4LCB3ZSBoYWQgdG8gY2FsbCB0aGlzCiAgKiB3aXRob3V0IGhvbGRpbmcgaXQsIHRvIGF2b2lkIGRlYWRsb2NrIHdoZW4gY2FsbF91c2VybW9kZWhlbHBlcigpCiAgKiBhbGxvY2F0ZWQgbWVtb3J5LiAgV2l0aCB0d28gbG9ja3MsIHdlIGNvdWxkIG5vdyBjYWxsIHRoaXMgd2hpbGUKLSAqIGhvbGRpbmcgbWFuYWdlX3NlbSwgYnV0IHdlIHN0aWxsIGRvbid0LCBzbyBhcyB0byBtaW5pbWl6ZQotICogdGhlIHRpbWUgbWFuYWdlX3NlbSBpcyBoZWxkLgorICogaG9sZGluZyBtYW5hZ2VfbXV0ZXgsIGJ1dCB3ZSBzdGlsbCBkb24ndCwgc28gYXMgdG8gbWluaW1pemUKKyAqIHRoZSB0aW1lIG1hbmFnZV9tdXRleCBpcyBoZWxkLgogICovCiAKIHN0YXRpYyB2b2lkIGNwdXNldF9yZWxlYXNlX2FnZW50KGNvbnN0IGNoYXIgKnBhdGhidWYpCkBAIC01MjAsMTUgKzUyOCwxNSBAQAogICogY3MgaXMgbm90aWZ5X29uX3JlbGVhc2UoKSBhbmQgbm93IGJvdGggdGhlIHVzZXIgY291bnQgaXMgemVybyBhbmQKICAqIHRoZSBsaXN0IG9mIGNoaWxkcmVuIGlzIGVtcHR5LCBwcmVwYXJlIGNwdXNldCBwYXRoIGluIGEga21hbGxvYydkCiAgKiBidWZmZXIsIHRvIGJlIHJldHVybmVkIHZpYSBwcGF0aGJ1Ziwgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBpbnZva2UKLSAqIGNwdXNldF9yZWxlYXNlX2FnZW50KCkgd2l0aCBpdCBsYXRlciBvbiwgb25jZSBtYW5hZ2Vfc2VtIGlzIGRyb3BwZWQuCi0gKiBDYWxsIGhlcmUgd2l0aCBtYW5hZ2Vfc2VtIGhlbGQuCisgKiBjcHVzZXRfcmVsZWFzZV9hZ2VudCgpIHdpdGggaXQgbGF0ZXIgb24sIG9uY2UgbWFuYWdlX211dGV4IGlzIGRyb3BwZWQuCisgKiBDYWxsIGhlcmUgd2l0aCBtYW5hZ2VfbXV0ZXggaGVsZC4KICAqCiAgKiBUaGlzIGNoZWNrX2Zvcl9yZWxlYXNlKCkgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3Iga21hbGxvYydpbmcKICAqIHBhdGhidWYuICBUaGUgYWJvdmUgY3B1c2V0X3JlbGVhc2VfYWdlbnQoKSBpcyByZXNwb25zaWJsZSBmb3IKICAqIGtmcmVlJ2luZyBwYXRoYnVmLiAgVGhlIGNhbGxlciBvZiB0aGVzZSByb3V0aW5lcyBpcyByZXNwb25zaWJsZQogICogZm9yIHByb3ZpZGluZyBhIHBhdGhidWYgcG9pbnRlciwgaW5pdGlhbGl6ZWQgdG8gTlVMTCwgdGhlbgotICogY2FsbGluZyBjaGVja19mb3JfcmVsZWFzZSgpIHdpdGggbWFuYWdlX3NlbSBoZWxkIGFuZCB0aGUgYWRkcmVzcwotICogb2YgdGhlIHBhdGhidWYgcG9pbnRlciwgdGhlbiBkcm9wcGluZyBtYW5hZ2Vfc2VtLCB0aGVuIGNhbGxpbmcKKyAqIGNhbGxpbmcgY2hlY2tfZm9yX3JlbGVhc2UoKSB3aXRoIG1hbmFnZV9tdXRleCBoZWxkIGFuZCB0aGUgYWRkcmVzcworICogb2YgdGhlIHBhdGhidWYgcG9pbnRlciwgdGhlbiBkcm9wcGluZyBtYW5hZ2VfbXV0ZXgsIHRoZW4gY2FsbGluZwogICogY3B1c2V0X3JlbGVhc2VfYWdlbnQoKSB3aXRoIHBhdGhidWYsIGFzIHNldCBieSBjaGVja19mb3JfcmVsZWFzZSgpLgogICovCiAKQEAgLTU1OSw3ICs1NjcsNyBAQAogICogT25lIHdheSBvciBhbm90aGVyLCB3ZSBndWFyYW50ZWUgdG8gcmV0dXJuIHNvbWUgbm9uLWVtcHR5IHN1YnNldAogICogb2YgY3B1X29ubGluZV9tYXAuCiAgKgotICogQ2FsbCB3aXRoIGNhbGxiYWNrX3NlbSBoZWxkLgorICogQ2FsbCB3aXRoIGNhbGxiYWNrX211dGV4IGhlbGQuCiAgKi8KIAogc3RhdGljIHZvaWQgZ3VhcmFudGVlX29ubGluZV9jcHVzKGNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzLCBjcHVtYXNrX3QgKnBtYXNrKQpAQCAtNTgzLDcgKzU5MSw3IEBACiAgKiBPbmUgd2F5IG9yIGFub3RoZXIsIHdlIGd1YXJhbnRlZSB0byByZXR1cm4gc29tZSBub24tZW1wdHkgc3Vic2V0CiAgKiBvZiBub2RlX29ubGluZV9tYXAuCiAgKgotICogQ2FsbCB3aXRoIGNhbGxiYWNrX3NlbSBoZWxkLgorICogQ2FsbCB3aXRoIGNhbGxiYWNrX211dGV4IGhlbGQuCiAgKi8KIAogc3RhdGljIHZvaWQgZ3VhcmFudGVlX29ubGluZV9tZW1zKGNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzLCBub2RlbWFza190ICpwbWFzaykKQEAgLTYwOCwxMiArNjE2LDEyIEBACiAgKiBjdXJyZW50LT5jcHVzZXQgaWYgYSB0YXNrIGhhcyBpdHMgbWVtb3J5IHBsYWNlbWVudCBjaGFuZ2VkLgogICogRG8gbm90IGNhbGwgdGhpcyByb3V0aW5lIGlmIGluX2ludGVycnVwdCgpLgogICoKLSAqIENhbGwgd2l0aG91dCBjYWxsYmFja19zZW0gb3IgdGFza19sb2NrKCkgaGVsZC4gIE1heSBiZSBjYWxsZWQKLSAqIHdpdGggb3Igd2l0aG91dCBtYW5hZ2Vfc2VtIGhlbGQuICBEb2Vzbid0IG5lZWQgdGFza19sb2NrIHRvIGd1YXJkCisgKiBDYWxsIHdpdGhvdXQgY2FsbGJhY2tfbXV0ZXggb3IgdGFza19sb2NrKCkgaGVsZC4gIE1heSBiZSBjYWxsZWQKKyAqIHdpdGggb3Igd2l0aG91dCBtYW5hZ2VfbXV0ZXggaGVsZC4gIERvZXNuJ3QgbmVlZCB0YXNrX2xvY2sgdG8gZ3VhcmQKICAqIGFnYWluc3QgYW5vdGhlciB0YXNrIGNoYW5naW5nIGEgbm9uLU5VTEwgY3B1c2V0IHBvaW50ZXIgdG8gTlVMTCwKICAqIGFzIHRoYXQgaXMgb25seSBkb25lIGJ5IGEgdGFzayBvbiBpdHNlbGYsIGFuZCBpZiB0aGUgY3VycmVudCB0YXNrCiAgKiBpcyBoZXJlLCBpdCBpcyBub3Qgc2ltdWx0YW5lb3VzbHkgaW4gdGhlIGV4aXQgY29kZSBOVUxMJ2luZyBpdHMKLSAqIGNwdXNldCBwb2ludGVyLiAgVGhpcyByb3V0aW5lIGFsc28gbWlnaHQgYWNxdWlyZSBjYWxsYmFja19zZW0gYW5kCisgKiBjcHVzZXQgcG9pbnRlci4gIFRoaXMgcm91dGluZSBhbHNvIG1pZ2h0IGFjcXVpcmUgY2FsbGJhY2tfbXV0ZXggYW5kCiAgKiBjdXJyZW50LT5tbS0+bW1hcF9zZW0gZHVyaW5nIGNhbGwuCiAgKgogICogUmVhZGluZyBjdXJyZW50LT5jcHVzZXQtPm1lbXNfZ2VuZXJhdGlvbiBkb2Vzbid0IG5lZWQgdGFza19sb2NrCkBAIC02NTgsMTMgKzY2NiwyMSBAQAogCX0KIAogCWlmIChteV9jcHVzZXRzX21lbV9nZW4gIT0gdHNrLT5jcHVzZXRfbWVtc19nZW5lcmF0aW9uKSB7Ci0JCWRvd24oJmNhbGxiYWNrX3NlbSk7CisJCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAkJdGFza19sb2NrKHRzayk7CiAJCWNzID0gdHNrLT5jcHVzZXQ7CS8qIE1heWJlIGNoYW5nZWQgd2hlbiB0YXNrIG5vdCBsb2NrZWQgKi8KIAkJZ3VhcmFudGVlX29ubGluZV9tZW1zKGNzLCAmdHNrLT5tZW1zX2FsbG93ZWQpOwogCQl0c2stPmNwdXNldF9tZW1zX2dlbmVyYXRpb24gPSBjcy0+bWVtc19nZW5lcmF0aW9uOworCQlpZiAoaXNfc3ByZWFkX3BhZ2UoY3MpKQorCQkJdHNrLT5mbGFncyB8PSBQRl9TUFJFQURfUEFHRTsKKwkJZWxzZQorCQkJdHNrLT5mbGFncyAmPSB+UEZfU1BSRUFEX1BBR0U7CisJCWlmIChpc19zcHJlYWRfc2xhYihjcykpCisJCQl0c2stPmZsYWdzIHw9IFBGX1NQUkVBRF9TTEFCOworCQllbHNlCisJCQl0c2stPmZsYWdzICY9IH5QRl9TUFJFQURfU0xBQjsKIAkJdGFza191bmxvY2sodHNrKTsKLQkJdXAoJmNhbGxiYWNrX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCQltcG9sX3JlYmluZF90YXNrKHRzaywgJnRzay0+bWVtc19hbGxvd2VkKTsKIAl9CiB9CkBAIC02NzQsNyArNjkwLDcgQEAKICAqCiAgKiBPbmUgY3B1c2V0IGlzIGEgc3Vic2V0IG9mIGFub3RoZXIgaWYgYWxsIGl0cyBhbGxvd2VkIENQVXMgYW5kCiAgKiBNZW1vcnkgTm9kZXMgYXJlIGEgc3Vic2V0IG9mIHRoZSBvdGhlciwgYW5kIGl0cyBleGNsdXNpdmUgZmxhZ3MKLSAqIGFyZSBvbmx5IHNldCBpZiB0aGUgb3RoZXIncyBhcmUgc2V0LiAgQ2FsbCBob2xkaW5nIG1hbmFnZV9zZW0uCisgKiBhcmUgb25seSBzZXQgaWYgdGhlIG90aGVyJ3MgYXJlIHNldC4gIENhbGwgaG9sZGluZyBtYW5hZ2VfbXV0ZXguCiAgKi8KIAogc3RhdGljIGludCBpc19jcHVzZXRfc3Vic2V0KGNvbnN0IHN0cnVjdCBjcHVzZXQgKnAsIGNvbnN0IHN0cnVjdCBjcHVzZXQgKnEpCkBAIC02OTIsNyArNzA4LDcgQEAKICAqIElmIHdlIHJlcGxhY2VkIHRoZSBmbGFnIGFuZCBtYXNrIHZhbHVlcyBvZiB0aGUgY3VycmVudCBjcHVzZXQKICAqIChjdXIpIHdpdGggdGhvc2UgdmFsdWVzIGluIHRoZSB0cmlhbCBjcHVzZXQgKHRyaWFsKSwgd291bGQKICAqIG91ciB2YXJpb3VzIHN1YnNldCBhbmQgZXhjbHVzaXZlIHJ1bGVzIHN0aWxsIGJlIHZhbGlkPyAgUHJlc3VtZXMKLSAqIG1hbmFnZV9zZW0gaGVsZC4KKyAqIG1hbmFnZV9tdXRleCBoZWxkLgogICoKICAqICdjdXInIGlzIHRoZSBhZGRyZXNzIG9mIGFuIGFjdHVhbCwgaW4tdXNlIGNwdXNldC4gIE9wZXJhdGlvbnMKICAqIHN1Y2ggYXMgbGlzdCB0cmF2ZXJzYWwgdGhhdCBkZXBlbmQgb24gdGhlIGFjdHVhbCBhZGRyZXNzIG9mIHRoZQpAQCAtNzQ2LDcgKzc2Miw3IEBACiAgKiAgICBleGNsdXNpdmUgY2hpbGQgY3B1c2V0cwogICogQnVpbGQgdGhlc2UgdHdvIHBhcnRpdGlvbnMgYnkgY2FsbGluZyBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucwogICoKLSAqIENhbGwgd2l0aCBtYW5hZ2Vfc2VtIGhlbGQuICBNYXkgbmVzdCBhIGNhbGwgdG8gdGhlCisgKiBDYWxsIHdpdGggbWFuYWdlX211dGV4IGhlbGQuICBNYXkgbmVzdCBhIGNhbGwgdG8gdGhlCiAgKiBsb2NrX2NwdV9ob3RwbHVnKCkvdW5sb2NrX2NwdV9ob3RwbHVnKCkgcGFpci4KICAqLwogCkBAIC03OTIsNyArODA4LDcgQEAKIH0KIAogLyoKLSAqIENhbGwgd2l0aCBtYW5hZ2Vfc2VtIGhlbGQuICBNYXkgdGFrZSBjYWxsYmFja19zZW0gZHVyaW5nIGNhbGwuCisgKiBDYWxsIHdpdGggbWFuYWdlX211dGV4IGhlbGQuICBNYXkgdGFrZSBjYWxsYmFja19tdXRleCBkdXJpbmcgY2FsbC4KICAqLwogCiBzdGF0aWMgaW50IHVwZGF0ZV9jcHVtYXNrKHN0cnVjdCBjcHVzZXQgKmNzLCBjaGFyICpidWYpCkBAIC04MTEsOSArODI3LDkgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAljcHVzX3VuY2hhbmdlZCA9IGNwdXNfZXF1YWwoY3MtPmNwdXNfYWxsb3dlZCwgdHJpYWxjcy5jcHVzX2FsbG93ZWQpOwotCWRvd24oJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCWNzLT5jcHVzX2FsbG93ZWQgPSB0cmlhbGNzLmNwdXNfYWxsb3dlZDsKLQl1cCgmY2FsbGJhY2tfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAlpZiAoaXNfY3B1X2V4Y2x1c2l2ZShjcykgJiYgIWNwdXNfdW5jaGFuZ2VkKQogCQl1cGRhdGVfY3B1X2RvbWFpbnMoY3MpOwogCXJldHVybiAwOwpAQCAtODI3LDcgKzg0Myw3IEBACiAgKiB0aGUgY3B1c2V0IGlzIG1hcmtlZCAnbWVtb3J5X21pZ3JhdGUnLCBtaWdyYXRlIHRoZSB0YXNrcwogICogcGFnZXMgdG8gdGhlIG5ldyBtZW1vcnkuCiAgKgotICogQ2FsbCB3aXRoIG1hbmFnZV9zZW0gaGVsZC4gIE1heSB0YWtlIGNhbGxiYWNrX3NlbSBkdXJpbmcgY2FsbC4KKyAqIENhbGwgd2l0aCBtYW5hZ2VfbXV0ZXggaGVsZC4gIE1heSB0YWtlIGNhbGxiYWNrX211dGV4IGR1cmluZyBjYWxsLgogICogV2lsbCB0YWtlIHRhc2tsaXN0X2xvY2ssIHNjYW4gdGFza2xpc3QgZm9yIHRhc2tzIGluIGNwdXNldCBjcywKICAqIGxvY2sgZWFjaCBzdWNoIHRhc2tzIG1tLT5tbWFwX3NlbSwgc2NhbiBpdHMgdm1hJ3MgYW5kIHJlYmluZAogICogdGhlaXIgbWVtcG9saWNpZXMgdG8gdGhlIGNwdXNldHMgbmV3IG1lbXNfYWxsb3dlZC4KQEAgLTg2MiwxMSArODc4LDEwIEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZG9uZTsKIAotCWRvd24oJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCWNzLT5tZW1zX2FsbG93ZWQgPSB0cmlhbGNzLm1lbXNfYWxsb3dlZDsKLQlhdG9taWNfaW5jKCZjcHVzZXRfbWVtc19nZW5lcmF0aW9uKTsKLQljcy0+bWVtc19nZW5lcmF0aW9uID0gYXRvbWljX3JlYWQoJmNwdXNldF9tZW1zX2dlbmVyYXRpb24pOwotCXVwKCZjYWxsYmFja19zZW0pOworCWNzLT5tZW1zX2dlbmVyYXRpb24gPSBjcHVzZXRfbWVtc19nZW5lcmF0aW9uKys7CisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKIAlzZXRfY3B1c2V0X2JlaW5nX3JlYm91bmQoY3MpOwkJLyogY2F1c2VzIG1wb2xfY29weSgpIHJlYmluZCAqLwogCkBAIC05MjIsNyArOTM3LDcgQEAKIAkgKiB0YXNrbGlzdF9sb2NrLiAgRm9ya3MgY2FuIGhhcHBlbiBhZ2FpbiBub3cgLSB0aGUgbXBvbF9jb3B5KCkKIAkgKiBjcHVzZXRfYmVpbmdfcmVib3VuZCBjaGVjayB3aWxsIGNhdGNoIHN1Y2ggZm9ya3MsIGFuZCByZWJpbmQKIAkgKiB0aGVpciB2bWEgbWVtcG9saWNpZXMgdG9vLiAgQmVjYXVzZSB3ZSBzdGlsbCBob2xkIHRoZSBnbG9iYWwKLQkgKiBjcHVzZXQgbWFuYWdlX3NlbSwgd2Uga25vdyB0aGF0IG5vIG90aGVyIHJlYmluZCBlZmZvcnQgd2lsbAorCSAqIGNwdXNldCBtYW5hZ2VfbXV0ZXgsIHdlIGtub3cgdGhhdCBubyBvdGhlciByZWJpbmQgZWZmb3J0IHdpbGwKIAkgKiBiZSBjb250ZW5kaW5nIGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlIGNwdXNldF9iZWluZ19yZWJvdW5kLgogCSAqIEl0J3Mgb2sgaWYgd2UgcmViaW5kIHRoZSBzYW1lIG1tIHR3aWNlOyBtcG9sX3JlYmluZF9tbSgpCiAJICogaXMgaWRlbXBvdGVudC4gIEFsc28gbWlncmF0ZSBwYWdlcyBpbiBlYWNoIG1tIHRvIG5ldyBub2Rlcy4KQEAgLTk0OCw3ICs5NjMsNyBAQAogfQogCiAvKgotICogQ2FsbCB3aXRoIG1hbmFnZV9zZW0gaGVsZC4KKyAqIENhbGwgd2l0aCBtYW5hZ2VfbXV0ZXggaGVsZC4KICAqLwogCiBzdGF0aWMgaW50IHVwZGF0ZV9tZW1vcnlfcHJlc3N1cmVfZW5hYmxlZChzdHJ1Y3QgY3B1c2V0ICpjcywgY2hhciAqYnVmKQpAQCAtOTYzLDExICs5NzgsMTIgQEAKIC8qCiAgKiB1cGRhdGVfZmxhZyAtIHJlYWQgYSAwIG9yIGEgMSBpbiBhIGZpbGUgYW5kIHVwZGF0ZSBhc3NvY2lhdGVkIGZsYWcKICAqIGJpdDoJdGhlIGJpdCB0byB1cGRhdGUgKENTX0NQVV9FWENMVVNJVkUsIENTX01FTV9FWENMVVNJVkUsCi0gKgkJCQlDU19OT1RJRllfT05fUkVMRUFTRSwgQ1NfTUVNT1JZX01JR1JBVEUpCisgKgkJCQlDU19OT1RJRllfT05fUkVMRUFTRSwgQ1NfTUVNT1JZX01JR1JBVEUsCisgKgkJCQlDU19TUFJFQURfUEFHRSwgQ1NfU1BSRUFEX1NMQUIpCiAgKiBjczoJdGhlIGNwdXNldCB0byB1cGRhdGUKICAqIGJ1ZjoJdGhlIGJ1ZmZlciB3aGVyZSB3ZSByZWFkIHRoZSAwIG9yIDEKICAqCi0gKiBDYWxsIHdpdGggbWFuYWdlX3NlbSBoZWxkLgorICogQ2FsbCB3aXRoIG1hbmFnZV9tdXRleCBoZWxkLgogICovCiAKIHN0YXRpYyBpbnQgdXBkYXRlX2ZsYWcoY3B1c2V0X2ZsYWdiaXRzX3QgYml0LCBzdHJ1Y3QgY3B1c2V0ICpjcywgY2hhciAqYnVmKQpAQCAtOTg5LDEyICsxMDA1LDEyIEBACiAJCXJldHVybiBlcnI7CiAJY3B1X2V4Y2x1c2l2ZV9jaGFuZ2VkID0KIAkJKGlzX2NwdV9leGNsdXNpdmUoY3MpICE9IGlzX2NwdV9leGNsdXNpdmUoJnRyaWFsY3MpKTsKLQlkb3duKCZjYWxsYmFja19zZW0pOworCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAlpZiAodHVybmluZ19vbikKIAkJc2V0X2JpdChiaXQsICZjcy0+ZmxhZ3MpOwogCWVsc2UKIAkJY2xlYXJfYml0KGJpdCwgJmNzLT5mbGFncyk7Ci0JdXAoJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKIAlpZiAoY3B1X2V4Y2x1c2l2ZV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIHVwZGF0ZV9jcHVfZG9tYWlucyhjcyk7CkBAIC0xMTA0LDcgKzExMjAsNyBAQAogICogd3JpdGluZyB0aGUgcGF0aCBvZiB0aGUgb2xkIGNwdXNldCBpbiAncHBhdGhidWYnIGlmIGl0IG5lZWRzIHRvIGJlCiAgKiBub3RpZmllZCBvbiByZWxlYXNlLgogICoKLSAqIENhbGwgaG9sZGluZyBtYW5hZ2Vfc2VtLiAgTWF5IHRha2UgY2FsbGJhY2tfc2VtIGFuZCB0YXNrX2xvY2sgb2YKKyAqIENhbGwgaG9sZGluZyBtYW5hZ2VfbXV0ZXguICBNYXkgdGFrZSBjYWxsYmFja19tdXRleCBhbmQgdGFza19sb2NrIG9mCiAgKiB0aGUgdGFzayAncGlkJyBkdXJpbmcgY2FsbC4KICAqLwogCkBAIC0xMTQ0LDEzICsxMTYwLDEzIEBACiAJCWdldF90YXNrX3N0cnVjdCh0c2spOwogCX0KIAotCWRvd24oJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCiAJdGFza19sb2NrKHRzayk7CiAJb2xkY3MgPSB0c2stPmNwdXNldDsKIAlpZiAoIW9sZGNzKSB7CiAJCXRhc2tfdW5sb2NrKHRzayk7Ci0JCXVwKCZjYWxsYmFja19zZW0pOworCQltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAkJcHV0X3Rhc2tfc3RydWN0KHRzayk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQpAQCAtMTE2NCw3ICsxMTgwLDcgQEAKIAlmcm9tID0gb2xkY3MtPm1lbXNfYWxsb3dlZDsKIAl0byA9IGNzLT5tZW1zX2FsbG93ZWQ7CiAKLQl1cCgmY2FsbGJhY2tfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAogCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKIAlpZiAobW0pIHsKQEAgLTExOTQsNiArMTIxMCw4IEBACiAJRklMRV9OT1RJRllfT05fUkVMRUFTRSwKIAlGSUxFX01FTU9SWV9QUkVTU1VSRV9FTkFCTEVELAogCUZJTEVfTUVNT1JZX1BSRVNTVVJFLAorCUZJTEVfU1BSRUFEX1BBR0UsCisJRklMRV9TUFJFQURfU0xBQiwKIAlGSUxFX1RBU0tMSVNULAogfSBjcHVzZXRfZmlsZXR5cGVfdDsKIApAQCAtMTIyMSw3ICsxMjM5LDcgQEAKIAl9CiAJYnVmZmVyW25ieXRlc10gPSAwOwkvKiBudWwtdGVybWluYXRlICovCiAKLQlkb3duKCZtYW5hZ2Vfc2VtKTsKKwltdXRleF9sb2NrKCZtYW5hZ2VfbXV0ZXgpOwogCiAJaWYgKGlzX3JlbW92ZWQoY3MpKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CkBAIC0xMjUzLDYgKzEyNzEsMTQgQEAKIAljYXNlIEZJTEVfTUVNT1JZX1BSRVNTVVJFOgogCQlyZXR2YWwgPSAtRUFDQ0VTOwogCQlicmVhazsKKwljYXNlIEZJTEVfU1BSRUFEX1BBR0U6CisJCXJldHZhbCA9IHVwZGF0ZV9mbGFnKENTX1NQUkVBRF9QQUdFLCBjcywgYnVmZmVyKTsKKwkJY3MtPm1lbXNfZ2VuZXJhdGlvbiA9IGNwdXNldF9tZW1zX2dlbmVyYXRpb24rKzsKKwkJYnJlYWs7CisJY2FzZSBGSUxFX1NQUkVBRF9TTEFCOgorCQlyZXR2YWwgPSB1cGRhdGVfZmxhZyhDU19TUFJFQURfU0xBQiwgY3MsIGJ1ZmZlcik7CisJCWNzLT5tZW1zX2dlbmVyYXRpb24gPSBjcHVzZXRfbWVtc19nZW5lcmF0aW9uKys7CisJCWJyZWFrOwogCWNhc2UgRklMRV9UQVNLTElTVDoKIAkJcmV0dmFsID0gYXR0YWNoX3Rhc2soY3MsIGJ1ZmZlciwgJnBhdGhidWYpOwogCQlicmVhazsKQEAgLTEyNjQsNyArMTI5MCw3IEBACiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR2YWwgPSBuYnl0ZXM7CiBvdXQyOgotCXVwKCZtYW5hZ2Vfc2VtKTsKKwltdXRleF91bmxvY2soJm1hbmFnZV9tdXRleCk7CiAJY3B1c2V0X3JlbGVhc2VfYWdlbnQocGF0aGJ1Zik7CiBvdXQxOgogCWtmcmVlKGJ1ZmZlcik7CkBAIC0xMzA0LDkgKzEzMzAsOSBAQAogewogCWNwdW1hc2tfdCBtYXNrOwogCi0JZG93bigmY2FsbGJhY2tfc2VtKTsKKwltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJbWFzayA9IGNzLT5jcHVzX2FsbG93ZWQ7Ci0JdXAoJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKIAlyZXR1cm4gY3B1bGlzdF9zY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCBtYXNrKTsKIH0KQEAgLTEzMTUsOSArMTM0MSw5IEBACiB7CiAJbm9kZW1hc2tfdCBtYXNrOwogCi0JZG93bigmY2FsbGJhY2tfc2VtKTsKKwltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJbWFzayA9IGNzLT5tZW1zX2FsbG93ZWQ7Ci0JdXAoJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKIAlyZXR1cm4gbm9kZWxpc3Rfc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgbWFzayk7CiB9CkBAIC0xMzYyLDYgKzEzODgsMTIgQEAKIAljYXNlIEZJTEVfTUVNT1JZX1BSRVNTVVJFOgogCQlzICs9IHNwcmludGYocywgIiVkIiwgZm1ldGVyX2dldHJhdGUoJmNzLT5mbWV0ZXIpKTsKIAkJYnJlYWs7CisJY2FzZSBGSUxFX1NQUkVBRF9QQUdFOgorCQkqcysrID0gaXNfc3ByZWFkX3BhZ2UoY3MpID8gJzEnIDogJzAnOworCQlicmVhazsKKwljYXNlIEZJTEVfU1BSRUFEX1NMQUI6CisJCSpzKysgPSBpc19zcHJlYWRfc2xhYihjcykgPyAnMScgOiAnMCc7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtMTU5OCw3ICsxNjMwLDcgQEAKICAqIEhhbmRsZSBhbiBvcGVuIG9uICd0YXNrcycgZmlsZS4gIFByZXBhcmUgYSBidWZmZXIgbGlzdGluZyB0aGUKICAqIHByb2Nlc3MgaWQncyBvZiB0YXNrcyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIGNwdXNldCBiZWluZyBvcGVuZWQuCiAgKgotICogRG9lcyBub3QgcmVxdWlyZSBhbnkgc3BlY2lmaWMgY3B1c2V0IHNlbWFwaG9yZXMsIGFuZCBkb2VzIG5vdCB0YWtlIGFueS4KKyAqIERvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpZmljIGNwdXNldCBtdXRleGVzLCBhbmQgZG9lcyBub3QgdGFrZSBhbnkuCiAgKi8KIHN0YXRpYyBpbnQgY3B1c2V0X3Rhc2tzX29wZW4oc3RydWN0IGlub2RlICp1bnVzZWQsIHN0cnVjdCBmaWxlICpmaWxlKQogewpAQCAtMTcyNSw2ICsxNzU3LDE2IEBACiAJLnByaXZhdGUgPSBGSUxFX01FTU9SWV9QUkVTU1VSRSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9zcHJlYWRfcGFnZSA9IHsKKwkubmFtZSA9ICJtZW1vcnlfc3ByZWFkX3BhZ2UiLAorCS5wcml2YXRlID0gRklMRV9TUFJFQURfUEFHRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9zcHJlYWRfc2xhYiA9IHsKKwkubmFtZSA9ICJtZW1vcnlfc3ByZWFkX3NsYWIiLAorCS5wcml2YXRlID0gRklMRV9TUFJFQURfU0xBQiwKK307CisKIHN0YXRpYyBpbnQgY3B1c2V0X3BvcHVsYXRlX2RpcihzdHJ1Y3QgZGVudHJ5ICpjc19kZW50cnkpCiB7CiAJaW50IGVycjsKQEAgLTE3NDMsNiArMTc4NSwxMCBAQAogCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gY3B1c2V0X2FkZF9maWxlKGNzX2RlbnRyeSwgJmNmdF9tZW1vcnlfcHJlc3N1cmUpKSA8IDApCiAJCXJldHVybiBlcnI7CisJaWYgKChlcnIgPSBjcHVzZXRfYWRkX2ZpbGUoY3NfZGVudHJ5LCAmY2Z0X3NwcmVhZF9wYWdlKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCWlmICgoZXJyID0gY3B1c2V0X2FkZF9maWxlKGNzX2RlbnRyeSwgJmNmdF9zcHJlYWRfc2xhYikpIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IGNwdXNldF9hZGRfZmlsZShjc19kZW50cnksICZjZnRfdGFza3MpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CkBAIC0xNzU0LDcgKzE4MDAsNyBAQAogICoJbmFtZToJCW5hbWUgb2YgdGhlIG5ldyBjcHVzZXQuIFdpbGwgYmUgc3RyY3B5J2VkLgogICoJbW9kZToJCW1vZGUgdG8gc2V0IG9uIG5ldyBpbm9kZQogICoKLSAqCU11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNlbWFwaG9yZSBvbiB0aGUgcGFyZW50IGlub2RlIGhlbGQKKyAqCU11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG11dGV4IG9uIHRoZSBwYXJlbnQgaW5vZGUgaGVsZAogICovCiAKIHN0YXRpYyBsb25nIGNwdXNldF9jcmVhdGUoc3RydWN0IGNwdXNldCAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSkKQEAgLTE3NjYsNDQgKzE4MTIsNDcgQEAKIAlpZiAoIWNzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRvd24oJm1hbmFnZV9zZW0pOworCW11dGV4X2xvY2soJm1hbmFnZV9tdXRleCk7CiAJY3B1c2V0X3VwZGF0ZV90YXNrX21lbW9yeV9zdGF0ZSgpOwogCWNzLT5mbGFncyA9IDA7CiAJaWYgKG5vdGlmeV9vbl9yZWxlYXNlKHBhcmVudCkpCiAJCXNldF9iaXQoQ1NfTk9USUZZX09OX1JFTEVBU0UsICZjcy0+ZmxhZ3MpOworCWlmIChpc19zcHJlYWRfcGFnZShwYXJlbnQpKQorCQlzZXRfYml0KENTX1NQUkVBRF9QQUdFLCAmY3MtPmZsYWdzKTsKKwlpZiAoaXNfc3ByZWFkX3NsYWIocGFyZW50KSkKKwkJc2V0X2JpdChDU19TUFJFQURfU0xBQiwgJmNzLT5mbGFncyk7CiAJY3MtPmNwdXNfYWxsb3dlZCA9IENQVV9NQVNLX05PTkU7CiAJY3MtPm1lbXNfYWxsb3dlZCA9IE5PREVfTUFTS19OT05FOwogCWF0b21pY19zZXQoJmNzLT5jb3VudCwgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNzLT5zaWJsaW5nKTsKIAlJTklUX0xJU1RfSEVBRCgmY3MtPmNoaWxkcmVuKTsKLQlhdG9taWNfaW5jKCZjcHVzZXRfbWVtc19nZW5lcmF0aW9uKTsKLQljcy0+bWVtc19nZW5lcmF0aW9uID0gYXRvbWljX3JlYWQoJmNwdXNldF9tZW1zX2dlbmVyYXRpb24pOworCWNzLT5tZW1zX2dlbmVyYXRpb24gPSBjcHVzZXRfbWVtc19nZW5lcmF0aW9uKys7CiAJZm1ldGVyX2luaXQoJmNzLT5mbWV0ZXIpOwogCiAJY3MtPnBhcmVudCA9IHBhcmVudDsKIAotCWRvd24oJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCWxpc3RfYWRkKCZjcy0+c2libGluZywgJmNzLT5wYXJlbnQtPmNoaWxkcmVuKTsKIAludW1iZXJfb2ZfY3B1c2V0cysrOwotCXVwKCZjYWxsYmFja19zZW0pOworCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCiAJZXJyID0gY3B1c2V0X2NyZWF0ZV9kaXIoY3MsIG5hbWUsIG1vZGUpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjsKIAogCS8qCi0JICogUmVsZWFzZSBtYW5hZ2Vfc2VtIGJlZm9yZSBjcHVzZXRfcG9wdWxhdGVfZGlyKCkgYmVjYXVzZSBpdAorCSAqIFJlbGVhc2UgbWFuYWdlX211dGV4IGJlZm9yZSBjcHVzZXRfcG9wdWxhdGVfZGlyKCkgYmVjYXVzZSBpdAogCSAqIHdpbGwgZG93bigpIHRoaXMgbmV3IGRpcmVjdG9yeSdzIGlfbXV0ZXggYW5kIGlmIHdlIHJhY2Ugd2l0aAogCSAqIGFub3RoZXIgbWtkaXIsIHdlIG1pZ2h0IGRlYWRsb2NrLgogCSAqLwotCXVwKCZtYW5hZ2Vfc2VtKTsKKwltdXRleF91bmxvY2soJm1hbmFnZV9tdXRleCk7CiAKIAllcnIgPSBjcHVzZXRfcG9wdWxhdGVfZGlyKGNzLT5kZW50cnkpOwogCS8qIElmIGVyciA8IDAsIHdlIGhhdmUgYSBoYWxmLWZpbGxlZCBkaXJlY3RvcnkgLSBvaCB3ZWxsIDspICovCiAJcmV0dXJuIDA7CiBlcnI6CiAJbGlzdF9kZWwoJmNzLT5zaWJsaW5nKTsKLQl1cCgmbWFuYWdlX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZtYW5hZ2VfbXV0ZXgpOwogCWtmcmVlKGNzKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTgyNSwxOCArMTg3NCwxOCBAQAogCiAJLyogdGhlIHZmcyBob2xkcyBib3RoIGlub2RlLT5pX211dGV4IGFscmVhZHkgKi8KIAotCWRvd24oJm1hbmFnZV9zZW0pOworCW11dGV4X2xvY2soJm1hbmFnZV9tdXRleCk7CiAJY3B1c2V0X3VwZGF0ZV90YXNrX21lbW9yeV9zdGF0ZSgpOwogCWlmIChhdG9taWNfcmVhZCgmY3MtPmNvdW50KSA+IDApIHsKLQkJdXAoJm1hbmFnZV9zZW0pOworCQltdXRleF91bmxvY2soJm1hbmFnZV9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWlmICghbGlzdF9lbXB0eSgmY3MtPmNoaWxkcmVuKSkgewotCQl1cCgmbWFuYWdlX3NlbSk7CisJCW11dGV4X3VubG9jaygmbWFuYWdlX211dGV4KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJcGFyZW50ID0gY3MtPnBhcmVudDsKLQlkb3duKCZjYWxsYmFja19zZW0pOworCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAlzZXRfYml0KENTX1JFTU9WRUQsICZjcy0+ZmxhZ3MpOwogCWlmIChpc19jcHVfZXhjbHVzaXZlKGNzKSkKIAkJdXBkYXRlX2NwdV9kb21haW5zKGNzKTsKQEAgLTE4NDgsMTAgKzE4OTcsMTAgQEAKIAljcHVzZXRfZF9yZW1vdmVfZGlyKGQpOwogCWRwdXQoZCk7CiAJbnVtYmVyX29mX2NwdXNldHMtLTsKLQl1cCgmY2FsbGJhY2tfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAlpZiAobGlzdF9lbXB0eSgmcGFyZW50LT5jaGlsZHJlbikpCiAJCWNoZWNrX2Zvcl9yZWxlYXNlKHBhcmVudCwgJnBhdGhidWYpOwotCXVwKCZtYW5hZ2Vfc2VtKTsKKwltdXRleF91bmxvY2soJm1hbmFnZV9tdXRleCk7CiAJY3B1c2V0X3JlbGVhc2VfYWdlbnQocGF0aGJ1Zik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODY3LDcgKzE5MTYsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAogCXRzay0+Y3B1c2V0ID0gJnRvcF9jcHVzZXQ7Ci0JdHNrLT5jcHVzZXQtPm1lbXNfZ2VuZXJhdGlvbiA9IGF0b21pY19yZWFkKCZjcHVzZXRfbWVtc19nZW5lcmF0aW9uKTsKKwl0c2stPmNwdXNldC0+bWVtc19nZW5lcmF0aW9uID0gY3B1c2V0X21lbXNfZ2VuZXJhdGlvbisrOwogCXJldHVybiAwOwogfQogCkBAIC0xODg2LDggKzE5MzUsNyBAQAogCXRvcF9jcHVzZXQubWVtc19hbGxvd2VkID0gTk9ERV9NQVNLX0FMTDsKIAogCWZtZXRlcl9pbml0KCZ0b3BfY3B1c2V0LmZtZXRlcik7Ci0JYXRvbWljX2luYygmY3B1c2V0X21lbXNfZ2VuZXJhdGlvbik7Ci0JdG9wX2NwdXNldC5tZW1zX2dlbmVyYXRpb24gPSBhdG9taWNfcmVhZCgmY3B1c2V0X21lbXNfZ2VuZXJhdGlvbik7CisJdG9wX2NwdXNldC5tZW1zX2dlbmVyYXRpb24gPSBjcHVzZXRfbWVtc19nZW5lcmF0aW9uKys7CiAKIAlpbml0X3Rhc2suY3B1c2V0ID0gJnRvcF9jcHVzZXQ7CiAKQEAgLTE5NjAsMjUgKzIwMDgsMjUgQEAKICAqIERlc2NyaXB0aW9uOiBEZXRhY2ggY3B1c2V0IGZyb20gQHRzayBhbmQgcmVsZWFzZSBpdC4KICAqCiAgKiBOb3RlIHRoYXQgY3B1c2V0cyBtYXJrZWQgbm90aWZ5X29uX3JlbGVhc2UgZm9yY2UgZXZlcnkgdGFzayBpbgotICogdGhlbSB0byB0YWtlIHRoZSBnbG9iYWwgbWFuYWdlX3NlbSBzZW1hcGhvcmUgd2hlbiBleGl0aW5nLgorICogdGhlbSB0byB0YWtlIHRoZSBnbG9iYWwgbWFuYWdlX211dGV4IG11dGV4IHdoZW4gZXhpdGluZy4KICAqIFRoaXMgY291bGQgaW1wYWN0IHNjYWxpbmcgb24gdmVyeSBsYXJnZSBzeXN0ZW1zLiAgQmUgcmVsdWN0YW50IHRvCiAgKiB1c2Ugbm90aWZ5X29uX3JlbGVhc2UgY3B1c2V0cyB3aGVyZSB2ZXJ5IGhpZ2ggdGFzayBleGl0IHNjYWxpbmcKICAqIGlzIHJlcXVpcmVkIG9uIGxhcmdlIHN5c3RlbXMuCiAgKgogICogRG9uJ3QgZXZlbiB0aGluayBhYm91dCBkZXJlZmVuY2luZyAnY3MnIGFmdGVyIHRoZSBjcHVzZXQgdXNlIGNvdW50Ci0gKiBnb2VzIHRvIHplcm8sIGV4Y2VwdCBpbnNpZGUgYSBjcml0aWNhbCBzZWN0aW9uIGd1YXJkZWQgYnkgbWFuYWdlX3NlbQotICogb3IgY2FsbGJhY2tfc2VtLiAgIE90aGVyd2lzZSBhIHplcm8gY3B1c2V0IHVzZSBjb3VudCBpcyBhIGxpY2Vuc2UgdG8KKyAqIGdvZXMgdG8gemVybywgZXhjZXB0IGluc2lkZSBhIGNyaXRpY2FsIHNlY3Rpb24gZ3VhcmRlZCBieSBtYW5hZ2VfbXV0ZXgKKyAqIG9yIGNhbGxiYWNrX211dGV4LiAgIE90aGVyd2lzZSBhIHplcm8gY3B1c2V0IHVzZSBjb3VudCBpcyBhIGxpY2Vuc2UgdG8KICAqIGFueSBvdGhlciB0YXNrIHRvIG51a2UgdGhlIGNwdXNldCBpbW1lZGlhdGVseSwgdmlhIGNwdXNldF9ybWRpcigpLgogICoKLSAqIFRoaXMgcm91dGluZSBoYXMgdG8gdGFrZSBtYW5hZ2Vfc2VtLCBub3QgY2FsbGJhY2tfc2VtLCBiZWNhdXNlCi0gKiBpdCBpcyBob2xkaW5nIHRoYXQgc2VtYXBob3JlIHdoaWxlIGNhbGxpbmcgY2hlY2tfZm9yX3JlbGVhc2UoKSwKLSAqIHdoaWNoIGNhbGxzIGttYWxsb2MoKSwgc28gY2FuJ3QgYmUgY2FsbGVkIGhvbGRpbmcgY2FsbGJhY2tfX3NlbSgpLgorICogVGhpcyByb3V0aW5lIGhhcyB0byB0YWtlIG1hbmFnZV9tdXRleCwgbm90IGNhbGxiYWNrX211dGV4LCBiZWNhdXNlCisgKiBpdCBpcyBob2xkaW5nIHRoYXQgbXV0ZXggd2hpbGUgY2FsbGluZyBjaGVja19mb3JfcmVsZWFzZSgpLAorICogd2hpY2ggY2FsbHMga21hbGxvYygpLCBzbyBjYW4ndCBiZSBjYWxsZWQgaG9sZGluZyBjYWxsYmFja19tdXRleCgpLgogICoKICAqIFdlIGRvbid0IG5lZWQgdG8gdGFza19sb2NrKCkgdGhpcyByZWZlcmVuY2UgdG8gdHNrLT5jcHVzZXQsCiAgKiBiZWNhdXNlIHRzayBpcyBhbHJlYWR5IG1hcmtlZCBQRl9FWElUSU5HLCBzbyBhdHRhY2hfdGFzaygpIHdvbid0CiAgKiBtZXNzIHdpdGggaXQsIG9yIHRhc2sgaXMgYSBmYWlsZWQgZm9yaywgbmV2ZXIgdmlzaWJsZSB0byBhdHRhY2hfdGFzay4KICAqCi0gKiBIYWNrOgorICogdGhlX3RvcF9jcHVzZXRfaGFjazoKICAqCiAgKiAgICBTZXQgdGhlIGV4aXRpbmcgdGFza3MgY3B1c2V0IHRvIHRoZSByb290IGNwdXNldCAodG9wX2NwdXNldCkuCiAgKgpAQCAtMjAxNywxNSArMjA2NSwxNSBAQAogCXN0cnVjdCBjcHVzZXQgKmNzOwogCiAJY3MgPSB0c2stPmNwdXNldDsKLQl0c2stPmNwdXNldCA9ICZ0b3BfY3B1c2V0OwkvKiBIYWNrIC0gc2VlIGNvbW1lbnQgYWJvdmUgKi8KKwl0c2stPmNwdXNldCA9ICZ0b3BfY3B1c2V0OwkvKiB0aGVfdG9wX2NwdXNldF9oYWNrIC0gc2VlIGFib3ZlICovCiAKIAlpZiAobm90aWZ5X29uX3JlbGVhc2UoY3MpKSB7CiAJCWNoYXIgKnBhdGhidWYgPSBOVUxMOwogCi0JCWRvd24oJm1hbmFnZV9zZW0pOworCQltdXRleF9sb2NrKCZtYW5hZ2VfbXV0ZXgpOwogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3MtPmNvdW50KSkKIAkJCWNoZWNrX2Zvcl9yZWxlYXNlKGNzLCAmcGF0aGJ1Zik7Ci0JCXVwKCZtYW5hZ2Vfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZtYW5hZ2VfbXV0ZXgpOwogCQljcHVzZXRfcmVsZWFzZV9hZ2VudChwYXRoYnVmKTsKIAl9IGVsc2UgewogCQlhdG9taWNfZGVjKCZjcy0+Y291bnQpOwpAQCAtMjA0NiwxMSArMjA5NCwxMSBAQAogewogCWNwdW1hc2tfdCBtYXNrOwogCi0JZG93bigmY2FsbGJhY2tfc2VtKTsKKwltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJdGFza19sb2NrKHRzayk7CiAJZ3VhcmFudGVlX29ubGluZV9jcHVzKHRzay0+Y3B1c2V0LCAmbWFzayk7CiAJdGFza191bmxvY2sodHNrKTsKLQl1cCgmY2FsbGJhY2tfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAogCXJldHVybiBtYXNrOwogfQpAQCAtMjA3NCwxMSArMjEyMiwxMSBAQAogewogCW5vZGVtYXNrX3QgbWFzazsKIAotCWRvd24oJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCXRhc2tfbG9jayh0c2spOwogCWd1YXJhbnRlZV9vbmxpbmVfbWVtcyh0c2stPmNwdXNldCwgJm1hc2spOwogCXRhc2tfdW5sb2NrKHRzayk7Ci0JdXAoJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKIAlyZXR1cm4gbWFzazsKIH0KQEAgLTIxMDQsNyArMjE1Miw3IEBACiAKIC8qCiAgKiBuZWFyZXN0X2V4Y2x1c2l2ZV9hbmNlc3RvcigpIC0gUmV0dXJucyB0aGUgbmVhcmVzdCBtZW1fZXhjbHVzaXZlCi0gKiBhbmNlc3RvciB0byB0aGUgc3BlY2lmaWVkIGNwdXNldC4gIENhbGwgaG9sZGluZyBjYWxsYmFja19zZW0uCisgKiBhbmNlc3RvciB0byB0aGUgc3BlY2lmaWVkIGNwdXNldC4gIENhbGwgaG9sZGluZyBjYWxsYmFja19tdXRleC4KICAqIElmIG5vIGFuY2VzdG9yIGlzIG1lbV9leGNsdXNpdmUgKGFuIHVudXN1YWwgY29uZmlndXJhdGlvbiksIHRoZW4KICAqIHJldHVybnMgdGhlIHJvb3QgY3B1c2V0LgogICovCkBAIC0yMTMxLDEyICsyMTc5LDEyIEBACiAgKiBHRlBfS0VSTkVMIGFsbG9jYXRpb25zIGFyZSBub3Qgc28gbWFya2VkLCBzbyBjYW4gZXNjYXBlIHRvIHRoZQogICogbmVhcmVzdCBtZW1fZXhjbHVzaXZlIGFuY2VzdG9yIGNwdXNldC4KICAqCi0gKiBTY2FubmluZyB1cCBwYXJlbnQgY3B1c2V0cyByZXF1aXJlcyBjYWxsYmFja19zZW0uICBUaGUgX19hbGxvY19wYWdlcygpCisgKiBTY2FubmluZyB1cCBwYXJlbnQgY3B1c2V0cyByZXF1aXJlcyBjYWxsYmFja19tdXRleC4gIFRoZSBfX2FsbG9jX3BhZ2VzKCkKICAqIHJvdXRpbmUgb25seSBjYWxscyBoZXJlIHdpdGggX19HRlBfSEFSRFdBTEwgYml0IF9ub3RfIHNldCBpZgogICogaXQncyBhIEdGUF9LRVJORUwgYWxsb2NhdGlvbiwgYW5kIGFsbCBub2RlcyBpbiB0aGUgY3VycmVudCB0YXNrcwogICogbWVtc19hbGxvd2VkIGNhbWUgdXAgZW1wdHkgb24gdGhlIGZpcnN0IHBhc3Mgb3ZlciB0aGUgem9uZWxpc3QuCiAgKiBTbyBvbmx5IEdGUF9LRVJORUwgYWxsb2NhdGlvbnMsIGlmIGFsbCBub2RlcyBpbiB0aGUgY3B1c2V0IGFyZQotICogc2hvcnQgb2YgbWVtb3J5LCBtaWdodCByZXF1aXJlIHRha2luZyB0aGUgY2FsbGJhY2tfc2VtIHNlbWFwaG9yZS4KKyAqIHNob3J0IG9mIG1lbW9yeSwgbWlnaHQgcmVxdWlyZSB0YWtpbmcgdGhlIGNhbGxiYWNrX211dGV4IG11dGV4LgogICoKICAqIFRoZSBmaXJzdCBsb29wIG92ZXIgdGhlIHpvbmVsaXN0IGluIG1tL3BhZ2VfYWxsb2MuYzpfX2FsbG9jX3BhZ2VzKCkKICAqIGNhbGxzIGhlcmUgd2l0aCBfX0dGUF9IQVJEV0FMTCBhbHdheXMgc2V0IGluIGdmcF9tYXNrLCBlbmZvcmNpbmcKQEAgLTIxNTcsNyArMjIwNSw3IEBACiB7CiAJaW50IG5vZGU7CQkJLyogbm9kZSB0aGF0IHpvbmUgeiBpcyBvbiAqLwogCWNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzOwkvKiBjdXJyZW50IGNwdXNldCBhbmNlc3RvcnMgKi8KLQlpbnQgYWxsb3dlZCA9IDE7CQkvKiBpcyBhbGxvY2F0aW9uIGluIHpvbmUgeiBhbGxvd2VkPyAqLworCWludCBhbGxvd2VkOwkJCS8qIGlzIGFsbG9jYXRpb24gaW4gem9uZSB6IGFsbG93ZWQ/ICovCiAKIAlpZiAoaW5faW50ZXJydXB0KCkpCiAJCXJldHVybiAxOwpAQCAtMjE3MSwzMSArMjIxOSwzMSBAQAogCQlyZXR1cm4gMTsKIAogCS8qIE5vdCBoYXJkd2FsbCBhbmQgbm9kZSBvdXRzaWRlIG1lbXNfYWxsb3dlZDogc2NhbiB1cCBjcHVzZXRzICovCi0JZG93bigmY2FsbGJhY2tfc2VtKTsKKwltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKIAl0YXNrX2xvY2soY3VycmVudCk7CiAJY3MgPSBuZWFyZXN0X2V4Y2x1c2l2ZV9hbmNlc3RvcihjdXJyZW50LT5jcHVzZXQpOwogCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwogCiAJYWxsb3dlZCA9IG5vZGVfaXNzZXQobm9kZSwgY3MtPm1lbXNfYWxsb3dlZCk7Ci0JdXAoJmNhbGxiYWNrX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJcmV0dXJuIGFsbG93ZWQ7CiB9CiAKIC8qKgogICogY3B1c2V0X2xvY2sgLSBsb2NrIG91dCBhbnkgY2hhbmdlcyB0byBjcHVzZXQgc3RydWN0dXJlcwogICoKLSAqIFRoZSBvdXQgb2YgbWVtb3J5IChvb20pIGNvZGUgbmVlZHMgdG8gbG9jayBkb3duIGNwdXNldHMKKyAqIFRoZSBvdXQgb2YgbWVtb3J5IChvb20pIGNvZGUgbmVlZHMgdG8gbXV0ZXhfbG9jayBjcHVzZXRzCiAgKiBmcm9tIGJlaW5nIGNoYW5nZWQgd2hpbGUgaXQgc2NhbnMgdGhlIHRhc2tsaXN0IGxvb2tpbmcgZm9yIGEKLSAqIHRhc2sgaW4gYW4gb3ZlcmxhcHBpbmcgY3B1c2V0LiAgRXhwb3NlIGNhbGxiYWNrX3NlbSB2aWEgdGhpcworICogdGFzayBpbiBhbiBvdmVybGFwcGluZyBjcHVzZXQuICBFeHBvc2UgY2FsbGJhY2tfbXV0ZXggdmlhIHRoaXMKICAqIGNwdXNldF9sb2NrKCkgcm91dGluZSwgc28gdGhlIG9vbSBjb2RlIGNhbiBsb2NrIGl0LCBiZWZvcmUKICAqIGxvY2tpbmcgdGhlIHRhc2sgbGlzdC4gIFRoZSB0YXNrbGlzdF9sb2NrIGlzIGEgc3BpbmxvY2ssIHNvCi0gKiBtdXN0IGJlIHRha2VuIGluc2lkZSBjYWxsYmFja19zZW0uCisgKiBtdXN0IGJlIHRha2VuIGluc2lkZSBjYWxsYmFja19tdXRleC4KICAqLwogCiB2b2lkIGNwdXNldF9sb2NrKHZvaWQpCiB7Ci0JZG93bigmY2FsbGJhY2tfc2VtKTsKKwltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiB9CiAKIC8qKgpAQCAtMjIwNiwxMCArMjI1NCw0OCBAQAogCiB2b2lkIGNwdXNldF91bmxvY2sodm9pZCkKIHsKLQl1cCgmY2FsbGJhY2tfc2VtKTsKKwltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIH0KIAogLyoqCisgKiBjcHVzZXRfbWVtX3NwcmVhZF9ub2RlKCkgLSBPbiB3aGljaCBub2RlIHRvIGJlZ2luIHNlYXJjaCBmb3IgYSBwYWdlCisgKgorICogSWYgYSB0YXNrIGlzIG1hcmtlZCBQRl9TUFJFQURfUEFHRSBvciBQRl9TUFJFQURfU0xBQiAoYXMgZm9yCisgKiB0YXNrcyBpbiBhIGNwdXNldCB3aXRoIGlzX3NwcmVhZF9wYWdlIG9yIGlzX3NwcmVhZF9zbGFiIHNldCksCisgKiBhbmQgaWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHVzZWQgY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpCisgKiB0byBkZXRlcm1pbmUgb24gd2hpY2ggbm9kZSB0byBzdGFydCBsb29raW5nLCBhcyBpdCB3aWxsIGZvcgorICogY2VydGFpbiBwYWdlIGNhY2hlIG9yIHNsYWIgY2FjaGUgcGFnZXMgc3VjaCBhcyB1c2VkIGZvciBmaWxlCisgKiBzeXN0ZW0gYnVmZmVycyBhbmQgaW5vZGUgY2FjaGVzLCB0aGVuIGluc3RlYWQgb2Ygc3RhcnRpbmcgb24gdGhlCisgKiBsb2NhbCBub2RlIHRvIGxvb2sgZm9yIGEgZnJlZSBwYWdlLCByYXRoZXIgc3ByZWFkIHRoZSBzdGFydGluZworICogbm9kZSBhcm91bmQgdGhlIHRhc2tzIG1lbXNfYWxsb3dlZCBub2Rlcy4KKyAqCisgKiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSByZXR1cm5lZCBub2RlIGJlaW5nIG9mZmxpbmUKKyAqIGJlY2F1c2UgIml0IGNhbid0IGhhcHBlbiIsIGFuZCBldmVuIGlmIGl0IGRpZCwgaXQgd291bGQgYmUgb2suCisgKgorICogVGhlIHJvdXRpbmVzIGNhbGxpbmcgZ3VhcmFudGVlX29ubGluZV9tZW1zKCkgYXJlIGNhcmVmdWwgdG8KKyAqIG9ubHkgc2V0IG5vZGVzIGluIHRhc2stPm1lbXNfYWxsb3dlZCB0aGF0IGFyZSBvbmxpbmUuICBTbyBpdAorICogc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHJldHVybiBhbgorICogb2ZmbGluZSBub2RlLiAgQnV0IGlmIGl0IGRpZCwgdGhhdCB3b3VsZCBiZSBvaywgYXMgdGhpcyByb3V0aW5lCisgKiBpcyBub3QgcmV0dXJuaW5nIHRoZSBub2RlIHdoZXJlIHRoZSBhbGxvY2F0aW9uIG11c3QgYmUsIG9ubHkKKyAqIHRoZSBub2RlIHdoZXJlIHRoZSBzZWFyY2ggc2hvdWxkIHN0YXJ0LiAgVGhlIHpvbmVsaXN0IHBhc3NlZCB0bworICogX19hbGxvY19wYWdlcygpIHdpbGwgaW5jbHVkZSBhbGwgbm9kZXMuICBJZiB0aGUgc2xhYiBhbGxvY2F0b3IKKyAqIGlzIHBhc3NlZCBhbiBvZmZsaW5lIG5vZGUsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBsb2NhbCBub2RlLgorICogU2VlIGttZW1fY2FjaGVfYWxsb2Nfbm9kZSgpLgorICovCisKK2ludCBjcHVzZXRfbWVtX3NwcmVhZF9ub2RlKHZvaWQpCit7CisJaW50IG5vZGU7CisKKwlub2RlID0gbmV4dF9ub2RlKGN1cnJlbnQtPmNwdXNldF9tZW1fc3ByZWFkX3JvdG9yLCBjdXJyZW50LT5tZW1zX2FsbG93ZWQpOworCWlmIChub2RlID09IE1BWF9OVU1OT0RFUykKKwkJbm9kZSA9IGZpcnN0X25vZGUoY3VycmVudC0+bWVtc19hbGxvd2VkKTsKKwljdXJyZW50LT5jcHVzZXRfbWVtX3NwcmVhZF9yb3RvciA9IG5vZGU7CisJcmV0dXJuIG5vZGU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcHVzZXRfbWVtX3NwcmVhZF9ub2RlKTsKKworLyoqCiAgKiBjcHVzZXRfZXhjbF9ub2Rlc19vdmVybGFwIC0gRG8gd2Ugb3ZlcmxhcCBAcCdzIG1lbV9leGNsdXNpdmUgYW5jZXN0b3JzPwogICogQHA6IHBvaW50ZXIgdG8gdGFza19zdHJ1Y3Qgb2Ygc29tZSBvdGhlciB0YXNrLgogICoKQEAgLTIyMTgsNyArMjMwNCw3IEBACiAgKiBkZXRlcm1pbmUgaWYgdGFzayBAcCdzIG1lbW9yeSB1c2FnZSBtaWdodCBpbXBhY3QgdGhlIG1lbW9yeQogICogYXZhaWxhYmxlIHRvIHRoZSBjdXJyZW50IHRhc2suCiAgKgotICogQ2FsbCB3aGlsZSBob2xkaW5nIGNhbGxiYWNrX3NlbS4KKyAqIENhbGwgd2hpbGUgaG9sZGluZyBjYWxsYmFja19tdXRleC4KICAqKi8KIAogaW50IGNwdXNldF9leGNsX25vZGVzX292ZXJsYXAoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMjI4OSwxMyArMjM3NSwxMyBAQAogICogIC0gVXNlZCBmb3IgL3Byb2MvPHBpZD4vY3B1c2V0LgogICogIC0gTm8gbmVlZCB0byB0YXNrX2xvY2sodHNrKSBvbiB0aGlzIHRzay0+Y3B1c2V0IHJlZmVyZW5jZSwgYXMgaXQKICAqICAgIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiB0c2stPmNwdXNldCBjaGFuZ2VzIGFmdGVyIHdlIHJlYWQgaXQsCi0gKiAgICBhbmQgd2UgdGFrZSBtYW5hZ2Vfc2VtLCBrZWVwaW5nIGF0dGFjaF90YXNrKCkgZnJvbSBjaGFuZ2luZyBpdAotICogICAgYW55d2F5LgorICogICAgYW5kIHdlIHRha2UgbWFuYWdlX211dGV4LCBrZWVwaW5nIGF0dGFjaF90YXNrKCkgZnJvbSBjaGFuZ2luZyBpdAorICogICAgYW55d2F5LiAgTm8gbmVlZCB0byBjaGVjayB0aGF0IHRzay0+Y3B1c2V0ICE9IE5VTEwsIHRoYW5rcyB0bworICogICAgdGhlX3RvcF9jcHVzZXRfaGFjayBpbiBjcHVzZXRfZXhpdCgpLCB3aGljaCBzZXRzIGFuIGV4aXRpbmcgdGFza3MKKyAqICAgIGNwdXNldCB0byB0b3BfY3B1c2V0LgogICovCi0KIHN0YXRpYyBpbnQgcHJvY19jcHVzZXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IGNwdXNldCAqY3M7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJY2hhciAqYnVmOwogCWludCByZXR2YWwgPSAwOwpAQCAtMjMwNSwyMCArMjM5MSwxNCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXRzayA9IG0tPnByaXZhdGU7Ci0JZG93bigmbWFuYWdlX3NlbSk7Ci0JY3MgPSB0c2stPmNwdXNldDsKLQlpZiAoIWNzKSB7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldHZhbCA9IGNwdXNldF9wYXRoKGNzLCBidWYsIFBBR0VfU0laRSk7CisJbXV0ZXhfbG9jaygmbWFuYWdlX211dGV4KTsKKwlyZXR2YWwgPSBjcHVzZXRfcGF0aCh0c2stPmNwdXNldCwgYnVmLCBQQUdFX1NJWkUpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dDsKIAlzZXFfcHV0cyhtLCBidWYpOwogCXNlcV9wdXRjKG0sICdcbicpOwogb3V0OgotCXVwKCZtYW5hZ2Vfc2VtKTsKKwltdXRleF91bmxvY2soJm1hbmFnZV9tdXRleCk7CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2V4ZWNfZG9tYWluLmMgYi9rZXJuZWwvZXhlY19kb21haW4uYwppbmRleCA4NjdkNmRiLi5jMDFjZWFkIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhlY19kb21haW4uYworKysgYi9rZXJuZWwvZXhlY19kb21haW4uYwpAQCAtMTQwLDYgKzE0MCw3IEBACiAJZXAgPSBsb29rdXBfZXhlY19kb21haW4ocGVyc29uYWxpdHkpOwogCWlmIChlcCA9PSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluKSB7CiAJCWN1cnJlbnQtPnBlcnNvbmFsaXR5ID0gcGVyc29uYWxpdHk7CisJCW1vZHVsZV9wdXQoZXAtPm1vZHVsZSk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggOTNjZWUzNi4uODAzNzQwNSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC0zNDUsOSArMzQ1LDkgQEAKIAlleGl0X21tKGN1cnJlbnQpOwogCiAJc2V0X3NwZWNpYWxfcGlkcygxLCAxKTsKLQlkb3duKCZ0dHlfc2VtKTsKKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCWN1cnJlbnQtPnNpZ25hbC0+dHR5ID0gTlVMTDsKLQl1cCgmdHR5X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCiAJLyogQmxvY2sgYW5kIGZsdXNoIGFsbCBzaWduYWxzICovCiAJc2lnZmlsbHNldCgmYmxvY2tlZCk7CkBAIC0zNjAsNiArMzYwLDkgQEAKIAlmcyA9IGluaXRfdGFzay5mczsKIAljdXJyZW50LT5mcyA9IGZzOwogCWF0b21pY19pbmMoJmZzLT5jb3VudCk7CisJZXhpdF9uYW1lc3BhY2UoY3VycmVudCk7CisJY3VycmVudC0+bmFtZXNwYWNlID0gaW5pdF90YXNrLm5hbWVzcGFjZTsKKwlnZXRfbmFtZXNwYWNlKGN1cnJlbnQtPm5hbWVzcGFjZSk7CiAgCWV4aXRfZmlsZXMoY3VycmVudCk7CiAJY3VycmVudC0+ZmlsZXMgPSBpbml0X3Rhc2suZmlsZXM7CiAJYXRvbWljX2luYygmY3VycmVudC0+ZmlsZXMtPmNvdW50KTsKQEAgLTgwNCw4ICs4MDcsNiBAQAogCQlwYW5pYygiQXR0ZW1wdGVkIHRvIGtpbGwgdGhlIGlkbGUgdGFzayEiKTsKIAlpZiAodW5saWtlbHkodHNrLT5waWQgPT0gMSkpCiAJCXBhbmljKCJBdHRlbXB0ZWQgdG8ga2lsbCBpbml0ISIpOwotCWlmICh0c2stPmlvX2NvbnRleHQpCi0JCWV4aXRfaW9fY29udGV4dCgpOwogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFX0VYSVQpKSB7CiAJCWN1cnJlbnQtPnB0cmFjZV9tZXNzYWdlID0gY29kZTsKQEAgLTgxOSw2ICs4MjAsOCBAQAogCWlmICh1bmxpa2VseSh0c2stPmZsYWdzICYgUEZfRVhJVElORykpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQKIAkJCSJGaXhpbmcgcmVjdXJzaXZlIGZhdWx0IGJ1dCByZWJvb3QgaXMgbmVlZGVkIVxuIik7CisJCWlmICh0c2stPmlvX2NvbnRleHQpCisJCQlleGl0X2lvX2NvbnRleHQoKTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlzY2hlZHVsZSgpOwogCX0KQEAgLTg3OCw2ICs4ODEsOSBAQAogCSAqLwogCW11dGV4X2RlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQodHNrKTsKIAorCWlmICh0c2stPmlvX2NvbnRleHQpCisJCWV4aXRfaW9fY29udGV4dCgpOworCiAJLyogUEZfREVBRCBjYXVzZXMgZmluYWwgcHV0X3Rhc2tfc3RydWN0IGFmdGVyIHdlIHNjaGVkdWxlLiAqLwogCXByZWVtcHRfZGlzYWJsZSgpOwogCUJVR19PTih0c2stPmZsYWdzICYgUEZfREVBRCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBmYmVhMTJkLi5hMDIwNjM5IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTEwOCw4ICsxMDgsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV90YXNrKTsKIAotdm9pZCBfX3B1dF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3ZvaWQgX19wdXRfdGFza19zdHJ1Y3RfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjb250YWluZXJfb2YocmhwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJjdSk7CisKIAlXQVJOX09OKCEodHNrLT5leGl0X3N0YXRlICYgKEVYSVRfREVBRCB8IEVYSVRfWk9NQklFKSkpOwogCVdBUk5fT04oYXRvbWljX3JlYWQoJnRzay0+dXNhZ2UpKTsKIAlXQVJOX09OKHRzayA9PSBjdXJyZW50KTsKQEAgLTE3OSw2ICsxODEsNyBAQAogCS8qIE9uZSBmb3IgdXMsIG9uZSBmb3Igd2hvZXZlciBkb2VzIHRoZSAicmVsZWFzZV90YXNrKCkiICh1c3VhbGx5IHBhcmVudCkgKi8KIAlhdG9taWNfc2V0KCZ0c2stPnVzYWdlLDIpOwogCWF0b21pY19zZXQoJnRzay0+ZnNfZXhjbCwgMCk7CisJdHNrLT5idHJhY2Vfc2VxID0gMDsKIAlyZXR1cm4gdHNrOwogfQogCkBAIC02MDUsMTIgKzYwOCwxMiBAQAogCWF0b21pY19zZXQoJm5ld2YtPmNvdW50LCAxKTsKIAogCXNwaW5fbG9ja19pbml0KCZuZXdmLT5maWxlX2xvY2spOworCW5ld2YtPm5leHRfZmQgPSAwOwogCWZkdCA9ICZuZXdmLT5mZHRhYjsKLQlmZHQtPm5leHRfZmQgPSAwOwogCWZkdC0+bWF4X2ZkcyA9IE5SX09QRU5fREVGQVVMVDsKLQlmZHQtPm1heF9mZHNldCA9IF9fRkRfU0VUU0laRTsKLQlmZHQtPmNsb3NlX29uX2V4ZWMgPSAmbmV3Zi0+Y2xvc2Vfb25fZXhlY19pbml0OwotCWZkdC0+b3Blbl9mZHMgPSAmbmV3Zi0+b3Blbl9mZHNfaW5pdDsKKwlmZHQtPm1heF9mZHNldCA9IEVNQkVEREVEX0ZEX1NFVF9TSVpFOworCWZkdC0+Y2xvc2Vfb25fZXhlYyA9IChmZF9zZXQgKikmbmV3Zi0+Y2xvc2Vfb25fZXhlY19pbml0OworCWZkdC0+b3Blbl9mZHMgPSAoZmRfc2V0ICopJm5ld2YtPm9wZW5fZmRzX2luaXQ7CiAJZmR0LT5mZCA9ICZuZXdmLT5mZF9hcnJheVswXTsKIAlJTklUX1JDVV9IRUFEKCZmZHQtPnJjdSk7CiAJZmR0LT5mcmVlX2ZpbGVzID0gTlVMTDsKQEAgLTEwMTgsNiArMTAyMSw3IEBACiAgCQlwLT5tZW1wb2xpY3kgPSBOVUxMOwogIAkJZ290byBiYWRfZm9ya19jbGVhbnVwX2NwdXNldDsKICAJfQorCW1wb2xfZml4X2ZvcmtfY2hpbGRfZmxhZyhwKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX01VVEVYRVMKQEAgLTEwNjAsNiArMTA2NCwxMiBAQAogCXAtPmNsZWFyX2NoaWxkX3RpZCA9IChjbG9uZV9mbGFncyAmIENMT05FX0NISUxEX0NMRUFSVElEKSA/IGNoaWxkX3RpZHB0cjogTlVMTDsKIAogCS8qCisJICogc2lnYWx0c3RhY2sgc2hvdWxkIGJlIGNsZWFyZWQgd2hlbiBzaGFyaW5nIHRoZSBzYW1lIFZNCisJICovCisJaWYgKChjbG9uZV9mbGFncyAmIChDTE9ORV9WTXxDTE9ORV9WRk9SSykpID09IENMT05FX1ZNKQorCQlwLT5zYXNfc3Nfc3AgPSBwLT5zYXNfc3Nfc2l6ZSA9IDA7CisKKwkvKgogCSAqIFN5c2NhbGwgdHJhY2luZyBzaG91bGQgYmUgdHVybmVkIG9mZiBpbiB0aGUgY2hpbGQgcmVnYXJkbGVzcwogCSAqIG9mIENMT05FX1BUUkFDRS4KIAkgKi8KQEAgLTE0NzAsOSArMTQ4MCw3IEBACiAKIAlpZiAoKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9WTSkgJiYKIAkgICAgKG1tICYmIGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID4gMSkpIHsKLQkJKm5ld19tbXAgPSBkdXBfbW0oY3VycmVudCk7Ci0JCWlmICghKm5ld19tbXApCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNTI4LDYgKzE1MzYsMTIgQEAKIAogCWNoZWNrX3Vuc2hhcmVfZmxhZ3MoJnVuc2hhcmVfZmxhZ3MpOwogCisJLyogUmV0dXJuIC1FSU5WQUwgZm9yIGFsbCB1bnN1cHBvcnRlZCBmbGFncyAqLworCWVyciA9IC1FSU5WQUw7CisJaWYgKHVuc2hhcmVfZmxhZ3MgJiB+KENMT05FX1RIUkVBRHxDTE9ORV9GU3xDTE9ORV9ORVdOU3xDTE9ORV9TSUdIQU5EfAorCQkJCUNMT05FX1ZNfENMT05FX0ZJTEVTfENMT05FX1NZU1ZTRU0pKQorCQlnb3RvIGJhZF91bnNoYXJlX291dDsKKwogCWlmICgoZXJyID0gdW5zaGFyZV90aHJlYWQodW5zaGFyZV9mbGFncykpKQogCQlnb3RvIGJhZF91bnNoYXJlX291dDsKIAlpZiAoKGVyciA9IHVuc2hhcmVfZnModW5zaGFyZV9mbGFncywgJm5ld19mcykpKQpAQCAtMTU2MSw3ICsxNTc1LDcgQEAKIAogCQlpZiAobmV3X3NpZ2gpIHsKIAkJCXNpZ2ggPSBjdXJyZW50LT5zaWdoYW5kOwotCQkJY3VycmVudC0+c2lnaGFuZCA9IG5ld19zaWdoOworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKGN1cnJlbnQtPnNpZ2hhbmQsIG5ld19zaWdoKTsKIAkJCW5ld19zaWdoID0gc2lnaDsKIAkJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCA1YWU1MWYxLi4xNGJjOWNmIDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTUwNSw2ICs1MDUsNDEgQEAKIAlyZXR1cm4gcmVtOwogfQogCisjaWZkZWYgQ09ORklHX05PX0lETEVfSFoKKy8qKgorICogaHJ0aW1lcl9nZXRfbmV4dF9ldmVudCAtIGdldCB0aGUgdGltZSB1bnRpbCBuZXh0IGV4cGlyeSBldmVudAorICoKKyAqIFJldHVybnMgdGhlIGRlbHRhIHRvIHRoZSBuZXh0IGV4cGlyeSBldmVudCBvciBLVElNRV9NQVggaWYgbm8gdGltZXIKKyAqIGlzIHBlbmRpbmcuCisgKi8KK2t0aW1lX3QgaHJ0aW1lcl9nZXRfbmV4dF9ldmVudCh2b2lkKQoreworCXN0cnVjdCBocnRpbWVyX2Jhc2UgKmJhc2UgPSBfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOworCWt0aW1lX3QgZGVsdGEsIG1pbmRlbHRhID0geyAudHY2NCA9IEtUSU1FX01BWCB9OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hSVElNRVJfQkFTRVM7IGkrKywgYmFzZSsrKSB7CisJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOworCQlpZiAoIWJhc2UtPmZpcnN0KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCBmbGFncyk7CisJCQljb250aW51ZTsKKwkJfQorCQl0aW1lciA9IHJiX2VudHJ5KGJhc2UtPmZpcnN0LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7CisJCWRlbHRhLnR2NjQgPSB0aW1lci0+ZXhwaXJlcy50djY0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCBmbGFncyk7CisJCWRlbHRhID0ga3RpbWVfc3ViKGRlbHRhLCBiYXNlLT5nZXRfdGltZSgpKTsKKwkJaWYgKGRlbHRhLnR2NjQgPCBtaW5kZWx0YS50djY0KQorCQkJbWluZGVsdGEudHY2NCA9IGRlbHRhLnR2NjQ7CisJfQorCWlmIChtaW5kZWx0YS50djY0IDwgMCkKKwkJbWluZGVsdGEudHY2NCA9IDA7CisJcmV0dXJuIG1pbmRlbHRhOworfQorI2VuZGlmCisKIC8qKgogICogaHJ0aW1lcl9pbml0IC0gaW5pdGlhbGl6ZSBhIHRpbWVyIHRvIHRoZSBnaXZlbiBjbG9jawogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvTWFrZWZpbGUgYi9rZXJuZWwvaXJxL01ha2VmaWxlCmluZGV4IDQ5Mzc4NzMuLjJiMzNmODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvTWFrZWZpbGUKKysrIGIva2VybmVsL2lycS9NYWtlZmlsZQpAQCAtMSw1ICsxLDQgQEAKIAotb2JqLXkgOj0gaGFuZGxlLm8gbWFuYWdlLm8gc3B1cmlvdXMubworb2JqLXkgOj0gaGFuZGxlLm8gbWFuYWdlLm8gc3B1cmlvdXMubyBtaWdyYXRpb24ubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFKSArPSBhdXRvcHJvYmUubwogb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2MubwotCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCA5N2Q1NTU5Li42ZWRmY2VmIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTIwNCwxMCArMjA0LDE0IEBACiAJcCA9ICZkZXNjLT5hY3Rpb247CiAJaWYgKChvbGQgPSAqcCkgIT0gTlVMTCkgewogCQkvKiBDYW4ndCBzaGFyZSBpbnRlcnJ1cHRzIHVubGVzcyBib3RoIGFncmVlIHRvICovCi0JCWlmICghKG9sZC0+ZmxhZ3MgJiBuZXctPmZsYWdzICYgU0FfU0hJUlEpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLGZsYWdzKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KKwkJaWYgKCEob2xkLT5mbGFncyAmIG5ldy0+ZmxhZ3MgJiBTQV9TSElSUSkpCisJCQlnb3RvIG1pc21hdGNoOworCisjaWYgZGVmaW5lZChBUkNIX0hBU19JUlFfUEVSX0NQVSkgJiYgZGVmaW5lZChTQV9QRVJDUFVfSVJRKQorCQkvKiBBbGwgaGFuZGxlcnMgbXVzdCBhZ3JlZSBvbiBwZXItY3B1bmVzcyAqLworCQlpZiAoKG9sZC0+ZmxhZ3MgJiBJUlFfUEVSX0NQVSkgIT0gKG5ldy0+ZmxhZ3MgJiBJUlFfUEVSX0NQVSkpCisJCQlnb3RvIG1pc21hdGNoOworI2VuZGlmCiAKIAkJLyogYWRkIG5ldyBpbnRlcnJ1cHQgYXQgZW5kIG9mIGlycSBxdWV1ZSAqLwogCQlkbyB7CkBAIC0yMTgsNyArMjIyLDEwIEBACiAJfQogCiAJKnAgPSBuZXc7Ci0KKyNpZiBkZWZpbmVkKEFSQ0hfSEFTX0lSUV9QRVJfQ1BVKSAmJiBkZWZpbmVkKFNBX1BFUkNQVV9JUlEpCisJaWYgKG5ldy0+ZmxhZ3MgJiBTQV9QRVJDUFVfSVJRKQorCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1BFUl9DUFU7CisjZW5kaWYKIAlpZiAoIXNoYXJlZCkgewogCQlkZXNjLT5kZXB0aCA9IDA7CiAJCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9ESVNBQkxFRCB8IElSUV9BVVRPREVURUNUIHwKQEAgLTIzNiw2ICsyNDMsMTIgQEAKIAlyZWdpc3Rlcl9oYW5kbGVyX3Byb2MoaXJxLCBuZXcpOwogCiAJcmV0dXJuIDA7CisKK21pc21hdGNoOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBpcnEgaGFuZGxlciBtaXNtYXRjaFxuIiwgX19GVU5DVElPTl9fKTsKKwlkdW1wX3N0YWNrKCk7CisJcmV0dXJuIC1FQlVTWTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmE4NjU1Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2lycS9taWdyYXRpb24uYwpAQCAtMCwwICsxLDY1IEBACisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKQorCit2b2lkIHNldF9wZW5kaW5nX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgbWFzaykKK3sKKwlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJZGVzYy0+bW92ZV9pcnEgPSAxOworCXBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSA9IG1hc2s7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKQoreworCWNwdW1hc2tfdCB0bXA7CisJaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV9kZXNjcChpcnEpOworCisJaWYgKGxpa2VseSghZGVzYy0+bW92ZV9pcnEpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFBhcmFub2lhOiBjcHUtbG9jYWwgaW50ZXJydXB0cyBzaG91bGRuJ3QgYmUgY2FsbGluZyBpbiBoZXJlIGFueXdheS4KKwkgKi8KKwlpZiAoQ0hFQ0tfSVJRX1BFUl9DUFUoZGVzYy0+c3RhdHVzKSkgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJZGVzYy0+bW92ZV9pcnEgPSAwOworCisJaWYgKGxpa2VseShjcHVzX2VtcHR5KHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSkpKQorCQlyZXR1cm47CisKKwlpZiAoIWRlc2MtPmhhbmRsZXItPnNldF9hZmZpbml0eSkKKwkJcmV0dXJuOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkZXNjLT5sb2NrKTsKKworCWNwdXNfYW5kKHRtcCwgcGVuZGluZ19pcnFfY3B1bWFza1tpcnFdLCBjcHVfb25saW5lX21hcCk7CisKKwkvKgorCSAqIElmIHRoZXJlIHdhcyBhIHZhbGlkIG1hc2sgdG8gd29yayB3aXRoLCBwbGVhc2UKKwkgKiBkbyB0aGUgZGlzYWJsZSwgcmUtcHJvZ3JhbSwgZW5hYmxlIHNlcXVlbmNlLgorCSAqIFRoaXMgaXMgKm5vdCogcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgbGV2ZWwgdHJpZ2dlcmVkCisJICogYnV0IGluIGEgZWRnZSB0cmlnZ2VyIGNhc2UsIHdlIG1pZ2h0IGJlIHNldHRpbmcgcnRlCisJICogd2hlbiBhbiBhY3RpdmUgdHJpZ2dlciBpcyBjb21taW5nIGluLiBUaGlzIGNvdWxkCisJICogY2F1c2Ugc29tZSBpb2FwaWNzIHRvIG1hbC1mdW5jdGlvbi4KKwkgKiBCZWluZyBwYXJhbm9pZCBpIGd1ZXNzIQorCSAqLworCWlmICh1bmxpa2VseSghY3B1c19lbXB0eSh0bXApKSkgeworCQlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkpCisJCQlkZXNjLT5oYW5kbGVyLT5kaXNhYmxlKGlycSk7CisKKwkJZGVzYy0+aGFuZGxlci0+c2V0X2FmZmluaXR5KGlycSx0bXApOworCisJCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKSkKKwkJCWRlc2MtPmhhbmRsZXItPmVuYWJsZShpcnEpOworCX0KKwljcHVzX2NsZWFyKHBlbmRpbmdfaXJxX2NwdW1hc2tbaXJxXSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2l0aW1lci5jIGIva2VybmVsL2l0aW1lci5jCmluZGV4IDM3OWJlMmYuLjY4MGU2YjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pdGltZXIuYworKysgYi9rZXJuZWwvaXRpbWVyLmMKQEAgLTE0Myw2ICsxNDMsNjAgQEAKIAlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiB9CiAKKy8qCisgKiBXZSBkbyBub3QgY2FyZSBhYm91dCBjb3JyZWN0bmVzcy4gV2UganVzdCBzYW5pdGl6ZSB0aGUgdmFsdWVzIHNvCisgKiB0aGUga3RpbWVfdCBvcGVyYXRpb25zIHdoaWNoIGV4cGVjdCBub3JtYWxpemVkIHZhbHVlcyBkbyBub3QKKyAqIGJyZWFrLiBUaGlzIGNvbnZlcnRzIG5lZ2F0aXZlIHZhbHVlcyB0byBsb25nIHRpbWVvdXRzIHNpbWlsYXIgdG8KKyAqIHRoZSBjb2RlIGluIGtlcm5lbCB2ZXJzaW9ucyA8IDIuNi4xNgorICoKKyAqIFByaW50IGEgbGltaXRlZCBudW1iZXIgb2Ygd2FybmluZyBtZXNzYWdlcyB3aGVuIGFuIGludmFsaWQgdGltZXZhbAorICogaXMgZGV0ZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGZpeHVwX3RpbWV2YWwoc3RydWN0IHRpbWV2YWwgKnR2LCBpbnQgaW50ZXJ2YWwpCit7CisJc3RhdGljIGludCB3YXJubGltaXQgPSAxMDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmICh3YXJubGltaXQgPiAwKSB7CisJCXdhcm5saW1pdC0tOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAic2V0aXRpbWVyOiAlcyAocGlkID0gJWQpIHByb3ZpZGVkICIKKwkJICAgICAgICJpbnZhbGlkIHRpbWV2YWwgJXM6IHR2X3NlYyA9ICVsZCB0dl91c2VjID0gJWxkXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkgICAgICAgaW50ZXJ2YWwgPyAiaXRfaW50ZXJ2YWwiIDogIml0X3ZhbHVlIiwKKwkJICAgICAgIHR2LT50dl9zZWMsIChsb25nKSB0di0+dHZfdXNlYyk7CisJfQorCisJdG1wID0gdHYtPnR2X3VzZWM7CisJaWYgKHRtcCA+PSBVU0VDX1BFUl9TRUMpIHsKKwkJdHYtPnR2X3VzZWMgPSB0bXAgJSBVU0VDX1BFUl9TRUM7CisJCXR2LT50dl9zZWMgKz0gdG1wIC8gVVNFQ19QRVJfU0VDOworCX0KKworCXRtcCA9IHR2LT50dl9zZWM7CisJaWYgKHRtcCA+IExPTkdfTUFYKQorCQl0di0+dHZfc2VjID0gTE9OR19NQVg7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRpbWV2YWwgaXMgaW4gY2Fub25pY2FsIGZvcm0KKyAqLworI2RlZmluZSB0aW1ldmFsX3ZhbGlkKHQpIFwKKwkoKCh0KS0+dHZfc2VjID49IDApICYmICgoKHVuc2lnbmVkIGxvbmcpICh0KS0+dHZfdXNlYykgPCBVU0VDX1BFUl9TRUMpKQorCisvKgorICogQ2hlY2sgZm9yIGludmFsaWQgdGltZXZhbHMsIHNhbml0aXplIHRoZW0gYW5kIHByaW50IGEgbGltaXRlZAorICogbnVtYmVyIG9mIHdhcm5pbmdzLgorICovCitzdGF0aWMgdm9pZCBjaGVja19pdGltZXJ2YWwoc3RydWN0IGl0aW1lcnZhbCAqdmFsdWUpIHsKKworCWlmICh1bmxpa2VseSghdGltZXZhbF92YWxpZCgmdmFsdWUtPml0X3ZhbHVlKSkpCisJCWZpeHVwX3RpbWV2YWwoJnZhbHVlLT5pdF92YWx1ZSwgMCk7CisKKwlpZiAodW5saWtlbHkoIXRpbWV2YWxfdmFsaWQoJnZhbHVlLT5pdF9pbnRlcnZhbCkpKQorCQlmaXh1cF90aW1ldmFsKCZ2YWx1ZS0+aXRfaW50ZXJ2YWwsIDEpOworfQorCiBpbnQgZG9fc2V0aXRpbWVyKGludCB3aGljaCwgc3RydWN0IGl0aW1lcnZhbCAqdmFsdWUsIHN0cnVjdCBpdGltZXJ2YWwgKm92YWx1ZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CkBAIC0xNTAsNiArMjA0LDE4IEBACiAJa3RpbWVfdCBleHBpcmVzOwogCWNwdXRpbWVfdCBjdmFsLCBjaW50ZXJ2YWwsIG52YWwsIG5pbnRlcnZhbDsKIAorCS8qCisJICogVmFsaWRhdGUgdGhlIHRpbWV2YWxzIGluIHZhbHVlLgorCSAqCisJICogTm90ZTogQWx0aG91Z2ggdGhlIHNwZWMgcmVxdWlyZXMgdGhhdCBpbnZhbGlkIHZhbHVlcyBzaGFsbAorCSAqIHJldHVybiAtRUlOVkFMLCB3ZSBqdXN0IGZpeHVwIHRoZSB2YWx1ZSBhbmQgcHJpbnQgYSBsaW1pdGVkCisJICogbnVtYmVyIG9mIHdhcm5pbmdzIGluIG9yZGVyIG5vdCB0byBicmVhayB1c2VycyBvZiB0aGlzCisJICogaGlzdG9yaWNhbCBtaXNmZWF0dXJlLgorCSAqCisJICogU2NoZWR1bGVkIGZvciByZXBsYWNlbWVudCBpbiBNYXJjaCAyMDA3CisJICovCisJY2hlY2tfaXRpbWVydmFsKHZhbHVlKTsKKwogCXN3aXRjaCAod2hpY2gpIHsKIAljYXNlIElUSU1FUl9SRUFMOgogYWdhaW46CkBAIC0yMjYsNiArMjkyLDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogYWxhcm1fc2V0aXRpbWVyIC0gc2V0IGFsYXJtIGluIHNlY29uZHMKKyAqCisgKiBAc2Vjb25kczoJbnVtYmVyIG9mIHNlY29uZHMgdW50aWwgYWxhcm0KKyAqCQkwIGRpc2FibGVzIHRoZSBhbGFybQorICoKKyAqIFJldHVybnMgdGhlIHJlbWFpbmluZyB0aW1lIGluIHNlY29uZHMgb2YgYSBwZW5kaW5nIHRpbWVyIG9yIDAgd2hlbgorICogdGhlIHRpbWVyIGlzIG5vdCBhY3RpdmUuCisgKgorICogT24gMzIgYml0IG1hY2hpbmVzIHRoZSBzZWNvbmRzIHZhbHVlIGlzIGxpbWl0ZWQgdG8gKElOVF9NQVgvMikgdG8gYXZvaWQKKyAqIG5lZ2F0aXZlIHRpbWV2YWwgc2V0dGluZ3Mgd2hpY2ggd291bGQgY2F1c2UgaW1tZWRpYXRlIGV4cGlyeS4KKyAqLwordW5zaWduZWQgaW50IGFsYXJtX3NldGl0aW1lcih1bnNpZ25lZCBpbnQgc2Vjb25kcykKK3sKKwlzdHJ1Y3QgaXRpbWVydmFsIGl0X25ldywgaXRfb2xkOworCisjaWYgQklUU19QRVJfTE9ORyA8IDY0CisJaWYgKHNlY29uZHMgPiBJTlRfTUFYKQorCQlzZWNvbmRzID0gSU5UX01BWDsKKyNlbmRpZgorCWl0X25ldy5pdF92YWx1ZS50dl9zZWMgPSBzZWNvbmRzOworCWl0X25ldy5pdF92YWx1ZS50dl91c2VjID0gMDsKKwlpdF9uZXcuaXRfaW50ZXJ2YWwudHZfc2VjID0gaXRfbmV3Lml0X2ludGVydmFsLnR2X3VzZWMgPSAwOworCisJZG9fc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmaXRfbmV3LCAmaXRfb2xkKTsKKworCS8qCisJICogV2UgY2FuJ3QgcmV0dXJuIDAgaWYgd2UgaGF2ZSBhbiBhbGFybSBwZW5kaW5nIC4uLiAgQW5kIHdlJ2QKKwkgKiBiZXR0ZXIgcmV0dXJuIHRvbyBtdWNoIHRoYW4gdG9vIGxpdHRsZSBhbnl3YXkKKwkgKi8KKwlpZiAoKCFpdF9vbGQuaXRfdmFsdWUudHZfc2VjICYmIGl0X29sZC5pdF92YWx1ZS50dl91c2VjKSB8fAorCSAgICAgIGl0X29sZC5pdF92YWx1ZS50dl91c2VjID49IDUwMDAwMCkKKwkJaXRfb2xkLml0X3ZhbHVlLnR2X3NlYysrOworCisJcmV0dXJuIGl0X29sZC5pdF92YWx1ZS50dl9zZWM7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0aXRpbWVyKGludCB3aGljaCwKIAkJCSAgICAgIHN0cnVjdCBpdGltZXJ2YWwgX191c2VyICp2YWx1ZSwKIAkJCSAgICAgIHN0cnVjdCBpdGltZXJ2YWwgX191c2VyICpvdmFsdWUpCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBmZWYxYWY4Li4xZmI5Zjc1IDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBrcHJvYmVfdGFibGVbS1BST0JFX1RBQkxFX1NJWkVdOwogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGtyZXRwcm9iZV9pbnN0X3RhYmxlW0tQUk9CRV9UQUJMRV9TSVpFXTsKIAotREVDTEFSRV9NVVRFWChrcHJvYmVfbXV0ZXgpOwkJLyogUHJvdGVjdHMga3Byb2JlX3RhYmxlICovCitERUZJTkVfTVVURVgoa3Byb2JlX211dGV4KTsJCS8qIFByb3RlY3RzIGtwcm9iZV90YWJsZSAqLwogREVGSU5FX1NQSU5MT0NLKGtyZXRwcm9iZV9sb2NrKTsJLyogUHJvdGVjdHMga3JldHByb2JlX2luc3RfdGFibGUgKi8KIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3Byb2JlICosIGtwcm9iZV9pbnN0YW5jZSkgPSBOVUxMOwogCkBAIC00NjAsNyArNDYwLDcgQEAKIAl9CiAKIAlwLT5ubWlzc2VkID0gMDsKLQlkb3duKCZrcHJvYmVfbXV0ZXgpOworCW11dGV4X2xvY2soJmtwcm9iZV9tdXRleCk7CiAJb2xkX3AgPSBnZXRfa3Byb2JlKHAtPmFkZHIpOwogCWlmIChvbGRfcCkgewogCQlyZXQgPSByZWdpc3Rlcl9hZ2dyX2twcm9iZShvbGRfcCwgcCk7CkBAIC00NzcsNyArNDc3LDcgQEAKICAgCWFyY2hfYXJtX2twcm9iZShwKTsKIAogb3V0OgotCXVwKCZrcHJvYmVfbXV0ZXgpOworCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIAogCWlmIChyZXQgJiYgcHJvYmVkX21vZCkKIAkJbW9kdWxlX3B1dChwcm9iZWRfbW9kKTsKQEAgLTQ5NiwxMCArNDk2LDEwIEBACiAJc3RydWN0IGtwcm9iZSAqb2xkX3AsICpsaXN0X3A7CiAJaW50IGNsZWFudXBfcDsKIAotCWRvd24oJmtwcm9iZV9tdXRleCk7CisJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKIAlvbGRfcCA9IGdldF9rcHJvYmUocC0+YWRkcik7CiAJaWYgKHVubGlrZWx5KCFvbGRfcCkpIHsKLQkJdXAoJmtwcm9iZV9tdXRleCk7CisJCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAlpZiAocCAhPSBvbGRfcCkgewpAQCAtNTA3LDcgKzUwNyw3IEBACiAJCQlpZiAobGlzdF9wID09IHApCiAJCQkvKiBrcHJvYmUgcCBpcyBhIHZhbGlkIHByb2JlICovCiAJCQkJZ290byB2YWxpZF9wOwotCQl1cCgma3Byb2JlX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQogdmFsaWRfcDoKQEAgLTUyMyw3ICs1MjMsNyBAQAogCQljbGVhbnVwX3AgPSAwOwogCX0KIAotCXVwKCZrcHJvYmVfbXV0ZXgpOworCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIAogCXN5bmNocm9uaXplX3NjaGVkKCk7CiAJaWYgKHAtPm1vZF9yZWZjb3VudGVkICYmCmRpZmYgLS1naXQgYS9rZXJuZWwva3N5c2ZzLmMgYi9rZXJuZWwva3N5c2ZzLmMKaW5kZXggZDVlZWFlMC4uZjExOWUwOSAxMDA2NDQKLS0tIGEva2VybmVsL2tzeXNmcy5jCisrKyBiL2tlcm5lbC9rc3lzZnMuYwpAQCAtMTUsOSArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotdTY0IHVldmVudF9zZXFudW07Ci1jaGFyIHVldmVudF9oZWxwZXJbVUVWRU5UX0hFTFBFUl9QQVRIX0xFTl0gPSAiL3NiaW4vaG90cGx1ZyI7Ci0KICNkZWZpbmUgS0VSTkVMX0FUVFJfUk8oX25hbWUpIFwKIHN0YXRpYyBzdHJ1Y3Qgc3Vic3lzX2F0dHJpYnV0ZSBfbmFtZSMjX2F0dHIgPSBfX0FUVFJfUk8oX25hbWUpCiAKQEAgLTI1LDcgKzIyLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3Vic3lzX2F0dHJpYnV0ZSBfbmFtZSMjX2F0dHIgPSBcCiAJX19BVFRSKF9uYW1lLCAwNjQ0LCBfbmFtZSMjX3Nob3csIF9uYW1lIyNfc3RvcmUpCiAKLSNpZmRlZiBDT05GSUdfSE9UUExVRworI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUcpICYmIGRlZmluZWQoQ09ORklHX05FVCkKIC8qIGN1cnJlbnQgdWV2ZW50IHNlcXVlbmNlIG51bWJlciAqLwogc3RhdGljIHNzaXplX3QgdWV2ZW50X3NlcW51bV9zaG93KHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cywgY2hhciAqcGFnZSkKIHsKQEAgLTU1LDcgKzUyLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9zdWJzeXMpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGtlcm5lbF9hdHRyc1tdID0gewotI2lmZGVmIENPTkZJR19IT1RQTFVHCisjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykgJiYgZGVmaW5lZChDT05GSUdfTkVUKQogCSZ1ZXZlbnRfc2VxbnVtX2F0dHIuYXR0ciwKIAkmdWV2ZW50X2hlbHBlcl9hdHRyLmF0dHIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IGU3NTk1MGEuLmM1ZjNjNjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIAogLyoKQEAgLTQxLDcgKzQyLDcgQEAKIAogLyogVGhyZWFkIHN0b3BwaW5nIGlzIGRvbmUgYnkgc2V0dGhpbmcgdGhpcyB2YXI6IGxvY2sgc2VyaWFsaXplcwogICogbXVsdGlwbGUga3RocmVhZF9zdG9wIGNhbGxzLiAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgoa3RocmVhZF9zdG9wX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChrdGhyZWFkX3N0b3BfbG9jayk7CiBzdGF0aWMgc3RydWN0IGt0aHJlYWRfc3RvcF9pbmZvIGt0aHJlYWRfc3RvcF9pbmZvOwogCiBpbnQga3RocmVhZF9zaG91bGRfc3RvcCh2b2lkKQpAQCAtMTE0LDcgKzExNSw5IEBACiAJCWNyZWF0ZS0+cmVzdWx0ID0gRVJSX1BUUihwaWQpOwogCX0gZWxzZSB7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNyZWF0ZS0+c3RhcnRlZCk7CisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWNyZWF0ZS0+cmVzdWx0ID0gZmluZF90YXNrX2J5X3BpZChwaWQpOworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJfQogCWNvbXBsZXRlKCZjcmVhdGUtPmRvbmUpOwogfQpAQCAtMTczLDcgKzE3Niw3IEBACiB7CiAJaW50IHJldDsKIAotCWRvd24oJmt0aHJlYWRfc3RvcF9sb2NrKTsKKwltdXRleF9sb2NrKCZrdGhyZWFkX3N0b3BfbG9jayk7CiAKIAkvKiBJdCBjb3VsZCBleGl0IGFmdGVyIHN0b3BfaW5mby5rIHNldCwgYnV0IGJlZm9yZSB3YWtlX3VwX3Byb2Nlc3MuICovCiAJZ2V0X3Rhc2tfc3RydWN0KGspOwpAQCAtMTk0LDcgKzE5Nyw3IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigma3RocmVhZF9zdG9wX2luZm8uZG9uZSk7CiAJa3RocmVhZF9zdG9wX2luZm8uayA9IE5VTEw7CiAJcmV0ID0ga3RocmVhZF9zdG9wX2luZm8uZXJyOwotCXVwKCZrdGhyZWFkX3N0b3BfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZrdGhyZWFkX3N0b3BfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDVhYWQ0NzcuLmRkZmU0NWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTYwLDE4ICs2MSwxOCBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhtb2RsaXN0X2xvY2spOwogCiAvKiBMaXN0IG9mIG1vZHVsZXMsIHByb3RlY3RlZCBieSBtb2R1bGVfbXV0ZXggQU5EIG1vZGxpc3RfbG9jayAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgobW9kdWxlX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgobW9kdWxlX211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQobW9kdWxlcyk7CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKG5vdGlmeV9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKG5vdGlmeV9tdXRleCk7CiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbW9kdWxlX25vdGlmeV9saXN0OwogCiBpbnQgcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKQogewogCWludCBlcnI7Ci0JZG93bigmbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZub3RpZnlfbXV0ZXgpOwogCWVyciA9IG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZtb2R1bGVfbm90aWZ5X2xpc3QsIG5iKTsKLQl1cCgmbm90aWZ5X211dGV4KTsKKwltdXRleF91bmxvY2soJm5vdGlmeV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKTsKQEAgLTc5LDkgKzgwLDkgQEAKIGludCB1bnJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYikKIHsKIAlpbnQgZXJyOwotCWRvd24oJm5vdGlmeV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbm90aWZ5X211dGV4KTsKIAllcnIgPSBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZtb2R1bGVfbm90aWZ5X2xpc3QsIG5iKTsKLQl1cCgmbm90aWZ5X211dGV4KTsKKwltdXRleF91bmxvY2soJm5vdGlmeV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIpOwpAQCAtMTI2LDggKzEyNywxMSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fc3RvcF9fX2tzeW10YWJbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0YXJ0X19fa3N5bXRhYl9ncGxbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0b3BfX19rc3ltdGFiX2dwbFtdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fc3RhcnRfX19rc3ltdGFiX2dwbF9mdXR1cmVbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCBfX3N0b3BfX19rc3ltdGFiX2dwbF9mdXR1cmVbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIF9fc3RhcnRfX19rY3JjdGFiW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBfX3N0YXJ0X19fa2NyY3RhYl9ncGxbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIF9fc3RhcnRfX19rY3JjdGFiX2dwbF9mdXR1cmVbXTsKIAogI2lmbmRlZiBDT05GSUdfTU9EVkVSU0lPTlMKICNkZWZpbmUgc3ltdmVyc2lvbihiYXNlLCBpZHgpIE5VTEwKQEAgLTEzNSw2ICsxMzksMTggQEAKICNkZWZpbmUgc3ltdmVyc2lvbihiYXNlLCBpZHgpICgoYmFzZSkgPyAoKGJhc2UpICsgKGlkeCkpIDogTlVMTCkKICNlbmRpZgogCisvKiBsb29rdXAgc3ltYm9sIGluIGdpdmVuIHJhbmdlIG9mIGtlcm5lbF9zeW1ib2xzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmxvb2t1cF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3RhcnQsCisJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN0b3ApCit7CisJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmtzID0gc3RhcnQ7CisJZm9yICg7IGtzIDwgc3RvcDsga3MrKykKKwkJaWYgKHN0cmNtcChrcy0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiBrczsKKwlyZXR1cm4gTlVMTDsKK30KKwogLyogRmluZCBhIHN5bWJvbCwgcmV0dXJuIHZhbHVlLCBjcmMgYW5kIG1vZHVsZSB3aGljaCBvd25zIGl0ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2ZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgc3RydWN0IG1vZHVsZSAqKm93bmVyLApAQCAtMTQyLDY0ICsxNTgsODEgQEAKIAkJCQkgICBpbnQgZ3Bsb2spCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwotCXVuc2lnbmVkIGludCBpOworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICprczsKIAogCS8qIENvcmUga2VybmVsIGZpcnN0LiAqLyAKIAkqb3duZXIgPSBOVUxMOwotCWZvciAoaSA9IDA7IF9fc3RhcnRfX19rc3ltdGFiK2kgPCBfX3N0b3BfX19rc3ltdGFiOyBpKyspIHsKLQkJaWYgKHN0cmNtcChfX3N0YXJ0X19fa3N5bXRhYltpXS5uYW1lLCBuYW1lKSA9PSAwKSB7Ci0JCQkqY3JjID0gc3ltdmVyc2lvbihfX3N0YXJ0X19fa2NyY3RhYiwgaSk7Ci0JCQlyZXR1cm4gX19zdGFydF9fX2tzeW10YWJbaV0udmFsdWU7Ci0JCX0KKwlrcyA9IGxvb2t1cF9zeW1ib2wobmFtZSwgX19zdGFydF9fX2tzeW10YWIsIF9fc3RvcF9fX2tzeW10YWIpOworCWlmIChrcykgeworCQkqY3JjID0gc3ltdmVyc2lvbihfX3N0YXJ0X19fa2NyY3RhYiwgKGtzIC0gX19zdGFydF9fX2tzeW10YWIpKTsKKwkJcmV0dXJuIGtzLT52YWx1ZTsKIAl9CiAJaWYgKGdwbG9rKSB7Ci0JCWZvciAoaSA9IDA7IF9fc3RhcnRfX19rc3ltdGFiX2dwbCtpPF9fc3RvcF9fX2tzeW10YWJfZ3BsOyBpKyspCi0JCQlpZiAoc3RyY21wKF9fc3RhcnRfX19rc3ltdGFiX2dwbFtpXS5uYW1lLCBuYW1lKSA9PSAwKSB7Ci0JCQkJKmNyYyA9IHN5bXZlcnNpb24oX19zdGFydF9fX2tjcmN0YWJfZ3BsLCBpKTsKLQkJCQlyZXR1cm4gX19zdGFydF9fX2tzeW10YWJfZ3BsW2ldLnZhbHVlOwotCQkJfQorCQlrcyA9IGxvb2t1cF9zeW1ib2wobmFtZSwgX19zdGFydF9fX2tzeW10YWJfZ3BsLAorCQkJCQkgX19zdG9wX19fa3N5bXRhYl9ncGwpOworCQlpZiAoa3MpIHsKKwkJCSpjcmMgPSBzeW12ZXJzaW9uKF9fc3RhcnRfX19rY3JjdGFiX2dwbCwKKwkJCQkJICAoa3MgLSBfX3N0YXJ0X19fa3N5bXRhYl9ncGwpKTsKKwkJCXJldHVybiBrcy0+dmFsdWU7CisJCX0KKwl9CisJa3MgPSBsb29rdXBfc3ltYm9sKG5hbWUsIF9fc3RhcnRfX19rc3ltdGFiX2dwbF9mdXR1cmUsCisJCQkJIF9fc3RvcF9fX2tzeW10YWJfZ3BsX2Z1dHVyZSk7CisJaWYgKGtzKSB7CisJCWlmICghZ3Bsb2spIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlN5bWJvbCAlcyBpcyBiZWluZyB1c2VkICIKKwkJCSAgICAgICAiYnkgYSBub24tR1BMIG1vZHVsZSwgd2hpY2ggd2lsbCBub3QgIgorCQkJICAgICAgICJiZSBhbGxvd2VkIGluIHRoZSBmdXR1cmVcbiIsIG5hbWUpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUGxlYXNlIHNlZSB0aGUgZmlsZSAiCisJCQkgICAgICAgIkRvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCAiCisJCQkgICAgICAgImluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUgZm9yIG1vcmUgIgorCQkJICAgICAgICJkZXRhaWxzLlxuIik7CisJCX0KKwkJKmNyYyA9IHN5bXZlcnNpb24oX19zdGFydF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZSwKKwkJCQkgIChrcyAtIF9fc3RhcnRfX19rc3ltdGFiX2dwbF9mdXR1cmUpKTsKKwkJcmV0dXJuIGtzLT52YWx1ZTsKIAl9CiAKIAkvKiBOb3cgdHJ5IG1vZHVsZXMuICovIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgewogCQkqb3duZXIgPSBtb2Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9zeW1zOyBpKyspCi0JCQlpZiAoc3RyY21wKG1vZC0+c3ltc1tpXS5uYW1lLCBuYW1lKSA9PSAwKSB7Ci0JCQkJKmNyYyA9IHN5bXZlcnNpb24obW9kLT5jcmNzLCBpKTsKLQkJCQlyZXR1cm4gbW9kLT5zeW1zW2ldLnZhbHVlOwotCQkJfQorCQlrcyA9IGxvb2t1cF9zeW1ib2wobmFtZSwgbW9kLT5zeW1zLCBtb2QtPnN5bXMgKyBtb2QtPm51bV9zeW1zKTsKKwkJaWYgKGtzKSB7CisJCQkqY3JjID0gc3ltdmVyc2lvbihtb2QtPmNyY3MsIChrcyAtIG1vZC0+c3ltcykpOworCQkJcmV0dXJuIGtzLT52YWx1ZTsKKwkJfQogCiAJCWlmIChncGxvaykgewotCQkJZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX2dwbF9zeW1zOyBpKyspIHsKLQkJCQlpZiAoc3RyY21wKG1vZC0+Z3BsX3N5bXNbaV0ubmFtZSwgbmFtZSkgPT0gMCkgewotCQkJCQkqY3JjID0gc3ltdmVyc2lvbihtb2QtPmdwbF9jcmNzLCBpKTsKLQkJCQkJcmV0dXJuIG1vZC0+Z3BsX3N5bXNbaV0udmFsdWU7Ci0JCQkJfQorCQkJa3MgPSBsb29rdXBfc3ltYm9sKG5hbWUsIG1vZC0+Z3BsX3N5bXMsCisJCQkJCSAgIG1vZC0+Z3BsX3N5bXMgKyBtb2QtPm51bV9ncGxfc3ltcyk7CisJCQlpZiAoa3MpIHsKKwkJCQkqY3JjID0gc3ltdmVyc2lvbihtb2QtPmdwbF9jcmNzLAorCQkJCQkJICAoa3MgLSBtb2QtPmdwbF9zeW1zKSk7CisJCQkJcmV0dXJuIGtzLT52YWx1ZTsKIAkJCX0KIAkJfQorCQlrcyA9IGxvb2t1cF9zeW1ib2wobmFtZSwgbW9kLT5ncGxfZnV0dXJlX3N5bXMsCisJCQkJICAgKG1vZC0+Z3BsX2Z1dHVyZV9zeW1zICsKKwkJCQkgICAgbW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zKSk7CisJCWlmIChrcykgeworCQkJaWYgKCFncGxvaykgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlN5bWJvbCAlcyBpcyBiZWluZyB1c2VkICIKKwkJCQkgICAgICAgImJ5IGEgbm9uLUdQTCBtb2R1bGUsIHdoaWNoIHdpbGwgbm90ICIKKwkJCQkgICAgICAgImJlIGFsbG93ZWQgaW4gdGhlIGZ1dHVyZVxuIiwgbmFtZSk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUGxlYXNlIHNlZSB0aGUgZmlsZSAiCisJCQkJICAgICAgICJEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgIgorCQkJCSAgICAgICAiaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBmb3IgbW9yZSAiCisJCQkJICAgICAgICJkZXRhaWxzLlxuIik7CisJCQl9CisJCQkqY3JjID0gc3ltdmVyc2lvbihtb2QtPmdwbF9mdXR1cmVfY3JjcywKKwkJCQkJICAoa3MgLSBtb2QtPmdwbF9mdXR1cmVfc3ltcykpOworCQkJcmV0dXJuIGtzLT52YWx1ZTsKKwkJfQogCX0KIAlERUJVR1AoIkZhaWxlZCB0byBmaW5kIHN5bWJvbCAlc1xuIiwgbmFtZSk7CiAgCXJldHVybiAwOwogfQogCi0vKiBGaW5kIGEgc3ltYm9sIGluIHRoaXMgZWxmIHN5bWJvbCB0YWJsZSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9sb2NhbF9zeW1ib2woRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBzeW1pbmRleCwKLQkJCQkgICAgICAgY29uc3QgY2hhciAqc3RydGFiLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKQotewotCXVuc2lnbmVkIGludCBpOwotCUVsZl9TeW0gKnN5bSA9ICh2b2lkICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcjsKLQotCS8qIFNlYXJjaCAoZGVmaW5lZCkgaW50ZXJuYWwgc3ltYm9scyBmaXJzdC4gKi8KLQlmb3IgKGkgPSAxOyBpIDwgc2VjaGRyc1tzeW1pbmRleF0uc2hfc2l6ZS9zaXplb2YoKnN5bSk7IGkrKykgewotCQlpZiAoc3ltW2ldLnN0X3NobmR4ICE9IFNITl9VTkRFRgotCQkgICAgJiYgc3RyY21wKG5hbWUsIHN0cnRhYiArIHN5bVtpXS5zdF9uYW1lKSA9PSAwKQotCQkJcmV0dXJuIHN5bVtpXS5zdF92YWx1ZTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIFNlYXJjaCBmb3IgbW9kdWxlIGJ5IG5hbWU6IG11c3QgaG9sZCBtb2R1bGVfbXV0ZXguICovCiBzdGF0aWMgc3RydWN0IG1vZHVsZSAqZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTM3OSw3ICs0MTIsNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAjZGVmaW5lIE1PRElORk9fQVRUUihmaWVsZCkJXAogc3RhdGljIHZvaWQgc2V0dXBfbW9kaW5mb18jI2ZpZWxkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqcykgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC00MTEsMTIgKzQ0Myw3IEBACiBNT0RJTkZPX0FUVFIodmVyc2lvbik7CiBNT0RJTkZPX0FUVFIoc3JjdmVyc2lvbik7CiAKLXN0YXRpYyBzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbW9kaW5mb19hdHRyc1tdID0gewotCSZtb2RpbmZvX3ZlcnNpb24sCi0JJm1vZGluZm9fc3JjdmVyc2lvbiwKLQlOVUxMLAotfTsKLQorI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAvKiBJbml0IHRoZSB1bmxvYWQgc2VjdGlvbiBvZiB0aGUgbW9kdWxlLiAqLwogc3RhdGljIHZvaWQgbW9kdWxlX3VubG9hZF9pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKQEAgLTU1Nyw3ICs1ODQsNyBAQAogc3RhdGljIHZvaWQgd2FpdF9mb3JfemVyb19yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJLyogU2luY2Ugd2UgbWlnaHQgc2xlZXAgZm9yIHNvbWUgdGltZSwgZHJvcCB0aGUgc2VtYXBob3JlIGZpcnN0ICovCi0JdXAoJm1vZHVsZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCWZvciAoOzspIHsKIAkJREVCVUdQKCJMb29raW5nIGF0IHJlZmNvdW50Li4uXG4iKTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpAQCAtNTY2LDcgKzU5Myw3IEBACiAJCXNjaGVkdWxlKCk7CiAJfQogCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCWRvd24oJm1vZHVsZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIH0KIAogYXNtbGlua2FnZSBsb25nCkBAIC01ODMsNyArNjEwLDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJbmFtZVtNT0RVTEVfTkFNRV9MRU4tMV0gPSAnXDAnOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmbW9kdWxlX211dGV4KSAhPSAwKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm1vZHVsZV9tdXRleCkgIT0gMCkKIAkJcmV0dXJuIC1FSU5UUjsKIAogCW1vZCA9IGZpbmRfbW9kdWxlKG5hbWUpOwpAQCAtNjMyLDE0ICs2NTksMTQgQEAKIAogCS8qIEZpbmFsIGRlc3RydWN0aW9uIG5vdyBub29uZSBpcyB1c2luZyBpdC4gKi8KIAlpZiAobW9kLT5leGl0ICE9IE5VTEwpIHsKLQkJdXAoJm1vZHVsZV9tdXRleCk7CisJCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIAkJbW9kLT5leGl0KCk7Ci0JCWRvd24oJm1vZHVsZV9tdXRleCk7CisJCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7CiAJfQogCWZyZWVfbW9kdWxlKG1vZCk7CiAKICBvdXQ6Ci0JdXAoJm1vZHVsZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTczMSwxMzggKzc1OCwxNCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVfVU5MT0FEICovCiAKLSNpZmRlZiBDT05GSUdfT0JTT0xFVEVfTU9EUEFSTQotLyogQm91bmRzIGNoZWNraW5nIGRvbmUgYmVsb3cgKi8KLXN0YXRpYyBpbnQgb2JzcGFybV9jb3B5X3N0cmluZyhjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQotewotCXN0cmNweShrcC0+YXJnLCB2YWwpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9vYnNvbGV0ZShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQotewotCXVuc2lnbmVkIGludCBtaW4sIG1heDsKLQl1bnNpZ25lZCBpbnQgc2l6ZSwgbWF4c2l6ZTsKLQlpbnQgZHVtbXk7Ci0JY2hhciAqZW5kcDsKLQljb25zdCBjaGFyICpwOwotCXN0cnVjdCBvYnNvbGV0ZV9tb2RwYXJtICpvYnNwYXJtID0ga3AtPmFyZzsKLQotCWlmICghdmFsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUGFyYW1ldGVyICVzIG5lZWRzIGFuIGFyZ3VtZW50XG4iLCBrcC0+bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHR5cGUgaXM6IFttaW5bLW1heF1de2IsaCxpLGwsc30gKi8KLQlwID0gb2JzcGFybS0+dHlwZTsKLQltaW4gPSBzaW1wbGVfc3RydG9sKHAsICZlbmRwLCAxMCk7Ci0JaWYgKGVuZHAgPT0gb2JzcGFybS0+dHlwZSkKLQkJbWluID0gbWF4ID0gMTsKLQllbHNlIGlmICgqZW5kcCA9PSAnLScpIHsKLQkJcCA9IGVuZHArMTsKLQkJbWF4ID0gc2ltcGxlX3N0cnRvbChwLCAmZW5kcCwgMTApOwotCX0gZWxzZQotCQltYXggPSBtaW47Ci0Jc3dpdGNoICgqZW5kcCkgewotCWNhc2UgJ2InOgotCQlyZXR1cm4gcGFyYW1fYXJyYXkoa3AtPm5hbWUsIHZhbCwgbWluLCBtYXgsIG9ic3Bhcm0tPmFkZHIsCi0JCQkJICAgMSwgcGFyYW1fc2V0X2J5dGUsICZkdW1teSk7Ci0JY2FzZSAnaCc6Ci0JCXJldHVybiBwYXJhbV9hcnJheShrcC0+bmFtZSwgdmFsLCBtaW4sIG1heCwgb2JzcGFybS0+YWRkciwKLQkJCQkgICBzaXplb2Yoc2hvcnQpLCBwYXJhbV9zZXRfc2hvcnQsICZkdW1teSk7Ci0JY2FzZSAnaSc6Ci0JCXJldHVybiBwYXJhbV9hcnJheShrcC0+bmFtZSwgdmFsLCBtaW4sIG1heCwgb2JzcGFybS0+YWRkciwKLQkJCQkgICBzaXplb2YoaW50KSwgcGFyYW1fc2V0X2ludCwgJmR1bW15KTsKLQljYXNlICdsJzoKLQkJcmV0dXJuIHBhcmFtX2FycmF5KGtwLT5uYW1lLCB2YWwsIG1pbiwgbWF4LCBvYnNwYXJtLT5hZGRyLAotCQkJCSAgIHNpemVvZihsb25nKSwgcGFyYW1fc2V0X2xvbmcsICZkdW1teSk7Ci0JY2FzZSAncyc6Ci0JCXJldHVybiBwYXJhbV9hcnJheShrcC0+bmFtZSwgdmFsLCBtaW4sIG1heCwgb2JzcGFybS0+YWRkciwKLQkJCQkgICBzaXplb2YoY2hhciAqKSwgcGFyYW1fc2V0X2NoYXJwLCAmZHVtbXkpOwotCi0JY2FzZSAnYyc6Ci0JCS8qIFVuZG9jdW1lbnRlZDogMS01YzUwIG1lYW5zIDEtNSBzdHJpbmdzIG9mIHVwIHRvIDQ5IGNoYXJzLAotCQkgICBhbmQgdGhlIGRlY2wgaXMgImNoYXIgeHh4WzVdWzUwXTsiICovCi0JCXAgPSBlbmRwKzE7Ci0JCW1heHNpemUgPSBzaW1wbGVfc3RydG9sKHAsICZlbmRwLCAxMCk7Ci0JCS8qIFdlIGNoZWNrIGxlbmd0aHMgaGVyZSAoeWVzLCB0aGlzIGlzIGEgaGFjaykuICovCi0JCXAgPSB2YWw7Ci0JCXdoaWxlIChwW3NpemUgPSBzdHJjc3BuKHAsICIsIildKSB7Ci0JCQlpZiAoc2l6ZSA+PSBtYXhzaXplKSAKLQkJCQlnb3RvIG92ZXJzaXplOwotCQkJcCArPSBzaXplKzE7Ci0JCX0KLQkJaWYgKHNpemUgPj0gbWF4c2l6ZSkgCi0JCQlnb3RvIG92ZXJzaXplOwotCQlyZXR1cm4gcGFyYW1fYXJyYXkoa3AtPm5hbWUsIHZhbCwgbWluLCBtYXgsIG9ic3Bhcm0tPmFkZHIsCi0JCQkJICAgbWF4c2l6ZSwgb2JzcGFybV9jb3B5X3N0cmluZywgJmR1bW15KTsKLQl9Ci0JcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIG9ic29sZXRlIHBhcmFtZXRlciB0eXBlICVzXG4iLCBvYnNwYXJtLT50eXBlKTsKLQlyZXR1cm4gLUVJTlZBTDsKLSBvdmVyc2l6ZToKLQlwcmludGsoS0VSTl9FUlIKLQkgICAgICAgIlBhcmFtZXRlciAlcyBkb2Vzbid0IGZpdCBpbiAldSBjaGFycy5cbiIsIGtwLT5uYW1lLCBtYXhzaXplKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBvYnNvbGV0ZV9wYXJhbXMoY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgIGNoYXIgKmFyZ3MsCi0JCQkgICBzdHJ1Y3Qgb2Jzb2xldGVfbW9kcGFybSBvYnNwYXJtW10sCi0JCQkgICB1bnNpZ25lZCBpbnQgbnVtLAotCQkJICAgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkgICB1bnNpZ25lZCBpbnQgc3ltaW5kZXgsCi0JCQkgICBjb25zdCBjaGFyICpzdHJ0YWIpCi17Ci0Jc3RydWN0IGtlcm5lbF9wYXJhbSAqa3A7Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IHJldDsKLQotCWtwID0ga21hbGxvYyhzaXplb2Yoa3BbMF0pICogbnVtLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQljaGFyIHN5bV9uYW1lWzEyOCArIHNpemVvZihNT0RVTEVfU1lNQk9MX1BSRUZJWCldOwotCi0JCXNucHJpbnRmKHN5bV9uYW1lLCBzaXplb2Yoc3ltX25hbWUpLCAiJXMlcyIsCi0JCQkgTU9EVUxFX1NZTUJPTF9QUkVGSVgsIG9ic3Bhcm1baV0ubmFtZSk7Ci0KLQkJa3BbaV0ubmFtZSA9IG9ic3Bhcm1baV0ubmFtZTsKLQkJa3BbaV0ucGVybSA9IDAwMDsKLQkJa3BbaV0uc2V0ID0gc2V0X29ic29sZXRlOwotCQlrcFtpXS5nZXQgPSBOVUxMOwotCQlvYnNwYXJtW2ldLmFkZHIKLQkJCT0gKHZvaWQgKilmaW5kX2xvY2FsX3N5bWJvbChzZWNoZHJzLCBzeW1pbmRleCwgc3RydGFiLAotCQkJCQkJICAgIHN5bV9uYW1lKTsKLQkJaWYgKCFvYnNwYXJtW2ldLmFkZHIpIHsKLQkJCXByaW50aygiJXM6IGZhbHNlbHkgY2xhaW1zIHRvIGhhdmUgcGFyYW1ldGVyICVzXG4iLAotCQkJICAgICAgIG5hbWUsIG9ic3Bhcm1baV0ubmFtZSk7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJa3BbaV0uYXJnID0gJm9ic3Bhcm1baV07Ci0JfQotCi0JcmV0ID0gcGFyc2VfYXJncyhuYW1lLCBhcmdzLCBrcCwgbnVtLCBOVUxMKTsKLSBvdXQ6Ci0Ja2ZyZWUoa3ApOwotCXJldHVybiByZXQ7Ci19Ci0jZWxzZQotc3RhdGljIGludCBvYnNvbGV0ZV9wYXJhbXMoY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgIGNoYXIgKmFyZ3MsCi0JCQkgICBzdHJ1Y3Qgb2Jzb2xldGVfbW9kcGFybSBvYnNwYXJtW10sCi0JCQkgICB1bnNpZ25lZCBpbnQgbnVtLAotCQkJICAgRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkgICB1bnNpZ25lZCBpbnQgc3ltaW5kZXgsCi0JCQkgICBjb25zdCBjaGFyICpzdHJ0YWIpCi17Ci0JaWYgKG51bSAhPSAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSWdub3Jpbmcgb2Jzb2xldGUgcGFyYW1ldGVyc1xuIiwKLQkJICAgICAgIG5hbWUpOwotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19PQlNPTEVURV9NT0RQQVJNICovCitzdGF0aWMgc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1vZGluZm9fYXR0cnNbXSA9IHsKKwkmbW9kaW5mb192ZXJzaW9uLAorCSZtb2RpbmZvX3NyY3ZlcnNpb24sCisjaWZkZWYgQ09ORklHX01PRFVMRV9VTkxPQUQKKwkmcmVmY250LAorI2VuZGlmCisJTlVMTCwKK307CiAKIHN0YXRpYyBjb25zdCBjaGFyIHZlcm1hZ2ljW10gPSBWRVJNQUdJQ19TVFJJTkc7CiAKQEAgLTEwNTYsMzcgKzk1OSwyOCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19LQUxMU1lNUyAqLwogCi0KLSNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAotc3RhdGljIGlubGluZSBpbnQgbW9kdWxlX2FkZF9yZWZjbnRfYXR0cihzdHJ1Y3QgbW9kdWxlICptb2QpCi17Ci0JcmV0dXJuIHN5c2ZzX2NyZWF0ZV9maWxlKCZtb2QtPm1rb2JqLmtvYmosICZyZWZjbnQuYXR0cik7Ci19Ci1zdGF0aWMgdm9pZCBtb2R1bGVfcmVtb3ZlX3JlZmNudF9hdHRyKHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlyZXR1cm4gc3lzZnNfcmVtb3ZlX2ZpbGUoJm1vZC0+bWtvYmoua29iaiwgJnJlZmNudC5hdHRyKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtb2R1bGVfYWRkX3JlZmNudF9hdHRyKHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyB2b2lkIG1vZHVsZV9yZW1vdmVfcmVmY250X2F0dHIoc3RydWN0IG1vZHVsZSAqbW9kKQotewotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogc3RhdGljIGludCBtb2R1bGVfYWRkX21vZGluZm9fYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICphdHRyOworCXN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICp0ZW1wX2F0dHI7CiAJaW50IGVycm9yID0gMDsKIAlpbnQgaTsKIAorCW1vZC0+bW9kaW5mb19hdHRycyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSkgKgorCQkJCQkoQVJSQVlfU0laRShtb2RpbmZvX2F0dHJzKSArIDEpKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFtb2QtPm1vZGluZm9fYXR0cnMpCisJCXJldHVybiAtRU5PTUVNOworCisJdGVtcF9hdHRyID0gbW9kLT5tb2RpbmZvX2F0dHJzOwogCWZvciAoaSA9IDA7IChhdHRyID0gbW9kaW5mb19hdHRyc1tpXSkgJiYgIWVycm9yOyBpKyspIHsKIAkJaWYgKCFhdHRyLT50ZXN0IHx8Ci0JCSAgICAoYXR0ci0+dGVzdCAmJiBhdHRyLT50ZXN0KG1vZCkpKQotCQkJZXJyb3IgPSBzeXNmc19jcmVhdGVfZmlsZSgmbW9kLT5ta29iai5rb2JqLCZhdHRyLT5hdHRyKTsKKwkJICAgIChhdHRyLT50ZXN0ICYmIGF0dHItPnRlc3QobW9kKSkpIHsKKwkJCW1lbWNweSh0ZW1wX2F0dHIsIGF0dHIsIHNpemVvZigqdGVtcF9hdHRyKSk7CisJCQl0ZW1wX2F0dHItPmF0dHIub3duZXIgPSBtb2Q7CisJCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZtb2QtPm1rb2JqLmtvYmosJnRlbXBfYXR0ci0+YXR0cik7CisJCQkrK3RlbXBfYXR0cjsKKwkJfQogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xMDk2LDEyICs5OTAsMTYgQEAKIAlzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqYXR0cjsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IChhdHRyID0gbW9kaW5mb19hdHRyc1tpXSk7IGkrKykgeworCWZvciAoaSA9IDA7IChhdHRyID0gJm1vZC0+bW9kaW5mb19hdHRyc1tpXSk7IGkrKykgeworCQkvKiBwaWNrIGEgZmllbGQgdG8gdGVzdCBmb3IgZW5kIG9mIGxpc3QgKi8KKwkJaWYgKCFhdHRyLT5hdHRyLm5hbWUpCisJCQlicmVhazsKIAkJc3lzZnNfcmVtb3ZlX2ZpbGUoJm1vZC0+bWtvYmoua29iaiwmYXR0ci0+YXR0cik7Ci0JCWF0dHItPmZyZWUobW9kKTsKKwkJaWYgKGF0dHItPmZyZWUpCisJCQlhdHRyLT5mcmVlKG1vZCk7CiAJfQorCWtmcmVlKG1vZC0+bW9kaW5mb19hdHRycyk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCBtb2Rfc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLAogCQkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLApAQCAtMTExOSwxOSArMTAxNywxMyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gbW9kdWxlX2FkZF9yZWZjbnRfYXR0cihtb2QpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VucmVnOwotCiAJZXJyID0gbW9kdWxlX3BhcmFtX3N5c2ZzX3NldHVwKG1vZCwga3BhcmFtLCBudW1fcGFyYW1zKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZzsKIAotI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAJZXJyID0gbW9kdWxlX2FkZF9tb2RpbmZvX2F0dHJzKG1vZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5yZWc7Ci0jZW5kaWYKIAogCXJldHVybiAwOwogCkBAIC0xMTQzLDEwICsxMDM1LDcgQEAKIAogc3RhdGljIHZvaWQgbW9kX2tvYmplY3RfcmVtb3ZlKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKLSNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCW1vZHVsZV9yZW1vdmVfbW9kaW5mb19hdHRycyhtb2QpOwotI2VuZGlmCi0JbW9kdWxlX3JlbW92ZV9yZWZjbnRfYXR0cihtb2QpOwogCW1vZHVsZV9wYXJhbV9zeXNmc19yZW1vdmUobW9kKTsKIAogCWtvYmplY3RfdW5yZWdpc3RlcigmbW9kLT5ta29iai5rb2JqKTsKQEAgLTE0MjQsNyArMTMxMyw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogc3RhdGljIHZvaWQgc2V0dXBfbW9kaW5mbyhzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZl9TaGRyICpzZWNoZHJzLAogCQkJICB1bnNpZ25lZCBpbnQgaW5mb2luZGV4KQogewpAQCAtMTQzOSwyMyArMTMyNywxNyBAQAogCQkJCQkJYXR0ci0+YXR0ci5uYW1lKSk7CiAJfQogfQotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKIGludCBpc19leHBvcnRlZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAoIW1vZCkgewotCQlmb3IgKGkgPSAwOyBfX3N0YXJ0X19fa3N5bXRhYitpIDwgX19zdG9wX19fa3N5bXRhYjsgaSsrKQotCQkJaWYgKHN0cmNtcChfX3N0YXJ0X19fa3N5bXRhYltpXS5uYW1lLCBuYW1lKSA9PSAwKQotCQkJCXJldHVybiAxOwotCQlyZXR1cm4gMDsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX3N5bXM7IGkrKykKLQkJaWYgKHN0cmNtcChtb2QtPnN5bXNbaV0ubmFtZSwgbmFtZSkgPT0gMCkKKwlpZiAoIW1vZCAmJiBsb29rdXBfc3ltYm9sKG5hbWUsIF9fc3RhcnRfX19rc3ltdGFiLCBfX3N0b3BfX19rc3ltdGFiKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlpZiAobG9va3VwX3N5bWJvbChuYW1lLCBtb2QtPnN5bXMsIG1vZC0+c3ltcyArIG1vZC0+bnVtX3N5bXMpKQogCQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJCWVsc2UKKwkJCXJldHVybiAwOwogfQogCiAvKiBBcyBwZXIgbm0gKi8KQEAgLTE1MzcsOCArMTQxOSw4IEBACiAJY2hhciAqc2Vjc3RyaW5ncywgKmFyZ3MsICptb2RtYWdpYywgKnN0cnRhYiA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGksIHN5bWluZGV4ID0gMCwgc3RyaW5kZXggPSAwLCBzZXR1cGluZGV4LCBleGluZGV4LAogCQlleHBvcnRpbmRleCwgbW9kaW5kZXgsIG9ic3Bhcm1pbmRleCwgaW5mb2luZGV4LCBncGxpbmRleCwKLQkJY3JjaW5kZXgsIGdwbGNyY2luZGV4LCB2ZXJzaW5kZXgsIHBjcHVpbmRleDsKLQlsb25nIGFyZ2xlbjsKKwkJY3JjaW5kZXgsIGdwbGNyY2luZGV4LCB2ZXJzaW5kZXgsIHBjcHVpbmRleCwgZ3BsZnV0dXJlaW5kZXgsCisJCWdwbGZ1dHVyZWNyY2luZGV4OwogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAlsb25nIGVyciA9IDA7CiAJdm9pZCAqcGVyY3B1ID0gTlVMTCwgKnB0ciA9IE5VTEw7IC8qIFN0b3BzIHNwdXJpb3VzIGdjYyB3YXJuaW5nICovCkBAIC0xNjE4LDggKzE1MDAsMTAgQEAKIAkvKiBPcHRpb25hbCBzZWN0aW9ucyAqLwogCWV4cG9ydGluZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rc3ltdGFiIik7CiAJZ3BsaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWJfZ3BsIik7CisJZ3BsZnV0dXJlaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tzeW10YWJfZ3BsX2Z1dHVyZSIpOwogCWNyY2luZGV4ID0gZmluZF9zZWMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19rY3JjdGFiIik7CiAJZ3BsY3JjaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWJfZ3BsIik7CisJZ3BsZnV0dXJlY3JjaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWJfZ3BsX2Z1dHVyZSIpOwogCXNldHVwaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX3BhcmFtIik7CiAJZXhpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fZXhfdGFibGUiKTsKIAlvYnNwYXJtaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX29ic3Bhcm0iKTsKQEAgLTE2NTUsMjMgKzE1MzksMTEgQEAKIAl9CiAKIAkvKiBOb3cgY29weSBpbiBhcmdzICovCi0JYXJnbGVuID0gc3RybGVuX3VzZXIodWFyZ3MpOwotCWlmICghYXJnbGVuKSB7Ci0JCWVyciA9IC1FRkFVTFQ7CisJYXJncyA9IHN0cm5kdXBfdXNlcih1YXJncywgfjBVTCA+PiAxKTsKKwlpZiAoSVNfRVJSKGFyZ3MpKSB7CisJCWVyciA9IFBUUl9FUlIoYXJncyk7CiAJCWdvdG8gZnJlZV9oZHI7CiAJfQotCWFyZ3MgPSBrbWFsbG9jKGFyZ2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhcmdzKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV9oZHI7Ci0JfQotCWlmIChjb3B5X2Zyb21fdXNlcihhcmdzLCB1YXJncywgYXJnbGVuKSAhPSAwKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZnJlZV9tb2Q7Ci0JfQotCi0JLyogVXNlcnNwYWNlIGNvdWxkIGhhdmUgYWx0ZXJlZCB0aGUgc3RyaW5nIGFmdGVyIHRoZSBzdHJsZW5fdXNlcigpICovCi0JYXJnc1thcmdsZW4gLSAxXSA9ICdcMCc7CiAKIAlpZiAoZmluZF9tb2R1bGUobW9kLT5uYW1lKSkgewogCQllcnIgPSAtRUVYSVNUOwpAQCAtMTc1NSwxMCArMTYyNyw4IEBACiAJaWYgKHN0cmNtcChtb2QtPm5hbWUsICJkcml2ZXJsb2FkZXIiKSA9PSAwKQogCQlhZGRfdGFpbnQoVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFKTsKIAotI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAJLyogU2V0IHVwIE1PRElORk9fQVRUUiBmaWVsZHMgKi8KIAlzZXR1cF9tb2RpbmZvKG1vZCwgc2VjaGRycywgaW5mb2luZGV4KTsKLSNlbmRpZgogCiAJLyogRml4IHVwIHN5bXMsIHNvIHRoYXQgc3RfdmFsdWUgaXMgYSBwb2ludGVyIHRvIGxvY2F0aW9uLiAqLwogCWVyciA9IHNpbXBsaWZ5X3N5bWJvbHMoc2VjaGRycywgc3ltaW5kZXgsIHN0cnRhYiwgdmVyc2luZGV4LCBwY3B1aW5kZXgsCkBAIC0xNzc1LDEwICsxNjQ1LDE2IEBACiAJbW9kLT5ncGxfc3ltcyA9ICh2b2lkICopc2VjaGRyc1tncGxpbmRleF0uc2hfYWRkcjsKIAlpZiAoZ3BsY3JjaW5kZXgpCiAJCW1vZC0+Z3BsX2NyY3MgPSAodm9pZCAqKXNlY2hkcnNbZ3BsY3JjaW5kZXhdLnNoX2FkZHI7CisJbW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zID0gc2VjaGRyc1tncGxmdXR1cmVpbmRleF0uc2hfc2l6ZSAvCisJCQkJCXNpemVvZigqbW9kLT5ncGxfZnV0dXJlX3N5bXMpOworCW1vZC0+Z3BsX2Z1dHVyZV9zeW1zID0gKHZvaWQgKilzZWNoZHJzW2dwbGZ1dHVyZWluZGV4XS5zaF9hZGRyOworCWlmIChncGxmdXR1cmVjcmNpbmRleCkKKwkJbW9kLT5ncGxfZnV0dXJlX2NyY3MgPSAodm9pZCAqKXNlY2hkcnNbZ3BsZnV0dXJlY3JjaW5kZXhdLnNoX2FkZHI7CiAKICNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlMKIAlpZiAoKG1vZC0+bnVtX3N5bXMgJiYgIWNyY2luZGV4KSB8fCAKLQkgICAgKG1vZC0+bnVtX2dwbF9zeW1zICYmICFncGxjcmNpbmRleCkpIHsKKwkgICAgKG1vZC0+bnVtX2dwbF9zeW1zICYmICFncGxjcmNpbmRleCkgfHwKKwkgICAgKG1vZC0+bnVtX2dwbF9mdXR1cmVfc3ltcyAmJiAhZ3BsZnV0dXJlY3JjaW5kZXgpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyB2ZXJzaW9ucyBmb3IgZXhwb3J0ZWQgc3ltYm9scy4iCiAJCSAgICAgICAiIFRhaW50aW5nIGtlcm5lbC5cbiIsIG1vZC0+bmFtZSk7CiAJCWFkZF90YWludChUQUlOVF9GT1JDRURfTU9EVUxFKTsKQEAgLTE4NDcsMjcgKzE3MjMsMTcgQEAKIAlzZXRfZnMob2xkX2ZzKTsKIAogCW1vZC0+YXJncyA9IGFyZ3M7Ci0JaWYgKG9ic3Bhcm1pbmRleCkgewotCQllcnIgPSBvYnNvbGV0ZV9wYXJhbXMobW9kLT5uYW1lLCBtb2QtPmFyZ3MsCi0JCQkJICAgICAgKHN0cnVjdCBvYnNvbGV0ZV9tb2RwYXJtICopCi0JCQkJICAgICAgc2VjaGRyc1tvYnNwYXJtaW5kZXhdLnNoX2FkZHIsCi0JCQkJICAgICAgc2VjaGRyc1tvYnNwYXJtaW5kZXhdLnNoX3NpemUKLQkJCQkgICAgICAvIHNpemVvZihzdHJ1Y3Qgb2Jzb2xldGVfbW9kcGFybSksCi0JCQkJICAgICAgc2VjaGRycywgc3ltaW5kZXgsCi0JCQkJICAgICAgKGNoYXIgKilzZWNoZHJzW3N0cmluZGV4XS5zaF9hZGRyKTsKLQkJaWYgKHNldHVwaW5kZXgpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSWdub3JpbmcgbmV3LXN0eWxlICIKLQkJCSAgICAgICAicGFyYW1ldGVycyBpbiBwcmVzZW5jZSBvZiBvYnNvbGV0ZSBvbmVzXG4iLAotCQkJICAgICAgIG1vZC0+bmFtZSk7Ci0JfSBlbHNlIHsKLQkJLyogU2l6ZSBvZiBzZWN0aW9uIDAgaXMgMCwgc28gdGhpcyB3b3JrcyB3ZWxsIGlmIG5vIHBhcmFtcyAqLwotCQllcnIgPSBwYXJzZV9hcmdzKG1vZC0+bmFtZSwgbW9kLT5hcmdzLAotCQkJCSAoc3RydWN0IGtlcm5lbF9wYXJhbSAqKQotCQkJCSBzZWNoZHJzW3NldHVwaW5kZXhdLnNoX2FkZHIsCi0JCQkJIHNlY2hkcnNbc2V0dXBpbmRleF0uc2hfc2l6ZQotCQkJCSAvIHNpemVvZihzdHJ1Y3Qga2VybmVsX3BhcmFtKSwKLQkJCQkgTlVMTCk7Ci0JfQorCWlmIChvYnNwYXJtaW5kZXgpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJZ25vcmluZyBvYnNvbGV0ZSBwYXJhbWV0ZXJzXG4iLAorCQkgICAgICAgbW9kLT5uYW1lKTsKKworCS8qIFNpemUgb2Ygc2VjdGlvbiAwIGlzIDAsIHNvIHRoaXMgd29ya3Mgd2VsbCBpZiBubyBwYXJhbXMgKi8KKwllcnIgPSBwYXJzZV9hcmdzKG1vZC0+bmFtZSwgbW9kLT5hcmdzLAorCQkJIChzdHJ1Y3Qga2VybmVsX3BhcmFtICopCisJCQkgc2VjaGRyc1tzZXR1cGluZGV4XS5zaF9hZGRyLAorCQkJIHNlY2hkcnNbc2V0dXBpbmRleF0uc2hfc2l6ZQorCQkJIC8gc2l6ZW9mKHN0cnVjdCBrZXJuZWxfcGFyYW0pLAorCQkJIE5VTEwpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGFyY2hfY2xlYW51cDsKIApAQCAtMTkzMywxMyArMTc5OSwxMyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJLyogT25seSBvbmUgbW9kdWxlIGxvYWQgYXQgYSB0aW1lLCBwbGVhc2UgKi8KLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZtb2R1bGVfbXV0ZXgpICE9IDApCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbW9kdWxlX211dGV4KSAhPSAwKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJLyogRG8gYWxsIHRoZSBoYXJkIHdvcmsgKi8KIAltb2QgPSBsb2FkX21vZHVsZSh1bW9kLCBsZW4sIHVhcmdzKTsKIAlpZiAoSVNfRVJSKG1vZCkpIHsKLQkJdXAoJm1vZHVsZV9tdXRleCk7CisJCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIAkJcmV0dXJuIFBUUl9FUlIobW9kKTsKIAl9CiAKQEAgLTE5NDgsMTEgKzE4MTQsMTEgQEAKIAlzdG9wX21hY2hpbmVfcnVuKF9fbGlua19tb2R1bGUsIG1vZCwgTlJfQ1BVUyk7CiAKIAkvKiBEcm9wIGxvY2sgc28gdGhleSBjYW4gcmVjdXJzZSAqLwotCXVwKCZtb2R1bGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIAotCWRvd24oJm5vdGlmeV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbm90aWZ5X211dGV4KTsKIAlub3RpZmllcl9jYWxsX2NoYWluKCZtb2R1bGVfbm90aWZ5X2xpc3QsIE1PRFVMRV9TVEFURV9DT01JTkcsIG1vZCk7Ci0JdXAoJm5vdGlmeV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZub3RpZnlfbXV0ZXgpOwogCiAJLyogU3RhcnQgdGhlIG1vZHVsZSAqLwogCWlmIChtb2QtPmluaXQgIT0gTlVMTCkKQEAgLTE5NjcsMTUgKzE4MzMsMTUgQEAKIAkJCSAgICAgICBtb2QtPm5hbWUpOwogCQllbHNlIHsKIAkJCW1vZHVsZV9wdXQobW9kKTsKLQkJCWRvd24oJm1vZHVsZV9tdXRleCk7CisJCQltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCQkJZnJlZV9tb2R1bGUobW9kKTsKLQkJCXVwKCZtb2R1bGVfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCQl9CiAJCXJldHVybiByZXQ7CiAJfQogCiAJLyogTm93IGl0J3MgYSBmaXJzdCBjbGFzcyBjaXRpemVuISAqLwotCWRvd24oJm1vZHVsZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAltb2QtPnN0YXRlID0gTU9EVUxFX1NUQVRFX0xJVkU7CiAJLyogRHJvcCBpbml0aWFsIHJlZmVyZW5jZS4gKi8KIAltb2R1bGVfcHV0KG1vZCk7CkBAIC0xOTgzLDcgKzE4NDksNyBAQAogCW1vZC0+bW9kdWxlX2luaXQgPSBOVUxMOwogCW1vZC0+aW5pdF9zaXplID0gMDsKIAltb2QtPmluaXRfdGV4dF9zaXplID0gMDsKLQl1cCgmbW9kdWxlX211dGV4KTsKKwltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwNzMsNyArMTkzOSw3IEBACiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCi0JZG93bigmbW9kdWxlX211dGV4KTsKKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgewogCQlpZiAoc3ltbnVtIDwgbW9kLT5udW1fc3ltdGFiKSB7CiAJCQkqdmFsdWUgPSBtb2QtPnN5bXRhYltzeW1udW1dLnN0X3ZhbHVlOwpAQCAtMjA4MSwxMiArMTk0NywxMiBAQAogCQkJc3RybmNweShuYW1lYnVmLAogCQkJCW1vZC0+c3RydGFiICsgbW9kLT5zeW10YWJbc3ltbnVtXS5zdF9uYW1lLAogCQkJCTEyNyk7Ci0JCQl1cCgmbW9kdWxlX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIAkJCXJldHVybiBtb2Q7CiAJCX0KIAkJc3ltbnVtIC09IG1vZC0+bnVtX3N5bXRhYjsKIAl9Ci0JdXAoJm1vZHVsZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yMTI5LDcgKzE5OTUsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmk7CiAJbG9mZl90IG4gPSAwOwogCi0JZG93bigmbW9kdWxlX211dGV4KTsKKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2goaSwgJm1vZHVsZXMpIHsKIAkJaWYgKG4rKyA9PSAqcG9zKQogCQkJYnJlYWs7CkBAIC0yMTUwLDcgKzIwMTYsNyBAQAogCiBzdGF0aWMgdm9pZCBtX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogewotCXVwKCZtb2R1bGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIH0KIAogc3RhdGljIGludCBtX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCAxMjZkYzQzLi5hY2Q5NWFkIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMjAsMTAgKzIwLDEzIEBACiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KIAotaW50IHBhbmljX3RpbWVvdXQ7CiBpbnQgcGFuaWNfb25fb29wczsKIGludCB0YWludGVkOworc3RhdGljIGludCBwYXVzZV9vbl9vb3BzOworc3RhdGljIGludCBwYXVzZV9vbl9vb3BzX2ZsYWc7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBhdXNlX29uX29vcHNfbG9jayk7CiAKK2ludCBwYW5pY190aW1lb3V0OwogRVhQT1JUX1NZTUJPTChwYW5pY190aW1lb3V0KTsKIAogc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpwYW5pY19ub3RpZmllcl9saXN0OwpAQCAtMTc0LDMgKzE3Nyw5NSBAQAogCXRhaW50ZWQgfD0gZmxhZzsKIH0KIEVYUE9SVF9TWU1CT0woYWRkX3RhaW50KTsKKworc3RhdGljIGludCBfX2luaXQgcGF1c2Vfb25fb29wc19zZXR1cChjaGFyICpzdHIpCit7CisJcGF1c2Vfb25fb29wcyA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJwYXVzZV9vbl9vb3BzPSIsIHBhdXNlX29uX29vcHNfc2V0dXApOworCitzdGF0aWMgdm9pZCBzcGluX21zZWMoaW50IG1zZWNzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1zZWNzOyBpKyspIHsKKwkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7CisJCW1kZWxheSgxKTsKKwl9Cit9CisKKy8qCisgKiBJdCBqdXN0IGhhcHBlbnMgdGhhdCBvb3BzX2VudGVyKCkgYW5kIG9vcHNfZXhpdCgpIGFyZSBpZGVudGljYWxseQorICogaW1wbGVtZW50ZWQuLi4KKyAqLworc3RhdGljIHZvaWQgZG9fb29wc19lbnRlcl9leGl0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdGF0aWMgaW50IHNwaW5fY291bnRlcjsKKworCWlmICghcGF1c2Vfb25fb29wcykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBhdXNlX29uX29vcHNfbG9jaywgZmxhZ3MpOworCWlmIChwYXVzZV9vbl9vb3BzX2ZsYWcgPT0gMCkgeworCQkvKiBUaGlzIENQVSBtYXkgbm93IHByaW50IHRoZSBvb3BzIG1lc3NhZ2UgKi8KKwkJcGF1c2Vfb25fb29wc19mbGFnID0gMTsKKwl9IGVsc2UgeworCQkvKiBXZSBuZWVkIHRvIHN0YWxsIHRoaXMgQ1BVICovCisJCWlmICghc3Bpbl9jb3VudGVyKSB7CisJCQkvKiBUaGlzIENQVSBnZXRzIHRvIGRvIHRoZSBjb3VudGluZyAqLworCQkJc3Bpbl9jb3VudGVyID0gcGF1c2Vfb25fb29wczsKKwkJCWRvIHsKKwkJCQlzcGluX3VubG9jaygmcGF1c2Vfb25fb29wc19sb2NrKTsKKwkJCQlzcGluX21zZWMoTVNFQ19QRVJfU0VDKTsKKwkJCQlzcGluX2xvY2soJnBhdXNlX29uX29vcHNfbG9jayk7CisJCQl9IHdoaWxlICgtLXNwaW5fY291bnRlcik7CisJCQlwYXVzZV9vbl9vb3BzX2ZsYWcgPSAwOworCQl9IGVsc2UgeworCQkJLyogVGhpcyBDUFUgd2FpdHMgZm9yIGEgZGlmZmVyZW50IG9uZSAqLworCQkJd2hpbGUgKHNwaW5fY291bnRlcikgeworCQkJCXNwaW5fdW5sb2NrKCZwYXVzZV9vbl9vb3BzX2xvY2spOworCQkJCXNwaW5fbXNlYygxKTsKKwkJCQlzcGluX2xvY2soJnBhdXNlX29uX29vcHNfbG9jayk7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGF1c2Vfb25fb29wc19sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2FsbGluZyBDUFUgaXMgYWxsb3dlZCB0byBwcmludCBvb3BzLXJlbGF0ZWQgaW5mby4gIFRoaXMKKyAqIGlzIGEgYml0IHJhY3kuLgorICovCitpbnQgb29wc19tYXlfcHJpbnQodm9pZCkKK3sKKwlyZXR1cm4gcGF1c2Vfb25fb29wc19mbGFnID09IDA7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgYXJjaGl0ZWN0dXJlIGVudGVycyBpdHMgb29wcyBoYW5kbGVyLCBiZWZvcmUgaXQgcHJpbnRzCisgKiBhbnl0aGluZy4gIElmIHRoaXMgaXMgdGhlIGZpcnN0IENQVSB0byBvb3BzLCBhbmQgaXQncyBvb3BzaW5nIHRoZSBmaXJzdCB0aW1lCisgKiB0aGVuIGxldCBpdCBwcm9jZWVkLgorICoKKyAqIFRoaXMgaXMgYWxsIGVuYWJsZWQgYnkgdGhlIHBhdXNlX29uX29vcHMga2VybmVsIGJvb3Qgb3B0aW9uLiAgV2UgZG8gYWxsIHRoaXMKKyAqIHRvIGVuc3VyZSB0aGF0IG9vcHNlcyBkb24ndCBzY3JvbGwgb2ZmIHRoZSBzY3JlZW4uICBJdCBoYXMgdGhlIHNpZGUtZWZmZWN0CisgKiBvZiBwcmV2ZW50aW5nIGxhdGVyLW9vcHNpbmcgQ1BVcyBmcm9tIG11Y2tpbmcgdXAgdGhlIGRpc3BsYXksIHRvby4KKyAqCisgKiBJdCB0dXJucyBvdXQgdGhhdCB0aGUgQ1BVIHdoaWNoIGlzIGFsbG93ZWQgdG8gcHJpbnQgZW5kcyB1cCBwYXVzaW5nIGZvciB0aGUKKyAqIHJpZ2h0IGR1cmF0aW9uLCB3aGVyZWFzIGFsbCB0aGUgb3RoZXIgQ1BVcyBwYXVzZSBmb3IgdHdpY2UgYXMgbG9uZzogb25jZSBpbgorICogb29wc19lbnRlcigpLCBvbmNlIGluIG9vcHNfZXhpdCgpLgorICovCit2b2lkIG9vcHNfZW50ZXIodm9pZCkKK3sKKwlkb19vb3BzX2VudGVyX2V4aXQoKTsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHRoZSBhcmNoaXRlY3R1cmUgZXhpdHMgaXRzIG9vcHMgaGFuZGxlciwgYWZ0ZXIgcHJpbnRpbmcKKyAqIGV2ZXJ5dGhpbmcuCisgKi8KK3ZvaWQgb29wc19leGl0KHZvaWQpCit7CisJZG9fb29wc19lbnRlcl9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggYzc2YWQyNWUuLjlkZTYzN2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTI2NSwxMiArMjY1LDEyIEBACiB9CiAKIC8qIFdlIGNoZWF0IGhlcmUgYW5kIHRlbXBvcmFyaWx5IG1hbmdsZSB0aGUgc3RyaW5nLiAqLwotaW50IHBhcmFtX2FycmF5KGNvbnN0IGNoYXIgKm5hbWUsCi0JCWNvbnN0IGNoYXIgKnZhbCwKLQkJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwKLQkJdm9pZCAqZWxlbSwgaW50IGVsZW1zaXplLAotCQlpbnQgKCpzZXQpKGNvbnN0IGNoYXIgKiwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApLAotCQlpbnQgKm51bSkKK3N0YXRpYyBpbnQgcGFyYW1fYXJyYXkoY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnZhbCwKKwkJICAgICAgIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgsCisJCSAgICAgICB2b2lkICplbGVtLCBpbnQgZWxlbXNpemUsCisJCSAgICAgICBpbnQgKCpzZXQpKGNvbnN0IGNoYXIgKiwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApLAorCQkgICAgICAgaW50ICpudW0pCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qga2VybmVsX3BhcmFtIGtwOwpAQCAtNjM4LDEzICs2MzgsOCBAQAogCWlmICghYXR0cmlidXRlLT5zaG93KQogCQlyZXR1cm4gLUVJTzsKIAotCWlmICghdHJ5X21vZHVsZV9nZXQobWstPm1vZCkpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0ID0gYXR0cmlidXRlLT5zaG93KGF0dHJpYnV0ZSwgbWstPm1vZCwgYnVmKTsKIAotCW1vZHVsZV9wdXQobWstPm1vZCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NjIsMTMgKzY1Nyw4IEBACiAJaWYgKCFhdHRyaWJ1dGUtPnN0b3JlKQogCQlyZXR1cm4gLUVJTzsKIAotCWlmICghdHJ5X21vZHVsZV9nZXQobWstPm1vZCkpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0ID0gYXR0cmlidXRlLT5zdG9yZShhdHRyaWJ1dGUsIG1rLT5tb2QsIGJ1ZiwgbGVuKTsKIAotCW1vZHVsZV9wdXQobWstPm1vZCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKaW5kZXggMjE2ZjU3NC4uOTk0NDM3OSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgpAQCAtMzUzLDYgKzM1NCw3IEBACiAJCQkJaHJ0aW1lcl9mb3J3YXJkKCZ0aW1yLT5pdC5yZWFsLnRpbWVyLAogCQkJCQkJdGltci0+aXQucmVhbC5pbnRlcnZhbCk7CiAJCQlyZXQgPSBIUlRJTUVSX1JFU1RBUlQ7CisJCQkrK3RpbXItPml0X3JlcXVldWVfcGVuZGluZzsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL01ha2VmaWxlIGIva2VybmVsL3Bvd2VyL01ha2VmaWxlCmluZGV4IDA0YmU3ZDAuLjhkMGFmM2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9NYWtlZmlsZQorKysgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAKIG9iai15CQkJCTo9IG1haW4ubyBwcm9jZXNzLm8gY29uc29sZS5vCiBvYmotJChDT05GSUdfUE1fTEVHQUNZKQkJKz0gcG0ubwotb2JqLSQoQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQpCSs9IHN3c3VzcC5vIGRpc2subyBzbmFwc2hvdC5vCitvYmotJChDT05GSUdfU09GVFdBUkVfU1VTUEVORCkJKz0gc3dzdXNwLm8gZGlzay5vIHNuYXBzaG90Lm8gc3dhcC5vIHVzZXIubwogCiBvYmotJChDT05GSUdfU1VTUEVORF9TTVApCSs9IHNtcC5vCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9kaXNrLmMgYi9rZXJuZWwvcG93ZXIvZGlzay5jCmluZGV4IDBiNDM4NDcuLjgxZDRkOTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9kaXNrLmMKKysrIGIva2VybmVsL3Bvd2VyL2Rpc2suYwpAQCAtMjIsMTcgKzIyLDYgQEAKICNpbmNsdWRlICJwb3dlci5oIgogCiAKLWV4dGVybiBzdXNwZW5kX2Rpc2tfbWV0aG9kX3QgcG1fZGlza19tb2RlOwotCi1leHRlcm4gaW50IHN3c3VzcF9zaHJpbmtfbWVtb3J5KHZvaWQpOwotZXh0ZXJuIGludCBzd3N1c3Bfc3VzcGVuZCh2b2lkKTsKLWV4dGVybiBpbnQgc3dzdXNwX3dyaXRlKHN0cnVjdCBwYmUgKnBibGlzdCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKTsKLWV4dGVybiBpbnQgc3dzdXNwX2NoZWNrKHZvaWQpOwotZXh0ZXJuIGludCBzd3N1c3BfcmVhZChzdHJ1Y3QgcGJlICoqcGJsaXN0X3B0cik7Ci1leHRlcm4gdm9pZCBzd3N1c3BfY2xvc2Uodm9pZCk7Ci1leHRlcm4gaW50IHN3c3VzcF9yZXN1bWUodm9pZCk7Ci0KLQogc3RhdGljIGludCBub3Jlc3VtZSA9IDA7CiBjaGFyIHJlc3VtZV9maWxlWzI1Nl0gPSBDT05GSUdfUE1fU1REX1BBUlRJVElPTjsKIGRldl90IHN3c3VzcF9yZXN1bWVfZGV2aWNlOwpAQCAtNzAsMTAgKzU5LDYgQEAKIAl3aGlsZSgxKTsKIH0KIAotCi1zdGF0aWMgaW50IGluX3N1c3BlbmQgX19ub3NhdmVkYXRhID0gMDsKLQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZmluaXNoKHZvaWQpCiB7CiAJaWYgKHBtX2Rpc2tfbW9kZSA9PSBQTV9ESVNLX1BMQVRGT1JNKSB7CkBAIC04Nyw3ICs3Miw2IEBACiAJaW50IGVycm9yOwogCiAJcG1fcHJlcGFyZV9jb25zb2xlKCk7Ci0Jc3lzX3N5bmMoKTsKIAlkaXNhYmxlX25vbmJvb3RfY3B1cygpOwogCiAJaWYgKGZyZWV6ZV9wcm9jZXNzZXMoKSkgewpAQCAtMTQ1LDcgKzEyOSw3IEBACiAJaWYgKGluX3N1c3BlbmQpIHsKIAkJZGV2aWNlX3Jlc3VtZSgpOwogCQlwcl9kZWJ1ZygiUE06IHdyaXRpbmcgaW1hZ2UuXG4iKTsKLQkJZXJyb3IgPSBzd3N1c3Bfd3JpdGUocGFnZWRpcl9ub3NhdmUsIG5yX2NvcHlfcGFnZXMpOworCQllcnJvciA9IHN3c3VzcF93cml0ZSgpOwogCQlpZiAoIWVycm9yKQogCQkJcG93ZXJfZG93bihwbV9kaXNrX21vZGUpOwogCQllbHNlIHsKQEAgLTIxNiw3ICsyMDAsNyBAQAogCiAJcHJfZGVidWcoIlBNOiBSZWFkaW5nIHN3c3VzcCBpbWFnZS5cbiIpOwogCi0JaWYgKChlcnJvciA9IHN3c3VzcF9yZWFkKCZwYWdlZGlyX25vc2F2ZSkpKSB7CisJaWYgKChlcnJvciA9IHN3c3VzcF9yZWFkKCkpKSB7CiAJCXN3c3VzcF9mcmVlKCk7CiAJCWdvdG8gVGhhdzsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCA5Y2IyMzVjLi5lZTM3MWY1IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCitpbnQgc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7CiAJaW50IGVycm9yID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3BtLmMgYi9rZXJuZWwvcG93ZXIvcG0uYwppbmRleCAzM2M1MDhlLi4wZjY5MDhjIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcG0uYworKysgYi9rZXJuZWwvcG93ZXIvcG0uYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fbGVnYWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogaW50IHBtX2FjdGl2ZTsKIApAQCAtNDAsNyArNDEsNyBAQAogICoJdW50aWwgYSByZXN1bWUgYnV0IHRoYXQgd2lsbCBiZSBmaW5lLgogICovCiAgCi1zdGF0aWMgREVDTEFSRV9NVVRFWChwbV9kZXZzX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChwbV9kZXZzX2xvY2spOwogc3RhdGljIExJU1RfSEVBRChwbV9kZXZzKTsKIAogLyoqCkBAIC02Nyw5ICs2OCw5IEBACiAJCWRldi0+aWQgPSBpZDsKIAkJZGV2LT5jYWxsYmFjayA9IGNhbGxiYWNrOwogCi0JCWRvd24oJnBtX2RldnNfbG9jayk7CisJCW11dGV4X2xvY2soJnBtX2RldnNfbG9jayk7CiAJCWxpc3RfYWRkKCZkZXYtPmVudHJ5LCAmcG1fZGV2cyk7Ci0JCXVwKCZwbV9kZXZzX2xvY2spOworCQltdXRleF91bmxvY2soJnBtX2RldnNfbG9jayk7CiAJfQogCXJldHVybiBkZXY7CiB9CkBAIC04NSw5ICs4Niw5IEBACiB2b2lkIHBtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiAqZGV2KQogewogCWlmIChkZXYpIHsKLQkJZG93bigmcG1fZGV2c19sb2NrKTsKKwkJbXV0ZXhfbG9jaygmcG1fZGV2c19sb2NrKTsKIAkJbGlzdF9kZWwoJmRldi0+ZW50cnkpOwotCQl1cCgmcG1fZGV2c19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZwbV9kZXZzX2xvY2spOwogCiAJCWtmcmVlKGRldik7CiAJfQpAQCAtMTE4LDcgKzExOSw3IEBACiAJaWYgKCFjYWxsYmFjaykKIAkJcmV0dXJuOwogCi0JZG93bigmcG1fZGV2c19sb2NrKTsKKwltdXRleF9sb2NrKCZwbV9kZXZzX2xvY2spOwogCWVudHJ5ID0gcG1fZGV2cy5uZXh0OwogCXdoaWxlIChlbnRyeSAhPSAmcG1fZGV2cykgewogCQlzdHJ1Y3QgcG1fZGV2ICpkZXYgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgcG1fZGV2LCBlbnRyeSk7CkBAIC0xMjYsNyArMTI3LDcgQEAKIAkJaWYgKGRldi0+Y2FsbGJhY2sgPT0gY2FsbGJhY2spCiAJCQlfX3BtX3VucmVnaXN0ZXIoZGV2KTsKIAl9Ci0JdXAoJnBtX2RldnNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwbV9kZXZzX2xvY2spOwogfQogCiAvKioKQEAgLTIzNCw3ICsyMzUsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCQotCWRvd24oJnBtX2RldnNfbG9jayk7CisJbXV0ZXhfbG9jaygmcG1fZGV2c19sb2NrKTsKIAllbnRyeSA9IHBtX2RldnMubmV4dDsKIAl3aGlsZSAoZW50cnkgIT0gJnBtX2RldnMpIHsKIAkJc3RydWN0IHBtX2RldiAqZGV2ID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHBtX2RldiwgZW50cnkpOwpAQCAtMjQ2LDEzICsyNDcsMTMgQEAKIAkJCQkgKi8KIAkJCQlpZiAocnFzdCA9PSBQTV9TVVNQRU5EKQogCQkJCQlwbV91bmRvX2FsbChkZXYpOwotCQkJCXVwKCZwbV9kZXZzX2xvY2spOworCQkJCW11dGV4X3VubG9jaygmcG1fZGV2c19sb2NrKTsKIAkJCQlyZXR1cm4gc3RhdHVzOwogCQkJfQogCQl9CiAJCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJfQotCXVwKCZwbV9kZXZzX2xvY2spOworCW11dGV4X3VubG9jaygmcG1fZGV2c19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Bvd2VyLmggYi9rZXJuZWwvcG93ZXIvcG93ZXIuaAppbmRleCAzODhkYmE2Li5mMDZmMTJmIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcG93ZXIuaAorKysgYi9rZXJuZWwvcG93ZXIvcG93ZXIuaApAQCAtOCw2ICs4LDcgQEAKIAlpbnQJCQljcHVzOwogCXVuc2lnbmVkIGxvbmcJCWltYWdlX3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcJCXBhZ2VzOworCXVuc2lnbmVkIGxvbmcJCXNpemU7CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOwogCiAKQEAgLTM3LDIxICszOCw3OSBAQAogLyogUmVmZXJlbmNlcyB0byBzZWN0aW9uIGJvdW5kYXJpZXMgKi8KIGV4dGVybiBjb25zdCB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgbnJfY29weV9wYWdlczsKIGV4dGVybiBzdHJ1Y3QgcGJlICpwYWdlZGlyX25vc2F2ZTsKIAogLyogUHJlZmVycmVkIGltYWdlIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQgNTAwIE1CKSAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZTsKK2V4dGVybiBpbnQgaW5fc3VzcGVuZDsKK2V4dGVybiBkZXZfdCBzd3N1c3BfcmVzdW1lX2RldmljZTsKIAogZXh0ZXJuIGFzbWxpbmthZ2UgaW50IHN3c3VzcF9hcmNoX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gYXNtbGlua2FnZSBpbnQgc3dzdXNwX2FyY2hfcmVzdW1lKHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IGNvdW50X2RhdGFfcGFnZXModm9pZCk7Ci1leHRlcm4gdm9pZCBmcmVlX3BhZ2VkaXIoc3RydWN0IHBiZSAqcGJsaXN0KTsKLWV4dGVybiB2b2lkIHJlbGVhc2VfZWF0ZW5fcGFnZXModm9pZCk7Ci1leHRlcm4gc3RydWN0IHBiZSAqYWxsb2NfcGFnZWRpcih1bnNpZ25lZCBucl9wYWdlcywgZ2ZwX3QgZ2ZwX21hc2ssIGludCBzYWZlX25lZWRlZCk7CisKK3N0cnVjdCBzbmFwc2hvdF9oYW5kbGUgeworCWxvZmZfdAkJb2Zmc2V0OworCXVuc2lnbmVkIGludAlwYWdlOworCXVuc2lnbmVkIGludAlwYWdlX29mZnNldDsKKwl1bnNpZ25lZCBpbnQJcHJldjsKKwlzdHJ1Y3QgcGJlCSpwYmU7CisJdm9pZAkJKmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQJYnVmX29mZnNldDsKK307CisKKyNkZWZpbmUgZGF0YV9vZihoYW5kbGUpCSgoaGFuZGxlKS5idWZmZXIgKyAoaGFuZGxlKS5idWZfb2Zmc2V0KQorCitleHRlcm4gaW50IHNuYXBzaG90X3JlYWRfbmV4dChzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlICpoYW5kbGUsIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IHNuYXBzaG90X3dyaXRlX25leHQoc3RydWN0IHNuYXBzaG90X2hhbmRsZSAqaGFuZGxlLCBzaXplX3QgY291bnQpOworaW50IHNuYXBzaG90X2ltYWdlX2xvYWRlZChzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlICpoYW5kbGUpOworCisjZGVmaW5lIFNOQVBTSE9UX0lPQ19NQUdJQwknMycKKyNkZWZpbmUgU05BUFNIT1RfRlJFRVpFCQkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMSkKKyNkZWZpbmUgU05BUFNIT1RfVU5GUkVFWkUJCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDIpCisjZGVmaW5lIFNOQVBTSE9UX0FUT01JQ19TTkFQU0hPVAlfSU9XKFNOQVBTSE9UX0lPQ19NQUdJQywgMywgdm9pZCAqKQorI2RlZmluZSBTTkFQU0hPVF9BVE9NSUNfUkVTVE9SRQkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgNCkKKyNkZWZpbmUgU05BUFNIT1RfRlJFRQkJCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDUpCisjZGVmaW5lIFNOQVBTSE9UX1NFVF9JTUFHRV9TSVpFCQlfSU9XKFNOQVBTSE9UX0lPQ19NQUdJQywgNiwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgU05BUFNIT1RfQVZBSUxfU1dBUAkJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDcsIHZvaWQgKikKKyNkZWZpbmUgU05BUFNIT1RfR0VUX1NXQVBfUEFHRQkJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDgsIHZvaWQgKikKKyNkZWZpbmUgU05BUFNIT1RfRlJFRV9TV0FQX1BBR0VTCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDkpCisjZGVmaW5lIFNOQVBTSE9UX1NFVF9TV0FQX0ZJTEUJCV9JT1coU05BUFNIT1RfSU9DX01BR0lDLCAxMCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBTTkFQU0hPVF9TMlJBTQkJCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDExKQorI2RlZmluZSBTTkFQU0hPVF9JT0NfTUFYTlIJMTEKKworLyoqCisgKglUaGUgYml0bWFwIGlzIHVzZWQgZm9yIHRyYWNpbmcgYWxsb2NhdGVkIHN3YXAgcGFnZXMKKyAqCisgKglUaGUgZW50aXJlIGJpdG1hcCBjb25zaXN0cyBvZiBhIG51bWJlciBvZiBiaXRtYXBfcGFnZQorICoJc3RydWN0dXJlcyBsaW5rZWQgd2l0aCB0aGUgaGVscCBvZiB0aGUgLm5leHQgbWVtYmVyLgorICoJVGh1cyBlYWNoIHBhZ2UgY2FuIGJlIGFsbG9jYXRlZCBpbmRpdmlkdWFsbHksIHNvIHdlIG9ubHkKKyAqCW5lZWQgdG8gbWFrZSAwLW9yZGVyIG1lbW9yeSBhbGxvY2F0aW9ucyB0byBjcmVhdGUKKyAqCXRoZSBiaXRtYXAuCisgKi8KKworI2RlZmluZSBCSVRNQVBfUEFHRV9TSVpFCShQQUdFX1NJWkUgLSBzaXplb2Yodm9pZCAqKSkKKyNkZWZpbmUgQklUTUFQX1BBR0VfQ0hVTktTCShCSVRNQVBfUEFHRV9TSVpFIC8gc2l6ZW9mKGxvbmcpKQorI2RlZmluZSBCSVRTX1BFUl9DSFVOSwkJKHNpemVvZihsb25nKSAqIDgpCisjZGVmaW5lIEJJVE1BUF9QQUdFX0JJVFMJKEJJVE1BUF9QQUdFX0NIVU5LUyAqIEJJVFNfUEVSX0NIVU5LKQorCitzdHJ1Y3QgYml0bWFwX3BhZ2UgeworCXVuc2lnbmVkIGxvbmcJCWNodW5rc1tCSVRNQVBfUEFHRV9DSFVOS1NdOworCXN0cnVjdCBiaXRtYXBfcGFnZQkqbmV4dDsKK307CisKK2V4dGVybiB2b2lkIGZyZWVfYml0bWFwKHN0cnVjdCBiaXRtYXBfcGFnZSAqYml0bWFwKTsKK2V4dGVybiBzdHJ1Y3QgYml0bWFwX3BhZ2UgKmFsbG9jX2JpdG1hcCh1bnNpZ25lZCBpbnQgbnJfYml0cyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBhbGxvY19zd2FwX3BhZ2UoaW50IHN3YXAsIHN0cnVjdCBiaXRtYXBfcGFnZSAqYml0bWFwKTsKK2V4dGVybiB2b2lkIGZyZWVfYWxsX3N3YXBfcGFnZXMoaW50IHN3YXAsIHN0cnVjdCBiaXRtYXBfcGFnZSAqYml0bWFwKTsKKworZXh0ZXJuIGludCBzd3N1c3BfY2hlY2sodm9pZCk7CitleHRlcm4gaW50IHN3c3VzcF9zaHJpbmtfbWVtb3J5KHZvaWQpOwogZXh0ZXJuIHZvaWQgc3dzdXNwX2ZyZWUodm9pZCk7Ci1leHRlcm4gaW50IGFsbG9jX2RhdGFfcGFnZXMoc3RydWN0IHBiZSAqcGJsaXN0LCBnZnBfdCBnZnBfbWFzaywgaW50IHNhZmVfbmVlZGVkKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc25hcHNob3RfbnJfcGFnZXModm9pZCk7Ci1leHRlcm4gc3RydWN0IHBiZSAqc25hcHNob3RfcGJsaXN0KHZvaWQpOwotZXh0ZXJuIHZvaWQgc25hcHNob3RfcGJsaXN0X3NldChzdHJ1Y3QgcGJlICpwYmxpc3QpOworZXh0ZXJuIGludCBzd3N1c3Bfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiBpbnQgc3dzdXNwX3Jlc3VtZSh2b2lkKTsKK2V4dGVybiBpbnQgc3dzdXNwX3JlYWQodm9pZCk7CitleHRlcm4gaW50IHN3c3VzcF93cml0ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHN3c3VzcF9jbG9zZSh2b2lkKTsKK2V4dGVybiBpbnQgc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggMjhkZTExOC4uOGFjN2MzNWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKKysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtMTIsMTEgKzEyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAKIC8qIAogICogVGltZW91dCBmb3Igc3RvcHBpbmcgcHJvY2Vzc2VzCiAgKi8KLSNkZWZpbmUgVElNRU9VVAkoNiAqIEhaKQorI2RlZmluZSBUSU1FT1VUCSgyMCAqIEhaKQogCiAKIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6ZWFibGUoc3RydWN0IHRhc2tfc3RydWN0ICogcCkKQEAgLTU0LDM4ICs1NSw2MiBAQAogCWN1cnJlbnQtPnN0YXRlID0gc2F2ZTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGZyZWV6ZV9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFmcmVlemluZyhwKSkgeworCQlmcmVlemUocCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJCXNpZ25hbF93YWtlX3VwKHAsIDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJfQorfQorCiAvKiAwID0gc3VjY2VzcywgZWxzZSAjIG9mIHByb2Nlc3NlcyB0aGF0IHdlIGZhaWxlZCB0byBzdG9wICovCiBpbnQgZnJlZXplX3Byb2Nlc3Nlcyh2b2lkKQogewotCWludCB0b2RvOworCWludCB0b2RvLCBucl91c2VyLCB1c2VyX2Zyb3plbjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpbnRrKCAiU3RvcHBpbmcgdGFza3M6ICIgKTsKIAlzdGFydF90aW1lID0gamlmZmllczsKKwl1c2VyX2Zyb3plbiA9IDA7CiAJZG8gewotCQl0b2RvID0gMDsKKwkJbnJfdXNlciA9IHRvZG8gPSAwOwogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlkb19lYWNoX3RocmVhZChnLCBwKSB7CiAJCQlpZiAoIWZyZWV6ZWFibGUocCkpCiAJCQkJY29udGludWU7CiAJCQlpZiAoZnJvemVuKHApKQogCQkJCWNvbnRpbnVlOwotCi0JCQlmcmVlemUocCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQkJc2lnbmFsX3dha2VfdXAocCwgMCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCQl0b2RvKys7CisJCQlpZiAocC0+bW0gJiYgIShwLT5mbGFncyAmIFBGX0JPUlJPV0VEX01NKSkgeworCQkJCS8qIFRoZSB0YXNrIGlzIGEgdXNlci1zcGFjZSBvbmUuCisJCQkJICogRnJlZXplIGl0IHVubGVzcyB0aGVyZSdzIGEgdmZvcmsgY29tcGxldGlvbgorCQkJCSAqIHBlbmRpbmcKKwkJCQkgKi8KKwkJCQlpZiAoIXAtPnZmb3JrX2RvbmUpCisJCQkJCWZyZWV6ZV9wcm9jZXNzKHApOworCQkJCW5yX3VzZXIrKzsKKwkJCX0gZWxzZSB7CisJCQkJLyogRnJlZXplIG9ubHkgaWYgdGhlIHVzZXIgc3BhY2UgaXMgZnJvemVuICovCisJCQkJaWYgKHVzZXJfZnJvemVuKQorCQkJCQlmcmVlemVfcHJvY2VzcyhwKTsKKwkJCQl0b2RvKys7CisJCQl9CiAJCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJeWllbGQoKTsJCQkvKiBZaWVsZCBpcyBva2F5IGhlcmUgKi8KLQkJaWYgKHRvZG8gJiYgdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydF90aW1lICsgVElNRU9VVCkpIHsKLQkJCXByaW50ayggIlxuIiApOwotCQkJcHJpbnRrKEtFUk5fRVJSICIgc3RvcHBpbmcgdGFza3MgZmFpbGVkICglZCB0YXNrcyByZW1haW5pbmcpXG4iLCB0b2RvICk7Ci0JCQlicmVhazsKKwkJdG9kbyArPSBucl91c2VyOworCQlpZiAoIXVzZXJfZnJvemVuICYmICFucl91c2VyKSB7CisJCQlzeXNfc3luYygpOworCQkJc3RhcnRfdGltZSA9IGppZmZpZXM7CiAJCX0KKwkJdXNlcl9mcm96ZW4gPSAhbnJfdXNlcjsKKwkJeWllbGQoKTsJCQkvKiBZaWVsZCBpcyBva2F5IGhlcmUgKi8KKwkJaWYgKHRvZG8gJiYgdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydF90aW1lICsgVElNRU9VVCkpCisJCQlicmVhazsKIAl9IHdoaWxlKHRvZG8pOwogCiAJLyogVGhpcyBkb2VzIG5vdCB1bmZyZWV6ZSBwcm9jZXNzZXMgdGhhdCBhcmUgYWxyZWFkeSBmcm96ZW4KQEAgLTk0LDggKzExOSwxNCBAQAogCSAqIGJ1dCBpdCBjbGVhbnMgdXAgbGVmdG92ZXIgUEZfRlJFRVpFIHJlcXVlc3RzLgogCSAqLwogCWlmICh0b2RvKSB7CisJCXByaW50ayggIlxuIiApOworCQlwcmludGsoS0VSTl9FUlIgIiBzdG9wcGluZyB0YXNrcyB0aW1lZCBvdXQgIgorCQkJImFmdGVyICVkIHNlY29uZHMgKCVkIHRhc2tzIHJlbWFpbmluZyk6XG4iLAorCQkJVElNRU9VVCAvIEhaLCB0b2RvKTsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJZG9fZWFjaF90aHJlYWQoZywgcCkKKwkJZG9fZWFjaF90aHJlYWQoZywgcCkgeworCQkJaWYgKGZyZWV6ZWFibGUocCkgJiYgIWZyb3plbihwKSkKKwkJCQlwcmludGsoS0VSTl9FUlIgIiAgJXNcbiIsIHAtPmNvbW0pOwogCQkJaWYgKGZyZWV6aW5nKHApKSB7CiAJCQkJcHJfZGVidWcoIiAgY2xlYW4gdXA6ICVzXG4iLCBwLT5jb21tKTsKIAkJCQlwLT5mbGFncyAmPSB+UEZfRlJFRVpFOwpAQCAtMTAzLDcgKzEzNCw3IEBACiAJCQkJcmVjYWxjX3NpZ3BlbmRpbmdfdHNrKHApOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKIAkJCX0KLQkJd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CisJCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJcmV0dXJuIHRvZG87CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NtcC5jIGIva2VybmVsL3Bvd2VyL3NtcC5jCmluZGV4IDkxMWZjNjIuLjU5NTczMTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbXAuYworKysgYi9rZXJuZWwvcG93ZXIvc21wLmMKQEAgLTQ5LDkgKzQ5LDcgQEAKIAogCXByaW50aygiVGhhd2luZyBjcHVzIC4uLlxuIik7CiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBmcm96ZW5fY3B1cykgewotCQllcnJvciA9IHNtcF9wcmVwYXJlX2NwdShjcHUpOwotCQlpZiAoIWVycm9yKQotCQkJZXJyb3IgPSBjcHVfdXAoY3B1KTsKKwkJZXJyb3IgPSBjcHVfdXAoY3B1KTsKIAkJaWYgKCFlcnJvcikgewogCQkJcHJpbnRrKCJDUFUlZCBpcyB1cFxuIiwgY3B1KTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCA4ZDVhNTk4Li5jNTg2M2QwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMTAsNiArMTAsNyBAQAogICovCiAKIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KQEAgLTM0LDcgKzM1LDkgQEAKICNpbmNsdWRlICJwb3dlci5oIgogCiBzdHJ1Y3QgcGJlICpwYWdlZGlyX25vc2F2ZTsKLXVuc2lnbmVkIGludCBucl9jb3B5X3BhZ2VzOworc3RhdGljIHVuc2lnbmVkIGludCBucl9jb3B5X3BhZ2VzOworc3RhdGljIHVuc2lnbmVkIGludCBucl9tZXRhX3BhZ2VzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgKmJ1ZmZlcjsKIAogI2lmZGVmIENPTkZJR19ISUdITUVNCiB1bnNpZ25lZCBpbnQgY291bnRfaGlnaG1lbV9wYWdlcyh2b2lkKQpAQCAtODAsNyArODMsNyBAQAogCQl2b2lkICprYWRkcjsKIAkJdW5zaWduZWQgbG9uZyBwZm4gPSB6b25lX3BmbiArIHpvbmUtPnpvbmVfc3RhcnRfcGZuOwogCi0JCWlmICghKHBmbiUxMDAwKSkKKwkJaWYgKCEocGZuJTEwMDAwKSkKIAkJCXByaW50aygiLiIpOwogCQlpZiAoIXBmbl92YWxpZChwZm4pKQogCQkJY29udGludWU7CkBAIC0xMTksMTMgKzEyMiwxNSBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCWludCByZXMgPSAwOwogCi0JcHJfZGVidWcoInN3c3VzcDogU2F2aW5nIEhpZ2htZW1cbiIpOworCXByX2RlYnVnKCJzd3N1c3A6IFNhdmluZyBIaWdobWVtIik7CisJZHJhaW5fbG9jYWxfcGFnZXMoKTsKIAlmb3JfZWFjaF96b25lICh6b25lKSB7CiAJCWlmIChpc19oaWdobWVtKHpvbmUpKQogCQkJcmVzID0gc2F2ZV9oaWdobWVtX3pvbmUoem9uZSk7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwogCX0KKwlwcmludGsoIlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNSw3ICsyNDAsNyBAQAogICoJZnJlZV9wYWdlZGlyIC0gZnJlZSBwYWdlcyBhbGxvY2F0ZWQgd2l0aCBhbGxvY19wYWdlZGlyKCkKICAqLwogCi12b2lkIGZyZWVfcGFnZWRpcihzdHJ1Y3QgcGJlICpwYmxpc3QpCitzdGF0aWMgdm9pZCBmcmVlX3BhZ2VkaXIoc3RydWN0IHBiZSAqcGJsaXN0KQogewogCXN0cnVjdCBwYmUgKnBiZTsKIApAQCAtMzAxLDcgKzMwNiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZWF0ZW5fcGFnZSAqZWF0ZW5fcGFnZXMgPSBOVUxMOwogCi12b2lkIHJlbGVhc2VfZWF0ZW5fcGFnZXModm9pZCkKK3N0YXRpYyB2b2lkIHJlbGVhc2VfZWF0ZW5fcGFnZXModm9pZCkKIHsKIAlzdHJ1Y3QgZWF0ZW5fcGFnZSAqcCwgKnE7CiAKQEAgLTM3Niw3ICszODEsNiBAQAogCWlmICghbnJfcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCi0JcHJfZGVidWcoImFsbG9jX3BhZ2VkaXIoKTogbnJfcGFnZXMgPSAlZFxuIiwgbnJfcGFnZXMpOwogCXBibGlzdCA9IGFsbG9jX2ltYWdlX3BhZ2UoZ2ZwX21hc2ssIHNhZmVfbmVlZGVkKTsKIAkvKiBGSVhNRTogcmV3cml0ZSB0aGlzIHVnbHkgbG9vcCAqLwogCWZvciAocGJlID0gcGJsaXN0LCBudW0gPSBQQkVTX1BFUl9QQUdFOyBwYmUgJiYgbnVtIDwgbnJfcGFnZXM7CkBAIC0zODgsNyArMzkyLDcgQEAKIAkJZnJlZV9wYWdlZGlyKHBibGlzdCk7CiAJCXBibGlzdCA9IE5VTEw7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAJY3JlYXRlX3BiZV9saXN0KHBibGlzdCwgbnJfcGFnZXMpOworCQljcmVhdGVfcGJlX2xpc3QocGJsaXN0LCBucl9wYWdlcyk7CiAJcmV0dXJuIHBibGlzdDsKIH0KIApAQCAtNDE0LDYgKzQxOCwxMCBAQAogCQkJCX0KIAkJCX0KIAl9CisJbnJfY29weV9wYWdlcyA9IDA7CisJbnJfbWV0YV9wYWdlcyA9IDA7CisJcGFnZWRpcl9ub3NhdmUgPSBOVUxMOworCWJ1ZmZlciA9IE5VTEw7CiB9CiAKIApAQCAtNDM3LDcgKzQ0NSw3IEBACiAJCShucl9wYWdlcyArIFBCRVNfUEVSX1BBR0UgLSAxKSAvIFBCRVNfUEVSX1BBR0UpOwogfQogCi1pbnQgYWxsb2NfZGF0YV9wYWdlcyhzdHJ1Y3QgcGJlICpwYmxpc3QsIGdmcF90IGdmcF9tYXNrLCBpbnQgc2FmZV9uZWVkZWQpCitzdGF0aWMgaW50IGFsbG9jX2RhdGFfcGFnZXMoc3RydWN0IHBiZSAqcGJsaXN0LCBnZnBfdCBnZnBfbWFzaywgaW50IHNhZmVfbmVlZGVkKQogewogCXN0cnVjdCBwYmUgKnA7CiAKQEAgLTUwNCw3ICs1MTIsMzE4IEBACiAJICovCiAKIAlucl9jb3B5X3BhZ2VzID0gbnJfcGFnZXM7CisJbnJfbWV0YV9wYWdlcyA9IChucl9wYWdlcyAqIHNpemVvZihsb25nKSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiAKIAlwcmludGsoInN3c3VzcDogY3JpdGljYWwgc2VjdGlvbi86IGRvbmUgKCVkIHBhZ2VzIGNvcGllZClcbiIsIG5yX3BhZ2VzKTsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHZvaWQgaW5pdF9oZWFkZXIoc3RydWN0IHN3c3VzcF9pbmZvICppbmZvKQoreworCW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHN3c3VzcF9pbmZvKSk7CisJaW5mby0+dmVyc2lvbl9jb2RlID0gTElOVVhfVkVSU0lPTl9DT0RFOworCWluZm8tPm51bV9waHlzcGFnZXMgPSBudW1fcGh5c3BhZ2VzOworCW1lbWNweSgmaW5mby0+dXRzLCAmc3lzdGVtX3V0c25hbWUsIHNpemVvZihzeXN0ZW1fdXRzbmFtZSkpOworCWluZm8tPmNwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKKwlpbmZvLT5pbWFnZV9wYWdlcyA9IG5yX2NvcHlfcGFnZXM7CisJaW5mby0+cGFnZXMgPSBucl9jb3B5X3BhZ2VzICsgbnJfbWV0YV9wYWdlcyArIDE7CisJaW5mby0+c2l6ZSA9IGluZm8tPnBhZ2VzOworCWluZm8tPnNpemUgPDw9IFBBR0VfU0hJRlQ7Cit9CisKKy8qKgorICoJcGFja19vcmlnX2FkZHJlc3NlcyAtIHRoZSAub3JpZ19hZGRyZXNzIGZpZWxkcyBvZiB0aGUgUEJFcyBmcm9tIHRoZQorICoJbGlzdCBzdGFydGluZyBhdCBAcGJlIGFyZSBzdG9yZWQgaW4gdGhlIGFycmF5IEBidWZbXSAoMSBwYWdlKQorICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBiZSAqcGFja19vcmlnX2FkZHJlc3Nlcyh1bnNpZ25lZCBsb25nICpidWYsIHN0cnVjdCBwYmUgKnBiZSkKK3sKKwlpbnQgajsKKworCWZvciAoaiA9IDA7IGogPCBQQUdFX1NJWkUgLyBzaXplb2YobG9uZykgJiYgcGJlOyBqKyspIHsKKwkJYnVmW2pdID0gcGJlLT5vcmlnX2FkZHJlc3M7CisJCXBiZSA9IHBiZS0+bmV4dDsKKwl9CisJaWYgKCFwYmUpCisJCWZvciAoOyBqIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKGxvbmcpOyBqKyspCisJCQlidWZbal0gPSAwOworCXJldHVybiBwYmU7Cit9CisKKy8qKgorICoJc25hcHNob3RfcmVhZF9uZXh0IC0gdXNlZCBmb3IgcmVhZGluZyB0aGUgc3lzdGVtIG1lbW9yeSBzbmFwc2hvdC4KKyAqCisgKglPbiB0aGUgZmlyc3QgY2FsbCB0byBpdCBAaGFuZGxlIHNob3VsZCBwb2ludCB0byBhIHplcm9lZAorICoJc25hcHNob3RfaGFuZGxlIHN0cnVjdHVyZS4gIFRoZSBzdHJ1Y3R1cmUgZ2V0cyB1cGRhdGVkIGFuZCBhIHBvaW50ZXIKKyAqCXRvIGl0IHNob3VsZCBiZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBldmVyeSBuZXh0IHRpbWUuCisgKgorICoJVGhlIEBjb3VudCBwYXJhbWV0ZXIgc2hvdWxkIGNvbnRhaW4gdGhlIG51bWJlciBvZiBieXRlcyB0aGUgY2FsbGVyCisgKgl3YW50cyB0byByZWFkIGZyb20gdGhlIHNuYXBzaG90LiAgSXQgbXVzdCBub3QgYmUgemVyby4KKyAqCisgKglPbiBzdWNjZXNzIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyLiAgVGhlbiwgdGhlIGNhbGxlcgorICoJaXMgYWxsb3dlZCB0byByZWFkIHVwIHRvIHRoZSByZXR1cm5lZCBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgbWVtb3J5CisgKglsb2NhdGlvbiBjb21wdXRlZCBieSB0aGUgZGF0YV9vZigpIG1hY3JvLiAgVGhlIG51bWJlciByZXR1cm5lZAorICoJbWF5IGJlIHNtYWxsZXIgdGhhbiBAY291bnQsIGJ1dCB0aGlzIG9ubHkgaGFwcGVucyBpZiB0aGUgcmVhZCB3b3VsZAorICoJY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5IG90aGVyd2lzZS4KKyAqCisgKglUaGUgZnVuY3Rpb24gcmV0dXJucyAwIHRvIGluZGljYXRlIHRoZSBlbmQgb2YgZGF0YSBzdHJlYW0gY29uZGl0aW9uLAorICoJYW5kIGEgbmVnYXRpdmUgbnVtYmVyIGlzIHJldHVybmVkIG9uIGVycm9yLiAgSW4gc3VjaCBjYXNlcyB0aGUKKyAqCXN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IEBoYW5kbGUgaXMgbm90IHVwZGF0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZAorICoJYW55IG1vcmUuCisgKi8KKworaW50IHNuYXBzaG90X3JlYWRfbmV4dChzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlICpoYW5kbGUsIHNpemVfdCBjb3VudCkKK3sKKwlpZiAoaGFuZGxlLT5wYWdlID4gbnJfbWV0YV9wYWdlcyArIG5yX2NvcHlfcGFnZXMpCisJCXJldHVybiAwOworCWlmICghYnVmZmVyKSB7CisJCS8qIFRoaXMgbWFrZXMgdGhlIGJ1ZmZlciBiZSBmcmVlZCBieSBzd3N1c3BfZnJlZSgpICovCisJCWJ1ZmZlciA9IGFsbG9jX2ltYWdlX3BhZ2UoR0ZQX0FUT01JQywgMCk7CisJCWlmICghYnVmZmVyKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICghaGFuZGxlLT5vZmZzZXQpIHsKKwkJaW5pdF9oZWFkZXIoKHN0cnVjdCBzd3N1c3BfaW5mbyAqKWJ1ZmZlcik7CisJCWhhbmRsZS0+YnVmZmVyID0gYnVmZmVyOworCQloYW5kbGUtPnBiZSA9IHBhZ2VkaXJfbm9zYXZlOworCX0KKwlpZiAoaGFuZGxlLT5wcmV2IDwgaGFuZGxlLT5wYWdlKSB7CisJCWlmIChoYW5kbGUtPnBhZ2UgPD0gbnJfbWV0YV9wYWdlcykgeworCQkJaGFuZGxlLT5wYmUgPSBwYWNrX29yaWdfYWRkcmVzc2VzKGJ1ZmZlciwgaGFuZGxlLT5wYmUpOworCQkJaWYgKCFoYW5kbGUtPnBiZSkKKwkJCQloYW5kbGUtPnBiZSA9IHBhZ2VkaXJfbm9zYXZlOworCQl9IGVsc2UgeworCQkJaGFuZGxlLT5idWZmZXIgPSAodm9pZCAqKWhhbmRsZS0+cGJlLT5hZGRyZXNzOworCQkJaGFuZGxlLT5wYmUgPSBoYW5kbGUtPnBiZS0+bmV4dDsKKwkJfQorCQloYW5kbGUtPnByZXYgPSBoYW5kbGUtPnBhZ2U7CisJfQorCWhhbmRsZS0+YnVmX29mZnNldCA9IGhhbmRsZS0+cGFnZV9vZmZzZXQ7CisJaWYgKGhhbmRsZS0+cGFnZV9vZmZzZXQgKyBjb3VudCA+PSBQQUdFX1NJWkUpIHsKKwkJY291bnQgPSBQQUdFX1NJWkUgLSBoYW5kbGUtPnBhZ2Vfb2Zmc2V0OworCQloYW5kbGUtPnBhZ2Vfb2Zmc2V0ID0gMDsKKwkJaGFuZGxlLT5wYWdlKys7CisJfSBlbHNlIHsKKwkJaGFuZGxlLT5wYWdlX29mZnNldCArPSBjb3VudDsKKwl9CisJaGFuZGxlLT5vZmZzZXQgKz0gY291bnQ7CisJcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqCW1hcmtfdW5zYWZlX3BhZ2VzIC0gbWFyayB0aGUgcGFnZXMgdGhhdCBjYW5ub3QgYmUgdXNlZCBmb3Igc3RvcmluZworICoJdGhlIGltYWdlIGR1cmluZyByZXN1bWUsIGJlY2F1c2UgdGhleSBjb25mbGljdCB3aXRoIHRoZSBwYWdlcyB0aGF0CisgKgloYWQgYmVlbiB1c2VkIGJlZm9yZSBzdXNwZW5kCisgKi8KKworc3RhdGljIGludCBtYXJrX3Vuc2FmZV9wYWdlcyhzdHJ1Y3QgcGJlICpwYmxpc3QpCit7CisJc3RydWN0IHpvbmUgKnpvbmU7CisJdW5zaWduZWQgbG9uZyB6b25lX3BmbjsKKwlzdHJ1Y3QgcGJlICpwOworCisJaWYgKCFwYmxpc3QpIC8qIGEgc2FuaXR5IGNoZWNrICovCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2xlYXIgcGFnZSBmbGFncyAqLworCWZvcl9lYWNoX3pvbmUgKHpvbmUpIHsKKwkJZm9yICh6b25lX3BmbiA9IDA7IHpvbmVfcGZuIDwgem9uZS0+c3Bhbm5lZF9wYWdlczsgKyt6b25lX3BmbikKKwkJCWlmIChwZm5fdmFsaWQoem9uZV9wZm4gKyB6b25lLT56b25lX3N0YXJ0X3BmbikpCisJCQkJQ2xlYXJQYWdlTm9zYXZlRnJlZShwZm5fdG9fcGFnZSh6b25lX3BmbiArCisJCQkJCXpvbmUtPnpvbmVfc3RhcnRfcGZuKSk7CisJfQorCisJLyogTWFyayBvcmlnIGFkZHJlc3NlcyAqLworCWZvcl9lYWNoX3BiZSAocCwgcGJsaXN0KSB7CisJCWlmICh2aXJ0X2FkZHJfdmFsaWQocC0+b3JpZ19hZGRyZXNzKSkKKwkJCVNldFBhZ2VOb3NhdmVGcmVlKHZpcnRfdG9fcGFnZShwLT5vcmlnX2FkZHJlc3MpKTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfcGFnZV9iYWNrdXBfbGlzdChzdHJ1Y3QgcGJlICpkc3QsIHN0cnVjdCBwYmUgKnNyYykKK3sKKwkvKiBXZSBhc3N1bWUgYm90aCBsaXN0cyBjb250YWluIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cyAqLworCXdoaWxlIChzcmMpIHsKKwkJZHN0LT5vcmlnX2FkZHJlc3MgPSBzcmMtPm9yaWdfYWRkcmVzczsKKwkJZHN0ID0gZHN0LT5uZXh0OworCQlzcmMgPSBzcmMtPm5leHQ7CisJfQorfQorCitzdGF0aWMgaW50IGNoZWNrX2hlYWRlcihzdHJ1Y3Qgc3dzdXNwX2luZm8gKmluZm8pCit7CisJY2hhciAqcmVhc29uID0gTlVMTDsKKworCWlmIChpbmZvLT52ZXJzaW9uX2NvZGUgIT0gTElOVVhfVkVSU0lPTl9DT0RFKQorCQlyZWFzb24gPSAia2VybmVsIHZlcnNpb24iOworCWlmIChpbmZvLT5udW1fcGh5c3BhZ2VzICE9IG51bV9waHlzcGFnZXMpCisJCXJlYXNvbiA9ICJtZW1vcnkgc2l6ZSI7CisJaWYgKHN0cmNtcChpbmZvLT51dHMuc3lzbmFtZSxzeXN0ZW1fdXRzbmFtZS5zeXNuYW1lKSkKKwkJcmVhc29uID0gInN5c3RlbSB0eXBlIjsKKwlpZiAoc3RyY21wKGluZm8tPnV0cy5yZWxlYXNlLHN5c3RlbV91dHNuYW1lLnJlbGVhc2UpKQorCQlyZWFzb24gPSAia2VybmVsIHJlbGVhc2UiOworCWlmIChzdHJjbXAoaW5mby0+dXRzLnZlcnNpb24sc3lzdGVtX3V0c25hbWUudmVyc2lvbikpCisJCXJlYXNvbiA9ICJ2ZXJzaW9uIjsKKwlpZiAoc3RyY21wKGluZm8tPnV0cy5tYWNoaW5lLHN5c3RlbV91dHNuYW1lLm1hY2hpbmUpKQorCQlyZWFzb24gPSAibWFjaGluZSI7CisJaWYgKHJlYXNvbikgeworCQlwcmludGsoS0VSTl9FUlIgInN3c3VzcDogUmVzdW1lIG1pc21hdGNoOiAlc1xuIiwgcmVhc29uKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJbG9hZCBoZWFkZXIgLSBjaGVjayB0aGUgaW1hZ2UgaGVhZGVyIGFuZCBjb3B5IGRhdGEgZnJvbSBpdAorICovCisKK3N0YXRpYyBpbnQgbG9hZF9oZWFkZXIoc3RydWN0IHNuYXBzaG90X2hhbmRsZSAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN3c3VzcF9pbmZvICppbmZvKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgcGJlICpwYmxpc3Q7CisKKwllcnJvciA9IGNoZWNrX2hlYWRlcihpbmZvKTsKKwlpZiAoIWVycm9yKSB7CisJCXBibGlzdCA9IGFsbG9jX3BhZ2VkaXIoaW5mby0+aW1hZ2VfcGFnZXMsIEdGUF9BVE9NSUMsIDApOworCQlpZiAoIXBibGlzdCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlwYWdlZGlyX25vc2F2ZSA9IHBibGlzdDsKKwkJaGFuZGxlLT5wYmUgPSBwYmxpc3Q7CisJCW5yX2NvcHlfcGFnZXMgPSBpbmZvLT5pbWFnZV9wYWdlczsKKwkJbnJfbWV0YV9wYWdlcyA9IGluZm8tPnBhZ2VzIC0gaW5mby0+aW1hZ2VfcGFnZXMgLSAxOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICoJdW5wYWNrX29yaWdfYWRkcmVzc2VzIC0gY29weSB0aGUgZWxlbWVudHMgb2YgQGJ1ZltdICgxIHBhZ2UpIHRvCisgKgl0aGUgUEJFcyBpbiB0aGUgbGlzdCBzdGFydGluZyBhdCBAcGJlCisgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGJlICp1bnBhY2tfb3JpZ19hZGRyZXNzZXModW5zaWduZWQgbG9uZyAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBiZSAqcGJlKQoreworCWludCBqOworCisJZm9yIChqID0gMDsgaiA8IFBBR0VfU0laRSAvIHNpemVvZihsb25nKSAmJiBwYmU7IGorKykgeworCQlwYmUtPm9yaWdfYWRkcmVzcyA9IGJ1ZltqXTsKKwkJcGJlID0gcGJlLT5uZXh0OworCX0KKwlyZXR1cm4gcGJlOworfQorCisvKioKKyAqCWNyZWF0ZV9pbWFnZSAtIHVzZSBtZXRhZGF0YSBjb250YWluZWQgaW4gdGhlIFBCRSBsaXN0CisgKglwb2ludGVkIHRvIGJ5IHBhZ2VkaXJfbm9zYXZlIHRvIG1hcmsgdGhlIHBhZ2VzIHRoYXQgd2lsbAorICoJYmUgb3ZlcndyaXR0ZW4gaW4gdGhlIHByb2Nlc3Mgb2YgcmVzdG9yaW5nIHRoZSBzeXN0ZW0KKyAqCW1lbW9yeSBzdGF0ZSBmcm9tIHRoZSBpbWFnZSBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvcgorICoJdGhlIGltYWdlIGF2b2lkaW5nIHRoZXNlIHBhZ2VzCisgKi8KKworc3RhdGljIGludCBjcmVhdGVfaW1hZ2Uoc3RydWN0IHNuYXBzaG90X2hhbmRsZSAqaGFuZGxlKQoreworCWludCBlcnJvciA9IDA7CisJc3RydWN0IHBiZSAqcCwgKnBibGlzdDsKKworCXAgPSBwYWdlZGlyX25vc2F2ZTsKKwllcnJvciA9IG1hcmtfdW5zYWZlX3BhZ2VzKHApOworCWlmICghZXJyb3IpIHsKKwkJcGJsaXN0ID0gYWxsb2NfcGFnZWRpcihucl9jb3B5X3BhZ2VzLCBHRlBfQVRPTUlDLCAxKTsKKwkJaWYgKHBibGlzdCkKKwkJCWNvcHlfcGFnZV9iYWNrdXBfbGlzdChwYmxpc3QsIHApOworCQlmcmVlX3BhZ2VkaXIocCk7CisJCWlmICghcGJsaXN0KQorCQkJZXJyb3IgPSAtRU5PTUVNOworCX0KKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGFsbG9jX2RhdGFfcGFnZXMocGJsaXN0LCBHRlBfQVRPTUlDLCAxKTsKKwlpZiAoIWVycm9yKSB7CisJCXJlbGVhc2VfZWF0ZW5fcGFnZXMoKTsKKwkJcGFnZWRpcl9ub3NhdmUgPSBwYmxpc3Q7CisJfSBlbHNlIHsKKwkJcGFnZWRpcl9ub3NhdmUgPSBOVUxMOworCQloYW5kbGUtPnBiZSA9IE5VTEw7CisJCW5yX2NvcHlfcGFnZXMgPSAwOworCQlucl9tZXRhX3BhZ2VzID0gMDsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqCXNuYXBzaG90X3dyaXRlX25leHQgLSB1c2VkIGZvciB3cml0aW5nIHRoZSBzeXN0ZW0gbWVtb3J5IHNuYXBzaG90LgorICoKKyAqCU9uIHRoZSBmaXJzdCBjYWxsIHRvIGl0IEBoYW5kbGUgc2hvdWxkIHBvaW50IHRvIGEgemVyb2VkCisgKglzbmFwc2hvdF9oYW5kbGUgc3RydWN0dXJlLiAgVGhlIHN0cnVjdHVyZSBnZXRzIHVwZGF0ZWQgYW5kIGEgcG9pbnRlcgorICoJdG8gaXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGV2ZXJ5IG5leHQgdGltZS4KKyAqCisgKglUaGUgQGNvdW50IHBhcmFtZXRlciBzaG91bGQgY29udGFpbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBjYWxsZXIKKyAqCXdhbnRzIHRvIHdyaXRlIHRvIHRoZSBpbWFnZS4gIEl0IG11c3Qgbm90IGJlIHplcm8uCisgKgorICoJT24gc3VjY2VzcyB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvc2l0aXZlIG51bWJlci4gIFRoZW4sIHRoZSBjYWxsZXIKKyAqCWlzIGFsbG93ZWQgdG8gd3JpdGUgdXAgdG8gdGhlIHJldHVybmVkIG51bWJlciBvZiBieXRlcyB0byB0aGUgbWVtb3J5CisgKglsb2NhdGlvbiBjb21wdXRlZCBieSB0aGUgZGF0YV9vZigpIG1hY3JvLiAgVGhlIG51bWJlciByZXR1cm5lZAorICoJbWF5IGJlIHNtYWxsZXIgdGhhbiBAY291bnQsIGJ1dCB0aGlzIG9ubHkgaGFwcGVucyBpZiB0aGUgd3JpdGUgd291bGQKKyAqCWNyb3NzIGEgcGFnZSBib3VuZGFyeSBvdGhlcndpc2UuCisgKgorICoJVGhlIGZ1bmN0aW9uIHJldHVybnMgMCB0byBpbmRpY2F0ZSB0aGUgImVuZCBvZiBmaWxlIiBjb25kaXRpb24sCisgKglhbmQgYSBuZWdhdGl2ZSBudW1iZXIgaXMgcmV0dXJuZWQgb24gZXJyb3IuICBJbiBzdWNoIGNhc2VzIHRoZQorICoJc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgQGhhbmRsZSBpcyBub3QgdXBkYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkCisgKglhbnkgbW9yZS4KKyAqLworCitpbnQgc25hcHNob3Rfd3JpdGVfbmV4dChzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlICpoYW5kbGUsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGhhbmRsZS0+cHJldiAmJiBoYW5kbGUtPnBhZ2UgPiBucl9tZXRhX3BhZ2VzICsgbnJfY29weV9wYWdlcykKKwkJcmV0dXJuIDA7CisJaWYgKCFidWZmZXIpIHsKKwkJLyogVGhpcyBtYWtlcyB0aGUgYnVmZmVyIGJlIGZyZWVkIGJ5IHN3c3VzcF9mcmVlKCkgKi8KKwkJYnVmZmVyID0gYWxsb2NfaW1hZ2VfcGFnZShHRlBfQVRPTUlDLCAwKTsKKwkJaWYgKCFidWZmZXIpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKCFoYW5kbGUtPm9mZnNldCkKKwkJaGFuZGxlLT5idWZmZXIgPSBidWZmZXI7CisJaWYgKGhhbmRsZS0+cHJldiA8IGhhbmRsZS0+cGFnZSkgeworCQlpZiAoIWhhbmRsZS0+cHJldikgeworCQkJZXJyb3IgPSBsb2FkX2hlYWRlcihoYW5kbGUsIChzdHJ1Y3Qgc3dzdXNwX2luZm8gKilidWZmZXIpOworCQkJaWYgKGVycm9yKQorCQkJCXJldHVybiBlcnJvcjsKKwkJfSBlbHNlIGlmIChoYW5kbGUtPnByZXYgPD0gbnJfbWV0YV9wYWdlcykgeworCQkJaGFuZGxlLT5wYmUgPSB1bnBhY2tfb3JpZ19hZGRyZXNzZXMoYnVmZmVyLCBoYW5kbGUtPnBiZSk7CisJCQlpZiAoIWhhbmRsZS0+cGJlKSB7CisJCQkJZXJyb3IgPSBjcmVhdGVfaW1hZ2UoaGFuZGxlKTsKKwkJCQlpZiAoZXJyb3IpCisJCQkJCXJldHVybiBlcnJvcjsKKwkJCQloYW5kbGUtPnBiZSA9IHBhZ2VkaXJfbm9zYXZlOworCQkJCWhhbmRsZS0+YnVmZmVyID0gKHZvaWQgKiloYW5kbGUtPnBiZS0+YWRkcmVzczsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWhhbmRsZS0+cGJlID0gaGFuZGxlLT5wYmUtPm5leHQ7CisJCQloYW5kbGUtPmJ1ZmZlciA9ICh2b2lkICopaGFuZGxlLT5wYmUtPmFkZHJlc3M7CisJCX0KKwkJaGFuZGxlLT5wcmV2ID0gaGFuZGxlLT5wYWdlOworCX0KKwloYW5kbGUtPmJ1Zl9vZmZzZXQgPSBoYW5kbGUtPnBhZ2Vfb2Zmc2V0OworCWlmIChoYW5kbGUtPnBhZ2Vfb2Zmc2V0ICsgY291bnQgPj0gUEFHRV9TSVpFKSB7CisJCWNvdW50ID0gUEFHRV9TSVpFIC0gaGFuZGxlLT5wYWdlX29mZnNldDsKKwkJaGFuZGxlLT5wYWdlX29mZnNldCA9IDA7CisJCWhhbmRsZS0+cGFnZSsrOworCX0gZWxzZSB7CisJCWhhbmRsZS0+cGFnZV9vZmZzZXQgKz0gY291bnQ7CisJfQorCWhhbmRsZS0+b2Zmc2V0ICs9IGNvdW50OworCXJldHVybiBjb3VudDsKK30KKworaW50IHNuYXBzaG90X2ltYWdlX2xvYWRlZChzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlICpoYW5kbGUpCit7CisJcmV0dXJuICEoIWhhbmRsZS0+cGJlIHx8IGhhbmRsZS0+cGJlLT5uZXh0IHx8ICFucl9jb3B5X3BhZ2VzIHx8CisJCWhhbmRsZS0+cGFnZSA8PSBucl9tZXRhX3BhZ2VzICsgbnJfY29weV9wYWdlcyk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTc3ZjNmCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3Bvd2VyL3N3YXAuYwpAQCAtMCwwICsxLDU0NCBAQAorLyoKKyAqIGxpbnV4L2tlcm5lbC9wb3dlci9zd2FwLmMKKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIHRoZSBzdXNwZW5kIGltYWdlIGZyb20KKyAqIGFuZCB3cml0aW5nIGl0IHRvIGEgc3dhcCBwYXJ0aXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LDIwMDEtMjAwNSBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgInBvd2VyLmgiCisKK2V4dGVybiBjaGFyIHJlc3VtZV9maWxlW107CisKKyNkZWZpbmUgU1dTVVNQX1NJRwkiUzFTVVNQRU5EIgorCitzdGF0aWMgc3RydWN0IHN3c3VzcF9oZWFkZXIgeworCWNoYXIgcmVzZXJ2ZWRbUEFHRV9TSVpFIC0gMjAgLSBzaXplb2Yoc3dwX2VudHJ5X3QpXTsKKwlzd3BfZW50cnlfdCBpbWFnZTsKKwljaGFyCW9yaWdfc2lnWzEwXTsKKwljaGFyCXNpZ1sxMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZChQQUdFX1NJWkUpKSkgc3dzdXNwX2hlYWRlcjsKKworLyoKKyAqIFNhdmluZyBwYXJ0Li4uCisgKi8KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvb3Rfc3dhcCA9IDB4ZmZmZjsKKworc3RhdGljIGludCBtYXJrX3N3YXBmaWxlcyhzd3BfZW50cnlfdCBzdGFydCkKK3sKKwlpbnQgZXJyb3I7CisKKwlyd19zd2FwX3BhZ2Vfc3luYyhSRUFELAorCQkJICBzd3BfZW50cnkocm9vdF9zd2FwLCAwKSwKKwkJCSAgdmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKSZzd3N1c3BfaGVhZGVyKSk7CisJaWYgKCFtZW1jbXAoIlNXQVAtU1BBQ0UiLHN3c3VzcF9oZWFkZXIuc2lnLCAxMCkgfHwKKwkgICAgIW1lbWNtcCgiU1dBUFNQQUNFMiIsc3dzdXNwX2hlYWRlci5zaWcsIDEwKSkgeworCQltZW1jcHkoc3dzdXNwX2hlYWRlci5vcmlnX3NpZyxzd3N1c3BfaGVhZGVyLnNpZywgMTApOworCQltZW1jcHkoc3dzdXNwX2hlYWRlci5zaWcsU1dTVVNQX1NJRywgMTApOworCQlzd3N1c3BfaGVhZGVyLmltYWdlID0gc3RhcnQ7CisJCWVycm9yID0gcndfc3dhcF9wYWdlX3N5bmMoV1JJVEUsCisJCQkJCSAgc3dwX2VudHJ5KHJvb3Rfc3dhcCwgMCksCisJCQkJCSAgdmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKQorCQkJCQkJICAgICAgICZzd3N1c3BfaGVhZGVyKSk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoInN3c3VzcDogUGFydGl0aW9uIGlzIG5vdCBzd2FwIHNwYWNlLlxuIik7CisJCWVycm9yID0gLUVOT0RFVjsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqCXN3c3VzcF9zd2FwX2NoZWNrIC0gY2hlY2sgaWYgdGhlIHJlc3VtZSBkZXZpY2UgaXMgYSBzd2FwIGRldmljZQorICoJYW5kIGdldCBpdHMgaW5kZXggKGlmIHNvKQorICovCisKK3N0YXRpYyBpbnQgc3dzdXNwX3N3YXBfY2hlY2sodm9pZCkgLyogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHNhdmluZyBpbWFnZSAqLworeworCWludCByZXMgPSBzd2FwX3R5cGVfb2Yoc3dzdXNwX3Jlc3VtZV9kZXZpY2UpOworCisJaWYgKHJlcyA+PSAwKSB7CisJCXJvb3Rfc3dhcCA9IHJlczsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiByZXM7Cit9CisKKy8qKgorICoJd3JpdGVfcGFnZSAtIFdyaXRlIG9uZSBwYWdlIHRvIGdpdmVuIHN3YXAgbG9jYXRpb24uCisgKglAYnVmOgkJQWRkcmVzcyB3ZSdyZSB3cml0aW5nLgorICoJQG9mZnNldDoJT2Zmc2V0IG9mIHRoZSBzd2FwIHBhZ2Ugd2UncmUgd3JpdGluZyB0by4KKyAqLworCitzdGF0aWMgaW50IHdyaXRlX3BhZ2Uodm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzd3BfZW50cnlfdCBlbnRyeTsKKwlpbnQgZXJyb3IgPSAtRU5PU1BDOworCisJaWYgKG9mZnNldCkgeworCQllbnRyeSA9IHN3cF9lbnRyeShyb290X3N3YXAsIG9mZnNldCk7CisJCWVycm9yID0gcndfc3dhcF9wYWdlX3N5bmMoV1JJVEUsIGVudHJ5LCB2aXJ0X3RvX3BhZ2UoYnVmKSk7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqCVRoZSBzd2FwIG1hcCBpcyBhIGRhdGEgc3RydWN0dXJlIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZWFjaCBwYWdlCisgKgl3cml0dGVuIHRvIGEgc3dhcCBwYXJ0aXRpb24uICBJdCBjb25zaXN0cyBvZiBtYW55IHN3YXBfbWFwX3BhZ2UKKyAqCXN0cnVjdHVyZXMgdGhhdCBjb250YWluIGVhY2ggYW4gYXJyYXkgb2YgTUFQX1BBR0VfU0laRSBzd2FwIGVudHJpZXMuCisgKglUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBzdG9yZWQgb24gdGhlIHN3YXAgYW5kIGxpbmtlZCB0b2dldGhlciB3aXRoIHRoZQorICoJaGVscCBvZiB0aGUgLm5leHRfc3dhcCBtZW1iZXIuCisgKgorICoJVGhlIHN3YXAgbWFwIGlzIGNyZWF0ZWQgZHVyaW5nIHN1c3BlbmQuICBUaGUgc3dhcCBtYXAgcGFnZXMgYXJlCisgKglhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCBvbmUgYXQgYSB0aW1lLCBzbyB3ZSBvbmx5IG5lZWQgb25lIG1lbW9yeQorICoJcGFnZSB0byBzZXQgdXAgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuCisgKgorICoJRHVyaW5nIHJlc3VtZSB3ZSBhbHNvIG9ubHkgbmVlZCB0byB1c2Ugb25lIHN3YXBfbWFwX3BhZ2Ugc3RydWN0dXJlCisgKglhdCBhIHRpbWUuCisgKi8KKworI2RlZmluZSBNQVBfUEFHRV9FTlRSSUVTCShQQUdFX1NJWkUgLyBzaXplb2YobG9uZykgLSAxKQorCitzdHJ1Y3Qgc3dhcF9tYXBfcGFnZSB7CisJdW5zaWduZWQgbG9uZwkJZW50cmllc1tNQVBfUEFHRV9FTlRSSUVTXTsKKwl1bnNpZ25lZCBsb25nCQluZXh0X3N3YXA7Cit9OworCisvKioKKyAqCVRoZSBzd2FwX21hcF9oYW5kbGUgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGhhbmRsaW5nIHN3YXAgaW4KKyAqCWEgZmlsZS1hbGlrZSB3YXkKKyAqLworCitzdHJ1Y3Qgc3dhcF9tYXBfaGFuZGxlIHsKKwlzdHJ1Y3Qgc3dhcF9tYXBfcGFnZSAqY3VyOworCXVuc2lnbmVkIGxvbmcgY3VyX3N3YXA7CisJc3RydWN0IGJpdG1hcF9wYWdlICpiaXRtYXA7CisJdW5zaWduZWQgaW50IGs7Cit9OworCitzdGF0aWMgdm9pZCByZWxlYXNlX3N3YXBfd3JpdGVyKHN0cnVjdCBzd2FwX21hcF9oYW5kbGUgKmhhbmRsZSkKK3sKKwlpZiAoaGFuZGxlLT5jdXIpCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyloYW5kbGUtPmN1cik7CisJaGFuZGxlLT5jdXIgPSBOVUxMOworCWlmIChoYW5kbGUtPmJpdG1hcCkKKwkJZnJlZV9iaXRtYXAoaGFuZGxlLT5iaXRtYXApOworCWhhbmRsZS0+Yml0bWFwID0gTlVMTDsKK30KKworc3RhdGljIGludCBnZXRfc3dhcF93cml0ZXIoc3RydWN0IHN3YXBfbWFwX2hhbmRsZSAqaGFuZGxlKQoreworCWhhbmRsZS0+Y3VyID0gKHN0cnVjdCBzd2FwX21hcF9wYWdlICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghaGFuZGxlLT5jdXIpCisJCXJldHVybiAtRU5PTUVNOworCWhhbmRsZS0+Yml0bWFwID0gYWxsb2NfYml0bWFwKGNvdW50X3N3YXBfcGFnZXMocm9vdF9zd2FwLCAwKSk7CisJaWYgKCFoYW5kbGUtPmJpdG1hcCkgeworCQlyZWxlYXNlX3N3YXBfd3JpdGVyKGhhbmRsZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwloYW5kbGUtPmN1cl9zd2FwID0gYWxsb2Nfc3dhcF9wYWdlKHJvb3Rfc3dhcCwgaGFuZGxlLT5iaXRtYXApOworCWlmICghaGFuZGxlLT5jdXJfc3dhcCkgeworCQlyZWxlYXNlX3N3YXBfd3JpdGVyKGhhbmRsZSk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKwloYW5kbGUtPmsgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN3YXBfd3JpdGVfcGFnZShzdHJ1Y3Qgc3dhcF9tYXBfaGFuZGxlICpoYW5kbGUsIHZvaWQgKmJ1ZikKK3sKKwlpbnQgZXJyb3I7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisKKwlpZiAoIWhhbmRsZS0+Y3VyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlvZmZzZXQgPSBhbGxvY19zd2FwX3BhZ2Uocm9vdF9zd2FwLCBoYW5kbGUtPmJpdG1hcCk7CisJZXJyb3IgPSB3cml0ZV9wYWdlKGJ1Ziwgb2Zmc2V0KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwloYW5kbGUtPmN1ci0+ZW50cmllc1toYW5kbGUtPmsrK10gPSBvZmZzZXQ7CisJaWYgKGhhbmRsZS0+ayA+PSBNQVBfUEFHRV9FTlRSSUVTKSB7CisJCW9mZnNldCA9IGFsbG9jX3N3YXBfcGFnZShyb290X3N3YXAsIGhhbmRsZS0+Yml0bWFwKTsKKwkJaWYgKCFvZmZzZXQpCisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJaGFuZGxlLT5jdXItPm5leHRfc3dhcCA9IG9mZnNldDsKKwkJZXJyb3IgPSB3cml0ZV9wYWdlKGhhbmRsZS0+Y3VyLCBoYW5kbGUtPmN1cl9zd2FwKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQltZW1zZXQoaGFuZGxlLT5jdXIsIDAsIFBBR0VfU0laRSk7CisJCWhhbmRsZS0+Y3VyX3N3YXAgPSBvZmZzZXQ7CisJCWhhbmRsZS0+ayA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsdXNoX3N3YXBfd3JpdGVyKHN0cnVjdCBzd2FwX21hcF9oYW5kbGUgKmhhbmRsZSkKK3sKKwlpZiAoaGFuZGxlLT5jdXIgJiYgaGFuZGxlLT5jdXJfc3dhcCkKKwkJcmV0dXJuIHdyaXRlX3BhZ2UoaGFuZGxlLT5jdXIsIGhhbmRsZS0+Y3VyX3N3YXApOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICoJc2F2ZV9pbWFnZSAtIHNhdmUgdGhlIHN1c3BlbmQgaW1hZ2UgZGF0YQorICovCisKK3N0YXRpYyBpbnQgc2F2ZV9pbWFnZShzdHJ1Y3Qgc3dhcF9tYXBfaGFuZGxlICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuYXBzaG90X2hhbmRsZSAqc25hcHNob3QsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQoreworCXVuc2lnbmVkIGludCBtOworCWludCByZXQ7CisJaW50IGVycm9yID0gMDsKKworCXByaW50aygiU2F2aW5nIGltYWdlIGRhdGEgcGFnZXMgKCV1IHBhZ2VzKSAuLi4gICAgICIsIG5yX3BhZ2VzKTsKKwltID0gbnJfcGFnZXMgLyAxMDA7CisJaWYgKCFtKQorCQltID0gMTsKKwlucl9wYWdlcyA9IDA7CisJZG8geworCQlyZXQgPSBzbmFwc2hvdF9yZWFkX25leHQoc25hcHNob3QsIFBBR0VfU0laRSk7CisJCWlmIChyZXQgPiAwKSB7CisJCQllcnJvciA9IHN3YXBfd3JpdGVfcGFnZShoYW5kbGUsIGRhdGFfb2YoKnNuYXBzaG90KSk7CisJCQlpZiAoZXJyb3IpCisJCQkJYnJlYWs7CisJCQlpZiAoIShucl9wYWdlcyAlIG0pKQorCQkJCXByaW50aygiXGJcYlxiXGIlM2QlJSIsIG5yX3BhZ2VzIC8gbSk7CisJCQlucl9wYWdlcysrOworCQl9CisJfSB3aGlsZSAocmV0ID4gMCk7CisJaWYgKCFlcnJvcikKKwkJcHJpbnRrKCJcYlxiXGJcYmRvbmVcbiIpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKgllbm91Z2hfc3dhcCAtIE1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzd2FwIHRvIHNhdmUgdGhlIGltYWdlLgorICoKKyAqCVJldHVybnMgVFJVRSBvciBGQUxTRSBhZnRlciBjaGVja2luZyB0aGUgdG90YWwgYW1vdW50IG9mIHN3YXAKKyAqCXNwYWNlIGF2YWlhYmxlIGZyb20gdGhlIHJlc3VtZSBwYXJ0aXRpb24uCisgKi8KKworc3RhdGljIGludCBlbm91Z2hfc3dhcCh1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCit7CisJdW5zaWduZWQgaW50IGZyZWVfc3dhcCA9IGNvdW50X3N3YXBfcGFnZXMocm9vdF9zd2FwLCAxKTsKKworCXByX2RlYnVnKCJzd3N1c3A6IGZyZWUgc3dhcCBwYWdlczogJXVcbiIsIGZyZWVfc3dhcCk7CisJcmV0dXJuIGZyZWVfc3dhcCA+IChucl9wYWdlcyArIFBBR0VTX0ZPUl9JTyArCisJCShucl9wYWdlcyArIFBCRVNfUEVSX1BBR0UgLSAxKSAvIFBCRVNfUEVSX1BBR0UpOworfQorCisvKioKKyAqCXN3c3VzcF93cml0ZSAtIFdyaXRlIGVudGlyZSBpbWFnZSBhbmQgbWV0YWRhdGEuCisgKgorICoJSXQgaXMgaW1wb3J0YW50IF9OT1RfIHRvIHVtb3VudCBmaWxlc3lzdGVtcyBhdCB0aGlzIHBvaW50LiBXZSB3YW50CisgKgl0aGVtIHN5bmNlZCAoaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZykgYnV0IHdlIERPIG5vdCB3YW50IHRvIG1hcmsKKyAqCWZpbGVzeXN0ZW0gY2xlYW46IGl0IGlzIG5vdC4gKEFuZCBpdCBkb2VzIG5vdCBtYXR0ZXIsIGlmIHdlIHJlc3VtZQorICoJY29ycmVjdGx5LCB3ZSdsbCBtYXJrIHN5c3RlbSBjbGVhbiwgYW55d2F5LikKKyAqLworCitpbnQgc3dzdXNwX3dyaXRlKHZvaWQpCit7CisJc3RydWN0IHN3YXBfbWFwX2hhbmRsZSBoYW5kbGU7CisJc3RydWN0IHNuYXBzaG90X2hhbmRsZSBzbmFwc2hvdDsKKwlzdHJ1Y3Qgc3dzdXNwX2luZm8gKmhlYWRlcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCBlcnJvcjsKKworCWlmICgoZXJyb3IgPSBzd3N1c3Bfc3dhcF9jaGVjaygpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInN3c3VzcDogQ2Fubm90IGZpbmQgc3dhcCBkZXZpY2UsIHRyeSBzd2Fwb24gLWEuXG4iKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwltZW1zZXQoJnNuYXBzaG90LCAwLCBzaXplb2Yoc3RydWN0IHNuYXBzaG90X2hhbmRsZSkpOworCWVycm9yID0gc25hcHNob3RfcmVhZF9uZXh0KCZzbmFwc2hvdCwgUEFHRV9TSVpFKTsKKwlpZiAoZXJyb3IgPCBQQUdFX1NJWkUpCisJCXJldHVybiBlcnJvciA8IDAgPyBlcnJvciA6IC1FRkFVTFQ7CisJaGVhZGVyID0gKHN0cnVjdCBzd3N1c3BfaW5mbyAqKWRhdGFfb2Yoc25hcHNob3QpOworCWlmICghZW5vdWdoX3N3YXAoaGVhZGVyLT5wYWdlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzd3N1c3A6IE5vdCBlbm91Z2ggZnJlZSBzd2FwXG4iKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCWVycm9yID0gZ2V0X3N3YXBfd3JpdGVyKCZoYW5kbGUpOworCWlmICghZXJyb3IpIHsKKwkJc3RhcnQgPSBoYW5kbGUuY3VyX3N3YXA7CisJCWVycm9yID0gc3dhcF93cml0ZV9wYWdlKCZoYW5kbGUsIGhlYWRlcik7CisJfQorCWlmICghZXJyb3IpCisJCWVycm9yID0gc2F2ZV9pbWFnZSgmaGFuZGxlLCAmc25hcHNob3QsIGhlYWRlci0+cGFnZXMgLSAxKTsKKwlpZiAoIWVycm9yKSB7CisJCWZsdXNoX3N3YXBfd3JpdGVyKCZoYW5kbGUpOworCQlwcmludGsoIlMiKTsKKwkJZXJyb3IgPSBtYXJrX3N3YXBmaWxlcyhzd3BfZW50cnkocm9vdF9zd2FwLCBzdGFydCkpOworCQlwcmludGsoInxcbiIpOworCX0KKwlpZiAoZXJyb3IpCisJCWZyZWVfYWxsX3N3YXBfcGFnZXMocm9vdF9zd2FwLCBoYW5kbGUuYml0bWFwKTsKKwlyZWxlYXNlX3N3YXBfd3JpdGVyKCZoYW5kbGUpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqCVVzaW5nIGJpbyB0byByZWFkIGZyb20gc3dhcC4KKyAqCVRoaXMgY29kZSByZXF1aXJlcyBhIGJpdCBtb3JlIHdvcmsgdGhhbiBqdXN0IHVzaW5nIGJ1ZmZlciBoZWFkcworICoJYnV0LCBpdCBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IGZvciAyLjUvMi42LgorICoJVGhlIGZvbGxvd2luZyBhcmUgdG8gc2lnbmFsIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBJL08uIEJpb3MKKyAqCWZpbmlzaCBhc3luY2hyb25vdXNseSwgd2hpbGUgd2Ugd2FudCB0aGVtIHRvIGhhcHBlbiBzeW5jaHJvbm91c2x5LgorICoJQSBzaW1wbGUgYXRvbWljX3QsIGFuZCBhIHdhaXQgbG9vcCB0YWtlIGNhcmUgb2YgdGhpcyBwcm9ibGVtLgorICovCisKK3N0YXRpYyBhdG9taWNfdCBpb19kb25lID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyBpbnQgZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IG51bSwgaW50IGVycikKK3sKKwlpZiAoIXRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpKQorCQlwYW5pYygiSS9PIGVycm9yIHJlYWRpbmcgbWVtb3J5IGltYWdlIik7CisJYXRvbWljX3NldCgmaW9fZG9uZSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpyZXN1bWVfYmRldjsKKworLyoqCisgKglzdWJtaXQgLSBzdWJtaXQgQklPIHJlcXVlc3QuCisgKglAcnc6CVJFQUQgb3IgV1JJVEUuCisgKglAb2ZmCXBoeXNpY2FsIG9mZnNldCBvZiBwYWdlLgorICoJQHBhZ2U6CXBhZ2Ugd2UncmUgcmVhZGluZyBvciB3cml0aW5nLgorICoKKyAqCVN0cmFpZ2h0IGZyb20gdGhlIHRleHRib29rIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGJpby4KKyAqCUlmIHdlJ3JlIHdyaXRpbmcsIG1ha2Ugc3VyZSB0aGUgcGFnZSBpcyBtYXJrZWQgYXMgZGlydHkuCisgKglUaGVuIHN1Ym1pdCBpdCBhbmQgd2FpdC4KKyAqLworCitzdGF0aWMgaW50IHN1Ym1pdChpbnQgcncsIHBnb2ZmX3QgcGFnZV9vZmYsIHZvaWQgKnBhZ2UpCit7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwliaW8gPSBiaW9fYWxsb2MoR0ZQX0FUT01JQywgMSk7CisJaWYgKCFiaW8pCisJCXJldHVybiAtRU5PTUVNOworCWJpby0+Ymlfc2VjdG9yID0gcGFnZV9vZmYgKiAoUEFHRV9TSVpFID4+IDkpOworCWJpby0+YmlfYmRldiA9IHJlc3VtZV9iZGV2OworCWJpby0+YmlfZW5kX2lvID0gZW5kX2lvOworCisJaWYgKGJpb19hZGRfcGFnZShiaW8sIHZpcnRfdG9fcGFnZShwYWdlKSwgUEFHRV9TSVpFLCAwKSA8IFBBR0VfU0laRSkgeworCQlwcmludGsoInN3c3VzcDogRVJST1I6IGFkZGluZyBwYWdlIHRvIGJpbyBhdCAlbGRcbiIscGFnZV9vZmYpOworCQllcnJvciA9IC1FRkFVTFQ7CisJCWdvdG8gRG9uZTsKKwl9CisKKwlhdG9taWNfc2V0KCZpb19kb25lLCAxKTsKKwlzdWJtaXRfYmlvKHJ3IHwgKDEgPDwgQklPX1JXX1NZTkMpLCBiaW8pOworCXdoaWxlIChhdG9taWNfcmVhZCgmaW9fZG9uZSkpCisJCXlpZWxkKCk7CisJaWYgKHJ3ID09IFJFQUQpCisJCWJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTsKKyBEb25lOgorCWJpb19wdXQoYmlvKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgYmlvX3JlYWRfcGFnZShwZ29mZl90IHBhZ2Vfb2ZmLCB2b2lkICpwYWdlKQoreworCXJldHVybiBzdWJtaXQoUkVBRCwgcGFnZV9vZmYsIHBhZ2UpOworfQorCitzdGF0aWMgaW50IGJpb193cml0ZV9wYWdlKHBnb2ZmX3QgcGFnZV9vZmYsIHZvaWQgKnBhZ2UpCit7CisJcmV0dXJuIHN1Ym1pdChXUklURSwgcGFnZV9vZmYsIHBhZ2UpOworfQorCisvKioKKyAqCVRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFsbG93IHVzIHRvIHJlYWQgZGF0YSB1c2luZyBhIHN3YXAgbWFwCisgKglpbiBhIGZpbGUtYWxpa2Ugd2F5CisgKi8KKworc3RhdGljIHZvaWQgcmVsZWFzZV9zd2FwX3JlYWRlcihzdHJ1Y3Qgc3dhcF9tYXBfaGFuZGxlICpoYW5kbGUpCit7CisJaWYgKGhhbmRsZS0+Y3VyKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpaGFuZGxlLT5jdXIpOworCWhhbmRsZS0+Y3VyID0gTlVMTDsKK30KKworc3RhdGljIGludCBnZXRfc3dhcF9yZWFkZXIoc3RydWN0IHN3YXBfbWFwX2hhbmRsZSAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd3BfZW50cnlfdCBzdGFydCkKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoIXN3cF9vZmZzZXQoc3RhcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwloYW5kbGUtPmN1ciA9IChzdHJ1Y3Qgc3dhcF9tYXBfcGFnZSAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKwlpZiAoIWhhbmRsZS0+Y3VyKQorCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IGJpb19yZWFkX3BhZ2Uoc3dwX29mZnNldChzdGFydCksIGhhbmRsZS0+Y3VyKTsKKwlpZiAoZXJyb3IpIHsKKwkJcmVsZWFzZV9zd2FwX3JlYWRlcihoYW5kbGUpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCWhhbmRsZS0+ayA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3dhcF9yZWFkX3BhZ2Uoc3RydWN0IHN3YXBfbWFwX2hhbmRsZSAqaGFuZGxlLCB2b2lkICpidWYpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJaW50IGVycm9yOworCisJaWYgKCFoYW5kbGUtPmN1cikKKwkJcmV0dXJuIC1FSU5WQUw7CisJb2Zmc2V0ID0gaGFuZGxlLT5jdXItPmVudHJpZXNbaGFuZGxlLT5rXTsKKwlpZiAoIW9mZnNldCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJZXJyb3IgPSBiaW9fcmVhZF9wYWdlKG9mZnNldCwgYnVmKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlpZiAoKytoYW5kbGUtPmsgPj0gTUFQX1BBR0VfRU5UUklFUykgeworCQloYW5kbGUtPmsgPSAwOworCQlvZmZzZXQgPSBoYW5kbGUtPmN1ci0+bmV4dF9zd2FwOworCQlpZiAoIW9mZnNldCkKKwkJCXJlbGVhc2Vfc3dhcF9yZWFkZXIoaGFuZGxlKTsKKwkJZWxzZQorCQkJZXJyb3IgPSBiaW9fcmVhZF9wYWdlKG9mZnNldCwgaGFuZGxlLT5jdXIpOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICoJbG9hZF9pbWFnZSAtIGxvYWQgdGhlIGltYWdlIHVzaW5nIHRoZSBzd2FwIG1hcCBoYW5kbGUKKyAqCUBoYW5kbGUgYW5kIHRoZSBzbmFwc2hvdCBoYW5kbGUgQHNuYXBzaG90CisgKgkoYXNzdW1lIHRoZXJlIGFyZSBAbnJfcGFnZXMgcGFnZXMgdG8gbG9hZCkKKyAqLworCitzdGF0aWMgaW50IGxvYWRfaW1hZ2Uoc3RydWN0IHN3YXBfbWFwX2hhbmRsZSAqaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmFwc2hvdF9oYW5kbGUgKnNuYXBzaG90LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcykKK3sKKwl1bnNpZ25lZCBpbnQgbTsKKwlpbnQgcmV0OworCWludCBlcnJvciA9IDA7CisKKwlwcmludGsoIkxvYWRpbmcgaW1hZ2UgZGF0YSBwYWdlcyAoJXUgcGFnZXMpIC4uLiAgICAgIiwgbnJfcGFnZXMpOworCW0gPSBucl9wYWdlcyAvIDEwMDsKKwlpZiAoIW0pCisJCW0gPSAxOworCW5yX3BhZ2VzID0gMDsKKwlkbyB7CisJCXJldCA9IHNuYXBzaG90X3dyaXRlX25leHQoc25hcHNob3QsIFBBR0VfU0laRSk7CisJCWlmIChyZXQgPiAwKSB7CisJCQllcnJvciA9IHN3YXBfcmVhZF9wYWdlKGhhbmRsZSwgZGF0YV9vZigqc25hcHNob3QpKTsKKwkJCWlmIChlcnJvcikKKwkJCQlicmVhazsKKwkJCWlmICghKG5yX3BhZ2VzICUgbSkpCisJCQkJcHJpbnRrKCJcYlxiXGJcYiUzZCUlIiwgbnJfcGFnZXMgLyBtKTsKKwkJCW5yX3BhZ2VzKys7CisJCX0KKwl9IHdoaWxlIChyZXQgPiAwKTsKKwlpZiAoIWVycm9yKQorCQlwcmludGsoIlxiXGJcYlxiZG9uZVxuIik7CisJaWYgKCFzbmFwc2hvdF9pbWFnZV9sb2FkZWQoc25hcHNob3QpKQorCQllcnJvciA9IC1FTk9EQVRBOworCXJldHVybiBlcnJvcjsKK30KKworaW50IHN3c3VzcF9yZWFkKHZvaWQpCit7CisJaW50IGVycm9yOworCXN0cnVjdCBzd2FwX21hcF9oYW5kbGUgaGFuZGxlOworCXN0cnVjdCBzbmFwc2hvdF9oYW5kbGUgc25hcHNob3Q7CisJc3RydWN0IHN3c3VzcF9pbmZvICpoZWFkZXI7CisKKwlpZiAoSVNfRVJSKHJlc3VtZV9iZGV2KSkgeworCQlwcl9kZWJ1Zygic3dzdXNwOiBibG9jayBkZXZpY2Ugbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocmVzdW1lX2JkZXYpOworCX0KKworCW1lbXNldCgmc25hcHNob3QsIDAsIHNpemVvZihzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlKSk7CisJZXJyb3IgPSBzbmFwc2hvdF93cml0ZV9uZXh0KCZzbmFwc2hvdCwgUEFHRV9TSVpFKTsKKwlpZiAoZXJyb3IgPCBQQUdFX1NJWkUpCisJCXJldHVybiBlcnJvciA8IDAgPyBlcnJvciA6IC1FRkFVTFQ7CisJaGVhZGVyID0gKHN0cnVjdCBzd3N1c3BfaW5mbyAqKWRhdGFfb2Yoc25hcHNob3QpOworCWVycm9yID0gZ2V0X3N3YXBfcmVhZGVyKCZoYW5kbGUsIHN3c3VzcF9oZWFkZXIuaW1hZ2UpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gc3dhcF9yZWFkX3BhZ2UoJmhhbmRsZSwgaGVhZGVyKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGxvYWRfaW1hZ2UoJmhhbmRsZSwgJnNuYXBzaG90LCBoZWFkZXItPnBhZ2VzIC0gMSk7CisJcmVsZWFzZV9zd2FwX3JlYWRlcigmaGFuZGxlKTsKKworCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYpOworCisJaWYgKCFlcnJvcikKKwkJcHJfZGVidWcoInN3c3VzcDogUmVhZGluZyByZXN1bWUgZmlsZSB3YXMgc3VjY2Vzc2Z1bFxuIik7CisJZWxzZQorCQlwcl9kZWJ1Zygic3dzdXNwOiBFcnJvciAlZCByZXN1bWluZ1xuIiwgZXJyb3IpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiAgICAgIHN3c3VzcF9jaGVjayAtIENoZWNrIGZvciBzd3N1c3Agc2lnbmF0dXJlIGluIHRoZSByZXN1bWUgZGV2aWNlCisgKi8KKworaW50IHN3c3VzcF9jaGVjayh2b2lkKQoreworCWludCBlcnJvcjsKKworCXJlc3VtZV9iZGV2ID0gb3Blbl9ieV9kZXZudW0oc3dzdXNwX3Jlc3VtZV9kZXZpY2UsIEZNT0RFX1JFQUQpOworCWlmICghSVNfRVJSKHJlc3VtZV9iZGV2KSkgeworCQlzZXRfYmxvY2tzaXplKHJlc3VtZV9iZGV2LCBQQUdFX1NJWkUpOworCQltZW1zZXQoJnN3c3VzcF9oZWFkZXIsIDAsIHNpemVvZihzd3N1c3BfaGVhZGVyKSk7CisJCWlmICgoZXJyb3IgPSBiaW9fcmVhZF9wYWdlKDAsICZzd3N1c3BfaGVhZGVyKSkpCisJCQlyZXR1cm4gZXJyb3I7CisJCWlmICghbWVtY21wKFNXU1VTUF9TSUcsIHN3c3VzcF9oZWFkZXIuc2lnLCAxMCkpIHsKKwkJCW1lbWNweShzd3N1c3BfaGVhZGVyLnNpZywgc3dzdXNwX2hlYWRlci5vcmlnX3NpZywgMTApOworCQkJLyogUmVzZXQgc3dhcCBzaWduYXR1cmUgbm93ICovCisJCQllcnJvciA9IGJpb193cml0ZV9wYWdlKDAsICZzd3N1c3BfaGVhZGVyKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChlcnJvcikKKwkJCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYpOworCQllbHNlCisJCQlwcl9kZWJ1Zygic3dzdXNwOiBTaWduYXR1cmUgZm91bmQsIHJlc3VtaW5nXG4iKTsKKwl9IGVsc2UgeworCQllcnJvciA9IFBUUl9FUlIocmVzdW1lX2JkZXYpOworCX0KKworCWlmIChlcnJvcikKKwkJcHJfZGVidWcoInN3c3VzcDogRXJyb3IgJWQgY2hlY2sgZm9yIHJlc3VtZSBmaWxlXG4iLCBlcnJvcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICoJc3dzdXNwX2Nsb3NlIC0gY2xvc2Ugc3dhcCBkZXZpY2UuCisgKi8KKwordm9pZCBzd3N1c3BfY2xvc2Uodm9pZCkKK3sKKwlpZiAoSVNfRVJSKHJlc3VtZV9iZGV2KSkgeworCQlwcl9kZWJ1Zygic3dzdXNwOiBibG9jayBkZXZpY2Ugbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCmluZGV4IDJkOWQwOGYuLmM0MDE2Y2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYworKysgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKQEAgLTMxLDQxICszMSwyNCBAQAogICogRml4ZWQgcnVuYXdheSBpbml0CiAgKgogICogUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgotICogQWRkZWQgdGhlIHN3YXAgbWFwIGRhdGEgc3RydWN0dXJlIGFuZCByZXdvcmtlZCB0aGUgaGFuZGxpbmcgb2Ygc3dhcAorICogUmV3b3JrZWQgdGhlIGZyZWVpbmcgb2YgbWVtb3J5IGFuZCB0aGUgaGFuZGxpbmcgb2Ygc3dhcAogICoKICAqIE1vcmUgc3RhdGUgc2F2ZXJzIGFyZSB3ZWxjb21lLiBFc3BlY2lhbGx5IGZvciB0aGUgc2NzaSBsYXllci4uLgogICoKICAqIEZvciBUT0RPcyxGSVhNRXMgYWxzbyBsb29rIGluIERvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLnR4dAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAicG93ZXIuaCIKIApAQCAtNzcsNiArNjAsOCBAQAogICovCiB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUgPSA1MDAgKiAxMDI0ICogMTAyNDsKIAoraW50IGluX3N1c3BlbmQgX19ub3NhdmVkYXRhID0gMDsKKwogI2lmZGVmIENPTkZJR19ISUdITUVNCiB1bnNpZ25lZCBpbnQgY291bnRfaGlnaG1lbV9wYWdlcyh2b2lkKTsKIGludCBzYXZlX2hpZ2htZW0odm9pZCk7CkBAIC04Nyw0NzEgKzcyLDk3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X2hpZ2htZW1fcGFnZXModm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKLWV4dGVybiBjaGFyIHJlc3VtZV9maWxlW107Ci0KLSNkZWZpbmUgU1dTVVNQX1NJRwkiUzFTVVNQRU5EIgotCi1zdGF0aWMgc3RydWN0IHN3c3VzcF9oZWFkZXIgewotCWNoYXIgcmVzZXJ2ZWRbUEFHRV9TSVpFIC0gMjAgLSBzaXplb2Yoc3dwX2VudHJ5X3QpXTsKLQlzd3BfZW50cnlfdCBpbWFnZTsKLQljaGFyCW9yaWdfc2lnWzEwXTsKLQljaGFyCXNpZ1sxMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZChQQUdFX1NJWkUpKSkgc3dzdXNwX2hlYWRlcjsKLQotc3RhdGljIHN0cnVjdCBzd3N1c3BfaW5mbyBzd3N1c3BfaW5mbzsKLQotLyoKLSAqIFNhdmluZyBwYXJ0Li4uCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvb3Rfc3dhcCA9IDB4ZmZmZjsKLQotc3RhdGljIGludCBtYXJrX3N3YXBmaWxlcyhzd3BfZW50cnlfdCBzdGFydCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlyd19zd2FwX3BhZ2Vfc3luYyhSRUFELAotCQkJICBzd3BfZW50cnkocm9vdF9zd2FwLCAwKSwKLQkJCSAgdmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKSZzd3N1c3BfaGVhZGVyKSk7Ci0JaWYgKCFtZW1jbXAoIlNXQVAtU1BBQ0UiLHN3c3VzcF9oZWFkZXIuc2lnLCAxMCkgfHwKLQkgICAgIW1lbWNtcCgiU1dBUFNQQUNFMiIsc3dzdXNwX2hlYWRlci5zaWcsIDEwKSkgewotCQltZW1jcHkoc3dzdXNwX2hlYWRlci5vcmlnX3NpZyxzd3N1c3BfaGVhZGVyLnNpZywgMTApOwotCQltZW1jcHkoc3dzdXNwX2hlYWRlci5zaWcsU1dTVVNQX1NJRywgMTApOwotCQlzd3N1c3BfaGVhZGVyLmltYWdlID0gc3RhcnQ7Ci0JCWVycm9yID0gcndfc3dhcF9wYWdlX3N5bmMoV1JJVEUsCi0JCQkJCSAgc3dwX2VudHJ5KHJvb3Rfc3dhcCwgMCksCi0JCQkJCSAgdmlydF90b19wYWdlKCh1bnNpZ25lZCBsb25nKQotCQkJCQkJICAgICAgICZzd3N1c3BfaGVhZGVyKSk7Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoInN3c3VzcDogUGFydGl0aW9uIGlzIG5vdCBzd2FwIHNwYWNlLlxuIik7Ci0JCWVycm9yID0gLUVOT0RFVjsKLQl9Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKgotICogQ2hlY2sgd2hldGhlciB0aGUgc3dhcCBkZXZpY2UgaXMgdGhlIHNwZWNpZmllZCByZXN1bWUKLSAqIGRldmljZSwgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgdGhleSBhcmUgc3BlY2lmaWVkIGJ5Ci0gKiBpZGVudGljYWwgbmFtZXMuCi0gKgotICogKFRodXMsIGRldmljZSBpbm9kZSBhbGlhc2luZyBpcyBhbGxvd2VkLiAgWW91IGNhbiBzYXkgL2Rldi9oZGE0Ci0gKiBpbnN0ZWFkIG9mIC9kZXYvaWRlL2hvc3QwL2J1czAvdGFyZ2V0MC9sdW4wL3BhcnQ0IFtpZiB1c2luZyBkZXZmc10KLSAqIGFuZCB0aGV5J2xsIGJlIGNvbnNpZGVyZWQgdGhlIHNhbWUgZGV2aWNlLiAgVGhpcyBpcyAqbmVjZXNzYXJ5KiBmb3IKLSAqIGRldmZzLCBzaW5jZSB0aGUgcmVzdW1lIGNvZGUgY2FuIG9ubHkgcmVjb2duaXplIHRoZSBmb3JtIC9kZXYvaGRhNCwKLSAqIGJ1dCB0aGUgc3VzcGVuZCBjb2RlIHdvdWxkIHNlZSB0aGUgbG9uZyBuYW1lLikKLSAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfcmVzdW1lX2RldmljZShjb25zdCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc3dhcF9pbmZvKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gc3dhcF9pbmZvLT5zd2FwX2ZpbGU7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwotCi0JcmV0dXJuIFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgJiYKLQkJc3dzdXNwX3Jlc3VtZV9kZXZpY2UgPT0gTUtERVYoaW1ham9yKGlub2RlKSwgaW1pbm9yKGlub2RlKSk7Ci19Ci0KLXN0YXRpYyBpbnQgc3dzdXNwX3N3YXBfY2hlY2sodm9pZCkgLyogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHNhdmluZyBpbWFnZSAqLwotewotCWludCBpOwotCi0Jc3Bpbl9sb2NrKCZzd2FwX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfU1dBUEZJTEVTOyBpKyspIHsKLQkJaWYgKCEoc3dhcF9pbmZvW2ldLmZsYWdzICYgU1dQX1dSSVRFT0spKQotCQkJY29udGludWU7Ci0JCWlmICghc3dzdXNwX3Jlc3VtZV9kZXZpY2UgfHwgaXNfcmVzdW1lX2RldmljZShzd2FwX2luZm8gKyBpKSkgewotCQkJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7Ci0JCQlyb290X3N3YXAgPSBpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KIC8qKgotICoJd3JpdGVfcGFnZSAtIFdyaXRlIG9uZSBwYWdlIHRvIGEgZnJlc2ggc3dhcCBsb2NhdGlvbi4KLSAqCUBhZGRyOglBZGRyZXNzIHdlJ3JlIHdyaXRpbmcuCi0gKglAbG9jOglQbGFjZSB0byBzdG9yZSB0aGUgZW50cnkgd2UgdXNlZC4KKyAqCVRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGZvciB0cmFjaW5nIHRoZSBhbGxvY2F0ZWQKKyAqCXN3YXAgcGFnZXMsIHNvIHRoYXQgdGhleSBjYW4gYmUgZnJlZWQgaW4gY2FzZSBvZiBhbiBlcnJvci4KICAqCi0gKglBbGxvY2F0ZSBhIG5ldyBzd2FwIGVudHJ5IGFuZCAnc3luYycgaXQuIE5vdGUgd2UgZGlzY2FyZCAtRUlPCi0gKgllcnJvcnMuIFRoYXQgaXMgYW4gYXJ0aWZhY3QgbGVmdCBvdmVyIGZyb20gc3dzdXNwLiBJdCBkaWQgbm90Ci0gKgljaGVjayB0aGUgcmV0dXJuIG9mIHJ3X3N3YXBfcGFnZV9zeW5jKCkgYXQgYWxsLCBzaW5jZSBtb3N0IHBhZ2VzCi0gKgl3cml0dGVuIGJhY2sgdG8gc3dhcCB3b3VsZCByZXR1cm4gLUVJTy4KLSAqCVRoaXMgaXMgYSBwYXJ0aWFsIGltcHJvdmVtZW50LCBzaW5jZSB3ZSB3aWxsIGF0IGxlYXN0IHJldHVybiBvdGhlcgotICoJZXJyb3JzLCB0aG91Z2ggd2UgbmVlZCB0byBldmVudHVhbGx5IGZpeCB0aGUgZGFtbiBjb2RlLgotICovCi1zdGF0aWMgaW50IHdyaXRlX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCBzd3BfZW50cnlfdCAqbG9jKQotewotCXN3cF9lbnRyeV90IGVudHJ5OwotCWludCBlcnJvciA9IC1FTk9TUEM7Ci0KLQllbnRyeSA9IGdldF9zd2FwX3BhZ2Vfb2ZfdHlwZShyb290X3N3YXApOwotCWlmIChzd3Bfb2Zmc2V0KGVudHJ5KSkgewotCQllcnJvciA9IHJ3X3N3YXBfcGFnZV9zeW5jKFdSSVRFLCBlbnRyeSwgdmlydF90b19wYWdlKGFkZHIpKTsKLQkJaWYgKCFlcnJvciB8fCBlcnJvciA9PSAtRUlPKQotCQkJKmxvYyA9IGVudHJ5OwotCX0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgotICoJU3dhcCBtYXAtaGFuZGxpbmcgZnVuY3Rpb25zCi0gKgotICoJVGhlIHN3YXAgbWFwIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiBlYWNoIHBhZ2UKLSAqCXdyaXR0ZW4gdG8gdGhlIHN3YXAuICBJdCBjb25zaXN0cyBvZiBtYW55IHN3YXBfbWFwX3BhZ2Ugc3RydWN0dXJlcwotICoJdGhhdCBjb250YWluIGVhY2ggYW4gYXJyYXkgb2YgTUFQX1BBR0VfU0laRSBzd2FwIGVudHJpZXMuCi0gKglUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBsaW5rZWQgdG9nZXRoZXIgd2l0aCB0aGUgaGVscCBvZiBlaXRoZXIgdGhlCi0gKgkubmV4dCAoaW4gbWVtb3J5KSBvciB0aGUgLm5leHRfc3dhcCAoaW4gc3dhcCkgbWVtYmVyLgotICoKLSAqCVRoZSBzd2FwIG1hcCBpcyBjcmVhdGVkIGR1cmluZyBzdXNwZW5kLiAgQXQgdGhhdCB0aW1lIHdlIG5lZWQgdG8ga2VlcAotICoJaXQgaW4gbWVtb3J5LCBiZWNhdXNlIHdlIGhhdmUgdG8gZnJlZSBhbGwgb2YgdGhlIGFsbG9jYXRlZCBzd2FwCi0gKgllbnRyaWVzIGlmIGFuIGVycm9yIG9jY3Vycy4gIFRoZSBtZW1vcnkgbmVlZGVkIGlzIHByZWFsbG9jYXRlZAotICoJc28gdGhhdCB3ZSBrbm93IGluIGFkdmFuY2UgaWYgdGhlcmUncyBlbm91Z2ggb2YgaXQuCi0gKgotICoJVGhlIGZpcnN0IHN3YXBfbWFwX3BhZ2Ugc3RydWN0dXJlIGlzIGZpbGxlZCB3aXRoIHRoZSBzd2FwIGVudHJpZXMgdGhhdAotICoJY29ycmVzcG9uZCB0byB0aGUgZmlyc3QgTUFQX1BBR0VfU0laRSBkYXRhIHBhZ2VzIHdyaXR0ZW4gdG8gc3dhcCBhbmQKLSAqCXNvIG9uLiAgQWZ0ZXIgdGhlIGFsbCBvZiB0aGUgZGF0YSBwYWdlcyBoYXZlIGJlZW4gd3JpdHRlbiwgdGhlIG9yZGVyCi0gKglvZiB0aGUgc3dhcF9tYXBfcGFnZSBzdHJ1Y3R1cmVzIGluIHRoZSBtYXAgaXMgcmV2ZXJzZWQgc28gdGhhdCB0aGV5Ci0gKgljYW4gYmUgcmVhZCBmcm9tIHN3YXAgaW4gdGhlIG9yaWdpbmFsIG9yZGVyLiAgVGhpcyBjYXVzZXMgdGhlIGRhdGEKLSAqCXBhZ2VzIHRvIGJlIGxvYWRlZCBpbiBleGFjdGx5IHRoZSBzYW1lIG9yZGVyIGluIHdoaWNoIHRoZXkgaGF2ZSBiZWVuCi0gKglzYXZlZC4KLSAqCi0gKglEdXJpbmcgcmVzdW1lIHdlIG9ubHkgbmVlZCB0byB1c2Ugb25lIHN3YXBfbWFwX3BhZ2Ugc3RydWN0dXJlCi0gKglhdCBhIHRpbWUsIHdoaWNoIG1lYW5zIHRoYXQgd2Ugb25seSBuZWVkIHRvIHVzZSB0d28gbWVtb3J5IHBhZ2VzIGZvcgotICoJcmVhZGluZyB0aGUgaW1hZ2UgLSBvbmUgZm9yIHJlYWRpbmcgdGhlIHN3YXBfbWFwX3BhZ2Ugc3RydWN0dXJlcwotICoJYW5kIHRoZSBzZWNvbmQgZm9yIHJlYWRpbmcgdGhlIGRhdGEgcGFnZXMgZnJvbSBzd2FwLgorICoJVGhlIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGEgbGlua2VkIGJpdG1hcCBzdHJ1Y3R1cmUgZGVmaW5lZAorICoJaW4gcG93ZXIuaAogICovCiAKLSNkZWZpbmUgTUFQX1BBR0VfU0laRQkoKFBBR0VfU0laRSAtIHNpemVvZihzd3BfZW50cnlfdCkgLSBzaXplb2Yodm9pZCAqKSkgXAotCQkJLyBzaXplb2Yoc3dwX2VudHJ5X3QpKQotCi1zdHJ1Y3Qgc3dhcF9tYXBfcGFnZSB7Ci0Jc3dwX2VudHJ5X3QJCWVudHJpZXNbTUFQX1BBR0VfU0laRV07Ci0Jc3dwX2VudHJ5X3QJCW5leHRfc3dhcDsKLQlzdHJ1Y3Qgc3dhcF9tYXBfcGFnZQkqbmV4dDsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3N3YXBfbWFwKHN0cnVjdCBzd2FwX21hcF9wYWdlICpzd2FwX21hcCkKK3ZvaWQgZnJlZV9iaXRtYXAoc3RydWN0IGJpdG1hcF9wYWdlICpiaXRtYXApCiB7Ci0Jc3RydWN0IHN3YXBfbWFwX3BhZ2UgKnN3cDsKKwlzdHJ1Y3QgYml0bWFwX3BhZ2UgKmJwOwogCi0Jd2hpbGUgKHN3YXBfbWFwKSB7Ci0JCXN3cCA9IHN3YXBfbWFwLT5uZXh0OwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3dhcF9tYXApOwotCQlzd2FwX21hcCA9IHN3cDsKKwl3aGlsZSAoYml0bWFwKSB7CisJCWJwID0gYml0bWFwLT5uZXh0OworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYml0bWFwKTsKKwkJYml0bWFwID0gYnA7CiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHN3YXBfbWFwX3BhZ2UgKmFsbG9jX3N3YXBfbWFwKHVuc2lnbmVkIGludCBucl9wYWdlcykKK3N0cnVjdCBiaXRtYXBfcGFnZSAqYWxsb2NfYml0bWFwKHVuc2lnbmVkIGludCBucl9iaXRzKQogewotCXN0cnVjdCBzd2FwX21hcF9wYWdlICpzd2FwX21hcCwgKnN3cDsKLQl1bnNpZ25lZCBuID0gMDsKKwlzdHJ1Y3QgYml0bWFwX3BhZ2UgKmJpdG1hcCwgKmJwOworCXVuc2lnbmVkIGludCBuOwogCi0JaWYgKCFucl9wYWdlcykKKwlpZiAoIW5yX2JpdHMpCiAJCXJldHVybiBOVUxMOwogCi0JcHJfZGVidWcoImFsbG9jX3N3YXBfbWFwKCk6IG5yX3BhZ2VzID0gJWRcbiIsIG5yX3BhZ2VzKTsKLQlzd2FwX21hcCA9IChzdHJ1Y3Qgc3dhcF9tYXBfcGFnZSAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKLQlzd3AgPSBzd2FwX21hcDsKLQlmb3IgKG4gPSBNQVBfUEFHRV9TSVpFOyBuIDwgbnJfcGFnZXM7IG4gKz0gTUFQX1BBR0VfU0laRSkgewotCQlzd3AtPm5leHQgPSAoc3RydWN0IHN3YXBfbWFwX3BhZ2UgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JCXN3cCA9IHN3cC0+bmV4dDsKLQkJaWYgKCFzd3ApIHsKLQkJCWZyZWVfc3dhcF9tYXAoc3dhcF9tYXApOworCWJpdG1hcCA9IChzdHJ1Y3QgYml0bWFwX3BhZ2UgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJYnAgPSBiaXRtYXA7CisJZm9yIChuID0gQklUTUFQX1BBR0VfQklUUzsgbiA8IG5yX2JpdHM7IG4gKz0gQklUTUFQX1BBR0VfQklUUykgeworCQlicC0+bmV4dCA9IChzdHJ1Y3QgYml0bWFwX3BhZ2UgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWJwID0gYnAtPm5leHQ7CisJCWlmICghYnApIHsKKwkJCWZyZWVfYml0bWFwKGJpdG1hcCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KLQlyZXR1cm4gc3dhcF9tYXA7CisJcmV0dXJuIGJpdG1hcDsKIH0KIAotLyoqCi0gKglyZXZlcnNlX3N3YXBfbWFwIC0gcmV2ZXJzZSB0aGUgb3JkZXIgb2YgcGFnZXMgaW4gdGhlIHN3YXAgbWFwCi0gKglAc3dhcF9tYXAKLSAqLwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX21hcF9wYWdlICpyZXZlcnNlX3N3YXBfbWFwKHN0cnVjdCBzd2FwX21hcF9wYWdlICpzd2FwX21hcCkKK3N0YXRpYyBpbnQgYml0bWFwX3NldChzdHJ1Y3QgYml0bWFwX3BhZ2UgKmJpdG1hcCwgdW5zaWduZWQgbG9uZyBiaXQpCiB7Ci0Jc3RydWN0IHN3YXBfbWFwX3BhZ2UgKnByZXYsICpuZXh0OworCXVuc2lnbmVkIGludCBuOwogCi0JcHJldiA9IE5VTEw7Ci0Jd2hpbGUgKHN3YXBfbWFwKSB7Ci0JCW5leHQgPSBzd2FwX21hcC0+bmV4dDsKLQkJc3dhcF9tYXAtPm5leHQgPSBwcmV2OwotCQlwcmV2ID0gc3dhcF9tYXA7Ci0JCXN3YXBfbWFwID0gbmV4dDsKKwluID0gQklUTUFQX1BBR0VfQklUUzsKKwl3aGlsZSAoYml0bWFwICYmIG4gPD0gYml0KSB7CisJCW4gKz0gQklUTUFQX1BBR0VfQklUUzsKKwkJYml0bWFwID0gYml0bWFwLT5uZXh0OwogCX0KLQlyZXR1cm4gcHJldjsKLX0KLQotLyoqCi0gKglmcmVlX3N3YXBfbWFwX2VudHJpZXMgLSBmcmVlIHRoZSBzd2FwIGVudHJpZXMgYWxsb2NhdGVkIHRvIHN0b3JlCi0gKgl0aGUgc3dhcCBtYXAgQHN3YXBfbWFwICh0aGlzIGlzIG9ubHkgY2FsbGVkIGluIGNhc2Ugb2YgYW4gZXJyb3IpCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3N3YXBfbWFwX2VudHJpZXMoc3RydWN0IHN3YXBfbWFwX3BhZ2UgKnN3YXBfbWFwKQotewotCXdoaWxlIChzd2FwX21hcCkgewotCQlpZiAoc3dhcF9tYXAtPm5leHRfc3dhcC52YWwpCi0JCQlzd2FwX2ZyZWUoc3dhcF9tYXAtPm5leHRfc3dhcCk7Ci0JCXN3YXBfbWFwID0gc3dhcF9tYXAtPm5leHQ7Ci0JfQotfQotCi0vKioKLSAqCXNhdmVfc3dhcF9tYXAgLSBzYXZlIHRoZSBzd2FwIG1hcCB1c2VkIGZvciB0cmFjaW5nIHRoZSBkYXRhIHBhZ2VzCi0gKglzdG9yZWQgaW4gdGhlIHN3YXAKLSAqLwotCi1zdGF0aWMgaW50IHNhdmVfc3dhcF9tYXAoc3RydWN0IHN3YXBfbWFwX3BhZ2UgKnN3YXBfbWFwLCBzd3BfZW50cnlfdCAqc3RhcnQpCi17Ci0Jc3dwX2VudHJ5X3QgZW50cnkgPSAoc3dwX2VudHJ5X3QpezB9OwotCWludCBlcnJvcjsKLQotCXdoaWxlIChzd2FwX21hcCkgewotCQlzd2FwX21hcC0+bmV4dF9zd2FwID0gZW50cnk7Ci0JCWlmICgoZXJyb3IgPSB3cml0ZV9wYWdlKCh1bnNpZ25lZCBsb25nKXN3YXBfbWFwLCAmZW50cnkpKSkKLQkJCXJldHVybiBlcnJvcjsKLQkJc3dhcF9tYXAgPSBzd2FwX21hcC0+bmV4dDsKLQl9Ci0JKnN0YXJ0ID0gZW50cnk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJZnJlZV9pbWFnZV9lbnRyaWVzIC0gZnJlZSB0aGUgc3dhcCBlbnRyaWVzIGFsbG9jYXRlZCB0byBzdG9yZQotICoJdGhlIGltYWdlIGRhdGEgcGFnZXMgKHRoaXMgaXMgb25seSBjYWxsZWQgaW4gY2FzZSBvZiBhbiBlcnJvcikKLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9pbWFnZV9lbnRyaWVzKHN0cnVjdCBzd2FwX21hcF9wYWdlICpzd3ApCi17Ci0JdW5zaWduZWQgazsKLQotCXdoaWxlIChzd3ApIHsKLQkJZm9yIChrID0gMDsgayA8IE1BUF9QQUdFX1NJWkU7IGsrKykKLQkJCWlmIChzd3AtPmVudHJpZXNba10udmFsKQotCQkJCXN3YXBfZnJlZShzd3AtPmVudHJpZXNba10pOwotCQlzd3AgPSBzd3AtPm5leHQ7Ci0JfQotfQotCi0vKioKLSAqCVRoZSBzd2FwX21hcF9oYW5kbGUgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGhhbmRsaW5nIHRoZSBzd2FwIG1hcCBpbgotICoJYSBmaWxlLWFsaWtlIHdheQotICovCi0KLXN0cnVjdCBzd2FwX21hcF9oYW5kbGUgewotCXN0cnVjdCBzd2FwX21hcF9wYWdlICpjdXI7Ci0JdW5zaWduZWQgaW50IGs7Ci19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zd2FwX21hcF9oYW5kbGUoc3RydWN0IHN3YXBfbWFwX2hhbmRsZSAqaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzd2FwX21hcF9wYWdlICptYXApCi17Ci0JaGFuZGxlLT5jdXIgPSBtYXA7Ci0JaGFuZGxlLT5rID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc3dhcF9tYXBfd3JpdGVfcGFnZShzdHJ1Y3Qgc3dhcF9tYXBfaGFuZGxlICpoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IHdyaXRlX3BhZ2UoYWRkciwgaGFuZGxlLT5jdXItPmVudHJpZXMgKyBoYW5kbGUtPmspOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWlmICgrK2hhbmRsZS0+ayA+PSBNQVBfUEFHRV9TSVpFKSB7Ci0JCWhhbmRsZS0+Y3VyID0gaGFuZGxlLT5jdXItPm5leHQ7Ci0JCWhhbmRsZS0+ayA9IDA7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXNhdmVfaW1hZ2VfZGF0YSAtIHNhdmUgdGhlIGRhdGEgcGFnZXMgcG9pbnRlZCB0byBieSB0aGUgUEJFcwotICoJZnJvbSB0aGUgbGlzdCBAcGJsaXN0IHVzaW5nIHRoZSBzd2FwIG1hcCBoYW5kbGUgQGhhbmRsZQotICoJKGFzc3VtZSB0aGVyZSBhcmUgQG5yX3BhZ2VzIGRhdGEgcGFnZXMgdG8gc2F2ZSkKLSAqLwotCi1zdGF0aWMgaW50IHNhdmVfaW1hZ2VfZGF0YShzdHJ1Y3QgcGJlICpwYmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3dhcF9tYXBfaGFuZGxlICpoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpCi17Ci0JdW5zaWduZWQgaW50IG07Ci0Jc3RydWN0IHBiZSAqcDsKLQlpbnQgZXJyb3IgPSAwOwotCi0JcHJpbnRrKCJTYXZpbmcgaW1hZ2UgZGF0YSBwYWdlcyAoJXUgcGFnZXMpIC4uLiAgICAgIiwgbnJfcGFnZXMpOwotCW0gPSBucl9wYWdlcyAvIDEwMDsKLQlpZiAoIW0pCi0JCW0gPSAxOwotCW5yX3BhZ2VzID0gMDsKLQlmb3JfZWFjaF9wYmUgKHAsIHBibGlzdCkgewotCQllcnJvciA9IHN3YXBfbWFwX3dyaXRlX3BhZ2UoaGFuZGxlLCBwLT5hZGRyZXNzKTsKLQkJaWYgKGVycm9yKQotCQkJYnJlYWs7Ci0JCWlmICghKG5yX3BhZ2VzICUgbSkpCi0JCQlwcmludGsoIlxiXGJcYlxiJTNkJSUiLCBucl9wYWdlcyAvIG0pOwotCQlucl9wYWdlcysrOwotCX0KLQlpZiAoIWVycm9yKQotCQlwcmludGsoIlxiXGJcYlxiZG9uZVxuIik7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBkdW1wX2luZm8odm9pZCkKLXsKLQlwcl9kZWJ1ZygiIHN3c3VzcDogVmVyc2lvbjogJXVcbiIsc3dzdXNwX2luZm8udmVyc2lvbl9jb2RlKTsKLQlwcl9kZWJ1ZygiIHN3c3VzcDogTnVtIFBhZ2VzOiAlbGRcbiIsc3dzdXNwX2luZm8ubnVtX3BoeXNwYWdlcyk7Ci0JcHJfZGVidWcoIiBzd3N1c3A6IFVUUyBTeXM6ICVzXG4iLHN3c3VzcF9pbmZvLnV0cy5zeXNuYW1lKTsKLQlwcl9kZWJ1ZygiIHN3c3VzcDogVVRTIE5vZGU6ICVzXG4iLHN3c3VzcF9pbmZvLnV0cy5ub2RlbmFtZSk7Ci0JcHJfZGVidWcoIiBzd3N1c3A6IFVUUyBSZWxlYXNlOiAlc1xuIixzd3N1c3BfaW5mby51dHMucmVsZWFzZSk7Ci0JcHJfZGVidWcoIiBzd3N1c3A6IFVUUyBWZXJzaW9uOiAlc1xuIixzd3N1c3BfaW5mby51dHMudmVyc2lvbik7Ci0JcHJfZGVidWcoIiBzd3N1c3A6IFVUUyBNYWNoaW5lOiAlc1xuIixzd3N1c3BfaW5mby51dHMubWFjaGluZSk7Ci0JcHJfZGVidWcoIiBzd3N1c3A6IFVUUyBEb21haW46ICVzXG4iLHN3c3VzcF9pbmZvLnV0cy5kb21haW5uYW1lKTsKLQlwcl9kZWJ1ZygiIHN3c3VzcDogQ1BVczogJWRcbiIsc3dzdXNwX2luZm8uY3B1cyk7Ci0JcHJfZGVidWcoIiBzd3N1c3A6IEltYWdlOiAlbGQgUGFnZXNcbiIsc3dzdXNwX2luZm8uaW1hZ2VfcGFnZXMpOwotCXByX2RlYnVnKCIgc3dzdXNwOiBUb3RhbDogJWxkIFBhZ2VzXG4iLCBzd3N1c3BfaW5mby5wYWdlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRfaGVhZGVyKHVuc2lnbmVkIGludCBucl9wYWdlcykKLXsKLQltZW1zZXQoJnN3c3VzcF9pbmZvLCAwLCBzaXplb2Yoc3dzdXNwX2luZm8pKTsKLQlzd3N1c3BfaW5mby52ZXJzaW9uX2NvZGUgPSBMSU5VWF9WRVJTSU9OX0NPREU7Ci0Jc3dzdXNwX2luZm8ubnVtX3BoeXNwYWdlcyA9IG51bV9waHlzcGFnZXM7Ci0JbWVtY3B5KCZzd3N1c3BfaW5mby51dHMsICZzeXN0ZW1fdXRzbmFtZSwgc2l6ZW9mKHN5c3RlbV91dHNuYW1lKSk7Ci0KLQlzd3N1c3BfaW5mby5jcHVzID0gbnVtX29ubGluZV9jcHVzKCk7Ci0Jc3dzdXNwX2luZm8uaW1hZ2VfcGFnZXMgPSBucl9wYWdlczsKLQlzd3N1c3BfaW5mby5wYWdlcyA9IG5yX3BhZ2VzICsKLQkJKChucl9wYWdlcyAqIHNpemVvZihsb25nKSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQpICsgMTsKLX0KLQotLyoqCi0gKglwYWNrX29yaWdfYWRkcmVzc2VzIC0gdGhlIC5vcmlnX2FkZHJlc3MgZmllbGRzIG9mIHRoZSBQQkVzIGZyb20gdGhlCi0gKglsaXN0IHN0YXJ0aW5nIGF0IEBwYmUgYXJlIHN0b3JlZCBpbiB0aGUgYXJyYXkgQGJ1ZltdICgxIHBhZ2UpCi0gKi8KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGJlICpwYWNrX29yaWdfYWRkcmVzc2VzKHVuc2lnbmVkIGxvbmcgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGJlICpwYmUpCi17Ci0JaW50IGo7Ci0KLQlmb3IgKGogPSAwOyBqIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKGxvbmcpICYmIHBiZTsgaisrKSB7Ci0JCWJ1ZltqXSA9IHBiZS0+b3JpZ19hZGRyZXNzOwotCQlwYmUgPSBwYmUtPm5leHQ7Ci0JfQotCWlmICghcGJlKQotCQlmb3IgKDsgaiA8IFBBR0VfU0laRSAvIHNpemVvZihsb25nKTsgaisrKQotCQkJYnVmW2pdID0gMDsKLQlyZXR1cm4gcGJlOwotfQotCi0vKioKLSAqCXNhdmVfaW1hZ2VfbWV0YWRhdGEgLSBzYXZlIHRoZSAub3JpZ19hZGRyZXNzIGZpZWxkcyBvZiB0aGUgUEJFcwotICoJZnJvbSB0aGUgbGlzdCBAcGJsaXN0IHVzaW5nIHRoZSBzd2FwIG1hcCBoYW5kbGUgQGhhbmRsZQotICovCi0KLXN0YXRpYyBpbnQgc2F2ZV9pbWFnZV9tZXRhZGF0YShzdHJ1Y3QgcGJlICpwYmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN3YXBfbWFwX2hhbmRsZSAqaGFuZGxlKQotewotCXVuc2lnbmVkIGxvbmcgKmJ1ZjsKLQl1bnNpZ25lZCBpbnQgbiA9IDA7Ci0Jc3RydWN0IHBiZSAqcDsKLQlpbnQgZXJyb3IgPSAwOwotCi0JcHJpbnRrKCJTYXZpbmcgaW1hZ2UgbWV0YWRhdGEgLi4uICIpOwotCWJ1ZiA9ICh1bnNpZ25lZCBsb25nICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlwID0gcGJsaXN0OwotCXdoaWxlIChwKSB7Ci0JCXAgPSBwYWNrX29yaWdfYWRkcmVzc2VzKGJ1ZiwgcCk7Ci0JCWVycm9yID0gc3dhcF9tYXBfd3JpdGVfcGFnZShoYW5kbGUsICh1bnNpZ25lZCBsb25nKWJ1Zik7Ci0JCWlmIChlcnJvcikKLQkJCWJyZWFrOworCWlmICghYml0bWFwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwluIC09IEJJVE1BUF9QQUdFX0JJVFM7CisJYml0IC09IG47CisJbiA9IDA7CisJd2hpbGUgKGJpdCA+PSBCSVRTX1BFUl9DSFVOSykgeworCQliaXQgLT0gQklUU19QRVJfQ0hVTks7CiAJCW4rKzsKIAl9Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7Ci0JaWYgKCFlcnJvcikKLQkJcHJpbnRrKCJkb25lICgldSBwYWdlcyBzYXZlZClcbiIsIG4pOwotCXJldHVybiBlcnJvcjsKKwliaXRtYXAtPmNodW5rc1tuXSB8PSAoMVVMIDw8IGJpdCk7CisJcmV0dXJuIDA7CiB9CiAKLS8qKgotICoJZW5vdWdoX3N3YXAgLSBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3dhcCB0byBzYXZlIHRoZSBpbWFnZS4KLSAqCi0gKglSZXR1cm5zIFRSVUUgb3IgRkFMU0UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHRvdGFsIGFtb3VudCBvZiBzd2FwCi0gKglzcGFjZSBhdmFpYWJsZSBmcm9tIHRoZSByZXN1bWUgcGFydGl0aW9uLgotICovCi0KLXN0YXRpYyBpbnQgZW5vdWdoX3N3YXAodW5zaWduZWQgaW50IG5yX3BhZ2VzKQordW5zaWduZWQgbG9uZyBhbGxvY19zd2FwX3BhZ2UoaW50IHN3YXAsIHN0cnVjdCBiaXRtYXBfcGFnZSAqYml0bWFwKQogewotCXVuc2lnbmVkIGludCBmcmVlX3N3YXAgPSBzd2FwX2luZm9bcm9vdF9zd2FwXS5wYWdlcyAtCi0JCXN3YXBfaW5mb1tyb290X3N3YXBdLmludXNlX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCi0JcHJfZGVidWcoInN3c3VzcDogZnJlZSBzd2FwIHBhZ2VzOiAldVxuIiwgZnJlZV9zd2FwKTsKLQlyZXR1cm4gZnJlZV9zd2FwID4gKG5yX3BhZ2VzICsgUEFHRVNfRk9SX0lPICsKLQkJKG5yX3BhZ2VzICsgUEJFU19QRVJfUEFHRSAtIDEpIC8gUEJFU19QRVJfUEFHRSk7CisJb2Zmc2V0ID0gc3dwX29mZnNldChnZXRfc3dhcF9wYWdlX29mX3R5cGUoc3dhcCkpOworCWlmIChvZmZzZXQpIHsKKwkJaWYgKGJpdG1hcF9zZXQoYml0bWFwLCBvZmZzZXQpKSB7CisJCQlzd2FwX2ZyZWUoc3dwX2VudHJ5KHN3YXAsIG9mZnNldCkpOworCQkJb2Zmc2V0ID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gb2Zmc2V0OwogfQogCi0vKioKLSAqCXN3c3VzcF93cml0ZSAtIFdyaXRlIGVudGlyZSBpbWFnZSBhbmQgbWV0YWRhdGEuCi0gKgotICoJSXQgaXMgaW1wb3J0YW50IF9OT1RfIHRvIHVtb3VudCBmaWxlc3lzdGVtcyBhdCB0aGlzIHBvaW50LiBXZSB3YW50Ci0gKgl0aGVtIHN5bmNlZCAoaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZykgYnV0IHdlIERPIG5vdCB3YW50IHRvIG1hcmsKLSAqCWZpbGVzeXN0ZW0gY2xlYW46IGl0IGlzIG5vdC4gKEFuZCBpdCBkb2VzIG5vdCBtYXR0ZXIsIGlmIHdlIHJlc3VtZQotICoJY29ycmVjdGx5LCB3ZSdsbCBtYXJrIHN5c3RlbSBjbGVhbiwgYW55d2F5LikKLSAqLwotCi1pbnQgc3dzdXNwX3dyaXRlKHN0cnVjdCBwYmUgKnBibGlzdCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQordm9pZCBmcmVlX2FsbF9zd2FwX3BhZ2VzKGludCBzd2FwLCBzdHJ1Y3QgYml0bWFwX3BhZ2UgKmJpdG1hcCkKIHsKLQlzdHJ1Y3Qgc3dhcF9tYXBfcGFnZSAqc3dhcF9tYXA7Ci0Jc3RydWN0IHN3YXBfbWFwX2hhbmRsZSBoYW5kbGU7Ci0Jc3dwX2VudHJ5X3Qgc3RhcnQ7Ci0JaW50IGVycm9yOworCXVuc2lnbmVkIGludCBiaXQsIG47CisJdW5zaWduZWQgbG9uZyB0ZXN0OwogCi0JaWYgKChlcnJvciA9IHN3c3VzcF9zd2FwX2NoZWNrKCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3dzdXNwOiBDYW5ub3QgZmluZCBzd2FwIGRldmljZSwgdHJ5IHN3YXBvbiAtYS5cbiIpOwotCQlyZXR1cm4gZXJyb3I7CisJYml0ID0gMDsKKwl3aGlsZSAoYml0bWFwKSB7CisJCWZvciAobiA9IDA7IG4gPCBCSVRNQVBfUEFHRV9DSFVOS1M7IG4rKykKKwkJCWZvciAodGVzdCA9IDFVTDsgdGVzdDsgdGVzdCA8PD0gMSkgeworCQkJCWlmIChiaXRtYXAtPmNodW5rc1tuXSAmIHRlc3QpCisJCQkJCXN3YXBfZnJlZShzd3BfZW50cnkoc3dhcCwgYml0KSk7CisJCQkJYml0Kys7CisJCQl9CisJCWJpdG1hcCA9IGJpdG1hcC0+bmV4dDsKIAl9Ci0JaWYgKCFlbm91Z2hfc3dhcChucl9wYWdlcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzd3N1c3A6IE5vdCBlbm91Z2ggZnJlZSBzd2FwXG4iKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0JaW5pdF9oZWFkZXIobnJfcGFnZXMpOwotCXN3YXBfbWFwID0gYWxsb2Nfc3dhcF9tYXAoc3dzdXNwX2luZm8ucGFnZXMpOwotCWlmICghc3dhcF9tYXApCi0JCXJldHVybiAtRU5PTUVNOwotCWluaXRfc3dhcF9tYXBfaGFuZGxlKCZoYW5kbGUsIHN3YXBfbWFwKTsKLQotCWVycm9yID0gc3dhcF9tYXBfd3JpdGVfcGFnZSgmaGFuZGxlLCAodW5zaWduZWQgbG9uZykmc3dzdXNwX2luZm8pOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc2F2ZV9pbWFnZV9tZXRhZGF0YShwYmxpc3QsICZoYW5kbGUpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc2F2ZV9pbWFnZV9kYXRhKHBibGlzdCwgJmhhbmRsZSwgbnJfcGFnZXMpOwotCWlmIChlcnJvcikKLQkJZ290byBGcmVlX2ltYWdlX2VudHJpZXM7Ci0KLQlzd2FwX21hcCA9IHJldmVyc2Vfc3dhcF9tYXAoc3dhcF9tYXApOwotCWVycm9yID0gc2F2ZV9zd2FwX21hcChzd2FwX21hcCwgJnN0YXJ0KTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gRnJlZV9tYXBfZW50cmllczsKLQotCWR1bXBfaW5mbygpOwotCXByaW50ayggIlMiICk7Ci0JZXJyb3IgPSBtYXJrX3N3YXBmaWxlcyhzdGFydCk7Ci0JcHJpbnRrKCAifFxuIiApOwotCWlmIChlcnJvcikKLQkJZ290byBGcmVlX21hcF9lbnRyaWVzOwotCi1GcmVlX3N3YXBfbWFwOgotCWZyZWVfc3dhcF9tYXAoc3dhcF9tYXApOwotCXJldHVybiBlcnJvcjsKLQotRnJlZV9tYXBfZW50cmllczoKLQlmcmVlX3N3YXBfbWFwX2VudHJpZXMoc3dhcF9tYXApOwotRnJlZV9pbWFnZV9lbnRyaWVzOgotCWZyZWVfaW1hZ2VfZW50cmllcyhzd2FwX21hcCk7Ci0JZ290byBGcmVlX3N3YXBfbWFwOwogfQogCiAvKioKQEAgLTY2MCwzNzkgKzI3MSwzIEBACiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXJldHVybiBlcnJvcjsKIH0KLQotLyoqCi0gKgltYXJrX3Vuc2FmZV9wYWdlcyAtIG1hcmsgdGhlIHBhZ2VzIHRoYXQgY2Fubm90IGJlIHVzZWQgZm9yIHN0b3JpbmcKLSAqCXRoZSBpbWFnZSBkdXJpbmcgcmVzdW1lLCBiZWNhdXNlIHRoZXkgY29uZmxpY3Qgd2l0aCB0aGUgcGFnZXMgdGhhdAotICoJaGFkIGJlZW4gdXNlZCBiZWZvcmUgc3VzcGVuZAotICovCi0KLXN0YXRpYyB2b2lkIG1hcmtfdW5zYWZlX3BhZ2VzKHN0cnVjdCBwYmUgKnBibGlzdCkKLXsKLQlzdHJ1Y3Qgem9uZSAqem9uZTsKLQl1bnNpZ25lZCBsb25nIHpvbmVfcGZuOwotCXN0cnVjdCBwYmUgKnA7Ci0KLQlpZiAoIXBibGlzdCkgLyogYSBzYW5pdHkgY2hlY2sgKi8KLQkJcmV0dXJuOwotCi0JLyogQ2xlYXIgcGFnZSBmbGFncyAqLwotCWZvcl9lYWNoX3pvbmUgKHpvbmUpIHsKLQkJZm9yICh6b25lX3BmbiA9IDA7IHpvbmVfcGZuIDwgem9uZS0+c3Bhbm5lZF9wYWdlczsgKyt6b25lX3BmbikKLQkJCWlmIChwZm5fdmFsaWQoem9uZV9wZm4gKyB6b25lLT56b25lX3N0YXJ0X3BmbikpCi0JCQkJQ2xlYXJQYWdlTm9zYXZlRnJlZShwZm5fdG9fcGFnZSh6b25lX3BmbiArCi0JCQkJCXpvbmUtPnpvbmVfc3RhcnRfcGZuKSk7Ci0JfQotCi0JLyogTWFyayBvcmlnIGFkZHJlc3NlcyAqLwotCWZvcl9lYWNoX3BiZSAocCwgcGJsaXN0KQotCQlTZXRQYWdlTm9zYXZlRnJlZSh2aXJ0X3RvX3BhZ2UocC0+b3JpZ19hZGRyZXNzKSk7Ci0KLX0KLQotc3RhdGljIHZvaWQgY29weV9wYWdlX2JhY2t1cF9saXN0KHN0cnVjdCBwYmUgKmRzdCwgc3RydWN0IHBiZSAqc3JjKQotewotCS8qIFdlIGFzc3VtZSBib3RoIGxpc3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzICovCi0Jd2hpbGUgKHNyYykgewotCQlkc3QtPm9yaWdfYWRkcmVzcyA9IHNyYy0+b3JpZ19hZGRyZXNzOwotCQlkc3QgPSBkc3QtPm5leHQ7Ci0JCXNyYyA9IHNyYy0+bmV4dDsKLQl9Ci19Ci0KLS8qCi0gKglVc2luZyBiaW8gdG8gcmVhZCBmcm9tIHN3YXAuCi0gKglUaGlzIGNvZGUgcmVxdWlyZXMgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCB1c2luZyBidWZmZXIgaGVhZHMKLSAqCWJ1dCwgaXQgaXMgdGhlIHJlY29tbWVuZGVkIHdheSBmb3IgMi41LzIuNi4KLSAqCVRoZSBmb2xsb3dpbmcgYXJlIHRvIHNpZ25hbCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgSS9PLiBCaW9zCi0gKglmaW5pc2ggYXN5bmNocm9ub3VzbHksIHdoaWxlIHdlIHdhbnQgdGhlbSB0byBoYXBwZW4gc3luY2hyb25vdXNseS4KLSAqCUEgc2ltcGxlIGF0b21pY190LCBhbmQgYSB3YWl0IGxvb3AgdGFrZSBjYXJlIG9mIHRoaXMgcHJvYmxlbS4KLSAqLwotCi1zdGF0aWMgYXRvbWljX3QgaW9fZG9uZSA9IEFUT01JQ19JTklUKDApOwotCi1zdGF0aWMgaW50IGVuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBudW0sIGludCBlcnIpCi17Ci0JaWYgKCF0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKSkKLQkJcGFuaWMoIkkvTyBlcnJvciByZWFkaW5nIG1lbW9yeSBpbWFnZSIpOwotCWF0b21pY19zZXQoJmlvX2RvbmUsIDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZSAqcmVzdW1lX2JkZXY7Ci0KLS8qKgotICoJc3VibWl0IC0gc3VibWl0IEJJTyByZXF1ZXN0LgotICoJQHJ3OglSRUFEIG9yIFdSSVRFLgotICoJQG9mZglwaHlzaWNhbCBvZmZzZXQgb2YgcGFnZS4KLSAqCUBwYWdlOglwYWdlIHdlJ3JlIHJlYWRpbmcgb3Igd3JpdGluZy4KLSAqCi0gKglTdHJhaWdodCBmcm9tIHRoZSB0ZXh0Ym9vayAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBiaW8uCi0gKglJZiB3ZSdyZSB3cml0aW5nLCBtYWtlIHN1cmUgdGhlIHBhZ2UgaXMgbWFya2VkIGFzIGRpcnR5LgotICoJVGhlbiBzdWJtaXQgaXQgYW5kIHdhaXQuCi0gKi8KLQotc3RhdGljIGludCBzdWJtaXQoaW50IHJ3LCBwZ29mZl90IHBhZ2Vfb2ZmLCB2b2lkICpwYWdlKQotewotCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCi0JYmlvID0gYmlvX2FsbG9jKEdGUF9BVE9NSUMsIDEpOwotCWlmICghYmlvKQotCQlyZXR1cm4gLUVOT01FTTsKLQliaW8tPmJpX3NlY3RvciA9IHBhZ2Vfb2ZmICogKFBBR0VfU0laRSA+PiA5KTsKLQliaW8tPmJpX2JkZXYgPSByZXN1bWVfYmRldjsKLQliaW8tPmJpX2VuZF9pbyA9IGVuZF9pbzsKLQotCWlmIChiaW9fYWRkX3BhZ2UoYmlvLCB2aXJ0X3RvX3BhZ2UocGFnZSksIFBBR0VfU0laRSwgMCkgPCBQQUdFX1NJWkUpIHsKLQkJcHJpbnRrKCJzd3N1c3A6IEVSUk9SOiBhZGRpbmcgcGFnZSB0byBiaW8gYXQgJWxkXG4iLHBhZ2Vfb2ZmKTsKLQkJZXJyb3IgPSAtRUZBVUxUOwotCQlnb3RvIERvbmU7Ci0JfQotCi0KLQlhdG9taWNfc2V0KCZpb19kb25lLCAxKTsKLQlzdWJtaXRfYmlvKHJ3IHwgKDEgPDwgQklPX1JXX1NZTkMpLCBiaW8pOwotCXdoaWxlIChhdG9taWNfcmVhZCgmaW9fZG9uZSkpCi0JCXlpZWxkKCk7Ci0JaWYgKHJ3ID09IFJFQUQpCi0JCWJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTsKLSBEb25lOgotCWJpb19wdXQoYmlvKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgYmlvX3JlYWRfcGFnZShwZ29mZl90IHBhZ2Vfb2ZmLCB2b2lkICpwYWdlKQotewotCXJldHVybiBzdWJtaXQoUkVBRCwgcGFnZV9vZmYsIHBhZ2UpOwotfQotCi1zdGF0aWMgaW50IGJpb193cml0ZV9wYWdlKHBnb2ZmX3QgcGFnZV9vZmYsIHZvaWQgKnBhZ2UpCi17Ci0JcmV0dXJuIHN1Ym1pdChXUklURSwgcGFnZV9vZmYsIHBhZ2UpOwotfQotCi0vKioKLSAqCVRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFsbG93IHVzIHRvIHJlYWQgZGF0YSB1c2luZyBhIHN3YXAgbWFwCi0gKglpbiBhIGZpbGUtYWxpa2Ugd2F5Ci0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2Vfc3dhcF9tYXBfcmVhZGVyKHN0cnVjdCBzd2FwX21hcF9oYW5kbGUgKmhhbmRsZSkKLXsKLQlpZiAoaGFuZGxlLT5jdXIpCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyloYW5kbGUtPmN1cik7Ci0JaGFuZGxlLT5jdXIgPSBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBnZXRfc3dhcF9tYXBfcmVhZGVyKHN0cnVjdCBzd2FwX21hcF9oYW5kbGUgKmhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dwX2VudHJ5X3Qgc3RhcnQpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKCFzd3Bfb2Zmc2V0KHN0YXJ0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaGFuZGxlLT5jdXIgPSAoc3RydWN0IHN3YXBfbWFwX3BhZ2UgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JaWYgKCFoYW5kbGUtPmN1cikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZXJyb3IgPSBiaW9fcmVhZF9wYWdlKHN3cF9vZmZzZXQoc3RhcnQpLCBoYW5kbGUtPmN1cik7Ci0JaWYgKGVycm9yKSB7Ci0JCXJlbGVhc2Vfc3dhcF9tYXBfcmVhZGVyKGhhbmRsZSk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JaGFuZGxlLT5rID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc3dhcF9tYXBfcmVhZF9wYWdlKHN0cnVjdCBzd2FwX21hcF9oYW5kbGUgKmhhbmRsZSwgdm9pZCAqYnVmKQotewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCWludCBlcnJvcjsKLQotCWlmICghaGFuZGxlLT5jdXIpCi0JCXJldHVybiAtRUlOVkFMOwotCW9mZnNldCA9IHN3cF9vZmZzZXQoaGFuZGxlLT5jdXItPmVudHJpZXNbaGFuZGxlLT5rXSk7Ci0JaWYgKCFvZmZzZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCWVycm9yID0gYmlvX3JlYWRfcGFnZShvZmZzZXQsIGJ1Zik7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JaWYgKCsraGFuZGxlLT5rID49IE1BUF9QQUdFX1NJWkUpIHsKLQkJaGFuZGxlLT5rID0gMDsKLQkJb2Zmc2V0ID0gc3dwX29mZnNldChoYW5kbGUtPmN1ci0+bmV4dF9zd2FwKTsKLQkJaWYgKCFvZmZzZXQpCi0JCQlyZWxlYXNlX3N3YXBfbWFwX3JlYWRlcihoYW5kbGUpOwotCQllbHNlCi0JCQllcnJvciA9IGJpb19yZWFkX3BhZ2Uob2Zmc2V0LCBoYW5kbGUtPmN1cik7Ci0JfQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBjaGVja19oZWFkZXIodm9pZCkKLXsKLQljaGFyICpyZWFzb24gPSBOVUxMOwotCi0JZHVtcF9pbmZvKCk7Ci0JaWYgKHN3c3VzcF9pbmZvLnZlcnNpb25fY29kZSAhPSBMSU5VWF9WRVJTSU9OX0NPREUpCi0JCXJlYXNvbiA9ICJrZXJuZWwgdmVyc2lvbiI7Ci0JaWYgKHN3c3VzcF9pbmZvLm51bV9waHlzcGFnZXMgIT0gbnVtX3BoeXNwYWdlcykKLQkJcmVhc29uID0gIm1lbW9yeSBzaXplIjsKLQlpZiAoc3RyY21wKHN3c3VzcF9pbmZvLnV0cy5zeXNuYW1lLHN5c3RlbV91dHNuYW1lLnN5c25hbWUpKQotCQlyZWFzb24gPSAic3lzdGVtIHR5cGUiOwotCWlmIChzdHJjbXAoc3dzdXNwX2luZm8udXRzLnJlbGVhc2Usc3lzdGVtX3V0c25hbWUucmVsZWFzZSkpCi0JCXJlYXNvbiA9ICJrZXJuZWwgcmVsZWFzZSI7Ci0JaWYgKHN0cmNtcChzd3N1c3BfaW5mby51dHMudmVyc2lvbixzeXN0ZW1fdXRzbmFtZS52ZXJzaW9uKSkKLQkJcmVhc29uID0gInZlcnNpb24iOwotCWlmIChzdHJjbXAoc3dzdXNwX2luZm8udXRzLm1hY2hpbmUsc3lzdGVtX3V0c25hbWUubWFjaGluZSkpCi0JCXJlYXNvbiA9ICJtYWNoaW5lIjsKLQlpZiAocmVhc29uKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic3dzdXNwOiBSZXN1bWUgbWlzbWF0Y2g6ICVzXG4iLCByZWFzb24pOwotCQlyZXR1cm4gLUVQRVJNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKglsb2FkX2ltYWdlX2RhdGEgLSBsb2FkIHRoZSBpbWFnZSBkYXRhIHVzaW5nIHRoZSBzd2FwIG1hcCBoYW5kbGUKLSAqCUBoYW5kbGUgYW5kIHN0b3JlIHRoZW0gdXNpbmcgdGhlIHBhZ2UgYmFja3VwIGxpc3QgQHBibGlzdAotICoJKGFzc3VtZSB0aGVyZSBhcmUgQG5yX3BhZ2VzIHBhZ2VzIHRvIGxvYWQpCi0gKi8KLQotc3RhdGljIGludCBsb2FkX2ltYWdlX2RhdGEoc3RydWN0IHBiZSAqcGJsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN3YXBfbWFwX2hhbmRsZSAqaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQotewotCWludCBlcnJvcjsKLQl1bnNpZ25lZCBpbnQgbTsKLQlzdHJ1Y3QgcGJlICpwOwotCi0JaWYgKCFwYmxpc3QpCi0JCXJldHVybiAtRUlOVkFMOwotCXByaW50aygiTG9hZGluZyBpbWFnZSBkYXRhIHBhZ2VzICgldSBwYWdlcykgLi4uICAgICAiLCBucl9wYWdlcyk7Ci0JbSA9IG5yX3BhZ2VzIC8gMTAwOwotCWlmICghbSkKLQkJbSA9IDE7Ci0JbnJfcGFnZXMgPSAwOwotCXAgPSBwYmxpc3Q7Ci0Jd2hpbGUgKHApIHsKLQkJZXJyb3IgPSBzd2FwX21hcF9yZWFkX3BhZ2UoaGFuZGxlLCAodm9pZCAqKXAtPmFkZHJlc3MpOwotCQlpZiAoZXJyb3IpCi0JCQlicmVhazsKLQkJcCA9IHAtPm5leHQ7Ci0JCWlmICghKG5yX3BhZ2VzICUgbSkpCi0JCQlwcmludGsoIlxiXGJcYlxiJTNkJSUiLCBucl9wYWdlcyAvIG0pOwotCQlucl9wYWdlcysrOwotCX0KLQlpZiAoIWVycm9yKQotCQlwcmludGsoIlxiXGJcYlxiZG9uZVxuIik7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqCXVucGFja19vcmlnX2FkZHJlc3NlcyAtIGNvcHkgdGhlIGVsZW1lbnRzIG9mIEBidWZbXSAoMSBwYWdlKSB0bwotICoJdGhlIFBCRXMgaW4gdGhlIGxpc3Qgc3RhcnRpbmcgYXQgQHBiZQotICovCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBiZSAqdW5wYWNrX29yaWdfYWRkcmVzc2VzKHVuc2lnbmVkIGxvbmcgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYmUgKnBiZSkKLXsKLQlpbnQgajsKLQotCWZvciAoaiA9IDA7IGogPCBQQUdFX1NJWkUgLyBzaXplb2YobG9uZykgJiYgcGJlOyBqKyspIHsKLQkJcGJlLT5vcmlnX2FkZHJlc3MgPSBidWZbal07Ci0JCXBiZSA9IHBiZS0+bmV4dDsKLQl9Ci0JcmV0dXJuIHBiZTsKLX0KLQotLyoqCi0gKglsb2FkX2ltYWdlX21ldGFkYXRhIC0gbG9hZCB0aGUgaW1hZ2UgbWV0YWRhdGEgdXNpbmcgdGhlIHN3YXAgbWFwCi0gKgloYW5kbGUgQGhhbmRsZSBhbmQgcHV0IHRoZW0gaW50byB0aGUgUEJFcyBpbiB0aGUgbGlzdCBAcGJsaXN0Ci0gKi8KLQotc3RhdGljIGludCBsb2FkX2ltYWdlX21ldGFkYXRhKHN0cnVjdCBwYmUgKnBibGlzdCwgc3RydWN0IHN3YXBfbWFwX2hhbmRsZSAqaGFuZGxlKQotewotCXN0cnVjdCBwYmUgKnA7Ci0JdW5zaWduZWQgbG9uZyAqYnVmOwotCXVuc2lnbmVkIGludCBuID0gMDsKLQlpbnQgZXJyb3IgPSAwOwotCi0JcHJpbnRrKCJMb2FkaW5nIGltYWdlIG1ldGFkYXRhIC4uLiAiKTsKLQlidWYgPSAodW5zaWduZWQgbG9uZyAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcCA9IHBibGlzdDsKLQl3aGlsZSAocCkgewotCQllcnJvciA9IHN3YXBfbWFwX3JlYWRfcGFnZShoYW5kbGUsIGJ1Zik7Ci0JCWlmIChlcnJvcikKLQkJCWJyZWFrOwotCQlwID0gdW5wYWNrX29yaWdfYWRkcmVzc2VzKGJ1ZiwgcCk7Ci0JCW4rKzsKLQl9Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7Ci0JaWYgKCFlcnJvcikKLQkJcHJpbnRrKCJkb25lICgldSBwYWdlcyBsb2FkZWQpXG4iLCBuKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWludCBzd3N1c3BfcmVhZChzdHJ1Y3QgcGJlICoqcGJsaXN0X3B0cikKLXsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHBiZSAqcCwgKnBibGlzdDsKLQlzdHJ1Y3Qgc3dhcF9tYXBfaGFuZGxlIGhhbmRsZTsKLQl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7Ci0KLQlpZiAoSVNfRVJSKHJlc3VtZV9iZGV2KSkgewotCQlwcl9kZWJ1Zygic3dzdXNwOiBibG9jayBkZXZpY2Ugbm90IGluaXRpYWxpc2VkXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIocmVzdW1lX2JkZXYpOwotCX0KLQotCWVycm9yID0gZ2V0X3N3YXBfbWFwX3JlYWRlcigmaGFuZGxlLCBzd3N1c3BfaGVhZGVyLmltYWdlKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IHN3YXBfbWFwX3JlYWRfcGFnZSgmaGFuZGxlLCAmc3dzdXNwX2luZm8pOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gY2hlY2tfaGVhZGVyKCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JbnJfcGFnZXMgPSBzd3N1c3BfaW5mby5pbWFnZV9wYWdlczsKLQlwID0gYWxsb2NfcGFnZWRpcihucl9wYWdlcywgR0ZQX0FUT01JQywgMCk7Ci0JaWYgKCFwKQotCQlyZXR1cm4gLUVOT01FTTsKLQllcnJvciA9IGxvYWRfaW1hZ2VfbWV0YWRhdGEocCwgJmhhbmRsZSk7Ci0JaWYgKCFlcnJvcikgewotCQltYXJrX3Vuc2FmZV9wYWdlcyhwKTsKLQkJcGJsaXN0ID0gYWxsb2NfcGFnZWRpcihucl9wYWdlcywgR0ZQX0FUT01JQywgMSk7Ci0JCWlmIChwYmxpc3QpCi0JCQljb3B5X3BhZ2VfYmFja3VwX2xpc3QocGJsaXN0LCBwKTsKLQkJZnJlZV9wYWdlZGlyKHApOwotCQlpZiAoIXBibGlzdCkKLQkJCWVycm9yID0gLUVOT01FTTsKLQotCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbWFnZSBhbmQgcmVhZCB0aGUgZGF0YSBmcm9tIHN3YXAgKi8KLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gYWxsb2NfZGF0YV9wYWdlcyhwYmxpc3QsIEdGUF9BVE9NSUMsIDEpOwotCQlpZiAoIWVycm9yKSB7Ci0JCQlyZWxlYXNlX2VhdGVuX3BhZ2VzKCk7Ci0JCQllcnJvciA9IGxvYWRfaW1hZ2VfZGF0YShwYmxpc3QsICZoYW5kbGUsIG5yX3BhZ2VzKTsKLQkJfQotCQlpZiAoIWVycm9yKQotCQkJKnBibGlzdF9wdHIgPSBwYmxpc3Q7Ci0JfQotCXJlbGVhc2Vfc3dhcF9tYXBfcmVhZGVyKCZoYW5kbGUpOwotCi0JYmxrZGV2X3B1dChyZXN1bWVfYmRldik7Ci0KLQlpZiAoIWVycm9yKQotCQlwcl9kZWJ1Zygic3dzdXNwOiBSZWFkaW5nIHJlc3VtZSBmaWxlIHdhcyBzdWNjZXNzZnVsXG4iKTsKLQllbHNlCi0JCXByX2RlYnVnKCJzd3N1c3A6IEVycm9yICVkIHJlc3VtaW5nXG4iLCBlcnJvcik7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqICAgICAgc3dzdXNwX2NoZWNrIC0gQ2hlY2sgZm9yIHN3c3VzcCBzaWduYXR1cmUgaW4gdGhlIHJlc3VtZSBkZXZpY2UKLSAqLwotCi1pbnQgc3dzdXNwX2NoZWNrKHZvaWQpCi17Ci0JaW50IGVycm9yOwotCi0JcmVzdW1lX2JkZXYgPSBvcGVuX2J5X2Rldm51bShzd3N1c3BfcmVzdW1lX2RldmljZSwgRk1PREVfUkVBRCk7Ci0JaWYgKCFJU19FUlIocmVzdW1lX2JkZXYpKSB7Ci0JCXNldF9ibG9ja3NpemUocmVzdW1lX2JkZXYsIFBBR0VfU0laRSk7Ci0JCW1lbXNldCgmc3dzdXNwX2hlYWRlciwgMCwgc2l6ZW9mKHN3c3VzcF9oZWFkZXIpKTsKLQkJaWYgKChlcnJvciA9IGJpb19yZWFkX3BhZ2UoMCwgJnN3c3VzcF9oZWFkZXIpKSkKLQkJCXJldHVybiBlcnJvcjsKLQkJaWYgKCFtZW1jbXAoU1dTVVNQX1NJRywgc3dzdXNwX2hlYWRlci5zaWcsIDEwKSkgewotCQkJbWVtY3B5KHN3c3VzcF9oZWFkZXIuc2lnLCBzd3N1c3BfaGVhZGVyLm9yaWdfc2lnLCAxMCk7Ci0JCQkvKiBSZXNldCBzd2FwIHNpZ25hdHVyZSBub3cgKi8KLQkJCWVycm9yID0gYmlvX3dyaXRlX3BhZ2UoMCwgJnN3c3VzcF9oZWFkZXIpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKGVycm9yKQotCQkJYmxrZGV2X3B1dChyZXN1bWVfYmRldik7Ci0JCWVsc2UKLQkJCXByX2RlYnVnKCJzd3N1c3A6IFNpZ25hdHVyZSBmb3VuZCwgcmVzdW1pbmdcbiIpOwotCX0gZWxzZSB7Ci0JCWVycm9yID0gUFRSX0VSUihyZXN1bWVfYmRldik7Ci0JfQotCi0JaWYgKGVycm9yKQotCQlwcl9kZWJ1Zygic3dzdXNwOiBFcnJvciAlZCBjaGVjayBmb3IgcmVzdW1lIGZpbGVcbiIsIGVycm9yKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKglzd3N1c3BfY2xvc2UgLSBjbG9zZSBzd2FwIGRldmljZS4KLSAqLwotCi12b2lkIHN3c3VzcF9jbG9zZSh2b2lkKQotewotCWlmIChJU19FUlIocmVzdW1lX2JkZXYpKSB7Ci0JCXByX2RlYnVnKCJzd3N1c3A6IGJsb2NrIGRldmljZSBub3QgaW5pdGlhbGlzZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JYmxrZGV2X3B1dChyZXN1bWVfYmRldik7Ci19CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvdXNlci5jIGIva2VybmVsL3Bvd2VyL3VzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjE1MzlmCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3Bvd2VyL3VzZXIuYwpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIGxpbnV4L2tlcm5lbC9wb3dlci91c2VyLmMKKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIHVzZXIgc3BhY2UgaW50ZXJmYWNlIGZvciBzb2Z0d2FyZSBzdXNwZW5kL3Jlc3VtZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJwb3dlci5oIgorCisjZGVmaW5lIFNOQVBTSE9UX01JTk9SCTIzMQorCitzdGF0aWMgc3RydWN0IHNuYXBzaG90X2RhdGEgeworCXN0cnVjdCBzbmFwc2hvdF9oYW5kbGUgaGFuZGxlOworCWludCBzd2FwOworCXN0cnVjdCBiaXRtYXBfcGFnZSAqYml0bWFwOworCWludCBtb2RlOworCWNoYXIgZnJvemVuOworCWNoYXIgcmVhZHk7Cit9IHNuYXBzaG90X3N0YXRlOworCitzdGF0aWMgYXRvbWljX3QgZGV2aWNlX2F2YWlsYWJsZSA9IEFUT01JQ19JTklUKDEpOworCitzdGF0aWMgaW50IHNuYXBzaG90X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHNuYXBzaG90X2RhdGEgKmRhdGE7CisKKwlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZkZXZpY2VfYXZhaWxhYmxlLCAtMSwgMCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRXUikKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKKwlkYXRhID0gJnNuYXBzaG90X3N0YXRlOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGRhdGE7CisJbWVtc2V0KCZkYXRhLT5oYW5kbGUsIDAsIHNpemVvZihzdHJ1Y3Qgc25hcHNob3RfaGFuZGxlKSk7CisJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JET05MWSkgeworCQlkYXRhLT5zd2FwID0gc3dzdXNwX3Jlc3VtZV9kZXZpY2UgPyBzd2FwX3R5cGVfb2Yoc3dzdXNwX3Jlc3VtZV9kZXZpY2UpIDogLTE7CisJCWRhdGEtPm1vZGUgPSBPX1JET05MWTsKKwl9IGVsc2UgeworCQlkYXRhLT5zd2FwID0gLTE7CisJCWRhdGEtPm1vZGUgPSBPX1dST05MWTsKKwl9CisJZGF0YS0+Yml0bWFwID0gTlVMTDsKKwlkYXRhLT5mcm96ZW4gPSAwOworCWRhdGEtPnJlYWR5ID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuYXBzaG90X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHNuYXBzaG90X2RhdGEgKmRhdGE7CisKKwlzd3N1c3BfZnJlZSgpOworCWRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZnJlZV9hbGxfc3dhcF9wYWdlcyhkYXRhLT5zd2FwLCBkYXRhLT5iaXRtYXApOworCWZyZWVfYml0bWFwKGRhdGEtPmJpdG1hcCk7CisJaWYgKGRhdGEtPmZyb3plbikgeworCQlkb3duKCZwbV9zZW0pOworCQl0aGF3X3Byb2Nlc3NlcygpOworCQllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisJCXVwKCZwbV9zZW0pOworCX0KKwlhdG9taWNfaW5jKCZkZXZpY2VfYXZhaWxhYmxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc25hcHNob3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnApCit7CisJc3RydWN0IHNuYXBzaG90X2RhdGEgKmRhdGE7CisJc3NpemVfdCByZXM7CisKKwlkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXJlcyA9IHNuYXBzaG90X3JlYWRfbmV4dCgmZGF0YS0+aGFuZGxlLCBjb3VudCk7CisJaWYgKHJlcyA+IDApIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGRhdGFfb2YoZGF0YS0+aGFuZGxlKSwgcmVzKSkKKwkJCXJlcyA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCSpvZmZwID0gZGF0YS0+aGFuZGxlLm9mZnNldDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHNzaXplX3Qgc25hcHNob3Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmcCkKK3sKKwlzdHJ1Y3Qgc25hcHNob3RfZGF0YSAqZGF0YTsKKwlzc2l6ZV90IHJlczsKKworCWRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJcmVzID0gc25hcHNob3Rfd3JpdGVfbmV4dCgmZGF0YS0+aGFuZGxlLCBjb3VudCk7CisJaWYgKHJlcyA+IDApIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGFfb2YoZGF0YS0+aGFuZGxlKSwgYnVmLCByZXMpKQorCQkJcmVzID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJKm9mZnAgPSBkYXRhLT5oYW5kbGUub2Zmc2V0OworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNuYXBzaG90X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBzbmFwc2hvdF9kYXRhICpkYXRhOworCWxvZmZfdCBvZmZzZXQsIGF2YWlsOworCisJaWYgKF9JT0NfVFlQRShjbWQpICE9IFNOQVBTSE9UX0lPQ19NQUdJQykKKwkJcmV0dXJuIC1FTk9UVFk7CisJaWYgKF9JT0NfTlIoY21kKSA+IFNOQVBTSE9UX0lPQ19NQVhOUikKKwkJcmV0dXJuIC1FTk9UVFk7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIFNOQVBTSE9UX0ZSRUVaRToKKwkJaWYgKGRhdGEtPmZyb3plbikKKwkJCWJyZWFrOworCQlkb3duKCZwbV9zZW0pOworCQlkaXNhYmxlX25vbmJvb3RfY3B1cygpOworCQlpZiAoZnJlZXplX3Byb2Nlc3NlcygpKSB7CisJCQl0aGF3X3Byb2Nlc3NlcygpOworCQkJZW5hYmxlX25vbmJvb3RfY3B1cygpOworCQkJZXJyb3IgPSAtRUJVU1k7CisJCX0KKwkJdXAoJnBtX3NlbSk7CisJCWlmICghZXJyb3IpCisJCQlkYXRhLT5mcm96ZW4gPSAxOworCQlicmVhazsKKworCWNhc2UgU05BUFNIT1RfVU5GUkVFWkU6CisJCWlmICghZGF0YS0+ZnJvemVuKQorCQkJYnJlYWs7CisJCWRvd24oJnBtX3NlbSk7CisJCXRoYXdfcHJvY2Vzc2VzKCk7CisJCWVuYWJsZV9ub25ib290X2NwdXMoKTsKKwkJdXAoJnBtX3NlbSk7CisJCWRhdGEtPmZyb3plbiA9IDA7CisJCWJyZWFrOworCisJY2FzZSBTTkFQU0hPVF9BVE9NSUNfU05BUFNIT1Q6CisJCWlmIChkYXRhLT5tb2RlICE9IE9fUkRPTkxZIHx8ICFkYXRhLT5mcm96ZW4gIHx8IGRhdGEtPnJlYWR5KSB7CisJCQllcnJvciA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CisJCWRvd24oJnBtX3NlbSk7CisJCS8qIEZyZWUgbWVtb3J5IGJlZm9yZSBzaHV0dGluZyBkb3duIGRldmljZXMuICovCisJCWVycm9yID0gc3dzdXNwX3Nocmlua19tZW1vcnkoKTsKKwkJaWYgKCFlcnJvcikgeworCQkJZXJyb3IgPSBkZXZpY2Vfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CisJCQlpZiAoIWVycm9yKSB7CisJCQkJaW5fc3VzcGVuZCA9IDE7CisJCQkJZXJyb3IgPSBzd3N1c3Bfc3VzcGVuZCgpOworCQkJCWRldmljZV9yZXN1bWUoKTsKKwkJCX0KKwkJfQorCQl1cCgmcG1fc2VtKTsKKwkJaWYgKCFlcnJvcikKKwkJCWVycm9yID0gcHV0X3VzZXIoaW5fc3VzcGVuZCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpOworCQlpZiAoIWVycm9yKQorCQkJZGF0YS0+cmVhZHkgPSAxOworCQlicmVhazsKKworCWNhc2UgU05BUFNIT1RfQVRPTUlDX1JFU1RPUkU6CisJCWlmIChkYXRhLT5tb2RlICE9IE9fV1JPTkxZIHx8ICFkYXRhLT5mcm96ZW4gfHwKKwkJICAgICFzbmFwc2hvdF9pbWFnZV9sb2FkZWQoJmRhdGEtPmhhbmRsZSkpIHsKKwkJCWVycm9yID0gLUVQRVJNOworCQkJYnJlYWs7CisJCX0KKwkJZG93bigmcG1fc2VtKTsKKwkJcG1fcHJlcGFyZV9jb25zb2xlKCk7CisJCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoUE1TR19GUkVFWkUpOworCQlpZiAoIWVycm9yKSB7CisJCQllcnJvciA9IHN3c3VzcF9yZXN1bWUoKTsKKwkJCWRldmljZV9yZXN1bWUoKTsKKwkJfQorCQlwbV9yZXN0b3JlX2NvbnNvbGUoKTsKKwkJdXAoJnBtX3NlbSk7CisJCWJyZWFrOworCisJY2FzZSBTTkFQU0hPVF9GUkVFOgorCQlzd3N1c3BfZnJlZSgpOworCQltZW1zZXQoJmRhdGEtPmhhbmRsZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbmFwc2hvdF9oYW5kbGUpKTsKKwkJZGF0YS0+cmVhZHkgPSAwOworCQlicmVhazsKKworCWNhc2UgU05BUFNIT1RfU0VUX0lNQUdFX1NJWkU6CisJCWltYWdlX3NpemUgPSBhcmc7CisJCWJyZWFrOworCisJY2FzZSBTTkFQU0hPVF9BVkFJTF9TV0FQOgorCQlhdmFpbCA9IGNvdW50X3N3YXBfcGFnZXMoZGF0YS0+c3dhcCwgMSk7CisJCWF2YWlsIDw8PSBQQUdFX1NISUZUOworCQllcnJvciA9IHB1dF91c2VyKGF2YWlsLCAobG9mZl90IF9fdXNlciAqKWFyZyk7CisJCWJyZWFrOworCisJY2FzZSBTTkFQU0hPVF9HRVRfU1dBUF9QQUdFOgorCQlpZiAoZGF0YS0+c3dhcCA8IDAgfHwgZGF0YS0+c3dhcCA+PSBNQVhfU1dBUEZJTEVTKSB7CisJCQllcnJvciA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIWRhdGEtPmJpdG1hcCkgeworCQkJZGF0YS0+Yml0bWFwID0gYWxsb2NfYml0bWFwKGNvdW50X3N3YXBfcGFnZXMoZGF0YS0+c3dhcCwgMCkpOworCQkJaWYgKCFkYXRhLT5iaXRtYXApIHsKKwkJCQllcnJvciA9IC1FTk9NRU07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJb2Zmc2V0ID0gYWxsb2Nfc3dhcF9wYWdlKGRhdGEtPnN3YXAsIGRhdGEtPmJpdG1hcCk7CisJCWlmIChvZmZzZXQpIHsKKwkJCW9mZnNldCA8PD0gUEFHRV9TSElGVDsKKwkJCWVycm9yID0gcHV0X3VzZXIob2Zmc2V0LCAobG9mZl90IF9fdXNlciAqKWFyZyk7CisJCX0gZWxzZSB7CisJCQllcnJvciA9IC1FTk9TUEM7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNOQVBTSE9UX0ZSRUVfU1dBUF9QQUdFUzoKKwkJaWYgKGRhdGEtPnN3YXAgPCAwIHx8IGRhdGEtPnN3YXAgPj0gTUFYX1NXQVBGSUxFUykgeworCQkJZXJyb3IgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwkJZnJlZV9hbGxfc3dhcF9wYWdlcyhkYXRhLT5zd2FwLCBkYXRhLT5iaXRtYXApOworCQlmcmVlX2JpdG1hcChkYXRhLT5iaXRtYXApOworCQlkYXRhLT5iaXRtYXAgPSBOVUxMOworCQlicmVhazsKKworCWNhc2UgU05BUFNIT1RfU0VUX1NXQVBfRklMRToKKwkJaWYgKCFkYXRhLT5iaXRtYXApIHsKKwkJCS8qCisJCQkgKiBVc2VyIHNwYWNlIGVuY29kZXMgZGV2aWNlIHR5cGVzIGFzIHR3by1ieXRlIHZhbHVlcywKKwkJCSAqIHNvIHdlIG5lZWQgdG8gcmVjb2RlIHRoZW0KKwkJCSAqLworCQkJaWYgKG9sZF9kZWNvZGVfZGV2KGFyZykpIHsKKwkJCQlkYXRhLT5zd2FwID0gc3dhcF90eXBlX29mKG9sZF9kZWNvZGVfZGV2KGFyZykpOworCQkJCWlmIChkYXRhLT5zd2FwIDwgMCkKKwkJCQkJZXJyb3IgPSAtRU5PREVWOworCQkJfSBlbHNlIHsKKwkJCQlkYXRhLT5zd2FwID0gLTE7CisJCQkJZXJyb3IgPSAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UgeworCQkJZXJyb3IgPSAtRVBFUk07CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNOQVBTSE9UX1MyUkFNOgorCQlpZiAoIWRhdGEtPmZyb3plbikgeworCQkJZXJyb3IgPSAtRVBFUk07CisJCQlicmVhazsKKwkJfQorCisJCWlmIChkb3duX3RyeWxvY2soJnBtX3NlbSkpIHsKKwkJCWVycm9yID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocG1fb3BzLT5wcmVwYXJlKSB7CisJCQllcnJvciA9IHBtX29wcy0+cHJlcGFyZShQTV9TVVNQRU5EX01FTSk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBPdXRTMzsKKwkJfQorCisJCS8qIFB1dCBkZXZpY2VzIHRvIHNsZWVwICovCisJCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzdXNwZW5kIHNvbWUgZGV2aWNlcy5cbiIpOworCQl9IGVsc2UgeworCQkJLyogRW50ZXIgUzMsIHN5c3RlbSBpcyBhbHJlYWR5IGZyb3plbiAqLworCQkJc3VzcGVuZF9lbnRlcihQTV9TVVNQRU5EX01FTSk7CisKKwkJCS8qIFdha2UgdXAgZGV2aWNlcyAqLworCQkJZGV2aWNlX3Jlc3VtZSgpOworCQl9CisKKwkJaWYgKHBtX29wcy0+ZmluaXNoKQorCQkJcG1fb3BzLT5maW5pc2goUE1fU1VTUEVORF9NRU0pOworCitPdXRTMzoKKwkJdXAoJnBtX3NlbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyb3IgPSAtRU5PVFRZOworCisJfQorCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbmFwc2hvdF9mb3BzID0geworCS5vcGVuID0gc25hcHNob3Rfb3BlbiwKKwkucmVsZWFzZSA9IHNuYXBzaG90X3JlbGVhc2UsCisJLnJlYWQgPSBzbmFwc2hvdF9yZWFkLAorCS53cml0ZSA9IHNuYXBzaG90X3dyaXRlLAorCS5sbHNlZWsgPSBub19sbHNlZWssCisJLmlvY3RsID0gc25hcHNob3RfaW9jdGwsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugc25hcHNob3RfZGV2aWNlID0geworCS5taW5vciA9IFNOQVBTSE9UX01JTk9SLAorCS5uYW1lID0gInNuYXBzaG90IiwKKwkuZm9wcyA9ICZzbmFwc2hvdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc25hcHNob3RfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gbWlzY19yZWdpc3Rlcigmc25hcHNob3RfZGV2aWNlKTsKK307CisKK2RldmljZV9pbml0Y2FsbChzbmFwc2hvdF9kZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggMTNjZWQwZi4uOGNjMTk0MyAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMTIyLDQ0ICsxMjIsNiBAQAogc3RhdGljIGludCBsb2dfYnVmX2xlbiA9IF9fTE9HX0JVRl9MRU47CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb2dnZWRfY2hhcnM7IC8qIE51bWJlciBvZiBjaGFycyBwcm9kdWNlZCBzaW5jZSBsYXN0IHJlYWQrY2xlYXIgb3BlcmF0aW9uICovCiAKLS8qCi0gKglTZXR1cCBhIGxpc3Qgb2YgY29uc29sZXMuIENhbGxlZCBmcm9tIGluaXQvbWFpbi5jCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGNvbnNvbGVfc2V0dXAoY2hhciAqc3RyKQotewotCWNoYXIgbmFtZVtzaXplb2YoY29uc29sZV9jbWRsaW5lWzBdLm5hbWUpXTsKLQljaGFyICpzLCAqb3B0aW9uczsKLQlpbnQgaWR4OwotCi0JLyoKLQkgKglEZWNvZGUgc3RyIGludG8gbmFtZSwgaW5kZXgsIG9wdGlvbnMuCi0JICovCi0JaWYgKHN0clswXSA+PSAnMCcgJiYgc3RyWzBdIDw9ICc5JykgewotCQlzdHJjcHkobmFtZSwgInR0eVMiKTsKLQkJc3RybmNweShuYW1lICsgNCwgc3RyLCBzaXplb2YobmFtZSkgLSA1KTsKLQl9IGVsc2UKLQkJc3RybmNweShuYW1lLCBzdHIsIHNpemVvZihuYW1lKSAtIDEpOwotCW5hbWVbc2l6ZW9mKG5hbWUpIC0gMV0gPSAwOwotCWlmICgob3B0aW9ucyA9IHN0cmNocihzdHIsICcsJykpICE9IE5VTEwpCi0JCSoob3B0aW9ucysrKSA9IDA7Ci0jaWZkZWYgX19zcGFyY19fCi0JaWYgKCFzdHJjbXAoc3RyLCAidHR5YSIpKQotCQlzdHJjcHkobmFtZSwgInR0eVMwIik7Ci0JaWYgKCFzdHJjbXAoc3RyLCAidHR5YiIpKQotCQlzdHJjcHkobmFtZSwgInR0eVMxIik7Ci0jZW5kaWYKLQlmb3IgKHMgPSBuYW1lOyAqczsgcysrKQotCQlpZiAoKCpzID49ICcwJyAmJiAqcyA8PSAnOScpIHx8ICpzID09ICcsJykKLQkJCWJyZWFrOwotCWlkeCA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDEwKTsKLQkqcyA9IDA7Ci0KLQlhZGRfcHJlZmVycmVkX2NvbnNvbGUobmFtZSwgaWR4LCBvcHRpb25zKTsKLQlyZXR1cm4gMTsKLX0KLQotX19zZXR1cCgiY29uc29sZT0iLCBjb25zb2xlX3NldHVwKTsKLQogc3RhdGljIGludCBfX2luaXQgbG9nX2J1Zl9sZW5fc2V0dXAoY2hhciAqc3RyKQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG1lbXBhcnNlKHN0ciwgJnN0cik7CkBAIC02NTksNiArNjIxLDQ0IEBACiAKICNlbmRpZgogCisvKgorICogU2V0IHVwIGEgbGlzdCBvZiBjb25zb2xlcy4gIENhbGxlZCBmcm9tIGluaXQvbWFpbi5jCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNvbnNvbGVfc2V0dXAoY2hhciAqc3RyKQoreworCWNoYXIgbmFtZVtzaXplb2YoY29uc29sZV9jbWRsaW5lWzBdLm5hbWUpXTsKKwljaGFyICpzLCAqb3B0aW9uczsKKwlpbnQgaWR4OworCisJLyoKKwkgKiBEZWNvZGUgc3RyIGludG8gbmFtZSwgaW5kZXgsIG9wdGlvbnMuCisJICovCisJaWYgKHN0clswXSA+PSAnMCcgJiYgc3RyWzBdIDw9ICc5JykgeworCQlzdHJjcHkobmFtZSwgInR0eVMiKTsKKwkJc3RybmNweShuYW1lICsgNCwgc3RyLCBzaXplb2YobmFtZSkgLSA1KTsKKwl9IGVsc2UgeworCQlzdHJuY3B5KG5hbWUsIHN0ciwgc2l6ZW9mKG5hbWUpIC0gMSk7CisJfQorCW5hbWVbc2l6ZW9mKG5hbWUpIC0gMV0gPSAwOworCWlmICgob3B0aW9ucyA9IHN0cmNocihzdHIsICcsJykpICE9IE5VTEwpCisJCSoob3B0aW9ucysrKSA9IDA7CisjaWZkZWYgX19zcGFyY19fCisJaWYgKCFzdHJjbXAoc3RyLCAidHR5YSIpKQorCQlzdHJjcHkobmFtZSwgInR0eVMwIik7CisJaWYgKCFzdHJjbXAoc3RyLCAidHR5YiIpKQorCQlzdHJjcHkobmFtZSwgInR0eVMxIik7CisjZW5kaWYKKwlmb3IgKHMgPSBuYW1lOyAqczsgcysrKQorCQlpZiAoKCpzID49ICcwJyAmJiAqcyA8PSAnOScpIHx8ICpzID09ICcsJykKKwkJCWJyZWFrOworCWlkeCA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDEwKTsKKwkqcyA9IDA7CisKKwlhZGRfcHJlZmVycmVkX2NvbnNvbGUobmFtZSwgaWR4LCBvcHRpb25zKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImNvbnNvbGU9IiwgY29uc29sZV9zZXR1cCk7CisKIC8qKgogICogYWRkX3ByZWZlcnJlZF9jb25zb2xlIC0gYWRkIGEgZGV2aWNlIHRvIHRoZSBsaXN0IG9mIHByZWZlcnJlZCBjb25zb2xlcy4KICAqIEBuYW1lOiBkZXZpY2UgbmFtZQpkaWZmIC0tZ2l0IGEva2VybmVsL3Byb2ZpbGUuYyBiL2tlcm5lbC9wcm9maWxlLmMKaW5kZXggZjg5MjQ4ZS4uYWQ4MWY3OSAxMDA2NDQKLS0tIGEva2VybmVsL3Byb2ZpbGUuYworKysgYi9rZXJuZWwvcHJvZmlsZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIApAQCAtNDQsNyArNDUsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHJvZmlsZV9oaXQgKlsyXSwgY3B1X3Byb2ZpbGVfaGl0cyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjcHVfcHJvZmlsZV9mbGlwKTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKHByb2ZpbGVfZmxpcF9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHByb2ZpbGVfZmxpcF9tdXRleCk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBwcm9maWxlX3NldHVwKGNoYXIgKiBzdHIpCkBAIC0yNDMsNyArMjQ0LDcgQEAKIHsKIAlpbnQgaSwgaiwgY3B1OwogCi0JZG93bigmcHJvZmlsZV9mbGlwX211dGV4KTsKKwltdXRleF9sb2NrKCZwcm9maWxlX2ZsaXBfbXV0ZXgpOwogCWogPSBwZXJfY3B1KGNwdV9wcm9maWxlX2ZsaXAsIGdldF9jcHUoKSk7CiAJcHV0X2NwdSgpOwogCW9uX2VhY2hfY3B1KF9fcHJvZmlsZV9mbGlwX2J1ZmZlcnMsIE5VTEwsIDAsIDEpOwpAQCAtMjU5LDE0ICsyNjAsMTQgQEAKIAkJCWhpdHNbaV0uaGl0cyA9IGhpdHNbaV0ucGMgPSAwOwogCQl9CiAJfQotCXVwKCZwcm9maWxlX2ZsaXBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcHJvZmlsZV9mbGlwX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgcHJvZmlsZV9kaXNjYXJkX2ZsaXBfYnVmZmVycyh2b2lkKQogewogCWludCBpLCBjcHU7CiAKLQlkb3duKCZwcm9maWxlX2ZsaXBfbXV0ZXgpOworCW11dGV4X2xvY2soJnByb2ZpbGVfZmxpcF9tdXRleCk7CiAJaSA9IHBlcl9jcHUoY3B1X3Byb2ZpbGVfZmxpcCwgZ2V0X2NwdSgpKTsKIAlwdXRfY3B1KCk7CiAJb25fZWFjaF9jcHUoX19wcm9maWxlX2ZsaXBfYnVmZmVycywgTlVMTCwgMCwgMSk7CkBAIC0yNzQsNyArMjc1LDcgQEAKIAkJc3RydWN0IHByb2ZpbGVfaGl0ICpoaXRzID0gcGVyX2NwdShjcHVfcHJvZmlsZV9oaXRzLCBjcHUpW2ldOwogCQltZW1zZXQoaGl0cywgMCwgTlJfUFJPRklMRV9ISVQqc2l6ZW9mKHN0cnVjdCBwcm9maWxlX2hpdCkpOwogCX0KLQl1cCgmcHJvZmlsZV9mbGlwX211dGV4KTsKKwltdXRleF91bmxvY2soJnByb2ZpbGVfZmxpcF9tdXRleCk7CiB9CiAKIHZvaWQgcHJvZmlsZV9oaXQoaW50IHR5cGUsIHZvaWQgKl9fcGMpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IDBjZjgxNDYuLjEzNDU4YmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC00NywxNSArNDcsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogLyogRGVmaW5pdGlvbiBmb3IgcmN1cGRhdGUgY29udHJvbCBibG9jay4gKi8KLXN0cnVjdCByY3VfY3RybGJsayByY3VfY3RybGJsayA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2N0cmxibGsgPSB7CiAJLmN1ciA9IC0zMDAsCiAJLmNvbXBsZXRlZCA9IC0zMDAsCiAJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCiAJLmNwdW1hc2sgPSBDUFVfTUFTS19OT05FLAogfTsKLXN0cnVjdCByY3VfY3RybGJsayByY3VfYmhfY3RybGJsayA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmN1X2N0cmxibGsgcmN1X2JoX2N0cmxibGsgPSB7CiAJLmN1ciA9IC0zMDAsCiAJLmNvbXBsZXRlZCA9IC0zMDAsCiAJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCkBAIC02Nyw3ICs2OCw0MyBAQAogCiAvKiBGYWtlIGluaXRpYWxpemF0aW9uIHJlcXVpcmVkIGJ5IGNvbXBpbGVyICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRhc2tsZXRfc3RydWN0LCByY3VfdGFza2xldCkgPSB7TlVMTH07Ci1zdGF0aWMgaW50IG1heGJhdGNoID0gMTAwMDA7CitzdGF0aWMgaW50IGJsaW1pdCA9IDEwOworc3RhdGljIGludCBxaGltYXJrID0gMTAwMDA7CitzdGF0aWMgaW50IHFsb3dtYXJrID0gMTAwOworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbnQgcnNpbnRlcnZhbCA9IDEwMDA7CisjZW5kaWYKKworc3RhdGljIGF0b21pY190IHJjdV9iYXJyaWVyX2NwdV9jb3VudDsKK3N0YXRpYyBERUZJTkVfTVVURVgocmN1X2JhcnJpZXJfbXV0ZXgpOworc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIHJjdV9iYXJyaWVyX2NvbXBsZXRpb247CisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9kYXRhICpyZHAsCisJCQlzdHJ1Y3QgcmN1X2N0cmxibGsgKnJjcCkKK3sKKwlpbnQgY3B1OworCWNwdW1hc2tfdCBjcHVtYXNrOworCXNldF9uZWVkX3Jlc2NoZWQoKTsKKwlpZiAodW5saWtlbHkocmRwLT5xbGVuIC0gcmRwLT5sYXN0X3JzX3FsZW4gPiByc2ludGVydmFsKSkgeworCQlyZHAtPmxhc3RfcnNfcWxlbiA9IHJkcC0+cWxlbjsKKwkJLyoKKwkJICogRG9uJ3Qgc2VuZCBJUEkgdG8gaXRzZWxmLiBXaXRoIGlycXMgZGlzYWJsZWQsCisJCSAqIHJkcC0+Y3B1IGlzIHRoZSBjdXJyZW50IGNwdS4KKwkJICovCisJCWNwdW1hc2sgPSByY3AtPmNwdW1hc2s7CisJCWNwdV9jbGVhcihyZHAtPmNwdSwgY3B1bWFzayk7CisJCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgY3B1bWFzaykKKwkJCXNtcF9zZW5kX3Jlc2NoZWR1bGUoY3B1KTsKKwl9Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGZvcmNlX3F1aWVzY2VudF9zdGF0ZShzdHJ1Y3QgcmN1X2RhdGEgKnJkcCwKKwkJCXN0cnVjdCByY3VfY3RybGJsayAqcmNwKQoreworCXNldF9uZWVkX3Jlc2NoZWQoKTsKK30KKyNlbmRpZgogCiAvKioKICAqIGNhbGxfcmN1IC0gUXVldWUgYW4gUkNVIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgpAQCAtOTIsMTcgKzEyOSwxMyBAQAogCXJkcCA9ICZfX2dldF9jcHVfdmFyKHJjdV9kYXRhKTsKIAkqcmRwLT5ueHR0YWlsID0gaGVhZDsKIAlyZHAtPm54dHRhaWwgPSAmaGVhZC0+bmV4dDsKLQotCWlmICh1bmxpa2VseSgrK3JkcC0+Y291bnQgPiAxMDAwMCkpCi0JCXNldF9uZWVkX3Jlc2NoZWQoKTsKLQorCWlmICh1bmxpa2VseSgrK3JkcC0+cWxlbiA+IHFoaW1hcmspKSB7CisJCXJkcC0+YmxpbWl0ID0gSU5UX01BWDsKKwkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJkcCwgJnJjdV9jdHJsYmxrKTsKKwl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgYXRvbWljX3QgcmN1X2JhcnJpZXJfY3B1X2NvdW50Owotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgcmN1X2JhcnJpZXJfc2VtYTsKLXN0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiByY3VfYmFycmllcl9jb21wbGV0aW9uOwotCiAvKioKICAqIGNhbGxfcmN1X2JoIC0gUXVldWUgYW4gUkNVIGZvciBpbnZvY2F0aW9uIGFmdGVyIGEgcXVpY2tlciBncmFjZSBwZXJpb2QuCiAgKiBAaGVhZDogc3RydWN0dXJlIHRvIGJlIHVzZWQgZm9yIHF1ZXVlaW5nIHRoZSBSQ1UgdXBkYXRlcy4KQEAgLTEzMSwxMiArMTY0LDEyIEBACiAJcmRwID0gJl9fZ2V0X2NwdV92YXIocmN1X2JoX2RhdGEpOwogCSpyZHAtPm54dHRhaWwgPSBoZWFkOwogCXJkcC0+bnh0dGFpbCA9ICZoZWFkLT5uZXh0OwotCXJkcC0+Y291bnQrKzsKLS8qCi0gKiAgU2hvdWxkIHdlIGRpcmVjdGx5IGNhbGwgcmN1X2RvX2JhdGNoKCkgaGVyZSA/Ci0gKiAgaWYgKHVubGlrZWx5KHJkcC0+Y291bnQgPiAxMDAwMCkpCi0gKiAgICAgIHJjdV9kb19iYXRjaChyZHApOwotICovCisKKwlpZiAodW5saWtlbHkoKytyZHAtPnFsZW4gPiBxaGltYXJrKSkgeworCQlyZHAtPmJsaW1pdCA9IElOVF9NQVg7CisJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyZHAsICZyY3VfYmhfY3RybGJsayk7CisJfQorCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0xNzUsMTMgKzIwOCwxMyBAQAogdm9pZCByY3VfYmFycmllcih2b2lkKQogewogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7Ci0JLyogVGFrZSBjcHVjb250cm9sIHNlbWFwaG9yZSB0byBwcm90ZWN0IGFnYWluc3QgQ1BVIGhvdHBsdWcgKi8KLQlkb3duKCZyY3VfYmFycmllcl9zZW1hKTsKKwkvKiBUYWtlIGNwdWNvbnRyb2wgbXV0ZXggdG8gcHJvdGVjdCBhZ2FpbnN0IENQVSBob3RwbHVnICovCisJbXV0ZXhfbG9jaygmcmN1X2JhcnJpZXJfbXV0ZXgpOwogCWluaXRfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CiAJYXRvbWljX3NldCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50LCAwKTsKIAlvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCBOVUxMLCAwLCAxKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKLQl1cCgmcmN1X2JhcnJpZXJfc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7CiAKQEAgLTE5OSwxMCArMjMyLDEyIEBACiAJCW5leHQgPSByZHAtPmRvbmVsaXN0ID0gbGlzdC0+bmV4dDsKIAkJbGlzdC0+ZnVuYyhsaXN0KTsKIAkJbGlzdCA9IG5leHQ7Ci0JCXJkcC0+Y291bnQtLTsKLQkJaWYgKCsrY291bnQgPj0gbWF4YmF0Y2gpCisJCXJkcC0+cWxlbi0tOworCQlpZiAoKytjb3VudCA+PSByZHAtPmJsaW1pdCkKIAkJCWJyZWFrOwogCX0KKwlpZiAocmRwLT5ibGltaXQgPT0gSU5UX01BWCAmJiByZHAtPnFsZW4gPD0gcWxvd21hcmspCisJCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwogCWlmICghcmRwLT5kb25lbGlzdCkKIAkJcmRwLT5kb25ldGFpbCA9ICZyZHAtPmRvbmVsaXN0OwogCWVsc2UKQEAgLTM4MSw4ICs0MTYsOCBAQAogCQlyZHAtPmN1cnRhaWwgPSAmcmRwLT5jdXJsaXN0OwogCX0KIAotCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJaWYgKHJkcC0+bnh0bGlzdCAmJiAhcmRwLT5jdXJsaXN0KSB7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCXJkcC0+Y3VybGlzdCA9IHJkcC0+bnh0bGlzdDsKIAkJcmRwLT5jdXJ0YWlsID0gcmRwLT5ueHR0YWlsOwogCQlyZHAtPm54dGxpc3QgPSBOVUxMOwpAQCAtNDA3LDkgKzQ0Miw4IEBACiAJCQlyY3Vfc3RhcnRfYmF0Y2gocmNwKTsKIAkJCXNwaW5fdW5sb2NrKCZyY3AtPmxvY2spOwogCQl9Ci0JfSBlbHNlIHsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCX0KKwogCXJjdV9jaGVja19xdWllc2NlbnRfc3RhdGUocmNwLCByZHApOwogCWlmIChyZHAtPmRvbmVsaXN0KQogCQlyY3VfZG9fYmF0Y2gocmRwKTsKQEAgLTQ3Myw2ICs1MDcsNyBAQAogCXJkcC0+cXVpZXNjYmF0Y2ggPSByY3AtPmNvbXBsZXRlZDsKIAlyZHAtPnFzX3BlbmRpbmcgPSAwOwogCXJkcC0+Y3B1ID0gY3B1OworCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcmN1X29ubGluZV9jcHUoaW50IGNwdSkKQEAgLTUxNCw3ICs1NDksNiBAQAogICovCiB2b2lkIF9faW5pdCByY3VfaW5pdCh2b2lkKQogewotCXNlbWFfaW5pdCgmcmN1X2JhcnJpZXJfc2VtYSwgMSk7CiAJcmN1X2NwdV9ub3RpZnkoJnJjdV9uYiwgQ1BVX1VQX1BSRVBBUkUsCiAJCQkodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJLyogUmVnaXN0ZXIgbm90aWZpZXIgZm9yIG5vbi1ib290IENQVXMgKi8KQEAgLTU2Nyw5ICs2MDEsMTQgQEAKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAotbW9kdWxlX3BhcmFtKG1heGJhdGNoLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGJsaW1pdCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShxaGltYXJrLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHFsb3dtYXJrLCBpbnQsIDApOworI2lmZGVmIENPTkZJR19TTVAKK21vZHVsZV9wYXJhbShyc2ludGVydmFsLCBpbnQsIDApOworI2VuZGlmCiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmF0Y2hlc19jb21wbGV0ZWQpOwotRVhQT1JUX1NZTUJPTChjYWxsX3JjdSk7ICAvKiBXQVJOSU5HOiBHUEwtb25seSBpbiBBcHJpbCAyMDA2LiAqLwotRVhQT1JUX1NZTUJPTChjYWxsX3JjdV9iaCk7ICAvKiBXQVJOSU5HOiBHUEwtb25seSBpbiBBcHJpbCAyMDA2LiAqLworRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFKGNhbGxfcmN1KTsJLyogV0FSTklORzogR1BMLW9ubHkgaW4gQXByaWwgMjAwNi4gKi8KK0VYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRShjYWxsX3JjdV9iaCk7CS8qIFdBUk5JTkc6IEdQTC1vbmx5IGluIEFwcmlsIDIwMDYuICovCiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpOwotRVhQT1JUX1NZTUJPTChzeW5jaHJvbml6ZV9rZXJuZWwpOyAgLyogV0FSTklORzogR1BMLW9ubHkgaW4gQXByaWwgMjAwNi4gKi8KK0VYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRShzeW5jaHJvbml6ZV9rZXJuZWwpOyAvKiBXQVJOSU5HOiBHUEwtb25seSBpbiBBcHJpbCAyMDA2LiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggNzcxMjkxMi4uYjRiMzYyYiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC01NCwxNSArNTQsMTUgQEAKIHN0YXRpYyBpbnQgdGVzdF9ub19pZGxlX2h6OwkvKiBUZXN0IFJDVSdzIHN1cHBvcnQgZm9yIHRpY2tsZXNzIGlkbGUgQ1BVcy4gKi8KIHN0YXRpYyBpbnQgc2h1ZmZsZV9pbnRlcnZhbCA9IDU7IC8qIEludGVydmFsIGJldHdlZW4gc2h1ZmZsZXMgKGluIHNlYykqLwogCi1NT0RVTEVfUEFSTShucmVhZGVycywgImkiKTsKK21vZHVsZV9wYXJhbShucmVhZGVycywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobnJlYWRlcnMsICJOdW1iZXIgb2YgUkNVIHJlYWRlciB0aHJlYWRzIik7Ci1NT0RVTEVfUEFSTShzdGF0X2ludGVydmFsLCAiaSIpOworbW9kdWxlX3BhcmFtKHN0YXRfaW50ZXJ2YWwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHN0YXRfaW50ZXJ2YWwsICJOdW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHN0YXRzIHByaW50aygpcyIpOwotTU9EVUxFX1BBUk0odmVyYm9zZSwgImkiKTsKK21vZHVsZV9wYXJhbSh2ZXJib3NlLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgIkVuYWJsZSB2ZXJib3NlIGRlYnVnZ2luZyBwcmludGsoKXMiKTsKLU1PRFVMRV9QQVJNKHRlc3Rfbm9faWRsZV9oeiwgImkiKTsKK21vZHVsZV9wYXJhbSh0ZXN0X25vX2lkbGVfaHosIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0ZXN0X25vX2lkbGVfaHosICJUZXN0IHN1cHBvcnQgZm9yIHRpY2tsZXNzIGlkbGUgQ1BVcyIpOwotTU9EVUxFX1BBUk0oc2h1ZmZsZV9pbnRlcnZhbCwgImkiKTsKK21vZHVsZV9wYXJhbShzaHVmZmxlX2ludGVydmFsLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzaHVmZmxlX2ludGVydmFsLCAiTnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBzaHVmZmxlcyIpOwogI2RlZmluZSBUT1JUVVJFX0ZMQUcgInJjdXRvcnR1cmU6ICIKICNkZWZpbmUgUFJJTlRLX1NUUklORyhzKSBcCkBAIC00NDEsNiArNDQxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKGNoYXIgKnRhZykKK3sKKwlwcmludGsoS0VSTl9BTEVSVCBUT1JUVVJFX0ZMQUcgIi0tLSAlczogbnJlYWRlcnM9JWQgIgorCQkic3RhdF9pbnRlcnZhbD0lZCB2ZXJib3NlPSVkIHRlc3Rfbm9faWRsZV9oej0lZCAiCisJCSJzaHVmZmxlX2ludGVydmFsID0gJWRcbiIsCisJCXRhZywgbnJlYWxyZWFkZXJzLCBzdGF0X2ludGVydmFsLCB2ZXJib3NlLCB0ZXN0X25vX2lkbGVfaHosCisJCXNodWZmbGVfaW50ZXJ2YWwpOworfQorCiBzdGF0aWMgdm9pZAogcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKQogewpAQCAtNDgzLDkgKzQ5MywxMCBAQAogCXJjdV9iYXJyaWVyKCk7CiAKIAlyY3VfdG9ydHVyZV9zdGF0c19wcmludCgpOyAgLyogLUFmdGVyLSB0aGUgc3RhdHMgdGhyZWFkIGlzIHN0b3BwZWQhICovCi0JcHJpbnRrKEtFUk5fQUxFUlQgVE9SVFVSRV9GTEFHCi0JICAgICAgICItLS0gRW5kIG9mIHRlc3Q6ICVzXG4iLAotCSAgICAgICBhdG9taWNfcmVhZCgmbl9yY3VfdG9ydHVyZV9lcnJvcikgPT0gMCA/ICJTVUNDRVNTIiA6ICJGQUlMVVJFIik7CisJaWYgKGF0b21pY19yZWFkKCZuX3JjdV90b3J0dXJlX2Vycm9yKSkKKwkJcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKCJFbmQgb2YgdGVzdDogRkFJTFVSRSIpOworCWVsc2UKKwkJcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKCJFbmQgb2YgdGVzdDogU1VDQ0VTUyIpOwogfQogCiBzdGF0aWMgaW50CkBAIC01MDEsMTEgKzUxMiw3IEBACiAJCW5yZWFscmVhZGVycyA9IG5yZWFkZXJzOwogCWVsc2UKIAkJbnJlYWxyZWFkZXJzID0gMiAqIG51bV9vbmxpbmVfY3B1cygpOwotCXByaW50ayhLRVJOX0FMRVJUIFRPUlRVUkVfRkxBRyAiLS0tIFN0YXJ0IG9mIHRlc3Q6IG5yZWFkZXJzPSVkICIKLQkJInN0YXRfaW50ZXJ2YWw9JWQgdmVyYm9zZT0lZCB0ZXN0X25vX2lkbGVfaHo9JWQgIgotCQkic2h1ZmZsZV9pbnRlcnZhbCA9ICVkXG4iLAotCQlucmVhbHJlYWRlcnMsIHN0YXRfaW50ZXJ2YWwsIHZlcmJvc2UsIHRlc3Rfbm9faWRsZV9oeiwKLQkJc2h1ZmZsZV9pbnRlcnZhbCk7CisJcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKCJTdGFydCBvZiB0ZXN0Iik7CiAJZnVsbHN0b3AgPSAwOwogCiAJLyogU2V0IHVwIHRoZSBmcmVlbGlzdC4gKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzNDVlNwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC0wLDAgKzEsMTAxMiBAQAorLyoKKyAqIFB1YmxpYyBBUEkgYW5kIGNvbW1vbiBjb2RlIGZvciBrZXJuZWwtPnVzZXJzcGFjZSByZWxheSBmaWxlIHN1cHBvcnQuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcmVsYXlmcy50eHQgZm9yIGFuIG92ZXJ2aWV3IG9mIHJlbGF5ZnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgLSBUb20gWmFudXNzaSAoemFudXNzaUB1cy5pYm0uY29tKSwgSUJNIENvcnAKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA1IC0gS2FyaW0gWWFnaG1vdXIgKGthcmltQG9wZXJzeXMuY29tKQorICoKKyAqIE1vdmVkIHRvIGtlcm5lbC9yZWxheS5jIGJ5IFBhdWwgTXVuZHQsIDIwMDYuCisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisvKgorICogY2xvc2UoKSB2bV9vcCBpbXBsZW1lbnRhdGlvbiBmb3IgcmVsYXkgZmlsZSBtYXBwaW5nLgorICovCitzdGF0aWMgdm9pZCByZWxheV9maWxlX21tYXBfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJYnVmLT5jaGFuLT5jYi0+YnVmX3VubWFwcGVkKGJ1Ziwgdm1hLT52bV9maWxlKTsKK30KKworLyoKKyAqIG5vcGFnZSgpIHZtX29wIGltcGxlbWVudGF0aW9uIGZvciByZWxheSBmaWxlIG1hcHBpbmcuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqcmVsYXlfYnVmX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkgICAgIGludCAqdHlwZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OworCisJaWYgKGFkZHJlc3MgPiB2bWEtPnZtX2VuZCkKKwkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7IC8qIERpc2FsbG93IG1yZW1hcCAqLworCWlmICghYnVmKQorCQlyZXR1cm4gTk9QQUdFX09PTTsKKworCXBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoYnVmLT5zdGFydCArIG9mZnNldCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTk9QQUdFX09PTTsKKwlnZXRfcGFnZShwYWdlKTsKKworCWlmICh0eXBlKQorCQkqdHlwZSA9IFZNX0ZBVUxUX01JTk9SOworCisJcmV0dXJuIHBhZ2U7Cit9CisKKy8qCisgKiB2bV9vcHMgZm9yIHJlbGF5IGZpbGUgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcmVsYXlfZmlsZV9tbWFwX29wcyA9IHsKKwkubm9wYWdlID0gcmVsYXlfYnVmX25vcGFnZSwKKwkuY2xvc2UgPSByZWxheV9maWxlX21tYXBfY2xvc2UsCit9OworCisvKioKKyAqCXJlbGF5X21tYXBfYnVmOiAtIG1tYXAgY2hhbm5lbCBidWZmZXIgdG8gcHJvY2VzcyBhZGRyZXNzIHNwYWNlCisgKglAYnVmOiByZWxheSBjaGFubmVsIGJ1ZmZlcgorICoJQHZtYTogdm1fYXJlYV9zdHJ1Y3QgZGVzY3JpYmluZyBtZW1vcnkgdG8gYmUgbWFwcGVkCisgKgorICoJUmV0dXJucyAwIGlmIG9rLCBuZWdhdGl2ZSBvbiBlcnJvcgorICoKKyAqCUNhbGxlciBzaG91bGQgYWxyZWFkeSBoYXZlIGdyYWJiZWQgbW1hcF9zZW0uCisgKi8KK2ludCByZWxheV9tbWFwX2J1ZihzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCXN0cnVjdCBmaWxlICpmaWxwID0gdm1hLT52bV9maWxlOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRUJBREY7CisKKwlpZiAobGVuZ3RoICE9ICh1bnNpZ25lZCBsb25nKWJ1Zi0+Y2hhbi0+YWxsb2Nfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2bWEtPnZtX29wcyA9ICZyZWxheV9maWxlX21tYXBfb3BzOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gYnVmOworCWJ1Zi0+Y2hhbi0+Y2ItPmJ1Zl9tYXBwZWQoYnVmLCBmaWxwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqCXJlbGF5X2FsbG9jX2J1ZiAtIGFsbG9jYXRlIGEgY2hhbm5lbCBidWZmZXIKKyAqCUBidWY6IHRoZSBidWZmZXIgc3RydWN0CisgKglAc2l6ZTogdG90YWwgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKgorICoJUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHJlc3VsdGluZyBidWZmZXIsIE5VTEwgaWYgdW5zdWNjZXNzZnVsLiBUaGUKKyAqCXBhc3NlZCBpbiBzaXplIHdpbGwgZ2V0IHBhZ2UgYWxpZ25lZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4KKyAqLworc3RhdGljIHZvaWQgKnJlbGF5X2FsbG9jX2J1ZihzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHNpemVfdCAqc2l6ZSkKK3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgaW50IGksIGosIG5fcGFnZXM7CisKKwkqc2l6ZSA9IFBBR0VfQUxJR04oKnNpemUpOworCW5fcGFnZXMgPSAqc2l6ZSA+PiBQQUdFX1NISUZUOworCisJYnVmLT5wYWdlX2FycmF5ID0ga2NhbGxvYyhuX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICghYnVmLT5wYWdlX2FycmF5KQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBuX3BhZ2VzOyBpKyspIHsKKwkJYnVmLT5wYWdlX2FycmF5W2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKHVubGlrZWx5KCFidWYtPnBhZ2VfYXJyYXlbaV0pKQorCQkJZ290byBkZXBvcHVsYXRlOworCX0KKwltZW0gPSB2bWFwKGJ1Zi0+cGFnZV9hcnJheSwgbl9wYWdlcywgVk1fTUFQLCBQQUdFX0tFUk5FTCk7CisJaWYgKCFtZW0pCisJCWdvdG8gZGVwb3B1bGF0ZTsKKworCW1lbXNldChtZW0sIDAsICpzaXplKTsKKwlidWYtPnBhZ2VfY291bnQgPSBuX3BhZ2VzOworCXJldHVybiBtZW07CisKK2RlcG9wdWxhdGU6CisJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJX19mcmVlX3BhZ2UoYnVmLT5wYWdlX2FycmF5W2pdKTsKKwlrZnJlZShidWYtPnBhZ2VfYXJyYXkpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqCXJlbGF5X2NyZWF0ZV9idWYgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNoYW5uZWwgYnVmZmVyCisgKglAYWxsb2Nfc2l6ZTogc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGFsbG9jYXRlCisgKglAbl9zdWJidWZzOiBudW1iZXIgb2Ygc3ViLWJ1ZmZlcnMgaW4gdGhlIGNoYW5uZWwKKyAqCisgKglSZXR1cm5zIGNoYW5uZWwgYnVmZmVyIGlmIHN1Y2Nlc3NmdWwsIE5VTEwgb3RoZXJ3aXNlCisgKi8KK3N0cnVjdCByY2hhbl9idWYgKnJlbGF5X2NyZWF0ZV9idWYoc3RydWN0IHJjaGFuICpjaGFuKQoreworCXN0cnVjdCByY2hhbl9idWYgKmJ1ZiA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByY2hhbl9idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisKKwlidWYtPnBhZGRpbmcgPSBrbWFsbG9jKGNoYW4tPm5fc3ViYnVmcyAqIHNpemVvZihzaXplX3QgKiksIEdGUF9LRVJORUwpOworCWlmICghYnVmLT5wYWRkaW5nKQorCQlnb3RvIGZyZWVfYnVmOworCisJYnVmLT5zdGFydCA9IHJlbGF5X2FsbG9jX2J1ZihidWYsICZjaGFuLT5hbGxvY19zaXplKTsKKwlpZiAoIWJ1Zi0+c3RhcnQpCisJCWdvdG8gZnJlZV9idWY7CisKKwlidWYtPmNoYW4gPSBjaGFuOworCWtyZWZfZ2V0KCZidWYtPmNoYW4tPmtyZWYpOworCXJldHVybiBidWY7CisKK2ZyZWVfYnVmOgorCWtmcmVlKGJ1Zi0+cGFkZGluZyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKglyZWxheV9kZXN0cm95X2NoYW5uZWwgLSBmcmVlIHRoZSBjaGFubmVsIHN0cnVjdAorICoKKyAqCVNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIGtyZWZfcHV0KCkuCisgKi8KK3ZvaWQgcmVsYXlfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCByY2hhbiAqY2hhbiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmNoYW4sIGtyZWYpOworCWtmcmVlKGNoYW4pOworfQorCisvKioKKyAqCXJlbGF5X2Rlc3Ryb3lfYnVmIC0gZGVzdHJveSBhbiByY2hhbl9idWYgc3RydWN0IGFuZCBhc3NvY2lhdGVkIGJ1ZmZlcgorICoJQGJ1ZjogdGhlIGJ1ZmZlciBzdHJ1Y3QKKyAqLwordm9pZCByZWxheV9kZXN0cm95X2J1ZihzdHJ1Y3QgcmNoYW5fYnVmICpidWYpCit7CisJc3RydWN0IHJjaGFuICpjaGFuID0gYnVmLT5jaGFuOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGxpa2VseShidWYtPnN0YXJ0KSkgeworCQl2dW5tYXAoYnVmLT5zdGFydCk7CisJCWZvciAoaSA9IDA7IGkgPCBidWYtPnBhZ2VfY291bnQ7IGkrKykKKwkJCV9fZnJlZV9wYWdlKGJ1Zi0+cGFnZV9hcnJheVtpXSk7CisJCWtmcmVlKGJ1Zi0+cGFnZV9hcnJheSk7CisJfQorCWtmcmVlKGJ1Zi0+cGFkZGluZyk7CisJa2ZyZWUoYnVmKTsKKwlrcmVmX3B1dCgmY2hhbi0+a3JlZiwgcmVsYXlfZGVzdHJveV9jaGFubmVsKTsKK30KKworLyoqCisgKglyZWxheV9yZW1vdmVfYnVmIC0gcmVtb3ZlIGEgY2hhbm5lbCBidWZmZXIKKyAqCisgKglSZW1vdmVzIHRoZSBmaWxlIGZyb20gdGhlIGZpbGV5c3RlbSwgd2hpY2ggYWxzbyBmcmVlcyB0aGUKKyAqCXJjaGFuX2J1Zl9zdHJ1Y3QgYW5kIHRoZSBjaGFubmVsIGJ1ZmZlci4gIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tCisgKglrcmVmX3B1dCgpLgorICovCit2b2lkIHJlbGF5X3JlbW92ZV9idWYoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByY2hhbl9idWYsIGtyZWYpOworCWJ1Zi0+Y2hhbi0+Y2ItPnJlbW92ZV9idWZfZmlsZShidWYtPmRlbnRyeSk7CisJcmVsYXlfZGVzdHJveV9idWYoYnVmKTsKK30KKworLyoqCisgKglyZWxheV9idWZfZW1wdHkgLSBib29sZWFuLCBpcyB0aGUgY2hhbm5lbCBidWZmZXIgZW1wdHk/CisgKglAYnVmOiBjaGFubmVsIGJ1ZmZlcgorICoKKyAqCVJldHVybnMgMSBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5LCAwIG90aGVyd2lzZS4KKyAqLworaW50IHJlbGF5X2J1Zl9lbXB0eShzdHJ1Y3QgcmNoYW5fYnVmICpidWYpCit7CisJcmV0dXJuIChidWYtPnN1YmJ1ZnNfcHJvZHVjZWQgLSBidWYtPnN1YmJ1ZnNfY29uc3VtZWQpID8gMCA6IDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWxheV9idWZfZW1wdHkpOworCisvKioKKyAqCXJlbGF5X2J1Zl9mdWxsIC0gYm9vbGVhbiwgaXMgdGhlIGNoYW5uZWwgYnVmZmVyIGZ1bGw/CisgKglAYnVmOiBjaGFubmVsIGJ1ZmZlcgorICoKKyAqCVJldHVybnMgMSBpZiB0aGUgYnVmZmVyIGlzIGZ1bGwsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgcmVsYXlfYnVmX2Z1bGwoc3RydWN0IHJjaGFuX2J1ZiAqYnVmKQoreworCXNpemVfdCByZWFkeSA9IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZCAtIGJ1Zi0+c3ViYnVmc19jb25zdW1lZDsKKwlyZXR1cm4gKHJlYWR5ID49IGJ1Zi0+Y2hhbi0+bl9zdWJidWZzKSA/IDEgOiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVsYXlfYnVmX2Z1bGwpOworCisvKgorICogSGlnaC1sZXZlbCByZWxheSBrZXJuZWwgQVBJIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4KKyAqLworCisvKgorICogcmNoYW5fY2FsbGJhY2sgaW1wbGVtZW50YXRpb25zIGRlZmluaW5nIGRlZmF1bHQgY2hhbm5lbCBiZWhhdmlvci4gIFVzZWQKKyAqIGluIHBsYWNlIG9mIGNvcnJlc3BvbmRpbmcgTlVMTCB2YWx1ZXMgaW4gY2xpZW50IGNhbGxiYWNrIHN0cnVjdC4KKyAqLworCisvKgorICogc3ViYnVmX3N0YXJ0KCkgZGVmYXVsdCBjYWxsYmFjay4gIERvZXMgbm90aGluZy4KKyAqLworc3RhdGljIGludCBzdWJidWZfc3RhcnRfZGVmYXVsdF9jYWxsYmFjayAoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJCQkgIHZvaWQgKnN1YmJ1ZiwKKwkJCQkJICB2b2lkICpwcmV2X3N1YmJ1ZiwKKwkJCQkJICBzaXplX3QgcHJldl9wYWRkaW5nKQoreworCWlmIChyZWxheV9idWZfZnVsbChidWYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogYnVmX21hcHBlZCgpIGRlZmF1bHQgY2FsbGJhY2suICBEb2VzIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGJ1Zl9tYXBwZWRfZGVmYXVsdF9jYWxsYmFjayhzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisJCQkJCXN0cnVjdCBmaWxlICpmaWxwKQoreworfQorCisvKgorICogYnVmX3VubWFwcGVkKCkgZGVmYXVsdCBjYWxsYmFjay4gIERvZXMgbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgYnVmX3VubWFwcGVkX2RlZmF1bHRfY2FsbGJhY2soc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKQoreworfQorCisvKgorICogY3JlYXRlX2J1Zl9maWxlX2NyZWF0ZSgpIGRlZmF1bHQgY2FsbGJhY2suICBEb2VzIG5vdGhpbmcuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjcmVhdGVfYnVmX2ZpbGVfZGVmYXVsdF9jYWxsYmFjayhjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJCQkgICAgICAgaW50IG1vZGUsCisJCQkJCQkgICAgICAgc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJCQkJICAgICAgIGludCAqaXNfZ2xvYmFsKQoreworCXJldHVybiBOVUxMOworfQorCisvKgorICogcmVtb3ZlX2J1Zl9maWxlKCkgZGVmYXVsdCBjYWxsYmFjay4gIERvZXMgbm90aGluZy4KKyAqLworc3RhdGljIGludCByZW1vdmVfYnVmX2ZpbGVfZGVmYXVsdF9jYWxsYmFjayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIHJlbGF5IGNoYW5uZWwgZGVmYXVsdCBjYWxsYmFja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzIGRlZmF1bHRfY2hhbm5lbF9jYWxsYmFja3MgPSB7CisJLnN1YmJ1Zl9zdGFydCA9IHN1YmJ1Zl9zdGFydF9kZWZhdWx0X2NhbGxiYWNrLAorCS5idWZfbWFwcGVkID0gYnVmX21hcHBlZF9kZWZhdWx0X2NhbGxiYWNrLAorCS5idWZfdW5tYXBwZWQgPSBidWZfdW5tYXBwZWRfZGVmYXVsdF9jYWxsYmFjaywKKwkuY3JlYXRlX2J1Zl9maWxlID0gY3JlYXRlX2J1Zl9maWxlX2RlZmF1bHRfY2FsbGJhY2ssCisJLnJlbW92ZV9idWZfZmlsZSA9IHJlbW92ZV9idWZfZmlsZV9kZWZhdWx0X2NhbGxiYWNrLAorfTsKKworLyoqCisgKgl3YWtldXBfcmVhZGVycyAtIHdha2UgdXAgcmVhZGVycyB3YWl0aW5nIG9uIGEgY2hhbm5lbAorICoJQHByaXZhdGU6IHRoZSBjaGFubmVsIGJ1ZmZlcgorICoKKyAqCVRoaXMgaXMgdGhlIHdvcmsgZnVuY3Rpb24gdXNlZCB0byBkZWZlciByZWFkZXIgd2FraW5nLiAgVGhlCisgKglyZWFzb24gd2FraW5nIGlzIGRlZmVycmVkIGlzIHRoYXQgY2FsbGluZyBkaXJlY3RseSBmcm9tIHdyaXRlCisgKgljYXVzZXMgcHJvYmxlbXMgaWYgeW91J3JlIHdyaXRpbmcgZnJvbSBzYXkgdGhlIHNjaGVkdWxlci4KKyAqLworc3RhdGljIHZvaWQgd2FrZXVwX3JlYWRlcnModm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPSBwcml2YXRlOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYnVmLT5yZWFkX3dhaXQpOworfQorCisvKioKKyAqCV9fcmVsYXlfcmVzZXQgLSByZXNldCBhIGNoYW5uZWwgYnVmZmVyCisgKglAYnVmOiB0aGUgY2hhbm5lbCBidWZmZXIKKyAqCUBpbml0OiAxIGlmIHRoaXMgaXMgYSBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uCisgKgorICoJU2VlIHJlbGF5X3Jlc2V0IGZvciBkZXNjcmlwdGlvbiBvZiBlZmZlY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbGF5X3Jlc2V0KHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGluaXQpCit7CisJc2l6ZV90IGk7CisKKwlpZiAoaW5pdCkgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidWYtPnJlYWRfd2FpdCk7CisJCWtyZWZfaW5pdCgmYnVmLT5rcmVmKTsKKwkJSU5JVF9XT1JLKCZidWYtPndha2VfcmVhZGVycywgTlVMTCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmYnVmLT53YWtlX3JlYWRlcnMpOworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCX0KKworCWJ1Zi0+c3ViYnVmc19wcm9kdWNlZCA9IDA7CisJYnVmLT5zdWJidWZzX2NvbnN1bWVkID0gMDsKKwlidWYtPmJ5dGVzX2NvbnN1bWVkID0gMDsKKwlidWYtPmZpbmFsaXplZCA9IDA7CisJYnVmLT5kYXRhID0gYnVmLT5zdGFydDsKKwlidWYtPm9mZnNldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmLT5jaGFuLT5uX3N1YmJ1ZnM7IGkrKykKKwkJYnVmLT5wYWRkaW5nW2ldID0gMDsKKworCWJ1Zi0+Y2hhbi0+Y2ItPnN1YmJ1Zl9zdGFydChidWYsIGJ1Zi0+ZGF0YSwgTlVMTCwgMCk7Cit9CisKKy8qKgorICoJcmVsYXlfcmVzZXQgLSByZXNldCB0aGUgY2hhbm5lbAorICoJQGNoYW46IHRoZSBjaGFubmVsCisgKgorICoJVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBlcmFzaW5nIGFsbCBkYXRhIGZyb20gYWxsIGNoYW5uZWwgYnVmZmVycworICoJYW5kIHJlc3RhcnRpbmcgdGhlIGNoYW5uZWwgaW4gaXRzIGluaXRpYWwgc3RhdGUuICBUaGUgYnVmZmVycworICoJYXJlIG5vdCBmcmVlZCwgc28gYW55IG1hcHBpbmdzIGFyZSBzdGlsbCBpbiBlZmZlY3QuCisgKgorICoJTk9URTogQ2FyZSBzaG91bGQgYmUgdGFrZW4gdGhhdCB0aGUgY2hhbm5lbCBpc24ndCBhY3R1YWxseQorICoJYmVpbmcgdXNlZCBieSBhbnl0aGluZyB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlLgorICovCit2b2lkIHJlbGF5X3Jlc2V0KHN0cnVjdCByY2hhbiAqY2hhbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgcmNoYW5fYnVmICpwcmV2ID0gTlVMTDsKKworCWlmICghY2hhbikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQlpZiAoIWNoYW4tPmJ1ZltpXSB8fCBjaGFuLT5idWZbaV0gPT0gcHJldikKKwkJCWJyZWFrOworCQlfX3JlbGF5X3Jlc2V0KGNoYW4tPmJ1ZltpXSwgMCk7CisJCXByZXYgPSBjaGFuLT5idWZbaV07CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwocmVsYXlfcmVzZXQpOworCisvKioKKyAqCXJlbGF5X29wZW5fYnVmIC0gY3JlYXRlIGEgbmV3IHJlbGF5IGNoYW5uZWwgYnVmZmVyCisgKgorICoJSW50ZXJuYWwgLSB1c2VkIGJ5IHJlbGF5X29wZW4oKS4KKyAqLworc3RhdGljIHN0cnVjdCByY2hhbl9idWYgKnJlbGF5X29wZW5fYnVmKHN0cnVjdCByY2hhbiAqY2hhbiwKKwkJCQkJY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkJCXN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkJaW50ICppc19nbG9iYWwpCit7CisJc3RydWN0IHJjaGFuX2J1ZiAqYnVmOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCWlmICgqaXNfZ2xvYmFsKQorCQlyZXR1cm4gY2hhbi0+YnVmWzBdOworCisJYnVmID0gcmVsYXlfY3JlYXRlX2J1ZihjaGFuKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBDcmVhdGUgZmlsZSBpbiBmcyAqLworCWRlbnRyeSA9IGNoYW4tPmNiLT5jcmVhdGVfYnVmX2ZpbGUoZmlsZW5hbWUsIHBhcmVudCwgU19JUlVTUiwKKwkJCQkJICAgYnVmLCBpc19nbG9iYWwpOworCWlmICghZGVudHJ5KSB7CisJCXJlbGF5X2Rlc3Ryb3lfYnVmKGJ1Zik7CisJCXJldHVybiBOVUxMOworCX0KKworCWJ1Zi0+ZGVudHJ5ID0gZGVudHJ5OworCV9fcmVsYXlfcmVzZXQoYnVmLCAxKTsKKworCXJldHVybiBidWY7Cit9CisKKy8qKgorICoJcmVsYXlfY2xvc2VfYnVmIC0gY2xvc2UgYSBjaGFubmVsIGJ1ZmZlcgorICoJQGJ1ZjogY2hhbm5lbCBidWZmZXIKKyAqCisgKglNYXJrcyB0aGUgYnVmZmVyIGZpbmFsaXplZCBhbmQgcmVzdG9yZXMgdGhlIGRlZmF1bHQgY2FsbGJhY2tzLgorICoJVGhlIGNoYW5uZWwgYnVmZmVyIGFuZCBjaGFubmVsIGJ1ZmZlciBkYXRhIHN0cnVjdHVyZSBhcmUgdGhlbiBmcmVlZAorICoJYXV0b21hdGljYWxseSB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBnaXZlbiB1cC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJlbGF5X2Nsb3NlX2J1ZihzdHJ1Y3QgcmNoYW5fYnVmICpidWYpCit7CisJYnVmLT5maW5hbGl6ZWQgPSAxOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmJ1Zi0+d2FrZV9yZWFkZXJzKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWtyZWZfcHV0KCZidWYtPmtyZWYsIHJlbGF5X3JlbW92ZV9idWYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfY2FsbGJhY2tzKHN0cnVjdCByY2hhbiAqY2hhbiwKKwkJCQkgICBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzICpjYikKK3sKKwlpZiAoIWNiKSB7CisJCWNoYW4tPmNiID0gJmRlZmF1bHRfY2hhbm5lbF9jYWxsYmFja3M7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWNiLT5zdWJidWZfc3RhcnQpCisJCWNiLT5zdWJidWZfc3RhcnQgPSBzdWJidWZfc3RhcnRfZGVmYXVsdF9jYWxsYmFjazsKKwlpZiAoIWNiLT5idWZfbWFwcGVkKQorCQljYi0+YnVmX21hcHBlZCA9IGJ1Zl9tYXBwZWRfZGVmYXVsdF9jYWxsYmFjazsKKwlpZiAoIWNiLT5idWZfdW5tYXBwZWQpCisJCWNiLT5idWZfdW5tYXBwZWQgPSBidWZfdW5tYXBwZWRfZGVmYXVsdF9jYWxsYmFjazsKKwlpZiAoIWNiLT5jcmVhdGVfYnVmX2ZpbGUpCisJCWNiLT5jcmVhdGVfYnVmX2ZpbGUgPSBjcmVhdGVfYnVmX2ZpbGVfZGVmYXVsdF9jYWxsYmFjazsKKwlpZiAoIWNiLT5yZW1vdmVfYnVmX2ZpbGUpCisJCWNiLT5yZW1vdmVfYnVmX2ZpbGUgPSByZW1vdmVfYnVmX2ZpbGVfZGVmYXVsdF9jYWxsYmFjazsKKwljaGFuLT5jYiA9IGNiOworfQorCisvKioKKyAqCXJlbGF5X29wZW4gLSBjcmVhdGUgYSBuZXcgcmVsYXkgY2hhbm5lbAorICoJQGJhc2VfZmlsZW5hbWU6IGJhc2UgbmFtZSBvZiBmaWxlcyB0byBjcmVhdGUKKyAqCUBwYXJlbnQ6IGRlbnRyeSBvZiBwYXJlbnQgZGlyZWN0b3J5LCBOVUxMIGZvciByb290IGRpcmVjdG9yeQorICoJQHN1YmJ1Zl9zaXplOiBzaXplIG9mIHN1Yi1idWZmZXJzCisgKglAbl9zdWJidWZzOiBudW1iZXIgb2Ygc3ViLWJ1ZmZlcnMKKyAqCUBjYjogY2xpZW50IGNhbGxiYWNrIGZ1bmN0aW9ucworICoKKyAqCVJldHVybnMgY2hhbm5lbCBwb2ludGVyIGlmIHN1Y2Nlc3NmdWwsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqCUNyZWF0ZXMgYSBjaGFubmVsIGJ1ZmZlciBmb3IgZWFjaCBjcHUgdXNpbmcgdGhlIHNpemVzIGFuZAorICoJYXR0cmlidXRlcyBzcGVjaWZpZWQuICBUaGUgY3JlYXRlZCBjaGFubmVsIGJ1ZmZlciBmaWxlcworICoJd2lsbCBiZSBuYW1lZCBiYXNlX2ZpbGVuYW1lMC4uLmJhc2VfZmlsZW5hbWVOLTEuICBGaWxlCisgKglwZXJtaXNzaW9ucyB3aWxsIGJlIFNfSVJVU1IuCisgKi8KK3N0cnVjdCByY2hhbiAqcmVsYXlfb3Blbihjb25zdCBjaGFyICpiYXNlX2ZpbGVuYW1lLAorCQkJIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCSBzaXplX3Qgc3ViYnVmX3NpemUsCisJCQkgc2l6ZV90IG5fc3ViYnVmcywKKwkJCSBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzICpjYikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgcmNoYW4gKmNoYW47CisJY2hhciAqdG1wbmFtZTsKKwlpbnQgaXNfZ2xvYmFsID0gMDsKKworCWlmICghYmFzZV9maWxlbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIShzdWJidWZfc2l6ZSAmJiBuX3N1YmJ1ZnMpKQorCQlyZXR1cm4gTlVMTDsKKworCWNoYW4gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmNoYW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybiBOVUxMOworCisJY2hhbi0+dmVyc2lvbiA9IFJFTEFZRlNfQ0hBTk5FTF9WRVJTSU9OOworCWNoYW4tPm5fc3ViYnVmcyA9IG5fc3ViYnVmczsKKwljaGFuLT5zdWJidWZfc2l6ZSA9IHN1YmJ1Zl9zaXplOworCWNoYW4tPmFsbG9jX3NpemUgPSBGSVhfU0laRShzdWJidWZfc2l6ZSAqIG5fc3ViYnVmcyk7CisJc2V0dXBfY2FsbGJhY2tzKGNoYW4sIGNiKTsKKwlrcmVmX2luaXQoJmNoYW4tPmtyZWYpOworCisJdG1wbmFtZSA9IGttYWxsb2MoTkFNRV9NQVggKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcG5hbWUpCisJCWdvdG8gZnJlZV9jaGFuOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCXNwcmludGYodG1wbmFtZSwgIiVzJWQiLCBiYXNlX2ZpbGVuYW1lLCBpKTsKKwkJY2hhbi0+YnVmW2ldID0gcmVsYXlfb3Blbl9idWYoY2hhbiwgdG1wbmFtZSwgcGFyZW50LAorCQkJCQkgICAgICAmaXNfZ2xvYmFsKTsKKwkJaWYgKCFjaGFuLT5idWZbaV0pCisJCQlnb3RvIGZyZWVfYnVmczsKKworCQljaGFuLT5idWZbaV0tPmNwdSA9IGk7CisJfQorCisJa2ZyZWUodG1wbmFtZSk7CisJcmV0dXJuIGNoYW47CisKK2ZyZWVfYnVmczoKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCWlmICghY2hhbi0+YnVmW2ldKQorCQkJYnJlYWs7CisJCXJlbGF5X2Nsb3NlX2J1ZihjaGFuLT5idWZbaV0pOworCQlpZiAoaXNfZ2xvYmFsKQorCQkJYnJlYWs7CisJfQorCWtmcmVlKHRtcG5hbWUpOworCitmcmVlX2NoYW46CisJa3JlZl9wdXQoJmNoYW4tPmtyZWYsIHJlbGF5X2Rlc3Ryb3lfY2hhbm5lbCk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWxheV9vcGVuKTsKKworLyoqCisgKglyZWxheV9zd2l0Y2hfc3ViYnVmIC0gc3dpdGNoIHRvIGEgbmV3IHN1Yi1idWZmZXIKKyAqCUBidWY6IGNoYW5uZWwgYnVmZmVyCisgKglAbGVuZ3RoOiBzaXplIG9mIGN1cnJlbnQgZXZlbnQKKyAqCisgKglSZXR1cm5zIGVpdGhlciB0aGUgbGVuZ3RoIHBhc3NlZCBpbiBvciAwIGlmIGZ1bGwuCisgKgorICoJUGVyZm9ybXMgc3ViLWJ1ZmZlci1zd2l0Y2ggdGFza3Mgc3VjaCBhcyBpbnZva2luZyBjYWxsYmFja3MsCisgKgl1cGRhdGluZyBwYWRkaW5nIGNvdW50cywgd2FraW5nIHVwIHJlYWRlcnMsIGV0Yy4KKyAqLworc2l6ZV90IHJlbGF5X3N3aXRjaF9zdWJidWYoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLCBzaXplX3QgbGVuZ3RoKQoreworCXZvaWQgKm9sZCwgKm5ldzsKKwlzaXplX3Qgb2xkX3N1YmJ1ZiwgbmV3X3N1YmJ1ZjsKKworCWlmICh1bmxpa2VseShsZW5ndGggPiBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplKSkKKwkJZ290byB0b29iaWc7CisKKwlpZiAoYnVmLT5vZmZzZXQgIT0gYnVmLT5jaGFuLT5zdWJidWZfc2l6ZSArIDEpIHsKKwkJYnVmLT5wcmV2X3BhZGRpbmcgPSBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplIC0gYnVmLT5vZmZzZXQ7CisJCW9sZF9zdWJidWYgPSBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQgJSBidWYtPmNoYW4tPm5fc3ViYnVmczsKKwkJYnVmLT5wYWRkaW5nW29sZF9zdWJidWZdID0gYnVmLT5wcmV2X3BhZGRpbmc7CisJCWJ1Zi0+c3ViYnVmc19wcm9kdWNlZCsrOworCQlidWYtPmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplICs9IGJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemUgLQorCQkJYnVmLT5wYWRkaW5nW29sZF9zdWJidWZdOworCQlzbXBfbWIoKTsKKwkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmJ1Zi0+cmVhZF93YWl0KSkgeworCQkJUFJFUEFSRV9XT1JLKCZidWYtPndha2VfcmVhZGVycywgd2FrZXVwX3JlYWRlcnMsIGJ1Zik7CisJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJ1Zi0+d2FrZV9yZWFkZXJzLCAxKTsKKwkJfQorCX0KKworCW9sZCA9IGJ1Zi0+ZGF0YTsKKwluZXdfc3ViYnVmID0gYnVmLT5zdWJidWZzX3Byb2R1Y2VkICUgYnVmLT5jaGFuLT5uX3N1YmJ1ZnM7CisJbmV3ID0gYnVmLT5zdGFydCArIG5ld19zdWJidWYgKiBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplOworCWJ1Zi0+b2Zmc2V0ID0gMDsKKwlpZiAoIWJ1Zi0+Y2hhbi0+Y2ItPnN1YmJ1Zl9zdGFydChidWYsIG5ldywgb2xkLCBidWYtPnByZXZfcGFkZGluZykpIHsKKwkJYnVmLT5vZmZzZXQgPSBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplICsgMTsKKwkJcmV0dXJuIDA7CisJfQorCWJ1Zi0+ZGF0YSA9IG5ldzsKKwlidWYtPnBhZGRpbmdbbmV3X3N1YmJ1Zl0gPSAwOworCisJaWYgKHVubGlrZWx5KGxlbmd0aCArIGJ1Zi0+b2Zmc2V0ID4gYnVmLT5jaGFuLT5zdWJidWZfc2l6ZSkpCisJCWdvdG8gdG9vYmlnOworCisJcmV0dXJuIGxlbmd0aDsKKwordG9vYmlnOgorCWJ1Zi0+Y2hhbi0+bGFzdF90b29iaWcgPSBsZW5ndGg7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWxheV9zd2l0Y2hfc3ViYnVmKTsKKworLyoqCisgKglyZWxheV9zdWJidWZzX2NvbnN1bWVkIC0gdXBkYXRlIHRoZSBidWZmZXIncyBzdWItYnVmZmVycy1jb25zdW1lZCBjb3VudAorICoJQGNoYW46IHRoZSBjaGFubmVsCisgKglAY3B1OiB0aGUgY3B1IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hhbm5lbCBidWZmZXIgdG8gdXBkYXRlCisgKglAc3ViYnVmc19jb25zdW1lZDogbnVtYmVyIG9mIHN1Yi1idWZmZXJzIHRvIGFkZCB0byBjdXJyZW50IGJ1ZidzIGNvdW50CisgKgorICoJQWRkcyB0byB0aGUgY2hhbm5lbCBidWZmZXIncyBjb25zdW1lZCBzdWItYnVmZmVyIGNvdW50LgorICoJc3ViYnVmc19jb25zdW1lZCBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBzdWItYnVmZmVycyBuZXdseSBjb25zdW1lZCwKKyAqCW5vdCB0aGUgdG90YWwgY29uc3VtZWQuCisgKgorICoJTk9URToga2VybmVsIGNsaWVudHMgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgdGhlIGNoYW5uZWwKKyAqCW1vZGUgaXMgJ292ZXJ3cml0ZScuCisgKi8KK3ZvaWQgcmVsYXlfc3ViYnVmc19jb25zdW1lZChzdHJ1Y3QgcmNoYW4gKmNoYW4sCisJCQkgICAgdW5zaWduZWQgaW50IGNwdSwKKwkJCSAgICBzaXplX3Qgc3ViYnVmc19jb25zdW1lZCkKK3sKKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWY7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCWlmIChjcHUgPj0gTlJfQ1BVUyB8fCAhY2hhbi0+YnVmW2NwdV0pCisJCXJldHVybjsKKworCWJ1ZiA9IGNoYW4tPmJ1ZltjcHVdOworCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCArPSBzdWJidWZzX2NvbnN1bWVkOworCWlmIChidWYtPnN1YmJ1ZnNfY29uc3VtZWQgPiBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQpCisJCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCA9IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlbGF5X3N1YmJ1ZnNfY29uc3VtZWQpOworCisvKioKKyAqCXJlbGF5X2Nsb3NlIC0gY2xvc2UgdGhlIGNoYW5uZWwKKyAqCUBjaGFuOiB0aGUgY2hhbm5lbAorICoKKyAqCUNsb3NlcyBhbGwgY2hhbm5lbCBidWZmZXJzIGFuZCBmcmVlcyB0aGUgY2hhbm5lbC4KKyAqLwordm9pZCByZWxheV9jbG9zZShzdHJ1Y3QgcmNoYW4gKmNoYW4pCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHJjaGFuX2J1ZiAqcHJldiA9IE5VTEw7CisKKwlpZiAoIWNoYW4pCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJaWYgKCFjaGFuLT5idWZbaV0gfHwgY2hhbi0+YnVmW2ldID09IHByZXYpCisJCQlicmVhazsKKwkJcmVsYXlfY2xvc2VfYnVmKGNoYW4tPmJ1ZltpXSk7CisJCXByZXYgPSBjaGFuLT5idWZbaV07CisJfQorCisJaWYgKGNoYW4tPmxhc3RfdG9vYmlnKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJyZWxheTogb25lIG9yIG1vcmUgaXRlbXMgbm90IGxvZ2dlZCAiCisJCSAgICAgICAiW2l0ZW0gc2l6ZSAoJVpkKSA+IHN1Yi1idWZmZXIgc2l6ZSAoJVpkKV1cbiIsCisJCSAgICAgICBjaGFuLT5sYXN0X3Rvb2JpZywgY2hhbi0+c3ViYnVmX3NpemUpOworCisJa3JlZl9wdXQoJmNoYW4tPmtyZWYsIHJlbGF5X2Rlc3Ryb3lfY2hhbm5lbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWxheV9jbG9zZSk7CisKKy8qKgorICoJcmVsYXlfZmx1c2ggLSBjbG9zZSB0aGUgY2hhbm5lbAorICoJQGNoYW46IHRoZSBjaGFubmVsCisgKgorICoJRmx1c2hlcyBhbGwgY2hhbm5lbCBidWZmZXJzIGkuZS4gZm9yY2VzIGJ1ZmZlciBzd2l0Y2guCisgKi8KK3ZvaWQgcmVsYXlfZmx1c2goc3RydWN0IHJjaGFuICpjaGFuKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCByY2hhbl9idWYgKnByZXYgPSBOVUxMOworCisJaWYgKCFjaGFuKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCWlmICghY2hhbi0+YnVmW2ldIHx8IGNoYW4tPmJ1ZltpXSA9PSBwcmV2KQorCQkJYnJlYWs7CisJCXJlbGF5X3N3aXRjaF9zdWJidWYoY2hhbi0+YnVmW2ldLCAwKTsKKwkJcHJldiA9IGNoYW4tPmJ1ZltpXTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWxheV9mbHVzaCk7CisKKy8qKgorICoJcmVsYXlfZmlsZV9vcGVuIC0gb3BlbiBmaWxlIG9wIGZvciByZWxheSBmaWxlcworICoJQGlub2RlOiB0aGUgaW5vZGUKKyAqCUBmaWxwOiB0aGUgZmlsZQorICoKKyAqCUluY3JlbWVudHMgdGhlIGNoYW5uZWwgYnVmZmVyIHJlZmNvdW50LgorICovCitzdGF0aWMgaW50IHJlbGF5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWtyZWZfZ2V0KCZidWYtPmtyZWYpOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGJ1ZjsKKworCXJldHVybiAwOworfQorCisvKioKKyAqCXJlbGF5X2ZpbGVfbW1hcCAtIG1tYXAgZmlsZSBvcCBmb3IgcmVsYXkgZmlsZXMKKyAqCUBmaWxwOiB0aGUgZmlsZQorICoJQHZtYTogdGhlIHZtYSBkZXNjcmliaW5nIHdoYXQgdG8gbWFwCisgKgorICoJQ2FsbHMgdXBvbiByZWxheV9tbWFwX2J1ZiB0byBtYXAgdGhlIGZpbGUgaW50byB1c2VyIHNwYWNlLgorICovCitzdGF0aWMgaW50IHJlbGF5X2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXJldHVybiByZWxheV9tbWFwX2J1ZihidWYsIHZtYSk7Cit9CisKKy8qKgorICoJcmVsYXlfZmlsZV9wb2xsIC0gcG9sbCBmaWxlIG9wIGZvciByZWxheSBmaWxlcworICoJQGZpbHA6IHRoZSBmaWxlCisgKglAd2FpdDogcG9sbCB0YWJsZQorICoKKyAqCVBvbGwgaW1wbGVtZW50aW9uLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJlbGF5X2ZpbGVfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisJc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGJ1Zi0+ZmluYWxpemVkKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCXBvbGxfd2FpdChmaWxwLCAmYnVmLT5yZWFkX3dhaXQsIHdhaXQpOworCQlpZiAoIXJlbGF5X2J1Zl9lbXB0eShidWYpKQorCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCX0KKworCXJldHVybiBtYXNrOworfQorCisvKioKKyAqCXJlbGF5X2ZpbGVfcmVsZWFzZSAtIHJlbGVhc2UgZmlsZSBvcCBmb3IgcmVsYXkgZmlsZXMKKyAqCUBpbm9kZTogdGhlIGlub2RlCisgKglAZmlscDogdGhlIGZpbGUKKyAqCisgKglEZWNyZW1lbnRzIHRoZSBjaGFubmVsIHJlZmNvdW50LCBhcyB0aGUgZmlsZXN5c3RlbSBpcworICoJbm8gbG9uZ2VyIHVzaW5nIGl0LgorICovCitzdGF0aWMgaW50IHJlbGF5X2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJa3JlZl9wdXQoJmJ1Zi0+a3JlZiwgcmVsYXlfcmVtb3ZlX2J1Zik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKglyZWxheV9maWxlX3JlYWRfY29uc3VtZSAtIHVwZGF0ZSB0aGUgY29uc3VtZWQgY291bnQgZm9yIHRoZSBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgcmVsYXlfZmlsZV9yZWFkX2NvbnN1bWUoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJCSAgICBzaXplX3QgcmVhZF9wb3MsCisJCQkJICAgIHNpemVfdCBieXRlc19jb25zdW1lZCkKK3sKKwlzaXplX3Qgc3ViYnVmX3NpemUgPSBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplOworCXNpemVfdCBuX3N1YmJ1ZnMgPSBidWYtPmNoYW4tPm5fc3ViYnVmczsKKwlzaXplX3QgcmVhZF9zdWJidWY7CisKKwlpZiAoYnVmLT5ieXRlc19jb25zdW1lZCArIGJ5dGVzX2NvbnN1bWVkID4gc3ViYnVmX3NpemUpIHsKKwkJcmVsYXlfc3ViYnVmc19jb25zdW1lZChidWYtPmNoYW4sIGJ1Zi0+Y3B1LCAxKTsKKwkJYnVmLT5ieXRlc19jb25zdW1lZCA9IDA7CisJfQorCisJYnVmLT5ieXRlc19jb25zdW1lZCArPSBieXRlc19jb25zdW1lZDsKKwlyZWFkX3N1YmJ1ZiA9IHJlYWRfcG9zIC8gYnVmLT5jaGFuLT5zdWJidWZfc2l6ZTsKKwlpZiAoYnVmLT5ieXRlc19jb25zdW1lZCArIGJ1Zi0+cGFkZGluZ1tyZWFkX3N1YmJ1Zl0gPT0gc3ViYnVmX3NpemUpIHsKKwkJaWYgKChyZWFkX3N1YmJ1ZiA9PSBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQgJSBuX3N1YmJ1ZnMpICYmCisJCSAgICAoYnVmLT5vZmZzZXQgPT0gc3ViYnVmX3NpemUpKQorCQkJcmV0dXJuOworCQlyZWxheV9zdWJidWZzX2NvbnN1bWVkKGJ1Zi0+Y2hhbiwgYnVmLT5jcHUsIDEpOworCQlidWYtPmJ5dGVzX2NvbnN1bWVkID0gMDsKKwl9Cit9CisKKy8qKgorICoJcmVsYXlfZmlsZV9yZWFkX2F2YWlsIC0gYm9vbGVhbiwgYXJlIHRoZXJlIHVuY29uc3VtZWQgYnl0ZXMgYXZhaWxhYmxlPworICovCitzdGF0aWMgaW50IHJlbGF5X2ZpbGVfcmVhZF9hdmFpbChzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHNpemVfdCByZWFkX3BvcykKK3sKKwlzaXplX3Qgc3ViYnVmX3NpemUgPSBidWYtPmNoYW4tPnN1YmJ1Zl9zaXplOworCXNpemVfdCBuX3N1YmJ1ZnMgPSBidWYtPmNoYW4tPm5fc3ViYnVmczsKKwlzaXplX3QgcHJvZHVjZWQgPSBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQ7CisJc2l6ZV90IGNvbnN1bWVkID0gYnVmLT5zdWJidWZzX2NvbnN1bWVkOworCisJcmVsYXlfZmlsZV9yZWFkX2NvbnN1bWUoYnVmLCByZWFkX3BvcywgMCk7CisKKwlpZiAodW5saWtlbHkoYnVmLT5vZmZzZXQgPiBzdWJidWZfc2l6ZSkpIHsKKwkJaWYgKHByb2R1Y2VkID09IGNvbnN1bWVkKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiAxOworCX0KKworCWlmICh1bmxpa2VseShwcm9kdWNlZCAtIGNvbnN1bWVkID49IG5fc3ViYnVmcykpIHsKKwkJY29uc3VtZWQgPSAocHJvZHVjZWQgLyBuX3N1YmJ1ZnMpICogbl9zdWJidWZzOworCQlidWYtPnN1YmJ1ZnNfY29uc3VtZWQgPSBjb25zdW1lZDsKKwl9CisJCisJcHJvZHVjZWQgPSAocHJvZHVjZWQgJSBuX3N1YmJ1ZnMpICogc3ViYnVmX3NpemUgKyBidWYtPm9mZnNldDsKKwljb25zdW1lZCA9IChjb25zdW1lZCAlIG5fc3ViYnVmcykgKiBzdWJidWZfc2l6ZSArIGJ1Zi0+Ynl0ZXNfY29uc3VtZWQ7CisKKwlpZiAoY29uc3VtZWQgPiBwcm9kdWNlZCkKKwkJcHJvZHVjZWQgKz0gbl9zdWJidWZzICogc3ViYnVmX3NpemU7CisJCisJaWYgKGNvbnN1bWVkID09IHByb2R1Y2VkKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKioKKyAqCXJlbGF5X2ZpbGVfcmVhZF9zdWJidWZfYXZhaWwgLSByZXR1cm4gYnl0ZXMgYXZhaWxhYmxlIGluIHN1Yi1idWZmZXIKKyAqLworc3RhdGljIHNpemVfdCByZWxheV9maWxlX3JlYWRfc3ViYnVmX2F2YWlsKHNpemVfdCByZWFkX3BvcywKKwkJCQkJICAgc3RydWN0IHJjaGFuX2J1ZiAqYnVmKQoreworCXNpemVfdCBwYWRkaW5nLCBhdmFpbCA9IDA7CisJc2l6ZV90IHJlYWRfc3ViYnVmLCByZWFkX29mZnNldCwgd3JpdGVfc3ViYnVmLCB3cml0ZV9vZmZzZXQ7CisJc2l6ZV90IHN1YmJ1Zl9zaXplID0gYnVmLT5jaGFuLT5zdWJidWZfc2l6ZTsKKworCXdyaXRlX3N1YmJ1ZiA9IChidWYtPmRhdGEgLSBidWYtPnN0YXJ0KSAvIHN1YmJ1Zl9zaXplOworCXdyaXRlX29mZnNldCA9IGJ1Zi0+b2Zmc2V0ID4gc3ViYnVmX3NpemUgPyBzdWJidWZfc2l6ZSA6IGJ1Zi0+b2Zmc2V0OworCXJlYWRfc3ViYnVmID0gcmVhZF9wb3MgLyBzdWJidWZfc2l6ZTsKKwlyZWFkX29mZnNldCA9IHJlYWRfcG9zICUgc3ViYnVmX3NpemU7CisJcGFkZGluZyA9IGJ1Zi0+cGFkZGluZ1tyZWFkX3N1YmJ1Zl07CisKKwlpZiAocmVhZF9zdWJidWYgPT0gd3JpdGVfc3ViYnVmKSB7CisJCWlmIChyZWFkX29mZnNldCArIHBhZGRpbmcgPCB3cml0ZV9vZmZzZXQpCisJCQlhdmFpbCA9IHdyaXRlX29mZnNldCAtIChyZWFkX29mZnNldCArIHBhZGRpbmcpOworCX0gZWxzZQorCQlhdmFpbCA9IChzdWJidWZfc2l6ZSAtIHBhZGRpbmcpIC0gcmVhZF9vZmZzZXQ7CisKKwlyZXR1cm4gYXZhaWw7Cit9CisKKy8qKgorICoJcmVsYXlfZmlsZV9yZWFkX3N0YXJ0X3BvcyAtIGZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSBieXRlIHRvIHJlYWQKKyAqCisgKglJZiB0aGUgcmVhZF9wb3MgaXMgaW4gdGhlIG1pZGRsZSBvZiBwYWRkaW5nLCByZXR1cm4gdGhlCisgKglwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYWN0dWFsbHkgYXZhaWxhYmxlIGJ5dGUsIG90aGVyd2lzZQorICoJcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4KKyAqLworc3RhdGljIHNpemVfdCByZWxheV9maWxlX3JlYWRfc3RhcnRfcG9zKHNpemVfdCByZWFkX3BvcywKKwkJCQkJc3RydWN0IHJjaGFuX2J1ZiAqYnVmKQoreworCXNpemVfdCByZWFkX3N1YmJ1ZiwgcGFkZGluZywgcGFkZGluZ19zdGFydCwgcGFkZGluZ19lbmQ7CisJc2l6ZV90IHN1YmJ1Zl9zaXplID0gYnVmLT5jaGFuLT5zdWJidWZfc2l6ZTsKKwlzaXplX3Qgbl9zdWJidWZzID0gYnVmLT5jaGFuLT5uX3N1YmJ1ZnM7CisKKwlyZWFkX3N1YmJ1ZiA9IHJlYWRfcG9zIC8gc3ViYnVmX3NpemU7CisJcGFkZGluZyA9IGJ1Zi0+cGFkZGluZ1tyZWFkX3N1YmJ1Zl07CisJcGFkZGluZ19zdGFydCA9IChyZWFkX3N1YmJ1ZiArIDEpICogc3ViYnVmX3NpemUgLSBwYWRkaW5nOworCXBhZGRpbmdfZW5kID0gKHJlYWRfc3ViYnVmICsgMSkgKiBzdWJidWZfc2l6ZTsKKwlpZiAocmVhZF9wb3MgPj0gcGFkZGluZ19zdGFydCAmJiByZWFkX3BvcyA8IHBhZGRpbmdfZW5kKSB7CisJCXJlYWRfc3ViYnVmID0gKHJlYWRfc3ViYnVmICsgMSkgJSBuX3N1YmJ1ZnM7CisJCXJlYWRfcG9zID0gcmVhZF9zdWJidWYgKiBzdWJidWZfc2l6ZTsKKwl9CisKKwlyZXR1cm4gcmVhZF9wb3M7Cit9CisKKy8qKgorICoJcmVsYXlfZmlsZV9yZWFkX2VuZF9wb3MgLSByZXR1cm4gdGhlIG5ldyByZWFkIHBvc2l0aW9uCisgKi8KK3N0YXRpYyBzaXplX3QgcmVsYXlfZmlsZV9yZWFkX2VuZF9wb3Moc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJCSAgICAgIHNpemVfdCByZWFkX3BvcywKKwkJCQkgICAgICBzaXplX3QgY291bnQpCit7CisJc2l6ZV90IHJlYWRfc3ViYnVmLCBwYWRkaW5nLCBlbmRfcG9zOworCXNpemVfdCBzdWJidWZfc2l6ZSA9IGJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemU7CisJc2l6ZV90IG5fc3ViYnVmcyA9IGJ1Zi0+Y2hhbi0+bl9zdWJidWZzOworCisJcmVhZF9zdWJidWYgPSByZWFkX3BvcyAvIHN1YmJ1Zl9zaXplOworCXBhZGRpbmcgPSBidWYtPnBhZGRpbmdbcmVhZF9zdWJidWZdOworCWlmIChyZWFkX3BvcyAlIHN1YmJ1Zl9zaXplICsgY291bnQgKyBwYWRkaW5nID09IHN1YmJ1Zl9zaXplKQorCQllbmRfcG9zID0gKHJlYWRfc3ViYnVmICsgMSkgKiBzdWJidWZfc2l6ZTsKKwllbHNlCisJCWVuZF9wb3MgPSByZWFkX3BvcyArIGNvdW50OworCWlmIChlbmRfcG9zID49IHN1YmJ1Zl9zaXplICogbl9zdWJidWZzKQorCQllbmRfcG9zID0gMDsKKworCXJldHVybiBlbmRfcG9zOworfQorCisvKioKKyAqCXN1YmJ1Zl9yZWFkX2FjdG9yIC0gcmVhZCB1cCB0byBvbmUgc3ViYnVmJ3Mgd29ydGggb2YgZGF0YQorICovCitzdGF0aWMgaW50IHN1YmJ1Zl9yZWFkX2FjdG9yKHNpemVfdCByZWFkX3N0YXJ0LAorCQkJICAgICBzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisJCQkgICAgIHNpemVfdCBhdmFpbCwKKwkJCSAgICAgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCisJCQkgICAgIHJlYWRfYWN0b3JfdCBhY3RvcikKK3sKKwl2b2lkICpmcm9tOworCWludCByZXQgPSAwOworCisJZnJvbSA9IGJ1Zi0+c3RhcnQgKyByZWFkX3N0YXJ0OworCXJldCA9IGF2YWlsOworCWlmIChjb3B5X3RvX3VzZXIoZGVzYy0+YXJnLmRhdGEsIGZyb20sIGF2YWlsKSkgeworCQlkZXNjLT5lcnJvciA9IC1FRkFVTFQ7CisJCXJldCA9IDA7CisJfQorCWRlc2MtPmFyZy5kYXRhICs9IHJldDsKKwlkZXNjLT53cml0dGVuICs9IHJldDsKKwlkZXNjLT5jb3VudCAtPSByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXN1YmJ1Zl9zZW5kX2FjdG9yIC0gc2VuZCB1cCB0byBvbmUgc3ViYnVmJ3Mgd29ydGggb2YgZGF0YQorICovCitzdGF0aWMgaW50IHN1YmJ1Zl9zZW5kX2FjdG9yKHNpemVfdCByZWFkX3N0YXJ0LAorCQkJICAgICBzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisJCQkgICAgIHNpemVfdCBhdmFpbCwKKwkJCSAgICAgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCisJCQkgICAgIHJlYWRfYWN0b3JfdCBhY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIHBpZHgsIHBvZmY7CisJdW5zaWduZWQgaW50IHN1YmJ1Zl9wYWdlczsKKwlpbnQgcmV0ID0gMDsKKworCXN1YmJ1Zl9wYWdlcyA9IGJ1Zi0+Y2hhbi0+YWxsb2Nfc2l6ZSA+PiBQQUdFX1NISUZUOworCXBpZHggPSAocmVhZF9zdGFydCAvIFBBR0VfU0laRSkgJSBzdWJidWZfcGFnZXM7CisJcG9mZiA9IHJlYWRfc3RhcnQgJiB+UEFHRV9NQVNLOworCXdoaWxlIChhdmFpbCkgeworCQlzdHJ1Y3QgcGFnZSAqcCA9IGJ1Zi0+cGFnZV9hcnJheVtwaWR4XTsKKwkJdW5zaWduZWQgaW50IGxlbjsKKworCQlsZW4gPSBQQUdFX1NJWkUgLSBwb2ZmOworCQlpZiAobGVuID4gYXZhaWwpCisJCQlsZW4gPSBhdmFpbDsKKworCQlsZW4gPSBhY3RvcihkZXNjLCBwLCBwb2ZmLCBsZW4pOworCQlpZiAoZGVzYy0+ZXJyb3IpCisJCQlicmVhazsKKworCQlhdmFpbCAtPSBsZW47CisJCXJldCArPSBsZW47CisJCXBvZmYgPSAwOworCQlwaWR4ID0gKHBpZHggKyAxKSAlIHN1YmJ1Zl9wYWdlczsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit0eXBlZGVmIGludCAoKnN1YmJ1Zl9hY3Rvcl90KSAoc2l6ZV90IHJlYWRfc3RhcnQsCisJCQkgICAgICAgc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJICAgICAgIHNpemVfdCBhdmFpbCwKKwkJCSAgICAgICByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKKwkJCSAgICAgICByZWFkX2FjdG9yX3QgYWN0b3IpOworCisvKioKKyAqCXJlbGF5X2ZpbGVfcmVhZF9zdWJidWZzIC0gcmVhZCBjb3VudCBieXRlcywgYnJpZGdpbmcgc3ViYnVmIGJvdW5kYXJpZXMKKyAqLworc3RhdGljIGlubGluZSBzc2l6ZV90IHJlbGF5X2ZpbGVfcmVhZF9zdWJidWZzKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkgICAgICBsb2ZmX3QgKnBwb3MsCisJCQkJCSAgICAgIHNpemVfdCBjb3VudCwKKwkJCQkJICAgICAgc3ViYnVmX2FjdG9yX3Qgc3ViYnVmX2FjdG9yLAorCQkJCQkgICAgICByZWFkX2FjdG9yX3QgYWN0b3IsCisJCQkJCSAgICAgIHZvaWQgKnRhcmdldCkKK3sKKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc2l6ZV90IHJlYWRfc3RhcnQsIGF2YWlsOworCXJlYWRfZGVzY3JpcHRvcl90IGRlc2M7CisJaW50IHJldDsKKworCWlmICghY291bnQpCisJCXJldHVybiAwOworCisJZGVzYy53cml0dGVuID0gMDsKKwlkZXNjLmNvdW50ID0gY291bnQ7CisJZGVzYy5hcmcuZGF0YSA9IHRhcmdldDsKKwlkZXNjLmVycm9yID0gMDsKKworCW11dGV4X2xvY2soJmZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlkbyB7CisJCWlmICghcmVsYXlfZmlsZV9yZWFkX2F2YWlsKGJ1ZiwgKnBwb3MpKQorCQkJYnJlYWs7CisKKwkJcmVhZF9zdGFydCA9IHJlbGF5X2ZpbGVfcmVhZF9zdGFydF9wb3MoKnBwb3MsIGJ1Zik7CisJCWF2YWlsID0gcmVsYXlfZmlsZV9yZWFkX3N1YmJ1Zl9hdmFpbChyZWFkX3N0YXJ0LCBidWYpOworCQlpZiAoIWF2YWlsKQorCQkJYnJlYWs7CisKKwkJYXZhaWwgPSBtaW4oZGVzYy5jb3VudCwgYXZhaWwpOworCQlyZXQgPSBzdWJidWZfYWN0b3IocmVhZF9zdGFydCwgYnVmLCBhdmFpbCwgJmRlc2MsIGFjdG9yKTsKKwkJaWYgKGRlc2MuZXJyb3IgPCAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHJldCkgeworCQkJcmVsYXlfZmlsZV9yZWFkX2NvbnN1bWUoYnVmLCByZWFkX3N0YXJ0LCByZXQpOworCQkJKnBwb3MgPSByZWxheV9maWxlX3JlYWRfZW5kX3BvcyhidWYsIHJlYWRfc3RhcnQsIHJldCk7CisJCX0KKwl9IHdoaWxlIChkZXNjLmNvdW50ICYmIHJldCk7CisJbXV0ZXhfdW5sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlyZXR1cm4gZGVzYy53cml0dGVuOworfQorCitzdGF0aWMgc3NpemVfdCByZWxheV9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICAgICAgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICBzaXplX3QgY291bnQsCisJCQkgICAgICAgbG9mZl90ICpwcG9zKQoreworCXJldHVybiByZWxheV9maWxlX3JlYWRfc3ViYnVmcyhmaWxwLCBwcG9zLCBjb3VudCwgc3ViYnVmX3JlYWRfYWN0b3IsCisJCQkJICAgICAgIE5VTEwsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlbGF5X2ZpbGVfc2VuZGZpbGUoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJICAgbG9mZl90ICpwcG9zLAorCQkJCSAgIHNpemVfdCBjb3VudCwKKwkJCQkgICByZWFkX2FjdG9yX3QgYWN0b3IsCisJCQkJICAgdm9pZCAqdGFyZ2V0KQoreworCXJldHVybiByZWxheV9maWxlX3JlYWRfc3ViYnVmcyhmaWxwLCBwcG9zLCBjb3VudCwgc3ViYnVmX3NlbmRfYWN0b3IsCisJCQkJICAgICAgIGFjdG9yLCB0YXJnZXQpOworfQorCitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlbGF5X2ZpbGVfb3BlcmF0aW9ucyA9IHsKKwkub3BlbgkJPSByZWxheV9maWxlX29wZW4sCisJLnBvbGwJCT0gcmVsYXlfZmlsZV9wb2xsLAorCS5tbWFwCQk9IHJlbGF5X2ZpbGVfbW1hcCwKKwkucmVhZAkJPSByZWxheV9maWxlX3JlYWQsCisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLnJlbGVhc2UJPSByZWxheV9maWxlX3JlbGVhc2UsCisJLnNlbmRmaWxlICAgICAgID0gcmVsYXlfZmlsZV9zZW5kZmlsZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChyZWxheV9maWxlX29wZXJhdGlvbnMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCAxMmQyOTFiLi43ZmZhYWJkIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMTc4LDEzICsxNzgsNiBAQAogI2RlZmluZSB0YXNrX2hvdChwLCBub3csIHNkKSAoKGxvbmcgbG9uZykgKChub3cpIC0gKHApLT5sYXN0X3JhbikJXAogCQkJCTwgKGxvbmcgbG9uZykgKHNkKS0+Y2FjaGVfaG90X3RpbWUpCiAKLXZvaWQgX19wdXRfdGFza19zdHJ1Y3RfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApCi17Ci0JX19wdXRfdGFza19zdHJ1Y3QoY29udGFpbmVyX29mKHJocCwgc3RydWN0IHRhc2tfc3RydWN0LCByY3UpKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoX19wdXRfdGFza19zdHJ1Y3RfY2IpOwotCiAvKgogICogVGhlc2UgYXJlIHRoZSBydW5xdWV1ZSBkYXRhIHN0cnVjdHVyZXM6CiAgKi8KQEAgLTI0NCw2ICsyMzcsNyBAQAogCiAJdGFza190ICptaWdyYXRpb25fdGhyZWFkOwogCXN0cnVjdCBsaXN0X2hlYWQgbWlncmF0aW9uX3F1ZXVlOworCWludCBjcHU7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCkBAIC03MTQsMTIgKzcwOCw2IEBACiAJCQkJCQlERUZfVElNRVNMSUNFKTsKIAkJfSBlbHNlIHsKIAkJCS8qCi0JCQkgKiBUaGUgbG93ZXIgdGhlIHNsZWVwIGF2ZyBhIHRhc2sgaGFzIHRoZSBtb3JlCi0JCQkgKiByYXBpZGx5IGl0IHdpbGwgcmlzZSB3aXRoIHNsZWVwIHRpbWUuCi0JCQkgKi8KLQkJCXNsZWVwX3RpbWUgKj0gKE1BWF9CT05VUyAtIENVUlJFTlRfQk9OVVMocCkpID8gOiAxOwotCi0JCQkvKgogCQkJICogVGFza3Mgd2FraW5nIGZyb20gdW5pbnRlcnJ1cHRpYmxlIHNsZWVwIGFyZQogCQkJICogbGltaXRlZCBpbiB0aGVpciBzbGVlcF9hdmcgcmlzZSBhcyB0aGV5CiAJCQkgKiBhcmUgbGlrZWx5IHRvIGJlIHdhaXRpbmcgb24gSS9PCkBAIC0xNjY3LDYgKzE2NTUsOSBAQAogLyoKICAqIGRvdWJsZV9ycV9sb2NrIC0gc2FmZWx5IGxvY2sgdHdvIHJ1bnF1ZXVlcwogICoKKyAqIFdlIG11c3QgdGFrZSB0aGVtIGluIGNwdSBvcmRlciB0byBtYXRjaCBjb2RlIGluCisgKiBkZXBlbmRlbnRfc2xlZXBlciBhbmQgd2FrZV9kZXBlbmRlbnRfc2xlZXBlci4KKyAqCiAgKiBOb3RlIHRoaXMgZG9lcyBub3QgZGlzYWJsZSBpbnRlcnJ1cHRzIGxpa2UgdGFza19ycV9sb2NrLAogICogeW91IG5lZWQgdG8gZG8gc28gbWFudWFsbHkgYmVmb3JlIGNhbGxpbmcuCiAgKi8KQEAgLTE2NzgsNyArMTY2OSw3IEBACiAJCXNwaW5fbG9jaygmcnExLT5sb2NrKTsKIAkJX19hY3F1aXJlKHJxMi0+bG9jayk7CS8qIEZha2UgaXQgb3V0IDspICovCiAJfSBlbHNlIHsKLQkJaWYgKHJxMSA8IHJxMikgeworCQlpZiAocnExLT5jcHUgPCBycTItPmNwdSkgewogCQkJc3Bpbl9sb2NrKCZycTEtPmxvY2spOwogCQkJc3Bpbl9sb2NrKCZycTItPmxvY2spOwogCQl9IGVsc2UgewpAQCAtMTcxNCw3ICsxNzA1LDcgQEAKIAlfX2FjcXVpcmVzKHRoaXNfcnEtPmxvY2spCiB7CiAJaWYgKHVubGlrZWx5KCFzcGluX3RyeWxvY2soJmJ1c2llc3QtPmxvY2spKSkgewotCQlpZiAoYnVzaWVzdCA8IHRoaXNfcnEpIHsKKwkJaWYgKGJ1c2llc3QtPmNwdSA8IHRoaXNfcnEtPmNwdSkgewogCQkJc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwogCQkJc3Bpbl9sb2NrKCZidXNpZXN0LT5sb2NrKTsKIAkJCXNwaW5fbG9jaygmdGhpc19ycS0+bG9jayk7CkBAIC0yODgyLDcgKzI4NzMsNyBAQAogCSAqLwogCWlmIChsaWtlbHkoIWN1cnJlbnQtPmV4aXRfc3RhdGUpKSB7CiAJCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAic2NoZWR1bGluZyB3aGlsZSBhdG9taWM6ICIKKwkJCXByaW50ayhLRVJOX0VSUiAiQlVHOiBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYzogIgogCQkJCSIlcy8weCUwOHgvJWRcbiIsCiAJCQkJY3VycmVudC0+Y29tbSwgcHJlZW1wdF9jb3VudCgpLCBjdXJyZW50LT5waWQpOwogCQkJZHVtcF9zdGFjaygpOwpAQCAtNDAyOCw2ICs0MDE5LDggQEAKIAkgKi8KIAlpZiAodW5saWtlbHkocHJlZW1wdF9jb3VudCgpKSkKIAkJcmV0dXJuOworCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpKQorCQlyZXR1cm47CiAJZG8gewogCQlhZGRfcHJlZW1wdF9jb3VudChQUkVFTVBUX0FDVElWRSk7CiAJCXNjaGVkdWxlKCk7CkBAIC00MzMzLDYgKzQzMjYsNyBAQAogCXJ1bnF1ZXVlX3QgKnJxID0gY3B1X3JxKGNwdSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlkbGUtPnRpbWVzdGFtcCA9IHNjaGVkX2Nsb2NrKCk7CiAJaWRsZS0+c2xlZXBfYXZnID0gMDsKIAlpZGxlLT5hcnJheSA9IE5VTEw7CiAJaWRsZS0+cHJpbyA9IE1BWF9QUklPOwpAQCAtNjAzOSw2ICs2MDMzLDcgQEAKIAkJcnEtPnB1c2hfY3B1ID0gMDsKIAkJcnEtPm1pZ3JhdGlvbl90aHJlYWQgPSBOVUxMOwogCQlJTklUX0xJU1RfSEVBRCgmcnEtPm1pZ3JhdGlvbl9xdWV1ZSk7CisJCXJxLT5jcHUgPSBpOwogI2VuZGlmCiAJCWF0b21pY19zZXQoJnJxLT5ucl9pb3dhaXQsIDApOwogCkBAIC02MDc5LDcgKzYwNzQsNyBAQAogCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcHJldl9qaWZmeSArIEhaKSAmJiBwcmV2X2ppZmZ5KQogCQkJcmV0dXJuOwogCQlwcmV2X2ppZmZ5ID0gamlmZmllczsKLQkJcHJpbnRrKEtFUk5fRVJSICJEZWJ1Zzogc2xlZXBpbmcgZnVuY3Rpb24gY2FsbGVkIGZyb20gaW52YWxpZCIKKwkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IHNsZWVwaW5nIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGludmFsaWQiCiAJCQkJIiBjb250ZXh0IGF0ICVzOiVkXG4iLCBmaWxlLCBsaW5lKTsKIAkJcHJpbnRrKCJpbl9hdG9taWMoKTolZCwgaXJxc19kaXNhYmxlZCgpOiVkXG4iLAogCQkJaW5fYXRvbWljKCksIGlycXNfZGlzYWJsZWQoKSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZWExNTQxMC4uNzVmNzM0MSAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMTkyMiw2ICsxOTIyLDggQEAKIAlzaWdzZXRfdCAqbWFzayA9ICZjdXJyZW50LT5ibG9ja2VkOwogCWludCBzaWduciA9IDA7CiAKKwl0cnlfdG9fZnJlZXplKCk7CisKIHJlbG9jazoKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlmb3IgKDs7KSB7CkBAIC0yMDk5LDEwICsyMTAxLDExIEBACiBpbnQgc2lncHJvY21hc2soaW50IGhvdywgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9sZHNldCkKIHsKIAlpbnQgZXJyb3I7Ci0Jc2lnc2V0X3Qgb2xkX2Jsb2NrOwogCiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jb2xkX2Jsb2NrID0gY3VycmVudC0+YmxvY2tlZDsKKwlpZiAob2xkc2V0KQorCQkqb2xkc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKKwogCWVycm9yID0gMDsKIAlzd2l0Y2ggKGhvdykgewogCWNhc2UgU0lHX0JMT0NLOgpAQCAtMjExOSw4ICsyMTIyLDcgQEAKIAl9CiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWlmIChvbGRzZXQpCi0JCSpvbGRzZXQgPSBvbGRfYmxvY2s7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTIzMDcsNyArMjMwOSw2IEBACiAKIAkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7CiAKLQkJCXRyeV90b19mcmVlemUoKTsKIAkJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQkJc2lnID0gZGVxdWV1ZV9zaWduYWwoY3VycmVudCwgJnRoZXNlLCAmaW5mbyk7CiAJCQljdXJyZW50LT5ibG9ja2VkID0gY3VycmVudC0+cmVhbF9ibG9ja2VkOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggYWQzMjk1Yy4uZWM4ZmVkNCAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAvKgpAQCAtNDk1LDMgKzQ5NiwyMiBAQAogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7CiAJcmV0dXJuIDA7CiB9CisKKyNpZmRlZiBDT05GSUdfU01QCisvKgorICogQ2FsbCBhIGZ1bmN0aW9uIG9uIGFsbCBwcm9jZXNzb3JzCisgKi8KK2ludCBvbl9lYWNoX2NwdSh2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksIGludCB3YWl0KQoreworCWludCByZXQgPSAwOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcmV0ID0gc21wX2NhbGxfZnVuY3Rpb24oZnVuYywgaW5mbywgcmV0cnksIHdhaXQpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZnVuYyhpbmZvKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChvbl9lYWNoX2NwdSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMgYi9rZXJuZWwvc29mdGxvY2t1cC5jCmluZGV4IGM2NzE4OWEyLi5kOWIzZDU4IDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGxvY2t1cC5jCisrKyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKQEAgLTEsMTIgKzEsMTEgQEAKIC8qCiAgKiBEZXRlY3QgU29mdCBMb2NrdXBzCiAgKgotICogc3RhcnRlZCBieSBJbmdvIE1vbG5hciwgKEMpIDIwMDUsIFJlZCBIYXQKKyAqIHN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXIsIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCiAgKgogICogdGhpcyBjb2RlIGRldGVjdHMgc29mdCBsb2NrdXBzOiBpbmNpZGVudHMgaW4gd2hlcmUgb24gYSBDUFUKICAqIHRoZSBrZXJuZWwgZG9lcyBub3QgcmVzY2hlZHVsZSBmb3IgMTAgc2Vjb25kcyBvciBtb3JlLgogICovCi0KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTE3LDEzICsxNiwxNCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHByaW50X2xvY2spOwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGltZXN0YW1wKSA9IDA7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgcHJpbnRfdGltZXN0YW1wKSA9IDA7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdG91Y2hfdGltZXN0YW1wKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBwcmludF90aW1lc3RhbXApOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB3YXRjaGRvZ190YXNrKTsKIAogc3RhdGljIGludCBkaWRfcGFuaWMgPSAwOwotc3RhdGljIGludCBzb2Z0bG9ja19wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCi0JCQkJdm9pZCAqcHRyKQorCitzdGF0aWMgaW50Citzb2Z0bG9ja19wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlkaWRfcGFuaWMgPSAxOwogCkBAIC0zNiw3ICszNiw3IEBACiAKIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKQogewotCXBlcl9jcHUodGltZXN0YW1wLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IGppZmZpZXM7CisJcGVyX2NwdSh0b3VjaF90aW1lc3RhbXAsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpID0gamlmZmllczsKIH0KIEVYUE9SVF9TWU1CT0wodG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyk7CiAKQEAgLTQ0LDI1ICs0NCwzNSBAQAogICogVGhpcyBjYWxsYmFjayBydW5zIGZyb20gdGhlIHRpbWVyIGludGVycnVwdCwgYW5kIGNoZWNrcwogICogd2hldGhlciB0aGUgd2F0Y2hkb2cgdGhyZWFkIGhhcyBodW5nIG9yIG5vdDoKICAqLwotdm9pZCBzb2Z0bG9ja3VwX3RpY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIHNvZnRsb2NrdXBfdGljayh2b2lkKQogewogCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCA9IHBlcl9jcHUodGltZXN0YW1wLCB0aGlzX2NwdSk7CisJdW5zaWduZWQgbG9uZyB0b3VjaF90aW1lc3RhbXAgPSBwZXJfY3B1KHRvdWNoX3RpbWVzdGFtcCwgdGhpc19jcHUpOwogCi0JaWYgKHBlcl9jcHUocHJpbnRfdGltZXN0YW1wLCB0aGlzX2NwdSkgPT0gdGltZXN0YW1wKQorCS8qIHByZXZlbnQgZG91YmxlIHJlcG9ydHM6ICovCisJaWYgKHBlcl9jcHUocHJpbnRfdGltZXN0YW1wLCB0aGlzX2NwdSkgPT0gdG91Y2hfdGltZXN0YW1wIHx8CisJCWRpZF9wYW5pYyB8fAorCQkJIXBlcl9jcHUod2F0Y2hkb2dfdGFzaywgdGhpc19jcHUpKQogCQlyZXR1cm47CiAKLQkvKiBEbyBub3QgY2F1c2UgYSBzZWNvbmQgcGFuaWMgd2hlbiB0aGVyZSBhbHJlYWR5IHdhcyBvbmUgKi8KLQlpZiAoZGlkX3BhbmljKQorCS8qIGRvIG5vdCBwcmludCBkdXJpbmcgZWFybHkgYm9vdHVwOiAqLworCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpKSB7CisJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAkJcmV0dXJuOworCX0KIAotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVzdGFtcCArIDEwKkhaKSkgewotCQlwZXJfY3B1KHByaW50X3RpbWVzdGFtcCwgdGhpc19jcHUpID0gdGltZXN0YW1wOworCS8qIFdha2UgdXAgdGhlIGhpZ2gtcHJpbyB3YXRjaGRvZyB0YXNrIGV2ZXJ5IHNlY29uZDogKi8KKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0b3VjaF90aW1lc3RhbXAgKyBIWikpCisJCXdha2VfdXBfcHJvY2VzcyhwZXJfY3B1KHdhdGNoZG9nX3Rhc2ssIHRoaXNfY3B1KSk7CisKKwkvKiBXYXJuIGFib3V0IHVucmVhc29uYWJsZSAxMCsgc2Vjb25kcyBkZWxheXM6ICovCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdG91Y2hfdGltZXN0YW1wICsgMTAqSFopKSB7CisJCXBlcl9jcHUocHJpbnRfdGltZXN0YW1wLCB0aGlzX2NwdSkgPSB0b3VjaF90aW1lc3RhbXA7CiAKIAkJc3Bpbl9sb2NrKCZwcmludF9sb2NrKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IHNvZnQgbG9ja3VwIGRldGVjdGVkIG9uIENQVSMlZCFcbiIsCiAJCQl0aGlzX2NwdSk7Ci0JCXNob3dfcmVncyhyZWdzKTsKKwkJZHVtcF9zdGFjaygpOwogCQlzcGluX3VubG9jaygmcHJpbnRfbG9jayk7CiAJfQogfQpAQCAtNzcsMTggKzg3LDE2IEBACiAJc2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsIFNDSEVEX0ZJRk8sICZwYXJhbSk7CiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CiAKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCiAJLyoKLQkgKiBSdW4gYnJpZWZseSBvbmNlIHBlciBzZWNvbmQgLSBpZiB0aGlzIGdldHMgZGVsYXllZCBmb3IKLQkgKiBtb3JlIHRoYW4gMTAgc2Vjb25kcyB0aGVuIHRoZSBkZWJ1Zy1wcmludG91dCB0cmlnZ2VycwotCSAqIGluIHNvZnRsb2NrdXBfdGljaygpOgorCSAqIFJ1biBicmllZmx5IG9uY2UgcGVyIHNlY29uZCB0byByZXNldCB0aGUgc29mdGxvY2t1cCB0aW1lc3RhbXAuCisJICogSWYgdGhpcyBnZXRzIGRlbGF5ZWQgZm9yIG1vcmUgdGhhbiAxMCBzZWNvbmRzIHRoZW4gdGhlCisJICogZGVidWctcHJpbnRvdXQgdHJpZ2dlcnMgaW4gc29mdGxvY2t1cF90aWNrKCkuCiAJICovCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwMCk7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKKwkJc2NoZWR1bGUoKTsKIAl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTAsMTEgKzExOCwxMSBAQAogCQkJcHJpbnRrKCJ3YXRjaGRvZyBmb3IgJWkgZmFpbGVkXG4iLCBob3RjcHUpOwogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CiAJCX0KKyAgCQlwZXJfY3B1KHRvdWNoX3RpbWVzdGFtcCwgaG90Y3B1KSA9IGppZmZpZXM7CiAgIAkJcGVyX2NwdSh3YXRjaGRvZ190YXNrLCBob3RjcHUpID0gcDsKIAkJa3RocmVhZF9iaW5kKHAsIGhvdGNwdSk7CiAgCQlicmVhazsKIAljYXNlIENQVV9PTkxJTkU6Ci0KIAkJd2FrZV91cF9wcm9jZXNzKHBlcl9jcHUod2F0Y2hkb2dfdGFzaywgaG90Y3B1KSk7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQpAQCAtMTQ2LDQgKzE1NCwzIEBACiAKIAlub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljX2Jsb2NrKTsKIH0KLQpkaWZmIC0tZ2l0IGEva2VybmVsL3NwaW5sb2NrLmMgYi9rZXJuZWwvc3BpbmxvY2suYwppbmRleCAwMzc1ZmNkLi5kMWI4MTA3IDEwMDY0NAotLS0gYS9rZXJuZWwvc3BpbmxvY2suYworKysgYi9rZXJuZWwvc3BpbmxvY2suYwpAQCAtMTc5LDE2ICsxNzksMTYgQEAKICNkZWZpbmUgQlVJTERfTE9DS19PUFMob3AsIGxvY2t0eXBlKQkJCQkJXAogdm9pZCBfX2xvY2tmdW5jIF8jI29wIyNfbG9jayhsb2NrdHlwZSMjX3QgKmxvY2spCQkJXAogewkJCQkJCQkJCVwKLQlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCQlcCiAJZm9yICg7OykgewkJCQkJCQlcCisJCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJXAogCQlpZiAobGlrZWx5KF9yYXdfIyNvcCMjX3RyeWxvY2sobG9jaykpKQkJCVwKIAkJCWJyZWFrOwkJCQkJCVwKIAkJcHJlZW1wdF9lbmFibGUoKTsJCQkJCVwKKwkJCQkJCQkJCVwKIAkJaWYgKCEobG9jayktPmJyZWFrX2xvY2spCQkJCVwKIAkJCShsb2NrKS0+YnJlYWtfbG9jayA9IDE7CQkJCVwKIAkJd2hpbGUgKCFvcCMjX2Nhbl9sb2NrKGxvY2spICYmIChsb2NrKS0+YnJlYWtfbG9jaykJXAogCQkJY3B1X3JlbGF4KCk7CQkJCQlcCi0JCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJXAogCX0JCQkJCQkJCVwKIAkobG9jayktPmJyZWFrX2xvY2sgPSAwOwkJCQkJCVwKIH0JCQkJCQkJCQlcCkBAIC0xOTksMTkgKzE5OSwxOCBAQAogewkJCQkJCQkJCVwKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwcmVlbXB0X2Rpc2FibGUoKTsJCQkJCQlcCiAJZm9yICg7OykgewkJCQkJCQlcCisJCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJXAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCiAJCWlmIChsaWtlbHkoX3Jhd18jI29wIyNfdHJ5bG9jayhsb2NrKSkpCQkJXAogCQkJYnJlYWs7CQkJCQkJXAogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCVwKLQkJCQkJCQkJCVwKIAkJcHJlZW1wdF9lbmFibGUoKTsJCQkJCVwKKwkJCQkJCQkJCVwKIAkJaWYgKCEobG9jayktPmJyZWFrX2xvY2spCQkJCVwKIAkJCShsb2NrKS0+YnJlYWtfbG9jayA9IDE7CQkJCVwKIAkJd2hpbGUgKCFvcCMjX2Nhbl9sb2NrKGxvY2spICYmIChsb2NrKS0+YnJlYWtfbG9jaykJXAogCQkJY3B1X3JlbGF4KCk7CQkJCQlcCi0JCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJXAogCX0JCQkJCQkJCVwKIAkobG9jayktPmJyZWFrX2xvY2sgPSAwOwkJCQkJCVwKIAlyZXR1cm4gZmxhZ3M7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCBmOTEyMThhLi4zOGJjNzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0yMjQsMTggKzIyNCw2IEBACiAKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIpOwogCi0jaWZuZGVmIENPTkZJR19TRUNVUklUWQotaW50IGNhcGFibGUoaW50IGNhcCkKLXsKLSAgICAgICAgaWYgKGNhcF9yYWlzZWQoY3VycmVudC0+Y2FwX2VmZmVjdGl2ZSwgY2FwKSkgewotCSAgICAgICBjdXJyZW50LT5mbGFncyB8PSBQRl9TVVBFUlBSSVY7Ci0JICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChjYXBhYmxlKTsKLSNlbmRpZgotCiBzdGF0aWMgaW50IHNldF9vbmVfcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWNldmFsLCBpbnQgZXJyb3IpCiB7CiAJaW50IG5vX25pY2U7CkBAIC0xMjI3LDcgKzEyMTUsNyBAQAogCXN0cnVjdCBwaWQgKnBpZDsKIAlpbnQgZXJyID0gLUVQRVJNOwogCi0JZG93bigmdHR5X3NlbSk7CisJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKIAlwaWQgPSBmaW5kX3BpZChQSURUWVBFX1BHSUQsIGdyb3VwX2xlYWRlci0+cGlkKTsKQEAgLTEyNDEsNyArMTIyOSw3IEBACiAJZXJyID0gcHJvY2Vzc19ncm91cChncm91cF9sZWFkZXIpOwogb3V0OgogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwotCXVwKCZ0dHlfc2VtKTsKKwltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTM3NSw3ICsxMzYzLDcgQEAKIC8qIGEgc2ltcGxlIGJzZWFyY2ggKi8KIGludCBncm91cHNfc2VhcmNoKHN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvLCBnaWRfdCBncnApCiB7Ci0JaW50IGxlZnQsIHJpZ2h0OworCXVuc2lnbmVkIGludCBsZWZ0LCByaWdodDsKIAogCWlmICghZ3JvdXBfaW5mbykKIAkJcmV0dXJuIDA7CkBAIC0xMzgzLDcgKzEzNzEsNyBAQAogCWxlZnQgPSAwOwogCXJpZ2h0ID0gZ3JvdXBfaW5mby0+bmdyb3VwczsKIAl3aGlsZSAobGVmdCA8IHJpZ2h0KSB7Ci0JCWludCBtaWQgPSAobGVmdCtyaWdodCkvMjsKKwkJdW5zaWduZWQgaW50IG1pZCA9IChsZWZ0K3JpZ2h0KS8yOwogCQlpbnQgY21wID0gZ3JwIC0gR1JPVVBfQVQoZ3JvdXBfaW5mbywgbWlkKTsKIAkJaWYgKGNtcCA+IDApCiAJCQlsZWZ0ID0gbWlkICsgMTsKQEAgLTE0MzMsNyArMTQyMSw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogbm8gbmVlZCB0byBncmFiIHRhc2tfbG9jayBoZXJlOyBpdCBjYW5ub3QgY2hhbmdlICovCi0JZ2V0X2dyb3VwX2luZm8oY3VycmVudC0+Z3JvdXBfaW5mbyk7CiAJaSA9IGN1cnJlbnQtPmdyb3VwX2luZm8tPm5ncm91cHM7CiAJaWYgKGdpZHNldHNpemUpIHsKIAkJaWYgKGkgPiBnaWRzZXRzaXplKSB7CkBAIC0xNDQ2LDcgKzE0MzMsNiBAQAogCQl9CiAJfQogb3V0OgotCXB1dF9ncm91cF9pbmZvKGN1cnJlbnQtPmdyb3VwX2luZm8pOwogCXJldHVybiBpOwogfQogCkBAIC0xNDg3LDkgKzE0NzMsNyBAQAogewogCWludCByZXR2YWwgPSAxOwogCWlmIChncnAgIT0gY3VycmVudC0+ZnNnaWQpIHsKLQkJZ2V0X2dyb3VwX2luZm8oY3VycmVudC0+Z3JvdXBfaW5mbyk7CiAJCXJldHZhbCA9IGdyb3Vwc19zZWFyY2goY3VycmVudC0+Z3JvdXBfaW5mbywgZ3JwKTsKLQkJcHV0X2dyb3VwX2luZm8oY3VycmVudC0+Z3JvdXBfaW5mbyk7CiAJfQogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNTAwLDkgKzE0ODQsNyBAQAogewogCWludCByZXR2YWwgPSAxOwogCWlmIChncnAgIT0gY3VycmVudC0+ZWdpZCkgewotCQlnZXRfZ3JvdXBfaW5mbyhjdXJyZW50LT5ncm91cF9pbmZvKTsKIAkJcmV0dmFsID0gZ3JvdXBzX3NlYXJjaChjdXJyZW50LT5ncm91cF9pbmZvLCBncnApOwotCQlwdXRfZ3JvdXBfaW5mbyhjdXJyZW50LT5ncm91cF9pbmZvKTsKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE2MzAsMjAgKzE2MTIsMjEgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCBfX3VzZXIgKnJsaW0pCiB7CiAJc3RydWN0IHJsaW1pdCBuZXdfcmxpbSwgKm9sZF9ybGltOworCXVuc2lnbmVkIGxvbmcgaXRfcHJvZl9zZWNzOwogCWludCByZXR2YWw7CiAKIAlpZiAocmVzb3VyY2UgPj0gUkxJTV9OTElNSVRTKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZihjb3B5X2Zyb21fdXNlcigmbmV3X3JsaW0sIHJsaW0sIHNpemVvZigqcmxpbSkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3JsaW0sIHJsaW0sIHNpemVvZigqcmxpbSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLSAgICAgICBpZiAobmV3X3JsaW0ucmxpbV9jdXIgPiBuZXdfcmxpbS5ybGltX21heCkKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmIChuZXdfcmxpbS5ybGltX2N1ciA+IG5ld19ybGltLnJsaW1fbWF4KQorCQlyZXR1cm4gLUVJTlZBTDsKIAlvbGRfcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbSArIHJlc291cmNlOwogCWlmICgobmV3X3JsaW0ucmxpbV9tYXggPiBvbGRfcmxpbS0+cmxpbV9tYXgpICYmCiAJICAgICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmIChyZXNvdXJjZSA9PSBSTElNSVRfTk9GSUxFICYmIG5ld19ybGltLnJsaW1fbWF4ID4gTlJfT1BFTikKLQkJCXJldHVybiAtRVBFUk07CisJCXJldHVybiAtRVBFUk07CiAKIAlyZXR2YWwgPSBzZWN1cml0eV90YXNrX3NldHJsaW1pdChyZXNvdXJjZSwgJm5ld19ybGltKTsKIAlpZiAocmV0dmFsKQpAQCAtMTY1MywxOSArMTYzNiw0MCBAQAogCSpvbGRfcmxpbSA9IG5ld19ybGltOwogCXRhc2tfdW5sb2NrKGN1cnJlbnQtPmdyb3VwX2xlYWRlcik7CiAKLQlpZiAocmVzb3VyY2UgPT0gUkxJTUlUX0NQVSAmJiBuZXdfcmxpbS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZICYmCi0JICAgIChjcHV0aW1lX2VxKGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8Ci0JICAgICBuZXdfcmxpbS5ybGltX2N1ciA8PSBjcHV0aW1lX3RvX3NlY3MoCi0JCSAgICAgY3VycmVudC0+c2lnbmFsLT5pdF9wcm9mX2V4cGlyZXMpKSkgewotCQljcHV0aW1lX3QgY3B1dGltZSA9IHNlY3NfdG9fY3B1dGltZShuZXdfcmxpbS5ybGltX2N1cik7CisJaWYgKHJlc291cmNlICE9IFJMSU1JVF9DUFUpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBSTElNSVRfQ1BVIGhhbmRsaW5nLiAgIE5vdGUgdGhhdCB0aGUga2VybmVsIGZhaWxzIHRvIHJldHVybiBhbiBlcnJvcgorCSAqIGNvZGUgaWYgaXQgcmVqZWN0ZWQgdGhlIHVzZXIncyBhdHRlbXB0IHRvIHNldCBSTElNSVRfQ1BVLiAgVGhpcyBpcyBhCisJICogdmVyeSBsb25nLXN0YW5kaW5nIGVycm9yLCBhbmQgZml4aW5nIGl0IG5vdyByaXNrcyBicmVha2FnZSBvZgorCSAqIGFwcGxpY2F0aW9ucywgc28gd2UgbGl2ZSB3aXRoIGl0CisJICovCisJaWYgKG5ld19ybGltLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCisJCWdvdG8gb3V0OworCisJaXRfcHJvZl9zZWNzID0gY3B1dGltZV90b19zZWNzKGN1cnJlbnQtPnNpZ25hbC0+aXRfcHJvZl9leHBpcmVzKTsKKwlpZiAoaXRfcHJvZl9zZWNzID09IDAgfHwgbmV3X3JsaW0ucmxpbV9jdXIgPD0gaXRfcHJvZl9zZWNzKSB7CisJCXVuc2lnbmVkIGxvbmcgcmxpbV9jdXIgPSBuZXdfcmxpbS5ybGltX2N1cjsKKwkJY3B1dGltZV90IGNwdXRpbWU7CisKKwkJaWYgKHJsaW1fY3VyID09IDApIHsKKwkJCS8qCisJCQkgKiBUaGUgY2FsbGVyIGlzIGFza2luZyBmb3IgYW4gaW1tZWRpYXRlIFJMSU1JVF9DUFUKKwkJCSAqIGV4cGlyeS4gIEJ1dCB3ZSB1c2UgdGhlIHplcm8gdmFsdWUgdG8gbWVhbiAiaXQgd2FzCisJCQkgKiBuZXZlciBzZXQiLiAgU28gbGV0J3MgY2hlYXQgYW5kIG1ha2UgaXQgb25lIHNlY29uZAorCQkJICogaW5zdGVhZAorCQkJICovCisJCQlybGltX2N1ciA9IDE7CisJCX0KKwkJY3B1dGltZSA9IHNlY3NfdG9fY3B1dGltZShybGltX2N1cik7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlzZXRfcHJvY2Vzc19jcHVfdGltZXIoY3VycmVudCwgQ1BVQ0xPQ0tfUFJPRiwKLQkJCQkgICAgICAmY3B1dGltZSwgTlVMTCk7CisJCXNldF9wcm9jZXNzX2NwdV90aW1lcihjdXJyZW50LCBDUFVDTE9DS19QUk9GLCAmY3B1dGltZSwgTlVMTCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAl9Ci0KK291dDoKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY3Nyw5ICsxNjgxLDYgQEAKICAqIGEgbG90IHNpbXBsZXIhICAoV2hpY2ggd2UncmUgbm90IGRvaW5nIHJpZ2h0IG5vdyBiZWNhdXNlIHdlJ3JlIG5vdAogICogbWVhc3VyaW5nIHRoZW0geWV0KS4KICAqCi0gKiBUaGlzIGV4cGVjdHMgdG8gYmUgY2FsbGVkIHdpdGggdGFza2xpc3RfbG9jayByZWFkLWxvY2tlZCBvciBiZXR0ZXIsCi0gKiBhbmQgdGhlIHNpZ2xvY2sgbm90IGxvY2tlZC4gIEl0IG1heSBtb21lbnRhcmlseSB0YWtlIHRoZSBzaWdsb2NrLgotICoKICAqIFdoZW4gc2FtcGxpbmcgbXVsdGlwbGUgdGhyZWFkcyBmb3IgUlVTQUdFX1NFTEYsIHVuZGVyIFNNUCB3ZSBtaWdodCBoYXZlCiAgKiByYWNlcyB3aXRoIHRocmVhZHMgaW5jcmVtZW50aW5nIHRoZWlyIG93biBjb3VudGVycy4gIEJ1dCBzaW5jZSB3b3JkCiAgKiByZWFkcyBhcmUgYXRvbWljLCB3ZSBlaXRoZXIgZ2V0IG5ldyB2YWx1ZXMgb3Igb2xkIHZhbHVlcyBhbmQgd2UgZG9uJ3QKQEAgLTE2ODcsNiArMTY4OCwyNSBAQAogICogdGhlIGMqIGZpZWxkcyBmcm9tIHAtPnNpZ25hbCBmcm9tIHJhY2VzIHdpdGggZXhpdC5jIHVwZGF0aW5nIHRob3NlCiAgKiBmaWVsZHMgd2hlbiByZWFwaW5nLCBzbyBhIHNhbXBsZSBlaXRoZXIgZ2V0cyBhbGwgdGhlIGFkZGl0aW9ucyBvZiBhCiAgKiBnaXZlbiBjaGlsZCBhZnRlciBpdCdzIHJlYXBlZCwgb3Igbm9uZSBzbyB0aGlzIHNhbXBsZSBpcyBiZWZvcmUgcmVhcGluZy4KKyAqCisgKiB0YXNrbGlzdF9sb2NrIGxvY2tpbmcgb3B0aW1pc2F0aW9uOgorICogSWYgd2UgYXJlIGN1cnJlbnQgYW5kIHNpbmdsZSB0aHJlYWRlZCwgd2UgZG8gbm90IG5lZWQgdG8gdGFrZSB0aGUgdGFza2xpc3QKKyAqIGxvY2sgb3IgdGhlIHNpZ2xvY2suICBObyBvbmUgZWxzZSBjYW4gdGFrZSBvdXIgc2lnbmFsX3N0cnVjdCBhd2F5LAorICogbm8gb25lIGVsc2UgY2FuIHJlYXAgdGhlIGNoaWxkcmVuIHRvIHVwZGF0ZSBzaWduYWwtPmMqIGNvdW50ZXJzLCBhbmQKKyAqIG5vIG9uZSBlbHNlIGNhbiByYWNlIHdpdGggdGhlIHNpZ25hbC0+IGZpZWxkcy4KKyAqIElmIHdlIGRvIG5vdCB0YWtlIHRoZSB0YXNrbGlzdF9sb2NrLCB0aGUgc2lnbmFsLT4gZmllbGRzIGNvdWxkIGJlIHJlYWQKKyAqIG91dCBvZiBvcmRlciB3aGlsZSBhbm90aGVyIHRocmVhZCB3YXMganVzdCBleGl0aW5nLiBTbyB3ZSBwbGFjZSBhCisgKiByZWFkIG1lbW9yeSBiYXJyaWVyIHdoZW4gd2UgYXZvaWQgdGhlIGxvY2suICBPbiB0aGUgd3JpdGVyIHNpZGUsCisgKiB3cml0ZSBtZW1vcnkgYmFycmllciBpcyBpbXBsaWVkIGluICBfX2V4aXRfc2lnbmFsIGFzIF9fZXhpdF9zaWduYWwgcmVsZWFzZXMKKyAqIHRoZSBzaWdsb2NrIHNwaW5sb2NrIGFmdGVyIHVwZGF0aW5nIHRoZSBzaWduYWwtPiBmaWVsZHMuCisgKgorICogV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhlIHNpZ2xvY2sgd2hlbiB3ZSBhY2Nlc3MgdGhlIG5vbiBjKiBmaWVsZHMKKyAqIG9mIHRoZSBzaWduYWxfc3RydWN0IChmb3IgUlVTQUdFX1NFTEYpIGV2ZW4gaW4gbXVsdGl0aHJlYWRlZAorICogY2FzZSwgc2luY2Ugd2UgdGFrZSB0aGUgdGFza2xpc3QgbG9jayBmb3IgcmVhZCBhbmQgdGhlIG5vbiBjKiBzaWduYWwtPgorICogZmllbGRzIGFyZSB1cGRhdGVkIG9ubHkgaW4gX19leGl0X3NpZ25hbCwgd2hpY2ggaXMgY2FsbGVkIHdpdGgKKyAqIHRhc2tsaXN0X2xvY2sgdGFrZW4gZm9yIHdyaXRlLCBoZW5jZSB0aGVzZSB0d28gdGhyZWFkcyBjYW5ub3QgZXhlY3V0ZQorICogY29uY3VycmVudGx5LgorICoKICAqLwogCiBzdGF0aWMgdm9pZCBrX2dldHJ1c2FnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3aG8sIHN0cnVjdCBydXNhZ2UgKnIpCkBAIC0xNjk0LDE0ICsxNzE0LDI0IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY3B1dGltZV90IHV0aW1lLCBzdGltZTsKKwlpbnQgbmVlZF9sb2NrID0gMDsKIAogCW1lbXNldCgoY2hhciAqKSByLCAwLCBzaXplb2YgKnIpOwotCi0JaWYgKHVubGlrZWx5KCFwLT5zaWduYWwpKQotCQlyZXR1cm47Ci0KIAl1dGltZSA9IHN0aW1lID0gY3B1dGltZV96ZXJvOwogCisJaWYgKHAgIT0gY3VycmVudCB8fCAhdGhyZWFkX2dyb3VwX2VtcHR5KHApKQorCQluZWVkX2xvY2sgPSAxOworCisJaWYgKG5lZWRfbG9jaykgeworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlpZiAodW5saWtlbHkoIXAtPnNpZ25hbCkpIHsKKwkJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZQorCQkvKiBTZWUgbG9ja2luZyBjb21tZW50cyBhYm92ZSAqLworCQlzbXBfcm1iKCk7CisKIAlzd2l0Y2ggKHdobykgewogCQljYXNlIFJVU0FHRV9CT1RIOgogCQljYXNlIFJVU0FHRV9DSElMRFJFTjoKQEAgLTE3NDAsNiArMTc3MCw4IEBACiAJCQlCVUcoKTsKIAl9CiAKKwlpZiAobmVlZF9sb2NrKQorCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJY3B1dGltZV90b190aW1ldmFsKHV0aW1lLCAmci0+cnVfdXRpbWUpOwogCWNwdXRpbWVfdG9fdGltZXZhbChzdGltZSwgJnItPnJ1X3N0aW1lKTsKIH0KQEAgLTE3NDcsOSArMTc3OSw3IEBACiBpbnQgZ2V0cnVzYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdobywgc3RydWN0IHJ1c2FnZSBfX3VzZXIgKnJ1KQogewogCXN0cnVjdCBydXNhZ2UgcjsKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCWtfZ2V0cnVzYWdlKHAsIHdobywgJnIpOwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlyZXR1cm4gY29weV90b191c2VyKHJ1LCAmciwgc2l6ZW9mKHIpKSA/IC1FRkFVTFQgOiAwOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzX25pLmMgYi9rZXJuZWwvc3lzX25pLmMKaW5kZXggMTczMTNiOS4uMTA2NzA5MCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c19uaS5jCisrKyBiL2tlcm5lbC9zeXNfbmkuYwpAQCAtMTA0LDYgKzEwNCw4IEBACiBjb25kX3N5c2NhbGwoc3lzX3NldHVpZDE2KTsKIGNvbmRfc3lzY2FsbChzeXNfdm04Nm9sZCk7CiBjb25kX3N5c2NhbGwoc3lzX3ZtODYpOworY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfaXBjKTsKK2NvbmRfc3lzY2FsbChjb21wYXRfc3lzX3N5c2N0bCk7CiAKIC8qIGFyY2gtc3BlY2lmaWMgd2VhayBzeXNjYWxsIGVudHJpZXMgKi8KIGNvbmRfc3lzY2FsbChzeXNfcGNpY29uZmlnX3JlYWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDc2NTRkNTUuLmU4MjcyNmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTQ0LDEzICs0NCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKLSNpZmRlZiBDT05GSUdfUk9PVF9ORlMKLSNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KLSNlbmRpZgorZXh0ZXJuIGludCBwcm9jX25yX2ZpbGVzKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCisgICAgICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19TWVNDVEwpCiAKQEAgLTEyNiw2ICsxMjcsMTAgQEAKIGV4dGVybiBpbnQgYWNjdF9wYXJtW107CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JQTY0CitleHRlcm4gaW50IG5vX3VuYWxpZ25lZF93YXJuaW5nOworI2VuZGlmCisKIHN0YXRpYyBpbnQgcGFyc2VfdGFibGUoaW50IF9fdXNlciAqLCBpbnQsIHZvaWQgX191c2VyICosIHNpemVfdCBfX3VzZXIgKiwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90LAogCQkgICAgICAgY3RsX3RhYmxlICosIHZvaWQgKiopOwogc3RhdGljIGludCBwcm9jX2RvdXRzc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCkBAIC02MzgsNiArNjQzLDcgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NTVUpCiAJewogCQkuY3RsX25hbWUJPSBLRVJOX1JBTkRPTUlaRSwKIAkJLnByb2NuYW1lCT0gInJhbmRvbWl6ZV92YV9zcGFjZSIsCkBAIC02NDYsNiArNjUyLDcgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19TMzkwKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCiAJewogCQkuY3RsX25hbWUJPSBLRVJOX1NQSU5fUkVUUlksCkBAIC02NTYsNiArNjYzLDI2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FDUElfU0xFRVAKKwl7CisJCS5jdGxfbmFtZQk9IEtFUk5fQUNQSV9WSURFT19GTEFHUywKKwkJLnByb2NuYW1lCT0gImFjcGlfdmlkZW9fZmxhZ3MiLAorCQkuZGF0YQkJPSAmYWNwaV92aWRlb19mbGFncywKKwkJLm1heGxlbgkJPSBzaXplb2YgKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19JQTY0CisJeworCQkuY3RsX25hbWUJPSBLRVJOX0lBNjRfVU5BTElHTkVELAorCQkucHJvY25hbWUJPSAiaWdub3JlLXVuYWxpZ25lZC11c2VydHJhcCIsCisJCS5kYXRhCQk9ICZub191bmFsaWduZWRfd2FybmluZywKKwkJLm1heGxlbgkJPSBzaXplb2YgKGludCksCisJIAkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKyNlbmRpZgogCXsgLmN0bF9uYW1lID0gMCB9CiB9OwogCkBAIC03MTUsMTggKzc0MiwxOCBAQAogCXsKIAkJLmN0bF9uYW1lCT0gVk1fRElSVFlfV0JfQ1MsCiAJCS5wcm9jbmFtZQk9ICJkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzIiwKLQkJLmRhdGEJCT0gJmRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MpLAorCQkuZGF0YQkJPSAmZGlydHlfd3JpdGViYWNrX2ludGVydmFsLAorCQkubWF4bGVuCQk9IHNpemVvZihkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gJmRpcnR5X3dyaXRlYmFja19jZW50aXNlY3NfaGFuZGxlciwKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gVk1fRElSVFlfRVhQSVJFX0NTLAogCQkucHJvY25hbWUJPSAiZGlydHlfZXhwaXJlX2NlbnRpc2VjcyIsCi0JCS5kYXRhCQk9ICZkaXJ0eV9leHBpcmVfY2VudGlzZWNzLAotCQkubWF4bGVuCQk9IHNpemVvZihkaXJ0eV9leHBpcmVfY2VudGlzZWNzKSwKKwkJLmRhdGEJCT0gJmRpcnR5X2V4cGlyZV9pbnRlcnZhbCwKKwkJLm1heGxlbgkJPSBzaXplb2YoZGlydHlfZXhwaXJlX2ludGVydmFsKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMsCiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IFZNX05SX1BERkxVU0hfVEhSRUFEUywKQEAgLTgyMSw5ICs4NDgsOCBAQAogCQkuZGF0YQkJPSAmbGFwdG9wX21vZGUsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGxhcHRvcF9tb2RlKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAotCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKLQkJLmV4dHJhMQkJPSAmemVybywKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJCS5zdHJhdGVneQk9ICZzeXNjdGxfamlmZmllcywKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gVk1fQkxPQ0tfRFVNUCwKQEAgLTkxOSw3ICs5NDUsNyBAQAogCQkuZGF0YQkJPSAmZmlsZXNfc3RhdCwKIAkJLm1heGxlbgkJPSAzKnNpemVvZihpbnQpLAogCQkubW9kZQkJPSAwNDQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19ucl9maWxlcywKIAl9LAogCXsKIAkJLmN0bF9uYW1lCT0gRlNfTUFYRklMRSwKQEAgLTIwMjcsNiArMjA1Myw4IEBACiAJCQkJCSBpbnQgd3JpdGUsIHZvaWQgKmRhdGEpCiB7CiAJaWYgKHdyaXRlKSB7CisJCWlmICgqbHZhbHAgPiBMT05HX01BWCAvIEhaKQorCQkJcmV0dXJuIDE7CiAJCSp2YWxwID0gKm5lZ3AgPyAtKCpsdmFscCpIWikgOiAoKmx2YWxwKkhaKTsKIAl9IGVsc2UgewogCQlpbnQgdmFsID0gKnZhbHA7CkBAIC0yMDQ4LDYgKzIwNzYsOCBAQAogCQkJCQkJaW50IHdyaXRlLCB2b2lkICpkYXRhKQogewogCWlmICh3cml0ZSkgeworCQlpZiAoVVNFUl9IWiA8IEhaICYmICpsdmFscCA+IChMT05HX01BWCAvIEhaKSAqIFVTRVJfSFopCisJCQlyZXR1cm4gMTsKIAkJKnZhbHAgPSBjbG9ja190X3RvX2ppZmZpZXMoKm5lZ3AgPyAtKmx2YWxwIDogKmx2YWxwKTsKIAl9IGVsc2UgewogCQlpbnQgdmFsID0gKnZhbHA7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS5jIGIva2VybmVsL3RpbWUuYwppbmRleCA4MDQ1MzkxLi5lMDBhOTdiIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS5jCisrKyBiL2tlcm5lbC90aW1lLmMKQEAgLTIwMiwyNCArMjAyLDYgQEAKIAlyZXR1cm4gZG9fc3lzX3NldHRpbWVvZmRheSh0diA/ICZuZXdfdHMgOiBOVUxMLCB0eiA/ICZuZXdfdHogOiBOVUxMKTsKIH0KIAotbG9uZyBwcHNfb2Zmc2V0OwkJLyogcHBzIHRpbWUgb2Zmc2V0ICh1cykgKi8KLWxvbmcgcHBzX2ppdHRlciA9IE1BWFRJTUU7CS8qIHRpbWUgZGlzcGVyc2lvbiAoaml0dGVyKSAodXMpICovCi0KLWxvbmcgcHBzX2ZyZXE7CQkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIHBwbSkgKi8KLWxvbmcgcHBzX3N0YWJpbCA9IE1BWEZSRVE7CS8qIGZyZXF1ZW5jeSBkaXNwZXJzaW9uIChzY2FsZWQgcHBtKSAqLwotCi1sb25nIHBwc192YWxpZCA9IFBQU19WQUxJRDsJLyogcHBzIHNpZ25hbCB3YXRjaGRvZyBjb3VudGVyICovCi0KLWludCBwcHNfc2hpZnQgPSBQUFNfU0hJRlQ7CS8qIGludGVydmFsIGR1cmF0aW9uIChzKSAoc2hpZnQpICovCi0KLWxvbmcgcHBzX2ppdGNudDsJCS8qIGppdHRlciBsaW1pdCBleGNlZWRlZCAqLwotbG9uZyBwcHNfY2FsY250OwkJLyogY2FsaWJyYXRpb24gaW50ZXJ2YWxzICovCi1sb25nIHBwc19lcnJjbnQ7CQkvKiBjYWxpYnJhdGlvbiBlcnJvcnMgKi8KLWxvbmcgcHBzX3N0YmNudDsJCS8qIHN0YWJpbGl0eSBsaW1pdCBleGNlZWRlZCAqLwotCi0vKiBob29rIGZvciBhIGxvYWRhYmxlIGhhcmRwcHMga2VybmVsIG1vZHVsZSAqLwotdm9pZCAoKmhhcmRwcHNfcHRyKShzdHJ1Y3QgdGltZXZhbCAqKTsKLQogLyogd2UgY2FsbCB0aGlzIHRvIG5vdGlmeSB0aGUgYXJjaCB3aGVuIHRoZSBjbG9jayBpcyBiZWluZwogICogY29udHJvbGxlZC4gIElmIG5vIHN1Y2ggYXJjaCByb3V0aW5lLCBkbyBub3RoaW5nLgogICovCkBAIC0yNzksNyArMjYxLDcgQEAKIAkJICAgIHJlc3VsdCA9IC1FSU5WQUw7CiAJCSAgICBnb3RvIGxlYXZlOwogCQl9Ci0JCXRpbWVfZnJlcSA9IHR4Yy0+ZnJlcSAtIHBwc19mcmVxOworCQl0aW1lX2ZyZXEgPSB0eGMtPmZyZXE7CiAJICAgIH0KIAogCSAgICBpZiAodHhjLT5tb2RlcyAmIEFESl9NQVhFUlJPUikgewpAQCAtMzEyLDEwICsyOTQsOCBAQAogCQkgICAgaWYgKCh0aW1lX25leHRfYWRqdXN0ID0gdHhjLT5vZmZzZXQpID09IDApCiAJCQkgdGltZV9hZGp1c3QgPSAwOwogCQl9Ci0JCWVsc2UgaWYgKCB0aW1lX3N0YXR1cyAmIChTVEFfUExMIHwgU1RBX1BQU1RJTUUpICkgewotCQkgICAgbHRlbXAgPSAodGltZV9zdGF0dXMgJiAoU1RBX1BQU1RJTUUgfCBTVEFfUFBTU0lHTkFMKSkgPT0KLQkJICAgICAgICAgICAgKFNUQV9QUFNUSU1FIHwgU1RBX1BQU1NJR05BTCkgPwotCQkgICAgICAgICAgICBwcHNfb2Zmc2V0IDogdHhjLT5vZmZzZXQ7CisJCWVsc2UgaWYgKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgeworCQkgICAgbHRlbXAgPSB0eGMtPm9mZnNldDsKIAogCQkgICAgLyoKIAkJICAgICAqIFNjYWxlIHRoZSBwaGFzZSBhZGp1c3RtZW50IGFuZApAQCAtMzU2LDIzICszMzYsMTQgQEAKIAkJICAgIH0KIAkJICAgIHRpbWVfZnJlcSA9IG1pbih0aW1lX2ZyZXEsIHRpbWVfdG9sZXJhbmNlKTsKIAkJICAgIHRpbWVfZnJlcSA9IG1heCh0aW1lX2ZyZXEsIC10aW1lX3RvbGVyYW5jZSk7Ci0JCX0gLyogU1RBX1BMTCB8fCBTVEFfUFBTVElNRSAqLworCQl9IC8qIFNUQV9QTEwgKi8KIAkgICAgfSAvKiB0eGMtPm1vZGVzICYgQURKX09GRlNFVCAqLwogCSAgICBpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLKSB7CiAJCXRpY2tfdXNlYyA9IHR4Yy0+dGljazsKIAkJdGlja19uc2VjID0gVElDS19VU0VDX1RPX05TRUModGlja191c2VjKTsKIAkgICAgfQogCX0gLyogdHhjLT5tb2RlcyAqLwotbGVhdmU6CWlmICgodGltZV9zdGF0dXMgJiAoU1RBX1VOU1lOQ3xTVEFfQ0xPQ0tFUlIpKSAhPSAwCi0JICAgIHx8ICgodGltZV9zdGF0dXMgJiAoU1RBX1BQU0ZSRVF8U1RBX1BQU1RJTUUpKSAhPSAwCi0JCSYmICh0aW1lX3N0YXR1cyAmIFNUQV9QUFNTSUdOQUwpID09IDApCi0JICAgIC8qIHAuIDI0LCAoYikgKi8KLQkgICAgfHwgKCh0aW1lX3N0YXR1cyAmIChTVEFfUFBTVElNRXxTVEFfUFBTSklUVEVSKSkKLQkJPT0gKFNUQV9QUFNUSU1FfFNUQV9QUFNKSVRURVIpKQotCSAgICAvKiBwLiAyNCwgKGMpICovCi0JICAgIHx8ICgodGltZV9zdGF0dXMgJiBTVEFfUFBTRlJFUSkgIT0gMAotCQkmJiAodGltZV9zdGF0dXMgJiAoU1RBX1BQU1dBTkRFUnxTVEFfUFBTRVJST1IpKSAhPSAwKSkKLQkgICAgLyogcC4gMjQsIChkKSAqLworbGVhdmU6CWlmICgodGltZV9zdGF0dXMgJiAoU1RBX1VOU1lOQ3xTVEFfQ0xPQ0tFUlIpKSAhPSAwKQogCQlyZXN1bHQgPSBUSU1FX0VSUk9SOwogCQogCWlmICgodHhjLT5tb2RlcyAmIEFESl9PRkZTRVRfU0lOR0xFU0hPVCkgPT0gQURKX09GRlNFVF9TSU5HTEVTSE9UKQpAQCAtMzgwLDcgKzM1MSw3IEBACiAJZWxzZSB7CiAJICAgIHR4Yy0+b2Zmc2V0ID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQsIFNISUZUX1VQREFURSk7CiAJfQotCXR4Yy0+ZnJlcQkgICA9IHRpbWVfZnJlcSArIHBwc19mcmVxOworCXR4Yy0+ZnJlcQkgICA9IHRpbWVfZnJlcTsKIAl0eGMtPm1heGVycm9yCSAgID0gdGltZV9tYXhlcnJvcjsKIAl0eGMtPmVzdGVycm9yCSAgID0gdGltZV9lc3RlcnJvcjsKIAl0eGMtPnN0YXR1cwkgICA9IHRpbWVfc3RhdHVzOwpAQCAtMzg4LDE0ICszNTksMTYgQEAKIAl0eGMtPnByZWNpc2lvbgkgICA9IHRpbWVfcHJlY2lzaW9uOwogCXR4Yy0+dG9sZXJhbmNlCSAgID0gdGltZV90b2xlcmFuY2U7CiAJdHhjLT50aWNrCSAgID0gdGlja191c2VjOwotCXR4Yy0+cHBzZnJlcQkgICA9IHBwc19mcmVxOwotCXR4Yy0+aml0dGVyCSAgID0gcHBzX2ppdHRlciA+PiBQUFNfQVZHOwotCXR4Yy0+c2hpZnQJICAgPSBwcHNfc2hpZnQ7Ci0JdHhjLT5zdGFiaWwJICAgPSBwcHNfc3RhYmlsOwotCXR4Yy0+aml0Y250CSAgID0gcHBzX2ppdGNudDsKLQl0eGMtPmNhbGNudAkgICA9IHBwc19jYWxjbnQ7Ci0JdHhjLT5lcnJjbnQJICAgPSBwcHNfZXJyY250OwotCXR4Yy0+c3RiY250CSAgID0gcHBzX3N0YmNudDsKKworCS8qIFBQUyBpcyBub3QgaW1wbGVtZW50ZWQsIHNvIHRoZXNlIGFyZSB6ZXJvICovCisJdHhjLT5wcHNmcmVxCSAgID0gMDsKKwl0eGMtPmppdHRlcgkgICA9IDA7CisJdHhjLT5zaGlmdAkgICA9IDA7CisJdHhjLT5zdGFiaWwJICAgPSAwOworCXR4Yy0+aml0Y250CSAgID0gMDsKKwl0eGMtPmNhbGNudAkgICA9IDA7CisJdHhjLT5lcnJjbnQJICAgPSAwOworCXR4Yy0+c3RiY250CSAgID0gMDsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAlkb19nZXR0aW1lb2ZkYXkoJnR4Yy0+dGltZSk7CiAJbm90aWZ5X2FyY2hfY21vc190aW1lcigpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCBmZTNhOWE5Li5hYjE4OWRkIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtODYsNyArODYsOCBAQAogfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiB0eXBlZGVmIHN0cnVjdCB0dmVjX3RfYmFzZV9zIHR2ZWNfYmFzZV90Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHR2ZWNfYmFzZV90LCB0dmVjX2Jhc2VzKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh0dmVjX2Jhc2VfdCAqLCB0dmVjX2Jhc2VzKTsKK3N0YXRpYyB0dmVjX2Jhc2VfdCBib290X3R2ZWNfYmFzZXM7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcnVubmluZ190aW1lcih0dmVjX2Jhc2VfdCAqYmFzZSwKIAkJCQkJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQpAQCAtMTU3LDcgKzE1OCw3IEBACiB2b2lkIGZhc3RjYWxsIGluaXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewogCXRpbWVyLT5lbnRyeS5uZXh0ID0gTlVMTDsKLQl0aW1lci0+YmFzZSA9ICZwZXJfY3B1KHR2ZWNfYmFzZXMsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLnRfYmFzZTsKKwl0aW1lci0+YmFzZSA9ICZwZXJfY3B1KHR2ZWNfYmFzZXMsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLT50X2Jhc2U7CiB9CiBFWFBPUlRfU1lNQk9MKGluaXRfdGltZXIpOwogCkBAIC0yMTgsNyArMjE5LDcgQEAKIAkJcmV0ID0gMTsKIAl9CiAKLQluZXdfYmFzZSA9ICZfX2dldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOworCW5ld19iYXNlID0gX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKIAogCWlmIChiYXNlICE9ICZuZXdfYmFzZS0+dF9iYXNlKSB7CiAJCS8qCkBAIC0yNTgsNyArMjU5LDcgQEAKICAqLwogdm9pZCBhZGRfdGltZXJfb24oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCBpbnQgY3B1KQogewotCXR2ZWNfYmFzZV90ICpiYXNlID0gJnBlcl9jcHUodHZlY19iYXNlcywgY3B1KTsKKwl0dmVjX2Jhc2VfdCAqYmFzZSA9IHBlcl9jcHUodHZlY19iYXNlcywgY3B1KTsKICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICAgCUJVR19PTih0aW1lcl9wZW5kaW5nKHRpbWVyKSB8fCAhdGltZXItPmZ1bmN0aW9uKTsKQEAgLTQ4OSwxMCArNDkwLDIyIEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAqbnRlOwogCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKKwl1bnNpZ25lZCBsb25nIGhyX2V4cGlyZXMgPSBNQVhfSklGRllfT0ZGU0VUOworCWt0aW1lX3QgaHJfZGVsdGE7CiAJdHZlY190ICp2YXJyYXlbNF07CiAJaW50IGksIGo7CiAKLQliYXNlID0gJl9fZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CisJaHJfZGVsdGEgPSBocnRpbWVyX2dldF9uZXh0X2V2ZW50KCk7CisJaWYgKGhyX2RlbHRhLnR2NjQgIT0gS1RJTUVfTUFYKSB7CisJCXN0cnVjdCB0aW1lc3BlYyB0c2RlbHRhOworCQl0c2RlbHRhID0ga3RpbWVfdG9fdGltZXNwZWMoaHJfZGVsdGEpOworCQlocl9leHBpcmVzID0gdGltZXNwZWNfdG9famlmZmllcygmdHNkZWx0YSk7CisJCWlmIChocl9leHBpcmVzIDwgMykKKwkJCXJldHVybiBocl9leHBpcmVzICsgamlmZmllczsKKwl9CisJaHJfZXhwaXJlcyArPSBqaWZmaWVzOworCisJYmFzZSA9IF9fZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CiAJc3Bpbl9sb2NrKCZiYXNlLT50X2Jhc2UubG9jayk7CiAJZXhwaXJlcyA9IGJhc2UtPnRpbWVyX2ppZmZpZXMgKyAoTE9OR19NQVggPj4gMSk7CiAJbGlzdCA9IE5VTEw7CkBAIC01NDIsNiArNTU1LDEwIEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmJhc2UtPnRfYmFzZS5sb2NrKTsKKworCWlmICh0aW1lX2JlZm9yZShocl9leHBpcmVzLCBleHBpcmVzKSkKKwkJcmV0dXJuIGhyX2V4cGlyZXM7CisKIAlyZXR1cm4gZXhwaXJlczsKIH0KICNlbmRpZgpAQCAtNjgwLDE4ICs2OTcsOSBAQAogCiAJLyoKIAkgKiBDb21wdXRlIHRoZSBmcmVxdWVuY3kgZXN0aW1hdGUgYW5kIGFkZGl0aW9uYWwgcGhhc2UgYWRqdXN0bWVudCBkdWUKLQkgKiB0byBmcmVxdWVuY3kgZXJyb3IgZm9yIHRoZSBuZXh0IHNlY29uZC4gV2hlbiB0aGUgUFBTIHNpZ25hbCBpcwotCSAqIGVuZ2FnZWQsIGduYXcgb24gdGhlIHdhdGNoZG9nIGNvdW50ZXIgYW5kIHVwZGF0ZSB0aGUgZnJlcXVlbmN5Ci0JICogY29tcHV0ZWQgYnkgdGhlIHBsbCBhbmQgdGhlIFBQUyBzaWduYWwuCisJICogdG8gZnJlcXVlbmN5IGVycm9yIGZvciB0aGUgbmV4dCBzZWNvbmQuCiAJICovCi0JcHBzX3ZhbGlkKys7Ci0JaWYgKHBwc192YWxpZCA9PSBQUFNfVkFMSUQpIHsJLyogUFBTIHNpZ25hbCBsb3N0ICovCi0JCXBwc19qaXR0ZXIgPSBNQVhUSU1FOwotCQlwcHNfc3RhYmlsID0gTUFYRlJFUTsKLQkJdGltZV9zdGF0dXMgJj0gfihTVEFfUFBTU0lHTkFMIHwgU1RBX1BQU0pJVFRFUiB8Ci0JCQkJU1RBX1BQU1dBTkRFUiB8IFNUQV9QUFNFUlJPUik7Ci0JfQotCWx0ZW1wID0gdGltZV9mcmVxICsgcHBzX2ZyZXE7CisJbHRlbXAgPSB0aW1lX2ZyZXE7CiAJdGltZV9hZGogKz0gc2hpZnRfcmlnaHQobHRlbXAsKFNISUZUX1VTRUMgKyBTSElGVF9IWiAtIFNISUZUX1NDQUxFKSk7CiAKICNpZiBIWiA9PSAxMDAKQEAgLTg4NSw3ICs4OTMsNyBAQAogICovCiBzdGF0aWMgdm9pZCBydW5fdGltZXJfc29mdGlycShzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCiB7Ci0JdHZlY19iYXNlX3QgKmJhc2UgPSAmX19nZXRfY3B1X3Zhcih0dmVjX2Jhc2VzKTsKKwl0dmVjX2Jhc2VfdCAqYmFzZSA9IF9fZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CiAKICAJaHJ0aW1lcl9ydW5fcXVldWVzKCk7CiAJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgYmFzZS0+dGltZXJfamlmZmllcykpCkBAIC04OTgsNiArOTA2LDcgQEAKIHZvaWQgcnVuX2xvY2FsX3RpbWVycyh2b2lkKQogewogCXJhaXNlX3NvZnRpcnEoVElNRVJfU09GVElSUSk7CisJc29mdGxvY2t1cF90aWNrKCk7CiB9CiAKIC8qCkBAIC05MjUsOCArOTM0LDkgQEAKIHZvaWQgZG9fdGltZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJamlmZmllc182NCsrOworCS8qIHByZXZlbnQgbG9hZGluZyBqaWZmaWVzIGJlZm9yZSBzdG9yaW5nIG5ldyBqaWZmaWVzXzY0IHZhbHVlLiAqLworCWJhcnJpZXIoKTsKIAl1cGRhdGVfdGltZXMoKTsKLQlzb2Z0bG9ja3VwX3RpY2socmVncyk7CiB9CiAKICNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KQEAgLTkzNywxOSArOTQ3LDcgQEAKICAqLwogYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5c19hbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcykKIHsKLQlzdHJ1Y3QgaXRpbWVydmFsIGl0X25ldywgaXRfb2xkOwotCXVuc2lnbmVkIGludCBvbGRhbGFybTsKLQotCWl0X25ldy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdF9uZXcuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IDA7Ci0JaXRfbmV3Lml0X3ZhbHVlLnR2X3NlYyA9IHNlY29uZHM7Ci0JaXRfbmV3Lml0X3ZhbHVlLnR2X3VzZWMgPSAwOwotCWRvX3NldGl0aW1lcihJVElNRVJfUkVBTCwgJml0X25ldywgJml0X29sZCk7Ci0Jb2xkYWxhcm0gPSBpdF9vbGQuaXRfdmFsdWUudHZfc2VjOwotCS8qIGVoaGguLiBXZSBjYW4ndCByZXR1cm4gMCBpZiB3ZSBoYXZlIGFuIGFsYXJtIHBlbmRpbmcuLiAqLwotCS8qIEFuZCB3ZSdkIGJldHRlciByZXR1cm4gdG9vIG11Y2ggdGhhbiB0b28gbGl0dGxlIGFueXdheSAqLwotCWlmICgoIW9sZGFsYXJtICYmIGl0X29sZC5pdF92YWx1ZS50dl91c2VjKSB8fCBpdF9vbGQuaXRfdmFsdWUudHZfdXNlYyA+PSA1MDAwMDApCi0JCW9sZGFsYXJtKys7Ci0JcmV0dXJuIG9sZGFsYXJtOworCXJldHVybiBhbGFybV9zZXRpdGltZXIoc2Vjb25kcyk7CiB9CiAKICNlbmRpZgpAQCAtMTIzOCwxMiArMTIzNiwzMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF90aW1lcnNfY3B1KGludCBjcHUpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3RpbWVyc19jcHUoaW50IGNwdSkKIHsKIAlpbnQgajsKIAl0dmVjX2Jhc2VfdCAqYmFzZTsKIAotCWJhc2UgPSAmcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpOworCWJhc2UgPSBwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSk7CisJaWYgKCFiYXNlKSB7CisJCXN0YXRpYyBjaGFyIGJvb3RfZG9uZTsKKworCQkvKgorCQkgKiBDYW5ub3QgZG8gYWxsb2NhdGlvbiBpbiBpbml0X3RpbWVycyBhcyB0aGF0IHJ1bnMgYmVmb3JlIHRoZQorCQkgKiBhbGxvY2F0b3IgaW5pdGlhbGl6ZXMgKGFuZCB3b3VsZCB3YXN0ZSBtZW1vcnkgaWYgdGhlcmUgYXJlCisJCSAqIG1vcmUgcG9zc2libGUgQ1BVcyB0aGFuIHdpbGwgZXZlciBiZSBpbnN0YWxsZWQvYnJvdWdodCB1cCkuCisJCSAqLworCQlpZiAoYm9vdF9kb25lKSB7CisJCQliYXNlID0ga21hbGxvY19ub2RlKHNpemVvZigqYmFzZSksIEdGUF9LRVJORUwsCisJCQkJCQljcHVfdG9fbm9kZShjcHUpKTsKKwkJCWlmICghYmFzZSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCW1lbXNldChiYXNlLCAwLCBzaXplb2YoKmJhc2UpKTsKKwkJfSBlbHNlIHsKKwkJCWJhc2UgPSAmYm9vdF90dmVjX2Jhc2VzOworCQkJYm9vdF9kb25lID0gMTsKKwkJfQorCQlwZXJfY3B1KHR2ZWNfYmFzZXMsIGNwdSkgPSBiYXNlOworCX0KIAlzcGluX2xvY2tfaW5pdCgmYmFzZS0+dF9iYXNlLmxvY2spOwogCWZvciAoaiA9IDA7IGogPCBUVk5fU0laRTsgaisrKSB7CiAJCUlOSVRfTElTVF9IRUFEKGJhc2UtPnR2NS52ZWMgKyBqKTsKQEAgLTEyNTUsNiArMTI3Myw3IEBACiAJCUlOSVRfTElTVF9IRUFEKGJhc2UtPnR2MS52ZWMgKyBqKTsKIAogCWJhc2UtPnRpbWVyX2ppZmZpZXMgPSBqaWZmaWVzOworCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCkBAIC0xMjc3LDggKzEyOTYsOCBAQAogCWludCBpOwogCiAJQlVHX09OKGNwdV9vbmxpbmUoY3B1KSk7Ci0Jb2xkX2Jhc2UgPSAmcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpOwotCW5ld19iYXNlID0gJmdldF9jcHVfdmFyKHR2ZWNfYmFzZXMpOworCW9sZF9iYXNlID0gcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpOworCW5ld19iYXNlID0gZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXNwaW5fbG9jaygmbmV3X2Jhc2UtPnRfYmFzZS5sb2NrKTsKQEAgLTEzMDgsNyArMTMyNyw4IEBACiAJbG9uZyBjcHUgPSAobG9uZyloY3B1OwogCXN3aXRjaChhY3Rpb24pIHsKIAljYXNlIENQVV9VUF9QUkVQQVJFOgotCQlpbml0X3RpbWVyc19jcHUoY3B1KTsKKwkJaWYgKGluaXRfdGltZXJzX2NwdShjcHUpIDwgMCkKKwkJCXJldHVybiBOT1RJRllfQkFEOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9ERUFEOgpAQCAtMTMzNiw4ICsxMzU2LDggQEAKIAogI2lmZGVmIENPTkZJR19USU1FX0lOVEVSUE9MQVRJT04KIAotc3RydWN0IHRpbWVfaW50ZXJwb2xhdG9yICp0aW1lX2ludGVycG9sYXRvcjsKLXN0YXRpYyBzdHJ1Y3QgdGltZV9pbnRlcnBvbGF0b3IgKnRpbWVfaW50ZXJwb2xhdG9yX2xpc3Q7CitzdHJ1Y3QgdGltZV9pbnRlcnBvbGF0b3IgKnRpbWVfaW50ZXJwb2xhdG9yIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc3RydWN0IHRpbWVfaW50ZXJwb2xhdG9yICp0aW1lX2ludGVycG9sYXRvcl9saXN0IF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWVfaW50ZXJwb2xhdG9yX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHU2NCB0aW1lX2ludGVycG9sYXRvcl9nZXRfY3ljbGVzKHVuc2lnbmVkIGludCBzcmMpCkBAIC0xMzUxLDEwICsxMzcxLDEwIEBACiAJCQlyZXR1cm4geCgpOwogCiAJCWNhc2UgVElNRV9TT1VSQ0VfTU1JTzY0CToKLQkJCXJldHVybiByZWFkcSgodm9pZCBfX2lvbWVtICopIHRpbWVfaW50ZXJwb2xhdG9yLT5hZGRyKTsKKwkJCXJldHVybiByZWFkcV9yZWxheGVkKCh2b2lkIF9faW9tZW0gKil0aW1lX2ludGVycG9sYXRvci0+YWRkcik7CiAKIAkJY2FzZSBUSU1FX1NPVVJDRV9NTUlPMzIJOgotCQkJcmV0dXJuIHJlYWRsKCh2b2lkIF9faW9tZW0gKikgdGltZV9pbnRlcnBvbGF0b3ItPmFkZHIpOworCQkJcmV0dXJuIHJlYWRsX3JlbGF4ZWQoKHZvaWQgX19pb21lbSAqKXRpbWVfaW50ZXJwb2xhdG9yLT5hZGRyKTsKIAogCQlkZWZhdWx0OiByZXR1cm4gZ2V0X2N5Y2xlcygpOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyLmMgYi9rZXJuZWwvdXNlci5jCmluZGV4IGQ5ZGVhZTQuLjIxMTY2NDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtMTA1LDE1ICsxMDUsMTkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCF1cCkKKwkJcmV0dXJuOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmICh1cCAmJiBhdG9taWNfZGVjX2FuZF9sb2NrKCZ1cC0+X19jb3VudCwgJnVpZGhhc2hfbG9jaykpIHsKKwlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmdXAtPl9fY291bnQsICZ1aWRoYXNoX2xvY2spKSB7CiAJCXVpZF9oYXNoX3JlbW92ZSh1cCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwogCQlrZXlfcHV0KHVwLT51aWRfa2V5cmluZyk7CiAJCWtleV9wdXQodXAtPnNlc3Npb25fa2V5cmluZyk7CiAJCWttZW1fY2FjaGVfZnJlZSh1aWRfY2FjaGVwLCB1cCk7Ci0JCXNwaW5fdW5sb2NrKCZ1aWRoYXNoX2xvY2spOworCX0gZWxzZSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKiBhbGxvY191aWQodWlkX3QgdWlkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IGIwNTJlMmMuLmU5ZTQ2NGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAKIC8qCiAgKiBUaGUgcGVyLUNQVSB3b3JrcXVldWUgKGlmIHNpbmdsZSB0aHJlYWQsIHdlIGFsd2F5cyB1c2UgdGhlIGZpcnN0CkBAIC00NzYsNiArNDc3LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmspOwogCisvKioKKyAqIGV4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0IC0gcmVsaWFibHkgZXhlY3V0ZSB0aGUgcm91dGluZSB3aXRoIHVzZXIgY29udGV4dAorICogQGZuOgkJdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUKKyAqIEBkYXRhOglkYXRhIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uCisgKiBAZXc6CQlndWFyYW50ZWVkIHN0b3JhZ2UgZm9yIHRoZSBleGVjdXRlIHdvcmsgc3RydWN0dXJlIChtdXN0CisgKgkJYmUgYXZhaWxhYmxlIHdoZW4gdGhlIHdvcmsgZXhlY3V0ZXMpCisgKgorICogRXhlY3V0ZXMgdGhlIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGlmIHByb2Nlc3MgY29udGV4dCBpcyBhdmFpbGFibGUsCisgKiBvdGhlcndpc2Ugc2NoZWR1bGVzIHRoZSBmdW5jdGlvbiBmb3IgZGVsYXllZCBleGVjdXRpb24uCisgKgorICogUmV0dXJuczoJMCAtIGZ1bmN0aW9uIHdhcyBleGVjdXRlZAorICoJCTEgLSBmdW5jdGlvbiB3YXMgc2NoZWR1bGVkIGZvciBleGVjdXRpb24KKyAqLworaW50IGV4ZWN1dGVfaW5fcHJvY2Vzc19jb250ZXh0KHZvaWQgKCpmbikodm9pZCAqZGF0YSksIHZvaWQgKmRhdGEsCisJCQkgICAgICAgc3RydWN0IGV4ZWN1dGVfd29yayAqZXcpCit7CisJaWYgKCFpbl9pbnRlcnJ1cHQoKSkgeworCQlmbihkYXRhKTsKKwkJcmV0dXJuIDA7CisJfQorCisJSU5JVF9XT1JLKCZldy0+d29yaywgZm4sIGRhdGEpOworCXNjaGVkdWxlX3dvcmsoJmV3LT53b3JrKTsKKworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQpOworCiBpbnQga2V2ZW50ZF91cCh2b2lkKQogewogCXJldHVybiBrZXZlbnRkX3dxICE9IE5VTEw7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IGEzMTRlNjYuLjBiZGEzYzUgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC03OCwxMyArNzgsMTcgQEAKIAkgIHRoaXMgYWRkcy4KIAogY29uZmlnIERFQlVHX1NMQUIKLQlib29sICJEZWJ1ZyBtZW1vcnkgYWxsb2NhdGlvbnMiCisJYm9vbCAiRGVidWcgc2xhYiBtZW1vcnkgYWxsb2NhdGlvbnMiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgU0xBQgogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaGF2ZSB0aGUga2VybmVsIGRvIGxpbWl0ZWQgdmVyaWZpY2F0aW9uIG9uIG1lbW9yeQogCSAgYWxsb2NhdGlvbiBhcyB3ZWxsIGFzIHBvaXNvbmluZyBtZW1vcnkgb24gZnJlZSB0byBjYXRjaCB1c2Ugb2YgZnJlZWQKIAkgIG1lbW9yeS4gVGhpcyBjYW4gbWFrZSBrbWFsbG9jL2tmcmVlLWludGVuc2l2ZSB3b3JrbG9hZHMgbXVjaCBzbG93ZXIuCiAKK2NvbmZpZyBERUJVR19TTEFCX0xFQUsKKwlib29sICJNZW1vcnkgbGVhayBkZWJ1Z2dpbmciCisJZGVwZW5kcyBvbiBERUJVR19TTEFCCisKIGNvbmZpZyBERUJVR19QUkVFTVBUCiAJYm9vbCAiRGVidWcgcHJlZW1wdGlibGUga2VybmVsIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBSRUVNUFQKQEAgLTE5NSw2ICsxOTksMTcgQEAKIAkgIHNvbWUgYXJjaGl0ZWN0dXJlcyBvciBpZiB5b3UgdXNlIGV4dGVybmFsIGRlYnVnZ2Vycy4KIAkgIElmIHlvdSBkb24ndCBkZWJ1ZyB0aGUga2VybmVsLCB5b3UgY2FuIHNheSBOLgogCitjb25maWcgVU5XSU5EX0lORk8KKwlib29sICJDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBmcmFtZSB1bndpbmQgaW5mb3JtYXRpb24iCisJZGVwZW5kcyBvbiAhSUE2NAorCWRlcGVuZHMgb24gIU1PRFVMRVMgfHwgIShNSVBTIHx8IFBBUklTQyB8fCBQUEMgfHwgU1VQRVJIIHx8IFNQQVJDNjQgfHwgVjg1MCkKKwlkZWZhdWx0IERFQlVHX0tFUk5FTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlIHRoZSByZXN1bHRpbmcga2VybmVsIGltYWdlIHdpbGwgYmUgc2xpZ2h0bHkgbGFyZ2VyCisJICBidXQgbm90IHNsb3dlciwgYW5kIGl0IHdpbGwgZ2l2ZSB2ZXJ5IHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisJICBJZiB5b3UgZG9uJ3QgZGVidWcgdGhlIGtlcm5lbCwgeW91IGNhbiBzYXkgTiwgYnV0IHdlIG1heSBub3QgYmUgYWJsZQorCSAgdG8gc29sdmUgcHJvYmxlbXMgd2l0aG91dCBmcmFtZSB1bndpbmQgaW5mb3JtYXRpb24gb3IgZnJhbWUgcG9pbnRlcnMuCisKIGNvbmZpZyBGT1JDRURfSU5MSU5JTkcKIAlib29sICJGb3JjZSBnY2MgdG8gaW5saW5lIGZ1bmN0aW9ucyBtYXJrZWQgJ2lubGluZSciCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCA2NDhiMmMxLi5mODI3ZTNjIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC03LDYgKzcsOCBAQAogCSBpZHIubyBkaXY2NC5vIGludF9zcXJ0Lm8gYml0bWFwLm8gZXh0YWJsZS5vIHByaW9fdHJlZS5vIFwKIAkgc2hhMS5vCiAKK2xpYi0kKENPTkZJR19TTVApICs9IGNwdW1hc2subworCiBsaWIteQkrPSBrb2JqZWN0Lm8ga3JlZi5vIGtvYmplY3RfdWV2ZW50Lm8ga2xpc3QubwogCiBvYmoteSArPSBzb3J0Lm8gcGFyc2VyLm8gaGFsZm1kNC5vIGlvbWFwX2NvcHkubwpkaWZmIC0tZ2l0IGEvbGliL2JpdG1hcC5jIGIvbGliL2JpdG1hcC5jCmluZGV4IDQ4ZTcwODMuLjhhY2FiMGUgMTAwNjQ0Ci0tLSBhL2xpYi9iaXRtYXAuYworKysgYi9saWIvYml0bWFwLmMKQEAgLTY3Niw4NCArNjc2LDE0MyBAQAogfQogRVhQT1JUX1NZTUJPTChiaXRtYXBfYml0cmVtYXApOwogCisvKgorICogQ29tbW9uIGNvZGUgZm9yIGJpdG1hcF8qX3JlZ2lvbigpIHJvdXRpbmVzLgorICoJYml0bWFwOiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBiaXRtYXAKKyAqCXBvczogdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVnaW9uCisgKglvcmRlcjogcmVnaW9uIHNpemUgKGxvZyBiYXNlIDIgb2YgbnVtYmVyIG9mIGJpdHMpCisgKglyZWdfb3A6IG9wZXJhdGlvbihzKSB0byBwZXJmb3JtIG9uIHRoYXQgcmVnaW9uIG9mIGJpdG1hcAorICoKKyAqIENhbiBzZXQsIHZlcmlmeSBhbmQvb3IgcmVsZWFzZSBhIHJlZ2lvbiBvZiBiaXRzIGluIGEgYml0bWFwLAorICogZGVwZW5kaW5nIG9uIHdoaWNoIGNvbWJpbmF0aW9uIG9mIFJFR19PUF8qIGZsYWcgYml0cyBpcyBzZXQuCisgKgorICogQSByZWdpb24gb2YgYSBiaXRtYXAgaXMgYSBzZXF1ZW5jZSBvZiBiaXRzIGluIHRoZSBiaXRtYXAsIG9mCisgKiBzb21lIHNpemUgJzEgPDwgb3JkZXInIChhIHBvd2VyIG9mIHR3byksIGFsaWduZWQgdG8gdGhhdCBzYW1lCisgKiAnMSA8PCBvcmRlcicgcG93ZXIgb2YgdHdvLgorICoKKyAqIFJldHVybnMgMSBpZiBSRUdfT1BfSVNGUkVFIHN1Y2NlZWRzIChyZWdpb24gaXMgYWxsIHplcm8gYml0cykuCisgKiBSZXR1cm5zIDAgaW4gYWxsIG90aGVyIGNhc2VzIGFuZCByZWdfb3BzLgorICovCisKK2VudW0geworCVJFR19PUF9JU0ZSRUUsCQkvKiB0cnVlIGlmIHJlZ2lvbiBpcyBhbGwgemVybyBiaXRzICovCisJUkVHX09QX0FMTE9DLAkJLyogc2V0IGFsbCBiaXRzIGluIHJlZ2lvbiAqLworCVJFR19PUF9SRUxFQVNFLAkJLyogY2xlYXIgYWxsIGJpdHMgaW4gcmVnaW9uICovCit9OworCitzdGF0aWMgaW50IF9fcmVnX29wKHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgaW50IHBvcywgaW50IG9yZGVyLCBpbnQgcmVnX29wKQoreworCWludCBuYml0c19yZWc7CQkvKiBudW1iZXIgb2YgYml0cyBpbiByZWdpb24gKi8KKwlpbnQgaW5kZXg7CQkvKiBpbmRleCBmaXJzdCBsb25nIG9mIHJlZ2lvbiBpbiBiaXRtYXAgKi8KKwlpbnQgb2Zmc2V0OwkJLyogYml0IG9mZnNldCByZWdpb24gaW4gYml0bWFwW2luZGV4XSAqLworCWludCBubG9uZ3NfcmVnOwkJLyogbnVtIGxvbmdzIHNwYW5uZWQgYnkgcmVnaW9uIGluIGJpdG1hcCAqLworCWludCBuYml0c2lubG9uZzsJLyogbnVtIGJpdHMgb2YgcmVnaW9uIGluIGVhY2ggc3Bhbm5lZCBsb25nICovCisJdW5zaWduZWQgbG9uZyBtYXNrOwkvKiBiaXRtYXNrIGZvciBvbmUgbG9uZyBvZiByZWdpb24gKi8KKwlpbnQgaTsJCQkvKiBzY2FucyBiaXRtYXAgYnkgbG9uZ3MgKi8KKwlpbnQgcmV0ID0gMDsJCS8qIHJldHVybiB2YWx1ZSAqLworCisJLyoKKwkgKiBFaXRoZXIgbmxvbmdzX3JlZyA9PSAxIChmb3Igc21hbGwgb3JkZXJzIHRoYXQgZml0IGluIG9uZSBsb25nKQorCSAqIG9yIChvZmZzZXQgPT0gMCAmJiBtYXNrID09IH4wVUwpIChmb3IgbGFyZ2VyIG11bHRpd29yZCBvcmRlcnMuKQorCSAqLworCW5iaXRzX3JlZyA9IDEgPDwgb3JkZXI7CisJaW5kZXggPSBwb3MgLyBCSVRTX1BFUl9MT05HOworCW9mZnNldCA9IHBvcyAtIChpbmRleCAqIEJJVFNfUEVSX0xPTkcpOworCW5sb25nc19yZWcgPSBCSVRTX1RPX0xPTkdTKG5iaXRzX3JlZyk7CisJbmJpdHNpbmxvbmcgPSBtaW4obmJpdHNfcmVnLCAgQklUU19QRVJfTE9ORyk7CisKKwkvKgorCSAqIENhbid0IGRvICJtYXNrID0gKDFVTCA8PCBuYml0c2lubG9uZykgLSAxIiwgYXMgdGhhdAorCSAqIG92ZXJmbG93cyBpZiBuYml0c2lubG9uZyA9PSBCSVRTX1BFUl9MT05HLgorCSAqLworCW1hc2sgPSAoMVVMIDw8IChuYml0c2lubG9uZyAtIDEpKTsKKwltYXNrICs9IG1hc2sgLSAxOworCW1hc2sgPDw9IG9mZnNldDsKKworCXN3aXRjaCAocmVnX29wKSB7CisJY2FzZSBSRUdfT1BfSVNGUkVFOgorCQlmb3IgKGkgPSAwOyBpIDwgbmxvbmdzX3JlZzsgaSsrKSB7CisJCQlpZiAoYml0bWFwW2luZGV4ICsgaV0gJiBtYXNrKQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCQlyZXQgPSAxOwkvKiBhbGwgYml0cyBpbiByZWdpb24gZnJlZSAoemVybykgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJFR19PUF9BTExPQzoKKwkJZm9yIChpID0gMDsgaSA8IG5sb25nc19yZWc7IGkrKykKKwkJCWJpdG1hcFtpbmRleCArIGldIHw9IG1hc2s7CisJCWJyZWFrOworCisJY2FzZSBSRUdfT1BfUkVMRUFTRToKKwkJZm9yIChpID0gMDsgaSA8IG5sb25nc19yZWc7IGkrKykKKwkJCWJpdG1hcFtpbmRleCArIGldICY9IH5tYXNrOworCQlicmVhazsKKwl9Citkb25lOgorCXJldHVybiByZXQ7Cit9CisKIC8qKgotICoJYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24gLSBmaW5kIGEgY29udGlndW91cyBhbGlnbmVkIG1lbSByZWdpb24KLSAqCUBiaXRtYXA6IGFuIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJpdG1hcAorICogYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24gLSBmaW5kIGEgY29udGlndW91cyBhbGlnbmVkIG1lbSByZWdpb24KKyAqCUBiaXRtYXA6IGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJpdG1hcAogICoJQGJpdHM6IG51bWJlciBvZiBiaXRzIGluIHRoZSBiaXRtYXAKLSAqCUBvcmRlcjogcmVnaW9uIHNpemUgdG8gZmluZCAoc2l6ZSBpcyBhY3R1YWxseSAxPDxvcmRlcikKKyAqCUBvcmRlcjogcmVnaW9uIHNpemUgKGxvZyBiYXNlIDIgb2YgbnVtYmVyIG9mIGJpdHMpIHRvIGZpbmQKICAqCi0gKiBUaGlzIGlzIHVzZWQgdG8gYWxsb2NhdGUgYSBtZW1vcnkgcmVnaW9uIGZyb20gYSBiaXRtYXAuICBUaGUgaWRlYSBpcwotICogdGhhdCB0aGUgcmVnaW9uIGhhcyB0byBiZSAxPDxvcmRlciBzaXplZCBhbmQgMTw8b3JkZXIgYWxpZ25lZCAodGhpcwotICogbWFrZXMgdGhlIHNlYXJjaCBhbGdvcml0aG0gbXVjaCBmYXN0ZXIpLgorICogRmluZCBhIHJlZ2lvbiBvZiBmcmVlICh6ZXJvKSBiaXRzIGluIGEgQGJpdG1hcCBvZiBAYml0cyBiaXRzIGFuZAorICogYWxsb2NhdGUgdGhlbSAoc2V0IHRoZW0gdG8gb25lKS4gIE9ubHkgY29uc2lkZXIgcmVnaW9ucyBvZiBsZW5ndGgKKyAqIGEgcG93ZXIgKEBvcmRlcikgb2YgdHdvLCBhbGlnbmVkIHRvIHRoYXQgcG93ZXIgb2YgdHdvLCB3aGljaAorICogbWFrZXMgdGhlIHNlYXJjaCBhbGdvcml0aG0gbXVjaCBmYXN0ZXIuCiAgKgotICogVGhlIHJlZ2lvbiBpcyBtYXJrZWQgYXMgc2V0IGJpdHMgaW4gdGhlIGJpdG1hcCBpZiBhIGZyZWUgb25lIGlzCi0gKiBmb3VuZC4KLSAqCi0gKiBSZXR1cm5zIGVpdGhlciBiZWdpbm5pbmcgb2YgcmVnaW9uIG9yIG5lZ2F0aXZlIGVycm9yCisgKiBSZXR1cm4gdGhlIGJpdCBvZmZzZXQgaW4gYml0bWFwIG9mIHRoZSBhbGxvY2F0ZWQgcmVnaW9uLAorICogb3IgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KIGludCBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBiaXRzLCBpbnQgb3JkZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrOwotCWludCBwYWdlcyA9IDEgPDwgb3JkZXI7Ci0JaW50IGk7CisJaW50IHBvczsJCS8qIHNjYW5zIGJpdG1hcCBieSByZWdpb25zIG9mIHNpemUgb3JkZXIgKi8KIAotCWlmKHBhZ2VzID4gQklUU19QRVJfTE9ORykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBtYWtlIGEgbWFzayBvZiB0aGUgb3JkZXIgKi8KLQltYXNrID0gKDF1bCA8PCAocGFnZXMgLSAxKSk7Ci0JbWFzayArPSBtYXNrIC0gMTsKLQotCS8qIHJ1biB1cCB0aGUgYml0bWFwIHBhZ2VzIGJpdHMgYXQgYSB0aW1lICovCi0JZm9yIChpID0gMDsgaSA8IGJpdHM7IGkgKz0gcGFnZXMpIHsKLQkJaW50IGluZGV4ID0gaS9CSVRTX1BFUl9MT05HOwotCQlpbnQgb2Zmc2V0ID0gaSAtIChpbmRleCAqIEJJVFNfUEVSX0xPTkcpOwotCQlpZigoYml0bWFwW2luZGV4XSAmIChtYXNrIDw8IG9mZnNldCkpID09IDApIHsKLQkJCS8qIHNldCByZWdpb24gaW4gYmltYXAgKi8KLQkJCWJpdG1hcFtpbmRleF0gfD0gKG1hc2sgPDwgb2Zmc2V0KTsKLQkJCXJldHVybiBpOwotCQl9Ci0JfQotCXJldHVybiAtRU5PTUVNOworCWZvciAocG9zID0gMDsgcG9zIDwgYml0czsgcG9zICs9ICgxIDw8IG9yZGVyKSkKKwkJaWYgKF9fcmVnX29wKGJpdG1hcCwgcG9zLCBvcmRlciwgUkVHX09QX0lTRlJFRSkpCisJCQlicmVhazsKKwlpZiAocG9zID09IGJpdHMpCisJCXJldHVybiAtRU5PTUVNOworCV9fcmVnX29wKGJpdG1hcCwgcG9zLCBvcmRlciwgUkVHX09QX0FMTE9DKTsKKwlyZXR1cm4gcG9zOwogfQogRVhQT1JUX1NZTUJPTChiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbik7CiAKIC8qKgotICoJYml0bWFwX3JlbGVhc2VfcmVnaW9uIC0gcmVsZWFzZSBhbGxvY2F0ZWQgYml0bWFwIHJlZ2lvbgotICoJQGJpdG1hcDogYSBwb2ludGVyIHRvIHRoZSBiaXRtYXAKLSAqCUBwb3M6IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZ2lvbgotICoJQG9yZGVyOiB0aGUgb3JkZXIgb2YgdGhlIGJpdHMgdG8gcmVsZWFzZSAobnVtYmVyIGlzIDE8PG9yZGVyKQorICogYml0bWFwX3JlbGVhc2VfcmVnaW9uIC0gcmVsZWFzZSBhbGxvY2F0ZWQgYml0bWFwIHJlZ2lvbgorICoJQGJpdG1hcDogYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgYml0bWFwCisgKglAcG9zOiBiZWdpbm5pbmcgb2YgYml0IHJlZ2lvbiB0byByZWxlYXNlCisgKglAb3JkZXI6IHJlZ2lvbiBzaXplIChsb2cgYmFzZSAyIG9mIG51bWJlciBvZiBiaXRzKSB0byByZWxlYXNlCiAgKgogICogVGhpcyBpcyB0aGUgY29tcGxlbWVudCB0byBfX2JpdG1hcF9maW5kX2ZyZWVfcmVnaW9uIGFuZCByZWxlYXNlcwogICogdGhlIGZvdW5kIHJlZ2lvbiAoYnkgY2xlYXJpbmcgaXQgaW4gdGhlIGJpdG1hcCkuCisgKgorICogTm8gcmV0dXJuIHZhbHVlLgogICovCiB2b2lkIGJpdG1hcF9yZWxlYXNlX3JlZ2lvbih1bnNpZ25lZCBsb25nICpiaXRtYXAsIGludCBwb3MsIGludCBvcmRlcikKIHsKLQlpbnQgcGFnZXMgPSAxIDw8IG9yZGVyOwotCXVuc2lnbmVkIGxvbmcgbWFzayA9ICgxdWwgPDwgKHBhZ2VzIC0gMSkpOwotCWludCBpbmRleCA9IHBvcy9CSVRTX1BFUl9MT05HOwotCWludCBvZmZzZXQgPSBwb3MgLSAoaW5kZXggKiBCSVRTX1BFUl9MT05HKTsKLQltYXNrICs9IG1hc2sgLSAxOwotCWJpdG1hcFtpbmRleF0gJj0gfihtYXNrIDw8IG9mZnNldCk7CisJX19yZWdfb3AoYml0bWFwLCBwb3MsIG9yZGVyLCBSRUdfT1BfUkVMRUFTRSk7CiB9CiBFWFBPUlRfU1lNQk9MKGJpdG1hcF9yZWxlYXNlX3JlZ2lvbik7CiAKKy8qKgorICogYml0bWFwX2FsbG9jYXRlX3JlZ2lvbiAtIGFsbG9jYXRlIGJpdG1hcCByZWdpb24KKyAqCUBiaXRtYXA6IGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJpdG1hcAorICoJQHBvczogYmVnaW5uaW5nIG9mIGJpdCByZWdpb24gdG8gYWxsb2NhdGUKKyAqCUBvcmRlcjogcmVnaW9uIHNpemUgKGxvZyBiYXNlIDIgb2YgbnVtYmVyIG9mIGJpdHMpIHRvIGFsbG9jYXRlCisgKgorICogQWxsb2NhdGUgKHNldCBiaXRzIGluKSBhIHNwZWNpZmllZCByZWdpb24gb2YgYSBiaXRtYXAuCisgKgorICogUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLUVCVVNZIGlmIHNwZWNpZmllZCByZWdpb24gd2Fzbid0CisgKiBmcmVlIChub3QgYWxsIGJpdHMgd2VyZSB6ZXJvKS4KKyAqLwogaW50IGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24odW5zaWduZWQgbG9uZyAqYml0bWFwLCBpbnQgcG9zLCBpbnQgb3JkZXIpCiB7Ci0JaW50IHBhZ2VzID0gMSA8PCBvcmRlcjsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSAoMXVsIDw8IChwYWdlcyAtIDEpKTsKLQlpbnQgaW5kZXggPSBwb3MvQklUU19QRVJfTE9ORzsKLQlpbnQgb2Zmc2V0ID0gcG9zIC0gKGluZGV4ICogQklUU19QRVJfTE9ORyk7Ci0KLQkvKiBXZSBkb24ndCBkbyByZWdpb25zIG9mIHBhZ2VzID4gQklUU19QRVJfTE9ORy4gIFRoZQotCSAqIGFsZ29yaXRobSB3b3VsZCBiZSBhIHNpbXBsZSBsb29rIGZvciBtdWx0aXBsZSB6ZXJvcyBpbiB0aGUKLQkgKiBhcnJheSwgYnV0IHRoZXJlJ3Mgbm8gZHJpdmVyIHRvZGF5IHRoYXQgbmVlZHMgdGhpcy4gIElmIHlvdQotCSAqIHRyaXAgdGhpcyBCVUcoKSwgeW91IGdldCB0byBjb2RlIGl0Li4uICovCi0JQlVHX09OKHBhZ2VzID4gQklUU19QRVJfTE9ORyk7Ci0JbWFzayArPSBtYXNrIC0gMTsKLQlpZiAoYml0bWFwW2luZGV4XSAmIChtYXNrIDw8IG9mZnNldCkpCisJaWYgKCFfX3JlZ19vcChiaXRtYXAsIHBvcywgb3JkZXIsIFJFR19PUF9JU0ZSRUUpKQogCQlyZXR1cm4gLUVCVVNZOwotCWJpdG1hcFtpbmRleF0gfD0gKG1hc2sgPDwgb2Zmc2V0KTsKKwlfX3JlZ19vcChiaXRtYXAsIHBvcywgb3JkZXIsIFJFR19PUF9BTExPQyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGJpdG1hcF9hbGxvY2F0ZV9yZWdpb24pOwpkaWZmIC0tZ2l0IGEvbGliL2NwdW1hc2suYyBiL2xpYi9jcHVtYXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2N2RjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9jcHVtYXNrLmMKQEAgLTAsMCArMSw0NSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworaW50IF9fZmlyc3RfY3B1KGNvbnN0IGNwdW1hc2tfdCAqc3JjcCkKK3sKKwlyZXR1cm4gbWluX3QoaW50LCBOUl9DUFVTLCBmaW5kX2ZpcnN0X2JpdChzcmNwLT5iaXRzLCBOUl9DUFVTKSk7Cit9CitFWFBPUlRfU1lNQk9MKF9fZmlyc3RfY3B1KTsKKworaW50IF9fbmV4dF9jcHUoaW50IG4sIGNvbnN0IGNwdW1hc2tfdCAqc3JjcCkKK3sKKwlyZXR1cm4gbWluX3QoaW50LCBOUl9DUFVTLCBmaW5kX25leHRfYml0KHNyY3AtPmJpdHMsIE5SX0NQVVMsIG4rMSkpOworfQorRVhQT1JUX1NZTUJPTChfX25leHRfY3B1KTsKKworLyoKKyAqIEZpbmQgdGhlIGhpZ2hlc3QgcG9zc2libGUgc21wX3Byb2Nlc3Nvcl9pZCgpCisgKgorICogTm90ZTogaWYgd2UncmUgcHJlcGFyZWQgdG8gYXNzdW1lIHRoYXQgY3B1X3Bvc3NpYmxlX21hcCBuZXZlciBjaGFuZ2VzCisgKiAocmVhc29uYWJsZSkgdGhlbiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBjYWNoZSBpdHMgcmV0dXJuIHZhbHVlLgorICovCitpbnQgaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCXVuc2lnbmVkIGhpZ2hlc3QgPSAwOworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfcG9zc2libGVfbWFwKQorCQloaWdoZXN0ID0gY3B1OworCXJldHVybiBoaWdoZXN0OworfQorRVhQT1JUX1NZTUJPTChoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCk7CisKK2ludCBfX2FueV9vbmxpbmVfY3B1KGNvbnN0IGNwdW1hc2tfdCAqbWFzaykKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqbWFzaykgeworCQlpZiAoY3B1X29ubGluZShjcHUpKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBjcHU7Cit9CitFWFBPUlRfU1lNQk9MKF9fYW55X29ubGluZV9jcHUpOwpkaWZmIC0tZ2l0IGEvbGliL2V4dGFibGUuYyBiL2xpYi9leHRhYmxlLmMKaW5kZXggMThkZjU3Yy4uMDFjMDhiNSAxMDA2NDQKLS0tIGEvbGliL2V4dGFibGUuYworKysgYi9saWIvZXh0YWJsZS5jCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqIGxpYi9leHRhYmxlLmMKICAqIERlcml2ZWQgZnJvbSBhcmNoL3BwYy9tbS9leHRhYmxlLmMgYW5kIGFyY2gvaTM4Ni9tbS9leHRhYmxlLmMuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4KZGlmZiAtLWdpdCBhL2xpYi9pb21hcF9jb3B5LmMgYi9saWIvaW9tYXBfY29weS5jCmluZGV4IGE2YjFlMjcuLjM1MTA0NWYgMTAwNjQ0Ci0tLSBhL2xpYi9pb21hcF9jb3B5LmMKKysrIGIvbGliL2lvbWFwX2NvcHkuYwpAQCAtMTUsOCArMTUsOCBAQAogICogSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAvKioKICAqIF9faW93cml0ZTMyX2NvcHkgLSBjb3B5IGRhdGEgdG8gTU1JTyBzcGFjZSwgaW4gMzItYml0IHVuaXRzCmRpZmYgLS1naXQgYS9saWIva29iamVjdC5jIGIvbGliL2tvYmplY3QuYwppbmRleCBlZmU2N2ZhLi4yNTIwNGE0IDEwMDY0NAotLS0gYS9saWIva29iamVjdC5jCisrKyBiL2xpYi9rb2JqZWN0LmMKQEAgLTE5NCw2ICsxOTQsMTcgQEAKIAkJdW5saW5rKGtvYmopOwogCQlpZiAocGFyZW50KQogCQkJa29iamVjdF9wdXQocGFyZW50KTsKKworCQkvKiBiZSBub2lzeSBvbiBlcnJvciBpc3N1ZXMgKi8KKwkJaWYgKGVycm9yID09IC1FRVhJU1QpCisJCQlwcmludGsoImtvYmplY3RfYWRkIGZhaWxlZCBmb3IgJXMgd2l0aCAtRUVYSVNULCAiCisJCQkgICAgICAgImRvbid0IHRyeSB0byByZWdpc3RlciB0aGluZ3Mgd2l0aCB0aGUgIgorCQkJICAgICAgICJzYW1lIG5hbWUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuIiwKKwkJCSAgICAgICBrb2JqZWN0X25hbWUoa29iaikpOworCQllbHNlCisJCQlwcmludGsoImtvYmplY3RfYWRkIGZhaWxlZCBmb3IgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBrb2JqZWN0X25hbWUoa29iaiksIGVycm9yKTsKKwkJZHVtcF9zdGFjaygpOwogCX0KIAogCXJldHVybiBlcnJvcjsKQEAgLTIwNywxOCArMjE4LDEzIEBACiAKIGludCBrb2JqZWN0X3JlZ2lzdGVyKHN0cnVjdCBrb2JqZWN0ICoga29iaikKIHsKLQlpbnQgZXJyb3IgPSAwOworCWludCBlcnJvciA9IC1FSU5WQUw7CiAJaWYgKGtvYmopIHsKIAkJa29iamVjdF9pbml0KGtvYmopOwogCQllcnJvciA9IGtvYmplY3RfYWRkKGtvYmopOwotCQlpZiAoZXJyb3IpIHsKLQkJCXByaW50aygia29iamVjdF9yZWdpc3RlciBmYWlsZWQgZm9yICVzICglZClcbiIsCi0JCQkgICAgICAga29iamVjdF9uYW1lKGtvYmopLGVycm9yKTsKLQkJCWR1bXBfc3RhY2soKTsKLQkJfSBlbHNlCisJCWlmICghZXJyb3IpCiAJCQlrb2JqZWN0X3VldmVudChrb2JqLCBLT0JKX0FERCk7Ci0JfSBlbHNlCi0JCWVycm9yID0gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0zNzksNiArMzg1LDQ0IEBACiB9CiAKIAorc3RhdGljIHZvaWQgZGlyX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJa2ZyZWUoa29iaik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGRpcl9rdHlwZSA9IHsKKwkucmVsZWFzZQk9IGRpcl9yZWxlYXNlLAorCS5zeXNmc19vcHMJPSBOVUxMLAorCS5kZWZhdWx0X2F0dHJzCT0gTlVMTCwKK307CisKKy8qKgorICoJa29iamVjdF9hZGRfZGlyIC0gYWRkIHN1YiBkaXJlY3Rvcnkgb2Ygb2JqZWN0LgorICoJQHBhcmVudDoJb2JqZWN0IGluIHdoaWNoIGEgZGlyZWN0b3J5IGlzIGNyZWF0ZWQuCisgKglAbmFtZToJZGlyZWN0b3J5IG5hbWUuCisgKgorICoJQWRkIGEgcGxhaW4gZGlyZWN0b3J5IG9iamVjdCBhcyBjaGlsZCBvZiBnaXZlbiBvYmplY3QuCisgKi8KK3N0cnVjdCBrb2JqZWN0ICprb2JqZWN0X2FkZF9kaXIoc3RydWN0IGtvYmplY3QgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qga29iamVjdCAqazsKKworCWlmICghcGFyZW50KQorCQlyZXR1cm4gTlVMTDsKKworCWsgPSBremFsbG9jKHNpemVvZigqayksIEdGUF9LRVJORUwpOworCWlmICghaykKKwkJcmV0dXJuIE5VTEw7CisKKwlrLT5wYXJlbnQgPSBwYXJlbnQ7CisJay0+a3R5cGUgPSAmZGlyX2t0eXBlOworCWtvYmplY3Rfc2V0X25hbWUoaywgbmFtZSk7CisJa29iamVjdF9yZWdpc3RlcihrKTsKKworCXJldHVybiBrOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa29iamVjdF9hZGRfZGlyKTsKKwogLyoqCiAgKglrc2V0X2luaXQgLSBpbml0aWFsaXplIGEga3NldCBmb3IgdXNlCiAgKglAazoJa3NldCAKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0X3VldmVudC5jIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKaW5kZXggMWIxOTg1Yy4uOTgyMjI2ZCAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTI2LDYgKzI2LDggQEAKICNkZWZpbmUgTlVNX0VOVlAJMzIJLyogbnVtYmVyIG9mIGVudiBwb2ludGVycyAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykgJiYgZGVmaW5lZChDT05GSUdfTkVUKQordTY0IHVldmVudF9zZXFudW07CitjaGFyIHVldmVudF9oZWxwZXJbVUVWRU5UX0hFTFBFUl9QQVRIX0xFTl0gPSAiL3NiaW4vaG90cGx1ZyI7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNlcXVlbmNlX2xvY2spOwogc3RhdGljIHN0cnVjdCBzb2NrICp1ZXZlbnRfc29jazsKIApAQCAtMzgsNiArNDAsMTAgQEAKIAkJcmV0dXJuICJyZW1vdmUiOwogCWNhc2UgS09CSl9DSEFOR0U6CiAJCXJldHVybiAiY2hhbmdlIjsKKwljYXNlIEtPQkpfTU9VTlQ6CisJCXJldHVybiAibW91bnQiOworCWNhc2UgS09CSl9VTU9VTlQ6CisJCXJldHVybiAidW1vdW50IjsKIAljYXNlIEtPQkpfT0ZGTElORToKIAkJcmV0dXJuICJvZmZsaW5lIjsKIAljYXNlIEtPQkpfT05MSU5FOgpkaWZmIC0tZ2l0IGEvbGliL2tyZWYuYyBiL2xpYi9rcmVmLmMKaW5kZXggMGQwN2NjMy4uNGE0NjdmYSAxMDA2NDQKLS0tIGEvbGliL2tyZWYuYworKysgYi9saWIva3JlZi5jCkBAIC01Miw3ICs1MiwxMiBAQAogCVdBUk5fT04ocmVsZWFzZSA9PSBOVUxMKTsKIAlXQVJOX09OKHJlbGVhc2UgPT0gKHZvaWQgKCopKHN0cnVjdCBrcmVmICopKWtmcmVlKTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZrcmVmLT5yZWZjb3VudCkpIHsKKwkvKgorCSAqIGlmIGN1cnJlbnQgY291bnQgaXMgb25lLCB3ZSBhcmUgdGhlIGxhc3QgdXNlciBhbmQgY2FuIHJlbGVhc2Ugb2JqZWN0CisJICogcmlnaHQgbm93LCBhdm9pZGluZyBhbiBhdG9taWMgb3BlcmF0aW9uIG9uICdyZWZjb3VudCcKKwkgKi8KKwlpZiAoKGF0b21pY19yZWFkKCZrcmVmLT5yZWZjb3VudCkgPT0gMSkgfHwKKwkgICAgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmtyZWYtPnJlZmNvdW50KSkpIHsKIAkJcmVsZWFzZShrcmVmKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvbGliL3JhZGl4LXRyZWUuYyBiL2xpYi9yYWRpeC10cmVlLmMKaW5kZXggMWU1YjE3ZC4uNzA5N2JiMiAxMDA2NDQKLS0tIGEvbGliL3JhZGl4LXRyZWUuYworKysgYi9saWIvcmFkaXgtdHJlZS5jCkBAIC0zNyw3ICszNyw2IEBACiAjZWxzZQogI2RlZmluZSBSQURJWF9UUkVFX01BUF9TSElGVAkzCS8qIEZvciBtb3JlIHN0cmVzc2Z1bCB0ZXN0aW5nICovCiAjZW5kaWYKLSNkZWZpbmUgUkFESVhfVFJFRV9UQUdTCQkyCiAKICNkZWZpbmUgUkFESVhfVFJFRV9NQVBfU0laRQkoMVVMIDw8IFJBRElYX1RSRUVfTUFQX1NISUZUKQogI2RlZmluZSBSQURJWF9UUkVFX01BUF9NQVNLCShSQURJWF9UUkVFX01BUF9TSVpFLTEpCkBAIC00OCw3ICs0Nyw3IEBACiBzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlIHsKIAl1bnNpZ25lZCBpbnQJY291bnQ7CiAJdm9pZAkJKnNsb3RzW1JBRElYX1RSRUVfTUFQX1NJWkVdOwotCXVuc2lnbmVkIGxvbmcJdGFnc1tSQURJWF9UUkVFX1RBR1NdW1JBRElYX1RSRUVfVEFHX0xPTkdTXTsKKwl1bnNpZ25lZCBsb25nCXRhZ3NbUkFESVhfVFJFRV9NQVhfVEFHU11bUkFESVhfVFJFRV9UQUdfTE9OR1NdOwogfTsKIAogc3RydWN0IHJhZGl4X3RyZWVfcGF0aCB7CkBAIC0xMzUsMTcgKzEzNCwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0YWdfc2V0KHN0cnVjdCByYWRpeF90cmVlX25vZGUgKm5vZGUsIGludCB0YWcsIGludCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIHZvaWQgdGFnX3NldChzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgdGFnLAorCQlpbnQgb2Zmc2V0KQogewogCV9fc2V0X2JpdChvZmZzZXQsIG5vZGUtPnRhZ3NbdGFnXSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0YWdfY2xlYXIoc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqbm9kZSwgaW50IHRhZywgaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0YWdfY2xlYXIoc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IHRhZywKKwkJaW50IG9mZnNldCkKIHsKIAlfX2NsZWFyX2JpdChvZmZzZXQsIG5vZGUtPnRhZ3NbdGFnXSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHRhZ19nZXQoc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqbm9kZSwgaW50IHRhZywgaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgaW50IHRhZ19nZXQoc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IHRhZywKKwkJaW50IG9mZnNldCkKIHsKIAlyZXR1cm4gdGVzdF9iaXQob2Zmc2V0LCBub2RlLT50YWdzW3RhZ10pOwogfQpAQCAtMTU0LDcgKzE1Niw3IEBACiAgKiBSZXR1cm5zIDEgaWYgYW55IHNsb3QgaW4gdGhlIG5vZGUgaGFzIHRoaXMgdGFnIHNldC4KICAqIE90aGVyd2lzZSByZXR1cm5zIDAuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFueV90YWdfc2V0KHN0cnVjdCByYWRpeF90cmVlX25vZGUgKm5vZGUsIGludCB0YWcpCitzdGF0aWMgaW5saW5lIGludCBhbnlfdGFnX3NldChzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgdGFnKQogewogCWludCBpZHg7CiAJZm9yIChpZHggPSAwOyBpZHggPCBSQURJWF9UUkVFX1RBR19MT05HUzsgaWR4KyspIHsKQEAgLTE4MCw3ICsxODIsNyBAQAogewogCXN0cnVjdCByYWRpeF90cmVlX25vZGUgKm5vZGU7CiAJdW5zaWduZWQgaW50IGhlaWdodDsKLQljaGFyIHRhZ3NbUkFESVhfVFJFRV9UQUdTXTsKKwljaGFyIHRhZ3NbUkFESVhfVFJFRV9NQVhfVEFHU107CiAJaW50IHRhZzsKIAogCS8qIEZpZ3VyZSBvdXQgd2hhdCB0aGUgaGVpZ2h0IHNob3VsZCBiZS4gICovCkBAIC0xOTcsNyArMTk5LDcgQEAKIAkgKiBQcmVwYXJlIHRoZSB0YWcgc3RhdHVzIG9mIHRoZSB0b3AtbGV2ZWwgbm9kZSBmb3IgcHJvcGFnYXRpb24KIAkgKiBpbnRvIHRoZSBuZXdseS1wdXNoZWQgdG9wLWxldmVsIG5vZGUocykKIAkgKi8KLQlmb3IgKHRhZyA9IDA7IHRhZyA8IFJBRElYX1RSRUVfVEFHUzsgdGFnKyspIHsKKwlmb3IgKHRhZyA9IDA7IHRhZyA8IFJBRElYX1RSRUVfTUFYX1RBR1M7IHRhZysrKSB7CiAJCXRhZ3NbdGFnXSA9IDA7CiAJCWlmIChhbnlfdGFnX3NldChyb290LT5ybm9kZSwgdGFnKSkKIAkJCXRhZ3NbdGFnXSA9IDE7CkBAIC0yMTEsNyArMjEzLDcgQEAKIAkJbm9kZS0+c2xvdHNbMF0gPSByb290LT5ybm9kZTsKIAogCQkvKiBQcm9wYWdhdGUgdGhlIGFnZ3JlZ2F0ZWQgdGFnIGluZm8gaW50byB0aGUgbmV3IHJvb3QgKi8KLQkJZm9yICh0YWcgPSAwOyB0YWcgPCBSQURJWF9UUkVFX1RBR1M7IHRhZysrKSB7CisJCWZvciAodGFnID0gMDsgdGFnIDwgUkFESVhfVFJFRV9NQVhfVEFHUzsgdGFnKyspIHsKIAkJCWlmICh0YWdzW3RhZ10pCiAJCQkJdGFnX3NldChub2RlLCB0YWcsIDApOwogCQl9CkBAIC0zNDksMTQgKzM1MSwxNSBAQAogICoJQGluZGV4OgkJaW5kZXgga2V5CiAgKglAdGFnOiAJCXRhZyBpbmRleAogICoKLSAqCVNldCB0aGUgc2VhcmNoIHRhZyBjb3JyZXNwb25naW5nIHRvIEBpbmRleCBpbiB0aGUgcmFkaXggdHJlZS4gIEZyb20KKyAqCVNldCB0aGUgc2VhcmNoIHRhZyAod2hpY2ggbXVzdCBiZSA8IFJBRElYX1RSRUVfTUFYX1RBR1MpCisgKgljb3JyZXNwb25kaW5nIHRvIEBpbmRleCBpbiB0aGUgcmFkaXggdHJlZS4gIEZyb20KICAqCXRoZSByb290IGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIGxlYWYgbm9kZS4KICAqCiAgKglSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSB0YWdnZWQgaXRlbS4gICBTZXR0aW5nIGEgdGFnIG9uIGEgbm90LXByZXNlbnQKICAqCWl0ZW0gaXMgYSBidWcuCiAgKi8KIHZvaWQgKnJhZGl4X3RyZWVfdGFnX3NldChzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LAotCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgaW50IHRhZykKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGludCB0YWcpCiB7CiAJdW5zaWduZWQgaW50IGhlaWdodCwgc2hpZnQ7CiAJc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqc2xvdDsKQEAgLTM5MCw3ICszOTMsOCBAQAogICoJQGluZGV4OgkJaW5kZXgga2V5CiAgKglAdGFnOiAJCXRhZyBpbmRleAogICoKLSAqCUNsZWFyIHRoZSBzZWFyY2ggdGFnIGNvcnJlc3BvbmdpbmcgdG8gQGluZGV4IGluIHRoZSByYWRpeCB0cmVlLiAgSWYKKyAqCUNsZWFyIHRoZSBzZWFyY2ggdGFnICh3aGljaCBtdXN0IGJlIDwgUkFESVhfVFJFRV9NQVhfVEFHUykKKyAqCWNvcnJlc3BvbmRpbmcgdG8gQGluZGV4IGluIHRoZSByYWRpeCB0cmVlLiAgSWYKICAqCXRoaXMgY2F1c2VzIHRoZSBsZWFmIG5vZGUgdG8gaGF2ZSBubyB0YWdzIHNldCB0aGVuIGNsZWFyIHRoZSB0YWcgaW4gdGhlCiAgKgluZXh0LXRvLWxlYWYgbm9kZSwgZXRjLgogICoKQEAgLTM5OCw3ICs0MDIsNyBAQAogICoJaGFzIHRoZSBzYW1lIHJldHVybiB2YWx1ZSBhbmQgc2VtYW50aWNzIGFzIHJhZGl4X3RyZWVfbG9va3VwKCkuCiAgKi8KIHZvaWQgKnJhZGl4X3RyZWVfdGFnX2NsZWFyKHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsCi0JCQl1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgdGFnKQorCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgaW50IHRhZykKIHsKIAlzdHJ1Y3QgcmFkaXhfdHJlZV9wYXRoIHBhdGhbUkFESVhfVFJFRV9NQVhfUEFUSF0sICpwYXRocCA9IHBhdGg7CiAJc3RydWN0IHJhZGl4X3RyZWVfbm9kZSAqc2xvdDsKQEAgLTQ1MCw3ICs0NTQsNyBAQAogICogcmFkaXhfdHJlZV90YWdfZ2V0IC0gZ2V0IGEgdGFnIG9uIGEgcmFkaXggdHJlZSBub2RlCiAgKiBAcm9vdDoJCXJhZGl4IHRyZWUgcm9vdAogICogQGluZGV4OgkJaW5kZXgga2V5Ci0gKiBAdGFnOiAJCXRhZyBpbmRleAorICogQHRhZzogCQl0YWcgaW5kZXggKDwgUkFESVhfVFJFRV9NQVhfVEFHUykKICAqCiAgKiBSZXR1cm4gdmFsdWVzOgogICoKQEAgLTQ1OSw3ICs0NjMsNyBAQAogICogLTE6IHRhZyBwcmVzZW50LCB1bnNldAogICovCiBpbnQgcmFkaXhfdHJlZV90YWdfZ2V0KHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsCi0JCQl1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgdGFnKQorCQkJdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgaW50IHRhZykKIHsKIAl1bnNpZ25lZCBpbnQgaGVpZ2h0LCBzaGlmdDsKIAlzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpzbG90OwpAQCAtNTkyLDcgKzU5Niw3IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKIF9fbG9va3VwX3RhZyhzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LCB2b2lkICoqcmVzdWx0cywgdW5zaWduZWQgbG9uZyBpbmRleCwKLQl1bnNpZ25lZCBpbnQgbWF4X2l0ZW1zLCB1bnNpZ25lZCBsb25nICpuZXh0X2luZGV4LCBpbnQgdGFnKQorCXVuc2lnbmVkIGludCBtYXhfaXRlbXMsIHVuc2lnbmVkIGxvbmcgKm5leHRfaW5kZXgsIHVuc2lnbmVkIGludCB0YWcpCiB7CiAJdW5zaWduZWQgaW50IG5yX2ZvdW5kID0gMDsKIAl1bnNpZ25lZCBpbnQgc2hpZnQ7CkBAIC02NDYsNyArNjUwLDcgQEAKICAqCUByZXN1bHRzOgl3aGVyZSB0aGUgcmVzdWx0cyBvZiB0aGUgbG9va3VwIGFyZSBwbGFjZWQKICAqCUBmaXJzdF9pbmRleDoJc3RhcnQgdGhlIGxvb2t1cCBmcm9tIHRoaXMga2V5CiAgKglAbWF4X2l0ZW1zOglwbGFjZSB1cCB0byB0aGlzIG1hbnkgaXRlbXMgYXQgKnJlc3VsdHMKLSAqCUB0YWc6CQl0aGUgdGFnIGluZGV4CisgKglAdGFnOgkJdGhlIHRhZyBpbmRleCAoPCBSQURJWF9UUkVFX01BWF9UQUdTKQogICoKICAqCVBlcmZvcm1zIGFuIGluZGV4LWFzY2VuZGluZyBzY2FuIG9mIHRoZSB0cmVlIGZvciBwcmVzZW50IGl0ZW1zIHdoaWNoCiAgKgloYXZlIHRoZSB0YWcgaW5kZXhlZCBieSBAdGFnIHNldC4gIFBsYWNlcyB0aGUgaXRlbXMgYXQgKkByZXN1bHRzIGFuZApAQCAtNjU0LDcgKzY1OCw4IEBACiAgKi8KIHVuc2lnbmVkIGludAogcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF90YWcoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwgdm9pZCAqKnJlc3VsdHMsCi0JCXVuc2lnbmVkIGxvbmcgZmlyc3RfaW5kZXgsIHVuc2lnbmVkIGludCBtYXhfaXRlbXMsIGludCB0YWcpCisJCXVuc2lnbmVkIGxvbmcgZmlyc3RfaW5kZXgsIHVuc2lnbmVkIGludCBtYXhfaXRlbXMsCisJCXVuc2lnbmVkIGludCB0YWcpCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBtYXhfaW5kZXggPSByYWRpeF90cmVlX21heGluZGV4KHJvb3QtPmhlaWdodCk7CiAJdW5zaWduZWQgbG9uZyBjdXJfaW5kZXggPSBmaXJzdF9pbmRleDsKQEAgLTcxNiw3ICs3MjEsNyBAQAogCXN0cnVjdCByYWRpeF90cmVlX25vZGUgKnNsb3Q7CiAJdW5zaWduZWQgaW50IGhlaWdodCwgc2hpZnQ7CiAJdm9pZCAqcmV0ID0gTlVMTDsKLQljaGFyIHRhZ3NbUkFESVhfVFJFRV9UQUdTXTsKKwljaGFyIHRhZ3NbUkFESVhfVFJFRV9NQVhfVEFHU107CiAJaW50IG5yX2NsZWFyZWRfdGFnczsKIAlpbnQgdGFnOwogCWludCBvZmZzZXQ7CkBAIC03NTEsNyArNzU2LDcgQEAKIAkgKiBDbGVhciBhbGwgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIGp1c3QtZGVsZXRlZCBpdGVtCiAJICovCiAJbnJfY2xlYXJlZF90YWdzID0gMDsKLQlmb3IgKHRhZyA9IDA7IHRhZyA8IFJBRElYX1RSRUVfVEFHUzsgdGFnKyspIHsKKwlmb3IgKHRhZyA9IDA7IHRhZyA8IFJBRElYX1RSRUVfTUFYX1RBR1M7IHRhZysrKSB7CiAJCXRhZ3NbdGFnXSA9IDE7CiAJCWlmICh0YWdfZ2V0KHBhdGhwLT5ub2RlLCB0YWcsIHBhdGhwLT5vZmZzZXQpKSB7CiAJCQl0YWdfY2xlYXIocGF0aHAtPm5vZGUsIHRhZywgcGF0aHAtPm9mZnNldCk7CkBAIC03NjMsNyArNzY4LDcgQEAKIAl9CiAKIAlmb3IgKHBhdGhwLS07IG5yX2NsZWFyZWRfdGFncyAmJiBwYXRocC0+bm9kZTsgcGF0aHAtLSkgewotCQlmb3IgKHRhZyA9IDA7IHRhZyA8IFJBRElYX1RSRUVfVEFHUzsgdGFnKyspIHsKKwkJZm9yICh0YWcgPSAwOyB0YWcgPCBSQURJWF9UUkVFX01BWF9UQUdTOyB0YWcrKykgewogCQkJaWYgKHRhZ3NbdGFnXSkKIAkJCQljb250aW51ZTsKIApAQCAtODAxLDcgKzgwNiw3IEBACiAgKglAcm9vdDoJCXJhZGl4IHRyZWUgcm9vdAogICoJQHRhZzoJCXRhZyB0byB0ZXN0CiAgKi8KLWludCByYWRpeF90cmVlX3RhZ2dlZChzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LCBpbnQgdGFnKQoraW50IHJhZGl4X3RyZWVfdGFnZ2VkKHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGludCB0YWcpCiB7CiAgIAlzdHJ1Y3QgcmFkaXhfdHJlZV9ub2RlICpybm9kZTsKICAgCXJub2RlID0gcm9vdC0+cm5vZGU7CmRpZmYgLS1naXQgYS9saWIvcmVlZF9zb2xvbW9uL3JlZWRfc29sb21vbi5jIGIvbGliL3JlZWRfc29sb21vbi9yZWVkX3NvbG9tb24uYwppbmRleCBmNWZlZjk0Li5mOGFjOWZhIDEwMDY0NAotLS0gYS9saWIvcmVlZF9zb2xvbW9uL3JlZWRfc29sb21vbi5jCisrKyBiL2xpYi9yZWVkX3NvbG9tb24vcmVlZF9zb2xvbW9uLmMKQEAgLTQ0LDEyICs0NCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JzbGliLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAvKiBUaGlzIGxpc3QgaG9sZHMgYWxsIGN1cnJlbnRseSBhbGxvY2F0ZWQgcnMgY29udHJvbCBzdHJ1Y3R1cmVzICovCiBzdGF0aWMgTElTVF9IRUFEIChyc2xpc3QpOwogLyogUHJvdGVjdGlvbiBmb3IgdGhlIGxpc3QgKi8KLXN0YXRpYyBERUNMQVJFX01VVEVYKHJzbGlzdGxvY2spOworc3RhdGljIERFRklORV9NVVRFWChyc2xpc3Rsb2NrKTsKIAogLyoqCiAgKiByc19pbml0IC0gSW5pdGlhbGl6ZSBhIFJlZWQtU29sb21vbiBjb2RlYwpAQCAtMTYxLDcgKzE2Miw3IEBACiAgKi8KIHZvaWQgZnJlZV9ycyhzdHJ1Y3QgcnNfY29udHJvbCAqcnMpCiB7Ci0JZG93bigmcnNsaXN0bG9jayk7CisJbXV0ZXhfbG9jaygmcnNsaXN0bG9jayk7CiAJcnMtPnVzZXJzLS07CiAJaWYoIXJzLT51c2VycykgewogCQlsaXN0X2RlbCgmcnMtPmxpc3QpOwpAQCAtMTcwLDcgKzE3MSw3IEBACiAJCWtmcmVlKHJzLT5nZW5wb2x5KTsKIAkJa2ZyZWUocnMpOwogCX0KLQl1cCgmcnNsaXN0bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZyc2xpc3Rsb2NrKTsKIH0KIAogLyoqCkBAIC0yMDEsNyArMjAyLDcgQEAKIAlpZiAobnJvb3RzIDwgMCB8fCBucm9vdHMgPj0gKDE8PHN5bXNpemUpKQogCQlyZXR1cm4gTlVMTDsKIAotCWRvd24oJnJzbGlzdGxvY2spOworCW11dGV4X2xvY2soJnJzbGlzdGxvY2spOwogCiAJLyogV2FsayB0aHJvdWdoIHRoZSBsaXN0IGFuZCBsb29rIGZvciBhIG1hdGNoaW5nIGVudHJ5ICovCiAJbGlzdF9mb3JfZWFjaCh0bXAsICZyc2xpc3QpIHsKQEAgLTIyOCw3ICsyMjksNyBAQAogCQlsaXN0X2FkZCgmcnMtPmxpc3QsICZyc2xpc3QpOwogCX0KIG91dDoKLQl1cCgmcnNsaXN0bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZyc2xpc3Rsb2NrKTsKIAlyZXR1cm4gcnM7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9zdHJpbmcuYyBiL2xpYi9zdHJpbmcuYwppbmRleCAwMzdhNDhhLi5iM2MyOGEzIDEwMDY0NAotLS0gYS9saWIvc3RyaW5nLmMKKysrIGIvbGliL3N0cmluZy5jCkBAIC00MDMsNyArNDAzLDYgQEAKIAl9CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKHN0cnBicmspOwogI2VuZGlmCiAKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU0VQCmRpZmYgLS1naXQgYS9saWIvc3dpb3RsYi5jIGIvbGliL3N3aW90bGIuYwppbmRleCAwYWY0OTdiLi4xMDYyNTc4IDEwMDY0NAotLS0gYS9saWIvc3dpb3RsYi5jCisrKyBiL2xpYi9zd2lvdGxiLmMKQEAgLTI5Niw4ICsyOTYsNyBAQAogCWVsc2UKIAkJc3RyaWRlID0gMTsKIAotCWlmICghbnNsb3RzKQotCQlCVUcoKTsKKwlCVUdfT04oIW5zbG90cyk7CiAKIAkvKgogCSAqIEZpbmQgc3VpdGFibGUgbnVtYmVyIG9mIElPIFRMQiBlbnRyaWVzIHNpemUgdGhhdCB3aWxsIGZpdCB0aGlzCkBAIC00MTYsMTQgKzQxNSwxNCBAQAogCWNhc2UgU1lOQ19GT1JfQ1BVOgogCQlpZiAobGlrZWx5KGRpciA9PSBETUFfRlJPTV9ERVZJQ0UgfHwgZGlyID09IERNQV9CSURJUkVDVElPTkFMKSkKIAkJCW1lbWNweShidWZmZXIsIGRtYV9hZGRyLCBzaXplKTsKLQkJZWxzZSBpZiAoZGlyICE9IERNQV9UT19ERVZJQ0UpCi0JCQlCVUcoKTsKKwkJZWxzZQorCQkJQlVHX09OKGRpciAhPSBETUFfVE9fREVWSUNFKTsKIAkJYnJlYWs7CiAJY2FzZSBTWU5DX0ZPUl9ERVZJQ0U6CiAJCWlmIChsaWtlbHkoZGlyID09IERNQV9UT19ERVZJQ0UgfHwgZGlyID09IERNQV9CSURJUkVDVElPTkFMKSkKIAkJCW1lbWNweShkbWFfYWRkciwgYnVmZmVyLCBzaXplKTsKLQkJZWxzZSBpZiAoZGlyICE9IERNQV9GUk9NX0RFVklDRSkKLQkJCUJVRygpOworCQllbHNlCisJCQlCVUdfT04oZGlyICE9IERNQV9GUk9NX0RFVklDRSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwpAQCAtNTI5LDggKzUyOCw3IEBACiAJdW5zaWduZWQgbG9uZyBkZXZfYWRkciA9IHZpcnRfdG9fcGh5cyhwdHIpOwogCXZvaWQgKm1hcDsKIAotCWlmIChkaXIgPT0gRE1BX05PTkUpCi0JCUJVRygpOworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCS8qCiAJICogSWYgdGhlIHBvaW50ZXIgcGFzc2VkIGluIGhhcHBlbnMgdG8gYmUgaW4gdGhlIGRldmljZSdzIERNQSB3aW5kb3csCiAJICogd2UgY2FuIHNhZmVseSByZXR1cm4gdGhlIGRldmljZSBhZGRyIGFuZCBub3Qgd29ycnkgYWJvdXQgYm91bmNlCkBAIC01OTIsOCArNTkwLDcgQEAKIHsKIAljaGFyICpkbWFfYWRkciA9IHBoeXNfdG9fdmlydChkZXZfYWRkcik7CiAKLQlpZiAoZGlyID09IERNQV9OT05FKQotCQlCVUcoKTsKKwlCVUdfT04oZGlyID09IERNQV9OT05FKTsKIAlpZiAoZG1hX2FkZHIgPj0gaW9fdGxiX3N0YXJ0ICYmIGRtYV9hZGRyIDwgaW9fdGxiX2VuZCkKIAkJdW5tYXBfc2luZ2xlKGh3ZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKTsKIAllbHNlIGlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQpAQCAtNjE2LDggKzYxMyw3IEBACiB7CiAJY2hhciAqZG1hX2FkZHIgPSBwaHlzX3RvX3ZpcnQoZGV2X2FkZHIpOwogCi0JaWYgKGRpciA9PSBETUFfTk9ORSkKLQkJQlVHKCk7CisJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAJaWYgKGRtYV9hZGRyID49IGlvX3RsYl9zdGFydCAmJiBkbWFfYWRkciA8IGlvX3RsYl9lbmQpCiAJCXN5bmNfc2luZ2xlKGh3ZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyLCB0YXJnZXQpOwogCWVsc2UgaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCkBAIC02NDgsOCArNjQ0LDcgQEAKIHsKIAljaGFyICpkbWFfYWRkciA9IHBoeXNfdG9fdmlydChkZXZfYWRkcikgKyBvZmZzZXQ7CiAKLQlpZiAoZGlyID09IERNQV9OT05FKQotCQlCVUcoKTsKKwlCVUdfT04oZGlyID09IERNQV9OT05FKTsKIAlpZiAoZG1hX2FkZHIgPj0gaW9fdGxiX3N0YXJ0ICYmIGRtYV9hZGRyIDwgaW9fdGxiX2VuZCkKIAkJc3luY19zaW5nbGUoaHdkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXIsIHRhcmdldCk7CiAJZWxzZSBpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSkKQEAgLTY5Niw4ICs2OTEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZGV2X2FkZHI7CiAJaW50IGk7CiAKLQlpZiAoZGlyID09IERNQV9OT05FKQotCQlCVUcoKTsKKwlCVUdfT04oZGlyID09IERNQV9OT05FKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuZWxlbXM7IGkrKywgc2crKykgewogCQlhZGRyID0gU0dfRU5UX1ZJUlRfQUREUkVTUyhzZyk7CkBAIC03MzAsOCArNzI0LDcgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChkaXIgPT0gRE1BX05PTkUpCi0JCUJVRygpOworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrLCBzZysrKQogCQlpZiAoc2ctPmRtYV9hZGRyZXNzICE9IFNHX0VOVF9QSFlTX0FERFJFU1Moc2cpKQpAQCAtNzUzLDggKzc0Niw3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoZGlyID09IERNQV9OT05FKQotCQlCVUcoKTsKKwlCVUdfT04oZGlyID09IERNQV9OT05FKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuZWxlbXM7IGkrKywgc2crKykKIAkJaWYgKHNnLT5kbWFfYWRkcmVzcyAhPSBTR19FTlRfUEhZU19BRERSRVNTKHNnKSkKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IGE5Y2I4MGEuLjMzMmY1YzIgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMTM3LDUgKzEzNywxMSBAQAogIyBzdXBwb3J0IGZvciBwYWdlIG1pZ3JhdGlvbgogIwogY29uZmlnIE1JR1JBVElPTgotCWRlZl9ib29sIHkgaWYgTlVNQSB8fCBTUEFSU0VNRU0gfHwgRElTQ09OVElHTUVNCi0JZGVwZW5kcyBvbiBTV0FQCisJYm9vbCAiUGFnZSBtaWdyYXRpb24iCisJZGVmX2Jvb2wgeSBpZiBOVU1BCisJZGVwZW5kcyBvbiBTV0FQICYmIE5VTUEKKwloZWxwCisJICBBbGxvd3MgdGhlIG1pZ3JhdGlvbiBvZiB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgcGFnZXMgb2YgcHJvY2Vzc2VzCisJICB3aGlsZSB0aGUgdmlydHVhbCBhZGRyZXNzZXMgYXJlIG5vdCBjaGFuZ2VkLiBUaGlzIGlzIHVzZWZ1bCBmb3IKKwkgIGV4YW1wbGUgb24gTlVNQSBzeXN0ZW1zIHRvIHB1dCBwYWdlcyBuZWFyZXIgdG8gdGhlIHByb2Nlc3NvcnMgYWNjZXNzaW5nCisJICB0aGUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggOWFhMDNmYS4uZjEwYzc1MyAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTIyLDMgKzIyLDUgQEAKIG9iai0kKENPTkZJR19TTEFCKSArPSBzbGFiLm8KIG9iai0kKENPTkZJR19NRU1PUllfSE9UUExVRykgKz0gbWVtb3J5X2hvdHBsdWcubwogb2JqLSQoQ09ORklHX0ZTX1hJUCkgKz0gZmlsZW1hcF94aXAubworb2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vCisKZGlmZiAtLWdpdCBhL21tL2ZhZHZpc2UuYyBiL21tL2ZhZHZpc2UuYwppbmRleCBkMjU3Yzg5Li45MDdjMzkyIDEwMDY0NAotLS0gYS9tbS9mYWR2aXNlLmMKKysrIGIvbW0vZmFkdmlzZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvZmFkdmlzZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CkBAIC0yMiwxMyArMjMsMzYgQEAKIC8qCiAgKiBQT1NJWF9GQURWX1dJTExORUVEIGNvdWxkIHNldCBQR19SZWZlcmVuY2VkLCBhbmQgUE9TSVhfRkFEVl9OT1JFVVNFIGNvdWxkCiAgKiBkZWFjdGl2YXRlIHRoZSBwYWdlcyBhbmQgY2xlYXIgUEdfUmVmZXJlbmNlZC4KKyAqCisgKiBMSU5VWF9GQURWX0FTWU5DX1dSSVRFOiBzdGFydCBhc3luYyB3cml0ZW91dCBvZiBhbnkgZGlydHkgcGFnZXMgYmV0d2VlbiBmaWxlCisgKiBvZmZzZXRzIGBvZmZzZXQnIGFuZCBgb2Zmc2V0K2xlbicgaW5jbHVzaXZlLiAgQW55IHBhZ2VzIHdoaWNoIGFyZSBjdXJyZW50bHkKKyAqIHVuZGVyIHdyaXRlb3V0IGFyZSBza2lwcGVkLCB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBkaXJ0eS4KKyAqCisgKiBMSU5VWF9GQURWX1dSSVRFX1dBSVQ6IHdhaXQgdXBvbiB3cml0ZW91dCBvZiBhbnkgZGlydHkgcGFnZXMgYmV0d2VlbiBmaWxlCisgKiBvZmZzZXRzIGBvZmZzZXQnIGFuZCBgb2Zmc2V0K2xlbicuCisgKgorICogQnkgY29tYmluaW5nIHRoZXNlIHR3byBvcGVyYXRpb25zIHRoZSBhcHBsaWNhdGlvbiBtYXkgZG8gc2V2ZXJhbCB0aGluZ3M6CisgKgorICogTElOVVhfRkFEVl9BU1lOQ19XUklURTogcHVzaCBzb21lIG9yIGFsbCBvZiB0aGUgZGlydHkgcGFnZXMgYXQgdGhlIGRpc2suCisgKgorICogTElOVVhfRkFEVl9XUklURV9XQUlULCBMSU5VWF9GQURWX0FTWU5DX1dSSVRFOiBwdXNoIGFsbCBvZiB0aGUgY3VycmVudGx5CisgKiBkaXJ0eSBwYWdlcyBhdCB0aGUgZGlzay4KKyAqCisgKiBMSU5VWF9GQURWX1dSSVRFX1dBSVQsIExJTlVYX0ZBRFZfQVNZTkNfV1JJVEUsIExJTlVYX0ZBRFZfV1JJVEVfV0FJVDogcHVzaAorICogYWxsIG9mIHRoZSBjdXJyZW50bHkgZGlydHkgcGFnZXMgYXQgdGhlIGRpc2ssIHdhaXQgdW50aWwgdGhleSBoYXZlIGJlZW4KKyAqIHdyaXR0ZW4uCisgKgorICogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbm9uZSBvZiB0aGVzZSBvcGVyYXRpb25zIHdyaXRlIG91dCB0aGUgZmlsZSdzCisgKiBtZXRhZGF0YS4gIFNvIHVubGVzcyB0aGUgYXBwbGljYXRpb24gaXMgc3RyaWN0bHkgcGVyZm9ybWluZyBvdmVyd3JpdGVzIG9mCisgKiBhbHJlYWR5LWluc3RhbnRpYXRlZCBkaXNrIGJsb2NrcywgdGhlcmUgYXJlIG5vIGd1YXJhbnRlZXMgaGVyZSB0aGF0IHRoZSBkYXRhCisgKiB3aWxsIGJlIGF2YWlsYWJsZSBhZnRlciBhIGNyYXNoLgogICovCiBhc21saW5rYWdlIGxvbmcgc3lzX2ZhZHZpc2U2NF82NChpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sIGludCBhZHZpY2UpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBmZ2V0KGZkKTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpOwotCWxvZmZfdCBlbmRieXRlOworCWxvZmZfdCBlbmRieXRlOwkJCS8qIGluY2x1c2l2ZSAqLwogCXBnb2ZmX3Qgc3RhcnRfaW5kZXg7CiAJcGdvZmZfdCBlbmRfaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBucnBhZ2VzOwpAQCAtNTYsNiArODAsOCBAQAogCWVuZGJ5dGUgPSBvZmZzZXQgKyBsZW47CiAJaWYgKCFsZW4gfHwgZW5kYnl0ZSA8IGxlbikKIAkJZW5kYnl0ZSA9IC0xOworCWVsc2UKKwkJZW5kYnl0ZS0tOwkJLyogaW5jbHVzaXZlICovCiAKIAliZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCkBAIC03OCw3ICsxMDQsNyBAQAogCiAJCS8qIEZpcnN0IGFuZCBsYXN0IFBBUlRJQUwgcGFnZSEgKi8KIAkJc3RhcnRfaW5kZXggPSBvZmZzZXQgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQkJZW5kX2luZGV4ID0gKGVuZGJ5dGUtMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwkJZW5kX2luZGV4ID0gZW5kYnl0ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCiAJCS8qIENhcmVmdWwgYWJvdXQgb3ZlcmZsb3cgb24gdGhlICIrMSIgKi8KIAkJbnJwYWdlcyA9IGVuZF9pbmRleCAtIHN0YXJ0X2luZGV4ICsgMTsKQEAgLTk2LDExICsxMjIsMjEgQEAKIAkJCWZpbGVtYXBfZmx1c2gobWFwcGluZyk7CiAKIAkJLyogRmlyc3QgYW5kIGxhc3QgRlVMTCBwYWdlISAqLwotCQlzdGFydF9pbmRleCA9IChvZmZzZXQgKyAoUEFHRV9DQUNIRV9TSVpFLTEpKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQlzdGFydF9pbmRleCA9IChvZmZzZXQrKFBBR0VfQ0FDSEVfU0laRS0xKSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAkJZW5kX2luZGV4ID0gKGVuZGJ5dGUgPj4gUEFHRV9DQUNIRV9TSElGVCk7CiAKLQkJaWYgKGVuZF9pbmRleCA+IHN0YXJ0X2luZGV4KQotCQkJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKG1hcHBpbmcsIHN0YXJ0X2luZGV4LCBlbmRfaW5kZXgtMSk7CisJCWlmIChlbmRfaW5kZXggPj0gc3RhcnRfaW5kZXgpCisJCQlpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMobWFwcGluZywgc3RhcnRfaW5kZXgsCisJCQkJCQllbmRfaW5kZXgpOworCQlicmVhazsKKwljYXNlIExJTlVYX0ZBRFZfQVNZTkNfV1JJVEU6CisJCXJldCA9IF9fZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKG1hcHBpbmcsIG9mZnNldCwgZW5kYnl0ZSwKKwkJCQkJCVdCX1NZTkNfTk9ORSk7CisJCWJyZWFrOworCWNhc2UgTElOVVhfRkFEVl9XUklURV9XQUlUOgorCQlyZXQgPSB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlKG1hcHBpbmcsCisJCQkJCW9mZnNldCA+PiBQQUdFX0NBQ0hFX1NISUZULAorCQkJCQllbmRieXRlID4+IFBBR0VfQ0FDSEVfU0hJRlQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDQ0ZGEzZDQuLjNlZjIwNzMgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTI5LDcgKzI5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgogI2luY2x1ZGUgImZpbGVtYXAuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAvKgogICogRklYTUU6IHJlbW92ZSBhbGwga25vd2xlZGdlIG9mIHRoZSBidWZmZXIgbGF5ZXIgZnJvbSB0aGUgY29yZSBWTQogICovCkBAIC0xNzIsNyArMTc1LDcgQEAKICAqIGRpcnR5IHBhZ2VzIHRoYXQgbGllIHdpdGhpbiB0aGUgYnl0ZSBvZmZzZXRzIDxzdGFydCwgZW5kPgogICogQG1hcHBpbmc6CWFkZHJlc3Mgc3BhY2Ugc3RydWN0dXJlIHRvIHdyaXRlCiAgKiBAc3RhcnQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2Ugc3RhcnRzCi0gKiBAZW5kOglvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIGVuZHMKKyAqIEBlbmQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2UgZW5kcyAoaW5jbHVzaXZlKQogICogQHN5bmNfbW9kZToJZW5hYmxlIHN5bmNocm9ub3VzIG9wZXJhdGlvbgogICoKICAqIElmIHN5bmNfbW9kZSBpcyBXQl9TWU5DX0FMTCB0aGVuIHRoaXMgaXMgYSAiZGF0YSBpbnRlZ3JpdHkiIG9wZXJhdGlvbiwgYXMKQEAgLTE4MCw4ICsxODMsOCBAQAogICogdGhlc2UgdHdvIG9wZXJhdGlvbnMgaXMgdGhhdCBpZiBhIGRpcnR5IHBhZ2UvYnVmZmVyIGlzIGVuY291bnRlcmVkLCBpdCBtdXN0CiAgKiBiZSB3YWl0ZWQgdXBvbiwgYW5kIG5vdCBqdXN0IHNraXBwZWQgb3Zlci4KICAqLwotc3RhdGljIGludCBfX2ZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQlsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsIGludCBzeW5jX21vZGUpCitpbnQgX19maWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKKwkJCQlsb2ZmX3QgZW5kLCBpbnQgc3luY19tb2RlKQogewogCWludCByZXQ7CiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKQEAgLTIxMCw4ICsyMTMsOCBAQAogfQogRVhQT1JUX1NZTUJPTChmaWxlbWFwX2ZkYXRhd3JpdGUpOwogCi1zdGF0aWMgaW50IGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQlsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpCitzdGF0aWMgaW50IGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LAorCQkJCWxvZmZfdCBlbmQpCiB7CiAJcmV0dXJuIF9fZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKG1hcHBpbmcsIHN0YXJ0LCBlbmQsIFdCX1NZTkNfQUxMKTsKIH0KQEAgLTIzMCw3ICsyMzMsNyBAQAogICogV2FpdCBmb3Igd3JpdGViYWNrIHRvIGNvbXBsZXRlIGFnYWluc3QgcGFnZXMgaW5kZXhlZCBieSBzdGFydC0+ZW5kCiAgKiBpbmNsdXNpdmUKICAqLwotc3RhdGljIGludCB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAoraW50IHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQpCiB7CiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKQEAgLTM2NSw2ICszNjgsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmlsZW1hcF93cml0ZV9hbmRfd2FpdCk7CiAKKy8qCisgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBmaWxlIG9mZnNldHMgbHN0YXJ0LT5sZW5kLCBpbmNsdXNpdmUuCisgKgorICogTm90ZSB0aGF0IGBsZW5kJyBpcyBpbmNsdXNpdmUgKGRlc2NyaWJlcyB0aGUgbGFzdCBieXRlIHRvIGJlIHdyaXR0ZW4pIHNvCisgKiB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gd3JpdGUgdG8gdGhlIHZlcnkgZW5kLW9mLWZpbGUgKGVuZCA9IC0xKS4KKyAqLwogaW50IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkJIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5kKQogewpAQCAtNDI1LDYgKzQzNCwyOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTlVNQQorc3RydWN0IHBhZ2UgKnBhZ2VfY2FjaGVfYWxsb2Moc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpCit7CisJaWYgKGNwdXNldF9kb19wYWdlX21lbV9zcHJlYWQoKSkgeworCQlpbnQgbiA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTsKKwkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobiwgbWFwcGluZ19nZnBfbWFzayh4KSwgMCk7CisJfQorCXJldHVybiBhbGxvY19wYWdlcyhtYXBwaW5nX2dmcF9tYXNrKHgpLCAwKTsKK30KK0VYUE9SVF9TWU1CT0wocGFnZV9jYWNoZV9hbGxvYyk7CisKK3N0cnVjdCBwYWdlICpwYWdlX2NhY2hlX2FsbG9jX2NvbGQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKngpCit7CisJaWYgKGNwdXNldF9kb19wYWdlX21lbV9zcHJlYWQoKSkgeworCQlpbnQgbiA9IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKTsKKwkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobiwgbWFwcGluZ19nZnBfbWFzayh4KXxfX0dGUF9DT0xELCAwKTsKKwl9CisJcmV0dXJuIGFsbG9jX3BhZ2VzKG1hcHBpbmdfZ2ZwX21hc2soeCl8X19HRlBfQ09MRCwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKHBhZ2VfY2FjaGVfYWxsb2NfY29sZCk7CisjZW5kaWYKKwogLyoKICAqIEluIG9yZGVyIHRvIHdhaXQgZm9yIHBhZ2VzIHRvIGJlY29tZSBhdmFpbGFibGUgdGhlcmUgbXVzdCBiZQogICogd2FpdHF1ZXVlcyBhc3NvY2lhdGVkIHdpdGggcGFnZXMuIEJ5IHVzaW5nIGEgaGFzaCB0YWJsZSBvZgpkaWZmIC0tZ2l0IGEvbW0vaGlnaG1lbS5jIGIvbW0vaGlnaG1lbS5jCmluZGV4IGNlMmU3ZTguLmQwZWExZWUgMTAwNjQ0Ci0tLSBhL21tL2hpZ2htZW0uYworKysgYi9tbS9oaWdobWVtLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ibGt0cmFjZV9hcGkuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogc3RhdGljIG1lbXBvb2xfdCAqcGFnZV9wb29sLCAqaXNhX3BhZ2VfcG9vbDsKQEAgLTQ4Myw2ICs0ODQsOCBAQAogCQlwb29sID0gaXNhX3BhZ2VfcG9vbDsKIAl9CiAKKwlibGtfYWRkX3RyYWNlX2JpbyhxLCAqYmlvX29yaWcsIEJMS19UQV9CT1VOQ0UpOworCiAJLyoKIAkgKiBzbG93IHBhdGgKIAkgKi8KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1MDg3MDc3Li5lYmFkNmJiIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0xMywyNCArMTMsNDggQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBjb25zdCB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfemVybyA9IDAsIGh1Z2V0bGJfaW5maW5pdHkgPSB+MFVMOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbnJfaHVnZV9wYWdlcywgZnJlZV9odWdlX3BhZ2VzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbnJfaHVnZV9wYWdlcywgZnJlZV9odWdlX3BhZ2VzLCByZXNlcnZlZF9odWdlX3BhZ2VzOwogdW5zaWduZWQgbG9uZyBtYXhfaHVnZV9wYWdlczsKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGh1Z2VwYWdlX2ZyZWVsaXN0c1tNQVhfTlVNTk9ERVNdOwogc3RhdGljIHVuc2lnbmVkIGludCBucl9odWdlX3BhZ2VzX25vZGVbTUFYX05VTU5PREVTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJlZV9odWdlX3BhZ2VzX25vZGVbTUFYX05VTU5PREVTXTsKLQogLyoKICAqIFByb3RlY3RzIHVwZGF0ZXMgdG8gaHVnZXBhZ2VfZnJlZWxpc3RzLCBucl9odWdlX3BhZ2VzLCBhbmQgZnJlZV9odWdlX3BhZ2VzCiAgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaHVnZXRsYl9sb2NrKTsKIAorc3RhdGljIHZvaWQgY2xlYXJfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaW50IGk7CisKKwltaWdodF9zbGVlcCgpOworCWZvciAoaSA9IDA7IGkgPCAoSFBBR0VfU0laRS9QQUdFX1NJWkUpOyBpKyspIHsKKwkJY29uZF9yZXNjaGVkKCk7CisJCWNsZWFyX3VzZXJfaGlnaHBhZ2UocGFnZSArIGksIGFkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgY29weV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKmRzdCwgc3RydWN0IHBhZ2UgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpbnQgaTsKKworCW1pZ2h0X3NsZWVwKCk7CisJZm9yIChpID0gMDsgaSA8IEhQQUdFX1NJWkUvUEFHRV9TSVpFOyBpKyspIHsKKwkJY29uZF9yZXNjaGVkKCk7CisJCWNvcHlfdXNlcl9oaWdocGFnZShkc3QgKyBpLCBzcmMgKyBpLCBhZGRyICsgaSpQQUdFX1NJWkUpOworCX0KK30KKwogc3RhdGljIHZvaWQgZW5xdWV1ZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaW50IG5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpOwpAQCAtNjQsNTcgKzg4LDE3NiBAQAogCXJldHVybiBwYWdlOwogfQogCi1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2ZyZXNoX2h1Z2VfcGFnZSh2b2lkKQotewotCXN0YXRpYyBpbnQgbmlkID0gMDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEdGUF9ISUdIVVNFUnxfX0dGUF9DT01QfF9fR0ZQX05PV0FSTiwKLQkJCQkJSFVHRVRMQl9QQUdFX09SREVSKTsKLQluaWQgPSAobmlkICsgMSkgJSBudW1fb25saW5lX25vZGVzKCk7Ci0JaWYgKHBhZ2UpIHsKLQkJc3Bpbl9sb2NrKCZodWdldGxiX2xvY2spOwotCQlucl9odWdlX3BhZ2VzKys7Ci0JCW5yX2h1Z2VfcGFnZXNfbm9kZVtwYWdlX3RvX25pZChwYWdlKV0rKzsKLQkJc3Bpbl91bmxvY2soJmh1Z2V0bGJfbG9jayk7Ci0JfQotCXJldHVybiBwYWdlOwotfQotCi12b2lkIGZyZWVfaHVnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIHZvaWQgZnJlZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJQlVHX09OKHBhZ2VfY291bnQocGFnZSkpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnBhZ2UtPmxydSk7Ci0JcGFnZVsxXS5scnUubmV4dCA9IE5VTEw7CQkJLyogcmVzZXQgZHRvciAqLwogCiAJc3Bpbl9sb2NrKCZodWdldGxiX2xvY2spOwogCWVucXVldWVfaHVnZV9wYWdlKHBhZ2UpOwogCXNwaW5fdW5sb2NrKCZodWdldGxiX2xvY2spOwogfQogCi1zdHJ1Y3QgcGFnZSAqYWxsb2NfaHVnZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW50IGFsbG9jX2ZyZXNoX2h1Z2VfcGFnZSh2b2lkKQogeworCXN0YXRpYyBpbnQgbmlkID0gMDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgaTsKKwlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEdGUF9ISUdIVVNFUnxfX0dGUF9DT01QfF9fR0ZQX05PV0FSTiwKKwkJCQkJSFVHRVRMQl9QQUdFX09SREVSKTsKKwluaWQgPSBuZXh0X25vZGUobmlkLCBub2RlX29ubGluZV9tYXApOworCWlmIChuaWQgPT0gTUFYX05VTU5PREVTKQorCQluaWQgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CisJaWYgKHBhZ2UpIHsKKwkJcGFnZVsxXS5scnUubmV4dCA9ICh2b2lkICopZnJlZV9odWdlX3BhZ2U7CS8qIGR0b3IgKi8KKwkJc3Bpbl9sb2NrKCZodWdldGxiX2xvY2spOworCQlucl9odWdlX3BhZ2VzKys7CisJCW5yX2h1Z2VfcGFnZXNfbm9kZVtwYWdlX3RvX25pZChwYWdlKV0rKzsKKwkJc3Bpbl91bmxvY2soJmh1Z2V0bGJfbG9jayk7CisJCXB1dF9wYWdlKHBhZ2UpOyAvKiBmcmVlIGl0IGludG8gdGhlIGh1Z2VwYWdlIGFsbG9jYXRvciAqLworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfaHVnZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHVzZV9yZXNlcnZlID0gMDsKKwl1bnNpZ25lZCBsb25nIGlkeDsKIAogCXNwaW5fbG9jaygmaHVnZXRsYl9sb2NrKTsKLQlwYWdlID0gZGVxdWV1ZV9odWdlX3BhZ2Uodm1hLCBhZGRyKTsKLQlpZiAoIXBhZ2UpIHsKLQkJc3Bpbl91bmxvY2soJmh1Z2V0bGJfbG9jayk7Ci0JCXJldHVybiBOVUxMOworCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSkgeworCisJCS8qIGlkeCA9IHJhZGl4IHRyZWUgaW5kZXgsIGkuZS4gb2Zmc2V0IGludG8gZmlsZSBpbgorCQkgKiBIUEFHRV9TSVpFIHVuaXRzICovCisJCWlkeCA9ICgoYWRkciAtIHZtYS0+dm1fc3RhcnQpID4+IEhQQUdFX1NISUZUKQorCQkJKyAodm1hLT52bV9wZ29mZiA+PiAoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKSk7CisKKwkJLyogVGhlIGh1Z2V0bGJmcyBzcGVjaWZpYyBpbm9kZSBpbmZvIHN0b3JlcyB0aGUgbnVtYmVyCisJCSAqIG9mICJndWFyYW50ZWVkIGF2YWlsYWJsZSIgKGh1Z2UpIHBhZ2VzLiAgVGhhdCBpcywKKwkJICogdGhlIGZpcnN0ICdwcmVyZXNlcnZlZF9ocGFnZXMnIHBhZ2VzIG9mIHRoZSBpbm9kZQorCQkgKiBhcmUgZWl0aGVyIGFscmVhZHkgaW5zdGFudGlhdGVkLCBvciBoYXZlIGJlZW4KKwkJICogcHJlLXJlc2VydmVkIChieSBodWdldGxiX3Jlc2VydmVfZm9yX2lub2RlKCkpLiBIZXJlCisJCSAqIHdlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIGluc3RhbnRpYXRpbmcgdGhlIHBhZ2UsIHNvCisJCSAqIHdlIHVzZSB0aGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGRyYXcgZnJvbSB0aGUKKwkJICogcHJlLXJlc2VydmVkIHBvb2wgb3IgdGhlIHRydWx5IGZyZWUgcG9vbC4gKi8KKwkJaWYgKGlkeCA8IEhVR0VUTEJGU19JKGlub2RlKS0+cHJlcmVzZXJ2ZWRfaHBhZ2VzKQorCQkJdXNlX3Jlc2VydmUgPSAxOwogCX0KKworCWlmICghdXNlX3Jlc2VydmUpIHsKKwkJaWYgKGZyZWVfaHVnZV9wYWdlcyA8PSByZXNlcnZlZF9odWdlX3BhZ2VzKQorCQkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCUJVR19PTihyZXNlcnZlZF9odWdlX3BhZ2VzID09IDApOworCQlyZXNlcnZlZF9odWdlX3BhZ2VzLS07CisJfQorCisJcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlKHZtYSwgYWRkcik7CisJaWYgKCFwYWdlKQorCQlnb3RvIGZhaWw7CisKIAlzcGluX3VubG9jaygmaHVnZXRsYl9sb2NrKTsKLQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKLQlwYWdlWzFdLmxydS5uZXh0ID0gKHZvaWQgKilmcmVlX2h1Z2VfcGFnZTsJLyogc2V0IGR0b3IgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKEhQQUdFX1NJWkUvUEFHRV9TSVpFKTsgKytpKQotCQljbGVhcl91c2VyX2hpZ2hwYWdlKCZwYWdlW2ldLCBhZGRyKTsKKwlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOwogCXJldHVybiBwYWdlOworCisgZmFpbDoKKwlXQVJOX09OKHVzZV9yZXNlcnZlKTsgLyogcmVzZXJ2ZWQgYWxsb2NhdGlvbnMgc2hvdWxkbid0IGZhaWwgKi8KKwlzcGluX3VubG9jaygmaHVnZXRsYl9sb2NrKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogaHVnZXRsYl9leHRlbmRfcmVzZXJ2YXRpb24oKQorICoKKyAqIEVuc3VyZSB0aGF0IGF0IGxlYXN0ICdhdGxlYXN0JyBodWdlcGFnZXMgYXJlLCBhbmQgd2lsbCByZW1haW4sCisgKiBhdmFpbGFibGUgdG8gaW5zdGFudGlhdGUgdGhlIGZpcnN0ICdhdGxlYXN0JyBwYWdlcyBvZiB0aGUgZ2l2ZW4KKyAqIGlub2RlLiAgSWYgdGhlIGlub2RlIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIHRoaXMgbWFueSBwYWdlcyByZXNlcnZlZAorICogb3IgaW5zdGFudGlhdGVkLCBzZXQgYXNpZGUgc29tZSBodWdlcGFnZXMgaW4gdGhlIHJlc2VydmVkIHBvb2wgdG8KKyAqIHNhdGlzZnkgbGF0ZXIgZmF1bHRzIChvciBmYWlsIG5vdyBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoLCByYXRoZXIKKyAqIHRoYW4gZ2V0dGluZyB0aGUgU0lHQlVTIGxhdGVyKS4KKyAqLworaW50IGh1Z2V0bGJfZXh0ZW5kX3Jlc2VydmF0aW9uKHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGF0bGVhc3QpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZpbmZvLT52ZnNfaW5vZGU7CisJdW5zaWduZWQgbG9uZyBjaGFuZ2VfaW5fcmVzZXJ2ZSA9IDA7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2soJmh1Z2V0bGJfbG9jayk7CisJcmVhZF9sb2NrX2lycSgmaW5vZGUtPmlfbWFwcGluZy0+dHJlZV9sb2NrKTsKKworCWlmIChpbmZvLT5wcmVyZXNlcnZlZF9ocGFnZXMgPj0gYXRsZWFzdCkKKwkJZ290byBvdXQ7CisKKwkvKiBCZWNhdXNlIHdlIGFsd2F5cyBjYWxsIHRoaXMgb24gc2hhcmVkIG1hcHBpbmdzLCBub25lIG9mIHRoZQorCSAqIHBhZ2VzIGJleW9uZCBpbmZvLT5wcmVyZXNlcnZlZF9ocGFnZXMgY2FuIGhhdmUgYmVlbgorCSAqIGluc3RhbnRpYXRlZCwgc28gd2UgbmVlZCB0byByZXNlcnZlIGFsbCBvZiB0aGVtIG5vdy4gKi8KKwljaGFuZ2VfaW5fcmVzZXJ2ZSA9IGF0bGVhc3QgLSBpbmZvLT5wcmVyZXNlcnZlZF9ocGFnZXM7CisKKwlpZiAoKHJlc2VydmVkX2h1Z2VfcGFnZXMgKyBjaGFuZ2VfaW5fcmVzZXJ2ZSkgPiBmcmVlX2h1Z2VfcGFnZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzZXJ2ZWRfaHVnZV9wYWdlcyArPSBjaGFuZ2VfaW5fcmVzZXJ2ZTsKKwlpbmZvLT5wcmVyZXNlcnZlZF9ocGFnZXMgPSBhdGxlYXN0OworCisgb3V0OgorCXJlYWRfdW5sb2NrX2lycSgmaW5vZGUtPmlfbWFwcGluZy0+dHJlZV9sb2NrKTsKKwlzcGluX3VubG9jaygmaHVnZXRsYl9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGh1Z2V0bGJfdHJ1bmNhdGVfcmVzZXJ2YXRpb24oKQorICoKKyAqIFRoaXMgcmV0dXJucyBwYWdlcyByZXNlcnZlZCBmb3IgdGhlIGdpdmVuIGlub2RlIHRvIHRoZSBnZW5lcmFsIGZyZWUKKyAqIGh1Z2VwYWdlIHBvb2wuICBJZiB0aGUgaW5vZGUgaGFzIGFueSBwYWdlcyBwcmVyZXNlcnZlZCwgYnV0IG5vdAorICogaW5zdGFudGlhdGVkLCBiZXlvbmQgb2Zmc2V0IChhdG1vc3QgPDwgSFBBR0VfU0laRSksIHRoZW4gcmVsZWFzZQorICogdGhlbS4KKyAqLwordm9pZCBodWdldGxiX3RydW5jYXRlX3Jlc2VydmF0aW9uKHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYXRtb3N0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmaW5mby0+dmZzX2lub2RlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwl1bnNpZ25lZCBsb25nIGlkeDsKKwl1bnNpZ25lZCBsb25nIGNoYW5nZV9pbl9yZXNlcnZlID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCXNwaW5fbG9jaygmaHVnZXRsYl9sb2NrKTsKKwlyZWFkX2xvY2tfaXJxKCZpbm9kZS0+aV9tYXBwaW5nLT50cmVlX2xvY2spOworCisJaWYgKGluZm8tPnByZXJlc2VydmVkX2hwYWdlcyA8PSBhdG1vc3QpCisJCWdvdG8gb3V0OworCisJLyogQ291bnQgcGFnZXMgd2hpY2ggd2VyZSByZXNlcnZlZCwgYnV0IG5vdCBpbnN0YW50aWF0ZWQsIGFuZAorCSAqIHdoaWNoIHdlIGNhbiBub3cgcmVsZWFzZS4gKi8KKwlmb3IgKGlkeCA9IGF0bW9zdDsgaWR4IDwgaW5mby0+cHJlcmVzZXJ2ZWRfaHBhZ2VzOyBpZHgrKykgeworCQlwYWdlID0gcmFkaXhfdHJlZV9sb29rdXAoJm1hcHBpbmctPnBhZ2VfdHJlZSwgaWR4KTsKKwkJaWYgKCFwYWdlKQorCQkJLyogUGFnZXMgd2hpY2ggYXJlIGFscmVhZHkgaW5zdGFudGlhdGVkIGNhbid0CisJCQkgKiBiZSB1bnJlc2VydmVkIChhbmQgaW4gZmFjdCBoYXZlIGFscmVhZHkKKwkJCSAqIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSByZXNlcnZlZCBwb29sKSAqLworCQkJY2hhbmdlX2luX3Jlc2VydmUrKzsKKwl9CisKKwlCVUdfT04ocmVzZXJ2ZWRfaHVnZV9wYWdlcyA8IGNoYW5nZV9pbl9yZXNlcnZlKTsKKwlyZXNlcnZlZF9odWdlX3BhZ2VzIC09IGNoYW5nZV9pbl9yZXNlcnZlOworCWluZm8tPnByZXJlc2VydmVkX2hwYWdlcyA9IGF0bW9zdDsKKworIG91dDoKKwlyZWFkX3VubG9ja19pcnEoJmlub2RlLT5pX21hcHBpbmctPnRyZWVfbG9jayk7CisJc3Bpbl91bmxvY2soJmh1Z2V0bGJfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGh1Z2V0bGJfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCWlmIChIUEFHRV9TSElGVCA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTEyMywxMiArMjY2LDggQEAKIAkJSU5JVF9MSVNUX0hFQUQoJmh1Z2VwYWdlX2ZyZWVsaXN0c1tpXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X2h1Z2VfcGFnZXM7ICsraSkgewotCQlwYWdlID0gYWxsb2NfZnJlc2hfaHVnZV9wYWdlKCk7Ci0JCWlmICghcGFnZSkKKwkJaWYgKCFhbGxvY19mcmVzaF9odWdlX3BhZ2UoKSkKIAkJCWJyZWFrOwotCQlzcGluX2xvY2soJmh1Z2V0bGJfbG9jayk7Ci0JCWVucXVldWVfaHVnZV9wYWdlKHBhZ2UpOwotCQlzcGluX3VubG9jaygmaHVnZXRsYl9sb2NrKTsKIAl9CiAJbWF4X2h1Z2VfcGFnZXMgPSBmcmVlX2h1Z2VfcGFnZXMgPSBucl9odWdlX3BhZ2VzID0gaTsKIAlwcmludGsoIlRvdGFsIEh1Z2VUTEIgbWVtb3J5IGFsbG9jYXRlZCwgJWxkXG4iLCBmcmVlX2h1Z2VfcGFnZXMpOwpAQCAtMTU0LDkgKzI5Myw5IEBACiAJCXBhZ2VbaV0uZmxhZ3MgJj0gfigxIDw8IFBHX2xvY2tlZCB8IDEgPDwgUEdfZXJyb3IgfCAxIDw8IFBHX3JlZmVyZW5jZWQgfAogCQkJCTEgPDwgUEdfZGlydHkgfCAxIDw8IFBHX2FjdGl2ZSB8IDEgPDwgUEdfcmVzZXJ2ZWQgfAogCQkJCTEgPDwgUEdfcHJpdmF0ZSB8IDE8PCBQR193cml0ZWJhY2spOwotCQlzZXRfcGFnZV9jb3VudCgmcGFnZVtpXSwgMCk7CiAJfQotCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCXBhZ2VbMV0ubHJ1Lm5leHQgPSBOVUxMOworCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7CiAJX19mcmVlX3BhZ2VzKHBhZ2UsIEhVR0VUTEJfUEFHRV9PUkRFUik7CiB9CiAKQEAgLTE4OCwxMiArMzI3LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNldF9tYXhfaHVnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGNvdW50KQogewogCXdoaWxlIChjb3VudCA+IG5yX2h1Z2VfcGFnZXMpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19mcmVzaF9odWdlX3BhZ2UoKTsKLQkJaWYgKCFwYWdlKQorCQlpZiAoIWFsbG9jX2ZyZXNoX2h1Z2VfcGFnZSgpKQogCQkJcmV0dXJuIG5yX2h1Z2VfcGFnZXM7Ci0JCXNwaW5fbG9jaygmaHVnZXRsYl9sb2NrKTsKLQkJZW5xdWV1ZV9odWdlX3BhZ2UocGFnZSk7Ci0JCXNwaW5fdW5sb2NrKCZodWdldGxiX2xvY2spOwogCX0KIAlpZiAoY291bnQgPj0gbnJfaHVnZV9wYWdlcykKIAkJcmV0dXJuIG5yX2h1Z2VfcGFnZXM7CkBAIC0yMjUsOSArMzYwLDExIEBACiAJcmV0dXJuIHNwcmludGYoYnVmLAogCQkJIkh1Z2VQYWdlc19Ub3RhbDogJTVsdVxuIgogCQkJIkh1Z2VQYWdlc19GcmVlOiAgJTVsdVxuIgorCQkgICAgICAgICJIdWdlUGFnZXNfUnN2ZDogICU1bHVcbiIKIAkJCSJIdWdlcGFnZXNpemU6ICAgICU1bHUga0JcbiIsCiAJCQlucl9odWdlX3BhZ2VzLAogCQkJZnJlZV9odWdlX3BhZ2VzLAorCQkgICAgICAgIHJlc2VydmVkX2h1Z2VfcGFnZXMsCiAJCQlIUEFHRV9TSVpFLzEwMjQpOwogfQogCkBAIC0yNDAsMTEgKzM3Nyw2IEBACiAJCW5pZCwgZnJlZV9odWdlX3BhZ2VzX25vZGVbbmlkXSk7CiB9CiAKLWludCBpc19odWdlcGFnZV9tZW1fZW5vdWdoKHNpemVfdCBzaXplKQotewotCXJldHVybiAoc2l6ZSArIH5IUEFHRV9NQVNLKS9IUEFHRV9TSVpFIDw9IGZyZWVfaHVnZV9wYWdlczsKLX0KLQogLyogUmV0dXJuIHRoZSBudW1iZXIgcGFnZXMgb2YgbWVtb3J5IHdlIHBoeXNpY2FsbHkgaGF2ZSwgaW4gUEFHRV9TSVpFIHVuaXRzLiAqLwogdW5zaWduZWQgbG9uZyBodWdldGxiX3RvdGFsX3BhZ2VzKHZvaWQpCiB7CkBAIC0zNzQsNyArNTA2LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqb2xkX3BhZ2UsICpuZXdfcGFnZTsKLQlpbnQgaSwgYXZvaWRjb3B5OworCWludCBhdm9pZGNvcHk7CiAKIAlvbGRfcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7CiAKQEAgLTM5NSw5ICs1MjcsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgSFBBR0VfU0laRS9QQUdFX1NJWkU7IGkrKykKLQkJY29weV91c2VyX2hpZ2hwYWdlKG5ld19wYWdlICsgaSwgb2xkX3BhZ2UgKyBpLAotCQkJCSAgIGFkZHJlc3MgKyBpKlBBR0VfU0laRSk7CisJY29weV9odWdlX3BhZ2UobmV3X3BhZ2UsIG9sZF9wYWdlLCBhZGRyZXNzKTsKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCiAJcHRlcCA9IGh1Z2VfcHRlX29mZnNldChtbSwgYWRkcmVzcyAmIEhQQUdFX01BU0spOwpAQCAtNDQyLDYgKzU3Miw3IEBACiAJCQlyZXQgPSBWTV9GQVVMVF9PT007CiAJCQlnb3RvIG91dDsKIAkJfQorCQljbGVhcl9odWdlX3BhZ2UocGFnZSwgYWRkcmVzcyk7CiAKIAkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpIHsKIAkJCWludCBlcnI7CkBAIC00OTYsMTQgKzYyNywyNCBAQAogCXB0ZV90ICpwdGVwOwogCXB0ZV90IGVudHJ5OwogCWludCByZXQ7CisJc3RhdGljIERFRklORV9NVVRFWChodWdldGxiX2luc3RhbnRpYXRpb25fbXV0ZXgpOwogCiAJcHRlcCA9IGh1Z2VfcHRlX2FsbG9jKG1tLCBhZGRyZXNzKTsKIAlpZiAoIXB0ZXApCiAJCXJldHVybiBWTV9GQVVMVF9PT007CiAKKwkvKgorCSAqIFNlcmlhbGl6ZSBodWdlcGFnZSBhbGxvY2F0aW9uIGFuZCBpbnN0YW50aWF0aW9uLCBzbyB0aGF0IHdlIGRvbid0CisJICogZ2V0IHNwdXJpb3VzIGFsbG9jYXRpb24gZmFpbHVyZXMgaWYgdHdvIENQVXMgcmFjZSB0byBpbnN0YW50aWF0ZQorCSAqIHRoZSBzYW1lIHBhZ2UgaW4gdGhlIHBhZ2UgY2FjaGUuCisJICovCisJbXV0ZXhfbG9jaygmaHVnZXRsYl9pbnN0YW50aWF0aW9uX211dGV4KTsKIAllbnRyeSA9ICpwdGVwOwotCWlmIChwdGVfbm9uZShlbnRyeSkpCi0JCXJldHVybiBodWdldGxiX25vX3BhZ2UobW0sIHZtYSwgYWRkcmVzcywgcHRlcCwgd3JpdGVfYWNjZXNzKTsKKwlpZiAocHRlX25vbmUoZW50cnkpKSB7CisJCXJldCA9IGh1Z2V0bGJfbm9fcGFnZShtbSwgdm1hLCBhZGRyZXNzLCBwdGVwLCB3cml0ZV9hY2Nlc3MpOworCQltdXRleF91bmxvY2soJmh1Z2V0bGJfaW5zdGFudGlhdGlvbl9tdXRleCk7CisJCXJldHVybiByZXQ7CisJfQogCiAJcmV0ID0gVk1fRkFVTFRfTUlOT1I7CiAKQEAgLTUxMyw2ICs2NTQsNyBAQAogCQlpZiAod3JpdGVfYWNjZXNzICYmICFwdGVfd3JpdGUoZW50cnkpKQogCQkJcmV0ID0gaHVnZXRsYl9jb3cobW0sIHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnkpOwogCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmh1Z2V0bGJfaW5zdGFudGlhdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTIxLDEwICs2NjMsMTAgQEAKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMsCiAJCQl1bnNpZ25lZCBsb25nICpwb3NpdGlvbiwgaW50ICpsZW5ndGgsIGludCBpKQogewotCXVuc2lnbmVkIGxvbmcgdnBmbiwgdmFkZHIgPSAqcG9zaXRpb247CisJdW5zaWduZWQgbG9uZyBwZm5fb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAqcG9zaXRpb247CiAJaW50IHJlbWFpbmRlciA9ICpsZW5ndGg7CiAKLQl2cGZuID0gdmFkZHIvUEFHRV9TSVpFOwogCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJd2hpbGUgKHZhZGRyIDwgdm1hLT52bV9lbmQgJiYgcmVtYWluZGVyKSB7CiAJCXB0ZV90ICpwdGU7CkBAIC01NTIsMTkgKzY5NCwyOCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAocGFnZXMpIHsKLQkJCXBhZ2UgPSAmcHRlX3BhZ2UoKnB0ZSlbdnBmbiAlIChIUEFHRV9TSVpFL1BBR0VfU0laRSldOwotCQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCQlwYWdlc1tpXSA9IHBhZ2U7Ci0JCX0KKwkJcGZuX29mZnNldCA9ICh2YWRkciAmIH5IUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUOworCQlwYWdlID0gcHRlX3BhZ2UoKnB0ZSk7CitzYW1lX3BhZ2U6CisJCWdldF9wYWdlKHBhZ2UpOworCQlpZiAocGFnZXMpCisJCQlwYWdlc1tpXSA9IHBhZ2UgKyBwZm5fb2Zmc2V0OwogCiAJCWlmICh2bWFzKQogCQkJdm1hc1tpXSA9IHZtYTsKIAogCQl2YWRkciArPSBQQUdFX1NJWkU7Ci0JCSsrdnBmbjsKKwkJKytwZm5fb2Zmc2V0OwogCQktLXJlbWFpbmRlcjsKIAkJKytpOworCQlpZiAodmFkZHIgPCB2bWEtPnZtX2VuZCAmJiByZW1haW5kZXIgJiYKKwkJCQlwZm5fb2Zmc2V0IDwgSFBBR0VfU0laRS9QQUdFX1NJWkUpIHsKKwkJCS8qCisJCQkgKiBXZSB1c2UgcGZuX29mZnNldCB0byBhdm9pZCB0b3VjaGluZyB0aGUgcGFnZWZyYW1lcworCQkJICogb2YgdGhpcyBjb21wb3VuZCBwYWdlLgorCQkJICovCisJCQlnb3RvIHNhbWVfcGFnZTsKKwkJfQogCX0KIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJKmxlbmd0aCA9IHJlbWFpbmRlcjsKQEAgLTU3MiwzICs3MjMsMzIgQEAKIAogCXJldHVybiBpOwogfQorCit2b2lkIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmQsIHBncHJvdF90IG5ld3Byb3QpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBhZGRyZXNzOworCXB0ZV90ICpwdGVwOworCXB0ZV90IHB0ZTsKKworCUJVR19PTihhZGRyZXNzID49IGVuZCk7CisJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhZGRyZXNzLCBlbmQpOworCisJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlmb3IgKDsgYWRkcmVzcyA8IGVuZDsgYWRkcmVzcyArPSBIUEFHRV9TSVpFKSB7CisJCXB0ZXAgPSBodWdlX3B0ZV9vZmZzZXQobW0sIGFkZHJlc3MpOworCQlpZiAoIXB0ZXApCisJCQljb250aW51ZTsKKwkJaWYgKCFwdGVfbm9uZSgqcHRlcCkpIHsKKwkJCXB0ZSA9IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyZXNzLCBwdGVwKTsKKwkJCXB0ZSA9IHB0ZV9ta2h1Z2UocHRlX21vZGlmeShwdGUsIG5ld3Byb3QpKTsKKwkJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwgcHRlKTsKKwkJCWxhenlfbW11X3Byb3RfdXBkYXRlKHB0ZSk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOworCisJZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCk7Cit9CisKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDE3MjU2YmIuLmQyMGUzY2MgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKKysrIGIvbW0vaW50ZXJuYWwuaApAQCAtOCwyMyArOCwzMyBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCisjaWZuZGVmIF9fTU1fSU5URVJOQUxfSAorI2RlZmluZSBfX01NX0lOVEVSTkFMX0gKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3JlZnMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcikKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB2KQogewotI2lmZGVmIENPTkZJR19NTVUKLQlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKLSNlbHNlCi0JaW50IGk7CisJYXRvbWljX3NldCgmcGFnZS0+X2NvdW50LCB2KTsKK30KIAotCS8qCi0JICogV2UgbmVlZCB0byByZWZlcmVuY2UgYWxsIHRoZSBwYWdlcyBmb3IgdGhpcyBvcmRlciwgb3RoZXJ3aXNlIGlmCi0JICogYW55b25lIGFjY2Vzc2VzIG9uZSBvZiB0aGUgcGFnZXMgd2l0aCAoZ2V0L3B1dCkgaXQgd2lsbCBiZSBmcmVlZC4KLQkgKiAtIGVnOiBhY2Nlc3NfcHJvY2Vzc192bSgpCi0JICovCi0JZm9yIChpID0gMDsgaSA8ICgxIDw8IG9yZGVyKTsgaSsrKQotCQlzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMSk7Ci0jZW5kaWYgLyogQ09ORklHX01NVSAqLworLyoKKyAqIFR1cm4gYSBub24tcmVmY291bnRlZCBwYWdlICgtPl9jb3VudCA9PSAwKSBpbnRvIHJlZmNvdW50ZWQgd2l0aAorICogYSBjb3VudCBvZiBvbmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9yZWZjb3VudGVkKHN0cnVjdCBwYWdlICpwYWdlKQoreworCUJVR19PTihQYWdlQ29tcG91bmQocGFnZSkgJiYgcGFnZV9wcml2YXRlKHBhZ2UpICE9ICh1bnNpZ25lZCBsb25nKXBhZ2UpOworCUJVR19PTihhdG9taWNfcmVhZCgmcGFnZS0+X2NvdW50KSk7CisJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3B1dF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWF0b21pY19kZWMoJnBhZ2UtPl9jb3VudCk7CiB9CiAKIGV4dGVybiB2b2lkIGZhc3RjYWxsIF9faW5pdCBfX2ZyZWVfcGFnZXNfYm9vdG1lbShzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkJCXVuc2lnbmVkIGludCBvcmRlcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA5YWJjNjAwLi5lMzQ3ZTEwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCWFub25fdm1hX3VubGluayh2bWEpOwogCQl1bmxpbmtfZmlsZV92bWEodm1hKTsKIAotCQlpZiAoaXNfaHVnZXBhZ2Vfb25seV9yYW5nZSh2bWEtPnZtX21tLCBhZGRyLCBIUEFHRV9TSVpFKSkgeworCQlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHsKIAkJCWh1Z2V0bGJfZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCB2bWEtPnZtX2VuZCwKIAkJCQlmbG9vciwgbmV4dD8gbmV4dC0+dm1fc3RhcnQ6IGNlaWxpbmcpOwogCQl9IGVsc2UgewpAQCAtMjg1LDggKzI4NSw3IEBACiAJCQkgKiBPcHRpbWl6YXRpb246IGdhdGhlciBuZWFyYnkgdm1hcyBpbnRvIG9uZSBjYWxsIGRvd24KIAkJCSAqLwogCQkJd2hpbGUgKG5leHQgJiYgbmV4dC0+dm1fc3RhcnQgPD0gdm1hLT52bV9lbmQgKyBQTURfU0laRQotCQkJICAmJiAhaXNfaHVnZXBhZ2Vfb25seV9yYW5nZSh2bWEtPnZtX21tLCBuZXh0LT52bV9zdGFydCwKLQkJCQkJCQlIUEFHRV9TSVpFKSkgeworCQkJICAgICAgICYmICFpc192bV9odWdldGxiX3BhZ2UobmV4dCkpIHsKIAkJCQl2bWEgPSBuZXh0OwogCQkJCW5leHQgPSB2bWEtPnZtX25leHQ7CiAJCQkJYW5vbl92bWFfdW5saW5rKHZtYSk7CkBAIC0zODgsNyArMzg3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKIAotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOTUFQKSB7CisJaWYgKHVubGlrZWx5KHZtYS0+dm1fZmxhZ3MgJiBWTV9QRk5NQVApKSB7CiAJCXVuc2lnbmVkIGxvbmcgb2ZmID0gKGFkZHIgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOwogCQlpZiAocGZuID09IHZtYS0+dm1fcGdvZmYgKyBvZmYpCiAJCQlyZXR1cm4gTlVMTDsKQEAgLTQwMSw4ICs0MDAsNiBAQAogCSAqIHdlIHNob3VsZCBqdXN0IGRvICJyZXR1cm4gcGZuX3RvX3BhZ2UocGZuKSIsIGJ1dAogCSAqIGluIHRoZSBtZWFudGltZSB3ZSBjaGVjayB0aGF0IHdlIGdldCBhIHZhbGlkIHBmbiwKIAkgKiBhbmQgdGhhdCB0aGUgcmVzdWx0aW5nIHBhZ2UgbG9va3Mgb2suCi0JICoKLQkgKiBSZW1vdmUgdGhpcyB0ZXN0IGV2ZW50dWFsbHkhCiAJICovCiAJaWYgKHVubGlrZWx5KCFwZm5fdmFsaWQocGZuKSkpIHsKIAkJcHJpbnRfYmFkX3B0ZSh2bWEsIHB0ZSwgYWRkcik7CkBAIC02MjMsMTEgKzYyMCwxMiBAQAogCQkJKCp6YXBfd29yayktLTsKIAkJCWNvbnRpbnVlOwogCQl9CisKKwkJKCp6YXBfd29yaykgLT0gUEFHRV9TSVpFOworCiAJCWlmIChwdGVfcHJlc2VudChwdGVudCkpIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JCQkoKnphcF93b3JrKSAtPSBQQUdFX1NJWkU7Ci0KIAkJCXBhZ2UgPSB2bV9ub3JtYWxfcGFnZSh2bWEsIGFkZHIsIHB0ZW50KTsKIAkJCWlmICh1bmxpa2VseShkZXRhaWxzKSAmJiBwYWdlKSB7CiAJCQkJLyoKQEAgLTEyMjAsOSArMTIxOCw3IEBACiAgKiBUaGUgcGFnZSBoYXMgdG8gYmUgYSBuaWNlIGNsZWFuIF9pbmRpdmlkdWFsXyBrZXJuZWwgYWxsb2NhdGlvbi4KICAqIElmIHlvdSBhbGxvY2F0ZSBhIGNvbXBvdW5kIHBhZ2UsIHlvdSBuZWVkIHRvIGhhdmUgbWFya2VkIGl0IGFzCiAgKiBzdWNoIChfX0dGUF9DT01QKSwgb3IgbWFudWFsbHkganVzdCBzcGxpdCB0aGUgcGFnZSB1cCB5b3Vyc2VsZgotICogKHdoaWNoIGlzIG1haW5seSBhbiBpc3N1ZSBvZiBkb2luZyAic2V0X3BhZ2VfY291bnQocGFnZSwgMSkiIGZvcgotICogZWFjaCBzdWItcGFnZSwgYW5kIHRoZW4gZnJlZWluZyB0aGVtIG9uZSBieSBvbmUgd2hlbiB5b3UgZnJlZQotICogdGhlbSByYXRoZXIgdGhhbiBmcmVlaW5nIGl0IGFzIGEgY29tcG91bmQgcGFnZSkuCisgKiAoc2VlIHNwbGl0X3BhZ2UoKSkuCiAgKgogICogTk9URSEgVHJhZGl0aW9uYWxseSB0aGlzIHdhcyBkb25lIHdpdGggInJlbWFwX3Bmbl9yYW5nZSgpIiB3aGljaAogICogdG9vayBhbiBhcmJpdHJhcnkgcGFnZSBwcm90ZWN0aW9uIHBhcmFtZXRlci4gVGhpcyBkb2Vzbid0IGFsbG93CmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCBhOTE4Zjc3Li4xZmU3NmQ5IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTEzMCw2ICsxMzAsNyBAQAogCQlvbmxpbmVkX3BhZ2VzKys7CiAJfQogCXpvbmUtPnByZXNlbnRfcGFnZXMgKz0gb25saW5lZF9wYWdlczsKKwl6b25lLT56b25lX3BnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXMgKz0gb25saW5lZF9wYWdlczsKIAogCXNldHVwX3Blcl96b25lX3BhZ2VzX21pbigpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IGJlZGZhNGYuLjRmNzFjZmQgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC04Niw2ICs4Niw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21pZ3JhdGUuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC05NSwxMSArOTYsOCBAQAogI2RlZmluZSBNUE9MX01GX0lOVkVSVCAoTVBPTF9NRl9JTlRFUk5BTCA8PCAxKQkJLyogSW52ZXJ0IGNoZWNrIGZvciBub2RlbWFzayAqLwogI2RlZmluZSBNUE9MX01GX1NUQVRTIChNUE9MX01GX0lOVEVSTkFMIDw8IDIpCQkvKiBHYXRoZXIgc3RhdGlzdGljcyAqLwogCi0vKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHRvIG1pZ3JhdGUgcGVyIGNhbGwgdG8gbWlncmF0ZV9wYWdlcygpICovCi0jZGVmaW5lIE1JR1JBVEVfQ0hVTktfU0laRSAyNTYKLQotc3RhdGljIGttZW1fY2FjaGVfdCAqcG9saWN5X2NhY2hlOwotc3RhdGljIGttZW1fY2FjaGVfdCAqc25fY2FjaGU7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBvbGljeV9jYWNoZTsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc25fY2FjaGU7CiAKICNkZWZpbmUgUERwcmludGsoZm10Li4uKQogCkBAIC0xOTcsNyArMTk1LDcgQEAKIAlyZXR1cm4gcG9saWN5OwogfQogCi1zdGF0aWMgdm9pZCBnYXRoZXJfc3RhdHMoc3RydWN0IHBhZ2UgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkIGdhdGhlcl9zdGF0cyhzdHJ1Y3QgcGFnZSAqLCB2b2lkICosIGludCBwdGVfZGlydHkpOwogc3RhdGljIHZvaWQgbWlncmF0ZV9wYWdlX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7CiAKQEAgLTIzOSw3ICsyMzcsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKGZsYWdzICYgTVBPTF9NRl9TVEFUUykKLQkJCWdhdGhlcl9zdGF0cyhwYWdlLCBwcml2YXRlKTsKKwkJCWdhdGhlcl9zdGF0cyhwYWdlLCBwcml2YXRlLCBwdGVfZGlydHkoKnB0ZSkpOwogCQllbHNlIGlmIChmbGFncyAmIChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkKIAkJCW1pZ3JhdGVfcGFnZV9hZGQocGFnZSwgcHJpdmF0ZSwgZmxhZ3MpOwogCQllbHNlCkBAIC0zMzAsOSArMzI4LDEyIEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpcnN0LCAqdm1hLCAqcHJldjsKIAotCS8qIENsZWFyIHRoZSBMUlUgbGlzdHMgc28gcGFnZXMgY2FuIGJlIGlzb2xhdGVkICovCi0JaWYgKGZsYWdzICYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKQotCQlscnVfYWRkX2RyYWluX2FsbCgpOworCWlmIChmbGFncyAmIChNUE9MX01GX01PVkUgfCBNUE9MX01GX01PVkVfQUxMKSkgeworCisJCWVyciA9IG1pZ3JhdGVfcHJlcCgpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CiAKIAlmaXJzdCA9IGZpbmRfdm1hKG1tLCBzdGFydCk7CiAJaWYgKCFmaXJzdCkKQEAgLTQyMSw2ICs0MjIsMzcgQEAKIAlyZXR1cm4gbXBvbF9jaGVja19wb2xpY3kobW9kZSwgbm9kZXMpOwogfQogCisKKy8qCisgKiBVcGRhdGUgdGFzay0+ZmxhZ3MgUEZfTUVNUE9MSUNZIGJpdDogc2V0IGlmZiBub24tZGVmYXVsdAorICogbWVtcG9saWN5LiAgQWxsb3dzIG1vcmUgcmFwaWQgY2hlY2tpbmcgb2YgdGhpcyAoY29tYmluZWQgcGVyaGFwcworICogd2l0aCBvdGhlciBQRl8qIGZsYWcgYml0cykgb24gbWVtb3J5IGFsbG9jYXRpb24gaG90IGNvZGUgcGF0aHMuCisgKgorICogSWYgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGlzIGZpbGUsIHRoZSB0YXNrICdwJyBzaG91bGQgLW9ubHktIGJlCisgKiBhIG5ld2x5IGZvcmtlZCBjaGlsZCBub3QgeWV0IHZpc2libGUgb24gdGhlIHRhc2sgbGlzdCwgYmVjYXVzZQorICogbWFuaXB1bGF0aW5nIHRoZSB0YXNrIGZsYWdzIG9mIGEgdmlzaWJsZSB0YXNrIGlzIG5vdCBzYWZlLgorICoKKyAqIFRoZSBhYm92ZSBsaW1pdGF0aW9uIGlzIHdoeSB0aGlzIHJvdXRpbmUgaGFzIHRoZSBmdW5ueSBuYW1lCisgKiBtcG9sX2ZpeF9mb3JrX2NoaWxkX2ZsYWcoKS4KKyAqCisgKiBJdCBpcyBhbHNvIHNhZmUgdG8gY2FsbCB0aGlzIHdpdGggYSB0YXNrIHBvaW50ZXIgb2YgY3VycmVudCwKKyAqIHdoaWNoIHRoZSBzdGF0aWMgd3JhcHBlciBtcG9sX3NldF90YXNrX3N0cnVjdF9mbGFnKCkgZG9lcywKKyAqIGZvciB1c2Ugd2l0aGluIHRoaXMgZmlsZS4KKyAqLworCit2b2lkIG1wb2xfZml4X2ZvcmtfY2hpbGRfZmxhZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJaWYgKHAtPm1lbXBvbGljeSkKKwkJcC0+ZmxhZ3MgfD0gUEZfTUVNUE9MSUNZOworCWVsc2UKKwkJcC0+ZmxhZ3MgJj0gflBGX01FTVBPTElDWTsKK30KKworc3RhdGljIHZvaWQgbXBvbF9zZXRfdGFza19zdHJ1Y3RfZmxhZyh2b2lkKQoreworCW1wb2xfZml4X2ZvcmtfY2hpbGRfZmxhZyhjdXJyZW50KTsKK30KKwogLyogU2V0IHRoZSBwcm9jZXNzIG1lbW9yeSBwb2xpY3kgKi8KIGxvbmcgZG9fc2V0X21lbXBvbGljeShpbnQgbW9kZSwgbm9kZW1hc2tfdCAqbm9kZXMpCiB7CkBAIC00MzMsNiArNDY1LDcgQEAKIAkJcmV0dXJuIFBUUl9FUlIobmV3KTsKIAltcG9sX2ZyZWUoY3VycmVudC0+bWVtcG9saWN5KTsKIAljdXJyZW50LT5tZW1wb2xpY3kgPSBuZXc7CisJbXBvbF9zZXRfdGFza19zdHJ1Y3RfZmxhZygpOwogCWlmIChuZXcgJiYgbmV3LT5wb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFKQogCQljdXJyZW50LT5pbF9uZXh0ID0gZmlyc3Rfbm9kZShuZXctPnYubm9kZXMpOwogCXJldHVybiAwOwpAQCAtNTQwLDc4ICs1NzMsMTggQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWZkZWYgQ09ORklHX01JR1JBVElPTgogLyoKICAqIHBhZ2UgbWlncmF0aW9uCiAgKi8KLQogc3RhdGljIHZvaWQgbWlncmF0ZV9wYWdlX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAkvKgogCSAqIEF2b2lkIG1pZ3JhdGluZyBhIHBhZ2UgdGhhdCBpcyBzaGFyZWQgd2l0aCBvdGhlcnMuCiAJICovCi0JaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkgewotCQlpZiAoaXNvbGF0ZV9scnVfcGFnZShwYWdlKSkKLQkJCWxpc3RfYWRkKCZwYWdlLT5scnUsIHBhZ2VsaXN0KTsKLQl9Ci19Ci0KLS8qCi0gKiBNaWdyYXRlIHRoZSBsaXN0ICdwYWdlbGlzdCcgb2YgcGFnZXMgdG8gYSBjZXJ0YWluIGRlc3RpbmF0aW9uLgotICoKLSAqIFNwZWNpZnkgZGVzdGluYXRpb24gd2l0aCBlaXRoZXIgbm9uLU5VTEwgdm1hIG9yIGRlc3Rfbm9kZSA+PSAwCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBub3QgbWlncmF0ZWQgb3IgZXJyb3IgY29kZQotICovCi1zdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfdG8oc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsCi0JCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50IGRlc3QpCi17Ci0JTElTVF9IRUFEKG5ld2xpc3QpOwotCUxJU1RfSEVBRChtb3ZlZCk7Ci0JTElTVF9IRUFEKGZhaWxlZCk7Ci0JaW50IGVyciA9IDA7Ci0JaW50IG5yX3BhZ2VzOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBsaXN0X2hlYWQgKnA7Ci0KLXJlZG86Ci0JbnJfcGFnZXMgPSAwOwotCWxpc3RfZm9yX2VhY2gocCwgcGFnZWxpc3QpIHsKLQkJaWYgKHZtYSkKLQkJCXBhZ2UgPSBhbGxvY19wYWdlX3ZtYShHRlBfSElHSFVTRVIsIHZtYSwgdm1hLT52bV9zdGFydCk7Ci0JCWVsc2UKLQkJCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKGRlc3QsIEdGUF9ISUdIVVNFUiwgMCk7Ci0KLQkJaWYgKCFwYWdlKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJm5ld2xpc3QpOwotCQlucl9wYWdlcysrOwotCQlpZiAobnJfcGFnZXMgPiBNSUdSQVRFX0NIVU5LX1NJWkUpOwotCQkJYnJlYWs7Ci0JfQotCWVyciA9IG1pZ3JhdGVfcGFnZXMocGFnZWxpc3QsICZuZXdsaXN0LCAmbW92ZWQsICZmYWlsZWQpOwotCi0JcHV0YmFja19scnVfcGFnZXMoJm1vdmVkKTsJLyogQ2FsbCByZWxlYXNlIHBhZ2VzIGluc3RlYWQgPz8gKi8KLQotCWlmIChlcnIgPj0gMCAmJiBsaXN0X2VtcHR5KCZuZXdsaXN0KSAmJiAhbGlzdF9lbXB0eShwYWdlbGlzdCkpCi0JCWdvdG8gcmVkbzsKLW91dDoKLQkvKiBSZXR1cm4gbGVmdG92ZXIgYWxsb2NhdGVkIHBhZ2VzICovCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZuZXdsaXN0KSkgewotCQlwYWdlID0gbGlzdF9lbnRyeShuZXdsaXN0Lm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOwotCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JfQotCWxpc3Rfc3BsaWNlKCZmYWlsZWQsIHBhZ2VsaXN0KTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgbGVmdG92ZXIgcGFnZXMgKi8KLQlucl9wYWdlcyA9IDA7Ci0JbGlzdF9mb3JfZWFjaChwLCBwYWdlbGlzdCkKLQkJbnJfcGFnZXMrKzsKLQlyZXR1cm4gbnJfcGFnZXM7CisJaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgPT0gMSkKKwkJaXNvbGF0ZV9scnVfcGFnZShwYWdlLCBwYWdlbGlzdCk7CiB9CiAKIC8qCkBAIC03MTgsOCArNjkxLDIzIEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIGJ1c3k7CisKIH0KIAorI2Vsc2UKKworc3RhdGljIHZvaWQgbWlncmF0ZV9wYWdlX2FkZChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKK3sKK30KKworaW50IGRvX21pZ3JhdGVfcGFnZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJY29uc3Qgbm9kZW1hc2tfdCAqZnJvbV9ub2RlcywgY29uc3Qgbm9kZW1hc2tfdCAqdG9fbm9kZXMsIGludCBmbGFncykKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKyNlbmRpZgorCiBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQl1bnNpZ25lZCBsb25nIG1vZGUsIG5vZGVtYXNrX3QgKm5tYXNrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtNzM0LDcgKzcyMiw3IEBACiAJCQkJICAgICAgTVBPTF9NRl9NT1ZFIHwgTVBPTF9NRl9NT1ZFX0FMTCkpCiAJICAgIHx8IG1vZGUgPiBNUE9MX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKChmbGFncyAmIE1QT0xfTUZfTU9WRV9BTEwpICYmICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQorCWlmICgoZmxhZ3MgJiBNUE9MX01GX01PVkVfQUxMKSAmJiAhY2FwYWJsZShDQVBfU1lTX05JQ0UpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHN0YXJ0ICYgflBBR0VfTUFTSykKQEAgLTc4NCw2ICs3NzIsNyBAQAogCQlpZiAoIWVyciAmJiBucl9mYWlsZWQgJiYgKGZsYWdzICYgTVBPTF9NRl9TVFJJQ1QpKQogCQkJZXJyID0gLUVJTzsKIAl9CisKIAlpZiAoIWxpc3RfZW1wdHkoJnBhZ2VsaXN0KSkKIAkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKIApAQCAtODA4LDcgKzc5Nyw3IEBACiAJbm9kZXNfY2xlYXIoKm5vZGVzKTsKIAlpZiAobWF4bm9kZSA9PSAwIHx8ICFubWFzaykKIAkJcmV0dXJuIDA7Ci0JaWYgKG1heG5vZGUgPiBQQUdFX1NJWkUpCisJaWYgKG1heG5vZGUgPiBQQUdFX1NJWkUqQklUU19QRVJfQllURSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlubG9uZ3MgPSBCSVRTX1RPX0xPTkdTKG1heG5vZGUpOwpAQCAtOTI4LDE5ICs5MTcsMjAgQEAKIAkgKi8KIAlpZiAoKGN1cnJlbnQtPmV1aWQgIT0gdGFzay0+c3VpZCkgJiYgKGN1cnJlbnQtPmV1aWQgIT0gdGFzay0+dWlkKSAmJgogCSAgICAoY3VycmVudC0+dWlkICE9IHRhc2stPnN1aWQpICYmIChjdXJyZW50LT51aWQgIT0gdGFzay0+dWlkKSAmJgotCSAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgeworCSAgICAhY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7CiAJCWVyciA9IC1FUEVSTTsKIAkJZ290byBvdXQ7CiAJfQogCiAJdGFza19ub2RlcyA9IGNwdXNldF9tZW1zX2FsbG93ZWQodGFzayk7CiAJLyogSXMgdGhlIHVzZXIgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIHRhcmdldCBub2Rlcz8gKi8KLQlpZiAoIW5vZGVzX3N1YnNldChuZXcsIHRhc2tfbm9kZXMpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CisJaWYgKCFub2Rlc19zdWJzZXQobmV3LCB0YXNrX25vZGVzKSAmJiAhY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7CiAJCWVyciA9IC1FUEVSTTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZG9fbWlncmF0ZV9wYWdlcyhtbSwgJm9sZCwgJm5ldywgTVBPTF9NRl9NT1ZFKTsKKwllcnIgPSBkb19taWdyYXRlX3BhZ2VzKG1tLCAmb2xkLCAmbmV3LAorCQljYXBhYmxlKENBUF9TWVNfTklDRSkgPyBNUE9MX01GX01PVkVfQUxMIDogTVBPTF9NRl9NT1ZFKTsKIG91dDoKIAltbXB1dChtbSk7CiAJcmV0dXJuIGVycjsKQEAgLTE3MzgsNjYgKzE3MjgsMTQ1IEBACiBzdHJ1Y3QgbnVtYV9tYXBzIHsKIAl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgYW5vbjsKLQl1bnNpZ25lZCBsb25nIG1hcHBlZDsKKwl1bnNpZ25lZCBsb25nIGFjdGl2ZTsKKwl1bnNpZ25lZCBsb25nIHdyaXRlYmFjazsKIAl1bnNpZ25lZCBsb25nIG1hcGNvdW50X21heDsKKwl1bnNpZ25lZCBsb25nIGRpcnR5OworCXVuc2lnbmVkIGxvbmcgc3dhcGNhY2hlOwogCXVuc2lnbmVkIGxvbmcgbm9kZVtNQVhfTlVNTk9ERVNdOwogfTsKIAotc3RhdGljIHZvaWQgZ2F0aGVyX3N0YXRzKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpwcml2YXRlKQorc3RhdGljIHZvaWQgZ2F0aGVyX3N0YXRzKHN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpwcml2YXRlLCBpbnQgcHRlX2RpcnR5KQogewogCXN0cnVjdCBudW1hX21hcHMgKm1kID0gcHJpdmF0ZTsKIAlpbnQgY291bnQgPSBwYWdlX21hcGNvdW50KHBhZ2UpOwogCi0JaWYgKGNvdW50KQotCQltZC0+bWFwcGVkKys7Ci0KLQlpZiAoY291bnQgPiBtZC0+bWFwY291bnRfbWF4KQotCQltZC0+bWFwY291bnRfbWF4ID0gY291bnQ7Ci0KIAltZC0+cGFnZXMrKzsKKwlpZiAocHRlX2RpcnR5IHx8IFBhZ2VEaXJ0eShwYWdlKSkKKwkJbWQtPmRpcnR5Kys7CisKKwlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKKwkJbWQtPnN3YXBjYWNoZSsrOworCisJaWYgKFBhZ2VBY3RpdmUocGFnZSkpCisJCW1kLT5hY3RpdmUrKzsKKworCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpKQorCQltZC0+d3JpdGViYWNrKys7CiAKIAlpZiAoUGFnZUFub24ocGFnZSkpCiAJCW1kLT5hbm9uKys7CiAKKwlpZiAoY291bnQgPiBtZC0+bWFwY291bnRfbWF4KQorCQltZC0+bWFwY291bnRfbWF4ID0gY291bnQ7CisKIAltZC0+bm9kZVtwYWdlX3RvX25pZChwYWdlKV0rKzsKIAljb25kX3Jlc2NoZWQoKTsKIH0KIAorI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKK3N0YXRpYyB2b2lkIGNoZWNrX2h1Z2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQlzdHJ1Y3QgbnVtYV9tYXBzICptZCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlmb3IgKGFkZHIgPSBzdGFydDsgYWRkciA8IGVuZDsgYWRkciArPSBIUEFHRV9TSVpFKSB7CisJCXB0ZV90ICpwdGVwID0gaHVnZV9wdGVfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHIgJiBIUEFHRV9NQVNLKTsKKwkJcHRlX3QgcHRlOworCisJCWlmICghcHRlcCkKKwkJCWNvbnRpbnVlOworCisJCXB0ZSA9ICpwdGVwOworCQlpZiAocHRlX25vbmUocHRlKSkKKwkJCWNvbnRpbnVlOworCisJCXBhZ2UgPSBwdGVfcGFnZShwdGUpOworCQlpZiAoIXBhZ2UpCisJCQljb250aW51ZTsKKworCQlnYXRoZXJfc3RhdHMocGFnZSwgbWQsIHB0ZV9kaXJ0eSgqcHRlcCkpOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfaHVnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCXN0cnVjdCBudW1hX21hcHMgKm1kKQoreworfQorI2VuZGlmCisKIGludCBzaG93X251bWFfbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBtLT5wcml2YXRlOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdjsKIAlzdHJ1Y3QgbnVtYV9tYXBzICptZDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJaW50IG47CiAJY2hhciBidWZmZXJbNTBdOwogCi0JaWYgKCF2bWEtPnZtX21tKQorCWlmICghbW0pCiAJCXJldHVybiAwOwogCiAJbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbnVtYV9tYXBzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZCkKIAkJcmV0dXJuIDA7CiAKLQljaGVja19wZ2RfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKLQkJICAgICZub2RlX29ubGluZV9tYXAsIE1QT0xfTUZfU1RBVFMsIG1kKTsKKwltcG9sX3RvX3N0cihidWZmZXIsIHNpemVvZihidWZmZXIpLAorCQkJZ2V0X3ZtYV9wb2xpY3kodGFzaywgdm1hLCB2bWEtPnZtX3N0YXJ0KSk7CiAKLQlpZiAobWQtPnBhZ2VzKSB7Ci0JCW1wb2xfdG9fc3RyKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCi0JCQkgICAgZ2V0X3ZtYV9wb2xpY3kodGFzaywgdm1hLCB2bWEtPnZtX3N0YXJ0KSk7CisJc2VxX3ByaW50ZihtLCAiJTA4bHggJXMiLCB2bWEtPnZtX3N0YXJ0LCBidWZmZXIpOwogCi0JCXNlcV9wcmludGYobSwgIiUwOGx4ICVzIHBhZ2VzPSVsdSBtYXBwZWQ9JWx1IG1heHJlZj0lbHUiLAotCQkJICAgdm1hLT52bV9zdGFydCwgYnVmZmVyLCBtZC0+cGFnZXMsCi0JCQkgICBtZC0+bWFwcGVkLCBtZC0+bWFwY291bnRfbWF4KTsKLQotCQlpZiAobWQtPmFub24pCi0JCQlzZXFfcHJpbnRmKG0sIiBhbm9uPSVsdSIsbWQtPmFub24pOwotCi0JCWZvcl9lYWNoX29ubGluZV9ub2RlKG4pCi0JCQlpZiAobWQtPm5vZGVbbl0pCi0JCQkJc2VxX3ByaW50ZihtLCAiIE4lZD0lbHUiLCBuLCBtZC0+bm9kZVtuXSk7Ci0KLQkJc2VxX3B1dGMobSwgJ1xuJyk7CisJaWYgKGZpbGUpIHsKKwkJc2VxX3ByaW50ZihtLCAiIGZpbGU9Iik7CisJCXNlcV9wYXRoKG0sIGZpbGUtPmZfdmZzbW50LCBmaWxlLT5mX2RlbnRyeSwgIlxuXHQ9ICIpOworCX0gZWxzZSBpZiAodm1hLT52bV9zdGFydCA8PSBtbS0+YnJrICYmIHZtYS0+dm1fZW5kID49IG1tLT5zdGFydF9icmspIHsKKwkJc2VxX3ByaW50ZihtLCAiIGhlYXAiKTsKKwl9IGVsc2UgaWYgKHZtYS0+dm1fc3RhcnQgPD0gbW0tPnN0YXJ0X3N0YWNrICYmCisJCQl2bWEtPnZtX2VuZCA+PSBtbS0+c3RhcnRfc3RhY2spIHsKKwkJc2VxX3ByaW50ZihtLCAiIHN0YWNrIik7CiAJfQorCisJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7CisJCWNoZWNrX2h1Z2VfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgbWQpOworCQlzZXFfcHJpbnRmKG0sICIgaHVnZSIpOworCX0gZWxzZSB7CisJCWNoZWNrX3BnZF9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAorCQkJCSZub2RlX29ubGluZV9tYXAsIE1QT0xfTUZfU1RBVFMsIG1kKTsKKwl9CisKKwlpZiAoIW1kLT5wYWdlcykKKwkJZ290byBvdXQ7CisKKwlpZiAobWQtPmFub24pCisJCXNlcV9wcmludGYobSwiIGFub249JWx1IixtZC0+YW5vbik7CisKKwlpZiAobWQtPmRpcnR5KQorCQlzZXFfcHJpbnRmKG0sIiBkaXJ0eT0lbHUiLG1kLT5kaXJ0eSk7CisKKwlpZiAobWQtPnBhZ2VzICE9IG1kLT5hbm9uICYmIG1kLT5wYWdlcyAhPSBtZC0+ZGlydHkpCisJCXNlcV9wcmludGYobSwgIiBtYXBwZWQ9JWx1IiwgbWQtPnBhZ2VzKTsKKworCWlmIChtZC0+bWFwY291bnRfbWF4ID4gMSkKKwkJc2VxX3ByaW50ZihtLCAiIG1hcG1heD0lbHUiLCBtZC0+bWFwY291bnRfbWF4KTsKKworCWlmIChtZC0+c3dhcGNhY2hlKQorCQlzZXFfcHJpbnRmKG0sIiBzd2FwY2FjaGU9JWx1IiwgbWQtPnN3YXBjYWNoZSk7CisKKwlpZiAobWQtPmFjdGl2ZSA8IG1kLT5wYWdlcyAmJiAhaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCisJCXNlcV9wcmludGYobSwiIGFjdGl2ZT0lbHUiLCBtZC0+YWN0aXZlKTsKKworCWlmIChtZC0+d3JpdGViYWNrKQorCQlzZXFfcHJpbnRmKG0sIiB3cml0ZWJhY2s9JWx1IiwgbWQtPndyaXRlYmFjayk7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShuKQorCQlpZiAobWQtPm5vZGVbbl0pCisJCQlzZXFfcHJpbnRmKG0sICIgTiVkPSVsdSIsIG4sIG1kLT5ub2RlW25dKTsKK291dDoKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAlrZnJlZShtZCk7CiAKIAlpZiAobS0+Y291bnQgPCBtLT5zaXplKQpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9vbC5jIGIvbW0vbWVtcG9vbC5jCmluZGV4IDFhOTliODAuLmY3MTg5M2UgMTAwNjQ0Ci0tLSBhL21tL21lbXBvb2wuYworKysgYi9tbS9tZW1wb29sLmMKQEAgLTI3OCwxNCArMjc4LDE0IEBACiAgKi8KIHZvaWQgKm1lbXBvb2xfYWxsb2Nfc2xhYihnZnBfdCBnZnBfbWFzaywgdm9pZCAqcG9vbF9kYXRhKQogewotCWttZW1fY2FjaGVfdCAqbWVtID0gKGttZW1fY2FjaGVfdCAqKSBwb29sX2RhdGE7CisJc3RydWN0IGttZW1fY2FjaGUgKm1lbSA9IHBvb2xfZGF0YTsKIAlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhtZW0sIGdmcF9tYXNrKTsKIH0KIEVYUE9SVF9TWU1CT0wobWVtcG9vbF9hbGxvY19zbGFiKTsKIAogdm9pZCBtZW1wb29sX2ZyZWVfc2xhYih2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpCiB7Ci0Ja21lbV9jYWNoZV90ICptZW0gPSAoa21lbV9jYWNoZV90ICopIHBvb2xfZGF0YTsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqbWVtID0gcG9vbF9kYXRhOwogCWttZW1fY2FjaGVfZnJlZShtZW0sIGVsZW1lbnQpOwogfQogRVhQT1JUX1NZTUJPTChtZW1wb29sX2ZyZWVfc2xhYik7CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmNmU0YQotLS0gL2Rldi9udWxsCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMCwwICsxLDY1NSBAQAorLyoKKyAqIE1lbW9yeSBNaWdyYXRpb24gZnVuY3Rpb25hbGl0eSAtIGxpbnV4L21tL21pZ3JhdGlvbi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIENocmlzdG9waCBMYW1ldGVyCisgKgorICogUGFnZSBtaWdyYXRpb24gd2FzIGZpcnN0IGRldmVsb3BlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbWVtb3J5IGhvdHBsdWcKKyAqIHByb2plY3QuIFRoZSBtYWluIGF1dGhvcnMgb2YgdGhlIG1pZ3JhdGlvbiBjb2RlIGFyZToKKyAqCisgKiBJV0FNT1RPIFRvc2hpaGlybyA8aXdhbW90b0B2YWxpbnV4LmNvLmpwPgorICogSGlyb2thenUgVGFrYWhhc2hpIDx0YWthQHZhbGludXguY28uanA+CisgKiBEYXZlIEhhbnNlbiA8aGF2ZWJsdWVAdXMuaWJtLmNvbT4KKyAqIENocmlzdG9waCBMYW1ldGVyIDxjbGFtZXRlckBzZ2kuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkvKiBmb3IgdHJ5X3RvX3JlbGVhc2VfcGFnZSgpLAorCQkJCQlidWZmZXJfaGVhZHNfb3Zlcl9saW1pdCAqLworI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIHRha2Ugb2ZmIHRoZSBMUlUgZm9yIG1pZ3JhdGlvbiAqLworI2RlZmluZSBNSUdSQVRFX0NIVU5LX1NJWkUgMjU2CisKKyNkZWZpbmUgbHJ1X3RvX3BhZ2UoX2hlYWQpIChsaXN0X2VudHJ5KChfaGVhZCktPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpKQorCisvKgorICogSXNvbGF0ZSBvbmUgcGFnZSBmcm9tIHRoZSBMUlUgbGlzdHMuIElmIHN1Y2Nlc3NmdWwgcHV0IGl0IG9udG8KKyAqIHRoZSBpbmRpY2F0ZWQgbGlzdCB3aXRoIGVsZXZhdGVkIHBhZ2UgY291bnQuCisgKgorICogUmVzdWx0OgorICogIC1FQlVTWTogcGFnZSBub3Qgb24gTFJVIGxpc3QKKyAqICAwOiBwYWdlIHJlbW92ZWQgZnJvbSBMUlUgbGlzdCBhbmQgYWRkZWQgdG8gdGhlIHNwZWNpZmllZCBsaXN0LgorICovCitpbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCit7CisJaW50IHJldCA9IC1FQlVTWTsKKworCWlmIChQYWdlTFJVKHBhZ2UpKSB7CisJCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOworCisJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJaWYgKFBhZ2VMUlUocGFnZSkpIHsKKwkJCXJldCA9IDA7CisJCQlnZXRfcGFnZShwYWdlKTsKKwkJCUNsZWFyUGFnZUxSVShwYWdlKTsKKwkJCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQorCQkJCWRlbF9wYWdlX2Zyb21fYWN0aXZlX2xpc3Qoem9uZSwgcGFnZSk7CisJCQllbHNlCisJCQkJZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOworCQkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCBwYWdlbGlzdCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBtaWdyYXRlX3ByZXAoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgd2UgaGF2ZSBjb21waWxlZCB0aGUgbGlzdCBvZiBwYWdlcworICogdG8gYmUgbWlncmF0ZWQgdXNpbmcgaXNvbGF0ZV9scnVfcGFnZSgpIGJ1dCBiZWZvcmUgd2UgYmVnaW4gYSBzZXJpZXMgb2YgY2FsbHMKKyAqIHRvIG1pZ3JhdGVfcGFnZXMoKS4KKyAqLworaW50IG1pZ3JhdGVfcHJlcCh2b2lkKQoreworCS8qIE11c3QgaGF2ZSBzd2FwIGRldmljZSBmb3IgbWlncmF0aW9uICovCisJaWYgKG5yX3N3YXBfcGFnZXMgPD0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIENsZWFyIHRoZSBMUlUgbGlzdHMgc28gcGFnZXMgY2FuIGJlIGlzb2xhdGVkLgorCSAqIE5vdGUgdGhhdCBwYWdlcyBtYXkgYmUgbW92ZWQgb2ZmIHRoZSBMUlUgYWZ0ZXIgd2UgaGF2ZQorCSAqIGRyYWluZWQgdGhlbS4gVGhvc2UgcGFnZXMgd2lsbCBmYWlsIHRvIG1pZ3JhdGUgbGlrZSBvdGhlcgorCSAqIHBhZ2VzIHRoYXQgbWF5IGJlIGJ1c3kuCisJICovCisJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV90b19scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKKwkJLyoKKwkJICogbHJ1X2NhY2hlX2FkZF9hY3RpdmUgY2hlY2tzIHRoYXQKKwkJICogdGhlIFBHX2FjdGl2ZSBiaXQgaXMgb2ZmLgorCQkgKi8KKwkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOworCQlscnVfY2FjaGVfYWRkX2FjdGl2ZShwYWdlKTsKKwl9IGVsc2UgeworCQlscnVfY2FjaGVfYWRkKHBhZ2UpOworCX0KKwlwdXRfcGFnZShwYWdlKTsKK30KKworLyoKKyAqIEFkZCBpc29sYXRlZCBwYWdlcyBvbiB0aGUgbGlzdCBiYWNrIHRvIHRoZSBMUlUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHB1dCBiYWNrLgorICovCitpbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTI7CisJaW50IGNvdW50ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBwYWdlMiwgbCwgbHJ1KSB7CisJCW1vdmVfdG9fbHJ1KHBhZ2UpOworCQljb3VudCsrOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBOb24gbWlncmF0YWJsZSBwYWdlCisgKi8KK2ludCBmYWlsX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIC1FSU87Cit9CitFWFBPUlRfU1lNQk9MKGZhaWxfbWlncmF0ZV9wYWdlKTsKKworLyoKKyAqIHN3YXBvdXQgYSBzaW5nbGUgcGFnZQorICogcGFnZSBpcyBsb2NrZWQgdXBvbiBlbnRyeSwgdW5sb2NrZWQgb24gZXhpdAorICovCitzdGF0aWMgaW50IHN3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKKworCWlmIChwYWdlX21hcHBlZChwYWdlKSAmJiBtYXBwaW5nKQorCQlpZiAodHJ5X3RvX3VubWFwKHBhZ2UsIDEpICE9IFNXQVBfU1VDQ0VTUykKKwkJCWdvdG8gdW5sb2NrX3JldHJ5OworCisJaWYgKFBhZ2VEaXJ0eShwYWdlKSkgeworCQkvKiBQYWdlIGlzIGRpcnR5LCB0cnkgdG8gd3JpdGUgaXQgb3V0IGhlcmUgKi8KKwkJc3dpdGNoKHBhZ2VvdXQocGFnZSwgbWFwcGluZykpIHsKKwkJY2FzZSBQQUdFX0tFRVA6CisJCWNhc2UgUEFHRV9BQ1RJVkFURToKKwkJCWdvdG8gdW5sb2NrX3JldHJ5OworCisJCWNhc2UgUEFHRV9TVUNDRVNTOgorCQkJZ290byByZXRyeTsKKworCQljYXNlIFBBR0VfQ0xFQU46CisJCQk7IC8qIHRyeSB0byBmcmVlIHRoZSBwYWdlIGJlbG93ICovCisJCX0KKwl9CisKKwlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKKwkJaWYgKCF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIEdGUF9LRVJORUwpIHx8CisJCSAgICAoIW1hcHBpbmcgJiYgcGFnZV9jb3VudChwYWdlKSA9PSAxKSkKKwkJCWdvdG8gdW5sb2NrX3JldHJ5OworCX0KKworCWlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBwYWdlKSkgeworCQkvKiBTdWNjZXNzICovCisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlyZXR1cm4gMDsKKwl9CisKK3VubG9ja19yZXRyeToKKwl1bmxvY2tfcGFnZShwYWdlKTsKKworcmV0cnk6CisJcmV0dXJuIC1FQUdBSU47Cit9CitFWFBPUlRfU1lNQk9MKHN3YXBfcGFnZSk7CisKKy8qCisgKiBSZW1vdmUgcmVmZXJlbmNlcyBmb3IgYSBwYWdlIGFuZCBlc3RhYmxpc2ggdGhlIG5ldyBwYWdlIHdpdGggdGhlIGNvcnJlY3QKKyAqIGJhc2ljIHNldHRpbmdzIHRvIGJlIGFibGUgdG8gc3RvcCBhY2Nlc3NlcyB0byB0aGUgcGFnZS4KKyAqLworaW50IG1pZ3JhdGVfcGFnZV9yZW1vdmVfcmVmZXJlbmNlcyhzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwKKwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG5yX3JlZnMpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7CisJc3RydWN0IHBhZ2UgKipyYWRpeF9wb2ludGVyOworCisJLyoKKwkgKiBBdm9pZCBkb2luZyBhbnkgb2YgdGhlIGZvbGxvd2luZyB3b3JrIGlmIHRoZSBwYWdlIGNvdW50CisJICogaW5kaWNhdGVzIHRoYXQgdGhlIHBhZ2UgaXMgaW4gdXNlIG9yIHRydW5jYXRlIGhhcyByZW1vdmVkCisJICogdGhlIHBhZ2UuCisJICovCisJaWYgKCFtYXBwaW5nIHx8IHBhZ2VfbWFwY291bnQocGFnZSkgKyBucl9yZWZzICE9IHBhZ2VfY291bnQocGFnZSkpCisJCXJldHVybiAtRUFHQUlOOworCisJLyoKKwkgKiBFc3RhYmxpc2ggc3dhcCBwdGVzIGZvciBhbm9ueW1vdXMgcGFnZXMgb3IgZGVzdHJveSBwdGUKKwkgKiBtYXBzIGZvciBmaWxlcy4KKwkgKgorCSAqIEluIG9yZGVyIHRvIHJlZXN0YWJsaXNoIGZpbGUgYmFja2VkIG1hcHBpbmdzIHRoZSBmYXVsdCBoYW5kbGVycworCSAqIHdpbGwgdGFrZSB0aGUgcmFkaXggdHJlZV9sb2NrIHdoaWNoIG1heSB0aGVuIGJlIHVzZWQgdG8gc3RvcAorICAJICogcHJvY2Vzc3NlcyBmcm9tIGFjY2Vzc2luZyB0aGlzIHBhZ2UgdW50aWwgdGhlIG5ldyBwYWdlIGlzIHJlYWR5LgorCSAqCisJICogQSBwcm9jZXNzIGFjY2Vzc2luZyB2aWEgYSBzd2FwIHB0ZSAoYW4gYW5vbnltb3VzIHBhZ2UpIHdpbGwgdGFrZSBhCisJICogcGFnZV9sb2NrIG9uIHRoZSBvbGQgcGFnZSB3aGljaCB3aWxsIGJsb2NrIHRoZSBwcm9jZXNzIHVudGlsIHRoZQorCSAqIG1pZ3JhdGlvbiBhdHRlbXB0IGlzIGNvbXBsZXRlLiBBdCB0aGF0IHRpbWUgdGhlIFBhZ2VTd2FwQ2FjaGUgYml0CisJICogd2lsbCBiZSBleGFtaW5lZC4gSWYgdGhlIHBhZ2Ugd2FzIG1pZ3JhdGVkIHRoZW4gdGhlIFBhZ2VTd2FwQ2FjaGUKKwkgKiBiaXQgd2lsbCBiZSBjbGVhciBhbmQgdGhlIG9wZXJhdGlvbiB0byByZXRyaWV2ZSB0aGUgcGFnZSB3aWxsIGJlCisJICogcmV0cmllZCB3aGljaCB3aWxsIGZpbmQgdGhlIG5ldyBwYWdlIGluIHRoZSByYWRpeCB0cmVlLiBUaGVuIGEgbmV3CisJICogZGlyZWN0IG1hcHBpbmcgbWF5IGJlIGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgcmFkaXggdHJlZSBjb250ZW50cy4KKwkgKgorCSAqIElmIHRoZSBwYWdlIHdhcyBub3QgbWlncmF0ZWQgdGhlbiB0aGUgUGFnZVN3YXBDYWNoZSBiaXQKKwkgKiBpcyBzdGlsbCBzZXQgYW5kIHRoZSBvcGVyYXRpb24gbWF5IGNvbnRpbnVlLgorCSAqLworCWlmICh0cnlfdG9fdW5tYXAocGFnZSwgMSkgPT0gU1dBUF9GQUlMKQorCQkvKiBBIHZtYSBoYXMgVk1fTE9DS0VEIHNldCAtPiBwZXJtYW5lbnQgZmFpbHVyZSAqLworCQlyZXR1cm4gLUVQRVJNOworCisJLyoKKwkgKiBHaXZlIHVwIGlmIHdlIHdlcmUgdW5hYmxlIHRvIHJlbW92ZSBhbGwgbWFwcGluZ3MuCisJICovCisJaWYgKHBhZ2VfbWFwY291bnQocGFnZSkpCisJCXJldHVybiAtRUFHQUlOOworCisJd3JpdGVfbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisKKwlyYWRpeF9wb2ludGVyID0gKHN0cnVjdCBwYWdlICoqKXJhZGl4X3RyZWVfbG9va3VwX3Nsb3QoCisJCQkJCQkmbWFwcGluZy0+cGFnZV90cmVlLAorCQkJCQkJcGFnZV9pbmRleChwYWdlKSk7CisKKwlpZiAoIXBhZ2VfbWFwcGluZyhwYWdlKSB8fCBwYWdlX2NvdW50KHBhZ2UpICE9IG5yX3JlZnMgfHwKKwkJCSpyYWRpeF9wb2ludGVyICE9IHBhZ2UpIHsKKwkJd3JpdGVfdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyoKKwkgKiBOb3cgd2Uga25vdyB0aGF0IG5vIG9uZSBlbHNlIGlzIGxvb2tpbmcgYXQgdGhlIHBhZ2UuCisJICoKKwkgKiBDZXJ0YWluIG1pbmltYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBwYWdlIG11c3QgYmUgYXZhaWxhYmxlCisJICogaW4gb3JkZXIgZm9yIG90aGVyIHN1YnN5c3RlbXMgdG8gcHJvcGVybHkgaGFuZGxlIHRoZSBwYWdlIGlmIHRoZXkKKwkgKiBmaW5kIGl0IHRocm91Z2ggdGhlIHJhZGl4IHRyZWUgdXBkYXRlIGJlZm9yZSB3ZSBhcmUgZmluaXNoZWQKKwkgKiBjb3B5aW5nIHRoZSBwYWdlLgorCSAqLworCWdldF9wYWdlKG5ld3BhZ2UpOworCW5ld3BhZ2UtPmluZGV4ID0gcGFnZS0+aW5kZXg7CisJbmV3cGFnZS0+bWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKKwkJU2V0UGFnZVN3YXBDYWNoZShuZXdwYWdlKTsKKwkJc2V0X3BhZ2VfcHJpdmF0ZShuZXdwYWdlLCBwYWdlX3ByaXZhdGUocGFnZSkpOworCX0KKworCSpyYWRpeF9wb2ludGVyID0gbmV3cGFnZTsKKwlfX3B1dF9wYWdlKHBhZ2UpOworCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobWlncmF0ZV9wYWdlX3JlbW92ZV9yZWZlcmVuY2VzKTsKKworLyoKKyAqIENvcHkgdGhlIHBhZ2UgdG8gaXRzIG5ldyBsb2NhdGlvbgorICovCit2b2lkIG1pZ3JhdGVfcGFnZV9jb3B5KHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwljb3B5X2hpZ2hwYWdlKG5ld3BhZ2UsIHBhZ2UpOworCisJaWYgKFBhZ2VFcnJvcihwYWdlKSkKKwkJU2V0UGFnZUVycm9yKG5ld3BhZ2UpOworCWlmIChQYWdlUmVmZXJlbmNlZChwYWdlKSkKKwkJU2V0UGFnZVJlZmVyZW5jZWQobmV3cGFnZSk7CisJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJU2V0UGFnZVVwdG9kYXRlKG5ld3BhZ2UpOworCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQorCQlTZXRQYWdlQWN0aXZlKG5ld3BhZ2UpOworCWlmIChQYWdlQ2hlY2tlZChwYWdlKSkKKwkJU2V0UGFnZUNoZWNrZWQobmV3cGFnZSk7CisJaWYgKFBhZ2VNYXBwZWRUb0Rpc2socGFnZSkpCisJCVNldFBhZ2VNYXBwZWRUb0Rpc2sobmV3cGFnZSk7CisKKwlpZiAoUGFnZURpcnR5KHBhZ2UpKSB7CisJCWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpOworCQlzZXRfcGFnZV9kaXJ0eShuZXdwYWdlKTsKKyAJfQorCisJQ2xlYXJQYWdlU3dhcENhY2hlKHBhZ2UpOworCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKKwlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOworCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CisJcGFnZS0+bWFwcGluZyA9IE5VTEw7CisKKwkvKgorCSAqIElmIGFueSB3YWl0ZXJzIGhhdmUgYWNjdW11bGF0ZWQgb24gdGhlIG5ldyBwYWdlIHRoZW4KKwkgKiB3YWtlIHRoZW0gdXAuCisJICovCisJaWYgKFBhZ2VXcml0ZWJhY2sobmV3cGFnZSkpCisJCWVuZF9wYWdlX3dyaXRlYmFjayhuZXdwYWdlKTsKK30KK0VYUE9SVF9TWU1CT0wobWlncmF0ZV9wYWdlX2NvcHkpOworCisvKgorICogQ29tbW9uIGxvZ2ljIHRvIGRpcmVjdGx5IG1pZ3JhdGUgYSBzaW5nbGUgcGFnZSBzdWl0YWJsZSBmb3IKKyAqIHBhZ2VzIHRoYXQgZG8gbm90IHVzZSBQYWdlUHJpdmF0ZS4KKyAqCisgKiBQYWdlcyBhcmUgbG9ja2VkIHVwb24gZW50cnkgYW5kIGV4aXQuCisgKi8KK2ludCBtaWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCByYzsKKworCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsJLyogV3JpdGViYWNrIG11c3QgYmUgY29tcGxldGUgKi8KKworCXJjID0gbWlncmF0ZV9wYWdlX3JlbW92ZV9yZWZlcmVuY2VzKG5ld3BhZ2UsIHBhZ2UsIDIpOworCisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwltaWdyYXRlX3BhZ2VfY29weShuZXdwYWdlLCBwYWdlKTsKKworCS8qCisJICogUmVtb3ZlIGF1eGlsaWFyeSBzd2FwIGVudHJpZXMgYW5kIHJlcGxhY2UKKwkgKiB0aGVtIHdpdGggcmVhbCBwdGVzLgorCSAqCisJICogTm90ZSB0aGF0IGEgcmVhbCBwdGUgZW50cnkgd2lsbCBhbGxvdyBwcm9jZXNzZXMgdGhhdCBhcmUgbm90CisJICogd2FpdGluZyBvbiB0aGUgcGFnZSBsb2NrIHRvIHVzZSB0aGUgbmV3IHBhZ2UgdmlhIHRoZSBwYWdlIHRhYmxlcworCSAqIGJlZm9yZSB0aGUgbmV3IHBhZ2UgaXMgdW5sb2NrZWQuCisJICovCisJcmVtb3ZlX2Zyb21fc3dhcChuZXdwYWdlKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobWlncmF0ZV9wYWdlKTsKKworLyoKKyAqIG1pZ3JhdGVfcGFnZXMKKyAqCisgKiBUd28gbGlzdHMgYXJlIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLiBUaGUgZmlyc3QgbGlzdAorICogY29udGFpbnMgdGhlIHBhZ2VzIGlzb2xhdGVkIGZyb20gdGhlIExSVSB0byBiZSBtaWdyYXRlZC4KKyAqIFRoZSBzZWNvbmQgbGlzdCBjb250YWlucyBuZXcgcGFnZXMgdGhhdCB0aGUgcGFnZXMgaXNvbGF0ZWQKKyAqIGNhbiBiZSBtb3ZlZCB0by4gSWYgdGhlIHNlY29uZCBsaXN0IGlzIE5VTEwgdGhlbiBhbGwKKyAqIHBhZ2VzIGFyZSBzd2FwcGVkIG91dC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhZnRlciAxMCBhdHRlbXB0cyBvciBpZiBubyBwYWdlcworICogYXJlIG1vdmFibGUgYW55bW9yZSBiZWNhdXNlIHRvIGhhcyBiZWNvbWUgZW1wdHkKKyAqIG9yIG5vIHJldHJ5YWJsZSBwYWdlcyBleGlzdCBhbnltb3JlLgorICoKKyAqIFJldHVybjogTnVtYmVyIG9mIHBhZ2VzIG5vdCBtaWdyYXRlZCB3aGVuICJ0byIgcmFuIGVtcHR5LgorICovCitpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBzdHJ1Y3QgbGlzdF9oZWFkICp0bywKKwkJICBzdHJ1Y3QgbGlzdF9oZWFkICptb3ZlZCwgc3RydWN0IGxpc3RfaGVhZCAqZmFpbGVkKQoreworCWludCByZXRyeTsKKwlpbnQgbnJfZmFpbGVkID0gMDsKKwlpbnQgcGFzcyA9IDA7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IHBhZ2UgKnBhZ2UyOworCWludCBzd2Fwd3JpdGUgPSBjdXJyZW50LT5mbGFncyAmIFBGX1NXQVBXUklURTsKKwlpbnQgcmM7CisKKwlpZiAoIXN3YXB3cml0ZSkKKwkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfU1dBUFdSSVRFOworCityZWRvOgorCXJldHJ5ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBwYWdlMiwgZnJvbSwgbHJ1KSB7CisJCXN0cnVjdCBwYWdlICpuZXdwYWdlID0gTlVMTDsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisKKwkJY29uZF9yZXNjaGVkKCk7CisKKwkJcmMgPSAwOworCQlpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxKQorCQkJLyogcGFnZSB3YXMgZnJlZWQgZnJvbSB1bmRlciB1cy4gU28gd2UgYXJlIGRvbmUuICovCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKHRvICYmIGxpc3RfZW1wdHkodG8pKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogU2tpcCBsb2NrZWQgcGFnZXMgZHVyaW5nIHRoZSBmaXJzdCB0d28gcGFzc2VzIHRvIGdpdmUgdGhlCisJCSAqIGZ1bmN0aW9ucyBob2xkaW5nIHRoZSBsb2NrIHRpbWUgdG8gcmVsZWFzZSB0aGUgcGFnZS4gTGF0ZXIgd2UKKwkJICogdXNlIGxvY2tfcGFnZSgpIHRvIGhhdmUgYSBoaWdoZXIgY2hhbmNlIG9mIGFjcXVpcmluZyB0aGUKKwkJICogbG9jay4KKwkJICovCisJCXJjID0gLUVBR0FJTjsKKwkJaWYgKHBhc3MgPiAyKQorCQkJbG9ja19wYWdlKHBhZ2UpOworCQllbHNlCisJCQlpZiAoVGVzdFNldFBhZ2VMb2NrZWQocGFnZSkpCisJCQkJZ290byBuZXh0OworCisJCS8qCisJCSAqIE9ubHkgd2FpdCBvbiB3cml0ZWJhY2sgaWYgd2UgaGF2ZSBhbHJlYWR5IGRvbmUgYSBwYXNzIHdoZXJlCisJCSAqIHdlIHdlIG1heSBoYXZlIHRyaWdnZXJlZCB3cml0ZW91dHMgZm9yIGxvdHMgb2YgcGFnZXMuCisJCSAqLworCQlpZiAocGFzcyA+IDApIHsKKwkJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CisJCX0gZWxzZSB7CisJCQlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkKKwkJCQlnb3RvIHVubG9ja19wYWdlOworCQl9CisKKwkJLyoKKwkJICogQW5vbnltb3VzIHBhZ2VzIG11c3QgaGF2ZSBzd2FwIGNhY2hlIHJlZmVyZW5jZXMgb3RoZXJ3aXNlCisJCSAqIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIHBhZ2UgbWFwcyBjYW5ub3QgYmUKKwkJICogcHJlc2VydmVkLgorCQkgKi8KKwkJaWYgKFBhZ2VBbm9uKHBhZ2UpICYmICFQYWdlU3dhcENhY2hlKHBhZ2UpKSB7CisJCQlpZiAoIWFkZF90b19zd2FwKHBhZ2UsIEdGUF9LRVJORUwpKSB7CisJCQkJcmMgPSAtRU5PTUVNOworCQkJCWdvdG8gdW5sb2NrX3BhZ2U7CisJCQl9CisJCX0KKworCQlpZiAoIXRvKSB7CisJCQlyYyA9IHN3YXBfcGFnZShwYWdlKTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCisJCW5ld3BhZ2UgPSBscnVfdG9fcGFnZSh0byk7CisJCWxvY2tfcGFnZShuZXdwYWdlKTsKKworCQkvKgorCQkgKiBQYWdlcyBhcmUgcHJvcGVybHkgbG9ja2VkIGFuZCB3cml0ZWJhY2sgaXMgY29tcGxldGUuCisJCSAqIFRyeSB0byBtaWdyYXRlIHRoZSBwYWdlLgorCQkgKi8KKwkJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKKwkJaWYgKCFtYXBwaW5nKQorCQkJZ290byB1bmxvY2tfYm90aDsKKworCQlpZiAobWFwcGluZy0+YV9vcHMtPm1pZ3JhdGVwYWdlKSB7CisJCQkvKgorCQkJICogTW9zdCBwYWdlcyBoYXZlIGEgbWFwcGluZyBhbmQgbW9zdCBmaWxlc3lzdGVtcworCQkJICogc2hvdWxkIHByb3ZpZGUgYSBtaWdyYXRpb24gZnVuY3Rpb24uIEFub255bW91cworCQkJICogcGFnZXMgYXJlIHBhcnQgb2Ygc3dhcCBzcGFjZSB3aGljaCBhbHNvIGhhcyBpdHMKKwkJCSAqIG93biBtaWdyYXRpb24gZnVuY3Rpb24uIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uCisJCQkgKiBwYXRoIGZvciBwYWdlIG1pZ3JhdGlvbi4KKwkJCSAqLworCQkJcmMgPSBtYXBwaW5nLT5hX29wcy0+bWlncmF0ZXBhZ2UobmV3cGFnZSwgcGFnZSk7CisJCQlnb3RvIHVubG9ja19ib3RoOworICAgICAgICAgICAgICAgIH0KKworCQkvKgorCQkgKiBEZWZhdWx0IGhhbmRsaW5nIGlmIGEgZmlsZXN5c3RlbSBkb2VzIG5vdCBwcm92aWRlCisJCSAqIGEgbWlncmF0aW9uIGZ1bmN0aW9uLiBXZSBjYW4gb25seSBtaWdyYXRlIGNsZWFuCisJCSAqIHBhZ2VzIHNvIHRyeSB0byB3cml0ZSBvdXQgYW55IGRpcnR5IHBhZ2VzIGZpcnN0LgorCQkgKi8KKwkJaWYgKFBhZ2VEaXJ0eShwYWdlKSkgeworCQkJc3dpdGNoIChwYWdlb3V0KHBhZ2UsIG1hcHBpbmcpKSB7CisJCQljYXNlIFBBR0VfS0VFUDoKKwkJCWNhc2UgUEFHRV9BQ1RJVkFURToKKwkJCQlnb3RvIHVubG9ja19ib3RoOworCisJCQljYXNlIFBBR0VfU1VDQ0VTUzoKKwkJCQl1bmxvY2tfcGFnZShuZXdwYWdlKTsKKwkJCQlnb3RvIG5leHQ7CisKKwkJCWNhc2UgUEFHRV9DTEVBTjoKKwkJCQk7IC8qIHRyeSB0byBtaWdyYXRlIHRoZSBwYWdlIGJlbG93ICovCisJCQl9CisgICAgICAgICAgICAgICAgfQorCisJCS8qCisJCSAqIEJ1ZmZlcnMgYXJlIG1hbmFnZWQgaW4gYSBmaWxlc3lzdGVtIHNwZWNpZmljIHdheS4KKwkJICogV2UgbXVzdCBoYXZlIG5vIGJ1ZmZlcnMgb3IgZHJvcCB0aGVtLgorCQkgKi8KKwkJaWYgKCFwYWdlX2hhc19idWZmZXJzKHBhZ2UpIHx8CisJCSAgICB0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIEdGUF9LRVJORUwpKSB7CisJCQlyYyA9IG1pZ3JhdGVfcGFnZShuZXdwYWdlLCBwYWdlKTsKKwkJCWdvdG8gdW5sb2NrX2JvdGg7CisJCX0KKworCQkvKgorCQkgKiBPbiBlYXJseSBwYXNzZXMgd2l0aCBtYXBwZWQgcGFnZXMgc2ltcGx5CisJCSAqIHJldHJ5LiBUaGVyZSBtYXkgYmUgYSBsb2NrIGhlbGQgZm9yIHNvbWUKKwkJICogYnVmZmVycyB0aGF0IG1heSBnbyBhd2F5LiBMYXRlcgorCQkgKiBzd2FwIHRoZW0gb3V0LgorCQkgKi8KKwkJaWYgKHBhc3MgPiA0KSB7CisJCQkvKgorCQkJICogUGVyc2lzdGVudGx5IHVuYWJsZSB0byBkcm9wIGJ1ZmZlcnMuLi4uLiBBcyBhCisJCQkgKiBtZWFzdXJlIG9mIGxhc3QgcmVzb3J0IHdlIGZhbGwgYmFjayB0bworCQkJICogc3dhcF9wYWdlKCkuCisJCQkgKi8KKwkJCXVubG9ja19wYWdlKG5ld3BhZ2UpOworCQkJbmV3cGFnZSA9IE5VTEw7CisJCQlyYyA9IHN3YXBfcGFnZShwYWdlKTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCit1bmxvY2tfYm90aDoKKwkJdW5sb2NrX3BhZ2UobmV3cGFnZSk7CisKK3VubG9ja19wYWdlOgorCQl1bmxvY2tfcGFnZShwYWdlKTsKKworbmV4dDoKKwkJaWYgKHJjID09IC1FQUdBSU4pIHsKKwkJCXJldHJ5Kys7CisJCX0gZWxzZSBpZiAocmMpIHsKKwkJCS8qIFBlcm1hbmVudCBmYWlsdXJlICovCisJCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgZmFpbGVkKTsKKwkJCW5yX2ZhaWxlZCsrOworCQl9IGVsc2UgeworCQkJaWYgKG5ld3BhZ2UpIHsKKwkJCQkvKiBTdWNjZXNzZnVsIG1pZ3JhdGlvbi4gUmV0dXJuIHBhZ2UgdG8gTFJVICovCisJCQkJbW92ZV90b19scnUobmV3cGFnZSk7CisJCQl9CisJCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgbW92ZWQpOworCQl9CisJfQorCWlmIChyZXRyeSAmJiBwYXNzKysgPCAxMCkKKwkJZ290byByZWRvOworCisJaWYgKCFzd2Fwd3JpdGUpCisJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9TV0FQV1JJVEU7CisKKwlyZXR1cm4gbnJfZmFpbGVkICsgcmV0cnk7Cit9CisKKy8qCisgKiBNaWdyYXRpb24gZnVuY3Rpb24gZm9yIHBhZ2VzIHdpdGggYnVmZmVycy4gVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkCisgKiBpZiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIGd1YXJhbnRlZXMgdGhhdCBubyBvdGhlciByZWZlcmVuY2VzIHRvICJwYWdlIgorICogZXhpc3QuCisgKi8KK2ludCBidWZmZXJfbWlncmF0ZV9wYWdlKHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQ7CisJaW50IHJjOworCisJaWYgKCFtYXBwaW5nKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKKwkJcmV0dXJuIG1pZ3JhdGVfcGFnZShuZXdwYWdlLCBwYWdlKTsKKworCWhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisKKwlyYyA9IG1pZ3JhdGVfcGFnZV9yZW1vdmVfcmVmZXJlbmNlcyhuZXdwYWdlLCBwYWdlLCAzKTsKKworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJYmggPSBoZWFkOworCWRvIHsKKwkJZ2V0X2JoKGJoKTsKKwkJbG9ja19idWZmZXIoYmgpOworCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKKworCX0gd2hpbGUgKGJoICE9IGhlYWQpOworCisJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKKwlzZXRfcGFnZV9wcml2YXRlKG5ld3BhZ2UsIHBhZ2VfcHJpdmF0ZShwYWdlKSk7CisJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKKwlwdXRfcGFnZShwYWdlKTsKKwlnZXRfcGFnZShuZXdwYWdlKTsKKworCWJoID0gaGVhZDsKKwlkbyB7CisJCXNldF9iaF9wYWdlKGJoLCBuZXdwYWdlLCBiaF9vZmZzZXQoYmgpKTsKKwkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CisKKwl9IHdoaWxlIChiaCAhPSBoZWFkKTsKKworCVNldFBhZ2VQcml2YXRlKG5ld3BhZ2UpOworCisJbWlncmF0ZV9wYWdlX2NvcHkobmV3cGFnZSwgcGFnZSk7CisKKwliaCA9IGhlYWQ7CisJZG8geworCQl1bmxvY2tfYnVmZmVyKGJoKTsKKyAJCXB1dF9iaChiaCk7CisJCWJoID0gYmgtPmJfdGhpc19wYWdlOworCisJfSB3aGlsZSAoYmggIT0gaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYnVmZmVyX21pZ3JhdGVfcGFnZSk7CisKKy8qCisgKiBNaWdyYXRlIHRoZSBsaXN0ICdwYWdlbGlzdCcgb2YgcGFnZXMgdG8gYSBjZXJ0YWluIGRlc3RpbmF0aW9uLgorICoKKyAqIFNwZWNpZnkgZGVzdGluYXRpb24gd2l0aCBlaXRoZXIgbm9uLU5VTEwgdm1hIG9yIGRlc3Rfbm9kZSA+PSAwCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBub3QgbWlncmF0ZWQgb3IgZXJyb3IgY29kZQorICovCitpbnQgbWlncmF0ZV9wYWdlc190byhzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgZGVzdCkKK3sKKwlMSVNUX0hFQUQobmV3bGlzdCk7CisJTElTVF9IRUFEKG1vdmVkKTsKKwlMSVNUX0hFQUQoZmFpbGVkKTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisJaW50IG5yX3BhZ2VzOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKK3JlZG86CisJbnJfcGFnZXMgPSAwOworCWxpc3RfZm9yX2VhY2gocCwgcGFnZWxpc3QpIHsKKwkJaWYgKHZtYSkgeworCQkJLyoKKwkJCSAqIFRoZSBhZGRyZXNzIHBhc3NlZCB0byBhbGxvY19wYWdlX3ZtYSBpcyB1c2VkIHRvCisJCQkgKiBnZW5lcmF0ZSB0aGUgcHJvcGVyIGludGVybGVhdmUgYmVoYXZpb3IuIFdlIGZha2UKKwkJCSAqIHRoZSBhZGRyZXNzIGhlcmUgYnkgYW4gaW5jcmVhc2luZyBvZmZzZXQgaW4gb3JkZXIKKwkJCSAqIHRvIGdldCB0aGUgcHJvcGVyIGRpc3RyaWJ1dGlvbiBvZiBwYWdlcy4KKwkJCSAqCisJCQkgKiBObyBkZWNpc2lvbiBoYXMgYmVlbiBtYWRlIGFzIHRvIHdoaWNoIHBhZ2UKKwkJCSAqIGEgY2VydGFpbiBvbGQgcGFnZSBpcyBtb3ZlZCB0byBzbyB3ZSBjYW5ub3QKKwkJCSAqIHNwZWNpZnkgdGhlIGNvcnJlY3QgYWRkcmVzcy4KKwkJCSAqLworCQkJcGFnZSA9IGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUiwgdm1hLAorCQkJCQlvZmZzZXQgKyB2bWEtPnZtX3N0YXJ0KTsKKwkJCW9mZnNldCArPSBQQUdFX1NJWkU7CisJCX0KKwkJZWxzZQorCQkJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUoZGVzdCwgR0ZQX0hJR0hVU0VSLCAwKTsKKworCQlpZiAoIXBhZ2UpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlsaXN0X2FkZF90YWlsKCZwYWdlLT5scnUsICZuZXdsaXN0KTsKKwkJbnJfcGFnZXMrKzsKKwkJaWYgKG5yX3BhZ2VzID4gTUlHUkFURV9DSFVOS19TSVpFKQorCQkJYnJlYWs7CisJfQorCWVyciA9IG1pZ3JhdGVfcGFnZXMocGFnZWxpc3QsICZuZXdsaXN0LCAmbW92ZWQsICZmYWlsZWQpOworCisJcHV0YmFja19scnVfcGFnZXMoJm1vdmVkKTsJLyogQ2FsbCByZWxlYXNlIHBhZ2VzIGluc3RlYWQgPz8gKi8KKworCWlmIChlcnIgPj0gMCAmJiBsaXN0X2VtcHR5KCZuZXdsaXN0KSAmJiAhbGlzdF9lbXB0eShwYWdlbGlzdCkpCisJCWdvdG8gcmVkbzsKK291dDoKKwkvKiBSZXR1cm4gbGVmdG92ZXIgYWxsb2NhdGVkIHBhZ2VzICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZuZXdsaXN0KSkgeworCQlwYWdlID0gbGlzdF9lbnRyeShuZXdsaXN0Lm5leHQsIHN0cnVjdCBwYWdlLCBscnUpOworCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKKwkJX19mcmVlX3BhZ2UocGFnZSk7CisJfQorCWxpc3Rfc3BsaWNlKCZmYWlsZWQsIHBhZ2VsaXN0KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgbGVmdG92ZXIgcGFnZXMgKi8KKwlucl9wYWdlcyA9IDA7CisJbGlzdF9mb3JfZWFjaChwLCBwYWdlbGlzdCkKKwkJbnJfcGFnZXMrKzsKKwlyZXR1cm4gbnJfcGFnZXM7Cit9CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggNDc1NTZkMmIuLjRmNWI1NzAgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogICogSWYgdGhlIHZtYSBoYXMgYSAtPmNsb3NlIG9wZXJhdGlvbiB0aGVuIHRoZSBkcml2ZXIgcHJvYmFibHkgbmVlZHMgdG8gcmVsZWFzZQogICogcGVyLXZtYSByZXNvdXJjZXMsIHNvIHdlIGRvbid0IGF0dGVtcHQgdG8gbWVyZ2UgdGhvc2UuCiAgKi8KLSNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05UQ09QWSB8IFZNX0RPTlRFWFBBTkQgfCBWTV9SRVNFUlZFRCB8IFZNX1BGTk1BUCkKKyNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX21lcmdlYWJsZV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyB2bV9mbGFncykKQEAgLTg0NSwxNCArODQ1LDYgQEAKIAljb25zdCB1bnNpZ25lZCBsb25nIHN0YWNrX2ZsYWdzCiAJCT0gVk1fU1RBQ0tfRkxBR1MgJiAoVk1fR1JPV1NVUHxWTV9HUk9XU0RPV04pOwogCi0jaWZkZWYgQ09ORklHX0hVR0VUTEIKLQlpZiAoZmxhZ3MgJiBWTV9IVUdFVExCKSB7Ci0JCWlmICghKGZsYWdzICYgVk1fRE9OVENPUFkpKQotCQkJbW0tPnNoYXJlZF92bSArPSBwYWdlczsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfSFVHRVRMQiAqLwotCiAJaWYgKGZpbGUpIHsKIAkJbW0tPnNoYXJlZF92bSArPSBwYWdlczsKIAkJaWYgKChmbGFncyAmIChWTV9FWEVDfFZNX1dSSVRFKSkgPT0gVk1fRVhFQykKQEAgLTEwNDgsMTIgKzEwNDAsMTEgQEAKIAkgKiBzcGVjaWZpYyBtYXBwZXIuIHRoZSBhZGRyZXNzIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkLCBidXQKIAkgKiBub3QgdW5tYXBwZWQsIGJ1dCB0aGUgbWFwcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LgogCSAqLwotCXZtYSA9IGttZW1fY2FjaGVfYWxsb2Modm1fYXJlYV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsKKwl2bWEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bV9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2bWEpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIHVuYWNjdF9lcnJvcjsKIAl9Ci0JbWVtc2V0KHZtYSwgMCwgc2l6ZW9mKCp2bWEpKTsKIAogCXZtYS0+dm1fbW0gPSBtbTsKIAl2bWEtPnZtX3N0YXJ0ID0gYWRkcjsKQEAgLTE5MDQsMTIgKzE4OTUsMTEgQEAKIAkvKgogCSAqIGNyZWF0ZSBhIHZtYSBzdHJ1Y3QgZm9yIGFuIGFub255bW91cyBtYXBwaW5nCiAJICovCi0Jdm1hID0ga21lbV9jYWNoZV9hbGxvYyh2bV9hcmVhX2NhY2hlcCwgU0xBQl9LRVJORUwpOworCXZtYSA9IGttZW1fY2FjaGVfemFsbG9jKHZtX2FyZWFfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZtYSkgewogCQl2bV91bmFjY3RfbWVtb3J5KGxlbiA+PiBQQUdFX1NISUZUKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW1lbXNldCh2bWEsIDAsIHNpemVvZigqdm1hKSk7CiAKIAl2bWEtPnZtX21tID0gbW07CiAJdm1hLT52bV9zdGFydCA9IGFkZHI7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCA2NTNiODU3Li40YzE0ZDQyIDEwMDY0NAotLS0gYS9tbS9tcHJvdGVjdC5jCisrKyBiL21tL21wcm90ZWN0LmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCSAqIGEgTUFQX05PUkVTRVJWRSBwcml2YXRlIG1hcHBpbmcgdG8gd3JpdGFibGUgd2lsbCBub3cgcmVzZXJ2ZS4KIAkgKi8KIAlpZiAobmV3ZmxhZ3MgJiBWTV9XUklURSkgewotCQlpZiAoIShvbGRmbGFncyAmIChWTV9BQ0NPVU5UfFZNX1dSSVRFfFZNX1NIQVJFRHxWTV9IVUdFVExCKSkpIHsKKwkJaWYgKCEob2xkZmxhZ3MgJiAoVk1fQUNDT1VOVHxWTV9XUklURXxWTV9TSEFSRUQpKSkgewogCQkJY2hhcmdlZCA9IG5ycGFnZXM7CiAJCQlpZiAoc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeShjaGFyZ2VkKSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE2Niw3ICsxNjYsMTAgQEAKIAkgKi8KIAl2bWEtPnZtX2ZsYWdzID0gbmV3ZmxhZ3M7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSBuZXdwcm90OwotCWNoYW5nZV9wcm90ZWN0aW9uKHZtYSwgc3RhcnQsIGVuZCwgbmV3cHJvdCk7CisJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQorCQlodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHZtYSwgc3RhcnQsIGVuZCwgbmV3cHJvdCk7CisJZWxzZQorCQljaGFuZ2VfcHJvdGVjdGlvbih2bWEsIHN0YXJ0LCBlbmQsIG5ld3Byb3QpOwogCXZtX3N0YXRfYWNjb3VudChtbSwgb2xkZmxhZ3MsIHZtYS0+dm1fZmlsZSwgLW5ycGFnZXMpOwogCXZtX3N0YXRfYWNjb3VudChtbSwgbmV3ZmxhZ3MsIHZtYS0+dm1fZmlsZSwgbnJwYWdlcyk7CiAJcmV0dXJuIDA7CkBAIC0yNDAsMTEgKzI0Myw2IEBACiAKIAkJLyogSGVyZSB3ZSBrbm93IHRoYXQgIHZtYS0+dm1fc3RhcnQgPD0gbnN0YXJ0IDwgdm1hLT52bV9lbmQuICovCiAKLQkJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7Ci0JCQllcnJvciA9IC1FQUNDRVM7Ci0JCQlnb3RvIG91dDsKLQkJfQotCiAJCW5ld2ZsYWdzID0gdm1fZmxhZ3MgfCAodm1hLT52bV9mbGFncyAmIH4oVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpOwogCiAJCS8qIG5ld2ZsYWdzID4+IDQgc2hpZnQgVk1fTUFZJSBpbiBwbGFjZSBvZiBWTV8lICovCmRpZmYgLS1naXQgYS9tbS9tc3luYy5jIGIvbW0vbXN5bmMuYwppbmRleCAzNTYzYTU2Li5iYzZjOTUzIDEwMDY0NAotLS0gYS9tbS9tc3luYy5jCisrKyBiL21tL21zeW5jLmMKQEAgLTksMjAgKzksMjQgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi1zdGF0aWMgdm9pZCBtc3luY19wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtc3luY19wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsCiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIAlpbnQgcHJvZ3Jlc3MgPSAwOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKIAogYWdhaW46CiAJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtPnZtX21tLCBwbWQsIGFkZHIsICZwdGwpOwpAQCAtNDMsNTggKzQ3LDY0IEBACiAJCWlmICghcGFnZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAocHRlcF9jbGVhcl9mbHVzaF9kaXJ0eSh2bWEsIGFkZHIsIHB0ZSkgfHwKLQkJICAgIHBhZ2VfdGVzdF9hbmRfY2xlYXJfZGlydHkocGFnZSkpCi0JCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKwkJCQlwYWdlX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHBhZ2UpKQorCQkJcmV0ICs9IHNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQlwcm9ncmVzcyArPSAzOwogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKIAljb25kX3Jlc2NoZWQoKTsKIAlpZiAoYWRkciAhPSBlbmQpCiAJCWdvdG8gYWdhaW47CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1zeW5jX3BtZF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHVkX3QgKnB1ZCwKLQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1zeW5jX3BtZF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJcG1kX3QgKnBtZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOwogCWRvIHsKIAkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHBtZCkpCiAJCQljb250aW51ZTsKLQkJbXN5bmNfcHRlX3JhbmdlKHZtYSwgcG1kLCBhZGRyLCBuZXh0KTsKKwkJcmV0ICs9IG1zeW5jX3B0ZV9yYW5nZSh2bWEsIHBtZCwgYWRkciwgbmV4dCk7CiAJfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1zeW5jX3B1ZF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdkX3QgKnBnZCwKLQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1zeW5jX3B1ZF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCiAJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOwogCWRvIHsKIAkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCiAJCQljb250aW51ZTsKLQkJbXN5bmNfcG1kX3JhbmdlKHZtYSwgcHVkLCBhZGRyLCBuZXh0KTsKKwkJcmV0ICs9IG1zeW5jX3BtZF9yYW5nZSh2bWEsIHB1ZCwgYWRkciwgbmV4dCk7CiAJfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbXN5bmNfcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1zeW5jX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwZ2RfdCAqcGdkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CiAKIAkvKiBGb3IgaHVnZXBhZ2VzIHdlIGNhbid0IGdvIHdhbGtpbmcgdGhlIHBhZ2UgdGFibGUgbm9ybWFsbHksCiAJICogYnV0IHRoYXQncyBvaywgaHVnZXRsYmZzIGlzIG1lbW9yeSBiYXNlZCwgc28gd2UgZG9uJ3QgbmVlZAogCSAqIHRvIGRvIGFueXRoaW5nIG1vcmUgb24gYW4gbXN5bmMoKS4KIAkgKi8KIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0hVR0VUTEIpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlCVUdfT04oYWRkciA+PSBlbmQpOwogCXBnZCA9IHBnZF9vZmZzZXQodm1hLT52bV9tbSwgYWRkcik7CkBAIC0xMDMsOCArMTEzLDkgQEAKIAkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCiAJCQljb250aW51ZTsKLQkJbXN5bmNfcHVkX3JhbmdlKHZtYSwgcGdkLCBhZGRyLCBuZXh0KTsKKwkJcmV0ICs9IG1zeW5jX3B1ZF9yYW5nZSh2bWEsIHBnZCwgYWRkciwgbmV4dCk7CiAJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTExNSw1MyArMTI2LDMxIEBACiAgKiB3cml0ZSBvdXQgdGhlIGRpcnR5IHBhZ2VzIGFuZCB3YWl0IG9uIHRoZSB3cml0ZW91dCBhbmQgY2hlY2sgdGhlIHJlc3VsdC4KICAqIE9yIHRoZSBhcHBsaWNhdGlvbiBtYXkgcnVuIGZhZHZpc2UoRkFEVl9ET05UTkVFRCkgYWdhaW5zdCB0aGUgZmQgdG8gc3RhcnQKICAqIGFzeW5jIHdyaXRlb3V0IGltbWVkaWF0ZWx5LgotICogU28gbXkgX25vdF8gc3RhcnRpbmcgSS9PIGluIE1TX0FTWU5DIHdlIHByb3ZpZGUgY29tcGxldGUgZmxleGliaWxpdHkgdG8KKyAqIFNvIGJ5IF9ub3RfIHN0YXJ0aW5nIEkvTyBpbiBNU19BU1lOQyB3ZSBwcm92aWRlIGNvbXBsZXRlIGZsZXhpYmlsaXR5IHRvCiAgKiBhcHBsaWNhdGlvbnMuCiAgKi8KLXN0YXRpYyBpbnQgbXN5bmNfaW50ZXJ2YWwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50IG1zeW5jX2ludGVydmFsKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQl1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsYWdzLAorCQkJdW5zaWduZWQgbG9uZyAqbnJfcGFnZXNfZGlydGllZCkKIHsKLQlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKIAogCWlmICgoZmxhZ3MgJiBNU19JTlZBTElEQVRFKSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAoZmlsZSAmJiAodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpIHsKLQkJbXN5bmNfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIGVuZCk7Ci0KLQkJaWYgKGZsYWdzICYgTVNfU1lOQykgewotCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7Ci0JCQlpbnQgZXJyOwotCi0JCQlyZXQgPSBmaWxlbWFwX2ZkYXRhd3JpdGUobWFwcGluZyk7Ci0JCQlpZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5mc3luYykgewotCQkJCS8qCi0JCQkJICogV2UgZG9uJ3QgdGFrZSBpX211dGV4IGhlcmUgYmVjYXVzZSBtbWFwX3NlbQotCQkJCSAqIGlzIGFscmVhZHkgaGVsZC4KLQkJCQkgKi8KLQkJCQllcnIgPSBmaWxlLT5mX29wLT5mc3luYyhmaWxlLGZpbGUtPmZfZGVudHJ5LDEpOwotCQkJCWlmIChlcnIgJiYgIXJldCkKLQkJCQkJcmV0ID0gZXJyOwotCQkJfQotCQkJZXJyID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSBlcnI7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKKwlpZiAoZmlsZSAmJiAodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpCisJCSpucl9wYWdlc19kaXJ0aWVkID0gbXN5bmNfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIGVuZCk7CisJcmV0dXJuIDA7CiB9CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbXN5bmModW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgZW5kOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCWludCB1bm1hcHBlZF9lcnJvciwgZXJyb3IgPSAtRUlOVkFMOworCWludCB1bm1hcHBlZF9lcnJvciA9IDA7CisJaW50IGVycm9yID0gLUVJTlZBTDsKKwlpbnQgZG9uZSA9IDA7CiAKLQlpZiAoZmxhZ3MgJiBNU19TWU5DKQotCQljdXJyZW50LT5mbGFncyB8PSBQRl9TWU5DV1JJVEU7Ci0KLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJaWYgKGZsYWdzICYgfihNU19BU1lOQyB8IE1TX0lOVkFMSURBVEUgfCBNU19TWU5DKSkKIAkJZ290byBvdXQ7CiAJaWYgKHN0YXJ0ICYgflBBR0VfTUFTSykKQEAgLTE4MCwxMyArMTY5LDE4IEBACiAJICogSWYgdGhlIGludGVydmFsIFtzdGFydCxlbmQpIGNvdmVycyBzb21lIHVubWFwcGVkIGFkZHJlc3MgcmFuZ2VzLAogCSAqIGp1c3QgaWdub3JlIHRoZW0sIGJ1dCByZXR1cm4gLUVOT01FTSBhdCB0aGUgZW5kLgogCSAqLworCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlpZiAoZmxhZ3MgJiBNU19TWU5DKQorCQljdXJyZW50LT5mbGFncyB8PSBQRl9TWU5DV1JJVEU7CiAJdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIHN0YXJ0KTsKLQl1bm1hcHBlZF9lcnJvciA9IDA7Ci0JZm9yICg7OykgewotCQkvKiBTdGlsbCBzdGFydCA8IGVuZC4gKi8KKwlpZiAoIXZtYSkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWlmICghdm1hKQotCQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJZG8geworCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzX2RpcnRpZWQgPSAwOworCQlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwogCQkvKiBIZXJlIHN0YXJ0IDwgdm1hLT52bV9lbmQuICovCiAJCWlmIChzdGFydCA8IHZtYS0+dm1fc3RhcnQpIHsKIAkJCXVubWFwcGVkX2Vycm9yID0gLUVOT01FTTsKQEAgLTE5NSwyMiArMTg5LDQ3IEBACiAJCS8qIEhlcmUgdm1hLT52bV9zdGFydCA8PSBzdGFydCA8IHZtYS0+dm1fZW5kLiAqLwogCQlpZiAoZW5kIDw9IHZtYS0+dm1fZW5kKSB7CiAJCQlpZiAoc3RhcnQgPCBlbmQpIHsKLQkJCQllcnJvciA9IG1zeW5jX2ludGVydmFsKHZtYSwgc3RhcnQsIGVuZCwgZmxhZ3MpOworCQkJCWVycm9yID0gbXN5bmNfaW50ZXJ2YWwodm1hLCBzdGFydCwgZW5kLCBmbGFncywKKwkJCQkJCQkmbnJfcGFnZXNfZGlydGllZCk7CiAJCQkJaWYgKGVycm9yKQotCQkJCQlnb3RvIG91dDsKKwkJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQogCQkJZXJyb3IgPSB1bm1hcHBlZF9lcnJvcjsKLQkJCWdvdG8gb3V0OworCQkJZG9uZSA9IDE7CisJCX0gZWxzZSB7CisJCQkvKiBIZXJlIHZtYS0+dm1fc3RhcnQgPD0gc3RhcnQgPCB2bWEtPnZtX2VuZCA8IGVuZC4gKi8KKwkJCWVycm9yID0gbXN5bmNfaW50ZXJ2YWwodm1hLCBzdGFydCwgdm1hLT52bV9lbmQsIGZsYWdzLAorCQkJCQkJJm5yX3BhZ2VzX2RpcnRpZWQpOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQotCQkvKiBIZXJlIHZtYS0+dm1fc3RhcnQgPD0gc3RhcnQgPCB2bWEtPnZtX2VuZCA8IGVuZC4gKi8KLQkJZXJyb3IgPSBtc3luY19pbnRlcnZhbCh2bWEsIHN0YXJ0LCB2bWEtPnZtX2VuZCwgZmxhZ3MpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKKwkJZmlsZSA9IHZtYS0+dm1fZmlsZTsKIAkJc3RhcnQgPSB2bWEtPnZtX2VuZDsKLQkJdm1hID0gdm1hLT52bV9uZXh0OwotCX0KLW91dDoKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlpZiAoKGZsYWdzICYgTVNfQVNZTkMpICYmIGZpbGUgJiYgbnJfcGFnZXNfZGlydGllZCkgeworCQkJZ2V0X2ZpbGUoZmlsZSk7CisJCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihmaWxlLT5mX21hcHBpbmcsCisJCQkJCQkJbnJfcGFnZXNfZGlydGllZCk7CisJCQlmcHV0KGZpbGUpOworCQkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQkJdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIHN0YXJ0KTsKKwkJfSBlbHNlIGlmICgoZmxhZ3MgJiBNU19TWU5DKSAmJiBmaWxlICYmCisJCQkJKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKSB7CisJCQlnZXRfZmlsZShmaWxlKTsKKwkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCQllcnJvciA9IGRvX2ZzeW5jKGZpbGUsIDApOworCQkJZnB1dChmaWxlKTsKKwkJCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgc3RhcnQpOworCQl9IGVsc2UgeworCQkJdm1hID0gdm1hLT52bV9uZXh0OworCQl9CisJfSB3aGlsZSAodm1hICYmICFkb25lKTsKK291dF91bmxvY2s6CiAJY3VycmVudC0+ZmxhZ3MgJj0gflBGX1NZTkNXUklURTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworb3V0OgogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IGMxMDI2MmQuLmRiNDVlZmEgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtNTMsMTAgKzUzLDExIEBACiBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wcyA9IHsKIH07CiAKLUVYUE9SVF9TWU1CT0wodm1hbGxvYyk7CiBFWFBPUlRfU1lNQk9MKHZmcmVlKTsKIEVYUE9SVF9TWU1CT0wodm1hbGxvY190b19wYWdlKTsKIEVYUE9SVF9TWU1CT0wodm1hbGxvY18zMik7CitFWFBPUlRfU1lNQk9MKHZtYXApOworRVhQT1JUX1NZTUJPTCh2dW5tYXApOwogCiAvKgogICogSGFuZGxlIGFsbCBtYXBwaW5ncyB0aGF0IGdvdCB0cnVuY2F0ZWQgYnkgYSAidHJ1bmNhdGUoKSIKQEAgLTE1OCw3ICsxNTksNyBAQAogCS8qCiAJICoga21hbGxvYyBkb2Vzbid0IGxpa2UgX19HRlBfSElHSE1FTSBmb3Igc29tZSByZWFzb24KIAkgKi8KLQlyZXR1cm4ga21hbGxvYyhzaXplLCBnZnBfbWFzayAmIH5fX0dGUF9ISUdITUVNKTsKKwlyZXR1cm4ga21hbGxvYyhzaXplLCAoZ2ZwX21hc2sgfCBfX0dGUF9DT01QKSAmIH5fX0dGUF9ISUdITUVNKTsKIH0KIAogc3RydWN0IHBhZ2UgKiB2bWFsbG9jX3RvX3BhZ2Uodm9pZCAqYWRkcikKQEAgLTIwMyw2ICsyMDQsMTMgQEAKIHsKICAgICAgICByZXR1cm4gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCk7CiB9CitFWFBPUlRfU1lNQk9MKHZtYWxsb2MpOworCit2b2lkICp2bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSkKK3sKKwlyZXR1cm4gdm1hbGxvYyhzaXplKTsKK30KK0VYUE9SVF9TWU1CT0wodm1hbGxvY19ub2RlKTsKIAogLyoKICAqCXZtYWxsb2NfMzIgIC0gIGFsbG9jYXRlIHZpcnR1YWxseSBjb250aW5ndW9zIG1lbW9yeSAoMzJiaXQgYWRkcmVzc2FibGUpCkBAIC02MTUsNyArNjIzLDcgQEAKIAkgKiAtIG5vdGUgdGhhdCB0aGlzIG1heSBub3QgcmV0dXJuIGEgcGFnZS1hbGlnbmVkIGFkZHJlc3MgaWYgdGhlIG9iamVjdAogCSAqICAgd2UncmUgYWxsb2NhdGluZyBpcyBzbWFsbGVyIHRoYW4gYSBwYWdlCiAJICovCi0JYmFzZSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwliYXNlID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUx8X19HRlBfQ09NUCk7CiAJaWYgKCFiYXNlKQogCQlnb3RvIGVub21lbTsKIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggYjA1YWI4Zi4uNzg3NDdhZiAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC01OCwxNSArNTgsMTcgQEAKIAogCS8qCiAJICogUHJvY2Vzc2VzIHdoaWNoIGZvcmsgYSBsb3Qgb2YgY2hpbGQgcHJvY2Vzc2VzIGFyZSBsaWtlbHkKLQkgKiBhIGdvb2QgY2hvaWNlLiBXZSBhZGQgdGhlIHZtc2l6ZSBvZiB0aGUgY2hpbGRyZW4gaWYgdGhleQorCSAqIGEgZ29vZCBjaG9pY2UuIFdlIGFkZCBoYWxmIHRoZSB2bXNpemUgb2YgdGhlIGNoaWxkcmVuIGlmIHRoZXkKIAkgKiBoYXZlIGFuIG93biBtbS4gVGhpcyBwcmV2ZW50cyBmb3JraW5nIHNlcnZlcnMgdG8gZmxvb2QgdGhlCi0JICogbWFjaGluZSB3aXRoIGFuIGVuZGxlc3MgYW1vdW50IG9mIGNoaWxkcmVuCisJICogbWFjaGluZSB3aXRoIGFuIGVuZGxlc3MgYW1vdW50IG9mIGNoaWxkcmVuLiBJbiBjYXNlIGEgc2luZ2xlCisJICogY2hpbGQgaXMgZWF0aW5nIHRoZSB2YXN0IG1ham9yaXR5IG9mIG1lbW9yeSwgYWRkaW5nIG9ubHkgaGFsZgorCSAqIHRvIHRoZSBwYXJlbnRzIHdpbGwgbWFrZSB0aGUgY2hpbGQgb3VyIGtpbGwgY2FuZGlkYXRlIG9mIGNob2ljZS4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoKHRzaywgJnAtPmNoaWxkcmVuKSB7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hsZDsKIAkJY2hsZCA9IGxpc3RfZW50cnkodHNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNpYmxpbmcpOwogCQlpZiAoY2hsZC0+bW0gIT0gcC0+bW0gJiYgY2hsZC0+bW0pCi0JCQlwb2ludHMgKz0gY2hsZC0+bW0tPnRvdGFsX3ZtOworCQkJcG9pbnRzICs9IGNobGQtPm1tLT50b3RhbF92bS8yICsgMTsKIAl9CiAKIAkvKgpAQCAtMTMxLDE3ICsxMzMsNDcgQEAKIH0KIAogLyoKKyAqIFR5cGVzIG9mIGxpbWl0YXRpb25zIHRvIHRoZSBub2RlcyBmcm9tIHdoaWNoIGFsbG9jYXRpb25zIG1heSBvY2N1cgorICovCisjZGVmaW5lIENPTlNUUkFJTlRfTk9ORSAxCisjZGVmaW5lIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWSAyCisjZGVmaW5lIENPTlNUUkFJTlRfQ1BVU0VUIDMKKworLyoKKyAqIERldGVybWluZSB0aGUgdHlwZSBvZiBhbGxvY2F0aW9uIGNvbnN0cmFpbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNvbnN0cmFpbmVkX2FsbG9jKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGdmcF90IGdmcF9tYXNrKQoreworI2lmZGVmIENPTkZJR19OVU1BCisJc3RydWN0IHpvbmUgKip6OworCW5vZGVtYXNrX3Qgbm9kZXMgPSBub2RlX29ubGluZV9tYXA7CisKKwlmb3IgKHogPSB6b25lbGlzdC0+em9uZXM7ICp6OyB6KyspCisJCWlmIChjcHVzZXRfem9uZV9hbGxvd2VkKCp6LCBnZnBfbWFzaykpCisJCQlub2RlX2NsZWFyKCgqeiktPnpvbmVfcGdkYXQtPm5vZGVfaWQsCisJCQkJCW5vZGVzKTsKKwkJZWxzZQorCQkJcmV0dXJuIENPTlNUUkFJTlRfQ1BVU0VUOworCisJaWYgKCFub2Rlc19lbXB0eShub2RlcykpCisJCXJldHVybiBDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1k7CisjZW5kaWYKKworCXJldHVybiBDT05TVFJBSU5UX05PTkU7Cit9CisKKy8qCiAgKiBTaW1wbGUgc2VsZWN0aW9uIGxvb3AuIFdlIGNob3NlIHRoZSBwcm9jZXNzIHdpdGggdGhlIGhpZ2hlc3QKICAqIG51bWJlciBvZiAncG9pbnRzJy4gV2UgZXhwZWN0IHRoZSBjYWxsZXIgd2lsbCBsb2NrIHRoZSB0YXNrbGlzdC4KICAqCiAgKiAobm90IGRvY2Jvb2tlZCwgd2UgZG9uJ3Qgd2FudCB0aGlzIG9uZSBjbHV0dGVyaW5nIHVwIHRoZSBtYW51YWwpCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBzZWxlY3RfYmFkX3Byb2Nlc3Modm9pZCkKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNlbGVjdF9iYWRfcHJvY2Vzcyh1bnNpZ25lZCBsb25nICpwcG9pbnRzKQogewotCXVuc2lnbmVkIGxvbmcgbWF4cG9pbnRzID0gMDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hvc2VuID0gTlVMTDsKIAlzdHJ1Y3QgdGltZXNwZWMgdXB0aW1lOworCSpwcG9pbnRzID0gMDsKIAogCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOwogCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKQEAgLTE2OSw5ICsyMDEsOSBAQAogCQkJcmV0dXJuIHA7CiAKIAkJcG9pbnRzID0gYmFkbmVzcyhwLCB1cHRpbWUudHZfc2VjKTsKLQkJaWYgKHBvaW50cyA+IG1heHBvaW50cyB8fCAhY2hvc2VuKSB7CisJCWlmIChwb2ludHMgPiAqcHBvaW50cyB8fCAhY2hvc2VuKSB7CiAJCQljaG9zZW4gPSBwOwotCQkJbWF4cG9pbnRzID0gcG9pbnRzOworCQkJKnBwb2ludHMgPSBwb2ludHM7CiAJCX0KIAl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwogCXJldHVybiBjaG9zZW47CkBAIC0xODIsNyArMjE0LDcgQEAKICAqIENBUF9TWVNfUkFXX0lPIHNldCwgc2VuZCBTSUdURVJNIGluc3RlYWQgKGJ1dCBpdCdzIHVubGlrZWx5IHRoYXQKICAqIHdlIHNlbGVjdCBhIHByb2Nlc3Mgd2l0aCBDQVBfU1lTX1JBV19JTyBzZXQpLgogICovCi1zdGF0aWMgdm9pZCBfX29vbV9raWxsX3Rhc2sodGFza190ICpwKQorc3RhdGljIHZvaWQgX19vb21fa2lsbF90YXNrKHRhc2tfdCAqcCwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKIAlpZiAocC0+cGlkID09IDEpIHsKIAkJV0FSTl9PTigxKTsKQEAgLTE5OCw4ICsyMzAsOCBAQAogCQlyZXR1cm47CiAJfQogCXRhc2tfdW5sb2NrKHApOwotCXByaW50ayhLRVJOX0VSUiAiT3V0IG9mIE1lbW9yeTogS2lsbGVkIHByb2Nlc3MgJWQgKCVzKS5cbiIsCi0JCQkJCQkJcC0+cGlkLCBwLT5jb21tKTsKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBLaWxsZWQgcHJvY2VzcyAlZCAoJXMpLlxuIiwKKwkJCQltZXNzYWdlLCBwLT5waWQsIHAtPmNvbW0pOwogCiAJLyoKIAkgKiBXZSBnaXZlIG91ciBzYWNyaWZpY2lhbCBsYW1iIGhpZ2ggcHJpb3JpdHkgYW5kIGFjY2VzcyB0bwpAQCAtMjEyLDcgKzI0NCw3IEBACiAJZm9yY2Vfc2lnKFNJR0tJTEwsIHApOwogfQogCi1zdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqb29tX2tpbGxfdGFzayh0YXNrX3QgKnApCitzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqb29tX2tpbGxfdGFzayh0YXNrX3QgKnAsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBnZXRfdGFza19tbShwKTsKIAl0YXNrX3QgKiBnLCAqIHE7CkBAIC0yMjQsMzUgKzI1NiwzOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlfX29vbV9raWxsX3Rhc2socCk7CisJX19vb21fa2lsbF90YXNrKHAsIG1lc3NhZ2UpOwogCS8qCiAJICoga2lsbCBhbGwgcHJvY2Vzc2VzIHRoYXQgc2hhcmUgdGhlIC0+bW0gKGkuZS4gYWxsIHRocmVhZHMpLAogCSAqIGJ1dCBhcmUgaW4gYSBkaWZmZXJlbnQgdGhyZWFkIGdyb3VwCiAJICovCiAJZG9fZWFjaF90aHJlYWQoZywgcSkKIAkJaWYgKHEtPm1tID09IG1tICYmIHEtPnRnaWQgIT0gcC0+dGdpZCkKLQkJCV9fb29tX2tpbGxfdGFzayhxKTsKKwkJCV9fb29tX2tpbGxfdGFzayhxLCBtZXNzYWdlKTsKIAl3aGlsZV9lYWNoX3RocmVhZChnLCBxKTsKIAogCXJldHVybiBtbTsKIH0KIAotc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKm9vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKm9vbV9raWxsX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkJCXVuc2lnbmVkIGxvbmcgcG9pbnRzLCBjb25zdCBjaGFyICptZXNzYWdlKQogewogIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmM7CiAJc3RydWN0IGxpc3RfaGVhZCAqdHNrOwogCisJcHJpbnRrKEtFUk5fRVJSICJPdXQgb2YgTWVtb3J5OiBLaWxsIHByb2Nlc3MgJWQgKCVzKSBzY29yZSAlbGkgYW5kICIKKwkJImNoaWxkcmVuLlxuIiwgcC0+cGlkLCBwLT5jb21tLCBwb2ludHMpOwogCS8qIFRyeSB0byBraWxsIGEgY2hpbGQgZmlyc3QgKi8KIAlsaXN0X2Zvcl9lYWNoKHRzaywgJnAtPmNoaWxkcmVuKSB7CiAJCWMgPSBsaXN0X2VudHJ5KHRzaywgc3RydWN0IHRhc2tfc3RydWN0LCBzaWJsaW5nKTsKIAkJaWYgKGMtPm1tID09IHAtPm1tKQogCQkJY29udGludWU7Ci0JCW1tID0gb29tX2tpbGxfdGFzayhjKTsKKwkJbW0gPSBvb21fa2lsbF90YXNrKGMsIG1lc3NhZ2UpOwogCQlpZiAobW0pCiAJCQlyZXR1cm4gbW07CiAJfQotCXJldHVybiBvb21fa2lsbF90YXNrKHApOworCXJldHVybiBvb21fa2lsbF90YXNrKHAsIG1lc3NhZ2UpOwogfQogCiAvKioKQEAgLTI2MywxMCArMjk4LDExIEBACiAgKiBPUiB0cnkgdG8gYmUgc21hcnQgYWJvdXQgd2hpY2ggcHJvY2VzcyB0byBraWxsLiBOb3RlIHRoYXQgd2UKICAqIGRvbid0IGhhdmUgdG8gYmUgcGVyZmVjdCBoZXJlLCB3ZSBqdXN0IGhhdmUgdG8gYmUgZ29vZC4KICAqLwotdm9pZCBvdXRfb2ZfbWVtb3J5KGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIpCit2b2lkIG91dF9vZl9tZW1vcnkoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcikKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7Ci0JdGFza190ICogcDsKKwl0YXNrX3QgKnA7CisJdW5zaWduZWQgbG9uZyBwb2ludHMgPSAwOwogCiAJaWYgKHByaW50a19yYXRlbGltaXQoKSkgewogCQlwcmludGsoIm9vbS1raWxsZXI6IGdmcF9tYXNrPTB4JXgsIG9yZGVyPSVkXG4iLApAQCAtMjc3LDI0ICszMTMsNDggQEAKIAogCWNwdXNldF9sb2NrKCk7CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlcmUgd2VyZSBsaW1pdGF0aW9ucyBvbiB0aGUgYWxsb2NhdGlvbiAob25seSByZWxldmFudCBmb3IKKwkgKiBOVU1BKSB0aGF0IG1heSByZXF1aXJlIGRpZmZlcmVudCBoYW5kbGluZy4KKwkgKi8KKwlzd2l0Y2ggKGNvbnN0cmFpbmVkX2FsbG9jKHpvbmVsaXN0LCBnZnBfbWFzaykpIHsKKwljYXNlIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWToKKwkJbW0gPSBvb21fa2lsbF9wcm9jZXNzKGN1cnJlbnQsIHBvaW50cywKKwkJCQkiTm8gYXZhaWxhYmxlIG1lbW9yeSAoTVBPTF9CSU5EKSIpOworCQlicmVhazsKKworCWNhc2UgQ09OU1RSQUlOVF9DUFVTRVQ6CisJCW1tID0gb29tX2tpbGxfcHJvY2VzcyhjdXJyZW50LCBwb2ludHMsCisJCQkJIk5vIGF2YWlsYWJsZSBtZW1vcnkgaW4gY3B1c2V0Iik7CisJCWJyZWFrOworCisJY2FzZSBDT05TVFJBSU5UX05PTkU6CiByZXRyeToKLQlwID0gc2VsZWN0X2JhZF9wcm9jZXNzKCk7CisJCS8qCisJCSAqIFJhbWJvIG1vZGU6IFNob290IGRvd24gYSBwcm9jZXNzIGFuZCBob3BlIGl0IHNvbHZlcyB3aGF0ZXZlcgorCQkgKiBpc3N1ZXMgd2UgbWF5IGhhdmUuCisJCSAqLworCQlwID0gc2VsZWN0X2JhZF9wcm9jZXNzKCZwb2ludHMpOwogCi0JaWYgKFBUUl9FUlIocCkgPT0gLTFVTCkKLQkJZ290byBvdXQ7CisJCWlmIChQVFJfRVJSKHApID09IC0xVUwpCisJCQlnb3RvIG91dDsKIAotCS8qIEZvdW5kIG5vdGhpbmc/IT8hIEVpdGhlciB3ZSBoYW5nIGZvcmV2ZXIsIG9yIHdlIHBhbmljLiAqLwotCWlmICghcCkgewotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCWNwdXNldF91bmxvY2soKTsKLQkJcGFuaWMoIk91dCBvZiBtZW1vcnkgYW5kIG5vIGtpbGxhYmxlIHByb2Nlc3Nlcy4uLlxuIik7CisJCS8qIEZvdW5kIG5vdGhpbmc/IT8hIEVpdGhlciB3ZSBoYW5nIGZvcmV2ZXIsIG9yIHdlIHBhbmljLiAqLworCQlpZiAoIXApIHsKKwkJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJCWNwdXNldF91bmxvY2soKTsKKwkJCXBhbmljKCJPdXQgb2YgbWVtb3J5IGFuZCBubyBraWxsYWJsZSBwcm9jZXNzZXMuLi5cbiIpOworCQl9CisKKwkJbW0gPSBvb21fa2lsbF9wcm9jZXNzKHAsIHBvaW50cywgIk91dCBvZiBtZW1vcnkiKTsKKwkJaWYgKCFtbSkKKwkJCWdvdG8gcmV0cnk7CisKKwkJYnJlYWs7CiAJfQogCi0JbW0gPSBvb21fa2lsbF9wcm9jZXNzKHApOwotCWlmICghbW0pCi0JCWdvdG8gcmV0cnk7Ci0KLSBvdXQ6CitvdXQ6CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCWNwdXNldF91bmxvY2soKTsKIAlpZiAobW0pCkBAIC0zMDUsNSArMzY1LDUgQEAKIAkgKiByZXRyeSB0byBhbGxvY2F0ZSBtZW1vcnkgdW5sZXNzICJwIiBpcyBjdXJyZW50CiAJICovCiAJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKQotCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CisJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggOTQ1NTU5Zi4uODkzZDc2NyAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC03NSwxMiArNzUsMTIgQEAKICAqIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIGBrdXBkYXRlJy1zdHlsZSB3cml0ZWJhY2tzLCBpbiBjZW50aXNlY29uZHMKICAqIChodW5kcmVkdGhzIG9mIGEgc2Vjb25kKQogICovCi1pbnQgZGlydHlfd3JpdGViYWNrX2NlbnRpc2VjcyA9IDUgKiAxMDA7CitpbnQgZGlydHlfd3JpdGViYWNrX2ludGVydmFsID0gNSAqIEhaOwogCiAvKgogICogVGhlIGxvbmdlc3QgbnVtYmVyIG9mIGNlbnRpc2Vjb25kcyBmb3Igd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIHJlbWFpbiBkaXJ0eQogICovCi1pbnQgZGlydHlfZXhwaXJlX2NlbnRpc2VjcyA9IDMwICogMTAwOworaW50IGRpcnR5X2V4cGlyZV9pbnRlcnZhbCA9IDMwICogSFo7CiAKIC8qCiAgKiBGbGFnIHRoYXQgbWFrZXMgdGhlIG1hY2hpbmUgZHVtcCB3cml0ZXMvcmVhZHMgYW5kIGJsb2NrIGRpcnR5aW5ncy4KQEAgLTg4LDcgKzg4LDggQEAKIGludCBibG9ja19kdW1wOwogCiAvKgotICogRmxhZyB0aGF0IHB1dHMgdGhlIG1hY2hpbmUgaW4gImxhcHRvcCBtb2RlIi4KKyAqIEZsYWcgdGhhdCBwdXRzIHRoZSBtYWNoaW5lIGluICJsYXB0b3AgbW9kZSIuIERvdWJsZXMgYXMgYSB0aW1lb3V0IGluIGppZmZpZXM6CisgKiBhIGZ1bGwgc3luYyBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdGhpcyB0aW1lIGVsYXBzZXMgd2l0aG91dCBhbnkgZGlzayBhY3Rpdml0eS4KICAqLwogaW50IGxhcHRvcF9tb2RlOwogCkBAIC0yNTUsOCArMjU2LDkgQEAKIH0KIAogLyoqCi0gKiBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkIC0gYmFsYW5jZSBkaXJ0eSBtZW1vcnkgc3RhdGUKKyAqIGJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIgLSBiYWxhbmNlIGRpcnR5IG1lbW9yeSBzdGF0ZQogICogQG1hcHBpbmc6IGFkZHJlc3Nfc3BhY2Ugd2hpY2ggd2FzIGRpcnRpZWQKKyAqIEBucl9wYWdlczogbnVtYmVyIG9mIHBhZ2VzIHdoaWNoIHRoZSBjYWxsZXIgaGFzIGp1c3QgZGlydGllZAogICoKICAqIFByb2Nlc3NlcyB3aGljaCBhcmUgZGlydHlpbmcgbWVtb3J5IHNob3VsZCBjYWxsIGluIGhlcmUgb25jZSBmb3IgZWFjaCBwYWdlCiAgKiB3aGljaCB3YXMgbmV3bHkgZGlydGllZC4gIFRoZSBmdW5jdGlvbiB3aWxsIHBlcmlvZGljYWxseSBjaGVjayB0aGUgc3lzdGVtJ3MKQEAgLTI2NywxMCArMjY5LDEyIEBACiAgKiBsaW1pdCB3ZSBkZWNyZWFzZSB0aGUgcmF0ZWxpbWl0aW5nIGJ5IGEgbG90LCB0byBwcmV2ZW50IGluZGl2aWR1YWwgcHJvY2Vzc2VzCiAgKiBmcm9tIG92ZXJzaG9vdGluZyB0aGUgbGltaXQgYnkgKHJhdGVsaW1pdF9wYWdlcykgZWFjaC4KICAqLwotdm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQordm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkX25yKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzX2RpcnRpZWQpCiB7Ci0Jc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcmF0ZWxpbWl0cykgPSAwOwotCWxvbmcgcmF0ZWxpbWl0OworCXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCByYXRlbGltaXRzKSA9IDA7CisJdW5zaWduZWQgbG9uZyByYXRlbGltaXQ7CisJdW5zaWduZWQgbG9uZyAqcDsKIAogCXJhdGVsaW1pdCA9IHJhdGVsaW1pdF9wYWdlczsKIAlpZiAoZGlydHlfZXhjZWVkZWQpCkBAIC0yODAsMTUgKzI4NCwxOCBAQAogCSAqIENoZWNrIHRoZSByYXRlIGxpbWl0aW5nLiBBbHNvLCB3ZSBkbyBub3Qgd2FudCB0byB0aHJvdHRsZSByZWFsLXRpbWUKIAkgKiB0YXNrcyBpbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKCkuIFBlcmlvZC4KIAkgKi8KLQlpZiAoZ2V0X2NwdV92YXIocmF0ZWxpbWl0cykrKyA+PSByYXRlbGltaXQpIHsKLQkJX19nZXRfY3B1X3ZhcihyYXRlbGltaXRzKSA9IDA7Ci0JCXB1dF9jcHVfdmFyKHJhdGVsaW1pdHMpOworCXByZWVtcHRfZGlzYWJsZSgpOworCXAgPSAgJl9fZ2V0X2NwdV92YXIocmF0ZWxpbWl0cyk7CisJKnAgKz0gbnJfcGFnZXNfZGlydGllZDsKKwlpZiAodW5saWtlbHkoKnAgPj0gcmF0ZWxpbWl0KSkgeworCQkqcCA9IDA7CisJCXByZWVtcHRfZW5hYmxlKCk7CiAJCWJhbGFuY2VfZGlydHlfcGFnZXMobWFwcGluZyk7CiAJCXJldHVybjsKIAl9Ci0JcHV0X2NwdV92YXIocmF0ZWxpbWl0cyk7CisJcHJlZW1wdF9lbmFibGUoKTsKIH0KLUVYUE9SVF9TWU1CT0woYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZCk7CitFWFBPUlRfU1lNQk9MKGJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIpOwogCiB2b2lkIHRocm90dGxlX3ZtX3dyaXRlb3V0KHZvaWQpCiB7CkBAIC0zODAsOCArMzg3LDggQEAKICAqIGp1c3Qgd2Fsa3MgdGhlIHN1cGVyYmxvY2sgaW5vZGUgbGlzdCwgd3JpdGluZyBiYWNrIGFueSBpbm9kZXMgd2hpY2ggYXJlCiAgKiBvbGRlciB0aGFuIGEgc3BlY2lmaWMgcG9pbnQgaW4gdGltZS4KICAqCi0gKiBUcnkgdG8gcnVuIG9uY2UgcGVyIGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MuICBCdXQgaWYgYSB3cml0ZWJhY2sgZXZlbnQKLSAqIHRha2VzIGxvbmdlciB0aGFuIGEgZGlydHlfd3JpdGViYWNrX2NlbnRpc2VjcyBpbnRlcnZhbCwgdGhlbiBsZWF2ZSBhCisgKiBUcnkgdG8gcnVuIG9uY2UgcGVyIGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbC4gIEJ1dCBpZiBhIHdyaXRlYmFjayBldmVudAorICogdGFrZXMgbG9uZ2VyIHRoYW4gYSBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgaW50ZXJ2YWwsIHRoZW4gbGVhdmUgYQogICogb25lLXNlY29uZCBnYXAuCiAgKgogICogb2xkZXJfdGhhbl90aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBucl90b193cml0ZS4gIFNvIHdlJ2xsIG9ubHkgd3JpdGUgYmFjawpAQCAtNDA2LDkgKzQxMyw5IEBACiAJc3luY19zdXBlcnMoKTsKIAogCWdldF93cml0ZWJhY2tfc3RhdGUoJndicyk7Ci0Jb2xkZXN0X2ppZiA9IGppZmZpZXMgLSAoZGlydHlfZXhwaXJlX2NlbnRpc2VjcyAqIEhaKSAvIDEwMDsKKwlvbGRlc3RfamlmID0gamlmZmllcyAtIGRpcnR5X2V4cGlyZV9pbnRlcnZhbDsKIAlzdGFydF9qaWYgPSBqaWZmaWVzOwotCW5leHRfamlmID0gc3RhcnRfamlmICsgKGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MgKiBIWikgLyAxMDA7CisJbmV4dF9qaWYgPSBzdGFydF9qaWYgKyBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWw7CiAJbnJfdG9fd3JpdGUgPSB3YnMubnJfZGlydHkgKyB3YnMubnJfdW5zdGFibGUgKwogCQkJKGlub2Rlc19zdGF0Lm5yX2lub2RlcyAtIGlub2Rlc19zdGF0Lm5yX3VudXNlZCk7CiAJd2hpbGUgKG5yX3RvX3dyaXRlID4gMCkgewpAQCAtNDI1LDcgKzQzMiw3IEBACiAJfQogCWlmICh0aW1lX2JlZm9yZShuZXh0X2ppZiwgamlmZmllcyArIEhaKSkKIAkJbmV4dF9qaWYgPSBqaWZmaWVzICsgSFo7Ci0JaWYgKGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MpCisJaWYgKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCkKIAkJbW9kX3RpbWVyKCZ3Yl90aW1lciwgbmV4dF9qaWYpOwogfQogCkBAIC00MzUsMTEgKzQ0MiwxMSBAQAogaW50IGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3NfaGFuZGxlcihjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCXN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbmd0aCwgbG9mZl90ICpwcG9zKQogewotCXByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7Ci0JaWYgKGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MpIHsKKwlwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKHRhYmxlLCB3cml0ZSwgZmlsZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCWlmIChkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwpIHsKIAkJbW9kX3RpbWVyKCZ3Yl90aW1lciwKLQkJCWppZmZpZXMgKyAoZGlydHlfd3JpdGViYWNrX2NlbnRpc2VjcyAqIEhaKSAvIDEwMCk7Ci0JfSBlbHNlIHsKKwkJCWppZmZpZXMgKyBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwpOworCQl9IGVsc2UgewogCQlkZWxfdGltZXIoJndiX3RpbWVyKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NjgsNyArNDc1LDcgQEAKICAqLwogdm9pZCBsYXB0b3BfaW9fY29tcGxldGlvbih2b2lkKQogewotCW1vZF90aW1lcigmbGFwdG9wX21vZGVfd2JfdGltZXIsIGppZmZpZXMgKyBsYXB0b3BfbW9kZSAqIEhaKTsKKwltb2RfdGltZXIoJmxhcHRvcF9tb2RlX3diX3RpbWVyLCBqaWZmaWVzICsgbGFwdG9wX21vZGUpOwogfQogCiAvKgpAQCAtNTQ0LDcgKzU1MSw3IEBACiAJCWlmICh2bV9kaXJ0eV9yYXRpbyA8PSAwKQogCQkJdm1fZGlydHlfcmF0aW8gPSAxOwogCX0KLQltb2RfdGltZXIoJndiX3RpbWVyLCBqaWZmaWVzICsgKGRpcnR5X3dyaXRlYmFja19jZW50aXNlY3MgKiBIWikgLyAxMDApOworCW1vZF90aW1lcigmd2JfdGltZXIsIGppZmZpZXMgKyBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwpOwogCXNldF9yYXRlbGltaXQoKTsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnJhdGVsaW1pdF9uYik7CiB9CkBAIC02MjEsOCArNjI4LDYgQEAKICAqLwogaW50IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWludCByZXQgPSAwOwotCiAJaWYgKCFUZXN0U2V0UGFnZURpcnR5KHBhZ2UpKSB7CiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzI7CkBAIC02NDQsOCArNjQ5LDkgQEAKIAkJCQkJCQlJX0RJUlRZX1BBR0VTKTsKIAkJCX0KIAkJfQorCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMpOwogCkBAIC02NzUsOCArNjgxLDEwIEBACiAJCQlyZXR1cm4gKCpzcGQpKHBhZ2UpOwogCQlyZXR1cm4gX19zZXRfcGFnZV9kaXJ0eV9idWZmZXJzKHBhZ2UpOwogCX0KLQlpZiAoIVBhZ2VEaXJ0eShwYWdlKSkKLQkJU2V0UGFnZURpcnR5KHBhZ2UpOworCWlmICghUGFnZURpcnR5KHBhZ2UpKSB7CisJCWlmICghVGVzdFNldFBhZ2VEaXJ0eShwYWdlKSkKKwkJCXJldHVybiAxOworCX0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VfZGlydHkpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDIwODgxMmIuLjMzOGEwMmIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTU1LDcgKzU1LDYgQEAKIGxvbmcgbnJfc3dhcF9wYWdlczsKIGludCBwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb247CiAKLXN0YXRpYyB2b2lkIGZhc3RjYWxsIGZyZWVfaG90X2NvbGRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNvbGQpOwogc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogCiAvKgpAQCAtMTkwLDcgKzE4OSw3IEBACiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlICsgaTsKIAotCQlTZXRQYWdlQ29tcG91bmQocCk7CisJCV9fU2V0UGFnZUNvbXBvdW5kKHApOwogCQlzZXRfcGFnZV9wcml2YXRlKHAsICh1bnNpZ25lZCBsb25nKXBhZ2UpOwogCX0KIH0KQEAgLTIwOSwxMCArMjA4LDI0IEBACiAJCWlmICh1bmxpa2VseSghUGFnZUNvbXBvdW5kKHApIHwKIAkJCQkocGFnZV9wcml2YXRlKHApICE9ICh1bnNpZ25lZCBsb25nKXBhZ2UpKSkKIAkJCWJhZF9wYWdlKHBhZ2UpOwotCQlDbGVhclBhZ2VDb21wb3VuZChwKTsKKwkJX19DbGVhclBhZ2VDb21wb3VuZChwKTsKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVwX3plcm9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJaW50IGk7CisKKwlCVUdfT04oKGdmcF9mbGFncyAmIChfX0dGUF9XQUlUIHwgX19HRlBfSElHSE1FTSkpID09IF9fR0ZQX0hJR0hNRU0pOworCS8qCisJICogY2xlYXJfaGlnaHBhZ2UoKSB3aWxsIHVzZSBLTV9VU0VSMCwgc28gaXQncyBhIGJ1ZyB0byB1c2UgX19HRlBfWkVSTworCSAqIGFuZCBfX0dGUF9ISUdITUVNIGZyb20gaGFyZCBvciBzb2Z0IGludGVycnVwdCBjb250ZXh0LgorCSAqLworCUJVR19PTigoZ2ZwX2ZsYWdzICYgX19HRlBfSElHSE1FTSkgJiYgaW5faW50ZXJydXB0KCkpOworCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBvcmRlcik7IGkrKykKKwkJY2xlYXJfaGlnaHBhZ2UocGFnZSArIGkpOworfQorCiAvKgogICogZnVuY3Rpb24gZm9yIGRlYWxpbmcgd2l0aCBwYWdlJ3Mgb3JkZXIgaW4gYnVkZHkgc3lzdGVtLgogICogem9uZS0+bG9jayBpcyBhbHJlYWR5IGFjcXVpcmVkIHdoZW4gd2UgdXNlIHRoZXNlLgpAQCAtNDIzLDExICs0MzYsNiBAQAogCQltdXRleF9kZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChwYWdlX2FkZHJlc3MocGFnZSksCiAJCQkJCQkgUEFHRV9TSVpFPDxvcmRlcik7CiAKLSNpZm5kZWYgQ09ORklHX01NVQotCWZvciAoaSA9IDEgOyBpIDwgKDEgPDwgb3JkZXIpIDsgKytpKQotCQlfX3B1dF9wYWdlKHBhZ2UgKyBpKTsKLSNlbmRpZgotCiAJZm9yIChpID0gMCA7IGkgPCAoMSA8PCBvcmRlcikgOyArK2kpCiAJCXJlc2VydmVkICs9IGZyZWVfcGFnZXNfY2hlY2socGFnZSArIGkpOwogCWlmIChyZXNlcnZlZCkKQEAgLTQ0OCwyOCArNDU2LDIzIEBACiAJaWYgKG9yZGVyID09IDApIHsKIAkJX19DbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKIAkJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7Ci0KLQkJZnJlZV9ob3RfY29sZF9wYWdlKHBhZ2UsIDApOworCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UpOworCQlfX2ZyZWVfcGFnZShwYWdlKTsKIAl9IGVsc2UgewotCQlMSVNUX0hFQUQobGlzdCk7CiAJCWludCBsb29wOwogCisJCXByZWZldGNodyhwYWdlKTsKIAkJZm9yIChsb29wID0gMDsgbG9vcCA8IEJJVFNfUEVSX0xPTkc7IGxvb3ArKykgewogCQkJc3RydWN0IHBhZ2UgKnAgPSAmcGFnZVtsb29wXTsKIAotCQkJaWYgKGxvb3AgKyAxNiA8IEJJVFNfUEVSX0xPTkcpCi0JCQkJcHJlZmV0Y2h3KHAgKyAxNik7CisJCQlpZiAobG9vcCArIDEgPCBCSVRTX1BFUl9MT05HKQorCQkJCXByZWZldGNodyhwICsgMSk7CiAJCQlfX0NsZWFyUGFnZVJlc2VydmVkKHApOwogCQkJc2V0X3BhZ2VfY291bnQocCwgMCk7CiAJCX0KIAotCQlhcmNoX2ZyZWVfcGFnZShwYWdlLCBvcmRlcik7Ci0KLQkJbW9kX3BhZ2Vfc3RhdGUocGdmcmVlLCAxIDw8IG9yZGVyKTsKLQotCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbGlzdCk7Ci0JCWtlcm5lbF9tYXBfcGFnZXMocGFnZSwgMSA8PCBvcmRlciwgMCk7Ci0JCWZyZWVfcGFnZXNfYnVsayhwYWdlX3pvbmUocGFnZSksIDEsICZsaXN0LCBvcmRlcik7CisJCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7CisJCV9fZnJlZV9wYWdlcyhwYWdlLCBvcmRlcik7CiAJfQogfQogCkBAIC01MDcsNyArNTEwLDcgQEAKIC8qCiAgKiBUaGlzIHBhZ2UgaXMgYWJvdXQgdG8gYmUgcmV0dXJuZWQgZnJvbSB0aGUgcGFnZSBhbGxvY2F0b3IKICAqLwotc3RhdGljIGludCBwcmVwX25ld19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCitzdGF0aWMgaW50IHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCWlmICh1bmxpa2VseShwYWdlX21hcGNvdW50KHBhZ2UpIHwKIAkJKHBhZ2UtPm1hcHBpbmcgIT0gTlVMTCkgIHwKQEAgLTUzNiw4ICs1MzksMTUgQEAKIAkJCTEgPDwgUEdfcmVmZXJlbmNlZCB8IDEgPDwgUEdfYXJjaF8xIHwKIAkJCTEgPDwgUEdfY2hlY2tlZCB8IDEgPDwgUEdfbWFwcGVkdG9kaXNrKTsKIAlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOwotCXNldF9wYWdlX3JlZnMocGFnZSwgb3JkZXIpOworCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZSk7CiAJa2VybmVsX21hcF9wYWdlcyhwYWdlLCAxIDw8IG9yZGVyLCAxKTsKKworCWlmIChnZnBfZmxhZ3MgJiBfX0dGUF9aRVJPKQorCQlwcmVwX3plcm9fcGFnZShwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzKTsKKworCWlmIChvcmRlciAmJiAoZ2ZwX2ZsYWdzICYgX19HRlBfQ09NUCkpCisJCXByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTkwLDMxICs2MDAsMzQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19OVU1BCi0vKiBDYWxsZWQgZnJvbSB0aGUgc2xhYiByZWFwZXIgdG8gZHJhaW4gcmVtb3RlIHBhZ2VzZXRzICovCi12b2lkIGRyYWluX3JlbW90ZV9wYWdlcyh2b2lkKQorLyoKKyAqIENhbGxlZCBmcm9tIHRoZSBzbGFiIHJlYXBlciB0byBkcmFpbiBwYWdlc2V0cyBvbiBhIHBhcnRpY3VsYXIgbm9kZSB0aGF0CisgKiBiZWxvbmcgdG8gdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJvY2Vzc29yLgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgdGhyZWFkIHBpbm5lZCB0bworICogYSBzaW5nbGUgcHJvY2Vzc29yLgorICovCit2b2lkIGRyYWluX25vZGVfcGFnZXMoaW50IG5vZGVpZCkKIHsKLQlzdHJ1Y3Qgem9uZSAqem9uZTsKLQlpbnQgaTsKKwlpbnQgaSwgejsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCWZvciAoeiA9IDA7IHogPCBNQVhfTlJfWk9ORVM7IHorKykgeworCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IE5PREVfREFUQShub2RlaWQpLT5ub2RlX3pvbmVzICsgejsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcHNldDsKIAotCQkvKiBEbyBub3QgZHJhaW4gbG9jYWwgcGFnZXNldHMgKi8KLQkJaWYgKHpvbmUtPnpvbmVfcGdkYXQtPm5vZGVfaWQgPT0gbnVtYV9ub2RlX2lkKCkpCi0JCQljb250aW51ZTsKLQogCQlwc2V0ID0gem9uZV9wY3Aoem9uZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHNldC0+cGNwKTsgaSsrKSB7CiAJCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOwogCiAJCQlwY3AgPSAmcHNldC0+cGNwW2ldOwotCQkJZnJlZV9wYWdlc19idWxrKHpvbmUsIHBjcC0+Y291bnQsICZwY3AtPmxpc3QsIDApOwotCQkJcGNwLT5jb3VudCA9IDA7CisJCQlpZiAocGNwLT5jb3VudCkgeworCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQlmcmVlX3BhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgJnBjcC0+bGlzdCwgMCk7CisJCQkJcGNwLT5jb3VudCA9IDA7CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJfQogCQl9CiAJfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KICNlbmRpZgogCkBAIC03NDQsMTMgKzc1NywyMiBAQAogCWZyZWVfaG90X2NvbGRfcGFnZShwYWdlLCAxKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHByZXBfemVyb19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncykKKy8qCisgKiBzcGxpdF9wYWdlIHRha2VzIGEgbm9uLWNvbXBvdW5kIGhpZ2hlci1vcmRlciBwYWdlLCBhbmQgc3BsaXRzIGl0IGludG8KKyAqIG4gKDE8PG9yZGVyKSBzdWItcGFnZXM6IHBhZ2VbMC4ubl0KKyAqIEVhY2ggc3ViLXBhZ2UgbXVzdCBiZSBmcmVlZCBpbmRpdmlkdWFsbHkuCisgKgorICogTm90ZTogdGhpcyBpcyBwcm9iYWJseSB0b28gbG93IGxldmVsIGFuIG9wZXJhdGlvbiBmb3IgdXNlIGluIGRyaXZlcnMuCisgKiBQbGVhc2UgY29uc3VsdCB3aXRoIGxrbWwgYmVmb3JlIHVzaW5nIHRoaXMgaW4geW91ciBkcml2ZXIuCisgKi8KK3ZvaWQgc3BsaXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQogewogCWludCBpOwogCi0JQlVHX09OKChnZnBfZmxhZ3MgJiAoX19HRlBfV0FJVCB8IF9fR0ZQX0hJR0hNRU0pKSA9PSBfX0dGUF9ISUdITUVNKTsKLQlmb3IoaSA9IDA7IGkgPCAoMSA8PCBvcmRlcik7IGkrKykKLQkJY2xlYXJfaGlnaHBhZ2UocGFnZSArIGkpOworCUJVR19PTihQYWdlQ29tcG91bmQocGFnZSkpOworCUJVR19PTighcGFnZV9jb3VudChwYWdlKSk7CisJZm9yIChpID0gMTsgaSA8ICgxIDw8IG9yZGVyKTsgaSsrKQorCQlzZXRfcGFnZV9yZWZjb3VudGVkKHBhZ2UgKyBpKTsKIH0KIAogLyoKQEAgLTc5NiwxNCArODE4LDggQEAKIAlwdXRfY3B1KCk7CiAKIAlCVUdfT04oYmFkX3JhbmdlKHpvbmUsIHBhZ2UpKTsKLQlpZiAocHJlcF9uZXdfcGFnZShwYWdlLCBvcmRlcikpCisJaWYgKHByZXBfbmV3X3BhZ2UocGFnZSwgb3JkZXIsIGdmcF9mbGFncykpCiAJCWdvdG8gYWdhaW47Ci0KLQlpZiAoZ2ZwX2ZsYWdzICYgX19HRlBfWkVSTykKLQkJcHJlcF96ZXJvX3BhZ2UocGFnZSwgb3JkZXIsIGdmcF9mbGFncyk7Ci0KLQlpZiAob3JkZXIgJiYgKGdmcF9mbGFncyAmIF9fR0ZQX0NPTVApKQotCQlwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpOwogCXJldHVybiBwYWdlOwogCiBmYWlsZWQ6CkBAIC05MjcsNyArOTQzLDggQEAKIAkJZ290byBnb3RfcGc7CiAKIAlkbyB7Ci0JCXdha2V1cF9rc3dhcGQoKnosIG9yZGVyKTsKKwkJaWYgKGNwdXNldF96b25lX2FsbG93ZWQoKnosIGdmcF9tYXNrKSkKKwkJCXdha2V1cF9rc3dhcGQoKnosIG9yZGVyKTsKIAl9IHdoaWxlICgqKCsreikpOwogCiAJLyoKQEAgLTEwMTUsNyArMTAzMiw3IEBACiAJCWlmIChwYWdlKQogCQkJZ290byBnb3RfcGc7CiAKLQkJb3V0X29mX21lbW9yeShnZnBfbWFzaywgb3JkZXIpOworCQlvdXRfb2ZfbWVtb3J5KHpvbmVsaXN0LCBnZnBfbWFzaywgb3JkZXIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC0xMjE1LDI0ICsxMjMyLDIyIEBACiAKIHN0YXRpYyB2b2lkIF9fZ2V0X3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2Vfc3RhdGUgKnJldCwgaW50IG5yLCBjcHVtYXNrX3QgKmNwdW1hc2spCiB7Ci0JaW50IGNwdSA9IDA7CisJdW5zaWduZWQgY3B1OwogCiAJbWVtc2V0KHJldCwgMCwgbnIgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwogCWNwdXNfYW5kKCpjcHVtYXNrLCAqY3B1bWFzaywgY3B1X29ubGluZV9tYXApOwogCi0JY3B1ID0gZmlyc3RfY3B1KCpjcHVtYXNrKTsKLQl3aGlsZSAoY3B1IDwgTlJfQ1BVUykgewotCQl1bnNpZ25lZCBsb25nICppbiwgKm91dCwgb2ZmOwotCi0JCWlmICghY3B1X2lzc2V0KGNwdSwgKmNwdW1hc2spKQotCQkJY29udGludWU7CisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqY3B1bWFzaykgeworCQl1bnNpZ25lZCBsb25nICppbjsKKwkJdW5zaWduZWQgbG9uZyAqb3V0OworCQl1bnNpZ25lZCBvZmY7CisJCXVuc2lnbmVkIG5leHRfY3B1OwogCiAJCWluID0gKHVuc2lnbmVkIGxvbmcgKikmcGVyX2NwdShwYWdlX3N0YXRlcywgY3B1KTsKIAotCQljcHUgPSBuZXh0X2NwdShjcHUsICpjcHVtYXNrKTsKLQotCQlpZiAobGlrZWx5KGNwdSA8IE5SX0NQVVMpKQotCQkJcHJlZmV0Y2goJnBlcl9jcHUocGFnZV9zdGF0ZXMsIGNwdSkpOworCQluZXh0X2NwdSA9IG5leHRfY3B1KGNwdSwgKmNwdW1hc2spOworCQlpZiAobGlrZWx5KG5leHRfY3B1IDwgTlJfQ1BVUykpCisJCQlwcmVmZXRjaCgmcGVyX2NwdShwYWdlX3N0YXRlcywgbmV4dF9jcHUpKTsKIAogCQlvdXQgPSAodW5zaWduZWQgbG9uZyAqKXJldDsKIAkJZm9yIChvZmYgPSAwOyBvZmYgPCBucjsgb2ZmKyspCkBAIC0xNzY1LDcgKzE3ODAsNyBAQAogCQkJY29udGludWU7CiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCQlzZXRfcGFnZV9saW5rcyhwYWdlLCB6b25lLCBuaWQsIHBmbik7Ci0JCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOworCQlpbml0X3BhZ2VfY291bnQocGFnZSk7CiAJCXJlc2V0X3BhZ2VfbWFwY291bnQocGFnZSk7CiAJCVNldFBhZ2VSZXNlcnZlZChwYWdlKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnBhZ2UtPmxydSk7CkBAIC0yMDE0LDggKzIwMjksOSBAQAogCQlzZXR1cF9wYWdlc2V0KHpvbmVfcGNwKHpvbmUsY3B1KSwgYmF0Y2gpOwogI2VuZGlmCiAJfQotCXByaW50ayhLRVJOX0RFQlVHICIgICVzIHpvbmU6ICVsdSBwYWdlcywgTElGTyBiYXRjaDolbHVcbiIsCi0JCXpvbmUtPm5hbWUsIHpvbmUtPnByZXNlbnRfcGFnZXMsIGJhdGNoKTsKKwlpZiAoem9uZS0+cHJlc2VudF9wYWdlcykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgem9uZTogJWx1IHBhZ2VzLCBMSUZPIGJhdGNoOiVsdVxuIiwKKwkJCXpvbmUtPm5hbWUsIHpvbmUtPnByZXNlbnRfcGFnZXMsIGJhdGNoKTsKIH0KIAogc3RhdGljIF9fbWVtaW5pdCB2b2lkIGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsCkBAIC0yNjg2LDggKzI3MDIsNyBAQAogCQllbHNlCiAJCQludW1lbnRyaWVzIDw8PSAoUEFHRV9TSElGVCAtIHNjYWxlKTsKIAl9Ci0JLyogcm91bmRlZCB1cCB0byBuZWFyZXN0IHBvd2VyIG9mIDIgaW4gc2l6ZSAqLwotCW51bWVudHJpZXMgPSAxVUwgPDwgKGxvbmdfbG9nMihudW1lbnRyaWVzKSArIDEpOworCW51bWVudHJpZXMgPSByb3VuZHVwX3Bvd19vZl90d28obnVtZW50cmllcyk7CiAKIAkvKiBsaW1pdCBhbGxvY2F0aW9uIHNpemUgdG8gMS8xNiB0b3RhbCBtZW1vcnkgYnkgZGVmYXVsdCAqLwogCWlmIChtYXggPT0gMCkgewpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCA4ZDZlZWFhLi4wZjE0MmE0IDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYworKysgYi9tbS9yZWFkYWhlYWQuYwpAQCAtNTIsMTMgKzUyLDI0IEBACiAJcmV0dXJuIChWTV9NSU5fUkVBREFIRUFEICogMTAyNCkgLyBQQUdFX0NBQ0hFX1NJWkU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9haGVhZF93aW5kb3coc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhKQoreworCS8qCisJICogLi4uIGJ1dCBwcmVzZXJ2ZSBhaGVhZF9zdGFydCArIGFoZWFkX3NpemUgdmFsdWUsCisJICogc2VlICdyZWNoZWNrOicgbGFiZWwgaW4gcGFnZV9jYWNoZV9yZWFkYWhlYWQoKS4KKwkgKiBOb3RlOiBXZSBuZXZlciB1c2UgLT5haGVhZF9zaXplIGFzIHJ2YWx1ZSB3aXRob3V0CisJICogY2hlY2tpbmcgLT5haGVhZF9zdGFydCAhPSAwIGZpcnN0LgorCSAqLworCXJhLT5haGVhZF9zaXplICs9IHJhLT5haGVhZF9zdGFydDsKKwlyYS0+YWhlYWRfc3RhcnQgPSAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgcmFfb2ZmKHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSkKIHsKIAlyYS0+c3RhcnQgPSAwOwogCXJhLT5mbGFncyA9IDA7CiAJcmEtPnNpemUgPSAwOwotCXJhLT5haGVhZF9zdGFydCA9IDA7Ci0JcmEtPmFoZWFkX3NpemUgPSAwOworCXJlc2V0X2FoZWFkX3dpbmRvdyhyYSk7CiAJcmV0dXJuOwogfQogCkBAIC03MiwxMCArODMsMTAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG5ld3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oc2l6ZSk7CiAKLQlpZiAobmV3c2l6ZSA8PSBtYXggLyA2NCkKLQkJbmV3c2l6ZSA9IG5ld3NpemUgKiBuZXdzaXplOworCWlmIChuZXdzaXplIDw9IG1heCAvIDMyKQorCQluZXdzaXplID0gbmV3c2l6ZSAqIDQ7CiAJZWxzZSBpZiAobmV3c2l6ZSA8PSBtYXggLyA0KQotCQluZXdzaXplID0gbWF4IC8gNDsKKwkJbmV3c2l6ZSA9IG5ld3NpemUgKiAyOwogCWVsc2UKIAkJbmV3c2l6ZSA9IG1heDsKIAlyZXR1cm4gbmV3c2l6ZTsKQEAgLTQyNiw4ICs0MzcsNyBAQAogCQkgKiBjb25nZXN0aW9uLiAgVGhlIGFoZWFkIHdpbmRvdyB3aWxsIGFueSB3YXkgYmUgY2xvc2VkCiAJCSAqIGluIGNhc2Ugd2UgZmFpbGVkIGR1ZSB0byBleGNlc3NpdmUgcGFnZSBjYWNoZSBoaXRzLgogCQkgKi8KLQkJcmEtPmFoZWFkX3N0YXJ0ID0gMDsKLQkJcmEtPmFoZWFkX3NpemUgPSAwOworCQlyZXNldF9haGVhZF93aW5kb3cocmEpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC01MjAsMTEgKzUzMCwxMSBAQAogCSAqIElmIHdlIGdldCBoZXJlIHdlIGFyZSBkb2luZyBzZXF1ZW50aWFsIElPIGFuZCB0aGlzIHdhcyBub3QgdGhlIGZpcnN0CiAJICogb2NjdXJlbmNlIChpZSB3ZSBoYXZlIGFuIGV4aXN0aW5nIHdpbmRvdykKIAkgKi8KLQogCWlmIChyYS0+YWhlYWRfc3RhcnQgPT0gMCkgewkgLyogbm8gYWhlYWQgd2luZG93IHlldCAqLwogCQlpZiAoIW1ha2VfYWhlYWRfd2luZG93KG1hcHBpbmcsIGZpbHAsIHJhLCAwKSkKLQkJCWdvdG8gb3V0OworCQkJZ290byByZWNoZWNrOwogCX0KKwogCS8qCiAJICogQWxyZWFkeSBoYXZlIGFuIGFoZWFkIHdpbmRvdywgY2hlY2sgaWYgd2UgY3Jvc3NlZCBpbnRvIGl0LgogCSAqIElmIHNvLCBzaGlmdCB3aW5kb3dzIGFuZCBpc3N1ZSBhIG5ldyBhaGVhZCB3aW5kb3cuCkBAIC01MzYsMTEgKzU0NiwxNiBAQAogCQlyYS0+c3RhcnQgPSByYS0+YWhlYWRfc3RhcnQ7CiAJCXJhLT5zaXplID0gcmEtPmFoZWFkX3NpemU7CiAJCW1ha2VfYWhlYWRfd2luZG93KG1hcHBpbmcsIGZpbHAsIHJhLCAwKTsKK3JlY2hlY2s6CisJCS8qIHByZXZfcGFnZSBzaG91bGRuJ3Qgb3ZlcnJ1biB0aGUgYWhlYWQgd2luZG93ICovCisJCXJhLT5wcmV2X3BhZ2UgPSBtaW4ocmEtPnByZXZfcGFnZSwKKwkJCXJhLT5haGVhZF9zdGFydCArIHJhLT5haGVhZF9zaXplIC0gMSk7CiAJfQogCiBvdXQ6CiAJcmV0dXJuIHJhLT5wcmV2X3BhZ2UgKyAxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocGFnZV9jYWNoZV9yZWFkYWhlYWQpOwogCiAvKgogICogaGFuZGxlX3JhX21pc3MoKSBpcyBjYWxsZWQgd2hlbiBpdCBpcyBrbm93biB0aGF0IGEgcGFnZSB3aGljaCBzaG91bGQgaGF2ZQpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IGRmMmM0MWMuLjE5NjNlMjYgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTU2LDEzICs1NiwxMSBAQAogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLS8vI2RlZmluZSBSTUFQX0RFQlVHIC8qIGNhbiBiZSBlbmFibGVkIG9ubHkgZm9yIGRlYnVnZ2luZyAqLwotCi1rbWVtX2NhY2hlX3QgKmFub25fdm1hX2NhY2hlcDsKK3N0cnVjdCBrbWVtX2NhY2hlICphbm9uX3ZtYV9jYWNoZXA7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2YWxpZGF0ZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hKQogewotI2lmZGVmIFJNQVBfREVCVUcKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gZmluZF92bWEtPmFub25fdm1hOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGludCBtYXBjb3VudCA9IDA7CkBAIC0xNjYsNyArMTY0LDggQEAKIAkJYW5vbl92bWFfZnJlZShhbm9uX3ZtYSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFub25fdm1hX2N0b3Iodm9pZCAqZGF0YSwga21lbV9jYWNoZV90ICpjYWNoZXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitzdGF0aWMgdm9pZCBhbm9uX3ZtYV9jdG9yKHZvaWQgKmRhdGEsIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJaWYgKChmbGFncyAmIChTTEFCX0NUT1JfVkVSSUZZfFNMQUJfQ1RPUl9DT05TVFJVQ1RPUikpID09CiAJCQkJCQlTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKQEAgLTIxMiwyNSArMjExLDMzIEBACiAgKiB0aHJvdWdoIHJlYWwgcHRlJ3MgcG9pbnRpbmcgdG8gdmFsaWQgcGFnZXMgYW5kIHRoZW4gcmVsZWFzaW5nCiAgKiB0aGUgcGFnZSBmcm9tIHRoZSBzd2FwIGNhY2hlLgogICoKLSAqIE11c3QgaG9sZCBwYWdlIGxvY2sgb24gcGFnZS4KKyAqIE11c3QgaG9sZCBwYWdlIGxvY2sgb24gcGFnZSBhbmQgbW1hcF9zZW0gb2Ygb25lIHZtYSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgcGFnZS4KICAqLwogdm9pZCByZW1vdmVfZnJvbV9zd2FwKHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyBtYXBwaW5nOwogCi0JaWYgKCFQYWdlQW5vbihwYWdlKSB8fCAhUGFnZVN3YXBDYWNoZShwYWdlKSkKKwlpZiAoIVBhZ2VTd2FwQ2FjaGUocGFnZSkpCiAJCXJldHVybjsKIAotCWFub25fdm1hID0gcGFnZV9sb2NrX2Fub25fdm1hKHBhZ2UpOwotCWlmICghYW5vbl92bWEpCisJbWFwcGluZyA9ICh1bnNpZ25lZCBsb25nKXBhZ2UtPm1hcHBpbmc7CisKKwlpZiAoIW1hcHBpbmcgfHwgKG1hcHBpbmcgJiBQQUdFX01BUFBJTkdfQU5PTikgPT0gMCkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBXZSBob2xkIHRoZSBtbWFwX3NlbSBsb2NrLiBTbyBubyBuZWVkIHRvIGNhbGwgcGFnZV9sb2NrX2Fub25fdm1hLgorCSAqLworCWFub25fdm1hID0gKHN0cnVjdCBhbm9uX3ZtYSAqKSAobWFwcGluZyAtIFBBR0VfTUFQUElOR19BTk9OKTsKKwlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpCiAJCXJlbW92ZV92bWFfc3dhcCh2bWEsIHBhZ2UpOwogCiAJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKLQogCWRlbGV0ZV9mcm9tX3N3YXBfY2FjaGUocGFnZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHJlbW92ZV9mcm9tX3N3YXApOwpAQCAtNTI5LDkgKzUzNiw2IEBACiAgKi8KIHZvaWQgcGFnZV9hZGRfZmlsZV9ybWFwKHN0cnVjdCBwYWdlICpwYWdlKQogewotCUJVR19PTihQYWdlQW5vbihwYWdlKSk7Ci0JQlVHX09OKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKTsKLQogCWlmIChhdG9taWNfaW5jX2FuZF90ZXN0KCZwYWdlLT5fbWFwY291bnQpKQogCQlfX2luY19wYWdlX3N0YXRlKG5yX21hcHBlZCk7CiB9CkBAIC01NDUsMTMgKzU0OSwxNCBAQAogdm9pZCBwYWdlX3JlbW92ZV9ybWFwKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmIChhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCAmcGFnZS0+X21hcGNvdW50KSkgewotCQlpZiAocGFnZV9tYXBjb3VudChwYWdlKSA8IDApIHsKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KKwkJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgPCAwKSkgewogCQkJcHJpbnRrIChLRVJOX0VNRVJHICJFZWVrISBwYWdlX21hcGNvdW50KHBhZ2UpIHdlbnQgbmVnYXRpdmUhICglZClcbiIsIHBhZ2VfbWFwY291bnQocGFnZSkpOwogCQkJcHJpbnRrIChLRVJOX0VNRVJHICIgIHBhZ2UtPmZsYWdzID0gJWx4XG4iLCBwYWdlLT5mbGFncyk7CiAJCQlwcmludGsgKEtFUk5fRU1FUkcgIiAgcGFnZS0+Y291bnQgPSAleFxuIiwgcGFnZV9jb3VudChwYWdlKSk7CiAJCQlwcmludGsgKEtFUk5fRU1FUkcgIiAgcGFnZS0+bWFwcGluZyA9ICVwXG4iLCBwYWdlLT5tYXBwaW5nKTsKIAkJfQotCisjZW5kaWYKIAkJQlVHX09OKHBhZ2VfbWFwY291bnQocGFnZSkgPCAwKTsKIAkJLyoKIAkJICogSXQgd291bGQgYmUgdGlkeSB0byByZXNldCB0aGUgUGFnZUFub24gbWFwcGluZyBoZXJlLApkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggZjdhYzdiOC4uMzdlYWY0MmUgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtODc0LDYgKzg3NSw1MSBAQAogfQogCiAjaWZkZWYgQ09ORklHX05VTUEKK3N0YXRpYyBpbmxpbmUgaW50IHNobWVtX3BhcnNlX21wb2woY2hhciAqdmFsdWUsIGludCAqcG9saWN5LCBub2RlbWFza190ICpwb2xpY3lfbm9kZXMpCit7CisJY2hhciAqbm9kZWxpc3QgPSBzdHJjaHIodmFsdWUsICc6Jyk7CisJaW50IGVyciA9IDE7CisKKwlpZiAobm9kZWxpc3QpIHsKKwkJLyogTlVMLXRlcm1pbmF0ZSBwb2xpY3kgc3RyaW5nICovCisJCSpub2RlbGlzdCsrID0gJ1wwJzsKKwkJaWYgKG5vZGVsaXN0X3BhcnNlKG5vZGVsaXN0LCAqcG9saWN5X25vZGVzKSkKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoIXN0cmNtcCh2YWx1ZSwgImRlZmF1bHQiKSkgeworCQkqcG9saWN5ID0gTVBPTF9ERUZBVUxUOworCQkvKiBEb24ndCBhbGxvdyBhIG5vZGVsaXN0ICovCisJCWlmICghbm9kZWxpc3QpCisJCQllcnIgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInByZWZlciIpKSB7CisJCSpwb2xpY3kgPSBNUE9MX1BSRUZFUlJFRDsKKwkJLyogSW5zaXN0IG9uIGEgbm9kZWxpc3Qgb2Ygb25lIG5vZGUgb25seSAqLworCQlpZiAobm9kZWxpc3QpIHsKKwkJCWNoYXIgKnJlc3QgPSBub2RlbGlzdDsKKwkJCXdoaWxlIChpc2RpZ2l0KCpyZXN0KSkKKwkJCQlyZXN0Kys7CisJCQlpZiAoISpyZXN0KQorCQkJCWVyciA9IDA7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJiaW5kIikpIHsKKwkJKnBvbGljeSA9IE1QT0xfQklORDsKKwkJLyogSW5zaXN0IG9uIGEgbm9kZWxpc3QgKi8KKwkJaWYgKG5vZGVsaXN0KQorCQkJZXJyID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnRlcmxlYXZlIikpIHsKKwkJKnBvbGljeSA9IE1QT0xfSU5URVJMRUFWRTsKKwkJLyogRGVmYXVsdCB0byBub2RlcyBvbmxpbmUgaWYgbm8gbm9kZWxpc3QgKi8KKwkJaWYgKCFub2RlbGlzdCkKKwkJCSpwb2xpY3lfbm9kZXMgPSBub2RlX29ubGluZV9tYXA7CisJCWVyciA9IDA7CisJfQorb3V0OgorCS8qIFJlc3RvcmUgc3RyaW5nIGZvciBlcnJvciBtZXNzYWdlICovCisJaWYgKG5vZGVsaXN0KQorCQkqLS1ub2RlbGlzdCA9ICc6JzsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IHBhZ2UgKnNobWVtX3N3YXBpbl9hc3luYyhzdHJ1Y3Qgc2hhcmVkX3BvbGljeSAqcCwKIAkJCQkgICAgICAgc3dwX2VudHJ5X3QgZW50cnksIHVuc2lnbmVkIGxvbmcgaWR4KQogewpAQCAtOTI2LDYgKzk3MiwxMSBAQAogCXJldHVybiBwYWdlOwogfQogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHNobWVtX3BhcnNlX21wb2woY2hhciAqdmFsdWUsIGludCAqcG9saWN5LCBub2RlbWFza190ICpwb2xpY3lfbm9kZXMpCit7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgogc2htZW1fc3dhcGluKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLHN3cF9lbnRyeV90IGVudHJ5LHVuc2lnbmVkIGxvbmcgaWR4KQogewpAQCAtMTg1OSw3ICsxOTEwLDIzIEBACiB7CiAJY2hhciAqdGhpc19jaGFyLCAqdmFsdWUsICpyZXN0OwogCi0Jd2hpbGUgKCh0aGlzX2NoYXIgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwl3aGlsZSAob3B0aW9ucyAhPSBOVUxMKSB7CisJCXRoaXNfY2hhciA9IG9wdGlvbnM7CisJCWZvciAoOzspIHsKKwkJCS8qCisJCQkgKiBOVUwtdGVybWluYXRlIHRoaXMgb3B0aW9uOiB1bmZvcnR1bmF0ZWx5LAorCQkJICogbW91bnQgb3B0aW9ucyBmb3JtIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCisJCQkgKiBidXQgbXBvbCdzIG5vZGVsaXN0IG1heSBhbHNvIGNvbnRhaW4gY29tbWFzLgorCQkJICovCisJCQlvcHRpb25zID0gc3RyY2hyKG9wdGlvbnMsICcsJyk7CisJCQlpZiAob3B0aW9ucyA9PSBOVUxMKQorCQkJCWJyZWFrOworCQkJb3B0aW9ucysrOworCQkJaWYgKCFpc2RpZ2l0KCpvcHRpb25zKSkgeworCQkJCW9wdGlvbnNbLTFdID0gJ1wwJzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCQlpZiAoISp0aGlzX2NoYXIpCiAJCQljb250aW51ZTsKIAkJaWYgKCh2YWx1ZSA9IHN0cmNocih0aGlzX2NoYXIsJz0nKSkgIT0gTlVMTCkgewpAQCAtMTkxMCwxOCArMTk3Nyw4IEBACiAJCQlpZiAoKnJlc3QpCiAJCQkJZ290byBiYWRfdmFsOwogCQl9IGVsc2UgaWYgKCFzdHJjbXAodGhpc19jaGFyLCJtcG9sIikpIHsKLQkJCWlmICghc3RyY21wKHZhbHVlLCJkZWZhdWx0IikpCi0JCQkJKnBvbGljeSA9IE1QT0xfREVGQVVMVDsKLQkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsInByZWZlcnJlZCIpKQotCQkJCSpwb2xpY3kgPSBNUE9MX1BSRUZFUlJFRDsKLQkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsImJpbmQiKSkKLQkJCQkqcG9saWN5ID0gTVBPTF9CSU5EOwotCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwiaW50ZXJsZWF2ZSIpKQotCQkJCSpwb2xpY3kgPSBNUE9MX0lOVEVSTEVBVkU7Ci0JCQllbHNlCisJCQlpZiAoc2htZW1fcGFyc2VfbXBvbCh2YWx1ZSxwb2xpY3kscG9saWN5X25vZGVzKSkKIAkJCQlnb3RvIGJhZF92YWw7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIm1wb2xfbm9kZWxpc3QiKSkgewotCQkJbm9kZWxpc3RfcGFyc2UodmFsdWUsICpwb2xpY3lfbm9kZXMpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSICJ0bXBmczogQmFkIG1vdW50IG9wdGlvbiAlc1xuIiwKIAkJCSAgICAgICB0aGlzX2NoYXIpOwpAQCAtMjA2Miw3ICsyMTE5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMga21lbV9jYWNoZV90ICpzaG1lbV9pbm9kZV9jYWNoZXA7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNobWVtX2lub2RlX2NhY2hlcDsKIAogc3RhdGljIHN0cnVjdCBpbm9kZSAqc2htZW1fYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKQEAgLTIwODIsNyArMjEzOSw4IEBACiAJa21lbV9jYWNoZV9mcmVlKHNobWVtX2lub2RlX2NhY2hlcCwgU0hNRU1fSShpbm9kZSkpOwogfQogCi1zdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vLCBrbWVtX2NhY2hlX3QgKmNhY2hlcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28sIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKnAgPSAoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKikgZm9vOwogCmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggYWRkMDVkOC4uNjgxODM3NCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtNTAsNyArNTAsNyBAQAogICogVGhlIGhlYWQgYXJyYXkgaXMgc3RyaWN0bHkgTElGTyBhbmQgc2hvdWxkIGltcHJvdmUgdGhlIGNhY2hlIGhpdCByYXRlcy4KICAqIE9uIFNNUCwgaXQgYWRkaXRpb25hbGx5IHJlZHVjZXMgdGhlIHNwaW5sb2NrIG9wZXJhdGlvbnMuCiAgKgotICogVGhlIGNfY3B1YXJyYXkgbWF5IG5vdCBiZSByZWFkIHdpdGggZW5hYmxlZCBsb2NhbCBpbnRlcnJ1cHRzIC0gCisgKiBUaGUgY19jcHVhcnJheSBtYXkgbm90IGJlIHJlYWQgd2l0aCBlbmFibGVkIGxvY2FsIGludGVycnVwdHMgLQogICogaXQncyBjaGFuZ2VkIHdpdGggYSBzbXBfY2FsbF9mdW5jdGlvbigpLgogICoKICAqIFNNUCBzeW5jaHJvbml6YXRpb246CkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZQk8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZQk8bGludXgvaW5pdC5oPgogI2luY2x1ZGUJPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZQk8bGludXgvY3B1c2V0Lmg+CiAjaW5jbHVkZQk8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlCTxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUJPGxpbnV4L2thbGxzeW1zLmg+CkBAIC0xNzAsMTUgKzE3MSwxNSBAQAogI2lmIERFQlVHCiAjIGRlZmluZSBDUkVBVEVfTUFTSwkoU0xBQl9ERUJVR19JTklUSUFMIHwgU0xBQl9SRURfWk9ORSB8IFwKIAkJCSBTTEFCX1BPSVNPTiB8IFNMQUJfSFdDQUNIRV9BTElHTiB8IFwKLQkJCSBTTEFCX05PX1JFQVAgfCBTTEFCX0NBQ0hFX0RNQSB8IFwKKwkJCSBTTEFCX0NBQ0hFX0RNQSB8IFwKIAkJCSBTTEFCX01VU1RfSFdDQUNIRV9BTElHTiB8IFNMQUJfU1RPUkVfVVNFUiB8IFwKIAkJCSBTTEFCX1JFQ0xBSU1fQUNDT1VOVCB8IFNMQUJfUEFOSUMgfCBcCi0JCQkgU0xBQl9ERVNUUk9ZX0JZX1JDVSkKKwkJCSBTTEFCX0RFU1RST1lfQllfUkNVIHwgU0xBQl9NRU1fU1BSRUFEKQogI2Vsc2UKLSMgZGVmaW5lIENSRUFURV9NQVNLCShTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX05PX1JFQVAgfCBcCisjIGRlZmluZSBDUkVBVEVfTUFTSwkoU0xBQl9IV0NBQ0hFX0FMSUdOIHwgXAogCQkJIFNMQUJfQ0FDSEVfRE1BIHwgU0xBQl9NVVNUX0hXQ0FDSEVfQUxJR04gfCBcCiAJCQkgU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX1BBTklDIHwgXAotCQkJIFNMQUJfREVTVFJPWV9CWV9SQ1UpCisJCQkgU0xBQl9ERVNUUk9ZX0JZX1JDVSB8IFNMQUJfTUVNX1NQUkVBRCkKICNlbmRpZgogCiAvKgpAQCAtMjAzLDcgKzIwNCw4IEBACiB0eXBlZGVmIHVuc2lnbmVkIGludCBrbWVtX2J1ZmN0bF90OwogI2RlZmluZSBCVUZDVExfRU5ECSgoKGttZW1fYnVmY3RsX3QpKH4wVSkpLTApCiAjZGVmaW5lIEJVRkNUTF9GUkVFCSgoKGttZW1fYnVmY3RsX3QpKH4wVSkpLTEpCi0jZGVmaW5lCVNMQUJfTElNSVQJKCgoa21lbV9idWZjdGxfdCkofjBVKSktMikKKyNkZWZpbmUJQlVGQ1RMX0FDVElWRQkoKChrbWVtX2J1ZmN0bF90KSh+MFUpKS0yKQorI2RlZmluZQlTTEFCX0xJTUlUCSgoKGttZW1fYnVmY3RsX3QpKH4wVSkpLTMpCiAKIC8qIE1heCBudW1iZXIgb2Ygb2Jqcy1wZXItc2xhYiBmb3IgY2FjaGVzIHdoaWNoIHVzZSBvZmYtc2xhYiBzbGFicy4KICAqIE5lZWRlZCB0byBhdm9pZCBhIHBvc3NpYmxlIGxvb3BpbmcgY29uZGl0aW9uIGluIGNhY2hlX2dyb3coKS4KQEAgLTI2NiwxNiArMjY4LDE3IEBACiAJdW5zaWduZWQgaW50IGJhdGNoY291bnQ7CiAJdW5zaWduZWQgaW50IHRvdWNoZWQ7CiAJc3BpbmxvY2tfdCBsb2NrOwotCXZvaWQgKmVudHJ5WzBdOwkJLyoKLQkJCQkgKiBNdXN0IGhhdmUgdGhpcyBkZWZpbml0aW9uIGluIGhlcmUgZm9yIHRoZSBwcm9wZXIKLQkJCQkgKiBhbGlnbm1lbnQgb2YgYXJyYXlfY2FjaGUuIEFsc28gc2ltcGxpZmllcyBhY2Nlc3NpbmcKLQkJCQkgKiB0aGUgZW50cmllcy4KLQkJCQkgKiBbMF0gaXMgZm9yIGdjYyAyLjk1LiBJdCBzaG91bGQgcmVhbGx5IGJlIFtdLgotCQkJCSAqLworCXZvaWQgKmVudHJ5WzBdOwkvKgorCQkJICogTXVzdCBoYXZlIHRoaXMgZGVmaW5pdGlvbiBpbiBoZXJlIGZvciB0aGUgcHJvcGVyCisJCQkgKiBhbGlnbm1lbnQgb2YgYXJyYXlfY2FjaGUuIEFsc28gc2ltcGxpZmllcyBhY2Nlc3NpbmcKKwkJCSAqIHRoZSBlbnRyaWVzLgorCQkJICogWzBdIGlzIGZvciBnY2MgMi45NS4gSXQgc2hvdWxkIHJlYWxseSBiZSBbXS4KKwkJCSAqLwogfTsKIAotLyogYm9vdHN0cmFwOiBUaGUgY2FjaGVzIGRvIG5vdCB3b3JrIHdpdGhvdXQgY3B1YXJyYXlzIGFueW1vcmUsCi0gKiBidXQgdGhlIGNwdWFycmF5cyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIGdlbmVyaWMgY2FjaGVzLi4uCisvKgorICogYm9vdHN0cmFwOiBUaGUgY2FjaGVzIGRvIG5vdCB3b3JrIHdpdGhvdXQgY3B1YXJyYXlzIGFueW1vcmUsIGJ1dCB0aGUKKyAqIGNwdWFycmF5cyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIGdlbmVyaWMgY2FjaGVzLi4uCiAgKi8KICNkZWZpbmUgQk9PVF9DUFVDQUNIRV9FTlRSSUVTCTEKIHN0cnVjdCBhcnJheWNhY2hlX2luaXQgewpAQCAtMjkxLDEzICsyOTQsMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsYWJzX2Z1bGw7CiAJc3RydWN0IGxpc3RfaGVhZCBzbGFic19mcmVlOwogCXVuc2lnbmVkIGxvbmcgZnJlZV9vYmplY3RzOwotCXVuc2lnbmVkIGxvbmcgbmV4dF9yZWFwOwotCWludCBmcmVlX3RvdWNoZWQ7CiAJdW5zaWduZWQgaW50IGZyZWVfbGltaXQ7CiAJdW5zaWduZWQgaW50IGNvbG91cl9uZXh0OwkvKiBQZXItbm9kZSBjYWNoZSBjb2xvcmluZyAqLwogCXNwaW5sb2NrX3QgbGlzdF9sb2NrOwogCXN0cnVjdCBhcnJheV9jYWNoZSAqc2hhcmVkOwkvKiBzaGFyZWQgcGVyIG5vZGUgKi8KIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKiphbGllbjsJLyogb24gb3RoZXIgbm9kZXMgKi8KKwl1bnNpZ25lZCBsb25nIG5leHRfcmVhcDsJLyogdXBkYXRlZCB3aXRob3V0IGxvY2tpbmcgKi8KKwlpbnQgZnJlZV90b3VjaGVkOwkJLyogdXBkYXRlZCB3aXRob3V0IGxvY2tpbmcgKi8KIH07CiAKIC8qCkBAIC0zMTAsMTAgKzMxMyw4IEBACiAjZGVmaW5lCVNJWkVfTDMgKDEgKyBNQVhfTlVNTk9ERVMpCiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY29tcGxldGVseSBvcHRpbWl6ZWQgYXdheSBpZgotICogYSBjb25zdGFudCBpcyBwYXNzZWQgdG8gaXQuIE1vc3RseSB0aGUgc2FtZSBhcwotICogd2hhdCBpcyBpbiBsaW51eC9zbGFiLmggZXhjZXB0IGl0IHJldHVybnMgYW4KLSAqIGluZGV4LgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNvbXBsZXRlbHkgb3B0aW1pemVkIGF3YXkgaWYgYSBjb25zdGFudCBpcyBwYXNzZWQgdG8KKyAqIGl0LiAgTW9zdGx5IHRoZSBzYW1lIGFzIHdoYXQgaXMgaW4gbGludXgvc2xhYi5oIGV4Y2VwdCBpdCByZXR1cm5zIGFuIGluZGV4LgogICovCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBpbmRleF9vZihjb25zdCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTM1MSwxNCArMzUyLDE0IEBACiAJcGFyZW50LT5mcmVlX3RvdWNoZWQgPSAwOwogfQogCi0jZGVmaW5lIE1BS0VfTElTVChjYWNoZXAsIGxpc3RwLCBzbGFiLCBub2RlaWQpCVwKLQlkbyB7CVwKLQkJSU5JVF9MSVNUX0hFQUQobGlzdHApOwkJXAotCQlsaXN0X3NwbGljZSgmKGNhY2hlcC0+bm9kZWxpc3RzW25vZGVpZF0tPnNsYWIpLCBsaXN0cCk7IFwKKyNkZWZpbmUgTUFLRV9MSVNUKGNhY2hlcCwgbGlzdHAsIHNsYWIsIG5vZGVpZCkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJSU5JVF9MSVNUX0hFQUQobGlzdHApOwkJCQkJXAorCQlsaXN0X3NwbGljZSgmKGNhY2hlcC0+bm9kZWxpc3RzW25vZGVpZF0tPnNsYWIpLCBsaXN0cCk7CVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lCU1BS0VfQUxMX0xJU1RTKGNhY2hlcCwgcHRyLCBub2RlaWQpCQkJXAotCWRvIHsJCQkJCVwKKyNkZWZpbmUJTUFLRV9BTExfTElTVFMoY2FjaGVwLCBwdHIsIG5vZGVpZCkJCQkJXAorCWRvIHsJCQkJCQkJCVwKIAlNQUtFX0xJU1QoKGNhY2hlcCksICgmKHB0ciktPnNsYWJzX2Z1bGwpLCBzbGFic19mdWxsLCBub2RlaWQpOwlcCiAJTUFLRV9MSVNUKChjYWNoZXApLCAoJihwdHIpLT5zbGFic19wYXJ0aWFsKSwgc2xhYnNfcGFydGlhbCwgbm9kZWlkKTsgXAogCU1BS0VfTElTVCgoY2FjaGVwKSwgKCYocHRyKS0+c2xhYnNfZnJlZSksIHNsYWJzX2ZyZWUsIG5vZGVpZCk7CVwKQEAgLTM3MywyOCArMzc0LDMwIEBACiBzdHJ1Y3Qga21lbV9jYWNoZSB7CiAvKiAxKSBwZXItY3B1IGRhdGEsIHRvdWNoZWQgZHVyaW5nIGV2ZXJ5IGFsbG9jL2ZyZWUgKi8KIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFycmF5W05SX0NQVVNdOworLyogMikgQ2FjaGUgdHVuYWJsZXMuIFByb3RlY3RlZCBieSBjYWNoZV9jaGFpbl9tdXRleCAqLwogCXVuc2lnbmVkIGludCBiYXRjaGNvdW50OwogCXVuc2lnbmVkIGludCBsaW1pdDsKIAl1bnNpZ25lZCBpbnQgc2hhcmVkOwotCXVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKLS8qIDIpIHRvdWNoZWQgYnkgZXZlcnkgYWxsb2MgJiBmcmVlIGZyb20gdGhlIGJhY2tlbmQgKi8KLQlzdHJ1Y3Qga21lbV9saXN0MyAqbm9kZWxpc3RzW01BWF9OVU1OT0RFU107Ci0JdW5zaWduZWQgaW50IGZsYWdzOwkvKiBjb25zdGFudCBmbGFncyAqLwotCXVuc2lnbmVkIGludCBudW07CS8qICMgb2Ygb2JqcyBwZXIgc2xhYiAqLwotCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CiAKLS8qIDMpIGNhY2hlX2dyb3cvc2hyaW5rICovCisJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworLyogMykgdG91Y2hlZCBieSBldmVyeSBhbGxvYyAmIGZyZWUgZnJvbSB0aGUgYmFja2VuZCAqLworCXN0cnVjdCBrbWVtX2xpc3QzICpub2RlbGlzdHNbTUFYX05VTU5PREVTXTsKKworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIGNvbnN0YW50IGZsYWdzICovCisJdW5zaWduZWQgaW50IG51bTsJCS8qICMgb2Ygb2JqcyBwZXIgc2xhYiAqLworCisvKiA0KSBjYWNoZV9ncm93L3NocmluayAqLwogCS8qIG9yZGVyIG9mIHBncyBwZXIgc2xhYiAoMl5uKSAqLwogCXVuc2lnbmVkIGludCBnZnBvcmRlcjsKIAogCS8qIGZvcmNlIEdGUCBmbGFncywgZS5nLiBHRlBfRE1BICovCiAJZ2ZwX3QgZ2ZwZmxhZ3M7CiAKLQlzaXplX3QgY29sb3VyOwkJLyogY2FjaGUgY29sb3VyaW5nIHJhbmdlICovCisJc2l6ZV90IGNvbG91cjsJCQkvKiBjYWNoZSBjb2xvdXJpbmcgcmFuZ2UgKi8KIAl1bnNpZ25lZCBpbnQgY29sb3VyX29mZjsJLyogY29sb3VyIG9mZnNldCAqLwogCXN0cnVjdCBrbWVtX2NhY2hlICpzbGFicF9jYWNoZTsKIAl1bnNpZ25lZCBpbnQgc2xhYl9zaXplOwotCXVuc2lnbmVkIGludCBkZmxhZ3M7CS8qIGR5bmFtaWMgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgZGZsYWdzOwkJLyogZHluYW1pYyBmbGFncyAqLwogCiAJLyogY29uc3RydWN0b3IgZnVuYyAqLwogCXZvaWQgKCpjdG9yKSAodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25nKTsKQEAgLTQwMiwxMSArNDA1LDExIEBACiAJLyogZGUtY29uc3RydWN0b3IgZnVuYyAqLwogCXZvaWQgKCpkdG9yKSAodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25nKTsKIAotLyogNCkgY2FjaGUgY3JlYXRpb24vcmVtb3ZhbCAqLworLyogNSkgY2FjaGUgY3JlYXRpb24vcmVtb3ZhbCAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXh0OwogCi0vKiA1KSBzdGF0aXN0aWNzICovCisvKiA2KSBzdGF0aXN0aWNzICovCiAjaWYgU1RBVFMKIAl1bnNpZ25lZCBsb25nIG51bV9hY3RpdmU7CiAJdW5zaWduZWQgbG9uZyBudW1fYWxsb2NhdGlvbnM7CkBAIC00MzgsOCArNDQxLDkgQEAKICNkZWZpbmUJT0ZGX1NMQUIoeCkJKCh4KS0+ZmxhZ3MgJiBDRkxHU19PRkZfU0xBQikKIAogI2RlZmluZSBCQVRDSFJFRklMTF9MSU1JVAkxNgotLyogT3B0aW1pemF0aW9uIHF1ZXN0aW9uOiBmZXdlciByZWFwcyBtZWFucyBsZXNzIAotICogcHJvYmFiaWxpdHkgZm9yIHVubmVzc2FyeSBjcHVjYWNoZSBkcmFpbi9yZWZpbGwgY3ljbGVzLgorLyoKKyAqIE9wdGltaXphdGlvbiBxdWVzdGlvbjogZmV3ZXIgcmVhcHMgbWVhbnMgbGVzcyBwcm9iYWJpbGl0eSBmb3IgdW5uZXNzYXJ5CisgKiBjcHVjYWNoZSBkcmFpbi9yZWZpbGwgY3ljbGVzLgogICoKICAqIE9UT0ggdGhlIGNwdWFycmF5cyBjYW4gY29udGFpbiBsb3RzIG9mIG9iamVjdHMsCiAgKiB3aGljaCBjb3VsZCBsb2NrIHVwIG90aGVyd2lzZSBmcmVlYWJsZSBzbGFicy4KQEAgLTQ1MywxNyArNDU3LDE5IEBACiAjZGVmaW5lCVNUQVRTX0lOQ19BTExPQ0VEKHgpCSgoeCktPm51bV9hbGxvY2F0aW9ucysrKQogI2RlZmluZQlTVEFUU19JTkNfR1JPV04oeCkJKCh4KS0+Z3Jvd24rKykKICNkZWZpbmUJU1RBVFNfSU5DX1JFQVBFRCh4KQkoKHgpLT5yZWFwZWQrKykKLSNkZWZpbmUJU1RBVFNfU0VUX0hJR0goeCkJZG8geyBpZiAoKHgpLT5udW1fYWN0aXZlID4gKHgpLT5oaWdoX21hcmspIFwKLQkJCQkJKHgpLT5oaWdoX21hcmsgPSAoeCktPm51bV9hY3RpdmU7IFwKLQkJCQl9IHdoaWxlICgwKQorI2RlZmluZQlTVEFUU19TRVRfSElHSCh4KQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoeCktPm51bV9hY3RpdmUgPiAoeCktPmhpZ2hfbWFyaykJCQlcCisJCQkoeCktPmhpZ2hfbWFyayA9ICh4KS0+bnVtX2FjdGl2ZTsJCVwKKwl9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19JTkNfRVJSKHgpCSgoeCktPmVycm9ycysrKQogI2RlZmluZQlTVEFUU19JTkNfTk9ERUFMTE9DUyh4KQkoKHgpLT5ub2RlX2FsbG9jcysrKQogI2RlZmluZQlTVEFUU19JTkNfTk9ERUZSRUVTKHgpCSgoeCktPm5vZGVfZnJlZXMrKykKLSNkZWZpbmUJU1RBVFNfU0VUX0ZSRUVBQkxFKHgsIGkpIFwKLQkJCQlkbyB7IGlmICgoeCktPm1heF9mcmVlYWJsZSA8IGkpIFwKLQkJCQkJKHgpLT5tYXhfZnJlZWFibGUgPSBpOyBcCi0JCQkJfSB3aGlsZSAoMCkKLQorI2RlZmluZQlTVEFUU19TRVRfRlJFRUFCTEUoeCwgaSkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoeCktPm1heF9mcmVlYWJsZSA8IGkpCQkJCVwKKwkJCSh4KS0+bWF4X2ZyZWVhYmxlID0gaTsJCQkJXAorCX0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRTX0lOQ19BTExPQ0hJVCh4KQlhdG9taWNfaW5jKCYoeCktPmFsbG9jaGl0KQogI2RlZmluZSBTVEFUU19JTkNfQUxMT0NNSVNTKHgpCWF0b21pY19pbmMoJih4KS0+YWxsb2NtaXNzKQogI2RlZmluZSBTVEFUU19JTkNfRlJFRUhJVCh4KQlhdG9taWNfaW5jKCYoeCktPmZyZWVoaXQpCkBAIC00NzgsOSArNDg0LDcgQEAKICNkZWZpbmUJU1RBVFNfSU5DX0VSUih4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX0lOQ19OT0RFQUxMT0NTKHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUJU1RBVFNfSU5DX05PREVGUkVFUyh4KQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lCVNUQVRTX1NFVF9GUkVFQUJMRSh4LCBpKSBcCi0JCQkJZG8geyB9IHdoaWxlICgwKQotCisjZGVmaW5lCVNUQVRTX1NFVF9GUkVFQUJMRSh4LCBpKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRTX0lOQ19BTExPQ0hJVCh4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRTX0lOQ19BTExPQ01JU1MoeCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFUU19JTkNfRlJFRUhJVCh4KQlkbyB7IH0gd2hpbGUgKDApCkBAIC00ODgsNyArNDkyLDggQEAKICNlbmRpZgogCiAjaWYgREVCVUcKLS8qIE1hZ2ljIG51bXMgZm9yIG9iaiByZWQgem9uaW5nLgorLyoKKyAqIE1hZ2ljIG51bXMgZm9yIG9iaiByZWQgem9uaW5nLgogICogUGxhY2VkIGluIHRoZSBmaXJzdCB3b3JkIGJlZm9yZSBhbmQgdGhlIGZpcnN0IHdvcmQgYWZ0ZXIgYW4gb2JqLgogICovCiAjZGVmaW5lCVJFRF9JTkFDVElWRQkweDVBMkNGMDcxVUwJLyogd2hlbiBvYmogaXMgaW5hY3RpdmUgKi8KQEAgLTQ5OSw3ICs1MDQsOCBAQAogI2RlZmluZSBQT0lTT05fRlJFRQkweDZiCS8qIGZvciB1c2UtYWZ0ZXItZnJlZSBwb2lzb25pbmcgKi8KICNkZWZpbmUJUE9JU09OX0VORAkweGE1CS8qIGVuZC1ieXRlIG9mIHBvaXNvbmluZyAqLwogCi0vKiBtZW1vcnkgbGF5b3V0IG9mIG9iamVjdHM6CisvKgorICogbWVtb3J5IGxheW91dCBvZiBvYmplY3RzOgogICogMAkJOiBvYmpwCiAgKiAwIC4uIGNhY2hlcC0+b2JqX29mZnNldCAtIEJZVEVTX1BFUl9XT1JEIC0gMTogcGFkZGluZy4gVGhpcyBlbnN1cmVzIHRoYXQKICAqIAkJdGhlIGVuZCBvZiBhbiBvYmplY3QgaXMgYWxpZ25lZCB3aXRoIHRoZSBlbmQgb2YgdGhlIHJlYWwKQEAgLTUwOCw3ICs1MTQsOCBAQAogICogCQlyZWR6b25lIHdvcmQuCiAgKiBjYWNoZXAtPm9ial9vZmZzZXQ6IFRoZSByZWFsIG9iamVjdC4KICAqIGNhY2hlcC0+YnVmZmVyX3NpemUgLSAyKiBCWVRFU19QRVJfV09SRDogcmVkem9uZSB3b3JkIFtCWVRFU19QRVJfV09SRCBsb25nXQotICogY2FjaGVwLT5idWZmZXJfc2l6ZSAtIDEqIEJZVEVTX1BFUl9XT1JEOiBsYXN0IGNhbGxlciBhZGRyZXNzIFtCWVRFU19QRVJfV09SRCBsb25nXQorICogY2FjaGVwLT5idWZmZXJfc2l6ZSAtIDEqIEJZVEVTX1BFUl9XT1JEOiBsYXN0IGNhbGxlciBhZGRyZXNzCisgKgkJCQkJW0JZVEVTX1BFUl9XT1JEIGxvbmddCiAgKi8KIHN0YXRpYyBpbnQgb2JqX29mZnNldChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQogewpAQCAtNTUyLDggKzU1OSw4IEBACiAjZW5kaWYKIAogLyoKLSAqIE1heGltdW0gc2l6ZSBvZiBhbiBvYmogKGluIDJeb3JkZXIgcGFnZXMpCi0gKiBhbmQgYWJzb2x1dGUgbGltaXQgZm9yIHRoZSBnZnAgb3JkZXIuCisgKiBNYXhpbXVtIHNpemUgb2YgYW4gb2JqIChpbiAyXm9yZGVyIHBhZ2VzKSBhbmQgYWJzb2x1dGUgbGltaXQgZm9yIHRoZSBnZnAKKyAqIG9yZGVyLgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTEFSR0VfQUxMT0NTKQogI2RlZmluZQlNQVhfT0JKX09SREVSCTEzCS8qIHVwIHRvIDMyTWIgKi8KQEAgLTU3Myw5ICs1ODAsMTAgQEAKICNkZWZpbmUJQlJFQUtfR0ZQX09SREVSX0xPCTAKIHN0YXRpYyBpbnQgc2xhYl9icmVha19nZnBfb3JkZXIgPSBCUkVBS19HRlBfT1JERVJfTE87CiAKLS8qIEZ1bmN0aW9ucyBmb3Igc3RvcmluZy9yZXRyaWV2aW5nIHRoZSBjYWNoZXAgYW5kIG9yIHNsYWIgZnJvbSB0aGUKLSAqIGdsb2JhbCAnbWVtX21hcCcuIFRoZXNlIGFyZSB1c2VkIHRvIGZpbmQgdGhlIHNsYWIgYW4gb2JqIGJlbG9uZ3MgdG8uCi0gKiBXaXRoIGtmcmVlKCksIHRoZXNlIGFyZSB1c2VkIHRvIGZpbmQgdGhlIGNhY2hlIHdoaWNoIGFuIG9iaiBiZWxvbmdzIHRvLgorLyoKKyAqIEZ1bmN0aW9ucyBmb3Igc3RvcmluZy9yZXRyaWV2aW5nIHRoZSBjYWNoZXAgYW5kIG9yIHNsYWIgZnJvbSB0aGUgcGFnZQorICogYWxsb2NhdG9yLiAgVGhlc2UgYXJlIHVzZWQgdG8gZmluZCB0aGUgc2xhYiBhbiBvYmogYmVsb25ncyB0by4gIFdpdGgga2ZyZWUoKSwKKyAqIHRoZXNlIGFyZSB1c2VkIHRvIGZpbmQgdGhlIGNhY2hlIHdoaWNoIGFuIG9iaiBiZWxvbmdzIHRvLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9zZXRfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkKIHsKQEAgLTU4NCw2ICs1OTIsOCBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlICpwYWdlX2dldF9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwlpZiAodW5saWtlbHkoUGFnZUNvbXBvdW5kKHBhZ2UpKSkKKwkJcGFnZSA9IChzdHJ1Y3QgcGFnZSAqKXBhZ2VfcHJpdmF0ZShwYWdlKTsKIAlyZXR1cm4gKHN0cnVjdCBrbWVtX2NhY2hlICopcGFnZS0+bHJ1Lm5leHQ7CiB9CiAKQEAgLTU5NCw2ICs2MDQsOCBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICpwYWdlX2dldF9zbGFiKHN0cnVjdCBwYWdlICpwYWdlKQogeworCWlmICh1bmxpa2VseShQYWdlQ29tcG91bmQocGFnZSkpKQorCQlwYWdlID0gKHN0cnVjdCBwYWdlICopcGFnZV9wcml2YXRlKHBhZ2UpOwogCXJldHVybiAoc3RydWN0IHNsYWIgKilwYWdlLT5scnUucHJldjsKIH0KIApAQCAtNjA5LDcgKzYyMSwyMSBAQAogCXJldHVybiBwYWdlX2dldF9zbGFiKHBhZ2UpOwogfQogCi0vKiBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgY2FjaGVzIGZvciBrbWFsbG9jLiBDdXN0b20gY2FjaGVzIGNhbiBoYXZlIG90aGVyIHNpemVzLiAqLworc3RhdGljIGlubGluZSB2b2lkICppbmRleF90b19vYmooc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwKKwkJCQkgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlyZXR1cm4gc2xhYi0+c19tZW0gKyBjYWNoZS0+YnVmZmVyX3NpemUgKiBpZHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial90b19pbmRleChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUsCisJCQkJCXN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmopCit7CisJcmV0dXJuICh1bnNpZ25lZCkob2JqIC0gc2xhYi0+c19tZW0pIC8gY2FjaGUtPmJ1ZmZlcl9zaXplOworfQorCisvKgorICogVGhlc2UgYXJlIHRoZSBkZWZhdWx0IGNhY2hlcyBmb3Iga21hbGxvYy4gQ3VzdG9tIGNhY2hlcyBjYW4gaGF2ZSBvdGhlciBzaXplcy4KKyAqLwogc3RydWN0IGNhY2hlX3NpemVzIG1hbGxvY19zaXplc1tdID0gewogI2RlZmluZSBDQUNIRSh4KSB7IC5jc19zaXplID0gKHgpIH0sCiAjaW5jbHVkZSA8bGludXgva21hbGxvY19zaXplcy5oPgpAQCAtNjQyLDggKzY2OCw2IEBACiAJLmxpbWl0ID0gQk9PVF9DUFVDQUNIRV9FTlRSSUVTLAogCS5zaGFyZWQgPSAxLAogCS5idWZmZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga21lbV9jYWNoZSksCi0JLmZsYWdzID0gU0xBQl9OT19SRUFQLAotCS5zcGlubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCwKIAkubmFtZSA9ICJrbWVtX2NhY2hlIiwKICNpZiBERUJVRwogCS5vYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qga21lbV9jYWNoZSksCkBAIC02NTUsOCArNjc5LDggQEAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGNhY2hlX2NoYWluOwogCiAvKgotICogdm1fZW5vdWdoX21lbW9yeSgpIGxvb2tzIGF0IHRoaXMgdG8gZGV0ZXJtaW5lIGhvdyBtYW55Ci0gKiBzbGFiLWFsbG9jYXRlZCBwYWdlcyBhcmUgcG9zc2libHkgZnJlZWFibGUgdW5kZXIgcHJlc3N1cmUKKyAqIHZtX2Vub3VnaF9tZW1vcnkoKSBsb29rcyBhdCB0aGlzIHRvIGRldGVybWluZSBob3cgbWFueSBzbGFiLWFsbG9jYXRlZCBwYWdlcworICogYXJlIHBvc3NpYmx5IGZyZWVhYmxlIHVuZGVyIHByZXNzdXJlCiAgKgogICogU0xBQl9SRUNMQUlNX0FDQ09VTlQgdHVybnMgdGhpcyBvbiBwZXItc2xhYgogICovCkBAIC02NzUsNyArNjk5LDggQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB3b3JrX3N0cnVjdCwgcmVhcF93b3JrKTsKIAotc3RhdGljIHZvaWQgZnJlZV9ibG9jayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICoqb2JqcHAsIGludCBsZW4sIGludCBub2RlKTsKK3N0YXRpYyB2b2lkIGZyZWVfYmxvY2soc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqKm9ianBwLCBpbnQgbGVuLAorCQkJaW50IG5vZGUpOwogc3RhdGljIHZvaWQgZW5hYmxlX2NwdWNhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApOwogc3RhdGljIHZvaWQgY2FjaGVfcmVhcCh2b2lkICp1bnVzZWQpOwogc3RhdGljIGludCBfX25vZGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGludCBub2RlKTsKQEAgLTY4NSw3ICs3MTAsOCBAQAogCXJldHVybiBjYWNoZXAtPmFycmF5W3NtcF9wcm9jZXNzb3JfaWQoKV07CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGttZW1fY2FjaGUgKl9fZmluZF9nZW5lcmFsX2NhY2hlcChzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlICpfX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90IHNpemUsCisJCQkJCQkJZ2ZwX3QgZ2ZwZmxhZ3MpCiB7CiAJc3RydWN0IGNhY2hlX3NpemVzICpjc2l6ZXAgPSBtYWxsb2Nfc2l6ZXM7CiAKQEAgLTcyMCw4ICs3NDYsOSBAQAogCXJldHVybiBBTElHTihzaXplb2Yoc3RydWN0IHNsYWIpK25yX29ianMqc2l6ZW9mKGttZW1fYnVmY3RsX3QpLCBhbGlnbik7CiB9CiAKLS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG9iamVjdHMgYW5kIGxlZnQtb3ZlciBieXRlcyBmb3IgYSBnaXZlbgotICAgYnVmZmVyIHNpemUuICovCisvKgorICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBhbmQgbGVmdC1vdmVyIGJ5dGVzIGZvciBhIGdpdmVuIGJ1ZmZlciBzaXplLgorICovCiBzdGF0aWMgdm9pZCBjYWNoZV9lc3RpbWF0ZSh1bnNpZ25lZCBsb25nIGdmcG9yZGVyLCBzaXplX3QgYnVmZmVyX3NpemUsCiAJCQkgICBzaXplX3QgYWxpZ24sIGludCBmbGFncywgc2l6ZV90ICpsZWZ0X292ZXIsCiAJCQkgICB1bnNpZ25lZCBpbnQgKm51bSkKQEAgLTc4MiwxMyArODA5LDU1IEBACiAKICNkZWZpbmUgc2xhYl9lcnJvcihjYWNoZXAsIG1zZykgX19zbGFiX2Vycm9yKF9fRlVOQ1RJT05fXywgY2FjaGVwLCBtc2cpCiAKLXN0YXRpYyB2b2lkIF9fc2xhYl9lcnJvcihjb25zdCBjaGFyICpmdW5jdGlvbiwgc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgY2hhciAqbXNnKQorc3RhdGljIHZvaWQgX19zbGFiX2Vycm9yKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAorCQkJY2hhciAqbXNnKQogewogCXByaW50ayhLRVJOX0VSUiAic2xhYiBlcnJvciBpbiAlcygpOiBjYWNoZSBgJXMnOiAlc1xuIiwKIAkgICAgICAgZnVuY3Rpb24sIGNhY2hlcC0+bmFtZSwgbXNnKTsKIAlkdW1wX3N0YWNrKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTlVNQQorLyoKKyAqIFNwZWNpYWwgcmVhcGluZyBmdW5jdGlvbnMgZm9yIE5VTUEgc3lzdGVtcyBjYWxsZWQgZnJvbSBjYWNoZV9yZWFwKCkuCisgKiBUaGVzZSB0YWtlIGNhcmUgb2YgZG9pbmcgcm91bmQgcm9iaW4gZmx1c2hpbmcgb2YgYWxpZW4gY2FjaGVzIChjb250YWluaW5nCisgKiBvYmplY3RzIGZyZWVkIG9uIGRpZmZlcmVudCBub2RlcyBmcm9tIHdoaWNoIHRoZXkgd2VyZSBhbGxvY2F0ZWQpIGFuZCB0aGUKKyAqIGZsdXNoaW5nIG9mIHJlbW90ZSBwY3BzIGJ5IGNhbGxpbmcgZHJhaW5fbm9kZV9wYWdlcy4KKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHJlYXBfbm9kZSk7CisKK3N0YXRpYyB2b2lkIGluaXRfcmVhcF9ub2RlKGludCBjcHUpCit7CisJaW50IG5vZGU7CisKKwlub2RlID0gbmV4dF9ub2RlKGNwdV90b19ub2RlKGNwdSksIG5vZGVfb25saW5lX21hcCk7CisJaWYgKG5vZGUgPT0gTUFYX05VTU5PREVTKQorCQlub2RlID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOworCisJX19nZXRfY3B1X3ZhcihyZWFwX25vZGUpID0gbm9kZTsKK30KKworc3RhdGljIHZvaWQgbmV4dF9yZWFwX25vZGUodm9pZCkKK3sKKwlpbnQgbm9kZSA9IF9fZ2V0X2NwdV92YXIocmVhcF9ub2RlKTsKKworCS8qCisJICogQWxzbyBkcmFpbiBwZXIgY3B1IHBhZ2VzIG9uIHJlbW90ZSB6b25lcworCSAqLworCWlmIChub2RlICE9IG51bWFfbm9kZV9pZCgpKQorCQlkcmFpbl9ub2RlX3BhZ2VzKG5vZGUpOworCisJbm9kZSA9IG5leHRfbm9kZShub2RlLCBub2RlX29ubGluZV9tYXApOworCWlmICh1bmxpa2VseShub2RlID49IE1BWF9OVU1OT0RFUykpCisJCW5vZGUgPSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCk7CisJX19nZXRfY3B1X3ZhcihyZWFwX25vZGUpID0gbm9kZTsKK30KKworI2Vsc2UKKyNkZWZpbmUgaW5pdF9yZWFwX25vZGUoY3B1KSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5leHRfcmVhcF9ub2RlKHZvaWQpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAvKgogICogSW5pdGlhdGUgdGhlIHJlYXAgdGltZXIgcnVubmluZyBvbiB0aGUgdGFyZ2V0IENQVS4gIFdlIHJ1biBhdCBhcm91bmQgMSB0byAySHoKICAqIHZpYSB0aGUgd29ya3F1ZXVlL2V2ZW50ZC4KQEAgLTgwNiw2ICs4NzUsNyBAQAogCSAqIGF0IHRoYXQgdGltZS4KIAkgKi8KIAlpZiAoa2V2ZW50ZF91cCgpICYmIHJlYXBfd29yay0+ZnVuYyA9PSBOVUxMKSB7CisJCWluaXRfcmVhcF9ub2RlKGNwdSk7CiAJCUlOSVRfV09SSyhyZWFwX3dvcmssIGNhY2hlX3JlYXAsIE5VTEwpOwogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24oY3B1LCByZWFwX3dvcmssIEhaICsgMyAqIGNwdSk7CiAJfQpAQCAtODI4LDggKzg5OCwzMyBAQAogCXJldHVybiBuYzsKIH0KIAorLyoKKyAqIFRyYW5zZmVyIG9iamVjdHMgaW4gb25lIGFycmF5Y2FjaGUgdG8gYW5vdGhlci4KKyAqIExvY2tpbmcgbXVzdCBiZSBoYW5kbGVkIGJ5IHRoZSBjYWxsZXIuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyB0cmFuc2ZlcnJlZC4KKyAqLworc3RhdGljIGludCB0cmFuc2Zlcl9vYmplY3RzKHN0cnVjdCBhcnJheV9jYWNoZSAqdG8sCisJCXN0cnVjdCBhcnJheV9jYWNoZSAqZnJvbSwgdW5zaWduZWQgaW50IG1heCkKK3sKKwkvKiBGaWd1cmUgb3V0IGhvdyBtYW55IGVudHJpZXMgdG8gdHJhbnNmZXIgKi8KKwlpbnQgbnIgPSBtaW4obWluKGZyb20tPmF2YWlsLCBtYXgpLCB0by0+bGltaXQgLSB0by0+YXZhaWwpOworCisJaWYgKCFucikKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkodG8tPmVudHJ5ICsgdG8tPmF2YWlsLCBmcm9tLT5lbnRyeSArIGZyb20tPmF2YWlsIC1uciwKKwkJCXNpemVvZih2b2lkICopICpucik7CisKKwlmcm9tLT5hdmFpbCAtPSBucjsKKwl0by0+YXZhaWwgKz0gbnI7CisJdG8tPnRvdWNoZWQgPSAxOworCXJldHVybiBucjsKK30KKwogI2lmZGVmIENPTkZJR19OVU1BCiBzdGF0aWMgdm9pZCAqX19jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90LCBpbnQpOworc3RhdGljIHZvaWQgKmFsdGVybmF0ZV9ub2RlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90KTsKIAogc3RhdGljIHN0cnVjdCBhcnJheV9jYWNoZSAqKmFsbG9jX2FsaWVuX2NhY2hlKGludCBub2RlLCBpbnQgbGltaXQpCiB7CkBAIC04NjQsMTAgKzk1OSw4IEBACiAKIAlpZiAoIWFjX3B0cikKIAkJcmV0dXJuOwotCiAJZm9yX2VhY2hfbm9kZShpKQogCSAgICBrZnJlZShhY19wdHJbaV0pOwotCiAJa2ZyZWUoYWNfcHRyKTsKIH0KIApAQCAtODc4LDEzICs5NzEsMzggQEAKIAogCWlmIChhYy0+YXZhaWwpIHsKIAkJc3Bpbl9sb2NrKCZybDMtPmxpc3RfbG9jayk7CisJCS8qCisJCSAqIFN0dWZmIG9iamVjdHMgaW50byB0aGUgcmVtb3RlIG5vZGVzIHNoYXJlZCBhcnJheSBmaXJzdC4KKwkJICogVGhhdCB3YXkgd2UgY291bGQgYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHB1dHRpbmcgdGhlIG9iamVjdHMKKwkJICogaW50byB0aGUgZnJlZSBsaXN0cyBhbmQgZ2V0dGluZyB0aGVtIGJhY2sgbGF0ZXIuCisJCSAqLworCQl0cmFuc2Zlcl9vYmplY3RzKHJsMy0+c2hhcmVkLCBhYywgYWMtPmxpbWl0KTsKKwogCQlmcmVlX2Jsb2NrKGNhY2hlcCwgYWMtPmVudHJ5LCBhYy0+YXZhaWwsIG5vZGUpOwogCQlhYy0+YXZhaWwgPSAwOwogCQlzcGluX3VubG9jaygmcmwzLT5saXN0X2xvY2spOwogCX0KIH0KIAotc3RhdGljIHZvaWQgZHJhaW5fYWxpZW5fY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IGFycmF5X2NhY2hlICoqYWxpZW4pCisvKgorICogQ2FsbGVkIGZyb20gY2FjaGVfcmVhcCgpIHRvIHJlZ3VsYXJseSBkcmFpbiBhbGllbiBjYWNoZXMgcm91bmQgcm9iaW4uCisgKi8KK3N0YXRpYyB2b2lkIHJlYXBfYWxpZW4oc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IGttZW1fbGlzdDMgKmwzKQoreworCWludCBub2RlID0gX19nZXRfY3B1X3ZhcihyZWFwX25vZGUpOworCisJaWYgKGwzLT5hbGllbikgeworCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjID0gbDMtPmFsaWVuW25vZGVdOworCisJCWlmIChhYyAmJiBhYy0+YXZhaWwgJiYgc3Bpbl90cnlsb2NrX2lycSgmYWMtPmxvY2spKSB7CisJCQlfX2RyYWluX2FsaWVuX2NhY2hlKGNhY2hlcCwgYWMsIG5vZGUpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZhYy0+bG9jayk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRyYWluX2FsaWVuX2NhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCQkJc3RydWN0IGFycmF5X2NhY2hlICoqYWxpZW4pCiB7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBhcnJheV9jYWNoZSAqYWM7CkBAIC05MDIsNiArMTAyMCw3IEBACiAjZWxzZQogCiAjZGVmaW5lIGRyYWluX2FsaWVuX2NhY2hlKGNhY2hlcCwgYWxpZW4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmVhcF9hbGllbihjYWNoZXAsIGwzKSBkbyB7IH0gd2hpbGUgKDApCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFycmF5X2NhY2hlICoqYWxsb2NfYWxpZW5fY2FjaGUoaW50IG5vZGUsIGludCBsaW1pdCkKIHsKQEAgLTkyNiwyMCArMTA0NSwyMiBAQAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKIAkJbXV0ZXhfbG9jaygmY2FjaGVfY2hhaW5fbXV0ZXgpOwotCQkvKiB3ZSBuZWVkIHRvIGRvIHRoaXMgcmlnaHQgaW4gdGhlIGJlZ2lubmluZyBzaW5jZQorCQkvKgorCQkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgcmlnaHQgaW4gdGhlIGJlZ2lubmluZyBzaW5jZQogCQkgKiBhbGxvY19hcnJheWNhY2hlJ3MgYXJlIGdvaW5nIHRvIHVzZSB0aGlzIGxpc3QuCiAJCSAqIGttYWxsb2Nfbm9kZSBhbGxvd3MgdXMgdG8gYWRkIHRoZSBzbGFiIHRvIHRoZSByaWdodAogCQkgKiBrbWVtX2xpc3QzIGFuZCBub3QgdGhpcyBjcHUncyBrbWVtX2xpc3QzCiAJCSAqLwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGVwLCAmY2FjaGVfY2hhaW4sIG5leHQpIHsKLQkJCS8qIHNldHVwIHRoZSBzaXplNjQga21lbWxpc3QgZm9yIGNwdSBiZWZvcmUgd2UgY2FuCisJCQkvKgorCQkJICogU2V0IHVwIHRoZSBzaXplNjQga21lbWxpc3QgZm9yIGNwdSBiZWZvcmUgd2UgY2FuCiAJCQkgKiBiZWdpbiBhbnl0aGluZy4gTWFrZSBzdXJlIHNvbWUgb3RoZXIgY3B1IG9uIHRoaXMKIAkJCSAqIG5vZGUgaGFzIG5vdCBhbHJlYWR5IGFsbG9jYXRlZCB0aGlzCiAJCQkgKi8KIAkJCWlmICghY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0pIHsKLQkJCQlpZiAoIShsMyA9IGttYWxsb2Nfbm9kZShtZW1zaXplLAotCQkJCQkJCUdGUF9LRVJORUwsIG5vZGUpKSkKKwkJCQlsMyA9IGttYWxsb2Nfbm9kZShtZW1zaXplLCBHRlBfS0VSTkVMLCBub2RlKTsKKwkJCQlpZiAoIWwzKQogCQkJCQlnb3RvIGJhZDsKIAkJCQlrbWVtX2xpc3QzX2luaXQobDMpOwogCQkJCWwzLT5uZXh0X3JlYXAgPSBqaWZmaWVzICsgUkVBUFRJTUVPVVRfTElTVDMgKwpAQCAtOTU1LDEzICsxMDc2LDE1IEBACiAKIAkJCXNwaW5fbG9ja19pcnEoJmNhY2hlcC0+bm9kZWxpc3RzW25vZGVdLT5saXN0X2xvY2spOwogCQkJY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0tPmZyZWVfbGltaXQgPQotCQkJICAgICgxICsgbnJfY3B1c19ub2RlKG5vZGUpKSAqCi0JCQkgICAgY2FjaGVwLT5iYXRjaGNvdW50ICsgY2FjaGVwLT5udW07CisJCQkJKDEgKyBucl9jcHVzX25vZGUobm9kZSkpICoKKwkJCQljYWNoZXAtPmJhdGNoY291bnQgKyBjYWNoZXAtPm51bTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0tPmxpc3RfbG9jayk7CiAJCX0KIAotCQkvKiBOb3cgd2UgY2FuIGdvIGFoZWFkIHdpdGggYWxsb2NhdGluZyB0aGUgc2hhcmVkIGFycmF5J3MKLQkJICAgJiBhcnJheSBjYWNoZSdzICovCisJCS8qCisJCSAqIE5vdyB3ZSBjYW4gZ28gYWhlYWQgd2l0aCBhbGxvY2F0aW5nIHRoZSBzaGFyZWQgYXJyYXlzIGFuZAorCQkgKiBhcnJheSBjYWNoZXMKKwkJICovCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGVwLCAmY2FjaGVfY2hhaW4sIG5leHQpIHsKIAkJCXN0cnVjdCBhcnJheV9jYWNoZSAqbmM7CiAJCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKnNoYXJlZDsKQEAgLTk4MSw3ICsxMTA0LDYgQEAKIAkJCWlmICghYWxpZW4pCiAJCQkJZ290byBiYWQ7CiAJCQljYWNoZXAtPmFycmF5W2NwdV0gPSBuYzsKLQogCQkJbDMgPSBjYWNoZXAtPm5vZGVsaXN0c1tub2RlXTsKIAkJCUJVR19PTighbDMpOwogCkBAIC0xMDAxLDcgKzExMjMsNiBAQAogCQkJfQogI2VuZGlmCiAJCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwotCiAJCQlrZnJlZShzaGFyZWQpOwogCQkJZnJlZV9hbGllbl9jYWNoZShhbGllbik7CiAJCX0KQEAgLTEwMjMsNyArMTE0NCw2IEBACiAJCS8qIGZhbGwgdGhydSAqLwogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgogCQltdXRleF9sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7Ci0KIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWNoZXAsICZjYWNoZV9jaGFpbiwgbmV4dCkgewogCQkJc3RydWN0IGFycmF5X2NhY2hlICpuYzsKIAkJCXN0cnVjdCBhcnJheV9jYWNoZSAqc2hhcmVkOwpAQCAtMTA5MCw3ICsxMjEwLDcgQEAKICNlbmRpZgogCX0KIAlyZXR1cm4gTk9USUZZX09LOwotICAgICAgYmFkOgorYmFkOgogCW11dGV4X3VubG9jaygmY2FjaGVfY2hhaW5fbXV0ZXgpOwogCXJldHVybiBOT1RJRllfQkFEOwogfQpAQCAtMTEwMCw3ICsxMjIwLDggQEAKIC8qCiAgKiBzd2FwIHRoZSBzdGF0aWMga21lbV9saXN0MyB3aXRoIGttYWxsb2NlZCBtZW1vcnkKICAqLwotc3RhdGljIHZvaWQgaW5pdF9saXN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBrbWVtX2xpc3QzICpsaXN0LCBpbnQgbm9kZWlkKQorc3RhdGljIHZvaWQgaW5pdF9saXN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBrbWVtX2xpc3QzICpsaXN0LAorCQkJaW50IG5vZGVpZCkKIHsKIAlzdHJ1Y3Qga21lbV9saXN0MyAqcHRyOwogCkBAIC0xMTE1LDggKzEyMzYsOSBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KIAotLyogSW5pdGlhbGlzYXRpb24uCi0gKiBDYWxsZWQgYWZ0ZXIgdGhlIGdmcCgpIGZ1bmN0aW9ucyBoYXZlIGJlZW4gZW5hYmxlZCwgYW5kIGJlZm9yZSBzbXBfaW5pdCgpLgorLyoKKyAqIEluaXRpYWxpc2F0aW9uLiAgQ2FsbGVkIGFmdGVyIHRoZSBwYWdlIGFsbG9jYXRvciBoYXZlIGJlZW4gaW5pdGlhbGlzZWQgYW5kCisgKiBiZWZvcmUgc21wX2luaXQoKS4KICAqLwogdm9pZCBfX2luaXQga21lbV9jYWNoZV9pbml0KHZvaWQpCiB7CkBAIC0xMTI0LDYgKzEyNDYsNyBAQAogCXN0cnVjdCBjYWNoZV9zaXplcyAqc2l6ZXM7CiAJc3RydWN0IGNhY2hlX25hbWVzICpuYW1lczsKIAlpbnQgaTsKKwlpbnQgb3JkZXI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0lOSVRfTElTVFM7IGkrKykgewogCQlrbWVtX2xpc3QzX2luaXQoJmluaXRrbWVtX2xpc3QzW2ldKTsKQEAgLTExNDAsOSArMTI2Myw5IEBACiAKIAkvKiBCb290c3RyYXAgaXMgdHJpY2t5LCBiZWNhdXNlIHNldmVyYWwgb2JqZWN0cyBhcmUgYWxsb2NhdGVkCiAJICogZnJvbSBjYWNoZXMgdGhhdCBkbyBub3QgZXhpc3QgeWV0OgotCSAqIDEpIGluaXRpYWxpemUgdGhlIGNhY2hlX2NhY2hlIGNhY2hlOiBpdCBjb250YWlucyB0aGUgc3RydWN0IGttZW1fY2FjaGUKLQkgKiAgICBzdHJ1Y3R1cmVzIG9mIGFsbCBjYWNoZXMsIGV4Y2VwdCBjYWNoZV9jYWNoZSBpdHNlbGY6IGNhY2hlX2NhY2hlCi0JICogICAgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisJICogMSkgaW5pdGlhbGl6ZSB0aGUgY2FjaGVfY2FjaGUgY2FjaGU6IGl0IGNvbnRhaW5zIHRoZSBzdHJ1Y3QKKwkgKiAgICBrbWVtX2NhY2hlIHN0cnVjdHVyZXMgb2YgYWxsIGNhY2hlcywgZXhjZXB0IGNhY2hlX2NhY2hlIGl0c2VsZjoKKwkgKiAgICBjYWNoZV9jYWNoZSBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KIAkgKiAgICBJbml0aWFsbHkgYW4gX19pbml0IGRhdGEgYXJlYSBpcyB1c2VkIGZvciB0aGUgaGVhZCBhcnJheSBhbmQgdGhlCiAJICogICAga21lbV9saXN0MyBzdHJ1Y3R1cmVzLCBpdCdzIHJlcGxhY2VkIHdpdGggYSBrbWFsbG9jIGFsbG9jYXRlZAogCSAqICAgIGFycmF5IGF0IHRoZSBlbmQgb2YgdGhlIGJvb3RzdHJhcC4KQEAgLTExNjUsMTMgKzEyODgsMTggQEAKIAljYWNoZV9jYWNoZS5hcnJheVtzbXBfcHJvY2Vzc29yX2lkKCldID0gJmluaXRhcnJheV9jYWNoZS5jYWNoZTsKIAljYWNoZV9jYWNoZS5ub2RlbGlzdHNbbnVtYV9ub2RlX2lkKCldID0gJmluaXRrbWVtX2xpc3QzW0NBQ0hFX0NBQ0hFXTsKIAotCWNhY2hlX2NhY2hlLmJ1ZmZlcl9zaXplID0gQUxJR04oY2FjaGVfY2FjaGUuYnVmZmVyX3NpemUsIGNhY2hlX2xpbmVfc2l6ZSgpKTsKKwljYWNoZV9jYWNoZS5idWZmZXJfc2l6ZSA9IEFMSUdOKGNhY2hlX2NhY2hlLmJ1ZmZlcl9zaXplLAorCQkJCQljYWNoZV9saW5lX3NpemUoKSk7CiAKLQljYWNoZV9lc3RpbWF0ZSgwLCBjYWNoZV9jYWNoZS5idWZmZXJfc2l6ZSwgY2FjaGVfbGluZV9zaXplKCksIDAsCi0JCSAgICAgICAmbGVmdF9vdmVyLCAmY2FjaGVfY2FjaGUubnVtKTsKKwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgPCBNQVhfT1JERVI7IG9yZGVyKyspIHsKKwkJY2FjaGVfZXN0aW1hdGUob3JkZXIsIGNhY2hlX2NhY2hlLmJ1ZmZlcl9zaXplLAorCQkJY2FjaGVfbGluZV9zaXplKCksIDAsICZsZWZ0X292ZXIsICZjYWNoZV9jYWNoZS5udW0pOworCQlpZiAoY2FjaGVfY2FjaGUubnVtKQorCQkJYnJlYWs7CisJfQogCWlmICghY2FjaGVfY2FjaGUubnVtKQogCQlCVUcoKTsKLQorCWNhY2hlX2NhY2hlLmdmcG9yZGVyID0gb3JkZXI7CiAJY2FjaGVfY2FjaGUuY29sb3VyID0gbGVmdF9vdmVyIC8gY2FjaGVfY2FjaGUuY29sb3VyX29mZjsKIAljYWNoZV9jYWNoZS5zbGFiX3NpemUgPSBBTElHTihjYWNoZV9jYWNoZS5udW0gKiBzaXplb2Yoa21lbV9idWZjdGxfdCkgKwogCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYiksIGNhY2hlX2xpbmVfc2l6ZSgpKTsKQEAgLTExODAsMjQgKzEzMDgsMjYgQEAKIAlzaXplcyA9IG1hbGxvY19zaXplczsKIAluYW1lcyA9IGNhY2hlX25hbWVzOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgY2FjaGVzIHRoYXQgcHJvdmlkZSBtZW1vcnkgZm9yIHRoZSBhcnJheSBjYWNoZQotCSAqIGFuZCB0aGUga21lbV9saXN0MyBzdHJ1Y3R1cmVzIGZpcnN0LgotCSAqIFdpdGhvdXQgdGhpcywgZnVydGhlciBhbGxvY2F0aW9ucyB3aWxsIGJ1ZworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgY2FjaGVzIHRoYXQgcHJvdmlkZSBtZW1vcnkgZm9yIHRoZSBhcnJheSBjYWNoZSBhbmQgdGhlCisJICoga21lbV9saXN0MyBzdHJ1Y3R1cmVzIGZpcnN0LiAgV2l0aG91dCB0aGlzLCBmdXJ0aGVyIGFsbG9jYXRpb25zIHdpbGwKKwkgKiBidWcuCiAJICovCiAKIAlzaXplc1tJTkRFWF9BQ10uY3NfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUobmFtZXNbSU5ERVhfQUNdLm5hbWUsCi0JCQkJCQkgICAgICBzaXplc1tJTkRFWF9BQ10uY3Nfc2l6ZSwKLQkJCQkJCSAgICAgIEFSQ0hfS01BTExPQ19NSU5BTElHTiwKLQkJCQkJCSAgICAgIChBUkNIX0tNQUxMT0NfRkxBR1MgfAotCQkJCQkJICAgICAgIFNMQUJfUEFOSUMpLCBOVUxMLCBOVUxMKTsKKwkJCQkJc2l6ZXNbSU5ERVhfQUNdLmNzX3NpemUsCisJCQkJCUFSQ0hfS01BTExPQ19NSU5BTElHTiwKKwkJCQkJQVJDSF9LTUFMTE9DX0ZMQUdTfFNMQUJfUEFOSUMsCisJCQkJCU5VTEwsIE5VTEwpOwogCi0JaWYgKElOREVYX0FDICE9IElOREVYX0wzKQorCWlmIChJTkRFWF9BQyAhPSBJTkRFWF9MMykgewogCQlzaXplc1tJTkRFWF9MM10uY3NfY2FjaGVwID0KLQkJICAgIGttZW1fY2FjaGVfY3JlYXRlKG5hbWVzW0lOREVYX0wzXS5uYW1lLAotCQkJCSAgICAgIHNpemVzW0lOREVYX0wzXS5jc19zaXplLAotCQkJCSAgICAgIEFSQ0hfS01BTExPQ19NSU5BTElHTiwKLQkJCQkgICAgICAoQVJDSF9LTUFMTE9DX0ZMQUdTIHwgU0xBQl9QQU5JQyksIE5VTEwsCi0JCQkJICAgICAgTlVMTCk7CisJCQlrbWVtX2NhY2hlX2NyZWF0ZShuYW1lc1tJTkRFWF9MM10ubmFtZSwKKwkJCQlzaXplc1tJTkRFWF9MM10uY3Nfc2l6ZSwKKwkJCQlBUkNIX0tNQUxMT0NfTUlOQUxJR04sCisJCQkJQVJDSF9LTUFMTE9DX0ZMQUdTfFNMQUJfUEFOSUMsCisJCQkJTlVMTCwgTlVMTCk7CisJfQogCiAJd2hpbGUgKHNpemVzLT5jc19zaXplICE9IFVMT05HX01BWCkgewogCQkvKgpAQCAtMTIwNywxMyArMTMzNywxMyBAQAogCQkgKiBOb3RlIGZvciBzeXN0ZW1zIHNob3J0IG9uIG1lbW9yeSByZW1vdmluZyB0aGUgYWxpZ25tZW50IHdpbGwKIAkJICogYWxsb3cgdGlnaHRlciBwYWNraW5nIG9mIHRoZSBzbWFsbGVyIGNhY2hlcy4KIAkJICovCi0JCWlmICghc2l6ZXMtPmNzX2NhY2hlcCkKKwkJaWYgKCFzaXplcy0+Y3NfY2FjaGVwKSB7CiAJCQlzaXplcy0+Y3NfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUobmFtZXMtPm5hbWUsCi0JCQkJCQkJICAgICBzaXplcy0+Y3Nfc2l6ZSwKLQkJCQkJCQkgICAgIEFSQ0hfS01BTExPQ19NSU5BTElHTiwKLQkJCQkJCQkgICAgIChBUkNIX0tNQUxMT0NfRkxBR1MKLQkJCQkJCQkgICAgICB8IFNMQUJfUEFOSUMpLAotCQkJCQkJCSAgICAgTlVMTCwgTlVMTCk7CisJCQkJCXNpemVzLT5jc19zaXplLAorCQkJCQlBUkNIX0tNQUxMT0NfTUlOQUxJR04sCisJCQkJCUFSQ0hfS01BTExPQ19GTEFHU3xTTEFCX1BBTklDLAorCQkJCQlOVUxMLCBOVUxMKTsKKwkJfQogCiAJCS8qIEluYyBvZmYtc2xhYiBidWZjdGwgbGltaXQgdW50aWwgdGhlIGNlaWxpbmcgaXMgaGl0LiAqLwogCQlpZiAoIShPRkZfU0xBQihzaXplcy0+Y3NfY2FjaGVwKSkpIHsKQEAgLTEyMjIsMTMgKzEzNTIsMTEgQEAKIAkJfQogCiAJCXNpemVzLT5jc19kbWFjYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lcy0+bmFtZV9kbWEsCi0JCQkJCQkJc2l6ZXMtPmNzX3NpemUsCi0JCQkJCQkJQVJDSF9LTUFMTE9DX01JTkFMSUdOLAotCQkJCQkJCShBUkNIX0tNQUxMT0NfRkxBR1MgfAotCQkJCQkJCSBTTEFCX0NBQ0hFX0RNQSB8Ci0JCQkJCQkJIFNMQUJfUEFOSUMpLCBOVUxMLAotCQkJCQkJCU5VTEwpOwotCisJCQkJCXNpemVzLT5jc19zaXplLAorCQkJCQlBUkNIX0tNQUxMT0NfTUlOQUxJR04sCisJCQkJCUFSQ0hfS01BTExPQ19GTEFHU3xTTEFCX0NBQ0hFX0RNQXwKKwkJCQkJCVNMQUJfUEFOSUMsCisJCQkJCU5VTEwsIE5VTEwpOwogCQlzaXplcysrOwogCQluYW1lcysrOwogCX0KQEAgLTEyODAsMjAgKzE0MDgsMjIgQEAKIAkJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKIAkJbXV0ZXhfbG9jaygmY2FjaGVfY2hhaW5fbXV0ZXgpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlcCwgJmNhY2hlX2NoYWluLCBuZXh0KQotCQkgICAgZW5hYmxlX2NwdWNhY2hlKGNhY2hlcCk7CisJCQllbmFibGVfY3B1Y2FjaGUoY2FjaGVwKTsKIAkJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CiAJfQogCiAJLyogRG9uZSEgKi8KIAlnX2NwdWNhY2hlX3VwID0gRlVMTDsKIAotCS8qIFJlZ2lzdGVyIGEgY3B1IHN0YXJ0dXAgbm90aWZpZXIgY2FsbGJhY2sKLQkgKiB0aGF0IGluaXRpYWxpemVzIGNwdV9jYWNoZV9nZXQgZm9yIGFsbCBuZXcgY3B1cworCS8qCisJICogUmVnaXN0ZXIgYSBjcHUgc3RhcnR1cCBub3RpZmllciBjYWxsYmFjayB0aGF0IGluaXRpYWxpemVzCisJICogY3B1X2NhY2hlX2dldCBmb3IgYWxsIG5ldyBjcHVzCiAJICovCiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVjYWNoZV9ub3RpZmllcik7CiAKLQkvKiBUaGUgcmVhcCB0aW1lcnMgYXJlIHN0YXJ0ZWQgbGF0ZXIsIHdpdGggYSBtb2R1bGUgaW5pdCBjYWxsOgotCSAqIFRoYXQgcGFydCBvZiB0aGUga2VybmVsIGlzIG5vdCB5ZXQgb3BlcmF0aW9uYWwuCisJLyoKKwkgKiBUaGUgcmVhcCB0aW1lcnMgYXJlIHN0YXJ0ZWQgbGF0ZXIsIHdpdGggYSBtb2R1bGUgaW5pdCBjYWxsOiBUaGF0IHBhcnQKKwkgKiBvZiB0aGUga2VybmVsIGlzIG5vdCB5ZXQgb3BlcmF0aW9uYWwuCiAJICovCiB9CiAKQEAgLTEzMDEsMTYgKzE0MzEsMTMgQEAKIHsKIAlpbnQgY3B1OwogCi0JLyogCi0JICogUmVnaXN0ZXIgdGhlIHRpbWVycyB0aGF0IHJldHVybiB1bm5lZWRlZAotCSAqIHBhZ2VzIHRvIGdmcC4KKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSB0aW1lcnMgdGhhdCByZXR1cm4gdW5uZWVkZWQgcGFnZXMgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yCiAJICovCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JICAgIHN0YXJ0X2NwdV90aW1lcihjcHUpOwotCisJCXN0YXJ0X2NwdV90aW1lcihjcHUpOwogCXJldHVybiAwOwogfQotCiBfX2luaXRjYWxsKGNwdWNhY2hlX2luaXQpOwogCiAvKgpAQCAtMTMzNyw3ICsxNDY0LDcgQEAKIAkJYXRvbWljX2FkZChpLCAmc2xhYl9yZWNsYWltX3BhZ2VzKTsKIAlhZGRfcGFnZV9zdGF0ZShucl9zbGFiLCBpKTsKIAl3aGlsZSAoaS0tKSB7Ci0JCVNldFBhZ2VTbGFiKHBhZ2UpOworCQlfX1NldFBhZ2VTbGFiKHBhZ2UpOwogCQlwYWdlKys7CiAJfQogCXJldHVybiBhZGRyOwpAQCAtMTM1Myw4ICsxNDgwLDggQEAKIAljb25zdCB1bnNpZ25lZCBsb25nIG5yX2ZyZWVkID0gaTsKIAogCXdoaWxlIChpLS0pIHsKLQkJaWYgKCFUZXN0Q2xlYXJQYWdlU2xhYihwYWdlKSkKLQkJCUJVRygpOworCQlCVUdfT04oIVBhZ2VTbGFiKHBhZ2UpKTsKKwkJX19DbGVhclBhZ2VTbGFiKHBhZ2UpOwogCQlwYWdlKys7CiAJfQogCXN1Yl9wYWdlX3N0YXRlKG5yX3NsYWIsIG5yX2ZyZWVkKTsKQEAgLTE0MjQsOSArMTU1MSw4IEBACiB7CiAJaW50IGk7CiAJcHJpbnRrKEtFUk5fRVJSICIlMDN4OiIsIG9mZnNldCk7Ci0JZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkrKykKIAkJcHJpbnRrKCIgJTAyeCIsICh1bnNpZ25lZCBjaGFyKWRhdGFbb2Zmc2V0ICsgaV0pOwotCX0KIAlwcmludGsoIlxuIik7CiB9CiAjZW5kaWYKQEAgLTE0NDAsMTUgKzE1NjYsMTUgQEAKIAogCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9SRURfWk9ORSkgewogCQlwcmludGsoS0VSTl9FUlIgIlJlZHpvbmU6IDB4JWx4LzB4JWx4LlxuIiwKLQkJICAgICAgICpkYmdfcmVkem9uZTEoY2FjaGVwLCBvYmpwKSwKLQkJICAgICAgICpkYmdfcmVkem9uZTIoY2FjaGVwLCBvYmpwKSk7CisJCQkqZGJnX3JlZHpvbmUxKGNhY2hlcCwgb2JqcCksCisJCQkqZGJnX3JlZHpvbmUyKGNhY2hlcCwgb2JqcCkpOwogCX0KIAogCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9TVE9SRV9VU0VSKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTGFzdCB1c2VyOiBbPCVwPl0iLAotCQkgICAgICAgKmRiZ191c2Vyd29yZChjYWNoZXAsIG9ianApKTsKKwkJCSpkYmdfdXNlcndvcmQoY2FjaGVwLCBvYmpwKSk7CiAJCXByaW50X3N5bWJvbCgiKCVzKSIsCi0JCQkgICAgICh1bnNpZ25lZCBsb25nKSpkYmdfdXNlcndvcmQoY2FjaGVwLCBvYmpwKSk7CisJCQkJKHVuc2lnbmVkIGxvbmcpKmRiZ191c2Vyd29yZChjYWNoZXAsIG9ianApKTsKIAkJcHJpbnRrKCJcbiIpOwogCX0KIAlyZWFsb2JqID0gKGNoYXIgKilvYmpwICsgb2JqX29mZnNldChjYWNoZXApOwpAQCAtMTQ4MSw4ICsxNjA3LDggQEAKIAkJCS8qIFByaW50IGhlYWRlciAqLwogCQkJaWYgKGxpbmVzID09IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIlNsYWIgY29ycnVwdGlvbjogc3RhcnQ9JXAsIGxlbj0lZFxuIiwKLQkJCQkgICAgICAgcmVhbG9iaiwgc2l6ZSk7CisJCQkJCSJTbGFiIGNvcnJ1cHRpb246IHN0YXJ0PSVwLCBsZW49JWRcbiIsCisJCQkJCXJlYWxvYmosIHNpemUpOwogCQkJCXByaW50X29iamluZm8oY2FjaGVwLCBvYmpwLCAwKTsKIAkJCX0KIAkJCS8qIEhleGR1bXAgdGhlIGFmZmVjdGVkIGxpbmUgKi8KQEAgLTE1MDMsMTggKzE2MjksMTggQEAKIAkJICogZXhpc3Q6CiAJCSAqLwogCQlzdHJ1Y3Qgc2xhYiAqc2xhYnAgPSB2aXJ0X3RvX3NsYWIob2JqcCk7Ci0JCWludCBvYmpucjsKKwkJdW5zaWduZWQgaW50IG9iam5yOwogCi0JCW9iam5yID0gKHVuc2lnbmVkKShvYmpwIC0gc2xhYnAtPnNfbWVtKSAvIGNhY2hlcC0+YnVmZmVyX3NpemU7CisJCW9iam5yID0gb2JqX3RvX2luZGV4KGNhY2hlcCwgc2xhYnAsIG9ianApOwogCQlpZiAob2JqbnIpIHsKLQkJCW9ianAgPSBzbGFicC0+c19tZW0gKyAob2JqbnIgLSAxKSAqIGNhY2hlcC0+YnVmZmVyX3NpemU7CisJCQlvYmpwID0gaW5kZXhfdG9fb2JqKGNhY2hlcCwgc2xhYnAsIG9iam5yIC0gMSk7CiAJCQlyZWFsb2JqID0gKGNoYXIgKilvYmpwICsgb2JqX29mZnNldChjYWNoZXApOwogCQkJcHJpbnRrKEtFUk5fRVJSICJQcmV2IG9iajogc3RhcnQ9JXAsIGxlbj0lZFxuIiwKIAkJCSAgICAgICByZWFsb2JqLCBzaXplKTsKIAkJCXByaW50X29iamluZm8oY2FjaGVwLCBvYmpwLCAyKTsKIAkJfQogCQlpZiAob2JqbnIgKyAxIDwgY2FjaGVwLT5udW0pIHsKLQkJCW9ianAgPSBzbGFicC0+c19tZW0gKyAob2JqbnIgKyAxKSAqIGNhY2hlcC0+YnVmZmVyX3NpemU7CisJCQlvYmpwID0gaW5kZXhfdG9fb2JqKGNhY2hlcCwgc2xhYnAsIG9iam5yICsgMSk7CiAJCQlyZWFsb2JqID0gKGNoYXIgKilvYmpwICsgb2JqX29mZnNldChjYWNoZXApOwogCQkJcHJpbnRrKEtFUk5fRVJSICJOZXh0IG9iajogc3RhcnQ9JXAsIGxlbj0lZFxuIiwKIAkJCSAgICAgICByZWFsb2JqLCBzaXplKTsKQEAgLTE1MjYsMjIgKzE2NTIsMjUgQEAKIAogI2lmIERFQlVHCiAvKioKLSAqIHNsYWJfZGVzdHJveV9vYmpzIC0gY2FsbCB0aGUgcmVnaXN0ZXJlZCBkZXN0cnVjdG9yIGZvciBlYWNoIG9iamVjdCBpbgotICogICAgICBhIHNsYWIgdGhhdCBpcyB0byBiZSBkZXN0cm95ZWQuCisgKiBzbGFiX2Rlc3Ryb3lfb2JqcyAtIGRlc3Ryb3kgYSBzbGFiIGFuZCBpdHMgb2JqZWN0cworICogQGNhY2hlcDogY2FjaGUgcG9pbnRlciBiZWluZyBkZXN0cm95ZWQKKyAqIEBzbGFicDogc2xhYiBwb2ludGVyIGJlaW5nIGRlc3Ryb3llZAorICoKKyAqIENhbGwgdGhlIHJlZ2lzdGVyZWQgZGVzdHJ1Y3RvciBmb3IgZWFjaCBvYmplY3QgaW4gYSBzbGFiIHRoYXQgaXMgYmVpbmcKKyAqIGRlc3Ryb3llZC4KICAqLwogc3RhdGljIHZvaWQgc2xhYl9kZXN0cm95X29ianMoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IHNsYWIgKnNsYWJwKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBjYWNoZXAtPm51bTsgaSsrKSB7Ci0JCXZvaWQgKm9ianAgPSBzbGFicC0+c19tZW0gKyBjYWNoZXAtPmJ1ZmZlcl9zaXplICogaTsKKwkJdm9pZCAqb2JqcCA9IGluZGV4X3RvX29iaihjYWNoZXAsIHNsYWJwLCBpKTsKIAogCQlpZiAoY2FjaGVwLT5mbGFncyAmIFNMQUJfUE9JU09OKSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCQkJaWYgKChjYWNoZXAtPmJ1ZmZlcl9zaXplICUgUEFHRV9TSVpFKSA9PSAwCi0JCQkgICAgJiYgT0ZGX1NMQUIoY2FjaGVwKSkKKwkJCWlmIChjYWNoZXAtPmJ1ZmZlcl9zaXplICUgUEFHRV9TSVpFID09IDAgJiYKKwkJCQkJT0ZGX1NMQUIoY2FjaGVwKSkKIAkJCQlrZXJuZWxfbWFwX3BhZ2VzKHZpcnRfdG9fcGFnZShvYmpwKSwKLQkJCQkJCSBjYWNoZXAtPmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFLAotCQkJCQkJIDEpOworCQkJCQljYWNoZXAtPmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFLCAxKTsKIAkJCWVsc2UKIAkJCQljaGVja19wb2lzb25fb2JqKGNhY2hlcCwgb2JqcCk7CiAjZWxzZQpAQCAtMTU2Niw3ICsxNjk1LDcgQEAKIAlpZiAoY2FjaGVwLT5kdG9yKSB7CiAJCWludCBpOwogCQlmb3IgKGkgPSAwOyBpIDwgY2FjaGVwLT5udW07IGkrKykgewotCQkJdm9pZCAqb2JqcCA9IHNsYWJwLT5zX21lbSArIGNhY2hlcC0+YnVmZmVyX3NpemUgKiBpOworCQkJdm9pZCAqb2JqcCA9IGluZGV4X3RvX29iaihjYWNoZXAsIHNsYWJwLCBpKTsKIAkJCShjYWNoZXAtPmR0b3IpIChvYmpwLCBjYWNoZXAsIDApOwogCQl9CiAJfQpAQCAtMTU3NCw5ICsxNzAzLDEzIEBACiAjZW5kaWYKIAogLyoqCisgKiBzbGFiX2Rlc3Ryb3kgLSBkZXN0cm95IGFuZCByZWxlYXNlIGFsbCBvYmplY3RzIGluIGEgc2xhYgorICogQGNhY2hlcDogY2FjaGUgcG9pbnRlciBiZWluZyBkZXN0cm95ZWQKKyAqIEBzbGFicDogc2xhYiBwb2ludGVyIGJlaW5nIGRlc3Ryb3llZAorICoKICAqIERlc3Ryb3kgYWxsIHRoZSBvYmpzIGluIGEgc2xhYiwgYW5kIHJlbGVhc2UgdGhlIG1lbSBiYWNrIHRvIHRoZSBzeXN0ZW0uCi0gKiBCZWZvcmUgY2FsbGluZyB0aGUgc2xhYiBtdXN0IGhhdmUgYmVlbiB1bmxpbmtlZCBmcm9tIHRoZSBjYWNoZS4KLSAqIFRoZSBjYWNoZS1sb2NrIGlzIG5vdCBoZWxkL25lZWRlZC4KKyAqIEJlZm9yZSBjYWxsaW5nIHRoZSBzbGFiIG11c3QgaGF2ZSBiZWVuIHVubGlua2VkIGZyb20gdGhlIGNhY2hlLiAgVGhlCisgKiBjYWNoZS1sb2NrIGlzIG5vdCBoZWxkL25lZWRlZC4KICAqLwogc3RhdGljIHZvaWQgc2xhYl9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBzbGFiICpzbGFicCkKIHsKQEAgLTE1OTcsOCArMTczMCwxMCBAQAogCX0KIH0KIAotLyogRm9yIHNldHRpbmcgdXAgYWxsIHRoZSBrbWVtX2xpc3QzcyBmb3IgY2FjaGUgd2hvc2UgYnVmZmVyX3NpemUgaXMgc2FtZQotICAgYXMgc2l6ZSBvZiBrbWVtX2xpc3QzLiAqLworLyoKKyAqIEZvciBzZXR0aW5nIHVwIGFsbCB0aGUga21lbV9saXN0M3MgZm9yIGNhY2hlIHdob3NlIGJ1ZmZlcl9zaXplIGlzIHNhbWUgYXMKKyAqIHNpemUgb2Yga21lbV9saXN0My4KKyAqLwogc3RhdGljIHZvaWQgc2V0X3VwX2xpc3QzcyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBpbnQgaW5kZXgpCiB7CiAJaW50IG5vZGU7CkBAIC0xNjI0LDQ1ICsxNzU5LDEwNyBAQAogICogaGlnaCBvcmRlciBwYWdlcyBmb3Igc2xhYnMuICBXaGVuIHRoZSBnZnAoKSBmdW5jdGlvbnMgYXJlIG1vcmUgZnJpZW5kbHkKICAqIHRvd2FyZHMgaGlnaC1vcmRlciByZXF1ZXN0cywgdGhpcyBzaG91bGQgYmUgY2hhbmdlZC4KICAqLwotc3RhdGljIGlubGluZSBzaXplX3QgY2FsY3VsYXRlX3NsYWJfb3JkZXIoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKK3N0YXRpYyBzaXplX3QgY2FsY3VsYXRlX3NsYWJfb3JkZXIoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKIAkJCXNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc2l6ZV90IGxlZnRfb3ZlciA9IDA7CisJaW50IGdmcG9yZGVyOwogCi0JZm9yICg7OyBjYWNoZXAtPmdmcG9yZGVyKyspIHsKKwlmb3IgKGdmcG9yZGVyID0gMDsgZ2Zwb3JkZXIgPD0gTUFYX0dGUF9PUkRFUjsgZ2Zwb3JkZXIrKykgewogCQl1bnNpZ25lZCBpbnQgbnVtOwogCQlzaXplX3QgcmVtYWluZGVyOwogCi0JCWlmIChjYWNoZXAtPmdmcG9yZGVyID4gTUFYX0dGUF9PUkRFUikgewotCQkJY2FjaGVwLT5udW0gPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljYWNoZV9lc3RpbWF0ZShjYWNoZXAtPmdmcG9yZGVyLCBzaXplLCBhbGlnbiwgZmxhZ3MsCi0JCQkgICAgICAgJnJlbWFpbmRlciwgJm51bSk7CisJCWNhY2hlX2VzdGltYXRlKGdmcG9yZGVyLCBzaXplLCBhbGlnbiwgZmxhZ3MsICZyZW1haW5kZXIsICZudW0pOwogCQlpZiAoIW51bSkKIAkJCWNvbnRpbnVlOworCiAJCS8qIE1vcmUgdGhhbiBvZmZzbGFiX2xpbWl0IG9iamVjdHMgd2lsbCBjYXVzZSBwcm9ibGVtcyAqLwotCQlpZiAoZmxhZ3MgJiBDRkxHU19PRkZfU0xBQiAmJiBjYWNoZXAtPm51bSA+IG9mZnNsYWJfbGltaXQpCisJCWlmICgoZmxhZ3MgJiBDRkxHU19PRkZfU0xBQikgJiYgbnVtID4gb2Zmc2xhYl9saW1pdCkKIAkJCWJyZWFrOwogCisJCS8qIEZvdW5kIHNvbWV0aGluZyBhY2NlcHRhYmxlIC0gc2F2ZSBpdCBhd2F5ICovCiAJCWNhY2hlcC0+bnVtID0gbnVtOworCQljYWNoZXAtPmdmcG9yZGVyID0gZ2Zwb3JkZXI7CiAJCWxlZnRfb3ZlciA9IHJlbWFpbmRlcjsKIAogCQkvKgorCQkgKiBBIFZGUy1yZWNsYWltYWJsZSBzbGFiIHRlbmRzIHRvIGhhdmUgbW9zdCBhbGxvY2F0aW9ucworCQkgKiBhcyBHRlBfTk9GUyBhbmQgd2UgcmVhbGx5IGRvbid0IHdhbnQgdG8gaGF2ZSB0byBiZSBhbGxvY2F0aW5nCisJCSAqIGhpZ2hlci1vcmRlciBwYWdlcyB3aGVuIHdlIGFyZSB1bmFibGUgdG8gc2hyaW5rIGRjYWNoZS4KKwkJICovCisJCWlmIChmbGFncyAmIFNMQUJfUkVDTEFJTV9BQ0NPVU5UKQorCQkJYnJlYWs7CisKKwkJLyoKIAkJICogTGFyZ2UgbnVtYmVyIG9mIG9iamVjdHMgaXMgZ29vZCwgYnV0IHZlcnkgbGFyZ2Ugc2xhYnMgYXJlCiAJCSAqIGN1cnJlbnRseSBiYWQgZm9yIHRoZSBnZnAoKXMuCiAJCSAqLwotCQlpZiAoY2FjaGVwLT5nZnBvcmRlciA+PSBzbGFiX2JyZWFrX2dmcF9vcmRlcikKKwkJaWYgKGdmcG9yZGVyID49IHNsYWJfYnJlYWtfZ2ZwX29yZGVyKQogCQkJYnJlYWs7CiAKLQkJaWYgKChsZWZ0X292ZXIgKiA4KSA8PSAoUEFHRV9TSVpFIDw8IGNhY2hlcC0+Z2Zwb3JkZXIpKQotCQkJLyogQWNjZXB0YWJsZSBpbnRlcm5hbCBmcmFnbWVudGF0aW9uICovCisJCS8qCisJCSAqIEFjY2VwdGFibGUgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbj8KKwkJICovCisJCWlmIChsZWZ0X292ZXIgKiA4IDw9IChQQUdFX1NJWkUgPDwgZ2Zwb3JkZXIpKQogCQkJYnJlYWs7CiAJfQogCXJldHVybiBsZWZ0X292ZXI7CiB9CiAKK3N0YXRpYyB2b2lkIHNldHVwX2NwdV9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQoreworCWlmIChnX2NwdWNhY2hlX3VwID09IEZVTEwpIHsKKwkJZW5hYmxlX2NwdWNhY2hlKGNhY2hlcCk7CisJCXJldHVybjsKKwl9CisJaWYgKGdfY3B1Y2FjaGVfdXAgPT0gTk9ORSkgeworCQkvKgorCQkgKiBOb3RlOiB0aGUgZmlyc3Qga21lbV9jYWNoZV9jcmVhdGUgbXVzdCBjcmVhdGUgdGhlIGNhY2hlCisJCSAqIHRoYXQncyB1c2VkIGJ5IGttYWxsb2MoMjQpLCBvdGhlcndpc2UgdGhlIGNyZWF0aW9uIG9mCisJCSAqIGZ1cnRoZXIgY2FjaGVzIHdpbGwgQlVHKCkuCisJCSAqLworCQljYWNoZXAtPmFycmF5W3NtcF9wcm9jZXNzb3JfaWQoKV0gPSAmaW5pdGFycmF5X2dlbmVyaWMuY2FjaGU7CisKKwkJLyoKKwkJICogSWYgdGhlIGNhY2hlIHRoYXQncyB1c2VkIGJ5IGttYWxsb2Moc2l6ZW9mKGttZW1fbGlzdDMpKSBpcworCQkgKiB0aGUgZmlyc3QgY2FjaGUsIHRoZW4gd2UgbmVlZCB0byBzZXQgdXAgYWxsIGl0cyBsaXN0M3MsCisJCSAqIG90aGVyd2lzZSB0aGUgY3JlYXRpb24gb2YgZnVydGhlciBjYWNoZXMgd2lsbCBCVUcoKS4KKwkJICovCisJCXNldF91cF9saXN0M3MoY2FjaGVwLCBTSVpFX0FDKTsKKwkJaWYgKElOREVYX0FDID09IElOREVYX0wzKQorCQkJZ19jcHVjYWNoZV91cCA9IFBBUlRJQUxfTDM7CisJCWVsc2UKKwkJCWdfY3B1Y2FjaGVfdXAgPSBQQVJUSUFMX0FDOworCX0gZWxzZSB7CisJCWNhY2hlcC0+YXJyYXlbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXJyYXljYWNoZV9pbml0KSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKGdfY3B1Y2FjaGVfdXAgPT0gUEFSVElBTF9BQykgeworCQkJc2V0X3VwX2xpc3QzcyhjYWNoZXAsIFNJWkVfTDMpOworCQkJZ19jcHVjYWNoZV91cCA9IFBBUlRJQUxfTDM7CisJCX0gZWxzZSB7CisJCQlpbnQgbm9kZTsKKwkJCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJCQljYWNoZXAtPm5vZGVsaXN0c1tub2RlXSA9CisJCQkJICAgIGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGttZW1fbGlzdDMpLAorCQkJCQkJR0ZQX0tFUk5FTCwgbm9kZSk7CisJCQkJQlVHX09OKCFjYWNoZXAtPm5vZGVsaXN0c1tub2RlXSk7CisJCQkJa21lbV9saXN0M19pbml0KGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdKTsKKwkJCX0KKwkJfQorCX0KKwljYWNoZXAtPm5vZGVsaXN0c1tudW1hX25vZGVfaWQoKV0tPm5leHRfcmVhcCA9CisJCQlqaWZmaWVzICsgUkVBUFRJTUVPVVRfTElTVDMgKworCQkJKCh1bnNpZ25lZCBsb25nKWNhY2hlcCkgJSBSRUFQVElNRU9VVF9MSVNUMzsKKworCWNwdV9jYWNoZV9nZXQoY2FjaGVwKS0+YXZhaWwgPSAwOworCWNwdV9jYWNoZV9nZXQoY2FjaGVwKS0+bGltaXQgPSBCT09UX0NQVUNBQ0hFX0VOVFJJRVM7CisJY3B1X2NhY2hlX2dldChjYWNoZXApLT5iYXRjaGNvdW50ID0gMTsKKwljcHVfY2FjaGVfZ2V0KGNhY2hlcCktPnRvdWNoZWQgPSAwOworCWNhY2hlcC0+YmF0Y2hjb3VudCA9IDE7CisJY2FjaGVwLT5saW1pdCA9IEJPT1RfQ1BVQ0FDSEVfRU5UUklFUzsKK30KKwogLyoqCiAgKiBrbWVtX2NhY2hlX2NyZWF0ZSAtIENyZWF0ZSBhIGNhY2hlLgogICogQG5hbWU6IEEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgaW4gL3Byb2Mvc2xhYmluZm8gdG8gaWRlbnRpZnkgdGhpcyBjYWNoZS4KQEAgLTE2NzgsOSArMTg3NSw4IEBACiAgKiBhbmQgdGhlIEBkdG9yIGlzIHJ1biBiZWZvcmUgdGhlIHBhZ2VzIGFyZSBoYW5kZWQgYmFjay4KICAqCiAgKiBAbmFtZSBtdXN0IGJlIHZhbGlkIHVudGlsIHRoZSBjYWNoZSBpcyBkZXN0cm95ZWQuIFRoaXMgaW1wbGllcyB0aGF0Ci0gKiB0aGUgbW9kdWxlIGNhbGxpbmcgdGhpcyBoYXMgdG8gZGVzdHJveSB0aGUgY2FjaGUgYmVmb3JlIGdldHRpbmcgCi0gKiB1bmxvYWRlZC4KLSAqIAorICogdGhlIG1vZHVsZSBjYWxsaW5nIHRoaXMgaGFzIHRvIGRlc3Ryb3kgdGhlIGNhY2hlIGJlZm9yZSBnZXR0aW5nIHVubG9hZGVkLgorICoKICAqIFRoZSBmbGFncyBhcmUKICAqCiAgKiAlU0xBQl9QT0lTT04gLSBQb2lzb24gdGhlIHNsYWIgd2l0aCBhIGtub3duIHRlc3QgcGF0dGVybiAoYTVhNWE1YTUpCkBAIC0xNjg5LDE2ICsxODg1LDE0IEBACiAgKiAlU0xBQl9SRURfWk9ORSAtIEluc2VydCBgUmVkJyB6b25lcyBhcm91bmQgdGhlIGFsbG9jYXRlZCBtZW1vcnkgdG8gY2hlY2sKICAqIGZvciBidWZmZXIgb3ZlcnJ1bnMuCiAgKgotICogJVNMQUJfTk9fUkVBUCAtIERvbid0IGF1dG9tYXRpY2FsbHkgcmVhcCB0aGlzIGNhY2hlIHdoZW4gd2UncmUgdW5kZXIKLSAqIG1lbW9yeSBwcmVzc3VyZS4KLSAqCiAgKiAlU0xBQl9IV0NBQ0hFX0FMSUdOIC0gQWxpZ24gdGhlIG9iamVjdHMgaW4gdGhpcyBjYWNoZSB0byBhIGhhcmR3YXJlCiAgKiBjYWNoZWxpbmUuICBUaGlzIGNhbiBiZSBiZW5lZmljaWFsIGlmIHlvdSdyZSBjb3VudGluZyBjeWNsZXMgYXMgY2xvc2VseQogICogYXMgZGF2ZW0uCiAgKi8KIHN0cnVjdCBrbWVtX2NhY2hlICoKIGttZW1fY2FjaGVfY3JlYXRlIChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLAotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKCpjdG9yKSh2b2lkKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZyksCisJdW5zaWduZWQgbG9uZyBmbGFncywKKwl2b2lkICgqY3Rvcikodm9pZCosIHN0cnVjdCBrbWVtX2NhY2hlICosIHVuc2lnbmVkIGxvbmcpLAogCXZvaWQgKCpkdG9yKSh2b2lkKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZykpCiB7CiAJc2l6ZV90IGxlZnRfb3Zlciwgc2xhYl9zaXplLCByYWxpZ247CkBAIC0xNzA4LDEyICsxOTAyLDEwIEBACiAJLyoKIAkgKiBTYW5pdHkgY2hlY2tzLi4uIHRoZXNlIGFyZSBhbGwgc2VyaW91cyB1c2FnZSBidWdzLgogCSAqLwotCWlmICgoIW5hbWUpIHx8Ci0JICAgIGluX2ludGVycnVwdCgpIHx8Ci0JICAgIChzaXplIDwgQllURVNfUEVSX1dPUkQpIHx8CisJaWYgKCFuYW1lIHx8IGluX2ludGVycnVwdCgpIHx8IChzaXplIDwgQllURVNfUEVSX1dPUkQpIHx8CiAJICAgIChzaXplID4gKDEgPDwgTUFYX09CSl9PUkRFUikgKiBQQUdFX1NJWkUpIHx8IChkdG9yICYmICFjdG9yKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFYXJseSBlcnJvciBpbiBzbGFiICVzXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBuYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRWFybHkgZXJyb3IgaW4gc2xhYiAlc1xuIiwgX19GVU5DVElPTl9fLAorCQkJCW5hbWUpOwogCQlCVUcoKTsKIAl9CiAKQEAgLTE3NjcsOCArMTk1OSw3IEBACiAJICogYWJvdmUgdGhlIG5leHQgcG93ZXIgb2YgdHdvOiBjYWNoZXMgd2l0aCBvYmplY3Qgc2l6ZXMganVzdCBhYm92ZSBhCiAJICogcG93ZXIgb2YgdHdvIGhhdmUgYSBzaWduaWZpY2FudCBhbW91bnQgb2YgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbi4KIAkgKi8KLQlpZiAoKHNpemUgPCA0MDk2Ci0JICAgICB8fCBmbHMoc2l6ZSAtIDEpID09IGZscyhzaXplIC0gMSArIDMgKiBCWVRFU19QRVJfV09SRCkpKQorCWlmIChzaXplIDwgNDA5NiB8fCBmbHMoc2l6ZSAtIDEpID09IGZscyhzaXplLTEgKyAzICogQllURVNfUEVSX1dPUkQpKQogCQlmbGFncyB8PSBTTEFCX1JFRF9aT05FIHwgU0xBQl9TVE9SRV9VU0VSOwogCWlmICghKGZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkpCiAJCWZsYWdzIHw9IFNMQUJfUE9JU09OOwpAQCAtMTc4MCwxMyArMTk3MSwxNCBAQAogCQlCVUdfT04oZHRvcik7CiAKIAkvKgotCSAqIEFsd2F5cyBjaGVja3MgZmxhZ3MsIGEgY2FsbGVyIG1pZ2h0IGJlIGV4cGVjdGluZyBkZWJ1ZwotCSAqIHN1cHBvcnQgd2hpY2ggaXNuJ3QgYXZhaWxhYmxlLgorCSAqIEFsd2F5cyBjaGVja3MgZmxhZ3MsIGEgY2FsbGVyIG1pZ2h0IGJlIGV4cGVjdGluZyBkZWJ1ZyBzdXBwb3J0IHdoaWNoCisJICogaXNuJ3QgYXZhaWxhYmxlLgogCSAqLwogCWlmIChmbGFncyAmIH5DUkVBVEVfTUFTSykKIAkJQlVHKCk7CiAKLQkvKiBDaGVjayB0aGF0IHNpemUgaXMgaW4gdGVybXMgb2Ygd29yZHMuICBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZAorCS8qCisJICogQ2hlY2sgdGhhdCBzaXplIGlzIGluIHRlcm1zIG9mIHdvcmRzLiAgVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQKIAkgKiB1bmFsaWduZWQgYWNjZXNzZXMgZm9yIHNvbWUgYXJjaHMgd2hlbiByZWR6b25pbmcgaXMgdXNlZCwgYW5kIG1ha2VzCiAJICogc3VyZSBhbnkgb24tc2xhYiBidWZjdGwncyBhcmUgYWxzbyBjb3JyZWN0bHkgYWxpZ25lZC4KIAkgKi8KQEAgLTE3OTUsMTIgKzE5ODcsMTQgQEAKIAkJc2l6ZSAmPSB+KEJZVEVTX1BFUl9XT1JEIC0gMSk7CiAJfQogCi0JLyogY2FsY3VsYXRlIG91dCB0aGUgZmluYWwgYnVmZmVyIGFsaWdubWVudDogKi8KKwkvKiBjYWxjdWxhdGUgdGhlIGZpbmFsIGJ1ZmZlciBhbGlnbm1lbnQ6ICovCisKIAkvKiAxKSBhcmNoIHJlY29tbWVuZGF0aW9uOiBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgZGVidWcgKi8KIAlpZiAoZmxhZ3MgJiBTTEFCX0hXQ0FDSEVfQUxJR04pIHsKLQkJLyogRGVmYXVsdCBhbGlnbm1lbnQ6IGFzIHNwZWNpZmllZCBieSB0aGUgYXJjaCBjb2RlLgotCQkgKiBFeGNlcHQgaWYgYW4gb2JqZWN0IGlzIHJlYWxseSBzbWFsbCwgdGhlbiBzcXVlZXplIG11bHRpcGxlCi0JCSAqIG9iamVjdHMgaW50byBvbmUgY2FjaGVsaW5lLgorCQkvKgorCQkgKiBEZWZhdWx0IGFsaWdubWVudDogYXMgc3BlY2lmaWVkIGJ5IHRoZSBhcmNoIGNvZGUuICBFeGNlcHQgaWYKKwkJICogYW4gb2JqZWN0IGlzIHJlYWxseSBzbWFsbCwgdGhlbiBzcXVlZXplIG11bHRpcGxlIG9iamVjdHMgaW50bworCQkgKiBvbmUgY2FjaGVsaW5lLgogCQkgKi8KIAkJcmFsaWduID0gY2FjaGVfbGluZV9zaXplKCk7CiAJCXdoaWxlIChzaXplIDw9IHJhbGlnbiAvIDIpCkBAIC0xODIwLDE2ICsyMDE0LDE2IEBACiAJCWlmIChyYWxpZ24gPiBCWVRFU19QRVJfV09SRCkKIAkJCWZsYWdzICY9IH4oU0xBQl9SRURfWk9ORSB8IFNMQUJfU1RPUkVfVVNFUik7CiAJfQotCS8qIDQpIFN0b3JlIGl0LiBOb3RlIHRoYXQgdGhlIGRlYnVnIGNvZGUgYmVsb3cgY2FuIHJlZHVjZQorCS8qCisJICogNCkgU3RvcmUgaXQuIE5vdGUgdGhhdCB0aGUgZGVidWcgY29kZSBiZWxvdyBjYW4gcmVkdWNlCiAJICogICAgdGhlIGFsaWdubWVudCB0byBCWVRFU19QRVJfV09SRC4KIAkgKi8KIAlhbGlnbiA9IHJhbGlnbjsKIAogCS8qIEdldCBjYWNoZSdzIGRlc2NyaXB0aW9uIG9iai4gKi8KLQljYWNoZXAgPSBrbWVtX2NhY2hlX2FsbG9jKCZjYWNoZV9jYWNoZSwgU0xBQl9LRVJORUwpOworCWNhY2hlcCA9IGttZW1fY2FjaGVfemFsbG9jKCZjYWNoZV9jYWNoZSwgU0xBQl9LRVJORUwpOwogCWlmICghY2FjaGVwKQogCQlnb3RvIG9vcHM7Ci0JbWVtc2V0KGNhY2hlcCwgMCwgc2l6ZW9mKHN0cnVjdCBrbWVtX2NhY2hlKSk7CiAKICNpZiBERUJVRwogCWNhY2hlcC0+b2JqX3NpemUgPSBzaXplOwpAQCAtMTg2OSwxNyArMjA2Myw3IEBACiAKIAlzaXplID0gQUxJR04oc2l6ZSwgYWxpZ24pOwogCi0JaWYgKChmbGFncyAmIFNMQUJfUkVDTEFJTV9BQ0NPVU5UKSAmJiBzaXplIDw9IFBBR0VfU0laRSkgewotCQkvKgotCQkgKiBBIFZGUy1yZWNsYWltYWJsZSBzbGFiIHRlbmRzIHRvIGhhdmUgbW9zdCBhbGxvY2F0aW9ucwotCQkgKiBhcyBHRlBfTk9GUyBhbmQgd2UgcmVhbGx5IGRvbid0IHdhbnQgdG8gaGF2ZSB0byBiZSBhbGxvY2F0aW5nCi0JCSAqIGhpZ2hlci1vcmRlciBwYWdlcyB3aGVuIHdlIGFyZSB1bmFibGUgdG8gc2hyaW5rIGRjYWNoZS4KLQkJICovCi0JCWNhY2hlcC0+Z2Zwb3JkZXIgPSAwOwotCQljYWNoZV9lc3RpbWF0ZShjYWNoZXAtPmdmcG9yZGVyLCBzaXplLCBhbGlnbiwgZmxhZ3MsCi0JCQkgICAgICAgJmxlZnRfb3ZlciwgJmNhY2hlcC0+bnVtKTsKLQl9IGVsc2UKLQkJbGVmdF9vdmVyID0gY2FsY3VsYXRlX3NsYWJfb3JkZXIoY2FjaGVwLCBzaXplLCBhbGlnbiwgZmxhZ3MpOworCWxlZnRfb3ZlciA9IGNhbGN1bGF0ZV9zbGFiX29yZGVyKGNhY2hlcCwgc2l6ZSwgYWxpZ24sIGZsYWdzKTsKIAogCWlmICghY2FjaGVwLT5udW0pIHsKIAkJcHJpbnRrKCJrbWVtX2NhY2hlX2NyZWF0ZTogY291bGRuJ3QgY3JlYXRlIGNhY2hlICVzLlxuIiwgbmFtZSk7CkBAIC0xOTE1LDcgKzIwOTksNiBAQAogCWNhY2hlcC0+Z2ZwZmxhZ3MgPSAwOwogCWlmIChmbGFncyAmIFNMQUJfQ0FDSEVfRE1BKQogCQljYWNoZXAtPmdmcGZsYWdzIHw9IEdGUF9ETUE7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNhY2hlcC0+c3BpbmxvY2spOwogCWNhY2hlcC0+YnVmZmVyX3NpemUgPSBzaXplOwogCiAJaWYgKGZsYWdzICYgQ0ZMR1NfT0ZGX1NMQUIpCkBAIC0xOTI1LDY0ICsyMTA4LDExIEBACiAJY2FjaGVwLT5uYW1lID0gbmFtZTsKIAogCi0JaWYgKGdfY3B1Y2FjaGVfdXAgPT0gRlVMTCkgewotCQllbmFibGVfY3B1Y2FjaGUoY2FjaGVwKTsKLQl9IGVsc2UgewotCQlpZiAoZ19jcHVjYWNoZV91cCA9PSBOT05FKSB7Ci0JCQkvKiBOb3RlOiB0aGUgZmlyc3Qga21lbV9jYWNoZV9jcmVhdGUgbXVzdCBjcmVhdGUKLQkJCSAqIHRoZSBjYWNoZSB0aGF0J3MgdXNlZCBieSBrbWFsbG9jKDI0KSwgb3RoZXJ3aXNlCi0JCQkgKiB0aGUgY3JlYXRpb24gb2YgZnVydGhlciBjYWNoZXMgd2lsbCBCVUcoKS4KLQkJCSAqLwotCQkJY2FjaGVwLT5hcnJheVtzbXBfcHJvY2Vzc29yX2lkKCldID0KLQkJCSAgICAmaW5pdGFycmF5X2dlbmVyaWMuY2FjaGU7Ci0KLQkJCS8qIElmIHRoZSBjYWNoZSB0aGF0J3MgdXNlZCBieQotCQkJICoga21hbGxvYyhzaXplb2Yoa21lbV9saXN0MykpIGlzIHRoZSBmaXJzdCBjYWNoZSwKLQkJCSAqIHRoZW4gd2UgbmVlZCB0byBzZXQgdXAgYWxsIGl0cyBsaXN0M3MsIG90aGVyd2lzZQotCQkJICogdGhlIGNyZWF0aW9uIG9mIGZ1cnRoZXIgY2FjaGVzIHdpbGwgQlVHKCkuCi0JCQkgKi8KLQkJCXNldF91cF9saXN0M3MoY2FjaGVwLCBTSVpFX0FDKTsKLQkJCWlmIChJTkRFWF9BQyA9PSBJTkRFWF9MMykKLQkJCQlnX2NwdWNhY2hlX3VwID0gUEFSVElBTF9MMzsKLQkJCWVsc2UKLQkJCQlnX2NwdWNhY2hlX3VwID0gUEFSVElBTF9BQzsKLQkJfSBlbHNlIHsKLQkJCWNhY2hlcC0+YXJyYXlbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9Ci0JCQkgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IGFycmF5Y2FjaGVfaW5pdCksIEdGUF9LRVJORUwpOwotCi0JCQlpZiAoZ19jcHVjYWNoZV91cCA9PSBQQVJUSUFMX0FDKSB7Ci0JCQkJc2V0X3VwX2xpc3QzcyhjYWNoZXAsIFNJWkVfTDMpOwotCQkJCWdfY3B1Y2FjaGVfdXAgPSBQQVJUSUFMX0wzOwotCQkJfSBlbHNlIHsKLQkJCQlpbnQgbm9kZTsKLQkJCQlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7Ci0KLQkJCQkJY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0gPQotCQkJCQkgICAga21hbGxvY19ub2RlKHNpemVvZgotCQkJCQkJCSAoc3RydWN0IGttZW1fbGlzdDMpLAotCQkJCQkJCSBHRlBfS0VSTkVMLCBub2RlKTsKLQkJCQkJQlVHX09OKCFjYWNoZXAtPm5vZGVsaXN0c1tub2RlXSk7Ci0JCQkJCWttZW1fbGlzdDNfaW5pdChjYWNoZXAtPgotCQkJCQkJCW5vZGVsaXN0c1tub2RlXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhY2hlcC0+bm9kZWxpc3RzW251bWFfbm9kZV9pZCgpXS0+bmV4dF9yZWFwID0KLQkJICAgIGppZmZpZXMgKyBSRUFQVElNRU9VVF9MSVNUMyArCi0JCSAgICAoKHVuc2lnbmVkIGxvbmcpY2FjaGVwKSAlIFJFQVBUSU1FT1VUX0xJU1QzOwotCi0JCUJVR19PTighY3B1X2NhY2hlX2dldChjYWNoZXApKTsKLQkJY3B1X2NhY2hlX2dldChjYWNoZXApLT5hdmFpbCA9IDA7Ci0JCWNwdV9jYWNoZV9nZXQoY2FjaGVwKS0+bGltaXQgPSBCT09UX0NQVUNBQ0hFX0VOVFJJRVM7Ci0JCWNwdV9jYWNoZV9nZXQoY2FjaGVwKS0+YmF0Y2hjb3VudCA9IDE7Ci0JCWNwdV9jYWNoZV9nZXQoY2FjaGVwKS0+dG91Y2hlZCA9IDA7Ci0JCWNhY2hlcC0+YmF0Y2hjb3VudCA9IDE7Ci0JCWNhY2hlcC0+bGltaXQgPSBCT09UX0NQVUNBQ0hFX0VOVFJJRVM7Ci0JfQorCXNldHVwX2NwdV9jYWNoZShjYWNoZXApOwogCiAJLyogY2FjaGUgc2V0dXAgY29tcGxldGVkLCBsaW5rIGl0IGludG8gdGhlIGxpc3QgKi8KIAlsaXN0X2FkZCgmY2FjaGVwLT5uZXh0LCAmY2FjaGVfY2hhaW4pOwotICAgICAgb29wczoKK29vcHM6CiAJaWYgKCFjYWNoZXAgJiYgKGZsYWdzICYgU0xBQl9QQU5JQykpCiAJCXBhbmljKCJrbWVtX2NhY2hlX2NyZWF0ZSgpOiBmYWlsZWQgdG8gY3JlYXRlIHNsYWIgYCVzJ1xuIiwKIAkJICAgICAgbmFtZSk7CkBAIC0yMDI2LDMwICsyMTU2LDEzIEBACiAjZGVmaW5lIGNoZWNrX3NwaW5sb2NrX2FjcXVpcmVkX25vZGUoeCwgeSkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAotLyoKLSAqIFdhaXRzIGZvciBhbGwgQ1BVcyB0byBleGVjdXRlIGZ1bmMoKS4KLSAqLwotc3RhdGljIHZvaWQgc21wX2NhbGxfZnVuY3Rpb25fYWxsX2NwdXModm9pZCAoKmZ1bmMpKHZvaWQgKmFyZyksIHZvaWQgKmFyZykKLXsKLQljaGVja19pcnFfb24oKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JZnVuYyhhcmcpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQotCWlmIChzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBhcmcsIDEsIDEpKQotCQlCVUcoKTsKLQotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYWluX2FycmF5X2xvY2tlZChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjLAotCQkJCWludCBmb3JjZSwgaW50IG5vZGUpOworc3RhdGljIHZvaWQgZHJhaW5fYXJyYXkoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IGttZW1fbGlzdDMgKmwzLAorCQkJc3RydWN0IGFycmF5X2NhY2hlICphYywKKwkJCWludCBmb3JjZSwgaW50IG5vZGUpOwogCiBzdGF0aWMgdm9pZCBkb19kcmFpbih2b2lkICphcmcpCiB7Ci0Jc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IChzdHJ1Y3Qga21lbV9jYWNoZSAqKSBhcmc7CisJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGFyZzsKIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjOwogCWludCBub2RlID0gbnVtYV9ub2RlX2lkKCk7CiAKQEAgLTIwNjYsMTQgKzIxNzksMTIgQEAKIAlzdHJ1Y3Qga21lbV9saXN0MyAqbDM7CiAJaW50IG5vZGU7CiAKLQlzbXBfY2FsbF9mdW5jdGlvbl9hbGxfY3B1cyhkb19kcmFpbiwgY2FjaGVwKTsKKwlvbl9lYWNoX2NwdShkb19kcmFpbiwgY2FjaGVwLCAxLCAxKTsKIAljaGVja19pcnFfb24oKTsKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CiAJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07CiAJCWlmIChsMykgewotCQkJc3Bpbl9sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7Ci0JCQlkcmFpbl9hcnJheV9sb2NrZWQoY2FjaGVwLCBsMy0+c2hhcmVkLCAxLCBub2RlKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7CisJCQlkcmFpbl9hcnJheShjYWNoZXAsIGwzLCBsMy0+c2hhcmVkLCAxLCBub2RlKTsKIAkJCWlmIChsMy0+YWxpZW4pCiAJCQkJZHJhaW5fYWxpZW5fY2FjaGUoY2FjaGVwLCBsMy0+YWxpZW4pOwogCQl9CkBAIC0yMTk3LDE2ICsyMzA4LDE1IEBACiAKIAkvKiBOVU1BOiBmcmVlIHRoZSBsaXN0MyBzdHJ1Y3R1cmVzICovCiAJZm9yX2VhY2hfb25saW5lX25vZGUoaSkgewotCQlpZiAoKGwzID0gY2FjaGVwLT5ub2RlbGlzdHNbaV0pKSB7CisJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbaV07CisJCWlmIChsMykgewogCQkJa2ZyZWUobDMtPnNoYXJlZCk7CiAJCQlmcmVlX2FsaWVuX2NhY2hlKGwzLT5hbGllbik7CiAJCQlrZnJlZShsMyk7CiAJCX0KIAl9CiAJa21lbV9jYWNoZV9mcmVlKCZjYWNoZV9jYWNoZSwgY2FjaGVwKTsKLQogCXVubG9ja19jcHVfaG90cGx1ZygpOwotCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZGVzdHJveSk7CkBAIC0yMjI5LDcgKzIzMzksNiBAQAogCXNsYWJwLT5pbnVzZSA9IDA7CiAJc2xhYnAtPmNvbG91cm9mZiA9IGNvbG91cl9vZmY7CiAJc2xhYnAtPnNfbWVtID0gb2JqcCArIGNvbG91cl9vZmY7Ci0KIAlyZXR1cm4gc2xhYnA7CiB9CiAKQEAgLTIyNDQsNyArMjM1Myw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2FjaGVwLT5udW07IGkrKykgewotCQl2b2lkICpvYmpwID0gc2xhYnAtPnNfbWVtICsgY2FjaGVwLT5idWZmZXJfc2l6ZSAqIGk7CisJCXZvaWQgKm9ianAgPSBpbmRleF90b19vYmooY2FjaGVwLCBzbGFicCwgaSk7CiAjaWYgREVCVUcKIAkJLyogbmVlZCB0byBwb2lzb24gdGhlIG9ianM/ICovCiAJCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9QT0lTT04pCkBAIC0yMjU3LDkgKzIzNjYsOSBAQAogCQkJKmRiZ19yZWR6b25lMihjYWNoZXAsIG9ianApID0gUkVEX0lOQUNUSVZFOwogCQl9CiAJCS8qCi0JCSAqIENvbnN0cnVjdG9ycyBhcmUgbm90IGFsbG93ZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20KLQkJICogdGhlIHNhbWUgY2FjaGUgd2hpY2ggdGhleSBhcmUgYSBjb25zdHJ1Y3RvciBmb3IuCi0JCSAqIE90aGVyd2lzZSwgZGVhZGxvY2suIFRoZXkgbXVzdCBhbHNvIGJlIHRocmVhZGVkLgorCQkgKiBDb25zdHJ1Y3RvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tIHRoZSBzYW1lCisJCSAqIGNhY2hlIHdoaWNoIHRoZXkgYXJlIGEgY29uc3RydWN0b3IgZm9yLiAgT3RoZXJ3aXNlLCBkZWFkbG9jay4KKwkJICogVGhleSBtdXN0IGFsc28gYmUgdGhyZWFkZWQuCiAJCSAqLwogCQlpZiAoY2FjaGVwLT5jdG9yICYmICEoY2FjaGVwLT5mbGFncyAmIFNMQUJfUE9JU09OKSkKIAkJCWNhY2hlcC0+Y3RvcihvYmpwICsgb2JqX29mZnNldChjYWNoZXApLCBjYWNoZXAsCkBAIC0yMjczLDggKzIzODIsOCBAQAogCQkJCXNsYWJfZXJyb3IoY2FjaGVwLCAiY29uc3RydWN0b3Igb3Zlcndyb3RlIHRoZSIKIAkJCQkJICAgIiBzdGFydCBvZiBhbiBvYmplY3QiKTsKIAkJfQotCQlpZiAoKGNhY2hlcC0+YnVmZmVyX3NpemUgJSBQQUdFX1NJWkUpID09IDAgJiYgT0ZGX1NMQUIoY2FjaGVwKQotCQkgICAgJiYgY2FjaGVwLT5mbGFncyAmIFNMQUJfUE9JU09OKQorCQlpZiAoKGNhY2hlcC0+YnVmZmVyX3NpemUgJSBQQUdFX1NJWkUpID09IDAgJiYKKwkJCSAgICBPRkZfU0xBQihjYWNoZXApICYmIGNhY2hlcC0+ZmxhZ3MgJiBTTEFCX1BPSVNPTikKIAkJCWtlcm5lbF9tYXBfcGFnZXModmlydF90b19wYWdlKG9ianApLAogCQkJCQkgY2FjaGVwLT5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRSwgMCk7CiAjZWxzZQpAQCAtMjI4OSwxOCArMjM5OCwxNiBAQAogCiBzdGF0aWMgdm9pZCBrbWVtX2ZsYWdjaGVjayhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKIHsKLQlpZiAoZmxhZ3MgJiBTTEFCX0RNQSkgewotCQlpZiAoIShjYWNoZXAtPmdmcGZsYWdzICYgR0ZQX0RNQSkpCi0JCQlCVUcoKTsKLQl9IGVsc2UgewotCQlpZiAoY2FjaGVwLT5nZnBmbGFncyAmIEdGUF9ETUEpCi0JCQlCVUcoKTsKLQl9CisJaWYgKGZsYWdzICYgU0xBQl9ETUEpCisJCUJVR19PTighKGNhY2hlcC0+Z2ZwZmxhZ3MgJiBHRlBfRE1BKSk7CisJZWxzZQorCQlCVUdfT04oY2FjaGVwLT5nZnBmbGFncyAmIEdGUF9ETUEpOwogfQogCi1zdGF0aWMgdm9pZCAqc2xhYl9nZXRfb2JqKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBzbGFiICpzbGFicCwgaW50IG5vZGVpZCkKK3N0YXRpYyB2b2lkICpzbGFiX2dldF9vYmooc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IHNsYWIgKnNsYWJwLAorCQkJCWludCBub2RlaWQpCiB7Ci0Jdm9pZCAqb2JqcCA9IHNsYWJwLT5zX21lbSArIChzbGFicC0+ZnJlZSAqIGNhY2hlcC0+YnVmZmVyX3NpemUpOworCXZvaWQgKm9ianAgPSBpbmRleF90b19vYmooY2FjaGVwLCBzbGFicCwgc2xhYnAtPmZyZWUpOwogCWttZW1fYnVmY3RsX3QgbmV4dDsKIAogCXNsYWJwLT5pbnVzZSsrOwpAQCAtMjMxNCwxOCArMjQyMSwxOCBAQAogCXJldHVybiBvYmpwOwogfQogCi1zdGF0aWMgdm9pZCBzbGFiX3B1dF9vYmooc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IHNsYWIgKnNsYWJwLCB2b2lkICpvYmpwLAotCQkJICBpbnQgbm9kZWlkKQorc3RhdGljIHZvaWQgc2xhYl9wdXRfb2JqKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBzbGFiICpzbGFicCwKKwkJCQl2b2lkICpvYmpwLCBpbnQgbm9kZWlkKQogewotCXVuc2lnbmVkIGludCBvYmpuciA9ICh1bnNpZ25lZCkob2JqcC1zbGFicC0+c19tZW0pIC8gY2FjaGVwLT5idWZmZXJfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgb2JqbnIgPSBvYmpfdG9faW5kZXgoY2FjaGVwLCBzbGFicCwgb2JqcCk7CiAKICNpZiBERUJVRwogCS8qIFZlcmlmeSB0aGF0IHRoZSBzbGFiIGJlbG9uZ3MgdG8gdGhlIGludGVuZGVkIG5vZGUgKi8KIAlXQVJOX09OKHNsYWJwLT5ub2RlaWQgIT0gbm9kZWlkKTsKIAotCWlmIChzbGFiX2J1ZmN0bChzbGFicClbb2JqbnJdICE9IEJVRkNUTF9GUkVFKSB7CisJaWYgKHNsYWJfYnVmY3RsKHNsYWJwKVtvYmpucl0gKyAxIDw9IFNMQUJfTElNSVQgKyAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic2xhYjogZG91YmxlIGZyZWUgZGV0ZWN0ZWQgaW4gY2FjaGUgIgotCQkgICAgICAgIiclcycsIG9ianAgJXBcbiIsIGNhY2hlcC0+bmFtZSwgb2JqcCk7CisJCQkJIiclcycsIG9ianAgJXBcbiIsIGNhY2hlcC0+bmFtZSwgb2JqcCk7CiAJCUJVRygpOwogCX0KICNlbmRpZgpAQCAtMjMzNCwxNCArMjQ0MSwxOCBAQAogCXNsYWJwLT5pbnVzZS0tOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc2xhYl9hdHRyKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBzbGFiICpzbGFicCwgdm9pZCAqb2JqcCkKK3N0YXRpYyB2b2lkIHNldF9zbGFiX2F0dHIoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgc3RydWN0IHNsYWIgKnNsYWJwLAorCQkJdm9pZCAqb2JqcCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCS8qIE5hc3R5ISEhISEhIEkgaG9wZSB0aGlzIGlzIE9LLiAqLwotCWkgPSAxIDw8IGNhY2hlcC0+Z2Zwb3JkZXI7CiAJcGFnZSA9IHZpcnRfdG9fcGFnZShvYmpwKTsKKworCWkgPSAxOworCWlmIChsaWtlbHkoIVBhZ2VDb21wb3VuZChwYWdlKSkpCisJCWkgPDw9IGNhY2hlcC0+Z2Zwb3JkZXI7CiAJZG8gewogCQlwYWdlX3NldF9jYWNoZShwYWdlLCBjYWNoZXApOwogCQlwYWdlX3NldF9zbGFiKHBhZ2UsIHNsYWJwKTsKQEAgLTIzNjIsOCArMjQ3Myw5IEBACiAJdW5zaWduZWQgbG9uZyBjdG9yX2ZsYWdzOwogCXN0cnVjdCBrbWVtX2xpc3QzICpsMzsKIAotCS8qIEJlIGxhenkgYW5kIG9ubHkgY2hlY2sgZm9yIHZhbGlkIGZsYWdzIGhlcmUsCi0JICoga2VlcGluZyBpdCBvdXQgb2YgdGhlIGNyaXRpY2FsIHBhdGggaW4ga21lbV9jYWNoZV9hbGxvYygpLgorCS8qCisJICogQmUgbGF6eSBhbmQgb25seSBjaGVjayBmb3IgdmFsaWQgZmxhZ3MgaGVyZSwgIGtlZXBpbmcgaXQgb3V0IG9mIHRoZQorCSAqIGNyaXRpY2FsIHBhdGggaW4ga21lbV9jYWNoZV9hbGxvYygpLgogCSAqLwogCWlmIChmbGFncyAmIH4oU0xBQl9ETUEgfCBTTEFCX0xFVkVMX01BU0sgfCBTTEFCX05PX0dST1cpKQogCQlCVUcoKTsKQEAgLTI0MDQsMTQgKzI1MTYsMTcgQEAKIAkgKi8KIAlrbWVtX2ZsYWdjaGVjayhjYWNoZXAsIGZsYWdzKTsKIAotCS8qIEdldCBtZW0gZm9yIHRoZSBvYmpzLgotCSAqIEF0dGVtcHQgdG8gYWxsb2NhdGUgYSBwaHlzaWNhbCBwYWdlIGZyb20gJ25vZGVpZCcsCisJLyoKKwkgKiBHZXQgbWVtIGZvciB0aGUgb2Jqcy4gIEF0dGVtcHQgdG8gYWxsb2NhdGUgYSBwaHlzaWNhbCBwYWdlIGZyb20KKwkgKiAnbm9kZWlkJy4KIAkgKi8KLQlpZiAoIShvYmpwID0ga21lbV9nZXRwYWdlcyhjYWNoZXAsIGZsYWdzLCBub2RlaWQpKSkKKwlvYmpwID0ga21lbV9nZXRwYWdlcyhjYWNoZXAsIGZsYWdzLCBub2RlaWQpOworCWlmICghb2JqcCkKIAkJZ290byBmYWlsZWQ7CiAKIAkvKiBHZXQgc2xhYiBtYW5hZ2VtZW50LiAqLwotCWlmICghKHNsYWJwID0gYWxsb2Nfc2xhYm1nbXQoY2FjaGVwLCBvYmpwLCBvZmZzZXQsIGxvY2FsX2ZsYWdzKSkpCisJc2xhYnAgPSBhbGxvY19zbGFibWdtdChjYWNoZXAsIG9ianAsIG9mZnNldCwgbG9jYWxfZmxhZ3MpOworCWlmICghc2xhYnApCiAJCWdvdG8gb3BwczE7CiAKIAlzbGFicC0+bm9kZWlkID0gbm9kZWlkOwpAQCAtMjQzMCw5ICsyNTQ1LDkgQEAKIAlsMy0+ZnJlZV9vYmplY3RzICs9IGNhY2hlcC0+bnVtOwogCXNwaW5fdW5sb2NrKCZsMy0+bGlzdF9sb2NrKTsKIAlyZXR1cm4gMTsKLSAgICAgIG9wcHMxOgorb3BwczE6CiAJa21lbV9mcmVlcGFnZXMoY2FjaGVwLCBvYmpwKTsKLSAgICAgIGZhaWxlZDoKK2ZhaWxlZDoKIAlpZiAobG9jYWxfZmxhZ3MgJiBfX0dGUF9XQUlUKQogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXJldHVybiAwOwpAQCAtMjQ3NSw4ICsyNTkwLDggQEAKIAlwYWdlID0gdmlydF90b19wYWdlKG9ianApOwogCiAJaWYgKHBhZ2VfZ2V0X2NhY2hlKHBhZ2UpICE9IGNhY2hlcCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJtaXNtYXRjaCBpbiBrbWVtX2NhY2hlX2ZyZWU6IGV4cGVjdGVkIGNhY2hlICVwLCBnb3QgJXBcbiIsCisJCXByaW50ayhLRVJOX0VSUiAibWlzbWF0Y2ggaW4ga21lbV9jYWNoZV9mcmVlOiBleHBlY3RlZCAiCisJCQkJImNhY2hlICVwLCBnb3QgJXBcbiIsCiAJCSAgICAgICBwYWdlX2dldF9jYWNoZShwYWdlKSwgY2FjaGVwKTsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcCBpcyAlcy5cbiIsIGNhY2hlcCwgY2FjaGVwLT5uYW1lKTsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcCBpcyAlcy5cbiIsIHBhZ2VfZ2V0X2NhY2hlKHBhZ2UpLApAQCAtMjQ4NiwxMyArMjYwMSwxMiBAQAogCXNsYWJwID0gcGFnZV9nZXRfc2xhYihwYWdlKTsKIAogCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9SRURfWk9ORSkgewotCQlpZiAoKmRiZ19yZWR6b25lMShjYWNoZXAsIG9ianApICE9IFJFRF9BQ1RJVkUKLQkJICAgIHx8ICpkYmdfcmVkem9uZTIoY2FjaGVwLCBvYmpwKSAhPSBSRURfQUNUSVZFKSB7Ci0JCQlzbGFiX2Vycm9yKGNhY2hlcCwKLQkJCQkgICAiZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBvdXRzaWRlIgotCQkJCSAgICIgb2JqZWN0IHdhcyBvdmVyd3JpdHRlbiIpOwotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVwOiByZWR6b25lIDE6IDB4JWx4LCByZWR6b25lIDI6IDB4JWx4LlxuIiwKKwkJaWYgKCpkYmdfcmVkem9uZTEoY2FjaGVwLCBvYmpwKSAhPSBSRURfQUNUSVZFIHx8CisJCQkJKmRiZ19yZWR6b25lMihjYWNoZXAsIG9ianApICE9IFJFRF9BQ1RJVkUpIHsKKwkJCXNsYWJfZXJyb3IoY2FjaGVwLCAiZG91YmxlIGZyZWUsIG9yIG1lbW9yeSBvdXRzaWRlIgorCQkJCQkJIiBvYmplY3Qgd2FzIG92ZXJ3cml0dGVuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIiVwOiByZWR6b25lIDE6MHglbHgsICIKKwkJCQkJInJlZHpvbmUgMjoweCVseC5cbiIsCiAJCQkgICAgICAgb2JqcCwgKmRiZ19yZWR6b25lMShjYWNoZXAsIG9ianApLAogCQkJICAgICAgICpkYmdfcmVkem9uZTIoY2FjaGVwLCBvYmpwKSk7CiAJCX0KQEAgLTI1MDIsMTUgKzI2MTYsMTYgQEAKIAlpZiAoY2FjaGVwLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikKIAkJKmRiZ191c2Vyd29yZChjYWNoZXAsIG9ianApID0gY2FsbGVyOwogCi0Jb2JqbnIgPSAodW5zaWduZWQpKG9ianAgLSBzbGFicC0+c19tZW0pIC8gY2FjaGVwLT5idWZmZXJfc2l6ZTsKKwlvYmpuciA9IG9ial90b19pbmRleChjYWNoZXAsIHNsYWJwLCBvYmpwKTsKIAogCUJVR19PTihvYmpuciA+PSBjYWNoZXAtPm51bSk7Ci0JQlVHX09OKG9ianAgIT0gc2xhYnAtPnNfbWVtICsgb2JqbnIgKiBjYWNoZXAtPmJ1ZmZlcl9zaXplKTsKKwlCVUdfT04ob2JqcCAhPSBpbmRleF90b19vYmooY2FjaGVwLCBzbGFicCwgb2JqbnIpKTsKIAogCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9ERUJVR19JTklUSUFMKSB7Ci0JCS8qIE5lZWQgdG8gY2FsbCB0aGUgc2xhYidzIGNvbnN0cnVjdG9yIHNvIHRoZQotCQkgKiBjYWxsZXIgY2FuIHBlcmZvcm0gYSB2ZXJpZnkgb2YgaXRzIHN0YXRlIChkZWJ1Z2dpbmcpLgotCQkgKiBDYWxsZWQgd2l0aG91dCB0aGUgY2FjaGUtbG9jayBoZWxkLgorCQkvKgorCQkgKiBOZWVkIHRvIGNhbGwgdGhlIHNsYWIncyBjb25zdHJ1Y3RvciBzbyB0aGUgY2FsbGVyIGNhbgorCQkgKiBwZXJmb3JtIGEgdmVyaWZ5IG9mIGl0cyBzdGF0ZSAoZGVidWdnaW5nKS4gIENhbGxlZCB3aXRob3V0CisJCSAqIHRoZSBjYWNoZS1sb2NrIGhlbGQuCiAJCSAqLwogCQljYWNoZXAtPmN0b3Iob2JqcCArIG9ial9vZmZzZXQoY2FjaGVwKSwKIAkJCSAgICAgY2FjaGVwLCBTTEFCX0NUT1JfQ09OU1RSVUNUT1IgfCBTTEFCX0NUT1JfVkVSSUZZKTsKQEAgLTI1MjEsOSArMjYzNiwxMiBAQAogCQkgKi8KIAkJY2FjaGVwLT5kdG9yKG9ianAgKyBvYmpfb2Zmc2V0KGNhY2hlcCksIGNhY2hlcCwgMCk7CiAJfQorI2lmZGVmIENPTkZJR19ERUJVR19TTEFCX0xFQUsKKwlzbGFiX2J1ZmN0bChzbGFicClbb2JqbnJdID0gQlVGQ1RMX0ZSRUU7CisjZW5kaWYKIAlpZiAoY2FjaGVwLT5mbGFncyAmIFNMQUJfUE9JU09OKSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCQlpZiAoKGNhY2hlcC0+YnVmZmVyX3NpemUgJSBQQUdFX1NJWkUpID09IDAgJiYgT0ZGX1NMQUIoY2FjaGVwKSkgeworCQlpZiAoKGNhY2hlcC0+YnVmZmVyX3NpemUgJSBQQUdFX1NJWkUpPT0wICYmIE9GRl9TTEFCKGNhY2hlcCkpIHsKIAkJCXN0b3JlX3N0YWNraW5mbyhjYWNoZXAsIG9ianAsICh1bnNpZ25lZCBsb25nKWNhbGxlcik7CiAJCQlrZXJuZWxfbWFwX3BhZ2VzKHZpcnRfdG9fcGFnZShvYmpwKSwKIAkJCQkJIGNhY2hlcC0+YnVmZmVyX3NpemUgLyBQQUdFX1NJWkUsIDApOwpAQCAtMjU0OSwxNCArMjY2NywxNCBAQAogCQkJZ290byBiYWQ7CiAJfQogCWlmIChlbnRyaWVzICE9IGNhY2hlcC0+bnVtIC0gc2xhYnAtPmludXNlKSB7Ci0JICAgICAgYmFkOgotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJzbGFiOiBJbnRlcm5hbCBsaXN0IGNvcnJ1cHRpb24gZGV0ZWN0ZWQgaW4gY2FjaGUgJyVzJyglZCksIHNsYWJwICVwKCVkKS4gSGV4ZHVtcDpcbiIsCi0JCSAgICAgICBjYWNoZXAtPm5hbWUsIGNhY2hlcC0+bnVtLCBzbGFicCwgc2xhYnAtPmludXNlKTsKK2JhZDoKKwkJcHJpbnRrKEtFUk5fRVJSICJzbGFiOiBJbnRlcm5hbCBsaXN0IGNvcnJ1cHRpb24gZGV0ZWN0ZWQgaW4gIgorCQkJCSJjYWNoZSAnJXMnKCVkKSwgc2xhYnAgJXAoJWQpLiBIZXhkdW1wOlxuIiwKKwkJCWNhY2hlcC0+bmFtZSwgY2FjaGVwLT5udW0sIHNsYWJwLCBzbGFicC0+aW51c2UpOwogCQlmb3IgKGkgPSAwOwotCQkgICAgIGkgPCBzaXplb2Yoc2xhYnApICsgY2FjaGVwLT5udW0gKiBzaXplb2Yoa21lbV9idWZjdGxfdCk7CisJCSAgICAgaSA8IHNpemVvZigqc2xhYnApICsgY2FjaGVwLT5udW0gKiBzaXplb2Yoa21lbV9idWZjdGxfdCk7CiAJCSAgICAgaSsrKSB7Ci0JCQlpZiAoKGkgJSAxNikgPT0gMCkKKwkJCWlmIChpICUgMTYgPT0gMCkKIAkJCQlwcmludGsoIlxuJTAzeDoiLCBpKTsKIAkJCXByaW50aygiICUwMngiLCAoKHVuc2lnbmVkIGNoYXIgKilzbGFicClbaV0pOwogCQl9CkBAIC0yNTc4LDEyICsyNjk2LDEzIEBACiAKIAljaGVja19pcnFfb2ZmKCk7CiAJYWMgPSBjcHVfY2FjaGVfZ2V0KGNhY2hlcCk7Ci0gICAgICByZXRyeToKK3JldHJ5OgogCWJhdGNoY291bnQgPSBhYy0+YmF0Y2hjb3VudDsKIAlpZiAoIWFjLT50b3VjaGVkICYmIGJhdGNoY291bnQgPiBCQVRDSFJFRklMTF9MSU1JVCkgewotCQkvKiBpZiB0aGVyZSB3YXMgbGl0dGxlIHJlY2VudCBhY3Rpdml0eSBvbiB0aGlzCi0JCSAqIGNhY2hlLCB0aGVuIHBlcmZvcm0gb25seSBhIHBhcnRpYWwgcmVmaWxsLgotCQkgKiBPdGhlcndpc2Ugd2UgY291bGQgZ2VuZXJhdGUgcmVmaWxsIGJvdW5jaW5nLgorCQkvKgorCQkgKiBJZiB0aGVyZSB3YXMgbGl0dGxlIHJlY2VudCBhY3Rpdml0eSBvbiB0aGlzIGNhY2hlLCB0aGVuCisJCSAqIHBlcmZvcm0gb25seSBhIHBhcnRpYWwgcmVmaWxsLiAgT3RoZXJ3aXNlIHdlIGNvdWxkIGdlbmVyYXRlCisJCSAqIHJlZmlsbCBib3VuY2luZy4KIAkJICovCiAJCWJhdGNoY291bnQgPSBCQVRDSFJFRklMTF9MSU1JVDsKIAl9CkBAIC0yNTkyLDIwICsyNzExLDEwIEBACiAJQlVHX09OKGFjLT5hdmFpbCA+IDAgfHwgIWwzKTsKIAlzcGluX2xvY2soJmwzLT5saXN0X2xvY2spOwogCi0JaWYgKGwzLT5zaGFyZWQpIHsKLQkJc3RydWN0IGFycmF5X2NhY2hlICpzaGFyZWRfYXJyYXkgPSBsMy0+c2hhcmVkOwotCQlpZiAoc2hhcmVkX2FycmF5LT5hdmFpbCkgewotCQkJaWYgKGJhdGNoY291bnQgPiBzaGFyZWRfYXJyYXktPmF2YWlsKQotCQkJCWJhdGNoY291bnQgPSBzaGFyZWRfYXJyYXktPmF2YWlsOwotCQkJc2hhcmVkX2FycmF5LT5hdmFpbCAtPSBiYXRjaGNvdW50OwotCQkJYWMtPmF2YWlsID0gYmF0Y2hjb3VudDsKLQkJCW1lbWNweShhYy0+ZW50cnksCi0JCQkgICAgICAgJihzaGFyZWRfYXJyYXktPmVudHJ5W3NoYXJlZF9hcnJheS0+YXZhaWxdKSwKLQkJCSAgICAgICBzaXplb2Yodm9pZCAqKSAqIGJhdGNoY291bnQpOwotCQkJc2hhcmVkX2FycmF5LT50b3VjaGVkID0gMTsKLQkJCWdvdG8gYWxsb2NfZG9uZTsKLQkJfQotCX0KKwkvKiBTZWUgaWYgd2UgY2FuIHJlZmlsbCBmcm9tIHRoZSBzaGFyZWQgYXJyYXkgKi8KKwlpZiAobDMtPnNoYXJlZCAmJiB0cmFuc2Zlcl9vYmplY3RzKGFjLCBsMy0+c2hhcmVkLCBiYXRjaGNvdW50KSkKKwkJZ290byBhbGxvY19kb25lOworCiAJd2hpbGUgKGJhdGNoY291bnQgPiAwKSB7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCQlzdHJ1Y3Qgc2xhYiAqc2xhYnA7CkBAIC0yNjM5LDI5ICsyNzQ4LDI5IEBACiAJCQlsaXN0X2FkZCgmc2xhYnAtPmxpc3QsICZsMy0+c2xhYnNfcGFydGlhbCk7CiAJfQogCi0gICAgICBtdXN0X2dyb3c6CittdXN0X2dyb3c6CiAJbDMtPmZyZWVfb2JqZWN0cyAtPSBhYy0+YXZhaWw7Ci0gICAgICBhbGxvY19kb25lOgorYWxsb2NfZG9uZToKIAlzcGluX3VubG9jaygmbDMtPmxpc3RfbG9jayk7CiAKIAlpZiAodW5saWtlbHkoIWFjLT5hdmFpbCkpIHsKIAkJaW50IHg7CiAJCXggPSBjYWNoZV9ncm93KGNhY2hlcCwgZmxhZ3MsIG51bWFfbm9kZV9pZCgpKTsKIAotCQkvLyBjYWNoZV9ncm93IGNhbiByZWVuYWJsZSBpbnRlcnJ1cHRzLCB0aGVuIGFjIGNvdWxkIGNoYW5nZS4KKwkJLyogY2FjaGVfZ3JvdyBjYW4gcmVlbmFibGUgaW50ZXJydXB0cywgdGhlbiBhYyBjb3VsZCBjaGFuZ2UuICovCiAJCWFjID0gY3B1X2NhY2hlX2dldChjYWNoZXApOwotCQlpZiAoIXggJiYgYWMtPmF2YWlsID09IDApCS8vIG5vIG9iamVjdHMgaW4gc2lnaHQ/IGFib3J0CisJCWlmICgheCAmJiBhYy0+YXZhaWwgPT0gMCkJLyogbm8gb2JqZWN0cyBpbiBzaWdodD8gYWJvcnQgKi8KIAkJCXJldHVybiBOVUxMOwogCi0JCWlmICghYWMtPmF2YWlsKQkvLyBvYmplY3RzIHJlZmlsbGVkIGJ5IGludGVycnVwdD8KKwkJaWYgKCFhYy0+YXZhaWwpCQkvKiBvYmplY3RzIHJlZmlsbGVkIGJ5IGludGVycnVwdD8gKi8KIAkJCWdvdG8gcmV0cnk7CiAJfQogCWFjLT50b3VjaGVkID0gMTsKIAlyZXR1cm4gYWMtPmVudHJ5Wy0tYWMtPmF2YWlsXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1jYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2JlZm9yZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2JlZm9yZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLAorCQkJCQkJZ2ZwX3QgZmxhZ3MpCiB7CiAJbWlnaHRfc2xlZXBfaWYoZmxhZ3MgJiBfX0dGUF9XQUlUKTsKICNpZiBERUJVRwpAQCAtMjY3MCw4ICsyNzc5LDggQEAKIH0KIAogI2lmIERFQlVHCi1zdGF0aWMgdm9pZCAqY2FjaGVfYWxsb2NfZGVidWdjaGVja19hZnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncywKLQkJCQkJdm9pZCAqb2JqcCwgdm9pZCAqY2FsbGVyKQorc3RhdGljIHZvaWQgKmNhY2hlX2FsbG9jX2RlYnVnY2hlY2tfYWZ0ZXIoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCQlnZnBfdCBmbGFncywgdm9pZCAqb2JqcCwgdm9pZCAqY2FsbGVyKQogewogCWlmICghb2JqcCkKIAkJcmV0dXJuIG9ianA7CkBAIC0yNjkxLDE5ICsyODAwLDI4IEBACiAJCSpkYmdfdXNlcndvcmQoY2FjaGVwLCBvYmpwKSA9IGNhbGxlcjsKIAogCWlmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9SRURfWk9ORSkgewotCQlpZiAoKmRiZ19yZWR6b25lMShjYWNoZXAsIG9ianApICE9IFJFRF9JTkFDVElWRQotCQkgICAgfHwgKmRiZ19yZWR6b25lMihjYWNoZXAsIG9ianApICE9IFJFRF9JTkFDVElWRSkgewotCQkJc2xhYl9lcnJvcihjYWNoZXAsCi0JCQkJICAgImRvdWJsZSBmcmVlLCBvciBtZW1vcnkgb3V0c2lkZSIKLQkJCQkgICAiIG9iamVjdCB3YXMgb3ZlcndyaXR0ZW4iKTsKKwkJaWYgKCpkYmdfcmVkem9uZTEoY2FjaGVwLCBvYmpwKSAhPSBSRURfSU5BQ1RJVkUgfHwKKwkJCQkqZGJnX3JlZHpvbmUyKGNhY2hlcCwgb2JqcCkgIT0gUkVEX0lOQUNUSVZFKSB7CisJCQlzbGFiX2Vycm9yKGNhY2hlcCwgImRvdWJsZSBmcmVlLCBvciBtZW1vcnkgb3V0c2lkZSIKKwkJCQkJCSIgb2JqZWN0IHdhcyBvdmVyd3JpdHRlbiIpOwogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVwOiByZWR6b25lIDE6IDB4JWx4LCByZWR6b25lIDI6IDB4JWx4LlxuIiwKLQkJCSAgICAgICBvYmpwLCAqZGJnX3JlZHpvbmUxKGNhY2hlcCwgb2JqcCksCi0JCQkgICAgICAgKmRiZ19yZWR6b25lMihjYWNoZXAsIG9ianApKTsKKwkJCQkiJXA6IHJlZHpvbmUgMToweCVseCwgcmVkem9uZSAyOjB4JWx4XG4iLAorCQkJCW9ianAsICpkYmdfcmVkem9uZTEoY2FjaGVwLCBvYmpwKSwKKwkJCQkqZGJnX3JlZHpvbmUyKGNhY2hlcCwgb2JqcCkpOwogCQl9CiAJCSpkYmdfcmVkem9uZTEoY2FjaGVwLCBvYmpwKSA9IFJFRF9BQ1RJVkU7CiAJCSpkYmdfcmVkem9uZTIoY2FjaGVwLCBvYmpwKSA9IFJFRF9BQ1RJVkU7CiAJfQorI2lmZGVmIENPTkZJR19ERUJVR19TTEFCX0xFQUsKKwl7CisJCXN0cnVjdCBzbGFiICpzbGFicDsKKwkJdW5zaWduZWQgb2JqbnI7CisKKwkJc2xhYnAgPSBwYWdlX2dldF9zbGFiKHZpcnRfdG9fcGFnZShvYmpwKSk7CisJCW9iam5yID0gKHVuc2lnbmVkKShvYmpwIC0gc2xhYnAtPnNfbWVtKSAvIGNhY2hlcC0+YnVmZmVyX3NpemU7CisJCXNsYWJfYnVmY3RsKHNsYWJwKVtvYmpucl0gPSBCVUZDVExfQUNUSVZFOworCX0KKyNlbmRpZgogCW9ianAgKz0gb2JqX29mZnNldChjYWNoZXApOwogCWlmIChjYWNoZXAtPmN0b3IgJiYgY2FjaGVwLT5mbGFncyAmIFNMQUJfUE9JU09OKSB7CiAJCXVuc2lnbmVkIGxvbmcgY3Rvcl9mbGFncyA9IFNMQUJfQ1RPUl9DT05TVFJVQ1RPUjsKQEAgLTI3MjUsMTEgKzI4NDMsMTAgQEAKIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjOwogCiAjaWZkZWYgQ09ORklHX05VTUEKLQlpZiAodW5saWtlbHkoY3VycmVudC0+bWVtcG9saWN5ICYmICFpbl9pbnRlcnJ1cHQoKSkpIHsKLQkJaW50IG5pZCA9IHNsYWJfbm9kZShjdXJyZW50LT5tZW1wb2xpY3kpOwotCi0JCWlmIChuaWQgIT0gbnVtYV9ub2RlX2lkKCkpCi0JCQlyZXR1cm4gX19jYWNoZV9hbGxvY19ub2RlKGNhY2hlcCwgZmxhZ3MsIG5pZCk7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgKFBGX1NQUkVBRF9TTEFCIHwgUEZfTUVNUE9MSUNZKSkpIHsKKwkJb2JqcCA9IGFsdGVybmF0ZV9ub2RlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOworCQlpZiAob2JqcCAhPSBOVUxMKQorCQkJcmV0dXJuIG9ianA7CiAJfQogI2VuZGlmCiAKQEAgLTI3NDYsOCArMjg2Myw4IEBACiAJcmV0dXJuIG9ianA7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCi1fX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzLCB2b2lkICpjYWxsZXIpCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCQkJCWdmcF90IGZsYWdzLCB2b2lkICpjYWxsZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBzYXZlX2ZsYWdzOwogCXZvaWQgKm9ianA7CkBAIC0yNzY1LDkgKzI4ODIsMzIgQEAKIAogI2lmZGVmIENPTkZJR19OVU1BCiAvKgorICogVHJ5IGFsbG9jYXRpbmcgb24gYW5vdGhlciBub2RlIGlmIFBGX1NQUkVBRF9TTEFCfFBGX01FTVBPTElDWS4KKyAqCisgKiBJZiB3ZSBhcmUgaW5faW50ZXJydXB0LCB0aGVuIHByb2Nlc3MgY29udGV4dCwgaW5jbHVkaW5nIGNwdXNldHMgYW5kCisgKiBtZW1wb2xpY3ksIG1heSBub3QgYXBwbHkgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbiBwb2xpY3kuCisgKi8KK3N0YXRpYyB2b2lkICphbHRlcm5hdGVfbm9kZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKK3sKKwlpbnQgbmlkX2FsbG9jLCBuaWRfaGVyZTsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJcmV0dXJuIE5VTEw7CisJbmlkX2FsbG9jID0gbmlkX2hlcmUgPSBudW1hX25vZGVfaWQoKTsKKwlpZiAoY3B1c2V0X2RvX3NsYWJfbWVtX3NwcmVhZCgpICYmIChjYWNoZXAtPmZsYWdzICYgU0xBQl9NRU1fU1BSRUFEKSkKKwkJbmlkX2FsbG9jID0gY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpOworCWVsc2UgaWYgKGN1cnJlbnQtPm1lbXBvbGljeSkKKwkJbmlkX2FsbG9jID0gc2xhYl9ub2RlKGN1cnJlbnQtPm1lbXBvbGljeSk7CisJaWYgKG5pZF9hbGxvYyAhPSBuaWRfaGVyZSkKKwkJcmV0dXJuIF9fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCBuaWRfYWxsb2MpOworCXJldHVybiBOVUxMOworfQorCisvKgogICogQSBpbnRlcmZhY2UgdG8gZW5hYmxlIHNsYWIgY3JlYXRpb24gb24gbm9kZWlkCiAgKi8KLXN0YXRpYyB2b2lkICpfX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlaWQpCitzdGF0aWMgdm9pZCAqX19jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzLAorCQkJCWludCBub2RlaWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAJc3RydWN0IHNsYWIgKnNsYWJwOwpAQCAtMjc3OCw3ICsyOTE4LDcgQEAKIAlsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW25vZGVpZF07CiAJQlVHX09OKCFsMyk7CiAKLSAgICAgIHJldHJ5OgorcmV0cnk6CiAJY2hlY2tfaXJxX29mZigpOwogCXNwaW5fbG9jaygmbDMtPmxpc3RfbG9jayk7CiAJZW50cnkgPSBsMy0+c2xhYnNfcGFydGlhbC5uZXh0OwpAQCAtMjgwNSwxNiArMjk0NSwxNSBAQAogCS8qIG1vdmUgc2xhYnAgdG8gY29ycmVjdCBzbGFicCBsaXN0OiAqLwogCWxpc3RfZGVsKCZzbGFicC0+bGlzdCk7CiAKLQlpZiAoc2xhYnAtPmZyZWUgPT0gQlVGQ1RMX0VORCkgeworCWlmIChzbGFicC0+ZnJlZSA9PSBCVUZDVExfRU5EKQogCQlsaXN0X2FkZCgmc2xhYnAtPmxpc3QsICZsMy0+c2xhYnNfZnVsbCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWxpc3RfYWRkKCZzbGFicC0+bGlzdCwgJmwzLT5zbGFic19wYXJ0aWFsKTsKLQl9CiAKIAlzcGluX3VubG9jaygmbDMtPmxpc3RfbG9jayk7CiAJZ290byBkb25lOwogCi0gICAgICBtdXN0X2dyb3c6CittdXN0X2dyb3c6CiAJc3Bpbl91bmxvY2soJmwzLT5saXN0X2xvY2spOwogCXggPSBjYWNoZV9ncm93KGNhY2hlcCwgZmxhZ3MsIG5vZGVpZCk7CiAKQEAgLTI4MjIsNyArMjk2MSw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJZ290byByZXRyeTsKLSAgICAgIGRvbmU6Citkb25lOgogCXJldHVybiBvYmo7CiB9CiAjZW5kaWYKQEAgLTI4OTUsNyArMzAzNCw3IEBACiAJfQogCiAJZnJlZV9ibG9jayhjYWNoZXAsIGFjLT5lbnRyeSwgYmF0Y2hjb3VudCwgbm9kZSk7Ci0gICAgICBmcmVlX2RvbmU6CitmcmVlX2RvbmU6CiAjaWYgU1RBVFMKIAl7CiAJCWludCBpID0gMDsKQEAgLTI5MTYsMTYgKzMwNTUsMTIgQEAKICNlbmRpZgogCXNwaW5fdW5sb2NrKCZsMy0+bGlzdF9sb2NrKTsKIAlhYy0+YXZhaWwgLT0gYmF0Y2hjb3VudDsKLQltZW1tb3ZlKGFjLT5lbnRyeSwgJihhYy0+ZW50cnlbYmF0Y2hjb3VudF0pLAotCQlzaXplb2Yodm9pZCAqKSAqIGFjLT5hdmFpbCk7CisJbWVtbW92ZShhYy0+ZW50cnksICYoYWMtPmVudHJ5W2JhdGNoY291bnRdKSwgc2l6ZW9mKHZvaWQgKikqYWMtPmF2YWlsKTsKIH0KIAogLyoKLSAqIF9fY2FjaGVfZnJlZQotICogUmVsZWFzZSBhbiBvYmogYmFjayB0byBpdHMgY2FjaGUuIElmIHRoZSBvYmogaGFzIGEgY29uc3RydWN0ZWQKLSAqIHN0YXRlLCBpdCBtdXN0IGJlIGluIHRoaXMgc3RhdGUgX2JlZm9yZV8gaXQgaXMgcmVsZWFzZWQuCi0gKgotICogQ2FsbGVkIHdpdGggZGlzYWJsZWQgaW50cy4KKyAqIFJlbGVhc2UgYW4gb2JqIGJhY2sgdG8gaXRzIGNhY2hlLiBJZiB0aGUgb2JqIGhhcyBhIGNvbnN0cnVjdGVkIHN0YXRlLCBpdCBtdXN0CisgKiBiZSBpbiB0aGlzIHN0YXRlIF9iZWZvcmVfIGl0IGlzIHJlbGVhc2VkLiAgQ2FsbGVkIHdpdGggZGlzYWJsZWQgaW50cy4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwKQogewpAQCAtMjk0NCw5ICszMDc5LDkgQEAKIAkJaWYgKHVubGlrZWx5KHNsYWJwLT5ub2RlaWQgIT0gbnVtYV9ub2RlX2lkKCkpKSB7CiAJCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFsaWVuID0gTlVMTDsKIAkJCWludCBub2RlaWQgPSBzbGFicC0+bm9kZWlkOwotCQkJc3RydWN0IGttZW1fbGlzdDMgKmwzID0KLQkJCSAgICBjYWNoZXAtPm5vZGVsaXN0c1tudW1hX25vZGVfaWQoKV07CisJCQlzdHJ1Y3Qga21lbV9saXN0MyAqbDM7CiAKKwkJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbnVtYV9ub2RlX2lkKCldOwogCQkJU1RBVFNfSU5DX05PREVGUkVFUyhjYWNoZXApOwogCQkJaWYgKGwzLT5hbGllbiAmJiBsMy0+YWxpZW5bbm9kZWlkXSkgewogCQkJCWFsaWVuID0gbDMtPmFsaWVuW25vZGVpZF07CkBAIC0yOTkzLDYgKzMxMjgsMjMgQEAKIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvYyk7CiAKIC8qKgorICoga21lbV9jYWNoZV9hbGxvYyAtIEFsbG9jYXRlIGFuIG9iamVjdC4gVGhlIG1lbW9yeSBpcyBzZXQgdG8gemVyby4KKyAqIEBjYWNoZTogVGhlIGNhY2hlIHRvIGFsbG9jYXRlIGZyb20uCisgKiBAZmxhZ3M6IFNlZSBrbWFsbG9jKCkuCisgKgorICogQWxsb2NhdGUgYW4gb2JqZWN0IGZyb20gdGhpcyBjYWNoZSBhbmQgc2V0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIHplcm8uCisgKiBUaGUgZmxhZ3MgYXJlIG9ubHkgcmVsZXZhbnQgaWYgdGhlIGNhY2hlIGhhcyBubyBhdmFpbGFibGUgb2JqZWN0cy4KKyAqLwordm9pZCAqa21lbV9jYWNoZV96YWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCBnZnBfdCBmbGFncykKK3sKKwl2b2lkICpyZXQgPSBfX2NhY2hlX2FsbG9jKGNhY2hlLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlpZiAocmV0KQorCQltZW1zZXQocmV0LCAwLCBvYmpfc2l6ZShjYWNoZSkpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfemFsbG9jKTsKKworLyoqCiAgKiBrbWVtX3B0cl92YWxpZGF0ZSAtIGNoZWNrIGlmIGFuIHVudHJ1c3RlZCBwb2ludGVyIG1pZ2h0CiAgKgliZSBhIHNsYWIgZW50cnkuCiAgKiBAY2FjaGVwOiB0aGUgY2FjaGUgd2UncmUgY2hlY2tpbmcgYWdhaW5zdApAQCAtMzAzMCw3ICszMTgyLDcgQEAKIAlpZiAodW5saWtlbHkocGFnZV9nZXRfY2FjaGUocGFnZSkgIT0gY2FjaGVwKSkKIAkJZ290byBvdXQ7CiAJcmV0dXJuIDE7Ci0gICAgICBvdXQ6CitvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNTYsNyArMzIwOCw3IEBACiAJbG9jYWxfaXJxX3NhdmUoc2F2ZV9mbGFncyk7CiAKIAlpZiAobm9kZWlkID09IC0xIHx8IG5vZGVpZCA9PSBudW1hX25vZGVfaWQoKSB8fAotCSAgICAhY2FjaGVwLT5ub2RlbGlzdHNbbm9kZWlkXSkKKwkJCSFjYWNoZXAtPm5vZGVsaXN0c1tub2RlaWRdKQogCQlwdHIgPSBfX19fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncyk7CiAJZWxzZQogCQlwdHIgPSBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkKTsKQEAgLTMwODUsNiArMzIzNyw3IEBACiAgKiBrbWFsbG9jIC0gYWxsb2NhdGUgbWVtb3J5CiAgKiBAc2l6ZTogaG93IG1hbnkgYnl0ZXMgb2YgbWVtb3J5IGFyZSByZXF1aXJlZC4KICAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLgorICogQGNhbGxlcjogZnVuY3Rpb24gY2FsbGVyIGZvciBkZWJ1ZyB0cmFja2luZyBvZiB0aGUgY2FsbGVyCiAgKgogICoga21hbGxvYyBpcyB0aGUgbm9ybWFsIG1ldGhvZCBvZiBhbGxvY2F0aW5nIG1lbW9yeQogICogaW4gdGhlIGtlcm5lbC4KQEAgLTMxMTgsMjIgKzMyNzEsMjMgQEAKIAlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzLCBjYWxsZXIpOwogfQogCi0jaWZuZGVmIENPTkZJR19ERUJVR19TTEFCCiAKIHZvaWQgKl9fa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CisjaWZuZGVmIENPTkZJR19ERUJVR19TTEFCCiAJcmV0dXJuIF9fZG9fa21hbGxvYyhzaXplLCBmbGFncywgTlVMTCk7CisjZWxzZQorCXJldHVybiBfX2RvX2ttYWxsb2Moc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jKTsKIAotI2Vsc2UKLQorI2lmZGVmIENPTkZJR19ERUJVR19TTEFCCiB2b2lkICpfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgdm9pZCAqY2FsbGVyKQogewogCXJldHVybiBfX2RvX2ttYWxsb2Moc2l6ZSwgZmxhZ3MsIGNhbGxlcik7CiB9CiBFWFBPUlRfU1lNQk9MKF9fa21hbGxvY190cmFja19jYWxsZXIpOwotCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTMxNzMsNyArMzMyNyw3IEBACiAJLyogQ2F0Y2ggZGVyZWZzIHcvbyB3cmFwcGVycyAqLwogCXJldHVybiAodm9pZCAqKSh+KHVuc2lnbmVkIGxvbmcpcGRhdGEpOwogCi0gICAgICB1bndpbmRfb29tOgordW53aW5kX29vbToKIAl3aGlsZSAoLS1pID49IDApIHsKIAkJaWYgKCFjcHVfcG9zc2libGUoaSkpCiAJCQljb250aW51ZTsKQEAgLTMyNjQsNjEgKzM0MTgsODYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1fY2FjaGVfbmFtZSk7CiAKIC8qCi0gKiBUaGlzIGluaXRpYWxpemVzIGttZW1fbGlzdDMgZm9yIGFsbCBub2Rlcy4KKyAqIFRoaXMgaW5pdGlhbGl6ZXMga21lbV9saXN0MyBvciByZXNpemVzIHZhcmlvaXVzIGNhY2hlcyBmb3IgYWxsIG5vZGVzLgogICovCiBzdGF0aWMgaW50IGFsbG9jX2ttZW1saXN0KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCiB7CiAJaW50IG5vZGU7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzOwotCWludCBlcnIgPSAwOworCXN0cnVjdCBhcnJheV9jYWNoZSAqbmV3X3NoYXJlZDsKKwlzdHJ1Y3QgYXJyYXlfY2FjaGUgKipuZXdfYWxpZW47CiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7Ci0JCXN0cnVjdCBhcnJheV9jYWNoZSAqbmMgPSBOVUxMLCAqbmV3OwotCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKipuZXdfYWxpZW4gPSBOVUxMOwotI2lmZGVmIENPTkZJR19OVU1BCi0JCWlmICghKG5ld19hbGllbiA9IGFsbG9jX2FsaWVuX2NhY2hlKG5vZGUsIGNhY2hlcC0+bGltaXQpKSkKKworCQluZXdfYWxpZW4gPSBhbGxvY19hbGllbl9jYWNoZShub2RlLCBjYWNoZXAtPmxpbWl0KTsKKwkJaWYgKCFuZXdfYWxpZW4pCiAJCQlnb3RvIGZhaWw7Ci0jZW5kaWYKLQkJaWYgKCEobmV3ID0gYWxsb2NfYXJyYXljYWNoZShub2RlLCAoY2FjaGVwLT5zaGFyZWQgKgotCQkJCQkJICAgIGNhY2hlcC0+YmF0Y2hjb3VudCksCi0JCQkJCSAgICAgMHhiYWFkZjAwZCkpKQorCisJCW5ld19zaGFyZWQgPSBhbGxvY19hcnJheWNhY2hlKG5vZGUsCisJCQkJY2FjaGVwLT5zaGFyZWQqY2FjaGVwLT5iYXRjaGNvdW50LAorCQkJCQkweGJhYWRmMDBkKTsKKwkJaWYgKCFuZXdfc2hhcmVkKSB7CisJCQlmcmVlX2FsaWVuX2NhY2hlKG5ld19hbGllbik7CiAJCQlnb3RvIGZhaWw7Ci0JCWlmICgobDMgPSBjYWNoZXAtPm5vZGVsaXN0c1tub2RlXSkpIHsKKwkJfQorCisJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07CisJCWlmIChsMykgeworCQkJc3RydWN0IGFycmF5X2NhY2hlICpzaGFyZWQgPSBsMy0+c2hhcmVkOwogCiAJCQlzcGluX2xvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKIAotCQkJaWYgKChuYyA9IGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdLT5zaGFyZWQpKQotCQkJCWZyZWVfYmxvY2soY2FjaGVwLCBuYy0+ZW50cnksIG5jLT5hdmFpbCwgbm9kZSk7CisJCQlpZiAoc2hhcmVkKQorCQkJCWZyZWVfYmxvY2soY2FjaGVwLCBzaGFyZWQtPmVudHJ5LAorCQkJCQkJc2hhcmVkLT5hdmFpbCwgbm9kZSk7CiAKLQkJCWwzLT5zaGFyZWQgPSBuZXc7Ci0JCQlpZiAoIWNhY2hlcC0+bm9kZWxpc3RzW25vZGVdLT5hbGllbikgeworCQkJbDMtPnNoYXJlZCA9IG5ld19zaGFyZWQ7CisJCQlpZiAoIWwzLT5hbGllbikgewogCQkJCWwzLT5hbGllbiA9IG5ld19hbGllbjsKIAkJCQluZXdfYWxpZW4gPSBOVUxMOwogCQkJfQogCQkJbDMtPmZyZWVfbGltaXQgPSAoMSArIG5yX2NwdXNfbm9kZShub2RlKSkgKgotCQkJICAgIGNhY2hlcC0+YmF0Y2hjb3VudCArIGNhY2hlcC0+bnVtOworCQkJCQljYWNoZXAtPmJhdGNoY291bnQgKyBjYWNoZXAtPm51bTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7Ci0JCQlrZnJlZShuYyk7CisJCQlrZnJlZShzaGFyZWQpOwogCQkJZnJlZV9hbGllbl9jYWNoZShuZXdfYWxpZW4pOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCEobDMgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBrbWVtX2xpc3QzKSwKLQkJCQkJR0ZQX0tFUk5FTCwgbm9kZSkpKQorCQlsMyA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGttZW1fbGlzdDMpLCBHRlBfS0VSTkVMLCBub2RlKTsKKwkJaWYgKCFsMykgeworCQkJZnJlZV9hbGllbl9jYWNoZShuZXdfYWxpZW4pOworCQkJa2ZyZWUobmV3X3NoYXJlZCk7CiAJCQlnb3RvIGZhaWw7CisJCX0KIAogCQlrbWVtX2xpc3QzX2luaXQobDMpOwogCQlsMy0+bmV4dF9yZWFwID0gamlmZmllcyArIFJFQVBUSU1FT1VUX0xJU1QzICsKLQkJICAgICgodW5zaWduZWQgbG9uZyljYWNoZXApICUgUkVBUFRJTUVPVVRfTElTVDM7Ci0JCWwzLT5zaGFyZWQgPSBuZXc7CisJCQkJKCh1bnNpZ25lZCBsb25nKWNhY2hlcCkgJSBSRUFQVElNRU9VVF9MSVNUMzsKKwkJbDMtPnNoYXJlZCA9IG5ld19zaGFyZWQ7CiAJCWwzLT5hbGllbiA9IG5ld19hbGllbjsKIAkJbDMtPmZyZWVfbGltaXQgPSAoMSArIG5yX2NwdXNfbm9kZShub2RlKSkgKgotCQkgICAgY2FjaGVwLT5iYXRjaGNvdW50ICsgY2FjaGVwLT5udW07CisJCQkJCWNhY2hlcC0+YmF0Y2hjb3VudCArIGNhY2hlcC0+bnVtOwogCQljYWNoZXAtPm5vZGVsaXN0c1tub2RlXSA9IGwzOwogCX0KLQlyZXR1cm4gZXJyOwotICAgICAgZmFpbDoKLQllcnIgPSAtRU5PTUVNOwotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJaWYgKCFjYWNoZXAtPm5leHQubmV4dCkgeworCQkvKiBDYWNoZSBpcyBub3QgYWN0aXZlIHlldC4gUm9sbCBiYWNrIHdoYXQgd2UgZGlkICovCisJCW5vZGUtLTsKKwkJd2hpbGUgKG5vZGUgPj0gMCkgeworCQkJaWYgKGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdKSB7CisJCQkJbDMgPSBjYWNoZXAtPm5vZGVsaXN0c1tub2RlXTsKKworCQkJCWtmcmVlKGwzLT5zaGFyZWQpOworCQkJCWZyZWVfYWxpZW5fY2FjaGUobDMtPmFsaWVuKTsKKwkJCQlrZnJlZShsMyk7CisJCQkJY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0gPSBOVUxMOworCQkJfQorCQkJbm9kZS0tOworCQl9CisJfQorCXJldHVybiAtRU5PTUVNOwogfQogCiBzdHJ1Y3QgY2N1cGRhdGVfc3RydWN0IHsKQEAgLTMzMjgsNyArMzUwNyw3IEBACiAKIHN0YXRpYyB2b2lkIGRvX2NjdXBkYXRlX2xvY2FsKHZvaWQgKmluZm8pCiB7Ci0Jc3RydWN0IGNjdXBkYXRlX3N0cnVjdCAqbmV3ID0gKHN0cnVjdCBjY3VwZGF0ZV9zdHJ1Y3QgKilpbmZvOworCXN0cnVjdCBjY3VwZGF0ZV9zdHJ1Y3QgKm5ldyA9IGluZm87CiAJc3RydWN0IGFycmF5X2NhY2hlICpvbGQ7CiAKIAljaGVja19pcnFfb2ZmKCk7CkBAIC0zMzM4LDE2ICszNTE3LDE3IEBACiAJbmV3LT5uZXdbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IG9sZDsKIH0KIAotc3RhdGljIGludCBkb190dW5lX2NwdWNhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGludCBsaW1pdCwgaW50IGJhdGNoY291bnQsCi0JCQkgICAgaW50IHNoYXJlZCkKKy8qIEFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgY2FjaGVfY2hhaW5fbXV0ZXggaGVsZCAqLworc3RhdGljIGludCBkb190dW5lX2NwdWNhY2hlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGludCBsaW1pdCwKKwkJCQlpbnQgYmF0Y2hjb3VudCwgaW50IHNoYXJlZCkKIHsKIAlzdHJ1Y3QgY2N1cGRhdGVfc3RydWN0IG5ldzsKIAlpbnQgaSwgZXJyOwogCiAJbWVtc2V0KCZuZXcubmV3LCAwLCBzaXplb2YobmV3Lm5ldykpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQluZXcubmV3W2ldID0KLQkJICAgIGFsbG9jX2FycmF5Y2FjaGUoY3B1X3RvX25vZGUoaSksIGxpbWl0LCBiYXRjaGNvdW50KTsKKwkJbmV3Lm5ld1tpXSA9IGFsbG9jX2FycmF5Y2FjaGUoY3B1X3RvX25vZGUoaSksIGxpbWl0LAorCQkJCQkJYmF0Y2hjb3VudCk7CiAJCWlmICghbmV3Lm5ld1tpXSkgewogCQkJZm9yIChpLS07IGkgPj0gMDsgaS0tKQogCQkJCWtmcmVlKG5ldy5uZXdbaV0pOwpAQCAtMzM1NiwxNCArMzUzNiwxMiBAQAogCX0KIAluZXcuY2FjaGVwID0gY2FjaGVwOwogCi0Jc21wX2NhbGxfZnVuY3Rpb25fYWxsX2NwdXMoZG9fY2N1cGRhdGVfbG9jYWwsICh2b2lkICopJm5ldyk7CisJb25fZWFjaF9jcHUoZG9fY2N1cGRhdGVfbG9jYWwsICh2b2lkICopJm5ldywgMSwgMSk7CiAKIAljaGVja19pcnFfb24oKTsKLQlzcGluX2xvY2soJmNhY2hlcC0+c3BpbmxvY2spOwogCWNhY2hlcC0+YmF0Y2hjb3VudCA9IGJhdGNoY291bnQ7CiAJY2FjaGVwLT5saW1pdCA9IGxpbWl0OwogCWNhY2hlcC0+c2hhcmVkID0gc2hhcmVkOwotCXNwaW5fdW5sb2NrKCZjYWNoZXAtPnNwaW5sb2NrKTsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmNjb2xkID0gbmV3Lm5ld1tpXTsKQEAgLTMzODQsMTUgKzM1NjIsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogQ2FsbGVkIHdpdGggY2FjaGVfY2hhaW5fbXV0ZXggaGVsZCBhbHdheXMgKi8KIHN0YXRpYyB2b2lkIGVuYWJsZV9jcHVjYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQogewogCWludCBlcnI7CiAJaW50IGxpbWl0LCBzaGFyZWQ7CiAKLQkvKiBUaGUgaGVhZCBhcnJheSBzZXJ2ZXMgdGhyZWUgcHVycG9zZXM6CisJLyoKKwkgKiBUaGUgaGVhZCBhcnJheSBzZXJ2ZXMgdGhyZWUgcHVycG9zZXM6CiAJICogLSBjcmVhdGUgYSBMSUZPIG9yZGVyaW5nLCBpLmUuIHJldHVybiBvYmplY3RzIHRoYXQgYXJlIGNhY2hlLXdhcm0KIAkgKiAtIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNwaW5sb2NrIG9wZXJhdGlvbnMuCi0JICogLSByZWR1Y2UgdGhlIG51bWJlciBvZiBsaW5rZWQgbGlzdCBvcGVyYXRpb25zIG9uIHRoZSBzbGFiIGFuZCAKKwkgKiAtIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxpbmtlZCBsaXN0IG9wZXJhdGlvbnMgb24gdGhlIHNsYWIgYW5kCiAJICogICBidWZjdGwgY2hhaW5zOiBhcnJheSBvcGVyYXRpb25zIGFyZSBjaGVhcGVyLgogCSAqIFRoZSBudW1iZXJzIGFyZSBndWVzc2VkLCB3ZSBzaG91bGQgYXV0by10dW5lIGFzIGRlc2NyaWJlZCBieQogCSAqIEJvbndpY2suCkBAIC0zNDA4LDcgKzM1ODgsOCBAQAogCWVsc2UKIAkJbGltaXQgPSAxMjA7CiAKLQkvKiBDcHUgYm91bmQgdGFza3MgKGUuZy4gbmV0d29yayByb3V0aW5nKSBjYW4gZXhoaWJpdCBjcHUgYm91bmQKKwkvKgorCSAqIENQVSBib3VuZCB0YXNrcyAoZS5nLiBuZXR3b3JrIHJvdXRpbmcpIGNhbiBleGhpYml0IGNwdSBib3VuZAogCSAqIGFsbG9jYXRpb24gYmVoYXZpb3VyOiBNb3N0IGFsbG9jcyBvbiBvbmUgY3B1LCBtb3N0IGZyZWUgb3BlcmF0aW9ucwogCSAqIG9uIGFub3RoZXIgY3B1LiBGb3IgdGhlc2UgY2FzZXMsIGFuIGVmZmljaWVudCBvYmplY3QgcGFzc2luZyBiZXR3ZWVuCiAJICogY3B1cyBpcyBuZWNlc3NhcnkuIFRoaXMgaXMgcHJvdmlkZWQgYnkgYSBzaGFyZWQgYXJyYXkuIFRoZSBhcnJheQpAQCAtMzQyMyw5ICszNjA0LDkgQEAKICNlbmRpZgogCiAjaWYgREVCVUcKLQkvKiBXaXRoIGRlYnVnZ2luZyBlbmFibGVkLCBsYXJnZSBiYXRjaGNvdW50IGxlYWQgdG8gZXhjZXNzaXZlbHkKLQkgKiBsb25nIHBlcmlvZHMgd2l0aCBkaXNhYmxlZCBsb2NhbCBpbnRlcnJ1cHRzLiBMaW1pdCB0aGUgCi0JICogYmF0Y2hjb3VudAorCS8qCisJICogV2l0aCBkZWJ1Z2dpbmcgZW5hYmxlZCwgbGFyZ2UgYmF0Y2hjb3VudCBsZWFkIHRvIGV4Y2Vzc2l2ZWx5IGxvbmcKKwkgKiBwZXJpb2RzIHdpdGggZGlzYWJsZWQgbG9jYWwgaW50ZXJydXB0cy4gTGltaXQgdGhlIGJhdGNoY291bnQKIAkgKi8KIAlpZiAobGltaXQgPiAzMikKIAkJbGltaXQgPSAzMjsKQEAgLTM0MzYsMjMgKzM2MTcsMzIgQEAKIAkJICAgICAgIGNhY2hlcC0+bmFtZSwgLWVycik7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYWluX2FycmF5X2xvY2tlZChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjLAotCQkJCWludCBmb3JjZSwgaW50IG5vZGUpCisvKgorICogRHJhaW4gYW4gYXJyYXkgaWYgaXQgY29udGFpbnMgYW55IGVsZW1lbnRzIHRha2luZyB0aGUgbDMgbG9jayBvbmx5IGlmCisgKiBuZWNlc3NhcnkuIE5vdGUgdGhhdCB0aGUgbDMgbGlzdGxvY2sgYWxzbyBwcm90ZWN0cyB0aGUgYXJyYXlfY2FjaGUKKyAqIGlmIGRyYWluX2FycmF5KCkgaXMgdXNlZCBvbiB0aGUgc2hhcmVkIGFycmF5LgorICovCit2b2lkIGRyYWluX2FycmF5KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHN0cnVjdCBrbWVtX2xpc3QzICpsMywKKwkJCSBzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjLCBpbnQgZm9yY2UsIGludCBub2RlKQogewogCWludCB0b2ZyZWU7CiAKLQljaGVja19zcGlubG9ja19hY3F1aXJlZF9ub2RlKGNhY2hlcCwgbm9kZSk7CisJaWYgKCFhYyB8fCAhYWMtPmF2YWlsKQorCQlyZXR1cm47CiAJaWYgKGFjLT50b3VjaGVkICYmICFmb3JjZSkgewogCQlhYy0+dG91Y2hlZCA9IDA7Ci0JfSBlbHNlIGlmIChhYy0+YXZhaWwpIHsKLQkJdG9mcmVlID0gZm9yY2UgPyBhYy0+YXZhaWwgOiAoYWMtPmxpbWl0ICsgNCkgLyA1OwotCQlpZiAodG9mcmVlID4gYWMtPmF2YWlsKSB7Ci0JCQl0b2ZyZWUgPSAoYWMtPmF2YWlsICsgMSkgLyAyOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnEoJmwzLT5saXN0X2xvY2spOworCQlpZiAoYWMtPmF2YWlsKSB7CisJCQl0b2ZyZWUgPSBmb3JjZSA/IGFjLT5hdmFpbCA6IChhYy0+bGltaXQgKyA0KSAvIDU7CisJCQlpZiAodG9mcmVlID4gYWMtPmF2YWlsKQorCQkJCXRvZnJlZSA9IChhYy0+YXZhaWwgKyAxKSAvIDI7CisJCQlmcmVlX2Jsb2NrKGNhY2hlcCwgYWMtPmVudHJ5LCB0b2ZyZWUsIG5vZGUpOworCQkJYWMtPmF2YWlsIC09IHRvZnJlZTsKKwkJCW1lbW1vdmUoYWMtPmVudHJ5LCAmKGFjLT5lbnRyeVt0b2ZyZWVdKSwKKwkJCQlzaXplb2Yodm9pZCAqKSAqIGFjLT5hdmFpbCk7CiAJCX0KLQkJZnJlZV9ibG9jayhjYWNoZXAsIGFjLT5lbnRyeSwgdG9mcmVlLCBub2RlKTsKLQkJYWMtPmF2YWlsIC09IHRvZnJlZTsKLQkJbWVtbW92ZShhYy0+ZW50cnksICYoYWMtPmVudHJ5W3RvZnJlZV0pLAotCQkJc2l6ZW9mKHZvaWQgKikgKiBhYy0+YXZhaWwpOworCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwogCX0KIH0KIApAQCAtMzQ2NSwxMyArMzY1NSwxNCBAQAogICogLSBjbGVhciB0aGUgcGVyLWNwdSBjYWNoZXMgZm9yIHRoaXMgQ1BVLgogICogLSByZXR1cm4gZnJlZWFibGUgcGFnZXMgdG8gdGhlIG1haW4gZnJlZSBtZW1vcnkgcG9vbC4KICAqCi0gKiBJZiB3ZSBjYW5ub3QgYWNxdWlyZSB0aGUgY2FjaGUgY2hhaW4gbXV0ZXggdGhlbiBqdXN0IGdpdmUgdXAgLSB3ZSdsbAotICogdHJ5IGFnYWluIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKyAqIElmIHdlIGNhbm5vdCBhY3F1aXJlIHRoZSBjYWNoZSBjaGFpbiBtdXRleCB0aGVuIGp1c3QgZ2l2ZSB1cCAtIHdlJ2xsIHRyeQorICogYWdhaW4gb24gdGhlIG5leHQgaXRlcmF0aW9uLgogICovCiBzdGF0aWMgdm9pZCBjYWNoZV9yZWFwKHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp3YWxrOwogCXN0cnVjdCBrbWVtX2xpc3QzICpsMzsKKwlpbnQgbm9kZSA9IG51bWFfbm9kZV9pZCgpOwogCiAJaWYgKCFtdXRleF90cnlsb2NrKCZjYWNoZV9jaGFpbl9tdXRleCkpIHsKIAkJLyogR2l2ZSB1cC4gU2V0dXAgdGhlIG5leHQgaXRlcmF0aW9uLiAqLwpAQCAtMzQ4Nyw2NiArMzY3OCw3MiBAQAogCQlzdHJ1Y3Qgc2xhYiAqc2xhYnA7CiAKIAkJc2VhcmNocCA9IGxpc3RfZW50cnkod2Fsaywgc3RydWN0IGttZW1fY2FjaGUsIG5leHQpOwotCi0JCWlmIChzZWFyY2hwLT5mbGFncyAmIFNMQUJfTk9fUkVBUCkKLQkJCWdvdG8gbmV4dDsKLQogCQljaGVja19pcnFfb24oKTsKIAotCQlsMyA9IHNlYXJjaHAtPm5vZGVsaXN0c1tudW1hX25vZGVfaWQoKV07Ci0JCWlmIChsMy0+YWxpZW4pCi0JCQlkcmFpbl9hbGllbl9jYWNoZShzZWFyY2hwLCBsMy0+YWxpZW4pOwotCQlzcGluX2xvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKKwkJLyoKKwkJICogV2Ugb25seSB0YWtlIHRoZSBsMyBsb2NrIGlmIGFic29sdXRlbHkgbmVjZXNzYXJ5IGFuZCB3ZQorCQkgKiBoYXZlIGVzdGFibGlzaGVkIHdpdGggcmVhc29uYWJsZSBjZXJ0YWludHkgdGhhdAorCQkgKiB3ZSBjYW4gZG8gc29tZSB3b3JrIGlmIHRoZSBsb2NrIHdhcyBvYnRhaW5lZC4KKwkJICovCisJCWwzID0gc2VhcmNocC0+bm9kZWxpc3RzW25vZGVdOwogCi0JCWRyYWluX2FycmF5X2xvY2tlZChzZWFyY2hwLCBjcHVfY2FjaGVfZ2V0KHNlYXJjaHApLCAwLAotCQkJCSAgIG51bWFfbm9kZV9pZCgpKTsKKwkJcmVhcF9hbGllbihzZWFyY2hwLCBsMyk7CiAKKwkJZHJhaW5fYXJyYXkoc2VhcmNocCwgbDMsIGNwdV9jYWNoZV9nZXQoc2VhcmNocCksIDAsIG5vZGUpOworCisJCS8qCisJCSAqIFRoZXNlIGFyZSByYWN5IGNoZWNrcyBidXQgaXQgZG9lcyBub3QgbWF0dGVyCisJCSAqIGlmIHdlIHNraXAgb25lIGNoZWNrIG9yIHNjYW4gdHdpY2UuCisJCSAqLwogCQlpZiAodGltZV9hZnRlcihsMy0+bmV4dF9yZWFwLCBqaWZmaWVzKSkKLQkJCWdvdG8gbmV4dF91bmxvY2s7CisJCQlnb3RvIG5leHQ7CiAKIAkJbDMtPm5leHRfcmVhcCA9IGppZmZpZXMgKyBSRUFQVElNRU9VVF9MSVNUMzsKIAotCQlpZiAobDMtPnNoYXJlZCkKLQkJCWRyYWluX2FycmF5X2xvY2tlZChzZWFyY2hwLCBsMy0+c2hhcmVkLCAwLAotCQkJCQkgICBudW1hX25vZGVfaWQoKSk7CisJCWRyYWluX2FycmF5KHNlYXJjaHAsIGwzLCBsMy0+c2hhcmVkLCAwLCBub2RlKTsKIAogCQlpZiAobDMtPmZyZWVfdG91Y2hlZCkgewogCQkJbDMtPmZyZWVfdG91Y2hlZCA9IDA7Ci0JCQlnb3RvIG5leHRfdW5sb2NrOworCQkJZ290byBuZXh0OwogCQl9CiAKLQkJdG9mcmVlID0KLQkJICAgIChsMy0+ZnJlZV9saW1pdCArIDUgKiBzZWFyY2hwLT5udW0gLQotCQkgICAgIDEpIC8gKDUgKiBzZWFyY2hwLT5udW0pOworCQl0b2ZyZWUgPSAobDMtPmZyZWVfbGltaXQgKyA1ICogc2VhcmNocC0+bnVtIC0gMSkgLworCQkJCSg1ICogc2VhcmNocC0+bnVtKTsKIAkJZG8gewotCQkJcCA9IGwzLT5zbGFic19mcmVlLm5leHQ7Ci0JCQlpZiAocCA9PSAmKGwzLT5zbGFic19mcmVlKSkKKwkJCS8qCisJCQkgKiBEbyBub3QgbG9jayBpZiB0aGVyZSBhcmUgbm8gZnJlZSBibG9ja3MuCisJCQkgKi8KKwkJCWlmIChsaXN0X2VtcHR5KCZsMy0+c2xhYnNfZnJlZSkpCiAJCQkJYnJlYWs7CiAKKwkJCXNwaW5fbG9ja19pcnEoJmwzLT5saXN0X2xvY2spOworCQkJcCA9IGwzLT5zbGFic19mcmVlLm5leHQ7CisJCQlpZiAocCA9PSAmKGwzLT5zbGFic19mcmVlKSkgeworCQkJCXNwaW5fdW5sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJCXNsYWJwID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3Qgc2xhYiwgbGlzdCk7CiAJCQlCVUdfT04oc2xhYnAtPmludXNlKTsKIAkJCWxpc3RfZGVsKCZzbGFicC0+bGlzdCk7CiAJCQlTVEFUU19JTkNfUkVBUEVEKHNlYXJjaHApOwogCi0JCQkvKiBTYWZlIHRvIGRyb3AgdGhlIGxvY2suIFRoZSBzbGFiIGlzIG5vIGxvbmdlcgotCQkJICogbGlua2VkIHRvIHRoZSBjYWNoZS4KLQkJCSAqIHNlYXJjaHAgY2Fubm90IGRpc2FwcGVhciwgd2UgaG9sZAorCQkJLyoKKwkJCSAqIFNhZmUgdG8gZHJvcCB0aGUgbG9jay4gVGhlIHNsYWIgaXMgbm8gbG9uZ2VyIGxpbmtlZAorCQkJICogdG8gdGhlIGNhY2hlLiBzZWFyY2hwIGNhbm5vdCBkaXNhcHBlYXIsIHdlIGhvbGQKIAkJCSAqIGNhY2hlX2NoYWluX2xvY2sKIAkJCSAqLwogCQkJbDMtPmZyZWVfb2JqZWN0cyAtPSBzZWFyY2hwLT5udW07CiAJCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwogCQkJc2xhYl9kZXN0cm95KHNlYXJjaHAsIHNsYWJwKTsKLQkJCXNwaW5fbG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwogCQl9IHdoaWxlICgtLXRvZnJlZSA+IDApOwotCSAgICAgIG5leHRfdW5sb2NrOgotCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwotCSAgICAgIG5leHQ6CituZXh0OgogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJY2hlY2tfaXJxX29uKCk7CiAJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7Ci0JZHJhaW5fcmVtb3RlX3BhZ2VzKCk7Ci0JLyogU2V0dXAgdGhlIG5leHQgaXRlcmF0aW9uICovCisJbmV4dF9yZWFwX25vZGUoKTsKKwkvKiBTZXQgdXAgdGhlIG5leHQgaXRlcmF0aW9uICovCiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZfX2dldF9jcHVfdmFyKHJlYXBfd29yayksIFJFQVBUSU1FT1VUX0NQVUMpOwogfQogCkBAIC0zNTk2LDggKzM3OTMsOCBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBwOwogCSsrKnBvczsKLQlyZXR1cm4gY2FjaGVwLT5uZXh0Lm5leHQgPT0gJmNhY2hlX2NoYWluID8gTlVMTAotCSAgICA6IGxpc3RfZW50cnkoY2FjaGVwLT5uZXh0Lm5leHQsIHN0cnVjdCBrbWVtX2NhY2hlLCBuZXh0KTsKKwlyZXR1cm4gY2FjaGVwLT5uZXh0Lm5leHQgPT0gJmNhY2hlX2NoYWluID8KKwkJTlVMTCA6IGxpc3RfZW50cnkoY2FjaGVwLT5uZXh0Lm5leHQsIHN0cnVjdCBrbWVtX2NhY2hlLCBuZXh0KTsKIH0KIAogc3RhdGljIHZvaWQgc19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKQEAgLTM2MTksNyArMzgxNiw2IEBACiAJaW50IG5vZGU7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzOwogCi0Jc3Bpbl9sb2NrKCZjYWNoZXAtPnNwaW5sb2NrKTsKIAlhY3RpdmVfb2JqcyA9IDA7CiAJbnVtX3NsYWJzID0gMDsKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CkBAIC0zNjg2LDcgKzM4ODIsOSBAQAogCQl1bnNpZ25lZCBsb25nIG5vZGVfZnJlZXMgPSBjYWNoZXAtPm5vZGVfZnJlZXM7CiAKIAkJc2VxX3ByaW50ZihtLCAiIDogZ2xvYmFsc3RhdCAlN2x1ICU2bHUgJTVsdSAlNGx1IFwKLQkJCQklNGx1ICU0bHUgJTRsdSAlNGx1IiwgYWxsb2NzLCBoaWdoLCBncm93biwgcmVhcGVkLCBlcnJvcnMsIG1heF9mcmVlYWJsZSwgbm9kZV9hbGxvY3MsIG5vZGVfZnJlZXMpOworCQkJCSU0bHUgJTRsdSAlNGx1ICU0bHUiLCBhbGxvY3MsIGhpZ2gsIGdyb3duLAorCQkJCXJlYXBlZCwgZXJyb3JzLCBtYXhfZnJlZWFibGUsIG5vZGVfYWxsb2NzLAorCQkJCW5vZGVfZnJlZXMpOwogCX0KIAkvKiBjcHUgc3RhdHMgKi8KIAl7CkBAIC0zNzAwLDcgKzM4OTgsNiBAQAogCX0KICNlbmRpZgogCXNlcV9wdXRjKG0sICdcbicpOwotCXNwaW5fdW5sb2NrKCZjYWNoZXAtPnNwaW5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc1OCwxMyArMzk1NSwxMiBAQAogCW11dGV4X2xvY2soJmNhY2hlX2NoYWluX211dGV4KTsKIAlyZXMgPSAtRUlOVkFMOwogCWxpc3RfZm9yX2VhY2gocCwgJmNhY2hlX2NoYWluKSB7Ci0JCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBrbWVtX2NhY2hlLAotCQkJCQkJICAgICAgIG5leHQpOworCQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwogCisJCWNhY2hlcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGttZW1fY2FjaGUsIG5leHQpOwogCQlpZiAoIXN0cmNtcChjYWNoZXAtPm5hbWUsIGtidWYpKSB7Ci0JCQlpZiAobGltaXQgPCAxIHx8Ci0JCQkgICAgYmF0Y2hjb3VudCA8IDEgfHwKLQkJCSAgICBiYXRjaGNvdW50ID4gbGltaXQgfHwgc2hhcmVkIDwgMCkgeworCQkJaWYgKGxpbWl0IDwgMSB8fCBiYXRjaGNvdW50IDwgMSB8fAorCQkJCQliYXRjaGNvdW50ID4gbGltaXQgfHwgc2hhcmVkIDwgMCkgewogCQkJCXJlcyA9IDA7CiAJCQl9IGVsc2UgewogCQkJCXJlcyA9IGRvX3R1bmVfY3B1Y2FjaGUoY2FjaGVwLCBsaW1pdCwKQEAgLTM3NzgsNiArMzk3NCwxNTkgQEAKIAkJcmVzID0gY291bnQ7CiAJcmV0dXJuIHJlczsKIH0KKworI2lmZGVmIENPTkZJR19ERUJVR19TTEFCX0xFQUsKKworc3RhdGljIHZvaWQgKmxlYWtzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJbG9mZl90IG4gPSAqcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwltdXRleF9sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CisJcCA9IGNhY2hlX2NoYWluLm5leHQ7CisJd2hpbGUgKG4tLSkgeworCQlwID0gcC0+bmV4dDsKKwkJaWYgKHAgPT0gJmNhY2hlX2NoYWluKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBsaXN0X2VudHJ5KHAsIHN0cnVjdCBrbWVtX2NhY2hlLCBuZXh0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWRkX2NhbGxlcih1bnNpZ25lZCBsb25nICpuLCB1bnNpZ25lZCBsb25nIHYpCit7CisJdW5zaWduZWQgbG9uZyAqcDsKKwlpbnQgbDsKKwlpZiAoIXYpCisJCXJldHVybiAxOworCWwgPSBuWzFdOworCXAgPSBuICsgMjsKKwl3aGlsZSAobCkgeworCQlpbnQgaSA9IGwvMjsKKwkJdW5zaWduZWQgbG9uZyAqcSA9IHAgKyAyICogaTsKKwkJaWYgKCpxID09IHYpIHsKKwkJCXFbMV0rKzsKKwkJCXJldHVybiAxOworCQl9CisJCWlmICgqcSA+IHYpIHsKKwkJCWwgPSBpOworCQl9IGVsc2UgeworCQkJcCA9IHEgKyAyOworCQkJbCAtPSBpICsgMTsKKwkJfQorCX0KKwlpZiAoKytuWzFdID09IG5bMF0pCisJCXJldHVybiAwOworCW1lbW1vdmUocCArIDIsIHAsIG5bMV0gKiAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gKCh2b2lkICopcCAtICh2b2lkICopbikpOworCXBbMF0gPSB2OworCXBbMV0gPSAxOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc2xhYih1bnNpZ25lZCBsb25nICpuLCBzdHJ1Y3Qga21lbV9jYWNoZSAqYywgc3RydWN0IHNsYWIgKnMpCit7CisJdm9pZCAqcDsKKwlpbnQgaTsKKwlpZiAoblswXSA9PSBuWzFdKQorCQlyZXR1cm47CisJZm9yIChpID0gMCwgcCA9IHMtPnNfbWVtOyBpIDwgYy0+bnVtOyBpKyssIHAgKz0gYy0+YnVmZmVyX3NpemUpIHsKKwkJaWYgKHNsYWJfYnVmY3RsKHMpW2ldICE9IEJVRkNUTF9BQ1RJVkUpCisJCQljb250aW51ZTsKKwkJaWYgKCFhZGRfY2FsbGVyKG4sICh1bnNpZ25lZCBsb25nKSpkYmdfdXNlcndvcmQoYywgcCkpKQorCQkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19zeW1ib2woc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisjaWZkZWYgQ09ORklHX0tBTExTWU1TCisJY2hhciAqbW9kbmFtZTsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplOworCWNoYXIgbmFtZWJ1ZltLU1lNX05BTUVfTEVOKzFdOworCisJbmFtZSA9IGthbGxzeW1zX2xvb2t1cChhZGRyZXNzLCAmc2l6ZSwgJm9mZnNldCwgJm1vZG5hbWUsIG5hbWVidWYpOworCisJaWYgKG5hbWUpIHsKKwkJc2VxX3ByaW50ZihtLCAiJXMrJSNseC8lI2x4IiwgbmFtZSwgb2Zmc2V0LCBzaXplKTsKKwkJaWYgKG1vZG5hbWUpCisJCQlzZXFfcHJpbnRmKG0sICIgWyVzXSIsIG1vZG5hbWUpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJc2VxX3ByaW50ZihtLCAiJXAiLCAodm9pZCAqKWFkZHJlc3MpOworfQorCitzdGF0aWMgaW50IGxlYWtzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBwOworCXN0cnVjdCBsaXN0X2hlYWQgKnE7CisJc3RydWN0IHNsYWIgKnNsYWJwOworCXN0cnVjdCBrbWVtX2xpc3QzICpsMzsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGxvbmcgKm4gPSBtLT5wcml2YXRlOworCWludCBub2RlOworCWludCBpOworCisJaWYgKCEoY2FjaGVwLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikpCisJCXJldHVybiAwOworCWlmICghKGNhY2hlcC0+ZmxhZ3MgJiBTTEFCX1JFRF9aT05FKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBPSywgd2UgY2FuIGRvIGl0ICovCisKKwluWzFdID0gMDsKKworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKKwkJbDMgPSBjYWNoZXAtPm5vZGVsaXN0c1tub2RlXTsKKwkJaWYgKCFsMykKKwkJCWNvbnRpbnVlOworCisJCWNoZWNrX2lycV9vbigpOworCQlzcGluX2xvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKKworCQlsaXN0X2Zvcl9lYWNoKHEsICZsMy0+c2xhYnNfZnVsbCkgeworCQkJc2xhYnAgPSBsaXN0X2VudHJ5KHEsIHN0cnVjdCBzbGFiLCBsaXN0KTsKKwkJCWhhbmRsZV9zbGFiKG4sIGNhY2hlcCwgc2xhYnApOworCQl9CisJCWxpc3RfZm9yX2VhY2gocSwgJmwzLT5zbGFic19wYXJ0aWFsKSB7CisJCQlzbGFicCA9IGxpc3RfZW50cnkocSwgc3RydWN0IHNsYWIsIGxpc3QpOworCQkJaGFuZGxlX3NsYWIobiwgY2FjaGVwLCBzbGFicCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKKwl9CisJbmFtZSA9IGNhY2hlcC0+bmFtZTsKKwlpZiAoblswXSA9PSBuWzFdKSB7CisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgc2l6ZSAqLworCQltdXRleF91bmxvY2soJmNhY2hlX2NoYWluX211dGV4KTsKKwkJbS0+cHJpdmF0ZSA9IGt6YWxsb2MoblswXSAqIDQgKiBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCQlpZiAoIW0tPnByaXZhdGUpIHsKKwkJCS8qIFRvbyBiYWQsIHdlIGFyZSByZWFsbHkgb3V0ICovCisJCQltLT5wcml2YXRlID0gbjsKKwkJCW11dGV4X2xvY2soJmNhY2hlX2NoYWluX211dGV4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCSoodW5zaWduZWQgbG9uZyAqKW0tPnByaXZhdGUgPSBuWzBdICogMjsKKwkJa2ZyZWUobik7CisJCW11dGV4X2xvY2soJmNhY2hlX2NoYWluX211dGV4KTsKKwkJLyogTm93IG1ha2Ugc3VyZSB0aGlzIGVudHJ5IHdpbGwgYmUgcmV0cmllZCAqLworCQltLT5jb3VudCA9IG0tPnNpemU7CisJCXJldHVybiAwOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgblsxXTsgaSsrKSB7CisJCXNlcV9wcmludGYobSwgIiVzOiAlbHUgIiwgbmFtZSwgblsyKmkrM10pOworCQlzaG93X3N5bWJvbChtLCBuWzIqaSsyXSk7CisJCXNlcV9wdXRjKG0sICdcbicpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNlcV9vcGVyYXRpb25zIHNsYWJzdGF0c19vcCA9IHsKKwkuc3RhcnQgPSBsZWFrc19zdGFydCwKKwkubmV4dCA9IHNfbmV4dCwKKwkuc3RvcCA9IHNfc3RvcCwKKwkuc2hvdyA9IGxlYWtzX3Nob3csCit9OworI2VuZGlmCiAjZW5kaWYKIAogLyoqCmRpZmYgLS1naXQgYS9tbS9zbG9iLmMgYi9tbS9zbG9iLmMKaW5kZXggYTFmNDJiZC4uOWJjYzdlMiAxMDA2NDQKLS0tIGEvbW0vc2xvYi5jCisrKyBiL21tL3Nsb2IuYwpAQCAtMjk0LDYgKzI5NCwxNiBAQAogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTsKIAordm9pZCAqa21lbV9jYWNoZV96YWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmMsIGdmcF90IGZsYWdzKQoreworCXZvaWQgKnJldCA9IGttZW1fY2FjaGVfYWxsb2MoYywgZmxhZ3MpOworCWlmIChyZXQpCisJCW1lbXNldChyZXQsIDAsIGMtPnNpemUpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV96YWxsb2MpOworCiB2b2lkIGttZW1fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqYywgdm9pZCAqYikKIHsKIAlpZiAoYy0+ZHRvcikKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCBjY2UzZGRhLi45MWI3ZTIwIDEwMDY0NAotLS0gYS9tbS9zd2FwLmMKKysrIGIvbW0vc3dhcC5jCkBAIC0yMDksMTkgKzIwOSwxOCBAQAogICovCiB2b2lkIGZhc3RjYWxsIF9fcGFnZV9jYWNoZV9yZWxlYXNlKHN0cnVjdCBwYWdlICpwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisJaWYgKFBhZ2VMUlUocGFnZSkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bHJ1X2xvY2ssIGZsYWdzKTsKLQlpZiAoVGVzdENsZWFyUGFnZUxSVShwYWdlKSkKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CisJCUJVR19PTighUGFnZUxSVShwYWdlKSk7CisJCV9fQ2xlYXJQYWdlTFJVKHBhZ2UpOwogCQlkZWxfcGFnZV9mcm9tX2xydSh6b25lLCBwYWdlKTsKLQlpZiAocGFnZV9jb3VudChwYWdlKSAhPSAwKQotCQlwYWdlID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOwotCWlmIChwYWdlKQotCQlmcmVlX2hvdF9wYWdlKHBhZ2UpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6b25lLT5scnVfbG9jaywgZmxhZ3MpOworCX0KKwlmcmVlX2hvdF9wYWdlKHBhZ2UpOwogfQotCiBFWFBPUlRfU1lNQk9MKF9fcGFnZV9jYWNoZV9yZWxlYXNlKTsKIAogLyoKQEAgLTI0NSw3ICsyNDQsNiBAQAogCXBhZ2V2ZWNfaW5pdCgmcGFnZXNfdG9fZnJlZSwgY29sZCk7CiAJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tpXTsKLQkJc3RydWN0IHpvbmUgKnBhZ2V6b25lOwogCiAJCWlmICh1bmxpa2VseShQYWdlQ29tcG91bmQocGFnZSkpKSB7CiAJCQlpZiAoem9uZSkgewpAQCAtMjU5LDIzICsyNTcsMjcgQEAKIAkJaWYgKCFwdXRfcGFnZV90ZXN0emVybyhwYWdlKSkKIAkJCWNvbnRpbnVlOwogCi0JCXBhZ2V6b25lID0gcGFnZV96b25lKHBhZ2UpOwotCQlpZiAocGFnZXpvbmUgIT0gem9uZSkgewotCQkJaWYgKHpvbmUpCi0JCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCQl6b25lID0gcGFnZXpvbmU7Ci0JCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCX0KLQkJaWYgKFRlc3RDbGVhclBhZ2VMUlUocGFnZSkpCi0JCQlkZWxfcGFnZV9mcm9tX2xydSh6b25lLCBwYWdlKTsKLQkJaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMCkgewotCQkJaWYgKCFwYWdldmVjX2FkZCgmcGFnZXNfdG9fZnJlZSwgcGFnZSkpIHsKLQkJCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJCQlfX3BhZ2V2ZWNfZnJlZSgmcGFnZXNfdG9fZnJlZSk7Ci0JCQkJcGFnZXZlY19yZWluaXQoJnBhZ2VzX3RvX2ZyZWUpOwotCQkJCXpvbmUgPSBOVUxMOwkvKiBObyBsb2NrIGlzIGhlbGQgKi8KKwkJaWYgKFBhZ2VMUlUocGFnZSkpIHsKKwkJCXN0cnVjdCB6b25lICpwYWdlem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKKwkJCWlmIChwYWdlem9uZSAhPSB6b25lKSB7CisJCQkJaWYgKHpvbmUpCisJCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJCXpvbmUgPSBwYWdlem9uZTsKKwkJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJCQl9CisJCQlCVUdfT04oIVBhZ2VMUlUocGFnZSkpOworCQkJX19DbGVhclBhZ2VMUlUocGFnZSk7CisJCQlkZWxfcGFnZV9mcm9tX2xydSh6b25lLCBwYWdlKTsKIAkJfQorCisJCWlmICghcGFnZXZlY19hZGQoJnBhZ2VzX3RvX2ZyZWUsIHBhZ2UpKSB7CisJCQlpZiAoem9uZSkgeworCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJCXpvbmUgPSBOVUxMOworCQkJfQorCQkJX19wYWdldmVjX2ZyZWUoJnBhZ2VzX3RvX2ZyZWUpOworCQkJcGFnZXZlY19yZWluaXQoJnBhZ2VzX3RvX2ZyZWUpOworICAJCX0KIAl9CiAJaWYgKHpvbmUpCiAJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwpAQCAtMzQzLDggKzM0NSw4IEBACiAJCQl6b25lID0gcGFnZXpvbmU7CiAJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CiAJCX0KLQkJaWYgKFRlc3RTZXRQYWdlTFJVKHBhZ2UpKQotCQkJQlVHKCk7CisJCUJVR19PTihQYWdlTFJVKHBhZ2UpKTsKKwkJU2V0UGFnZUxSVShwYWdlKTsKIAkJYWRkX3BhZ2VfdG9faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKIAl9CiAJaWYgKHpvbmUpCkBAIC0zNzAsMTAgKzM3MiwxMCBAQAogCQkJem9uZSA9IHBhZ2V6b25lOwogCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCQl9Ci0JCWlmIChUZXN0U2V0UGFnZUxSVShwYWdlKSkKLQkJCUJVRygpOwotCQlpZiAoVGVzdFNldFBhZ2VBY3RpdmUocGFnZSkpCi0JCQlCVUcoKTsKKwkJQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCQlTZXRQYWdlTFJVKHBhZ2UpOworCQlCVUdfT04oUGFnZUFjdGl2ZShwYWdlKSk7CisJCVNldFBhZ2VBY3RpdmUocGFnZSk7CiAJCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwogCX0KIAlpZiAoem9uZSkKQEAgLTM5Myw3ICszOTUsOCBAQAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMtPnBhZ2VzW2ldOwogCiAJCWlmIChQYWdlUHJpdmF0ZShwYWdlKSAmJiAhVGVzdFNldFBhZ2VMb2NrZWQocGFnZSkpIHsKLQkJCXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgMCk7CisJCQlpZiAoUGFnZVByaXZhdGUocGFnZSkpCisJCQkJdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCAwKTsKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQl9CiAJfQpAQCAtNDg5LDEzICs0OTIsMzQgQEAKIAlpZiAoY291bnQgPj0gRkJDX0JBVENIIHx8IGNvdW50IDw9IC1GQkNfQkFUQ0gpIHsKIAkJc3Bpbl9sb2NrKCZmYmMtPmxvY2spOwogCQlmYmMtPmNvdW50ICs9IGNvdW50OworCQkqcGNvdW50ID0gMDsKIAkJc3Bpbl91bmxvY2soJmZiYy0+bG9jayk7Ci0JCWNvdW50ID0gMDsKKwl9IGVsc2UgeworCQkqcGNvdW50ID0gY291bnQ7CiAJfQotCSpwY291bnQgPSBjb3VudDsKIAlwdXRfY3B1KCk7CiB9CiBFWFBPUlRfU1lNQk9MKHBlcmNwdV9jb3VudGVyX21vZCk7CisKKy8qCisgKiBBZGQgdXAgYWxsIHRoZSBwZXItY3B1IGNvdW50cywgcmV0dXJuIHRoZSByZXN1bHQuICBUaGlzIGlzIGEgbW9yZSBhY2N1cmF0ZQorICogYnV0IG11Y2ggc2xvd2VyIHZlcnNpb24gb2YgcGVyY3B1X2NvdW50ZXJfcmVhZF9wb3NpdGl2ZSgpCisgKi8KK2xvbmcgcGVyY3B1X2NvdW50ZXJfc3VtKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKQoreworCWxvbmcgcmV0OworCWludCBjcHU7CisKKwlzcGluX2xvY2soJmZiYy0+bG9jayk7CisJcmV0ID0gZmJjLT5jb3VudDsKKwlmb3JfZWFjaF9jcHUoY3B1KSB7CisJCWxvbmcgKnBjb3VudCA9IHBlcl9jcHVfcHRyKGZiYy0+Y291bnRlcnMsIGNwdSk7CisJCXJldCArPSAqcGNvdW50OworCX0KKwlzcGluX3VubG9jaygmZmJjLT5sb2NrKTsKKwlyZXR1cm4gcmV0IDwgMCA/IDAgOiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHBlcmNwdV9jb3VudGVyX3N1bSk7CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCBkYjhhM2QzLi5kN2FmMjk2IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKKysrIGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9taWdyYXRlLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCAxZjljZjBkLi4zOWFhOWQxIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogc3RydWN0IHN3YXBfbGlzdF90IHN3YXBfbGlzdCA9IHstMSwgLTF9OwogCi1zdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCBzd2FwX2luZm9bTUFYX1NXQVBGSUxFU107CitzdGF0aWMgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qgc3dhcF9pbmZvW01BWF9TV0FQRklMRVNdOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHN3YXBvbl9tdXRleCk7CiAKQEAgLTExNiw3ICsxMTYsNyBAQAogCQkJCWxhc3RfaW5fY2x1c3RlciA9IG9mZnNldCArIFNXQVBGSUxFX0NMVVNURVI7CiAJCQllbHNlIGlmIChvZmZzZXQgPT0gbGFzdF9pbl9jbHVzdGVyKSB7CiAJCQkJc3Bpbl9sb2NrKCZzd2FwX2xvY2spOwotCQkJCXNpLT5jbHVzdGVyX25leHQgPSBvZmZzZXQtU1dBUEZJTEVfQ0xVU1RFUi0xOworCQkJCXNpLT5jbHVzdGVyX25leHQgPSBvZmZzZXQtU1dBUEZJTEVfQ0xVU1RFUisxOwogCQkJCWdvdG8gY2x1c3RlcjsKIAkJCX0KIAkJCWlmICh1bmxpa2VseSgtLWxhdGVuY3lfcmF0aW9uIDwgMCkpIHsKQEAgLTQxNyw2ICs0MTcsNjEgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfU09GVFdBUkVfU1VTUEVORAorLyoKKyAqIEZpbmQgdGhlIHN3YXAgdHlwZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGdpdmVuIGRldmljZSAoaWYgYW55KQorICoKKyAqIFRoaXMgaXMgbmVlZGVkIGZvciBzb2Z0d2FyZSBzdXNwZW5kIGFuZCBpcyBkb25lIGluIHN1Y2ggYSB3YXkgdGhhdCBpbm9kZQorICogYWxpYXNpbmcgaXMgYWxsb3dlZC4KKyAqLworaW50IHN3YXBfdHlwZV9vZihkZXZfdCBkZXZpY2UpCit7CisJaW50IGk7CisKKwlzcGluX2xvY2soJnN3YXBfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IG5yX3N3YXBmaWxlczsgaSsrKSB7CisJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwkJaWYgKCEoc3dhcF9pbmZvW2ldLmZsYWdzICYgU1dQX1dSSVRFT0spKQorCQkJY29udGludWU7CisJCWlmICghZGV2aWNlKSB7CisJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKKwkJCXJldHVybiBpOworCQl9CisJCWlub2RlID0gc3dhcF9pbmZvLT5zd2FwX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCQlpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSAmJgorCQkgICAgZGV2aWNlID09IE1LREVWKGltYWpvcihpbm9kZSksIGltaW5vcihpbm9kZSkpKSB7CisJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKKwkJCXJldHVybiBpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOworCXJldHVybiAtRU5PREVWOworfQorCisvKgorICogUmV0dXJuIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIHN3YXAgcGFnZXMgb2YgZ2l2ZW4gdHlwZSwgb3IgdGhlIG51bWJlcgorICogb2YgZnJlZSBwYWdlcyBvZiB0aGF0IHR5cGUgKGRlcGVuZGluZyBvbiBAZnJlZSkKKyAqCisgKiBUaGlzIGlzIG5lZWRlZCBmb3Igc29mdHdhcmUgc3VzcGVuZAorICovCit1bnNpZ25lZCBpbnQgY291bnRfc3dhcF9wYWdlcyhpbnQgdHlwZSwgaW50IGZyZWUpCit7CisJdW5zaWduZWQgaW50IG4gPSAwOworCisJaWYgKHR5cGUgPCBucl9zd2FwZmlsZXMpIHsKKwkJc3Bpbl9sb2NrKCZzd2FwX2xvY2spOworCQlpZiAoc3dhcF9pbmZvW3R5cGVdLmZsYWdzICYgU1dQX1dSSVRFT0spIHsKKwkJCW4gPSBzd2FwX2luZm9bdHlwZV0ucGFnZXM7CisJCQlpZiAoZnJlZSkKKwkJCQluIC09IHN3YXBfaW5mb1t0eXBlXS5pbnVzZV9wYWdlczsKKwkJfQorCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKKwl9CisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwogLyoKICAqIE5vIG5lZWQgdG8gZGVjaWRlIHdoZXRoZXIgdGhpcyBQVEUgc2hhcmVzIHRoZSBzd2FwIGVudHJ5IHdpdGggb3RoZXJzLAogICoganVzdCBsZXQgZG9fd3BfcGFnZSB3b3JrIGl0IG91dCBpZiBhIHdyaXRlIGlzIHJlcXVlc3RlZCBsYXRlciAtIHRvCmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmMKaW5kZXggNWY0YmI1OS4uNzM2ODQ3OTIgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYworKysgYi9tbS91dGlsLmMKQEAgLTEsMjAgKzEsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogLyoqCi0gKiBremFsbG9jIC0gYWxsb2NhdGUgbWVtb3J5LiBUaGUgbWVtb3J5IGlzIHNldCB0byB6ZXJvLgorICogX19remFsbG9jIC0gYWxsb2NhdGUgbWVtb3J5LiBUaGUgbWVtb3J5IGlzIHNldCB0byB6ZXJvLgogICogQHNpemU6IGhvdyBtYW55IGJ5dGVzIG9mIG1lbW9yeSBhcmUgcmVxdWlyZWQuCiAgKiBAZmxhZ3M6IHRoZSB0eXBlIG9mIG1lbW9yeSB0byBhbGxvY2F0ZS4KICAqLwotdm9pZCAqa3phbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCit2b2lkICpfX2t6YWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewotCXZvaWQgKnJldCA9IGttYWxsb2Moc2l6ZSwgZmxhZ3MpOworCXZvaWQgKnJldCA9IF9fX19rbWFsbG9jKHNpemUsIGZsYWdzKTsKIAlpZiAocmV0KQogCQltZW1zZXQocmV0LCAwLCBzaXplKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChremFsbG9jKTsKK0VYUE9SVF9TWU1CT0woX19remFsbG9jKTsKIAogLyoKICAqIGtzdHJkdXAgLSBhbGxvY2F0ZSBzcGFjZSBmb3IgYW5kIGNvcHkgYW4gZXhpc3Rpbmcgc3RyaW5nCkBAIC0zMSw5ICszMyw0NCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWxlbiA9IHN0cmxlbihzKSArIDE7Ci0JYnVmID0ga21hbGxvYyhsZW4sIGdmcCk7CisJYnVmID0gX19fX2ttYWxsb2MobGVuLCBnZnApOwogCWlmIChidWYpCiAJCW1lbWNweShidWYsIHMsIGxlbik7CiAJcmV0dXJuIGJ1ZjsKIH0KIEVYUE9SVF9TWU1CT0woa3N0cmR1cCk7CisKKy8qCisgKiBzdHJuZHVwX3VzZXIgLSBkdXBsaWNhdGUgYW4gZXhpc3Rpbmcgc3RyaW5nIGZyb20gdXNlciBzcGFjZQorICoKKyAqIEBzOiBUaGUgc3RyaW5nIHRvIGR1cGxpY2F0ZQorICogQG46IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLgorICovCitjaGFyICpzdHJuZHVwX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbikKK3sKKwljaGFyICpwOworCWxvbmcgbGVuZ3RoOworCisJbGVuZ3RoID0gc3Rybmxlbl91c2VyKHMsIG4pOworCisJaWYgKCFsZW5ndGgpCisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCisJaWYgKGxlbmd0aCA+IG4pCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJcCA9IGttYWxsb2MobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKworCWlmICghcCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIocCwgcywgbGVuZ3RoKSkgeworCQlrZnJlZShwKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJfQorCisJcFtsZW5ndGggLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gcDsKK30KK0VYUE9SVF9TWU1CT0woc3RybmR1cF91c2VyKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMTgzOGMxNS4uNzg4NjVjOCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTMzLDM5ICszMywyMSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CiAKLS8qIHBvc3NpYmxlIG91dGNvbWUgb2YgcGFnZW91dCgpICovCi10eXBlZGVmIGVudW0gewotCS8qIGZhaWxlZCB0byB3cml0ZSBwYWdlIG91dCwgcGFnZSBpcyBsb2NrZWQgKi8KLQlQQUdFX0tFRVAsCi0JLyogbW92ZSBwYWdlIHRvIHRoZSBhY3RpdmUgbGlzdCwgcGFnZSBpcyBsb2NrZWQgKi8KLQlQQUdFX0FDVElWQVRFLAotCS8qIHBhZ2UgaGFzIGJlZW4gc2VudCB0byB0aGUgZGlzayBzdWNjZXNzZnVsbHksIHBhZ2UgaXMgdW5sb2NrZWQgKi8KLQlQQUdFX1NVQ0NFU1MsCi0JLyogcGFnZSBpcyBjbGVhbiBhbmQgbG9ja2VkICovCi0JUEFHRV9DTEVBTiwKLX0gcGFnZW91dF90OworI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0cnVjdCBzY2FuX2NvbnRyb2wgewotCS8qIEFzayByZWZpbGxfaW5hY3RpdmVfem9uZSwgb3Igc2hyaW5rX2NhY2hlIHRvIHNjYW4gdGhpcyBtYW55IHBhZ2VzICovCi0JdW5zaWduZWQgbG9uZyBucl90b19zY2FuOwotCiAJLyogSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBpbmFjdGl2ZSBwYWdlcyB0aGF0IHdlcmUgc2Nhbm5lZCAqLwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKIAotCS8qIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgcGFnZXMgcmVjbGFpbWVkICovCi0JdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7Ci0KIAl1bnNpZ25lZCBsb25nIG5yX21hcHBlZDsJLyogRnJvbSBwYWdlX3N0YXRlICovCiAKLQkvKiBBc2sgc2hyaW5rX2NhY2hlcywgb3Igc2hyaW5rX3pvbmUgdG8gc2NhbiBhdCB0aGlzIHByaW9yaXR5ICovCi0JdW5zaWduZWQgaW50IHByaW9yaXR5OwotCiAJLyogVGhpcyBjb250ZXh0J3MgR0ZQIG1hc2sgKi8KIAlnZnBfdCBnZnBfbWFzazsKIApAQCAtMTgzLDEwICsxNjUsMTEgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2xhYiBvYmplY3RzIHdoaWNoIHdlIHNocnVuay4KICAqLwotaW50IHNocmlua19zbGFiKHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGxvbmcgbHJ1X3BhZ2VzKQordW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYih1bnNpZ25lZCBsb25nIHNjYW5uZWQsIGdmcF90IGdmcF9tYXNrLAorCQkJdW5zaWduZWQgbG9uZyBscnVfcGFnZXMpCiB7CiAJc3RydWN0IHNocmlua2VyICpzaHJpbmtlcjsKLQlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CiAKIAlpZiAoc2Nhbm5lZCA9PSAwKQogCQlzY2FubmVkID0gU1dBUF9DTFVTVEVSX01BWDsKQEAgLTMwNiw5ICsyODksMTAgQEAKIH0KIAogLyoKLSAqIHBhZ2VvdXQgaXMgY2FsbGVkIGJ5IHNocmlua19saXN0KCkgZm9yIGVhY2ggZGlydHkgcGFnZS4gQ2FsbHMgLT53cml0ZXBhZ2UoKS4KKyAqIHBhZ2VvdXQgaXMgY2FsbGVkIGJ5IHNocmlua19wYWdlX2xpc3QoKSBmb3IgZWFjaCBkaXJ0eSBwYWdlLgorICogQ2FsbHMgLT53cml0ZXBhZ2UoKS4KICAqLwotc3RhdGljIHBhZ2VvdXRfdCBwYWdlb3V0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3BhZ2VvdXRfdCBwYWdlb3V0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKIAkvKgogCSAqIElmIHRoZSBwYWdlIGlzIGRpcnR5LCBvbmx5IHBlcmZvcm0gd3JpdGViYWNrIGlmIHRoYXQgd3JpdGUKQEAgLTM3Niw3ICszNjAsNyBAQAogCXJldHVybiBQQUdFX0NMRUFOOwogfQogCi1zdGF0aWMgaW50IHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK2ludCByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJaWYgKCFtYXBwaW5nKQogCQlyZXR1cm4gMDsJCS8qIHRydW5jYXRlIGdvdCB0aGVyZSBmaXJzdCAqLwpAQCAtNDE0LDE0ICszOTgsMTUgQEAKIH0KIAogLyoKLSAqIHNocmlua19saXN0IGFkZHMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMgdG8gc2MtPm5yX3JlY2xhaW1lZAorICogc2hyaW5rX3BhZ2VfbGlzdCgpIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMKICAqLwotc3RhdGljIGludCBzaHJpbmtfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlX2xpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3BhZ2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlX2xpc3QsCisJCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCUxJU1RfSEVBRChyZXRfcGFnZXMpOwogCXN0cnVjdCBwYWdldmVjIGZyZWVkX3B2ZWM7CiAJaW50IHBnYWN0aXZhdGUgPSAwOwotCWludCByZWNsYWltZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKIAogCWNvbmRfcmVzY2hlZCgpOwogCkBAIC00NjQsMTIgKzQ0OSw5IEBACiAJCSAqIEFub255bW91cyBwcm9jZXNzIG1lbW9yeSBoYXMgYmFja2luZyBzdG9yZT8KIAkJICogVHJ5IHRvIGFsbG9jYXRlIGl0IHNvbWUgc3dhcCBzcGFjZSBoZXJlLgogCQkgKi8KLQkJaWYgKFBhZ2VBbm9uKHBhZ2UpICYmICFQYWdlU3dhcENhY2hlKHBhZ2UpKSB7Ci0JCQlpZiAoIXNjLT5tYXlfc3dhcCkKLQkJCQlnb3RvIGtlZXBfbG9ja2VkOworCQlpZiAoUGFnZUFub24ocGFnZSkgJiYgIVBhZ2VTd2FwQ2FjaGUocGFnZSkpCiAJCQlpZiAoIWFkZF90b19zd2FwKHBhZ2UsIEdGUF9BVE9NSUMpKQogCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwotCQl9CiAjZW5kaWYgLyogQ09ORklHX1NXQVAgKi8KIAogCQltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwpAQCAtNDgxLDEyICs0NjMsNiBAQAogCQkgKiBwcm9jZXNzZXMuIFRyeSB0byB1bm1hcCBpdCBoZXJlLgogCQkgKi8KIAkJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpICYmIG1hcHBpbmcpIHsKLQkJCS8qCi0JCQkgKiBObyB1bm1hcHBpbmcgaWYgd2UgZG8gbm90IHN3YXAKLQkJCSAqLwotCQkJaWYgKCFzYy0+bWF5X3N3YXApCi0JCQkJZ290byBrZWVwX2xvY2tlZDsKLQogCQkJc3dpdGNoICh0cnlfdG9fdW5tYXAocGFnZSwgMCkpIHsKIAkJCWNhc2UgU1dBUF9GQUlMOgogCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwpAQCAtNTYxLDcgKzUzNyw3IEBACiAKIGZyZWVfaXQ6CiAJCXVubG9ja19wYWdlKHBhZ2UpOwotCQlyZWNsYWltZWQrKzsKKwkJbnJfcmVjbGFpbWVkKys7CiAJCWlmICghcGFnZXZlY19hZGQoJmZyZWVkX3B2ZWMsIHBhZ2UpKQogCQkJX19wYWdldmVjX3JlbGVhc2Vfbm9ubHJ1KCZmcmVlZF9wdmVjKTsKIAkJY29udGludWU7CkBAIC01NzksNDc4ICs1NTUsOSBAQAogCWlmIChwYWdldmVjX2NvdW50KCZmcmVlZF9wdmVjKSkKIAkJX19wYWdldmVjX3JlbGVhc2Vfbm9ubHJ1KCZmcmVlZF9wdmVjKTsKIAltb2RfcGFnZV9zdGF0ZShwZ2FjdGl2YXRlLCBwZ2FjdGl2YXRlKTsKLQlzYy0+bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDsKLQlyZXR1cm4gcmVjbGFpbWVkOworCXJldHVybiBucl9yZWNsYWltZWQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCi1zdGF0aWMgaW5saW5lIHZvaWQgbW92ZV90b19scnUoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsKLQkJLyoKLQkJICogbHJ1X2NhY2hlX2FkZF9hY3RpdmUgY2hlY2tzIHRoYXQKLQkJICogdGhlIFBHX2FjdGl2ZSBiaXQgaXMgb2ZmLgotCQkgKi8KLQkJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOwotCQlscnVfY2FjaGVfYWRkX2FjdGl2ZShwYWdlKTsKLQl9IGVsc2UgewotCQlscnVfY2FjaGVfYWRkKHBhZ2UpOwotCX0KLQlwdXRfcGFnZShwYWdlKTsKLX0KLQotLyoKLSAqIEFkZCBpc29sYXRlZCBwYWdlcyBvbiB0aGUgbGlzdCBiYWNrIHRvIHRoZSBMUlUuCi0gKgotICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHB1dCBiYWNrLgotICovCi1pbnQgcHV0YmFja19scnVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTI7Ci0JaW50IGNvdW50ID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBwYWdlMiwgbCwgbHJ1KSB7Ci0JCW1vdmVfdG9fbHJ1KHBhZ2UpOwotCQljb3VudCsrOwotCX0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qCi0gKiBOb24gbWlncmF0YWJsZSBwYWdlCi0gKi8KLWludCBmYWlsX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JcmV0dXJuIC1FSU87Ci19Ci1FWFBPUlRfU1lNQk9MKGZhaWxfbWlncmF0ZV9wYWdlKTsKLQotLyoKLSAqIHN3YXBvdXQgYSBzaW5nbGUgcGFnZQotICogcGFnZSBpcyBsb2NrZWQgdXBvbiBlbnRyeSwgdW5sb2NrZWQgb24gZXhpdAotICovCi1zdGF0aWMgaW50IHN3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQotCWlmIChwYWdlX21hcHBlZChwYWdlKSAmJiBtYXBwaW5nKQotCQlpZiAodHJ5X3RvX3VubWFwKHBhZ2UsIDEpICE9IFNXQVBfU1VDQ0VTUykKLQkJCWdvdG8gdW5sb2NrX3JldHJ5OwotCi0JaWYgKFBhZ2VEaXJ0eShwYWdlKSkgewotCQkvKiBQYWdlIGlzIGRpcnR5LCB0cnkgdG8gd3JpdGUgaXQgb3V0IGhlcmUgKi8KLQkJc3dpdGNoKHBhZ2VvdXQocGFnZSwgbWFwcGluZykpIHsKLQkJY2FzZSBQQUdFX0tFRVA6Ci0JCWNhc2UgUEFHRV9BQ1RJVkFURToKLQkJCWdvdG8gdW5sb2NrX3JldHJ5OwotCi0JCWNhc2UgUEFHRV9TVUNDRVNTOgotCQkJZ290byByZXRyeTsKLQotCQljYXNlIFBBR0VfQ0xFQU46Ci0JCQk7IC8qIHRyeSB0byBmcmVlIHRoZSBwYWdlIGJlbG93ICovCi0JCX0KLQl9Ci0KLQlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKLQkJaWYgKCF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIEdGUF9LRVJORUwpIHx8Ci0JCSAgICAoIW1hcHBpbmcgJiYgcGFnZV9jb3VudChwYWdlKSA9PSAxKSkKLQkJCWdvdG8gdW5sb2NrX3JldHJ5OwotCX0KLQotCWlmIChyZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBwYWdlKSkgewotCQkvKiBTdWNjZXNzICovCi0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLXVubG9ja19yZXRyeToKLQl1bmxvY2tfcGFnZShwYWdlKTsKLQotcmV0cnk6Ci0JcmV0dXJuIC1FQUdBSU47Ci19Ci1FWFBPUlRfU1lNQk9MKHN3YXBfcGFnZSk7Ci0KLS8qCi0gKiBQYWdlIG1pZ3JhdGlvbiB3YXMgZmlyc3QgZGV2ZWxvcGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBtZW1vcnkgaG90cGx1ZwotICogcHJvamVjdC4gVGhlIG1haW4gYXV0aG9ycyBvZiB0aGUgbWlncmF0aW9uIGNvZGUgYXJlOgotICoKLSAqIElXQU1PVE8gVG9zaGloaXJvIDxpd2Ftb3RvQHZhbGludXguY28uanA+Ci0gKiBIaXJva2F6dSBUYWthaGFzaGkgPHRha2FAdmFsaW51eC5jby5qcD4KLSAqIERhdmUgSGFuc2VuIDxoYXZlYmx1ZUB1cy5pYm0uY29tPgotICogQ2hyaXN0b3BoIExhbWV0ZXIgPGNsYW1ldGVyQHNnaS5jb20+Ci0gKi8KLQotLyoKLSAqIFJlbW92ZSByZWZlcmVuY2VzIGZvciBhIHBhZ2UgYW5kIGVzdGFibGlzaCB0aGUgbmV3IHBhZ2Ugd2l0aCB0aGUgY29ycmVjdAotICogYmFzaWMgc2V0dGluZ3MgdG8gYmUgYWJsZSB0byBzdG9wIGFjY2Vzc2VzIHRvIHRoZSBwYWdlLgotICovCi1pbnQgbWlncmF0ZV9wYWdlX3JlbW92ZV9yZWZlcmVuY2VzKHN0cnVjdCBwYWdlICpuZXdwYWdlLAotCQkJCXN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnJfcmVmcykKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQlzdHJ1Y3QgcGFnZSAqKnJhZGl4X3BvaW50ZXI7Ci0KLQkvKgotCSAqIEF2b2lkIGRvaW5nIGFueSBvZiB0aGUgZm9sbG93aW5nIHdvcmsgaWYgdGhlIHBhZ2UgY291bnQKLQkgKiBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFnZSBpcyBpbiB1c2Ugb3IgdHJ1bmNhdGUgaGFzIHJlbW92ZWQKLQkgKiB0aGUgcGFnZS4KLQkgKi8KLQlpZiAoIW1hcHBpbmcgfHwgcGFnZV9tYXBjb3VudChwYWdlKSArIG5yX3JlZnMgIT0gcGFnZV9jb3VudChwYWdlKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKgotCSAqIEVzdGFibGlzaCBzd2FwIHB0ZXMgZm9yIGFub255bW91cyBwYWdlcyBvciBkZXN0cm95IHB0ZQotCSAqIG1hcHMgZm9yIGZpbGVzLgotCSAqCi0JICogSW4gb3JkZXIgdG8gcmVlc3RhYmxpc2ggZmlsZSBiYWNrZWQgbWFwcGluZ3MgdGhlIGZhdWx0IGhhbmRsZXJzCi0JICogd2lsbCB0YWtlIHRoZSByYWRpeCB0cmVlX2xvY2sgd2hpY2ggbWF5IHRoZW4gYmUgdXNlZCB0byBzdG9wCi0gIAkgKiBwcm9jZXNzc2VzIGZyb20gYWNjZXNzaW5nIHRoaXMgcGFnZSB1bnRpbCB0aGUgbmV3IHBhZ2UgaXMgcmVhZHkuCi0JICoKLQkgKiBBIHByb2Nlc3MgYWNjZXNzaW5nIHZpYSBhIHN3YXAgcHRlIChhbiBhbm9ueW1vdXMgcGFnZSkgd2lsbCB0YWtlIGEKLQkgKiBwYWdlX2xvY2sgb24gdGhlIG9sZCBwYWdlIHdoaWNoIHdpbGwgYmxvY2sgdGhlIHByb2Nlc3MgdW50aWwgdGhlCi0JICogbWlncmF0aW9uIGF0dGVtcHQgaXMgY29tcGxldGUuIEF0IHRoYXQgdGltZSB0aGUgUGFnZVN3YXBDYWNoZSBiaXQKLQkgKiB3aWxsIGJlIGV4YW1pbmVkLiBJZiB0aGUgcGFnZSB3YXMgbWlncmF0ZWQgdGhlbiB0aGUgUGFnZVN3YXBDYWNoZQotCSAqIGJpdCB3aWxsIGJlIGNsZWFyIGFuZCB0aGUgb3BlcmF0aW9uIHRvIHJldHJpZXZlIHRoZSBwYWdlIHdpbGwgYmUKLQkgKiByZXRyaWVkIHdoaWNoIHdpbGwgZmluZCB0aGUgbmV3IHBhZ2UgaW4gdGhlIHJhZGl4IHRyZWUuIFRoZW4gYSBuZXcKLQkgKiBkaXJlY3QgbWFwcGluZyBtYXkgYmUgZ2VuZXJhdGVkIGJhc2VkIG9uIHRoZSByYWRpeCB0cmVlIGNvbnRlbnRzLgotCSAqCi0JICogSWYgdGhlIHBhZ2Ugd2FzIG5vdCBtaWdyYXRlZCB0aGVuIHRoZSBQYWdlU3dhcENhY2hlIGJpdAotCSAqIGlzIHN0aWxsIHNldCBhbmQgdGhlIG9wZXJhdGlvbiBtYXkgY29udGludWUuCi0JICovCi0JdHJ5X3RvX3VubWFwKHBhZ2UsIDEpOwotCi0JLyoKLQkgKiBHaXZlIHVwIGlmIHdlIHdlcmUgdW5hYmxlIHRvIHJlbW92ZSBhbGwgbWFwcGluZ3MuCi0JICovCi0JaWYgKHBhZ2VfbWFwY291bnQocGFnZSkpCi0JCXJldHVybiAxOwotCi0Jd3JpdGVfbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0KLQlyYWRpeF9wb2ludGVyID0gKHN0cnVjdCBwYWdlICoqKXJhZGl4X3RyZWVfbG9va3VwX3Nsb3QoCi0JCQkJCQkmbWFwcGluZy0+cGFnZV90cmVlLAotCQkJCQkJcGFnZV9pbmRleChwYWdlKSk7Ci0KLQlpZiAoIXBhZ2VfbWFwcGluZyhwYWdlKSB8fCBwYWdlX2NvdW50KHBhZ2UpICE9IG5yX3JlZnMgfHwKLQkJCSpyYWRpeF9wb2ludGVyICE9IHBhZ2UpIHsKLQkJd3JpdGVfdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyoKLQkgKiBOb3cgd2Uga25vdyB0aGF0IG5vIG9uZSBlbHNlIGlzIGxvb2tpbmcgYXQgdGhlIHBhZ2UuCi0JICoKLQkgKiBDZXJ0YWluIG1pbmltYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBwYWdlIG11c3QgYmUgYXZhaWxhYmxlCi0JICogaW4gb3JkZXIgZm9yIG90aGVyIHN1YnN5c3RlbXMgdG8gcHJvcGVybHkgaGFuZGxlIHRoZSBwYWdlIGlmIHRoZXkKLQkgKiBmaW5kIGl0IHRocm91Z2ggdGhlIHJhZGl4IHRyZWUgdXBkYXRlIGJlZm9yZSB3ZSBhcmUgZmluaXNoZWQKLQkgKiBjb3B5aW5nIHRoZSBwYWdlLgotCSAqLwotCWdldF9wYWdlKG5ld3BhZ2UpOwotCW5ld3BhZ2UtPmluZGV4ID0gcGFnZS0+aW5kZXg7Ci0JbmV3cGFnZS0+bWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7Ci0JaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKLQkJU2V0UGFnZVN3YXBDYWNoZShuZXdwYWdlKTsKLQkJc2V0X3BhZ2VfcHJpdmF0ZShuZXdwYWdlLCBwYWdlX3ByaXZhdGUocGFnZSkpOwotCX0KLQotCSpyYWRpeF9wb2ludGVyID0gbmV3cGFnZTsKLQlfX3B1dF9wYWdlKHBhZ2UpOwotCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wobWlncmF0ZV9wYWdlX3JlbW92ZV9yZWZlcmVuY2VzKTsKLQotLyoKLSAqIENvcHkgdGhlIHBhZ2UgdG8gaXRzIG5ldyBsb2NhdGlvbgotICovCi12b2lkIG1pZ3JhdGVfcGFnZV9jb3B5KHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQljb3B5X2hpZ2hwYWdlKG5ld3BhZ2UsIHBhZ2UpOwotCi0JaWYgKFBhZ2VFcnJvcihwYWdlKSkKLQkJU2V0UGFnZUVycm9yKG5ld3BhZ2UpOwotCWlmIChQYWdlUmVmZXJlbmNlZChwYWdlKSkKLQkJU2V0UGFnZVJlZmVyZW5jZWQobmV3cGFnZSk7Ci0JaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKLQkJU2V0UGFnZVVwdG9kYXRlKG5ld3BhZ2UpOwotCWlmIChQYWdlQWN0aXZlKHBhZ2UpKQotCQlTZXRQYWdlQWN0aXZlKG5ld3BhZ2UpOwotCWlmIChQYWdlQ2hlY2tlZChwYWdlKSkKLQkJU2V0UGFnZUNoZWNrZWQobmV3cGFnZSk7Ci0JaWYgKFBhZ2VNYXBwZWRUb0Rpc2socGFnZSkpCi0JCVNldFBhZ2VNYXBwZWRUb0Rpc2sobmV3cGFnZSk7Ci0KLQlpZiAoUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpOwotCQlzZXRfcGFnZV9kaXJ0eShuZXdwYWdlKTsKLSAJfQotCi0JQ2xlYXJQYWdlU3dhcENhY2hlKHBhZ2UpOwotCUNsZWFyUGFnZUFjdGl2ZShwYWdlKTsKLQlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOwotCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7Ci0JcGFnZS0+bWFwcGluZyA9IE5VTEw7Ci0KLQkvKgotCSAqIElmIGFueSB3YWl0ZXJzIGhhdmUgYWNjdW11bGF0ZWQgb24gdGhlIG5ldyBwYWdlIHRoZW4KLQkgKiB3YWtlIHRoZW0gdXAuCi0JICovCi0JaWYgKFBhZ2VXcml0ZWJhY2sobmV3cGFnZSkpCi0JCWVuZF9wYWdlX3dyaXRlYmFjayhuZXdwYWdlKTsKLX0KLUVYUE9SVF9TWU1CT0wobWlncmF0ZV9wYWdlX2NvcHkpOwotCi0vKgotICogQ29tbW9uIGxvZ2ljIHRvIGRpcmVjdGx5IG1pZ3JhdGUgYSBzaW5nbGUgcGFnZSBzdWl0YWJsZSBmb3IKLSAqIHBhZ2VzIHRoYXQgZG8gbm90IHVzZSBQYWdlUHJpdmF0ZS4KLSAqCi0gKiBQYWdlcyBhcmUgbG9ja2VkIHVwb24gZW50cnkgYW5kIGV4aXQuCi0gKi8KLWludCBtaWdyYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQotewotCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsJLyogV3JpdGViYWNrIG11c3QgYmUgY29tcGxldGUgKi8KLQotCWlmIChtaWdyYXRlX3BhZ2VfcmVtb3ZlX3JlZmVyZW5jZXMobmV3cGFnZSwgcGFnZSwgMikpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JbWlncmF0ZV9wYWdlX2NvcHkobmV3cGFnZSwgcGFnZSk7Ci0KLQkvKgotCSAqIFJlbW92ZSBhdXhpbGlhcnkgc3dhcCBlbnRyaWVzIGFuZCByZXBsYWNlCi0JICogdGhlbSB3aXRoIHJlYWwgcHRlcy4KLQkgKgotCSAqIE5vdGUgdGhhdCBhIHJlYWwgcHRlIGVudHJ5IHdpbGwgYWxsb3cgcHJvY2Vzc2VzIHRoYXQgYXJlIG5vdAotCSAqIHdhaXRpbmcgb24gdGhlIHBhZ2UgbG9jayB0byB1c2UgdGhlIG5ldyBwYWdlIHZpYSB0aGUgcGFnZSB0YWJsZXMKLQkgKiBiZWZvcmUgdGhlIG5ldyBwYWdlIGlzIHVubG9ja2VkLgotCSAqLwotCXJlbW92ZV9mcm9tX3N3YXAobmV3cGFnZSk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG1pZ3JhdGVfcGFnZSk7Ci0KLS8qCi0gKiBtaWdyYXRlX3BhZ2VzCi0gKgotICogVHdvIGxpc3RzIGFyZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbi4gVGhlIGZpcnN0IGxpc3QKLSAqIGNvbnRhaW5zIHRoZSBwYWdlcyBpc29sYXRlZCBmcm9tIHRoZSBMUlUgdG8gYmUgbWlncmF0ZWQuCi0gKiBUaGUgc2Vjb25kIGxpc3QgY29udGFpbnMgbmV3IHBhZ2VzIHRoYXQgdGhlIHBhZ2VzIGlzb2xhdGVkCi0gKiBjYW4gYmUgbW92ZWQgdG8uIElmIHRoZSBzZWNvbmQgbGlzdCBpcyBOVUxMIHRoZW4gYWxsCi0gKiBwYWdlcyBhcmUgc3dhcHBlZCBvdXQuCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYWZ0ZXIgMTAgYXR0ZW1wdHMgb3IgaWYgbm8gcGFnZXMKLSAqIGFyZSBtb3ZhYmxlIGFueW1vcmUgYmVjYXVzZSB0byBoYXMgYmVjb21lIGVtcHR5Ci0gKiBvciBubyByZXRyeWFibGUgcGFnZXMgZXhpc3QgYW55bW9yZS4KLSAqCi0gKiBSZXR1cm46IE51bWJlciBvZiBwYWdlcyBub3QgbWlncmF0ZWQgd2hlbiAidG8iIHJhbiBlbXB0eS4KLSAqLwotaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgc3RydWN0IGxpc3RfaGVhZCAqdG8sCi0JCSAgc3RydWN0IGxpc3RfaGVhZCAqbW92ZWQsIHN0cnVjdCBsaXN0X2hlYWQgKmZhaWxlZCkKLXsKLQlpbnQgcmV0cnk7Ci0JaW50IG5yX2ZhaWxlZCA9IDA7Ci0JaW50IHBhc3MgPSAwOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBwYWdlICpwYWdlMjsKLQlpbnQgc3dhcHdyaXRlID0gY3VycmVudC0+ZmxhZ3MgJiBQRl9TV0FQV1JJVEU7Ci0JaW50IHJjOwotCi0JaWYgKCFzd2Fwd3JpdGUpCi0JCWN1cnJlbnQtPmZsYWdzIHw9IFBGX1NXQVBXUklURTsKLQotcmVkbzoKLQlyZXRyeSA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgcGFnZTIsIGZyb20sIGxydSkgewotCQlzdHJ1Y3QgcGFnZSAqbmV3cGFnZSA9IE5VTEw7Ci0JCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCi0JCWNvbmRfcmVzY2hlZCgpOwotCi0JCXJjID0gMDsKLQkJaWYgKHBhZ2VfY291bnQocGFnZSkgPT0gMSkKLQkJCS8qIHBhZ2Ugd2FzIGZyZWVkIGZyb20gdW5kZXIgdXMuIFNvIHdlIGFyZSBkb25lLiAqLwotCQkJZ290byBuZXh0OwotCi0JCWlmICh0byAmJiBsaXN0X2VtcHR5KHRvKSkKLQkJCWJyZWFrOwotCi0JCS8qCi0JCSAqIFNraXAgbG9ja2VkIHBhZ2VzIGR1cmluZyB0aGUgZmlyc3QgdHdvIHBhc3NlcyB0byBnaXZlIHRoZQotCQkgKiBmdW5jdGlvbnMgaG9sZGluZyB0aGUgbG9jayB0aW1lIHRvIHJlbGVhc2UgdGhlIHBhZ2UuIExhdGVyIHdlCi0JCSAqIHVzZSBsb2NrX3BhZ2UoKSB0byBoYXZlIGEgaGlnaGVyIGNoYW5jZSBvZiBhY3F1aXJpbmcgdGhlCi0JCSAqIGxvY2suCi0JCSAqLwotCQlyYyA9IC1FQUdBSU47Ci0JCWlmIChwYXNzID4gMikKLQkJCWxvY2tfcGFnZShwYWdlKTsKLQkJZWxzZQotCQkJaWYgKFRlc3RTZXRQYWdlTG9ja2VkKHBhZ2UpKQotCQkJCWdvdG8gbmV4dDsKLQotCQkvKgotCQkgKiBPbmx5IHdhaXQgb24gd3JpdGViYWNrIGlmIHdlIGhhdmUgYWxyZWFkeSBkb25lIGEgcGFzcyB3aGVyZQotCQkgKiB3ZSB3ZSBtYXkgaGF2ZSB0cmlnZ2VyZWQgd3JpdGVvdXRzIGZvciBsb3RzIG9mIHBhZ2VzLgotCQkgKi8KLQkJaWYgKHBhc3MgPiAwKSB7Ci0JCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotCQl9IGVsc2UgewotCQkJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkpCi0JCQkJZ290byB1bmxvY2tfcGFnZTsKLQkJfQotCi0JCS8qCi0JCSAqIEFub255bW91cyBwYWdlcyBtdXN0IGhhdmUgc3dhcCBjYWNoZSByZWZlcmVuY2VzIG90aGVyd2lzZQotCQkgKiB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBwYWdlIG1hcHMgY2Fubm90IGJlCi0JCSAqIHByZXNlcnZlZC4KLQkJICovCi0JCWlmIChQYWdlQW5vbihwYWdlKSAmJiAhUGFnZVN3YXBDYWNoZShwYWdlKSkgewotCQkJaWYgKCFhZGRfdG9fc3dhcChwYWdlLCBHRlBfS0VSTkVMKSkgewotCQkJCXJjID0gLUVOT01FTTsKLQkJCQlnb3RvIHVubG9ja19wYWdlOwotCQkJfQotCQl9Ci0KLQkJaWYgKCF0bykgewotCQkJcmMgPSBzd2FwX3BhZ2UocGFnZSk7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQotCQluZXdwYWdlID0gbHJ1X3RvX3BhZ2UodG8pOwotCQlsb2NrX3BhZ2UobmV3cGFnZSk7Ci0KLQkJLyoKLQkJICogUGFnZXMgYXJlIHByb3Blcmx5IGxvY2tlZCBhbmQgd3JpdGViYWNrIGlzIGNvbXBsZXRlLgotCQkgKiBUcnkgdG8gbWlncmF0ZSB0aGUgcGFnZS4KLQkJICovCi0JCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7Ci0JCWlmICghbWFwcGluZykKLQkJCWdvdG8gdW5sb2NrX2JvdGg7Ci0KLQkJaWYgKG1hcHBpbmctPmFfb3BzLT5taWdyYXRlcGFnZSkgewotCQkJLyoKLQkJCSAqIE1vc3QgcGFnZXMgaGF2ZSBhIG1hcHBpbmcgYW5kIG1vc3QgZmlsZXN5c3RlbXMKLQkJCSAqIHNob3VsZCBwcm92aWRlIGEgbWlncmF0aW9uIGZ1bmN0aW9uLiBBbm9ueW1vdXMKLQkJCSAqIHBhZ2VzIGFyZSBwYXJ0IG9mIHN3YXAgc3BhY2Ugd2hpY2ggYWxzbyBoYXMgaXRzCi0JCQkgKiBvd24gbWlncmF0aW9uIGZ1bmN0aW9uLiBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbgotCQkJICogcGF0aCBmb3IgcGFnZSBtaWdyYXRpb24uCi0JCQkgKi8KLQkJCXJjID0gbWFwcGluZy0+YV9vcHMtPm1pZ3JhdGVwYWdlKG5ld3BhZ2UsIHBhZ2UpOwotCQkJZ290byB1bmxvY2tfYm90aDsKLSAgICAgICAgICAgICAgICB9Ci0KLQkJLyoKLQkJICogRGVmYXVsdCBoYW5kbGluZyBpZiBhIGZpbGVzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZQotCQkgKiBhIG1pZ3JhdGlvbiBmdW5jdGlvbi4gV2UgY2FuIG9ubHkgbWlncmF0ZSBjbGVhbgotCQkgKiBwYWdlcyBzbyB0cnkgdG8gd3JpdGUgb3V0IGFueSBkaXJ0eSBwYWdlcyBmaXJzdC4KLQkJICovCi0JCWlmIChQYWdlRGlydHkocGFnZSkpIHsKLQkJCXN3aXRjaCAocGFnZW91dChwYWdlLCBtYXBwaW5nKSkgewotCQkJY2FzZSBQQUdFX0tFRVA6Ci0JCQljYXNlIFBBR0VfQUNUSVZBVEU6Ci0JCQkJZ290byB1bmxvY2tfYm90aDsKLQotCQkJY2FzZSBQQUdFX1NVQ0NFU1M6Ci0JCQkJdW5sb2NrX3BhZ2UobmV3cGFnZSk7Ci0JCQkJZ290byBuZXh0OwotCi0JCQljYXNlIFBBR0VfQ0xFQU46Ci0JCQkJOyAvKiB0cnkgdG8gbWlncmF0ZSB0aGUgcGFnZSBiZWxvdyAqLwotCQkJfQotICAgICAgICAgICAgICAgIH0KLQotCQkvKgotCQkgKiBCdWZmZXJzIGFyZSBtYW5hZ2VkIGluIGEgZmlsZXN5c3RlbSBzcGVjaWZpYyB3YXkuCi0JCSAqIFdlIG11c3QgaGF2ZSBubyBidWZmZXJzIG9yIGRyb3AgdGhlbS4KLQkJICovCi0JCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSB8fAotCQkgICAgdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKSkgewotCQkJcmMgPSBtaWdyYXRlX3BhZ2UobmV3cGFnZSwgcGFnZSk7Ci0JCQlnb3RvIHVubG9ja19ib3RoOwotCQl9Ci0KLQkJLyoKLQkJICogT24gZWFybHkgcGFzc2VzIHdpdGggbWFwcGVkIHBhZ2VzIHNpbXBseQotCQkgKiByZXRyeS4gVGhlcmUgbWF5IGJlIGEgbG9jayBoZWxkIGZvciBzb21lCi0JCSAqIGJ1ZmZlcnMgdGhhdCBtYXkgZ28gYXdheS4gTGF0ZXIKLQkJICogc3dhcCB0aGVtIG91dC4KLQkJICovCi0JCWlmIChwYXNzID4gNCkgewotCQkJLyoKLQkJCSAqIFBlcnNpc3RlbnRseSB1bmFibGUgdG8gZHJvcCBidWZmZXJzLi4uLi4gQXMgYQotCQkJICogbWVhc3VyZSBvZiBsYXN0IHJlc29ydCB3ZSBmYWxsIGJhY2sgdG8KLQkJCSAqIHN3YXBfcGFnZSgpLgotCQkJICovCi0JCQl1bmxvY2tfcGFnZShuZXdwYWdlKTsKLQkJCW5ld3BhZ2UgPSBOVUxMOwotCQkJcmMgPSBzd2FwX3BhZ2UocGFnZSk7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQotdW5sb2NrX2JvdGg6Ci0JCXVubG9ja19wYWdlKG5ld3BhZ2UpOwotCi11bmxvY2tfcGFnZToKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0KLW5leHQ6Ci0JCWlmIChyYyA9PSAtRUFHQUlOKSB7Ci0JCQlyZXRyeSsrOwotCQl9IGVsc2UgaWYgKHJjKSB7Ci0JCQkvKiBQZXJtYW5lbnQgZmFpbHVyZSAqLwotCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsIGZhaWxlZCk7Ci0JCQlucl9mYWlsZWQrKzsKLQkJfSBlbHNlIHsKLQkJCWlmIChuZXdwYWdlKSB7Ci0JCQkJLyogU3VjY2Vzc2Z1bCBtaWdyYXRpb24uIFJldHVybiBwYWdlIHRvIExSVSAqLwotCQkJCW1vdmVfdG9fbHJ1KG5ld3BhZ2UpOwotCQkJfQotCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsIG1vdmVkKTsKLQkJfQotCX0KLQlpZiAocmV0cnkgJiYgcGFzcysrIDwgMTApCi0JCWdvdG8gcmVkbzsKLQotCWlmICghc3dhcHdyaXRlKQotCQljdXJyZW50LT5mbGFncyAmPSB+UEZfU1dBUFdSSVRFOwotCi0JcmV0dXJuIG5yX2ZhaWxlZCArIHJldHJ5OwotfQotCi0vKgotICogSXNvbGF0ZSBvbmUgcGFnZSBmcm9tIHRoZSBMUlUgbGlzdHMgYW5kIHB1dCBpdCBvbiB0aGUKLSAqIGluZGljYXRlZCBsaXN0IHdpdGggZWxldmF0ZWQgcmVmY291bnQuCi0gKgotICogUmVzdWx0OgotICogIDAgPSBwYWdlIG5vdCBvbiBMUlUgbGlzdAotICogIDEgPSBwYWdlIHJlbW92ZWQgZnJvbSBMUlUgbGlzdCBhbmQgYWRkZWQgdG8gdGhlIHNwZWNpZmllZCBsaXN0LgotICovCi1pbnQgaXNvbGF0ZV9scnVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChQYWdlTFJVKHBhZ2UpKSB7Ci0JCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOwotCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCWlmIChUZXN0Q2xlYXJQYWdlTFJVKHBhZ2UpKSB7Ci0JCQlyZXQgPSAxOwotCQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKLQkJCQlkZWxfcGFnZV9mcm9tX2FjdGl2ZV9saXN0KHpvbmUsIHBhZ2UpOwotCQkJZWxzZQotCQkJCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKLQkJfQotCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KIC8qCiAgKiB6b25lLT5scnVfbG9jayBpcyBoZWF2aWx5IGNvbnRlbmRlZC4gIFNvbWUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0CiAgKiBzaHJpbmsgdGhlIGxpc3RzIHBlcmZvcm0gYmV0dGVyIGJ5IHRha2luZyBvdXQgYSBiYXRjaCBvZiBwYWdlcwpAQCAtMTA2OCwzMiArNTc1LDM1IEBACiAgKgogICogcmV0dXJucyBob3cgbWFueSBwYWdlcyB3ZXJlIG1vdmVkIG9udG8gKkBkc3QuCiAgKi8KLXN0YXRpYyBpbnQgaXNvbGF0ZV9scnVfcGFnZXMoaW50IG5yX3RvX3NjYW4sIHN0cnVjdCBsaXN0X2hlYWQgKnNyYywKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqZHN0LCBpbnQgKnNjYW5uZWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX2xydV9wYWdlcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCisJCXN0cnVjdCBsaXN0X2hlYWQgKnNyYywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LAorCQl1bnNpZ25lZCBsb25nICpzY2FubmVkKQogewotCWludCBucl90YWtlbiA9IDA7CisJdW5zaWduZWQgbG9uZyBucl90YWtlbiA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JaW50IHNjYW4gPSAwOworCXVuc2lnbmVkIGxvbmcgc2NhbjsKIAotCXdoaWxlIChzY2FuKysgPCBucl90b19zY2FuICYmICFsaXN0X2VtcHR5KHNyYykpIHsKKwlmb3IgKHNjYW4gPSAwOyBzY2FuIDwgbnJfdG9fc2NhbiAmJiAhbGlzdF9lbXB0eShzcmMpOyBzY2FuKyspIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqdGFyZ2V0OwogCQlwYWdlID0gbHJ1X3RvX3BhZ2Uoc3JjKTsKIAkJcHJlZmV0Y2h3X3ByZXZfbHJ1X3BhZ2UocGFnZSwgc3JjLCBmbGFncyk7CiAKLQkJaWYgKCFUZXN0Q2xlYXJQYWdlTFJVKHBhZ2UpKQotCQkJQlVHKCk7CisJCUJVR19PTighUGFnZUxSVShwYWdlKSk7CisKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7Ci0JCWlmIChnZXRfcGFnZV90ZXN0b25lKHBhZ2UpKSB7CisJCXRhcmdldCA9IHNyYzsKKwkJaWYgKGxpa2VseShnZXRfcGFnZV91bmxlc3NfemVybyhwYWdlKSkpIHsKIAkJCS8qCi0JCQkgKiBJdCBpcyBiZWluZyBmcmVlZCBlbHNld2hlcmUKKwkJCSAqIEJlIGNhcmVmdWwgbm90IHRvIGNsZWFyIFBhZ2VMUlUgdW50aWwgYWZ0ZXIgd2UncmUKKwkJCSAqIHN1cmUgdGhlIHBhZ2UgaXMgbm90IGJlaW5nIGZyZWVkIGVsc2V3aGVyZSAtLSB0aGUKKwkJCSAqIHBhZ2UgcmVsZWFzZSBjb2RlIHJlbGllcyBvbiBpdC4KIAkJCSAqLwotCQkJX19wdXRfcGFnZShwYWdlKTsKLQkJCVNldFBhZ2VMUlUocGFnZSk7Ci0JCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCBzcmMpOwotCQkJY29udGludWU7Ci0JCX0gZWxzZSB7Ci0JCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCBkc3QpOworCQkJQ2xlYXJQYWdlTFJVKHBhZ2UpOworCQkJdGFyZ2V0ID0gZHN0OwogCQkJbnJfdGFrZW4rKzsKLQkJfQorCQl9IC8qIGVsc2UgaXQgaXMgYmVpbmcgZnJlZWQgZWxzZXdoZXJlICovCisKKwkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgdGFyZ2V0KTsKIAl9CiAKIAkqc2Nhbm5lZCA9IHNjYW47CkBAIC0xMTAxLDIzICs2MTEsMjYgQEAKIH0KIAogLyoKLSAqIHNocmlua19jYWNoZSgpIGFkZHMgdGhlIG51bWJlciBvZiBwYWdlcyByZWNsYWltZWQgdG8gc2MtPm5yX3JlY2xhaW1lZAorICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX3pvbmUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlcgorICogb2YgcmVjbGFpbWVkIHBhZ2VzCiAgKi8KLXN0YXRpYyB2b2lkIHNocmlua19jYWNoZShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG1heF9zY2FuLAorCQkJCXN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlMSVNUX0hFQUQocGFnZV9saXN0KTsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwotCWludCBtYXhfc2NhbiA9IHNjLT5ucl90b19zY2FuOworCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCA9IDA7CisJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwOwogCiAJcGFnZXZlY19pbml0KCZwdmVjLCAxKTsKIAogCWxydV9hZGRfZHJhaW4oKTsKIAlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0Jd2hpbGUgKG1heF9zY2FuID4gMCkgeworCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCWludCBucl90YWtlbjsKLQkJaW50IG5yX3NjYW47Ci0JCWludCBucl9mcmVlZDsKKwkJdW5zaWduZWQgbG9uZyBucl90YWtlbjsKKwkJdW5zaWduZWQgbG9uZyBucl9zY2FuOworCQl1bnNpZ25lZCBsb25nIG5yX2ZyZWVkOwogCiAJCW5yX3Rha2VuID0gaXNvbGF0ZV9scnVfcGFnZXMoc2MtPnN3YXBfY2x1c3Rlcl9tYXgsCiAJCQkJCSAgICAgJnpvbmUtPmluYWN0aXZlX2xpc3QsCkBAIC0xMTI2LDEyICs2MzksOSBAQAogCQl6b25lLT5wYWdlc19zY2FubmVkICs9IG5yX3NjYW47CiAJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCi0JCWlmIChucl90YWtlbiA9PSAwKQotCQkJZ290byBkb25lOwotCi0JCW1heF9zY2FuIC09IG5yX3NjYW47Ci0JCW5yX2ZyZWVkID0gc2hyaW5rX2xpc3QoJnBhZ2VfbGlzdCwgc2MpOwotCisJCW5yX3NjYW5uZWQgKz0gbnJfc2NhbjsKKwkJbnJfZnJlZWQgPSBzaHJpbmtfcGFnZV9saXN0KCZwYWdlX2xpc3QsIHNjKTsKKwkJbnJfcmVjbGFpbWVkICs9IG5yX2ZyZWVkOwogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQlpZiAoY3VycmVudF9pc19rc3dhcGQoKSkgewogCQkJX19tb2RfcGFnZV9zdGF0ZV96b25lKHpvbmUsIHBnc2Nhbl9rc3dhcGQsIG5yX3NjYW4pOwpAQCAtMTE0MCwxNCArNjUwLDE3IEBACiAJCQlfX21vZF9wYWdlX3N0YXRlX3pvbmUoem9uZSwgcGdzY2FuX2RpcmVjdCwgbnJfc2Nhbik7CiAJCV9fbW9kX3BhZ2Vfc3RhdGVfem9uZSh6b25lLCBwZ3N0ZWFsLCBucl9mcmVlZCk7CiAKKwkJaWYgKG5yX3Rha2VuID09IDApCisJCQlnb3RvIGRvbmU7CisKIAkJc3Bpbl9sb2NrKCZ6b25lLT5scnVfbG9jayk7CiAJCS8qCiAJCSAqIFB1dCBiYWNrIGFueSB1bmZyZWVhYmxlIHBhZ2VzLgogCQkgKi8KIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZwYWdlX2xpc3QpKSB7CiAJCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJnBhZ2VfbGlzdCk7Ci0JCQlpZiAoVGVzdFNldFBhZ2VMUlUocGFnZSkpCi0JCQkJQlVHKCk7CisJCQlCVUdfT04oUGFnZUxSVShwYWdlKSk7CisJCQlTZXRQYWdlTFJVKHBhZ2UpOwogCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJCQlpZiAoUGFnZUFjdGl2ZShwYWdlKSkKIAkJCQlhZGRfcGFnZV90b19hY3RpdmVfbGlzdCh6b25lLCBwYWdlKTsKQEAgLTExNTksMTAgKzY3MiwxMiBAQAogCQkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJCX0KIAkJfQotICAJfQotCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworICAJfSB3aGlsZSAobnJfc2Nhbm5lZCA8IG1heF9zY2FuKTsKKwlzcGluX3VubG9jaygmem9uZS0+bHJ1X2xvY2spOwogZG9uZToKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwlyZXR1cm4gbnJfcmVjbGFpbWVkOwogfQogCiAvKgpAQCAtMTE4MiwxMyArNjk3LDEyIEBACiAgKiBUaGUgZG93bnNpZGUgaXMgdGhhdCB3ZSBoYXZlIHRvIHRvdWNoIHBhZ2UtPl9jb3VudCBhZ2FpbnN0IGVhY2ggcGFnZS4KICAqIEJ1dCB3ZSBoYWQgdG8gYWx0ZXIgcGFnZS0+ZmxhZ3MgYW55d2F5LgogICovCi1zdGF0aWMgdm9pZAotcmVmaWxsX2luYWN0aXZlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQorc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCB6b25lICp6b25lLAorCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewotCWludCBwZ21vdmVkOworCXVuc2lnbmVkIGxvbmcgcGdtb3ZlZDsKIAlpbnQgcGdkZWFjdGl2YXRlID0gMDsKLQlpbnQgcGdzY2FubmVkOwotCWludCBucl9wYWdlcyA9IHNjLT5ucl90b19zY2FuOworCXVuc2lnbmVkIGxvbmcgcGdzY2FubmVkOwogCUxJU1RfSEVBRChsX2hvbGQpOwkvKiBUaGUgcGFnZXMgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqLwogCUxJU1RfSEVBRChsX2luYWN0aXZlKTsJLyogUGFnZXMgdG8gZ28gb250byB0aGUgaW5hY3RpdmVfbGlzdCAqLwogCUxJU1RfSEVBRChsX2FjdGl2ZSk7CS8qIFBhZ2VzIHRvIGdvIG9udG8gdGhlIGFjdGl2ZV9saXN0ICovCkBAIC0xMTk2LDcgKzcxMCw3IEBACiAJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKIAlpbnQgcmVjbGFpbV9tYXBwZWQgPSAwOwogCi0JaWYgKHVubGlrZWx5KHNjLT5tYXlfc3dhcCkpIHsKKwlpZiAoc2MtPm1heV9zd2FwKSB7CiAJCWxvbmcgbWFwcGVkX3JhdGlvOwogCQlsb25nIGRpc3RyZXNzOwogCQlsb25nIHN3YXBfdGVuZGVuY3k7CkBAIC0xMjY2LDEwICs3ODAsMTEgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxfaW5hY3RpdmUpKSB7CiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9pbmFjdGl2ZSk7CiAJCXByZWZldGNod19wcmV2X2xydV9wYWdlKHBhZ2UsICZsX2luYWN0aXZlLCBmbGFncyk7Ci0JCWlmIChUZXN0U2V0UGFnZUxSVShwYWdlKSkKLQkJCUJVRygpOwotCQlpZiAoIVRlc3RDbGVhclBhZ2VBY3RpdmUocGFnZSkpCi0JCQlCVUcoKTsKKwkJQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCQlTZXRQYWdlTFJVKHBhZ2UpOworCQlCVUdfT04oIVBhZ2VBY3RpdmUocGFnZSkpOworCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CisKIAkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5pbmFjdGl2ZV9saXN0KTsKIAkJcGdtb3ZlZCsrOwogCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewpAQCAtMTI5NSw4ICs4MTAsOCBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmbF9hY3RpdmUpKSB7CiAJCXBhZ2UgPSBscnVfdG9fcGFnZSgmbF9hY3RpdmUpOwogCQlwcmVmZXRjaHdfcHJldl9scnVfcGFnZShwYWdlLCAmbF9hY3RpdmUsIGZsYWdzKTsKLQkJaWYgKFRlc3RTZXRQYWdlTFJVKHBhZ2UpKQotCQkJQlVHKCk7CisJCUJVR19PTihQYWdlTFJVKHBhZ2UpKTsKKwkJU2V0UGFnZUxSVShwYWdlKTsKIAkJQlVHX09OKCFQYWdlQWN0aXZlKHBhZ2UpKTsKIAkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZ6b25lLT5hY3RpdmVfbGlzdCk7CiAJCXBnbW92ZWQrKzsKQEAgLTEzMjEsMTEgKzgzNiwxMyBAQAogLyoKICAqIFRoaXMgaXMgYSBiYXNpYyBwZXItem9uZSBwYWdlIGZyZWVyLiAgVXNlZCBieSBib3RoIGtzd2FwZCBhbmQgZGlyZWN0IHJlY2xhaW0uCiAgKi8KLXN0YXRpYyB2b2lkCi1zaHJpbmtfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfem9uZShpbnQgcHJpb3JpdHksIHN0cnVjdCB6b25lICp6b25lLAorCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXVuc2lnbmVkIGxvbmcgbnJfYWN0aXZlOwogCXVuc2lnbmVkIGxvbmcgbnJfaW5hY3RpdmU7CisJdW5zaWduZWQgbG9uZyBucl90b19zY2FuOworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKIAogCWF0b21pY19pbmMoJnpvbmUtPnJlY2xhaW1faW5fcHJvZ3Jlc3MpOwogCkBAIC0xMzMzLDE0ICs4NTAsMTQgQEAKIAkgKiBBZGQgb25lIHRvIGBucl90b19zY2FuJyBqdXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBrZXJuZWwgd2lsbAogCSAqIHNsb3dseSBzaWZ0IHRocm91Z2ggdGhlIGFjdGl2ZSBsaXN0LgogCSAqLwotCXpvbmUtPm5yX3NjYW5fYWN0aXZlICs9ICh6b25lLT5ucl9hY3RpdmUgPj4gc2MtPnByaW9yaXR5KSArIDE7CisJem9uZS0+bnJfc2Nhbl9hY3RpdmUgKz0gKHpvbmUtPm5yX2FjdGl2ZSA+PiBwcmlvcml0eSkgKyAxOwogCW5yX2FjdGl2ZSA9IHpvbmUtPm5yX3NjYW5fYWN0aXZlOwogCWlmIChucl9hY3RpdmUgPj0gc2MtPnN3YXBfY2x1c3Rlcl9tYXgpCiAJCXpvbmUtPm5yX3NjYW5fYWN0aXZlID0gMDsKIAllbHNlCiAJCW5yX2FjdGl2ZSA9IDA7CiAKLQl6b25lLT5ucl9zY2FuX2luYWN0aXZlICs9ICh6b25lLT5ucl9pbmFjdGl2ZSA+PiBzYy0+cHJpb3JpdHkpICsgMTsKKwl6b25lLT5ucl9zY2FuX2luYWN0aXZlICs9ICh6b25lLT5ucl9pbmFjdGl2ZSA+PiBwcmlvcml0eSkgKyAxOwogCW5yX2luYWN0aXZlID0gem9uZS0+bnJfc2Nhbl9pbmFjdGl2ZTsKIAlpZiAobnJfaW5hY3RpdmUgPj0gc2MtPnN3YXBfY2x1c3Rlcl9tYXgpCiAJCXpvbmUtPm5yX3NjYW5faW5hY3RpdmUgPSAwOwpAQCAtMTM0OSwyMyArODY2LDI1IEBACiAKIAl3aGlsZSAobnJfYWN0aXZlIHx8IG5yX2luYWN0aXZlKSB7CiAJCWlmIChucl9hY3RpdmUpIHsKLQkJCXNjLT5ucl90b19zY2FuID0gbWluKG5yX2FjdGl2ZSwKKwkJCW5yX3RvX3NjYW4gPSBtaW4obnJfYWN0aXZlLAogCQkJCQkodW5zaWduZWQgbG9uZylzYy0+c3dhcF9jbHVzdGVyX21heCk7Ci0JCQlucl9hY3RpdmUgLT0gc2MtPm5yX3RvX3NjYW47Ci0JCQlyZWZpbGxfaW5hY3RpdmVfem9uZSh6b25lLCBzYyk7CisJCQlucl9hY3RpdmUgLT0gbnJfdG9fc2NhbjsKKwkJCXNocmlua19hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLCBzYyk7CiAJCX0KIAogCQlpZiAobnJfaW5hY3RpdmUpIHsKLQkJCXNjLT5ucl90b19zY2FuID0gbWluKG5yX2luYWN0aXZlLAorCQkJbnJfdG9fc2NhbiA9IG1pbihucl9pbmFjdGl2ZSwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpc2MtPnN3YXBfY2x1c3Rlcl9tYXgpOwotCQkJbnJfaW5hY3RpdmUgLT0gc2MtPm5yX3RvX3NjYW47Ci0JCQlzaHJpbmtfY2FjaGUoem9uZSwgc2MpOworCQkJbnJfaW5hY3RpdmUgLT0gbnJfdG9fc2NhbjsKKwkJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCB6b25lLAorCQkJCQkJCQlzYyk7CiAJCX0KIAl9CiAKIAl0aHJvdHRsZV92bV93cml0ZW91dCgpOwogCiAJYXRvbWljX2RlYygmem9uZS0+cmVjbGFpbV9pbl9wcm9ncmVzcyk7CisJcmV0dXJuIG5yX3JlY2xhaW1lZDsKIH0KIAogLyoKQEAgLTEzODQsOSArOTAzLDEwIEBACiAgKiBJZiBhIHpvbmUgaXMgZGVlbWVkIHRvIGJlIGZ1bGwgb2YgcGlubmVkIHBhZ2VzIHRoZW4ganVzdCBnaXZlIGl0IGEgbGlnaHQKICAqIHNjYW4gdGhlbiBnaXZlIHVwIG9uIGl0LgogICovCi1zdGF0aWMgdm9pZAotc2hyaW5rX2NhY2hlcyhzdHJ1Y3Qgem9uZSAqKnpvbmVzLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua196b25lcyhpbnQgcHJpb3JpdHksIHN0cnVjdCB6b25lICoqem9uZXMsCisJCQkJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogeworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IHpvbmVzW2ldICE9IE5VTEw7IGkrKykgewpAQCAtMTM5OCwxNSArOTE4LDE2IEBACiAJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBfX0dGUF9IQVJEV0FMTCkpCiAJCQljb250aW51ZTsKIAotCQl6b25lLT50ZW1wX3ByaW9yaXR5ID0gc2MtPnByaW9yaXR5OwotCQlpZiAoem9uZS0+cHJldl9wcmlvcml0eSA+IHNjLT5wcmlvcml0eSkKLQkJCXpvbmUtPnByZXZfcHJpb3JpdHkgPSBzYy0+cHJpb3JpdHk7CisJCXpvbmUtPnRlbXBfcHJpb3JpdHkgPSBwcmlvcml0eTsKKwkJaWYgKHpvbmUtPnByZXZfcHJpb3JpdHkgPiBwcmlvcml0eSkKKwkJCXpvbmUtPnByZXZfcHJpb3JpdHkgPSBwcmlvcml0eTsKIAotCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUgJiYgc2MtPnByaW9yaXR5ICE9IERFRl9QUklPUklUWSkKKwkJaWYgKHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlICYmIHByaW9yaXR5ICE9IERFRl9QUklPUklUWSkKIAkJCWNvbnRpbnVlOwkvKiBMZXQga3N3YXBkIHBvbGwgaXQgKi8KIAotCQlzaHJpbmtfem9uZSh6b25lLCBzYyk7CisJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfem9uZShwcmlvcml0eSwgem9uZSwgc2MpOwogCX0KKwlyZXR1cm4gbnJfcmVjbGFpbWVkOwogfQogIAogLyoKQEAgLTE0MjIsMTkgKzk0MywyMSBAQAogICogaG9sZHMgZmlsZXN5c3RlbSBsb2NrcyB3aGljaCBwcmV2ZW50IHdyaXRlb3V0IHRoaXMgbWlnaHQgbm90IHdvcmssIGFuZCB0aGUKICAqIGFsbG9jYXRpb24gYXR0ZW1wdCB3aWxsIGZhaWwuCiAgKi8KLWludCB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqKnpvbmVzLCBnZnBfdCBnZnBfbWFzaykKK3Vuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKip6b25lcywgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJaW50IHByaW9yaXR5OwogCWludCByZXQgPSAwOwotCWludCB0b3RhbF9zY2FubmVkID0gMCwgdG90YWxfcmVjbGFpbWVkID0gMDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NjYW5uZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcmVjbGFpbV9zdGF0ZSA9IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGU7Ci0Jc3RydWN0IHNjYW5fY29udHJvbCBzYzsKIAl1bnNpZ25lZCBsb25nIGxydV9wYWdlcyA9IDA7CiAJaW50IGk7Ci0KLQlzYy5nZnBfbWFzayA9IGdmcF9tYXNrOwotCXNjLm1heV93cml0ZXBhZ2UgPSAhbGFwdG9wX21vZGU7Ci0Jc2MubWF5X3N3YXAgPSAxOworCXN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7CisJCS5nZnBfbWFzayA9IGdmcF9tYXNrLAorCQkubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKKwkJLnN3YXBfY2x1c3Rlcl9tYXggPSBTV0FQX0NMVVNURVJfTUFYLAorCQkubWF5X3N3YXAgPSAxLAorCX07CiAKIAlpbmNfcGFnZV9zdGF0ZShhbGxvY3N0YWxsKTsKIApAQCAtMTQ1MSwyMCArOTc0LDE2IEBACiAJZm9yIChwcmlvcml0eSA9IERFRl9QUklPUklUWTsgcHJpb3JpdHkgPj0gMDsgcHJpb3JpdHktLSkgewogCQlzYy5ucl9tYXBwZWQgPSByZWFkX3BhZ2Vfc3RhdGUobnJfbWFwcGVkKTsKIAkJc2MubnJfc2Nhbm5lZCA9IDA7Ci0JCXNjLm5yX3JlY2xhaW1lZCA9IDA7Ci0JCXNjLnByaW9yaXR5ID0gcHJpb3JpdHk7Ci0JCXNjLnN3YXBfY2x1c3Rlcl9tYXggPSBTV0FQX0NMVVNURVJfTUFYOwogCQlpZiAoIXByaW9yaXR5KQogCQkJZGlzYWJsZV9zd2FwX3Rva2VuKCk7Ci0JCXNocmlua19jYWNoZXMoem9uZXMsICZzYyk7CisJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfem9uZXMocHJpb3JpdHksIHpvbmVzLCAmc2MpOwogCQlzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBnZnBfbWFzaywgbHJ1X3BhZ2VzKTsKIAkJaWYgKHJlY2xhaW1fc3RhdGUpIHsKLQkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLT5yZWNsYWltZWRfc2xhYjsKKwkJCW5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLT5yZWNsYWltZWRfc2xhYjsKIAkJCXJlY2xhaW1fc3RhdGUtPnJlY2xhaW1lZF9zbGFiID0gMDsKIAkJfQogCQl0b3RhbF9zY2FubmVkICs9IHNjLm5yX3NjYW5uZWQ7Ci0JCXRvdGFsX3JlY2xhaW1lZCArPSBzYy5ucl9yZWNsYWltZWQ7Ci0JCWlmICh0b3RhbF9yZWNsYWltZWQgPj0gc2Muc3dhcF9jbHVzdGVyX21heCkgeworCQlpZiAobnJfcmVjbGFpbWVkID49IHNjLnN3YXBfY2x1c3Rlcl9tYXgpIHsKIAkJCXJldCA9IDE7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTQ3Niw3ICs5OTUsOCBAQAogCQkgKiB0aGF0J3MgdW5kZXNpcmFibGUgaW4gbGFwdG9wIG1vZGUsIHdoZXJlIHdlICp3YW50KiBsdW1weQogCQkgKiB3cml0ZW91dC4gIFNvIGluIGxhcHRvcCBtb2RlLCB3cml0ZSBvdXQgdGhlIHdob2xlIHdvcmxkLgogCQkgKi8KLQkJaWYgKHRvdGFsX3NjYW5uZWQgPiBzYy5zd2FwX2NsdXN0ZXJfbWF4ICsgc2Muc3dhcF9jbHVzdGVyX21heC8yKSB7CisJCWlmICh0b3RhbF9zY2FubmVkID4gc2Muc3dhcF9jbHVzdGVyX21heCArCisJCQkJCXNjLnN3YXBfY2x1c3Rlcl9tYXggLyAyKSB7CiAJCQl3YWtldXBfcGRmbHVzaChsYXB0b3BfbW9kZSA/IDAgOiB0b3RhbF9zY2FubmVkKTsKIAkJCXNjLm1heV93cml0ZXBhZ2UgPSAxOwogCQl9CkBAIC0xNTIyLDIyICsxMDQyLDI2IEBACiAgKiB0aGUgcGFnZSBhbGxvY2F0b3IgZmFsbGJhY2sgc2NoZW1lIHRvIGVuc3VyZSB0aGF0IGFnaW5nIG9mIHBhZ2VzIGlzIGJhbGFuY2VkCiAgKiBhY3Jvc3MgdGhlIHpvbmVzLgogICovCi1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG5yX3BhZ2VzLCBpbnQgb3JkZXIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCQkJaW50IG9yZGVyKQogewotCWludCB0b19mcmVlID0gbnJfcGFnZXM7CisJdW5zaWduZWQgbG9uZyB0b19mcmVlID0gbnJfcGFnZXM7CiAJaW50IGFsbF96b25lc19vazsKIAlpbnQgcHJpb3JpdHk7CiAJaW50IGk7Ci0JaW50IHRvdGFsX3NjYW5uZWQsIHRvdGFsX3JlY2xhaW1lZDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3NjYW5uZWQ7CisJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7CiAJc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJlY2xhaW1fc3RhdGUgPSBjdXJyZW50LT5yZWNsYWltX3N0YXRlOwotCXN0cnVjdCBzY2FuX2NvbnRyb2wgc2M7CisJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKKwkJLmdmcF9tYXNrID0gR0ZQX0tFUk5FTCwKKwkJLm1heV9zd2FwID0gMSwKKwkJLnN3YXBfY2x1c3Rlcl9tYXggPSBucl9wYWdlcyA/IG5yX3BhZ2VzIDogU1dBUF9DTFVTVEVSX01BWCwKKwl9OwogCiBsb29wX2FnYWluOgogCXRvdGFsX3NjYW5uZWQgPSAwOwotCXRvdGFsX3JlY2xhaW1lZCA9IDA7Ci0Jc2MuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMOwotCXNjLm1heV93cml0ZXBhZ2UgPSAhbGFwdG9wX21vZGU7Ci0Jc2MubWF5X3N3YXAgPSAxOworCW5yX3JlY2xhaW1lZCA9IDA7CisJc2MubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKIAlzYy5ucl9tYXBwZWQgPSByZWFkX3BhZ2Vfc3RhdGUobnJfbWFwcGVkKTsKIAogCWluY19wYWdlX3N0YXRlKHBhZ2VvdXRydW4pOwpAQCAtMTYxOCwxNSArMTE0MiwxMSBAQAogCQkJaWYgKHpvbmUtPnByZXZfcHJpb3JpdHkgPiBwcmlvcml0eSkKIAkJCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gcHJpb3JpdHk7CiAJCQlzYy5ucl9zY2FubmVkID0gMDsKLQkJCXNjLm5yX3JlY2xhaW1lZCA9IDA7Ci0JCQlzYy5wcmlvcml0eSA9IHByaW9yaXR5OwotCQkJc2Muc3dhcF9jbHVzdGVyX21heCA9IG5yX3BhZ2VzPyBucl9wYWdlcyA6IFNXQVBfQ0xVU1RFUl9NQVg7Ci0JCQlzaHJpbmtfem9uZSh6b25lLCAmc2MpOworCQkJbnJfcmVjbGFpbWVkICs9IHNocmlua196b25lKHByaW9yaXR5LCB6b25lLCAmc2MpOwogCQkJcmVjbGFpbV9zdGF0ZS0+cmVjbGFpbWVkX3NsYWIgPSAwOwogCQkJbnJfc2xhYiA9IHNocmlua19zbGFiKHNjLm5yX3NjYW5uZWQsIEdGUF9LRVJORUwsCiAJCQkJCQlscnVfcGFnZXMpOwotCQkJc2MubnJfcmVjbGFpbWVkICs9IHJlY2xhaW1fc3RhdGUtPnJlY2xhaW1lZF9zbGFiOwotCQkJdG90YWxfcmVjbGFpbWVkICs9IHNjLm5yX3JlY2xhaW1lZDsKKwkJCW5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLT5yZWNsYWltZWRfc2xhYjsKIAkJCXRvdGFsX3NjYW5uZWQgKz0gc2MubnJfc2Nhbm5lZDsKIAkJCWlmICh6b25lLT5hbGxfdW5yZWNsYWltYWJsZSkKIAkJCQljb250aW51ZTsKQEAgLTE2MzksMTAgKzExNTksMTAgQEAKIAkJCSAqIGV2ZW4gaW4gbGFwdG9wIG1vZGUKIAkJCSAqLwogCQkJaWYgKHRvdGFsX3NjYW5uZWQgPiBTV0FQX0NMVVNURVJfTUFYICogMiAmJgotCQkJICAgIHRvdGFsX3NjYW5uZWQgPiB0b3RhbF9yZWNsYWltZWQrdG90YWxfcmVjbGFpbWVkLzIpCisJCQkgICAgdG90YWxfc2Nhbm5lZCA+IG5yX3JlY2xhaW1lZCArIG5yX3JlY2xhaW1lZCAvIDIpCiAJCQkJc2MubWF5X3dyaXRlcGFnZSA9IDE7CiAJCX0KLQkJaWYgKG5yX3BhZ2VzICYmIHRvX2ZyZWUgPiB0b3RhbF9yZWNsYWltZWQpCisJCWlmIChucl9wYWdlcyAmJiB0b19mcmVlID4gbnJfcmVjbGFpbWVkKQogCQkJY29udGludWU7CS8qIHN3c3VzcDogbmVlZCB0byBkbyBtb3JlIHdvcmsgKi8KIAkJaWYgKGFsbF96b25lc19vaykKIAkJCWJyZWFrOwkJLyoga3N3YXBkOiBhbGwgZG9uZSAqLwpAQCAtMTY1OSw3ICsxMTc5LDcgQEAKIAkJICogbWF0Y2hlcyB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCBiZWhhdmlvdXIgaW4gdGVybXMgb2YgaW1wYWN0CiAJCSAqIG9uIHpvbmUtPipfcHJpb3JpdHkuCiAJCSAqLwotCQlpZiAoKHRvdGFsX3JlY2xhaW1lZCA+PSBTV0FQX0NMVVNURVJfTUFYKSAmJiAoIW5yX3BhZ2VzKSkKKwkJaWYgKChucl9yZWNsYWltZWQgPj0gU1dBUF9DTFVTVEVSX01BWCkgJiYgIW5yX3BhZ2VzKQogCQkJYnJlYWs7CiAJfQogb3V0OgpAQCAtMTY3Myw3ICsxMTkzLDcgQEAKIAkJZ290byBsb29wX2FnYWluOwogCX0KIAotCXJldHVybiB0b3RhbF9yZWNsYWltZWQ7CisJcmV0dXJuIG5yX3JlY2xhaW1lZDsKIH0KIAogLyoKQEAgLTE3NzMsMjQgKzEyOTMsMzEgQEAKICAqIFRyeSB0byBmcmVlIGBucl9wYWdlcycgb2YgbWVtb3J5LCBzeXN0ZW0td2lkZS4gIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlZAogICogcGFnZXMuCiAgKi8KLWludCBzaHJpbmtfYWxsX21lbW9yeShpbnQgbnJfcGFnZXMpCit1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB7CiAJcGdfZGF0YV90ICpwZ2RhdDsKLQlpbnQgbnJfdG9fZnJlZSA9IG5yX3BhZ2VzOwotCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSA9IG5yX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKwl1bnNpZ25lZCByZXRyeSA9IDI7CiAJc3RydWN0IHJlY2xhaW1fc3RhdGUgcmVjbGFpbV9zdGF0ZSA9IHsKIAkJLnJlY2xhaW1lZF9zbGFiID0gMCwKIAl9OwogCiAJY3VycmVudC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOworcmVwZWF0OgogCWZvcl9lYWNoX3BnZGF0KHBnZGF0KSB7Ci0JCWludCBmcmVlZDsKKwkJdW5zaWduZWQgbG9uZyBmcmVlZDsKKwogCQlmcmVlZCA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIG5yX3RvX2ZyZWUsIDApOwogCQlyZXQgKz0gZnJlZWQ7CiAJCW5yX3RvX2ZyZWUgLT0gZnJlZWQ7Ci0JCWlmIChucl90b19mcmVlIDw9IDApCisJCWlmICgobG9uZylucl90b19mcmVlIDw9IDApCiAJCQlicmVhazsKIAl9CisJaWYgKHJldHJ5LS0gJiYgcmV0IDwgbnJfcGFnZXMpIHsKKwkJYmxrX2Nvbmdlc3Rpb25fd2FpdChXUklURSwgSFovNSk7CisJCWdvdG8gcmVwZWF0OworCX0KIAljdXJyZW50LT5yZWNsYWltX3N0YXRlID0gTlVMTDsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTgwMiw4ICsxMzI5LDcgQEAKICAgIGF3YXksIHdlIGdldCBjaGFuZ2VkIHRvIHJ1biBhbnl3aGVyZTogYXMgdGhlIGZpcnN0IG9uZSBjb21lcyBiYWNrLAogICAgcmVzdG9yZSB0aGVpciBjcHUgYmluZGluZ3MuICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCi0JCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwKLQkJCQkgIHZvaWQgKmhjcHUpCisJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlwZ19kYXRhX3QgKnBnZGF0OwogCWNwdW1hc2tfdCBtYXNrOwpAQCAtMTgyMywxMCArMTM0OSwxNyBAQAogc3RhdGljIGludCBfX2luaXQga3N3YXBkX2luaXQodm9pZCkKIHsKIAlwZ19kYXRhX3QgKnBnZGF0OworCiAJc3dhcF9zZXR1cCgpOwotCWZvcl9lYWNoX3BnZGF0KHBnZGF0KQotCQlwZ2RhdC0+a3N3YXBkCi0JCT0gZmluZF90YXNrX2J5X3BpZChrZXJuZWxfdGhyZWFkKGtzd2FwZCwgcGdkYXQsIENMT05FX0tFUk5FTCkpOworCWZvcl9lYWNoX3BnZGF0KHBnZGF0KSB7CisJCXBpZF90IHBpZDsKKworCQlwaWQgPSBrZXJuZWxfdGhyZWFkKGtzd2FwZCwgcGdkYXQsIENMT05FX0tFUk5FTCk7CisJCUJVR19PTihwaWQgPCAwKTsKKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcGdkYXQtPmtzd2FwZCA9IGZpbmRfdGFza19ieV9waWQocGlkKTsKKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCX0KIAl0b3RhbF9tZW1vcnkgPSBucl9mcmVlX3BhZ2VjYWNoZV9wYWdlcygpOwogCWhvdGNwdV9ub3RpZmllcihjcHVfY2FsbGJhY2ssIDApOwogCXJldHVybiAwOwpAQCAtMTg2OCw0NyArMTQwMSwzMSBAQAogLyoKICAqIFRyeSB0byBmcmVlIHVwIHNvbWUgcGFnZXMgZnJvbSB0aGlzIHpvbmUgdGhyb3VnaCByZWNsYWltLgogICovCi1pbnQgem9uZV9yZWNsYWltKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKQorc3RhdGljIGludCBfX3pvbmVfcmVjbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikKIHsKLQlpbnQgbnJfcGFnZXM7CisJLyogTWluaW11bSBwYWdlcyBuZWVkZWQgaW4gb3JkZXIgdG8gc3RheSBvbiBub2RlICovCisJY29uc3QgdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEgPDwgb3JkZXI7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSByZWNsYWltX3N0YXRlOwotCXN0cnVjdCBzY2FuX2NvbnRyb2wgc2M7Ci0JY3B1bWFza190IG1hc2s7Ci0JaW50IG5vZGVfaWQ7Ci0KLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywKLQkJem9uZS0+bGFzdF91bnN1Y2Nlc3NmdWxfem9uZV9yZWNsYWltICsgem9uZV9yZWNsYWltX2ludGVydmFsKSkKLQkJCXJldHVybiAwOwotCi0JaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSB8fAotCQl6b25lLT5hbGxfdW5yZWNsYWltYWJsZSB8fAotCQlhdG9taWNfcmVhZCgmem9uZS0+cmVjbGFpbV9pbl9wcm9ncmVzcykgPiAwKQotCQkJcmV0dXJuIDA7Ci0KLQlub2RlX2lkID0gem9uZS0+em9uZV9wZ2RhdC0+bm9kZV9pZDsKLQltYXNrID0gbm9kZV90b19jcHVtYXNrKG5vZGVfaWQpOwotCWlmICghY3B1c19lbXB0eShtYXNrKSAmJiBub2RlX2lkICE9IG51bWFfbm9kZV9pZCgpKQotCQlyZXR1cm4gMDsKLQotCXNjLm1heV93cml0ZXBhZ2UgPSAhISh6b25lX3JlY2xhaW1fbW9kZSAmIFJFQ0xBSU1fV1JJVEUpOwotCXNjLm1heV9zd2FwID0gISEoem9uZV9yZWNsYWltX21vZGUgJiBSRUNMQUlNX1NXQVApOwotCXNjLm5yX3NjYW5uZWQgPSAwOwotCXNjLm5yX3JlY2xhaW1lZCA9IDA7Ci0Jc2MucHJpb3JpdHkgPSBaT05FX1JFQ0xBSU1fUFJJT1JJVFkgKyAxOwotCXNjLm5yX21hcHBlZCA9IHJlYWRfcGFnZV9zdGF0ZShucl9tYXBwZWQpOwotCXNjLmdmcF9tYXNrID0gZ2ZwX21hc2s7CisJaW50IHByaW9yaXR5OworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKKwlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0geworCQkubWF5X3dyaXRlcGFnZSA9ICEhKHpvbmVfcmVjbGFpbV9tb2RlICYgUkVDTEFJTV9XUklURSksCisJCS5tYXlfc3dhcCA9ICEhKHpvbmVfcmVjbGFpbV9tb2RlICYgUkVDTEFJTV9TV0FQKSwKKwkJLm5yX21hcHBlZCA9IHJlYWRfcGFnZV9zdGF0ZShucl9tYXBwZWQpLAorCQkuc3dhcF9jbHVzdGVyX21heCA9IG1heF90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLAorCQkJCQlTV0FQX0NMVVNURVJfTUFYKSwKKwkJLmdmcF9tYXNrID0gZ2ZwX21hc2ssCisJfTsKIAogCWRpc2FibGVfc3dhcF90b2tlbigpOwotCi0JbnJfcGFnZXMgPSAxIDw8IG9yZGVyOwotCWlmIChucl9wYWdlcyA+IFNXQVBfQ0xVU1RFUl9NQVgpCi0JCXNjLnN3YXBfY2x1c3Rlcl9tYXggPSBucl9wYWdlczsKLQllbHNlCi0JCXNjLnN3YXBfY2x1c3Rlcl9tYXggPSBTV0FQX0NMVVNURVJfTUFYOwotCiAJY29uZF9yZXNjaGVkKCk7Ci0JcC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0M7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gYWxsb2NhdGUgZnJvbSB0aGUgcmVzZXJ2ZXMgZm9yIFJFQ0xBSU1fU1dBUAorCSAqIGFuZCB3ZSBhbHNvIG5lZWQgdG8gYmUgYWJsZSB0byB3cml0ZSBvdXQgcGFnZXMgZm9yIFJFQ0xBSU1fV1JJVEUKKwkgKiBhbmQgUkVDTEFJTV9TV0FQLgorCSAqLworCXAtPmZsYWdzIHw9IFBGX01FTUFMTE9DIHwgUEZfU1dBUFdSSVRFOwogCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwogCXAtPnJlY2xhaW1fc3RhdGUgPSAmcmVjbGFpbV9zdGF0ZTsKIApAQCAtMTkxNiwzMiArMTQzMyw3OCBAQAogCSAqIEZyZWUgbWVtb3J5IGJ5IGNhbGxpbmcgc2hyaW5rIHpvbmUgd2l0aCBpbmNyZWFzaW5nIHByaW9yaXRpZXMKIAkgKiB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuCiAJICovCisJcHJpb3JpdHkgPSBaT05FX1JFQ0xBSU1fUFJJT1JJVFk7CiAJZG8gewotCQlzYy5wcmlvcml0eS0tOwotCQlzaHJpbmtfem9uZSh6b25lLCAmc2MpOworCQlucl9yZWNsYWltZWQgKz0gc2hyaW5rX3pvbmUocHJpb3JpdHksIHpvbmUsICZzYyk7CisJCXByaW9yaXR5LS07CisJfSB3aGlsZSAocHJpb3JpdHkgPj0gMCAmJiBucl9yZWNsYWltZWQgPCBucl9wYWdlcyk7CiAKLQl9IHdoaWxlIChzYy5ucl9yZWNsYWltZWQgPCBucl9wYWdlcyAmJiBzYy5wcmlvcml0eSA+IDApOwotCi0JaWYgKHNjLm5yX3JlY2xhaW1lZCA8IG5yX3BhZ2VzICYmICh6b25lX3JlY2xhaW1fbW9kZSAmIFJFQ0xBSU1fU0xBQikpIHsKKwlpZiAobnJfcmVjbGFpbWVkIDwgbnJfcGFnZXMgJiYgKHpvbmVfcmVjbGFpbV9tb2RlICYgUkVDTEFJTV9TTEFCKSkgewogCQkvKgotCQkgKiBzaHJpbmtfc2xhYiBkb2VzIG5vdCBjdXJyZW50bHkgYWxsb3cgdXMgdG8gZGV0ZXJtaW5lCi0JCSAqIGhvdyBtYW55IHBhZ2VzIHdlcmUgZnJlZWQgaW4gdGhlIHpvbmUuIFNvIHdlIGp1c3QKLQkJICogc2hha2UgdGhlIHNsYWIgYW5kIHRoZW4gZ28gb2Zmbm9kZSBmb3IgYSBzaW5nbGUgYWxsb2NhdGlvbi4KKwkJICogc2hyaW5rX3NsYWIoKSBkb2VzIG5vdCBjdXJyZW50bHkgYWxsb3cgdXMgdG8gZGV0ZXJtaW5lIGhvdworCQkgKiBtYW55IHBhZ2VzIHdlcmUgZnJlZWQgaW4gdGhpcyB6b25lLiBTbyB3ZSBqdXN0IHNoYWtlIHRoZSBzbGFiCisJCSAqIGEgYml0IGFuZCB0aGVuIGdvIG9mZiBub2RlIGZvciB0aGlzIHBhcnRpY3VsYXIgYWxsb2NhdGlvbgorCQkgKiBkZXNwaXRlIHBvc3NpYmx5IGhhdmluZyBmcmVlZCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIGluCisJCSAqIHRoaXMgem9uZS4gIElmIHdlIGZyZWVkIGxvY2FsIG1lbW9yeSB0aGVuIHRoZSBuZXh0CisJCSAqIGFsbG9jYXRpb25zIHdpbGwgYmUgbG9jYWwgYWdhaW4uCiAJCSAqCiAJCSAqIHNocmlua19zbGFiIHdpbGwgZnJlZSBtZW1vcnkgb24gYWxsIHpvbmVzIGFuZCBtYXkgdGFrZQogCQkgKiBhIGxvbmcgdGltZS4KIAkJICovCiAJCXNocmlua19zbGFiKHNjLm5yX3NjYW5uZWQsIGdmcF9tYXNrLCBvcmRlcik7Ci0JCXNjLm5yX3JlY2xhaW1lZCA9IDE7ICAgIC8qIEF2b2lkIGdldHRpbmcgdGhlIG9mZiBub2RlIHRpbWVvdXQgKi8KIAl9CiAKIAlwLT5yZWNsYWltX3N0YXRlID0gTlVMTDsKLQljdXJyZW50LT5mbGFncyAmPSB+UEZfTUVNQUxMT0M7CisJY3VycmVudC0+ZmxhZ3MgJj0gfihQRl9NRU1BTExPQyB8IFBGX1NXQVBXUklURSk7CiAKLQlpZiAoc2MubnJfcmVjbGFpbWVkID09IDApCisJaWYgKG5yX3JlY2xhaW1lZCA9PSAwKSB7CisJCS8qCisJCSAqIFdlIHdlcmUgdW5hYmxlIHRvIHJlY2xhaW0gZW5vdWdoIHBhZ2VzIHRvIHN0YXkgb24gbm9kZS4gIFdlCisJCSAqIG5vdyBhbGxvdyBvZmYgbm9kZSBhY2Nlc3NlcyBmb3IgYSBjZXJ0YWluIHRpbWUgcGVyaW9kIGJlZm9yZQorCQkgKiB0cnlpbmcgYWdhaW4gdG8gcmVjbGFpbSBwYWdlcyBmcm9tIHRoZSBsb2NhbCB6b25lLgorCQkgKi8KIAkJem9uZS0+bGFzdF91bnN1Y2Nlc3NmdWxfem9uZV9yZWNsYWltID0gamlmZmllczsKKwl9CiAKLQlyZXR1cm4gc2MubnJfcmVjbGFpbWVkID49IG5yX3BhZ2VzOworCXJldHVybiBucl9yZWNsYWltZWQgPj0gbnJfcGFnZXM7Cit9CisKK2ludCB6b25lX3JlY2xhaW0oc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJY3B1bWFza190IG1hc2s7CisJaW50IG5vZGVfaWQ7CisKKwkvKgorCSAqIERvIG5vdCByZWNsYWltIGlmIHRoZXJlIHdhcyBhIHJlY2VudCB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdCBhdCB6b25lCisJICogcmVjbGFpbS4gIEluIHRoYXQgY2FzZSB3ZSBsZXQgYWxsb2NhdGlvbnMgZ28gb2ZmIG5vZGUgZm9yIHRoZQorCSAqIHpvbmVfcmVjbGFpbV9pbnRlcnZhbC4gIE90aGVyd2lzZSB3ZSB3b3VsZCBzY2FuIGZvciBlYWNoIG9mZi1ub2RlCisJICogcGFnZSBhbGxvY2F0aW9uLgorCSAqLworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLAorCQl6b25lLT5sYXN0X3Vuc3VjY2Vzc2Z1bF96b25lX3JlY2xhaW0gKyB6b25lX3JlY2xhaW1faW50ZXJ2YWwpKQorCQkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEF2b2lkIGNvbmN1cnJlbnQgem9uZSByZWNsYWltcywgZG8gbm90IHJlY2xhaW0gaW4gYSB6b25lIHRoYXQgZG9lcworCSAqIG5vdCBoYXZlIHJlY2xhaW1hYmxlIHBhZ2VzIGFuZCBpZiB3ZSBzaG91bGQgbm90IGRlbGF5IHRoZSBhbGxvY2F0aW9uCisJICogdGhlbiBkbyBub3Qgc2Nhbi4KKwkgKi8KKwlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpIHx8CisJCXpvbmUtPmFsbF91bnJlY2xhaW1hYmxlIHx8CisJCWF0b21pY19yZWFkKCZ6b25lLT5yZWNsYWltX2luX3Byb2dyZXNzKSA+IDAgfHwKKwkJKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpKQorCQkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE9ubHkgcnVuIHpvbmUgcmVjbGFpbSBvbiB0aGUgbG9jYWwgem9uZSBvciBvbiB6b25lcyB0aGF0IGRvIG5vdAorCSAqIGhhdmUgYXNzb2NpYXRlZCBwcm9jZXNzb3JzLiBUaGlzIHdpbGwgZmF2b3IgdGhlIGxvY2FsIHByb2Nlc3NvcgorCSAqIG92ZXIgcmVtb3RlIHByb2Nlc3NvcnMgYW5kIHNwcmVhZCBvZmYgbm9kZSBtZW1vcnkgYWxsb2NhdGlvbnMKKwkgKiBhcyB3aWRlIGFzIHBvc3NpYmxlLgorCSAqLworCW5vZGVfaWQgPSB6b25lLT56b25lX3BnZGF0LT5ub2RlX2lkOworCW1hc2sgPSBub2RlX3RvX2NwdW1hc2sobm9kZV9pZCk7CisJaWYgKCFjcHVzX2VtcHR5KG1hc2spICYmIG5vZGVfaWQgIT0gbnVtYV9ub2RlX2lkKCkpCisJCXJldHVybiAwOworCXJldHVybiBfX3pvbmVfcmVjbGFpbSh6b25lLCBnZnBfbWFzaywgb3JkZXIpOwogfQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL25ldC84MDIvcHNuYXAuYyBiL25ldC84MDIvcHNuYXAuYwppbmRleCAzNGU0Mjk2Li4yNzBiOWQyIDEwMDY0NAotLS0gYS9uZXQvODAyL3BzbmFwLmMKKysrIGIvbmV0LzgwMi9wc25hcC5jCkBAIC01OSwxMCArNTksOCBAQAogCXByb3RvID0gZmluZF9zbmFwX2NsaWVudChza2ItPmgucmF3KTsKIAlpZiAocHJvdG8pIHsKIAkJLyogUGFzcyB0aGUgZnJhbWUgb24uICovCi0JCXU4ICpoZHIgPSBza2ItPmRhdGE7CiAJCXNrYi0+aC5yYXcgICs9IDU7Ci0JCXNrYl9wdWxsKHNrYiwgNSk7Ci0JCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIGhkciwgNSk7CisJCXNrYl9wdWxsX3Jjc3VtKHNrYiwgNSk7CiAJCXJjID0gcHJvdG8tPnJjdmZ1bmMoc2tiLCBkZXYsICZzbmFwX3BhY2tldF90eXBlLCBvcmlnX2Rldik7CiAJfSBlbHNlIHsKIAkJc2tiLT5zayA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCBmYTc2MjIwLi4zOTQ4OTQ5IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCisrKyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogLyogQml0cyBvZiBuZXRkZXYgc3RhdGUgdGhhdCBhcmUgcHJvcGFnYXRlZCBmcm9tIHJlYWwgZGV2aWNlIHRvIHZpcnR1YWwgKi8KICNkZWZpbmUgVkxBTl9MSU5LX1NUQVRFX01BU0sgXAotCSgoMTw8X19MSU5LX1NUQVRFX1BSRVNFTlQpfCgxPDxfX0xJTktfU1RBVEVfTk9DQVJSSUVSKSkKKwkoKDE8PF9fTElOS19TVEFURV9QUkVTRU5UKXwoMTw8X19MSU5LX1NUQVRFX05PQ0FSUklFUil8KDE8PF9fTElOS19TVEFURV9ET1JNQU5UKSkKIAogLyogRW5kIG9mIGdsb2JhbCB2YXJpYWJsZXMgZGVmaW5pdGlvbnMuICovCiAKQEAgLTM0NCw2ICszNDQsMjYgQEAKIAluZXdfZGV2LT5kb19pb2N0bCA9IHZsYW5fZGV2X2lvY3RsOwogfQogCitzdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldikKK3sKKwkvKiBIYXZlIHRvIHJlc3BlY3QgdXNlcnNwYWNlIGVuZm9yY2VkIGRvcm1hbnQgc3RhdGUKKwkgKiBvZiByZWFsIGRldmljZSwgYWxzbyBtdXN0IGFsbG93IHN1cHBsaWNhbnQgcnVubmluZworCSAqIG9uIFZMQU4gZGV2aWNlCisJICovCisJaWYgKGRldi0+b3BlcnN0YXRlID09IElGX09QRVJfRE9STUFOVCkKKwkJbmV0aWZfZG9ybWFudF9vbih2bGFuZGV2KTsKKwllbHNlCisJCW5ldGlmX2Rvcm1hbnRfb2ZmKHZsYW5kZXYpOworCisJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sodmxhbmRldikpCisJCQluZXRpZl9jYXJyaWVyX29uKHZsYW5kZXYpOworCX0gZWxzZSB7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rKHZsYW5kZXYpKQorCQkJbmV0aWZfY2Fycmllcl9vZmYodmxhbmRldik7CisJfQorfQorCiAvKiAgQXR0YWNoIGEgVkxBTiBkZXZpY2UgdG8gYSBtYWMgYWRkcmVzcyAoaWUgRXRoZXJuZXQgQ2FyZCkuCiAgKiAgUmV0dXJucyB0aGUgZGV2aWNlIHRoYXQgd2FzIGNyZWF0ZWQsIG9yIE5VTEwgaWYgdGhlcmUgd2FzCiAgKiAgYW4gZXJyb3Igb2Ygc29tZSBraW5kLgpAQCAtNDUwLDcgKzQ3MCw3IEBACiAJbmV3X2Rldi0+ZmxhZ3MgPSByZWFsX2Rldi0+ZmxhZ3M7CiAJbmV3X2Rldi0+ZmxhZ3MgJj0gfklGRl9VUDsKIAotCW5ld19kZXYtPnN0YXRlID0gcmVhbF9kZXYtPnN0YXRlICYgVkxBTl9MSU5LX1NUQVRFX01BU0s7CisJbmV3X2Rldi0+c3RhdGUgPSByZWFsX2Rldi0+c3RhdGUgJiB+KDE8PF9fTElOS19TVEFURV9TVEFSVCk7CiAKIAkvKiBuZWVkIDQgYnl0ZXMgZm9yIGV4dHJhIFZMQU4gaGVhZGVyIGluZm8sCiAJICogaG9wZSB0aGUgdW5kZXJseWluZyBkZXZpY2UgY2FuIGhhbmRsZSBpdC4KQEAgLTQ5OCw2ICs1MTgsMTAgQEAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKG5ld19kZXYpKQogCQlnb3RvIG91dF9mcmVlX25ld2RldjsKIAorCW5ld19kZXYtPmlmbGluayA9IHJlYWxfZGV2LT5pZmluZGV4OworCXZsYW5fdHJhbnNmZXJfb3BlcnN0YXRlKHJlYWxfZGV2LCBuZXdfZGV2KTsKKwlsaW5rd2F0Y2hfZmlyZV9ldmVudChuZXdfZGV2KTsgLyogX01VU1RfIGNhbGwgcmZjMjg2M19wb2xpY3koKSAqLworCiAJLyogU28sIGdvdCB0aGUgc3Vja2VyIGluaXRpYWxpemVkLCBub3cgbGV0cyBwbGFjZQogCSAqIGl0IGludG8gb3VyIGxvY2FsIHN0cnVjdHVyZS4KIAkgKi8KQEAgLTU3MywyNSArNTk3LDEyIEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTkVUREVWX0NIQU5HRToKIAkJLyogUHJvcGFnYXRlIHJlYWwgZGV2aWNlIHN0YXRlIHRvIHZsYW4gZGV2aWNlcyAqLwotCQlmbGdzID0gZGV2LT5zdGF0ZSAmIFZMQU5fTElOS19TVEFURV9NQVNLOwogCQlmb3IgKGkgPSAwOyBpIDwgVkxBTl9HUk9VUF9BUlJBWV9MRU47IGkrKykgewogCQkJdmxhbmRldiA9IGdycC0+dmxhbl9kZXZpY2VzW2ldOwogCQkJaWYgKCF2bGFuZGV2KQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHZsYW5kZXYpKQotCQkJCQluZXRpZl9jYXJyaWVyX29uKHZsYW5kZXYpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAobmV0aWZfY2Fycmllcl9vayh2bGFuZGV2KSkKLQkJCQkJbmV0aWZfY2Fycmllcl9vZmYodmxhbmRldik7Ci0JCQl9Ci0KLQkJCWlmICgodmxhbmRldi0+c3RhdGUgJiBWTEFOX0xJTktfU1RBVEVfTUFTSykgIT0gZmxncykgewotCQkJCXZsYW5kZXYtPnN0YXRlID0gKHZsYW5kZXYtPnN0YXRlICZ+IFZMQU5fTElOS19TVEFURV9NQVNLKSAKLQkJCQkJfCBmbGdzOwotCQkJCW5ldGRldl9zdGF0ZV9jaGFuZ2UodmxhbmRldik7Ci0JCQl9CisJCQl2bGFuX3RyYW5zZmVyX29wZXJzdGF0ZShkZXYsIHZsYW5kZXYpOwogCQl9CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IDBmNjA0ZDIyLi5kYTljZmU5IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuYworKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwpAQCAtMTYzLDEwICsxNjMsOCBAQAogCXN0YXRzLT5yeF9wYWNrZXRzKys7CiAJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCi0Jc2tiX3B1bGwoc2tiLCBWTEFOX0hMRU4pOyAvKiB0YWtlIG9mZiB0aGUgVkxBTiBoZWFkZXIgKDQgYnl0ZXMgY3VycmVudGx5KSAqLwotCi0JLyogTmVlZCB0byBjb3JyZWN0IGhhcmR3YXJlIGNoZWNrc3VtICovCi0Jc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgdmhkciwgVkxBTl9ITEVOKTsKKwkvKiBUYWtlIG9mZiB0aGUgVkxBTiBoZWFkZXIgKDQgYnl0ZXMgY3VycmVudGx5KSAqLworCXNrYl9wdWxsX3Jjc3VtKHNrYiwgVkxBTl9ITEVOKTsKIAogCS8qIE9rLCBsZXRzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlIChkZXYpIHdlCiAJICogY2FtZSBpbiBvbiBpcyB3aGF0IHRoaXMgVkxBTiBpcyBhdHRhY2hlZCB0by4KZGlmZiAtLWdpdCBhL25ldC9LY29uZmlnIGIvbmV0L0tjb25maWcKaW5kZXggNTEyNmY1OC4uNDE5M2NkYyAxMDA2NDQKLS0tIGEvbmV0L0tjb25maWcKKysrIGIvbmV0L0tjb25maWcKQEAgLTIyNCw2ICsyMjQsOSBAQAogc291cmNlICJuZXQvYmx1ZXRvb3RoL0tjb25maWciCiBzb3VyY2UgIm5ldC9pZWVlODAyMTEvS2NvbmZpZyIKIAorY29uZmlnIFdJUkVMRVNTX0VYVAorCWJvb2wKKwogZW5kaWYgICAjIGlmIE5FVAogZW5kbWVudSAjIE5ldHdvcmtpbmcKIApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCA3MzM3MGRlLi4zYWI0ZTc5IDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtMjg5LDcgKzI4OSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfb3BzIGNsaXBfbmVpZ2hfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKLQkuZGVzdHJ1Y3RvciA9CQljbGlwX25laWdoX2Rlc3Ryb3ksCiAJLnNvbGljaXQgPQkJY2xpcF9uZWlnaF9zb2xpY2l0LAogCS5lcnJvcl9yZXBvcnQgPQkJY2xpcF9uZWlnaF9lcnJvciwKIAkub3V0cHV0ID0JCWRldl9xdWV1ZV94bWl0LApAQCAtMzQ3LDYgKzM0Niw3IEBACiAJLyogcGFyYW1ldGVycyBhcmUgY29waWVkIGZyb20gQVJQIC4uLiAqLwogCS5wYXJtcyA9IHsKIAkJLnRibCAJCQk9ICZjbGlwX3RibCwKKwkJLm5laWdoX2Rlc3RydWN0b3IJPSBjbGlwX25laWdoX2Rlc3Ryb3ksCiAJCS5iYXNlX3JlYWNoYWJsZV90aW1lIAk9IDMwICogSFosCiAJCS5yZXRyYW5zX3RpbWUgCQk9IDEgKiBIWiwKIAkJLmdjX3N0YWxldGltZSAJCT0gNjAgKiBIWiwKZGlmZiAtLWdpdCBhL25ldC9hdG0vY29tbW9uLmMgYi9uZXQvYXRtL2NvbW1vbi5jCmluZGV4IDY2NTZiMTEuLmFlMDAyMjIgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY29tbW9uLmMKKysrIGIvbmV0L2F0bS9jb21tb24uYwpAQCAtNDUxLDEyICs0NTEsMTIgQEAKIAkJZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSwgImF0bS1kZXZpY2UtJWQiLCBpdGYpOwogCX0gZWxzZSB7CiAJCWRldiA9IE5VTEw7Ci0JCWRvd24oJmF0bV9kZXZfbXV0ZXgpOworCQltdXRleF9sb2NrKCZhdG1fZGV2X211dGV4KTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZhdG1fZGV2cykpIHsKIAkJCWRldiA9IGxpc3RfZW50cnkoYXRtX2RldnMubmV4dCwgc3RydWN0IGF0bV9kZXYsIGRldl9saXN0KTsKIAkJCWF0bV9kZXZfaG9sZChkZXYpOwogCQl9Ci0JCXVwKCZhdG1fZGV2X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKIAl9CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9pb2N0bC5jIGIvbmV0L2F0bS9pb2N0bC5jCmluZGV4IGViMTA5YWYuLjg1MWNmYTYgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vaW9jdGwuYworKysgYi9uZXQvYXRtL2lvY3RsLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdG1tcGMuaD4KICNpbmNsdWRlIDxuZXQvYXRtY2xpcC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWxlYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgogCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCkBAIC0yNSwyMiArMjYsMjIgQEAKICNpbmNsdWRlICJjb21tb24uaCIKIAogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChpb2N0bF9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGlvY3RsX211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQoaW9jdGxfbGlzdCk7CiAKIAogdm9pZCByZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpCiB7Ci0JZG93bigmaW9jdGxfbXV0ZXgpOworCW11dGV4X2xvY2soJmlvY3RsX211dGV4KTsKIAlsaXN0X2FkZF90YWlsKCZpb2N0bC0+bGlzdCwgJmlvY3RsX2xpc3QpOwotCXVwKCZpb2N0bF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpb2N0bF9tdXRleCk7CiB9CiAKIHZvaWQgZGVyZWdpc3Rlcl9hdG1faW9jdGwoc3RydWN0IGF0bV9pb2N0bCAqaW9jdGwpCiB7Ci0JZG93bigmaW9jdGxfbXV0ZXgpOworCW11dGV4X2xvY2soJmlvY3RsX211dGV4KTsKIAlsaXN0X2RlbCgmaW9jdGwtPmxpc3QpOwotCXVwKCZpb2N0bF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpb2N0bF9tdXRleCk7CiB9CiAKIEVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfYXRtX2lvY3RsKTsKQEAgLTEzNyw3ICsxMzgsNyBAQAogCiAJZXJyb3IgPSAtRU5PSU9DVExDTUQ7CiAKLQlkb3duKCZpb2N0bF9tdXRleCk7CisJbXV0ZXhfbG9jaygmaW9jdGxfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2gocG9zLCAmaW9jdGxfbGlzdCkgewogCQlzdHJ1Y3QgYXRtX2lvY3RsICogaWMgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGF0bV9pb2N0bCwgbGlzdCk7CiAJCWlmICh0cnlfbW9kdWxlX2dldChpYy0+b3duZXIpKSB7CkBAIC0xNDcsNyArMTQ4LDcgQEAKIAkJCQlicmVhazsKIAkJfQogCX0KLQl1cCgmaW9jdGxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaW9jdGxfbXV0ZXgpOwogCiAJaWYgKGVycm9yICE9IC1FTk9JT0NUTENNRCkKIAkJZ290byBkb25lOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9yZXNvdXJjZXMuYyBiL25ldC9hdG0vcmVzb3VyY2VzLmMKaW5kZXggMjI0MTkwNS4uMThhYzgwNiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9yZXNvdXJjZXMuYworKysgYi9uZXQvYXRtL3Jlc291cmNlcy5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CSAvKiBmb3Igc3RydWN0IHNvY2sgKi8KIAogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtMjYsNyArMjgsNyBAQAogCiAKIExJU1RfSEVBRChhdG1fZGV2cyk7Ci1ERUNMQVJFX01VVEVYKGF0bV9kZXZfbXV0ZXgpOworREVGSU5FX01VVEVYKGF0bV9kZXZfbXV0ZXgpOwogCiBzdGF0aWMgc3RydWN0IGF0bV9kZXYgKl9fYWxsb2NfYXRtX2Rldihjb25zdCBjaGFyICp0eXBlKQogewpAQCAtNjUsOSArNjcsOSBAQAogewogCXN0cnVjdCBhdG1fZGV2ICpkZXY7CiAKLQlkb3duKCZhdG1fZGV2X211dGV4KTsKKwltdXRleF9sb2NrKCZhdG1fZGV2X211dGV4KTsKIAlkZXYgPSBfX2F0bV9kZXZfbG9va3VwKG51bWJlcik7Ci0JdXAoJmF0bV9kZXZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYXRtX2Rldl9tdXRleCk7CiAJcmV0dXJuIGRldjsKIH0KIApAQCAtODMsMTEgKzg1LDExIEBACiAJCSAgICB0eXBlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWRvd24oJmF0bV9kZXZfbXV0ZXgpOworCW11dGV4X2xvY2soJmF0bV9kZXZfbXV0ZXgpOwogCWlmIChudW1iZXIgIT0gLTEpIHsKIAkJaWYgKChpbnVzZSA9IF9fYXRtX2Rldl9sb29rdXAobnVtYmVyKSkpIHsKIAkJCWF0bV9kZXZfcHV0KGludXNlKTsKLQkJCXVwKCZhdG1fZGV2X211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmYXRtX2Rldl9tdXRleCk7CiAJCQlrZnJlZShkZXYpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KQEAgLTExMiwxMiArMTE0LDEyIEBACiAJCXByaW50ayhLRVJOX0VSUiAiYXRtX2Rldl9yZWdpc3RlcjogIgogCQkgICAgICAgImF0bV9wcm9jX2Rldl9yZWdpc3RlciBmYWlsZWQgZm9yIGRldiAlc1xuIiwKIAkJICAgICAgIHR5cGUpOwotCQl1cCgmYXRtX2Rldl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmYXRtX2Rldl9tdXRleCk7CiAJCWtmcmVlKGRldik7CiAJCXJldHVybiBOVUxMOwogCX0KIAlsaXN0X2FkZF90YWlsKCZkZXYtPmRldl9saXN0LCAmYXRtX2RldnMpOwotCXVwKCZhdG1fZGV2X211dGV4KTsKKwltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwogCiAJcmV0dXJuIGRldjsKIH0KQEAgLTEzMyw5ICsxMzUsOSBAQAogCSAqIHdpdGggc2FtZSBudW1iZXIgY2FuIGFwcGVhciwgc3VjaCB3ZSBuZWVkIGRlcmVnaXN0ZXIgcHJvYywgCiAJICogcmVsZWFzZSBhc3luYyBhbGwgdmNjcyBhbmQgcmVtb3ZlIHRoZW0gZnJvbSB2Y2NzIGxpc3QgdG9vCiAJICovCi0JZG93bigmYXRtX2Rldl9tdXRleCk7CisJbXV0ZXhfbG9jaygmYXRtX2Rldl9tdXRleCk7CiAJbGlzdF9kZWwoJmRldi0+ZGV2X2xpc3QpOwotCXVwKCZhdG1fZGV2X211dGV4KTsKKwltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwogCiAJYXRtX2Rldl9yZWxlYXNlX3ZjY3MoZGV2KTsKIAlhdG1fcHJvY19kZXZfZGVyZWdpc3RlcihkZXYpOwpAQCAtMTk2LDE2ICsxOTgsMTYgQEAKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCWlmIChnZXRfdXNlcihsZW4sICZpb2J1Zi0+bGVuZ3RoKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWRvd24oJmF0bV9kZXZfbXV0ZXgpOworCQkJbXV0ZXhfbG9jaygmYXRtX2Rldl9tdXRleCk7CiAJCQlsaXN0X2Zvcl9lYWNoKHAsICZhdG1fZGV2cykKIAkJCQlzaXplICs9IHNpemVvZihpbnQpOwogCQkJaWYgKHNpemUgPiBsZW4pIHsKLQkJCQl1cCgmYXRtX2Rldl9tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKIAkJCQlyZXR1cm4gLUUyQklHOwogCQkJfQogCQkJdG1wX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIXRtcF9idWYpIHsKLQkJCQl1cCgmYXRtX2Rldl9tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KIAkJCXRtcF9wID0gdG1wX2J1ZjsKQEAgLTIxMyw3ICsyMTUsNyBAQAogCQkJCWRldiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGF0bV9kZXYsIGRldl9saXN0KTsKIAkJCQkqdG1wX3ArKyA9IGRldi0+bnVtYmVyOwogCQkJfQotCQkJdXAoJmF0bV9kZXZfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKIAkJICAgICAgICBlcnJvciA9ICgoY29weV90b191c2VyKGJ1ZiwgdG1wX2J1Ziwgc2l6ZSkpIHx8CiAJCQkJCXB1dF91c2VyKHNpemUsICZpb2J1Zi0+bGVuZ3RoKSkKIAkJCQkJCT8gLUVGQVVMVCA6IDA7CkBAIC00MDAsMTMgKzQwMiwxMyBAQAogCiB2b2lkICphdG1fZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0gCWRvd24oJmF0bV9kZXZfbXV0ZXgpOworIAltdXRleF9sb2NrKCZhdG1fZGV2X211dGV4KTsKIAlyZXR1cm4gKnBvcyA/IGRldl9nZXRfaWR4KCpwb3MpIDogKHZvaWQgKikgMTsKIH0KIAogdm9pZCBhdG1fZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotIAl1cCgmYXRtX2Rldl9tdXRleCk7CisgCW11dGV4X3VubG9jaygmYXRtX2Rldl9tdXRleCk7CiB9CiAgCiB2b2lkICphdG1fZGV2X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKZGlmZiAtLWdpdCBhL25ldC9hdG0vcmVzb3VyY2VzLmggYi9uZXQvYXRtL3Jlc291cmNlcy5oCmluZGV4IGI3ZmI4MmEuLmFjNzIyMmYgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcmVzb3VyY2VzLmgKKysrIGIvbmV0L2F0bS9yZXNvdXJjZXMuaApAQCAtOCwxMCArOCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhdG1fZGV2czsKLWV4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIGF0bV9kZXZfbXV0ZXg7CitleHRlcm4gc3RydWN0IG11dGV4IGF0bV9kZXZfbXV0ZXg7CiAKIGludCBhdG1fZGV2X2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogCmRpZmYgLS1naXQgYS9uZXQvYXRtL3NpZ25hbGluZy5jIGIvbmV0L2F0bS9zaWduYWxpbmcuYwppbmRleCA5M2FkNTlhLi4zMWQ5OGI1IDEwMDY0NAotLS0gYS9uZXQvYXRtL3NpZ25hbGluZy5jCisrKyBiL25ldC9hdG0vc2lnbmFsaW5nLmMKQEAgLTM5LDI1ICszOSwxOSBAQAogc3RhdGljIHZvaWQgc2lnZF9wdXRfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgV0FJVF9GT1JfREVNT04KLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWxlbmNlOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsY3VycmVudCk7CiAKIAlhZGRfd2FpdF9xdWV1ZSgmc2lnZF9zbGVlcCwmd2FpdCk7CiAJd2hpbGUgKCFzaWdkKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc2lsZW5jZSkgfHwgc2lsZW5jZSA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJhdG1zdmM6IHdhaXRpbmcgZm9yIHNpZ25hbGluZyBkZW1vbiAiCi0JCQkgICAgIi4uLlxuIik7Ci0JCQlzaWxlbmNlID0gKGppZmZpZXMrMzAqSFopfDE7Ci0JCX0KKwkJRFBSSU5USygiYXRtc3ZjOiB3YWl0aW5nIGZvciBzaWduYWxpbmcgZGVtb24uLi5cbiIpOwogCQlzY2hlZHVsZSgpOwogCX0KIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmc2lnZF9zbGVlcCwmd2FpdCk7CiAjZWxzZQogCWlmICghc2lnZCkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRtc3ZjOiBubyBzaWduYWxpbmcgZGVtb25cbiIpOworCQlEUFJJTlRLKCJhdG1zdmM6IG5vIHNpZ25hbGluZyBkZW1vblxuIik7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvc3lzY3RsX25ldF9heDI1LmMgYi9uZXQvYXgyNS9zeXNjdGxfbmV0X2F4MjUuYwppbmRleCBmNjc3MTFmLi44OTRhMjI1NSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvc3lzY3RsX25ldF9heDI1LmMKKysrIGIvbmV0L2F4MjUvc3lzY3RsX25ldF9heDI1LmMKQEAgLTI0LDcgKzI0LDcgQEAKIHN0YXRpYyBpbnQgbWluX2lkbGVbMV0sICAJCW1heF9pZGxlW10gPSB7NjU1MzUgKiBIWn07CiBzdGF0aWMgaW50IG1pbl9uMltdID0gezF9LAkJbWF4X24yW10gPSB7MzF9Owogc3RhdGljIGludCBtaW5fcGFjbGVuW10gPSB7MX0sCQltYXhfcGFjbGVuW10gPSB7NTEyfTsKLXN0YXRpYyBpbnQgbWluX3Byb3RvWzFdLAkJbWF4X3Byb3RvW10gPSB7M307CitzdGF0aWMgaW50IG1pbl9wcm90b1sxXSwJCW1heF9wcm90b1tdID0geyBBWDI1X1BST1RPX01BWCB9Owogc3RhdGljIGludCBtaW5fZHNfdGltZW91dFsxXSwgICAJbWF4X2RzX3RpbWVvdXRbXSA9IHs2NTUzNSAqIEhafTsKIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpheDI1X3RhYmxlX2hlYWRlcjsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IGZiMDMxZmUuLjQ2OWVkYTAgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKKysrIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwpAQCAtMjM4LDYgKzIzOCw5IEBACiAJaWYgKHNrLT5za19lcnIgfHwgIXNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX2Vycm9yX3F1ZXVlKSkKIAkJbWFzayB8PSBQT0xMRVJSOwogCisJaWYgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikKKwkJbWFzayB8PSBQT0xMUkRIVVA7CisKIAlpZiAoc2stPnNrX3NodXRkb3duID09IFNIVVRET1dOX01BU0spCiAJCW1hc2sgfD0gUE9MTEhVUDsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKaW5kZXggY2JiMjBjMy4uZDkwOGQ0OSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC01MzIsOCArNTMyLDggQEAKIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBibmVwX3Nlc3Npb24pLAogCQkJICAgKCpyZXEtPmRldmljZSkgPyByZXEtPmRldmljZSA6ICJibmVwJWQiLAogCQkJICAgYm5lcF9uZXRfc2V0dXApOwotCWlmICghZGV2KSAKLQkJcmV0dXJuIEVOT01FTTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAogCWRvd25fd3JpdGUoJmJuZXBfc2Vzc2lvbl9zZW0pOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IDViNDI1M2MuLmU5OTAxMGMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CkBAIC01Nyw5ICs1OSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJmY29tbV90aHJlYWQ7CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKHJmY29tbV9zZW0pOwotI2RlZmluZSByZmNvbW1fbG9jaygpCWRvd24oJnJmY29tbV9zZW0pOwotI2RlZmluZSByZmNvbW1fdW5sb2NrKCkJdXAoJnJmY29tbV9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChyZmNvbW1fbXV0ZXgpOworI2RlZmluZSByZmNvbW1fbG9jaygpCW11dGV4X2xvY2soJnJmY29tbV9tdXRleCkKKyNkZWZpbmUgcmZjb21tX3VubG9jaygpCW11dGV4X3VubG9jaygmcmZjb21tX211dGV4KQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZmNvbW1fZXZlbnQ7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvS2NvbmZpZyBiL25ldC9icmlkZ2UvS2NvbmZpZwppbmRleCBkYjIzZDU5Li4xMjI2NWFmIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL0tjb25maWcKKysrIGIvbmV0L2JyaWRnZS9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBjb25maWcgQlJJREdFCiAJdHJpc3RhdGUgIjgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZyIKKwlzZWxlY3QgTExDCiAJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhbgogCSAgRXRoZXJuZXQgYnJpZGdlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBkaWZmZXJlbnQgRXRoZXJuZXQgc2VnbWVudHMgaXQKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnIuYyBiL25ldC9icmlkZ2UvYnIuYwppbmRleCAxODhjYzFhLi4yMmQ4MDZjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyLmMKKysrIGIvbmV0L2JyaWRnZS9ici5jCkBAIC0xOSwxMyArMTksMjMgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9sbGMuaD4KKyNpbmNsdWRlIDxuZXQvbGxjLmg+CiAKICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAKIGludCAoKmJyX3Nob3VsZF9yb3V0ZV9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKipwc2tiKSA9IE5VTEw7CiAKK3N0YXRpYyBzdHJ1Y3QgbGxjX3NhcCAqYnJfc3RwX3NhcDsKKwogc3RhdGljIGludCBfX2luaXQgYnJfaW5pdCh2b2lkKQogeworCWJyX3N0cF9zYXAgPSBsbGNfc2FwX29wZW4oTExDX1NBUF9CU1BBTiwgYnJfc3RwX3Jjdik7CisJaWYgKCFicl9zdHBfc2FwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYnJpZGdlOiBjYW4ndCByZWdpc3RlciBzYXAgZm9yIFNUUFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCiAJYnJfZmRiX2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCkBAIC00NSw2ICs1NSw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBicl9kZWluaXQodm9pZCkKIHsKKwlsbGNfc2FwX2Nsb3NlKGJyX3N0cF9zYXApOworCiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIAlicl9uZXRmaWx0ZXJfZmluaSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCAwYjMzYTdiLi4wYzg4YTJhIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAlyZXR1cm4gJmJyLT5zdGF0aXN0aWNzOwogfQogCisvKiBuZXQgZGV2aWNlIHRyYW5zbWl0IGFsd2F5cyBjYWxsZWQgd2l0aCBubyBCSCAocHJlZW1wdF9kaXNhYmxlZCkgKi8KIGludCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zOSw3ICs0MCw2IEBACiAJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwogCXNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWlmIChkZXN0WzBdICYgMSkgCiAJCWJyX2Zsb29kX2RlbGl2ZXIoYnIsIHNrYiwgMCk7CiAJZWxzZSBpZiAoKGRzdCA9IF9fYnJfZmRiX2dldChiciwgZGVzdCkpICE9IE5VTEwpCkBAIC00Nyw3ICs0Nyw2IEBACiAJZWxzZQogCQlicl9mbG9vZF9kZWxpdmVyKGJyLCBza2IsIDApOwogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZmRiLmMgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCmluZGV4IDFmMDhhNTkuLjNhNzNiOGMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuYwpAQCAtMzQxLDcgKzM0MSw2IEBACiAJaWYgKGhvbGRfdGltZShicikgPT0gMCkKIAkJcmV0dXJuOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWZkYiA9IGZkYl9maW5kKGhlYWQsIGFkZHIpOwogCWlmIChsaWtlbHkoZmRiKSkgewogCQkvKiBhdHRlbXB0IHRvIHVwZGF0ZSBhbiBlbnRyeSBmb3IgYSBsb2NhbCBpbnRlcmZhY2UgKi8KQEAgLTM1NiwxMyArMzU1LDEyIEBACiAJCQlmZGItPmFnZWluZ190aW1lciA9IGppZmZpZXM7CiAJCX0KIAl9IGVsc2UgewotCQlzcGluX2xvY2tfYmgoJmJyLT5oYXNoX2xvY2spOworCQlzcGluX2xvY2soJmJyLT5oYXNoX2xvY2spOwogCQlpZiAoIWZkYl9maW5kKGhlYWQsIGFkZHIpKQogCQkJZmRiX2NyZWF0ZShoZWFkLCBzb3VyY2UsIGFkZHIsIDApOwogCQkvKiBlbHNlICB3ZSBsb3NlIHJhY2UgYW5kIHNvbWVvbmUgZWxzZSBpbnNlcnRzCiAJCSAqIGl0IGZpcnN0LCBkb24ndCBib3RoZXIgdXBkYXRpbmcKIAkJICovCi0JCXNwaW5fdW5sb2NrX2JoKCZici0+aGFzaF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmJyLT5oYXNoX2xvY2spOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfaWYuYyBiL25ldC9icmlkZ2UvYnJfaWYuYwppbmRleCA3ZmEzYTVhLi41OWVlZjQyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC04MSwyNiArODEsMjcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwogCiAJcnRubF9sb2NrKCk7CiAJcCA9IGRldi0+YnJfcG9ydDsKIAlpZiAoIXApCiAJCWdvdG8gZG9uZTsKKwliciA9IHAtPmJyOwogCi0JaWYgKG5ldGlmX2NhcnJpZXJfb2socC0+ZGV2KSkgewotCQl1MzIgY29zdCA9IHBvcnRfY29zdChwLT5kZXYpOworCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCXAtPnBhdGhfY29zdCA9IHBvcnRfY29zdChkZXYpOwogCi0JCXNwaW5fbG9ja19iaCgmcC0+YnItPmxvY2spOwotCQlpZiAocC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpIHsKLQkJCXAtPnBhdGhfY29zdCA9IGNvc3Q7Ci0JCQlicl9zdHBfZW5hYmxlX3BvcnQocCk7CisJaWYgKGJyLT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOworCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CisJCQlpZiAocC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpCisJCQkJYnJfc3RwX2VuYWJsZV9wb3J0KHApOworCQl9IGVsc2UgeworCQkJaWYgKHAtPnN0YXRlICE9IEJSX1NUQVRFX0RJU0FCTEVEKQorCQkJCWJyX3N0cF9kaXNhYmxlX3BvcnQocCk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfYmgoJnAtPmJyLT5sb2NrKTsKLQl9IGVsc2UgewotCQlzcGluX2xvY2tfYmgoJnAtPmJyLT5sb2NrKTsKLQkJaWYgKHAtPnN0YXRlICE9IEJSX1NUQVRFX0RJU0FCTEVEKQotCQkJYnJfc3RwX2Rpc2FibGVfcG9ydChwKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnAtPmJyLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKIAl9CiBkb25lOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xNjgsNiArMTY5LDcgQEAKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmJyX3BvcnQsIE5VTEwpOwogCisJa29iamVjdF91ZXZlbnQoJnAtPmtvYmosIEtPQkpfUkVNT1ZFKTsKIAlrb2JqZWN0X2RlbCgmcC0+a29iaik7CiAKIAljYWxsX3JjdSgmcC0+cmN1LCBkZXN0cm95X25icF9yY3UpOwpAQCAtMjA4LDcgKzIxMCw4IEBACiAKIAlici0+YnJpZGdlX2lkLnByaW9bMF0gPSAweDgwOwogCWJyLT5icmlkZ2VfaWQucHJpb1sxXSA9IDB4MDA7Ci0JbWVtc2V0KGJyLT5icmlkZ2VfaWQuYWRkciwgMCwgRVRIX0FMRU4pOworCisJbWVtY3B5KGJyLT5ncm91cF9hZGRyLCBicl9ncm91cF9hZGRyZXNzLCBFVEhfQUxFTik7CiAKIAlici0+ZmVhdHVyZV9tYXNrID0gZGV2LT5mZWF0dXJlczsKIAlici0+c3RwX2VuYWJsZWQgPSAwOwpAQCAtMjM1LDEyICsyMzgsMTEgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwogCXVuc2lnbmVkIGxvbmcgKmludXNlOwogCi0JaW51c2UgPSBrbWFsbG9jKEJJVFNfVE9fTE9OR1MoQlJfTUFYX1BPUlRTKSpzaXplb2YodW5zaWduZWQgbG9uZyksCisJaW51c2UgPSBrY2FsbG9jKEJJVFNfVE9fTE9OR1MoQlJfTUFYX1BPUlRTKSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAogCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbnVzZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoaW51c2UsIDAsIEJJVFNfVE9fTE9OR1MoQlJfTUFYX1BPUlRTKSpzaXplb2YodW5zaWduZWQgbG9uZykpOwogCXNldF9iaXQoMCwgaW51c2UpOwkvKiB6ZXJvIGlzIHJlc2VydmVkICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmYnItPnBvcnRfbGlzdCwgbGlzdCkgewogCQlzZXRfYml0KHAtPnBvcnRfbm8sIGludXNlKTsKQEAgLTI2MiwxMSArMjY0LDEwIEBACiAJaWYgKGluZGV4IDwgMCkKIAkJcmV0dXJuIEVSUl9QVFIoaW5kZXgpOwogCi0JcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7CiAJcC0+YnIgPSBicjsKIAlkZXZfaG9sZChkZXYpOwogCXAtPmRldiA9IGRldjsKQEAgLTI3Niw4ICsyNzcsOSBAQAogCWJyX2luaXRfcG9ydChwKTsKIAlwLT5zdGF0ZSA9IEJSX1NUQVRFX0RJU0FCTEVEOwogCUlOSVRfV09SSygmcC0+Y2Fycmllcl9jaGVjaywgcG9ydF9jYXJyaWVyX2NoZWNrLCBkZXYpOwotCWtvYmplY3RfaW5pdCgmcC0+a29iaik7CisJYnJfc3RwX3BvcnRfdGltZXJfaW5pdChwKTsKIAorCWtvYmplY3RfaW5pdCgmcC0+a29iaik7CiAJa29iamVjdF9zZXRfbmFtZSgmcC0+a29iaiwgU1lTRlNfQlJJREdFX1BPUlRfQVRUUik7CiAJcC0+a29iai5rdHlwZSA9ICZicnBvcnRfa3R5cGU7CiAJcC0+a29iai5wYXJlbnQgPSAmKGRldi0+Y2xhc3NfZGV2LmtvYmopOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IDRlZWY4MzcuLmI3NzY2NTYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYworKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTE5LDEzICsxOSw4IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKIAotY29uc3QgdW5zaWduZWQgY2hhciBicmlkZ2VfdWxhWzZdID0geyAweDAxLCAweDgwLCAweGMyLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyBpbnQgYnJfcGFzc19mcmFtZV91cF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCXJldHVybiAwOwotfQorLyogQnJpZGdlIGdyb3VwIG11bHRpY2FzdCBhZGRyZXNzIDgwMi4xZCAocGcgNTEpLiAqLworY29uc3QgdTggYnJfZ3JvdXBfYWRkcmVzc1tFVEhfQUxFTl0gPSB7IDB4MDEsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDAsIDB4MDAgfTsKIAogc3RhdGljIHZvaWQgYnJfcGFzc19mcmFtZV91cChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0zOCw3ICszMyw3IEBACiAJc2tiLT5kZXYgPSBici0+ZGV2OwogCiAJTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0xPQ0FMX0lOLCBza2IsIGluZGV2LCBOVUxMLAotCQkJYnJfcGFzc19mcmFtZV91cF9maW5pc2gpOworCQluZXRpZl9yZWNlaXZlX3NrYik7CiB9CiAKIC8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAocHJlZW1wdF9kaXNhYmxlZCkgKi8KQEAgLTEwMCw2ICs5NSwyNSBAQAogCWdvdG8gb3V0OwogfQogCisvKiBub3RlOiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKHByZWVtcHRfZGlzYWJsZWQpICovCitzdGF0aWMgaW50IGJyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gcmN1X2RlcmVmZXJlbmNlKHNrYi0+ZGV2LT5icl9wb3J0KTsKKworCWlmIChwICYmIHAtPnN0YXRlICE9IEJSX1NUQVRFX0RJU0FCTEVEKQorCQlicl9mZGJfdXBkYXRlKHAtPmJyLCBwLCBldGhfaGRyKHNrYiktPmhfc291cmNlKTsKKworCXJldHVybiAwOwkgLyogcHJvY2VzcyBmdXJ0aGVyICovCit9CisKKy8qIERvZXMgYWRkcmVzcyBtYXRjaCB0aGUgbGluayBsb2NhbCBtdWx0aWNhc3QgYWRkcmVzcy4KKyAqIDAxOjgwOmMyOjAwOjAwOjBYCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX2xpbmtfbG9jYWwoY29uc3QgdW5zaWduZWQgY2hhciAqZGVzdCkKK3sKKwlyZXR1cm4gbWVtY21wKGRlc3QsIGJyX2dyb3VwX2FkZHJlc3MsIDUpID09IDAgJiYgKGRlc3RbNV0gJiAweGYwKSA9PSAwOworfQorCiAvKgogICogQ2FsbGVkIHZpYSBicl9oYW5kbGVfZnJhbWVfaG9vay4KICAqIFJldHVybiAwIGlmICpwc2tiIHNob3VsZCBiZSBwcm9jZXNzZWQgZnVydGh1cgpAQCAtMTE3LDE1ICsxMzEsMTAgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX3NvdXJjZSkpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHAtPmJyLT5zdHBfZW5hYmxlZCAmJgotCSAgICAhbWVtY21wKGRlc3QsIGJyaWRnZV91bGEsIDUpICYmCi0JICAgICEoZGVzdFs1XSAmIDB4RjApKSB7Ci0JCWlmICghZGVzdFs1XSkgewotCQkJTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0xPQ0FMX0lOLCBza2IsIHNrYi0+ZGV2LCAKLQkJCQlOVUxMLCBicl9zdHBfaGFuZGxlX2JwZHUpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJZ290byBlcnI7CisJaWYgKHVubGlrZWx5KGlzX2xpbmtfbG9jYWwoZGVzdCkpKSB7CisJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwkJcmV0dXJuIE5GX0hPT0soUEZfQlJJREdFLCBORl9CUl9MT0NBTF9JTiwgc2tiLCBza2ItPmRldiwKKwkJCSAgICAgICBOVUxMLCBicl9oYW5kbGVfbG9jYWxfZmluaXNoKSAhPSAwOwogCX0KIAogCWlmIChwLT5zdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HIHx8IHAtPnN0YXRlID09IEJSX1NUQVRFX0xFQVJOSU5HKSB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCA2YmIwYzdlLi5mMjk0NTBiIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTYxLDE1ICs2MSwyNSBAQAogI2RlZmluZSBicm5mX2ZpbHRlcl92bGFuX3RhZ2dlZCAxCiAjZW5kaWYKIAotI2RlZmluZSBJU19WTEFOX0lQIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpICYmICAgIFwKLQloZHItPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkgJiYgIFwKLQlicm5mX2ZpbHRlcl92bGFuX3RhZ2dlZCkKLSNkZWZpbmUgSVNfVkxBTl9JUFY2IChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpICYmICAgIFwKLQloZHItPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSAmJiAgXAotCWJybmZfZmlsdGVyX3ZsYW5fdGFnZ2VkKQotI2RlZmluZSBJU19WTEFOX0FSUCAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSAmJiAgIFwKLQloZHItPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApICYmIFwKLQlicm5mX2ZpbHRlcl92bGFuX3RhZ2dlZCkKK3N0YXRpYyBfX2JlMTYgaW5saW5lIHZsYW5fcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gdmxhbl9ldGhfaGRyKHNrYiktPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87Cit9CisKKyNkZWZpbmUgSVNfVkxBTl9JUChza2IpIFwKKwkoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkgJiYgXAorIAkgdmxhbl9wcm90byhza2IpID09IGh0b25zKEVUSF9QX0lQKSAmJiAJXAorCSBicm5mX2ZpbHRlcl92bGFuX3RhZ2dlZCkKKworI2RlZmluZSBJU19WTEFOX0lQVjYoc2tiKSBcCisJKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpICYmIFwKKwkgdmxhbl9wcm90byhza2IpID09IGh0b25zKEVUSF9QX0lQVjYpICYmXAorCSBicm5mX2ZpbHRlcl92bGFuX3RhZ2dlZCkKKworI2RlZmluZSBJU19WTEFOX0FSUChza2IpIFwKKwkoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkgJiYJXAorCSB2bGFuX3Byb3RvKHNrYikgPT0gaHRvbnMoRVRIX1BfQVJQKSAmJglcCisJIGJybmZfZmlsdGVyX3ZsYW5fdGFnZ2VkKQogCiAvKiBXZSBuZWVkIHRoZXNlIGZha2Ugc3RydWN0dXJlcyB0byBtYWtlIG5ldGZpbHRlciBoYXBweSAtLQogICogbG90cyBvZiBwbGFjZXMgYXNzdW1lIHRoYXQgc2tiLT5kc3QgIT0gTlVMTCwgd2hpY2ggaXNuJ3QKQEAgLTkwLDYgKzEwMCw3IEBACiAJCQkuZGV2CQkJPSAmX19mYWtlX25ldF9kZXZpY2UsCiAJCQkucGF0aAkJCT0gJl9fZmFrZV9ydGFibGUudS5kc3QsCiAJCQkubWV0cmljcwkJPSB7W1JUQVhfTVRVIC0gMV0gPSAxNTAwfSwKKwkJCS5mbGFncwkJCT0gRFNUX05PWEZSTSwKIAkJfQogCX0sCiAJLnJ0X2ZsYWdzCT0gMCwKQEAgLTEwMiw2ICsxMTMsMjUgQEAKIAlyZXR1cm4gcG9ydCA/IHBvcnQtPmJyLT5kZXYgOiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiLT5uZl9icmlkZ2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLCBHRlBfQVRPTUlDKTsKKwlpZiAobGlrZWx5KHNrYi0+bmZfYnJpZGdlKSkKKwkJYXRvbWljX3NldCgmKHNrYi0+bmZfYnJpZGdlLT51c2UpLCAxKTsKKworCXJldHVybiBza2ItPm5mX2JyaWRnZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5mX2JyaWRnZV9zYXZlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworICAgICAgICBpbnQgaGVhZGVyX3NpemUgPSAxNjsKKworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkKKwkJaGVhZGVyX3NpemUgPSAxODsKKworCW1lbWNweShza2ItPm5mX2JyaWRnZS0+ZGF0YSwgc2tiLT5kYXRhIC0gaGVhZGVyX3NpemUsIGhlYWRlcl9zaXplKTsKK30KKwogLyogUEZfQlJJREdFL1BSRV9ST1VUSU5HICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFVuZG8gdGhlIGNoYW5nZXMgbWFkZSBmb3IgaXA2dGFibGVzIFBSRVJPVVRJTkcgYW5kIGNvbnRpbnVlIHRoZQogICogYnJpZGdlIFBSRV9ST1VUSU5HIGhvb2suICovCkBAIC0xMTksNyArMTQ5LDcgQEAKIAlkc3RfaG9sZChza2ItPmRzdCk7CiAKIAlza2ItPmRldiA9IG5mX2JyaWRnZS0+cGh5c2luZGV2OwotCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CiAJCXNrYl9wdXNoKHNrYiwgVkxBTl9ITEVOKTsKIAkJc2tiLT5uaC5yYXcgLT0gVkxBTl9ITEVOOwogCX0KQEAgLTEzNSw3ICsxNjUsNyBAQAogCiAJaWYgKGppZmZpZXMgLSBsYXN0X2NvbXBsYWludCA+PSA1ICogSFopIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiUGVyZm9ybWluZyBjcm9zcy1icmlkZ2UgRE5BVCByZXF1aXJlcyBJUCAiCi0JCQkiZm9yd2FyZGluZyB0byBiZSBlbmFibGVkXG4iKTsKKwkJICAgICAgICJmb3J3YXJkaW5nIHRvIGJlIGVuYWJsZWRcbiIpOwogCQlsYXN0X2NvbXBsYWludCA9IGppZmZpZXM7CiAJfQogfQpAQCAtMTk1LDcgKzIyNSw3IEBACiAJaWYgKCFza2ItPmRldikKIAkJa2ZyZWVfc2tiKHNrYik7CiAJZWxzZSB7Ci0JCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewogCQkJc2tiX3B1bGwoc2tiLCBWTEFOX0hMRU4pOwogCQkJc2tiLT5uaC5yYXcgKz0gVkxBTl9ITEVOOwogCQl9CkBAIC0yMTcsMTIgKzI0NywxNyBAQAogCW5mX2JyaWRnZS0+bWFzayBePSBCUk5GX05GX0JSSURHRV9QUkVST1VUSU5HOwogCiAJaWYgKGRuYXRfdG9va19wbGFjZShza2IpKSB7Ci0JCWlmIChpcF9yb3V0ZV9pbnB1dChza2IsIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsIGlwaC0+dG9zLAotCQkgICAgZGV2KSkgeworCQlpZiAoaXBfcm91dGVfaW5wdXQoc2tiLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLCBpcGgtPnRvcywgZGV2KSkgewogCQkJc3RydWN0IHJ0YWJsZSAqcnQ7Ci0JCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0gCi0JCQl7IC5pcDRfdSA9IHsgLmRhZGRyID0gaXBoLT5kYWRkciwgLnNhZGRyID0gMCAsCi0JCQkJICAgICAudG9zID0gUlRfVE9TKGlwaC0+dG9zKX0gfSwgLnByb3RvID0gMH07CisJCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7CisJCQkJLm5sX3UgPSB7CisJCQkJCS5pcDRfdSA9IHsKKwkJCQkJCSAuZGFkZHIgPSBpcGgtPmRhZGRyLAorCQkJCQkJIC5zYWRkciA9IDAsCisJCQkJCQkgLnRvcyA9IFJUX1RPUyhpcGgtPnRvcykgfSwKKwkJCQl9LAorCQkJCS5wcm90byA9IDAsCisJCQl9OwogCiAJCQlpZiAoIWlwX3JvdXRlX291dHB1dF9rZXkoJnJ0LCAmZmwpKSB7CiAJCQkJLyogLSBCcmlkZ2VkLWFuZC1ETkFUJ2VkIHRyYWZmaWMgZG9lc24ndApAQCAtMjQ2LDcgKzI4MSw3IEBACiAJCQkJbmZfYnJpZGdlLT5tYXNrIHw9IEJSTkZfQlJJREdFRF9ETkFUOwogCQkJCXNrYi0+ZGV2ID0gbmZfYnJpZGdlLT5waHlzaW5kZXY7CiAJCQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0KLQkJCQkgICAgX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJCQkgICAgaHRvbnMoRVRIX1BfODAyMVEpKSB7CiAJCQkJCXNrYl9wdXNoKHNrYiwgVkxBTl9ITEVOKTsKIAkJCQkJc2tiLT5uaC5yYXcgLT0gVkxBTl9ITEVOOwogCQkJCX0KQEAgLTI1Niw4ICsyOTEsNyBAQAogCQkJCQkgICAgICAgMSk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQltZW1jcHkoZXRoX2hkcihza2IpLT5oX2Rlc3QsIGRldi0+ZGV2X2FkZHIsCi0JCQkgICAgICAgRVRIX0FMRU4pOworCQkJbWVtY3B5KGV0aF9oZHIoc2tiKS0+aF9kZXN0LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJCX0KIAl9IGVsc2UgewpAQCAtMjY2LDcgKzMwMCw3IEBACiAJfQogCiAJc2tiLT5kZXYgPSBuZl9icmlkZ2UtPnBoeXNpbmRldjsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewogCQlza2JfcHVzaChza2IsIFZMQU5fSExFTik7CiAJCXNrYi0+bmgucmF3IC09IFZMQU5fSExFTjsKIAl9CkBAIC0yOTYsMTAgKzMzMCwxMCBAQAogLyogV2Ugb25seSBjaGVjayB0aGUgbGVuZ3RoLiBBIGJyaWRnZSBzaG91bGRuJ3QgZG8gYW55IGhvcC1ieS1ob3Agc3R1ZmYgYW55d2F5ICovCiBzdGF0aWMgaW50IGNoZWNrX2hiaF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1bnNpZ25lZCBjaGFyICpyYXcgPSAodTgqKShza2ItPm5oLmlwdjZoKzEpOworCXVuc2lnbmVkIGNoYXIgKnJhdyA9ICh1OCAqKSAoc2tiLT5uaC5pcHY2aCArIDEpOwogCXUzMiBwa3RfbGVuOwogCWludCBvZmYgPSByYXcgLSBza2ItPm5oLnJhdzsKLQlpbnQgbGVuID0gKHJhd1sxXSsxKTw8MzsKKwlpbnQgbGVuID0gKHJhd1sxXSArIDEpIDw8IDM7CiAKIAlpZiAoKHJhdyArIGxlbikgLSBza2ItPmRhdGEgPiBza2JfaGVhZGxlbihza2IpKQogCQlnb3RvIGJhZDsKQEAgLTMwOCw3ICszNDIsNyBAQAogCWxlbiAtPSAyOwogCiAJd2hpbGUgKGxlbiA+IDApIHsKLQkJaW50IG9wdGxlbiA9IHNrYi0+bmgucmF3W29mZisxXSsyOworCQlpbnQgb3B0bGVuID0gc2tiLT5uaC5yYXdbb2ZmICsgMV0gKyAyOwogCiAJCXN3aXRjaCAoc2tiLT5uaC5yYXdbb2ZmXSkgewogCQljYXNlIElQVjZfVExWX1BBRDA6CkBAIC0zMTksMTYgKzM1MywxNiBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBJUFY2X1RMVl9KVU1CTzoKLQkJCWlmIChza2ItPm5oLnJhd1tvZmYrMV0gIT0gNCB8fCAob2ZmJjMpICE9IDIpCisJCQlpZiAoc2tiLT5uaC5yYXdbb2ZmICsgMV0gIT0gNCB8fCAob2ZmICYgMykgIT0gMikKIAkJCQlnb3RvIGJhZDsKLQkJCXBrdF9sZW4gPSBudG9obCgqKHUzMiopKHNrYi0+bmgucmF3K29mZisyKSk7CisJCQlwa3RfbGVuID0gbnRvaGwoKih1MzIgKikgKHNrYi0+bmgucmF3ICsgb2ZmICsgMikpOwogCQkJaWYgKHBrdF9sZW4gPD0gSVBWNl9NQVhQTEVOIHx8CiAJCQkgICAgc2tiLT5uaC5pcHY2aC0+cGF5bG9hZF9sZW4pCiAJCQkJZ290byBiYWQ7CiAJCQlpZiAocGt0X2xlbiA+IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkKIAkJCQlnb3RvIGJhZDsKIAkJCWlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLAotCQkJICAgIHBrdF9sZW4rc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCisJCQkJCSAgICBwa3RfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCiAJCQkJZ290byBiYWQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTM0OSwxMiArMzgzLDEzIEBACiAvKiBSZXBsaWNhdGUgdGhlIGNoZWNrcyB0aGF0IElQdjYgZG9lcyBvbiBwYWNrZXQgcmVjZXB0aW9uIGFuZCBwYXNzIHRoZSBwYWNrZXQKICAqIHRvIGlwNnRhYmxlcywgd2hpY2ggZG9lc24ndCBzdXBwb3J0IE5BVCwgc28gdGhpbmdzIGFyZSBmYWlybHkgc2ltcGxlLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZ19pcHY2KHVuc2lnbmVkIGludCBob29rLAotICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CiAJc3RydWN0IGlwdjZoZHIgKmhkcjsKIAl1MzIgcGt0X2xlbjsKLQlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZTsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpCiAJCWdvdG8gaW5oZHJfZXJyb3I7CkBAIC0zODAsMTAgKzQxNSwxMCBAQAogCQl9CiAJfQogCWlmIChoZHItPm5leHRoZHIgPT0gTkVYVEhEUl9IT1AgJiYgY2hlY2tfaGJoX2xlbihza2IpKQotCQkJZ290byBpbmhkcl9lcnJvcjsKKwkJZ290byBpbmhkcl9lcnJvcjsKIAotIAluZl9icmlkZ2VfcHV0KHNrYi0+bmZfYnJpZGdlKTsKLQlpZiAoKG5mX2JyaWRnZSA9IG5mX2JyaWRnZV9hbGxvYyhza2IpKSA9PSBOVUxMKQorCW5mX2JyaWRnZV9wdXQoc2tiLT5uZl9icmlkZ2UpOworCWlmICghbmZfYnJpZGdlX2FsbG9jKHNrYikpCiAJCXJldHVybiBORl9EUk9QOwogCWlmICghc2V0dXBfcHJlX3JvdXRpbmcoc2tiKSkKIAkJcmV0dXJuIE5GX0RST1A7CkBAIC00MTEsMTAgKzQ0Niw4IEBACiAJc3RydWN0IGlwaGRyICppcGg7CiAJX191MzIgbGVuOwogCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKLQlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZTsKLQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKmhkciA9IHZsYW5fZXRoX2hkcigqcHNrYik7CiAKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpIHx8IElTX1ZMQU5fSVBWNikgeworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpIHx8IElTX1ZMQU5fSVBWNihza2IpKSB7CiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCQlpZiAoIWJybmZfY2FsbF9pcDZ0YWJsZXMpCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtNDIyLDEwICs0NTUsOCBAQAogCQlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjaygqcHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgewotCQkJdTggKnZoZHIgPSBza2ItPmRhdGE7Ci0JCQlza2JfcHVsbChza2IsIFZMQU5fSExFTik7Ci0JCQlza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCB2aGRyLCBWTEFOX0hMRU4pOworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJCXNrYl9wdWxsX3Jjc3VtKHNrYiwgVkxBTl9ITEVOKTsKIAkJCXNrYi0+bmgucmF3ICs9IFZMQU5fSExFTjsKIAkJfQogCQlyZXR1cm4gYnJfbmZfcHJlX3JvdXRpbmdfaXB2Nihob29rLCBza2IsIGluLCBvdXQsIG9rZm4pOwpAQCAtNDM1LDE2ICs0NjYsMTQgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKICNlbmRpZgogCi0JaWYgKHNrYi0+cHJvdG9jb2wgIT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkgJiYgIUlTX1ZMQU5fSVApCisJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApICYmICFJU19WTEFOX0lQKHNrYikpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjaygqcHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJdTggKnZoZHIgPSBza2ItPmRhdGE7Ci0JCXNrYl9wdWxsKHNrYiwgVkxBTl9ITEVOKTsKLQkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgdmhkciwgVkxBTl9ITEVOKTsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKKwkJc2tiX3B1bGxfcmNzdW0oc2tiLCBWTEFOX0hMRU4pOwogCQlza2ItPm5oLnJhdyArPSBWTEFOX0hMRU47CiAJfQogCkBAIC00NTUsMTUgKzQ4NCwxNSBAQAogCWlmIChpcGgtPmlobCA8IDUgfHwgaXBoLT52ZXJzaW9uICE9IDQpCiAJCWdvdG8gaW5oZHJfZXJyb3I7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCA0KmlwaC0+aWhsKSkKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCA0ICogaXBoLT5paGwpKQogCQlnb3RvIGluaGRyX2Vycm9yOwogCiAJaXBoID0gc2tiLT5uaC5pcGg7Ci0JaWYgKGlwX2Zhc3RfY3N1bSgoX191OCAqKWlwaCwgaXBoLT5paGwpICE9IDApCisJaWYgKGlwX2Zhc3RfY3N1bSgoX191OCAqKSBpcGgsIGlwaC0+aWhsKSAhPSAwKQogCQlnb3RvIGluaGRyX2Vycm9yOwogCiAJbGVuID0gbnRvaHMoaXBoLT50b3RfbGVuKTsKLQlpZiAoc2tiLT5sZW4gPCBsZW4gfHwgbGVuIDwgNCppcGgtPmlobCkKKwlpZiAoc2tiLT5sZW4gPCBsZW4gfHwgbGVuIDwgNCAqIGlwaC0+aWhsKQogCQlnb3RvIGluaGRyX2Vycm9yOwogCiAJaWYgKHNrYi0+bGVuID4gbGVuKSB7CkBAIC00NzIsOCArNTAxLDggQEAKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAl9CiAKLSAJbmZfYnJpZGdlX3B1dChza2ItPm5mX2JyaWRnZSk7Ci0JaWYgKChuZl9icmlkZ2UgPSBuZl9icmlkZ2VfYWxsb2Moc2tiKSkgPT0gTlVMTCkKKwluZl9icmlkZ2VfcHV0KHNrYi0+bmZfYnJpZGdlKTsKKwlpZiAoIW5mX2JyaWRnZV9hbGxvYyhza2IpKQogCQlyZXR1cm4gTkZfRFJPUDsKIAlpZiAoIXNldHVwX3ByZV9yb3V0aW5nKHNrYikpCiAJCXJldHVybiBORl9EUk9QOwpAQCAtNDg1LDcgKzUxNCw3IEBACiAJcmV0dXJuIE5GX1NUT0xFTjsKIAogaW5oZHJfZXJyb3I6Ci0vLwlJUF9JTkNfU1RBVFNfQkgoSXBJbkhkckVycm9ycyk7CisvLyAgICAgIElQX0lOQ19TVEFUU19CSChJcEluSGRyRXJyb3JzKTsKIG91dDoKIAlyZXR1cm4gTkZfRFJPUDsKIH0KQEAgLTQ5OSw4ICs1MjgsOSBAQAogICogcmVnaXN0ZXIgYW4gSVB2NCBQUkVfUk9VVElORyAnc2Fib3RhZ2UnIGhvb2sgdGhhdCB3aWxsCiAgKiBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcuICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2xvY2FsX2luKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCi0gICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAKQEAgLTUxMiwxNSArNTQyLDEzIEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotCiAvKiBQRl9CUklER0UvRk9SV0FSRCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBicl9uZl9mb3J3YXJkX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlID0gc2tiLT5uZl9icmlkZ2U7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmluOwotCXN0cnVjdCB2bGFuX2V0aGhkciAqaGRyID0gdmxhbl9ldGhfaGRyKHNrYik7CiAKLQlpZiAoc2tiLT5wcm90b2NvbCAhPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSUCkgJiYgIUlTX1ZMQU5fQVJQKSB7CisJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQVJQKSAmJiAhSVNfVkxBTl9BUlAoc2tiKSkgewogCQlpbiA9IG5mX2JyaWRnZS0+cGh5c2luZGV2OwogCQlpZiAobmZfYnJpZGdlLT5tYXNrICYgQlJORl9QS1RfVFlQRSkgewogCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CkBAIC01MjksMTIgKzU1NywxMiBAQAogCX0gZWxzZSB7CiAJCWluID0gKigoc3RydWN0IG5ldF9kZXZpY2UgKiopKHNrYi0+Y2IpKTsKIAl9Ci0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKIAkJc2tiX3B1c2goc2tiLCBWTEFOX0hMRU4pOwogCQlza2ItPm5oLnJhdyAtPSBWTEFOX0hMRU47CiAJfQogCU5GX0hPT0tfVEhSRVNIKFBGX0JSSURHRSwgTkZfQlJfRk9SV0FSRCwgc2tiLCBpbiwKLQkJCXNrYi0+ZGV2LCBicl9mb3J3YXJkX2ZpbmlzaCwgMSk7CisJCSAgICAgICBza2ItPmRldiwgYnJfZm9yd2FyZF9maW5pc2gsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC01NDQsMTIgKzU3MiwxMiBAQAogICogYmVjYXVzZSBvZiB0aGUgcGh5c2RldiBtb2R1bGUuIEZvciBBUlAsIGluZGV2IGFuZCBvdXRkZXYgYXJlIHRoZQogICogYnJpZGdlIHBvcnRzLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2lwKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCi0gICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCQkJICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAJc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2U7Ci0Jc3RydWN0IHZsYW5fZXRoaGRyICpoZHIgPSB2bGFuX2V0aF9oZHIoc2tiKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcGFyZW50OwogCWludCBwZjsKIApAQCAtNTYwLDEyICs1ODgsMTIgQEAKIAlpZiAoIXBhcmVudCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSB8fCBJU19WTEFOX0lQKQorCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSB8fCBJU19WTEFOX0lQKHNrYikpCiAJCXBmID0gUEZfSU5FVDsKIAllbHNlCiAJCXBmID0gUEZfSU5FVDY7CiAKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewogCQlza2JfcHVsbCgqcHNrYiwgVkxBTl9ITEVOKTsKIAkJKCpwc2tiKS0+bmgucmF3ICs9IFZMQU5fSExFTjsKIAl9CkBAIC01ODcsMTEgKzYxNSwxMSBAQAogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfYXJwKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCi0gICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7Ci0Jc3RydWN0IHZsYW5fZXRoaGRyICpoZHIgPSB2bGFuX2V0aF9oZHIoc2tiKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqKmQgPSAoc3RydWN0IG5ldF9kZXZpY2UgKiopKHNrYi0+Y2IpOwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtNTk5LDE1ICs2MjcsMTUgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKICNlbmRpZgogCi0JaWYgKHNrYi0+cHJvdG9jb2wgIT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApKSB7Ci0JCWlmICghSVNfVkxBTl9BUlApCisJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQVJQKSkgeworCQlpZiAoIUlTX1ZMQU5fQVJQKHNrYikpCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCQlza2JfcHVsbCgqcHNrYiwgVkxBTl9ITEVOKTsKIAkJKCpwc2tiKS0+bmgucmF3ICs9IFZMQU5fSExFTjsKIAl9CiAKIAlpZiAoc2tiLT5uaC5hcnBoLT5hcl9wbG4gIT0gNCkgewotCQlpZiAoSVNfVkxBTl9BUlApIHsKKwkJaWYgKElTX1ZMQU5fQVJQKHNrYikpIHsKIAkJCXNrYl9wdXNoKCpwc2tiLCBWTEFOX0hMRU4pOwogCQkJKCpwc2tiKS0+bmgucmF3IC09IFZMQU5fSExFTjsKIAkJfQpAQCAtNjIwLDE3ICs2NDgsMTYgQEAKIAlyZXR1cm4gTkZfU1RPTEVOOwogfQogCi0KIC8qIFBGX0JSSURHRS9MT0NBTF9PVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGJyX25mX2xvY2FsX291dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewogCQlza2JfcHVzaChza2IsIFZMQU5fSExFTik7CiAJCXNrYi0+bmgucmF3IC09IFZMQU5fSExFTjsKIAl9CiAKIAlORl9IT09LX1RIUkVTSChQRl9CUklER0UsIE5GX0JSX0xPQ0FMX09VVCwgc2tiLCBOVUxMLCBza2ItPmRldiwKLQkJCWJyX2ZvcndhcmRfZmluaXNoLCBORl9CUl9QUklfRklSU1QgKyAxKTsKKwkJICAgICAgIGJyX2ZvcndhcmRfZmluaXNoLCBORl9CUl9QUklfRklSU1QgKyAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU2LDE5ICs2ODMsMTkgQEAKICAqIGV2ZW4gcm91dGVkIHBhY2tldHMgdGhhdCBkaWRuJ3QgYXJyaXZlIG9uIGEgYnJpZGdlIGludGVyZmFjZSBoYXZlIHRoZWlyCiAgKiBuZl9icmlkZ2UtPnBoeXNpbmRldiBzZXQuICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2xvY2FsX291dCh1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAotICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxpbmRldiwgKnJlYWxvdXRkZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCXN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlOwotCXN0cnVjdCB2bGFuX2V0aGhkciAqaGRyID0gdmxhbl9ldGhfaGRyKHNrYik7CiAJaW50IHBmOwogCiAJaWYgKCFza2ItPm5mX2JyaWRnZSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApIHx8IElTX1ZMQU5fSVApCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIHx8IElTX1ZMQU5fSVAoc2tiKSkKIAkJcGYgPSBQRl9JTkVUOwogCWVsc2UKIAkJcGYgPSBQRl9JTkVUNjsKQEAgLTY5NCw3ICs3MjEsNyBAQAogCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CiAJCQluZl9icmlkZ2UtPm1hc2sgXj0gQlJORl9QS1RfVFlQRTsKIAkJfQotCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKIAkJCXNrYl9wdXNoKHNrYiwgVkxBTl9ITEVOKTsKIAkJCXNrYi0+bmgucmF3IC09IFZMQU5fSExFTjsKIAkJfQpAQCAtNzEyLDE0ICs3MzksMTQgQEAKIAlpZiAobmZfYnJpZGdlLT5uZXRvdXRkZXYpCiAJCXJlYWxvdXRkZXYgPSBuZl9icmlkZ2UtPm5ldG91dGRldjsKICNlbmRpZgotCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CiAJCXNrYl9wdWxsKHNrYiwgVkxBTl9ITEVOKTsKIAkJKCpwc2tiKS0+bmgucmF3ICs9IFZMQU5fSExFTjsKIAl9CiAJLyogSVAgZm9yd2FyZGVkIHRyYWZmaWMgaGFzIGEgcGh5c2luZGV2LCBsb2NhbGx5CiAJICogZ2VuZXJhdGVkIHRyYWZmaWMgaGFzbid0LiAqLwogCWlmIChyZWFsaW5kZXYgIT0gTlVMTCkgewotCQlpZiAoIShuZl9icmlkZ2UtPm1hc2sgJiBCUk5GX0RPTlRfVEFLRV9QQVJFTlQpICkgeworCQlpZiAoIShuZl9icmlkZ2UtPm1hc2sgJiBCUk5GX0RPTlRfVEFLRV9QQVJFTlQpKSB7CiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqcGFyZW50ID0gYnJpZGdlX3BhcmVudChyZWFsaW5kZXYpOwogCQkJaWYgKHBhcmVudCkKIAkJCQlyZWFsaW5kZXYgPSBwYXJlbnQ7CkBAIC03NDEsMTIgKzc2OCwxMiBAQAogCiAvKiBQRl9CUklER0UvUE9TVF9ST1VUSU5HICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wb3N0X3JvdXRpbmcodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICoqcHNrYiwKLSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCQkJICAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKIAlzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZSA9ICgqcHNrYiktPm5mX2JyaWRnZTsKLQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKmhkciA9IHZsYW5fZXRoX2hkcihza2IpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsb3V0ZGV2ID0gYnJpZGdlX3BhcmVudChza2ItPmRldik7CiAJaW50IHBmOwogCkBAIC03NTUsNyArNzgyLDcgQEAKIAkgKiBrZWVwIHRoZSBjaGVjayBqdXN0IHRvIGJlIHN1cmUuLi4gKi8KIAlpZiAoc2tiLT5tYWMucmF3IDwgc2tiLT5oZWFkIHx8IHNrYi0+bWFjLnJhdyArIEVUSF9ITEVOID4gc2tiLT5kYXRhKSB7CiAJCXByaW50ayhLRVJOX0NSSVQgImJyX25ldGZpbHRlcjogQXJnaCEhIGJyX25mX3Bvc3Rfcm91dGluZzogIgotCQkJCSAiYmFkIG1hYy5yYXcgcG9pbnRlci4iKTsKKwkJICAgICAgICJiYWQgbWFjLnJhdyBwb2ludGVyLiIpOwogCQlnb3RvIHByaW50X2Vycm9yOwogCX0KICNlbmRpZgpAQCAtNzY2LDcgKzc5Myw3IEBACiAJaWYgKCFyZWFsb3V0ZGV2KQogCQlyZXR1cm4gTkZfRFJPUDsKIAotCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApIHx8IElTX1ZMQU5fSVApCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIHx8IElTX1ZMQU5fSVAoc2tiKSkKIAkJcGYgPSBQRl9JTkVUOwogCWVsc2UKIAkJcGYgPSBQRl9JTkVUNjsKQEAgLTc4NSw3ICs4MTIsNyBAQAogCQluZl9icmlkZ2UtPm1hc2sgfD0gQlJORl9QS1RfVFlQRTsKIAl9CiAKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewogCQlza2JfcHVsbChza2IsIFZMQU5fSExFTik7CiAJCXNrYi0+bmgucmF3ICs9IFZMQU5fSExFTjsKIAl9CkBAIC03OTcsNyArODI0LDcgQEAKIAkJcmVhbG91dGRldiA9IG5mX2JyaWRnZS0+bmV0b3V0ZGV2OwogI2VuZGlmCiAJTkZfSE9PSyhwZiwgTkZfSVBfUE9TVF9ST1VUSU5HLCBza2IsIE5VTEwsIHJlYWxvdXRkZXYsCi0JICAgICAgICBicl9kZXZfcXVldWVfcHVzaF94bWl0KTsKKwkJYnJfZGV2X3F1ZXVlX3B1c2hfeG1pdCk7CiAKIAlyZXR1cm4gTkZfU1RPTEVOOwogCkBAIC04MDksMTggKzgzNiwxOCBAQAogCQkJcHJpbnRrKCJbJXNdIiwgcmVhbG91dGRldi0+bmFtZSk7CiAJfQogCXByaW50aygiIGhlYWQ6JXAsIHJhdzolcCwgZGF0YTolcFxuIiwgc2tiLT5oZWFkLCBza2ItPm1hYy5yYXcsCi0JCQkJCSAgICAgIHNrYi0+ZGF0YSk7CisJICAgICAgIHNrYi0+ZGF0YSk7CiAJcmV0dXJuIE5GX0FDQ0VQVDsKICNlbmRpZgogfQogCi0KIC8qIElQL1NBQk9UQUdFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRG9uJ3QgaGFuZCBsb2NhbGx5IGRlc3RpbmVkIHBhY2tldHMgdG8gUEZfSU5FVCg2KS9QUkVfUk9VVElORwogICogZm9yIHRoZSBzZWNvbmQgdGltZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfc2Fib3RhZ2VfaW4odW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICoqcHNrYiwKLSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQorCQkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogCWlmICgoKnBza2IpLT5uZl9icmlkZ2UgJiYKIAkgICAgISgoKnBza2IpLT5uZl9icmlkZ2UtPm1hc2sgJiBCUk5GX05GX0JSSURHRV9QUkVST1VUSU5HKSkgewpAQCAtODM0LDE4ICs4NjEsMTggQEAKICAqIGFuZCBQRl9JTkVUKDYpL1BPU1RfUk9VVElORyB1bnRpbCB3ZSBoYXZlIGRvbmUgdGhlIGZvcndhcmRpbmcKICAqIGRlY2lzaW9uIGluIHRoZSBicmlkZ2UgY29kZSBhbmQgaGF2ZSBkZXRlcm1pbmVkIG5mX2JyaWRnZS0+cGh5c291dGRldi4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfc2Fib3RhZ2Vfb3V0KHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCi0gICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0gICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJCSAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAKIAlpZiAoKG91dC0+aGFyZF9zdGFydF94bWl0ID09IGJyX2Rldl94bWl0ICYmCi0JICAgIG9rZm4gIT0gYnJfbmZfZm9yd2FyZF9maW5pc2ggJiYKLQkgICAgb2tmbiAhPSBicl9uZl9sb2NhbF9vdXRfZmluaXNoICYmCi0JICAgIG9rZm4gIT0gYnJfZGV2X3F1ZXVlX3B1c2hfeG1pdCkKKwkgICAgIG9rZm4gIT0gYnJfbmZfZm9yd2FyZF9maW5pc2ggJiYKKwkgICAgIG9rZm4gIT0gYnJfbmZfbG9jYWxfb3V0X2ZpbmlzaCAmJiBva2ZuICE9IGJyX2Rldl9xdWV1ZV9wdXNoX3htaXQpCiAjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCiAJICAgIHx8ICgob3V0LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKSAmJgotCSAgICBWTEFOX0RFVl9JTkZPKG91dCktPnJlYWxfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPT0gYnJfZGV2X3htaXQpCisJCVZMQU5fREVWX0lORk8ob3V0KS0+cmVhbF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBicl9kZXZfeG1pdCkKICNlbmRpZgogCSAgICApIHsKIAkJc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2U7CkBAIC05NzAsOCArOTk3LDggQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIHN0YXRpYwotaW50IGJybmZfc3lzY3RsX2NhbGxfdGFibGVzKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICogZmlscCwKLQkJCXZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoraW50IGJybmZfc3lzY3RsX2NhbGxfdGFibGVzKGN0bF90YWJsZSAqIGN0bCwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICB2b2lkIF9fdXNlciAqIGJ1ZmZlciwgc2l6ZV90ICogbGVucCwgbG9mZl90ICogcHBvcykKIHsKIAlpbnQgcmV0OwogCkBAIC0xMDU4LDcgKzEwODUsOCBAQAogI2lmZGVmIENPTkZJR19TWVNDVEwKIAlicm5mX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoYnJuZl9uZXRfdGFibGUsIDApOwogCWlmIChicm5mX3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJicl9uZXRmaWx0ZXI6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiYnJfbmV0ZmlsdGVyOiBjYW4ndCByZWdpc3RlciB0byBzeXNjdGwuXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnJfbmZfb3BzKTsgaSsrKQogCQkJbmZfdW5yZWdpc3Rlcl9ob29rKCZicl9uZl9vcHNbaV0pOwogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggOGYxMGUwOS4uODZlY2VhNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTEwOSw2ICsxMDksNyBAQAogCXVuc2lnbmVkIGxvbmcJCQlicmlkZ2VfaGVsbG9fdGltZTsKIAl1bnNpZ25lZCBsb25nCQkJYnJpZGdlX2ZvcndhcmRfZGVsYXk7CiAKKwl1OAkJCQlncm91cF9hZGRyW0VUSF9BTEVOXTsKIAl1MTYJCQkJcm9vdF9wb3J0OwogCXVuc2lnbmVkIGNoYXIJCQlzdHBfZW5hYmxlZDsKIAl1bnNpZ25lZCBjaGFyCQkJdG9wb2xvZ3lfY2hhbmdlOwpAQCAtMTIyLDcgKzEyMyw3IEBACiB9OwogCiBleHRlcm4gc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJyX2RldmljZV9ub3RpZmllcjsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGJyaWRnZV91bGFbNl07CitleHRlcm4gY29uc3QgdTggYnJfZ3JvdXBfYWRkcmVzc1tFVEhfQUxFTl07CiAKIC8qIGNhbGxlZCB1bmRlciBicmlkZ2UgbG9jayAqLwogc3RhdGljIGlubGluZSBpbnQgYnJfaXNfcm9vdF9icmlkZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyKQpAQCAtMjE3LDcgKzIxOCw4IEBACiBleHRlcm4gc3NpemVfdCBicl9zaG93X2JyaWRnZV9pZChjaGFyICpidWYsIGNvbnN0IHN0cnVjdCBicmlkZ2VfaWQgKmlkKTsKIAogLyogYnJfc3RwX2JwZHUuYyAqLwotZXh0ZXJuIGludCBicl9zdHBfaGFuZGxlX2JwZHUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGJyX3N0cF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIAogLyogYnJfc3RwX3RpbWVyLmMgKi8KIGV4dGVybiB2b2lkIGJyX3N0cF90aW1lcl9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMgYi9uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMKaW5kZXggMjk2ZjZhNC4uYTdiYTBjYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYwpAQCAtMTUsMTU4ICsxNSwxNjMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xsYy5oPgorI2luY2x1ZGUgPG5ldC9sbGMuaD4KKyNpbmNsdWRlIDxuZXQvbGxjX3BkdS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJicl9wcml2YXRlX3N0cC5oIgogCi0jZGVmaW5lIEpJRkZJRVNfVE9fVElDS1MoaikgKCgoaikgPDwgOCkgLyBIWikKLSNkZWZpbmUgVElDS1NfVE9fSklGRklFUyhqKSAoKChqKSAqIEhaKSA+PiA4KQorI2RlZmluZSBTVFBfSFoJCTI1NgogCi1zdGF0aWMgdm9pZCBicl9zZW5kX2JwZHUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKKyNkZWZpbmUgTExDX1JFU0VSVkUgc2l6ZW9mKHN0cnVjdCBsbGNfcGR1X3VuKQorCitzdGF0aWMgdm9pZCBicl9zZW5kX2JwZHUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKKyAJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHNpemU7CiAKIAlpZiAoIXAtPmJyLT5zdHBfZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0Jc2l6ZSA9IGxlbmd0aCArIDIqRVRIX0FMRU4gKyAyOwotCWlmIChzaXplIDwgNjApCi0JCXNpemUgPSA2MDsKLQotCWRldiA9IHAtPmRldjsKLQotCWlmICgoc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9JTkZPICJicjogbWVtb3J5IHNxdWVlemUhXG4iKTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCtMTENfUkVTRVJWRSk7CisJaWYgKCFza2IpCiAJCXJldHVybjsKLQl9CiAKLQlza2ItPmRldiA9IGRldjsKKwlza2ItPmRldiA9IHAtPmRldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwotCXNrYi0+bWFjLnJhdyA9IHNrYl9wdXQoc2tiLCBzaXplKTsKLQltZW1jcHkoc2tiLT5tYWMucmF3LCBicmlkZ2VfdWxhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHNrYi0+bWFjLnJhdytFVEhfQUxFTiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCXNrYi0+bWFjLnJhd1syKkVUSF9BTEVOXSA9IDA7Ci0Jc2tiLT5tYWMucmF3WzIqRVRIX0FMRU4rMV0gPSBsZW5ndGg7Ci0Jc2tiLT5uaC5yYXcgPSBza2ItPm1hYy5yYXcgKyAyKkVUSF9BTEVOICsgMjsKLQltZW1jcHkoc2tiLT5uaC5yYXcsIGRhdGEsIGxlbmd0aCk7Ci0JbWVtc2V0KHNrYi0+bmgucmF3ICsgbGVuZ3RoLCAweGE1LCBzaXplIC0gbGVuZ3RoIC0gMipFVEhfQUxFTiAtIDIpOworCisJc2tiX3Jlc2VydmUoc2tiLCBMTENfUkVTRVJWRSk7CisJbWVtY3B5KF9fc2tiX3B1dChza2IsIGxlbmd0aCksIGRhdGEsIGxlbmd0aCk7CisKKwlsbGNfcGR1X2hlYWRlcl9pbml0KHNrYiwgTExDX1BEVV9UWVBFX1UsIExMQ19TQVBfQlNQQU4sCisJCQkgICAgTExDX1NBUF9CU1BBTiwgTExDX1BEVV9DTUQpOworCWxsY19wZHVfaW5pdF9hc191aV9jbWQoc2tiKTsKKworCWxsY19tYWNfaGRyX2luaXQoc2tiLCBwLT5kZXYtPmRldl9hZGRyLCBwLT5ici0+Z3JvdXBfYWRkcik7CiAKIAlORl9IT09LKFBGX0JSSURHRSwgTkZfQlJfTE9DQUxfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LAogCQlkZXZfcXVldWVfeG1pdCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYnJfc2V0X3RpY2tzKHVuc2lnbmVkIGNoYXIgKmRlc3QsIGludCBqaWZmKQorc3RhdGljIGlubGluZSB2b2lkIGJyX3NldF90aWNrcyh1bnNpZ25lZCBjaGFyICpkZXN0LCBpbnQgaikKIHsKLQlfX3UxNiB0aWNrczsKKwl1bnNpZ25lZCBsb25nIHRpY2tzID0gKFNUUF9IWiAqIGopLyBIWjsKIAotCXRpY2tzID0gSklGRklFU19UT19USUNLUyhqaWZmKTsKLQlkZXN0WzBdID0gKHRpY2tzID4+IDgpICYgMHhGRjsKLQlkZXN0WzFdID0gdGlja3MgJiAweEZGOworCXB1dF91bmFsaWduZWQoaHRvbnModGlja3MpLCAoX19iZTE2ICopZGVzdCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBicl9nZXRfdGlja3ModW5zaWduZWQgY2hhciAqZGVzdCkKK3N0YXRpYyBpbmxpbmUgaW50IGJyX2dldF90aWNrcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMpCiB7Ci0JcmV0dXJuIFRJQ0tTX1RPX0pJRkZJRVMoKGRlc3RbMF0gPDwgOCkgfCBkZXN0WzFdKTsKKwl1bnNpZ25lZCBsb25nIHRpY2tzID0gbnRvaHMoZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopc3JjKSk7CisKKwlyZXR1cm4gKHRpY2tzICogSFogKyBTVFBfSFogLSAxKSAvIFNUUF9IWjsKIH0KIAogLyogY2FsbGVkIHVuZGVyIGJyaWRnZSBsb2NrICovCiB2b2lkIGJyX3NlbmRfY29uZmlnX2JwZHUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IGJyX2NvbmZpZ19icGR1ICpicGR1KQogewotCXVuc2lnbmVkIGNoYXIgYnVmWzM4XTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlszNV07CiAKLQlidWZbMF0gPSAweDQyOwotCWJ1ZlsxXSA9IDB4NDI7Ci0JYnVmWzJdID0gMHgwMzsKLQlidWZbM10gPSAwOwotCWJ1Zls0XSA9IDA7Ci0JYnVmWzVdID0gMDsKLQlidWZbNl0gPSBCUERVX1RZUEVfQ09ORklHOwotCWJ1Zls3XSA9IChicGR1LT50b3BvbG9neV9jaGFuZ2UgPyAweDAxIDogMCkgfAorCWJ1ZlswXSA9IDA7CisJYnVmWzFdID0gMDsKKwlidWZbMl0gPSAwOworCWJ1ZlszXSA9IEJQRFVfVFlQRV9DT05GSUc7CisJYnVmWzRdID0gKGJwZHUtPnRvcG9sb2d5X2NoYW5nZSA/IDB4MDEgOiAwKSB8CiAJCShicGR1LT50b3BvbG9neV9jaGFuZ2VfYWNrID8gMHg4MCA6IDApOwotCWJ1Zls4XSA9IGJwZHUtPnJvb3QucHJpb1swXTsKLQlidWZbOV0gPSBicGR1LT5yb290LnByaW9bMV07Ci0JYnVmWzEwXSA9IGJwZHUtPnJvb3QuYWRkclswXTsKLQlidWZbMTFdID0gYnBkdS0+cm9vdC5hZGRyWzFdOwotCWJ1ZlsxMl0gPSBicGR1LT5yb290LmFkZHJbMl07Ci0JYnVmWzEzXSA9IGJwZHUtPnJvb3QuYWRkclszXTsKLQlidWZbMTRdID0gYnBkdS0+cm9vdC5hZGRyWzRdOwotCWJ1ZlsxNV0gPSBicGR1LT5yb290LmFkZHJbNV07Ci0JYnVmWzE2XSA9IChicGR1LT5yb290X3BhdGhfY29zdCA+PiAyNCkgJiAweEZGOwotCWJ1ZlsxN10gPSAoYnBkdS0+cm9vdF9wYXRoX2Nvc3QgPj4gMTYpICYgMHhGRjsKLQlidWZbMThdID0gKGJwZHUtPnJvb3RfcGF0aF9jb3N0ID4+IDgpICYgMHhGRjsKLQlidWZbMTldID0gYnBkdS0+cm9vdF9wYXRoX2Nvc3QgJiAweEZGOwotCWJ1ZlsyMF0gPSBicGR1LT5icmlkZ2VfaWQucHJpb1swXTsKLQlidWZbMjFdID0gYnBkdS0+YnJpZGdlX2lkLnByaW9bMV07Ci0JYnVmWzIyXSA9IGJwZHUtPmJyaWRnZV9pZC5hZGRyWzBdOwotCWJ1ZlsyM10gPSBicGR1LT5icmlkZ2VfaWQuYWRkclsxXTsKLQlidWZbMjRdID0gYnBkdS0+YnJpZGdlX2lkLmFkZHJbMl07Ci0JYnVmWzI1XSA9IGJwZHUtPmJyaWRnZV9pZC5hZGRyWzNdOwotCWJ1ZlsyNl0gPSBicGR1LT5icmlkZ2VfaWQuYWRkcls0XTsKLQlidWZbMjddID0gYnBkdS0+YnJpZGdlX2lkLmFkZHJbNV07Ci0JYnVmWzI4XSA9IChicGR1LT5wb3J0X2lkID4+IDgpICYgMHhGRjsKLQlidWZbMjldID0gYnBkdS0+cG9ydF9pZCAmIDB4RkY7CisJYnVmWzVdID0gYnBkdS0+cm9vdC5wcmlvWzBdOworCWJ1Zls2XSA9IGJwZHUtPnJvb3QucHJpb1sxXTsKKwlidWZbN10gPSBicGR1LT5yb290LmFkZHJbMF07CisJYnVmWzhdID0gYnBkdS0+cm9vdC5hZGRyWzFdOworCWJ1Zls5XSA9IGJwZHUtPnJvb3QuYWRkclsyXTsKKwlidWZbMTBdID0gYnBkdS0+cm9vdC5hZGRyWzNdOworCWJ1ZlsxMV0gPSBicGR1LT5yb290LmFkZHJbNF07CisJYnVmWzEyXSA9IGJwZHUtPnJvb3QuYWRkcls1XTsKKwlidWZbMTNdID0gKGJwZHUtPnJvb3RfcGF0aF9jb3N0ID4+IDI0KSAmIDB4RkY7CisJYnVmWzE0XSA9IChicGR1LT5yb290X3BhdGhfY29zdCA+PiAxNikgJiAweEZGOworCWJ1ZlsxNV0gPSAoYnBkdS0+cm9vdF9wYXRoX2Nvc3QgPj4gOCkgJiAweEZGOworCWJ1ZlsxNl0gPSBicGR1LT5yb290X3BhdGhfY29zdCAmIDB4RkY7CisJYnVmWzE3XSA9IGJwZHUtPmJyaWRnZV9pZC5wcmlvWzBdOworCWJ1ZlsxOF0gPSBicGR1LT5icmlkZ2VfaWQucHJpb1sxXTsKKwlidWZbMTldID0gYnBkdS0+YnJpZGdlX2lkLmFkZHJbMF07CisJYnVmWzIwXSA9IGJwZHUtPmJyaWRnZV9pZC5hZGRyWzFdOworCWJ1ZlsyMV0gPSBicGR1LT5icmlkZ2VfaWQuYWRkclsyXTsKKwlidWZbMjJdID0gYnBkdS0+YnJpZGdlX2lkLmFkZHJbM107CisJYnVmWzIzXSA9IGJwZHUtPmJyaWRnZV9pZC5hZGRyWzRdOworCWJ1ZlsyNF0gPSBicGR1LT5icmlkZ2VfaWQuYWRkcls1XTsKKwlidWZbMjVdID0gKGJwZHUtPnBvcnRfaWQgPj4gOCkgJiAweEZGOworCWJ1ZlsyNl0gPSBicGR1LT5wb3J0X2lkICYgMHhGRjsKIAotCWJyX3NldF90aWNrcyhidWYrMzAsIGJwZHUtPm1lc3NhZ2VfYWdlKTsKLQlicl9zZXRfdGlja3MoYnVmKzMyLCBicGR1LT5tYXhfYWdlKTsKLQlicl9zZXRfdGlja3MoYnVmKzM0LCBicGR1LT5oZWxsb190aW1lKTsKLQlicl9zZXRfdGlja3MoYnVmKzM2LCBicGR1LT5mb3J3YXJkX2RlbGF5KTsKKwlicl9zZXRfdGlja3MoYnVmKzI3LCBicGR1LT5tZXNzYWdlX2FnZSk7CisJYnJfc2V0X3RpY2tzKGJ1ZisyOSwgYnBkdS0+bWF4X2FnZSk7CisJYnJfc2V0X3RpY2tzKGJ1ZiszMSwgYnBkdS0+aGVsbG9fdGltZSk7CisJYnJfc2V0X3RpY2tzKGJ1ZiszMywgYnBkdS0+Zm9yd2FyZF9kZWxheSk7CiAKLQlicl9zZW5kX2JwZHUocCwgYnVmLCAzOCk7CisJYnJfc2VuZF9icGR1KHAsIGJ1ZiwgMzUpOwogfQogCiAvKiBjYWxsZWQgdW5kZXIgYnJpZGdlIGxvY2sgKi8KIHZvaWQgYnJfc2VuZF90Y25fYnBkdShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKQogewotCXVuc2lnbmVkIGNoYXIgYnVmWzddOworCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCi0JYnVmWzBdID0gMHg0MjsKLQlidWZbMV0gPSAweDQyOwotCWJ1ZlsyXSA9IDB4MDM7Ci0JYnVmWzNdID0gMDsKLQlidWZbNF0gPSAwOwotCWJ1Zls1XSA9IDA7Ci0JYnVmWzZdID0gQlBEVV9UWVBFX1RDTjsKKwlidWZbMF0gPSAwOworCWJ1ZlsxXSA9IDA7CisJYnVmWzJdID0gMDsKKwlidWZbM10gPSBCUERVX1RZUEVfVENOOwogCWJyX3NlbmRfYnBkdShwLCBidWYsIDcpOwogfQogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBoZWFkZXJbNl0gPSB7MHg0MiwgMHg0MiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07Ci0KLS8qIE5PIGxvY2tzLCBidXQgcmN1X3JlYWRfbG9jayAocHJlZW1wdF9kaXNhYmxlZCkgICovCi1pbnQgYnJfc3RwX2hhbmRsZV9icGR1KHN0cnVjdCBza19idWZmICpza2IpCisvKgorICogQ2FsbGVkIGZyb20gbGxjLgorICoKKyAqIE5PIGxvY2tzLCBidXQgcmN1X3JlYWRfbG9jayAocHJlZW1wdF9kaXNhYmxlZCkKKyAqLworaW50IGJyX3N0cF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSByY3VfZGVyZWZlcmVuY2Uoc2tiLT5kZXYtPmJyX3BvcnQpOworCWNvbnN0IHN0cnVjdCBsbGNfcGR1X3VuICpwZHUgPSBsbGNfcGR1X3VuX2hkcihza2IpOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBldGhfaGRyKHNrYiktPmhfZGVzdDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+YnJfcG9ydCk7CiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWY7CiAKIAlpZiAoIXApCiAJCWdvdG8gZXJyOwogCisJaWYgKHBkdS0+c3NhcCAhPSBMTENfU0FQX0JTUEFOCisJICAgIHx8IHBkdS0+ZHNhcCAhPSBMTENfU0FQX0JTUEFOCisJICAgIHx8IHBkdS0+Y3RybF8xICE9IExMQ19QRFVfVFlQRV9VKQorCQlnb3RvIGVycjsKKworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDQpKQorCQlnb3RvIGVycjsKKworCS8qIGNvbXBhcmUgb2YgcHJvdG9jb2wgaWQgYW5kIHZlcnNpb24gKi8KKwlidWYgPSBza2ItPmRhdGE7CisJaWYgKGJ1ZlswXSAhPSAwIHx8IGJ1ZlsxXSAhPSAwIHx8IGJ1ZlsyXSAhPSAwKQorCQlnb3RvIGVycjsKKwogCWJyID0gcC0+YnI7CiAJc3Bpbl9sb2NrKCZici0+bG9jayk7CiAKLQlpZiAocC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQgfHwgIShici0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCisJaWYgKHAtPnN0YXRlID09IEJSX1NUQVRFX0RJU0FCTEVECisJICAgIHx8ICFici0+c3RwX2VuYWJsZWQKKwkgICAgfHwgIShici0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCiAJCWdvdG8gb3V0OwogCi0JLyogaW5zZXJ0IGludG8gZm9yd2FyZGluZyBkYXRhYmFzZSBhZnRlciBmaWx0ZXJpbmcgdG8gYXZvaWQgc3Bvb2ZpbmcgKi8KLQlicl9mZGJfdXBkYXRlKGJyLCBwLCBldGhfaGRyKHNrYiktPmhfc291cmNlKTsKLQotCWlmICghYnItPnN0cF9lbmFibGVkKQorCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoZGVzdCwgYnItPmdyb3VwX2FkZHIpICE9IDApCiAJCWdvdG8gb3V0OwogCi0JLyogbmVlZCBhdCBsZWFzdCB0aGUgODAyIGFuZCBTVFAgaGVhZGVycyAqLwotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihoZWFkZXIpKzEpIHx8Ci0JICAgIG1lbWNtcChza2ItPmRhdGEsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikpKQotCQlnb3RvIG91dDsKLQotCWJ1ZiA9IHNrYl9wdWxsKHNrYiwgc2l6ZW9mKGhlYWRlcikpOworCWJ1ZiA9IHNrYl9wdWxsKHNrYiwgMyk7CiAKIAlpZiAoYnVmWzBdID09IEJQRFVfVFlQRV9DT05GSUcpIHsKIAkJc3RydWN0IGJyX2NvbmZpZ19icGR1IGJwZHU7CiAKIAkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMzIpKQotCQkgICAgZ290byBvdXQ7CisJCQlnb3RvIG91dDsKIAogCQlidWYgPSBza2ItPmRhdGE7CiAJCWJwZHUudG9wb2xvZ3lfY2hhbmdlID0gKGJ1ZlsxXSAmIDB4MDEpID8gMSA6IDA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jIGIvbmV0L2JyaWRnZS9icl9zdHBfaWYuYwppbmRleCAzNWNmM2EwLi4yM2RlYTE0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKQEAgLTM5LDggKzM5LDYgQEAKIAlwLT5zdGF0ZSA9IEJSX1NUQVRFX0JMT0NLSU5HOwogCXAtPnRvcG9sb2d5X2NoYW5nZV9hY2sgPSAwOwogCXAtPmNvbmZpZ19wZW5kaW5nID0gMDsKLQotCWJyX3N0cF9wb3J0X3RpbWVyX2luaXQocCk7CiB9CiAKIC8qIGNhbGxlZCB1bmRlciBicmlkZ2UgbG9jayAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfdGltZXIuYyBiL25ldC9icmlkZ2UvYnJfc3RwX3RpbWVyLmMKaW5kZXggOWJlZjU1Zi4uZDBmY2RlOCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHBfdGltZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF90aW1lci5jCkBAIC0zOSwxMyArMzksMTMgQEAKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSAoc3RydWN0IG5ldF9icmlkZ2UgKilhcmc7CiAJCiAJcHJfZGVidWcoIiVzOiBoZWxsbyB0aW1lciBleHBpcmVkXG4iLCBici0+ZGV2LT5uYW1lKTsKLQlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKKwlzcGluX2xvY2soJmJyLT5sb2NrKTsKIAlpZiAoYnItPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKIAkJYnJfY29uZmlnX2JwZHVfZ2VuZXJhdGlvbihicik7CiAKIAkJbW9kX3RpbWVyKCZici0+aGVsbG9fdGltZXIsIGppZmZpZXMgKyBici0+aGVsbG9fdGltZSk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CisJc3Bpbl91bmxvY2soJmJyLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgYnJfbWVzc2FnZV9hZ2VfdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGFyZykKQEAgLTcxLDcgKzcxLDcgQEAKIAkgKiBydW5uaW5nIHdoZW4gd2UgYXJlIHRoZSByb290IGJyaWRnZS4gU28uLiAgdGhpcyB3YXNfcm9vdAogCSAqIGNoZWNrIGlzIHJlZHVuZGFudC4gSSdtIGxlYXZpbmcgaXQgaW4gZm9yIG5vdywgdGhvdWdoLgogCSAqLwotCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOworCXNwaW5fbG9jaygmYnItPmxvY2spOwogCWlmIChwLT5zdGF0ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkKIAkJZ290byB1bmxvY2s7CiAJd2FzX3Jvb3QgPSBicl9pc19yb290X2JyaWRnZShicik7CkBAIC04Miw3ICs4Miw3IEBACiAJaWYgKGJyX2lzX3Jvb3RfYnJpZGdlKGJyKSAmJiAhd2FzX3Jvb3QpCiAJCWJyX2JlY29tZV9yb290X2JyaWRnZShicik7CiAgdW5sb2NrOgotCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CisJc3Bpbl91bmxvY2soJmJyLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgYnJfZm9yd2FyZF9kZWxheV90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtOTIsNyArOTIsNyBAQAogCiAJcHJfZGVidWcoIiVzOiAlZCglcykgZm9yd2FyZCBkZWxheSB0aW1lclxuIiwKIAkJIGJyLT5kZXYtPm5hbWUsIHAtPnBvcnRfbm8sIHAtPmRldi0+bmFtZSk7Ci0Jc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7CisJc3Bpbl9sb2NrKCZici0+bG9jayk7CiAJaWYgKHAtPnN0YXRlID09IEJSX1NUQVRFX0xJU1RFTklORykgewogCQlwLT5zdGF0ZSA9IEJSX1NUQVRFX0xFQVJOSU5HOwogCQltb2RfdGltZXIoJnAtPmZvcndhcmRfZGVsYXlfdGltZXIsCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJCWJyX3RvcG9sb2d5X2NoYW5nZV9kZXRlY3Rpb24oYnIpOwogCX0KIAlicl9sb2dfc3RhdGUocCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKKwlzcGluX3VubG9jaygmYnItPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBicl90Y25fdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGFyZykKQEAgLTExMSwxMyArMTExLDEzIEBACiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gKHN0cnVjdCBuZXRfYnJpZGdlICopIGFyZzsKIAogCXByX2RlYnVnKCIlczogdGNuIHRpbWVyIGV4cGlyZWRcbiIsIGJyLT5kZXYtPm5hbWUpOwotCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOworCXNwaW5fbG9jaygmYnItPmxvY2spOwogCWlmIChici0+ZGV2LT5mbGFncyAmIElGRl9VUCkgewogCQlicl90cmFuc21pdF90Y24oYnIpOwogCQogCQltb2RfdGltZXIoJmJyLT50Y25fdGltZXIsamlmZmllcyArIGJyLT5icmlkZ2VfaGVsbG9fdGltZSk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CisJc3Bpbl91bmxvY2soJmJyLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgYnJfdG9wb2xvZ3lfY2hhbmdlX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBhcmcpCkBAIC0xMjUsMTAgKzEyNSwxMCBAQAogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IChzdHJ1Y3QgbmV0X2JyaWRnZSAqKSBhcmc7CiAKIAlwcl9kZWJ1ZygiJXM6IHRvcG8gY2hhbmdlIHRpbWVyIGV4cGlyZWRcbiIsIGJyLT5kZXYtPm5hbWUpOwotCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOworCXNwaW5fbG9jaygmYnItPmxvY2spOwogCWJyLT50b3BvbG9neV9jaGFuZ2VfZGV0ZWN0ZWQgPSAwOwogCWJyLT50b3BvbG9neV9jaGFuZ2UgPSAwOwotCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CisJc3Bpbl91bmxvY2soJmJyLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgYnJfaG9sZF90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtMTM4LDQ1ICsxMzgsMzYgQEAKIAlwcl9kZWJ1ZygiJXM6ICVkKCVzKSBob2xkIHRpbWVyIGV4cGlyZWRcbiIsIAogCQkgcC0+YnItPmRldi0+bmFtZSwgIHAtPnBvcnRfbm8sIHAtPmRldi0+bmFtZSk7CiAKLQlzcGluX2xvY2tfYmgoJnAtPmJyLT5sb2NrKTsKKwlzcGluX2xvY2soJnAtPmJyLT5sb2NrKTsKIAlpZiAocC0+Y29uZmlnX3BlbmRpbmcpCiAJCWJyX3RyYW5zbWl0X2NvbmZpZyhwKTsKLQlzcGluX3VubG9ja19iaCgmcC0+YnItPmxvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYnJfdGltZXJfaW5pdChzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCi0JCQkgIHZvaWQgKCpfZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLAotCQkJICB1bnNpZ25lZCBsb25nIF9kYXRhKQotewotCWluaXRfdGltZXIodGltZXIpOwotCXRpbWVyLT5mdW5jdGlvbiA9IF9mdW5jdGlvbjsKLQl0aW1lci0+ZGF0YSA9IF9kYXRhOworCXNwaW5fdW5sb2NrKCZwLT5ici0+bG9jayk7CiB9CiAKIHZvaWQgYnJfc3RwX3RpbWVyX2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKQogewotCWJyX3RpbWVyX2luaXQoJmJyLT5oZWxsb190aW1lciwgYnJfaGVsbG9fdGltZXJfZXhwaXJlZCwKKwlzZXR1cF90aW1lcigmYnItPmhlbGxvX3RpbWVyLCBicl9oZWxsb190aW1lcl9leHBpcmVkLAogCQkgICAgICAodW5zaWduZWQgbG9uZykgYnIpOwogCi0JYnJfdGltZXJfaW5pdCgmYnItPnRjbl90aW1lciwgYnJfdGNuX3RpbWVyX2V4cGlyZWQsIAorCXNldHVwX3RpbWVyKCZici0+dGNuX3RpbWVyLCBicl90Y25fdGltZXJfZXhwaXJlZCwKIAkJICAgICAgKHVuc2lnbmVkIGxvbmcpIGJyKTsKIAotCWJyX3RpbWVyX2luaXQoJmJyLT50b3BvbG9neV9jaGFuZ2VfdGltZXIsCisJc2V0dXBfdGltZXIoJmJyLT50b3BvbG9neV9jaGFuZ2VfdGltZXIsCiAJCSAgICAgIGJyX3RvcG9sb2d5X2NoYW5nZV90aW1lcl9leHBpcmVkLAogCQkgICAgICAodW5zaWduZWQgbG9uZykgYnIpOwogCi0JYnJfdGltZXJfaW5pdCgmYnItPmdjX3RpbWVyLCBicl9mZGJfY2xlYW51cCwgKHVuc2lnbmVkIGxvbmcpIGJyKTsKKwlzZXR1cF90aW1lcigmYnItPmdjX3RpbWVyLCBicl9mZGJfY2xlYW51cCwgKHVuc2lnbmVkIGxvbmcpIGJyKTsKIH0KIAogdm9pZCBicl9zdHBfcG9ydF90aW1lcl9pbml0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApCiB7Ci0JYnJfdGltZXJfaW5pdCgmcC0+bWVzc2FnZV9hZ2VfdGltZXIsIGJyX21lc3NhZ2VfYWdlX3RpbWVyX2V4cGlyZWQsCisJc2V0dXBfdGltZXIoJnAtPm1lc3NhZ2VfYWdlX3RpbWVyLCBicl9tZXNzYWdlX2FnZV90aW1lcl9leHBpcmVkLAogCQkgICAgICAodW5zaWduZWQgbG9uZykgcCk7CiAKLQlicl90aW1lcl9pbml0KCZwLT5mb3J3YXJkX2RlbGF5X3RpbWVyLCBicl9mb3J3YXJkX2RlbGF5X3RpbWVyX2V4cGlyZWQsCisJc2V0dXBfdGltZXIoJnAtPmZvcndhcmRfZGVsYXlfdGltZXIsIGJyX2ZvcndhcmRfZGVsYXlfdGltZXJfZXhwaXJlZCwKIAkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHApOwogCQkgICAgICAKLQlicl90aW1lcl9pbml0KCZwLT5ob2xkX3RpbWVyLCBicl9ob2xkX3RpbWVyX2V4cGlyZWQsCisJc2V0dXBfdGltZXIoJnAtPmhvbGRfdGltZXIsIGJyX2hvbGRfdGltZXJfZXhwaXJlZCwKIAkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHApOwogfQkKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jIGIvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCmluZGV4IDZmNTc3ZjEuLjk2YmNiMmYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYworKysgYi9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMKQEAgLTI0Miw2ICsyNDIsNTQgQEAKIH0KIHN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihnY190aW1lciwgU19JUlVHTywgc2hvd19nY190aW1lciwgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfZ3JvdXBfYWRkcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShjZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXg6JXg6JXg6JXg6JXg6JXhcbiIsCisJCSAgICAgICBici0+Z3JvdXBfYWRkclswXSwgYnItPmdyb3VwX2FkZHJbMV0sCisJCSAgICAgICBici0+Z3JvdXBfYWRkclsyXSwgYnItPmdyb3VwX2FkZHJbM10sCisJCSAgICAgICBici0+Z3JvdXBfYWRkcls0XSwgYnItPmdyb3VwX2FkZHJbNV0pOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9ncm91cF9hZGRyKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjb25zdCBjaGFyICpidWYsCisJCQkJICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gdG9fYnJpZGdlKGNkKTsKKwl1bnNpZ25lZCBuZXdfYWRkcls2XTsKKwlpbnQgaTsKKworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChzc2NhbmYoYnVmLCAiJXg6JXg6JXg6JXg6JXg6JXgiLAorCQkgICAmbmV3X2FkZHJbMF0sICZuZXdfYWRkclsxXSwgJm5ld19hZGRyWzJdLAorCQkgICAmbmV3X2FkZHJbM10sICZuZXdfYWRkcls0XSwgJm5ld19hZGRyWzVdKSAhPSA2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE11c3QgYmUgMDE6ODA6YzI6MDA6MDA6MFggKi8KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlpZiAobmV3X2FkZHJbaV0gIT0gYnJfZ3JvdXBfYWRkcmVzc1tpXSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5ld19hZGRyWzVdICYgfjB4ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmV3X2FkZHJbNV0gPT0gMSAJLyogODAyLjN4IFBhdXNlIGFkZHJlc3MgKi8KKwkgICAgfHwgbmV3X2FkZHJbNV0gPT0gMiAvKiA4MDIuM2FkIFNsb3cgcHJvdG9jb2xzICovCisJICAgIHx8IG5ld19hZGRyWzVdID09IDMpIC8qIDgwMi4xWCBQQUUgYWRkcmVzcyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCWJyLT5ncm91cF9hZGRyW2ldID0gbmV3X2FkZHJbaV07CisJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZ3JvdXBfYWRkciwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgc2hvd19ncm91cF9hZGRyLCBzdG9yZV9ncm91cF9hZGRyKTsKKworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10gPSB7CiAJJmNsYXNzX2RldmljZV9hdHRyX2ZvcndhcmRfZGVsYXkuYXR0ciwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfaGVsbG9fdGltZS5hdHRyLApAQCAtMjU5LDYgKzMwNyw3IEBACiAJJmNsYXNzX2RldmljZV9hdHRyX3Rjbl90aW1lci5hdHRyLAogCSZjbGFzc19kZXZpY2VfYXR0cl90b3BvbG9neV9jaGFuZ2VfdGltZXIuYXR0ciwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfZ2NfdGltZXIuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfZ3JvdXBfYWRkci5hdHRyLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggOGJmNmQ5Zi4uOTA1MDg3ZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTI5LDQgKzI5LDQgQEAKIAogIyB3YXRjaGVycwogb2JqLSQoQ09ORklHX0JSSURHRV9FQlRfTE9HKSArPSBlYnRfbG9nLm8KLW9iai0kKENPTkZJR19CUklER0VfRUJUX0xPRykgKz0gZWJ0X3Vsb2cubworb2JqLSQoQ09ORklHX0JSSURHRV9FQlRfVUxPRykgKz0gZWJ0X3Vsb2cubwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCmluZGV4IDAxMjhmYmIuLjI4OGZmMWQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKQEAgLTE2Niw3ICsxNjYsMTIgQEAKIAlsaS51LmxvZy5sZXZlbCA9IGluZm8tPmxvZ2xldmVsOwogCWxpLnUubG9nLmxvZ2ZsYWdzID0gaW5mby0+Yml0bWFzazsKIAotCW5mX2xvZ19wYWNrZXQoUEZfQlJJREdFLCBob29rbnIsIHNrYiwgaW4sIG91dCwgJmxpLCBpbmZvLT5wcmVmaXgpOworCWlmIChpbmZvLT5iaXRtYXNrICYgRUJUX0xPR19ORkxPRykKKwkJbmZfbG9nX3BhY2tldChQRl9CUklER0UsIGhvb2tuciwgc2tiLCBpbiwgb3V0LCAmbGksCisJCSAgICAgICAgICAgICAgaW5mby0+cHJlZml4KTsKKwllbHNlCisJCWVidF9sb2dfcGFja2V0KFBGX0JSSURHRSwgaG9va25yLCBza2IsIGluLCBvdXQsICZsaSwKKwkJICAgICAgICAgICAgICAgaW5mby0+cHJlZml4KTsKIH0KIAogc3RhdGljIHN0cnVjdCBlYnRfd2F0Y2hlciBsb2cgPQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggY2JkNDAyMC4uOTk3OTUzMyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkKICNkZWZpbmUgQVNTRVJUX1dSSVRFX0xPQ0soeCkKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpZiAwCiAvKiB1c2UgdGhpcyBmb3IgcmVtb3RlIGRlYnVnZ2luZwpAQCAtODEsNyArODIsNyBAQAogCiAKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoZWJ0X211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZWJ0X211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQoZWJ0X3RhYmxlcyk7CiBzdGF0aWMgTElTVF9IRUFEKGVidF90YXJnZXRzKTsKIHN0YXRpYyBMSVNUX0hFQUQoZWJ0X21hdGNoZXMpOwpAQCAtMjk2LDE4ICsyOTcsMTggQEAKIC8qIElmIGl0IHN1Y2NlZWRzLCByZXR1cm5zIGVsZW1lbnQgYW5kIGxvY2tzIG11dGV4ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKgogZmluZF9pbmxpc3RfbG9ja19ub2xvYWQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSwgaW50ICplcnJvciwKLSAgIHN0cnVjdCBzZW1hcGhvcmUgKm11dGV4KQorICAgc3RydWN0IG11dGV4ICptdXRleCkKIHsKIAl2b2lkICpyZXQ7CiAKLQkqZXJyb3IgPSBkb3duX2ludGVycnVwdGlibGUobXV0ZXgpOworCSplcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShtdXRleCk7CiAJaWYgKCplcnJvciAhPSAwKQogCQlyZXR1cm4gTlVMTDsKIAogCXJldCA9IGxpc3RfbmFtZWRfZmluZChoZWFkLCBuYW1lKTsKIAlpZiAoIXJldCkgewogCQkqZXJyb3IgPSAtRU5PRU5UOwotCQl1cChtdXRleCk7CisJCW11dGV4X3VubG9jayhtdXRleCk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0zMTcsNyArMzE4LDcgQEAKICNlbHNlCiBzdGF0aWMgdm9pZCAqCiBmaW5kX2lubGlzdF9sb2NrKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCwKLSAgIGludCAqZXJyb3IsIHN0cnVjdCBzZW1hcGhvcmUgKm11dGV4KQorICAgaW50ICplcnJvciwgc3RydWN0IG11dGV4ICptdXRleCkKIHsKIAl2b2lkICpyZXQ7CiAKQEAgLTMzMSwyNSArMzMyLDI1IEBACiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZWJ0X3RhYmxlICoKLWZpbmRfdGFibGVfbG9jayhjb25zdCBjaGFyICpuYW1lLCBpbnQgKmVycm9yLCBzdHJ1Y3Qgc2VtYXBob3JlICptdXRleCkKK2ZpbmRfdGFibGVfbG9jayhjb25zdCBjaGFyICpuYW1lLCBpbnQgKmVycm9yLCBzdHJ1Y3QgbXV0ZXggKm11dGV4KQogewogCXJldHVybiBmaW5kX2lubGlzdF9sb2NrKCZlYnRfdGFibGVzLCBuYW1lLCAiZWJ0YWJsZV8iLCBlcnJvciwgbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBlYnRfbWF0Y2ggKgotZmluZF9tYXRjaF9sb2NrKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyb3IsIHN0cnVjdCBzZW1hcGhvcmUgKm11dGV4KQorZmluZF9tYXRjaF9sb2NrKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyb3IsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCiB7CiAJcmV0dXJuIGZpbmRfaW5saXN0X2xvY2soJmVidF9tYXRjaGVzLCBuYW1lLCAiZWJ0XyIsIGVycm9yLCBtdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVidF93YXRjaGVyICoKLWZpbmRfd2F0Y2hlcl9sb2NrKGNvbnN0IGNoYXIgKm5hbWUsIGludCAqZXJyb3IsIHN0cnVjdCBzZW1hcGhvcmUgKm11dGV4KQorZmluZF93YXRjaGVyX2xvY2soY29uc3QgY2hhciAqbmFtZSwgaW50ICplcnJvciwgc3RydWN0IG11dGV4ICptdXRleCkKIHsKIAlyZXR1cm4gZmluZF9pbmxpc3RfbG9jaygmZWJ0X3dhdGNoZXJzLCBuYW1lLCAiZWJ0XyIsIGVycm9yLCBtdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVidF90YXJnZXQgKgotZmluZF90YXJnZXRfbG9jayhjb25zdCBjaGFyICpuYW1lLCBpbnQgKmVycm9yLCBzdHJ1Y3Qgc2VtYXBob3JlICptdXRleCkKK2ZpbmRfdGFyZ2V0X2xvY2soY29uc3QgY2hhciAqbmFtZSwgaW50ICplcnJvciwgc3RydWN0IG11dGV4ICptdXRleCkKIHsKIAlyZXR1cm4gZmluZF9pbmxpc3RfbG9jaygmZWJ0X3RhcmdldHMsIG5hbWUsICJlYnRfIiwgZXJyb3IsIG11dGV4KTsKIH0KQEAgLTM2OSwxMCArMzcwLDEwIEBACiAJCXJldHVybiByZXQ7CiAJbS0+dS5tYXRjaCA9IG1hdGNoOwogCWlmICghdHJ5X21vZHVsZV9nZXQobWF0Y2gtPm1lKSkgewotCQl1cCgmZWJ0X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JdXAoJmVidF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCWlmIChtYXRjaC0+Y2hlY2sgJiYKIAkgICBtYXRjaC0+Y2hlY2sobmFtZSwgaG9va21hc2ssIGUsIG0tPmRhdGEsIG0tPm1hdGNoX3NpemUpICE9IDApIHsKIAkJQlVHUFJJTlQoIm1hdGNoLT5jaGVjayBmYWlsZWRcbiIpOwpAQCAtMzk4LDEwICszOTksMTAgQEAKIAkJcmV0dXJuIHJldDsKIAl3LT51LndhdGNoZXIgPSB3YXRjaGVyOwogCWlmICghdHJ5X21vZHVsZV9nZXQod2F0Y2hlci0+bWUpKSB7Ci0JCXVwKCZlYnRfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQl1cCgmZWJ0X211dGV4KTsKKwltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJaWYgKHdhdGNoZXItPmNoZWNrICYmCiAJICAgd2F0Y2hlci0+Y2hlY2sobmFtZSwgaG9va21hc2ssIGUsIHctPmRhdGEsIHctPndhdGNoZXJfc2l6ZSkgIT0gMCkgewogCQlCVUdQUklOVCgid2F0Y2hlci0+Y2hlY2sgZmFpbGVkXG4iKTsKQEAgLTYzOCwxMSArNjM5LDExIEBACiAJaWYgKCF0YXJnZXQpCiAJCWdvdG8gY2xlYW51cF93YXRjaGVyczsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KHRhcmdldC0+bWUpKSB7Ci0JCXVwKCZlYnRfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gY2xlYW51cF93YXRjaGVyczsKIAl9Ci0JdXAoJmVidF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCiAJdC0+dS50YXJnZXQgPSB0YXJnZXQ7CiAJaWYgKHQtPnUudGFyZ2V0ID09ICZlYnRfc3RhbmRhcmRfdGFyZ2V0KSB7CkBAIC0xMDE1LDcgKzEwMTYsNyBAQAogCiAJdC0+cHJpdmF0ZSA9IG5ld2luZm87CiAJd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKLQl1cCgmZWJ0X211dGV4KTsKKwltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJLyogc28sIGEgdXNlciBjYW4gY2hhbmdlIHRoZSBjaGFpbnMgd2hpbGUgaGF2aW5nIG1lc3NlZCB1cCBoZXIgY291bnRlcgogCSAgIGFsbG9jYXRpb24uIE9ubHkgcmVhc29uIHdoeSB0aGlzIGlzIGRvbmUgaXMgYmVjYXVzZSB0aGlzIHdheSB0aGUgbG9jawogCSAgIGlzIGhlbGQgb25seSBvbmNlLCB3aGlsZSB0aGlzIGRvZXNuJ3QgYnJpbmcgdGhlIGtlcm5lbCBpbnRvIGEKQEAgLTEwNDUsNyArMTA0Niw3IEBACiAJcmV0dXJuIHJldDsKIAogZnJlZV91bmxvY2s6Ci0JdXAoJmVidF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogZnJlZV9pdGVyYXRlOgogCUVCVF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXMsIG5ld2luZm8tPmVudHJpZXNfc2l6ZSwKIAkgICBlYnRfY2xlYW51cF9lbnRyeSwgTlVMTCk7CkBAIC0xMDY4LDY5ICsxMDY5LDY5IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmZWJ0X211dGV4KTsKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmVidF9tdXRleCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCWlmICghbGlzdF9uYW1lZF9pbnNlcnQoJmVidF90YXJnZXRzLCB0YXJnZXQpKSB7Ci0JCXVwKCZlYnRfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJCXJldHVybiAtRUVYSVNUOwogCX0KLQl1cCgmZWJ0X211dGV4KTsKKwltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCBlYnRfdW5yZWdpc3Rlcl90YXJnZXQoc3RydWN0IGVidF90YXJnZXQgKnRhcmdldCkKIHsKLQlkb3duKCZlYnRfbXV0ZXgpOworCW11dGV4X2xvY2soJmVidF9tdXRleCk7CiAJTElTVF9ERUxFVEUoJmVidF90YXJnZXRzLCB0YXJnZXQpOwotCXVwKCZlYnRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIH0KIAogaW50IGVidF9yZWdpc3Rlcl9tYXRjaChzdHJ1Y3QgZWJ0X21hdGNoICptYXRjaCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZlYnRfbXV0ZXgpOworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZWJ0X211dGV4KTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAJaWYgKCFsaXN0X25hbWVkX2luc2VydCgmZWJ0X21hdGNoZXMsIG1hdGNoKSkgewotCQl1cCgmZWJ0X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCQlyZXR1cm4gLUVFWElTVDsKIAl9Ci0JdXAoJmVidF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZWJ0X3VucmVnaXN0ZXJfbWF0Y2goc3RydWN0IGVidF9tYXRjaCAqbWF0Y2gpCiB7Ci0JZG93bigmZWJ0X211dGV4KTsKKwltdXRleF9sb2NrKCZlYnRfbXV0ZXgpOwogCUxJU1RfREVMRVRFKCZlYnRfbWF0Y2hlcywgbWF0Y2gpOwotCXVwKCZlYnRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIH0KIAogaW50IGVidF9yZWdpc3Rlcl93YXRjaGVyKHN0cnVjdCBlYnRfd2F0Y2hlciAqd2F0Y2hlcikKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZlYnRfbXV0ZXgpOworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZWJ0X211dGV4KTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAJaWYgKCFsaXN0X25hbWVkX2luc2VydCgmZWJ0X3dhdGNoZXJzLCB3YXRjaGVyKSkgewotCQl1cCgmZWJ0X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCQlyZXR1cm4gLUVFWElTVDsKIAl9Ci0JdXAoJmVidF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgZWJ0X3VucmVnaXN0ZXJfd2F0Y2hlcihzdHJ1Y3QgZWJ0X3dhdGNoZXIgKndhdGNoZXIpCiB7Ci0JZG93bigmZWJ0X211dGV4KTsKKwltdXRleF9sb2NrKCZlYnRfbXV0ZXgpOwogCUxJU1RfREVMRVRFKCZlYnRfd2F0Y2hlcnMsIHdhdGNoZXIpOwotCXVwKCZlYnRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIH0KIAogaW50IGVidF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgZWJ0X3RhYmxlICp0YWJsZSkKQEAgLTExNzgsNyArMTE3OSw3IEBACiAKIAl0YWJsZS0+cHJpdmF0ZSA9IG5ld2luZm87CiAJcndsb2NrX2luaXQoJnRhYmxlLT5sb2NrKTsKLQlyZXQgPSBkb3duX2ludGVycnVwdGlibGUoJmVidF9tdXRleCk7CisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZlYnRfbXV0ZXgpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBmcmVlX2NoYWluc3RhY2s7CiAKQEAgLTExOTQsMTAgKzExOTUsMTAgQEAKIAkJZ290byBmcmVlX3VubG9jazsKIAl9CiAJbGlzdF9wcmVwZW5kKCZlYnRfdGFibGVzLCB0YWJsZSk7Ci0JdXAoJmVidF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogCXJldHVybiAwOwogZnJlZV91bmxvY2s6Ci0JdXAoJmVidF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOwogZnJlZV9jaGFpbnN0YWNrOgogCWlmIChuZXdpbmZvLT5jaGFpbnN0YWNrKSB7CiAJCWZvcl9lYWNoX2NwdShpKQpAQCAtMTIxOCw5ICsxMjE5LDkgQEAKIAkJQlVHUFJJTlQoIlJlcXVlc3QgdG8gdW5yZWdpc3RlciBOVUxMIHRhYmxlISEhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlkb3duKCZlYnRfbXV0ZXgpOworCW11dGV4X2xvY2soJmVidF9tdXRleCk7CiAJTElTVF9ERUxFVEUoJmVidF90YWJsZXMsIHRhYmxlKTsKLQl1cCgmZWJ0X211dGV4KTsKKwltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJdmZyZWUodGFibGUtPnByaXZhdGUtPmVudHJpZXMpOwogCWlmICh0YWJsZS0+cHJpdmF0ZS0+Y2hhaW5zdGFjaykgewogCQlmb3JfZWFjaF9jcHUoaSkKQEAgLTEyODEsNyArMTI4Miw3IEBACiAJd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKIAlyZXQgPSAwOwogdW5sb2NrX211dGV4OgotCXVwKCZlYnRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIGZyZWVfdG1wOgogCXZmcmVlKHRtcCk7CiAJcmV0dXJuIHJldDsKQEAgLTEzMjgsNyArMTMyOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGNhbGxlZCB3aXRoIGVidF9tdXRleCBkb3duICovCisvKiBjYWxsZWQgd2l0aCBlYnRfbXV0ZXggbG9ja2VkICovCiBzdGF0aWMgaW50IGNvcHlfZXZlcnl0aGluZ190b191c2VyKHN0cnVjdCBlYnRfdGFibGUgKnQsIHZvaWQgX191c2VyICp1c2VyLAogICAgaW50ICpsZW4sIGludCBjbWQpCiB7CkBAIC0xNDQwLDcgKzE0NDEsNyBAQAogCWNhc2UgRUJUX1NPX0dFVF9JTklUX0lORk86CiAJCWlmICgqbGVuICE9IHNpemVvZihzdHJ1Y3QgZWJ0X3JlcGxhY2UpKXsKIAkJCXJldCA9IC1FSU5WQUw7Ci0JCQl1cCgmZWJ0X211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChjbWQgPT0gRUJUX1NPX0dFVF9JTkZPKSB7CkBAIC0xNDUyLDcgKzE0NTMsNyBAQAogCQkJdG1wLmVudHJpZXNfc2l6ZSA9IHQtPnRhYmxlLT5lbnRyaWVzX3NpemU7CiAJCQl0bXAudmFsaWRfaG9va3MgPSB0LT50YWJsZS0+dmFsaWRfaG9va3M7CiAJCX0KLQkJdXAoJmVidF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmdG1wLCAqbGVuKSAhPSAwKXsKIAkJCUJVR1BSSU5UKCJjMnUgRGlkbid0IHdvcmtcbiIpOwogCQkJcmV0ID0gLUVGQVVMVDsKQEAgLTE0NjQsMTEgKzE0NjUsMTEgQEAKIAljYXNlIEVCVF9TT19HRVRfRU5UUklFUzoKIAljYXNlIEVCVF9TT19HRVRfSU5JVF9FTlRSSUVTOgogCQlyZXQgPSBjb3B5X2V2ZXJ5dGhpbmdfdG9fdXNlcih0LCB1c2VyLCBsZW4sIGNtZCk7Ci0JCXVwKCZlYnRfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJdXAoJmVidF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKQEAgLTE0NzYsMTcgKzE0NzcsMjMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPQoteyB7IE5VTEwsIE5VTEwgfSwgUEZfSU5FVCwgRUJUX0JBU0VfQ1RMLCBFQlRfU09fU0VUX01BWCArIDEsIGRvX2VidF9zZXRfY3RsLAotICAgIEVCVF9CQVNFX0NUTCwgRUJUX1NPX0dFVF9NQVggKyAxLCBkb19lYnRfZ2V0X2N0bCwgMCwgTlVMTAoreworCS5wZgkJPSBQRl9JTkVULAorCS5zZXRfb3B0bWluCT0gRUJUX0JBU0VfQ1RMLAorCS5zZXRfb3B0bWF4CT0gRUJUX1NPX1NFVF9NQVggKyAxLAorCS5zZXQJCT0gZG9fZWJ0X3NldF9jdGwsCisJLmdldF9vcHRtaW4JPSBFQlRfQkFTRV9DVEwsCisJLmdldF9vcHRtYXgJPSBFQlRfU09fR0VUX01BWCArIDEsCisJLmdldAkJPSBkb19lYnRfZ2V0X2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JZG93bigmZWJ0X211dGV4KTsKKwltdXRleF9sb2NrKCZlYnRfbXV0ZXgpOwogCWxpc3RfbmFtZWRfaW5zZXJ0KCZlYnRfdGFyZ2V0cywgJmVidF9zdGFuZGFyZF90YXJnZXQpOwotCXVwKCZlYnRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZWJ0X211dGV4KTsKIAlpZiAoKHJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoJmVidF9zb2Nrb3B0cykpIDwgMCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvbXBhdC5jIGIvbmV0L2NvbXBhdC5jCmluZGV4IGU1OTNkYWMuLjhmZDM3Y2QgMTAwNjQ0Ci0tLSBhL25ldC9jb21wYXQuYworKysgYi9uZXQvY29tcGF0LmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCWNvbXBhdF91cHRyX3QJZmlsdGVyOwkJLyogc3RydWN0IHNvY2tfZmlsdGVyICogKi8KIH07CiAKLXN0YXRpYyBpbnQgZG9fc2V0X2F0dGFjaF9maWx0ZXIoaW50IGZkLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorc3RhdGljIGludCBkb19zZXRfYXR0YWNoX2ZpbHRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IGNvbXBhdF9zb2NrX2Zwcm9nIF9fdXNlciAqZnByb2czMiA9IChzdHJ1Y3QgY29tcGF0X3NvY2tfZnByb2cgX191c2VyICopb3B0dmFsOwpAQCAtNDMyLDExICs0MzIsMTIgQEAKIAkgICAgX19wdXRfdXNlcihjb21wYXRfcHRyKHB0ciksICZrZnByb2ctPmZpbHRlcikpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIHN5c19zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgKGNoYXIgX191c2VyICopa2Zwcm9nLCAKKwlyZXR1cm4gc29ja19zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCAoY2hhciBfX3VzZXIgKilrZnByb2csCiAJCQkgICAgICBzaXplb2Yoc3RydWN0IHNvY2tfZnByb2cpKTsKIH0KIAotc3RhdGljIGludCBkb19zZXRfc29ja190aW1lb3V0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3N0YXRpYyBpbnQgZG9fc2V0X3NvY2tfdGltZW91dChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCisJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKnVwID0gKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIgKikgb3B0dmFsOwogCXN0cnVjdCB0aW1ldmFsIGt0aW1lOwpAQCAtNDUxLDMwICs0NTIsNjEgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJb2xkX2ZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JZXJyID0gc3lzX3NldHNvY2tvcHQoZmQsIGxldmVsLCBvcHRuYW1lLCAoY2hhciAqKSAma3RpbWUsIHNpemVvZihrdGltZSkpOworCWVyciA9IHNvY2tfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgKGNoYXIgKikgJmt0aW1lLCBzaXplb2Yoa3RpbWUpKTsKIAlzZXRfZnMob2xkX2ZzKTsKIAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgY29tcGF0X3NvY2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJaWYgKG9wdG5hbWUgPT0gU09fQVRUQUNIX0ZJTFRFUikKKwkJcmV0dXJuIGRvX3NldF9hdHRhY2hfZmlsdGVyKHNvY2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkgICAgb3B0dmFsLCBvcHRsZW4pOworCWlmIChvcHRuYW1lID09IFNPX1JDVlRJTUVPIHx8IG9wdG5hbWUgPT0gU09fU05EVElNRU8pCisJCXJldHVybiBkb19zZXRfc29ja190aW1lb3V0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlyZXR1cm4gc29ja19zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NldHNvY2tvcHQoaW50IGZkLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCiAJLyogU09fU0VUX1JFUExBQ0Ugc2VlbXMgdG8gYmUgdGhlIHNhbWUgaW4gYWxsIGxldmVscyAqLwogCWlmIChvcHRuYW1lID09IElQVF9TT19TRVRfUkVQTEFDRSkKIAkJcmV0dXJuIGRvX25ldGZpbHRlcl9yZXBsYWNlKGZkLCBsZXZlbCwgb3B0bmFtZSwKIAkJCQkJICAgIG9wdHZhbCwgb3B0bGVuKTsKLQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiBvcHRuYW1lID09IFNPX0FUVEFDSF9GSUxURVIpCi0JCXJldHVybiBkb19zZXRfYXR0YWNoX2ZpbHRlcihmZCwgbGV2ZWwsIG9wdG5hbWUsCi0JCQkJCSAgICBvcHR2YWwsIG9wdGxlbik7Ci0JaWYgKGxldmVsID09IFNPTF9TT0NLRVQgJiYKLQkgICAgKG9wdG5hbWUgPT0gU09fUkNWVElNRU8gfHwgb3B0bmFtZSA9PSBTT19TTkRUSU1FTykpCi0JCXJldHVybiBkb19zZXRfc29ja190aW1lb3V0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCi0JcmV0dXJuIHN5c19zZXRzb2Nrb3B0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCWlmIChvcHRsZW4gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpKSE9TlVMTCkKKwl7CisJCWVyciA9IHNlY3VyaXR5X3NvY2tldF9zZXRzb2Nrb3B0KHNvY2ssbGV2ZWwsb3B0bmFtZSk7CisJCWlmIChlcnIpIHsKKwkJCXNvY2tmZF9wdXQoc29jayk7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaWYgKGxldmVsID09IFNPTF9TT0NLRVQpCisJCQllcnIgPSBjb21wYXRfc29ja19zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLAorCQkJCQlvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJCWVsc2UgaWYgKHNvY2stPm9wcy0+Y29tcGF0X3NldHNvY2tvcHQpCisJCQllcnIgPSBzb2NrLT5vcHMtPmNvbXBhdF9zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLAorCQkJCQlvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJCWVsc2UKKwkJCWVyciA9IHNvY2stPm9wcy0+c2V0c29ja29wdChzb2NrLCBsZXZlbCwKKwkJCQkJb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCQlzb2NrZmRfcHV0KHNvY2spOworCX0KKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRvX2dldF9zb2NrX3RpbWVvdXQoaW50IGZkLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorc3RhdGljIGludCBkb19nZXRfc29ja190aW1lb3V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp1cDsKQEAgLTQ5MCw3ICs1MjIsNyBAQAogCWxlbiA9IHNpemVvZihrdGltZSk7CiAJb2xkX2ZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JZXJyID0gc3lzX2dldHNvY2tvcHQoZmQsIGxldmVsLCBvcHRuYW1lLCAoY2hhciAqKSAma3RpbWUsICZsZW4pOworCWVyciA9IHNvY2tfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgKGNoYXIgKikgJmt0aW1lLCAmbGVuKTsKIAlzZXRfZnMob2xkX2ZzKTsKIAogCWlmICghZXJyKSB7CkBAIC01MDMsMTUgKzUzNSw2MSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgY29tcGF0X3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpZiAob3B0bmFtZSA9PSBTT19SQ1ZUSU1FTyB8fCBvcHRuYW1lID09IFNPX1NORFRJTUVPKQorCQlyZXR1cm4gZG9fZ2V0X3NvY2tfdGltZW91dChzb2NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBzb2NrX2dldHNvY2tvcHQoc29jaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKworaW50IGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnVzZXJzdGFtcCkKK3sKKwlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICpjdHYgPQorCQkJKHN0cnVjdCBjb21wYXRfdGltZXZhbCBfX3VzZXIqKSB1c2Vyc3RhbXA7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQorCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCWlmIChzay0+c2tfc3RhbXAudHZfc2VjID09IC0xKQorCQlyZXR1cm4gZXJyOworCWlmIChzay0+c2tfc3RhbXAudHZfc2VjID09IDApCisJCWRvX2dldHRpbWVvZmRheSgmc2stPnNrX3N0YW1wKTsKKwlpZiAocHV0X3VzZXIoc2stPnNrX3N0YW1wLnR2X3NlYywgJmN0di0+dHZfc2VjKSB8fAorCQkJcHV0X3VzZXIoc2stPnNrX3N0YW1wLnR2X3VzZWMsICZjdHYtPnR2X3VzZWMpKQorCQllcnIgPSAtRUZBVUxUOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXApOworCiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19nZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7Ci0JaWYgKGxldmVsID09IFNPTF9TT0NLRVQgJiYKLQkgICAgKG9wdG5hbWUgPT0gU09fUkNWVElNRU8gfHwgb3B0bmFtZSA9PSBTT19TTkRUSU1FTykpCi0JCXJldHVybiBkb19nZXRfc29ja190aW1lb3V0KGZkLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwotCXJldHVybiBzeXNfZ2V0c29ja29wdChmZCwgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLX0KKwlpbnQgZXJyOworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAKKwlpZiAoKHNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCAmZXJyKSkhPU5VTEwpCisJeworCQllcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0c29ja29wdChzb2NrLCBsZXZlbCwKKwkJCQkJCQkgICBvcHRuYW1lKTsKKwkJaWYgKGVycikgeworCQkJc29ja2ZkX3B1dChzb2NrKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkKKwkJCWVyciA9IGNvbXBhdF9zb2NrX2dldHNvY2tvcHQoc29jaywgbGV2ZWwsCisJCQkJCW9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwkJZWxzZSBpZiAoc29jay0+b3BzLT5jb21wYXRfZ2V0c29ja29wdCkKKwkJCWVyciA9IHNvY2stPm9wcy0+Y29tcGF0X2dldHNvY2tvcHQoc29jaywgbGV2ZWwsCisJCQkJCW9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwkJZWxzZQorCQkJZXJyID0gc29jay0+b3BzLT5nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLAorCQkJCQlvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJCXNvY2tmZF9wdXQoc29jayk7CisJfQorCXJldHVybiBlcnI7Cit9CiAvKiBBcmd1bWVudCBsaXN0IHNpemVzIGZvciBjb21wYXRfc3lzX3NvY2tldGNhbGwgKi8KICNkZWZpbmUgQUwoeCkgKCh4KSAqIHNpemVvZih1MzIpKQogc3RhdGljIHVuc2lnbmVkIGNoYXIgbmFzWzE4XT17QUwoMCksQUwoMyksQUwoMyksQUwoMyksQUwoMiksQUwoMyksCmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlCmluZGV4IDYzMGRhMGYuLjc5ZmUxMmMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL01ha2VmaWxlCisrKyBiL25ldC9jb3JlL01ha2VmaWxlCkBAIC0xNCw1ICsxNCw1IEBACiBvYmotJChDT05GSUdfU1lTRlMpICs9IG5ldC1zeXNmcy5vCiBvYmotJChDT05GSUdfTkVUX0RJVkVSVCkgKz0gZHYubwogb2JqLSQoQ09ORklHX05FVF9QS1RHRU4pICs9IHBrdGdlbi5vCi1vYmotJChDT05GSUdfTkVUX1JBRElPKSArPSB3aXJlbGVzcy5vCitvYmotJChDT05GSUdfV0lSRUxFU1NfRVhUKSArPSB3aXJlbGVzcy5vCiBvYmotJChDT05GSUdfTkVUUE9MTCkgKz0gbmV0cG9sbC5vCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kYXRhZ3JhbS5jIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwppbmRleCBiOGNlNmJmLi5hZWNkZGNjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kYXRhZ3JhbS5jCisrKyBiL25ldC9jb3JlL2RhdGFncmFtLmMKQEAgLTUwMCw2ICs1MDAsOCBAQAogCS8qIGV4Y2VwdGlvbmFsIGV2ZW50cz8gKi8KIAlpZiAoc2stPnNrX2VyciB8fCAhc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfZXJyb3JfcXVldWUpKQogCQltYXNrIHw9IFBPTExFUlI7CisJaWYgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikKKwkJbWFzayB8PSBQT0xMUkRIVVA7CiAJaWYgKHNrLT5za19zaHV0ZG93biA9PSBTSFVURE9XTl9NQVNLKQogCQltYXNrIHw9IFBPTExIVVA7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggMmFmYjBkZS4uZTA0ODljYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTgxLDYgKzgxLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgpAQCAtMTEwLDEwICsxMTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldHBvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaWZkZWYgQ09ORklHX05FVF9SQURJTwotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CQkvKiBOb3RlIDogd2lsbCBkZWZpbmUgV0lSRUxFU1NfRVhUICovCisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2VuZGlmCS8qIENPTkZJR19ORVRfUkFESU8gKi8KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogCiAvKgpAQCAtOTc4LDcgKzk3NywxMiBAQAogCiBpbnQgdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKIHsKLQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmV0ZGV2X2NoYWluLCBuYik7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCWVyciA9IG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5ldGRldl9jaGFpbiwgbmIpOworCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0xNDQ4LDggKzE0NTIsMjkgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAKLQlpZiAoZGV2LT5tYXN0ZXIpCisJaWYgKGRldi0+bWFzdGVyKSB7CisJCS8qCisJCSAqIE9uIGJvbmRpbmcgc2xhdmVzIG90aGVyIHRoYW4gdGhlIGN1cnJlbnRseSBhY3RpdmUKKwkJICogc2xhdmUsIHN1cHByZXNzIGR1cGxpY2F0ZXMgZXhjZXB0IGZvciA4MDIuM2FkCisJCSAqIEVUSF9QX1NMT1cgYW5kIGFsYiBub24tbWNhc3QvYmNhc3QuCisJCSAqLworCQlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX1NMQVZFX0lOQUNUSVZFKSB7CisJCQlpZiAoZGV2LT5tYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSX0FMQikgeworCQkJCWlmIChza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9CUk9BRENBU1QgJiYKKwkJCQkgICAgc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfTVVMVElDQVNUKQorCQkJCQlnb3RvIGtlZXA7CisJCQl9CisKKwkJCWlmIChkZXYtPm1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfODAyM0FEICYmCisJCQkgICAgc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1NMT1cpKQorCQkJCWdvdG8ga2VlcDsKKwkJCisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CitrZWVwOgogCQlza2ItPmRldiA9IGRldi0+bWFzdGVyOworCX0KIAogCXJldHVybiBkZXY7CiB9CkBAIC0xNTkzLDYgKzE2MTgsOSBAQAogCiAJb3JpZ19kZXYgPSBza2JfYm9uZChza2IpOwogCisJaWYgKCFvcmlnX2RldikKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCiAJX19nZXRfY3B1X3ZhcihuZXRkZXZfcnhfc3RhdCkudG90YWwrKzsKIAogCXNrYi0+aC5yYXcgPSBza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKQEAgLTE3MzcsOCArMTc2NSw3IEBACiAJCWlmIChkZXYtPnF1b3RhIDw9IDAgfHwgZGV2LT5wb2xsKGRldiwgJmJ1ZGdldCkpIHsKIAkJCW5ldHBvbGxfcG9sbF91bmxvY2soaGF2ZSk7CiAJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQkJbGlzdF9kZWwoJmRldi0+cG9sbF9saXN0KTsKLQkJCWxpc3RfYWRkX3RhaWwoJmRldi0+cG9sbF9saXN0LCAmcXVldWUtPnBvbGxfbGlzdCk7CisJCQlsaXN0X21vdmVfdGFpbCgmZGV2LT5wb2xsX2xpc3QsICZxdWV1ZS0+cG9sbF9saXN0KTsKIAkJCWlmIChkZXYtPnF1b3RhIDwgMCkKIAkJCQlkZXYtPnF1b3RhICs9IGRldi0+d2VpZ2h0OwogCQkJZWxzZQpAQCAtMjAyOCw3ICsyMDU1LDcgQEAKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKIAotI2lmZGVmIFdJUkVMRVNTX0VYVAorI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIGV4dGVybiBpbnQgd2lyZWxlc3NfcHJvY19pbml0KHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgd2lyZWxlc3NfcHJvY19pbml0KCkgMApAQCAtMjE1MiwxMiArMjE3OSwyMCBAQAogCiAJZmxhZ3MgPSAoZGV2LT5mbGFncyAmIH4oSUZGX1BST01JU0MgfAogCQkJCUlGRl9BTExNVUxUSSB8Ci0JCQkJSUZGX1JVTk5JTkcpKSB8IAorCQkJCUlGRl9SVU5OSU5HIHwKKwkJCQlJRkZfTE9XRVJfVVAgfAorCQkJCUlGRl9ET1JNQU5UKSkgfAogCQkoZGV2LT5nZmxhZ3MgJiAoSUZGX1BST01JU0MgfAogCQkJCUlGRl9BTExNVUxUSSkpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikpCi0JCWZsYWdzIHw9IElGRl9SVU5OSU5HOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJaWYgKG5ldGlmX29wZXJfdXAoZGV2KSkKKwkJCWZsYWdzIHw9IElGRl9SVU5OSU5HOworCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQkJZmxhZ3MgfD0gSUZGX0xPV0VSX1VQOworCQlpZiAobmV0aWZfZG9ybWFudChkZXYpKQorCQkJZmxhZ3MgfD0gSUZGX0RPUk1BTlQ7CisJfQogCiAJcmV0dXJuIGZsYWdzOwogfQpAQCAtMjQzNiw5ICsyNDcxLDkgQEAKIAkgKi8KIAogCWlmIChjbWQgPT0gU0lPQ0dJRkNPTkYpIHsKLQkJcnRubF9zaGxvY2soKTsKKwkJcnRubF9sb2NrKCk7CiAJCXJldCA9IGRldl9pZmNvbmYoKGNoYXIgX191c2VyICopIGFyZyk7Ci0JCXJ0bmxfc2h1bmxvY2soKTsKKwkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKGNtZCA9PSBTSU9DR0lGTkFNRSkKQEAgLTI1ODIsNyArMjYxNyw3IEBACiAJCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJcmV0dXJuIHJldDsKIAkJCX0KLSNpZmRlZiBXSVJFTEVTU19FWFQKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAJCQkvKiBUYWtlIGNhcmUgb2YgV2lyZWxlc3MgRXh0ZW5zaW9ucyAqLwogCQkJaWYgKGNtZCA+PSBTSU9DSVdGSVJTVCAmJiBjbWQgPD0gU0lPQ0lXTEFTVCkgewogCQkJCS8qIElmIGNvbW1hbmQgaXMgYHNldCBhIHBhcmFtZXRlcicsIG9yCkBAIC0yNjAzLDcgKzI2MzgsNyBAQAogCQkJCQlyZXQgPSAtRUZBVUxUOwogCQkJCXJldHVybiByZXQ7CiAJCQl9Ci0jZW5kaWYJLyogV0lSRUxFU1NfRVhUICovCisjZW5kaWYJLyogQ09ORklHX1dJUkVMRVNTX0VYVCAqLwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQpAQCAtMjg0Nyw3ICsyODgyLDcgQEAKIAlyZWJyb2FkY2FzdF90aW1lID0gd2FybmluZ190aW1lID0gamlmZmllczsKIAl3aGlsZSAoYXRvbWljX3JlYWQoJmRldi0+cmVmY250KSAhPSAwKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHJlYnJvYWRjYXN0X3RpbWUgKyAxICogSFopKSB7Ci0JCQlydG5sX3NobG9jaygpOworCQkJcnRubF9sb2NrKCk7CiAKIAkJCS8qIFJlYnJvYWRjYXN0IHVucmVnaXN0ZXIgbm90aWZpY2F0aW9uICovCiAJCQlub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfY2hhaW4sCkBAIC0yODY0LDcgKzI4OTksNyBAQAogCQkJCWxpbmt3YXRjaF9ydW5fcXVldWUoKTsKIAkJCX0KIAotCQkJcnRubF9zaHVubG9jaygpOworCQkJX19ydG5sX3VubG9jaygpOwogCiAJCQlyZWJyb2FkY2FzdF90aW1lID0gamlmZmllczsKIAkJfQpAQCAtMjkwMiw3ICsyOTM3LDcgQEAKICAqIDIpIFNpbmNlIHdlIHJ1biB3aXRoIHRoZSBSVE5MIHNlbWFwaG9yZSBub3QgaGVsZCwgd2UgY2FuIHNsZWVwCiAgKiAgICBzYWZlbHkgaW4gb3JkZXIgdG8gd2FpdCBmb3IgdGhlIG5ldGRldiByZWZjbnQgdG8gZHJvcCB0byB6ZXJvLgogICovCi1zdGF0aWMgREVDTEFSRV9NVVRFWChuZXRfdG9kb19ydW5fbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChuZXRfdG9kb19ydW5fbXV0ZXgpOwogdm9pZCBuZXRkZXZfcnVuX3RvZG8odm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3QgPSBMSVNUX0hFQURfSU5JVChsaXN0KTsKQEAgLTI5MTAsNyArMjk0NSw3IEBACiAKIAogCS8qIE5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBtdWx0aXBsZSBjcHUncyBnZXR0aW5nIG91dCBvZiBvcmRlci4gKi8KLQlkb3duKCZuZXRfdG9kb19ydW5fbXV0ZXgpOworCW11dGV4X2xvY2soJm5ldF90b2RvX3J1bl9tdXRleCk7CiAKIAkvKiBOb3Qgc2FmZSB0byBkbyBvdXRzaWRlIHRoZSBzZW1hcGhvcmUuICBXZSBtdXN0IG5vdCByZXR1cm4KIAkgKiB1bnRpbCBhbGwgdW5yZWdpc3RlciBldmVudHMgaW52b2tlZCBieSB0aGUgbG9jYWwgcHJvY2Vzc29yCkBAIC0yOTY3LDcgKzMwMDIsNyBAQAogCX0KIAogb3V0OgotCXVwKCZuZXRfdG9kb19ydW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmbmV0X3RvZG9fcnVuX211dGV4KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvY29yZS9mbG93LmMgYi9uZXQvY29yZS9mbG93LmMKaW5kZXggYzRmMjUzOC4uNTU3ODlmOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmxvdy5jCisrKyBiL25ldC9jb3JlL2Zsb3cuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgpAQCAtMjg3LDExICsyODgsMTEgQEAKIHZvaWQgZmxvd19jYWNoZV9mbHVzaCh2b2lkKQogewogCXN0cnVjdCBmbG93X2ZsdXNoX2luZm8gaW5mbzsKLQlzdGF0aWMgREVDTEFSRV9NVVRFWChmbG93X2ZsdXNoX3NlbSk7CisJc3RhdGljIERFRklORV9NVVRFWChmbG93X2ZsdXNoX3NlbSk7CiAKIAkvKiBEb24ndCB3YW50IGNwdXMgZ29pbmcgZG93biBvciB1cCBkdXJpbmcgdGhpcy4gKi8KIAlsb2NrX2NwdV9ob3RwbHVnKCk7Ci0JZG93bigmZmxvd19mbHVzaF9zZW0pOworCW11dGV4X2xvY2soJmZsb3dfZmx1c2hfc2VtKTsKIAlhdG9taWNfc2V0KCZpbmZvLmNwdWxlZnQsIG51bV9vbmxpbmVfY3B1cygpKTsKIAlpbml0X2NvbXBsZXRpb24oJmluZm8uY29tcGxldGlvbik7CiAKQEAgLTMwMSw3ICszMDIsNyBAQAogCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJd2FpdF9mb3JfY29tcGxldGlvbigmaW5mby5jb21wbGV0aW9uKTsKLQl1cCgmZmxvd19mbHVzaF9zZW0pOworCW11dGV4X3VubG9jaygmZmxvd19mbHVzaF9zZW0pOwogCXVubG9ja19jcHVfaG90cGx1ZygpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9saW5rX3dhdGNoLmMgYi9uZXQvY29yZS9saW5rX3dhdGNoLmMKaW5kZXggZDQzZDEyMC4uMzQxZGU0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbGlua193YXRjaC5jCisrKyBiL25ldC9jb3JlL2xpbmtfd2F0Y2guYwpAQCAtNDksNiArNDksNDUgQEAKIC8qIEF2b2lkIGttYWxsb2MoKSBmb3IgbW9zdCBzeXN0ZW1zICovCiBzdGF0aWMgc3RydWN0IGx3X2V2ZW50IHNpbmdsZWV2ZW50OwogCitzdGF0aWMgdW5zaWduZWQgY2hhciBkZWZhdWx0X29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQlyZXR1cm4gKGRldi0+aWZpbmRleCAhPSBkZXYtPmlmbGluayA/CisJCQlJRl9PUEVSX0xPV0VSTEFZRVJET1dOIDogSUZfT1BFUl9ET1dOKTsKKworCWlmIChuZXRpZl9kb3JtYW50KGRldikpCisJCXJldHVybiBJRl9PUEVSX0RPUk1BTlQ7CisKKwlyZXR1cm4gSUZfT1BFUl9VUDsKK30KKworCitzdGF0aWMgdm9pZCByZmMyODYzX3BvbGljeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgb3BlcnN0YXRlID0gZGVmYXVsdF9vcGVyc3RhdGUoZGV2KTsKKworCWlmIChvcGVyc3RhdGUgPT0gZGV2LT5vcGVyc3RhdGUpCisJCXJldHVybjsKKworCXdyaXRlX2xvY2tfYmgoJmRldl9iYXNlX2xvY2spOworCisJc3dpdGNoKGRldi0+bGlua19tb2RlKSB7CisJY2FzZSBJRl9MSU5LX01PREVfRE9STUFOVDoKKwkJaWYgKG9wZXJzdGF0ZSA9PSBJRl9PUEVSX1VQKQorCQkJb3BlcnN0YXRlID0gSUZfT1BFUl9ET1JNQU5UOworCQlicmVhazsKKworCWNhc2UgSUZfTElOS19NT0RFX0RFRkFVTFQ6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfTsKKworCWRldi0+b3BlcnN0YXRlID0gb3BlcnN0YXRlOworCisJd3JpdGVfdW5sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKK30KKworCiAvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBydG5sIHNlbWFwaG9yZSBoZWxkICovCiB2b2lkIGxpbmt3YXRjaF9ydW5fcXVldWUodm9pZCkKIHsKQEAgLTc0LDYgKzExMyw3IEBACiAJCSAqLwogCQljbGVhcl9iaXQoX19MSU5LX1NUQVRFX0xJTktXQVRDSF9QRU5ESU5HLCAmZGV2LT5zdGF0ZSk7CiAKKwkJcmZjMjg2M19wb2xpY3koZGV2KTsKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKIAkJCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJCQlXQVJOX09OKGRldi0+cWRpc2Nfc2xlZXBpbmcgPT0gJm5vb3BfcWRpc2MpOwpAQCAtOTksOSArMTM5LDkgQEAKIAlsaW5rd2F0Y2hfbmV4dGV2ZW50ID0gamlmZmllcyArIEhaOwogCWNsZWFyX2JpdChMV19SVU5OSU5HLCAmbGlua3dhdGNoX2ZsYWdzKTsKIAotCXJ0bmxfc2hsb2NrKCk7CisJcnRubF9sb2NrKCk7CiAJbGlua3dhdGNoX3J1bl9xdWV1ZSgpOwotCXJ0bmxfc2h1bmxvY2soKTsKKwlydG5sX3VubG9jaygpOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggZTY4NzAwZi4uMGM4NjY2OCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTU4Niw4ICs1ODYsOCBAQAogCQkJa2ZyZWUoaGgpOwogCX0KIAotCWlmIChuZWlnaC0+b3BzICYmIG5laWdoLT5vcHMtPmRlc3RydWN0b3IpCi0JCShuZWlnaC0+b3BzLT5kZXN0cnVjdG9yKShuZWlnaCk7CisJaWYgKG5laWdoLT5wYXJtcy0+bmVpZ2hfZGVzdHJ1Y3RvcikKKwkJKG5laWdoLT5wYXJtcy0+bmVpZ2hfZGVzdHJ1Y3RvcikobmVpZ2gpOwogCiAJc2tiX3F1ZXVlX3B1cmdlKCZuZWlnaC0+YXJwX3F1ZXVlKTsKIApAQCAtNzUwLDExICs3NTAsMTMgQEAKIAkJCQkJICBuZWlnaC0+dXNlZCArIG5laWdoLT5wYXJtcy0+ZGVsYXlfcHJvYmVfdGltZSkpIHsKIAkJCU5FSUdIX1BSSU5USzIoIm5laWdoICVwIGlzIGRlbGF5ZWQuXG4iLCBuZWlnaCk7CiAJCQluZWlnaC0+bnVkX3N0YXRlID0gTlVEX0RFTEFZOworCQkJbmVpZ2gtPnVwZGF0ZWQgPSBqaWZmaWVzOwogCQkJbmVpZ2hfc3VzcGVjdChuZWlnaCk7CiAJCQluZXh0ID0gbm93ICsgbmVpZ2gtPnBhcm1zLT5kZWxheV9wcm9iZV90aW1lOwogCQl9IGVsc2UgewogCQkJTkVJR0hfUFJJTlRLMigibmVpZ2ggJXAgaXMgc3VzcGVjdGVkLlxuIiwgbmVpZ2gpOwogCQkJbmVpZ2gtPm51ZF9zdGF0ZSA9IE5VRF9TVEFMRTsKKwkJCW5laWdoLT51cGRhdGVkID0gamlmZmllczsKIAkJCW5laWdoX3N1c3BlY3QobmVpZ2gpOwogCQl9CiAJfSBlbHNlIGlmIChzdGF0ZSAmIE5VRF9ERUxBWSkgewpAQCAtNzYyLDExICs3NjQsMTMgQEAKIAkJCQkgICBuZWlnaC0+Y29uZmlybWVkICsgbmVpZ2gtPnBhcm1zLT5kZWxheV9wcm9iZV90aW1lKSkgewogCQkJTkVJR0hfUFJJTlRLMigibmVpZ2ggJXAgaXMgbm93IHJlYWNoYWJsZS5cbiIsIG5laWdoKTsKIAkJCW5laWdoLT5udWRfc3RhdGUgPSBOVURfUkVBQ0hBQkxFOworCQkJbmVpZ2gtPnVwZGF0ZWQgPSBqaWZmaWVzOwogCQkJbmVpZ2hfY29ubmVjdChuZWlnaCk7CiAJCQluZXh0ID0gbmVpZ2gtPmNvbmZpcm1lZCArIG5laWdoLT5wYXJtcy0+cmVhY2hhYmxlX3RpbWU7CiAJCX0gZWxzZSB7CiAJCQlORUlHSF9QUklOVEsyKCJuZWlnaCAlcCBpcyBwcm9iZWQuXG4iLCBuZWlnaCk7CiAJCQluZWlnaC0+bnVkX3N0YXRlID0gTlVEX1BST0JFOworCQkJbmVpZ2gtPnVwZGF0ZWQgPSBqaWZmaWVzOwogCQkJYXRvbWljX3NldCgmbmVpZ2gtPnByb2JlcywgMCk7CiAJCQluZXh0ID0gbm93ICsgbmVpZ2gtPnBhcm1zLT5yZXRyYW5zX3RpbWU7CiAJCX0KQEAgLTc4MCw2ICs3ODQsNyBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCW5laWdoLT5udWRfc3RhdGUgPSBOVURfRkFJTEVEOworCQluZWlnaC0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCW5vdGlmeSA9IDE7CiAJCU5FSUdIX0NBQ0hFX1NUQVRfSU5DKG5laWdoLT50YmwsIHJlc19mYWlsZWQpOwogCQlORUlHSF9QUklOVEsyKCJuZWlnaCAlcCBpcyBmYWlsZWQuXG4iLCBuZWlnaCk7CkBAIC04NDMsMTAgKzg0OCwxMiBAQAogCQlpZiAobmVpZ2gtPnBhcm1zLT5tY2FzdF9wcm9iZXMgKyBuZWlnaC0+cGFybXMtPmFwcF9wcm9iZXMpIHsKIAkJCWF0b21pY19zZXQoJm5laWdoLT5wcm9iZXMsIG5laWdoLT5wYXJtcy0+dWNhc3RfcHJvYmVzKTsKIAkJCW5laWdoLT5udWRfc3RhdGUgICAgID0gTlVEX0lOQ09NUExFVEU7CisJCQluZWlnaC0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCQluZWlnaF9ob2xkKG5laWdoKTsKIAkJCW5laWdoX2FkZF90aW1lcihuZWlnaCwgbm93ICsgMSk7CiAJCX0gZWxzZSB7CiAJCQluZWlnaC0+bnVkX3N0YXRlID0gTlVEX0ZBSUxFRDsKKwkJCW5laWdoLT51cGRhdGVkID0gamlmZmllczsKIAkJCXdyaXRlX3VubG9ja19iaCgmbmVpZ2gtPmxvY2spOwogCiAJCQlpZiAoc2tiKQpAQCAtODU3LDYgKzg2NCw3IEBACiAJCU5FSUdIX1BSSU5USzIoIm5laWdoICVwIGlzIGRlbGF5ZWQuXG4iLCBuZWlnaCk7CiAJCW5laWdoX2hvbGQobmVpZ2gpOwogCQluZWlnaC0+bnVkX3N0YXRlID0gTlVEX0RFTEFZOworCQluZWlnaC0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCW5laWdoX2FkZF90aW1lcihuZWlnaCwKIAkJCQlqaWZmaWVzICsgbmVpZ2gtPnBhcm1zLT5kZWxheV9wcm9iZV90aW1lKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IGU4YjJhY2IuLjIxYjY4NDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC05MSw2ICs5MSw3IEBACiBORVRERVZJQ0VfU0hPVyhpZmluZGV4LCBmbXRfZGVjKTsKIE5FVERFVklDRV9TSE9XKGZlYXR1cmVzLCBmbXRfbG9uZ19oZXgpOwogTkVUREVWSUNFX1NIT1codHlwZSwgZm10X2RlYyk7CitORVRERVZJQ0VfU0hPVyhsaW5rX21vZGUsIGZtdF9kZWMpOwogCiAvKiB1c2Ugc2FtZSBsb2NraW5nIHJ1bGVzIGFzIEdJRkhXQUREUiBpb2N0bCdzICovCiBzdGF0aWMgc3NpemVfdCBmb3JtYXRfYWRkcihjaGFyICpidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBsZW4pCkBAIC0xMzMsNiArMTM0LDQzIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfZG9ybWFudChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCBmbXRfZGVjLCAhIW5ldGlmX2Rvcm1hbnQobmV0ZGV2KSk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm9wZXJzdGF0ZXNbXSA9IHsKKwkidW5rbm93biIsCisJIm5vdHByZXNlbnQiLCAvKiBjdXJyZW50bHkgdW51c2VkICovCisJImRvd24iLAorCSJsb3dlcmxheWVyZG93biIsCisJInRlc3RpbmciLCAvKiBjdXJyZW50bHkgdW51c2VkICovCisJImRvcm1hbnQiLAorCSJ1cCIKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfb3BlcnN0YXRlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7CisJdW5zaWduZWQgY2hhciBvcGVyc3RhdGU7CisKKwlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOworCW9wZXJzdGF0ZSA9IG5ldGRldi0+b3BlcnN0YXRlOworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlvcGVyc3RhdGUgPSBJRl9PUEVSX0RPV047CisJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOworCisJaWYgKG9wZXJzdGF0ZSA+PSBzaXplb2Yob3BlcnN0YXRlcykpCisJCXJldHVybiAtRUlOVkFMOyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG9wZXJzdGF0ZXNbb3BlcnN0YXRlXSk7Cit9CisKIC8qIHJlYWQtd3JpdGUgYXR0cmlidXRlcyAqLwogTkVUREVWSUNFX1NIT1cobXR1LCBmbXRfZGVjKTsKIApAQCAtMTkwLDkgKzIyOCwxMiBAQAogCV9fQVRUUihpZmluZGV4LCBTX0lSVUdPLCBzaG93X2lmaW5kZXgsIE5VTEwpLAogCV9fQVRUUihmZWF0dXJlcywgU19JUlVHTywgc2hvd19mZWF0dXJlcywgTlVMTCksCiAJX19BVFRSKHR5cGUsIFNfSVJVR08sIHNob3dfdHlwZSwgTlVMTCksCisJX19BVFRSKGxpbmtfbW9kZSwgU19JUlVHTywgc2hvd19saW5rX21vZGUsIE5VTEwpLAogCV9fQVRUUihhZGRyZXNzLCBTX0lSVUdPLCBzaG93X2FkZHJlc3MsIE5VTEwpLAogCV9fQVRUUihicm9hZGNhc3QsIFNfSVJVR08sIHNob3dfYnJvYWRjYXN0LCBOVUxMKSwKIAlfX0FUVFIoY2FycmllciwgU19JUlVHTywgc2hvd19jYXJyaWVyLCBOVUxMKSwKKwlfX0FUVFIoZG9ybWFudCwgU19JUlVHTywgc2hvd19kb3JtYW50LCBOVUxMKSwKKwlfX0FUVFIob3BlcnN0YXRlLCBTX0lSVUdPLCBzaG93X29wZXJzdGF0ZSwgTlVMTCksCiAJX19BVFRSKG10dSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfbXR1LCBzdG9yZV9tdHUpLAogCV9fQVRUUihmbGFncywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfZmxhZ3MsIHN0b3JlX2ZsYWdzKSwKIAlfX0FUVFIodHhfcXVldWVfbGVuLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190eF9xdWV1ZV9sZW4sCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggZWE1MWY4ZC4uZThlMDVjZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCisrKyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtNjY5LDE0ICs2NjksMTQgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRldmljZSAlcyBub3QgdXAgeWV0LCBmb3JjaW5nIGl0XG4iLAogCQkgICAgICAgbnAtPm5hbWUsIG5wLT5kZXZfbmFtZSk7CiAKLQkJcnRubF9zaGxvY2soKTsKKwkJcnRubF9sb2NrKCk7CiAJCWlmIChkZXZfY2hhbmdlX2ZsYWdzKG5kZXYsIG5kZXYtPmZsYWdzIHwgSUZGX1VQKSA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBvcGVuICVzXG4iLAogCQkJICAgICAgIG5wLT5uYW1lLCBucC0+ZGV2X25hbWUpOwotCQkJcnRubF9zaHVubG9jaygpOworCQkJcnRubF91bmxvY2soKTsKIAkJCWdvdG8gcmVsZWFzZTsKIAkJfQotCQlydG5sX3NodW5sb2NrKCk7CisJCXJ0bmxfdW5sb2NrKCk7CiAKIAkJYXRsZWFzdCA9IGppZmZpZXMgKyBIWi8xMDsKICAJCWF0bW9zdCA9IGppZmZpZXMgKyA0KkhaOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCBkYTE2ZjhmLi5jMjNlOWMwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMTA2LDYgKzEwNiw5IEBACiAgKgogICogaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCkgcmVwbGFjZWQgTmlzaGFudGggQXJhdmFtdWRhbiA8bmFjY0B1cy5pYm0uY29tPiAKICAqIDA1MDEwMworICoKKyAqIE1QTFMgc3VwcG9ydCBieSBTdGV2ZW4gV2hpdGVob3VzZSA8c3RldmVAY2h5Z3d5bi5jb20+CisgKgogICovCiAjaW5jbHVkZSA8bGludXgvc3lzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTExMyw2ICsxMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTEyNSw2ICsxMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTE0OSwzOCArMTU0LDM3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+IC8qIGRvX2RpdiAqLworI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgkJLyogZG9fZGl2ICovCiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAKLQotI2RlZmluZSBWRVJTSU9OICAicGt0Z2VuIHYyLjYzOiBQYWNrZXQgR2VuZXJhdG9yIGZvciBwYWNrZXQgcGVyZm9ybWFuY2UgdGVzdGluZy5cbiIKKyNkZWZpbmUgVkVSU0lPTiAgInBrdGdlbiB2Mi42NzogUGFja2V0IEdlbmVyYXRvciBmb3IgcGFja2V0IHBlcmZvcm1hbmNlIHRlc3RpbmcuXG4iCiAKIC8qICNkZWZpbmUgUEdfREVCVUcoYSkgYSAqLwotI2RlZmluZSBQR19ERUJVRyhhKSAKKyNkZWZpbmUgUEdfREVCVUcoYSkKIAogLyogVGhlIGJ1Y2tldHMgYXJlIGV4cG9uZW50aWFsIGluICd3aWR0aCcgKi8KICNkZWZpbmUgTEFUX0JVQ0tFVFNfTUFYIDMyCiAjZGVmaW5lIElQX05BTUVfU1ogMzIKKyNkZWZpbmUgTUFYX01QTFNfTEFCRUxTIDE2IC8qIFRoaXMgaXMgdGhlIG1heCBsYWJlbCBzdGFjayBkZXB0aCAqLworI2RlZmluZSBNUExTX1NUQUNLX0JPVFRPTSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMDAxMDApCiAKIC8qIERldmljZSBmbGFnIGJpdHMgKi8KLSNkZWZpbmUgRl9JUFNSQ19STkQgICAoMTw8MCkgIC8qIElQLVNyYyBSYW5kb20gICovCi0jZGVmaW5lIEZfSVBEU1RfUk5EICAgKDE8PDEpICAvKiBJUC1Ec3QgUmFuZG9tICAqLwotI2RlZmluZSBGX1VEUFNSQ19STkQgICgxPDwyKSAgLyogVURQLVNyYyBSYW5kb20gKi8KLSNkZWZpbmUgRl9VRFBEU1RfUk5EICAoMTw8MykgIC8qIFVEUC1Ec3QgUmFuZG9tICovCi0jZGVmaW5lIEZfTUFDU1JDX1JORCAgKDE8PDQpICAvKiBNQUMtU3JjIFJhbmRvbSAqLwotI2RlZmluZSBGX01BQ0RTVF9STkQgICgxPDw1KSAgLyogTUFDLURzdCBSYW5kb20gKi8KLSNkZWZpbmUgRl9UWFNJWkVfUk5EICAoMTw8NikgIC8qIFRyYW5zbWl0IHNpemUgaXMgcmFuZG9tICovCi0jZGVmaW5lIEZfSVBWNiAgICAgICAgKDE8PDcpICAvKiBJbnRlcmZhY2UgaW4gSVBWNiBNb2RlICovCisjZGVmaW5lIEZfSVBTUkNfUk5EICAgKDE8PDApCS8qIElQLVNyYyBSYW5kb20gICovCisjZGVmaW5lIEZfSVBEU1RfUk5EICAgKDE8PDEpCS8qIElQLURzdCBSYW5kb20gICovCisjZGVmaW5lIEZfVURQU1JDX1JORCAgKDE8PDIpCS8qIFVEUC1TcmMgUmFuZG9tICovCisjZGVmaW5lIEZfVURQRFNUX1JORCAgKDE8PDMpCS8qIFVEUC1Ec3QgUmFuZG9tICovCisjZGVmaW5lIEZfTUFDU1JDX1JORCAgKDE8PDQpCS8qIE1BQy1TcmMgUmFuZG9tICovCisjZGVmaW5lIEZfTUFDRFNUX1JORCAgKDE8PDUpCS8qIE1BQy1Ec3QgUmFuZG9tICovCisjZGVmaW5lIEZfVFhTSVpFX1JORCAgKDE8PDYpCS8qIFRyYW5zbWl0IHNpemUgaXMgcmFuZG9tICovCisjZGVmaW5lIEZfSVBWNiAgICAgICAgKDE8PDcpCS8qIEludGVyZmFjZSBpbiBJUFY2IE1vZGUgKi8KKyNkZWZpbmUgRl9NUExTX1JORCAgICAoMTw8OCkJLyogUmFuZG9tIE1QTFMgbGFiZWxzICovCiAKIC8qIFRocmVhZCBjb250cm9sIGZsYWcgYml0cyAqLwotI2RlZmluZSBUX1RFUk1JTkFURSAgICgxPDwwKSAgCi0jZGVmaW5lIFRfU1RPUCAgICAgICAgKDE8PDEpICAvKiBTdG9wIHJ1biAqLwotI2RlZmluZSBUX1JVTiAgICAgICAgICgxPDwyKSAgLyogU3RhcnQgcnVuICovCi0jZGVmaW5lIFRfUkVNREVWICAgICAgKDE8PDMpICAvKiBSZW1vdmUgYWxsIGRldnMgKi8KLQotLyogTG9ja3MgKi8KLSNkZWZpbmUgICB0aHJlYWRfbG9jaygpICAgICAgICBkb3duKCZwa3RnZW5fc2VtKQotI2RlZmluZSAgIHRocmVhZF91bmxvY2soKSAgICAgIHVwKCZwa3RnZW5fc2VtKQorI2RlZmluZSBUX1RFUk1JTkFURSAgICgxPDwwKQorI2RlZmluZSBUX1NUT1AgICAgICAgICgxPDwxKQkvKiBTdG9wIHJ1biAqLworI2RlZmluZSBUX1JVTiAgICAgICAgICgxPDwyKQkvKiBTdGFydCBydW4gKi8KKyNkZWZpbmUgVF9SRU1ERVZBTEwgICAoMTw8MykJLyogUmVtb3ZlIGFsbCBkZXZzICovCisjZGVmaW5lIFRfUkVNREVWICAgICAgKDE8PDQpCS8qIFJlbW92ZSBvbmUgZGV2ICovCiAKIC8qIElmIGxvY2sgLS0gY2FuIGJlIHJlbW92ZWQgYWZ0ZXIgc29tZSB3b3JrICovCiAjZGVmaW5lICAgaWZfbG9jayh0KSAgICAgICAgICAgc3Bpbl9sb2NrKCYodC0+aWZfbG9jaykpOwpAQCAtMTk0LDEwICsxOTgsOSBAQAogCiAjZGVmaW5lIE1BWF9DRkxPV1MgIDY1NTM2CiAKLXN0cnVjdCBmbG93X3N0YXRlCi17Ci0JX191MzIJCWN1cl9kYWRkcjsKLQlpbnQJCWNvdW50Oworc3RydWN0IGZsb3dfc3RhdGUgeworCV9fdTMyIGN1cl9kYWRkcjsKKwlpbnQgY291bnQ7CiB9OwogCiBzdHJ1Y3QgcGt0Z2VuX2RldiB7CkBAIC0yMDYsMTQxICsyMDksMTQ4IEBACiAJICogVHJ5IHRvIGtlZXAgZnJlcXVlbnQvaW5mcmVxdWVudCB1c2VkIHZhcnMuIHNlcGFyYXRlZC4KIAkgKi8KIAotICAgICAgICBjaGFyIGlmbmFtZVtJRk5BTVNJWl07Ci0gICAgICAgIGNoYXIgcmVzdWx0WzUxMl07CisJY2hhciBpZm5hbWVbSUZOQU1TSVpdOworCWNoYXIgcmVzdWx0WzUxMl07CiAKLSAgICAgICAgc3RydWN0IHBrdGdlbl90aHJlYWQqIHBnX3RocmVhZDsgLyogdGhlIG93bmVyICovCi0gICAgICAgIHN0cnVjdCBwa3RnZW5fZGV2ICpuZXh0OyAvKiBVc2VkIGZvciBjaGFpbmluZyBpbiB0aGUgdGhyZWFkJ3MgcnVuLXF1ZXVlICovCisJc3RydWN0IHBrdGdlbl90aHJlYWQgKnBnX3RocmVhZDsJLyogdGhlIG93bmVyICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogVXNlZCBmb3IgY2hhaW5pbmcgaW4gdGhlIHRocmVhZCdzIHJ1bi1xdWV1ZSAqLwogCi0gICAgICAgIGludCBydW5uaW5nOyAgLyogaWYgdGhpcyBjaGFuZ2VzIHRvIGZhbHNlLCB0aGUgdGVzdCB3aWxsIHN0b3AgKi8KLSAgICAgICAgCi0gICAgICAgIC8qIElmIG1pbiAhPSBtYXgsIHRoZW4gd2Ugd2lsbCBlaXRoZXIgZG8gYSBsaW5lYXIgaXRlcmF0aW9uLCBvcgotICAgICAgICAgKiB3ZSB3aWxsIGRvIGEgcmFuZG9tIHNlbGVjdGlvbiBmcm9tIHdpdGhpbiB0aGUgcmFuZ2UuCi0gICAgICAgICAqLwotICAgICAgICBfX3UzMiBmbGFnczsgICAgIAorCWludCBydW5uaW5nOwkJLyogaWYgdGhpcyBjaGFuZ2VzIHRvIGZhbHNlLCB0aGUgdGVzdCB3aWxsIHN0b3AgKi8KIAotICAgICAgICBpbnQgbWluX3BrdF9zaXplOyAgICAvKiA9IEVUSF9aTEVOOyAqLwotICAgICAgICBpbnQgbWF4X3BrdF9zaXplOyAgICAvKiA9IEVUSF9aTEVOOyAqLwotICAgICAgICBpbnQgbmZyYWdzOwotICAgICAgICBfX3UzMiBkZWxheV91czsgICAgLyogRGVmYXVsdCBkZWxheSAqLwotICAgICAgICBfX3UzMiBkZWxheV9uczsKLSAgICAgICAgX191NjQgY291bnQ7ICAvKiBEZWZhdWx0IE5vIHBhY2tldHMgdG8gc2VuZCAqLwotICAgICAgICBfX3U2NCBzb2ZhcjsgIC8qIEhvdyBtYW55IHBrdHMgd2UndmUgc2VudCBzbyBmYXIgKi8KLSAgICAgICAgX191NjQgdHhfYnl0ZXM7IC8qIEhvdyBtYW55IGJ5dGVzIHdlJ3ZlIHRyYW5zbWl0dGVkICovCi0gICAgICAgIF9fdTY0IGVycm9yczsgICAgLyogRXJyb3JzIHdoZW4gdHJ5aW5nIHRvIHRyYW5zbWl0LCBwa3RzIHdpbGwgYmUgcmUtc2VudCAqLworCS8qIElmIG1pbiAhPSBtYXgsIHRoZW4gd2Ugd2lsbCBlaXRoZXIgZG8gYSBsaW5lYXIgaXRlcmF0aW9uLCBvcgorCSAqIHdlIHdpbGwgZG8gYSByYW5kb20gc2VsZWN0aW9uIGZyb20gd2l0aGluIHRoZSByYW5nZS4KKwkgKi8KKwlfX3UzMiBmbGFnczsKKwlpbnQgcmVtb3ZhbF9tYXJrOwkvKiBub24temVybyA9PiB0aGUgZGV2aWNlIGlzIG1hcmtlZCBmb3IKKwkJCQkgKiByZW1vdmFsIGJ5IHdvcmtlciB0aHJlYWQgKi8KIAotICAgICAgICAvKiBydW50aW1lIGNvdW50ZXJzIHJlbGF0aW5nIHRvIGNsb25lX3NrYiAqLwotICAgICAgICBfX3U2NCBuZXh0X3R4X3VzOyAgICAgICAgICAvKiB0aW1lc3RhbXAgb2Ygd2hlbiB0byB0eCBuZXh0ICovCi0gICAgICAgIF9fdTMyIG5leHRfdHhfbnM7Ci0gICAgICAgIAotICAgICAgICBfX3U2NCBhbGxvY2F0ZWRfc2ticzsKLSAgICAgICAgX191MzIgY2xvbmVfY291bnQ7Ci0JaW50IGxhc3Rfb2s7ICAgICAgICAgICAvKiBXYXMgbGFzdCBza2Igc2VudD8gCi0JICAgICAgICAgICAgICAgICAgICAgICAgKiBPciBhIGZhaWxlZCB0cmFuc21pdCBvZiBzb21lIHNvcnQ/ICBUaGlzIHdpbGwga2VlcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNlcXVlbmNlIG51bWJlcnMgaW4gb3JkZXIsIGZvciBleGFtcGxlLgotCQkJCSovCi0gICAgICAgIF9fdTY0IHN0YXJ0ZWRfYXQ7IC8qIG1pY3JvLXNlY29uZHMgKi8KLSAgICAgICAgX191NjQgc3RvcHBlZF9hdDsgLyogbWljcm8tc2Vjb25kcyAqLwotICAgICAgICBfX3U2NCBpZGxlX2FjYzsgLyogbWljcm8tc2Vjb25kcyAqLwotICAgICAgICBfX3UzMiBzZXFfbnVtOwotICAgICAgICAKLSAgICAgICAgaW50IGNsb25lX3NrYjsgLyogVXNlIG11bHRpcGxlIFNLQnMgZHVyaW5nIHBhY2tldCBnZW4uICBJZiB0aGlzIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHRoYXQgbWFueSBjb3BpZXMgb2YgdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwYWNrZXQgd2lsbCBiZSBzZW50IGJlZm9yZSBhIG5ldyBwYWNrZXQgaXMgYWxsb2NhdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZvciBpbnN0YW5jZSwgaWYgeW91IHdhbnQgdG8gc2VuZCAxMDI0IGlkZW50aWNhbCBwYWNrZXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICogYmVmb3JlIGNyZWF0aW5nIGEgbmV3IHBhY2tldCwgc2V0IGNsb25lX3NrYiB0byAxMDI0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAKLSAgICAgICAgY2hhciBkc3RfbWluW0lQX05BTUVfU1pdOyAvKiBJUCwgaWUgMS4yLjMuNCAqLwotICAgICAgICBjaGFyIGRzdF9tYXhbSVBfTkFNRV9TWl07IC8qIElQLCBpZSAxLjIuMy40ICovCi0gICAgICAgIGNoYXIgc3JjX21pbltJUF9OQU1FX1NaXTsgLyogSVAsIGllIDEuMi4zLjQgKi8KLSAgICAgICAgY2hhciBzcmNfbWF4W0lQX05BTUVfU1pdOyAvKiBJUCwgaWUgMS4yLjMuNCAqLworCWludCBtaW5fcGt0X3NpemU7CS8qID0gRVRIX1pMRU47ICovCisJaW50IG1heF9wa3Rfc2l6ZTsJLyogPSBFVEhfWkxFTjsgKi8KKwlpbnQgbmZyYWdzOworCV9fdTMyIGRlbGF5X3VzOwkJLyogRGVmYXVsdCBkZWxheSAqLworCV9fdTMyIGRlbGF5X25zOworCV9fdTY0IGNvdW50OwkJLyogRGVmYXVsdCBObyBwYWNrZXRzIHRvIHNlbmQgKi8KKwlfX3U2NCBzb2ZhcjsJCS8qIEhvdyBtYW55IHBrdHMgd2UndmUgc2VudCBzbyBmYXIgKi8KKwlfX3U2NCB0eF9ieXRlczsJCS8qIEhvdyBtYW55IGJ5dGVzIHdlJ3ZlIHRyYW5zbWl0dGVkICovCisJX191NjQgZXJyb3JzOwkJLyogRXJyb3JzIHdoZW4gdHJ5aW5nIHRvIHRyYW5zbWl0LCBwa3RzIHdpbGwgYmUgcmUtc2VudCAqLwogCi0Jc3RydWN0IGluNl9hZGRyICBpbjZfc2FkZHI7Ci0Jc3RydWN0IGluNl9hZGRyICBpbjZfZGFkZHI7Ci0Jc3RydWN0IGluNl9hZGRyICBjdXJfaW42X2RhZGRyOwotCXN0cnVjdCBpbjZfYWRkciAgY3VyX2luNl9zYWRkcjsKKwkvKiBydW50aW1lIGNvdW50ZXJzIHJlbGF0aW5nIHRvIGNsb25lX3NrYiAqLworCV9fdTY0IG5leHRfdHhfdXM7CS8qIHRpbWVzdGFtcCBvZiB3aGVuIHRvIHR4IG5leHQgKi8KKwlfX3UzMiBuZXh0X3R4X25zOworCisJX191NjQgYWxsb2NhdGVkX3NrYnM7CisJX191MzIgY2xvbmVfY291bnQ7CisJaW50IGxhc3Rfb2s7CQkvKiBXYXMgbGFzdCBza2Igc2VudD8KKwkJCQkgKiBPciBhIGZhaWxlZCB0cmFuc21pdCBvZiBzb21lIHNvcnQ/ICBUaGlzIHdpbGwga2VlcAorCQkJCSAqIHNlcXVlbmNlIG51bWJlcnMgaW4gb3JkZXIsIGZvciBleGFtcGxlLgorCQkJCSAqLworCV9fdTY0IHN0YXJ0ZWRfYXQ7CS8qIG1pY3JvLXNlY29uZHMgKi8KKwlfX3U2NCBzdG9wcGVkX2F0OwkvKiBtaWNyby1zZWNvbmRzICovCisJX191NjQgaWRsZV9hY2M7CQkvKiBtaWNyby1zZWNvbmRzICovCisJX191MzIgc2VxX251bTsKKworCWludCBjbG9uZV9za2I7CQkvKiBVc2UgbXVsdGlwbGUgU0tCcyBkdXJpbmcgcGFja2V0IGdlbi4gIElmIHRoaXMgbnVtYmVyCisJCQkJICogaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gdGhhdCBtYW55IGNvcGllcyBvZiB0aGUgc2FtZQorCQkJCSAqIHBhY2tldCB3aWxsIGJlIHNlbnQgYmVmb3JlIGEgbmV3IHBhY2tldCBpcyBhbGxvY2F0ZWQuCisJCQkJICogRm9yIGluc3RhbmNlLCBpZiB5b3Ugd2FudCB0byBzZW5kIDEwMjQgaWRlbnRpY2FsIHBhY2tldHMKKwkJCQkgKiBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgcGFja2V0LCBzZXQgY2xvbmVfc2tiIHRvIDEwMjQuCisJCQkJICovCisKKwljaGFyIGRzdF9taW5bSVBfTkFNRV9TWl07CS8qIElQLCBpZSAxLjIuMy40ICovCisJY2hhciBkc3RfbWF4W0lQX05BTUVfU1pdOwkvKiBJUCwgaWUgMS4yLjMuNCAqLworCWNoYXIgc3JjX21pbltJUF9OQU1FX1NaXTsJLyogSVAsIGllIDEuMi4zLjQgKi8KKwljaGFyIHNyY19tYXhbSVBfTkFNRV9TWl07CS8qIElQLCBpZSAxLjIuMy40ICovCisKKwlzdHJ1Y3QgaW42X2FkZHIgaW42X3NhZGRyOworCXN0cnVjdCBpbjZfYWRkciBpbjZfZGFkZHI7CisJc3RydWN0IGluNl9hZGRyIGN1cl9pbjZfZGFkZHI7CisJc3RydWN0IGluNl9hZGRyIGN1cl9pbjZfc2FkZHI7CiAJLyogRm9yIHJhbmdlcyAqLwotCXN0cnVjdCBpbjZfYWRkciAgbWluX2luNl9kYWRkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgIG1heF9pbjZfZGFkZHI7Ci0Jc3RydWN0IGluNl9hZGRyICBtaW5faW42X3NhZGRyOwotCXN0cnVjdCBpbjZfYWRkciAgbWF4X2luNl9zYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgbWluX2luNl9kYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgbWF4X2luNl9kYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgbWluX2luNl9zYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgbWF4X2luNl9zYWRkcjsKIAotICAgICAgICAvKiBJZiB3ZSdyZSBkb2luZyByYW5nZXMsIHJhbmRvbSBvciBpbmNyZW1lbnRhbCwgdGhlbiB0aGlzCi0gICAgICAgICAqIGRlZmluZXMgdGhlIG1pbi9tYXggZm9yIHRob3NlIHJhbmdlcy4KLSAgICAgICAgICovCi0gICAgICAgIF9fdTMyIHNhZGRyX21pbjsgLyogaW5jbHVzaXZlLCBzb3VyY2UgSVAgYWRkcmVzcyAqLwotICAgICAgICBfX3UzMiBzYWRkcl9tYXg7IC8qIGV4Y2x1c2l2ZSwgc291cmNlIElQIGFkZHJlc3MgKi8KLSAgICAgICAgX191MzIgZGFkZHJfbWluOyAvKiBpbmNsdXNpdmUsIGRlc3QgSVAgYWRkcmVzcyAqLwotICAgICAgICBfX3UzMiBkYWRkcl9tYXg7IC8qIGV4Y2x1c2l2ZSwgZGVzdCBJUCBhZGRyZXNzICovCisJLyogSWYgd2UncmUgZG9pbmcgcmFuZ2VzLCByYW5kb20gb3IgaW5jcmVtZW50YWwsIHRoZW4gdGhpcworCSAqIGRlZmluZXMgdGhlIG1pbi9tYXggZm9yIHRob3NlIHJhbmdlcy4KKwkgKi8KKwlfX3UzMiBzYWRkcl9taW47CS8qIGluY2x1c2l2ZSwgc291cmNlIElQIGFkZHJlc3MgKi8KKwlfX3UzMiBzYWRkcl9tYXg7CS8qIGV4Y2x1c2l2ZSwgc291cmNlIElQIGFkZHJlc3MgKi8KKwlfX3UzMiBkYWRkcl9taW47CS8qIGluY2x1c2l2ZSwgZGVzdCBJUCBhZGRyZXNzICovCisJX191MzIgZGFkZHJfbWF4OwkvKiBleGNsdXNpdmUsIGRlc3QgSVAgYWRkcmVzcyAqLwogCi0gICAgICAgIF9fdTE2IHVkcF9zcmNfbWluOyAvKiBpbmNsdXNpdmUsIHNvdXJjZSBVRFAgcG9ydCAqLwotICAgICAgICBfX3UxNiB1ZHBfc3JjX21heDsgLyogZXhjbHVzaXZlLCBzb3VyY2UgVURQIHBvcnQgKi8KLSAgICAgICAgX191MTYgdWRwX2RzdF9taW47IC8qIGluY2x1c2l2ZSwgZGVzdCBVRFAgcG9ydCAqLwotICAgICAgICBfX3UxNiB1ZHBfZHN0X21heDsgLyogZXhjbHVzaXZlLCBkZXN0IFVEUCBwb3J0ICovCisJX191MTYgdWRwX3NyY19taW47CS8qIGluY2x1c2l2ZSwgc291cmNlIFVEUCBwb3J0ICovCisJX191MTYgdWRwX3NyY19tYXg7CS8qIGV4Y2x1c2l2ZSwgc291cmNlIFVEUCBwb3J0ICovCisJX191MTYgdWRwX2RzdF9taW47CS8qIGluY2x1c2l2ZSwgZGVzdCBVRFAgcG9ydCAqLworCV9fdTE2IHVkcF9kc3RfbWF4OwkvKiBleGNsdXNpdmUsIGRlc3QgVURQIHBvcnQgKi8KIAotICAgICAgICBfX3UzMiBzcmNfbWFjX2NvdW50OyAvKiBIb3cgbWFueSBNQUNzIHRvIGl0ZXJhdGUgdGhyb3VnaCAqLwotICAgICAgICBfX3UzMiBkc3RfbWFjX2NvdW50OyAvKiBIb3cgbWFueSBNQUNzIHRvIGl0ZXJhdGUgdGhyb3VnaCAqLwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY2hhciBkc3RfbWFjW0VUSF9BTEVOXTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBzcmNfbWFjW0VUSF9BTEVOXTsKLSAgICAgICAgCi0gICAgICAgIF9fdTMyIGN1cl9kc3RfbWFjX29mZnNldDsKLSAgICAgICAgX191MzIgY3VyX3NyY19tYWNfb2Zmc2V0OwotICAgICAgICBfX3UzMiBjdXJfc2FkZHI7Ci0gICAgICAgIF9fdTMyIGN1cl9kYWRkcjsKLSAgICAgICAgX191MTYgY3VyX3VkcF9kc3Q7Ci0gICAgICAgIF9fdTE2IGN1cl91ZHBfc3JjOwotICAgICAgICBfX3UzMiBjdXJfcGt0X3NpemU7Ci0gICAgICAgIAotICAgICAgICBfX3U4IGhoWzE0XTsKLSAgICAgICAgLyogPSB7IAotICAgICAgICAgICAweDAwLCAweDgwLCAweEM4LCAweDc5LCAweEIzLCAweENCLCAKLSAgICAgICAgICAgCi0gICAgICAgICAgIFdlIGZpbGwgaW4gU1JDIGFkZHJlc3MgbGF0ZXIKLSAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgICAgMHgwOCwgMHgwMAotICAgICAgICAgICB9OwotICAgICAgICAqLwotICAgICAgICBfX3UxNiBwYWQ7IC8qIHBhZCBvdXQgdGhlIGhoIHN0cnVjdCB0byBhbiBldmVuIDE2IGJ5dGVzICovCisJLyogTVBMUyAqLworCXVuc2lnbmVkIG5yX2xhYmVsczsJLyogRGVwdGggb2Ygc3RhY2ssIDAgPSBubyBNUExTICovCisJX19iZTMyIGxhYmVsc1tNQVhfTVBMU19MQUJFTFNdOwogCi0gICAgICAgIHN0cnVjdCBza19idWZmKiBza2I7IC8qIHNrYiB3ZSBhcmUgdG8gdHJhbnNtaXQgbmV4dCwgbWFpbmx5IHVzZWQgZm9yIHdoZW4gd2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYXJlIHRyYW5zbWl0dGluZyB0aGUgc2FtZSBvbmUgbXVsdGlwbGUgdGltZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlKiBvZGV2OyAvKiBUaGUgb3V0LWdvaW5nIGRldmljZS4gIE5vdGUgdGhhdCB0aGUgZGV2aWNlIHNob3VsZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaGF2ZSBpdCdzIHBnX2luZm8gcG9pbnRlciBwb2ludGluZyBiYWNrIHRvIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRldmljZS4gIFRoaXMgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBzcGVjaWZpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBvdXQtZ29pbmcgZGV2aWNlIG5hbWUgKG5vdCB3aGVuIHRoZSBpbmplY3QgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0YXJ0ZWQgYXMgaXQgdXNlZCB0byBkby4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlfX3UzMiBzcmNfbWFjX2NvdW50OwkvKiBIb3cgbWFueSBNQUNzIHRvIGl0ZXJhdGUgdGhyb3VnaCAqLworCV9fdTMyIGRzdF9tYWNfY291bnQ7CS8qIEhvdyBtYW55IE1BQ3MgdG8gaXRlcmF0ZSB0aHJvdWdoICovCisKKwl1bnNpZ25lZCBjaGFyIGRzdF9tYWNbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgc3JjX21hY1tFVEhfQUxFTl07CisKKwlfX3UzMiBjdXJfZHN0X21hY19vZmZzZXQ7CisJX191MzIgY3VyX3NyY19tYWNfb2Zmc2V0OworCV9fdTMyIGN1cl9zYWRkcjsKKwlfX3UzMiBjdXJfZGFkZHI7CisJX191MTYgY3VyX3VkcF9kc3Q7CisJX191MTYgY3VyX3VkcF9zcmM7CisJX191MzIgY3VyX3BrdF9zaXplOworCisJX191OCBoaFsxNF07CisJLyogPSB7CisJICAgMHgwMCwgMHg4MCwgMHhDOCwgMHg3OSwgMHhCMywgMHhDQiwKKworCSAgIFdlIGZpbGwgaW4gU1JDIGFkZHJlc3MgbGF0ZXIKKwkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCSAgIDB4MDgsIDB4MDAKKwkgICB9OworCSAqLworCV9fdTE2IHBhZDsJCS8qIHBhZCBvdXQgdGhlIGhoIHN0cnVjdCB0byBhbiBldmVuIDE2IGJ5dGVzICovCisKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwkvKiBza2Igd2UgYXJlIHRvIHRyYW5zbWl0IG5leHQsIG1haW5seSB1c2VkIGZvciB3aGVuIHdlCisJCQkJICogYXJlIHRyYW5zbWl0dGluZyB0aGUgc2FtZSBvbmUgbXVsdGlwbGUgdGltZXMKKwkJCQkgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldjsJLyogVGhlIG91dC1nb2luZyBkZXZpY2UuICBOb3RlIHRoYXQgdGhlIGRldmljZSBzaG91bGQKKwkJCQkJICogaGF2ZSBpdCdzIHBnX2luZm8gcG9pbnRlciBwb2ludGluZyBiYWNrIHRvIHRoaXMKKwkJCQkJICogZGV2aWNlLiAgVGhpcyB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcworCQkJCQkgKiB0aGUgb3V0LWdvaW5nIGRldmljZSBuYW1lIChub3Qgd2hlbiB0aGUgaW5qZWN0IGlzCisJCQkJCSAqIHN0YXJ0ZWQgYXMgaXQgdXNlZCB0byBkby4pCisJCQkJCSAqLwogCXN0cnVjdCBmbG93X3N0YXRlICpmbG93czsKLQl1bnNpZ25lZCBjZmxvd3M7ICAgICAgICAgLyogQ29uY3VycmVudCBmbG93cyAoY29uZmlnKSAqLwotCXVuc2lnbmVkIGxmbG93OyAgICAgICAgICAvKiBGbG93IGxlbmd0aCAgKGNvbmZpZykgKi8KLQl1bnNpZ25lZCBuZmxvd3M7ICAgICAgICAgLyogYWNjdW11bGF0ZWQgZmxvd3MgKHN0YXRzKSAqLworCXVuc2lnbmVkIGNmbG93czsJLyogQ29uY3VycmVudCBmbG93cyAoY29uZmlnKSAqLworCXVuc2lnbmVkIGxmbG93OwkJLyogRmxvdyBsZW5ndGggIChjb25maWcpICovCisJdW5zaWduZWQgbmZsb3dzOwkvKiBhY2N1bXVsYXRlZCBmbG93cyAoc3RhdHMpICovCiB9OwogCiBzdHJ1Y3QgcGt0Z2VuX2hkciB7Ci0gICAgICAgIF9fdTMyIHBnaF9tYWdpYzsKLSAgICAgICAgX191MzIgc2VxX251bTsKKwlfX3UzMiBwZ2hfbWFnaWM7CisJX191MzIgc2VxX251bTsKIAlfX3UzMiB0dl9zZWM7CiAJX191MzIgdHZfdXNlYzsKIH07CiAKIHN0cnVjdCBwa3RnZW5fdGhyZWFkIHsKLSAgICAgICAgc3BpbmxvY2tfdCBpZl9sb2NrOwotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqaWZfbGlzdDsgICAgICAgICAgIC8qIEFsbCBkZXZpY2UgaGVyZSAqLwotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX3RocmVhZCogbmV4dDsKLSAgICAgICAgY2hhciBuYW1lWzMyXTsKLSAgICAgICAgY2hhciByZXN1bHRbNTEyXTsKLSAgICAgICAgdTMyIG1heF9iZWZvcmVfc29mdGlycTsgLyogV2UnbGwgY2FsbCBkb19zb2Z0aXJxIHRvIHByZXZlbnQgc3RhcnZhdGlvbi4gKi8KLSAgICAgICAgCi0JLyogRmllbGQgZm9yIHRocmVhZCB0byByZWNlaXZlICJwb3N0ZWQiIGV2ZW50cyB0ZXJtaW5hdGUsIHN0b3AgaWZzIGV0Yy4qLworCXNwaW5sb2NrX3QgaWZfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlmX2xpc3Q7CS8qIEFsbCBkZXZpY2UgaGVyZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdGhfbGlzdDsKKwlpbnQgcmVtb3ZlZDsKKwljaGFyIG5hbWVbMzJdOworCWNoYXIgcmVzdWx0WzUxMl07CisJdTMyIG1heF9iZWZvcmVfc29mdGlycTsJLyogV2UnbGwgY2FsbCBkb19zb2Z0aXJxIHRvIHByZXZlbnQgc3RhcnZhdGlvbi4gKi8KIAotICAgICAgICB1MzIgY29udHJvbDsKKwkvKiBGaWVsZCBmb3IgdGhyZWFkIHRvIHJlY2VpdmUgInBvc3RlZCIgZXZlbnRzIHRlcm1pbmF0ZSwgc3RvcCBpZnMgZXRjLiAqLworCisJdTMyIGNvbnRyb2w7CiAJaW50IHBpZDsKIAlpbnQgY3B1OwogCi0gICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOworCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOwogfTsKIAogI2RlZmluZSBSRU1PVkUgMQpAQCAtMzY0LDc3ICszNzQsNzYgQEAKICAqLwogc3RhdGljIGlubGluZSBzNjQgZGl2cmVtZGkzKHM2NCB4LCBzNjQgeSwgaW50IHR5cGUpCiB7Ci0gICAgICAgIHU2NCBhID0gKHggPCAwKSA/IC14IDogeDsKLSAgICAgICAgdTY0IGIgPSAoeSA8IDApID8gLXkgOiB5OwotICAgICAgICB1NjQgcmVzID0gMCwgZCA9IDE7CisJdTY0IGEgPSAoeCA8IDApID8gLXggOiB4OworCXU2NCBiID0gKHkgPCAwKSA/IC15IDogeTsKKwl1NjQgcmVzID0gMCwgZCA9IDE7CiAKLSAgICAgICAgaWYgKGIgPiAwKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGIgPCBhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiIDw8PSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgZCA8PD0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoIGEgPj0gYiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGEgLT0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSBkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiID4+PSAxOwotICAgICAgICAgICAgICAgIGQgPj49IDE7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGQpOworCWlmIChiID4gMCkgeworCQl3aGlsZSAoYiA8IGEpIHsKKwkJCWIgPDw9IDE7CisJCQlkIDw8PSAxOworCQl9CisJfQogCi0gICAgICAgIGlmIChQR19ESVYgPT0gdHlwZSkgewotICAgICAgICAgICAgICAgIHJldHVybiAoKCh4IF4geSkgJiAoMWxsPDw2MykpID09IDApID8gcmVzIDogLShzNjQpcmVzOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiAoKHggJiAoMWxsPDw2MykpID09IDApID8gYSA6IC0oczY0KWE7Ci0gICAgICAgIH0KKwlkbyB7CisJCWlmIChhID49IGIpIHsKKwkJCWEgLT0gYjsKKwkJCXJlcyArPSBkOworCQl9CisJCWIgPj49IDE7CisJCWQgPj49IDE7CisJfQorCXdoaWxlIChkKTsKKworCWlmIChQR19ESVYgPT0gdHlwZSkgeworCQlyZXR1cm4gKCgoeCBeIHkpICYgKDFsbCA8PCA2MykpID09IDApID8gcmVzIDogLShzNjQpIHJlczsKKwl9IGVsc2UgeworCQlyZXR1cm4gKCh4ICYgKDFsbCA8PCA2MykpID09IDApID8gYSA6IC0oczY0KSBhOworCX0KIH0KIAogLyogRW5kIG9mIGhhY2tzIHRvIGRlYWwgd2l0aCA2NC1iaXQgbWF0aCBvbiB4ODYgKi8KIAogLyoqIENvbnZlcnQgdG8gbWlsbGlzZWNvbmRzICovCi1zdGF0aWMgaW5saW5lIF9fdTY0IHR2X3RvX21zKGNvbnN0IHN0cnVjdCB0aW1ldmFsKiB0dikgCitzdGF0aWMgaW5saW5lIF9fdTY0IHR2X3RvX21zKGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0dikKIHsKLSAgICAgICAgX191NjQgbXMgPSB0di0+dHZfdXNlYyAvIDEwMDA7Ci0gICAgICAgIG1zICs9IChfX3U2NCl0di0+dHZfc2VjICogKF9fdTY0KTEwMDA7Ci0gICAgICAgIHJldHVybiBtczsKKwlfX3U2NCBtcyA9IHR2LT50dl91c2VjIC8gMTAwMDsKKwltcyArPSAoX191NjQpIHR2LT50dl9zZWMgKiAoX191NjQpIDEwMDA7CisJcmV0dXJuIG1zOwogfQogCi0KIC8qKiBDb252ZXJ0IHRvIG1pY3JvLXNlY29uZHMgKi8KLXN0YXRpYyBpbmxpbmUgX191NjQgdHZfdG9fdXMoY29uc3Qgc3RydWN0IHRpbWV2YWwqIHR2KSAKK3N0YXRpYyBpbmxpbmUgX191NjQgdHZfdG9fdXMoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KQogewotICAgICAgICBfX3U2NCB1cyA9IHR2LT50dl91c2VjOwotICAgICAgICB1cyArPSAoX191NjQpdHYtPnR2X3NlYyAqIChfX3U2NCkxMDAwMDAwOwotICAgICAgICByZXR1cm4gdXM7CisJX191NjQgdXMgPSB0di0+dHZfdXNlYzsKKwl1cyArPSAoX191NjQpIHR2LT50dl9zZWMgKiAoX191NjQpIDEwMDAwMDA7CisJcmV0dXJuIHVzOwogfQogCi1zdGF0aWMgaW5saW5lIF9fdTY0IHBnX2RpdihfX3U2NCBuLCBfX3UzMiBiYXNlKSB7Ci0gICAgICAgIF9fdTY0IHRtcCA9IG47Ci0gICAgICAgIGRvX2Rpdih0bXAsIGJhc2UpOwotICAgICAgICAvKiBwcmludGsoInBrdGdlbjogcGdfZGl2LCBuOiAlbGx1ICBiYXNlOiAlZCAgcnY6ICVsbHVcbiIsCi0gICAgICAgICAgICAgICAgICBuLCBiYXNlLCB0bXApOyAqLwotICAgICAgICByZXR1cm4gdG1wOworc3RhdGljIGlubGluZSBfX3U2NCBwZ19kaXYoX191NjQgbiwgX191MzIgYmFzZSkKK3sKKwlfX3U2NCB0bXAgPSBuOworCWRvX2Rpdih0bXAsIGJhc2UpOworCS8qIHByaW50aygicGt0Z2VuOiBwZ19kaXYsIG46ICVsbHUgIGJhc2U6ICVkICBydjogJWxsdVxuIiwKKwkgICBuLCBiYXNlLCB0bXApOyAqLworCXJldHVybiB0bXA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191NjQgcGdfZGl2NjQoX191NjQgbiwgX191NjQgYmFzZSkgCitzdGF0aWMgaW5saW5lIF9fdTY0IHBnX2RpdjY0KF9fdTY0IG4sIF9fdTY0IGJhc2UpCiB7Ci0gICAgICAgIF9fdTY0IHRtcCA9IG47CisJX191NjQgdG1wID0gbjsKIC8qCiAgKiBIb3cgZG8gd2Uga25vdyBpZiB0aGUgYXJjaGl0ZWN0dXJlIHdlIGFyZSBydW5uaW5nIG9uCiAgKiBzdXBwb3J0cyBkaXZpc2lvbiB3aXRoIDY0IGJpdCBiYXNlPwogICogCiAgKi8KLSNpZiBkZWZpbmVkKF9fc3BhcmNfdjlfXykgfHwgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9faWE2NF9fKSAKKyNpZiBkZWZpbmVkKF9fc3BhcmNfdjlfXykgfHwgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9faWE2NF9fKQogCi0JCWRvX2Rpdih0bXAsIGJhc2UpOworCWRvX2Rpdih0bXAsIGJhc2UpOwogI2Vsc2UKLQkJdG1wID0gZGl2cmVtZGkzKG4sIGJhc2UsIFBHX0RJVik7CisJdG1wID0gZGl2cmVtZGkzKG4sIGJhc2UsIFBHX0RJVik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIHRtcDsKKwlyZXR1cm4gdG1wOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBwa3RnZW5fcmFuZG9tKHZvaWQpCkBAIC00NDgsNTEgKzQ1Nyw1MSBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgX191NjQgZ2V0Q3VyTXModm9pZCkgCitzdGF0aWMgaW5saW5lIF9fdTY0IGdldEN1ck1zKHZvaWQpCiB7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLSAgICAgICAgcmV0dXJuIHR2X3RvX21zKCZ0dik7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJcmV0dXJuIHR2X3RvX21zKCZ0dik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191NjQgZ2V0Q3VyVXModm9pZCkgCitzdGF0aWMgaW5saW5lIF9fdTY0IGdldEN1clVzKHZvaWQpCiB7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLSAgICAgICAgcmV0dXJuIHR2X3RvX3VzKCZ0dik7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJcmV0dXJuIHR2X3RvX3VzKCZ0dik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191NjQgdHZfZGlmZihjb25zdCBzdHJ1Y3QgdGltZXZhbCogYSwgY29uc3Qgc3RydWN0IHRpbWV2YWwqIGIpIAorc3RhdGljIGlubGluZSBfX3U2NCB0dl9kaWZmKGNvbnN0IHN0cnVjdCB0aW1ldmFsICphLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqYikKIHsKLSAgICAgICAgcmV0dXJuIHR2X3RvX3VzKGEpIC0gdHZfdG9fdXMoYik7CisJcmV0dXJuIHR2X3RvX3VzKGEpIC0gdHZfdG9fdXMoYik7CiB9CiAKLQogLyogb2xkIGluY2x1ZGUgZW5kICovCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gVkVSU0lPTjsKIAotc3RhdGljIGludCBwa3RnZW5fcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCogdCwgc3RydWN0IHBrdGdlbl9kZXYgKmkpOwotc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCogdCwgY29uc3QgY2hhciogaWZuYW1lKTsKLXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkKiB0LCBjb25zdCBjaGFyKiBpZm5hbWUpOworc3RhdGljIGludCBwa3RnZW5fcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgc3RydWN0IHBrdGdlbl9kZXYgKmkpOworc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciAqaWZuYW1lKTsKK3N0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAorCQkJCQkgIGNvbnN0IGNoYXIgKmlmbmFtZSk7CiBzdGF0aWMgaW50IHBrdGdlbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CiBzdGF0aWMgdm9pZCBwa3RnZW5fcnVuX2FsbF90aHJlYWRzKHZvaWQpOwogc3RhdGljIHZvaWQgcGt0Z2VuX3N0b3BfYWxsX3RocmVhZHNfaWZzKHZvaWQpOwogc3RhdGljIGludCBwa3RnZW5fc3RvcF9kZXZpY2Uoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpOwotc3RhdGljIHZvaWQgcGt0Z2VuX3N0b3Aoc3RydWN0IHBrdGdlbl90aHJlYWQqIHQpOworc3RhdGljIHZvaWQgcGt0Z2VuX3N0b3Aoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpOwogc3RhdGljIHZvaWQgcGt0Z2VuX2NsZWFyX2NvdW50ZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX05OX3RocmVhZHMoY29uc3QgY2hhciogZGV2X25hbWUsIGludCByZW1vdmUpOwotc3RhdGljIHVuc2lnbmVkIGludCBzY2FuX2lwNihjb25zdCBjaGFyICpzLGNoYXIgaXBbMTZdKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZm10X2lwNihjaGFyICpzLGNvbnN0IGNoYXIgaXBbMTZdKTsKK3N0YXRpYyBpbnQgcGt0Z2VuX21hcmtfZGV2aWNlKGNvbnN0IGNoYXIgKmlmbmFtZSk7CitzdGF0aWMgdW5zaWduZWQgaW50IHNjYW5faXA2KGNvbnN0IGNoYXIgKnMsIGNoYXIgaXBbMTZdKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZm10X2lwNihjaGFyICpzLCBjb25zdCBjaGFyIGlwWzE2XSk7CiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzLCBkZWZhdWx0cy4gKi8KLXN0YXRpYyBpbnQgcGdfY291bnRfZCA9IDEwMDA7IC8qIDEwMDAgcGt0cyBieSBkZWZhdWx0ICovCitzdGF0aWMgaW50IHBnX2NvdW50X2QgPSAxMDAwOwkvKiAxMDAwIHBrdHMgYnkgZGVmYXVsdCAqLwogc3RhdGljIGludCBwZ19kZWxheV9kOwogc3RhdGljIGludCBwZ19jbG9uZV9za2JfZDsKIHN0YXRpYyBpbnQgZGVidWc7CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKHBrdGdlbl9zZW0pOwotc3RhdGljIHN0cnVjdCBwa3RnZW5fdGhyZWFkICpwa3RnZW5fdGhyZWFkcyA9IE5VTEw7CitzdGF0aWMgREVGSU5FX01VVEVYKHBrdGdlbl90aHJlYWRfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHBrdGdlbl90aHJlYWRzKTsKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwa3RnZW5fbm90aWZpZXJfYmxvY2sgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBwa3RnZW5fZGV2aWNlX2V2ZW50LApAQCAtNTA0LDIxICs1MTMsMjEgQEAKICAqLwogCiBzdGF0aWMgaW50IHBnY3RybF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoteyAKK3sKIAlzZXFfcHV0cyhzZXEsIFZFUlNJT04pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBwZ2N0cmxfd3JpdGUoc3RydWN0IGZpbGUqIGZpbGUsY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBwZ2N0cmxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKIHsKIAlpbnQgZXJyID0gMDsKIAljaGFyIGRhdGFbMTI4XTsKIAotICAgICAgICBpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpewotICAgICAgICAgICAgICAgIGVyciA9IC1FUEVSTTsKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJZXJyID0gLUVQRVJNOwogCQlnb3RvIG91dDsKLSAgICAgICAgfQorCX0KIAogCWlmIChjb3VudCA+IHNpemVvZihkYXRhKSkKIAkJY291bnQgPSBzaXplb2YoZGF0YSk7CkBAIC01MjYsMjIgKzUzNSwyMiBAQAogCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBidWYsIGNvdW50KSkgewogCQllcnIgPSAtRUZBVUxUOwogCQlnb3RvIG91dDsKLQl9ICAKLQlkYXRhW2NvdW50LTFdID0gMDsgLyogTWFrZSBzdHJpbmcgKi8KKwl9CisJZGF0YVtjb3VudCAtIDFdID0gMDsJLyogTWFrZSBzdHJpbmcgKi8KIAotCWlmICghc3RyY21wKGRhdGEsICJzdG9wIikpIAorCWlmICghc3RyY21wKGRhdGEsICJzdG9wIikpCiAJCXBrdGdlbl9zdG9wX2FsbF90aHJlYWRzX2lmcygpOwogCi0gICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoZGF0YSwgInN0YXJ0IikpIAorCWVsc2UgaWYgKCFzdHJjbXAoZGF0YSwgInN0YXJ0IikpCiAJCXBrdGdlbl9ydW5fYWxsX3RocmVhZHMoKTsKIAotCWVsc2UgCisJZWxzZQogCQlwcmludGsoInBrdGdlbjogVW5rbm93biBjb21tYW5kOiAlc1xuIiwgZGF0YSk7CiAKIAllcnIgPSBjb3VudDsKIAotIG91dDoKLSAgICAgICAgcmV0dXJuIGVycjsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHBnY3RybF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtNTUwLDE0NyArNTU5LDE5NCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwa3RnZW5fZm9wcyA9IHsKLQkub3duZXIJICA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSAgPSBwZ2N0cmxfb3BlbiwKLSAgICAgICAgLnJlYWQgICAgID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgID0gc2VxX2xzZWVrLAotICAgICAgICAud3JpdGUgICAgPSBwZ2N0cmxfd3JpdGUsCi0JLnJlbGVhc2UgID0gc2luZ2xlX3JlbGVhc2UsCisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICA9IHBnY3RybF9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLndyaXRlICAgPSBwZ2N0cmxfd3JpdGUsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgcGt0Z2VuX2lmX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJaW50IGk7Ci0gICAgICAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gc2VxLT5wcml2YXRlOwotICAgICAgICBfX3U2NCBzYTsKLSAgICAgICAgX191NjQgc3RvcHBlZDsKLSAgICAgICAgX191NjQgbm93ID0gZ2V0Q3VyVXMoKTsKLSAgICAgICAgCi0Jc2VxX3ByaW50ZihzZXEsICJQYXJhbXM6IGNvdW50ICVsbHUgIG1pbl9wa3Rfc2l6ZTogJXUgIG1heF9wa3Rfc2l6ZTogJXVcbiIsCi0JCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtPmNvdW50LAotCQkgICBwa3RfZGV2LT5taW5fcGt0X3NpemUsIHBrdF9kZXYtPm1heF9wa3Rfc2l6ZSk7CisJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtPnByaXZhdGU7CisJX191NjQgc2E7CisJX191NjQgc3RvcHBlZDsKKwlfX3U2NCBub3cgPSBnZXRDdXJVcygpOwogCi0Jc2VxX3ByaW50ZihzZXEsICIgICAgIGZyYWdzOiAlZCAgZGVsYXk6ICV1ICBjbG9uZV9za2I6ICVkICBpZm5hbWU6ICVzXG4iLAotCQkgICBwa3RfZGV2LT5uZnJhZ3MsIDEwMDAqcGt0X2Rldi0+ZGVsYXlfdXMrcGt0X2Rldi0+ZGVsYXlfbnMsIHBrdF9kZXYtPmNsb25lX3NrYiwgcGt0X2Rldi0+aWZuYW1lKTsKKwlzZXFfcHJpbnRmKHNlcSwKKwkJICAgIlBhcmFtczogY291bnQgJWxsdSAgbWluX3BrdF9zaXplOiAldSAgbWF4X3BrdF9zaXplOiAldVxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LT5jb3VudCwgcGt0X2Rldi0+bWluX3BrdF9zaXplLAorCQkgICBwa3RfZGV2LT5tYXhfcGt0X3NpemUpOwogCi0Jc2VxX3ByaW50ZihzZXEsICIgICAgIGZsb3dzOiAldSBmbG93bGVuOiAldVxuIiwgcGt0X2Rldi0+Y2Zsb3dzLCBwa3RfZGV2LT5sZmxvdyk7CisJc2VxX3ByaW50ZihzZXEsCisJCSAgICIgICAgIGZyYWdzOiAlZCAgZGVsYXk6ICV1ICBjbG9uZV9za2I6ICVkICBpZm5hbWU6ICVzXG4iLAorCQkgICBwa3RfZGV2LT5uZnJhZ3MsCisJCSAgIDEwMDAgKiBwa3RfZGV2LT5kZWxheV91cyArIHBrdF9kZXYtPmRlbGF5X25zLAorCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPmlmbmFtZSk7CiAKKwlzZXFfcHJpbnRmKHNlcSwgIiAgICAgZmxvd3M6ICV1IGZsb3dsZW46ICV1XG4iLCBwa3RfZGV2LT5jZmxvd3MsCisJCSAgIHBrdF9kZXYtPmxmbG93KTsKIAotCWlmKHBrdF9kZXYtPmZsYWdzICYgRl9JUFY2KSB7CisJaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9JUFY2KSB7CiAJCWNoYXIgYjFbMTI4XSwgYjJbMTI4XSwgYjNbMTI4XTsKLQkJZm10X2lwNihiMSwgIHBrdF9kZXYtPmluNl9zYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihiMiwgIHBrdF9kZXYtPm1pbl9pbjZfc2FkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYjMsICBwa3RfZGV2LT5tYXhfaW42X3NhZGRyLnM2X2FkZHIpOwotCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgc2FkZHI6ICVzICBtaW5fc2FkZHI6ICVzICBtYXhfc2FkZHI6ICVzXG4iLCBiMSwgYjIsIGIzKTsKKwkJZm10X2lwNihiMSwgcGt0X2Rldi0+aW42X3NhZGRyLnM2X2FkZHIpOworCQlmbXRfaXA2KGIyLCBwa3RfZGV2LT5taW5faW42X3NhZGRyLnM2X2FkZHIpOworCQlmbXRfaXA2KGIzLCBwa3RfZGV2LT5tYXhfaW42X3NhZGRyLnM2X2FkZHIpOworCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICIgICAgIHNhZGRyOiAlcyAgbWluX3NhZGRyOiAlcyAgbWF4X3NhZGRyOiAlc1xuIiwgYjEsCisJCQkgICBiMiwgYjMpOwogCi0JCWZtdF9pcDYoYjEsICBwa3RfZGV2LT5pbjZfZGFkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYjIsICBwa3RfZGV2LT5taW5faW42X2RhZGRyLnM2X2FkZHIpOwotCQlmbXRfaXA2KGIzLCAgcGt0X2Rldi0+bWF4X2luNl9kYWRkci5zNl9hZGRyKTsKLQkJc2VxX3ByaW50ZihzZXEsICIgICAgIGRhZGRyOiAlcyAgbWluX2RhZGRyOiAlcyAgbWF4X2RhZGRyOiAlc1xuIiwgYjEsIGIyLCBiMyk7CisJCWZtdF9pcDYoYjEsIHBrdF9kZXYtPmluNl9kYWRkci5zNl9hZGRyKTsKKwkJZm10X2lwNihiMiwgcGt0X2Rldi0+bWluX2luNl9kYWRkci5zNl9hZGRyKTsKKwkJZm10X2lwNihiMywgcGt0X2Rldi0+bWF4X2luNl9kYWRkci5zNl9hZGRyKTsKKwkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAiICAgICBkYWRkcjogJXMgIG1pbl9kYWRkcjogJXMgIG1heF9kYWRkcjogJXNcbiIsIGIxLAorCQkJICAgYjIsIGIzKTsKIAotCX0gCi0JZWxzZSAKLQkJc2VxX3ByaW50ZihzZXEsIiAgICAgZHN0X21pbjogJXMgIGRzdF9tYXg6ICVzXG4gICAgIHNyY19taW46ICVzICBzcmNfbWF4OiAlc1xuIiwKLQkJCSAgIHBrdF9kZXYtPmRzdF9taW4sIHBrdF9kZXYtPmRzdF9tYXgsIHBrdF9kZXYtPnNyY19taW4sIHBrdF9kZXYtPnNyY19tYXgpOworCX0gZWxzZQorCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICIgICAgIGRzdF9taW46ICVzICBkc3RfbWF4OiAlc1xuICAgICBzcmNfbWluOiAlcyAgc3JjX21heDogJXNcbiIsCisJCQkgICBwa3RfZGV2LT5kc3RfbWluLCBwa3RfZGV2LT5kc3RfbWF4LCBwa3RfZGV2LT5zcmNfbWluLAorCQkJICAgcGt0X2Rldi0+c3JjX21heCk7CiAKIAlzZXFfcHV0cyhzZXEsICIgICAgIHNyY19tYWM6ICIpOwogCiAJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihwa3RfZGV2LT5zcmNfbWFjKSkKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgCi0JCQlzZXFfcHJpbnRmKHNlcSwgICIlMDJYJXMiLCBwa3RfZGV2LT5vZGV2LT5kZXZfYWRkcltpXSwgaSA9PSA1ID8gIiAgIiA6ICI6Iik7Ci0JZWxzZSAKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgCi0JCQlzZXFfcHJpbnRmKHNlcSwgICIlMDJYJXMiLCBwa3RfZGV2LT5zcmNfbWFjW2ldLCBpID09IDUgPyAiICAiIDogIjoiKTsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCXNlcV9wcmludGYoc2VxLCAiJTAyWCVzIiwgcGt0X2Rldi0+b2Rldi0+ZGV2X2FkZHJbaV0sCisJCQkJICAgaSA9PSA1ID8gIiAgIiA6ICI6Iik7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJc2VxX3ByaW50ZihzZXEsICIlMDJYJXMiLCBwa3RfZGV2LT5zcmNfbWFjW2ldLAorCQkJCSAgIGkgPT0gNSA/ICIgICIgOiAiOiIpOwogCi0gICAgICAgIHNlcV9wcmludGYoc2VxLCAgImRzdF9tYWM6ICIpOwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIAotCQlzZXFfcHJpbnRmKHNlcSwgICIlMDJYJXMiLCBwa3RfZGV2LT5kc3RfbWFjW2ldLCBpID09IDUgPyAiXG4iIDogIjoiKTsKKwlzZXFfcHJpbnRmKHNlcSwgImRzdF9tYWM6ICIpOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXNlcV9wcmludGYoc2VxLCAiJTAyWCVzIiwgcGt0X2Rldi0+ZHN0X21hY1tpXSwKKwkJCSAgIGkgPT0gNSA/ICJcbiIgOiAiOiIpOwogCi0gICAgICAgIHNlcV9wcmludGYoc2VxLCAgIiAgICAgdWRwX3NyY19taW46ICVkICB1ZHBfc3JjX21heDogJWQgIHVkcF9kc3RfbWluOiAlZCAgdWRwX2RzdF9tYXg6ICVkXG4iLAotCQkgICBwa3RfZGV2LT51ZHBfc3JjX21pbiwgcGt0X2Rldi0+dWRwX3NyY19tYXgsIHBrdF9kZXYtPnVkcF9kc3RfbWluLAotCQkgICBwa3RfZGV2LT51ZHBfZHN0X21heCk7CisJc2VxX3ByaW50ZihzZXEsCisJCSAgICIgICAgIHVkcF9zcmNfbWluOiAlZCAgdWRwX3NyY19tYXg6ICVkICB1ZHBfZHN0X21pbjogJWQgIHVkcF9kc3RfbWF4OiAlZFxuIiwKKwkJICAgcGt0X2Rldi0+dWRwX3NyY19taW4sIHBrdF9kZXYtPnVkcF9zcmNfbWF4LAorCQkgICBwa3RfZGV2LT51ZHBfZHN0X21pbiwgcGt0X2Rldi0+dWRwX2RzdF9tYXgpOwogCi0gICAgICAgIHNlcV9wcmludGYoc2VxLCAgIiAgICAgc3JjX21hY19jb3VudDogJWQgIGRzdF9tYWNfY291bnQ6ICVkIFxuICAgICBGbGFnczogIiwKKwlzZXFfcHJpbnRmKHNlcSwKKwkJICAgIiAgICAgc3JjX21hY19jb3VudDogJWQgIGRzdF9tYWNfY291bnQ6ICVkXG4iLAogCQkgICBwa3RfZGV2LT5zcmNfbWFjX2NvdW50LCBwa3RfZGV2LT5kc3RfbWFjX2NvdW50KTsKIAorCWlmIChwa3RfZGV2LT5ucl9sYWJlbHMpIHsKKwkJdW5zaWduZWQgaTsKKwkJc2VxX3ByaW50ZihzZXEsICIgICAgIG1wbHM6ICIpOworCQlmb3IoaSA9IDA7IGkgPCBwa3RfZGV2LT5ucl9sYWJlbHM7IGkrKykKKwkJCXNlcV9wcmludGYoc2VxLCAiJTA4eCVzIiwgbnRvaGwocGt0X2Rldi0+bGFiZWxzW2ldKSwKKwkJCQkgICBpID09IHBrdF9kZXYtPm5yX2xhYmVscy0xID8gIlxuIiA6ICIsICIpOworCX0KIAotICAgICAgICBpZiAocGt0X2Rldi0+ZmxhZ3MgJiAgRl9JUFY2KSAKLSAgICAgICAgICAgICAgICBzZXFfcHJpbnRmKHNlcSwgICJJUFY2ICAiKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgICAgRmxhZ3M6ICIpOwogCi0gICAgICAgIGlmIChwa3RfZGV2LT5mbGFncyAmICBGX0lQU1JDX1JORCkgCi0gICAgICAgICAgICAgICAgc2VxX3ByaW50ZihzZXEsICAiSVBTUkNfUk5EICAiKTsKKwlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpCisJCXNlcV9wcmludGYoc2VxLCAiSVBWNiAgIik7CiAKLSAgICAgICAgaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9JUERTVF9STkQpIAotICAgICAgICAgICAgICAgIHNlcV9wcmludGYoc2VxLCAgIklQRFNUX1JORCAgIik7Ci0gICAgICAgIAotICAgICAgICBpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX1RYU0laRV9STkQpIAotICAgICAgICAgICAgICAgIHNlcV9wcmludGYoc2VxLCAgIlRYU0laRV9STkQgICIpOwotICAgICAgICAKLSAgICAgICAgaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9VRFBTUkNfUk5EKSAKLSAgICAgICAgICAgICAgICBzZXFfcHJpbnRmKHNlcSwgICJVRFBTUkNfUk5EICAiKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwa3RfZGV2LT5mbGFncyAmIEZfVURQRFNUX1JORCkgCi0gICAgICAgICAgICAgICAgc2VxX3ByaW50ZihzZXEsICAiVURQRFNUX1JORCAgIik7Ci0gICAgICAgIAotICAgICAgICBpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX01BQ1NSQ19STkQpIAotICAgICAgICAgICAgICAgIHNlcV9wcmludGYoc2VxLCAgIk1BQ1NSQ19STkQgICIpOwotICAgICAgICAKLSAgICAgICAgaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9NQUNEU1RfUk5EKSAKLSAgICAgICAgICAgICAgICBzZXFfcHJpbnRmKHNlcSwgICJNQUNEU1RfUk5EICAiKTsKKwlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQU1JDX1JORCkKKwkJc2VxX3ByaW50ZihzZXEsICJJUFNSQ19STkQgICIpOwogCi0gICAgICAgIAotICAgICAgICBzZXFfcHV0cyhzZXEsICAiXG4iKTsKLSAgICAgICAgCi0gICAgICAgIHNhID0gcGt0X2Rldi0+c3RhcnRlZF9hdDsKLSAgICAgICAgc3RvcHBlZCA9IHBrdF9kZXYtPnN0b3BwZWRfYXQ7Ci0gICAgICAgIGlmIChwa3RfZGV2LT5ydW5uaW5nKSAKLSAgICAgICAgICAgICAgICBzdG9wcGVkID0gbm93OyAvKiBub3QgcmVhbGx5IHN0b3BwZWQsIG1vcmUgbGlrZSBsYXN0LXJ1bm5pbmctYXQgKi8KLSAgICAgICAgCi0gICAgICAgIHNlcV9wcmludGYoc2VxLCAgIkN1cnJlbnQ6XG4gICAgIHBrdHMtc29mYXI6ICVsbHUgIGVycm9yczogJWxsdVxuICAgICBzdGFydGVkOiAlbGx1dXMgIHN0b3BwZWQ6ICVsbHV1cyBpZGxlOiAlbGx1dXNcbiIsCi0JCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtPnNvZmFyLAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LT5lcnJvcnMsCi0JCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNhLAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdG9wcGVkLAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LT5pZGxlX2FjYyk7CisJaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9JUERTVF9STkQpCisJCXNlcV9wcmludGYoc2VxLCAiSVBEU1RfUk5EICAiKTsKIAotICAgICAgICBzZXFfcHJpbnRmKHNlcSwgICIgICAgIHNlcV9udW06ICVkICBjdXJfZHN0X21hY19vZmZzZXQ6ICVkICBjdXJfc3JjX21hY19vZmZzZXQ6ICVkXG4iLAorCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfVFhTSVpFX1JORCkKKwkJc2VxX3ByaW50ZihzZXEsICJUWFNJWkVfUk5EICAiKTsKKworCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfVURQU1JDX1JORCkKKwkJc2VxX3ByaW50ZihzZXEsICJVRFBTUkNfUk5EICAiKTsKKworCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfVURQRFNUX1JORCkKKwkJc2VxX3ByaW50ZihzZXEsICJVRFBEU1RfUk5EICAiKTsKKworCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfTVBMU19STkQpCisJCXNlcV9wcmludGYoc2VxLCAgIk1QTFNfUk5EICAiKTsKKworCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfTUFDU1JDX1JORCkKKwkJc2VxX3ByaW50ZihzZXEsICJNQUNTUkNfUk5EICAiKTsKKworCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfTUFDRFNUX1JORCkKKwkJc2VxX3ByaW50ZihzZXEsICJNQUNEU1RfUk5EICAiKTsKKworCXNlcV9wdXRzKHNlcSwgIlxuIik7CisKKwlzYSA9IHBrdF9kZXYtPnN0YXJ0ZWRfYXQ7CisJc3RvcHBlZCA9IHBrdF9kZXYtPnN0b3BwZWRfYXQ7CisJaWYgKHBrdF9kZXYtPnJ1bm5pbmcpCisJCXN0b3BwZWQgPSBub3c7CS8qIG5vdCByZWFsbHkgc3RvcHBlZCwgbW9yZSBsaWtlIGxhc3QtcnVubmluZy1hdCAqLworCisJc2VxX3ByaW50ZihzZXEsCisJCSAgICJDdXJyZW50OlxuICAgICBwa3RzLXNvZmFyOiAlbGx1ICBlcnJvcnM6ICVsbHVcbiAgICAgc3RhcnRlZDogJWxsdXVzICBzdG9wcGVkOiAlbGx1dXMgaWRsZTogJWxsdXVzXG4iLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPnNvZmFyLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPmVycm9ycywgKHVuc2lnbmVkIGxvbmcgbG9uZylzYSwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdG9wcGVkLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPmlkbGVfYWNjKTsKKworCXNlcV9wcmludGYoc2VxLAorCQkgICAiICAgICBzZXFfbnVtOiAlZCAgY3VyX2RzdF9tYWNfb2Zmc2V0OiAlZCAgY3VyX3NyY19tYWNfb2Zmc2V0OiAlZFxuIiwKIAkJICAgcGt0X2Rldi0+c2VxX251bSwgcGt0X2Rldi0+Y3VyX2RzdF9tYWNfb2Zmc2V0LAogCQkgICBwa3RfZGV2LT5jdXJfc3JjX21hY19vZmZzZXQpOwogCi0JaWYocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpIHsKKwlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpIHsKIAkJY2hhciBiMVsxMjhdLCBiMlsxMjhdOwotCQlmbXRfaXA2KGIxLCAgcGt0X2Rldi0+Y3VyX2luNl9kYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihiMiwgIHBrdF9kZXYtPmN1cl9pbjZfc2FkZHIuczZfYWRkcik7Ci0JCXNlcV9wcmludGYoc2VxLCAgIiAgICAgY3VyX3NhZGRyOiAlcyAgY3VyX2RhZGRyOiAlc1xuIiwgYjIsIGIxKTsKLQl9IAotCWVsc2UgCi0JCXNlcV9wcmludGYoc2VxLCAgIiAgICAgY3VyX3NhZGRyOiAweCV4ICBjdXJfZGFkZHI6IDB4JXhcbiIsCisJCWZtdF9pcDYoYjEsIHBrdF9kZXYtPmN1cl9pbjZfZGFkZHIuczZfYWRkcik7CisJCWZtdF9pcDYoYjIsIHBrdF9kZXYtPmN1cl9pbjZfc2FkZHIuczZfYWRkcik7CisJCXNlcV9wcmludGYoc2VxLCAiICAgICBjdXJfc2FkZHI6ICVzICBjdXJfZGFkZHI6ICVzXG4iLCBiMiwgYjEpOworCX0gZWxzZQorCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgY3VyX3NhZGRyOiAweCV4ICBjdXJfZGFkZHI6IDB4JXhcbiIsCiAJCQkgICBwa3RfZGV2LT5jdXJfc2FkZHIsIHBrdF9kZXYtPmN1cl9kYWRkcik7CiAKLQotCXNlcV9wcmludGYoc2VxLCAgIiAgICAgY3VyX3VkcF9kc3Q6ICVkICBjdXJfdWRwX3NyYzogJWRcbiIsCisJc2VxX3ByaW50ZihzZXEsICIgICAgIGN1cl91ZHBfZHN0OiAlZCAgY3VyX3VkcF9zcmM6ICVkXG4iLAogCQkgICBwa3RfZGV2LT5jdXJfdWRwX2RzdCwgcGt0X2Rldi0+Y3VyX3VkcF9zcmMpOwogCi0Jc2VxX3ByaW50ZihzZXEsICAiICAgICBmbG93czogJXVcbiIsIHBrdF9kZXYtPm5mbG93cyk7CisJc2VxX3ByaW50ZihzZXEsICIgICAgIGZsb3dzOiAldVxuIiwgcGt0X2Rldi0+bmZsb3dzKTsKIAogCWlmIChwa3RfZGV2LT5yZXN1bHRbMF0pCi0JCXNlcV9wcmludGYoc2VxLCAgIlJlc3VsdDogJXNcbiIsIHBrdF9kZXYtPnJlc3VsdCk7CisJCXNlcV9wcmludGYoc2VxLCAiUmVzdWx0OiAlc1xuIiwgcGt0X2Rldi0+cmVzdWx0KTsKIAllbHNlCi0JCXNlcV9wcmludGYoc2VxLCAgIlJlc3VsdDogSWRsZVxuIik7CisJCXNlcV9wcmludGYoc2VxLCAiUmVzdWx0OiBJZGxlXG4iKTsKIAogCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyBpbnQgY291bnRfdHJhaWxfY2hhcnMoY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLCB1bnNpZ25lZCBpbnQgbWF4bGVuKQorc3RhdGljIGludCBoZXgzMl9hcmcoY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLCBfX3UzMiAqbnVtKQoreworCWludCBpID0gMDsKKwkqbnVtID0gMDsKKworCWZvcig7IGkgPCA4OyBpKyspIHsKKwkJY2hhciBjOworCQkqbnVtIDw8PSA0OworCQlpZiAoZ2V0X3VzZXIoYywgJnVzZXJfYnVmZmVyW2ldKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKQorCQkJKm51bSB8PSBjIC0gJzAnOworCQllbHNlIGlmICgoYyA+PSAnYScpICYmIChjIDw9ICdmJykpCisJCQkqbnVtIHw9IGMgLSAnYScgKyAxMDsKKwkJZWxzZSBpZiAoKGMgPj0gJ0EnKSAmJiAoYyA8PSAnRicpKQorCQkJKm51bSB8PSBjIC0gJ0EnICsgMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBjb3VudF90cmFpbF9jaGFycyhjb25zdCBjaGFyIF9fdXNlciAqIHVzZXJfYnVmZmVyLAorCQkJICAgICB1bnNpZ25lZCBpbnQgbWF4bGVuKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG1heGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBjOwotICAgICAgICAgICAgICAgIGlmIChnZXRfdXNlcihjLCAmdXNlcl9idWZmZXJbaV0pKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7CisJCWNoYXIgYzsKKwkJaWYgKGdldF91c2VyKGMsICZ1c2VyX2J1ZmZlcltpXSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc3dpdGNoIChjKSB7CiAJCWNhc2UgJ1wiJzoKIAkJY2FzZSAnXG4nOgogCQljYXNlICdccic6CkBAIC03MDYsMzQgKzc2MiwzNCBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fYXJnKGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgdW5zaWduZWQgbG9uZyBtYXhsZW4sIAotCQkJICAgICB1bnNpZ25lZCBsb25nICpudW0pCitzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fYXJnKGNvbnN0IGNoYXIgX191c2VyICogdXNlcl9idWZmZXIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgbWF4bGVuLCB1bnNpZ25lZCBsb25nICpudW0pCiB7CiAJaW50IGkgPSAwOwogCSpudW0gPSAwOwotICAKLQlmb3IoOyBpIDwgbWF4bGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjaGFyIGM7Ci0gICAgICAgICAgICAgICAgaWYgKGdldF91c2VyKGMsICZ1c2VyX2J1ZmZlcltpXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICBpZiAoKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpKSB7CisKKwlmb3IgKDsgaSA8IG1heGxlbjsgaSsrKSB7CisJCWNoYXIgYzsKKwkJaWYgKGdldF91c2VyKGMsICZ1c2VyX2J1ZmZlcltpXSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKChjID49ICcwJykgJiYgKGMgPD0gJzknKSkgewogCQkJKm51bSAqPSAxMDsKLQkJCSpudW0gKz0gYyAtJzAnOworCQkJKm51bSArPSBjIC0gJzAnOwogCQl9IGVsc2UKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIGludCBzdHJuX2xlbihjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHVuc2lnbmVkIGludCBtYXhsZW4pCitzdGF0aWMgaW50IHN0cm5fbGVuKGNvbnN0IGNoYXIgX191c2VyICogdXNlcl9idWZmZXIsIHVuc2lnbmVkIGludCBtYXhsZW4pCiB7CiAJaW50IGkgPSAwOwogCi0JZm9yKDsgaSA8IG1heGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBjOwotICAgICAgICAgICAgICAgIGlmIChnZXRfdXNlcihjLCAmdXNlcl9idWZmZXJbaV0pKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7CisJZm9yICg7IGkgPCBtYXhsZW47IGkrKykgeworCQljaGFyIGM7CisJCWlmIChnZXRfdXNlcihjLCAmdXNlcl9idWZmZXJbaV0pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXN3aXRjaCAoYykgewogCQljYXNlICdcIic6CiAJCWNhc2UgJ1xuJzoKIAkJY2FzZSAnXHInOgpAQCAtNzQ2LDExOSArODAyLDE2MiBAQAogCQl9OwogCX0KIGRvbmVfc3RyOgotCiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHBrdGdlbl9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLAotCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCitzdGF0aWMgc3NpemVfdCBnZXRfbGFiZWxzKGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gc2VxLT5wcml2YXRlOworCXVuc2lnbmVkIG4gPSAwOworCWNoYXIgYzsKKwlzc2l6ZV90IGkgPSAwOworCWludCBsZW47CisKKwlwa3RfZGV2LT5ucl9sYWJlbHMgPSAwOworCWRvIHsKKwkJX191MzIgdG1wOworCQlsZW4gPSBoZXgzMl9hcmcoJmJ1ZmZlcltpXSwgJnRtcCk7CisJCWlmIChsZW4gPD0gMCkKKwkJCXJldHVybiBsZW47CisJCXBrdF9kZXYtPmxhYmVsc1tuXSA9IGh0b25sKHRtcCk7CisJCWlmIChwa3RfZGV2LT5sYWJlbHNbbl0gJiBNUExTX1NUQUNLX0JPVFRPTSkKKwkJCXBrdF9kZXYtPmZsYWdzIHw9IEZfTVBMU19STkQ7CisJCWkgKz0gbGVuOworCQlpZiAoZ2V0X3VzZXIoYywgJmJ1ZmZlcltpXSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaSsrOworCQluKys7CisJCWlmIChuID49IE1BWF9NUExTX0xBQkVMUykKKwkJCXJldHVybiAtRTJCSUc7CisJfSB3aGlsZShjID09ICcsJyk7CisKKwlwa3RfZGV2LT5ucl9sYWJlbHMgPSBuOworCXJldHVybiBpOworfQorCitzdGF0aWMgc3NpemVfdCBwa3RnZW5faWZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKiB1c2VyX2J1ZmZlciwgc2l6ZV90IGNvdW50LAorCQkJICAgICAgIGxvZmZfdCAqIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtPnByaXZhdGU7CiAJaW50IGkgPSAwLCBtYXgsIGxlbjsKIAljaGFyIG5hbWVbMTZdLCB2YWxzdHJbMzJdOwogCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwOwotICAgICAgICBjaGFyKiBwZ19yZXN1bHQgPSBOVUxMOwotICAgICAgICBpbnQgdG1wID0gMDsKKwljaGFyICpwZ19yZXN1bHQgPSBOVUxMOworCWludCB0bXAgPSAwOwogCWNoYXIgYnVmWzEyOF07Ci0gICAgICAgIAotICAgICAgICBwZ19yZXN1bHQgPSAmKHBrdF9kZXYtPnJlc3VsdFswXSk7Ci0gICAgICAgIAorCisJcGdfcmVzdWx0ID0gJihwa3RfZGV2LT5yZXN1bHRbMF0pOworCiAJaWYgKGNvdW50IDwgMSkgewogCQlwcmludGsoInBrdGdlbjogd3JvbmcgY29tbWFuZCBmb3JtYXRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0gIAorCiAJbWF4ID0gY291bnQgLSBpOwogCXRtcCA9IGNvdW50X3RyYWlsX2NoYXJzKCZ1c2VyX2J1ZmZlcltpXSwgbWF4KTsKLSAgICAgICAgaWYgKHRtcCA8IDApIHsgCisJaWYgKHRtcCA8IDApIHsKIAkJcHJpbnRrKCJwa3RnZW46IGlsbGVnYWwgZm9ybWF0XG4iKTsKLQkJcmV0dXJuIHRtcDsgCisJCXJldHVybiB0bXA7CiAJfQotICAgICAgICBpICs9IHRtcDsKLSAgICAgICAgCisJaSArPSB0bXA7CisKIAkvKiBSZWFkIHZhcmlhYmxlIG5hbWUgKi8KIAogCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKG5hbWUpIC0gMSk7Ci0gICAgICAgIGlmIChsZW4gPCAwKSB7IHJldHVybiBsZW47IH0KKwlpZiAobGVuIDwgMCkgeworCQlyZXR1cm4gbGVuOworCX0KIAltZW1zZXQobmFtZSwgMCwgc2l6ZW9mKG5hbWUpKTsKLQlpZiAoY29weV9mcm9tX3VzZXIobmFtZSwgJnVzZXJfYnVmZmVyW2ldLCBsZW4pICkKKwlpZiAoY29weV9mcm9tX3VzZXIobmFtZSwgJnVzZXJfYnVmZmVyW2ldLCBsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpICs9IGxlbjsKLSAgCi0JbWF4ID0gY291bnQgLWk7CisKKwltYXggPSBjb3VudCAtIGk7CiAJbGVuID0gY291bnRfdHJhaWxfY2hhcnMoJnVzZXJfYnVmZmVyW2ldLCBtYXgpOwotICAgICAgICBpZiAobGVuIDwgMCkgCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxlbjsKLSAgICAgICAgCisJaWYgKGxlbiA8IDApCisJCXJldHVybiBsZW47CisKIAlpICs9IGxlbjsKIAogCWlmIChkZWJ1ZykgewotICAgICAgICAgICAgICAgIGNoYXIgdGJbY291bnQgKyAxXTsKLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIodGIsIHVzZXJfYnVmZmVyLCBjb3VudCkpCisJCWNoYXIgdGJbY291bnQgKyAxXTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHRiLCB1c2VyX2J1ZmZlciwgY291bnQpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgdGJbY291bnRdID0gMDsKKwkJdGJbY291bnRdID0gMDsKIAkJcHJpbnRrKCJwa3RnZW46ICVzLCVsdSAgYnVmZmVyIC06JXM6LVxuIiwgbmFtZSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBjb3VudCwgdGIpOwotICAgICAgICB9CisJCSAgICAgICAodW5zaWduZWQgbG9uZyljb3VudCwgdGIpOworCX0KIAogCWlmICghc3RyY21wKG5hbWUsICJtaW5fcGt0X3NpemUiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQorCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQogCQlpICs9IGxlbjsKLQkJaWYgKHZhbHVlIDwgMTQrMjArOCkKLQkJCXZhbHVlID0gMTQrMjArODsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gcGt0X2Rldi0+bWluX3BrdF9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT5taW5fcGt0X3NpemUgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLQkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogbWluX3BrdF9zaXplPSV1IiwgcGt0X2Rldi0+bWluX3BrdF9zaXplKTsKKwkJaWYgKHZhbHVlIDwgMTQgKyAyMCArIDgpCisJCQl2YWx1ZSA9IDE0ICsgMjAgKyA4OworCQlpZiAodmFsdWUgIT0gcGt0X2Rldi0+bWluX3BrdF9zaXplKSB7CisJCQlwa3RfZGV2LT5taW5fcGt0X3NpemUgPSB2YWx1ZTsKKwkJCXBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSA9IHZhbHVlOworCQl9CisJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IG1pbl9wa3Rfc2l6ZT0ldSIsCisJCQlwa3RfZGV2LT5taW5fcGt0X3NpemUpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCi0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICJtYXhfcGt0X3NpemUiKSkgeworCWlmICghc3RyY21wKG5hbWUsICJtYXhfcGt0X3NpemUiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQorCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQogCQlpICs9IGxlbjsKLQkJaWYgKHZhbHVlIDwgMTQrMjArOCkKLQkJCXZhbHVlID0gMTQrMjArODsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gcGt0X2Rldi0+bWF4X3BrdF9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT5tYXhfcGt0X3NpemUgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLQkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogbWF4X3BrdF9zaXplPSV1IiwgcGt0X2Rldi0+bWF4X3BrdF9zaXplKTsKKwkJaWYgKHZhbHVlIDwgMTQgKyAyMCArIDgpCisJCQl2YWx1ZSA9IDE0ICsgMjAgKyA4OworCQlpZiAodmFsdWUgIT0gcGt0X2Rldi0+bWF4X3BrdF9zaXplKSB7CisJCQlwa3RfZGV2LT5tYXhfcGt0X3NpemUgPSB2YWx1ZTsKKwkJCXBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSA9IHZhbHVlOworCQl9CisJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IG1heF9wa3Rfc2l6ZT0ldSIsCisJCQlwa3RfZGV2LT5tYXhfcGt0X3NpemUpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCi0gICAgICAgIC8qIFNob3J0Y3V0IGZvciBtaW4gPSBtYXggKi8KKwkvKiBTaG9ydGN1dCBmb3IgbWluID0gbWF4ICovCiAKIAlpZiAoIXN0cmNtcChuYW1lLCAicGt0X3NpemUiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQorCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQogCQlpICs9IGxlbjsKLQkJaWYgKHZhbHVlIDwgMTQrMjArOCkKLQkJCXZhbHVlID0gMTQrMjArODsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gcGt0X2Rldi0+bWluX3BrdF9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT5taW5fcGt0X3NpemUgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPm1heF9wa3Rfc2l6ZSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+Y3VyX3BrdF9zaXplID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAodmFsdWUgPCAxNCArIDIwICsgOCkKKwkJCXZhbHVlID0gMTQgKyAyMCArIDg7CisJCWlmICh2YWx1ZSAhPSBwa3RfZGV2LT5taW5fcGt0X3NpemUpIHsKKwkJCXBrdF9kZXYtPm1pbl9wa3Rfc2l6ZSA9IHZhbHVlOworCQkJcGt0X2Rldi0+bWF4X3BrdF9zaXplID0gdmFsdWU7CisJCQlwa3RfZGV2LT5jdXJfcGt0X3NpemUgPSB2YWx1ZTsKKwkJfQogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBwa3Rfc2l6ZT0ldSIsIHBrdF9kZXYtPm1pbl9wa3Rfc2l6ZSk7CiAJCXJldHVybiBjb3VudDsKIAl9CiAKLSAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgImRlYnVnIikpIHsKKwlpZiAoIXN0cmNtcChuYW1lLCAiZGVidWciKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQorCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQogCQlpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBkZWJ1ZyA9IHZhbHVlOworCQlkZWJ1ZyA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBkZWJ1Zz0ldSIsIGRlYnVnKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiZnJhZ3MiKSkgeworCWlmICghc3RyY21wKG5hbWUsICJmcmFncyIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJCWkgKz0gbGVuOwogCQlwa3RfZGV2LT5uZnJhZ3MgPSB2YWx1ZTsKIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZnJhZ3M9JXUiLCBwa3RfZGV2LT5uZnJhZ3MpOwpAQCAtODY2LDcgKzk2NSw5IEBACiAJfQogCWlmICghc3RyY21wKG5hbWUsICJkZWxheSIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJCWkgKz0gbGVuOwogCQlpZiAodmFsdWUgPT0gMHg3RkZGRkZGRikgewogCQkJcGt0X2Rldi0+ZGVsYXlfdXMgPSAweDdGRkZGRkZGOwpAQCAtODc1LDMwOCArOTc2LDM1MyBAQAogCQkJcGt0X2Rldi0+ZGVsYXlfdXMgPSB2YWx1ZSAvIDEwMDA7CiAJCQlwa3RfZGV2LT5kZWxheV9ucyA9IHZhbHVlICUgMTAwMDsKIAkJfQotCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBkZWxheT0ldSIsIDEwMDAqcGt0X2Rldi0+ZGVsYXlfdXMrcGt0X2Rldi0+ZGVsYXlfbnMpOworCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBkZWxheT0ldSIsCisJCQkxMDAwICogcGt0X2Rldi0+ZGVsYXlfdXMgKyBwa3RfZGV2LT5kZWxheV9ucyk7CiAJCXJldHVybiBjb3VudDsKIAl9Ci0gCWlmICghc3RyY21wKG5hbWUsICJ1ZHBfc3JjX21pbiIpKSB7CisJaWYgKCFzdHJjbXAobmFtZSwgInVkcF9zcmNfbWluIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwKSB7IHJldHVybiBsZW47IH0KKwkJaWYgKGxlbiA8IDApIHsKKwkJCXJldHVybiBsZW47CisJCX0KIAkJaSArPSBsZW47Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IHBrdF9kZXYtPnVkcF9zcmNfbWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT51ZHBfc3JjX21pbiA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+Y3VyX3VkcF9zcmMgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9ICAgICAgIAorCQlpZiAodmFsdWUgIT0gcGt0X2Rldi0+dWRwX3NyY19taW4pIHsKKwkJCXBrdF9kZXYtPnVkcF9zcmNfbWluID0gdmFsdWU7CisJCQlwa3RfZGV2LT5jdXJfdWRwX3NyYyA9IHZhbHVlOworCQl9CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHVkcF9zcmNfbWluPSV1IiwgcGt0X2Rldi0+dWRwX3NyY19taW4pOwogCQlyZXR1cm4gY291bnQ7CiAJfQotIAlpZiAoIXN0cmNtcChuYW1lLCAidWRwX2RzdF9taW4iKSkgeworCWlmICghc3RyY21wKG5hbWUsICJ1ZHBfZHN0X21pbiIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJCWkgKz0gbGVuOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBwa3RfZGV2LT51ZHBfZHN0X21pbikgewotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+dWRwX2RzdF9taW4gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl91ZHBfZHN0ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAodmFsdWUgIT0gcGt0X2Rldi0+dWRwX2RzdF9taW4pIHsKKwkJCXBrdF9kZXYtPnVkcF9kc3RfbWluID0gdmFsdWU7CisJCQlwa3RfZGV2LT5jdXJfdWRwX2RzdCA9IHZhbHVlOworCQl9CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHVkcF9kc3RfbWluPSV1IiwgcGt0X2Rldi0+dWRwX2RzdF9taW4pOwogCQlyZXR1cm4gY291bnQ7CiAJfQotIAlpZiAoIXN0cmNtcChuYW1lLCAidWRwX3NyY19tYXgiKSkgeworCWlmICghc3RyY21wKG5hbWUsICJ1ZHBfc3JjX21heCIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJCWkgKz0gbGVuOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBwa3RfZGV2LT51ZHBfc3JjX21heCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+dWRwX3NyY19tYXggPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl91ZHBfc3JjID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAodmFsdWUgIT0gcGt0X2Rldi0+dWRwX3NyY19tYXgpIHsKKwkJCXBrdF9kZXYtPnVkcF9zcmNfbWF4ID0gdmFsdWU7CisJCQlwa3RfZGV2LT5jdXJfdWRwX3NyYyA9IHZhbHVlOworCQl9CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHVkcF9zcmNfbWF4PSV1IiwgcGt0X2Rldi0+dWRwX3NyY19tYXgpOwogCQlyZXR1cm4gY291bnQ7CiAJfQotIAlpZiAoIXN0cmNtcChuYW1lLCAidWRwX2RzdF9tYXgiKSkgeworCWlmICghc3RyY21wKG5hbWUsICJ1ZHBfZHN0X21heCIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJCWkgKz0gbGVuOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBwa3RfZGV2LT51ZHBfZHN0X21heCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+dWRwX2RzdF9tYXggPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl91ZHBfZHN0ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAodmFsdWUgIT0gcGt0X2Rldi0+dWRwX2RzdF9tYXgpIHsKKwkJCXBrdF9kZXYtPnVkcF9kc3RfbWF4ID0gdmFsdWU7CisJCQlwa3RfZGV2LT5jdXJfdWRwX2RzdCA9IHZhbHVlOworCQl9CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHVkcF9kc3RfbWF4PSV1IiwgcGt0X2Rldi0+dWRwX2RzdF9tYXgpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCWlmICghc3RyY21wKG5hbWUsICJjbG9uZV9za2IiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQorCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQogCQlpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBwa3RfZGV2LT5jbG9uZV9za2IgPSB2YWx1ZTsKLQkKKwkJcGt0X2Rldi0+Y2xvbmVfc2tiID0gdmFsdWU7CisKIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogY2xvbmVfc2tiPSVkIiwgcGt0X2Rldi0+Y2xvbmVfc2tiKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiY291bnQiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQorCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQogCQlpICs9IGxlbjsKIAkJcGt0X2Rldi0+Y291bnQgPSB2YWx1ZTsKIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogY291bnQ9JWxsdSIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LT5jb3VudCk7CisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPmNvdW50KTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAic3JjX21hY19jb3VudCIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJCWkgKz0gbGVuOwogCQlpZiAocGt0X2Rldi0+c3JjX21hY19jb3VudCAhPSB2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+c3JjX21hY19jb3VudCA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+Y3VyX3NyY19tYWNfb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0JCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHNyY19tYWNfY291bnQ9JWQiLCBwa3RfZGV2LT5zcmNfbWFjX2NvdW50KTsKKwkJCXBrdF9kZXYtPnNyY19tYWNfY291bnQgPSB2YWx1ZTsKKwkJCXBrdF9kZXYtPmN1cl9zcmNfbWFjX29mZnNldCA9IDA7CisJCX0KKwkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogc3JjX21hY19jb3VudD0lZCIsCisJCQlwa3RfZGV2LT5zcmNfbWFjX2NvdW50KTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiZHN0X21hY19jb3VudCIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJCWkgKz0gbGVuOwogCQlpZiAocGt0X2Rldi0+ZHN0X21hY19jb3VudCAhPSB2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+ZHN0X21hY19jb3VudCA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+Y3VyX2RzdF9tYWNfb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0JCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IGRzdF9tYWNfY291bnQ9JWQiLCBwa3RfZGV2LT5kc3RfbWFjX2NvdW50KTsKKwkJCXBrdF9kZXYtPmRzdF9tYWNfY291bnQgPSB2YWx1ZTsKKwkJCXBrdF9kZXYtPmN1cl9kc3RfbWFjX29mZnNldCA9IDA7CisJCX0KKwkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZHN0X21hY19jb3VudD0lZCIsCisJCQlwa3RfZGV2LT5kc3RfbWFjX2NvdW50KTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiZmxhZyIpKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBmWzMyXTsKLSAgICAgICAgICAgICAgICBtZW1zZXQoZiwgMCwgMzIpOworCQljaGFyIGZbMzJdOworCQltZW1zZXQoZiwgMCwgMzIpOwogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihmKSAtIDEpOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwKSB7IHJldHVybiBsZW47IH0KKwkJaWYgKGxlbiA8IDApIHsKKwkJCXJldHVybiBsZW47CisJCX0KIAkJaWYgKGNvcHlfZnJvbV91c2VyKGYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wKGYsICJJUFNSQ19STkQiKSA9PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmZsYWdzIHw9IEZfSVBTUkNfUk5EOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChmLCAiIUlQU1JDX1JORCIpID09IDApIAotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+ZmxhZ3MgJj0gfkZfSVBTUkNfUk5EOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChmLCAiVFhTSVpFX1JORCIpID09IDApIAotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+ZmxhZ3MgfD0gRl9UWFNJWkVfUk5EOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChmLCAiIVRYU0laRV9STkQiKSA9PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmZsYWdzICY9IH5GX1RYU0laRV9STkQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGYsICJJUERTVF9STkQiKSA9PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmZsYWdzIHw9IEZfSVBEU1RfUk5EOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChmLCAiIUlQRFNUX1JORCIpID09IDApIAotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+ZmxhZ3MgJj0gfkZfSVBEU1RfUk5EOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChmLCAiVURQU1JDX1JORCIpID09IDApIAotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+ZmxhZ3MgfD0gRl9VRFBTUkNfUk5EOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChmLCAiIVVEUFNSQ19STkQiKSA9PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmZsYWdzICY9IH5GX1VEUFNSQ19STkQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGYsICJVRFBEU1RfUk5EIikgPT0gMCkgCi0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT5mbGFncyB8PSBGX1VEUERTVF9STkQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGYsICIhVURQRFNUX1JORCIpID09IDApIAotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+ZmxhZ3MgJj0gfkZfVURQRFNUX1JORDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoZiwgIk1BQ1NSQ19STkQiKSA9PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmZsYWdzIHw9IEZfTUFDU1JDX1JORDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAoZiwgIiFNQUNTUkNfUk5EIikgPT0gMCkgCi0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT5mbGFncyAmPSB+Rl9NQUNTUkNfUk5EOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChmLCAiTUFDRFNUX1JORCIpID09IDApIAotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+ZmxhZ3MgfD0gRl9NQUNEU1RfUk5EOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChmLCAiIU1BQ0RTVF9STkQiKSA9PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmZsYWdzICY9IH5GX01BQ0RTVF9STkQ7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHBnX3Jlc3VsdCwgIkZsYWcgLTolczotIHVua25vd25cbkF2YWlsYWJsZSBmbGFncywgKHByZXBlbmQgISB0byB1bi1zZXQgZmxhZyk6XG4lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUFNSQ19STkQsIElQRFNUX1JORCwgVFhTSVpFX1JORCwgVURQU1JDX1JORCwgVURQRFNUX1JORCwgTUFDU1JDX1JORCwgTUFDRFNUX1JORFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAoc3RyY21wKGYsICJJUFNSQ19STkQiKSA9PSAwKQorCQkJcGt0X2Rldi0+ZmxhZ3MgfD0gRl9JUFNSQ19STkQ7CisKKwkJZWxzZSBpZiAoc3RyY21wKGYsICIhSVBTUkNfUk5EIikgPT0gMCkKKwkJCXBrdF9kZXYtPmZsYWdzICY9IH5GX0lQU1JDX1JORDsKKworCQllbHNlIGlmIChzdHJjbXAoZiwgIlRYU0laRV9STkQiKSA9PSAwKQorCQkJcGt0X2Rldi0+ZmxhZ3MgfD0gRl9UWFNJWkVfUk5EOworCisJCWVsc2UgaWYgKHN0cmNtcChmLCAiIVRYU0laRV9STkQiKSA9PSAwKQorCQkJcGt0X2Rldi0+ZmxhZ3MgJj0gfkZfVFhTSVpFX1JORDsKKworCQllbHNlIGlmIChzdHJjbXAoZiwgIklQRFNUX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyB8PSBGX0lQRFNUX1JORDsKKworCQllbHNlIGlmIChzdHJjbXAoZiwgIiFJUERTVF9STkQiKSA9PSAwKQorCQkJcGt0X2Rldi0+ZmxhZ3MgJj0gfkZfSVBEU1RfUk5EOworCisJCWVsc2UgaWYgKHN0cmNtcChmLCAiVURQU1JDX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyB8PSBGX1VEUFNSQ19STkQ7CisKKwkJZWxzZSBpZiAoc3RyY21wKGYsICIhVURQU1JDX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyAmPSB+Rl9VRFBTUkNfUk5EOworCisJCWVsc2UgaWYgKHN0cmNtcChmLCAiVURQRFNUX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyB8PSBGX1VEUERTVF9STkQ7CisKKwkJZWxzZSBpZiAoc3RyY21wKGYsICIhVURQRFNUX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyAmPSB+Rl9VRFBEU1RfUk5EOworCisJCWVsc2UgaWYgKHN0cmNtcChmLCAiTUFDU1JDX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyB8PSBGX01BQ1NSQ19STkQ7CisKKwkJZWxzZSBpZiAoc3RyY21wKGYsICIhTUFDU1JDX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyAmPSB+Rl9NQUNTUkNfUk5EOworCisJCWVsc2UgaWYgKHN0cmNtcChmLCAiTUFDRFNUX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyB8PSBGX01BQ0RTVF9STkQ7CisKKwkJZWxzZSBpZiAoc3RyY21wKGYsICIhTUFDRFNUX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyAmPSB+Rl9NQUNEU1RfUk5EOworCisJCWVsc2UgaWYgKHN0cmNtcChmLCAiTVBMU19STkQiKSA9PSAwKQorCQkJcGt0X2Rldi0+ZmxhZ3MgfD0gRl9NUExTX1JORDsKKworCQllbHNlIGlmIChzdHJjbXAoZiwgIiFNUExTX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyAmPSB+Rl9NUExTX1JORDsKKworCQllbHNlIHsKKwkJCXNwcmludGYocGdfcmVzdWx0LAorCQkJCSJGbGFnIC06JXM6LSB1bmtub3duXG5BdmFpbGFibGUgZmxhZ3MsIChwcmVwZW5kICEgdG8gdW4tc2V0IGZsYWcpOlxuJXMiLAorCQkJCWYsCisJCQkJIklQU1JDX1JORCwgSVBEU1RfUk5ELCBUWFNJWkVfUk5ELCBVRFBTUkNfUk5ELCBVRFBEU1RfUk5ELCBNQUNTUkNfUk5ELCBNQUNEU1RfUk5EXG4iKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBmbGFncz0weCV4IiwgcGt0X2Rldi0+ZmxhZ3MpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCWlmICghc3RyY21wKG5hbWUsICJkc3RfbWluIikgfHwgIXN0cmNtcChuYW1lLCAiZHN0IikpIHsKIAkJbGVuID0gc3Rybl9sZW4oJnVzZXJfYnVmZmVyW2ldLCBzaXplb2YocGt0X2Rldi0+ZHN0X21pbikgLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAKLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wKGJ1ZiwgcGt0X2Rldi0+ZHN0X21pbikgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KHBrdF9kZXYtPmRzdF9taW4sIDAsIHNpemVvZihwa3RfZGV2LT5kc3RfbWluKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJuY3B5KHBrdF9kZXYtPmRzdF9taW4sIGJ1ZiwgbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmRhZGRyX21pbiA9IGluX2F0b24ocGt0X2Rldi0+ZHN0X21pbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT5jdXJfZGFkZHIgPSBwa3RfZGV2LT5kYWRkcl9taW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKGRlYnVnKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJwa3RnZW46IGRzdF9taW4gc2V0IHRvOiAlc1xuIiwgcGt0X2Rldi0+ZHN0X21pbik7Ci0gICAgICAgICAgICAgICAgaSArPSBsZW47CisJCWJ1ZltsZW5dID0gMDsKKwkJaWYgKHN0cmNtcChidWYsIHBrdF9kZXYtPmRzdF9taW4pICE9IDApIHsKKwkJCW1lbXNldChwa3RfZGV2LT5kc3RfbWluLCAwLCBzaXplb2YocGt0X2Rldi0+ZHN0X21pbikpOworCQkJc3RybmNweShwa3RfZGV2LT5kc3RfbWluLCBidWYsIGxlbik7CisJCQlwa3RfZGV2LT5kYWRkcl9taW4gPSBpbl9hdG9uKHBrdF9kZXYtPmRzdF9taW4pOworCQkJcGt0X2Rldi0+Y3VyX2RhZGRyID0gcGt0X2Rldi0+ZGFkZHJfbWluOworCQl9CisJCWlmIChkZWJ1ZykKKwkJCXByaW50aygicGt0Z2VuOiBkc3RfbWluIHNldCB0bzogJXNcbiIsCisJCQkgICAgICAgcGt0X2Rldi0+ZHN0X21pbik7CisJCWkgKz0gbGVuOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBkc3RfbWluPSVzIiwgcGt0X2Rldi0+ZHN0X21pbik7CiAJCXJldHVybiBjb3VudDsKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgImRzdF9tYXgiKSkgewogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihwa3RfZGV2LT5kc3RfbWF4KSAtIDEpOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwKSB7IHJldHVybiBsZW47IH0KKwkJaWYgKGxlbiA8IDApIHsKKwkJCXJldHVybiBsZW47CisJCX0KIAotICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgJnVzZXJfYnVmZmVyW2ldLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLSAgICAgICAgICAgICAgICBidWZbbGVuXSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNtcChidWYsIHBrdF9kZXYtPmRzdF9tYXgpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChwa3RfZGV2LT5kc3RfbWF4LCAwLCBzaXplb2YocGt0X2Rldi0+ZHN0X21heCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNweShwa3RfZGV2LT5kc3RfbWF4LCBidWYsIGxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT5kYWRkcl9tYXggPSBpbl9hdG9uKHBrdF9kZXYtPmRzdF9tYXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+Y3VyX2RhZGRyID0gcGt0X2Rldi0+ZGFkZHJfbWF4OwotICAgICAgICAgICAgICAgIH0KLQkJaWYoZGVidWcpCi0JCQlwcmludGsoInBrdGdlbjogZHN0X21heCBzZXQgdG86ICVzXG4iLCBwa3RfZGV2LT5kc3RfbWF4KTsKKwkJYnVmW2xlbl0gPSAwOworCQlpZiAoc3RyY21wKGJ1ZiwgcGt0X2Rldi0+ZHN0X21heCkgIT0gMCkgeworCQkJbWVtc2V0KHBrdF9kZXYtPmRzdF9tYXgsIDAsIHNpemVvZihwa3RfZGV2LT5kc3RfbWF4KSk7CisJCQlzdHJuY3B5KHBrdF9kZXYtPmRzdF9tYXgsIGJ1ZiwgbGVuKTsKKwkJCXBrdF9kZXYtPmRhZGRyX21heCA9IGluX2F0b24ocGt0X2Rldi0+ZHN0X21heCk7CisJCQlwa3RfZGV2LT5jdXJfZGFkZHIgPSBwa3RfZGV2LT5kYWRkcl9tYXg7CisJCX0KKwkJaWYgKGRlYnVnKQorCQkJcHJpbnRrKCJwa3RnZW46IGRzdF9tYXggc2V0IHRvOiAlc1xuIiwKKwkJCSAgICAgICBwa3RfZGV2LT5kc3RfbWF4KTsKIAkJaSArPSBsZW47CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IGRzdF9tYXg9JXMiLCBwa3RfZGV2LT5kc3RfbWF4KTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiZHN0NiIpKSB7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKGJ1ZikgLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgcmV0dXJuIGxlbjsgCisJCWlmIChsZW4gPCAwKQorCQkJcmV0dXJuIGxlbjsKIAogCQlwa3RfZGV2LT5mbGFncyB8PSBGX0lQVjY7CiAKLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gMDsKKwkJYnVmW2xlbl0gPSAwOwogCiAJCXNjYW5faXA2KGJ1ZiwgcGt0X2Rldi0+aW42X2RhZGRyLnM2X2FkZHIpOwotCQlmbXRfaXA2KGJ1ZiwgIHBrdF9kZXYtPmluNl9kYWRkci5zNl9hZGRyKTsKKwkJZm10X2lwNihidWYsIHBrdF9kZXYtPmluNl9kYWRkci5zNl9hZGRyKTsKIAogCQlpcHY2X2FkZHJfY29weSgmcGt0X2Rldi0+Y3VyX2luNl9kYWRkciwgJnBrdF9kZXYtPmluNl9kYWRkcik7CiAKLSAgICAgICAgICAgICAgICBpZihkZWJ1ZykgCisJCWlmIChkZWJ1ZykKIAkJCXByaW50aygicGt0Z2VuOiBkc3Q2IHNldCB0bzogJXNcbiIsIGJ1Zik7CiAKLSAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJaSArPSBsZW47CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IGRzdDY9JXMiLCBidWYpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCWlmICghc3RyY21wKG5hbWUsICJkc3Q2X21pbiIpKSB7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKGJ1ZikgLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgcmV0dXJuIGxlbjsgCisJCWlmIChsZW4gPCAwKQorCQkJcmV0dXJuIGxlbjsKIAogCQlwa3RfZGV2LT5mbGFncyB8PSBGX0lQVjY7CiAKLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gMDsKKwkJYnVmW2xlbl0gPSAwOwogCiAJCXNjYW5faXA2KGJ1ZiwgcGt0X2Rldi0+bWluX2luNl9kYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihidWYsICBwa3RfZGV2LT5taW5faW42X2RhZGRyLnM2X2FkZHIpOworCQlmbXRfaXA2KGJ1ZiwgcGt0X2Rldi0+bWluX2luNl9kYWRkci5zNl9hZGRyKTsKIAotCQlpcHY2X2FkZHJfY29weSgmcGt0X2Rldi0+Y3VyX2luNl9kYWRkciwgJnBrdF9kZXYtPm1pbl9pbjZfZGFkZHIpOwotICAgICAgICAgICAgICAgIGlmKGRlYnVnKSAKKwkJaXB2Nl9hZGRyX2NvcHkoJnBrdF9kZXYtPmN1cl9pbjZfZGFkZHIsCisJCQkgICAgICAgJnBrdF9kZXYtPm1pbl9pbjZfZGFkZHIpOworCQlpZiAoZGVidWcpCiAJCQlwcmludGsoInBrdGdlbjogZHN0Nl9taW4gc2V0IHRvOiAlc1xuIiwgYnVmKTsKIAotICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlpICs9IGxlbjsKIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZHN0Nl9taW49JXMiLCBidWYpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCWlmICghc3RyY21wKG5hbWUsICJkc3Q2X21heCIpKSB7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKGJ1ZikgLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgcmV0dXJuIGxlbjsgCisJCWlmIChsZW4gPCAwKQorCQkJcmV0dXJuIGxlbjsKIAogCQlwa3RfZGV2LT5mbGFncyB8PSBGX0lQVjY7CiAKLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gMDsKKwkJYnVmW2xlbl0gPSAwOwogCiAJCXNjYW5faXA2KGJ1ZiwgcGt0X2Rldi0+bWF4X2luNl9kYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihidWYsICBwa3RfZGV2LT5tYXhfaW42X2RhZGRyLnM2X2FkZHIpOworCQlmbXRfaXA2KGJ1ZiwgcGt0X2Rldi0+bWF4X2luNl9kYWRkci5zNl9hZGRyKTsKIAotICAgICAgICAgICAgICAgIGlmKGRlYnVnKSAKKwkJaWYgKGRlYnVnKQogCQkJcHJpbnRrKCJwa3RnZW46IGRzdDZfbWF4IHNldCB0bzogJXNcbiIsIGJ1Zik7CiAKLSAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJaSArPSBsZW47CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IGRzdDZfbWF4PSVzIiwgYnVmKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAic3JjNiIpKSB7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKGJ1ZikgLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgcmV0dXJuIGxlbjsgCisJCWlmIChsZW4gPCAwKQorCQkJcmV0dXJuIGxlbjsKIAogCQlwa3RfZGV2LT5mbGFncyB8PSBGX0lQVjY7CiAKLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCisJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gMDsKKwkJYnVmW2xlbl0gPSAwOwogCiAJCXNjYW5faXA2KGJ1ZiwgcGt0X2Rldi0+aW42X3NhZGRyLnM2X2FkZHIpOwotCQlmbXRfaXA2KGJ1ZiwgIHBrdF9kZXYtPmluNl9zYWRkci5zNl9hZGRyKTsKKwkJZm10X2lwNihidWYsIHBrdF9kZXYtPmluNl9zYWRkci5zNl9hZGRyKTsKIAogCQlpcHY2X2FkZHJfY29weSgmcGt0X2Rldi0+Y3VyX2luNl9zYWRkciwgJnBrdF9kZXYtPmluNl9zYWRkcik7CiAKLSAgICAgICAgICAgICAgICBpZihkZWJ1ZykgCisJCWlmIChkZWJ1ZykKIAkJCXByaW50aygicGt0Z2VuOiBzcmM2IHNldCB0bzogJXNcbiIsIGJ1Zik7Ci0JCQotICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCisJCWkgKz0gbGVuOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBzcmM2PSVzIiwgYnVmKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAic3JjX21pbiIpKSB7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKHBrdF9kZXYtPnNyY19taW4pIC0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQotICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKKwkJaWYgKGxlbiA8IDApIHsKKwkJCXJldHVybiBsZW47CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgJnVzZXJfYnVmZmVyW2ldLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICAgICAgYnVmW2xlbl0gPSAwOwotICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoYnVmLCBwa3RfZGV2LT5zcmNfbWluKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQocGt0X2Rldi0+c3JjX21pbiwgMCwgc2l6ZW9mKHBrdF9kZXYtPnNyY19taW4pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkocGt0X2Rldi0+c3JjX21pbiwgYnVmLCBsZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+c2FkZHJfbWluID0gaW5fYXRvbihwa3RfZGV2LT5zcmNfbWluKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl9zYWRkciA9IHBrdF9kZXYtPnNhZGRyX21pbjsKLSAgICAgICAgICAgICAgICB9Ci0JCWlmKGRlYnVnKQotCQkJcHJpbnRrKCJwa3RnZW46IHNyY19taW4gc2V0IHRvOiAlc1xuIiwgcGt0X2Rldi0+c3JjX21pbik7CisJCWJ1ZltsZW5dID0gMDsKKwkJaWYgKHN0cmNtcChidWYsIHBrdF9kZXYtPnNyY19taW4pICE9IDApIHsKKwkJCW1lbXNldChwa3RfZGV2LT5zcmNfbWluLCAwLCBzaXplb2YocGt0X2Rldi0+c3JjX21pbikpOworCQkJc3RybmNweShwa3RfZGV2LT5zcmNfbWluLCBidWYsIGxlbik7CisJCQlwa3RfZGV2LT5zYWRkcl9taW4gPSBpbl9hdG9uKHBrdF9kZXYtPnNyY19taW4pOworCQkJcGt0X2Rldi0+Y3VyX3NhZGRyID0gcGt0X2Rldi0+c2FkZHJfbWluOworCQl9CisJCWlmIChkZWJ1ZykKKwkJCXByaW50aygicGt0Z2VuOiBzcmNfbWluIHNldCB0bzogJXNcbiIsCisJCQkgICAgICAgcGt0X2Rldi0+c3JjX21pbik7CiAJCWkgKz0gbGVuOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBzcmNfbWluPSVzIiwgcGt0X2Rldi0+c3JjX21pbik7CiAJCXJldHVybiBjb3VudDsKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInNyY19tYXgiKSkgewogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihwa3RfZGV2LT5zcmNfbWF4KSAtIDEpOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwKSB7IHJldHVybiBsZW47IH0KLSAgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wKGJ1ZiwgcGt0X2Rldi0+c3JjX21heCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KHBrdF9kZXYtPnNyY19tYXgsIDAsIHNpemVvZihwa3RfZGV2LT5zcmNfbWF4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJuY3B5KHBrdF9kZXYtPnNyY19tYXgsIGJ1ZiwgbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPnNhZGRyX21heCA9IGluX2F0b24ocGt0X2Rldi0+c3JjX21heCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwa3RfZGV2LT5jdXJfc2FkZHIgPSBwa3RfZGV2LT5zYWRkcl9tYXg7Ci0gICAgICAgICAgICAgICAgfQotCQlpZihkZWJ1ZykKLQkJCXByaW50aygicGt0Z2VuOiBzcmNfbWF4IHNldCB0bzogJXNcbiIsIHBrdF9kZXYtPnNyY19tYXgpOworCQlidWZbbGVuXSA9IDA7CisJCWlmIChzdHJjbXAoYnVmLCBwa3RfZGV2LT5zcmNfbWF4KSAhPSAwKSB7CisJCQltZW1zZXQocGt0X2Rldi0+c3JjX21heCwgMCwgc2l6ZW9mKHBrdF9kZXYtPnNyY19tYXgpKTsKKwkJCXN0cm5jcHkocGt0X2Rldi0+c3JjX21heCwgYnVmLCBsZW4pOworCQkJcGt0X2Rldi0+c2FkZHJfbWF4ID0gaW5fYXRvbihwa3RfZGV2LT5zcmNfbWF4KTsKKwkJCXBrdF9kZXYtPmN1cl9zYWRkciA9IHBrdF9kZXYtPnNhZGRyX21heDsKKwkJfQorCQlpZiAoZGVidWcpCisJCQlwcmludGsoInBrdGdlbjogc3JjX21heCBzZXQgdG86ICVzXG4iLAorCQkJICAgICAgIHBrdF9kZXYtPnNyY19tYXgpOwogCQlpICs9IGxlbjsKIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogc3JjX21heD0lcyIsIHBrdF9kZXYtPnNyY19tYXgpOwogCQlyZXR1cm4gY291bnQ7CkBAIC0xMTg2LDE1ICsxMzMyLDE3IEBACiAJCXVuc2lnbmVkIGNoYXIgb2xkX2RtYWNbRVRIX0FMRU5dOwogCQl1bnNpZ25lZCBjaGFyICptID0gcGt0X2Rldi0+ZHN0X21hYzsKIAkJbWVtY3B5KG9sZF9kbWFjLCBwa3RfZGV2LT5kc3RfbWFjLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICAgICAgCisKIAkJbGVuID0gc3Rybl9sZW4oJnVzZXJfYnVmZmVyW2ldLCBzaXplb2YodmFsc3RyKSAtIDEpOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwKSB7IHJldHVybiBsZW47IH0KKwkJaWYgKGxlbiA8IDApIHsKKwkJCXJldHVybiBsZW47CisJCX0KIAkJbWVtc2V0KHZhbHN0ciwgMCwgc2l6ZW9mKHZhbHN0cikpOwotCQlpZiggY29weV9mcm9tX3VzZXIodmFsc3RyLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCisJCWlmIChjb3B5X2Zyb21fdXNlcih2YWxzdHIsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpICs9IGxlbjsKIAotCQlmb3IoKm0gPSAwOyp2ICYmIG0gPCBwa3RfZGV2LT5kc3RfbWFjICsgNjsgdisrKSB7CisJCWZvciAoKm0gPSAwOyAqdiAmJiBtIDwgcGt0X2Rldi0+ZHN0X21hYyArIDY7IHYrKykgewogCQkJaWYgKCp2ID49ICcwJyAmJiAqdiA8PSAnOScpIHsKIAkJCQkqbSAqPSAxNjsKIAkJCQkqbSArPSAqdiAtICcwJzsKQEAgLTEyMTYsNyArMTM2NCw3IEBACiAJCS8qIFNldCB1cCBEZXN0IE1BQyAqLwogCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG9sZF9kbWFjLCBwa3RfZGV2LT5kc3RfbWFjKSkKIAkJCW1lbWNweSgmKHBrdF9kZXYtPmhoWzBdKSwgcGt0X2Rldi0+ZHN0X21hYywgRVRIX0FMRU4pOwotICAgICAgICAgICAgICAgIAorCiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IGRzdG1hYyIpOwogCQlyZXR1cm4gY291bnQ7CiAJfQpAQCAtMTIyNSwxMyArMTM3MywxNSBAQAogCQl1bnNpZ25lZCBjaGFyICptID0gcGt0X2Rldi0+c3JjX21hYzsKIAogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZih2YWxzdHIpIC0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQorCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQogCQltZW1zZXQodmFsc3RyLCAwLCBzaXplb2YodmFsc3RyKSk7Ci0JCWlmKCBjb3B5X2Zyb21fdXNlcih2YWxzdHIsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkgCisJCWlmIChjb3B5X2Zyb21fdXNlcih2YWxzdHIsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpICs9IGxlbjsKIAotCQlmb3IoKm0gPSAwOyp2ICYmIG0gPCBwa3RfZGV2LT5zcmNfbWFjICsgNjsgdisrKSB7CisJCWZvciAoKm0gPSAwOyAqdiAmJiBtIDwgcGt0X2Rldi0+c3JjX21hYyArIDY7IHYrKykgewogCQkJaWYgKCp2ID49ICcwJyAmJiAqdiA8PSAnOScpIHsKIAkJCQkqbSAqPSAxNjsKIAkJCQkqbSArPSAqdiAtICcwJzsKQEAgLTEyNDgsMjEgKzEzOTgsMjMgQEAKIAkJCQltKys7CiAJCQkJKm0gPSAwOwogCQkJfQotCQl9CSAgCisJCX0KIAotICAgICAgICAgICAgICAgIHNwcmludGYocGdfcmVzdWx0LCAiT0s6IHNyY21hYyIpOworCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBzcmNtYWMiKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiY2xlYXJfY291bnRlcnMiKSkgewotICAgICAgICAgICAgICAgIHBrdGdlbl9jbGVhcl9jb3VudGVycyhwa3RfZGV2KTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBDbGVhcmluZyBjb3VudGVycy5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDsKLSAgICAgICAgfQorCWlmICghc3RyY21wKG5hbWUsICJjbGVhcl9jb3VudGVycyIpKSB7CisJCXBrdGdlbl9jbGVhcl9jb3VudGVycyhwa3RfZGV2KTsKKwkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogQ2xlYXJpbmcgY291bnRlcnMuXG4iKTsKKwkJcmV0dXJuIGNvdW50OworCX0KIAogCWlmICghc3RyY21wKG5hbWUsICJmbG93cyIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CiAJCWkgKz0gbGVuOwogCQlpZiAodmFsdWUgPiBNQVhfQ0ZMT1dTKQogCQkJdmFsdWUgPSBNQVhfQ0ZMT1dTOwpAQCAtMTI3NCwxMyArMTQyNiwyOCBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgImZsb3dsZW4iKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IDApIHsgcmV0dXJuIGxlbjsgfQorCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQogCQlpICs9IGxlbjsKIAkJcGt0X2Rldi0+bGZsb3cgPSB2YWx1ZTsKIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZmxvd2xlbj0ldSIsIHBrdF9kZXYtPmxmbG93KTsKIAkJcmV0dXJuIGNvdW50OwogCX0KLSAgICAgICAgCisKKwlpZiAoIXN0cmNtcChuYW1lLCAibXBscyIpKSB7CisJCXVuc2lnbmVkIG4sIG9mZnNldDsKKwkJbGVuID0gZ2V0X2xhYmVscygmdXNlcl9idWZmZXJbaV0sIHBrdF9kZXYpOworCQlpZiAobGVuIDwgMCkgeyByZXR1cm4gbGVuOyB9CisJCWkgKz0gbGVuOworCQlvZmZzZXQgPSBzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBtcGxzPSIpOworCQlmb3IobiA9IDA7IG4gPCBwa3RfZGV2LT5ucl9sYWJlbHM7IG4rKykKKwkJCW9mZnNldCArPSBzcHJpbnRmKHBnX3Jlc3VsdCArIG9mZnNldCwKKwkJCQkJICAiJTA4eCVzIiwgbnRvaGwocGt0X2Rldi0+bGFiZWxzW25dKSwKKwkJCQkJICBuID09IHBrdF9kZXYtPm5yX2xhYmVscy0xID8gIiIgOiAiLCIpOworCQlyZXR1cm4gY291bnQ7CisJfQorCiAJc3ByaW50Zihwa3RfZGV2LT5yZXN1bHQsICJObyBzdWNoIHBhcmFtZXRlciBcIiVzXCIiLCBuYW1lKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTEyOTEsMzUgKzE0NTgsMzUgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGt0Z2VuX2lmX2ZvcHMgPSB7Ci0JLm93bmVyCSAgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgID0gcGt0Z2VuX2lmX29wZW4sCi0gICAgICAgIC5yZWFkICAgICA9IHNlcV9yZWFkLAotCS5sbHNlZWsJICA9IHNlcV9sc2VlaywKLSAgICAgICAgLndyaXRlICAgID0gcGt0Z2VuX2lmX3dyaXRlLAotCS5yZWxlYXNlICA9IHNpbmdsZV9yZWxlYXNlLAorCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBwa3RnZW5faWZfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS53cml0ZSAgID0gcGt0Z2VuX2lmX3dyaXRlLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgaW50IHBrdGdlbl90aHJlYWRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLSAgICAgICAgc3RydWN0IHBrdGdlbl90aHJlYWQgKnQgPSBzZXEtPnByaXZhdGU7Ci0gICAgICAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldjsKIAogCUJVR19PTighdCk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIk5hbWU6ICVzICBtYXhfYmVmb3JlX3NvZnRpcnE6ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgdC0+bmFtZSwgdC0+bWF4X2JlZm9yZV9zb2Z0aXJxKTsKKwkJICAgdC0+bmFtZSwgdC0+bWF4X2JlZm9yZV9zb2Z0aXJxKTsKIAotICAgICAgICBzZXFfcHJpbnRmKHNlcSwgIlJ1bm5pbmc6ICIpOwotICAgICAgICAKLSAgICAgICAgaWZfbG9jayh0KTsKLSAgICAgICAgZm9yKHBrdF9kZXYgPSB0LT5pZl9saXN0O3BrdF9kZXY7IHBrdF9kZXYgPSBwa3RfZGV2LT5uZXh0KSAKLQkJaWYocGt0X2Rldi0+cnVubmluZykKKwlzZXFfcHJpbnRmKHNlcSwgIlJ1bm5pbmc6ICIpOworCisJaWZfbG9jayh0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KQorCQlpZiAocGt0X2Rldi0+cnVubmluZykKIAkJCXNlcV9wcmludGYoc2VxLCAiJXMgIiwgcGt0X2Rldi0+aWZuYW1lKTsKLSAgICAgICAgCi0gICAgICAgIHNlcV9wcmludGYoc2VxLCAiXG5TdG9wcGVkOiAiKTsKIAotICAgICAgICBmb3IocGt0X2RldiA9IHQtPmlmX2xpc3Q7cGt0X2RldjsgcGt0X2RldiA9IHBrdF9kZXYtPm5leHQpIAotCQlpZighcGt0X2Rldi0+cnVubmluZykKKwlzZXFfcHJpbnRmKHNlcSwgIlxuU3RvcHBlZDogIik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KQorCQlpZiAoIXBrdF9kZXYtPnJ1bm5pbmcpCiAJCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPmlmbmFtZSk7CiAKIAlpZiAodC0+cmVzdWx0WzBdKQpAQCAtMTMyNywzMCArMTQ5NCwzMCBAQAogCWVsc2UKIAkJc2VxX3ByaW50ZihzZXEsICJcblJlc3VsdDogTkFcbiIpOwogCi0gICAgICAgIGlmX3VubG9jayh0KTsKKwlpZl91bmxvY2sodCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3QgcGt0Z2VuX3RocmVhZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsCi0JCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKKwkJCQkgICBjb25zdCBjaGFyIF9fdXNlciAqIHVzZXJfYnVmZmVyLAorCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogb2Zmc2V0KQogewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgIHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IHNlcS0+cHJpdmF0ZTsKIAlpbnQgaSA9IDAsIG1heCwgbGVuLCByZXQ7CiAJY2hhciBuYW1lWzQwXTsKLSAgICAgICAgY2hhciAqcGdfcmVzdWx0OwotICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gMDsKKwljaGFyICpwZ19yZXN1bHQ7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7CiAKIAlpZiAoY291bnQgPCAxKSB7Ci0JCS8vCXNwcmludGYocGdfcmVzdWx0LCAiV3JvbmcgY29tbWFuZCBmb3JtYXQiKTsKKwkJLy8gICAgICBzcHJpbnRmKHBnX3Jlc3VsdCwgIldyb25nIGNvbW1hbmQgZm9ybWF0Iik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCW1heCA9IGNvdW50IC0gaTsKLSAgICAgICAgbGVuID0gY291bnRfdHJhaWxfY2hhcnMoJnVzZXJfYnVmZmVyW2ldLCBtYXgpOwotICAgICAgICBpZiAobGVuIDwgMCkKKwlsZW4gPSBjb3VudF90cmFpbF9jaGFycygmdXNlcl9idWZmZXJbaV0sIG1heCk7CisJaWYgKGxlbiA8IDApCiAJCXJldHVybiBsZW47CiAKIAlpICs9IGxlbjsKQEAgLTEzNTgsMjYgKzE1MjUsMjUgQEAKIAkvKiBSZWFkIHZhcmlhYmxlIG5hbWUgKi8KIAogCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKG5hbWUpIC0gMSk7Ci0gICAgICAgIGlmIChsZW4gPCAwKQorCWlmIChsZW4gPCAwKQogCQlyZXR1cm4gbGVuOwotCQorCiAJbWVtc2V0KG5hbWUsIDAsIHNpemVvZihuYW1lKSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaSArPSBsZW47CiAKLQltYXggPSBjb3VudCAtaTsKKwltYXggPSBjb3VudCAtIGk7CiAJbGVuID0gY291bnRfdHJhaWxfY2hhcnMoJnVzZXJfYnVmZmVyW2ldLCBtYXgpOwotICAgICAgICBpZiAobGVuIDwgMCkKKwlpZiAobGVuIDwgMCkKIAkJcmV0dXJuIGxlbjsKIAogCWkgKz0gbGVuOwogCiAJaWYgKGRlYnVnKQotCQlwcmludGsoInBrdGdlbjogdD0lcywgY291bnQ9JWx1XG4iLCBuYW1lLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGNvdW50KTsKKwkJcHJpbnRrKCJwa3RnZW46IHQ9JXMsIGNvdW50PSVsdVxuIiwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpY291bnQpOwogCi0JaWYoIXQpIHsKKwlpZiAoIXQpIHsKIAkJcHJpbnRrKCJwa3RnZW46IEVSUk9SOiBObyB0aHJlYWRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTEzODUsNDggKzE1NTEsNDcgQEAKIAogCXBnX3Jlc3VsdCA9ICYodC0+cmVzdWx0WzBdKTsKIAotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAiYWRkX2RldmljZSIpKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBmWzMyXTsKLSAgICAgICAgICAgICAgICBtZW1zZXQoZiwgMCwgMzIpOworCWlmICghc3RyY21wKG5hbWUsICJhZGRfZGV2aWNlIikpIHsKKwkJY2hhciBmWzMyXTsKKwkJbWVtc2V0KGYsIDAsIDMyKTsKIAkJbGVuID0gc3Rybl9sZW4oJnVzZXJfYnVmZmVyW2ldLCBzaXplb2YoZikgLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeyAKLQkJCXJldCA9IGxlbjsgCisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXQgPSBsZW47CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpZiggY29weV9mcm9tX3VzZXIoZiwgJnVzZXJfYnVmZmVyW2ldLCBsZW4pICkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpICs9IGxlbjsKLQkJdGhyZWFkX2xvY2soKTsKLSAgICAgICAgICAgICAgICBwa3RnZW5fYWRkX2RldmljZSh0LCBmKTsKLQkJdGhyZWFkX3VubG9jaygpOwotICAgICAgICAgICAgICAgIHJldCA9IGNvdW50OwotICAgICAgICAgICAgICAgIHNwcmludGYocGdfcmVzdWx0LCAiT0s6IGFkZF9kZXZpY2U9JXMiLCBmKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0gICAgICAgIGlmICghc3RyY21wKG5hbWUsICJyZW1fZGV2aWNlX2FsbCIpKSB7Ci0JCXRocmVhZF9sb2NrKCk7Ci0JCXQtPmNvbnRyb2wgfD0gVF9SRU1ERVY7Ci0JCXRocmVhZF91bmxvY2soKTsKLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTI1KSk7ICAvKiBQcm9wYWdhdGUgdGhyZWFkLT5jb250cm9sICAqLworCQltdXRleF9sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOworCQlwa3RnZW5fYWRkX2RldmljZSh0LCBmKTsKKwkJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogCQlyZXQgPSBjb3VudDsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiByZW1fZGV2aWNlX2FsbCIpOworCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBhZGRfZGV2aWNlPSVzIiwgZik7CiAJCWdvdG8gb3V0OwogCX0KIAotICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAibWF4X2JlZm9yZV9zb2Z0aXJxIikpIHsKLSAgICAgICAgICAgICAgICBsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCXRocmVhZF9sb2NrKCk7Ci0gICAgICAgICAgICAgICAgdC0+bWF4X2JlZm9yZV9zb2Z0aXJxID0gdmFsdWU7Ci0JCXRocmVhZF91bmxvY2soKTsKLSAgICAgICAgICAgICAgICByZXQgPSBjb3VudDsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBtYXhfYmVmb3JlX3NvZnRpcnE9JWx1IiwgdmFsdWUpOworCWlmICghc3RyY21wKG5hbWUsICJyZW1fZGV2aWNlX2FsbCIpKSB7CisJCW11dGV4X2xvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CisJCXQtPmNvbnRyb2wgfD0gVF9SRU1ERVZBTEw7CisJCW11dGV4X3VubG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTI1KSk7CS8qIFByb3BhZ2F0ZSB0aHJlYWQtPmNvbnRyb2wgICovCisJCXJldCA9IGNvdW50OworCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiByZW1fZGV2aWNlX2FsbCIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXN0cmNtcChuYW1lLCAibWF4X2JlZm9yZV9zb2Z0aXJxIikpIHsKKwkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOworCQltdXRleF9sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOworCQl0LT5tYXhfYmVmb3JlX3NvZnRpcnEgPSB2YWx1ZTsKKwkJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOworCQlyZXQgPSBjb3VudDsKKwkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogbWF4X2JlZm9yZV9zb2Z0aXJxPSVsdSIsIHZhbHVlKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJcmV0ID0gLUVJTlZBTDsKLSBvdXQ6Ci0KK291dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDM2LDQ3ICsxNjAxLDc4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBrdGdlbl90aHJlYWRfZm9wcyA9IHsKLQkub3duZXIJICA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSAgPSBwa3RnZW5fdGhyZWFkX29wZW4sCi0gICAgICAgIC5yZWFkICAgICA9IHNlcV9yZWFkLAotCS5sbHNlZWsJICA9IHNlcV9sc2VlaywKLSAgICAgICAgLndyaXRlICAgID0gcGt0Z2VuX3RocmVhZF93cml0ZSwKLQkucmVsZWFzZSAgPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gcGt0Z2VuX3RocmVhZF9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLndyaXRlICAgPSBwa3RnZW5fdGhyZWFkX3dyaXRlLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiAvKiBUaGluayBmaW5kIG9yIHJlbW92ZSBmb3IgTk4gKi8KLXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqX19wa3RnZW5fTk5fdGhyZWFkcyhjb25zdCBjaGFyKiBpZm5hbWUsIGludCByZW1vdmUpIAorc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpfX3BrdGdlbl9OTl90aHJlYWRzKGNvbnN0IGNoYXIgKmlmbmFtZSwgaW50IHJlbW92ZSkKIHsKIAlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdDsKIAlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiA9IE5VTEw7CiAKLSAgICAgICAgdCA9IHBrdGdlbl90aHJlYWRzOwotICAgICAgICAgICAgICAgIAotCXdoaWxlICh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmcGt0Z2VuX3RocmVhZHMsIHRoX2xpc3QpIHsKIAkJcGt0X2RldiA9IHBrdGdlbl9maW5kX2Rldih0LCBpZm5hbWUpOwogCQlpZiAocGt0X2RldikgewotCQkgICAgICAgICAgICAgICAgaWYocmVtb3ZlKSB7IAotCQkJCSAgICAgICAgaWZfbG9jayh0KTsKLQkJCQkgICAgICAgIHBrdGdlbl9yZW1vdmVfZGV2aWNlKHQsIHBrdF9kZXYpOwotCQkJCSAgICAgICAgaWZfdW5sb2NrKHQpOwotCQkJCX0KKwkJCWlmIChyZW1vdmUpIHsKKwkJCQlpZl9sb2NrKHQpOworCQkJCXBrdF9kZXYtPnJlbW92YWxfbWFyayA9IDE7CisJCQkJdC0+Y29udHJvbCB8PSBUX1JFTURFVjsKKwkJCQlpZl91bmxvY2sodCk7CisJCQl9CiAJCQlicmVhazsKIAkJfQotCQl0ID0gdC0+bmV4dDsKIAl9Ci0gICAgICAgIHJldHVybiBwa3RfZGV2OwotfQotCi1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKnBrdGdlbl9OTl90aHJlYWRzKGNvbnN0IGNoYXIqIGlmbmFtZSwgaW50IHJlbW92ZSkgCi17Ci0Jc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBOVUxMOwotCXRocmVhZF9sb2NrKCk7Ci0JcGt0X2RldiA9IF9fcGt0Z2VuX05OX3RocmVhZHMoaWZuYW1lLCByZW1vdmUpOwotICAgICAgICB0aHJlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHBrdF9kZXY7CiB9CiAKLXN0YXRpYyBpbnQgcGt0Z2VuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKSAKKy8qCisgKiBtYXJrIGEgZGV2aWNlIGZvciByZW1vdmFsCisgKi8KK3N0YXRpYyBpbnQgcGt0Z2VuX21hcmtfZGV2aWNlKGNvbnN0IGNoYXIgKmlmbmFtZSkKK3sKKwlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiA9IE5VTEw7CisJY29uc3QgaW50IG1heF90cmllcyA9IDEwLCBtc2VjX3Blcl90cnkgPSAxMjU7CisJaW50IGkgPSAwOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKKwlQR19ERUJVRyhwcmludGsoInBrdGdlbjogcGt0Z2VuX21hcmtfZGV2aWNlIG1hcmtpbmcgJXMgZm9yIHJlbW92YWxcbiIsCisJCQlpZm5hbWUpKTsKKworCXdoaWxlICgxKSB7CisKKwkJcGt0X2RldiA9IF9fcGt0Z2VuX05OX3RocmVhZHMoaWZuYW1lLCBSRU1PVkUpOworCQlpZiAocGt0X2RldiA9PSBOVUxMKQorCQkJYnJlYWs7CS8qIHN1Y2Nlc3MgKi8KKworCQltdXRleF91bmxvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CisJCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiBwa3RnZW5fbWFya19kZXZpY2Ugd2FpdGluZyBmb3IgJXMgIgorCQkJCSJ0byBkaXNhcHBlYXIuLi4uXG4iLCBpZm5hbWUpKTsKKwkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMobXNlY19wZXJfdHJ5KSk7CisJCW11dGV4X2xvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CisKKwkJaWYgKCsraSA+PSBtYXhfdHJpZXMpIHsKKwkJCXByaW50aygicGt0Z2VuX21hcmtfZGV2aWNlOiB0aW1lZCBvdXQgYWZ0ZXIgd2FpdGluZyAiCisJCQkgICAgICAgIiVkIG1zZWMgZm9yIGRldmljZSAlcyB0byBiZSByZW1vdmVkXG4iLAorCQkJICAgICAgIG1zZWNfcGVyX3RyeSAqIGksIGlmbmFtZSk7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCX0KKworCW11dGV4X3VubG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGt0Z2VuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKShwdHIpOwogCkBAIC0xNDkxLDkgKzE2ODcsOSBAQAogCWNhc2UgTkVUREVWX1VQOgogCQkvKiBJZ25vcmUgZm9yIG5vdyAqLwogCQlicmVhazsKLQkJCisKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgotICAgICAgICAgICAgICAgIHBrdGdlbl9OTl90aHJlYWRzKGRldi0+bmFtZSwgUkVNT1ZFKTsKKwkJcGt0Z2VuX21hcmtfZGV2aWNlKGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX07CiAKQEAgLTE1MDIsMTUgKzE2OTgsMTYgQEAKIAogLyogQXNzb2NpYXRlIHBrdGdlbl9kZXYgd2l0aCBhIGRldmljZS4gKi8KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlKiBwa3RnZW5fc2V0dXBfZGV2KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KSB7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnBrdGdlbl9zZXR1cF9kZXYoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCit7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm9kZXY7CiAKIAkvKiBDbGVhbiBvbGQgc2V0dXBzICovCiAKIAlpZiAocGt0X2Rldi0+b2RldikgewogCQlkZXZfcHV0KHBrdF9kZXYtPm9kZXYpOwotICAgICAgICAgICAgICAgIHBrdF9kZXYtPm9kZXYgPSBOVUxMOwotICAgICAgICB9CisJCXBrdF9kZXYtPm9kZXYgPSBOVUxMOworCX0KIAogCW9kZXYgPSBkZXZfZ2V0X2J5X25hbWUocGt0X2Rldi0+aWZuYW1lKTsKIApAQCAtMTUxOSw3ICsxNzE2LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCWlmIChvZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikgewotCQlwcmludGsoInBrdGdlbjogbm90IGFuIGV0aGVybmV0IGRldmljZTogXCIlc1wiXG4iLCBwa3RfZGV2LT5pZm5hbWUpOworCQlwcmludGsoInBrdGdlbjogbm90IGFuIGV0aGVybmV0IGRldmljZTogXCIlc1wiXG4iLAorCQkgICAgICAgcGt0X2Rldi0+aWZuYW1lKTsKIAkJZ290byBvdXRfcHV0OwogCX0KIAlpZiAoIW5ldGlmX3J1bm5pbmcob2RldikpIHsKQEAgLTE1MjcsMTMgKzE3MjUsMTMgQEAKIAkJZ290byBvdXRfcHV0OwogCX0KIAlwa3RfZGV2LT5vZGV2ID0gb2RldjsKLQkKLSAgICAgICAgcmV0dXJuIHBrdF9kZXYtPm9kZXY7CisKKwlyZXR1cm4gcGt0X2Rldi0+b2RldjsKIAogb3V0X3B1dDoKIAlkZXZfcHV0KG9kZXYpOwogb3V0OgotIAlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIAogfQogCkBAIC0xNTQzLDU5ICsxNzQxLDY0IEBACiBzdGF0aWMgdm9pZCBwa3RnZW5fc2V0dXBfaW5qZWN0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewogCS8qIFRyeSBvbmNlIG1vcmUsIGp1c3QgaW4gY2FzZSBpdCB3b3JrcyBub3cuICovCi0gICAgICAgIGlmICghcGt0X2Rldi0+b2RldikgCi0gICAgICAgICAgICAgICAgcGt0Z2VuX3NldHVwX2Rldihwa3RfZGV2KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghcGt0X2Rldi0+b2RldikgewotICAgICAgICAgICAgICAgIHByaW50aygicGt0Z2VuOiBFUlJPUjogcGt0X2Rldi0+b2RldiA9PSBOVUxMIGluIHNldHVwX2luamVjdC5cbiIpOwotICAgICAgICAgICAgICAgIHNwcmludGYocGt0X2Rldi0+cmVzdWx0LCAiRVJST1I6IHBrdF9kZXYtPm9kZXYgPT0gTlVMTCBpbiBzZXR1cF9pbmplY3QuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8qIERlZmF1bHQgdG8gdGhlIGludGVyZmFjZSdzIG1hYyBpZiBub3QgZXhwbGljaXRseSBzZXQuICovCisJaWYgKCFwa3RfZGV2LT5vZGV2KQorCQlwa3RnZW5fc2V0dXBfZGV2KHBrdF9kZXYpOworCisJaWYgKCFwa3RfZGV2LT5vZGV2KSB7CisJCXByaW50aygicGt0Z2VuOiBFUlJPUjogcGt0X2Rldi0+b2RldiA9PSBOVUxMIGluIHNldHVwX2luamVjdC5cbiIpOworCQlzcHJpbnRmKHBrdF9kZXYtPnJlc3VsdCwKKwkJCSJFUlJPUjogcGt0X2Rldi0+b2RldiA9PSBOVUxMIGluIHNldHVwX2luamVjdC5cbiIpOworCQlyZXR1cm47CisJfQorCisJLyogRGVmYXVsdCB0byB0aGUgaW50ZXJmYWNlJ3MgbWFjIGlmIG5vdCBleHBsaWNpdGx5IHNldC4gKi8KIAogCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocGt0X2Rldi0+c3JjX21hYykpCi0JICAgICAgIG1lbWNweSgmKHBrdF9kZXYtPmhoWzZdKSwgcGt0X2Rldi0+b2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KCYocGt0X2Rldi0+aGhbNl0pLCBwa3RfZGV2LT5vZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCi0gICAgICAgIC8qIFNldCB1cCBEZXN0IE1BQyAqLworCS8qIFNldCB1cCBEZXN0IE1BQyAqLwogCW1lbWNweSgmKHBrdF9kZXYtPmhoWzBdKSwgcGt0X2Rldi0+ZHN0X21hYywgRVRIX0FMRU4pOwogCi0gICAgICAgIC8qIFNldCB1cCBwa3Qgc2l6ZSAqLwotICAgICAgICBwa3RfZGV2LT5jdXJfcGt0X3NpemUgPSBwa3RfZGV2LT5taW5fcGt0X3NpemU7Ci0JCi0JaWYocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpIHsKKwkvKiBTZXQgdXAgcGt0IHNpemUgKi8KKwlwa3RfZGV2LT5jdXJfcGt0X3NpemUgPSBwa3RfZGV2LT5taW5fcGt0X3NpemU7CisKKwlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpIHsKIAkJLyoKIAkJICogU2tpcCB0aGlzIGF1dG9tYXRpYyBhZGRyZXNzIHNldHRpbmcgdW50aWwgbG9ja3Mgb3IgZnVuY3Rpb25zIAogCQkgKiBnZXRzIGV4cG9ydGVkCiAJCSAqLwogCiAjaWZkZWYgTk9UTk9XCi0JCWludCBpLCBzZXQgPSAwLCBlcnI9MTsKKwkJaW50IGksIHNldCA9IDAsIGVyciA9IDE7CiAJCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAKLQkJZm9yKGk9MDsgaTwgSU42X0FERFJfSFNJWkU7IGkrKykKLQkJCWlmKHBrdF9kZXYtPmN1cl9pbjZfc2FkZHIuczZfYWRkcltpXSkgeworCQlmb3IgKGkgPSAwOyBpIDwgSU42X0FERFJfSFNJWkU7IGkrKykKKwkJCWlmIChwa3RfZGV2LT5jdXJfaW42X3NhZGRyLnM2X2FkZHJbaV0pIHsKIAkJCQlzZXQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQogCi0JCWlmKCFzZXQpIHsKLQkJCQorCQlpZiAoIXNldCkgeworCiAJCQkvKgogCQkJICogVXNlIGxpbmtsZXZlbCBhZGRyZXNzIGlmIHVuY29uZmlndXJlZC4KIAkJCSAqCiAJCQkgKiB1c2UgaXB2Nl9nZXRfbGxhZGRyIGlmL3doZW4gaXQncyBnZXQgZXhwb3J0ZWQKIAkJCSAqLwogCi0KIAkJCXJlYWRfbG9jaygmYWRkcmNvbmZfbG9jayk7CiAJCQlpZiAoKGlkZXYgPSBfX2luNl9kZXZfZ2V0KHBrdF9kZXYtPm9kZXYpKSAhPSBOVUxMKSB7CiAJCQkJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwOwogCiAJCQkJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJCQlmb3IgKGlmcD1pZGV2LT5hZGRyX2xpc3Q7IGlmcDsgaWZwPWlmcC0+aWZfbmV4dCkgewotCQkJCQlpZiAoaWZwLT5zY29wZSA9PSBJRkFfTElOSyAmJiAhKGlmcC0+ZmxhZ3MmSUZBX0ZfVEVOVEFUSVZFKSkgewotCQkJCQkJaXB2Nl9hZGRyX2NvcHkoJnBrdF9kZXYtPmN1cl9pbjZfc2FkZHIsICZpZnAtPmFkZHIpOworCQkJCWZvciAoaWZwID0gaWRldi0+YWRkcl9saXN0OyBpZnA7CisJCQkJICAgICBpZnAgPSBpZnAtPmlmX25leHQpIHsKKwkJCQkJaWYgKGlmcC0+c2NvcGUgPT0gSUZBX0xJTksKKwkJCQkJICAgICYmICEoaWZwLT4KKwkJCQkJCSBmbGFncyAmIElGQV9GX1RFTlRBVElWRSkpIHsKKwkJCQkJCWlwdjZfYWRkcl9jb3B5KCZwa3RfZGV2LT4KKwkJCQkJCQkgICAgICAgY3VyX2luNl9zYWRkciwKKwkJCQkJCQkgICAgICAgJmlmcC0+YWRkcik7CiAJCQkJCQllcnIgPSAwOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KQEAgLTE2MDMsMjggKzE4MDYsMjggQEAKIAkJCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJCQl9CiAJCQlyZWFkX3VubG9jaygmYWRkcmNvbmZfbG9jayk7Ci0JCQlpZihlcnIpCXByaW50aygicGt0Z2VuOiBFUlJPUjogSVB2NiBsaW5rIGFkZHJlc3Mgbm90IGF2YWlsYmxlLlxuIik7CisJCQlpZiAoZXJyKQorCQkJCXByaW50aygicGt0Z2VuOiBFUlJPUjogSVB2NiBsaW5rIGFkZHJlc3Mgbm90IGF2YWlsYmxlLlxuIik7CiAJCX0KICNlbmRpZgotCX0gCi0JZWxzZSB7CisJfSBlbHNlIHsKIAkJcGt0X2Rldi0+c2FkZHJfbWluID0gMDsKIAkJcGt0X2Rldi0+c2FkZHJfbWF4ID0gMDsKIAkJaWYgKHN0cmxlbihwa3RfZGV2LT5zcmNfbWluKSA9PSAwKSB7Ci0JCQkKLQkJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsgCisKKwkJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAogCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShwa3RfZGV2LT5vZGV2KTsKIAkJCWlmIChpbl9kZXYpIHsKIAkJCQlpZiAoaW5fZGV2LT5pZmFfbGlzdCkgewotCQkJCQlwa3RfZGV2LT5zYWRkcl9taW4gPSBpbl9kZXYtPmlmYV9saXN0LT5pZmFfYWRkcmVzczsKKwkJCQkJcGt0X2Rldi0+c2FkZHJfbWluID0KKwkJCQkJICAgIGluX2Rldi0+aWZhX2xpc3QtPmlmYV9hZGRyZXNzOwogCQkJCQlwa3RfZGV2LT5zYWRkcl9tYXggPSBwa3RfZGV2LT5zYWRkcl9taW47CiAJCQkJfQogCQkJfQogCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlwa3RfZGV2LT5zYWRkcl9taW4gPSBpbl9hdG9uKHBrdF9kZXYtPnNyY19taW4pOwogCQkJcGt0X2Rldi0+c2FkZHJfbWF4ID0gaW5fYXRvbihwa3RfZGV2LT5zcmNfbWF4KTsKIAkJfQpAQCAtMTYzMiwxMyArMTgzNSwxMyBAQAogCQlwa3RfZGV2LT5kYWRkcl9taW4gPSBpbl9hdG9uKHBrdF9kZXYtPmRzdF9taW4pOwogCQlwa3RfZGV2LT5kYWRkcl9tYXggPSBpbl9hdG9uKHBrdF9kZXYtPmRzdF9tYXgpOwogCX0KLSAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJyZW50IHZhbHVlcy4gKi8KLSAgICAgICAgcGt0X2Rldi0+Y3VyX2RzdF9tYWNfb2Zmc2V0ID0gMDsKLSAgICAgICAgcGt0X2Rldi0+Y3VyX3NyY19tYWNfb2Zmc2V0ID0gMDsKLSAgICAgICAgcGt0X2Rldi0+Y3VyX3NhZGRyID0gcGt0X2Rldi0+c2FkZHJfbWluOwotICAgICAgICBwa3RfZGV2LT5jdXJfZGFkZHIgPSBwa3RfZGV2LT5kYWRkcl9taW47Ci0gICAgICAgIHBrdF9kZXYtPmN1cl91ZHBfZHN0ID0gcGt0X2Rldi0+dWRwX2RzdF9taW47Ci0gICAgICAgIHBrdF9kZXYtPmN1cl91ZHBfc3JjID0gcGt0X2Rldi0+dWRwX3NyY19taW47CisJLyogSW5pdGlhbGl6ZSBjdXJyZW50IHZhbHVlcy4gKi8KKwlwa3RfZGV2LT5jdXJfZHN0X21hY19vZmZzZXQgPSAwOworCXBrdF9kZXYtPmN1cl9zcmNfbWFjX29mZnNldCA9IDA7CisJcGt0X2Rldi0+Y3VyX3NhZGRyID0gcGt0X2Rldi0+c2FkZHJfbWluOworCXBrdF9kZXYtPmN1cl9kYWRkciA9IHBrdF9kZXYtPmRhZGRyX21pbjsKKwlwa3RfZGV2LT5jdXJfdWRwX2RzdCA9IHBrdF9kZXYtPnVkcF9kc3RfbWluOworCXBrdF9kZXYtPmN1cl91ZHBfc3JjID0gcGt0X2Rldi0+dWRwX3NyY19taW47CiAJcGt0X2Rldi0+bmZsb3dzID0gMDsKIH0KIApAQCAtMTY1MSw3ICsxODU0LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJzbGVlcGluZyBmb3IgJWRcbiIsIChpbnQpKHNwaW5fdW50aWxfdXMgLSBub3cpKTsKIAl3aGlsZSAobm93IDwgc3Bpbl91bnRpbF91cykgewogCQkvKiBUT0RPOiBvcHRpbWl6ZSBzbGVlcGluZyBiZWhhdmlvciAqLwotCQlpZiAoc3Bpbl91bnRpbF91cyAtIG5vdyA+IGppZmZpZXNfdG9fdXNlY3MoMSkrMSkKKwkJaWYgKHNwaW5fdW50aWxfdXMgLSBub3cgPiBqaWZmaWVzX3RvX3VzZWNzKDEpICsgMSkKIAkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKIAkJZWxzZSBpZiAoc3Bpbl91bnRpbF91cyAtIG5vdyA+IDEwMCkgewogCQkJZG9fc29mdGlycSgpOwpAQCAtMTY2NywxMDIgKzE4NzAsMTE5IEBACiAJcGt0X2Rldi0+aWRsZV9hY2MgKz0gbm93IC0gc3RhcnQ7CiB9CiAKLQogLyogSW5jcmVtZW50L3JhbmRvbWl6ZSBoZWFkZXJzIGFjY29yZGluZyB0byBmbGFncyBhbmQgY3VycmVudCB2YWx1ZXMKICAqIGZvciBJUCBzcmMvZGVzdCwgVURQIHNyYy9kc3QgcG9ydCwgTUFDLUFkZHIgc3JjL2RzdAogICovCi1zdGF0aWMgdm9pZCBtb2RfY3VyX2hlYWRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpIHsgICAgICAgIAotICAgICAgICBfX3UzMiBpbW47Ci0gICAgICAgIF9fdTMyIGlteDsKLQlpbnQgIGZsb3cgPSAwOworc3RhdGljIHZvaWQgbW9kX2N1cl9oZWFkZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQoreworCV9fdTMyIGltbjsKKwlfX3UzMiBpbXg7CisJaW50IGZsb3cgPSAwOwogCi0JaWYocGt0X2Rldi0+Y2Zsb3dzKSAgeworCWlmIChwa3RfZGV2LT5jZmxvd3MpIHsKIAkJZmxvdyA9IHBrdGdlbl9yYW5kb20oKSAlIHBrdF9kZXYtPmNmbG93czsKLQkJCisKIAkJaWYgKHBrdF9kZXYtPmZsb3dzW2Zsb3ddLmNvdW50ID4gcGt0X2Rldi0+bGZsb3cpCiAJCQlwa3RfZGV2LT5mbG93c1tmbG93XS5jb3VudCA9IDA7Ci0JfQkJCQkJCQotCisJfQogCiAJLyogIERlYWwgd2l0aCBzb3VyY2UgTUFDICovCi0gICAgICAgIGlmIChwa3RfZGV2LT5zcmNfbWFjX2NvdW50ID4gMSkgewotICAgICAgICAgICAgICAgIF9fdTMyIG1jOwotICAgICAgICAgICAgICAgIF9fdTMyIHRtcDsKKwlpZiAocGt0X2Rldi0+c3JjX21hY19jb3VudCA+IDEpIHsKKwkJX191MzIgbWM7CisJCV9fdTMyIHRtcDsKIAotICAgICAgICAgICAgICAgIGlmIChwa3RfZGV2LT5mbGFncyAmIEZfTUFDU1JDX1JORCkgCi0gICAgICAgICAgICAgICAgICAgICAgICBtYyA9IHBrdGdlbl9yYW5kb20oKSAlIChwa3RfZGV2LT5zcmNfbWFjX2NvdW50KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1jID0gcGt0X2Rldi0+Y3VyX3NyY19tYWNfb2Zmc2V0Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGt0X2Rldi0+Y3VyX3NyY19tYWNfb2Zmc2V0ID4gcGt0X2Rldi0+c3JjX21hY19jb3VudCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl9zcmNfbWFjX29mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX01BQ1NSQ19STkQpCisJCQltYyA9IHBrdGdlbl9yYW5kb20oKSAlIChwa3RfZGV2LT5zcmNfbWFjX2NvdW50KTsKKwkJZWxzZSB7CisJCQltYyA9IHBrdF9kZXYtPmN1cl9zcmNfbWFjX29mZnNldCsrOworCQkJaWYgKHBrdF9kZXYtPmN1cl9zcmNfbWFjX29mZnNldCA+CisJCQkgICAgcGt0X2Rldi0+c3JjX21hY19jb3VudCkKKwkJCQlwa3RfZGV2LT5jdXJfc3JjX21hY19vZmZzZXQgPSAwOworCQl9CiAKLSAgICAgICAgICAgICAgICB0bXAgPSBwa3RfZGV2LT5zcmNfbWFjWzVdICsgKG1jICYgMHhGRik7Ci0gICAgICAgICAgICAgICAgcGt0X2Rldi0+aGhbMTFdID0gdG1wOwotICAgICAgICAgICAgICAgIHRtcCA9IChwa3RfZGV2LT5zcmNfbWFjWzRdICsgKChtYyA+PiA4KSAmIDB4RkYpICsgKHRtcCA+PiA4KSk7Ci0gICAgICAgICAgICAgICAgcGt0X2Rldi0+aGhbMTBdID0gdG1wOwotICAgICAgICAgICAgICAgIHRtcCA9IChwa3RfZGV2LT5zcmNfbWFjWzNdICsgKChtYyA+PiAxNikgJiAweEZGKSArICh0bXAgPj4gOCkpOwotICAgICAgICAgICAgICAgIHBrdF9kZXYtPmhoWzldID0gdG1wOwotICAgICAgICAgICAgICAgIHRtcCA9IChwa3RfZGV2LT5zcmNfbWFjWzJdICsgKChtYyA+PiAyNCkgJiAweEZGKSArICh0bXAgPj4gOCkpOwotICAgICAgICAgICAgICAgIHBrdF9kZXYtPmhoWzhdID0gdG1wOwotICAgICAgICAgICAgICAgIHRtcCA9IChwa3RfZGV2LT5zcmNfbWFjWzFdICsgKHRtcCA+PiA4KSk7Ci0gICAgICAgICAgICAgICAgcGt0X2Rldi0+aGhbN10gPSB0bXA7ICAgICAgICAKLSAgICAgICAgfQorCQl0bXAgPSBwa3RfZGV2LT5zcmNfbWFjWzVdICsgKG1jICYgMHhGRik7CisJCXBrdF9kZXYtPmhoWzExXSA9IHRtcDsKKwkJdG1wID0gKHBrdF9kZXYtPnNyY19tYWNbNF0gKyAoKG1jID4+IDgpICYgMHhGRikgKyAodG1wID4+IDgpKTsKKwkJcGt0X2Rldi0+aGhbMTBdID0gdG1wOworCQl0bXAgPSAocGt0X2Rldi0+c3JjX21hY1szXSArICgobWMgPj4gMTYpICYgMHhGRikgKyAodG1wID4+IDgpKTsKKwkJcGt0X2Rldi0+aGhbOV0gPSB0bXA7CisJCXRtcCA9IChwa3RfZGV2LT5zcmNfbWFjWzJdICsgKChtYyA+PiAyNCkgJiAweEZGKSArICh0bXAgPj4gOCkpOworCQlwa3RfZGV2LT5oaFs4XSA9IHRtcDsKKwkJdG1wID0gKHBrdF9kZXYtPnNyY19tYWNbMV0gKyAodG1wID4+IDgpKTsKKwkJcGt0X2Rldi0+aGhbN10gPSB0bXA7CisJfQogCi0gICAgICAgIC8qICBEZWFsIHdpdGggRGVzdGluYXRpb24gTUFDICovCi0gICAgICAgIGlmIChwa3RfZGV2LT5kc3RfbWFjX2NvdW50ID4gMSkgewotICAgICAgICAgICAgICAgIF9fdTMyIG1jOwotICAgICAgICAgICAgICAgIF9fdTMyIHRtcDsKKwkvKiAgRGVhbCB3aXRoIERlc3RpbmF0aW9uIE1BQyAqLworCWlmIChwa3RfZGV2LT5kc3RfbWFjX2NvdW50ID4gMSkgeworCQlfX3UzMiBtYzsKKwkJX191MzIgdG1wOwogCi0gICAgICAgICAgICAgICAgaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9NQUNEU1RfUk5EKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1jID0gcGt0Z2VuX3JhbmRvbSgpICUgKHBrdF9kZXYtPmRzdF9tYWNfY291bnQpOworCQlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX01BQ0RTVF9STkQpCisJCQltYyA9IHBrdGdlbl9yYW5kb20oKSAlIChwa3RfZGV2LT5kc3RfbWFjX2NvdW50KTsKIAotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbWMgPSBwa3RfZGV2LT5jdXJfZHN0X21hY19vZmZzZXQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwa3RfZGV2LT5jdXJfZHN0X21hY19vZmZzZXQgPiBwa3RfZGV2LT5kc3RfbWFjX2NvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl9kc3RfbWFjX29mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorCQllbHNlIHsKKwkJCW1jID0gcGt0X2Rldi0+Y3VyX2RzdF9tYWNfb2Zmc2V0Kys7CisJCQlpZiAocGt0X2Rldi0+Y3VyX2RzdF9tYWNfb2Zmc2V0ID4KKwkJCSAgICBwa3RfZGV2LT5kc3RfbWFjX2NvdW50KSB7CisJCQkJcGt0X2Rldi0+Y3VyX2RzdF9tYWNfb2Zmc2V0ID0gMDsKKwkJCX0KKwkJfQogCi0gICAgICAgICAgICAgICAgdG1wID0gcGt0X2Rldi0+ZHN0X21hY1s1XSArIChtYyAmIDB4RkYpOwotICAgICAgICAgICAgICAgIHBrdF9kZXYtPmhoWzVdID0gdG1wOwotICAgICAgICAgICAgICAgIHRtcCA9IChwa3RfZGV2LT5kc3RfbWFjWzRdICsgKChtYyA+PiA4KSAmIDB4RkYpICsgKHRtcCA+PiA4KSk7Ci0gICAgICAgICAgICAgICAgcGt0X2Rldi0+aGhbNF0gPSB0bXA7Ci0gICAgICAgICAgICAgICAgdG1wID0gKHBrdF9kZXYtPmRzdF9tYWNbM10gKyAoKG1jID4+IDE2KSAmIDB4RkYpICsgKHRtcCA+PiA4KSk7Ci0gICAgICAgICAgICAgICAgcGt0X2Rldi0+aGhbM10gPSB0bXA7Ci0gICAgICAgICAgICAgICAgdG1wID0gKHBrdF9kZXYtPmRzdF9tYWNbMl0gKyAoKG1jID4+IDI0KSAmIDB4RkYpICsgKHRtcCA+PiA4KSk7Ci0gICAgICAgICAgICAgICAgcGt0X2Rldi0+aGhbMl0gPSB0bXA7Ci0gICAgICAgICAgICAgICAgdG1wID0gKHBrdF9kZXYtPmRzdF9tYWNbMV0gKyAodG1wID4+IDgpKTsKLSAgICAgICAgICAgICAgICBwa3RfZGV2LT5oaFsxXSA9IHRtcDsgICAgICAgIAotICAgICAgICB9CisJCXRtcCA9IHBrdF9kZXYtPmRzdF9tYWNbNV0gKyAobWMgJiAweEZGKTsKKwkJcGt0X2Rldi0+aGhbNV0gPSB0bXA7CisJCXRtcCA9IChwa3RfZGV2LT5kc3RfbWFjWzRdICsgKChtYyA+PiA4KSAmIDB4RkYpICsgKHRtcCA+PiA4KSk7CisJCXBrdF9kZXYtPmhoWzRdID0gdG1wOworCQl0bXAgPSAocGt0X2Rldi0+ZHN0X21hY1szXSArICgobWMgPj4gMTYpICYgMHhGRikgKyAodG1wID4+IDgpKTsKKwkJcGt0X2Rldi0+aGhbM10gPSB0bXA7CisJCXRtcCA9IChwa3RfZGV2LT5kc3RfbWFjWzJdICsgKChtYyA+PiAyNCkgJiAweEZGKSArICh0bXAgPj4gOCkpOworCQlwa3RfZGV2LT5oaFsyXSA9IHRtcDsKKwkJdG1wID0gKHBrdF9kZXYtPmRzdF9tYWNbMV0gKyAodG1wID4+IDgpKTsKKwkJcGt0X2Rldi0+aGhbMV0gPSB0bXA7CisJfQogCi0gICAgICAgIGlmIChwa3RfZGV2LT51ZHBfc3JjX21pbiA8IHBrdF9kZXYtPnVkcF9zcmNfbWF4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9VRFBTUkNfUk5EKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl91ZHBfc3JjID0gKChwa3RnZW5fcmFuZG9tKCkgJSAocGt0X2Rldi0+dWRwX3NyY19tYXggLSBwa3RfZGV2LT51ZHBfc3JjX21pbikpICsgcGt0X2Rldi0+dWRwX3NyY19taW4pOworCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfTVBMU19STkQpIHsKKwkJdW5zaWduZWQgaTsKKwkJZm9yKGkgPSAwOyBpIDwgcGt0X2Rldi0+bnJfbGFiZWxzOyBpKyspCisJCQlpZiAocGt0X2Rldi0+bGFiZWxzW2ldICYgTVBMU19TVEFDS19CT1RUT00pCisJCQkJcGt0X2Rldi0+bGFiZWxzW2ldID0gTVBMU19TVEFDS19CT1RUT00gfAorCQkJCQkJICAgICAocGt0Z2VuX3JhbmRvbSgpICYKKwkJCQkJCSAgICAgIGh0b25sKDB4MDAwZmZmZmYpKTsKKwl9CiAKLSAgICAgICAgICAgICAgICBlbHNlIHsKKwlpZiAocGt0X2Rldi0+dWRwX3NyY19taW4gPCBwa3RfZGV2LT51ZHBfc3JjX21heCkgeworCQlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX1VEUFNSQ19STkQpCisJCQlwa3RfZGV2LT5jdXJfdWRwX3NyYyA9CisJCQkgICAgKChwa3RnZW5fcmFuZG9tKCkgJQorCQkJICAgICAgKHBrdF9kZXYtPnVkcF9zcmNfbWF4IC0gcGt0X2Rldi0+dWRwX3NyY19taW4pKSArCisJCQkgICAgIHBrdF9kZXYtPnVkcF9zcmNfbWluKTsKKworCQllbHNlIHsKIAkJCXBrdF9kZXYtPmN1cl91ZHBfc3JjKys7CiAJCQlpZiAocGt0X2Rldi0+Y3VyX3VkcF9zcmMgPj0gcGt0X2Rldi0+dWRwX3NyY19tYXgpCiAJCQkJcGt0X2Rldi0+Y3VyX3VkcF9zcmMgPSBwa3RfZGV2LT51ZHBfc3JjX21pbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJfQorCX0KIAotICAgICAgICBpZiAocGt0X2Rldi0+dWRwX2RzdF9taW4gPCBwa3RfZGV2LT51ZHBfZHN0X21heCkgewotICAgICAgICAgICAgICAgIGlmIChwa3RfZGV2LT5mbGFncyAmIEZfVURQRFNUX1JORCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2Rldi0+Y3VyX3VkcF9kc3QgPSAoKHBrdGdlbl9yYW5kb20oKSAlIChwa3RfZGV2LT51ZHBfZHN0X21heCAtIHBrdF9kZXYtPnVkcF9kc3RfbWluKSkgKyBwa3RfZGV2LT51ZHBfZHN0X21pbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgeworCWlmIChwa3RfZGV2LT51ZHBfZHN0X21pbiA8IHBrdF9kZXYtPnVkcF9kc3RfbWF4KSB7CisJCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfVURQRFNUX1JORCkgeworCQkJcGt0X2Rldi0+Y3VyX3VkcF9kc3QgPQorCQkJICAgICgocGt0Z2VuX3JhbmRvbSgpICUKKwkJCSAgICAgIChwa3RfZGV2LT51ZHBfZHN0X21heCAtIHBrdF9kZXYtPnVkcF9kc3RfbWluKSkgKworCQkJICAgICBwa3RfZGV2LT51ZHBfZHN0X21pbik7CisJCX0gZWxzZSB7CiAJCQlwa3RfZGV2LT5jdXJfdWRwX2RzdCsrOwotCQkJaWYgKHBrdF9kZXYtPmN1cl91ZHBfZHN0ID49IHBrdF9kZXYtPnVkcF9kc3RfbWF4KSAKKwkJCWlmIChwa3RfZGV2LT5jdXJfdWRwX2RzdCA+PSBwa3RfZGV2LT51ZHBfZHN0X21heCkKIAkJCQlwa3RfZGV2LT5jdXJfdWRwX2RzdCA9IHBrdF9kZXYtPnVkcF9kc3RfbWluOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQl9CisJfQogCiAJaWYgKCEocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpKSB7CiAKLQkJaWYgKChpbW4gPSBudG9obChwa3RfZGV2LT5zYWRkcl9taW4pKSA8IChpbXggPSBudG9obChwa3RfZGV2LT5zYWRkcl9tYXgpKSkgeworCQlpZiAoKGltbiA9IG50b2hsKHBrdF9kZXYtPnNhZGRyX21pbikpIDwgKGlteCA9CisJCQkJCQkJIG50b2hsKHBrdF9kZXYtPgorCQkJCQkJCSAgICAgICBzYWRkcl9tYXgpKSkgewogCQkJX191MzIgdDsKLQkJCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfSVBTUkNfUk5EKSAKKwkJCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfSVBTUkNfUk5EKQogCQkJCXQgPSAoKHBrdGdlbl9yYW5kb20oKSAlIChpbXggLSBpbW4pKSArIGltbik7CiAJCQllbHNlIHsKIAkJCQl0ID0gbnRvaGwocGt0X2Rldi0+Y3VyX3NhZGRyKTsKQEAgLTE3NzMsMjUgKzE5OTMsMzIgQEAKIAkJCX0KIAkJCXBrdF9kZXYtPmN1cl9zYWRkciA9IGh0b25sKHQpOwogCQl9Ci0JCQorCiAJCWlmIChwa3RfZGV2LT5jZmxvd3MgJiYgcGt0X2Rldi0+Zmxvd3NbZmxvd10uY291bnQgIT0gMCkgewogCQkJcGt0X2Rldi0+Y3VyX2RhZGRyID0gcGt0X2Rldi0+Zmxvd3NbZmxvd10uY3VyX2RhZGRyOwogCQl9IGVsc2UgewogCi0JCQlpZiAoKGltbiA9IG50b2hsKHBrdF9kZXYtPmRhZGRyX21pbikpIDwgKGlteCA9IG50b2hsKHBrdF9kZXYtPmRhZGRyX21heCkpKSB7CisJCQlpZiAoKGltbiA9IG50b2hsKHBrdF9kZXYtPmRhZGRyX21pbikpIDwgKGlteCA9CisJCQkJCQkJCSBudG9obChwa3RfZGV2LT4KKwkJCQkJCQkJICAgICAgIGRhZGRyX21heCkpKQorCQkJewogCQkJCV9fdTMyIHQ7CiAJCQkJaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9JUERTVF9STkQpIHsKIAotCQkJCQl0ID0gKChwa3RnZW5fcmFuZG9tKCkgJSAoaW14IC0gaW1uKSkgKyBpbW4pOworCQkJCQl0ID0gKChwa3RnZW5fcmFuZG9tKCkgJSAoaW14IC0gaW1uKSkgKworCQkJCQkgICAgIGltbik7CiAJCQkJCXQgPSBodG9ubCh0KTsKIAotCQkJCQl3aGlsZSggTE9PUEJBQ0sodCkgfHwgTVVMVElDQVNUKHQpIHx8IEJBRENMQVNTKHQpIHx8IFpFUk9ORVQodCkgfHwgIExPQ0FMX01DQVNUKHQpICkgewotCQkJCQkJdCA9ICgocGt0Z2VuX3JhbmRvbSgpICUgKGlteCAtIGltbikpICsgaW1uKTsKKwkJCQkJd2hpbGUgKExPT1BCQUNLKHQpIHx8IE1VTFRJQ0FTVCh0KQorCQkJCQkgICAgICAgfHwgQkFEQ0xBU1ModCkgfHwgWkVST05FVCh0KQorCQkJCQkgICAgICAgfHwgTE9DQUxfTUNBU1QodCkpIHsKKwkJCQkJCXQgPSAoKHBrdGdlbl9yYW5kb20oKSAlCisJCQkJCQkgICAgICAoaW14IC0gaW1uKSkgKyBpbW4pOwogCQkJCQkJdCA9IGh0b25sKHQpOwogCQkJCQl9CiAJCQkJCXBrdF9kZXYtPmN1cl9kYWRkciA9IHQ7CiAJCQkJfQotCQkJCQorCiAJCQkJZWxzZSB7CiAJCQkJCXQgPSBudG9obChwa3RfZGV2LT5jdXJfZGFkZHIpOwogCQkJCQl0Kys7CkBAIC0xODAxLDY3ICsyMDI4LDgyIEBACiAJCQkJCXBrdF9kZXYtPmN1cl9kYWRkciA9IGh0b25sKHQpOwogCQkJCX0KIAkJCX0KLQkJCWlmKHBrdF9kZXYtPmNmbG93cykgewkKLQkJCQlwa3RfZGV2LT5mbG93c1tmbG93XS5jdXJfZGFkZHIgPSBwa3RfZGV2LT5jdXJfZGFkZHI7CisJCQlpZiAocGt0X2Rldi0+Y2Zsb3dzKSB7CisJCQkJcGt0X2Rldi0+Zmxvd3NbZmxvd10uY3VyX2RhZGRyID0KKwkJCQkgICAgcGt0X2Rldi0+Y3VyX2RhZGRyOwogCQkJCXBrdF9kZXYtPm5mbG93cysrOwogCQkJfQogCQl9Ci0JfQotCWVsc2UgLyogSVBWNiAqICovCi0JewotCQlpZihwa3RfZGV2LT5taW5faW42X2RhZGRyLnM2X2FkZHIzMlswXSA9PSAwICYmCi0JCSAgIHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcjMyWzFdID09IDAgJiYKLQkJICAgcGt0X2Rldi0+bWluX2luNl9kYWRkci5zNl9hZGRyMzJbMl0gPT0gMCAmJgotCQkgICBwa3RfZGV2LT5taW5faW42X2RhZGRyLnM2X2FkZHIzMlszXSA9PSAwKTsKKwl9IGVsc2UgewkJLyogSVBWNiAqICovCisKKwkJaWYgKHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcjMyWzBdID09IDAgJiYKKwkJICAgIHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcjMyWzFdID09IDAgJiYKKwkJICAgIHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcjMyWzJdID09IDAgJiYKKwkJICAgIHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcjMyWzNdID09IDApIDsKIAkJZWxzZSB7CiAJCQlpbnQgaTsKIAogCQkJLyogT25seSByYW5kb20gZGVzdGluYXRpb25zIHlldCAqLwogCi0JCQlmb3IoaT0wOyBpIDwgNDsgaSsrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCQkJcGt0X2Rldi0+Y3VyX2luNl9kYWRkci5zNl9hZGRyMzJbaV0gPQotCQkJCQkoKHBrdGdlbl9yYW5kb20oKSB8Ci0JCQkJCSAgcGt0X2Rldi0+bWluX2luNl9kYWRkci5zNl9hZGRyMzJbaV0pICYKLQkJCQkJIHBrdF9kZXYtPm1heF9pbjZfZGFkZHIuczZfYWRkcjMyW2ldKTsKKwkJCQkgICAgKChwa3RnZW5fcmFuZG9tKCkgfAorCQkJCSAgICAgIHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcjMyW2ldKSAmCisJCQkJICAgICBwa3RfZGV2LT5tYXhfaW42X2RhZGRyLnM2X2FkZHIzMltpXSk7CiAJCQl9Ci0gCQl9CisJCX0KIAl9CiAKLSAgICAgICAgaWYgKHBrdF9kZXYtPm1pbl9wa3Rfc2l6ZSA8IHBrdF9kZXYtPm1heF9wa3Rfc2l6ZSkgewotICAgICAgICAgICAgICAgIF9fdTMyIHQ7Ci0gICAgICAgICAgICAgICAgaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9UWFNJWkVfUk5EKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ID0gKChwa3RnZW5fcmFuZG9tKCkgJSAocGt0X2Rldi0+bWF4X3BrdF9zaXplIC0gcGt0X2Rldi0+bWluX3BrdF9zaXplKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwa3RfZGV2LT5taW5fcGt0X3NpemUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKKwlpZiAocGt0X2Rldi0+bWluX3BrdF9zaXplIDwgcGt0X2Rldi0+bWF4X3BrdF9zaXplKSB7CisJCV9fdTMyIHQ7CisJCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfVFhTSVpFX1JORCkgeworCQkJdCA9ICgocGt0Z2VuX3JhbmRvbSgpICUKKwkJCSAgICAgIChwa3RfZGV2LT5tYXhfcGt0X3NpemUgLSBwa3RfZGV2LT5taW5fcGt0X3NpemUpKQorCQkJICAgICArIHBrdF9kZXYtPm1pbl9wa3Rfc2l6ZSk7CisJCX0gZWxzZSB7CiAJCQl0ID0gcGt0X2Rldi0+Y3VyX3BrdF9zaXplICsgMTsKLQkJCWlmICh0ID4gcGt0X2Rldi0+bWF4X3BrdF9zaXplKSAKKwkJCWlmICh0ID4gcGt0X2Rldi0+bWF4X3BrdF9zaXplKQogCQkJCXQgPSBwa3RfZGV2LT5taW5fcGt0X3NpemU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSA9IHQ7Ci0gICAgICAgIH0KKwkJfQorCQlwa3RfZGV2LT5jdXJfcGt0X3NpemUgPSB0OworCX0KIAogCXBrdF9kZXYtPmZsb3dzW2Zsb3ddLmNvdW50Kys7CiB9CiAKK3N0YXRpYyB2b2lkIG1wbHNfcHVzaChfX2JlMzIgKm1wbHMsIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQoreworCXVuc2lnbmVkIGk7CisJZm9yKGkgPSAwOyBpIDwgcGt0X2Rldi0+bnJfbGFiZWxzOyBpKyspIHsKKwkJKm1wbHMrKyA9IHBrdF9kZXYtPmxhYmVsc1tpXSAmIH5NUExTX1NUQUNLX0JPVFRPTTsKKwl9CisJbXBscy0tOworCSptcGxzIHw9IE1QTFNfU1RBQ0tfQk9UVE9NOworfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsIAotCQkJCSAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQorc3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LAorCQkJCQlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAlfX3U4ICpldGg7CiAJc3RydWN0IHVkcGhkciAqdWRwaDsKIAlpbnQgZGF0YWxlbiwgaXBsZW47CiAJc3RydWN0IGlwaGRyICppcGg7Ci0gICAgICAgIHN0cnVjdCBwa3RnZW5faGRyICpwZ2ggPSBOVUxMOwotICAgICAgICAKKwlzdHJ1Y3QgcGt0Z2VuX2hkciAqcGdoID0gTlVMTDsKKwlfX2JlMTYgcHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKTsKKwlfX2JlMzIgKm1wbHM7CisKKwlpZiAocGt0X2Rldi0+bnJfbGFiZWxzKQorCQlwcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfTVBMU19VQyk7CisKIAkvKiBVcGRhdGUgYW55IG9mIHRoZSB2YWx1ZXMsIHVzZWQgd2hlbiB3ZSdyZSBpbmNyZW1lbnRpbmcgdmFyaW91cwogCSAqIGZpZWxkcy4KIAkgKi8KIAltb2RfY3VyX2hlYWRlcnMocGt0X2Rldik7CiAKIAlkYXRhbGVuID0gKG9kZXYtPmhhcmRfaGVhZGVyX2xlbiArIDE2KSAmIH4weGY7Ci0Jc2tiID0gYWxsb2Nfc2tiKHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSArIDY0ICsgZGF0YWxlbiwgR0ZQX0FUT01JQyk7CisJc2tiID0gYWxsb2Nfc2tiKHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSArIDY0ICsgZGF0YWxlbiArCisJCQlwa3RfZGV2LT5ucl9sYWJlbHMqc2l6ZW9mKHUzMiksIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7CiAJCXNwcmludGYocGt0X2Rldi0+cmVzdWx0LCAiTm8gbWVtb3J5Iik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTg3MSw1MSArMjExMyw1NiBAQAogCiAJLyogIFJlc2VydmUgZm9yIGV0aGVybmV0IGFuZCBJUCBoZWFkZXIgICovCiAJZXRoID0gKF9fdTggKikgc2tiX3B1c2goc2tiLCAxNCk7CisJbXBscyA9IChfX2JlMzIgKilza2JfcHV0KHNrYiwgcGt0X2Rldi0+bnJfbGFiZWxzKnNpemVvZihfX3UzMikpOworCWlmIChwa3RfZGV2LT5ucl9sYWJlbHMpCisJCW1wbHNfcHVzaChtcGxzLCBwa3RfZGV2KTsKIAlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIAl1ZHBoID0gKHN0cnVjdCB1ZHBoZHIgKilza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKIAogCW1lbWNweShldGgsIHBrdF9kZXYtPmhoLCAxMik7Ci0JKih1MTYqKSZldGhbMTJdID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJKih1MTYgKikgJiBldGhbMTJdID0gcHJvdG9jb2w7CiAKLQlkYXRhbGVuID0gcGt0X2Rldi0+Y3VyX3BrdF9zaXplIC0gMTQgLSAyMCAtIDg7IC8qIEV0aCArIElQaCArIFVEUGggKi8KLQlpZiAoZGF0YWxlbiA8IHNpemVvZihzdHJ1Y3QgcGt0Z2VuX2hkcikpIAorCS8qIEV0aCArIElQaCArIFVEUGggKyBtcGxzICovCisJZGF0YWxlbiA9IHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSAtIDE0IC0gMjAgLSA4IC0KKwkJICBwa3RfZGV2LT5ucl9sYWJlbHMqc2l6ZW9mKHUzMik7CisJaWYgKGRhdGFsZW4gPCBzaXplb2Yoc3RydWN0IHBrdGdlbl9oZHIpKQogCQlkYXRhbGVuID0gc2l6ZW9mKHN0cnVjdCBwa3RnZW5faGRyKTsKLSAgICAgICAgCisKIAl1ZHBoLT5zb3VyY2UgPSBodG9ucyhwa3RfZGV2LT5jdXJfdWRwX3NyYyk7CiAJdWRwaC0+ZGVzdCA9IGh0b25zKHBrdF9kZXYtPmN1cl91ZHBfZHN0KTsKLQl1ZHBoLT5sZW4gPSBodG9ucyhkYXRhbGVuICsgOCk7IC8qIERBVEEgKyB1ZHBoZHIgKi8KLQl1ZHBoLT5jaGVjayA9IDA7ICAvKiBObyBjaGVja3N1bSAqLworCXVkcGgtPmxlbiA9IGh0b25zKGRhdGFsZW4gKyA4KTsJLyogREFUQSArIHVkcGhkciAqLworCXVkcGgtPmNoZWNrID0gMDsJLyogTm8gY2hlY2tzdW0gKi8KIAogCWlwaC0+aWhsID0gNTsKIAlpcGgtPnZlcnNpb24gPSA0OwogCWlwaC0+dHRsID0gMzI7CiAJaXBoLT50b3MgPSAwOwotCWlwaC0+cHJvdG9jb2wgPSBJUFBST1RPX1VEUDsgLyogVURQICovCisJaXBoLT5wcm90b2NvbCA9IElQUFJPVE9fVURQOwkvKiBVRFAgKi8KIAlpcGgtPnNhZGRyID0gcGt0X2Rldi0+Y3VyX3NhZGRyOwogCWlwaC0+ZGFkZHIgPSBwa3RfZGV2LT5jdXJfZGFkZHI7CiAJaXBoLT5mcmFnX29mZiA9IDA7CiAJaXBsZW4gPSAyMCArIDggKyBkYXRhbGVuOwogCWlwaC0+dG90X2xlbiA9IGh0b25zKGlwbGVuKTsKIAlpcGgtPmNoZWNrID0gMDsKLQlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh2b2lkICopIGlwaCwgaXBoLT5paGwpOwotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKTsKLQlza2ItPm1hYy5yYXcgPSAoKHU4ICopaXBoKSAtIDE0OworCWlwaC0+Y2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC0+aWhsKTsKKwlza2ItPnByb3RvY29sID0gcHJvdG9jb2w7CisJc2tiLT5tYWMucmF3ID0gKCh1OCAqKSBpcGgpIC0gMTQgLSBwa3RfZGV2LT5ucl9sYWJlbHMqc2l6ZW9mKHUzMik7CiAJc2tiLT5kZXYgPSBvZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAotCWlmIChwa3RfZGV2LT5uZnJhZ3MgPD0gMCkgCi0gICAgICAgICAgICAgICAgcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyICopc2tiX3B1dChza2IsIGRhdGFsZW4pOworCWlmIChwa3RfZGV2LT5uZnJhZ3MgPD0gMCkKKwkJcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyICopc2tiX3B1dChza2IsIGRhdGFsZW4pOwogCWVsc2UgewogCQlpbnQgZnJhZ3MgPSBwa3RfZGV2LT5uZnJhZ3M7CiAJCWludCBpOwogCi0gICAgICAgICAgICAgICAgcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyKikoKChjaGFyKikodWRwaCkpICsgOCk7Ci0gICAgICAgICAgICAgICAgCisJCXBnaCA9IChzdHJ1Y3QgcGt0Z2VuX2hkciAqKSgoKGNoYXIgKikodWRwaCkpICsgOCk7CisKIAkJaWYgKGZyYWdzID4gTUFYX1NLQl9GUkFHUykKIAkJCWZyYWdzID0gTUFYX1NLQl9GUkFHUzsKLQkJaWYgKGRhdGFsZW4gPiBmcmFncypQQUdFX1NJWkUpIHsKLQkJCXNrYl9wdXQoc2tiLCBkYXRhbGVuLWZyYWdzKlBBR0VfU0laRSk7Ci0JCQlkYXRhbGVuID0gZnJhZ3MqUEFHRV9TSVpFOworCQlpZiAoZGF0YWxlbiA+IGZyYWdzICogUEFHRV9TSVpFKSB7CisJCQlza2JfcHV0KHNrYiwgZGF0YWxlbiAtIGZyYWdzICogUEFHRV9TSVpFKTsKKwkJCWRhdGFsZW4gPSBmcmFncyAqIFBBR0VfU0laRTsKIAkJfQogCiAJCWkgPSAwOwpAQCAtMTkyNCw3ICsyMTcxLDcgQEAKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSA9IHBhZ2U7CiAJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ID0gMDsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9Ci0JCQkJKGRhdGFsZW4gPCBQQUdFX1NJWkUgPyBkYXRhbGVuIDogUEFHRV9TSVpFKTsKKwkJCSAgICAoZGF0YWxlbiA8IFBBR0VfU0laRSA/IGRhdGFsZW4gOiBQQUdFX1NJWkUpOwogCQkJZGF0YWxlbiAtPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAJCQlza2ItPmxlbiArPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAJCQlza2ItPmRhdGFfbGVuICs9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKQEAgLTE5NDQsMzAgKzIxOTEsMzMgQEAKIAogCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV0uc2l6ZSAtPSByZW07CiAKLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0gPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXTsKKwkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0gPQorCQkJICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdOwogCQkJZ2V0X3BhZ2Uoc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlKTsKLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdLnBhZ2U7Ci0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ICs9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdLnNpemU7CisJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2UgPQorCQkJICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdLnBhZ2U7CisJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0ICs9CisJCQkgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV0uc2l6ZTsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9IHJlbTsKIAkJCWkrKzsKIAkJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSBpOwogCQl9CiAJfQogCi0gICAgICAgIC8qIFN0YW1wIHRoZSB0aW1lLCBhbmQgc2VxdWVuY2UgbnVtYmVyLCBjb252ZXJ0IHRoZW0gdG8gbmV0d29yayBieXRlIG9yZGVyICovCisJLyogU3RhbXAgdGhlIHRpbWUsIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGNvbnZlcnQgdGhlbSB0byBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KIAotICAgICAgICBpZiAocGdoKSB7Ci0gICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKLQkgICAgICAKLQkgICAgICBwZ2gtPnBnaF9tYWdpYyA9IGh0b25sKFBLVEdFTl9NQUdJQyk7Ci0JICAgICAgcGdoLT5zZXFfbnVtICAgPSBodG9ubChwa3RfZGV2LT5zZXFfbnVtKTsKLQkgICAgICAKLQkgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWVzdGFtcCk7Ci0JICAgICAgcGdoLT50dl9zZWMgICAgPSBodG9ubCh0aW1lc3RhbXAudHZfc2VjKTsKLQkgICAgICBwZ2gtPnR2X3VzZWMgICA9IGh0b25sKHRpbWVzdGFtcC50dl91c2VjKTsKLSAgICAgICAgfQotICAgICAgICBwa3RfZGV2LT5zZXFfbnVtKys7Ci0gICAgICAgIAorCWlmIChwZ2gpIHsKKwkJc3RydWN0IHRpbWV2YWwgdGltZXN0YW1wOworCisJCXBnaC0+cGdoX21hZ2ljID0gaHRvbmwoUEtUR0VOX01BR0lDKTsKKwkJcGdoLT5zZXFfbnVtID0gaHRvbmwocGt0X2Rldi0+c2VxX251bSk7CisKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0aW1lc3RhbXApOworCQlwZ2gtPnR2X3NlYyA9IGh0b25sKHRpbWVzdGFtcC50dl9zZWMpOworCQlwZ2gtPnR2X3VzZWMgPSBodG9ubCh0aW1lc3RhbXAudHZfdXNlYyk7CisJfQorCXBrdF9kZXYtPnNlcV9udW0rKzsKKwogCXJldHVybiBza2I7CiB9CiAKQEAgLTE5ODAsMjMgKzIyMzAsMjQgQEAKICAqIC0tcm8KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHNjYW5faXA2KGNvbnN0IGNoYXIgKnMsY2hhciBpcFsxNl0pCitzdGF0aWMgdW5zaWduZWQgaW50IHNjYW5faXA2KGNvbnN0IGNoYXIgKnMsIGNoYXIgaXBbMTZdKQogewogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBsZW49MDsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIHU7CiAJY2hhciBzdWZmaXhbMTZdOwotCXVuc2lnbmVkIGludCBwcmVmaXhsZW49MDsKLQl1bnNpZ25lZCBpbnQgc3VmZml4bGVuPTA7CisJdW5zaWduZWQgaW50IHByZWZpeGxlbiA9IDA7CisJdW5zaWduZWQgaW50IHN1ZmZpeGxlbiA9IDA7CiAJX191MzIgdG1wOwogCi0JZm9yIChpPTA7IGk8MTY7IGkrKykgaXBbaV09MDsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJaXBbaV0gPSAwOwogCiAJZm9yICg7OykgewogCQlpZiAoKnMgPT0gJzonKSB7CiAJCQlsZW4rKzsKLQkJCWlmIChzWzFdID09ICc6JykgeyAgICAgICAgLyogRm91bmQgIjo6Iiwgc2tpcCB0byBwYXJ0IDIgKi8KLQkJCQlzKz0yOworCQkJaWYgKHNbMV0gPT0gJzonKSB7CS8qIEZvdW5kICI6OiIsIHNraXAgdG8gcGFydCAyICovCisJCQkJcyArPSAyOwogCQkJCWxlbisrOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjAwNCwxMzYgKzIyNTUsMTYyIEBACiAJCX0KIAkJewogCQkJY2hhciAqdG1wOwotCQkJdT1zaW1wbGVfc3RydG91bChzLCZ0bXAsMTYpOwotCQkJaT10bXAtczsKKwkJCXUgPSBzaW1wbGVfc3RydG91bChzLCAmdG1wLCAxNik7CisJCQlpID0gdG1wIC0gczsKIAkJfQogCi0JCWlmICghaSkgcmV0dXJuIDA7Ci0JCWlmIChwcmVmaXhsZW49PTEyICYmIHNbaV09PScuJykgeworCQlpZiAoIWkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHByZWZpeGxlbiA9PSAxMiAmJiBzW2ldID09ICcuJykgewogCiAJCQkvKiB0aGUgbGFzdCA0IGJ5dGVzIG1heSBiZSB3cml0dGVuIGFzIElQdjQgYWRkcmVzcyAqLwogCiAJCQl0bXAgPSBpbl9hdG9uKHMpOwotCQkJbWVtY3B5KChzdHJ1Y3QgaW5fYWRkciopKGlwKzEyKSwgJnRtcCwgc2l6ZW9mKHRtcCkpOwotCQkJcmV0dXJuIGkrbGVuOworCQkJbWVtY3B5KChzdHJ1Y3QgaW5fYWRkciAqKShpcCArIDEyKSwgJnRtcCwgc2l6ZW9mKHRtcCkpOworCQkJcmV0dXJuIGkgKyBsZW47CiAJCX0KIAkJaXBbcHJlZml4bGVuKytdID0gKHUgPj4gOCk7CiAJCWlwW3ByZWZpeGxlbisrXSA9ICh1ICYgMjU1KTsKLQkJcyArPSBpOyBsZW4gKz0gaTsKLQkJaWYgKHByZWZpeGxlbj09MTYpCisJCXMgKz0gaTsKKwkJbGVuICs9IGk7CisJCWlmIChwcmVmaXhsZW4gPT0gMTYpCiAJCQlyZXR1cm4gbGVuOwogCX0KIAogLyogcGFydCAyLCBhZnRlciAiOjoiICovCiAJZm9yICg7OykgewogCQlpZiAoKnMgPT0gJzonKSB7Ci0JCQlpZiAoc3VmZml4bGVuPT0wKQorCQkJaWYgKHN1ZmZpeGxlbiA9PSAwKQogCQkJCWJyZWFrOwogCQkJcysrOwogCQkJbGVuKys7Ci0JCX0gZWxzZSBpZiAoc3VmZml4bGVuIT0wKQorCQl9IGVsc2UgaWYgKHN1ZmZpeGxlbiAhPSAwKQogCQkJYnJlYWs7CiAJCXsKIAkJCWNoYXIgKnRtcDsKLQkJCXU9c2ltcGxlX3N0cnRvbChzLCZ0bXAsMTYpOwotCQkJaT10bXAtczsKKwkJCXUgPSBzaW1wbGVfc3RydG9sKHMsICZ0bXAsIDE2KTsKKwkJCWkgPSB0bXAgLSBzOwogCQl9CiAJCWlmICghaSkgewotCQkJaWYgKCpzKSBsZW4tLTsKKwkJCWlmICgqcykKKwkJCQlsZW4tLTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChzdWZmaXhsZW4rcHJlZml4bGVuPD0xMiAmJiBzW2ldPT0nLicpIHsKKwkJaWYgKHN1ZmZpeGxlbiArIHByZWZpeGxlbiA8PSAxMiAmJiBzW2ldID09ICcuJykgewogCQkJdG1wID0gaW5fYXRvbihzKTsKLQkJCW1lbWNweSgoc3RydWN0IGluX2FkZHIqKShzdWZmaXgrc3VmZml4bGVuKSwgJnRtcCwgc2l6ZW9mKHRtcCkpOwotCQkJc3VmZml4bGVuKz00OwotCQkJbGVuKz1zdHJsZW4ocyk7CisJCQltZW1jcHkoKHN0cnVjdCBpbl9hZGRyICopKHN1ZmZpeCArIHN1ZmZpeGxlbiksICZ0bXAsCisJCQkgICAgICAgc2l6ZW9mKHRtcCkpOworCQkJc3VmZml4bGVuICs9IDQ7CisJCQlsZW4gKz0gc3RybGVuKHMpOwogCQkJYnJlYWs7CiAJCX0KIAkJc3VmZml4W3N1ZmZpeGxlbisrXSA9ICh1ID4+IDgpOwogCQlzdWZmaXhbc3VmZml4bGVuKytdID0gKHUgJiAyNTUpOwotCQlzICs9IGk7IGxlbiArPSBpOwotCQlpZiAocHJlZml4bGVuK3N1ZmZpeGxlbj09MTYpCisJCXMgKz0gaTsKKwkJbGVuICs9IGk7CisJCWlmIChwcmVmaXhsZW4gKyBzdWZmaXhsZW4gPT0gMTYpCiAJCQlicmVhazsKIAl9Ci0JZm9yIChpPTA7IGk8c3VmZml4bGVuOyBpKyspCi0JCWlwWzE2LXN1ZmZpeGxlbitpXSA9IHN1ZmZpeFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgc3VmZml4bGVuOyBpKyspCisJCWlwWzE2IC0gc3VmZml4bGVuICsgaV0gPSBzdWZmaXhbaV07CiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGNoYXIgdG9oZXgoY2hhciBoZXhkaWdpdCkgewotCXJldHVybiBoZXhkaWdpdD45P2hleGRpZ2l0KydhJy0xMDpoZXhkaWdpdCsnMCc7CitzdGF0aWMgY2hhciB0b2hleChjaGFyIGhleGRpZ2l0KQoreworCXJldHVybiBoZXhkaWdpdCA+IDkgPyBoZXhkaWdpdCArICdhJyAtIDEwIDogaGV4ZGlnaXQgKyAnMCc7CiB9CiAKLXN0YXRpYyBpbnQgZm10X3hsb25nKGNoYXIqIHMsdW5zaWduZWQgaW50IGkpIHsKLQljaGFyKiBiYWs9czsKLQkqcz10b2hleCgoaT4+MTIpJjB4Zik7IGlmIChzIT1iYWsgfHwgKnMhPScwJykgKytzOwotCSpzPXRvaGV4KChpPj44KSYweGYpOyBpZiAocyE9YmFrIHx8ICpzIT0nMCcpICsrczsKLQkqcz10b2hleCgoaT4+NCkmMHhmKTsgaWYgKHMhPWJhayB8fCAqcyE9JzAnKSArK3M7Ci0JKnM9dG9oZXgoaSYweGYpOwotCXJldHVybiBzLWJhaysxOworc3RhdGljIGludCBmbXRfeGxvbmcoY2hhciAqcywgdW5zaWduZWQgaW50IGkpCit7CisJY2hhciAqYmFrID0gczsKKwkqcyA9IHRvaGV4KChpID4+IDEyKSAmIDB4Zik7CisJaWYgKHMgIT0gYmFrIHx8ICpzICE9ICcwJykKKwkJKytzOworCSpzID0gdG9oZXgoKGkgPj4gOCkgJiAweGYpOworCWlmIChzICE9IGJhayB8fCAqcyAhPSAnMCcpCisJCSsrczsKKwkqcyA9IHRvaGV4KChpID4+IDQpICYgMHhmKTsKKwlpZiAocyAhPSBiYWsgfHwgKnMgIT0gJzAnKQorCQkrK3M7CisJKnMgPSB0b2hleChpICYgMHhmKTsKKwlyZXR1cm4gcyAtIGJhayArIDE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZm10X2lwNihjaGFyICpzLGNvbnN0IGNoYXIgaXBbMTZdKSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGZtdF9pcDYoY2hhciAqcywgY29uc3QgY2hhciBpcFsxNl0pCit7CiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgdGVtcDsKIAl1bnNpZ25lZCBpbnQgY29tcHJlc3Npbmc7CiAJaW50IGo7CiAKLQlsZW4gPSAwOyBjb21wcmVzc2luZyA9IDA7Ci0JZm9yIChqPTA7IGo8MTY7IGorPTIpIHsKKwlsZW4gPSAwOworCWNvbXByZXNzaW5nID0gMDsKKwlmb3IgKGogPSAwOyBqIDwgMTY7IGogKz0gMikgewogCiAjaWZkZWYgVjRNQVBQRURQUkVGSVgKLQkJaWYgKGo9PTEyICYmICFtZW1jbXAoaXAsVjRtYXBwZWRwcmVmaXgsMTIpKSB7Ci0JCQlpbmV0X250b2FfcigqKHN0cnVjdCBpbl9hZGRyKikoaXArMTIpLHMpOwotCQkJdGVtcD1zdHJsZW4ocyk7Ci0JCQlyZXR1cm4gbGVuK3RlbXA7CisJCWlmIChqID09IDEyICYmICFtZW1jbXAoaXAsIFY0bWFwcGVkcHJlZml4LCAxMikpIHsKKwkJCWluZXRfbnRvYV9yKCooc3RydWN0IGluX2FkZHIgKikoaXAgKyAxMiksIHMpOworCQkJdGVtcCA9IHN0cmxlbihzKTsKKwkJCXJldHVybiBsZW4gKyB0ZW1wOwogCQl9CiAjZW5kaWYKLQkJdGVtcCA9ICgodW5zaWduZWQgbG9uZykgKHVuc2lnbmVkIGNoYXIpIGlwW2pdIDw8IDgpICsKLQkJCSh1bnNpZ25lZCBsb25nKSAodW5zaWduZWQgY2hhcikgaXBbaisxXTsKKwkJdGVtcCA9ICgodW5zaWduZWQgbG9uZykodW5zaWduZWQgY2hhcilpcFtqXSA8PCA4KSArCisJCSAgICAodW5zaWduZWQgbG9uZykodW5zaWduZWQgY2hhcilpcFtqICsgMV07CiAJCWlmICh0ZW1wID09IDApIHsKIAkJCWlmICghY29tcHJlc3NpbmcpIHsKLQkJCQljb21wcmVzc2luZz0xOwotCQkJCWlmIChqPT0wKSB7Ci0JCQkJCSpzKys9JzonOyArK2xlbjsKKwkJCQljb21wcmVzc2luZyA9IDE7CisJCQkJaWYgKGogPT0gMCkgeworCQkJCQkqcysrID0gJzonOworCQkJCQkrK2xlbjsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoY29tcHJlc3NpbmcpIHsKLQkJCQljb21wcmVzc2luZz0wOwotCQkJCSpzKys9JzonOyArK2xlbjsKKwkJCQljb21wcmVzc2luZyA9IDA7CisJCQkJKnMrKyA9ICc6JzsKKwkJCQkrK2xlbjsKIAkJCX0KLQkJCWkgPSBmbXRfeGxvbmcocyx0ZW1wKTsgbGVuICs9IGk7IHMgKz0gaTsKLQkJCWlmIChqPDE0KSB7CisJCQlpID0gZm10X3hsb25nKHMsIHRlbXApOworCQkJbGVuICs9IGk7CisJCQlzICs9IGk7CisJCQlpZiAoaiA8IDE0KSB7CiAJCQkJKnMrKyA9ICc6JzsKIAkJCQkrK2xlbjsKIAkJCX0KIAkJfQogCX0KIAlpZiAoY29tcHJlc3NpbmcpIHsKLQkJKnMrKz0nOic7ICsrbGVuOworCQkqcysrID0gJzonOworCQkrK2xlbjsKIAl9Ci0JKnM9MDsKKwkqcyA9IDA7CiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LCAKLQkJCQkgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiwKKwkJCQkJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJX191OCAqZXRoOwogCXN0cnVjdCB1ZHBoZHIgKnVkcGg7CiAJaW50IGRhdGFsZW47CiAJc3RydWN0IGlwdjZoZHIgKmlwaDsKLSAgICAgICAgc3RydWN0IHBrdGdlbl9oZHIgKnBnaCA9IE5VTEw7CisJc3RydWN0IHBrdGdlbl9oZHIgKnBnaCA9IE5VTEw7CisJX19iZTE2IHByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KTsKKwlfX2JlMzIgKm1wbHM7CisKKwlpZiAocGt0X2Rldi0+bnJfbGFiZWxzKQorCQlwcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfTVBMU19VQyk7CiAKIAkvKiBVcGRhdGUgYW55IG9mIHRoZSB2YWx1ZXMsIHVzZWQgd2hlbiB3ZSdyZSBpbmNyZW1lbnRpbmcgdmFyaW91cwogCSAqIGZpZWxkcy4KIAkgKi8KIAltb2RfY3VyX2hlYWRlcnMocGt0X2Rldik7CiAKLQlza2IgPSBhbGxvY19za2IocGt0X2Rldi0+Y3VyX3BrdF9zaXplICsgNjQgKyAxNiwgR0ZQX0FUT01JQyk7CisJc2tiID0gYWxsb2Nfc2tiKHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSArIDY0ICsgMTYgKworCQkJcGt0X2Rldi0+bnJfbGFiZWxzKnNpemVvZih1MzIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewogCQlzcHJpbnRmKHBrdF9kZXYtPnJlc3VsdCwgIk5vIG1lbW9yeSIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTIxNDMsMjcgKzI0MjAsMzMgQEAKIAogCS8qICBSZXNlcnZlIGZvciBldGhlcm5ldCBhbmQgSVAgaGVhZGVyICAqLwogCWV0aCA9IChfX3U4ICopIHNrYl9wdXNoKHNrYiwgMTQpOworCW1wbHMgPSAoX19iZTMyICopc2tiX3B1dChza2IsIHBrdF9kZXYtPm5yX2xhYmVscypzaXplb2YoX191MzIpKTsKKwlpZiAocGt0X2Rldi0+bnJfbGFiZWxzKQorCQltcGxzX3B1c2gobXBscywgcGt0X2Rldik7CiAJaXBoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwogCXVkcGggPSAoc3RydWN0IHVkcGhkciAqKXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwogCiAJbWVtY3B5KGV0aCwgcGt0X2Rldi0+aGgsIDEyKTsKLQkqKHUxNiopJmV0aFsxMl0gPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOworCSoodTE2ICopICYgZXRoWzEyXSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik7CiAKLQlkYXRhbGVuID0gcGt0X2Rldi0+Y3VyX3BrdF9zaXplLTE0LSAKLQkJc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKS1zaXplb2Yoc3RydWN0IHVkcGhkcik7IC8qIEV0aCArIElQaCArIFVEUGggKi8KKwkvKiBFdGggKyBJUGggKyBVRFBoICsgbXBscyAqLworCWRhdGFsZW4gPSBwa3RfZGV2LT5jdXJfcGt0X3NpemUgLSAxNCAtCisJCSAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAtCisJCSAgcGt0X2Rldi0+bnJfbGFiZWxzKnNpemVvZih1MzIpOwogCi0JaWYgKGRhdGFsZW4gPCBzaXplb2Yoc3RydWN0IHBrdGdlbl9oZHIpKSB7IAorCWlmIChkYXRhbGVuIDwgc2l6ZW9mKHN0cnVjdCBwa3RnZW5faGRyKSkgewogCQlkYXRhbGVuID0gc2l6ZW9mKHN0cnVjdCBwa3RnZW5faGRyKTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0lORk8gInBrdGdlbjogaW5jcmVhc2VkIGRhdGFsZW4gdG8gJWRcbiIsIGRhdGFsZW4pOworCQkJcHJpbnRrKEtFUk5fSU5GTyAicGt0Z2VuOiBpbmNyZWFzZWQgZGF0YWxlbiB0byAlZFxuIiwKKwkJCSAgICAgICBkYXRhbGVuKTsKIAl9CiAKIAl1ZHBoLT5zb3VyY2UgPSBodG9ucyhwa3RfZGV2LT5jdXJfdWRwX3NyYyk7CiAJdWRwaC0+ZGVzdCA9IGh0b25zKHBrdF9kZXYtPmN1cl91ZHBfZHN0KTsKLQl1ZHBoLT5sZW4gPSBodG9ucyhkYXRhbGVuICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsgCi0JdWRwaC0+Y2hlY2sgPSAwOyAgLyogTm8gY2hlY2tzdW0gKi8KKwl1ZHBoLT5sZW4gPSBodG9ucyhkYXRhbGVuICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwl1ZHBoLT5jaGVjayA9IDA7CS8qIE5vIGNoZWNrc3VtICovCiAKLQkgKih1MzIqKWlwaCA9IF9fY29uc3RhbnRfaHRvbmwoMHg2MDAwMDAwMCk7IC8qIFZlcnNpb24gKyBmbG93ICovCisJKih1MzIgKikgaXBoID0gX19jb25zdGFudF9odG9ubCgweDYwMDAwMDAwKTsJLyogVmVyc2lvbiArIGZsb3cgKi8KIAogCWlwaC0+aG9wX2xpbWl0ID0gMzI7CiAKQEAgLTIxNzMsMjQgKzI0NTYsMjQgQEAKIAlpcHY2X2FkZHJfY29weSgmaXBoLT5kYWRkciwgJnBrdF9kZXYtPmN1cl9pbjZfZGFkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZpcGgtPnNhZGRyLCAmcGt0X2Rldi0+Y3VyX2luNl9zYWRkcik7CiAKLQlza2ItPm1hYy5yYXcgPSAoKHU4ICopaXBoKSAtIDE0OwotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOworCXNrYi0+bWFjLnJhdyA9ICgodTggKikgaXBoKSAtIDE0IC0gcGt0X2Rldi0+bnJfbGFiZWxzKnNpemVvZih1MzIpOworCXNrYi0+cHJvdG9jb2wgPSBwcm90b2NvbDsKIAlza2ItPmRldiA9IG9kZXY7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCi0JaWYgKHBrdF9kZXYtPm5mcmFncyA8PSAwKSAKLSAgICAgICAgICAgICAgICBwZ2ggPSAoc3RydWN0IHBrdGdlbl9oZHIgKilza2JfcHV0KHNrYiwgZGF0YWxlbik7CisJaWYgKHBrdF9kZXYtPm5mcmFncyA8PSAwKQorCQlwZ2ggPSAoc3RydWN0IHBrdGdlbl9oZHIgKilza2JfcHV0KHNrYiwgZGF0YWxlbik7CiAJZWxzZSB7CiAJCWludCBmcmFncyA9IHBrdF9kZXYtPm5mcmFnczsKIAkJaW50IGk7CiAKLSAgICAgICAgICAgICAgICBwZ2ggPSAoc3RydWN0IHBrdGdlbl9oZHIqKSgoKGNoYXIqKSh1ZHBoKSkgKyA4KTsKLSAgICAgICAgICAgICAgICAKKwkJcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyICopKCgoY2hhciAqKSh1ZHBoKSkgKyA4KTsKKwogCQlpZiAoZnJhZ3MgPiBNQVhfU0tCX0ZSQUdTKQogCQkJZnJhZ3MgPSBNQVhfU0tCX0ZSQUdTOwotCQlpZiAoZGF0YWxlbiA+IGZyYWdzKlBBR0VfU0laRSkgewotCQkJc2tiX3B1dChza2IsIGRhdGFsZW4tZnJhZ3MqUEFHRV9TSVpFKTsKLQkJCWRhdGFsZW4gPSBmcmFncypQQUdFX1NJWkU7CisJCWlmIChkYXRhbGVuID4gZnJhZ3MgKiBQQUdFX1NJWkUpIHsKKwkJCXNrYl9wdXQoc2tiLCBkYXRhbGVuIC0gZnJhZ3MgKiBQQUdFX1NJWkUpOworCQkJZGF0YWxlbiA9IGZyYWdzICogUEFHRV9TSVpFOwogCQl9CiAKIAkJaSA9IDA7CkBAIC0yMTk5LDcgKzI0ODIsNyBAQAogCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlID0gcGFnZTsKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZV9vZmZzZXQgPSAwOwogCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplID0KLQkJCQkoZGF0YWxlbiA8IFBBR0VfU0laRSA/IGRhdGFsZW4gOiBQQUdFX1NJWkUpOworCQkJICAgIChkYXRhbGVuIDwgUEFHRV9TSVpFID8gZGF0YWxlbiA6IFBBR0VfU0laRSk7CiAJCQlkYXRhbGVuIC09IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKIAkJCXNrYi0+bGVuICs9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKIAkJCXNrYi0+ZGF0YV9sZW4gKz0gc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplOwpAQCAtMjIxOSwzMDUgKzI1MDIsMzMzIEBACiAKIAkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdLnNpemUgLT0gcmVtOwogCi0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV07CisJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldID0KKwkJCSAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXTsKIAkJCWdldF9wYWdlKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSk7Ci0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2UgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXS5wYWdlOwotCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCArPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXS5zaXplOworCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlID0KKwkJCSAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXS5wYWdlOworCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCArPQorCQkJICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdLnNpemU7CiAJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUgPSByZW07CiAJCQlpKys7CiAJCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID0gaTsKIAkJfQogCX0KIAotICAgICAgICAvKiBTdGFtcCB0aGUgdGltZSwgYW5kIHNlcXVlbmNlIG51bWJlciwgY29udmVydCB0aGVtIHRvIG5ldHdvcmsgYnl0ZSBvcmRlciAqLworCS8qIFN0YW1wIHRoZSB0aW1lLCBhbmQgc2VxdWVuY2UgbnVtYmVyLCBjb252ZXJ0IHRoZW0gdG8gbmV0d29yayBieXRlIG9yZGVyICovCiAJLyogc2hvdWxkIHdlIHVwZGF0ZSBjbG9uZWQgcGFja2V0cyB0b28gPyAqLwotICAgICAgICBpZiAocGdoKSB7Ci0gICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKLQkgICAgICAKLQkgICAgICBwZ2gtPnBnaF9tYWdpYyA9IGh0b25sKFBLVEdFTl9NQUdJQyk7Ci0JICAgICAgcGdoLT5zZXFfbnVtICAgPSBodG9ubChwa3RfZGV2LT5zZXFfbnVtKTsKLQkgICAgICAKLQkgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWVzdGFtcCk7Ci0JICAgICAgcGdoLT50dl9zZWMgICAgPSBodG9ubCh0aW1lc3RhbXAudHZfc2VjKTsKLQkgICAgICBwZ2gtPnR2X3VzZWMgICA9IGh0b25sKHRpbWVzdGFtcC50dl91c2VjKTsKLSAgICAgICAgfQotICAgICAgICBwa3RfZGV2LT5zZXFfbnVtKys7Ci0gICAgICAgIAorCWlmIChwZ2gpIHsKKwkJc3RydWN0IHRpbWV2YWwgdGltZXN0YW1wOworCisJCXBnaC0+cGdoX21hZ2ljID0gaHRvbmwoUEtUR0VOX01BR0lDKTsKKwkJcGdoLT5zZXFfbnVtID0gaHRvbmwocGt0X2Rldi0+c2VxX251bSk7CisKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0aW1lc3RhbXApOworCQlwZ2gtPnR2X3NlYyA9IGh0b25sKHRpbWVzdGFtcC50dl9zZWMpOworCQlwZ2gtPnR2X3VzZWMgPSBodG9ubCh0aW1lc3RhbXAudHZfdXNlYyk7CisJfQorCXBrdF9kZXYtPnNlcV9udW0rKzsKKwogCXJldHVybiBza2I7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LCAKLQkJCQkgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LAorCQkJCQkgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewotCWlmKHBrdF9kZXYtPmZsYWdzICYgRl9JUFY2KSAKKwlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpCiAJCXJldHVybiBmaWxsX3BhY2tldF9pcHY2KG9kZXYsIHBrdF9kZXYpOwogCWVsc2UKIAkJcmV0dXJuIGZpbGxfcGFja2V0X2lwdjQob2RldiwgcGt0X2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHBrdGdlbl9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikgCitzdGF0aWMgdm9pZCBwa3RnZW5fY2xlYXJfY291bnRlcnMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiB7Ci0gICAgICAgIHBrdF9kZXYtPnNlcV9udW0gPSAxOwotICAgICAgICBwa3RfZGV2LT5pZGxlX2FjYyA9IDA7CisJcGt0X2Rldi0+c2VxX251bSA9IDE7CisJcGt0X2Rldi0+aWRsZV9hY2MgPSAwOwogCXBrdF9kZXYtPnNvZmFyID0gMDsKLSAgICAgICAgcGt0X2Rldi0+dHhfYnl0ZXMgPSAwOwotICAgICAgICBwa3RfZGV2LT5lcnJvcnMgPSAwOworCXBrdF9kZXYtPnR4X2J5dGVzID0gMDsKKwlwa3RfZGV2LT5lcnJvcnMgPSAwOwogfQogCiAvKiBTZXQgdXAgc3RydWN0dXJlIGZvciBzZW5kaW5nIHBrdHMsIGNsZWFyIGNvdW50ZXJzICovCiAKIHN0YXRpYyB2b2lkIHBrdGdlbl9ydW4oc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpCiB7Ci0gICAgICAgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldjsKIAlpbnQgc3RhcnRlZCA9IDA7CiAKIAlQR19ERUJVRyhwcmludGsoInBrdGdlbjogZW50ZXJpbmcgcGt0Z2VuX3J1bi4gJXBcbiIsIHQpKTsKIAogCWlmX2xvY2sodCk7Ci0gICAgICAgIGZvciAocGt0X2RldiA9IHQtPmlmX2xpc3Q7IHBrdF9kZXY7IHBrdF9kZXYgPSBwa3RfZGV2LT5uZXh0ICkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpIHsKIAogCQkvKgogCQkgKiBzZXR1cCBvZGV2IGFuZCBjcmVhdGUgaW5pdGlhbCBwYWNrZXQuCiAJCSAqLwogCQlwa3RnZW5fc2V0dXBfaW5qZWN0KHBrdF9kZXYpOwogCi0JCWlmKHBrdF9kZXYtPm9kZXYpIHsgCisJCWlmIChwa3RfZGV2LT5vZGV2KSB7CiAJCQlwa3RnZW5fY2xlYXJfY291bnRlcnMocGt0X2Rldik7Ci0JCQlwa3RfZGV2LT5ydW5uaW5nID0gMTsgLyogQ3JhbmtlIHllc2VsZiEgKi8KKwkJCXBrdF9kZXYtPnJ1bm5pbmcgPSAxOwkvKiBDcmFua2UgeWVzZWxmISAqLwogCQkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAkJCXBrdF9kZXYtPnN0YXJ0ZWRfYXQgPSBnZXRDdXJVcygpOwotCQkJcGt0X2Rldi0+bmV4dF90eF91cyA9IGdldEN1clVzKCk7IC8qIFRyYW5zbWl0IGltbWVkaWF0ZWx5ICovCisJCQlwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKTsJLyogVHJhbnNtaXQgaW1tZWRpYXRlbHkgKi8KIAkJCXBrdF9kZXYtPm5leHRfdHhfbnMgPSAwOwotCQkJCisKIAkJCXN0cmNweShwa3RfZGV2LT5yZXN1bHQsICJTdGFydGluZyIpOwogCQkJc3RhcnRlZCsrOwotCQl9Ci0JCWVsc2UgCisJCX0gZWxzZQogCQkJc3RyY3B5KHBrdF9kZXYtPnJlc3VsdCwgIkVycm9yIHN0YXJ0aW5nIik7CiAJfQogCWlmX3VubG9jayh0KTsKLQlpZihzdGFydGVkKSB0LT5jb250cm9sICY9IH4oVF9TVE9QKTsKKwlpZiAoc3RhcnRlZCkKKwkJdC0+Y29udHJvbCAmPSB+KFRfU1RPUCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBrdGdlbl9zdG9wX2FsbF90aHJlYWRzX2lmcyh2b2lkKQogewotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IHBrdGdlbl90aHJlYWRzOworCXN0cnVjdCBwa3RnZW5fdGhyZWFkICp0OwogCi0JUEdfREVCVUcocHJpbnRrKCJwa3RnZW46IGVudGVyaW5nIHBrdGdlbl9zdG9wX2FsbF90aHJlYWRzLlxuIikpOworCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiBlbnRlcmluZyBwa3RnZW5fc3RvcF9hbGxfdGhyZWFkc19pZnMuXG4iKSk7CiAKLQl0aHJlYWRfbG9jaygpOwotCXdoaWxlKHQpIHsKLQkJcGt0Z2VuX3N0b3AodCk7Ci0JCXQgPSB0LT5uZXh0OwotCX0KLQl0aHJlYWRfdW5sb2NrKCk7CisJbXV0ZXhfbG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnBrdGdlbl90aHJlYWRzLCB0aF9saXN0KQorCQl0LT5jb250cm9sIHw9IFRfU1RPUDsKKworCW11dGV4X3VubG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKIH0KIAotc3RhdGljIGludCB0aHJlYWRfaXNfcnVubmluZyhzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCApCitzdGF0aWMgaW50IHRocmVhZF9pc19ydW5uaW5nKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KQogewotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqbmV4dDsKLSAgICAgICAgaW50IHJlcyA9IDA7CisJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CisJaW50IHJlcyA9IDA7CiAKLSAgICAgICAgZm9yKG5leHQ9dC0+aWZfbGlzdDsgbmV4dDsgbmV4dD1uZXh0LT5uZXh0KSB7IAotCQlpZihuZXh0LT5ydW5uaW5nKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkKKwkJaWYgKHBrdF9kZXYtPnJ1bm5pbmcpIHsKIAkJCXJlcyA9IDE7CiAJCQlicmVhazsKIAkJfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXM7CisJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBwa3RnZW5fd2FpdF90aHJlYWRfcnVuKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0ICkKK3N0YXRpYyBpbnQgcGt0Z2VuX3dhaXRfdGhyZWFkX3J1bihzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCkKIHsKLSAgICAgICAgaWZfbG9jayh0KTsKKwlpZl9sb2NrKHQpOwogCi0gICAgICAgIHdoaWxlKHRocmVhZF9pc19ydW5uaW5nKHQpKSB7CisJd2hpbGUgKHRocmVhZF9pc19ydW5uaW5nKHQpKSB7CiAKLSAgICAgICAgICAgICAgICBpZl91bmxvY2sodCk7CisJCWlmX3VubG9jayh0KTsKIAotCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApOyAKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKIAotICAgICAgICAgICAgICAgIGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHNpZ25hbDsKLSAgICAgICAgICAgICAgICBpZl9sb2NrKHQpOwotICAgICAgICB9Ci0gICAgICAgIGlmX3VubG9jayh0KTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gc2lnbmFsOgotICAgICAgICByZXR1cm4gMDsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJZ290byBzaWduYWw7CisJCWlmX2xvY2sodCk7CisJfQorCWlmX3VubG9jayh0KTsKKwlyZXR1cm4gMTsKK3NpZ25hbDoKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwa3RnZW5fd2FpdF9hbGxfdGhyZWFkc19ydW4odm9pZCkKIHsKLQlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IHBrdGdlbl90aHJlYWRzOworCXN0cnVjdCBwa3RnZW5fdGhyZWFkICp0OwogCWludCBzaWcgPSAxOwotCQotCXdoaWxlICh0KSB7CisKKwltdXRleF9sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmcGt0Z2VuX3RocmVhZHMsIHRoX2xpc3QpIHsKIAkJc2lnID0gcGt0Z2VuX3dhaXRfdGhyZWFkX3J1bih0KTsKLQkJaWYoIHNpZyA9PSAwICkgYnJlYWs7Ci0JCXRocmVhZF9sb2NrKCk7Ci0JCXQ9dC0+bmV4dDsKLQkJdGhyZWFkX3VubG9jaygpOworCQlpZiAoc2lnID09IDApCisJCQlicmVhazsKIAl9Ci0JaWYoc2lnID09IDApIHsKLQkJdGhyZWFkX2xvY2soKTsKLQkJd2hpbGUgKHQpIHsKKworCWlmIChzaWcgPT0gMCkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmcGt0Z2VuX3RocmVhZHMsIHRoX2xpc3QpCiAJCQl0LT5jb250cm9sIHw9IChUX1NUT1ApOwotCQkJdD10LT5uZXh0OwotCQl9Ci0JCXRocmVhZF91bmxvY2soKTsKLQl9CisKKwltdXRleF91bmxvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CiAJcmV0dXJuIHNpZzsKIH0KIAogc3RhdGljIHZvaWQgcGt0Z2VuX3J1bl9hbGxfdGhyZWFkcyh2b2lkKQogewotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IHBrdGdlbl90aHJlYWRzOworCXN0cnVjdCBwa3RnZW5fdGhyZWFkICp0OwogCiAJUEdfREVCVUcocHJpbnRrKCJwa3RnZW46IGVudGVyaW5nIHBrdGdlbl9ydW5fYWxsX3RocmVhZHMuXG4iKSk7CiAKLQl0aHJlYWRfbG9jaygpOworCW11dGV4X2xvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CiAKLQl3aGlsZSh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmcGt0Z2VuX3RocmVhZHMsIHRoX2xpc3QpCiAJCXQtPmNvbnRyb2wgfD0gKFRfUlVOKTsKLQkJdCA9IHQtPm5leHQ7Ci0JfQotCXRocmVhZF91bmxvY2soKTsKIAotCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEyNSkpOyAgLyogUHJvcGFnYXRlIHRocmVhZC0+Y29udHJvbCAgKi8KLQkJCQorCW11dGV4X3VubG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKKworCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEyNSkpOwkvKiBQcm9wYWdhdGUgdGhyZWFkLT5jb250cm9sICAqLworCiAJcGt0Z2VuX3dhaXRfYWxsX3RocmVhZHNfcnVuKCk7CiB9CiAKLQogc3RhdGljIHZvaWQgc2hvd19yZXN1bHRzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgbnJfZnJhZ3MpCiB7Ci0gICAgICAgX191NjQgdG90YWxfdXMsIGJwcywgbWJwcywgcHBzLCBpZGxlOwotICAgICAgIGNoYXIgKnAgPSBwa3RfZGV2LT5yZXN1bHQ7CisJX191NjQgdG90YWxfdXMsIGJwcywgbWJwcywgcHBzLCBpZGxlOworCWNoYXIgKnAgPSBwa3RfZGV2LT5yZXN1bHQ7CiAKLSAgICAgICB0b3RhbF91cyA9IHBrdF9kZXYtPnN0b3BwZWRfYXQgLSBwa3RfZGV2LT5zdGFydGVkX2F0OworCXRvdGFsX3VzID0gcGt0X2Rldi0+c3RvcHBlZF9hdCAtIHBrdF9kZXYtPnN0YXJ0ZWRfYXQ7CiAKLSAgICAgICBpZGxlID0gcGt0X2Rldi0+aWRsZV9hY2M7CisJaWRsZSA9IHBrdF9kZXYtPmlkbGVfYWNjOwogCi0gICAgICAgcCArPSBzcHJpbnRmKHAsICJPSzogJWxsdShjJWxsdStkJWxsdSkgdXNlYywgJWxsdSAoJWRieXRlLCVkZnJhZ3MpXG4iLAotICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0b3RhbF91cywgCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSh0b3RhbF91cyAtIGlkbGUpLCAKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlkbGUsCi0gICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtPnNvZmFyLCAKLQkJICAgIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSwgbnJfZnJhZ3MpOworCXAgKz0gc3ByaW50ZihwLCAiT0s6ICVsbHUoYyVsbHUrZCVsbHUpIHVzZWMsICVsbHUgKCVkYnl0ZSwlZGZyYWdzKVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsX3VzLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHRvdGFsX3VzIC0gaWRsZSksCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpZGxlLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGt0X2Rldi0+c29mYXIsCisJCSAgICAgcGt0X2Rldi0+Y3VyX3BrdF9zaXplLCBucl9mcmFncyk7CiAKLSAgICAgICBwcHMgPSBwa3RfZGV2LT5zb2ZhciAqIFVTRUNfUEVSX1NFQzsKKwlwcHMgPSBwa3RfZGV2LT5zb2ZhciAqIFVTRUNfUEVSX1NFQzsKIAotICAgICAgIHdoaWxlICgodG90YWxfdXMgPj4gMzIpICE9IDApIHsKLSAgICAgICAgICAgICAgIHBwcyA+Pj0gMTsKLSAgICAgICAgICAgICAgIHRvdGFsX3VzID4+PSAxOwotICAgICAgIH0KKwl3aGlsZSAoKHRvdGFsX3VzID4+IDMyKSAhPSAwKSB7CisJCXBwcyA+Pj0gMTsKKwkJdG90YWxfdXMgPj49IDE7CisJfQogCi0gICAgICAgZG9fZGl2KHBwcywgdG90YWxfdXMpOwotICAgICAgIAotICAgICAgIGJwcyA9IHBwcyAqIDggKiBwa3RfZGV2LT5jdXJfcGt0X3NpemU7CisJZG9fZGl2KHBwcywgdG90YWxfdXMpOwogCi0gICAgICAgbWJwcyA9IGJwczsKLSAgICAgICBkb19kaXYobWJwcywgMTAwMDAwMCk7Ci0gICAgICAgcCArPSBzcHJpbnRmKHAsICIgICVsbHVwcHMgJWxsdU1iL3NlYyAoJWxsdWJwcykgZXJyb3JzOiAlbGx1IiwKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcHBzLCAKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1icHMsIAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYnBzLCAKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtPmVycm9ycyk7CisJYnBzID0gcHBzICogOCAqIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZTsKKworCW1icHMgPSBicHM7CisJZG9fZGl2KG1icHMsIDEwMDAwMDApOworCXAgKz0gc3ByaW50ZihwLCAiICAlbGx1cHBzICVsbHVNYi9zZWMgKCVsbHVicHMpIGVycm9yczogJWxsdSIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwcHMsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltYnBzLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnBzLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGt0X2Rldi0+ZXJyb3JzKTsKIH0KLSAKIAogLyogU2V0IHN0b3BwZWQtYXQgdGltZXIsIHJlbW92ZSBmcm9tIHJ1bm5pbmcgbGlzdCwgZG8gY291bnRlcnMgJiBzdGF0aXN0aWNzICovCiAKLXN0YXRpYyBpbnQgcGt0Z2VuX3N0b3BfZGV2aWNlKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KSAKK3N0YXRpYyBpbnQgcGt0Z2VuX3N0b3BfZGV2aWNlKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewotCQotICAgICAgICBpZiAoIXBrdF9kZXYtPnJ1bm5pbmcpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoInBrdGdlbjogaW50ZXJmYWNlOiAlcyBpcyBhbHJlYWR5IHN0b3BwZWRcbiIsIHBrdF9kZXYtPmlmbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KKwlpbnQgbnJfZnJhZ3MgPSBwa3RfZGV2LT5za2IgPyBza2Jfc2hpbmZvKHBrdF9kZXYtPnNrYiktPm5yX2ZyYWdzIDogLTE7CiAKLSAgICAgICAgcGt0X2Rldi0+c3RvcHBlZF9hdCA9IGdldEN1clVzKCk7Ci0gICAgICAgIHBrdF9kZXYtPnJ1bm5pbmcgPSAwOworCWlmICghcGt0X2Rldi0+cnVubmluZykgeworCQlwcmludGsoInBrdGdlbjogaW50ZXJmYWNlOiAlcyBpcyBhbHJlYWR5IHN0b3BwZWRcbiIsCisJCSAgICAgICBwa3RfZGV2LT5pZm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlzaG93X3Jlc3VsdHMocGt0X2Rldiwgc2tiX3NoaW5mbyhwa3RfZGV2LT5za2IpLT5ucl9mcmFncyk7CisJcGt0X2Rldi0+c3RvcHBlZF9hdCA9IGdldEN1clVzKCk7CisJcGt0X2Rldi0+cnVubmluZyA9IDA7CiAKLQlpZiAocGt0X2Rldi0+c2tiKSAKLQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJc2hvd19yZXN1bHRzKHBrdF9kZXYsIG5yX2ZyYWdzKTsKIAotCXBrdF9kZXYtPnNrYiA9IE5VTEw7Ci0JCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBrdGdlbl9kZXYgKm5leHRfdG9fcnVuKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0ICkKK3N0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqbmV4dF90b19ydW4oc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpCiB7Ci0Jc3RydWN0IHBrdGdlbl9kZXYgKm5leHQsICpiZXN0ID0gTlVMTDsKLSAgICAgICAgCisJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsICpiZXN0ID0gTlVMTDsKKwogCWlmX2xvY2sodCk7CiAKLQlmb3IobmV4dD10LT5pZl9saXN0OyBuZXh0IDsgbmV4dD1uZXh0LT5uZXh0KSB7Ci0JCWlmKCFuZXh0LT5ydW5uaW5nKSBjb250aW51ZTsKLQkJaWYoYmVzdCA9PSBOVUxMKSBiZXN0PW5leHQ7Ci0JCWVsc2UgaWYgKCBuZXh0LT5uZXh0X3R4X3VzIDwgYmVzdC0+bmV4dF90eF91cykgCi0JCQliZXN0ID0gIG5leHQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkgeworCQlpZiAoIXBrdF9kZXYtPnJ1bm5pbmcpCisJCQljb250aW51ZTsKKwkJaWYgKGJlc3QgPT0gTlVMTCkKKwkJCWJlc3QgPSBwa3RfZGV2OworCQllbHNlIGlmIChwa3RfZGV2LT5uZXh0X3R4X3VzIDwgYmVzdC0+bmV4dF90eF91cykKKwkJCWJlc3QgPSBwa3RfZGV2OwogCX0KIAlpZl91bmxvY2sodCk7Ci0gICAgICAgIHJldHVybiBiZXN0OworCXJldHVybiBiZXN0OwogfQogCi1zdGF0aWMgdm9pZCBwa3RnZW5fc3RvcChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCkgewotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqbmV4dCA9IE5VTEw7Ci0KLQlQR19ERUJVRyhwcmludGsoInBrdGdlbjogZW50ZXJpbmcgcGt0Z2VuX3N0b3AuXG4iKSk7Ci0KLSAgICAgICAgaWZfbG9jayh0KTsKLQotICAgICAgICBmb3IobmV4dD10LT5pZl9saXN0OyBuZXh0OyBuZXh0PW5leHQtPm5leHQpCi0gICAgICAgICAgICAgICAgcGt0Z2VuX3N0b3BfZGV2aWNlKG5leHQpOwotCi0gICAgICAgIGlmX3VubG9jayh0KTsKLX0KLQotc3RhdGljIHZvaWQgcGt0Z2VuX3JlbV9hbGxfaWZzKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KSAKK3N0YXRpYyB2b2lkIHBrdGdlbl9zdG9wKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KQogewotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqY3VyLCAqbmV4dCA9IE5VTEw7Ci0gICAgICAgIAotICAgICAgICAvKiBSZW1vdmUgYWxsIGRldmljZXMsIGZyZWUgbWVtICovCi0gCi0gICAgICAgIGlmX2xvY2sodCk7CisJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CiAKLSAgICAgICAgZm9yKGN1cj10LT5pZl9saXN0OyBjdXI7IGN1cj1uZXh0KSB7IAotCQluZXh0ID0gY3VyLT5uZXh0OworCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiBlbnRlcmluZyBwa3RnZW5fc3RvcFxuIikpOworCisJaWZfbG9jayh0KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpIHsKKwkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOworCQlpZiAocGt0X2Rldi0+c2tiKQorCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisKKwkJcGt0X2Rldi0+c2tiID0gTlVMTDsKKwl9CisKKwlpZl91bmxvY2sodCk7Cit9CisKKy8qCisgKiBvbmUgb2Ygb3VyIGRldmljZXMgbmVlZHMgdG8gYmUgcmVtb3ZlZCAtIGZpbmQgaXQKKyAqIGFuZCByZW1vdmUgaXQKKyAqLworc3RhdGljIHZvaWQgcGt0Z2VuX3JlbV9vbmVfaWYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcSwgKm47CisJc3RydWN0IHBrdGdlbl9kZXYgKmN1cjsKKworCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiBlbnRlcmluZyBwa3RnZW5fcmVtX29uZV9pZlxuIikpOworCisJaWZfbG9jayh0KTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxLCBuLCAmdC0+aWZfbGlzdCkgeworCQljdXIgPSBsaXN0X2VudHJ5KHEsIHN0cnVjdCBwa3RnZW5fZGV2LCBsaXN0KTsKKworCQlpZiAoIWN1ci0+cmVtb3ZhbF9tYXJrKQorCQkJY29udGludWU7CisKKwkJaWYgKGN1ci0+c2tiKQorCQkJa2ZyZWVfc2tiKGN1ci0+c2tiKTsKKwkJY3VyLT5za2IgPSBOVUxMOworCisJCXBrdGdlbl9yZW1vdmVfZGV2aWNlKHQsIGN1cik7CisKKwkJYnJlYWs7CisJfQorCisJaWZfdW5sb2NrKHQpOworfQorCitzdGF0aWMgdm9pZCBwa3RnZW5fcmVtX2FsbF9pZnMoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcSwgKm47CisJc3RydWN0IHBrdGdlbl9kZXYgKmN1cjsKKworCS8qIFJlbW92ZSBhbGwgZGV2aWNlcywgZnJlZSBtZW0gKi8KKworCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiBlbnRlcmluZyBwa3RnZW5fcmVtX2FsbF9pZnNcbiIpKTsKKwlpZl9sb2NrKHQpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHEsIG4sICZ0LT5pZl9saXN0KSB7CisJCWN1ciA9IGxpc3RfZW50cnkocSwgc3RydWN0IHBrdGdlbl9kZXYsIGxpc3QpOworCisJCWlmIChjdXItPnNrYikKKwkJCWtmcmVlX3NrYihjdXItPnNrYik7CisJCWN1ci0+c2tiID0gTlVMTDsKKwogCQlwa3RnZW5fcmVtb3ZlX2RldmljZSh0LCBjdXIpOwogCX0KIAotICAgICAgICBpZl91bmxvY2sodCk7CisJaWZfdW5sb2NrKHQpOwogfQogCi1zdGF0aWMgdm9pZCBwa3RnZW5fcmVtX3RocmVhZChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCkgCitzdGF0aWMgdm9pZCBwa3RnZW5fcmVtX3RocmVhZChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCkKIHsKLSAgICAgICAgLyogUmVtb3ZlIGZyb20gdGhlIHRocmVhZCBsaXN0ICovCi0KLQlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdG1wID0gcGt0Z2VuX3RocmVhZHM7CisJLyogUmVtb3ZlIGZyb20gdGhlIHRocmVhZCBsaXN0ICovCiAKIAlyZW1vdmVfcHJvY19lbnRyeSh0LT5uYW1lLCBwZ19wcm9jX2Rpcik7CiAKLQl0aHJlYWRfbG9jaygpOworCW11dGV4X2xvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CiAKLQlpZiAodG1wID09IHQpCi0JCXBrdGdlbl90aHJlYWRzID0gdG1wLT5uZXh0OwotCWVsc2UgewotCQl3aGlsZSAodG1wKSB7Ci0JCQlpZiAodG1wLT5uZXh0ID09IHQpIHsKLQkJCQl0bXAtPm5leHQgPSB0LT5uZXh0OwotCQkJCXQtPm5leHQgPSBOVUxMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdG1wID0gdG1wLT5uZXh0OwotCQl9Ci0JfQotICAgICAgICB0aHJlYWRfdW5sb2NrKCk7CisJbGlzdF9kZWwoJnQtPnRoX2xpc3QpOworCisJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHBrdGdlbl94bWl0KHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQpAQCAtMjUyNyw3ICsyODM4LDcgQEAKIAlpbnQgcmV0OwogCiAJb2RldiA9IHBrdF9kZXYtPm9kZXY7Ci0JCisKIAlpZiAocGt0X2Rldi0+ZGVsYXlfdXMgfHwgcGt0X2Rldi0+ZGVsYXlfbnMpIHsKIAkJdTY0IG5vdzsKIApAQCAtMjU0NCw2NyArMjg1NSw3MSBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JCisKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChvZGV2KSB8fCBuZWVkX3Jlc2NoZWQoKSkgewogCQlpZGxlX3N0YXJ0ID0gZ2V0Q3VyVXMoKTsKLQkJCisKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKG9kZXYpKSB7CiAJCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7CisJCQlpZiAocGt0X2Rldi0+c2tiKQorCQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmIChuZWVkX3Jlc2NoZWQoKSkgCisJCWlmIChuZWVkX3Jlc2NoZWQoKSkKIAkJCXNjaGVkdWxlKCk7Ci0JCQorCiAJCXBrdF9kZXYtPmlkbGVfYWNjICs9IGdldEN1clVzKCkgLSBpZGxlX3N0YXJ0OwotCQkKKwogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChvZGV2KSkgewotCQkJcGt0X2Rldi0+bmV4dF90eF91cyA9IGdldEN1clVzKCk7IC8qIFRPRE8gKi8KKwkJCXBrdF9kZXYtPm5leHRfdHhfdXMgPSBnZXRDdXJVcygpOwkvKiBUT0RPICovCiAJCQlwa3RfZGV2LT5uZXh0X3R4X25zID0gMDsKLQkJCWdvdG8gb3V0OyAvKiBUcnkgdGhlIG5leHQgaW50ZXJmYWNlICovCisJCQlnb3RvIG91dDsJLyogVHJ5IHRoZSBuZXh0IGludGVyZmFjZSAqLwogCQl9CiAJfQotCQorCiAJaWYgKHBrdF9kZXYtPmxhc3Rfb2sgfHwgIXBrdF9kZXYtPnNrYikgewotCQlpZiAoKCsrcGt0X2Rldi0+Y2xvbmVfY291bnQgPj0gcGt0X2Rldi0+Y2xvbmVfc2tiICkgfHwgKCFwa3RfZGV2LT5za2IpKSB7CisJCWlmICgoKytwa3RfZGV2LT5jbG9uZV9jb3VudCA+PSBwa3RfZGV2LT5jbG9uZV9za2IpCisJCSAgICB8fCAoIXBrdF9kZXYtPnNrYikpIHsKIAkJCS8qIGJ1aWxkIGEgbmV3IHBrdCAqLwotCQkJaWYgKHBrdF9kZXYtPnNrYikgCisJCQlpZiAocGt0X2Rldi0+c2tiKQogCQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOwotCQkJCisKIAkJCXBrdF9kZXYtPnNrYiA9IGZpbGxfcGFja2V0KG9kZXYsIHBrdF9kZXYpOwogCQkJaWYgKHBrdF9kZXYtPnNrYiA9PSBOVUxMKSB7CiAJCQkJcHJpbnRrKCJwa3RnZW46IEVSUk9SOiBjb3VsZG4ndCBhbGxvY2F0ZSBza2IgaW4gZmlsbF9wYWNrZXQuXG4iKTsKIAkJCQlzY2hlZHVsZSgpOwotCQkJCXBrdF9kZXYtPmNsb25lX2NvdW50LS07IC8qIGJhY2sgb3V0IGluY3JlbWVudCwgT09NICovCisJCQkJcGt0X2Rldi0+Y2xvbmVfY291bnQtLTsJLyogYmFjayBvdXQgaW5jcmVtZW50LCBPT00gKi8KIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCXBrdF9kZXYtPmFsbG9jYXRlZF9za2JzKys7Ci0JCQlwa3RfZGV2LT5jbG9uZV9jb3VudCA9IDA7IC8qIHJlc2V0IGNvdW50ZXIgKi8KKwkJCXBrdF9kZXYtPmNsb25lX2NvdW50ID0gMDsJLyogcmVzZXQgY291bnRlciAqLwogCQl9CiAJfQotCQorCiAJc3Bpbl9sb2NrX2JoKCZvZGV2LT54bWl0X2xvY2spOwogCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChvZGV2KSkgewogCiAJCWF0b21pY19pbmMoJihwa3RfZGV2LT5za2ItPnVzZXJzKSk7Ci1yZXRyeV9ub3c6CisJICAgICAgcmV0cnlfbm93OgogCQlyZXQgPSBvZGV2LT5oYXJkX3N0YXJ0X3htaXQocGt0X2Rldi0+c2tiLCBvZGV2KTsKIAkJaWYgKGxpa2VseShyZXQgPT0gTkVUREVWX1RYX09LKSkgewotCQkJcGt0X2Rldi0+bGFzdF9vayA9IDE7ICAgIAorCQkJcGt0X2Rldi0+bGFzdF9vayA9IDE7CiAJCQlwa3RfZGV2LT5zb2ZhcisrOwogCQkJcGt0X2Rldi0+c2VxX251bSsrOwogCQkJcGt0X2Rldi0+dHhfYnl0ZXMgKz0gcGt0X2Rldi0+Y3VyX3BrdF9zaXplOwotCQkJCi0JCX0gZWxzZSBpZiAocmV0ID09IE5FVERFVl9UWF9MT0NLRUQgCisKKwkJfSBlbHNlIGlmIChyZXQgPT0gTkVUREVWX1RYX0xPQ0tFRAogCQkJICAgJiYgKG9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MTFRYKSkgewogCQkJY3B1X3JlbGF4KCk7CiAJCQlnb3RvIHJldHJ5X25vdzsKLQkJfSBlbHNlIHsgIC8qIFJldHJ5IGl0IG5leHQgdGltZSAqLwotCQkJCisJCX0gZWxzZSB7CS8qIFJldHJ5IGl0IG5leHQgdGltZSAqLworCiAJCQlhdG9taWNfZGVjKCYocGt0X2Rldi0+c2tiLT51c2VycykpOwotCQkJCisKIAkJCWlmIChkZWJ1ZyAmJiBuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAicGt0Z2VuOiBIYXJkIHhtaXQgZXJyb3JcbiIpOwotCQkJCisKIAkJCXBrdF9kZXYtPmVycm9ycysrOwogCQkJcGt0X2Rldi0+bGFzdF9vayA9IDA7CiAJCX0KQEAgLTI2MTksMTYgKzI5MzQsMTYgQEAKIAkJCXBrdF9kZXYtPm5leHRfdHhfdXMrKzsKIAkJCXBrdF9kZXYtPm5leHRfdHhfbnMgLT0gMTAwMDsKIAkJfQotCX0gCisJfQogCi0JZWxzZSB7ICAvKiBSZXRyeSBpdCBuZXh0IHRpbWUgKi8KLSAgICAgICAgICAgICAgICBwa3RfZGV2LT5sYXN0X29rID0gMDsKLSAgICAgICAgICAgICAgICBwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKTsgLyogVE9ETyAqLworCWVsc2UgewkJCS8qIFJldHJ5IGl0IG5leHQgdGltZSAqLworCQlwa3RfZGV2LT5sYXN0X29rID0gMDsKKwkJcGt0X2Rldi0+bmV4dF90eF91cyA9IGdldEN1clVzKCk7CS8qIFRPRE8gKi8KIAkJcGt0X2Rldi0+bmV4dF90eF9ucyA9IDA7Ci0gICAgICAgIH0KKwl9CiAKIAlzcGluX3VubG9ja19iaCgmb2Rldi0+eG1pdF9sb2NrKTsKLQkKKwogCS8qIElmIHBrdF9kZXYtPmNvdW50IGlzIHplcm8sIHRoZW4gcnVuIGZvcmV2ZXIgKi8KIAlpZiAoKHBrdF9kZXYtPmNvdW50ICE9IDApICYmIChwa3RfZGV2LT5zb2ZhciA+PSBwa3RfZGV2LT5jb3VudCkpIHsKIAkJaWYgKGF0b21pY19yZWFkKCYocGt0X2Rldi0+c2tiLT51c2VycykpICE9IDEpIHsKQEAgLTI2NDEsNzIgKzI5NTYsNzQgQEAKIAkJCX0KIAkJCXBrdF9kZXYtPmlkbGVfYWNjICs9IGdldEN1clVzKCkgLSBpZGxlX3N0YXJ0OwogCQl9Ci0gICAgICAgICAgICAgICAgCisKIAkJLyogRG9uZSB3aXRoIHRoaXMgKi8KIAkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCX0gCi0gb3V0OjsKLSB9CisJCWlmIChwa3RfZGV2LT5za2IpCisJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKKwkJcGt0X2Rldi0+c2tiID0gTlVMTDsKKwl9CitvdXQ6OworfQogCiAvKiAKICAqIE1haW4gbG9vcCBvZiB0aGUgdGhyZWFkIGdvZXMgaGVyZQogICovCiAKLXN0YXRpYyB2b2lkIHBrdGdlbl90aHJlYWRfd29ya2VyKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KSAKK3N0YXRpYyB2b2lkIHBrdGdlbl90aHJlYWRfd29ya2VyKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KQogewogCURFRklORV9XQUlUKHdhaXQpOwotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiA9IE5VTEw7CisJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBOVUxMOwogCWludCBjcHUgPSB0LT5jcHU7CiAJc2lnc2V0X3QgdG1wc2lnOwogCXUzMiBtYXhfYmVmb3JlX3NvZnRpcnE7Ci0gICAgICAgIHUzMiB0eF9zaW5jZV9zb2Z0aXJxID0gMDsKKwl1MzIgdHhfc2luY2Vfc29mdGlycSA9IDA7CiAKIAlkYWVtb25pemUoInBrdGdlbi8lZCIsIGNwdSk7CiAKLSAgICAgICAgLyogQmxvY2sgYWxsIHNpZ25hbHMgZXhjZXB0IFNJR0tJTEwsIFNJR1NUT1AgYW5kIFNJR1RFUk0gKi8KKwkvKiBCbG9jayBhbGwgc2lnbmFscyBleGNlcHQgU0lHS0lMTCwgU0lHU1RPUCBhbmQgU0lHVEVSTSAqLwogCi0gICAgICAgIHNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotICAgICAgICB0bXBzaWcgPSBjdXJyZW50LT5ibG9ja2VkOwotICAgICAgICBzaWdpbml0c2V0aW52KCZjdXJyZW50LT5ibG9ja2VkLCAKLSAgICAgICAgICAgICAgICAgICAgICBzaWdtYXNrKFNJR0tJTEwpIHwgCi0gICAgICAgICAgICAgICAgICAgICAgc2lnbWFzayhTSUdTVE9QKXwgCi0gICAgICAgICAgICAgICAgICAgICAgc2lnbWFzayhTSUdURVJNKSk7CisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJdG1wc2lnID0gY3VycmVudC0+YmxvY2tlZDsKKwlzaWdpbml0c2V0aW52KCZjdXJyZW50LT5ibG9ja2VkLAorCQkgICAgICBzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSB8IHNpZ21hc2soU0lHVEVSTSkpOwogCi0gICAgICAgIHJlY2FsY19zaWdwZW5kaW5nKCk7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCiAJLyogTWlncmF0ZSB0byB0aGUgcmlnaHQgQ1BVICovCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKLSAgICAgICAgaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBjcHUpCi0gICAgICAgICAgICAgICAgQlVHKCk7CisJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBjcHUpCisJCUJVRygpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdC0+cXVldWUpOwogCiAJdC0+Y29udHJvbCAmPSB+KFRfVEVSTUlOQVRFKTsKIAl0LT5jb250cm9sICY9IH4oVF9SVU4pOwogCXQtPmNvbnRyb2wgJj0gfihUX1NUT1ApOworCXQtPmNvbnRyb2wgJj0gfihUX1JFTURFVkFMTCk7CiAJdC0+Y29udHJvbCAmPSB+KFRfUkVNREVWKTsKIAotICAgICAgICB0LT5waWQgPSBjdXJyZW50LT5waWQ7ICAgICAgICAKKwl0LT5waWQgPSBjdXJyZW50LT5waWQ7CiAKLSAgICAgICAgUEdfREVCVUcocHJpbnRrKCJwa3RnZW46IHN0YXJ0aW5nIHBrdGdlbi8lZDogIHBpZD0lZFxuIiwgY3B1LCBjdXJyZW50LT5waWQpKTsKKwlQR19ERUJVRyhwcmludGsoInBrdGdlbjogc3RhcnRpbmcgcGt0Z2VuLyVkOiAgcGlkPSVkXG4iLCBjcHUsIGN1cnJlbnQtPnBpZCkpOwogCiAJbWF4X2JlZm9yZV9zb2Z0aXJxID0gdC0+bWF4X2JlZm9yZV9zb2Z0aXJxOwotICAgICAgICAKLSAgICAgICAgX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotICAgICAgICBtYigpOwogCi0gICAgICAgIHdoaWxlICgxKSB7Ci0JCQorCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwltYigpOworCisJd2hpbGUgKDEpIHsKKwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKIAkJLyoKIAkJICogR2V0IG5leHQgZGV2IHRvIHhtaXQgLS0gaWYgYW55LgogCQkgKi8KIAotICAgICAgICAgICAgICAgIHBrdF9kZXYgPSBuZXh0X3RvX3J1bih0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocGt0X2RldikgeworCQlwa3RfZGV2ID0gbmV4dF90b19ydW4odCk7CisKKwkJaWYgKHBrdF9kZXYpIHsKIAogCQkJcGt0Z2VuX3htaXQocGt0X2Rldik7CiAKQEAgLTI3MjQsMTE1ICszMDQxLDEyNSBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJcHJlcGFyZV90b193YWl0KCYodC0+cXVldWUpLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNjaGVkdWxlX3RpbWVvdXQoSFovMTApOworCQkJc2NoZWR1bGVfdGltZW91dChIWiAvIDEwKTsKIAkJCWZpbmlzaF93YWl0KCYodC0+cXVldWUpLCAmd2FpdCk7CiAJCX0KIAotICAgICAgICAgICAgICAgIC8qIAorCQkvKgogCQkgKiBCYWNrIGZyb20gc2xlZXAsIGVpdGhlciBkdWUgdG8gdGhlIHRpbWVvdXQgb3Igc2lnbmFsLgogCQkgKiBXZSBjaGVjayBpZiB3ZSBoYXZlIGFueSAicG9zdGVkIiB3b3JrIGZvciB1cy4KIAkJICovCiAKLSAgICAgICAgICAgICAgICBpZiAodC0+Y29udHJvbCAmIFRfVEVSTUlOQVRFIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIHJlY2VpdmVkIGEgcmVxdWVzdCB0byB0ZXJtaW5hdGUgb3Vyc2VsZiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCQorCQlpZiAodC0+Y29udHJvbCAmIFRfVEVSTUlOQVRFIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJLyogd2UgcmVjZWl2ZWQgYSByZXF1ZXN0IHRvIHRlcm1pbmF0ZSBvdXJzZWxmICovCisJCQlicmVhazsKIAotCQlpZih0LT5jb250cm9sICYgVF9TVE9QKSB7CisJCWlmICh0LT5jb250cm9sICYgVF9TVE9QKSB7CiAJCQlwa3RnZW5fc3RvcCh0KTsKIAkJCXQtPmNvbnRyb2wgJj0gfihUX1NUT1ApOwogCQl9CiAKLQkJaWYodC0+Y29udHJvbCAmIFRfUlVOKSB7CisJCWlmICh0LT5jb250cm9sICYgVF9SVU4pIHsKIAkJCXBrdGdlbl9ydW4odCk7CiAJCQl0LT5jb250cm9sICY9IH4oVF9SVU4pOwogCQl9CiAKLQkJaWYodC0+Y29udHJvbCAmIFRfUkVNREVWKSB7CisJCWlmICh0LT5jb250cm9sICYgVF9SRU1ERVZBTEwpIHsKIAkJCXBrdGdlbl9yZW1fYWxsX2lmcyh0KTsKKwkJCXQtPmNvbnRyb2wgJj0gfihUX1JFTURFVkFMTCk7CisJCX0KKworCQlpZiAodC0+Y29udHJvbCAmIFRfUkVNREVWKSB7CisJCQlwa3RnZW5fcmVtX29uZV9pZih0KTsKIAkJCXQtPmNvbnRyb2wgJj0gfihUX1JFTURFVik7CiAJCX0KIAotCQlpZiAobmVlZF9yZXNjaGVkKCkpIAorCQlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCQlzY2hlZHVsZSgpOwotICAgICAgICB9IAorCX0KIAotICAgICAgICBQR19ERUJVRyhwcmludGsoInBrdGdlbjogJXMgc3RvcHBpbmcgYWxsIGRldmljZVxuIiwgdC0+bmFtZSkpOwotICAgICAgICBwa3RnZW5fc3RvcCh0KTsKKwlQR19ERUJVRyhwcmludGsoInBrdGdlbjogJXMgc3RvcHBpbmcgYWxsIGRldmljZVxuIiwgdC0+bmFtZSkpOworCXBrdGdlbl9zdG9wKHQpOwogCi0gICAgICAgIFBHX0RFQlVHKHByaW50aygicGt0Z2VuOiAlcyByZW1vdmluZyBhbGwgZGV2aWNlXG4iLCB0LT5uYW1lKSk7Ci0gICAgICAgIHBrdGdlbl9yZW1fYWxsX2lmcyh0KTsKKwlQR19ERUJVRyhwcmludGsoInBrdGdlbjogJXMgcmVtb3ZpbmcgYWxsIGRldmljZVxuIiwgdC0+bmFtZSkpOworCXBrdGdlbl9yZW1fYWxsX2lmcyh0KTsKIAotICAgICAgICBQR19ERUJVRyhwcmludGsoInBrdGdlbjogJXMgcmVtb3ZpbmcgdGhyZWFkLlxuIiwgdC0+bmFtZSkpOwotICAgICAgICBwa3RnZW5fcmVtX3RocmVhZCh0KTsKKwlQR19ERUJVRyhwcmludGsoInBrdGdlbjogJXMgcmVtb3ZpbmcgdGhyZWFkLlxuIiwgdC0+bmFtZSkpOworCXBrdGdlbl9yZW1fdGhyZWFkKHQpOworCisJdC0+cmVtb3ZlZCA9IDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0Z2VuX2ZpbmRfZGV2KHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBjb25zdCBjaGFyKiBpZm5hbWUpIAorc3RhdGljIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RnZW5fZmluZF9kZXYoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsCisJCQkJCSAgY29uc3QgY2hhciAqaWZuYW1lKQogewotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiA9IE5VTEw7Ci0gICAgICAgIGlmX2xvY2sodCk7CisJc3RydWN0IHBrdGdlbl9kZXYgKnAsICpwa3RfZGV2ID0gTlVMTDsKKwlpZl9sb2NrKHQpOwogCi0gICAgICAgIGZvcihwa3RfZGV2PXQtPmlmX2xpc3Q7IHBrdF9kZXY7IHBrdF9kZXYgPSBwa3RfZGV2LT5uZXh0ICkgewotICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKHBrdF9kZXYtPmlmbmFtZSwgaWZuYW1lLCBJRk5BTVNJWikgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdC0+aWZfbGlzdCwgbGlzdCkKKwkJaWYgKHN0cm5jbXAocC0+aWZuYW1lLCBpZm5hbWUsIElGTkFNU0laKSA9PSAwKSB7CisJCQlwa3RfZGV2ID0gcDsKKwkJCWJyZWFrOworCQl9CiAKLSAgICAgICAgaWZfdW5sb2NrKHQpOwotCVBHX0RFQlVHKHByaW50aygicGt0Z2VuOiBmaW5kX2RldiglcykgcmV0dXJuaW5nICVwXG4iLCBpZm5hbWUscGt0X2RldikpOwotICAgICAgICByZXR1cm4gcGt0X2RldjsKKwlpZl91bmxvY2sodCk7CisJUEdfREVCVUcocHJpbnRrKCJwa3RnZW46IGZpbmRfZGV2KCVzKSByZXR1cm5pbmcgJXBcbiIsIGlmbmFtZSwgcGt0X2RldikpOworCXJldHVybiBwa3RfZGV2OwogfQogCiAvKiAKICAqIEFkZHMgYSBkZXYgYXQgZnJvbnQgb2YgaWZfbGlzdC4gCiAgKi8KIAotc3RhdGljIGludCBhZGRfZGV2X3RvX3RocmVhZChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpIAorc3RhdGljIGludCBhZGRfZGV2X3RvX3RocmVhZChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwKKwkJCSAgICAgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCiB7CiAJaW50IHJ2ID0gMDsKLQkKLSAgICAgICAgaWZfbG9jayh0KTsKIAotICAgICAgICBpZiAocGt0X2Rldi0+cGdfdGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJwa3RnZW46IEVSUk9SOiAgYWxyZWFkeSBhc3NpZ25lZCB0byBhIHRocmVhZC5cbiIpOwotICAgICAgICAgICAgICAgIHJ2ID0gLUVCVVNZOwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0JcGt0X2Rldi0+bmV4dCA9dC0+aWZfbGlzdDsgdC0+aWZfbGlzdD1wa3RfZGV2OwotICAgICAgICBwa3RfZGV2LT5wZ190aHJlYWQgPSB0OworCWlmX2xvY2sodCk7CisKKwlpZiAocGt0X2Rldi0+cGdfdGhyZWFkKSB7CisJCXByaW50aygicGt0Z2VuOiBFUlJPUjogIGFscmVhZHkgYXNzaWduZWQgdG8gYSB0aHJlYWQuXG4iKTsKKwkJcnYgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWxpc3RfYWRkKCZwa3RfZGV2LT5saXN0LCAmdC0+aWZfbGlzdCk7CisJcGt0X2Rldi0+cGdfdGhyZWFkID0gdDsKIAlwa3RfZGV2LT5ydW5uaW5nID0gMDsKIAotIG91dDoKLSAgICAgICAgaWZfdW5sb2NrKHQpOyAgICAgICAgCi0gICAgICAgIHJldHVybiBydjsKK291dDoKKwlpZl91bmxvY2sodCk7CisJcmV0dXJuIHJ2OwogfQogCiAvKiBDYWxsZWQgdW5kZXIgdGhyZWFkIGxvY2sgKi8KIAotc3RhdGljIGludCBwa3RnZW5fYWRkX2RldmljZShzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwgY29uc3QgY2hhciogaWZuYW1lKSAKK3N0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSkKIHsKLSAgICAgICAgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CisJc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZTsKLQkKKwogCS8qIFdlIGRvbid0IGFsbG93IGEgZGV2aWNlIHRvIGJlIG9uIHNldmVyYWwgdGhyZWFkcyAqLwogCiAJcGt0X2RldiA9IF9fcGt0Z2VuX05OX3RocmVhZHMoaWZuYW1lLCBGSU5EKTsKIAlpZiAocGt0X2RldikgewotICAgICAgICAgICAgICAgIHByaW50aygicGt0Z2VuOiBFUlJPUjogaW50ZXJmYWNlIGFscmVhZHkgdXNlZC5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgIH0KKwkJcHJpbnRrKCJwa3RnZW46IEVSUk9SOiBpbnRlcmZhY2UgYWxyZWFkeSB1c2VkLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQogCiAJcGt0X2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwa3RnZW5fZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwa3RfZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBrdF9kZXYtPmZsb3dzID0gdm1hbGxvYyhNQVhfQ0ZMT1dTKnNpemVvZihzdHJ1Y3QgZmxvd19zdGF0ZSkpOworCXBrdF9kZXYtPmZsb3dzID0gdm1hbGxvYyhNQVhfQ0ZMT1dTICogc2l6ZW9mKHN0cnVjdCBmbG93X3N0YXRlKSk7CiAJaWYgKHBrdF9kZXYtPmZsb3dzID09IE5VTEwpIHsKIAkJa2ZyZWUocGt0X2Rldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1zZXQocGt0X2Rldi0+Zmxvd3MsIDAsIE1BWF9DRkxPV1Mqc2l6ZW9mKHN0cnVjdCBmbG93X3N0YXRlKSk7CisJbWVtc2V0KHBrdF9kZXYtPmZsb3dzLCAwLCBNQVhfQ0ZMT1dTICogc2l6ZW9mKHN0cnVjdCBmbG93X3N0YXRlKSk7CiAKKwlwa3RfZGV2LT5yZW1vdmFsX21hcmsgPSAwOwogCXBrdF9kZXYtPm1pbl9wa3Rfc2l6ZSA9IEVUSF9aTEVOOwogCXBrdF9kZXYtPm1heF9wa3Rfc2l6ZSA9IEVUSF9aTEVOOwogCXBrdF9kZXYtPm5mcmFncyA9IDA7CkBAIC0yODQxLDE0ICszMTY4LDE0IEBACiAJcGt0X2Rldi0+ZGVsYXlfbnMgPSBwZ19kZWxheV9kICUgMTAwMDsKIAlwa3RfZGV2LT5jb3VudCA9IHBnX2NvdW50X2Q7CiAJcGt0X2Rldi0+c29mYXIgPSAwOwotCXBrdF9kZXYtPnVkcF9zcmNfbWluID0gOTsgLyogc2luayBwb3J0ICovCisJcGt0X2Rldi0+dWRwX3NyY19taW4gPSA5OwkvKiBzaW5rIHBvcnQgKi8KIAlwa3RfZGV2LT51ZHBfc3JjX21heCA9IDk7CiAJcGt0X2Rldi0+dWRwX2RzdF9taW4gPSA5OwogCXBrdF9kZXYtPnVkcF9kc3RfbWF4ID0gOTsKIAogCXN0cm5jcHkocGt0X2Rldi0+aWZuYW1lLCBpZm5hbWUsIElGTkFNU0laKTsKIAotCWlmICghIHBrdGdlbl9zZXR1cF9kZXYocGt0X2RldikpIHsKKwlpZiAoIXBrdGdlbl9zZXR1cF9kZXYocGt0X2RldikpIHsKIAkJcHJpbnRrKCJwa3RnZW46IEVSUk9SOiBwa3RnZW5fc2V0dXBfZGV2IGZhaWxlZC5cbiIpOwogCQlpZiAocGt0X2Rldi0+Zmxvd3MpCiAJCQl2ZnJlZShwa3RfZGV2LT5mbG93cyk7CkBAIC0yODcxLDY1ICszMTk4LDc0IEBACiAJcmV0dXJuIGFkZF9kZXZfdG9fdGhyZWFkKHQsIHBrdF9kZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHBrdGdlbl90aHJlYWQgKiBfX2luaXQgcGt0Z2VuX2ZpbmRfdGhyZWFkKGNvbnN0IGNoYXIqIG5hbWUpIAorc3RhdGljIHN0cnVjdCBwa3RnZW5fdGhyZWFkICpfX2luaXQgcGt0Z2VuX2ZpbmRfdGhyZWFkKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgICAgIHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0ID0gTlVMTDsKKwlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdDsKIAotCXRocmVhZF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKIAotICAgICAgICB0ID0gcGt0Z2VuX3RocmVhZHM7Ci0gICAgICAgIHdoaWxlICh0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmNtcCh0LT5uYW1lLCBuYW1lKSA9PSAwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnBrdGdlbl90aHJlYWRzLCB0aF9saXN0KQorCQlpZiAoc3RyY21wKHQtPm5hbWUsIG5hbWUpID09IDApIHsKKwkJCW11dGV4X3VubG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKKwkJCXJldHVybiB0OworCQl9CiAKLSAgICAgICAgICAgICAgICB0ID0gdC0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICB0aHJlYWRfdW5sb2NrKCk7Ci0gICAgICAgIHJldHVybiB0OworCW11dGV4X3VubG9jaygmcGt0Z2VuX3RocmVhZF9sb2NrKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcGt0Z2VuX2NyZWF0ZV90aHJlYWQoY29uc3QgY2hhciogbmFtZSwgaW50IGNwdSkgCitzdGF0aWMgaW50IF9faW5pdCBwa3RnZW5fY3JlYXRlX3RocmVhZChjb25zdCBjaGFyICpuYW1lLCBpbnQgY3B1KQogewotICAgICAgICBzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IE5VTEw7CisJaW50IGVycjsKKwlzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCA9IE5VTEw7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZTsKIAotICAgICAgICBpZiAoc3RybGVuKG5hbWUpID4gMzEpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoInBrdGdlbjogRVJST1I6ICBUaHJlYWQgbmFtZSBjYW5ub3QgYmUgbW9yZSB0aGFuIDMxIGNoYXJhY3RlcnMuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHBrdGdlbl9maW5kX3RocmVhZChuYW1lKSkgewotICAgICAgICAgICAgICAgIHByaW50aygicGt0Z2VuOiBFUlJPUjogdGhyZWFkOiAlcyBhbHJlYWR5IGV4aXN0c1xuIiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KKwlpZiAoc3RybGVuKG5hbWUpID4gMzEpIHsKKwkJcHJpbnRrKCJwa3RnZW46IEVSUk9SOiAgVGhyZWFkIG5hbWUgY2Fubm90IGJlIG1vcmUgdGhhbiAzMSBjaGFyYWN0ZXJzLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotICAgICAgICB0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBrdGdlbl90aHJlYWQpLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgaWYgKCF0KSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJwa3RnZW46IEVSUk9SOiBvdXQgb2YgbWVtb3J5LCBjYW4ndCBjcmVhdGUgbmV3IHRocmVhZC5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICB9CisJaWYgKHBrdGdlbl9maW5kX3RocmVhZChuYW1lKSkgeworCQlwcmludGsoInBrdGdlbjogRVJST1I6IHRocmVhZDogJXMgYWxyZWFkeSBleGlzdHNcbiIsIG5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLSAgICAgICAgc3RyY3B5KHQtPm5hbWUsIG5hbWUpOwotICAgICAgICBzcGluX2xvY2tfaW5pdCgmdC0+aWZfbG9jayk7CisJdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwa3RnZW5fdGhyZWFkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0KSB7CisJCXByaW50aygicGt0Z2VuOiBFUlJPUjogb3V0IG9mIG1lbW9yeSwgY2FuJ3QgY3JlYXRlIG5ldyB0aHJlYWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3RyY3B5KHQtPm5hbWUsIG5hbWUpOworCXNwaW5fbG9ja19pbml0KCZ0LT5pZl9sb2NrKTsKIAl0LT5jcHUgPSBjcHU7Ci0gICAgICAgIAotICAgICAgICBwZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIDA2MDAsIHBnX3Byb2NfZGlyKTsKLSAgICAgICAgaWYgKCFwZSkgewotICAgICAgICAgICAgICAgIHByaW50aygicGt0Z2VuOiBjYW5ub3QgY3JlYXRlICVzLyVzIHByb2NmcyBlbnRyeS5cbiIsCisKKwlwZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIDA2MDAsIHBnX3Byb2NfZGlyKTsKKwlpZiAoIXBlKSB7CisJCXByaW50aygicGt0Z2VuOiBjYW5ub3QgY3JlYXRlICVzLyVzIHByb2NmcyBlbnRyeS5cbiIsCiAJCSAgICAgICBQR19QUk9DX0RJUiwgdC0+bmFtZSk7Ci0gICAgICAgICAgICAgICAga2ZyZWUodCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KKwkJa2ZyZWUodCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXBlLT5wcm9jX2ZvcHMgPSAmcGt0Z2VuX3RocmVhZF9mb3BzOwogCXBlLT5kYXRhID0gdDsKIAotICAgICAgICB0LT5uZXh0ID0gcGt0Z2VuX3RocmVhZHM7Ci0gICAgICAgIHBrdGdlbl90aHJlYWRzID0gdDsKKwlJTklUX0xJU1RfSEVBRCgmdC0+aWZfbGlzdCk7CiAKLQlpZiAoa2VybmVsX3RocmVhZCgodm9pZCAqKSBwa3RnZW5fdGhyZWFkX3dvcmtlciwgKHZvaWQgKikgdCwgCi0JCQkgIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5EKSA8IDApCisJbGlzdF9hZGRfdGFpbCgmdC0+dGhfbGlzdCwgJnBrdGdlbl90aHJlYWRzKTsKKworCXQtPnJlbW92ZWQgPSAwOworCisJZXJyID0ga2VybmVsX3RocmVhZCgodm9pZCAqKXBrdGdlbl90aHJlYWRfd29ya2VyLCAodm9pZCAqKXQsCisJCQkgIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5EKTsKKwlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoInBrdGdlbjoga2VybmVsX3RocmVhZCgpIGZhaWxlZCBmb3IgY3B1ICVkXG4iLCB0LT5jcHUpOworCQlyZW1vdmVfcHJvY19lbnRyeSh0LT5uYW1lLCBwZ19wcm9jX2Rpcik7CisJCWxpc3RfZGVsKCZ0LT50aF9saXN0KTsKKwkJa2ZyZWUodCk7CisJCXJldHVybiBlcnI7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTM3LDU1ICszMjczLDUyIEBACiAvKiAKICAqIFJlbW92ZXMgYSBkZXZpY2UgZnJvbSB0aGUgdGhyZWFkIGlmX2xpc3QuIAogICovCi1zdGF0aWMgdm9pZCBfcmVtX2Rldl9mcm9tX2lmX2xpc3Qoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KSAKK3N0YXRpYyB2b2lkIF9yZW1fZGV2X2Zyb21faWZfbGlzdChzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCwKKwkJCQkgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewotCXN0cnVjdCBwa3RnZW5fZGV2ICppLCAqcHJldiA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqcSwgKm47CisJc3RydWN0IHBrdGdlbl9kZXYgKnA7CiAKLQlpID0gdC0+aWZfbGlzdDsKLQotCXdoaWxlKGkpIHsKLQkJaWYoaSA9PSBwa3RfZGV2KSB7Ci0JCQlpZihwcmV2KSBwcmV2LT5uZXh0ID0gaS0+bmV4dDsKLQkJCWVsc2UgdC0+aWZfbGlzdCA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCQlwcmV2ID0gaTsKLQkJaT1pLT5uZXh0OworCWxpc3RfZm9yX2VhY2hfc2FmZShxLCBuLCAmdC0+aWZfbGlzdCkgeworCQlwID0gbGlzdF9lbnRyeShxLCBzdHJ1Y3QgcGt0Z2VuX2RldiwgbGlzdCk7CisJCWlmIChwID09IHBrdF9kZXYpCisJCQlsaXN0X2RlbCgmcC0+bGlzdCk7CiAJfQogfQogCi1zdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikgCitzdGF0aWMgaW50IHBrdGdlbl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0LAorCQkJCXN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewogCiAJUEdfREVCVUcocHJpbnRrKCJwa3RnZW46IHJlbW92ZV9kZXZpY2UgcGt0X2Rldj0lcFxuIiwgcGt0X2RldikpOwogCi0gICAgICAgIGlmIChwa3RfZGV2LT5ydW5uaW5nKSB7IAotICAgICAgICAgICAgICAgIHByaW50aygicGt0Z2VuOldBUk5JTkc6IHRyeWluZyB0byByZW1vdmUgYSBydW5uaW5nIGludGVyZmFjZSwgc3RvcHBpbmcgaXQgbm93LlxuIik7Ci0gICAgICAgICAgICAgICAgcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKiBEaXMtYXNzb2NpYXRlIGZyb20gdGhlIGludGVyZmFjZSAqLworCWlmIChwa3RfZGV2LT5ydW5uaW5nKSB7CisJCXByaW50aygicGt0Z2VuOldBUk5JTkc6IHRyeWluZyB0byByZW1vdmUgYSBydW5uaW5nIGludGVyZmFjZSwgc3RvcHBpbmcgaXQgbm93LlxuIik7CisJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKKwl9CisKKwkvKiBEaXMtYXNzb2NpYXRlIGZyb20gdGhlIGludGVyZmFjZSAqLwogCiAJaWYgKHBrdF9kZXYtPm9kZXYpIHsKIAkJZGV2X3B1dChwa3RfZGV2LT5vZGV2KTsKLSAgICAgICAgICAgICAgICBwa3RfZGV2LT5vZGV2ID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAKKwkJcGt0X2Rldi0+b2RldiA9IE5VTEw7CisJfQorCiAJLyogQW5kIHVwZGF0ZSB0aGUgdGhyZWFkIGlmX2xpc3QgKi8KIAogCV9yZW1fZGV2X2Zyb21faWZfbGlzdCh0LCBwa3RfZGV2KTsKIAotICAgICAgICAvKiBDbGVhbiB1cCBwcm9jIGZpbGUgc3lzdGVtICovCisJLyogQ2xlYW4gdXAgcHJvYyBmaWxlIHN5c3RlbSAqLwogCiAJcmVtb3ZlX3Byb2NfZW50cnkocGt0X2Rldi0+aWZuYW1lLCBwZ19wcm9jX2Rpcik7CiAKIAlpZiAocGt0X2Rldi0+Zmxvd3MpCiAJCXZmcmVlKHBrdF9kZXYtPmZsb3dzKTsKIAlrZnJlZShwa3RfZGV2KTsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHBnX2luaXQodm9pZCkgCitzdGF0aWMgaW50IF9faW5pdCBwZ19pbml0KHZvaWQpCiB7CiAJaW50IGNwdTsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlOwpAQCAtMjk5OCw1MCArMzMzMSw2NSBAQAogCXBnX3Byb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcGUgPSBjcmVhdGVfcHJvY19lbnRyeShQR0NUUkwsIDA2MDAsIHBnX3Byb2NfZGlyKTsKLSAgICAgICAgaWYgKHBlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJwa3RnZW46IEVSUk9SOiBjYW5ub3QgY3JlYXRlICVzIHByb2NmcyBlbnRyeS5cbiIsIFBHQ1RSTCk7CisJaWYgKHBlID09IE5VTEwpIHsKKwkJcHJpbnRrKCJwa3RnZW46IEVSUk9SOiBjYW5ub3QgY3JlYXRlICVzIHByb2NmcyBlbnRyeS5cbiIsCisJCSAgICAgICBQR0NUUkwpOwogCQlwcm9jX25ldF9yZW1vdmUoUEdfUFJPQ19ESVIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotICAgICAgICBwZS0+cHJvY19mb3BzID0gJnBrdGdlbl9mb3BzOwotICAgICAgICBwZS0+ZGF0YSAgICAgID0gTlVMTDsKKwlwZS0+cHJvY19mb3BzID0gJnBrdGdlbl9mb3BzOworCXBlLT5kYXRhID0gTlVMTDsKIAogCS8qIFJlZ2lzdGVyIHVzIHRvIHJlY2VpdmUgbmV0ZGV2aWNlIGV2ZW50cyAqLwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcGt0Z2VuX25vdGlmaWVyX2Jsb2NrKTsKLSAgICAgICAgCisKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpbnQgZXJyOwogCQljaGFyIGJ1ZlszMF07CiAKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgImtwa3RnZW5kXyVpIiwgY3B1KTsKLSAgICAgICAgICAgICAgICBwa3RnZW5fY3JlYXRlX3RocmVhZChidWYsIGNwdSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7ICAgICAgICAKKwkJc3ByaW50ZihidWYsICJrcGt0Z2VuZF8laSIsIGNwdSk7CisJCWVyciA9IHBrdGdlbl9jcmVhdGVfdGhyZWFkKGJ1ZiwgY3B1KTsKKwkJaWYgKGVycikKKwkJCXByaW50aygicGt0Z2VuOiBXQVJOSU5HOiBDYW5ub3QgY3JlYXRlIHRocmVhZCBmb3IgY3B1ICVkICglZClcbiIsCisJCQkJCWNwdSwgZXJyKTsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmcGt0Z2VuX3RocmVhZHMpKSB7CisJCXByaW50aygicGt0Z2VuOiBFUlJPUjogSW5pdGlhbGl6YXRpb24gZmFpbGVkIGZvciBhbGwgdGhyZWFkc1xuIik7CisJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwa3RnZW5fbm90aWZpZXJfYmxvY2spOworCQlyZW1vdmVfcHJvY19lbnRyeShQR0NUUkwsIHBnX3Byb2NfZGlyKTsKKwkJcHJvY19uZXRfcmVtb3ZlKFBHX1BST0NfRElSKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwZ19jbGVhbnVwKHZvaWQpCiB7CisJc3RydWN0IHBrdGdlbl90aHJlYWQgKnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcSwgKm47CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcXVldWUpOwogCi0gICAgICAgIC8qIFN0b3AgYWxsIGludGVyZmFjZXMgJiB0aHJlYWRzICovICAgICAgICAKKwkvKiBTdG9wIGFsbCBpbnRlcmZhY2VzICYgdGhyZWFkcyAqLwogCi0gICAgICAgIHdoaWxlIChwa3RnZW5fdGhyZWFkcykgewotICAgICAgICAgICAgICAgIHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0ID0gcGt0Z2VuX3RocmVhZHM7Ci0gICAgICAgICAgICAgICAgcGt0Z2VuX3RocmVhZHMtPmNvbnRyb2wgfD0gKFRfVEVSTUlOQVRFKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocSwgbiwgJnBrdGdlbl90aHJlYWRzKSB7CisJCXQgPSBsaXN0X2VudHJ5KHEsIHN0cnVjdCBwa3RnZW5fdGhyZWFkLCB0aF9saXN0KTsKKwkJdC0+Y29udHJvbCB8PSAoVF9URVJNSU5BVEUpOwogCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHF1ZXVlLCAodCAhPSBwa3RnZW5fdGhyZWFkcyksIEhaKTsKLSAgICAgICAgfQorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChxdWV1ZSwgKHQtPnJlbW92ZWQgPT0gMSksIEhaKTsKKwl9CiAKLSAgICAgICAgLyogVW4tcmVnaXN0ZXIgdXMgZnJvbSByZWNlaXZpbmcgbmV0ZGV2aWNlIGV2ZW50cyAqLworCS8qIFVuLXJlZ2lzdGVyIHVzIGZyb20gcmVjZWl2aW5nIG5ldGRldmljZSBldmVudHMgKi8KIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcGt0Z2VuX25vdGlmaWVyX2Jsb2NrKTsKIAotICAgICAgICAvKiBDbGVhbiB1cCBwcm9jIGZpbGUgc3lzdGVtICovCisJLyogQ2xlYW4gdXAgcHJvYyBmaWxlIHN5c3RlbSAqLwogCXJlbW92ZV9wcm9jX2VudHJ5KFBHQ1RSTCwgcGdfcHJvY19kaXIpOwogCXByb2NfbmV0X3JlbW92ZShQR19QUk9DX0RJUik7CiB9CiAKLQogbW9kdWxlX2luaXQocGdfaW5pdCk7CiBtb2R1bGVfZXhpdChwZ19jbGVhbnVwKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcmVxdWVzdF9zb2NrLmMgYi9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYwppbmRleCBiODIwM2RlLi45OGYwZmM5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYworKysgYi9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYwpAQCAtNTIsNyArNTIsNiBAQAogCWdldF9yYW5kb21fYnl0ZXMoJmxvcHQtPmhhc2hfcm5kLCBzaXplb2YobG9wdC0+aGFzaF9ybmQpKTsKIAlyd2xvY2tfaW5pdCgmcXVldWUtPnN5bl93YWl0X2xvY2spOwogCXF1ZXVlLT5yc2txX2FjY2VwdF9oZWFkID0gcXVldWUtPnJza3FfYWNjZXB0X2hlYWQgPSBOVUxMOwotCXF1ZXVlLT5yc2txX2RlZmVyX2FjY2VwdCA9IDA7CiAJbG9wdC0+bnJfdGFibGVfZW50cmllcyA9IG5yX3RhYmxlX2VudHJpZXM7CiAKIAl3cml0ZV9sb2NrX2JoKCZxdWV1ZS0+c3luX3dhaXRfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IGVjYTI5NzYuLjNmY2ZhOWMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNTAsMjYgKzUxLDM2IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKyNpZmRlZiBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSworI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNlbmRpZgkvKiBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyAqLwogCi1ERUNMQVJFX01VVEVYKHJ0bmxfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgocnRubF9tdXRleCk7CiAKIHZvaWQgcnRubF9sb2NrKHZvaWQpCiB7Ci0JcnRubF9zaGxvY2soKTsKKwltdXRleF9sb2NrKCZydG5sX211dGV4KTsKIH0KIAotaW50IHJ0bmxfbG9ja19pbnRlcnJ1cHRpYmxlKHZvaWQpCit2b2lkIF9fcnRubF91bmxvY2sodm9pZCkKIHsKLQlyZXR1cm4gZG93bl9pbnRlcnJ1cHRpYmxlKCZydG5sX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZydG5sX211dGV4KTsKIH0KLSAKKwogdm9pZCBydG5sX3VubG9jayh2b2lkKQogewotCXJ0bmxfc2h1bmxvY2soKTsKLQorCW11dGV4X3VubG9jaygmcnRubF9tdXRleCk7CisJaWYgKHJ0bmwgJiYgcnRubC0+c2tfcmVjZWl2ZV9xdWV1ZS5xbGVuKQorCQlydG5sLT5za19kYXRhX3JlYWR5KHJ0bmwsIDApOwogCW5ldGRldl9ydW5fdG9kbygpOwogfQogCitpbnQgcnRubF90cnlsb2NrKHZvaWQpCit7CisJcmV0dXJuIG11dGV4X3RyeWxvY2soJnJ0bmxfbXV0ZXgpOworfQorCiBpbnQgcnRhdHRyX3BhcnNlKHN0cnVjdCBydGF0dHIgKnRiW10sIGludCBtYXhhdHRyLCBzdHJ1Y3QgcnRhdHRyICpydGEsIGludCBsZW4pCiB7CiAJbWVtc2V0KHRiLCAwLCBzaXplb2Yoc3RydWN0IHJ0YXR0ciopKm1heGF0dHIpOwpAQCAtMTc5LDYgKzE5MCwzMyBAQAogfQogCiAKK3N0YXRpYyB2b2lkIHNldF9vcGVyc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciB0cmFuc2l0aW9uKQoreworCXVuc2lnbmVkIGNoYXIgb3BlcnN0YXRlID0gZGV2LT5vcGVyc3RhdGU7CisKKwlzd2l0Y2godHJhbnNpdGlvbikgeworCWNhc2UgSUZfT1BFUl9VUDoKKwkJaWYgKChvcGVyc3RhdGUgPT0gSUZfT1BFUl9ET1JNQU5UIHx8CisJCSAgICAgb3BlcnN0YXRlID09IElGX09QRVJfVU5LTk9XTikgJiYKKwkJICAgICFuZXRpZl9kb3JtYW50KGRldikpCisJCQlvcGVyc3RhdGUgPSBJRl9PUEVSX1VQOworCQlicmVhazsKKworCWNhc2UgSUZfT1BFUl9ET1JNQU5UOgorCQlpZiAob3BlcnN0YXRlID09IElGX09QRVJfVVAgfHwKKwkJICAgIG9wZXJzdGF0ZSA9PSBJRl9PUEVSX1VOS05PV04pCisJCQlvcGVyc3RhdGUgPSBJRl9PUEVSX0RPUk1BTlQ7CisJCWJyZWFrOworCX07CisKKwlpZiAoZGV2LT5vcGVyc3RhdGUgIT0gb3BlcnN0YXRlKSB7CisJCXdyaXRlX2xvY2tfYmgoJmRldl9iYXNlX2xvY2spOworCQlkZXYtPm9wZXJzdGF0ZSA9IG9wZXJzdGF0ZTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKKwkJbmV0ZGV2X3N0YXRlX2NoYW5nZShkZXYpOworCX0KK30KKwogc3RhdGljIGludCBydG5ldGxpbmtfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgaW50IHR5cGUsIHUzMiBwaWQsIHUzMiBzZXEsIHUzMiBjaGFuZ2UsIAogCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC0yMDksNiArMjQ3LDEzIEBACiAJfQogCiAJaWYgKDEpIHsKKwkJdTggb3BlcnN0YXRlID0gbmV0aWZfcnVubmluZyhkZXYpP2Rldi0+b3BlcnN0YXRlOklGX09QRVJfRE9XTjsKKwkJdTggbGlua19tb2RlID0gZGV2LT5saW5rX21vZGU7CisJCVJUQV9QVVQoc2tiLCBJRkxBX09QRVJTVEFURSwgc2l6ZW9mKG9wZXJzdGF0ZSksICZvcGVyc3RhdGUpOworCQlSVEFfUFVUKHNrYiwgSUZMQV9MSU5LTU9ERSwgc2l6ZW9mKGxpbmtfbW9kZSksICZsaW5rX21vZGUpOworCX0KKworCWlmICgxKSB7CiAJCXN0cnVjdCBydG5sX2xpbmtfaWZtYXAgbWFwID0gewogCQkJLm1lbV9zdGFydCAgID0gZGV2LT5tZW1fc3RhcnQsCiAJCQkubWVtX2VuZCAgICAgPSBkZXYtPm1lbV9lbmQsCkBAIC0zOTksNiArNDQ0LDIyIEBACiAJCWRldi0+d2VpZ2h0ID0gKigodTMyICopIFJUQV9EQVRBKGlkYVtJRkxBX1dFSUdIVCAtIDFdKSk7CiAJfQogCisJaWYgKGlkYVtJRkxBX09QRVJTVEFURSAtIDFdKSB7CisJCWlmIChpZGFbSUZMQV9PUEVSU1RBVEUgLSAxXS0+cnRhX2xlbiAhPSBSVEFfTEVOR1RIKHNpemVvZih1OCkpKQorCQkJZ290byBvdXQ7CisKKwkJc2V0X29wZXJzdGF0ZShkZXYsICooKHU4ICopIFJUQV9EQVRBKGlkYVtJRkxBX09QRVJTVEFURSAtIDFdKSkpOworCX0KKworCWlmIChpZGFbSUZMQV9MSU5LTU9ERSAtIDFdKSB7CisJCWlmIChpZGFbSUZMQV9MSU5LTU9ERSAtIDFdLT5ydGFfbGVuICE9IFJUQV9MRU5HVEgoc2l6ZW9mKHU4KSkpCisJCQlnb3RvIG91dDsKKworCQl3cml0ZV9sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKKwkJZGV2LT5saW5rX21vZGUgPSAqKCh1OCAqKSBSVEFfREFUQShpZGFbSUZMQV9MSU5LTU9ERSAtIDFdKSk7CisJCXdyaXRlX3VubG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7CisJfQorCiAJaWYgKGlmbS0+aWZpX2luZGV4ID49IDAgJiYgaWRhW0lGTEFfSUZOQU1FIC0gMV0pIHsKIAkJY2hhciBpZm5hbWVbSUZOQU1TSVpdOwogCkBAIC00MTAsNiArNDcxLDE3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKKyNpZmRlZiBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSworCWlmIChpZGFbSUZMQV9XSVJFTEVTUyAtIDFdKSB7CisKKwkJLyogQ2FsbCBXaXJlbGVzcyBFeHRlbnNpb25zLgorCQkgKiBWYXJpb3VzIHN0dWZmIGNoZWNrZWQgaW4gdGhlcmUuLi4gKi8KKwkJZXJyID0gd2lyZWxlc3NfcnRuZXRsaW5rX3NldChkZXYsIFJUQV9EQVRBKGlkYVtJRkxBX1dJUkVMRVNTIC0gMV0pLCBpZGFbSUZMQV9XSVJFTEVTUyAtIDFdLT5ydGFfbGVuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKyNlbmRpZgkvKiBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyAqLworCiAJZXJyID0gMDsKIAogb3V0OgpAQCAtNDIwLDYgKzQ5Miw4MyBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSworc3RhdGljIGludCBkb19nZXRsaW5rKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciogaW5fbmxoLCB2b2lkICphcmcpCit7CisJc3RydWN0IGlmaW5mb21zZyAgKmlmbSA9IE5MTVNHX0RBVEEoaW5fbmxoKTsKKwlzdHJ1Y3QgcnRhdHRyICAgICoqaWRhID0gYXJnOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGlmaW5mb21zZyAqcjsKKwlzdHJ1Y3Qgbmxtc2doZHIgICpubGg7CisJaW50IGVyciA9IC1FTk9CVUZTOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgY2hhcgkgKmI7CisJY2hhciAqaXdfYnVmID0gTlVMTDsKKwlpbnQgaXdfYnVmX2xlbiA9IDA7CisKKwlpZiAoaWZtLT5pZmlfaW5kZXggPj0gMCkKKwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChpZm0tPmlmaV9pbmRleCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKyNpZmRlZiBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSworCWlmIChpZGFbSUZMQV9XSVJFTEVTUyAtIDFdKSB7CisKKwkJLyogQ2FsbCBXaXJlbGVzcyBFeHRlbnNpb25zLiBXZSBuZWVkIHRvIGtub3cgdGhlIHNpemUgYmVmb3JlCisJCSAqIHdlIGNhbiBhbGxvYy4gVmFyaW91cyBzdHVmZiBjaGVja2VkIGluIHRoZXJlLi4uICovCisJCWVyciA9IHdpcmVsZXNzX3J0bmV0bGlua19nZXQoZGV2LCBSVEFfREFUQShpZGFbSUZMQV9XSVJFTEVTUyAtIDFdKSwgaWRhW0lGTEFfV0lSRUxFU1MgLSAxXS0+cnRhX2xlbiwgJml3X2J1ZiwgJml3X2J1Zl9sZW4pOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorI2VuZGlmCS8qIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LICovCisKKwkvKiBDcmVhdGUgYSBza2IgYmlnIGVub3VnaCB0byBpbmNsdWRlIGFsbCB0aGUgZGF0YS4KKwkgKiBTb21lIHJlcXVlc3RzIGFyZSB3YXkgYmlnZ2VyIHRoYW4gNGsuLi4gSmVhbiBJSSAqLworCXNrYiA9IGFsbG9jX3NrYigoTkxNU0dfTEVOR1RIKHNpemVvZigqcikpKSArIChSVEFfU1BBQ0UoaXdfYnVmX2xlbikpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCWIgPSBza2ItPnRhaWw7CisKKwkvKiBQdXQgaW4gdGhlIG1lc3NhZ2UgdGhlIHVzdWFsIGdvb2Qgc3R1ZmYgKi8KKwlubGggPSBOTE1TR19QVVQoc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBpbl9ubGgtPm5sbXNnX3NlcSwKKwkJCVJUTV9ORVdMSU5LLCBzaXplb2YoKnIpKTsKKwlyID0gTkxNU0dfREFUQShubGgpOworCXItPmlmaV9mYW1pbHkgPSBBRl9VTlNQRUM7CisJci0+X19pZmlfcGFkID0gMDsKKwlyLT5pZmlfdHlwZSA9IGRldi0+dHlwZTsKKwlyLT5pZmlfaW5kZXggPSBkZXYtPmlmaW5kZXg7CisJci0+aWZpX2ZsYWdzID0gZGV2LT5mbGFnczsKKwlyLT5pZmlfY2hhbmdlID0gMDsKKworCS8qIFB1dCB0aGUgd2lyZWxlc3MgcGF5bG9hZCBpZiBpdCBleGlzdCAqLworCWlmKGl3X2J1ZiAhPSBOVUxMKQorCQlSVEFfUFVUKHNrYiwgSUZMQV9XSVJFTEVTUywgaXdfYnVmX2xlbiwKKwkJCWl3X2J1ZiArIElXX0VWX1BPSU5UX09GRik7CisKKwlubGgtPm5sbXNnX2xlbiA9IHNrYi0+dGFpbCAtIGI7CisKKwkvKiBOZWVkZWQgPyAqLworCU5FVExJTktfQ0Ioc2tiKS5kc3RfcGlkID0gTkVUTElOS19DQihpbl9za2IpLnBpZDsKKworCWVyciA9IG5ldGxpbmtfdW5pY2FzdChydG5sLCBza2IsIE5FVExJTktfQ0IoaW5fc2tiKS5waWQsIE1TR19ET05UV0FJVCk7CisJaWYgKGVyciA+IDApCisJCWVyciA9IDA7CitvdXQ6CisJaWYoaXdfYnVmICE9IE5VTEwpCisJCWtmcmVlKGl3X2J1Zik7CisJZGV2X3B1dChkZXYpOworCXJldHVybiBlcnI7CisKK3J0YXR0cl9mYWlsdXJlOgorbmxtc2dfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlnb3RvIG91dDsKK30KKyNlbmRpZgkvKiBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyAqLworCiBzdGF0aWMgaW50IHJ0bmV0bGlua19kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJaW50IGlkeDsKQEAgLTU3NSw5ICs3MjQsOSBAQAogCXVuc2lnbmVkIGludCBxbGVuID0gMDsKIAogCWRvIHsKLQkJcnRubF9sb2NrKCk7CisJCW11dGV4X2xvY2soJnJ0bmxfbXV0ZXgpOwogCQluZXRsaW5rX3J1bl9xdWV1ZShzaywgJnFsZW4sICZydG5ldGxpbmtfcmN2X21zZyk7Ci0JCXVwKCZydG5sX3NlbSk7CisJCW11dGV4X3VubG9jaygmcnRubF9tdXRleCk7CiAKIAkJbmV0ZGV2X3J1bl90b2RvKCk7CiAJfSB3aGlsZSAocWxlbik7CkBAIC01ODUsNyArNzM0LDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsgbGlua19ydG5ldGxpbmtfdGFibGVbUlRNX05SX01TR1RZUEVTXSA9CiB7Ci0JW1JUTV9HRVRMSU5LICAgICAtIFJUTV9CQVNFXSA9IHsgLmR1bXBpdCA9IHJ0bmV0bGlua19kdW1wX2lmaW5mbyB9LAorCVtSVE1fR0VUTElOSyAgICAgLSBSVE1fQkFTRV0gPSB7CisjaWZkZWYgQ09ORklHX05FVF9XSVJFTEVTU19SVE5FVExJTksKKwkJCQkJIC5kb2l0ICAgPSBkb19nZXRsaW5rLAorI2VuZGlmCS8qIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LICovCisJCQkJCSAuZHVtcGl0ID0gcnRuZXRsaW5rX2R1bXBfaWZpbmZvIH0sCiAJW1JUTV9TRVRMSU5LICAgICAtIFJUTV9CQVNFXSA9IHsgLmRvaXQgICA9IGRvX3NldGxpbmsJCSB9LAogCVtSVE1fR0VUQUREUiAgICAgLSBSVE1fQkFTRV0gPSB7IC5kdW1waXQgPSBydG5ldGxpbmtfZHVtcF9hbGwJIH0sCiAJW1JUTV9HRVRST1VURSAgICAtIFJUTV9CQVNFXSA9IHsgLmR1bXBpdCA9IHJ0bmV0bGlua19kdW1wX2FsbAkgfSwKQEAgLTY1NCw2ICs4MDcsNSBAQAogRVhQT1JUX1NZTUJPTChydG5ldGxpbmtfcHV0X21ldHJpY3MpOwogRVhQT1JUX1NZTUJPTChydG5sKTsKIEVYUE9SVF9TWU1CT0wocnRubF9sb2NrKTsKLUVYUE9SVF9TWU1CT0wocnRubF9sb2NrX2ludGVycnVwdGlibGUpOwotRVhQT1JUX1NZTUJPTChydG5sX3NlbSk7CitFWFBPUlRfU1lNQk9MKHJ0bmxfdHJ5bG9jayk7CiBFWFBPUlRfU1lNQk9MKHJ0bmxfdW5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggNjc2NmYxMS4uMDk0NjRmYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCiAJLyogR2V0IHRoZSBEQVRBLiBTaXplIG11c3QgbWF0Y2ggc2tiX2FkZF9tdHUoKS4gKi8KIAlzaXplID0gU0tCX0RBVEFfQUxJR04oc2l6ZSk7Ci0JZGF0YSA9IGttYWxsb2Moc2l6ZSArIHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSwgZ2ZwX21hc2spOworCWRhdGEgPSBfX19fa21hbGxvYyhzaXplICsgc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pLCBnZnBfbWFzayk7CiAJaWYgKCFkYXRhKQogCQlnb3RvIG5vZGF0YTsKIApAQCAtMzU2LDYgKzM1NiwyNCBAQAogfQogCiAvKioKKyAqCWtmcmVlX3NrYiAtIGZyZWUgYW4gc2tfYnVmZgorICoJQHNrYjogYnVmZmVyIHRvIGZyZWUKKyAqCisgKglEcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIgYW5kIGZyZWUgaXQgaWYgdGhlIHVzYWdlIGNvdW50IGhhcworICoJaGl0IHplcm8uCisgKi8KK3ZvaWQga2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlyZXR1cm47CisJaWYgKGxpa2VseShhdG9taWNfcmVhZCgmc2tiLT51c2VycykgPT0gMSkpCisJCXNtcF9ybWIoKTsKKwllbHNlIGlmIChsaWtlbHkoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKSkKKwkJcmV0dXJuOworCV9fa2ZyZWVfc2tiKHNrYik7Cit9CisKKy8qKgogICoJc2tiX2Nsb25lCS0JZHVwbGljYXRlIGFuIHNrX2J1ZmYKICAqCUBza2I6IGJ1ZmZlciB0byBjbG9uZQogICoJQGdmcF9tYXNrOiBhbGxvY2F0aW9uIHByaW9yaXR5CkBAIC00MTEsNiArNDI5LDkgQEAKIAlDKHBrdF90eXBlKTsKIAlDKGlwX3N1bW1lZCk7CiAJQyhwcmlvcml0eSk7CisjaWYgZGVmaW5lZChDT05GSUdfSVBfVlMpIHx8IGRlZmluZWQoQ09ORklHX0lQX1ZTX01PRFVMRSkKKwlDKGlwdnNfcHJvcGVydHkpOworI2VuZGlmCiAJQyhwcm90b2NvbCk7CiAJbi0+ZGVzdHJ1Y3RvciA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgpAQCAtNDIyLDEzICs0NDMsNiBAQAogCUMobmZjdF9yZWFzbSk7CiAJbmZfY29ubnRyYWNrX2dldF9yZWFzbShza2ItPm5mY3RfcmVhc20pOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfSVBfVlMpIHx8IGRlZmluZWQoQ09ORklHX0lQX1ZTX01PRFVMRSkKLQlDKGlwdnNfcHJvcGVydHkpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQotCUMobmZjdF9yZWFzbSk7Ci0JbmZfY29ubnRyYWNrX2dldF9yZWFzbShza2ItPm5mY3RfcmVhc20pOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIAlDKG5mX2JyaWRnZSk7CiAJbmZfYnJpZGdlX2dldChza2ItPm5mX2JyaWRnZSk7CkBAIC0xNzgxLDYgKzE3OTUsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKglza2JfcHVsbF9yY3N1bSAtIHB1bGwgc2tiIGFuZCB1cGRhdGUgcmVjZWl2ZSBjaGVja3N1bQorICoJQHNrYjogYnVmZmVyIHRvIHVwZGF0ZQorICoJQHN0YXJ0OiBzdGFydCBvZiBkYXRhIGJlZm9yZSBwdWxsCisgKglAbGVuOiBsZW5ndGggb2YgZGF0YSBwdWxsZWQKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFuIHNrYl9wdWxsIG9uIHRoZSBwYWNrZXQgYW5kIHVwZGF0ZXMKKyAqCXVwZGF0ZSB0aGUgQ0hFQ0tTVU1fSFcgY2hlY2tzdW0uICBJdCBzaG91bGQgYmUgdXNlZCBvbiByZWNlaXZlCisgKglwYXRoIHByb2Nlc3NpbmcgaW5zdGVhZCBvZiBza2JfcHVsbCB1bmxlc3MgeW91IGtub3cgdGhhdCB0aGUKKyAqCWNoZWNrc3VtIGRpZmZlcmVuY2UgaXMgemVybyAoZS5nLiwgYSB2YWxpZCBJUCBoZWFkZXIpIG9yIHlvdQorICoJYXJlIHNldHRpbmcgaXBfc3VtbWVkIHRvIENIRUNLU1VNX05PTkUuCisgKi8KK3Vuc2lnbmVkIGNoYXIgKnNrYl9wdWxsX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJQlVHX09OKGxlbiA+IHNrYi0+bGVuKTsKKwlza2ItPmxlbiAtPSBsZW47CisJQlVHX09OKHNrYi0+bGVuIDwgc2tiLT5kYXRhX2xlbik7CisJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiLT5kYXRhLCBsZW4pOworCXJldHVybiBza2ItPmRhdGEgKz0gbGVuOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChza2JfcHVsbF9yY3N1bSk7CisKIHZvaWQgX19pbml0IHNrYl9pbml0KHZvaWQpCiB7CiAJc2tidWZmX2hlYWRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgic2tidWZmX2hlYWRfY2FjaGUiLApAQCAtMTgwMyw2ICsxODQwLDcgQEAKIAogRVhQT1JUX1NZTUJPTChfX19wc2tiX3RyaW0pOwogRVhQT1JUX1NZTUJPTChfX2tmcmVlX3NrYik7CitFWFBPUlRfU1lNQk9MKGtmcmVlX3NrYik7CiBFWFBPUlRfU1lNQk9MKF9fcHNrYl9wdWxsX3RhaWwpOwogRVhQT1JUX1NZTUJPTChfX2FsbG9jX3NrYik7CiBFWFBPUlRfU1lNQk9MKHBza2JfY29weSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggNmUwMDgxMS4uZTExMGI5MCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtNDA0LDggKzQwNCw5IEBACiAJCQlpZiAoIXZhbGJvb2wpIHsKIAkJCQlzay0+c2tfYm91bmRfZGV2X2lmID0gMDsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKG9wdGxlbiA+IElGTkFNU0laKSAKLQkJCQkJb3B0bGVuID0gSUZOQU1TSVo7IAorCQkJCWlmIChvcHRsZW4gPiBJRk5BTVNJWiAtIDEpCisJCQkJCW9wdGxlbiA9IElGTkFNU0laIC0gMTsKKwkJCQltZW1zZXQoZGV2bmFtZSwgMCwgc2l6ZW9mKGRldm5hbWUpKTsKIAkJCQlpZiAoY29weV9mcm9tX3VzZXIoZGV2bmFtZSwgb3B0dmFsLCBvcHRsZW4pKSB7CiAJCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJCWJyZWFrOwpAQCAtNjE2LDcgKzYxNyw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIFNPX1BFRVJTRUM6Ci0JCQlyZXR1cm4gc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWMoc29jaywgb3B0dmFsLCBvcHRsZW4sIGxlbik7CisJCQlyZXR1cm4gc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWNfc3RyZWFtKHNvY2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pOwogCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4oLUVOT1BST1RPT1BUKTsKQEAgLTEzODUsNiArMTM4NiwyMCBAQAogCiBFWFBPUlRfU1lNQk9MKHNvY2tfY29tbW9uX2dldHNvY2tvcHQpOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisKKwlpZiAoc2stPnNrX3Byb3QtPmNvbXBhdF9zZXRzb2Nrb3B0ICE9IE5VTEwpCisJCXJldHVybiBzay0+c2tfcHJvdC0+Y29tcGF0X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkJICAgICAgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBzay0+c2tfcHJvdC0+Z2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KK0VYUE9SVF9TWU1CT0woY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQpOworI2VuZGlmCisKIGludCBzb2NrX2NvbW1vbl9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCXN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKQEAgLTE0MTQsNiArMTQyOSwyMCBAQAogCiBFWFBPUlRfU1lNQk9MKHNvY2tfY29tbW9uX3NldHNvY2tvcHQpOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCisJaWYgKHNrLT5za19wcm90LT5jb21wYXRfc2V0c29ja29wdCAhPSBOVUxMKQorCQlyZXR1cm4gc2stPnNrX3Byb3QtPmNvbXBhdF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwKKwkJCQkJCSAgICAgIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gc2stPnNrX3Byb3QtPnNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0KTsKKyNlbmRpZgorCiB2b2lkIHNrX2NvbW1vbl9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoc2stPnNrX3Byb3QtPmRlc3Ryb3kpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCmluZGV4IDJmMjc4YzguLjcxMDQ1MzYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCkBAIC0yNiw2ICsyNiwxMSBAQAogZXh0ZXJuIGNoYXIgc3lzY3RsX2RpdmVydF92ZXJzaW9uW107CiAjZW5kaWYgLyogQ09ORklHX05FVF9ESVZFUlQgKi8KIAorI2lmZGVmIENPTkZJR19YRlJNCitleHRlcm4gdTMyIHN5c2N0bF94ZnJtX2FldmVudF9ldGltZTsKK2V4dGVybiB1MzIgc3lzY3RsX3hmcm1fYWV2ZW50X3JzZXF0aDsKKyNlbmRpZgorCiBjdGxfdGFibGUgY29yZV90YWJsZVtdID0gewogI2lmZGVmIENPTkZJR19ORVQKIAl7CkBAIC0xMTEsNiArMTE2LDI0IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb3N0cmluZwogCX0sCiAjZW5kaWYgLyogQ09ORklHX05FVF9ESVZFUlQgKi8KKyNpZmRlZiBDT05GSUdfWEZSTQorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0NPUkVfQUVWRU5UX0VUSU1FLAorCQkucHJvY25hbWUJPSAieGZybV9hZXZlbnRfZXRpbWUiLAorCQkuZGF0YQkJPSAmc3lzY3RsX3hmcm1fYWV2ZW50X2V0aW1lLAorCQkubWF4bGVuCQk9IHNpemVvZih1MzIpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0NPUkVfQUVWRU5UX1JTRVFUSCwKKwkJLnByb2NuYW1lCT0gInhmcm1fYWV2ZW50X3JzZXF0aCIsCisJCS5kYXRhCQk9ICZzeXNjdGxfeGZybV9hZXZlbnRfcnNlcXRoLAorCQkubWF4bGVuCQk9IHNpemVvZih1MzIpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKKwl9LAorI2VuZGlmIC8qIENPTkZJR19YRlJNICovCiAjZW5kaWYgLyogQ09ORklHX05FVCAqLwogCXsKIAkJLmN0bF9uYW1lCT0gTkVUX0NPUkVfU09NQVhDT05OLApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvd2lyZWxlc3MuYyBiL25ldC9jb3JlL3dpcmVsZXNzLmMKaW5kZXggMmFkZDdlZC4uODFkNjk5NSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvd2lyZWxlc3MuYworKysgYi9uZXQvY29yZS93aXJlbGVzcy5jCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBmaWxlIGltcGxlbWVudCB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucyBBUElzLgogICoKICAqIEF1dGhvcnMgOglKZWFuIFRvdXJyaWxoZXMgLSBIUEwgLSA8anRAaHBsLmhwLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDA1IEplYW4gVG91cnJpbGhlcywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDA2IEplYW4gVG91cnJpbGhlcywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAoQXMgYWxsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgdGhpcyBmaWxlIGlzIEdQTCkKICAqLwpAQCAtNjUsNiArNjUsOSBAQAogICoJbyBTdGFydCBkZXByZWNhdGluZyBkZXYtPmdldF93aXJlbGVzc19zdGF0cywgb3V0cHV0IGEgd2FybmluZwogICoJbyBJZiBJV19RVUFMX0RCTSBpcyBzZXQsIHNob3cgZEJtIHZhbHVlcyBpbiAvcHJvYy9uZXQvd2lyZWxlc3MKICAqCW8gRG9uJ3QgbG9vc2UgSU5WQUxJRC9EQk0gZmxhZ3Mgd2hlbiBjbGVhcmluZyBVUERBVEVEIGZsYWdzIChpd3N0YXRzKQorICoKKyAqIHY4IC0gMTcuMDIuMDYgLSBKZWFuIElJCisgKglvIFJ0TmV0bGluayByZXF1ZXN0cyBzdXBwb3J0IChTRVQvR0VUKQogICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBJTkNMVURFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTg5LDExICs5MiwxMyBAQAogCiAvKiBEZWJ1Z2dpbmcgc3R1ZmYgKi8KICN1bmRlZiBXRV9JT0NUTF9ERUJVRwkJLyogRGVidWcgSU9DVEwgQVBJICovCisjdW5kZWYgV0VfUlRORVRMSU5LX0RFQlVHCS8qIERlYnVnIFJ0TmV0bGluayBBUEkgKi8KICN1bmRlZiBXRV9FVkVOVF9ERUJVRwkJLyogRGVidWcgRXZlbnQgZGlzcGF0Y2hlciAqLwogI3VuZGVmIFdFX1NQWV9ERUJVRwkJLyogRGVidWcgZW5oYW5jZWQgc3B5IHN1cHBvcnQgKi8KIAogLyogT3B0aW9ucyAqLwotI2RlZmluZSBXRV9FVkVOVF9ORVRMSU5LCS8qIFByb3BhZ2F0ZSBldmVudHMgdXNpbmcgcnRuZXRsaW5rICovCisvL0NPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LCS8qIFdpcmVsZXNzIHJlcXVlc3RzIG92ZXIgUnROZXRsaW5rICovCisjZGVmaW5lIFdFX0VWRU5UX1JUTkVUTElOSwkvKiBQcm9wYWdhdGUgZXZlbnRzIHVzaW5nIFJ0TmV0bGluayAqLwogI2RlZmluZSBXRV9TRVRfRVZFTlQJCS8qIEdlbmVyYXRlIGFuIGV2ZW50IG9uIHNvbWUgc2V0IGNvbW1hbmRzICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIEdMT0JBTCBWQVJJQUJMRVMgKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE1NiwxMyArMTYxLDE4IEBACiAJCS5oZWFkZXJfdHlwZQk9IElXX0hFQURFUl9UWVBFX05VTEwsCiAJfSwKIAlbU0lPQ0dJV1BSSVYJLSBTSU9DSVdGSVJTVF0gPSB7IC8qIChoYW5kbGVkIGRpcmVjdGx5IGJ5IHVzKSAqLwotCQkuaGVhZGVyX3R5cGUJPSBJV19IRUFERVJfVFlQRV9OVUxMLAorCQkuaGVhZGVyX3R5cGUJPSBJV19IRUFERVJfVFlQRV9QT0lOVCwKKwkJLnRva2VuX3NpemUJPSBzaXplb2Yoc3RydWN0IGl3X3ByaXZfYXJncyksCisJCS5tYXhfdG9rZW5zCT0gMTYsCisJCS5mbGFncwkJPSBJV19ERVNDUl9GTEFHX05PTUFYLAogCX0sCiAJW1NJT0NTSVdTVEFUUwktIFNJT0NJV0ZJUlNUXSA9IHsKIAkJLmhlYWRlcl90eXBlCT0gSVdfSEVBREVSX1RZUEVfTlVMTCwKIAl9LAogCVtTSU9DR0lXU1RBVFMJLSBTSU9DSVdGSVJTVF0gPSB7IC8qIChoYW5kbGVkIGRpcmVjdGx5IGJ5IHVzKSAqLwotCQkuaGVhZGVyX3R5cGUJPSBJV19IRUFERVJfVFlQRV9OVUxMLAorCQkuaGVhZGVyX3R5cGUJPSBJV19IRUFERVJfVFlQRV9QT0lOVCwKKwkJLnRva2VuX3NpemUJPSAxLAorCQkubWF4X3Rva2Vucwk9IHNpemVvZihzdHJ1Y3QgaXdfc3RhdGlzdGljcyksCiAJCS5mbGFncwkJPSBJV19ERVNDUl9GTEFHX0RVTVAsCiAJfSwKIAlbU0lPQ1NJV1NQWQktIFNJT0NJV0ZJUlNUXSA9IHsKQEAgLTUyOSw2ICs1MzksNzAgQEAKIAlyZXR1cm4gbnVtICogaXdfcHJpdl90eXBlX3NpemVbdHlwZV07CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBTdGFuZGFyZCBXaXJlbGVzcyBIYW5kbGVyIDogZ2V0IHdpcmVsZXNzIHN0YXRzCisgKglBbGxvdyBwcm9ncmFtYXRpYyBhY2Nlc3MgdG8gL3Byb2MvbmV0L3dpcmVsZXNzIGV2ZW4gaWYgL3Byb2MKKyAqCWRvZXNuJ3QgZXhpc3QuLi4gQWxzbyBtb3JlIGVmZmljaWVudC4uLgorICovCitzdGF0aWMgaW50IGl3X2hhbmRsZXJfZ2V0X2l3c3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKgkJZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqCWluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICoJCXdycXUsCisJCQkJICBjaGFyICoJCQlleHRyYSkKK3sKKwkvKiBHZXQgc3RhdHMgZnJvbSB0aGUgZHJpdmVyICovCisJc3RydWN0IGl3X3N0YXRpc3RpY3MgKnN0YXRzOworCisJc3RhdHMgPSBnZXRfd2lyZWxlc3Nfc3RhdHMoZGV2KTsKKwlpZiAoc3RhdHMgIT0gKHN0cnVjdCBpd19zdGF0aXN0aWNzICopIE5VTEwpIHsKKworCQkvKiBDb3B5IHN0YXRpc3RpY3MgdG8gZXh0cmEgKi8KKwkJbWVtY3B5KGV4dHJhLCBzdGF0cywgc2l6ZW9mKHN0cnVjdCBpd19zdGF0aXN0aWNzKSk7CisJCXdycXUtPmRhdGEubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19zdGF0aXN0aWNzKTsKKworCQkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGNsZWFyIHRoZSB1cGRhdGVkIGZsYWcgKi8KKwkJaWYod3JxdS0+ZGF0YS5mbGFncyAhPSAwKQorCQkJc3RhdHMtPnF1YWwudXBkYXRlZCAmPSB+SVdfUVVBTF9BTExfVVBEQVRFRDsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFN0YW5kYXJkIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgaXdwcml2IGRlZmluaXRpb25zCisgKiBFeHBvcnQgdGhlIGRyaXZlciBwcml2YXRlIGhhbmRsZXIgZGVmaW5pdGlvbgorICogVGhleSB3aWxsIGJlIHBpY2tlZCB1cCBieSB0b29scyBsaWtlIGl3cHJpdi4uLgorICovCitzdGF0aWMgaW50IGl3X2hhbmRsZXJfZ2V0X3ByaXZhdGUoc3RydWN0IG5ldF9kZXZpY2UgKgkJZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqCWluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICoJCXdycXUsCisJCQkJICBjaGFyICoJCQlleHRyYSkKK3sKKwkvKiBDaGVjayBpZiB0aGUgZHJpdmVyIGhhcyBzb21ldGhpbmcgdG8gZXhwb3J0ICovCisJaWYoKGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9wcml2YXRlX2FyZ3MgPT0gMCkgfHwKKwkgICAoZGV2LT53aXJlbGVzc19oYW5kbGVycy0+cHJpdmF0ZV9hcmdzID09IE5VTEwpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggYnVmZmVyIHVwIHRoZXJlICovCisJaWYod3JxdS0+ZGF0YS5sZW5ndGggPCBkZXYtPndpcmVsZXNzX2hhbmRsZXJzLT5udW1fcHJpdmF0ZV9hcmdzKSB7CisJCS8qIFVzZXIgc3BhY2UgY2FuJ3Qga25vdyBpbiBhZHZhbmNlIGhvdyBsYXJnZSB0aGUgYnVmZmVyCisJCSAqIG5lZWRzIHRvIGJlLiBHaXZlIGl0IGEgaGludCwgc28gdGhhdCB3ZSBjYW4gc3VwcG9ydAorCQkgKiBhbnkgc2l6ZSBidWZmZXIgd2Ugd2FudCBzb21ld2hhdCBlZmZpY2llbnRseS4uLiAqLworCQl3cnF1LT5kYXRhLmxlbmd0aCA9IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9wcml2YXRlX2FyZ3M7CisJCXJldHVybiAtRTJCSUc7CisJfQorCisJLyogU2V0IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGlvY3Rscy4gKi8KKwl3cnF1LT5kYXRhLmxlbmd0aCA9IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9wcml2YXRlX2FyZ3M7CisKKwkvKiBDb3B5IHN0cnVjdHVyZSB0byB0aGUgdXNlciBidWZmZXIuICovCisJbWVtY3B5KGV4dHJhLCBkZXYtPndpcmVsZXNzX2hhbmRsZXJzLT5wcml2YXRlX2FyZ3MsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdfcHJpdl9hcmdzKSAqIHdycXUtPmRhdGEubGVuZ3RoKTsKKworCXJldHVybiAwOworfQorCiAKIC8qKioqKioqKioqKioqKioqKioqKiAvcHJvYy9uZXQvd2lyZWxlc3MgU1VQUE9SVCAqKioqKioqKioqKioqKioqKioqKi8KIC8qCkBAIC02MzAsODEgKzcwNCwxNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgotICoJQWxsb3cgcHJvZ3JhbWF0aWMgYWNjZXNzIHRvIC9wcm9jL25ldC93aXJlbGVzcyBldmVuIGlmIC9wcm9jCi0gKglkb2Vzbid0IGV4aXN0Li4uIEFsc28gbW9yZSBlZmZpY2llbnQuLi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZGV2X2l3c3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpCi17Ci0JLyogR2V0IHN0YXRzIGZyb20gdGhlIGRyaXZlciAqLwotCXN0cnVjdCBpd19zdGF0aXN0aWNzICpzdGF0czsKLQotCXN0YXRzID0gZ2V0X3dpcmVsZXNzX3N0YXRzKGRldik7Ci0JaWYgKHN0YXRzICE9IChzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqKSBOVUxMKSB7Ci0JCXN0cnVjdCBpd3JlcSAqCXdycSA9IChzdHJ1Y3QgaXdyZXEgKilpZnI7Ci0KLQkJLyogQ29weSBzdGF0aXN0aWNzIHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCQlpZihjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgc3RhdHMsCi0JCQkJc2l6ZW9mKHN0cnVjdCBpd19zdGF0aXN0aWNzKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGNsZWFyIHRoZSB1cGRhdGVkIGZsYWcgKi8KLQkJaWYod3JxLT51LmRhdGEuZmxhZ3MgIT0gMCkKLQkJCXN0YXRzLT5xdWFsLnVwZGF0ZWQgJj0gfklXX1FVQUxfQUxMX1VQREFURUQ7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBFeHBvcnQgdGhlIGRyaXZlciBwcml2YXRlIGhhbmRsZXIgZGVmaW5pdGlvbgotICogVGhleSB3aWxsIGJlIHBpY2tlZCB1cCBieSB0b29scyBsaWtlIGl3cHJpdi4uLgotICovCi1zdGF0aWMgaW5saW5lIGludCBpb2N0bF9leHBvcnRfcHJpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiwKLQkJCQkgICAgICAgc3RydWN0IGlmcmVxICoJCWlmcikKLXsKLQlzdHJ1Y3QgaXdyZXEgKgkJCQlpd3IgPSAoc3RydWN0IGl3cmVxICopIGlmcjsKLQotCS8qIENoZWNrIGlmIHRoZSBkcml2ZXIgaGFzIHNvbWV0aGluZyB0byBleHBvcnQgKi8KLQlpZigoZGV2LT53aXJlbGVzc19oYW5kbGVycy0+bnVtX3ByaXZhdGVfYXJncyA9PSAwKSB8fAotCSAgIChkZXYtPndpcmVsZXNzX2hhbmRsZXJzLT5wcml2YXRlX2FyZ3MgPT0gTlVMTCkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCS8qIENoZWNrIE5VTEwgcG9pbnRlciAqLwotCWlmKGl3ci0+dS5kYXRhLnBvaW50ZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBDaGVjayBpZiB0aGVyZSBpcyBlbm91Z2ggYnVmZmVyIHVwIHRoZXJlICovCi0JaWYoaXdyLT51LmRhdGEubGVuZ3RoIDwgZGV2LT53aXJlbGVzc19oYW5kbGVycy0+bnVtX3ByaXZhdGVfYXJncykgewotCQkvKiBVc2VyIHNwYWNlIGNhbid0IGtub3cgaW4gYWR2YW5jZSBob3cgbGFyZ2UgdGhlIGJ1ZmZlcgotCQkgKiBuZWVkcyB0byBiZS4gR2l2ZSBpdCBhIGhpbnQsIHNvIHRoYXQgd2UgY2FuIHN1cHBvcnQKLQkJICogYW55IHNpemUgYnVmZmVyIHdlIHdhbnQgc29tZXdoYXQgZWZmaWNpZW50bHkuLi4gKi8KLQkJaXdyLT51LmRhdGEubGVuZ3RoID0gZGV2LT53aXJlbGVzc19oYW5kbGVycy0+bnVtX3ByaXZhdGVfYXJnczsKLQkJcmV0dXJuIC1FMkJJRzsKLQl9Ci0KLQkvKiBTZXQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgaW9jdGxzLiAqLwotCWl3ci0+dS5kYXRhLmxlbmd0aCA9IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9wcml2YXRlX2FyZ3M7Ci0KLQkvKiBDb3B5IHN0cnVjdHVyZSB0byB0aGUgdXNlciBidWZmZXIuICovCi0JaWYgKGNvcHlfdG9fdXNlcihpd3ItPnUuZGF0YS5wb2ludGVyLAotCQkJIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPnByaXZhdGVfYXJncywKLQkJCSBzaXplb2Yoc3RydWN0IGl3X3ByaXZfYXJncykgKiBpd3ItPnUuZGF0YS5sZW5ndGgpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKgogICogV3JhcHBlciB0byBjYWxsIGEgc3RhbmRhcmQgV2lyZWxlc3MgRXh0ZW5zaW9uIGhhbmRsZXIuCiAgKiBXZSBkbyB2YXJpb3VzIGNoZWNrcyBhbmQgYWxzbyB0YWtlIGNhcmUgb2YgbW92aW5nIGRhdGEgYmV0d2VlbgogICogdXNlciBzcGFjZSBhbmQga2VybmVsIHNwYWNlLgogICovCi1zdGF0aWMgaW5saW5lIGludCBpb2N0bF9zdGFuZGFyZF9jYWxsKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpZnJlcSAqCQlpZnIsCi0JCQkJICAgICAgdW5zaWduZWQgaW50CQljbWQsCi0JCQkJICAgICAgaXdfaGFuZGxlcgkJaGFuZGxlcikKK3N0YXRpYyBpbnQgaW9jdGxfc3RhbmRhcmRfY2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaWZyZXEgKgkJaWZyLAorCQkJICAgICAgIHVuc2lnbmVkIGludAkJY21kLAorCQkJICAgICAgIGl3X2hhbmRsZXIJCWhhbmRsZXIpCiB7CiAJc3RydWN0IGl3cmVxICoJCQkJaXdyID0gKHN0cnVjdCBpd3JlcSAqKSBpZnI7CiAJY29uc3Qgc3RydWN0IGl3X2lvY3RsX2Rlc2NyaXB0aW9uICoJZGVzY3I7CkBAIC0xMDQ4LDE0ICsxMDU1LDIwIEBACiAJewogCQljYXNlIFNJT0NHSVdTVEFUUzoKIAkJCS8qIEdldCBXaXJlbGVzcyBTdGF0cyAqLwotCQkJcmV0dXJuIGRldl9pd3N0YXRzKGRldiwgaWZyKTsKKwkJCXJldHVybiBpb2N0bF9zdGFuZGFyZF9jYWxsKGRldiwKKwkJCQkJCSAgIGlmciwKKwkJCQkJCSAgIGNtZCwKKwkJCQkJCSAgICZpd19oYW5kbGVyX2dldF9pd3N0YXRzKTsKIAogCQljYXNlIFNJT0NHSVdQUklWOgogCQkJLyogQ2hlY2sgaWYgd2UgaGF2ZSBzb21lIHdpcmVsZXNzIGhhbmRsZXJzIGRlZmluZWQgKi8KIAkJCWlmKGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgIT0gTlVMTCkgewogCQkJCS8qIFdlIGV4cG9ydCB0byB1c2VyIHNwYWNlIHRoZSBkZWZpbml0aW9uIG9mCiAJCQkJICogdGhlIHByaXZhdGUgaGFuZGxlciBvdXJzZWx2ZXMgKi8KLQkJCQlyZXR1cm4gaW9jdGxfZXhwb3J0X3ByaXZhdGUoZGV2LCBpZnIpOworCQkJCXJldHVybiBpb2N0bF9zdGFuZGFyZF9jYWxsKGRldiwKKwkJCQkJCQkgICBpZnIsCisJCQkJCQkJICAgY21kLAorCQkJCQkJCSAgICZpd19oYW5kbGVyX2dldF9wcml2YXRlKTsKIAkJCX0KIAkJCS8vICMjIEZhbGwtdGhyb3VnaCBmb3Igb2xkIEFQSSAjIwogCQlkZWZhdWx0OgpAQCAtMTA4OCwxNiArMTEwMSw3MzkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKiogUlRORVRMSU5LIFJFUVVFU1QgQVBJICoqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogVGhlIGFsdGVybmF0ZSB1c2VyIHNwYWNlIEFQSSB0byBjb25maWd1cmUgYWxsIHRob3NlIFdpcmVsZXNzIEV4dGVuc2lvbnMKKyAqIGlzIHRocm91Z2ggUnROZXRsaW5rLgorICogVGhpcyBBUEkgc3VwcG9ydCBvbmx5IHRoZSBuZXcgZHJpdmVyIEFQSSAoaXdfaGFuZGxlcikuCisgKgorICogVGhpcyBSdE5ldGxpbmsgQVBJIHVzZSB0aGUgc2FtZSBxdWVyeS9yZXBseSBtb2RlbCBhcyB0aGUgaW9jdGwgQVBJLgorICogTWF4aW11bSBlZmZvcnQgaGFzIGJlZW4gZG9uZSB0byBmaXQgaW4gdGhlIFJ0TmV0bGluayBtb2RlbCwgYW5kCisgKiB3ZSBzdXBwb3J0IGJvdGggUnROZXRsaW5rIFNldCBhbmQgUnROZWxpbmsgR2V0IG9wZXJhdGlvbnMuCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgd2UgZG9uJ3Qgb2ZmZXIgRHVtcCBvcGVyYXRpb25zIGJlY2F1c2Ugb2YgdGhlCisgKiBmb2xsb3dpbmcgcmVhc29ucyA6CisgKglvIExhcmdlIG51bWJlciBvZiBwYXJhbWV0ZXJzLCBtb3N0IG9wdGlvbmFsCisgKglvIExhcmdlIHNpemUgb2Ygc29tZSBwYXJhbWV0ZXJzICg+IDEwMCBieXRlcykKKyAqCW8gRWFjaCBwYXJhbWV0ZXJzIG5lZWQgdG8gYmUgZXh0cmFjdGVkIGZyb20gaGFyZHdhcmUKKyAqCW8gU2NhbiByZXF1ZXN0cyBjYW4gdGFrZSBzZWNvbmRzIGFuZCBkaXNhYmxlIG5ldHdvcmsgYWN0aXZpdHkuCisgKiBCZWNhdXNlIG9mIHRoaXMgaGlnaCBjb3N0L292ZXJoZWFkLCB3ZSB3YW50IHRvIHJldHVybiBvbmx5IHRoZQorICogcGFyYW1ldGVycyB0aGUgdXNlciBhcHBsaWNhdGlvbiBpcyByZWFsbHkgaW50ZXJlc3RlZCBpbi4KKyAqIFdlIGNvdWxkIG9mZmVyIHBhcnRpYWwgRHVtcCB1c2luZyB0aGUgSVdfREVTQ1JfRkxBR19EVU1QIGZsYWcuCisgKgorICogVGhlIEFQSSB1c2VzIHRoZSBzdGFuZGFyZCBSdE5ldGxpbmsgc29ja2V0LiBXaGVuIHRoZSBSdE5ldGxpbmsgY29kZQorICogZmluZCBhIElGTEFfV0lSRUxFU1MgZmllbGQgaW4gYSBSdE5ldGxpbmsgU0VUX0xJTksgcmVxdWVzdCwKKyAqIGl0IGNhbGxzIGhlcmUuCisgKi8KKworI2lmZGVmIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogV3JhcHBlciB0byBjYWxsIGEgc3RhbmRhcmQgV2lyZWxlc3MgRXh0ZW5zaW9uIEdFVCBoYW5kbGVyLgorICogV2UgZG8gdmFyaW91cyBjaGVja3MgYW5kIGNhbGwgdGhlIGhhbmRsZXIgd2l0aCB0aGUgcHJvcGVyIGFyZ3MuCisgKi8KK3N0YXRpYyBpbnQgcnRuZXRsaW5rX3N0YW5kYXJkX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiwKKwkJCQkgIHN0cnVjdCBpd19ldmVudCAqCXJlcXVlc3QsCisJCQkJICBpbnQJCQlyZXF1ZXN0X2xlbiwKKwkJCQkgIGl3X2hhbmRsZXIJCWhhbmRsZXIsCisJCQkJICBjaGFyICoqCQlwX2J1ZiwKKwkJCQkgIGludCAqCQkJcF9sZW4pCit7CisJY29uc3Qgc3RydWN0IGl3X2lvY3RsX2Rlc2NyaXB0aW9uICoJZGVzY3IgPSBOVUxMOworCXVuc2lnbmVkIGludAkJCQljbWQ7CisJdW5pb24gaXdyZXFfZGF0YSAqCQkJd3JxdTsKKwlpbnQJCQkJCWhkcl9sZW47CisJc3RydWN0IGl3X3JlcXVlc3RfaW5mbwkJCWluZm87CisJY2hhciAqCQkJCQlidWZmZXIgPSBOVUxMOworCWludAkJCQkJYnVmZmVyX3NpemUgPSAwOworCWludAkJCQkJcmV0ID0gLUVJTlZBTDsKKworCS8qIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJlcXVlc3QgKi8KKwljbWQgPSByZXF1ZXN0LT5jbWQ7CisJaWYoKGNtZCAtIFNJT0NJV0ZJUlNUKSA+PSBzdGFuZGFyZF9pb2N0bF9udW0pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlkZXNjciA9ICYoc3RhbmRhcmRfaW9jdGxbY21kIC0gU0lPQ0lXRklSU1RdKTsKKworI2lmZGVmIFdFX1JUTkVUTElOS19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBGb3VuZCBzdGFuZGFyZCBoYW5kbGVyIGZvciAweCUwNFhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMgKFdFLnIpIDogSGVhZGVyIHR5cGUgOiAlZCwgVG9rZW4gdHlwZSA6ICVkLCBzaXplIDogJWQsIHRva2VuIDogJWRcbiIsIGRldi0+bmFtZSwgZGVzY3ItPmhlYWRlcl90eXBlLCBkZXNjci0+dG9rZW5fdHlwZSwgZGVzY3ItPnRva2VuX3NpemUsIGRlc2NyLT5tYXhfdG9rZW5zKTsKKyNlbmRpZgkvKiBXRV9SVE5FVExJTktfREVCVUcgKi8KKworCS8qIENoZWNrIGlmIHdycXUgaXMgY29tcGxldGUgKi8KKwloZHJfbGVuID0gZXZlbnRfdHlwZV9zaXplW2Rlc2NyLT5oZWFkZXJfdHlwZV07CisJaWYocmVxdWVzdF9sZW4gPCBoZHJfbGVuKSB7CisjaWZkZWYgV0VfUlRORVRMSU5LX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiJXMgKFdFLnIpIDogV2lyZWxlc3MgcmVxdWVzdCB0b28gc2hvcnQgKCVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcmVxdWVzdF9sZW4pOworI2VuZGlmCS8qIFdFX1JUTkVUTElOS19ERUJVRyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBQcmVwYXJlIHRoZSBjYWxsICovCisJaW5mby5jbWQgPSBjbWQ7CisJaW5mby5mbGFncyA9IDA7CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIGV4dHJhIGRhdGEgaW4gdGhlIHJlcGx5IG9yIG5vdCAqLworCWlmKGRlc2NyLT5oZWFkZXJfdHlwZSAhPSBJV19IRUFERVJfVFlQRV9QT0lOVCkgeworCisJCS8qIENyZWF0ZSB0aGUga2VybmVsIGJ1ZmZlciB0aGF0IHdlIHdpbGwgcmV0dXJuLgorCQkgKiBJdCdzIGF0IGFuIG9mZnNldCB0byBtYXRjaCB0aGUgVFlQRV9QT0lOVCBjYXNlLi4uICovCisJCWJ1ZmZlcl9zaXplID0gcmVxdWVzdF9sZW4gKyBJV19FVl9QT0lOVF9PRkY7CisJCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCS8qIENvcHkgZXZlbnQgZGF0YSAqLworCQltZW1jcHkoYnVmZmVyICsgSVdfRVZfUE9JTlRfT0ZGLCByZXF1ZXN0LCByZXF1ZXN0X2xlbik7CisJCS8qIFVzZSBvdXIgb3duIGNvcHkgb2Ygd3JxdSAqLworCQl3cnF1ID0gKHVuaW9uIGl3cmVxX2RhdGEgKikgKGJ1ZmZlciArIElXX0VWX1BPSU5UX09GRgorCQkJCQkgICAgICsgSVdfRVZfTENQX0xFTik7CisKKwkJLyogTm8gZXh0cmEgYXJndW1lbnRzLiBUcml2aWFsIHRvIGhhbmRsZSAqLworCQlyZXQgPSBoYW5kbGVyKGRldiwgJmluZm8sIHdycXUsIE5VTEwpOworCisJfSBlbHNlIHsKKwkJdW5pb24gaXdyZXFfZGF0YQl3cnF1X3BvaW50OworCQljaGFyICoJCQlleHRyYSA9IE5VTEw7CisJCWludAkJCWV4dHJhX3NpemUgPSAwOworCisJCS8qIEdldCBhIHRlbXAgY29weSBvZiB3cnF1IChza2lwIHBvaW50ZXIpICovCisJCW1lbWNweSgoKGNoYXIgKikgJndycXVfcG9pbnQpICsgSVdfRVZfUE9JTlRfT0ZGLAorCQkgICAgICAgKChjaGFyICopIHJlcXVlc3QpICsgSVdfRVZfTENQX0xFTiwKKwkJICAgICAgIElXX0VWX1BPSU5UX0xFTiAtIElXX0VWX0xDUF9MRU4pOworCisJCS8qIENhbGN1bGF0ZSBzcGFjZSBuZWVkZWQgYnkgYXJndW1lbnRzLiBBbHdheXMgYWxsb2NhdGUKKwkJICogZm9yIG1heCBzcGFjZS4gRWFzaWVyLCBhbmQgd29uJ3QgbGFzdCBsb25nLi4uICovCisJCWV4dHJhX3NpemUgPSBkZXNjci0+bWF4X3Rva2VucyAqIGRlc2NyLT50b2tlbl9zaXplOworCQkvKiBTdXBwb3J0IGZvciB2ZXJ5IGxhcmdlIHJlcXVlc3RzICovCisJCWlmKChkZXNjci0+ZmxhZ3MgJiBJV19ERVNDUl9GTEFHX05PTUFYKSAmJgorCQkgICAod3JxdV9wb2ludC5kYXRhLmxlbmd0aCA+IGRlc2NyLT5tYXhfdG9rZW5zKSkKKwkJCWV4dHJhX3NpemUgPSAod3JxdV9wb2ludC5kYXRhLmxlbmd0aAorCQkJCSAgICAgICogZGVzY3ItPnRva2VuX3NpemUpOworCQlidWZmZXJfc2l6ZSA9IGV4dHJhX3NpemUgKyBJV19FVl9QT0lOVF9MRU4gKyBJV19FVl9QT0lOVF9PRkY7CisjaWZkZWYgV0VfUlRORVRMSU5LX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBNYWxsb2MgJWQgYnl0ZXMgKCVkIGJ5dGVzKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXh0cmFfc2l6ZSwgYnVmZmVyX3NpemUpOworI2VuZGlmCS8qIFdFX1JUTkVUTElOS19ERUJVRyAqLworCisJCS8qIENyZWF0ZSB0aGUga2VybmVsIGJ1ZmZlciB0aGF0IHdlIHdpbGwgcmV0dXJuICovCisJCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogUHV0IHdycXUgaW4gdGhlIHJpZ2h0IHBsYWNlIChqdXN0IGJlZm9yZSBleHRyYSkuCisJCSAqIExlYXZlIHNwYWNlIGZvciBJV0UgaGVhZGVyIGFuZCBkdW1teSBwb2ludGVyLi4uCisJCSAqIE5vdGUgdGhhdCBJV19FVl9MQ1BfTEVOPT00IGJ5dGVzLCBzbyBpdCdzIHN0aWxsIGFsaWduZWQuLi4KKwkJICovCisJCW1lbWNweShidWZmZXIgKyBJV19FVl9MQ1BfTEVOICsgSVdfRVZfUE9JTlRfT0ZGLAorCQkgICAgICAgKChjaGFyICopICZ3cnF1X3BvaW50KSArIElXX0VWX1BPSU5UX09GRiwKKwkJICAgICAgIElXX0VWX1BPSU5UX0xFTiAtIElXX0VWX0xDUF9MRU4pOworCQl3cnF1ID0gKHVuaW9uIGl3cmVxX2RhdGEgKikgKGJ1ZmZlciArIElXX0VWX0xDUF9MRU4pOworCisJCS8qIEV4dHJhIGNvbWVzIGxvZ2ljYWxseSBhZnRlciB0aGF0LiBPZmZzZXQgKzEyIGJ5dGVzLiAqLworCQlleHRyYSA9IGJ1ZmZlciArIElXX0VWX1BPSU5UX09GRiArIElXX0VWX1BPSU5UX0xFTjsKKworCQkvKiBDYWxsIHRoZSBoYW5kbGVyICovCisJCXJldCA9IGhhbmRsZXIoZGV2LCAmaW5mbywgd3JxdSwgZXh0cmEpOworCisJCS8qIENhbGN1bGF0ZSByZWFsIHJldHVybmVkIGxlbmd0aCAqLworCQlleHRyYV9zaXplID0gKHdycXUtPmRhdGEubGVuZ3RoICogZGVzY3ItPnRva2VuX3NpemUpOworCQkvKiBSZS1hZGp1c3QgcmVwbHkgc2l6ZSAqLworCQlyZXF1ZXN0LT5sZW4gPSBleHRyYV9zaXplICsgSVdfRVZfUE9JTlRfTEVOOworCisJCS8qIFB1dCB0aGUgaXdlIGhlYWRlciB3aGVyZSBpdCBzaG91bGQsIGkuZS4gc2NyYXAgdGhlCisJCSAqIGR1bW15IHBvaW50ZXIuICovCisJCW1lbWNweShidWZmZXIgKyBJV19FVl9QT0lOVF9PRkYsIHJlcXVlc3QsIElXX0VWX0xDUF9MRU4pOworCisjaWZkZWYgV0VfUlRORVRMSU5LX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBSZXBseSAweCUwNFgsIGhkcl9sZW4gJWQsIHRva2VucyAlZCwgZXh0cmFfc2l6ZSAlZCwgYnVmZmVyX3NpemUgJWRcbiIsIGRldi0+bmFtZSwgY21kLCBoZHJfbGVuLCB3cnF1LT5kYXRhLmxlbmd0aCwgZXh0cmFfc2l6ZSwgYnVmZmVyX3NpemUpOworI2VuZGlmCS8qIFdFX1JUTkVUTElOS19ERUJVRyAqLworCisJCS8qIENoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCBidWZmZXIgdXAgdGhlcmUgKi8KKwkJaWYod3JxdV9wb2ludC5kYXRhLmxlbmd0aCA8IHdycXUtPmRhdGEubGVuZ3RoKQorCQkJcmV0ID0gLUUyQklHOworCX0KKworCS8qIFJldHVybiB0aGUgYnVmZmVyIHRvIHRoZSBjYWxsZXIgKi8KKwlpZiAoIXJldCkgeworCQkqcF9idWYgPSBidWZmZXI7CisJCSpwX2xlbiA9IHJlcXVlc3QtPmxlbjsKKwl9IGVsc2UgeworCQkvKiBDbGVhbnVwICovCisJCWlmKGJ1ZmZlcikKKwkJCWtmcmVlKGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFdyYXBwZXIgdG8gY2FsbCBhIHN0YW5kYXJkIFdpcmVsZXNzIEV4dGVuc2lvbiBTRVQgaGFuZGxlci4KKyAqIFdlIGRvIHZhcmlvdXMgY2hlY2tzIGFuZCBjYWxsIHRoZSBoYW5kbGVyIHdpdGggdGhlIHByb3BlciBhcmdzLgorICovCitzdGF0aWMgaW5saW5lIGludCBydG5ldGxpbmtfc3RhbmRhcmRfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAorCQkJCQkgc3RydWN0IGl3X2V2ZW50ICoJcmVxdWVzdCwKKwkJCQkJIGludAkJCXJlcXVlc3RfbGVuLAorCQkJCQkgaXdfaGFuZGxlcgkJaGFuZGxlcikKK3sKKwljb25zdCBzdHJ1Y3QgaXdfaW9jdGxfZGVzY3JpcHRpb24gKglkZXNjciA9IE5VTEw7CisJdW5zaWduZWQgaW50CQkJCWNtZDsKKwl1bmlvbiBpd3JlcV9kYXRhICoJCQl3cnF1OworCXVuaW9uIGl3cmVxX2RhdGEJCQl3cnF1X3BvaW50OworCWludAkJCQkJaGRyX2xlbjsKKwljaGFyICoJCQkJCWV4dHJhID0gTlVMTDsKKwlpbnQJCQkJCWV4dHJhX3NpemUgPSAwOworCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8JCQlpbmZvOworCWludAkJCQkJcmV0ID0gLUVJTlZBTDsKKworCS8qIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJlcXVlc3QgKi8KKwljbWQgPSByZXF1ZXN0LT5jbWQ7CisJaWYoKGNtZCAtIFNJT0NJV0ZJUlNUKSA+PSBzdGFuZGFyZF9pb2N0bF9udW0pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlkZXNjciA9ICYoc3RhbmRhcmRfaW9jdGxbY21kIC0gU0lPQ0lXRklSU1RdKTsKKworI2lmZGVmIFdFX1JUTkVUTElOS19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBGb3VuZCBzdGFuZGFyZCBTRVQgaGFuZGxlciBmb3IgMHglMDRYXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGNtZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzIChXRS5yKSA6IEhlYWRlciB0eXBlIDogJWQsIFRva2VuIHR5cGUgOiAlZCwgc2l6ZSA6ICVkLCB0b2tlbiA6ICVkXG4iLCBkZXYtPm5hbWUsIGRlc2NyLT5oZWFkZXJfdHlwZSwgZGVzY3ItPnRva2VuX3R5cGUsIGRlc2NyLT50b2tlbl9zaXplLCBkZXNjci0+bWF4X3Rva2Vucyk7CisjZW5kaWYJLyogV0VfUlRORVRMSU5LX0RFQlVHICovCisKKwkvKiBFeHRyYWN0IGZpeGVkIGhlYWRlciBmcm9tIHJlcXVlc3QuIFRoaXMgaXMgcHJvcGVybHkgYWxpZ25lZC4gKi8KKwl3cnF1ID0gJnJlcXVlc3QtPnU7CisKKwkvKiBDaGVjayBpZiB3cnF1IGlzIGNvbXBsZXRlICovCisJaGRyX2xlbiA9IGV2ZW50X3R5cGVfc2l6ZVtkZXNjci0+aGVhZGVyX3R5cGVdOworCWlmKHJlcXVlc3RfbGVuIDwgaGRyX2xlbikgeworI2lmZGVmIFdFX1JUTkVUTElOS19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIiVzIChXRS5yKSA6IFdpcmVsZXNzIHJlcXVlc3QgdG9vIHNob3J0ICglZClcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHJlcXVlc3RfbGVuKTsKKyNlbmRpZgkvKiBXRV9SVE5FVExJTktfREVCVUcgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUHJlcGFyZSB0aGUgY2FsbCAqLworCWluZm8uY21kID0gY21kOworCWluZm8uZmxhZ3MgPSAwOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBleHRyYSBkYXRhIGluIHRoZSByZXF1ZXN0IG9yIG5vdCAqLworCWlmKGRlc2NyLT5oZWFkZXJfdHlwZSAhPSBJV19IRUFERVJfVFlQRV9QT0lOVCkgeworCisJCS8qIE5vIGV4dHJhIGFyZ3VtZW50cy4gVHJpdmlhbCB0byBoYW5kbGUgKi8KKwkJcmV0ID0gaGFuZGxlcihkZXYsICZpbmZvLCB3cnF1LCBOVUxMKTsKKworCX0gZWxzZSB7CisJCWludAlleHRyYV9sZW47CisKKwkJLyogUHV0IHdycXUgaW4gdGhlIHJpZ2h0IHBsYWNlIChza2lwIHBvaW50ZXIpICovCisJCW1lbWNweSgoKGNoYXIgKikgJndycXVfcG9pbnQpICsgSVdfRVZfUE9JTlRfT0ZGLAorCQkgICAgICAgd3JxdSwgSVdfRVZfUE9JTlRfTEVOIC0gSVdfRVZfTENQX0xFTik7CisJCS8qIERvbid0IGZvcmdldCBhYm91dCB0aGUgZXZlbnQgY29kZS4uLiAqLworCQl3cnF1ID0gJndycXVfcG9pbnQ7CisKKwkJLyogQ2hlY2sgaWYgbnVtYmVyIG9mIHRva2VuIGZpdHMgd2l0aGluIGJvdW5kcyAqLworCQlpZih3cnF1X3BvaW50LmRhdGEubGVuZ3RoID4gZGVzY3ItPm1heF90b2tlbnMpCisJCQlyZXR1cm4gLUUyQklHOworCQlpZih3cnF1X3BvaW50LmRhdGEubGVuZ3RoIDwgZGVzY3ItPm1pbl90b2tlbnMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKiBSZWFsIGxlbmd0aCBvZiBwYXlsb2FkICovCisJCWV4dHJhX2xlbiA9IHdycXVfcG9pbnQuZGF0YS5sZW5ndGggKiBkZXNjci0+dG9rZW5fc2l6ZTsKKworCQkvKiBDaGVjayBpZiByZXF1ZXN0IGlzIHNlbGYgY29uc2lzdGVudCAqLworCQlpZigocmVxdWVzdF9sZW4gLSBoZHJfbGVuKSA8IGV4dHJhX2xlbikgeworI2lmZGVmIFdFX1JUTkVUTElOS19ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIChXRS5yKSA6IFdpcmVsZXNzIHJlcXVlc3QgZGF0YSB0b28gc2hvcnQgKCVkKVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGV4dHJhX3NpemUpOworI2VuZGlmCS8qIFdFX1JUTkVUTElOS19ERUJVRyAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworI2lmZGVmIFdFX1JUTkVUTElOS19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgKFdFLnIpIDogTWFsbG9jICVkIGJ5dGVzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBleHRyYV9zaXplKTsKKyNlbmRpZgkvKiBXRV9SVE5FVExJTktfREVCVUcgKi8KKworCQkvKiBBbHdheXMgYWxsb2NhdGUgZm9yIG1heCBzcGFjZS4gRWFzaWVyLCBhbmQgd29uJ3QgbGFzdAorCQkgKiBsb25nLi4uICovCisJCWV4dHJhX3NpemUgPSBkZXNjci0+bWF4X3Rva2VucyAqIGRlc2NyLT50b2tlbl9zaXplOworCQlleHRyYSA9IGttYWxsb2MoZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChleHRyYSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogQ29weSBleHRyYSBpbiBhbGlnbmVkIGJ1ZmZlciAqLworCQltZW1jcHkoZXh0cmEsICgoY2hhciAqKSByZXF1ZXN0KSArIGhkcl9sZW4sIGV4dHJhX2xlbik7CisKKwkJLyogQ2FsbCB0aGUgaGFuZGxlciAqLworCQlyZXQgPSBoYW5kbGVyKGRldiwgJmluZm8sICZ3cnF1X3BvaW50LCBleHRyYSk7CisJfQorCisjaWZkZWYgV0VfU0VUX0VWRU5UCisJLyogR2VuZXJhdGUgYW4gZXZlbnQgdG8gbm90aWZ5IGxpc3RlbmVycyBvZiB0aGUgY2hhbmdlICovCisJaWYoKGRlc2NyLT5mbGFncyAmIElXX0RFU0NSX0ZMQUdfRVZFTlQpICYmCisJICAgKChyZXQgPT0gMCkgfHwgKHJldCA9PSAtRUlXQ09NTUlUKSkpIHsKKwkJaWYoZGVzY3ItPmZsYWdzICYgSVdfREVTQ1JfRkxBR19SRVNUUklDVCkKKwkJCS8qIElmIHRoZSBldmVudCBpcyByZXN0cmljdGVkLCBkb24ndAorCQkJICogZXhwb3J0IHRoZSBwYXlsb2FkICovCisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgY21kLCB3cnF1LCBOVUxMKTsKKwkJZWxzZQorCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIGNtZCwgd3JxdSwgZXh0cmEpOworCX0KKyNlbmRpZgkvKiBXRV9TRVRfRVZFTlQgKi8KKworCS8qIENsZWFudXAgLSBJIHRvbGQgeW91IGl0IHdhc24ndCB0aGF0IGxvbmcgOy0pICovCisJaWYoZXh0cmEpCisJCWtmcmVlKGV4dHJhKTsKKworCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgaWYgbmVlZGVkIGFuZCBkZWZpbmVkICovCisJaWYocmV0ID09IC1FSVdDT01NSVQpCisJCXJldCA9IGNhbGxfY29tbWl0X2hhbmRsZXIoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBXcmFwcGVyIHRvIGNhbGwgYSBwcml2YXRlIFdpcmVsZXNzIEV4dGVuc2lvbiBHRVQgaGFuZGxlci4KKyAqIFNhbWUgYXMgYWJvdmUuLi4KKyAqIEl0J3Mgbm90IGFzIG5pY2UgYW5kIHNsaW1saW5lIGFzIHRoZSBzdGFuZGFyZCB3cmFwcGVyLiBUaGUgY2F1c2UKKyAqIGlzIHN0cnVjdCBpd19wcml2X2FyZ3MsIHdoaWNoIHdhcyBub3QgcmVhbGx5IGRlc2lnbmVkIGZvciB0aGUKKyAqIGpvYiB3ZSBhcmUgZ29pbmcgaGVyZS4KKyAqCisgKiBJTVBPUlRBTlQgOiBUaGlzIGZ1bmN0aW9uIHByZXZlbnQgdG8gc2V0IGFuZCBnZXQgZGF0YSBvbiB0aGUgc2FtZQorICogSU9DVEwgYW5kIGVuZm9yY2UgdGhlIFNFVC9HRVQgY29udmVudGlvbi4gTm90IGRvaW5nIGl0IHdvdWxkIGJlCisgKiBmYXIgdG9vIGhhaXJ5Li4uCisgKiBJZiB5b3UgbmVlZCB0byBzZXQgYW5kIGdldCBkYXRhIGF0IHRoZSBzYW1lIHRpbWUsIHBsZWFzZSBkb24ndCB1c2UKKyAqIGEgaXdfaGFuZGxlciBidXQgcHJvY2VzcyBpdCBpbiB5b3VyIGlvY3RsIGhhbmRsZXIgKGkuZS4gdXNlIHRoZQorICogb2xkIGRyaXZlciBBUEkpLgorICovCitzdGF0aWMgaW5saW5lIGludCBydG5ldGxpbmtfcHJpdmF0ZV9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYsCisJCQkJCXN0cnVjdCBpd19ldmVudCAqCXJlcXVlc3QsCisJCQkJCWludAkJCXJlcXVlc3RfbGVuLAorCQkJCQlpd19oYW5kbGVyCQloYW5kbGVyLAorCQkJCQljaGFyICoqCQkJcF9idWYsCisJCQkJCWludCAqCQkJcF9sZW4pCit7CisJY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyAqCWRlc2NyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQJCQljbWQ7CisJdW5pb24gaXdyZXFfZGF0YSAqCQl3cnF1OworCWludAkJCQloZHJfbGVuOworCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8JCWluZm87CisJaW50CQkJCWV4dHJhX3NpemUgPSAwOworCWludAkJCQlpOworCWNoYXIgKgkJCQlidWZmZXIgPSBOVUxMOworCWludAkJCQlidWZmZXJfc2l6ZSA9IDA7CisJaW50CQkJCXJldCA9IC1FSU5WQUw7CisKKwkvKiBHZXQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBSZXF1ZXN0ICovCisJY21kID0gcmVxdWVzdC0+Y21kOworCWZvcihpID0gMDsgaSA8IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPm51bV9wcml2YXRlX2FyZ3M7IGkrKykKKwkJaWYoY21kID09IGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPnByaXZhdGVfYXJnc1tpXS5jbWQpIHsKKwkJCWRlc2NyID0gJihkZXYtPndpcmVsZXNzX2hhbmRsZXJzLT5wcml2YXRlX2FyZ3NbaV0pOworCQkJYnJlYWs7CisJCX0KKwlpZihkZXNjciA9PSBOVUxMKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKyNpZmRlZiBXRV9SVE5FVExJTktfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMgKFdFLnIpIDogRm91bmQgcHJpdmF0ZSBoYW5kbGVyIGZvciAweCUwNFhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMgKFdFLnIpIDogTmFtZSAlcywgc2V0ICVYLCBnZXQgJVhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGVzY3ItPm5hbWUsIGRlc2NyLT5zZXRfYXJncywgZGVzY3ItPmdldF9hcmdzKTsKKyNlbmRpZgkvKiBXRV9SVE5FVExJTktfREVCVUcgKi8KKworCS8qIENvbXB1dGUgdGhlIG1heCBzaXplIG9mIHRoZSBnZXQgYXJndW1lbnRzICovCisJZXh0cmFfc2l6ZSA9IGdldF9wcml2X3NpemUoZGVzY3ItPmdldF9hcmdzKTsKKworCS8qIERvZXMgaXQgZml0cyBpbiB3cnF1ID8gKi8KKwlpZigoZGVzY3ItPmdldF9hcmdzICYgSVdfUFJJVl9TSVpFX0ZJWEVEKSAmJgorCSAgIChleHRyYV9zaXplIDw9IElGTkFNU0laKSkgeworCQloZHJfbGVuID0gZXh0cmFfc2l6ZTsKKwkJZXh0cmFfc2l6ZSA9IDA7CisJfSBlbHNlIHsKKwkJaGRyX2xlbiA9IElXX0VWX1BPSU5UX0xFTjsKKwl9CisKKwkvKiBDaGVjayBpZiB3cnF1IGlzIGNvbXBsZXRlICovCisJaWYocmVxdWVzdF9sZW4gPCBoZHJfbGVuKSB7CisjaWZkZWYgV0VfUlRORVRMSU5LX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiJXMgKFdFLnIpIDogV2lyZWxlc3MgcmVxdWVzdCB0b28gc2hvcnQgKCVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcmVxdWVzdF9sZW4pOworI2VuZGlmCS8qIFdFX1JUTkVUTElOS19ERUJVRyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBQcmVwYXJlIHRoZSBjYWxsICovCisJaW5mby5jbWQgPSBjbWQ7CisJaW5mby5mbGFncyA9IDA7CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgcG9pbnRlciB0byB1c2VyIHNwYWNlIGRhdGEgb3Igbm90LiAqLworCWlmKGV4dHJhX3NpemUgPT0gMCkgeworCisJCS8qIENyZWF0ZSB0aGUga2VybmVsIGJ1ZmZlciB0aGF0IHdlIHdpbGwgcmV0dXJuLgorCQkgKiBJdCdzIGF0IGFuIG9mZnNldCB0byBtYXRjaCB0aGUgVFlQRV9QT0lOVCBjYXNlLi4uICovCisJCWJ1ZmZlcl9zaXplID0gcmVxdWVzdF9sZW4gKyBJV19FVl9QT0lOVF9PRkY7CisJCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCS8qIENvcHkgZXZlbnQgZGF0YSAqLworCQltZW1jcHkoYnVmZmVyICsgSVdfRVZfUE9JTlRfT0ZGLCByZXF1ZXN0LCByZXF1ZXN0X2xlbik7CisJCS8qIFVzZSBvdXIgb3duIGNvcHkgb2Ygd3JxdSAqLworCQl3cnF1ID0gKHVuaW9uIGl3cmVxX2RhdGEgKikgKGJ1ZmZlciArIElXX0VWX1BPSU5UX09GRgorCQkJCQkgICAgICsgSVdfRVZfTENQX0xFTik7CisKKwkJLyogTm8gZXh0cmEgYXJndW1lbnRzLiBUcml2aWFsIHRvIGhhbmRsZSAqLworCQlyZXQgPSBoYW5kbGVyKGRldiwgJmluZm8sIHdycXUsIChjaGFyICopIHdycXUpOworCisJfSBlbHNlIHsKKwkJY2hhciAqCWV4dHJhOworCisJCS8qIEJ1ZmZlciBmb3IgZnVsbCByZXBseSAqLworCQlidWZmZXJfc2l6ZSA9IGV4dHJhX3NpemUgKyBJV19FVl9QT0lOVF9MRU4gKyBJV19FVl9QT0lOVF9PRkY7CisKKyNpZmRlZiBXRV9SVE5FVExJTktfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIChXRS5yKSA6IE1hbGxvYyAlZCBieXRlcyAoJWQgYnl0ZXMpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBleHRyYV9zaXplLCBidWZmZXJfc2l6ZSk7CisjZW5kaWYJLyogV0VfUlRORVRMSU5LX0RFQlVHICovCisKKwkJLyogQ3JlYXRlIHRoZSBrZXJuZWwgYnVmZmVyIHRoYXQgd2Ugd2lsbCByZXR1cm4gKi8KKwkJYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQkvKiBQdXQgd3JxdSBpbiB0aGUgcmlnaHQgcGxhY2UgKGp1c3QgYmVmb3JlIGV4dHJhKS4KKwkJICogTGVhdmUgc3BhY2UgZm9yIElXRSBoZWFkZXIgYW5kIGR1bW15IHBvaW50ZXIuLi4KKwkJICogTm90ZSB0aGF0IElXX0VWX0xDUF9MRU49PTQgYnl0ZXMsIHNvIGl0J3Mgc3RpbGwgYWxpZ25lZC4uLgorCQkgKi8KKwkJbWVtY3B5KGJ1ZmZlciArIElXX0VWX0xDUF9MRU4gKyBJV19FVl9QT0lOVF9PRkYsCisJCSAgICAgICAoKGNoYXIgKikgcmVxdWVzdCkgKyBJV19FVl9MQ1BfTEVOLAorCQkgICAgICAgSVdfRVZfUE9JTlRfTEVOIC0gSVdfRVZfTENQX0xFTik7CisJCXdycXUgPSAodW5pb24gaXdyZXFfZGF0YSAqKSAoYnVmZmVyICsgSVdfRVZfTENQX0xFTik7CisKKwkJLyogRXh0cmEgY29tZXMgbG9naWNhbGx5IGFmdGVyIHRoYXQuIE9mZnNldCArMTIgYnl0ZXMuICovCisJCWV4dHJhID0gYnVmZmVyICsgSVdfRVZfUE9JTlRfT0ZGICsgSVdfRVZfUE9JTlRfTEVOOworCisJCS8qIENhbGwgdGhlIGhhbmRsZXIgKi8KKwkJcmV0ID0gaGFuZGxlcihkZXYsICZpbmZvLCB3cnF1LCBleHRyYSk7CisKKwkJLyogQWRqdXN0IGZvciB0aGUgYWN0dWFsIGxlbmd0aCBpZiBpdCdzIHZhcmlhYmxlLAorCQkgKiBhdm9pZCBsZWFraW5nIGtlcm5lbCBiaXRzIG91dHNpZGUuICovCisJCWlmICghKGRlc2NyLT5nZXRfYXJncyAmIElXX1BSSVZfU0laRV9GSVhFRCkpCisJCQlleHRyYV9zaXplID0gYWRqdXN0X3ByaXZfc2l6ZShkZXNjci0+Z2V0X2FyZ3MsIHdycXUpOworCQkvKiBSZS1hZGp1c3QgcmVwbHkgc2l6ZSAqLworCQlyZXF1ZXN0LT5sZW4gPSBleHRyYV9zaXplICsgSVdfRVZfUE9JTlRfTEVOOworCisJCS8qIFB1dCB0aGUgaXdlIGhlYWRlciB3aGVyZSBpdCBzaG91bGQsIGkuZS4gc2NyYXAgdGhlCisJCSAqIGR1bW15IHBvaW50ZXIuICovCisJCW1lbWNweShidWZmZXIgKyBJV19FVl9QT0lOVF9PRkYsIHJlcXVlc3QsIElXX0VWX0xDUF9MRU4pOworCisjaWZkZWYgV0VfUlRORVRMSU5LX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBSZXBseSAweCUwNFgsIGhkcl9sZW4gJWQsIHRva2VucyAlZCwgZXh0cmFfc2l6ZSAlZCwgYnVmZmVyX3NpemUgJWRcbiIsIGRldi0+bmFtZSwgY21kLCBoZHJfbGVuLCB3cnF1LT5kYXRhLmxlbmd0aCwgZXh0cmFfc2l6ZSwgYnVmZmVyX3NpemUpOworI2VuZGlmCS8qIFdFX1JUTkVUTElOS19ERUJVRyAqLworCX0KKworCS8qIFJldHVybiB0aGUgYnVmZmVyIHRvIHRoZSBjYWxsZXIgKi8KKwlpZiAoIXJldCkgeworCQkqcF9idWYgPSBidWZmZXI7CisJCSpwX2xlbiA9IHJlcXVlc3QtPmxlbjsKKwl9IGVsc2UgeworCQkvKiBDbGVhbnVwICovCisJCWlmKGJ1ZmZlcikKKwkJCWtmcmVlKGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIFdyYXBwZXIgdG8gY2FsbCBhIHByaXZhdGUgV2lyZWxlc3MgRXh0ZW5zaW9uIFNFVCBoYW5kbGVyLgorICogU2FtZSBhcyBhYm92ZS4uLgorICogSXQncyBub3QgYXMgbmljZSBhbmQgc2xpbWxpbmUgYXMgdGhlIHN0YW5kYXJkIHdyYXBwZXIuIFRoZSBjYXVzZQorICogaXMgc3RydWN0IGl3X3ByaXZfYXJncywgd2hpY2ggd2FzIG5vdCByZWFsbHkgZGVzaWduZWQgZm9yIHRoZQorICogam9iIHdlIGFyZSBnb2luZyBoZXJlLgorICoKKyAqIElNUE9SVEFOVCA6IFRoaXMgZnVuY3Rpb24gcHJldmVudCB0byBzZXQgYW5kIGdldCBkYXRhIG9uIHRoZSBzYW1lCisgKiBJT0NUTCBhbmQgZW5mb3JjZSB0aGUgU0VUL0dFVCBjb252ZW50aW9uLiBOb3QgZG9pbmcgaXQgd291bGQgYmUKKyAqIGZhciB0b28gaGFpcnkuLi4KKyAqIElmIHlvdSBuZWVkIHRvIHNldCBhbmQgZ2V0IGRhdGEgYXQgdGhlIHNhbWUgdGltZSwgcGxlYXNlIGRvbid0IHVzZQorICogYSBpd19oYW5kbGVyIGJ1dCBwcm9jZXNzIGl0IGluIHlvdXIgaW9jdGwgaGFuZGxlciAoaS5lLiB1c2UgdGhlCisgKiBvbGQgZHJpdmVyIEFQSSkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJ0bmV0bGlua19wcml2YXRlX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqCWRldiwKKwkJCQkJc3RydWN0IGl3X2V2ZW50ICoJcmVxdWVzdCwKKwkJCQkJaW50CQkJcmVxdWVzdF9sZW4sCisJCQkJCWl3X2hhbmRsZXIJCWhhbmRsZXIpCit7CisJY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyAqCWRlc2NyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQJCQljbWQ7CisJdW5pb24gaXdyZXFfZGF0YSAqCQl3cnF1OworCXVuaW9uIGl3cmVxX2RhdGEJCXdycXVfcG9pbnQ7CisJaW50CQkJCWhkcl9sZW47CisJY2hhciAqCQkJCWV4dHJhID0gTlVMTDsKKwlpbnQJCQkJZXh0cmFfc2l6ZSA9IDA7CisJaW50CQkJCW9mZnNldCA9IDA7CS8qIEZvciBzdWItaW9jdGxzICovCisJc3RydWN0IGl3X3JlcXVlc3RfaW5mbwkJaW5mbzsKKwlpbnQJCQkJaTsKKwlpbnQJCQkJcmV0ID0gLUVJTlZBTDsKKworCS8qIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIFJlcXVlc3QgKi8KKwljbWQgPSByZXF1ZXN0LT5jbWQ7CisJZm9yKGkgPSAwOyBpIDwgZGV2LT53aXJlbGVzc19oYW5kbGVycy0+bnVtX3ByaXZhdGVfYXJnczsgaSsrKQorCQlpZihjbWQgPT0gZGV2LT53aXJlbGVzc19oYW5kbGVycy0+cHJpdmF0ZV9hcmdzW2ldLmNtZCkgeworCQkJZGVzY3IgPSAmKGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPnByaXZhdGVfYXJnc1tpXSk7CisJCQlicmVhazsKKwkJfQorCWlmKGRlc2NyID09IE5VTEwpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworI2lmZGVmIFdFX1JUTkVUTElOS19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBGb3VuZCBwcml2YXRlIGhhbmRsZXIgZm9yIDB4JTA0WFxuIiwKKwkgICAgICAgaWZyLT5pZnJfbmFtZSwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXMgKFdFLnIpIDogTmFtZSAlcywgc2V0ICVYLCBnZXQgJVhcbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGVzY3ItPm5hbWUsIGRlc2NyLT5zZXRfYXJncywgZGVzY3ItPmdldF9hcmdzKTsKKyNlbmRpZgkvKiBXRV9SVE5FVExJTktfREVCVUcgKi8KKworCS8qIENvbXB1dGUgdGhlIHNpemUgb2YgdGhlIHNldCBhcmd1bWVudHMgKi8KKwkvKiBDaGVjayBmb3Igc3ViLWlvY3RsIGhhbmRsZXIgKi8KKwlpZihkZXNjci0+bmFtZVswXSA9PSAnXDAnKQorCQkvKiBSZXNlcnZlIG9uZSBpbnQgZm9yIHN1Yi1pb2N0bCBpbmRleCAqLworCQlvZmZzZXQgPSBzaXplb2YoX191MzIpOworCisJLyogU2l6ZSBvZiBzZXQgYXJndW1lbnRzICovCisJZXh0cmFfc2l6ZSA9IGdldF9wcml2X3NpemUoZGVzY3ItPnNldF9hcmdzKTsKKworCS8qIERvZXMgaXQgZml0cyBpbiB3cnF1ID8gKi8KKwlpZigoZGVzY3ItPnNldF9hcmdzICYgSVdfUFJJVl9TSVpFX0ZJWEVEKSAmJgorCSAgIChleHRyYV9zaXplIDw9IElGTkFNU0laKSkgeworCQloZHJfbGVuID0gSVdfRVZfTENQX0xFTiArIGV4dHJhX3NpemU7CisJCWV4dHJhX3NpemUgPSAwOworCX0gZWxzZSB7CisJCWhkcl9sZW4gPSBJV19FVl9QT0lOVF9MRU47CisJfQorCisJLyogRXh0cmFjdCBmaXhlZCBoZWFkZXIgZnJvbSByZXF1ZXN0LiBUaGlzIGlzIHByb3Blcmx5IGFsaWduZWQuICovCisJd3JxdSA9ICZyZXF1ZXN0LT51OworCisJLyogQ2hlY2sgaWYgd3JxdSBpcyBjb21wbGV0ZSAqLworCWlmKHJlcXVlc3RfbGVuIDwgaGRyX2xlbikgeworI2lmZGVmIFdFX1JUTkVUTElOS19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIiVzIChXRS5yKSA6IFdpcmVsZXNzIHJlcXVlc3QgdG9vIHNob3J0ICglZClcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHJlcXVlc3RfbGVuKTsKKyNlbmRpZgkvKiBXRV9SVE5FVExJTktfREVCVUcgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUHJlcGFyZSB0aGUgY2FsbCAqLworCWluZm8uY21kID0gY21kOworCWluZm8uZmxhZ3MgPSAwOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIHBvaW50ZXIgdG8gdXNlciBzcGFjZSBkYXRhIG9yIG5vdC4gKi8KKwlpZihleHRyYV9zaXplID09IDApIHsKKworCQkvKiBObyBleHRyYSBhcmd1bWVudHMuIFRyaXZpYWwgdG8gaGFuZGxlICovCisJCXJldCA9IGhhbmRsZXIoZGV2LCAmaW5mbywgd3JxdSwgKGNoYXIgKikgd3JxdSk7CisKKwl9IGVsc2UgeworCQlpbnQJZXh0cmFfbGVuOworCisJCS8qIFB1dCB3cnF1IGluIHRoZSByaWdodCBwbGFjZSAoc2tpcCBwb2ludGVyKSAqLworCQltZW1jcHkoKChjaGFyICopICZ3cnF1X3BvaW50KSArIElXX0VWX1BPSU5UX09GRiwKKwkJICAgICAgIHdycXUsIElXX0VWX1BPSU5UX0xFTiAtIElXX0VWX0xDUF9MRU4pOworCisJCS8qIERvZXMgaXQgZml0cyB3aXRoaW4gYm91bmRzID8gKi8KKwkJaWYod3JxdV9wb2ludC5kYXRhLmxlbmd0aCA+IChkZXNjci0+c2V0X2FyZ3MgJgorCQkJCQkgICAgIElXX1BSSVZfU0laRV9NQVNLKSkKKwkJCXJldHVybiAtRTJCSUc7CisKKwkJLyogUmVhbCBsZW5ndGggb2YgcGF5bG9hZCAqLworCQlleHRyYV9sZW4gPSBhZGp1c3RfcHJpdl9zaXplKGRlc2NyLT5zZXRfYXJncywgJndycXVfcG9pbnQpOworCisJCS8qIENoZWNrIGlmIHJlcXVlc3QgaXMgc2VsZiBjb25zaXN0ZW50ICovCisJCWlmKChyZXF1ZXN0X2xlbiAtIGhkcl9sZW4pIDwgZXh0cmFfbGVuKSB7CisjaWZkZWYgV0VfUlRORVRMSU5LX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgKFdFLnIpIDogV2lyZWxlc3MgcmVxdWVzdCBkYXRhIHRvbyBzaG9ydCAoJWQpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXh0cmFfc2l6ZSk7CisjZW5kaWYJLyogV0VfUlRORVRMSU5LX0RFQlVHICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisjaWZkZWYgV0VfUlRORVRMSU5LX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBNYWxsb2MgJWQgYnl0ZXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGV4dHJhX3NpemUpOworI2VuZGlmCS8qIFdFX1JUTkVUTElOS19ERUJVRyAqLworCisJCS8qIEFsd2F5cyBhbGxvY2F0ZSBmb3IgbWF4IHNwYWNlLiBFYXNpZXIsIGFuZCB3b24ndCBsYXN0CisJCSAqIGxvbmcuLi4gKi8KKwkJZXh0cmEgPSBrbWFsbG9jKGV4dHJhX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoZXh0cmEgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIENvcHkgZXh0cmEgaW4gYWxpZ25lZCBidWZmZXIgKi8KKwkJbWVtY3B5KGV4dHJhLCAoKGNoYXIgKikgcmVxdWVzdCkgKyBoZHJfbGVuLCBleHRyYV9sZW4pOworCisJCS8qIENhbGwgdGhlIGhhbmRsZXIgKi8KKwkJcmV0ID0gaGFuZGxlcihkZXYsICZpbmZvLCAmd3JxdV9wb2ludCwgZXh0cmEpOworCisJCS8qIENsZWFudXAgLSBJIHRvbGQgeW91IGl0IHdhc24ndCB0aGF0IGxvbmcgOy0pICovCisJCWtmcmVlKGV4dHJhKTsKKwl9CisKKwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyIGlmIG5lZWRlZCBhbmQgZGVmaW5lZCAqLworCWlmKHJldCA9PSAtRUlXQ09NTUlUKQorCQlyZXQgPSBjYWxsX2NvbW1pdF9oYW5kbGVyKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogTWFpbiBSdE5ldGxpbmsgZGlzcGF0Y2hlci4gQ2FsbGVkIGZyb20gdGhlIG1haW4gbmV0d29ya2luZyBjb2RlCisgKiAoZG9fZ2V0bGluaygpIGluIG5ldC9jb3JlL3J0bmV0bGluay5jKS4KKyAqIENoZWNrIHRoZSB0eXBlIG9mIFJlcXVlc3QgYW5kIGNhbGwgdGhlIGFwcHJvcHJpYXRlIHdyYXBwZXIuLi4KKyAqLworaW50IHdpcmVsZXNzX3J0bmV0bGlua19nZXQoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYsCisJCQkgICBjaGFyICoJCWRhdGEsCisJCQkgICBpbnQJCQlsZW4sCisJCQkgICBjaGFyICoqCQlwX2J1ZiwKKwkJCSAgIGludCAqCQlwX2xlbikKK3sKKwlzdHJ1Y3QgaXdfZXZlbnQgKglyZXF1ZXN0ID0gKHN0cnVjdCBpd19ldmVudCAqKSBkYXRhOworCWl3X2hhbmRsZXIJCWhhbmRsZXI7CisKKwkvKiBDaGVjayBsZW5ndGggKi8KKwlpZihsZW4gPCBJV19FVl9MQ1BfTEVOKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBSdE5ldGxpbmsgcmVxdWVzdCB0b28gc2hvcnQgKCVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVDaGVjayBsZW5ndGggKGxlbiBtYXkgaGF2ZSBwYWRkaW5nKSAqLworCWlmKHJlcXVlc3QtPmxlbiA+IGxlbikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgKFdFLnIpIDogUnROZXRsaW5rIHJlcXVlc3QgbGVuIGludmFsaWQgKCVkLSVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcmVxdWVzdC0+bGVuLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBPbmx5IGFjY2VwdCBHRVQgcmVxdWVzdHMgaW4gaGVyZSAqLworCWlmKCFJV19JU19HRVQocmVxdWVzdC0+Y21kKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyogU3BlY2lhbCBjYXNlcyAqLworCWlmKHJlcXVlc3QtPmNtZCA9PSBTSU9DR0lXU1RBVFMpCisJCS8qIEdldCBXaXJlbGVzcyBTdGF0cyAqLworCQlyZXR1cm4gcnRuZXRsaW5rX3N0YW5kYXJkX2dldChkZXYsCisJCQkJCSAgICAgIHJlcXVlc3QsCisJCQkJCSAgICAgIHJlcXVlc3QtPmxlbiwKKwkJCQkJICAgICAgJml3X2hhbmRsZXJfZ2V0X2l3c3RhdHMsCisJCQkJCSAgICAgIHBfYnVmLCBwX2xlbik7CisJaWYocmVxdWVzdC0+Y21kID09IFNJT0NHSVdQUklWKSB7CisJCS8qIENoZWNrIGlmIHdlIGhhdmUgc29tZSB3aXJlbGVzcyBoYW5kbGVycyBkZWZpbmVkICovCisJCWlmKGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJLyogR2V0IFdpcmVsZXNzIFN0YXRzICovCisJCXJldHVybiBydG5ldGxpbmtfc3RhbmRhcmRfZ2V0KGRldiwKKwkJCQkJICAgICAgcmVxdWVzdCwKKwkJCQkJICAgICAgcmVxdWVzdC0+bGVuLAorCQkJCQkgICAgICAmaXdfaGFuZGxlcl9nZXRfcHJpdmF0ZSwKKwkJCQkJICAgICAgcF9idWYsIHBfbGVuKTsKKwl9CisKKwkvKiBCYXNpYyBjaGVjayAqLworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBUcnkgdG8gZmluZCB0aGUgaGFuZGxlciAqLworCWhhbmRsZXIgPSBnZXRfaGFuZGxlcihkZXYsIHJlcXVlc3QtPmNtZCk7CisJaWYoaGFuZGxlciAhPSBOVUxMKSB7CisJCS8qIFN0YW5kYXJkIGFuZCBwcml2YXRlIGFyZSBub3QgdGhlIHNhbWUgKi8KKwkJaWYocmVxdWVzdC0+Y21kIDwgU0lPQ0lXRklSU1RQUklWKQorCQkJcmV0dXJuIHJ0bmV0bGlua19zdGFuZGFyZF9nZXQoZGV2LAorCQkJCQkJICAgICAgcmVxdWVzdCwKKwkJCQkJCSAgICAgIHJlcXVlc3QtPmxlbiwKKwkJCQkJCSAgICAgIGhhbmRsZXIsCisJCQkJCQkgICAgICBwX2J1ZiwgcF9sZW4pOworCQllbHNlCisJCQlyZXR1cm4gcnRuZXRsaW5rX3ByaXZhdGVfZ2V0KGRldiwKKwkJCQkJCSAgICAgcmVxdWVzdCwKKwkJCQkJCSAgICAgcmVxdWVzdC0+bGVuLAorCQkJCQkJICAgICBoYW5kbGVyLAorCQkJCQkJICAgICBwX2J1ZiwgcF9sZW4pOworCX0KKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoKKyAqIE1haW4gUnROZXRsaW5rIGRpc3BhdGNoZXIuIENhbGxlZCBmcm9tIHRoZSBtYWluIG5ldHdvcmtpbmcgY29kZQorICogKGRvX3NldGxpbmsoKSBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYykuCisgKiBDaGVjayB0aGUgdHlwZSBvZiBSZXF1ZXN0IGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSB3cmFwcGVyLi4uCisgKi8KK2ludCB3aXJlbGVzc19ydG5ldGxpbmtfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAorCQkJICAgY2hhciAqCQlkYXRhLAorCQkJICAgaW50CQkJbGVuKQoreworCXN0cnVjdCBpd19ldmVudCAqCXJlcXVlc3QgPSAoc3RydWN0IGl3X2V2ZW50ICopIGRhdGE7CisJaXdfaGFuZGxlcgkJaGFuZGxlcjsKKworCS8qIENoZWNrIGxlbmd0aCAqLworCWlmKGxlbiA8IElXX0VWX0xDUF9MRU4pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIChXRS5yKSA6IFJ0TmV0bGluayByZXF1ZXN0IHRvbyBzaG9ydCAoJWQpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZUNoZWNrIGxlbmd0aCAobGVuIG1heSBoYXZlIHBhZGRpbmcpICovCisJaWYocmVxdWVzdC0+bGVuID4gbGVuKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UucikgOiBSdE5ldGxpbmsgcmVxdWVzdCBsZW4gaW52YWxpZCAoJWQtJWQpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCByZXF1ZXN0LT5sZW4sIGxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE9ubHkgYWNjZXB0IFNFVCByZXF1ZXN0cyBpbiBoZXJlICovCisJaWYoIUlXX0lTX1NFVChyZXF1ZXN0LT5jbWQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBCYXNpYyBjaGVjayAqLworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBOZXcgZHJpdmVyIEFQSSA6IHRyeSB0byBmaW5kIHRoZSBoYW5kbGVyICovCisJaGFuZGxlciA9IGdldF9oYW5kbGVyKGRldiwgcmVxdWVzdC0+Y21kKTsKKwlpZihoYW5kbGVyICE9IE5VTEwpIHsKKwkJLyogU3RhbmRhcmQgYW5kIHByaXZhdGUgYXJlIG5vdCB0aGUgc2FtZSAqLworCQlpZihyZXF1ZXN0LT5jbWQgPCBTSU9DSVdGSVJTVFBSSVYpCisJCQlyZXR1cm4gcnRuZXRsaW5rX3N0YW5kYXJkX3NldChkZXYsCisJCQkJCQkgICAgICByZXF1ZXN0LAorCQkJCQkJICAgICAgcmVxdWVzdC0+bGVuLAorCQkJCQkJICAgICAgaGFuZGxlcik7CisJCWVsc2UKKwkJCXJldHVybiBydG5ldGxpbmtfcHJpdmF0ZV9zZXQoZGV2LAorCQkJCQkJICAgICByZXF1ZXN0LAorCQkJCQkJICAgICByZXF1ZXN0LT5sZW4sCisJCQkJCQkgICAgIGhhbmRsZXIpOworCX0KKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKyNlbmRpZgkvKiBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyAqLworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqIEVWRU5UIFBST0NFU1NJTkcgKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBQcm9jZXNzIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdGhlIHdpcmVsZXNzIGxheWVyIG9yIHRoZSBkcml2ZXIuCiAgKiBNb3N0IG9mdGVuLCB0aGUgZXZlbnQgd2lsbCBiZSBwcm9wYWdhdGVkIHRocm91Z2ggcnRuZXRsaW5rCiAgKi8KIAotI2lmZGVmIFdFX0VWRU5UX05FVExJTksKLS8qICJydG5sIiBpcyBkZWZpbmVkIGluIG5ldC9jb3JlL3J0bmV0bGluay5jLCBidXQgd2UgbmVlZCBpdCBoZXJlLgotICogSXQgaXMgZGVjbGFyZWQgaW4gPGxpbnV4L3J0bmV0bGluay5oPiAqLwotCisjaWZkZWYgV0VfRVZFTlRfUlRORVRMSU5LCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogRmlsbCBhIHJ0bmV0bGluayBtZXNzYWdlIHdpdGggb3VyIGV2ZW50IGRhdGEuCkBAIC0xMTIxLDEyICsxODU3LDExIEBACiAJci0+X19pZmlfcGFkID0gMDsKIAlyLT5pZmlfdHlwZSA9IGRldi0+dHlwZTsKIAlyLT5pZmlfaW5kZXggPSBkZXYtPmlmaW5kZXg7Ci0Jci0+aWZpX2ZsYWdzID0gZGV2LT5mbGFnczsKKwlyLT5pZmlfZmxhZ3MgPSBkZXZfZ2V0X2ZsYWdzKGRldik7CiAJci0+aWZpX2NoYW5nZSA9IDA7CS8qIFdpcmVsZXNzIGNoYW5nZXMgZG9uJ3QgYWZmZWN0IHRob3NlIGZsYWdzICovCiAKIAkvKiBBZGQgdGhlIHdpcmVsZXNzIGV2ZW50cyBpbiB0aGUgbmV0bGluayBwYWNrZXQgKi8KLQlSVEFfUFVUKHNrYiwgSUZMQV9XSVJFTEVTUywKLQkJZXZlbnRfbGVuLCBldmVudCk7CisJUlRBX1BVVChza2IsIElGTEFfV0lSRUxFU1MsIGV2ZW50X2xlbiwgZXZlbnQpOwogCiAJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwogCXJldHVybiBza2ItPmxlbjsKQEAgLTExNjMsNyArMTg5OCw3IEBACiAJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IFJUTkxHUlBfTElOSzsKIAluZXRsaW5rX2Jyb2FkY2FzdChydG5sLCBza2IsIDAsIFJUTkxHUlBfTElOSywgR0ZQX0FUT01JQyk7CiB9Ci0jZW5kaWYJLyogV0VfRVZFTlRfTkVUTElOSyAqLworI2VuZGlmCS8qIFdFX0VWRU5UX1JUTkVUTElOSyAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgpAQCAtMTI1NSwxMCArMTk5MCwxMCBAQAogCWlmKGV4dHJhICE9IE5VTEwpCiAJCW1lbWNweSgoKGNoYXIgKikgZXZlbnQpICsgaGRyX2xlbiwgZXh0cmEsIGV4dHJhX2xlbik7CiAKLSNpZmRlZiBXRV9FVkVOVF9ORVRMSU5LCi0JLyogcnRuZXRsaW5rIGV2ZW50IGNoYW5uZWwgKi8KKyNpZmRlZiBXRV9FVkVOVF9SVE5FVExJTksKKwkvKiBTZW5kIHZpYSB0aGUgUnROZXRsaW5rIGV2ZW50IGNoYW5uZWwgKi8KIAlydG1zZ19pd2luZm8oZGV2LCAoY2hhciAqKSBldmVudCwgZXZlbnRfbGVuKTsKLSNlbmRpZgkvKiBXRV9FVkVOVF9ORVRMSU5LICovCisjZW5kaWYJLyogV0VfRVZFTlRfUlRORVRMSU5LICovCiAKIAkvKiBDbGVhbnVwICovCiAJa2ZyZWUoZXZlbnQpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvS2NvbmZpZyBiL25ldC9kY2NwL0tjb25maWcKaW5kZXggMTg3YWMxOC4uN2UwOTZiYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvS2NvbmZpZworKysgYi9uZXQvZGNjcC9LY29uZmlnCkBAIC0yNCw2ICsyNCwxMCBAQAogCWRlZl90cmlzdGF0ZSB5IGlmIChJUF9EQ0NQID0geSAmJiBJTkVUX0RJQUcgPSB5KQogCWRlZl90cmlzdGF0ZSBtCiAKK2NvbmZpZyBJUF9EQ0NQX0FDS1ZFQworCWRlcGVuZHMgb24gSVBfRENDUAorCWRlZl9ib29sIE4KKwogc291cmNlICJuZXQvZGNjcC9jY2lkcy9LY29uZmlnIgogCiBtZW51ICJEQ0NQIEtlcm5lbCBIYWNraW5nIgpAQCAtMzYsMTUgKzQwLDYgQEAKIAogCSAgSnVzdCBzYXkgTi4KIAotY29uZmlnIElQX0RDQ1BfVU5MT0FEX0hBQ0sKLQlkZXBlbmRzIG9uIElQX0RDQ1A9bSAmJiBJUF9EQ0NQX0NDSUQzPW0KLQlib29sICJEQ0NQIGNvbnRyb2wgc29jayB1bmxvYWQgaGFjayIKLQktLS1oZWxwLS0tCi0JICBFbmFibGUgdGhpcyB0byBiZSBhYmxlIHRvIHVubG9hZCB0aGUgZGNjcCBtb2R1bGUgd2hlbiB0aGUgaXQKLQkgIGhhcyBvbmx5IG9uZSByZWZjb3VudCBoZWxkLCB0aGUgY29udHJvbCBzb2NrIG9uZS4gSnVzdCBleGVjdXRlCi0JICAicm1tb2QgZGNjcF9jY2lkMyBkY2NwIgotCi0JICBKdXN0IHNheSBOLgogZW5kbWVudQogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9NYWtlZmlsZSBiL25ldC9kY2NwL01ha2VmaWxlCmluZGV4IDg3YjI3ZmYuLjc2OTZlMjEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL01ha2VmaWxlCisrKyBiL25ldC9kY2NwL01ha2VmaWxlCkBAIC0yLDE1ICsyLDE4IEBACiAKIGRjY3BfaXB2Ni15IDo9IGlwdjYubwogCi1vYmotJChDT05GSUdfSVBfRENDUCkgKz0gZGNjcC5vCitvYmotJChDT05GSUdfSVBfRENDUCkgKz0gZGNjcC5vIGRjY3BfaXB2NC5vCiAKLWRjY3AteSA6PSBjY2lkLm8gaW5wdXQubyBpcHY0Lm8gbWluaXNvY2tzLm8gb3B0aW9ucy5vIG91dHB1dC5vIHByb3RvLm8gXAotCSAgdGltZXIubworZGNjcC15IDo9IGNjaWQubyBmZWF0Lm8gaW5wdXQubyBtaW5pc29ja3MubyBvcHRpb25zLm8gb3V0cHV0Lm8gcHJvdG8ubyB0aW1lci5vCisKK2RjY3BfaXB2NC15IDo9IGlwdjQubwogCiBkY2NwLSQoQ09ORklHX0lQX0RDQ1BfQUNLVkVDKSArPSBhY2t2ZWMubwogCiBvYmotJChDT05GSUdfSU5FVF9EQ0NQX0RJQUcpICs9IGRjY3BfZGlhZy5vCiAKK2RjY3AtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGwubworCiBkY2NwX2RpYWcteSA6PSBkaWFnLm8KIAogb2JqLXkgKz0gY2NpZHMvCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuYyBiL25ldC9kY2NwL2Fja3ZlYy5jCmluZGV4IDJjNzdkYWYuLmI1OTgxZTUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5jCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5jCkBAIC0xMywzNiArMTMsODMgQEAKICNpbmNsdWRlICJkY2NwLmgiCiAKICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAorc3RhdGljIGttZW1fY2FjaGVfdCAqZGNjcF9hY2t2ZWNfc2xhYjsKK3N0YXRpYyBrbWVtX2NhY2hlX3QgKmRjY3BfYWNrdmVjX3JlY29yZF9zbGFiOworCitzdGF0aWMgc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqZGNjcF9hY2t2ZWNfcmVjb3JkX25ldyh2b2lkKQoreworCXN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmF2ciA9CisJCQlrbWVtX2NhY2hlX2FsbG9jKGRjY3BfYWNrdmVjX3JlY29yZF9zbGFiLCBHRlBfQVRPTUlDKTsKKworCWlmIChhdnIgIT0gTlVMTCkKKwkJSU5JVF9MSVNUX0hFQUQoJmF2ci0+ZGNjcGF2cl9ub2RlKTsKKworCXJldHVybiBhdnI7Cit9CisKK3N0YXRpYyB2b2lkIGRjY3BfYWNrdmVjX3JlY29yZF9kZWxldGUoc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyKQoreworCWlmICh1bmxpa2VseShhdnIgPT0gTlVMTCkpCisJCXJldHVybjsKKwkvKiBDaGVjayBpZiBkZWxldGluZyBhIGxpbmtlZCByZWNvcmQgKi8KKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZhdnItPmRjY3BhdnJfbm9kZSkpOworCWttZW1fY2FjaGVfZnJlZShkY2NwX2Fja3ZlY19yZWNvcmRfc2xhYiwgYXZyKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfaW5zZXJ0X2F2cihzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCSAgIHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmF2cikKK3sKKwkvKgorCSAqIEFWUnMgYXJlIHNvcnRlZCBieSBzZXFuby4gU2luY2Ugd2UgYXJlIHNlbmRpbmcgdGhlbSBpbiBvcmRlciwgd2UKKwkgKiBqdXN0IGFkZCB0aGUgQVZSIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LgorCSAqIC1zb3Jiby4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmF2LT5kY2NwYXZfcmVjb3JkcykpIHsKKwkJY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqaGVhZCA9CisJCQkJCWxpc3RfZW50cnkoYXYtPmRjY3Bhdl9yZWNvcmRzLm5leHQsCisJCQkJCQkgICBzdHJ1Y3QgZGNjcF9hY2t2ZWNfcmVjb3JkLAorCQkJCQkJICAgZGNjcGF2cl9ub2RlKTsKKwkJQlVHX09OKGJlZm9yZTQ4KGF2ci0+ZGNjcGF2cl9hY2tfc2Vxbm8sCisJCQkJaGVhZC0+ZGNjcGF2cl9hY2tfc2Vxbm8pKTsKKwl9CisKKwlsaXN0X2FkZCgmYXZyLT5kY2NwYXZyX25vZGUsICZhdi0+ZGNjcGF2X3JlY29yZHMpOworfQorCiBpbnQgZGNjcF9pbnNlcnRfb3B0aW9uX2Fja3ZlYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKyNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRworCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9IGRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPworCQkJCSJDTElFTlQgdHg6ICIgOiAic2VydmVyIHR4OiAiOworI2VuZGlmCiAJc3RydWN0IGRjY3BfYWNrdmVjICphdiA9IGRwLT5kY2Nwc19oY19yeF9hY2t2ZWM7CiAJaW50IGxlbiA9IGF2LT5kY2NwYXZfdmVjX2xlbiArIDI7CiAJc3RydWN0IHRpbWV2YWwgbm93OwogCXUzMiBlbGFwc2VkX3RpbWU7CiAJdW5zaWduZWQgY2hhciAqdG8sICpmcm9tOwotCi0JZGNjcF90aW1lc3RhbXAoc2ssICZub3cpOwotCWVsYXBzZWRfdGltZSA9IHRpbWV2YWxfZGVsdGEoJm5vdywgJmF2LT5kY2NwYXZfdGltZSkgLyAxMDsKLQotCWlmIChlbGFwc2VkX3RpbWUgIT0gMCkKLQkJZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShzaywgc2tiLCBlbGFwc2VkX3RpbWUpOworCXN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmF2cjsKIAogCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICsgbGVuID4gRENDUF9NQVhfT1BUX0xFTikKIAkJcmV0dXJuIC0xOwogCi0JLyoKLQkgKiBYWFg6IG5vdyB3ZSBoYXZlIGp1c3Qgb25lIGFjayB2ZWN0b3Igc2VudCByZWNvcmQsIHNvCi0JICogd2UgaGF2ZSB0byB3YWl0IGZvciBpdCB0byBiZSBjbGVhcmVkLgotCSAqCi0JICogT2YgY291cnNlIHRoaXMgaXMgbm90IGFjY2VwdGFibGUsIGJ1dCB0aGlzIGlzIGp1c3QgZm9yCi0JICogYmFzaWMgdGVzdGluZyBub3cuCi0JICovCi0JaWYgKGF2LT5kY2NwYXZfYWNrX3NlcW5vICE9IERDQ1BfTUFYX1NFUU5PICsgMSkKKwlkY2NwX3RpbWVzdGFtcChzaywgJm5vdyk7CisJZWxhcHNlZF90aW1lID0gdGltZXZhbF9kZWx0YSgmbm93LCAmYXYtPmRjY3Bhdl90aW1lKSAvIDEwOworCisJaWYgKGVsYXBzZWRfdGltZSAhPSAwICYmCisJICAgIGRjY3BfaW5zZXJ0X29wdGlvbl9lbGFwc2VkX3RpbWUoc2ssIHNrYiwgZWxhcHNlZF90aW1lKSkKKwkJcmV0dXJuIC0xOworCisJYXZyID0gZGNjcF9hY2t2ZWNfcmVjb3JkX25ldygpOworCWlmIChhdnIgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiArPSBsZW47CkBAIC01NSw4ICsxMDIsOCBAQAogCWZyb20gPSBhdi0+ZGNjcGF2X2J1ZiArIGF2LT5kY2NwYXZfYnVmX2hlYWQ7CiAKIAkvKiBDaGVjayBpZiBidWZfaGVhZCB3cmFwcyAqLwotCWlmICgoaW50KWF2LT5kY2NwYXZfYnVmX2hlYWQgKyBsZW4gPiBhdi0+ZGNjcGF2X3ZlY19sZW4pIHsKLQkJY29uc3QgdTMyIHRhaWxzaXplID0gYXYtPmRjY3Bhdl92ZWNfbGVuIC0gYXYtPmRjY3Bhdl9idWZfaGVhZDsKKwlpZiAoKGludClhdi0+ZGNjcGF2X2J1Zl9oZWFkICsgbGVuID4gRENDUF9NQVhfQUNLVkVDX0xFTikgeworCQljb25zdCB1MzIgdGFpbHNpemUgPSBEQ0NQX01BWF9BQ0tWRUNfTEVOIC0gYXYtPmRjY3Bhdl9idWZfaGVhZDsKIAogCQltZW1jcHkodG8sIGZyb20sIHRhaWxzaXplKTsKIAkJdG8gICArPSB0YWlsc2l6ZTsKQEAgLTczLDQ1ICsxMjAsMzcgQEAKIAkgKglzZXF1ZW5jZSBudW1iZXIgaXQgdXNlZCBmb3IgdGhlIGFjayBwYWNrZXQ7IGFja19wdHIgd2lsbCBlcXVhbAogCSAqCWJ1Zl9oZWFkOyBhY2tfYWNrbm8gd2lsbCBlcXVhbCBidWZfYWNrbm87IGFuZCBhY2tfbm9uY2Ugd2lsbAogCSAqCWVxdWFsIGJ1Zl9ub25jZS4KLQkgKgotCSAqIFRoaXMgaW1wbGVtZW50aW9uIHVzZXMganVzdCBvbmUgYWNrIHJlY29yZCBmb3Igbm93LgogCSAqLwotCWF2LT5kY2NwYXZfYWNrX3NlcW5vID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxOwotCWF2LT5kY2NwYXZfYWNrX3B0ciAgID0gYXYtPmRjY3Bhdl9idWZfaGVhZDsKLQlhdi0+ZGNjcGF2X2Fja19hY2tubyA9IGF2LT5kY2NwYXZfYnVmX2Fja25vOwotCWF2LT5kY2NwYXZfYWNrX25vbmNlID0gYXYtPmRjY3Bhdl9idWZfbm9uY2U7Ci0JYXYtPmRjY3Bhdl9zZW50X2xlbiAgPSBhdi0+ZGNjcGF2X3ZlY19sZW47CisJYXZyLT5kY2NwYXZyX2Fja19zZXFubyA9IERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcTsKKwlhdnItPmRjY3BhdnJfYWNrX3B0ciAgID0gYXYtPmRjY3Bhdl9idWZfaGVhZDsKKwlhdnItPmRjY3BhdnJfYWNrX2Fja25vID0gYXYtPmRjY3Bhdl9idWZfYWNrbm87CisJYXZyLT5kY2NwYXZyX2Fja19ub25jZSA9IGF2LT5kY2NwYXZfYnVmX25vbmNlOworCWF2ci0+ZGNjcGF2cl9zZW50X2xlbiAgPSBhdi0+ZGNjcGF2X3ZlY19sZW47CisKKwlkY2NwX2Fja3ZlY19pbnNlcnRfYXZyKGF2LCBhdnIpOwogCiAJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgVmVjdG9yIDAsIGxlbj0lZCwgYWNrX3NlcW5vPSVsbHUsICIKIAkJICAgICAgImFja19hY2tubz0lbGx1XG4iLAotCQkgICAgICBkZWJ1Z19wcmVmaXgsIGF2LT5kY2NwYXZfc2VudF9sZW4sCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXYtPmRjY3Bhdl9hY2tfc2Vxbm8sCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXYtPmRjY3Bhdl9hY2tfYWNrbm8pOwotCXJldHVybiAtMTsKKwkJICAgICAgZGVidWdfcHJlZml4LCBhdnItPmRjY3BhdnJfc2VudF9sZW4sCisJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXZyLT5kY2NwYXZyX2Fja19zZXFubywKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdnItPmRjY3BhdnJfYWNrX2Fja25vKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyhjb25zdCB1bnNpZ25lZCBpbnQgbGVuLAotCQkJCSAgICAgIGNvbnN0IGdmcF90IHByaW9yaXR5KQorc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyhjb25zdCBnZnBfdCBwcmlvcml0eSkKIHsKLQlzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2OworCXN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYgPSBrbWVtX2NhY2hlX2FsbG9jKGRjY3BfYWNrdmVjX3NsYWIsIHByaW9yaXR5KTsKIAotCUJVR19PTihsZW4gPT0gMCk7Ci0KLQlpZiAobGVuID4gRENDUF9NQVhfQUNLVkVDX0xFTikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlhdiA9IGttYWxsb2Moc2l6ZW9mKCphdikgKyBsZW4sIHByaW9yaXR5KTsKIAlpZiAoYXYgIT0gTlVMTCkgewotCQlhdi0+ZGNjcGF2X2J1Zl9sZW4JPSBsZW47CiAJCWF2LT5kY2NwYXZfYnVmX2hlYWQJPQotCQkJYXYtPmRjY3Bhdl9idWZfdGFpbCA9IGF2LT5kY2NwYXZfYnVmX2xlbiAtIDE7Ci0JCWF2LT5kY2NwYXZfYnVmX2Fja25vCT0KLQkJCWF2LT5kY2NwYXZfYWNrX2Fja25vID0gYXYtPmRjY3Bhdl9hY2tfc2Vxbm8gPSB+MExMVTsKKwkJCWF2LT5kY2NwYXZfYnVmX3RhaWwgPSBEQ0NQX01BWF9BQ0tWRUNfTEVOIC0gMTsKKwkJYXYtPmRjY3Bhdl9idWZfYWNrbm8JPSBEQ0NQX01BWF9TRVFOTyArIDE7CiAJCWF2LT5kY2NwYXZfYnVmX25vbmNlID0gYXYtPmRjY3Bhdl9idWZfbm9uY2UgPSAwOwogCQlhdi0+ZGNjcGF2X2Fja19wdHIJPSAwOwogCQlhdi0+ZGNjcGF2X3RpbWUudHZfc2VjCT0gMDsKIAkJYXYtPmRjY3Bhdl90aW1lLnR2X3VzZWMJPSAwOwogCQlhdi0+ZGNjcGF2X3NlbnRfbGVuCT0gYXYtPmRjY3Bhdl92ZWNfbGVuID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJmF2LT5kY2NwYXZfcmVjb3Jkcyk7CiAJfQogCiAJcmV0dXJuIGF2OwpAQCAtMTE5LDcgKzE1OCwyMCBAQAogCiB2b2lkIGRjY3BfYWNrdmVjX2ZyZWUoc3RydWN0IGRjY3BfYWNrdmVjICphdikKIHsKLQlrZnJlZShhdik7CisJaWYgKHVubGlrZWx5KGF2ID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlpZiAoIWxpc3RfZW1wdHkoJmF2LT5kY2NwYXZfcmVjb3JkcykpIHsKKwkJc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyLCAqbmV4dDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYXZyLCBuZXh0LCAmYXYtPmRjY3Bhdl9yZWNvcmRzLAorCQkJCQkgZGNjcGF2cl9ub2RlKSB7CisJCQlsaXN0X2RlbF9pbml0KCZhdnItPmRjY3BhdnJfbm9kZSk7CisJCQlkY2NwX2Fja3ZlY19yZWNvcmRfZGVsZXRlKGF2cik7CisJCX0KKwl9CisKKwlrbWVtX2NhY2hlX2ZyZWUoZGNjcF9hY2t2ZWNfc2xhYiwgYXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHU4IGRjY3BfYWNrdmVjX3N0YXRlKGNvbnN0IHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCkBAIC0xNDYsNyArMTk4LDcgQEAKIAl1bnNpZ25lZCBpbnQgZ2FwOwogCWxvbmcgbmV3X2hlYWQ7CiAKLQlpZiAoYXYtPmRjY3Bhdl92ZWNfbGVuICsgcGFja2V0cyA+IGF2LT5kY2NwYXZfYnVmX2xlbikKKwlpZiAoYXYtPmRjY3Bhdl92ZWNfbGVuICsgcGFja2V0cyA+IERDQ1BfTUFYX0FDS1ZFQ19MRU4pCiAJCXJldHVybiAtRU5PQlVGUzsKIAogCWdhcAkgPSBwYWNrZXRzIC0gMTsKQEAgLTE1OCw3ICsyMTAsNyBAQAogCQkJICAgICAgIGdhcCArIG5ld19oZWFkICsgMSk7CiAJCQlnYXAgPSAtbmV3X2hlYWQ7CiAJCX0KLQkJbmV3X2hlYWQgKz0gYXYtPmRjY3Bhdl9idWZfbGVuOworCQluZXdfaGVhZCArPSBEQ0NQX01BWF9BQ0tWRUNfTEVOOwogCX0gCiAKIAlhdi0+ZGNjcGF2X2J1Zl9oZWFkID0gbmV3X2hlYWQ7CkBAIC0yNTEsNyArMzAzLDcgQEAKIAkJCQlnb3RvIG91dF9kdXBsaWNhdGU7CiAKIAkJCWRlbHRhIC09IGxlbiArIDE7Ci0JCQlpZiAoKytpbmRleCA9PSBhdi0+ZGNjcGF2X2J1Zl9sZW4pCisJCQlpZiAoKytpbmRleCA9PSBEQ0NQX01BWF9BQ0tWRUNfTEVOKQogCQkJCWluZGV4ID0gMDsKIAkJfQogCX0KQEAgLTI1OSw3ICszMTEsNiBAQAogCWF2LT5kY2NwYXZfYnVmX2Fja25vID0gYWNrbm87CiAJZGNjcF90aW1lc3RhbXAoc2ssICZhdi0+ZGNjcGF2X3RpbWUpOwogb3V0OgotCWRjY3BfcHJfZGVidWcoIiIpOwogCXJldHVybiAwOwogCiBvdXRfZHVwbGljYXRlOgpAQCAtMjk3LDQ0ICszNDgsNTAgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkY2NwX2Fja3ZlY190aHJvd19hd2F5X2Fja19yZWNvcmQoc3RydWN0IGRjY3BfYWNrdmVjICphdikKK3N0YXRpYyB2b2lkIGRjY3BfYWNrdmVjX3Rocm93X3JlY29yZChzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAorCQkJCSAgICAgc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyKQogewotCS8qCi0JICogQXMgd2UncmUga2VlcGluZyB0cmFjayBvZiB0aGUgYWNrIHZlY3RvciBzaXplIChkY2NwYXZfdmVjX2xlbikgYW5kCi0JICogdGhlIHNlbnQgYWNrIHZlY3RvciBzaXplIChkY2NwYXZfc2VudF9sZW4pIHdlIGRvbid0IG5lZWQKLQkgKiBkY2NwYXZfYnVmX3RhaWwgYXQgYWxsLCBidXQga2VlcCB0aGlzIGNvZGUgaGVyZSBhcyBpbiB0aGUgZnV0dXJlCi0JICogd2UnbGwgaW1wbGVtZW50IGEgdmVjdG9yIG9mIGFjayByZWNvcmRzLCBhcyBzdWdnZXN0ZWQgaW4KLQkgKiBkcmFmdC1pZXRmLWRjY3Atc3BlYy0xMS50eHQgQXBwZW5kaXggQS4gLWFjbWUKLQkgKi8KLSNpZiAwCi0JdTMyIG5ld19idWZfdGFpbCA9IGF2LT5kY2NwYXZfYWNrX3B0ciArIDE7Ci0JaWYgKG5ld19idWZfdGFpbCA+PSBhdi0+ZGNjcGF2X3ZlY19sZW4pCi0JCW5ld19idWZfdGFpbCAtPSBhdi0+ZGNjcGF2X3ZlY19sZW47Ci0JYXYtPmRjY3Bhdl9idWZfdGFpbCA9IG5ld19idWZfdGFpbDsKLSNlbmRpZgotCWF2LT5kY2NwYXZfdmVjX2xlbiAtPSBhdi0+ZGNjcGF2X3NlbnRfbGVuOworCXN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKm5leHQ7CisKKwlhdi0+ZGNjcGF2X2J1Zl90YWlsID0gYXZyLT5kY2NwYXZyX2Fja19wdHIgLSAxOworCWlmIChhdi0+ZGNjcGF2X2J1Zl90YWlsID09IDApCisJCWF2LT5kY2NwYXZfYnVmX3RhaWwgPSBEQ0NQX01BWF9BQ0tWRUNfTEVOIC0gMTsKKworCWF2LT5kY2NwYXZfdmVjX2xlbiAtPSBhdnItPmRjY3BhdnJfc2VudF9sZW47CisKKwkvKiBmcmVlIHJlY29yZHMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbShhdnIsIG5leHQsICZhdi0+ZGNjcGF2X3JlY29yZHMsCisJCQkJICAgICAgZGNjcGF2cl9ub2RlKSB7CisJCWxpc3RfZGVsX2luaXQoJmF2ci0+ZGNjcGF2cl9ub2RlKTsKKwkJZGNjcF9hY2t2ZWNfcmVjb3JkX2RlbGV0ZShhdnIpOworCX0KIH0KIAogdm9pZCBkY2NwX2Fja3ZlY19jaGVja19yY3ZfYWNrbm8oc3RydWN0IGRjY3BfYWNrdmVjICphdiwgc3RydWN0IHNvY2sgKnNrLAogCQkJCSBjb25zdCB1NjQgYWNrbm8pCiB7Ci0JLyogQ2hlY2sgaWYgd2UgYWN0dWFsbHkgc2VudCBhbiBBQ0sgdmVjdG9yICovCi0JaWYgKGF2LT5kY2NwYXZfYWNrX3NlcW5vID09IERDQ1BfTUFYX1NFUU5PICsgMSkKLQkJcmV0dXJuOworCXN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmF2cjsKIAotCWlmIChhY2tubyA9PSBhdi0+ZGNjcGF2X2Fja19zZXFubykgeworCS8qCisJICogSWYgd2UgdHJhdmVyc2UgYmFja3dhcmRzLCBpdCBzaG91bGQgYmUgZmFzdGVyIHdoZW4gd2UgaGF2ZSBsYXJnZQorCSAqIHdpbmRvd3MuIFdlIHdpbGwgYmUgcmVjZWl2aW5nIEFDS3MgZm9yIHN0dWZmIHdlIHNlbnQgYSB3aGlsZSBiYWNrCisJICogLXNvcmJvLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdnIsICZhdi0+ZGNjcGF2X3JlY29yZHMsIGRjY3BhdnJfbm9kZSkgeworCQlpZiAoYWNrbm8gPT0gYXZyLT5kY2NwYXZyX2Fja19zZXFubykgewogI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi0JCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9IGRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPwotCQkJCQkiQ0xJRU5UIHJ4IGFjazogIiA6ICJzZXJ2ZXIgcnggYWNrOiAiOworCQkJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKwkJCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9IGRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPworCQkJCQkJIkNMSUVOVCByeCBhY2s6ICIgOiAic2VydmVyIHJ4IGFjazogIjsKICNlbmRpZgotCQlkY2NwX3ByX2RlYnVnKCIlc0FDSyBwYWNrZXQgMCwgbGVuPSVkLCBhY2tfc2Vxbm89JWxsdSwgIgotCQkJICAgICAgImFja19hY2tubz0lbGx1LCBBQ0tFRCFcbiIsCi0JCQkgICAgICBkZWJ1Z19wcmVmaXgsIDEsCi0JCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWF2LT5kY2NwYXZfYWNrX3NlcW5vLAotCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdi0+ZGNjcGF2X2Fja19hY2tubyk7Ci0JCWRjY3BfYWNrdmVjX3Rocm93X2F3YXlfYWNrX3JlY29yZChhdik7Ci0JCWF2LT5kY2NwYXZfYWNrX3NlcW5vID0gRENDUF9NQVhfU0VRTk8gKyAxOworCQkJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgcGFja2V0IDAsIGxlbj0lZCwgYWNrX3NlcW5vPSVsbHUsICIKKwkJCQkgICAgICAiYWNrX2Fja25vPSVsbHUsIEFDS0VEIVxuIiwKKwkJCQkgICAgICBkZWJ1Z19wcmVmaXgsIDEsCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdnItPmRjY3BhdnJfYWNrX3NlcW5vLAorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXZyLT5kY2NwYXZyX2Fja19hY2tubyk7CisJCQlkY2NwX2Fja3ZlY190aHJvd19yZWNvcmQoYXYsIGF2cik7CisJCQlicmVhazsKKwkJfQogCX0KIH0KIApAQCAtMzQ0LDI4ICs0MDEsMjAgQEAKIAkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZlY3RvcikKIHsKIAl1bnNpZ25lZCBjaGFyIGk7CisJc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCAqYXZyOwogCiAJLyogQ2hlY2sgaWYgd2UgYWN0dWFsbHkgc2VudCBhbiBBQ0sgdmVjdG9yICovCi0JaWYgKGF2LT5kY2NwYXZfYWNrX3NlcW5vID09IERDQ1BfTUFYX1NFUU5PICsgMSkKKwlpZiAobGlzdF9lbXB0eSgmYXYtPmRjY3Bhdl9yZWNvcmRzKSkKIAkJcmV0dXJuOwotCS8qCi0JICogV2UncmUgaW4gdGhlIHJlY2VpdmVyIGhhbGYgY29ubmVjdGlvbiwgc28gaWYgdGhlIHJlY2VpdmVkIGFuIEFDSwotCSAqIHZlY3RvciBhY2tubyAoZS5nLiA1MCkgYmVmb3JlIGRjY3Bhdl9hY2tfc2Vxbm8gKGUuZy4gNTIpLCB3ZSdyZQotCSAqIG5vdCBpbnRlcmVzdGVkLgotCSAqCi0JICogRXh0cmEgZXhwbGFuYXRpb24gd2l0aCBleGFtcGxlOgotCSAqIAotCSAqIGlmIHdlIHJlY2VpdmVkIGFuIEFDSyB2ZWN0b3Igd2l0aCBhY2tubyA1MCwgaXQgY2FuIG9ubHkgYmUgYWNraW5nCi0JICogNTAsIDQ5LCA0OCwgZXRjLCBub3QgNTIgKHRoZSBzZXFubyBmb3IgdGhlIEFDSyB2ZWN0b3Igd2Ugc2VudCkuCi0JICovCi0JLyogZGNjcF9wcl9kZWJ1ZygiaXMgJWxsdSA8ICVsbHU/ICIsIGFja25vLCBhdi0+ZGNjcGF2X2Fja19zZXFubyk7ICovCi0JaWYgKGJlZm9yZTQ4KGFja25vLCBhdi0+ZGNjcGF2X2Fja19zZXFubykpIHsKLQkJLyogZGNjcF9wcl9kZWJ1Z19jYXQoInllc1xuIik7ICovCi0JCXJldHVybjsKLQl9Ci0JLyogZGNjcF9wcl9kZWJ1Z19jYXQoIm5vXG4iKTsgKi8KIAogCWkgPSBsZW47CisJLyoKKwkgKiBYWFgKKwkgKiBJIHRoaW5rIGl0IG1pZ2h0IGJlIG1vcmUgZWZmaWNpZW50IHRvIHdvcmsgYmFja3dhcmRzLiBTZWUgY29tbWVudCBvbgorCSAqIHJjdl9hY2tuby4gLXNvcmJvLgorCSAqLworCWF2ciA9IGxpc3RfZW50cnkoYXYtPmRjY3Bhdl9yZWNvcmRzLm5leHQsIHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQsCisJCQkgZGNjcGF2cl9ub2RlKTsKIAl3aGlsZSAoaS0tKSB7CiAJCWNvbnN0IHU4IHJsID0gKnZlY3RvciAmIERDQ1BfQUNLVkVDX0xFTl9NQVNLOwogCQl1NjQgYWNrbm9fZW5kX3JsOwpAQCAtMzczLDE0ICs0MjIsMjAgQEAKIAkJZGNjcF9zZXRfc2Vxbm8oJmFja25vX2VuZF9ybCwgYWNrbm8gLSBybCk7CiAKIAkJLyoKLQkJICogZGNjcF9wcl9kZWJ1ZygiaXMgJWxsdSA8PSAlbGx1IDw9ICVsbHU/ICIsIGFja25vX2VuZF9ybCwKLQkJICogYXYtPmRjY3Bhdl9hY2tfc2Vxbm8sIGFja25vKTsKKwkJICogSWYgb3VyIEFWUiBzZXF1ZW5jZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSBhY2ssIGdvCisJCSAqIGZvcndhcmQgaW4gdGhlIEFWUiBsaXN0IHVudGlsIGl0IGlzIG5vdCBzby4KIAkJICovCi0JCWlmIChiZXR3ZWVuNDgoYXYtPmRjY3Bhdl9hY2tfc2Vxbm8sIGFja25vX2VuZF9ybCwgYWNrbm8pKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShhdnIsICZhdi0+ZGNjcGF2X3JlY29yZHMsCisJCQkJCSBkY2NwYXZyX25vZGUpIHsKKwkJCWlmICghYWZ0ZXI0OChhdnItPmRjY3BhdnJfYWNrX3NlcW5vLCBhY2tubykpCisJCQkJZ290byBmb3VuZDsKKwkJfQorCQkvKiBFbmQgb2YgdGhlIGRjY3Bhdl9yZWNvcmRzIGxpc3QsIG5vdCBmb3VuZCwgZXhpdCAqLworCQlicmVhazsKK2ZvdW5kOgorCQlpZiAoYmV0d2VlbjQ4KGF2ci0+ZGNjcGF2cl9hY2tfc2Vxbm8sIGFja25vX2VuZF9ybCwgYWNrbm8pKSB7CiAJCQljb25zdCB1OCBzdGF0ZSA9ICgqdmVjdG9yICYKIAkJCQkJICBEQ0NQX0FDS1ZFQ19TVEFURV9NQVNLKSA+PiA2OwotCQkJLyogZGNjcF9wcl9kZWJ1Z19jYXQoInllc1xuIik7ICovCi0KIAkJCWlmIChzdGF0ZSAhPSBEQ0NQX0FDS1ZFQ19TVEFURV9OT1RfUkVDRUlWRUQpIHsKICNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwogCQkJCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CkBAIC0zOTMsMTkgKzQ0OCwxNiBAQAogCQkJCQkgICAgICAiQUNLRUQhXG4iLAogCQkJCQkgICAgICBkZWJ1Z19wcmVmaXgsIGxlbiwKIAkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQkJICAgICAgYXYtPmRjY3Bhdl9hY2tfc2Vxbm8sCisJCQkJCSAgICAgIGF2ci0+ZGNjcGF2cl9hY2tfc2Vxbm8sCiAJCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJCSAgICAgIGF2LT5kY2NwYXZfYWNrX2Fja25vKTsKLQkJCQlkY2NwX2Fja3ZlY190aHJvd19hd2F5X2Fja19yZWNvcmQoYXYpOworCQkJCQkgICAgICBhdnItPmRjY3BhdnJfYWNrX2Fja25vKTsKKwkJCQlkY2NwX2Fja3ZlY190aHJvd19yZWNvcmQoYXYsIGF2cik7CiAJCQl9CiAJCQkvKgotCQkJICogSWYgZGNjcGF2X2Fja19zZXFubyB3YXMgbm90IHJlY2VpdmVkLCBubyBwcm9ibGVtCi0JCQkgKiB3ZSdsbCBzZW5kIGFub3RoZXIgQUNLIHZlY3Rvci4KKwkJCSAqIElmIGl0IHdhc24ndCByZWNlaXZlZCwgY29udGludWUgc2Nhbm5pbmcuLi4gd2UgbWlnaHQKKwkJCSAqIGZpbmQgYW5vdGhlciBvbmUuCiAJCQkgKi8KLQkJCWF2LT5kY2NwYXZfYWNrX3NlcW5vID0gRENDUF9NQVhfU0VRTk8gKyAxOwotCQkJYnJlYWs7CiAJCX0KLQkJLyogZGNjcF9wcl9kZWJ1Z19jYXQoIm5vXG4iKTsgKi8KIAogCQlkY2NwX3NldF9zZXFubygmYWNrbm8sIGFja25vX2VuZF9ybCAtIDEpOwogCQkrK3ZlY3RvcjsKQEAgLTQyNCwzICs0NzYsNDMgQEAKIAkJCQkgICAgICAgIGxlbiwgdmFsdWUpOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgY2hhciBkY2NwX2Fja3ZlY19zbGFiX21zZ1tdIF9faW5pdGRhdGEgPQorCUtFUk5fQ1JJVCAiRENDUDogVW5hYmxlIHRvIGNyZWF0ZSBhY2sgdmVjdG9ycyBzbGFiIGNhY2hlc1xuIjsKKworaW50IF9faW5pdCBkY2NwX2Fja3ZlY19pbml0KHZvaWQpCit7CisJZGNjcF9hY2t2ZWNfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJkY2NwX2Fja3ZlYyIsCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2Fja3ZlYyksIDAsCisJCQkJCSAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMLCBOVUxMKTsKKwlpZiAoZGNjcF9hY2t2ZWNfc2xhYiA9PSBOVUxMKQorCQlnb3RvIG91dF9lcnI7CisKKwlkY2NwX2Fja3ZlY19yZWNvcmRfc2xhYiA9CisJCQlrbWVtX2NhY2hlX2NyZWF0ZSgiZGNjcF9hY2t2ZWNfcmVjb3JkIiwKKwkJCQkJICBzaXplb2Yoc3RydWN0IGRjY3BfYWNrdmVjX3JlY29yZCksCisJCQkJCSAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMLCBOVUxMKTsKKwlpZiAoZGNjcF9hY2t2ZWNfcmVjb3JkX3NsYWIgPT0gTlVMTCkKKwkJZ290byBvdXRfZGVzdHJveV9zbGFiOworCisJcmV0dXJuIDA7CisKK291dF9kZXN0cm95X3NsYWI6CisJa21lbV9jYWNoZV9kZXN0cm95KGRjY3BfYWNrdmVjX3NsYWIpOworCWRjY3BfYWNrdmVjX3NsYWIgPSBOVUxMOworb3V0X2VycjoKKwlwcmludGsoZGNjcF9hY2t2ZWNfc2xhYl9tc2cpOworCXJldHVybiAtRU5PQlVGUzsKK30KKwordm9pZCBkY2NwX2Fja3ZlY19leGl0KHZvaWQpCit7CisJaWYgKGRjY3BfYWNrdmVjX3NsYWIgIT0gTlVMTCkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZGNjcF9hY2t2ZWNfc2xhYik7CisJCWRjY3BfYWNrdmVjX3NsYWIgPSBOVUxMOworCX0KKwlpZiAoZGNjcF9hY2t2ZWNfcmVjb3JkX3NsYWIgIT0gTlVMTCkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZGNjcF9hY2t2ZWNfcmVjb3JkX3NsYWIpOworCQlkY2NwX2Fja3ZlY19yZWNvcmRfc2xhYiA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmggYi9uZXQvZGNjcC9hY2t2ZWMuaAppbmRleCBmN2RmYjVmLi5lYzdhODliIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuaAorKysgYi9uZXQvZGNjcC9hY2t2ZWMuaApAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKQEAgLTQyLDM5ICs0Myw1NyBAQAogICogQWNrIFZlY3RvcnMgaXQgaGFzIHJlY2VudGx5IHNlbnQuIEZvciBlYWNoIHBhY2tldCBzZW50IGNhcnJ5aW5nIGFuCiAgKiBBY2sgVmVjdG9yLCBpdCByZW1lbWJlcnMgZm91ciB2YXJpYWJsZXM6CiAgKgotICogQGRjY3Bhdl9hY2tfc2Vxbm8gLSB0aGUgU2VxdWVuY2UgTnVtYmVyIHVzZWQgZm9yIHRoZSBwYWNrZXQKLSAqIAkJICAgICAgIChIQy1SZWNlaXZlciBzZXFubykKICAqIEBkY2NwYXZfYWNrX3B0ciAtIHRoZSB2YWx1ZSBvZiBidWZfaGVhZCBhdCB0aGUgdGltZSBvZiBhY2tub3dsZWRnZW1lbnQuCi0gKiBAZGNjcGF2X2Fja19hY2tubyAtIHRoZSBBY2tub3dsZWRnZW1lbnQgTnVtYmVyIHVzZWQgZm9yIHRoZSBwYWNrZXQKLSAqIAkJICAgICAgIChIQy1TZW5kZXIgc2Vxbm8pCisgKiBAZGNjcGF2X3JlY29yZHMgLSBsaXN0IG9mIGRjY3BfYWNrdmVjX3JlY29yZAogICogQGRjY3Bhdl9hY2tfbm9uY2UgLSB0aGUgb25lLWJpdCBzdW0gb2YgdGhlIEVDTiBOb25jZXMgZm9yIGFsbCBTdGF0ZSAwLgogICoKLSAqIEBkY2NwYXZfYnVmX2xlbgktIGNpcmN1bGFyIGJ1ZmZlciBsZW5ndGgKICAqIEBkY2NwYXZfdGltZQkJLSB0aGUgdGltZSBpbiB1c2VjcwogICogQGRjY3Bhdl9idWYgLSBjaXJjdWxhciBidWZmZXIgb2YgYWNrbm93bGVkZ2VhYmxlIHBhY2tldHMKICAqLwogc3RydWN0IGRjY3BfYWNrdmVjIHsKIAl1NjQJCWRjY3Bhdl9idWZfYWNrbm87Ci0JdTY0CQlkY2NwYXZfYWNrX3NlcW5vOwotCXU2NAkJZGNjcGF2X2Fja19hY2tubzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRjY3Bhdl9yZWNvcmRzOwogCXN0cnVjdCB0aW1ldmFsCWRjY3Bhdl90aW1lOwogCXU4CQlkY2NwYXZfYnVmX2hlYWQ7CiAJdTgJCWRjY3Bhdl9idWZfdGFpbDsKIAl1OAkJZGNjcGF2X2Fja19wdHI7CiAJdTgJCWRjY3Bhdl9zZW50X2xlbjsKIAl1OAkJZGNjcGF2X3ZlY19sZW47Ci0JdTgJCWRjY3Bhdl9idWZfbGVuOwogCXU4CQlkY2NwYXZfYnVmX25vbmNlOwogCXU4CQlkY2NwYXZfYWNrX25vbmNlOwotCXU4CQlkY2NwYXZfYnVmWzBdOworCXU4CQlkY2NwYXZfYnVmW0RDQ1BfTUFYX0FDS1ZFQ19MRU5dOworfTsKKworLyoqIHN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgLSBhY2sgdmVjdG9yIHJlY29yZAorICoKKyAqIEFDSyB2ZWN0b3IgcmVjb3JkIGFzIGRlZmluZWQgaW4gQXBwZW5kaXggQSBvZiBzcGVjLgorICoKKyAqIFRoZSBsaXN0IGlzIHNvcnRlZCBieSBkY2NwYXZyX2Fja19zZXFubworICoKKyAqIEBkY2NwYXZyX25vZGUgLSBub2RlIGluIGRjY3Bhdl9yZWNvcmRzCisgKiBAZGNjcGF2cl9hY2tfc2Vxbm8gLSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIHBhY2tldCB0aGlzIHJlY29yZCB3YXMgc2VudCBvbgorICogQGRjY3BhdnJfYWNrX2Fja25vIC0gc2VxdWVuY2UgbnVtYmVyIGJlaW5nIGFja25vd2xlZGdlZAorICogQGRjY3BhdnJfYWNrX3B0ciAtIHBvaW50ZXIgaW50byBkY2NwYXZfYnVmIHdoZXJlIHRoaXMgcmVjb3JkIHN0YXJ0cworICogQGRjY3BhdnJfYWNrX25vbmNlIC0gZGNjcGF2X2Fja19ub25jZSBhdCB0aGUgdGltZSB0aGlzIHJlY29yZCB3YXMgc2VudAorICogQGRjY3BhdnJfc2VudF9sZW4gLSBsZW5naHQgb2YgdGhlIHJlY29yZCBpbiBkY2NwYXZfYnVmCisgKi8KK3N0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgeworCXN0cnVjdCBsaXN0X2hlYWQgZGNjcGF2cl9ub2RlOworCXU2NAkJIGRjY3BhdnJfYWNrX3NlcW5vOworCXU2NAkJIGRjY3BhdnJfYWNrX2Fja25vOworCXU4CQkgZGNjcGF2cl9hY2tfcHRyOworCXU4CQkgZGNjcGF2cl9hY2tfbm9uY2U7CisJdTgJCSBkY2NwYXZyX3NlbnRfbGVuOwogfTsKIAogc3RydWN0IHNvY2s7CiBzdHJ1Y3Qgc2tfYnVmZjsKIAogI2lmZGVmIENPTkZJR19JUF9EQ0NQX0FDS1ZFQwotZXh0ZXJuIHN0cnVjdCBkY2NwX2Fja3ZlYyAqZGNjcF9hY2t2ZWNfYWxsb2ModW5zaWduZWQgaW50IGxlbiwKLQkJCQkJICBjb25zdCBnZnBfdCBwcmlvcml0eSk7CitleHRlcm4gaW50IGRjY3BfYWNrdmVjX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBkY2NwX2Fja3ZlY19leGl0KHZvaWQpOworCitleHRlcm4gc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyhjb25zdCBnZnBfdCBwcmlvcml0eSk7CiBleHRlcm4gdm9pZCBkY2NwX2Fja3ZlY19mcmVlKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYpOwogCiBleHRlcm4gaW50IGRjY3BfYWNrdmVjX2FkZChzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LCBjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCkBAIC05Miw4ICsxMTEsMTYgQEAKIAlyZXR1cm4gYXYtPmRjY3Bhdl9zZW50X2xlbiAhPSBhdi0+ZGNjcGF2X3ZlY19sZW47CiB9CiAjZWxzZSAvKiBDT05GSUdfSVBfRENDUF9BQ0tWRUMgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfYWNrdmVjICpkY2NwX2Fja3ZlY19hbGxvYyh1bnNpZ25lZCBpbnQgbGVuLAotCQkJCQkgICBjb25zdCBnZnBfdCBwcmlvcml0eSkKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrdmVjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRjY3BfYWNrdmVjX2V4aXQodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmRjY3BfYWNrdmVjX2FsbG9jKGNvbnN0IGdmcF90IHByaW9yaXR5KQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZC5jIGIvbmV0L2RjY3AvY2NpZC5jCmluZGV4IDlkOGZjMGUuLmZmMDVlNTkgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWQuYworKysgYi9uZXQvZGNjcC9jY2lkLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2luY2x1ZGUgImNjaWQuaCIKIAotc3RhdGljIHN0cnVjdCBjY2lkICpjY2lkc1tDQ0lEX01BWF07CitzdGF0aWMgc3RydWN0IGNjaWRfb3BlcmF0aW9ucyAqY2NpZHNbQ0NJRF9NQVhdOwogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKIHN0YXRpYyBhdG9taWNfdCBjY2lkc19sb2NrY3QgPSBBVE9NSUNfSU5JVCgwKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2NpZHNfbG9jayk7CkBAIC01NSw4NSArNTUsMjAyIEBACiAjZGVmaW5lIGNjaWRzX3JlYWRfdW5sb2NrKCkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAotaW50IGNjaWRfcmVnaXN0ZXIoc3RydWN0IGNjaWQgKmNjaWQpCitzdGF0aWMga21lbV9jYWNoZV90ICpjY2lkX2ttZW1fY2FjaGVfY3JlYXRlKGludCBvYmpfc2l6ZSwgY29uc3QgY2hhciAqZm10LC4uLikKIHsKLQlpbnQgZXJyOworCWttZW1fY2FjaGVfdCAqc2xhYjsKKwljaGFyIHNsYWJfbmFtZV9mbXRbMzJdLCAqc2xhYl9uYW1lOworCXZhX2xpc3QgYXJnczsKIAotCWlmIChjY2lkLT5jY2lkX2luaXQgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnNucHJpbnRmKHNsYWJfbmFtZV9mbXQsIHNpemVvZihzbGFiX25hbWVfZm10KSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisKKwlzbGFiX25hbWUgPSBrc3RyZHVwKHNsYWJfbmFtZV9mbXQsIEdGUF9LRVJORUwpOworCWlmIChzbGFiX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKHNsYWJfbmFtZSwgc2l6ZW9mKHN0cnVjdCBjY2lkKSArIG9ial9zaXplLCAwLAorCQkJCSBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwsIE5VTEwpOworCWlmIChzbGFiID09IE5VTEwpCisJCWtmcmVlKHNsYWJfbmFtZSk7CisJcmV0dXJuIHNsYWI7Cit9CisKK3N0YXRpYyB2b2lkIGNjaWRfa21lbV9jYWNoZV9kZXN0cm95KGttZW1fY2FjaGVfdCAqc2xhYikKK3sKKwlpZiAoc2xhYiAhPSBOVUxMKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBrbWVtX2NhY2hlX25hbWUoc2xhYik7CisKKwkJa21lbV9jYWNoZV9kZXN0cm95KHNsYWIpOworCQlrZnJlZShuYW1lKTsKKwl9Cit9CisKK2ludCBjY2lkX3JlZ2lzdGVyKHN0cnVjdCBjY2lkX29wZXJhdGlvbnMgKmNjaWRfb3BzKQoreworCWludCBlcnIgPSAtRU5PQlVGUzsKKworCWNjaWRfb3BzLT5jY2lkX2hjX3J4X3NsYWIgPQorCQkJY2NpZF9rbWVtX2NhY2hlX2NyZWF0ZShjY2lkX29wcy0+Y2NpZF9oY19yeF9vYmpfc2l6ZSwKKwkJCQkJICAgICAgICIlc19oY19yeF9zb2NrIiwKKwkJCQkJICAgICAgIGNjaWRfb3BzLT5jY2lkX25hbWUpOworCWlmIChjY2lkX29wcy0+Y2NpZF9oY19yeF9zbGFiID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJY2NpZF9vcHMtPmNjaWRfaGNfdHhfc2xhYiA9CisJCQljY2lkX2ttZW1fY2FjaGVfY3JlYXRlKGNjaWRfb3BzLT5jY2lkX2hjX3R4X29ial9zaXplLAorCQkJCQkgICAgICAgIiVzX2hjX3R4X3NvY2siLAorCQkJCQkgICAgICAgY2NpZF9vcHMtPmNjaWRfbmFtZSk7CisJaWYgKGNjaWRfb3BzLT5jY2lkX2hjX3R4X3NsYWIgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZV9yeF9zbGFiOwogCiAJY2NpZHNfd3JpdGVfbG9jaygpOwogCWVyciA9IC1FRVhJU1Q7Ci0JaWYgKGNjaWRzW2NjaWQtPmNjaWRfaWRdID09IE5VTEwpIHsKLQkJY2NpZHNbY2NpZC0+Y2NpZF9pZF0gPSBjY2lkOworCWlmIChjY2lkc1tjY2lkX29wcy0+Y2NpZF9pZF0gPT0gTlVMTCkgeworCQljY2lkc1tjY2lkX29wcy0+Y2NpZF9pZF0gPSBjY2lkX29wczsKIAkJZXJyID0gMDsKIAl9CiAJY2NpZHNfd3JpdGVfdW5sb2NrKCk7Ci0JaWYgKGVyciA9PSAwKQotCQlwcl9pbmZvKCJDQ0lEOiBSZWdpc3RlcmVkIENDSUQgJWQgKCVzKVxuIiwKLQkJCWNjaWQtPmNjaWRfaWQsIGNjaWQtPmNjaWRfbmFtZSk7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIG91dF9mcmVlX3R4X3NsYWI7CisKKwlwcl9pbmZvKCJDQ0lEOiBSZWdpc3RlcmVkIENDSUQgJWQgKCVzKVxuIiwKKwkJY2NpZF9vcHMtPmNjaWRfaWQsIGNjaWRfb3BzLT5jY2lkX25hbWUpOworb3V0OgogCXJldHVybiBlcnI7CitvdXRfZnJlZV90eF9zbGFiOgorCWNjaWRfa21lbV9jYWNoZV9kZXN0cm95KGNjaWRfb3BzLT5jY2lkX2hjX3R4X3NsYWIpOworCWNjaWRfb3BzLT5jY2lkX2hjX3R4X3NsYWIgPSBOVUxMOworCWdvdG8gb3V0Oworb3V0X2ZyZWVfcnhfc2xhYjoKKwljY2lkX2ttZW1fY2FjaGVfZGVzdHJveShjY2lkX29wcy0+Y2NpZF9oY19yeF9zbGFiKTsKKwljY2lkX29wcy0+Y2NpZF9oY19yeF9zbGFiID0gTlVMTDsKKwlnb3RvIG91dDsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoY2NpZF9yZWdpc3Rlcik7CiAKLWludCBjY2lkX3VucmVnaXN0ZXIoc3RydWN0IGNjaWQgKmNjaWQpCitpbnQgY2NpZF91bnJlZ2lzdGVyKHN0cnVjdCBjY2lkX29wZXJhdGlvbnMgKmNjaWRfb3BzKQogewogCWNjaWRzX3dyaXRlX2xvY2soKTsKLQljY2lkc1tjY2lkLT5jY2lkX2lkXSA9IE5VTEw7CisJY2NpZHNbY2NpZF9vcHMtPmNjaWRfaWRdID0gTlVMTDsKIAljY2lkc193cml0ZV91bmxvY2soKTsKKworCWNjaWRfa21lbV9jYWNoZV9kZXN0cm95KGNjaWRfb3BzLT5jY2lkX2hjX3R4X3NsYWIpOworCWNjaWRfb3BzLT5jY2lkX2hjX3R4X3NsYWIgPSBOVUxMOworCWNjaWRfa21lbV9jYWNoZV9kZXN0cm95KGNjaWRfb3BzLT5jY2lkX2hjX3J4X3NsYWIpOworCWNjaWRfb3BzLT5jY2lkX2hjX3J4X3NsYWIgPSBOVUxMOworCiAJcHJfaW5mbygiQ0NJRDogVW5yZWdpc3RlcmVkIENDSUQgJWQgKCVzKVxuIiwKLQkJY2NpZC0+Y2NpZF9pZCwgY2NpZC0+Y2NpZF9uYW1lKTsKKwkJY2NpZF9vcHMtPmNjaWRfaWQsIGNjaWRfb3BzLT5jY2lkX25hbWUpOwogCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChjY2lkX3VucmVnaXN0ZXIpOwogCi1zdHJ1Y3QgY2NpZCAqY2NpZF9pbml0KHVuc2lnbmVkIGNoYXIgaWQsIHN0cnVjdCBzb2NrICpzaykKK3N0cnVjdCBjY2lkICpjY2lkX25ldyh1bnNpZ25lZCBjaGFyIGlkLCBzdHJ1Y3Qgc29jayAqc2ssIGludCByeCwgZ2ZwX3QgZ2ZwKQogewotCXN0cnVjdCBjY2lkICpjY2lkOworCXN0cnVjdCBjY2lkX29wZXJhdGlvbnMgKmNjaWRfb3BzOworCXN0cnVjdCBjY2lkICpjY2lkID0gTlVMTDsKIAotI2lmZGVmIENPTkZJR19LTU9ECi0JaWYgKGNjaWRzW2lkXSA9PSBOVUxMKQotCQlyZXF1ZXN0X21vZHVsZSgibmV0LWRjY3AtY2NpZC0lZCIsIGlkKTsKLSNlbmRpZgogCWNjaWRzX3JlYWRfbG9jaygpOworI2lmZGVmIENPTkZJR19LTU9ECisJaWYgKGNjaWRzW2lkXSA9PSBOVUxMKSB7CisJCS8qIFdlIG9ubHkgdHJ5IHRvIGxvYWQgaWYgaW4gcHJvY2VzcyBjb250ZXh0ICovCisJCWNjaWRzX3JlYWRfdW5sb2NrKCk7CisJCWlmIChnZnAgJiBHRlBfQVRPTUlDKQorCQkJZ290byBvdXQ7CisJCXJlcXVlc3RfbW9kdWxlKCJuZXQtZGNjcC1jY2lkLSVkIiwgaWQpOworCQljY2lkc19yZWFkX2xvY2soKTsKKwl9CisjZW5kaWYKKwljY2lkX29wcyA9IGNjaWRzW2lkXTsKKwlpZiAoY2NpZF9vcHMgPT0gTlVMTCkKKwkJZ290byBvdXRfdW5sb2NrOwogCi0JY2NpZCA9IGNjaWRzW2lkXTsKLQlpZiAoY2NpZCA9PSBOVUxMKQotCQlnb3RvIG91dDsKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNjaWRfb3BzLT5jY2lkX293bmVyKSkKKwkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKCF0cnlfbW9kdWxlX2dldChjY2lkLT5jY2lkX293bmVyKSkKLQkJZ290byBvdXRfZXJyOwotCi0JaWYgKGNjaWQtPmNjaWRfaW5pdChzaykgIT0gMCkKLQkJZ290byBvdXRfbW9kdWxlX3B1dDsKLW91dDoKIAljY2lkc19yZWFkX3VubG9jaygpOworCisJY2NpZCA9IGttZW1fY2FjaGVfYWxsb2MocnggPyBjY2lkX29wcy0+Y2NpZF9oY19yeF9zbGFiIDoKKwkJCQkgICAgIGNjaWRfb3BzLT5jY2lkX2hjX3R4X3NsYWIsIGdmcCk7CisJaWYgKGNjaWQgPT0gTlVMTCkKKwkJZ290byBvdXRfbW9kdWxlX3B1dDsKKwljY2lkLT5jY2lkX29wcyA9IGNjaWRfb3BzOworCWlmIChyeCkgeworCQltZW1zZXQoY2NpZCArIDEsIDAsIGNjaWRfb3BzLT5jY2lkX2hjX3J4X29ial9zaXplKTsKKwkJaWYgKGNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3J4X2luaXQgIT0gTlVMTCAmJgorCQkgICAgY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfcnhfaW5pdChjY2lkLCBzaykgIT0gMCkKKwkJCWdvdG8gb3V0X2ZyZWVfY2NpZDsKKwl9IGVsc2UgeworCQltZW1zZXQoY2NpZCArIDEsIDAsIGNjaWRfb3BzLT5jY2lkX2hjX3R4X29ial9zaXplKTsKKwkJaWYgKGNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3R4X2luaXQgIT0gTlVMTCAmJgorCQkgICAgY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfaW5pdChjY2lkLCBzaykgIT0gMCkKKwkJCWdvdG8gb3V0X2ZyZWVfY2NpZDsKKwl9CitvdXQ6CiAJcmV0dXJuIGNjaWQ7Ci1vdXRfbW9kdWxlX3B1dDoKLQltb2R1bGVfcHV0KGNjaWQtPmNjaWRfb3duZXIpOwotb3V0X2VycjoKK291dF91bmxvY2s6CisJY2NpZHNfcmVhZF91bmxvY2soKTsKKwlnb3RvIG91dDsKK291dF9mcmVlX2NjaWQ6CisJa21lbV9jYWNoZV9mcmVlKHJ4ID8gY2NpZF9vcHMtPmNjaWRfaGNfcnhfc2xhYiA6CisJCQljY2lkX29wcy0+Y2NpZF9oY190eF9zbGFiLCBjY2lkKTsKIAljY2lkID0gTlVMTDsKK291dF9tb2R1bGVfcHV0OgorCW1vZHVsZV9wdXQoY2NpZF9vcHMtPmNjaWRfb3duZXIpOwogCWdvdG8gb3V0OwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChjY2lkX2luaXQpOworRVhQT1JUX1NZTUJPTF9HUEwoY2NpZF9uZXcpOwogCi12b2lkIGNjaWRfZXhpdChzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrKQorc3RydWN0IGNjaWQgKmNjaWRfaGNfcnhfbmV3KHVuc2lnbmVkIGNoYXIgaWQsIHN0cnVjdCBzb2NrICpzaywgZ2ZwX3QgZ2ZwKQogeworCXJldHVybiBjY2lkX25ldyhpZCwgc2ssIDEsIGdmcCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGNjaWRfaGNfcnhfbmV3KTsKKworc3RydWN0IGNjaWQgKmNjaWRfaGNfdHhfbmV3KHVuc2lnbmVkIGNoYXIgaWQsc3RydWN0IHNvY2sgKnNrLCAgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBjY2lkX25ldyhpZCwgc2ssIDAsIGdmcCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGNjaWRfaGNfdHhfbmV3KTsKKworc3RhdGljIHZvaWQgY2NpZF9kZWxldGUoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywgaW50IHJ4KQoreworCXN0cnVjdCBjY2lkX29wZXJhdGlvbnMgKmNjaWRfb3BzOworCiAJaWYgKGNjaWQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JY2NpZHNfcmVhZF9sb2NrKCk7Ci0KLQlpZiAoY2NpZHNbY2NpZC0+Y2NpZF9pZF0gIT0gTlVMTCkgewotCQlpZiAoY2NpZC0+Y2NpZF9leGl0ICE9IE5VTEwpCi0JCQljY2lkLT5jY2lkX2V4aXQoc2spOwotCQltb2R1bGVfcHV0KGNjaWQtPmNjaWRfb3duZXIpOworCWNjaWRfb3BzID0gY2NpZC0+Y2NpZF9vcHM7CisJaWYgKHJ4KSB7CisJCWlmIChjY2lkX29wcy0+Y2NpZF9oY19yeF9leGl0ICE9IE5VTEwpCisJCQljY2lkX29wcy0+Y2NpZF9oY19yeF9leGl0KHNrKTsKKwkJa21lbV9jYWNoZV9mcmVlKGNjaWRfb3BzLT5jY2lkX2hjX3J4X3NsYWIsICBjY2lkKTsKKwl9IGVsc2UgeworCQlpZiAoY2NpZF9vcHMtPmNjaWRfaGNfdHhfZXhpdCAhPSBOVUxMKQorCQkJY2NpZF9vcHMtPmNjaWRfaGNfdHhfZXhpdChzayk7CisJCWttZW1fY2FjaGVfZnJlZShjY2lkX29wcy0+Y2NpZF9oY190eF9zbGFiLCAgY2NpZCk7CiAJfQotCisJY2NpZHNfcmVhZF9sb2NrKCk7CisJaWYgKGNjaWRzW2NjaWRfb3BzLT5jY2lkX2lkXSAhPSBOVUxMKQorCQltb2R1bGVfcHV0KGNjaWRfb3BzLT5jY2lkX293bmVyKTsKIAljY2lkc19yZWFkX3VubG9jaygpOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChjY2lkX2V4aXQpOwordm9pZCBjY2lkX2hjX3J4X2RlbGV0ZShzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrKQoreworCWNjaWRfZGVsZXRlKGNjaWQsIHNrLCAxKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoY2NpZF9oY19yeF9kZWxldGUpOworCit2b2lkIGNjaWRfaGNfdHhfZGVsZXRlKHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2spCit7CisJY2NpZF9kZWxldGUoY2NpZCwgc2ssIDApOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChjY2lkX2hjX3R4X2RlbGV0ZSk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmggYi9uZXQvZGNjcC9jY2lkLmgKaW5kZXggZGU2ODFjNi4uZjdlYjZjNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5oCisrKyBiL25ldC9kY2NwL2NjaWQuaApAQCAtMjMsMTQgKzIzLDE2IEBACiAKIHN0cnVjdCB0Y3BfaW5mbzsKIAotc3RydWN0IGNjaWQgeworc3RydWN0IGNjaWRfb3BlcmF0aW9ucyB7CiAJdW5zaWduZWQgY2hhcgljY2lkX2lkOwogCWNvbnN0IGNoYXIJKmNjaWRfbmFtZTsKIAlzdHJ1Y3QgbW9kdWxlCSpjY2lkX293bmVyOwotCWludAkJKCpjY2lkX2luaXQpKHN0cnVjdCBzb2NrICpzayk7Ci0Jdm9pZAkJKCpjY2lkX2V4aXQpKHN0cnVjdCBzb2NrICpzayk7Ci0JaW50CQkoKmNjaWRfaGNfcnhfaW5pdCkoc3RydWN0IHNvY2sgKnNrKTsKLQlpbnQJCSgqY2NpZF9oY190eF9pbml0KShzdHJ1Y3Qgc29jayAqc2spOworCWttZW1fY2FjaGVfdAkqY2NpZF9oY19yeF9zbGFiOworCV9fdTMyCQljY2lkX2hjX3J4X29ial9zaXplOworCWttZW1fY2FjaGVfdAkqY2NpZF9oY190eF9zbGFiOworCV9fdTMyCQljY2lkX2hjX3R4X29ial9zaXplOworCWludAkJKCpjY2lkX2hjX3J4X2luaXQpKHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2spOworCWludAkJKCpjY2lkX2hjX3R4X2luaXQpKHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2spOwogCXZvaWQJCSgqY2NpZF9oY19yeF9leGl0KShzdHJ1Y3Qgc29jayAqc2spOwogCXZvaWQJCSgqY2NpZF9oY190eF9leGl0KShzdHJ1Y3Qgc29jayAqc2spOwogCXZvaWQJCSgqY2NpZF9oY19yeF9wYWNrZXRfcmVjdikoc3RydWN0IHNvY2sgKnNrLApAQCAtMzksOSArNDEsOSBAQAogCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgb3B0aW9uLAogCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgbGVuLCB1MTYgaWR4LAogCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIqIHZhbHVlKTsKLQl2b2lkCQkoKmNjaWRfaGNfcnhfaW5zZXJ0X29wdGlvbnMpKHN0cnVjdCBzb2NrICpzaywKKwlpbnQJCSgqY2NpZF9oY19yeF9pbnNlcnRfb3B0aW9ucykoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQl2b2lkCQkoKmNjaWRfaGNfdHhfaW5zZXJ0X29wdGlvbnMpKHN0cnVjdCBzb2NrICpzaywKKwlpbnQJCSgqY2NpZF9oY190eF9pbnNlcnRfb3B0aW9ucykoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAl2b2lkCQkoKmNjaWRfaGNfdHhfcGFja2V0X3JlY3YpKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC02Nyw3NSArNjksNTggQEAKIAkJCQkJCSBpbnQgX191c2VyICpvcHRsZW4pOwogfTsKIAotZXh0ZXJuIGludAkgICBjY2lkX3JlZ2lzdGVyKHN0cnVjdCBjY2lkICpjY2lkKTsKLWV4dGVybiBpbnQJICAgY2NpZF91bnJlZ2lzdGVyKHN0cnVjdCBjY2lkICpjY2lkKTsKK2V4dGVybiBpbnQgY2NpZF9yZWdpc3RlcihzdHJ1Y3QgY2NpZF9vcGVyYXRpb25zICpjY2lkX29wcyk7CitleHRlcm4gaW50IGNjaWRfdW5yZWdpc3RlcihzdHJ1Y3QgY2NpZF9vcGVyYXRpb25zICpjY2lkX29wcyk7CiAKLWV4dGVybiBzdHJ1Y3QgY2NpZCAqY2NpZF9pbml0KHVuc2lnbmVkIGNoYXIgaWQsIHN0cnVjdCBzb2NrICpzayk7Ci1leHRlcm4gdm9pZAkgICBjY2lkX2V4aXQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzayk7CitzdHJ1Y3QgY2NpZCB7CisJc3RydWN0IGNjaWRfb3BlcmF0aW9ucyAqY2NpZF9vcHM7CisJY2hhcgkJICAgICAgIGNjaWRfcHJpdlswXTsKK307CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NjaWRfZ2V0KHN0cnVjdCBjY2lkICpjY2lkKQorc3RhdGljIGlubGluZSB2b2lkICpjY2lkX3ByaXYoY29uc3Qgc3RydWN0IGNjaWQgKmNjaWQpCiB7Ci0JX19tb2R1bGVfZ2V0KGNjaWQtPmNjaWRfb3duZXIpOworCXJldHVybiAodm9pZCAqKWNjaWQtPmNjaWRfcHJpdjsKIH0KIAorZXh0ZXJuIHN0cnVjdCBjY2lkICpjY2lkX25ldyh1bnNpZ25lZCBjaGFyIGlkLCBzdHJ1Y3Qgc29jayAqc2ssIGludCByeCwKKwkJCSAgICAgZ2ZwX3QgZ2ZwKTsKKworZXh0ZXJuIHN0cnVjdCBjY2lkICpjY2lkX2hjX3J4X25ldyh1bnNpZ25lZCBjaGFyIGlkLCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgZ2ZwX3QgZ2ZwKTsKK2V4dGVybiBzdHJ1Y3QgY2NpZCAqY2NpZF9oY190eF9uZXcodW5zaWduZWQgY2hhciBpZCwgc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgIGdmcF90IGdmcCk7CisKK2V4dGVybiB2b2lkIGNjaWRfaGNfcnhfZGVsZXRlKHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2spOworZXh0ZXJuIHZvaWQgY2NpZF9oY190eF9kZWxldGUoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzayk7CisKIHN0YXRpYyBpbmxpbmUgaW50IGNjaWRfaGNfdHhfc2VuZF9wYWNrZXQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiB7CiAJaW50IHJjID0gMDsKLQlpZiAoY2NpZC0+Y2NpZF9oY190eF9zZW5kX3BhY2tldCAhPSBOVUxMKQotCQlyYyA9IGNjaWQtPmNjaWRfaGNfdHhfc2VuZF9wYWNrZXQoc2ssIHNrYiwgbGVuKTsKKwlpZiAoY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfc2VuZF9wYWNrZXQgIT0gTlVMTCkKKwkJcmMgPSBjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9zZW5kX3BhY2tldChzaywgc2tiLCBsZW4pOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNjaWRfaGNfdHhfcGFja2V0X3NlbnQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBpbnQgbW9yZSwgaW50IGxlbikKIHsKLQlpZiAoY2NpZC0+Y2NpZF9oY190eF9wYWNrZXRfc2VudCAhPSBOVUxMKQotCQljY2lkLT5jY2lkX2hjX3R4X3BhY2tldF9zZW50KHNrLCBtb3JlLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjY2lkX2hjX3J4X2luaXQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaykKLXsKLQlpbnQgcmMgPSAwOwotCWlmIChjY2lkLT5jY2lkX2hjX3J4X2luaXQgIT0gTlVMTCkKLQkJcmMgPSBjY2lkLT5jY2lkX2hjX3J4X2luaXQoc2spOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2NpZF9oY190eF9pbml0KHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2spCi17Ci0JaW50IHJjID0gMDsKLQlpZiAoY2NpZC0+Y2NpZF9oY190eF9pbml0ICE9IE5VTEwpCi0JCXJjID0gY2NpZC0+Y2NpZF9oY190eF9pbml0KHNrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjY2lkX2hjX3J4X2V4aXQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaykKLXsKLQlpZiAoY2NpZCAhPSBOVUxMICYmIGNjaWQtPmNjaWRfaGNfcnhfZXhpdCAhPSBOVUxMICYmCi0JICAgIGRjY3Bfc2soc2spLT5kY2Nwc19oY19yeF9jY2lkX3ByaXZhdGUgIT0gTlVMTCkKLQkJY2NpZC0+Y2NpZF9oY19yeF9leGl0KHNrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNjaWRfaGNfdHhfZXhpdChzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrKQotewotCWlmIChjY2lkICE9IE5VTEwgJiYgY2NpZC0+Y2NpZF9oY190eF9leGl0ICE9IE5VTEwgJiYKLQkgICAgZGNjcF9zayhzayktPmRjY3BzX2hjX3R4X2NjaWRfcHJpdmF0ZSAhPSBOVUxMKQotCQljY2lkLT5jY2lkX2hjX3R4X2V4aXQoc2spOworCWlmIChjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9wYWNrZXRfc2VudCAhPSBOVUxMKQorCQljY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9wYWNrZXRfc2VudChzaywgbW9yZSwgbGVuKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNjaWRfaGNfcnhfcGFja2V0X3JlY3Yoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChjY2lkLT5jY2lkX2hjX3J4X3BhY2tldF9yZWN2ICE9IE5VTEwpCi0JCWNjaWQtPmNjaWRfaGNfcnhfcGFja2V0X3JlY3Yoc2ssIHNrYik7CisJaWYgKGNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3J4X3BhY2tldF9yZWN2ICE9IE5VTEwpCisJCWNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3J4X3BhY2tldF9yZWN2KHNrLCBza2IpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2NpZF9oY190eF9wYWNrZXRfcmVjdihzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKGNjaWQtPmNjaWRfaGNfdHhfcGFja2V0X3JlY3YgIT0gTlVMTCkKLQkJY2NpZC0+Y2NpZF9oY190eF9wYWNrZXRfcmVjdihzaywgc2tiKTsKKwlpZiAoY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfcGFja2V0X3JlY3YgIT0gTlVMTCkKKwkJY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfcGFja2V0X3JlY3Yoc2ssIHNrYik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNjaWRfaGNfdHhfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrLApAQCAtMTQ0LDggKzEyOSw4IEBACiAJCQkJCSAgIHVuc2lnbmVkIGNoYXIqIHZhbHVlKQogewogCWludCByYyA9IDA7Ci0JaWYgKGNjaWQtPmNjaWRfaGNfdHhfcGFyc2Vfb3B0aW9ucyAhPSBOVUxMKQotCQlyYyA9IGNjaWQtPmNjaWRfaGNfdHhfcGFyc2Vfb3B0aW9ucyhzaywgb3B0aW9uLCBsZW4sIGlkeCwKKwlpZiAoY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfcGFyc2Vfb3B0aW9ucyAhPSBOVUxMKQorCQlyYyA9IGNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3R4X3BhcnNlX29wdGlvbnMoc2ssIG9wdGlvbiwgbGVuLCBpZHgsCiAJCQkJCQkgICAgdmFsdWUpOwogCXJldHVybiByYzsKIH0KQEAgLTE1NiwzNyArMTQxLDM5IEBACiAJCQkJCSAgIHVuc2lnbmVkIGNoYXIqIHZhbHVlKQogewogCWludCByYyA9IDA7Ci0JaWYgKGNjaWQtPmNjaWRfaGNfcnhfcGFyc2Vfb3B0aW9ucyAhPSBOVUxMKQotCQlyYyA9IGNjaWQtPmNjaWRfaGNfcnhfcGFyc2Vfb3B0aW9ucyhzaywgb3B0aW9uLCBsZW4sIGlkeCwgdmFsdWUpOworCWlmIChjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY19yeF9wYXJzZV9vcHRpb25zICE9IE5VTEwpCisJCXJjID0gY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfcnhfcGFyc2Vfb3B0aW9ucyhzaywgb3B0aW9uLCBsZW4sIGlkeCwgdmFsdWUpOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNjaWRfaGNfdHhfaW5zZXJ0X29wdGlvbnMoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKLQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBpbnQgY2NpZF9oY190eF9pbnNlcnRfb3B0aW9ucyhzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoY2NpZC0+Y2NpZF9oY190eF9pbnNlcnRfb3B0aW9ucyAhPSBOVUxMKQotCQljY2lkLT5jY2lkX2hjX3R4X2luc2VydF9vcHRpb25zKHNrLCBza2IpOworCWlmIChjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9pbnNlcnRfb3B0aW9ucyAhPSBOVUxMKQorCQlyZXR1cm4gY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfaW5zZXJ0X29wdGlvbnMoc2ssIHNrYik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjY2lkX2hjX3J4X2luc2VydF9vcHRpb25zKHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgaW50IGNjaWRfaGNfcnhfaW5zZXJ0X29wdGlvbnMoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKGNjaWQtPmNjaWRfaGNfcnhfaW5zZXJ0X29wdGlvbnMgIT0gTlVMTCkKLQkJY2NpZC0+Y2NpZF9oY19yeF9pbnNlcnRfb3B0aW9ucyhzaywgc2tiKTsKKwlpZiAoY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfcnhfaW5zZXJ0X29wdGlvbnMgIT0gTlVMTCkKKwkJcmV0dXJuIGNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3J4X2luc2VydF9vcHRpb25zKHNrLCBza2IpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2NpZF9oY19yeF9nZXRfaW5mbyhzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgICBzdHJ1Y3QgdGNwX2luZm8gKmluZm8pCiB7Ci0JaWYgKGNjaWQtPmNjaWRfaGNfcnhfZ2V0X2luZm8gIT0gTlVMTCkKLQkJY2NpZC0+Y2NpZF9oY19yeF9nZXRfaW5mbyhzaywgaW5mbyk7CisJaWYgKGNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3J4X2dldF9pbmZvICE9IE5VTEwpCisJCWNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3J4X2dldF9pbmZvKHNrLCBpbmZvKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNjaWRfaGNfdHhfZ2V0X2luZm8oc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgICAgc3RydWN0IHRjcF9pbmZvICppbmZvKQogewotCWlmIChjY2lkLT5jY2lkX2hjX3R4X2dldF9pbmZvICE9IE5VTEwpCi0JCWNjaWQtPmNjaWRfaGNfdHhfZ2V0X2luZm8oc2ssIGluZm8pOworCWlmIChjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9nZXRfaW5mbyAhPSBOVUxMKQorCQljY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9nZXRfaW5mbyhzaywgaW5mbyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNjaWRfaGNfcnhfZ2V0c29ja29wdChzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrLApAQCAtMTk0LDggKzE4MSw4IEBACiAJCQkJCXUzMiBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCWludCByYyA9IC1FTk9QUk9UT09QVDsKLQlpZiAoY2NpZC0+Y2NpZF9oY19yeF9nZXRzb2Nrb3B0ICE9IE5VTEwpCi0JCXJjID0gY2NpZC0+Y2NpZF9oY19yeF9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBsZW4sCisJaWYgKGNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3J4X2dldHNvY2tvcHQgIT0gTlVMTCkKKwkJcmMgPSBjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY19yeF9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBsZW4sCiAJCQkJCQkgb3B0dmFsLCBvcHRsZW4pOwogCXJldHVybiByYzsKIH0KQEAgLTIwNSw4ICsxOTIsOCBAQAogCQkJCQl1MzIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlpbnQgcmMgPSAtRU5PUFJPVE9PUFQ7Ci0JaWYgKGNjaWQtPmNjaWRfaGNfdHhfZ2V0c29ja29wdCAhPSBOVUxMKQotCQlyYyA9IGNjaWQtPmNjaWRfaGNfdHhfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgbGVuLAorCWlmIChjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9nZXRzb2Nrb3B0ICE9IE5VTEwpCisJCXJjID0gY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgbGVuLAogCQkJCQkJIG9wdHZhbCwgb3B0bGVuKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9LY29uZmlnIGIvbmV0L2RjY3AvY2NpZHMvS2NvbmZpZwppbmRleCA3Njg0ZDgzLi5jYTAwMTkxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9LY29uZmlnCisrKyBiL25ldC9kY2NwL2NjaWRzL0tjb25maWcKQEAgLTEsOSArMSwzOSBAQAogbWVudSAiRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gSVBfRENDUCAmJiBFWFBFUklNRU5UQUwKIAotY29uZmlnIElQX0RDQ1BfQ0NJRDMKLQl0cmlzdGF0ZSAiQ0NJRDMgKFRGUkMpIChFWFBFUklNRU5UQUwpIgorY29uZmlnIElQX0RDQ1BfQ0NJRDIKKwl0cmlzdGF0ZSAiQ0NJRDIgKFRDUC1MaWtlKSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIElQX0RDQ1AKKwlkZWZfdHJpc3RhdGUgSVBfRENDUAorCXNlbGVjdCBJUF9EQ0NQX0FDS1ZFQworCS0tLWhlbHAtLS0KKwkgIENDSUQgMiwgVENQLWxpa2UgQ29uZ2VzdGlvbiBDb250cm9sLCBkZW5vdGVzIEFkZGl0aXZlIEluY3JlYXNlLAorCSAgTXVsdGlwbGljYXRpdmUgRGVjcmVhc2UgKEFJTUQpIGNvbmdlc3Rpb24gY29udHJvbCB3aXRoIGJlaGF2aW9yCisJICBtb2RlbGxlZCBkaXJlY3RseSBvbiBUQ1AsIGluY2x1ZGluZyBjb25nZXN0aW9uIHdpbmRvdywgc2xvdyBzdGFydCwKKwkgIHRpbWVvdXRzLCBhbmQgc28gZm9ydGggW1JGQyAyNTgxXS4gIENDSUQgMiBhY2hpZXZlcyBtYXhpbXVtCisJICBiYW5kd2lkdGggb3ZlciB0aGUgbG9uZyB0ZXJtLCBjb25zaXN0ZW50IHdpdGggdGhlIHVzZSBvZiBlbmQtdG8tZW5kCisJICBjb25nZXN0aW9uIGNvbnRyb2wsIGJ1dCBoYWx2ZXMgaXRzIGNvbmdlc3Rpb24gd2luZG93IGluIHJlc3BvbnNlIHRvCisJICBlYWNoIGNvbmdlc3Rpb24gZXZlbnQuICBUaGlzIGxlYWRzIHRvIHRoZSBhYnJ1cHQgcmF0ZSBjaGFuZ2VzCisJICB0eXBpY2FsIG9mIFRDUC4gIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIENDSUQgMiBpZiB0aGV5IHByZWZlcgorCSAgbWF4aW11bSBiYW5kd2lkdGggdXRpbGl6YXRpb24gdG8gc3RlYWRpbmVzcyBvZiByYXRlLiAgVGhpcyBpcyBvZnRlbgorCSAgdGhlIGNhc2UgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3QgcGxheWluZyB0aGVpciBkYXRhIGRpcmVjdGx5CisJICB0byB0aGUgdXNlci4gIEZvciBleGFtcGxlLCBhIGh5cG90aGV0aWNhbCBhcHBsaWNhdGlvbiB0aGF0CisJICB0cmFuc2ZlcnJlZCBmaWxlcyBvdmVyIERDQ1AsIHVzaW5nIGFwcGxpY2F0aW9uLWxldmVsIHJldHJhbnNtaXNzaW9ucworCSAgZm9yIGxvc3QgcGFja2V0cywgd291bGQgcHJlZmVyIENDSUQgMiB0byBDQ0lEIDMuICBPbi1saW5lIGdhbWVzIG1heQorCSAgYWxzbyBwcmVmZXIgQ0NJRCAyLgorCisJICBDQ0lEIDIgaXMgZnVydGhlciBkZXNjcmliZWQgaW46CisJICBodHRwOi8vd3d3LmljaXIub3JnL2tvaGxlci9kY2NwL2RyYWZ0LWlldGYtZGNjcC1jY2lkMi0xMC50eHQKKworCSAgVGhpcyB0ZXh0IHdhcyBleHRyYWN0ZWQgZnJvbToKKwkgIGh0dHA6Ly93d3cuaWNpci5vcmcva29obGVyL2RjY3AvZHJhZnQtaWV0Zi1kY2NwLXNwZWMtMTMudHh0CisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTS4KKworY29uZmlnIElQX0RDQ1BfQ0NJRDMKKwl0cmlzdGF0ZSAiQ0NJRDMgKFRDUC1GcmllbmRseSkgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBJUF9EQ0NQCisJZGVmX3RyaXN0YXRlIElQX0RDQ1AKIAktLS1oZWxwLS0tCiAJICBDQ0lEIDMgZGVub3RlcyBUQ1AtRnJpZW5kbHkgUmF0ZSBDb250cm9sIChURlJDKSwgYW4gZXF1YXRpb24tYmFzZWQKIAkgIHJhdGUtY29udHJvbGxlZCBjb25nZXN0aW9uIGNvbnRyb2wgbWVjaGFuaXNtLiAgVEZSQyBpcyBkZXNpZ25lZCB0bwpAQCAtMTUsMTAgKzQ1LDE1IEBACiAJICBzdWl0YWJsZSB0aGFuIENDSUQgMiBmb3IgYXBwbGljYXRpb25zIHN1Y2ggc3RyZWFtaW5nIG1lZGlhIHdoZXJlIGEKIAkgIHJlbGF0aXZlbHkgc21vb3RoIHNlbmRpbmcgcmF0ZSBpcyBvZiBpbXBvcnRhbmNlLgogCi0JICBDQ0lEIDMgaXMgZnVydGhlciBkZXNjcmliZWQgaW4gW0NDSUQgMyBQUk9GSUxFXS4gVGhlIFRGUkMKLQkgIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zIHdlcmUgaW5pdGlhbGx5IGRlc2NyaWJlZCBpbiBSRkMgMzQ0OC4KKwkgIENDSUQgMyBpcyBmdXJ0aGVyIGRlc2NyaWJlZCBpbjoKIAotCSAgVGhpcyB0ZXh0IHdhcyBleHRyYWN0ZWQgZnJvbSBkcmFmdC1pZXRmLWRjY3Atc3BlYy0xMS50eHQuCisJICBodHRwOi8vd3d3LmljaXIub3JnL2tvaGxlci9kY2NwL2RyYWZ0LWlldGYtZGNjcC1jY2lkMy0xMS50eHQuCisKKwkgIFRoZSBURlJDIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zIHdlcmUgaW5pdGlhbGx5IGRlc2NyaWJlZCBpbgorCSAgUkZDIDM0NDguCisKKwkgIFRoaXMgdGV4dCB3YXMgZXh0cmFjdGVkIGZyb206CisJICBodHRwOi8vd3d3LmljaXIub3JnL2tvaGxlci9kY2NwL2RyYWZ0LWlldGYtZGNjcC1zcGVjLTEzLnR4dAogCSAgCiAJICBJZiBpbiBkb3VidCwgc2F5IE0uCiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL01ha2VmaWxlIGIvbmV0L2RjY3AvY2NpZHMvTWFrZWZpbGUKaW5kZXggOTU2Zjc5Zi4uNDM4ZjIwYiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvTWFrZWZpbGUKKysrIGIvbmV0L2RjY3AvY2NpZHMvTWFrZWZpbGUKQEAgLTIsNCArMiw4IEBACiAKIGRjY3BfY2NpZDMteSA6PSBjY2lkMy5vCiAKK29iai0kKENPTkZJR19JUF9EQ0NQX0NDSUQyKSArPSBkY2NwX2NjaWQyLm8KKworZGNjcF9jY2lkMi15IDo9IGNjaWQyLm8KKwogb2JqLXkgKz0gbGliLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDIuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmOWUyZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMKQEAgLTAsMCArMSw3NzkgQEAKKy8qCisgKiAgbmV0L2RjY3AvY2NpZHMvY2NpZDIuYworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgQW5kcmVhIEJpdHRhdSA8YS5iaXR0YXVAY3MudWNsLmFjLnVrPgorICoKKyAqICBDaGFuZ2VzIHRvIG1lZXQgTGludXggY29kaW5nIHN0YW5kYXJkcywgYW5kIERDQ1AgaW5mcmFzdHJ1Y3R1cmUgZml4ZXMuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNiBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBmb2xsb3c6IGRyYWZ0LWlldGYtZGNjcC1jY2lkMi0xMC50eHQKKyAqCisgKiBCVUdTOgorICogLSBzZXF1ZW5jZSBudW1iZXIgd3JhcHBpbmcKKyAqIC0gamlmZmllcyB3cmFwcGluZworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlICIuLi9jY2lkLmgiCisjaW5jbHVkZSAiLi4vZGNjcC5oIgorI2luY2x1ZGUgImNjaWQyLmgiCisKK3N0YXRpYyBpbnQgY2NpZDJfZGVidWc7CisKKyN1bmRlZiBDQ0lEMl9ERUJVRworI2lmZGVmIENDSUQyX0RFQlVHCisjZGVmaW5lIGNjaWQyX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikgXAorICAgICAgICBkbyB7IGlmIChjY2lkMl9kZWJ1ZykgXAorICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIF9fRlVOQ1RJT05fXywgIyNhKTsgXAorICAgICAgICB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgY2NpZDJfcHJfZGVidWcoZm9ybWF0LCBhLi4uKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBpbnQgY2NpZDJfc2VxX2xlbiA9IDEyODsKKworI2lmZGVmIENDSUQyX0RFQlVHCitzdGF0aWMgdm9pZCBjY2lkMl9oY190eF9jaGVja19zYW5pdHkoY29uc3Qgc3RydWN0IGNjaWQyX2hjX3R4X3NvY2sgKmhjdHgpCit7CisJaW50IGxlbiA9IDA7CisJaW50IHBpcGUgPSAwOworCXN0cnVjdCBjY2lkMl9zZXEgKnNlcXAgPSBoY3R4LT5jY2lkMmhjdHhfc2VxaDsKKworCS8qIHRoZXJlIGlzIGRhdGEgaW4gdGhlIGNoYWluICovCisJaWYgKHNlcXAgIT0gaGN0eC0+Y2NpZDJoY3R4X3NlcXQpIHsKKwkJc2VxcCA9IHNlcXAtPmNjaWQyc19wcmV2OworCQlsZW4rKzsKKwkJaWYgKCFzZXFwLT5jY2lkMnNfYWNrZWQpCisJCQlwaXBlKys7CisKKwkJd2hpbGUgKHNlcXAgIT0gaGN0eC0+Y2NpZDJoY3R4X3NlcXQpIHsKKwkJCXN0cnVjdCBjY2lkMl9zZXEgKnByZXYgPSBzZXFwLT5jY2lkMnNfcHJldjsKKworCQkJbGVuKys7CisJCQlpZiAoIXByZXYtPmNjaWQyc19hY2tlZCkKKwkJCQlwaXBlKys7CisKKwkJCS8qIHBhY2tldHMgYXJlIHNlbnQgc2VxdWVudGlhbGx5ICovCisJCQlCVUdfT04oc2VxcC0+Y2NpZDJzX3NlcSA8PSBwcmV2LT5jY2lkMnNfc2VxKTsKKwkJCUJVR19PTihzZXFwLT5jY2lkMnNfc2VudCA8IHByZXYtPmNjaWQyc19zZW50KTsKKwkJCUJVR19PTihsZW4gPiBjY2lkMl9zZXFfbGVuKTsKKworCQkJc2VxcCA9IHByZXY7CisJCX0KKwl9CisKKwlCVUdfT04ocGlwZSAhPSBoY3R4LT5jY2lkMmhjdHhfcGlwZSk7CisJY2NpZDJfcHJfZGVidWcoImxlbiBvZiBjaGFpbj0lZFxuIiwgbGVuKTsKKworCWRvIHsKKwkJc2VxcCA9IHNlcXAtPmNjaWQyc19wcmV2OworCQlsZW4rKzsKKwkJQlVHX09OKGxlbiA+IGNjaWQyX3NlcV9sZW4pOworCX0gd2hpbGUgKHNlcXAgIT0gaGN0eC0+Y2NpZDJoY3R4X3NlcWgpOworCisJQlVHX09OKGxlbiAhPSBjY2lkMl9zZXFfbGVuKTsKKwljY2lkMl9wcl9kZWJ1ZygidG90YWwgbGVuPSVkXG4iLCBsZW4pOworfQorI2Vsc2UKKyNkZWZpbmUgY2NpZDJfaGNfdHhfY2hlY2tfc2FuaXR5KGhjdHgpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgY2NpZDJfaGNfdHhfc2VuZF9wYWNrZXQoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCit7CisJc3RydWN0IGNjaWQyX2hjX3R4X3NvY2sgKmhjdHg7CisKKwlzd2l0Y2ggKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGUpIHsKKwljYXNlIDA6IC8qIFhYWCBkYXRhIHBhY2tldHMgZnJvbSB1c2VybGFuZCBjb21lIHRocm91Z2ggbGlrZSB0aGlzICovCisJY2FzZSBEQ0NQX1BLVF9EQVRBOgorCWNhc2UgRENDUF9QS1RfREFUQUFDSzoKKwkJYnJlYWs7CisJLyogTm8gY29uZ2VzdGlvbiBjb250cm9sIG9uIG90aGVyIHBhY2tldHMgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKyAgICAgICAgaGN0eCA9IGNjaWQyX2hjX3R4X3NrKHNrKTsKKworCWNjaWQyX3ByX2RlYnVnKCJwaXBlPSVkIGN3bmQ9JWRcbiIsIGhjdHgtPmNjaWQyaGN0eF9waXBlLAorCQkgICAgICAgaGN0eC0+Y2NpZDJoY3R4X2N3bmQpOworCisJaWYgKGhjdHgtPmNjaWQyaGN0eF9waXBlIDwgaGN0eC0+Y2NpZDJoY3R4X2N3bmQpIHsKKwkJLyogT0sgd2UgY2FuIHNlbmQuLi4gbWFrZSBzdXJlIHByZXZpb3VzIHBhY2tldCB3YXMgc2VudCBvZmYgKi8KKwkJaWYgKCFoY3R4LT5jY2lkMmhjdHhfc2VuZHdhaXQpIHsKKwkJCWhjdHgtPmNjaWQyaGN0eF9zZW5kd2FpdCA9IDE7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAxMDA7IC8qIFhYWCAqLworfQorCitzdGF0aWMgdm9pZCBjY2lkMl9jaGFuZ2VfbF9hY2tfcmF0aW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQoreworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJLyoKKwkgKiBYWFggSSBkb24ndCByZWFsbHkgYWdyZWUgd2l0aCB2YWwgIT0gMi4gIElmIGN3bmQgaXMgMSwgYWNrIHJhdGlvCisJICogc2hvdWxkIGJlIDEuLi4gaXQgc2hvdWxkbid0IGJlIGFsbG93ZWQgdG8gYmVjb21lIDIuCisJICogLXNvcmJvLgorCSAqLworCWlmICh2YWwgIT0gMikgeworCQljb25zdCBzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQyX2hjX3R4X3NrKHNrKTsKKwkJaW50IG1heCA9IGhjdHgtPmNjaWQyaGN0eF9jd25kIC8gMjsKKworCQkvKiByb3VuZCB1cCAqLworCQlpZiAoaGN0eC0+Y2NpZDJoY3R4X2N3bmQgJiAxKQorCQkJbWF4Kys7CisKKwkJaWYgKHZhbCA+IG1heCkKKwkJCXZhbCA9IG1heDsKKwl9CisKKwljY2lkMl9wcl9kZWJ1ZygiY2hhbmdpbmcgbG9jYWwgYWNrIHJhdGlvIHRvICVkXG4iLCB2YWwpOworCVdBUk5fT04odmFsIDw9IDApOworCWRwLT5kY2Nwc19sX2Fja19yYXRpbyA9IHZhbDsKK30KKworc3RhdGljIHZvaWQgY2NpZDJfY2hhbmdlX2N3bmQoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKQoreworCXN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpoY3R4ID0gY2NpZDJfaGNfdHhfc2soc2spOworCisJaWYgKHZhbCA9PSAwKQorCQl2YWwgPSAxOworCisJLyogWFhYIGRvIHdlIG5lZWQgdG8gY2hhbmdlIGFjayByYXRpbz8gKi8KKwljY2lkMl9wcl9kZWJ1ZygiY2hhbmdlIGN3bmQgdG8gJWRcbiIsIHZhbCk7CisKKwlCVUdfT04odmFsIDwgMSk7CisJaGN0eC0+Y2NpZDJoY3R4X2N3bmQgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGNjaWQyX3N0YXJ0X3J0b190aW1lcihzdHJ1Y3Qgc29jayAqc2spOworCitzdGF0aWMgdm9pZCBjY2lkMl9oY190eF9ydG9fZXhwaXJlKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilkYXRhOworCXN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpoY3R4ID0gY2NpZDJfaGNfdHhfc2soc2spOworCWxvbmcgczsKKworCWJoX2xvY2tfc29jayhzayk7CisJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKKwkJc2tfcmVzZXRfdGltZXIoc2ssICZoY3R4LT5jY2lkMmhjdHhfcnRvdGltZXIsCisJCQkgICAgICAgamlmZmllcyArIEhaIC8gNSk7CisJCWdvdG8gb3V0OworCX0KKworCWNjaWQyX3ByX2RlYnVnKCJSVE9fRVhQSVJFXG4iKTsKKworCWNjaWQyX2hjX3R4X2NoZWNrX3Nhbml0eShoY3R4KTsKKworCS8qIGJhY2stb2ZmIHRpbWVyICovCisJaGN0eC0+Y2NpZDJoY3R4X3J0byA8PD0gMTsKKworCXMgPSBoY3R4LT5jY2lkMmhjdHhfcnRvIC8gSFo7CisJaWYgKHMgPiA2MCkKKwkJaGN0eC0+Y2NpZDJoY3R4X3J0byA9IDYwICogSFo7CisKKwljY2lkMl9zdGFydF9ydG9fdGltZXIoc2spOworCisJLyogYWRqdXN0IHBpcGUsIGN3bmQgZXRjICovCisJaGN0eC0+Y2NpZDJoY3R4X3BpcGUgPSAwOworCWhjdHgtPmNjaWQyaGN0eF9zc3RocmVzaCA9IGhjdHgtPmNjaWQyaGN0eF9jd25kID4+IDE7CisJaWYgKGhjdHgtPmNjaWQyaGN0eF9zc3RocmVzaCA8IDIpCisJCWhjdHgtPmNjaWQyaGN0eF9zc3RocmVzaCA9IDI7CisJY2NpZDJfY2hhbmdlX2N3bmQoc2ssIDEpOworCisJLyogY2xlYXIgc3RhdGUgYWJvdXQgc3R1ZmYgd2Ugc2VudCAqLworCWhjdHgtPmNjaWQyaGN0eF9zZXF0CT0gaGN0eC0+Y2NpZDJoY3R4X3NlcWg7CisJaGN0eC0+Y2NpZDJoY3R4X3NzYWNrcwk9IDA7CisJaGN0eC0+Y2NpZDJoY3R4X2Fja3MJPSAwOworCWhjdHgtPmNjaWQyaGN0eF9zZW50CT0gMDsKKworCS8qIGNsZWFyIGFjayByYXRpbyBzdGF0ZS4gKi8KKwloY3R4LT5jY2lkMmhjdHhfYXJzZW50CSA9IDA7CisJaGN0eC0+Y2NpZDJoY3R4X2Fja2xvc3MgID0gMDsKKwloY3R4LT5jY2lkMmhjdHhfcnBzZXEJID0gMDsKKwloY3R4LT5jY2lkMmhjdHhfcnBkdXBhY2sgPSAtMTsKKwljY2lkMl9jaGFuZ2VfbF9hY2tfcmF0aW8oc2ssIDEpOworCWNjaWQyX2hjX3R4X2NoZWNrX3Nhbml0eShoY3R4KTsKK291dDoKKwliaF91bmxvY2tfc29jayhzayk7CisJc29ja19wdXQoc2spOworfQorCitzdGF0aWMgdm9pZCBjY2lkMl9zdGFydF9ydG9fdGltZXIoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpoY3R4ID0gY2NpZDJfaGNfdHhfc2soc2spOworCisJY2NpZDJfcHJfZGVidWcoInNldHRpbmcgUlRPIHRpbWVvdXQ9JWxkXG4iLCBoY3R4LT5jY2lkMmhjdHhfcnRvKTsKKworCUJVR19PTih0aW1lcl9wZW5kaW5nKCZoY3R4LT5jY2lkMmhjdHhfcnRvdGltZXIpKTsKKwlza19yZXNldF90aW1lcihzaywgJmhjdHgtPmNjaWQyaGN0eF9ydG90aW1lciwKKwkJICAgICAgIGppZmZpZXMgKyBoY3R4LT5jY2lkMmhjdHhfcnRvKTsKK30KKworc3RhdGljIHZvaWQgY2NpZDJfaGNfdHhfcGFja2V0X3NlbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbW9yZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpoY3R4ID0gY2NpZDJfaGNfdHhfc2soc2spOworCXU2NCBzZXE7CisKKwljY2lkMl9oY190eF9jaGVja19zYW5pdHkoaGN0eCk7CisKKwlCVUdfT04oIWhjdHgtPmNjaWQyaGN0eF9zZW5kd2FpdCk7CisJaGN0eC0+Y2NpZDJoY3R4X3NlbmR3YWl0ID0gMDsKKwloY3R4LT5jY2lkMmhjdHhfcGlwZSsrOworCUJVR19PTihoY3R4LT5jY2lkMmhjdHhfcGlwZSA8IDApOworCisJLyogVGhlcmUgaXMgYW4gaXNzdWUuICBXaGF0IGlmIGFub3RoZXIgcGFja2V0IGlzIHNlbnQgYmV0d2VlbgorCSAqIHBhY2tldF9zZW5kKCkgYW5kIHBhY2tldF9zZW50KCkuICBUaGVuIHRoZSBzZXF1ZW5jZSBudW1iZXIgd291bGQgYmUKKwkgKiB3cm9uZy4KKwkgKiAtc29yYm8uCisJICovCisJc2VxID0gZHAtPmRjY3BzX2dzczsKKworCWhjdHgtPmNjaWQyaGN0eF9zZXFoLT5jY2lkMnNfc2VxICAgPSBzZXE7CisJaGN0eC0+Y2NpZDJoY3R4X3NlcWgtPmNjaWQyc19hY2tlZCA9IDA7CisJaGN0eC0+Y2NpZDJoY3R4X3NlcWgtPmNjaWQyc19zZW50ICA9IGppZmZpZXM7CisJaGN0eC0+Y2NpZDJoY3R4X3NlcWggPSBoY3R4LT5jY2lkMmhjdHhfc2VxaC0+Y2NpZDJzX25leHQ7CisKKwljY2lkMl9wcl9kZWJ1ZygiY3duZD0lZCBwaXBlPSVkXG4iLCBoY3R4LT5jY2lkMmhjdHhfY3duZCwKKwkJICAgICAgIGhjdHgtPmNjaWQyaGN0eF9waXBlKTsKKworCWlmIChoY3R4LT5jY2lkMmhjdHhfc2VxaCA9PSBoY3R4LT5jY2lkMmhjdHhfc2VxdCkgeworCQkvKiBYWFggYWxsb2NhdGUgbW9yZSBzcGFjZSAqLworCQlXQVJOX09OKDEpOworCX0KKworCWhjdHgtPmNjaWQyaGN0eF9zZW50Kys7CisKKwkvKiBBY2sgUmF0aW8uICBOZWVkIHRvIG1haW50YWluIGEgY29uY2VwdCBvZiBob3cgbWFueSB3aW5kb3dzIHdlIHNlbnQgKi8KKwloY3R4LT5jY2lkMmhjdHhfYXJzZW50Kys7CisJLyogV2UgaGFkIGFuIGFjayBsb3NzIGluIHRoaXMgd2luZG93Li4uICovCisJaWYgKGhjdHgtPmNjaWQyaGN0eF9hY2tsb3NzKSB7CisJCWlmIChoY3R4LT5jY2lkMmhjdHhfYXJzZW50ID49IGhjdHgtPmNjaWQyaGN0eF9jd25kKSB7CisJCQloY3R4LT5jY2lkMmhjdHhfYXJzZW50CT0gMDsKKwkJCWhjdHgtPmNjaWQyaGN0eF9hY2tsb3NzCT0gMDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE5vIGFja3MgbG9zdCB1cCB0byBub3cuLi4gKi8KKwkJLyogZGVjcmVhc2UgYWNrIHJhdGlvIGlmIGVub3VnaCBwYWNrZXRzIHdlcmUgc2VudCAqLworCQlpZiAoZHAtPmRjY3BzX2xfYWNrX3JhdGlvID4gMSkgeworCQkJLyogWFhYIGRvbid0IGNhbGN1bGF0ZSBkZW5vbWluYXRvciBlYWNoIHRpbWUgKi8KKwkJCWludCBkZW5vbSA9IGRwLT5kY2Nwc19sX2Fja19yYXRpbyAqIGRwLT5kY2Nwc19sX2Fja19yYXRpbyAtCisJCQkJICAgIGRwLT5kY2Nwc19sX2Fja19yYXRpbzsKKworCQkJZGVub20gPSBoY3R4LT5jY2lkMmhjdHhfY3duZCAqIGhjdHgtPmNjaWQyaGN0eF9jd25kIC8gZGVub207CisKKwkJCWlmIChoY3R4LT5jY2lkMmhjdHhfYXJzZW50ID49IGRlbm9tKSB7CisJCQkJY2NpZDJfY2hhbmdlX2xfYWNrX3JhdGlvKHNrLCBkcC0+ZGNjcHNfbF9hY2tfcmF0aW8gLSAxKTsKKwkJCQloY3R4LT5jY2lkMmhjdHhfYXJzZW50ID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIHdlIGNhbid0IGluY3JlYXNlIGFjayByYXRpbyBmdXJ0aGVyIFsxXSAqLworCQkJaGN0eC0+Y2NpZDJoY3R4X2Fyc2VudCA9IDA7IC8qIG9yIG1heWJlIHNldCBpdCB0byBjd25kKi8KKwkJfQorCX0KKworCS8qIHNldHVwIFJUTyB0aW1lciAqLworCWlmICghdGltZXJfcGVuZGluZygmaGN0eC0+Y2NpZDJoY3R4X3J0b3RpbWVyKSkKKwkJY2NpZDJfc3RhcnRfcnRvX3RpbWVyKHNrKTsKKworI2lmZGVmIENDSUQyX0RFQlVHCisJY2NpZDJfcHJfZGVidWcoInBpcGU9JWRcbiIsIGhjdHgtPmNjaWQyaGN0eF9waXBlKTsKKwljY2lkMl9wcl9kZWJ1ZygiU2VudDogc2VxPSVsbHVcbiIsIHNlcSk7CisJZG8geworCQlzdHJ1Y3QgY2NpZDJfc2VxICpzZXFwID0gaGN0eC0+Y2NpZDJoY3R4X3NlcXQ7CisKKwkJd2hpbGUgKHNlcXAgIT0gaGN0eC0+Y2NpZDJoY3R4X3NlcWgpIHsKKwkJCWNjaWQyX3ByX2RlYnVnKCJvdXQgc2VxPSVsbHUgYWNrZWQ9JWQgdGltZT0lbHVcbiIsCisJCQkgICAgICAgCSAgICAgICBzZXFwLT5jY2lkMnNfc2VxLCBzZXFwLT5jY2lkMnNfYWNrZWQsCisJCQkJICAgICAgIHNlcXAtPmNjaWQyc19zZW50KTsKKwkJCXNlcXAgPSBzZXFwLT5jY2lkMnNfbmV4dDsKKwkJfQorCX0gd2hpbGUgKDApOworCWNjaWQyX3ByX2RlYnVnKCI9PT09PT09PT1cbiIpOworCWNjaWQyX2hjX3R4X2NoZWNrX3Nhbml0eShoY3R4KTsKKyNlbmRpZgorfQorCisvKiBYWFggTGFtZSBjb2RlIGR1cGxpY2F0aW9uIQorICogcmV0dXJucyAtMSBpZiBub25lIHdhcyBmb3VuZC4KKyAqIGVsc2UgcmV0dXJucyB0aGUgbmV4dCBvZmZzZXQgdG8gdXNlIGluIHRoZSBmdW5jdGlvbiBjYWxsLgorICovCitzdGF0aWMgaW50IGNjaWQyX2Fja3ZlY3RvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsCisJCQkgICB1bnNpZ25lZCBjaGFyICoqdmVjLCB1bnNpZ25lZCBjaGFyICp2ZWNsZW4pCit7CisgICAgICAgIGNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOworICAgICAgICB1bnNpZ25lZCBjaGFyICpvcHRpb25zID0gKHVuc2lnbmVkIGNoYXIgKilkaCArIGRjY3BfaGRyX2xlbihza2IpOworICAgICAgICB1bnNpZ25lZCBjaGFyICpvcHRfcHRyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpvcHRfZW5kID0gKHVuc2lnbmVkIGNoYXIgKilkaCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRoLT5kY2NwaF9kb2ZmICogNCk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgb3B0LCBsZW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnZhbHVlOworCisJQlVHX09OKG9mZnNldCA8IDApOworCW9wdGlvbnMgKz0gb2Zmc2V0OworCW9wdF9wdHIgPSBvcHRpb25zOworCWlmIChvcHRfcHRyID49IG9wdF9lbmQpCisJCXJldHVybiAtMTsKKworCXdoaWxlIChvcHRfcHRyICE9IG9wdF9lbmQpIHsKKyAgICAgICAgICAgICAgICBvcHQgICA9ICpvcHRfcHRyKys7CisgICAgICAgICAgICAgICAgbGVuICAgPSAwOworICAgICAgICAgICAgICAgIHZhbHVlID0gTlVMTDsKKworICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoaXMgaXNuJ3QgYSBzaW5nbGUgYnl0ZSBvcHRpb24gKi8KKyAgICAgICAgICAgICAgICBpZiAob3B0ID4gRENDUE9fTUFYX1JFU0VSVkVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0X3B0ciA9PSBvcHRfZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKKworICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gKm9wdF9wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPCAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBSZW1vdmUgdGhlIHR5cGUgYW5kIGxlbiBmaWVsZHMsIGxlYXZpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGp1c3QgdGhlIHZhbHVlIHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgbGVuICAgICAtPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgICA9IG9wdF9wdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcHRyICs9IGxlbjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdF9wdHIgPiBvcHRfZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKKyAgICAgICAgICAgICAgICB9CisKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSBEQ0NQT19BQ0tfVkVDVE9SXzA6CisJCWNhc2UgRENDUE9fQUNLX1ZFQ1RPUl8xOgorCQkJKnZlYwk9IHZhbHVlOworCQkJKnZlY2xlbiA9IGxlbjsKKwkJCXJldHVybiBvZmZzZXQgKyAob3B0X3B0ciAtIG9wdGlvbnMpOworCQl9CisJfQorCisJcmV0dXJuIC0xOworCitvdXRfaW52YWxpZF9vcHRpb246CisJQlVHX09OKDEpOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uIG9wdGlvbnMgd2VyZSBwcmV2aW91c2x5IHBhcnNlZCAhICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBjY2lkMl9oY190eF9raWxsX3J0b190aW1lcihzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGNjaWQyX2hjX3R4X3NvY2sgKmhjdHggPSBjY2lkMl9oY190eF9zayhzayk7CisKKwlza19zdG9wX3RpbWVyKHNrLCAmaGN0eC0+Y2NpZDJoY3R4X3J0b3RpbWVyKTsKKwljY2lkMl9wcl9kZWJ1ZygiZGVsZXRlZCBSVE8gdGltZXJcbiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2NpZDJfbmV3X2FjayhzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgICAgICBzdHJ1Y3QgY2NpZDJfc2VxICpzZXFwLAorCQkJCSB1bnNpZ25lZCBpbnQgKm1heGluY3IpCit7CisJc3RydWN0IGNjaWQyX2hjX3R4X3NvY2sgKmhjdHggPSBjY2lkMl9oY190eF9zayhzayk7CisKKwkvKiBzbG93IHN0YXJ0ICovCisJaWYgKGhjdHgtPmNjaWQyaGN0eF9jd25kIDwgaGN0eC0+Y2NpZDJoY3R4X3NzdGhyZXNoKSB7CisJCWhjdHgtPmNjaWQyaGN0eF9hY2tzID0gMDsKKworCQkvKiBXZSBjYW4gaW5jcmVhc2UgY3duZCBhdCBtb3N0IG1heGluY3IgW2Fja19yYXRpby8yXSAqLworCQlpZiAoKm1heGluY3IpIHsKKwkJCS8qIGluY3JlYXNlIGV2ZXJ5IDIgYWNrcyAqLworCQkJaGN0eC0+Y2NpZDJoY3R4X3NzYWNrcysrOworCQkJaWYgKGhjdHgtPmNjaWQyaGN0eF9zc2Fja3MgPT0gMikgeworCQkJCWNjaWQyX2NoYW5nZV9jd25kKHNrLCBoY3R4LT5jY2lkMmhjdHhfY3duZCArIDEpOworCQkJCWhjdHgtPmNjaWQyaGN0eF9zc2Fja3MgPSAwOworCQkJCSptYXhpbmNyID0gKm1heGluY3IgLSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogaW5jcmVhc2VkIGN3bmQgZW5vdWdoIGZvciB0aGlzIHNpbmdsZSBhY2sgKi8KKwkJCWhjdHgtPmNjaWQyaGN0eF9zc2Fja3MgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJaGN0eC0+Y2NpZDJoY3R4X3NzYWNrcyA9IDA7CisJCWhjdHgtPmNjaWQyaGN0eF9hY2tzKys7CisKKwkJaWYgKGhjdHgtPmNjaWQyaGN0eF9hY2tzID49IGhjdHgtPmNjaWQyaGN0eF9jd25kKSB7CisJCQljY2lkMl9jaGFuZ2VfY3duZChzaywgaGN0eC0+Y2NpZDJoY3R4X2N3bmQgKyAxKTsKKwkJCWhjdHgtPmNjaWQyaGN0eF9hY2tzID0gMDsKKwkJfQorCX0KKworCS8qIHVwZGF0ZSBSVE8gKi8KKwlpZiAoaGN0eC0+Y2NpZDJoY3R4X3NydHQgPT0gLTEgfHwKKwkgICAgKGppZmZpZXMgLSBoY3R4LT5jY2lkMmhjdHhfbGFzdHJ0dCkgPj0gaGN0eC0+Y2NpZDJoY3R4X3NydHQpIHsKKwkJdW5zaWduZWQgbG9uZyByID0gamlmZmllcyAtIHNlcXAtPmNjaWQyc19zZW50OworCQlpbnQgczsKKworCQkvKiBmaXJzdCBtZWFzdXJlbWVudCAqLworCQlpZiAoaGN0eC0+Y2NpZDJoY3R4X3NydHQgPT0gLTEpIHsKKwkJCWNjaWQyX3ByX2RlYnVnKCJSOiAlbHUgVGltZT0lbHUgc2VxPSVsbHVcbiIsCisJCQkgICAgICAgCSAgICAgICByLCBqaWZmaWVzLCBzZXFwLT5jY2lkMnNfc2VxKTsKKwkJCWhjdHgtPmNjaWQyaGN0eF9zcnR0ID0gcjsKKwkJCWhjdHgtPmNjaWQyaGN0eF9ydHR2YXIgPSByID4+IDE7CisJCX0gZWxzZSB7CisJCQkvKiBSVFRWQVIgKi8KKwkJCWxvbmcgdG1wID0gaGN0eC0+Y2NpZDJoY3R4X3NydHQgLSByOworCQkJaWYgKHRtcCA8IDApCisJCQkJdG1wICo9IC0xOworCisJCQl0bXAgPj49IDI7CisJCQloY3R4LT5jY2lkMmhjdHhfcnR0dmFyICo9IDM7CisJCQloY3R4LT5jY2lkMmhjdHhfcnR0dmFyID4+PSAyOworCQkJaGN0eC0+Y2NpZDJoY3R4X3J0dHZhciArPSB0bXA7CisKKwkJCS8qIFNSVFQgKi8KKwkJCWhjdHgtPmNjaWQyaGN0eF9zcnR0ICo9IDc7CisJCQloY3R4LT5jY2lkMmhjdHhfc3J0dCA+Pj0gMzsKKwkJCXRtcCA9IHIgPj4gMzsKKwkJCWhjdHgtPmNjaWQyaGN0eF9zcnR0ICs9IHRtcDsKKwkJfQorCQlzID0gaGN0eC0+Y2NpZDJoY3R4X3J0dHZhciA8PCAyOworCQkvKiBjbG9jayBncmFudWxhcml0eSBpcyAxIHdoZW4gYmFzZWQgb24gamlmZmllcyAqLworCQlpZiAoIXMpCisJCQlzID0gMTsKKwkJaGN0eC0+Y2NpZDJoY3R4X3J0byA9IGhjdHgtPmNjaWQyaGN0eF9zcnR0ICsgczsKKworCQkvKiBtdXN0IGJlIGF0IGxlYXN0IGEgc2Vjb25kICovCisJCXMgPSBoY3R4LT5jY2lkMmhjdHhfcnRvIC8gSFo7CisJCS8qIERDQ1AgZG9lc24ndCByZXF1aXJlIHRoaXMgW2J1dCBJIGxpa2UgaXQgY3V6IG15IGNvZGUgc3V4XSAqLworI2lmIDEKKwkJaWYgKHMgPCAxKQorCQkJaGN0eC0+Y2NpZDJoY3R4X3J0byA9IEhaOworI2VuZGlmCisJCS8qIG1heCA2MCBzZWNvbmRzICovCisJCWlmIChzID4gNjApCisJCQloY3R4LT5jY2lkMmhjdHhfcnRvID0gSFogKiA2MDsKKworCQloY3R4LT5jY2lkMmhjdHhfbGFzdHJ0dCA9IGppZmZpZXM7CisKKwkJY2NpZDJfcHJfZGVidWcoInNydHQ6ICVsZCBydHR2YXI6ICVsZCBydG86ICVsZCAoSFo9JWQpIFI9JWx1XG4iLAorCQkgICAgICAgCSAgICAgICBoY3R4LT5jY2lkMmhjdHhfc3J0dCwgaGN0eC0+Y2NpZDJoY3R4X3J0dHZhciwKKwkJICAgICAgIAkgICAgICAgaGN0eC0+Y2NpZDJoY3R4X3J0bywgSFosIHIpOworCQloY3R4LT5jY2lkMmhjdHhfc2VudCA9IDA7CisJfQorCisJLyogd2UgZ290IGEgbmV3IGFjaywgc28gcmUtc3RhcnQgUlRPIHRpbWVyICovCisJY2NpZDJfaGNfdHhfa2lsbF9ydG9fdGltZXIoc2spOworCWNjaWQyX3N0YXJ0X3J0b190aW1lcihzayk7Cit9CisKK3N0YXRpYyB2b2lkIGNjaWQyX2hjX3R4X2RlY19waXBlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQyX2hjX3R4X3NrKHNrKTsKKworCWhjdHgtPmNjaWQyaGN0eF9waXBlLS07CisJQlVHX09OKGhjdHgtPmNjaWQyaGN0eF9waXBlIDwgMCk7CisKKwlpZiAoaGN0eC0+Y2NpZDJoY3R4X3BpcGUgPT0gMCkKKwkJY2NpZDJfaGNfdHhfa2lsbF9ydG9fdGltZXIoc2spOworfQorCitzdGF0aWMgdm9pZCBjY2lkMl9oY190eF9wYWNrZXRfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKwlzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQyX2hjX3R4X3NrKHNrKTsKKwl1NjQgYWNrbm8sIHNlcW5vOworCXN0cnVjdCBjY2lkMl9zZXEgKnNlcXA7CisJdW5zaWduZWQgY2hhciAqdmVjdG9yOworCXVuc2lnbmVkIGNoYXIgdmVjbGVuOworCWludCBvZmZzZXQgPSAwOworCWludCBkb25lID0gMDsKKwlpbnQgbG9zcyA9IDA7CisJdW5zaWduZWQgaW50IG1heGluY3IgPSAwOworCisJY2NpZDJfaGNfdHhfY2hlY2tfc2FuaXR5KGhjdHgpOworCS8qIGNoZWNrIHJldmVyc2UgcGF0aCBjb25nZXN0aW9uICovCisJc2Vxbm8gPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXE7CisKKwkvKiBYWFggdGhpcyB3aG9sZSAiYWxnb3JpdGhtIiBpcyBicm9rZW4uICBOZWVkIHRvIGZpeCBpdCB0byBrZWVwIHRyYWNrCisJICogb2YgdGhlIHNlcW5vcyBvZiB0aGUgZHVwYWNrcyBzbyB0aGF0IHJwc2VxIGFuZCBycGR1cGFjayBhcmUgY29ycmVjdAorCSAqIC1zb3Jiby4KKwkgKi8KKwkvKiBuZWVkIHRvIGJvb3RzdHJhcCAqLworCWlmIChoY3R4LT5jY2lkMmhjdHhfcnBkdXBhY2sgPT0gLTEpIHsKKwkJaGN0eC0+Y2NpZDJoY3R4X3JwZHVwYWNrID0gMDsKKwkJaGN0eC0+Y2NpZDJoY3R4X3Jwc2VxID0gc2Vxbm87CisJfSBlbHNlIHsKKwkJLyogY2hlY2sgaWYgcGFja2V0IGlzIGNvbnNlY3V0aXZlICovCisJCWlmICgoaGN0eC0+Y2NpZDJoY3R4X3Jwc2VxICsgMSkgPT0gc2Vxbm8pCisJCQloY3R4LT5jY2lkMmhjdHhfcnBzZXErKzsKKwkJLyogaXQncyBhIGxhdGVyIHBhY2tldCAqLworCQllbHNlIGlmIChhZnRlcjQ4KHNlcW5vLCBoY3R4LT5jY2lkMmhjdHhfcnBzZXEpKSB7CisJCQloY3R4LT5jY2lkMmhjdHhfcnBkdXBhY2srKzsKKworCQkJLyogY2hlY2sgaWYgd2UgZ290IGVub3VnaCBkdXBhY2tzICovCisJCQlpZiAoaGN0eC0+Y2NpZDJoY3R4X3JwZHVwYWNrID49CisJCQkgICAgaGN0eC0+Y2NpZDJoY3R4X251bWR1cGFjaykgeworCQkJCWhjdHgtPmNjaWQyaGN0eF9ycGR1cGFjayA9IC0xOyAvKiBYWFggbGFtZSAqLworCQkJCWhjdHgtPmNjaWQyaGN0eF9ycHNlcSA9IDA7CisKKwkJCQljY2lkMl9jaGFuZ2VfbF9hY2tfcmF0aW8oc2ssIGRwLT5kY2Nwc19sX2Fja19yYXRpbyA8PCAxKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIGNoZWNrIGZvcndhcmQgcGF0aCBjb25nZXN0aW9uICovCisJLyogc3RpbGwgZGlkbid0IHNlbmQgb3V0IG5ldyBkYXRhIHBhY2tldHMgKi8KKwlpZiAoaGN0eC0+Y2NpZDJoY3R4X3NlcWggPT0gaGN0eC0+Y2NpZDJoY3R4X3NlcXQpCisJCXJldHVybjsKKworCXN3aXRjaCAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSkgeworCWNhc2UgRENDUF9QS1RfQUNLOgorCWNhc2UgRENDUF9QS1RfREFUQUFDSzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWFja25vID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcTsKKwlzZXFwID0gaGN0eC0+Y2NpZDJoY3R4X3NlcWgtPmNjaWQyc19wcmV2OworCisJLyogSWYgaW4gc2xvdy1zdGFydCwgY3duZCBjYW4gaW5jcmVhc2UgYXQgbW9zdCBBY2sgUmF0aW8gLyAyIHBhY2tldHMgZm9yCisJICogdGhpcyBzaW5nbGUgYWNrLiAgSSByb3VuZCB1cC4KKwkgKiAtc29yYm8uCisJICovCisJbWF4aW5jciA9IGRwLT5kY2Nwc19sX2Fja19yYXRpbyA+PiAxOworCW1heGluY3IrKzsKKworCS8qIGdvIHRocm91Z2ggYWxsIGFjayB2ZWN0b3JzICovCisJd2hpbGUgKChvZmZzZXQgPSBjY2lkMl9hY2t2ZWN0b3Ioc2ssIHNrYiwgb2Zmc2V0LAorCQkJCQkgJnZlY3RvciwgJnZlY2xlbikpICE9IC0xKSB7CisJCS8qIGdvIHRocm91Z2ggdGhpcyBhY2sgdmVjdG9yICovCisJCXdoaWxlICh2ZWNsZW4tLSkgeworCQkJY29uc3QgdTggcmwgPSAqdmVjdG9yICYgRENDUF9BQ0tWRUNfTEVOX01BU0s7CisJCQl1NjQgYWNrbm9fZW5kX3JsOworCisJCQlkY2NwX3NldF9zZXFubygmYWNrbm9fZW5kX3JsLCBhY2tubyAtIHJsKTsKKwkJCWNjaWQyX3ByX2RlYnVnKCJhY2t2ZWMgc3RhcnQ6JWxsdSBlbmQ6JWxsdVxuIiwgYWNrbm8sCisJCQkJICAgICAgIGFja25vX2VuZF9ybCk7CisJCQkvKiBpZiB0aGUgc2Vxbm8gd2UgYXJlIGFuYWx5emluZyBpcyBsYXJnZXIgdGhhbiB0aGUKKwkJCSAqIGN1cnJlbnQgYWNrbm8sIHRoZW4gbW92ZSB0b3dhcmRzIHRoZSB0YWlsIG9mIG91cgorCQkJICogc2Vxbm9zLgorCQkJICovCisJCQl3aGlsZSAoYWZ0ZXI0OChzZXFwLT5jY2lkMnNfc2VxLCBhY2tubykpIHsKKwkJCQlpZiAoc2VxcCA9PSBoY3R4LT5jY2lkMmhjdHhfc2VxdCkgeworCQkJCQlkb25lID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNlcXAgPSBzZXFwLT5jY2lkMnNfcHJldjsKKwkJCX0KKwkJCWlmIChkb25lKQorCQkJCWJyZWFrOworCisJCQkvKiBjaGVjayBhbGwgc2Vxbm9zIGluIHRoZSByYW5nZSBvZiB0aGUgdmVjdG9yCisJCQkgKiBydW4gbGVuZ3RoCisJCQkgKi8KKwkJCXdoaWxlIChiZXR3ZWVuNDgoc2VxcC0+Y2NpZDJzX3NlcSxhY2tub19lbmRfcmwsYWNrbm8pKSB7CisJCQkJY29uc3QgdTggc3RhdGUgPSAoKnZlY3RvciAmCisJCQkJCQkgIERDQ1BfQUNLVkVDX1NUQVRFX01BU0spID4+IDY7CisKKwkJCQkvKiBuZXcgcGFja2V0IHJlY2VpdmVkIG9yIG1hcmtlZCAqLworCQkJCWlmIChzdGF0ZSAhPSBEQ0NQX0FDS1ZFQ19TVEFURV9OT1RfUkVDRUlWRUQgJiYKKwkJCQkgICAgIXNlcXAtPmNjaWQyc19hY2tlZCkgeworCQkJCSAgICAJaWYgKHN0YXRlID09CisJCQkJCSAgICBEQ0NQX0FDS1ZFQ19TVEFURV9FQ05fTUFSS0VEKSB7CisJCQkJCQlsb3NzID0gMTsKKwkJCQkJfSBlbHNlCisJCQkJCQljY2lkMl9uZXdfYWNrKHNrLCBzZXFwLAorCQkJCQkJCSAgICAgICZtYXhpbmNyKTsKKworCQkJCQlzZXFwLT5jY2lkMnNfYWNrZWQgPSAxOworCQkJCQljY2lkMl9wcl9kZWJ1ZygiR290IGFjayBmb3IgJWxsdVxuIiwKKwkJCQkJICAgICAgIAkgICAgICAgc2VxcC0+Y2NpZDJzX3NlcSk7CisJCQkJCWNjaWQyX2hjX3R4X2RlY19waXBlKHNrKTsKKwkJCQl9CisJCQkJaWYgKHNlcXAgPT0gaGN0eC0+Y2NpZDJoY3R4X3NlcXQpIHsKKwkJCQkJZG9uZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzZXFwID0gc2VxcC0+Y2NpZDJzX25leHQ7CisJCQl9CisJCQlpZiAoZG9uZSkKKwkJCQlicmVhazsKKworCisJCQlkY2NwX3NldF9zZXFubygmYWNrbm8sIGFja25vX2VuZF9ybCAtIDEpOworCQkJdmVjdG9yKys7CisJCX0KKwkJaWYgKGRvbmUpCisJCQlicmVhazsKKwl9CisKKwkvKiBUaGUgc3RhdGUgYWJvdXQgd2hhdCBpcyBhY2tlZCBzaG91bGQgYmUgY29ycmVjdCBub3cKKwkgKiBDaGVjayBmb3IgTlVNRFVQQUNLCisJICovCisJc2VxcCA9IGhjdHgtPmNjaWQyaGN0eF9zZXFoLT5jY2lkMnNfcHJldjsKKwlkb25lID0gMDsKKwl3aGlsZSAoMSkgeworCQlpZiAoc2VxcC0+Y2NpZDJzX2Fja2VkKSB7CisJCQlkb25lKys7CisJCQlpZiAoZG9uZSA9PSBoY3R4LT5jY2lkMmhjdHhfbnVtZHVwYWNrKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChzZXFwID09IGhjdHgtPmNjaWQyaGN0eF9zZXF0KQorCQkJYnJlYWs7CisJCXNlcXAgPSBzZXFwLT5jY2lkMnNfcHJldjsKKwl9CisKKwkvKiBJZiB0aGVyZSBhcmUgYXQgbGVhc3QgMyBhY2tub3dsZWRnZW1lbnRzLCBhbnl0aGluZyB1bmFja25vd2xlZGdlZAorCSAqIGJlbG93IHRoZSBsYXN0IHNlcXVlbmNlIG51bWJlciBpcyBjb25zaWRlcmVkIGxvc3QKKwkgKi8KKwlpZiAoZG9uZSA9PSBoY3R4LT5jY2lkMmhjdHhfbnVtZHVwYWNrKSB7CisJCXN0cnVjdCBjY2lkMl9zZXEgKmxhc3RfYWNrZWQgPSBzZXFwOworCisJCS8qIGNoZWNrIGZvciBsb3N0IHBhY2tldHMgKi8KKwkJd2hpbGUgKDEpIHsKKwkJCWlmICghc2VxcC0+Y2NpZDJzX2Fja2VkKSB7CisJCQkJbG9zcyA9IDE7CisJCQkJY2NpZDJfaGNfdHhfZGVjX3BpcGUoc2spOworCQkJfQorCQkJaWYgKHNlcXAgPT0gaGN0eC0+Y2NpZDJoY3R4X3NlcXQpCisJCQkJYnJlYWs7CisJCQlzZXFwID0gc2VxcC0+Y2NpZDJzX3ByZXY7CisJCX0KKworCQloY3R4LT5jY2lkMmhjdHhfc2VxdCA9IGxhc3RfYWNrZWQ7CisJfQorCisJLyogdHJpbSBhY2tlZCBwYWNrZXRzIGluIHRhaWwgKi8KKwl3aGlsZSAoaGN0eC0+Y2NpZDJoY3R4X3NlcXQgIT0gaGN0eC0+Y2NpZDJoY3R4X3NlcWgpIHsKKwkJaWYgKCFoY3R4LT5jY2lkMmhjdHhfc2VxdC0+Y2NpZDJzX2Fja2VkKQorCQkJYnJlYWs7CisKKwkJaGN0eC0+Y2NpZDJoY3R4X3NlcXQgPSBoY3R4LT5jY2lkMmhjdHhfc2VxdC0+Y2NpZDJzX25leHQ7CisJfQorCisJaWYgKGxvc3MpIHsKKwkJLyogWFhYIGRvIGJpdCBzaGlmdHMgZ3VhcmFudGVlIGEgMCBhcyB0aGUgbmV3IGJpdD8gKi8KKwkJY2NpZDJfY2hhbmdlX2N3bmQoc2ssIGhjdHgtPmNjaWQyaGN0eF9jd25kID4+IDEpOworCQloY3R4LT5jY2lkMmhjdHhfc3N0aHJlc2ggPSBoY3R4LT5jY2lkMmhjdHhfY3duZDsKKwkJaWYgKGhjdHgtPmNjaWQyaGN0eF9zc3RocmVzaCA8IDIpCisJCQloY3R4LT5jY2lkMmhjdHhfc3N0aHJlc2ggPSAyOworCX0KKworCWNjaWQyX2hjX3R4X2NoZWNrX3Nhbml0eShoY3R4KTsKK30KKworc3RhdGljIGludCBjY2lkMl9oY190eF9pbml0KHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2spCit7CisgICAgICAgIHN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpoY3R4ID0gY2NpZF9wcml2KGNjaWQpOworCWludCBzZXFjb3VudCA9IGNjaWQyX3NlcV9sZW47CisJaW50IGk7CisKKwkvKiBYWFggaW5pdCB2YXJpYWJsZXMgd2l0aCBwcm9wZXIgdmFsdWVzICovCisJaGN0eC0+Y2NpZDJoY3R4X2N3bmQJICA9IDE7CisJaGN0eC0+Y2NpZDJoY3R4X3NzdGhyZXNoICA9IDEwOworCWhjdHgtPmNjaWQyaGN0eF9udW1kdXBhY2sgPSAzOworCisJLyogWFhYIGluaXQgfiB0byB3aW5kb3cgc2l6ZS4uLiAqLworCWhjdHgtPmNjaWQyaGN0eF9zZXFidWYgPSBrbWFsbG9jKHNpemVvZigqaGN0eC0+Y2NpZDJoY3R4X3NlcWJ1ZikgKgorCQkJCQkgc2VxY291bnQsIGdmcF9hbnkoKSk7CisJaWYgKGhjdHgtPmNjaWQyaGN0eF9zZXFidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgKHNlcWNvdW50IC0gMSk7IGkrKykgeworCQloY3R4LT5jY2lkMmhjdHhfc2VxYnVmW2ldLmNjaWQyc19uZXh0ID0KKwkJCQkJJmhjdHgtPmNjaWQyaGN0eF9zZXFidWZbaSArIDFdOworCQloY3R4LT5jY2lkMmhjdHhfc2VxYnVmW2kgKyAxXS5jY2lkMnNfcHJldiA9CisJCQkJCSZoY3R4LT5jY2lkMmhjdHhfc2VxYnVmW2ldOworCX0KKwloY3R4LT5jY2lkMmhjdHhfc2VxYnVmW3NlcWNvdW50IC0gMV0uY2NpZDJzX25leHQgPQorCQkJCQloY3R4LT5jY2lkMmhjdHhfc2VxYnVmOworCWhjdHgtPmNjaWQyaGN0eF9zZXFidWYtPmNjaWQyc19wcmV2ID0KKwkJCQkJJmhjdHgtPmNjaWQyaGN0eF9zZXFidWZbc2VxY291bnQgLSAxXTsKKworCWhjdHgtPmNjaWQyaGN0eF9zZXFoCSA9IGhjdHgtPmNjaWQyaGN0eF9zZXFidWY7CisJaGN0eC0+Y2NpZDJoY3R4X3NlcXQJID0gaGN0eC0+Y2NpZDJoY3R4X3NlcWg7CisJaGN0eC0+Y2NpZDJoY3R4X3NlbnQJID0gMDsKKwloY3R4LT5jY2lkMmhjdHhfcnRvCSA9IDMgKiBIWjsKKwloY3R4LT5jY2lkMmhjdHhfc3J0dAkgPSAtMTsKKwloY3R4LT5jY2lkMmhjdHhfcnR0dmFyCSA9IC0xOworCWhjdHgtPmNjaWQyaGN0eF9sYXN0cnR0ICA9IDA7CisJaGN0eC0+Y2NpZDJoY3R4X3JwZHVwYWNrID0gLTE7CisKKwloY3R4LT5jY2lkMmhjdHhfcnRvdGltZXIuZnVuY3Rpb24gPSAmY2NpZDJfaGNfdHhfcnRvX2V4cGlyZTsKKwloY3R4LT5jY2lkMmhjdHhfcnRvdGltZXIuZGF0YQkgID0gKHVuc2lnbmVkIGxvbmcpc2s7CisJaW5pdF90aW1lcigmaGN0eC0+Y2NpZDJoY3R4X3J0b3RpbWVyKTsKKworCWNjaWQyX2hjX3R4X2NoZWNrX3Nhbml0eShoY3R4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2NpZDJfaGNfdHhfZXhpdChzdHJ1Y3Qgc29jayAqc2spCit7CisgICAgICAgIHN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpoY3R4ID0gY2NpZDJfaGNfdHhfc2soc2spOworCisJY2NpZDJfaGNfdHhfa2lsbF9ydG9fdGltZXIoc2spOworCWtmcmVlKGhjdHgtPmNjaWQyaGN0eF9zZXFidWYpOworCWhjdHgtPmNjaWQyaGN0eF9zZXFidWYgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBjY2lkMl9oY19yeF9wYWNrZXRfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKwlzdHJ1Y3QgY2NpZDJfaGNfcnhfc29jayAqaGNyeCA9IGNjaWQyX2hjX3J4X3NrKHNrKTsKKworCXN3aXRjaCAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSkgeworCWNhc2UgRENDUF9QS1RfREFUQToKKwljYXNlIERDQ1BfUEtUX0RBVEFBQ0s6CisJCWhjcngtPmNjaWQyaGNyeF9kYXRhKys7CisJCWlmIChoY3J4LT5jY2lkMmhjcnhfZGF0YSA+PSBkcC0+ZGNjcHNfcl9hY2tfcmF0aW8pIHsKKwkJCWRjY3Bfc2VuZF9hY2soc2spOworCQkJaGNyeC0+Y2NpZDJoY3J4X2RhdGEgPSAwOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjY2lkX29wZXJhdGlvbnMgY2NpZDIgPSB7CisJLmNjaWRfaWQJCT0gMiwKKwkuY2NpZF9uYW1lCQk9ICJjY2lkMiIsCisJLmNjaWRfb3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmNjaWRfaGNfdHhfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IGNjaWQyX2hjX3R4X3NvY2spLAorCS5jY2lkX2hjX3R4X2luaXQJPSBjY2lkMl9oY190eF9pbml0LAorCS5jY2lkX2hjX3R4X2V4aXQJPSBjY2lkMl9oY190eF9leGl0LAorCS5jY2lkX2hjX3R4X3NlbmRfcGFja2V0CT0gY2NpZDJfaGNfdHhfc2VuZF9wYWNrZXQsCisJLmNjaWRfaGNfdHhfcGFja2V0X3NlbnQJPSBjY2lkMl9oY190eF9wYWNrZXRfc2VudCwKKwkuY2NpZF9oY190eF9wYWNrZXRfcmVjdgk9IGNjaWQyX2hjX3R4X3BhY2tldF9yZWN2LAorCS5jY2lkX2hjX3J4X29ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCBjY2lkMl9oY19yeF9zb2NrKSwKKwkuY2NpZF9oY19yeF9wYWNrZXRfcmVjdgk9IGNjaWQyX2hjX3J4X3BhY2tldF9yZWN2LAorfTsKKworbW9kdWxlX3BhcmFtKGNjaWQyX2RlYnVnLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhjY2lkMl9kZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOworCitzdGF0aWMgX19pbml0IGludCBjY2lkMl9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBjY2lkX3JlZ2lzdGVyKCZjY2lkMik7Cit9Cittb2R1bGVfaW5pdChjY2lkMl9tb2R1bGVfaW5pdCk7CisKK3N0YXRpYyBfX2V4aXQgdm9pZCBjY2lkMl9tb2R1bGVfZXhpdCh2b2lkKQoreworCWNjaWRfdW5yZWdpc3RlcigmY2NpZDIpOworfQorbW9kdWxlX2V4aXQoY2NpZDJfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbmRyZWEgQml0dGF1IDxhLmJpdHRhdUBjcy51Y2wuYWMudWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRDQ1AgVENQLUxpa2UgKENDSUQyKSBDQ0lEIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoIm5ldC1kY2NwLWNjaWQtMiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDIuaCBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxYTg3NAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICBuZXQvZGNjcC9jY2lkcy9jY2lkMi5oCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBBbmRyZWEgQml0dGF1IDxhLmJpdHRhdUBjcy51Y2wuYWMudWs+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworI2lmbmRlZiBfRENDUF9DQ0lEMl9IXworI2RlZmluZSBfRENDUF9DQ0lEMl9IXworCisjaW5jbHVkZSA8bGludXgvZGNjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICIuLi9jY2lkLmgiCisKK3N0cnVjdCBzb2NrOworCitzdHJ1Y3QgY2NpZDJfc2VxIHsKKwl1NjQJCQljY2lkMnNfc2VxOworCXVuc2lnbmVkIGxvbmcJCWNjaWQyc19zZW50OworCWludAkJCWNjaWQyc19hY2tlZDsKKwlzdHJ1Y3QgY2NpZDJfc2VxCSpjY2lkMnNfcHJldjsKKwlzdHJ1Y3QgY2NpZDJfc2VxCSpjY2lkMnNfbmV4dDsKK307CisKKy8qKiBzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayAtIENDSUQyIFRYIGhhbGYgY29ubmVjdGlvbgorICoKKyAqIEBjY2lkMmhjdHhfc3NhY2tzIC0gQUNLcyByZWN2IGluIHNsb3cgc3RhcnQKKyAqIEBjY2lkMmhjdHhfYWNrcyAtIEFDS1MgcmVjdiBpbiBBSSBwaGFzZQorICogQGNjaWQyaGN0eF9zZW50IC0gcGFja2V0cyBzZW50IGluIHRoaXMgd2luZG93CisgKiBAY2NpZDJoY3R4X2xhc3RydHQgLXRpbWUgUlRUIHdhcyBsYXN0IG1lYXN1cmVkCisgKiBAY2NpZDJoY3R4X2Fyc2VudCAtIHBhY2tldHMgc2VudCBbYWNrIHJhdGlvXQorICogQGNjaWQyaGN0eF9hY2tsb3NzIC0gYWNrIHdhcyBsb3N0IGluIHRoaXMgd2luCisgKiBAY2NpZDJoY3R4X3Jwc2VxIC0gbGFzdCBjb25zZWN1dGl2ZSBzZXFubworICogQGNjaWQyaGN0eF9ycGR1cGFjayAtIGR1cGFja3Mgc2luY2UgcnBzZXEKKyovCitzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayB7CisJaW50CQkJY2NpZDJoY3R4X2N3bmQ7CisJaW50CQkJY2NpZDJoY3R4X3NzYWNrczsKKwlpbnQJCQljY2lkMmhjdHhfYWNrczsKKwlpbnQJCQljY2lkMmhjdHhfc3N0aHJlc2g7CisJaW50CQkJY2NpZDJoY3R4X3BpcGU7CisJaW50CQkJY2NpZDJoY3R4X251bWR1cGFjazsKKwlzdHJ1Y3QgY2NpZDJfc2VxCSpjY2lkMmhjdHhfc2VxYnVmOworCXN0cnVjdCBjY2lkMl9zZXEJKmNjaWQyaGN0eF9zZXFoOworCXN0cnVjdCBjY2lkMl9zZXEJKmNjaWQyaGN0eF9zZXF0OworCWxvbmcJCQljY2lkMmhjdHhfcnRvOworCWxvbmcJCQljY2lkMmhjdHhfc3J0dDsKKwlsb25nCQkJY2NpZDJoY3R4X3J0dHZhcjsKKwlpbnQJCQljY2lkMmhjdHhfc2VudDsKKwl1bnNpZ25lZCBsb25nCQljY2lkMmhjdHhfbGFzdHJ0dDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAljY2lkMmhjdHhfcnRvdGltZXI7CisJdW5zaWduZWQgbG9uZwkJY2NpZDJoY3R4X2Fyc2VudDsKKwlpbnQJCQljY2lkMmhjdHhfYWNrbG9zczsKKwl1NjQJCQljY2lkMmhjdHhfcnBzZXE7CisJaW50CQkJY2NpZDJoY3R4X3JwZHVwYWNrOworCWludAkJCWNjaWQyaGN0eF9zZW5kd2FpdDsKK307CisKK3N0cnVjdCBjY2lkMl9oY19yeF9zb2NrIHsKKwlpbnQJY2NpZDJoY3J4X2RhdGE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpjY2lkMl9oY190eF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGNjaWRfcHJpdihkY2NwX3NrKHNrKS0+ZGNjcHNfaGNfdHhfY2NpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNjaWQyX2hjX3J4X3NvY2sgKmNjaWQyX2hjX3J4X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gY2NpZF9wcml2KGRjY3Bfc2soc2spLT5kY2Nwc19oY19yeF9jY2lkKTsKK30KKyNlbmRpZiAvKiBfRENDUF9DQ0lEMl9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKaW5kZXggYWE2OGUwYS4uYjRhNTFkMCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYworKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCkBAIC0yLDcgKzIsNyBAQAogICogIG5ldC9kY2NwL2NjaWRzL2NjaWQzLmMKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBVbml2ZXJzaXR5IG9mIFdhaWthdG8sIEhhbWlsdG9uLCBOZXcgWmVhbGFuZC4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSWFuIE1jRG9uYWxkIDxpYW00QGNzLndhaWthdG8uYWMubno+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1LTYgSWFuIE1jRG9uYWxkIDxpbWNkbnpsQGdtYWlsLmNvbT4KICAqCiAgKiAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERDQ1AgcHJvdG9jb2wKICAqCkBAIC00Niw3ICs0Niw3IEBACiAgKiBSZWFzb24gZm9yIG1hdGhzIGhlcmUgaXMgdG8gYXZvaWQgMzIgYml0IG92ZXJmbG93IHdoZW4gYSBpcyBiaWcuCiAgKiBXaXRoIHRoaXMgd2UgZ2V0IGNsb3NlIHRvIHRoZSBsaW1pdC4KICAqLwotc3RhdGljIGlubGluZSB1MzIgdXNlY3NfZGl2KGNvbnN0IHUzMiBhLCBjb25zdCB1MzIgYikKK3N0YXRpYyB1MzIgdXNlY3NfZGl2KGNvbnN0IHUzMiBhLCBjb25zdCB1MzIgYikKIHsKIAljb25zdCB1MzIgZGl2ID0gYSA8IChVSU5UX01BWCAvIChVU0VDX1BFUl9TRUMgLyAgICAxMCkpID8gICAgMTAgOgogCQkJYSA8IChVSU5UX01BWCAvIChVU0VDX1BFUl9TRUMgLyAgICA1MCkpID8gICAgNTAgOgpAQCAtNzYsMTUgKzc2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZGNjcF9yeF9oaXN0ICpjY2lkM19yeF9oaXN0Owogc3RhdGljIHN0cnVjdCBkY2NwX2xpX2hpc3QgKmNjaWQzX2xpX2hpc3Q7CiAKLXN0YXRpYyBpbnQgY2NpZDNfaW5pdChzdHJ1Y3Qgc29jayAqc2spCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNjaWQzX2V4aXQoc3RydWN0IHNvY2sgKnNrKQotewotfQotCiAvKiBURlJDIHNlbmRlciBzdGF0ZXMgKi8KIGVudW0gY2NpZDNfaGNfdHhfc3RhdGVzIHsKICAgICAgICAJVEZSQ19TU1RBVEVfTk9fU0VOVCA9IDEsCkBAIC0xMDcsOCArOTgsOCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjY2lkM19oY190eF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgZW51bSBjY2lkM19oY190eF9zdGF0ZXMgc3RhdGUpCitzdGF0aWMgdm9pZCBjY2lkM19oY190eF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgZW51bSBjY2lkM19oY190eF9zdGF0ZXMgc3RhdGUpCiB7CiAJc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgKmhjdHggPSBjY2lkM19oY190eF9zayhzayk7CiAJZW51bSBjY2lkM19oY190eF9zdGF0ZXMgb2xkc3RhdGUgPSBoY3R4LT5jY2lkM2hjdHhfc3RhdGU7CkBAIC0zMTYsOCArMzA3LDYgQEAKIAogCXN3aXRjaCAoaGN0eC0+Y2NpZDNoY3R4X3N0YXRlKSB7CiAJY2FzZSBURlJDX1NTVEFURV9OT19TRU5UOgotCQloY3R4LT5jY2lkM2hjdHhfbm9fZmVlZGJhY2tfdGltZXIuZnVuY3Rpb24gPSBjY2lkM19oY190eF9ub19mZWVkYmFja190aW1lcjsKLQkJaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpc2s7CiAJCXNrX3Jlc2V0X3RpbWVyKHNrLCAmaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyLAogCQkJICAgICAgIGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKFRGUkNfSU5JVElBTF9USU1FT1VUKSk7CiAJCWhjdHgtPmNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudAkgPSAwOwpAQCAtNTg1LDE2ICs1NzQsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGNjaWQzX2hjX3R4X2luc2VydF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgY2NpZDNfaGNfdHhfaW5zZXJ0X29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNvbnN0IHN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZDNfaGNfdHhfc2soc2spOwogCiAJQlVHX09OKGhjdHggPT0gTlVMTCk7CiAKLQlpZiAoIShzay0+c2tfc3RhdGUgPT0gRENDUF9PUEVOIHx8IHNrLT5za19zdGF0ZSA9PSBEQ0NQX1BBUlRPUEVOKSkKLQkJcmV0dXJuOwotCi0JIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2NjdmFsID0gaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50OworCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9PUEVOIHx8IHNrLT5za19zdGF0ZSA9PSBEQ0NQX1BBUlRPUEVOKQorCQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9jY3ZhbCA9IGhjdHgtPmNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjY2lkM19oY190eF9wYXJzZV9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgY2hhciBvcHRpb24sCkBAIC02MjYsNyArNjE0LDcgQEAKIAkJCQkgICAgICAgX19GVU5DVElPTl9fLCBkY2NwX3JvbGUoc2spLCBzayk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCX0gZWxzZSB7Ci0JCQlvcHRfcmVjdi0+Y2NpZDNvcl9sb3NzX2V2ZW50X3JhdGUgPSBudG9obCgqKHUzMiAqKXZhbHVlKTsKKwkJCW9wdF9yZWN2LT5jY2lkM29yX2xvc3NfZXZlbnRfcmF0ZSA9IG50b2hsKCooX19iZTMyICopdmFsdWUpOwogCQkJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgTE9TU19FVkVOVF9SQVRFPSV1XG4iLAogCQkJCSAgICAgICBkY2NwX3JvbGUoc2spLCBzaywKIAkJCQkgICAgICAgb3B0X3JlY3YtPmNjaWQzb3JfbG9zc19ldmVudF9yYXRlKTsKQEAgLTY0Nyw3ICs2MzUsNyBAQAogCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRjY3Bfcm9sZShzayksIHNrKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJfSBlbHNlIHsKLQkJCW9wdF9yZWN2LT5jY2lkM29yX3JlY2VpdmVfcmF0ZSA9IG50b2hsKCoodTMyICopdmFsdWUpOworCQkJb3B0X3JlY3YtPmNjaWQzb3JfcmVjZWl2ZV9yYXRlID0gbnRvaGwoKihfX2JlMzIgKil2YWx1ZSk7CiAJCQljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwLCBSRUNFSVZFX1JBVEU9JXVcbiIsCiAJCQkJICAgICAgIGRjY3Bfcm9sZShzayksIHNrLAogCQkJCSAgICAgICBvcHRfcmVjdi0+Y2NpZDNvcl9yZWNlaXZlX3JhdGUpOwpAQCAtNjU4LDE3ICs2NDYsMTAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgY2NpZDNfaGNfdHhfaW5pdChzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW50IGNjaWQzX2hjX3R4X2luaXQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCXN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4OwotCi0JZHAtPmRjY3BzX2hjX3R4X2NjaWRfcHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKCpoY3R4KSwgZ2ZwX2FueSgpKTsKLQlpZiAoZHAtPmRjY3BzX2hjX3R4X2NjaWRfcHJpdmF0ZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWhjdHggPSBjY2lkM19oY190eF9zayhzayk7Ci0JbWVtc2V0KGhjdHgsIDAsIHNpemVvZigqaGN0eCkpOworCXN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4ID0gY2NpZF9wcml2KGNjaWQpOwogCiAJaWYgKGRwLT5kY2Nwc19wYWNrZXRfc2l6ZSA+PSBURlJDX01JTl9QQUNLRVRfU0laRSAmJgogCSAgICBkcC0+ZGNjcHNfcGFja2V0X3NpemUgPD0gVEZSQ19NQVhfUEFDS0VUX1NJWkUpCkBAIC02ODEsNiArNjYyLDkgQEAKIAloY3R4LT5jY2lkM2hjdHhfdF9ydG8gPSBVU0VDX1BFUl9TRUM7CiAJaGN0eC0+Y2NpZDNoY3R4X3N0YXRlID0gVEZSQ19TU1RBVEVfTk9fU0VOVDsKIAlJTklUX0xJU1RfSEVBRCgmaGN0eC0+Y2NpZDNoY3R4X2hpc3QpOworCisJaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyLmZ1bmN0aW9uID0gY2NpZDNfaGNfdHhfbm9fZmVlZGJhY2tfdGltZXI7CisJaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpc2s7CiAJaW5pdF90aW1lcigmaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyKTsKIAogCXJldHVybiAwOwpAQCAtNjg4LDcgKzY3Miw2IEBACiAKIHN0YXRpYyB2b2lkIGNjaWQzX2hjX3R4X2V4aXQoc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgKmhjdHggPSBjY2lkM19oY190eF9zayhzayk7CiAKIAlCVUdfT04oaGN0eCA9PSBOVUxMKTsKQEAgLTY5OCw5ICs2ODEsNiBAQAogCiAJLyogRW1wdHkgcGFja2V0IGhpc3RvcnkgKi8KIAlkY2NwX3R4X2hpc3RfcHVyZ2UoY2NpZDNfdHhfaGlzdCwgJmhjdHgtPmNjaWQzaGN0eF9oaXN0KTsKLQotCWtmcmVlKGRwLT5kY2Nwc19oY190eF9jY2lkX3ByaXZhdGUpOwotCWRwLT5kY2Nwc19oY190eF9jY2lkX3ByaXZhdGUgPSBOVUxMOwogfQogCiAvKgpAQCAtNzI3LDggKzcwNyw4IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIGNjaWQzX2hjX3J4X3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSBlbnVtIGNjaWQzX2hjX3J4X3N0YXRlcyBzdGF0ZSkKK3N0YXRpYyB2b2lkIGNjaWQzX2hjX3J4X3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICBlbnVtIGNjaWQzX2hjX3J4X3N0YXRlcyBzdGF0ZSkKIHsKIAlzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayAqaGNyeCA9IGNjaWQzX2hjX3J4X3NrKHNrKTsKIAllbnVtIGNjaWQzX2hjX3J4X3N0YXRlcyBvbGRzdGF0ZSA9IGhjcngtPmNjaWQzaGNyeF9zdGF0ZTsKQEAgLTc5MywzMSArNzczLDM1IEBACiAJZGNjcF9zZW5kX2Fjayhzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGNjaWQzX2hjX3J4X2luc2VydF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgY2NpZDNfaGNfcnhfaW5zZXJ0X29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNvbnN0IHN0cnVjdCBjY2lkM19oY19yeF9zb2NrICpoY3J4ID0gY2NpZDNfaGNfcnhfc2soc2spOwotCXUzMiB4X3JlY3YsIHBpbnY7CisJX19iZTMyIHhfcmVjdiwgcGludjsKIAogCUJVR19PTihoY3J4ID09IE5VTEwpOwogCiAJaWYgKCEoc2stPnNrX3N0YXRlID09IERDQ1BfT1BFTiB8fCBzay0+c2tfc3RhdGUgPT0gRENDUF9QQVJUT1BFTikpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9jY3ZhbCA9IGhjcngtPmNjaWQzaGNyeF9sYXN0X2NvdW50ZXI7CiAKIAlpZiAoZGNjcF9wYWNrZXRfd2l0aG91dF9hY2soc2tiKSkKLQkJcmV0dXJuOwotCQkKLQlpZiAoaGNyeC0+Y2NpZDNoY3J4X2VsYXBzZWRfdGltZSAhPSAwKQotCQlkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKHNrLCBza2IsCi0JCQkJCQloY3J4LT5jY2lkM2hjcnhfZWxhcHNlZF90aW1lKTsKLQlkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHNrLCBza2IpOworCQlyZXR1cm4gMDsKKwogCXhfcmVjdiA9IGh0b25sKGhjcngtPmNjaWQzaGNyeF94X3JlY3YpOwogCXBpbnYgICA9IGh0b25sKGhjcngtPmNjaWQzaGNyeF9waW52KTsKLQlkY2NwX2luc2VydF9vcHRpb24oc2ssIHNrYiwgVEZSQ19PUFRfTE9TU19FVkVOVF9SQVRFLAotCQkJICAgJnBpbnYsIHNpemVvZihwaW52KSk7Ci0JZGNjcF9pbnNlcnRfb3B0aW9uKHNrLCBza2IsIFRGUkNfT1BUX1JFQ0VJVkVfUkFURSwKLQkJCSAgICZ4X3JlY3YsIHNpemVvZih4X3JlY3YpKTsKKworCWlmICgoaGNyeC0+Y2NpZDNoY3J4X2VsYXBzZWRfdGltZSAhPSAwICYmCisJICAgICBkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKHNrLCBza2IsCisJCQkJCSAgICAgaGNyeC0+Y2NpZDNoY3J4X2VsYXBzZWRfdGltZSkpIHx8CisJICAgIGRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXAoc2ssIHNrYikgfHwKKwkgICAgZGNjcF9pbnNlcnRfb3B0aW9uKHNrLCBza2IsIFRGUkNfT1BUX0xPU1NfRVZFTlRfUkFURSwKKwkJICAgIAkgICAgICAgJnBpbnYsIHNpemVvZihwaW52KSkgfHwKKwkgICAgZGNjcF9pbnNlcnRfb3B0aW9uKHNrLCBza2IsIFRGUkNfT1BUX1JFQ0VJVkVfUkFURSwKKwkJICAgIAkgICAgICAgJnhfcmVjdiwgc2l6ZW9mKHhfcmVjdikpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogY2FsY3VsYXRlIGZpcnN0IGxvc3MgaW50ZXJ2YWwKQEAgLTEwMzMsOSArMTAxNywxMyBAQAogCXBfcHJldiA9IGhjcngtPmNjaWQzaGNyeF9wOwogCQogCS8qIENhbGN1bGF0ZSBsb3NzIGV2ZW50IHJhdGUgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmhjcngtPmNjaWQzaGNyeF9saV9oaXN0KSkKKwlpZiAoIWxpc3RfZW1wdHkoJmhjcngtPmNjaWQzaGNyeF9saV9oaXN0KSkgeworCQl1MzIgaV9tZWFuID0gZGNjcF9saV9oaXN0X2NhbGNfaV9tZWFuKCZoY3J4LT5jY2lkM2hjcnhfbGlfaGlzdCk7CisKIAkJLyogU2NhbGluZyB1cCBieSAxMDAwMDAwIGFzIGZpeGVkIGRlY2ltYWwgKi8KLQkJaGNyeC0+Y2NpZDNoY3J4X3AgPSAxMDAwMDAwIC8gZGNjcF9saV9oaXN0X2NhbGNfaV9tZWFuKCZoY3J4LT5jY2lkM2hjcnhfbGlfaGlzdCk7CisJCWlmIChpX21lYW4gIT0gMCkKKwkJCWhjcngtPmNjaWQzaGNyeF9wID0gMTAwMDAwMCAvIGlfbWVhbjsKKwl9CiAKIAlpZiAoaGNyeC0+Y2NpZDNoY3J4X3AgPiBwX3ByZXYpIHsKIAkJY2NpZDNfaGNfcnhfc2VuZF9mZWVkYmFjayhzayk7CkBAIC0xMDQzLDIwICsxMDMxLDEzIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGNjaWQzX2hjX3J4X2luaXQoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGludCBjY2lkM19oY19yeF9pbml0KHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLQlzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayAqaGNyeDsKKwlzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayAqaGNyeCA9IGNjaWRfcHJpdihjY2lkKTsKIAogCWNjaWQzX3ByX2RlYnVnKCIlcywgc2s9JXBcbiIsIGRjY3Bfcm9sZShzayksIHNrKTsKIAotCWRwLT5kY2Nwc19oY19yeF9jY2lkX3ByaXZhdGUgPSBrbWFsbG9jKHNpemVvZigqaGNyeCksIGdmcF9hbnkoKSk7Ci0JaWYgKGRwLT5kY2Nwc19oY19yeF9jY2lkX3ByaXZhdGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQloY3J4ID0gY2NpZDNfaGNfcnhfc2soc2spOwotCW1lbXNldChoY3J4LCAwLCBzaXplb2YoKmhjcngpKTsKLQogCWlmIChkcC0+ZGNjcHNfcGFja2V0X3NpemUgPj0gVEZSQ19NSU5fUEFDS0VUX1NJWkUgJiYKIAkgICAgZHAtPmRjY3BzX3BhY2tldF9zaXplIDw9IFRGUkNfTUFYX1BBQ0tFVF9TSVpFKQogCQloY3J4LT5jY2lkM2hjcnhfcyA9IGRwLT5kY2Nwc19wYWNrZXRfc2l6ZTsKQEAgLTEwNzUsNyArMTA1Niw2IEBACiBzdGF0aWMgdm9pZCBjY2lkM19oY19yeF9leGl0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayAqaGNyeCA9IGNjaWQzX2hjX3J4X3NrKHNrKTsKLQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCiAJQlVHX09OKGhjcnggPT0gTlVMTCk7CiAKQEAgLTEwODYsOSArMTA2Niw2IEBACiAKIAkvKiBFbXB0eSBsb3NzIGludGVydmFsIGhpc3RvcnkgKi8KIAlkY2NwX2xpX2hpc3RfcHVyZ2UoY2NpZDNfbGlfaGlzdCwgJmhjcngtPmNjaWQzaGNyeF9saV9oaXN0KTsKLQotCWtmcmVlKGRwLT5kY2Nwc19oY19yeF9jY2lkX3ByaXZhdGUpOwotCWRwLT5kY2Nwc19oY19yeF9jY2lkX3ByaXZhdGUgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBjY2lkM19oY19yeF9nZXRfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3BfaW5mbyAqaW5mbykKQEAgLTExNzQsMTIgKzExNTEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjY2lkIGNjaWQzID0geworc3RhdGljIHN0cnVjdCBjY2lkX29wZXJhdGlvbnMgY2NpZDMgPSB7CiAJLmNjaWRfaWQJCSAgID0gMywKIAkuY2NpZF9uYW1lCQkgICA9ICJjY2lkMyIsCiAJLmNjaWRfb3duZXIJCSAgID0gVEhJU19NT0RVTEUsCi0JLmNjaWRfaW5pdAkJICAgPSBjY2lkM19pbml0LAotCS5jY2lkX2V4aXQJCSAgID0gY2NpZDNfZXhpdCwKKwkuY2NpZF9oY190eF9vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayksCiAJLmNjaWRfaGNfdHhfaW5pdAkgICA9IGNjaWQzX2hjX3R4X2luaXQsCiAJLmNjaWRfaGNfdHhfZXhpdAkgICA9IGNjaWQzX2hjX3R4X2V4aXQsCiAJLmNjaWRfaGNfdHhfc2VuZF9wYWNrZXQJICAgPSBjY2lkM19oY190eF9zZW5kX3BhY2tldCwKQEAgLTExODcsNiArMTE2Myw3IEBACiAJLmNjaWRfaGNfdHhfcGFja2V0X3JlY3YJICAgPSBjY2lkM19oY190eF9wYWNrZXRfcmVjdiwKIAkuY2NpZF9oY190eF9pbnNlcnRfb3B0aW9ucyA9IGNjaWQzX2hjX3R4X2luc2VydF9vcHRpb25zLAogCS5jY2lkX2hjX3R4X3BhcnNlX29wdGlvbnMgID0gY2NpZDNfaGNfdHhfcGFyc2Vfb3B0aW9ucywKKwkuY2NpZF9oY19yeF9vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayksCiAJLmNjaWRfaGNfcnhfaW5pdAkgICA9IGNjaWQzX2hjX3J4X2luaXQsCiAJLmNjaWRfaGNfcnhfZXhpdAkgICA9IGNjaWQzX2hjX3J4X2V4aXQsCiAJLmNjaWRfaGNfcnhfaW5zZXJ0X29wdGlvbnMgPSBjY2lkM19oY19yeF9pbnNlcnRfb3B0aW9ucywKQEAgLTEyMzcsMTUgKzEyMTQsNiBAQAogCiBzdGF0aWMgX19leGl0IHZvaWQgY2NpZDNfbW9kdWxlX2V4aXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9VTkxPQURfSEFDSwotCS8qCi0JICogSGFjayB0byB1c2Ugd2hpbGUgZGV2ZWxvcGluZywgc28gdGhhdCB3ZSBnZXQgcmlkIG9mIHRoZSBjb250cm9sCi0JICogc29jaywgdGhhdCBpcyB3aGF0IGtlZXBzIGEgcmVmY291bnQgb24gZGNjcC5rbyAtYWNtZQotCSAqLwotCWV4dGVybiB2b2lkIGRjY3BfY3RsX3NvY2tfZXhpdCh2b2lkKTsKLQotCWRjY3BfY3RsX3NvY2tfZXhpdCgpOwotI2VuZGlmCiAJY2NpZF91bnJlZ2lzdGVyKCZjY2lkMyk7CiAKIAlpZiAoY2NpZDNfdHhfaGlzdCAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAppbmRleCAwYmRlNDU4Li5mMThiOTZkNCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAorKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGZyYy5oPgorI2luY2x1ZGUgIi4uL2NjaWQuaCIKIAogI2RlZmluZSBURlJDX01JTl9QQUNLRVRfU0laRQkgICAxNgogI2RlZmluZSBURlJDX1NURF9QQUNLRVRfU0laRQkgIDI1NgpAQCAtMTM1LDEyICsxMzYsMTIgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqY2NpZDNfaGNfdHhfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewotICAgIHJldHVybiBkY2NwX3NrKHNrKS0+ZGNjcHNfaGNfdHhfY2NpZF9wcml2YXRlOworICAgIHJldHVybiBjY2lkX3ByaXYoZGNjcF9zayhzayktPmRjY3BzX2hjX3R4X2NjaWQpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjY2lkM19oY19yeF9zb2NrICpjY2lkM19oY19yeF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0gICAgcmV0dXJuIGRjY3Bfc2soc2spLT5kY2Nwc19oY19yeF9jY2lkX3ByaXZhdGU7CisgICAgcmV0dXJuIGNjaWRfcHJpdihkY2NwX3NrKHNrKS0+ZGNjcHNfaGNfcnhfY2NpZCk7CiB9CiAKICNlbmRpZiAvKiBfRENDUF9DQ0lEM19IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZGNjcC5oIGIvbmV0L2RjY3AvZGNjcC5oCmluZGV4IDkzZjI2ZGQuLjFmZTUwOTEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2RjY3AuaAorKysgYi9uZXQvZGNjcC9kY2NwLmgKQEAgLTU5LDggKzU5LDYgQEAKIAogI2RlZmluZSBEQ0NQX1JUT19NQVggKCh1bnNpZ25lZCkoMTIwICogSFopKSAvKiBGSVhNRTogdXNpbmcgVENQIHZhbHVlICovCiAKLWV4dGVybiBzdHJ1Y3QgcHJvdG8gZGNjcF9wcm90OwotCiAvKiBpcyBzZXExIDwgc2VxMiA/ICovCiBzdGF0aWMgaW5saW5lIGludCBiZWZvcmU0OChjb25zdCB1NjQgc2VxMSwgY29uc3QgdTY0IHNlcTIpCiB7CkBAIC0xMjAsNyArMTE4LDYgQEAKIAogZXh0ZXJuIGludCAgZGNjcF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCi1leHRlcm4gaW50IGRjY3Bfc2VuZF9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIHZvaWQgZGNjcF9zZW5kX2FjayhzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIHZvaWQgZGNjcF9zZW5kX2RlbGF5ZWRfYWNrKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gdm9pZCBkY2NwX3NlbmRfc3luYyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHU2NCBzZXEsCkBAIC0xNDAsNTMgKzEzNyw4IEBACiBleHRlcm4gY29uc3QgY2hhciAqZGNjcF9wYWNrZXRfbmFtZShjb25zdCBpbnQgdHlwZSk7CiBleHRlcm4gY29uc3QgY2hhciAqZGNjcF9zdGF0ZV9uYW1lKGNvbnN0IGludCBzdGF0ZSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBzdGF0ZSkKLXsKLQljb25zdCBpbnQgb2xkc3RhdGUgPSBzay0+c2tfc3RhdGU7Ci0KLQlkY2NwX3ByX2RlYnVnKCIlcyglcCkgJS0xMC4xMHMgLT4gJXNcbiIsCi0JCSAgICAgIGRjY3Bfcm9sZShzayksIHNrLAotCQkgICAgICBkY2NwX3N0YXRlX25hbWUob2xkc3RhdGUpLCBkY2NwX3N0YXRlX25hbWUoc3RhdGUpKTsKLQlXQVJOX09OKHN0YXRlID09IG9sZHN0YXRlKTsKLQotCXN3aXRjaCAoc3RhdGUpIHsKLQljYXNlIERDQ1BfT1BFTjoKLQkJaWYgKG9sZHN0YXRlICE9IERDQ1BfT1BFTikKLQkJCURDQ1BfSU5DX1NUQVRTKERDQ1BfTUlCX0NVUlJFU1RBQik7Ci0JCWJyZWFrOwotCi0JY2FzZSBEQ0NQX0NMT1NFRDoKLQkJaWYgKG9sZHN0YXRlID09IERDQ1BfQ0xPU0lORyB8fCBvbGRzdGF0ZSA9PSBEQ0NQX09QRU4pCi0JCQlEQ0NQX0lOQ19TVEFUUyhEQ0NQX01JQl9FU1RBQlJFU0VUUyk7Ci0KLQkJc2stPnNrX3Byb3QtPnVuaGFzaChzayk7Ci0JCWlmIChpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoICE9IE5VTEwgJiYKLQkJICAgICEoc2stPnNrX3VzZXJsb2NrcyAmIFNPQ0tfQklORFBPUlRfTE9DSykpCi0JCQlpbmV0X3B1dF9wb3J0KCZkY2NwX2hhc2hpbmZvLCBzayk7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWRlZmF1bHQ6Ci0JCWlmIChvbGRzdGF0ZSA9PSBEQ0NQX09QRU4pCi0JCQlEQ0NQX0RFQ19TVEFUUyhEQ0NQX01JQl9DVVJSRVNUQUIpOwotCX0KLQotCS8qIENoYW5nZSBzdGF0ZSBBRlRFUiBzb2NrZXQgaXMgdW5oYXNoZWQgdG8gYXZvaWQgY2xvc2VkCi0JICogc29ja2V0IHNpdHRpbmcgaW4gaGFzaCB0YWJsZXMuCi0JICovCi0Jc2stPnNrX3N0YXRlID0gc3RhdGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2RvbmUoc3RydWN0IHNvY2sgKnNrKQotewotCWRjY3Bfc2V0X3N0YXRlKHNrLCBEQ0NQX0NMT1NFRCk7Ci0JZGNjcF9jbGVhcl94bWl0X3RpbWVycyhzayk7Ci0KLQlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOwotCi0JaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpCi0JCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOwotCWVsc2UKLQkJaW5ldF9jc2tfZGVzdHJveV9zb2NrKHNrKTsKLX0KK2V4dGVybiB2b2lkIGRjY3Bfc2V0X3N0YXRlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgaW50IHN0YXRlKTsKK2V4dGVybiB2b2lkIGRjY3BfZG9uZShzdHJ1Y3Qgc29jayAqc2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF9vcGVucmVxX2luaXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQkJCSAgICAgc3RydWN0IGRjY3Bfc29jayAqZHAsCkBAIC0yMDksMTAgKzE2MSw2IEBACiAKIGV4dGVybiBpbnQgZGNjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotZXh0ZXJuIHZvaWQgZGNjcF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyKTsKLQotZXh0ZXJuIGludCBkY2NwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQogZXh0ZXJuIHN0cnVjdCBzb2NrICpkY2NwX3Y0X3JlcXVlc3RfcmVjdl9zb2NrKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLApAQCAtMjI4LDI0ICsxNzYsMzAgQEAKIGV4dGVybiBpbnQgZGNjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGgsIGNvbnN0IHVuc2lnbmVkIGxlbik7CiAKLWV4dGVybiBpbnQgZGNjcF92NF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKLWV4dGVybiBpbnQgZGNjcF92NF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBpbnQgZGNjcF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrLCBjb25zdCBfX3U4IGN0bF9zb2NrX2luaXRpYWxpemVkKTsKK2V4dGVybiBpbnQgZGNjcF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKIAogZXh0ZXJuIHZvaWQJCWRjY3BfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpOwogZXh0ZXJuIHN0cnVjdCBza19idWZmCSpkY2NwX21ha2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZgkqZGNjcF9tYWtlX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywKLQkJCQkJIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCQkJIGVudW0gZGNjcF9yZXNldF9jb2RlcyBjb2RlKTsKIAogZXh0ZXJuIGludAkgICBkY2NwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQJICAgZGNjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkCSAgIGRjY3BfaGFzaChzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIHZvaWQJICAgZGNjcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQJICAgZGNjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOwogZXh0ZXJuIGludAkgICBkY2NwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworI2lmZGVmIENPTkZJR19DT01QQVQKK2V4dGVybiBpbnQJICAgY29tcGF0X2RjY3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworZXh0ZXJuIGludAkgICBjb21wYXRfZGNjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywKKwkJCQlpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCWNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworI2VuZGlmCiBleHRlcm4gaW50CSAgIGRjY3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gaW50CSAgIGRjY3Bfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKIAkJCQlzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKTsKQEAgLTI2MiwxNSArMjE2LDE0IEBACiAJCQkJICAgaW50IGFkZHJfbGVuKTsKIAogZXh0ZXJuIGludAkgICBkY2NwX3Y0X2NoZWNrc3VtKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIGNvbnN0IHUzMiBzYWRkciwgY29uc3QgdTMyIGRhZGRyKTsKKwkJCQkgICAgY29uc3QgX19iZTMyIHNhZGRyLCBjb25zdCBfX2JlMzIgZGFkZHIpOwogCi1leHRlcm4gaW50CSAgIGRjY3BfdjRfc2VuZF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJICAgICAgZW51bSBkY2NwX3Jlc2V0X2NvZGVzIGNvZGUpOworZXh0ZXJuIGludAkgICBkY2NwX3NlbmRfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIGRjY3BfcmVzZXRfY29kZXMgY29kZSk7CiBleHRlcm4gdm9pZAkgICBkY2NwX3NlbmRfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgYWN0aXZlKTsKIGV4dGVybiBpbnQJICAgZGNjcF9pbnZhbGlkX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9iYWRfc2VydmljZV9jb2RlKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKLQkJCQkJY29uc3QgX191MzIgc2VydmljZSkKKwkJCQkJY29uc3QgX19iZTMyIHNlcnZpY2UpCiB7CiAJY29uc3Qgc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIApAQCAtMzM0LDQxICsyODcsMjkgQEAKIHsKIAlzdHJ1Y3QgZGNjcF9oZHJfZXh0ICpkaHggPSAoc3RydWN0IGRjY3BfaGRyX2V4dCAqKSgodm9pZCAqKWRoICsKIAkJCQkJCQkgICBzaXplb2YoKmRoKSk7Ci0KLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKLQlkaC0+ZGNjcGhfc2VxCSAgID0gaHRvbmwoKGdzcyA+PiAzMikpID4+IDg7Ci0jZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKLQlkaC0+ZGNjcGhfc2VxCSAgID0gaHRvbmwoKGdzcyA+PiAzMikpOwotI2Vsc2UKLSNlcnJvciAgIkFkanVzdCB5b3VyIDxhc20vYnl0ZW9yZGVyLmg+IGRlZmluZXMiCi0jZW5kaWYKKwlkaC0+ZGNjcGhfc2VxMiA9IDA7CisJZGgtPmRjY3BoX3NlcSA9IGh0b25zKChnc3MgPj4gMzIpICYgMHhmZmZmZik7CiAJZGh4LT5kY2NwaF9zZXFfbG93ID0gaHRvbmwoZ3NzICYgMHhmZmZmZmZmZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2hkcl9zZXRfYWNrKHN0cnVjdCBkY2NwX2hkcl9hY2tfYml0cyAqZGhhY2ssCiAJCQkJICAgIGNvbnN0IHU2NCBnc3IpCiB7Ci0jaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCi0JZGhhY2stPmRjY3BoX2Fja19ucl9oaWdoID0gaHRvbmwoKGdzciA+PiAzMikpID4+IDg7Ci0jZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKLQlkaGFjay0+ZGNjcGhfYWNrX25yX2hpZ2ggPSBodG9ubCgoZ3NyID4+IDMyKSk7Ci0jZWxzZQotI2Vycm9yICAiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKLSNlbmRpZgorCWRoYWNrLT5kY2NwaF9yZXNlcnZlZDEgPSAwOworCWRoYWNrLT5kY2NwaF9hY2tfbnJfaGlnaCA9IGh0b25zKGdzciA+PiAzMik7CiAJZGhhY2stPmRjY3BoX2Fja19ucl9sb3cgID0gaHRvbmwoZ3NyICYgMHhmZmZmZmZmZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3VwZGF0ZV9nc3Ioc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJY29uc3Qgc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CiAKIAlkcC0+ZGNjcHNfZ3NyID0gc2VxOwogCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfc3dsLAotCQkgICAgICAgKGRwLT5kY2Nwc19nc3IgKyAxIC0KLQkJICAgICAgICAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VxdWVuY2Vfd2luZG93IC8gNCkpKTsKKwkJICAgICAgIGRwLT5kY2Nwc19nc3IgKyAxIC0gKGRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgLyA0KSk7CiAJZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19zd2gsCi0JCSAgICAgICAoZHAtPmRjY3BzX2dzciArCi0JCQkoMyAqIGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlcXVlbmNlX3dpbmRvdykgLyA0KSk7CisJCSAgICAgICBkcC0+ZGNjcHNfZ3NyICsgKDMgKiBkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93KSAvIDQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF91cGRhdGVfZ3NzKHN0cnVjdCBzb2NrICpzaywgdTY0IHNlcSkKQEAgLTM3OCw3ICszMTksNyBAQAogCWRwLT5kY2Nwc19hd2ggPSBkcC0+ZGNjcHNfZ3NzID0gc2VxOwogCWRjY3Bfc2V0X3NlcW5vKCZkcC0+ZGNjcHNfYXdsLAogCQkgICAgICAgKGRwLT5kY2Nwc19nc3MgLQotCQkJZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VxdWVuY2Vfd2luZG93ICsgMSkpOworCQkJZGNjcF9tc2soc2spLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ICsgMSkpOwogfQogCQkJCQogc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2tfcGVuZGluZyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCkBAIC0zODYsMjQgKzMyNywyMiBAQAogCWNvbnN0IHN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJcmV0dXJuIGRwLT5kY2Nwc190aW1lc3RhbXBfZWNobyAhPSAwIHx8CiAjaWZkZWYgQ09ORklHX0lQX0RDQ1BfQUNLVkVDCi0JICAgICAgIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IgJiYKKwkgICAgICAgKGRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlbmRfYWNrX3ZlY3RvciAmJgogCQlkY2NwX2Fja3ZlY19wZW5kaW5nKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMpKSB8fAogI2VuZGlmCiAJICAgICAgIGluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spOwogfQogCi1leHRlcm4gdm9pZCBkY2NwX2luc2VydF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gdm9pZCBkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKHN0cnVjdCBzb2NrICpzaywKK2V4dGVybiBpbnQgZGNjcF9pbnNlcnRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCBkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgICB1MzIgZWxhcHNlZF90aW1lKTsKLWV4dGVybiB2b2lkIGRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrLAorZXh0ZXJuIGludCBkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIHZvaWQgZGNjcF9pbnNlcnRfb3B0aW9uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2V4dGVybiBpbnQgZGNjcF9pbnNlcnRfb3B0aW9uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG9wdGlvbiwKIAkJCSAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgdW5zaWduZWQgY2hhciBsZW4pOwogCi1leHRlcm4gc3RydWN0IHNvY2tldCAqZGNjcF9jdGxfc29ja2V0OwotCiBleHRlcm4gdm9pZCBkY2NwX3RpbWVzdGFtcChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0aW1ldmFsICp0dik7CiAKIHN0YXRpYyBpbmxpbmUgc3VzZWNvbmRzX3QgdGltZXZhbF91c2Vjcyhjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpCkBAIC00NDQsNCArMzgzLDE4IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX1NZU0NUTAorZXh0ZXJuIGludCBkY2NwX3N5c2N0bF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZGNjcF9zeXNjdGxfZXhpdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBkY2NwX3N5c2N0bF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3N5c2N0bF9leGl0KHZvaWQpCit7Cit9CisjZW5kaWYKKwogI2VuZGlmIC8qIF9EQ0NQX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2RpYWcuYyBiL25ldC9kY2NwL2RpYWcuYwppbmRleCAzZjc4YzAwLi4wZjI1ZGMzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9kaWFnLmMKKysrIGIvbmV0L2RjY3AvZGlhZy5jCkBAIC0zMCw3ICszMCw3IEBACiAJaW5mby0+dGNwaV9iYWNrb2ZmCT0gaWNzay0+aWNza19iYWNrb2ZmOwogCWluZm8tPnRjcGlfcG10dQkJPSBpY3NrLT5pY3NrX3BtdHVfY29va2llOwogCi0JaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvcikKKwlpZiAoZGNjcF9tc2soc2spLT5kY2NwbXNfc2VuZF9hY2tfdmVjdG9yKQogCQlpbmZvLT50Y3BpX29wdGlvbnMgfD0gVENQSV9PUFRfU0FDSzsKIAogCWNjaWRfaGNfcnhfZ2V0X2luZm8oZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrLCBpbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuYyBiL25ldC9kY2NwL2ZlYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2RkMzBkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2RjY3AvZmVhdC5jCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICogIG5ldC9kY2NwL2ZlYXQuYworICoKKyAqICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRENDUCBwcm90b2NvbAorICogIEFuZHJlYSBCaXR0YXUgPGEuYml0dGF1QGNzLnVjbC5hYy51az4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiZGNjcC5oIgorI2luY2x1ZGUgImNjaWQuaCIKKyNpbmNsdWRlICJmZWF0LmgiCisKKyNkZWZpbmUgRENDUF9GRUFUX1NQX05PQUdSRUUgKC0xMjMpCisKK2ludCBkY2NwX2ZlYXRfY2hhbmdlKHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrLCB1OCB0eXBlLCB1OCBmZWF0dXJlLAorCQkgICAgIHU4ICp2YWwsIHU4IGxlbiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBkY2NwX29wdF9wZW5kICpvcHQ7CisKKwlkY2NwX3ByX2RlYnVnKCJmZWF0IGNoYW5nZSB0eXBlPSVkIGZlYXQ9JWRcbiIsIHR5cGUsIGZlYXR1cmUpOworCisJLyogWFhYIHNhbml0eSBjaGVjayBmZWF0IGNoYW5nZSByZXF1ZXN0ICovCisKKwkvKiBjaGVjayBpZiB0aGF0IGZlYXR1cmUgaXMgYWxyZWFkeSBiZWluZyBuZWdvdGlhdGVkICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHQsICZkbXNrLT5kY2NwbXNfcGVuZGluZywgZGNjcG9wX25vZGUpIHsKKwkJLyogb2sgd2UgZm91bmQgYSBuZWdvdGlhdGlvbiBmb3IgdGhpcyBvcHRpb24gYWxyZWFkeSAqLworCQlpZiAob3B0LT5kY2Nwb3BfZmVhdCA9PSBmZWF0dXJlICYmIG9wdC0+ZGNjcG9wX3R5cGUgPT0gdHlwZSkgeworCQkJZGNjcF9wcl9kZWJ1ZygiUmVwbGFjaW5nIG9sZFxuIik7CisJCQkvKiByZXBsYWNlICovCisJCQlCVUdfT04ob3B0LT5kY2Nwb3BfdmFsID09IE5VTEwpOworCQkJa2ZyZWUob3B0LT5kY2Nwb3BfdmFsKTsKKwkJCW9wdC0+ZGNjcG9wX3ZhbAkgPSB2YWw7CisJCQlvcHQtPmRjY3BvcF9sZW4JID0gbGVuOworCQkJb3B0LT5kY2Nwb3BfY29uZiA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIG5lZ290aWF0aW9uIGZvciBhIG5ldyBmZWF0dXJlICovCisJb3B0ID0ga21hbGxvYyhzaXplb2YoKm9wdCksIGdmcCk7CisJaWYgKG9wdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9wdC0+ZGNjcG9wX3R5cGUgPSB0eXBlOworCW9wdC0+ZGNjcG9wX2ZlYXQgPSBmZWF0dXJlOworCW9wdC0+ZGNjcG9wX2xlbgkgPSBsZW47CisJb3B0LT5kY2Nwb3BfdmFsCSA9IHZhbDsKKwlvcHQtPmRjY3BvcF9jb25mID0gMDsKKwlvcHQtPmRjY3BvcF9zYwkgPSBOVUxMOworCisJQlVHX09OKG9wdC0+ZGNjcG9wX3ZhbCA9PSBOVUxMKTsKKworCWxpc3RfYWRkX3RhaWwoJm9wdC0+ZGNjcG9wX25vZGUsICZkbXNrLT5kY2NwbXNfcGVuZGluZyk7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZmVhdF9jaGFuZ2UpOworCitzdGF0aWMgaW50IGRjY3BfZmVhdF91cGRhdGVfY2NpZChzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsIHU4IG5ld19jY2lkX25yKQoreworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CisJLyogZmlndXJlIG91dCBpZiB3ZSBhcmUgY2hhbmdpbmcgb3VyIENDSUQgb3IgdGhlIHBlZXIncyAqLworCWNvbnN0IGludCByeCA9IHR5cGUgPT0gRENDUE9fQ0hBTkdFX1I7CisJY29uc3QgdTggY2NpZF9uciA9IHJ4ID8gZG1zay0+ZGNjcG1zX3J4X2NjaWQgOiBkbXNrLT5kY2NwbXNfdHhfY2NpZDsKKwlzdHJ1Y3QgY2NpZCAqbmV3X2NjaWQ7CisKKwkvKiBDaGVjayBpZiBub3RoaW5nIGlzIGJlaW5nIGNoYW5nZWQuICovCisJaWYgKGNjaWRfbnIgPT0gbmV3X2NjaWRfbnIpCisJCXJldHVybiAwOworCisJbmV3X2NjaWQgPSBjY2lkX25ldyhuZXdfY2NpZF9uciwgc2ssIHJ4LCBHRlBfQVRPTUlDKTsKKwlpZiAobmV3X2NjaWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocngpIHsKKwkJY2NpZF9oY19yeF9kZWxldGUoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKKwkJZHAtPmRjY3BzX2hjX3J4X2NjaWQgPSBuZXdfY2NpZDsKKwkJZG1zay0+ZGNjcG1zX3J4X2NjaWQgPSBuZXdfY2NpZF9ucjsKKwl9IGVsc2UgeworCQljY2lkX2hjX3R4X2RlbGV0ZShkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2spOworCQlkcC0+ZGNjcHNfaGNfdHhfY2NpZCA9IG5ld19jY2lkOworCQlkbXNrLT5kY2NwbXNfdHhfY2NpZCA9IG5ld19jY2lkX25yOworCX0KKworCXJldHVybiAwOworfQorCisvKiBYWFggdGFraW5nIG9ubHkgdTggdmFscyAqLworc3RhdGljIGludCBkY2NwX2ZlYXRfdXBkYXRlKHN0cnVjdCBzb2NrICpzaywgdTggdHlwZSwgdTggZmVhdCwgdTggdmFsKQoreworCWRjY3BfcHJfZGVidWcoImNoYW5naW5nIFslZF0gZmVhdCAlZCB0byAlZFxuIiwgdHlwZSwgZmVhdCwgdmFsKTsKKworCXN3aXRjaCAoZmVhdCkgeworCWNhc2UgRENDUEZfQ0NJRDoKKwkJcmV0dXJuIGRjY3BfZmVhdF91cGRhdGVfY2NpZChzaywgdHlwZSwgdmFsKTsKKwlkZWZhdWx0OgorCQlkY2NwX3ByX2RlYnVnKCJJTVBMRU1FTlQgY2hhbmdpbmcgWyVkXSBmZWF0ICVkIHRvICVkXG4iLAorCQkJICAgICAgdHlwZSwgZmVhdCwgdmFsKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRjY3BfZmVhdF9yZWNvbmNpbGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZGNjcF9vcHRfcGVuZCAqb3B0LAorCQkJICAgICAgIHU4ICpycHJlZiwgdTggcmxlbikKK3sKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXU4ICpzcHJlZiwgc2xlbiwgKnJlcyA9IE5VTEw7CisJaW50IGksIGosIHJjLCBhZ3JlZSA9IDE7CisKKwlCVUdfT04ocnByZWYgPT0gTlVMTCk7CisKKwkvKiBjaGVjayBpZiB3ZSBhcmUgdGhlIGJsYWNrIHNoZWVwICovCisJaWYgKGRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQpIHsKKwkJc3ByZWYgPSBycHJlZjsKKwkJc2xlbiAgPSBybGVuOworCQlycHJlZiA9IG9wdC0+ZGNjcG9wX3ZhbDsKKwkJcmxlbiAgPSBvcHQtPmRjY3BvcF9sZW47CisJfSBlbHNlIHsKKwkJc3ByZWYgPSBvcHQtPmRjY3BvcF92YWw7CisJCXNsZW4gID0gb3B0LT5kY2Nwb3BfbGVuOworCX0KKwkvKgorCSAqIE5vdyB3ZSBoYXZlIHNlcnZlciBwcmVmZXJlbmNlIGxpc3QgaW4gc3ByZWYgYW5kIGNsaWVudCBwcmVmZXJlbmNlIGluCisJICogcnByZWYKKwkgKi8KKwlCVUdfT04oc3ByZWYgPT0gTlVMTCk7CisJQlVHX09OKHJwcmVmID09IE5VTEwpOworCisJLyogRklYTUUgc2FuaXR5IGNoZWNrIHZhbHMgKi8KKworCS8qIEFyZSB2YWx1ZXMgaW4gYW55IG9yZGVyPyAgWFhYIExhbWUgImFsZ29yaXRobSIgaGVyZSAqLworCS8qIFhYWCBhc3N1bWUgdmFsdWVzIGFyZSAxIGJ5dGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2xlbjsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBybGVuOyBqKyspIHsKKwkJCWlmIChzcHJlZltpXSA9PSBycHJlZltqXSkgeworCQkJCXJlcyA9ICZzcHJlZltpXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAocmVzKQorCQkJYnJlYWs7CisJfQorCisJLyogd2UgZGlkbid0IGFncmVlIG9uIGFueXRoaW5nICovCisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCS8qIGNvbmZpcm0gcHJldmlvdXMgdmFsdWUgKi8KKwkJc3dpdGNoIChvcHQtPmRjY3BvcF9mZWF0KSB7CisJCWNhc2UgRENDUEZfQ0NJRDoKKwkJCS8qIFhYWCBkaWQgaSBnZXQgdGhpcyByaWdodD8gPVAgKi8KKwkJCWlmIChvcHQtPmRjY3BvcF90eXBlID09IERDQ1BPX0NIQU5HRV9MKQorCQkJCXJlcyA9ICZkY2NwX21zayhzayktPmRjY3Btc190eF9jY2lkOworCQkJZWxzZQorCQkJCXJlcyA9ICZkY2NwX21zayhzayktPmRjY3Btc19yeF9jY2lkOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCVdBUk5fT04oMSk7IC8qIFhYWCBpbXBsZW1lbnQgcmVzICovCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWRjY3BfcHJfZGVidWcoIkRvbid0IGFncmVlLi4uIHJlY29uZmlybWluZyAlZFxuIiwgKnJlcyk7CisJCWFncmVlID0gMDsgLyogdGhpcyBpcyB1c2VkIGZvciBtYW5kYXRvcnkgb3B0aW9ucy4uLiAqLworCX0KKworCS8qIG5lZWQgdG8gcHV0IHJlc3VsdCBhbmQgb3VyIHByZWZlcmVuY2UgbGlzdCAqLworCS8qIFhYWCBhc3N1bWUgMSBieXRlIHZhbHMgKi8KKwlybGVuID0gMSArIG9wdC0+ZGNjcG9wX2xlbjsKKwlycHJlZiA9IGttYWxsb2MocmxlbiwgR0ZQX0FUT01JQyk7CisJaWYgKHJwcmVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJKnJwcmVmID0gKnJlczsKKwltZW1jcHkoJnJwcmVmWzFdLCBvcHQtPmRjY3BvcF92YWwsIG9wdC0+ZGNjcG9wX2xlbik7CisKKwkvKiBwdXQgaXQgaW4gdGhlICJjb25maXJtIHF1ZXVlIiAqLworCWlmIChvcHQtPmRjY3BvcF9zYyA9PSBOVUxMKSB7CisJCW9wdC0+ZGNjcG9wX3NjID0ga21hbGxvYyhzaXplb2YoKm9wdC0+ZGNjcG9wX3NjKSwgR0ZQX0FUT01JQyk7CisJCWlmIChvcHQtPmRjY3BvcF9zYyA9PSBOVUxMKSB7CisJCQlrZnJlZShycHJlZik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJlY3ljbGUgdGhlIGNvbmZpcm0gc2xvdCAqLworCQlCVUdfT04ob3B0LT5kY2Nwb3Bfc2MtPmRjY3BvY192YWwgPT0gTlVMTCk7CisJCWtmcmVlKG9wdC0+ZGNjcG9wX3NjLT5kY2Nwb2NfdmFsKTsKKwkJZGNjcF9wcl9kZWJ1ZygicmVjeWNsaW5nIGNvbmZpcm0gc2xvdFxuIik7CisJfQorCW1lbXNldChvcHQtPmRjY3BvcF9zYywgMCwgc2l6ZW9mKCpvcHQtPmRjY3BvcF9zYykpOworCisJb3B0LT5kY2Nwb3Bfc2MtPmRjY3BvY192YWwgPSBycHJlZjsKKwlvcHQtPmRjY3BvcF9zYy0+ZGNjcG9jX2xlbiA9IHJsZW47CisKKwkvKiB1cGRhdGUgdGhlIG9wdGlvbiBvbiBvdXIgc2lkZSBbd2UgYXJlIGFib3V0IHRvIHNlbmQgdGhlIGNvbmZpcm1dICovCisJcmMgPSBkY2NwX2ZlYXRfdXBkYXRlKHNrLCBvcHQtPmRjY3BvcF90eXBlLCBvcHQtPmRjY3BvcF9mZWF0LCAqcmVzKTsKKwlpZiAocmMpIHsKKwkJa2ZyZWUob3B0LT5kY2Nwb3Bfc2MtPmRjY3BvY192YWwpOworCQlrZnJlZShvcHQtPmRjY3BvcF9zYyk7CisJCW9wdC0+ZGNjcG9wX3NjID0gMDsKKwkJcmV0dXJuIHJjOworCX0KKworCWRjY3BfcHJfZGVidWcoIldpbGwgY29uZmlybSAlZFxuIiwgKnJwcmVmKTsKKworCS8qIHNheSB3ZSB3YW50IHRvIGNoYW5nZSB0byBYIGJ1dCB3ZSBqdXN0IGdvdCBhIGNvbmZpcm0gWCwgc3VwcHJlc3Mgb3VyCisJICogY2hhbmdlCisJICovCisJaWYgKCFvcHQtPmRjY3BvcF9jb25mKSB7CisJCWlmICgqb3B0LT5kY2Nwb3BfdmFsID09ICpyZXMpCisJCQlvcHQtPmRjY3BvcF9jb25mID0gMTsKKwkJZGNjcF9wcl9kZWJ1Zygid29uJ3QgYXNrIGZvciBjaGFuZ2Ugb2Ygc2FtZSBmZWF0dXJlXG4iKTsKKwl9CisKKwlyZXR1cm4gYWdyZWUgPyAwIDogRENDUF9GRUFUX1NQX05PQUdSRUU7IC8qIHVzZWQgZm9yIG1hbmRhdG9yeSBvcHRzICovCit9CisKK3N0YXRpYyBpbnQgZGNjcF9mZWF0X3NwKHN0cnVjdCBzb2NrICpzaywgdTggdHlwZSwgdTggZmVhdHVyZSwgdTggKnZhbCwgdTggbGVuKQoreworCXN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOworCXN0cnVjdCBkY2NwX29wdF9wZW5kICpvcHQ7CisJaW50IHJjID0gMTsKKwl1OCB0OworCisJLyoKKwkgKiBXZSByZWNlaXZlZCBhIENIQU5HRS4gIFdlIGdvdHRhIG1hdGNoIGl0IGFnYWluc3Qgb3VyIG93biBwcmVmZXJlbmNlCisJICogbGlzdC4gIElmIHdlIGdvdCBhIENIQU5HRV9SIGl0IG1lYW5zIGl0J3MgYSBjaGFuZ2UgZm9yIHVzLCBzbyB3ZSBuZWVkCisJICogdG8gY29tcGFyZSBvdXIgQ0hBTkdFX0wgbGlzdC4KKwkgKi8KKwlpZiAodHlwZSA9PSBEQ0NQT19DSEFOR0VfTCkKKwkJdCA9IERDQ1BPX0NIQU5HRV9SOworCWVsc2UKKwkJdCA9IERDQ1BPX0NIQU5HRV9MOworCisJLyogZmluZCBvdXIgcHJlZmVyZW5jZSBsaXN0IGZvciB0aGlzIGZlYXR1cmUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wdCwgJmRtc2stPmRjY3Btc19wZW5kaW5nLCBkY2Nwb3Bfbm9kZSkgeworCQlpZiAob3B0LT5kY2Nwb3BfdHlwZSAhPSB0IHx8IG9wdC0+ZGNjcG9wX2ZlYXQgIT0gZmVhdHVyZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGZpbmQgdGhlIHdpbm5lciBmcm9tIHRoZSB0d28gcHJlZmVyZW5jZSBsaXN0cyAqLworCQlyYyA9IGRjY3BfZmVhdF9yZWNvbmNpbGUoc2ssIG9wdCwgdmFsLCBsZW4pOworCQlicmVhazsKKwl9CisKKwkvKiBXZSBkaWRuJ3QgZGVhbCB3aXRoIHRoZSBjaGFuZ2UuICBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGF2ZSBubworCSAqIHByZWZlcmVuY2UgbGlzdCBmb3IgdGhlIGZlYXR1cmUuICBJbiBmYWN0LCBpdCBqdXN0IHNob3VsZG4ndAorCSAqIGhhcHBlbi0tLWlmIHdlIHVuZGVyc3RhbmQgYSBmZWF0dXJlLCB3ZSBzaG91bGQgaGF2ZSBhIHByZWZlcmVuY2UgbGlzdAorCSAqIHdpdGggYXQgbGVhc3QgdGhlIGRlZmF1bHQgdmFsdWUuCisJICovCisJQlVHX09OKHJjID09IDEpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRjY3BfZmVhdF9ubihzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsIHU4IGZlYXR1cmUsIHU4ICp2YWwsIHU4IGxlbikKK3sKKwlzdHJ1Y3QgZGNjcF9vcHRfcGVuZCAqb3B0OworCXN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOworCXU4ICpjb3B5OworCWludCByYzsKKworCS8qIE5OIGZlYXR1cmVzIG11c3QgYmUgY2hhbmdlIEwgKi8KKwlpZiAodHlwZSA9PSBEQ0NQT19DSEFOR0VfUikgeworCQlkY2NwX3ByX2RlYnVnKCJyZWNlaXZlZCBDSEFOR0VfUiAlZCBmb3IgTk4gZmVhdCAlZFxuIiwKKwkJCSAgICAgIHR5cGUsIGZlYXR1cmUpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBYWFggc2FuaXR5IGNoZWNrIG9wdCB2YWwgKi8KKworCS8qIGNvcHkgb3B0aW9uIHNvIHdlIGNhbiBjb25maXJtIGl0ICovCisJb3B0ID0ga3phbGxvYyhzaXplb2YoKm9wdCksIEdGUF9BVE9NSUMpOworCWlmIChvcHQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb3B5ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOworCWlmIChjb3B5ID09IE5VTEwpIHsKKwkJa2ZyZWUob3B0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweShjb3B5LCB2YWwsIGxlbik7CisKKwlvcHQtPmRjY3BvcF90eXBlID0gRENDUE9fQ09ORklSTV9SOyAvKiBOTiBjYW4gb25seSBjb25maXJtIFIgKi8KKwlvcHQtPmRjY3BvcF9mZWF0ID0gZmVhdHVyZTsKKwlvcHQtPmRjY3BvcF92YWwJID0gY29weTsKKwlvcHQtPmRjY3BvcF9sZW4JID0gbGVuOworCisJLyogY2hhbmdlIGZlYXR1cmUgKi8KKwlyYyA9IGRjY3BfZmVhdF91cGRhdGUoc2ssIHR5cGUsIGZlYXR1cmUsICp2YWwpOworCWlmIChyYykgeworCQlrZnJlZShvcHQtPmRjY3BvcF92YWwpOworCQlrZnJlZShvcHQpOworCQlyZXR1cm4gcmM7CisJfQorCisJZGNjcF9wcl9kZWJ1ZygiQ29uZmlybWluZyBOTiBmZWF0dXJlICVkICh2YWw9JWQpXG4iLCBmZWF0dXJlLCAqY29weSk7CisJbGlzdF9hZGRfdGFpbCgmb3B0LT5kY2Nwb3Bfbm9kZSwgJmRtc2stPmRjY3Btc19jb25mKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkY2NwX2ZlYXRfZW1wdHlfY29uZmlybShzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zaywKKwkJCQkgICAgdTggdHlwZSwgdTggZmVhdHVyZSkKK3sKKwkvKiBYWFggY2hlY2sgaWYgb3RoZXIgY29uZmlybXMgZm9yIHRoYXQgYXJlIHF1ZXVlZCBhbmQgcmVjeWNsZSBzbG90ICovCisJc3RydWN0IGRjY3Bfb3B0X3BlbmQgKm9wdCA9IGt6YWxsb2Moc2l6ZW9mKCpvcHQpLCBHRlBfQVRPTUlDKTsKKworCWlmIChvcHQgPT0gTlVMTCkgeworCQkvKiBYWFggd2hhdCBkbyB3ZSBkbz8gIElnbm9yaW5nIHNob3VsZCBiZSBmaW5lLiAgSXQncyBhIGNoYW5nZQorCQkgKiBhZnRlciBhbGwgPVAKKwkJICovCisJCXJldHVybjsKKwl9CisKKwlvcHQtPmRjY3BvcF90eXBlID0gdHlwZSA9PSBEQ0NQT19DSEFOR0VfTCA/IERDQ1BPX0NPTkZJUk1fUiA6CisJCQkJCQkgICAgRENDUE9fQ09ORklSTV9MOworCW9wdC0+ZGNjcG9wX2ZlYXQgPSBmZWF0dXJlOworCW9wdC0+ZGNjcG9wX3ZhbAkgPSAwOworCW9wdC0+ZGNjcG9wX2xlbgkgPSAwOworCisJLyogY2hhbmdlIGZlYXR1cmUgKi8KKwlkY2NwX3ByX2RlYnVnKCJFbXB0eSBjb25maXJtIGZlYXR1cmUgJWQgdHlwZSAlZFxuIiwgZmVhdHVyZSwgdHlwZSk7CisJbGlzdF9hZGRfdGFpbCgmb3B0LT5kY2Nwb3Bfbm9kZSwgJmRtc2stPmRjY3Btc19jb25mKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF9mZWF0X2ZsdXNoX2NvbmZpcm0oc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOworCS8qIENoZWNrIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIGNvbmZpcm0gaW4gdGhlIGZpcnN0IHBsYWNlICovCisJaW50IHllcyA9ICFsaXN0X2VtcHR5KCZkbXNrLT5kY2NwbXNfY29uZik7CisKKwlpZiAoIXllcykgeworCQlzdHJ1Y3QgZGNjcF9vcHRfcGVuZCAqb3B0OworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkob3B0LCAmZG1zay0+ZGNjcG1zX3BlbmRpbmcsIGRjY3BvcF9ub2RlKSB7CisJCQlpZiAob3B0LT5kY2Nwb3BfY29uZikgeworCQkJCXllcyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIXllcykKKwkJcmV0dXJuOworCisJLyogT0sgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGNvbmZpcm0uLi4gKi8KKwkvKiBYWFggY2hlY2sgaWYgcGFja2V0IGlzIGluIGZsaWdodD8gIFNlbmQgZGVsYXllZCBhY2s/PyAqLworCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9PUEVOKQorCQlkY2NwX3NlbmRfYWNrKHNrKTsKK30KKworaW50IGRjY3BfZmVhdF9jaGFuZ2VfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsIHU4IGZlYXR1cmUsIHU4ICp2YWwsIHU4IGxlbikKK3sKKwlpbnQgcmM7CisKKwlkY2NwX3ByX2RlYnVnKCJnb3QgZmVhdCBjaGFuZ2UgdHlwZT0lZCBmZWF0PSVkXG4iLCB0eXBlLCBmZWF0dXJlKTsKKworCS8qIGZpZ3VyZSBvdXQgaWYgaXQncyBTUCBvciBOTiBmZWF0dXJlICovCisJc3dpdGNoIChmZWF0dXJlKSB7CisJLyogZGVhbCB3aXRoIFNQIGZlYXR1cmVzICovCisJY2FzZSBEQ0NQRl9DQ0lEOgorCQlyYyA9IGRjY3BfZmVhdF9zcChzaywgdHlwZSwgZmVhdHVyZSwgdmFsLCBsZW4pOworCQlicmVhazsKKworCS8qIGRlYWwgd2l0aCBOTiBmZWF0dXJlcyAqLworCWNhc2UgRENDUEZfQUNLX1JBVElPOgorCQlyYyA9IGRjY3BfZmVhdF9ubihzaywgdHlwZSwgZmVhdHVyZSwgdmFsLCBsZW4pOworCQlicmVhazsKKworCS8qIFhYWCBpbXBsZW1lbnQgb3RoZXIgZmVhdHVyZXMgKi8KKwlkZWZhdWx0OgorCQlyYyA9IC1FRkFVTFQ7CisJCWJyZWFrOworCX0KKworCS8qIGNoZWNrIGlmIHRoZXJlIHdlcmUgcHJvYmxlbXMgY2hhbmdpbmcgZmVhdHVyZXMgKi8KKwlpZiAocmMpIHsKKwkJLyogSWYgd2UgZG9uJ3QgYWdyZWUgb24gU1AsIHdlIHNlbnQgYSBjb25maXJtIGZvciBvbGQgdmFsdWUuCisJCSAqIEhvd2V2ZXIgd2UgcHJvcGFnYXRlIHJjIHRvIGNhbGxlciBpbiBjYXNlIG9wdGlvbiB3YXMKKwkJICogbWFuZGF0b3J5CisJCSAqLworCQlpZiAocmMgIT0gRENDUF9GRUFUX1NQX05PQUdSRUUpCisJCQlkY2NwX2ZlYXRfZW1wdHlfY29uZmlybShkY2NwX21zayhzayksIHR5cGUsIGZlYXR1cmUpOworCX0KKworCS8qIGdlbmVyYXRlIHRoZSBjb25maXJtIFtpZiByZXF1aXJlZF0gKi8KKwlkY2NwX2ZlYXRfZmx1c2hfY29uZmlybShzayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZmVhdF9jaGFuZ2VfcmVjdik7CisKK2ludCBkY2NwX2ZlYXRfY29uZmlybV9yZWN2KHN0cnVjdCBzb2NrICpzaywgdTggdHlwZSwgdTggZmVhdHVyZSwKKwkJCSAgIHU4ICp2YWwsIHU4IGxlbikKK3sKKwl1OCB0OworCXN0cnVjdCBkY2NwX29wdF9wZW5kICpvcHQ7CisJc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CisJaW50IHJjID0gMTsKKwlpbnQgYWxsX2NvbmZpcm1lZCA9IDE7CisKKwlkY2NwX3ByX2RlYnVnKCJnb3QgZmVhdCBjb25maXJtIHR5cGU9JWQgZmVhdD0lZFxuIiwgdHlwZSwgZmVhdHVyZSk7CisKKwkvKiBYWFggc2FuaXR5IGNoZWNrIHR5cGUgJiBmZWF0ICovCisKKwkvKiBsb2NhdGUgb3VyIGNoYW5nZSByZXF1ZXN0ICovCisJdCA9IHR5cGUgPT0gRENDUE9fQ09ORklSTV9MID8gRENDUE9fQ0hBTkdFX1IgOiBEQ0NQT19DSEFOR0VfTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkob3B0LCAmZG1zay0+ZGNjcG1zX3BlbmRpbmcsIGRjY3BvcF9ub2RlKSB7CisJCWlmICghb3B0LT5kY2Nwb3BfY29uZiAmJiBvcHQtPmRjY3BvcF90eXBlID09IHQgJiYKKwkJICAgIG9wdC0+ZGNjcG9wX2ZlYXQgPT0gZmVhdHVyZSkgeworCQkJLyogd2UgZm91bmQgaXQgKi8KKwkJCS8qIFhYWCBkbyBzYW5pdHkgY2hlY2sgKi8KKworCQkJb3B0LT5kY2Nwb3BfY29uZiA9IDE7CisKKwkJCS8qIFdlIGdvdCBhIGNvbmZpcm1hdGlvbi0tLWNoYW5nZSB0aGUgb3B0aW9uICovCisJCQlkY2NwX2ZlYXRfdXBkYXRlKHNrLCBvcHQtPmRjY3BvcF90eXBlLAorCQkJCQkgb3B0LT5kY2Nwb3BfZmVhdCwgKnZhbCk7CisKKwkJCWRjY3BfcHJfZGVidWcoImZlYXQgJWQgdHlwZSAlZCBjb25maXJtZWQgJWRcbiIsCisJCQkJICAgICAgZmVhdHVyZSwgdHlwZSwgKnZhbCk7CisJCQlyYyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmICghb3B0LT5kY2Nwb3BfY29uZikKKwkJCWFsbF9jb25maXJtZWQgPSAwOworCX0KKworCS8qIGZpeCByZS10cmFuc21pdCB0aW1lciAqLworCS8qIFhYWCBnb3R0YSBtYWtlIHN1cmUgdGhhdCBubyBvcHRpb24gbmVnb3RpYXRpb24gb2NjdXJzIGR1cmluZworCSAqIGNvbm5lY3Rpb24gc2h1dGRvd24uICBDb25zaWRlciB0aGF0IHRoZSBDTE9TRVJFUSBpcyBzZW50IGFuZCB0aW1lciBpcworCSAqIG9uLiAgaWYgYWxsIG9wdGlvbnMgYXJlIGNvbmZpcm1lZCBpdCBtaWdodCBraWxsIHRpbWVyIHdoaWNoIHNob3VsZAorCSAqIHJlbWFpbiBhbGl2ZSB1bnRpbCBjbG9zZSBpcyByZWNlaXZlZC4KKwkgKi8KKwlpZiAoYWxsX2NvbmZpcm1lZCkgeworCQlkY2NwX3ByX2RlYnVnKCJjbGVhciBmZWF0IG5lZ290aWF0aW9uIHRpbWVyICVwXG4iLCBzayk7CisJCWluZXRfY3NrX2NsZWFyX3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TKTsKKwl9CisKKwlpZiAocmMpCisJCWRjY3BfcHJfZGVidWcoImZlYXQgJWQgdHlwZSAlZCBuZXZlciByZXF1ZXN0ZWRcbiIsCisJCQkgICAgICBmZWF0dXJlLCB0eXBlKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9mZWF0X2NvbmZpcm1fcmVjdik7CisKK3ZvaWQgZGNjcF9mZWF0X2NsZWFuKHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrKQoreworCXN0cnVjdCBkY2NwX29wdF9wZW5kICpvcHQsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9wdCwgbmV4dCwgJmRtc2stPmRjY3Btc19wZW5kaW5nLAorCQkJCSBkY2Nwb3Bfbm9kZSkgeworICAgICAgICAgICAgICAgIEJVR19PTihvcHQtPmRjY3BvcF92YWwgPT0gTlVMTCk7CisgICAgICAgICAgICAgICAga2ZyZWUob3B0LT5kY2Nwb3BfdmFsKTsKKworCQlpZiAob3B0LT5kY2Nwb3Bfc2MgIT0gTlVMTCkgeworCQkJQlVHX09OKG9wdC0+ZGNjcG9wX3NjLT5kY2Nwb2NfdmFsID09IE5VTEwpOworCQkJa2ZyZWUob3B0LT5kY2Nwb3Bfc2MtPmRjY3BvY192YWwpOworCQkJa2ZyZWUob3B0LT5kY2Nwb3Bfc2MpOworCQl9CisKKyAgICAgICAgICAgICAgICBrZnJlZShvcHQpOworICAgICAgICB9CisJSU5JVF9MSVNUX0hFQUQoJmRtc2stPmRjY3Btc19wZW5kaW5nKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvcHQsIG5leHQsICZkbXNrLT5kY2NwbXNfY29uZiwgZGNjcG9wX25vZGUpIHsKKwkJQlVHX09OKG9wdCA9PSBOVUxMKTsKKwkJaWYgKG9wdC0+ZGNjcG9wX3ZhbCAhPSBOVUxMKQorCQkJa2ZyZWUob3B0LT5kY2Nwb3BfdmFsKTsKKwkJa2ZyZWUob3B0KTsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJmRtc2stPmRjY3Btc19jb25mKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9mZWF0X2NsZWFuKTsKKworLyogdGhpcyBpcyB0byBiZSBjYWxsZWQgb25seSB3aGVuIGEgbGlzdGVuaW5nIHNvY2sgY3JlYXRlcyBpdHMgY2hpbGQuICBJdCBpcworICogYXNzdW1lZCBieSB0aGUgZnVuY3Rpb24tLS10aGUgY29uZmlybSBpcyBub3QgZHVwbGljYXRlZCwgYnV0IHJhdGhlciBpdCBpcworICogInBhc3NlZCBvbiIuCisgKi8KK2ludCBkY2NwX2ZlYXRfY2xvbmUoc3RydWN0IHNvY2sgKm9sZHNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spCit7CisJc3RydWN0IGRjY3BfbWluaXNvY2sgKm9sZGRtc2sgPSBkY2NwX21zayhvbGRzayk7CisJc3RydWN0IGRjY3BfbWluaXNvY2sgKm5ld2Rtc2sgPSBkY2NwX21zayhuZXdzayk7CisJc3RydWN0IGRjY3Bfb3B0X3BlbmQgKm9wdDsKKwlpbnQgcmMgPSAwOworCisJSU5JVF9MSVNUX0hFQUQoJm5ld2Rtc2stPmRjY3Btc19wZW5kaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmbmV3ZG1zay0+ZGNjcG1zX2NvbmYpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHQsICZvbGRkbXNrLT5kY2NwbXNfcGVuZGluZywgZGNjcG9wX25vZGUpIHsKKwkJc3RydWN0IGRjY3Bfb3B0X3BlbmQgKm5ld29wdDsKKwkJLyogY29weSB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbiAqLworCQl1OCAqdmFsID0ga21hbGxvYyhvcHQtPmRjY3BvcF9sZW4sIEdGUF9BVE9NSUMpOworCisJCWlmICh2YWwgPT0gTlVMTCkKKwkJCWdvdG8gb3V0X2NsZWFuOworCQltZW1jcHkodmFsLCBvcHQtPmRjY3BvcF92YWwsIG9wdC0+ZGNjcG9wX2xlbik7CisKKwkJbmV3b3B0ID0ga21hbGxvYyhzaXplb2YoKm5ld29wdCksIEdGUF9BVE9NSUMpOworCQlpZiAobmV3b3B0ID09IE5VTEwpIHsKKwkJCWtmcmVlKHZhbCk7CisJCQlnb3RvIG91dF9jbGVhbjsKKwkJfQorCisJCS8qIGluc2VydCB0aGUgb3B0aW9uICovCisJCW1lbWNweShuZXdvcHQsIG9wdCwgc2l6ZW9mKCpuZXdvcHQpKTsKKwkJbmV3b3B0LT5kY2Nwb3BfdmFsID0gdmFsOworCQlsaXN0X2FkZF90YWlsKCZuZXdvcHQtPmRjY3BvcF9ub2RlLCAmbmV3ZG1zay0+ZGNjcG1zX3BlbmRpbmcpOworCisJCS8qIFhYWCB3aGF0IGhhcHBlbnMgd2l0aCBiYWNrbG9ncyBhbmQgbXVsdGlwbGUgY29ubmVjdGlvbnMgYXQKKwkJICogb25jZS4uLgorCQkgKi8KKwkJLyogdGhlIG1hc3RlciBzb2NrZXQgbm8gbG9uZ2VyIG5lZWRzIHRvIHdvcnJ5IGFib3V0IGNvbmZpcm1zICovCisJCW9wdC0+ZGNjcG9wX3NjID0gMDsgLyogaXQncyBub3QgYSBtZW1sZWFrLS0tbmV3IHNvY2tldCBoYXMgaXQgKi8KKworCQkvKiByZXNldCBzdGF0ZSBmb3IgYSBuZXcgc29ja2V0ICovCisJCW9wdC0+ZGNjcG9wX2NvbmYgPSAwOworCX0KKworCS8qIFhYWCBub3QgZG9pbmcgYW55dGhpbmcgYWJvdXQgdGhlIGNvbmYgcXVldWUgKi8KKworb3V0OgorCXJldHVybiByYzsKKworb3V0X2NsZWFuOgorCWRjY3BfZmVhdF9jbGVhbihuZXdkbXNrKTsKKwlyYyA9IC1FTk9NRU07CisJZ290byBvdXQ7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZmVhdF9jbG9uZSk7CisKK3N0YXRpYyBpbnQgX19kY2NwX2ZlYXRfaW5pdChzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zaywgdTggdHlwZSwgdTggZmVhdCwKKwkJCSAgICB1OCAqdmFsLCB1OCBsZW4pCit7CisJaW50IHJjID0gLUVOT01FTTsKKwl1OCAqY29weSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKworCWlmIChjb3B5ICE9IE5VTEwpIHsKKwkJbWVtY3B5KGNvcHksIHZhbCwgbGVuKTsKKwkJcmMgPSBkY2NwX2ZlYXRfY2hhbmdlKGRtc2ssIHR5cGUsIGZlYXQsIGNvcHksIGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyYykKKwkJCWtmcmVlKGNvcHkpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK2ludCBkY2NwX2ZlYXRfaW5pdChzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zaykKK3sKKwlpbnQgcmM7CisKKwlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX3BlbmRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZkbXNrLT5kY2NwbXNfY29uZik7CisKKwkvKiBDQ0lEIEwgKi8KKwlyYyA9IF9fZGNjcF9mZWF0X2luaXQoZG1zaywgRENDUE9fQ0hBTkdFX0wsIERDQ1BGX0NDSUQsCisJCQkgICAgICAmZG1zay0+ZGNjcG1zX3R4X2NjaWQsIDEpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwkvKiBDQ0lEIFIgKi8KKwlyYyA9IF9fZGNjcF9mZWF0X2luaXQoZG1zaywgRENDUE9fQ0hBTkdFX1IsIERDQ1BGX0NDSUQsCisJCQkgICAgICAmZG1zay0+ZGNjcG1zX3J4X2NjaWQsIDEpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwkvKiBBY2sgcmF0aW8gKi8KKwlyYyA9IF9fZGNjcF9mZWF0X2luaXQoZG1zaywgRENDUE9fQ0hBTkdFX0wsIERDQ1BGX0FDS19SQVRJTywKKwkJCSAgICAgICZkbXNrLT5kY2NwbXNfYWNrX3JhdGlvLCAxKTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZmVhdF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuaCBiL25ldC9kY2NwL2ZlYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDQ4MzczCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2RjY3AvZmVhdC5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgX0RDQ1BfRkVBVF9ICisjZGVmaW5lIF9EQ0NQX0ZFQVRfSAorLyoKKyAqICBuZXQvZGNjcC9mZWF0LmgKKyAqCisgKiAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERDQ1AgcHJvdG9jb2wKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgQW5kcmVhIEJpdHRhdSA8YS5iaXR0YXVAY3MudWNsLmFjLnVrPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKgl1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBzb2NrOworc3RydWN0IGRjY3BfbWluaXNvY2s7CisKK2V4dGVybiBpbnQgIGRjY3BfZmVhdF9jaGFuZ2Uoc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2ssIHU4IHR5cGUsIHU4IGZlYXR1cmUsCisJCQkgICAgIHU4ICp2YWwsIHU4IGxlbiwgZ2ZwX3QgZ2ZwKTsKK2V4dGVybiBpbnQgIGRjY3BfZmVhdF9jaGFuZ2VfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsIHU4IGZlYXR1cmUsCisJCQkJICB1OCAqdmFsLCB1OCBsZW4pOworZXh0ZXJuIGludCAgZGNjcF9mZWF0X2NvbmZpcm1fcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsIHU4IGZlYXR1cmUsCisJCQkJICAgdTggKnZhbCwgdTggbGVuKTsKK2V4dGVybiB2b2lkIGRjY3BfZmVhdF9jbGVhbihzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayk7CitleHRlcm4gaW50ICBkY2NwX2ZlYXRfY2xvbmUoc3RydWN0IHNvY2sgKm9sZHNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spOworZXh0ZXJuIGludCAgZGNjcF9mZWF0X2luaXQoc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2spOworCisjZW5kaWYgLyogX0RDQ1BfRkVBVF9IICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pbnB1dC5jIGIvbmV0L2RjY3AvaW5wdXQuYwppbmRleCBiNmNiYTcyLi5iZmM1MzY2IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pbnB1dC5jCisrKyBiL25ldC9kY2NwL2lucHV0LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RhdGljIHZvaWQgZGNjcF9yY3ZfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWRjY3BfdjRfc2VuZF9yZXNldChzaywgRENDUF9SRVNFVF9DT0RFX0NMT1NFRCk7CisJZGNjcF9zZW5kX3Jlc2V0KHNrLCBEQ0NQX1JFU0VUX0NPREVfQ0xPU0VEKTsKIAlkY2NwX2Zpbihzaywgc2tiKTsKIAlkY2NwX3NldF9zdGF0ZShzaywgRENDUF9DTE9TRUQpOwogCXNrX3dha2VfYXN5bmMoc2ssIDEsIFBPTExfSFVQKTsKQEAgLTU2LDExICs1NiwxMSBAQAogCWRjY3Bfc2VuZF9jbG9zZShzaywgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2V2ZW50X2Fja19yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGRjY3BfZXZlbnRfYWNrX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAKLQlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yKQorCWlmIChkY2NwX21zayhzayktPmRjY3Btc19zZW5kX2Fja192ZWN0b3IpCiAJCWRjY3BfYWNrdmVjX2NoZWNrX3Jjdl9hY2tubyhkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjLCBzaywKIAkJCQkJICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEpOwogfQpAQCAtMTUxLDkgKzE1MSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fZGNjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCwKLQkJCQkJIGNvbnN0IHVuc2lnbmVkIGxlbikKK3N0YXRpYyBpbnQgX19kY2NwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBjb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoLCBjb25zdCB1bnNpZ25lZCBsZW4pCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIApAQCAtMjQ3LDcgKzI0Niw3IEBACiAJaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEgIT0gRENDUF9QS1RfV0lUSE9VVF9BQ0tfU0VRKQogCQlkY2NwX2V2ZW50X2Fja19yZWN2KHNrLCBza2IpOwogCi0JaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgorCWlmIChkY2NwX21zayhzayktPmRjY3Btc19zZW5kX2Fja192ZWN0b3IgJiYKIAkgICAgZGNjcF9hY2t2ZWNfYWRkKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAogCQkJICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKIAkJCSAgICBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRCkpCkBAIC0zMDAsNyArMjk5LDEwIEBACiAJCQlnb3RvIG91dF9pbnZhbGlkX3BhY2tldDsKIAkJfQogCi0gICAgICAgICAgICAgICAgaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgorCQlpZiAoZGNjcF9wYXJzZV9vcHRpb25zKHNrLCBza2IpKQorCQkJZ290byBvdXRfaW52YWxpZF9wYWNrZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoZGNjcF9tc2soc2spLT5kY2NwbXNfc2VuZF9hY2tfdmVjdG9yICYmCiAgICAgICAgICAgICAgICAgICAgIGRjY3BfYWNrdmVjX2FkZChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjLCBzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDQ1BfQUNLVkVDX1NUQVRFX1JFQ0VJVkVEKSkKQEAgLTMyMSwxNCArMzIzLDYgQEAKIAkJZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19zd2wsCiAJCQkgICAgICAgbWF4NDgoZHAtPmRjY3BzX3N3bCwgZHAtPmRjY3BzX2lzcikpOwogCi0JCWlmIChjY2lkX2hjX3J4X2luaXQoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKSAhPSAwIHx8Ci0JCSAgICBjY2lkX2hjX3R4X2luaXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrKSAhPSAwKSB7Ci0JCQljY2lkX2hjX3J4X2V4aXQoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKLQkJCWNjaWRfaGNfdHhfZXhpdChkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2spOwotCQkJLyogRklYTUU6IHNlbmQgYXBwcm9wcmlhdGUgUkVTRVQgY29kZSAqLwotCQkJZ290byBvdXRfaW52YWxpZF9wYWNrZXQ7Ci0JCX0KLQogCQlkY2NwX3N5bmNfbXNzKHNrLCBpY3NrLT5pY3NrX3BtdHVfY29va2llKTsKIAogCQkvKgpAQCAtNDkyLDcgKzQ4Niw3IEBACiAJCWlmIChkY2ItPmRjY3BkX2Fja19zZXEgIT0gRENDUF9QS1RfV0lUSE9VVF9BQ0tfU0VRKQogCQkJZGNjcF9ldmVudF9hY2tfcmVjdihzaywgc2tiKTsKIAotIAkJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgorIAkJaWYgKGRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlbmRfYWNrX3ZlY3RvciAmJgogCQkgICAgZGNjcF9hY2t2ZWNfYWRkKGRwLT5kY2Nwc19oY19yeF9hY2t2ZWMsIHNrLAogIAkJCQkgICAgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxLAogIAkJCQkgICAgRENDUF9BQ0tWRUNfU1RBVEVfUkVDRUlWRUQpKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaXB2NC5jIGIvbmV0L2RjY3AvaXB2NC5jCmluZGV4IGRjMDQ4N2IuLjI5MDQ3OTkgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lwdjQuYworKysgYi9uZXQvZGNjcC9pcHY0LmMKQEAgLTE4LDggKzE4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAKICNpbmNsdWRlIDxuZXQvaWNtcC5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2hhc2h0YWJsZXMuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGltZXdhaXRfc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CkBAIC0yOCwxNCArMzAsMTQgQEAKICNpbmNsdWRlICJhY2t2ZWMuaCIKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZGNjcC5oIgorI2luY2x1ZGUgImZlYXQuaCIKIAotc3RydWN0IGluZXRfaGFzaGluZm8gX19jYWNoZWxpbmVfYWxpZ25lZCBkY2NwX2hhc2hpbmZvID0gewotCS5saGFzaF9sb2NrCT0gUldfTE9DS19VTkxPQ0tFRCwKLQkubGhhc2hfdXNlcnMJPSBBVE9NSUNfSU5JVCgwKSwKLQkubGhhc2hfd2FpdCA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKGRjY3BfaGFzaGluZm8ubGhhc2hfd2FpdCksCi19OwotCi1FWFBPUlRfU1lNQk9MX0dQTChkY2NwX2hhc2hpbmZvKTsKKy8qCisgKiBUaGlzIGlzIHRoZSBnbG9iYWwgc29ja2V0IGRhdGEgc3RydWN0dXJlIHVzZWQgZm9yIHJlc3BvbmRpbmcgdG8KKyAqIHRoZSBPdXQtb2YtdGhlLWJsdWUgKE9PVEIpIHBhY2tldHMuIEEgY29udHJvbCBzb2NrIHdpbGwgYmUgY3JlYXRlZAorICogZm9yIHRoaXMgc29ja2V0IGF0IHRoZSBpbml0aWFsaXphdGlvbiB0aW1lLgorICovCitzdGF0aWMgc3RydWN0IHNvY2tldCAqZGNjcF92NF9jdGxfc29ja2V0OwogCiBzdGF0aWMgaW50IGRjY3BfdjRfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogewpAQCAtNDMsMTggKzQ1LDYgQEAKIAkJCQkgaW5ldF9jc2tfYmluZF9jb25mbGljdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRjY3BfdjRfaGFzaChzdHJ1Y3Qgc29jayAqc2spCi17Ci0JaW5ldF9oYXNoKCZkY2NwX2hhc2hpbmZvLCBzayk7Ci19Ci0KLXZvaWQgZGNjcF91bmhhc2goc3RydWN0IHNvY2sgKnNrKQotewotCWluZXRfdW5oYXNoKCZkY2NwX2hhc2hpbmZvLCBzayk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdW5oYXNoKTsKLQogaW50IGRjY3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CkBAIC0yMDcsMTEgKzE5NywxMiBAQAogCX0gLyogZWxzZSBsZXQgdGhlIHVzdWFsIHJldHJhbnNtaXQgdGltZXIgaGFuZGxlIGl0ICovCiB9CiAKLXN0YXRpYyB2b2lkIGRjY3BfdjRfY3RsX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpyeHNrYikKK3N0YXRpYyB2b2lkIGRjY3BfdjRfcmVxc2tfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnJ4c2tiLAorCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBkY2NwX2hkciAqcnhkaCA9IGRjY3BfaGRyKHJ4c2tiKSwgKmRoOwotCWNvbnN0IGludCBkY2NwX2hkcl9hY2tfbGVuID0gc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKworCWNvbnN0IHUzMiBkY2NwX2hkcl9hY2tfbGVuID0gc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKwogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcl9leHQpICsKIAkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfYWNrX2JpdHMpOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0yMTksMTIgKzIxMCwxMiBAQAogCWlmICgoKHN0cnVjdCBydGFibGUgKilyeHNrYi0+ZHN0KS0+cnRfdHlwZSAhPSBSVE5fTE9DQUwpCiAJCXJldHVybjsKIAotCXNrYiA9IGFsbG9jX3NrYihNQVhfRENDUF9IRUFERVIgKyAxNSwgR0ZQX0FUT01JQyk7CisJc2tiID0gYWxsb2Nfc2tiKGRjY3BfdjRfY3RsX3NvY2tldC0+c2stPnNrX3Byb3QtPm1heF9oZWFkZXIsIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuOwogCiAJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycy4gKi8KLQlza2JfcmVzZXJ2ZShza2IsIE1BWF9EQ0NQX0hFQURFUik7CisJc2tiX3Jlc2VydmUoc2tiLCBkY2NwX3Y0X2N0bF9zb2NrZXQtPnNrLT5za19wcm90LT5tYXhfaGVhZGVyKTsKIAogCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKHJ4c2tiLT5kc3QpOwogCkBAIC0yNDMsMTEgKzIzNCwxMSBAQAogCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwKIAkJCSBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX3NlcSk7CiAKLQliaF9sb2NrX3NvY2soZGNjcF9jdGxfc29ja2V0LT5zayk7Ci0JZXJyID0gaXBfYnVpbGRfYW5kX3NlbmRfcGt0KHNrYiwgZGNjcF9jdGxfc29ja2V0LT5zaywKKwliaF9sb2NrX3NvY2soZGNjcF92NF9jdGxfc29ja2V0LT5zayk7CisJZXJyID0gaXBfYnVpbGRfYW5kX3NlbmRfcGt0KHNrYiwgZGNjcF92NF9jdGxfc29ja2V0LT5zaywKIAkJCQkgICAgcnhza2ItPm5oLmlwaC0+ZGFkZHIsCiAJCQkJICAgIHJ4c2tiLT5uaC5pcGgtPnNhZGRyLCBOVUxMKTsKLQliaF91bmxvY2tfc29jayhkY2NwX2N0bF9zb2NrZXQtPnNrKTsKKwliaF91bmxvY2tfc29jayhkY2NwX3Y0X2N0bF9zb2NrZXQtPnNrKTsKIAogCWlmIChlcnIgPT0gTkVUX1hNSVRfQ04gfHwgZXJyID09IDApIHsKIAkJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfT1VUU0VHUyk7CkBAIC0yNTUsMTIgKzI0Niw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBkY2NwX3Y0X3JlcXNrX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQotewotCWRjY3BfdjRfY3RsX3NlbmRfYWNrKHNrYik7Ci19Ci0KIHN0YXRpYyBpbnQgZGNjcF92NF9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQkJCSBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiB7CkBAIC0yNzUsNyArMjYwLDEwIEBACiAJc2tiID0gZGNjcF9tYWtlX3Jlc3BvbnNlKHNrLCBkc3QsIHJlcSk7CiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CisJCXN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwogCisJCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjRfY2hlY2tzdW0oc2tiLCBpcmVxLT5sb2NfYWRkciwKKwkJCQkJCSAgICAgIGlyZXEtPnJtdF9hZGRyKTsKIAkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2YoSVBDQihza2IpLT5vcHQpKTsKIAkJZXJyID0gaXBfYnVpbGRfYW5kX3NlbmRfcGt0KHNrYiwgc2ssIGlyZXEtPmxvY19hZGRyLAogCQkJCQkgICAgaXJlcS0+cm10X2FkZHIsCkBAIC0zMDEsNyArMjg5LDcgQEAKICAqIGNoZWNrIGF0IGFsbC4gQSBtb3JlIGdlbmVyYWwgZXJyb3IgcXVldWUgdG8gcXVldWUgZXJyb3JzIGZvciBsYXRlciBoYW5kbGluZwogICogaXMgcHJvYmFibHkgYmV0dGVyLgogICovCi12b2lkIGRjY3BfdjRfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQorc3RhdGljIHZvaWQgZGNjcF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pCiB7CiAJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGggPSAoc3RydWN0IGRjY3BfaGRyICopKHNrYi0+ZGF0YSArCkBAIC00NTYsMzIgKzQ0NCw2IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdjRfc2VuZF9jaGVjayk7CiAKLWludCBkY2NwX3Y0X3NlbmRfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBlbnVtIGRjY3BfcmVzZXRfY29kZXMgY29kZSkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCS8qCi0JICogRklYTUU6IHdoYXQgaWYgcmVidWlsZF9oZWFkZXIgZmFpbHM/Ci0JICogU2hvdWxkIHdlIGJlIGRvaW5nIGEgcmVidWlsZF9oZWFkZXIgaGVyZT8KLQkgKi8KLQlpbnQgZXJyID0gaW5ldF9za19yZWJ1aWxkX2hlYWRlcihzayk7Ci0KLQlpZiAoZXJyICE9IDApCi0JCXJldHVybiBlcnI7Ci0KLQlza2IgPSBkY2NwX21ha2VfcmVzZXQoc2ssIHNrLT5za19kc3RfY2FjaGUsIGNvZGUpOwotCWlmIChza2IgIT0gTlVMTCkgewotCQljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KLQkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2YoSVBDQihza2IpLT5vcHQpKTsKLQkJZXJyID0gaXBfYnVpbGRfYW5kX3NlbmRfcGt0KHNrYiwgc2ssCi0JCQkJCSAgICBpbmV0LT5zYWRkciwgaW5ldC0+ZGFkZHIsIE5VTEwpOwotCQlpZiAoZXJyID09IE5FVF9YTUlUX0NOKQotCQkJZXJyID0gMDsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgaW5saW5lIHU2NCBkY2NwX3Y0X2luaXRfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNDk3LDkgKzQ1OSw5IEBACiAJc3RydWN0IGRjY3Bfc29jayBkcDsKIAlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7CiAJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxOwotCWNvbnN0IF9fdTMyIHNhZGRyID0gc2tiLT5uaC5pcGgtPnNhZGRyOwotCWNvbnN0IF9fdTMyIGRhZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOwotIAljb25zdCBfX3UzMiBzZXJ2aWNlID0gZGNjcF9oZHJfcmVxdWVzdChza2IpLT5kY2NwaF9yZXFfc2VydmljZTsKKwljb25zdCBfX2JlMzIgc2FkZHIgPSBza2ItPm5oLmlwaC0+c2FkZHI7CisJY29uc3QgX19iZTMyIGRhZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOworIAljb25zdCBfX2JlMzIgc2VydmljZSA9IGRjY3BfaGRyX3JlcXVlc3Qoc2tiKS0+ZGNjcGhfcmVxX3NlcnZpY2U7CiAJc3RydWN0IGRjY3Bfc2tiX2NiICpkY2IgPSBEQ0NQX1NLQl9DQihza2IpOwogCV9fdTggcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9UT09fQlVTWTsKIApAQCAtNTM1LDcgKzQ5Nyw4IEBACiAJaWYgKHJlcSA9PSBOVUxMKQogCQlnb3RvIGRyb3A7CiAKLQkvKiBGSVhNRTogcHJvY2VzcyBvcHRpb25zICovCisJaWYgKGRjY3BfcGFyc2Vfb3B0aW9ucyhzaywgc2tiKSkKKwkJZ290byBkcm9wOwogCiAJZGNjcF9vcGVucmVxX2luaXQocmVxLCAmZHAsIHNrYik7CiAKQEAgLTY2MCw4ICs2MjMsOCBAQAogCXJldHVybiBzazsKIH0KIAotaW50IGRjY3BfdjRfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyIHNhZGRyLAotCQkgICAgIGNvbnN0IHUzMiBkYWRkcikKK2ludCBkY2NwX3Y0X2NoZWNrc3VtKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IF9fYmUzMiBzYWRkciwKKwkJICAgICBjb25zdCBfX2JlMzIgZGFkZHIpCiB7CiAJY29uc3Qgc3RydWN0IGRjY3BfaGRyKiBkaCA9IGRjY3BfaGRyKHNrYik7CiAJaW50IGNoZWNrc3VtX2xlbjsKQEAgLTY4MCw4ICs2NDMsMTAgQEAKIAkJCQkgSVBQUk9UT19EQ0NQLCB0bXApOwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Y0X2NoZWNrc3VtKTsKKwogc3RhdGljIGludCBkY2NwX3Y0X3ZlcmlmeV9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgIGNvbnN0IHUzMiBzYWRkciwgY29uc3QgdTMyIGRhZGRyKQorCQkJCSAgIGNvbnN0IF9fYmUzMiBzYWRkciwgY29uc3QgX19iZTMyIGRhZGRyKQogewogCXN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwogCWludCBjaGVja3N1bV9sZW47CkBAIC03NDEsMTYgKzcwNiwxNyBAQAogCWlmICgoKHN0cnVjdCBydGFibGUgKilyeHNrYi0+ZHN0KS0+cnRfdHlwZSAhPSBSVE5fTE9DQUwpCiAJCXJldHVybjsKIAotCWRzdCA9IGRjY3BfdjRfcm91dGVfc2tiKGRjY3BfY3RsX3NvY2tldC0+c2ssIHJ4c2tiKTsKKwlkc3QgPSBkY2NwX3Y0X3JvdXRlX3NrYihkY2NwX3Y0X2N0bF9zb2NrZXQtPnNrLCByeHNrYik7CiAJaWYgKGRzdCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlza2IgPSBhbGxvY19za2IoTUFYX0RDQ1BfSEVBREVSICsgMTUsIEdGUF9BVE9NSUMpOworCXNrYiA9IGFsbG9jX3NrYihkY2NwX3Y0X2N0bF9zb2NrZXQtPnNrLT5za19wcm90LT5tYXhfaGVhZGVyLAorCQkJR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAogCS8qIFJlc2VydmUgc3BhY2UgZm9yIGhlYWRlcnMuICovCi0Jc2tiX3Jlc2VydmUoc2tiLCBNQVhfRENDUF9IRUFERVIpOworCXNrYl9yZXNlcnZlKHNrYiwgZGNjcF92NF9jdGxfc29ja2V0LT5zay0+c2tfcHJvdC0+bWF4X2hlYWRlcik7CiAJc2tiLT5kc3QgPSBkc3RfY2xvbmUoZHN0KTsKIAogCXNrYi0+aC5yYXcgPSBza2JfcHVzaChza2IsIGRjY3BfaGRyX3Jlc2V0X2xlbik7CkBAIC03NzgsMTEgKzc0NCwxMSBAQAogCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjRfY2hlY2tzdW0oc2tiLCByeHNrYi0+bmguaXBoLT5zYWRkciwKIAkJCQkJICAgICAgcnhza2ItPm5oLmlwaC0+ZGFkZHIpOwogCi0JYmhfbG9ja19zb2NrKGRjY3BfY3RsX3NvY2tldC0+c2spOwotCWVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIGRjY3BfY3RsX3NvY2tldC0+c2ssCisJYmhfbG9ja19zb2NrKGRjY3BfdjRfY3RsX3NvY2tldC0+c2spOworCWVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIGRjY3BfdjRfY3RsX3NvY2tldC0+c2ssCiAJCQkJICAgIHJ4c2tiLT5uaC5pcGgtPmRhZGRyLAogCQkJCSAgICByeHNrYi0+bmguaXBoLT5zYWRkciwgTlVMTCk7Ci0JYmhfdW5sb2NrX3NvY2soZGNjcF9jdGxfc29ja2V0LT5zayk7CisJYmhfdW5sb2NrX3NvY2soZGNjcF92NF9jdGxfc29ja2V0LT5zayk7CiAKIAlpZiAoZXJyID09IE5FVF9YTUlUX0NOIHx8IGVyciA9PSAwKSB7CiAJCURDQ1BfSU5DX1NUQVRTX0JIKERDQ1BfTUlCX09VVFNFR1MpOwpAQCAtOTEyLDcgKzg3OCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2ludmFsaWRfcGFja2V0KTsKIAogLyogdGhpcyBpcyBjYWxsZWQgd2hlbiByZWFsIGRhdGEgYXJyaXZlcyAqLwotaW50IGRjY3BfdjRfcmN2KHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGRjY3BfdjRfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaDsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC0xMDE5LDExMSArOTg1LDM3IEBACiAJZ290byBub19kY2NwX3NvY2tldDsKIH0KIAotc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjRfYWZfb3BzID0gewotCS5xdWV1ZV94bWl0CT0gaXBfcXVldWVfeG1pdCwKLQkuc2VuZF9jaGVjawk9IGRjY3BfdjRfc2VuZF9jaGVjaywKLQkucmVidWlsZF9oZWFkZXIJPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLAotCS5jb25uX3JlcXVlc3QJPSBkY2NwX3Y0X2Nvbm5fcmVxdWVzdCwKLQkuc3luX3JlY3Zfc29jawk9IGRjY3BfdjRfcmVxdWVzdF9yZWN2X3NvY2ssCi0JLm5ldF9oZWFkZXJfbGVuCT0gc2l6ZW9mKHN0cnVjdCBpcGhkciksCi0JLnNldHNvY2tvcHQJPSBpcF9zZXRzb2Nrb3B0LAotCS5nZXRzb2Nrb3B0CT0gaXBfZ2V0c29ja29wdCwKLQkuYWRkcjJzb2NrYWRkcgk9IGluZXRfY3NrX2FkZHIyc29ja2FkZHIsCi0JLnNvY2thZGRyX2xlbgk9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAorc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY0X2FmX29wcyA9IHsKKwkucXVldWVfeG1pdAkgICA9IGlwX3F1ZXVlX3htaXQsCisJLnNlbmRfY2hlY2sJICAgPSBkY2NwX3Y0X3NlbmRfY2hlY2ssCisJLnJlYnVpbGRfaGVhZGVyCSAgID0gaW5ldF9za19yZWJ1aWxkX2hlYWRlciwKKwkuY29ubl9yZXF1ZXN0CSAgID0gZGNjcF92NF9jb25uX3JlcXVlc3QsCisJLnN5bl9yZWN2X3NvY2sJICAgPSBkY2NwX3Y0X3JlcXVlc3RfcmVjdl9zb2NrLAorCS5uZXRfaGVhZGVyX2xlbgkgICA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLAorCS5zZXRzb2Nrb3B0CSAgID0gaXBfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IGlwX2dldHNvY2tvcHQsCisJLmFkZHIyc29ja2FkZHIJICAgPSBpbmV0X2Nza19hZGRyMnNvY2thZGRyLAorCS5zb2NrYWRkcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X2lwX3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X2lwX2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKLWludCBkY2NwX3Y0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW50IGRjY3BfdjRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKLQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKLQlzdGF0aWMgaW50IGRjY3BfY3RsX3NvY2tldF9pbml0ID0gMTsKKwlzdGF0aWMgX191OCBkY2NwX3Y0X2N0bF9zb2NrX2luaXRpYWxpemVkOworCWludCBlcnIgPSBkY2NwX2luaXRfc29jayhzaywgZGNjcF92NF9jdGxfc29ja19pbml0aWFsaXplZCk7CiAKLQlkY2NwX29wdGlvbnNfaW5pdCgmZHAtPmRjY3BzX29wdGlvbnMpOwotCWRvX2dldHRpbWVvZmRheSgmZHAtPmRjY3BzX2Vwb2NoKTsKLQotCWlmIChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IpIHsKLQkJZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9IGRjY3BfYWNrdmVjX2FsbG9jKERDQ1BfTUFYX0FDS1ZFQ19MRU4sCi0JCQkJCQkJICAgR0ZQX0tFUk5FTCk7Ci0JCWlmIChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyID09IDApIHsKKwkJaWYgKHVubGlrZWx5KCFkY2NwX3Y0X2N0bF9zb2NrX2luaXRpYWxpemVkKSkKKwkJCWRjY3BfdjRfY3RsX3NvY2tfaW5pdGlhbGl6ZWQgPSAxOworCQlpbmV0X2NzayhzayktPmljc2tfYWZfb3BzID0gJmRjY3BfaXB2NF9hZl9vcHM7CiAJfQogCi0JLyoKLQkgKiBGSVhNRTogV2UncmUgaGFyZGNvZGluZyB0aGUgQ0NJRCwgYW5kIGRvaW5nIHRoaXMgYXQgdGhpcyBwb2ludCBtYWtlcwotCSAqIHRoZSBsaXN0ZW5pbmcgKG1hc3Rlcikgc29jayBnZXQgQ0NJRCBjb250cm9sIGJsb2Nrcywgd2hpY2ggaXMgbm90Ci0JICogbmVjZXNzYXJ5LCBidXQgZm9yIG5vdywgdG8gbm90IG1lc3Mgd2l0aCB0aGUgdGVzdCB1c2Vyc3BhY2UgYXBwcywKLQkgKiBsZXRzIGxlYXZlIGl0IGhlcmUsIGxhdGVyIHRoZSByZWFsIHNvbHV0aW9uIGlzIHRvIGRvIHRoaXMgaW4gYQotCSAqIHNldHNvY2tvcHQoQ0NJRHMtSS13YW50L2FjY2VwdCkuIC1hY21lCi0JICovCi0JaWYgKGxpa2VseSghZGNjcF9jdGxfc29ja2V0X2luaXQpKSB7Ci0JCWRwLT5kY2Nwc19oY19yeF9jY2lkID0gY2NpZF9pbml0KGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3J4X2NjaWQsCi0JCQkJCQkgc2spOwotCQlkcC0+ZGNjcHNfaGNfdHhfY2NpZCA9IGNjaWRfaW5pdChkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb190eF9jY2lkLAotCQkJCQkJIHNrKTsKLQkgICAgCWlmIChkcC0+ZGNjcHNfaGNfcnhfY2NpZCA9PSBOVUxMIHx8Ci0JCSAgICBkcC0+ZGNjcHNfaGNfdHhfY2NpZCA9PSBOVUxMKSB7Ci0JCQljY2lkX2V4aXQoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKLQkJCWNjaWRfZXhpdChkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2spOwotCQkJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvcikgewotCQkJCWRjY3BfYWNrdmVjX2ZyZWUoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyk7Ci0JCQkJZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9IE5VTEw7Ci0JCQl9Ci0JCQlkcC0+ZGNjcHNfaGNfcnhfY2NpZCA9IGRwLT5kY2Nwc19oY190eF9jY2lkID0gTlVMTDsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JfSBlbHNlCi0JCWRjY3BfY3RsX3NvY2tldF9pbml0ID0gMDsKLQotCWRjY3BfaW5pdF94bWl0X3RpbWVycyhzayk7Ci0JaWNzay0+aWNza19ydG8gPSBEQ0NQX1RJTUVPVVRfSU5JVDsKLQlzay0+c2tfc3RhdGUgPSBEQ0NQX0NMT1NFRDsKLQlzay0+c2tfd3JpdGVfc3BhY2UgPSBkY2NwX3dyaXRlX3NwYWNlOwotCWljc2stPmljc2tfYWZfb3BzID0gJmRjY3BfaXB2NF9hZl9vcHM7Ci0JaWNzay0+aWNza19zeW5jX21zcyA9IGRjY3Bfc3luY19tc3M7Ci0JZHAtPmRjY3BzX21zc19jYWNoZSA9IDUzNjsKLQlkcC0+ZGNjcHNfcm9sZSA9IERDQ1BfUk9MRV9VTkRFRklORUQ7Ci0JZHAtPmRjY3BzX3NlcnZpY2UgPSBEQ0NQX1NFUlZJQ0VfSU5WQUxJRF9WQUxVRTsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdjRfaW5pdF9zb2NrKTsKLQotaW50IGRjY3BfdjRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKLXsKLQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCi0JLyoKLQkgKiBEQ0NQIGRvZXNuJ3QgdXNlIHNrX3dyaXRlX3F1ZXVlLCBqdXN0IHNrX3NlbmRfaGVhZAotCSAqIGZvciByZXRyYW5zbWlzc2lvbnMKLQkgKi8KLQlpZiAoc2stPnNrX3NlbmRfaGVhZCAhPSBOVUxMKSB7Ci0JCWtmcmVlX3NrYihzay0+c2tfc2VuZF9oZWFkKTsKLQkJc2stPnNrX3NlbmRfaGVhZCA9IE5VTEw7Ci0JfQotCi0JLyogQ2xlYW4gdXAgYSByZWZlcmVuY2VkIERDQ1AgYmluZCBidWNrZXQuICovCi0JaWYgKGluZXRfY3NrKHNrKS0+aWNza19iaW5kX2hhc2ggIT0gTlVMTCkKLQkJaW5ldF9wdXRfcG9ydCgmZGNjcF9oYXNoaW5mbywgc2spOwotCi0Ja2ZyZWUoZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCk7Ci0JZHAtPmRjY3BzX3NlcnZpY2VfbGlzdCA9IE5VTEw7Ci0KLQljY2lkX2hjX3J4X2V4aXQoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKLQljY2lkX2hjX3R4X2V4aXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrKTsKLQlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9hY2tfdmVjdG9yKSB7Ci0JCWRjY3BfYWNrdmVjX2ZyZWUoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyk7Ci0JCWRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPSBOVUxMOwotCX0KLQljY2lkX2V4aXQoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKLQljY2lkX2V4aXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrKTsKLQlkcC0+ZGNjcHNfaGNfcnhfY2NpZCA9IGRwLT5kY2Nwc19oY190eF9jY2lkID0gTlVMTDsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Y0X2Rlc3Ryb3lfc29jayk7Ci0KIHN0YXRpYyB2b2lkIGRjY3BfdjRfcmVxc2tfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7CiAJa2ZyZWUoaW5ldF9yc2socmVxKS0+b3B0KTsKQEAgLTExNDIsNyArMTAzNCw3IEBACiAJLnR3c2tfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayksCiB9OwogCi1zdHJ1Y3QgcHJvdG8gZGNjcF9wcm90ID0geworc3RhdGljIHN0cnVjdCBwcm90byBkY2NwX3Y0X3Byb3QgPSB7CiAJLm5hbWUJCQk9ICJEQ0NQIiwKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5jbG9zZQkJCT0gZGNjcF9jbG9zZSwKQEAgLTExNTUsMTcgKzEwNDcsMTEwIEBACiAJLnNlbmRtc2cJCT0gZGNjcF9zZW5kbXNnLAogCS5yZWN2bXNnCQk9IGRjY3BfcmVjdm1zZywKIAkuYmFja2xvZ19yY3YJCT0gZGNjcF92NF9kb19yY3YsCi0JLmhhc2gJCQk9IGRjY3BfdjRfaGFzaCwKKwkuaGFzaAkJCT0gZGNjcF9oYXNoLAogCS51bmhhc2gJCQk9IGRjY3BfdW5oYXNoLAogCS5hY2NlcHQJCQk9IGluZXRfY3NrX2FjY2VwdCwKIAkuZ2V0X3BvcnQJCT0gZGNjcF92NF9nZXRfcG9ydCwKIAkuc2h1dGRvd24JCT0gZGNjcF9zaHV0ZG93biwKLQkuZGVzdHJveQkJPSBkY2NwX3Y0X2Rlc3Ryb3lfc29jaywKKwkuZGVzdHJveQkJPSBkY2NwX2Rlc3Ryb3lfc29jaywKIAkub3JwaGFuX2NvdW50CQk9ICZkY2NwX29ycGhhbl9jb3VudCwKIAkubWF4X2hlYWRlcgkJPSBNQVhfRENDUF9IRUFERVIsCiAJLm9ial9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZGNjcF9zb2NrKSwKIAkucnNrX3Byb3QJCT0gJmRjY3BfcmVxdWVzdF9zb2NrX29wcywKIAkudHdza19wcm90CQk9ICZkY2NwX3RpbWV3YWl0X3NvY2tfb3BzLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X3NldHNvY2tvcHQJPSBjb21wYXRfZGNjcF9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdAk9IGNvbXBhdF9kY2NwX2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfcHJvdCk7CitzdGF0aWMgc3RydWN0IG5ldF9wcm90b2NvbCBkY2NwX3Y0X3Byb3RvY29sID0geworCS5oYW5kbGVyCT0gZGNjcF92NF9yY3YsCisJLmVycl9oYW5kbGVyCT0gZGNjcF92NF9lcnIsCisJLm5vX3BvbGljeQk9IDEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X2RjY3Bfb3BzID0geworCS5mYW1pbHkJCSAgID0gUEZfSU5FVCwKKwkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCisJLnJlbGVhc2UJICAgPSBpbmV0X3JlbGVhc2UsCisJLmJpbmQJCSAgID0gaW5ldF9iaW5kLAorCS5jb25uZWN0CSAgID0gaW5ldF9zdHJlYW1fY29ubmVjdCwKKwkuc29ja2V0cGFpcgkgICA9IHNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0CQkgICA9IGluZXRfYWNjZXB0LAorCS5nZXRuYW1lCSAgID0gaW5ldF9nZXRuYW1lLAorCS8qIEZJWE1FOiB3b3JrIG9uIHRjcF9wb2xsIHRvIHJlbmFtZSBpdCB0byBpbmV0X2Nza19wb2xsICovCisJLnBvbGwJCSAgID0gZGNjcF9wb2xsLAorCS5pb2N0bAkJICAgPSBpbmV0X2lvY3RsLAorCS8qIEZJWE1FOiB3b3JrIG9uIGluZXRfbGlzdGVuIHRvIHJlbmFtZSBpdCB0byBzb2NrX2NvbW1vbl9saXN0ZW4gKi8KKwkubGlzdGVuCQkgICA9IGluZXRfZGNjcF9saXN0ZW4sCisJLnNodXRkb3duCSAgID0gaW5ldF9zaHV0ZG93biwKKwkuc2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5zZW5kbXNnCSAgID0gaW5ldF9zZW5kbXNnLAorCS5yZWN2bXNnCSAgID0gc29ja19jb21tb25fcmVjdm1zZywKKwkubW1hcAkJICAgPSBzb2NrX25vX21tYXAsCisJLnNlbmRwYWdlCSAgID0gc29ja19ub19zZW5kcGFnZSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5ldF9wcm90b3N3IGRjY3BfdjRfcHJvdG9zdyA9IHsKKwkudHlwZQkJPSBTT0NLX0RDQ1AsCisJLnByb3RvY29sCT0gSVBQUk9UT19EQ0NQLAorCS5wcm90CQk9ICZkY2NwX3Y0X3Byb3QsCisJLm9wcwkJPSAmaW5ldF9kY2NwX29wcywKKwkuY2FwYWJpbGl0eQk9IC0xLAorCS5ub19jaGVjawk9IDAsCisJLmZsYWdzCQk9IElORVRfUFJPVE9TV19JQ1NLLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGNjcF92NF9pbml0KHZvaWQpCit7CisJaW50IGVyciA9IHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Y0X3Byb3QsIDEpOworCisJaWYgKGVyciAhPSAwKQorCQlnb3RvIG91dDsKKworCWVyciA9IGluZXRfYWRkX3Byb3RvY29sKCZkY2NwX3Y0X3Byb3RvY29sLCBJUFBST1RPX0RDQ1ApOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBvdXRfcHJvdG9fdW5yZWdpc3RlcjsKKworCWluZXRfcmVnaXN0ZXJfcHJvdG9zdygmZGNjcF92NF9wcm90b3N3KTsKKworCWVyciA9IGluZXRfY3NrX2N0bF9zb2NrX2NyZWF0ZSgmZGNjcF92NF9jdGxfc29ja2V0LCBQRl9JTkVULAorCQkJCSAgICAgICBTT0NLX0RDQ1AsIElQUFJPVE9fRENDUCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9wcm90b3N3Oworb3V0OgorCXJldHVybiBlcnI7CitvdXRfdW5yZWdpc3Rlcl9wcm90b3N3OgorCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y0X3Byb3Rvc3cpOworCWluZXRfZGVsX3Byb3RvY29sKCZkY2NwX3Y0X3Byb3RvY29sLCBJUFBST1RPX0RDQ1ApOworb3V0X3Byb3RvX3VucmVnaXN0ZXI6CisJcHJvdG9fdW5yZWdpc3RlcigmZGNjcF92NF9wcm90KTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRjY3BfdjRfZXhpdCh2b2lkKQoreworCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y0X3Byb3Rvc3cpOworCWluZXRfZGVsX3Byb3RvY29sKCZkY2NwX3Y0X3Byb3RvY29sLCBJUFBST1RPX0RDQ1ApOworCXByb3RvX3VucmVnaXN0ZXIoJmRjY3BfdjRfcHJvdCk7Cit9CisKK21vZHVsZV9pbml0KGRjY3BfdjRfaW5pdCk7Cittb2R1bGVfZXhpdChkY2NwX3Y0X2V4aXQpOworCisvKgorICogX19zdHJpbmdpZnkgZG9lc24ndCBsaWtlcyBlbnVtcywgc28gdXNlIFNPQ0tfRENDUCAoNikgYW5kIElQUFJPVE9fRENDUCAoMzMpCisgKiB2YWx1ZXMgZGlyZWN0bHksIEFsc28gY292ZXIgdGhlIGNhc2Ugd2hlcmUgdGhlIHByb3RvY29sIGlzIG5vdCBzcGVjaWZpZWQsCisgKiBpLmUuIG5ldC1wZi1QRl9JTkVULXByb3RvLTAtdHlwZS1TT0NLX0RDQ1AKKyAqLworTU9EVUxFX0FMSUFTKCJuZXQtcGYtIiBfX3N0cmluZ2lmeShQRl9JTkVUKSAiLXByb3RvLTMzLXR5cGUtNiIpOworTU9EVUxFX0FMSUFTKCJuZXQtcGYtIiBfX3N0cmluZ2lmeShQRl9JTkVUKSAiLXByb3RvLTAtdHlwZS02Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAbWFuZHJpdmEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEQ0NQIC0gRGF0YWdyYW0gQ29uZ2VzdGlvbiBDb250cm9sbGVkIFByb3RvY29sIik7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY2LmMgYi9uZXQvZGNjcC9pcHY2LmMKaW5kZXggODBjNGQwNC4uNjVlMmFiMCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2Ni5jCisrKyBiL25ldC9kY2NwL2lwdjYuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKglEQ0NQIG92ZXIgSVB2NgotICoJTGludXggSU5FVDYgaW1wbGVtZW50YXRpb24gCisgKglMaW51eCBJTkVUNiBpbXBsZW1lbnRhdGlvbgogICoKICAqCUJhc2VkIG9uIG5ldC9kY2NwNi9pcHY2LmMKICAqCkBAIC0zMyw2ICszMyw5IEBACiAjaW5jbHVkZSAiZGNjcC5oIgogI2luY2x1ZGUgImlwdjYuaCIKIAorLyogU29ja2V0IHVzZWQgZm9yIHNlbmRpbmcgUlNUcyBhbmQgQUNLcyAqLworc3RhdGljIHN0cnVjdCBzb2NrZXQgKmRjY3BfdjZfY3RsX3NvY2tldDsKKwogc3RhdGljIHZvaWQgZGNjcF92Nl9jdGxfc2VuZF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIGRjY3BfdjZfcmVxc2tfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwpAQCAtNTMsNyArNTYsNyBAQAogewogCWlmIChzay0+c2tfc3RhdGUgIT0gRENDUF9DTE9TRUQpIHsKIAkJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMgPT0gJmRjY3BfaXB2Nl9tYXBwZWQpIHsKLQkJCWRjY3BfcHJvdC5oYXNoKHNrKTsKKwkJCWRjY3BfaGFzaChzayk7CiAJCQlyZXR1cm47CiAJCX0KIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwpAQCAtNjMsOCArNjYsOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHUxNiBkY2NwX3Y2X2NoZWNrKHN0cnVjdCBkY2NwX2hkciAqZGgsIGludCBsZW4sCi0JCQkJc3RydWN0IGluNl9hZGRyICpzYWRkciwgCi0JCQkJc3RydWN0IGluNl9hZGRyICpkYWRkciwgCisJCQkJc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQlzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCXVuc2lnbmVkIGxvbmcgYmFzZSkKIHsKIAlyZXR1cm4gY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgbGVuLCBJUFBST1RPX0RDQ1AsIGJhc2UpOwpAQCAtNzksMTcgKzgyLDE3IEBACiAJCQkJCQkgICAgc2tiLT5uaC5pcHY2aC0+c2FkZHIuczZfYWRkcjMyLAogCQkJCQkJICAgIGRoLT5kY2NwaF9kcG9ydCwKIAkJCQkJCSAgICBkaC0+ZGNjcGhfc3BvcnQpOwotCWVsc2UKLQkJcmV0dXJuIHNlY3VyZV9kY2NwX3NlcXVlbmNlX251bWJlcihza2ItPm5oLmlwaC0+ZGFkZHIsCi0JCQkJCQkgICBza2ItPm5oLmlwaC0+c2FkZHIsCi0JCQkJCQkgICBkaC0+ZGNjcGhfZHBvcnQsCi0JCQkJCQkgICBkaC0+ZGNjcGhfc3BvcnQpOworCisJcmV0dXJuIHNlY3VyZV9kY2NwX3NlcXVlbmNlX251bWJlcihza2ItPm5oLmlwaC0+ZGFkZHIsCisJCQkJCSAgIHNrYi0+bmguaXBoLT5zYWRkciwKKwkJCQkJICAgZGgtPmRjY3BoX2Rwb3J0LAorCQkJCQkgICBkaC0+ZGNjcGhfc3BvcnQpOwogfQogCi1zdGF0aWMgaW50IGRjY3BfdjZfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIAorc3RhdGljIGludCBkY2NwX3Y2X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAogCQkJICAgaW50IGFkZHJfbGVuKQogewotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSB1YWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICp1c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKil1YWRkcjsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKQEAgLTEwMiwxMCArMTA1LDEwIEBACiAKIAlkcC0+ZGNjcHNfcm9sZSA9IERDQ1BfUk9MRV9DTElFTlQ7CiAKLQlpZiAoYWRkcl9sZW4gPCBTSU42X0xFTl9SRkMyMTMzKSAKKwlpZiAoYWRkcl9sZW4gPCBTSU42X0xFTl9SRkMyMTMzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh1c2luLT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikgCisJaWYgKHVzaW4tPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIAogCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOwpAQCAtMTIyLDE3ICsxMjUsMTUgQEAKIAkJCWZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKTsKIAkJfQogCX0KLQogCS8qCi0gIAkgKgljb25uZWN0KCkgdG8gSU5BRERSX0FOWSBtZWFucyBsb29wYmFjayAoQlNEJ2lzbSkuCi0gIAkgKi8KLSAgCQotICAJaWYgKGlwdjZfYWRkcl9hbnkoJnVzaW4tPnNpbjZfYWRkcikpCi0JCXVzaW4tPnNpbjZfYWRkci5zNl9hZGRyWzE1XSA9IDB4MTsgCisJICogY29ubmVjdCgpIHRvIElOQUREUl9BTlkgbWVhbnMgbG9vcGJhY2sgKEJTRCdpc20pLgorCSAqLworCWlmIChpcHY2X2FkZHJfYW55KCZ1c2luLT5zaW42X2FkZHIpKQorCQl1c2luLT5zaW42X2FkZHIuczZfYWRkclsxNV0gPSAxOwogCiAJYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoJnVzaW4tPnNpbjZfYWRkcik7CiAKLQlpZihhZGRyX3R5cGUgJiBJUFY2X0FERFJfTVVMVElDQVNUKQorCWlmIChhZGRyX3R5cGUgJiBJUFY2X0FERFJfTVVMVElDQVNUKQogCQlyZXR1cm4gLUVORVRVTlJFQUNIOwogCiAJaWYgKGFkZHJfdHlwZSAmIElQVjZfQUREUl9MSU5LTE9DQUwpIHsKQEAgLTE1Nyw5ICsxNTgsOCBAQAogCW5wLT5mbG93X2xhYmVsID0gZmwuZmw2X2Zsb3dsYWJlbDsKIAogCS8qCi0JICoJRENDUCBvdmVyIElQdjQKKwkgKiBEQ0NQIG92ZXIgSVB2NAogCSAqLwotCiAJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEKSB7CiAJCXUzMiBleHRoZHJsZW4gPSBpY3NrLT5pY3NrX2V4dF9oZHJfbGVuOwogCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwpAQCAtMTc3LDcgKzE3Nyw2IEBACiAJCXNrLT5za19iYWNrbG9nX3JjdiA9IGRjY3BfdjRfZG9fcmN2OwogCiAJCWVyciA9IGRjY3BfdjRfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKTsKLQogCQlpZiAoZXJyKSB7CiAJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gZXh0aGRybGVuOwogCQkJaWNzay0+aWNza19hZl9vcHMgPSAmZGNjcF9pcHY2X2FmX29wczsKQEAgLTIwMyw4ICsyMDIsOSBAQAogCWZsLmZsX2lwX2Rwb3J0ID0gdXNpbi0+c2luNl9wb3J0OwogCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+c3BvcnQ7CiAKLQlpZiAobnAtPm9wdCAmJiBucC0+b3B0LT5zcmNydCkgewotCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopbnAtPm9wdC0+c3JjcnQ7CisJaWYgKG5wLT5vcHQgIT0gTlVMTCAmJiBucC0+b3B0LT5zcmNydCAhPSBOVUxMKSB7CisJCWNvbnN0IHN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKilucC0+b3B0LT5zcmNydDsKKwogCQlpcHY2X2FkZHJfY29weSgmZmluYWwsICZmbC5mbDZfZHN0KTsKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7CiAJCWZpbmFsX3AgPSAmZmluYWw7CkBAIC0yMTMsMTAgKzIxMywxMiBAQAogCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbHVyZTsKKwogCWlmIChmaW5hbF9wKQogCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7CiAKLQlpZiAoKGVyciA9IHhmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDApKSA8IDApCisJZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMCk7CisJaWYgKGVyciA8IDApCiAJCWdvdG8gZmFpbHVyZTsKIAogCWlmIChzYWRkciA9PSBOVUxMKSB7CkBAIC0yMzEsNyArMjMzLDcgQEAKIAlpcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwpOwogCiAJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IDA7Ci0JaWYgKG5wLT5vcHQpCisJaWYgKG5wLT5vcHQgIT0gTlVMTCkKIAkJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IChucC0+b3B0LT5vcHRfZmxlbiArCiAJCQkJCSAgbnAtPm9wdC0+b3B0X25mbGVuKTsKIApAQCAtMjY0LDcgKzI2Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGRjY3BfdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAotCQkJaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX3UzMiBpbmZvKQorCQkJaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gKHN0cnVjdCBpcHY2aGRyICopc2tiLT5kYXRhOwogCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGggPSAoc3RydWN0IGRjY3BfaGRyICopKHNrYi0+ZGF0YSArIG9mZnNldCk7CkBAIC0zMDUsNyArMzA3LDYgQEAKIAogCQkvKiBpY21wIHNob3VsZCBoYXZlIHVwZGF0ZWQgdGhlIGRlc3RpbmF0aW9uIGNhY2hlIGVudHJ5ICovCiAJCWRzdCA9IF9fc2tfZHN0X2NoZWNrKHNrLCBucC0+ZHN0X2Nvb2tpZSk7Ci0KIAkJaWYgKGRzdCA9PSBOVUxMKSB7CiAJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJCQlzdHJ1Y3QgZmxvd2kgZmw7CkBAIC0zMjIsMTYgKzMyMywxNyBAQAogCQkJZmwuZmxfaXBfZHBvcnQgPSBpbmV0LT5kcG9ydDsKIAkJCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+c3BvcnQ7CiAKLQkJCWlmICgoZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCkpKSB7CisJCQllcnIgPSBpcDZfZHN0X2xvb2t1cChzaywgJmRzdCwgJmZsKTsKKwkJCWlmIChlcnIpIHsKIAkJCQlzay0+c2tfZXJyX3NvZnQgPSAtZXJyOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCi0JCQlpZiAoKGVyciA9IHhmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDApKSA8IDApIHsKKwkJCWVyciA9IHhmcm1fbG9va3VwKCZkc3QsICZmbCwgc2ssIDApOworCQkJaWYgKGVyciA8IDApIHsKIAkJCQlzay0+c2tfZXJyX3NvZnQgPSAtZXJyOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCiAJCX0gZWxzZQogCQkJZHN0X2hvbGQoZHN0KTsKIApAQCAtMzU1LDExICszNTcsMTIgQEAKIAkJcmVxID0gaW5ldDZfY3NrX3NlYXJjaF9yZXEoc2ssICZwcmV2LCBkaC0+ZGNjcGhfZHBvcnQsCiAJCQkJCSAgICZoZHItPmRhZGRyLCAmaGRyLT5zYWRkciwKIAkJCQkJICAgaW5ldDZfaWlmKHNrYikpOwotCQlpZiAoIXJlcSkKKwkJaWYgKHJlcSA9PSBOVUxMKQogCQkJZ290byBvdXQ7CiAKLQkJLyogSUNNUHMgYXJlIG5vdCBiYWNrbG9nZ2VkLCBoZW5jZSB3ZSBjYW5ub3QgZ2V0Ci0JCSAqIGFuIGVzdGFibGlzaGVkIHNvY2tldCBoZXJlLgorCQkvKgorCQkgKiBJQ01QcyBhcmUgbm90IGJhY2tsb2dnZWQsIGhlbmNlIHdlIGNhbm5vdCBnZXQgYW4gZXN0YWJsaXNoZWQKKwkJICogc29ja2V0IGhlcmUuCiAJCSAqLwogCQlCVUdfVFJBUChyZXEtPnNrID09IE5VTEwpOwogCkBAIC0zNzMsNyArMzc2LDcgQEAKIAogCWNhc2UgRENDUF9SRVFVRVNUSU5HOgogCWNhc2UgRENDUF9SRVNQT05EOiAgLyogQ2Fubm90IGhhcHBlbi4KLQkJCSAgICAgICBJdCBjYW4sIGl0IFNZTnMgYXJlIGNyb3NzZWQuIC0tQU5LICovIAorCQkJICAgICAgIEl0IGNhbiwgaXQgU1lOcyBhcmUgY3Jvc3NlZC4gLS1BTksgKi8KIAkJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CiAJCQlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9BVFRFTVBURkFJTFMpOwogCQkJc2stPnNrX2VyciA9IGVycjsKQEAgLTM4Miw3ICszODUsNiBAQAogCQkJICogKHNlZSBjb25uZWN0IGluIHNvY2suYykKIAkJCSAqLwogCQkJc2stPnNrX2Vycm9yX3JlcG9ydChzayk7Ci0KIAkJCWRjY3BfZG9uZShzayk7CiAJCX0gZWxzZQogCQkJc2stPnNrX2Vycl9zb2Z0ID0gZXJyOwpAQCAtNDI4LDE0ICs0MzAsMTYgQEAKIAkJICAgIGlyZXE2LT5wa3RvcHRzKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqcGt0b3B0cyA9IGlyZXE2LT5wa3RvcHRzOwogCQkJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpyeG9wdCA9IElQNkNCKHBrdG9wdHMpOworCiAJCQlpZiAocnhvcHQtPnNyY3J0KQogCQkJCW9wdCA9IGlwdjZfaW52ZXJ0X3J0aGRyKHNrLAogCQkJCQkoc3RydWN0IGlwdjZfcnRfaGRyICopKHBrdG9wdHMtPm5oLnJhdyArCiAJCQkJCQkJICAgICAgIHJ4b3B0LT5zcmNydCkpOwogCQl9CiAKLQkJaWYgKG9wdCAmJiBvcHQtPnNyY3J0KSB7Ci0JCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopb3B0LT5zcmNydDsKKwkJaWYgKG9wdCAhPSBOVUxMICYmIG9wdC0+c3JjcnQgIT0gTlVMTCkgeworCQkJY29uc3Qgc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKW9wdC0+c3JjcnQ7CisKIAkJCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwogCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7CiAJCQlmaW5hbF9wID0gJmZpbmFsOwpAQCAtNDQ0LDE1ICs0NDgsMTkgQEAKIAkJZXJyID0gaXA2X2RzdF9sb29rdXAoc2ssICZkc3QsICZmbCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGRvbmU7CisKIAkJaWYgKGZpbmFsX3ApCiAJCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7Ci0JCWlmICgoZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMCkpIDwgMCkKKworCQllcnIgPSB4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKTsKKwkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGRvbmU7CiAJfQogCiAJc2tiID0gZGNjcF9tYWtlX3Jlc3BvbnNlKHNrLCBkc3QsIHJlcSk7CiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCXN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOworCiAJCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjZfY2hlY2soZGgsIHNrYi0+bGVuLAogCQkJCQkJICAgJmlyZXE2LT5sb2NfYWRkciwKIAkJCQkJCSAgICZpcmVxNi0+cm10X2FkZHIsCkBAIC00NjYsNyArNDc0LDcgQEAKIAl9CiAKIGRvbmU6Ci0gICAgICAgIGlmIChvcHQgJiYgb3B0ICE9IG5wLT5vcHQpCisJaWYgKG9wdCAhPSBOVUxMICYmIG9wdCAhPSBucC0+b3B0KQogCQlzb2NrX2tmcmVlX3Moc2ssIG9wdCwgb3B0LT50b3RfbGVuKTsKIAlkc3RfcmVsZWFzZShkc3QpOwogCXJldHVybiBlcnI7CkBAIC00OTcsNyArNTA1LDcgQEAKIAlzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKIAogCWRoLT5kY2NwaF9jaGVja3N1bSA9IGNzdW1faXB2Nl9tYWdpYygmbnAtPnNhZGRyLCAmbnAtPmRhZGRyLAotCQkJCQkgICAgIGxlbiwgSVBQUk9UT19EQ0NQLCAKKwkJCQkJICAgICBsZW4sIElQUFJPVE9fRENDUCwKIAkJCQkJICAgICBjc3VtX3BhcnRpYWwoKGNoYXIgKilkaCwKIAkJCQkJCQkgIGRoLT5kY2NwaF9kb2ZmIDw8IDIsCiAJCQkJCQkJICBza2ItPmNzdW0pKTsKQEAgLTUwNSw4ICs1MTMsOCBAQAogCiBzdGF0aWMgdm9pZCBkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0KHN0cnVjdCBza19idWZmICpyeHNrYikKIHsKLQlzdHJ1Y3QgZGNjcF9oZHIgKnJ4ZGggPSBkY2NwX2hkcihyeHNrYiksICpkaDsgCi0JY29uc3QgaW50IGRjY3BfaGRyX3Jlc2V0X2xlbiA9IHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpICsKKwlzdHJ1Y3QgZGNjcF9oZHIgKnJ4ZGggPSBkY2NwX2hkcihyeHNrYiksICpkaDsKKwljb25zdCB1MzIgZGNjcF9oZHJfcmVzZXRfbGVuID0gc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKwogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCkgKwogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX3Jlc2V0KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNTE3LDIwICs1MjUsMTQgQEAKIAkJcmV0dXJuOwogCiAJaWYgKCFpcHY2X3VuaWNhc3RfZGVzdGluYXRpb24ocnhza2IpKQotCQlyZXR1cm47IAorCQlyZXR1cm47CiAKLQkvKgotCSAqIFdlIG5lZWQgdG8gZ3JhYiBzb21lIG1lbW9yeSwgYW5kIHB1dCB0b2dldGhlciBhbiBSU1QsCi0JICogYW5kIHRoZW4gcHV0IGl0IGludG8gdGhlIHF1ZXVlIHRvIGJlIHNlbnQuCi0JICovCi0KLQlza2IgPSBhbGxvY19za2IoTUFYX0hFQURFUiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKwotCQkJZGNjcF9oZHJfcmVzZXRfbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoc2tiID09IE5VTEwpIAorCXNrYiA9IGFsbG9jX3NrYihkY2NwX3Y2X2N0bF9zb2NrZXQtPnNrLT5za19wcm90LT5tYXhfaGVhZGVyLAorCQkJR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKQogCSAgCXJldHVybjsKIAotCXNrYl9yZXNlcnZlKHNrYiwgTUFYX0hFQURFUiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKwotCQkgICAgZGNjcF9oZHJfcmVzZXRfbGVuKTsKKwlza2JfcmVzZXJ2ZShza2IsIGRjY3BfdjZfY3RsX3NvY2tldC0+c2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwogCiAJc2tiLT5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgZGNjcF9oZHJfcmVzZXRfbGVuKTsKIAlkaCA9IGRjY3BfaGRyKHNrYik7CkBAIC01NjgsNyArNTcwLDcgQEAKIAkvKiBzayA9IE5VTEwsIGJ1dCBpdCBpcyBzYWZlIGZvciBub3cuIFJTVCBzb2NrZXQgcmVxdWlyZWQuICovCiAJaWYgKCFpcDZfZHN0X2xvb2t1cChOVUxMLCAmc2tiLT5kc3QsICZmbCkpIHsKIAkJaWYgKHhmcm1fbG9va3VwKCZza2ItPmRzdCwgJmZsLCBOVUxMLCAwKSA+PSAwKSB7Ci0JCQlpcDZfeG1pdChOVUxMLCBza2IsICZmbCwgTlVMTCwgMCk7CisJCQlpcDZfeG1pdChkY2NwX3Y2X2N0bF9zb2NrZXQtPnNrLCBza2IsICZmbCwgTlVMTCwgMCk7CiAJCQlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9PVVRTRUdTKTsKIAkJCURDQ1BfSU5DX1NUQVRTX0JIKERDQ1BfTUlCX09VVFJTVFMpOwogCQkJcmV0dXJuOwpAQCAtNTc4LDIyICs1ODAsMjIgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgZGNjcF92Nl9jdGxfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnJ4c2tiKQorc3RhdGljIHZvaWQgZGNjcF92Nl9yZXFza19zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqcnhza2IsCisJCQkJICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewogCXN0cnVjdCBmbG93aSBmbDsKIAlzdHJ1Y3QgZGNjcF9oZHIgKnJ4ZGggPSBkY2NwX2hkcihyeHNrYiksICpkaDsKLQljb25zdCBpbnQgZGNjcF9oZHJfYWNrX2xlbiA9IHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpICsKKwljb25zdCB1MzIgZGNjcF9oZHJfYWNrX2xlbiA9IHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpICsKIAkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSArCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0Jc2tiID0gYWxsb2Nfc2tiKE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKLQkJCWRjY3BfaGRyX2Fja19sZW4sIEdGUF9BVE9NSUMpOworCXNrYiA9IGFsbG9jX3NrYihkY2NwX3Y2X2N0bF9zb2NrZXQtPnNrLT5za19wcm90LT5tYXhfaGVhZGVyLAorCQkJR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlza2JfcmVzZXJ2ZShza2IsIE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKLQkJCSBkY2NwX2hkcl9hY2tfbGVuKTsKKwlza2JfcmVzZXJ2ZShza2IsIGRjY3BfdjZfY3RsX3NvY2tldC0+c2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwogCiAJc2tiLT5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgZGNjcF9oZHJfYWNrX2xlbik7CiAJZGggPSBkY2NwX2hkcihza2IpOwpAQCAtNjA1LDcgKzYwNyw3IEBACiAJZGgtPmRjY3BoX2Rwb3J0ID0gcnhkaC0+ZGNjcGhfc3BvcnQ7CiAJZGgtPmRjY3BoX2RvZmYJPSBkY2NwX2hkcl9hY2tfbGVuIC8gNDsKIAlkaC0+ZGNjcGhfeAk9IDE7Ci0JCisKIAlkY2NwX2hkcl9zZXRfc2VxKGRoLCBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX2Fja19zZXEpOwogCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwKIAkJCSBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX3NlcSk7CkBAIC02MjMsNyArNjI1LDcgQEAKIAogCWlmICghaXA2X2RzdF9sb29rdXAoTlVMTCwgJnNrYi0+ZHN0LCAmZmwpKSB7CiAJCWlmICh4ZnJtX2xvb2t1cCgmc2tiLT5kc3QsICZmbCwgTlVMTCwgMCkgPj0gMCkgewotCQkJaXA2X3htaXQoTlVMTCwgc2tiLCAmZmwsIE5VTEwsIDApOworCQkJaXA2X3htaXQoZGNjcF92Nl9jdGxfc29ja2V0LT5zaywgc2tiLCAmZmwsIE5VTEwsIDApOwogCQkJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfT1VUU0VHUyk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTYzMiwxMiArNjM0LDYgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgZGNjcF92Nl9yZXFza19zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKLXsKLQlkY2NwX3Y2X2N0bF9zZW5kX2Fjayhza2IpOwotfQotCiBzdGF0aWMgc3RydWN0IHNvY2sgKmRjY3BfdjZfaG5kX3JlcShzdHJ1Y3Qgc29jayAqc2ssc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKQEAgLTY1Nyw3ICs2NTMsNiBAQAogCQkJCQkgJmlwaC0+c2FkZHIsIGRoLT5kY2NwaF9zcG9ydCwKIAkJCQkJICZpcGgtPmRhZGRyLCBudG9ocyhkaC0+ZGNjcGhfZHBvcnQpLAogCQkJCQkgaW5ldDZfaWlmKHNrYikpOwotCiAJaWYgKG5zayAhPSBOVUxMKSB7CiAJCWlmIChuc2stPnNrX3N0YXRlICE9IERDQ1BfVElNRV9XQUlUKSB7CiAJCQliaF9sb2NrX3NvY2sobnNrKTsKQEAgLTY3OCw3ICs2NzMsNyBAQAogCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcTsKIAlzdHJ1Y3QgaW5ldDZfcmVxdWVzdF9zb2NrICppcmVxNjsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7Ci0gCWNvbnN0IF9fdTMyIHNlcnZpY2UgPSBkY2NwX2hkcl9yZXF1ZXN0KHNrYiktPmRjY3BoX3JlcV9zZXJ2aWNlOworIAljb25zdCBfX2JlMzIgc2VydmljZSA9IGRjY3BfaGRyX3JlcXVlc3Qoc2tiKS0+ZGNjcGhfcmVxX3NlcnZpY2U7CiAJc3RydWN0IGRjY3Bfc2tiX2NiICpkY2IgPSBEQ0NQX1NLQl9DQihza2IpOwogCV9fdTggcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9UT09fQlVTWTsKIApAQCAtNjg2LDE3ICs2ODEsMTcgQEAKIAkJcmV0dXJuIGRjY3BfdjRfY29ubl9yZXF1ZXN0KHNrLCBza2IpOwogCiAJaWYgKCFpcHY2X3VuaWNhc3RfZGVzdGluYXRpb24oc2tiKSkKLQkJZ290byBkcm9wOyAKKwkJZ290byBkcm9wOwogCiAJaWYgKGRjY3BfYmFkX3NlcnZpY2VfY29kZShzaywgc2VydmljZSkpIHsKIAkJcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9CQURfU0VSVklDRV9DT0RFOwogCQlnb3RvIGRyb3A7CiAgCX0KIAkvKgotCSAqCVRoZXJlIGFyZSBubyBTWU4gYXR0YWNrcyBvbiBJUHY2LCB5ZXQuLi4JCisJICogVGhlcmUgYXJlIG5vIFNZTiBhdHRhY2tzIG9uIElQdjYsIHlldC4uLgogCSAqLwogCWlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9pc19mdWxsKHNrKSkKLQkJZ290byBkcm9wOwkJCisJCWdvdG8gZHJvcDsKIAogCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spICYmIGluZXRfY3NrX3JlcXNrX3F1ZXVlX3lvdW5nKHNrKSA+IDEpCiAJCWdvdG8gZHJvcDsKQEAgLTczMCw3ICs3MjUsNyBAQAogCSAgICBpcHY2X2FkZHJfdHlwZSgmaXJlcTYtPnJtdF9hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpCiAJCWlyZXE2LT5paWYgPSBpbmV0Nl9paWYoc2tiKTsKIAotCS8qIAorCS8qCiAJICogU3RlcCAzOiBQcm9jZXNzIExJU1RFTiBzdGF0ZQogCSAqCiAJICogU2V0IFMuSVNSLCBTLkdTUiwgUy5TV0wsIFMuU1dIIGZyb20gcGFja2V0IG9yIEluaXQgQ29va2llCkBAIC03NzQsOSArNzY5LDggQEAKIAkJLyoKIAkJICoJdjYgbWFwcGVkCiAJCSAqLwotCiAJCW5ld3NrID0gZGNjcF92NF9yZXF1ZXN0X3JlY3Zfc29jayhzaywgc2tiLCByZXEsIGRzdCk7Ci0JCWlmIChuZXdzayA9PSBOVUxMKSAKKwkJaWYgKG5ld3NrID09IE5VTEwpCiAJCQlyZXR1cm4gTlVMTDsKIAogCQluZXdkcDYgPSAoc3RydWN0IGRjY3A2X3NvY2sgKiluZXdzazsKQEAgLTgyMiw5ICs4MTYsOSBAQAogCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKQogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAotCWlmIChucC0+cnhvcHQuYml0cy5vc3JjcnQgPT0gMiAmJgotCSAgICBvcHQgPT0gTlVMTCAmJiBpcmVxNi0+cGt0b3B0cykgewotCQlzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKnJ4b3B0ID0gSVA2Q0IoaXJlcTYtPnBrdG9wdHMpOworCWlmIChucC0+cnhvcHQuYml0cy5vc3JjcnQgPT0gMiAmJiBvcHQgPT0gTlVMTCAmJiBpcmVxNi0+cGt0b3B0cykgeworCQljb25zdCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKnJ4b3B0ID0gSVA2Q0IoaXJlcTYtPnBrdG9wdHMpOworCiAJCWlmIChyeG9wdC0+c3JjcnQpCiAJCQlvcHQgPSBpcHY2X2ludmVydF9ydGhkcihzaywKIAkJCQkoc3RydWN0IGlwdjZfcnRfaGRyICopKGlyZXE2LT5wa3RvcHRzLT5uaC5yYXcgKwpAQCAtODM4LDggKzgzMiw5IEBACiAJCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOwogCQlmbC5wcm90byA9IElQUFJPVE9fRENDUDsKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsICZpcmVxNi0+cm10X2FkZHIpOwotCQlpZiAob3B0ICYmIG9wdC0+c3JjcnQpIHsKLQkJCXN0cnVjdCBydDBfaGRyICpydDAgPSAoc3RydWN0IHJ0MF9oZHIgKikgb3B0LT5zcmNydDsKKwkJaWYgKG9wdCAhPSBOVUxMICYmIG9wdC0+c3JjcnQgIT0gTlVMTCkgeworCQkJY29uc3Qgc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKW9wdC0+c3JjcnQ7CisKIAkJCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwogCQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIHJ0MC0+YWRkcik7CiAJCQlmaW5hbF9wID0gJmZpbmFsOwpAQCAtODU3LDcgKzg1Miw3IEBACiAKIAkJaWYgKCh4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKSkgPCAwKQogCQkJZ290byBvdXQ7Ci0JfSAKKwl9CiAKIAluZXdzayA9IGRjY3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoc2ssIHJlcSwgc2tiKTsKIAlpZiAobmV3c2sgPT0gTlVMTCkKQEAgLTg3MCw5ICs4NjUsOCBAQAogCSAqLwogCiAJaXA2X2RzdF9zdG9yZShuZXdzaywgZHN0LCBOVUxMKTsKLQluZXdzay0+c2tfcm91dGVfY2FwcyA9IGRzdC0+ZGV2LT5mZWF0dXJlcyAmCi0JCX4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOwotCisJbmV3c2stPnNrX3JvdXRlX2NhcHMgPSBkc3QtPmRldi0+ZmVhdHVyZXMgJiB+KE5FVElGX0ZfSVBfQ1NVTSB8CisJCQkJCQkgICAgICBORVRJRl9GX1RTTyk7CiAJbmV3ZHA2ID0gKHN0cnVjdCBkY2NwNl9zb2NrICopbmV3c2s7CiAJbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOwogCW5ld2luZXQtPnBpbmV0NiA9ICZuZXdkcDYtPmluZXQ2OwpAQCAtODg2LDcgKzg4MCw3IEBACiAJaXB2Nl9hZGRyX2NvcHkoJm5ld25wLT5yY3Zfc2FkZHIsICZpcmVxNi0+bG9jX2FkZHIpOwogCW5ld3NrLT5za19ib3VuZF9kZXZfaWYgPSBpcmVxNi0+aWlmOwogCi0JLyogTm93IElQdjYgb3B0aW9ucy4uLiAKKwkvKiBOb3cgSVB2NiBvcHRpb25zLi4uCiAKIAkgICBGaXJzdDogbm8gSVB2NCBvcHRpb25zLgogCSAqLwpAQCAtOTA4LDIwICs5MDIsMjAgQEAKIAluZXducC0+bWNhc3Rfb2lmICA9IGluZXQ2X2lpZihza2IpOwogCW5ld25wLT5tY2FzdF9ob3BzID0gc2tiLT5uaC5pcHY2aC0+aG9wX2xpbWl0OwogCi0JLyogQ2xvbmUgbmF0aXZlIElQdjYgb3B0aW9ucyBmcm9tIGxpc3RlbmluZyBzb2NrZXQgKGlmIGFueSkKLQotCSAgIFllcywga2VlcGluZyByZWZlcmVuY2UgY291bnQgd291bGQgYmUgbXVjaCBtb3JlIGNsZXZlciwKLQkgICBidXQgd2UgbWFrZSBvbmUgbW9yZSBvbmUgdGhpbmcgdGhlcmU6IHJlYXR0YWNoIG9wdG1lbQotCSAgIHRvIG5ld3NrLgorCS8qCisJICogQ2xvbmUgbmF0aXZlIElQdjYgb3B0aW9ucyBmcm9tIGxpc3RlbmluZyBzb2NrZXQgKGlmIGFueSkKKwkgKgorCSAqIFllcywga2VlcGluZyByZWZlcmVuY2UgY291bnQgd291bGQgYmUgbXVjaCBtb3JlIGNsZXZlciwgYnV0IHdlIG1ha2UKKwkgKiBvbmUgbW9yZSBvbmUgdGhpbmcgdGhlcmU6IHJlYXR0YWNoIG9wdG1lbSB0byBuZXdzay4KIAkgKi8KLQlpZiAob3B0KSB7CisJaWYgKG9wdCAhPSBOVUxMKSB7CiAJCW5ld25wLT5vcHQgPSBpcHY2X2R1cF9vcHRpb25zKG5ld3NrLCBvcHQpOwogCQlpZiAob3B0ICE9IG5wLT5vcHQpCiAJCQlzb2NrX2tmcmVlX3Moc2ssIG9wdCwgb3B0LT50b3RfbGVuKTsKIAl9CiAKIAlpbmV0X2NzayhuZXdzayktPmljc2tfZXh0X2hkcl9sZW4gPSAwOwotCWlmIChuZXducC0+b3B0KQorCWlmIChuZXducC0+b3B0ICE9IE5VTEwpCiAJCWluZXRfY3NrKG5ld3NrKS0+aWNza19leHRfaGRyX2xlbiA9IChuZXducC0+b3B0LT5vcHRfbmZsZW4gKwogCQkJCQkJICAgICBuZXducC0+b3B0LT5vcHRfZmxlbik7CiAKQEAgLTkzOCw3ICs5MzIsNyBAQAogCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0xJU1RFTk9WRVJGTE9XUyk7CiBvdXQ6CiAJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfTElTVEVORFJPUFMpOwotCWlmIChvcHQgJiYgb3B0ICE9IG5wLT5vcHQpCisJaWYgKG9wdCAhPSBOVUxMICYmIG9wdCAhPSBucC0+b3B0KQogCQlzb2NrX2tmcmVlX3Moc2ssIG9wdCwgb3B0LT50b3RfbGVuKTsKIAlkc3RfcmVsZWFzZShkc3QpOwogCXJldHVybiBOVUxMOwpAQCAtOTcyLDggKzk2Niw4IEBACiAJCWdvdG8gZGlzY2FyZDsKIAogCS8qCi0JICoJc29ja2V0IGxvY2tpbmcgaXMgaGVyZSBmb3IgU01QIHB1cnBvc2VzIGFzIGJhY2tsb2cgcmN2Ci0JICoJaXMgY3VycmVudGx5IGNhbGxlZCB3aXRoIGJoIHByb2Nlc3NpbmcgZGlzYWJsZWQuCisJICogc29ja2V0IGxvY2tpbmcgaXMgaGVyZSBmb3IgU01QIHB1cnBvc2VzIGFzIGJhY2tsb2cgcmN2IGlzIGN1cnJlbnRseQorCSAqIGNhbGxlZCB3aXRoIGJoIHByb2Nlc3NpbmcgZGlzYWJsZWQuCiAJICovCiAKIAkvKiBEbyBTdGV2ZW5zJyBJUFY2X1BLVE9QVElPTlMuCkBAIC05OTgsMjAgKzk5MiwyMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfTElTVEVOKSB7IAorCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9MSVNURU4pIHsKIAkJc3RydWN0IHNvY2sgKm5zayA9IGRjY3BfdjZfaG5kX3JlcShzaywgc2tiKTsKLQkJaWYgKCFuc2spCi0JCQlnb3RvIGRpc2NhcmQ7CiAKKwkJaWYgKG5zayA9PSBOVUxMKQorCQkJZ290byBkaXNjYXJkOwogCQkvKgogCQkgKiBRdWV1ZSBpdCBvbiB0aGUgbmV3IHNvY2tldCBpZiB0aGUgbmV3IHNvY2tldCBpcyBhY3RpdmUsCiAJCSAqIG90aGVyd2lzZSB3ZSBqdXN0IHNob3J0Y2lyY3VpdCB0aGlzIGFuZCBjb250aW51ZSB3aXRoCiAJCSAqIHRoZSBuZXcgc29ja2V0Li4KIAkJICovCi0gCQlpZihuc2sgIT0gc2spIHsKKyAJCWlmIChuc2sgIT0gc2spIHsKIAkJCWlmIChkY2NwX2NoaWxkX3Byb2Nlc3Moc2ssIG5zaywgc2tiKSkKIAkJCQlnb3RvIHJlc2V0OwotCQkJaWYgKG9wdF9za2IpCisJCQlpZiAob3B0X3NrYiAhPSBOVUxMKQogCQkJCV9fa2ZyZWVfc2tiKG9wdF9za2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTEwMjQsNyArMTAxOCw3IEBACiByZXNldDoKIAlkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0KHNrYik7CiBkaXNjYXJkOgotCWlmIChvcHRfc2tiKQorCWlmIChvcHRfc2tiICE9IE5VTEwpCiAJCV9fa2ZyZWVfc2tiKG9wdF9za2IpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwpAQCAtMTA1Nyw3ICsxMDUxLDcgQEAKIAkJCSAgICBkaC0+ZGNjcGhfc3BvcnQsCiAJCQkgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLCBudG9ocyhkaC0+ZGNjcGhfZHBvcnQpLAogCQkJICAgIGluZXQ2X2lpZihza2IpKTsKLQkvKiAKKwkvKgogCSAqIFN0ZXAgMjoKIAkgKiAJSWYgbm8gc29ja2V0IC4uLgogCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CkBAIC0xMDY2LDE1ICsxMDYwLDE0IEBACiAJaWYgKHNrID09IE5VTEwpCiAJCWdvdG8gbm9fZGNjcF9zb2NrZXQ7CiAKLQkvKiAKKwkvKgogCSAqIFN0ZXAgMjoKIAkgKiAJLi4uIG9yIFMuc3RhdGUgPT0gVElNRVdBSVQsCiAJICoJCUdlbmVyYXRlIFJlc2V0KE5vIENvbm5lY3Rpb24pIHVubGVzcyBQLnR5cGUgPT0gUmVzZXQKIAkgKgkJRHJvcCBwYWNrZXQgYW5kIHJldHVybgogCSAqLwotCSAgICAgICAKIAlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfVElNRV9XQUlUKQotICAgICAgICAgICAgICAgIGdvdG8gZG9fdGltZV93YWl0OworCQlnb3RvIGRvX3RpbWVfd2FpdDsKIAogCWlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKIAkJZ290byBkaXNjYXJkX2FuZF9yZWxzZTsKQEAgLTExMTMsMzIgKzExMDYsNDAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X2FmX29wcyA9IHsKLQkucXVldWVfeG1pdAk9CWluZXQ2X2Nza194bWl0LAotCS5zZW5kX2NoZWNrCT0JZGNjcF92Nl9zZW5kX2NoZWNrLAotCS5yZWJ1aWxkX2hlYWRlcgk9CWluZXQ2X3NrX3JlYnVpbGRfaGVhZGVyLAotCS5jb25uX3JlcXVlc3QJPQlkY2NwX3Y2X2Nvbm5fcmVxdWVzdCwKLQkuc3luX3JlY3Zfc29jawk9CWRjY3BfdjZfcmVxdWVzdF9yZWN2X3NvY2ssCi0JLm5ldF9oZWFkZXJfbGVuCT0Jc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwKLQkuc2V0c29ja29wdAk9CWlwdjZfc2V0c29ja29wdCwKLQkuZ2V0c29ja29wdAk9CWlwdjZfZ2V0c29ja29wdCwKLQkuYWRkcjJzb2NrYWRkcgk9CWluZXQ2X2Nza19hZGRyMnNvY2thZGRyLAotCS5zb2NrYWRkcl9sZW4JPQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikKKwkucXVldWVfeG1pdAkgICA9IGluZXQ2X2Nza194bWl0LAorCS5zZW5kX2NoZWNrCSAgID0gZGNjcF92Nl9zZW5kX2NoZWNrLAorCS5yZWJ1aWxkX2hlYWRlcgkgICA9IGluZXQ2X3NrX3JlYnVpbGRfaGVhZGVyLAorCS5jb25uX3JlcXVlc3QJICAgPSBkY2NwX3Y2X2Nvbm5fcmVxdWVzdCwKKwkuc3luX3JlY3Zfc29jawkgICA9IGRjY3BfdjZfcmVxdWVzdF9yZWN2X3NvY2ssCisJLm5ldF9oZWFkZXJfbGVuCSAgID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwKKwkuc2V0c29ja29wdAkgICA9IGlwdjZfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IGlwdjZfZ2V0c29ja29wdCwKKwkuYWRkcjJzb2NrYWRkcgkgICA9IGluZXQ2X2Nza19hZGRyMnNvY2thZGRyLAorCS5zb2NrYWRkcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9pcHY2X3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X2lwdjZfZ2V0c29ja29wdCwKKyNlbmRpZgogfTsKIAogLyoKICAqCURDQ1Agb3ZlciBJUHY0IHZpYSBJTkVUNiBBUEkKICAqLwogc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X21hcHBlZCA9IHsKLQkucXVldWVfeG1pdAk9CWlwX3F1ZXVlX3htaXQsCi0JLnNlbmRfY2hlY2sJPQlkY2NwX3Y0X3NlbmRfY2hlY2ssCi0JLnJlYnVpbGRfaGVhZGVyCT0JaW5ldF9za19yZWJ1aWxkX2hlYWRlciwKLQkuY29ubl9yZXF1ZXN0CT0JZGNjcF92Nl9jb25uX3JlcXVlc3QsCi0JLnN5bl9yZWN2X3NvY2sJPQlkY2NwX3Y2X3JlcXVlc3RfcmVjdl9zb2NrLAotCS5uZXRfaGVhZGVyX2xlbgk9CXNpemVvZihzdHJ1Y3QgaXBoZHIpLAotCS5zZXRzb2Nrb3B0CT0JaXB2Nl9zZXRzb2Nrb3B0LAotCS5nZXRzb2Nrb3B0CT0JaXB2Nl9nZXRzb2Nrb3B0LAotCS5hZGRyMnNvY2thZGRyCT0JaW5ldDZfY3NrX2FkZHIyc29ja2FkZHIsCi0JLnNvY2thZGRyX2xlbgk9CXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KQorCS5xdWV1ZV94bWl0CSAgID0gaXBfcXVldWVfeG1pdCwKKwkuc2VuZF9jaGVjawkgICA9IGRjY3BfdjRfc2VuZF9jaGVjaywKKwkucmVidWlsZF9oZWFkZXIJICAgPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLAorCS5jb25uX3JlcXVlc3QJICAgPSBkY2NwX3Y2X2Nvbm5fcmVxdWVzdCwKKwkuc3luX3JlY3Zfc29jawkgICA9IGRjY3BfdjZfcmVxdWVzdF9yZWN2X3NvY2ssCisJLm5ldF9oZWFkZXJfbGVuCSAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksCisJLnNldHNvY2tvcHQJICAgPSBpcHY2X3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJICAgPSBpcHY2X2dldHNvY2tvcHQsCisJLmFkZHIyc29ja2FkZHIJICAgPSBpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkciwKKwkuc29ja2FkZHJfbGVuCSAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfaXB2Nl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9pcHY2X2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKIC8qIE5PVEU6IEEgbG90IG9mIHRoaW5ncyBzZXQgdG8gemVybyBleHBsaWNpdGx5IGJ5IGNhbGwgdG8KQEAgLTExNDYsNzEgKzExNDcsODMgQEAKICAqLwogc3RhdGljIGludCBkY2NwX3Y2X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JaW50IGVyciA9IGRjY3BfdjRfaW5pdF9zb2NrKHNrKTsKKwlzdGF0aWMgX191OCBkY2NwX3Y2X2N0bF9zb2NrX2luaXRpYWxpemVkOworCWludCBlcnIgPSBkY2NwX2luaXRfc29jayhzaywgZGNjcF92Nl9jdGxfc29ja19pbml0aWFsaXplZCk7CiAKLQlpZiAoZXJyID09IDApCisJaWYgKGVyciA9PSAwKSB7CisJCWlmICh1bmxpa2VseSghZGNjcF92Nl9jdGxfc29ja19pbml0aWFsaXplZCkpCisJCQlkY2NwX3Y2X2N0bF9zb2NrX2luaXRpYWxpemVkID0gMTsKIAkJaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcyA9ICZkY2NwX2lwdjZfYWZfb3BzOworCX0KIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgZGNjcF92Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQogewotCWRjY3BfdjRfZGVzdHJveV9zb2NrKHNrKTsKKwlkY2NwX2Rlc3Ryb3lfc29jayhzayk7CiAJcmV0dXJuIGluZXQ2X2Rlc3Ryb3lfc29jayhzayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gZGNjcF92Nl9wcm90ID0gewotCS5uYW1lCQkJPSAiRENDUHY2IiwKLQkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5jbG9zZQkJCT0gZGNjcF9jbG9zZSwKLQkuY29ubmVjdAkJPSBkY2NwX3Y2X2Nvbm5lY3QsCi0JLmRpc2Nvbm5lY3QJCT0gZGNjcF9kaXNjb25uZWN0LAotCS5pb2N0bAkJCT0gZGNjcF9pb2N0bCwKLQkuaW5pdAkJCT0gZGNjcF92Nl9pbml0X3NvY2ssCi0JLnNldHNvY2tvcHQJCT0gZGNjcF9zZXRzb2Nrb3B0LAotCS5nZXRzb2Nrb3B0CQk9IGRjY3BfZ2V0c29ja29wdCwKLQkuc2VuZG1zZwkJPSBkY2NwX3NlbmRtc2csCi0JLnJlY3Ztc2cJCT0gZGNjcF9yZWN2bXNnLAotCS5iYWNrbG9nX3JjdgkJPSBkY2NwX3Y2X2RvX3JjdiwKLQkuaGFzaAkJCT0gZGNjcF92Nl9oYXNoLAotCS51bmhhc2gJCQk9IGRjY3BfdW5oYXNoLAotCS5hY2NlcHQJCQk9IGluZXRfY3NrX2FjY2VwdCwKLQkuZ2V0X3BvcnQJCT0gZGNjcF92Nl9nZXRfcG9ydCwKLQkuc2h1dGRvd24JCT0gZGNjcF9zaHV0ZG93biwKLQkuZGVzdHJveQkJPSBkY2NwX3Y2X2Rlc3Ryb3lfc29jaywKLQkub3JwaGFuX2NvdW50CQk9ICZkY2NwX29ycGhhbl9jb3VudCwKLQkubWF4X2hlYWRlcgkJPSBNQVhfRENDUF9IRUFERVIsCi0JLm9ial9zaXplCQk9IHNpemVvZihzdHJ1Y3QgZGNjcDZfc29jayksCi0JLnJza19wcm90CQk9ICZkY2NwNl9yZXF1ZXN0X3NvY2tfb3BzLAotCS50d3NrX3Byb3QJCT0gJmRjY3A2X3RpbWV3YWl0X3NvY2tfb3BzLAorCS5uYW1lCQkgICA9ICJEQ0NQdjYiLAorCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKKwkuY2xvc2UJCSAgID0gZGNjcF9jbG9zZSwKKwkuY29ubmVjdAkgICA9IGRjY3BfdjZfY29ubmVjdCwKKwkuZGlzY29ubmVjdAkgICA9IGRjY3BfZGlzY29ubmVjdCwKKwkuaW9jdGwJCSAgID0gZGNjcF9pb2N0bCwKKwkuaW5pdAkJICAgPSBkY2NwX3Y2X2luaXRfc29jaywKKwkuc2V0c29ja29wdAkgICA9IGRjY3Bfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IGRjY3BfZ2V0c29ja29wdCwKKwkuc2VuZG1zZwkgICA9IGRjY3Bfc2VuZG1zZywKKwkucmVjdm1zZwkgICA9IGRjY3BfcmVjdm1zZywKKwkuYmFja2xvZ19yY3YJICAgPSBkY2NwX3Y2X2RvX3JjdiwKKwkuaGFzaAkJICAgPSBkY2NwX3Y2X2hhc2gsCisJLnVuaGFzaAkJICAgPSBkY2NwX3VuaGFzaCwKKwkuYWNjZXB0CQkgICA9IGluZXRfY3NrX2FjY2VwdCwKKwkuZ2V0X3BvcnQJICAgPSBkY2NwX3Y2X2dldF9wb3J0LAorCS5zaHV0ZG93bgkgICA9IGRjY3Bfc2h1dGRvd24sCisJLmRlc3Ryb3kJICAgPSBkY2NwX3Y2X2Rlc3Ryb3lfc29jaywKKwkub3JwaGFuX2NvdW50CSAgID0gJmRjY3Bfb3JwaGFuX2NvdW50LAorCS5tYXhfaGVhZGVyCSAgID0gTUFYX0RDQ1BfSEVBREVSLAorCS5vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgZGNjcDZfc29jayksCisJLnJza19wcm90CSAgID0gJmRjY3A2X3JlcXVlc3Rfc29ja19vcHMsCisJLnR3c2tfcHJvdAkgICA9ICZkY2NwNl90aW1ld2FpdF9zb2NrX29wcywKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X2RjY3Bfc2V0c29ja29wdCwKKwkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfZGNjcF9nZXRzb2Nrb3B0LAorI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGluZXQ2X3Byb3RvY29sIGRjY3BfdjZfcHJvdG9jb2wgPSB7Ci0JLmhhbmRsZXIJPQlkY2NwX3Y2X3JjdiwKLQkuZXJyX2hhbmRsZXIJPQlkY2NwX3Y2X2VyciwKLQkuZmxhZ3MJCT0JSU5FVDZfUFJPVE9fTk9QT0xJQ1kgfCBJTkVUNl9QUk9UT19GSU5BTCwKKwkuaGFuZGxlcgk9IGRjY3BfdjZfcmN2LAorCS5lcnJfaGFuZGxlcgk9IGRjY3BfdjZfZXJyLAorCS5mbGFncwkJPSBJTkVUNl9QUk9UT19OT1BPTElDWSB8IElORVQ2X1BST1RPX0ZJTkFMLAogfTsKIAogc3RhdGljIHN0cnVjdCBwcm90b19vcHMgaW5ldDZfZGNjcF9vcHMgPSB7Ci0JLmZhbWlseQkJPSBQRl9JTkVUNiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLnJlbGVhc2UJPSBpbmV0Nl9yZWxlYXNlLAotCS5iaW5kCQk9IGluZXQ2X2JpbmQsCi0JLmNvbm5lY3QJPSBpbmV0X3N0cmVhbV9jb25uZWN0LAotCS5zb2NrZXRwYWlyCT0gc29ja19ub19zb2NrZXRwYWlyLAotCS5hY2NlcHQJCT0gaW5ldF9hY2NlcHQsCi0JLmdldG5hbWUJPSBpbmV0Nl9nZXRuYW1lLAotCS5wb2xsCQk9IGRjY3BfcG9sbCwKLQkuaW9jdGwJCT0gaW5ldDZfaW9jdGwsCi0JLmxpc3RlbgkJPSBpbmV0X2RjY3BfbGlzdGVuLAotCS5zaHV0ZG93bgk9IGluZXRfc2h1dGRvd24sCi0JLnNldHNvY2tvcHQJPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAotCS5nZXRzb2Nrb3B0CT0gc29ja19jb21tb25fZ2V0c29ja29wdCwKLQkuc2VuZG1zZwk9IGluZXRfc2VuZG1zZywKLQkucmVjdm1zZwk9IHNvY2tfY29tbW9uX3JlY3Ztc2csCi0JLm1tYXAJCT0gc29ja19ub19tbWFwLAotCS5zZW5kcGFnZQk9IHNvY2tfbm9fc2VuZHBhZ2UsCisJLmZhbWlseQkJICAgPSBQRl9JTkVUNiwKKwkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCisJLnJlbGVhc2UJICAgPSBpbmV0Nl9yZWxlYXNlLAorCS5iaW5kCQkgICA9IGluZXQ2X2JpbmQsCisJLmNvbm5lY3QJICAgPSBpbmV0X3N0cmVhbV9jb25uZWN0LAorCS5zb2NrZXRwYWlyCSAgID0gc29ja19ub19zb2NrZXRwYWlyLAorCS5hY2NlcHQJCSAgID0gaW5ldF9hY2NlcHQsCisJLmdldG5hbWUJICAgPSBpbmV0Nl9nZXRuYW1lLAorCS5wb2xsCQkgICA9IGRjY3BfcG9sbCwKKwkuaW9jdGwJCSAgID0gaW5ldDZfaW9jdGwsCisJLmxpc3RlbgkJICAgPSBpbmV0X2RjY3BfbGlzdGVuLAorCS5zaHV0ZG93bgkgICA9IGluZXRfc2h1dGRvd24sCisJLnNldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fZ2V0c29ja29wdCwKKwkuc2VuZG1zZwkgICA9IGluZXRfc2VuZG1zZywKKwkucmVjdm1zZwkgICA9IHNvY2tfY29tbW9uX3JlY3Ztc2csCisJLm1tYXAJCSAgID0gc29ja19ub19tbWFwLAorCS5zZW5kcGFnZQkgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGluZXRfcHJvdG9zdyBkY2NwX3Y2X3Byb3Rvc3cgPSB7CkBAIC0xMjM0LDggKzEyNDcsMTYgQEAKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9wcm90bzsKIAogCWluZXQ2X3JlZ2lzdGVyX3Byb3Rvc3coJmRjY3BfdjZfcHJvdG9zdyk7CisKKwllcnIgPSBpbmV0X2Nza19jdGxfc29ja19jcmVhdGUoJmRjY3BfdjZfY3RsX3NvY2tldCwgUEZfSU5FVDYsCisJCQkJICAgICAgIFNPQ0tfRENDUCwgSVBQUk9UT19EQ0NQKTsKKwlpZiAoZXJyICE9IDApCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcHJvdG9zdzsKIG91dDoKIAlyZXR1cm4gZXJyOworb3V0X3VucmVnaXN0ZXJfcHJvdG9zdzoKKwlpbmV0Nl9kZWxfcHJvdG9jb2woJmRjY3BfdjZfcHJvdG9jb2wsIElQUFJPVE9fRENDUCk7CisJaW5ldDZfdW5yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y2X3Byb3Rvc3cpOwogb3V0X3VucmVnaXN0ZXJfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmZGNjcF92Nl9wcm90KTsKIAlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL21pbmlzb2Nrcy5jIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKaW5kZXggMjkyNjFmYy4uYzAzNDllNSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvbWluaXNvY2tzLmMKKysrIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJhY2t2ZWMuaCIKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZGNjcC5oIgorI2luY2x1ZGUgImZlYXQuaCIKIAogc3RydWN0IGluZXRfdGltZXdhaXRfZGVhdGhfcm93IGRjY3BfZGVhdGhfcm93ID0gewogCS5zeXNjdGxfbWF4X3R3X2J1Y2tldHMgPSBOUl9GSUxFICogMiwKQEAgLTEwNiw2ICsxMDcsNyBAQAogCQljb25zdCBzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKmRyZXEgPSBkY2NwX3JzayhyZXEpOwogCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKm5ld2ljc2sgPSBpbmV0X2Nzayhzayk7CiAJCXN0cnVjdCBkY2NwX3NvY2sgKm5ld2RwID0gZGNjcF9zayhuZXdzayk7CisJCXN0cnVjdCBkY2NwX21pbmlzb2NrICpuZXdkbXNrID0gZGNjcF9tc2sobmV3c2spOwogCiAJCW5ld2RwLT5kY2Nwc19yb2xlCSAgID0gRENDUF9ST0xFX1NFUlZFUjsKIAkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyAgPSBOVUxMOwpAQCAtMTE0LDI3ICsxMTYsMjcgQEAKIAkJbmV3aWNzay0+aWNza19ydG8JICAgPSBEQ0NQX1RJTUVPVVRfSU5JVDsKIAkJZG9fZ2V0dGltZW9mZGF5KCZuZXdkcC0+ZGNjcHNfZXBvY2gpOwogCi0JCWlmIChuZXdkcC0+ZGNjcHNfb3B0aW9ucy5kY2Nwb19zZW5kX2Fja192ZWN0b3IpIHsKKwkJaWYgKGRjY3BfZmVhdF9jbG9uZShzaywgbmV3c2spKQorCQkJZ290byBvdXRfZnJlZTsKKworCQlpZiAobmV3ZG1zay0+ZGNjcG1zX3NlbmRfYWNrX3ZlY3RvcikgewogCQkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9Ci0JCQkJZGNjcF9hY2t2ZWNfYWxsb2MoRENDUF9NQVhfQUNLVkVDX0xFTiwKLQkJCQkJCSAgR0ZQX0FUT01JQyk7Ci0JCQkvKgotCQkJICogWFhYOiBXZSdyZSB1c2luZyB0aGUgc2FtZSBDQ0lEcyBzZXQgb24gdGhlIHBhcmVudCwKLQkJCSAqIGkuZS4gc2tfY2xvbmUgY29waWVkIHRoZSBtYXN0ZXIgc29jayBhbmQgbGVmdCB0aGUKLQkJCSAqIENDSUQgcG9pbnRlcnMgZm9yIHRoaXMgY2hpbGQsIHRoYXQgaXMgd2h5IHdlIGRvIHRoZQotCQkJICogX19jY2lkX2dldCBjYWxscy4KLQkJCSAqLworCQkJCQkJZGNjcF9hY2t2ZWNfYWxsb2MoR0ZQX0FUT01JQyk7CiAJCQlpZiAodW5saWtlbHkobmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9PSBOVUxMKSkKIAkJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAKLQkJaWYgKHVubGlrZWx5KGNjaWRfaGNfcnhfaW5pdChuZXdkcC0+ZGNjcHNfaGNfcnhfY2NpZCwKLQkJCQkJICAgICBuZXdzaykgIT0gMCB8fAotCQkJICAgICBjY2lkX2hjX3R4X2luaXQobmV3ZHAtPmRjY3BzX2hjX3R4X2NjaWQsCi0JCQkJICAgICAJICAgICBuZXdzaykgIT0gMCkpIHsKKwkJbmV3ZHAtPmRjY3BzX2hjX3J4X2NjaWQgPQorCQkJICAgIGNjaWRfaGNfcnhfbmV3KG5ld2Rtc2stPmRjY3Btc19yeF9jY2lkLAorCQkJCQkgICBuZXdzaywgR0ZQX0FUT01JQyk7CisJCW5ld2RwLT5kY2Nwc19oY190eF9jY2lkID0KKwkJCSAgICBjY2lkX2hjX3R4X25ldyhuZXdkbXNrLT5kY2NwbXNfdHhfY2NpZCwKKwkJCQkJICAgbmV3c2ssIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkobmV3ZHAtPmRjY3BzX2hjX3J4X2NjaWQgPT0gTlVMTCB8fAorCQkJICAgICBuZXdkcC0+ZGNjcHNfaGNfdHhfY2NpZCA9PSBOVUxMKSkgewogCQkJZGNjcF9hY2t2ZWNfZnJlZShuZXdkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKTsKLQkJCWNjaWRfaGNfcnhfZXhpdChuZXdkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgbmV3c2spOwotCQkJY2NpZF9oY190eF9leGl0KG5ld2RwLT5kY2Nwc19oY190eF9jY2lkLCBuZXdzayk7CisJCQljY2lkX2hjX3J4X2RlbGV0ZShuZXdkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgbmV3c2spOworCQkJY2NpZF9oY190eF9kZWxldGUobmV3ZHAtPmRjY3BzX2hjX3R4X2NjaWQsIG5ld3NrKTsKIG91dF9mcmVlOgogCQkJLyogSXQgaXMgc3RpbGwgcmF3IGNvcHkgb2YgcGFyZW50LCBzbyBpbnZhbGlkYXRlCiAJCQkgKiBkZXN0cnVjdG9yIGFuZCBtYWtlIHBsYWluIHNrX2ZyZWUoKSAqLwpAQCAtMTQzLDkgKzE0NSw2IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCi0JCV9fY2NpZF9nZXQobmV3ZHAtPmRjY3BzX2hjX3J4X2NjaWQpOwotCQlfX2NjaWRfZ2V0KG5ld2RwLT5kY2Nwc19oY190eF9jY2lkKTsKLQogCQkvKgogCQkgKiBTdGVwIDM6IFByb2Nlc3MgTElTVEVOIHN0YXRlCiAJCSAqCkBAIC0xNTUsNyArMTU0LDcgQEAKIAkJICovCiAKIAkJLyogU2VlIGRjY3BfdjRfY29ubl9yZXF1ZXN0ICovCi0JCW5ld2RwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlcXVlbmNlX3dpbmRvdyA9IHJlcS0+cmN2X3duZDsKKwkJbmV3ZG1zay0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyA9IHJlcS0+cmN2X3duZDsKIAogCQluZXdkcC0+ZGNjcHNfZ2FyID0gbmV3ZHAtPmRjY3BzX2lzciA9IGRyZXEtPmRyZXFfaXNyOwogCQlkY2NwX3VwZGF0ZV9nc3IobmV3c2ssIGRyZXEtPmRyZXFfaXNyKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCAwYTc2NDI2Li5lOWZlYjJhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC0yMSwxOSArMjEsMjMgQEAKICNpbmNsdWRlICJhY2t2ZWMuaCIKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZGNjcC5oIgorI2luY2x1ZGUgImZlYXQuaCIKIAotLyogc3RvcmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IGNvbm5lY3Rpb24uIG1heSBiZSBjaGFuZ2VkIHdpdGggc3lzY3RsICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRjY3Bfb3B0aW9ucyBkY2Nwb19kZWZhdWx0X3ZhbHVlcyA9IHsKLQkuZGNjcG9fc2VxdWVuY2Vfd2luZG93CSAgPSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVywKLQkuZGNjcG9fcnhfY2NpZAkJICA9IERDQ1BGX0lOSVRJQUxfQ0NJRCwKLQkuZGNjcG9fdHhfY2NpZAkJICA9IERDQ1BGX0lOSVRJQUxfQ0NJRCwKLQkuZGNjcG9fc2VuZF9hY2tfdmVjdG9yCSAgPSBEQ0NQRl9JTklUSUFMX1NFTkRfQUNLX1ZFQ1RPUiwKLQkuZGNjcG9fc2VuZF9uZHBfY291bnQJICA9IERDQ1BGX0lOSVRJQUxfU0VORF9ORFBfQ09VTlQsCi19OworaW50IGRjY3BfZmVhdF9kZWZhdWx0X3NlcXVlbmNlX3dpbmRvdyA9IERDQ1BGX0lOSVRJQUxfU0VRVUVOQ0VfV0lORE9XOworaW50IGRjY3BfZmVhdF9kZWZhdWx0X3J4X2NjaWQJICAgICAgPSBEQ0NQRl9JTklUSUFMX0NDSUQ7CitpbnQgZGNjcF9mZWF0X2RlZmF1bHRfdHhfY2NpZAkgICAgICA9IERDQ1BGX0lOSVRJQUxfQ0NJRDsKK2ludCBkY2NwX2ZlYXRfZGVmYXVsdF9hY2tfcmF0aW8JICAgICAgPSBEQ0NQRl9JTklUSUFMX0FDS19SQVRJTzsKK2ludCBkY2NwX2ZlYXRfZGVmYXVsdF9zZW5kX2Fja192ZWN0b3IgPSBEQ0NQRl9JTklUSUFMX1NFTkRfQUNLX1ZFQ1RPUjsKK2ludCBkY2NwX2ZlYXRfZGVmYXVsdF9zZW5kX25kcF9jb3VudCAgPSBEQ0NQRl9JTklUSUFMX1NFTkRfTkRQX0NPVU5UOwogCi12b2lkIGRjY3Bfb3B0aW9uc19pbml0KHN0cnVjdCBkY2NwX29wdGlvbnMgKmRjY3BvKQordm9pZCBkY2NwX21pbmlzb2NrX2luaXQoc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2spCiB7Ci0JbWVtY3B5KGRjY3BvLCAmZGNjcG9fZGVmYXVsdF92YWx1ZXMsIHNpemVvZigqZGNjcG8pKTsKKwlkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ID0gZGNjcF9mZWF0X2RlZmF1bHRfc2VxdWVuY2Vfd2luZG93OworCWRtc2stPmRjY3Btc19yeF9jY2lkCSAgICAgPSBkY2NwX2ZlYXRfZGVmYXVsdF9yeF9jY2lkOworCWRtc2stPmRjY3Btc190eF9jY2lkCSAgICAgPSBkY2NwX2ZlYXRfZGVmYXVsdF90eF9jY2lkOworCWRtc2stPmRjY3Btc19hY2tfcmF0aW8JICAgICA9IGRjY3BfZmVhdF9kZWZhdWx0X2Fja19yYXRpbzsKKwlkbXNrLT5kY2NwbXNfc2VuZF9hY2tfdmVjdG9yID0gZGNjcF9mZWF0X2RlZmF1bHRfc2VuZF9hY2tfdmVjdG9yOworCWRtc2stPmRjY3Btc19zZW5kX25kcF9jb3VudCAgPSBkY2NwX2ZlYXRfZGVmYXVsdF9zZW5kX25kcF9jb3VudDsKIH0KIAogc3RhdGljIHUzMiBkY2NwX2RlY29kZV92YWx1ZV92YXIoY29uc3QgdW5zaWduZWQgY2hhciAqYmYsIGNvbnN0IHU4IGxlbikKQEAgLTY5LDkgKzczLDEyIEBACiAJdW5zaWduZWQgY2hhciBvcHQsIGxlbjsKIAl1bnNpZ25lZCBjaGFyICp2YWx1ZTsKIAl1MzIgZWxhcHNlZF90aW1lOworCWludCByYzsKKwlpbnQgbWFuZGF0b3J5ID0gMDsKIAogCW1lbXNldChvcHRfcmVjdiwgMCwgc2l6ZW9mKCpvcHRfcmVjdikpOwogCisJb3B0ID0gbGVuID0gMDsKIAl3aGlsZSAob3B0X3B0ciAhPSBvcHRfZW5kKSB7CiAJCW9wdCAgID0gKm9wdF9wdHIrKzsKIAkJbGVuICAgPSAwOwpAQCAtMTAwLDYgKzEwNywxMiBAQAogCQlzd2l0Y2ggKG9wdCkgewogCQljYXNlIERDQ1BPX1BBRERJTkc6CiAJCQlicmVhazsKKwkJY2FzZSBEQ0NQT19NQU5EQVRPUlk6CisJCQlpZiAobWFuZGF0b3J5KQorCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOworCQkJaWYgKHBrdF90eXBlICE9IERDQ1BfUEtUX0RBVEEpCisJCQkJbWFuZGF0b3J5ID0gMTsKKwkJCWJyZWFrOwogCQljYXNlIERDQ1BPX05EUF9DT1VOVDoKIAkJCWlmIChsZW4gPiAzKQogCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOwpAQCAtMTA4LDEyICsxMjEsMzcgQEAKIAkJCWRjY3BfcHJfZGVidWcoIiVzTkRQIGNvdW50PSVkXG4iLCBkZWJ1Z19wcmVmaXgsCiAJCQkJICAgICAgb3B0X3JlY3YtPmRjY3Bvcl9uZHApOwogCQkJYnJlYWs7CisJCWNhc2UgRENDUE9fQ0hBTkdFX0w6CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBEQ0NQT19DSEFOR0VfUjoKKwkJCWlmIChsZW4gPCAyKQorCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOworCQkJcmMgPSBkY2NwX2ZlYXRfY2hhbmdlX3JlY3Yoc2ssIG9wdCwgKnZhbHVlLCB2YWx1ZSArIDEsCisJCQkJCQkgICBsZW4gLSAxKTsKKwkJCS8qCisJCQkgKiBXaGVuIHRoZXJlIGlzIGEgY2hhbmdlIGVycm9yLCBjaGFuZ2VfcmVjdiBpcworCQkJICogcmVzcG9uc2libGUgZm9yIGRlYWxpbmcgd2l0aCBpdC4gIGkuZS4gcmVwbHkgd2l0aCBhbgorCQkJICogZW1wdHkgY29uZmlybS4KKwkJCSAqIElmIHRoZSBjaGFuZ2Ugd2FzIG1hbmRhdG9yeSwgdGhlbiB3ZSBuZWVkIHRvIGRpZS4KKwkJCSAqLworCQkJaWYgKHJjICYmIG1hbmRhdG9yeSkKKwkJCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIERDQ1BPX0NPTkZJUk1fTDoKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIERDQ1BPX0NPTkZJUk1fUjoKKwkJCWlmIChsZW4gPCAyKQorCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOworCQkJaWYgKGRjY3BfZmVhdF9jb25maXJtX3JlY3Yoc2ssIG9wdCwgKnZhbHVlLAorCQkJCQkJICAgdmFsdWUgKyAxLCBsZW4gLSAxKSkKKwkJCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKKwkJCWJyZWFrOwogCQljYXNlIERDQ1BPX0FDS19WRUNUT1JfMDoKIAkJY2FzZSBEQ0NQT19BQ0tfVkVDVE9SXzE6CiAJCQlpZiAocGt0X3R5cGUgPT0gRENDUF9QS1RfREFUQSkKLQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKIAotCQkJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgorCQkJaWYgKGRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlbmRfYWNrX3ZlY3RvciAmJgogCQkJICAgIGRjY3BfYWNrdmVjX3BhcnNlKHNrLCBza2IsIG9wdCwgdmFsdWUsIGxlbikpCiAJCQkJZ290byBvdXRfaW52YWxpZF9vcHRpb247CiAJCQlicmVhazsKQEAgLTEyMSw3ICsxNTksNyBAQAogCQkJaWYgKGxlbiAhPSA0KQogCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOwogCi0JCQlvcHRfcmVjdi0+ZGNjcG9yX3RpbWVzdGFtcCA9IG50b2hsKCoodTMyICopdmFsdWUpOworCQkJb3B0X3JlY3YtPmRjY3Bvcl90aW1lc3RhbXAgPSBudG9obCgqKF9fYmUzMiAqKXZhbHVlKTsKIAogCQkJZHAtPmRjY3BzX3RpbWVzdGFtcF9lY2hvID0gb3B0X3JlY3YtPmRjY3Bvcl90aW1lc3RhbXA7CiAJCQlkY2NwX3RpbWVzdGFtcChzaywgJmRwLT5kY2Nwc190aW1lc3RhbXBfdGltZSk7CkBAIC0xMzUsNyArMTczLDcgQEAKIAkJCWlmIChsZW4gIT0gNCAmJiBsZW4gIT0gNiAmJiBsZW4gIT0gOCkKIAkJCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKIAotCQkJb3B0X3JlY3YtPmRjY3Bvcl90aW1lc3RhbXBfZWNobyA9IG50b2hsKCoodTMyICopdmFsdWUpOworCQkJb3B0X3JlY3YtPmRjY3Bvcl90aW1lc3RhbXBfZWNobyA9IG50b2hsKCooX19iZTMyICopdmFsdWUpOwogCiAJCQlkY2NwX3ByX2RlYnVnKCIlc1RJTUVTVEFNUF9FQ0hPPSV1LCBsZW49JWQsIGFja25vPSVsbHUsICIsCiAJCQkJICAgICAgZGVidWdfcHJlZml4LApAQCAtMTQ5LDkgKzE4Nyw5IEBACiAJCQkJYnJlYWs7CiAKIAkJCWlmIChsZW4gPT0gNikKLQkJCQllbGFwc2VkX3RpbWUgPSBudG9ocygqKHUxNiAqKSh2YWx1ZSArIDQpKTsKKwkJCQllbGFwc2VkX3RpbWUgPSBudG9ocygqKF9fYmUxNiAqKSh2YWx1ZSArIDQpKTsKIAkJCWVsc2UKLQkJCQllbGFwc2VkX3RpbWUgPSBudG9obCgqKHUzMiAqKSh2YWx1ZSArIDQpKTsKKwkJCQllbGFwc2VkX3RpbWUgPSBudG9obCgqKF9fYmUzMiAqKSh2YWx1ZSArIDQpKTsKIAogCQkJLyogR2l2ZSBwcmVjZWRlbmNlIHRvIHRoZSBiaWdnZXN0IEVMQVBTRURfVElNRSAqLwogCQkJaWYgKGVsYXBzZWRfdGltZSA+IG9wdF9yZWN2LT5kY2Nwb3JfZWxhcHNlZF90aW1lKQpAQCAtMTY1LDkgKzIwMyw5IEBACiAJCQkJY29udGludWU7CiAKIAkJCWlmIChsZW4gPT0gMikKLQkJCQllbGFwc2VkX3RpbWUgPSBudG9ocygqKHUxNiAqKXZhbHVlKTsKKwkJCQllbGFwc2VkX3RpbWUgPSBudG9ocygqKF9fYmUxNiAqKXZhbHVlKTsKIAkJCWVsc2UKLQkJCQllbGFwc2VkX3RpbWUgPSBudG9obCgqKHUzMiAqKXZhbHVlKTsKKwkJCQllbGFwc2VkX3RpbWUgPSBudG9obCgqKF9fYmUzMiAqKXZhbHVlKTsKIAogCQkJaWYgKGVsYXBzZWRfdGltZSA+IG9wdF9yZWN2LT5kY2Nwb3JfZWxhcHNlZF90aW1lKQogCQkJCW9wdF9yZWN2LT5kY2Nwb3JfZWxhcHNlZF90aW1lID0gZWxhcHNlZF90aW1lOwpAQCAtMjA4LDggKzI0NiwxNSBAQAogCQkJCXNrLCBvcHQsIGxlbik7CiAJCQlicmVhazsKIAkgICAgICAgIH0KKworCQlpZiAob3B0ICE9IERDQ1BPX01BTkRBVE9SWSkKKwkJCW1hbmRhdG9yeSA9IDA7CiAJfQogCisJLyogbWFuZGF0b3J5IHdhcyB0aGUgbGFzdCBieXRlIGluIG9wdGlvbiBsaXN0IC0+IHJlc2V0IGNvbm5lY3Rpb24gKi8KKwlpZiAobWFuZGF0b3J5KQorCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKKwogCXJldHVybiAwOwogCiBvdXRfaW52YWxpZF9vcHRpb246CkBAIC0yMTksNiArMjY0LDggQEAKIAlyZXR1cm4gLTE7CiB9CiAKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfcGFyc2Vfb3B0aW9ucyk7CisKIHN0YXRpYyB2b2lkIGRjY3BfZW5jb2RlX3ZhbHVlX3Zhcihjb25zdCB1MzIgdmFsdWUsIHVuc2lnbmVkIGNoYXIgKnRvLAogCQkJCSAgY29uc3QgdW5zaWduZWQgaW50IGxlbikKIHsKQEAgLTIzNywxNyArMjg0LDE0IEBACiAJcmV0dXJuIGxpa2VseShuZHAgPD0gMHhGRikgPyAxIDogbmRwIDw9IDB4RkZGRiA/IDIgOiAzOwogfQogCi12b2lkIGRjY3BfaW5zZXJ0X29wdGlvbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCitpbnQgZGNjcF9pbnNlcnRfb3B0aW9uKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgb3B0aW9uLAogCQkJY29uc3Qgdm9pZCAqdmFsdWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgbGVuKQogewogCXVuc2lnbmVkIGNoYXIgKnRvOwogCi0JaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKyBsZW4gKyAyID4gRENDUF9NQVhfT1BUX0xFTikgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIkRDQ1A6IHBhY2tldCB0b28gc21hbGwgdG8gaW5zZXJ0ICIKLQkJCSAgICAgICAiJWQgb3B0aW9uIVxuIiwgb3B0aW9uKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiArIGxlbiArIDIgPiBEQ0NQX01BWF9PUFRfTEVOKQorCQlyZXR1cm4gLTE7CiAKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICs9IGxlbiArIDI7CiAKQEAgLTI1NiwxMSArMzAwLDEyIEBACiAJKnRvKysgPSBsZW4gKyAyOwogCiAJbWVtY3B5KHRvLCB2YWx1ZSwgbGVuKTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9pbnNlcnRfb3B0aW9uKTsKIAotc3RhdGljIHZvaWQgZGNjcF9pbnNlcnRfb3B0aW9uX25kcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGRjY3BfaW5zZXJ0X29wdGlvbl9uZHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJaW50IG5kcCA9IGRwLT5kY2Nwc19uZHBfY291bnQ7CkBAIC0yNzYsNyArMzIxLDcgQEAKIAkJY29uc3QgaW50IGxlbiA9IG5kcF9sZW4gKyAyOwogCiAJCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICsgbGVuID4gRENDUF9NQVhfT1BUX0xFTikKLQkJCXJldHVybjsKKwkJCXJldHVybiAtMTsKIAogCQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICs9IGxlbjsKIApAQCAtMjg1LDYgKzMzMCw4IEBACiAJCSpwdHIrKyA9IGxlbjsKIAkJZGNjcF9lbmNvZGVfdmFsdWVfdmFyKG5kcCwgcHRyLCBuZHBfbGVuKTsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9lbGFwc2VkX3RpbWVfbGVuKGNvbnN0IHUzMiBlbGFwc2VkX3RpbWUpCkBAIC0yOTIsMjcgKzMzOSwxOCBAQAogCXJldHVybiBlbGFwc2VkX3RpbWUgPT0gMCA/IDAgOiBlbGFwc2VkX3RpbWUgPD0gMHhGRkZGID8gMiA6IDQ7CiB9CiAKLXZvaWQgZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZShzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICAgdTMyIGVsYXBzZWRfdGltZSkKK2ludCBkY2NwX2luc2VydF9vcHRpb25fZWxhcHNlZF90aW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgdTMyIGVsYXBzZWRfdGltZSkKIHsKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JY29uc3QgY2hhciAqZGVidWdfcHJlZml4ID0gZHAtPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX0NMSUVOVCA/Ci0JCQkJCSJDTElFTlQgVFggb3B0OiAiIDogInNlcnZlciBUWCBvcHQ6ICI7Ci0jZW5kaWYKIAljb25zdCBpbnQgZWxhcHNlZF90aW1lX2xlbiA9IGRjY3BfZWxhcHNlZF90aW1lX2xlbihlbGFwc2VkX3RpbWUpOwogCWNvbnN0IGludCBsZW4gPSAyICsgZWxhcHNlZF90aW1lX2xlbjsKIAl1bnNpZ25lZCBjaGFyICp0bzsKIAogCWlmIChlbGFwc2VkX3RpbWVfbGVuID09IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKLQlpZiAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiArIGxlbiA+IERDQ1BfTUFYX09QVF9MRU4pIHsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9JTkZPICJEQ0NQOiBwYWNrZXQgdG9vIHNtYWxsIHRvICIKLQkJCQkJICJpbnNlcnQgZWxhcHNlZCB0aW1lIVxuIik7Ci0JCXJldHVybjsKLQl9CisJaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKyBsZW4gPiBEQ0NQX01BWF9PUFRfTEVOKQorCQlyZXR1cm4gLTE7CiAKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICs9IGxlbjsKIApAQCAtMzIxLDE3ICszNTksMTQgQEAKIAkqdG8rKyA9IGxlbjsKIAogCWlmIChlbGFwc2VkX3RpbWVfbGVuID09IDIpIHsKLQkJY29uc3QgdTE2IHZhcjE2ID0gaHRvbnMoKHUxNillbGFwc2VkX3RpbWUpOworCQljb25zdCBfX2JlMTYgdmFyMTYgPSBodG9ucygodTE2KWVsYXBzZWRfdGltZSk7CiAJCW1lbWNweSh0bywgJnZhcjE2LCAyKTsKIAl9IGVsc2UgewotCQljb25zdCB1MzIgdmFyMzIgPSBodG9ubChlbGFwc2VkX3RpbWUpOworCQljb25zdCBfX2JlMzIgdmFyMzIgPSBodG9ubChlbGFwc2VkX3RpbWUpOwogCQltZW1jcHkodG8sICZ2YXIzMiwgNCk7CiAJfQogCi0JZGNjcF9wcl9kZWJ1ZygiJXNFTEFQU0VEX1RJTUU9JXUsIGxlbj0lZCwgc2Vxbm89JWxsdVxuIiwKLQkJICAgICAgZGVidWdfcHJlZml4LCBlbGFwc2VkX3RpbWUsCi0JCSAgICAgIGxlbiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxKTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9pbnNlcnRfb3B0aW9uX2VsYXBzZWRfdGltZSk7CkBAIC0zNTIsMzIgKzM4NywyNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3RpbWVzdGFtcCk7CiAKLXZvaWQgZGNjcF9pbnNlcnRfb3B0aW9uX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgZGNjcF9pbnNlcnRfb3B0aW9uX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHRpbWV2YWwgdHY7Ci0JdTMyIG5vdzsKLQkKKwlfX2JlMzIgbm93OworCiAJZGNjcF90aW1lc3RhbXAoc2ssICZ0dik7Ci0Jbm93ID0gdGltZXZhbF91c2VjcygmdHYpIC8gMTA7CisJbm93ID0gaHRvbmwodGltZXZhbF91c2VjcygmdHYpIC8gMTApOwogCS8qIHllcyB0aGlzIHdpbGwgb3ZlcmZsb3cgYnV0IHRoYXQgaXMgdGhlIHBvaW50IGFzIHdlIHdhbnQgYQogCSAqIDEwIHVzZWMgMzIgYml0IHRpbWVyIHdoaWNoIG1lYW4gaXQgd3JhcHMgZXZlcnkgMTEuOSBob3VycyAqLwogCi0Jbm93ID0gaHRvbmwobm93KTsKLQlkY2NwX2luc2VydF9vcHRpb24oc2ssIHNrYiwgRENDUE9fVElNRVNUQU1QLCAmbm93LCBzaXplb2Yobm93KSk7CisJcmV0dXJuIGRjY3BfaW5zZXJ0X29wdGlvbihzaywgc2tiLCBEQ0NQT19USU1FU1RBTVAsICZub3csIHNpemVvZihub3cpKTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9pbnNlcnRfb3B0aW9uX3RpbWVzdGFtcCk7CiAKLXN0YXRpYyB2b2lkIGRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXBfZWNobyhzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXBfZWNobyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi0JY29uc3QgY2hhciAqZGVidWdfcHJlZml4ID0gZHAtPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX0NMSUVOVCA/Ci0JCQkJCSJDTElFTlQgVFggb3B0OiAiIDogInNlcnZlciBUWCBvcHQ6ICI7Ci0jZW5kaWYKIAlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0JdTMyIHRzdGFtcF9lY2hvOworCV9fYmUzMiB0c3RhbXBfZWNobzsKIAl1MzIgZWxhcHNlZF90aW1lOwogCWludCBsZW4sIGVsYXBzZWRfdGltZV9sZW47CiAJdW5zaWduZWQgY2hhciAqdG87CkBAIC0zODcsMTEgKzQxNyw4IEBACiAJZWxhcHNlZF90aW1lX2xlbiA9IGRjY3BfZWxhcHNlZF90aW1lX2xlbihlbGFwc2VkX3RpbWUpOwogCWxlbiA9IDYgKyBlbGFwc2VkX3RpbWVfbGVuOwogCi0JaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKyBsZW4gPiBEQ0NQX01BWF9PUFRfTEVOKSB7Ci0JCUxJTUlUX05FVERFQlVHKEtFUk5fSU5GTyAiRENDUDogcGFja2V0IHRvbyBzbWFsbCB0byBpbnNlcnQgIgotCQkJCQkgInRpbWVzdGFtcCBlY2hvIVxuIik7Ci0JCXJldHVybjsKLQl9CisJaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX29wdF9sZW4gKyBsZW4gPiBEQ0NQX01BWF9PUFRfTEVOKQorCQlyZXR1cm4gLTE7CiAKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICs9IGxlbjsKIApAQCAtNDAyLDUxICs0MjksMTQ5IEBACiAJdHN0YW1wX2VjaG8gPSBodG9ubChkcC0+ZGNjcHNfdGltZXN0YW1wX2VjaG8pOwogCW1lbWNweSh0bywgJnRzdGFtcF9lY2hvLCA0KTsKIAl0byArPSA0OwotCQorCiAJaWYgKGVsYXBzZWRfdGltZV9sZW4gPT0gMikgewotCQljb25zdCB1MTYgdmFyMTYgPSBodG9ucygodTE2KWVsYXBzZWRfdGltZSk7CisJCWNvbnN0IF9fYmUxNiB2YXIxNiA9IGh0b25zKCh1MTYpZWxhcHNlZF90aW1lKTsKIAkJbWVtY3B5KHRvLCAmdmFyMTYsIDIpOwogCX0gZWxzZSBpZiAoZWxhcHNlZF90aW1lX2xlbiA9PSA0KSB7Ci0JCWNvbnN0IHUzMiB2YXIzMiA9IGh0b25sKGVsYXBzZWRfdGltZSk7CisJCWNvbnN0IF9fYmUzMiB2YXIzMiA9IGh0b25sKGVsYXBzZWRfdGltZSk7CiAJCW1lbWNweSh0bywgJnZhcjMyLCA0KTsKIAl9CiAKLQlkY2NwX3ByX2RlYnVnKCIlc1RJTUVTVEFNUF9FQ0hPPSV1LCBsZW49JWQsIHNlcW5vPSVsbHVcbiIsCi0JCSAgICAgIGRlYnVnX3ByZWZpeCwgZHAtPmRjY3BzX3RpbWVzdGFtcF9lY2hvLAotCQkgICAgICBsZW4sCi0JCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSk7Ci0KIAlkcC0+ZGNjcHNfdGltZXN0YW1wX2VjaG8gPSAwOwogCWRwLT5kY2Nwc190aW1lc3RhbXBfdGltZS50dl9zZWMgPSAwOwogCWRwLT5kY2Nwc190aW1lc3RhbXBfdGltZS50dl91c2VjID0gMDsKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCBkY2NwX2luc2VydF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgZGNjcF9pbnNlcnRfZmVhdF9vcHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSwgdTggZmVhdCwKKwkJCSAgICAgICAgdTggKnZhbCwgdTggbGVuKQoreworCXU4ICp0bzsKKworCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICsgbGVuICsgMyA+IERDQ1BfTUFYX09QVF9MRU4pIHsKKwkJTElNSVRfTkVUREVCVUcoS0VSTl9JTkZPICJEQ0NQOiBwYWNrZXQgdG9vIHNtYWxsIgorCQkJICAgICAgICIgdG8gaW5zZXJ0IGZlYXR1cmUgJWQgb3B0aW9uIVxuIiwgZmVhdCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICs9IGxlbiArIDM7CisKKwl0byAgICA9IHNrYl9wdXNoKHNrYiwgbGVuICsgMyk7CisJKnRvKysgPSB0eXBlOworCSp0bysrID0gbGVuICsgMzsKKwkqdG8rKyA9IGZlYXQ7CisKKwlpZiAobGVuKQorCQltZW1jcHkodG8sIHZhbCwgbGVuKTsKKwlkY2NwX3ByX2RlYnVnKCJvcHRpb24gJWQgZmVhdCAlZCBsZW4gJWRcbiIsIHR5cGUsIGZlYXQsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkY2NwX2luc2VydF9vcHRpb25zX2ZlYXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CisJc3RydWN0IGRjY3Bfb3B0X3BlbmQgKm9wdCwgKm5leHQ7CisJaW50IGNoYW5nZSA9IDA7CisKKwkvKiBjb25maXJtIGFueSBvcHRpb25zIFtOTiBvcHRzXSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvcHQsIG5leHQsICZkbXNrLT5kY2NwbXNfY29uZiwgZGNjcG9wX25vZGUpIHsKKwkJZGNjcF9pbnNlcnRfZmVhdF9vcHQoc2tiLCBvcHQtPmRjY3BvcF90eXBlLAorCQkJCSAgICAgb3B0LT5kY2Nwb3BfZmVhdCwgb3B0LT5kY2Nwb3BfdmFsLAorCQkJCSAgICAgb3B0LT5kY2Nwb3BfbGVuKTsKKwkJLyogZmVhciBlbXB0eSBjb25maXJtcyAqLworCQlpZiAob3B0LT5kY2Nwb3BfdmFsKQorCQkJa2ZyZWUob3B0LT5kY2Nwb3BfdmFsKTsKKwkJa2ZyZWUob3B0KTsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJmRtc2stPmRjY3Btc19jb25mKTsKKworCS8qIHNlZSB3aGljaCBmZWF0dXJlcyB3ZSBuZWVkIHRvIHNlbmQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wdCwgJmRtc2stPmRjY3Btc19wZW5kaW5nLCBkY2Nwb3Bfbm9kZSkgeworCQkvKiBzZWUgaWYgd2UgbmVlZCB0byBzZW5kIGFueSBjb25maXJtICovCisJCWlmIChvcHQtPmRjY3BvcF9zYykgeworCQkJZGNjcF9pbnNlcnRfZmVhdF9vcHQoc2tiLCBvcHQtPmRjY3BvcF90eXBlICsgMSwKKwkJCQkJICAgICBvcHQtPmRjY3BvcF9mZWF0LAorCQkJCQkgICAgIG9wdC0+ZGNjcG9wX3NjLT5kY2Nwb2NfdmFsLAorCQkJCQkgICAgIG9wdC0+ZGNjcG9wX3NjLT5kY2Nwb2NfbGVuKTsKKworCQkJQlVHX09OKCFvcHQtPmRjY3BvcF9zYy0+ZGNjcG9jX3ZhbCk7CisJCQlrZnJlZShvcHQtPmRjY3BvcF9zYy0+ZGNjcG9jX3ZhbCk7CisJCQlrZnJlZShvcHQtPmRjY3BvcF9zYyk7CisJCQlvcHQtPmRjY3BvcF9zYyA9IE5VTEw7CisJCX0KKworCQkvKiBhbnkgb3B0aW9uIG5vdCBjb25maXJtZWQsIHJlLXNlbmQgaXQgKi8KKwkJaWYgKCFvcHQtPmRjY3BvcF9jb25mKSB7CisJCQlkY2NwX2luc2VydF9mZWF0X29wdChza2IsIG9wdC0+ZGNjcG9wX3R5cGUsCisJCQkJCSAgICAgb3B0LT5kY2Nwb3BfZmVhdCwgb3B0LT5kY2Nwb3BfdmFsLAorCQkJCQkgICAgIG9wdC0+ZGNjcG9wX2xlbik7CisJCQljaGFuZ2UrKzsKKwkJfQorCX0KKworCS8qIFJldHJhbnNtaXQgdGltZXIuCisJICogSWYgdGhpcyBpcyB0aGUgbWFzdGVyIGxpc3RlbmluZyBzb2NrLCB3ZSBkb24ndCBzZXQgYSB0aW1lciBvbiBpdC4gIEl0CisJICogc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSBpZiB0aGUgZHVkZSBkb2Vzbid0IHJlY2VpdmUgb3VyIFJFU1BPTlNFCisJICogW3doaWNoIHdpbGwgY29udGFpbiB0aGUgQ0hBTkdFXSBoZSB3aWxsIHNlbmQgYW5vdGhlciBSRVFVRVNUIHdoaWNoCisJICogd2lsbCAicmV0cm5hc21pdCIgdGhlIGNoYW5nZS4KKwkgKi8KKwlpZiAoY2hhbmdlICYmIGRwLT5kY2Nwc19yb2xlICE9IERDQ1BfUk9MRV9MSVNURU4pIHsKKwkJZGNjcF9wcl9kZWJ1ZygicmVzZXQgZmVhdCBuZWdvdGlhdGlvbiB0aW1lciAlcFxuIiwgc2spOworCisJCS8qIFhYWCBkb24ndCByZXNldCB0aGUgdGltZXIgb24gcmUtdHJhbnNtaXNzaW9ucy4gIEkuZS4gcmVzZXQgaXQKKwkJICogb25seSB3aGVuIHNlbmRpbmcgbmV3IHN0dWZmIGkgZ3Vlc3MuICBDdXJyZW50bHkgdGhlIHRpbWVyCisJCSAqIG5ldmVyIGJhY2tzIG9mZiBiZWNhdXNlIG9uIHJlLXRyYW5zbWlzc2lvbiBpdCBqdXN0IHJlc2V0cyBpdCEKKwkJICovCisJCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLAorCQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19ydG8sIERDQ1BfUlRPX01BWCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkY2NwX2luc2VydF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCXN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOwogCiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiA9IDA7CiAKLQlpZiAoZHAtPmRjY3BzX29wdGlvbnMuZGNjcG9fc2VuZF9uZHBfY291bnQpCi0JCWRjY3BfaW5zZXJ0X29wdGlvbl9uZHAoc2ssIHNrYik7CisJaWYgKGRtc2stPmRjY3Btc19zZW5kX25kcF9jb3VudCAmJgorCSAgICBkY2NwX2luc2VydF9vcHRpb25fbmRwKHNrLCBza2IpKQorCQlyZXR1cm4gLTE7CiAKIAlpZiAoIWRjY3BfcGFja2V0X3dpdGhvdXRfYWNrKHNrYikpIHsKLQkJaWYgKGRwLT5kY2Nwc19vcHRpb25zLmRjY3BvX3NlbmRfYWNrX3ZlY3RvciAmJgotCQkgICAgZGNjcF9hY2t2ZWNfcGVuZGluZyhkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKSkKLQkJCWRjY3BfaW5zZXJ0X29wdGlvbl9hY2t2ZWMoc2ssIHNrYik7Ci0JCWlmIChkcC0+ZGNjcHNfdGltZXN0YW1wX2VjaG8gIT0gMCkKLQkJCWRjY3BfaW5zZXJ0X29wdGlvbl90aW1lc3RhbXBfZWNobyhzaywgc2tiKTsKKwkJaWYgKGRtc2stPmRjY3Btc19zZW5kX2Fja192ZWN0b3IgJiYKKwkJICAgIGRjY3BfYWNrdmVjX3BlbmRpbmcoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYykgJiYKKwkJICAgIGRjY3BfaW5zZXJ0X29wdGlvbl9hY2t2ZWMoc2ssIHNrYikpCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKGRwLT5kY2Nwc190aW1lc3RhbXBfZWNobyAhPSAwICYmCisJCSAgICBkY2NwX2luc2VydF9vcHRpb25fdGltZXN0YW1wX2VjaG8oc2ssIHNrYikpCisJCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKGRwLT5kY2Nwc19oY19yeF9pbnNlcnRfb3B0aW9ucykgewotCQljY2lkX2hjX3J4X2luc2VydF9vcHRpb25zKGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzaywgc2tiKTsKKwkJaWYgKGNjaWRfaGNfcnhfaW5zZXJ0X29wdGlvbnMoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrLCBza2IpKQorCQkJcmV0dXJuIC0xOwogCQlkcC0+ZGNjcHNfaGNfcnhfaW5zZXJ0X29wdGlvbnMgPSAwOwogCX0KIAlpZiAoZHAtPmRjY3BzX2hjX3R4X2luc2VydF9vcHRpb25zKSB7Ci0JCWNjaWRfaGNfdHhfaW5zZXJ0X29wdGlvbnMoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBza2IpOworCQlpZiAoY2NpZF9oY190eF9pbnNlcnRfb3B0aW9ucyhkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIHNrYikpCisJCQlyZXR1cm4gLTE7CiAJCWRwLT5kY2Nwc19oY190eF9pbnNlcnRfb3B0aW9ucyA9IDA7CiAJfQogCisJLyogRmVhdHVyZSBuZWdvdGlhdGlvbiAqLworCS8qIERhdGEgcGFja2V0cyBjYW4ndCBkbyBmZWF0IG5lZ290aWF0aW9uICovCisJaWYgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGUgIT0gRENDUF9QS1RfREFUQSAmJgorCSAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlICE9IERDQ1BfUEtUX0RBVEFBQ0sgJiYKKwkgICAgZGNjcF9pbnNlcnRfb3B0aW9uc19mZWF0KHNrLCBza2IpKQorCQlyZXR1cm4gLTE7CisKIAkvKiBYWFg6IGluc2VydCBvdGhlciBvcHRpb25zIHdoZW4gYXBwcm9wcmlhdGUgKi8KIAogCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICE9IDApIHsKQEAgLTQ1OSw0ICs1ODQsNiBAQAogCQkJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiArPSBwYWRkaW5nOwogCQl9CiAJfQorCisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vdXRwdXQuYyBiL25ldC9kY2NwL291dHB1dC5jCmluZGV4IGVmZDdmZmIuLjc0MDllNGEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL291dHB1dC5jCisrKyBiL25ldC9kY2NwL291dHB1dC5jCkBAIC0yNyw3ICsyNyw3IEBACiAJaW5ldF9jc2tfY2xlYXJfeG1pdF90aW1lcihzaywgSUNTS19USU1FX0RBQ0spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGNjcF9za2JfZW50YWlsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGRjY3Bfc2tiX2VudGFpbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc2tiX3NldF9vd25lcl93KHNrYiwgc2spOwogCVdBUk5fT04oc2stPnNrX3NlbmRfaGVhZCk7CkBAIC00OSw3ICs0OSw3IEBACiAJCXN0cnVjdCBkY2NwX3NrYl9jYiAqZGNiID0gRENDUF9TS0JfQ0Ioc2tiKTsKIAkJc3RydWN0IGRjY3BfaGRyICpkaDsKIAkJLyogWFhYIEZvciBub3cgd2UncmUgdXNpbmcgb25seSA0OCBiaXRzIHNlcXVlbmNlIG51bWJlcnMgKi8KLQkJY29uc3QgaW50IGRjY3BfaGVhZGVyX3NpemUgPSBzaXplb2YoKmRoKSArCisJCWNvbnN0IHUzMiBkY2NwX2hlYWRlcl9zaXplID0gc2l6ZW9mKCpkaCkgKwogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSArCiAJCQkJCSAgZGNjcF9wYWNrZXRfaGRyX2xlbihkY2ItPmRjY3BkX3R5cGUpOwogCQlpbnQgZXJyLCBzZXRfYWNrID0gMTsKQEAgLTY0LDYgKzY0LDEwIEBACiAJCWNhc2UgRENDUF9QS1RfREFUQUFDSzoKIAkJCWJyZWFrOwogCisJCWNhc2UgRENDUF9QS1RfUkVRVUVTVDoKKwkJCXNldF9hY2sgPSAwOworCQkJLyogZmFsbCB0aHJvdWdoICovCisKIAkJY2FzZSBEQ0NQX1BLVF9TWU5DOgogCQljYXNlIERDQ1BfUEtUX1NZTkNBQ0s6CiAJCQlhY2tubyA9IGRjYi0+ZGNjcGRfc2VxOwpAQCAtNzksNyArODMsMTEgQEAKIAkJfQogCiAJCWRjYi0+ZGNjcGRfc2VxID0gZHAtPmRjY3BzX2dzczsKLQkJZGNjcF9pbnNlcnRfb3B0aW9ucyhzaywgc2tiKTsKKworCQlpZiAoZGNjcF9pbnNlcnRfb3B0aW9ucyhzaywgc2tiKSkgeworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlyZXR1cm4gLUVQUk9UTzsKKwkJfQogCQkKIAkJc2tiLT5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7CiAJCWRoID0gZGNjcF9oZHIoc2tiKTsKQEAgLTI3NSwxNyArMjgzLDE2IEBACiB7CiAJc3RydWN0IGRjY3BfaGRyICpkaDsKIAlzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKmRyZXE7Ci0JY29uc3QgaW50IGRjY3BfaGVhZGVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSArCisJY29uc3QgdTMyIGRjY3BfaGVhZGVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSArCiAJCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCkgKwogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcl9yZXNwb25zZSk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNvY2tfd21hbGxvYyhzaywgTUFYX0hFQURFUiArIERDQ1BfTUFYX09QVF9MRU4gKwotCQkJCQkgICAgICAgZGNjcF9oZWFkZXJfc2l6ZSwgMSwKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc29ja193bWFsbG9jKHNrLCBzay0+c2tfcHJvdC0+bWF4X2hlYWRlciwgMSwKIAkJCQkJICAgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIFJlc2VydmUgc3BhY2UgZm9yIGhlYWRlcnMuICovCi0Jc2tiX3Jlc2VydmUoc2tiLCBNQVhfSEVBREVSICsgRENDUF9NQVhfT1BUX0xFTiArIGRjY3BfaGVhZGVyX3NpemUpOworCXNrYl9yZXNlcnZlKHNrYiwgc2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwogCiAJc2tiLT5kc3QgPSBkc3RfY2xvbmUoZHN0KTsKIAlza2ItPmNzdW0gPSAwOwpAQCAtMjkzLDcgKzMwMCwxMSBAQAogCWRyZXEgPSBkY2NwX3JzayhyZXEpOwogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGUgPSBEQ0NQX1BLVF9SRVNQT05TRTsKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEgID0gZHJlcS0+ZHJlcV9pc3M7Ci0JZGNjcF9pbnNlcnRfb3B0aW9ucyhzaywgc2tiKTsKKworCWlmIChkY2NwX2luc2VydF9vcHRpb25zKHNrLCBza2IpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBkY2NwX2hlYWRlcl9zaXplKTsKIApAQCAtMzEwLDMyICszMjEsMjggQEAKIAlkY2NwX2hkcl9zZXRfYWNrKGRjY3BfaGRyX2Fja19iaXRzKHNrYiksIGRyZXEtPmRyZXFfaXNyKTsKIAlkY2NwX2hkcl9yZXNwb25zZShza2IpLT5kY2NwaF9yZXNwX3NlcnZpY2UgPSBkcmVxLT5kcmVxX3NlcnZpY2U7CiAKLQlkaC0+ZGNjcGhfY2hlY2tzdW0gPSBkY2NwX3Y0X2NoZWNrc3VtKHNrYiwgaW5ldF9yc2socmVxKS0+bG9jX2FkZHIsCi0JCQkJCSAgICAgIGluZXRfcnNrKHJlcSktPnJtdF9hZGRyKTsKLQogCURDQ1BfSU5DX1NUQVRTKERDQ1BfTUlCX09VVFNFR1MpOwogCXJldHVybiBza2I7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfbWFrZV9yZXNwb25zZSk7CiAKLXN0cnVjdCBza19idWZmICpkY2NwX21ha2VfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCi0JCQkJY29uc3QgZW51bSBkY2NwX3Jlc2V0X2NvZGVzIGNvZGUpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmRjY3BfbWFrZV9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkgICAgICAgY29uc3QgZW51bSBkY2NwX3Jlc2V0X2NvZGVzIGNvZGUpCiAJCQkJICAgCiB7CiAJc3RydWN0IGRjY3BfaGRyICpkaDsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCWNvbnN0IGludCBkY2NwX2hlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKworCWNvbnN0IHUzMiBkY2NwX2hlYWRlcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKwogCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcl9leHQpICsKIAkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfcmVzZXQpOwotCXN0cnVjdCBza19idWZmICpza2IgPSBzb2NrX3dtYWxsb2Moc2ssIE1BWF9IRUFERVIgKyBEQ0NQX01BWF9PUFRfTEVOICsKLQkJCQkJICAgICAgIGRjY3BfaGVhZGVyX3NpemUsIDEsCisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNvY2tfd21hbGxvYyhzaywgc2stPnNrX3Byb3QtPm1heF9oZWFkZXIsIDEsCiAJCQkJCSAgIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBSZXNlcnZlIHNwYWNlIGZvciBoZWFkZXJzLiAqLwotCXNrYl9yZXNlcnZlKHNrYiwgTUFYX0hFQURFUiArIERDQ1BfTUFYX09QVF9MRU4gKyBkY2NwX2hlYWRlcl9zaXplKTsKKwlza2JfcmVzZXJ2ZShza2IsIHNrLT5za19wcm90LT5tYXhfaGVhZGVyKTsKIAogCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKGRzdCk7CiAJc2tiLT5jc3VtID0gMDsKQEAgLTM0NSw3ICszNTIsMTEgQEAKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9yZXNldF9jb2RlID0gY29kZTsKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlCSAgID0gRENDUF9QS1RfUkVTRVQ7CiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxCSAgID0gZHAtPmRjY3BzX2dzczsKLQlkY2NwX2luc2VydF9vcHRpb25zKHNrLCBza2IpOworCisJaWYgKGRjY3BfaW5zZXJ0X29wdGlvbnMoc2ssIHNrYikpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBOVUxMOworCX0KIAogCXNrYi0+aC5yYXcgPSBza2JfcHVzaChza2IsIGRjY3BfaGVhZGVyX3NpemUpOwogCkBAIC0zNjIsMTQgKzM3MywzNCBAQAogCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwgZHAtPmRjY3BzX2dzcik7CiAKIAlkY2NwX2hkcl9yZXNldChza2IpLT5kY2NwaF9yZXNldF9jb2RlID0gY29kZTsKLQotCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjRfY2hlY2tzdW0oc2tiLCBpbmV0X3NrKHNrKS0+c2FkZHIsCi0JCQkJCSAgICAgIGluZXRfc2soc2spLT5kYWRkcik7CisJaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+c2VuZF9jaGVjayhzaywgc2tiLT5sZW4sIHNrYik7CiAKIAlEQ0NQX0lOQ19TVEFUUyhEQ0NQX01JQl9PVVRTRUdTKTsKIAlyZXR1cm4gc2tiOwogfQogCitpbnQgZGNjcF9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBkY2NwX3Jlc2V0X2NvZGVzIGNvZGUpCit7CisJLyoKKwkgKiBGSVhNRTogd2hhdCBpZiByZWJ1aWxkX2hlYWRlciBmYWlscz8KKwkgKiBTaG91bGQgd2UgYmUgZG9pbmcgYSByZWJ1aWxkX2hlYWRlciBoZXJlPworCSAqLworCWludCBlcnIgPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyKHNrKTsKKworCWlmIChlcnIgPT0gMCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGNjcF9tYWtlX3Jlc2V0KHNrLCBzay0+c2tfZHN0X2NhY2hlLAorCQkJCQkJICAgICAgY29kZSk7CisJCWlmIChza2IgIT0gTlVMTCkgeworCQkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2YoSVBDQihza2IpLT5vcHQpKTsKKwkJCWVyciA9IGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCAwKTsKKwkJCWlmIChlcnIgPT0gTkVUX1hNSVRfQ04pCisJCQkJZXJyID0gMDsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKIC8qCiAgKiBEbyBhbGwgY29ubmVjdCBzb2NrZXQgc2V0dXBzIHRoYXQgY2FuIGJlIGRvbmUgQUYgaW5kZXBlbmRlbnQuCiAgKi8KQEAgLTQwNSwxMiArNDM2LDEyIEBACiAKIAlkY2NwX2Nvbm5lY3RfaW5pdChzayk7CiAKLQlza2IgPSBhbGxvY19za2IoTUFYX0RDQ1BfSEVBREVSICsgMTUsIHNrLT5za19hbGxvY2F0aW9uKTsKKwlza2IgPSBhbGxvY19za2Ioc2stPnNrX3Byb3QtPm1heF9oZWFkZXIsIHNrLT5za19hbGxvY2F0aW9uKTsKIAlpZiAodW5saWtlbHkoc2tiID09IE5VTEwpKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKIAkvKiBSZXNlcnZlIHNwYWNlIGZvciBoZWFkZXJzLiAqLwotCXNrYl9yZXNlcnZlKHNrYiwgTUFYX0RDQ1BfSEVBREVSKTsKKwlza2JfcmVzZXJ2ZShza2IsIHNrLT5za19wcm90LT5tYXhfaGVhZGVyKTsKIAogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGUgPSBEQ0NQX1BLVF9SRVFVRVNUOwogCXNrYi0+Y3N1bSA9IDA7CkBAIC00MzEsNyArNDYyLDggQEAKIHsKIAkvKiBJZiB3ZSBoYXZlIGJlZW4gcmVzZXQsIHdlIG1heSBub3Qgc2VuZCBhZ2Fpbi4gKi8KIAlpZiAoc2stPnNrX3N0YXRlICE9IERDQ1BfQ0xPU0VEKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IoTUFYX0RDQ1BfSEVBREVSLCBHRlBfQVRPTUlDKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihzay0+c2tfcHJvdC0+bWF4X2hlYWRlciwKKwkJCQkJCUdGUF9BVE9NSUMpOwogCiAJCWlmIChza2IgPT0gTlVMTCkgewogCQkJaW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNrKTsKQEAgLTQ0Myw3ICs0NzUsNyBAQAogCQl9CiAKIAkJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycyAqLwotCQlza2JfcmVzZXJ2ZShza2IsIE1BWF9EQ0NQX0hFQURFUik7CisJCXNrYl9yZXNlcnZlKHNrYiwgc2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwogCQlza2ItPmNzdW0gPSAwOwogCQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlID0gRENDUF9QS1RfQUNLOwogCQlkY2NwX3RyYW5zbWl0X3NrYihzaywgc2tiKTsKQEAgLTQ5MCwxNCArNTIyLDE0IEBACiAJICogZGNjcF90cmFuc21pdF9za2IoKSB3aWxsIHNldCB0aGUgb3duZXJzaGlwIHRvIHRoaXMKIAkgKiBzb2NrLgogCSAqLwotCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IoTUFYX0RDQ1BfSEVBREVSLCBHRlBfQVRPTUlDKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKHNrLT5za19wcm90LT5tYXhfaGVhZGVyLCBHRlBfQVRPTUlDKTsKIAogCWlmIChza2IgPT0gTlVMTCkKIAkJLyogRklYTUU6IGhvdyB0byBtYWtlIHN1cmUgdGhlIHN5bmMgaXMgc2VudD8gKi8KIAkJcmV0dXJuOwogCiAJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycyBhbmQgcHJlcGFyZSBjb250cm9sIGJpdHMuICovCi0Jc2tiX3Jlc2VydmUoc2tiLCBNQVhfRENDUF9IRUFERVIpOworCXNrYl9yZXNlcnZlKHNrYiwgc2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwogCXNrYi0+Y3N1bSA9IDA7CiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSA9IHBrdF90eXBlOwogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSA9IHNlcTsKQEAgLTUwNSw2ICs1MzcsOCBAQAogCWRjY3BfdHJhbnNtaXRfc2tiKHNrLCBza2IpOwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3NlbmRfc3luYyk7CisKIC8qCiAgKiBTZW5kIGEgRENDUF9QS1RfQ0xPU0UvQ0xPU0VSRVEuIFRoZSBjYWxsZXIgbG9ja3MgdGhlIHNvY2tldCBmb3IgdXMuIFRoaXMKICAqIGNhbm5vdCBiZSBhbGxvd2VkIHRvIGZhaWwgcXVldWVpbmcgYSBEQ0NQX1BLVF9DTE9TRS9DTE9TRVJFUSBmcmFtZSB1bmRlcgpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggNjViMTFlYS4uMWZmNzMyOCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0yMyw5ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAKLSNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCkBAIC0zNyw2ICszNSw3IEBACiAKICNpbmNsdWRlICJjY2lkLmgiCiAjaW5jbHVkZSAiZGNjcC5oIgorI2luY2x1ZGUgImZlYXQuaCIKIAogREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgZGNjcF9taWIsIGRjY3Bfc3RhdGlzdGljcykgX19yZWFkX21vc3RseTsKIApAQCAtNDYsMTIgKzQ1LDY2IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3Bfb3JwaGFuX2NvdW50KTsKIAotc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9jb2wgZGNjcF9wcm90b2NvbCA9IHsKLQkuaGFuZGxlcgk9IGRjY3BfdjRfcmN2LAotCS5lcnJfaGFuZGxlcgk9IGRjY3BfdjRfZXJyLAotCS5ub19wb2xpY3kJPSAxLAorc3RydWN0IGluZXRfaGFzaGluZm8gX19jYWNoZWxpbmVfYWxpZ25lZCBkY2NwX2hhc2hpbmZvID0geworCS5saGFzaF9sb2NrCT0gUldfTE9DS19VTkxPQ0tFRCwKKwkubGhhc2hfdXNlcnMJPSBBVE9NSUNfSU5JVCgwKSwKKwkubGhhc2hfd2FpdCA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKGRjY3BfaGFzaGluZm8ubGhhc2hfd2FpdCksCiB9OwogCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2hhc2hpbmZvKTsKKwordm9pZCBkY2NwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBzdGF0ZSkKK3sKKwljb25zdCBpbnQgb2xkc3RhdGUgPSBzay0+c2tfc3RhdGU7CisKKwlkY2NwX3ByX2RlYnVnKCIlcyglcCkgJS0xMC4xMHMgLT4gJXNcbiIsCisJCSAgICAgIGRjY3Bfcm9sZShzayksIHNrLAorCQkgICAgICBkY2NwX3N0YXRlX25hbWUob2xkc3RhdGUpLCBkY2NwX3N0YXRlX25hbWUoc3RhdGUpKTsKKwlXQVJOX09OKHN0YXRlID09IG9sZHN0YXRlKTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIERDQ1BfT1BFTjoKKwkJaWYgKG9sZHN0YXRlICE9IERDQ1BfT1BFTikKKwkJCURDQ1BfSU5DX1NUQVRTKERDQ1BfTUlCX0NVUlJFU1RBQik7CisJCWJyZWFrOworCisJY2FzZSBEQ0NQX0NMT1NFRDoKKwkJaWYgKG9sZHN0YXRlID09IERDQ1BfQ0xPU0lORyB8fCBvbGRzdGF0ZSA9PSBEQ0NQX09QRU4pCisJCQlEQ0NQX0lOQ19TVEFUUyhEQ0NQX01JQl9FU1RBQlJFU0VUUyk7CisKKwkJc2stPnNrX3Byb3QtPnVuaGFzaChzayk7CisJCWlmIChpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoICE9IE5VTEwgJiYKKwkJICAgICEoc2stPnNrX3VzZXJsb2NrcyAmIFNPQ0tfQklORFBPUlRfTE9DSykpCisJCQlpbmV0X3B1dF9wb3J0KCZkY2NwX2hhc2hpbmZvLCBzayk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWlmIChvbGRzdGF0ZSA9PSBEQ0NQX09QRU4pCisJCQlEQ0NQX0RFQ19TVEFUUyhEQ0NQX01JQl9DVVJSRVNUQUIpOworCX0KKworCS8qIENoYW5nZSBzdGF0ZSBBRlRFUiBzb2NrZXQgaXMgdW5oYXNoZWQgdG8gYXZvaWQgY2xvc2VkCisJICogc29ja2V0IHNpdHRpbmcgaW4gaGFzaCB0YWJsZXMuCisJICovCisJc2stPnNrX3N0YXRlID0gc3RhdGU7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3Bfc2V0X3N0YXRlKTsKKwordm9pZCBkY2NwX2RvbmUoc3RydWN0IHNvY2sgKnNrKQoreworCWRjY3Bfc2V0X3N0YXRlKHNrLCBEQ0NQX0NMT1NFRCk7CisJZGNjcF9jbGVhcl94bWl0X3RpbWVycyhzayk7CisKKwlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOworCisJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpCisJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOworCWVsc2UKKwkJaW5ldF9jc2tfZGVzdHJveV9zb2NrKHNrKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9kb25lKTsKKwogY29uc3QgY2hhciAqZGNjcF9wYWNrZXRfbmFtZShjb25zdCBpbnQgdHlwZSkKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9wYWNrZXRfbmFtZXNbXSA9IHsKQEAgLTk2LDYgKzE0OSwxMjAgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9zdGF0ZV9uYW1lKTsKIAordm9pZCBkY2NwX2hhc2goc3RydWN0IHNvY2sgKnNrKQoreworCWluZXRfaGFzaCgmZGNjcF9oYXNoaW5mbywgc2spOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2hhc2gpOworCit2b2lkIGRjY3BfdW5oYXNoKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpbmV0X3VuaGFzaCgmZGNjcF9oYXNoaW5mbywgc2spOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3VuaGFzaCk7CisKK2ludCBkY2NwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IF9fdTggY3RsX3NvY2tfaW5pdGlhbGl6ZWQpCit7CisJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKwlzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayA9IGRjY3BfbXNrKHNrKTsKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisKKwlkY2NwX21pbmlzb2NrX2luaXQoJmRwLT5kY2Nwc19taW5pc29jayk7CisJZG9fZ2V0dGltZW9mZGF5KCZkcC0+ZGNjcHNfZXBvY2gpOworCisJLyoKKwkgKiBGSVhNRTogV2UncmUgaGFyZGNvZGluZyB0aGUgQ0NJRCwgYW5kIGRvaW5nIHRoaXMgYXQgdGhpcyBwb2ludCBtYWtlcworCSAqIHRoZSBsaXN0ZW5pbmcgKG1hc3Rlcikgc29jayBnZXQgQ0NJRCBjb250cm9sIGJsb2Nrcywgd2hpY2ggaXMgbm90CisJICogbmVjZXNzYXJ5LCBidXQgZm9yIG5vdywgdG8gbm90IG1lc3Mgd2l0aCB0aGUgdGVzdCB1c2Vyc3BhY2UgYXBwcywKKwkgKiBsZXRzIGxlYXZlIGl0IGhlcmUsIGxhdGVyIHRoZSByZWFsIHNvbHV0aW9uIGlzIHRvIGRvIHRoaXMgaW4gYQorCSAqIHNldHNvY2tvcHQoQ0NJRHMtSS13YW50L2FjY2VwdCkuIC1hY21lCisJICovCisJaWYgKGxpa2VseShjdGxfc29ja19pbml0aWFsaXplZCkpIHsKKwkJaW50IHJjID0gZGNjcF9mZWF0X2luaXQoZG1zayk7CisKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCisJCWlmIChkbXNrLT5kY2NwbXNfc2VuZF9hY2tfdmVjdG9yKSB7CisJCQlkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID0gZGNjcF9hY2t2ZWNfYWxsb2MoR0ZQX0tFUk5FTCk7CisJCQlpZiAoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWRwLT5kY2Nwc19oY19yeF9jY2lkID0gY2NpZF9oY19yeF9uZXcoZG1zay0+ZGNjcG1zX3J4X2NjaWQsCisJCQkJCQkgICAgICBzaywgR0ZQX0tFUk5FTCk7CisJCWRwLT5kY2Nwc19oY190eF9jY2lkID0gY2NpZF9oY190eF9uZXcoZG1zay0+ZGNjcG1zX3R4X2NjaWQsCisJCQkJCQkgICAgICBzaywgR0ZQX0tFUk5FTCk7CisJICAgIAlpZiAodW5saWtlbHkoZHAtPmRjY3BzX2hjX3J4X2NjaWQgPT0gTlVMTCB8fAorCQkJICAgICBkcC0+ZGNjcHNfaGNfdHhfY2NpZCA9PSBOVUxMKSkgeworCQkJY2NpZF9oY19yeF9kZWxldGUoZHAtPmRjY3BzX2hjX3J4X2NjaWQsIHNrKTsKKwkJCWNjaWRfaGNfdHhfZGVsZXRlKGRwLT5kY2Nwc19oY190eF9jY2lkLCBzayk7CisJCQlpZiAoZG1zay0+ZGNjcG1zX3NlbmRfYWNrX3ZlY3RvcikgeworCQkJCWRjY3BfYWNrdmVjX2ZyZWUoZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyk7CisJCQkJZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9IE5VTEw7CisJCQl9CisJCQlkcC0+ZGNjcHNfaGNfcnhfY2NpZCA9IGRwLT5kY2Nwc19oY190eF9jY2lkID0gTlVMTDsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfSBlbHNlIHsKKwkJLyogY29udHJvbCBzb2NrZXQgZG9lc24ndCBuZWVkIGZlYXQgbmVnbyAqLworCQlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX3BlbmRpbmcpOworCQlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX2NvbmYpOworCX0KKworCWRjY3BfaW5pdF94bWl0X3RpbWVycyhzayk7CisJaWNzay0+aWNza19ydG8JCT0gRENDUF9USU1FT1VUX0lOSVQ7CisJc2stPnNrX3N0YXRlCQk9IERDQ1BfQ0xPU0VEOworCXNrLT5za193cml0ZV9zcGFjZQk9IGRjY3Bfd3JpdGVfc3BhY2U7CisJaWNzay0+aWNza19zeW5jX21zcwk9IGRjY3Bfc3luY19tc3M7CisJZHAtPmRjY3BzX21zc19jYWNoZQk9IDUzNjsKKwlkcC0+ZGNjcHNfcm9sZQkJPSBEQ0NQX1JPTEVfVU5ERUZJTkVEOworCWRwLT5kY2Nwc19zZXJ2aWNlCT0gRENDUF9TRVJWSUNFX0lOVkFMSURfVkFMVUU7CisJZHAtPmRjY3BzX2xfYWNrX3JhdGlvCT0gZHAtPmRjY3BzX3JfYWNrX3JhdGlvID0gMTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2luaXRfc29jayk7CisKK2ludCBkY2NwX2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKKwlzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayA9IGRjY3BfbXNrKHNrKTsKKworCS8qCisJICogRENDUCBkb2Vzbid0IHVzZSBza193cml0ZV9xdWV1ZSwganVzdCBza19zZW5kX2hlYWQKKwkgKiBmb3IgcmV0cmFuc21pc3Npb25zCisJICovCisJaWYgKHNrLT5za19zZW5kX2hlYWQgIT0gTlVMTCkgeworCQlrZnJlZV9za2Ioc2stPnNrX3NlbmRfaGVhZCk7CisJCXNrLT5za19zZW5kX2hlYWQgPSBOVUxMOworCX0KKworCS8qIENsZWFuIHVwIGEgcmVmZXJlbmNlZCBEQ0NQIGJpbmQgYnVja2V0LiAqLworCWlmIChpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoICE9IE5VTEwpCisJCWluZXRfcHV0X3BvcnQoJmRjY3BfaGFzaGluZm8sIHNrKTsKKworCWtmcmVlKGRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QpOworCWRwLT5kY2Nwc19zZXJ2aWNlX2xpc3QgPSBOVUxMOworCisJaWYgKGRtc2stPmRjY3Btc19zZW5kX2Fja192ZWN0b3IpIHsKKwkJZGNjcF9hY2t2ZWNfZnJlZShkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjKTsKKwkJZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyA9IE5VTEw7CisJfQorCWNjaWRfaGNfcnhfZGVsZXRlKGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzayk7CisJY2NpZF9oY190eF9kZWxldGUoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrKTsKKwlkcC0+ZGNjcHNfaGNfcnhfY2NpZCA9IGRwLT5kY2Nwc19oY190eF9jY2lkID0gTlVMTDsKKworCS8qIGNsZWFuIHVwIGZlYXR1cmUgbmVnb3RpYXRpb24gc3RhdGUgKi8KKwlkY2NwX2ZlYXRfY2xlYW4oZG1zayk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9kZXN0cm95X3NvY2spOworCiBzdGF0aWMgaW5saW5lIGludCBkY2NwX2xpc3Rlbl9zdGFydChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKQEAgLTE4Myw3ICszNTAsNyBAQAogCWlmIChzay0+c2tfc2h1dGRvd24gPT0gU0hVVERPV05fTUFTSyB8fCBzay0+c2tfc3RhdGUgPT0gRENDUF9DTE9TRUQpCiAJCW1hc2sgfD0gUE9MTEhVUDsKIAlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKQotCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STSB8IFBPTExSREhVUDsKIAogCS8qIENvbm5lY3RlZD8gKi8KIAlpZiAoKDEgPDwgc2stPnNrX3N0YXRlKSAmIH4oRENDUEZfUkVRVUVTVElORyB8IERDQ1BGX1JFU1BPTkQpKSB7CkBAIC0yMjAsNyArMzg3LDcgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9pb2N0bCk7CiAKLXN0YXRpYyBpbnQgZGNjcF9zZXRzb2Nrb3B0X3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCB1MzIgc2VydmljZSwKK3N0YXRpYyBpbnQgZGNjcF9zZXRzb2Nrb3B0X3NlcnZpY2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBfX2JlMzIgc2VydmljZSwKIAkJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CkBAIC0yNTUsMTggKzQyMiw0NiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZGNjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCisvKiBieXRlIDEgaXMgZmVhdHVyZS4gIHRoZSByZXN0IGlzIHRoZSBwcmVmZXJlbmNlIGxpc3QgKi8KK3N0YXRpYyBpbnQgZGNjcF9zZXRzb2Nrb3B0X2NoYW5nZShzdHJ1Y3Qgc29jayAqc2ssIGludCB0eXBlLAorCQkJCSAgc3RydWN0IGRjY3Bfc29fZmVhdCBfX3VzZXIgKm9wdHZhbCkKK3sKKwlzdHJ1Y3QgZGNjcF9zb19mZWF0IG9wdDsKKwl1OCAqdmFsOworCWludCByYzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmb3B0LCBvcHR2YWwsIHNpemVvZihvcHQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl2YWwgPSBrbWFsbG9jKG9wdC5kY2Nwc2ZfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIodmFsLCBvcHQuZGNjcHNmX3ZhbCwgb3B0LmRjY3BzZl9sZW4pKSB7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBvdXRfZnJlZV92YWw7CisJfQorCisJcmMgPSBkY2NwX2ZlYXRfY2hhbmdlKGRjY3BfbXNrKHNrKSwgdHlwZSwgb3B0LmRjY3BzZl9mZWF0LAorCQkJICAgICAgdmFsLCBvcHQuZGNjcHNmX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlX3ZhbDsKKworb3V0OgorCXJldHVybiByYzsKKworb3V0X2ZyZWVfdmFsOgorCWtmcmVlKHZhbCk7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fZGNjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcDsKIAlpbnQgZXJyOwogCWludCB2YWw7CiAKLQlpZiAobGV2ZWwgIT0gU09MX0RDQ1ApCi0JCXJldHVybiBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5zZXRzb2Nrb3B0KHNrLCBsZXZlbCwKLQkJCQkJCQkgICAgIG9wdG5hbWUsIG9wdHZhbCwKLQkJCQkJCQkgICAgIG9wdGxlbik7Ci0KIAlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yODQsNiArNDc5LDI1IEBACiAJY2FzZSBEQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkU6CiAJCWRwLT5kY2Nwc19wYWNrZXRfc2l6ZSA9IHZhbDsKIAkJYnJlYWs7CisKKwljYXNlIERDQ1BfU09DS09QVF9DSEFOR0VfTDoKKwkJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IGRjY3Bfc29fZmVhdCkpCisJCQllcnIgPSAtRUlOVkFMOworCQllbHNlCisJCQllcnIgPSBkY2NwX3NldHNvY2tvcHRfY2hhbmdlKHNrLCBEQ0NQT19DSEFOR0VfTCwKKwkJCQkJICAgICAgICAgICAgIChzdHJ1Y3QgZGNjcF9zb19mZWF0ICopCisJCQkJCQkgICAgIG9wdHZhbCk7CisJCWJyZWFrOworCisJY2FzZSBEQ0NQX1NPQ0tPUFRfQ0hBTkdFX1I6CisJCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBkY2NwX3NvX2ZlYXQpKQorCQkJZXJyID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJZXJyID0gZGNjcF9zZXRzb2Nrb3B0X2NoYW5nZShzaywgRENDUE9fQ0hBTkdFX1IsCisJCQkJCQkgICAgIChzdHJ1Y3QgZGNjcF9zb19mZWF0ICopCisJCQkJCQkgICAgIG9wdHZhbCk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCQlicmVhazsKQEAgLTI5MywxMCArNTA3LDMzIEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IGRjY3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCWlmIChsZXZlbCAhPSBTT0xfRENDUCkKKwkJcmV0dXJuIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnNldHNvY2tvcHQoc2ssIGxldmVsLAorCQkJCQkJCSAgICAgb3B0bmFtZSwgb3B0dmFsLAorCQkJCQkJCSAgICAgb3B0bGVuKTsKKwlyZXR1cm4gZG9fZGNjcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworfQorCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3NldHNvY2tvcHQpOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IGNvbXBhdF9kY2NwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlpZiAobGV2ZWwgIT0gU09MX0RDQ1ApCisJCXJldHVybiBpbmV0X2Nza19jb21wYXRfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsCisJCQkJCQkgIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gZG9fZGNjcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChjb21wYXRfZGNjcF9zZXRzb2Nrb3B0KTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IGRjY3BfZ2V0c29ja29wdF9zZXJ2aWNlKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwKLQkJCQkgICB1MzIgX191c2VyICpvcHR2YWwsCisJCQkJICAgX19iZTMyIF9fdXNlciAqb3B0dmFsLAogCQkJCSAgIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAljb25zdCBzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwpAQCAtMzI2LDE2ICs1NjMsMTIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgZGNjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKK3N0YXRpYyBpbnQgZG9fZGNjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcDsKIAlpbnQgdmFsLCBsZW47CiAKLQlpZiAobGV2ZWwgIT0gU09MX0RDQ1ApCi0JCXJldHVybiBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5nZXRzb2Nrb3B0KHNrLCBsZXZlbCwKLQkJCQkJCQkgICAgIG9wdG5hbWUsIG9wdHZhbCwKLQkJCQkJCQkgICAgIG9wdGxlbik7CiAJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTM1MSw3ICs1ODQsNyBAQAogCQlicmVhazsKIAljYXNlIERDQ1BfU09DS09QVF9TRVJWSUNFOgogCQlyZXR1cm4gZGNjcF9nZXRzb2Nrb3B0X3NlcnZpY2Uoc2ssIGxlbiwKLQkJCQkJICAgICAgICh1MzIgX191c2VyICopb3B0dmFsLCBvcHRsZW4pOworCQkJCQkgICAgICAgKF9fYmUzMiBfX3VzZXIgKilvcHR2YWwsIG9wdGxlbik7CiAJY2FzZSAxMjggLi4uIDE5MToKIAkJcmV0dXJuIGNjaWRfaGNfcnhfZ2V0c29ja29wdChkcC0+ZGNjcHNfaGNfcnhfY2NpZCwgc2ssIG9wdG5hbWUsCiAJCQkJCSAgICAgbGVuLCAodTMyIF9fdXNlciAqKW9wdHZhbCwgb3B0bGVuKTsKQEAgLTM2OCw4ICs2MDEsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGRjY3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJaWYgKGxldmVsICE9IFNPTF9EQ0NQKQorCQlyZXR1cm4gaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+Z2V0c29ja29wdChzaywgbGV2ZWwsCisJCQkJCQkJICAgICBvcHRuYW1lLCBvcHR2YWwsCisJCQkJCQkJICAgICBvcHRsZW4pOworCXJldHVybiBkb19kY2NwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Cit9CisKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZ2V0c29ja29wdCk7CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitpbnQgY29tcGF0X2RjY3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJaWYgKGxldmVsICE9IFNPTF9EQ0NQKQorCQlyZXR1cm4gaW5ldF9jc2tfY29tcGF0X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkJICBvcHR2YWwsIG9wdGxlbik7CisJcmV0dXJuIGRvX2RjY3BfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoY29tcGF0X2RjY3BfZ2V0c29ja29wdCk7CisjZW5kaWYKKwogaW50IGRjY3Bfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkgc2l6ZV90IGxlbikKIHsKQEAgLTY3OSw4NCArOTM1LDcgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9zaHV0ZG93bik7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfZGNjcF9vcHMgPSB7Ci0JLmZhbWlseQkJPSBQRl9JTkVULAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkucmVsZWFzZQk9IGluZXRfcmVsZWFzZSwKLQkuYmluZAkJPSBpbmV0X2JpbmQsCi0JLmNvbm5lY3QJPSBpbmV0X3N0cmVhbV9jb25uZWN0LAotCS5zb2NrZXRwYWlyCT0gc29ja19ub19zb2NrZXRwYWlyLAotCS5hY2NlcHQJCT0gaW5ldF9hY2NlcHQsCi0JLmdldG5hbWUJPSBpbmV0X2dldG5hbWUsCi0JLyogRklYTUU6IHdvcmsgb24gdGNwX3BvbGwgdG8gcmVuYW1lIGl0IHRvIGluZXRfY3NrX3BvbGwgKi8KLQkucG9sbAkJPSBkY2NwX3BvbGwsCi0JLmlvY3RsCQk9IGluZXRfaW9jdGwsCi0JLyogRklYTUU6IHdvcmsgb24gaW5ldF9saXN0ZW4gdG8gcmVuYW1lIGl0IHRvIHNvY2tfY29tbW9uX2xpc3RlbiAqLwotCS5saXN0ZW4JCT0gaW5ldF9kY2NwX2xpc3RlbiwKLQkuc2h1dGRvd24JPSBpbmV0X3NodXRkb3duLAotCS5zZXRzb2Nrb3B0CT0gc29ja19jb21tb25fc2V0c29ja29wdCwKLQkuZ2V0c29ja29wdAk9IHNvY2tfY29tbW9uX2dldHNvY2tvcHQsCi0JLnNlbmRtc2cJPSBpbmV0X3NlbmRtc2csCi0JLnJlY3Ztc2cJPSBzb2NrX2NvbW1vbl9yZWN2bXNnLAotCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKLQkuc2VuZHBhZ2UJPSBzb2NrX25vX3NlbmRwYWdlLAotfTsKLQotZXh0ZXJuIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGluZXRfZmFtaWx5X29wczsKLQotc3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgZGNjcF92NF9wcm90b3N3ID0gewotCS50eXBlCQk9IFNPQ0tfRENDUCwKLQkucHJvdG9jb2wJPSBJUFBST1RPX0RDQ1AsCi0JLnByb3QJCT0gJmRjY3BfcHJvdCwKLQkub3BzCQk9ICZpbmV0X2RjY3Bfb3BzLAotCS5jYXBhYmlsaXR5CT0gLTEsCi0JLm5vX2NoZWNrCT0gMCwKLQkuZmxhZ3MJCT0gSU5FVF9QUk9UT1NXX0lDU0ssCi19OwotCi0vKgotICogVGhpcyBpcyB0aGUgZ2xvYmFsIHNvY2tldCBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciByZXNwb25kaW5nIHRvCi0gKiB0aGUgT3V0LW9mLXRoZS1ibHVlIChPT1RCKSBwYWNrZXRzLiBBIGNvbnRyb2wgc29jayB3aWxsIGJlIGNyZWF0ZWQKLSAqIGZvciB0aGlzIHNvY2tldCBhdCB0aGUgaW5pdGlhbGl6YXRpb24gdGltZS4KLSAqLwotc3RydWN0IHNvY2tldCAqZGNjcF9jdGxfc29ja2V0OwotCi1zdGF0aWMgY2hhciBkY2NwX2N0bF9zb2NrZXRfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQotCUtFUk5fRVJSICJEQ0NQOiBGYWlsZWQgdG8gY3JlYXRlIHRoZSBjb250cm9sIHNvY2tldC5cbiI7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRjY3BfY3RsX3NvY2tfaW5pdCh2b2lkKQotewotCWludCByYyA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19EQ0NQLCBJUFBST1RPX0RDQ1AsCi0JCQkJICAmZGNjcF9jdGxfc29ja2V0KTsKLQlpZiAocmMgPCAwKQotCQlwcmludGsoZGNjcF9jdGxfc29ja2V0X2Vycl9tc2cpOwotCWVsc2UgewotCQlkY2NwX2N0bF9zb2NrZXQtPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKLQkJaW5ldF9zayhkY2NwX2N0bF9zb2NrZXQtPnNrKS0+dWNfdHRsID0gLTE7Ci0KLQkJLyogVW5oYXNoIGl0IHNvIHRoYXQgSVAgaW5wdXQgcHJvY2Vzc2luZyBkb2VzIG5vdCBldmVuCi0JCSAqIHNlZSBpdCwgd2UgZG8gbm90IHdpc2ggdGhpcyBzb2NrZXQgdG8gc2VlIGluY29taW5nCi0JCSAqIHBhY2tldHMuCi0JCSAqLwotCQlkY2NwX2N0bF9zb2NrZXQtPnNrLT5za19wcm90LT51bmhhc2goZGNjcF9jdGxfc29ja2V0LT5zayk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfVU5MT0FEX0hBQ0sKLXZvaWQgZGNjcF9jdGxfc29ja19leGl0KHZvaWQpCi17Ci0JaWYgKGRjY3BfY3RsX3NvY2tldCAhPSBOVUxMKSB7Ci0JCXNvY2tfcmVsZWFzZShkY2NwX2N0bF9zb2NrZXQpOwotCQlkY2NwX2N0bF9zb2NrZXQgPSBOVUxMOwotCX0KLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9jdGxfc29ja19leGl0KTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2RjY3BfdjRfbWlicyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZGNjcF9taWJfaW5pdCh2b2lkKQogewogCWludCByYyA9IC1FTk9NRU07CiAKQEAgLTc3OCw2ICs5NTcsMTMgQEAKIAogfQogCitzdGF0aWMgdm9pZCBkY2NwX21pYl9leGl0KHZvaWQpCit7CisJZnJlZV9wZXJjcHUoZGNjcF9zdGF0aXN0aWNzWzBdKTsKKwlmcmVlX3BlcmNwdShkY2NwX3N0YXRpc3RpY3NbMV0pOworCWRjY3Bfc3RhdGlzdGljc1swXSA9IGRjY3Bfc3RhdGlzdGljc1sxXSA9IE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgdGhhc2hfZW50cmllczsKIG1vZHVsZV9wYXJhbSh0aGFzaF9lbnRyaWVzLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0aGFzaF9lbnRyaWVzLCAiTnVtYmVyIG9mIGVoYXNoIGJ1Y2tldHMiKTsKQEAgLTc5NCwxNyArOTgwLDE0IEBACiB7CiAJdW5zaWduZWQgbG9uZyBnb2FsOwogCWludCBlaGFzaF9vcmRlciwgYmhhc2hfb3JkZXIsIGk7Ci0JaW50IHJjID0gcHJvdG9fcmVnaXN0ZXIoJmRjY3BfcHJvdCwgMSk7Ci0KLQlpZiAocmMpCi0JCWdvdG8gb3V0OworCWludCByYyA9IC1FTk9CVUZTOwogCiAJZGNjcF9oYXNoaW5mby5iaW5kX2J1Y2tldF9jYWNoZXAgPQogCQlrbWVtX2NhY2hlX2NyZWF0ZSgiZGNjcF9iaW5kX2J1Y2tldCIsCiAJCQkJICBzaXplb2Yoc3RydWN0IGluZXRfYmluZF9idWNrZXQpLCAwLAogCQkJCSAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMLCBOVUxMKTsKIAlpZiAoIWRjY3BfaGFzaGluZm8uYmluZF9idWNrZXRfY2FjaGVwKQotCQlnb3RvIG91dF9wcm90b191bnJlZ2lzdGVyOworCQlnb3RvIG91dDsKIAogCS8qCiAJICogU2l6ZSBhbmQgYWxsb2NhdGUgdGhlIG1haW4gZXN0YWJsaXNoZWQgYW5kIGJpbmQgYnVja2V0CkBAIC04NjYsMjcgKzEwNDksMjMgQEAKIAkJSU5JVF9ITElTVF9IRUFEKCZkY2NwX2hhc2hpbmZvLmJoYXNoW2ldLmNoYWluKTsKIAl9CiAKLQlpZiAoaW5pdF9kY2NwX3Y0X21pYnMoKSkKKwlyYyA9IGRjY3BfbWliX2luaXQoKTsKKwlpZiAocmMpCiAJCWdvdG8gb3V0X2ZyZWVfZGNjcF9iaGFzaDsKIAotCXJjID0gLUVBR0FJTjsKLQlpZiAoaW5ldF9hZGRfcHJvdG9jb2woJmRjY3BfcHJvdG9jb2wsIElQUFJPVE9fRENDUCkpCi0JCWdvdG8gb3V0X2ZyZWVfZGNjcF92NF9taWJzOwotCi0JaW5ldF9yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y0X3Byb3Rvc3cpOwotCi0JcmMgPSBkY2NwX2N0bF9zb2NrX2luaXQoKTsKKwlyYyA9IGRjY3BfYWNrdmVjX2luaXQoKTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0X3VucmVnaXN0ZXJfcHJvdG9zdzsKKwkJZ290byBvdXRfZnJlZV9kY2NwX21pYjsKKworCXJjID0gZGNjcF9zeXNjdGxfaW5pdCgpOworCWlmIChyYykKKwkJZ290byBvdXRfYWNrdmVjX2V4aXQ7CiBvdXQ6CiAJcmV0dXJuIHJjOwotb3V0X3VucmVnaXN0ZXJfcHJvdG9zdzoKLQlpbmV0X3VucmVnaXN0ZXJfcHJvdG9zdygmZGNjcF92NF9wcm90b3N3KTsKLQlpbmV0X2RlbF9wcm90b2NvbCgmZGNjcF9wcm90b2NvbCwgSVBQUk9UT19EQ0NQKTsKLW91dF9mcmVlX2RjY3BfdjRfbWliczoKLQlmcmVlX3BlcmNwdShkY2NwX3N0YXRpc3RpY3NbMF0pOwotCWZyZWVfcGVyY3B1KGRjY3Bfc3RhdGlzdGljc1sxXSk7Ci0JZGNjcF9zdGF0aXN0aWNzWzBdID0gZGNjcF9zdGF0aXN0aWNzWzFdID0gTlVMTDsKK291dF9hY2t2ZWNfZXhpdDoKKwlkY2NwX2Fja3ZlY19leGl0KCk7CitvdXRfZnJlZV9kY2NwX21pYjoKKwlkY2NwX21pYl9leGl0KCk7CiBvdXRfZnJlZV9kY2NwX2JoYXNoOgogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpZGNjcF9oYXNoaW5mby5iaGFzaCwgYmhhc2hfb3JkZXIpOwogCWRjY3BfaGFzaGluZm8uYmhhc2ggPSBOVUxMOwpAQCAtODk2LDIzICsxMDc1LDEyIEBACiBvdXRfZnJlZV9iaW5kX2J1Y2tldF9jYWNoZXA6CiAJa21lbV9jYWNoZV9kZXN0cm95KGRjY3BfaGFzaGluZm8uYmluZF9idWNrZXRfY2FjaGVwKTsKIAlkY2NwX2hhc2hpbmZvLmJpbmRfYnVja2V0X2NhY2hlcCA9IE5VTEw7Ci1vdXRfcHJvdG9fdW5yZWdpc3RlcjoKLQlwcm90b191bnJlZ2lzdGVyKCZkY2NwX3Byb3QpOwogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBkY2NwX2RlbF9wcm90b19lcnJfbXNnW10gX19leGl0ZGF0YSA9Ci0JS0VSTl9FUlIgImNhbid0IHJlbW92ZSBkY2NwIG5ldF9wcm90b2NvbFxuIjsKLQogc3RhdGljIHZvaWQgX19leGl0IGRjY3BfZmluaSh2b2lkKQogewotCWluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KCZkY2NwX3Y0X3Byb3Rvc3cpOwotCi0JaWYgKGluZXRfZGVsX3Byb3RvY29sKCZkY2NwX3Byb3RvY29sLCBJUFBST1RPX0RDQ1ApIDwgMCkKLQkJcHJpbnRrKGRjY3BfZGVsX3Byb3RvX2Vycl9tc2cpOwotCi0JZnJlZV9wZXJjcHUoZGNjcF9zdGF0aXN0aWNzWzBdKTsKLQlmcmVlX3BlcmNwdShkY2NwX3N0YXRpc3RpY3NbMV0pOworCWRjY3BfbWliX2V4aXQoKTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWRjY3BfaGFzaGluZm8uYmhhc2gsCiAJCSAgIGdldF9vcmRlcihkY2NwX2hhc2hpbmZvLmJoYXNoX3NpemUgKgogCQkJICAgICBzaXplb2Yoc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0KSkpOwpAQCAtOTIwLDE5ICsxMDg4LDEzIEBACiAJCSAgIGdldF9vcmRlcihkY2NwX2hhc2hpbmZvLmVoYXNoX3NpemUgKgogCQkJICAgICBzaXplb2Yoc3RydWN0IGluZXRfZWhhc2hfYnVja2V0KSkpOwogCWttZW1fY2FjaGVfZGVzdHJveShkY2NwX2hhc2hpbmZvLmJpbmRfYnVja2V0X2NhY2hlcCk7Ci0JcHJvdG9fdW5yZWdpc3RlcigmZGNjcF9wcm90KTsKKwlkY2NwX2Fja3ZlY19leGl0KCk7CisJZGNjcF9zeXNjdGxfZXhpdCgpOwogfQogCiBtb2R1bGVfaW5pdChkY2NwX2luaXQpOwogbW9kdWxlX2V4aXQoZGNjcF9maW5pKTsKIAotLyoKLSAqIF9fc3RyaW5naWZ5IGRvZXNuJ3QgbGlrZXMgZW51bXMsIHNvIHVzZSBTT0NLX0RDQ1AgKDYpIGFuZCBJUFBST1RPX0RDQ1AgKDMzKQotICogdmFsdWVzIGRpcmVjdGx5LCBBbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm90b2NvbCBpcyBub3Qgc3BlY2lmaWVkLAotICogaS5lLiBuZXQtcGYtUEZfSU5FVC1wcm90by0wLXR5cGUtU09DS19EQ0NQCi0gKi8KLU1PRFVMRV9BTElBUygibmV0LXBmLSIgX19zdHJpbmdpZnkoUEZfSU5FVCkgIi1wcm90by0zMy10eXBlLTYiKTsKLU1PRFVMRV9BTElBUygibmV0LXBmLSIgX19zdHJpbmdpZnkoUEZfSU5FVCkgIi1wcm90by0wLXR5cGUtNiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRDQ1AgLSBEYXRhZ3JhbSBDb25nZXN0aW9uIENvbnRyb2xsZWQgUHJvdG9jb2wiKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3N5c2N0bC5jIGIvbmV0L2RjY3Avc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjODllOQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kY2NwL3N5c2N0bC5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogIG5ldC9kY2NwL3N5c2N0bC5jCisgKgorICogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEQ0NQIHByb3RvY29sCisgKiAgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQG1hbmRyaXZhLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MgorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisKKyNpZm5kZWYgQ09ORklHX1NZU0NUTAorI2Vycm9yIFRoaXMgZmlsZSBzaG91bGQgbm90IGJlIGNvbXBpbGVkIHdpdGhvdXQgQ09ORklHX1NZU0NUTCBkZWZpbmVkCisjZW5kaWYKKworZXh0ZXJuIGludCBkY2NwX2ZlYXRfZGVmYXVsdF9zZXF1ZW5jZV93aW5kb3c7CitleHRlcm4gaW50IGRjY3BfZmVhdF9kZWZhdWx0X3J4X2NjaWQ7CitleHRlcm4gaW50IGRjY3BfZmVhdF9kZWZhdWx0X3R4X2NjaWQ7CitleHRlcm4gaW50IGRjY3BfZmVhdF9kZWZhdWx0X2Fja19yYXRpbzsKK2V4dGVybiBpbnQgZGNjcF9mZWF0X2RlZmF1bHRfc2VuZF9hY2tfdmVjdG9yOworZXh0ZXJuIGludCBkY2NwX2ZlYXRfZGVmYXVsdF9zZW5kX25kcF9jb3VudDsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZGNjcF9kZWZhdWx0X3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBORVRfRENDUF9ERUZBVUxUX1NFUV9XSU5ET1csCisJCS5wcm9jbmFtZQk9ICJzZXFfd2luZG93IiwKKwkJLmRhdGEJCT0gJmRjY3BfZmVhdF9kZWZhdWx0X3NlcXVlbmNlX3dpbmRvdywKKwkJLm1heGxlbgkJPSBzaXplb2YoZGNjcF9mZWF0X2RlZmF1bHRfc2VxdWVuY2Vfd2luZG93KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9EQ0NQX0RFRkFVTFRfUlhfQ0NJRCwKKwkJLnByb2NuYW1lCT0gInJ4X2NjaWQiLAorCQkuZGF0YQkJPSAmZGNjcF9mZWF0X2RlZmF1bHRfcnhfY2NpZCwKKwkJLm1heGxlbgkJPSBzaXplb2YoZGNjcF9mZWF0X2RlZmF1bHRfcnhfY2NpZCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfRENDUF9ERUZBVUxUX1RYX0NDSUQsCisJCS5wcm9jbmFtZQk9ICJ0eF9jY2lkIiwKKwkJLmRhdGEJCT0gJmRjY3BfZmVhdF9kZWZhdWx0X3R4X2NjaWQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGRjY3BfZmVhdF9kZWZhdWx0X3R4X2NjaWQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0RDQ1BfREVGQVVMVF9BQ0tfUkFUSU8sCisJCS5wcm9jbmFtZQk9ICJhY2tfcmF0aW8iLAorCQkuZGF0YQkJPSAmZGNjcF9mZWF0X2RlZmF1bHRfYWNrX3JhdGlvLAorCQkubWF4bGVuCQk9IHNpemVvZihkY2NwX2ZlYXRfZGVmYXVsdF9hY2tfcmF0aW8pLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0RDQ1BfREVGQVVMVF9TRU5EX0FDS1ZFQywKKwkJLnByb2NuYW1lCT0gInNlbmRfYWNrdmVjIiwKKwkJLmRhdGEJCT0gJmRjY3BfZmVhdF9kZWZhdWx0X3NlbmRfYWNrX3ZlY3RvciwKKwkJLm1heGxlbgkJPSBzaXplb2YoZGNjcF9mZWF0X2RlZmF1bHRfc2VuZF9hY2tfdmVjdG9yKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9EQ0NQX0RFRkFVTFRfU0VORF9ORFAsCisJCS5wcm9jbmFtZQk9ICJzZW5kX25kcCIsCisJCS5kYXRhCQk9ICZkY2NwX2ZlYXRfZGVmYXVsdF9zZW5kX25kcF9jb3VudCwKKwkJLm1heGxlbgkJPSBzaXplb2YoZGNjcF9mZWF0X2RlZmF1bHRfc2VuZF9uZHBfY291bnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwl9LAorCXsgLmN0bF9uYW1lID0gMCwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZGNjcF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0RDQ1BfREVGQVVMVCwKKwkJLnByb2NuYW1lCT0gImRlZmF1bHQiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gZGNjcF9kZWZhdWx0X3RhYmxlLAorCX0sCisJeyAuY3RsX25hbWUgPSAwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZGNjcF9kaXJfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9EQ0NQLAorCQkucHJvY25hbWUJPSAiZGNjcCIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBkY2NwX3RhYmxlLAorCX0sCisJeyAuY3RsX25hbWUgPSAwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZGNjcF9yb290X3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBDVExfTkVULAorCQkucHJvY25hbWUJPSAibmV0IiwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IGRjY3BfZGlyX3RhYmxlLAorCX0sCisJeyAuY3RsX25hbWUgPSAwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpkY2NwX3RhYmxlX2hlYWRlcjsKKworaW50IF9faW5pdCBkY2NwX3N5c2N0bF9pbml0KHZvaWQpCit7CisJZGNjcF90YWJsZV9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoZGNjcF9yb290X3RhYmxlLCAxKTsKKworCXJldHVybiBkY2NwX3RhYmxlX2hlYWRlciAhPSBOVUxMID8gMCA6IC1FTk9NRU07Cit9CisKK3ZvaWQgZGNjcF9zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChkY2NwX3RhYmxlX2hlYWRlciAhPSBOVUxMKSB7CisJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGRjY3BfdGFibGVfaGVhZGVyKTsKKwkJZGNjcF90YWJsZV9oZWFkZXIgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL25ldC9kY2NwL3RpbWVyLmMgYi9uZXQvZGNjcC90aW1lci5jCmluZGV4IGFhMzRiNTcuLjUyNDQ0MTUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3RpbWVyLmMKKysrIGIvbmV0L2RjY3AvdGltZXIuYwpAQCAtMzEsNyArMzEsNyBAQAogCXNrLT5za19lcnIgPSBzay0+c2tfZXJyX3NvZnQgPyA6IEVUSU1FRE9VVDsKIAlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKIAotCWRjY3BfdjRfc2VuZF9yZXNldChzaywgRENDUF9SRVNFVF9DT0RFX0FCT1JURUQpOworCWRjY3Bfc2VuZF9yZXNldChzaywgRENDUF9SRVNFVF9DT0RFX0FCT1JURUQpOwogCWRjY3BfZG9uZShzayk7CiAJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfQUJPUlRPTlRJTUVPVVQpOwogfQpAQCAtMTQxLDYgKzE0MSwxNyBAQAogewogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAorCS8qIHJldHJhbnNtaXQgdGltZXIgaXMgdXNlZCBmb3IgZmVhdHVyZSBuZWdvdGlhdGlvbiB0aHJvdWdob3V0CisJICogY29ubmVjdGlvbi4gIEluIHRoaXMgY2FzZSwgbm8gcGFja2V0IGlzIHJlLXRyYW5zbWl0dGVkLCBidXQgcmF0aGVyIGFuCisJICogYWNrIGlzIGdlbmVyYXRlZCBhbmQgcGVuZGluZyBjaGFuZ2VzIGFyZSBzcGxhY2VkIGludG8gaXRzIG9wdGlvbnMuCisJICovCisJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gTlVMTCkgeworCQlkY2NwX3ByX2RlYnVnKCJmZWF0IG5lZ290aWF0aW9uIHJldHJhbnNtaXQgdGltZW91dCAlcFxuIiwgc2spOworCQlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfT1BFTikKKwkJCWRjY3Bfc2VuZF9hY2soc2spOworCQlnb3RvIGJhY2tvZmY7CisJfQorCiAJLyoKIAkgKiBzay0+c2tfc2VuZF9oZWFkIGhhcyB0byBoYXZlIG9uZSBza2Igd2l0aAogCSAqIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGUgc2V0IHRvIG9uZSBvZiB0aGUgcmV0cmFuc21pdHRhYmxlIERDQ1AKQEAgLTE3Nyw2ICsxODgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKK2JhY2tvZmY6CiAJaWNzay0+aWNza19iYWNrb2ZmKys7CiAJaWNzay0+aWNza19yZXRyYW5zbWl0cysrOwogCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwppbmRleCBjZTRhYWY5Li4yYjI4OWVmIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogLyogCiAgKiBWYWxpZCBwb3J0cyBhcmUgdGhvc2UgZ3JlYXRlciB0aGFuIHplcm8gYW5kIG5vdCBhbHJlYWR5IGluIHVzZS4KICAqLwotc3RhdGljIGludCBjaGVja19wb3J0KHVuc2lnbmVkIHNob3J0IHBvcnQpCitzdGF0aWMgaW50IGNoZWNrX3BvcnQoX19sZTE2IHBvcnQpCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwpAQCAtNjYxLDcgKzY2MSw3IEBACiAJfQogfQogCi1jaGFyICpkbl9hZGRyMmFzYyhkbl9hZGRyZXNzIGFkZHIsIGNoYXIgKmJ1ZikKK2NoYXIgKmRuX2FkZHIyYXNjKF9fdTE2IGFkZHIsIGNoYXIgKmJ1ZikKIHsKIAl1bnNpZ25lZCBzaG9ydCBub2RlLCBhcmVhOwogCkBAIC04MDEsNyArODAxLDcgQEAKIAkvKiBFbmQgb2YgY29tcGF0aWJpbGl0eSBzdHVmZiAqLwogCiAJc2NwLT5hZGRyLnNkbl9hZGQuYV9sZW4gPSBkbl9odG9ucygyKTsKLQlydiA9IGRuX2Rldl9iaW5kX2RlZmF1bHQoKGRuX2FkZHJlc3MgKilzY3AtPmFkZHIuc2RuX2FkZC5hX2FkZHIpOworCXJ2ID0gZG5fZGV2X2JpbmRfZGVmYXVsdCgoX19sZTE2ICopc2NwLT5hZGRyLnNkbl9hZGQuYV9hZGRyKTsKIAlpZiAocnYgPT0gMCkgewogCQlydiA9IGRuX2hhc2hfc29jayhzayk7CiAJCWlmIChydikKQEAgLTEwMjEsNyArMTAyMSw3IEBACiAgICAgICAgIG9wdC0+b3B0X29wdGwgICA9ICpwdHIrKzsKICAgICAgICAgb3B0LT5vcHRfc3RhdHVzID0gMDsKICAgICAgICAgbWVtY3B5KG9wdC0+b3B0X2RhdGEsIHB0ciwgb3B0LT5vcHRfb3B0bCk7Ci0gICAgICAgIHNrYl9wdWxsKHNrYiwgb3B0LT5vcHRfb3B0bCArIDEpOworICAgICAgICBza2JfcHVsbChza2IsIGRuX250b2hzKG9wdC0+b3B0X29wdGwpICsgMSk7CiAKIH0KIApAQCAtMTEyMSw4ICsxMTIxLDggQEAKIAogCXNrYl9wdWxsKHNrYiwgZG5fdXNlcm5hbWUyc29ja2FkZHIoc2tiLT5kYXRhLCBza2ItPmxlbiwgJihETl9TSyhuZXdzayktPmFkZHIpLCAmdHlwZSkpOwogCXNrYl9wdWxsKHNrYiwgZG5fdXNlcm5hbWUyc29ja2FkZHIoc2tiLT5kYXRhLCBza2ItPmxlbiwgJihETl9TSyhuZXdzayktPnBlZXIpLCAmdHlwZSkpOwotCSooZG5fYWRkcmVzcyAqKShETl9TSyhuZXdzayktPnBlZXIuc2RuX2FkZC5hX2FkZHIpID0gY2ItPnNyYzsKLQkqKGRuX2FkZHJlc3MgKikoRE5fU0sobmV3c2spLT5hZGRyLnNkbl9hZGQuYV9hZGRyKSA9IGNiLT5kc3Q7CisJKihfX2xlMTYgKikoRE5fU0sobmV3c2spLT5wZWVyLnNkbl9hZGQuYV9hZGRyKSA9IGNiLT5zcmM7CisJKihfX2xlMTYgKikoRE5fU0sobmV3c2spLT5hZGRyLnNkbl9hZGQuYV9hZGRyKSA9IGNiLT5kc3Q7CiAKIAltZW51dmVyID0gKnNrYi0+ZGF0YTsKIAlza2JfcHVsbChza2IsIDEpOwpAQCAtMTM2NSw3ICsxMzY1LDcgQEAKIAkJCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBvcHRkYXRhX2RuKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJaWYgKHUub3B0Lm9wdF9vcHRsID4gMTYpCisJCQlpZiAoZG5fbnRvaHModS5vcHQub3B0X29wdGwpID4gMTYpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJCW1lbWNweSgmc2NwLT5jb25uZGF0YV9vdXQsICZ1Lm9wdCwgb3B0bGVuKTsKQEAgLTEzNzgsNyArMTM3OCw3IEBACiAJCQlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3Qgb3B0ZGF0YV9kbikpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCWlmICh1Lm9wdC5vcHRfb3B0bCA+IDE2KQorCQkJaWYgKGRuX250b2hzKHUub3B0Lm9wdF9vcHRsKSA+IDE2KQogCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCQltZW1jcHkoJnNjcC0+ZGlzY2RhdGFfb3V0LCAmdS5vcHQsIG9wdGxlbik7CkBAIC0xNjkzLDcgKzE2OTMsNyBAQAogCWlmIChydikKIAkJZ290byBvdXQ7CiAKLQlpZiAoZmxhZ3MgJiB+KE1TR19QRUVLfE1TR19PT0J8TVNHX1dBSVRBTEx8TVNHX0RPTlRXQUlUfE1TR19OT1NJR05BTCkpIHsKKwlpZiAoZmxhZ3MgJiB+KE1TR19DTVNHX0NPTVBBVHxNU0dfUEVFS3xNU0dfT09CfE1TR19XQUlUQUxMfE1TR19ET05UV0FJVHxNU0dfTk9TSUdOQUwpKSB7CiAJCXJ2ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZGV2LmMgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCmluZGV4IGVmYmVhZDguLmNjN2I5ZDkgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZGV2LmMKKysrIGIvbmV0L2RlY25ldC9kbl9kZXYuYwpAQCAtNjQsNyArNjQsNyBAQAogLyoKICAqIGRlY25ldF9hZGRyZXNzIGlzIGtlcHQgaW4gbmV0d29yayBvcmRlci4KICAqLwotZG5fYWRkcmVzcyBkZWNuZXRfYWRkcmVzcyA9IDA7CitfX2xlMTYgZGVjbmV0X2FkZHJlc3MgPSAwOwogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhkbmRldl9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZGVjbmV0X2RlZmF1bHRfZGV2aWNlOwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJKmlmYXAgPSBpZmExLT5pZmFfbmV4dDsKIAogCWlmIChkbl9kYi0+ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewotCQlpZiAoaWZhMS0+aWZhX2xvY2FsICE9IGRuX2h0b25zKGRuX2V0aDJkbihkZXYtPmRldl9hZGRyKSkpIHsKKwkJaWYgKGlmYTEtPmlmYV9sb2NhbCAhPSBkbl9ldGgyZG4oZGV2LT5kZXZfYWRkcikpIHsKIAkJCWRuX2RuMmV0aChtYWNfYWRkciwgaWZhMS0+aWZhX2xvY2FsKTsKIAkJCWRldl9tY19kZWxldGUoZGV2LCBtYWNfYWRkciwgRVRIX0FMRU4sIDApOwogCQl9CkBAIC00NzAsNyArNDcwLDcgQEAKIAl9CiAKIAlpZiAoZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewotCQlpZiAoaWZhLT5pZmFfbG9jYWwgIT0gZG5faHRvbnMoZG5fZXRoMmRuKGRldi0+ZGV2X2FkZHIpKSkgeworCQlpZiAoaWZhLT5pZmFfbG9jYWwgIT0gZG5fZXRoMmRuKGRldi0+ZGV2X2FkZHIpKSB7CiAJCQlkbl9kbjJldGgobWFjX2FkZHIsIGlmYS0+aWZhX2xvY2FsKTsKIAkJCWRldl9tY19hZGQoZGV2LCBtYWNfYWRkciwgRVRIX0FMRU4sIDApOwogCQkJZGV2X21jX3VwbG9hZChkZXYpOwpAQCAtNTYxLDcgKzU2MSw3IEBACiAKIAlzd2l0Y2goY21kKSB7CiAJCWNhc2UgU0lPQ0dJRkFERFI6Ci0JCQkqKChkbl9hZGRyZXNzICopc2RuLT5zZG5fbm9kZWFkZHIpID0gaWZhLT5pZmFfbG9jYWw7CisJCQkqKChfX2xlMTYgKilzZG4tPnNkbl9ub2RlYWRkcikgPSBpZmEtPmlmYV9sb2NhbDsKIAkJCWdvdG8gcmFyb2s7CiAKIAkJY2FzZSBTSU9DU0lGQUREUjoKQEAgLTgwNCw3ICs4MDQsNyBAQAogCXJldHVybiBza2ItPmxlbjsKIH0KIAotc3RhdGljIGludCBkbl9kZXZfZ2V0X2ZpcnN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGRuX2FkZHJlc3MgKmFkZHIpCitzdGF0aWMgaW50IGRuX2Rldl9nZXRfZmlyc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19sZTE2ICphZGRyKQogewogCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gKHN0cnVjdCBkbl9kZXYgKilkZXYtPmRuX3B0cjsKIAlzdHJ1Y3QgZG5faWZhZGRyICppZmE7CkBAIC04MzAsNyArODMwLDcgQEAKICAqIGEgc2Vuc2libGUgZGVmYXVsdC4gRXZlbnR1YWxseSB0aGUgcm91dGluZyBjb2RlIHdpbGwgdGFrZSBjYXJlIG9mIGFsbCB0aGUKICAqIG5hc3RpZXMgZm9yIHVzIEkgaG9wZS4KICAqLwotaW50IGRuX2Rldl9iaW5kX2RlZmF1bHQoZG5fYWRkcmVzcyAqYWRkcikKK2ludCBkbl9kZXZfYmluZF9kZWZhdWx0KF9fbGUxNiAqYWRkcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBydjsKQEAgLTg1Myw3ICs4NTMsNyBAQAogewogICAgICAgICBzdHJ1Y3QgZW5kbm9kZV9oZWxsb19tZXNzYWdlICptc2c7CiAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbnQgKnBrdGxlbjsKKyAgICAgICAgX19sZTE2ICpwa3RsZW47CiAJc3RydWN0IGRuX2RldiAqZG5fZGIgPSAoc3RydWN0IGRuX2RldiAqKWRldi0+ZG5fcHRyOwogCiAgICAgICAgIGlmICgoc2tiID0gZG5fYWxsb2Nfc2tiKE5VTEwsIHNpemVvZigqbXNnKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCkBAIC04ODIsNyArODgyLDcgQEAKICAgICAgICAgbXNnLT5kYXRhbGVuID0gMHgwMjsKICAgICAgICAgbWVtc2V0KG1zZy0+ZGF0YSwgMHhBQSwgMik7CiAgICAgICAgIAotICAgICAgICBwa3RsZW4gPSAodW5zaWduZWQgc2hvcnQgKilza2JfcHVzaChza2IsMik7CisgICAgICAgIHBrdGxlbiA9IChfX2xlMTYgKilza2JfcHVzaChza2IsMik7CiAgICAgICAgICpwa3RsZW4gPSBkbl9odG9ucyhza2ItPmxlbiAtIDIpOwogCiAJc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7CkBAIC05MjYsNyArOTI2LDcgQEAKIAlzaXplX3Qgc2l6ZTsKIAl1bnNpZ25lZCBjaGFyICpwdHI7CiAJdW5zaWduZWQgY2hhciAqaTEsICppMjsKLQl1bnNpZ25lZCBzaG9ydCAqcGt0bGVuOworCV9fbGUxNiAqcGt0bGVuOwogCWNoYXIgKnNyYzsKIAogCWlmIChtdHUyYmxrc2l6ZShkZXYpIDwgKDI2ICsgNykpCkBAIC05NTUsMTEgKzk1NSwxMSBAQAogCXB0ciArPSBFVEhfQUxFTjsKIAkqcHRyKysgPSBkbl9kYi0+cGFybXMuZm9yd2FyZGluZyA9PSAxID8gCiAJCQlETl9SVF9JTkZPX0wxUlQgOiBETl9SVF9JTkZPX0wyUlQ7Ci0JKigodW5zaWduZWQgc2hvcnQgKilwdHIpID0gZG5faHRvbnMobXR1MmJsa3NpemUoZGV2KSk7CisJKigoX19sZTE2ICopcHRyKSA9IGRuX2h0b25zKG10dTJibGtzaXplKGRldikpOwogCXB0ciArPSAyOwogCSpwdHIrKyA9IGRuX2RiLT5wYXJtcy5wcmlvcml0eTsgLyogUHJpb3JpdHkgKi8gCiAJKnB0cisrID0gMDsgLyogQXJlYTogUmVzZXJ2ZWQgKi8KLQkqKCh1bnNpZ25lZCBzaG9ydCAqKXB0cikgPSBkbl9odG9ucygodW5zaWduZWQgc2hvcnQpZG5fZGItPnBhcm1zLnQzKTsKKwkqKChfX2xlMTYgKilwdHIpID0gZG5faHRvbnMoKHVuc2lnbmVkIHNob3J0KWRuX2RiLT5wYXJtcy50Myk7CiAJcHRyICs9IDI7CiAJKnB0cisrID0gMDsgLyogTVBEOiBSZXNlcnZlZCAqLwogCWkxID0gcHRyKys7CkBAIC05NzQsNyArOTc0LDcgQEAKIAogCXNrYl90cmltKHNrYiwgKDI3ICsgKmkyKSk7CiAKLQlwa3RsZW4gPSAodW5zaWduZWQgc2hvcnQgKilza2JfcHVzaChza2IsIDIpOworCXBrdGxlbiA9IChfX2xlMTYgKilza2JfcHVzaChza2IsIDIpOwogCSpwa3RsZW4gPSBkbl9odG9ucyhza2ItPmxlbiAtIDIpOwogCiAJc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7CkBAIC0xMDE2LDcgKzEwMTYsNyBAQAogCXB0ciA9IHNrYl9wdXQoc2tiLCAyICsgNCArIHRkbGVuKTsKIAogCSpwdHIrKyA9IEROX1JUX1BLVF9IRUxPOwotCSooKGRuX2FkZHJlc3MgKilwdHIpID0gaWZhLT5pZmFfbG9jYWw7CisJKigoX19sZTE2ICopcHRyKSA9IGlmYS0+aWZhX2xvY2FsOwogCXB0ciArPSAyOwogCSpwdHIrKyA9IHRkbGVuOwogCkBAIC0xMTUwLDcgKzExNTAsNyBAQAogdm9pZCBkbl9kZXZfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZG5faWZhZGRyICppZmE7Ci0JZG5fYWRkcmVzcyBhZGRyID0gZGVjbmV0X2FkZHJlc3M7CisJX19sZTE2IGFkZHIgPSBkZWNuZXRfYWRkcmVzczsKIAlpbnQgbWF5YmVfZGVmYXVsdCA9IDA7CiAJc3RydWN0IGRuX2RldiAqZG5fZGIgPSAoc3RydWN0IGRuX2RldiAqKWRldi0+ZG5fcHRyOwogCkBAIC0xMTczLDcgKzExNzMsNyBAQAogCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7CiAJCWlmIChtZW1jbXAoZGV2LT5kZXZfYWRkciwgZG5faGlvcmQsIDQpICE9IDApCiAJCQlyZXR1cm47Ci0JCWFkZHIgPSBkbl9odG9ucyhkbl9ldGgyZG4oZGV2LT5kZXZfYWRkcikpOworCQlhZGRyID0gZG5fZXRoMmRuKGRldi0+ZGV2X2FkZHIpOwogCQltYXliZV9kZWZhdWx0ID0gMTsKIAl9CiAKQEAgLTEzODUsOCArMTM4NSw4IEBACiAJCQkJbXR1MmJsa3NpemUoZGV2KSwKIAkJCQlkbl9kYi0+cGFybXMucHJpb3JpdHksCiAJCQkJZG5fZGItPnBhcm1zLnN0YXRlLCBkbl9kYi0+cGFybXMubmFtZSwKLQkJCQlkbl9kYi0+cm91dGVyID8gZG5fYWRkcjJhc2MoZG5fbnRvaHMoKihkbl9hZGRyZXNzICopZG5fZGItPnJvdXRlci0+cHJpbWFyeV9rZXkpLCByb3V0ZXJfYnVmKSA6ICIiLAotCQkJCWRuX2RiLT5wZWVyID8gZG5fYWRkcjJhc2MoZG5fbnRvaHMoKihkbl9hZGRyZXNzICopZG5fZGItPnBlZXItPnByaW1hcnlfa2V5KSwgcGVlcl9idWYpIDogIiIpOworCQkJCWRuX2RiLT5yb3V0ZXIgPyBkbl9hZGRyMmFzYyhkbl9udG9ocygqKF9fbGUxNiAqKWRuX2RiLT5yb3V0ZXItPnByaW1hcnlfa2V5KSwgcm91dGVyX2J1ZikgOiAiIiwKKwkJCQlkbl9kYi0+cGVlciA/IGRuX2FkZHIyYXNjKGRuX250b2hzKCooX19sZTE2ICopZG5fZGItPnBlZXItPnByaW1hcnlfa2V5KSwgcGVlcl9idWYpIDogIiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZmliLmMgYi9uZXQvZGVjbmV0L2RuX2ZpYi5jCmluZGV4IDk5YmMwNjEuLmJkNGNlODYgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZmliLmMKKysrIGIvbmV0L2RlY25ldC9kbl9maWIuYwpAQCAtMTQzLDExICsxNDMsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdTE2IGRuX2ZpYl9nZXRfYXR0cjE2KHN0cnVjdCBydGF0dHIgKmF0dHIsIGludCBhdHRybGVuLCBpbnQgdHlwZSkKK19fbGUxNiBkbl9maWJfZ2V0X2F0dHIxNihzdHJ1Y3QgcnRhdHRyICphdHRyLCBpbnQgYXR0cmxlbiwgaW50IHR5cGUpCiB7CiAJd2hpbGUoUlRBX09LKGF0dHIsYXR0cmxlbikpIHsKIAkJaWYgKGF0dHItPnJ0YV90eXBlID09IHR5cGUpCi0JCQlyZXR1cm4gKih1MTYqKVJUQV9EQVRBKGF0dHIpOworCQkJcmV0dXJuICooX19sZTE2KilSVEFfREFUQShhdHRyKTsKIAkJYXR0ciA9IFJUQV9ORVhUKGF0dHIsIGF0dHJsZW4pOwogCX0KIApAQCAtNTY1LDcgKzU2NSw3IEBACiAJcmV0dXJuIHNrYi0+bGVuOwogfQogCi1zdGF0aWMgdm9pZCBmaWJfbWFnaWMoaW50IGNtZCwgaW50IHR5cGUsIF9fdTE2IGRzdCwgaW50IGRzdF9sZW4sIHN0cnVjdCBkbl9pZmFkZHIgKmlmYSkKK3N0YXRpYyB2b2lkIGZpYl9tYWdpYyhpbnQgY21kLCBpbnQgdHlwZSwgX19sZTE2IGRzdCwgaW50IGRzdF9sZW4sIHN0cnVjdCBkbl9pZmFkZHIgKmlmYSkKIHsKIAlzdHJ1Y3QgZG5fZmliX3RhYmxlICp0YjsKIAlzdHJ1Y3QgewpAQCAtNjg0LDcgKzY4NCw3IEBACiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi1pbnQgZG5fZmliX3N5bmNfZG93bihkbl9hZGRyZXNzIGxvY2FsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2UpCitpbnQgZG5fZmliX3N5bmNfZG93bihfX2xlMTYgbG9jYWwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmb3JjZSkKIHsKICAgICAgICAgaW50IHJldCA9IDA7CiAgICAgICAgIGludCBzY29wZSA9IFJUX1NDT1BFX05PV0hFUkU7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX25laWdoLmMgYi9uZXQvZGVjbmV0L2RuX25laWdoLmMKaW5kZXggMzNhYjI1Ni4uN2M4NjkyYyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9uZWlnaC5jCisrKyBiL25ldC9kZWNuZXQvZG5fbmVpZ2guYwpAQCAtOTUsNyArOTUsNyBAQAogc3RydWN0IG5laWdoX3RhYmxlIGRuX25laWdoX3RhYmxlID0gewogCS5mYW1pbHkgPQkJCVBGX0RFQ25ldCwKIAkuZW50cnlfc2l6ZSA9CQkJc2l6ZW9mKHN0cnVjdCBkbl9uZWlnaCksCi0JLmtleV9sZW4gPQkJCXNpemVvZihkbl9hZGRyZXNzKSwKKwkua2V5X2xlbiA9CQkJc2l6ZW9mKF9fbGUxNiksCiAJLmhhc2ggPQkJCQlkbl9uZWlnaF9oYXNoLAogCS5jb25zdHJ1Y3RvciA9CQkJZG5fbmVpZ2hfY29uc3RydWN0LAogCS5pZCA9CQkJCSJkbl9uZWlnaF9jYWNoZSIsCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogc3RhdGljIHUzMiBkbl9uZWlnaF9oYXNoKGNvbnN0IHZvaWQgKnBrZXksIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGpoYXNoXzJ3b3JkcygqKGRuX2FkZHJlc3MgKilwa2V5LCAwLCBkbl9uZWlnaF90YWJsZS5oYXNoX3JuZCk7CisJcmV0dXJuIGpoYXNoXzJ3b3JkcygqKF9fdTE2ICopcGtleSwgMCwgZG5fbmVpZ2hfdGFibGUuaGFzaF9ybmQpOwogfQogCiBzdGF0aWMgaW50IGRuX25laWdoX2NvbnN0cnVjdChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCkKQEAgLTI0OSwxNCArMjQ5LDE0IEBACiAJZGF0YSA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBkbl9sb25nX3BhY2tldCkgKyAzKTsKIAlscCA9IChzdHJ1Y3QgZG5fbG9uZ19wYWNrZXQgKikoZGF0YSszKTsKIAotCSooKHVuc2lnbmVkIHNob3J0ICopZGF0YSkgPSBkbl9odG9ucyhza2ItPmxlbiAtIDIpOworCSooKF9fbGUxNiAqKWRhdGEpID0gZG5faHRvbnMoc2tiLT5sZW4gLSAyKTsKIAkqKGRhdGEgKyAyKSA9IDEgfCBETl9SVF9GX1BGOyAvKiBQYWRkaW5nICovCiAKIAlscC0+bXNnZmxnICAgPSBETl9SVF9QS1RfTE9OR3woY2ItPnJ0X2ZsYWdzJihETl9SVF9GX0lFfEROX1JUX0ZfUlFSfEROX1JUX0ZfUlRTKSk7CiAJbHAtPmRfYXJlYSAgID0gbHAtPmRfc3ViYXJlYSA9IDA7Ci0JZG5fZG4yZXRoKGxwLT5kX2lkLCBkbl9udG9ocyhjYi0+ZHN0KSk7CisJZG5fZG4yZXRoKGxwLT5kX2lkLCBjYi0+ZHN0KTsKIAlscC0+c19hcmVhICAgPSBscC0+c19zdWJhcmVhID0gMDsKLQlkbl9kbjJldGgobHAtPnNfaWQsIGRuX250b2hzKGNiLT5zcmMpKTsKKwlkbl9kbjJldGgobHAtPnNfaWQsIGNiLT5zcmMpOwogCWxwLT5ubDIgICAgICA9IDA7CiAJbHAtPnZpc2l0X2N0ID0gY2ItPmhvcHMgJiAweDNmOwogCWxwLT5zX2NsYXNzICA9IDA7CkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAgICAgfQogCiAJZGF0YSA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBkbl9zaG9ydF9wYWNrZXQpICsgMik7Ci0JKigodW5zaWduZWQgc2hvcnQgKilkYXRhKSA9IGRuX2h0b25zKHNrYi0+bGVuIC0gMik7CisJKigoX19sZTE2ICopZGF0YSkgPSBkbl9odG9ucyhza2ItPmxlbiAtIDIpOwogCXNwID0gKHN0cnVjdCBkbl9zaG9ydF9wYWNrZXQgKikoZGF0YSsyKTsKIAogCXNwLT5tc2dmbGcgICAgID0gRE5fUlRfUEtUX1NIT1JUfChjYi0+cnRfZmxhZ3MmKEROX1JUX0ZfUlFSfEROX1JUX0ZfUlRTKSk7CkBAIC0zMzUsNyArMzM1LDcgQEAKIAl9CiAKIAlkYXRhID0gc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGRuX3Nob3J0X3BhY2tldCkgKyAyKTsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKWRhdGEpID0gZG5faHRvbnMoc2tiLT5sZW4gLSAyKTsKKwkqKChfX2xlMTYgKilkYXRhKSA9IGRuX2h0b25zKHNrYi0+bGVuIC0gMik7CiAJc3AgPSAoc3RydWN0IGRuX3Nob3J0X3BhY2tldCAqKShkYXRhICsgMik7CiAKIAlzcC0+bXNnZmxnICAgPSBETl9SVF9QS1RfU0hPUlR8KGNiLT5ydF9mbGFncyYoRE5fUlRfRl9SUVJ8RE5fUlRfRl9SVFMpKTsKQEAgLTM3Myw5ICszNzMsOSBAQAogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCXN0cnVjdCBkbl9uZWlnaCAqZG47CiAJc3RydWN0IGRuX2RldiAqZG5fZGI7Ci0JZG5fYWRkcmVzcyBzcmM7CisJX19sZTE2IHNyYzsKIAotCXNyYyA9IGRuX2h0b25zKGRuX2V0aDJkbihtc2ctPmlkKSk7CisJc3JjID0gZG5fZXRoMmRuKG1zZy0+aWQpOwogCiAJbmVpZ2ggPSBfX25laWdoX2xvb2t1cCgmZG5fbmVpZ2hfdGFibGUsICZzcmMsIHNrYi0+ZGV2LCAxKTsKIApAQCAtNDA5LDcgKzQwOSw3IEBACiAJCX0KIAogCQkvKiBPbmx5IHVzZSByb3V0ZXJzIGluIG91ciBhcmVhICovCi0JCWlmICgoZG5fbnRvaHMoc3JjKT4+MTApID09IGRuX250b2hzKChkZWNuZXRfYWRkcmVzcyk+PjEwKSkgeworCQlpZiAoKGRuX250b2hzKHNyYyk+PjEwKSA9PSAoZG5fbnRvaHMoKGRlY25ldF9hZGRyZXNzKSk+PjEwKSkgewogCQkJaWYgKCFkbl9kYi0+cm91dGVyKSB7CiAJCQkJZG5fZGItPnJvdXRlciA9IG5laWdoX2Nsb25lKG5laWdoKTsKIAkJCX0gZWxzZSB7CkBAIC00MzMsOSArNDMzLDkgQEAKIAlzdHJ1Y3QgZW5kbm9kZV9oZWxsb19tZXNzYWdlICptc2cgPSAoc3RydWN0IGVuZG5vZGVfaGVsbG9fbWVzc2FnZSAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKIAlzdHJ1Y3QgZG5fbmVpZ2ggKmRuOwotCWRuX2FkZHJlc3Mgc3JjOworCV9fbGUxNiBzcmM7CiAKLQlzcmMgPSBkbl9odG9ucyhkbl9ldGgyZG4obXNnLT5pZCkpOworCXNyYyA9IGRuX2V0aDJkbihtc2ctPmlkKTsKIAogCW5laWdoID0gX19uZWlnaF9sb29rdXAoJmRuX25laWdoX3RhYmxlLCAmc3JjLCBza2ItPmRldiwgMSk7CiAKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fbnNwX2luLmMgYi9uZXQvZGVjbmV0L2RuX25zcF9pbi5jCmluZGV4IDQ0YmRhODUuLjU0NzUyM2IgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbnNwX2luLmMKKysrIGIvbmV0L2RlY25ldC9kbl9uc3BfaW4uYwpAQCAtODUsNyArODUsNyBAQAogCWlmIChkZWNuZXRfbG9nX21hcnRpYW5zICYmIG5ldF9yYXRlbGltaXQoKSkgewogCQljaGFyICpkZXZuYW1lID0gc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICI/Pz8iOwogCQlzdHJ1Y3QgZG5fc2tiX2NiICpjYiA9IEROX1NLQl9DQihza2IpOwotCQlwcmludGsoS0VSTl9JTkZPICJERUNuZXQ6IE1hcnRpYW4gcGFja2V0ICglcykgZGV2PSVzIHNyYz0weCUwNGh4IGRzdD0weCUwNGh4IHNyY3BvcnQ9MHglMDRoeCBkc3Rwb3J0PTB4JTA0aHhcbiIsIG1zZywgZGV2bmFtZSwgY2ItPnNyYywgY2ItPmRzdCwgY2ItPnNyY19wb3J0LCBjYi0+ZHN0X3BvcnQpOworCQlwcmludGsoS0VSTl9JTkZPICJERUNuZXQ6IE1hcnRpYW4gcGFja2V0ICglcykgZGV2PSVzIHNyYz0weCUwNGh4IGRzdD0weCUwNGh4IHNyY3BvcnQ9MHglMDRoeCBkc3Rwb3J0PTB4JTA0aHhcbiIsIG1zZywgZGV2bmFtZSwgZG5fbnRvaHMoY2ItPnNyYyksIGRuX250b2hzKGNiLT5kc3QpLCBkbl9udG9ocyhjYi0+c3JjX3BvcnQpLCBkbl9udG9ocyhjYi0+ZHN0X3BvcnQpKTsKIAl9CiB9CiAKQEAgLTEyOCw3ICsxMjgsNyBAQAogICovCiBzdGF0aWMgaW50IGRuX3Byb2Nlc3NfYWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG90aCkKIHsKLQl1bnNpZ25lZCBzaG9ydCAqcHRyID0gKHVuc2lnbmVkIHNob3J0ICopc2tiLT5kYXRhOworCV9fbGUxNiAqcHRyID0gKF9fbGUxNiAqKXNrYi0+ZGF0YTsKIAlpbnQgbGVuID0gMDsKIAl1bnNpZ25lZCBzaG9ydCBhY2s7CiAKQEAgLTM0Niw3ICszNDYsNyBAQAogCXB0ciA9IHNrYi0+ZGF0YTsKIAljYi0+c2VydmljZXMgPSAqcHRyKys7CiAJY2ItPmluZm8gPSAqcHRyKys7Ci0JY2ItPnNlZ3NpemUgPSBkbl9udG9ocygqKF9fdTE2ICopcHRyKTsKKwljYi0+c2Vnc2l6ZSA9IGRuX250b2hzKCooX19sZTE2ICopcHRyKTsKIAogCWlmICgoc2NwLT5zdGF0ZSA9PSBETl9DSSkgfHwgKHNjcC0+c3RhdGUgPT0gRE5fQ0QpKSB7CiAJCXNjcC0+cGVyc2lzdCA9IDA7CkBAIC0zNjMsNyArMzYzLDcgQEAKIAkJaWYgKHNrYi0+bGVuID4gMCkgewogCQkJdW5zaWduZWQgY2hhciBkbGVuID0gKnNrYi0+ZGF0YTsKIAkJCWlmICgoZGxlbiA8PSAxNikgJiYgKGRsZW4gPD0gc2tiLT5sZW4pKSB7Ci0JCQkJc2NwLT5jb25uZGF0YV9pbi5vcHRfb3B0bCA9IGRsZW47CisJCQkJc2NwLT5jb25uZGF0YV9pbi5vcHRfb3B0bCA9IGRuX2h0b25zKChfX3UxNilkbGVuKTsKIAkJCQltZW1jcHkoc2NwLT5jb25uZGF0YV9pbi5vcHRfZGF0YSwgc2tiLT5kYXRhICsgMSwgZGxlbik7CiAJCQl9CiAJCX0KQEAgLTM5NywxNyArMzk3LDE3IEBACiAJaWYgKHNrYi0+bGVuIDwgMikKIAkJZ290byBvdXQ7CiAKLQlyZWFzb24gPSBkbl9udG9ocygqKF9fdTE2ICopc2tiLT5kYXRhKTsKKwlyZWFzb24gPSBkbl9udG9ocygqKF9fbGUxNiAqKXNrYi0+ZGF0YSk7CiAJc2tiX3B1bGwoc2tiLCAyKTsKIAotCXNjcC0+ZGlzY2RhdGFfaW4ub3B0X3N0YXR1cyA9IHJlYXNvbjsKKwlzY3AtPmRpc2NkYXRhX2luLm9wdF9zdGF0dXMgPSBkbl9odG9ucyhyZWFzb24pOwogCXNjcC0+ZGlzY2RhdGFfaW4ub3B0X29wdGwgICA9IDA7CiAJbWVtc2V0KHNjcC0+ZGlzY2RhdGFfaW4ub3B0X2RhdGEsIDAsIDE2KTsKIAogCWlmIChza2ItPmxlbiA+IDApIHsKIAkJdW5zaWduZWQgY2hhciBkbGVuID0gKnNrYi0+ZGF0YTsKIAkJaWYgKChkbGVuIDw9IDE2KSAmJiAoZGxlbiA8PSBza2ItPmxlbikpIHsKLQkJCXNjcC0+ZGlzY2RhdGFfaW4ub3B0X29wdGwgPSBkbGVuOworCQkJc2NwLT5kaXNjZGF0YV9pbi5vcHRfb3B0bCA9IGRuX2h0b25zKChfX3UxNilkbGVuKTsKIAkJCW1lbWNweShzY3AtPmRpc2NkYXRhX2luLm9wdF9kYXRhLCBza2ItPmRhdGEgKyAxLCBkbGVuKTsKIAkJfQogCX0KQEAgLTQ2NCw3ICs0NjQsNyBAQAogCWlmIChza2ItPmxlbiAhPSAyKQogCQlnb3RvIG91dDsKIAotCXJlYXNvbiA9IGRuX250b2hzKCooX191MTYgKilza2ItPmRhdGEpOworCXJlYXNvbiA9IGRuX250b2hzKCooX19sZTE2ICopc2tiLT5kYXRhKTsKIAogCXNrLT5za19zdGF0ZSA9IFRDUF9DTE9TRTsKIApAQCAtNTEzLDcgKzUxMyw3IEBACiAJaWYgKHNrYi0+bGVuICE9IDQpCiAJCWdvdG8gb3V0OwogCi0Jc2VnbnVtID0gZG5fbnRvaHMoKihfX3UxNiAqKXB0cik7CisJc2VnbnVtID0gZG5fbnRvaHMoKihfX2xlMTYgKilwdHIpOwogCXB0ciArPSAyOwogCWxzZmxhZ3MgPSAqKHVuc2lnbmVkIGNoYXIgKilwdHIrKzsKIAlmY3ZhbCA9ICpwdHI7CkBAIC02MjEsNyArNjIxLDcgQEAKIAlpZiAoc2tiLT5sZW4gPCAyKQogCQlnb3RvIG91dDsKIAotCWNiLT5zZWdudW0gPSBzZWdudW0gPSBkbl9udG9ocygqKF9fdTE2ICopc2tiLT5kYXRhKTsKKwljYi0+c2VnbnVtID0gc2VnbnVtID0gZG5fbnRvaHMoKihfX2xlMTYgKilza2ItPmRhdGEpOwogCXNrYl9wdWxsKHNrYiwgMik7CiAKIAlpZiAoc2VxX25leHQoc2NwLT5udW1vdGhfcmN2LCBzZWdudW0pKSB7CkBAIC02NDksNyArNjQ5LDcgQEAKIAlpZiAoc2tiLT5sZW4gPCAyKQogCQlnb3RvIG91dDsKIAotCWNiLT5zZWdudW0gPSBzZWdudW0gPSBkbl9udG9ocygqKF9fdTE2ICopc2tiLT5kYXRhKTsKKwljYi0+c2VnbnVtID0gc2VnbnVtID0gZG5fbnRvaHMoKihfX2xlMTYgKilza2ItPmRhdGEpOwogCXNrYl9wdWxsKHNrYiwgMik7CiAKIAlpZiAoc2VxX25leHQoc2NwLT5udW1kYXRfcmN2LCBzZWdudW0pKSB7CkBAIC03NjAsNyArNzYwLDcgQEAKIAkvKgogCSAqIEdyYWIgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuCiAJICovCi0JY2ItPmRzdF9wb3J0ID0gKih1bnNpZ25lZCBzaG9ydCAqKXB0cjsKKwljYi0+ZHN0X3BvcnQgPSAqKF9fbGUxNiAqKXB0cjsKIAljYi0+c3JjX3BvcnQgPSAwOwogCXB0ciArPSAyOwogCkBAIC03NjgsNyArNzY4LDcgQEAKIAkgKiBJZiBub3QgYSBjb25uYWNrLCBncmFiIHRoZSBzb3VyY2UgYWRkcmVzcyB0b28uCiAJICovCiAJaWYgKHBza2JfbWF5X3B1bGwoc2tiLCA1KSkgewotCQljYi0+c3JjX3BvcnQgPSAqKHVuc2lnbmVkIHNob3J0ICopcHRyOworCQljYi0+c3JjX3BvcnQgPSAqKF9fbGUxNiAqKXB0cjsKIAkJcHRyICs9IDI7CiAJCXNrYl9wdWxsKHNrYiwgNSk7CiAJfQpAQCAtNzc4LDcgKzc3OCw3IEBACiAJICogU3dhcCBzcmMgJiBkc3QgYW5kIGxvb2sgdXAgaW4gdGhlIG5vcm1hbCB3YXkuCiAJICovCiAJaWYgKHVubGlrZWx5KGNiLT5ydF9mbGFncyAmIEROX1JUX0ZfUlRTKSkgewotCQl1bnNpZ25lZCBzaG9ydCB0bXAgPSBjYi0+ZHN0X3BvcnQ7CisJCV9fbGUxNiB0bXAgPSBjYi0+ZHN0X3BvcnQ7CiAJCWNiLT5kc3RfcG9ydCA9IGNiLT5zcmNfcG9ydDsKIAkJY2ItPnNyY19wb3J0ID0gdG1wOwogCQl0bXAgPSBjYi0+ZHN0OwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9uc3Bfb3V0LmMgYi9uZXQvZGVjbmV0L2RuX25zcF9vdXQuYwppbmRleCBjOTZjNzY3Li5jMmUyMWNkIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX25zcF9vdXQuYworKysgYi9uZXQvZGVjbmV0L2RuX25zcF9vdXQuYwpAQCAtMjg3LDI2ICsyODcsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpkbl9ta19jb21tb25faGVhZGVyKHN0cnVjdCBkbl9zY3AgKnNjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgY2hhciBtc2dmbGFnLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX2xlMTYgKmRuX21rX2NvbW1vbl9oZWFkZXIoc3RydWN0IGRuX3NjcCAqc2NwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyIG1zZ2ZsYWcsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgY2hhciAqcHRyID0gc2tiX3B1c2goc2tiLCBsZW4pOwogCiAJQlVHX09OKGxlbiA8IDUpOwogCiAJKnB0cisrID0gbXNnZmxhZzsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKXB0cikgPSBzY3AtPmFkZHJyZW07CisJKigoX19sZTE2ICopcHRyKSA9IHNjcC0+YWRkcnJlbTsKIAlwdHIgKz0gMjsKLQkqKCh1bnNpZ25lZCBzaG9ydCAqKXB0cikgPSBzY3AtPmFkZHJsb2M7CisJKigoX19sZTE2ICopcHRyKSA9IHNjcC0+YWRkcmxvYzsKIAlwdHIgKz0gMjsKLQlyZXR1cm4gcHRyOworCXJldHVybiAoX19sZTE2IF9fZm9yY2UgKilwdHI7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCAqZG5fbWtfYWNrX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgbXNnZmxhZywgaW50IGhsZW4sIGludCBvdGhlcikKK3N0YXRpYyBfX2xlMTYgKmRuX21rX2Fja19oZWFkZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBjaGFyIG1zZ2ZsYWcsIGludCBobGVuLCBpbnQgb3RoZXIpCiB7CiAJc3RydWN0IGRuX3NjcCAqc2NwID0gRE5fU0soc2spOwogCXVuc2lnbmVkIHNob3J0IGFja251bSA9IHNjcC0+bnVtZGF0X3JjdiAmIDB4MEZGRjsKIAl1bnNpZ25lZCBzaG9ydCBhY2tjcnMgPSBzY3AtPm51bW90aF9yY3YgJiAweDBGRkY7Ci0JdW5zaWduZWQgc2hvcnQgKnB0cjsKKwlfX2xlMTYgKnB0cjsKIAogCUJVR19PTihobGVuIDwgOSk7CiAKQEAgLTMyNSw3ICszMjUsNyBAQAogCS8qIFNldCAiY3Jvc3Mgc3ViY2hhbm5lbCIgYml0IGluIGFja2NycyAqLwogCWFja2NycyB8PSAweDIwMDA7CiAKLQlwdHIgPSAodW5zaWduZWQgc2hvcnQgKilkbl9ta19jb21tb25faGVhZGVyKHNjcCwgc2tiLCBtc2dmbGFnLCBobGVuKTsKKwlwdHIgPSAoX19sZTE2ICopZG5fbWtfY29tbW9uX2hlYWRlcihzY3AsIHNrYiwgbXNnZmxhZywgaGxlbik7CiAKIAkqcHRyKysgPSBkbl9odG9ucyhhY2tudW0pOwogCSpwdHIrKyA9IGRuX2h0b25zKGFja2Nycyk7CkBAIC0zMzMsMTEgKzMzMywxMSBAQAogCXJldHVybiBwdHI7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCAqZG5fbnNwX21rX2RhdGFfaGVhZGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG90aCkKK3N0YXRpYyBfX2xlMTYgKmRuX25zcF9ta19kYXRhX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBvdGgpCiB7CiAJc3RydWN0IGRuX3NjcCAqc2NwID0gRE5fU0soc2spOwogCXN0cnVjdCBkbl9za2JfY2IgKmNiID0gRE5fU0tCX0NCKHNrYik7Ci0JdW5zaWduZWQgc2hvcnQgKnB0ciA9IGRuX21rX2Fja19oZWFkZXIoc2ssIHNrYiwgY2ItPm5zcF9mbGFncywgMTEsIG90aCk7CisJX19sZTE2ICpwdHIgPSBkbl9ta19hY2tfaGVhZGVyKHNrLCBza2IsIGNiLT5uc3BfZmxhZ3MsIDExLCBvdGgpOwogCiAJaWYgKHVubGlrZWx5KG90aCkpIHsKIAkJY2ItPnNlZ251bSA9IHNjcC0+bnVtb3RoOwpAQCAtNTI0LDkgKzUyNCw5IEBACiAJc3RydWN0IGRuX3NjcCAqc2NwID0gRE5fU0soc2spOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogICAgICAgICBzdHJ1Y3QgbnNwX2Nvbm5faW5pdF9tc2cgKm1zZzsKLQl1bnNpZ25lZCBjaGFyIGxlbiA9IHNjcC0+Y29ubmRhdGFfb3V0Lm9wdF9vcHRsOworCV9fdTggbGVuID0gKF9fdTgpZG5fbnRvaHMoc2NwLT5jb25uZGF0YV9vdXQub3B0X29wdGwpOwogCi0JaWYgKChza2IgPSBkbl9hbGxvY19za2Ioc2ssIDUwICsgc2NwLT5jb25uZGF0YV9vdXQub3B0X29wdGwsIGdmcCkpID09IE5VTEwpCisJaWYgKChza2IgPSBkbl9hbGxvY19za2Ioc2ssIDUwICsgZG5fbnRvaHMoc2NwLT5jb25uZGF0YV9vdXQub3B0X29wdGwpLCBnZnApKSA9PSBOVUxMKQogCQlyZXR1cm47CiAKICAgICAgICAgbXNnID0gKHN0cnVjdCBuc3BfY29ubl9pbml0X21zZyAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKm1zZykpOwpAQCAtNTUzLDcgKzU1Myw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRuX25zcF9kb19kaXNjKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgY2hhciBtc2dmbGcsIAogCQkJdW5zaWduZWQgc2hvcnQgcmVhc29uLCBnZnBfdCBnZnAsCiAJCQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCi0JCQlpbnQgZGRsLCB1bnNpZ25lZCBjaGFyICpkZCwgX191MTYgcmVtLCBfX3UxNiBsb2MpCisJCQlpbnQgZGRsLCB1bnNpZ25lZCBjaGFyICpkZCwgX19sZTE2IHJlbSwgX19sZTE2IGxvYykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAlpbnQgc2l6ZSA9IDcgKyBkZGwgKyAoKG1zZ2ZsZyA9PSBOU1BfRElTQ0lOSVQpID8gMSA6IDApOwpAQCAtNTYxLDcgKzU2MSw3IEBACiAKIAlpZiAoKGRzdCA9PSBOVUxMKSB8fCAocmVtID09IDApKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiREVDbmV0OiBkbl9uc3BfZG9fZGlzYzogQlVHISBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gU3RldmVXQEFDTS5vcmcgcmVtPSV1IGRzdD0lcFxuIiwgKHVuc2lnbmVkKXJlbSwgZHN0KTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJERUNuZXQ6IGRuX25zcF9kb19kaXNjOiBCVUchIFBsZWFzZSByZXBvcnQgdGhpcyB0byBTdGV2ZVdAQUNNLm9yZyByZW09JXUgZHN0PSVwXG4iLCBkbl9udG9ocyhyZW0pLCBkc3QpOwogCQlyZXR1cm47CiAJfQogCkBAIC01NzAsMTEgKzU3MCwxMSBAQAogCiAJbXNnID0gc2tiX3B1dChza2IsIHNpemUpOwogCSptc2crKyA9IG1zZ2ZsZzsKLQkqKF9fdTE2ICopbXNnID0gcmVtOworCSooX19sZTE2ICopbXNnID0gcmVtOwogCW1zZyArPSAyOwotCSooX191MTYgKiltc2cgPSBsb2M7CisJKihfX2xlMTYgKiltc2cgPSBsb2M7CiAJbXNnICs9IDI7Ci0JKihfX3UxNiAqKW1zZyA9IGRuX2h0b25zKHJlYXNvbik7CisJKihfX2xlMTYgKiltc2cgPSBkbl9odG9ucyhyZWFzb24pOwogCW1zZyArPSAyOwogCWlmIChtc2dmbGcgPT0gTlNQX0RJU0NJTklUKQogCQkqbXNnKysgPSBkZGw7CkBAIC02MDAsMTAgKzYwMCwxMCBAQAogCWludCBkZGwgPSAwOwogCiAJaWYgKG1zZ2ZsZyA9PSBOU1BfRElTQ0lOSVQpCi0JCWRkbCA9IHNjcC0+ZGlzY2RhdGFfb3V0Lm9wdF9vcHRsOworCQlkZGwgPSBkbl9udG9ocyhzY3AtPmRpc2NkYXRhX291dC5vcHRfb3B0bCk7CiAKIAlpZiAocmVhc29uID09IDApCi0JCXJlYXNvbiA9IHNjcC0+ZGlzY2RhdGFfb3V0Lm9wdF9zdGF0dXM7CisJCXJlYXNvbiA9IGRuX250b2hzKHNjcC0+ZGlzY2RhdGFfb3V0Lm9wdF9zdGF0dXMpOwogCiAJZG5fbnNwX2RvX2Rpc2Moc2ssIG1zZ2ZsZywgcmVhc29uLCBnZnAsIHNrLT5za19kc3RfY2FjaGUsIGRkbCwgCiAJCXNjcC0+ZGlzY2RhdGFfb3V0Lm9wdF9kYXRhLCBzY3AtPmFkZHJyZW0sIHNjcC0+YWRkcmxvYyk7CkBAIC03MDgsNyArNzA4LDcgQEAKIAlpZiAoYXV4ID4gMCkKIAltZW1jcHkoc2tiX3B1dChza2IsIGF1eCksIHNjcC0+YWNjZXNzZGF0YS5hY2NfYWNjLCBhdXgpOwogCi0JYXV4ID0gc2NwLT5jb25uZGF0YV9vdXQub3B0X29wdGw7CisJYXV4ID0gKF9fdTgpZG5fbnRvaHMoc2NwLT5jb25uZGF0YV9vdXQub3B0X29wdGwpOwogCSpza2JfcHV0KHNrYiwgMSkgPSBhdXg7CiAJaWYgKGF1eCA+IDApCiAJbWVtY3B5KHNrYl9wdXQoc2tiLGF1eCksIHNjcC0+Y29ubmRhdGFfb3V0Lm9wdF9kYXRhLCBhdXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IDM0MDdmMTkwLi5lMTcyY2Y5IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC0xMzMsOSArMTMzLDkgQEAKIAkuZW50cmllcyA9CQlBVE9NSUNfSU5JVCgwKSwKIH07CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGRuX2hhc2godW5zaWduZWQgc2hvcnQgc3JjLCB1bnNpZ25lZCBzaG9ydCBkc3QpCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBkbl9oYXNoKF9fbGUxNiBzcmMsIF9fbGUxNiBkc3QpCiB7Ci0JdW5zaWduZWQgc2hvcnQgdG1wID0gc3JjIF4gZHN0OworCV9fdTE2IHRtcCA9IChfX3UxNiBfX2ZvcmNlKShzcmMgXiBkc3QpOwogCXRtcCBePSAodG1wID4+IDMpOwogCXRtcCBePSAodG1wID4+IDUpOwogCXRtcCBePSAodG1wID4+IDEwKTsKQEAgLTE0OSw4ICsxNDksNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG5ydF9kcm9wKHN0cnVjdCBkbl9yb3V0ZSAqcnQpCiB7Ci0JaWYgKHJ0KQotCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKIAljYWxsX3JjdV9iaCgmcnQtPnUuZHN0LnJjdV9oZWFkLCBkc3RfcmN1X2ZyZWUpOwogfQogCkBAIC0zNzksOSArMzc4LDkgQEAKIHsKIAlzdHJ1Y3QgZG5fc2tiX2NiICpjYjsKIAl1bnNpZ25lZCBjaGFyICpwdHI7Ci0JZG5fYWRkcmVzcyAqc3JjOwotCWRuX2FkZHJlc3MgKmRzdDsKLQlkbl9hZGRyZXNzIHRtcDsKKwlfX2xlMTYgKnNyYzsKKwlfX2xlMTYgKmRzdDsKKwlfX2xlMTYgdG1wOwogCiAJLyogQWRkIGJhY2sgaGVhZGVycyAqLwogCXNrYl9wdXNoKHNrYiwgc2tiLT5kYXRhIC0gc2tiLT5uaC5yYXcpOwpAQCAtMzk0LDkgKzM5Myw5IEBACiAJcHRyID0gc2tiLT5kYXRhICsgMjsKIAkqcHRyKysgPSAoY2ItPnJ0X2ZsYWdzICYgfkROX1JUX0ZfUlFSKSB8IEROX1JUX0ZfUlRTOwogCi0JZHN0ID0gKGRuX2FkZHJlc3MgKilwdHI7CisJZHN0ID0gKF9fbGUxNiAqKXB0cjsKIAlwdHIgKz0gMjsKLQlzcmMgPSAoZG5fYWRkcmVzcyAqKXB0cjsKKwlzcmMgPSAoX19sZTE2ICopcHRyOwogCXB0ciArPSAyOwogCSpwdHIgPSAwOyAvKiBaZXJvIGhvcCBjb3VudCAqLwogCkBAIC00NzUsNyArNDc0LDggQEAKIAkJc3RydWN0IGRuX3NrYl9jYiAqY2IgPSBETl9TS0JfQ0Ioc2tiKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCSJERUNuZXQ6IGRuX3JvdXRlX3J4X3BhY2tldDogcnRfZmxhZ3M9MHglMDJ4IGRldj0lcyBsZW49JWQgc3JjPTB4JTA0aHggZHN0PTB4JTA0aHggZXJyPSVkIHR5cGU9JWRcbiIsCi0JCQkoaW50KWNiLT5ydF9mbGFncywgZGV2bmFtZSwgc2tiLT5sZW4sIGNiLT5zcmMsIGNiLT5kc3QsIAorCQkJKGludCljYi0+cnRfZmxhZ3MsIGRldm5hbWUsIHNrYi0+bGVuLAorCQkJZG5fbnRvaHMoY2ItPnNyYyksIGRuX250b2hzKGNiLT5kc3QpLAogCQkJZXJyLCBza2ItPnBrdF90eXBlKTsKIAl9CiAKQEAgLTUwNSw3ICs1MDUsNyBAQAogCiAgICAgICAgIC8qIERlc3RpbmF0aW9uIGluZm8gKi8KICAgICAgICAgcHRyICs9IDI7Ci0JY2ItPmRzdCA9IGRuX2h0b25zKGRuX2V0aDJkbihwdHIpKTsKKwljYi0+ZHN0ID0gZG5fZXRoMmRuKHB0cik7CiAgICAgICAgIGlmIChtZW1jbXAocHRyLCBkbl9oaW9yZF9hZGRyLCA0KSAhPSAwKQogICAgICAgICAgICAgICAgIGdvdG8gZHJvcF9pdDsKICAgICAgICAgcHRyICs9IDY7CkBAIC01MTMsNyArNTEzLDcgQEAKIAogICAgICAgICAvKiBTb3VyY2UgaW5mbyAqLwogICAgICAgICBwdHIgKz0gMjsKLQljYi0+c3JjID0gZG5faHRvbnMoZG5fZXRoMmRuKHB0cikpOworCWNiLT5zcmMgPSBkbl9ldGgyZG4ocHRyKTsKICAgICAgICAgaWYgKG1lbWNtcChwdHIsIGRuX2hpb3JkX2FkZHIsIDQpICE9IDApCiAgICAgICAgICAgICAgICAgZ290byBkcm9wX2l0OwogICAgICAgICBwdHIgKz0gNjsKQEAgLTU0MSw5ICs1NDEsOSBAQAogCXNrYl9wdWxsKHNrYiwgNSk7CiAJc2tiLT5oLnJhdyA9IHNrYi0+ZGF0YTsKIAotCWNiLT5kc3QgPSAqKGRuX2FkZHJlc3MgKilwdHI7CisJY2ItPmRzdCA9ICooX19sZTE2ICopcHRyOwogICAgICAgICBwdHIgKz0gMjsKLSAgICAgICAgY2ItPnNyYyA9ICooZG5fYWRkcmVzcyAqKXB0cjsKKyAgICAgICAgY2ItPnNyYyA9ICooX19sZTE2ICopcHRyOwogICAgICAgICBwdHIgKz0gMjsKICAgICAgICAgY2ItPmhvcHMgPSAqcHRyICYgMHgzZjsKIApAQCAtNTc1LDcgKzU3NSw3IEBACiB7CiAJc3RydWN0IGRuX3NrYl9jYiAqY2I7CiAJdW5zaWduZWQgY2hhciBmbGFncyA9IDA7Ci0JX191MTYgbGVuID0gZG5fbnRvaHMoKihfX3UxNiAqKXNrYi0+ZGF0YSk7CisJX191MTYgbGVuID0gZG5fbnRvaHMoKihfX2xlMTYgKilza2ItPmRhdGEpOwogCXN0cnVjdCBkbl9kZXYgKmRuID0gKHN0cnVjdCBkbl9kZXYgKilkZXYtPmRuX3B0cjsKIAl1bnNpZ25lZCBjaGFyIHBhZGxlbiA9IDA7CiAKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQlzdHJ1Y3QgZG5fc2tiX2NiICpjYiA9IEROX1NLQl9DQihza2IpOwogCiAJCXByaW50ayhLRVJOX0RFQlVHICJkbl9ydF9idWc6IHNrYiBmcm9tOiUwNHggdG86JTA0eFxuIiwKLQkJCQljYi0+c3JjLCBjYi0+ZHN0KTsKKwkJCQlkbl9udG9ocyhjYi0+c3JjKSwgZG5fbnRvaHMoY2ItPmRzdCkpOwogCX0KIAogCWtmcmVlX3NrYihza2IpOwpAQCAtODIzLDcgKzgyMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRuX21hdGNoX2FkZHIoX191MTYgYWRkcjEsIF9fdTE2IGFkZHIyKQorc3RhdGljIGlubGluZSBpbnQgZG5fbWF0Y2hfYWRkcihfX2xlMTYgYWRkcjEsIF9fbGUxNiBhZGRyMikKIHsKIAlfX3UxNiB0bXAgPSBkbl9udG9ocyhhZGRyMSkgXiBkbl9udG9ocyhhZGRyMik7CiAJaW50IG1hdGNoID0gMTY7CkBAIC04MzQsOSArODM0LDkgQEAKIAlyZXR1cm4gbWF0Y2g7CiB9CiAKLXN0YXRpYyBfX3UxNiBkbmV0X3NlbGVjdF9zb3VyY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191MTYgZGFkZHIsIGludCBzY29wZSkKK3N0YXRpYyBfX2xlMTYgZG5ldF9zZWxlY3Rfc291cmNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fbGUxNiBkYWRkciwgaW50IHNjb3BlKQogewotCV9fdTE2IHNhZGRyID0gMDsKKwlfX2xlMTYgc2FkZHIgPSAwOwogCXN0cnVjdCBkbl9kZXYgKmRuX2RiID0gZGV2LT5kbl9wdHI7CiAJc3RydWN0IGRuX2lmYWRkciAqaWZhOwogCWludCBiZXN0X21hdGNoID0gMDsKQEAgLTg2MSwxNCArODYxLDE0IEBACiAJcmV0dXJuIHNhZGRyOwogfQogCi1zdGF0aWMgaW5saW5lIF9fdTE2IF9fZG5fZmliX3Jlc19wcmVmc3JjKHN0cnVjdCBkbl9maWJfcmVzICpyZXMpCitzdGF0aWMgaW5saW5lIF9fbGUxNiBfX2RuX2ZpYl9yZXNfcHJlZnNyYyhzdHJ1Y3QgZG5fZmliX3JlcyAqcmVzKQogewogCXJldHVybiBkbmV0X3NlbGVjdF9zb3VyY2UoRE5fRklCX1JFU19ERVYoKnJlcyksIEROX0ZJQl9SRVNfR1coKnJlcyksIHJlcy0+c2NvcGUpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fdTE2IGRuX2ZpYl9ydWxlc19tYXBfZGVzdGluYXRpb24oX191MTYgZGFkZHIsIHN0cnVjdCBkbl9maWJfcmVzICpyZXMpCitzdGF0aWMgaW5saW5lIF9fbGUxNiBkbl9maWJfcnVsZXNfbWFwX2Rlc3RpbmF0aW9uKF9fbGUxNiBkYWRkciwgc3RydWN0IGRuX2ZpYl9yZXMgKnJlcykKIHsKLQlfX3UxNiBtYXNrID0gZG5ldF9tYWtlX21hc2socmVzLT5wcmVmaXhsZW4pOworCV9fbGUxNiBtYXNrID0gZG5ldF9tYWtlX21hc2socmVzLT5wcmVmaXhsZW4pOwogCXJldHVybiAoZGFkZHImfm1hc2spfHJlcy0+ZmktPmZpYl9uaC0+bmhfZ3c7CiB9CiAKQEAgLTg5MiwxMiArODkyLDEzIEBACiAJc3RydWN0IGRuX2ZpYl9yZXMgcmVzID0geyAuZmkgPSBOVUxMLCAudHlwZSA9IFJUTl9VTklDQVNUIH07CiAJaW50IGVycjsKIAlpbnQgZnJlZV9yZXMgPSAwOwotCV9fdTE2IGdhdGV3YXkgPSAwOworCV9fbGUxNiBnYXRld2F5ID0gMDsKIAogCWlmIChkZWNuZXRfZGVidWdfbGV2ZWwgJiAxNikKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJICAgICAgICJkbl9yb3V0ZV9vdXRwdXRfc2xvdzogZHN0PSUwNHggc3JjPSUwNHggbWFyaz0lZCIKLQkJICAgICAgICIgaWlmPSVkIG9pZj0lZFxuIiwgb2xkZmxwLT5mbGRfZHN0LCBvbGRmbHAtPmZsZF9zcmMsCisJCSAgICAgICAiIGlpZj0lZCBvaWY9JWRcbiIsIGRuX250b2hzKG9sZGZscC0+ZmxkX2RzdCksCisJCSAgICAgICBkbl9udG9ocyhvbGRmbHAtPmZsZF9zcmMpLAogICAgICAgICAgICAgICAgICAgICAgICBvbGRmbHAtPmZsZF9md21hcmssIGxvb3BiYWNrX2Rldi5pZmluZGV4LCBvbGRmbHAtPm9pZik7CiAKIAkvKiBJZiB3ZSBoYXZlIGFuIG91dHB1dCBpbnRlcmZhY2UsIHZlcmlmeSBpdHMgYSBERUNuZXQgZGV2aWNlICovCkBAIC05NjEsOCArOTYyLDkgQEAKIAlpZiAoZGVjbmV0X2RlYnVnX2xldmVsICYgMTYpCiAJCXByaW50ayhLRVJOX0RFQlVHCiAJCSAgICAgICAiZG5fcm91dGVfb3V0cHV0X3Nsb3c6IGluaXRpYWwgY2hlY2tzIGNvbXBsZXRlLiIKLQkJICAgICAgICIgZHN0PSVvNHggc3JjPSUwNHggb2lmPSVkIHRyeV9oYXJkPSVkXG4iLCBmbC5mbGRfZHN0LAotCQkgICAgICAgZmwuZmxkX3NyYywgZmwub2lmLCB0cnlfaGFyZCk7CisJCSAgICAgICAiIGRzdD0lbzR4IHNyYz0lMDR4IG9pZj0lZCB0cnlfaGFyZD0lZFxuIiwKKwkJICAgICAgIGRuX250b2hzKGZsLmZsZF9kc3QpLCBkbl9udG9ocyhmbC5mbGRfc3JjKSwKKwkJICAgICAgIGZsLm9pZiwgdHJ5X2hhcmQpOwogCiAJLyoKIAkgKiBOLkIuIElmIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aG91dCByb3V0ZXIgc3VwcG9ydCB0aGVuCkBAIC0xMjE4LDggKzEyMjAsOCBAQAogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDsKIAl1bnNpZ25lZCBoYXNoOwogCWludCBmbGFncyA9IDA7Ci0JX191MTYgZ2F0ZXdheSA9IDA7Ci0JX191MTYgbG9jYWxfc3JjID0gMDsKKwlfX2xlMTYgZ2F0ZXdheSA9IDA7CisJX19sZTE2IGxvY2FsX3NyYyA9IDA7CiAJc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmRuX3UgPSAKIAkJCQkgICAgIHsgLmRhZGRyID0gY2ItPmRzdCwKIAkJCQkgICAgICAgLnNhZGRyID0gY2ItPnNyYywKQEAgLTEyNjYsNyArMTI2OCw3IEBACiAJCXJlcy50eXBlID0gUlROX0xPQ0FMOwogCQlmbGFncyB8PSBSVENGX0RJUkVDVFNSQzsKIAl9IGVsc2UgewotCQlfX3UxNiBzcmNfbWFwID0gZmwuZmxkX3NyYzsKKwkJX19sZTE2IHNyY19tYXAgPSBmbC5mbGRfc3JjOwogCQlmcmVlX3JlcyA9IDE7CiAKIAkJb3V0X2RldiA9IEROX0ZJQl9SRVNfREVWKHJlcyk7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3J1bGVzLmMgYi9uZXQvZGVjbmV0L2RuX3J1bGVzLmMKaW5kZXggMTA2MGRlNy4uNDQ2ZmFhZiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9ydWxlcy5jCisrKyBiL25ldC9kZWNuZXQvZG5fcnVsZXMuYwpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbl9yb3V0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC9uZWlnaGJvdXIuaD4KQEAgLTM5LDE4ICs0MSwxOCBAQAogCiBzdHJ1Y3QgZG5fZmliX3J1bGUKIHsKLQlzdHJ1Y3QgZG5fZmliX3J1bGUJKnJfbmV4dDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlyX2hsaXN0OwogCWF0b21pY190CQlyX2NsbnRyZWY7CiAJdTMyCQkJcl9wcmVmZXJlbmNlOwogCXVuc2lnbmVkIGNoYXIJCXJfdGFibGU7CiAJdW5zaWduZWQgY2hhcgkJcl9hY3Rpb247CiAJdW5zaWduZWQgY2hhcgkJcl9kc3RfbGVuOwogCXVuc2lnbmVkIGNoYXIJCXJfc3JjX2xlbjsKLQlkbl9hZGRyZXNzCQlyX3NyYzsKLQlkbl9hZGRyZXNzCQlyX3NyY21hc2s7Ci0JZG5fYWRkcmVzcwkJcl9kc3Q7Ci0JZG5fYWRkcmVzcwkJcl9kc3RtYXNrOwotCWRuX2FkZHJlc3MJCXJfc3JjbWFwOworCV9fbGUxNgkJCXJfc3JjOworCV9fbGUxNgkJCXJfc3JjbWFzazsKKwlfX2xlMTYJCQlyX2RzdDsKKwlfX2xlMTYJCQlyX2RzdG1hc2s7CisJX19sZTE2CQkJcl9zcmNtYXA7CiAJdTgJCQlyX2ZsYWdzOwogI2lmZGVmIENPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLCiAJdTMyCQkJcl9md21hcms7CkBAIC01OCw2ICs2MCw3IEBACiAJaW50CQkJcl9pZmluZGV4OwogCWNoYXIJCQlyX2lmbmFtZVtJRk5BTVNJWl07CiAJaW50CQkJcl9kZWFkOworCXN0cnVjdCByY3VfaGVhZAkJcmN1OwogfTsKIAogc3RhdGljIHN0cnVjdCBkbl9maWJfcnVsZSBkZWZhdWx0X3J1bGUgPSB7CkBAIC02NywxOCArNzAsMTcgQEAKIAkucl9hY3Rpb24gPQkJUlROX1VOSUNBU1QKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZG5fZmliX3J1bGUgKmRuX2ZpYl9ydWxlcyA9ICZkZWZhdWx0X3J1bGU7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhkbl9maWJfcnVsZXNfbG9jayk7Ci0KK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBkbl9maWJfcnVsZXM7CiAKIGludCBkbl9maWJfcnRtX2RlbHJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcnRhdHRyICoqcnRhID0gYXJnOwogCXN0cnVjdCBydG1zZyAqcnRtID0gTkxNU0dfREFUQShubGgpOwotCXN0cnVjdCBkbl9maWJfcnVsZSAqciwgKipycDsKKwlzdHJ1Y3QgZG5fZmliX3J1bGUgKnI7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJaW50IGVyciA9IC1FU1JDSDsKIAotCWZvcihycD0mZG5fZmliX3J1bGVzOyAocj0qcnApICE9IE5VTEw7IHJwID0gJnItPnJfbmV4dCkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsIG5vZGUsICZkbl9maWJfcnVsZXMsIHJfaGxpc3QpIHsKIAkJaWYgKCghcnRhW1JUQV9TUkMtMV0gfHwgbWVtY21wKFJUQV9EQVRBKHJ0YVtSVEFfU1JDLTFdKSwgJnItPnJfc3JjLCAyKSA9PSAwKSAmJgogCQkJcnRtLT5ydG1fc3JjX2xlbiA9PSByLT5yX3NyY19sZW4gJiYKIAkJCXJ0bS0+cnRtX2RzdF9sZW4gPT0gci0+cl9kc3RfbGVuICYmCkBAIC05NSwxMCArOTcsOCBAQAogCQkJaWYgKHIgPT0gJmRlZmF1bHRfcnVsZSkKIAkJCQlicmVhazsKIAotCQkJd3JpdGVfbG9ja19iaCgmZG5fZmliX3J1bGVzX2xvY2spOwotCQkJKnJwID0gci0+cl9uZXh0OworCQkJaGxpc3RfZGVsX3JjdSgmci0+cl9obGlzdCk7CiAJCQlyLT5yX2RlYWQgPSAxOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZkbl9maWJfcnVsZXNfbG9jayk7CiAJCQlkbl9maWJfcnVsZV9wdXQocik7CiAJCQllcnIgPSAwOwogCQkJYnJlYWs7CkBAIC0xMDgsMTEgKzEwOCwxNyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbl9maWJfcnVsZV9wdXRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgZG5fZmliX3J1bGUgKnIgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGRuX2ZpYl9ydWxlLCByY3UpOworCWtmcmVlKHIpOworfQorCiB2b2lkIGRuX2ZpYl9ydWxlX3B1dChzdHJ1Y3QgZG5fZmliX3J1bGUgKnIpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnItPnJfY2xudHJlZikpIHsKIAkJaWYgKHItPnJfZGVhZCkKLQkJCWtmcmVlKHIpOworCQkJY2FsbF9yY3UoJnItPnJjdSwgZG5fZmliX3J1bGVfcHV0X3JjdSk7CiAJCWVsc2UKIAkJCXByaW50ayhLRVJOX0RFQlVHICJBdHRlbXB0IHRvIGZyZWUgYWxpdmUgZG5fZmliX3J1bGVcbiIpOwogCX0KQEAgLTEyMyw3ICsxMjksOCBAQAogewogCXN0cnVjdCBydGF0dHIgKipydGEgPSBhcmc7CiAJc3RydWN0IHJ0bXNnICpydG0gPSBOTE1TR19EQVRBKG5saCk7Ci0Jc3RydWN0IGRuX2ZpYl9ydWxlICpyLCAqbmV3X3IsICoqcnA7CisJc3RydWN0IGRuX2ZpYl9ydWxlICpyLCAqbmV3X3IsICpsYXN0ID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciB0YWJsZV9pZDsKIAogCWlmIChydG0tPnJ0bV9zcmNfbGVuID4gMTYgfHwgcnRtLT5ydG1fZHN0X2xlbiA+IDE2KQpAQCAtMTQ5LDYgKzE1Niw3IEBACiAJaWYgKCFuZXdfcikKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KG5ld19yLCAwLCBzaXplb2YoKm5ld19yKSk7CisKIAlpZiAocnRhW1JUQV9TUkMtMV0pCiAJCW1lbWNweSgmbmV3X3ItPnJfc3JjLCBSVEFfREFUQShydGFbUlRBX1NSQy0xXSksIDIpOwogCWlmIChydGFbUlRBX0RTVC0xXSkKQEAgLTE3OSwyNyArMTg3LDI2IEBACiAJCX0KIAl9CiAKLQlycCA9ICZkbl9maWJfcnVsZXM7CisJciA9IGNvbnRhaW5lcl9vZihkbl9maWJfcnVsZXMuZmlyc3QsIHN0cnVjdCBkbl9maWJfcnVsZSwgcl9obGlzdCk7CiAJaWYgKCFuZXdfci0+cl9wcmVmZXJlbmNlKSB7Ci0JCXIgPSBkbl9maWJfcnVsZXM7Ci0JCWlmIChyICYmIChyID0gci0+cl9uZXh0KSAhPSBOVUxMKSB7Ci0JCQlycCA9ICZkbl9maWJfcnVsZXMtPnJfbmV4dDsKKwkJaWYgKHIgJiYgci0+cl9obGlzdC5uZXh0ICE9IE5VTEwpIHsKKwkJCXIgPSBjb250YWluZXJfb2Yoci0+cl9obGlzdC5uZXh0LCBzdHJ1Y3QgZG5fZmliX3J1bGUsIHJfaGxpc3QpOwogCQkJaWYgKHItPnJfcHJlZmVyZW5jZSkKIAkJCQluZXdfci0+cl9wcmVmZXJlbmNlID0gci0+cl9wcmVmZXJlbmNlIC0gMTsKIAkJfQogCX0KIAotCXdoaWxlKChyPSpycCkgIT0gTlVMTCkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsIG5vZGUsICZkbl9maWJfcnVsZXMsIHJfaGxpc3QpIHsKIAkJaWYgKHItPnJfcHJlZmVyZW5jZSA+IG5ld19yLT5yX3ByZWZlcmVuY2UpCiAJCQlicmVhazsKLQkJcnAgPSAmci0+cl9uZXh0OworCQlsYXN0ID0gcjsKIAl9Ci0KLQluZXdfci0+cl9uZXh0ID0gcjsKIAlhdG9taWNfaW5jKCZuZXdfci0+cl9jbG50cmVmKTsKLQl3cml0ZV9sb2NrX2JoKCZkbl9maWJfcnVsZXNfbG9jayk7Ci0JKnJwID0gbmV3X3I7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZkbl9maWJfcnVsZXNfbG9jayk7CisKKwlpZiAobGFzdCkKKwkJaGxpc3RfYWRkX2FmdGVyX3JjdSgmbGFzdC0+cl9obGlzdCwgJm5ld19yLT5yX2hsaXN0KTsKKwllbHNlCisJCWhsaXN0X2FkZF9iZWZvcmVfcmN1KCZuZXdfci0+cl9obGlzdCwgJnItPnJfaGxpc3QpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDgsMTIgKzIxNSwxNCBAQAogewogCXN0cnVjdCBkbl9maWJfcnVsZSAqciwgKnBvbGljeTsKIAlzdHJ1Y3QgZG5fZmliX3RhYmxlICp0YjsKLQlkbl9hZGRyZXNzIHNhZGRyID0gZmxwLT5mbGRfc3JjOwotCWRuX2FkZHJlc3MgZGFkZHIgPSBmbHAtPmZsZF9kc3Q7CisJX19sZTE2IHNhZGRyID0gZmxwLT5mbGRfc3JjOworCV9fbGUxNiBkYWRkciA9IGZscC0+ZmxkX2RzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlpbnQgZXJyOwogCi0JcmVhZF9sb2NrKCZkbl9maWJfcnVsZXNfbG9jayk7Ci0JZm9yKHIgPSBkbl9maWJfcnVsZXM7IHI7IHIgPSByLT5yX25leHQpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uociwgbm9kZSwgJmRuX2ZpYl9ydWxlcywgcl9obGlzdCkgewogCQlpZiAoKChzYWRkcl5yLT5yX3NyYykgJiByLT5yX3NyY21hc2spIHx8CiAJCSAgICAoKGRhZGRyXnItPnJfZHN0KSAmIHItPnJfZHN0bWFzaykgfHwKICNpZmRlZiBDT05GSUdfREVDTkVUX1JPVVRFX0ZXTUFSSwpAQCAtMjI4LDE0ICsyMzcsMTQgQEAKIAkJCQlwb2xpY3kgPSByOwogCQkJCWJyZWFrOwogCQkJY2FzZSBSVE5fVU5SRUFDSEFCTEU6Ci0JCQkJcmVhZF91bmxvY2soJmRuX2ZpYl9ydWxlc19sb2NrKTsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQlyZXR1cm4gLUVORVRVTlJFQUNIOwogCQkJZGVmYXVsdDoKIAkJCWNhc2UgUlROX0JMQUNLSE9MRToKLQkJCQlyZWFkX3VubG9jaygmZG5fZmliX3J1bGVzX2xvY2spOworCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJY2FzZSBSVE5fUFJPSElCSVQ6Ci0JCQkJcmVhZF91bmxvY2soJmRuX2ZpYl9ydWxlc19sb2NrKTsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJfQogCkBAIC0yNDYsMjAgKzI1NSwyMCBAQAogCQkJcmVzLT5yID0gcG9saWN5OwogCQkJaWYgKHBvbGljeSkKIAkJCQlhdG9taWNfaW5jKCZwb2xpY3ktPnJfY2xudHJlZik7Ci0JCQlyZWFkX3VubG9jaygmZG5fZmliX3J1bGVzX2xvY2spOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAoZXJyIDwgMCAmJiBlcnIgIT0gLUVBR0FJTikgewotCQkJcmVhZF91bmxvY2soJmRuX2ZpYl9ydWxlc19sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIAotCXJlYWRfdW5sb2NrKCZkbl9maWJfcnVsZXNfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIC1FU1JDSDsKIH0KIAotdW5zaWduZWQgZG5ldF9hZGRyX3R5cGUoX191MTYgYWRkcikKK3Vuc2lnbmVkIGRuZXRfYWRkcl90eXBlKF9fbGUxNiBhZGRyKQogewogCXN0cnVjdCBmbG93aSBmbCA9IHsgLm5sX3UgPSB7IC5kbl91ID0geyAuZGFkZHIgPSBhZGRyIH0gfSB9OwogCXN0cnVjdCBkbl9maWJfcmVzIHJlczsKQEAgLTI3Nyw3ICsyODYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLV9fdTE2IGRuX2ZpYl9ydWxlc19wb2xpY3koX191MTYgc2FkZHIsIHN0cnVjdCBkbl9maWJfcmVzICpyZXMsIHVuc2lnbmVkICpmbGFncykKK19fbGUxNiBkbl9maWJfcnVsZXNfcG9saWN5KF9fbGUxNiBzYWRkciwgc3RydWN0IGRuX2ZpYl9yZXMgKnJlcywgdW5zaWduZWQgKmZsYWdzKQogewogCXN0cnVjdCBkbl9maWJfcnVsZSAqciA9IHJlcy0+cjsKIApAQCAtMjk3LDI3ICszMDYsMjMgQEAKIAogc3RhdGljIHZvaWQgZG5fZmliX3J1bGVzX2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBkbl9maWJfcnVsZSAqcjsKIAotCWZvcihyID0gZG5fZmliX3J1bGVzOyByOyByID0gci0+cl9uZXh0KSB7Ci0JCWlmIChyLT5yX2lmaW5kZXggPT0gZGV2LT5pZmluZGV4KSB7Ci0JCQl3cml0ZV9sb2NrX2JoKCZkbl9maWJfcnVsZXNfbG9jayk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkociwgbm9kZSwgJmRuX2ZpYl9ydWxlcywgcl9obGlzdCkgeworCQlpZiAoci0+cl9pZmluZGV4ID09IGRldi0+aWZpbmRleCkKIAkJCXItPnJfaWZpbmRleCA9IC0xOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZkbl9maWJfcnVsZXNfbG9jayk7Ci0JCX0KIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGRuX2ZpYl9ydWxlc19hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZG5fZmliX3J1bGUgKnI7CiAKLQlmb3IociA9IGRuX2ZpYl9ydWxlczsgcjsgciA9IHItPnJfbmV4dCkgewotCQlpZiAoci0+cl9pZmluZGV4ID09IC0xICYmIHN0cmNtcChkZXYtPm5hbWUsIHItPnJfaWZuYW1lKSA9PSAwKSB7Ci0JCQl3cml0ZV9sb2NrX2JoKCZkbl9maWJfcnVsZXNfbG9jayk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkociwgbm9kZSwgJmRuX2ZpYl9ydWxlcywgcl9obGlzdCkgeworCQlpZiAoci0+cl9pZmluZGV4ID09IC0xICYmIHN0cmNtcChkZXYtPm5hbWUsIHItPnJfaWZuYW1lKSA9PSAwKQogCQkJci0+cl9pZmluZGV4ID0gZGV2LT5pZmluZGV4OwotCQkJd3JpdGVfdW5sb2NrX2JoKCZkbl9maWJfcnVsZXNfbG9jayk7Ci0JCX0KIAl9CiB9CiAKQEAgLTM4NywxOCArMzkyLDIwIEBACiAKIGludCBkbl9maWJfZHVtcF9ydWxlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0JaW50IGlkeDsKKwlpbnQgaWR4ID0gMDsKIAlpbnQgc19pZHggPSBjYi0+YXJnc1swXTsKIAlzdHJ1Y3QgZG5fZmliX3J1bGUgKnI7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKLQlyZWFkX2xvY2soJmRuX2ZpYl9ydWxlc19sb2NrKTsKLQlmb3IociA9IGRuX2ZpYl9ydWxlcywgaWR4ID0gMDsgcjsgciA9IHItPnJfbmV4dCwgaWR4KyspIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkociwgbm9kZSwgJmRuX2ZpYl9ydWxlcywgcl9obGlzdCkgewogCQlpZiAoaWR4IDwgc19pZHgpCiAJCQljb250aW51ZTsKIAkJaWYgKGRuX2ZpYl9maWxsX3J1bGUoc2tiLCByLCBjYiwgTkxNX0ZfTVVMVEkpIDwgMCkKIAkJCWJyZWFrOworCQlpZHgrKzsKIAl9Ci0JcmVhZF91bmxvY2soJmRuX2ZpYl9ydWxlc19sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0+YXJnc1swXSA9IGlkeDsKIAogCXJldHVybiBza2ItPmxlbjsKQEAgLTQwNiw2ICs0MTMsOCBAQAogCiB2b2lkIF9faW5pdCBkbl9maWJfcnVsZXNfaW5pdCh2b2lkKQogeworCUlOSVRfSExJU1RfSEVBRCgmZG5fZmliX3J1bGVzKTsKKwlobGlzdF9hZGRfaGVhZCgmZGVmYXVsdF9ydWxlLnJfaGxpc3QsICZkbl9maWJfcnVsZXMpOwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmZG5fZmliX3J1bGVzX25vdGlmaWVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl90YWJsZS5jIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCmluZGV4IDZmOGI1NjUuLjBlYmM0NmEgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fdGFibGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAl1MzIJCQlkel9oYXNobWFzazsKICNkZWZpbmUgRFpfSEFTSE1BU0soZHopCSgoZHopLT5kel9oYXNobWFzaykKIAlpbnQJCQlkel9vcmRlcjsKLQl1MTYJCQlkel9tYXNrOworCV9fbGUxNgkJCWR6X21hc2s7CiAjZGVmaW5lIERaX01BU0soZHopCSgoZHopLT5kel9tYXNrKQogfTsKIApAQCAtODQsMTQgKzg0LDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgZG5fZmliX2lkeF90IGRuX2hhc2goZG5fZmliX2tleV90IGtleSwgc3RydWN0IGRuX3pvbmUgKmR6KQogewotCXUxNiBoID0gbnRvaHMoa2V5LmRhdHVtKT4+KDE2IC0gZHotPmR6X29yZGVyKTsKKwl1MTYgaCA9IGRuX250b2hzKGtleS5kYXR1bSk+PigxNiAtIGR6LT5kel9vcmRlcik7CiAJaCBePSAoaCA+PiAxMCk7CiAJaCBePSAoaCA+PiA2KTsKIAloICY9IERaX0hBU0hNQVNLKGR6KTsKIAlyZXR1cm4gKihkbl9maWJfaWR4X3QgKikmaDsKIH0KIAotc3RhdGljIGlubGluZSBkbl9maWJfa2V5X3QgZHpfa2V5KHUxNiBkc3QsIHN0cnVjdCBkbl96b25lICpkeikKK3N0YXRpYyBpbmxpbmUgZG5fZmliX2tleV90IGR6X2tleShfX2xlMTYgZHN0LCBzdHJ1Y3QgZG5fem9uZSAqZHopCiB7CiAJZG5fZmliX2tleV90IGs7CiAJay5kYXR1bSA9IGRzdCAmIERaX01BU0soZHopOwpAQCAtMjUwLDcgKzI1MCw3IEBACiAKIAlmb3JfbmV4dGhvcHMoZmkpIHsKIAkJaW50IGF0dHJsZW4gPSBuaGxlbiAtIHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKTsKLQkJZG5fYWRkcmVzcyBndzsKKwkJX19sZTE2IGd3OwogCiAJCWlmIChhdHRybGVuIDwgMCB8fCAobmhsZW4gLT0gbmhwLT5ydG5oX2xlbikgPCAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NTcsNyArNDU3LDcgQEAKIAogCWR6X2tleV8wKGtleSk7CiAJaWYgKHJ0YS0+cnRhX2RzdCkgewotCQlkbl9hZGRyZXNzIGRzdDsKKwkJX19sZTE2IGRzdDsKIAkJbWVtY3B5KCZkc3QsIHJ0YS0+cnRhX2RzdCwgMik7CiAJCWlmIChkc3QgJiB+RFpfTUFTSyhkeikpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU5Myw3ICs1OTMsNyBAQAogCiAJZHpfa2V5XzAoa2V5KTsKIAlpZiAocnRhLT5ydGFfZHN0KSB7Ci0JCWRuX2FkZHJlc3MgZHN0OworCQlfX2xlMTYgZHN0OwogCQltZW1jcHkoJmRzdCwgcnRhLT5ydGFfZHN0LCAyKTsKIAkJaWYgKGRzdCAmIH5EWl9NQVNLKGR6KSkKIAkJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jIGIvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCmluZGV4IDBlOWQyYzUuLmJkYTU5MjAgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYworKysgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKQEAgLTg2LDkgKzg2LDkgQEAKICAqIFNpbXBsZSByb3V0aW5lIHRvIHBhcnNlIGFuIGFzY2lpIERFQ25ldCBhZGRyZXNzCiAgKiBpbnRvIGEgbmV0d29yayBvcmRlciBhZGRyZXNzLgogICovCi1zdGF0aWMgaW50IHBhcnNlX2FkZHIoZG5fYWRkcmVzcyAqYWRkciwgY2hhciAqc3RyKQorc3RhdGljIGludCBwYXJzZV9hZGRyKF9fbGUxNiAqYWRkciwgY2hhciAqc3RyKQogewotCWRuX2FkZHJlc3MgYXJlYSwgbm9kZTsKKwlfX3UxNiBhcmVhLCBub2RlOwogCiAJd2hpbGUoKnN0ciAmJiAhSVNOVU0oKnN0cikpIHN0cisrOwogCkBAIC0xMzksNyArMTM5LDcgQEAKIAkJCQl2b2lkICoqY29udGV4dCkKIHsKIAlzaXplX3QgbGVuOwotCWRuX2FkZHJlc3MgYWRkcjsKKwlfX2xlMTYgYWRkcjsKIAogCWlmIChvbGR2YWwgJiYgb2xkbGVucCkgewogCQlpZiAoZ2V0X3VzZXIobGVuLCBvbGRsZW5wKSkKQEAgLTE0NywxNCArMTQ3LDE0IEBACiAJCWlmIChsZW4pIHsKIAkJCWlmIChsZW4gIT0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChwdXRfdXNlcihkZWNuZXRfYWRkcmVzcywgKHVuc2lnbmVkIHNob3J0IF9fdXNlciAqKW9sZHZhbCkpCisJCQlpZiAocHV0X3VzZXIoZGVjbmV0X2FkZHJlc3MsIChfX2xlMTYgX191c2VyICopb2xkdmFsKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCX0KIAlpZiAobmV3dmFsICYmIG5ld2xlbikgewogCQlpZiAobmV3bGVuICE9IHNpemVvZih1bnNpZ25lZCBzaG9ydCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGdldF91c2VyKGFkZHIsICh1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKiluZXd2YWwpKQorCQlpZiAoZ2V0X3VzZXIoYWRkciwgKF9fbGUxNiBfX3VzZXIgKiluZXd2YWwpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJZG5fZGV2X2RldmljZXNfb2ZmKCk7CkBAIC0xNzMsNyArMTczLDcgQEAKIHsKIAljaGFyIGFkZHJbRE5fQVNDQlVGX0xFTl07CiAJc2l6ZV90IGxlbjsKLQlkbl9hZGRyZXNzIGRuYWRkcjsKKwlfX2xlMTYgZG5hZGRyOwogCiAJaWYgKCEqbGVucCB8fCAoKnBwb3MgJiYgIXdyaXRlKSkgewogCQkqbGVucCA9IDA7CmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvZXRoLmMgYi9uZXQvZXRoZXJuZXQvZXRoLmMKaW5kZXggOTg5MGZkOS4uYzk3MWYxNCAxMDA2NDQKLS0tIGEvbmV0L2V0aGVybmV0L2V0aC5jCisrKyBiL25ldC9ldGhlcm5ldC9ldGguYwpAQCAtOTUsNiArOTUsMTIgQEAKIAkJc2FkZHIgPSBkZXYtPmRldl9hZGRyOwogCW1lbWNweShldGgtPmhfc291cmNlLHNhZGRyLGRldi0+YWRkcl9sZW4pOwogCisJaWYoZGFkZHIpCisJeworCQltZW1jcHkoZXRoLT5oX2Rlc3QsZGFkZHIsZGV2LT5hZGRyX2xlbik7CisJCXJldHVybiBFVEhfSExFTjsKKwl9CisJCiAJLyoKIAkgKglBbnl3YXksIHRoZSBsb29wYmFjay1kZXZpY2Ugc2hvdWxkIG5ldmVyIHVzZSB0aGlzIGZ1bmN0aW9uLi4uIAogCSAqLwpAQCAtMTA1LDEyICsxMTEsNiBAQAogCQlyZXR1cm4gRVRIX0hMRU47CiAJfQogCQotCWlmKGRhZGRyKQotCXsKLQkJbWVtY3B5KGV0aC0+aF9kZXN0LGRhZGRyLGRldi0+YWRkcl9sZW4pOwotCQlyZXR1cm4gRVRIX0hMRU47Ci0JfQotCQogCXJldHVybiAtRVRIX0hMRU47CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvS2NvbmZpZyBiL25ldC9pZWVlODAyMTEvS2NvbmZpZwppbmRleCBkMThjY2JhLi5kYmIwODUyIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL0tjb25maWcKKysrIGIvbmV0L2llZWU4MDIxMS9LY29uZmlnCkBAIC02NiwzICs2Niw0IEBACiAJVGhpcyBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGVzIGFuZCBpdCB3aWxsIGJlIGNhbGxlZAogCSJpZWVlODAyMTFfY3J5cHRfdGtpcCIuCiAKK3NvdXJjZSAibmV0L2llZWU4MDIxMS9zb2Z0bWFjL0tjb25maWciCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL01ha2VmaWxlIGIvbmV0L2llZWU4MDIxMS9NYWtlZmlsZQppbmRleCBmOTg4NDE3Li43OTZhN2M3IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL01ha2VmaWxlCisrKyBiL25ldC9pZWVlODAyMTEvTWFrZWZpbGUKQEAgLTEwLDMgKzEwLDQgQEAKIAlpZWVlODAyMTFfd3gubyBcCiAJaWVlZTgwMjExX2dlby5vCiAKK29iai0kKENPTkZJR19JRUVFODAyMTFfU09GVE1BQykgKz0gc29mdG1hYy8KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IGVjYzliYjEuLmNiNzFkNzkgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KIAotCiBNT0RVTEVfQVVUSE9SKCJKb3VuaSBNYWxpbmVuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkhvc3RBUCBjcnlwdG8iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTMzLDExICszMiwxMSBAQAogCiB2b2lkIGllZWU4MDIxMV9jcnlwdF9kZWluaXRfZW50cmllcyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgaW50IGZvcmNlKQogewotIAlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmVudHJ5LCAqbmV4dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmVudHJ5LCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKLSAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmaWVlZS0+Y3J5cHRfZGVpbml0X2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsICZpZWVlLT5jcnlwdF9kZWluaXRfbGlzdCwgbGlzdCkgewogCQlpZiAoYXRvbWljX3JlYWQoJmVudHJ5LT5yZWZjbnQpICE9IDAgJiYgIWZvcmNlKQogCQkJY29udGludWU7CiAKQEAgLTE0MSw5ICsxNDAsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOwogCXJldHVybiAtRUlOVkFMOwogCi0gZm91bmQ6CisgICAgICBmb3VuZDoKIAlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0OiB1bnJlZ2lzdGVyZWQgYWxnb3JpdGhtICIKLQkJCSAgIiclcydcbiIsIG9wcy0+bmFtZSk7CisJICAgICAgICInJXMnXG4iLCBvcHMtPm5hbWUpOwogCWxpc3RfZGVsKCZhbGctPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWU4MDIxMV9jcnlwdG9fbG9jaywgZmxhZ3MpOwogCWtmcmVlKGFsZyk7CkBAIC0xNjMsNyArMTYyLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlODAyMTFfY3J5cHRvX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gTlVMTDsKIAotIGZvdW5kOgorICAgICAgZm91bmQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZTgwMjExX2NyeXB0b19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGFsZy0+b3BzOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCmluZGV4IDQ3MDIyMTcuLjc4YjJkMTMgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCWE0X2luY2x1ZGVkID0gKChmYyAmIChJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkgPT0KIAkJICAgICAgIChJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKSk7CiAJcWNfaW5jbHVkZWQgPSAoKFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSAmJgotCQkgICAgICAgKFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAmIDB4MDgpKTsKKwkJICAgICAgIChXTEFOX0ZDX0dFVF9TVFlQRShmYykgJiBJRUVFODAyMTFfU1RZUEVfUU9TX0RBVEEpKTsKIAlhYWRfbGVuID0gMjI7CiAJaWYgKGE0X2luY2x1ZGVkKQogCQlhYWRfbGVuICs9IDY7CkBAIC0xOTAsNyArMTkwLDggQEAKIAlpZWVlODAyMTFfY2NtcF9hZXNfZW5jcnlwdCh0Zm0sIGIwLCBzMCk7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2NjbXBfaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuLCB2b2lkICpwcml2KQorc3RhdGljIGludCBpZWVlODAyMTFfY2NtcF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sCisJCQkgICAgICB1OCAqYWVza2V5LCBpbnQga2V5bGVuLCB2b2lkICpwcml2KQogewogCXN0cnVjdCBpZWVlODAyMTFfY2NtcF9kYXRhICprZXkgPSBwcml2OwogCWludCBpOwpAQCAtMTk5LDYgKzIwMCw5IEBACiAJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgQ0NNUF9IRFJfTEVOIHx8IHNrYi0+bGVuIDwgaGRyX2xlbikKIAkJcmV0dXJuIC0xOwogCisJaWYgKGFlc2tleSAhPSBOVUxMICYmIGtleWxlbiA+PSBDQ01QX1RLX0xFTikKKwkJbWVtY3B5KGFlc2tleSwga2V5LT5rZXksIENDTVBfVEtfTEVOKTsKKwogCXBvcyA9IHNrYl9wdXNoKHNrYiwgQ0NNUF9IRFJfTEVOKTsKIAltZW1tb3ZlKHBvcywgcG9zICsgQ0NNUF9IRFJfTEVOLCBoZHJfbGVuKTsKIAlwb3MgKz0gaGRyX2xlbjsKQEAgLTIzOCw3ICsyNDIsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAlkYXRhX2xlbiA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKLQlsZW4gPSBpZWVlODAyMTFfY2NtcF9oZHIoc2tiLCBoZHJfbGVuLCBwcml2KTsKKwlsZW4gPSBpZWVlODAyMTFfY2NtcF9oZHIoc2tiLCBoZHJfbGVuLCBOVUxMLCAwLCBwcml2KTsKIAlpZiAobGVuIDwgMCkKIAkJcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggZTA5ODgzMi4uOTNkZWY5NCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwpAQCAtODAsMTAgKzgwLDkgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3RraXBfZGF0YSAqcHJpdjsKIAotCXByaXYgPSBrbWFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9BVE9NSUMpOworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9BVE9NSUMpOwogCWlmIChwcml2ID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKLQltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKCpwcml2KSk7CiAKIAlwcml2LT5rZXlfaWR4ID0ga2V5X2lkeDsKIApAQCAtMjcxLDM0ICsyNzAsMzMgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdTggKmllZWU4MDIxMV90a2lwX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbiwgdm9pZCAqcHJpdikKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3RraXBfaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuLAorCQkJICAgICAgdTggKiByYzRrZXksIGludCBrZXlsZW4sIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90a2lwX2RhdGEgKnRrZXkgPSBwcml2OwogCWludCBsZW47Ci0JdTggKnJjNGtleSwgKnBvcywgKmljdjsKKwl1OCAqcG9zOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7Ci0JdTMyIGNyYzsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKIAogCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IDggfHwgc2tiLT5sZW4gPCBoZHJfbGVuKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC0xOworCisJaWYgKHJjNGtleSA9PSBOVUxMIHx8IGtleWxlbiA8IDE2KQorCQlyZXR1cm4gLTE7CiAKIAlpZiAoIXRrZXktPnR4X3BoYXNlMV9kb25lKSB7CiAJCXRraXBfbWl4aW5nX3BoYXNlMSh0a2V5LT50eF90dGFrLCB0a2V5LT5rZXksIGhkci0+YWRkcjIsCiAJCQkJICAgdGtleS0+dHhfaXYzMik7CiAJCXRrZXktPnR4X3BoYXNlMV9kb25lID0gMTsKIAl9Ci0JcmM0a2V5ID0ga21hbGxvYygxNiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFyYzRrZXkpCi0JCXJldHVybiBOVUxMOwogCXRraXBfbWl4aW5nX3BoYXNlMihyYzRrZXksIHRrZXktPmtleSwgdGtleS0+dHhfdHRhaywgdGtleS0+dHhfaXYxNik7CiAKIAlsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW47CiAJcG9zID0gc2tiX3B1c2goc2tiLCA4KTsKIAltZW1tb3ZlKHBvcywgcG9zICsgOCwgaGRyX2xlbik7CiAJcG9zICs9IGhkcl9sZW47Ci0JaWN2ID0gc2tiX3B1dChza2IsIDQpOwogCiAJKnBvcysrID0gKnJjNGtleTsKIAkqcG9zKysgPSAqKHJjNGtleSArIDEpOwpAQCAtMzA5LDI4ICszMDcsMjggQEAKIAkqcG9zKysgPSAodGtleS0+dHhfaXYzMiA+PiAxNikgJiAweGZmOwogCSpwb3MrKyA9ICh0a2V5LT50eF9pdjMyID4+IDI0KSAmIDB4ZmY7CiAKLQljcmMgPSB+Y3JjMzJfbGUofjAsIHBvcywgbGVuKTsKLQlpY3ZbMF0gPSBjcmM7Ci0JaWN2WzFdID0gY3JjID4+IDg7Ci0JaWN2WzJdID0gY3JjID4+IDE2OwotCWljdlszXSA9IGNyYyA+PiAyNDsKKwl0a2V5LT50eF9pdjE2Kys7CisJaWYgKHRrZXktPnR4X2l2MTYgPT0gMCkgeworCQl0a2V5LT50eF9waGFzZTFfZG9uZSA9IDA7CisJCXRrZXktPnR4X2l2MzIrKzsKKwl9CiAKLQlyZXR1cm4gcmM0a2V5OworCXJldHVybiA4OwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV90a2lwX2VuY3J5cHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90a2lwX2RhdGEgKnRrZXkgPSBwcml2OwogCWludCBsZW47Ci0JY29uc3QgdTggKnJjNGtleTsKLQl1OCAqcG9zOworCXU4IHJjNGtleVsxNl0sICpwb3MsICppY3Y7CisJdTMyIGNyYzsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAKIAlpZiAodGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfQ1JZUFRPX1RLSVBfQ09VTlRFUk1FQVNVUkVTKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPQogCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCisJCQlwcmludGsoS0VSTl9ERUJVRyAiOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCiAJCQkgICAgICAgIlRYIHBhY2tldCB0byAiIE1BQ19GTVQgIlxuIiwKIAkJCSAgICAgICBNQUNfQVJHKGhkci0+YWRkcjEpKTsKIAkJfQpAQCAtMzQzLDIyICszNDEsMjMgQEAKIAlsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW47CiAJcG9zID0gc2tiLT5kYXRhICsgaGRyX2xlbjsKIAotCXJjNGtleSA9IGllZWU4MDIxMV90a2lwX2hkcihza2IsIGhkcl9sZW4sIHByaXYpOwotCWlmICghcmM0a2V5KQorCWlmICgoaWVlZTgwMjExX3RraXBfaGRyKHNrYiwgaGRyX2xlbiwgcmM0a2V5LCAxNiwgcHJpdikpIDwgMCkKIAkJcmV0dXJuIC0xOwogCisJaWN2ID0gc2tiX3B1dChza2IsIDQpOworCisJY3JjID0gfmNyYzMyX2xlKH4wLCBwb3MsIGxlbik7CisJaWN2WzBdID0gY3JjOworCWljdlsxXSA9IGNyYyA+PiA4OworCWljdlsyXSA9IGNyYyA+PiAxNjsKKwlpY3ZbM10gPSBjcmMgPj4gMjQ7CisKIAljcnlwdG9fY2lwaGVyX3NldGtleSh0a2V5LT50Zm1fYXJjNCwgcmM0a2V5LCAxNik7CiAJc2cucGFnZSA9IHZpcnRfdG9fcGFnZShwb3MpOwogCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7CiAJc2cubGVuZ3RoID0gbGVuICsgNDsKIAljcnlwdG9fY2lwaGVyX2VuY3J5cHQodGtleS0+dGZtX2FyYzQsICZzZywgJnNnLCBsZW4gKyA0KTsKIAotCXRrZXktPnR4X2l2MTYrKzsKLQlpZiAodGtleS0+dHhfaXYxNiA9PSAwKSB7Ci0JCXRrZXktPnR4X3BoYXNlMV9kb25lID0gMDsKLQkJdGtleS0+dHhfaXYzMisrOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0zNzksNyArMzc4LDcgQEAKIAogCWlmICh0a2V5LT5mbGFncyAmIElFRUU4MDIxMV9DUllQVE9fVEtJUF9DT1VOVEVSTUVBU1VSRVMpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVAgY291bnRlcm1lYXN1cmVzOiBkcm9wcGVkICIKKwkJCXByaW50ayhLRVJOX0RFQlVHICI6IFRLSVAgY291bnRlcm1lYXN1cmVzOiBkcm9wcGVkICIKIAkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UICJcbiIsCiAJCQkgICAgICAgTUFDX0FSRyhoZHItPmFkZHIyKSk7CiAJCX0KQEAgLTY5NSw2ICs2OTQsNyBAQAogCS5uYW1lID0gIlRLSVAiLAogCS5pbml0ID0gaWVlZTgwMjExX3RraXBfaW5pdCwKIAkuZGVpbml0ID0gaWVlZTgwMjExX3RraXBfZGVpbml0LAorCS5idWlsZF9pdiA9IGllZWU4MDIxMV90a2lwX2hkciwKIAkuZW5jcnlwdF9tcGR1ID0gaWVlZTgwMjExX3RraXBfZW5jcnlwdCwKIAkuZGVjcnlwdF9tcGR1ID0gaWVlZTgwMjExX3RraXBfZGVjcnlwdCwKIAkuZW5jcnlwdF9tc2R1ID0gaWVlZTgwMjExX21pY2hhZWxfbWljX2FkZCwKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKaW5kZXggZjhkY2EzMS4uNjQ5ZTU4MSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKQEAgLTc2LDcgKzc2LDggQEAKIH0KIAogLyogQWRkIFdFUCBJVi9rZXkgaW5mbyB0byBhIGZyYW1lIHRoYXQgaGFzIGF0IGxlYXN0IDQgYnl0ZXMgb2YgaGVhZHJvb20gKi8KLXN0YXRpYyBpbnQgcHJpc20yX3dlcF9idWlsZF9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbiwgdm9pZCAqcHJpdikKK3N0YXRpYyBpbnQgcHJpc20yX3dlcF9idWlsZF9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbiwKKwkJCSAgICAgICB1OCAqa2V5LCBpbnQga2V5bGVuLCB2b2lkICpwcml2KQogewogCXN0cnVjdCBwcmlzbTJfd2VwX2RhdGEgKndlcCA9IHByaXY7CiAJdTMyIGtsZW4sIGxlbjsKQEAgLTEzMSw3ICsxMzIsNyBAQAogCQlyZXR1cm4gLTE7CiAJCiAJLyogYWRkIHRoZSBJViB0byB0aGUgZnJhbWUgKi8KLQlpZiAocHJpc20yX3dlcF9idWlsZF9pdihza2IsIGhkcl9sZW4sIHByaXYpKQorCWlmIChwcmlzbTJfd2VwX2J1aWxkX2l2KHNrYiwgaGRyX2xlbiwgTlVMTCwgMCwgcHJpdikpCiAJCXJldHVybiAtMTsKIAkKIAkvKiBDb3B5IHRoZSBJViBpbnRvIHRoZSBmaXJzdCAzIGJ5dGVzIG9mIHRoZSBrZXkgKi8KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2dlby5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfZ2VvLmMKaW5kZXggNjEwY2M1Yy4uMTkyMjQzYSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfZ2VvLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfZ2VvLmMKQEAgLTUwLDcgKzUwLDggQEAKIAogCS8qIERyaXZlciBuZWVkcyB0byBpbml0aWFsaXplIHRoZSBnZW9ncmFwaHkgbWFwIGJlZm9yZSB1c2luZwogCSAqIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgKi8KLQlCVUdfT04oaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID09IDAgJiYgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgPT0gMCk7CisJaWYgKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApCisJCXJldHVybiAwOwogCiAJaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKQogCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmJnX2NoYW5uZWxzOyBpKyspCkBAIC01OCwxMyArNTksMTUgQEAKIAkJCSAqIHRoaXMgaXMgYSBCIG9ubHkgY2hhbm5lbCwgd2UgZG9uJ3Qgc2VlIGl0CiAJCQkgKiBhcyB2YWxpZC4gKi8KIAkJCWlmICgoaWVlZS0+Z2VvLmJnW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkgJiYKKwkJCSAgICAhKGllZWUtPmdlby5iZ1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9JTlZBTElEKSAmJgogCQkJICAgICghKGllZWUtPm1vZGUgJiBJRUVFX0cpIHx8CiAJCQkgICAgICEoaWVlZS0+Z2VvLmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX0JfT05MWSkpKQogCQkJCXJldHVybiBJRUVFODAyMTFfMjRHSFpfQkFORDsKIAogCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkKIAkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5hX2NoYW5uZWxzOyBpKyspCi0JCQlpZiAoaWVlZS0+Z2VvLmFbaV0uY2hhbm5lbCA9PSBjaGFubmVsKQorCQkJaWYgKChpZWVlLT5nZW8uYVtpXS5jaGFubmVsID09IGNoYW5uZWwpICYmCisJCQkgICAgIShpZWVlLT5nZW8uYVtpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9JTlZBTElEKSkKIAkJCQlyZXR1cm4gSUVFRTgwMjExXzUyR0haX0JBTkQ7CiAKIAlyZXR1cm4gMDsKQEAgLTc2LDcgKzc5LDggQEAKIAogCS8qIERyaXZlciBuZWVkcyB0byBpbml0aWFsaXplIHRoZSBnZW9ncmFwaHkgbWFwIGJlZm9yZSB1c2luZwogCSAqIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgKi8KLQlCVUdfT04oaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID09IDAgJiYgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgPT0gMCk7CisJaWYgKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApCisJCXJldHVybiAtMTsKIAogCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkKIAkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5iZ19jaGFubmVsczsgaSsrKQpAQCAtOTcsNyArMTAxLDggQEAKIAogCS8qIERyaXZlciBuZWVkcyB0byBpbml0aWFsaXplIHRoZSBnZW9ncmFwaHkgbWFwIGJlZm9yZSB1c2luZwogCSAqIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgKi8KLQlCVUdfT04oaWVlZS0+Z2VvLmJnX2NoYW5uZWxzID09IDAgJiYgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgPT0gMCk7CisJaWYgKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApCisJCXJldHVybiAwOwogCiAJZnJlcSAvPSAxMDAwMDA7CiAKQEAgLTEzMyw2ICsxMzgsNDEgQEAKIAlyZXR1cm4gJmllZWUtPmdlbzsKIH0KIAordTggaWVlZTgwMjExX2dldF9jaGFubmVsX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSwgdTggY2hhbm5lbCkKK3sKKwlpbnQgaW5kZXggPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChpZWVlLCBjaGFubmVsKTsKKworCWlmIChpbmRleCA9PSAtMSkKKwkJcmV0dXJuIElFRUU4MDIxMV9DSF9JTlZBTElEOworCisJaWYgKGNoYW5uZWwgPD0gSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTKQorCQlyZXR1cm4gaWVlZS0+Z2VvLmJnW2luZGV4XS5mbGFnczsKKworCXJldHVybiBpZWVlLT5nZW8uYVtpbmRleF0uZmxhZ3M7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYmFkX2NoYW5uZWwgPSB7CisJLmNoYW5uZWwgPSAwLAorCS5mbGFncyA9IElFRUU4MDIxMV9DSF9JTlZBTElELAorCS5tYXhfcG93ZXIgPSAwLAorfTsKKworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICppZWVlODAyMTFfZ2V0X2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UKKwkJCQkJCSAgICAgICppZWVlLCB1OCBjaGFubmVsKQoreworCWludCBpbmRleCA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KGllZWUsIGNoYW5uZWwpOworCisJaWYgKGluZGV4ID09IC0xKQorCQlyZXR1cm4gJmJhZF9jaGFubmVsOworCisJaWYgKGNoYW5uZWwgPD0gSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTKQorCQlyZXR1cm4gJmllZWUtPmdlby5iZ1tpbmRleF07CisKKwlyZXR1cm4gJmllZWUtPmdlby5hW2luZGV4XTsKK30KKworRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NoYW5uZWwpOworRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3MpOwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbCk7CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9mcmVxX3RvX2NoYW5uZWwpOwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleCk7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IDkwZDE4YjcuLjJjYjg0ZDggMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC04MiwxMCArODIsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBpZWVlODAyMTFfbmV0d29ya19yZXNldChzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCit7CisJaWYgKCFuZXR3b3JrKQorCQlyZXR1cm47CisKKwlpZiAobmV0d29yay0+aWJzc19kZnMpIHsKKwkJa2ZyZWUobmV0d29yay0+aWJzc19kZnMpOworCQluZXR3b3JrLT5pYnNzX2RmcyA9IE5VTEw7CisJfQorfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX25ldHdvcmtzX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CisJaW50IGk7CisKIAlpZiAoIWllZWUtPm5ldHdvcmtzKQogCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05FVFdPUktfQ09VTlQ7IGkrKykKKwkJaWYgKGllZWUtPm5ldHdvcmtzW2ldLmlic3NfZGZzKQorCQkJa2ZyZWUoaWVlZS0+bmV0d29ya3NbaV0uaWJzc19kZnMpOworCiAJa2ZyZWUoaWVlZS0+bmV0d29ya3MpOwogCWllZWUtPm5ldHdvcmtzID0gTlVMTDsKIH0KQEAgLTE5NSw3ICsyMTMsNyBAQAogCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWwgPSAwOwotc3RydWN0IHByb2NfZGlyX2VudHJ5ICppZWVlODAyMTFfcHJvYyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICppZWVlODAyMTFfcHJvYyA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgc2hvd19kZWJ1Z19sZXZlbChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCSAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggOTYwYWE3OC4uNjA0YjdiMCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0zNjksOCArMzY5LDggQEAKIAogCS8qIFB1dCB0aGlzIGNvZGUgaGVyZSBzbyB0aGF0IHdlIGF2b2lkIGR1cGxpY2F0aW5nIGl0IGluIGFsbAogCSAqIFJ4IHBhdGhzLiAtIEplYW4gSUkgKi8KKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAjaWZkZWYgSVdfV0lSRUxFU1NfU1BZCQkvKiBkZWZpbmVkIGluIGl3X2hhbmRsZXIuaCAqLwotI2lmZGVmIENPTkZJR19ORVRfUkFESU8KIAkvKiBJZiBzcHkgbW9uaXRvcmluZyBvbiAqLwogCWlmIChpZWVlLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkgewogCQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7CkBAIC0zOTcsOCArMzk3LDggQEAKIAkJLyogVXBkYXRlIHNweSByZWNvcmRzICovCiAJCXdpcmVsZXNzX3NweV91cGRhdGUoaWVlZS0+ZGV2LCBoZHItPmFkZHIyLCAmd3N0YXRzKTsKIAl9Ci0jZW5kaWYJCQkJLyogQ09ORklHX05FVF9SQURJTyAqLwogI2VuZGlmCQkJCS8qIElXX1dJUkVMRVNTX1NQWSAqLworI2VuZGlmCQkJCS8qIENPTkZJR19XSVJFTEVTU19FWFQgKi8KIAogI2lmZGVmIE5PVF9ZRVQKIAlob3N0YXBfdXBkYXRlX3J4X3N0YXRzKGxvY2FsLT5hcCwgaGRyLCByeF9zdGF0cyk7CkBAIC01NzQsNyArNTc0LDcgQEAKIAkvKiBza2I6IGhkciArIChwb3NzaWJseSBmcmFnbWVudGVkKSBwbGFpbnRleHQgcGF5bG9hZCAqLwogCS8vIFBSOiBGSVhNRTogaG9zdGFwIGhhcyBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgaW4gdGhlICJpZiIgYmVsb3c6CiAJLy8gaWVlZS0+aG9zdF9kZWNyeXB0ICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYKLQlpZiAoKGZyYWcgIT0gMCB8fCAoZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpKSkgeworCWlmICgoZnJhZyAhPSAwKSB8fCAoZmMgJiBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpKSB7CiAJCWludCBmbGVuOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2IgPSBpZWVlODAyMTFfZnJhZ19jYWNoZV9nZXQoaWVlZSwgaGRyKTsKIAkJSUVFRTgwMjExX0RFQlVHX0ZSQUcoIlJ4IEZyYWdtZW50IHJlY2VpdmVkICgldSlcbiIsIGZyYWcpOwpAQCAtNzU0LDcgKzc1NCwxNCBAQAogCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAkJc2tiLT5kZXYgPSBkZXY7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsJLyogODAyLjExIGNyYyBub3Qgc3VmZmljaWVudCAqLwotCQluZXRpZl9yeChza2IpOworCQlpZiAobmV0aWZfcngoc2tiKSA9PSBORVRfUlhfRFJPUCkgeworCQkJLyogbmV0aWZfcnggYWx3YXlzIHN1Y2NlZWRzLCBidXQgaXQgbWlnaHQgZHJvcAorCQkJICogdGhlIHBhY2tldC4gIElmIGl0IGRyb3BzIHRoZSBwYWNrZXQsIHdlIGxvZyB0aGF0CisJCQkgKiBpbiBvdXIgc3RhdHMuICovCisJCQlJRUVFODAyMTFfREVCVUdfRFJPUAorCQkJICAgICgiUlg6IG5ldGlmX3J4IGRyb3BwZWQgdGhlIHBhY2tldFxuIik7CisJCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQl9CiAJfQogCiAgICAgICByeF9leGl0OgpAQCAtNzczLDYgKzc4MCw4MCBAQAogCXJldHVybiAwOwogfQogCisvKiBGaWx0ZXIgb3V0IHVucmVsYXRlZCBwYWNrZXRzLCBjYWxsIGllZWU4MDIxMV9yeFtfbWd0XSAqLworaW50IGllZWU4MDIxMV9yeF9hbnkoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlpbnQgaXNfcGFja2V0X2Zvcl91czsKKwl1MTYgZmM7CisKKwlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpCisJCXJldHVybiBpZWVlODAyMTFfcngoaWVlZSwgc2tiLCBzdGF0cykgPyAwIDogLUVJTlZBTDsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKworCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9WRVJTKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkJCisJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKKwkJaWVlZTgwMjExX3J4X21ndChpZWVlLCBoZHIsIHN0YXRzKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpc19wYWNrZXRfZm9yX3VzID0gMDsKKwlzd2l0Y2ggKGllZWUtPml3X21vZGUpIHsKKwljYXNlIElXX01PREVfQURIT0M6CisJCS8qIG91ciBCU1MgYW5kIG5vdCBmcm9tL3RvIERTICovCisJCWlmIChtZW1jbXAoaGRyLT5hZGRyMywgaWVlZS0+YnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCQlpZiAoKGZjICYgKElFRUU4MDIxMV9GQ1RMX1RPRFMrSUVFRTgwMjExX0ZDVExfRlJPTURTKSkgPT0gMCkgeworCQkJLyogcHJvbWlzYzogZ2V0IGFsbCAqLworCQkJaWYgKGllZWUtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJCQlpc19wYWNrZXRfZm9yX3VzID0gMTsKKwkJCS8qIHRvIHVzICovCisJCQllbHNlIGlmIChtZW1jbXAoaGRyLT5hZGRyMSwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJCQkJaXNfcGFja2V0X2Zvcl91cyA9IDE7CisJCQkvKiBtY2FzdCAqLworCQkJZWxzZSBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCisJCQkJaXNfcGFja2V0X2Zvcl91cyA9IDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0lORlJBOgorCQkvKiBvdXIgQlNTICg9PSBmcm9tIG91ciBBUCkgYW5kIGZyb20gRFMgKi8KKwkJaWYgKG1lbWNtcChoZHItPmFkZHIyLCBpZWVlLT5ic3NpZCwgRVRIX0FMRU4pID09IDApCisJCWlmICgoZmMgJiAoSUVFRTgwMjExX0ZDVExfVE9EUytJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSA9PSBJRUVFODAyMTFfRkNUTF9GUk9NRFMpIHsKKwkJCS8qIHByb21pc2M6IGdldCBhbGwgKi8KKwkJCWlmIChpZWVlLT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCQkJaXNfcGFja2V0X2Zvcl91cyA9IDE7CisJCQkvKiB0byB1cyAqLworCQkJZWxzZSBpZiAobWVtY21wKGhkci0+YWRkcjEsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQkJCWlzX3BhY2tldF9mb3JfdXMgPSAxOworCQkJLyogbWNhc3QgKi8KKwkJCWVsc2UgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSB7CisJCQkJLyogbm90IG91ciBvd24gcGFja2V0IGJjYXN0ZWQgZnJvbSBBUCAqLworCQkJCWlmIChtZW1jbXAoaGRyLT5hZGRyMywgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCQkJCQlpc19wYWNrZXRfZm9yX3VzID0gMTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiA/ICovCisJCWJyZWFrOworCX0KKworCWlmIChpc19wYWNrZXRfZm9yX3VzKQorCQlyZXR1cm4gKGllZWU4MDIxMV9yeChpZWVlLCBza2IsIHN0YXRzKSA/IDAgOiAtRUlOVkFMKTsKKwlyZXR1cm4gMDsKK30KKwogI2RlZmluZSBNR01UX0ZSQU1FX0ZJWEVEX1BBUlRfTEVOR1RICQkweDI0CiAKIHN0YXRpYyB1OCBxb3Nfb3VpW1FPU19PVUlfTEVOXSA9IHsgMHgwMCwgMHg1MCwgMHhGMiB9OwpAQCAtOTMwLDYgKzEwMTEsNDUgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKyNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjZGVmaW5lIE1GSUVfU1RSSU5HKHgpIGNhc2UgTUZJRV9UWVBFXyAjI3g6IHJldHVybiAjeAorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2luZm9fZWxlbWVudF9zdHJpbmcodTE2IGlkKQoreworCXN3aXRjaCAoaWQpIHsKKwkJTUZJRV9TVFJJTkcoU1NJRCk7CisJCU1GSUVfU1RSSU5HKFJBVEVTKTsKKwkJTUZJRV9TVFJJTkcoRkhfU0VUKTsKKwkJTUZJRV9TVFJJTkcoRFNfU0VUKTsKKwkJTUZJRV9TVFJJTkcoQ0ZfU0VUKTsKKwkJTUZJRV9TVFJJTkcoVElNKTsKKwkJTUZJRV9TVFJJTkcoSUJTU19TRVQpOworCQlNRklFX1NUUklORyhDT1VOVFJZKTsKKwkJTUZJRV9TVFJJTkcoSE9QX1BBUkFNUyk7CisJCU1GSUVfU1RSSU5HKEhPUF9UQUJMRSk7CisJCU1GSUVfU1RSSU5HKFJFUVVFU1QpOworCQlNRklFX1NUUklORyhDSEFMTEVOR0UpOworCQlNRklFX1NUUklORyhQT1dFUl9DT05TVFJBSU5UKTsKKwkJTUZJRV9TVFJJTkcoUE9XRVJfQ0FQQUJJTElUWSk7CisJCU1GSUVfU1RSSU5HKFRQQ19SRVFVRVNUKTsKKwkJTUZJRV9TVFJJTkcoVFBDX1JFUE9SVCk7CisJCU1GSUVfU1RSSU5HKFNVUFBfQ0hBTk5FTFMpOworCQlNRklFX1NUUklORyhDU0EpOworCQlNRklFX1NUUklORyhNRUFTVVJFX1JFUVVFU1QpOworCQlNRklFX1NUUklORyhNRUFTVVJFX1JFUE9SVCk7CisJCU1GSUVfU1RSSU5HKFFVSUVUKTsKKwkJTUZJRV9TVFJJTkcoSUJTU19ERlMpOworCQlNRklFX1NUUklORyhFUlBfSU5GTyk7CisJCU1GSUVfU1RSSU5HKFJTTik7CisJCU1GSUVfU1RSSU5HKFJBVEVTX0VYKTsKKwkJTUZJRV9TVFJJTkcoR0VORVJJQyk7CisJCU1GSUVfU1RSSU5HKFFPU19QQVJBTUVURVIpOworCWRlZmF1bHQ6CisJCXJldHVybiAiVU5LTk9XTiI7CisJfQorfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgaWVlZTgwMjExX3BhcnNlX2luZm9fcGFyYW0oc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQKIAkJCQkgICAgICAqaW5mb19lbGVtZW50LCB1MTYgbGVuZ3RoLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKQEAgLTEwNDAsNyArMTE2MCw5IEBACiAJCQlicmVhazsKIAogCQljYXNlIE1GSUVfVFlQRV9USU06Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX1RJTTogaWdub3JlZFxuIik7CisJCQluZXR3b3JrLT50aW0udGltX2NvdW50ID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOworCQkJbmV0d29yay0+dGltLnRpbV9wZXJpb2QgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07CisJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX1RJTTogcGFydGlhbGx5IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBNRklFX1RZUEVfRVJQX0lORk86CkBAIC0xMDkxLDEwICsxMjEzLDQ5IEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiUW9TIEVycm9yIG5lZWQgdG8gcGFyc2UgUU9TX1BBUkFNRVRFUiBJRVxuIik7CiAJCQlicmVhazsKKwkJCS8qIDgwMi4xMWggKi8KKwkJY2FzZSBNRklFX1RZUEVfUE9XRVJfQ09OU1RSQUlOVDoKKwkJCW5ldHdvcmstPnBvd2VyX2NvbnN0cmFpbnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CisJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19QT1dFUl9DT05TVFJBSU5UOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklFX1RZUEVfQ1NBOgorCQkJbmV0d29yay0+cG93ZXJfY29uc3RyYWludCA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKKwkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX0NTQTsKKwkJCWJyZWFrOworCisJCWNhc2UgTUZJRV9UWVBFX1FVSUVUOgorCQkJbmV0d29yay0+cXVpZXQuY291bnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CisJCQluZXR3b3JrLT5xdWlldC5wZXJpb2QgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07CisJCQluZXR3b3JrLT5xdWlldC5kdXJhdGlvbiA9IGluZm9fZWxlbWVudC0+ZGF0YVsyXTsKKwkJCW5ldHdvcmstPnF1aWV0Lm9mZnNldCA9IGluZm9fZWxlbWVudC0+ZGF0YVszXTsKKwkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX1FVSUVUOworCQkJYnJlYWs7CisKKwkJY2FzZSBNRklFX1RZUEVfSUJTU19ERlM6CisJCQlpZiAobmV0d29yay0+aWJzc19kZnMpCisJCQkJYnJlYWs7CisJCQluZXR3b3JrLT5pYnNzX2RmcyA9CisJCQkgICAga21hbGxvYyhpbmZvX2VsZW1lbnQtPmxlbiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIW5ldHdvcmstPmlic3NfZGZzKQorCQkJCXJldHVybiAxOworCQkJbWVtY3B5KG5ldHdvcmstPmlic3NfZGZzLCBpbmZvX2VsZW1lbnQtPmRhdGEsCisJCQkgICAgICAgaW5mb19lbGVtZW50LT5sZW4pOworCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfSUJTU19ERlM7CisJCQlicmVhazsKKworCQljYXNlIE1GSUVfVFlQRV9UUENfUkVQT1JUOgorCQkJbmV0d29yay0+dHBjX3JlcG9ydC50cmFuc21pdF9wb3dlciA9CisJCQkgICAgaW5mb19lbGVtZW50LT5kYXRhWzBdOworCQkJbmV0d29yay0+dHBjX3JlcG9ydC5saW5rX21hcmdpbiA9IGluZm9fZWxlbWVudC0+ZGF0YVsxXTsKKwkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX1RQQ19SRVBPUlQ7CisJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInVuc3VwcG9ydGVkIElFICVkXG4iLAotCQkJCQkgICAgIGluZm9fZWxlbWVudC0+aWQpOworCQkJSUVFRTgwMjExX0RFQlVHX01HTVQKKwkJCSAgICAoIlVuc3VwcG9ydGVkIGluZm8gZWxlbWVudDogJXMgKCVkKVxuIiwKKwkJCSAgICAgZ2V0X2luZm9fZWxlbWVudF9zdHJpbmcoaW5mb19lbGVtZW50LT5pZCksCisJCQkgICAgIGluZm9fZWxlbWVudC0+aWQpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTExMCw3ICsxMjcxLDkgQEAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2hhbmRsZV9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlCiAJCQkJICAgICAgICpmcmFtZSwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIG5ldHdvcmtfcmVzcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgbmV0d29ya19yZXNwID0geworCQkuaWJzc19kZnMgPSBOVUxMLAorCX07CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gJm5ldHdvcmtfcmVzcDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwogCkBAIC0xMjUzLDcgKzE0MTYsMjIgQEAKIAlpbnQgcW9zX2FjdGl2ZTsKIAl1OCBvbGRfcGFyYW07CiAKLQltZW1jcHkoJmRzdC0+c3RhdHMsICZzcmMtPnN0YXRzLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cykpOworCWllZWU4MDIxMV9uZXR3b3JrX3Jlc2V0KGRzdCk7CisJZHN0LT5pYnNzX2RmcyA9IHNyYy0+aWJzc19kZnM7CisKKwkvKiBXZSBvbmx5IHVwZGF0ZSB0aGUgc3RhdGlzdGljcyBpZiB0aGV5IHdlcmUgY3JlYXRlZCBieSByZWNlaXZpbmcKKwkgKiB0aGUgbmV0d29yayBpbmZvcm1hdGlvbiBvbiB0aGUgYWN0dWFsIGNoYW5uZWwgdGhlIG5ldHdvcmsgaXMgb24uCisJICogCisJICogVGhpcyBrZWVwcyBiZWFjb25zIHJlY2VpdmVkIG9uIG5laWdoYm9yIGNoYW5uZWxzIGZyb20gYnJpbmdpbmcKKwkgKiBkb3duIHRoZSBzaWduYWwgbGV2ZWwgb2YgYW4gQVAuICovCisJaWYgKGRzdC0+Y2hhbm5lbCA9PSBzcmMtPnN0YXRzLnJlY2VpdmVkX2NoYW5uZWwpCisJCW1lbWNweSgmZHN0LT5zdGF0cywgJnNyYy0+c3RhdHMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cykpOworCWVsc2UKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIk5ldHdvcmsgIiBNQUNfRk1UICIgaW5mbyByZWNlaXZlZCAiCisJCQkib2ZmIGNoYW5uZWwgKCVkIHZzLiAlZClcbiIsIE1BQ19BUkcoc3JjLT5ic3NpZCksCisJCQlkc3QtPmNoYW5uZWwsIHNyYy0+c3RhdHMucmVjZWl2ZWRfY2hhbm5lbCk7CisKIAlkc3QtPmNhcGFiaWxpdHkgPSBzcmMtPmNhcGFiaWxpdHk7CiAJbWVtY3B5KGRzdC0+cmF0ZXMsIHNyYy0+cmF0ZXMsIHNyYy0+cmF0ZXNfbGVuKTsKIAlkc3QtPnJhdGVzX2xlbiA9IHNyYy0+cmF0ZXNfbGVuOwpAQCAtMTI2OSw2ICsxNDQ3LDcgQEAKIAlkc3QtPmxpc3Rlbl9pbnRlcnZhbCA9IHNyYy0+bGlzdGVuX2ludGVydmFsOwogCWRzdC0+YXRpbV93aW5kb3cgPSBzcmMtPmF0aW1fd2luZG93OwogCWRzdC0+ZXJwX3ZhbHVlID0gc3JjLT5lcnBfdmFsdWU7CisJZHN0LT50aW0gPSBzcmMtPnRpbTsKIAogCW1lbWNweShkc3QtPndwYV9pZSwgc3JjLT53cGFfaWUsIHNyYy0+d3BhX2llX2xlbik7CiAJZHN0LT53cGFfaWVfbGVuID0gc3JjLT53cGFfaWVfbGVuOwpAQCAtMTMwMSw3ICsxNDgwLDcgQEAKIAkvKiBkc3QtPmxhc3RfYXNzb2NpYXRlIGlzIG5vdCBvdmVyd3JpdHRlbiAqLwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19iZWFjb24oaW50IGZjKQorc3RhdGljIGlubGluZSBpbnQgaXNfYmVhY29uKF9fbGUxNiBmYykKIHsKIAlyZXR1cm4gKFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1KGZjKSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CiB9CkBAIC0xMzEzLDcgKzE0OTIsOSBAQAogCQkJCQkJICAgICpzdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayBuZXR3b3JrOworCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayBuZXR3b3JrID0geworCQkuaWJzc19kZnMgPSBOVUxMLAorCX07CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICp0YXJnZXQ7CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpvbGRlc3QgPSBOVUxMOwogI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKQEAgLTEzNDgsOSArMTUyOSw3IEBACiAJCQkJICAgICBlc2NhcGVfZXNzaWQoaW5mb19lbGVtZW50LT5kYXRhLAogCQkJCQkJICBpbmZvX2VsZW1lbnQtPmxlbiksCiAJCQkJICAgICBNQUNfQVJHKGJlYWNvbi0+aGVhZGVyLmFkZHIzKSwKLQkJCQkgICAgIGlzX2JlYWNvbihsZTE2X3RvX2NwdQotCQkJCQkgICAgICAgKGJlYWNvbi0+aGVhZGVyLgotCQkJCQkJZnJhbWVfY3RsKSkgPworCQkJCSAgICAgaXNfYmVhY29uKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPwogCQkJCSAgICAgIkJFQUNPTiIgOiAiUFJPQkUgUkVTUE9OU0UiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEzODgsNiArMTU2Nyw3IEBACiAJCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCQkgIHRhcmdldC0+c3NpZF9sZW4pLAogCQkJCQkgICAgIE1BQ19BUkcodGFyZ2V0LT5ic3NpZCkpOworCQkJaWVlZTgwMjExX25ldHdvcmtfcmVzZXQodGFyZ2V0KTsKIAkJfSBlbHNlIHsKIAkJCS8qIE90aGVyd2lzZSBqdXN0IHB1bGwgZnJvbSB0aGUgZnJlZSBsaXN0ICovCiAJCQl0YXJnZXQgPSBsaXN0X2VudHJ5KGllZWUtPm5ldHdvcmtfZnJlZV9saXN0Lm5leHQsCkBAIC0xNDAwLDMzICsxNTgwLDMxIEBACiAJCQkJICAgICBlc2NhcGVfZXNzaWQobmV0d29yay5zc2lkLAogCQkJCQkJICBuZXR3b3JrLnNzaWRfbGVuKSwKIAkJCQkgICAgIE1BQ19BUkcobmV0d29yay5ic3NpZCksCi0JCQkJICAgICBpc19iZWFjb24obGUxNl90b19jcHUKLQkJCQkJICAgICAgIChiZWFjb24tPmhlYWRlci4KLQkJCQkJCWZyYW1lX2N0bCkpID8KKwkJCQkgICAgIGlzX2JlYWNvbihiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID8KIAkJCQkgICAgICJCRUFDT04iIDogIlBST0JFIFJFU1BPTlNFIik7CiAjZW5kaWYKIAkJbWVtY3B5KHRhcmdldCwgJm5ldHdvcmssIHNpemVvZigqdGFyZ2V0KSk7CisJCW5ldHdvcmsuaWJzc19kZnMgPSBOVUxMOwogCQlsaXN0X2FkZF90YWlsKCZ0YXJnZXQtPmxpc3QsICZpZWVlLT5uZXR3b3JrX2xpc3QpOwogCX0gZWxzZSB7CiAJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJVcGRhdGluZyAnJXMnICgiIE1BQ19GTVQgIikgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZCh0YXJnZXQtPnNzaWQsCiAJCQkJCQkgIHRhcmdldC0+c3NpZF9sZW4pLAogCQkJCSAgICAgTUFDX0FSRyh0YXJnZXQtPmJzc2lkKSwKLQkJCQkgICAgIGlzX2JlYWNvbihsZTE2X3RvX2NwdQotCQkJCQkgICAgICAgKGJlYWNvbi0+aGVhZGVyLgotCQkJCQkJZnJhbWVfY3RsKSkgPworCQkJCSAgICAgaXNfYmVhY29uKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPwogCQkJCSAgICAgIkJFQUNPTiIgOiAiUFJPQkUgUkVTUE9OU0UiKTsKIAkJdXBkYXRlX25ldHdvcmsodGFyZ2V0LCAmbmV0d29yayk7CisJCW5ldHdvcmsuaWJzc19kZnMgPSBOVUxMOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChpc19iZWFjb24obGUxNl90b19jcHUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSkpIHsKKwlpZiAoaXNfYmVhY29uKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkpIHsKIAkJaWYgKGllZWUtPmhhbmRsZV9iZWFjb24gIT0gTlVMTCkKLQkJCWllZWUtPmhhbmRsZV9iZWFjb24oZGV2LCBiZWFjb24sICZuZXR3b3JrKTsKKwkJCWllZWUtPmhhbmRsZV9iZWFjb24oZGV2LCBiZWFjb24sIHRhcmdldCk7CiAJfSBlbHNlIHsKIAkJaWYgKGllZWUtPmhhbmRsZV9wcm9iZV9yZXNwb25zZSAhPSBOVUxMKQotCQkJaWVlZS0+aGFuZGxlX3Byb2JlX3Jlc3BvbnNlKGRldiwgYmVhY29uLCAmbmV0d29yayk7CisJCQlpZWVlLT5oYW5kbGVfcHJvYmVfcmVzcG9uc2UoZGV2LCBiZWFjb24sIHRhcmdldCk7CiAJfQogfQogCkBAIC0xNTAxLDEwICsxNjc5LDQzIEBACiAJCQkJCSAgICAgIGhlYWRlcik7CiAJCWJyZWFrOwogCisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgorCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiQUNUSU9OXG4iKTsKKwkJaWYgKGllZWUtPmhhbmRsZV9hY3Rpb24pCisJCQlpZWVlLT5oYW5kbGVfYWN0aW9uKGllZWUtPmRldiwKKwkJCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbiAqKQorCQkJCQkgICAgaGVhZGVyLCBzdGF0cyk7CisJCWJyZWFrOworCisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVE6CisJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJyZWNlaXZlZCByZWFzc29jICglZClcbiIsCisJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdQorCQkJCQkJICAgICAgIChoZWFkZXItPmZyYW1lX2N0bCkpKTsKKworCQlJRUVFODAyMTFfV0FSTklORygiJXM6IElFRUU4MDIxMV9SRUFTU09DX1JFUSByZWNlaXZlZFxuIiwKKwkJCQkgIGllZWUtPmRldi0+bmFtZSk7CisJCWlmIChpZWVlLT5oYW5kbGVfcmVhc3NvY19yZXF1ZXN0ICE9IE5VTEwpCisJCQlpZWVlLT5oYW5kbGVfcmVhc3NvY19yZXF1ZXN0KGllZWUtPmRldiwKKwkJCQkJCSAgICAoc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3QgKikKKwkJCQkJCSAgICAgaGVhZGVyKTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVE6CisJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJyZWNlaXZlZCBhc3NvYyAoJWQpXG4iLAorCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKKwkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CisKKwkJSUVFRTgwMjExX1dBUk5JTkcoIiVzOiBJRUVFODAyMTFfQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAorCQkJCSAgaWVlZS0+ZGV2LT5uYW1lKTsKKwkJaWYgKGllZWUtPmhhbmRsZV9hc3NvY19yZXF1ZXN0ICE9IE5VTEwpCisJCQlpZWVlLT5oYW5kbGVfYXNzb2NfcmVxdWVzdChpZWVlLT5kZXYpOworCQlicmVhazsKKwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKLQkJcHJpbnRrKCJERUFVVEggZnJvbSBBUFxuIik7CisJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJERUFVVEhcbiIpOwogCQlpZiAoaWVlZS0+aGFuZGxlX2RlYXV0aCAhPSBOVUxMKQotCQkJaWVlZS0+aGFuZGxlX2RlYXV0aChpZWVlLT5kZXYsIChzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKikKKwkJCWllZWUtPmhhbmRsZV9kZWF1dGgoaWVlZS0+ZGV2LAorCQkJCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfZGVhdXRoICopCiAJCQkJCSAgICBoZWFkZXIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggOGZkZDk0My4uOGI0MzMyZiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC01Niw3ICs1NiwxOCBAQAogICAgICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICAgIHwtLS0tLS0nCiBUb3RhbDogMjggbm9uLWRhdGEgYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLS0tLS4tLS0tJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgLi0gJ0ZyYW1lIGRhdGEnIGV4cGFuZHMgdG8gPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKyAgICAgICAuLSAnRnJhbWUgZGF0YScgZXhwYW5kcywgaWYgV0VQIGVuYWJsZWQsIHRvIDwtLS0tLS0tLS0tJworICAgICAgIHwKKyAgICAgICBWCisgICAgICAsLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCitCeXRlcyB8ICA0ICB8ICAgMC0yMjk2ICB8ICA0ICB8CisgICAgICB8LS0tLS18LS0tLS0tLS0tLS18LS0tLS18CitEZXNjLiB8IElWICB8IEVuY3J5cHRlZCB8IElDViB8CisgICAgICB8ICAgICB8IFBhY2tldCAgICB8ICAgICB8CisgICAgICBgLS0tLS18ICAgICAgICAgICB8LS0tLS0nCisgICAgICAgICAgICBgLS0tLS0uLS0tLS0nCisgICAgICAgICAgICAgICAgICB8CisgICAgICAgLi0gJ0VuY3J5cHRlZCBQYWNrZXQnIGV4cGFuZHMgdG8KICAgICAgICB8CiAgICAgICAgVgogICAgICAgLC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTY1LDE4ICs3Niw3IEBACiBEZXNjLiB8IFNOQVAgfCBTTkFQIHwgQ29udHJvbCB8RXRoIFR1bm5lbHwgVHlwZSB8IElQICAgICAgfAogICAgICAgfCBEU0FQIHwgU1NBUCB8ICAgICAgICAgfCAgICAgICAgICB8ICAgICAgfCBQYWNrZXQgIHwKICAgICAgIHwgMHhBQSB8IDB4QUEgfDB4MDMgKFVJKXwweDAwLTAwLUY4fCAgICAgIHwgICAgICAgICB8Ci0gICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgfAotVG90YWw6IDggbm9uLWRhdGEgYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgYC0tLS0uLS0tLScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgIC4tICdJUCBQYWNrZXQnIGV4cGFuZHMsIGlmIFdFUCBlbmFibGVkLCB0byA8LS0nCi0gICAgICAgfAotICAgICAgIFYKLSAgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLUJ5dGVzIHwgIDQgIHwgICAwLTIyOTYgIHwgIDQgIHwKLSAgICAgIHwtLS0tLXwtLS0tLS0tLS0tLXwtLS0tLXwKLURlc2MuIHwgSVYgIHwgRW5jcnlwdGVkIHwgSUNWIHwKLSAgICAgIHwgICAgIHwgSVAgUGFja2V0IHwgICAgIHwKLSAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKyAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUb3RhbDogOCBub24tZGF0YSBieXRlcwogCiA4MDIuMyBFdGhlcm5ldCBEYXRhIEZyYW1lCkBAIC00NzAsNyArNDcwLDkgQEAKIAkJCWF0b21pY19pbmMoJmNyeXB0LT5yZWZjbnQpOwogCQkJaWYgKGNyeXB0LT5vcHMtPmJ1aWxkX2l2KQogCQkJCWNyeXB0LT5vcHMtPmJ1aWxkX2l2KHNrYl9mcmFnLCBoZHJfbGVuLAotCQkJCQkJICAgICBjcnlwdC0+cHJpdik7CisJCQkJICAgICAgaWVlZS0+c2VjLmtleXNbaWVlZS0+c2VjLmFjdGl2ZV9rZXldLAorCQkJCSAgICAgIGllZWUtPnNlYy5rZXlfc2l6ZXNbaWVlZS0+c2VjLmFjdGl2ZV9rZXldLAorCQkJCSAgICAgIGNyeXB0LT5wcml2KTsKIAkJCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IGY4N2M2YjguLmFmN2Y5YmIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMTQ5LDkgKzE0OSw3IEBACiAJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRCB8CiAJCSAgICBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CiAJCWl3ZS51LnF1YWwucXVhbCA9IDA7Ci0JCWl3ZS51LnF1YWwubGV2ZWwgPSAwOwogCX0gZWxzZSB7Ci0JCWl3ZS51LnF1YWwubGV2ZWwgPSBuZXR3b3JrLT5zdGF0cy5yc3NpOwogCQlpZiAoaWVlZS0+cGVyZmVjdF9yc3NpID09IGllZWUtPndvcnN0X3Jzc2kpCiAJCQlpd2UudS5xdWFsLnF1YWwgPSAxMDA7CiAJCWVsc2UKQEAgLTE3OSw2ICsxNzcsMTMgQEAKIAkJaXdlLnUucXVhbC5ub2lzZSA9IG5ldHdvcmstPnN0YXRzLm5vaXNlOwogCX0KIAorCWlmICghKG5ldHdvcmstPnN0YXRzLm1hc2sgJiBJRUVFODAyMTFfU1RBVE1BU0tfU0lHTkFMKSkgeworCQlpd2UudS5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9JTlZBTElEOworCQlpd2UudS5xdWFsLmxldmVsID0gMDsKKwl9IGVsc2UgeworCQlpd2UudS5xdWFsLmxldmVsID0gbmV0d29yay0+c3RhdHMuc2lnbmFsOworCX0KKwogCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKIAogCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwpAQCAtMTg4LDMzICsxOTMsMjEgQEAKIAlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCiAJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7CiAKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwogCWlmIChuZXR3b3JrLT53cGFfaWVfbGVuKSB7Ci0JCWNoYXIgYnVmW01BWF9XUEFfSUVfTEVOICogMiArIDMwXTsKLQotCQl1OCAqcCA9IGJ1ZjsKLQkJcCArPSBzcHJpbnRmKHAsICJ3cGFfaWU9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBuZXR3b3JrLT53cGFfaWVfbGVuOyBpKyspIHsKLQkJCXAgKz0gc3ByaW50ZihwLCAiJTAyeCIsIG5ldHdvcmstPndwYV9pZVtpXSk7Ci0JCX0KLQotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJY2hhciBidWZbTUFYX1dQQV9JRV9MRU5dOworCQltZW1jcHkoYnVmLCBuZXR3b3JrLT53cGFfaWUsIG5ldHdvcmstPndwYV9pZV9sZW4pOworCQlpd2UuY21kID0gSVdFVkdFTklFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IG5ldHdvcmstPndwYV9pZV9sZW47CiAJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIGJ1Zik7CiAJfQogCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAlpZiAobmV0d29yay0+cnNuX2llX2xlbikgewotCQljaGFyIGJ1ZltNQVhfV1BBX0lFX0xFTiAqIDIgKyAzMF07Ci0KLQkJdTggKnAgPSBidWY7Ci0JCXAgKz0gc3ByaW50ZihwLCAicnNuX2llPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbmV0d29yay0+cnNuX2llX2xlbjsgaSsrKSB7Ci0JCQlwICs9IHNwcmludGYocCwgIiUwMngiLCBuZXR3b3JrLT5yc25faWVbaV0pOwotCQl9Ci0KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCWNoYXIgYnVmW01BWF9XUEFfSUVfTEVOXTsKKwkJbWVtY3B5KGJ1ZiwgbmV0d29yay0+cnNuX2llLCBuZXR3b3JrLT5yc25faWVfbGVuKTsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXR3b3JrLT5yc25faWVfbGVuOwogCQlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwogCX0KIApAQCAtMjI5LDYgKzIyMiwyOCBAQAogCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKIAkJc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgY3VzdG9tKTsKIAorCS8qIEFkZCBzcGVjdHJ1bSBtYW5hZ2VtZW50IGluZm9ybWF0aW9uICovCisJaXdlLmNtZCA9IC0xOworCXAgPSBjdXN0b207CisJcCArPSBzbnByaW50ZihwLCBNQVhfQ1VTVE9NX0xFTiAtIChwIC0gY3VzdG9tKSwgIiBDaGFubmVsIGZsYWdzOiAiKTsKKworCWlmIChpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3MoaWVlZSwgbmV0d29yay0+Y2hhbm5lbCkgJgorCSAgICBJRUVFODAyMTFfQ0hfSU5WQUxJRCkgeworCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJcCArPSBzbnByaW50ZihwLCBNQVhfQ1VTVE9NX0xFTiAtIChwIC0gY3VzdG9tKSwgIklOVkFMSUQgIik7CisJfQorCisJaWYgKGllZWU4MDIxMV9nZXRfY2hhbm5lbF9mbGFncyhpZWVlLCBuZXR3b3JrLT5jaGFubmVsKSAmCisJICAgIElFRUU4MDIxMV9DSF9SQURBUl9ERVRFQ1QpIHsKKwkJaXdlLmNtZCA9IElXRVZDVVNUT007CisJCXAgKz0gc25wcmludGYocCwgTUFYX0NVU1RPTV9MRU4gLSAocCAtIGN1c3RvbSksICJERlMgIik7CisJfQorCisJaWYgKGl3ZS5jbWQgPT0gSVdFVkNVU1RPTSkgeworCQlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207CisJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7CisJfQorCiAJcmV0dXJuIHN0YXJ0OwogfQogCkBAIC03MzQsOSArNzQ5LDk4IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBpZWVlODAyMTFfd3hfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jaywgZmxhZ3MpOworCQorCXN3aXRjaCAod3JxdS0+cGFyYW0uZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKKwljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJCS8qCisJCSAqIEhvc3QgQVAgZHJpdmVyIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzIGFuZCBhbGxvd3MKKwkJICogd3BhX3N1cHBsaWNhbnQgdG8gY29udHJvbCB0aGVtIGludGVybmFsbHkuCisJCSAqLworCQlicmVhazsKKwljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6CisJCWJyZWFrOwkJLyogRklYTUUgKi8KKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKwkJaWVlZS0+ZHJvcF91bmVuY3J5cHRlZCA9ICEhd3JxdS0+cGFyYW0udmFsdWU7CisJCWJyZWFrOworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJYnJlYWs7CQkvKiBGSVhNRSAqLworCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKwkJaWVlZS0+cHJpdmFjeV9pbnZva2VkID0gaWVlZS0+d3BhX2VuYWJsZWQgPSAhIXdycXUtPnBhcmFtLnZhbHVlOworCQlicmVhazsKKwljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CisJCWllZWUtPmllZWU4MDJfMXggPSAhIXdycXUtPnBhcmFtLnZhbHVlOworCQlicmVhazsKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQlpZWVlLT5wcml2YWN5X2ludm9rZWQgPSAhIXdycXUtPnBhcmFtLnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaWVlZTgwMjExX3d4X2dldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKKwkKKwlzd2l0Y2ggKHdycXUtPnBhcmFtLmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCWNhc2UgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUzoJCS8qIEZJWE1FICovCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgkJCS8qIEZJWE1FICovCisJCS8qCisJCSAqIEhvc3QgQVAgZHJpdmVyIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzIGFuZCBhbGxvd3MKKwkJICogd3BhX3N1cHBsaWNhbnQgdG8gY29udHJvbCB0aGVtIGludGVybmFsbHkuCisJCSAqLworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCXdycXUtPnBhcmFtLnZhbHVlID0gaWVlZS0+ZHJvcF91bmVuY3J5cHRlZDsKKwkJYnJlYWs7CisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQl3cnF1LT5wYXJhbS52YWx1ZSA9IGllZWUtPndwYV9lbmFibGVkOworCQlicmVhazsKKwljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CisJCXdycXUtPnBhcmFtLnZhbHVlID0gaWVlZS0+aWVlZTgwMl8xeDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2VuY29kZWV4dCk7CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KTsKIAogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X3NjYW4pOwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2VuY29kZSk7CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKTsKKworRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX3d4X3NldF9hdXRoKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV93eF9nZXRfYXV0aCk7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDlmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACitjb25maWcgSUVFRTgwMjExX1NPRlRNQUMKKwl0cmlzdGF0ZSAiU29mdHdhcmUgTUFDIGFkZC1vbiB0byB0aGUgSUVFRSA4MDIuMTEgbmV0d29ya2luZyBzdGFjayIKKwlkZXBlbmRzIG9uIElFRUU4MDIxMSAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgc29mdHdhcmUgTUFDIGFkZG9uCisJZm9yIHRoZSBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrLgorCitjb25maWcgSUVFRTgwMjExX1NPRlRNQUNfREVCVUcKKwlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IgorCWRlcGVuZHMgb24gSUVFRTgwMjExX1NPRlRNQUMKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9NYWtlZmlsZSBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmNiMzkxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorb2JqLSQoQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDKSArPSBpZWVlODAyMTFzb2Z0bWFjLm8KK2llZWU4MDIxMXNvZnRtYWMtb2JqcyA6PSBcCisJCQlpZWVlODAyMTFzb2Z0bWFjX2lvLm8gXAorCQkJaWVlZTgwMjExc29mdG1hY19hdXRoLm8gXAorCQkJaWVlZTgwMjExc29mdG1hY19tb2R1bGUubyBcCisJCQlpZWVlODAyMTFzb2Z0bWFjX3NjYW4ubyBcCisJCQlpZWVlODAyMTFzb2Z0bWFjX3d4Lm8gXAorCQkJaWVlZTgwMjExc29mdG1hY19hc3NvYy5vIFwKKwkJCWllZWU4MDIxMXNvZnRtYWNfZXZlbnQubwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2MWRlNzgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hc3NvYy5jCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzb2Z0bWFjJ3MgYXNzb2NpYXRpb24gbG9naWMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKKyNpbmNsdWRlICJpZWVlODAyMTFzb2Z0bWFjX3ByaXYuaCIKKworLyoKKyAqIE92ZXJ2aWV3CisgKgorICogQmVmb3JlIHlvdSBjYW4gYXNzb2NpYXRlLCB5b3UgaGF2ZSB0byBhdXRoZW50aWNhdGUuCisgKiAKKyAqLworCisvKiBTZW5kcyBvdXQgYW4gYXNzb2NpYXRpb24gcmVxdWVzdCB0byB0aGUgZGVzaXJlZCBBUCAqLworc3RhdGljIHZvaWQKK2llZWU4MDIxMXNvZnRtYWNfYXNzb2Moc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogU3dpdGNoIHRvIGNvcnJlY3QgY2hhbm5lbCBmb3IgdGhpcyBuZXR3b3JrICovCisJbWFjLT5zZXRfY2hhbm5lbChtYWMtPmRldiwgbmV0LT5jaGFubmVsKTsKKwkKKwkvKiBTZW5kIGFzc29jaWF0aW9uIHJlcXVlc3QgKi8KKwlpZWVlODAyMTFzb2Z0bWFjX3NlbmRfbWd0X2ZyYW1lKG1hYywgbmV0LCBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRLCAwKTsKKwkKKwlkcHJpbnRrKEtFUk5fSU5GTyBQRlggInNlbnQgYXNzb2NpYXRpb24gcmVxdWVzdCFcbiIpOworCisJLyogQ2hhbmdlIHRoZSBzdGF0ZSB0byBhc3NvY2lhdGluZyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDE7CisJbWFjLT5hc3NvY2lhdGVkID0gMDsgLyoganVzdCB0byBtYWtlIHN1cmUgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKworCS8qIFNldCBhIHRpbWVyIGZvciB0aW1lb3V0ICovCisJLyogRklYTUU6IG1ha2UgdGltZW91dCBjb25maWd1cmFibGUgKi8KKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1hYy0+YXNzb2NpbmZvLnRpbWVvdXQsIDUgKiBIWik7Cit9CisKK3ZvaWQKK2llZWU4MDIxMXNvZnRtYWNfYXNzb2NfdGltZW91dCh2b2lkICpkKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqKWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkvKiB3ZSBtaWdodCByYWNlIGFnYWluc3QgaWVlZTgwMjExc29mdG1hY19oYW5kbGVfYXNzb2NfcmVzcG9uc2UsCisJICogc28gbWFrZSBzdXJlIG9ubHkgb25lIG9mIHVzIGRvZXMgc29tZXRoaW5nICovCisJaWYgKCFtYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7CisJbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAwOworCW1hYy0+YXNzb2NpYXRlZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyBQRlggImFzc29jIHJlcXVlc3QgdGltZWQgb3V0IVxuIik7CisJLyogRklYTUU6IHdlIG5lZWQgdG8ga25vdyB0aGUgbmV0d29yayBoZXJlLiB0aGF0IHJlcXVpcmVzIGEgYml0IG9mIHJlc3RydWN0dXJpbmcgKi8KKwlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfVElNRU9VVCwgTlVMTCk7Cit9CisKKy8qIFNlbmRzIG91dCBhIGRpc2Fzc29jaWF0aW9uIHJlcXVlc3QgdG8gdGhlIGRlc2lyZWQgQVAgKi8KK3N0YXRpYyB2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1MTYgcmVhc29uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqZm91bmQ7CisKKwlpZiAobWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgJiYgbWFjLT5hc3NvY2lhdGVkKSB7CisJCWZvdW5kID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChtYWMsIG1hYy0+YXNzb2NpbmZvLmJzc2lkKTsKKwkJaWYgKGZvdW5kKQorCQkJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShtYWMsIGZvdW5kLCBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MsIHJlYXNvbik7CisJfSBlbHNlIGlmIChtYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZykgeworCQljYW5jZWxfZGVsYXllZF93b3JrKCZtYWMtPmFzc29jaW5mby50aW1lb3V0KTsKKwl9CisKKwkvKiBDaGFuZ2Ugb3VyIHN0YXRlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCS8qIERvIE5PVCBjbGVhciBic3N2YWxpZCBhcyB0aGF0IHdpbGwgYnJlYWsgaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrISAqLworCW1hYy0+YXNzb2NpYXRlZCA9IDA7CisJbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludAord2Vfc3VwcG9ydF9hbGxfYmFzaWNfcmF0ZXMoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4ICpmcm9tLCB1OCBmcm9tX2xlbikKK3sKKwlpbnQgaWR4LCBzZWFyY2gsIGZvdW5kOworCXU4IHJhdGUsIHNlYXJjaF9yYXRlOworCisJZm9yIChpZHggPSAwOyBpZHggPCAoZnJvbV9sZW4pOyBpZHgrKykgeworCQlyYXRlID0gKGZyb20pW2lkeF07CisJCWlmICghKHJhdGUgJiBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSkKKwkJCWNvbnRpbnVlOworCQlmb3VuZCA9IDA7CisJCXJhdGUgJj0gfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0s7CisJCWZvciAoc2VhcmNoID0gMDsgc2VhcmNoIDwgbWFjLT5yYXRlc2luZm8uY291bnQ7IHNlYXJjaCsrKSB7CisJCQlzZWFyY2hfcmF0ZSA9IG1hYy0+cmF0ZXNpbmZvLnJhdGVzW3NlYXJjaF07CisJCQlzZWFyY2hfcmF0ZSAmPSB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSzsKKwkJCWlmIChyYXRlID09IHNlYXJjaF9yYXRlKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghZm91bmQpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK25ldHdvcmtfbWF0Y2hlc19yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldCkKK3sKKwkvKiB3ZSBjYW5ub3QgYXNzb2NpYXRlIHRvIG5ldHdvcmtzIHdob3NlIG5hbWUgd2UgZG9uJ3Qga25vdyAqLworCWlmIChpZWVlODAyMTFfaXNfZW1wdHlfZXNzaWQobmV0LT5zc2lkLCBuZXQtPnNzaWRfbGVuKSkKKwkJcmV0dXJuIDA7CisJLyogZG8gbm90IGFzc29jaWF0ZSB0byBhIG5ldHdvcmsgd2hvc2UgQlNTQmFzaWNSYXRlU2V0IHdlIGNhbm5vdCBzdXBwb3J0ICovCisJaWYgKCF3ZV9zdXBwb3J0X2FsbF9iYXNpY19yYXRlcyhtYWMsIG5ldC0+cmF0ZXMsIG5ldC0+cmF0ZXNfbGVuKSkKKwkJcmV0dXJuIDA7CisJLyogZG8gd2UgcmVhbGx5IG5lZWQgdG8gY2hlY2sgdGhlIGV4IHJhdGVzPyAqLworCWlmICghd2Vfc3VwcG9ydF9hbGxfYmFzaWNfcmF0ZXMobWFjLCBuZXQtPnJhdGVzX2V4LCBuZXQtPnJhdGVzX2V4X2xlbikpCisJCXJldHVybiAwOworCisJLyogaWYgJ0FOWScgbmV0d29yayByZXF1ZXN0ZWQsIHRha2UgYW55IHRoYXQgZG9lc24ndCBoYXZlIHByaXZhY3kgZW5hYmxlZCAqLworCWlmIChtYWMtPmFzc29jaW5mby5yZXFfZXNzaWQubGVuID09IDAgCisJICAgICYmICEobmV0LT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKQorCQlyZXR1cm4gMTsKKwlpZiAobmV0LT5zc2lkX2xlbiAhPSBtYWMtPmFzc29jaW5mby5yZXFfZXNzaWQubGVuKQorCQlyZXR1cm4gMDsKKwlpZiAoIW1lbWNtcChuZXQtPnNzaWQsIG1hYy0+YXNzb2NpbmZvLnJlcV9lc3NpZC5kYXRhLCBtYWMtPmFzc29jaW5mby5yZXFfZXNzaWQubGVuKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3dvcmsoKHZvaWQqKW1hYyk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGhhbmRsZSB1c2Vyc3BhY2UgcmVxdWVzdHMgKGFzeW5jaHJvbm91c2x5KSAqLwordm9pZAoraWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKHZvaWQgKmQpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICopZDsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpmb3VuZCA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXQgPSBOVUxMLCAqYmVzdCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwkvKiBtZWggKi8KKwlpZiAobWFjLT5hc3NvY2lhdGVkKQorCQlpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jKG1hYywgV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUKTsKKworCS8qIHRyeSB0byBmaW5kIHRoZSByZXF1ZXN0ZWQgbmV0d29yayBpbiBvdXIgbGlzdCwgaWYgd2UgZm91bmQgb25lIGFscmVhZHkgKi8KKwlpZiAobWFjLT5hc3NvY2luZm8uYnNzdmFsaWQpCisJCWZvdW5kID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChtYWMsIG1hYy0+YXNzb2NpbmZvLmJzc2lkKTsJCisJCisJLyogU2VhcmNoIHRoZSBpZWVlODAyMTEgbmV0d29ya3MgZm9yIHRoaXMgbmV0d29yayBpZiB3ZSBkaWRuJ3QgZmluZCBpdCBieSBic3NpZCwKKwkgKiBidXQgb25seSBpZiB3ZSd2ZSBzY2FubmVkIGF0IGxlYXN0IG9uY2UgKHRvIGdldCBhIGJldHRlciBsaXN0IG9mIG5ldHdvcmtzIHRvCisJICogc2VsZWN0IGZyb20pLiBJZiB3ZSBoYXZlIG5vdCBzY2FubmVkIGJlZm9yZSwgdGhlICFmb3VuZCBsb2dpYyBiZWxvdyB3aWxsIGJlCisJICogaW52b2tlZCBhbmQgd2lsbCBzY2FuLiAqLworCWlmICghZm91bmQgJiYgKG1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnkgPCBJRUVFODAyMTFTT0ZUTUFDX0FTU09DX1NDQU5fUkVUUllfTElNSVQpKQorCXsKKwkJczggcnNzaSA9IC0xMjg7CS8qIGlmIEkgZG9uJ3QgaW5pdGlhbGlzZSwgZ2NjIGVtaXRzIGFuIGludmFsaWQgd2FybmluZworCQkJCSAgIGJlY2F1c2UgaXQgY2Fubm90IGZvbGxvdyB0aGUgYmVzdCBwb2ludGVyIGxvZ2ljLiAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5pZWVlLT5sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCAmbWFjLT5pZWVlLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKKwkJCS8qIHdlJ3JlIHN1cHBvc2VkIHRvIGZpbmQgdGhlIG5ldHdvcmsgd2l0aAorCQkJICogdGhlIGJlc3Qgc2lnbmFsIGhlcmUsIGFzIHdlJ3JlIGFza2VkIHRvIGpvaW4KKwkJCSAqIGFueSBuZXR3b3JrIHdpdGggYSBzcGVjaWZpYyBFU1NJRCwgYW5kIG1hbnkKKwkJCSAqIGRpZmZlcmVudCBvbmVzIGNvdWxkIGhhdmUgdGhhdC4KKwkJCSAqCisJCQkgKiBJJ2xsIGZvciBub3cganVzdCBnbyB3aXRoIHRoZSByZXBvcnRlZCByc3NpLgorCQkJICoKKwkJCSAqIFdlIGFsc28gc2hvdWxkIHRha2UgaW50byBhY2NvdW50IHRoZSByYXRlc2V0CisJCQkgKiBoZXJlIHRvIGZpbmQgdGhlIGJlc3QgQlNTSUQgdG8gdHJ5LgorCQkJICovCisJCQlpZiAobmV0d29ya19tYXRjaGVzX3JlcXVlc3QobWFjLCBuZXQpKSB7CisJCQkJaWYgKCFiZXN0KSB7CisJCQkJCWJlc3QgPSBuZXQ7CisJCQkJCXJzc2kgPSBiZXN0LT5zdGF0cy5yc3NpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJLyogd2UgYWxyZWFkeSBoYWQgYSBtYXRjaGluZyBuZXR3b3JrLCBzbworCQkJCSAqIGNvbXBhcmUgdGhlaXIgcHJvcGVydGllcyB0byBnZXQgdGhlCisJCQkJICogYmV0dGVyIG9mIHRoZSB0d28gLi4uIChzZWUgYWJvdmUpCisJCQkJICovCisJCQkJaWYgKHJzc2kgPCBuZXQtPnN0YXRzLnJzc2kpIHsKKwkJCQkJYmVzdCA9IG5ldDsKKwkJCQkJcnNzaSA9IGJlc3QtPnN0YXRzLnJzc2k7CisJCQkJfQorCQkJfQorCQl9CisJCS8qIGlmIHdlIHVubG9jayBoZXJlLCB3ZSBtaWdodCBnZXQgaW50ZXJydXB0ZWQgYW5kIHRoZSBgYmVzdCcKKwkJICogcG9pbnRlciBjb3VsZCBnbyBzdGFsZSAqLworCQlpZiAoYmVzdCkgeworCQkJZm91bmQgPSBpZWVlODAyMTFzb2Z0bWFjX2NyZWF0ZV9uZXR3b3JrKG1hYywgYmVzdCk7CisJCQkvKiBpZiBmb3VuZCBpcyBzdGlsbCBOVUxMLCB0aGVuIHdlIGdvdCAtRU5PTUVNIHNvbWV3aGVyZSAqLworCQkJaWYgKGZvdW5kKQorCQkJCWllZWU4MDIxMXNvZnRtYWNfYWRkX25ldHdvcmsobWFjLCBmb3VuZCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5pZWVlLT5sb2NrLCBmbGFncyk7CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlpZiAobWFjLT5hc3NvY2luZm8uc2Nhbl9yZXRyeSA+IDApIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJCW1hYy0+YXNzb2NpbmZvLnNjYW5fcmV0cnktLTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQkKKwkJCS8qIFdlIGtub3cgb2Ygbm8gc3VjaCBuZXR3b3JrLiBMZXQncyBzY2FuLiAKKwkJCSAqIE5COiB0aGlzIGFsc28gaGFwcGVucyBpZiB3ZSBoYWQgbm8gbWVtb3J5IHRvIGNvcHkgdGhlIG5ldHdvcmsgaW5mby4uLgorCQkJICogTWF5YmUgd2UgY2FuIGhvcGUgdG8gaGF2ZSBtb3JlIG1lbW9yeSBhZnRlciBzY2FubmluZyBmaW5pc2hlcyA7KQorCQkJICovCisJCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFzc29jaWF0ZTogU2Nhbm5pbmcgZm9yIG5ldHdvcmtzIGZpcnN0LlxuIik7CisJCQlpZWVlODAyMTFzb2Z0bWFjX25vdGlmeShtYWMtPmRldiwgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9TQ0FOX0ZJTklTSEVELCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX25vdGlmeSwgTlVMTCk7CisJCQlpZiAoaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuKG1hYykpCisJCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJBc3NvY2lhdGU6IGZhaWxlZCB0byBpbml0aWF0ZSBzY2FuLiBJcyBkZXZpY2UgdXA/XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQllbHNlIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKKwkJCW1hYy0+YXNzb2NpYXRlZCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKworCQkJZHByaW50ayhLRVJOX0lORk8gUEZYICJVbmFibGUgdG8gZmluZCBtYXRjaGluZyBuZXR3b3JrIGFmdGVyIHNjYW4hXG4iKTsKKwkJCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURV9ORVRfTk9UX0ZPVU5ELCBOVUxMKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkKKwltYWMtPmFzc29jaW5mby5ic3N2YWxpZCA9IDE7CisJbWVtY3B5KG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBmb3VuZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwkvKiBjb3B5IHRoZSBFU1NJRCBmb3IgZGlzcGxheWluZyBpdCAqLworCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0ZV9lc3NpZC5sZW4gPSBmb3VuZC0+ZXNzaWQubGVuOworCW1lbWNweShtYWMtPmFzc29jaW5mby5hc3NvY2lhdGVfZXNzaWQuZGF0YSwgZm91bmQtPmVzc2lkLmRhdGEsIElXX0VTU0lEX01BWF9TSVpFICsgMSk7CisJCisJLyogd2UgZm91bmQgYSBuZXR3b3JrISBhdXRoZW50aWNhdGUgKGlmIG5lY2Vzc2FyeSkgYW5kIGFzc29jaWF0ZSB0byBpdC4gKi8KKwlpZiAoIWZvdW5kLT5hdXRoZW50aWNhdGVkKSB7CisJCS8qIFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgX2F1dGhfcmVxIG9ubHkgcXVldWVzIHRoZSB3b3JrLAorCQkgKiBvdGhlcndpc2UgYWRkaW5nIHRoZSBub3RpZmljYXRpb24gd291bGQgYmUgcmFjeS4gKi8KKwkJaWYgKCFpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcmVxKG1hYywgZm91bmQpKSB7CisJCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggImNhbm5vdCBhc3NvY2lhdGUgd2l0aG91dCBiZWluZyBhdXRoZW50aWNhdGVkLCByZXF1ZXN0ZWQgYXV0aGVudGljYXRpb25cbiIpOworCQkJaWVlZTgwMjExc29mdG1hY19ub3RpZnlfaW50ZXJuYWwobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FOWSwgZm91bmQsIGllZWU4MDIxMXNvZnRtYWNfYXNzb2Nfbm90aWZ5LCBOVUxMLCBHRlBfS0VSTkVMKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50a2woS0VSTl9XQVJOSU5HIFBGWCAiTm90IGF1dGhlbnRpY2F0ZWQsIGJ1dCByZXF1ZXN0aW5nIGF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gR2l2aW5nIHVwIHRvIGFzc29jaWF0ZVxuIik7CisJCQlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BU1NPQ0lBVEVfRkFJTEVELCBmb3VuZCk7CisJCX0KKwkJcmV0dXJuOworCX0KKwkvKiBmaW5hbGx5ISBub3cgd2UgY2FuIHN0YXJ0IGFzc29jaWF0aW5nICovCisJaWVlZTgwMjExc29mdG1hY19hc3NvYyhtYWMsIGZvdW5kKTsKK30KKworLyogY2FsbCB0aGlzIHRvIGRvIHdoYXRldmVyIGlzIG5lY2Vzc2FyeSB3aGVuIHdlJ3JlIGFzc29jaWF0ZWQgKi8KK3N0YXRpYyB2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2Fzc29jaWF0ZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSAqIHJlc3AsCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KQoreworCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKKwltYWMtPmFzc29jaWF0ZWQgPSAxOworCWlmIChtYWMtPnNldF9ic3NpZF9maWx0ZXIpCisJCW1hYy0+c2V0X2Jzc2lkX2ZpbHRlcihtYWMtPmRldiwgbmV0LT5ic3NpZCk7CisJbWVtY3B5KG1hYy0+aWVlZS0+YnNzaWQsIG5ldC0+YnNzaWQsIEVUSF9BTEVOKTsKKwluZXRpZl9jYXJyaWVyX29uKG1hYy0+ZGV2KTsKKwkKKwltYWMtPmFzc29jaWF0aW9uX2lkID0gbGUxNl90b19jcHVwKCZyZXNwLT5haWQpOworfQorCisvKiByZWNlaXZlZCBmcmFtZSBoYW5kbGluZyBmdW5jdGlvbnMgKi8KK2ludAoraWVlZTgwMjExc29mdG1hY19oYW5kbGVfYXNzb2NfcmVzcG9uc2Uoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKiByZXNwLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBfaWVlZTgwMjExX25ldHdvcmtfZG9fbm90X3VzZSkKK3sKKwkvKiBOT1RFOiB0aGUgbmV0d29yayBwYXJhbWV0ZXIgaGFzIHRvIGJlIGlnbm9yZWQgYnkKKwkgKiAgICAgICB0aGlzIGNvZGUgYmVjYXVzZSBpdCBpcyB0aGUgaWVlZTgwMjExJ3MgcG9pbnRlcgorCSAqICAgICAgIHRvIHRoZSBzdHJ1Y3QsIG5vdCBvdXJzICh3ZSBtYWRlIGEgY29weSkKKwkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisJdTE2IHN0YXR1cyA9IGxlMTZfdG9fY3B1cCgmcmVzcC0+c3RhdHVzKTsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKworCWlmICghbWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcpIHsKKwkJLyogd2UgcmFjZSBhZ2FpbnN0IHRoZSB0aW1lb3V0IGZ1bmN0aW9uLCBzbyBtYWtlIHN1cmUKKwkJICogb25seSBvbmUgb2YgdXMgY2FuIGRvIHdvcmsgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwluZXR3b3JrID0gaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZF9sb2NrZWQobWFjLCByZXNwLT5oZWFkZXIuYWRkcjMpOworCisJLyogc29tZW9uZSBzZW5kaW5nIHVzIHRoaW5ncyB3aXRob3V0IHVzIGtub3dpbmcgaGltPyBJZ25vcmUuICovCisJaWYgKCFuZXR3b3JrKSB7CisJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiUmVjZWl2ZWQgdW5yZXF1ZXN0ZWQgYXNzb2NhdGlvbiByZXNwb25zZSBmcm9tICIgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKHJlc3AtPmhlYWRlci5hZGRyMykpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogbm93IHRoYXQgd2Uga25vdyBpdCB3YXMgZm9yIHVzLCB3ZSBjYW4gY2FuY2VsIHRoZSB0aW1lb3V0ICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmbWFjLT5hc3NvY2luZm8udGltZW91dCk7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCQljYXNlIDA6CisJCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggImFzc29jaWF0ZWQhXG4iKTsKKwkJCWllZWU4MDIxMXNvZnRtYWNfYXNzb2NpYXRlZChtYWMsIHJlc3AsIG5ldHdvcmspOworCQkJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQobWFjLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX0FTU09DSUFURUQsIG5ldHdvcmspOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9SRUFTT05fU1RBX1JFUV9BU1NPQ19XSVRIT1VUX0FVVEg6CisJCQlpZiAoIW5ldHdvcmstPmF1dGhfZGVzeW5jZWRfb25jZSkgeworCQkJCS8qIHRoZXJlIHNlZW0gdG8gYmUgYSBmZXcgcmFyZSBjYXNlcyB3aGVyZSBvdXIgdmlldyBvZgorCQkJCSAqIHRoZSB3b3JsZCBpcyBvYnNjdXJlZCwgb3IgYnVnZ3kgQVBzIHRoYXQgZG9uJ3QgREVBVVRICisJCQkJICogdXMgcHJvcGVybHkuIFNvIHdlIGhhbmRsZSB0aGF0LCBidXQgYWxsb3cgaXQgb25seSBvbmNlLgorCQkJCSAqLworCQkJCXByaW50a2woS0VSTl9JTkZPIFBGWCAiV2Ugd2VyZSBub3QgYXV0aGVudGljYXRlZCBkdXJpbmcgYXNzb2NpYXRpb24sIHJldHJ5aW5nLi4uXG4iKTsKKwkJCQluZXR3b3JrLT5hdXRoZW50aWNhdGVkID0gMDsKKwkJCQkvKiB3ZSBkb24ndCB3YW50IHRvIGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgLi4uICovCisJCQkJbmV0d29yay0+YXV0aF9kZXN5bmNlZF9vbmNlID0gMTsKKwkJCQlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiYXNzb2NpYXRpbmcgZmFpbGVkIChyZWFzb246IDB4JXgpIVxuIiwgc3RhdHVzKTsKKwkJCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKKwkJCW1hYy0+YXNzb2NpbmZvLmJzc3ZhbGlkID0gMDsKKwkJCW1hYy0+YXNzb2NpYXRlZCA9IDA7CisJCQlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVNTT0NJQVRFX0ZBSUxFRCwgbmV0d29yayk7CisJfQorCQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitpbnQKK2llZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICpkaXNhc3NvYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAobWVtY21wKGRpc2Fzc29jLT5oZWFkZXIuYWRkcjIsIG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBFVEhfQUxFTikpCisJCXJldHVybiAwOworCWlmIChtZW1jbXAoZGlzYXNzb2MtPmhlYWRlci5hZGRyMSwgbWFjLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCisJCXJldHVybiAwOworCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiZ290IGRpc2Fzc29jIGZyYW1lXG4iKTsKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwltYWMtPmFzc29jaW5mby5ic3N2YWxpZCA9IDA7CisJbWFjLT5hc3NvY2lhdGVkID0gMDsKKwlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkKKwlyZXR1cm4gMDsKK30KKworaW50CitpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9yZWFzc29jX3JlcShzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3QgKiByZXNwKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXR3b3JrOworCisJbmV0d29yayA9IGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWQobWFjLCByZXNwLT5oZWFkZXIuYWRkcjMpOworCWlmICghbmV0d29yaykgeworCQlkcHJpbnRrbChLRVJOX0lORk8gUEZYICJyZWFzc29jIHJlcXVlc3QgZnJvbSB1bmtub3duIG5ldHdvcmtcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWVlZTgwMjExc29mdG1hY19hc3NvYyhtYWMsIG5ldHdvcmspOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMGVhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hdXRoLmMKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNvZnRtYWMncyBhdXRoZW50aWNhdGlvbiBsb2dpYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBKb3NlcGggSmV6YWsgPGpvc2VqeEBnZW50b28ub3JnPgorICogICAgICAgICAgICAgICAgICAgICAgICAgIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBEYW5ueSB2YW4gRHlrIDxrdWdlbGZhbmdAZ2VudG9vLm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKworI2luY2x1ZGUgImllZWU4MDIxMXNvZnRtYWNfcHJpdi5oIgorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcXVldWUodm9pZCAqZGF0YSk7CisKKy8qIFF1ZXVlcyBhbiBhdXRoIHJlcXVlc3QgdG8gdGhlIGRlc2lyZWQgQVAgKi8KK2ludAoraWVlZTgwMjExc29mdG1hY19hdXRoX3JlcShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcXVldWVfaXRlbSAqYXV0aDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWlmIChuZXQtPmF1dGhlbnRpY2F0aW5nKQorCQlyZXR1cm4gMDsKKworCS8qIEFkZCB0aGUgbmV0d29yayBpZiBpdCdzIG5vdCBhbHJlYWR5IGFkZGVkICovCisJaWVlZTgwMjExc29mdG1hY19hZGRfbmV0d29yayhtYWMsIG5ldCk7CisKKwlkcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiUXVldWVpbmcgQXV0aGVudGljYXRpb24gUmVxdWVzdCB0byAiTUFDX0ZNVCJcbiIsIE1BQ19BUkcobmV0LT5ic3NpZCkpOworCS8qIFF1ZXVlIHRoZSBhdXRoIHJlcXVlc3QgKi8KKwlhdXRoID0gKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcXVldWVfaXRlbSAqKQorCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0pLCBHRlBfS0VSTkVMKTsKKwlpZihhdXRoID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYXV0aC0+bmV0ID0gbmV0OworCWF1dGgtPm1hYyA9IG1hYzsKKwlhdXRoLT5yZXRyeSA9IElFRUU4MDIxMVNPRlRNQUNfQVVUSF9SRVRSWV9MSU1JVDsKKwlhdXRoLT5zdGF0ZSA9IElFRUU4MDIxMVNPRlRNQUNfQVVUSF9PUEVOX1JFUVVFU1Q7CisJSU5JVF9XT1JLKCZhdXRoLT53b3JrLCAmaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlLCAodm9pZCAqKWF1dGgpOworCQorCS8qIExvY2sgKGZvciBsaXN0KSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKworCS8qIGFkZCB0byBsaXN0ICovCisJbGlzdF9hZGRfdGFpbCgmYXV0aC0+bGlzdCwgJm1hYy0+YXV0aF9xdWV1ZSk7CisJc2NoZWR1bGVfd29yaygmYXV0aC0+d29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCisJcmV0dXJuIDA7Cit9CisKKworLyogU2VuZHMgYW4gYXV0aCByZXF1ZXN0IHRvIHRoZSBkZXNpcmVkIEFQIGFuZCBoYW5kbGVzIHRpbWVvdXRzICovCitzdGF0aWMgdm9pZAoraWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWM7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphdXRoOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYXV0aCA9IChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0gKilkYXRhOworCW5ldCA9IGF1dGgtPm5ldDsKKwltYWMgPSBhdXRoLT5tYWM7CisKKwlpZihhdXRoLT5yZXRyeSA+IDApIHsKKwkJLyogU3dpdGNoIHRvIGNvcnJlY3QgY2hhbm5lbCBmb3IgdGhpcyBuZXR3b3JrICovCisJCW1hYy0+c2V0X2NoYW5uZWwobWFjLT5kZXYsIG5ldC0+Y2hhbm5lbCk7CisJCQorCQkvKiBMb2NrIGFuZCBzZXQgZmxhZ3MgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQluZXQtPmF1dGhlbnRpY2F0ZWQgPSAwOworCQluZXQtPmF1dGhlbnRpY2F0aW5nID0gMTsKKwkJLyogYWRkIGEgdGltZW91dCBjYWxsIHNvIHdlIGV2ZW50dWFsbHkgZ2l2ZSB1cCB3YWl0aW5nIGZvciBhbiBhdXRoIHJlcGx5ICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYXV0aC0+d29yaywgSUVFRTgwMjExU09GVE1BQ19BVVRIX1RJTUVPVVQpOworCQlhdXRoLT5yZXRyeS0tOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGllZWU4MDIxMXNvZnRtYWNfc2VuZF9tZ3RfZnJhbWUobWFjLCBhdXRoLT5uZXQsIElFRUU4MDIxMV9TVFlQRV9BVVRILCBhdXRoLT5zdGF0ZSkpCisJCQlkcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiU2VuZGluZyBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IHRvICJNQUNfRk1UIiBmYWlsZWQgKHRoaXMgc2hvdWxkbid0IGhhcHBlbiwgd2FpdCBmb3IgdGhlIHRpbWVvdXQpLlxuIiwgTUFDX0FSRyhuZXQtPmJzc2lkKSk7CisJCWVsc2UKKwkJCWRwcmludGsoS0VSTl9OT1RJQ0UgUEZYICJTZW50IEF1dGhlbnRpY2F0aW9uIFJlcXVlc3QgdG8gIk1BQ19GTVQiLlxuIiwgTUFDX0FSRyhuZXQtPmJzc2lkKSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGtsKEtFUk5fV0FSTklORyBQRlggIkF1dGhlbnRpY2F0aW9uIHRpbWVkIG91dCB3aXRoICJNQUNfRk1UIlxuIiwgTUFDX0FSRyhuZXQtPmJzc2lkKSk7CisJLyogUmVtb3ZlIHRoaXMgaXRlbSBmcm9tIHRoZSBxdWV1ZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfQVVUSF9USU1FT1VULCBuZXQpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmF1dGgtPndvcmspOyAvKiBqdXN0IHRvIG1ha2Ugc3VyZS4uLiAqLworCWxpc3RfZGVsKCZhdXRoLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkvKiBGcmVlIGl0ICovCisJa2ZyZWUoYXV0aCk7Cit9CisKKy8qIEhhbmRsZSB0aGUgYXV0aCByZXNwb25zZSBmcm9tIHRoZSBBUAorICogVGhpcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIGllZWU4MDIxMSBhcyBoYW5kbGVfYXV0aCAKKyAqLworaW50IAoraWVlZTgwMjExc29mdG1hY19hdXRoX3Jlc3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWU4MDIxMV9hdXRoICphdXRoKQorewkKKworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcHRyOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0gKmFxID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggKiBkYXRhOworCQorCS8qIEZpbmQgY29ycmVjdCBhdXRoIHF1ZXVlIGl0ZW0gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaChsaXN0X3B0ciwgJm1hYy0+YXV0aF9xdWV1ZSkgeworCQlhcSA9IGxpc3RfZW50cnkobGlzdF9wdHIsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcXVldWVfaXRlbSwgbGlzdCk7CisJCW5ldCA9IGFxLT5uZXQ7CisJCWlmICghbWVtY21wKG5ldC0+YnNzaWQsIGF1dGgtPmhlYWRlci5hZGRyMiwgRVRIX0FMRU4pKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCWFxID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCisJLyogTWFrZSBzdXJlIHRoYXQgd2UndmUgZ290IGFuIGF1dGggcXVldWUgaXRlbSBmb3IgdGhpcyByZXF1ZXN0ICovCisJaWYoYXEgPT0gTlVMTCkKKwl7CisJCXByaW50a2woS0VSTl9ERUJVRyBQRlggIkF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gIk1BQ19GTVQiIGJ1dCBubyBxdWV1ZSBpdGVtIGV4aXN0cy5cbiIsIE1BQ19BUkcoYXV0aC0+aGVhZGVyLmFkZHIyKSk7CisJCS8qIEVycm9yICM/ICovCisJCXJldHVybiAtMTsKKwl9CQkJCisJCisJLyogQ2hlY2sgZm9yIG91dCBvZiBvcmRlciBhdXRoZW50aWNhdGlvbiAqLworCWlmKCFuZXQtPmF1dGhlbnRpY2F0aW5nKQorCXsKKwkJcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiQXV0aGVudGljYXRpb24gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSAiTUFDX0ZNVCIgYnV0IGRpZCBub3QgcmVxdWVzdCBhdXRoZW50aWNhdGlvbi5cbiIsTUFDX0FSRyhhdXRoLT5oZWFkZXIuYWRkcjIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFBhcnNlIHRoZSBhdXRoIHBhY2tldCAqLworCXN3aXRjaChhdXRoLT5hbGdvcml0aG0pIHsKKwljYXNlIFdMQU5fQVVUSF9PUEVOOgorCQkvKiBDaGVjayB0aGUgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlICovCisKKwkJc3dpdGNoKGF1dGgtPnN0YXR1cykgeworCQljYXNlIFdMQU5fU1RBVFVTX1NVQ0NFU1M6CisJCQkvKiBVcGRhdGUgdGhlIHN0YXR1cyB0byBBdXRoZW50aWNhdGVkICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCSAgICAgICAgbmV0LT5hdXRoZW50aWNhdGluZyA9IDA7CisJCQluZXQtPmF1dGhlbnRpY2F0ZWQgPSAxOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCQkKKwkJCS8qIFNlbmQgZXZlbnQgKi8KKwkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJPcGVuIEF1dGhlbnRpY2F0aW9uIGNvbXBsZXRlZCB3aXRoICJNQUNfRk1UIlxuIiwgTUFDX0FSRyhuZXQtPmJzc2lkKSk7CisJCQlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKG1hYywgSUVFRTgwMjExU09GVE1BQ19FVkVOVF9BVVRIRU5USUNBVEVELCBuZXQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBMb2NrIGFuZCByZXNldCBmbGFncyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQkJbmV0LT5hdXRoZW50aWNhdGVkID0gMDsKKwkJCW5ldC0+YXV0aGVudGljYXRpbmcgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCQkKKwkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJPcGVuIEF1dGhlbnRpY2F0aW9uIHdpdGggIk1BQ19GTVQiIGZhaWxlZCwgZXJyb3IgY29kZTogJWlcbiIsIAorCQkJCU1BQ19BUkcobmV0LT5ic3NpZCksIGxlMTZfdG9fY3B1cCgmYXV0aC0+c3RhdHVzKSk7CisJCQkvKiBDb3VudCB0aGUgZXJyb3I/ICovCisJCQlicmVhazsKKwkJfQorCQlnb3RvIGZyZWVfYXE7CisJCWJyZWFrOworCWNhc2UgV0xBTl9BVVRIX1NIQVJFRF9LRVk6CisJCS8qIEZpZ3VyZSBvdXQgd2hlcmUgd2UgYXJlIGluIHRoZSBwcm9jZXNzICovCisJCXN3aXRjaChhdXRoLT50cmFuc2FjdGlvbikgeworCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfQVVUSF9TSEFSRURfQ0hBTExFTkdFOgorCQkJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBjaGFsbGVuZ2UgSUUgKi8KKwkJCWRhdGEgPSAodTggKilhdXRoLT5pbmZvX2VsZW1lbnQ7CisJCQlpZigqZGF0YSsrICE9IE1GSUVfVFlQRV9DSEFMTEVOR0UpeworCQkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJTaGFyZWQgS2V5IEF1dGhlbnRpY2F0aW9uIGZhaWxlZCBkdWUgdG8gYSBtaXNzaW5nIGNoYWxsZW5nZS5cbiIpOworCQkJCWJyZWFrOwkKKwkJCX0KKwkJCS8qIFNhdmUgdGhlIGNoYWxsZW5nZSAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQkJbmV0LT5jaGFsbGVuZ2VfbGVuID0gKmRhdGErKzsgCQorCQkJaWYobmV0LT5jaGFsbGVuZ2VfbGVuID4gV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4pCisJCQkJbmV0LT5jaGFsbGVuZ2VfbGVuID0gV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU47CisJCQlpZihuZXQtPmNoYWxsZW5nZSAhPSBOVUxMKQorCQkJCWtmcmVlKG5ldC0+Y2hhbGxlbmdlKTsKKwkJCW5ldC0+Y2hhbGxlbmdlID0ga21hbGxvYyhuZXQtPmNoYWxsZW5nZV9sZW4sIEdGUF9BVE9NSUMpOworCQkJbWVtY3B5KG5ldC0+Y2hhbGxlbmdlLCBkYXRhLCBuZXQtPmNoYWxsZW5nZV9sZW4pOworCQkJYXEtPnN0YXRlID0gSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9SRVNQT05TRTsgCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKworCQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgY2hhbm5lbCBmb3IgdGhpcyBuZXR3b3JrICovCisJCQltYWMtPnNldF9jaGFubmVsKG1hYy0+ZGV2LCBuZXQtPmNoYW5uZWwpOworCQkJCisJCQkvKiBTZW5kIG91ciByZXNwb25zZSAoSG93IHRvIGVuY3J5cHQ/KSAqLworCQkJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShtYWMsIGFxLT5uZXQsIElFRUU4MDIxMV9TVFlQRV9BVVRILCBhcS0+c3RhdGUpOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9QQVNTOgorCQkJLyogQ2hlY2sgdGhlIHN0YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZSAqLworCQkJc3dpdGNoKGF1dGgtPnN0YXR1cykgeworCQkJY2FzZSBXTEFOX1NUQVRVU19TVUNDRVNTOgorCQkJCS8qIFVwZGF0ZSB0aGUgc3RhdHVzIHRvIEF1dGhlbnRpY2F0ZWQgKi8JCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQkJCW5ldC0+YXV0aGVudGljYXRpbmcgPSAwOworCQkJCW5ldC0+YXV0aGVudGljYXRlZCA9IDE7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCQkJcHJpbnRrbChLRVJOX05PVElDRSBQRlggIlNoYXJlZCBLZXkgQXV0aGVudGljYXRpb24gY29tcGxldGVkIHdpdGggIk1BQ19GTVQiXG4iLCAKKwkJCQkJTUFDX0FSRyhuZXQtPmJzc2lkKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJTaGFyZWQgS2V5IEF1dGhlbnRpY2F0aW9uIHdpdGggIk1BQ19GTVQiIGZhaWxlZCwgZXJyb3IgY29kZTogJWlcbiIsIAorCQkJCQlNQUNfQVJHKG5ldC0+YnNzaWQpLCBsZTE2X3RvX2NwdXAoJmF1dGgtPnN0YXR1cykpOworCQkJCS8qIExvY2sgYW5kIHJlc2V0IGZsYWdzICovCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworIAkJCQluZXQtPmF1dGhlbnRpY2F0aW5nID0gMDsKKyAJCQkJbmV0LT5hdXRoZW50aWNhdGVkID0gMDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJCQkvKiBDb3VudCB0aGUgZXJyb3I/ICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlnb3RvIGZyZWVfYXE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50a2woS0VSTl9XQVJOSU5HIFBGWCAiVW5oYW5kbGVkIEF1dGhlbnRpY2F0aW9uIFN0ZXA6ICVpXG4iLCBhdXRoLT50cmFuc2FjdGlvbik7CisJCQlicmVhazsKKwkJfQorCQlnb3RvIGZyZWVfYXE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIEVSUk9SICovCQorCQlnb3RvIGZyZWVfYXE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK2ZyZWVfYXE6CisJLyogQ2FuY2VsIHRoZSB0aW1lb3V0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmFxLT53b3JrKTsKKwkvKiBSZW1vdmUgdGhpcyBpdGVtIGZyb20gdGhlIHF1ZXVlICovCisJbGlzdF9kZWwoJmFxLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKworCS8qIEZyZWUgaXQgKi8KKwlrZnJlZShhcSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVhdXRob3JpemF0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9mcm9tX25ldChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphcSA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIExvY2sgYW5kIHJlc2V0IHN0YXR1cyBmbGFncyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwluZXQtPmF1dGhlbnRpY2F0aW5nID0gMDsKKwluZXQtPmF1dGhlbnRpY2F0ZWQgPSAwOworCQorCS8qIEZpbmQgY29ycmVjdCBhdXRoIHF1ZXVlIGl0ZW0sIGlmIGl0IGV4aXN0cyAqLworCWxpc3RfZm9yX2VhY2gobGlzdF9wdHIsICZtYWMtPmF1dGhfcXVldWUpIHsKKwkJYXEgPSBsaXN0X2VudHJ5KGxpc3RfcHRyLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19hdXRoX3F1ZXVlX2l0ZW0sIGxpc3QpOworCQlpZiAoIW1lbWNtcChuZXQtPmJzc2lkLCBhcS0+bmV0LT5ic3NpZCwgRVRIX0FMRU4pKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCWFxID0gTlVMTDsKKwl9CisJCisJLyogQ2FuY2VsIHBlbmRpbmcgd29yayAqLworCWlmKGFxICE9IE5VTEwpCisJCS8qIE5vdCBlbnRpcmVseSBzYWZlPyAgV2hhdCBhYm91dCBydW5uaW5nIHdvcms/ICovCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmFxLT53b3JrKTsKKworCS8qIEZyZWUgb3VyIG5ldHdvcmsgcmVmICovCisJaWVlZTgwMjExc29mdG1hY19kZWxfbmV0d29ya19sb2NrZWQobWFjLCBuZXQpOworCWlmKG5ldC0+Y2hhbGxlbmdlICE9IE5VTEwpCisJCWtmcmVlKG5ldC0+Y2hhbGxlbmdlKTsKKwlrZnJlZShuZXQpOworCQorCS8qIGNhbid0IHRyYW5zbWl0IGRhdGEgcmlnaHQgbm93Li4uICovCisJbmV0aWZfY2Fycmllcl9vZmYobWFjLT5kZXYpOworCS8qIGxldCdzIHRyeSB0byByZS1hc3NvY2lhdGUgKi8KKwlzY2hlZHVsZV93b3JrKCZtYWMtPmFzc29jaW5mby53b3JrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKK30KKworLyogCisgKiBTZW5kcyBhIGRlYXV0aCByZXF1ZXN0IHRvIHRoZSBkZXNpcmVkIEFQCisgKi8KK2ludCAKK2llZWU4MDIxMXNvZnRtYWNfZGVhdXRoX3JlcShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0LCBpbnQgcmVhc29uKQoreworCWludCByZXQ7CisJCisJLyogTWFrZSBzdXJlIHRoZSBuZXR3b3JrIGlzIGF1dGhlbnRpY2F0ZWQgKi8KKwlpZiAoIW5ldC0+YXV0aGVudGljYXRlZCkKKwl7CisJCXByaW50a2woS0VSTl9ERUJVRyBQRlggIkNhbid0IHNlbmQgZGVhdXRoZW50aWNhdGlvbiBwYWNrZXQsIG5ldHdvcmsgaXMgbm90IGF1dGhlbnRpY2F0ZWQuXG4iKTsKKwkJLyogRXJyb3Igb2theT8gKi8KKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJCisJLyogU2VuZCB0aGUgZGUtYXV0aCBwYWNrZXQgKi8KKwlpZigocmV0ID0gaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShtYWMsIG5ldCwgSUVFRTgwMjExX1NUWVBFX0RFQVVUSCwgcmVhc29uKSkpCisJCXJldHVybiByZXQ7CisJCisJaWVlZTgwMjExc29mdG1hY19kZWF1dGhfZnJvbV9uZXQobWFjLCBuZXQpOworCXJldHVybiAwOworfQorIAorLyoKKyAqIFRoaXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCBpZWVlODAyMTEgYXMgaGFuZGxlX2RlYXV0aAorICovCitpbnQgCitpZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9yZXNwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfZGVhdXRoICpkZWF1dGgpCit7CisJCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisJCisJaWYgKCFkZWF1dGgpIHsKKwkJZHByaW50aygiZGVhdXRoIHdpdGhvdXQgZGVhdXRoIHBhY2tldC4gZWVrIVxuIik7CisJCXJldHVybiAwOworCX0KKworCW5ldCA9IGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWQobWFjLCBkZWF1dGgtPmhlYWRlci5hZGRyMik7CisJCisJaWYgKG5ldCA9PSBOVUxMKSB7CisJCXByaW50a2woS0VSTl9ERUJVRyBQRlggIlJlY2VpdmVkIGRlYXV0aGVudGljYXRpb24gcGFja2V0IGZyb20gIk1BQ19GTVQiLCBidXQgdGhhdCBuZXR3b3JrIGlzIHVua25vd24uXG4iLAorCQkJTUFDX0FSRyhkZWF1dGgtPmhlYWRlci5hZGRyMikpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgaXMgYXV0aGVudGljYXRlZCAqLworCWlmKCFuZXQtPmF1dGhlbnRpY2F0ZWQpCisJeworCQlwcmludGtsKEtFUk5fREVCVUcgUEZYICJDYW4ndCBwZXJmb3JtIGRlYXV0aGVudGljYXRpb24sIG5ldHdvcmsgaXMgbm90IGF1dGhlbnRpY2F0ZWQuXG4iKTsKKwkJLyogRXJyb3Igb2theT8gKi8KKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9mcm9tX25ldChtYWMsIG5ldCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19ldmVudC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTUyYmJkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfZXZlbnQuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIEV2ZW50IHN5c3RlbQorICogQWxzbyBzZWUgY29tbWVudHMgaW4gcHVibGljIGhlYWRlciBmaWxlIGFuZCBsb25nZXIgZXhwbGFuYXRpb24gYmVsb3cuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKKyNpbmNsdWRlICJpZWVlODAyMTFzb2Z0bWFjX3ByaXYuaCIKKworLyoKKyAqIEVhY2ggZXZlbnQgaGFzIGFzc29jaWF0ZWQgdG8gaXQKKyAqICAtIGFuIGV2ZW50IHR5cGUgKHNlZSBjb25zdGFudHMgaW4gcHVibGljIGhlYWRlcikKKyAqICAtIGFuIGV2ZW50IGNvbnRleHQgKHNlZSBiZWxvdykKKyAqICAtIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQKKyAqICAtIGEgY29udGV4dCAoZXh0cmEgcGFyYW1ldGVyIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGgpCisgKiAgLSBhbmQgdGhlIHNvZnRtYWMgc3RydWN0CisgKgorICogVGhlIGV2ZW50IGNvbnRleHQgaXMgcHJpdmF0ZSBhbmQgY2FuIG9ubHkgYmUgdXNlZCBmcm9tCisgKiB3aXRoaW4gdGhpcyBtb2R1bGUuIEl0cyBtZWFuaW5nIHZhcmllcyB3aXRoIHRoZSBldmVudAorICogdHlwZToKKyAqICBTQ0FOX0ZJTklTSEVEOglubyBzcGVjaWFsIG1lYW5pbmcKKyAqICBBU1NPQ0lBVEVELAorICogIEFTU09DSUFURV9GQUlMRUQsCisgKiAgQVNTT0NJQVRFX1RJTUVPVVQsCisgKiAgQVVUSEVOVElDQVRFRCwKKyAqICBBVVRIX0ZBSUxFRCwKKyAqICBBVVRIX1RJTUVPVVQ6CWEgcG9pbnRlciB0byB0aGUgbmV0d29yayBzdHJ1Y3QKKyAqIC4uLgorICogQ29kZSB3aXRoaW4gdGhpcyBtb2R1bGUgY2FuIHVzZSB0aGUgZXZlbnQgY29udGV4dCB0byBiZSBvbmx5CisgKiBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgdHJ1ZSBmb3IgdGhhdCBzcGVjaWZpYyBjb250ZXh0CisgKiBhcyBwZXIgYWJvdmUgdGFibGUuCisgKiBJZiB0aGUgZXZlbnQgY29udGV4dCBpcyBOVUxMLCB0aGVuIHRoZSBub3RpZmljYXRpb24gaXMgYWx3YXlzIGNhbGxlZCwKKyAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGV2ZW50IGNvbnRleHQuIFRoZSBldmVudCBjb250ZXh0IGlzIG5vdCBwYXNzZWQgdG8KKyAqIHRoZSBjYWxsYmFjaywgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBjb250ZXh0IHN1ZmZpY2VzLgorICoKKyAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGV2ZW50IGNvbnRleHQgb25seSBieSBzZXR0aW5nIHRoZSBldmVudCB0eXBlCisgKiB0byAtMSAocHJpdmF0ZSB1c2Ugb25seSksIGluIHdoaWNoIGNhc2UgeW91J2xsIGJlIG5vdGlmaWVkCisgKiB3aGVuZXZlciB0aGUgZXZlbnQgY29udGV4dCBtYXRjaGVzLgorICovCisKK3N0YXRpYyBjaGFyICpldmVudF9kZXNjcmlwdGlvbnNbSUVFRTgwMjExU09GVE1BQ19FVkVOVF9MQVNUKzFdID0geworCSJzY2FuIGZpbmlzaGVkIiwKKwkiYXNzb2NpYXRlZCIsCisJImFzc29jaWF0aW5nIGZhaWxlZCIsCisJImFzc29jaWF0aW5nIHRpbWVkIG91dCIsCisJImF1dGhlbnRpY2F0ZWQiLAorCSJhdXRoZW50aWNhdGluZyBmYWlsZWQiLAorCSJhdXRoZW50aWNhdGluZyB0aW1lZCBvdXQiLAorCSJhc3NvY2lhdGluZyBmYWlsZWQgYmVjYXVzZSBubyBzdWl0YWJsZSBuZXR3b3JrIHdhcyBmb3VuZCIsCit9OworCisKK3N0YXRpYyB2b2lkCitpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9jYWxsYmFjayh2b2lkICpkKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50IGV2ZW50ID0gKihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ldmVudCopIGQ7CisJa2ZyZWUoZCk7CisJCisJZXZlbnQuZnVuKGV2ZW50Lm1hYy0+ZGV2LCBldmVudC5jb250ZXh0KTsKK30KKworaW50CitpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9pbnRlcm5hbChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlpbnQgZXZlbnQsIHZvaWQgKmV2ZW50X2NvbnRleHQsIG5vdGlmeV9mdW5jdGlvbl9wdHIgZnVuLCB2b2lkICpjb250ZXh0LCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ldmVudCAqZXZlbnRwdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChldmVudCA8IC0xIHx8IGV2ZW50ID4gSUVFRTgwMjExU09GVE1BQ19FVkVOVF9MQVNUKQorCQlyZXR1cm4gLUVOT1NZUzsKKwkKKwlpZiAoIWZ1bikKKwkJcmV0dXJuIC1FSU5WQUw7CisJCisJZXZlbnRwdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ldmVudCksIGdmcF9tYXNrKTsKKwlpZiAoIWV2ZW50cHRyKQorCQlyZXR1cm4gLUVOT01FTTsKKwkKKwlldmVudHB0ci0+ZXZlbnRfdHlwZSA9IGV2ZW50OworCUlOSVRfV09SSygmZXZlbnRwdHItPndvcmssIGllZWU4MDIxMXNvZnRtYWNfbm90aWZ5X2NhbGxiYWNrLCBldmVudHB0cik7CisJZXZlbnRwdHItPmZ1biA9IGZ1bjsKKwlldmVudHB0ci0+Y29udGV4dCA9IGNvbnRleHQ7CisJZXZlbnRwdHItPm1hYyA9IG1hYzsKKwlldmVudHB0ci0+ZXZlbnRfY29udGV4dCA9IGV2ZW50X2NvbnRleHQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmV2ZW50cHRyLT5saXN0LCAmbWFjLT5ldmVudHMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoraWVlZTgwMjExc29mdG1hY19ub3RpZnlfZ2ZwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJaW50IGV2ZW50LCBub3RpZnlfZnVuY3Rpb25fcHRyIGZ1biwgdm9pZCAqY29udGV4dCwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYgKGV2ZW50IDwgMCB8fCBldmVudCA+IElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfTEFTVCkKKwkJcmV0dXJuIC1FTk9TWVM7CisJCisJcmV0dXJuIGllZWU4MDIxMXNvZnRtYWNfbm90aWZ5X2ludGVybmFsKG1hYywgZXZlbnQsIE5VTEwsIGZ1biwgY29udGV4dCwgZ2ZwX21hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY19ub3RpZnlfZ2ZwKTsKKworLyogcHJpdmF0ZSAtLSBjYWxsaW5nIGFsbCBjYWxsYmFja3MgdGhhdCB3ZXJlIHNwZWNpZmllZCAqLwordm9pZAoraWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIGludCBldmVudCwgdm9pZCAqZXZlbnRfY3R4KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50ICpldmVudHB0ciwgKnRtcDsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJY2hhciAqbXNnOworCQorCWlmIChldmVudCA+PSAwKSB7CisJCW1zZyA9IGV2ZW50X2Rlc2NyaXB0aW9uc1tldmVudF07CisJCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChtYWMtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIG1zZyk7CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZtYWMtPmV2ZW50cykpCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudHB0ciwgdG1wLCAmbWFjLT5ldmVudHMsIGxpc3QpIHsKKwkJCWlmICgoZXZlbnRwdHItPmV2ZW50X3R5cGUgPT0gZXZlbnQgfHwgZXZlbnRwdHItPmV2ZW50X3R5cGUgPT0gLTEpCisJCQkJJiYgKGV2ZW50cHRyLT5ldmVudF9jb250ZXh0ID09IE5VTEwgfHwgZXZlbnRwdHItPmV2ZW50X2NvbnRleHQgPT0gZXZlbnRfY3R4KSkgeworCQkJCWxpc3RfZGVsKCZldmVudHB0ci0+bGlzdCk7CisJCQkJc2NoZWR1bGVfd29yaygmZXZlbnRwdHItPndvcmspOworCQkJfQorCQl9Cit9CisKK3ZvaWQKK2llZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIGludCBldmVudCwgdm9pZCAqZXZlbnRfY3R4KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJaWVlZTgwMjExc29mdG1hY19jYWxsX2V2ZW50c19sb2NrZWQobWFjLCBldmVudCwgZXZlbnRfY3R4KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmViYzUxZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKQEAgLTAsMCArMSw0NzQgQEAKKy8qIAorICogU29tZSBwYXJ0cyBiYXNlZCBvbiBjb2RlIGZyb20gbmV0ODAyMTEKKyAqIENvcHlyaWdodCAoYykgMjAwMSBBdHN1c2hpIE9ub2UKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IFNhbSBMZWZmbGVyLCBFcnJubyBDb25zdWx0aW5nCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogCisgKi8KKworI2luY2x1ZGUgImllZWU4MDIxMXNvZnRtYWNfcHJpdi5oIgorCisvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBpbnNlcnRpbmcgZGF0YSBpbnRvIHRoZSBmcmFtZXMgKi8KKworLyogCisgKiBBZGRzIGFuIEVTU0lEIGVsZW1lbnQgdG8gdGhlIGZyYW1lCisgKgorICovCitzdGF0aWMgdTggKgoraWVlZTgwMjExc29mdG1hY19hZGRfZXNzaWQodTggKmRzdCwgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgKmVzc2lkKQoreworCWlmIChlc3NpZCkgeworCQkqZHN0KysgPSBNRklFX1RZUEVfU1NJRDsKKwkJKmRzdCsrID0gZXNzaWQtPmxlbjsKKwkJbWVtY3B5KGRzdCwgZXNzaWQtPmRhdGEsIGVzc2lkLT5sZW4pOworCQlyZXR1cm4gZHN0K2Vzc2lkLT5sZW47CisJfSBlbHNlIHsKKwkJKmRzdCsrID0gTUZJRV9UWVBFX1NTSUQ7CisJCSpkc3QrKyA9IDA7CisJCXJldHVybiBkc3Q7CisJfQorfSAgICAgCisKKy8qIEFkZHMgU3VwcG9ydGVkIFJhdGVzIGFuZCBpZiByZXF1aXJlZCBFeHRlbmRlZCBSYXRlcyBJbmZvcm1hdGlvbiBFbGVtZW50CisgKiB0byB0aGUgZnJhbWUsIEFTU1VNRVMgV0UgSEFWRSBBIFNPUlRFRCBMSVNUIE9GIFJBVEVTICovCitzdGF0aWMgdTggKgoraWVlZTgwMjExc29mdG1hY19mcmFtZV9hZGRfcmF0ZXModTggKmRzdCwgY29uc3Qgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyKQoreworCWludCBjY2tfbGVuLCBvZmRtX2xlbjsKKwkqZHN0KysgPSBNRklFX1RZUEVfUkFURVM7CisKKwlmb3IoY2NrX2xlbj0wOyBpZWVlODAyMTFfaXNfY2NrX3JhdGUoci0+cmF0ZXNbY2NrX2xlbl0pICYmIChjY2tfbGVuIDwgci0+Y291bnQpO2Nja19sZW4rKyk7CisKKwlpZihjY2tfbGVuID4gSUVFRTgwMjExU09GVE1BQ19NQVhfUkFURVNfTEVOKQorCQljY2tfbGVuID0gSUVFRTgwMjExU09GVE1BQ19NQVhfUkFURVNfTEVOOworCSpkc3QrKyA9IGNja19sZW47CisJbWVtY3B5KGRzdCwgci0+cmF0ZXMsIGNja19sZW4pOworCWRzdCArPSBjY2tfbGVuOworCisJaWYoY2NrX2xlbiA8IHItPmNvdW50KXsKKwkJZm9yIChvZmRtX2xlbj0wOyBpZWVlODAyMTFfaXNfb2ZkbV9yYXRlKHItPnJhdGVzW29mZG1fbGVuICsgY2NrX2xlbl0pICYmIChvZmRtX2xlbiArIGNja19sZW4gPCByLT5jb3VudCk7IG9mZG1fbGVuKyspOworCQlpZiAob2ZkbV9sZW4gPiAwKSB7CisJCQlpZiAob2ZkbV9sZW4gPiBJRUVFODAyMTFTT0ZUTUFDX01BWF9FWF9SQVRFU19MRU4pCisJCQkJb2ZkbV9sZW4gPSBJRUVFODAyMTFTT0ZUTUFDX01BWF9FWF9SQVRFU19MRU47CisJCQkqZHN0KysgPSBNRklFX1RZUEVfUkFURVNfRVg7CisJCQkqZHN0KysgPSBvZmRtX2xlbjsKKwkJCW1lbWNweShkc3QsIHItPnJhdGVzICsgY2NrX2xlbiwgb2ZkbV9sZW4pOworCQkJZHN0ICs9IG9mZG1fbGVuOworCQl9CisJfQkKKwlyZXR1cm4gZHN0OworfQorCisvKiBBbGxvY2F0ZSBhIG1hbmFnZW1lbnQgZnJhbWUgKi8KK3N0YXRpYyB1OCAqIAoraWVlZTgwMjExc29mdG1hY19hbGxvY19tZ3QodTMyIHNpemUpCit7CisJdTggKiBkYXRhOworCQorCS8qIEFkZCB0aGUgaGVhZGVyIGFuZCBGQ1MgdG8gdGhlIHNpemUgKi8KKwlzaXplID0gc2l6ZSArIElFRUU4MDIxMV8zQUREUl9MRU47CQorCWlmKHNpemUgPiBJRUVFODAyMTFfREFUQV9MRU4pCisJCXJldHVybiBOVUxMOworCS8qIEFsbG9jYXRlIHRoZSBmcmFtZSAqLworCWRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworCW1lbXNldChkYXRhLCAwLCBzaXplKTsKKwlyZXR1cm4gZGF0YTsKK30KKworLyoKKyAqIEFkZCBhIDIgQWRkcmVzcyBIZWFkZXIKKyAqLworc3RhdGljIHZvaWQgCitpZWVlODAyMTFzb2Z0bWFjX2hkcl8yYWRkcihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciAqaGVhZGVyLCB1MzIgdHlwZSwgdTggKmRlc3QpCit7CisJLyogRmlsbCBpbiB0aGUgZnJhbWUgY29udHJvbCBmbGFncyAqLworCWhlYWRlci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYodHlwZSk7CisJLyogQ29udHJvbCBwYWNrZXRzIGFsd2F5cyBoYXZlIFdFUCB0dXJuZWQgb2ZmICovCQorCWlmKHR5cGUgPiBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0sgJiYgdHlwZSA8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpCisJCWhlYWRlci0+ZnJhbWVfY3RsIHw9IG1hYy0+aWVlZS0+c2VjLmxldmVsID8gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSA6IDA7CisKKwkvKiBGaWxsIGluIHRoZSBkdXJhdGlvbiAqLworCWhlYWRlci0+ZHVyYXRpb25faWQgPSAwOworCS8qIEZJWE1FOiBIb3cgZG8gSSBmaW5kIHRoaXM/CisJICogY2FsY3VsYXRlLiBCdXQgbW9zdCBkcml2ZXJzIGp1c3QgZmlsbCBpbiAwIChleGNlcHQgaWYgaXQncyBhIHN0YXRpb24gaWQgb2YgY291cnNlKSAqLworCisJLyogRmlsbCBpbiB0aGUgRGVzdGluYXRpb24gQWRkcmVzcyAqLworCWlmKGRlc3QgPT0gTlVMTCkKKwkJbWVtc2V0KGhlYWRlci0+YWRkcjEsIDB4RkYsIEVUSF9BTEVOKTsKKwllbHNlCisJCW1lbWNweShoZWFkZXItPmFkZHIxLCBkZXN0LCBFVEhfQUxFTik7CisJLyogRmlsbCBpbiB0aGUgU291cmNlIEFkZHJlc3MgKi8KKwltZW1jcHkoaGVhZGVyLT5hZGRyMiwgbWFjLT5pZWVlLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKK30KKworCisvKiBBZGQgYSAzIEFkZHJlc3MgSGVhZGVyICovCitzdGF0aWMgdm9pZCAKK2llZWU4MDIxMXNvZnRtYWNfaGRyXzNhZGRyKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZWFkZXIsIHUzMiB0eXBlLCB1OCAqZGVzdCwgdTggKmJzc2lkKQoreworCS8qIFRoaXMgaXMgY29tbW9uIHdpdGggMmFkZHIsIHNvIHVzZSB0aGF0IGluc3RlYWQgKi8KKwlpZWVlODAyMTFzb2Z0bWFjX2hkcl8yYWRkcihtYWMsIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciAqKWhlYWRlciwgdHlwZSwgZGVzdCk7CQorCQorCS8qIEZpbGwgaW4gdGhlIEJTUyBJRCAqLworCWlmKGJzc2lkID09IE5VTEwpCisJCW1lbXNldChoZWFkZXItPmFkZHIzLCAweEZGLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1jcHkoaGVhZGVyLT5hZGRyMywgYnNzaWQsIEVUSF9BTEVOKTsKKworCS8qIEZpbGwgaW4gdGhlIHNlcXVlbmNlICMgKi8KKwkvKiBGSVhNRTogSSBuZWVkIHRvIGFkZCB0aGlzIHRvIHRoZSBzb2Z0bWFjIHN0cnVjdAorCSAqIHNob3VsZG4ndCB0aGUgc2VxdWVuY2UgbnVtYmVyIGJlIGluIGllZWU4MDIxMT8gKi8KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENyZWF0ZSBNYW5hZ2VtZW50IHBhY2tldHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCisKKy8qIENyZWF0ZXMgYW4gYXNzb2NpYXRpb24gcmVxdWVzdCBwYWNrZXQgKi8KK3N0YXRpYyB1MzIKK2llZWU4MDIxMXNvZnRtYWNfYXNzb2NfcmVxKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdCAqKnBrdCwgCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCkKK3sKKwl1OCAqZGF0YTsKKwkoKnBrdCkgPSAoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0ICopaWVlZTgwMjExc29mdG1hY19hbGxvY19tZ3QoCisJCTIgKwkJLyogQ2FwYWJpbGl0eSBJbmZvICovCisJCTIgKwkgCS8qIExpc3RlbiBJbnRlcnZhbCAqLworCQkvKiBTU0lEIElFICovCisJCTEgKyAxICsgSVdfRVNTSURfTUFYX1NJWkUgKworCQkvKiBSYXRlcyBJRSAqLworCQkxICsgMSArIElFRUU4MDIxMVNPRlRNQUNfTUFYX1JBVEVTX0xFTiArCisJCS8qIEV4dGVuZGVkIFJhdGVzIElFICovCisJCTEgKyAxICsgSUVFRTgwMjExU09GVE1BQ19NQVhfRVhfUkFURVNfTEVOICsKKwkJLyogV1BBIElFIGlmIHByZXNlbnQgKi8KKwkJbWFjLT53cGEuSUVsZW4KKwkJLyogT3RoZXIgSUUncz8gIE9wdGlvbmFsPworCQkgKiBZZWFoLCBwcm9iYWJseSBuZWVkIGFuIGV4dHJhIElFIHBhcmFtZXRlciAtLSBsb3RzIG9mIHZlbmRvcnMgbGlrZSB0bworCQkgKiBmaWxsIGluIHRoZWlyIG93biBJRXMgKi8KKwkpOworCWlmICh1bmxpa2VseSgoKnBrdCkgPT0gTlVMTCkpCisJCXJldHVybiAwOworCWllZWU4MDIxMXNvZnRtYWNfaGRyXzNhZGRyKG1hYywgJigoKnBrdCktPmhlYWRlciksIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEsIG5ldC0+YnNzaWQsIG5ldC0+YnNzaWQpOworCisJLyogRmlsbCBpbiBjYXBhYmlsaXR5IEluZm8gKi8KKwkoKnBrdCktPmNhcGFiaWxpdHkgPSAobWFjLT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKSB8fCAobWFjLT5pZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpID8KKwkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0VTUykgOgorCQljcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CisJLyogTmVlZCB0byBhZGQgdGhpcworCSgqcGt0KS0+Y2FwYWJpbGl0eSB8PSBtYWMtPmllZWUtPnNob3J0X3Nsb3QgPyAKKwkJCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpIDogMDsKKwkgKi8KKwkoKnBrdCktPmNhcGFiaWxpdHkgfD0gbWFjLT5pZWVlLT5zZWMubGV2ZWwgPyBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgOiAwOworCS8qIEZpbGwgaW4gTGlzdGVuIEludGVydmFsICg/KSAqLworCSgqcGt0KS0+bGlzdGVuX2ludGVydmFsID0gY3B1X3RvX2xlMTYoMTApOworCQorCWRhdGEgPSAodTggKikoKnBrdCktPmluZm9fZWxlbWVudDsKKwkvKiBBZGQgU1NJRCAqLworCWRhdGEgPSBpZWVlODAyMTFzb2Z0bWFjX2FkZF9lc3NpZChkYXRhLCAmbmV0LT5lc3NpZCk7CisJLyogQWRkIFJhdGVzICovCisJZGF0YSA9IGllZWU4MDIxMXNvZnRtYWNfZnJhbWVfYWRkX3JhdGVzKGRhdGEsICZtYWMtPnJhdGVzaW5mbyk7CisJLyogQWRkIFdQQSBJRSAqLworCWlmIChtYWMtPndwYS5JRWxlbiAmJiBtYWMtPndwYS5JRSkgeworCQltZW1jcHkoZGF0YSwgbWFjLT53cGEuSUUsIG1hYy0+d3BhLklFbGVuKTsKKwkJZGF0YSArPSBtYWMtPndwYS5JRWxlbjsKKwl9CisJLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyAqLworCXJldHVybiAoZGF0YSAtICh1OCopKCpwa3QpKTsKK30KKworLyogQ3JlYXRlIGEgcmVhc3NvY2lhdGlvbiByZXF1ZXN0IHBhY2tldCAqLworc3RhdGljIHUzMgoraWVlZTgwMjExc29mdG1hY19yZWFzc29jX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqKnBrdCwgCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCkKK3sKKwl1OCAqZGF0YTsKKwkoKnBrdCkgPSAoc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3QgKilpZWVlODAyMTFzb2Z0bWFjX2FsbG9jX21ndCgKKwkJMiArCQkvKiBDYXBhYmlsaXR5IEluZm8gKi8KKwkJMiArCSAJLyogTGlzdGVuIEludGVydmFsICovCisJCUVUSF9BTEVOICsJLyogQVAgTUFDICovCisJCS8qIFNTSUQgSUUgKi8KKwkJMSArIDEgKyBJV19FU1NJRF9NQVhfU0laRSArCisJCS8qIFJhdGVzIElFICovCisJCTEgKyAxICsgSUVFRTgwMjExU09GVE1BQ19NQVhfUkFURVNfTEVOICsKKwkJLyogRXh0ZW5kZWQgUmF0ZXMgSUUgKi8KKwkJMSArIDEgKyBJRUVFODAyMTFTT0ZUTUFDX01BWF9FWF9SQVRFU19MRU4gCisJCS8qIE90aGVyIElFJ3M/ICovCisJKTsJCQkJCisJaWYgKHVubGlrZWx5KCgqcGt0KSA9PSBOVUxMKSkKKwkJcmV0dXJuIDA7CisJaWVlZTgwMjExc29mdG1hY19oZHJfM2FkZHIobWFjLCAmKCgqcGt0KS0+aGVhZGVyKSwgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKKworCS8qIEZpbGwgaW4gY2FwYWJpbGl0eSBJbmZvICovCisJKCpwa3QpLT5jYXBhYmlsaXR5ID0gbWFjLT5pZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSID8gCisJCQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX0VTUykgOgorCQkJCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKKwkvKgorCSgqcGt0KS0+Y2FwYWJpbGl0eSB8PSBtYWMtPmllZWUtPnNob3J0X3Nsb3QgPyAKKwkJCWNwdV90b19sZTE2KFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUpIDogMDsKKwkgKi8KKwkoKnBrdCktPmNhcGFiaWxpdHkgfD0gbWFjLT5pZWVlLT5zZWMubGV2ZWwgPworCQkJY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIDogMDsKKwkJCisJLyogRmlsbCBpbiBMaXN0ZW4gSW50ZXJ2YWwgKD8pICovCisJKCpwa3QpLT5saXN0ZW5faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNigxMCk7CisJLyogRmlsbCBpbiB0aGUgY3VycmVudCBBUCBNQUMgKi8KKwltZW1jcHkoKCpwa3QpLT5jdXJyZW50X2FwLCBtYWMtPmllZWUtPmJzc2lkLCBFVEhfQUxFTik7CisJCisJZGF0YSA9ICh1OCAqKSgqcGt0KS0+aW5mb19lbGVtZW50OworCS8qIEFkZCBTU0lEICovCisJZGF0YSA9IGllZWU4MDIxMXNvZnRtYWNfYWRkX2Vzc2lkKGRhdGEsICZuZXQtPmVzc2lkKTsgCisJLyogQWRkIFJhdGVzICovCisJZGF0YSA9IGllZWU4MDIxMXNvZnRtYWNfZnJhbWVfYWRkX3JhdGVzKGRhdGEsICZtYWMtPnJhdGVzaW5mbyk7CisJLyogUmV0dXJuIHBhY2tldCBzaXplICovCisJcmV0dXJuIChkYXRhIC0gKHU4ICopKCpwa3QpKTsKK30KKworLyogQ3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIHBhY2tldCAqLworc3RhdGljIHUzMgoraWVlZTgwMjExc29mdG1hY19hdXRoKHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqKnBrdCwgCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCwKKwl1MTYgdHJhbnNhY3Rpb24sIHUxNiBzdGF0dXMpCit7CisJdTggKmRhdGE7CisJLyogQWxsb2NhdGUgUGFja2V0ICovCisJKCpwa3QpID0gKHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqKWllZWU4MDIxMXNvZnRtYWNfYWxsb2NfbWd0KAorCQkyICsJCS8qIEF1dGggQWxnb3JpdGhtICovCisJCTIgKwkJLyogQXV0aCBUcmFuc2FjdGlvbiBTZXEgKi8KKwkJMiArCQkvKiBTdGF0dXMgQ29kZSAqLworCQkgLyogQ2hhbGxlbmdlIFRleHQgSUUgKi8KKwkJbWFjLT5pZWVlLT5vcGVuX3dlcCA/IDAgOiAKKwkJMSArIDEgKyBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTgorCSk7CQorCWlmICh1bmxpa2VseSgoKnBrdCkgPT0gTlVMTCkpCisJCXJldHVybiAwOworCWllZWU4MDIxMXNvZnRtYWNfaGRyXzNhZGRyKG1hYywgJigoKnBrdCktPmhlYWRlciksIElFRUU4MDIxMV9TVFlQRV9BVVRILCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKKwkJCisJLyogQWxnb3JpdGhtICovCisJKCpwa3QpLT5hbGdvcml0aG0gPSBtYWMtPmllZWUtPm9wZW5fd2VwID8gCisJCWNwdV90b19sZTE2KFdMQU5fQVVUSF9PUEVOKSA6CisJCWNwdV90b19sZTE2KFdMQU5fQVVUSF9TSEFSRURfS0VZKTsKKwkvKiBUcmFuc2FjdGlvbiAqLworCSgqcGt0KS0+dHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7CisJLyogU3RhdHVzICovCisJKCpwa3QpLT5zdGF0dXMgPSBjcHVfdG9fbGUxNihzdGF0dXMpOworCQorCWRhdGEgPSAodTggKikoKnBrdCktPmluZm9fZWxlbWVudDsKKwkvKiBDaGFsbGVuZ2UgVGV4dCAqLworCWlmKCFtYWMtPmllZWUtPm9wZW5fd2VwKXsKKwkJKmRhdGEgPSBNRklFX1RZUEVfQ0hBTExFTkdFOworCQlkYXRhKys7CisJCQorCQkvKiBDb3B5IHRoZSBjaGFsbGVuZ2UgaW4gKi8KKwkJLy8gKmRhdGEgPSBjaGFsbGVuZ2UgbGVuZ3RoCisJCS8vIGRhdGEgKz0gc2l6ZW9mKHUxNik7CisJCS8vIG1lbWNweShkYXRhLCBjaGFsbGVuZ2UsIGNoYWxsZW5nZSBsZW5ndGgpOworCQkvLyBkYXRhICs9IGNoYWxsZW5nZSBsZW5ndGg7CisJCQorCQkvKiBBZGQgdGhlIGZ1bGwgc2l6ZSB0byB0aGUgcGFja2V0IGxlbmd0aCAqLworCX0KKworCS8qIFJldHVybiB0aGUgcGFja2V0IHNpemUgKi8KKwlyZXR1cm4gKGRhdGEgLSAodTggKikoKnBrdCkpOworfQorCisvKiBDcmVhdGUgYSBkaXNhc3NvY2F0aW9uIG9yIGRlYXV0aGVudGljYXRpb24gcGFja2V0ICovCitzdGF0aWMgdTMyCitpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jX2RlYXV0aChzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICoqcGt0LAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQsCisJdTE2IHR5cGUsIHUxNiByZWFzb24pCit7CisJLyogQWxsb2NhdGUgUGFja2V0ICovCisJKCpwa3QpID0gKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgKilpZWVlODAyMTFzb2Z0bWFjX2FsbG9jX21ndCgyKTsKKwlpZiAodW5saWtlbHkoKCpwa3QpID09IE5VTEwpKQorCQlyZXR1cm4gMDsKKwlpZWVlODAyMTFzb2Z0bWFjX2hkcl8zYWRkcihtYWMsICYoKCpwa3QpLT5oZWFkZXIpLCB0eXBlLCBuZXQtPmJzc2lkLCBuZXQtPmJzc2lkKTsKKwkvKiBSZWFzb24gKi8KKwkoKnBrdCktPnJlYXNvbiA9IGNwdV90b19sZTE2KHJlYXNvbik7CisJLyogUmV0dXJuIHRoZSBwYWNrZXQgc2l6ZSAqLworCXJldHVybiAoMiArIElFRUU4MDIxMV8zQUREUl9MRU4pOworfQorCisvKiBDcmVhdGUgYSBwcm9iZSByZXF1ZXN0IHBhY2tldCAqLworc3RhdGljIHUzMgoraWVlZTgwMjExc29mdG1hY19wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0ICoqcGt0LAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCAqZXNzaWQpCit7CisJdTggKmRhdGE7CQorCS8qIEFsbG9jYXRlIFBhY2tldCAqLworCSgqcGt0KSA9IChzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3JlcXVlc3QgKilpZWVlODAyMTFzb2Z0bWFjX2FsbG9jX21ndCgKKwkJLyogU1NJRCBvZiByZXF1ZXN0ZWQgbmV0d29yayAqLworCQkxICsgMSArIElXX0VTU0lEX01BWF9TSVpFICsKKwkJLyogUmF0ZXMgSUUgKi8KKwkJMSArIDEgKyBJRUVFODAyMTFTT0ZUTUFDX01BWF9SQVRFU19MRU4gKworCQkvKiBFeHRlbmRlZCBSYXRlcyBJRSAqLworCQkxICsgMSArIElFRUU4MDIxMVNPRlRNQUNfTUFYX0VYX1JBVEVTX0xFTiAKKwkpOworCWlmICh1bmxpa2VseSgoKnBrdCkgPT0gTlVMTCkpCisJCXJldHVybiAwOworCWllZWU4MDIxMXNvZnRtYWNfaGRyXzNhZGRyKG1hYywgJigoKnBrdCktPmhlYWRlciksIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEsIE5VTEwsIE5VTEwpOworCQkKKwlkYXRhID0gKHU4ICopKCpwa3QpLT5pbmZvX2VsZW1lbnQ7CisJLyogQWRkIEVTU0lEIChjYW4gYmUgTlVMTCkgKi8KKwlkYXRhID0gaWVlZTgwMjExc29mdG1hY19hZGRfZXNzaWQoZGF0YSwgZXNzaWQpOworCS8qIEFkZCBSYXRlcyAqLworCWRhdGEgPSBpZWVlODAyMTFzb2Z0bWFjX2ZyYW1lX2FkZF9yYXRlcyhkYXRhLCAmbWFjLT5yYXRlc2luZm8pOworCS8qIFJldHVybiBwYWNrZXQgc2l6ZSAqLworCXJldHVybiAoZGF0YSAtICh1OCAqKSgqcGt0KSk7Cit9CisKKy8qIENyZWF0ZSBhIHByb2JlIHJlc3BvbnNlIHBhY2tldCAqLworLyogRklYTUU6IE5vdCBjb21wbGV0ZSAqLworc3RhdGljIHUzMgoraWVlZTgwMjExc29mdG1hY19wcm9iZV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKipwa3QsCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCkKK3sKKwl1OCAqZGF0YTsKKwkvKiBBbGxvY2F0ZSBQYWNrZXQgKi8KKwkoKnBrdCkgPSAoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqKWllZWU4MDIxMXNvZnRtYWNfYWxsb2NfbWd0KAorCQk4ICsJCS8qIFRpbWVzdGFtcCAqLworCQkyICsJCS8qIEJlYWNvbiBJbnRlcnZhbCAqLworCQkyICsJCS8qIENhcGFiaWxpdHkgSW5mbyAqLworCQkJCS8qIFNTSUQgSUUgKi8KKwkJMSArIDEgKyBJV19FU1NJRF9NQVhfU0laRSArCisJCTcgKyAJCS8qIEZIIFBhcmFtZXRlciBTZXQgKi8KKwkJMiArCQkvKiBEUyBQYXJhbWV0ZXIgU2V0ICovCisJCTggKwkJLyogQ0YgUGFyYW1ldGVyIFNldCAqLworCQk0IAkJLyogSUJTUyBQYXJhbWV0ZXIgU2V0ICovCisJKTsJCisJaWYgKHVubGlrZWx5KCgqcGt0KSA9PSBOVUxMKSkKKwkJcmV0dXJuIDA7CisJaWVlZTgwMjExc29mdG1hY19oZHJfM2FkZHIobWFjLCAmKCgqcGt0KS0+aGVhZGVyKSwgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AsIG5ldC0+YnNzaWQsIG5ldC0+YnNzaWQpOworCWRhdGEgPSAodTggKikoKnBrdCktPmluZm9fZWxlbWVudDsKKworCS8qIFJldHVybiB0aGUgcGFja2V0IHNpemUgKi8KKwlyZXR1cm4gKGRhdGEgLSAodTggKikoKnBrdCkpOworfQorCisKKy8qIFNlbmRzIGEgbWFuYW5nZW1lbnQgcGFja2V0CisgKiBGSVhNRTogZG9jdW1lbnQgdGhlIHVzZSBvZiB0aGUgYXJnIHBhcmFtZXRlcgorICogZm9yIF9BVVRIOiAodHJhbnNhY3Rpb24gIykgfCAoc3RhdHVzIDw8IDE2KQorICovCitpbnQKK2llZWU4MDIxMXNvZnRtYWNfc2VuZF9tZ3RfZnJhbWUoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJdm9pZCAqcHRyYXJnLCB1MzIgdHlwZSwgdTMyIGFyZykKK3sKKwl2b2lkICpwa3QgPSBOVUxMOworCXUzMiBwa3Rfc2l6ZSA9IDA7CisKKwlzd2l0Y2godHlwZSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUToKKwkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3JlcSgoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0ICoqKSgmcGt0KSwgbWFjLCAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKXB0cmFyZyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVROgorCQlwa3Rfc2l6ZSA9IGllZWU4MDIxMXNvZnRtYWNfcmVhc3NvY19yZXEoKHN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0ICoqKSgmcGt0KSwgbWFjLCAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqKXB0cmFyZyk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CisJCXBrdF9zaXplID0gaWVlZTgwMjExc29mdG1hY19hdXRoKChzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKiopKCZwa3QpLCBtYWMsIChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICopcHRyYXJnLCAodTE2KShhcmcgJiAweEZGRkYpLCAodTE2KSAoYXJnID4+IDE2KSk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKKwkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX2Rpc2Fzc29jX2RlYXV0aCgoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqKikoJnBrdCksIG1hYywgKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKilwdHJhcmcsIHR5cGUsICh1MTYpKGFyZyAmIDB4RkZGRikpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CisJCXBrdF9zaXplID0gaWVlZTgwMjExc29mdG1hY19wcm9iZV9yZXEoKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCAqKikoJnBrdCksIG1hYywgKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Vzc2lkICopcHRyYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX3Byb2JlX3Jlc3AoKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKiopKCZwa3QpLCBtYWMsIChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICopcHRyYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBwcmludGtsKEtFUk5fREVCVUcgUEZYICJVbnN1cHBvcnRlZCBNYW5hZ2VtZW50IEZyYW1lIHR5cGU6ICVpXG4iLCB0eXBlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwl9OworCisJaWYocGt0X3NpemUgPT0gMCB8fCBwa3QgPT0gTlVMTCkgeworCQlwcmludGtsKEtFUk5fREVCVUcgUEZYICJFcnJvciwgcGFja2V0IGlzIG5vbmV4aXN0YW50IG9yIDAgbGVuZ3RoXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCQorCS8qIFNlbmQgdGhlIHBhY2tldCB0byB0aGUgaWVlZTgwMjExIGxheWVyIGZvciB0eCAqLworCS8qIHdlIGRlZmluZWQgc29mdG1hYy0+bWdtdF94bWl0IGZvciB0aGlzLiBTaG91bGQgd2Uga2VlcCBpdAorCSAqIGFzIGl0IGlzICh0aGF0IG1lYW5zIHdlJ2QgbmVlZCB0byB3cmFwIHRoaXMgaW50byBhIHR4YiksCisJICogbW9kaWZ5IHRoZSBwcm90b3R5cGUgKHNvIGl0IG1hdGNoZXMgdGhpcyBmdW5jdGlvbiksCisJICogb3IgZ2V0IHJpZCBvZiBpdCBhbGx0b2dldGhlcj8KKwkgKiBEb2VzIHRoaXMgd29yayBmb3IgeW91IG5vdz8KKwkgKi8KKwlpZWVlODAyMTFfdHhfZnJhbWUobWFjLT5pZWVlLCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilwa3QsIHBrdF9zaXplKTsKKworCWtmcmVlKHBrdCk7CisJcmV0dXJuIDA7Cit9CisKKworLyogQ3JlYXRlIGFuIHJ0cy9jdHMgZnJhbWUgKi8KK3N0YXRpYyB1MzIKK2llZWU4MDIxMXNvZnRtYWNfcnRzX2N0cyhzdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciAqKnBrdCwKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0LCAKKwl1MzIgdHlwZSkKK3sKKwkvKiBBbGxvY2F0ZSBQYWNrZXQgKi8KKwkoKnBrdCkgPSBrbWFsbG9jKElFRUU4MDIxMV8yQUREUl9MRU4sIEdGUF9BVE9NSUMpOwkKKwltZW1zZXQoKnBrdCwgMCwgSUVFRTgwMjExXzJBRERSX0xFTik7CisJaWYoKCpwa3QpID09IE5VTEwpCisJCXJldHVybiAwOworCWllZWU4MDIxMXNvZnRtYWNfaGRyXzJhZGRyKG1hYywgKCpwa3QpLCB0eXBlLCBuZXQtPmJzc2lkKTsKKwlyZXR1cm4gSUVFRTgwMjExXzJBRERSX0xFTjsKK30KKworCisvKiBTZW5kcyBhIGNvbnRyb2wgcGFja2V0ICovCitzdGF0aWMgaW50CitpZWVlODAyMTFzb2Z0bWFjX3NlbmRfY3RsX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCwgdTMyIHR5cGUsIHUzMiBhcmcpCit7CisJdm9pZCAqcGt0ID0gTlVMTDsKKwl1MzIgcGt0X3NpemUgPSAwOworCQorCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfUlRTOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKKwkJcGt0X3NpemUgPSBpZWVlODAyMTFzb2Z0bWFjX3J0c19jdHMoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyICoqKSgmcGt0KSwgbWFjLCBuZXQsIHR5cGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGtsKEtFUk5fREVCVUcgUEZYICJVbnN1cHBvcnRlZCBDb250cm9sIEZyYW1lIHR5cGU6ICVpXG4iLCB0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYocGt0X3NpemUgPT0gMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJCisJLyogU2VuZCB0aGUgcGFja2V0IHRvIHRoZSBpZWVlODAyMTEgbGF5ZXIgZm9yIHR4ICovCisJaWVlZTgwMjExX3R4X2ZyYW1lKG1hYy0+aWVlZSwgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHBrdCwgcGt0X3NpemUpOworCisJa2ZyZWUocGt0KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY5OWY3OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX21vZHVsZS5jCkBAIC0wLDAgKzEsNDU3IEBACisvKgorICogQ29udGFpbnMgc29tZSBiYXNpYyBzb2Z0bWFjIGZ1bmN0aW9ucyBhbG9uZyB3aXRoIG1vZHVsZSByZWdpc3RyYXRpb24gY29kZSBldGMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSm9zZXBoIEplemFrIDxqb3NlanhAZ2VudG9vLm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKKyNpbmNsdWRlICJpZWVlODAyMTFzb2Z0bWFjX3ByaXYuaCIKKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTFzb2Z0bWFjKGludCBzaXplb2ZfcHJpdikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNvZnRtYWM7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwkKKwlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSkgKyBzaXplb2ZfcHJpdik7CisJc29mdG1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc29mdG1hYy0+ZGV2ID0gZGV2OworCXNvZnRtYWMtPmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOworCXNwaW5fbG9ja19pbml0KCZzb2Z0bWFjLT5sb2NrKTsKKwkKKwlzb2Z0bWFjLT5pZWVlLT5oYW5kbGVfYXV0aCA9IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9yZXNwOworCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9kZWF1dGggPSBpZWVlODAyMTFzb2Z0bWFjX2RlYXV0aF9yZXNwOworCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9hc3NvY19yZXNwb25zZSA9IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Fzc29jX3Jlc3BvbnNlOworCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QgPSBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9yZWFzc29jX3JlcTsKKwlzb2Z0bWFjLT5pZWVlLT5oYW5kbGVfZGlzYXNzb2MgPSBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9kaXNhc3NvYzsKKwlzb2Z0bWFjLT5zY2FuaW5mbyA9IE5VTEw7CisKKwkvKiBUT0RPOiBpbml0aWFsaXNlIGFsbCB0aGUgb3RoZXIgY2FsbGJhY2tzIGluIHRoZSBpZWVlIHN0cnVjdAorCSAqCSAob25jZSB0aGV5J3JlIHdyaXR0ZW4pCisJICovCisKKwlJTklUX0xJU1RfSEVBRCgmc29mdG1hYy0+YXV0aF9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJnNvZnRtYWMtPm5ldHdvcmtfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnNvZnRtYWMtPmV2ZW50cyk7CisKKwlJTklUX1dPUksoJnNvZnRtYWMtPmFzc29jaW5mby53b3JrLCBpZWVlODAyMTFzb2Z0bWFjX2Fzc29jX3dvcmssIHNvZnRtYWMpOworCUlOSVRfV09SSygmc29mdG1hYy0+YXNzb2NpbmZvLnRpbWVvdXQsIGllZWU4MDIxMXNvZnRtYWNfYXNzb2NfdGltZW91dCwgc29mdG1hYyk7CisJc29mdG1hYy0+c3RhcnRfc2NhbiA9IGllZWU4MDIxMXNvZnRtYWNfc3RhcnRfc2Nhbl9pbXBsZW1lbnRhdGlvbjsKKwlzb2Z0bWFjLT53YWl0X2Zvcl9zY2FuID0gaWVlZTgwMjExc29mdG1hY193YWl0X2Zvcl9zY2FuX2ltcGxlbWVudGF0aW9uOworCXNvZnRtYWMtPnN0b3Bfc2NhbiA9IGllZWU4MDIxMXNvZnRtYWNfc3RvcF9zY2FuX2ltcGxlbWVudGF0aW9uOworCisJLy9UT0RPOiBUaGUgbWNhc3QgcmF0ZSBoYXMgdG8gYmUgYXNzaWduZWQgZHluYW1pY2FsbHkgc29tZXdoZXJlIChpbiBzY2FubmluZywgYXNzb2NpYXRpb24uIE5vdCBzdXJlLi4uKQorCS8vICAgICAgSXQgaGFzIHRvIGJlIHNldCB0byB0aGUgaGlnaGVzdCByYXRlIGFsbCBzdGF0aW9ucyBpbiB0aGUgY3VycmVudCBuZXR3b3JrIGNhbiBoYW5kbGUuCisJc29mdG1hYy0+dHhyYXRlcy5tY2FzdF9yYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwlzb2Z0bWFjLT50eHJhdGVzLm1jYXN0X2ZhbGxiYWNrID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwkvKiBUaGlzIGlzIHJlYXNzaWduZWQgaW4gaWVlZTgwMjExc29mdG1hY19zdGFydCB0byBzYW5lIHZhbHVlcy4gKi8KKwlzb2Z0bWFjLT50eHJhdGVzLmRlZmF1bHRfcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7CisJc29mdG1hYy0+dHhyYXRlcy5kZWZhdWx0X2ZhbGxiYWNrID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKworCS8qIHRvIHN0YXJ0IHdpdGgsIHdlIGNhbid0IHNlbmQgYW55dGhpbmcgLi4uICovCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkKKwlyZXR1cm4gZGV2OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWxsb2NfaWVlZTgwMjExc29mdG1hYyk7CisKKy8qIENsZWFycyB0aGUgcGVuZGluZyB3b3JrIHF1ZXVlIGl0ZW1zLCBzdG9wcyBhbGwgc2NhbnMsIGV0Yy4gKi8KK3ZvaWQgCitpZWVlODAyMTFzb2Z0bWFjX2NsZWFyX3BlbmRpbmdfd29yayhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXZlbnQgKmV2ZW50cHRyLCAqZXZlbnR0bXA7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphdXRocHRyLCAqYXV0aHRtcDsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXRwdHIsICpuZXR0bXA7CisJCisJaWVlZTgwMjExc29mdG1hY19zdG9wX3NjYW4oc20pOworCWllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2NhbihzbSk7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CisJLyogRnJlZSBhbGwgcGVuZGluZyBhc3NvYyB3b3JrIGl0ZW1zICovCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmc20tPmFzc29jaW5mby53b3JrKTsKKwkKKwkvKiBGcmVlIGFsbCBwZW5kaW5nIHNjYW4gd29yayBpdGVtcyAqLworCWlmKHNtLT5zY2FuaW5mbyAhPSBOVUxMKQorCQljYW5jZWxfZGVsYXllZF93b3JrKCZzbS0+c2NhbmluZm8tPnNvZnRtYWNfc2Nhbik7CQorCQorCS8qIEZyZWUgYWxsIHBlbmRpbmcgYXV0aCB3b3JrIGl0ZW1zICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhdXRocHRyLCAmc20tPmF1dGhfcXVldWUsIGxpc3QpCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmF1dGhwdHItPndvcmspOworCQorCS8qIGRlbGV0ZSBhbGwgcGVuZGluZyBldmVudCBjYWxscyBhbmQgd29yayBpdGVtcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudHB0ciwgZXZlbnR0bXAsICZzbS0+ZXZlbnRzLCBsaXN0KQorCQljYW5jZWxfZGVsYXllZF93b3JrKCZldmVudHB0ci0+d29yayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBub3cgd2Ugc2hvdWxkIGJlIHNhdmUgYW5kIG5vIGxvbmdlciBuZWVkIGxvY2tpbmcuLi4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkvKiBGcmVlIGFsbCBwZW5kaW5nIGF1dGggd29yayBpdGVtcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhdXRocHRyLCBhdXRodG1wLCAmc20tPmF1dGhfcXVldWUsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmF1dGhwdHItPmxpc3QpOworCQlrZnJlZShhdXRocHRyKTsKKwl9CisJCisJLyogZGVsZXRlIGFsbCBwZW5kaW5nIGV2ZW50IGNhbGxzIGFuZCB3b3JrIGl0ZW1zICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50cHRyLCBldmVudHRtcCwgJnNtLT5ldmVudHMsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmV2ZW50cHRyLT5saXN0KTsKKwkJa2ZyZWUoZXZlbnRwdHIpOworCX0KKwkJCisJLyogRnJlZSBhbGwgbmV0d29ya3MgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0cHRyLCBuZXR0bXAsICZzbS0+bmV0d29ya19saXN0LCBsaXN0KSB7CisJCWllZWU4MDIxMXNvZnRtYWNfZGVsX25ldHdvcmtfbG9ja2VkKHNtLCBuZXRwdHIpOworCQlpZihuZXRwdHItPmNoYWxsZW5nZSAhPSBOVUxMKQorCQkJa2ZyZWUobmV0cHRyLT5jaGFsbGVuZ2UpOworCQlrZnJlZShuZXRwdHIpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX2NsZWFyX3BlbmRpbmdfd29yayk7CisKK3ZvaWQgZnJlZV9pZWVlODAyMTFzb2Z0bWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSA9IGllZWU4MDIxMV9wcml2KGRldik7CisJaWVlZTgwMjExc29mdG1hY19jbGVhcl9wZW5kaW5nX3dvcmsoc20pOwkKKwlrZnJlZShzbS0+c2NhbmluZm8pOworCWtmcmVlKHNtLT53cGEuSUUpOworCWZyZWVfaWVlZTgwMjExKGRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmcmVlX2llZWU4MDIxMXNvZnRtYWMpOworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X2NoZWNrX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mbyAqcmkgPSAmbWFjLT5yYXRlc2luZm87CisJLyogSSB0b29rIG91dCB0aGUgc29ydGluZyBjaGVjaywgd2UncmUgc2VwZXJhdGluZyBieSBtb2R1bGF0aW9uIG5vdy4gKi8KKwlpZiAocmktPmNvdW50KQorCQlyZXR1cm47CisJLyogb3RoZXJ3aXNlIGFzc3VtZSB3ZSBoYXYnZW0gYWxsISAqLworCWlmIChtYWMtPmllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04pIHsKKwkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7CisJCXJpLT5yYXRlc1tyaS0+Y291bnQrK10gPSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COworCQlyaS0+cmF0ZXNbcmktPmNvdW50KytdID0gSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKKwkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COworCX0KKwlpZiAobWFjLT5pZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgeworCQlyaS0+cmF0ZXNbcmktPmNvdW50KytdID0gSUVFRTgwMjExX09GRE1fUkFURV82TUI7CisJCXJpLT5yYXRlc1tyaS0+Y291bnQrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKKwkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKKwkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKKwkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKKwkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKKwkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKKwkJcmktPnJhdGVzW3JpLT5jb3VudCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKKwl9Cit9CisKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG1hYy0+aWVlZTsKKwl1MzIgY2hhbmdlID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzIG9sZHJhdGVzOworCisJaWVlZTgwMjExc29mdG1hY19zdGFydF9jaGVja19yYXRlcyhtYWMpOworCisJLyogVE9ETzogV2UgbmVlZCBzb21lIGtpbmQgb2Ygc3RhdGUgbWFjaGluZSB0byBsb3dlciB0aGUgZGVmYXVsdCByYXRlcworCSAqICAgICAgIGlmIHdlIGxvb3NlIHRvbyBtYW55IHBhY2tldHMuCisJICovCisJLyogQ2hhbmdlIHRoZSBkZWZhdWx0IHR4cmF0ZSB0byB0aGUgaGlnaGVzdCBwb3NzaWJsZSB2YWx1ZS4KKwkgKiBUaGUgdHhyYXRlIG1hY2hpbmUgd2lsbCBsb3dlciBpdCwgaWYgaXQgaXMgdG9vIGhpZ2guCisJICovCisJaWYgKG1hYy0+dHhyYXRlc19jaGFuZ2UpCisJCW9sZHJhdGVzID0gbWFjLT50eHJhdGVzOworCWlmIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgeworCQltYWMtPnR4cmF0ZXMuZGVmYXVsdF9yYXRlID0gSUVFRTgwMjExX09GRE1fUkFURV81NE1COworCQljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVDsKKwkJbWFjLT50eHJhdGVzLmRlZmF1bHRfZmFsbGJhY2sgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUI7CisJCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUX0ZCQUNLOworCX0gZWxzZSBpZiAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTikgeworCQltYWMtPnR4cmF0ZXMuZGVmYXVsdF9yYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzExTUI7CisJCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUOworCQltYWMtPnR4cmF0ZXMuZGVmYXVsdF9mYWxsYmFjayA9IElFRUU4MDIxMV9DQ0tfUkFURV81TUI7CisJCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUX0ZCQUNLOworCX0gZWxzZQorCQlhc3NlcnQoMCk7CisJaWYgKG1hYy0+dHhyYXRlc19jaGFuZ2UpCisJCW1hYy0+dHhyYXRlc19jaGFuZ2UoZGV2LCBjaGFuZ2UsICZvbGRyYXRlcyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0KTsKKwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisKKwlpZWVlODAyMTFzb2Z0bWFjX2NsZWFyX3BlbmRpbmdfd29yayhtYWMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY19zdG9wKTsKKwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NldF9yYXRlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjb3VudCwgdTggKnJhdGVzKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwltZW1jcHkobWFjLT5yYXRlc2luZm8ucmF0ZXMsIHJhdGVzLCBjb3VudCk7CisJbWFjLT5yYXRlc2luZm8uY291bnQgPSBjb3VudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfc2V0X3JhdGVzKTsKKworc3RhdGljIHU4IHJhaXNlX3JhdGUoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4IHJhdGUpCit7CisJaW50IGk7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvICpyaSA9ICZtYWMtPnJhdGVzaW5mbzsKKwkKKwlmb3IgKGk9MDsgaTxyaS0+Y291bnQtMTsgaSsrKSB7CisJCWlmIChyaS0+cmF0ZXNbaV0gPT0gcmF0ZSkKKwkJCXJldHVybiByaS0+cmF0ZXNbaSsxXTsKKwl9CisJLyogSSBndWVzcyB3ZSBjYW4ndCBnbyBhbnkgaGlnaGVyLi4uICovCisJcmV0dXJuIHJpLT5yYXRlc1tyaS0+Y291bnRdOworfQorCit1OCBpZWVlODAyMTFzb2Z0bWFjX2xvd2VyX3JhdGVfZGVsdGEoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4IHJhdGUsIGludCBkZWx0YSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gKnJpID0gJm1hYy0+cmF0ZXNpbmZvOworCQorCWZvciAoaT1kZWx0YTsgaTxyaS0+Y291bnQ7IGkrKykgeworCQlpZiAocmktPnJhdGVzW2ldID09IHJhdGUpCisJCQlyZXR1cm4gcmktPnJhdGVzW2ktZGVsdGFdOworCX0KKwkvKiBJIGd1ZXNzIHdlIGNhbid0IGdvIGFueSBsb3dlci4uLiAqLworCXJldHVybiByaS0+cmF0ZXNbMF07Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMXNvZnRtYWNfYWRkX3R4cmF0ZXNfYmFkbmVzcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwkJCQkJCSBpbnQgYW1vdW50KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgb2xkcmF0ZXM7CisJdTggZGVmYXVsdF9yYXRlID0gbWFjLT50eHJhdGVzLmRlZmF1bHRfcmF0ZTsKKwl1OCBkZWZhdWx0X2ZhbGxiYWNrID0gbWFjLT50eHJhdGVzLmRlZmF1bHRfZmFsbGJhY2s7CisJdTMyIGNoYW5nZXMgPSAwOworCisJLy9UT0RPOiBUaGlzIGlzIGhpZ2hseSBleHBlcmltZW50YWwgY29kZS4KKwkvLyAgICAgIE1heWJlIHRoZSBkeW5hbWljIHJhdGUgc2VsZWN0aW9uIGRvZXMgbm90IHdvcmsKKwkvLyAgICAgIGFuZCBpdCBoYXMgdG8gYmUgcmVtb3ZlZCBhZ2Fpbi4KKworcHJpbnRrKCJiYWRuZXNzICVkXG4iLCBtYWMtPnR4cmF0ZV9iYWRuZXNzKTsKKwltYWMtPnR4cmF0ZV9iYWRuZXNzICs9IGFtb3VudDsKKwlpZiAobWFjLT50eHJhdGVfYmFkbmVzcyA8PSAtMTAwMCkgeworCQkvKiBWZXJ5IHNtYWxsIGJhZG5lc3MuIFRyeSBhIGZhc3RlciBiaXRyYXRlLiAqLworCQlpZiAobWFjLT50eHJhdGVzX2NoYW5nZSkKKwkJCW1lbWNweSgmb2xkcmF0ZXMsICZtYWMtPnR4cmF0ZXMsIHNpemVvZihvbGRyYXRlcykpOworCQlkZWZhdWx0X3JhdGUgPSByYWlzZV9yYXRlKG1hYywgZGVmYXVsdF9yYXRlKTsKKwkJY2hhbmdlcyB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUOworCQlkZWZhdWx0X2ZhbGxiYWNrID0gZ2V0X2ZhbGxiYWNrX3JhdGUobWFjLCBkZWZhdWx0X3JhdGUpOworCQljaGFuZ2VzIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFRfRkJBQ0s7CisJCW1hYy0+dHhyYXRlX2JhZG5lc3MgPSAwOworcHJpbnRrKCJCaXRyYXRlIHJhaXNlZCB0byAldVxuIiwgZGVmYXVsdF9yYXRlKTsKKwl9IGVsc2UgaWYgKG1hYy0+dHhyYXRlX2JhZG5lc3MgPj0gMTAwMDApIHsKKwkJLyogVmVyeSBoaWdoIGJhZG5lc3MuIFRyeSBhIHNsb3dlciBiaXRyYXRlLiAqLworCQlpZiAobWFjLT50eHJhdGVzX2NoYW5nZSkKKwkJCW1lbWNweSgmb2xkcmF0ZXMsICZtYWMtPnR4cmF0ZXMsIHNpemVvZihvbGRyYXRlcykpOworCQlkZWZhdWx0X3JhdGUgPSBsb3dlcl9yYXRlKG1hYywgZGVmYXVsdF9yYXRlKTsKKwkJY2hhbmdlcyB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUOworCQlkZWZhdWx0X2ZhbGxiYWNrID0gZ2V0X2ZhbGxiYWNrX3JhdGUobWFjLCBkZWZhdWx0X3JhdGUpOworCQljaGFuZ2VzIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFRfRkJBQ0s7CisJCW1hYy0+dHhyYXRlX2JhZG5lc3MgPSAwOworcHJpbnRrKCJCaXRyYXRlIGxvd2VyZWQgdG8gJXVcbiIsIGRlZmF1bHRfcmF0ZSk7CisJfQorCisJbWFjLT50eHJhdGVzLmRlZmF1bHRfcmF0ZSA9IGRlZmF1bHRfcmF0ZTsKKwltYWMtPnR4cmF0ZXMuZGVmYXVsdF9mYWxsYmFjayA9IGRlZmF1bHRfZmFsbGJhY2s7CisKKwlpZiAoY2hhbmdlcyAmJiBtYWMtPnR4cmF0ZXNfY2hhbmdlKQorCQltYWMtPnR4cmF0ZXNfY2hhbmdlKG1hYy0+ZGV2LCBjaGFuZ2VzLCAmb2xkcmF0ZXMpOworfQorCit2b2lkIGllZWU4MDIxMXNvZnRtYWNfZnJhZ21lbnRfbG9zdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICB1MTYgd2xfc2VxKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCWllZWU4MDIxMXNvZnRtYWNfYWRkX3R4cmF0ZXNfYmFkbmVzcyhtYWMsIDEwMDApOworCS8vVE9ETworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX2ZyYWdtZW50X2xvc3QpOworCitzdGF0aWMgaW50IHJhdGVfY21wKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykgeworCXU4ICphLCAqYjsKKwlhID0gKHU4KilhXzsKKwliID0gKHU4KiliXzsKKwlyZXR1cm4gKCgqYSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSAtICgqYiAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSk7Cit9CisKKy8qIEFsbG9jYXRlIGEgc29mdG1hYyBuZXR3b3JrIHN0cnVjdCBhbmQgZmlsbCBpdCBmcm9tIGEgbmV0d29yayAqLworc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqCitpZWVlODAyMTFzb2Z0bWFjX2NyZWF0ZV9uZXR3b3JrKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKnNvZnRuZXQ7CisJc29mdG5ldCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmspLCBHRlBfQVRPTUlDKTsKKwlpZihzb2Z0bmV0ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCW1lbWNweShzb2Z0bmV0LT5ic3NpZCwgbmV0LT5ic3NpZCwgRVRIX0FMRU4pOworCXNvZnRuZXQtPmNoYW5uZWwgPSBuZXQtPmNoYW5uZWw7CisJc29mdG5ldC0+ZXNzaWQubGVuID0gbmV0LT5zc2lkX2xlbjsKKwltZW1jcHkoc29mdG5ldC0+ZXNzaWQuZGF0YSwgbmV0LT5zc2lkLCBzb2Z0bmV0LT5lc3NpZC5sZW4pOworCQorCS8qIGNvcHkgcmF0ZXMgb3ZlciAqLworCXNvZnRuZXQtPnN1cHBvcnRlZF9yYXRlcy5jb3VudCA9IG5ldC0+cmF0ZXNfbGVuOworCW1lbWNweSgmc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLnJhdGVzWzBdLCBuZXQtPnJhdGVzLCBuZXQtPnJhdGVzX2xlbik7CisJbWVtY3B5KCZzb2Z0bmV0LT5zdXBwb3J0ZWRfcmF0ZXMucmF0ZXNbc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLmNvdW50XSwgbmV0LT5yYXRlc19leCwgbmV0LT5yYXRlc19leF9sZW4pOworCXNvZnRuZXQtPnN1cHBvcnRlZF9yYXRlcy5jb3VudCArPSBuZXQtPnJhdGVzX2V4X2xlbjsKKwlzb3J0KHNvZnRuZXQtPnN1cHBvcnRlZF9yYXRlcy5yYXRlcywgc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLmNvdW50LCBzaXplb2Yoc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLnJhdGVzWzBdKSwgcmF0ZV9jbXAsIE5VTEwpOworCQorCXNvZnRuZXQtPmNhcGFiaWxpdGllcyA9IG5ldC0+Y2FwYWJpbGl0eTsKKwlyZXR1cm4gc29mdG5ldDsKK30KKworCisvKiBBZGQgYSBuZXR3b3JrIHRvIHRoZSBsaXN0LCB3aGlsZSBsb2NrZWQgKi8KK3ZvaWQKK2llZWU4MDIxMXNvZnRtYWNfYWRkX25ldHdvcmtfbG9ja2VkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKmFkZF9uZXQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wdHI7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqc29mdG1hY19uZXQgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaChsaXN0X3B0ciwgJm1hYy0+bmV0d29ya19saXN0KSB7CisJCXNvZnRtYWNfbmV0ID0gbGlzdF9lbnRyeShsaXN0X3B0ciwgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yaywgbGlzdCk7CisJCWlmKCFtZW1jbXAoc29mdG1hY19uZXQtPmJzc2lkLCBhZGRfbmV0LT5ic3NpZCwgRVRIX0FMRU4pKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCXNvZnRtYWNfbmV0ID0gTlVMTDsKKwl9CisJaWYoc29mdG1hY19uZXQgPT0gTlVMTCkKKwkJbGlzdF9hZGQoJihhZGRfbmV0LT5saXN0KSwgJm1hYy0+bmV0d29ya19saXN0KTsKK30KKworLyogQWRkIGEgbmV0d29yayB0byB0aGUgbGlzdCwgd2l0aCBsb2NraW5nICovCit2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2FkZF9uZXR3b3JrKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKmFkZF9uZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJaWVlZTgwMjExc29mdG1hY19hZGRfbmV0d29ya19sb2NrZWQobWFjLCBhZGRfbmV0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKK30KKworCisvKiBEZWxldGUgYSBuZXR3b3JrIGZyb20gdGhlIGxpc3QsIHdoaWxlIGxvY2tlZCovCit2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2RlbF9uZXR3b3JrX2xvY2tlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpkZWxfbmV0KQoreworCWxpc3RfZGVsKCYoZGVsX25ldC0+bGlzdCkpOworfQorCisvKiBEZWxldGUgYSBuZXR3b3JrIGZyb20gdGhlIGxpc3Qgd2l0aCBsb2NraW5nICovCit2b2lkCitpZWVlODAyMTFzb2Z0bWFjX2RlbF9uZXR3b3JrKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKmRlbF9uZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJaWVlZTgwMjExc29mdG1hY19kZWxfbmV0d29ya19sb2NrZWQobWFjLCBkZWxfbmV0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKK30KKworLyogR2V0IGEgbmV0d29yayBmcm9tIHRoZSBsaXN0IGJ5IE1BQyB3aGlsZSBsb2NrZWQgKi8KK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKgoraWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZF9sb2NrZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJdTggKmJzc2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcHRyOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKnNvZnRtYWNfbmV0ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoKGxpc3RfcHRyLCAmbWFjLT5uZXR3b3JrX2xpc3QpIHsKKwkJc29mdG1hY19uZXQgPSBsaXN0X2VudHJ5KGxpc3RfcHRyLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrLCBsaXN0KTsKKwkJaWYoIW1lbWNtcChzb2Z0bWFjX25ldC0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikpCisJCQlicmVhazsKKwkJZWxzZQorCQkJc29mdG1hY19uZXQgPSBOVUxMOworCX0KKwlyZXR1cm4gc29mdG1hY19uZXQ7Cit9CisKKy8qIEdldCBhIG5ldHdvcmsgZnJvbSB0aGUgbGlzdCBieSBCU1NJRCB3aXRoIGxvY2tpbmcgKi8KK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKgoraWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwl1OCAqYnNzaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpzb2Z0bWFjX25ldDsKKwkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJc29mdG1hY19uZXQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkX2xvY2tlZChtYWMsIGJzc2lkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc29mdG1hY19uZXQ7Cit9CisKKy8qIEdldCBhIG5ldHdvcmsgZnJvbSB0aGUgbGlzdCBieSBFU1NJRCB3aGlsZSBsb2NrZWQgKi8KK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKgoraWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9lc3NpZF9sb2NrZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgKmVzc2lkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcHRyOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKnNvZnRtYWNfbmV0ID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2gobGlzdF9wdHIsICZtYWMtPm5ldHdvcmtfbGlzdCkgeworCQlzb2Z0bWFjX25ldCA9IGxpc3RfZW50cnkobGlzdF9wdHIsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmssIGxpc3QpOworCQlpZiAoc29mdG1hY19uZXQtPmVzc2lkLmxlbiA9PSBlc3NpZC0+bGVuICYmCisJCQkhbWVtY21wKHNvZnRtYWNfbmV0LT5lc3NpZC5kYXRhLCBlc3NpZC0+ZGF0YSwgZXNzaWQtPmxlbikpCisJCQlyZXR1cm4gc29mdG1hY19uZXQ7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBHZXQgYSBuZXR3b3JrIGZyb20gdGhlIGxpc3QgYnkgRVNTSUQgd2l0aCBsb2NraW5nICovCitzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICoKK2llZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfZXNzaWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZXNzaWQgKmVzc2lkKQkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKnNvZnRtYWNfbmV0ID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlzb2Z0bWFjX25ldCA9IGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfZXNzaWRfbG9ja2VkKG1hYywgZXNzaWQpOwkKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc29mdG1hY19uZXQ7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkpvaGFubmVzIEJlcmciKTsKK01PRFVMRV9BVVRIT1IoIkpvc2VwaCBKZXphayIpOworTU9EVUxFX0FVVEhPUigiTGFycnkgRmluZ2VyIik7CitNT0RVTEVfQVVUSE9SKCJEYW5ueSB2YW4gRHlrIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEJ1ZXNjaCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCI4MDIuMTEgc29mdHdhcmUgTUFDIik7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19wcml2LmggYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhN2RiZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3ByaXYuaApAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIEludGVybmFsIHNvZnRtYWMgQVBJIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEpvc2VwaCBKZXphayA8am9zZWp4QGdlbnRvby5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICogICAgICAgICAgICAgICAgICAgICAgICAgIERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgorICogICAgICAgICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCisjaWZuZGVmIElFRUU4MDIxMVNPRlRNQUNfUFJJVl9IXworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX1BSSVZfSF8KKworI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFzb2Z0bWFjLmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxMXNvZnRtYWNfd3guaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworCisjZGVmaW5lIFBGWAkJCQkiU29mdE1BQzogIgorCisjaWZkZWYgYXNzZXJ0CisjIHVuZGVmIGFzc2VydAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHCisjZGVmaW5lIGFzc2VydChleHByKSBcCisJZG8gewkJCQkJCQkJCQlcCisJCWlmICh1bmxpa2VseSghKGV4cHIpKSkgewkJCQkJCVwKKwkJcHJpbnRrbChLRVJOX0VSUiBQRlggIkFTU0VSVElPTiBGQUlMRUQgKCVzKSBhdDogJXM6JWQ6JXMoKVxuIiwgI2V4cHIsCVwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsJCQkJXAorCQl9CQkJCQkJCQkJXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBhc3NlcnQoZXhwcikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyogcmF0ZSBsaW1pdGVkIHByaW50aygpLiAqLworI2lmZGVmIHByaW50a2wKKyMgdW5kZWYgcHJpbnRrbAorI2VuZGlmCisjZGVmaW5lIHByaW50a2woZiwgeC4uLikgIGRvIHsgaWYgKHByaW50a19yYXRlbGltaXQoKSkgcHJpbnRrKGYgLCMjeCk7IH0gd2hpbGUgKDApCisvKiByYXRlIGxpbWl0ZWQgcHJpbnRrKCkgZm9yIGRlYnVnZ2luZyAqLworI2lmZGVmIGRwcmludGtsCisjIHVuZGVmIGRwcmludGtsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcKKyMgZGVmaW5lIGRwcmludGtsCQlwcmludGtsCisjZWxzZQorIyBkZWZpbmUgZHByaW50a2woZiwgeC4uLikJZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogZGVidWdnaW5nIHByaW50aygpICovCisjaWZkZWYgZHByaW50aworIyB1bmRlZiBkcHJpbnRrCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSUVFRTgwMjExX1NPRlRNQUNfREVCVUcKKyMgZGVmaW5lIGRwcmludGsoZiwgeC4uLikgIGRvIHsgcHJpbnRrKGYgLCMjeCk7IH0gd2hpbGUgKDApCisjZWxzZQorIyBkZWZpbmUgZHByaW50ayhmLCB4Li4uKSAgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogcHJpdmF0ZSBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyAqLworCisvKioqIHByb3RvdHlwZXMgZnJvbSBfc2Nhbi5jICovCit2b2lkIGllZWU4MDIxMXNvZnRtYWNfc2Nhbih2b2lkICpzbSk7CisvKiBmb3IgaW50ZXJuYWwgdXNlIGlmIHNjYW5uaW5nIGlzIG5lZWRlZCAqLworaW50IGllZWU4MDIxMXNvZnRtYWNfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyk7Cit2b2lkIGllZWU4MDIxMXNvZnRtYWNfc3RvcF9zY2FuKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKTsKK3ZvaWQgaWVlZTgwMjExc29mdG1hY193YWl0X2Zvcl9zY2FuKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKTsKKworLyogZm9yIHVzZSBieSBfbW9kdWxlLmMgdG8gYXNzaWduIHRvIHRoZSBjYWxsYmFja3MgKi8KK2ludCBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X3NjYW5faW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGllZWU4MDIxMXNvZnRtYWNfc3RvcF9zY2FuX2ltcGxlbWVudGF0aW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3dhaXRfZm9yX3NjYW5faW1wbGVtZW50YXRpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKy8qKiogTmV0d29yayBwcm90b3R5cGVzIGZyb20gX21vZHVsZS5jICovCitzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICogaWVlZTgwMjExc29mdG1hY19jcmVhdGVfbmV0d29yaygKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXQpOwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX2FkZF9uZXR3b3JrX2xvY2tlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQpOwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX2FkZF9uZXR3b3JrKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCk7Cit2b2lkIGllZWU4MDIxMXNvZnRtYWNfZGVsX25ldHdvcmtfbG9ja2VkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCk7Cit2b2lkIGllZWU4MDIxMXNvZnRtYWNfZGVsX25ldHdvcmsoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqbmV0KTsKK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKiBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkX2xvY2tlZCgKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggKmVhKTsKK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKiBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1OCAqZWEpOworc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqIGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfc3NpZF9sb2NrZWQoCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CitzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICogaWVlZTgwMjExc29mdG1hY19nZXRfbmV0d29ya19ieV9zc2lkKAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOworc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqCitpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Vzc2lkX2xvY2tlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCAqZXNzaWQpOworc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yayAqCitpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Vzc2lkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Vzc2lkICplc3NpZCk7CisKKy8qIFJhdGVzIHJlbGF0ZWQgKi8KK3U4IGllZWU4MDIxMXNvZnRtYWNfbG93ZXJfcmF0ZV9kZWx0YShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSwgaW50IGRlbHRhKTsKK3N0YXRpYyBpbmxpbmUgdTggbG93ZXJfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSkgeworCXJldHVybiBpZWVlODAyMTFzb2Z0bWFjX2xvd2VyX3JhdGVfZGVsdGEobWFjLCByYXRlLCAxKTsKK30KKworc3RhdGljIGlubGluZSB1OCBnZXRfZmFsbGJhY2tfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSkKK3sKKwlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19sb3dlcl9yYXRlX2RlbHRhKG1hYywgcmF0ZSwgMik7Cit9CisgICAgICAgICAgICAgICAgCisKKy8qKiogcHJvdG90eXBlcyBmcm9tIF9pby5jICovCitpbnQgaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwl2b2lkKiBwdHJhcmcsIHUzMiB0eXBlLCB1MzIgYXJnKTsKKworLyoqKiBwcm90b3R5cGVzIGZyb20gX2F1dGguYyAqLworLyogZG8gdGhlc2UgaGF2ZSB0byBnbyBpbnRvIHRoZSBwdWJsaWMgaGVhZGVyPyAqLworaW50IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9yZXEoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCk7CitpbnQgaWVlZTgwMjExc29mdG1hY19kZWF1dGhfcmVxKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrICpuZXQsIGludCByZWFzb24pOworCisvKiBmb3IgdXNlIGJ5IF9tb2R1bGUuYyB0byBhc3NpZ24gdG8gdGhlIGNhbGxiYWNrcyAqLworaW50IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9yZXNwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfYXV0aCAqYXV0aCk7CitpbnQgaWVlZTgwMjExc29mdG1hY19kZWF1dGhfcmVzcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX2RlYXV0aCAqZGVhdXRoKTsKKworLyoqKiBwcm90b3R5cGVzIGZyb20gX2Fzc29jLmMgKi8KK3ZvaWQgaWVlZTgwMjExc29mdG1hY19hc3NvY193b3JrKHZvaWQgKmQpOworaW50IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Fzc29jX3Jlc3BvbnNlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlICogcmVzcCwKKwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7CitpbnQgaWVlZTgwMjExc29mdG1hY19oYW5kbGVfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICogZGlzYXNzb2MpOworaW50IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX3JlYXNzb2NfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCSAgICAgICAgc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3QgKiByZWFzc29jKTsKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19hc3NvY190aW1lb3V0KHZvaWQgKmQpOworCisvKiBzb21lIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9oYW5kbGVyc19jaGVja19zZWxmKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20pCit7CisJcmV0dXJuIChzbS0+c3RhcnRfc2NhbiA9PSBpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X3NjYW5faW1wbGVtZW50YXRpb24pICYmIAorCQkoc20tPnN0b3Bfc2NhbiA9PSBpZWVlODAyMTFzb2Z0bWFjX3N0b3Bfc2Nhbl9pbXBsZW1lbnRhdGlvbikgJiYgCisJCShzbS0+d2FpdF9mb3Jfc2NhbiA9PSBpZWVlODAyMTFzb2Z0bWFjX3dhaXRfZm9yX3NjYW5faW1wbGVtZW50YXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5fc2FuaXR5X2NoZWNrKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20pCit7CisJcmV0dXJuICgoc20tPnN0YXJ0X3NjYW4gIT0gaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuX2ltcGxlbWVudGF0aW9uKSAmJiAKKwkJKHNtLT5zdG9wX3NjYW4gIT0gaWVlZTgwMjExc29mdG1hY19zdG9wX3NjYW5faW1wbGVtZW50YXRpb24pICYmIAorCQkoc20tPndhaXRfZm9yX3NjYW4gIT0gaWVlZTgwMjExc29mdG1hY193YWl0X2Zvcl9zY2FuX2ltcGxlbWVudGF0aW9uKQorCQkpIHx8IGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9oYW5kbGVyc19jaGVja19zZWxmKHNtKTsKK30KKworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX1BST0JFX0RFTEFZCQlIWi8yCisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfV09SS1FVRVVFX05BTUVfTEVOCSgxNyArIElGTkFNU0laKQorCitzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19uZXR3b3JrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OwkvKiBMaXN0ICovCisJLyogTmV0d29yayBpbmZvcm1hdGlvbiBjb3BpZWQgZnJvbSBpZWVlODAyMTFfbmV0d29yayAqLworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBjaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Vzc2lkIGVzc2lkOworCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvIHN1cHBvcnRlZF9yYXRlczsKKworCS8qIFNvZnRNQUMgc3BlY2lmaWMgKi8KKwl1MTYgYXV0aGVudGljYXRpbmc6MSwJCQkvKiBTdGF0dXMgRmxhZ3MgKi8KKwkgICAgYXV0aGVudGljYXRlZDoxLAorCSAgICBhdXRoX2Rlc3luY2VkX29uY2U6MTsKKworCXUxNiBjYXBhYmlsaXRpZXM7CQkJLyogQ2FwYWJpbGl0aWVzIGJpdGZpZWxkICovCisJdTggY2hhbGxlbmdlX2xlbjsJCQkvKiBBdXRoIENoYWxsZW5nZSBsZW5ndGggKi8KKwljaGFyICpjaGFsbGVuZ2U7CQkJLyogQ2hhbGxlbmdlIFRleHQgKi8KK307CisKKy8qIHN0cnVjdHVyZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgbmV0d29ya3Mgd2UncmUgYXV0aCdpbmcgdG8gKi8KK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2F1dGhfcXVldWVfaXRlbSB7CisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsJLyogTGlzdCBoZWFkICovCisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfbmV0d29yawkqbmV0OwkvKiBOZXR3b3JrIHRvIGF1dGggKi8KKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UJKm1hYzsJLyogU29mdE1BQyBkZXZpY2UgKi8KKwl1OCByZXRyeTsJCQkJLyogUmV0cnkgbGltaXQgKi8KKwl1OCBzdGF0ZTsJCQkJLyogQXV0aCBTdGF0ZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29yazsJLyogV29yayBxdWV1ZSAqLworfTsKKworLyogc2Nhbm5pbmcgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5pbmZvIHsKKwl1OCBjdXJyZW50X2NoYW5uZWxfaWR4LAorCSAgIG51bWJlcl9jaGFubmVsczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzOworCXU4IHN0YXJ0ZWQ6MSwKKwkgICBzdG9wOjE7CisJdTggc2tpcF9mbGFnczsKKwlzdHJ1Y3QgY29tcGxldGlvbiBmaW5pc2hlZDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc29mdG1hY19zY2FuOworfTsKKworLyogcHJpdmF0ZSBldmVudCBzdHJ1Y3QgKi8KK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2V2ZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJaW50IGV2ZW50X3R5cGU7CisJdm9pZCAqZXZlbnRfY29udGV4dDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlub3RpZnlfZnVuY3Rpb25fcHRyIGZ1bjsKKwl2b2lkICpjb250ZXh0OworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjOworfTsKKwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLCBpbnQgZXZlbnQsIHZvaWQgKmV2ZW50X2NvbnRleHQpOwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgaW50IGV2ZW50LCB2b2lkICpldmVudF9jb250ZXh0KTsKK2ludCBpZWVlODAyMTFzb2Z0bWFjX25vdGlmeV9pbnRlcm5hbChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlpbnQgZXZlbnQsIHZvaWQgKmV2ZW50X2NvbnRleHQsIG5vdGlmeV9mdW5jdGlvbl9wdHIgZnVuLCB2b2lkICpjb250ZXh0LCBnZnBfdCBnZnBfbWFzayk7CisKKyNlbmRpZiAvKiBJRUVFODAyMTFTT0ZUTUFDX1BSSVZfSF8gKi8KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3NjYW4uYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjlhYjhiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfc2Nhbi5jCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogU2Nhbm5pbmcgcm91dGluZXMuCisgKgorICogVGhlc2UgYXJlIG5vdCBleHBvcnRlZCBiZWNhdXNlIHRoZXkncmUgYXNzaWduZWQgdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEpvc2VwaCBKZXphayA8am9zZWp4QGdlbnRvby5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICogICAgICAgICAgICAgICAgICAgICAgICAgIERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgorICogICAgICAgICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgImllZWU4MDIxMXNvZnRtYWNfcHJpdi5oIgorCisvKiBpbnRlcm5hbCwgdXNlIHRvIHRyaWdnZXIgc2Nhbm5pbmcgaWYgbmVlZGVkLgorICogUmV0dXJucyAtRUJVU1kgaWYgYWxyZWFkeSBzY2FubmluZywKKyAqIHJlc3VsdCBvZiBzdGFydF9zY2FuIG90aGVyd2lzZSAqLworaW50CitpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwlpZiAoc20tPnNjYW5uaW5nKQorCXsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKwl9CisJc20tPnNjYW5uaW5nID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCisJcmV0ID0gc20tPnN0YXJ0X3NjYW4oc20tPmRldik7CisJaWYgKHJldCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkJc20tPnNjYW5uaW5nID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZAoraWVlZTgwMjExc29mdG1hY19zdG9wX3NjYW4oc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CisJCisJaWYgKCFzbS0+c2Nhbm5pbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwkKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCXNtLT5zdG9wX3NjYW4oc20tPmRldik7Cit9CisKK3ZvaWQKK2llZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2NhbihzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkKKwlpZiAoIXNtLT5zY2FubmluZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CisJc20tPndhaXRfZm9yX3NjYW4oc20tPmRldik7Cit9CisKKworLyogaW50ZXJuYWwgc2Nhbm5pbmcgaW1wbGVtZW50YXRpb24gZm9sbG93cyAqLwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NjYW4odm9pZCAqZCkKK3sKKwlpbnQgaW52YWxpZF9jaGFubmVsOworCXU4IGN1cnJlbnRfY2hhbm5lbF9pZHg7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSA9IChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKilkOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5pbmZvICpzaSA9IHNtLT5zY2FuaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd2hpbGUgKCEoc2ktPnN0b3ApICYmIChzaS0+Y3VycmVudF9jaGFubmVsX2lkeCA8IHNpLT5udW1iZXJfY2hhbm5lbHMpKSB7CisJCWN1cnJlbnRfY2hhbm5lbF9pZHggPSBzaS0+Y3VycmVudF9jaGFubmVsX2lkeDsKKwkJc2ktPmN1cnJlbnRfY2hhbm5lbF9pZHgrKzsgLyogZ28gdG8gdGhlIG5leHQgY2hhbm5lbCAqLworCisJCWludmFsaWRfY2hhbm5lbCA9IChzaS0+c2tpcF9mbGFncyAmIHNpLT5jaGFubmVsc1tjdXJyZW50X2NoYW5uZWxfaWR4XS5mbGFncyk7CisKKwkJaWYgKCFpbnZhbGlkX2NoYW5uZWwpIHsKKwkJCXNtLT5zZXRfY2hhbm5lbChzbS0+ZGV2LCBzaS0+Y2hhbm5lbHNbY3VycmVudF9jaGFubmVsX2lkeF0uY2hhbm5lbCk7CisJCQkvLyBGSVhNRSBtYWtlIHRoaXMgdXNlciBjb25maWd1cmFibGUgKGFjdGl2ZS9wYXNzaXZlKQorCQkJaWYoaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShzbSwgTlVMTCwgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSwgMCkpCisJCQkJcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiU2VuZGluZyBQcm9iZSBSZXF1ZXN0IEZhaWxlZFxuIik7CisKKwkJCS8qIGFsc28gc2VuZCBkaXJlY3RlZCBtYW5hZ2VtZW50IGZyYW1lIGZvciB0aGUgbmV0d29yayB3ZSdyZSBsb29raW5nIGZvciAqLworCQkJLy8gVE9ETzogaXMgdGhpcyBpZiBjb3JyZWN0LCBvciBzaG91bGQgd2UgZG8gdGhpcyBvbmx5IGlmIHNjYW5uaW5nIGZyb20gYXNzb2MgcmVxdWVzdD8KKwkJCWlmIChzbS0+YXNzb2NpbmZvLnJlcV9lc3NpZC5sZW4pCisJCQkJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShzbSwgJnNtLT5hc3NvY2luZm8ucmVxX2Vzc2lkLCBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRLCAwKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2ktPnNvZnRtYWNfc2NhbiwgSUVFRTgwMjExU09GVE1BQ19QUk9CRV9ERUxBWSk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKFBGWCAiTm90IHByb2JpbmcgQ2hhbm5lbCAlZCAobm90IGFsbG93ZWQgaGVyZSlcbiIsIHNpLT5jaGFubmVsc1tjdXJyZW50X2NoYW5uZWxfaWR4XS5jaGFubmVsKTsKKwkJfQorCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnNpLT5zb2Z0bWFjX3NjYW4pOworCXNpLT5zdGFydGVkID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCisJZHByaW50ayhQRlggIlNjYW5uaW5nIGZpbmlzaGVkXG4iKTsKKwlpZWVlODAyMTFzb2Z0bWFjX3NjYW5fZmluaXNoZWQoc20pOworCWNvbXBsZXRlX2FsbCgmc20tPnNjYW5pbmZvLT5maW5pc2hlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfc2NhbmluZm8gKmFsbG9jYXRlX3NjYW5pbmZvKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKQoreworCS8qIHVnaC4gY2FuIHdlIGNhbGwgdGhpcyB3aXRob3V0IGhhdmluZyB0aGUgc3BpbmxvY2sgaGVsZD8gKi8KKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19zY2FuaW5mbyAqaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5pbmZvKSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFpbmZvKSkKKwkJcmV0dXJuIE5VTEw7CisJSU5JVF9XT1JLKCZpbmZvLT5zb2Z0bWFjX3NjYW4sIGllZWU4MDIxMXNvZnRtYWNfc2NhbiwgbWFjKTsKKwlpbml0X2NvbXBsZXRpb24oJmluZm8tPmZpbmlzaGVkKTsKKwlyZXR1cm4gaW5mbzsKK30KKworaW50IGllZWU4MDIxMXNvZnRtYWNfc3RhcnRfc2Nhbl9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCXJldHVybiAtRU5PREVWOworCisJYXNzZXJ0KGllZWU4MDIxMXNvZnRtYWNfc2Nhbl9oYW5kbGVyc19jaGVja19zZWxmKHNtKSk7CisJaWYgKCFpZWVlODAyMTFzb2Z0bWFjX3NjYW5faGFuZGxlcnNfY2hlY2tfc2VsZihzbSkpCisJCXJldHVybiAtRUlOVkFMOworCQkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkvKiBpdCBsb29rcyBsaWtlIHdlIG5lZWQgdG8gaG9sZCB0aGUgbG9jayBoZXJlCisJICogdG8gbWFrZSBzdXJlIHdlIGRvbid0IGFsbG9jYXRlIHR3byBvZiB0aGVzZS4uLiAqLworCWlmICh1bmxpa2VseSghc20tPnNjYW5pbmZvKSkKKwkJc20tPnNjYW5pbmZvID0gYWxsb2NhdGVfc2NhbmluZm8oc20pOworCWlmICh1bmxpa2VseSghc20tPnNjYW5pbmZvKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzbS0+c2NhbmluZm8tPnNraXBfZmxhZ3MgPSBJRUVFODAyMTFfQ0hfSU5WQUxJRDsKKwlpZiAoMCAvKiBub3Qgc2Nhbm5pbmcgaW4gSUVFRTgwMi4xMWIgKi8pLy9UT0RPCisJCXNtLT5zY2FuaW5mby0+c2tpcF9mbGFncyB8PSBJRUVFODAyMTFfQ0hfQl9PTkxZOworCWlmICgwIC8qIElFRUU4MDIuMTFhICovKSB7Ly9UT0RPCisJCXNtLT5zY2FuaW5mby0+Y2hhbm5lbHMgPSBzbS0+aWVlZS0+Z2VvLmE7CisJCXNtLT5zY2FuaW5mby0+bnVtYmVyX2NoYW5uZWxzID0gc20tPmllZWUtPmdlby5hX2NoYW5uZWxzOworCX0gZWxzZSB7CisJCXNtLT5zY2FuaW5mby0+Y2hhbm5lbHMgPSBzbS0+aWVlZS0+Z2VvLmJnOworCQlzbS0+c2NhbmluZm8tPm51bWJlcl9jaGFubmVscyA9IHNtLT5pZWVlLT5nZW8uYmdfY2hhbm5lbHM7CisJfQorCWRwcmludGsoUEZYICJTdGFydCBzY2FubmluZyB3aXRoIGNoYW5uZWw6ICVkXG4iLCBzbS0+c2NhbmluZm8tPmNoYW5uZWxzWzBdLmNoYW5uZWwpOworCWRwcmludGsoUEZYICJTY2FubmluZyAlZCBjaGFubmVsc1xuIiwgc20tPnNjYW5pbmZvLT5udW1iZXJfY2hhbm5lbHMpOworCXNtLT5zY2FuaW5mby0+Y3VycmVudF9jaGFubmVsX2lkeCA9IDA7CisJc20tPnNjYW5pbmZvLT5zdGFydGVkID0gMTsKKwlzbS0+c2NhbmluZm8tPnN0b3AgPSAwOworCUlOSVRfQ09NUExFVElPTihzbS0+c2NhbmluZm8tPmZpbmlzaGVkKTsKKwlzY2hlZHVsZV93b3JrKCZzbS0+c2NhbmluZm8tPnNvZnRtYWNfc2Nhbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3N0b3Bfc2Nhbl9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhc3NlcnQoaWVlZTgwMjExc29mdG1hY19zY2FuX2hhbmRsZXJzX2NoZWNrX3NlbGYoc20pKTsKKwlpZiAoIWllZWU4MDIxMXNvZnRtYWNfc2Nhbl9oYW5kbGVyc19jaGVja19zZWxmKHNtKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CisJYXNzZXJ0KHNtLT5zY2FuaW5mbyAhPSBOVUxMKTsKKwlpZiAoc20tPnNjYW5pbmZvKSB7CisJCWlmIChzbS0+c2NhbmluZm8tPnN0YXJ0ZWQpCisJCQlzbS0+c2NhbmluZm8tPnN0b3AgPSAxOworCQllbHNlCisJCQljb21wbGV0ZV9hbGwoJnNtLT5zY2FuaW5mby0+ZmluaXNoZWQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIGllZWU4MDIxMXNvZnRtYWNfd2FpdF9mb3Jfc2Nhbl9pbXBsZW1lbnRhdGlvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlhc3NlcnQoaWVlZTgwMjExc29mdG1hY19zY2FuX2hhbmRsZXJzX2NoZWNrX3NlbGYoc20pKTsKKwlpZiAoIWllZWU4MDIxMXNvZnRtYWNfc2Nhbl9oYW5kbGVyc19jaGVja19zZWxmKHNtKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CisJaWYgKCFzbS0+c2NhbmluZm8tPnN0YXJ0ZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNtLT5zY2FuaW5mby0+ZmluaXNoZWQpOworfQorCisvKiB0aGlzIGlzIHdoYXQgZHJpdmVycyAodGhhdCBkbyBzY2FubmluZykgY2FsbCB3aGVuIHRoZXkncmUgZG9uZSAqLwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NjYW5fZmluaXNoZWQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CisJc20tPnNjYW5uaW5nID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbS0+bG9jaywgZmxhZ3MpOworCQorCWlmIChzbS0+YXNzb2NpbmZvLmJzc3ZhbGlkKSB7CisJCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldDsKKworCQluZXQgPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKHNtLCBzbS0+YXNzb2NpbmZvLmJzc2lkKTsKKwkJaWYgKG5ldCkKKwkJCXNtLT5zZXRfY2hhbm5lbChzbS0+ZGV2LCBuZXQtPmNoYW5uZWwpOworCX0KKwlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzKHNtLCBJRUVFODAyMTFTT0ZUTUFDX0VWRU5UX1NDQU5fRklOSVNIRUQsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY19zY2FuX2ZpbmlzaGVkKTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYTliYzYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG91ciBfd3ggaGFuZGxlcnMuIE1ha2Ugc3VyZSB5b3UgRVhQT1JUX1NZTUJPTF9HUEwgdGhlbQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogICAgICAgICAgICAgICAgICAgICAgICAgIEpvc2VwaCBKZXphayA8am9zZWp4QGdlbnRvby5vcmc+CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICogICAgICAgICAgICAgICAgICAgICAgICAgIERhbm55IHZhbiBEeWsgPGt1Z2VsZmFuZ0BnZW50b28ub3JnPgorICogICAgICAgICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgQnVlc2NoIDxtYnVlc2NoQGZyZWVuZXQuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCisjaW5jbHVkZSAiaWVlZTgwMjExc29mdG1hY19wcml2LmgiCisKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisKK2ludAoraWVlZTgwMjExc29mdG1hY193eF90cmlnZ2VyX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKKwlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19zdGFydF9zY2FuKHNtKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfdHJpZ2dlcl9zY2FuKTsKKworCitpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3NjYW5fcmVzdWx0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAorCQkJCSAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOworCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc20tPmllZWUsIGluZm8sIGRhdGEsIGV4dHJhKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3NjYW5fcmVzdWx0cyk7CisKK2ludAoraWVlZTgwMjExc29mdG1hY193eF9zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKKwkJCSAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKKwlpbnQgbGVuZ3RoID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOworCQorCXNtLT5hc3NvY2luZm8uc3RhdGljX2Vzc2lkID0gMDsKKworCWlmIChkYXRhLT5lc3NpZC5mbGFncyAmJiBkYXRhLT5lc3NpZC5sZW5ndGggJiYgZXh0cmEgLypyZXF1aXJlZD8qLykgeworCQlsZW5ndGggPSBtaW4oZGF0YS0+ZXNzaWQubGVuZ3RoIC0gMSwgSVdfRVNTSURfTUFYX1NJWkUpOworCQlpZiAobGVuZ3RoKSB7CisJCQltZW1jcHkoc20tPmFzc29jaW5mby5yZXFfZXNzaWQuZGF0YSwgZXh0cmEsIGxlbmd0aCk7CisJCQlzbS0+YXNzb2NpbmZvLnN0YXRpY19lc3NpZCA9IDE7CisJCX0KKwl9CisJc20tPmFzc29jaW5mby5zY2FuX3JldHJ5ID0gSUVFRTgwMjExU09GVE1BQ19BU1NPQ19TQ0FOX1JFVFJZX0xJTUlUOworCisJLyogc2V0IG91ciByZXF1ZXN0ZWQgRVNTSUQgbGVuZ3RoLgorCSAqIElmIGFwcGxpY2FibGUsIHdlIGhhdmUgYWxyZWFkeSBjb3BpZWQgdGhlIGRhdGEgaW4gKi8KKwlzbS0+YXNzb2NpbmZvLnJlcV9lc3NpZC5sZW4gPSBsZW5ndGg7CisKKwkvKiBxdWV1ZSBsb3dlciBsZXZlbCBjb2RlIHRvIGRvIHdvcmsgKGlmIG5lY2Vzc2FyeSkgKi8KKwlzY2hlZHVsZV93b3JrKCZzbS0+YXNzb2NpbmZvLndvcmspOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X2Vzc2lkKTsKKworaW50CitpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAorCQkJICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBhdm9pZCBnZXR0aW5nIGluY29uc2lzdGVudCBpbmZvcm1hdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzbS0+bG9jaywgZmxhZ3MpOworCS8qIElmIGFsbCBmYWlscywgcmV0dXJuIEFOWSAoZW1wdHkpICovCisJZGF0YS0+ZXNzaWQubGVuZ3RoID0gMDsKKwlkYXRhLT5lc3NpZC5mbGFncyA9IDA7ICAvKiBhY3RpdmUgKi8KKwkKKwkvKiBJZiB3ZSBoYXZlIGEgc3RhdGljYWxseSBjb25maWd1cmVkIEVTU0lEIHRoZW4gcmV0dXJuIGl0ICovCisJaWYgKHNtLT5hc3NvY2luZm8uc3RhdGljX2Vzc2lkKSB7CisJCWRhdGEtPmVzc2lkLmxlbmd0aCA9IHNtLT5hc3NvY2luZm8ucmVxX2Vzc2lkLmxlbjsKKwkJZGF0YS0+ZXNzaWQuZmxhZ3MgPSAxOyAgLyogYWN0aXZlICovCisJCW1lbWNweShleHRyYSwgc20tPmFzc29jaW5mby5yZXFfZXNzaWQuZGF0YSwgc20tPmFzc29jaW5mby5yZXFfZXNzaWQubGVuKTsKKwl9CisJCisJLyogSWYgd2UncmUgYXNzb2NpYXRpbmcvYXNzb2NpYXRlZCwgcmV0dXJuIHRoYXQgKi8KKwlpZiAoc20tPmFzc29jaWF0ZWQgfHwgc20tPmFzc29jaW5mby5hc3NvY2lhdGluZykgeworCQlkYXRhLT5lc3NpZC5sZW5ndGggPSBzbS0+YXNzb2NpbmZvLmFzc29jaWF0ZV9lc3NpZC5sZW47CisJCWRhdGEtPmVzc2lkLmZsYWdzID0gMTsgIC8qIGFjdGl2ZSAqLworCQltZW1jcHkoZXh0cmEsIHNtLT5hc3NvY2luZm8uYXNzb2NpYXRlX2Vzc2lkLmRhdGEsIHNtLT5hc3NvY2luZm8uYXNzb2NpYXRlX2Vzc2lkLmxlbik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3d4X2dldF9lc3NpZCk7CisKK2ludAoraWVlZTgwMjExc29mdG1hY193eF9zZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwKKwkJCSAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG1hYy0+aWVlZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXMzMiBpbl9yYXRlID0gZGF0YS0+Yml0cmF0ZS52YWx1ZTsKKwl1OCByYXRlOworCWludCBpc19vZmRtID0gMDsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmIChpbl9yYXRlID09IC0xKSB7CisJCS8qIGF1dG9tYXRpYyBkZXRlY3QgKi8KKwkJaWYgKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKQorCQkJaW5fcmF0ZSA9IDU0MDAwMDAwOworCQllbHNlCisJCQlpbl9yYXRlID0gMTEwMDAwMDA7CisJfQorCisJc3dpdGNoIChpbl9yYXRlKSB7CisJY2FzZSAxMDAwMDAwOgorCQlyYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwkJYnJlYWs7CisJY2FzZSAyMDAwMDAwOgorCQlyYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzJNQjsKKwkJYnJlYWs7CisJY2FzZSA1NTAwMDAwOgorCQlyYXRlID0gSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKKwkJYnJlYWs7CisJY2FzZSAxMTAwMDAwMDoKKwkJcmF0ZSA9IElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COworCQlicmVhazsKKwljYXNlIDYwMDAwMDA6CisJCXJhdGUgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjsKKwkJaXNfb2ZkbSA9IDE7CisJCWJyZWFrOworCWNhc2UgOTAwMDAwMDoKKwkJcmF0ZSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COworCQlpc19vZmRtID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxMjAwMDAwMDoKKwkJcmF0ZSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKKwkJaXNfb2ZkbSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTgwMDAwMDA6CisJCXJhdGUgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI7CisJCWlzX29mZG0gPSAxOworCQlicmVhazsKKwljYXNlIDI0MDAwMDAwOgorCQlyYXRlID0gSUVFRTgwMjExX09GRE1fUkFURV8yNE1COworCQlpc19vZmRtID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzNjAwMDAwMDoKKwkJcmF0ZSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKKwkJaXNfb2ZkbSA9IDE7CisJCWJyZWFrOworCWNhc2UgNDgwMDAwMDA6CisJCXJhdGUgPSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI7CisJCWlzX29mZG0gPSAxOworCQlicmVhazsKKwljYXNlIDU0MDAwMDAwOgorCQlyYXRlID0gSUVFRTgwMjExX09GRE1fUkFURV81NE1COworCQlpc19vZmRtID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCisJLyogQ2hlY2sgaWYgY29ycmVjdCBtb2R1bGF0aW9uIGZvciB0aGlzIFBIWS4gKi8KKwlpZiAoaXNfb2ZkbSAmJiAhKGllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJbWFjLT50eHJhdGVzLmRlZmF1bHRfcmF0ZSA9IHJhdGU7CisJbWFjLT50eHJhdGVzLmRlZmF1bHRfZmFsbGJhY2sgPSBsb3dlcl9yYXRlKG1hYywgcmF0ZSk7CisJZXJyID0gMDsKKworb3V0X3VubG9jazoJCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfc2V0X3JhdGUpOworCitpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKG1hYy0+dHhyYXRlcy5kZWZhdWx0X3JhdGUpIHsKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xTUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSAxMDAwMDAwOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8yTUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSAyMDAwMDAwOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSA1NTAwMDAwOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COgorCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gMTEwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV82TUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSA2MDAwMDAwOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgorCQlkYXRhLT5iaXRyYXRlLnZhbHVlID0gOTAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSAxMjAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSAxODAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSAyNDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSAzNjAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSA0ODAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUI6CisJCWRhdGEtPmJpdHJhdGUudmFsdWUgPSA1NDAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXNzZXJ0KDApOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWVyciA9IDA7CitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3JhdGUpOworCitpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X3dhcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsCisJCQkgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCWlmIChtYWMtPmFzc29jaW5mby5ic3N2YWxpZCkKKwkJbWVtY3B5KGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgbWFjLT5hc3NvY2luZm8uYnNzaWQsIEVUSF9BTEVOKTsKKwllbHNlCisJCW1lbXNldChkYXRhLT5hcF9hZGRyLnNhX2RhdGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwlkYXRhLT5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9nZXRfd2FwKTsKKworaW50CitpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCisJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLAorCQkJICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYobmV0X2Rldik7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYW55W10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb2ZmW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChkYXRhLT5hcF9hZGRyLnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCWlmICghbWVtY21wKGFueSwgZGF0YS0+YXBfYWRkci5zYV9kYXRhLCBFVEhfQUxFTikgfHwKKwkgICAgIW1lbWNtcChvZmYsIGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pKSB7CisJCXNjaGVkdWxlX3dvcmsoJm1hYy0+YXNzb2NpbmZvLndvcmspOworCQlnb3RvIG91dDsKKyAgICAgICAgfSBlbHNlIHsKKwkJaWYgKCFtZW1jbXAobWFjLT5hc3NvY2luZm8uYnNzaWQsIGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pKSB7CisJCQlpZiAobWFjLT5hc3NvY2luZm8uYXNzb2NpYXRpbmcgfHwgbWFjLT5hc3NvY2lhdGVkKSB7CisJCQkvKiBic3NpZCB1bmNoYW5nZWQgYW5kIGFzc29jaWF0ZWQgb3IgYXNzb2NpYXRpbmcgLSBqdXN0IHJldHVybiAqLworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJLyogY29weSBuZXcgdmFsdWUgaW4gZGF0YS0+YXBfYWRkci5zYV9kYXRhIHRvIGJzc2lkICovCisJCQltZW1jcHkobWFjLT5hc3NvY2luZm8uYnNzaWQsIGRhdGEtPmFwX2FkZHIuc2FfZGF0YSwgRVRIX0FMRU4pOworCQl9CQorCQkvKiBxdWV1ZSBhc3NvY2lhdGUgaWYgbmV3IGJzc2lkIG9yIChvbGQgb25lIGFnYWluIGFuZCBub3QgYXNzb2NpYXRlZCkgKi8KKwkJc2NoZWR1bGVfd29yaygmbWFjLT5hc3NvY2luZm8ud29yayk7CisgICAgICAgIH0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9zZXRfd2FwKTsKKworaW50CitpZWVlODAyMTFzb2Z0bWFjX3d4X3NldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkgICAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKwljaGFyICpidWY7CisJaW50IGk7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCS8qIGJsZWguIHNob3VsZG4ndCBiZSBsb2NrZWQgZm9yIHRoYXQga21hbGxvYy4uLiAqLworCisJaWYgKHdycXUtPmRhdGEubGVuZ3RoKSB7CisJCWlmICgod3JxdS0+ZGF0YS5sZW5ndGggPCAyKSB8fCAoZXh0cmFbMV0rMiAhPSB3cnF1LT5kYXRhLmxlbmd0aCkpIHsKKwkJCS8qIHRoaXMgaXMgYW4gSUUsIHNvIHRoZSBsZW5ndGggbXVzdCBiZQorCQkJICogY29ycmVjdC4gSXMgaXQgcG9zc2libGUgdGhvdWdoIHRoYXQKKwkJCSAqIG1vcmUgdGhhbiBvbmUgSUUgaXMgcGFzc2VkIGluPworCQkJICovCisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKG1hYy0+d3BhLklFYnVmbGVuIDw9IHdycXUtPmRhdGEubGVuZ3RoKSB7CisJCQlidWYgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghYnVmKSB7CisJCQkJZXJyID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWtmcmVlKG1hYy0+d3BhLklFKTsKKwkJCW1hYy0+d3BhLklFID0gYnVmOworCQkJbWFjLT53cGEuSUVidWZsZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKKwkJfQorCQltZW1jcHkobWFjLT53cGEuSUUsIGV4dHJhLCB3cnF1LT5kYXRhLmxlbmd0aCk7CisJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiZ2VuZXJpYyBJRSBzZXQgdG8gIik7CisJCWZvciAoaT0wO2k8d3JxdS0+ZGF0YS5sZW5ndGg7aSsrKQorCQkJZHByaW50aygiJS4yeCIsIG1hYy0+d3BhLklFW2ldKTsKKwkJZHByaW50aygiXG4iKTsKKwkJbWFjLT53cGEuSUVsZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKKwl9IGVsc2UgeworCQlrZnJlZShtYWMtPndwYS5JRSk7CisJCW1hYy0+d3BhLklFID0gTlVMTDsKKwkJbWFjLT53cGEuSUVsZW4gPSAwOworCQltYWMtPndwYS5JRWJ1ZmxlbiA9IDA7CisJfQorCisgb3V0OgkKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9zZXRfZ2VuaWUpOworCitpbnQKK2llZWU4MDIxMXNvZnRtYWNfd3hfZ2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCSAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOworCWludCBzcGFjZSA9IHdycXUtPmRhdGEubGVuZ3RoOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkKKwl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7CisJCisJaWYgKG1hYy0+d3BhLklFICYmIG1hYy0+d3BhLklFbGVuKSB7CisJCXdycXUtPmRhdGEubGVuZ3RoID0gbWFjLT53cGEuSUVsZW47CisJCWlmIChtYWMtPndwYS5JRWxlbiA8PSBzcGFjZSkKKwkJCW1lbWNweShleHRyYSwgbWFjLT53cGEuSUUsIG1hYy0+d3BhLklFbGVuKTsKKwkJZWxzZQorCQkJZXJyID0gLUUyQklHOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExc29mdG1hY193eF9nZXRfZ2VuaWUpOworCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9hZl9pbmV0LmMgYi9uZXQvaXB2NC9hZl9pbmV0LmMKaW5kZXggOTdjMjc2Zi4uZGMyMDZmMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWZfaW5ldC5jCisrKyBiL25ldC9pcHY0L2FmX2luZXQuYwpAQCAtNzg4LDQ1ICs3ODgsNTMgQEAKIH0KIAogY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7Ci0JLmZhbWlseSA9CVBGX0lORVQsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLnJlbGVhc2UgPQlpbmV0X3JlbGVhc2UsCi0JLmJpbmQgPQkJaW5ldF9iaW5kLAotCS5jb25uZWN0ID0JaW5ldF9zdHJlYW1fY29ubmVjdCwKLQkuc29ja2V0cGFpciA9CXNvY2tfbm9fc29ja2V0cGFpciwKLQkuYWNjZXB0ID0JaW5ldF9hY2NlcHQsCi0JLmdldG5hbWUgPQlpbmV0X2dldG5hbWUsCi0JLnBvbGwgPQkJdGNwX3BvbGwsCi0JLmlvY3RsID0JaW5ldF9pb2N0bCwKLQkubGlzdGVuID0JaW5ldF9saXN0ZW4sCi0JLnNodXRkb3duID0JaW5ldF9zaHV0ZG93biwKLQkuc2V0c29ja29wdCA9CXNvY2tfY29tbW9uX3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQgPQlzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAotCS5zZW5kbXNnID0JaW5ldF9zZW5kbXNnLAotCS5yZWN2bXNnID0Jc29ja19jb21tb25fcmVjdm1zZywKLQkubW1hcCA9CQlzb2NrX25vX21tYXAsCi0JLnNlbmRwYWdlID0JdGNwX3NlbmRwYWdlCisJLmZhbWlseQkJICAgPSBQRl9JTkVULAorCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKKwkucmVsZWFzZQkgICA9IGluZXRfcmVsZWFzZSwKKwkuYmluZAkJICAgPSBpbmV0X2JpbmQsCisJLmNvbm5lY3QJICAgPSBpbmV0X3N0cmVhbV9jb25uZWN0LAorCS5zb2NrZXRwYWlyCSAgID0gc29ja19ub19zb2NrZXRwYWlyLAorCS5hY2NlcHQJCSAgID0gaW5ldF9hY2NlcHQsCisJLmdldG5hbWUJICAgPSBpbmV0X2dldG5hbWUsCisJLnBvbGwJCSAgID0gdGNwX3BvbGwsCisJLmlvY3RsCQkgICA9IGluZXRfaW9jdGwsCisJLmxpc3RlbgkJICAgPSBpbmV0X2xpc3RlbiwKKwkuc2h1dGRvd24JICAgPSBpbmV0X3NodXRkb3duLAorCS5zZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLnNlbmRtc2cJICAgPSBpbmV0X3NlbmRtc2csCisJLnJlY3Ztc2cJICAgPSBzb2NrX2NvbW1vbl9yZWN2bXNnLAorCS5tbWFwCQkgICA9IHNvY2tfbm9fbW1hcCwKKwkuc2VuZHBhZ2UJICAgPSB0Y3Bfc2VuZHBhZ2UsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorI2VuZGlmCiB9OwogCiBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfZGdyYW1fb3BzID0gewotCS5mYW1pbHkgPQlQRl9JTkVULAotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5yZWxlYXNlID0JaW5ldF9yZWxlYXNlLAotCS5iaW5kID0JCWluZXRfYmluZCwKLQkuY29ubmVjdCA9CWluZXRfZGdyYW1fY29ubmVjdCwKLQkuc29ja2V0cGFpciA9CXNvY2tfbm9fc29ja2V0cGFpciwKLQkuYWNjZXB0ID0Jc29ja19ub19hY2NlcHQsCi0JLmdldG5hbWUgPQlpbmV0X2dldG5hbWUsCi0JLnBvbGwgPQkJdWRwX3BvbGwsCi0JLmlvY3RsID0JaW5ldF9pb2N0bCwKLQkubGlzdGVuID0Jc29ja19ub19saXN0ZW4sCi0JLnNodXRkb3duID0JaW5ldF9zaHV0ZG93biwKLQkuc2V0c29ja29wdCA9CXNvY2tfY29tbW9uX3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQgPQlzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAotCS5zZW5kbXNnID0JaW5ldF9zZW5kbXNnLAotCS5yZWN2bXNnID0Jc29ja19jb21tb25fcmVjdm1zZywKLQkubW1hcCA9CQlzb2NrX25vX21tYXAsCi0JLnNlbmRwYWdlID0JaW5ldF9zZW5kcGFnZSwKKwkuZmFtaWx5CQkgICA9IFBGX0lORVQsCisJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLAorCS5yZWxlYXNlCSAgID0gaW5ldF9yZWxlYXNlLAorCS5iaW5kCQkgICA9IGluZXRfYmluZCwKKwkuY29ubmVjdAkgICA9IGluZXRfZGdyYW1fY29ubmVjdCwKKwkuc29ja2V0cGFpcgkgICA9IHNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0CQkgICA9IHNvY2tfbm9fYWNjZXB0LAorCS5nZXRuYW1lCSAgID0gaW5ldF9nZXRuYW1lLAorCS5wb2xsCQkgICA9IHVkcF9wb2xsLAorCS5pb2N0bAkJICAgPSBpbmV0X2lvY3RsLAorCS5saXN0ZW4JCSAgID0gc29ja19ub19saXN0ZW4sCisJLnNodXRkb3duCSAgID0gaW5ldF9zaHV0ZG93biwKKwkuc2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5zZW5kbXNnCSAgID0gaW5ldF9zZW5kbXNnLAorCS5yZWN2bXNnCSAgID0gc29ja19jb21tb25fcmVjdm1zZywKKwkubW1hcAkJICAgPSBzb2NrX25vX21tYXAsCisJLnNlbmRwYWdlCSAgID0gaW5ldF9zZW5kcGFnZSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKIC8qCkBAIC04MzQsMjQgKzg0MiwyOCBAQAogICogdWRwX3BvbGwKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9zb2NrcmF3X29wcyA9IHsKLQkuZmFtaWx5ID0JUEZfSU5FVCwKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkucmVsZWFzZSA9CWluZXRfcmVsZWFzZSwKLQkuYmluZCA9CQlpbmV0X2JpbmQsCi0JLmNvbm5lY3QgPQlpbmV0X2RncmFtX2Nvbm5lY3QsCi0JLnNvY2tldHBhaXIgPQlzb2NrX25vX3NvY2tldHBhaXIsCi0JLmFjY2VwdCA9CXNvY2tfbm9fYWNjZXB0LAotCS5nZXRuYW1lID0JaW5ldF9nZXRuYW1lLAotCS5wb2xsID0JCWRhdGFncmFtX3BvbGwsCi0JLmlvY3RsID0JaW5ldF9pb2N0bCwKLQkubGlzdGVuID0Jc29ja19ub19saXN0ZW4sCi0JLnNodXRkb3duID0JaW5ldF9zaHV0ZG93biwKLQkuc2V0c29ja29wdCA9CXNvY2tfY29tbW9uX3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQgPQlzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAotCS5zZW5kbXNnID0JaW5ldF9zZW5kbXNnLAotCS5yZWN2bXNnID0Jc29ja19jb21tb25fcmVjdm1zZywKLQkubW1hcCA9CQlzb2NrX25vX21tYXAsCi0JLnNlbmRwYWdlID0JaW5ldF9zZW5kcGFnZSwKKwkuZmFtaWx5CQkgICA9IFBGX0lORVQsCisJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLAorCS5yZWxlYXNlCSAgID0gaW5ldF9yZWxlYXNlLAorCS5iaW5kCQkgICA9IGluZXRfYmluZCwKKwkuY29ubmVjdAkgICA9IGluZXRfZGdyYW1fY29ubmVjdCwKKwkuc29ja2V0cGFpcgkgICA9IHNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0CQkgICA9IHNvY2tfbm9fYWNjZXB0LAorCS5nZXRuYW1lCSAgID0gaW5ldF9nZXRuYW1lLAorCS5wb2xsCQkgICA9IGRhdGFncmFtX3BvbGwsCisJLmlvY3RsCQkgICA9IGluZXRfaW9jdGwsCisJLmxpc3RlbgkJICAgPSBzb2NrX25vX2xpc3RlbiwKKwkuc2h1dGRvd24JICAgPSBpbmV0X3NodXRkb3duLAorCS5zZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLnNlbmRtc2cJICAgPSBpbmV0X3NlbmRtc2csCisJLnJlY3Ztc2cJICAgPSBzb2NrX2NvbW1vbl9yZWN2bXNnLAorCS5tbWFwCQkgICA9IHNvY2tfbm9fbW1hcCwKKwkuc2VuZHBhZ2UJICAgPSBpbmV0X3NlbmRwYWdlLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKKwkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdCwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGluZXRfZmFtaWx5X29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FoNC5jIGIvbmV0L2lwdjQvYWg0LmMKaW5kZXggYWVkNTM3Zi4uZTE2ZDhiNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWg0LmMKKysrIGIvbmV0L2lwdjQvYWg0LmMKQEAgLTk3LDYgKzk3LDcgQEAKIAlhaC0+cmVzZXJ2ZWQgPSAwOwogCWFoLT5zcGkgPSB4LT5pZC5zcGk7CiAJYWgtPnNlcV9ubyA9IGh0b25sKCsreC0+cmVwbGF5Lm9zZXEpOworCXhmcm1fYWV2ZW50X2RvcmVwbGF5KHgpOwogCWFocC0+aWN2KGFocCwgc2tiLCBhaC0+YXV0aF9kYXRhKTsKIAogCXRvcF9pcGgtPnRvcyA9IGlwaC0+dG9zOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCBhY2NkZWZlLi4wNDFkYWRkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtODc5LDE2ICs4NzksMTYgQEAKIAogCW4gPSBfX25laWdoX2xvb2t1cCgmYXJwX3RibCwgJnNpcCwgZGV2LCAwKTsKIAotI2lmZGVmIENPTkZJR19JUF9BQ0NFUFRfVU5TT0xJQ0lURURfQVJQCi0JLyogVW5zb2xpY2l0ZWQgQVJQIGlzIG5vdCBhY2NlcHRlZCBieSBkZWZhdWx0LgotCSAgIEl0IGlzIHBvc3NpYmxlLCB0aGF0IHRoaXMgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkIGZvciBzb21lCi0JICAgZGV2aWNlcyAoc3RyaXAgaXMgY2FuZGlkYXRlKQotCSAqLwotCWlmIChuID09IE5VTEwgJiYKLQkgICAgYXJwLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVBMWSkgJiYKLQkgICAgaW5ldF9hZGRyX3R5cGUoc2lwKSA9PSBSVE5fVU5JQ0FTVCkKLQkJbiA9IF9fbmVpZ2hfbG9va3VwKCZhcnBfdGJsLCAmc2lwLCBkZXYsIC0xKTsKLSNlbmRpZgorCWlmIChpcHY0X2RldmNvbmYuYXJwX2FjY2VwdCkgeworCQkvKiBVbnNvbGljaXRlZCBBUlAgaXMgbm90IGFjY2VwdGVkIGJ5IGRlZmF1bHQuCisJCSAgIEl0IGlzIHBvc3NpYmxlLCB0aGF0IHRoaXMgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkIGZvciBzb21lCisJCSAgIGRldmljZXMgKHN0cmlwIGlzIGNhbmRpZGF0ZSkKKwkJICovCisJCWlmIChuID09IE5VTEwgJiYKKwkJICAgIGFycC0+YXJfb3AgPT0gaHRvbnMoQVJQT1BfUkVQTFkpICYmCisJCSAgICBpbmV0X2FkZHJfdHlwZShzaXApID09IFJUTl9VTklDQVNUKQorCQkJbiA9IF9fbmVpZ2hfbG9va3VwKCZhcnBfdGJsLCAmc2lwLCBkZXYsIC0xKTsKKwl9CiAKIAlpZiAobikgewogCQlpbnQgc3RhdGUgPSBOVURfUkVBQ0hBQkxFOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDNmZmE2MGQuLjQ0ZmRmMTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTEzOTQsNiArMTM5NCwxNCBAQAogCQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCQl9LAogCQl7CisJCQkuY3RsX25hbWUJPSBORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQsCisJCQkucHJvY25hbWUJPSAiYXJwX2FjY2VwdCIsCisJCQkuZGF0YQkJPSAmaXB2NF9kZXZjb25mLmFycF9hY2NlcHQsCisJCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkJLm1vZGUJCT0gMDY0NCwKKwkJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwkJfSwKKwkJewogCQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfQ09ORl9OT1hGUk0sCiAJCQkucHJvY25hbWUJPSAiZGlzYWJsZV94ZnJtIiwKIAkJCS5kYXRhCQk9ICZpcHY0X2RldmNvbmYubm9feGZybSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCA3M2JmY2FlLi5iZjg4YzYyMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCisrKyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtMTIsMTMgKzEyLDYgQEAKICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CiAKLS8qIGRlY2Fwc3VsYXRpb24gZGF0YSBmb3IgdXNlIHdoZW4gcG9zdC1wcm9jZXNzaW5nICovCi1zdHJ1Y3QgZXNwX2RlY2FwX2RhdGEgewotCXhmcm1fYWRkcmVzc190CXNhZGRyOwotCV9fdTE2CQlzcG9ydDsKLQlfX3U4CQlwcm90bzsKLX07Ci0KIHN0YXRpYyBpbnQgZXNwX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgZXJyOwpAQCAtOTcsNiArOTAsNyBAQAogCiAJZXNwaC0+c3BpID0geC0+aWQuc3BpOwogCWVzcGgtPnNlcV9ubyA9IGh0b25sKCsreC0+cmVwbGF5Lm9zZXEpOworCXhmcm1fYWV2ZW50X2RvcmVwbGF5KHgpOwogCiAJaWYgKGVzcC0+Y29uZi5pdmxlbikKIAkJY3J5cHRvX2NpcGhlcl9zZXRfaXYodGZtLCBlc3AtPmNvbmYuaXZlYywgY3J5cHRvX3RmbV9hbGdfaXZzaXplKHRmbSkpOwpAQCAtMTUwLDYgKzE0NCwxMCBAQAogCWludCBlbGVuID0gc2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IGlwX2VzcF9oZHIpIC0gZXNwLT5jb25mLml2bGVuIC0gYWxlbjsKIAlpbnQgbmZyYWdzOwogCWludCBlbmNhcF9sZW4gPSAwOworCXU4IG5leHRoZHJbMl07CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1OCB3b3JrYnVmWzYwXTsKKwlpbnQgcGFkbGVuOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSkpCiAJCWdvdG8gb3V0OwpAQCAtMTg1LDEyNCArMTgzLDg0IEBACiAJaWYgKGVzcC0+Y29uZi5pdmxlbikKIAkJY3J5cHRvX2NpcGhlcl9zZXRfaXYoZXNwLT5jb25mLnRmbSwgZXNwaC0+ZW5jX2RhdGEsIGNyeXB0b190Zm1fYWxnX2l2c2l6ZShlc3AtPmNvbmYudGZtKSk7CiAKLSAgICAgICAgewotCQl1OCBuZXh0aGRyWzJdOwotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gJmVzcC0+c2didWZbMF07Ci0JCXU4IHdvcmtidWZbNjBdOwotCQlpbnQgcGFkbGVuOworCXNnID0gJmVzcC0+c2didWZbMF07CiAKLQkJaWYgKHVubGlrZWx5KG5mcmFncyA+IEVTUF9OVU1fRkFTVF9TRykpIHsKLQkJCXNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSpuZnJhZ3MsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFzZykKLQkJCQlnb3RvIG91dDsKLQkJfQotCQlza2JfdG9fc2d2ZWMoc2tiLCBzZywgc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSArIGVzcC0+Y29uZi5pdmxlbiwgZWxlbik7Ci0JCWNyeXB0b19jaXBoZXJfZGVjcnlwdChlc3AtPmNvbmYudGZtLCBzZywgc2csIGVsZW4pOwotCQlpZiAodW5saWtlbHkoc2cgIT0gJmVzcC0+c2didWZbMF0pKQotCQkJa2ZyZWUoc2cpOworCWlmICh1bmxpa2VseShuZnJhZ3MgPiBFU1BfTlVNX0ZBU1RfU0cpKSB7CisJCXNnID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSpuZnJhZ3MsIEdGUF9BVE9NSUMpOworCQlpZiAoIXNnKQorCQkJZ290byBvdXQ7CisJfQorCXNrYl90b19zZ3ZlYyhza2IsIHNnLCBzaXplb2Yoc3RydWN0IGlwX2VzcF9oZHIpICsgZXNwLT5jb25mLml2bGVuLCBlbGVuKTsKKwljcnlwdG9fY2lwaGVyX2RlY3J5cHQoZXNwLT5jb25mLnRmbSwgc2csIHNnLCBlbGVuKTsKKwlpZiAodW5saWtlbHkoc2cgIT0gJmVzcC0+c2didWZbMF0pKQorCQlrZnJlZShzZyk7CiAKLQkJaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBza2ItPmxlbi1hbGVuLTIsIG5leHRoZHIsIDIpKQotCQkJQlVHKCk7CisJaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBza2ItPmxlbi1hbGVuLTIsIG5leHRoZHIsIDIpKQorCQlCVUcoKTsKIAotCQlwYWRsZW4gPSBuZXh0aGRyWzBdOwotCQlpZiAocGFkbGVuKzIgPj0gZWxlbikKKwlwYWRsZW4gPSBuZXh0aGRyWzBdOworCWlmIChwYWRsZW4rMiA+PSBlbGVuKQorCQlnb3RvIG91dDsKKworCS8qIC4uLiBjaGVjayBwYWRkaW5nIGJpdHMgaGVyZS4gU2lsbHkuIDotKSAqLyAKKworCWlmICh4LT5lbmNhcCkgeworCQlzdHJ1Y3QgeGZybV9lbmNhcF90bXBsICplbmNhcCA9IHgtPmVuY2FwOworCQlzdHJ1Y3QgdWRwaGRyICp1aDsKKworCQlpZiAoZW5jYXAtPmVuY2FwX3R5cGUgIT0gZGVjYXAtPmRlY2FwX3R5cGUpCiAJCQlnb3RvIG91dDsKIAotCQkvKiAuLi4gY2hlY2sgcGFkZGluZyBiaXRzIGhlcmUuIFNpbGx5LiA6LSkgKi8gCisJCXVoID0gKHN0cnVjdCB1ZHBoZHIgKikoaXBoICsgMSk7CisJCWVuY2FwX2xlbiA9ICh2b2lkKillc3BoIC0gKHZvaWQqKXVoOwogCi0JCWlmICh4LT5lbmNhcCAmJiBkZWNhcCAmJiBkZWNhcC0+ZGVjYXBfdHlwZSkgewotCQkJc3RydWN0IGVzcF9kZWNhcF9kYXRhICplbmNhcF9kYXRhOwotCQkJc3RydWN0IHVkcGhkciAqdWggPSAoc3RydWN0IHVkcGhkciAqKSAoaXBoKzEpOworCQkvKgorCQkgKiAxKSBpZiB0aGUgTkFULVQgcGVlcidzIElQIG9yIHBvcnQgY2hhbmdlZCB0aGVuCisJCSAqICAgIGFkdmVydGl6ZSB0aGUgY2hhbmdlIHRvIHRoZSBrZXlpbmcgZGFlbW9uLgorCQkgKiAgICBUaGlzIGlzIGFuIGluYm91bmQgU0EsIHNvIGp1c3QgY29tcGFyZQorCQkgKiAgICBTUkMgcG9ydHMuCisJCSAqLworCQlpZiAoaXBoLT5zYWRkciAhPSB4LT5wcm9wcy5zYWRkci5hNCB8fAorCQkgICAgdWgtPnNvdXJjZSAhPSBlbmNhcC0+ZW5jYXBfc3BvcnQpIHsKKwkJCXhmcm1fYWRkcmVzc190IGlwYWRkcjsKIAotCQkJZW5jYXBfZGF0YSA9IChzdHJ1Y3QgZXNwX2RlY2FwX2RhdGEgKikgKGRlY2FwLT5kZWNhcF9kYXRhKTsKLQkJCWVuY2FwX2RhdGEtPnByb3RvID0gMDsKLQotCQkJc3dpdGNoIChkZWNhcC0+ZGVjYXBfdHlwZSkgewotCQkJY2FzZSBVRFBfRU5DQVBfRVNQSU5VRFA6Ci0JCQljYXNlIFVEUF9FTkNBUF9FU1BJTlVEUF9OT05fSUtFOgotCQkJCWVuY2FwX2RhdGEtPnByb3RvID0gQUZfSU5FVDsKLQkJCQllbmNhcF9kYXRhLT5zYWRkci5hNCA9IGlwaC0+c2FkZHI7Ci0JCQkJZW5jYXBfZGF0YS0+c3BvcnQgPSB1aC0+c291cmNlOwotCQkJCWVuY2FwX2xlbiA9ICh2b2lkKillc3BoIC0gKHZvaWQqKXVoOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCWdvdG8gb3V0OwotCQkJfQorCQkJaXBhZGRyLmE0ID0gaXBoLT5zYWRkcjsKKwkJCWttX25ld19tYXBwaW5nKHgsICZpcGFkZHIsIHVoLT5zb3VyY2UpOworCQkJCQorCQkJLyogWFhYOiBwZXJoYXBzIGFkZCBhbiBleHRyYQorCQkJICogcG9saWN5IGNoZWNrIGhlcmUsIHRvIHNlZQorCQkJICogaWYgd2Ugc2hvdWxkIGFsbG93IG9yCisJCQkgKiByZWplY3QgYSBwYWNrZXQgZnJvbSBhCisJCQkgKiBkaWZmZXJlbnQgc291cmNlCisJCQkgKiBhZGRyZXNzL3BvcnQuCisJCQkgKi8KIAkJfQotCi0JCWlwaC0+cHJvdG9jb2wgPSBuZXh0aGRyWzFdOwotCQlwc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIGFsZW4gLSBwYWRsZW4gLSAyKTsKLQkJbWVtY3B5KHdvcmtidWYsIHNrYi0+bmgucmF3LCBpcGgtPmlobCo0KTsKLQkJc2tiLT5oLnJhdyA9IHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSArIGVzcC0+Y29uZi5pdmxlbik7Ci0JCXNrYi0+bmgucmF3ICs9IGVuY2FwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW47Ci0JCW1lbWNweShza2ItPm5oLnJhdywgd29ya2J1ZiwgaXBoLT5paGwqNCk7Ci0JCXNrYi0+bmguaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4pOworCQorCQkvKgorCQkgKiAyKSBpZ25vcmUgVURQL1RDUCBjaGVja3N1bXMgaW4gY2FzZQorCQkgKiAgICBvZiBOQVQtVCBpbiBUcmFuc3BvcnQgTW9kZSwgb3IKKwkJICogICAgcGVyZm9ybSBvdGhlciBwb3N0LXByb2Nlc3NpbmcgZml4ZXMKKwkJICogICAgYXMgcGVyIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNiwKKwkJICogICAgc2VjdGlvbiAzLjEuMgorCQkgKi8KKwkJaWYgKCF4LT5wcm9wcy5tb2RlKQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9CiAKKwlpcGgtPnByb3RvY29sID0gbmV4dGhkclsxXTsKKwlwc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIGFsZW4gLSBwYWRsZW4gLSAyKTsKKwltZW1jcHkod29ya2J1Ziwgc2tiLT5uaC5yYXcsIGlwaC0+aWhsKjQpOworCXNrYi0+aC5yYXcgPSBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW4pOworCXNrYi0+bmgucmF3ICs9IGVuY2FwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW47CisJbWVtY3B5KHNrYi0+bmgucmF3LCB3b3JrYnVmLCBpcGgtPmlobCo0KTsKKwlza2ItPm5oLmlwaC0+dG90X2xlbiA9IGh0b25zKHNrYi0+bGVuKTsKKwogCXJldHVybiAwOwogCiBvdXQ6CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgZXNwX3Bvc3RfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2RlY2FwX3N0YXRlICpkZWNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLSAgCi0JaWYgKHgtPmVuY2FwKSB7Ci0JCXN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwgKmVuY2FwOwotCQlzdHJ1Y3QgZXNwX2RlY2FwX2RhdGEgKmRlY2FwX2RhdGE7Ci0KLQkJZW5jYXAgPSB4LT5lbmNhcDsKLQkJZGVjYXBfZGF0YSA9IChzdHJ1Y3QgZXNwX2RlY2FwX2RhdGEgKikoZGVjYXAtPmRlY2FwX2RhdGEpOwotCi0JCS8qIGZpcnN0LCBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjYXAgdHlwZSA9PSB0aGUgZW5jYXAgdHlwZSAqLwotCQlpZiAoZW5jYXAtPmVuY2FwX3R5cGUgIT0gZGVjYXAtPmRlY2FwX3R5cGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlzd2l0Y2ggKGVuY2FwLT5lbmNhcF90eXBlKSB7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgVURQX0VOQ0FQX0VTUElOVURQOgotCQljYXNlIFVEUF9FTkNBUF9FU1BJTlVEUF9OT05fSUtFOgotCQkJLyoKLQkJCSAqIDEpIGlmIHRoZSBOQVQtVCBwZWVyJ3MgSVAgb3IgcG9ydCBjaGFuZ2VkIHRoZW4KLQkJCSAqICAgIGFkdmVydGl6ZSB0aGUgY2hhbmdlIHRvIHRoZSBrZXlpbmcgZGFlbW9uLgotCQkJICogICAgVGhpcyBpcyBhbiBpbmJvdW5kIFNBLCBzbyBqdXN0IGNvbXBhcmUKLQkJCSAqICAgIFNSQyBwb3J0cy4KLQkJCSAqLwotCQkJaWYgKGRlY2FwX2RhdGEtPnByb3RvID09IEFGX0lORVQgJiYKLQkJCSAgICAoZGVjYXBfZGF0YS0+c2FkZHIuYTQgIT0geC0+cHJvcHMuc2FkZHIuYTQgfHwKLQkJCSAgICAgZGVjYXBfZGF0YS0+c3BvcnQgIT0gZW5jYXAtPmVuY2FwX3Nwb3J0KSkgewotCQkJCXhmcm1fYWRkcmVzc190IGlwYWRkcjsKLQotCQkJCWlwYWRkci5hNCA9IGRlY2FwX2RhdGEtPnNhZGRyLmE0OwotCQkJCWttX25ld19tYXBwaW5nKHgsICZpcGFkZHIsIGRlY2FwX2RhdGEtPnNwb3J0KTsKLQkJCQkJCi0JCQkJLyogWFhYOiBwZXJoYXBzIGFkZCBhbiBleHRyYQotCQkJCSAqIHBvbGljeSBjaGVjayBoZXJlLCB0byBzZWUKLQkJCQkgKiBpZiB3ZSBzaG91bGQgYWxsb3cgb3IKLQkJCQkgKiByZWplY3QgYSBwYWNrZXQgZnJvbSBhCi0JCQkJICogZGlmZmVyZW50IHNvdXJjZQotCQkJCSAqIGFkZHJlc3MvcG9ydC4KLQkJCQkgKi8KLQkJCX0KLQkJCi0JCQkvKgotCQkJICogMikgaWdub3JlIFVEUC9UQ1AgY2hlY2tzdW1zIGluIGNhc2UKLQkJCSAqICAgIG9mIE5BVC1UIGluIFRyYW5zcG9ydCBNb2RlLCBvcgotCQkJICogICAgcGVyZm9ybSBvdGhlciBwb3N0LXByb2Nlc3NpbmcgZml4ZXMKLQkJCSAqICAgIGFzIHBlciAqIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNiwKLQkJCSAqICAgIHNlY3Rpb24gMy4xLjIKLQkJCSAqLwotCQkJaWYgKCF4LT5wcm9wcy5tb2RlKQotCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTMyIGVzcDRfZ2V0X21heF9zaXplKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgbXR1KQogewogCXN0cnVjdCBlc3BfZGF0YSAqZXNwID0geC0+ZGF0YTsKQEAgLTQ1OCw3ICs0MTYsNiBAQAogCS5kZXN0cnVjdG9yCT0gZXNwX2Rlc3Ryb3ksCiAJLmdldF9tYXhfc2l6ZQk9IGVzcDRfZ2V0X21heF9zaXplLAogCS5pbnB1dAkJPSBlc3BfaW5wdXQsCi0JLnBvc3RfaW5wdXQJPSBlc3BfcG9zdF9pbnB1dCwKIAkub3V0cHV0CQk9IGVzcF9vdXRwdXQKIH07CiAKQEAgLTQ3MCwxNSArNDI3LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgZXNwNF9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHhmcm1fZGVjYXBfc3RhdGUgZGVjYXA7Ci0KLQlpZiAoc2l6ZW9mKHN0cnVjdCBlc3BfZGVjYXBfZGF0YSkgID4KLQkgICAgc2l6ZW9mKGRlY2FwLmRlY2FwX2RhdGEpKSB7Ci0JCWV4dGVybiB2b2lkIGRlY2FwX2RhdGFfdG9vX3NtYWxsKHZvaWQpOwotCi0JCWRlY2FwX2RhdGFfdG9vX3NtYWxsKCk7Ci0JfQotCiAJaWYgKHhmcm1fcmVnaXN0ZXJfdHlwZSgmZXNwX3R5cGUsIEFGX0lORVQpIDwgMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJpcCBlc3AgaW5pdDogY2FuJ3QgYWRkIHhmcm0gdHlwZVxuIik7CiAJCXJldHVybiAtRUFHQUlOOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3J1bGVzLmMgYi9uZXQvaXB2NC9maWJfcnVsZXMuYwppbmRleCAwZGQ0ZDA2Li5lYzU2NmYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfcnVsZXMuYworKysgYi9uZXQvaXB2NC9maWJfcnVsZXMuYwpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KQEAgLTUyLDcgKzU0LDcgQEAKIAogc3RydWN0IGZpYl9ydWxlCiB7Ci0Jc3RydWN0IGZpYl9ydWxlICpyX25leHQ7CisJc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7CiAJYXRvbWljX3QJcl9jbG50cmVmOwogCXUzMgkJcl9wcmVmZXJlbmNlOwogCXVuc2lnbmVkIGNoYXIJcl90YWJsZTsKQEAgLTc1LDYgKzc3LDcgQEAKICNlbmRpZgogCWNoYXIJCXJfaWZuYW1lW0lGTkFNU0laXTsKIAlpbnQJCXJfZGVhZDsKKwlzdHJ1Y3QJCXJjdV9oZWFkIHJjdTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZmliX3J1bGUgZGVmYXVsdF9ydWxlID0gewpAQCAtODUsNyArODgsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBmaWJfcnVsZSBtYWluX3J1bGUgPSB7Ci0JLnJfbmV4dCA9CSZkZWZhdWx0X3J1bGUsCiAJLnJfY2xudHJlZiA9CUFUT01JQ19JTklUKDIpLAogCS5yX3ByZWZlcmVuY2UgPQkweDdGRkUsCiAJLnJfdGFibGUgPQlSVF9UQUJMRV9NQUlOLApAQCAtOTMsMjMgKzk1LDI2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGZpYl9ydWxlIGxvY2FsX3J1bGUgPSB7Ci0JLnJfbmV4dCA9CSZtYWluX3J1bGUsCiAJLnJfY2xudHJlZiA9CUFUT01JQ19JTklUKDIpLAogCS5yX3RhYmxlID0JUlRfVEFCTEVfTE9DQUwsCiAJLnJfYWN0aW9uID0JUlROX1VOSUNBU1QsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpYl9ydWxlICpmaWJfcnVsZXMgPSAmbG9jYWxfcnVsZTsKLXN0YXRpYyBERUZJTkVfUldMT0NLKGZpYl9ydWxlc19sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBmaWJfcnVsZXM7CisKKy8qIHdyaXRlciBmdW5jIGNhbGxlZCBmcm9tIG5ldGxpbmsgLS0gcnRubF9zZW0gaG9sZCovCisKK3N0YXRpYyB2b2lkIHJ0bXNnX3J1bGUoaW50LCBzdHJ1Y3QgZmliX3J1bGUgKik7CiAKIGludCBpbmV0X3J0bV9kZWxydWxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHJ0YXR0ciAqKnJ0YSA9IGFyZzsKIAlzdHJ1Y3QgcnRtc2cgKnJ0bSA9IE5MTVNHX0RBVEEobmxoKTsKLQlzdHJ1Y3QgZmliX3J1bGUgKnIsICoqcnA7CisJc3RydWN0IGZpYl9ydWxlICpyOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCWludCBlcnIgPSAtRVNSQ0g7CiAKLQlmb3IgKHJwPSZmaWJfcnVsZXM7IChyPSpycCkgIT0gTlVMTDsgcnA9JnItPnJfbmV4dCkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsIG5vZGUsICZmaWJfcnVsZXMsIGhsaXN0KSB7CiAJCWlmICgoIXJ0YVtSVEFfU1JDLTFdIHx8IG1lbWNtcChSVEFfREFUQShydGFbUlRBX1NSQy0xXSksICZyLT5yX3NyYywgNCkgPT0gMCkgJiYKIAkJICAgIHJ0bS0+cnRtX3NyY19sZW4gPT0gci0+cl9zcmNfbGVuICYmCiAJCSAgICBydG0tPnJ0bV9kc3RfbGVuID09IHItPnJfZHN0X2xlbiAmJgpAQCAtMTI2LDEwICsxMzEsOSBAQAogCQkJaWYgKHIgPT0gJmxvY2FsX3J1bGUpCiAJCQkJYnJlYWs7CiAKLQkJCXdyaXRlX2xvY2tfYmgoJmZpYl9ydWxlc19sb2NrKTsKLQkJCSpycCA9IHItPnJfbmV4dDsKKwkJCWhsaXN0X2RlbF9yY3UoJnItPmhsaXN0KTsKIAkJCXItPnJfZGVhZCA9IDE7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJmZpYl9ydWxlc19sb2NrKTsKKwkJCXJ0bXNnX3J1bGUoUlRNX0RFTFJVTEUsIHIpOwogCQkJZmliX3J1bGVfcHV0KHIpOwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwpAQCAtMTUwLDIxICsxNTQsMzAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGZpYl9ydWxlX3B1dF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBmaWJfcnVsZSAqciA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZmliX3J1bGUsIHJjdSk7CisJa2ZyZWUocik7Cit9CisKIHZvaWQgZmliX3J1bGVfcHV0KHN0cnVjdCBmaWJfcnVsZSAqcikKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmci0+cl9jbG50cmVmKSkgewogCQlpZiAoci0+cl9kZWFkKQotCQkJa2ZyZWUocik7CisJCQljYWxsX3JjdSgmci0+cmN1LCBmaWJfcnVsZV9wdXRfcmN1KTsKIAkJZWxzZQogCQkJcHJpbnRrKCJGcmVlaW5nIGFsaXZlIHJ1bGUgJXBcbiIsIHIpOwogCX0KIH0KIAorLyogd3JpdGVyIGZ1bmMgY2FsbGVkIGZyb20gbmV0bGluayAtLSBydG5sX3NlbSBob2xkKi8KKwogaW50IGluZXRfcnRtX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyKiBubGgsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcnRhdHRyICoqcnRhID0gYXJnOwogCXN0cnVjdCBydG1zZyAqcnRtID0gTkxNU0dfREFUQShubGgpOwotCXN0cnVjdCBmaWJfcnVsZSAqciwgKm5ld19yLCAqKnJwOworCXN0cnVjdCBmaWJfcnVsZSAqciwgKm5ld19yLCAqbGFzdCA9IE5VTEw7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgdGFibGVfaWQ7CiAKIAlpZiAocnRtLT5ydG1fc3JjX2xlbiA+IDMyIHx8IHJ0bS0+cnRtX2RzdF9sZW4gPiAzMiB8fApAQCAtMTg4LDYgKzIwMSw3IEBACiAJaWYgKCFuZXdfcikKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtc2V0KG5ld19yLCAwLCBzaXplb2YoKm5ld19yKSk7CisKIAlpZiAocnRhW1JUQV9TUkMtMV0pCiAJCW1lbWNweSgmbmV3X3ItPnJfc3JjLCBSVEFfREFUQShydGFbUlRBX1NSQy0xXSksIDQpOwogCWlmIChydGFbUlRBX0RTVC0xXSkKQEAgLTIyMCwyOCArMjM0LDI5IEBACiAJaWYgKHJ0YVtSVEFfRkxPVy0xXSkKIAkJbWVtY3B5KCZuZXdfci0+cl90Y2xhc3NpZCwgUlRBX0RBVEEocnRhW1JUQV9GTE9XLTFdKSwgNCk7CiAjZW5kaWYKKwlyID0gY29udGFpbmVyX29mKGZpYl9ydWxlcy5maXJzdCwgc3RydWN0IGZpYl9ydWxlLCBobGlzdCk7CiAKLQlycCA9ICZmaWJfcnVsZXM7CiAJaWYgKCFuZXdfci0+cl9wcmVmZXJlbmNlKSB7Ci0JCXIgPSBmaWJfcnVsZXM7Ci0JCWlmIChyICYmIChyID0gci0+cl9uZXh0KSAhPSBOVUxMKSB7Ci0JCQlycCA9ICZmaWJfcnVsZXMtPnJfbmV4dDsKKwkJaWYgKHIgJiYgci0+aGxpc3QubmV4dCAhPSBOVUxMKSB7CisJCQlyID0gY29udGFpbmVyX29mKHItPmhsaXN0Lm5leHQsIHN0cnVjdCBmaWJfcnVsZSwgaGxpc3QpOwogCQkJaWYgKHItPnJfcHJlZmVyZW5jZSkKIAkJCQluZXdfci0+cl9wcmVmZXJlbmNlID0gci0+cl9wcmVmZXJlbmNlIC0gMTsKIAkJfQogCX0KIAotCXdoaWxlICggKHIgPSAqcnApICE9IE5VTEwgKSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkociwgbm9kZSwgJmZpYl9ydWxlcywgaGxpc3QpIHsKIAkJaWYgKHItPnJfcHJlZmVyZW5jZSA+IG5ld19yLT5yX3ByZWZlcmVuY2UpCiAJCQlicmVhazsKLQkJcnAgPSAmci0+cl9uZXh0OworCQlsYXN0ID0gcjsKIAl9Ci0KLQluZXdfci0+cl9uZXh0ID0gcjsKIAlhdG9taWNfaW5jKCZuZXdfci0+cl9jbG50cmVmKTsKLQl3cml0ZV9sb2NrX2JoKCZmaWJfcnVsZXNfbG9jayk7Ci0JKnJwID0gbmV3X3I7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZmaWJfcnVsZXNfbG9jayk7CisKKwlpZiAobGFzdCkKKwkJaGxpc3RfYWRkX2FmdGVyX3JjdSgmbGFzdC0+aGxpc3QsICZuZXdfci0+aGxpc3QpOworCWVsc2UKKwkJaGxpc3RfYWRkX2JlZm9yZV9yY3UoJm5ld19yLT5obGlzdCwgJnItPmhsaXN0KTsKKworCXJ0bXNnX3J1bGUoUlRNX05FV1JVTEUsIG5ld19yKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU0LDMwICsyNjksMzAgQEAKIH0KICNlbmRpZgogCisvKiBjYWxsZXJzIHNob3VsZCBob2xkIHJ0bmwgc2VtYXBob3JlICovCiAKIHN0YXRpYyB2b2lkIGZpYl9ydWxlc19kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZmliX3J1bGUgKnI7CiAKLQlmb3IgKHI9ZmliX3J1bGVzOyByOyByPXItPnJfbmV4dCkgewotCQlpZiAoci0+cl9pZmluZGV4ID09IGRldi0+aWZpbmRleCkgewotCQkJd3JpdGVfbG9ja19iaCgmZmliX3J1bGVzX2xvY2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsIG5vZGUsICZmaWJfcnVsZXMsIGhsaXN0KSB7CisJCWlmIChyLT5yX2lmaW5kZXggPT0gZGV2LT5pZmluZGV4KQogCQkJci0+cl9pZmluZGV4ID0gLTE7Ci0JCQl3cml0ZV91bmxvY2tfYmgoJmZpYl9ydWxlc19sb2NrKTsKLQkJfQorCiAJfQogfQogCisvKiBjYWxsZXJzIHNob3VsZCBob2xkIHJ0bmwgc2VtYXBob3JlICovCisKIHN0YXRpYyB2b2lkIGZpYl9ydWxlc19hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZmliX3J1bGUgKnI7CiAKLQlmb3IgKHI9ZmliX3J1bGVzOyByOyByPXItPnJfbmV4dCkgewotCQlpZiAoci0+cl9pZmluZGV4ID09IC0xICYmIHN0cmNtcChkZXYtPm5hbWUsIHItPnJfaWZuYW1lKSA9PSAwKSB7Ci0JCQl3cml0ZV9sb2NrX2JoKCZmaWJfcnVsZXNfbG9jayk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkociwgbm9kZSwgJmZpYl9ydWxlcywgaGxpc3QpIHsKKwkJaWYgKHItPnJfaWZpbmRleCA9PSAtMSAmJiBzdHJjbXAoZGV2LT5uYW1lLCByLT5yX2lmbmFtZSkgPT0gMCkKIAkJCXItPnJfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKLQkJCXdyaXRlX3VubG9ja19iaCgmZmliX3J1bGVzX2xvY2spOwotCQl9CiAJfQogfQogCkBAIC0yODYsMTQgKzMwMSwxNyBAQAogCWludCBlcnI7CiAJc3RydWN0IGZpYl9ydWxlICpyLCAqcG9saWN5OwogCXN0cnVjdCBmaWJfdGFibGUgKnRiOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCiAJdTMyIGRhZGRyID0gZmxwLT5mbDRfZHN0OwogCXUzMiBzYWRkciA9IGZscC0+Zmw0X3NyYzsKIAogRlJwcmludGsoIkxvb2t1cDogJXUuJXUuJXUuJXUgPC0gJXUuJXUuJXUuJXUgIiwKIAlOSVBRVUFEKGZscC0+Zmw0X2RzdCksIE5JUFFVQUQoZmxwLT5mbDRfc3JjKSk7Ci0JcmVhZF9sb2NrKCZmaWJfcnVsZXNfbG9jayk7Ci0JZm9yIChyID0gZmliX3J1bGVzOyByOyByPXItPnJfbmV4dCkgeworCisJcmN1X3JlYWRfbG9jaygpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHIsIG5vZGUsICZmaWJfcnVsZXMsIGhsaXN0KSB7CiAJCWlmICgoKHNhZGRyXnItPnJfc3JjKSAmIHItPnJfc3JjbWFzaykgfHwKIAkJICAgICgoZGFkZHJeci0+cl9kc3QpICYgci0+cl9kc3RtYXNrKSB8fAogCQkgICAgKHItPnJfdG9zICYmIHItPnJfdG9zICE9IGZscC0+Zmw0X3RvcykgfHwKQEAgLTMwOSwxNCArMzI3LDE0IEBACiAJCQlwb2xpY3kgPSByOwogCQkJYnJlYWs7CiAJCWNhc2UgUlROX1VOUkVBQ0hBQkxFOgotCQkJcmVhZF91bmxvY2soJmZpYl9ydWxlc19sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKIAkJZGVmYXVsdDoKIAkJY2FzZSBSVE5fQkxBQ0tIT0xFOgotCQkJcmVhZF91bmxvY2soJmZpYl9ydWxlc19sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWNhc2UgUlROX1BST0hJQklUOgotCQkJcmVhZF91bmxvY2soJmZpYl9ydWxlc19sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KIApAQCAtMzI3LDE2ICszNDUsMTYgQEAKIAkJCXJlcy0+ciA9IHBvbGljeTsKIAkJCWlmIChwb2xpY3kpCiAJCQkJYXRvbWljX2luYygmcG9saWN5LT5yX2NsbnRyZWYpOwotCQkJcmVhZF91bmxvY2soJmZpYl9ydWxlc19sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKGVyciA8IDAgJiYgZXJyICE9IC1FQUdBSU4pIHsKLQkJCXJlYWRfdW5sb2NrKCZmaWJfcnVsZXNfbG9jayk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9CiBGUnByaW50aygiRkFJTFVSRVxuIik7Ci0JcmVhZF91bmxvY2soJmZpYl9ydWxlc19sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gLUVORVRVTlJFQUNIOwogfQogCkBAIC0zNjgsMTQgKzM4NiwxNCBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgaW5ldF9maWxsX3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgIHN0cnVjdCBmaWJfcnVsZSAqciwKLQkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKKwkJCQkgICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgcnRtc2cgKnJ0bTsKIAlzdHJ1Y3Qgbmxtc2doZHIgICpubGg7CiAJdW5zaWduZWQgY2hhcgkgKmIgPSBza2ItPnRhaWw7CiAKLQlubGggPSBOTE1TR19ORVdfQU5TV0VSKHNrYiwgY2IsIFJUTV9ORVdSVUxFLCBzaXplb2YoKnJ0bSksIGZsYWdzKTsKKwlubGggPSBOTE1TR19ORVcoc2tiLCBwaWQsIHNlcSwgZXZlbnQsIHNpemVvZigqcnRtKSwgZmxhZ3MpOwogCXJ0bSA9IE5MTVNHX0RBVEEobmxoKTsKIAlydG0tPnJ0bV9mYW1pbHkgPSBBRl9JTkVUOwogCXJ0bS0+cnRtX2RzdF9sZW4gPSByLT5yX2RzdF9sZW47CkBAIC00MTQsMjAgKzQzMiw0MiBAQAogCXJldHVybiAtMTsKIH0KIAorLyogY2FsbGVycyBzaG91bGQgaG9sZCBydG5sIHNlbWFwaG9yZSAqLworCitzdGF0aWMgdm9pZCBydG1zZ19ydWxlKGludCBldmVudCwgc3RydWN0IGZpYl9ydWxlICpyKQoreworCWludCBzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBydG1zZykgKyAxMjgpOworCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXNrYikKKwkJbmV0bGlua19zZXRfZXJyKHJ0bmwsIDAsIFJUTkxHUlBfSVBWNF9SVUxFLCBFTk9CVUZTKTsKKwllbHNlIGlmIChpbmV0X2ZpbGxfcnVsZShza2IsIHIsIDAsIDAsIGV2ZW50LCAwKSA8IDApIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCW5ldGxpbmtfc2V0X2VycihydG5sLCAwLCBSVE5MR1JQX0lQVjRfUlVMRSwgRUlOVkFMKTsKKwl9IGVsc2UgeworCQluZXRsaW5rX2Jyb2FkY2FzdChydG5sLCBza2IsIDAsIFJUTkxHUlBfSVBWNF9SVUxFLCBHRlBfS0VSTkVMKTsKKwl9Cit9CisKIGludCBpbmV0X2R1bXBfcnVsZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCWludCBpZHg7CisJaW50IGlkeCA9IDA7CiAJaW50IHNfaWR4ID0gY2ItPmFyZ3NbMF07CiAJc3RydWN0IGZpYl9ydWxlICpyOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCi0JcmVhZF9sb2NrKCZmaWJfcnVsZXNfbG9jayk7Ci0JZm9yIChyPWZpYl9ydWxlcywgaWR4PTA7IHI7IHIgPSByLT5yX25leHQsIGlkeCsrKSB7CisJcmN1X3JlYWRfbG9jaygpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsIG5vZGUsICZmaWJfcnVsZXMsIGhsaXN0KSB7CisKIAkJaWYgKGlkeCA8IHNfaWR4KQogCQkJY29udGludWU7Ci0JCWlmIChpbmV0X2ZpbGxfcnVsZShza2IsIHIsIGNiLCBOTE1fRl9NVUxUSSkgPCAwKQorCQlpZiAoaW5ldF9maWxsX3J1bGUoc2tiLCByLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKKwkJCQkgICBjYi0+bmxoLT5ubG1zZ19zZXEsCisJCQkJICAgUlRNX05FV1JVTEUsIE5MTV9GX01VTFRJKSA8IDApCiAJCQlicmVhazsKKwkJaWR4Kys7CiAJfQotCXJlYWRfdW5sb2NrKCZmaWJfcnVsZXNfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJY2ItPmFyZ3NbMF0gPSBpZHg7CiAKIAlyZXR1cm4gc2tiLT5sZW47CkBAIC00MzUsNSArNDc1LDkgQEAKIAogdm9pZCBfX2luaXQgZmliX3J1bGVzX2luaXQodm9pZCkKIHsKKwlJTklUX0hMSVNUX0hFQUQoJmZpYl9ydWxlcyk7CisJaGxpc3RfYWRkX2hlYWQoJmxvY2FsX3J1bGUuaGxpc3QsICZmaWJfcnVsZXMpOworCWhsaXN0X2FkZF9hZnRlcigmbG9jYWxfcnVsZS5obGlzdCwgJm1haW5fcnVsZS5obGlzdCk7CisJaGxpc3RfYWRkX2FmdGVyKCZtYWluX3J1bGUuaGxpc3QsICZkZWZhdWx0X3J1bGUuaGxpc3QpOwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmZmliX3J1bGVzX25vdGlmaWVyKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl90cmllLmMgYi9uZXQvaXB2NC9maWJfdHJpZS5jCmluZGV4IGUzMjBiMzIuLmNjZDNlZmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl90cmllLmMKKysrIGIvbmV0L2lwdjQvZmliX3RyaWUuYwpAQCAtNTAsNyArNTAsNyBAQAogICoJCVBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgogICovCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40MDQiCisjZGVmaW5lIFZFUlNJT04gIjAuNDA2IgogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTg0LDcgKzg0LDcgQEAKICNpbmNsdWRlICJmaWJfbG9va3VwLmgiCiAKICN1bmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKLSNkZWZpbmUgTUFYX0NISUxEUyAxNjM4NAorI2RlZmluZSBNQVhfU1RBVF9ERVBUSCAzMgogCiAjZGVmaW5lIEtFWUxFTkdUSCAoOCpzaXplb2YodF9rZXkpKQogI2RlZmluZSBNQVNLX1BGWChrLCBsKSAoKChsKT09MCk/MDooayA+PiAoS0VZTEVOR1RILWwpKSA8PCAoS0VZTEVOR1RILWwpKQpAQCAtMTU0LDcgKzE1NCw3IEBACiAJdW5zaWduZWQgaW50IHRub2RlczsKIAl1bnNpZ25lZCBpbnQgbGVhdmVzOwogCXVuc2lnbmVkIGludCBudWxscG9pbnRlcnM7Ci0JdW5zaWduZWQgaW50IG5vZGVzaXplc1tNQVhfQ0hJTERTXTsKKwl1bnNpZ25lZCBpbnQgbm9kZXNpemVzW01BWF9TVEFUX0RFUFRIXTsKIH07CiAKIHN0cnVjdCB0cmllIHsKQEAgLTIwNDAsNyArMjA0MCwxNSBAQAogc3RhdGljIHN0cnVjdCBub2RlICpmaWJfdHJpZV9nZXRfZmlyc3Qoc3RydWN0IGZpYl90cmllX2l0ZXIgKml0ZXIsCiAJCQkJICAgICAgIHN0cnVjdCB0cmllICp0KQogewotCXN0cnVjdCBub2RlICpuID0gcmN1X2RlcmVmZXJlbmNlKHQtPnRyaWUpOworCXN0cnVjdCBub2RlICpuIDsKKworCWlmKCF0KQorCQlyZXR1cm4gTlVMTDsKKworCW4gPSByY3VfZGVyZWZlcmVuY2UodC0+dHJpZSk7CisKKwlpZighaXRlcikKKwkJcmV0dXJuIE5VTEw7CiAKIAlpZiAobiAmJiBJU19UTk9ERShuKSkgewogCQlpdGVyLT50bm9kZSA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKQEAgLTIwNzIsNyArMjA4MCw5IEBACiAJCQlpbnQgaTsKIAogCQkJcy0+dG5vZGVzKys7Ci0JCQlzLT5ub2Rlc2l6ZXNbdG4tPmJpdHNdKys7CisJCQlpZih0bi0+Yml0cyA8IE1BWF9TVEFUX0RFUFRIKQorCQkJCXMtPm5vZGVzaXplc1t0bi0+Yml0c10rKzsKKwogCQkJZm9yIChpID0gMDsgaSA8ICgxPDx0bi0+Yml0cyk7IGkrKykKIAkJCQlpZiAoIXRuLT5jaGlsZFtpXSkKIAkJCQkJcy0+bnVsbHBvaW50ZXJzKys7CkBAIC0yMTAyLDggKzIxMTIsOCBAQAogCXNlcV9wcmludGYoc2VxLCAiXHRJbnRlcm5hbCBub2RlczogJWRcblx0Iiwgc3RhdC0+dG5vZGVzKTsKIAlieXRlcyArPSBzaXplb2Yoc3RydWN0IHRub2RlKSAqIHN0YXQtPnRub2RlczsKIAotCW1heCA9IE1BWF9DSElMRFMtMTsKLQl3aGlsZSAobWF4ID49IDAgJiYgc3RhdC0+bm9kZXNpemVzW21heF0gPT0gMCkKKwltYXggPSBNQVhfU1RBVF9ERVBUSDsKKwl3aGlsZSAobWF4ID4gMCAmJiBzdGF0LT5ub2Rlc2l6ZXNbbWF4LTFdID09IDApCiAJCW1heC0tOwogCiAJcG9pbnRlcnMgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IGU3YmJmZjQzLi45ODMxZmQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC03NTMsNyArNzUzLDcgQEAKIAljYXNlIElDTVBfUkVESVJfSE9TVDoKIAljYXNlIElDTVBfUkVESVJfSE9TVFRPUzoKIAkJaXBfcnRfcmVkaXJlY3Qoc2tiLT5uaC5pcGgtPnNhZGRyLCBpcCwgc2tiLT5oLmljbXBoLT51bi5nYXRld2F5LAotCQkJICAgICAgIGlwaC0+c2FkZHIsIGlwaC0+dG9zLCBza2ItPmRldik7CisJCQkgICAgICAgaXBoLT5zYWRkciwgc2tiLT5kZXYpOwogCQlicmVhazsKICAgCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCA2NGNlNTJiLi5kNTEyMjM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0xMzgyLDcgKzEzODIsNyBAQAogCQlkZXYgPSBpcF9kZXZfZmluZChpbXItPmltcl9hZGRyZXNzLnNfYWRkcik7CiAJCWlmICghZGV2KQogCQkJcmV0dXJuIE5VTEw7Ci0JCV9fZGV2X3B1dChkZXYpOworCQlkZXZfcHV0KGRldik7CiAJfQogCiAJaWYgKCFkZXYgJiYgIWlwX3JvdXRlX291dHB1dF9rZXkoJnJ0LCAmZmwpKSB7CkBAIC0xNzMwLDcgKzE3MzAsNyBAQAogCWlmICghTVVMVElDQVNUKGFkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJ0bmxfc2hsb2NrKCk7CisJcnRubF9sb2NrKCk7CiAKIAlpbl9kZXYgPSBpcF9tY19maW5kX2RldihpbXIpOwogCkBAIC0xNzYzLDcgKzE3NjMsNyBAQAogCWlwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIpOwogCWVyciA9IDA7CiBkb25lOgotCXJ0bmxfc2h1bmxvY2soKTsKKwlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE4MzcsNyArMTgzNyw3IEBACiAJaWYgKCFNVUxUSUNBU1QoYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcnRubF9zaGxvY2soKTsKKwlydG5sX2xvY2soKTsKIAogCWltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IG1yZXFzLT5pbXJfbXVsdGlhZGRyOwogCWltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtcmVxcy0+aW1yX2ludGVyZmFjZTsKQEAgLTE5NDcsNyArMTk0Nyw3IEBACiAJaXBfbWNfYWRkX3NyYyhpbl9kZXYsICZtcmVxcy0+aW1yX211bHRpYWRkciwgb21vZGUsIDEsIAogCQkmbXJlcXMtPmltcl9zb3VyY2VhZGRyLCAxKTsKIGRvbmU6Ci0JcnRubF9zaHVubG9jaygpOworCXJ0bmxfdW5sb2NrKCk7CiAJaWYgKGxlYXZlZ3JvdXApCiAJCXJldHVybiBpcF9tY19sZWF2ZV9ncm91cChzaywgJmltcik7CiAJcmV0dXJuIGVycjsKQEAgLTE5NzAsNyArMTk3MCw3IEBACiAJICAgIG1zZi0+aW1zZl9mbW9kZSAhPSBNQ0FTVF9FWENMVURFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJ0bmxfc2hsb2NrKCk7CisJcnRubF9sb2NrKCk7CiAKIAlpbXIuaW1yX211bHRpYWRkci5zX2FkZHIgPSBtc2YtPmltc2ZfbXVsdGlhZGRyOwogCWltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtPmltc2ZfaW50ZXJmYWNlOwpAQCAtMjAzMCw3ICsyMDMwLDcgQEAKIAlwbWMtPnNmbW9kZSA9IG1zZi0+aW1zZl9mbW9kZTsKIAllcnIgPSAwOwogZG9uZToKLQlydG5sX3NodW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIAlpZiAobGVhdmVncm91cCkKIAkJZXJyID0gaXBfbWNfbGVhdmVfZ3JvdXAoc2ssICZpbXIpOwogCXJldHVybiBlcnI7CkBAIC0yMDUwLDcgKzIwNTAsNyBAQAogCWlmICghTVVMVElDQVNUKGFkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJ0bmxfc2hsb2NrKCk7CisJcnRubF9sb2NrKCk7CiAKIAlpbXIuaW1yX211bHRpYWRkci5zX2FkZHIgPSBtc2YtPmltc2ZfbXVsdGlhZGRyOwogCWltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtPmltc2ZfaW50ZXJmYWNlOwpAQCAtMjA3Miw3ICsyMDcyLDcgQEAKIAkJZ290byBkb25lOwogCW1zZi0+aW1zZl9mbW9kZSA9IHBtYy0+c2Ztb2RlOwogCXBzbCA9IHBtYy0+c2ZsaXN0OwotCXJ0bmxfc2h1bmxvY2soKTsKKwlydG5sX3VubG9jaygpOwogCWlmICghcHNsKSB7CiAJCWxlbiA9IDA7CiAJCWNvdW50ID0gMDsKQEAgLTIwOTEsNyArMjA5MSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogZG9uZToKLQlydG5sX3NodW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMTEyLDcgKzIxMTIsNyBAQAogCWlmICghTVVMVElDQVNUKGFkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJ0bmxfc2hsb2NrKCk7CisJcnRubF9sb2NrKCk7CiAKIAllcnIgPSAtRUFERFJOT1RBVkFJTDsKIApAQCAtMjEyNSw3ICsyMTI1LDcgQEAKIAkJZ290byBkb25lOwogCWdzZi0+Z2ZfZm1vZGUgPSBwbWMtPnNmbW9kZTsKIAlwc2wgPSBwbWMtPnNmbGlzdDsKLQlydG5sX3NodW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIAljb3VudCA9IHBzbCA/IHBzbC0+c2xfY291bnQgOiAwOwogCWNvcHljb3VudCA9IGNvdW50IDwgZ3NmLT5nZl9udW1zcmMgPyBjb3VudCA6IGdzZi0+Z2ZfbnVtc3JjOwogCWdzZi0+Z2ZfbnVtc3JjID0gY291bnQ7CkBAIC0yMTQ2LDcgKzIxNDYsNyBAQAogCX0KIAlyZXR1cm4gMDsKIGRvbmU6Ci0JcnRubF9zaHVubG9jaygpOworCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggYWUyMDI4MS4uOWEwMWJiOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC02NDgsMyArNjQ4LDUyIEBACiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX2FkZHIyc29ja2FkZHIpOworCitpbnQgaW5ldF9jc2tfY3RsX3NvY2tfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKipzb2NrLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCisJCQkgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsIHVuc2lnbmVkIGNoYXIgcHJvdG9jb2wpCit7CisJaW50IHJjID0gc29ja19jcmVhdGVfa2VybihmYW1pbHksIHR5cGUsIHByb3RvY29sLCBzb2NrKTsKKworCWlmIChyYyA9PSAwKSB7CisJCSgqc29jayktPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKKwkJaW5ldF9zaygoKnNvY2spLT5zayktPnVjX3R0bCA9IC0xOworCQkvKgorCQkgKiBVbmhhc2ggaXQgc28gdGhhdCBJUCBpbnB1dCBwcm9jZXNzaW5nIGRvZXMgbm90IGV2ZW4gc2VlIGl0LAorCQkgKiB3ZSBkbyBub3Qgd2lzaCB0aGlzIHNvY2tldCB0byBzZWUgaW5jb21pbmcgcGFja2V0cy4KKwkJICovCisJCSgqc29jayktPnNrLT5za19wcm90LT51bmhhc2goKCpzb2NrKS0+c2spOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX2N0bF9zb2NrX2NyZWF0ZSk7CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitpbnQgaW5ldF9jc2tfY29tcGF0X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisKKwlpZiAoaWNzay0+aWNza19hZl9vcHMtPmNvbXBhdF9nZXRzb2Nrb3B0ICE9IE5VTEwpCisJCXJldHVybiBpY3NrLT5pY3NrX2FmX29wcy0+Y29tcGF0X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkJCSAgICBvcHR2YWwsIG9wdGxlbik7CisJcmV0dXJuIGljc2stPmljc2tfYWZfb3BzLT5nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwKKwkJCQkJICAgICBvcHR2YWwsIG9wdGxlbik7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX2NvbXBhdF9nZXRzb2Nrb3B0KTsKKworaW50IGluZXRfY3NrX2NvbXBhdF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKworCWlmIChpY3NrLT5pY3NrX2FmX29wcy0+Y29tcGF0X3NldHNvY2tvcHQgIT0gTlVMTCkKKwkJcmV0dXJuIGljc2stPmljc2tfYWZfb3BzLT5jb21wYXRfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsCisJCQkJCQkJICAgIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gaWNzay0+aWNza19hZl9vcHMtPnNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkgICAgIG9wdHZhbCwgb3B0bGVuKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jc2tfY29tcGF0X3NldHNvY2tvcHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCmluZGV4IDMzMjI4MTEuLmVmNzM2NmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCkBAIC0zMTUsNyArMzE1LDcgQEAKICAJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKIAogIAkJaWYgKHR3KSB7Ci0gCQkJaW5ldF90d3NrX2Rlc2NoZWR1bGUodHcsIGRlYXRoX3Jvdyk7OworIAkJCWluZXRfdHdza19kZXNjaGVkdWxlKHR3LCBkZWF0aF9yb3cpOwogIAkJCWluZXRfdHdza19wdXQodHcpOwogIAkJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDU3ZDI5MGQuLmY3NWZmMWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC04NDcsMTAgKzg0NywxMSBAQAogCWlmICgoKGxlbmd0aCA+IG10dSkgJiYgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkpICYmCiAJCQkocnQtPnUuZHN0LmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1VGTykpIHsKIAotCQlpZihpcF91Zm9fYXBwZW5kX2RhdGEoc2ssIGdldGZyYWcsIGZyb20sIGxlbmd0aCwgaGhfbGVuLAotCQkJICAgICAgIGZyYWdoZWFkZXJsZW4sIHRyYW5zaGRybGVuLCBtdHUsIGZsYWdzKSkKKwkJZXJyID0gaXBfdWZvX2FwcGVuZF9kYXRhKHNrLCBnZXRmcmFnLCBmcm9tLCBsZW5ndGgsIGhoX2xlbiwKKwkJCQkJIGZyYWdoZWFkZXJsZW4sIHRyYW5zaGRybGVuLCBtdHUsCisJCQkJCSBmbGFncyk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwotCiAJCXJldHVybiAwOwogCX0KIApAQCAtMTI0OCwxMSArMTI0OSw3IEBACiAJaXBoLT50b3MgPSBpbmV0LT50b3M7CiAJaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4pOwogCWlwaC0+ZnJhZ19vZmYgPSBkZjsKLQlpZiAoIWRmKSB7Ci0JCV9faXBfc2VsZWN0X2lkZW50KGlwaCwgJnJ0LT51LmRzdCwgMCk7Ci0JfSBlbHNlIHsKLQkJaXBoLT5pZCA9IGh0b25zKGluZXQtPmlkKyspOwotCX0KKwlpcF9zZWxlY3RfaWRlbnQoaXBoLCAmcnQtPnUuZHN0LCBzayk7CiAJaXBoLT50dGwgPSB0dGw7CiAJaXBoLT5wcm90b2NvbCA9IHNrLT5za19wcm90b2NvbDsKIAlpcGgtPnNhZGRyID0gcnQtPnJ0X3NyYzsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IDJiZjhkNzguLjEyZTBiZjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtNTAsNiArNTAsNyBAQAogI2RlZmluZSBJUF9DTVNHX1RPUwkJNAogI2RlZmluZSBJUF9DTVNHX1JFQ1ZPUFRTCTgKICNkZWZpbmUgSVBfQ01TR19SRVRPUFRTCQkxNgorI2RlZmluZSBJUF9DTVNHX1BBU1NTRUMJCTMyCiAKIC8qCiAgKglTT0xfSVAgY29udHJvbCBtZXNzYWdlcy4KQEAgLTEwOSw2ICsxMTAsMTkgQEAKIAlwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfUkVUT1BUUywgb3B0LT5vcHRsZW4sIG9wdC0+X19kYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgaXBfY21zZ19yZWN2X3NlY3VyaXR5KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljaGFyICpzZWNkYXRhOworCXUzMiBzZWNsZW47CisJaW50IGVycjsKKworCWVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKHNrYiwgJnNlY2RhdGEsICZzZWNsZW4pOworCWlmIChlcnIpCisJCXJldHVybjsKKworCXB1dF9jbXNnKG1zZywgU09MX0lQLCBTQ01fU0VDVVJJVFksIHNlY2xlbiwgc2VjZGF0YSk7Cit9CisKIAogdm9pZCBpcF9jbXNnX3JlY3Yoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTM4LDYgKzE1MiwxMSBAQAogCiAJaWYgKGZsYWdzICYgMSkKIAkJaXBfY21zZ19yZWN2X3JldG9wdHMobXNnLCBza2IpOworCWlmICgoZmxhZ3M+Pj0xKSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoZmxhZ3MgJiAxKQorCQlpcF9jbXNnX3JlY3Zfc2VjdXJpdHkobXNnLCBza2IpOwogfQogCiBpbnQgaXBfY21zZ19zZW5kKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IGlwY21fY29va2llICppcGMpCkBAIC0zODAsMjAgKzM5OSwxOSBAQAogICoJYW4gSVAgc29ja2V0LgogICovCiAKLWludCBpcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3N0YXRpYyBpbnQgZG9faXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKKwkJaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCWludCB2YWw9MCxlcnI7CiAKLQlpZiAobGV2ZWwgIT0gU09MX0lQKQotCQlyZXR1cm4gLUVOT1BST1RPT1BUOwotCiAJaWYgKCgoMTw8b3B0bmFtZSkgJiAoKDE8PElQX1BLVElORk8pIHwgKDE8PElQX1JFQ1ZUVEwpIHwgCiAJCQkgICAgKDE8PElQX1JFQ1ZPUFRTKSB8ICgxPDxJUF9SRUNWVE9TKSB8IAogCQkJICAgICgxPDxJUF9SRVRPUFRTKSB8ICgxPDxJUF9UT1MpIHwgCiAJCQkgICAgKDE8PElQX1RUTCkgfCAoMTw8SVBfSERSSU5DTCkgfCAKIAkJCSAgICAoMTw8SVBfTVRVX0RJU0NPVkVSKSB8ICgxPDxJUF9SRUNWRVJSKSB8IAotCQkJICAgICgxPDxJUF9ST1VURVJfQUxFUlQpIHwgKDE8PElQX0ZSRUVCSU5EKSkpIHx8IAorCQkJICAgICgxPDxJUF9ST1VURVJfQUxFUlQpIHwgKDE8PElQX0ZSRUVCSU5EKSB8CisJCQkgICAgKDE8PElQX1BBU1NTRUMpKSkgfHwKIAkJCQlvcHRuYW1lID09IElQX01VTFRJQ0FTVF9UVEwgfHwgCiAJCQkJb3B0bmFtZSA9PSBJUF9NVUxUSUNBU1RfTE9PUCkgeyAKIAkJaWYgKG9wdGxlbiA+PSBzaXplb2YoaW50KSkgewpAQCAtNDc4LDYgKzQ5NiwxMiBAQAogCQkJZWxzZQogCQkJCWluZXQtPmNtc2dfZmxhZ3MgJj0gfklQX0NNU0dfUkVUT1BUUzsKIAkJCWJyZWFrOworCQljYXNlIElQX1BBU1NTRUM6CisJCQlpZiAodmFsKQorCQkJCWluZXQtPmNtc2dfZmxhZ3MgfD0gSVBfQ01TR19QQVNTU0VDOworCQkJZWxzZQorCQkJCWluZXQtPmNtc2dfZmxhZ3MgJj0gfklQX0NNU0dfUEFTU1NFQzsKKwkJCWJyZWFrOwogCQljYXNlIElQX1RPUzoJLyogVGhpcyBzZXRzIGJvdGggVE9TIGFuZCBQcmVjZWRlbmNlICovCiAJCQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0pIHsKIAkJCQl2YWwgJj0gfjM7CkBAIC04NDksMTIgKzg3Myw3IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotI2lmZGVmIENPTkZJR19ORVRGSUxURVIKLQkJCWVyciA9IG5mX3NldHNvY2tvcHQoc2ssIFBGX0lORVQsIG9wdG5hbWUsIG9wdHZhbCwgCi0JCQkJCSAgICBvcHRsZW4pOwotI2Vsc2UKIAkJCWVyciA9IC1FTk9QUk9UT09QVDsKLSNlbmRpZgogCQkJYnJlYWs7CiAJfQogCXJlbGVhc2Vfc29jayhzayk7CkBAIC04NjUsMTIgKzg4NCw2OCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitpbnQgaXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKKwkJaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJaW50IGVycjsKKworCWlmIChsZXZlbCAhPSBTT0xfSVApCisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisKKwllcnIgPSBkb19pcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworI2lmZGVmIENPTkZJR19ORVRGSUxURVIKKwkvKiB3ZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHBvc3NpYmxlIEVOT1BST1RPT1BUcyBleGNlcHQgZGVmYXVsdCBjYXNlICovCisJaWYgKGVyciA9PSAtRU5PUFJPVE9PUFQgJiYgb3B0bmFtZSAhPSBJUF9IRFJJTkNMICYmCisJCW9wdG5hbWUgIT0gSVBfSVBTRUNfUE9MSUNZICYmIG9wdG5hbWUgIT0gSVBfWEZSTV9QT0xJQ1kKKyNpZmRlZiBDT05GSUdfSVBfTVJPVVRFCisJCSYmIChvcHRuYW1lIDwgTVJUX0JBU0UgfHwgb3B0bmFtZSA+IChNUlRfQkFTRSArIDEwKSkKKyNlbmRpZgorCSAgICkgeworCQlsb2NrX3NvY2soc2spOworCQllcnIgPSBuZl9zZXRzb2Nrb3B0KHNrLCBQRl9JTkVULCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJCXJlbGVhc2Vfc29jayhzayk7CisJfQorI2VuZGlmCisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK2ludCBjb21wYXRfaXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlpbnQgZXJyOworCisJaWYgKGxldmVsICE9IFNPTF9JUCkKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCWVyciA9IGRvX2lwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisjaWZkZWYgQ09ORklHX05FVEZJTFRFUgorCS8qIHdlIG5lZWQgdG8gZXhjbHVkZSBhbGwgcG9zc2libGUgRU5PUFJPVE9PUFRzIGV4Y2VwdCBkZWZhdWx0IGNhc2UgKi8KKwlpZiAoZXJyID09IC1FTk9QUk9UT09QVCAmJiBvcHRuYW1lICE9IElQX0hEUklOQ0wgJiYKKwkgICAgb3B0bmFtZSAhPSBJUF9JUFNFQ19QT0xJQ1kgJiYgb3B0bmFtZSAhPSBJUF9YRlJNX1BPTElDWQorI2lmZGVmIENPTkZJR19JUF9NUk9VVEUKKwkgICAgJiYgKG9wdG5hbWUgPCBNUlRfQkFTRSB8fCBvcHRuYW1lID4gKE1SVF9CQVNFICsgMTApKQorI2VuZGlmCisJICAgKSB7CisJCWxvY2tfc29jayhzayk7CisJCWVyciA9IGNvbXBhdF9uZl9zZXRzb2Nrb3B0KHNrLCBQRl9JTkVULCBvcHRuYW1lLAorCQkJCQkgICBvcHR2YWwsIG9wdGxlbik7CisJCXJlbGVhc2Vfc29jayhzayk7CisJfQorI2VuZGlmCisJcmV0dXJuIGVycjsKK30KKworRVhQT1JUX1NZTUJPTChjb21wYXRfaXBfc2V0c29ja29wdCk7CisjZW5kaWYKKwogLyoKICAqCUdldCB0aGUgb3B0aW9ucy4gTm90ZSBmb3IgZnV0dXJlIHJlZmVyZW5jZS4gVGhlIEdFVCBvZiBJUCBvcHRpb25zIGdldHMgdGhlCiAgKglfcmVjZWl2ZWRfIG9uZXMuIFRoZSBzZXQgc2V0cyB0aGUgX3NlbnRfIG9uZXMuCiAgKi8KIAotaW50IGlwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCitzdGF0aWMgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCWludCB2YWw7CkBAIC05MzIsNiArMTAwNyw5IEBACiAJCWNhc2UgSVBfUkVUT1BUUzoKIAkJCXZhbCA9IChpbmV0LT5jbXNnX2ZsYWdzICYgSVBfQ01TR19SRVRPUFRTKSAhPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgSVBfUEFTU1NFQzoKKwkJCXZhbCA9IChpbmV0LT5jbXNnX2ZsYWdzICYgSVBfQ01TR19QQVNTU0VDKSAhPSAwOworCQkJYnJlYWs7CiAJCWNhc2UgSVBfVE9TOgogCQkJdmFsID0gaW5ldC0+dG9zOwogCQkJYnJlYWs7CkBAIC0xMDUxLDE3ICsxMTI5LDggQEAKIAkJCXZhbCA9IGluZXQtPmZyZWViaW5kOyAKIAkJCWJyZWFrOyAKIAkJZGVmYXVsdDoKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSCi0JCQl2YWwgPSBuZl9nZXRzb2Nrb3B0KHNrLCBQRl9JTkVULCBvcHRuYW1lLCBvcHR2YWwsIAotCQkJCQkgICAgJmxlbik7Ci0JCQlyZWxlYXNlX3NvY2soc2spOwotCQkJaWYgKHZhbCA+PSAwKQotCQkJCXZhbCA9IHB1dF91c2VyKGxlbiwgb3B0bGVuKTsKLQkJCXJldHVybiB2YWw7Ci0jZWxzZQogCQkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJCXJldHVybiAtRU5PUFJPVE9PUFQ7Ci0jZW5kaWYKIAl9CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAkKQEAgLTEwODIsNiArMTE1MSw2NyBAQAogCXJldHVybiAwOwogfQogCitpbnQgaXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKKwkJaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZG9faXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSCisJLyogd2UgbmVlZCB0byBleGNsdWRlIGFsbCBwb3NzaWJsZSBFTk9QUk9UT09QVHMgZXhjZXB0IGRlZmF1bHQgY2FzZSAqLworCWlmIChlcnIgPT0gLUVOT1BST1RPT1BUICYmIG9wdG5hbWUgIT0gSVBfUEtUT1BUSU9OUworI2lmZGVmIENPTkZJR19JUF9NUk9VVEUKKwkJJiYgKG9wdG5hbWUgPCBNUlRfQkFTRSB8fCBvcHRuYW1lID4gTVJUX0JBU0UrMTApCisjZW5kaWYKKwkgICApIHsKKwkgICAJaW50IGxlbjsKKworCQlpZihnZXRfdXNlcihsZW4sb3B0bGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWxvY2tfc29jayhzayk7CisJCWVyciA9IG5mX2dldHNvY2tvcHQoc2ssIFBGX0lORVQsIG9wdG5hbWUsIG9wdHZhbCwKKwkJCQkmbGVuKTsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwkJaWYgKGVyciA+PSAwKQorCQkJZXJyID0gcHV0X3VzZXIobGVuLCBvcHRsZW4pOworCQlyZXR1cm4gZXJyOworCX0KKyNlbmRpZgorCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitpbnQgY29tcGF0X2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpbnQgZXJyID0gZG9faXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSCisJLyogd2UgbmVlZCB0byBleGNsdWRlIGFsbCBwb3NzaWJsZSBFTk9QUk9UT09QVHMgZXhjZXB0IGRlZmF1bHQgY2FzZSAqLworCWlmIChlcnIgPT0gLUVOT1BST1RPT1BUICYmIG9wdG5hbWUgIT0gSVBfUEtUT1BUSU9OUworI2lmZGVmIENPTkZJR19JUF9NUk9VVEUKKwkgICAgJiYgKG9wdG5hbWUgPCBNUlRfQkFTRSB8fCBvcHRuYW1lID4gTVJUX0JBU0UrMTApCisjZW5kaWYKKwkgICApIHsKKwkgICAJaW50IGxlbjsKKworCQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJbG9ja19zb2NrKHNrKTsKKwkJZXJyID0gY29tcGF0X25mX2dldHNvY2tvcHQoc2ssIFBGX0lORVQsIG9wdG5hbWUsIG9wdHZhbCwgJmxlbik7CisJCXJlbGVhc2Vfc29jayhzayk7CisJCWlmIChlcnIgPj0gMCkKKwkJCWVyciA9IHB1dF91c2VyKGxlbiwgb3B0bGVuKTsKKwkJcmV0dXJuIGVycjsKKwl9CisjZW5kaWYKKwlyZXR1cm4gZXJyOworfQorCitFWFBPUlRfU1lNQk9MKGNvbXBhdF9pcF9nZXRzb2Nrb3B0KTsKKyNlbmRpZgorCiBFWFBPUlRfU1lNQk9MKGlwX2Ntc2dfcmVjdik7CiAKIEVYUE9SVF9TWU1CT0woaXBfZ2V0c29ja29wdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IGQ2NGUyZWMuLmM5NTAyMGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KQEAgLTM2LDcgKzM3LDcgQEAKIAlpbnQgdXNlcnM7CiB9OwogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChpcGNvbXBfcmVzb3VyY2Vfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaXBjb21wX3Jlc291cmNlX211dGV4KTsKIHN0YXRpYyB2b2lkICoqaXBjb21wX3NjcmF0Y2hlczsKIHN0YXRpYyBpbnQgaXBjb21wX3NjcmF0Y2hfdXNlcnM7CiBzdGF0aWMgTElTVF9IRUFEKGlwY29tcF90Zm1zX2xpc3QpOwpAQCAtMjUzLDcgKzI1NCw3IEBACiB9CiAKIC8qCi0gKiBNdXN0IGJlIHByb3RlY3RlZCBieSB4ZnJtX2NmZ19zZW0uICBTdGF0ZSBhbmQgdHVubmVsIHVzZXIgcmVmZXJlbmNlcyBhcmUKKyAqIE11c3QgYmUgcHJvdGVjdGVkIGJ5IHhmcm1fY2ZnX211dGV4LiAgU3RhdGUgYW5kIHR1bm5lbCB1c2VyIHJlZmVyZW5jZXMgYXJlCiAgKiBhbHdheXMgaW5jcmVtZW50ZWQgb24gc3VjY2Vzcy4KICAqLwogc3RhdGljIGludCBpcGNvbXBfdHVubmVsX2F0dGFjaChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKQEAgLTQxMSw5ICs0MTIsOSBAQAogCWlmICghaXBjZCkKIAkJcmV0dXJuOwogCXhmcm1fc3RhdGVfZGVsZXRlX3R1bm5lbCh4KTsKLQlkb3duKCZpcGNvbXBfcmVzb3VyY2Vfc2VtKTsKKwltdXRleF9sb2NrKCZpcGNvbXBfcmVzb3VyY2VfbXV0ZXgpOwogCWlwY29tcF9mcmVlX2RhdGEoaXBjZCk7Ci0JdXAoJmlwY29tcF9yZXNvdXJjZV9zZW0pOworCW11dGV4X3VubG9jaygmaXBjb21wX3Jlc291cmNlX211dGV4KTsKIAlrZnJlZShpcGNkKTsKIH0KIApAQCAtNDQwLDE0ICs0NDEsMTQgQEAKIAlpZiAoeC0+cHJvcHMubW9kZSkKIAkJeC0+cHJvcHMuaGVhZGVyX2xlbiArPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAotCWRvd24oJmlwY29tcF9yZXNvdXJjZV9zZW0pOworCW11dGV4X2xvY2soJmlwY29tcF9yZXNvdXJjZV9tdXRleCk7CiAJaWYgKCFpcGNvbXBfYWxsb2Nfc2NyYXRjaGVzKCkpCiAJCWdvdG8gZXJyb3I7CiAKIAlpcGNkLT50Zm1zID0gaXBjb21wX2FsbG9jX3RmbXMoeC0+Y2FsZy0+YWxnX25hbWUpOwogCWlmICghaXBjZC0+dGZtcykKIAkJZ290byBlcnJvcjsKLQl1cCgmaXBjb21wX3Jlc291cmNlX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpcGNvbXBfcmVzb3VyY2VfbXV0ZXgpOwogCiAJaWYgKHgtPnByb3BzLm1vZGUpIHsKIAkJZXJyID0gaXBjb21wX3R1bm5lbF9hdHRhY2goeCk7CkBAIC00NjQsMTAgKzQ2NSwxMCBAQAogCXJldHVybiBlcnI7CiAKIGVycm9yX3R1bm5lbDoKLQlkb3duKCZpcGNvbXBfcmVzb3VyY2Vfc2VtKTsKKwltdXRleF9sb2NrKCZpcGNvbXBfcmVzb3VyY2VfbXV0ZXgpOwogZXJyb3I6CiAJaXBjb21wX2ZyZWVfZGF0YShpcGNkKTsKLQl1cCgmaXBjb21wX3Jlc291cmNlX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZpcGNvbXBfcmVzb3VyY2VfbXV0ZXgpOwogCWtmcmVlKGlwY2QpOwogCWdvdG8gb3V0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb25maWcuYyBiL25ldC9pcHY0L2lwY29uZmlnLmMKaW5kZXggYmIzNjEzZS4uY2I4YTkyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb25maWcuYworKysgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBvZmxhZ3M7CiAKIAlsYXN0ID0gJmljX2ZpcnN0X2RldjsKLQlydG5sX3NobG9jaygpOworCXJ0bmxfbG9jaygpOwogCiAJLyogYnJpbmcgbG9vcGJhY2sgZGV2aWNlIHVwIGZpcnN0ICovCiAJaWYgKGRldl9jaGFuZ2VfZmxhZ3MoJmxvb3BiYWNrX2RldiwgbG9vcGJhY2tfZGV2LmZsYWdzIHwgSUZGX1VQKSA8IDApCkBAIC0yMTUsNyArMjE1LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghKGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWNfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCQkJcnRubF9zaHVubG9jaygpOworCQkJCXJ0bmxfdW5sb2NrKCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQkJZC0+ZGV2ID0gZGV2OwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJCQkJZGV2LT5uYW1lLCBhYmxlLCBkLT54aWQpKTsKIAkJfQogCX0KLQlydG5sX3NodW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIAogCSpsYXN0ID0gTlVMTDsKIApAQCAtMjUxLDcgKzI1MSw3IEBACiAJc3RydWN0IGljX2RldmljZSAqZCwgKm5leHQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCXJ0bmxfc2hsb2NrKCk7CisJcnRubF9sb2NrKCk7CiAJbmV4dCA9IGljX2ZpcnN0X2RldjsKIAl3aGlsZSAoKGQgPSBuZXh0KSkgewogCQluZXh0ID0gZC0+bmV4dDsKQEAgLTI2Miw3ICsyNjIsNyBAQAogCQl9CiAJCWtmcmVlKGQpOwogCX0KLQlydG5sX3NodW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCA1Yzk0YzIyLi43MTdhYjdkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC00MTUsMTAgKzQxNSwxMCBAQAogCQkJcmV0dXJuIC1FTk9CVUZTOwogCQlicmVhazsKIAljYXNlIDA6Ci0JCWRldj1pcF9kZXZfZmluZCh2aWZjLT52aWZjX2xjbF9hZGRyLnNfYWRkcik7CisJCWRldiA9IGlwX2Rldl9maW5kKHZpZmMtPnZpZmNfbGNsX2FkZHIuc19hZGRyKTsKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Ci0JCV9fZGV2X3B1dChkZXYpOworCQlkZXZfcHV0KGRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggOWIxNzZhOS4uZTc3NTIzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2FwcC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxuZXQvaXBfdnMuaD4KIApAQCAtNDAsNyArNDEsNyBAQAogCiAvKiBpcHZzIGFwcGxpY2F0aW9uIGxpc3QgaGVhZCAqLwogc3RhdGljIExJU1RfSEVBRChpcF92c19hcHBfbGlzdCk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChfX2lwX3ZzX2FwcF9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKF9faXBfdnNfYXBwX211dGV4KTsKIAogCiAvKgpAQCAtMTczLDExICsxNzQsMTEgQEAKIHsKIAlpbnQgcmVzdWx0OwogCi0JZG93bigmX19pcF92c19hcHBfbXV0ZXgpOworCW11dGV4X2xvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIAogCXJlc3VsdCA9IGlwX3ZzX2FwcF9pbmNfbmV3KGFwcCwgcHJvdG8sIHBvcnQpOwogCi0JdXAoJl9faXBfdnNfYXBwX211dGV4KTsKKwltdXRleF91bmxvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xOTEsMTEgKzE5MiwxMSBAQAogCS8qIGluY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCiAJaXBfdnNfdXNlX2NvdW50X2luYygpOwogCi0JZG93bigmX19pcF92c19hcHBfbXV0ZXgpOworCW11dGV4X2xvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIAogCWxpc3RfYWRkKCZhcHAtPmFfbGlzdCwgJmlwX3ZzX2FwcF9saXN0KTsKIAotCXVwKCZfX2lwX3ZzX2FwcF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZfX2lwX3ZzX2FwcF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwOSw3ICsyMTAsNyBAQAogewogCXN0cnVjdCBpcF92c19hcHAgKmluYywgKm54dDsKIAotCWRvd24oJl9faXBfdnNfYXBwX211dGV4KTsKKwltdXRleF9sb2NrKCZfX2lwX3ZzX2FwcF9tdXRleCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5jLCBueHQsICZhcHAtPmluY3NfbGlzdCwgYV9saXN0KSB7CiAJCWlwX3ZzX2FwcF9pbmNfcmVsZWFzZShpbmMpOwpAQCAtMjE3LDcgKzIxOCw3IEBACiAKIAlsaXN0X2RlbCgmYXBwLT5hX2xpc3QpOwogCi0JdXAoJl9faXBfdnNfYXBwX211dGV4KTsKKwltdXRleF91bmxvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIAogCS8qIGRlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCiAJaXBfdnNfdXNlX2NvdW50X2RlYygpOwpAQCAtNDk4LDcgKzQ5OSw3IEBACiAKIHN0YXRpYyB2b2lkICppcF92c19hcHBfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlkb3duKCZfX2lwX3ZzX2FwcF9tdXRleCk7CisJbXV0ZXhfbG9jaygmX19pcF92c19hcHBfbXV0ZXgpOwogCiAJcmV0dXJuICpwb3MgPyBpcF92c19hcHBfaWR4KCpwb3MgLSAxKSA6IFNFUV9TVEFSVF9UT0tFTjsKIH0KQEAgLTUzMCw3ICs1MzEsNyBAQAogCiBzdGF0aWMgdm9pZCBpcF92c19hcHBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0JdXAoJl9faXBfdnNfYXBwX211dGV4KTsKKwltdXRleF91bmxvY2soJl9faXBfdnNfYXBwX211dGV4KTsKIH0KIAogc3RhdGljIGludCBpcF92c19hcHBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGRiNzgzMDMuLjg4MmI4NDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCkBAIC0xNjgsNiArMTY4LDI2IEBACiAJICBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkCiAJICBEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0LiAgSWYgdW5zdXJlLCBzYXkgYE4nLgogCitjb25maWcgSVBfTkZfSDMyMworCXRyaXN0YXRlICAnSC4zMjMgcHJvdG9jb2wgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSworCWhlbHAKKwkgIEguMzIzIGlzIGEgVm9JUCBzaWduYWxsaW5nIHByb3RvY29sIGZyb20gSVRVLVQuIEFzIG9uZSBvZiB0aGUgbW9zdAorCSAgaW1wb3J0YW50IFZvSVAgcHJvdG9jb2xzLCBpdCBpcyB3aWRlbHkgdXNlZCBieSB2b2ljZSBoYXJkd2FyZSBhbmQKKwkgIHNvZnR3YXJlIGluY2x1ZGluZyB2b2ljZSBnYXRld2F5cywgSVAgcGhvbmVzLCBOZXRtZWV0aW5nLCBPcGVuUGhvbmUsCisJICBHbm9tZW1lZXRpbmcsIGV0Yy4KKworCSAgV2l0aCB0aGlzIG1vZHVsZSB5b3UgY2FuIHN1cHBvcnQgSC4zMjMgb24gYSBjb25uZWN0aW9uIHRyYWNraW5nL05BVAorCSAgZmlyZXdhbGwuCisKKwkgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIFJBUywgRmFzdC1zdGFydCwgSC4yNDUgdHVubmVsbGluZywgUlRQL1JUQ1AKKwkgIGFuZCBULjEyMCBiYXNlZCBkYXRhIGFuZCBhcHBsaWNhdGlvbnMgaW5jbHVkaW5nIGF1ZGlvLCB2aWRlbywgRkFYLAorCSAgY2hhdCwgd2hpdGVib2FyZCwgZmlsZSB0cmFuc2ZlciwgZXRjLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlCisJICBzZWUgaHR0cDovL25hdGgzMjMuc291cmNlZm9yZ2UubmV0Ly4KKworCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5ICdNJyBoZXJlIGFuZCByZWFkCisJICBEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0LiAgSWYgdW5zdXJlLCBzYXkgJ04nLgorCiBjb25maWcgSVBfTkZfUVVFVUUKIAl0cmlzdGF0ZSAiSVAgVXNlcnNwYWNlIHF1ZXVlaW5nIHZpYSBORVRMSU5LIChPQlNPTEVURSkiCiAJaGVscApAQCAtMzAzLDE2ICszMjMsNiBAQAogCSAgZGVzdGluYXRpb24gSVAnIG9yIGA1MDBwcHMgZnJvbSBhbnkgZ2l2ZW4gc291cmNlIElQJyAgd2l0aCBhIHNpbmdsZQogCSAgSVB0YWJsZXMgcnVsZS4KIAotY29uZmlnIElQX05GX01BVENIX1BPTElDWQotICAgICAgIHRyaXN0YXRlICJJUHNlYyBwb2xpY3kgbWF0Y2ggc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTICYmIFhGUk0KLSAgICAgICBoZWxwCi0gICAgICAgICBQb2xpY3kgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZQotICAgICAgICAgSVBzZWMgcG9saWN5IHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRlY2Fwc3VsYXRpb24vd2lsbAotICAgICAgICAgYmUgdXNlZCBkdXJpbmcgZW5jYXBzdWxhdGlvbi4KLQotICAgICAgICAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCi0KICMgYGZpbHRlcicsIGdlbmVyaWMgYW5kIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9GSUxURVIKIAl0cmlzdGF0ZSAiUGFja2V0IGZpbHRlcmluZyIKQEAgLTQ5NCw2ICs1MDQsMTIgQEAKIAlkZWZhdWx0IElQX05GX05BVCBpZiBJUF9ORl9QUFRQPXkKIAlkZWZhdWx0IG0gaWYgSVBfTkZfUFBUUD1tCiAKK2NvbmZpZyBJUF9ORl9OQVRfSDMyMworCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUyE9biAmJiBJUF9ORl9DT05OVFJBQ0shPW4gJiYgSVBfTkZfTkFUIT1uCisJZGVmYXVsdCBJUF9ORl9OQVQgaWYgSVBfTkZfSDMyMz15CisJZGVmYXVsdCBtIGlmIElQX05GX0gzMjM9bQorCiAjIG1hbmdsZSArIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9NQU5HTEUKIAl0cmlzdGF0ZSAiUGFja2V0IG1hbmdsaW5nIgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IGU1YzViMzIuLmYyY2Q5YTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTEwLDYgKzEwLDkgQEAKIGlwX2Nvbm50cmFja19wcHRwLW9ianMJOj0gaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLm8gaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5vCiBpcF9uYXRfcHB0cC1vYmpzCTo9IGlwX25hdF9oZWxwZXJfcHB0cC5vIGlwX25hdF9wcm90b19ncmUubwogCitpcF9jb25udHJhY2tfaDMyMy1vYmpzIDo9IGlwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5vIGlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLm8KK2lwX25hdF9oMzIzLW9ianMgOj0gaXBfbmF0X2hlbHBlcl9oMzIzLm8KKwogIyBjb25uZWN0aW9uIHRyYWNraW5nCiBvYmotJChDT05GSUdfSVBfTkZfQ09OTlRSQUNLKSArPSBpcF9jb25udHJhY2subwogb2JqLSQoQ09ORklHX0lQX05GX05BVCkgKz0gaXBfbmF0Lm8KQEAgLTIyLDYgKzI1LDcgQEAKIG9iai0kKENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQKSArPSBpcF9jb25udHJhY2tfcHJvdG9fc2N0cC5vCiAKICMgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzCitvYmotJChDT05GSUdfSVBfTkZfSDMyMykgKz0gaXBfY29ubnRyYWNrX2gzMjMubwogb2JqLSQoQ09ORklHX0lQX05GX1BQVFApICs9IGlwX2Nvbm50cmFja19wcHRwLm8KIG9iai0kKENPTkZJR19JUF9ORl9BTUFOREEpICs9IGlwX2Nvbm50cmFja19hbWFuZGEubwogb2JqLSQoQ09ORklHX0lQX05GX1RGVFApICs9IGlwX2Nvbm50cmFja190ZnRwLm8KQEAgLTMwLDYgKzM0LDcgQEAKIG9iai0kKENPTkZJR19JUF9ORl9ORVRCSU9TX05TKSArPSBpcF9jb25udHJhY2tfbmV0Ymlvc19ucy5vCiAKICMgTkFUIGhlbHBlcnMgCitvYmotJChDT05GSUdfSVBfTkZfTkFUX0gzMjMpICs9IGlwX25hdF9oMzIzLm8KIG9iai0kKENPTkZJR19JUF9ORl9OQVRfUFBUUCkgKz0gaXBfbmF0X3BwdHAubwogb2JqLSQoQ09ORklHX0lQX05GX05BVF9BTUFOREEpICs9IGlwX25hdF9hbWFuZGEubwogb2JqLSQoQ09ORklHX0lQX05GX05BVF9URlRQKSArPSBpcF9uYXRfdGZ0cC5vCkBAIC01Nyw3ICs2Miw2IEBACiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQKSArPSBpcHRfYWgubyBpcHRfZXNwLm8KIG9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9UVEwpICs9IGlwdF90dGwubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFKSArPSBpcHRfYWRkcnR5cGUubwotb2JqLSQoQ09ORklHX0lQX05GX01BVENIX1BPTElDWSkgKz0gaXB0X3BvbGljeS5vCiAKICMgdGFyZ2V0cwogb2JqLSQoQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwdF9SRUpFQ1QubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggZGQxMDQ4Yi4uZmYwYzU5NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oPgpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkJICAgICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAogCQkJICAgICAgIHZvaWQgKnVzZXJpbmZvKQogewpAQCAtMzAwLDYgKzMwMSw3IEBACiAJCQkJdmVyZGljdCA9IHQtPnUua2VybmVsLnRhcmdldC0+dGFyZ2V0KHBza2IsCiAJCQkJCQkJCSAgICAgaW4sIG91dCwKIAkJCQkJCQkJICAgICBob29rLAorCQkJCQkJCQkgICAgIHQtPnUua2VybmVsLnRhcmdldCwKIAkJCQkJCQkJICAgICB0LT5kYXRhLAogCQkJCQkJCQkgICAgIHVzZXJkYXRhKTsKIApAQCAtNDgwLDI2ICs0ODIsMzEgQEAKIAl9CiAJdC0+dS5rZXJuZWwudGFyZ2V0ID0gdGFyZ2V0OwogCisJcmV0ID0geHRfY2hlY2tfdGFyZ2V0KHRhcmdldCwgTkZfQVJQLCB0LT51LnRhcmdldF9zaXplIC0gc2l6ZW9mKCp0KSwKKwkJCSAgICAgIG5hbWUsIGUtPmNvbWVmcm9tLCAwLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwogCWlmICh0LT51Lmtlcm5lbC50YXJnZXQgPT0gJmFycHRfc3RhbmRhcmRfdGFyZ2V0KSB7CiAJCWlmICghc3RhbmRhcmRfY2hlY2sodCwgc2l6ZSkpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0gZWxzZSBpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5Ci0JCSAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkobmFtZSwgZSwgdC0+ZGF0YSwKKwkJICAgJiYgIXQtPnUua2VybmVsLnRhcmdldC0+Y2hlY2tlbnRyeShuYW1lLCBlLCB0YXJnZXQsIHQtPmRhdGEsCiAJCQkJCQkgICAgICB0LT51LnRhcmdldF9zaXplCiAJCQkJCQkgICAgICAtIHNpemVvZigqdCksCiAJCQkJCQkgICAgICBlLT5jb21lZnJvbSkpIHsKLQkJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKIAkJZHVwcmludGYoImFycF90YWJsZXM6IGNoZWNrIGZhaWxlZCBmb3IgYCVzJy5cbiIsCiAJCQkgdC0+dS5rZXJuZWwudGFyZ2V0LT5uYW1lKTsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyOwogCX0KIAogCSgqaSkrKzsKIAlyZXR1cm4gMDsKLQorZXJyOgorCW1vZHVsZV9wdXQodC0+dS5rZXJuZWwudGFyZ2V0LT5tZSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTU1NSw3ICs1NjIsNyBAQAogCiAJdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKIAlpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5kZXN0cm95KQotCQl0LT51Lmtlcm5lbC50YXJnZXQtPmRlc3Ryb3kodC0+ZGF0YSwKKwkJdC0+dS5rZXJuZWwudGFyZ2V0LT5kZXN0cm95KHQtPnUua2VybmVsLnRhcmdldCwgdC0+ZGF0YSwKIAkJCQkJICAgIHQtPnUudGFyZ2V0X3NpemUgLSBzaXplb2YoKnQpKTsKIAltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwogCXJldHVybiAwOwpAQCAtNzcxLDcgKzc3OCw3IEBACiAJc3RydWN0IGFycHRfdGFibGUgKnQ7CiAKIAl0ID0geHRfZmluZF90YWJsZV9sb2NrKE5GX0FSUCwgZW50cmllcy0+bmFtZSk7Ci0JaWYgKHQgfHwgIUlTX0VSUih0KSkgeworCWlmICh0ICYmICFJU19FUlIodCkpIHsKIAkJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0LT5wcml2YXRlOwogCQlkdXByaW50ZigidC0+cHJpdmF0ZS0+bnVtYmVyID0gJXVcbiIsCiAJCQkgcHJpdmF0ZS0+bnVtYmVyKTsKQEAgLTExMzgsMTEgKzExNDUsMTUgQEAKIC8qIFRoZSBidWlsdC1pbiB0YXJnZXRzOiBzdGFuZGFyZCAoTlVMTCkgYW5kIGVycm9yLiAqLwogc3RhdGljIHN0cnVjdCBhcnB0X3RhcmdldCBhcnB0X3N0YW5kYXJkX3RhcmdldCA9IHsKIAkubmFtZQkJPSBBUlBUX1NUQU5EQVJEX1RBUkdFVCwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihpbnQpLAorCS5mYW1pbHkJCT0gTkZfQVJQLAogfTsKIAogc3RhdGljIHN0cnVjdCBhcnB0X3RhcmdldCBhcnB0X2Vycm9yX3RhcmdldCA9IHsKIAkubmFtZQkJPSBBUlBUX0VSUk9SX1RBUkdFVCwKIAkudGFyZ2V0CQk9IGFycHRfZXJyb3IsCisJLnRhcmdldHNpemUJPSBBUlBUX0ZVTkNUSU9OX01BWE5BTUVMRU4sCisJLmZhbWlseQkJPSBORl9BUlAsCiB9OwogCiBzdGF0aWMgc3RydWN0IG5mX3NvY2tvcHRfb3BzIGFycHRfc29ja29wdHMgPSB7CkBAIC0xMTYyLDggKzExNzMsOCBAQAogCXh0X3Byb3RvX2luaXQoTkZfQVJQKTsKIAogCS8qIE5vb25lIGVsc2Ugd2lsbCBiZSBkb3duaW5nIHNlbSBub3csIHNvIHdlIHdvbid0IHNsZWVwICovCi0JeHRfcmVnaXN0ZXJfdGFyZ2V0KE5GX0FSUCwgJmFycHRfc3RhbmRhcmRfdGFyZ2V0KTsKLQl4dF9yZWdpc3Rlcl90YXJnZXQoTkZfQVJQLCAmYXJwdF9lcnJvcl90YXJnZXQpOworCXh0X3JlZ2lzdGVyX3RhcmdldCgmYXJwdF9zdGFuZGFyZF90YXJnZXQpOworCXh0X3JlZ2lzdGVyX3RhcmdldCgmYXJwdF9lcnJvcl90YXJnZXQpOwogCiAJLyogUmVnaXN0ZXIgc2V0c29ja29wdCAqLwogCXJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoJmFycHRfc29ja29wdHMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYwppbmRleCBjOTc2NTBhLi4wZjJhOTUzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYwpAQCAtOCw5ICs4LDEwIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oImFycHRhYmxlcyBhcnAgcGF5bG9hZCBtYW5nbGUgdGFyZ2V0Iik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLXRhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsIHVuc2lnbmVkIGludCBob29rbnVtLCBjb25zdCB2b2lkICp0YXJnaW5mbywKLSAgIHZvaWQgKnVzZXJpbmZvKQordGFyZ2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKyAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKKyAgICAgICBjb25zdCB2b2lkICp0YXJnaW5mbywgdm9pZCAqdXNlcmluZm8pCiB7CiAJY29uc3Qgc3RydWN0IGFycHRfbWFuZ2xlICptYW5nbGUgPSB0YXJnaW5mbzsKIAlzdHJ1Y3QgYXJwaGRyICphcnA7CkBAIC02NSw4ICs2Niw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLCBjb25zdCB2b2lkICplLCB2b2lkICp0YXJnaW5mbywKLSAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsIHVuc2lnbmVkIGludCBob29rX21hc2spCitjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgY29uc3Qgdm9pZCAqZSwgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAorICAgICAgICAgICB2b2lkICp0YXJnaW5mbywgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgYXJwdF9tYW5nbGUgKm1hbmdsZSA9IHRhcmdpbmZvOwogCkBAIC04MCwxMiArODEsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBhcnB0X3RhcmdldCBhcnB0X21hbmdsZV9yZWcKLT0gewotICAgICAgICAubmFtZQkJPSAibWFuZ2xlIiwKLSAgICAgICAgLnRhcmdldAkJPSB0YXJnZXQsCi0gICAgICAgIC5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKLSAgICAgICAgLm1lCQk9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBhcnB0X3RhcmdldCBhcnB0X21hbmdsZV9yZWcgPSB7CisJLm5hbWUJCT0gIm1hbmdsZSIsCisJLnRhcmdldAkJPSB0YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGFycHRfbWFuZ2xlKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwppbmRleCA4NGM2NmRiLi45ZTM0MDM0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwpAQCAtNzcsOCArNzcsOCBAQAogc3RhdGljIExJU1RfSEVBRCh1bmNvbmZpcm1lZCk7CiBzdGF0aWMgaW50IGlwX2Nvbm50cmFja192bWFsbG9jOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwX2Nvbm50cmFja19uZXh0X2lkID0gMTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfY29ubnRyYWNrX2V4cGVjdF9uZXh0X2lkID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfY29ubnRyYWNrX25leHRfaWQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGlwX2Nvbm50cmFja19leHBlY3RfbmV4dF9pZDsKICNpZmRlZiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUwogc3RydWN0IG5vdGlmaWVyX2Jsb2NrICppcF9jb25udHJhY2tfY2hhaW47CiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmlwX2Nvbm50cmFja19leHBlY3RfY2hhaW47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlYjEzOQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYwpAQCAtMCwwICsxLDE3MzEgQEAKKy8qCisgKiBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBCYXNlZCBvbiB0aGUgJ2JydXRlIGZvcmNlJyBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSBieQorICogSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8KKyAqCisgKiBDaGFuZ2VzOgorICogCTIwMDYtMDItMDEgLSBpbml0aWFsIHZlcnNpb24gMC4xCisgKgorICoJMjAwNi0wMi0yMCAtIHZlcnNpb24gMC4yCisgKgkgIDEuIENoYW5nZWQgc291cmNlIGZvcm1hdCB0byBmb2xsb3cga2VybmVsIGNvbnZlbnRpb25zCisgKgkgIDIuIERlbGV0ZWQgc29tZSB1bm5lY2Vzc2FyeSBzdHJ1Y3R1cmVzCisgKgkgIDMuIE1pbm9yIGZpeGVzCisgKgorICogCTIwMDYtMDMtMTAgLSB2ZXJzaW9uIDAuMworICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgVFBLVHMgaW4gb25lIHBhY2tldCAoc3VnZ2VzdGVkIGJ5CisgKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCisgKiAJICAyLiBBdm9pZCBleGNlc3NpdmUgc3RhY2sgdXNhZ2UgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQorICogCSAgMy4gQWRkZWQgc3VwcG9ydCBmb3Igbm9uLWxpbmVhciBza2IgKGJhc2VkIG9uIFBhdHJpY2sgTWNIYXJkeSdzIHBhdGNoKQorICogCSAgNC4gRml4ZWQgbWlzc2luZyBILjI0NSBtb2R1bGUgb3duZXIgKFBhdHJpY2sgTWNIYXJkeSkKKyAqIAkgIDUuIEF2b2lkIGxvbmcgUkFTIGV4cGVjdGF0aW9uIGNoYWlucyAoUGF0cmljayBNY0hhcmR5KQorICogCSAgNi4gRml4ZWQgaW5jb3JyZWN0IF9fZXhpdCBhdHRyaWJ1dGUgKFBhdHJpY2sgTWNIYXJkeSkKKyAqIAkgIDcuIEVsaW1pbmF0ZWQgdW5uZWNlc3NhcnkgcmV0dXJuIGNvZGUKKyAqIAkgIDguIEZpeGVkIGluY29ycmVjdCB1c2Ugb2YgTkFUIGRhdGEgZnJvbSBjb25udHJhY2sgY29kZSAoc3VnZ2VzdGVkIGJ5CisgKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCisgKiAJICA5LiBGaXhlZCBUVEwgY2FsY3VsYXRpb24gZXJyb3IgaW4gUkNGCisgKiAJICAxMC4gQWRkZWQgVFRMIHN1cHBvcnQgaW4gUlJRCisgKiAJICAxMS4gQmV0dGVyIHN1cHBvcnQgZm9yIHNlcGFyYXRlIFRQS1QgaGVhZGVyIGFuZCBkYXRhCisgKgorICogCTIwMDYtMDMtMTUgLSB2ZXJzaW9uIDAuNAorICogCSAgMS4gQWRkZWQgc3VwcG9ydCBmb3IgVC4xMjAgY2hhbm5lbHMKKyAqIAkgIDIuIEFkZGVkIHBhcmFtZXRlciBna3JvdXRlZF9vbmx5IChzdWdnZXN0ZWQgYnkgUGF0cmljayBNY0hhcmR5KQorICogCSAgMy4gU3BsaXR0ZWQgQVNOLjEgY29kZSBhbmQgZGF0YSAoc3VnZ2VzdGVkIGJ5IFBhdHJpY2sgTWNIYXJkeSkKKyAqIAkgIDQuIFNvcnQgQVNOLjEgZGF0YSB0byBhdm9pZCBmb3J3YXJkaW5nIGRlY2xhcmF0aW9ucyAoc3VnZ2VzdGVkIGJ5CisgKiAJICAgICBQYXRyaWNrIE1jSGFyZHkpCisgKiAJICA1LiBSZXNldCBuZXh0IFRQS1QgZGF0YSBsZW5ndGggaW4gZ2V0X3Rwa3RfZGF0YSgpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgiCisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworLyogUGFyYW1ldGVycyAqLworc3RhdGljIGludCBna3JvdXRlZF9vbmx5ID0gMTsKK21vZHVsZV9wYXJhbShna3JvdXRlZF9vbmx5LCBpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhna3JvdXRlZF9vbmx5LCAib25seSBhY2NlcHQgY2FsbHMgZnJvbSBnYXRla2VlcGVyIik7CisKKy8qIEhvb2tzIGZvciBOQVQgKi8KK2ludCAoKnNldF9oMjQ1X2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJICAgdV9pbnQzMl90IGlwLCB1X2ludDE2X3QgcG9ydCk7CitpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkgICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKK2ludCAoKnNldF9zaWdfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCSAgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQkgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCBpbnQgY291bnQpOworaW50ICgqc2V0X3Jhc19hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJICBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICB1bnNpZ25lZCBjaGFyICoqZGF0YSwKKwkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIGludCBjb3VudCk7CitpbnQgKCpuYXRfcnRwX3J0Y3BfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSAgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCSAgdV9pbnQxNl90IHBvcnQsIHVfaW50MTZfdCBydHBfcG9ydCwKKwkJCSAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBydHBfZXhwLAorCQkJICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIHJ0Y3BfZXhwKTsKK2ludCAoKm5hdF90MTIwX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCSAgICAgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIHVfaW50MTZfdCBwb3J0LAorCQkgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CitpbnQgKCpuYXRfaDI0NV9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkgICAgICBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgdV9pbnQxNl90IHBvcnQsCisJCSAgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogZXhwKTsKK2ludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIGludCBpZHgsCisJCSAgICAgIHVfaW50MTZfdCBwb3J0LCBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqIGV4cCk7CisKKworc3RhdGljIERFRklORV9TUElOTE9DSyhpcF9oMzIzX2xvY2spOworc3RhdGljIGNoYXIgKmgzMjNfYnVmZmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZ2V0X3Rwa3RfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgKmRhdGFsZW4sIGludCAqZGF0YW9mZikKK3sKKwlzdHJ1Y3QgaXBfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfaDMyM19pbmZvOworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJc3RydWN0IHRjcGhkciBfdGNwaCwgKnRoOworCWludCB0Y3BkYXRhbGVuOworCWludCB0Y3BkYXRhb2ZmOworCXVuc2lnbmVkIGNoYXIgKnRwa3Q7CisJaW50IHRwa3RsZW47CisJaW50IHRwa3RvZmY7CisKKwkvKiBHZXQgVENQIGhlYWRlciAqLworCXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCAoKnBza2IpLT5uaC5pcGgtPmlobCAqIDQsCisJCQkJc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKKwlpZiAodGggPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHZXQgVENQIGRhdGEgb2Zmc2V0ICovCisJdGNwZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsICogNCArIHRoLT5kb2ZmICogNDsKKworCS8qIEdldCBUQ1AgZGF0YSBsZW5ndGggKi8KKwl0Y3BkYXRhbGVuID0gKCpwc2tiKS0+bGVuIC0gdGNwZGF0YW9mZjsKKwlpZiAodGNwZGF0YWxlbiA8PSAwKQkvKiBObyBUQ1AgZGF0YSAqLworCQlnb3RvIGNsZWFyX291dDsKKworCWlmICgqZGF0YSA9PSBOVUxMKSB7CS8qIGZpcnN0IFRQS1QgKi8KKwkJLyogR2V0IGZpcnN0IFRQS1QgcG9pbnRlciAqLworCQl0cGt0ID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCB0Y3BkYXRhb2ZmLCB0Y3BkYXRhbGVuLAorCQkJCQkgIGgzMjNfYnVmZmVyKTsKKwkJQlVHX09OKHRwa3QgPT0gTlVMTCk7CisKKwkJLyogVmFsaWRhdGUgVFBLVCBpZGVudGlmaWVyICovCisJCWlmICh0Y3BkYXRhbGVuIDwgNCB8fCB0cGt0WzBdICE9IDB4MDMgfHwgdHBrdFsxXSAhPSAwKSB7CisJCQkvKiBOZXRtZWV0aW5nIHNlbmRzIFRQS1QgaGVhZGVyIGFuZCBkYXRhIHNlcGFyYXRlbHkgKi8KKwkJCWlmIChpbmZvLT50cGt0X2xlbltkaXJdID4gMCkgeworCQkJCURFQlVHUCgiaXBfY3RfaDMyMzogcHJldmlvdXMgcGFja2V0ICIKKwkJCQkgICAgICAgImluZGljYXRlZCBzZXBhcmF0ZSBUUEtUIGRhdGEgb2YgJWh1ICIKKwkJCQkgICAgICAgImJ5dGVzXG4iLCBpbmZvLT50cGt0X2xlbltkaXJdKTsKKwkJCQlpZiAoaW5mby0+dHBrdF9sZW5bZGlyXSA8PSB0Y3BkYXRhbGVuKSB7CisJCQkJCS8qIFllcywgdGhlcmUgd2FzIGEgVFBLVCBoZWFkZXIKKwkJCQkJICogcmVjZWl2ZWQgKi8KKwkJCQkJKmRhdGEgPSB0cGt0OworCQkJCQkqZGF0YWxlbiA9IGluZm8tPnRwa3RfbGVuW2Rpcl07CisJCQkJCSpkYXRhb2ZmID0gMDsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCisJCQkJLyogRnJhZ21lbnRlZCBUUEtUICovCisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKCJpcF9jdF9oMzIzOiAiCisJCQkJCSAgICAgICAiZnJhZ21lbnRlZCBUUEtUXG4iKTsKKwkJCQlnb3RvIGNsZWFyX291dDsKKwkJCX0KKworCQkJLyogSXQgaXMgbm90IGV2ZW4gYSBUUEtUICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQl0cGt0b2ZmID0gMDsKKwl9IGVsc2UgewkJLyogTmV4dCBUUEtUICovCisJCXRwa3RvZmYgPSAqZGF0YW9mZiArICpkYXRhbGVuOworCQl0Y3BkYXRhbGVuIC09IHRwa3RvZmY7CisJCWlmICh0Y3BkYXRhbGVuIDw9IDQpCS8qIE5vIG1vcmUgVFBLVCAqLworCQkJZ290byBjbGVhcl9vdXQ7CisJCXRwa3QgPSAqZGF0YSArICpkYXRhbGVuOworCisJCS8qIFZhbGlkYXRlIFRQS1QgaWRlbnRpZmllciAqLworCQlpZiAodHBrdFswXSAhPSAweDAzIHx8IHRwa3RbMV0gIT0gMCkKKwkJCWdvdG8gY2xlYXJfb3V0OworCX0KKworCS8qIFZhbGlkYXRlIFRQS1QgbGVuZ3RoICovCisJdHBrdGxlbiA9IHRwa3RbMl0gKiAyNTYgKyB0cGt0WzNdOworCWlmICh0cGt0bGVuID4gdGNwZGF0YWxlbikgeworCQlpZiAodGNwZGF0YWxlbiA9PSA0KSB7CS8qIFNlcGFyYXRlIFRQS1QgaGVhZGVyICovCisJCQkvKiBOZXRtZWV0aW5nIHNlbmRzIFRQS1QgaGVhZGVyIGFuZCBkYXRhIHNlcGFyYXRlbHkgKi8KKwkJCURFQlVHUCgiaXBfY3RfaDMyMzogc2VwYXJhdGUgVFBLVCBoZWFkZXIgaW5kaWNhdGVzICIKKwkJCSAgICAgICAidGhlcmUgd2lsbCBiZSBUUEtUIGRhdGEgb2YgJWh1IGJ5dGVzXG4iLAorCQkJICAgICAgIHRwa3RsZW4gLSA0KTsKKwkJCWluZm8tPnRwa3RfbGVuW2Rpcl0gPSB0cGt0bGVuIC0gNDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50aygiaXBfY3RfaDMyMzogaW5jb21wbGV0ZSBUUEtUIChmcmFnbWVudGVkPylcbiIpOworCQlnb3RvIGNsZWFyX291dDsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSBlbmNhcHN1bGF0ZWQgZGF0YSAqLworCSpkYXRhID0gdHBrdCArIDQ7CisJKmRhdGFsZW4gPSB0cGt0bGVuIC0gNDsKKwkqZGF0YW9mZiA9IHRwa3RvZmYgKyA0OworCisgICAgICBvdXQ6CisJLyogQ2xlYXIgVFBLVCBsZW5ndGggKi8KKwlpbmZvLT50cGt0X2xlbltkaXJdID0gMDsKKwlyZXR1cm4gMTsKKworICAgICAgY2xlYXJfb3V0OgorCWluZm8tPnRwa3RfbGVuW2Rpcl0gPSAwOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBnZXRfaDI0NV9hZGRyKHVuc2lnbmVkIGNoYXIgKmRhdGEsIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCSAgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpCit7CisJdW5zaWduZWQgY2hhciAqcDsKKworCWlmIChhZGRyLT5jaG9pY2UgIT0gZUgyNDVfVHJhbnNwb3J0QWRkcmVzc191bmljYXN0QWRkcmVzcyB8fAorCSAgICBhZGRyLT51bmljYXN0QWRkcmVzcy5jaG9pY2UgIT0gZVVuaWNhc3RBZGRyZXNzX2lQQWRkcmVzcykKKwkJcmV0dXJuIDA7CisKKwlwID0gZGF0YSArIGFkZHItPnVuaWNhc3RBZGRyZXNzLmlQQWRkcmVzcy5uZXR3b3JrOworCSppcCA9IGh0b25sKChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgKHBbM10pKTsKKwkqcG9ydCA9IChwWzRdIDw8IDgpIHwgKHBbNV0pOworCisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBleHBlY3RfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkcikKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCByZXQgPSAwOworCXVfaW50MzJfdCBpcDsKKwl1X2ludDE2X3QgcG9ydDsKKwl1X2ludDE2X3QgcnRwX3BvcnQ7CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnJ0cF9leHA7CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnJ0Y3BfZXhwOworCisJLyogUmVhZCBSVFAgb3IgUlRDUCBhZGRyZXNzICovCisJaWYgKCFnZXRfaDI0NV9hZGRyKCpkYXRhLCBhZGRyLCAmaXAsICZwb3J0KSB8fAorCSAgICBpcCAhPSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwIHx8IHBvcnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBSVFAgcG9ydCBpcyBldmVuICovCisJcnRwX3BvcnQgPSBwb3J0ICYgKH4xKTsKKworCS8qIENyZWF0ZSBleHBlY3QgZm9yIFJUUCAqLworCWlmICgocnRwX2V4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJcnRwX2V4cC0+dHVwbGUuc3JjLmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXA7CisJcnRwX2V4cC0+dHVwbGUuc3JjLnUudWRwLnBvcnQgPSAwOworCXJ0cF9leHAtPnR1cGxlLmRzdC5pcCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwOworCXJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocnRwX3BvcnQpOworCXJ0cF9leHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOworCXJ0cF9leHAtPm1hc2suc3JjLmlwID0gMHhGRkZGRkZGRjsKKwlydHBfZXhwLT5tYXNrLnNyYy51LnVkcC5wb3J0ID0gMDsKKwlydHBfZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7CisJcnRwX2V4cC0+bWFzay5kc3QudS51ZHAucG9ydCA9IDB4RkZGRjsKKwlydHBfZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CisJcnRwX2V4cC0+ZmxhZ3MgPSAwOworCisJLyogQ3JlYXRlIGV4cGVjdCBmb3IgUlRDUCAqLworCWlmICgocnRjcF9leHAgPSBpcF9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkgeworCQlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChydHBfZXhwKTsKKwkJcmV0dXJuIC0xOworCX0KKwlydGNwX2V4cC0+dHVwbGUuc3JjLmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXA7CisJcnRjcF9leHAtPnR1cGxlLnNyYy51LnVkcC5wb3J0ID0gMDsKKwlydGNwX2V4cC0+dHVwbGUuZHN0LmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CisJcnRjcF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMocnRwX3BvcnQgKyAxKTsKKwlydGNwX2V4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7CisJcnRjcF9leHAtPm1hc2suc3JjLmlwID0gMHhGRkZGRkZGRjsKKwlydGNwX2V4cC0+bWFzay5zcmMudS51ZHAucG9ydCA9IDA7CisJcnRjcF9leHAtPm1hc2suZHN0LmlwID0gMHhGRkZGRkZGRjsKKwlydGNwX2V4cC0+bWFzay5kc3QudS51ZHAucG9ydCA9IDB4RkZGRjsKKwlydGNwX2V4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOworCXJ0Y3BfZXhwLT5mbGFncyA9IDA7CisKKwlpZiAoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCAhPQorCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCAmJiBuYXRfcnRwX3J0Y3BfaG9vaykgeworCQkvKiBOQVQgbmVlZGVkICovCisJCXJldCA9IG5hdF9ydHBfcnRjcF9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCWFkZHIsIHBvcnQsIHJ0cF9wb3J0LCBydHBfZXhwLAorCQkJCQlydGNwX2V4cCk7CisJfSBlbHNlIHsJCS8qIENvbm50cmFjayBvbmx5ICovCisJCXJ0cF9leHAtPmV4cGVjdGZuID0gTlVMTDsKKwkJcnRjcF9leHAtPmV4cGVjdGZuID0gTlVMTDsKKworCQlpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKHJ0cF9leHApID09IDApIHsKKwkJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQocnRjcF9leHApID09IDApIHsKKwkJCQlERUJVR1AoImlwX2N0X2gzMjM6IGV4cGVjdCBSVFAgIgorCQkJCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCQkJICAgICAgIE5JUFFVQUQocnRwX2V4cC0+dHVwbGUuc3JjLmlwKSwKKwkJCQkgICAgICAgbnRvaHMocnRwX2V4cC0+dHVwbGUuc3JjLnUudWRwLnBvcnQpLAorCQkJCSAgICAgICBOSVBRVUFEKHJ0cF9leHAtPnR1cGxlLmRzdC5pcCksCisJCQkJICAgICAgIG50b2hzKHJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0KSk7CisJCQkJREVCVUdQKCJpcF9jdF9oMzIzOiBleHBlY3QgUlRDUCAiCisJCQkJICAgICAgICIldS4ldS4ldS4ldTolaHUtPiV1LiV1LiV1LiV1OiVodVxuIiwKKwkJCQkgICAgICAgTklQUVVBRChydGNwX2V4cC0+dHVwbGUuc3JjLmlwKSwKKwkJCQkgICAgICAgbnRvaHMocnRjcF9leHAtPnR1cGxlLnNyYy51LnVkcC5wb3J0KSwKKwkJCQkgICAgICAgTklQUVVBRChydGNwX2V4cC0+dHVwbGUuZHN0LmlwKSwKKwkJCQkgICAgICAgbnRvaHMocnRjcF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0KSk7CisJCQl9IGVsc2UgeworCQkJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKHJ0cF9leHApOworCQkJCXJldCA9IC0xOworCQkJfQorCQl9IGVsc2UKKwkJCXJldCA9IC0xOworCX0KKworCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KHJ0cF9leHApOworCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KHJ0Y3BfZXhwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBleHBlY3RfdDEyMChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkgICAgICAgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkcikKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCByZXQgPSAwOworCXVfaW50MzJfdCBpcDsKKwl1X2ludDE2X3QgcG9ydDsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwID0gTlVMTDsKKworCS8qIFJlYWQgVC4xMjAgYWRkcmVzcyAqLworCWlmICghZ2V0X2gyNDVfYWRkcigqZGF0YSwgYWRkciwgJmlwLCAmcG9ydCkgfHwKKwkgICAgaXAgIT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCB8fCBwb3J0ID09IDApCisJCXJldHVybiAwOworCisJLyogQ3JlYXRlIGV4cGVjdCBmb3IgVC4xMjAgY29ubmVjdGlvbnMgKi8KKwlpZiAoKGV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJZXhwLT50dXBsZS5zcmMuaXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcDsKKwlleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gMDsKKwlleHAtPnR1cGxlLmRzdC5pcCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwOworCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhwb3J0KTsKKwlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOworCWV4cC0+bWFzay5zcmMuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5zcmMudS50Y3AucG9ydCA9IDA7CisJZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7CisJZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gMHhGRkZGOworCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOworCWV4cC0+ZmxhZ3MgPSBJUF9DVF9FWFBFQ1RfUEVSTUFORU5UOwkvKiBBY2NlcHQgbXVsdGlwbGUgY2hhbm5lbHMgKi8KKworCWlmIChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwICE9CisJICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwICYmIG5hdF90MTIwX2hvb2spIHsKKwkJLyogTkFUIG5lZWRlZCAqLworCQlyZXQgPSBuYXRfdDEyMF9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsIGFkZHIsCisJCQkJICAgIHBvcnQsIGV4cCk7CisJfSBlbHNlIHsJCS8qIENvbm50cmFjayBvbmx5ICovCisJCWV4cC0+ZXhwZWN0Zm4gPSBOVUxMOworCQlpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgeworCQkJREVCVUdQKCJpcF9jdF9oMzIzOiBleHBlY3QgVC4xMjAgIgorCQkJICAgICAgICIldS4ldS4ldS4ldTolaHUtPiV1LiV1LiV1LiV1OiVodVxuIiwKKwkJCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuc3JjLmlwKSwKKwkJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0KSwKKwkJCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuZHN0LmlwKSwKKwkJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0KSk7CisJCX0gZWxzZQorCQkJcmV0ID0gLTE7CisJfQorCisJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2gyNDVfY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzICogY2hhbm5lbCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGNoYW5uZWwtPm9wdGlvbnMgJiBlSDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbWVkaWFDaGFubmVsKSB7CisJCS8qIFJUUCAqLworCQlyZXQgPSBleHBlY3RfcnRwX3J0Y3AocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgICAmY2hhbm5lbC0+bWVkaWFDaGFubmVsKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNoYW5uZWwtPgorCSAgICBvcHRpb25zICYgZUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX21lZGlhQ29udHJvbENoYW5uZWwpIHsKKwkJLyogUlRDUCAqLworCQlyZXQgPSBleHBlY3RfcnRwX3J0Y3AocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgICAmY2hhbm5lbC0+bWVkaWFDb250cm9sQ2hhbm5lbCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19vbGMoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkgICAgICAgT3BlbkxvZ2ljYWxDaGFubmVsICogb2xjKQoreworCWludCByZXQ7CisKKwlERUJVR1AoImlwX2N0X2gzMjM6IE9wZW5Mb2dpY2FsQ2hhbm5lbFxuIik7CisKKwlpZiAob2xjLT5mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLm11bHRpcGxleFBhcmFtZXRlcnMuY2hvaWNlID09CisJICAgIGVPcGVuTG9naWNhbENoYW5uZWxfZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzX2gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKQorCXsKKwkJcmV0ID0gcHJvY2Vzc19oMjQ1X2NoYW5uZWwocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAgJm9sYy0+CisJCQkJCSAgIGZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMuCisJCQkJCSAgIG11bHRpcGxleFBhcmFtZXRlcnMuCisJCQkJCSAgIGgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChvbGMtPm9wdGlvbnMgJgorCSAgICAgZU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSAmJgorCSAgICAob2xjLT5yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLm9wdGlvbnMgJgorCSAgICAgZU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMpCisJICAgICYmIChvbGMtPnJldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMubXVsdGlwbGV4UGFyYW1ldGVycy4KKwkJY2hvaWNlID09CisJCWVPcGVuTG9naWNhbENoYW5uZWxfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzX2gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSkKKwl7CisJCXJldCA9CisJCSAgICBwcm9jZXNzX2gyNDVfY2hhbm5lbChwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgJm9sYy0+CisJCQkJCSByZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLgorCQkJCQkgbXVsdGlwbGV4UGFyYW1ldGVycy4KKwkJCQkJIGgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChvbGMtPm9wdGlvbnMgJiBlT3BlbkxvZ2ljYWxDaGFubmVsX3NlcGFyYXRlU3RhY2spICYmCisJICAgIG9sYy0+Zm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycy5kYXRhVHlwZS5jaG9pY2UgPT0KKwkgICAgZURhdGFUeXBlX2RhdGEgJiYKKwkgICAgb2xjLT5mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLmRhdGFUeXBlLmRhdGEuYXBwbGljYXRpb24uCisJICAgIGNob2ljZSA9PSBlRGF0YUFwcGxpY2F0aW9uQ2FwYWJpbGl0eV9hcHBsaWNhdGlvbl90MTIwICYmCisJICAgIG9sYy0+Zm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycy5kYXRhVHlwZS5kYXRhLmFwcGxpY2F0aW9uLgorCSAgICB0MTIwLmNob2ljZSA9PSBlRGF0YVByb3RvY29sQ2FwYWJpbGl0eV9zZXBhcmF0ZUxBTlN0YWNrICYmCisJICAgIG9sYy0+c2VwYXJhdGVTdGFjay5uZXR3b3JrQWRkcmVzcy5jaG9pY2UgPT0KKwkgICAgZU5ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzX25ldHdvcmtBZGRyZXNzX2xvY2FsQXJlYUFkZHJlc3MpIHsKKwkJcmV0ID0gZXhwZWN0X3QxMjAocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICZvbGMtPnNlcGFyYXRlU3RhY2submV0d29ya0FkZHJlc3MuCisJCQkJICBsb2NhbEFyZWFBZGRyZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX29sY2Eoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJT3BlbkxvZ2ljYWxDaGFubmVsQWNrICogb2xjYSkKK3sKKwlIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycyAqYWNrOworCWludCByZXQ7CisKKwlERUJVR1AoImlwX2N0X2gzMjM6IE9wZW5Mb2dpY2FsQ2hhbm5lbEFja1xuIik7CisKKwlpZiAoKG9sY2EtPm9wdGlvbnMgJgorCSAgICAgZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSAmJgorCSAgICAob2xjYS0+cmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycy5vcHRpb25zICYKKwkgICAgIGVPcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzKQorCSAgICAmJiAob2xjYS0+cmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycy5tdWx0aXBsZXhQYXJhbWV0ZXJzLgorCQljaG9pY2UgPT0KKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfaDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMpKQorCXsKKwkJcmV0ID0gcHJvY2Vzc19oMjQ1X2NoYW5uZWwocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAgJm9sY2EtPgorCQkJCQkgICByZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLgorCQkJCQkgICBtdWx0aXBsZXhQYXJhbWV0ZXJzLgorCQkJCQkgICBoMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmICgob2xjYS0+b3B0aW9ucyAmCisJICAgICBlT3BlbkxvZ2ljYWxDaGFubmVsQWNrX2ZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzKSAmJgorCSAgICAob2xjYS0+Zm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnMuY2hvaWNlID09CisJICAgICBlT3BlbkxvZ2ljYWxDaGFubmVsQWNrX2ZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzX2gyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzKSkKKwl7CisJCWFjayA9ICZvbGNhLT5mb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVycy4KKwkJICAgIGgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzOworCQlpZiAoYWNrLT5vcHRpb25zICYKKwkJICAgIGVIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVyc19tZWRpYUNoYW5uZWwpIHsKKwkJCS8qIFJUUCAqLworCQkJcmV0ID0gZXhwZWN0X3J0cF9ydGNwKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICAgICZhY2stPm1lZGlhQ2hhbm5lbCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoYWNrLT5vcHRpb25zICYKKwkJICAgIGVIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVyc19tZWRpYUNvbnRyb2xDaGFubmVsKSB7CisJCQkvKiBSVENQICovCisJCQlyZXQgPSBleHBlY3RfcnRwX3J0Y3AocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAgICAgJmFjay0+bWVkaWFDb250cm9sQ2hhbm5lbCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfaDI0NShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQl1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQlNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgKiBtc2NtKQoreworCXN3aXRjaCAobXNjbS0+Y2hvaWNlKSB7CisJY2FzZSBlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlX3JlcXVlc3Q6CisJCWlmIChtc2NtLT5yZXF1ZXN0LmNob2ljZSA9PQorCQkgICAgZVJlcXVlc3RNZXNzYWdlX29wZW5Mb2dpY2FsQ2hhbm5lbCkgeworCQkJcmV0dXJuIHByb2Nlc3Nfb2xjKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICZtc2NtLT5yZXF1ZXN0Lm9wZW5Mb2dpY2FsQ2hhbm5lbCk7CisJCX0KKwkJREVCVUdQKCJpcF9jdF9oMzIzOiBILjI0NSBSZXF1ZXN0ICVkXG4iLAorCQkgICAgICAgbXNjbS0+cmVxdWVzdC5jaG9pY2UpOworCQlicmVhazsKKwljYXNlIGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VfcmVzcG9uc2U6CisJCWlmIChtc2NtLT5yZXNwb25zZS5jaG9pY2UgPT0KKwkJICAgIGVSZXNwb25zZU1lc3NhZ2Vfb3BlbkxvZ2ljYWxDaGFubmVsQWNrKSB7CisJCQlyZXR1cm4gcHJvY2Vzc19vbGNhKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICAmbXNjbS0+cmVzcG9uc2UuCisJCQkJCSAgICBvcGVuTG9naWNhbENoYW5uZWxBY2spOworCQl9CisJCURFQlVHUCgiaXBfY3RfaDMyMzogSC4yNDUgUmVzcG9uc2UgJWRcbiIsCisJCSAgICAgICBtc2NtLT5yZXNwb25zZS5jaG9pY2UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR1AoImlwX2N0X2gzMjM6IEguMjQ1IHNpZ25hbCAlZFxuIiwgbXNjbS0+Y2hvaWNlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBoMjQ1X2hlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdGF0aWMgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlIG1zY207CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IE5VTEw7CisJaW50IGRhdGFsZW47CisJaW50IGRhdGFvZmY7CisJaW50IHJldDsKKworCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLworCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQKKwkgICAgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisJREVCVUdQKCJpcF9jdF9oMjQ1OiBza2JsZW4gPSAldVxuIiwgKCpwc2tiKS0+bGVuKTsKKworCXNwaW5fbG9ja19iaCgmaXBfaDMyM19sb2NrKTsKKworCS8qIFByb2Nlc3MgZWFjaCBUUEtUICovCisJd2hpbGUgKGdldF90cGt0X2RhdGEocHNrYiwgY3QsIGN0aW5mbywgJmRhdGEsICZkYXRhbGVuLCAmZGF0YW9mZikpIHsKKwkJREVCVUdQKCJpcF9jdF9oMjQ1OiBUUEtUICV1LiV1LiV1LiV1LT4ldS4ldS4ldS4ldSwgbGVuPSVkXG4iLAorCQkgICAgICAgTklQUVVBRCgoKnBza2IpLT5uaC5pcGgtPnNhZGRyKSwKKwkJICAgICAgIE5JUFFVQUQoKCpwc2tiKS0+bmguaXBoLT5kYWRkciksIGRhdGFsZW4pOworCisJCS8qIERlY29kZSBILjI0NSBzaWduYWwgKi8KKwkJcmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sCisJCQkJCQkJICAgJm1zY20pOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoImlwX2N0X2gyNDU6IGRlY29kaW5nIGVycm9yOiAlc1xuIiwKKwkJCQkgICAgICAgcmV0ID09IEgzMjNfRVJST1JfQk9VTkQgPworCQkJCSAgICAgICAib3V0IG9mIGJvdW5kIiA6ICJvdXQgb2YgcmFuZ2UiKTsKKwkJCS8qIFdlIGRvbid0IGRyb3Agd2hlbiBkZWNvZGluZyBlcnJvciAqLworCQkJYnJlYWs7CisJCX0KKworCQkvKiBQcm9jZXNzIEguMjQ1IHNpZ25hbCAqLworCQlpZiAocHJvY2Vzc19oMjQ1KHBza2IsIGN0LCBjdGluZm8sICZkYXRhLCBkYXRhb2ZmLCAmbXNjbSkgPCAwKQorCQkJZ290byBkcm9wOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZpcF9oMzIzX2xvY2spOworCXJldHVybiBORl9BQ0NFUFQ7CisKKyAgICAgIGRyb3A6CisJc3Bpbl91bmxvY2tfYmgoJmlwX2gzMjNfbG9jayk7CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKCJpcF9jdF9oMjQ1OiBwYWNrZXQgZHJvcHBlZFxuIik7CisJcmV0dXJuIE5GX0RST1A7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpcF9jb25udHJhY2tfaGVscGVyIGlwX2Nvbm50cmFja19oZWxwZXJfaDI0NSA9IHsKKwkubmFtZSA9ICJILjI0NSIsCisJLm1lID0gVEhJU19NT0RVTEUsCisJLm1heF9leHBlY3RlZCA9IEgzMjNfUlRQX0NIQU5ORUxfTUFYICogNCArIDIgLyogVC4xMjAgKi8gLAorCS50aW1lb3V0ID0gMjQwLAorCS50dXBsZSA9IHsuZHN0ID0gey5wcm90b251bSA9IElQUFJPVE9fVENQfX0sCisJLm1hc2sgPSB7LnNyYyA9IHsudSA9IHsweEZGRkZ9fSwKKwkJIC5kc3QgPSB7LnByb3RvbnVtID0gMHhGRn19LAorCS5oZWxwID0gaDI0NV9oZWxwCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCSAgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICp0aGlzKQoreworCXdyaXRlX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKKwluZXctPmhlbHBlciA9ICZpcF9jb25udHJhY2tfaGVscGVyX2gyNDU7CisJd3JpdGVfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGdldF9oMjI1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCSAgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpCit7CisJdW5zaWduZWQgY2hhciAqcDsKKworCWlmIChhZGRyLT5jaG9pY2UgIT0gZVRyYW5zcG9ydEFkZHJlc3NfaXBBZGRyZXNzKQorCQlyZXR1cm4gMDsKKworCXAgPSBkYXRhICsgYWRkci0+aXBBZGRyZXNzLmlwOworCSppcCA9IGh0b25sKChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgKHBbM10pKTsKKwkqcG9ydCA9IChwWzRdIDw8IDgpIHwgKHBbNV0pOworCisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBleHBlY3RfaDI0NShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCSAgICAgICBUcmFuc3BvcnRBZGRyZXNzICogYWRkcikKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCByZXQgPSAwOworCXVfaW50MzJfdCBpcDsKKwl1X2ludDE2X3QgcG9ydDsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwID0gTlVMTDsKKworCS8qIFJlYWQgaDI0NUFkZHJlc3MgKi8KKwlpZiAoIWdldF9oMjI1X2FkZHIoKmRhdGEsIGFkZHIsICZpcCwgJnBvcnQpIHx8CisJICAgIGlwICE9IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXAgfHwgcG9ydCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIENyZWF0ZSBleHBlY3QgZm9yIGgyNDUgY29ubmVjdGlvbiAqLworCWlmICgoZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKwlleHAtPnR1cGxlLnNyYy5pcCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmlwOworCWV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQgPSAwOworCWV4cC0+dHVwbGUuZHN0LmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CisJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnQpOworCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CisJZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJZXhwLT5tYXNrLnNyYy51LnRjcC5wb3J0ID0gMDsKKwlleHAtPm1hc2suZHN0LmlwID0gMHhGRkZGRkZGRjsKKwlleHAtPm1hc2suZHN0LnUudGNwLnBvcnQgPSAweEZGRkY7CisJZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CisJZXhwLT5mbGFncyA9IDA7CisKKwlpZiAoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCAhPQorCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCAmJiBuYXRfaDI0NV9ob29rKSB7CisJCS8qIE5BVCBuZWVkZWQgKi8KKwkJcmV0ID0gbmF0X2gyNDVfaG9vayhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLCBhZGRyLAorCQkJCSAgICBwb3J0LCBleHApOworCX0gZWxzZSB7CQkvKiBDb25udHJhY2sgb25seSAqLworCQlleHAtPmV4cGVjdGZuID0gaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0OworCisJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKSB7CisJCQlERUJVR1AoImlwX2N0X3E5MzE6IGV4cGVjdCBILjI0NSAiCisJCQkgICAgICAgIiV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCQkJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5zcmMuaXApLAorCQkJICAgICAgIG50b2hzKGV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQpLAorCQkJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5kc3QuaXApLAorCQkJICAgICAgIG50b2hzKGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQpKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtMTsKKwl9CisKKwlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworCisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3Nfc2V0dXAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgU2V0dXBfVVVJRSAqIHNldHVwKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldDsKKwlpbnQgaTsKKwl1X2ludDMyX3QgaXA7CisJdV9pbnQxNl90IHBvcnQ7CisKKwlERUJVR1AoImlwX2N0X3E5MzE6IFNldHVwXG4iKTsKKworCWlmIChzZXR1cC0+b3B0aW9ucyAmIGVTZXR1cF9VVUlFX2gyNDVBZGRyZXNzKSB7CisJCXJldCA9IGV4cGVjdF9oMjQ1KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAmc2V0dXAtPmgyNDVBZGRyZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChzZXR1cC0+b3B0aW9ucyAmIGVTZXR1cF9VVUlFX2Rlc3RDYWxsU2lnbmFsQWRkcmVzcykgJiYKKwkgICAgKHNldF9oMjI1X2FkZHJfaG9vaykgJiYKKwkgICAgZ2V0X2gyMjVfYWRkcigqZGF0YSwgJnNldHVwLT5kZXN0Q2FsbFNpZ25hbEFkZHJlc3MsICZpcCwgJnBvcnQpICYmCisJICAgIGlwICE9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmlwKSB7CisJCURFQlVHUCgiaXBfY3RfcTkzMTogc2V0IGRlc3RDYWxsU2lnbmFsQWRkcmVzcyAiCisJCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCSAgICAgICBOSVBRVUFEKGlwKSwgcG9ydCwKKwkJICAgICAgIE5JUFFVQUQoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXApLAorCQkgICAgICAgbnRvaHMoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudS50Y3AucG9ydCkpOworCQlyZXQgPSBzZXRfaDIyNV9hZGRyX2hvb2socHNrYiwgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICZzZXR1cC0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLAorCQkJCQkgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXAsCisJCQkJCSBudG9ocyhjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy4KKwkJCQkJICAgICAgIHUudGNwLnBvcnQpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChzZXR1cC0+b3B0aW9ucyAmIGVTZXR1cF9VVUlFX3NvdXJjZUNhbGxTaWduYWxBZGRyZXNzKSAmJgorCSAgICAoc2V0X2gyMjVfYWRkcl9ob29rKSAmJgorCSAgICBnZXRfaDIyNV9hZGRyKCpkYXRhLCAmc2V0dXAtPnNvdXJjZUNhbGxTaWduYWxBZGRyZXNzLCAmaXAsICZwb3J0KQorCSAgICAmJiBpcCAhPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCkgeworCQlERUJVR1AoImlwX2N0X3E5MzE6IHNldCBzb3VyY2VDYWxsU2lnbmFsQWRkcmVzcyAiCisJCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCSAgICAgICBOSVBRVUFEKGlwKSwgcG9ydCwKKwkJICAgICAgIE5JUFFVQUQoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXApLAorCQkgICAgICAgbnRvaHMoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudS50Y3AucG9ydCkpOworCQlyZXQgPSBzZXRfaDIyNV9hZGRyX2hvb2socHNrYiwgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICZzZXR1cC0+c291cmNlQ2FsbFNpZ25hbEFkZHJlc3MsCisJCQkJCSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCwKKwkJCQkJIG50b2hzKGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LgorCQkJCQkgICAgICAgdS50Y3AucG9ydCkpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc2V0dXAtPm9wdGlvbnMgJiBlU2V0dXBfVVVJRV9mYXN0U3RhcnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNldHVwLT5mYXN0U3RhcnQuY291bnQ7IGkrKykgeworCQkJcmV0ID0gcHJvY2Vzc19vbGMocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAmc2V0dXAtPmZhc3RTdGFydC5pdGVtW2ldKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19jYWxscHJvY2VlZGluZyhzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSAgQ2FsbFByb2NlZWRpbmdfVVVJRSAqIGNhbGxwcm9jKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlERUJVR1AoImlwX2N0X3E5MzE6IENhbGxQcm9jZWVkaW5nXG4iKTsKKworCWlmIChjYWxscHJvYy0+b3B0aW9ucyAmIGVDYWxsUHJvY2VlZGluZ19VVUlFX2gyNDVBZGRyZXNzKSB7CisJCXJldCA9IGV4cGVjdF9oMjQ1KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAmY2FsbHByb2MtPmgyNDVBZGRyZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNhbGxwcm9jLT5vcHRpb25zICYgZUNhbGxQcm9jZWVkaW5nX1VVSUVfZmFzdFN0YXJ0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBjYWxscHJvYy0+ZmFzdFN0YXJ0LmNvdW50OyBpKyspIHsKKwkJCXJldCA9IHByb2Nlc3Nfb2xjKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgJmNhbGxwcm9jLT5mYXN0U3RhcnQuaXRlbVtpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICBDb25uZWN0X1VVSUUgKiBjb25uZWN0KQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlERUJVR1AoImlwX2N0X3E5MzE6IENvbm5lY3RcbiIpOworCisJaWYgKGNvbm5lY3QtPm9wdGlvbnMgJiBlQ29ubmVjdF9VVUlFX2gyNDVBZGRyZXNzKSB7CisJCXJldCA9IGV4cGVjdF9oMjQ1KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAmY29ubmVjdC0+aDI0NUFkZHJlc3MpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY29ubmVjdC0+b3B0aW9ucyAmIGVDb25uZWN0X1VVSUVfZmFzdFN0YXJ0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0LT5mYXN0U3RhcnQuY291bnQ7IGkrKykgeworCQkJcmV0ID0gcHJvY2Vzc19vbGMocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAmY29ubmVjdC0+ZmFzdFN0YXJ0Lml0ZW1baV0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2FsZXJ0aW5nKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCQkgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgIEFsZXJ0aW5nX1VVSUUgKiBhbGVydCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJREVCVUdQKCJpcF9jdF9xOTMxOiBBbGVydGluZ1xuIik7CisKKwlpZiAoYWxlcnQtPm9wdGlvbnMgJiBlQWxlcnRpbmdfVVVJRV9oMjQ1QWRkcmVzcykgeworCQlyZXQgPSBleHBlY3RfaDI0NShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgJmFsZXJ0LT5oMjQ1QWRkcmVzcyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChhbGVydC0+b3B0aW9ucyAmIGVBbGVydGluZ19VVUlFX2Zhc3RTdGFydCkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWxlcnQtPmZhc3RTdGFydC5jb3VudDsgaSsrKSB7CisJCQlyZXQgPSBwcm9jZXNzX29sYyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgICZhbGVydC0+ZmFzdFN0YXJ0Lml0ZW1baV0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2luZm9ybWF0aW9uKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgICAgSW5mb3JtYXRpb25fVVVJRSAqIGluZm8pCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCURFQlVHUCgiaXBfY3RfcTkzMTogSW5mb3JtYXRpb25cbiIpOworCisJaWYgKGluZm8tPm9wdGlvbnMgJiBlSW5mb3JtYXRpb25fVVVJRV9mYXN0U3RhcnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPmZhc3RTdGFydC5jb3VudDsgaSsrKSB7CisJCQlyZXQgPSBwcm9jZXNzX29sYyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgICZpbmZvLT5mYXN0U3RhcnQuaXRlbVtpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfZmFjaWxpdHkoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgRmFjaWxpdHlfVVVJRSAqIGZhY2lsaXR5KQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlERUJVR1AoImlwX2N0X3E5MzE6IEZhY2lsaXR5XG4iKTsKKworCWlmIChmYWNpbGl0eS0+b3B0aW9ucyAmIGVGYWNpbGl0eV9VVUlFX2gyNDVBZGRyZXNzKSB7CisJCXJldCA9IGV4cGVjdF9oMjQ1KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAmZmFjaWxpdHktPmgyNDVBZGRyZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGZhY2lsaXR5LT5vcHRpb25zICYgZUZhY2lsaXR5X1VVSUVfZmFzdFN0YXJ0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBmYWNpbGl0eS0+ZmFzdFN0YXJ0LmNvdW50OyBpKyspIHsKKwkJCXJldCA9IHByb2Nlc3Nfb2xjKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgJmZhY2lsaXR5LT5mYXN0U3RhcnQuaXRlbVtpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfcHJvZ3Jlc3Moc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgUHJvZ3Jlc3NfVVVJRSAqIHByb2dyZXNzKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlERUJVR1AoImlwX2N0X3E5MzE6IFByb2dyZXNzXG4iKTsKKworCWlmIChwcm9ncmVzcy0+b3B0aW9ucyAmIGVQcm9ncmVzc19VVUlFX2gyNDVBZGRyZXNzKSB7CisJCXJldCA9IGV4cGVjdF9oMjQ1KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAmcHJvZ3Jlc3MtPmgyNDVBZGRyZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHByb2dyZXNzLT5vcHRpb25zICYgZVByb2dyZXNzX1VVSUVfZmFzdFN0YXJ0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9ncmVzcy0+ZmFzdFN0YXJ0LmNvdW50OyBpKyspIHsKKwkJCXJldCA9IHByb2Nlc3Nfb2xjKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgJnByb2dyZXNzLT5mYXN0U3RhcnQuaXRlbVtpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfcTkzMShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQl1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsIFE5MzEgKiBxOTMxKQoreworCUgzMjNfVVVfUERVICpwZHUgPSAmcTkzMS0+VVVJRS5oMzIzX3V1X3BkdTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocGR1LT5oMzIzX21lc3NhZ2VfYm9keS5jaG9pY2UpIHsKKwljYXNlIGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9zZXR1cDoKKwkJcmV0ID0gcHJvY2Vzc19zZXR1cChwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgICAmcGR1LT5oMzIzX21lc3NhZ2VfYm9keS5zZXR1cCk7CisJCWJyZWFrOworCWNhc2UgZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2NhbGxQcm9jZWVkaW5nOgorCQlyZXQgPSBwcm9jZXNzX2NhbGxwcm9jZWVkaW5nKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICAgJnBkdS0+aDMyM19tZXNzYWdlX2JvZHkuCisJCQkJCSAgICAgY2FsbFByb2NlZWRpbmcpOworCQlicmVhazsKKwljYXNlIGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9jb25uZWN0OgorCQlyZXQgPSBwcm9jZXNzX2Nvbm5lY3QocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgICAmcGR1LT5oMzIzX21lc3NhZ2VfYm9keS5jb25uZWN0KTsKKwkJYnJlYWs7CisJY2FzZSBlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfYWxlcnRpbmc6CisJCXJldCA9IHByb2Nlc3NfYWxlcnRpbmcocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgICAgJnBkdS0+aDMyM19tZXNzYWdlX2JvZHkuYWxlcnRpbmcpOworCQlicmVhazsKKwljYXNlIGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9pbmZvcm1hdGlvbjoKKwkJcmV0ID0gcHJvY2Vzc19pbmZvcm1hdGlvbihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgICZwZHUtPmgzMjNfbWVzc2FnZV9ib2R5LgorCQkJCQkgIGluZm9ybWF0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfZmFjaWxpdHk6CisJCXJldCA9IHByb2Nlc3NfZmFjaWxpdHkocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgICAgJnBkdS0+aDMyM19tZXNzYWdlX2JvZHkuZmFjaWxpdHkpOworCQlicmVhazsKKwljYXNlIGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9wcm9ncmVzczoKKwkJcmV0ID0gcHJvY2Vzc19wcm9ncmVzcyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgICAgICAmcGR1LT5oMzIzX21lc3NhZ2VfYm9keS5wcm9ncmVzcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHUCgiaXBfY3RfcTkzMTogUS45MzEgc2lnbmFsICVkXG4iLAorCQkgICAgICAgcGR1LT5oMzIzX21lc3NhZ2VfYm9keS5jaG9pY2UpOworCQlicmVhazsKKwl9CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHBkdS0+b3B0aW9ucyAmIGVIMzIzX1VVX1BEVV9oMjQ1Q29udHJvbCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcGR1LT5oMjQ1Q29udHJvbC5jb3VudDsgaSsrKSB7CisJCQlyZXQgPSBwcm9jZXNzX2gyNDUocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAgJnBkdS0+aDI0NUNvbnRyb2wuaXRlbVtpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHE5MzFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXN0YXRpYyBROTMxIHE5MzE7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IE5VTEw7CisJaW50IGRhdGFsZW47CisJaW50IGRhdGFvZmY7CisJaW50IHJldDsKKworCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLworCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQKKwkgICAgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisJREVCVUdQKCJpcF9jdF9xOTMxOiBza2JsZW4gPSAldVxuIiwgKCpwc2tiKS0+bGVuKTsKKworCXNwaW5fbG9ja19iaCgmaXBfaDMyM19sb2NrKTsKKworCS8qIFByb2Nlc3MgZWFjaCBUUEtUICovCisJd2hpbGUgKGdldF90cGt0X2RhdGEocHNrYiwgY3QsIGN0aW5mbywgJmRhdGEsICZkYXRhbGVuLCAmZGF0YW9mZikpIHsKKwkJREVCVUdQKCJpcF9jdF9xOTMxOiBUUEtUICV1LiV1LiV1LiV1LT4ldS4ldS4ldS4ldSwgbGVuPSVkXG4iLAorCQkgICAgICAgTklQUVVBRCgoKnBza2IpLT5uaC5pcGgtPnNhZGRyKSwKKwkJICAgICAgIE5JUFFVQUQoKCpwc2tiKS0+bmguaXBoLT5kYWRkciksIGRhdGFsZW4pOworCisJCS8qIERlY29kZSBRLjkzMSBzaWduYWwgKi8KKwkJcmV0ID0gRGVjb2RlUTkzMShkYXRhLCBkYXRhbGVuLCAmcTkzMSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCXByaW50aygiaXBfY3RfcTkzMTogZGVjb2RpbmcgZXJyb3I6ICVzXG4iLAorCQkJCSAgICAgICByZXQgPT0gSDMyM19FUlJPUl9CT1VORCA/CisJCQkJICAgICAgICJvdXQgb2YgYm91bmQiIDogIm91dCBvZiByYW5nZSIpOworCQkJLyogV2UgZG9uJ3QgZHJvcCB3aGVuIGRlY29kaW5nIGVycm9yICovCisJCQlicmVhazsKKwkJfQorCisJCS8qIFByb2Nlc3MgUS45MzEgc2lnbmFsICovCisJCWlmIChwcm9jZXNzX3E5MzEocHNrYiwgY3QsIGN0aW5mbywgJmRhdGEsIGRhdGFvZmYsICZxOTMxKSA8IDApCisJCQlnb3RvIGRyb3A7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJmlwX2gzMjNfbG9jayk7CisJcmV0dXJuIE5GX0FDQ0VQVDsKKworICAgICAgZHJvcDoKKwlzcGluX3VubG9ja19iaCgmaXBfaDMyM19sb2NrKTsKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoImlwX2N0X3E5MzE6IHBhY2tldCBkcm9wcGVkXG4iKTsKKwlyZXR1cm4gTkZfRFJPUDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGlwX2Nvbm50cmFja19oZWxwZXIgaXBfY29ubnRyYWNrX2hlbHBlcl9xOTMxID0geworCS5uYW1lID0gIlEuOTMxIiwKKwkubWUgPSBUSElTX01PRFVMRSwKKwkubWF4X2V4cGVjdGVkID0gSDMyM19SVFBfQ0hBTk5FTF9NQVggKiA0ICsgNCAvKiBULjEyMCBhbmQgSC4yNDUgKi8gLAorCS50aW1lb3V0ID0gMjQwLAorCS50dXBsZSA9IHsuc3JjID0gey51ID0ge19fY29uc3RhbnRfaHRvbnMoUTkzMV9QT1JUKX19LAorCQkgIC5kc3QgPSB7LnByb3RvbnVtID0gSVBQUk9UT19UQ1B9fSwKKwkubWFzayA9IHsuc3JjID0gey51ID0gezB4RkZGRn19LAorCQkgLmRzdCA9IHsucHJvdG9udW0gPSAweEZGfX0sCisJLmhlbHAgPSBxOTMxX2hlbHAKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBpcF9jb25udHJhY2tfcTkzMV9leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqbmV3LAorCQkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpCit7CisJd3JpdGVfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOworCW5ldy0+aGVscGVyID0gJmlwX2Nvbm50cmFja19oZWxwZXJfcTkzMTsKKwl3cml0ZV91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZ2V0X3VkcF9kYXRhKHN0cnVjdCBza19idWZmICoqcHNrYiwgaW50ICpkYXRhbGVuKQoreworCXN0cnVjdCB1ZHBoZHIgX3VoLCAqdWg7CisJaW50IGRhdGFvZmY7CisKKwl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgKCpwc2tiKS0+bmguaXBoLT5paGwgKiA0LCBzaXplb2YoX3VoKSwKKwkJCQkmX3VoKTsKKwlpZiAodWggPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsICogNCArIHNpemVvZihfdWgpOworCWlmIChkYXRhb2ZmID49ICgqcHNrYiktPmxlbikKKwkJcmV0dXJuIE5VTEw7CisJKmRhdGFsZW4gPSAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmOworCXJldHVybiBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIGRhdGFvZmYsICpkYXRhbGVuLCBoMzIzX2J1ZmZlcik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpmaW5kX2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCQkJICAgICAgIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpCit7CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlIHR1cGxlOworCisJdHVwbGUuc3JjLmlwID0gMDsKKwl0dXBsZS5zcmMudS50Y3AucG9ydCA9IDA7CisJdHVwbGUuZHN0LmlwID0gaXA7CisJdHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhwb3J0KTsKKwl0dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKworCWV4cCA9IF9faXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKCZ0dXBsZSk7CisJaWYgKGV4cC0+bWFzdGVyID09IGN0KQorCQlyZXR1cm4gZXhwOworCXJldHVybiBOVUxMOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2V0X2V4cGVjdF90aW1lb3V0KHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAsCisJCQkgICAgICB1bnNpZ25lZCB0aW1lb3V0KQoreworCWlmICghZXhwIHx8ICFkZWxfdGltZXIoJmV4cC0+dGltZW91dCkpCisJCXJldHVybiAwOworCisJZXhwLT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZW91dCAqIEhaOworCWFkZF90aW1lcigmZXhwLT50aW1lb3V0KTsKKworCXJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZXhwZWN0X3E5MzEoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCSAgICAgICBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KQoreworCXN0cnVjdCBpcF9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZjdC0+aGVscC5jdF9oMzIzX2luZm87CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwl1X2ludDMyX3QgaXA7CisJdV9pbnQxNl90IHBvcnQ7CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKworCS8qIExvb2sgZm9yIHRoZSBmaXJzdCByZWxhdGVkIGFkZHJlc3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoZ2V0X2gyMjVfYWRkcigqZGF0YSwgJmFkZHJbaV0sICZpcCwgJnBvcnQpICYmCisJCSAgICBpcCA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwICYmIHBvcnQgIT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID49IGNvdW50KQkJLyogTm90IGZvdW5kICovCisJCXJldHVybiAwOworCisJLyogQ3JlYXRlIGV4cGVjdCBmb3IgUS45MzEgKi8KKwlpZiAoKGV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJZXhwLT50dXBsZS5zcmMuaXAgPSBna3JvdXRlZF9vbmx5ID8JLyogb25seSBhY2NlcHQgY2FsbHMgZnJvbSBHSz8gKi8KKwkgICAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXAgOiAwOworCWV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQgPSAwOworCWV4cC0+dHVwbGUuZHN0LmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CisJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnQpOworCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CisJZXhwLT5tYXNrLnNyYy5pcCA9IGdrcm91dGVkX29ubHkgPyAweEZGRkZGRkZGIDogMDsKKwlleHAtPm1hc2suc3JjLnUudGNwLnBvcnQgPSAwOworCWV4cC0+bWFzay5kc3QuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IDB4RkZGRjsKKwlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKKwlleHAtPmZsYWdzID0gSVBfQ1RfRVhQRUNUX1BFUk1BTkVOVDsJLyogQWNjZXB0IG11bHRpcGxlIGNhbGxzICovCisKKwlpZiAobmF0X3E5MzFfaG9vaykgewkvKiBOZWVkIE5BVCAqLworCQlyZXQgPSBuYXRfcTkzMV9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGFkZHIsIGksCisJCQkJICAgIHBvcnQsIGV4cCk7CisJfSBlbHNlIHsJCS8qIENvbm50cmFjayBvbmx5ICovCisJCWV4cC0+ZXhwZWN0Zm4gPSBpcF9jb25udHJhY2tfcTkzMV9leHBlY3Q7CisKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKKwkJCURFQlVHUCgiaXBfY3RfcmFzOiBleHBlY3QgUS45MzEgIgorCQkJICAgICAgICIldS4ldS4ldS4ldTolaHUtPiV1LiV1LiV1LiV1OiVodVxuIiwKKwkJCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuc3JjLmlwKSwKKwkJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0KSwKKwkJCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuZHN0LmlwKSwKKwkJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0KSk7CisKKwkJCS8qIFNhdmUgcG9ydCBmb3IgbG9va2luZyB1cCBleHBlY3QgaW4gcHJvY2Vzc2luZyBSQ0YgKi8KKwkJCWluZm8tPnNpZ19wb3J0W2Rpcl0gPSBwb3J0OworCQl9IGVsc2UKKwkJCXJldCA9IC0xOworCX0KKworCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19ncnEoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIEdhdGVrZWVwZXJSZXF1ZXN0ICogZ3JxKQoreworCURFQlVHUCgiaXBfY3RfcmFzOiBHUlFcbiIpOworCisJaWYgKHNldF9yYXNfYWRkcl9ob29rKQkvKiBOQVRlZCAqLworCQlyZXR1cm4gc2V0X3Jhc19hZGRyX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJICZncnEtPnJhc0FkZHJlc3MsIDEpOworCXJldHVybiAwOworfQorCisvKiBEZWNsYXJlIGJlZm9yZSB1c2luZyAqLworc3RhdGljIHZvaWQgaXBfY29ubnRyYWNrX3Jhc19leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqbmV3LAorCQkJCSAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2djZihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgR2F0ZWtlZXBlckNvbmZpcm0gKiBnY2YpCit7CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgcmV0ID0gMDsKKwl1X2ludDMyX3QgaXA7CisJdV9pbnQxNl90IHBvcnQ7CisJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKworCURFQlVHUCgiaXBfY3RfcmFzOiBHQ0ZcbiIpOworCisJaWYgKCFnZXRfaDIyNV9hZGRyKCpkYXRhLCAmZ2NmLT5yYXNBZGRyZXNzLCAmaXAsICZwb3J0KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSZWdpc3RyYXRpb24gcG9ydCBpcyB0aGUgc2FtZSBhcyBkaXNjb3ZlcnkgcG9ydCAqLworCWlmIChpcCA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwICYmCisJICAgIHBvcnQgPT0gbnRvaHMoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51LnVkcC5wb3J0KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBBdm9pZCBSQVMgZXhwZWN0YXRpb24gbG9vcHMuIEEgR0NGIGlzIG5ldmVyIGV4cGVjdGVkLiAqLworCWlmICh0ZXN0X2JpdChJUFNfRVhQRUNURURfQklULCAmY3QtPnN0YXR1cykpCisJCXJldHVybiAwOworCisJLyogTmVlZCBuZXcgZXhwZWN0ICovCisJaWYgKChleHAgPSBpcF9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCWV4cC0+dHVwbGUuc3JjLmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXA7CisJZXhwLT50dXBsZS5zcmMudS50Y3AucG9ydCA9IDA7CisJZXhwLT50dXBsZS5kc3QuaXAgPSBpcDsKKwlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMocG9ydCk7CisJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKKwlleHAtPm1hc2suc3JjLmlwID0gMHhGRkZGRkZGRjsKKwlleHAtPm1hc2suc3JjLnUudGNwLnBvcnQgPSAwOworCWV4cC0+bWFzay5kc3QuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IDB4RkZGRjsKKwlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKKwlleHAtPmZsYWdzID0gMDsKKwlleHAtPmV4cGVjdGZuID0gaXBfY29ubnRyYWNrX3Jhc19leHBlY3Q7CisJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKKwkJREVCVUdQKCJpcF9jdF9yYXM6IGV4cGVjdCBSQVMgIgorCQkgICAgICAgIiV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCQkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLnNyYy5pcCksCisJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0KSwKKwkJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5kc3QuaXApLAorCQkgICAgICAgbnRvaHMoZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCkpOworCX0gZWxzZQorCQlyZXQgPSAtMTsKKworCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19ycnEoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIFJlZ2lzdHJhdGlvblJlcXVlc3QgKiBycnEpCit7CisJc3RydWN0IGlwX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJmN0LT5oZWxwLmN0X2gzMjNfaW5mbzsKKwlpbnQgcmV0OworCisJREVCVUdQKCJpcF9jdF9yYXM6IFJSUVxuIik7CisKKwlyZXQgPSBleHBlY3RfcTkzMShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJICBycnEtPmNhbGxTaWduYWxBZGRyZXNzLml0ZW0sCisJCQkgIHJycS0+Y2FsbFNpZ25hbEFkZHJlc3MuY291bnQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc2V0X3Jhc19hZGRyX2hvb2spIHsKKwkJcmV0ID0gc2V0X3Jhc19hZGRyX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJcnJxLT5yYXNBZGRyZXNzLml0ZW0sCisJCQkJCXJycS0+cmFzQWRkcmVzcy5jb3VudCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChycnEtPm9wdGlvbnMgJiBlUmVnaXN0cmF0aW9uUmVxdWVzdF90aW1lVG9MaXZlKSB7CisJCURFQlVHUCgiaXBfY3RfcmFzOiBSUlEgVFRMID0gJXUgc2Vjb25kc1xuIiwgcnJxLT50aW1lVG9MaXZlKTsKKwkJaW5mby0+dGltZW91dCA9IHJycS0+dGltZVRvTGl2ZTsKKwl9IGVsc2UKKwkJaW5mby0+dGltZW91dCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfcmNmKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBSZWdpc3RyYXRpb25Db25maXJtICogcmNmKQoreworCXN0cnVjdCBpcF9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZjdC0+aGVscC5jdF9oMzIzX2luZm87CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgcmV0OworCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHA7CisKKwlERUJVR1AoImlwX2N0X3JhczogUkNGXG4iKTsKKworCWlmIChzZXRfc2lnX2FkZHJfaG9vaykgeworCQlyZXQgPSBzZXRfc2lnX2FkZHJfaG9vayhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCQlyY2YtPmNhbGxTaWduYWxBZGRyZXNzLml0ZW0sCisJCQkJCXJjZi0+Y2FsbFNpZ25hbEFkZHJlc3MuY291bnQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmNmLT5vcHRpb25zICYgZVJlZ2lzdHJhdGlvbkNvbmZpcm1fdGltZVRvTGl2ZSkgeworCQlERUJVR1AoImlwX2N0X3JhczogUkNGIFRUTCA9ICV1IHNlY29uZHNcbiIsIHJjZi0+dGltZVRvTGl2ZSk7CisJCWluZm8tPnRpbWVvdXQgPSByY2YtPnRpbWVUb0xpdmU7CisJfQorCisJaWYgKGluZm8tPnRpbWVvdXQgPiAwKSB7CisJCURFQlVHUAorCQkgICAgKCJpcF9jdF9yYXM6IHNldCBSQVMgY29ubmVjdGlvbiB0aW1lb3V0IHRvICV1IHNlY29uZHNcbiIsCisJCSAgICAgaW5mby0+dGltZW91dCk7CisJCWlwX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBOVUxMLCBpbmZvLT50aW1lb3V0ICogSFopOworCisJCS8qIFNldCBleHBlY3QgdGltZW91dCAqLworCQlyZWFkX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKKwkJZXhwID0gZmluZF9leHBlY3QoY3QsIGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QuaXAsCisJCQkJICBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJCWlmIChleHApIHsKKwkJCURFQlVHUCgiaXBfY3RfcmFzOiBzZXQgUS45MzEgZXhwZWN0ICIKKwkJCSAgICAgICAiKCV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1KSAiCisJCQkgICAgICAgInRpbWVvdXQgdG8gJXUgc2Vjb25kc1xuIiwKKwkJCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuc3JjLmlwKSwKKwkJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0KSwKKwkJCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuZHN0LmlwKSwKKwkJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0KSwKKwkJCSAgICAgICBpbmZvLT50aW1lb3V0KTsKKwkJCXNldF9leHBlY3RfdGltZW91dChleHAsIGluZm8tPnRpbWVvdXQpOworCQl9CisJCXJlYWRfdW5sb2NrX2JoKCZpcF9jb25udHJhY2tfbG9jayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX3VycShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVW5yZWdpc3RyYXRpb25SZXF1ZXN0ICogdXJxKQoreworCXN0cnVjdCBpcF9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZjdC0+aGVscC5jdF9oMzIzX2luZm87CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgcmV0OworCisJREVCVUdQKCJpcF9jdF9yYXM6IFVSUVxuIik7CisKKwlpZiAoc2V0X3NpZ19hZGRyX2hvb2spIHsKKwkJcmV0ID0gc2V0X3NpZ19hZGRyX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJdXJxLT5jYWxsU2lnbmFsQWRkcmVzcy5pdGVtLAorCQkJCQl1cnEtPmNhbGxTaWduYWxBZGRyZXNzLmNvdW50KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ2xlYXIgb2xkIGV4cGVjdCAqLworCWlwX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMoY3QpOworCWluZm8tPnNpZ19wb3J0W2Rpcl0gPSAwOworCWluZm8tPnNpZ19wb3J0WyFkaXJdID0gMDsKKworCS8qIEdpdmUgaXQgMzAgc2Vjb25kcyBmb3IgVUNGIG9yIFVSSiAqLworCWlwX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBOVUxMLCAzMCAqIEhaKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19hcnEoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIEFkbWlzc2lvblJlcXVlc3QgKiBhcnEpCit7CisJc3RydWN0IGlwX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJmN0LT5oZWxwLmN0X2gzMjNfaW5mbzsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVfaW50MzJfdCBpcDsKKwl1X2ludDE2X3QgcG9ydDsKKworCURFQlVHUCgiaXBfY3RfcmFzOiBBUlFcbiIpOworCisJaWYgKChhcnEtPm9wdGlvbnMgJiBlQWRtaXNzaW9uUmVxdWVzdF9kZXN0Q2FsbFNpZ25hbEFkZHJlc3MpICYmCisJICAgIGdldF9oMjI1X2FkZHIoKmRhdGEsICZhcnEtPmRlc3RDYWxsU2lnbmFsQWRkcmVzcywgJmlwLCAmcG9ydCkgJiYKKwkgICAgaXAgPT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCAmJgorCSAgICBwb3J0ID09IGluZm8tPnNpZ19wb3J0W2Rpcl0gJiYgc2V0X2gyMjVfYWRkcl9ob29rKSB7CisJCS8qIEFuc3dlcmluZyBBUlEgKi8KKwkJcmV0dXJuIHNldF9oMjI1X2FkZHJfaG9vayhwc2tiLCBkYXRhLCAwLAorCQkJCQkgICZhcnEtPmRlc3RDYWxsU2lnbmFsQWRkcmVzcywKKwkJCQkJICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCwKKwkJCQkJICBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJfQorCisJaWYgKChhcnEtPm9wdGlvbnMgJiBlQWRtaXNzaW9uUmVxdWVzdF9zcmNDYWxsU2lnbmFsQWRkcmVzcykgJiYKKwkgICAgZ2V0X2gyMjVfYWRkcigqZGF0YSwgJmFycS0+c3JjQ2FsbFNpZ25hbEFkZHJlc3MsICZpcCwgJnBvcnQpICYmCisJICAgIGlwID09IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXAgJiYgc2V0X2gyMjVfYWRkcl9ob29rKSB7CisJCS8qIENhbGxpbmcgQVJRICovCisJCXJldHVybiBzZXRfaDIyNV9hZGRyX2hvb2socHNrYiwgZGF0YSwgMCwKKwkJCQkJICAmYXJxLT5zcmNDYWxsU2lnbmFsQWRkcmVzcywKKwkJCQkJICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCwKKwkJCQkJICBwb3J0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfYWNmKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBBZG1pc3Npb25Db25maXJtICogYWNmKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldCA9IDA7CisJdV9pbnQzMl90IGlwOworCXVfaW50MTZfdCBwb3J0OworCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHA7CisKKwlERUJVR1AoImlwX2N0X3JhczogQUNGXG4iKTsKKworCWlmICghZ2V0X2gyMjVfYWRkcigqZGF0YSwgJmFjZi0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLCAmaXAsICZwb3J0KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXAgPT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLmRzdC5pcCkgewkvKiBBbnN3ZXJpbmcgQUNGICovCisJCWlmIChzZXRfc2lnX2FkZHJfaG9vaykKKwkJCXJldHVybiBzZXRfc2lnX2FkZHJfaG9vayhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCQkJICZhY2YtPmRlc3RDYWxsU2lnbmFsQWRkcmVzcywKKwkJCQkJCSAxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTmVlZCBuZXcgZXhwZWN0ICovCisJaWYgKChleHAgPSBpcF9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCWV4cC0+dHVwbGUuc3JjLmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXA7CisJZXhwLT50dXBsZS5zcmMudS50Y3AucG9ydCA9IDA7CisJZXhwLT50dXBsZS5kc3QuaXAgPSBpcDsKKwlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMocG9ydCk7CisJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKwlleHAtPm1hc2suc3JjLmlwID0gMHhGRkZGRkZGRjsKKwlleHAtPm1hc2suc3JjLnUudGNwLnBvcnQgPSAwOworCWV4cC0+bWFzay5kc3QuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IDB4RkZGRjsKKwlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKKwlleHAtPmZsYWdzID0gSVBfQ1RfRVhQRUNUX1BFUk1BTkVOVDsKKwlleHAtPmV4cGVjdGZuID0gaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0OworCisJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKKwkJREVCVUdQKCJpcF9jdF9yYXM6IGV4cGVjdCBRLjkzMSAiCisJCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuc3JjLmlwKSwKKwkJICAgICAgIG50b2hzKGV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQpLAorCQkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLmRzdC5pcCksCisJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0KSk7CisJfSBlbHNlCisJCXJldCA9IC0xOworCisJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2xycShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgTG9jYXRpb25SZXF1ZXN0ICogbHJxKQoreworCURFQlVHUCgiaXBfY3RfcmFzOiBMUlFcbiIpOworCisJaWYgKHNldF9yYXNfYWRkcl9ob29rKQorCQlyZXR1cm4gc2V0X3Jhc19hZGRyX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJICZscnEtPnJlcGx5QWRkcmVzcywgMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2xjZihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgTG9jYXRpb25Db25maXJtICogbGNmKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldCA9IDA7CisJdV9pbnQzMl90IGlwOworCXVfaW50MTZfdCBwb3J0OworCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAgPSBOVUxMOworCisJREVCVUdQKCJpcF9jdF9yYXM6IExDRlxuIik7CisKKwlpZiAoIWdldF9oMjI1X2FkZHIoKmRhdGEsICZsY2YtPmNhbGxTaWduYWxBZGRyZXNzLCAmaXAsICZwb3J0KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBOZWVkIG5ldyBleHBlY3QgZm9yIGNhbGwgc2lnbmFsICovCisJaWYgKChleHAgPSBpcF9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCWV4cC0+dHVwbGUuc3JjLmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuaXA7CisJZXhwLT50dXBsZS5zcmMudS50Y3AucG9ydCA9IDA7CisJZXhwLT50dXBsZS5kc3QuaXAgPSBpcDsKKwlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMocG9ydCk7CisJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKKwlleHAtPm1hc2suc3JjLmlwID0gMHhGRkZGRkZGRjsKKwlleHAtPm1hc2suc3JjLnUudGNwLnBvcnQgPSAwOworCWV4cC0+bWFzay5kc3QuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IDB4RkZGRjsKKwlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKKwlleHAtPmZsYWdzID0gSVBfQ1RfRVhQRUNUX1BFUk1BTkVOVDsKKwlleHAtPmV4cGVjdGZuID0gaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0OworCisJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKKwkJREVCVUdQKCJpcF9jdF9yYXM6IGV4cGVjdCBRLjkzMSAiCisJCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuc3JjLmlwKSwKKwkJICAgICAgIG50b2hzKGV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQpLAorCQkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLmRzdC5pcCksCisJCSAgICAgICBudG9ocyhleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0KSk7CisJfSBlbHNlCisJCXJldCA9IC0xOworCisJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKworCS8qIElnbm9yZSByYXNBZGRyZXNzICovCisKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19pcnIoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIEluZm9SZXF1ZXN0UmVzcG9uc2UgKiBpcnIpCit7CisJaW50IHJldDsKKworCURFQlVHUCgiaXBfY3RfcmFzOiBJUlJcbiIpOworCisJaWYgKHNldF9yYXNfYWRkcl9ob29rKSB7CisJCXJldCA9IHNldF9yYXNfYWRkcl9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJCSZpcnItPnJhc0FkZHJlc3MsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc2V0X3NpZ19hZGRyX2hvb2spIHsKKwkJcmV0ID0gc2V0X3NpZ19hZGRyX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJaXJyLT5jYWxsU2lnbmFsQWRkcmVzcy5pdGVtLAorCQkJCQlpcnItPmNhbGxTaWduYWxBZGRyZXNzLmNvdW50KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX3JhcyhzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgUmFzTWVzc2FnZSAqIHJhcykKK3sKKwlzd2l0Y2ggKHJhcy0+Y2hvaWNlKSB7CisJY2FzZSBlUmFzTWVzc2FnZV9nYXRla2VlcGVyUmVxdWVzdDoKKwkJcmV0dXJuIHByb2Nlc3NfZ3JxKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgJnJhcy0+Z2F0ZWtlZXBlclJlcXVlc3QpOworCWNhc2UgZVJhc01lc3NhZ2VfZ2F0ZWtlZXBlckNvbmZpcm06CisJCXJldHVybiBwcm9jZXNzX2djZihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZyYXMtPmdhdGVrZWVwZXJDb25maXJtKTsKKwljYXNlIGVSYXNNZXNzYWdlX3JlZ2lzdHJhdGlvblJlcXVlc3Q6CisJCXJldHVybiBwcm9jZXNzX3JycShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZyYXMtPnJlZ2lzdHJhdGlvblJlcXVlc3QpOworCWNhc2UgZVJhc01lc3NhZ2VfcmVnaXN0cmF0aW9uQ29uZmlybToKKwkJcmV0dXJuIHByb2Nlc3NfcmNmKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgJnJhcy0+cmVnaXN0cmF0aW9uQ29uZmlybSk7CisJY2FzZSBlUmFzTWVzc2FnZV91bnJlZ2lzdHJhdGlvblJlcXVlc3Q6CisJCXJldHVybiBwcm9jZXNzX3VycShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZyYXMtPnVucmVnaXN0cmF0aW9uUmVxdWVzdCk7CisJY2FzZSBlUmFzTWVzc2FnZV9hZG1pc3Npb25SZXF1ZXN0OgorCQlyZXR1cm4gcHJvY2Vzc19hcnEocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAmcmFzLT5hZG1pc3Npb25SZXF1ZXN0KTsKKwljYXNlIGVSYXNNZXNzYWdlX2FkbWlzc2lvbkNvbmZpcm06CisJCXJldHVybiBwcm9jZXNzX2FjZihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZyYXMtPmFkbWlzc2lvbkNvbmZpcm0pOworCWNhc2UgZVJhc01lc3NhZ2VfbG9jYXRpb25SZXF1ZXN0OgorCQlyZXR1cm4gcHJvY2Vzc19scnEocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAmcmFzLT5sb2NhdGlvblJlcXVlc3QpOworCWNhc2UgZVJhc01lc3NhZ2VfbG9jYXRpb25Db25maXJtOgorCQlyZXR1cm4gcHJvY2Vzc19sY2YocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAmcmFzLT5sb2NhdGlvbkNvbmZpcm0pOworCWNhc2UgZVJhc01lc3NhZ2VfaW5mb1JlcXVlc3RSZXNwb25zZToKKwkJcmV0dXJuIHByb2Nlc3NfaXJyKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgJnJhcy0+aW5mb1JlcXVlc3RSZXNwb25zZSk7CisJZGVmYXVsdDoKKwkJREVCVUdQKCJpcF9jdF9yYXM6IFJBUyBtZXNzYWdlICVkXG4iLCByYXMtPmNob2ljZSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXN0YXRpYyBSYXNNZXNzYWdlIHJhczsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWludCBkYXRhbGVuID0gMDsKKwlpbnQgcmV0OworCisJREVCVUdQKCJpcF9jdF9yYXM6IHNrYmxlbiA9ICV1XG4iLCAoKnBza2IpLT5sZW4pOworCisJc3Bpbl9sb2NrX2JoKCZpcF9oMzIzX2xvY2spOworCisJLyogR2V0IFVEUCBkYXRhICovCisJZGF0YSA9IGdldF91ZHBfZGF0YShwc2tiLCAmZGF0YWxlbik7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJZ290byBhY2NlcHQ7CisJREVCVUdQKCJpcF9jdF9yYXM6IFJBUyBtZXNzYWdlICV1LiV1LiV1LiV1LT4ldS4ldS4ldS4ldSwgbGVuPSVkXG4iLAorCSAgICAgICBOSVBRVUFEKCgqcHNrYiktPm5oLmlwaC0+c2FkZHIpLAorCSAgICAgICBOSVBRVUFEKCgqcHNrYiktPm5oLmlwaC0+ZGFkZHIpLCBkYXRhbGVuKTsKKworCS8qIERlY29kZSBSQVMgbWVzc2FnZSAqLworCXJldCA9IERlY29kZVJhc01lc3NhZ2UoZGF0YSwgZGF0YWxlbiwgJnJhcyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50aygiaXBfY3RfcmFzOiBkZWNvZGluZyBlcnJvcjogJXNcbiIsCisJCQkgICAgICAgcmV0ID09IEgzMjNfRVJST1JfQk9VTkQgPworCQkJICAgICAgICJvdXQgb2YgYm91bmQiIDogIm91dCBvZiByYW5nZSIpOworCQlnb3RvIGFjY2VwdDsKKwl9CisKKwkvKiBQcm9jZXNzIFJBUyBtZXNzYWdlICovCisJaWYgKHByb2Nlc3NfcmFzKHBza2IsIGN0LCBjdGluZm8sICZkYXRhLCAmcmFzKSA8IDApCisJCWdvdG8gZHJvcDsKKworICAgICAgYWNjZXB0OgorCXNwaW5fdW5sb2NrX2JoKCZpcF9oMzIzX2xvY2spOworCXJldHVybiBORl9BQ0NFUFQ7CisKKyAgICAgIGRyb3A6CisJc3Bpbl91bmxvY2tfYmgoJmlwX2gzMjNfbG9jayk7CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKCJpcF9jdF9yYXM6IHBhY2tldCBkcm9wcGVkXG4iKTsKKwlyZXR1cm4gTkZfRFJPUDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGlwX2Nvbm50cmFja19oZWxwZXIgaXBfY29ubnRyYWNrX2hlbHBlcl9yYXMgPSB7CisJLm5hbWUgPSAiUkFTIiwKKwkubWUgPSBUSElTX01PRFVMRSwKKwkubWF4X2V4cGVjdGVkID0gMzIsCisJLnRpbWVvdXQgPSAyNDAsCisJLnR1cGxlID0gey5zcmMgPSB7LnUgPSB7X19jb25zdGFudF9odG9ucyhSQVNfUE9SVCl9fSwKKwkJICAuZHN0ID0gey5wcm90b251bSA9IElQUFJPVE9fVURQfX0sCisJLm1hc2sgPSB7LnNyYyA9IHsudSA9IHsweEZGRkV9fSwKKwkJIC5kc3QgPSB7LnByb3RvbnVtID0gMHhGRn19LAorCS5oZWxwID0gcmFzX2hlbHAsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGlwX2Nvbm50cmFja19yYXNfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCQkgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpCit7CisJd3JpdGVfbG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOworCW5ldy0+aGVscGVyID0gJmlwX2Nvbm50cmFja19oZWxwZXJfcmFzOworCXdyaXRlX3VubG9ja19iaCgmaXBfY29ubnRyYWNrX2xvY2spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5vdCBfX2V4aXQgLSBjYWxsZWQgZnJvbSBpbml0KCkgKi8KK3N0YXRpYyB2b2lkIGZpbmkodm9pZCkKK3sKKwlpcF9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJmlwX2Nvbm50cmFja19oZWxwZXJfcmFzKTsKKwlpcF9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJmlwX2Nvbm50cmFja19oZWxwZXJfcTkzMSk7CisJa2ZyZWUoaDMyM19idWZmZXIpOworCURFQlVHUCgiaXBfY3RfaDMyMzogZmluaVxuIik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwloMzIzX2J1ZmZlciA9IGttYWxsb2MoNjU1MzYsIEdGUF9LRVJORUwpOworCWlmICghaDMyM19idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCWlmICgocmV0ID0gaXBfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmaXBfY29ubnRyYWNrX2hlbHBlcl9xOTMxKSkgfHwKKwkgICAgKHJldCA9IGlwX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmlwX2Nvbm50cmFja19oZWxwZXJfcmFzKSkpIHsKKwkJZmluaSgpOworCQlyZXR1cm4gcmV0OworCX0KKworCURFQlVHUCgiaXBfY3RfaDMyMzogaW5pdCBzdWNjZXNzXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCittb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOworCitFWFBPUlRfU1lNQk9MKGdldF9oMjQ1X2FkZHIpOworRVhQT1JUX1NZTUJPTChnZXRfaDIyNV9hZGRyKTsKK0VYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KTsKK0VYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KTsKK0VYUE9SVF9TWU1CT0woc2V0X2gyNDVfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0woc2V0X2gyMjVfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0woc2V0X3NpZ19hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTChzZXRfcmFzX2FkZHJfaG9vayk7CitFWFBPUlRfU1lNQk9MKG5hdF9ydHBfcnRjcF9ob29rKTsKK0VYUE9SVF9TWU1CT0wobmF0X3QxMjBfaG9vayk7CitFWFBPUlRfU1lNQk9MKG5hdF9oMjQ1X2hvb2spOworRVhQT1JUX1NZTUJPTChuYXRfcTkzMV9ob29rKTsKKworTU9EVUxFX0FVVEhPUigiSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE1MjUxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmMKQEAgLTAsMCArMSw4NzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5jIC0gQkVSIGFuZCBQRVIgZGVjb2RpbmcgbGlicmFyeSBmb3IgSC4zMjMKKyAqIAkJCSAgICAgIAkgICAgIGNvbm50cmFjay9OQVQgbW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBieSBKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkBob3RtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIFNlZSBpcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIGZvciBkZXRhaWxzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisjaW5jbHVkZSAiaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaCIKKworLyogVHJhY2UgRmxhZyAqLworI2lmbmRlZiBIMzIzX1RSQUNFCisjZGVmaW5lIEgzMjNfVFJBQ0UgMAorI2VuZGlmCisKKyNpZiBIMzIzX1RSQUNFCisjZGVmaW5lIFRBQl9TSVpFIDQKKyNkZWZpbmUgSUZUSEVOKGNvbmQsIGFjdCkgaWYoY29uZCl7YWN0O30KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIFBSSU5UIHByaW50aworI2Vsc2UKKyNkZWZpbmUgUFJJTlQgcHJpbnRmCisjZW5kaWYKKyNkZWZpbmUgRk5BTUUobmFtZSkgbmFtZSwKKyNlbHNlCisjZGVmaW5lIElGVEhFTihjb25kLCBhY3QpCisjZGVmaW5lIFBSSU5UKGZtdCwgYXJncy4uLikKKyNkZWZpbmUgRk5BTUUobmFtZSkKKyNlbmRpZgorCisvKiBBU04uMSBUeXBlcyAqLworI2RlZmluZSBOVUwgMAorI2RlZmluZSBCT09MIDEKKyNkZWZpbmUgT0lEIDIKKyNkZWZpbmUgSU5UIDMKKyNkZWZpbmUgRU5VTSA0CisjZGVmaW5lIEJJVFNUUiA1CisjZGVmaW5lIE5VTVNUUiA2CisjZGVmaW5lIE5VTURHVCA2CisjZGVmaW5lIFRCQ0RTVFIgNgorI2RlZmluZSBPQ1RTVFIgNworI2RlZmluZSBQUlRTVFIgNworI2RlZmluZSBJQTVTVFIgNworI2RlZmluZSBHRU5TVFIgNworI2RlZmluZSBCTVBTVFIgOAorI2RlZmluZSBTRVEgOQorI2RlZmluZSBTRVQgOQorI2RlZmluZSBTRVFPRiAxMAorI2RlZmluZSBTRVRPRiAxMAorI2RlZmluZSBDSE9JQ0UgMTEKKworLyogQ29uc3RyYWludCBUeXBlcyAqLworI2RlZmluZSBGSVhEIDAKKy8qICNkZWZpbmUgQklUUyAxLTggKi8KKyNkZWZpbmUgQllURSA5CisjZGVmaW5lIFdPUkQgMTAKKyNkZWZpbmUgQ09OUyAxMQorI2RlZmluZSBTRU1JIDEyCisjZGVmaW5lIFVOQ08gMTMKKworLyogQVNOLjEgVHlwZSBBdHRyaWJ1dGVzICovCisjZGVmaW5lIFNLSVAgMAorI2RlZmluZSBTVE9QIDEKKyNkZWZpbmUgREVDT0RFIDIKKyNkZWZpbmUgRVhUIDQKKyNkZWZpbmUgT1BFTiA4CisjZGVmaW5lIE9QVCAxNgorCisKKy8qIEFTTi4xIEZpZWxkIFN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgZmllbGRfdCB7CisjaWYgSDMyM19UUkFDRQorCWNoYXIgKm5hbWU7CisjZW5kaWYKKwl1bnNpZ25lZCBjaGFyIHR5cGU7CisJdW5zaWduZWQgY2hhciBzejsKKwl1bnNpZ25lZCBjaGFyIGxiOworCXVuc2lnbmVkIGNoYXIgdWI7CisJdW5zaWduZWQgc2hvcnQgYXR0cjsKKwl1bnNpZ25lZCBzaG9ydCBvZmZzZXQ7CisJc3RydWN0IGZpZWxkX3QgKmZpZWxkczsKK30gZmllbGRfdDsKKworLyogQml0IFN0cmVhbSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpiZWc7CisJdW5zaWduZWQgY2hhciAqZW5kOworCXVuc2lnbmVkIGNoYXIgKmN1cjsKKwl1bnNpZ25lZCBiaXQ7Cit9IGJpdHN0cl90OworCisvKiBUb29sIEZ1bmN0aW9ucyAqLworI2RlZmluZSBJTkNfQklUKGJzKSBpZigoKyticy0+Yml0KT43KXticy0+Y3VyKys7YnMtPmJpdD0wO30KKyNkZWZpbmUgSU5DX0JJVFMoYnMsYikgaWYoKGJzLT5iaXQrPWIpPjcpe2JzLT5jdXIrPWJzLT5iaXQ+PjM7YnMtPmJpdCY9Nzt9CisjZGVmaW5lIEJZVEVfQUxJR04oYnMpIGlmKGJzLT5iaXQpe2JzLT5jdXIrKzticy0+Yml0PTA7fQorI2RlZmluZSBDSEVDS19CT1VORChicyxuKSBpZihicy0+Y3VyKyhuKT5icy0+ZW5kKXJldHVybihIMzIzX0VSUk9SX0JPVU5EKQorc3RhdGljIHVuc2lnbmVkIGdldF9sZW4oYml0c3RyX3QgKiBicyk7CitzdGF0aWMgdW5zaWduZWQgZ2V0X2JpdChiaXRzdHJfdCAqIGJzKTsKK3N0YXRpYyB1bnNpZ25lZCBnZXRfYml0cyhiaXRzdHJfdCAqIGJzLCB1bnNpZ25lZCBiKTsKK3N0YXRpYyB1bnNpZ25lZCBnZXRfYml0bWFwKGJpdHN0cl90ICogYnMsIHVuc2lnbmVkIGIpOworc3RhdGljIHVuc2lnbmVkIGdldF91aW50KGJpdHN0cl90ICogYnMsIGludCBiKTsKKworLyogRGVjb2RlciBGdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX251bChiaXRzdHJfdCAqIGJzLCBmaWVsZF90ICogZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKTsKK3N0YXRpYyBpbnQgZGVjb2RlX2Jvb2woYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7CitzdGF0aWMgaW50IGRlY29kZV9vaWQoYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7CitzdGF0aWMgaW50IGRlY29kZV9pbnQoYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7CitzdGF0aWMgaW50IGRlY29kZV9lbnVtKGJpdHN0cl90ICogYnMsIGZpZWxkX3QgKiBmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpOworc3RhdGljIGludCBkZWNvZGVfYml0c3RyKGJpdHN0cl90ICogYnMsIGZpZWxkX3QgKiBmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpOworc3RhdGljIGludCBkZWNvZGVfbnVtc3RyKGJpdHN0cl90ICogYnMsIGZpZWxkX3QgKiBmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpOworc3RhdGljIGludCBkZWNvZGVfb2N0c3RyKGJpdHN0cl90ICogYnMsIGZpZWxkX3QgKiBmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpOworc3RhdGljIGludCBkZWNvZGVfYm1wc3RyKGJpdHN0cl90ICogYnMsIGZpZWxkX3QgKiBmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpOworc3RhdGljIGludCBkZWNvZGVfc2VxKGJpdHN0cl90ICogYnMsIGZpZWxkX3QgKiBmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpOworc3RhdGljIGludCBkZWNvZGVfc2Vxb2YoYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7CitzdGF0aWMgaW50IGRlY29kZV9jaG9pY2UoYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCk7CisKKy8qIERlY29kZXIgRnVuY3Rpb25zIFZlY3RvciAqLwordHlwZWRlZiBpbnQgKCpkZWNvZGVyX3QpIChiaXRzdHJfdCAqLCBmaWVsZF90ICosIGNoYXIgKiwgaW50KTsKK3N0YXRpYyBkZWNvZGVyX3QgRGVjb2RlcnNbXSA9IHsKKwlkZWNvZGVfbnVsLAorCWRlY29kZV9ib29sLAorCWRlY29kZV9vaWQsCisJZGVjb2RlX2ludCwKKwlkZWNvZGVfZW51bSwKKwlkZWNvZGVfYml0c3RyLAorCWRlY29kZV9udW1zdHIsCisJZGVjb2RlX29jdHN0ciwKKwlkZWNvZGVfYm1wc3RyLAorCWRlY29kZV9zZXEsCisJZGVjb2RlX3NlcW9mLAorCWRlY29kZV9jaG9pY2UsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSC4zMjMgVHlwZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5jIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFzc3VtZSBicyBpcyBhbGlnbmVkICYmIHYgPCAxNjM4NCAqLwordW5zaWduZWQgZ2V0X2xlbihiaXRzdHJfdCAqIGJzKQoreworCXVuc2lnbmVkIHY7CisKKwl2ID0gKmJzLT5jdXIrKzsKKworCWlmICh2ICYgMHg4MCkgeworCQl2ICY9IDB4M2Y7CisJCXYgPDw9IDg7CisJCXYgKz0gKmJzLT5jdXIrKzsKKwl9CisKKwlyZXR1cm4gdjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1bnNpZ25lZCBnZXRfYml0KGJpdHN0cl90ICogYnMpCit7CisJdW5zaWduZWQgYiA9ICgqYnMtPmN1cikgJiAoMHg4MCA+PiBicy0+Yml0KTsKKworCUlOQ19CSVQoYnMpOworCisJcmV0dXJuIGI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQXNzdW1lIGIgPD0gOCAqLwordW5zaWduZWQgZ2V0X2JpdHMoYml0c3RyX3QgKiBicywgdW5zaWduZWQgYikKK3sKKwl1bnNpZ25lZCB2LCBsOworCisJdiA9ICgqYnMtPmN1cikgJiAoMHhmZlUgPj4gYnMtPmJpdCk7CisJbCA9IGIgKyBicy0+Yml0OworCisJaWYgKGwgPCA4KSB7CisJCXYgPj49IDggLSBsOworCQlicy0+Yml0ID0gbDsKKwl9IGVsc2UgaWYgKGwgPT0gOCkgeworCQlicy0+Y3VyKys7CisJCWJzLT5iaXQgPSAwOworCX0gZWxzZSB7CQkvKiBsID4gOCAqLworCisJCXYgPDw9IDg7CisJCXYgKz0gKigrK2JzLT5jdXIpOworCQl2ID4+PSAxNiAtIGw7CisJCWJzLT5iaXQgPSBsIC0gODsKKwl9CisKKwlyZXR1cm4gdjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBc3N1bWUgYiA8PSAzMiAqLwordW5zaWduZWQgZ2V0X2JpdG1hcChiaXRzdHJfdCAqIGJzLCB1bnNpZ25lZCBiKQoreworCXVuc2lnbmVkIHYsIGwsIHNoaWZ0LCBieXRlczsKKworCWlmICghYikKKwkJcmV0dXJuIDA7CisKKwlsID0gYnMtPmJpdCArIGI7CisKKwlpZiAobCA8IDgpIHsKKwkJdiA9ICh1bnNpZ25lZCkgKCpicy0+Y3VyKSA8PCAoYnMtPmJpdCArIDI0KTsKKwkJYnMtPmJpdCA9IGw7CisJfSBlbHNlIGlmIChsID09IDgpIHsKKwkJdiA9ICh1bnNpZ25lZCkgKCpicy0+Y3VyKyspIDw8IChicy0+Yml0ICsgMjQpOworCQlicy0+Yml0ID0gMDsKKwl9IGVsc2UgeworCQlmb3IgKGJ5dGVzID0gbCA+PiAzLCBzaGlmdCA9IDI0LCB2ID0gMDsgYnl0ZXM7CisJCSAgICAgYnl0ZXMtLSwgc2hpZnQgLT0gOCkKKwkJCXYgfD0gKHVuc2lnbmVkKSAoKmJzLT5jdXIrKykgPDwgc2hpZnQ7CisKKwkJaWYgKGwgPCAzMikgeworCQkJdiB8PSAodW5zaWduZWQpICgqYnMtPmN1cikgPDwgc2hpZnQ7CisJCQl2IDw8PSBicy0+Yml0OworCQl9IGVsc2UgaWYgKGwgPiAzMikgeworCQkJdiA8PD0gYnMtPmJpdDsKKwkJCXYgfD0gKCpicy0+Y3VyKSA+PiAoOCAtIGJzLT5iaXQpOworCQl9CisKKwkJYnMtPmJpdCA9IGwgJiAweDc7CisJfQorCisJdiAmPSAweGZmZmZmZmZmIDw8ICgzMiAtIGIpOworCisJcmV0dXJuIHY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBBc3N1bWUgYnMgaXMgYWxpZ25lZCBhbmQgc2l6ZW9mKHVuc2lnbmVkIGludCkgPT0gNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1bnNpZ25lZCBnZXRfdWludChiaXRzdHJfdCAqIGJzLCBpbnQgYikKK3sKKwl1bnNpZ25lZCB2ID0gMDsKKworCXN3aXRjaCAoYikgeworCWNhc2UgNDoKKwkJdiB8PSAqYnMtPmN1cisrOworCQl2IDw8PSA4OworCWNhc2UgMzoKKwkJdiB8PSAqYnMtPmN1cisrOworCQl2IDw8PSA4OworCWNhc2UgMjoKKwkJdiB8PSAqYnMtPmN1cisrOworCQl2IDw8PSA4OworCWNhc2UgMToKKwkJdiB8PSAqYnMtPmN1cisrOworCQlicmVhazsKKwl9CisJcmV0dXJuIHY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRlY29kZV9udWwoYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCkKK3sKKwlQUklOVCgiJSoucyVzXG4iLCBsZXZlbCAqIFRBQl9TSVpFLCAiICIsIGYtPm5hbWUpOworCisJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZGVjb2RlX2Jvb2woYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCkKK3sKKwlQUklOVCgiJSoucyVzXG4iLCBsZXZlbCAqIFRBQl9TSVpFLCAiICIsIGYtPm5hbWUpOworCisJSU5DX0JJVChicyk7CisKKwlDSEVDS19CT1VORChicywgMCk7CisJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZGVjb2RlX29pZChiaXRzdHJfdCAqIGJzLCBmaWVsZF90ICogZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKQoreworCWludCBsZW47CisKKwlQUklOVCgiJSoucyVzXG4iLCBsZXZlbCAqIFRBQl9TSVpFLCAiICIsIGYtPm5hbWUpOworCisJQllURV9BTElHTihicyk7CisJQ0hFQ0tfQk9VTkQoYnMsIDEpOworCWxlbiA9ICpicy0+Y3VyKys7CisJYnMtPmN1ciArPSBsZW47CisKKwlDSEVDS19CT1VORChicywgMCk7CisJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZGVjb2RlX2ludChiaXRzdHJfdCAqIGJzLCBmaWVsZF90ICogZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGxlbjsKKworCVBSSU5UKCIlKi5zJXMiLCBsZXZlbCAqIFRBQl9TSVpFLCAiICIsIGYtPm5hbWUpOworCisJc3dpdGNoIChmLT5zeikgeworCWNhc2UgQllURToJCS8qIFJhbmdlID09IDI1NiAqLworCQlCWVRFX0FMSUdOKGJzKTsKKwkJYnMtPmN1cisrOworCQlicmVhazsKKwljYXNlIFdPUkQ6CQkvKiAyNTcgPD0gUmFuZ2UgPD0gNjRLICovCisJCUJZVEVfQUxJR04oYnMpOworCQlicy0+Y3VyICs9IDI7CisJCWJyZWFrOworCWNhc2UgQ09OUzoJCS8qIDY0SyA8IFJhbmdlIDwgNEcgKi8KKwkJbGVuID0gZ2V0X2JpdHMoYnMsIDIpICsgMTsKKwkJQllURV9BTElHTihicyk7CisJCWlmIChiYXNlICYmIChmLT5hdHRyICYgREVDT0RFKSkgewkvKiB0aW1lVG9MaXZlICovCisJCQl1bnNpZ25lZCB2ID0gZ2V0X3VpbnQoYnMsIGxlbikgKyBmLT5sYjsKKwkJCVBSSU5UKCIgPSAldSIsIHYpOworCQkJKigodW5zaWduZWQgKikgKGJhc2UgKyBmLT5vZmZzZXQpKSA9IHY7CisJCX0KKwkJYnMtPmN1ciArPSBsZW47CisJCWJyZWFrOworCWNhc2UgVU5DTzoKKwkJQllURV9BTElHTihicyk7CisJCUNIRUNLX0JPVU5EKGJzLCAyKTsKKwkJbGVuID0gZ2V0X2xlbihicyk7CisJCWJzLT5jdXIgKz0gbGVuOworCQlicmVhazsKKwlkZWZhdWx0OgkJLyogMiA8PSBSYW5nZSA8PSAyNTUgKi8KKwkJSU5DX0JJVFMoYnMsIGYtPnN6KTsKKwkJYnJlYWs7CisJfQorCisJUFJJTlQoIlxuIik7CisKKwlDSEVDS19CT1VORChicywgMCk7CisJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZGVjb2RlX2VudW0oYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCkKK3sKKwlQUklOVCgiJSoucyVzXG4iLCBsZXZlbCAqIFRBQl9TSVpFLCAiICIsIGYtPm5hbWUpOworCisJaWYgKChmLT5hdHRyICYgRVhUKSAmJiBnZXRfYml0KGJzKSkgeworCQlJTkNfQklUUyhicywgNyk7CisJfSBlbHNlIHsKKwkJSU5DX0JJVFMoYnMsIGYtPnN6KTsKKwl9CisKKwlDSEVDS19CT1VORChicywgMCk7CisJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZGVjb2RlX2JpdHN0cihiaXRzdHJfdCAqIGJzLCBmaWVsZF90ICogZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGxlbjsKKworCVBSSU5UKCIlKi5zJXNcbiIsIGxldmVsICogVEFCX1NJWkUsICIgIiwgZi0+bmFtZSk7CisKKwlCWVRFX0FMSUdOKGJzKTsKKwlzd2l0Y2ggKGYtPnN6KSB7CisJY2FzZSBGSVhEOgkJLyogZml4ZWQgbGVuZ3RoID4gMTYgKi8KKwkJbGVuID0gZi0+bGI7CisJCWJyZWFrOworCWNhc2UgV09SRDoJCS8qIDItYnl0ZSBsZW5ndGggKi8KKwkJQ0hFQ0tfQk9VTkQoYnMsIDIpOworCQlsZW4gPSAoKmJzLT5jdXIrKykgPDwgODsKKwkJbGVuICs9ICgqYnMtPmN1cisrKSArIGYtPmxiOworCQlicmVhazsKKwljYXNlIFNFTUk6CisJCUNIRUNLX0JPVU5EKGJzLCAyKTsKKwkJbGVuID0gZ2V0X2xlbihicyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxlbiA9IDA7CisJCWJyZWFrOworCX0KKworCWJzLT5jdXIgKz0gbGVuID4+IDM7CisJYnMtPmJpdCA9IGxlbiAmIDc7CisKKwlDSEVDS19CT1VORChicywgMCk7CisJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZGVjb2RlX251bXN0cihiaXRzdHJfdCAqIGJzLCBmaWVsZF90ICogZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGxlbjsKKworCVBSSU5UKCIlKi5zJXNcbiIsIGxldmVsICogVEFCX1NJWkUsICIgIiwgZi0+bmFtZSk7CisKKwkvKiAyIDw9IFJhbmdlIDw9IDI1NSAqLworCWxlbiA9IGdldF9iaXRzKGJzLCBmLT5zeikgKyBmLT5sYjsKKworCUJZVEVfQUxJR04oYnMpOworCUlOQ19CSVRTKGJzLCAobGVuIDw8IDIpKTsKKworCUNIRUNLX0JPVU5EKGJzLCAwKTsKKwlyZXR1cm4gSDMyM19FUlJPUl9OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkZWNvZGVfb2N0c3RyKGJpdHN0cl90ICogYnMsIGZpZWxkX3QgKiBmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpCit7CisJdW5zaWduZWQgbGVuOworCisJUFJJTlQoIiUqLnMlcyIsIGxldmVsICogVEFCX1NJWkUsICIgIiwgZi0+bmFtZSk7CisKKwlzd2l0Y2ggKGYtPnN6KSB7CisJY2FzZSBGSVhEOgkJLyogUmFuZ2UgPT0gMSAqLworCQlpZiAoZi0+bGIgPiAyKSB7CisJCQlCWVRFX0FMSUdOKGJzKTsKKwkJCWlmIChiYXNlICYmIChmLT5hdHRyICYgREVDT0RFKSkgeworCQkJCS8qIFRoZSBJUCBBZGRyZXNzICovCisJCQkJSUZUSEVOKGYtPmxiID09IDQsCisJCQkJICAgICAgIFBSSU5UKCIgPSAlZC4lZC4lZC4lZDolZCIsCisJCQkJCSAgICAgYnMtPmN1clswXSwgYnMtPmN1clsxXSwKKwkJCQkJICAgICBicy0+Y3VyWzJdLCBicy0+Y3VyWzNdLAorCQkJCQkgICAgIGJzLT5jdXJbNF0gKiAyNTYgKyBicy0+Y3VyWzVdKSk7CisJCQkJKigodW5zaWduZWQgKikgKGJhc2UgKyBmLT5vZmZzZXQpKSA9CisJCQkJICAgIGJzLT5jdXIgLSBicy0+YnVmOworCQkJfQorCQl9CisJCWxlbiA9IGYtPmxiOworCQlicmVhazsKKwljYXNlIEJZVEU6CQkvKiBSYW5nZSA9PSAyNTYgKi8KKwkJQllURV9BTElHTihicyk7CisJCUNIRUNLX0JPVU5EKGJzLCAxKTsKKwkJbGVuID0gKCpicy0+Y3VyKyspICsgZi0+bGI7CisJCWJyZWFrOworCWNhc2UgU0VNSToKKwkJQllURV9BTElHTihicyk7CisJCUNIRUNLX0JPVU5EKGJzLCAyKTsKKwkJbGVuID0gZ2V0X2xlbihicykgKyBmLT5sYjsKKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8qIDIgPD0gUmFuZ2UgPD0gMjU1ICovCisJCWxlbiA9IGdldF9iaXRzKGJzLCBmLT5zeikgKyBmLT5sYjsKKwkJQllURV9BTElHTihicyk7CisJCWJyZWFrOworCX0KKworCWJzLT5jdXIgKz0gbGVuOworCisJUFJJTlQoIlxuIik7CisKKwlDSEVDS19CT1VORChicywgMCk7CisJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZGVjb2RlX2JtcHN0cihiaXRzdHJfdCAqIGJzLCBmaWVsZF90ICogZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGxlbjsKKworCVBSSU5UKCIlKi5zJXNcbiIsIGxldmVsICogVEFCX1NJWkUsICIgIiwgZi0+bmFtZSk7CisKKwlzd2l0Y2ggKGYtPnN6KSB7CisJY2FzZSBCWVRFOgkJLyogUmFuZ2UgPT0gMjU2ICovCisJCUJZVEVfQUxJR04oYnMpOworCQlDSEVDS19CT1VORChicywgMSk7CisJCWxlbiA9ICgqYnMtPmN1cisrKSArIGYtPmxiOworCQlicmVhazsKKwlkZWZhdWx0OgkJLyogMiA8PSBSYW5nZSA8PSAyNTUgKi8KKwkJbGVuID0gZ2V0X2JpdHMoYnMsIGYtPnN6KSArIGYtPmxiOworCQlCWVRFX0FMSUdOKGJzKTsKKwkJYnJlYWs7CisJfQorCisJYnMtPmN1ciArPSBsZW4gPDwgMTsKKworCUNIRUNLX0JPVU5EKGJzLCAwKTsKKwlyZXR1cm4gSDMyM19FUlJPUl9OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkZWNvZGVfc2VxKGJpdHN0cl90ICogYnMsIGZpZWxkX3QgKiBmLCBjaGFyICpiYXNlLCBpbnQgbGV2ZWwpCit7CisJdW5zaWduZWQgZXh0LCBibXAsIGksIG9wdCwgbGVuID0gMCwgYm1wMiwgYm1wMl9sZW47CisJaW50IGVycjsKKwlmaWVsZF90ICpzb247CisJdW5zaWduZWQgY2hhciAqYmVnID0gTlVMTDsKKworCVBSSU5UKCIlKi5zJXNcbiIsIGxldmVsICogVEFCX1NJWkUsICIgIiwgZi0+bmFtZSk7CisKKwkvKiBEZWNvZGU/ICovCisJYmFzZSA9IChiYXNlICYmIChmLT5hdHRyICYgREVDT0RFKSkgPyBiYXNlICsgZi0+b2Zmc2V0IDogTlVMTDsKKworCS8qIEV4dGVuc2libGU/ICovCisJZXh0ID0gKGYtPmF0dHIgJiBFWFQpID8gZ2V0X2JpdChicykgOiAwOworCisJLyogR2V0IGZpZWxkcyBiaXRtYXAgKi8KKwlibXAgPSBnZXRfYml0bWFwKGJzLCBmLT5zeik7CisJaWYgKGJhc2UpCisJCSoodW5zaWduZWQgKikgYmFzZSA9IGJtcDsKKworCS8qIERlY29kZSB0aGUgcm9vdCBjb21wb25lbnRzICovCisJZm9yIChpID0gb3B0ID0gMCwgc29uID0gZi0+ZmllbGRzOyBpIDwgZi0+bGI7IGkrKywgc29uKyspIHsKKwkJaWYgKHNvbi0+YXR0ciAmIFNUT1ApIHsKKwkJCVBSSU5UKCIlKi5zJXNcbiIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsICIgIiwKKwkJCSAgICAgIHNvbi0+bmFtZSk7CisJCQlyZXR1cm4gSDMyM19FUlJPUl9TVE9QOworCQl9CisKKwkJaWYgKHNvbi0+YXR0ciAmIE9QVCkgewkvKiBPcHRpb25hbCBjb21wb25lbnQgKi8KKwkJCWlmICghKCgweDgwMDAwMDAwVSA+PiAob3B0KyspKSAmIGJtcCkpCS8qIE5vdCBleGlzdCAqLworCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRGVjb2RlICovCisJCWlmIChzb24tPmF0dHIgJiBPUEVOKSB7CS8qIE9wZW4gZmllbGQgKi8KKwkJCUNIRUNLX0JPVU5EKGJzLCAyKTsKKwkJCWxlbiA9IGdldF9sZW4oYnMpOworCQkJQ0hFQ0tfQk9VTkQoYnMsIGxlbik7CisJCQlpZiAoIWJhc2UpIHsKKwkJCQlQUklOVCgiJSoucyVzXG4iLCAobGV2ZWwgKyAxKSAqIFRBQl9TSVpFLAorCQkJCSAgICAgICIgIiwgc29uLT5uYW1lKTsKKwkJCQlicy0+Y3VyICs9IGxlbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJlZyA9IGJzLT5jdXI7CisKKwkJCS8qIERlY29kZSAqLworCQkJaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsCisJCQkJCQkJICBsZXZlbCArIDEpKSA+CisJCQkgICAgSDMyM19FUlJPUl9TVE9QKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWJzLT5jdXIgPSBiZWcgKyBsZW47CisJCQlicy0+Yml0ID0gMDsKKwkJfSBlbHNlIGlmICgoZXJyID0gKERlY29kZXJzW3Nvbi0+dHlwZV0pIChicywgc29uLCBiYXNlLAorCQkJCQkJCSBsZXZlbCArIDEpKSkKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogTm8gZXh0ZW5zaW9uPyAqLworCWlmICghZXh0KQorCQlyZXR1cm4gSDMyM19FUlJPUl9OT05FOworCisJLyogR2V0IHRoZSBleHRlbnNpb24gYml0bWFwICovCisJYm1wMl9sZW4gPSBnZXRfYml0cyhicywgNykgKyAxOworCUNIRUNLX0JPVU5EKGJzLCAoYm1wMl9sZW4gKyA3KSA+PiAzKTsKKwlibXAyID0gZ2V0X2JpdG1hcChicywgYm1wMl9sZW4pOworCWJtcCB8PSBibXAyID4+IGYtPnN6OworCWlmIChiYXNlKQorCQkqKHVuc2lnbmVkICopIGJhc2UgPSBibXA7CisJQllURV9BTElHTihicyk7CisKKwkvKiBEZWNvZGUgdGhlIGV4dGVuc2lvbiBjb21wb25lbnRzICovCisJZm9yIChvcHQgPSAwOyBvcHQgPCBibXAyX2xlbjsgb3B0KyssIGkrKywgc29uKyspIHsKKwkJaWYgKHNvbi0+YXR0ciAmIFNUT1ApIHsKKwkJCVBSSU5UKCIlKi5zJXNcbiIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsICIgIiwKKwkJCSAgICAgIHNvbi0+bmFtZSk7CisJCQlyZXR1cm4gSDMyM19FUlJPUl9TVE9QOworCQl9CisKKwkJaWYgKCEoKDB4ODAwMDAwMDAgPj4gb3B0KSAmIGJtcDIpKQkvKiBOb3QgcHJlc2VudCAqLworCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgUmFuZ2UgKi8KKwkJaWYgKGkgPj0gZi0+dWIpIHsJLyogTmV3ZXIgVmVyc2lvbj8gKi8KKwkJCUNIRUNLX0JPVU5EKGJzLCAyKTsKKwkJCWxlbiA9IGdldF9sZW4oYnMpOworCQkJQ0hFQ0tfQk9VTkQoYnMsIGxlbik7CisJCQlicy0+Y3VyICs9IGxlbjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJQ0hFQ0tfQk9VTkQoYnMsIDIpOworCQlsZW4gPSBnZXRfbGVuKGJzKTsKKwkJQ0hFQ0tfQk9VTkQoYnMsIGxlbik7CisJCWlmICghYmFzZSB8fCAhKHNvbi0+YXR0ciAmIERFQ09ERSkpIHsKKwkJCVBSSU5UKCIlKi5zJXNcbiIsIChsZXZlbCArIDEpICogVEFCX1NJWkUsICIgIiwKKwkJCSAgICAgIHNvbi0+bmFtZSk7CisJCQlicy0+Y3VyICs9IGxlbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJlZyA9IGJzLT5jdXI7CisKKwkJaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sIGJhc2UsCisJCQkJCQkgIGxldmVsICsgMSkpID4KKwkJICAgIEgzMjNfRVJST1JfU1RPUCkKKwkJCXJldHVybiBlcnI7CisKKwkJYnMtPmN1ciA9IGJlZyArIGxlbjsKKwkJYnMtPmJpdCA9IDA7CisJfQorCXJldHVybiBIMzIzX0VSUk9SX05PTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRlY29kZV9zZXFvZihiaXRzdHJfdCAqIGJzLCBmaWVsZF90ICogZiwgY2hhciAqYmFzZSwgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGNvdW50LCBlZmZlY3RpdmVfY291bnQgPSAwLCBpLCBsZW4gPSAwOworCWludCBlcnI7CisJZmllbGRfdCAqc29uOworCXVuc2lnbmVkIGNoYXIgKmJlZyA9IE5VTEw7CisKKwlQUklOVCgiJSoucyVzXG4iLCBsZXZlbCAqIFRBQl9TSVpFLCAiICIsIGYtPm5hbWUpOworCisJLyogRGVjb2RlPyAqLworCWJhc2UgPSAoYmFzZSAmJiAoZi0+YXR0ciAmIERFQ09ERSkpID8gYmFzZSArIGYtPm9mZnNldCA6IE5VTEw7CisKKwkvKiBEZWNvZGUgaXRlbSBjb3VudCAqLworCXN3aXRjaCAoZi0+c3opIHsKKwljYXNlIEJZVEU6CisJCUJZVEVfQUxJR04oYnMpOworCQlDSEVDS19CT1VORChicywgMSk7CisJCWNvdW50ID0gKmJzLT5jdXIrKzsKKwkJYnJlYWs7CisJY2FzZSBXT1JEOgorCQlCWVRFX0FMSUdOKGJzKTsKKwkJQ0hFQ0tfQk9VTkQoYnMsIDIpOworCQljb3VudCA9ICpicy0+Y3VyKys7CisJCWNvdW50IDw8PSA4OworCQljb3VudCA9ICpicy0+Y3VyKys7CisJCWJyZWFrOworCWNhc2UgU0VNSToKKwkJQllURV9BTElHTihicyk7CisJCUNIRUNLX0JPVU5EKGJzLCAyKTsKKwkJY291bnQgPSBnZXRfbGVuKGJzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY291bnQgPSBnZXRfYml0cyhicywgZi0+c3opOworCQlicmVhazsKKwl9CisJY291bnQgKz0gZi0+bGI7CisKKwkvKiBXcml0ZSBDb3VudCAqLworCWlmIChiYXNlKSB7CisJCWVmZmVjdGl2ZV9jb3VudCA9IGNvdW50ID4gZi0+dWIgPyBmLT51YiA6IGNvdW50OworCQkqKHVuc2lnbmVkICopIGJhc2UgPSBlZmZlY3RpdmVfY291bnQ7CisJCWJhc2UgKz0gc2l6ZW9mKHVuc2lnbmVkKTsKKwl9CisKKwkvKiBEZWNvZGUgbmVzdGVkIGZpZWxkICovCisJc29uID0gZi0+ZmllbGRzOworCWlmIChiYXNlKQorCQliYXNlIC09IHNvbi0+b2Zmc2V0OworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChzb24tPmF0dHIgJiBPUEVOKSB7CisJCQlCWVRFX0FMSUdOKGJzKTsKKwkJCWxlbiA9IGdldF9sZW4oYnMpOworCQkJQ0hFQ0tfQk9VTkQoYnMsIGxlbik7CisJCQlpZiAoIWJhc2UgfHwgIShzb24tPmF0dHIgJiBERUNPREUpKSB7CisJCQkJUFJJTlQoIiUqLnMlc1xuIiwgKGxldmVsICsgMSkgKiBUQUJfU0laRSwKKwkJCQkgICAgICAiICIsIHNvbi0+bmFtZSk7CisJCQkJYnMtPmN1ciArPSBsZW47CisJCQkJY29udGludWU7CisJCQl9CisJCQliZWcgPSBicy0+Y3VyOworCisJCQlpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tPnR5cGVdKSAoYnMsIHNvbiwKKwkJCQkJCQkgIGkgPAorCQkJCQkJCSAgZWZmZWN0aXZlX2NvdW50ID8KKwkJCQkJCQkgIGJhc2UgOiBOVUxMLAorCQkJCQkJCSAgbGV2ZWwgKyAxKSkgPgorCQkJICAgIEgzMjNfRVJST1JfU1RPUCkKKwkJCQlyZXR1cm4gZXJyOworCisJCQlicy0+Y3VyID0gYmVnICsgbGVuOworCQkJYnMtPmJpdCA9IDA7CisJCX0gZWxzZQorCQkgICAgaWYgKChlcnIgPSAoRGVjb2RlcnNbc29uLT50eXBlXSkgKGJzLCBzb24sCisJCQkJCQkgICAgICBpIDwgZWZmZWN0aXZlX2NvdW50ID8KKwkJCQkJCSAgICAgIGJhc2UgOiBOVUxMLAorCQkJCQkJICAgICAgbGV2ZWwgKyAxKSkpCisJCQlyZXR1cm4gZXJyOworCisJCWlmIChiYXNlKQorCQkJYmFzZSArPSBzb24tPm9mZnNldDsKKwl9CisKKwlyZXR1cm4gSDMyM19FUlJPUl9OT05FOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRlY29kZV9jaG9pY2UoYml0c3RyX3QgKiBicywgZmllbGRfdCAqIGYsIGNoYXIgKmJhc2UsIGludCBsZXZlbCkKK3sKKwl1bnNpZ25lZCB0eXBlLCBleHQsIGxlbiA9IDA7CisJaW50IGVycjsKKwlmaWVsZF90ICpzb247CisJdW5zaWduZWQgY2hhciAqYmVnID0gTlVMTDsKKworCVBSSU5UKCIlKi5zJXNcbiIsIGxldmVsICogVEFCX1NJWkUsICIgIiwgZi0+bmFtZSk7CisKKwkvKiBEZWNvZGU/ICovCisJYmFzZSA9IChiYXNlICYmIChmLT5hdHRyICYgREVDT0RFKSkgPyBiYXNlICsgZi0+b2Zmc2V0IDogTlVMTDsKKworCS8qIERlY29kZSB0aGUgY2hvaWNlIGluZGV4IG51bWJlciAqLworCWlmICgoZi0+YXR0ciAmIEVYVCkgJiYgZ2V0X2JpdChicykpIHsKKwkJZXh0ID0gMTsKKwkJdHlwZSA9IGdldF9iaXRzKGJzLCA3KSArIGYtPmxiOworCX0gZWxzZSB7CisJCWV4dCA9IDA7CisJCXR5cGUgPSBnZXRfYml0cyhicywgZi0+c3opOworCX0KKworCS8qIENoZWNrIFJhbmdlICovCisJaWYgKHR5cGUgPj0gZi0+dWIpIHsJLyogTmV3ZXIgdmVyc2lvbj8gKi8KKwkJQllURV9BTElHTihicyk7CisJCWxlbiA9IGdldF9sZW4oYnMpOworCQlDSEVDS19CT1VORChicywgbGVuKTsKKwkJYnMtPmN1ciArPSBsZW47CisJCXJldHVybiBIMzIzX0VSUk9SX05PTkU7CisJfQorCisJLyogV3JpdGUgVHlwZSAqLworCWlmIChiYXNlKQorCQkqKHVuc2lnbmVkICopIGJhc2UgPSB0eXBlOworCisJLyogVHJhbnNmZXIgdG8gc29uIGxldmVsICovCisJc29uID0gJmYtPmZpZWxkc1t0eXBlXTsKKwlpZiAoc29uLT5hdHRyICYgU1RPUCkgeworCQlQUklOVCgiJSoucyVzXG4iLCAobGV2ZWwgKyAxKSAqIFRBQl9TSVpFLCAiICIsIHNvbi0+bmFtZSk7CisJCXJldHVybiBIMzIzX0VSUk9SX1NUT1A7CisJfQorCisJaWYgKGV4dCB8fCAoc29uLT5hdHRyICYgT1BFTikpIHsKKwkJQllURV9BTElHTihicyk7CisJCWxlbiA9IGdldF9sZW4oYnMpOworCQlDSEVDS19CT1VORChicywgbGVuKTsKKwkJaWYgKCFiYXNlIHx8ICEoc29uLT5hdHRyICYgREVDT0RFKSkgeworCQkJUFJJTlQoIiUqLnMlc1xuIiwgKGxldmVsICsgMSkgKiBUQUJfU0laRSwgIiAiLAorCQkJICAgICAgc29uLT5uYW1lKTsKKwkJCWJzLT5jdXIgKz0gbGVuOworCQkJcmV0dXJuIEgzMjNfRVJST1JfTk9ORTsKKwkJfQorCQliZWcgPSBicy0+Y3VyOworCisJCWlmICgoZXJyID0gKERlY29kZXJzW3Nvbi0+dHlwZV0pIChicywgc29uLCBiYXNlLCBsZXZlbCArIDEpKSA+CisJCSAgICBIMzIzX0VSUk9SX1NUT1ApCisJCQlyZXR1cm4gZXJyOworCisJCWJzLT5jdXIgPSBiZWcgKyBsZW47CisJCWJzLT5iaXQgPSAwOworCX0gZWxzZSBpZiAoKGVyciA9IChEZWNvZGVyc1tzb24tPnR5cGVdKSAoYnMsIHNvbiwgYmFzZSwgbGV2ZWwgKyAxKSkpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gSDMyM19FUlJPUl9OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICogcmFzKQoreworCXN0YXRpYyBmaWVsZF90IHJhc19tZXNzYWdlID0geworCQlGTkFNRSgiUmFzTWVzc2FnZSIpIENIT0lDRSwgNSwgMjQsIDMyLCBERUNPREUgfCBFWFQsCisJCTAsIF9SYXNNZXNzYWdlCisJfTsKKwliaXRzdHJfdCBiczsKKworCWJzLmJ1ZiA9IGJzLmJlZyA9IGJzLmN1ciA9IGJ1ZjsKKwlicy5lbmQgPSBidWYgKyBzejsKKwlicy5iaXQgPSAwOworCisJcmV0dXJuIGRlY29kZV9jaG9pY2UoJmJzLCAmcmFzX21lc3NhZ2UsIChjaGFyICopIHJhcywgMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBEZWNvZGVIMzIzX1VzZXJJbmZvcm1hdGlvbih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGNoYXIgKmJlZywKKwkJCQkgICAgICBzaXplX3Qgc3osIEgzMjNfVXNlckluZm9ybWF0aW9uICogdXVpZSkKK3sKKwlzdGF0aWMgZmllbGRfdCBoMzIzX3VzZXJpbmZvcm1hdGlvbiA9IHsKKwkJRk5BTUUoIkgzMjMtVXNlckluZm9ybWF0aW9uIikgU0VRLCAxLCAyLCAyLCBERUNPREUgfCBFWFQsCisJCTAsIF9IMzIzX1VzZXJJbmZvcm1hdGlvbgorCX07CisJYml0c3RyX3QgYnM7CisKKwlicy5idWYgPSBidWY7CisJYnMuYmVnID0gYnMuY3VyID0gYmVnOworCWJzLmVuZCA9IGJlZyArIHN6OworCWJzLmJpdCA9IDA7CisKKwlyZXR1cm4gZGVjb2RlX3NlcSgmYnMsICZoMzIzX3VzZXJpbmZvcm1hdGlvbiwgKGNoYXIgKikgdXVpZSwgMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IERlY29kZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwKKwkJCQkJIE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSAqCisJCQkJCSBtc2NtKQoreworCXN0YXRpYyBmaWVsZF90IG11bHRpbWVkaWFzeXN0ZW1jb250cm9sbWVzc2FnZSA9IHsKKwkJRk5BTUUoIk11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSIpIENIT0lDRSwgMiwgNCwgNCwKKwkJREVDT0RFIHwgRVhULCAwLCBfTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlCisJfTsKKwliaXRzdHJfdCBiczsKKworCWJzLmJ1ZiA9IGJzLmJlZyA9IGJzLmN1ciA9IGJ1ZjsKKwlicy5lbmQgPSBidWYgKyBzejsKKwlicy5iaXQgPSAwOworCisJcmV0dXJuIGRlY29kZV9jaG9pY2UoJmJzLCAmbXVsdGltZWRpYXN5c3RlbWNvbnRyb2xtZXNzYWdlLAorCQkJICAgICAoY2hhciAqKSBtc2NtLCAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgRGVjb2RlUTkzMSh1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBzeiwgUTkzMSAqIHE5MzEpCit7CisJdW5zaWduZWQgY2hhciAqcCA9IGJ1ZjsKKwlpbnQgbGVuOworCisJaWYgKCFwIHx8IHN6IDwgMSkKKwkJcmV0dXJuIEgzMjNfRVJST1JfQk9VTkQ7CisKKwkvKiBQcm90b2NvbCBEaXNjcmltaW5hdG9yICovCisJaWYgKCpwICE9IDB4MDgpIHsKKwkJUFJJTlQoIlVua25vd24gUHJvdG9jb2wgRGlzY3JpbWluYXRvclxuIik7CisJCXJldHVybiBIMzIzX0VSUk9SX1JBTkdFOworCX0KKwlwKys7CisJc3otLTsKKworCS8qIENhbGxSZWZlcmVuY2VWYWx1ZSAqLworCWlmIChzeiA8IDEpCisJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOworCWxlbiA9ICpwKys7CisJc3otLTsKKwlpZiAoc3ogPCBsZW4pCisJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOworCXAgKz0gbGVuOworCXN6IC09IGxlbjsKKworCS8qIE1lc3NhZ2UgVHlwZSAqLworCWlmIChzeiA8IDEpCisJCXJldHVybiBIMzIzX0VSUk9SX0JPVU5EOworCXE5MzEtPk1lc3NhZ2VUeXBlID0gKnArKzsKKwlQUklOVCgiTWVzc2FnZVR5cGUgPSAlMDJYXG4iLCBxOTMxLT5NZXNzYWdlVHlwZSk7CisJaWYgKCpwICYgMHg4MCkgeworCQlwKys7CisJCXN6LS07CisJfQorCisJLyogRGVjb2RlIEluZm9ybWF0aW9uIEVsZW1lbnRzICovCisJd2hpbGUgKHN6ID4gMCkgeworCQlpZiAoKnAgPT0gMHg3ZSkgewkvKiBVc2VyVXNlcklFICovCisJCQlpZiAoc3ogPCAzKQorCQkJCWJyZWFrOworCQkJcCsrOworCQkJbGVuID0gKnArKyA8PCA4OworCQkJbGVuIHw9ICpwKys7CisJCQlzeiAtPSAzOworCQkJaWYgKHN6IDwgbGVuKQorCQkJCWJyZWFrOworCQkJcCsrOworCQkJbGVuLS07CisJCQlyZXR1cm4gRGVjb2RlSDMyM19Vc2VySW5mb3JtYXRpb24oYnVmLCBwLCBsZW4sCisJCQkJCQkJICAmcTkzMS0+VVVJRSk7CisJCX0KKwkJcCsrOworCQlzei0tOworCQlpZiAoc3ogPCAxKQorCQkJYnJlYWs7CisJCWxlbiA9ICpwKys7CisJCWlmIChzeiA8IGxlbikKKwkJCWJyZWFrOworCQlwICs9IGxlbjsKKwkJc3ogLT0gbGVuOworCX0KKworCVBSSU5UKCJRLjkzMSBVVUlFIG5vdCBmb3VuZFxuIik7CisKKwlyZXR1cm4gSDMyM19FUlJPUl9CT1VORDsKK30KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJkODI4MAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5oIC0gQkVSIGFuZCBQRVIgZGVjb2RpbmcgbGlicmFyeSBmb3IgSC4zMjMKKyAqIAkJCSAgICAgIAkgICAgIGNvbm50cmFjay9OQVQgbW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBieSBKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkBob3RtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgYmFzZWQgb24gSC4yMjUgdmVyc2lvbiA0LCBILjIzNSB2ZXJzaW9uIDIgYW5kIEguMjQ1CisgKiB2ZXJzaW9uIDcuIEl0IGlzIGV4dHJlbWVseSBvcHRpbWl6ZWQgdG8gZGVjb2RlIG9ubHkgdGhlIGFic29sdXRlbHkKKyAqIG5lY2Vzc2FyeSBvYmplY3RzIGluIGEgc2lnbmFsIGZvciBMaW51eCBrZXJuZWwgTkFUIG1vZHVsZSB1c2UsIHNvIGRvbid0CisgKiBleHBlY3QgaXQgdG8gYmUgYSBmdWxsIEFTTi4xIGxpYnJhcnkuCisgKgorICogRmVhdHVyZXM6CisgKgorICogMS4gU21hbGwuIFRoZSB0b3RhbCBzaXplIG9mIGNvZGUgcGx1cyBkYXRhIGlzIGxlc3MgdGhhbiAyMCBLQiAoSUEzMikuCisgKiAyLiBGYXN0LiBEZWNvZGluZyBOZXRtZWV0aW5nJ3MgU2V0dXAgc2lnbmFsIDEgbWlsbGlvbiB0aW1lcyBvbiBhIFBJSUkgODY2CisgKiAgICB0YWtlcyBvbmx5IDMuOSBzZWNvbmRzLgorICogMy4gTm8gbWVtb3J5IGFsbG9jYXRpb24uIEl0IHVzZXMgYSBzdGF0aWMgb2JqZWN0LiBObyBuZWVkIHRvIGluaXRpYWxpemUgb3IKKyAqICAgIGNsZWFudXAuCisgKiA0LiBUaHJlYWQgc2FmZS4KKyAqIDUuIFN1cHBvcnQgZW1iZWRkZWQgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhcyBubyBtaXNhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKKyAqICAgIHN1cHBvcnQuCisgKgorICogTGltaXRhdGlvbnM6CisgKgorICogMS4gQXQgbW9zdCAzMCBmYXN0c3RhcnQgZW50cmllcy4gQWN0dWFsbHkgdGhpcyBpcyBsaW1pdGVkIGJ5IGV0aGVybmV0J3MgTVRVLgorICogICAgSWYgYSBTZXR1cCBzaWduYWwgY29udGFpbnMgbW9yZSB0aGFuIDMwIGZhc3RzdGFydCwgdGhlIHBhY2tldCBzaXplIHdpbGwKKyAqICAgIHZlcnkgbGlrZWx5IGV4Y2VlZCB0aGUgTVRVIHNpemUsIHRoZW4gdGhlIFRQS1Qgd2lsbCBiZSBmcmFnbWVudGVkLiBJCisgKiAgICBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcyBpbiBhIE5ldGZpbHRlciBtb2R1bGUuIEFueWJvZHkgY2FuIGhlbHA/CisgKiAgICBBbHRob3VnaCBJIHRoaW5rIDMwIGlzIGVub3VnaCBmb3IgbW9zdCBvZiB0aGUgY2FzZXMuCisgKiAyLiBJUHY0IGFkZHJlc3NlcyBvbmx5LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfSEVMUEVSX0gzMjNfQVNOMV9IXworI2RlZmluZSBfSVBfQ09OTlRSQUNLX0hFTFBFUl9IMzIzX0FTTjFfSF8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBILjMyMyBUeXBlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKwllbnVtIHsKKwkJUTkzMV9OYXRpb25hbEVzY2FwZSA9IDB4MDAsCisJCVE5MzFfQWxlcnRpbmcgPSAweDAxLAorCQlROTMxX0NhbGxQcm9jZWVkaW5nID0gMHgwMiwKKwkJUTkzMV9Db25uZWN0ID0gMHgwNywKKwkJUTkzMV9Db25uZWN0QWNrID0gMHgwRiwKKwkJUTkzMV9Qcm9ncmVzcyA9IDB4MDMsCisJCVE5MzFfU2V0dXAgPSAweDA1LAorCQlROTMxX1NldHVwQWNrID0gMHgwRCwKKwkJUTkzMV9SZXN1bWUgPSAweDI2LAorCQlROTMxX1Jlc3VtZUFjayA9IDB4MkUsCisJCVE5MzFfUmVzdW1lUmVqZWN0ID0gMHgyMiwKKwkJUTkzMV9TdXNwZW5kID0gMHgyNSwKKwkJUTkzMV9TdXNwZW5kQWNrID0gMHgyRCwKKwkJUTkzMV9TdXNwZW5kUmVqZWN0ID0gMHgyMSwKKwkJUTkzMV9Vc2VySW5mb3JtYXRpb24gPSAweDIwLAorCQlROTMxX0Rpc2Nvbm5lY3QgPSAweDQ1LAorCQlROTMxX1JlbGVhc2UgPSAweDRELAorCQlROTMxX1JlbGVhc2VDb21wbGV0ZSA9IDB4NUEsCisJCVE5MzFfUmVzdGFydCA9IDB4NDYsCisJCVE5MzFfUmVzdGFydEFjayA9IDB4NEUsCisJCVE5MzFfU2VnbWVudCA9IDB4NjAsCisJCVE5MzFfQ29uZ2VzdGlvbkN0cmwgPSAweDc5LAorCQlROTMxX0luZm9ybWF0aW9uID0gMHg3QiwKKwkJUTkzMV9Ob3RpZnkgPSAweDZFLAorCQlROTMxX1N0YXR1cyA9IDB4N0QsCisJCVE5MzFfU3RhdHVzRW5xdWlyeSA9IDB4NzUsCisJCVE5MzFfRmFjaWxpdHkgPSAweDYyCisJfSBNZXNzYWdlVHlwZTsKKwlIMzIzX1VzZXJJbmZvcm1hdGlvbiBVVUlFOworfSBROTMxOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlY29kZSBGdW5jdGlvbnMgUmV0dXJuIENvZGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBIMzIzX0VSUk9SX05PTkUgMAkvKiBEZWNvZGVkIHN1Y2Nlc3NmdWxseSAqLworI2RlZmluZSBIMzIzX0VSUk9SX1NUT1AgMQkvKiBEZWNvZGluZyBzdG9wcGVkLCBub3QgcmVhbGx5IGFuIGVycm9yICovCisjZGVmaW5lIEgzMjNfRVJST1JfQk9VTkQgLTEKKyNkZWZpbmUgSDMyM19FUlJPUl9SQU5HRSAtMgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVjb2RlIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBEZWNvZGVSYXNNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBSYXNNZXNzYWdlICogcmFzKTsKK2ludCBEZWNvZGVROTMxKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LCBROTMxICogcTkzMSk7CitpbnQgRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IHN6LAorCQkJCQkgTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICoKKwkJCQkJIG1zY20pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjJjNDdiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5jCkBAIC0wLDAgKzEsMTkyNiBAQAorLyogR2VuZXJhdGVkIGJ5IEppbmcgTWluIFpoYW8ncyBBU04uMSBwYXJzZXIsIE1hciAxNSAyMDA2CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEppbmcgTWluIFpoYW8gPHpoYW9qaW5nbWluQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKK3N0YXRpYyBmaWVsZF90IF9UcmFuc3BvcnRBZGRyZXNzX2lwQWRkcmVzc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgiaXAiKSBPQ1RTVFIsIEZJWEQsIDQsIDAsIERFQ09ERSwKKwkgb2Zmc2V0b2YoVHJhbnNwb3J0QWRkcmVzc19pcEFkZHJlc3MsIGlwKSwgTlVMTH0sCisJe0ZOQU1FKCJwb3J0IikgSU5ULCBXT1JELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9UcmFuc3BvcnRBZGRyZXNzX2lwU291cmNlUm91dGVfcm91dGVbXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBPQ1RTVFIsIEZJWEQsIDQsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1RyYW5zcG9ydEFkZHJlc3NfaXBTb3VyY2VSb3V0ZV9yb3V0aW5nW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgic3RyaWN0IikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImxvb3NlIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9UcmFuc3BvcnRBZGRyZXNzX2lwU291cmNlUm91dGVbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImlwIikgT0NUU1RSLCBGSVhELCA0LCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInBvcnQiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicm91dGUiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwKKwkgX1RyYW5zcG9ydEFkZHJlc3NfaXBTb3VyY2VSb3V0ZV9yb3V0ZX0sCisJe0ZOQU1FKCJyb3V0aW5nIikgQ0hPSUNFLCAxLCAyLCAyLCBTS0lQIHwgRVhULCAwLAorCSBfVHJhbnNwb3J0QWRkcmVzc19pcFNvdXJjZVJvdXRlX3JvdXRpbmd9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1RyYW5zcG9ydEFkZHJlc3NfaXB4QWRkcmVzc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9kZSIpIE9DVFNUUiwgRklYRCwgNiwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJuZXRudW0iKSBPQ1RTVFIsIEZJWEQsIDQsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicG9ydCIpIE9DVFNUUiwgRklYRCwgMiwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJpcCIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicG9ydCIpIElOVCwgV09SRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSDIyMU5vblN0YW5kYXJkW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJ0MzVDb3VudHJ5Q29kZSIpIElOVCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0MzVFeHRlbnNpb24iKSBJTlQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibWFudWZhY3R1cmVyQ29kZSIpIElOVCwgV09SRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfTm9uU3RhbmRhcmRJZGVudGlmaWVyW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgib2JqZWN0IikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImgyMjFOb25TdGFuZGFyZCIpIFNFUSwgMCwgMywgMywgU0tJUCB8IEVYVCwgMCwKKwkgX0gyMjFOb25TdGFuZGFyZH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkSWRlbnRpZmllciIpIENIT0lDRSwgMSwgMiwgMiwgU0tJUCB8IEVYVCwgMCwKKwkgX05vblN0YW5kYXJkSWRlbnRpZmllcn0sCisJe0ZOQU1FKCJkYXRhIikgT0NUU1RSLCBTRU1JLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9UcmFuc3BvcnRBZGRyZXNzW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgiaXBBZGRyZXNzIikgU0VRLCAwLCAyLCAyLCBERUNPREUsCisJIG9mZnNldG9mKFRyYW5zcG9ydEFkZHJlc3MsIGlwQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzX2lwQWRkcmVzc30sCisJe0ZOQU1FKCJpcFNvdXJjZVJvdXRlIikgU0VRLCAwLCA0LCA0LCBTS0lQIHwgRVhULCAwLAorCSBfVHJhbnNwb3J0QWRkcmVzc19pcFNvdXJjZVJvdXRlfSwKKwl7Rk5BTUUoImlweEFkZHJlc3MiKSBTRVEsIDAsIDMsIDMsIFNLSVAsIDAsCisJIF9UcmFuc3BvcnRBZGRyZXNzX2lweEFkZHJlc3N9LAorCXtGTkFNRSgiaXA2QWRkcmVzcyIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IEVYVCwgMCwKKwkgX1RyYW5zcG9ydEFkZHJlc3NfaXA2QWRkcmVzc30sCisJe0ZOQU1FKCJuZXRCaW9zIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJuc2FwIikgT0NUU1RSLCA1LCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkQWRkcmVzcyIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9BbGlhc0FkZHJlc3NbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJkaWFsZWREaWdpdHMiKSBOVU1ER1QsIDcsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaDMyMy1JRCIpIEJNUFNUUiwgQllURSwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ1cmwtSUQiKSBJQTVTVFIsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidHJhbnNwb3J0SUQiKSBDSE9JQ0UsIDMsIDcsIDcsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZW1haWwtSUQiKSBJQTVTVFIsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicGFydHlOdW1iZXIiKSBDSE9JQ0UsIDMsIDUsIDUsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibW9iaWxlVUlNIikgQ0hPSUNFLCAxLCAyLCAyLCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9TZXR1cF9VVUlFX3NvdXJjZUFkZHJlc3NbXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBDSE9JQ0UsIDEsIDIsIDcsIFNLSVAgfCBFWFQsIDAsIF9BbGlhc0FkZHJlc3N9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1ZlbmRvcklkZW50aWZpZXJbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInZlbmRvciIpIFNFUSwgMCwgMywgMywgU0tJUCB8IEVYVCwgMCwgX0gyMjFOb25TdGFuZGFyZH0sCisJe0ZOQU1FKCJwcm9kdWN0SWQiKSBPQ1RTVFIsIEJZVEUsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidmVyc2lvbklkIikgT0NUU1RSLCBCWVRFLCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9HYXRla2VlcGVySW5mb1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gzMTBDYXBzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZERhdGEiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBPUFQsIDAsCisJIF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCisJe0ZOQU1FKCJkYXRhUmF0ZXNTdXBwb3J0ZWQiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzdXBwb3J0ZWRQcmVmaXhlcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMzIwQ2Fwc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgiZGF0YVJhdGVzU3VwcG9ydGVkIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic3VwcG9ydGVkUHJlZml4ZXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSDMyMUNhcHNbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoImRhdGFSYXRlc1N1cHBvcnRlZCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInN1cHBvcnRlZFByZWZpeGVzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gzMjJDYXBzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZERhdGEiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBPUFQsIDAsCisJIF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCisJe0ZOQU1FKCJkYXRhUmF0ZXNTdXBwb3J0ZWQiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzdXBwb3J0ZWRQcmVmaXhlcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMzIzQ2Fwc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgiZGF0YVJhdGVzU3VwcG9ydGVkIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic3VwcG9ydGVkUHJlZml4ZXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSDMyNENhcHNbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoImRhdGFSYXRlc1N1cHBvcnRlZCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInN1cHBvcnRlZFByZWZpeGVzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1ZvaWNlQ2Fwc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgiZGF0YVJhdGVzU3VwcG9ydGVkIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic3VwcG9ydGVkUHJlZml4ZXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVDEyME9ubHlDYXBzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZERhdGEiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBPUFQsIDAsCisJIF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCisJe0ZOQU1FKCJkYXRhUmF0ZXNTdXBwb3J0ZWQiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzdXBwb3J0ZWRQcmVmaXhlcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9TdXBwb3J0ZWRQcm90b2NvbHNbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZERhdGEiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsCisJIF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCisJe0ZOQU1FKCJoMzEwIikgU0VRLCAxLCAxLCAzLCBTS0lQIHwgRVhULCAwLCBfSDMxMENhcHN9LAorCXtGTkFNRSgiaDMyMCIpIFNFUSwgMSwgMSwgMywgU0tJUCB8IEVYVCwgMCwgX0gzMjBDYXBzfSwKKwl7Rk5BTUUoImgzMjEiKSBTRVEsIDEsIDEsIDMsIFNLSVAgfCBFWFQsIDAsIF9IMzIxQ2Fwc30sCisJe0ZOQU1FKCJoMzIyIikgU0VRLCAxLCAxLCAzLCBTS0lQIHwgRVhULCAwLCBfSDMyMkNhcHN9LAorCXtGTkFNRSgiaDMyMyIpIFNFUSwgMSwgMSwgMywgU0tJUCB8IEVYVCwgMCwgX0gzMjNDYXBzfSwKKwl7Rk5BTUUoImgzMjQiKSBTRVEsIDEsIDEsIDMsIFNLSVAgfCBFWFQsIDAsIF9IMzI0Q2Fwc30sCisJe0ZOQU1FKCJ2b2ljZSIpIFNFUSwgMSwgMSwgMywgU0tJUCB8IEVYVCwgMCwgX1ZvaWNlQ2Fwc30sCisJe0ZOQU1FKCJ0MTIwLW9ubHkiKSBTRVEsIDEsIDEsIDMsIFNLSVAgfCBFWFQsIDAsIF9UMTIwT25seUNhcHN9LAorCXtGTkFNRSgibm9uU3RhbmRhcmRQcm90b2NvbCIpIFNFUSwgMiwgMywgMywgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0MzhGYXhBbm5leGJPbmx5IikgU0VRLCAyLCA1LCA1LCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9HYXRld2F5SW5mb19wcm90b2NvbFtdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIENIT0lDRSwgNCwgOSwgMTEsIFNLSVAgfCBFWFQsIDAsIF9TdXBwb3J0ZWRQcm90b2NvbHN9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0dhdGV3YXlJbmZvW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJwcm90b2NvbCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLAorCSBfR2F0ZXdheUluZm9fcHJvdG9jb2x9LAorCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX01jdUluZm9bXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoInByb3RvY29sIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1Rlcm1pbmFsSW5mb1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0VuZHBvaW50VHlwZVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgidmVuZG9yIikgU0VRLCAyLCAzLCAzLCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBfVmVuZG9ySWRlbnRpZmllcn0sCisJe0ZOQU1FKCJnYXRla2VlcGVyIikgU0VRLCAxLCAxLCAxLCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBfR2F0ZWtlZXBlckluZm99LAorCXtGTkFNRSgiZ2F0ZXdheSIpIFNFUSwgMiwgMiwgMiwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgX0dhdGV3YXlJbmZvfSwKKwl7Rk5BTUUoIm1jdSIpIFNFUSwgMSwgMSwgMiwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgX01jdUluZm99LAorCXtGTkFNRSgidGVybWluYWwiKSBTRVEsIDEsIDEsIDEsIFNLSVAgfCBFWFQgfCBPUFQsIDAsIF9UZXJtaW5hbEluZm99LAorCXtGTkFNRSgibWMiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInVuZGVmaW5lZE5vZGUiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNldCIpIEJJVFNUUiwgRklYRCwgMzIsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic3VwcG9ydGVkVHVubmVsbGVkUHJvdG9jb2xzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsCisJIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1NldHVwX1VVSUVfZGVzdGluYXRpb25BZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgQ0hPSUNFLCAxLCAyLCA3LCBTS0lQIHwgRVhULCAwLCBfQWxpYXNBZGRyZXNzfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9TZXR1cF9VVUlFX2Rlc3RFeHRyYUNhbGxJbmZvW10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgQ0hPSUNFLCAxLCAyLCA3LCBTS0lQIHwgRVhULCAwLCBfQWxpYXNBZGRyZXNzfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9TZXR1cF9VVUlFX2Rlc3RFeHRyYUNSVltdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIElOVCwgV09SRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfU2V0dXBfVVVJRV9jb25mZXJlbmNlR29hbFtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoImNyZWF0ZSIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJqb2luIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImludml0ZSIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYXBhYmlsaXR5LW5lZ290aWF0aW9uIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhbGxJbmRlcGVuZGVudFN1cHBsZW1lbnRhcnlTZXJ2aWNlIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLAorCSAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9ROTU0RGV0YWlsc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgiY29uZmVyZW5jZUNhbGxpbmciKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRocmVlUGFydHlTZXJ2aWNlIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfUXNlcmllc09wdGlvbnNbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInE5MzJGdWxsIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJxOTUxRnVsbCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicTk1MkZ1bGwiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInE5NTNGdWxsIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJxOTU1RnVsbCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicTk1NkZ1bGwiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInE5NTdGdWxsIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJxOTU0SW5mbyIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IEVYVCwgMCwgX1E5NTREZXRhaWxzfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9DYWxsVHlwZVtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoInBvaW50VG9Qb2ludCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJvbmVUb04iKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiblRvT25lIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5Ub04iKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gyNDVfTm9uU3RhbmRhcmRJZGVudGlmaWVyX2gyMjFOb25TdGFuZGFyZFtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgidDM1Q291bnRyeUNvZGUiKSBJTlQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidDM1RXh0ZW5zaW9uIikgSU5ULCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm1hbnVmYWN0dXJlckNvZGUiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gyNDVfTm9uU3RhbmRhcmRJZGVudGlmaWVyW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgib2JqZWN0IikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImgyMjFOb25TdGFuZGFyZCIpIFNFUSwgMCwgMywgMywgU0tJUCwgMCwKKwkgX0gyNDVfTm9uU3RhbmRhcmRJZGVudGlmaWVyX2gyMjFOb25TdGFuZGFyZH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSDI0NV9Ob25TdGFuZGFyZFBhcmFtZXRlcltdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmRJZGVudGlmaWVyIikgQ0hPSUNFLCAxLCAyLCAyLCBTS0lQLCAwLAorCSBfSDI0NV9Ob25TdGFuZGFyZElkZW50aWZpZXJ9LAorCXtGTkFNRSgiZGF0YSIpIE9DVFNUUiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSDI2MVZpZGVvQ2FwYWJpbGl0eVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicWNpZk1QSSIpIElOVCwgMiwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjaWZNUEkiKSBJTlQsIDIsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidGVtcG9yYWxTcGF0aWFsVHJhZGVPZmZDYXBhYmlsaXR5IikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJtYXhCaXRSYXRlIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInN0aWxsSW1hZ2VUcmFuc21pc3Npb24iKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInZpZGVvQmFkTUJzQ2FwIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSDI2MlZpZGVvQ2FwYWJpbGl0eVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicHJvZmlsZUFuZExldmVsLVNQYXRNTCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicHJvZmlsZUFuZExldmVsLU1QYXRMTCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicHJvZmlsZUFuZExldmVsLU1QYXRNTCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicHJvZmlsZUFuZExldmVsLU1QYXRILTE0IikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwcm9maWxlQW5kTGV2ZWwtTVBhdEhMIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwcm9maWxlQW5kTGV2ZWwtU05SYXRMTCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicHJvZmlsZUFuZExldmVsLVNOUmF0TUwiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInByb2ZpbGVBbmRMZXZlbC1TcGF0aWFsYXRILTE0IikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJwcm9maWxlQW5kTGV2ZWwtSFBhdE1MIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwcm9maWxlQW5kTGV2ZWwtSFBhdEgtMTQiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInByb2ZpbGVBbmRMZXZlbC1IUGF0SEwiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInZpZGVvQml0UmF0ZSIpIElOVCwgQ09OUywgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ2YnZCdWZmZXJTaXplIikgSU5ULCBDT05TLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNhbXBsZXNQZXJMaW5lIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImxpbmVzUGVyRnJhbWUiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZnJhbWVzUGVyU2Vjb25kIikgSU5ULCA0LCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImx1bWluYW5jZVNhbXBsZVJhdGUiKSBJTlQsIENPTlMsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidmlkZW9CYWRNQnNDYXAiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMjYzVmlkZW9DYXBhYmlsaXR5W10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJzcWNpZk1QSSIpIElOVCwgNSwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJxY2lmTVBJIikgSU5ULCA1LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNpZk1QSSIpIElOVCwgNSwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjaWY0TVBJIikgSU5ULCA1LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNpZjE2TVBJIikgSU5ULCA1LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm1heEJpdFJhdGUiKSBJTlQsIENPTlMsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidW5yZXN0cmljdGVkVmVjdG9yIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhcml0aG1ldGljQ29kaW5nIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhZHZhbmNlZFByZWRpY3Rpb24iKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInBiRnJhbWVzIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0ZW1wb3JhbFNwYXRpYWxUcmFkZU9mZkNhcGFiaWxpdHkiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImhyZC1CIikgSU5ULCBDT05TLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImJwcE1heEtiIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNsb3dTcWNpZk1QSSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzbG93UWNpZk1QSSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzbG93Q2lmTVBJIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNsb3dDaWY0TVBJIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNsb3dDaWYxNk1QSSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJlcnJvckNvbXBlbnNhdGlvbiIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZW5oYW5jZW1lbnRMYXllckluZm8iKSBTRVEsIDMsIDQsIDQsIFNLSVAgfCBFWFQgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgiaDI2M09wdGlvbnMiKSBTRVEsIDUsIDI5LCAzMSwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSVMxMTE3MlZpZGVvQ2FwYWJpbGl0eVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgiY29uc3RyYWluZWRCaXRzdHJlYW0iKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInZpZGVvQml0UmF0ZSIpIElOVCwgQ09OUywgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ2YnZCdWZmZXJTaXplIikgSU5ULCBDT05TLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNhbXBsZXNQZXJMaW5lIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImxpbmVzUGVyRnJhbWUiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicGljdHVyZVJhdGUiKSBJTlQsIDQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibHVtaW5hbmNlU2FtcGxlUmF0ZSIpIElOVCwgQ09OUywgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ2aWRlb0JhZE1Cc0NhcCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1ZpZGVvQ2FwYWJpbGl0eVtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkIikgU0VRLCAwLCAyLCAyLCBTS0lQLCAwLAorCSBfSDI0NV9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCisJe0ZOQU1FKCJoMjYxVmlkZW9DYXBhYmlsaXR5IikgU0VRLCAyLCA1LCA2LCBTS0lQIHwgRVhULCAwLAorCSBfSDI2MVZpZGVvQ2FwYWJpbGl0eX0sCisJe0ZOQU1FKCJoMjYyVmlkZW9DYXBhYmlsaXR5IikgU0VRLCA2LCAxNywgMTgsIFNLSVAgfCBFWFQsIDAsCisJIF9IMjYyVmlkZW9DYXBhYmlsaXR5fSwKKwl7Rk5BTUUoImgyNjNWaWRlb0NhcGFiaWxpdHkiKSBTRVEsIDcsIDEzLCAyMSwgU0tJUCB8IEVYVCwgMCwKKwkgX0gyNjNWaWRlb0NhcGFiaWxpdHl9LAorCXtGTkFNRSgiaXMxMTE3MlZpZGVvQ2FwYWJpbGl0eSIpIFNFUSwgNiwgNywgOCwgU0tJUCB8IEVYVCwgMCwKKwkgX0lTMTExNzJWaWRlb0NhcGFiaWxpdHl9LAorCXtGTkFNRSgiZ2VuZXJpY1ZpZGVvQ2FwYWJpbGl0eSIpIFNFUSwgNSwgNiwgNiwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQXVkaW9DYXBhYmlsaXR5X2c3MjMxW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJtYXhBbC1zZHVBdWRpb0ZyYW1lcyIpIElOVCwgQllURSwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzaWxlbmNlU3VwcHJlc3Npb24iKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9JUzExMTcyQXVkaW9DYXBhYmlsaXR5W10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJhdWRpb0xheWVyMSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYXVkaW9MYXllcjIiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImF1ZGlvTGF5ZXIzIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhdWRpb1NhbXBsaW5nMzJrIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhdWRpb1NhbXBsaW5nNDRrMSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYXVkaW9TYW1wbGluZzQ4ayIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgic2luZ2xlQ2hhbm5lbCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidHdvQ2hhbm5lbHMiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImJpdFJhdGUiKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0lTMTM4MThBdWRpb0NhcGFiaWxpdHlbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImF1ZGlvTGF5ZXIxIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhdWRpb0xheWVyMiIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYXVkaW9MYXllcjMiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImF1ZGlvU2FtcGxpbmcxNmsiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImF1ZGlvU2FtcGxpbmcyMmswNSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYXVkaW9TYW1wbGluZzI0ayIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYXVkaW9TYW1wbGluZzMyayIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYXVkaW9TYW1wbGluZzQ0azEiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImF1ZGlvU2FtcGxpbmc0OGsiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNpbmdsZUNoYW5uZWwiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInR3b0NoYW5uZWxzIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0aHJlZUNoYW5uZWxzMi0xIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0aHJlZUNoYW5uZWxzMy0wIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmb3VyQ2hhbm5lbHMyLTAtMi0wIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmb3VyQ2hhbm5lbHMyLTIiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZvdXJDaGFubmVsczMtMSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZml2ZUNoYW5uZWxzMy0wLTItMCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZml2ZUNoYW5uZWxzMy0yIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJsb3dGcmVxdWVuY3lFbmhhbmNlbWVudCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibXVsdGlsaW5ndWFsIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJiaXRSYXRlIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9BdWRpb0NhcGFiaWxpdHlbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZCIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwKKwkgX0gyNDVfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgiZzcxMUFsYXc2NGsiKSBJTlQsIEJZVEUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZzcxMUFsYXc1NmsiKSBJTlQsIEJZVEUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZzcxMVVsYXc2NGsiKSBJTlQsIEJZVEUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZzcxMVVsYXc1NmsiKSBJTlQsIEJZVEUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZzcyMi02NGsiKSBJTlQsIEJZVEUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZzcyMi01NmsiKSBJTlQsIEJZVEUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZzcyMi00OGsiKSBJTlQsIEJZVEUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZzcyMzEiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsIF9BdWRpb0NhcGFiaWxpdHlfZzcyMzF9LAorCXtGTkFNRSgiZzcyOCIpIElOVCwgQllURSwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnNzI5IikgSU5ULCBCWVRFLCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImc3MjlBbm5leEEiKSBJTlQsIEJZVEUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaXMxMTE3MkF1ZGlvQ2FwYWJpbGl0eSIpIFNFUSwgMCwgOSwgOSwgU0tJUCB8IEVYVCwgMCwKKwkgX0lTMTExNzJBdWRpb0NhcGFiaWxpdHl9LAorCXtGTkFNRSgiaXMxMzgxOEF1ZGlvQ2FwYWJpbGl0eSIpIFNFUSwgMCwgMjEsIDIxLCBTS0lQIHwgRVhULCAwLAorCSBfSVMxMzgxOEF1ZGlvQ2FwYWJpbGl0eX0sCisJe0ZOQU1FKCJnNzI5d0FubmV4QiIpIElOVCwgQllURSwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnNzI5QW5uZXhBd0FubmV4QiIpIElOVCwgQllURSwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnNzIzMUFubmV4Q0NhcGFiaWxpdHkiKSBTRVEsIDEsIDMsIDMsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ3NtRnVsbFJhdGUiKSBTRVEsIDAsIDMsIDMsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ3NtSGFsZlJhdGUiKSBTRVEsIDAsIDMsIDMsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ3NtRW5oYW5jZWRGdWxsUmF0ZSIpIFNFUSwgMCwgMywgMywgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnZW5lcmljQXVkaW9DYXBhYmlsaXR5IikgU0VRLCA1LCA2LCA2LCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImc3MjlFeHRlbnNpb25zIikgU0VRLCAxLCA4LCA4LCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9EYXRhUHJvdG9jb2xDYXBhYmlsaXR5W10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmQiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsCisJIF9IMjQ1X05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoInYxNGJ1ZmZlcmVkIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInY0MmxhcG0iKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaGRsY0ZyYW1lVHVubmVsbGluZyIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJoMzEwU2VwYXJhdGVWQ1N0YWNrIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImgzMTBTaW5nbGVWQ1N0YWNrIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRyYW5zcGFyZW50IikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNlZ21lbnRhdGlvbkFuZFJlYXNzZW1ibHkiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaGRsY0ZyYW1lVHVubmVsaW5nd1NBUiIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ2MTIwIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNlcGFyYXRlTEFOU3RhY2siKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidjc2d0NvbXByZXNzaW9uIikgQ0hPSUNFLCAyLCAzLCAzLCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRjcCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ1ZHAiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1Q4NFByb2ZpbGVfdDg0UmVzdHJpY3RlZFtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicWNpZiIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2lmIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjY2lyNjAxU2VxIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjY2lyNjAxUHJvZyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaGR0dlNlcSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaGR0dlByb2ciKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImczRmFjc01IMjAweDEwMCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZzNGYWNzTUgyMDB4MjAwIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnNEZhY3NNTVIyMDB4MTAwIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnNEZhY3NNTVIyMDB4MjAwIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJqYmlnMjAweDIwMFNlcSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiamJpZzIwMHgyMDBQcm9nIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJqYmlnMzAweDMwMFNlcSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiamJpZzMwMHgzMDBQcm9nIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkaWdQaG90b0xvdyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZGlnUGhvdG9NZWRTZXEiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRpZ1Bob3RvTWVkUHJvZyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZGlnUGhvdG9IaWdoU2VxIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkaWdQaG90b0hpZ2hQcm9nIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVDg0UHJvZmlsZVtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoInQ4NFVucmVzdHJpY3RlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0ODRSZXN0cmljdGVkIikgU0VRLCAwLCAxOSwgMTksIFNLSVAgfCBFWFQsIDAsCisJIF9UODRQcm9maWxlX3Q4NFJlc3RyaWN0ZWR9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0RhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25fdDg0W10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJ0ODRQcm90b2NvbCIpIENIT0lDRSwgMywgNywgMTQsIFNLSVAgfCBFWFQsIDAsCisJIF9EYXRhUHJvdG9jb2xDYXBhYmlsaXR5fSwKKwl7Rk5BTUUoInQ4NFByb2ZpbGUiKSBDSE9JQ0UsIDEsIDIsIDIsIFNLSVAsIDAsIF9UODRQcm9maWxlfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9EYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uX25scGlkW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJubHBpZFByb3RvY29sIikgQ0hPSUNFLCAzLCA3LCAxNCwgU0tJUCB8IEVYVCwgMCwKKwkgX0RhdGFQcm90b2NvbENhcGFiaWxpdHl9LAorCXtGTkFNRSgibmxwaWREYXRhIikgT0NUU1RSLCBTRU1JLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9EYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmQiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsCisJIF9IMjQ1X05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoInQxMjAiKSBDSE9JQ0UsIDMsIDcsIDE0LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKERhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb24sIHQxMjApLAorCSBfRGF0YVByb3RvY29sQ2FwYWJpbGl0eX0sCisJe0ZOQU1FKCJkc20tY2MiKSBDSE9JQ0UsIDMsIDcsIDE0LCBTS0lQIHwgRVhULCAwLAorCSBfRGF0YVByb3RvY29sQ2FwYWJpbGl0eX0sCisJe0ZOQU1FKCJ1c2VyRGF0YSIpIENIT0lDRSwgMywgNywgMTQsIFNLSVAgfCBFWFQsIDAsCisJIF9EYXRhUHJvdG9jb2xDYXBhYmlsaXR5fSwKKwl7Rk5BTUUoInQ4NCIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwKKwkgX0RhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25fdDg0fSwKKwl7Rk5BTUUoInQ0MzQiKSBDSE9JQ0UsIDMsIDcsIDE0LCBTS0lQIHwgRVhULCAwLAorCSBfRGF0YVByb3RvY29sQ2FwYWJpbGl0eX0sCisJe0ZOQU1FKCJoMjI0IikgQ0hPSUNFLCAzLCA3LCAxNCwgU0tJUCB8IEVYVCwgMCwKKwkgX0RhdGFQcm90b2NvbENhcGFiaWxpdHl9LAorCXtGTkFNRSgibmxwaWQiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsCisJIF9EYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uX25scGlkfSwKKwl7Rk5BTUUoImRzdmRDb250cm9sIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImgyMjJEYXRhUGFydGl0aW9uaW5nIikgQ0hPSUNFLCAzLCA3LCAxNCwgU0tJUCB8IEVYVCwgMCwKKwkgX0RhdGFQcm90b2NvbENhcGFiaWxpdHl9LAorCXtGTkFNRSgidDMwZmF4IikgQ0hPSUNFLCAzLCA3LCAxNCwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0MTQwIikgQ0hPSUNFLCAzLCA3LCAxNCwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0MzhmYXgiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ2VuZXJpY0RhdGFDYXBhYmlsaXR5IikgU0VRLCA1LCA2LCA2LCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9EYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5W10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJhcHBsaWNhdGlvbiIpIENIT0lDRSwgNCwgMTAsIDE0LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKERhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHksIGFwcGxpY2F0aW9uKSwKKwkgX0RhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb259LAorCXtGTkFNRSgibWF4Qml0UmF0ZSIpIElOVCwgQ09OUywgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfRW5jcnlwdGlvbk1vZGVbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZCIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwKKwkgX0gyNDVfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgiaDIzM0VuY3J5cHRpb24iKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0RhdGFUeXBlW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmQiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsCisJIF9IMjQ1X05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoIm51bGxEYXRhIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInZpZGVvRGF0YSIpIENIT0lDRSwgMywgNSwgNiwgU0tJUCB8IEVYVCwgMCwgX1ZpZGVvQ2FwYWJpbGl0eX0sCisJe0ZOQU1FKCJhdWRpb0RhdGEiKSBDSE9JQ0UsIDQsIDE0LCAyMiwgU0tJUCB8IEVYVCwgMCwKKwkgX0F1ZGlvQ2FwYWJpbGl0eX0sCisJe0ZOQU1FKCJkYXRhIikgU0VRLCAwLCAyLCAyLCBERUNPREUgfCBFWFQsIG9mZnNldG9mKERhdGFUeXBlLCBkYXRhKSwKKwkgX0RhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHl9LAorCXtGTkFNRSgiZW5jcnlwdGlvbkRhdGEiKSBDSE9JQ0UsIDEsIDIsIDIsIFNLSVAgfCBFWFQsIDAsCisJIF9FbmNyeXB0aW9uTW9kZX0sCisJe0ZOQU1FKCJoMjM1Q29udHJvbCIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJoMjM1TWVkaWEiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibXVsdGlwbGV4ZWRTdHJlYW0iKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gyMjJMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInJlc291cmNlSUQiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgic3ViQ2hhbm5lbElEIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInBjci1waWQiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicHJvZ3JhbURlc2NyaXB0b3JzIikgT0NUU1RSLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInN0cmVhbURlc2NyaXB0b3JzIikgT0NUU1RSLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMjIzTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX2FkYXB0YXRpb25MYXllclR5cGVfYWwzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJjb250cm9sRmllbGRPY3RldHMiKSBJTlQsIDIsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgic2VuZEJ1ZmZlclNpemUiKSBJTlQsIENPTlMsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gyMjNMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfYWRhcHRhdGlvbkxheWVyVHlwZVtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkIikgU0VRLCAwLCAyLCAyLCBTS0lQLCAwLAorCSBfSDI0NV9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCisJe0ZOQU1FKCJhbDFGcmFtZWQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWwxTm90RnJhbWVkIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImFsMldpdGhvdXRTZXF1ZW5jZU51bWJlcnMiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWwyV2l0aFNlcXVlbmNlTnVtYmVycyIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhbDMiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsCisJIF9IMjIzTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX2FkYXB0YXRpb25MYXllclR5cGVfYWwzfSwKKwl7Rk5BTUUoImFsMU0iKSBTRVEsIDAsIDcsIDgsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWwyTSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhbDNNIikgU0VRLCAwLCA1LCA2LCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMjIzTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJhZGFwdGF0aW9uTGF5ZXJUeXBlIikgQ0hPSUNFLCAzLCA2LCA5LCBTS0lQIHwgRVhULCAwLAorCSBfSDIyM0xvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19hZGFwdGF0aW9uTGF5ZXJUeXBlfSwKKwl7Rk5BTUUoInNlZ21lbnRhYmxlRmxhZyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NSQ0xlbmd0aFtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoImNyYzhiaXQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiY3JjMTZiaXQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiY3JjMzJiaXQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1Y3NkhETENQYXJhbWV0ZXJzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJjcmNMZW5ndGgiKSBDSE9JQ0UsIDIsIDMsIDMsIFNLSVAgfCBFWFQsIDAsIF9DUkNMZW5ndGh9LAorCXtGTkFNRSgibjQwMSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJsb29wYmFja1Rlc3RQcm9jZWR1cmUiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9WNzZMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfc3VzcGVuZFJlc3VtZVtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoIm5vU3VzcGVuZFJlc3VtZSIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzdXNwZW5kUmVzdW1ld0FkZHJlc3MiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgic3VzcGVuZFJlc3VtZXdvQWRkcmVzcyIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVjc2TG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX21vZGVfZVJNX3JlY292ZXJ5W10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgicmVqIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNSRUoiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibVNSRUoiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1Y3NkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tb2RlX2VSTVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgid2luZG93U2l6ZSIpIElOVCwgNywgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyZWNvdmVyeSIpIENIT0lDRSwgMiwgMywgMywgU0tJUCB8IEVYVCwgMCwKKwkgX1Y3NkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tb2RlX2VSTV9yZWNvdmVyeX0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVjc2TG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX21vZGVbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJlUk0iKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBFWFQsIDAsCisJIF9WNzZMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbW9kZV9lUk19LAorCXtGTkFNRSgidU5FUk0iKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1Y3NVBhcmFtZXRlcnNbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImF1ZGlvSGVhZGVyUHJlc2VudCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1Y3NkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgiaGRsY1BhcmFtZXRlcnMiKSBTRVEsIDAsIDMsIDMsIFNLSVAgfCBFWFQsIDAsCisJIF9WNzZIRExDUGFyYW1ldGVyc30sCisJe0ZOQU1FKCJzdXNwZW5kUmVzdW1lIikgQ0hPSUNFLCAyLCAzLCAzLCBTS0lQIHwgRVhULCAwLAorCSBfVjc2TG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX3N1c3BlbmRSZXN1bWV9LAorCXtGTkFNRSgidUlIIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtb2RlIikgQ0hPSUNFLCAxLCAyLCAyLCBTS0lQIHwgRVhULCAwLAorCSBfVjc2TG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX21vZGV9LAorCXtGTkFNRSgidjc1UGFyYW1ldGVycyIpIFNFUSwgMCwgMSwgMSwgU0tJUCB8IEVYVCwgMCwgX1Y3NVBhcmFtZXRlcnN9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX25vblN0YW5kYXJkW10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgU0VRLCAwLCAyLCAyLCBTS0lQLCAwLCBfSDI0NV9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVW5pY2FzdEFkZHJlc3NfaVBBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJuZXR3b3JrIikgT0NUU1RSLCBGSVhELCA0LCAwLCBERUNPREUsCisJIG9mZnNldG9mKFVuaWNhc3RBZGRyZXNzX2lQQWRkcmVzcywgbmV0d29yayksIE5VTEx9LAorCXtGTkFNRSgidHNhcElkZW50aWZpZXIiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1VuaWNhc3RBZGRyZXNzX2lQWEFkZHJlc3NbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoIm5vZGUiKSBPQ1RTVFIsIEZJWEQsIDYsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibmV0bnVtIikgT0NUU1RSLCBGSVhELCA0LCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRzYXBJZGVudGlmaWVyIikgT0NUU1RSLCBGSVhELCAyLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9VbmljYXN0QWRkcmVzc19pUDZBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJuZXR3b3JrIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0c2FwSWRlbnRpZmllciIpIElOVCwgV09SRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVW5pY2FzdEFkZHJlc3NfaVBTb3VyY2VSb3V0ZUFkZHJlc3Nfcm91dGluZ1tdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoInN0cmljdCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJsb29zZSIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVW5pY2FzdEFkZHJlc3NfaVBTb3VyY2VSb3V0ZUFkZHJlc3Nfcm91dGVbXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBPQ1RTVFIsIEZJWEQsIDQsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1VuaWNhc3RBZGRyZXNzX2lQU291cmNlUm91dGVBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJyb3V0aW5nIikgQ0hPSUNFLCAxLCAyLCAyLCBTS0lQLCAwLAorCSBfVW5pY2FzdEFkZHJlc3NfaVBTb3VyY2VSb3V0ZUFkZHJlc3Nfcm91dGluZ30sCisJe0ZOQU1FKCJuZXR3b3JrIikgT0NUU1RSLCBGSVhELCA0LCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRzYXBJZGVudGlmaWVyIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJvdXRlIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAsIDAsCisJIF9VbmljYXN0QWRkcmVzc19pUFNvdXJjZVJvdXRlQWRkcmVzc19yb3V0ZX0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVW5pY2FzdEFkZHJlc3NbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJpUEFkZHJlc3MiKSBTRVEsIDAsIDIsIDIsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoVW5pY2FzdEFkZHJlc3MsIGlQQWRkcmVzcyksIF9VbmljYXN0QWRkcmVzc19pUEFkZHJlc3N9LAorCXtGTkFNRSgiaVBYQWRkcmVzcyIpIFNFUSwgMCwgMywgMywgU0tJUCB8IEVYVCwgMCwKKwkgX1VuaWNhc3RBZGRyZXNzX2lQWEFkZHJlc3N9LAorCXtGTkFNRSgiaVA2QWRkcmVzcyIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IEVYVCwgMCwKKwkgX1VuaWNhc3RBZGRyZXNzX2lQNkFkZHJlc3N9LAorCXtGTkFNRSgibmV0QmlvcyIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaVBTb3VyY2VSb3V0ZUFkZHJlc3MiKSBTRVEsIDAsIDQsIDQsIFNLSVAgfCBFWFQsIDAsCisJIF9VbmljYXN0QWRkcmVzc19pUFNvdXJjZVJvdXRlQWRkcmVzc30sCisJe0ZOQU1FKCJuc2FwIikgT0NUU1RSLCA1LCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkQWRkcmVzcyIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfTXVsdGljYXN0QWRkcmVzc19pUEFkZHJlc3NbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoIm5ldHdvcmsiKSBPQ1RTVFIsIEZJWEQsIDQsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidHNhcElkZW50aWZpZXIiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX011bHRpY2FzdEFkZHJlc3NfaVA2QWRkcmVzc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibmV0d29yayIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidHNhcElkZW50aWZpZXIiKSBJTlQsIFdPUkQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX011bHRpY2FzdEFkZHJlc3NbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJpUEFkZHJlc3MiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBFWFQsIDAsCisJIF9NdWx0aWNhc3RBZGRyZXNzX2lQQWRkcmVzc30sCisJe0ZOQU1FKCJpUDZBZGRyZXNzIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgRVhULCAwLAorCSBfTXVsdGljYXN0QWRkcmVzc19pUDZBZGRyZXNzfSwKKwl7Rk5BTUUoIm5zYXAiKSBPQ1RTVFIsIDUsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibm9uU3RhbmRhcmRBZGRyZXNzIikgU0VRLCAwLCAyLCAyLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMjQ1X1RyYW5zcG9ydEFkZHJlc3NbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJ1bmljYXN0QWRkcmVzcyIpIENIT0lDRSwgMywgNSwgNywgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihIMjQ1X1RyYW5zcG9ydEFkZHJlc3MsIHVuaWNhc3RBZGRyZXNzKSwgX1VuaWNhc3RBZGRyZXNzfSwKKwl7Rk5BTUUoIm11bHRpY2FzdEFkZHJlc3MiKSBDSE9JQ0UsIDEsIDIsIDQsIFNLSVAgfCBFWFQsIDAsCisJIF9NdWx0aWNhc3RBZGRyZXNzfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmQiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKKwkgX0gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX25vblN0YW5kYXJkfSwKKwl7Rk5BTUUoInNlc3Npb25JRCIpIElOVCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhc3NvY2lhdGVkU2Vzc2lvbklEIikgSU5ULCA4LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm1lZGlhQ2hhbm5lbCIpIENIT0lDRSwgMSwgMiwgMiwgREVDT0RFIHwgRVhUIHwgT1BULAorCSBvZmZzZXRvZihIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywgbWVkaWFDaGFubmVsKSwKKwkgX0gyNDVfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJtZWRpYUd1YXJhbnRlZWREZWxpdmVyeSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgibWVkaWFDb250cm9sQ2hhbm5lbCIpIENIT0lDRSwgMSwgMiwgMiwgREVDT0RFIHwgRVhUIHwgT1BULAorCSBvZmZzZXRvZihIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywgbWVkaWFDb250cm9sQ2hhbm5lbCksCisJIF9IMjQ1X1RyYW5zcG9ydEFkZHJlc3N9LAorCXtGTkFNRSgibWVkaWFDb250cm9sR3VhcmFudGVlZERlbGl2ZXJ5IikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCB8IE9QVCwKKwkgMCwgTlVMTH0sCisJe0ZOQU1FKCJzaWxlbmNlU3VwcHJlc3Npb24iKSBCT09MLCBGSVhELCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlc3RpbmF0aW9uIikgU0VRLCAwLCAyLCAyLCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImR5bmFtaWNSVFBQYXlsb2FkVHlwZSIpIElOVCwgNSwgOTYsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibWVkaWFQYWNrZXRpemF0aW9uIikgQ0hPSUNFLCAwLCAxLCAyLCBTVE9QIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInRyYW5zcG9ydENhcGFiaWxpdHkiKSBTRVEsIDMsIDMsIDMsIFNUT1AgfCBFWFQgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgicmVkdW5kYW5jeUVuY29kaW5nIikgU0VRLCAxLCAyLCAyLCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNvdXJjZSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbXVsdGlwbGV4UGFyYW1ldGVyc1tdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoImgyMjJMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMiKSBTRVEsIDMsIDUsIDUsIFNLSVAgfCBFWFQsIDAsCisJIF9IMjIyTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSwKKwl7Rk5BTUUoImgyMjNMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBFWFQsIDAsCisJIF9IMjIzTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSwKKwl7Rk5BTUUoInY3NkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyIpIFNFUSwgMCwgNSwgNSwgU0tJUCB8IEVYVCwgMCwKKwkgX1Y3NkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc30sCisJe0ZOQU1FKCJoMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyIpIFNFUSwgMTAsIDExLCAxNCwgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZgorCSAoT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbXVsdGlwbGV4UGFyYW1ldGVycywKKwkgIGgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSwgX0gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzfSwKKwl7Rk5BTUUoIm5vbmUiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX09wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJwb3J0TnVtYmVyIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRhdGFUeXBlIikgQ0hPSUNFLCAzLCA2LCA5LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLAorCQkgIGRhdGFUeXBlKSwgX0RhdGFUeXBlfSwKKwl7Rk5BTUUoIm11bHRpcGxleFBhcmFtZXRlcnMiKSBDSE9JQ0UsIDIsIDMsIDUsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMsCisJCSAgbXVsdGlwbGV4UGFyYW1ldGVycyksCisJIF9PcGVuTG9naWNhbENoYW5uZWxfZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzfSwKKwl7Rk5BTUUoImZvcndhcmRMb2dpY2FsQ2hhbm5lbERlcGVuZGVuY3kiKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAgfCBPUFQsCisJIDAsIE5VTEx9LAorCXtGTkFNRSgicmVwbGFjZW1lbnRGb3IiKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX09wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJoMjIzTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgRVhULCAwLAorCSBfSDIyM0xvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc30sCisJe0ZOQU1FKCJ2NzZMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMiKSBTRVEsIDAsIDUsIDUsIFNLSVAgfCBFWFQsIDAsCisJIF9WNzZMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnN9LAorCXtGTkFNRSgiaDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMiKSBTRVEsIDEwLCAxMSwgMTQsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YKKwkgKE9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMsCisJICBoMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyksIF9IMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc30sCit9OworCitzdGF0aWMgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImRhdGFUeXBlIikgQ0hPSUNFLCAzLCA2LCA5LCBTS0lQIHwgRVhULCAwLCBfRGF0YVR5cGV9LAorCXtGTkFNRSgibXVsdGlwbGV4UGFyYW1ldGVycyIpIENIT0lDRSwgMSwgMiwgMywgREVDT0RFIHwgRVhUIHwgT1BULAorCSBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWxfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywKKwkJICBtdWx0aXBsZXhQYXJhbWV0ZXJzKSwKKwkgX09wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnN9LAorCXtGTkFNRSgicmV2ZXJzZUxvZ2ljYWxDaGFubmVsRGVwZW5kZW5jeSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCB8IE9QVCwKKwkgMCwgTlVMTH0sCisJe0ZOQU1FKCJyZXBsYWNlbWVudEZvciIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnNfZGlzdHJpYnV0aW9uW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgidW5pY2FzdCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtdWx0aWNhc3QiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1EyOTMxQWRkcmVzc19hZGRyZXNzW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgiaW50ZXJuYXRpb25hbE51bWJlciIpIE5VTVNUUiwgNCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJuc2FwQWRkcmVzcyIpIE9DVFNUUiwgNSwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfUTI5MzFBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJhZGRyZXNzIikgQ0hPSUNFLCAxLCAyLCAyLCBTS0lQIHwgRVhULCAwLAorCSBfUTI5MzFBZGRyZXNzX2FkZHJlc3N9LAorCXtGTkFNRSgic3ViYWRkcmVzcyIpIE9DVFNUUiwgNSwgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnNfbmV0d29ya0FkZHJlc3NbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJxMjkzMUFkZHJlc3MiKSBTRVEsIDEsIDIsIDIsIFNLSVAgfCBFWFQsIDAsIF9RMjkzMUFkZHJlc3N9LAorCXtGTkFNRSgiZTE2NEFkZHJlc3MiKSBOVU1ER1QsIDcsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibG9jYWxBcmVhQWRkcmVzcyIpIENIT0lDRSwgMSwgMiwgMiwgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihOZXR3b3JrQWNjZXNzUGFyYW1ldGVyc19uZXR3b3JrQWRkcmVzcywgbG9jYWxBcmVhQWRkcmVzcyksCisJIF9IMjQ1X1RyYW5zcG9ydEFkZHJlc3N9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX05ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJkaXN0cmlidXRpb24iKSBDSE9JQ0UsIDEsIDIsIDIsIFNLSVAgfCBFWFQgfCBPUFQsIDAsCisJIF9OZXR3b3JrQWNjZXNzUGFyYW1ldGVyc19kaXN0cmlidXRpb259LAorCXtGTkFNRSgibmV0d29ya0FkZHJlc3MiKSBDSE9JQ0UsIDIsIDMsIDMsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnMsIG5ldHdvcmtBZGRyZXNzKSwKKwkgX05ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzX25ldHdvcmtBZGRyZXNzfSwKKwl7Rk5BTUUoImFzc29jaWF0ZUNvbmZlcmVuY2UiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImV4dGVybmFsUmVmZXJlbmNlIikgT0NUU1RSLCA4LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInQxMjBTZXR1cFByb2NlZHVyZSIpIENIT0lDRSwgMiwgMywgMywgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJmb3J3YXJkTG9naWNhbENoYW5uZWxOdW1iZXIiKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyIpIFNFUSwgMSwgMywgNSwgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWwsIGZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMpLAorCSBfT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnN9LAorCXtGTkFNRSgicmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyIpIFNFUSwgMSwgMiwgNCwKKwkgREVDT0RFIHwgRVhUIHwgT1BULCBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWwsCisJCQkJICAgICAgcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyksCisJIF9PcGVuTG9naWNhbENoYW5uZWxfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc30sCisJe0ZOQU1FKCJzZXBhcmF0ZVN0YWNrIikgU0VRLCAyLCA0LCA1LCBERUNPREUgfCBFWFQgfCBPUFQsCisJIG9mZnNldG9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCwgc2VwYXJhdGVTdGFjayksCisJIF9OZXR3b3JrQWNjZXNzUGFyYW1ldGVyc30sCisJe0ZOQU1FKCJlbmNyeXB0aW9uU3luYyIpIFNFUSwgMiwgNCwgNCwgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfU2V0dXBfVVVJRV9mYXN0U3RhcnRbXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBTRVEsIDEsIDMsIDUsIERFQ09ERSB8IE9QRU4gfCBFWFQsCisJIHNpemVvZihPcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfQorCSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9TZXR1cF9VVUlFW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJwcm90b2NvbElkZW50aWZpZXIiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaDI0NUFkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCwKKwkgb2Zmc2V0b2YoU2V0dXBfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJzb3VyY2VBZGRyZXNzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsCisJIF9TZXR1cF9VVUlFX3NvdXJjZUFkZHJlc3N9LAorCXtGTkFNRSgic291cmNlSW5mbyIpIFNFUSwgNiwgOCwgMTAsIFNLSVAgfCBFWFQsIDAsIF9FbmRwb2ludFR5cGV9LAorCXtGTkFNRSgiZGVzdGluYXRpb25BZGRyZXNzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsCisJIF9TZXR1cF9VVUlFX2Rlc3RpbmF0aW9uQWRkcmVzc30sCisJe0ZOQU1FKCJkZXN0Q2FsbFNpZ25hbEFkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCwKKwkgb2Zmc2V0b2YoU2V0dXBfVVVJRSwgZGVzdENhbGxTaWduYWxBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LAorCXtGTkFNRSgiZGVzdEV4dHJhQ2FsbEluZm8iKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKKwkgX1NldHVwX1VVSUVfZGVzdEV4dHJhQ2FsbEluZm99LAorCXtGTkFNRSgiZGVzdEV4dHJhQ1JWIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsCisJIF9TZXR1cF9VVUlFX2Rlc3RFeHRyYUNSVn0sCisJe0ZOQU1FKCJhY3RpdmVNQyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiY29uZmVyZW5jZUlEIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjb25mZXJlbmNlR29hbCIpIENIT0lDRSwgMiwgMywgNSwgU0tJUCB8IEVYVCwgMCwKKwkgX1NldHVwX1VVSUVfY29uZmVyZW5jZUdvYWx9LAorCXtGTkFNRSgiY2FsbFNlcnZpY2VzIikgU0VRLCAwLCA4LCA4LCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBfUXNlcmllc09wdGlvbnN9LAorCXtGTkFNRSgiY2FsbFR5cGUiKSBDSE9JQ0UsIDIsIDQsIDQsIFNLSVAgfCBFWFQsIDAsIF9DYWxsVHlwZX0sCisJe0ZOQU1FKCJzb3VyY2VDYWxsU2lnbmFsQWRkcmVzcyIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULAorCSBvZmZzZXRvZihTZXR1cF9VVUlFLCBzb3VyY2VDYWxsU2lnbmFsQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSwKKwl7Rk5BTUUoInJlbW90ZUV4dGVuc2lvbkFkZHJlc3MiKSBDSE9JQ0UsIDEsIDIsIDcsIFNLSVAgfCBFWFQgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgiY2FsbElkZW50aWZpZXIiKSBTRVEsIDAsIDEsIDEsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaDI0NVNlY3VyaXR5Q2FwYWJpbGl0eSIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInRva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNyeXB0b1Rva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZhc3RTdGFydCIpIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULAorCSBvZmZzZXRvZihTZXR1cF9VVUlFLCBmYXN0U3RhcnQpLCBfU2V0dXBfVVVJRV9mYXN0U3RhcnR9LAorCXtGTkFNRSgibWVkaWFXYWl0Rm9yQ29ubmVjdCIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2FuT3ZlcmxhcFNlbmQiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImVuZHBvaW50SWRlbnRpZmllciIpIEJNUFNUUiwgNywgMSwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtdWx0aXBsZUNhbGxzIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtYWludGFpbkNvbm5lY3Rpb24iKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNvbm5lY3Rpb25QYXJhbWV0ZXJzIikgU0VRLCAwLCAzLCAzLCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImxhbmd1YWdlIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicHJlc2VudGF0aW9uSW5kaWNhdG9yIikgQ0hPSUNFLCAyLCAzLCAzLCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInNjcmVlbmluZ0luZGljYXRvciIpIEVOVU0sIDIsIDAsIDAsIFNLSVAgfCBFWFQgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgic2VydmljZUNvbnRyb2wiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzeW1tZXRyaWNPcGVyYXRpb25SZXF1aXJlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJjYXBhY2l0eSIpIFNFUSwgMiwgMiwgMiwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjaXJjdWl0SW5mbyIpIFNFUSwgMywgMywgMywgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXNpcmVkUHJvdG9jb2xzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibmVlZGVkRmVhdHVyZXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXNpcmVkRmVhdHVyZXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzdXBwb3J0ZWRGZWF0dXJlcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInBhcmFsbGVsSDI0NUNvbnRyb2wiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhZGRpdGlvbmFsU291cmNlQWRkcmVzc2VzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsCisJIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NhbGxQcm9jZWVkaW5nX1VVSUVfZmFzdFN0YXJ0W10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBPUEVOIHwgRVhULAorCSBzaXplb2YoT3BlbkxvZ2ljYWxDaGFubmVsKSwgX09wZW5Mb2dpY2FsQ2hhbm5lbH0KKwksCit9OworCitzdGF0aWMgZmllbGRfdCBfQ2FsbFByb2NlZWRpbmdfVVVJRVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicHJvdG9jb2xJZGVudGlmaWVyIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlc3RpbmF0aW9uSW5mbyIpIFNFUSwgNiwgOCwgMTAsIFNLSVAgfCBFWFQsIDAsCisJIF9FbmRwb2ludFR5cGV9LAorCXtGTkFNRSgiaDI0NUFkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCwKKwkgb2Zmc2V0b2YoQ2FsbFByb2NlZWRpbmdfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJjYWxsSWRlbnRpZmllciIpIFNFUSwgMCwgMSwgMSwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJoMjQ1U2VjdXJpdHlNb2RlIikgQ0hPSUNFLCAyLCA0LCA0LCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInRva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNyeXB0b1Rva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZhc3RTdGFydCIpIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULAorCSBvZmZzZXRvZihDYWxsUHJvY2VlZGluZ19VVUlFLCBmYXN0U3RhcnQpLAorCSBfQ2FsbFByb2NlZWRpbmdfVVVJRV9mYXN0U3RhcnR9LAorCXtGTkFNRSgibXVsdGlwbGVDYWxscyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibWFpbnRhaW5Db25uZWN0aW9uIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmYXN0Q29ubmVjdFJlZnVzZWQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZmVhdHVyZVNldCIpIFNFUSwgMywgNCwgNCwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQ29ubmVjdF9VVUlFX2Zhc3RTdGFydFtdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIFNFUSwgMSwgMywgNSwgREVDT0RFIHwgT1BFTiB8IEVYVCwKKwkgc2l6ZW9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCksIF9PcGVuTG9naWNhbENoYW5uZWx9CisJLAorfTsKKworc3RhdGljIGZpZWxkX3QgX0Nvbm5lY3RfVVVJRVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicHJvdG9jb2xJZGVudGlmaWVyIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImgyNDVBZGRyZXNzIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQgfCBPUFQsCisJIG9mZnNldG9mKENvbm5lY3RfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJkZXN0aW5hdGlvbkluZm8iKSBTRVEsIDYsIDgsIDEwLCBTS0lQIHwgRVhULCAwLAorCSBfRW5kcG9pbnRUeXBlfSwKKwl7Rk5BTUUoImNvbmZlcmVuY2VJRCIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2FsbElkZW50aWZpZXIiKSBTRVEsIDAsIDEsIDEsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaDI0NVNlY3VyaXR5TW9kZSIpIENIT0lDRSwgMiwgNCwgNCwgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJ0b2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjcnlwdG9Ub2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmYXN0U3RhcnQiKSBTRVFPRiwgU0VNSSwgMCwgMzAsIERFQ09ERSB8IE9QVCwKKwkgb2Zmc2V0b2YoQ29ubmVjdF9VVUlFLCBmYXN0U3RhcnQpLCBfQ29ubmVjdF9VVUlFX2Zhc3RTdGFydH0sCisJe0ZOQU1FKCJtdWx0aXBsZUNhbGxzIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtYWludGFpbkNvbm5lY3Rpb24iKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImxhbmd1YWdlIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY29ubmVjdGVkQWRkcmVzcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInByZXNlbnRhdGlvbkluZGljYXRvciIpIENIT0lDRSwgMiwgMywgMywgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJzY3JlZW5pbmdJbmRpY2F0b3IiKSBFTlVNLCAyLCAwLCAwLCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImZhc3RDb25uZWN0UmVmdXNlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzZXJ2aWNlQ29udHJvbCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhcGFjaXR5IikgU0VRLCAyLCAyLCAyLCBTS0lQIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZlYXR1cmVTZXQiKSBTRVEsIDMsIDQsIDQsIFNLSVAgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0FsZXJ0aW5nX1VVSUVfZmFzdFN0YXJ0W10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBPUEVOIHwgRVhULAorCSBzaXplb2YoT3BlbkxvZ2ljYWxDaGFubmVsKSwgX09wZW5Mb2dpY2FsQ2hhbm5lbH0KKwksCit9OworCitzdGF0aWMgZmllbGRfdCBfQWxlcnRpbmdfVVVJRVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicHJvdG9jb2xJZGVudGlmaWVyIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlc3RpbmF0aW9uSW5mbyIpIFNFUSwgNiwgOCwgMTAsIFNLSVAgfCBFWFQsIDAsCisJIF9FbmRwb2ludFR5cGV9LAorCXtGTkFNRSgiaDI0NUFkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCwKKwkgb2Zmc2V0b2YoQWxlcnRpbmdfVVVJRSwgaDI0NUFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJjYWxsSWRlbnRpZmllciIpIFNFUSwgMCwgMSwgMSwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJoMjQ1U2VjdXJpdHlNb2RlIikgQ0hPSUNFLCAyLCA0LCA0LCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInRva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNyeXB0b1Rva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZhc3RTdGFydCIpIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULAorCSBvZmZzZXRvZihBbGVydGluZ19VVUlFLCBmYXN0U3RhcnQpLCBfQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnR9LAorCXtGTkFNRSgibXVsdGlwbGVDYWxscyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibWFpbnRhaW5Db25uZWN0aW9uIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhbGVydGluZ0FkZHJlc3MiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwcmVzZW50YXRpb25JbmRpY2F0b3IiKSBDSE9JQ0UsIDIsIDMsIDMsIFNLSVAgfCBFWFQgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgic2NyZWVuaW5nSW5kaWNhdG9yIikgRU5VTSwgMiwgMCwgMCwgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJmYXN0Q29ubmVjdFJlZnVzZWQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic2VydmljZUNvbnRyb2wiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYXBhY2l0eSIpIFNFUSwgMiwgMiwgMiwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmZWF0dXJlU2V0IikgU0VRLCAzLCA0LCA0LCBTS0lQIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9JbmZvcm1hdGlvbl9VVUlFX2Zhc3RTdGFydFtdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIFNFUSwgMSwgMywgNSwgREVDT0RFIHwgT1BFTiB8IEVYVCwKKwkgc2l6ZW9mKE9wZW5Mb2dpY2FsQ2hhbm5lbCksIF9PcGVuTG9naWNhbENoYW5uZWx9CisJLAorfTsKKworc3RhdGljIGZpZWxkX3QgX0luZm9ybWF0aW9uX1VVSUVbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInByb3RvY29sSWRlbnRpZmllciIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYWxsSWRlbnRpZmllciIpIFNFUSwgMCwgMSwgMSwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0b2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjcnlwdG9Ub2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmYXN0U3RhcnQiKSBTRVFPRiwgU0VNSSwgMCwgMzAsIERFQ09ERSB8IE9QVCwKKwkgb2Zmc2V0b2YoSW5mb3JtYXRpb25fVVVJRSwgZmFzdFN0YXJ0KSwgX0luZm9ybWF0aW9uX1VVSUVfZmFzdFN0YXJ0fSwKKwl7Rk5BTUUoImZhc3RDb25uZWN0UmVmdXNlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjaXJjdWl0SW5mbyIpIFNFUSwgMywgMywgMywgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfUmVsZWFzZUNvbXBsZXRlUmVhc29uW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgibm9CYW5kd2lkdGgiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ2F0ZWtlZXBlclJlc291cmNlcyIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ1bnJlYWNoYWJsZURlc3RpbmF0aW9uIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlc3RpbmF0aW9uUmVqZWN0aW9uIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImludmFsaWRSZXZpc2lvbiIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJub1Blcm1pc3Npb24iKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidW5yZWFjaGFibGVHYXRla2VlcGVyIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdhdGV3YXlSZXNvdXJjZXMiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYmFkRm9ybWF0QWRkcmVzcyIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhZGFwdGl2ZUJ1c3kiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaW5Db25mIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInVuZGVmaW5lZFJlYXNvbiIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmYWNpbGl0eUNhbGxEZWZsZWN0aW9uIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNlY3VyaXR5RGVuaWVkIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhbGxlZFBhcnR5Tm90UmVnaXN0ZXJlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYWxsZXJOb3RSZWdpc3RlcmVkIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5ld0Nvbm5lY3Rpb25OZWVkZWQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibm9uU3RhbmRhcmRSZWFzb24iKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicmVwbGFjZVdpdGhDb25mZXJlbmNlSW52aXRlIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJnZW5lcmljRGF0YVJlYXNvbiIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJuZWVkZWRGZWF0dXJlTm90U3VwcG9ydGVkIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInR1bm5lbGxlZFNpZ25hbGxpbmdSZWplY3RlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfUmVsZWFzZUNvbXBsZXRlX1VVSUVbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInByb3RvY29sSWRlbnRpZmllciIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyZWFzb24iKSBDSE9JQ0UsIDQsIDEyLCAyMiwgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgX1JlbGVhc2VDb21wbGV0ZVJlYXNvbn0sCisJe0ZOQU1FKCJjYWxsSWRlbnRpZmllciIpIFNFUSwgMCwgMSwgMSwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0b2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjcnlwdG9Ub2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJidXN5QWRkcmVzcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInByZXNlbnRhdGlvbkluZGljYXRvciIpIENIT0lDRSwgMiwgMywgMywgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJzY3JlZW5pbmdJbmRpY2F0b3IiKSBFTlVNLCAyLCAwLCAwLCBTS0lQIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImNhcGFjaXR5IikgU0VRLCAyLCAyLCAyLCBTS0lQIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNlcnZpY2VDb250cm9sIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZmVhdHVyZVNldCIpIFNFUSwgMywgNCwgNCwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfRmFjaWxpdHlfVVVJRV9hbHRlcm5hdGl2ZUFsaWFzQWRkcmVzc1tdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIENIT0lDRSwgMSwgMiwgNywgU0tJUCB8IEVYVCwgMCwgX0FsaWFzQWRkcmVzc30sCit9OworCitzdGF0aWMgZmllbGRfdCBfRmFjaWxpdHlSZWFzb25bXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJyb3V0ZUNhbGxUb0dhdGVrZWVwZXIiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2FsbEZvcndhcmRlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyb3V0ZUNhbGxUb01DIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInVuZGVmaW5lZFJlYXNvbiIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjb25mZXJlbmNlTGlzdENob2ljZSIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzdGFydEgyNDUiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibm9IMjQ1IikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5ld1Rva2VucyIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmZWF0dXJlU2V0VXBkYXRlIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZvcndhcmRlZEVsZW1lbnRzIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRyYW5zcG9ydGVkSW5mb3JtYXRpb24iKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0ZhY2lsaXR5X1VVSUVfZmFzdFN0YXJ0W10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBPUEVOIHwgRVhULAorCSBzaXplb2YoT3BlbkxvZ2ljYWxDaGFubmVsKSwgX09wZW5Mb2dpY2FsQ2hhbm5lbH0KKwksCit9OworCitzdGF0aWMgZmllbGRfdCBfRmFjaWxpdHlfVVVJRVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicHJvdG9jb2xJZGVudGlmaWVyIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImFsdGVybmF0aXZlQWRkcmVzcyIpIENIT0lDRSwgMywgNywgNywgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgX1RyYW5zcG9ydEFkZHJlc3N9LAorCXtGTkFNRSgiYWx0ZXJuYXRpdmVBbGlhc0FkZHJlc3MiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKKwkgX0ZhY2lsaXR5X1VVSUVfYWx0ZXJuYXRpdmVBbGlhc0FkZHJlc3N9LAorCXtGTkFNRSgiY29uZmVyZW5jZUlEIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyZWFzb24iKSBDSE9JQ0UsIDIsIDQsIDExLCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKEZhY2lsaXR5X1VVSUUsIHJlYXNvbiksIF9GYWNpbGl0eVJlYXNvbn0sCisJe0ZOQU1FKCJjYWxsSWRlbnRpZmllciIpIFNFUSwgMCwgMSwgMSwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXN0RXh0cmFDYWxsSW5mbyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJlbW90ZUV4dGVuc2lvbkFkZHJlc3MiKSBDSE9JQ0UsIDEsIDIsIDcsIFNLSVAgfCBFWFQgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgidG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY3J5cHRvVG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY29uZmVyZW5jZXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJoMjQ1QWRkcmVzcyIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULAorCSBvZmZzZXRvZihGYWNpbGl0eV9VVUlFLCBoMjQ1QWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSwKKwl7Rk5BTUUoImZhc3RTdGFydCIpIFNFUU9GLCBTRU1JLCAwLCAzMCwgREVDT0RFIHwgT1BULAorCSBvZmZzZXRvZihGYWNpbGl0eV9VVUlFLCBmYXN0U3RhcnQpLCBfRmFjaWxpdHlfVVVJRV9mYXN0U3RhcnR9LAorCXtGTkFNRSgibXVsdGlwbGVDYWxscyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibWFpbnRhaW5Db25uZWN0aW9uIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmYXN0Q29ubmVjdFJlZnVzZWQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic2VydmljZUNvbnRyb2wiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjaXJjdWl0SW5mbyIpIFNFUSwgMywgMywgMywgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmZWF0dXJlU2V0IikgU0VRLCAzLCA0LCA0LCBTS0lQIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlc3RpbmF0aW9uSW5mbyIpIFNFUSwgNiwgOCwgMTAsIFNLSVAgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaDI0NVNlY3VyaXR5TW9kZSIpIENIT0lDRSwgMiwgNCwgNCwgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQ2FsbElkZW50aWZpZXJbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImd1aWQiKSBPQ1RTVFIsIEZJWEQsIDE2LCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9TZWN1cml0eVNlcnZpY2VNb2RlW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmQiKSBTRVEsIDAsIDIsIDIsIFNLSVAsIDAsIF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCisJe0ZOQU1FKCJub25lIikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlZmF1bHQiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1NlY3VyaXR5Q2FwYWJpbGl0aWVzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZCIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoImVuY3J5cHRpb24iKSBDSE9JQ0UsIDIsIDMsIDMsIFNLSVAgfCBFWFQsIDAsCisJIF9TZWN1cml0eVNlcnZpY2VNb2RlfSwKKwl7Rk5BTUUoImF1dGhlbnRpY2F0b24iKSBDSE9JQ0UsIDIsIDMsIDMsIFNLSVAgfCBFWFQsIDAsCisJIF9TZWN1cml0eVNlcnZpY2VNb2RlfSwKKwl7Rk5BTUUoImludGVncml0eSIpIENIT0lDRSwgMiwgMywgMywgU0tJUCB8IEVYVCwgMCwKKwkgX1NlY3VyaXR5U2VydmljZU1vZGV9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gyNDVTZWN1cml0eVtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkIikgU0VRLCAwLCAyLCAyLCBTS0lQLCAwLCBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgibm9TZWN1cml0eSIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0bHMiKSBTRVEsIDEsIDQsIDQsIFNLSVAgfCBFWFQsIDAsIF9TZWN1cml0eUNhcGFiaWxpdGllc30sCisJe0ZOQU1FKCJpcHNlYyIpIFNFUSwgMSwgNCwgNCwgU0tJUCB8IEVYVCwgMCwgX1NlY3VyaXR5Q2FwYWJpbGl0aWVzfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9ESHNldFtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgiaGFsZmtleSIpIEJJVFNUUiwgV09SRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtb2RTaXplIikgQklUU1RSLCBXT1JELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdlbmVyYXRvciIpIEJJVFNUUiwgV09SRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfVHlwZWRDZXJ0aWZpY2F0ZVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgidHlwZSIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjZXJ0aWZpY2F0ZSIpIE9DVFNUUiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSDIzNV9Ob25TdGFuZGFyZFBhcmFtZXRlcltdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgibm9uU3RhbmRhcmRJZGVudGlmaWVyIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRhdGEiKSBPQ1RTVFIsIFNFTUksIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NsZWFyVG9rZW5bXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInRva2VuT0lEIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRpbWVTdGFtcCIpIElOVCwgQ09OUywgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwYXNzd29yZCIpIEJNUFNUUiwgNywgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkaGtleSIpIFNFUSwgMCwgMywgMywgU0tJUCB8IEVYVCB8IE9QVCwgMCwgX0RIc2V0fSwKKwl7Rk5BTUUoImNoYWxsZW5nZSIpIE9DVFNUUiwgNywgOCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyYW5kb20iKSBJTlQsIFVOQ08sIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2VydGlmaWNhdGUiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBFWFQgfCBPUFQsIDAsCisJIF9UeXBlZENlcnRpZmljYXRlfSwKKwl7Rk5BTUUoImdlbmVyYWxJRCIpIEJNUFNUUiwgNywgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJub25TdGFuZGFyZCIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX0gyMzVfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgiZWNrYXNkaGtleSIpIENIT0lDRSwgMSwgMiwgMiwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzZW5kZXJzSUQiKSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1Byb2dyZXNzX1VVSUVfdG9rZW5zW10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgU0VRLCA4LCA5LCAxMSwgU0tJUCB8IEVYVCwgMCwgX0NsZWFyVG9rZW59LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1BhcmFtc1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicmFuSW50IikgSU5ULCBVTkNPLCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIml2OCIpIE9DVFNUUiwgRklYRCwgOCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJpdjE2IikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQ3J5cHRvSDMyM1Rva2VuX2NyeXB0b0VQUHdkSGFzaF90b2tlbltdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgiYWxnb3JpdGhtT0lEIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInBhcmFtUyIpIFNFUSwgMiwgMiwgMywgU0tJUCB8IEVYVCwgMCwgX1BhcmFtc30sCisJe0ZOQU1FKCJoYXNoIikgQklUU1RSLCBTRU1JLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9DcnlwdG9IMzIzVG9rZW5fY3J5cHRvRVBQd2RIYXNoW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJhbGlhcyIpIENIT0lDRSwgMSwgMiwgNywgU0tJUCB8IEVYVCwgMCwgX0FsaWFzQWRkcmVzc30sCisJe0ZOQU1FKCJ0aW1lU3RhbXAiKSBJTlQsIENPTlMsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidG9rZW4iKSBTRVEsIDAsIDMsIDMsIFNLSVAsIDAsCisJIF9DcnlwdG9IMzIzVG9rZW5fY3J5cHRvRVBQd2RIYXNoX3Rva2VufSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9DcnlwdG9IMzIzVG9rZW5fY3J5cHRvR0tQd2RIYXNoX3Rva2VuW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJhbGdvcml0aG1PSUQiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicGFyYW1TIikgU0VRLCAyLCAyLCAzLCBTS0lQIHwgRVhULCAwLCBfUGFyYW1zfSwKKwl7Rk5BTUUoImhhc2giKSBCSVRTVFIsIFNFTUksIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NyeXB0b0gzMjNUb2tlbl9jcnlwdG9HS1B3ZEhhc2hbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImdhdGVrZWVwZXJJZCIpIEJNUFNUUiwgNywgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0aW1lU3RhbXAiKSBJTlQsIENPTlMsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgidG9rZW4iKSBTRVEsIDAsIDMsIDMsIFNLSVAsIDAsCisJIF9DcnlwdG9IMzIzVG9rZW5fY3J5cHRvR0tQd2RIYXNoX3Rva2VufSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9DcnlwdG9IMzIzVG9rZW5fY3J5cHRvRVBQd2RFbmNyW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJhbGdvcml0aG1PSUQiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicGFyYW1TIikgU0VRLCAyLCAyLCAzLCBTS0lQIHwgRVhULCAwLCBfUGFyYW1zfSwKKwl7Rk5BTUUoImVuY3J5cHRlZERhdGEiKSBPQ1RTVFIsIFNFTUksIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NyeXB0b0gzMjNUb2tlbl9jcnlwdG9HS1B3ZEVuY3JbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImFsZ29yaXRobU9JRCIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwYXJhbVMiKSBTRVEsIDIsIDIsIDMsIFNLSVAgfCBFWFQsIDAsIF9QYXJhbXN9LAorCXtGTkFNRSgiZW5jcnlwdGVkRGF0YSIpIE9DVFNUUiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQ3J5cHRvSDMyM1Rva2VuX2NyeXB0b0VQQ2VydFtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgidG9CZVNpZ25lZCIpIFNFUSwgOCwgOSwgMTEsIFNLSVAgfCBPUEVOIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImFsZ29yaXRobU9JRCIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwYXJhbVMiKSBTRVEsIDIsIDIsIDMsIFNLSVAgfCBFWFQsIDAsIF9QYXJhbXN9LAorCXtGTkFNRSgic2lnbmF0dXJlIikgQklUU1RSLCBTRU1JLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9DcnlwdG9IMzIzVG9rZW5fY3J5cHRvR0tDZXJ0W10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJ0b0JlU2lnbmVkIikgU0VRLCA4LCA5LCAxMSwgU0tJUCB8IE9QRU4gfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWxnb3JpdGhtT0lEIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInBhcmFtUyIpIFNFUSwgMiwgMiwgMywgU0tJUCB8IEVYVCwgMCwgX1BhcmFtc30sCisJe0ZOQU1FKCJzaWduYXR1cmUiKSBCSVRTVFIsIFNFTUksIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NyeXB0b0gzMjNUb2tlbl9jcnlwdG9GYXN0U3RhcnRbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInRvQmVTaWduZWQiKSBTRVEsIDgsIDksIDExLCBTS0lQIHwgT1BFTiB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhbGdvcml0aG1PSUQiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicGFyYW1TIikgU0VRLCAyLCAyLCAzLCBTS0lQIHwgRVhULCAwLCBfUGFyYW1zfSwKKwl7Rk5BTUUoInNpZ25hdHVyZSIpIEJJVFNUUiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQ3J5cHRvVG9rZW5fY3J5cHRvRW5jcnlwdGVkVG9rZW5fdG9rZW5bXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImFsZ29yaXRobU9JRCIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwYXJhbVMiKSBTRVEsIDIsIDIsIDMsIFNLSVAgfCBFWFQsIDAsIF9QYXJhbXN9LAorCXtGTkFNRSgiZW5jcnlwdGVkRGF0YSIpIE9DVFNUUiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQ3J5cHRvVG9rZW5fY3J5cHRvRW5jcnlwdGVkVG9rZW5bXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInRva2VuT0lEIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRva2VuIikgU0VRLCAwLCAzLCAzLCBTS0lQLCAwLAorCSBfQ3J5cHRvVG9rZW5fY3J5cHRvRW5jcnlwdGVkVG9rZW5fdG9rZW59LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NyeXB0b1Rva2VuX2NyeXB0b1NpZ25lZFRva2VuX3Rva2VuW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJ0b0JlU2lnbmVkIikgU0VRLCA4LCA5LCAxMSwgU0tJUCB8IE9QRU4gfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWxnb3JpdGhtT0lEIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInBhcmFtUyIpIFNFUSwgMiwgMiwgMywgU0tJUCB8IEVYVCwgMCwgX1BhcmFtc30sCisJe0ZOQU1FKCJzaWduYXR1cmUiKSBCSVRTVFIsIFNFTUksIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NyeXB0b1Rva2VuX2NyeXB0b1NpZ25lZFRva2VuW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJ0b2tlbk9JRCIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0b2tlbiIpIFNFUSwgMCwgNCwgNCwgU0tJUCwgMCwKKwkgX0NyeXB0b1Rva2VuX2NyeXB0b1NpZ25lZFRva2VuX3Rva2VufSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9DcnlwdG9Ub2tlbl9jcnlwdG9IYXNoZWRUb2tlbl90b2tlbltdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgiYWxnb3JpdGhtT0lEIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInBhcmFtUyIpIFNFUSwgMiwgMiwgMywgU0tJUCB8IEVYVCwgMCwgX1BhcmFtc30sCisJe0ZOQU1FKCJoYXNoIikgQklUU1RSLCBTRU1JLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9DcnlwdG9Ub2tlbl9jcnlwdG9IYXNoZWRUb2tlbltdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgidG9rZW5PSUQiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiaGFzaGVkVmFscyIpIFNFUSwgOCwgOSwgMTEsIFNLSVAgfCBFWFQsIDAsIF9DbGVhclRva2VufSwKKwl7Rk5BTUUoInRva2VuIikgU0VRLCAwLCAzLCAzLCBTS0lQLCAwLAorCSBfQ3J5cHRvVG9rZW5fY3J5cHRvSGFzaGVkVG9rZW5fdG9rZW59LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0NyeXB0b1Rva2VuX2NyeXB0b1B3ZEVuY3JbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoImFsZ29yaXRobU9JRCIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwYXJhbVMiKSBTRVEsIDIsIDIsIDMsIFNLSVAgfCBFWFQsIDAsIF9QYXJhbXN9LAorCXtGTkFNRSgiZW5jcnlwdGVkRGF0YSIpIE9DVFNUUiwgU0VNSSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQ3J5cHRvVG9rZW5bXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJjcnlwdG9FbmNyeXB0ZWRUb2tlbiIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwKKwkgX0NyeXB0b1Rva2VuX2NyeXB0b0VuY3J5cHRlZFRva2VufSwKKwl7Rk5BTUUoImNyeXB0b1NpZ25lZFRva2VuIikgU0VRLCAwLCAyLCAyLCBTS0lQLCAwLAorCSBfQ3J5cHRvVG9rZW5fY3J5cHRvU2lnbmVkVG9rZW59LAorCXtGTkFNRSgiY3J5cHRvSGFzaGVkVG9rZW4iKSBTRVEsIDAsIDMsIDMsIFNLSVAsIDAsCisJIF9DcnlwdG9Ub2tlbl9jcnlwdG9IYXNoZWRUb2tlbn0sCisJe0ZOQU1FKCJjcnlwdG9Qd2RFbmNyIikgU0VRLCAwLCAzLCAzLCBTS0lQLCAwLAorCSBfQ3J5cHRvVG9rZW5fY3J5cHRvUHdkRW5jcn0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQ3J5cHRvSDMyM1Rva2VuW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgiY3J5cHRvRVBQd2RIYXNoIikgU0VRLCAwLCAzLCAzLCBTS0lQLCAwLAorCSBfQ3J5cHRvSDMyM1Rva2VuX2NyeXB0b0VQUHdkSGFzaH0sCisJe0ZOQU1FKCJjcnlwdG9HS1B3ZEhhc2giKSBTRVEsIDAsIDMsIDMsIFNLSVAsIDAsCisJIF9DcnlwdG9IMzIzVG9rZW5fY3J5cHRvR0tQd2RIYXNofSwKKwl7Rk5BTUUoImNyeXB0b0VQUHdkRW5jciIpIFNFUSwgMCwgMywgMywgU0tJUCwgMCwKKwkgX0NyeXB0b0gzMjNUb2tlbl9jcnlwdG9FUFB3ZEVuY3J9LAorCXtGTkFNRSgiY3J5cHRvR0tQd2RFbmNyIikgU0VRLCAwLCAzLCAzLCBTS0lQLCAwLAorCSBfQ3J5cHRvSDMyM1Rva2VuX2NyeXB0b0dLUHdkRW5jcn0sCisJe0ZOQU1FKCJjcnlwdG9FUENlcnQiKSBTRVEsIDAsIDQsIDQsIFNLSVAsIDAsCisJIF9DcnlwdG9IMzIzVG9rZW5fY3J5cHRvRVBDZXJ0fSwKKwl7Rk5BTUUoImNyeXB0b0dLQ2VydCIpIFNFUSwgMCwgNCwgNCwgU0tJUCwgMCwKKwkgX0NyeXB0b0gzMjNUb2tlbl9jcnlwdG9HS0NlcnR9LAorCXtGTkFNRSgiY3J5cHRvRmFzdFN0YXJ0IikgU0VRLCAwLCA0LCA0LCBTS0lQLCAwLAorCSBfQ3J5cHRvSDMyM1Rva2VuX2NyeXB0b0Zhc3RTdGFydH0sCisJe0ZOQU1FKCJuZXN0ZWRjcnlwdG9Ub2tlbiIpIENIT0lDRSwgMiwgNCwgNCwgU0tJUCB8IEVYVCwgMCwKKwkgX0NyeXB0b1Rva2VufSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9Qcm9ncmVzc19VVUlFX2NyeXB0b1Rva2Vuc1tdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIENIT0lDRSwgMywgOCwgOCwgU0tJUCB8IEVYVCwgMCwgX0NyeXB0b0gzMjNUb2tlbn0sCit9OworCitzdGF0aWMgZmllbGRfdCBfUHJvZ3Jlc3NfVVVJRV9mYXN0U3RhcnRbXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBTRVEsIDEsIDMsIDUsIERFQ09ERSB8IE9QRU4gfCBFWFQsCisJIHNpemVvZihPcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfQorCSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9Qcm9ncmVzc19VVUlFW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJwcm90b2NvbElkZW50aWZpZXIiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZGVzdGluYXRpb25JbmZvIikgU0VRLCA2LCA4LCAxMCwgU0tJUCB8IEVYVCwgMCwKKwkgX0VuZHBvaW50VHlwZX0sCisJe0ZOQU1FKCJoMjQ1QWRkcmVzcyIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhUIHwgT1BULAorCSBvZmZzZXRvZihQcm9ncmVzc19VVUlFLCBoMjQ1QWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSwKKwl7Rk5BTUUoImNhbGxJZGVudGlmaWVyIikgU0VRLCAwLCAxLCAxLCBTS0lQIHwgRVhULCAwLAorCSBfQ2FsbElkZW50aWZpZXJ9LAorCXtGTkFNRSgiaDI0NVNlY3VyaXR5TW9kZSIpIENIT0lDRSwgMiwgNCwgNCwgU0tJUCB8IEVYVCB8IE9QVCwgMCwKKwkgX0gyNDVTZWN1cml0eX0sCisJe0ZOQU1FKCJ0b2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKKwkgX1Byb2dyZXNzX1VVSUVfdG9rZW5zfSwKKwl7Rk5BTUUoImNyeXB0b1Rva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLAorCSBfUHJvZ3Jlc3NfVVVJRV9jcnlwdG9Ub2tlbnN9LAorCXtGTkFNRSgiZmFzdFN0YXJ0IikgU0VRT0YsIFNFTUksIDAsIDMwLCBERUNPREUgfCBPUFQsCisJIG9mZnNldG9mKFByb2dyZXNzX1VVSUUsIGZhc3RTdGFydCksIF9Qcm9ncmVzc19VVUlFX2Zhc3RTdGFydH0sCisJe0ZOQU1FKCJtdWx0aXBsZUNhbGxzIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtYWludGFpbkNvbm5lY3Rpb24iKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZhc3RDb25uZWN0UmVmdXNlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJzZXR1cCIpIFNFUSwgNywgMTMsIDM5LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5LCBzZXR1cCksIF9TZXR1cF9VVUlFfSwKKwl7Rk5BTUUoImNhbGxQcm9jZWVkaW5nIikgU0VRLCAxLCAzLCAxMiwgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSwgY2FsbFByb2NlZWRpbmcpLAorCSBfQ2FsbFByb2NlZWRpbmdfVVVJRX0sCisJe0ZOQU1FKCJjb25uZWN0IikgU0VRLCAxLCA0LCAxOSwgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keSwgY29ubmVjdCksIF9Db25uZWN0X1VVSUV9LAorCXtGTkFNRSgiYWxlcnRpbmciKSBTRVEsIDEsIDMsIDE3LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5LCBhbGVydGluZyksIF9BbGVydGluZ19VVUlFfSwKKwl7Rk5BTUUoImluZm9ybWF0aW9uIikgU0VRLCAwLCAxLCA3LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5LCBpbmZvcm1hdGlvbiksCisJIF9JbmZvcm1hdGlvbl9VVUlFfSwKKwl7Rk5BTUUoInJlbGVhc2VDb21wbGV0ZSIpIFNFUSwgMSwgMiwgMTEsIFNLSVAgfCBFWFQsIDAsCisJIF9SZWxlYXNlQ29tcGxldGVfVVVJRX0sCisJe0ZOQU1FKCJmYWNpbGl0eSIpIFNFUSwgMywgNSwgMjEsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHksIGZhY2lsaXR5KSwgX0ZhY2lsaXR5X1VVSUV9LAorCXtGTkFNRSgicHJvZ3Jlc3MiKSBTRVEsIDUsIDgsIDExLCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKEgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5LCBwcm9ncmVzcyksIF9Qcm9ncmVzc19VVUlFfSwKKwl7Rk5BTUUoImVtcHR5IikgTlVMLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInN0YXR1cyIpIFNFUSwgMiwgNCwgNCwgU0tJUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzdGF0dXNJbnF1aXJ5IikgU0VRLCAyLCA0LCA0LCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNldHVwQWNrbm93bGVkZ2UiKSBTRVEsIDIsIDQsIDQsIFNLSVAgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibm90aWZ5IikgU0VRLCAyLCA0LCA0LCBTS0lQIHwgRVhULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9SZXF1ZXN0TWVzc2FnZVtdID0gewkvKiBDSE9JQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkIikgU0VRLCAwLCAxLCAxLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm1hc3RlclNsYXZlRGV0ZXJtaW5hdGlvbiIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0ZXJtaW5hbENhcGFiaWxpdHlTZXQiKSBTRVEsIDMsIDUsIDUsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgib3BlbkxvZ2ljYWxDaGFubmVsIikgU0VRLCAxLCAzLCA1LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKFJlcXVlc3RNZXNzYWdlLCBvcGVuTG9naWNhbENoYW5uZWwpLCBfT3BlbkxvZ2ljYWxDaGFubmVsfSwKKwl7Rk5BTUUoImNsb3NlTG9naWNhbENoYW5uZWwiKSBTRVEsIDAsIDIsIDMsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicmVxdWVzdENoYW5uZWxDbG9zZSIpIFNFUSwgMCwgMSwgMywgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtdWx0aXBsZXhFbnRyeVNlbmQiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicmVxdWVzdE11bHRpcGxleEVudHJ5IikgU0VRLCAwLCAxLCAxLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJlcXVlc3RNb2RlIikgU0VRLCAwLCAyLCAyLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJvdW5kVHJpcERlbGF5UmVxdWVzdCIpIFNFUSwgMCwgMSwgMSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtYWludGVuYW5jZUxvb3BSZXF1ZXN0IikgU0VRLCAwLCAxLCAxLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNvbW11bmljYXRpb25Nb2RlUmVxdWVzdCIpIFNFUSwgMCwgMCwgMCwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjb25mZXJlbmNlUmVxdWVzdCIpIENIT0lDRSwgMywgOCwgMTYsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibXVsdGlsaW5rUmVxdWVzdCIpIENIT0lDRSwgMywgNSwgNSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJsb2dpY2FsQ2hhbm5lbFJhdGVSZXF1ZXN0IikgU0VRLCAwLCAzLCAzLCBTVE9QIHwgRVhULCAwLAorCSBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9PcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgiaDIyMkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyIpIFNFUSwgMywgNSwgNSwgU0tJUCB8IEVYVCwgMCwKKwkgX0gyMjJMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnN9LAorCXtGTkFNRSgiaDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMiKSBTRVEsIDEwLCAxMSwgMTQsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YKKwkgKE9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMsCisJICBoMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyksIF9IMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc30sCit9OworCitzdGF0aWMgZmllbGRfdCBfT3BlbkxvZ2ljYWxDaGFubmVsQWNrX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInJldmVyc2VMb2dpY2FsQ2hhbm5lbE51bWJlciIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwb3J0TnVtYmVyIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm11bHRpcGxleFBhcmFtZXRlcnMiKSBDSE9JQ0UsIDAsIDEsIDIsIERFQ09ERSB8IEVYVCB8IE9QVCwKKwkgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMsCisJCSAgbXVsdGlwbGV4UGFyYW1ldGVycyksCisJIF9PcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzfSwKKwl7Rk5BTUUoInJlcGxhY2VtZW50Rm9yIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVyc19ub25TdGFuZGFyZFtdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwgX0gyNDVfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQIHwgT1BULCAwLAorCSBfSDIyNTBMb2dpY2FsQ2hhbm5lbEFja1BhcmFtZXRlcnNfbm9uU3RhbmRhcmR9LAorCXtGTkFNRSgic2Vzc2lvbklEIikgSU5ULCA4LCAxLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm1lZGlhQ2hhbm5lbCIpIENIT0lDRSwgMSwgMiwgMiwgREVDT0RFIHwgRVhUIHwgT1BULAorCSBvZmZzZXRvZihIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycywgbWVkaWFDaGFubmVsKSwKKwkgX0gyNDVfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJtZWRpYUNvbnRyb2xDaGFubmVsIikgQ0hPSUNFLCAxLCAyLCAyLCBERUNPREUgfCBFWFQgfCBPUFQsCisJIG9mZnNldG9mKEgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzLCBtZWRpYUNvbnRyb2xDaGFubmVsKSwKKwkgX0gyNDVfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJkeW5hbWljUlRQUGF5bG9hZFR5cGUiKSBJTlQsIDUsIDk2LCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZsb3dDb250cm9sVG9aZXJvIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwb3J0TnVtYmVyIikgSU5ULCBXT1JELCAwLCAwLCBTS0lQIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9PcGVuTG9naWNhbENoYW5uZWxBY2tfZm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnNbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJoMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycyIpIFNFUSwgNSwgNSwgNywgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWxBY2tfZm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnMsCisJCSAgaDIyNTBMb2dpY2FsQ2hhbm5lbEFja1BhcmFtZXRlcnMpLAorCSBfSDIyNTBMb2dpY2FsQ2hhbm5lbEFja1BhcmFtZXRlcnN9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX09wZW5Mb2dpY2FsQ2hhbm5lbEFja1tdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgiZm9yd2FyZExvZ2ljYWxDaGFubmVsTnVtYmVyIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMiKSBTRVEsIDIsIDMsIDQsCisJIERFQ09ERSB8IEVYVCB8IE9QVCwgb2Zmc2V0b2YoT3BlbkxvZ2ljYWxDaGFubmVsQWNrLAorCQkJCSAgICAgIHJldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMpLAorCSBfT3BlbkxvZ2ljYWxDaGFubmVsQWNrX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnN9LAorCXtGTkFNRSgic2VwYXJhdGVTdGFjayIpIFNFUSwgMiwgNCwgNSwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVycyIpIENIT0lDRSwgMCwgMSwgMSwKKwkgREVDT0RFIHwgRVhUIHwgT1BULCBvZmZzZXRvZihPcGVuTG9naWNhbENoYW5uZWxBY2ssCisJCQkJICAgICAgZm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnMpLAorCSBfT3BlbkxvZ2ljYWxDaGFubmVsQWNrX2ZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzfSwKKwl7Rk5BTUUoImVuY3J5cHRpb25TeW5jIikgU0VRLCAyLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9SZXNwb25zZU1lc3NhZ2VbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJub25TdGFuZGFyZCIpIFNFUSwgMCwgMSwgMSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtYXN0ZXJTbGF2ZURldGVybWluYXRpb25BY2siKSBTRVEsIDAsIDEsIDEsIFNUT1AgfCBFWFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgibWFzdGVyU2xhdmVEZXRlcm1pbmF0aW9uUmVqZWN0IikgU0VRLCAwLCAxLCAxLCBTVE9QIHwgRVhULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInRlcm1pbmFsQ2FwYWJpbGl0eVNldEFjayIpIFNFUSwgMCwgMSwgMSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0ZXJtaW5hbENhcGFiaWxpdHlTZXRSZWplY3QiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBFWFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgib3BlbkxvZ2ljYWxDaGFubmVsQWNrIikgU0VRLCAxLCAyLCA1LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKFJlc3BvbnNlTWVzc2FnZSwgb3BlbkxvZ2ljYWxDaGFubmVsQWNrKSwKKwkgX09wZW5Mb2dpY2FsQ2hhbm5lbEFja30sCisJe0ZOQU1FKCJvcGVuTG9naWNhbENoYW5uZWxSZWplY3QiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2xvc2VMb2dpY2FsQ2hhbm5lbEFjayIpIFNFUSwgMCwgMSwgMSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyZXF1ZXN0Q2hhbm5lbENsb3NlQWNrIikgU0VRLCAwLCAxLCAxLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJlcXVlc3RDaGFubmVsQ2xvc2VSZWplY3QiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBFWFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgibXVsdGlwbGV4RW50cnlTZW5kQWNrIikgU0VRLCAwLCAyLCAyLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm11bHRpcGxleEVudHJ5U2VuZFJlamVjdCIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyZXF1ZXN0TXVsdGlwbGV4RW50cnlBY2siKSBTRVEsIDAsIDEsIDEsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicmVxdWVzdE11bHRpcGxleEVudHJ5UmVqZWN0IikgU0VRLCAwLCAyLCAyLCBTVE9QIHwgRVhULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInJlcXVlc3RNb2RlQWNrIikgU0VRLCAwLCAyLCAyLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJlcXVlc3RNb2RlUmVqZWN0IikgU0VRLCAwLCAyLCAyLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJvdW5kVHJpcERlbGF5UmVzcG9uc2UiKSBTRVEsIDAsIDEsIDEsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibWFpbnRlbmFuY2VMb29wQWNrIikgU0VRLCAwLCAxLCAxLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm1haW50ZW5hbmNlTG9vcFJlamVjdCIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjb21tdW5pY2F0aW9uTW9kZVJlc3BvbnNlIikgQ0hPSUNFLCAwLCAxLCAxLCBTVE9QIHwgRVhULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImNvbmZlcmVuY2VSZXNwb25zZSIpIENIT0lDRSwgMywgOCwgMTYsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibXVsdGlsaW5rUmVzcG9uc2UiKSBDSE9JQ0UsIDMsIDUsIDUsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgibG9naWNhbENoYW5uZWxSYXRlQWNrbm93bGVkZ2UiKSBTRVEsIDAsIDMsIDMsIFNUT1AgfCBFWFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgibG9naWNhbENoYW5uZWxSYXRlUmVqZWN0IikgU0VRLCAxLCA0LCA0LCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9NdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJyZXF1ZXN0IikgQ0hPSUNFLCA0LCAxMSwgMTUsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlLCByZXF1ZXN0KSwgX1JlcXVlc3RNZXNzYWdlfSwKKwl7Rk5BTUUoInJlc3BvbnNlIikgQ0hPSUNFLCA1LCAxOSwgMjQsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlLCByZXNwb25zZSksCisJIF9SZXNwb25zZU1lc3NhZ2V9LAorCXtGTkFNRSgiY29tbWFuZCIpIENIT0lDRSwgMywgNywgMTIsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaW5kaWNhdGlvbiIpIENIT0lDRSwgNCwgMTQsIDIzLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9IMzIzX1VVX1BEVV9oMjQ1Q29udHJvbFtdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIENIT0lDRSwgMiwgNCwgNCwgREVDT0RFIHwgT1BFTiB8IEVYVCwKKwkgc2l6ZW9mKE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSksCisJIF9NdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2V9CisJLAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gzMjNfVVVfUERVW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJoMzIzLW1lc3NhZ2UtYm9keSIpIENIT0lDRSwgMywgNywgMTMsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoSDMyM19VVV9QRFUsIGgzMjNfbWVzc2FnZV9ib2R5KSwKKwkgX0gzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5fSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoImg0NTAxU3VwcGxlbWVudGFyeVNlcnZpY2UiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJoMjQ1VHVubmVsaW5nIikgQk9PTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJoMjQ1Q29udHJvbCIpIFNFUU9GLCBTRU1JLCAwLCA0LCBERUNPREUgfCBPUFQsCisJIG9mZnNldG9mKEgzMjNfVVVfUERVLCBoMjQ1Q29udHJvbCksIF9IMzIzX1VVX1BEVV9oMjQ1Q29udHJvbH0sCisJe0ZOQU1FKCJub25TdGFuZGFyZENvbnRyb2wiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYWxsTGlua2FnZSIpIFNFUSwgMiwgMiwgMiwgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0dW5uZWxsZWRTaWduYWxsaW5nTWVzc2FnZSIpIFNFUSwgMiwgNCwgNCwgU1RPUCB8IEVYVCB8IE9QVCwKKwkgMCwgTlVMTH0sCisJe0ZOQU1FKCJwcm92aXNpb25hbFJlc3BUb0gyNDVUdW5uZWxpbmciKSBOVUwsIEZJWEQsIDAsIDAsIFNUT1AgfCBPUFQsCisJIDAsIE5VTEx9LAorCXtGTkFNRSgic3RpbXVsdXNDb250cm9sIikgU0VRLCAzLCAzLCAzLCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdlbmVyaWNEYXRhIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0gzMjNfVXNlckluZm9ybWF0aW9uW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJoMzIzLXV1LXBkdSIpIFNFUSwgMSwgMiwgMTEsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoSDMyM19Vc2VySW5mb3JtYXRpb24sIGgzMjNfdXVfcGR1KSwgX0gzMjNfVVVfUERVfSwKKwl7Rk5BTUUoInVzZXItZGF0YSIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfR2F0ZWtlZXBlclJlcXVlc3RbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInJlcXVlc3RTZXFOdW0iKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicHJvdG9jb2xJZGVudGlmaWVyIikgT0lELCBCWVRFLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoInJhc0FkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoR2F0ZWtlZXBlclJlcXVlc3QsIHJhc0FkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJlbmRwb2ludFR5cGUiKSBTRVEsIDYsIDgsIDEwLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdhdGVrZWVwZXJJZGVudGlmaWVyIikgQk1QU1RSLCA3LCAxLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhbGxTZXJ2aWNlcyIpIFNFUSwgMCwgOCwgOCwgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJlbmRwb2ludEFsaWFzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWx0ZXJuYXRlRW5kcG9pbnRzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY3J5cHRvVG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiYXV0aGVudGljYXRpb25DYXBhYmlsaXR5IikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgiYWxnb3JpdGhtT0lEcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImludGVncml0eSIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImludGVncml0eUNoZWNrVmFsdWUiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic3VwcG9ydHNBbHRHSyIpIE5VTCwgRklYRCwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmZWF0dXJlU2V0IikgU0VRLCAzLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdlbmVyaWNEYXRhIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0dhdGVrZWVwZXJDb25maXJtW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJyZXF1ZXN0U2VxTnVtIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInByb3RvY29sSWRlbnRpZmllciIpIE9JRCwgQllURSwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJub25TdGFuZGFyZERhdGEiKSBTRVEsIDAsIDIsIDIsIFNLSVAgfCBPUFQsIDAsCisJIF9Ob25TdGFuZGFyZFBhcmFtZXRlcn0sCisJe0ZOQU1FKCJnYXRla2VlcGVySWRlbnRpZmllciIpIEJNUFNUUiwgNywgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyYXNBZGRyZXNzIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKEdhdGVrZWVwZXJDb25maXJtLCByYXNBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LAorCXtGTkFNRSgiYWx0ZXJuYXRlR2F0ZWtlZXBlciIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImF1dGhlbnRpY2F0aW9uTW9kZSIpIENIT0lDRSwgMywgNywgOCwgU1RPUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJ0b2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjcnlwdG9Ub2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhbGdvcml0aG1PSUQiKSBPSUQsIEJZVEUsIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaW50ZWdyaXR5IikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaW50ZWdyaXR5Q2hlY2tWYWx1ZSIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmZWF0dXJlU2V0IikgU0VRLCAzLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdlbmVyaWNEYXRhIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1JlZ2lzdHJhdGlvblJlcXVlc3RfY2FsbFNpZ25hbEFkZHJlc3NbXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCwKKwkgc2l6ZW9mKFRyYW5zcG9ydEFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30KKwksCit9OworCitzdGF0aWMgZmllbGRfdCBfUmVnaXN0cmF0aW9uUmVxdWVzdF9yYXNBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsCisJIHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9CisJLAorfTsKKworc3RhdGljIGZpZWxkX3QgX1JlZ2lzdHJhdGlvblJlcXVlc3RfdGVybWluYWxBbGlhc1tdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIENIT0lDRSwgMSwgMiwgNywgU0tJUCB8IEVYVCwgMCwgX0FsaWFzQWRkcmVzc30sCit9OworCitzdGF0aWMgZmllbGRfdCBfUmVnaXN0cmF0aW9uUmVxdWVzdFtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicmVxdWVzdFNlcU51bSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwcm90b2NvbElkZW50aWZpZXIiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgiZGlzY292ZXJ5Q29tcGxldGUiKSBCT09MLCBGSVhELCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhbGxTaWduYWxBZGRyZXNzIikgU0VRT0YsIFNFTUksIDAsIDEwLCBERUNPREUsCisJIG9mZnNldG9mKFJlZ2lzdHJhdGlvblJlcXVlc3QsIGNhbGxTaWduYWxBZGRyZXNzKSwKKwkgX1JlZ2lzdHJhdGlvblJlcXVlc3RfY2FsbFNpZ25hbEFkZHJlc3N9LAorCXtGTkFNRSgicmFzQWRkcmVzcyIpIFNFUU9GLCBTRU1JLCAwLCAxMCwgREVDT0RFLAorCSBvZmZzZXRvZihSZWdpc3RyYXRpb25SZXF1ZXN0LCByYXNBZGRyZXNzKSwKKwkgX1JlZ2lzdHJhdGlvblJlcXVlc3RfcmFzQWRkcmVzc30sCisJe0ZOQU1FKCJ0ZXJtaW5hbFR5cGUiKSBTRVEsIDYsIDgsIDEwLCBTS0lQIHwgRVhULCAwLCBfRW5kcG9pbnRUeXBlfSwKKwl7Rk5BTUUoInRlcm1pbmFsQWxpYXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKKwkgX1JlZ2lzdHJhdGlvblJlcXVlc3RfdGVybWluYWxBbGlhc30sCisJe0ZOQU1FKCJnYXRla2VlcGVySWRlbnRpZmllciIpIEJNUFNUUiwgNywgMSwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJlbmRwb2ludFZlbmRvciIpIFNFUSwgMiwgMywgMywgU0tJUCB8IEVYVCwgMCwKKwkgX1ZlbmRvcklkZW50aWZpZXJ9LAorCXtGTkFNRSgiYWx0ZXJuYXRlRW5kcG9pbnRzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidGltZVRvTGl2ZSIpIElOVCwgQ09OUywgMSwgMCwgREVDT0RFIHwgT1BULAorCSBvZmZzZXRvZihSZWdpc3RyYXRpb25SZXF1ZXN0LCB0aW1lVG9MaXZlKSwgTlVMTH0sCisJe0ZOQU1FKCJ0b2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjcnlwdG9Ub2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJpbnRlZ3JpdHlDaGVja1ZhbHVlIikgU0VRLCAwLCAyLCAyLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImtlZXBBbGl2ZSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AsIDAsIE5VTEx9LAorCXtGTkFNRSgiZW5kcG9pbnRJZGVudGlmaWVyIikgQk1QU1RSLCA3LCAxLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIndpbGxTdXBwbHlVVUlFcyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AsIDAsIE5VTEx9LAorCXtGTkFNRSgibWFpbnRhaW5Db25uZWN0aW9uIikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJhbHRlcm5hdGVUcmFuc3BvcnRBZGRyZXNzZXMiKSBTRVEsIDEsIDEsIDEsIFNUT1AgfCBFWFQgfCBPUFQsCisJIDAsIE5VTEx9LAorCXtGTkFNRSgiYWRkaXRpdmVSZWdpc3RyYXRpb24iKSBOVUwsIEZJWEQsIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidGVybWluYWxBbGlhc1BhdHRlcm4iKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJzdXBwb3J0c0FsdEdLIikgTlVMLCBGSVhELCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInVzYWdlUmVwb3J0aW5nQ2FwYWJpbGl0eSIpIFNFUSwgMywgNCwgNCwgU1RPUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJtdWx0aXBsZUNhbGxzIikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzdXBwb3J0ZWRIMjQ4UGFja2FnZXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJjYWxsQ3JlZGl0Q2FwYWJpbGl0eSIpIFNFUSwgMiwgMiwgMiwgU1RPUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJjYXBhY2l0eVJlcG9ydGluZ0NhcGFiaWxpdHkiKSBTRVEsIDAsIDEsIDEsIFNUT1AgfCBFWFQgfCBPUFQsCisJIDAsIE5VTEx9LAorCXtGTkFNRSgiY2FwYWNpdHkiKSBTRVEsIDIsIDIsIDIsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZmVhdHVyZVNldCIpIFNFUSwgMywgNCwgNCwgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnZW5lcmljRGF0YSIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9SZWdpc3RyYXRpb25Db25maXJtX2NhbGxTaWduYWxBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsCisJIHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9CisJLAorfTsKKworc3RhdGljIGZpZWxkX3QgX1JlZ2lzdHJhdGlvbkNvbmZpcm1fdGVybWluYWxBbGlhc1tdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIENIT0lDRSwgMSwgMiwgNywgU0tJUCB8IEVYVCwgMCwgX0FsaWFzQWRkcmVzc30sCit9OworCitzdGF0aWMgZmllbGRfdCBfUmVnaXN0cmF0aW9uQ29uZmlybVtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicmVxdWVzdFNlcU51bSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJwcm90b2NvbElkZW50aWZpZXIiKSBPSUQsIEJZVEUsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgibm9uU3RhbmRhcmREYXRhIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgT1BULCAwLAorCSBfTm9uU3RhbmRhcmRQYXJhbWV0ZXJ9LAorCXtGTkFNRSgiY2FsbFNpZ25hbEFkZHJlc3MiKSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSwKKwkgb2Zmc2V0b2YoUmVnaXN0cmF0aW9uQ29uZmlybSwgY2FsbFNpZ25hbEFkZHJlc3MpLAorCSBfUmVnaXN0cmF0aW9uQ29uZmlybV9jYWxsU2lnbmFsQWRkcmVzc30sCisJe0ZOQU1FKCJ0ZXJtaW5hbEFsaWFzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsCisJIF9SZWdpc3RyYXRpb25Db25maXJtX3Rlcm1pbmFsQWxpYXN9LAorCXtGTkFNRSgiZ2F0ZWtlZXBlcklkZW50aWZpZXIiKSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZW5kcG9pbnRJZGVudGlmaWVyIikgQk1QU1RSLCA3LCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImFsdGVybmF0ZUdhdGVrZWVwZXIiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0aW1lVG9MaXZlIikgSU5ULCBDT05TLCAxLCAwLCBERUNPREUgfCBPUFQsCisJIG9mZnNldG9mKFJlZ2lzdHJhdGlvbkNvbmZpcm0sIHRpbWVUb0xpdmUpLCBOVUxMfSwKKwl7Rk5BTUUoInRva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNyeXB0b1Rva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImludGVncml0eUNoZWNrVmFsdWUiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgid2lsbFJlc3BvbmRUb0lSUiIpIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AsIDAsIE5VTEx9LAorCXtGTkFNRSgicHJlR3JhbnRlZEFSUSIpIFNFUSwgMCwgNCwgOCwgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtYWludGFpbkNvbm5lY3Rpb24iKSBCT09MLCBGSVhELCAwLCAwLCBTVE9QLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNlcnZpY2VDb250cm9sIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic3VwcG9ydHNBZGRpdGl2ZVJlZ2lzdHJhdGlvbiIpIE5VTCwgRklYRCwgMCwgMCwgU1RPUCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJ0ZXJtaW5hbEFsaWFzUGF0dGVybiIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInN1cHBvcnRlZFByZWZpeGVzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidXNhZ2VTcGVjIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZmVhdHVyZVNlcnZlckFsaWFzIikgQ0hPSUNFLCAxLCAyLCA3LCBTVE9QIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImNhcGFjaXR5UmVwb3J0aW5nU3BlYyIpIFNFUSwgMCwgMSwgMSwgU1RPUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJmZWF0dXJlU2V0IikgU0VRLCAzLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdlbmVyaWNEYXRhIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX1VucmVnaXN0cmF0aW9uUmVxdWVzdF9jYWxsU2lnbmFsQWRkcmVzc1tdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULAorCSBzaXplb2YoVHJhbnNwb3J0QWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfQorCSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9VbnJlZ2lzdHJhdGlvblJlcXVlc3RbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInJlcXVlc3RTZXFOdW0iKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2FsbFNpZ25hbEFkZHJlc3MiKSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSwKKwkgb2Zmc2V0b2YoVW5yZWdpc3RyYXRpb25SZXF1ZXN0LCBjYWxsU2lnbmFsQWRkcmVzcyksCisJIF9VbnJlZ2lzdHJhdGlvblJlcXVlc3RfY2FsbFNpZ25hbEFkZHJlc3N9LAorCXtGTkFNRSgiZW5kcG9pbnRBbGlhcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJlbmRwb2ludElkZW50aWZpZXIiKSBCTVBTVFIsIDcsIDEsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWx0ZXJuYXRlRW5kcG9pbnRzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ2F0ZWtlZXBlcklkZW50aWZpZXIiKSBCTVBTVFIsIDcsIDEsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY3J5cHRvVG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaW50ZWdyaXR5Q2hlY2tWYWx1ZSIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyZWFzb24iKSBDSE9JQ0UsIDIsIDQsIDUsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZW5kcG9pbnRBbGlhc1BhdHRlcm4iKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJzdXBwb3J0ZWRQcmVmaXhlcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImFsdGVybmF0ZUdhdGVrZWVwZXIiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnZW5lcmljRGF0YSIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9DYWxsTW9kZWxbXSA9IHsJLyogQ0hPSUNFICovCisJe0ZOQU1FKCJkaXJlY3QiKSBOVUwsIEZJWEQsIDAsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ2F0ZWtlZXBlclJvdXRlZCIpIE5VTCwgRklYRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfQWRtaXNzaW9uUmVxdWVzdF9kZXN0aW5hdGlvbkluZm9bXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBDSE9JQ0UsIDEsIDIsIDcsIFNLSVAgfCBFWFQsIDAsIF9BbGlhc0FkZHJlc3N9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0FkbWlzc2lvblJlcXVlc3RfZGVzdEV4dHJhQ2FsbEluZm9bXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBDSE9JQ0UsIDEsIDIsIDcsIFNLSVAgfCBFWFQsIDAsIF9BbGlhc0FkZHJlc3N9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0FkbWlzc2lvblJlcXVlc3Rfc3JjSW5mb1tdID0gewkvKiBTRVFVRU5DRSBPRiAqLworCXtGTkFNRSgiaXRlbSIpIENIT0lDRSwgMSwgMiwgNywgU0tJUCB8IEVYVCwgMCwgX0FsaWFzQWRkcmVzc30sCit9OworCitzdGF0aWMgZmllbGRfdCBfQWRtaXNzaW9uUmVxdWVzdFtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicmVxdWVzdFNlcU51bSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYWxsVHlwZSIpIENIT0lDRSwgMiwgNCwgNCwgU0tJUCB8IEVYVCwgMCwgX0NhbGxUeXBlfSwKKwl7Rk5BTUUoImNhbGxNb2RlbCIpIENIT0lDRSwgMSwgMiwgMiwgU0tJUCB8IEVYVCB8IE9QVCwgMCwgX0NhbGxNb2RlbH0sCisJe0ZOQU1FKCJlbmRwb2ludElkZW50aWZpZXIiKSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZGVzdGluYXRpb25JbmZvIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAgfCBPUFQsIDAsCisJIF9BZG1pc3Npb25SZXF1ZXN0X2Rlc3RpbmF0aW9uSW5mb30sCisJe0ZOQU1FKCJkZXN0Q2FsbFNpZ25hbEFkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCB8IE9QVCwKKwkgb2Zmc2V0b2YoQWRtaXNzaW9uUmVxdWVzdCwgZGVzdENhbGxTaWduYWxBZGRyZXNzKSwKKwkgX1RyYW5zcG9ydEFkZHJlc3N9LAorCXtGTkFNRSgiZGVzdEV4dHJhQ2FsbEluZm8iKSBTRVFPRiwgU0VNSSwgMCwgMCwgU0tJUCB8IE9QVCwgMCwKKwkgX0FkbWlzc2lvblJlcXVlc3RfZGVzdEV4dHJhQ2FsbEluZm99LAorCXtGTkFNRSgic3JjSW5mbyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTS0lQLCAwLAorCSBfQWRtaXNzaW9uUmVxdWVzdF9zcmNJbmZvfSwKKwl7Rk5BTUUoInNyY0NhbGxTaWduYWxBZGRyZXNzIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQgfCBPUFQsCisJIG9mZnNldG9mKEFkbWlzc2lvblJlcXVlc3QsIHNyY0NhbGxTaWduYWxBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LAorCXtGTkFNRSgiYmFuZFdpZHRoIikgSU5ULCBDT05TLCAwLCAwLCBTVE9QLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhbGxSZWZlcmVuY2VWYWx1ZSIpIElOVCwgV09SRCwgMCwgMCwgU1RPUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJub25TdGFuZGFyZERhdGEiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2FsbFNlcnZpY2VzIikgU0VRLCAwLCA4LCA4LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNvbmZlcmVuY2VJRCIpIE9DVFNUUiwgRklYRCwgMTYsIDAsIFNUT1AsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWN0aXZlTUMiKSBCT09MLCBGSVhELCAwLCAwLCBTVE9QLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImFuc3dlckNhbGwiKSBCT09MLCBGSVhELCAwLCAwLCBTVE9QLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhbk1hcEFsaWFzIikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYWxsSWRlbnRpZmllciIpIFNFUSwgMCwgMSwgMSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzcmNBbHRlcm5hdGl2ZXMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXN0QWx0ZXJuYXRpdmVzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ2F0ZWtlZXBlcklkZW50aWZpZXIiKSBCTVBTVFIsIDcsIDEsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY3J5cHRvVG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaW50ZWdyaXR5Q2hlY2tWYWx1ZSIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0cmFuc3BvcnRRT1MiKSBDSE9JQ0UsIDIsIDMsIDMsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgid2lsbFN1cHBseVVVSUVzIikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYWxsTGlua2FnZSIpIFNFUSwgMiwgMiwgMiwgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnYXRld2F5RGF0YVJhdGUiKSBTRVEsIDIsIDMsIDMsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2FwYWNpdHkiKSBTRVEsIDIsIDIsIDIsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2lyY3VpdEluZm8iKSBTRVEsIDMsIDMsIDMsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZGVzaXJlZFByb3RvY29scyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlc2lyZWRUdW5uZWxsZWRQcm90b2NvbCIpIFNFUSwgMSwgMiwgMiwgU1RPUCB8IEVYVCB8IE9QVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJmZWF0dXJlU2V0IikgU0VRLCAzLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdlbmVyaWNEYXRhIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0FkbWlzc2lvbkNvbmZpcm1bXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoInJlcXVlc3RTZXFOdW0iKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiYmFuZFdpZHRoIikgSU5ULCBDT05TLCAwLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhbGxNb2RlbCIpIENIT0lDRSwgMSwgMiwgMiwgU0tJUCB8IEVYVCwgMCwgX0NhbGxNb2RlbH0sCisJe0ZOQU1FKCJkZXN0Q2FsbFNpZ25hbEFkZHJlc3MiKSBDSE9JQ0UsIDMsIDcsIDcsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoQWRtaXNzaW9uQ29uZmlybSwgZGVzdENhbGxTaWduYWxBZGRyZXNzKSwKKwkgX1RyYW5zcG9ydEFkZHJlc3N9LAorCXtGTkFNRSgiaXJyRnJlcXVlbmN5IikgSU5ULCBXT1JELCAxLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXN0aW5hdGlvbkluZm8iKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXN0RXh0cmFDYWxsSW5mbyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlc3RpbmF0aW9uVHlwZSIpIFNFUSwgNiwgOCwgMTAsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicmVtb3RlRXh0ZW5zaW9uQWRkcmVzcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImFsdGVybmF0ZUVuZHBvaW50cyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNyeXB0b1Rva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImludGVncml0eUNoZWNrVmFsdWUiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidHJhbnNwb3J0UU9TIikgQ0hPSUNFLCAyLCAzLCAzLCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIndpbGxSZXNwb25kVG9JUlIiKSBCT09MLCBGSVhELCAwLCAwLCBTVE9QLCAwLCBOVUxMfSwKKwl7Rk5BTUUoInV1aWVzUmVxdWVzdGVkIikgU0VRLCAwLCA5LCAxMywgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJsYW5ndWFnZSIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImFsdGVybmF0ZVRyYW5zcG9ydEFkZHJlc3NlcyIpIFNFUSwgMSwgMSwgMSwgU1RPUCB8IEVYVCB8IE9QVCwKKwkgMCwgTlVMTH0sCisJe0ZOQU1FKCJ1c2VTcGVjaWZpZWRUcmFuc3BvcnQiKSBDSE9JQ0UsIDEsIDIsIDIsIFNUT1AgfCBFWFQgfCBPUFQsIDAsCisJIE5VTEx9LAorCXtGTkFNRSgiY2lyY3VpdEluZm8iKSBTRVEsIDMsIDMsIDMsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidXNhZ2VTcGVjIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic3VwcG9ydGVkUHJvdG9jb2xzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgic2VydmljZUNvbnRyb2wiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJtdWx0aXBsZUNhbGxzIikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJmZWF0dXJlU2V0IikgU0VRLCAzLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImdlbmVyaWNEYXRhIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0xvY2F0aW9uUmVxdWVzdF9kZXN0aW5hdGlvbkluZm9bXSA9IHsJLyogU0VRVUVOQ0UgT0YgKi8KKwl7Rk5BTUUoIml0ZW0iKSBDSE9JQ0UsIDEsIDIsIDcsIFNLSVAgfCBFWFQsIDAsIF9BbGlhc0FkZHJlc3N9LAorfTsKKworc3RhdGljIGZpZWxkX3QgX0xvY2F0aW9uUmVxdWVzdFtdID0gewkvKiBTRVFVRU5DRSAqLworCXtGTkFNRSgicmVxdWVzdFNlcU51bSIpIElOVCwgV09SRCwgMSwgMCwgU0tJUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJlbmRwb2ludElkZW50aWZpZXIiKSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZGVzdGluYXRpb25JbmZvIikgU0VRT0YsIFNFTUksIDAsIDAsIFNLSVAsIDAsCisJIF9Mb2NhdGlvblJlcXVlc3RfZGVzdGluYXRpb25JbmZvfSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoInJlcGx5QWRkcmVzcyIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihMb2NhdGlvblJlcXVlc3QsIHJlcGx5QWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSwKKwl7Rk5BTUUoInNvdXJjZUluZm8iKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjYW5NYXBBbGlhcyIpIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ2F0ZWtlZXBlcklkZW50aWZpZXIiKSBCTVBTVFIsIDcsIDEsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiY3J5cHRvVG9rZW5zIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaW50ZWdyaXR5Q2hlY2tWYWx1ZSIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXNpcmVkUHJvdG9jb2xzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZGVzaXJlZFR1bm5lbGxlZFByb3RvY29sIikgU0VRLCAxLCAyLCAyLCBTVE9QIHwgRVhUIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImZlYXR1cmVTZXQiKSBTRVEsIDMsIDQsIDQsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ2VuZXJpY0RhdGEiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJob3BDb3VudCIpIElOVCwgOCwgMSwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjaXJjdWl0SW5mbyIpIFNFUSwgMywgMywgMywgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCit9OworCitzdGF0aWMgZmllbGRfdCBfTG9jYXRpb25Db25maXJtW10gPSB7CS8qIFNFUVVFTkNFICovCisJe0ZOQU1FKCJyZXF1ZXN0U2VxTnVtIikgSU5ULCBXT1JELCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNhbGxTaWduYWxBZGRyZXNzIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKExvY2F0aW9uQ29uZmlybSwgY2FsbFNpZ25hbEFkZHJlc3MpLCBfVHJhbnNwb3J0QWRkcmVzc30sCisJe0ZOQU1FKCJyYXNBZGRyZXNzIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKExvY2F0aW9uQ29uZmlybSwgcmFzQWRkcmVzcyksIF9UcmFuc3BvcnRBZGRyZXNzfSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXN0aW5hdGlvbkluZm8iKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkZXN0RXh0cmFDYWxsSW5mbyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRlc3RpbmF0aW9uVHlwZSIpIFNFUSwgNiwgOCwgMTAsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicmVtb3RlRXh0ZW5zaW9uQWRkcmVzcyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImFsdGVybmF0ZUVuZHBvaW50cyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInRva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImNyeXB0b1Rva2VucyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImludGVncml0eUNoZWNrVmFsdWUiKSBTRVEsIDAsIDIsIDIsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWx0ZXJuYXRlVHJhbnNwb3J0QWRkcmVzc2VzIikgU0VRLCAxLCAxLCAxLCBTVE9QIHwgRVhUIHwgT1BULAorCSAwLCBOVUxMfSwKKwl7Rk5BTUUoInN1cHBvcnRlZFByb3RvY29scyIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm11bHRpcGxlQ2FsbHMiKSBCT09MLCBGSVhELCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImZlYXR1cmVTZXQiKSBTRVEsIDMsIDQsIDQsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiZ2VuZXJpY0RhdGEiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjaXJjdWl0SW5mbyIpIFNFUSwgMywgMywgMywgU1RPUCB8IEVYVCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJzZXJ2aWNlQ29udHJvbCIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9JbmZvUmVxdWVzdFJlc3BvbnNlX2NhbGxTaWduYWxBZGRyZXNzW10gPSB7CS8qIFNFUVVFTkNFIE9GICovCisJe0ZOQU1FKCJpdGVtIikgQ0hPSUNFLCAzLCA3LCA3LCBERUNPREUgfCBFWFQsCisJIHNpemVvZihUcmFuc3BvcnRBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9CisJLAorfTsKKworc3RhdGljIGZpZWxkX3QgX0luZm9SZXF1ZXN0UmVzcG9uc2VbXSA9IHsJLyogU0VRVUVOQ0UgKi8KKwl7Rk5BTUUoIm5vblN0YW5kYXJkRGF0YSIpIFNFUSwgMCwgMiwgMiwgU0tJUCB8IE9QVCwgMCwKKwkgX05vblN0YW5kYXJkUGFyYW1ldGVyfSwKKwl7Rk5BTUUoInJlcXVlc3RTZXFOdW0iKSBJTlQsIFdPUkQsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgiZW5kcG9pbnRUeXBlIikgU0VRLCA2LCA4LCAxMCwgU0tJUCB8IEVYVCwgMCwgX0VuZHBvaW50VHlwZX0sCisJe0ZOQU1FKCJlbmRwb2ludElkZW50aWZpZXIiKSBCTVBTVFIsIDcsIDEsIDAsIFNLSVAsIDAsIE5VTEx9LAorCXtGTkFNRSgicmFzQWRkcmVzcyIpIENIT0lDRSwgMywgNywgNywgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihJbmZvUmVxdWVzdFJlc3BvbnNlLCByYXNBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3N9LAorCXtGTkFNRSgiY2FsbFNpZ25hbEFkZHJlc3MiKSBTRVFPRiwgU0VNSSwgMCwgMTAsIERFQ09ERSwKKwkgb2Zmc2V0b2YoSW5mb1JlcXVlc3RSZXNwb25zZSwgY2FsbFNpZ25hbEFkZHJlc3MpLAorCSBfSW5mb1JlcXVlc3RSZXNwb25zZV9jYWxsU2lnbmFsQWRkcmVzc30sCisJe0ZOQU1FKCJlbmRwb2ludEFsaWFzIikgU0VRT0YsIFNFTUksIDAsIDAsIFNUT1AgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgicGVyQ2FsbEluZm8iKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ0b2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJjcnlwdG9Ub2tlbnMiKSBTRVFPRiwgU0VNSSwgMCwgMCwgU1RPUCB8IE9QVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJpbnRlZ3JpdHlDaGVja1ZhbHVlIikgU0VRLCAwLCAyLCAyLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoIm5lZWRSZXNwb25zZSIpIEJPT0wsIEZJWEQsIDAsIDAsIFNUT1AsIDAsIE5VTEx9LAorCXtGTkFNRSgiY2FwYWNpdHkiKSBTRVEsIDIsIDIsIDIsIFNUT1AgfCBFWFQgfCBPUFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaXJyU3RhdHVzIikgQ0hPSUNFLCAyLCA0LCA0LCBTVE9QIHwgRVhUIHwgT1BULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInVuc29saWNpdGVkIikgQk9PTCwgRklYRCwgMCwgMCwgU1RPUCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJnZW5lcmljRGF0YSIpIFNFUU9GLCBTRU1JLCAwLCAwLCBTVE9QIHwgT1BULCAwLCBOVUxMfSwKK307CisKK3N0YXRpYyBmaWVsZF90IF9SYXNNZXNzYWdlW10gPSB7CS8qIENIT0lDRSAqLworCXtGTkFNRSgiZ2F0ZWtlZXBlclJlcXVlc3QiKSBTRVEsIDQsIDgsIDE4LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKFJhc01lc3NhZ2UsIGdhdGVrZWVwZXJSZXF1ZXN0KSwgX0dhdGVrZWVwZXJSZXF1ZXN0fSwKKwl7Rk5BTUUoImdhdGVrZWVwZXJDb25maXJtIikgU0VRLCAyLCA1LCAxNCwgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihSYXNNZXNzYWdlLCBnYXRla2VlcGVyQ29uZmlybSksIF9HYXRla2VlcGVyQ29uZmlybX0sCisJe0ZOQU1FKCJnYXRla2VlcGVyUmVqZWN0IikgU0VRLCAyLCA1LCAxMSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJyZWdpc3RyYXRpb25SZXF1ZXN0IikgU0VRLCAzLCAxMCwgMzEsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoUmFzTWVzc2FnZSwgcmVnaXN0cmF0aW9uUmVxdWVzdCksIF9SZWdpc3RyYXRpb25SZXF1ZXN0fSwKKwl7Rk5BTUUoInJlZ2lzdHJhdGlvbkNvbmZpcm0iKSBTRVEsIDMsIDcsIDI0LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKFJhc01lc3NhZ2UsIHJlZ2lzdHJhdGlvbkNvbmZpcm0pLCBfUmVnaXN0cmF0aW9uQ29uZmlybX0sCisJe0ZOQU1FKCJyZWdpc3RyYXRpb25SZWplY3QiKSBTRVEsIDIsIDUsIDExLCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInVucmVnaXN0cmF0aW9uUmVxdWVzdCIpIFNFUSwgMywgNSwgMTUsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoUmFzTWVzc2FnZSwgdW5yZWdpc3RyYXRpb25SZXF1ZXN0KSwgX1VucmVnaXN0cmF0aW9uUmVxdWVzdH0sCisJe0ZOQU1FKCJ1bnJlZ2lzdHJhdGlvbkNvbmZpcm0iKSBTRVEsIDEsIDIsIDYsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgidW5yZWdpc3RyYXRpb25SZWplY3QiKSBTRVEsIDEsIDMsIDgsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiYWRtaXNzaW9uUmVxdWVzdCIpIFNFUSwgNywgMTYsIDM0LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKFJhc01lc3NhZ2UsIGFkbWlzc2lvblJlcXVlc3QpLCBfQWRtaXNzaW9uUmVxdWVzdH0sCisJe0ZOQU1FKCJhZG1pc3Npb25Db25maXJtIikgU0VRLCAyLCA2LCAyNywgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihSYXNNZXNzYWdlLCBhZG1pc3Npb25Db25maXJtKSwgX0FkbWlzc2lvbkNvbmZpcm19LAorCXtGTkFNRSgiYWRtaXNzaW9uUmVqZWN0IikgU0VRLCAxLCAzLCAxMSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJiYW5kd2lkdGhSZXF1ZXN0IikgU0VRLCAyLCA3LCAxOCwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJiYW5kd2lkdGhDb25maXJtIikgU0VRLCAxLCAzLCA4LCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImJhbmR3aWR0aFJlamVjdCIpIFNFUSwgMSwgNCwgOSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkaXNlbmdhZ2VSZXF1ZXN0IikgU0VRLCAxLCA2LCAxOSwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJkaXNlbmdhZ2VDb25maXJtIikgU0VRLCAxLCAyLCA5LCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImRpc2VuZ2FnZVJlamVjdCIpIFNFUSwgMSwgMywgOCwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJsb2NhdGlvblJlcXVlc3QiKSBTRVEsIDIsIDUsIDE3LCBERUNPREUgfCBFWFQsCisJIG9mZnNldG9mKFJhc01lc3NhZ2UsIGxvY2F0aW9uUmVxdWVzdCksIF9Mb2NhdGlvblJlcXVlc3R9LAorCXtGTkFNRSgibG9jYXRpb25Db25maXJtIikgU0VRLCAxLCA0LCAxOSwgREVDT0RFIHwgRVhULAorCSBvZmZzZXRvZihSYXNNZXNzYWdlLCBsb2NhdGlvbkNvbmZpcm0pLCBfTG9jYXRpb25Db25maXJtfSwKKwl7Rk5BTUUoImxvY2F0aW9uUmVqZWN0IikgU0VRLCAxLCAzLCAxMCwgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJpbmZvUmVxdWVzdCIpIFNFUSwgMiwgNCwgMTUsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorCXtGTkFNRSgiaW5mb1JlcXVlc3RSZXNwb25zZSIpIFNFUSwgMywgOCwgMTYsIERFQ09ERSB8IEVYVCwKKwkgb2Zmc2V0b2YoUmFzTWVzc2FnZSwgaW5mb1JlcXVlc3RSZXNwb25zZSksIF9JbmZvUmVxdWVzdFJlc3BvbnNlfSwKKwl7Rk5BTUUoIm5vblN0YW5kYXJkTWVzc2FnZSIpIFNFUSwgMCwgMiwgNywgU1RPUCB8IEVYVCwgMCwgTlVMTH0sCisJe0ZOQU1FKCJ1bmtub3duTWVzc2FnZVJlc3BvbnNlIikgU0VRLCAwLCAxLCA1LCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJlcXVlc3RJblByb2dyZXNzIikgU0VRLCA0LCA2LCA2LCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInJlc291cmNlc0F2YWlsYWJsZUluZGljYXRlIikgU0VRLCA0LCA5LCAxMSwgU1RPUCB8IEVYVCwgMCwKKwkgTlVMTH0sCisJe0ZOQU1FKCJyZXNvdXJjZXNBdmFpbGFibGVDb25maXJtIikgU0VRLCA0LCA2LCA3LCBTVE9QIHwgRVhULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoImluZm9SZXF1ZXN0QWNrIikgU0VRLCA0LCA1LCA1LCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoImluZm9SZXF1ZXN0TmFrIikgU0VRLCA1LCA3LCA3LCBTVE9QIHwgRVhULCAwLCBOVUxMfSwKKwl7Rk5BTUUoInNlcnZpY2VDb250cm9sSW5kaWNhdGlvbiIpIFNFUSwgOCwgMTAsIDEwLCBTVE9QIHwgRVhULCAwLAorCSBOVUxMfSwKKwl7Rk5BTUUoInNlcnZpY2VDb250cm9sUmVzcG9uc2UiKSBTRVEsIDcsIDgsIDgsIFNUT1AgfCBFWFQsIDAsIE5VTEx9LAorfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaCBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzk4ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCkBAIC0wLDAgKzEsOTM4IEBACisvKiBHZW5lcmF0ZWQgYnkgSmluZyBNaW4gWmhhbydzIEFTTi4xIHBhcnNlciwgTWFyIDE1IDIwMDYKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgVHJhbnNwb3J0QWRkcmVzc19pcEFkZHJlc3MgewkvKiBTRVFVRU5DRSAqLworCWludCBvcHRpb25zOwkJLyogTm8gdXNlICovCisJdW5zaWduZWQgaXA7Cit9IFRyYW5zcG9ydEFkZHJlc3NfaXBBZGRyZXNzOworCit0eXBlZGVmIHN0cnVjdCBUcmFuc3BvcnRBZGRyZXNzIHsJLyogQ0hPSUNFICovCisJZW51bSB7CisJCWVUcmFuc3BvcnRBZGRyZXNzX2lwQWRkcmVzcywKKwkJZVRyYW5zcG9ydEFkZHJlc3NfaXBTb3VyY2VSb3V0ZSwKKwkJZVRyYW5zcG9ydEFkZHJlc3NfaXB4QWRkcmVzcywKKwkJZVRyYW5zcG9ydEFkZHJlc3NfaXA2QWRkcmVzcywKKwkJZVRyYW5zcG9ydEFkZHJlc3NfbmV0QmlvcywKKwkJZVRyYW5zcG9ydEFkZHJlc3NfbnNhcCwKKwkJZVRyYW5zcG9ydEFkZHJlc3Nfbm9uU3RhbmRhcmRBZGRyZXNzLAorCX0gY2hvaWNlOworCXVuaW9uIHsKKwkJVHJhbnNwb3J0QWRkcmVzc19pcEFkZHJlc3MgaXBBZGRyZXNzOworCX07Cit9IFRyYW5zcG9ydEFkZHJlc3M7CisKK3R5cGVkZWYgc3RydWN0IERhdGFQcm90b2NvbENhcGFiaWxpdHkgewkvKiBDSE9JQ0UgKi8KKwllbnVtIHsKKwkJZURhdGFQcm90b2NvbENhcGFiaWxpdHlfbm9uU3RhbmRhcmQsCisJCWVEYXRhUHJvdG9jb2xDYXBhYmlsaXR5X3YxNGJ1ZmZlcmVkLAorCQllRGF0YVByb3RvY29sQ2FwYWJpbGl0eV92NDJsYXBtLAorCQllRGF0YVByb3RvY29sQ2FwYWJpbGl0eV9oZGxjRnJhbWVUdW5uZWxsaW5nLAorCQllRGF0YVByb3RvY29sQ2FwYWJpbGl0eV9oMzEwU2VwYXJhdGVWQ1N0YWNrLAorCQllRGF0YVByb3RvY29sQ2FwYWJpbGl0eV9oMzEwU2luZ2xlVkNTdGFjaywKKwkJZURhdGFQcm90b2NvbENhcGFiaWxpdHlfdHJhbnNwYXJlbnQsCisJCWVEYXRhUHJvdG9jb2xDYXBhYmlsaXR5X3NlZ21lbnRhdGlvbkFuZFJlYXNzZW1ibHksCisJCWVEYXRhUHJvdG9jb2xDYXBhYmlsaXR5X2hkbGNGcmFtZVR1bm5lbGluZ3dTQVIsCisJCWVEYXRhUHJvdG9jb2xDYXBhYmlsaXR5X3YxMjAsCisJCWVEYXRhUHJvdG9jb2xDYXBhYmlsaXR5X3NlcGFyYXRlTEFOU3RhY2ssCisJCWVEYXRhUHJvdG9jb2xDYXBhYmlsaXR5X3Y3NndDb21wcmVzc2lvbiwKKwkJZURhdGFQcm90b2NvbENhcGFiaWxpdHlfdGNwLAorCQllRGF0YVByb3RvY29sQ2FwYWJpbGl0eV91ZHAsCisJfSBjaG9pY2U7Cit9IERhdGFQcm90b2NvbENhcGFiaWxpdHk7CisKK3R5cGVkZWYgc3RydWN0IERhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb24gewkvKiBDSE9JQ0UgKi8KKwllbnVtIHsKKwkJZURhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25fbm9uU3RhbmRhcmQsCisJCWVEYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uX3QxMjAsCisJCWVEYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uX2RzbV9jYywKKwkJZURhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25fdXNlckRhdGEsCisJCWVEYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uX3Q4NCwKKwkJZURhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25fdDQzNCwKKwkJZURhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25faDIyNCwKKwkJZURhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25fbmxwaWQsCisJCWVEYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uX2RzdmRDb250cm9sLAorCQllRGF0YUFwcGxpY2F0aW9uQ2FwYWJpbGl0eV9hcHBsaWNhdGlvbl9oMjIyRGF0YVBhcnRpdGlvbmluZywKKwkJZURhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb25fdDMwZmF4LAorCQllRGF0YUFwcGxpY2F0aW9uQ2FwYWJpbGl0eV9hcHBsaWNhdGlvbl90MTQwLAorCQllRGF0YUFwcGxpY2F0aW9uQ2FwYWJpbGl0eV9hcHBsaWNhdGlvbl90MzhmYXgsCisJCWVEYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uX2dlbmVyaWNEYXRhQ2FwYWJpbGl0eSwKKwl9IGNob2ljZTsKKwl1bmlvbiB7CisJCURhdGFQcm90b2NvbENhcGFiaWxpdHkgdDEyMDsKKwl9OworfSBEYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5X2FwcGxpY2F0aW9uOworCit0eXBlZGVmIHN0cnVjdCBEYXRhQXBwbGljYXRpb25DYXBhYmlsaXR5IHsJLyogU0VRVUVOQ0UgKi8KKwlpbnQgb3B0aW9uczsJCS8qIE5vIHVzZSAqLworCURhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHlfYXBwbGljYXRpb24gYXBwbGljYXRpb247Cit9IERhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHk7CisKK3R5cGVkZWYgc3RydWN0IERhdGFUeXBlIHsJLyogQ0hPSUNFICovCisJZW51bSB7CisJCWVEYXRhVHlwZV9ub25TdGFuZGFyZCwKKwkJZURhdGFUeXBlX251bGxEYXRhLAorCQllRGF0YVR5cGVfdmlkZW9EYXRhLAorCQllRGF0YVR5cGVfYXVkaW9EYXRhLAorCQllRGF0YVR5cGVfZGF0YSwKKwkJZURhdGFUeXBlX2VuY3J5cHRpb25EYXRhLAorCQllRGF0YVR5cGVfaDIzNUNvbnRyb2wsCisJCWVEYXRhVHlwZV9oMjM1TWVkaWEsCisJCWVEYXRhVHlwZV9tdWx0aXBsZXhlZFN0cmVhbSwKKwl9IGNob2ljZTsKKwl1bmlvbiB7CisJCURhdGFBcHBsaWNhdGlvbkNhcGFiaWxpdHkgZGF0YTsKKwl9OworfSBEYXRhVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgVW5pY2FzdEFkZHJlc3NfaVBBZGRyZXNzIHsJLyogU0VRVUVOQ0UgKi8KKwlpbnQgb3B0aW9uczsJCS8qIE5vIHVzZSAqLworCXVuc2lnbmVkIG5ldHdvcms7Cit9IFVuaWNhc3RBZGRyZXNzX2lQQWRkcmVzczsKKwordHlwZWRlZiBzdHJ1Y3QgVW5pY2FzdEFkZHJlc3MgewkvKiBDSE9JQ0UgKi8KKwllbnVtIHsKKwkJZVVuaWNhc3RBZGRyZXNzX2lQQWRkcmVzcywKKwkJZVVuaWNhc3RBZGRyZXNzX2lQWEFkZHJlc3MsCisJCWVVbmljYXN0QWRkcmVzc19pUDZBZGRyZXNzLAorCQllVW5pY2FzdEFkZHJlc3NfbmV0QmlvcywKKwkJZVVuaWNhc3RBZGRyZXNzX2lQU291cmNlUm91dGVBZGRyZXNzLAorCQllVW5pY2FzdEFkZHJlc3NfbnNhcCwKKwkJZVVuaWNhc3RBZGRyZXNzX25vblN0YW5kYXJkQWRkcmVzcywKKwl9IGNob2ljZTsKKwl1bmlvbiB7CisJCVVuaWNhc3RBZGRyZXNzX2lQQWRkcmVzcyBpUEFkZHJlc3M7CisJfTsKK30gVW5pY2FzdEFkZHJlc3M7CisKK3R5cGVkZWYgc3RydWN0IEgyNDVfVHJhbnNwb3J0QWRkcmVzcyB7CS8qIENIT0lDRSAqLworCWVudW0geworCQllSDI0NV9UcmFuc3BvcnRBZGRyZXNzX3VuaWNhc3RBZGRyZXNzLAorCQllSDI0NV9UcmFuc3BvcnRBZGRyZXNzX211bHRpY2FzdEFkZHJlc3MsCisJfSBjaG9pY2U7CisJdW5pb24geworCQlVbmljYXN0QWRkcmVzcyB1bmljYXN0QWRkcmVzczsKKwl9OworfSBIMjQ1X1RyYW5zcG9ydEFkZHJlc3M7CisKK3R5cGVkZWYgc3RydWN0IEgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX25vblN0YW5kYXJkID0gKDEgPDwgMzEpLAorCQllSDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfYXNzb2NpYXRlZFNlc3Npb25JRCA9CisJCSAgICAoMSA8PCAzMCksCisJCWVIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tZWRpYUNoYW5uZWwgPSAoMSA8PCAyOSksCisJCWVIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tZWRpYUd1YXJhbnRlZWREZWxpdmVyeSA9CisJCSAgICAoMSA8PCAyOCksCisJCWVIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tZWRpYUNvbnRyb2xDaGFubmVsID0KKwkJICAgICgxIDw8IDI3KSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX21lZGlhQ29udHJvbEd1YXJhbnRlZWREZWxpdmVyeQorCQkgICAgPSAoMSA8PCAyNiksCisJCWVIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19zaWxlbmNlU3VwcHJlc3Npb24gPSAoMSA8PCAyNSksCisJCWVIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19kZXN0aW5hdGlvbiA9ICgxIDw8IDI0KSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX2R5bmFtaWNSVFBQYXlsb2FkVHlwZSA9CisJCSAgICAoMSA8PCAyMyksCisJCWVIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tZWRpYVBhY2tldGl6YXRpb24gPSAoMSA8PCAyMiksCisJCWVIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc190cmFuc3BvcnRDYXBhYmlsaXR5ID0KKwkJICAgICgxIDw8IDIxKSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX3JlZHVuZGFuY3lFbmNvZGluZyA9ICgxIDw8IDIwKSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX3NvdXJjZSA9ICgxIDw8IDE5KSwKKwl9IG9wdGlvbnM7CisJSDI0NV9UcmFuc3BvcnRBZGRyZXNzIG1lZGlhQ2hhbm5lbDsKKwlIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgbWVkaWFDb250cm9sQ2hhbm5lbDsKK30gSDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnM7CisKK3R5cGVkZWYgc3RydWN0IE9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMgewkvKiBDSE9JQ0UgKi8KKwllbnVtIHsKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfaDIyMkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfaDIyM0xvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfdjc2TG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLAorCQllT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbXVsdGlwbGV4UGFyYW1ldGVyc19oMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfbm9uZSwKKwl9IGNob2ljZTsKKwl1bmlvbiB7CisJCUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzIGgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzOworCX07Cit9IE9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnM7CisKK3R5cGVkZWYgc3RydWN0IE9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX3BvcnROdW1iZXIKKwkJICAgID0gKDEgPDwgMzEpLAorCQllT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfZm9yd2FyZExvZ2ljYWxDaGFubmVsRGVwZW5kZW5jeQorCQkgICAgPSAoMSA8PCAzMCksCisJCWVPcGVuTG9naWNhbENoYW5uZWxfZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19yZXBsYWNlbWVudEZvcgorCQkgICAgPSAoMSA8PCAyOSksCisJfSBvcHRpb25zOworCURhdGFUeXBlIGRhdGFUeXBlOworCU9wZW5Mb2dpY2FsQ2hhbm5lbF9mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMKKwkgICAgbXVsdGlwbGV4UGFyYW1ldGVyczsKK30gT3BlbkxvZ2ljYWxDaGFubmVsX2ZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnM7CisKK3R5cGVkZWYgc3RydWN0IE9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMgewkvKiBDSE9JQ0UgKi8KKwllbnVtIHsKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfaDIyM0xvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfdjc2TG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLAorCQllT3BlbkxvZ2ljYWxDaGFubmVsX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbXVsdGlwbGV4UGFyYW1ldGVyc19oMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywKKwl9IGNob2ljZTsKKwl1bmlvbiB7CisJCUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzIGgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzOworCX07Cit9IE9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnM7CisKK3R5cGVkZWYgc3RydWN0IE9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMKKwkJICAgID0gKDEgPDwgMzEpLAorCQllT3BlbkxvZ2ljYWxDaGFubmVsX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsRGVwZW5kZW5jeQorCQkgICAgPSAoMSA8PCAzMCksCisJCWVPcGVuTG9naWNhbENoYW5uZWxfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19yZXBsYWNlbWVudEZvcgorCQkgICAgPSAoMSA8PCAyOSksCisJfSBvcHRpb25zOworCU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMKKwkgICAgbXVsdGlwbGV4UGFyYW1ldGVyczsKK30gT3BlbkxvZ2ljYWxDaGFubmVsX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnM7CisKK3R5cGVkZWYgc3RydWN0IE5ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzX25ldHdvcmtBZGRyZXNzIHsJLyogQ0hPSUNFICovCisJZW51bSB7CisJCWVOZXR3b3JrQWNjZXNzUGFyYW1ldGVyc19uZXR3b3JrQWRkcmVzc19xMjkzMUFkZHJlc3MsCisJCWVOZXR3b3JrQWNjZXNzUGFyYW1ldGVyc19uZXR3b3JrQWRkcmVzc19lMTY0QWRkcmVzcywKKwkJZU5ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzX25ldHdvcmtBZGRyZXNzX2xvY2FsQXJlYUFkZHJlc3MsCisJfSBjaG9pY2U7CisJdW5pb24geworCQlIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgbG9jYWxBcmVhQWRkcmVzczsKKwl9OworfSBOZXR3b3JrQWNjZXNzUGFyYW1ldGVyc19uZXR3b3JrQWRkcmVzczsKKwordHlwZWRlZiBzdHJ1Y3QgTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnMgewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnNfZGlzdHJpYnV0aW9uID0gKDEgPDwgMzEpLAorCQllTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnNfZXh0ZXJuYWxSZWZlcmVuY2UgPSAoMSA8PCAzMCksCisJCWVOZXR3b3JrQWNjZXNzUGFyYW1ldGVyc190MTIwU2V0dXBQcm9jZWR1cmUgPSAoMSA8PCAyOSksCisJfSBvcHRpb25zOworCU5ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzX25ldHdvcmtBZGRyZXNzIG5ldHdvcmtBZGRyZXNzOworfSBOZXR3b3JrQWNjZXNzUGFyYW1ldGVyczsKKwordHlwZWRlZiBzdHJ1Y3QgT3BlbkxvZ2ljYWxDaGFubmVsIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzID0KKwkJICAgICgxIDw8IDMxKSwKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbF9zZXBhcmF0ZVN0YWNrID0gKDEgPDwgMzApLAorCQllT3BlbkxvZ2ljYWxDaGFubmVsX2VuY3J5cHRpb25TeW5jID0gKDEgPDwgMjkpLAorCX0gb3B0aW9uczsKKwlPcGVuTG9naWNhbENoYW5uZWxfZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycworCSAgICBmb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzOworCU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzCisJICAgIHJldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnM7CisJTmV0d29ya0FjY2Vzc1BhcmFtZXRlcnMgc2VwYXJhdGVTdGFjazsKK30gT3BlbkxvZ2ljYWxDaGFubmVsOworCit0eXBlZGVmIHN0cnVjdCBTZXR1cF9VVUlFX2Zhc3RTdGFydCB7CS8qIFNFUVVFTkNFIE9GICovCisJaW50IGNvdW50OworCU9wZW5Mb2dpY2FsQ2hhbm5lbCBpdGVtWzMwXTsKK30gU2V0dXBfVVVJRV9mYXN0U3RhcnQ7CisKK3R5cGVkZWYgc3RydWN0IFNldHVwX1VVSUUgewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllU2V0dXBfVVVJRV9oMjQ1QWRkcmVzcyA9ICgxIDw8IDMxKSwKKwkJZVNldHVwX1VVSUVfc291cmNlQWRkcmVzcyA9ICgxIDw8IDMwKSwKKwkJZVNldHVwX1VVSUVfZGVzdGluYXRpb25BZGRyZXNzID0gKDEgPDwgMjkpLAorCQllU2V0dXBfVVVJRV9kZXN0Q2FsbFNpZ25hbEFkZHJlc3MgPSAoMSA8PCAyOCksCisJCWVTZXR1cF9VVUlFX2Rlc3RFeHRyYUNhbGxJbmZvID0gKDEgPDwgMjcpLAorCQllU2V0dXBfVVVJRV9kZXN0RXh0cmFDUlYgPSAoMSA8PCAyNiksCisJCWVTZXR1cF9VVUlFX2NhbGxTZXJ2aWNlcyA9ICgxIDw8IDI1KSwKKwkJZVNldHVwX1VVSUVfc291cmNlQ2FsbFNpZ25hbEFkZHJlc3MgPSAoMSA8PCAyNCksCisJCWVTZXR1cF9VVUlFX3JlbW90ZUV4dGVuc2lvbkFkZHJlc3MgPSAoMSA8PCAyMyksCisJCWVTZXR1cF9VVUlFX2NhbGxJZGVudGlmaWVyID0gKDEgPDwgMjIpLAorCQllU2V0dXBfVVVJRV9oMjQ1U2VjdXJpdHlDYXBhYmlsaXR5ID0gKDEgPDwgMjEpLAorCQllU2V0dXBfVVVJRV90b2tlbnMgPSAoMSA8PCAyMCksCisJCWVTZXR1cF9VVUlFX2NyeXB0b1Rva2VucyA9ICgxIDw8IDE5KSwKKwkJZVNldHVwX1VVSUVfZmFzdFN0YXJ0ID0gKDEgPDwgMTgpLAorCQllU2V0dXBfVVVJRV9tZWRpYVdhaXRGb3JDb25uZWN0ID0gKDEgPDwgMTcpLAorCQllU2V0dXBfVVVJRV9jYW5PdmVybGFwU2VuZCA9ICgxIDw8IDE2KSwKKwkJZVNldHVwX1VVSUVfZW5kcG9pbnRJZGVudGlmaWVyID0gKDEgPDwgMTUpLAorCQllU2V0dXBfVVVJRV9tdWx0aXBsZUNhbGxzID0gKDEgPDwgMTQpLAorCQllU2V0dXBfVVVJRV9tYWludGFpbkNvbm5lY3Rpb24gPSAoMSA8PCAxMyksCisJCWVTZXR1cF9VVUlFX2Nvbm5lY3Rpb25QYXJhbWV0ZXJzID0gKDEgPDwgMTIpLAorCQllU2V0dXBfVVVJRV9sYW5ndWFnZSA9ICgxIDw8IDExKSwKKwkJZVNldHVwX1VVSUVfcHJlc2VudGF0aW9uSW5kaWNhdG9yID0gKDEgPDwgMTApLAorCQllU2V0dXBfVVVJRV9zY3JlZW5pbmdJbmRpY2F0b3IgPSAoMSA8PCA5KSwKKwkJZVNldHVwX1VVSUVfc2VydmljZUNvbnRyb2wgPSAoMSA8PCA4KSwKKwkJZVNldHVwX1VVSUVfc3ltbWV0cmljT3BlcmF0aW9uUmVxdWlyZWQgPSAoMSA8PCA3KSwKKwkJZVNldHVwX1VVSUVfY2FwYWNpdHkgPSAoMSA8PCA2KSwKKwkJZVNldHVwX1VVSUVfY2lyY3VpdEluZm8gPSAoMSA8PCA1KSwKKwkJZVNldHVwX1VVSUVfZGVzaXJlZFByb3RvY29scyA9ICgxIDw8IDQpLAorCQllU2V0dXBfVVVJRV9uZWVkZWRGZWF0dXJlcyA9ICgxIDw8IDMpLAorCQllU2V0dXBfVVVJRV9kZXNpcmVkRmVhdHVyZXMgPSAoMSA8PCAyKSwKKwkJZVNldHVwX1VVSUVfc3VwcG9ydGVkRmVhdHVyZXMgPSAoMSA8PCAxKSwKKwkJZVNldHVwX1VVSUVfcGFyYWxsZWxIMjQ1Q29udHJvbCA9ICgxIDw8IDApLAorCX0gb3B0aW9uczsKKwlUcmFuc3BvcnRBZGRyZXNzIGgyNDVBZGRyZXNzOworCVRyYW5zcG9ydEFkZHJlc3MgZGVzdENhbGxTaWduYWxBZGRyZXNzOworCVRyYW5zcG9ydEFkZHJlc3Mgc291cmNlQ2FsbFNpZ25hbEFkZHJlc3M7CisJU2V0dXBfVVVJRV9mYXN0U3RhcnQgZmFzdFN0YXJ0OworfSBTZXR1cF9VVUlFOworCit0eXBlZGVmIHN0cnVjdCBDYWxsUHJvY2VlZGluZ19VVUlFX2Zhc3RTdGFydCB7CS8qIFNFUVVFTkNFIE9GICovCisJaW50IGNvdW50OworCU9wZW5Mb2dpY2FsQ2hhbm5lbCBpdGVtWzMwXTsKK30gQ2FsbFByb2NlZWRpbmdfVVVJRV9mYXN0U3RhcnQ7CisKK3R5cGVkZWYgc3RydWN0IENhbGxQcm9jZWVkaW5nX1VVSUUgewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllQ2FsbFByb2NlZWRpbmdfVVVJRV9oMjQ1QWRkcmVzcyA9ICgxIDw8IDMxKSwKKwkJZUNhbGxQcm9jZWVkaW5nX1VVSUVfY2FsbElkZW50aWZpZXIgPSAoMSA8PCAzMCksCisJCWVDYWxsUHJvY2VlZGluZ19VVUlFX2gyNDVTZWN1cml0eU1vZGUgPSAoMSA8PCAyOSksCisJCWVDYWxsUHJvY2VlZGluZ19VVUlFX3Rva2VucyA9ICgxIDw8IDI4KSwKKwkJZUNhbGxQcm9jZWVkaW5nX1VVSUVfY3J5cHRvVG9rZW5zID0gKDEgPDwgMjcpLAorCQllQ2FsbFByb2NlZWRpbmdfVVVJRV9mYXN0U3RhcnQgPSAoMSA8PCAyNiksCisJCWVDYWxsUHJvY2VlZGluZ19VVUlFX211bHRpcGxlQ2FsbHMgPSAoMSA8PCAyNSksCisJCWVDYWxsUHJvY2VlZGluZ19VVUlFX21haW50YWluQ29ubmVjdGlvbiA9ICgxIDw8IDI0KSwKKwkJZUNhbGxQcm9jZWVkaW5nX1VVSUVfZmFzdENvbm5lY3RSZWZ1c2VkID0gKDEgPDwgMjMpLAorCQllQ2FsbFByb2NlZWRpbmdfVVVJRV9mZWF0dXJlU2V0ID0gKDEgPDwgMjIpLAorCX0gb3B0aW9uczsKKwlUcmFuc3BvcnRBZGRyZXNzIGgyNDVBZGRyZXNzOworCUNhbGxQcm9jZWVkaW5nX1VVSUVfZmFzdFN0YXJ0IGZhc3RTdGFydDsKK30gQ2FsbFByb2NlZWRpbmdfVVVJRTsKKwordHlwZWRlZiBzdHJ1Y3QgQ29ubmVjdF9VVUlFX2Zhc3RTdGFydCB7CS8qIFNFUVVFTkNFIE9GICovCisJaW50IGNvdW50OworCU9wZW5Mb2dpY2FsQ2hhbm5lbCBpdGVtWzMwXTsKK30gQ29ubmVjdF9VVUlFX2Zhc3RTdGFydDsKKwordHlwZWRlZiBzdHJ1Y3QgQ29ubmVjdF9VVUlFIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZUNvbm5lY3RfVVVJRV9oMjQ1QWRkcmVzcyA9ICgxIDw8IDMxKSwKKwkJZUNvbm5lY3RfVVVJRV9jYWxsSWRlbnRpZmllciA9ICgxIDw8IDMwKSwKKwkJZUNvbm5lY3RfVVVJRV9oMjQ1U2VjdXJpdHlNb2RlID0gKDEgPDwgMjkpLAorCQllQ29ubmVjdF9VVUlFX3Rva2VucyA9ICgxIDw8IDI4KSwKKwkJZUNvbm5lY3RfVVVJRV9jcnlwdG9Ub2tlbnMgPSAoMSA8PCAyNyksCisJCWVDb25uZWN0X1VVSUVfZmFzdFN0YXJ0ID0gKDEgPDwgMjYpLAorCQllQ29ubmVjdF9VVUlFX211bHRpcGxlQ2FsbHMgPSAoMSA8PCAyNSksCisJCWVDb25uZWN0X1VVSUVfbWFpbnRhaW5Db25uZWN0aW9uID0gKDEgPDwgMjQpLAorCQllQ29ubmVjdF9VVUlFX2xhbmd1YWdlID0gKDEgPDwgMjMpLAorCQllQ29ubmVjdF9VVUlFX2Nvbm5lY3RlZEFkZHJlc3MgPSAoMSA8PCAyMiksCisJCWVDb25uZWN0X1VVSUVfcHJlc2VudGF0aW9uSW5kaWNhdG9yID0gKDEgPDwgMjEpLAorCQllQ29ubmVjdF9VVUlFX3NjcmVlbmluZ0luZGljYXRvciA9ICgxIDw8IDIwKSwKKwkJZUNvbm5lY3RfVVVJRV9mYXN0Q29ubmVjdFJlZnVzZWQgPSAoMSA8PCAxOSksCisJCWVDb25uZWN0X1VVSUVfc2VydmljZUNvbnRyb2wgPSAoMSA8PCAxOCksCisJCWVDb25uZWN0X1VVSUVfY2FwYWNpdHkgPSAoMSA8PCAxNyksCisJCWVDb25uZWN0X1VVSUVfZmVhdHVyZVNldCA9ICgxIDw8IDE2KSwKKwl9IG9wdGlvbnM7CisJVHJhbnNwb3J0QWRkcmVzcyBoMjQ1QWRkcmVzczsKKwlDb25uZWN0X1VVSUVfZmFzdFN0YXJ0IGZhc3RTdGFydDsKK30gQ29ubmVjdF9VVUlFOworCit0eXBlZGVmIHN0cnVjdCBBbGVydGluZ19VVUlFX2Zhc3RTdGFydCB7CS8qIFNFUVVFTkNFIE9GICovCisJaW50IGNvdW50OworCU9wZW5Mb2dpY2FsQ2hhbm5lbCBpdGVtWzMwXTsKK30gQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnQ7CisKK3R5cGVkZWYgc3RydWN0IEFsZXJ0aW5nX1VVSUUgewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllQWxlcnRpbmdfVVVJRV9oMjQ1QWRkcmVzcyA9ICgxIDw8IDMxKSwKKwkJZUFsZXJ0aW5nX1VVSUVfY2FsbElkZW50aWZpZXIgPSAoMSA8PCAzMCksCisJCWVBbGVydGluZ19VVUlFX2gyNDVTZWN1cml0eU1vZGUgPSAoMSA8PCAyOSksCisJCWVBbGVydGluZ19VVUlFX3Rva2VucyA9ICgxIDw8IDI4KSwKKwkJZUFsZXJ0aW5nX1VVSUVfY3J5cHRvVG9rZW5zID0gKDEgPDwgMjcpLAorCQllQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnQgPSAoMSA8PCAyNiksCisJCWVBbGVydGluZ19VVUlFX211bHRpcGxlQ2FsbHMgPSAoMSA8PCAyNSksCisJCWVBbGVydGluZ19VVUlFX21haW50YWluQ29ubmVjdGlvbiA9ICgxIDw8IDI0KSwKKwkJZUFsZXJ0aW5nX1VVSUVfYWxlcnRpbmdBZGRyZXNzID0gKDEgPDwgMjMpLAorCQllQWxlcnRpbmdfVVVJRV9wcmVzZW50YXRpb25JbmRpY2F0b3IgPSAoMSA8PCAyMiksCisJCWVBbGVydGluZ19VVUlFX3NjcmVlbmluZ0luZGljYXRvciA9ICgxIDw8IDIxKSwKKwkJZUFsZXJ0aW5nX1VVSUVfZmFzdENvbm5lY3RSZWZ1c2VkID0gKDEgPDwgMjApLAorCQllQWxlcnRpbmdfVVVJRV9zZXJ2aWNlQ29udHJvbCA9ICgxIDw8IDE5KSwKKwkJZUFsZXJ0aW5nX1VVSUVfY2FwYWNpdHkgPSAoMSA8PCAxOCksCisJCWVBbGVydGluZ19VVUlFX2ZlYXR1cmVTZXQgPSAoMSA8PCAxNyksCisJfSBvcHRpb25zOworCVRyYW5zcG9ydEFkZHJlc3MgaDI0NUFkZHJlc3M7CisJQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnQgZmFzdFN0YXJ0OworfSBBbGVydGluZ19VVUlFOworCit0eXBlZGVmIHN0cnVjdCBJbmZvcm1hdGlvbl9VVUlFX2Zhc3RTdGFydCB7CS8qIFNFUVVFTkNFIE9GICovCisJaW50IGNvdW50OworCU9wZW5Mb2dpY2FsQ2hhbm5lbCBpdGVtWzMwXTsKK30gSW5mb3JtYXRpb25fVVVJRV9mYXN0U3RhcnQ7CisKK3R5cGVkZWYgc3RydWN0IEluZm9ybWF0aW9uX1VVSUUgewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllSW5mb3JtYXRpb25fVVVJRV9jYWxsSWRlbnRpZmllciA9ICgxIDw8IDMxKSwKKwkJZUluZm9ybWF0aW9uX1VVSUVfdG9rZW5zID0gKDEgPDwgMzApLAorCQllSW5mb3JtYXRpb25fVVVJRV9jcnlwdG9Ub2tlbnMgPSAoMSA8PCAyOSksCisJCWVJbmZvcm1hdGlvbl9VVUlFX2Zhc3RTdGFydCA9ICgxIDw8IDI4KSwKKwkJZUluZm9ybWF0aW9uX1VVSUVfZmFzdENvbm5lY3RSZWZ1c2VkID0gKDEgPDwgMjcpLAorCQllSW5mb3JtYXRpb25fVVVJRV9jaXJjdWl0SW5mbyA9ICgxIDw8IDI2KSwKKwl9IG9wdGlvbnM7CisJSW5mb3JtYXRpb25fVVVJRV9mYXN0U3RhcnQgZmFzdFN0YXJ0OworfSBJbmZvcm1hdGlvbl9VVUlFOworCit0eXBlZGVmIHN0cnVjdCBGYWNpbGl0eVJlYXNvbiB7CS8qIENIT0lDRSAqLworCWVudW0geworCQllRmFjaWxpdHlSZWFzb25fcm91dGVDYWxsVG9HYXRla2VlcGVyLAorCQllRmFjaWxpdHlSZWFzb25fY2FsbEZvcndhcmRlZCwKKwkJZUZhY2lsaXR5UmVhc29uX3JvdXRlQ2FsbFRvTUMsCisJCWVGYWNpbGl0eVJlYXNvbl91bmRlZmluZWRSZWFzb24sCisJCWVGYWNpbGl0eVJlYXNvbl9jb25mZXJlbmNlTGlzdENob2ljZSwKKwkJZUZhY2lsaXR5UmVhc29uX3N0YXJ0SDI0NSwKKwkJZUZhY2lsaXR5UmVhc29uX25vSDI0NSwKKwkJZUZhY2lsaXR5UmVhc29uX25ld1Rva2VucywKKwkJZUZhY2lsaXR5UmVhc29uX2ZlYXR1cmVTZXRVcGRhdGUsCisJCWVGYWNpbGl0eVJlYXNvbl9mb3J3YXJkZWRFbGVtZW50cywKKwkJZUZhY2lsaXR5UmVhc29uX3RyYW5zcG9ydGVkSW5mb3JtYXRpb24sCisJfSBjaG9pY2U7Cit9IEZhY2lsaXR5UmVhc29uOworCit0eXBlZGVmIHN0cnVjdCBGYWNpbGl0eV9VVUlFX2Zhc3RTdGFydCB7CS8qIFNFUVVFTkNFIE9GICovCisJaW50IGNvdW50OworCU9wZW5Mb2dpY2FsQ2hhbm5lbCBpdGVtWzMwXTsKK30gRmFjaWxpdHlfVVVJRV9mYXN0U3RhcnQ7CisKK3R5cGVkZWYgc3RydWN0IEZhY2lsaXR5X1VVSUUgewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllRmFjaWxpdHlfVVVJRV9hbHRlcm5hdGl2ZUFkZHJlc3MgPSAoMSA8PCAzMSksCisJCWVGYWNpbGl0eV9VVUlFX2FsdGVybmF0aXZlQWxpYXNBZGRyZXNzID0gKDEgPDwgMzApLAorCQllRmFjaWxpdHlfVVVJRV9jb25mZXJlbmNlSUQgPSAoMSA8PCAyOSksCisJCWVGYWNpbGl0eV9VVUlFX2NhbGxJZGVudGlmaWVyID0gKDEgPDwgMjgpLAorCQllRmFjaWxpdHlfVVVJRV9kZXN0RXh0cmFDYWxsSW5mbyA9ICgxIDw8IDI3KSwKKwkJZUZhY2lsaXR5X1VVSUVfcmVtb3RlRXh0ZW5zaW9uQWRkcmVzcyA9ICgxIDw8IDI2KSwKKwkJZUZhY2lsaXR5X1VVSUVfdG9rZW5zID0gKDEgPDwgMjUpLAorCQllRmFjaWxpdHlfVVVJRV9jcnlwdG9Ub2tlbnMgPSAoMSA8PCAyNCksCisJCWVGYWNpbGl0eV9VVUlFX2NvbmZlcmVuY2VzID0gKDEgPDwgMjMpLAorCQllRmFjaWxpdHlfVVVJRV9oMjQ1QWRkcmVzcyA9ICgxIDw8IDIyKSwKKwkJZUZhY2lsaXR5X1VVSUVfZmFzdFN0YXJ0ID0gKDEgPDwgMjEpLAorCQllRmFjaWxpdHlfVVVJRV9tdWx0aXBsZUNhbGxzID0gKDEgPDwgMjApLAorCQllRmFjaWxpdHlfVVVJRV9tYWludGFpbkNvbm5lY3Rpb24gPSAoMSA8PCAxOSksCisJCWVGYWNpbGl0eV9VVUlFX2Zhc3RDb25uZWN0UmVmdXNlZCA9ICgxIDw8IDE4KSwKKwkJZUZhY2lsaXR5X1VVSUVfc2VydmljZUNvbnRyb2wgPSAoMSA8PCAxNyksCisJCWVGYWNpbGl0eV9VVUlFX2NpcmN1aXRJbmZvID0gKDEgPDwgMTYpLAorCQllRmFjaWxpdHlfVVVJRV9mZWF0dXJlU2V0ID0gKDEgPDwgMTUpLAorCQllRmFjaWxpdHlfVVVJRV9kZXN0aW5hdGlvbkluZm8gPSAoMSA8PCAxNCksCisJCWVGYWNpbGl0eV9VVUlFX2gyNDVTZWN1cml0eU1vZGUgPSAoMSA8PCAxMyksCisJfSBvcHRpb25zOworCUZhY2lsaXR5UmVhc29uIHJlYXNvbjsKKwlUcmFuc3BvcnRBZGRyZXNzIGgyNDVBZGRyZXNzOworCUZhY2lsaXR5X1VVSUVfZmFzdFN0YXJ0IGZhc3RTdGFydDsKK30gRmFjaWxpdHlfVVVJRTsKKwordHlwZWRlZiBzdHJ1Y3QgUHJvZ3Jlc3NfVVVJRV9mYXN0U3RhcnQgewkvKiBTRVFVRU5DRSBPRiAqLworCWludCBjb3VudDsKKwlPcGVuTG9naWNhbENoYW5uZWwgaXRlbVszMF07Cit9IFByb2dyZXNzX1VVSUVfZmFzdFN0YXJ0OworCit0eXBlZGVmIHN0cnVjdCBQcm9ncmVzc19VVUlFIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZVByb2dyZXNzX1VVSUVfaDI0NUFkZHJlc3MgPSAoMSA8PCAzMSksCisJCWVQcm9ncmVzc19VVUlFX2gyNDVTZWN1cml0eU1vZGUgPSAoMSA8PCAzMCksCisJCWVQcm9ncmVzc19VVUlFX3Rva2VucyA9ICgxIDw8IDI5KSwKKwkJZVByb2dyZXNzX1VVSUVfY3J5cHRvVG9rZW5zID0gKDEgPDwgMjgpLAorCQllUHJvZ3Jlc3NfVVVJRV9mYXN0U3RhcnQgPSAoMSA8PCAyNyksCisJCWVQcm9ncmVzc19VVUlFX211bHRpcGxlQ2FsbHMgPSAoMSA8PCAyNiksCisJCWVQcm9ncmVzc19VVUlFX21haW50YWluQ29ubmVjdGlvbiA9ICgxIDw8IDI1KSwKKwkJZVByb2dyZXNzX1VVSUVfZmFzdENvbm5lY3RSZWZ1c2VkID0gKDEgPDwgMjQpLAorCX0gb3B0aW9uczsKKwlUcmFuc3BvcnRBZGRyZXNzIGgyNDVBZGRyZXNzOworCVByb2dyZXNzX1VVSUVfZmFzdFN0YXJ0IGZhc3RTdGFydDsKK30gUHJvZ3Jlc3NfVVVJRTsKKwordHlwZWRlZiBzdHJ1Y3QgSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHkgewkvKiBDSE9JQ0UgKi8KKwllbnVtIHsKKwkJZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3NldHVwLAorCQllSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfY2FsbFByb2NlZWRpbmcsCisJCWVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9jb25uZWN0LAorCQllSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfYWxlcnRpbmcsCisJCWVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9pbmZvcm1hdGlvbiwKKwkJZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3JlbGVhc2VDb21wbGV0ZSwKKwkJZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2ZhY2lsaXR5LAorCQllSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfcHJvZ3Jlc3MsCisJCWVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9lbXB0eSwKKwkJZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3N0YXR1cywKKwkJZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X3N0YXR1c0lucXVpcnksCisJCWVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9zZXR1cEFja25vd2xlZGdlLAorCQllSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfbm90aWZ5LAorCX0gY2hvaWNlOworCXVuaW9uIHsKKwkJU2V0dXBfVVVJRSBzZXR1cDsKKwkJQ2FsbFByb2NlZWRpbmdfVVVJRSBjYWxsUHJvY2VlZGluZzsKKwkJQ29ubmVjdF9VVUlFIGNvbm5lY3Q7CisJCUFsZXJ0aW5nX1VVSUUgYWxlcnRpbmc7CisJCUluZm9ybWF0aW9uX1VVSUUgaW5mb3JtYXRpb247CisJCUZhY2lsaXR5X1VVSUUgZmFjaWxpdHk7CisJCVByb2dyZXNzX1VVSUUgcHJvZ3Jlc3M7CisJfTsKK30gSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHk7CisKK3R5cGVkZWYgc3RydWN0IFJlcXVlc3RNZXNzYWdlIHsJLyogQ0hPSUNFICovCisJZW51bSB7CisJCWVSZXF1ZXN0TWVzc2FnZV9ub25TdGFuZGFyZCwKKwkJZVJlcXVlc3RNZXNzYWdlX21hc3RlclNsYXZlRGV0ZXJtaW5hdGlvbiwKKwkJZVJlcXVlc3RNZXNzYWdlX3Rlcm1pbmFsQ2FwYWJpbGl0eVNldCwKKwkJZVJlcXVlc3RNZXNzYWdlX29wZW5Mb2dpY2FsQ2hhbm5lbCwKKwkJZVJlcXVlc3RNZXNzYWdlX2Nsb3NlTG9naWNhbENoYW5uZWwsCisJCWVSZXF1ZXN0TWVzc2FnZV9yZXF1ZXN0Q2hhbm5lbENsb3NlLAorCQllUmVxdWVzdE1lc3NhZ2VfbXVsdGlwbGV4RW50cnlTZW5kLAorCQllUmVxdWVzdE1lc3NhZ2VfcmVxdWVzdE11bHRpcGxleEVudHJ5LAorCQllUmVxdWVzdE1lc3NhZ2VfcmVxdWVzdE1vZGUsCisJCWVSZXF1ZXN0TWVzc2FnZV9yb3VuZFRyaXBEZWxheVJlcXVlc3QsCisJCWVSZXF1ZXN0TWVzc2FnZV9tYWludGVuYW5jZUxvb3BSZXF1ZXN0LAorCQllUmVxdWVzdE1lc3NhZ2VfY29tbXVuaWNhdGlvbk1vZGVSZXF1ZXN0LAorCQllUmVxdWVzdE1lc3NhZ2VfY29uZmVyZW5jZVJlcXVlc3QsCisJCWVSZXF1ZXN0TWVzc2FnZV9tdWx0aWxpbmtSZXF1ZXN0LAorCQllUmVxdWVzdE1lc3NhZ2VfbG9naWNhbENoYW5uZWxSYXRlUmVxdWVzdCwKKwl9IGNob2ljZTsKKwl1bmlvbiB7CisJCU9wZW5Mb2dpY2FsQ2hhbm5lbCBvcGVuTG9naWNhbENoYW5uZWw7CisJfTsKK30gUmVxdWVzdE1lc3NhZ2U7CisKK3R5cGVkZWYgc3RydWN0IE9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMgewkvKiBDSE9JQ0UgKi8KKwllbnVtIHsKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfaDIyMkxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycywKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfaDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMsCisJfSBjaG9pY2U7CisJdW5pb24geworCQlIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyBoMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyczsKKwl9OworfSBPcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzOworCit0eXBlZGVmIHN0cnVjdCBPcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyB7CS8qIFNFUVVFTkNFICovCisJZW51bSB7CisJCWVPcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19wb3J0TnVtYmVyCisJCSAgICA9ICgxIDw8IDMxKSwKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMKKwkJICAgID0gKDEgPDwgMzApLAorCQllT3BlbkxvZ2ljYWxDaGFubmVsQWNrX3JldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfcmVwbGFjZW1lbnRGb3IKKwkJICAgID0gKDEgPDwgMjkpLAorCX0gb3B0aW9uczsKKwlPcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzCisJICAgIG11bHRpcGxleFBhcmFtZXRlcnM7Cit9IE9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzOworCit0eXBlZGVmIHN0cnVjdCBIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycyB7CS8qIFNFUVVFTkNFICovCisJZW51bSB7CisJCWVIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVyc19ub25TdGFuZGFyZCA9ICgxIDw8IDMxKSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzX3Nlc3Npb25JRCA9ICgxIDw8IDMwKSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzX21lZGlhQ2hhbm5lbCA9ICgxIDw8IDI5KSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzX21lZGlhQ29udHJvbENoYW5uZWwgPQorCQkgICAgKDEgPDwgMjgpLAorCQllSDIyNTBMb2dpY2FsQ2hhbm5lbEFja1BhcmFtZXRlcnNfZHluYW1pY1JUUFBheWxvYWRUeXBlID0KKwkJICAgICgxIDw8IDI3KSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzX2Zsb3dDb250cm9sVG9aZXJvID0KKwkJICAgICgxIDw8IDI2KSwKKwkJZUgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzX3BvcnROdW1iZXIgPSAoMSA8PCAyNSksCisJfSBvcHRpb25zOworCUgyNDVfVHJhbnNwb3J0QWRkcmVzcyBtZWRpYUNoYW5uZWw7CisJSDI0NV9UcmFuc3BvcnRBZGRyZXNzIG1lZGlhQ29udHJvbENoYW5uZWw7Cit9IEgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzOworCit0eXBlZGVmIHN0cnVjdCBPcGVuTG9naWNhbENoYW5uZWxBY2tfZm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnMgewkvKiBDSE9JQ0UgKi8KKwllbnVtIHsKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19mb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVyc19oMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycywKKwl9IGNob2ljZTsKKwl1bmlvbiB7CisJCUgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzCisJCSAgICBoMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVyczsKKwl9OworfSBPcGVuTG9naWNhbENoYW5uZWxBY2tfZm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnM7CisKK3R5cGVkZWYgc3RydWN0IE9wZW5Mb2dpY2FsQ2hhbm5lbEFjayB7CS8qIFNFUVVFTkNFICovCisJZW51bSB7CisJCWVPcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyA9CisJCSAgICAoMSA8PCAzMSksCisJCWVPcGVuTG9naWNhbENoYW5uZWxBY2tfc2VwYXJhdGVTdGFjayA9ICgxIDw8IDMwKSwKKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19mb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVycyA9CisJCSAgICAoMSA8PCAyOSksCisJCWVPcGVuTG9naWNhbENoYW5uZWxBY2tfZW5jcnlwdGlvblN5bmMgPSAoMSA8PCAyOCksCisJfSBvcHRpb25zOworCU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzCisJICAgIHJldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnM7CisJT3BlbkxvZ2ljYWxDaGFubmVsQWNrX2ZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzCisJICAgIGZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzOworfSBPcGVuTG9naWNhbENoYW5uZWxBY2s7CisKK3R5cGVkZWYgc3RydWN0IFJlc3BvbnNlTWVzc2FnZSB7CS8qIENIT0lDRSAqLworCWVudW0geworCQllUmVzcG9uc2VNZXNzYWdlX25vblN0YW5kYXJkLAorCQllUmVzcG9uc2VNZXNzYWdlX21hc3RlclNsYXZlRGV0ZXJtaW5hdGlvbkFjaywKKwkJZVJlc3BvbnNlTWVzc2FnZV9tYXN0ZXJTbGF2ZURldGVybWluYXRpb25SZWplY3QsCisJCWVSZXNwb25zZU1lc3NhZ2VfdGVybWluYWxDYXBhYmlsaXR5U2V0QWNrLAorCQllUmVzcG9uc2VNZXNzYWdlX3Rlcm1pbmFsQ2FwYWJpbGl0eVNldFJlamVjdCwKKwkJZVJlc3BvbnNlTWVzc2FnZV9vcGVuTG9naWNhbENoYW5uZWxBY2ssCisJCWVSZXNwb25zZU1lc3NhZ2Vfb3BlbkxvZ2ljYWxDaGFubmVsUmVqZWN0LAorCQllUmVzcG9uc2VNZXNzYWdlX2Nsb3NlTG9naWNhbENoYW5uZWxBY2ssCisJCWVSZXNwb25zZU1lc3NhZ2VfcmVxdWVzdENoYW5uZWxDbG9zZUFjaywKKwkJZVJlc3BvbnNlTWVzc2FnZV9yZXF1ZXN0Q2hhbm5lbENsb3NlUmVqZWN0LAorCQllUmVzcG9uc2VNZXNzYWdlX211bHRpcGxleEVudHJ5U2VuZEFjaywKKwkJZVJlc3BvbnNlTWVzc2FnZV9tdWx0aXBsZXhFbnRyeVNlbmRSZWplY3QsCisJCWVSZXNwb25zZU1lc3NhZ2VfcmVxdWVzdE11bHRpcGxleEVudHJ5QWNrLAorCQllUmVzcG9uc2VNZXNzYWdlX3JlcXVlc3RNdWx0aXBsZXhFbnRyeVJlamVjdCwKKwkJZVJlc3BvbnNlTWVzc2FnZV9yZXF1ZXN0TW9kZUFjaywKKwkJZVJlc3BvbnNlTWVzc2FnZV9yZXF1ZXN0TW9kZVJlamVjdCwKKwkJZVJlc3BvbnNlTWVzc2FnZV9yb3VuZFRyaXBEZWxheVJlc3BvbnNlLAorCQllUmVzcG9uc2VNZXNzYWdlX21haW50ZW5hbmNlTG9vcEFjaywKKwkJZVJlc3BvbnNlTWVzc2FnZV9tYWludGVuYW5jZUxvb3BSZWplY3QsCisJCWVSZXNwb25zZU1lc3NhZ2VfY29tbXVuaWNhdGlvbk1vZGVSZXNwb25zZSwKKwkJZVJlc3BvbnNlTWVzc2FnZV9jb25mZXJlbmNlUmVzcG9uc2UsCisJCWVSZXNwb25zZU1lc3NhZ2VfbXVsdGlsaW5rUmVzcG9uc2UsCisJCWVSZXNwb25zZU1lc3NhZ2VfbG9naWNhbENoYW5uZWxSYXRlQWNrbm93bGVkZ2UsCisJCWVSZXNwb25zZU1lc3NhZ2VfbG9naWNhbENoYW5uZWxSYXRlUmVqZWN0LAorCX0gY2hvaWNlOworCXVuaW9uIHsKKwkJT3BlbkxvZ2ljYWxDaGFubmVsQWNrIG9wZW5Mb2dpY2FsQ2hhbm5lbEFjazsKKwl9OworfSBSZXNwb25zZU1lc3NhZ2U7CisKK3R5cGVkZWYgc3RydWN0IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZSB7CS8qIENIT0lDRSAqLworCWVudW0geworCQllTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlX3JlcXVlc3QsCisJCWVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VfcmVzcG9uc2UsCisJCWVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VfY29tbWFuZCwKKwkJZU11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZV9pbmRpY2F0aW9uLAorCX0gY2hvaWNlOworCXVuaW9uIHsKKwkJUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdDsKKwkJUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlOworCX07Cit9IE11bHRpbWVkaWFTeXN0ZW1Db250cm9sTWVzc2FnZTsKKwordHlwZWRlZiBzdHJ1Y3QgSDMyM19VVV9QRFVfaDI0NUNvbnRyb2wgewkvKiBTRVFVRU5DRSBPRiAqLworCWludCBjb3VudDsKKwlNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgaXRlbVs0XTsKK30gSDMyM19VVV9QRFVfaDI0NUNvbnRyb2w7CisKK3R5cGVkZWYgc3RydWN0IEgzMjNfVVVfUERVIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZUgzMjNfVVVfUERVX25vblN0YW5kYXJkRGF0YSA9ICgxIDw8IDMxKSwKKwkJZUgzMjNfVVVfUERVX2g0NTAxU3VwcGxlbWVudGFyeVNlcnZpY2UgPSAoMSA8PCAzMCksCisJCWVIMzIzX1VVX1BEVV9oMjQ1VHVubmVsaW5nID0gKDEgPDwgMjkpLAorCQllSDMyM19VVV9QRFVfaDI0NUNvbnRyb2wgPSAoMSA8PCAyOCksCisJCWVIMzIzX1VVX1BEVV9ub25TdGFuZGFyZENvbnRyb2wgPSAoMSA8PCAyNyksCisJCWVIMzIzX1VVX1BEVV9jYWxsTGlua2FnZSA9ICgxIDw8IDI2KSwKKwkJZUgzMjNfVVVfUERVX3R1bm5lbGxlZFNpZ25hbGxpbmdNZXNzYWdlID0gKDEgPDwgMjUpLAorCQllSDMyM19VVV9QRFVfcHJvdmlzaW9uYWxSZXNwVG9IMjQ1VHVubmVsaW5nID0gKDEgPDwgMjQpLAorCQllSDMyM19VVV9QRFVfc3RpbXVsdXNDb250cm9sID0gKDEgPDwgMjMpLAorCQllSDMyM19VVV9QRFVfZ2VuZXJpY0RhdGEgPSAoMSA8PCAyMiksCisJfSBvcHRpb25zOworCUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5IGgzMjNfbWVzc2FnZV9ib2R5OworCUgzMjNfVVVfUERVX2gyNDVDb250cm9sIGgyNDVDb250cm9sOworfSBIMzIzX1VVX1BEVTsKKwordHlwZWRlZiBzdHJ1Y3QgSDMyM19Vc2VySW5mb3JtYXRpb24gewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllSDMyM19Vc2VySW5mb3JtYXRpb25fdXNlcl9kYXRhID0gKDEgPDwgMzEpLAorCX0gb3B0aW9uczsKKwlIMzIzX1VVX1BEVSBoMzIzX3V1X3BkdTsKK30gSDMyM19Vc2VySW5mb3JtYXRpb247CisKK3R5cGVkZWYgc3RydWN0IEdhdGVrZWVwZXJSZXF1ZXN0IHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZUdhdGVrZWVwZXJSZXF1ZXN0X25vblN0YW5kYXJkRGF0YSA9ICgxIDw8IDMxKSwKKwkJZUdhdGVrZWVwZXJSZXF1ZXN0X2dhdGVrZWVwZXJJZGVudGlmaWVyID0gKDEgPDwgMzApLAorCQllR2F0ZWtlZXBlclJlcXVlc3RfY2FsbFNlcnZpY2VzID0gKDEgPDwgMjkpLAorCQllR2F0ZWtlZXBlclJlcXVlc3RfZW5kcG9pbnRBbGlhcyA9ICgxIDw8IDI4KSwKKwkJZUdhdGVrZWVwZXJSZXF1ZXN0X2FsdGVybmF0ZUVuZHBvaW50cyA9ICgxIDw8IDI3KSwKKwkJZUdhdGVrZWVwZXJSZXF1ZXN0X3Rva2VucyA9ICgxIDw8IDI2KSwKKwkJZUdhdGVrZWVwZXJSZXF1ZXN0X2NyeXB0b1Rva2VucyA9ICgxIDw8IDI1KSwKKwkJZUdhdGVrZWVwZXJSZXF1ZXN0X2F1dGhlbnRpY2F0aW9uQ2FwYWJpbGl0eSA9ICgxIDw8IDI0KSwKKwkJZUdhdGVrZWVwZXJSZXF1ZXN0X2FsZ29yaXRobU9JRHMgPSAoMSA8PCAyMyksCisJCWVHYXRla2VlcGVyUmVxdWVzdF9pbnRlZ3JpdHkgPSAoMSA8PCAyMiksCisJCWVHYXRla2VlcGVyUmVxdWVzdF9pbnRlZ3JpdHlDaGVja1ZhbHVlID0gKDEgPDwgMjEpLAorCQllR2F0ZWtlZXBlclJlcXVlc3Rfc3VwcG9ydHNBbHRHSyA9ICgxIDw8IDIwKSwKKwkJZUdhdGVrZWVwZXJSZXF1ZXN0X2ZlYXR1cmVTZXQgPSAoMSA8PCAxOSksCisJCWVHYXRla2VlcGVyUmVxdWVzdF9nZW5lcmljRGF0YSA9ICgxIDw8IDE4KSwKKwl9IG9wdGlvbnM7CisJVHJhbnNwb3J0QWRkcmVzcyByYXNBZGRyZXNzOworfSBHYXRla2VlcGVyUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QgR2F0ZWtlZXBlckNvbmZpcm0gewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllR2F0ZWtlZXBlckNvbmZpcm1fbm9uU3RhbmRhcmREYXRhID0gKDEgPDwgMzEpLAorCQllR2F0ZWtlZXBlckNvbmZpcm1fZ2F0ZWtlZXBlcklkZW50aWZpZXIgPSAoMSA8PCAzMCksCisJCWVHYXRla2VlcGVyQ29uZmlybV9hbHRlcm5hdGVHYXRla2VlcGVyID0gKDEgPDwgMjkpLAorCQllR2F0ZWtlZXBlckNvbmZpcm1fYXV0aGVudGljYXRpb25Nb2RlID0gKDEgPDwgMjgpLAorCQllR2F0ZWtlZXBlckNvbmZpcm1fdG9rZW5zID0gKDEgPDwgMjcpLAorCQllR2F0ZWtlZXBlckNvbmZpcm1fY3J5cHRvVG9rZW5zID0gKDEgPDwgMjYpLAorCQllR2F0ZWtlZXBlckNvbmZpcm1fYWxnb3JpdGhtT0lEID0gKDEgPDwgMjUpLAorCQllR2F0ZWtlZXBlckNvbmZpcm1faW50ZWdyaXR5ID0gKDEgPDwgMjQpLAorCQllR2F0ZWtlZXBlckNvbmZpcm1faW50ZWdyaXR5Q2hlY2tWYWx1ZSA9ICgxIDw8IDIzKSwKKwkJZUdhdGVrZWVwZXJDb25maXJtX2ZlYXR1cmVTZXQgPSAoMSA8PCAyMiksCisJCWVHYXRla2VlcGVyQ29uZmlybV9nZW5lcmljRGF0YSA9ICgxIDw8IDIxKSwKKwl9IG9wdGlvbnM7CisJVHJhbnNwb3J0QWRkcmVzcyByYXNBZGRyZXNzOworfSBHYXRla2VlcGVyQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QgUmVnaXN0cmF0aW9uUmVxdWVzdF9jYWxsU2lnbmFsQWRkcmVzcyB7CS8qIFNFUVVFTkNFIE9GICovCisJaW50IGNvdW50OworCVRyYW5zcG9ydEFkZHJlc3MgaXRlbVsxMF07Cit9IFJlZ2lzdHJhdGlvblJlcXVlc3RfY2FsbFNpZ25hbEFkZHJlc3M7CisKK3R5cGVkZWYgc3RydWN0IFJlZ2lzdHJhdGlvblJlcXVlc3RfcmFzQWRkcmVzcyB7CS8qIFNFUVVFTkNFIE9GICovCisJaW50IGNvdW50OworCVRyYW5zcG9ydEFkZHJlc3MgaXRlbVsxMF07Cit9IFJlZ2lzdHJhdGlvblJlcXVlc3RfcmFzQWRkcmVzczsKKwordHlwZWRlZiBzdHJ1Y3QgUmVnaXN0cmF0aW9uUmVxdWVzdCB7CS8qIFNFUVVFTkNFICovCisJZW51bSB7CisJCWVSZWdpc3RyYXRpb25SZXF1ZXN0X25vblN0YW5kYXJkRGF0YSA9ICgxIDw8IDMxKSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfdGVybWluYWxBbGlhcyA9ICgxIDw8IDMwKSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfZ2F0ZWtlZXBlcklkZW50aWZpZXIgPSAoMSA8PCAyOSksCisJCWVSZWdpc3RyYXRpb25SZXF1ZXN0X2FsdGVybmF0ZUVuZHBvaW50cyA9ICgxIDw8IDI4KSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfdGltZVRvTGl2ZSA9ICgxIDw8IDI3KSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfdG9rZW5zID0gKDEgPDwgMjYpLAorCQllUmVnaXN0cmF0aW9uUmVxdWVzdF9jcnlwdG9Ub2tlbnMgPSAoMSA8PCAyNSksCisJCWVSZWdpc3RyYXRpb25SZXF1ZXN0X2ludGVncml0eUNoZWNrVmFsdWUgPSAoMSA8PCAyNCksCisJCWVSZWdpc3RyYXRpb25SZXF1ZXN0X2tlZXBBbGl2ZSA9ICgxIDw8IDIzKSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfZW5kcG9pbnRJZGVudGlmaWVyID0gKDEgPDwgMjIpLAorCQllUmVnaXN0cmF0aW9uUmVxdWVzdF93aWxsU3VwcGx5VVVJRXMgPSAoMSA8PCAyMSksCisJCWVSZWdpc3RyYXRpb25SZXF1ZXN0X21haW50YWluQ29ubmVjdGlvbiA9ICgxIDw8IDIwKSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfYWx0ZXJuYXRlVHJhbnNwb3J0QWRkcmVzc2VzID0gKDEgPDwgMTkpLAorCQllUmVnaXN0cmF0aW9uUmVxdWVzdF9hZGRpdGl2ZVJlZ2lzdHJhdGlvbiA9ICgxIDw8IDE4KSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfdGVybWluYWxBbGlhc1BhdHRlcm4gPSAoMSA8PCAxNyksCisJCWVSZWdpc3RyYXRpb25SZXF1ZXN0X3N1cHBvcnRzQWx0R0sgPSAoMSA8PCAxNiksCisJCWVSZWdpc3RyYXRpb25SZXF1ZXN0X3VzYWdlUmVwb3J0aW5nQ2FwYWJpbGl0eSA9ICgxIDw8IDE1KSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfbXVsdGlwbGVDYWxscyA9ICgxIDw8IDE0KSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3Rfc3VwcG9ydGVkSDI0OFBhY2thZ2VzID0gKDEgPDwgMTMpLAorCQllUmVnaXN0cmF0aW9uUmVxdWVzdF9jYWxsQ3JlZGl0Q2FwYWJpbGl0eSA9ICgxIDw8IDEyKSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfY2FwYWNpdHlSZXBvcnRpbmdDYXBhYmlsaXR5ID0gKDEgPDwgMTEpLAorCQllUmVnaXN0cmF0aW9uUmVxdWVzdF9jYXBhY2l0eSA9ICgxIDw8IDEwKSwKKwkJZVJlZ2lzdHJhdGlvblJlcXVlc3RfZmVhdHVyZVNldCA9ICgxIDw8IDkpLAorCQllUmVnaXN0cmF0aW9uUmVxdWVzdF9nZW5lcmljRGF0YSA9ICgxIDw8IDgpLAorCX0gb3B0aW9uczsKKwlSZWdpc3RyYXRpb25SZXF1ZXN0X2NhbGxTaWduYWxBZGRyZXNzIGNhbGxTaWduYWxBZGRyZXNzOworCVJlZ2lzdHJhdGlvblJlcXVlc3RfcmFzQWRkcmVzcyByYXNBZGRyZXNzOworCXVuc2lnbmVkIHRpbWVUb0xpdmU7Cit9IFJlZ2lzdHJhdGlvblJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0IFJlZ2lzdHJhdGlvbkNvbmZpcm1fY2FsbFNpZ25hbEFkZHJlc3MgewkvKiBTRVFVRU5DRSBPRiAqLworCWludCBjb3VudDsKKwlUcmFuc3BvcnRBZGRyZXNzIGl0ZW1bMTBdOworfSBSZWdpc3RyYXRpb25Db25maXJtX2NhbGxTaWduYWxBZGRyZXNzOworCit0eXBlZGVmIHN0cnVjdCBSZWdpc3RyYXRpb25Db25maXJtIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZVJlZ2lzdHJhdGlvbkNvbmZpcm1fbm9uU3RhbmRhcmREYXRhID0gKDEgPDwgMzEpLAorCQllUmVnaXN0cmF0aW9uQ29uZmlybV90ZXJtaW5hbEFsaWFzID0gKDEgPDwgMzApLAorCQllUmVnaXN0cmF0aW9uQ29uZmlybV9nYXRla2VlcGVySWRlbnRpZmllciA9ICgxIDw8IDI5KSwKKwkJZVJlZ2lzdHJhdGlvbkNvbmZpcm1fYWx0ZXJuYXRlR2F0ZWtlZXBlciA9ICgxIDw8IDI4KSwKKwkJZVJlZ2lzdHJhdGlvbkNvbmZpcm1fdGltZVRvTGl2ZSA9ICgxIDw8IDI3KSwKKwkJZVJlZ2lzdHJhdGlvbkNvbmZpcm1fdG9rZW5zID0gKDEgPDwgMjYpLAorCQllUmVnaXN0cmF0aW9uQ29uZmlybV9jcnlwdG9Ub2tlbnMgPSAoMSA8PCAyNSksCisJCWVSZWdpc3RyYXRpb25Db25maXJtX2ludGVncml0eUNoZWNrVmFsdWUgPSAoMSA8PCAyNCksCisJCWVSZWdpc3RyYXRpb25Db25maXJtX3dpbGxSZXNwb25kVG9JUlIgPSAoMSA8PCAyMyksCisJCWVSZWdpc3RyYXRpb25Db25maXJtX3ByZUdyYW50ZWRBUlEgPSAoMSA8PCAyMiksCisJCWVSZWdpc3RyYXRpb25Db25maXJtX21haW50YWluQ29ubmVjdGlvbiA9ICgxIDw8IDIxKSwKKwkJZVJlZ2lzdHJhdGlvbkNvbmZpcm1fc2VydmljZUNvbnRyb2wgPSAoMSA8PCAyMCksCisJCWVSZWdpc3RyYXRpb25Db25maXJtX3N1cHBvcnRzQWRkaXRpdmVSZWdpc3RyYXRpb24gPSAoMSA8PCAxOSksCisJCWVSZWdpc3RyYXRpb25Db25maXJtX3Rlcm1pbmFsQWxpYXNQYXR0ZXJuID0gKDEgPDwgMTgpLAorCQllUmVnaXN0cmF0aW9uQ29uZmlybV9zdXBwb3J0ZWRQcmVmaXhlcyA9ICgxIDw8IDE3KSwKKwkJZVJlZ2lzdHJhdGlvbkNvbmZpcm1fdXNhZ2VTcGVjID0gKDEgPDwgMTYpLAorCQllUmVnaXN0cmF0aW9uQ29uZmlybV9mZWF0dXJlU2VydmVyQWxpYXMgPSAoMSA8PCAxNSksCisJCWVSZWdpc3RyYXRpb25Db25maXJtX2NhcGFjaXR5UmVwb3J0aW5nU3BlYyA9ICgxIDw8IDE0KSwKKwkJZVJlZ2lzdHJhdGlvbkNvbmZpcm1fZmVhdHVyZVNldCA9ICgxIDw8IDEzKSwKKwkJZVJlZ2lzdHJhdGlvbkNvbmZpcm1fZ2VuZXJpY0RhdGEgPSAoMSA8PCAxMiksCisJfSBvcHRpb25zOworCVJlZ2lzdHJhdGlvbkNvbmZpcm1fY2FsbFNpZ25hbEFkZHJlc3MgY2FsbFNpZ25hbEFkZHJlc3M7CisJdW5zaWduZWQgdGltZVRvTGl2ZTsKK30gUmVnaXN0cmF0aW9uQ29uZmlybTsKKwordHlwZWRlZiBzdHJ1Y3QgVW5yZWdpc3RyYXRpb25SZXF1ZXN0X2NhbGxTaWduYWxBZGRyZXNzIHsJLyogU0VRVUVOQ0UgT0YgKi8KKwlpbnQgY291bnQ7CisJVHJhbnNwb3J0QWRkcmVzcyBpdGVtWzEwXTsKK30gVW5yZWdpc3RyYXRpb25SZXF1ZXN0X2NhbGxTaWduYWxBZGRyZXNzOworCit0eXBlZGVmIHN0cnVjdCBVbnJlZ2lzdHJhdGlvblJlcXVlc3QgewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllVW5yZWdpc3RyYXRpb25SZXF1ZXN0X2VuZHBvaW50QWxpYXMgPSAoMSA8PCAzMSksCisJCWVVbnJlZ2lzdHJhdGlvblJlcXVlc3Rfbm9uU3RhbmRhcmREYXRhID0gKDEgPDwgMzApLAorCQllVW5yZWdpc3RyYXRpb25SZXF1ZXN0X2VuZHBvaW50SWRlbnRpZmllciA9ICgxIDw8IDI5KSwKKwkJZVVucmVnaXN0cmF0aW9uUmVxdWVzdF9hbHRlcm5hdGVFbmRwb2ludHMgPSAoMSA8PCAyOCksCisJCWVVbnJlZ2lzdHJhdGlvblJlcXVlc3RfZ2F0ZWtlZXBlcklkZW50aWZpZXIgPSAoMSA8PCAyNyksCisJCWVVbnJlZ2lzdHJhdGlvblJlcXVlc3RfdG9rZW5zID0gKDEgPDwgMjYpLAorCQllVW5yZWdpc3RyYXRpb25SZXF1ZXN0X2NyeXB0b1Rva2VucyA9ICgxIDw8IDI1KSwKKwkJZVVucmVnaXN0cmF0aW9uUmVxdWVzdF9pbnRlZ3JpdHlDaGVja1ZhbHVlID0gKDEgPDwgMjQpLAorCQllVW5yZWdpc3RyYXRpb25SZXF1ZXN0X3JlYXNvbiA9ICgxIDw8IDIzKSwKKwkJZVVucmVnaXN0cmF0aW9uUmVxdWVzdF9lbmRwb2ludEFsaWFzUGF0dGVybiA9ICgxIDw8IDIyKSwKKwkJZVVucmVnaXN0cmF0aW9uUmVxdWVzdF9zdXBwb3J0ZWRQcmVmaXhlcyA9ICgxIDw8IDIxKSwKKwkJZVVucmVnaXN0cmF0aW9uUmVxdWVzdF9hbHRlcm5hdGVHYXRla2VlcGVyID0gKDEgPDwgMjApLAorCQllVW5yZWdpc3RyYXRpb25SZXF1ZXN0X2dlbmVyaWNEYXRhID0gKDEgPDwgMTkpLAorCX0gb3B0aW9uczsKKwlVbnJlZ2lzdHJhdGlvblJlcXVlc3RfY2FsbFNpZ25hbEFkZHJlc3MgY2FsbFNpZ25hbEFkZHJlc3M7Cit9IFVucmVnaXN0cmF0aW9uUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QgQWRtaXNzaW9uUmVxdWVzdCB7CS8qIFNFUVVFTkNFICovCisJZW51bSB7CisJCWVBZG1pc3Npb25SZXF1ZXN0X2NhbGxNb2RlbCA9ICgxIDw8IDMxKSwKKwkJZUFkbWlzc2lvblJlcXVlc3RfZGVzdGluYXRpb25JbmZvID0gKDEgPDwgMzApLAorCQllQWRtaXNzaW9uUmVxdWVzdF9kZXN0Q2FsbFNpZ25hbEFkZHJlc3MgPSAoMSA8PCAyOSksCisJCWVBZG1pc3Npb25SZXF1ZXN0X2Rlc3RFeHRyYUNhbGxJbmZvID0gKDEgPDwgMjgpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9zcmNDYWxsU2lnbmFsQWRkcmVzcyA9ICgxIDw8IDI3KSwKKwkJZUFkbWlzc2lvblJlcXVlc3Rfbm9uU3RhbmRhcmREYXRhID0gKDEgPDwgMjYpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9jYWxsU2VydmljZXMgPSAoMSA8PCAyNSksCisJCWVBZG1pc3Npb25SZXF1ZXN0X2Nhbk1hcEFsaWFzID0gKDEgPDwgMjQpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9jYWxsSWRlbnRpZmllciA9ICgxIDw8IDIzKSwKKwkJZUFkbWlzc2lvblJlcXVlc3Rfc3JjQWx0ZXJuYXRpdmVzID0gKDEgPDwgMjIpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9kZXN0QWx0ZXJuYXRpdmVzID0gKDEgPDwgMjEpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9nYXRla2VlcGVySWRlbnRpZmllciA9ICgxIDw8IDIwKSwKKwkJZUFkbWlzc2lvblJlcXVlc3RfdG9rZW5zID0gKDEgPDwgMTkpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9jcnlwdG9Ub2tlbnMgPSAoMSA8PCAxOCksCisJCWVBZG1pc3Npb25SZXF1ZXN0X2ludGVncml0eUNoZWNrVmFsdWUgPSAoMSA8PCAxNyksCisJCWVBZG1pc3Npb25SZXF1ZXN0X3RyYW5zcG9ydFFPUyA9ICgxIDw8IDE2KSwKKwkJZUFkbWlzc2lvblJlcXVlc3Rfd2lsbFN1cHBseVVVSUVzID0gKDEgPDwgMTUpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9jYWxsTGlua2FnZSA9ICgxIDw8IDE0KSwKKwkJZUFkbWlzc2lvblJlcXVlc3RfZ2F0ZXdheURhdGFSYXRlID0gKDEgPDwgMTMpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9jYXBhY2l0eSA9ICgxIDw8IDEyKSwKKwkJZUFkbWlzc2lvblJlcXVlc3RfY2lyY3VpdEluZm8gPSAoMSA8PCAxMSksCisJCWVBZG1pc3Npb25SZXF1ZXN0X2Rlc2lyZWRQcm90b2NvbHMgPSAoMSA8PCAxMCksCisJCWVBZG1pc3Npb25SZXF1ZXN0X2Rlc2lyZWRUdW5uZWxsZWRQcm90b2NvbCA9ICgxIDw8IDkpLAorCQllQWRtaXNzaW9uUmVxdWVzdF9mZWF0dXJlU2V0ID0gKDEgPDwgOCksCisJCWVBZG1pc3Npb25SZXF1ZXN0X2dlbmVyaWNEYXRhID0gKDEgPDwgNyksCisJfSBvcHRpb25zOworCVRyYW5zcG9ydEFkZHJlc3MgZGVzdENhbGxTaWduYWxBZGRyZXNzOworCVRyYW5zcG9ydEFkZHJlc3Mgc3JjQ2FsbFNpZ25hbEFkZHJlc3M7Cit9IEFkbWlzc2lvblJlcXVlc3Q7CisKK3R5cGVkZWYgc3RydWN0IEFkbWlzc2lvbkNvbmZpcm0gewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllQWRtaXNzaW9uQ29uZmlybV9pcnJGcmVxdWVuY3kgPSAoMSA8PCAzMSksCisJCWVBZG1pc3Npb25Db25maXJtX25vblN0YW5kYXJkRGF0YSA9ICgxIDw8IDMwKSwKKwkJZUFkbWlzc2lvbkNvbmZpcm1fZGVzdGluYXRpb25JbmZvID0gKDEgPDwgMjkpLAorCQllQWRtaXNzaW9uQ29uZmlybV9kZXN0RXh0cmFDYWxsSW5mbyA9ICgxIDw8IDI4KSwKKwkJZUFkbWlzc2lvbkNvbmZpcm1fZGVzdGluYXRpb25UeXBlID0gKDEgPDwgMjcpLAorCQllQWRtaXNzaW9uQ29uZmlybV9yZW1vdGVFeHRlbnNpb25BZGRyZXNzID0gKDEgPDwgMjYpLAorCQllQWRtaXNzaW9uQ29uZmlybV9hbHRlcm5hdGVFbmRwb2ludHMgPSAoMSA8PCAyNSksCisJCWVBZG1pc3Npb25Db25maXJtX3Rva2VucyA9ICgxIDw8IDI0KSwKKwkJZUFkbWlzc2lvbkNvbmZpcm1fY3J5cHRvVG9rZW5zID0gKDEgPDwgMjMpLAorCQllQWRtaXNzaW9uQ29uZmlybV9pbnRlZ3JpdHlDaGVja1ZhbHVlID0gKDEgPDwgMjIpLAorCQllQWRtaXNzaW9uQ29uZmlybV90cmFuc3BvcnRRT1MgPSAoMSA8PCAyMSksCisJCWVBZG1pc3Npb25Db25maXJtX3dpbGxSZXNwb25kVG9JUlIgPSAoMSA8PCAyMCksCisJCWVBZG1pc3Npb25Db25maXJtX3V1aWVzUmVxdWVzdGVkID0gKDEgPDwgMTkpLAorCQllQWRtaXNzaW9uQ29uZmlybV9sYW5ndWFnZSA9ICgxIDw8IDE4KSwKKwkJZUFkbWlzc2lvbkNvbmZpcm1fYWx0ZXJuYXRlVHJhbnNwb3J0QWRkcmVzc2VzID0gKDEgPDwgMTcpLAorCQllQWRtaXNzaW9uQ29uZmlybV91c2VTcGVjaWZpZWRUcmFuc3BvcnQgPSAoMSA8PCAxNiksCisJCWVBZG1pc3Npb25Db25maXJtX2NpcmN1aXRJbmZvID0gKDEgPDwgMTUpLAorCQllQWRtaXNzaW9uQ29uZmlybV91c2FnZVNwZWMgPSAoMSA8PCAxNCksCisJCWVBZG1pc3Npb25Db25maXJtX3N1cHBvcnRlZFByb3RvY29scyA9ICgxIDw8IDEzKSwKKwkJZUFkbWlzc2lvbkNvbmZpcm1fc2VydmljZUNvbnRyb2wgPSAoMSA8PCAxMiksCisJCWVBZG1pc3Npb25Db25maXJtX211bHRpcGxlQ2FsbHMgPSAoMSA8PCAxMSksCisJCWVBZG1pc3Npb25Db25maXJtX2ZlYXR1cmVTZXQgPSAoMSA8PCAxMCksCisJCWVBZG1pc3Npb25Db25maXJtX2dlbmVyaWNEYXRhID0gKDEgPDwgOSksCisJfSBvcHRpb25zOworCVRyYW5zcG9ydEFkZHJlc3MgZGVzdENhbGxTaWduYWxBZGRyZXNzOworfSBBZG1pc3Npb25Db25maXJtOworCit0eXBlZGVmIHN0cnVjdCBMb2NhdGlvblJlcXVlc3QgewkvKiBTRVFVRU5DRSAqLworCWVudW0geworCQllTG9jYXRpb25SZXF1ZXN0X2VuZHBvaW50SWRlbnRpZmllciA9ICgxIDw8IDMxKSwKKwkJZUxvY2F0aW9uUmVxdWVzdF9ub25TdGFuZGFyZERhdGEgPSAoMSA8PCAzMCksCisJCWVMb2NhdGlvblJlcXVlc3Rfc291cmNlSW5mbyA9ICgxIDw8IDI5KSwKKwkJZUxvY2F0aW9uUmVxdWVzdF9jYW5NYXBBbGlhcyA9ICgxIDw8IDI4KSwKKwkJZUxvY2F0aW9uUmVxdWVzdF9nYXRla2VlcGVySWRlbnRpZmllciA9ICgxIDw8IDI3KSwKKwkJZUxvY2F0aW9uUmVxdWVzdF90b2tlbnMgPSAoMSA8PCAyNiksCisJCWVMb2NhdGlvblJlcXVlc3RfY3J5cHRvVG9rZW5zID0gKDEgPDwgMjUpLAorCQllTG9jYXRpb25SZXF1ZXN0X2ludGVncml0eUNoZWNrVmFsdWUgPSAoMSA8PCAyNCksCisJCWVMb2NhdGlvblJlcXVlc3RfZGVzaXJlZFByb3RvY29scyA9ICgxIDw8IDIzKSwKKwkJZUxvY2F0aW9uUmVxdWVzdF9kZXNpcmVkVHVubmVsbGVkUHJvdG9jb2wgPSAoMSA8PCAyMiksCisJCWVMb2NhdGlvblJlcXVlc3RfZmVhdHVyZVNldCA9ICgxIDw8IDIxKSwKKwkJZUxvY2F0aW9uUmVxdWVzdF9nZW5lcmljRGF0YSA9ICgxIDw8IDIwKSwKKwkJZUxvY2F0aW9uUmVxdWVzdF9ob3BDb3VudCA9ICgxIDw8IDE5KSwKKwkJZUxvY2F0aW9uUmVxdWVzdF9jaXJjdWl0SW5mbyA9ICgxIDw8IDE4KSwKKwl9IG9wdGlvbnM7CisJVHJhbnNwb3J0QWRkcmVzcyByZXBseUFkZHJlc3M7Cit9IExvY2F0aW9uUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QgTG9jYXRpb25Db25maXJtIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZUxvY2F0aW9uQ29uZmlybV9ub25TdGFuZGFyZERhdGEgPSAoMSA8PCAzMSksCisJCWVMb2NhdGlvbkNvbmZpcm1fZGVzdGluYXRpb25JbmZvID0gKDEgPDwgMzApLAorCQllTG9jYXRpb25Db25maXJtX2Rlc3RFeHRyYUNhbGxJbmZvID0gKDEgPDwgMjkpLAorCQllTG9jYXRpb25Db25maXJtX2Rlc3RpbmF0aW9uVHlwZSA9ICgxIDw8IDI4KSwKKwkJZUxvY2F0aW9uQ29uZmlybV9yZW1vdGVFeHRlbnNpb25BZGRyZXNzID0gKDEgPDwgMjcpLAorCQllTG9jYXRpb25Db25maXJtX2FsdGVybmF0ZUVuZHBvaW50cyA9ICgxIDw8IDI2KSwKKwkJZUxvY2F0aW9uQ29uZmlybV90b2tlbnMgPSAoMSA8PCAyNSksCisJCWVMb2NhdGlvbkNvbmZpcm1fY3J5cHRvVG9rZW5zID0gKDEgPDwgMjQpLAorCQllTG9jYXRpb25Db25maXJtX2ludGVncml0eUNoZWNrVmFsdWUgPSAoMSA8PCAyMyksCisJCWVMb2NhdGlvbkNvbmZpcm1fYWx0ZXJuYXRlVHJhbnNwb3J0QWRkcmVzc2VzID0gKDEgPDwgMjIpLAorCQllTG9jYXRpb25Db25maXJtX3N1cHBvcnRlZFByb3RvY29scyA9ICgxIDw8IDIxKSwKKwkJZUxvY2F0aW9uQ29uZmlybV9tdWx0aXBsZUNhbGxzID0gKDEgPDwgMjApLAorCQllTG9jYXRpb25Db25maXJtX2ZlYXR1cmVTZXQgPSAoMSA8PCAxOSksCisJCWVMb2NhdGlvbkNvbmZpcm1fZ2VuZXJpY0RhdGEgPSAoMSA8PCAxOCksCisJCWVMb2NhdGlvbkNvbmZpcm1fY2lyY3VpdEluZm8gPSAoMSA8PCAxNyksCisJCWVMb2NhdGlvbkNvbmZpcm1fc2VydmljZUNvbnRyb2wgPSAoMSA8PCAxNiksCisJfSBvcHRpb25zOworCVRyYW5zcG9ydEFkZHJlc3MgY2FsbFNpZ25hbEFkZHJlc3M7CisJVHJhbnNwb3J0QWRkcmVzcyByYXNBZGRyZXNzOworfSBMb2NhdGlvbkNvbmZpcm07CisKK3R5cGVkZWYgc3RydWN0IEluZm9SZXF1ZXN0UmVzcG9uc2VfY2FsbFNpZ25hbEFkZHJlc3MgewkvKiBTRVFVRU5DRSBPRiAqLworCWludCBjb3VudDsKKwlUcmFuc3BvcnRBZGRyZXNzIGl0ZW1bMTBdOworfSBJbmZvUmVxdWVzdFJlc3BvbnNlX2NhbGxTaWduYWxBZGRyZXNzOworCit0eXBlZGVmIHN0cnVjdCBJbmZvUmVxdWVzdFJlc3BvbnNlIHsJLyogU0VRVUVOQ0UgKi8KKwllbnVtIHsKKwkJZUluZm9SZXF1ZXN0UmVzcG9uc2Vfbm9uU3RhbmRhcmREYXRhID0gKDEgPDwgMzEpLAorCQllSW5mb1JlcXVlc3RSZXNwb25zZV9lbmRwb2ludEFsaWFzID0gKDEgPDwgMzApLAorCQllSW5mb1JlcXVlc3RSZXNwb25zZV9wZXJDYWxsSW5mbyA9ICgxIDw8IDI5KSwKKwkJZUluZm9SZXF1ZXN0UmVzcG9uc2VfdG9rZW5zID0gKDEgPDwgMjgpLAorCQllSW5mb1JlcXVlc3RSZXNwb25zZV9jcnlwdG9Ub2tlbnMgPSAoMSA8PCAyNyksCisJCWVJbmZvUmVxdWVzdFJlc3BvbnNlX2ludGVncml0eUNoZWNrVmFsdWUgPSAoMSA8PCAyNiksCisJCWVJbmZvUmVxdWVzdFJlc3BvbnNlX25lZWRSZXNwb25zZSA9ICgxIDw8IDI1KSwKKwkJZUluZm9SZXF1ZXN0UmVzcG9uc2VfY2FwYWNpdHkgPSAoMSA8PCAyNCksCisJCWVJbmZvUmVxdWVzdFJlc3BvbnNlX2lyclN0YXR1cyA9ICgxIDw8IDIzKSwKKwkJZUluZm9SZXF1ZXN0UmVzcG9uc2VfdW5zb2xpY2l0ZWQgPSAoMSA8PCAyMiksCisJCWVJbmZvUmVxdWVzdFJlc3BvbnNlX2dlbmVyaWNEYXRhID0gKDEgPDwgMjEpLAorCX0gb3B0aW9uczsKKwlUcmFuc3BvcnRBZGRyZXNzIHJhc0FkZHJlc3M7CisJSW5mb1JlcXVlc3RSZXNwb25zZV9jYWxsU2lnbmFsQWRkcmVzcyBjYWxsU2lnbmFsQWRkcmVzczsKK30gSW5mb1JlcXVlc3RSZXNwb25zZTsKKwordHlwZWRlZiBzdHJ1Y3QgUmFzTWVzc2FnZSB7CS8qIENIT0lDRSAqLworCWVudW0geworCQllUmFzTWVzc2FnZV9nYXRla2VlcGVyUmVxdWVzdCwKKwkJZVJhc01lc3NhZ2VfZ2F0ZWtlZXBlckNvbmZpcm0sCisJCWVSYXNNZXNzYWdlX2dhdGVrZWVwZXJSZWplY3QsCisJCWVSYXNNZXNzYWdlX3JlZ2lzdHJhdGlvblJlcXVlc3QsCisJCWVSYXNNZXNzYWdlX3JlZ2lzdHJhdGlvbkNvbmZpcm0sCisJCWVSYXNNZXNzYWdlX3JlZ2lzdHJhdGlvblJlamVjdCwKKwkJZVJhc01lc3NhZ2VfdW5yZWdpc3RyYXRpb25SZXF1ZXN0LAorCQllUmFzTWVzc2FnZV91bnJlZ2lzdHJhdGlvbkNvbmZpcm0sCisJCWVSYXNNZXNzYWdlX3VucmVnaXN0cmF0aW9uUmVqZWN0LAorCQllUmFzTWVzc2FnZV9hZG1pc3Npb25SZXF1ZXN0LAorCQllUmFzTWVzc2FnZV9hZG1pc3Npb25Db25maXJtLAorCQllUmFzTWVzc2FnZV9hZG1pc3Npb25SZWplY3QsCisJCWVSYXNNZXNzYWdlX2JhbmR3aWR0aFJlcXVlc3QsCisJCWVSYXNNZXNzYWdlX2JhbmR3aWR0aENvbmZpcm0sCisJCWVSYXNNZXNzYWdlX2JhbmR3aWR0aFJlamVjdCwKKwkJZVJhc01lc3NhZ2VfZGlzZW5nYWdlUmVxdWVzdCwKKwkJZVJhc01lc3NhZ2VfZGlzZW5nYWdlQ29uZmlybSwKKwkJZVJhc01lc3NhZ2VfZGlzZW5nYWdlUmVqZWN0LAorCQllUmFzTWVzc2FnZV9sb2NhdGlvblJlcXVlc3QsCisJCWVSYXNNZXNzYWdlX2xvY2F0aW9uQ29uZmlybSwKKwkJZVJhc01lc3NhZ2VfbG9jYXRpb25SZWplY3QsCisJCWVSYXNNZXNzYWdlX2luZm9SZXF1ZXN0LAorCQllUmFzTWVzc2FnZV9pbmZvUmVxdWVzdFJlc3BvbnNlLAorCQllUmFzTWVzc2FnZV9ub25TdGFuZGFyZE1lc3NhZ2UsCisJCWVSYXNNZXNzYWdlX3Vua25vd25NZXNzYWdlUmVzcG9uc2UsCisJCWVSYXNNZXNzYWdlX3JlcXVlc3RJblByb2dyZXNzLAorCQllUmFzTWVzc2FnZV9yZXNvdXJjZXNBdmFpbGFibGVJbmRpY2F0ZSwKKwkJZVJhc01lc3NhZ2VfcmVzb3VyY2VzQXZhaWxhYmxlQ29uZmlybSwKKwkJZVJhc01lc3NhZ2VfaW5mb1JlcXVlc3RBY2ssCisJCWVSYXNNZXNzYWdlX2luZm9SZXF1ZXN0TmFrLAorCQllUmFzTWVzc2FnZV9zZXJ2aWNlQ29udHJvbEluZGljYXRpb24sCisJCWVSYXNNZXNzYWdlX3NlcnZpY2VDb250cm9sUmVzcG9uc2UsCisJfSBjaG9pY2U7CisJdW5pb24geworCQlHYXRla2VlcGVyUmVxdWVzdCBnYXRla2VlcGVyUmVxdWVzdDsKKwkJR2F0ZWtlZXBlckNvbmZpcm0gZ2F0ZWtlZXBlckNvbmZpcm07CisJCVJlZ2lzdHJhdGlvblJlcXVlc3QgcmVnaXN0cmF0aW9uUmVxdWVzdDsKKwkJUmVnaXN0cmF0aW9uQ29uZmlybSByZWdpc3RyYXRpb25Db25maXJtOworCQlVbnJlZ2lzdHJhdGlvblJlcXVlc3QgdW5yZWdpc3RyYXRpb25SZXF1ZXN0OworCQlBZG1pc3Npb25SZXF1ZXN0IGFkbWlzc2lvblJlcXVlc3Q7CisJCUFkbWlzc2lvbkNvbmZpcm0gYWRtaXNzaW9uQ29uZmlybTsKKwkJTG9jYXRpb25SZXF1ZXN0IGxvY2F0aW9uUmVxdWVzdDsKKwkJTG9jYXRpb25Db25maXJtIGxvY2F0aW9uQ29uZmlybTsKKwkJSW5mb1JlcXVlc3RSZXNwb25zZSBpbmZvUmVxdWVzdFJlc3BvbnNlOworCX07Cit9IFJhc01lc3NhZ2U7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IGUwYjU5MjYuLjliNmUxOWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCkBAIC00LDcgKzQsNyBAQAogICogKEMpIDIwMDEgYnkgSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KICAqIChDKSAyMDAyLTIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KICAqIChDKSAyMDAzIGJ5IFBhdHJpY2sgTWNoYXJkeSA8a2FiZXJAdHJhc2gubmV0PgotICogKEMpIDIwMDUgYnkgUGFibG8gTmVpcmEgQXl1c28gPHBhYmxvQGV1cm9kZXYubmV0PgorICogKEMpIDIwMDUtMjAwNiBieSBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AZXVyb2Rldi5uZXQ+CiAgKgogICogSSd2ZSByZXdvcmtlZCB0aGlzIHN0dWZmIHRvIHVzZSBhdHRyaWJ1dGVzIGluc3RlYWQgb2YgY29ubnRyYWNrIAogICogc3RydWN0dXJlcy4gNS40NCBhbS4gSSBuZWVkIG1vcmUgdGVhLiAtLXBhYmxvIDA1LzA3LzExLgpAQCAtNTMsMjAgKzUzLDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfZHVtcF90dXBsZXNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgCi0JCQkgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCisJCQkgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCiB7Ci0Jc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CiAJaW50IHJldCA9IDA7CisJc3RydWN0IG5mYXR0ciAqbmVzdF9wYXJtcyA9IE5GQV9ORVNUKHNrYiwgQ1RBX1RVUExFX1BST1RPKTsKIAogCU5GQV9QVVQoc2tiLCBDVEFfUFJPVE9fTlVNLCBzaXplb2YodV9pbnQ4X3QpLCAmdHVwbGUtPmRzdC5wcm90b251bSk7CiAKLQkvKiBJZiBubyBwcm90b2NvbCBoZWxwZXIgaXMgZm91bmQsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlCi0JICogZ2VuZXJpYyBwcm90b2NvbCBoZWxwZXIsIHNvIHByb3RvIHdvbid0ICpldmVyKiBiZSBOVUxMICovCi0JcHJvdG8gPSBpcF9jb25udHJhY2tfcHJvdG9fZmluZF9nZXQodHVwbGUtPmRzdC5wcm90b251bSk7CiAJaWYgKGxpa2VseShwcm90by0+dHVwbGVfdG9fbmZhdHRyKSkKIAkJcmV0ID0gcHJvdG8tPnR1cGxlX3RvX25mYXR0cihza2IsIHR1cGxlKTsKIAkKLQlpcF9jb25udHJhY2tfcHJvdG9fcHV0KHByb3RvKTsKKwlORkFfTkVTVF9FTkQoc2tiLCBuZXN0X3Bhcm1zKTsKIAogCXJldHVybiByZXQ7CiAKQEAgLTc1LDI4ICs3Myw0MSBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotY3RuZXRsaW5rX2R1bXBfdHVwbGVzKHN0cnVjdCBza19idWZmICpza2IsIAotCQkgICAgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK2N0bmV0bGlua19kdW1wX3R1cGxlc19pcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCXN0cnVjdCBuZmF0dHIgKm5lc3RfcGFybXM7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgbmZhdHRyICpuZXN0X3Bhcm1zID0gTkZBX05FU1Qoc2tiLCBDVEFfVFVQTEVfSVApOwogCQotCW5lc3RfcGFybXMgPSBORkFfTkVTVChza2IsIENUQV9UVVBMRV9JUCk7CiAJTkZBX1BVVChza2IsIENUQV9JUF9WNF9TUkMsIHNpemVvZih1X2ludDMyX3QpLCAmdHVwbGUtPnNyYy5pcCk7CiAJTkZBX1BVVChza2IsIENUQV9JUF9WNF9EU1QsIHNpemVvZih1X2ludDMyX3QpLCAmdHVwbGUtPmRzdC5pcCk7CisKIAlORkFfTkVTVF9FTkQoc2tiLCBuZXN0X3Bhcm1zKTsKIAotCW5lc3RfcGFybXMgPSBORkFfTkVTVChza2IsIENUQV9UVVBMRV9QUk9UTyk7Ci0JcmV0ID0gY3RuZXRsaW5rX2R1bXBfdHVwbGVzX3Byb3RvKHNrYiwgdHVwbGUpOwotCU5GQV9ORVNUX0VORChza2IsIG5lc3RfcGFybXMpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogbmZhdHRyX2ZhaWx1cmU6CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW5saW5lIGludAorY3RuZXRsaW5rX2R1bXBfdHVwbGVzKHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCWludCByZXQ7CisJc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CisKKwlyZXQgPSBjdG5ldGxpbmtfZHVtcF90dXBsZXNfaXAoc2tiLCB0dXBsZSk7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQlyZXR1cm4gcmV0OworCisJcHJvdG8gPSBpcF9jb25udHJhY2tfcHJvdG9fZmluZF9nZXQodHVwbGUtPmRzdC5wcm90b251bSk7CisJcmV0ID0gY3RuZXRsaW5rX2R1bXBfdHVwbGVzX3Byb3RvKHNrYiwgdHVwbGUsIHByb3RvKTsKKwlpcF9jb25udHJhY2tfcHJvdG9fcHV0KHByb3RvKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfZHVtcF9zdGF0dXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QpCiB7CiAJdV9pbnQzMl90IHN0YXR1cyA9IGh0b25sKCh1X2ludDMyX3QpIGN0LT5zdGF0dXMpOwpAQCAtMzI3LDkgKzMzOCwxMCBAQAogCQlncm91cCA9IE5GTkxHUlBfQ09OTlRSQUNLX1VQREFURTsKIAl9IGVsc2UgCiAJCXJldHVybiBOT1RJRllfRE9ORTsKLQkKLSAgLyogRklYTUU6IENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGlzdGVuZXJzIGJlZm9yZSwgZG9uJ3QgaHVydCBwZXJmb3JtYW5jZSAqLwotCQorCisJaWYgKCFuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyhncm91cCkpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKwogCXNrYiA9IGFsbG9jX3NrYihOTE1TR19HT09EU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTExMzQsNiArMTE0NiwzMyBAQAogfQkJCQogCiBzdGF0aWMgaW5saW5lIGludAorY3RuZXRsaW5rX2V4cF9kdW1wX21hc2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCWNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqbWFzaykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpcF9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvOworCXN0cnVjdCBuZmF0dHIgKm5lc3RfcGFybXMgPSBORkFfTkVTVChza2IsIENUQV9FWFBFQ1RfTUFTSyk7CisKKwlyZXQgPSBjdG5ldGxpbmtfZHVtcF90dXBsZXNfaXAoc2tiLCBtYXNrKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpCisJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisKKwlwcm90byA9IGlwX2Nvbm50cmFja19wcm90b19maW5kX2dldCh0dXBsZS0+ZHN0LnByb3RvbnVtKTsKKwlyZXQgPSBjdG5ldGxpbmtfZHVtcF90dXBsZXNfcHJvdG8oc2tiLCBtYXNrLCBwcm90byk7CisJaXBfY29ubnRyYWNrX3Byb3RvX3B1dChwcm90byk7CisJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCisJTkZBX05FU1RfRU5EKHNrYiwgbmVzdF9wYXJtcyk7CisKKwlyZXR1cm4gMDsKKworbmZhdHRyX2ZhaWx1cmU6CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2V4cF9kdW1wX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQogewpAQCAtMTE0Myw3ICsxMTgyLDcgQEAKIAogCWlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLCAmZXhwLT50dXBsZSwgQ1RBX0VYUEVDVF9UVVBMRSkgPCAwKQogCQlnb3RvIG5mYXR0cl9mYWlsdXJlOwotCWlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLCAmZXhwLT5tYXNrLCBDVEFfRVhQRUNUX01BU0spIDwgMCkKKwlpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX21hc2soc2tiLCAmZXhwLT50dXBsZSwgJmV4cC0+bWFzaykgPCAwKQogCQlnb3RvIG5mYXR0cl9mYWlsdXJlOwogCWlmIChjdG5ldGxpbmtfZXhwX2R1bXBfdHVwbGUoc2tiLAogCQkJCSAmbWFzdGVyLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKaW5kZXggYzFhNjE0Ni4uMTc0MWQ1NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMKQEAgLTQzNCw2ICs0MzQsNyBAQAogCX0gKmluc2lkZTsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlIGlubmVyLCB0YXJnZXQ7CiAJaW50IGhkcmxlbiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsICogNDsKKwl1bnNpZ25lZCBsb25nIHN0YXR1c2JpdDsKIAogCWlmICghc2tiX21ha2Vfd3JpdGFibGUocHNrYiwgaGRybGVuICsgc2l6ZW9mKCppbnNpZGUpKSkKIAkJcmV0dXJuIDA7CkBAIC00OTUsMTcgKzQ5NiwxNiBAQAogCiAJLyogQ2hhbmdlIG91dGVyIHRvIGxvb2sgdGhlIHJlcGx5IHRvIGFuIGluY29taW5nIHBhY2tldAogCSAqIChwcm90byAwIG1lYW5zIGRvbid0IGludmVydCBwZXItcHJvdG8gcGFydCkuICovCisJaWYgKG1hbmlwID09IElQX05BVF9NQU5JUF9TUkMpCisJCXN0YXR1c2JpdCA9IElQU19TUkNfTkFUOworCWVsc2UKKwkJc3RhdHVzYml0ID0gSVBTX0RTVF9OQVQ7CiAKLQkvKiBPYnZpb3VzbHksIHdlIG5lZWQgdG8gTkFUIGRlc3RpbmF0aW9uIElQLCBidXQgc291cmNlIElQCi0JICAgc2hvdWxkIGJlIE5BVCdlZCBvbmx5IGlmIGl0IGlzIGZyb20gYSBOQVQnZCBob3N0LgorCS8qIEludmVydCBpZiB0aGlzIGlzIHJlcGx5IGRpci4gKi8KKwlpZiAoZGlyID09IElQX0NUX0RJUl9SRVBMWSkKKwkJc3RhdHVzYml0IF49IElQU19OQVRfTUFTSzsKIAotCSAgIEV4cGxhbmF0aW9uOiBzb21lIHBlb3BsZSB1c2UgTkFUIGZvciBhbm9ueW1pemluZy4gIEFsc28sCi0JICAgQ0VSVCByZWNvbW1lbmRzIGRyb3BwaW5nIGFsbCBwYWNrZXRzIGZyb20gcHJpdmF0ZSBJUAotCSAgIGFkZHJlc3NlcyAoYWx0aG91Z2ggSUNNUCBlcnJvcnMgZnJvbSBpbnRlcm5hbCBsaW5rcyB3aXRoCi0JICAgc3VjaCBhZGRyZXNzZXMgYXJlIG5vdCB0b28gdW5jb21tb24sIGFzIEFsYW4gQ294IHBvaW50cwotCSAgIG91dCkgKi8KLQlpZiAobWFuaXAgIT0gSVBfTkFUX01BTklQX1NSQwotCSAgICB8fCAoKCpwc2tiKS0+bmguaXBoLT5zYWRkciA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwKSkgeworCWlmIChjdC0+c3RhdHVzICYgc3RhdHVzYml0KSB7CiAJCWludmVydF90dXBsZXByKCZ0YXJnZXQsICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlKTsKIAkJaWYgKCFtYW5pcF9wa3QoMCwgcHNrYiwgMCwgJnRhcmdldCwgbWFuaXApKQogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiYzg4MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYwpAQCAtMCwwICsxLDYwNSBAQAorLyoKKyAqIEguMzIzIGV4dGVuc2lvbiBmb3IgTkFUIGFsdGVyYXRpb24uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEppbmcgTWluIFpoYW8gPHpoYW9qaW5nbWluQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIEJhc2VkIG9uIHRoZSAnYnJ1dGUgZm9yY2UnIEguMzIzIE5BVCBtb2R1bGUgYnkKKyAqIEpvenNlZiBLYWRsZWNzaWsgPGthZGxlY0BibGFja2hvbGUua2ZraS5odT4KKyAqCisgKiBDaGFuZ2VzOgorICoJMjAwNi0wMi0wMSAtIGluaXRpYWwgdmVyc2lvbiAwLjEKKyAqCisgKgkyMDA2LTAyLTIwIC0gdmVyc2lvbiAwLjIKKyAqCSAgMS4gQ2hhbmdlZCBzb3VyY2UgZm9ybWF0IHRvIGZvbGxvdyBrZXJuZWwgY29udmVudGlvbnMKKyAqCSAgMi4gRGVsZXRlZCBzb21lIHVubmVjZXNzYXJ5IHN0cnVjdHVyZXMKKyAqCSAgMy4gTWlub3IgZml4ZXMKKyAqCisgKiAJMjAwNi0wMy0xMCAtIHZlcnNpb24gMC4zCisgKiAJICAxLiBBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBUUEtUcyBpbiBvbmUgcGFja2V0IChzdWdnZXN0ZWQgYnkKKyAqIAkgICAgIFBhdHJpY2sgTWNIYXJkeSkKKyAqIAkgIDIuIEFkZGVkIHN1cHBvcnQgZm9yIG5vbi1saW5lYXIgc2tiIChiYXNlZCBvbiBQYXRyaWNrIE1jSGFyZHkncyBwYXRjaCkKKyAqIAkgIDMuIEVsaW1pbmF0ZWQgdW5uZWNlc3NhcnkgcmV0dXJuIGNvZGUKKyAqCisgKiAJMjAwNi0wMy0xNSAtIHZlcnNpb24gMC40CisgKiAJICAxLiBBZGRlZCBzdXBwb3J0IGZvciBULjEyMCBjaGFubmVscworICogCSAgMi4gQWRkZWQgcGFyYW1ldGVyIGdrcm91dGVkX29ubHkgKHN1Z2dlc3RlZCBieSBQYXRyaWNrIE1jSGFyZHkpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3J1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXIuaD4KKworI2luY2x1ZGUgImlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgiCisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworZXh0ZXJuIGludCBnZXRfaDI0NV9hZGRyKHVuc2lnbmVkIGNoYXIgKmRhdGEsIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpOworZXh0ZXJuIGludCBnZXRfaDIyNV9hZGRyKHVuc2lnbmVkIGNoYXIgKmRhdGEsIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJIHVfaW50MzJfdCAqIGlwLCB1X2ludDE2X3QgKiBwb3J0KTsKK2V4dGVybiB2b2lkIGlwX2Nvbm50cmFja19oMjQ1X2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpuZXcsCisJCQkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7CitleHRlcm4gdm9pZCBpcF9jb25udHJhY2tfcTkzMV9leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqbmV3LAorCQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpOworZXh0ZXJuIGludCAoKnNldF9oMjQ1X2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCisJCQkJICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJCSAgdV9pbnQzMl90IGlwLCB1X2ludDE2X3QgcG9ydCk7CitleHRlcm4gaW50ICgqc2V0X2gyMjVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQkgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJCSAgdV9pbnQzMl90IGlwLCB1X2ludDE2X3QgcG9ydCk7CitleHRlcm4gaW50ICgqc2V0X3NpZ19hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSwKKwkJCQkgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIGludCBjb3VudCk7CitleHRlcm4gaW50ICgqc2V0X3Jhc19hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSwKKwkJCQkgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsIGludCBjb3VudCk7CitleHRlcm4gaW50ICgqbmF0X3J0cF9ydGNwX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAorCQkJCSBzdHJ1Y3QgaXBfY29ubnRyYWNrICogY3QsCisJCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkJIHVfaW50MTZfdCBwb3J0LCB1X2ludDE2X3QgcnRwX3BvcnQsCisJCQkJIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogcnRwX2V4cCwKKwkJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBydGNwX2V4cCk7CitleHRlcm4gaW50ICgqbmF0X3QxMjBfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKKwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSAgICAgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwgdV9pbnQxNl90IHBvcnQsCisJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogZXhwKTsKK2V4dGVybiBpbnQgKCpuYXRfaDI0NV9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgICBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgdV9pbnQxNl90IHBvcnQsCisJCQkgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICogZXhwKTsKK2V4dGVybiBpbnQgKCpuYXRfcTkzMV9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJICAgICBpbnQgaWR4LCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKiBleHApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCSAgICB1bnNpZ25lZCBpbnQgYWRkcm9mZiwgdV9pbnQzMl90IGlwLCB1X2ludDE2X3QgcG9ydCkKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCA9IGlwX2Nvbm50cmFja19nZXQoKnBza2IsICZjdGluZm8pOworCXN0cnVjdCB7CisJCXVfaW50MzJfdCBpcDsKKwkJdV9pbnQxNl90IHBvcnQ7CisJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIGJ1ZjsKKwlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7CisKKwlidWYuaXAgPSBpcDsKKwlidWYucG9ydCA9IGh0b25zKHBvcnQpOworCWFkZHJvZmYgKz0gZGF0YW9mZjsKKworCWlmICgoKnBza2IpLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7CisJCWlmICghaXBfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sCisJCQkJCSAgICAgIGFkZHJvZmYsIHNpemVvZihidWYpLAorCQkJCQkgICAgICAoY2hhciAqKSAmYnVmLCBzaXplb2YoYnVmKSkpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKCJpcF9uYXRfaDMyMzogaXBfbmF0X21hbmdsZV90Y3BfcGFja2V0IgorCQkJCSAgICAgICAiIGVycm9yXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qIFJlbG9jYXRlIGRhdGEgcG9pbnRlciAqLworCQl0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgKCpwc2tiKS0+bmguaXBoLT5paGwgKiA0LAorCQkJCQlzaXplb2YoX3RjcGgpLCAmX3RjcGgpOworCQlpZiAodGggPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwkJKmRhdGEgPSAoKnBza2IpLT5kYXRhICsgKCpwc2tiKS0+bmguaXBoLT5paGwgKiA0ICsKKwkJICAgIHRoLT5kb2ZmICogNCArIGRhdGFvZmY7CisJfSBlbHNlIHsKKwkJaWYgKCFpcF9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywKKwkJCQkJICAgICAgYWRkcm9mZiwgc2l6ZW9mKGJ1ZiksCisJCQkJCSAgICAgIChjaGFyICopICZidWYsIHNpemVvZihidWYpKSkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoImlwX25hdF9oMzIzOiBpcF9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQiCisJCQkJICAgICAgICIgZXJyb3JcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qIGlwX25hdF9tYW5nbGVfdWRwX3BhY2tldCB1c2VzIHNrYl9tYWtlX3dyaXRhYmxlKCkgdG8gY29weQorCQkgKiBvciBwdWxsIGV2ZXJ5dGhpbmcgaW4gYSBsaW5lYXIgYnVmZmVyLCBzbyB3ZSBjYW4gc2FmZWx5CisJCSAqIHVzZSB0aGUgc2tiIHBvaW50ZXJzIG5vdyAqLworCQkqZGF0YSA9ICgqcHNrYiktPmRhdGEgKyAoKnBza2IpLT5uaC5pcGgtPmlobCAqIDQgKworCQkgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2V0X2gyMjVfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAorCQkJIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpCit7CisJcmV0dXJuIHNldF9hZGRyKHBza2IsIGRhdGEsIGRhdGFvZmYsIGFkZHItPmlwQWRkcmVzcy5pcCwgaXAsIHBvcnQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2V0X2gyNDVfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCisJCQkgdV9pbnQzMl90IGlwLCB1X2ludDE2X3QgcG9ydCkKK3sKKwlyZXR1cm4gc2V0X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwKKwkJCWFkZHItPnVuaWNhc3RBZGRyZXNzLmlQQWRkcmVzcy5uZXR3b3JrLCBpcCwgcG9ydCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZXRfc2lnX2FkZHIoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQlUcmFuc3BvcnRBZGRyZXNzICogYWRkciwgaW50IGNvdW50KQoreworCXN0cnVjdCBpcF9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZjdC0+aGVscC5jdF9oMzIzX2luZm87CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgaTsKKwl1X2ludDMyX3QgaXA7CisJdV9pbnQxNl90IHBvcnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoZ2V0X2gyMjVfYWRkcigqZGF0YSwgJmFkZHJbaV0sICZpcCwgJnBvcnQpKSB7CisJCQlpZiAoaXAgPT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCAmJgorCQkJICAgIHBvcnQgPT0gaW5mby0+c2lnX3BvcnRbZGlyXSkgeworCQkJCS8qIEdXLT5HSyAqLworCisJCQkJLyogRml4IGZvciBHbm9tZW1lZXRpbmcgKi8KKwkJCQlpZiAoaSA+IDAgJiYKKwkJCQkgICAgZ2V0X2gyMjVfYWRkcigqZGF0YSwgJmFkZHJbMF0sCisJCQkJCQkgICZpcCwgJnBvcnQpICYmCisJCQkJICAgIChudG9obChpcCkgJiAweGZmMDAwMDAwKSA9PSAweDdmMDAwMDAwKQorCQkJCQlpID0gMDsKKworCQkJCURFQlVHUAorCQkJCSAgICAoImlwX25hdF9yYXM6IHNldCBzaWduYWwgYWRkcmVzcyAiCisJCQkJICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCQkJICAgICBOSVBRVUFEKGlwKSwgcG9ydCwKKwkJCQkgICAgIE5JUFFVQUQoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuCisJCQkJCSAgICAgaXApLCBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJCQkJcmV0dXJuIHNldF9oMjI1X2FkZHIocHNrYiwgZGF0YSwgMCwgJmFkZHJbaV0sCisJCQkJCQkgICAgIGN0LT50dXBsZWhhc2hbIWRpcl0uCisJCQkJCQkgICAgIHR1cGxlLmRzdC5pcCwKKwkJCQkJCSAgICAgaW5mby0+c2lnX3BvcnRbIWRpcl0pOworCQkJfSBlbHNlIGlmIChpcCA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuZHN0LmlwICYmCisJCQkJICAgcG9ydCA9PSBpbmZvLT5zaWdfcG9ydFtkaXJdKSB7CisJCQkJLyogR0stPkdXICovCisJCQkJREVCVUdQCisJCQkJICAgICgiaXBfbmF0X3Jhczogc2V0IHNpZ25hbCBhZGRyZXNzICIKKwkJCQkgICAgICIldS4ldS4ldS4ldTolaHUtPiV1LiV1LiV1LiV1OiVodVxuIiwKKwkJCQkgICAgIE5JUFFVQUQoaXApLCBwb3J0LAorCQkJCSAgICAgTklQUVVBRChjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy4KKwkJCQkJICAgICBpcCksIGluZm8tPnNpZ19wb3J0WyFkaXJdKTsKKwkJCQlyZXR1cm4gc2V0X2gyMjVfYWRkcihwc2tiLCBkYXRhLCAwLCAmYWRkcltpXSwKKwkJCQkJCSAgICAgY3QtPnR1cGxlaGFzaFshZGlyXS4KKwkJCQkJCSAgICAgdHVwbGUuc3JjLmlwLAorCQkJCQkJICAgICBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNldF9yYXNfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQl1bnNpZ25lZCBjaGFyICoqZGF0YSwKKwkJCVRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCBpbnQgY291bnQpCit7CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgaTsKKwl1X2ludDMyX3QgaXA7CisJdV9pbnQxNl90IHBvcnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoZ2V0X2gyMjVfYWRkcigqZGF0YSwgJmFkZHJbaV0sICZpcCwgJnBvcnQpICYmCisJCSAgICBpcCA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmlwICYmCisJCSAgICBwb3J0ID09IG50b2hzKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudS51ZHAucG9ydCkpIHsKKwkJCURFQlVHUCgiaXBfbmF0X3Jhczogc2V0IHJhc0FkZHJlc3MgIgorCQkJICAgICAgICIldS4ldS4ldS4ldTolaHUtPiV1LiV1LiV1LiV1OiVodVxuIiwKKwkJCSAgICAgICBOSVBRVUFEKGlwKSwgcG9ydCwKKwkJCSAgICAgICBOSVBRVUFEKGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwKSwKKwkJCSAgICAgICBudG9ocyhjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51LnVkcC4KKwkJCQkgICAgIHBvcnQpKTsKKwkJCXJldHVybiBzZXRfaDIyNV9hZGRyKHBza2IsIGRhdGEsIDAsICZhZGRyW2ldLAorCQkJCQkgICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwLAorCQkJCQkgICAgIG50b2hzKGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuCisJCQkJCQkgICBkc3QudS51ZHAucG9ydCkpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBuYXRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKKwkJCXVfaW50MTZfdCBwb3J0LCB1X2ludDE2X3QgcnRwX3BvcnQsCisJCQlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqcnRwX2V4cCwKKwkJCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpydGNwX2V4cCkKK3sKKwlzdHJ1Y3QgaXBfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfaDMyM19pbmZvOworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IGk7CisJdV9pbnQxNl90IG5hdGVkX3BvcnQ7CisKKwkvKiBTZXQgZXhwZWN0YXRpb25zIGZvciBOQVQgKi8KKwlydHBfZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCA9IHJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0OworCXJ0cF9leHAtPmV4cGVjdGZuID0gaXBfbmF0X2ZvbGxvd19tYXN0ZXI7CisJcnRwX2V4cC0+ZGlyID0gIWRpcjsKKwlydGNwX2V4cC0+c2F2ZWRfcHJvdG8udWRwLnBvcnQgPSBydGNwX2V4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQ7CisJcnRjcF9leHAtPmV4cGVjdGZuID0gaXBfbmF0X2ZvbGxvd19tYXN0ZXI7CisJcnRjcF9leHAtPmRpciA9ICFkaXI7CisKKwkvKiBMb29rdXAgZXhpc3RpbmcgZXhwZWN0cyAqLworCWZvciAoaSA9IDA7IGkgPCBIMzIzX1JUUF9DSEFOTkVMX01BWDsgaSsrKSB7CisJCWlmIChpbmZvLT5ydHBfcG9ydFtpXVtkaXJdID09IHJ0cF9wb3J0KSB7CisJCQkvKiBFeHBlY3RlZCAqLworCisJCQkvKiBVc2UgYWxsb2NhdGVkIHBvcnRzIGZpcnN0LiBUaGlzIHdpbGwgcmVmcmVzaAorCQkJICogdGhlIGV4cGVjdHMgKi8KKwkJCXJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0KKwkJCSAgICBodG9ucyhpbmZvLT5ydHBfcG9ydFtpXVtkaXJdKTsKKwkJCXJ0Y3BfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCA9CisJCQkgICAgaHRvbnMoaW5mby0+cnRwX3BvcnRbaV1bZGlyXSArIDEpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaW5mby0+cnRwX3BvcnRbaV1bZGlyXSA9PSAwKSB7CisJCQkvKiBOb3QgZXhwZWN0ZWQgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogUnVuIG91dCBvZiBleHBlY3RhdGlvbnMgKi8KKwlpZiAoaSA+PSBIMzIzX1JUUF9DSEFOTkVMX01BWCkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJpcF9uYXRfaDMyMzogb3V0IG9mIGV4cGVjdGF0aW9uc1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIFRyeSB0byBnZXQgYSBwYWlyIG9mIHBvcnRzLiAqLworCWZvciAobmF0ZWRfcG9ydCA9IG50b2hzKHJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0KTsKKwkgICAgIG5hdGVkX3BvcnQgIT0gMDsgbmF0ZWRfcG9ydCArPSAyKSB7CisJCXJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7CisJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCkgPT0gMCkgeworCQkJcnRjcF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0KKwkJCSAgICBodG9ucyhuYXRlZF9wb3J0ICsgMSk7CisJCQlpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwKSA9PSAwKQorCQkJCWJyZWFrOworCQkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7CisJCX0KKwl9CisKKwlpZiAobmF0ZWRfcG9ydCA9PSAwKSB7CS8qIE5vIHBvcnQgYXZhaWxhYmxlICovCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoImlwX25hdF9oMzIzOiBvdXQgb2YgUlRQIHBvcnRzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTW9kaWZ5IHNpZ25hbCAqLworCWlmIChzZXRfaDI0NV9hZGRyKHBza2IsIGRhdGEsIGRhdGFvZmYsIGFkZHIsCisJCQkgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwLAorCQkJICAocG9ydCAmIDEpID8gbmF0ZWRfcG9ydCArIDEgOiBuYXRlZF9wb3J0KSA9PSAwKSB7CisJCS8qIFNhdmUgcG9ydHMgKi8KKwkJaW5mby0+cnRwX3BvcnRbaV1bZGlyXSA9IHJ0cF9wb3J0OworCQlpbmZvLT5ydHBfcG9ydFtpXVshZGlyXSA9IG5hdGVkX3BvcnQ7CisJfSBlbHNlIHsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7CisJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFN1Y2Nlc3MgKi8KKwlERUJVR1AoImlwX25hdF9oMzIzOiBleHBlY3QgUlRQICV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCSAgICAgICBOSVBRVUFEKHJ0cF9leHAtPnR1cGxlLnNyYy5pcCksCisJICAgICAgIG50b2hzKHJ0cF9leHAtPnR1cGxlLnNyYy51LnVkcC5wb3J0KSwKKwkgICAgICAgTklQUVVBRChydHBfZXhwLT50dXBsZS5kc3QuaXApLAorCSAgICAgICBudG9ocyhydHBfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCkpOworCURFQlVHUCgiaXBfbmF0X2gzMjM6IGV4cGVjdCBSVENQICV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCSAgICAgICBOSVBRVUFEKHJ0Y3BfZXhwLT50dXBsZS5zcmMuaXApLAorCSAgICAgICBudG9ocyhydGNwX2V4cC0+dHVwbGUuc3JjLnUudWRwLnBvcnQpLAorCSAgICAgICBOSVBRVUFEKHJ0Y3BfZXhwLT50dXBsZS5kc3QuaXApLAorCSAgICAgICBudG9ocyhydGNwX2V4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQpKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgbmF0X3QxMjAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkgICAgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwgdV9pbnQxNl90IHBvcnQsCisJCSAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJdV9pbnQxNl90IG5hdGVkX3BvcnQgPSBwb3J0OworCisJLyogU2V0IGV4cGVjdGF0aW9ucyBmb3IgTkFUICovCisJZXhwLT5zYXZlZF9wcm90by50Y3AucG9ydCA9IGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQ7CisJZXhwLT5leHBlY3RmbiA9IGlwX25hdF9mb2xsb3dfbWFzdGVyOworCWV4cC0+ZGlyID0gIWRpcjsKKworCS8qIFRyeSB0byBnZXQgc2FtZSBwb3J0OiBpZiBub3QsIHRyeSB0byBjaGFuZ2UgaXQuICovCisJZm9yICg7IG5hdGVkX3BvcnQgIT0gMDsgbmF0ZWRfcG9ydCsrKSB7CisJCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhuYXRlZF9wb3J0KTsKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAobmF0ZWRfcG9ydCA9PSAwKSB7CS8qIE5vIHBvcnQgYXZhaWxhYmxlICovCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoImlwX25hdF9oMzIzOiBvdXQgb2YgVENQIHBvcnRzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTW9kaWZ5IHNpZ25hbCAqLworCWlmIChzZXRfaDI0NV9hZGRyKHBza2IsIGRhdGEsIGRhdGFvZmYsIGFkZHIsCisJCQkgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwLCBuYXRlZF9wb3J0KSA8IDApIHsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCURFQlVHUCgiaXBfbmF0X2gzMjM6IGV4cGVjdCBULjEyMCAldS4ldS4ldS4ldTolaHUtPiV1LiV1LiV1LiV1OiVodVxuIiwKKwkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLnNyYy5pcCksIG50b2hzKGV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQpLAorCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuZHN0LmlwKSwgbnRvaHMoZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGNvbm50cmFjayBleHBlY3QgZnVuY3Rpb24gcmVwbGFjZXMgaXBfY29ubnRyYWNrX2gyNDVfZXhwZWN0KCkKKyAqIHdoaWNoIHdhcyBzZXQgYnkgaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMuIEl0IGNhbGxzIGJvdGgKKyAqIGlwX25hdF9mb2xsb3dfbWFzdGVyKCkgYW5kIGlwX2Nvbm50cmFja19oMjQ1X2V4cGVjdCgpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGlwX25hdF9oMjQ1X2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrICpuZXcsCisJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpCit7CisJaXBfbmF0X2ZvbGxvd19tYXN0ZXIobmV3LCB0aGlzKTsKKwlpcF9jb25udHJhY2tfaDI0NV9leHBlY3QobmV3LCB0aGlzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IG5hdF9oMjQ1KHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCisJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJICAgIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCB1X2ludDE2X3QgcG9ydCwKKwkJICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHApCit7CisJc3RydWN0IGlwX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJmN0LT5oZWxwLmN0X2gzMjNfaW5mbzsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVfaW50MTZfdCBuYXRlZF9wb3J0ID0gcG9ydDsKKworCS8qIFNldCBleHBlY3RhdGlvbnMgZm9yIE5BVCAqLworCWV4cC0+c2F2ZWRfcHJvdG8udGNwLnBvcnQgPSBleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0OworCWV4cC0+ZXhwZWN0Zm4gPSBpcF9uYXRfaDI0NV9leHBlY3Q7CisJZXhwLT5kaXIgPSAhZGlyOworCisJLyogQ2hlY2sgZXhpc3RpbmcgZXhwZWN0cyAqLworCWlmIChpbmZvLT5zaWdfcG9ydFtkaXJdID09IHBvcnQpCisJCW5hdGVkX3BvcnQgPSBpbmZvLT5zaWdfcG9ydFshZGlyXTsKKworCS8qIFRyeSB0byBnZXQgc2FtZSBwb3J0OiBpZiBub3QsIHRyeSB0byBjaGFuZ2UgaXQuICovCisJZm9yICg7IG5hdGVkX3BvcnQgIT0gMDsgbmF0ZWRfcG9ydCsrKSB7CisJCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhuYXRlZF9wb3J0KTsKKwkJaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAobmF0ZWRfcG9ydCA9PSAwKSB7CS8qIE5vIHBvcnQgYXZhaWxhYmxlICovCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoImlwX25hdF9xOTMxOiBvdXQgb2YgVENQIHBvcnRzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTW9kaWZ5IHNpZ25hbCAqLworCWlmIChzZXRfaDIyNV9hZGRyKHBza2IsIGRhdGEsIGRhdGFvZmYsIGFkZHIsCisJCQkgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwLAorCQkJICBuYXRlZF9wb3J0KSA9PSAwKSB7CisJCS8qIFNhdmUgcG9ydHMgKi8KKwkJaW5mby0+c2lnX3BvcnRbZGlyXSA9IHBvcnQ7CisJCWluZm8tPnNpZ19wb3J0WyFkaXJdID0gbmF0ZWRfcG9ydDsKKwl9IGVsc2UgeworCQlpcF9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHApOworCQlyZXR1cm4gLTE7CisJfQorCisJREVCVUdQKCJpcF9uYXRfcTkzMTogZXhwZWN0IEguMjQ1ICV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuc3JjLmlwKSwgbnRvaHMoZXhwLT50dXBsZS5zcmMudS50Y3AucG9ydCksCisJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5kc3QuaXApLCBudG9ocyhleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0KSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgY29ubnRyYWNrIGV4cGVjdCBmdW5jdGlvbiByZXBsYWNlcyBpcF9jb25udHJhY2tfcTkzMV9leHBlY3QoKQorICogd2hpY2ggd2FzIHNldCBieSBpcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgaXBfbmF0X3E5MzFfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKKwkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqdGhpcykKK3sKKwlzdHJ1Y3QgaXBfbmF0X3JhbmdlIHJhbmdlOworCisJaWYgKHRoaXMtPnR1cGxlLnNyYy5pcCAhPSAwKSB7CS8qIE9ubHkgYWNjZXB0IGNhbGxzIGZyb20gR0sgKi8KKwkJaXBfbmF0X2ZvbGxvd19tYXN0ZXIobmV3LCB0aGlzKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVGhpcyBtdXN0IGJlIGEgZnJlc2ggb25lLiAqLworCUJVR19PTihuZXctPnN0YXR1cyAmIElQU19OQVRfRE9ORV9NQVNLKTsKKworCS8qIENoYW5nZSBzcmMgdG8gd2hlcmUgbWFzdGVyIHNlbmRzIHRvICovCisJcmFuZ2UuZmxhZ3MgPSBJUF9OQVRfUkFOR0VfTUFQX0lQUzsKKwlyYW5nZS5taW5faXAgPSByYW5nZS5tYXhfaXAgPSBuZXctPnR1cGxlaGFzaFshdGhpcy0+ZGlyXS50dXBsZS5zcmMuaXA7CisKKwkvKiBob29rIGRvZXNuJ3QgbWF0dGVyLCBidXQgaXQgaGFzIHRvIGRvIHNvdXJjZSBtYW5pcCAqLworCWlwX25hdF9zZXR1cF9pbmZvKG5ldywgJnJhbmdlLCBORl9JUF9QT1NUX1JPVVRJTkcpOworCisJLyogRm9yIERTVCBtYW5pcCwgbWFwIHBvcnQgaGVyZSB0byB3aGVyZSBpdCdzIGV4cGVjdGVkLiAqLworCXJhbmdlLmZsYWdzID0gKElQX05BVF9SQU5HRV9NQVBfSVBTIHwgSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCk7CisJcmFuZ2UubWluID0gcmFuZ2UubWF4ID0gdGhpcy0+c2F2ZWRfcHJvdG87CisJcmFuZ2UubWluX2lwID0gcmFuZ2UubWF4X2lwID0KKwkgICAgbmV3LT5tYXN0ZXItPnR1cGxlaGFzaFshdGhpcy0+ZGlyXS50dXBsZS5zcmMuaXA7CisKKwkvKiBob29rIGRvZXNuJ3QgbWF0dGVyLCBidXQgaXQgaGFzIHRvIGRvIGRlc3RpbmF0aW9uIG1hbmlwICovCisJaXBfbmF0X3NldHVwX2luZm8obmV3LCAmcmFuZ2UsIE5GX0lQX1BSRV9ST1VUSU5HKTsKKworICAgICAgb3V0OgorCWlwX2Nvbm50cmFja19xOTMxX2V4cGVjdChuZXcsIHRoaXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgbmF0X3E5MzEoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKKwkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLCBpbnQgaWR4LAorCQkgICAgdV9pbnQxNl90IHBvcnQsIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHApCit7CisJc3RydWN0IGlwX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJmN0LT5oZWxwLmN0X2gzMjNfaW5mbzsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVfaW50MTZfdCBuYXRlZF9wb3J0ID0gcG9ydDsKKwl1X2ludDMyX3QgaXA7CisKKwkvKiBTZXQgZXhwZWN0YXRpb25zIGZvciBOQVQgKi8KKwlleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0ID0gZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydDsKKwlleHAtPmV4cGVjdGZuID0gaXBfbmF0X3E5MzFfZXhwZWN0OworCWV4cC0+ZGlyID0gIWRpcjsKKworCS8qIENoZWNrIGV4aXN0aW5nIGV4cGVjdHMgKi8KKwlpZiAoaW5mby0+c2lnX3BvcnRbZGlyXSA9PSBwb3J0KQorCQluYXRlZF9wb3J0ID0gaW5mby0+c2lnX3BvcnRbIWRpcl07CisKKwkvKiBUcnkgdG8gZ2V0IHNhbWUgcG9ydDogaWYgbm90LCB0cnkgdG8gY2hhbmdlIGl0LiAqLworCWZvciAoOyBuYXRlZF9wb3J0ICE9IDA7IG5hdGVkX3BvcnQrKykgeworCQlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7CisJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKG5hdGVkX3BvcnQgPT0gMCkgewkvKiBObyBwb3J0IGF2YWlsYWJsZSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJpcF9uYXRfcmFzOiBvdXQgb2YgVENQIHBvcnRzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTW9kaWZ5IHNpZ25hbCAqLworCWlmIChzZXRfaDIyNV9hZGRyKHBza2IsIGRhdGEsIDAsICZhZGRyW2lkeF0sCisJCQkgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwLAorCQkJICBuYXRlZF9wb3J0KSA9PSAwKSB7CisJCS8qIFNhdmUgcG9ydHMgKi8KKwkJaW5mby0+c2lnX3BvcnRbZGlyXSA9IHBvcnQ7CisJCWluZm8tPnNpZ19wb3J0WyFkaXJdID0gbmF0ZWRfcG9ydDsKKworCQkvKiBGaXggZm9yIEdub21lbWVldGluZyAqLworCQlpZiAoaWR4ID4gMCAmJgorCQkgICAgZ2V0X2gyMjVfYWRkcigqZGF0YSwgJmFkZHJbMF0sICZpcCwgJnBvcnQpICYmCisJCSAgICAobnRvaGwoaXApICYgMHhmZjAwMDAwMCkgPT0gMHg3ZjAwMDAwMCkgeworCQkJc2V0X2gyMjVfYWRkcl9ob29rKHBza2IsIGRhdGEsIDAsICZhZGRyWzBdLAorCQkJCQkgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCwKKwkJCQkJICAgaW5mby0+c2lnX3BvcnRbIWRpcl0pOworCQl9CisJfSBlbHNlIHsKKwkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFN1Y2Nlc3MgKi8KKwlERUJVR1AoImlwX25hdF9yYXM6IGV4cGVjdCBRLjkzMSAldS4ldS4ldS4ldTolaHUtPiV1LiV1LiV1LiV1OiVodVxuIiwKKwkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLnNyYy5pcCksIG50b2hzKGV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQpLAorCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuZHN0LmlwKSwgbnRvaHMoZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQoreworCUJVR19PTihzZXRfaDI0NV9hZGRyX2hvb2sgIT0gTlVMTCk7CisJQlVHX09OKHNldF9oMjI1X2FkZHJfaG9vayAhPSBOVUxMKTsKKwlCVUdfT04oc2V0X3NpZ19hZGRyX2hvb2sgIT0gTlVMTCk7CisJQlVHX09OKHNldF9yYXNfYWRkcl9ob29rICE9IE5VTEwpOworCUJVR19PTihuYXRfcnRwX3J0Y3BfaG9vayAhPSBOVUxMKTsKKwlCVUdfT04obmF0X3QxMjBfaG9vayAhPSBOVUxMKTsKKwlCVUdfT04obmF0X2gyNDVfaG9vayAhPSBOVUxMKTsKKwlCVUdfT04obmF0X3E5MzFfaG9vayAhPSBOVUxMKTsKKworCXNldF9oMjQ1X2FkZHJfaG9vayA9IHNldF9oMjQ1X2FkZHI7CisJc2V0X2gyMjVfYWRkcl9ob29rID0gc2V0X2gyMjVfYWRkcjsKKwlzZXRfc2lnX2FkZHJfaG9vayA9IHNldF9zaWdfYWRkcjsKKwlzZXRfcmFzX2FkZHJfaG9vayA9IHNldF9yYXNfYWRkcjsKKwluYXRfcnRwX3J0Y3BfaG9vayA9IG5hdF9ydHBfcnRjcDsKKwluYXRfdDEyMF9ob29rID0gbmF0X3QxMjA7CisJbmF0X2gyNDVfaG9vayA9IG5hdF9oMjQ1OworCW5hdF9xOTMxX2hvb2sgPSBuYXRfcTkzMTsKKworCURFQlVHUCgiaXBfbmF0X2gzMjM6IGluaXQgc3VjY2Vzc1xuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3sKKwlzZXRfaDI0NV9hZGRyX2hvb2sgPSBOVUxMOworCXNldF9oMjI1X2FkZHJfaG9vayA9IE5VTEw7CisJc2V0X3NpZ19hZGRyX2hvb2sgPSBOVUxMOworCXNldF9yYXNfYWRkcl9ob29rID0gTlVMTDsKKwluYXRfcnRwX3J0Y3BfaG9vayA9IE5VTEw7CisJbmF0X3QxMjBfaG9vayA9IE5VTEw7CisJbmF0X2gyNDVfaG9vayA9IE5VTEw7CisJbmF0X3E5MzFfaG9vayA9IE5VTEw7CisJc3luY2hyb25pemVfbmV0KCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKKworTU9EVUxFX0FVVEhPUigiSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJILjMyMyBOQVQgaGVscGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMKaW5kZXggYWMwMDQ4OTUuLmI5YzAxNmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX3BwdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMKQEAgLTUyLDYgKzUyLDggQEAKIAogI2RlZmluZSBJUF9OQVRfUFBUUF9WRVJTSU9OICIzLjAiCiAKKyNkZWZpbmUgUkVRX0NJRChyZXEsIG9mZikJCSgqKHVfaW50MTZfdCAqKSgoY2hhciAqKShyZXEpICsgKG9mZikpKQorCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRmaWx0ZXIgTkFUIGhlbHBlciBtb2R1bGUgZm9yIFBQVFAiKTsKQEAgLTE5OCw3ICsyMDAsNyBAQAogCS8qIG9ubHkgT1VUX0NBTExfUkVRVUVTVCwgSU5fQ0FMTF9SRVBMWSwgQ0FMTF9DTEVBUl9SRVFVRVNUIHBhc3MKIAkgKiBkb3duIHRvIGhlcmUgKi8KIAlERUJVR1AoImFsdGVyaW5nIGNhbGwgaWQgZnJvbSAweCUwNHggdG8gMHglMDR4XG4iLAotCQludG9ocygqKHVfaW50MTZfdCAqKXBwdHBSZXEgKyBjaWRfb2ZmKSwgbnRvaHMobmV3X2NhbGxpZCkpOworCQludG9ocyhSRVFfQ0lEKHBwdHBSZXEsIGNpZF9vZmYpKSwgbnRvaHMobmV3X2NhbGxpZCkpOwogCiAJLyogbWFuZ2xlIHBhY2tldCAqLwogCWlmIChpcF9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywKQEAgLTM0Miw3ICszNDQsNyBAQAogCiAJLyogbWFuZ2xlIHBhY2tldCAqLwogCURFQlVHUCgiYWx0ZXJpbmcgcGVlciBjYWxsIGlkIGZyb20gMHglMDR4IHRvIDB4JTA0eFxuIiwKLQkJbnRvaHMoKih1X2ludDE2X3QgKilwcHRwUmVxICsgcGNpZF9vZmYpLCBudG9ocyhuZXdfcGNpZCkpOworCQludG9ocyhSRVFfQ0lEKHBwdHBSZXEsIHBjaWRfb2ZmKSksIG50b2hzKG5ld19wY2lkKSk7CiAKIAlpZiAoaXBfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lkX29mZiArIHNpemVvZihzdHJ1Y3QgcHB0cF9wa3RfaGRyKSArCkBAIC0zNTMsNyArMzU1LDcgQEAKIAogCWlmIChuZXdfY2lkKSB7CiAJCURFQlVHUCgiYWx0ZXJpbmcgY2FsbCBpZCBmcm9tIDB4JTA0eCB0byAweCUwNHhcbiIsCi0JCQludG9ocygqKHVfaW50MTZfdCAqKXBwdHBSZXEgKyBjaWRfb2ZmKSwgbnRvaHMobmV3X2NpZCkpOworCQkJbnRvaHMoUkVRX0NJRChwcHRwUmVxLCBjaWRfb2ZmKSksIG50b2hzKG5ld19jaWQpKTsKIAkJaWYgKGlwX25hdF9tYW5nbGVfdGNwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZF9vZmYgKyBzaXplb2Yoc3RydWN0IHBwdHBfcGt0X2hkcikgKwogCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgUHB0cENvbnRyb2xIZWFkZXIpLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3J1bGUuYwppbmRleCAxZGU4NjI4Li5lZmJhOGM0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3J1bGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3J1bGUuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiAJCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJCQkgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpcHRfdGFyZ2V0ICp0YXJnZXQsCiAJCQkJICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAogCQkJCSAgICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTE0NSw2ICsxNDYsNyBAQAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkJICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXB0X3RhcmdldCAqdGFyZ2V0LAogCQkJCSAgICBjb25zdCB2b2lkICp0YXJnaW5mbywKIAkJCQkgICAgdm9pZCAqdXNlcmluZm8pCiB7CkBAIC0xNzAsNiArMTcyLDcgQEAKIAogc3RhdGljIGludCBpcHRfc25hdF9jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkJCSAgICAgICBjb25zdCB2b2lkICplbnRyeSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXB0X3RhcmdldCAqdGFyZ2V0LAogCQkJICAgICAgIHZvaWQgKnRhcmdpbmZvLAogCQkJICAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKQEAgLTE4MSwyOCArMTg0LDEyIEBACiAJCXByaW50aygiU05BVDogbXVsdGlwbGUgcmFuZ2VzIG5vIGxvbmdlciBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KLQlpZiAodGFyZ2luZm9zaXplICE9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQpKSkgewotCQlERUJVR1AoIlNOQVQ6IFRhcmdldCBzaXplICV1IHdyb25nIGZvciAldSByYW5nZXNcbiIsCi0JCSAgICAgICB0YXJnaW5mb3NpemUsIG1yLT5yYW5nZXNpemUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBPbmx5IGFsbG93IHRoZXNlIGZvciBOQVQuICovCi0JaWYgKHN0cmNtcCh0YWJsZW5hbWUsICJuYXQiKSAhPSAwKSB7Ci0JCURFQlVHUCgiU05BVDogd3JvbmcgdGFibGUgJXNcbiIsIHRhYmxlbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChob29rX21hc2sgJiB+KDEgPDwgTkZfSVBfUE9TVF9ST1VUSU5HKSkgewotCQlERUJVR1AoIlNOQVQ6IGhvb2sgbWFzayAweCV4IGJhZFxuIiwgaG9va19tYXNrKTsKLQkJcmV0dXJuIDA7Ci0JfQogCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGlwdF9kbmF0X2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkJICAgICAgIGNvbnN0IHZvaWQgKmVudHJ5LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpcHRfdGFyZ2V0ICp0YXJnZXQsCiAJCQkgICAgICAgdm9pZCAqdGFyZ2luZm8sCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQpAQCAtMjE0LDI0ICsyMDEsNiBAQAogCQlwcmludGsoIkROQVQ6IG11bHRpcGxlIHJhbmdlcyBubyBsb25nZXIgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCi0JaWYgKHRhcmdpbmZvc2l6ZSAhPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcF9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0KSkpIHsKLQkJREVCVUdQKCJETkFUOiBUYXJnZXQgc2l6ZSAldSB3cm9uZyBmb3IgJXUgcmFuZ2VzXG4iLAotCQkgICAgICAgdGFyZ2luZm9zaXplLCBtci0+cmFuZ2VzaXplKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogT25seSBhbGxvdyB0aGVzZSBmb3IgTkFULiAqLwotCWlmIChzdHJjbXAodGFibGVuYW1lLCAibmF0IikgIT0gMCkgewotCQlERUJVR1AoIkROQVQ6IHdyb25nIHRhYmxlICVzXG4iLCB0YWJsZW5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaG9va19tYXNrICYgfigoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9MT0NBTF9PVVQpKSkgewotCQlERUJVR1AoIkROQVQ6IGhvb2sgbWFzayAweCV4IGJhZFxuIiwgaG9va19tYXNrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCQogCXJldHVybiAxOwogfQogCkBAIC0yOTksMTIgKzI2OCwxOCBAQAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9zbmF0X3JlZyA9IHsKIAkubmFtZQkJPSAiU05BVCIsCiAJLnRhcmdldAkJPSBpcHRfc25hdF90YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQpLAorCS50YWJsZQkJPSAibmF0IiwKKwkuaG9va3MJCT0gMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcsCiAJLmNoZWNrZW50cnkJPSBpcHRfc25hdF9jaGVja2VudHJ5LAogfTsKIAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9kbmF0X3JlZyA9IHsKIAkubmFtZQkJPSAiRE5BVCIsCiAJLnRhcmdldAkJPSBpcHRfZG5hdF90YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQpLAorCS50YWJsZQkJPSAibmF0IiwKKwkuaG9va3MJCT0gMSA8PCBORl9JUF9QUkVfUk9VVElORywKIAkuY2hlY2tlbnRyeQk9IGlwdF9kbmF0X2NoZWNrZW50cnksCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NubXBfYmFzaWMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jCmluZGV4IDRmOTVkNDcuLmYwMjlkYTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jCkBAIC0yNTAsNiArMjUwLDcgQEAKIAlpZiAoIWFzbjFfaWRfZGVjb2RlKGN0eCwgY2xzLCBjb24sIHRhZykpCiAJCXJldHVybiAwOwogCQkKKwlkZWYgPSBsZW4gPSAwOwogCWlmICghYXNuMV9sZW5ndGhfZGVjb2RlKGN0eCwgJmRlZiwgJmxlbikpCiAJCXJldHVybiAwOwogCQkKQEAgLTY2OSw3ICs2NzAsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmVvYywgKmVuZCwgKnA7CiAJdW5zaWduZWQgbG9uZyAqbHAsICppZDsKIAl1bnNpZ25lZCBsb25nIHVsOwotCWxvbmcgIGw7CisJbG9uZyBsOwogCQogCSpvYmogPSBOVUxMOwogCWlkID0gTlVMTDsKQEAgLTY5OSwxMSArNzAwLDEzIEBACiAJCXJldHVybiAwOwogCX0KIAkKKwl0eXBlID0gMDsKIAlpZiAoIXNubXBfdGFnX2NsczJzeW50YXgodGFnLCBjbHMsICZ0eXBlKSkgewogCQlrZnJlZShpZCk7CiAJCXJldHVybiAwOwogCX0KIAkKKwlsID0gMDsKIAlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBTTk1QX0lOVEVHRVI6CiAJCQlsZW4gPSBzaXplb2YobG9uZyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCmluZGV4IDdjM2Y3ZDMuLjM4MGFlZjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCkBAIC0yMDAsMjAgKzIwMCwxNCBAQAogICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAgICAgICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0Jc3RydWN0IGlwX2Nvbm50cmFjayAqY3Q7Ci0JZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJdW5zaWduZWQgaW50IHJldDsKKwl1X2ludDMyX3QgZGFkZHIgPSAoKnBza2IpLT5uaC5pcGgtPmRhZGRyOwogCiAJcmV0ID0gaXBfbmF0X2ZuKGhvb2tudW0sIHBza2IsIGluLCBvdXQsIG9rZm4pOwogCWlmIChyZXQgIT0gTkZfRFJPUCAmJiByZXQgIT0gTkZfU1RPTEVOCi0JICAgICYmIChjdCA9IGlwX2Nvbm50cmFja19nZXQoKnBza2IsICZjdGluZm8pKSAhPSBOVUxMKSB7Ci0JCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7Ci0KLQkJaWYgKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QuaXAgIT0KLQkJICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmlwKSB7Ci0JCQlkc3RfcmVsZWFzZSgoKnBza2IpLT5kc3QpOwotCQkJKCpwc2tiKS0+ZHN0ID0gTlVMTDsKLQkJfQorCSAgICAmJiBkYWRkciAhPSAoKnBza2IpLT5uaC5pcGgtPmRhZGRyKSB7CisJCWRzdF9yZWxlYXNlKCgqcHNrYiktPmRzdCk7CisJCSgqcHNrYiktPmRzdCA9IE5VTEw7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yNzYsNyArMjcwLDcgQEAKIAkJICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmlwCiAjaWZkZWYgQ09ORklHX1hGUk0KIAkJICAgIHx8IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudS5hbGwgIT0KLQkJICAgICAgIGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudS5hbGwKKwkJICAgICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUuYWxsCiAjZW5kaWYKIAkJICAgICkKIAkJCXJldHVybiBpcF9yb3V0ZV9tZV9oYXJkZXIocHNrYikgPT0gMCA/IHJldCA6IE5GX0RST1A7CkBAIC00MDAsNyArMzk0LDcgQEAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rKCZpcF9uYXRfbG9jYWxfb3V0X29wcyk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJpcF9uYXRfaW5pdDogY2FuJ3QgcmVnaXN0ZXIgbG9jYWwgb3V0IGhvb2suXG4iKTsKLQkJZ290byBjbGVhbnVwX2FkanVzdG91dF9vcHM7OworCQlnb3RvIGNsZWFudXBfYWRqdXN0b3V0X29wczsKIAl9CiAJcmV0ID0gbmZfcmVnaXN0ZXJfaG9vaygmaXBfbmF0X2xvY2FsX2luX29wcyk7CiAJaWYgKHJldCA8IDApIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggMzYzMzllYi4uMTY1NTg2NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAKQEAgLTYxLDcgKzYyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVldWVfdXNlcl9kcm9wcGVkID0gMDsKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqaXBxbmw7CiBzdGF0aWMgTElTVF9IRUFEKHF1ZXVlX2xpc3QpOwotc3RhdGljIERFQ0xBUkVfTVVURVgoaXBxbmxfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaXBxbmxfbXV0ZXgpOwogCiBzdGF0aWMgdm9pZAogaXBxX2lzc3VlX3ZlcmRpY3Qoc3RydWN0IGlwcV9xdWV1ZV9lbnRyeSAqZW50cnksIGludCB2ZXJkaWN0KQpAQCAtNTI0LDcgKzUyNSw3IEBACiAJd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9sb2NrKTsKIAkKIAlzdGF0dXMgPSBpcHFfcmVjZWl2ZV9wZWVyKE5MTVNHX0RBVEEobmxoKSwgdHlwZSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYmxlbiAtIE5MTVNHX0xFTkdUSCgwKSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICBubG1zZ2xlbiAtIE5MTVNHX0xFTkdUSCgwKSk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCVJDVl9TS0JfRkFJTChzdGF0dXMpOwogCQkKQEAgLTUzOSw3ICs1NDAsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgaW50IHFsZW47CiAKLQlkb3duKCZpcHFubF9zZW0pOworCW11dGV4X2xvY2soJmlwcW5sX211dGV4KTsKIAkJCQogCWZvciAocWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsgcWxlbjsgcWxlbi0tKSB7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CkBAIC01NDcsNyArNTQ4LDcgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJfQogCQkKLQl1cCgmaXBxbmxfc2VtKTsKKwltdXRleF91bmxvY2soJmlwcW5sX211dGV4KTsKIH0KIAogc3RhdGljIGludApAQCAtNzA4LDggKzcwOSw4IEBACiAJCiBjbGVhbnVwX2lwcW5sOgogCXNvY2tfcmVsZWFzZShpcHFubC0+c2tfc29ja2V0KTsKLQlkb3duKCZpcHFubF9zZW0pOwotCXVwKCZpcHFubF9zZW0pOworCW11dGV4X2xvY2soJmlwcW5sX211dGV4KTsKKwltdXRleF91bmxvY2soJmlwcW5sX211dGV4KTsKIAkKIGNsZWFudXBfbmV0bGlua19ub3RpZmllcjoKIAluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJmlwcV9ubF9ub3RpZmllcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggMTZmNDdjNi4uYTdiMTk0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CkBAIC0xNzksNiArMTc5LDcgQEAKIAkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAogCSAgdm9pZCAqdXNlcmluZm8pCiB7CkBAIC0xOTcsOCArMTk4LDggQEAKIAkgICAgIGludCAqaG90ZHJvcCkKIHsKIAkvKiBTdG9wIGl0ZXJhdGlvbiBpZiBpdCBkb2Vzbid0IG1hdGNoICovCi0JaWYgKCFtLT51Lmtlcm5lbC5tYXRjaC0+bWF0Y2goc2tiLCBpbiwgb3V0LCBtLT5kYXRhLCBvZmZzZXQsIAotCSAgICBza2ItPm5oLmlwaC0+aWhsKjQsIGhvdGRyb3ApKQorCWlmICghbS0+dS5rZXJuZWwubWF0Y2gtPm1hdGNoKHNrYiwgaW4sIG91dCwgbS0+dS5rZXJuZWwubWF0Y2gsIG0tPmRhdGEsCisJCQkJICAgICAgb2Zmc2V0LCBza2ItPm5oLmlwaC0+aWhsKjQsIGhvdGRyb3ApKQogCQlyZXR1cm4gMTsKIAllbHNlCiAJCXJldHVybiAwOwpAQCAtMzA1LDYgKzMwNiw3IEBACiAJCQkJdmVyZGljdCA9IHQtPnUua2VybmVsLnRhcmdldC0+dGFyZ2V0KHBza2IsCiAJCQkJCQkJCSAgICAgaW4sIG91dCwKIAkJCQkJCQkJICAgICBob29rLAorCQkJCQkJCQkgICAgIHQtPnUua2VybmVsLnRhcmdldCwKIAkJCQkJCQkJICAgICB0LT5kYXRhLAogCQkJCQkJCQkgICAgIHVzZXJkYXRhKTsKIApAQCAtNDY0LDcgKzQ2Niw3IEBACiAJCXJldHVybiAxOwogCiAJaWYgKG0tPnUua2VybmVsLm1hdGNoLT5kZXN0cm95KQotCQltLT51Lmtlcm5lbC5tYXRjaC0+ZGVzdHJveShtLT5kYXRhLAorCQltLT51Lmtlcm5lbC5tYXRjaC0+ZGVzdHJveShtLT51Lmtlcm5lbC5tYXRjaCwgbS0+ZGF0YSwKIAkJCQkJICAgbS0+dS5tYXRjaF9zaXplIC0gc2l6ZW9mKCptKSk7CiAJbW9kdWxlX3B1dChtLT51Lmtlcm5lbC5tYXRjaC0+bWUpOwogCXJldHVybiAwOwpAQCAtNDc3LDIxICs0NzksMTIgQEAKIAlzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCAqdGFyZyA9ICh2b2lkICopdDsKIAogCS8qIENoZWNrIHN0YW5kYXJkIGluZm8uICovCi0JaWYgKHQtPnUudGFyZ2V0X3NpemUKLQkgICAgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCkpKSB7Ci0JCWR1cHJpbnRmKCJzdGFuZGFyZF9jaGVjazogdGFyZ2V0IHNpemUgJXUgIT0gJXVcbiIsCi0JCQkgdC0+dS50YXJnZXRfc2l6ZSwKLQkJCSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0KSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAodGFyZy0+dmVyZGljdCA+PSAwCiAJICAgICYmIHRhcmctPnZlcmRpY3QgPiBtYXhfb2Zmc2V0IC0gc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpKSB7CiAJCWR1cHJpbnRmKCJpcHRfc3RhbmRhcmRfY2hlY2s6IGJhZCB2ZXJkaWN0ICglaSlcbiIsCiAJCQkgdGFyZy0+dmVyZGljdCk7CiAJCXJldHVybiAwOwogCX0KLQogCWlmICh0YXJnLT52ZXJkaWN0IDwgLU5GX01BWF9WRVJESUNUIC0gMSkgewogCQlkdXByaW50ZigiaXB0X3N0YW5kYXJkX2NoZWNrOiBiYWQgbmVnYXRpdmUgdmVyZGljdCAoJWkpXG4iLAogCQkJIHRhcmctPnZlcmRpY3QpOwpAQCAtNTA4LDYgKzUwMSw3IEBACiAJICAgIHVuc2lnbmVkIGludCAqaSkKIHsKIAlzdHJ1Y3QgaXB0X21hdGNoICptYXRjaDsKKwlpbnQgcmV0OwogCiAJbWF0Y2ggPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX21hdGNoKEFGX0lORVQsIG0tPnUudXNlci5uYW1lLAogCQkJCQkJICAgbS0+dS51c2VyLnJldmlzaW9uKSwKQEAgLTUxOCwxOCArNTEyLDI3IEBACiAJfQogCW0tPnUua2VybmVsLm1hdGNoID0gbWF0Y2g7CiAKKwlyZXQgPSB4dF9jaGVja19tYXRjaChtYXRjaCwgQUZfSU5FVCwgbS0+dS5tYXRjaF9zaXplIC0gc2l6ZW9mKCptKSwKKwkJCSAgICAgbmFtZSwgaG9va21hc2ssIGlwLT5wcm90bywKKwkJCSAgICAgaXAtPmludmZsYWdzICYgSVBUX0lOVl9QUk9UTyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKIAlpZiAobS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkKLQkgICAgJiYgIW0tPnUua2VybmVsLm1hdGNoLT5jaGVja2VudHJ5KG5hbWUsIGlwLCBtLT5kYXRhLAorCSAgICAmJiAhbS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkobmFtZSwgaXAsIG1hdGNoLCBtLT5kYXRhLAogCQkJCQkgICAgICBtLT51Lm1hdGNoX3NpemUgLSBzaXplb2YoKm0pLAogCQkJCQkgICAgICBob29rbWFzaykpIHsKLQkJbW9kdWxlX3B1dChtLT51Lmtlcm5lbC5tYXRjaC0+bWUpOwogCQlkdXByaW50ZigiaXBfdGFibGVzOiBjaGVjayBmYWlsZWQgZm9yIGAlcycuXG4iLAogCQkJIG0tPnUua2VybmVsLm1hdGNoLT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOwogCX0KIAogCSgqaSkrKzsKIAlyZXR1cm4gMDsKK2VycjoKKwltb2R1bGVfcHV0KG0tPnUua2VybmVsLm1hdGNoLT5tZSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9zdGFuZGFyZF90YXJnZXQ7CkBAIC01NjUsMjYgKzU2OCwzMiBAQAogCX0KIAl0LT51Lmtlcm5lbC50YXJnZXQgPSB0YXJnZXQ7CiAKKwlyZXQgPSB4dF9jaGVja190YXJnZXQodGFyZ2V0LCBBRl9JTkVULCB0LT51LnRhcmdldF9zaXplIC0gc2l6ZW9mKCp0KSwKKwkJCSAgICAgIG5hbWUsIGUtPmNvbWVmcm9tLCBlLT5pcC5wcm90bywKKwkJCSAgICAgIGUtPmlwLmludmZsYWdzICYgSVBUX0lOVl9QUk9UTyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKIAlpZiAodC0+dS5rZXJuZWwudGFyZ2V0ID09ICZpcHRfc3RhbmRhcmRfdGFyZ2V0KSB7CiAJCWlmICghc3RhbmRhcmRfY2hlY2sodCwgc2l6ZSkpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKIAkJfQogCX0gZWxzZSBpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5Ci0JCSAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkobmFtZSwgZSwgdC0+ZGF0YSwKKwkJICAgJiYgIXQtPnUua2VybmVsLnRhcmdldC0+Y2hlY2tlbnRyeShuYW1lLCBlLCB0YXJnZXQsIHQtPmRhdGEsCiAJCQkJCQkgICAgICB0LT51LnRhcmdldF9zaXplCiAJCQkJCQkgICAgICAtIHNpemVvZigqdCksCiAJCQkJCQkgICAgICBlLT5jb21lZnJvbSkpIHsKLQkJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKIAkJZHVwcmludGYoImlwX3RhYmxlczogY2hlY2sgZmFpbGVkIGZvciBgJXMnLlxuIiwKIAkJCSB0LT51Lmtlcm5lbC50YXJnZXQtPm5hbWUpOwogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKKwkJZ290byBlcnI7CiAJfQogCiAJKCppKSsrOwogCXJldHVybiAwOwotCisgZXJyOgorCW1vZHVsZV9wdXQodC0+dS5rZXJuZWwudGFyZ2V0LT5tZSk7CiAgY2xlYW51cF9tYXRjaGVzOgogCUlQVF9NQVRDSF9JVEVSQVRFKGUsIGNsZWFudXBfbWF0Y2gsICZqKTsKIAlyZXR1cm4gcmV0OwpAQCAtNjQ1LDcgKzY1NCw3IEBACiAJSVBUX01BVENIX0lURVJBVEUoZSwgY2xlYW51cF9tYXRjaCwgTlVMTCk7CiAJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOwogCWlmICh0LT51Lmtlcm5lbC50YXJnZXQtPmRlc3Ryb3kpCi0JCXQtPnUua2VybmVsLnRhcmdldC0+ZGVzdHJveSh0LT5kYXRhLAorCQl0LT51Lmtlcm5lbC50YXJnZXQtPmRlc3Ryb3kodC0+dS5rZXJuZWwudGFyZ2V0LCB0LT5kYXRhLAogCQkJCQkgICAgdC0+dS50YXJnZXRfc2l6ZSAtIHNpemVvZigqdCkpOwogCW1vZHVsZV9wdXQodC0+dS5rZXJuZWwudGFyZ2V0LT5tZSk7CiAJcmV0dXJuIDA7CkBAIC0xMjc3LDYgKzEyODYsNyBAQAogaWNtcF9tYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogCSAgIGludCBvZmZzZXQsCiAJICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC0xMzEwLDI4ICsxMzIwLDI5IEBACiBzdGF0aWMgaW50CiBpY21wX2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmluZm8sCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgICB2b2lkICptYXRjaGluZm8sCiAJICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKIAkgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewotCWNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwID0gaW5mbzsKIAljb25zdCBzdHJ1Y3QgaXB0X2ljbXAgKmljbXBpbmZvID0gbWF0Y2hpbmZvOwogCi0JLyogTXVzdCBzcGVjaWZ5IHByb3RvID09IElDTVAsIGFuZCBubyB1bmtub3duIGludmZsYWdzICovCi0JcmV0dXJuIGlwLT5wcm90byA9PSBJUFBST1RPX0lDTVAKLQkJJiYgIShpcC0+aW52ZmxhZ3MgJiBJUFRfSU5WX1BST1RPKQotCQkmJiBtYXRjaHNpemUgPT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X2ljbXApKQotCQkmJiAhKGljbXBpbmZvLT5pbnZmbGFncyAmIH5JUFRfSUNNUF9JTlYpOworCS8qIE11c3Qgc3BlY2lmeSBubyB1bmtub3duIGludmZsYWdzICovCisJcmV0dXJuICEoaWNtcGluZm8tPmludmZsYWdzICYgfklQVF9JQ01QX0lOVik7CiB9CiAKIC8qIFRoZSBidWlsdC1pbiB0YXJnZXRzOiBzdGFuZGFyZCAoTlVMTCkgYW5kIGVycm9yLiAqLwogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9zdGFuZGFyZF90YXJnZXQgPSB7CiAJLm5hbWUJCT0gSVBUX1NUQU5EQVJEX1RBUkdFVCwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihpbnQpLAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXB0X3RhcmdldCBpcHRfZXJyb3JfdGFyZ2V0ID0gewogCS5uYW1lCQk9IElQVF9FUlJPUl9UQVJHRVQsCiAJLnRhcmdldAkJPSBpcHRfZXJyb3IsCisJLnRhcmdldHNpemUJPSBJUFRfRlVOQ1RJT05fTUFYTkFNRUxFTiwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiB9OwogCiBzdGF0aWMgc3RydWN0IG5mX3NvY2tvcHRfb3BzIGlwdF9zb2Nrb3B0cyA9IHsKQEAgLTEzNDYsOCArMTM1NywxMSBAQAogCiBzdGF0aWMgc3RydWN0IGlwdF9tYXRjaCBpY21wX21hdGNoc3RydWN0ID0gewogCS5uYW1lCQk9ICJpY21wIiwKLQkubWF0Y2gJCT0gJmljbXBfbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmaWNtcF9jaGVja2VudHJ5LAorCS5tYXRjaAkJPSBpY21wX21hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9pY21wKSwKKwkucHJvdG8JCT0gSVBQUk9UT19JQ01QLAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkuY2hlY2tlbnRyeQk9IGljbXBfY2hlY2tlbnRyeSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKQEAgLTEzNTcsOSArMTM3MSw5IEBACiAJeHRfcHJvdG9faW5pdChBRl9JTkVUKTsKIAogCS8qIE5vb25lIGVsc2Ugd2lsbCBiZSBkb3duaW5nIHNlbSBub3csIHNvIHdlIHdvbid0IHNsZWVwICovCi0JeHRfcmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQsICZpcHRfc3RhbmRhcmRfdGFyZ2V0KTsKLQl4dF9yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJmlwdF9lcnJvcl90YXJnZXQpOwotCXh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZpY21wX21hdGNoc3RydWN0KTsKKwl4dF9yZWdpc3Rlcl90YXJnZXQoJmlwdF9zdGFuZGFyZF90YXJnZXQpOworCXh0X3JlZ2lzdGVyX3RhcmdldCgmaXB0X2Vycm9yX3RhcmdldCk7CisJeHRfcmVnaXN0ZXJfbWF0Y2goJmljbXBfbWF0Y2hzdHJ1Y3QpOwogCiAJLyogUmVnaXN0ZXIgc2V0c29ja29wdCAqLwogCXJldCA9IG5mX3JlZ2lzdGVyX3NvY2tvcHQoJmlwdF9zb2Nrb3B0cyk7CkBAIC0xMzc2LDkgKzEzOTAsOSBAQAogewogCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmaXB0X3NvY2tvcHRzKTsKIAotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmljbXBfbWF0Y2hzdHJ1Y3QpOwotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQsICZpcHRfZXJyb3JfdGFyZ2V0KTsKLQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmaXB0X3N0YW5kYXJkX3RhcmdldCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaWNtcF9tYXRjaHN0cnVjdCk7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwdF9lcnJvcl90YXJnZXQpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZpcHRfc3RhbmRhcmRfdGFyZ2V0KTsKIAogCXh0X3Byb3RvX2ZpbmkoQUZfSU5FVCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCBkOWJjOTcxLi42MWUxMWVkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTMxMSw2ICszMTEsNyBAQAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorICAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKICAgICAgICBjb25zdCB2b2lkICp0YXJnaW5mbywKICAgICAgICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTM4MCw2ICszODEsNyBAQAogc3RhdGljIGludAogY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgY29uc3Qgdm9pZCAqZV92b2lkLAorCSAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKICAgICAgICAgICAgdm9pZCAqdGFyZ2luZm8sCiAgICAgICAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAgICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCkBAIC0zODksMTMgKzM5MSw2IEBACiAKIAlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqY29uZmlnOwogCi0JaWYgKHRhcmdpbmZvc2l6ZSAhPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0xVU1RFUklQOiB0YXJnaW5mb3NpemUgJXUgIT0gJVp1XG4iLAotCQkgICAgICAgdGFyZ2luZm9zaXplLAotCQkgICAgICAgSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbykpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKGNpcGluZm8tPmhhc2hfbW9kZSAhPSBDTFVTVEVSSVBfSEFTSE1PREVfU0lQICYmCiAJICAgIGNpcGluZm8tPmhhc2hfbW9kZSAhPSBDTFVTVEVSSVBfSEFTSE1PREVfU0lQX1NQVCAmJgogCSAgICBjaXBpbmZvLT5oYXNoX21vZGUgIT0gQ0xVU1RFUklQX0hBU0hNT0RFX1NJUF9TUFRfRFBUKSB7CkBAIC00NjUsOSArNDYwLDEwIEBACiB9CiAKIC8qIGRyb3AgcmVmZXJlbmNlIGNvdW50IG9mIGNsdXN0ZXIgY29uZmlnIHdoZW4gcnVsZSBpcyBkZWxldGVkICovCi1zdGF0aWMgdm9pZCBkZXN0cm95KHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUpCitzdGF0aWMgdm9pZCBkZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdm9pZCAqdGFyZ2luZm8sCisJCSAgICB1bnNpZ25lZCBpbnQgdGFyZ2luZm9zaXplKQogewotCXN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvICpjaXBpbmZvID0gbWF0Y2hpbmZvOworCXN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvICpjaXBpbmZvID0gdGFyZ2luZm87CiAKIAkvKiBpZiBubyBtb3JlIGVudHJpZXMgYXJlIHJlZmVyZW5jaW5nIHRoZSBjb25maWcsIHJlbW92ZSBpdAogCSAqIGZyb20gdGhlIGxpc3QgYW5kIGRlc3Ryb3kgdGhlIHByb2MgZW50cnkgKi8KQEAgLTQ3NiwxMiArNDcyLDEzIEBACiAJY2x1c3RlcmlwX2NvbmZpZ19wdXQoY2lwaW5mby0+Y29uZmlnKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGNsdXN0ZXJpcF90Z3QgPSB7IAotCS5uYW1lID0gIkNMVVNURVJJUCIsCi0JLnRhcmdldCA9ICZ0YXJnZXQsIAotCS5jaGVja2VudHJ5ID0gJmNoZWNrZW50cnksIAotCS5kZXN0cm95ID0gJmRlc3Ryb3ksCi0JLm1lID0gVEhJU19NT0RVTEUKK3N0YXRpYyBzdHJ1Y3QgaXB0X3RhcmdldCBjbHVzdGVyaXBfdGd0ID0geworCS5uYW1lCQk9ICJDTFVTVEVSSVAiLAorCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLmRlc3Ryb3kJPSBkZXN0cm95LAorCS5tZQkJPSBUSElTX01PRFVMRQogfTsKIAogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0RTQ1AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfRFNDUC5jCmluZGV4IDg5OGNkZjcuLmNmYjBiOTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfRFNDUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfRFNDUC5jCkBAIC0yOSw2ICsyOSw3IEBACiAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogICAgICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAogICAgICAgIHZvaWQgKnVzZXJpbmZvKQogewpAQCAtNTgsMzUgKzU5LDI1IEBACiBzdGF0aWMgaW50CiBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkgICBjb25zdCB2b2lkICplX3ZvaWQsCisJICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogICAgICAgICAgICB2b2lkICp0YXJnaW5mbywKICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAljb25zdCB1X2ludDhfdCBkc2NwID0gKChzdHJ1Y3QgaXB0X0RTQ1BfaW5mbyAqKXRhcmdpbmZvKS0+ZHNjcDsKIAotCWlmICh0YXJnaW5mb3NpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X0RTQ1BfaW5mbykpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRTQ1A6IHRhcmdpbmZvc2l6ZSAldSAhPSAlWnVcbiIsCi0JCSAgICAgICB0YXJnaW5mb3NpemUsCi0JCSAgICAgICBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfRFNDUF9pbmZvKSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm1hbmdsZSIpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRFNDUDogY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gXCJtYW5nbGVcIiB0YWJsZSwgbm90IFwiJXNcIlxuIiwgdGFibGVuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKChkc2NwID4gSVBUX0RTQ1BfTUFYKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJEU0NQOiBkc2NwICV4IG91dCBvZiByYW5nZVxuIiwgZHNjcCk7CiAJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAxOwogfQogCiBzdGF0aWMgc3RydWN0IGlwdF90YXJnZXQgaXB0X2RzY3BfcmVnID0gewogCS5uYW1lCQk9ICJEU0NQIiwKIAkudGFyZ2V0CQk9IHRhcmdldCwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X0RTQ1BfaW5mbyksCisJLnRhYmxlCQk9ICJtYW5nbGUiLAogCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9FQ04uYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfRUNOLmMKaW5kZXggNzA2NDQ1NC4uYjliODBmOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9FQ04uYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0VDTi5jCkBAIC05NCw2ICs5NCw3IEBACiAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogICAgICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAogICAgICAgIHZvaWQgKnVzZXJpbmZvKQogewpAQCAtMTE0LDYgKzExNSw3IEBACiBzdGF0aWMgaW50CiBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkgICBjb25zdCB2b2lkICplX3ZvaWQsCisJICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogICAgICAgICAgICB2b2lkICp0YXJnaW5mbywKICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKQEAgLTEyMSwxOCArMTIzLDYgQEAKIAljb25zdCBzdHJ1Y3QgaXB0X0VDTl9pbmZvICplaW5mbyA9IChzdHJ1Y3QgaXB0X0VDTl9pbmZvICopdGFyZ2luZm87CiAJY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSA9IGVfdm9pZDsKIAotCWlmICh0YXJnaW5mb3NpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X0VDTl9pbmZvKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUNOOiB0YXJnaW5mb3NpemUgJXUgIT0gJVp1XG4iLAotCQkgICAgICAgdGFyZ2luZm9zaXplLAotCQkgICAgICAgSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X0VDTl9pbmZvKSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm1hbmdsZSIpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUNOOiBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBcIm1hbmdsZVwiIHRhYmxlLCBub3QgXCIlc1wiXG4iLCB0YWJsZW5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoZWluZm8tPm9wZXJhdGlvbiAmIElQVF9FQ05fT1BfTUFTSykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJFQ046IHVuc3VwcG9ydGVkIEVDTiBvcGVyYXRpb24gJXhcbiIsCiAJCQllaW5mby0+b3BlcmF0aW9uKTsKQEAgLTE0MywyMCArMTMzLDIwIEBACiAJCQllaW5mby0+aXBfZWN0KTsKIAkJcmV0dXJuIDA7CiAJfQotCiAJaWYgKChlaW5mby0+b3BlcmF0aW9uICYgKElQVF9FQ05fT1BfU0VUX0VDRXxJUFRfRUNOX09QX1NFVF9DV1IpKQogCSAgICAmJiAoZS0+aXAucHJvdG8gIT0gSVBQUk9UT19UQ1AgfHwgKGUtPmlwLmludmZsYWdzICYgSVBUX0lOVl9QUk9UTykpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVDTjogY2Fubm90IHVzZSBUQ1Agb3BlcmF0aW9ucyBvbiBhICIKIAkJICAgICAgICJub24tdGNwIHJ1bGVcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9lY25fcmVnID0gewogCS5uYW1lCQk9ICJFQ04iLAogCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfRUNOX2luZm8pLAorCS50YWJsZQkJPSAibWFuZ2xlIiwKIAkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCmluZGV4IDY2MDZkZGIuLjc1MGQzMjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYwpAQCAtNDE1LDYgKzQxNSw3IEBACiAJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJICAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkgICAgICAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sCiAJICAgICAgIHZvaWQgKnVzZXJpbmZvKQogewpAQCAtNDI1LDQyICs0MjYsNDEgQEAKIAlsaS51LmxvZy5sZXZlbCA9IGxvZ2luZm8tPmxldmVsOwogCWxpLnUubG9nLmxvZ2ZsYWdzID0gbG9naW5mby0+bG9nZmxhZ3M7CiAKLQluZl9sb2dfcGFja2V0KFBGX0lORVQsIGhvb2tudW0sICpwc2tiLCBpbiwgb3V0LCAmbGksIGxvZ2luZm8tPnByZWZpeCk7CisJaWYgKGxvZ2luZm8tPmxvZ2ZsYWdzICYgSVBUX0xPR19ORkxPRykKKwkJbmZfbG9nX3BhY2tldChQRl9JTkVULCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAorCQkgICAgICAgICAgICAgIGxvZ2luZm8tPnByZWZpeCk7CisJZWxzZQorCQlpcHRfbG9nX3BhY2tldChQRl9JTkVULCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAorCQkgICAgICAgICAgICAgICBsb2dpbmZvLT5wcmVmaXgpOwogCiAJcmV0dXJuIElQVF9DT05USU5VRTsKIH0KIAogc3RhdGljIGludCBpcHRfbG9nX2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkJICAgICAgY29uc3Qgdm9pZCAqZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkJCSAgICAgIHZvaWQgKnRhcmdpbmZvLAogCQkJICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwdF9sb2dfaW5mbyAqbG9naW5mbyA9IHRhcmdpbmZvOwogCi0JaWYgKHRhcmdpbmZvc2l6ZSAhPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfbG9nX2luZm8pKSkgewotCQlERUJVR1AoIkxPRzogdGFyZ2luZm9zaXplICV1ICE9ICV1XG4iLAotCQkgICAgICAgdGFyZ2luZm9zaXplLCBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfbG9nX2luZm8pKSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChsb2dpbmZvLT5sZXZlbCA+PSA4KSB7CiAJCURFQlVHUCgiTE9HOiBsZXZlbCAldSA+PSA4XG4iLCBsb2dpbmZvLT5sZXZlbCk7CiAJCXJldHVybiAwOwogCX0KLQogCWlmIChsb2dpbmZvLT5wcmVmaXhbc2l6ZW9mKGxvZ2luZm8tPnByZWZpeCktMV0gIT0gJ1wwJykgewogCQlERUJVR1AoIkxPRzogcHJlZml4IHRlcm0gJWlcbiIsCiAJCSAgICAgICBsb2dpbmZvLT5wcmVmaXhbc2l6ZW9mKGxvZ2luZm8tPnByZWZpeCktMV0pOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9sb2dfcmVnID0gewogCS5uYW1lCQk9ICJMT0ciLAogCS50YXJnZXQJCT0gaXB0X2xvZ190YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9sb2dfaW5mbyksCiAJLmNoZWNrZW50cnkJPSBpcHRfbG9nX2NoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKaW5kZXggMTJjNTZkMzMuLmUwYzMyMWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jCkBAIC00MSwyNSArNDEsMTMgQEAKIHN0YXRpYyBpbnQKIG1hc3F1ZXJhZGVfY2hlY2soY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkgY29uc3Qgdm9pZCAqZSwKKwkJIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkJIHZvaWQgKnRhcmdpbmZvLAogCQkgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKIAkJIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gdGFyZ2luZm87CiAKLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm5hdCIpICE9IDApIHsKLQkJREVCVUdQKCJtYXNxdWVyYWRlX2NoZWNrOiBiYWQgdGFibGUgYCVzJy5cbiIsIHRhYmxlbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodGFyZ2luZm9zaXplICE9IElQVF9BTElHTihzaXplb2YoKm1yKSkpIHsKLQkJREVCVUdQKCJtYXNxdWVyYWRlX2NoZWNrOiBzaXplICV1ICE9ICV1LlxuIiwKLQkJICAgICAgIHRhcmdpbmZvc2l6ZSwgc2l6ZW9mKCptcikpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGhvb2tfbWFzayAmIH4oMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcpKSB7Ci0JCURFQlVHUCgibWFzcXVlcmFkZV9jaGVjazogYmFkIGhvb2tzICV4LlxuIiwgaG9va19tYXNrKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWlmIChtci0+cmFuZ2VbMF0uZmxhZ3MgJiBJUF9OQVRfUkFOR0VfTUFQX0lQUykgewogCQlERUJVR1AoIm1hc3F1ZXJhZGVfY2hlY2s6IGJhZCBNQVBfSVBTLlxuIik7CiAJCXJldHVybiAwOwpAQCAtNzYsNiArNjQsNyBAQAogCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkJICBjb25zdCB2b2lkICp0YXJnaW5mbywKIAkJICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTE3OSw2ICsxNjgsOSBAQAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IG1hc3F1ZXJhZGUgPSB7CiAJLm5hbWUJCT0gIk1BU1FVRVJBREUiLAogCS50YXJnZXQJCT0gbWFzcXVlcmFkZV90YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQpLAorCS50YWJsZQkJPSAibmF0IiwKKwkuaG9va3MJCT0gMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcsCiAJLmNoZWNrZW50cnkJPSBtYXNxdWVyYWRlX2NoZWNrLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05FVE1BUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ORVRNQVAuYwppbmRleCBiMDc0NDY3Li5mYmExODFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05FVE1BUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTkVUTUFQLmMKQEAgLTMyLDI1ICszMiwxMyBAQAogc3RhdGljIGludAogY2hlY2soY29uc3QgY2hhciAqdGFibGVuYW1lLAogICAgICAgY29uc3Qgdm9pZCAqZSwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKICAgICAgIHZvaWQgKnRhcmdpbmZvLAogICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gdGFyZ2luZm87CiAKLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm5hdCIpICE9IDApIHsKLQkJREVCVUdQKE1PRFVMRU5BTUUiOmNoZWNrOiBiYWQgdGFibGUgYCVzJy5cbiIsIHRhYmxlbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodGFyZ2luZm9zaXplICE9IElQVF9BTElHTihzaXplb2YoKm1yKSkpIHsKLQkJREVCVUdQKE1PRFVMRU5BTUUiOmNoZWNrOiBzaXplICV1LlxuIiwgdGFyZ2luZm9zaXplKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChob29rX21hc2sgJiB+KCgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HKSB8ICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORykgfAotCSAgICAgICAgICAgICAgICAgICgxIDw8IE5GX0lQX0xPQ0FMX09VVCkpKSB7Ci0JCURFQlVHUChNT0RVTEVOQU1FIjpjaGVjazogYmFkIGhvb2tzICV4LlxuIiwgaG9va19tYXNrKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWlmICghKG1yLT5yYW5nZVswXS5mbGFncyAmIElQX05BVF9SQU5HRV9NQVBfSVBTKSkgewogCQlERUJVR1AoTU9EVUxFTkFNRSI6Y2hlY2s6IGJhZCBNQVBfSVBTLlxuIik7CiAJCXJldHVybiAwOwpAQCAtNjcsNiArNTUsNyBAQAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorICAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKICAgICAgICBjb25zdCB2b2lkICp0YXJnaW5mbywKICAgICAgICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTEwMSw2ICs5MCwxMCBAQAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IHRhcmdldF9tb2R1bGUgPSB7IAogCS5uYW1lIAkJPSBNT0RVTEVOQU1FLAogCS50YXJnZXQgCT0gdGFyZ2V0LCAKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdCksCisJLnRhYmxlCQk9ICJuYXQiLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcpIHwKKwkJCSAgKDEgPDwgTkZfSVBfTE9DQUxfT1VUKSwKIAkuY2hlY2tlbnRyeSAJPSBjaGVjaywKICAgICAJLm1lIAkJPSBUSElTX01PRFVMRSAKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFRElSRUNULmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFRElSRUNULmMKaW5kZXggMTQwYmU1MS4uYmUzZGE3YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRURJUkVDVC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVESVJFQ1QuYwpAQCAtMzQsMjQgKzM0LDEzIEBACiBzdGF0aWMgaW50CiByZWRpcmVjdF9jaGVjayhjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgICAgIGNvbnN0IHZvaWQgKmUsCisJICAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkgICAgICAgdm9pZCAqdGFyZ2luZm8sCiAJICAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAJICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gdGFyZ2luZm87CiAKLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm5hdCIpICE9IDApIHsKLQkJREVCVUdQKCJyZWRpcmVjdF9jaGVjazogYmFkIHRhYmxlIGAlcycuXG4iLCB0YWJsZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodGFyZ2luZm9zaXplICE9IElQVF9BTElHTihzaXplb2YoKm1yKSkpIHsKLQkJREVCVUdQKCJyZWRpcmVjdF9jaGVjazogc2l6ZSAldS5cbiIsIHRhcmdpbmZvc2l6ZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoaG9va19tYXNrICYgfigoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9MT0NBTF9PVVQpKSkgewotCQlERUJVR1AoInJlZGlyZWN0X2NoZWNrOiBiYWQgaG9va3MgJXguXG4iLCBob29rX21hc2spOwotCQlyZXR1cm4gMDsKLQl9CiAJaWYgKG1yLT5yYW5nZVswXS5mbGFncyAmIElQX05BVF9SQU5HRV9NQVBfSVBTKSB7CiAJCURFQlVHUCgicmVkaXJlY3RfY2hlY2s6IGJhZCBNQVBfSVBTLlxuIik7CiAJCXJldHVybiAwOwpAQCAtNjgsNiArNTcsNyBAQAogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCXVuc2lnbmVkIGludCBob29rbnVtLAorCQljb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAJCWNvbnN0IHZvaWQgKnRhcmdpbmZvLAogCQl2b2lkICp1c2VyaW5mbykKIHsKQEAgLTExNSw2ICsxMDUsOSBAQAogc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IHJlZGlyZWN0X3JlZyA9IHsKIAkubmFtZQkJPSAiUkVESVJFQ1QiLAogCS50YXJnZXQJCT0gcmVkaXJlY3RfdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcF9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0KSwKKwkudGFibGUJCT0gIm5hdCIsCisJLmhvb2tzCQk9ICgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HKSB8ICgxIDw8IE5GX0lQX0xPQ0FMX09VVCksCiAJLmNoZWNrZW50cnkJPSByZWRpcmVjdF9jaGVjaywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKaW5kZXggM2ViNDdhYS4uOWQzYjM1NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCkBAIC0xNTQsMTAgKzE1NCw2IEBACiAJLyogVGhpcyBwYWNrZXQgd2lsbCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG90aGVyOiBjbGVhciBuZiBmaWVsZHMgKi8KIAluZl9yZXNldChuc2tiKTsKIAluc2tiLT5uZm1hcmsgPSAwOwotI2lmZGVmIENPTkZJR19CUklER0VfTkVURklMVEVSCi0JbmZfYnJpZGdlX3B1dChuc2tiLT5uZl9icmlkZ2UpOwotCW5za2ItPm5mX2JyaWRnZSA9IE5VTEw7Ci0jZW5kaWYKIAogCXRjcGggPSAoc3RydWN0IHRjcGhkciAqKSgodV9pbnQzMl90Kiluc2tiLT5uaC5pcGggKyBuc2tiLT5uaC5pcGgtPmlobCk7CiAKQEAgLTIzNiw2ICsyMzIsNyBAQAogCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJCSAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkJICAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sCiAJCQkgICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTI4Myw2ICsyODAsNyBAQAogCiBzdGF0aWMgaW50IGNoZWNrKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkJIGNvbnN0IHZvaWQgKmVfdm9pZCwKKwkJIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkJIHZvaWQgKnRhcmdpbmZvLAogCQkgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKIAkJIHVuc2lnbmVkIGludCBob29rX21hc2spCkBAIC0yOTAsMjMgKzI4OCw2IEBACiAgCWNvbnN0IHN0cnVjdCBpcHRfcmVqZWN0X2luZm8gKnJlamluZm8gPSB0YXJnaW5mbzsKIAljb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplID0gZV92b2lkOwogCi0gCWlmICh0YXJnaW5mb3NpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3JlamVjdF9pbmZvKSkpIHsKLSAgCQlERUJVR1AoIlJFSkVDVDogdGFyZ2luZm9zaXplICV1ICE9IDBcbiIsIHRhcmdpbmZvc2l6ZSk7Ci0gIAkJcmV0dXJuIDA7Ci0gIAl9Ci0KLQkvKiBPbmx5IGFsbG93IHRoZXNlIGZvciBwYWNrZXQgZmlsdGVyaW5nLiAqLwotCWlmIChzdHJjbXAodGFibGVuYW1lLCAiZmlsdGVyIikgIT0gMCkgewotCQlERUJVR1AoIlJFSkVDVDogYmFkIHRhYmxlIGAlcycuXG4iLCB0YWJsZW5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKChob29rX21hc2sgJiB+KCgxIDw8IE5GX0lQX0xPQ0FMX0lOKQotCQkJICAgfCAoMSA8PCBORl9JUF9GT1JXQVJEKQotCQkJICAgfCAoMSA8PCBORl9JUF9MT0NBTF9PVVQpKSkgIT0gMCkgewotCQlERUJVR1AoIlJFSkVDVDogYmFkIGhvb2sgbWFzayAlWFxuIiwgaG9va19tYXNrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKHJlamluZm8tPndpdGggPT0gSVBUX0lDTVBfRUNIT1JFUExZKSB7CiAJCXByaW50aygiUkVKRUNUOiBFQ0hPUkVQTFkgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiIpOwogCQlyZXR1cm4gMDsKQEAgLTMxOCwxMyArMjk5LDE2IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQogCXJldHVybiAxOwogfQogCiBzdGF0aWMgc3RydWN0IGlwdF90YXJnZXQgaXB0X3JlamVjdF9yZWcgPSB7CiAJLm5hbWUJCT0gIlJFSkVDVCIsCiAJLnRhcmdldAkJPSByZWplY3QsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9yZWplY3RfaW5mbyksCisJLnRhYmxlCQk9ICJmaWx0ZXIiLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUF9MT0NBTF9JTikgfCAoMSA8PCBORl9JUF9GT1JXQVJEKSB8CisJCQkgICgxIDw8IE5GX0lQX0xPQ0FMX09VVCksCiAJLmNoZWNrZW50cnkJPSBjaGVjaywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TQU1FLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NBTUUuYwppbmRleCBhMjJkZTU5Li43ZTJlYmM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NBTUUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NBTUUuYwpAQCAtNTAsNiArNTAsNyBAQAogc3RhdGljIGludAogc2FtZV9jaGVjayhjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgICAgY29uc3Qgdm9pZCAqZSwKKwkgICAgICBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAJICAgICAgdm9pZCAqdGFyZ2luZm8sCiAJICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKIAkgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQpAQCAtNTksMTggKzYwLDYgQEAKIAogCW1yLT5pcG51bSA9IDA7CiAKLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm5hdCIpICE9IDApIHsKLQkJREVCVUdQKCJzYW1lX2NoZWNrOiBiYWQgdGFibGUgYCVzJy5cbiIsIHRhYmxlbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodGFyZ2luZm9zaXplICE9IElQVF9BTElHTihzaXplb2YoKm1yKSkpIHsKLQkJREVCVUdQKCJzYW1lX2NoZWNrOiBzaXplICV1LlxuIiwgdGFyZ2luZm9zaXplKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChob29rX21hc2sgJiB+KDEgPDwgTkZfSVBfUFJFX1JPVVRJTkcgfCAxIDw8IE5GX0lQX1BPU1RfUk9VVElORykpIHsKLQkJREVCVUdQKCJzYW1lX2NoZWNrOiBiYWQgaG9va3MgJXguXG4iLCBob29rX21hc2spOwotCQlyZXR1cm4gMDsKLQl9CiAJaWYgKG1yLT5yYW5nZXNpemUgPCAxKSB7CiAJCURFQlVHUCgic2FtZV9jaGVjazogbmVlZCBhdCBsZWFzdCBvbmUgZGVzdCByYW5nZS5cbiIpOwogCQlyZXR1cm4gMDsKQEAgLTEyNyw3ICsxMTYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAKLXNhbWVfZGVzdHJveSh2b2lkICp0YXJnaW5mbywKK3NhbWVfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsIHZvaWQgKnRhcmdpbmZvLAogCQl1bnNpZ25lZCBpbnQgdGFyZ2luZm9zaXplKQogewogCXN0cnVjdCBpcHRfc2FtZV9pbmZvICptciA9IHRhcmdpbmZvOwpAQCAtMTQzLDYgKzEzMiw3IEBACiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJdW5zaWduZWQgaW50IGhvb2tudW0sCisJCWNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkJY29uc3Qgdm9pZCAqdGFyZ2luZm8sCiAJCXZvaWQgKnVzZXJpbmZvKQogewpAQCAtMTkxLDYgKzE4MSw5IEBACiBzdGF0aWMgc3RydWN0IGlwdF90YXJnZXQgc2FtZV9yZWcgPSB7IAogCS5uYW1lCQk9ICJTQU1FIiwKIAkudGFyZ2V0CQk9IHNhbWVfdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc2FtZV9pbmZvKSwKKwkudGFibGUJCT0gIm5hdCIsCisJLmhvb2tzCQk9ICgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HIHwgMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcpLAogCS5jaGVja2VudHJ5CT0gc2FtZV9jaGVjaywKIAkuZGVzdHJveQk9IHNhbWVfZGVzdHJveSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RDUE1TUy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UQ1BNU1MuYwppbmRleCBjMTIyODQxLi5jNGZjNTBlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RDUE1TUy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVENQTVNTLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJICBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAJCSAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sCiAJCSAgdm9pZCAqdXNlcmluZm8pCiB7CkBAIC0yMTEsNiArMjEyLDcgQEAKIHN0YXRpYyBpbnQKIGlwdF90Y3Btc3NfY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJCSAgICAgIGNvbnN0IHZvaWQgKmVfdm9pZCwKKwkJICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkgICAgICB2b2lkICp0YXJnaW5mbywKIAkJICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKQEAgLTIxOCwxMyArMjIwLDYgQEAKIAljb25zdCBzdHJ1Y3QgaXB0X3RjcG1zc19pbmZvICp0Y3Btc3NpbmZvID0gdGFyZ2luZm87CiAJY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSA9IGVfdm9pZDsKIAotCWlmICh0YXJnaW5mb3NpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3RjcG1zc19pbmZvKSkpIHsKLQkJREVCVUdQKCJpcHRfdGNwbXNzX2NoZWNrZW50cnk6IHRhcmdpbmZvc2l6ZSAldSAhPSAldVxuIiwKLQkJICAgICAgIHRhcmdpbmZvc2l6ZSwgSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3RjcG1zc19pbmZvKSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQogCWlmKCh0Y3Btc3NpbmZvLT5tc3MgPT0gSVBUX1RDUE1TU19DTEFNUF9QTVRVKSAmJiAKIAkJCSgoaG9va19tYXNrICYgfigoMSA8PCBORl9JUF9GT1JXQVJEKQogCQkJICAgCXwgKDEgPDwgTkZfSVBfTE9DQUxfT1VUKQpAQCAtMjMzLDExICsyMjgsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoZS0+aXAucHJvdG8gPT0gSVBQUk9UT19UQ1AKLQkgICAgJiYgIShlLT5pcC5pbnZmbGFncyAmIElQVF9JTlZfUFJPVE8pCi0JICAgICYmIElQVF9NQVRDSF9JVEVSQVRFKGUsIGZpbmRfc3luX21hdGNoKSkKKwlpZiAoSVBUX01BVENIX0lURVJBVEUoZSwgZmluZF9zeW5fbWF0Y2gpKQogCQlyZXR1cm4gMTsKLQogCXByaW50aygiVENQTVNTOiBPbmx5IHdvcmtzIG9uIFRDUCBTWU4gcGFja2V0c1xuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDUsNiArMjM3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgaXB0X3RhcmdldCBpcHRfdGNwbXNzX3JlZyA9IHsKIAkubmFtZQkJPSAiVENQTVNTIiwKIAkudGFyZ2V0CQk9IGlwdF90Y3Btc3NfdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfdGNwbXNzX2luZm8pLAorCS5wcm90bwkJPSBJUFBST1RPX1RDUCwKIAkuY2hlY2tlbnRyeQk9IGlwdF90Y3Btc3NfY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UT1MuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVE9TLmMKaW5kZXggM2E0NGE1Ni4uOWFhNzgxNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UT1MuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RPUy5jCkBAIC0yNSw2ICsyNSw3IEBACiAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogICAgICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAogICAgICAgIHZvaWQgKnVzZXJpbmZvKQogewpAQCAtNTMsMjQgKzU0LDEzIEBACiBzdGF0aWMgaW50CiBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkgICBjb25zdCB2b2lkICplX3ZvaWQsCisJICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogICAgICAgICAgICB2b2lkICp0YXJnaW5mbywKICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAljb25zdCB1X2ludDhfdCB0b3MgPSAoKHN0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvICopdGFyZ2luZm8pLT50b3M7CiAKLQlpZiAodGFyZ2luZm9zaXplICE9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF90b3NfdGFyZ2V0X2luZm8pKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT1M6IHRhcmdpbmZvc2l6ZSAldSAhPSAlWnVcbiIsCi0JCSAgICAgICB0YXJnaW5mb3NpemUsCi0JCSAgICAgICBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvKSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm1hbmdsZSIpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9TOiBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBcIm1hbmdsZVwiIHRhYmxlLCBub3QgXCIlc1wiXG4iLCB0YWJsZW5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAodG9zICE9IElQVE9TX0xPV0RFTEFZCiAJICAgICYmIHRvcyAhPSBJUFRPU19USFJPVUdIUFVUCiAJICAgICYmIHRvcyAhPSBJUFRPU19SRUxJQUJJTElUWQpAQCAtNzksMTMgKzY5LDE0IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPUzogYmFkIHRvcyB2YWx1ZSAlI3hcbiIsIHRvcyk7CiAJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAxOwogfQogCiBzdGF0aWMgc3RydWN0IGlwdF90YXJnZXQgaXB0X3Rvc19yZWcgPSB7CiAJLm5hbWUJCT0gIlRPUyIsCiAJLnRhcmdldAkJPSB0YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF90b3NfdGFyZ2V0X2luZm8pLAorCS50YWJsZQkJPSAibWFuZ2xlIiwKIAkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVFRMLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jCmluZGV4IGI3NjllYjIuLjUwMDlhMDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVFRMLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYwpAQCAtMjAsOSArMjAsMTAgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCAKLWlwdF90dGxfdGFyZ2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCAKLQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgdW5zaWduZWQgaW50IGhvb2tudW0sIAotCQljb25zdCB2b2lkICp0YXJnaW5mbywgdm9pZCAqdXNlcmluZm8pCitpcHRfdHRsX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKKwkgICAgICAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sIHZvaWQgKnVzZXJpbmZvKQogewogCXN0cnVjdCBpcGhkciAqaXBoOwogCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSB0YXJnaW5mbzsKQEAgLTY3LDQwICs2OCwyOCBAQAogCiBzdGF0aWMgaW50IGlwdF90dGxfY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJCWNvbnN0IHZvaWQgKmUsCisJCWNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkJdm9pZCAqdGFyZ2luZm8sCiAJCXVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAJCXVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHRhcmdpbmZvOwogCi0JaWYgKHRhcmdpbmZvc2l6ZSAhPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfVFRMX2luZm8pKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfVFRMOiB0YXJnaW5mb3NpemUgJXUgIT0gJVp1XG4iLAotCQkJCXRhcmdpbmZvc2l6ZSwKLQkJCQlJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfVFRMX2luZm8pKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzdHJjbXAodGFibGVuYW1lLCAibWFuZ2xlIikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXB0X1RUTDogY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gIgotCQkJIlwibWFuZ2xlXCIgdGFibGUsIG5vdCBcIiVzXCJcbiIsIHRhYmxlbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChpbmZvLT5tb2RlID4gSVBUX1RUTF9NQVhNT0RFKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwdF9UVEw6IGludmFsaWQgb3IgdW5rbm93biBNb2RlICV1XG4iLCAKIAkJCWluZm8tPm1vZGUpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlpZiAoKGluZm8tPm1vZGUgIT0gSVBUX1RUTF9TRVQpICYmIChpbmZvLT50dGwgPT0gMCkpCiAJCXJldHVybiAwOwotCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXB0X3RhcmdldCBpcHRfVFRMID0geyAKIAkubmFtZSAJCT0gIlRUTCIsCiAJLnRhcmdldCAJPSBpcHRfdHRsX3RhcmdldCwgCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9UVExfaW5mbyksCisJLnRhYmxlCQk9ICJtYW5nbGUiLAogCS5jaGVja2VudHJ5IAk9IGlwdF90dGxfY2hlY2tlbnRyeSwgCiAJLm1lIAkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCmluZGV4IDE4MGE5ZWEuLmE4MmEzMmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCkBAIC0zMDMsNiArMzAzLDcgQEAKIAkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJCSAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkJCSAgICBjb25zdCB2b2lkICp0YXJnaW5mbywgdm9pZCAqdXNlcmluZm8pCiB7CiAJc3RydWN0IGlwdF91bG9nX2luZm8gKmxvZ2luZm8gPSAoc3RydWN0IGlwdF91bG9nX2luZm8gKikgdGFyZ2luZm87CkBAIC0zMzksNDIgKzM0MCwzNyBAQAogCiBzdGF0aWMgaW50IGlwdF91bG9nX2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkJICAgICAgIGNvbnN0IHZvaWQgKmUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkJICAgICAgIHZvaWQgKnRhcmdpbmZvLAogCQkJICAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2ttYXNrKQogewogCXN0cnVjdCBpcHRfdWxvZ19pbmZvICpsb2dpbmZvID0gKHN0cnVjdCBpcHRfdWxvZ19pbmZvICopIHRhcmdpbmZvOwogCi0JaWYgKHRhcmdpbmZvc2l6ZSAhPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfdWxvZ19pbmZvKSkpIHsKLQkJREVCVUdQKCJpcHRfVUxPRzogdGFyZ2luZm9zaXplICV1ICE9IDBcbiIsIHRhcmdpbmZvc2l6ZSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChsb2dpbmZvLT5wcmVmaXhbc2l6ZW9mKGxvZ2luZm8tPnByZWZpeCkgLSAxXSAhPSAnXDAnKSB7CiAJCURFQlVHUCgiaXB0X1VMT0c6IHByZWZpeCB0ZXJtICVpXG4iLAogCQkgICAgICAgbG9naW5mby0+cHJlZml4W3NpemVvZihsb2dpbmZvLT5wcmVmaXgpIC0gMV0pOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlpZiAobG9naW5mby0+cXRocmVzaG9sZCA+IFVMT0dfTUFYX1FMRU4pIHsKIAkJREVCVUdQKCJpcHRfVUxPRzogcXVldWUgdGhyZXNob2xkICVpID4gTUFYX1FMRU5cbiIsCiAJCQlsb2dpbmZvLT5xdGhyZXNob2xkKTsKIAkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXB0X3RhcmdldCBpcHRfdWxvZ19yZWcgPSB7CiAJLm5hbWUJCT0gIlVMT0ciLAogCS50YXJnZXQJCT0gaXB0X3Vsb2dfdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfdWxvZ19pbmZvKSwKIAkuY2hlY2tlbnRyeQk9IGlwdF91bG9nX2NoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X3Vsb2dfbG9nZ2VyID0gewogCS5uYW1lCQk9ICJpcHRfVUxPRyIsCi0JLmxvZ2ZuCQk9ICZpcHRfbG9nZm4sCisJLmxvZ2ZuCQk9IGlwdF9sb2dmbiwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FkZHJ0eXBlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FkZHJ0eXBlLmMKaW5kZXggZDZiODNhOS4uNWZkZjg1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9hZGRydHlwZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWRkcnR5cGUuYwpAQCAtMjcsOCArMjcsOSBAQAogCXJldHVybiAhIShtYXNrICYgKDEgPDwgaW5ldF9hZGRyX3R5cGUoYWRkcikpKTsKIH0KIAotc3RhdGljIGludCBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LCBjb25zdCB2b2lkICptYXRjaGluZm8sCitzdGF0aWMgaW50IG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCBjb25zdCB2b2lkICptYXRjaGluZm8sCiAJCSBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgaW50ICpob3Rkcm9wKQogewogCWNvbnN0IHN0cnVjdCBpcHRfYWRkcnR5cGVfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKQEAgLTQzLDIzICs0NCwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsIGNvbnN0IHZvaWQgKmlwLAotCQkgICAgICB2b2lkICptYXRjaGluZm8sIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCi0JCSAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JaWYgKG1hdGNoc2l6ZSAhPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfYWRkcnR5cGVfaW5mbykpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXB0X2FkZHJ0eXBlOiBpbnZhbGlkIHNpemUgKCV1ICE9ICVadSlcbiIsCi0JCSAgICAgICBtYXRjaHNpemUsIElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9hZGRydHlwZV9pbmZvKSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggYWRkcnR5cGVfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gImFkZHJ0eXBlIiwKIAkubWF0Y2gJCT0gbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9hZGRydHlwZV9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWguYwppbmRleCAxNDRhZGZlLi4zNWEyMWZiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FoLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9haC5jCkBAIC0zOSw2ICszOSw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC03MSwzNyArNzIsMjcgQEAKIHN0YXRpYyBpbnQKIGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmlwX3ZvaWQsCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgICB2b2lkICptYXRjaGluZm8sCiAJICAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCiAJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgaXB0X2FoICphaGluZm8gPSBtYXRjaGluZm87Ci0JY29uc3Qgc3RydWN0IGlwdF9pcCAqaXAgPSBpcF92b2lkOwogCi0JLyogTXVzdCBzcGVjaWZ5IHByb3RvID09IEFILCBhbmQgbm8gdW5rbm93biBpbnZmbGFncyAqLwotCWlmIChpcC0+cHJvdG8gIT0gSVBQUk9UT19BSCB8fCAoaXAtPmludmZsYWdzICYgSVBUX0lOVl9QUk9UTykpIHsKLQkJZHVwcmludGYoImlwdF9haDogUHJvdG9jb2wgJXUgIT0gJXVcbiIsIGlwLT5wcm90bywKLQkJCSBJUFBST1RPX0FIKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChtYXRjaGluZm9zaXplICE9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9haCkpKSB7Ci0JCWR1cHJpbnRmKCJpcHRfYWg6IG1hdGNoc2l6ZSAldSAhPSAldVxuIiwKLQkJCSBtYXRjaGluZm9zaXplLCBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfYWgpKSk7Ci0JCXJldHVybiAwOwotCX0KKwkvKiBNdXN0IHNwZWNpZnkgbm8gdW5rbm93biBpbnZmbGFncyAqLwogCWlmIChhaGluZm8tPmludmZsYWdzICYgfklQVF9BSF9JTlZfTUFTSykgewotCQlkdXByaW50ZigiaXB0X2FoOiB1bmtub3duIGZsYWdzICVYXG4iLAotCQkJIGFoaW5mby0+aW52ZmxhZ3MpOworCQlkdXByaW50ZigiaXB0X2FoOiB1bmtub3duIGZsYWdzICVYXG4iLCBhaGluZm8tPmludmZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIGFoX21hdGNoID0gewogCS5uYW1lCQk9ICJhaCIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfYWgpLAorCS5wcm90bwkJPSBJUFBST1RPX0FILAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2RzY3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZHNjcC5jCmluZGV4IDkyMDYzYjQuLjExOTYzYzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZHNjcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZHNjcC5jCkBAIC0xOSw4ICsxOSw5IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oImlwdGFibGVzIERTQ1AgbWF0Y2hpbmcgbW9kdWxlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAorc3RhdGljIGludCBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogCQkgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHByb3RvZmYsIGludCAqaG90ZHJvcCkKIHsKIAljb25zdCBzdHJ1Y3QgaXB0X2RzY3BfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKQEAgLTMxLDIwICszMiwxMCBAQAogCXJldHVybiAoKGlwaC0+dG9zJklQVF9EU0NQX01BU0spID09IHNoX2RzY3ApIF4gaW5mby0+aW52ZXJ0OwogfQogCi1zdGF0aWMgaW50IGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLCBjb25zdCB2b2lkICppcCwKLQkJICAgICAgdm9pZCAqbWF0Y2hpbmZvLCB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQotewotCWlmIChtYXRjaHNpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X2RzY3BfaW5mbykpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgc3RydWN0IGlwdF9tYXRjaCBkc2NwX21hdGNoID0gewogCS5uYW1lCQk9ICJkc2NwIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9kc2NwX2luZm8pLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZWNuLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2Vjbi5jCmluZGV4IGU2OGIwYzcuLmQ3ZTI5ZjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZWNuLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9lY24uYwpAQCAtNjUsOCArNjUsOSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKK3N0YXRpYyBpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKIAkJIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBwcm90b2ZmLCBpbnQgKmhvdGRyb3ApCiB7CiAJY29uc3Qgc3RydWN0IGlwdF9lY25faW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKQEAgLTg2LDE1ICs4NywxMyBAQAogfQogCiBzdGF0aWMgaW50IGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLCBjb25zdCB2b2lkICppcF92b2lkLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCQkgICAgICB2b2lkICptYXRjaGluZm8sIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwdF9lY25faW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKIAljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCA9IGlwX3ZvaWQ7CiAKLQlpZiAobWF0Y2hzaXplICE9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9lY25faW5mbykpKQotCQlyZXR1cm4gMDsKLQogCWlmIChpbmZvLT5vcGVyYXRpb24gJiBJUFRfRUNOX09QX01BVENIX01BU0spCiAJCXJldHVybiAwOwogCkBAIC0xMTMsOCArMTEyLDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggZWNuX21hdGNoID0gewogCS5uYW1lCQk9ICJlY24iLAotCS5tYXRjaAkJPSAmbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X2Vjbl9pbmZvKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9lc3AuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZXNwLmMKaW5kZXggOWRlMTkxYS4uYWYwZDVlYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9lc3AuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2VzcC5jCkBAIC00MCw2ICs0MCw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC03MiwzNyArNzMsMjcgQEAKIHN0YXRpYyBpbnQKIGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmlwX3ZvaWQsCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgICB2b2lkICptYXRjaGluZm8sCiAJICAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCiAJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgaXB0X2VzcCAqZXNwaW5mbyA9IG1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCA9IGlwX3ZvaWQ7CiAKLQkvKiBNdXN0IHNwZWNpZnkgcHJvdG8gPT0gRVNQLCBhbmQgbm8gdW5rbm93biBpbnZmbGFncyAqLwotCWlmIChpcC0+cHJvdG8gIT0gSVBQUk9UT19FU1AgfHwgKGlwLT5pbnZmbGFncyAmIElQVF9JTlZfUFJPVE8pKSB7Ci0JCWR1cHJpbnRmKCJpcHRfZXNwOiBQcm90b2NvbCAldSAhPSAldVxuIiwgaXAtPnByb3RvLAotCQkJIElQUFJPVE9fRVNQKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChtYXRjaGluZm9zaXplICE9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9lc3ApKSkgewotCQlkdXByaW50ZigiaXB0X2VzcDogbWF0Y2hzaXplICV1ICE9ICV1XG4iLAotCQkJIG1hdGNoaW5mb3NpemUsIElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9lc3ApKSk7Ci0JCXJldHVybiAwOwotCX0KKwkvKiBNdXN0IHNwZWNpZnkgbm8gdW5rbm93biBpbnZmbGFncyAqLwogCWlmIChlc3BpbmZvLT5pbnZmbGFncyAmIH5JUFRfRVNQX0lOVl9NQVNLKSB7Ci0JCWR1cHJpbnRmKCJpcHRfZXNwOiB1bmtub3duIGZsYWdzICVYXG4iLAotCQkJIGVzcGluZm8tPmludmZsYWdzKTsKKwkJZHVwcmludGYoImlwdF9lc3A6IHVua25vd24gZmxhZ3MgJVhcbiIsIGVzcGluZm8tPmludmZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIGVzcF9tYXRjaCA9IHsKIAkubmFtZQkJPSAiZXNwIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF9lc3ApLAorCS5wcm90bwkJPSBJUFBST1RPX0VTUCwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oYXNobGltaXQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMKaW5kZXggNGZlNDhjMS4uZGMxNTIxYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oYXNobGltaXQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jCkBAIC00MjcsNiArNDI3LDcgQEAKIGhhc2hsaW1pdF9tYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCWNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJCWNvbnN0IHZvaWQgKm1hdGNoaW5mbywKIAkJaW50IG9mZnNldCwKIAkJdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC01MDYsMTUgKzUwNywxMyBAQAogc3RhdGljIGludAogaGFzaGxpbWl0X2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkgICAgIGNvbnN0IHZvaWQgKmluZiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCQkgICAgIHZvaWQgKm1hdGNoaW5mbywKIAkJICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogCQkgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqciA9IG1hdGNoaW5mbzsKIAotCWlmIChtYXRjaHNpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvKSkpCi0JCXJldHVybiAwOwotCiAJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwogCWlmIChyLT5jZmcuYnVyc3QgPT0gMAogCSAgICB8fCB1c2VyMmNyZWRpdHMoci0+Y2ZnLmF2ZyAqIHItPmNmZy5idXJzdCkgPCAKQEAgLTU1OCwxOSArNTU3LDIxIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1oYXNobGltaXRfZGVzdHJveSh2b2lkICptYXRjaGluZm8sIHVuc2lnbmVkIGludCBtYXRjaHNpemUpCitoYXNobGltaXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCB2b2lkICptYXRjaGluZm8sCisJCSAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSkKIHsKIAlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvICpyID0gKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKikgbWF0Y2hpbmZvOwogCiAJaHRhYmxlX3B1dChyLT5oaW5mbyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIGlwdF9oYXNobGltaXQgPSB7IAotCS5uYW1lID0gImhhc2hsaW1pdCIsIAotCS5tYXRjaCA9IGhhc2hsaW1pdF9tYXRjaCwgCi0JLmNoZWNrZW50cnkgPSBoYXNobGltaXRfY2hlY2tlbnRyeSwgCi0JLmRlc3Ryb3kgPSBoYXNobGltaXRfZGVzdHJveSwKLQkubWUgPSBUSElTX01PRFVMRSAKK3N0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIGlwdF9oYXNobGltaXQgPSB7CisJLm5hbWUJCT0gImhhc2hsaW1pdCIsCisJLm1hdGNoCQk9IGhhc2hsaW1pdF9tYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8pLAorCS5jaGVja2VudHJ5CT0gaGFzaGxpbWl0X2NoZWNrZW50cnksCisJLmRlc3Ryb3kJPSBoYXNobGltaXRfZGVzdHJveSwKKwkubWUJCT0gVEhJU19NT0RVTEUKIH07CiAKIC8qIFBST0Mgc3R1ZmYgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaXByYW5nZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9pcHJhbmdlLmMKaW5kZXggMTNmYjE2Zi4uYWU3MDExMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9pcHJhbmdlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9pcHJhbmdlLmMKQEAgLTI3LDYgKzI3LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBwcm90b2ZmLCBpbnQgKmhvdGRyb3ApCiB7CkBAIC02MiwyNyArNjMsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBjaGVjayhjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0JCSBjb25zdCB2b2lkICppbmYsCi0JCSB2b2lkICptYXRjaGluZm8sCi0JCSB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotCQkgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQkvKiB2ZXJpZnkgc2l6ZSAqLwotCWlmIChtYXRjaHNpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X2lwcmFuZ2VfaW5mbykpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgc3RydWN0IGlwdF9tYXRjaCBpcHJhbmdlX21hdGNoID0gCi17IAotCS5saXN0ID0geyBOVUxMLCBOVUxMIH0sIAotCS5uYW1lID0gImlwcmFuZ2UiLCAKLQkubWF0Y2ggPSAmbWF0Y2gsIAotCS5jaGVja2VudHJ5ID0gJmNoZWNrLCAKLQkuZGVzdHJveSA9IE5VTEwsIAotCS5tZSA9IFRISVNfTU9EVUxFCitzdGF0aWMgc3RydWN0IGlwdF9tYXRjaCBpcHJhbmdlX21hdGNoID0geworCS5uYW1lCQk9ICJpcHJhbmdlIiwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X2lwcmFuZ2VfaW5mbyksCisJLmRlc3Ryb3kJPSBOVUxMLAorCS5tZQkJPSBUSElTX01PRFVMRQogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9tdWx0aXBvcnQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfbXVsdGlwb3J0LmMKaW5kZXggMmQ1MjMyNi4uYmQwN2Y3YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9tdWx0aXBvcnQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X211bHRpcG9ydC5jCkBAIC05NSw2ICs5NSw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC0xMjcsNiArMTI4LDcgQEAKIG1hdGNoX3YxKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogCSBpbnQgb2Zmc2V0LAogCSB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTE1Myw0MCArMTU1LDE5IEBACiAJcmV0dXJuIHBvcnRzX21hdGNoX3YxKG11bHRpaW5mbywgbnRvaHMocHB0clswXSksIG50b2hzKHBwdHJbMV0pKTsKIH0KIAotLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLwotc3RhdGljIGludAotY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0JICAgY29uc3Qgdm9pZCAqaXAsCi0JICAgdm9pZCAqbWF0Y2hpbmZvLAotCSAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCi0JICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQlyZXR1cm4gKG1hdGNoc2l6ZSA9PSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfbXVsdGlwb3J0KSkpOwotfQotCi1zdGF0aWMgaW50Ci1jaGVja2VudHJ5X3YxKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkgICAgICBjb25zdCB2b2lkICppcCwKLQkgICAgICB2b2lkICptYXRjaGluZm8sCi0JICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKLQkgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQotewotCXJldHVybiAobWF0Y2hzaXplID09IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9tdWx0aXBvcnRfdjEpKSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIG11bHRpcG9ydF9tYXRjaCA9IHsKIAkubmFtZQkJPSAibXVsdGlwb3J0IiwKIAkucmV2aXNpb24JPSAwLAotCS5tYXRjaAkJPSAmbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXB0X211bHRpcG9ydCksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggbXVsdGlwb3J0X21hdGNoX3YxID0gewogCS5uYW1lCQk9ICJtdWx0aXBvcnQiLAogCS5yZXZpc2lvbgk9IDEsCi0JLm1hdGNoCQk9ICZtYXRjaF92MSwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5X3YxLAorCS5tYXRjaAkJPSBtYXRjaF92MSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfbXVsdGlwb3J0X3YxKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X293bmVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X293bmVyLmMKaW5kZXggNDg0M2QwYy4uMzkwMDQyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9vd25lci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfb3duZXIuYwpAQCAtMjUsNiArMjUsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtNTMsMzcgKzU0LDI3IEBACiBzdGF0aWMgaW50CiBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKICAgICAgICAgICAgY29uc3Qgdm9pZCAqaXAsCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgICAgICAgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewogCWNvbnN0IHN0cnVjdCBpcHRfb3duZXJfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKIAotICAgICAgICBpZiAoaG9va19tYXNrCi0gICAgICAgICAgICAmIH4oKDEgPDwgTkZfSVBfTE9DQUxfT1VUKSB8ICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORykpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJpcHRfb3duZXI6IG9ubHkgdmFsaWQgZm9yIExPQ0FMX09VVCBvciBQT1NUX1JPVVRJTkcuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0JaWYgKG1hdGNoc2l6ZSAhPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfb3duZXJfaW5mbykpKSB7Ci0JCXByaW50aygiTWF0Y2hzaXplICV1ICE9ICVadVxuIiwgbWF0Y2hzaXplLAotCQkgICAgICAgSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X293bmVyX2luZm8pKSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChpbmZvLT5tYXRjaCAmIChJUFRfT1dORVJfUElEfElQVF9PV05FUl9TSUR8SVBUX09XTkVSX0NPTU0pKSB7CiAJCXByaW50aygiaXB0X293bmVyOiBwaWQsIHNpZCBhbmQgY29tbWFuZCBtYXRjaGluZyAiCiAJCSAgICAgICAibm90IHN1cHBvcnRlZCBhbnltb3JlXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIG93bmVyX21hdGNoID0gewogCS5uYW1lCQk9ICJvd25lciIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfb3duZXJfaW5mbyksCisJLmhvb2tzCQk9ICgxIDw8IE5GX0lQX0xPQ0FMX09VVCkgfCAoMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcpLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3BvbGljeS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9wb2xpY3kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3YTI2NS4uMDAwMDAwMAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3BvbGljeS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIElQc2VjIHBvbGljeQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA1IFBhdHJpY2sgTWNIYXJkeSwgPGthYmVyQHRyYXNoLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bmV0L3hmcm0uaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BvbGljeS5oPgotCi1NT0RVTEVfQVVUSE9SKCJQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSVB0YWJsZXMgSVBzZWMgcG9saWN5IG1hdGNoaW5nIG1vZHVsZSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1tYXRjaF94ZnJtX3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3QgaXB0X3BvbGljeV9lbGVtICplKQotewotI2RlZmluZSBNQVRDSF9BRERSKHgseSx6KQkoIWUtPm1hdGNoLnggfHwJCQkJICAgICBcCi0JCSAgICAgICAgICAgICAgICAgKChlLT54LmE0LnNfYWRkciA9PSAoZS0+eS5hNC5zX2FkZHIgJiAoeikpKSBcCi0JCQkJICBeIGUtPmludmVydC54KSkKLSNkZWZpbmUgTUFUQ0goeCx5KQkJKCFlLT5tYXRjaC54IHx8ICgoZS0+eCA9PSAoeSkpIF4gZS0+aW52ZXJ0LngpKQotCi0JcmV0dXJuIE1BVENIX0FERFIoc2FkZHIsIHNtYXNrLCB4LT5wcm9wcy5zYWRkci5hNCkgJiYKLQkgICAgICAgTUFUQ0hfQUREUihkYWRkciwgZG1hc2ssIHgtPmlkLmRhZGRyLmE0KSAmJgotCSAgICAgICBNQVRDSChwcm90bywgeC0+aWQucHJvdG8pICYmCi0JICAgICAgIE1BVENIKG1vZGUsIHgtPnByb3BzLm1vZGUpICYmCi0JICAgICAgIE1BVENIKHNwaSwgeC0+aWQuc3BpKSAmJgotCSAgICAgICBNQVRDSChyZXFpZCwgeC0+cHJvcHMucmVxaWQpOwotfQotCi1zdGF0aWMgaW50Ci1tYXRjaF9wb2xpY3lfaW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdF9wb2xpY3lfaW5mbyAqaW5mbykKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X3BvbGljeV9lbGVtICplOwotCXN0cnVjdCBzZWNfcGF0aCAqc3AgPSBza2ItPnNwOwotCWludCBzdHJpY3QgPSBpbmZvLT5mbGFncyAmIElQVF9QT0xJQ1lfTUFUQ0hfU1RSSUNUOwotCWludCBpLCBwb3M7Ci0KLQlpZiAoc3AgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCWlmIChzdHJpY3QgJiYgaW5mby0+bGVuICE9IHNwLT5sZW4pCi0JCXJldHVybiAwOwotCi0JZm9yIChpID0gc3AtPmxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCXBvcyA9IHN0cmljdCA/IGkgLSBzcC0+bGVuICsgMSA6IDA7Ci0JCWlmIChwb3MgPj0gaW5mby0+bGVuKQotCQkJcmV0dXJuIDA7Ci0JCWUgPSAmaW5mby0+cG9sW3Bvc107Ci0KLQkJaWYgKG1hdGNoX3hmcm1fc3RhdGUoc3AtPnhbaV0ueHZlYywgZSkpIHsKLQkJCWlmICghc3RyaWN0KQotCQkJCXJldHVybiAxOwotCQl9IGVsc2UgaWYgKHN0cmljdCkKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiBzdHJpY3QgPyAxIDogMDsKLX0KLQotc3RhdGljIGludAotbWF0Y2hfcG9saWN5X291dChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXB0X3BvbGljeV9pbmZvICppbmZvKQotewotCWNvbnN0IHN0cnVjdCBpcHRfcG9saWN5X2VsZW0gKmU7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiLT5kc3Q7Ci0JaW50IHN0cmljdCA9IGluZm8tPmZsYWdzICYgSVBUX1BPTElDWV9NQVRDSF9TVFJJQ1Q7Ci0JaW50IGksIHBvczsKLQotCWlmIChkc3QtPnhmcm0gPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JZm9yIChpID0gMDsgZHN0ICYmIGRzdC0+eGZybTsgZHN0ID0gZHN0LT5jaGlsZCwgaSsrKSB7Ci0JCXBvcyA9IHN0cmljdCA/IGkgOiAwOwotCQlpZiAocG9zID49IGluZm8tPmxlbikKLQkJCXJldHVybiAwOwotCQllID0gJmluZm8tPnBvbFtwb3NdOwotCi0JCWlmIChtYXRjaF94ZnJtX3N0YXRlKGRzdC0+eGZybSwgZSkpIHsKLQkJCWlmICghc3RyaWN0KQotCQkJCXJldHVybiAxOwotCQl9IGVsc2UgaWYgKHN0cmljdCkKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiBzdHJpY3QgPyBpID09IGluZm8tPmxlbiA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCi0gICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotICAgICAgICAgICAgICAgICBpbnQgKmhvdGRyb3ApCi17Ci0JY29uc3Qgc3RydWN0IGlwdF9wb2xpY3lfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKLQlpbnQgcmV0OwotCi0JaWYgKGluZm8tPmZsYWdzICYgSVBUX1BPTElDWV9NQVRDSF9JTikKLQkJcmV0ID0gbWF0Y2hfcG9saWN5X2luKHNrYiwgaW5mbyk7Ci0JZWxzZQotCQlyZXQgPSBtYXRjaF9wb2xpY3lfb3V0KHNrYiwgaW5mbyk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJcmV0ID0gaW5mby0+ZmxhZ3MgJiBJUFRfUE9MSUNZX01BVENIX05PTkUgPyAxIDogMDsKLQllbHNlIGlmIChpbmZvLT5mbGFncyAmIElQVF9QT0xJQ1lfTUFUQ0hfTk9ORSkKLQkJcmV0ID0gMDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsIGNvbnN0IHZvaWQgKmlwX3ZvaWQsCi0gICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbWF0Y2hpbmZvLCB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0Jc3RydWN0IGlwdF9wb2xpY3lfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKLQotCWlmIChtYXRjaHNpemUgIT0gSVBUX0FMSUdOKHNpemVvZigqaW5mbykpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXB0X3BvbGljeTogbWF0Y2hzaXplICV1ICE9ICV6dVxuIiwKLQkJICAgICAgIG1hdGNoc2l6ZSwgSVBUX0FMSUdOKHNpemVvZigqaW5mbykpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICghKGluZm8tPmZsYWdzICYgKElQVF9QT0xJQ1lfTUFUQ0hfSU58SVBUX1BPTElDWV9NQVRDSF9PVVQpKSkgewotCQlwcmludGsoS0VSTl9FUlIgImlwdF9wb2xpY3k6IG5laXRoZXIgaW5jb21pbmcgbm9yICIKLQkJICAgICAgICAgICAgICAgICJvdXRnb2luZyBwb2xpY3kgc2VsZWN0ZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGhvb2tfbWFzayAmICgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HIHwgMSA8PCBORl9JUF9MT0NBTF9JTikKLQkgICAgJiYgaW5mby0+ZmxhZ3MgJiBJUFRfUE9MSUNZX01BVENIX09VVCkgewotCQlwcmludGsoS0VSTl9FUlIgImlwdF9wb2xpY3k6IG91dHB1dCBwb2xpY3kgbm90IHZhbGlkIGluICIKLQkJICAgICAgICAgICAgICAgICJQUkVfUk9VVElORyBhbmQgSU5QVVRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGhvb2tfbWFzayAmICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORyB8IDEgPDwgTkZfSVBfTE9DQUxfT1VUKQotCSAgICAmJiBpbmZvLT5mbGFncyAmIElQVF9QT0xJQ1lfTUFUQ0hfSU4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJpcHRfcG9saWN5OiBpbnB1dCBwb2xpY3kgbm90IHZhbGlkIGluICIKLQkJICAgICAgICAgICAgICAgICJQT1NUX1JPVVRJTkcgYW5kIE9VVFBVVFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoaW5mby0+bGVuID4gSVBUX1BPTElDWV9NQVhfRUxFTSkgewotCQlwcmludGsoS0VSTl9FUlIgImlwdF9wb2xpY3k6IHRvbyBtYW55IHBvbGljeSBlbGVtZW50c1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgc3RydWN0IGlwdF9tYXRjaCBwb2xpY3lfbWF0Y2ggPSB7Ci0JLm5hbWUJCT0gInBvbGljeSIsCi0JLm1hdGNoCQk9IG1hdGNoLAotCS5jaGVja2VudHJ5IAk9IGNoZWNrZW50cnksCi0JLm1lCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQotewotCXJldHVybiBpcHRfcmVnaXN0ZXJfbWF0Y2goJnBvbGljeV9tYXRjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCi17Ci0JaXB0X3VucmVnaXN0ZXJfbWF0Y2goJnBvbGljeV9tYXRjaCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXQpOwotbW9kdWxlX2V4aXQoZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYwppbmRleCA0NDYxMWQ2Li4wNjc5MmVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtMzE4LDcgKzMxOSw3IEBACiAJc2tiLT5uaC5pcGgtPmRhZGRyID0gMDsKIAkvKiBDbGVhciB0dGwgc2luY2Ugd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpdCAqLwogCXNrYi0+bmguaXBoLT50dGwgPSAwOwotCW1hdGNoKHNrYixOVUxMLE5VTEwsaW5mbywwLDAsTlVMTCk7CisJbWF0Y2goc2tiLE5VTEwsTlVMTCxOVUxMLGluZm8sMCwwLE5VTEwpOwogCiAJa2ZyZWUoc2tiLT5uaC5pcGgpOwogb3V0X2ZyZWVfc2tiOgpAQCAtMzU2LDYgKzM1Nyw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC02NTcsNiArNjU5LDcgQEAKIHN0YXRpYyBpbnQKIGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogICAgICAgICAgICBjb25zdCB2b2lkICppcCwKKwkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgICAgICB2b2lkICptYXRjaGluZm8sCiAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCiAgICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCkBAIC02NzAsOCArNjczLDYgQEAKIAlpZihkZWJ1ZykgcHJpbnRrKEtFUk5fSU5GTyBSRUNFTlRfTkFNRSAiOiBjaGVja2VudHJ5KCkgZW50ZXJlZC5cbiIpOwogI2VuZGlmCiAKLQlpZiAobWF0Y2hzaXplICE9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9yZWNlbnRfaW5mbykpKSByZXR1cm4gMDsKLQogCS8qIHNlY29uZHMgYW5kIGhpdF9jb3VudCBvbmx5IHZhbGlkIGZvciBDSEVDSy9VUERBVEUgKi8KIAlpZihpbmZvLT5jaGVja19zZXQgJiBJUFRfUkVDRU5UX1NFVCkgeyBmbGFnKys7IGlmKGluZm8tPnNlY29uZHMgfHwgaW5mby0+aGl0X2NvdW50KSByZXR1cm4gMDsgfQogCWlmKGluZm8tPmNoZWNrX3NldCAmIElQVF9SRUNFTlRfUkVNT1ZFKSB7IGZsYWcrKzsgaWYoaW5mby0+c2Vjb25kcyB8fCBpbmZvLT5oaXRfY291bnQpIHJldHVybiAwOyB9CkBAIC04NzEsNyArODcyLDcgQEAKICAqIHVwIGl0cyBtZW1vcnkuCiAgKi8KIHN0YXRpYyB2b2lkCi1kZXN0cm95KHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSkKK2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLCB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplKQogewogCWNvbnN0IHN0cnVjdCBpcHRfcmVjZW50X2luZm8gKmluZm8gPSBtYXRjaGluZm87CiAJc3RydWN0IHJlY2VudF9pcF90YWJsZXMgKmN1cnJfdGFibGUsICpsYXN0X3RhYmxlOwpAQCAtOTUxLDEyICs5NTIsMTMgQEAKIC8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3ZSBwYXNzIHRvIGlwdF9yZWdpc3RlciB0byByZWdpc3RlciBvdXIKICAqIG1vZHVsZSB3aXRoIGlwdGFibGVzLgogICovCi1zdGF0aWMgc3RydWN0IGlwdF9tYXRjaCByZWNlbnRfbWF0Y2ggPSB7IAotICAubmFtZSA9ICJyZWNlbnQiLCAKLSAgLm1hdGNoID0gJm1hdGNoLCAKLSAgLmNoZWNrZW50cnkgPSAmY2hlY2tlbnRyeSwgCi0gIC5kZXN0cm95ID0gJmRlc3Ryb3ksIAotICAubWUgPSBUSElTX01PRFVMRQorc3RhdGljIHN0cnVjdCBpcHRfbWF0Y2ggcmVjZW50X21hdGNoID0geworCS5uYW1lCQk9ICJyZWNlbnQiLAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfcmVjZW50X2luZm8pLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkuZGVzdHJveQk9IGRlc3Ryb3ksCisJLm1lCQk9IFRISVNfTU9EVUxFCiB9OwogCiAvKiBLZXJuZWwgbW9kdWxlIGluaXRpYWxpemF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90b3MuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdG9zLmMKaW5kZXggOWFiNzY1ZS4uZTQwNGU5MmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdG9zLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90b3MuYwpAQCAtMjEsNiArMjEsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtMzEsMjMgKzMyLDEwIEBACiAJcmV0dXJuIChza2ItPm5oLmlwaC0+dG9zID09IGluZm8tPnRvcykgXiBpbmZvLT5pbnZlcnQ7CiB9CiAKLXN0YXRpYyBpbnQKLWNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAotICAgICAgICAgICBjb25zdCB2b2lkICppcCwKLSAgICAgICAgICAgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQotewotCWlmIChtYXRjaHNpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3Rvc19pbmZvKSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIHRvc19tYXRjaCA9IHsKIAkubmFtZQkJPSAidG9zIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF90b3NfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90dGwuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMKaW5kZXggODJkYTUzZi4uYWU3Y2U0ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF90dGwuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3R0bC5jCkBAIC0xOSw4ICsxOSw5IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIklQIHRhYmxlcyBUVEwgbWF0Y2hpbmcgbW9kdWxlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAorc3RhdGljIGludCBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogCQkgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHByb3RvZmYsIGludCAqaG90ZHJvcCkKIHsKIAljb25zdCBzdHJ1Y3QgaXB0X3R0bF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwpAQCAtNDcsMjAgKzQ4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsIGNvbnN0IHZvaWQgICppcCwKLQkJICAgICAgdm9pZCAqbWF0Y2hpbmZvLCB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQotewotCWlmIChtYXRjaHNpemUgIT0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3R0bF9pbmZvKSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIHR0bF9tYXRjaCA9IHsKIAkubmFtZQkJPSAidHRsIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF90dGxfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggNmM4NjI0YS4uYzhhYmM5ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xNDEsMTkgKzE0MSwyMSBAQAogewogCXN0cnVjdCBuZl9jb25uICpjdDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwOwogCiAJLyogVGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBoZWxwZXI6IGFzIHRoZSBwYWNrZXQgZ29lcyBvdXQuICovCiAJY3QgPSBuZl9jdF9nZXQoKnBza2IsICZjdGluZm8pOwotCWlmIChjdCAmJiBjdC0+aGVscGVyKSB7Ci0JCXVuc2lnbmVkIGludCByZXQ7Ci0JCXJldCA9IGN0LT5oZWxwZXItPmhlbHAocHNrYiwKLQkJCQkgICAgICAgKCpwc2tiKS0+bmgucmF3IC0gKCpwc2tiKS0+ZGF0YQotCQkJCQkJICAgICAgICsgKCpwc2tiKS0+bmguaXBoLT5paGwqNCwKLQkJCQkgICAgICAgY3QsIGN0aW5mbyk7Ci0JCWlmIChyZXQgIT0gTkZfQUNDRVBUKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIE5GX0FDQ0VQVDsKKwlpZiAoIWN0KQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJaGVscCA9IG5mY3RfaGVscChjdCk7CisJaWYgKCFoZWxwIHx8ICFoZWxwLT5oZWxwZXIpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwlyZXR1cm4gaGVscC0+aGVscGVyLT5oZWxwKHBza2IsCisJCQkgICAgICAgKCpwc2tiKS0+bmgucmF3IC0gKCpwc2tiKS0+ZGF0YQorCQkJCQkgICAgICAgKyAoKnBza2IpLT5uaC5pcGgtPmlobCo0LAorCQkJICAgICAgIGN0LCBjdGluZm8pOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfY29ubnRyYWNrX2RlZnJhZyh1bnNpZ25lZCBpbnQgaG9va251bSwKQEAgLTU2Niw2ICs1NjgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK01PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGYyOWExMmQuLmZjMjU2MjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC02NjAsMTIgKzY2MCw5IEBACiBvdXQ6CXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcmF3X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCAKK3N0YXRpYyBpbnQgZG9fcmF3X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewotCWlmIChsZXZlbCAhPSBTT0xfUkFXKQotCQlyZXR1cm4gaXBfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLQogCWlmIChvcHRuYW1lID09IElDTVBfRklMVEVSKSB7CiAJCWlmIChpbmV0X3NrKHNrKS0+bnVtICE9IElQUFJPVE9fSUNNUCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTY3NSwxMiArNjcyLDI3IEBACiAJcmV0dXJuIC1FTk9QUk9UT09QVDsKIH0KIAotc3RhdGljIGludCByYXdfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIAotCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCitzdGF0aWMgaW50IHJhd19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlpZiAobGV2ZWwgIT0gU09MX1JBVykKLQkJcmV0dXJuIGlwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJCXJldHVybiBpcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBkb19yYXdfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3Jhd19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQkgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlpZiAobGV2ZWwgIT0gU09MX1JBVykKKwkJcmV0dXJuIGNvbXBhdF9pcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBkb19yYXdfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGRvX3Jhd19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQorewogCWlmIChvcHRuYW1lID09IElDTVBfRklMVEVSKSB7CiAJCWlmIChpbmV0X3NrKHNrKS0+bnVtICE9IElQUFJPVE9fSUNNUCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTY5MCw2ICs3MDIsMjQgQEAKIAlyZXR1cm4gLUVOT1BST1RPT1BUOwogfQogCitzdGF0aWMgaW50IHJhd19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCWlmIChsZXZlbCAhPSBTT0xfUkFXKQorCQlyZXR1cm4gaXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gZG9fcmF3X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGNvbXBhdF9yYXdfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpZiAobGV2ZWwgIT0gU09MX1JBVykKKwkJcmV0dXJuIGNvbXBhdF9pcF9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBkb19yYXdfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHJhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN3aXRjaCAoY21kKSB7CkBAIC03MTksMjIgKzc0OSwyNiBAQAogfQogCiBzdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7Ci0JLm5hbWUgPQkJIlJBVyIsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmNsb3NlID0JcmF3X2Nsb3NlLAotCS5jb25uZWN0ID0JaXA0X2RhdGFncmFtX2Nvbm5lY3QsCi0JLmRpc2Nvbm5lY3QgPQl1ZHBfZGlzY29ubmVjdCwKLQkuaW9jdGwgPQlyYXdfaW9jdGwsCi0JLmluaXQgPQkJcmF3X2luaXQsCi0JLnNldHNvY2tvcHQgPQlyYXdfc2V0c29ja29wdCwKLQkuZ2V0c29ja29wdCA9CXJhd19nZXRzb2Nrb3B0LAotCS5zZW5kbXNnID0JcmF3X3NlbmRtc2csCi0JLnJlY3Ztc2cgPQlyYXdfcmVjdm1zZywKLQkuYmluZCA9CQlyYXdfYmluZCwKLQkuYmFja2xvZ19yY3YgPQlyYXdfcmN2X3NrYiwKLQkuaGFzaCA9CQlyYXdfdjRfaGFzaCwKLQkudW5oYXNoID0JcmF3X3Y0X3VuaGFzaCwKLQkub2JqX3NpemUgPQlzaXplb2Yoc3RydWN0IHJhd19zb2NrKSwKKwkubmFtZQkJICAgPSAiUkFXIiwKKwkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCisJLmNsb3NlCQkgICA9IHJhd19jbG9zZSwKKwkuY29ubmVjdAkgICA9IGlwNF9kYXRhZ3JhbV9jb25uZWN0LAorCS5kaXNjb25uZWN0CSAgID0gdWRwX2Rpc2Nvbm5lY3QsCisJLmlvY3RsCQkgICA9IHJhd19pb2N0bCwKKwkuaW5pdAkJICAgPSByYXdfaW5pdCwKKwkuc2V0c29ja29wdAkgICA9IHJhd19zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0CSAgID0gcmF3X2dldHNvY2tvcHQsCisJLnNlbmRtc2cJICAgPSByYXdfc2VuZG1zZywKKwkucmVjdm1zZwkgICA9IHJhd19yZWN2bXNnLAorCS5iaW5kCQkgICA9IHJhd19iaW5kLAorCS5iYWNrbG9nX3JjdgkgICA9IHJhd19yY3Zfc2tiLAorCS5oYXNoCQkgICA9IHJhd192NF9oYXNoLAorCS51bmhhc2gJCSAgID0gcmF3X3Y0X3VuaGFzaCwKKwkub2JqX3NpemUJICAgPSBzaXplb2Yoc3RydWN0IHJhd19zb2NrKSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd19zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9yYXdfZ2V0c29ja29wdCwKKyNlbmRpZgogfTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCBkODJjMjQyLi45NGZjYmM1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTU1LDYgKzU1LDggQEAKICAqCVJvYmVydCBPbHNzb24JCToJQWRkZWQgcnRfY2FjaGUgc3RhdGlzdGljcwogICoJQXJuYWxkbyBDLiBNZWxvCQk6CUNvbnZlcnQgcHJvYyBzdHVmZiB0byBzZXFfZmlsZQogICoJRXJpYyBEdW1hemV0CQk6CWhhc2hlZCBzcGlubG9ja3MgYW5kIHJ0X2NoZWNrX2V4cGlyZSgpIGZpeGVzLgorICogCUlsaWEgU290bmlrb3YJCToJSWdub3JlIFRPUyBvbiBQTVRVRCBhbmQgUmVkaXJlY3QKKyAqIAlJbGlhIFNvdG5pa292CQk6CVJlbW92ZWQgVE9TIGZyb20gaGFzaCBjYWxjdWxhdGlvbnMKICAqCiAgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yNDcsOSArMjQ5LDkgQEAKIHN0YXRpYyBpbnQgcnRfaW50ZXJuX2hhc2godW5zaWduZWQgaGFzaCwgc3RydWN0IHJ0YWJsZSAqcnRoLAogCQkJCXN0cnVjdCBydGFibGUgKipyZXMpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJ0X2hhc2hfY29kZSh1MzIgZGFkZHIsIHUzMiBzYWRkciwgdTggdG9zKQorc3RhdGljIHVuc2lnbmVkIGludCBydF9oYXNoX2NvZGUodTMyIGRhZGRyLCB1MzIgc2FkZHIpCiB7Ci0JcmV0dXJuIChqaGFzaF8zd29yZHMoZGFkZHIsIHNhZGRyLCAodTMyKSB0b3MsIHJ0X2hhc2hfcm5kKQorCXJldHVybiAoamhhc2hfMndvcmRzKGRhZGRyLCBzYWRkciwgcnRfaGFzaF9ybmQpCiAJCSYgcnRfaGFzaF9tYXNrKTsKIH0KIApAQCAtODM1LDcgKzgzNyw3IEBACiAJCQkJCWludCByOwogCiAJCQkJCXJ0aHAgPSBydF9yZW1vdmVfYmFsYW5jZWRfcm91dGUoCi0JCQkJCQkmcnRfaGFzaF90YWJsZVtpXS5jaGFpbiwKKwkJCQkJCSZydF9oYXNoX3RhYmxlW2tdLmNoYWluLAogCQkJCQkJcnRoLAogCQkJCQkJJnIpOwogCQkJCQlnb2FsIC09IHI7CkBAIC0xMTExLDcgKzExMTMsNyBAQAogfQogCiB2b2lkIGlwX3J0X3JlZGlyZWN0KHUzMiBvbGRfZ3csIHUzMiBkYWRkciwgdTMyIG5ld19ndywKLQkJICAgIHUzMiBzYWRkciwgdTggdG9zLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorCQkgICAgdTMyIHNhZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpLCBrOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQoZGV2KTsKQEAgLTExMTksOCArMTEyMSw2IEBACiAJdTMyICBza2V5c1syXSA9IHsgc2FkZHIsIDAgfTsKIAlpbnQgIGlrZXlzWzJdID0geyBkZXYtPmlmaW5kZXgsIDAgfTsKIAotCXRvcyAmPSBJUFRPU19SVF9NQVNLOwotCiAJaWYgKCFpbl9kZXYpCiAJCXJldHVybjsKIApAQCAtMTE0MSw4ICsxMTQxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWZvciAoayA9IDA7IGsgPCAyOyBrKyspIHsKIAkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoX2NvZGUoZGFkZHIsCi0JCQkJCQkgICAgIHNrZXlzW2ldIF4gKGlrZXlzW2tdIDw8IDUpLAotCQkJCQkJICAgICB0b3MpOworCQkJCQkJICAgICBza2V5c1tpXSBeIChpa2V5c1trXSA8PCA1KSk7CiAKIAkJCXJ0aHA9JnJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW47CiAKQEAgLTExNTIsNyArMTE1MSw2IEBACiAKIAkJCQlpZiAocnRoLT5mbC5mbDRfZHN0ICE9IGRhZGRyIHx8CiAJCQkJICAgIHJ0aC0+ZmwuZmw0X3NyYyAhPSBza2V5c1tpXSB8fAotCQkJCSAgICBydGgtPmZsLmZsNF90b3MgIT0gdG9zIHx8CiAJCQkJICAgIHJ0aC0+Zmwub2lmICE9IGlrZXlzW2tdIHx8CiAJCQkJICAgIHJ0aC0+ZmwuaWlmICE9IDApIHsKIAkJCQkJcnRocCA9ICZydGgtPnUucnRfbmV4dDsKQEAgLTEyMzIsMTAgKzEyMzAsOSBAQAogCWlmIChJTl9ERVZfTE9HX01BUlRJQU5TKGluX2RldikgJiYgbmV0X3JhdGVsaW1pdCgpKQogCQlwcmludGsoS0VSTl9JTkZPICJSZWRpcmVjdCBmcm9tICV1LiV1LiV1LiV1IG9uICVzIGFib3V0ICIKIAkJCSIldS4ldS4ldS4ldSBpZ25vcmVkLlxuIgotCQkJIiAgQWR2aXNlZCBwYXRoID0gJXUuJXUuJXUuJXUgLT4gJXUuJXUuJXUuJXUsICIKLQkJCSJ0b3MgJTAyeFxuIiwKKwkJCSIgIEFkdmlzZWQgcGF0aCA9ICV1LiV1LiV1LiV1IC0+ICV1LiV1LiV1LiV1XG4iLAogCQkgICAgICAgTklQUVVBRChvbGRfZ3cpLCBkZXYtPm5hbWUsIE5JUFFVQUQobmV3X2d3KSwKLQkJICAgICAgIE5JUFFVQUQoc2FkZHIpLCBOSVBRVUFEKGRhZGRyKSwgdG9zKTsKKwkJICAgICAgIE5JUFFVQUQoc2FkZHIpLCBOSVBRVUFEKGRhZGRyKSk7CiAjZW5kaWYKIAlpbl9kZXZfcHV0KGluX2Rldik7CiB9CkBAIC0xMjUzLDggKzEyNTAsNyBAQAogCQkJICAgcnQtPnUuZHN0LmV4cGlyZXMpIHsKIAkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoX2NvZGUocnQtPmZsLmZsNF9kc3QsCiAJCQkJCQkgICAgIHJ0LT5mbC5mbDRfc3JjIF4KLQkJCQkJCQkocnQtPmZsLm9pZiA8PCA1KSwKLQkJCQkJCSAgICAgcnQtPmZsLmZsNF90b3MpOworCQkJCQkJCShydC0+Zmwub2lmIDw8IDUpKTsKICNpZiBSVF9DQUNIRV9ERUJVRyA+PSAxCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiaXBfcnRfYWR2aWNlOiByZWRpcmVjdCB0byAiCiAJCQkJCSAgIiV1LiV1LiV1LiV1LyUwMnggZHJvcHBlZFxuIiwKQEAgLTEzOTEsMTQgKzEzODcsMTMgQEAKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CiAJdTMyICBza2V5c1syXSA9IHsgaXBoLT5zYWRkciwgMCwgfTsKIAl1MzIgIGRhZGRyID0gaXBoLT5kYWRkcjsKLQl1OCAgIHRvcyA9IGlwaC0+dG9zICYgSVBUT1NfUlRfTUFTSzsKIAl1bnNpZ25lZCBzaG9ydCBlc3RfbXR1ID0gMDsKIAogCWlmIChpcHY0X2NvbmZpZy5ub19wbXR1X2Rpc2MpCiAJCXJldHVybiAwOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQl1bnNpZ25lZCBoYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBza2V5c1tpXSwgdG9zKTsKKwkJdW5zaWduZWQgaGFzaCA9IHJ0X2hhc2hfY29kZShkYWRkciwgc2tleXNbaV0pOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJZm9yIChydGggPSByY3VfZGVyZWZlcmVuY2UocnRfaGFzaF90YWJsZVtoYXNoXS5jaGFpbik7IHJ0aDsKQEAgLTE0MDcsNyArMTQwMiw2IEBACiAJCQkgICAgcnRoLT5mbC5mbDRfc3JjID09IHNrZXlzW2ldICYmCiAJCQkgICAgcnRoLT5ydF9kc3QgID09IGRhZGRyICYmCiAJCQkgICAgcnRoLT5ydF9zcmMgID09IGlwaC0+c2FkZHIgJiYKLQkJCSAgICBydGgtPmZsLmZsNF90b3MgPT0gdG9zICYmCiAJCQkgICAgcnRoLT5mbC5paWYgPT0gMCAmJgogCQkJICAgICEoZHN0X21ldHJpY19sb2NrZWQoJnJ0aC0+dS5kc3QsIFJUQVhfTVRVKSkpIHsKIAkJCQl1bnNpZ25lZCBzaG9ydCBtdHUgPSBuZXdfbXR1OwpAQCAtMTY1OCw3ICsxNjUyLDcgQEAKIAlSVF9DQUNIRV9TVEFUX0lOQyhpbl9zbG93X21jKTsKIAogCWluX2Rldl9wdXQoaW5fZGV2KTsKLQloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChkZXYtPmlmaW5kZXggPDwgNSksIHRvcyk7CisJaGFzaCA9IHJ0X2hhc2hfY29kZShkYWRkciwgc2FkZHIgXiAoZGV2LT5pZmluZGV4IDw8IDUpKTsKIAlyZXR1cm4gcnRfaW50ZXJuX2hhc2goaGFzaCwgcnRoLCAoc3RydWN0IHJ0YWJsZSoqKSAmc2tiLT5kc3QpOwogCiBlX25vYnVmczoKQEAgLTE4MjMsNyArMTgxNyw3IEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBwdXQgaXQgaW50byB0aGUgY2FjaGUgKi8KLQloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChmbC0+aWlmIDw8IDUpLCB0b3MpOworCWhhc2ggPSBydF9oYXNoX2NvZGUoZGFkZHIsIHNhZGRyIF4gKGZsLT5paWYgPDwgNSkpOwogCXJldHVybiBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIChzdHJ1Y3QgcnRhYmxlKiopJnNrYi0+ZHN0KTsJCiB9CiAKQEAgLTE4NjQsNyArMTg1OCw3IEBACiAJCQlyZXR1cm4gZXJyOwogCiAJCS8qIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSAqLwotCQloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChmbC0+aWlmIDw8IDUpLCB0b3MpOworCQloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChmbC0+aWlmIDw8IDUpKTsKIAkJZXJyID0gcnRfaW50ZXJuX2hhc2goaGFzaCwgcnRoLCAmcnRyZXMpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTIwNDEsNyArMjAzNSw3IEBACiAJCXJ0aC0+cnRfZmxhZ3MgCSY9IH5SVENGX0xPQ0FMOwogCX0KIAlydGgtPnJ0X3R5cGUJPSByZXMudHlwZTsKLQloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChmbC5paWYgPDwgNSksIHRvcyk7CisJaGFzaCA9IHJ0X2hhc2hfY29kZShkYWRkciwgc2FkZHIgXiAoZmwuaWlmIDw8IDUpKTsKIAllcnIgPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIChzdHJ1Y3QgcnRhYmxlKiopJnNrYi0+ZHN0KTsKIAlnb3RvIGRvbmU7CiAKQEAgLTIwODgsNyArMjA4Miw3IEBACiAJaW50IGlpZiA9IGRldi0+aWZpbmRleDsKIAogCXRvcyAmPSBJUFRPU19SVF9NQVNLOwotCWhhc2ggPSBydF9oYXNoX2NvZGUoZGFkZHIsIHNhZGRyIF4gKGlpZiA8PCA1KSwgdG9zKTsKKwloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChpaWYgPDwgNSkpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CkBAIC0yMjg2LDEwICsyMjgwLDggQEAKIAlpbnQgZXJyID0gX19ta3JvdXRlX291dHB1dCgmcnRoLCByZXMsIGZsLCBvbGRmbHAsIGRldl9vdXQsIGZsYWdzKTsKIAl1bnNpZ25lZCBoYXNoOwogCWlmIChlcnIgPT0gMCkgewotCQl1MzIgdG9zID0gUlRfRkxfVE9TKG9sZGZscCk7Ci0KIAkJaGFzaCA9IHJ0X2hhc2hfY29kZShvbGRmbHAtPmZsNF9kc3QsIAotCQkJCSAgICBvbGRmbHAtPmZsNF9zcmMgXiAob2xkZmxwLT5vaWYgPDwgNSksIHRvcyk7CisJCQkJICAgIG9sZGZscC0+Zmw0X3NyYyBeIChvbGRmbHAtPm9pZiA8PCA1KSk7CiAJCWVyciA9IHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgcnApOwogCX0KIAkKQEAgLTIzMDQsNyArMjI5Niw2IEBACiAJCQkJICAgIHVuc2lnbmVkIGZsYWdzKQogewogI2lmZGVmIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVECi0JdTMyIHRvcyA9IFJUX0ZMX1RPUyhvbGRmbHApOwogCXVuc2lnbmVkIGNoYXIgaG9wOwogCXVuc2lnbmVkIGhhc2g7CiAJaW50IGVyciA9IC1FSU5WQUw7CkBAIC0yMzM0LDcgKzIzMjUsNyBAQAogCiAJCQloYXNoID0gcnRfaGFzaF9jb2RlKG9sZGZscC0+Zmw0X2RzdCwgCiAJCQkJCSAgICBvbGRmbHAtPmZsNF9zcmMgXgotCQkJCQkgICAgKG9sZGZscC0+b2lmIDw8IDUpLCB0b3MpOworCQkJCQkgICAgKG9sZGZscC0+b2lmIDw8IDUpKTsKIAkJCWVyciA9IHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgcnApOwogCiAJCQkvKiBmb3J3YXJkIGhvcCBpbmZvcm1hdGlvbiB0byBtdWx0aXBhdGggaW1wbC4gKi8KQEAgLTI1NjMsNyArMjU1NCw3IEBACiAJdW5zaWduZWQgaGFzaDsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CiAKLQloYXNoID0gcnRfaGFzaF9jb2RlKGZscC0+Zmw0X2RzdCwgZmxwLT5mbDRfc3JjIF4gKGZscC0+b2lmIDw8IDUpLCBmbHAtPmZsNF90b3MpOworCWhhc2ggPSBydF9oYXNoX2NvZGUoZmxwLT5mbDRfZHN0LCBmbHAtPmZsNF9zcmMgXiAoZmxwLT5vaWYgPDwgNSkpOwogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwogCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IDE2OTg0ZDQuLjZiNmMzYWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC02NjQsNyArNjY0LDMwIEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAotCisJeworCQkuY3RsX25hbWUJPSBORVRfVENQX01UVV9QUk9CSU5HLAorCQkucHJvY25hbWUJPSAidGNwX210dV9wcm9iaW5nIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF90Y3BfbXR1X3Byb2JpbmcsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX1RDUF9CQVNFX01TUywKKwkJLnByb2NuYW1lCT0gInRjcF9iYXNlX21zcyIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdGNwX2Jhc2VfbXNzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKyAgICAgICAgeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9UQ1BfV09SS0FST1VORF9TSUdORURfV0lORE9XUywKKwkJLnByb2NuYW1lCT0gInRjcF93b3JrYXJvdW5kX3NpZ25lZF93aW5kb3dzIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF90Y3Bfd29ya2Fyb3VuZF9zaWduZWRfd2luZG93cywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCisJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAwMGFhODBlLi44N2Y2OGU3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMjU3LDYgKzI1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIAogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgpAQCAtMjc1LDkgKzI3Niw5IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9vcnBoYW5fY291bnQpOwogCi1pbnQgc3lzY3RsX3RjcF9tZW1bM107Ci1pbnQgc3lzY3RsX3RjcF93bWVtWzNdID0geyA0ICogMTAyNCwgMTYgKiAxMDI0LCAxMjggKiAxMDI0IH07Ci1pbnQgc3lzY3RsX3RjcF9ybWVtWzNdID0geyA0ICogMTAyNCwgODczODAsIDg3MzgwICogMiB9OworaW50IHN5c2N0bF90Y3BfbWVtWzNdIF9fcmVhZF9tb3N0bHk7CitpbnQgc3lzY3RsX3RjcF93bWVtWzNdIF9fcmVhZF9tb3N0bHk7CitpbnQgc3lzY3RsX3RjcF9ybWVtWzNdIF9fcmVhZF9tb3N0bHk7CiAKIEVYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF9tZW0pOwogRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX3JtZW0pOwpAQCAtMzY1LDcgKzM2Niw3IEBACiAJaWYgKHNrLT5za19zaHV0ZG93biA9PSBTSFVURE9XTl9NQVNLIHx8IHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0UpCiAJCW1hc2sgfD0gUE9MTEhVUDsKIAlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKQotCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STSB8IFBPTExSREhVUDsKIAogCS8qIENvbm5lY3RlZD8gKi8KIAlpZiAoKDEgPDwgc2stPnNrX3N0YXRlKSAmIH4oVENQRl9TWU5fU0VOVCB8IFRDUEZfU1lOX1JFQ1YpKSB7CkBAIC0xNjg3LDE4ICsxNjg4LDE0IEBACiAvKgogICoJU29ja2V0IG9wdGlvbiBjb2RlIGZvciBUQ1AuCiAgKi8KLWludCB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCi0JCSAgIGludCBvcHRsZW4pCitzdGF0aWMgaW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLAorCQlpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJaW50IHZhbDsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChsZXZlbCAhPSBTT0xfVENQKQotCQlyZXR1cm4gaWNzay0+aWNza19hZl9vcHMtPnNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAotCQkJCQkJICAgICBvcHR2YWwsIG9wdGxlbik7Ci0KIAkvKiBUaGlzIGlzIGEgc3RyaW5nIHZhbHVlIGFsbCB0aGUgb3RoZXJzIGFyZSBpbnQncyAqLwogCWlmIChvcHRuYW1lID09IFRDUF9DT05HRVNUSU9OKSB7CiAJCWNoYXIgbmFtZVtUQ1BfQ0FfTkFNRV9NQVhdOwpAQCAtMTg3MSw2ICsxODY4LDMwIEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJICAgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisKKwlpZiAobGV2ZWwgIT0gU09MX1RDUCkKKwkJcmV0dXJuIGljc2stPmljc2tfYWZfb3BzLT5zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwKKwkJCQkJCSAgICAgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBkb190Y3Bfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK2ludCBjb21wYXRfdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCWlmIChsZXZlbCAhPSBTT0xfVENQKQorCQlyZXR1cm4gaW5ldF9jc2tfY29tcGF0X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkJICBvcHR2YWwsIG9wdGxlbik7CisJcmV0dXJuIGRvX3RjcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworfQorCitFWFBPUlRfU1lNQk9MKGNvbXBhdF90Y3Bfc2V0c29ja29wdCk7CisjZW5kaWYKKwogLyogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHN0YXRlIG9mIHRjcCBlbmRwb2ludCBpbiBBUEkgZm9ybWF0LiAqLwogdm9pZCB0Y3BfZ2V0X2luZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2luZm8gKmluZm8pCiB7CkBAIC0xOTMxLDE3ICsxOTUyLDEzIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9nZXRfaW5mbyk7CiAKLWludCB0Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCi0JCSAgIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsCisJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWludCB2YWwsIGxlbjsKIAotCWlmIChsZXZlbCAhPSBTT0xfVENQKQotCQlyZXR1cm4gaWNzay0+aWNza19hZl9vcHMtPmdldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAotCQkJCQkJICAgICBvcHR2YWwsIG9wdGxlbik7Ci0KIAlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMjAyNSw2ICsyMDQyLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCB0Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCSAgIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisKKwlpZiAobGV2ZWwgIT0gU09MX1RDUCkKKwkJcmV0dXJuIGljc2stPmljc2tfYWZfb3BzLT5nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwKKwkJCQkJCSAgICAgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBkb190Y3BfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK2ludCBjb21wYXRfdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJaWYgKGxldmVsICE9IFNPTF9UQ1ApCisJCXJldHVybiBpbmV0X2Nza19jb21wYXRfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsCisJCQkJCQkgIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gZG9fdGNwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Cit9CisKK0VYUE9SVF9TWU1CT0woY29tcGF0X3RjcF9nZXRzb2Nrb3B0KTsKKyNlbmRpZgogCiBleHRlcm4gdm9pZCBfX3NrYl9jYl90b29fc21hbGxfZm9yX3RjcChpbnQsIGludCk7CiBleHRlcm4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfcmVubzsKQEAgLTIwNDIsNyArMjA4Miw4IEBACiB2b2lkIF9faW5pdCB0Y3BfaW5pdCh2b2lkKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotCWludCBvcmRlciwgaTsKKwl1bnNpZ25lZCBsb25nIGxpbWl0OworCWludCBvcmRlciwgaSwgbWF4X3NoYXJlOwogCiAJaWYgKHNpemVvZihzdHJ1Y3QgdGNwX3NrYl9jYikgPiBzaXplb2Yoc2tiLT5jYikpCiAJCV9fc2tiX2NiX3Rvb19zbWFsbF9mb3JfdGNwKHNpemVvZihzdHJ1Y3QgdGNwX3NrYl9jYiksCkBAIC0yMTE2LDEyICsyMTU3LDE2IEBACiAJc3lzY3RsX3RjcF9tZW1bMV0gPSAxMDI0IDw8IG9yZGVyOwogCXN5c2N0bF90Y3BfbWVtWzJdID0gMTUzNiA8PCBvcmRlcjsKIAotCWlmIChvcmRlciA8IDMpIHsKLQkJc3lzY3RsX3RjcF93bWVtWzJdID0gNjQgKiAxMDI0OwotCQlzeXNjdGxfdGNwX3JtZW1bMF0gPSBQQUdFX1NJWkU7Ci0JCXN5c2N0bF90Y3Bfcm1lbVsxXSA9IDQzNjg5OwotCQlzeXNjdGxfdGNwX3JtZW1bMl0gPSAyICogNDM2ODk7Ci0JfQorCWxpbWl0ID0gKCh1bnNpZ25lZCBsb25nKXN5c2N0bF90Y3BfbWVtWzFdKSA8PCAoUEFHRV9TSElGVCAtIDcpOworCW1heF9zaGFyZSA9IG1pbig0VUwqMTAyNCoxMDI0LCBsaW1pdCk7CisKKwlzeXNjdGxfdGNwX3dtZW1bMF0gPSBTS19TVFJFQU1fTUVNX1FVQU5UVU07CisJc3lzY3RsX3RjcF93bWVtWzFdID0gMTYqMTAyNDsKKwlzeXNjdGxfdGNwX3dtZW1bMl0gPSBtYXgoNjQqMTAyNCwgbWF4X3NoYXJlKTsKKworCXN5c2N0bF90Y3Bfcm1lbVswXSA9IFNLX1NUUkVBTV9NRU1fUVVBTlRVTTsKKwlzeXNjdGxfdGNwX3JtZW1bMV0gPSA4NzM4MDsKKwlzeXNjdGxfdGNwX3JtZW1bMl0gPSBtYXgoODczODAsIG1heF9zaGFyZSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUQ1A6IEhhc2ggdGFibGVzIGNvbmZpZ3VyZWQgIgogCSAgICAgICAiKGVzdGFibGlzaGVkICVkIGJpbmQgJWQpXG4iLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCmluZGV4IDYzY2Y3ZTUuLmUwZTlkMTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYworKysgYi9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCQkvKiBVcGRhdGUgQUlNRCBwYXJhbWV0ZXJzICovCiAJCWlmICh0cC0+c25kX2N3bmQgPiBoc3RjcF9haW1kX3ZhbHNbY2EtPmFpXS5jd25kKSB7CiAJCQl3aGlsZSAodHAtPnNuZF9jd25kID4gaHN0Y3BfYWltZF92YWxzW2NhLT5haV0uY3duZCAmJgotCQkJICAgICAgIGNhLT5haSA8IEhTVENQX0FJTURfTUFYKQorCQkJICAgICAgIGNhLT5haSA8IEhTVENQX0FJTURfTUFYIC0gMSkKIAkJCQljYS0+YWkrKzsKIAkJfSBlbHNlIGlmICh0cC0+c25kX2N3bmQgPCBoc3RjcF9haW1kX3ZhbHNbY2EtPmFpXS5jd25kKSB7CiAJCQl3aGlsZSAodHAtPnNuZF9jd25kID4gaHN0Y3BfYWltZF92YWxzW2NhLT5haV0uY3duZCAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2h0Y3AuYyBiL25ldC9pcHY0L3RjcF9odGNwLmMKaW5kZXggMTI4ZGU0ZC4uMWIyZmY1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2h0Y3AuYworKysgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCkBAIC0yNywxMiArMjcsMTIgQEAKIAl1MTYJYWxwaGE7CQkvKiBGaXhlZCBwb2ludCBhcml0aCwgPDwgNyAqLwogCXU4CWJldGE7ICAgICAgICAgICAvKiBGaXhlZCBwb2ludCBhcml0aCwgPDwgNyAqLwogCXU4CW1vZGVzd2l0Y2g7ICAgICAvKiBEZWxheSBtb2Rlc3dpdGNoIHVudGlsIHdlIGhhZCBhdCBsZWFzdCBvbmUgY29uZ2VzdGlvbiBldmVudCAqLwotCXU4CWNjb3VudDsJCS8qIE51bWJlciBvZiBSVFRzIHNpbmNlIGxhc3QgY29uZ2VzdGlvbiBldmVudCAqLwotCXU4CXVuZG9fY2NvdW50OwotCXUxNglwYWNrZXRjb3VudDsKKwl1MzIJbGFzdF9jb25nOwkvKiBUaW1lIHNpbmNlIGxhc3QgY29uZ2VzdGlvbiBldmVudCBlbmQgKi8KKwl1MzIJdW5kb19sYXN0X2Nvbmc7CisJdTE2CXBrdHNfYWNrZWQ7CisJdTMyCXBhY2tldGNvdW50OwogCXUzMgltaW5SVFQ7CiAJdTMyCW1heFJUVDsKLQl1MzIJc25kX2N3bmRfY250MjsKIAogCXUzMgl1bmRvX21heFJUVDsKIAl1MzIJdW5kb19vbGRfbWF4QjsKQEAgLTQ1LDIxICs0NSwzMCBAQAogCXUzMglsYXN0dGltZTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGh0Y3BfY29uZ190aW1lKHN0cnVjdCBodGNwICpjYSkKK3sKKwlyZXR1cm4gamlmZmllcyAtIGNhLT5sYXN0X2Nvbmc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGh0Y3BfY2NvdW50KHN0cnVjdCBodGNwICpjYSkKK3sKKwlyZXR1cm4gaHRjcF9jb25nX3RpbWUoY2EpL2NhLT5taW5SVFQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBodGNwX3Jlc2V0KHN0cnVjdCBodGNwICpjYSkKIHsKLQljYS0+dW5kb19jY291bnQgPSBjYS0+Y2NvdW50OworCWNhLT51bmRvX2xhc3RfY29uZyA9IGNhLT5sYXN0X2Nvbmc7CiAJY2EtPnVuZG9fbWF4UlRUID0gY2EtPm1heFJUVDsKIAljYS0+dW5kb19vbGRfbWF4QiA9IGNhLT5vbGRfbWF4QjsKIAotCWNhLT5jY291bnQgPSAwOwotCWNhLT5zbmRfY3duZF9jbnQyID0gMDsKKwljYS0+bGFzdF9jb25nID0gamlmZmllczsKIH0KIAogc3RhdGljIHUzMiBodGNwX2N3bmRfdW5kbyhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGh0Y3AgKmNhID0gaW5ldF9jc2tfY2Eoc2spOwotCWNhLT5jY291bnQgPSBjYS0+dW5kb19jY291bnQ7CisJY2EtPmxhc3RfY29uZyA9IGNhLT51bmRvX2xhc3RfY29uZzsKIAljYS0+bWF4UlRUID0gY2EtPnVuZG9fbWF4UlRUOwogCWNhLT5vbGRfbWF4QiA9IGNhLT51bmRvX29sZF9tYXhCOwogCXJldHVybiBtYXgodHAtPnNuZF9jd25kLCAodHAtPnNuZF9zc3RocmVzaDw8NykvY2EtPmJldGEpOwpAQCAtNzcsMTAgKzg2LDEwIEBACiAJCWNhLT5taW5SVFQgPSBzcnR0OwogCiAJLyogbWF4IFJUVCAqLwotCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9PcGVuICYmIHRwLT5zbmRfc3N0aHJlc2ggPCAweEZGRkYgJiYgY2EtPmNjb3VudCA+IDMpIHsKKwlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfT3BlbiAmJiB0cC0+c25kX3NzdGhyZXNoIDwgMHhGRkZGICYmIGh0Y3BfY2NvdW50KGNhKSA+IDMpIHsKIAkJaWYgKGNhLT5tYXhSVFQgPCBjYS0+bWluUlRUKQogCQkJY2EtPm1heFJUVCA9IGNhLT5taW5SVFQ7Ci0JCWlmIChjYS0+bWF4UlRUIDwgc3J0dCAmJiBzcnR0IDw9IGNhLT5tYXhSVFQrSFovNTApCisJCWlmIChjYS0+bWF4UlRUIDwgc3J0dCAmJiBzcnR0IDw9IGNhLT5tYXhSVFQrbXNlY3NfdG9famlmZmllcygyMCkpCiAJCQljYS0+bWF4UlRUID0gc3J0dDsKIAl9CiB9CkBAIC05Miw2ICsxMDEsMTIgQEAKIAlzdHJ1Y3QgaHRjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7CiAJdTMyIG5vdyA9IHRjcF90aW1lX3N0YW1wOwogCisJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX09wZW4pCisJCWNhLT5wa3RzX2Fja2VkID0gcGt0c19hY2tlZDsKKworCWlmICghdXNlX2JhbmR3aWR0aF9zd2l0Y2gpCisJCXJldHVybjsKKwogCS8qIGFjaGlldmVkIHRocm91Z2hwdXQgY2FsY3VsYXRpb25zICovCiAJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gJiYKIAkgICAgaWNzay0+aWNza19jYV9zdGF0ZSAhPSBUQ1BfQ0FfRGlzb3JkZXIpIHsKQEAgLTEwNiw3ICsxMjEsNyBAQAogCQkJJiYgbm93IC0gY2EtPmxhc3R0aW1lID49IGNhLT5taW5SVFQKIAkJCSYmIGNhLT5taW5SVFQgPiAwKSB7CiAJCV9fdTMyIGN1cl9CaSA9IGNhLT5wYWNrZXRjb3VudCpIWi8obm93IC0gY2EtPmxhc3R0aW1lKTsKLQkJaWYgKGNhLT5jY291bnQgPD0gMykgeworCQlpZiAoaHRjcF9jY291bnQoY2EpIDw9IDMpIHsKIAkJCS8qIGp1c3QgYWZ0ZXIgYmFja29mZiAqLwogCQkJY2EtPm1pbkIgPSBjYS0+bWF4QiA9IGNhLT5CaSA9IGN1cl9CaTsKIAkJfSBlbHNlIHsKQEAgLTEzNSw3ICsxNTAsNyBAQAogCQl9CiAJfQogCi0JaWYgKGNhLT5tb2Rlc3dpdGNoICYmIG1pblJUVCA+IG1heChIWi8xMDAsIDEpICYmIG1heFJUVCkgeworCWlmIChjYS0+bW9kZXN3aXRjaCAmJiBtaW5SVFQgPiBtc2Vjc190b19qaWZmaWVzKDEwKSAmJiBtYXhSVFQpIHsKIAkJY2EtPmJldGEgPSAobWluUlRUPDw3KS9tYXhSVFQ7CiAJCWlmIChjYS0+YmV0YSA8IEJFVEFfTUlOKQogCQkJY2EtPmJldGEgPSBCRVRBX01JTjsKQEAgLTE1MSw3ICsxNjYsNyBAQAogewogCXUzMiBtaW5SVFQgPSBjYS0+bWluUlRUOwogCXUzMiBmYWN0b3IgPSAxOwotCXUzMiBkaWZmID0gY2EtPmNjb3VudCAqIG1pblJUVDsgLyogdGltZSBzaW5jZSBsYXN0IGJhY2tvZmYgKi8KKwl1MzIgZGlmZiA9IGh0Y3BfY29uZ190aW1lKGNhKTsKIAogCWlmIChkaWZmID4gSFopIHsKIAkJZGlmZiAtPSBIWjsKQEAgLTIxNiwyMSArMjMxLDE4IEBACiAKIAkJbWVhc3VyZV9ydHQoc2spOwogCi0JCS8qIGtlZXAgdHJhY2sgb2YgbnVtYmVyIG9mIHJvdW5kLXRyaXAgdGltZXMgc2luY2UgbGFzdCBiYWNrb2ZmIGV2ZW50ICovCi0JCWlmIChjYS0+c25kX2N3bmRfY250MisrID4gdHAtPnNuZF9jd25kKSB7Ci0JCQljYS0+Y2NvdW50Kys7Ci0JCQljYS0+c25kX2N3bmRfY250MiA9IDA7Ci0JCQlodGNwX2FscGhhX3VwZGF0ZShjYSk7Ci0JCX0KLQogCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgogCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gYWxwaGEgLyB0cC0+c25kX2N3bmQKIAkJICovCi0JCWlmICgodHAtPnNuZF9jd25kX2NudCsrICogY2EtPmFscGhhKT4+NyA+PSB0cC0+c25kX2N3bmQpIHsKKwkJaWYgKCh0cC0+c25kX2N3bmRfY250ICogY2EtPmFscGhhKT4+NyA+PSB0cC0+c25kX2N3bmQpIHsKIAkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCiAJCQkJdHAtPnNuZF9jd25kKys7CiAJCQl0cC0+c25kX2N3bmRfY250ID0gMDsKLQkJfQorCQkJaHRjcF9hbHBoYV91cGRhdGUoY2EpOworCQl9IGVsc2UKKwkJCXRwLT5zbmRfY3duZF9jbnQgKz0gY2EtPnBrdHNfYWNrZWQ7CisKKwkJY2EtPnBrdHNfYWNrZWQgPSAxOwogCX0KIH0KIApAQCAtMjQ5LDExICsyNjEsMTkgQEAKIAltZW1zZXQoY2EsIDAsIHNpemVvZihzdHJ1Y3QgaHRjcCkpOwogCWNhLT5hbHBoYSA9IEFMUEhBX0JBU0U7CiAJY2EtPmJldGEgPSBCRVRBX01JTjsKKwljYS0+cGt0c19hY2tlZCA9IDE7CisJY2EtPmxhc3RfY29uZyA9IGppZmZpZXM7CiB9CiAKIHN0YXRpYyB2b2lkIGh0Y3Bfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCB1OCBuZXdfc3RhdGUpCiB7CiAJc3dpdGNoIChuZXdfc3RhdGUpIHsKKwljYXNlIFRDUF9DQV9PcGVuOgorCQl7CisJCQlzdHJ1Y3QgaHRjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7CisJCQljYS0+bGFzdF9jb25nID0gamlmZmllczsKKwkJfQorCQlicmVhazsKIAljYXNlIFRDUF9DQV9DV1I6CiAJY2FzZSBUQ1BfQ0FfUmVjb3Zlcnk6CiAJY2FzZSBUQ1BfQ0FfTG9zczoKQEAgLTI3OCw4ICsyOTgsNiBAQAogewogCUJVR19PTihzaXplb2Yoc3RydWN0IGh0Y3ApID4gSUNTS19DQV9QUklWX1NJWkUpOwogCUJVSUxEX0JVR19PTihCRVRBX01JTiA+PSBCRVRBX01BWCk7Ci0JaWYgKCF1c2VfYmFuZHdpZHRoX3N3aXRjaCkKLQkJaHRjcC5wa3RzX2Fja2VkID0gTlVMTDsKIAlyZXR1cm4gdGNwX3JlZ2lzdGVyX2Nvbmdlc3Rpb25fY29udHJvbCgmaHRjcCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggZTlhNTRhZS4uMTk1ZDgzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTE4OTEsNiArMTg5MSwzNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdGNwX210dXBfcHJvYmVfZmFpbGVkKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisKKwlpY3NrLT5pY3NrX210dXAuc2VhcmNoX2hpZ2ggPSBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAtIDE7CisJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOworfQorCitzdGF0aWMgdm9pZCB0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisKKwkvKiBGSVhNRTogYnJlYWtzIHdpdGggdmVyeSBsYXJnZSBjd25kICovCisJdHAtPnByaW9yX3NzdGhyZXNoID0gdGNwX2N1cnJlbnRfc3N0aHJlc2goc2spOworCXRwLT5zbmRfY3duZCA9IHRwLT5zbmRfY3duZCAqCisJCSAgICAgICB0Y3BfbXNzX3RvX210dShzaywgdHAtPm1zc19jYWNoZSkgLworCQkgICAgICAgaWNzay0+aWNza19tdHVwLnByb2JlX3NpemU7CisJdHAtPnNuZF9jd25kX2NudCA9IDA7CisJdHAtPnNuZF9jd25kX3N0YW1wID0gdGNwX3RpbWVfc3RhbXA7CisJdHAtPnJjdl9zc3RocmVzaCA9IHRjcF9jdXJyZW50X3NzdGhyZXNoKHNrKTsKKworCWljc2stPmljc2tfbXR1cC5zZWFyY2hfbG93ID0gaWNzay0+aWNza19tdHVwLnByb2JlX3NpemU7CisJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOworCXRjcF9zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7Cit9CisKKwogLyogUHJvY2VzcyBhbiBldmVudCwgd2hpY2ggY2FuIHVwZGF0ZSBwYWNrZXRzLWluLWZsaWdodCBub3QgdHJpdmlhbGx5LgogICogTWFpbiBnb2FsIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2FsY3VsYXRlIG5ldyBlc3RpbWF0ZSBmb3IgbGVmdF9vdXQsCiAgKiB0YWtpbmcgaW50byBhY2NvdW50IGJvdGggcGFja2V0cyBzaXR0aW5nIGluIHJlY2VpdmVyJ3MgYnVmZmVyIGFuZApAQCAtMjAyMyw2ICsyMDUxLDE3IEBACiAJCQlyZXR1cm47CiAJCX0KIAorCQkvKiBNVFUgcHJvYmUgZmFpbHVyZTogZG9uJ3QgcmVkdWNlIGN3bmQgKi8KKwkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPCBUQ1BfQ0FfQ1dSICYmCisJCSAgICBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgorCQkgICAgdHAtPnNuZF91bmEgPT0gdHAtPm10dV9wcm9iZS5wcm9iZV9zZXFfc3RhcnQpIHsKKwkJCXRjcF9tdHVwX3Byb2JlX2ZhaWxlZChzayk7CisJCQkvKiBSZXN0b3JlcyB0aGUgcmVkdWN0aW9uIHdlIGRpZCBpbiB0Y3BfbXR1cF9wcm9iZSgpICovCisJCQl0cC0+c25kX2N3bmQrKzsKKwkJCXRjcF9zaW1wbGVfcmV0cmFuc21pdChzayk7CisJCQlyZXR1cm47CisJCX0KKwogCQkvKiBPdGhlcndpc2UgZW50ZXIgUmVjb3Zlcnkgc3RhdGUgKi8KIAogCQlpZiAoSXNSZW5vKHRwKSkKQEAgLTIyNDMsNiArMjI4MiwxMyBAQAogCQkJdHAtPnJldHJhbnNfc3RhbXAgPSAwOwogCQl9CiAKKwkJLyogTVRVIHByb2JpbmcgY2hlY2tzICovCisJCWlmIChpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSkgeworCQkJaWYgKCFhZnRlcih0cC0+bXR1X3Byb2JlLnByb2JlX3NlcV9lbmQsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSkpIHsKKwkJCQl0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHNrLCBza2IpOworCQkJfQorCQl9CisKIAkJaWYgKHNhY2tlZCkgewogCQkJaWYgKHNhY2tlZCAmIFRDUENCX1JFVFJBTlMpIHsKIAkJCQlpZihzYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykKQEAgLTQxMDEsNiArNDE0Nyw3IEBACiAJCWlmICh0cC0+cnhfb3B0LnNhY2tfb2sgJiYgc3lzY3RsX3RjcF9mYWNrKQogCQkJdHAtPnJ4X29wdC5zYWNrX29rIHw9IDI7CiAKKwkJdGNwX210dXBfaW5pdChzayk7CiAJCXRjcF9zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7CiAJCXRjcF9pbml0aWFsaXplX3Jjdl9tc3Moc2spOwogCkBAIC00MjExLDYgKzQyNTgsNyBAQAogCQlpZiAodHAtPmVjbl9mbGFncyZUQ1BfRUNOX09LKQogCQkJc29ja19zZXRfZmxhZyhzaywgU09DS19OT19MQVJHRVNFTkQpOwogCisJCXRjcF9tdHVwX2luaXQoc2spOwogCQl0Y3Bfc3luY19tc3Moc2ssIGljc2stPmljc2tfcG10dV9jb29raWUpOwogCQl0Y3BfaW5pdGlhbGl6ZV9yY3ZfbXNzKHNrKTsKIApAQCAtNDM5OSw2ICs0NDQ3LDcgQEAKIAkJCQkgKi8KIAkJCQl0cC0+bHNuZHRpbWUgPSB0Y3BfdGltZV9zdGFtcDsKIAorCQkJCXRjcF9tdHVwX2luaXQoc2spOwogCQkJCXRjcF9pbml0aWFsaXplX3Jjdl9tc3Moc2spOwogCQkJCXRjcF9pbml0X2J1ZmZlcl9zcGFjZShzayk7CiAJCQkJdGNwX2Zhc3RfcGF0aF9vbih0cCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCAyMzNiZGYyLi45ZTg1YzA0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTkwMCw2ICs5MDAsNyBAQAogCQlpbmV0X2NzayhuZXdzayktPmljc2tfZXh0X2hkcl9sZW4gPSBuZXdpbmV0LT5vcHQtPm9wdGxlbjsKIAluZXdpbmV0LT5pZCA9IG5ld3RwLT53cml0ZV9zZXEgXiBqaWZmaWVzOwogCisJdGNwX210dXBfaW5pdChuZXdzayk7CiAJdGNwX3N5bmNfbXNzKG5ld3NrLCBkc3RfbXR1KGRzdCkpOwogCW5ld3RwLT5hZHZtc3MgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpOwogCXRjcF9pbml0aWFsaXplX3Jjdl9tc3MobmV3c2spOwpAQCAtMTIxNiwxNyArMTIxNywyMSBAQAogfQogCiBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7Ci0JLnF1ZXVlX3htaXQJPQlpcF9xdWV1ZV94bWl0LAotCS5zZW5kX2NoZWNrCT0JdGNwX3Y0X3NlbmRfY2hlY2ssCi0JLnJlYnVpbGRfaGVhZGVyCT0JaW5ldF9za19yZWJ1aWxkX2hlYWRlciwKLQkuY29ubl9yZXF1ZXN0CT0JdGNwX3Y0X2Nvbm5fcmVxdWVzdCwKLQkuc3luX3JlY3Zfc29jawk9CXRjcF92NF9zeW5fcmVjdl9zb2NrLAotCS5yZW1lbWJlcl9zdGFtcAk9CXRjcF92NF9yZW1lbWJlcl9zdGFtcCwKLQkubmV0X2hlYWRlcl9sZW4JPQlzaXplb2Yoc3RydWN0IGlwaGRyKSwKLQkuc2V0c29ja29wdAk9CWlwX3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQJPQlpcF9nZXRzb2Nrb3B0LAotCS5hZGRyMnNvY2thZGRyCT0JaW5ldF9jc2tfYWRkcjJzb2NrYWRkciwKLQkuc29ja2FkZHJfbGVuCT0Jc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksCisJLnF1ZXVlX3htaXQJICAgPSBpcF9xdWV1ZV94bWl0LAorCS5zZW5kX2NoZWNrCSAgID0gdGNwX3Y0X3NlbmRfY2hlY2ssCisJLnJlYnVpbGRfaGVhZGVyCSAgID0gaW5ldF9za19yZWJ1aWxkX2hlYWRlciwKKwkuY29ubl9yZXF1ZXN0CSAgID0gdGNwX3Y0X2Nvbm5fcmVxdWVzdCwKKwkuc3luX3JlY3Zfc29jawkgICA9IHRjcF92NF9zeW5fcmVjdl9zb2NrLAorCS5yZW1lbWJlcl9zdGFtcAkgICA9IHRjcF92NF9yZW1lbWJlcl9zdGFtcCwKKwkubmV0X2hlYWRlcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSwKKwkuc2V0c29ja29wdAkgICA9IGlwX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJICAgPSBpcF9nZXRzb2Nrb3B0LAorCS5hZGRyMnNvY2thZGRyCSAgID0gaW5ldF9jc2tfYWRkcjJzb2NrYWRkciwKKwkuc29ja2FkZHJfbGVuCSAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9pcF9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9pcF9nZXRzb2Nrb3B0LAorI2VuZGlmCiB9OwogCiAvKiBOT1RFOiBBIGxvdCBvZiB0aGluZ3Mgc2V0IHRvIHplcm8gZXhwbGljaXRseSBieSBjYWxsIHRvCkBAIC0xODI1LDIzICsxODMwLDE2IEBACiAJLm9ial9zaXplCQk9IHNpemVvZihzdHJ1Y3QgdGNwX3NvY2spLAogCS50d3NrX3Byb3QJCT0gJnRjcF90aW1ld2FpdF9zb2NrX29wcywKIAkucnNrX3Byb3QJCT0gJnRjcF9yZXF1ZXN0X3NvY2tfb3BzLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X3NldHNvY2tvcHQJPSBjb21wYXRfdGNwX3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0CT0gY29tcGF0X3RjcF9nZXRzb2Nrb3B0LAorI2VuZGlmCiB9OwogCi0KLQogdm9pZCBfX2luaXQgdGNwX3Y0X2luaXQoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcykKIHsKLQlpbnQgZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX1JBVywgSVBQUk9UT19UQ1AsICZ0Y3Bfc29ja2V0KTsKLQlpZiAoZXJyIDwgMCkKKwlpZiAoaW5ldF9jc2tfY3RsX3NvY2tfY3JlYXRlKCZ0Y3Bfc29ja2V0LCBQRl9JTkVULCBTT0NLX1JBVywgSVBQUk9UT19UQ1ApIDwgMCkKIAkJcGFuaWMoIkZhaWxlZCB0byBjcmVhdGUgdGhlIFRDUCBjb250cm9sIHNvY2tldC5cbiIpOwotCXRjcF9zb2NrZXQtPnNrLT5za19hbGxvY2F0aW9uICAgPSBHRlBfQVRPTUlDOwotCWluZXRfc2sodGNwX3NvY2tldC0+c2spLT51Y190dGwgPSAtMTsKLQotCS8qIFVuaGFzaCBpdCBzbyB0aGF0IElQIGlucHV0IHByb2Nlc3NpbmcgZG9lcyBub3QgZXZlbgotCSAqIHNlZSBpdCwgd2UgZG8gbm90IHdpc2ggdGhpcyBzb2NrZXQgdG8gc2VlIGluY29taW5nCi0JICogcGFja2V0cy4KLQkgKi8KLQl0Y3Bfc29ja2V0LT5zay0+c2tfcHJvdC0+dW5oYXNoKHRjcF9zb2NrZXQtPnNrKTsKIH0KIAogRVhQT1JUX1NZTUJPTChpcHY0X3NwZWNpZmljKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCBhNzYyM2VhLi45ZDc5NTQ2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC00NSwxMiArNDUsMjMgQEAKIC8qIFBlb3BsZSBjYW4gdHVybiB0aGlzIG9mZiBmb3IgYnVnZ3kgVENQJ3MgZm91bmQgaW4gcHJpbnRlcnMgZXRjLiAqLwogaW50IHN5c2N0bF90Y3BfcmV0cmFuc19jb2xsYXBzZSA9IDE7CiAKKy8qIFBlb3BsZSBjYW4gdHVybiB0aGlzIG9uIHRvICB3b3JrIHdpdGggdGhvc2UgcmFyZSwgYnJva2VuIFRDUHMgdGhhdAorICogaW50ZXJwcmV0IHRoZSB3aW5kb3cgZmllbGQgYXMgYSBzaWduZWQgcXVhbnRpdHkuCisgKi8KK2ludCBzeXNjdGxfdGNwX3dvcmthcm91bmRfc2lnbmVkX3dpbmRvd3MgPSAwOworCiAvKiBUaGlzIGxpbWl0cyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgY29uZ2VzdGlvbiB3aW5kb3cgd2hpY2ggd2UKICAqIHdpbGwgYWxsb3cgYSBzaW5nbGUgVFNPIGZyYW1lIHRvIGNvbnN1bWUuICBCdWlsZGluZyBUU08gZnJhbWVzCiAgKiB3aGljaCBhcmUgdG9vIGxhcmdlIGNhbiBjYXVzZSBUQ1Agc3RyZWFtcyB0byBiZSBidXJzdHkuCiAgKi8KIGludCBzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvciA9IDM7CiAKK2ludCBzeXNjdGxfdGNwX210dV9wcm9iaW5nID0gMDsKK2ludCBzeXNjdGxfdGNwX2Jhc2VfbXNzID0gNTEyOworCitFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfbXR1X3Byb2JpbmcpOworRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2Jhc2VfbXNzKTsKKwogc3RhdGljIHZvaWQgdXBkYXRlX3NlbmRfaGVhZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0Y3Bfc29jayAqdHAsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xNzEsMTIgKzE4MiwxOCBAQAogCQlzcGFjZSA9IChzcGFjZSAvIG1zcykgKiBtc3M7CiAKIAkvKiBOT1RFOiBvZmZlcmluZyBhbiBpbml0aWFsIHdpbmRvdyBsYXJnZXIgdGhhbiAzMjc2NwotCSAqIHdpbGwgYnJlYWsgc29tZSBidWdneSBUQ1Agc3RhY2tzLiBXZSB0cnkgdG8gYmUgbmljZS4KLQkgKiBJZiB3ZSBhcmUgbm90IHdpbmRvdyBzY2FsaW5nLCB0aGVuIHRoaXMgdHJ1bmNhdGVzCi0JICogb3VyIGluaXRpYWwgd2luZG93IG9mZmVyaW5nIHRvIDMyay4gVGhlcmUgc2hvdWxkIGFsc28KLQkgKiBiZSBhIHN5c2N0bCBvcHRpb24gdG8gc3RvcCBiZWluZyBuaWNlLgorCSAqIHdpbGwgYnJlYWsgc29tZSBidWdneSBUQ1Agc3RhY2tzLiBJZiB0aGUgYWRtaW4gdGVsbHMgdXMKKwkgKiBpdCBpcyBsaWtlbHkgd2UgY291bGQgYmUgc3BlYWtpbmcgd2l0aCBzdWNoIGEgYnVnZ3kgc3RhY2sKKwkgKiB3ZSB3aWxsIHRydW5jYXRlIG91ciBpbml0aWFsIHdpbmRvdyBvZmZlcmluZyB0byAzMkstMQorCSAqIHVubGVzcyB0aGUgcmVtb3RlIGhhcyBzZW50IHVzIGEgd2luZG93IHNjYWxpbmcgb3B0aW9uLAorCSAqIHdoaWNoIHdlIGludGVycHJldCBhcyBhIHNpZ24gdGhlIHJlbW90ZSBUQ1AgaXMgbm90CisJICogbWlzaW50ZXJwcmV0aW5nIHRoZSB3aW5kb3cgZmllbGQgYXMgYSBzaWduZWQgcXVhbnRpdHkuCiAJICovCi0JKCpyY3Zfd25kKSA9IG1pbihzcGFjZSwgTUFYX1RDUF9XSU5ET1cpOworCWlmIChzeXNjdGxfdGNwX3dvcmthcm91bmRfc2lnbmVkX3dpbmRvd3MpCisJCSgqcmN2X3duZCkgPSBtaW4oc3BhY2UsIE1BWF9UQ1BfV0lORE9XKTsKKwllbHNlCisJCSgqcmN2X3duZCkgPSBzcGFjZTsKKwogCSgqcmN2X3dzY2FsZSkgPSAwOwogCWlmICh3c2NhbGVfb2spIHsKIAkJLyogU2V0IHdpbmRvdyBzY2FsaW5nIG9uIG1heCBwb3NzaWJsZSB3aW5kb3cKQEAgLTIzNSw3ICsyNTIsNyBAQAogCS8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIHBvc3NpYmxlCiAJICogc2NhbGVkIHdpbmRvdy4KIAkgKi8KLQlpZiAoIXRwLT5yeF9vcHQucmN2X3dzY2FsZSkKKwlpZiAoIXRwLT5yeF9vcHQucmN2X3dzY2FsZSAmJiBzeXNjdGxfdGNwX3dvcmthcm91bmRfc2lnbmVkX3dpbmRvd3MpCiAJCW5ld193aW4gPSBtaW4obmV3X3dpbiwgTUFYX1RDUF9XSU5ET1cpOwogCWVsc2UKIAkJbmV3X3dpbiA9IG1pbihuZXdfd2luLCAoNjU1MzVVIDw8IHRwLT5yeF9vcHQucmN2X3dzY2FsZSkpOwpAQCAtNjgxLDYgKzY5OCw2MiBAQAogCXJldHVybiAwOwogfQogCisvKiBOb3QgYWNjb3VudGluZyBmb3IgU0FDS3MgaGVyZS4gKi8KK2ludCB0Y3BfbXR1X3RvX21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBwbXR1KQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKwlpbnQgbXNzX25vdzsKKworCS8qIENhbGN1bGF0ZSBiYXNlIG1zcyB3aXRob3V0IFRDUCBvcHRpb25zOgorCSAgIEl0IGlzIE1NU19TIC0gc2l6ZW9mKHRjcGhkcikgb2YgcmZjMTEyMgorCSAqLworCW1zc19ub3cgPSBwbXR1IC0gaWNzay0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCisJLyogQ2xhbXAgaXQgKG1zc19jbGFtcCBkb2VzIG5vdCBpbmNsdWRlIHRjcCBvcHRpb25zKSAqLworCWlmIChtc3Nfbm93ID4gdHAtPnJ4X29wdC5tc3NfY2xhbXApCisJCW1zc19ub3cgPSB0cC0+cnhfb3B0Lm1zc19jbGFtcDsKKworCS8qIE5vdyBzdWJ0cmFjdCBvcHRpb25hbCB0cmFuc3BvcnQgb3ZlcmhlYWQgKi8KKwltc3Nfbm93IC09IGljc2stPmljc2tfZXh0X2hkcl9sZW47CisKKwkvKiBUaGVuIHJlc2VydmUgcm9vbSBmb3IgZnVsbCBzZXQgb2YgVENQIG9wdGlvbnMgYW5kIDggYnl0ZXMgb2YgZGF0YSAqLworCWlmIChtc3Nfbm93IDwgNDgpCisJCW1zc19ub3cgPSA0ODsKKworCS8qIE5vdyBzdWJ0cmFjdCBUQ1Agb3B0aW9ucyBzaXplLCBub3QgaW5jbHVkaW5nIFNBQ0tzICovCisJbXNzX25vdyAtPSB0cC0+dGNwX2hlYWRlcl9sZW4gLSBzaXplb2Yoc3RydWN0IHRjcGhkcik7CisKKwlyZXR1cm4gbXNzX25vdzsKK30KKworLyogSW52ZXJzZSBvZiBhYm92ZSAqLworaW50IHRjcF9tc3NfdG9fbXR1KHN0cnVjdCBzb2NrICpzaywgaW50IG1zcykKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CisJaW50IG10dTsKKworCW10dSA9IG1zcyArCisJICAgICAgdHAtPnRjcF9oZWFkZXJfbGVuICsKKwkgICAgICBpY3NrLT5pY3NrX2V4dF9oZHJfbGVuICsKKwkgICAgICBpY3NrLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW47CisKKwlyZXR1cm4gbXR1OworfQorCit2b2lkIHRjcF9tdHVwX2luaXQoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKworCWljc2stPmljc2tfbXR1cC5lbmFibGVkID0gc3lzY3RsX3RjcF9tdHVfcHJvYmluZyA+IDE7CisJaWNzay0+aWNza19tdHVwLnNlYXJjaF9oaWdoID0gdHAtPnJ4X29wdC5tc3NfY2xhbXAgKyBzaXplb2Yoc3RydWN0IHRjcGhkcikgKworCSAgICAgICAgICAgICAgICAgICAgICAgaWNzay0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuOworCWljc2stPmljc2tfbXR1cC5zZWFyY2hfbG93ID0gdGNwX21zc190b19tdHUoc2ssIHN5c2N0bF90Y3BfYmFzZV9tc3MpOworCWljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplID0gMDsKK30KKwogLyogVGhpcyBmdW5jdGlvbiBzeW5jaHJvbml6ZSBzbmQgbXNzIHRvIGN1cnJlbnQgcG10dS9leHRoZHIgc2V0LgogCiAgICB0cC0+cnhfb3B0LnVzZXJfbXNzIGlzIG1zcyBzZXQgYnkgdXNlciBieSBUQ1BfTUFYU0VHLiBJdCBkb2VzIE5PVCBjb3VudHMKQEAgLTcwOCwyNSArNzgxLDEyIEBACiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCS8qIENhbGN1bGF0ZSBiYXNlIG1zcyB3aXRob3V0IFRDUCBvcHRpb25zOgotCSAgIEl0IGlzIE1NU19TIC0gc2l6ZW9mKHRjcGhkcikgb2YgcmZjMTEyMgotCSAqLwotCWludCBtc3Nfbm93ID0gKHBtdHUgLSBpY3NrLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW4gLQotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKTsKKwlpbnQgbXNzX25vdzsKIAotCS8qIENsYW1wIGl0IChtc3NfY2xhbXAgZG9lcyBub3QgaW5jbHVkZSB0Y3Agb3B0aW9ucykgKi8KLQlpZiAobXNzX25vdyA+IHRwLT5yeF9vcHQubXNzX2NsYW1wKQotCQltc3Nfbm93ID0gdHAtPnJ4X29wdC5tc3NfY2xhbXA7CisJaWYgKGljc2stPmljc2tfbXR1cC5zZWFyY2hfaGlnaCA+IHBtdHUpCisJCWljc2stPmljc2tfbXR1cC5zZWFyY2hfaGlnaCA9IHBtdHU7CiAKLQkvKiBOb3cgc3VidHJhY3Qgb3B0aW9uYWwgdHJhbnNwb3J0IG92ZXJoZWFkICovCi0JbXNzX25vdyAtPSBpY3NrLT5pY3NrX2V4dF9oZHJfbGVuOwotCi0JLyogVGhlbiByZXNlcnZlIHJvb20gZm9yIGZ1bGwgc2V0IG9mIFRDUCBvcHRpb25zIGFuZCA4IGJ5dGVzIG9mIGRhdGEgKi8KLQlpZiAobXNzX25vdyA8IDQ4KQotCQltc3Nfbm93ID0gNDg7Ci0KLQkvKiBOb3cgc3VidHJhY3QgVENQIG9wdGlvbnMgc2l6ZSwgbm90IGluY2x1ZGluZyBTQUNLcyAqLwotCW1zc19ub3cgLT0gdHAtPnRjcF9oZWFkZXJfbGVuIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCW1zc19ub3cgPSB0Y3BfbXR1X3RvX21zcyhzaywgcG10dSk7CiAKIAkvKiBCb3VuZCBtc3Mgd2l0aCBoYWxmIG9mIHdpbmRvdyAqLwogCWlmICh0cC0+bWF4X3dpbmRvdyAmJiBtc3Nfbm93ID4gKHRwLT5tYXhfd2luZG93Pj4xKSkKQEAgLTczNCw2ICs3OTQsOCBAQAogCiAJLyogQW5kIHN0b3JlIGNhY2hlZCByZXN1bHRzICovCiAJaWNzay0+aWNza19wbXR1X2Nvb2tpZSA9IHBtdHU7CisJaWYgKGljc2stPmljc2tfbXR1cC5lbmFibGVkKQorCQltc3Nfbm93ID0gbWluKG1zc19ub3csIHRjcF9tdHVfdG9fbXNzKHNrLCBpY3NrLT5pY3NrX210dXAuc2VhcmNoX2xvdykpOwogCXRwLT5tc3NfY2FjaGUgPSBtc3Nfbm93OwogCiAJcmV0dXJuIG1zc19ub3c7CkBAIC0xMDM2LDYgKzEwOTgsMTAgQEAKIAogCWxpbWl0ID0gbWluKHNlbmRfd2luLCBjb25nX3dpbik7CiAKKwkvKiBJZiBhIGZ1bGwtc2l6ZWQgVFNPIHNrYiBjYW4gYmUgc2VudCwgZG8gaXQuICovCisJaWYgKGxpbWl0ID49IDY1NTM2KQorCQlyZXR1cm4gMDsKKwogCWlmIChzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcikgewogCQl1MzIgY2h1bmsgPSBtaW4odHAtPnNuZF93bmQsIHRwLT5zbmRfY3duZCAqIHRwLT5tc3NfY2FjaGUpOwogCkBAIC0xMDU5LDYgKzExMjUsMTQwIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qIENyZWF0ZSBhIG5ldyBNVFUgcHJvYmUgaWYgd2UgYXJlIHJlYWR5LgorICogUmV0dXJucyAwIGlmIHdlIHNob3VsZCB3YWl0IHRvIHByb2JlIChubyBjd25kIGF2YWlsYWJsZSksCisgKiAgICAgICAgIDEgaWYgYSBwcm9iZSB3YXMgc2VudCwKKyAqICAgICAgICAgLTEgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IHRjcF9tdHVfcHJvYmUoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbnNrYiwgKm5leHQ7CisJaW50IGxlbjsKKwlpbnQgcHJvYmVfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcGlmOworCWludCBjb3B5OworCWludCBtc3Nfbm93OworCisJLyogTm90IGN1cnJlbnRseSBwcm9iaW5nL3ZlcmlmeWluZywKKwkgKiBub3QgaW4gcmVjb3ZlcnksCisJICogaGF2ZSBlbm91Z2ggY3duZCwgYW5kCisJICogbm90IFNBQ0tpbmcgKHRoZSB2YXJpYWJsZSBoZWFkZXJzIHRocm93IHRoaW5ncyBvZmYpICovCisJaWYgKCFpY3NrLT5pY3NrX210dXAuZW5hYmxlZCB8fAorCSAgICBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSB8fAorCSAgICBpbmV0X2NzayhzayktPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gfHwKKwkgICAgdHAtPnNuZF9jd25kIDwgMTEgfHwKKwkgICAgdHAtPnJ4X29wdC5lZmZfc2Fja3MpCisJCXJldHVybiAtMTsKKworCS8qIFZlcnkgc2ltcGxlIHNlYXJjaCBzdHJhdGVneToganVzdCBkb3VibGUgdGhlIE1TUy4gKi8KKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwlwcm9iZV9zaXplID0gMip0cC0+bXNzX2NhY2hlOworCWlmIChwcm9iZV9zaXplID4gdGNwX210dV90b19tc3Moc2ssIGljc2stPmljc2tfbXR1cC5zZWFyY2hfaGlnaCkpIHsKKwkJLyogVE9ETzogc2V0IHRpbWVyIGZvciBwcm9iZV9jb252ZXJnZV9ldmVudCAqLworCQlyZXR1cm4gLTE7CisJfQorCisJLyogSGF2ZSBlbm91Z2ggZGF0YSBpbiB0aGUgc2VuZCBxdWV1ZSB0byBwcm9iZT8gKi8KKwlsZW4gPSAwOworCWlmICgoc2tiID0gc2stPnNrX3NlbmRfaGVhZCkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCXdoaWxlICgobGVuICs9IHNrYi0+bGVuKSA8IHByb2JlX3NpemUgJiYgIXRjcF9za2JfaXNfbGFzdChzaywgc2tiKSkKKwkJc2tiID0gc2tiLT5uZXh0OworCWlmIChsZW4gPCBwcm9iZV9zaXplKQorCQlyZXR1cm4gLTE7CisKKwkvKiBSZWNlaXZlIHdpbmRvdyBjaGVjay4gKi8KKwlpZiAoYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5zZXEgKyBwcm9iZV9zaXplLCB0cC0+c25kX3VuYSArIHRwLT5zbmRfd25kKSkgeworCQlpZiAodHAtPnNuZF93bmQgPCBwcm9iZV9zaXplKQorCQkJcmV0dXJuIC0xOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBEbyB3ZSBuZWVkIHRvIHdhaXQgdG8gZHJhaW4gY3duZD8gKi8KKwlwaWYgPSB0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApOworCWlmIChwaWYgKyAyID4gdHAtPnNuZF9jd25kKSB7CisJCS8qIFdpdGggbm8gcGFja2V0cyBpbiBmbGlnaHQsIGRvbid0IHN0YWxsLiAqLworCQlpZiAocGlmID09IDApCisJCQlyZXR1cm4gLTE7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKworCS8qIFdlJ3JlIGFsbG93ZWQgdG8gcHJvYmUuICBCdWlsZCBpdCBub3cuICovCisJaWYgKChuc2tiID0gc2tfc3RyZWFtX2FsbG9jX3NrYihzaywgcHJvYmVfc2l6ZSwgR0ZQX0FUT01JQykpID09IE5VTEwpCisJCXJldHVybiAtMTsKKwlza19jaGFyZ2Vfc2tiKHNrLCBuc2tiKTsKKworCXNrYiA9IHNrLT5za19zZW5kX2hlYWQ7CisJX19za2JfaW5zZXJ0KG5za2IsIHNrYi0+cHJldiwgc2tiLCAmc2stPnNrX3dyaXRlX3F1ZXVlKTsKKwlzay0+c2tfc2VuZF9oZWFkID0gbnNrYjsKKworCVRDUF9TS0JfQ0IobnNrYiktPnNlcSA9IFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOworCVRDUF9TS0JfQ0IobnNrYiktPmVuZF9zZXEgPSBUQ1BfU0tCX0NCKHNrYiktPnNlcSArIHByb2JlX3NpemU7CisJVENQX1NLQl9DQihuc2tiKS0+ZmxhZ3MgPSBUQ1BDQl9GTEFHX0FDSzsKKwlUQ1BfU0tCX0NCKG5za2IpLT5zYWNrZWQgPSAwOworCW5za2ItPmNzdW0gPSAwOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKKwkJbnNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7CisKKwlsZW4gPSAwOworCXdoaWxlIChsZW4gPCBwcm9iZV9zaXplKSB7CisJCW5leHQgPSBza2ItPm5leHQ7CisKKwkJY29weSA9IG1pbl90KGludCwgc2tiLT5sZW4sIHByb2JlX3NpemUgLSBsZW4pOworCQlpZiAobnNrYi0+aXBfc3VtbWVkKQorCQkJc2tiX2NvcHlfYml0cyhza2IsIDAsIHNrYl9wdXQobnNrYiwgY29weSksIGNvcHkpOworCQllbHNlCisJCQluc2tiLT5jc3VtID0gc2tiX2NvcHlfYW5kX2NzdW1fYml0cyhza2IsIDAsCisJCQkgICAgICAgICAgICAgICAgIHNrYl9wdXQobnNrYiwgY29weSksIGNvcHksIG5za2ItPmNzdW0pOworCisJCWlmIChza2ItPmxlbiA8PSBjb3B5KSB7CisJCQkvKiBXZSd2ZSBlYXRlbiBhbGwgdGhlIGRhdGEgZnJvbSB0aGlzIHNrYi4KKwkJCSAqIFRocm93IGl0IGF3YXkuICovCisJCQlUQ1BfU0tCX0NCKG5za2IpLT5mbGFncyB8PSBUQ1BfU0tCX0NCKHNrYiktPmZsYWdzOworCQkJX19za2JfdW5saW5rKHNrYiwgJnNrLT5za193cml0ZV9xdWV1ZSk7CisJCQlza19zdHJlYW1fZnJlZV9za2Ioc2ssIHNrYik7CisJCX0gZWxzZSB7CisJCQlUQ1BfU0tCX0NCKG5za2IpLT5mbGFncyB8PSBUQ1BfU0tCX0NCKHNrYiktPmZsYWdzICYKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIH4oVENQQ0JfRkxBR19GSU58VENQQ0JfRkxBR19QU0gpOworCQkJaWYgKCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CisJCQkJc2tiX3B1bGwoc2tiLCBjb3B5KTsKKwkJCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fSFcpCisJCQkJCXNrYi0+Y3N1bSA9IGNzdW1fcGFydGlhbChza2ItPmRhdGEsIHNrYi0+bGVuLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJX19wc2tiX3RyaW1faGVhZChza2IsIGNvcHkpOworCQkJCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIG1zc19ub3cpOworCQkJfQorCQkJVENQX1NLQl9DQihza2IpLT5zZXEgKz0gY29weTsKKwkJfQorCisJCWxlbiArPSBjb3B5OworCQlza2IgPSBuZXh0OworCX0KKwl0Y3BfaW5pdF90c29fc2VncyhzaywgbnNrYiwgbnNrYi0+bGVuKTsKKworCS8qIFdlJ3JlIHJlYWR5IHRvIHNlbmQuICBJZiB0aGlzIGZhaWxzLCB0aGUgcHJvYmUgd2lsbAorCSAqIGJlIHJlc2VnbWVudGVkIGludG8gbXNzLXNpemVkIHBpZWNlcyBieSB0Y3Bfd3JpdGVfeG1pdCgpLiAqLworCVRDUF9TS0JfQ0IobnNrYiktPndoZW4gPSB0Y3BfdGltZV9zdGFtcDsKKwlpZiAoIXRjcF90cmFuc21pdF9za2Ioc2ssIG5za2IsIDEsIEdGUF9BVE9NSUMpKSB7CisJCS8qIERlY3JlbWVudCBjd25kIGhlcmUgYmVjYXVzZSB3ZSBhcmUgc2VuZGluZworCQkqIGVmZmVjdGl2ZWx5IHR3byBwYWNrZXRzLiAqLworCQl0cC0+c25kX2N3bmQtLTsKKwkJdXBkYXRlX3NlbmRfaGVhZChzaywgdHAsIG5za2IpOworCisJCWljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplID0gdGNwX21zc190b19tdHUoc2ssIG5za2ItPmxlbik7CisJCXRwLT5tdHVfcHJvYmUucHJvYmVfc2VxX3N0YXJ0ID0gVENQX1NLQl9DQihuc2tiKS0+c2VxOworCQl0cC0+bXR1X3Byb2JlLnByb2JlX3NlcV9lbmQgPSBUQ1BfU0tCX0NCKG5za2IpLT5lbmRfc2VxOworCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAtMTsKK30KKworCiAvKiBUaGlzIHJvdXRpbmUgd3JpdGVzIHBhY2tldHMgdG8gdGhlIG5ldHdvcmsuICBJdCBhZHZhbmNlcyB0aGUKICAqIHNlbmRfaGVhZC4gIFRoaXMgaGFwcGVucyBhcyBpbmNvbWluZyBhY2tzIG9wZW4gdXAgdGhlIHJlbW90ZQogICogd2luZG93IGZvciB1cy4KQEAgLTEwNzIsNiArMTI3Miw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgdHNvX3NlZ3MsIHNlbnRfcGt0czsKIAlpbnQgY3duZF9xdW90YTsKKwlpbnQgcmVzdWx0OwogCiAJLyogSWYgd2UgYXJlIGNsb3NlZCwgdGhlIGJ5dGVzIHdpbGwgaGF2ZSB0byByZW1haW4gaGVyZS4KIAkgKiBJbiB0aW1lIGNsb3NlZG93biB3aWxsIGZpbmlzaCwgd2UgZW1wdHkgdGhlIHdyaXRlIHF1ZXVlIGFuZCBhbGwKQEAgLTEwODEsNiArMTI4MiwxNCBAQAogCQlyZXR1cm4gMDsKIAogCXNlbnRfcGt0cyA9IDA7CisKKwkvKiBEbyBNVFUgcHJvYmluZy4gKi8KKwlpZiAoKHJlc3VsdCA9IHRjcF9tdHVfcHJvYmUoc2spKSA9PSAwKSB7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocmVzdWx0ID4gMCkgeworCQlzZW50X3BrdHMgPSAxOworCX0KKwogCXdoaWxlICgoc2tiID0gc2stPnNrX3NlbmRfaGVhZCkpIHsKIAkJdW5zaWduZWQgaW50IGxpbWl0OwogCkBAIC0xNDUxLDkgKzE2NjAsMTUgQEAKIGludCB0Y3BfcmV0cmFuc21pdF9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKICAJdW5zaWduZWQgaW50IGN1cl9tc3MgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOwogCWludCBlcnI7CiAKKwkvKiBJbmNvbnNsdXNpdmUgTVRVIHByb2JlICovCisJaWYgKGljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplKSB7CisJCWljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplID0gMDsKKwl9CisKIAkvKiBEbyBub3Qgc2VudCBtb3JlIHRoYW4gd2UgcXVldWVkLiAxLzQgaXMgcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlCiAJICogY29weWluZyBvdmVyaGVhZDogZnJhZ21lbnRhdGlvbiwgdHVubmVsaW5nLCBtYW5nbGluZyBldGMuCiAJICovCkBAIC0xODc5LDYgKzIwOTQsNyBAQAogCWlmICh0cC0+cnhfb3B0LnVzZXJfbXNzKQogCQl0cC0+cnhfb3B0Lm1zc19jbGFtcCA9IHRwLT5yeF9vcHQudXNlcl9tc3M7CiAJdHAtPm1heF93aW5kb3cgPSAwOworCXRjcF9tdHVwX2luaXQoc2spOwogCXRjcF9zeW5jX21zcyhzaywgZHN0X210dShkc3QpKTsKIAogCWlmICghdHAtPndpbmRvd19jbGFtcCkKQEAgLTIxNzYsMyArMjM5Miw0IEBACiBFWFBPUlRfU1lNQk9MKHRjcF9zaW1wbGVfcmV0cmFuc21pdCk7CiBFWFBPUlRfU1lNQk9MKHRjcF9zeW5jX21zcyk7CiBFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yKTsKK0VYUE9SVF9TWU1CT0wodGNwX210dXBfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IGUxODgwOTUuLjdjMWJkZTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0xMTksOCArMTE5LDEwIEBACiAvKiBBIHdyaXRlIHRpbWVvdXQgaGFzIG9jY3VycmVkLiBQcm9jZXNzIHRoZSBhZnRlciBlZmZlY3RzLiAqLwogc3RhdGljIGludCB0Y3Bfd3JpdGVfdGltZW91dChzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlpbnQgcmV0cnlfdW50aWw7CisJaW50IG1zczsKIAogCWlmICgoMSA8PCBzay0+c2tfc3RhdGUpICYgKFRDUEZfU1lOX1NFTlQgfCBUQ1BGX1NZTl9SRUNWKSkgewogCQlpZiAoaWNzay0+aWNza19yZXRyYW5zbWl0cykKQEAgLTEyOCwyNSArMTMwLDE5IEBACiAJCXJldHJ5X3VudGlsID0gaWNzay0+aWNza19zeW5fcmV0cmllcyA/IDogc3lzY3RsX3RjcF9zeW5fcmV0cmllczsKIAl9IGVsc2UgewogCQlpZiAoaWNzay0+aWNza19yZXRyYW5zbWl0cyA+PSBzeXNjdGxfdGNwX3JldHJpZXMxKSB7Ci0JCQkvKiBOT1RFLiBkcmFmdC1pZXRmLXRjcGltcGwtcG10dWQtMDEudHh0IHJlcXVpcmVzIHBtdHUgYmxhY2sKLQkJCSAgIGhvbGUgZGV0ZWN0aW9uLiA6LSgKLQotCQkJICAgSXQgaXMgcGxhY2UgdG8gbWFrZSBpdC4gSXQgaXMgbm90IG1hZGUuIEkgZG8gbm90IHdhbnQKLQkJCSAgIHRvIG1ha2UgaXQuIEl0IGlzIGRpc2d1c3RpbmcuIEl0IGRvZXMgbm90IHdvcmsgaW4gYW55Ci0JCQkgICBjYXNlLiBMZXQgbWUgdG8gY2l0ZSB0aGUgc2FtZSBkcmFmdCwgd2hpY2ggcmVxdWlyZXMgZm9yCi0JCQkgICB1cyB0byBpbXBsZW1lbnQgdGhpczoKLQotICAgIlRoZSBvbmUgc2VjdXJpdHkgY29uY2VybiByYWlzZWQgYnkgdGhpcyBtZW1vIGlzIHRoYXQgSUNNUCBibGFjayBob2xlcwotICAgYXJlIG9mdGVuIGNhdXNlZCBieSBvdmVyLXplYWxvdXMgc2VjdXJpdHkgYWRtaW5pc3RyYXRvcnMgd2hvIGJsb2NrCi0gICBhbGwgSUNNUCBtZXNzYWdlcy4gIEl0IGlzIHZpdGFsbHkgaW1wb3J0YW50IHRoYXQgdGhvc2Ugd2hvIGRlc2lnbiBhbmQKLSAgIGRlcGxveSBzZWN1cml0eSBzeXN0ZW1zIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBzdHJpY3QgZmlsdGVyaW5nIG9uCi0gICB1cHBlci1sYXllciBwcm90b2NvbHMuICBUaGUgc2FmZXN0IHdlYiBzaXRlIGluIHRoZSB3b3JsZCBpcyB3b3J0aGxlc3MKLSAgIGlmIG1vc3QgVENQIGltcGxlbWVudGF0aW9ucyBjYW5ub3QgdHJhbnNmZXIgZGF0YSBmcm9tIGl0LiAgSXQgd291bGQKLSAgIGJlIGZhciBuaWNlciB0byBoYXZlIGFsbCBvZiB0aGUgYmxhY2sgaG9sZXMgZml4ZWQgcmF0aGVyIHRoYW4gZml4aW5nCi0gICBhbGwgb2YgdGhlIFRDUCBpbXBsZW1lbnRhdGlvbnMuIgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHb2xkZW4gd29yZHMgOi0pLgotCQkgICAqLworCQkJLyogQmxhY2sgaG9sZSBkZXRlY3Rpb24gKi8KKwkJCWlmIChzeXNjdGxfdGNwX210dV9wcm9iaW5nKSB7CisJCQkJaWYgKCFpY3NrLT5pY3NrX210dXAuZW5hYmxlZCkgeworCQkJCQlpY3NrLT5pY3NrX210dXAuZW5hYmxlZCA9IDE7CisJCQkJCXRjcF9zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbXNzID0gbWluKHN5c2N0bF90Y3BfYmFzZV9tc3MsCisJCQkJCSAgICAgICAgICB0Y3BfbXR1X3RvX21zcyhzaywgaWNzay0+aWNza19tdHVwLnNlYXJjaF9sb3cpLzIpOworCQkJCQltc3MgPSBtYXgobXNzLCA2OCAtIHRwLT50Y3BfaGVhZGVyX2xlbik7CisJCQkJCWljc2stPmljc2tfbXR1cC5zZWFyY2hfbG93ID0gdGNwX21zc190b19tdHUoc2ssIG1zcyk7CisJCQkJCXRjcF9zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7CisJCQkJfQorCQkJfQogCiAJCQlkc3RfbmVnYXRpdmVfYWR2aWNlKCZzay0+c2tfZHN0X2NhY2hlKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCAwMDg0MDQ3Li4zZjkzMjkyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMTIwNywxNiArMTIwNywxMyBAQAogLyoKICAqCVNvY2tldCBvcHRpb24gY29kZSBmb3IgVURQCiAgKi8KLXN0YXRpYyBpbnQgdWRwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCAKK3N0YXRpYyBpbnQgZG9fdWRwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spOwogCWludCB2YWw7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAobGV2ZWwgIT0gU09MX1VEUCkKLQkJcmV0dXJuIGlwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Ci0KIAlpZihvcHRsZW48c2l6ZW9mKGludCkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMjU2LDE1ICsxMjUzLDMwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB1ZHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIAorc3RhdGljIGludCB1ZHBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJaWYgKGxldmVsICE9IFNPTF9VRFApCisJCXJldHVybiBpcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBkb191ZHBfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3VkcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQkgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlpZiAobGV2ZWwgIT0gU09MX1VEUCkKKwkJcmV0dXJuIGNvbXBhdF9pcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBkb191ZHBfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGRvX3VkcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spOwogCWludCB2YWwsIGxlbjsKIAotCWlmIChsZXZlbCAhPSBTT0xfVURQKQotCQlyZXR1cm4gaXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLQogCWlmKGdldF91c2VyKGxlbixvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMTI5Myw2ICsxMzA1LDIzIEBACiAgIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1ZHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpZiAobGV2ZWwgIT0gU09MX1VEUCkKKwkJcmV0dXJuIGlwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJcmV0dXJuIGRvX3VkcF9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGludCBjb21wYXRfdWRwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCSBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJaWYgKGxldmVsICE9IFNPTF9VRFApCisJCXJldHVybiBjb21wYXRfaXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gZG9fdWRwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Cit9CisjZW5kaWYKIC8qKgogICogCXVkcF9wb2xsIC0gd2FpdCBmb3IgYSBVRFAgZXZlbnQuCiAgKglAZmlsZSAtIGZpbGUgc3RydWN0CkBAIC0xMzQxLDIzICsxMzcwLDI3IEBACiB9CiAKIHN0cnVjdCBwcm90byB1ZHBfcHJvdCA9IHsKLSAJLm5hbWUgPQkJIlVEUCIsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLmNsb3NlID0JdWRwX2Nsb3NlLAotCS5jb25uZWN0ID0JaXA0X2RhdGFncmFtX2Nvbm5lY3QsCi0JLmRpc2Nvbm5lY3QgPQl1ZHBfZGlzY29ubmVjdCwKLQkuaW9jdGwgPQl1ZHBfaW9jdGwsCi0JLmRlc3Ryb3kgPQl1ZHBfZGVzdHJveV9zb2NrLAotCS5zZXRzb2Nrb3B0ID0JdWRwX3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQgPQl1ZHBfZ2V0c29ja29wdCwKLQkuc2VuZG1zZyA9CXVkcF9zZW5kbXNnLAotCS5yZWN2bXNnID0JdWRwX3JlY3Ztc2csCi0JLnNlbmRwYWdlID0JdWRwX3NlbmRwYWdlLAotCS5iYWNrbG9nX3JjdiA9CXVkcF9xdWV1ZV9yY3Zfc2tiLAotCS5oYXNoID0JCXVkcF92NF9oYXNoLAotCS51bmhhc2ggPQl1ZHBfdjRfdW5oYXNoLAotCS5nZXRfcG9ydCA9CXVkcF92NF9nZXRfcG9ydCwKLQkub2JqX3NpemUgPQlzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSwKKyAJLm5hbWUJCSAgID0gIlVEUCIsCisJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLAorCS5jbG9zZQkJICAgPSB1ZHBfY2xvc2UsCisJLmNvbm5lY3QJICAgPSBpcDRfZGF0YWdyYW1fY29ubmVjdCwKKwkuZGlzY29ubmVjdAkgICA9IHVkcF9kaXNjb25uZWN0LAorCS5pb2N0bAkJICAgPSB1ZHBfaW9jdGwsCisJLmRlc3Ryb3kJICAgPSB1ZHBfZGVzdHJveV9zb2NrLAorCS5zZXRzb2Nrb3B0CSAgID0gdWRwX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJICAgPSB1ZHBfZ2V0c29ja29wdCwKKwkuc2VuZG1zZwkgICA9IHVkcF9zZW5kbXNnLAorCS5yZWN2bXNnCSAgID0gdWRwX3JlY3Ztc2csCisJLnNlbmRwYWdlCSAgID0gdWRwX3NlbmRwYWdlLAorCS5iYWNrbG9nX3JjdgkgICA9IHVkcF9xdWV1ZV9yY3Zfc2tiLAorCS5oYXNoCQkgICA9IHVkcF92NF9oYXNoLAorCS51bmhhc2gJCSAgID0gdWRwX3Y0X3VuaGFzaCwKKwkuZ2V0X3BvcnQJICAgPSB1ZHBfdjRfZ2V0X3BvcnQsCisJLm9ial9zaXplCSAgID0gc2l6ZW9mKHN0cnVjdCB1ZHBfc29jayksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF91ZHBfc2V0c29ja29wdCwKKwkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfdWRwX2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwppbmRleCA0NWY3YWU1Li5mMjg1YmJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYworKysgYi9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYwpAQCAtMzUsNiArMzUsNyBAQAogCQlpZiAoeGRzdC0+dS5ydC5mbC5vaWYgPT0gZmwtPm9pZiAmJgkvKlhYWCovCiAJCSAgICB4ZHN0LT51LnJ0LmZsLmZsNF9kc3QgPT0gZmwtPmZsNF9kc3QgJiYKIAkgICAgCSAgICB4ZHN0LT51LnJ0LmZsLmZsNF9zcmMgPT0gZmwtPmZsNF9zcmMgJiYKKwkgICAgCSAgICB4ZHN0LT51LnJ0LmZsLmZsNF90b3MgPT0gZmwtPmZsNF90b3MgJiYKIAkJICAgIHhmcm1fYnVuZGxlX29rKHhkc3QsIGZsLCBBRl9JTkVUKSkgewogCQkJZHN0X2Nsb25lKGRzdCk7CiAJCQlicmVhazsKQEAgLTYxLDcgKzYyLDggQEAKIAkJLm5sX3UgPSB7CiAJCQkuaXA0X3UgPSB7CiAJCQkJLnNhZGRyID0gbG9jYWwsCi0JCQkJLmRhZGRyID0gcmVtb3RlCisJCQkJLmRhZGRyID0gcmVtb3RlLAorCQkJCS50b3MgPSBmbC0+Zmw0X3RvcwogCQkJfQogCQl9CiAJfTsKQEAgLTIzMCw2ICsyMzIsNyBAQAogCWZsLT5wcm90byA9IGlwaC0+cHJvdG9jb2w7CiAJZmwtPmZsNF9kc3QgPSBpcGgtPmRhZGRyOwogCWZsLT5mbDRfc3JjID0gaXBoLT5zYWRkcjsKKwlmbC0+Zmw0X3RvcyA9IGlwaC0+dG9zOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9nYXJiYWdlX2NvbGxlY3Qodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jIGIvbmV0L2lwdjQveGZybTRfdHVubmVsLmMKaW5kZXggYWZiYjBkNC4uYjA4ZDU2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfdHVubmVsLmMKKysrIGIvbmV0L2lwdjQveGZybTRfdHVubmVsLmMKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CkBAIC0yNiwxOSArMjcsMTkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCAqaXBpcF9oYW5kbGVyOwotc3RhdGljIERFQ0xBUkVfTVVURVgoeGZybTRfdHVubmVsX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKHhmcm00X3R1bm5lbF9tdXRleCk7CiAKIGludCB4ZnJtNF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IHhmcm1fdHVubmVsICpoYW5kbGVyKQogewogCWludCByZXQ7CiAKLQlkb3duKCZ4ZnJtNF90dW5uZWxfc2VtKTsKKwltdXRleF9sb2NrKCZ4ZnJtNF90dW5uZWxfbXV0ZXgpOwogCXJldCA9IDA7CiAJaWYgKGlwaXBfaGFuZGxlciAhPSBOVUxMKQogCQlyZXQgPSAtRUlOVkFMOwogCWlmICghcmV0KQogCQlpcGlwX2hhbmRsZXIgPSBoYW5kbGVyOwotCXVwKCZ4ZnJtNF90dW5uZWxfc2VtKTsKKwltdXRleF91bmxvY2soJnhmcm00X3R1bm5lbF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDksMTMgKzUwLDEzIEBACiB7CiAJaW50IHJldDsKIAotCWRvd24oJnhmcm00X3R1bm5lbF9zZW0pOworCW11dGV4X2xvY2soJnhmcm00X3R1bm5lbF9tdXRleCk7CiAJcmV0ID0gMDsKIAlpZiAoaXBpcF9oYW5kbGVyICE9IGhhbmRsZXIpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKCFyZXQpCiAJCWlwaXBfaGFuZGxlciA9IE5VTEw7Ci0JdXAoJnhmcm00X3R1bm5lbF9zZW0pOworCW11dGV4X3VubG9jaygmeGZybTRfdHVubmVsX211dGV4KTsKIAogCXN5bmNocm9uaXplX25ldCgpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZwppbmRleCBhYjdhOTEyLi5lNmY4M2I2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9LY29uZmlnCisrKyBiL25ldC9pcHY2L0tjb25maWcKQEAgLTYsOCArNiw2IEBACiBjb25maWcgSVBWNgogCXRyaXN0YXRlICJUaGUgSVB2NiBwcm90b2NvbCIKIAlkZWZhdWx0IG0KLQlzZWxlY3QgQ1JZUFRPIGlmIElQVjZfUFJJVkFDWQotCXNlbGVjdCBDUllQVE9fTUQ1IGlmIElQVjZfUFJJVkFDWQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgY29tcGxlbWVudGFsIHN1cHBvcnQgZm9yIHRoZSBJUCB2ZXJzaW9uIDYuCiAJICBZb3Ugd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGRvIHRyYWRpdGlvbmFsIElQdjQgbmV0d29ya2luZyBhcyB3ZWxsLgpAQCAtMjIsNyArMjAsNyBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlwdjYuCiAKIGNvbmZpZyBJUFY2X1BSSVZBQ1kKLQlib29sICJJUHY2OiBQcml2YWN5IEV4dGVuc2lvbnMgKFJGQyAzMDQxKSBzdXBwb3J0IgorCWJvb2wgIklQdjY6IFByaXZhY3kgRXh0ZW5zaW9ucyBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVBWNgogCS0tLWhlbHAtLS0KIAkgIFByaXZhY3kgRXh0ZW5zaW9ucyBmb3IgU3RhdGVsZXNzIEFkZHJlc3MgQXV0b2NvbmZpZ3VyYXRpb24gaW4gSVB2NgpAQCAtMzAsNiArMjgsOSBAQAogCSAgcHNldWRvLXJhbmRvbSBnbG9iYWwtc2NvcGUgdW5pY2FzdCBhZGRyZXNzKGVzKSB3aWxsIGFzc2lnbmVkIHRvCiAJICB5b3VyIGludGVyZmFjZShzKS4KIAkKKwkgIFdlIHVzZSBvdXIgc3RhbmRhcmQgcHNldWRvIHJhbmRvbSBhbGdvcml0aG0gdG8gZ2VuZXJhdGUgcmFuZG9taXplZAorCSAgaW50ZXJmYWNlIGlkZW50aWZpZXIsIGluc3RlYWQgb2Ygb25lIGRlc2NyaWJlZCBpbiBSRkMgMzA0MS4KKwogCSAgQnkgZGVmYXVsdCwga2VybmVsIGRvIG5vdCBnZW5lcmF0ZSB0ZW1wb3JhcnkgYWRkcmVzc2VzLgogCSAgVG8gdXNlIHRlbXBvcmFyeSBhZGRyZXNzZXMsIGRvCiAJCkBAIC0zNyw2ICszOCwyNSBAQAogCiAJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQ+IGZvciBkZXRhaWxzLgogCitjb25maWcgSVBWNl9ST1VURVJfUFJFRgorCWJvb2wgIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElQVjYKKwktLS1oZWxwLS0tCisJICBSb3V0ZXIgUHJlZmVyZW5jZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gdGhlIFJvdXRlcgorCSAgQWR2ZXJ0aXNlbWVudCBtZXNzYWdlIHRvIGltcHJvdmUgdGhlIGFiaWxpdHkgb2YgaG9zdHMKKwkgIHRvIHBpY2sgbW9yZSBhcHByb3ByaWF0ZSByb3V0ZXIsIGVzcGVjaWFsbHkgd2hlbiB0aGUgaG9zdHMKKwkgIGlzIHBsYWNlZCBpbiBhIG11bHRpLWhvbWVkIG5ldHdvcmsuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBJUFY2X1JPVVRFX0lORk8KKwlib29sICJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBJUFY2X1JPVVRFUl9QUkVGICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgZXhwZXJpbWVudGFsIHN1cHBvcnQgb2YgUm91dGUgSW5mb3JtYXRpb24uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBJTkVUNl9BSAogCXRyaXN0YXRlICJJUHY2OiBBSCB0cmFuc2Zvcm1hdGlvbiIKIAlkZXBlbmRzIG9uIElQVjYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGI3ZDg4MjIuLjAxYzYyYTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtNzgsOCArNzgsNiBAQAogCiAjaWZkZWYgQ09ORklHX0lQVjZfUFJJVkFDWQogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMTAsOCArMTA4LDYgQEAKIHN0YXRpYyB2b2lkIGlwdjZfcmVnZW5fcm5kaWQodW5zaWduZWQgbG9uZyBkYXRhKTsKIAogc3RhdGljIGludCBkZXN5bmNfZmFjdG9yID0gTUFYX0RFU1lOQ19GQUNUT1IgKiBIWjsKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX3RmbSAqbWQ1X3RmbTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWQ1X3RmbV9sb2NrKTsKICNlbmRpZgogCiBzdGF0aWMgaW50IGlwdjZfY291bnRfYWRkcmVzc2VzKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOwpAQCAtMTY5LDYgKzE2NSwxNSBAQAogCS5tYXhfZGVzeW5jX2ZhY3Rvcgk9IE1BWF9ERVNZTkNfRkFDVE9SLAogI2VuZGlmCiAJLm1heF9hZGRyZXNzZXMJCT0gSVBWNl9NQVhfQUREUkVTU0VTLAorCS5hY2NlcHRfcmFfZGVmcnRyCT0gMSwKKwkuYWNjZXB0X3JhX3BpbmZvCT0gMSwKKyNpZmRlZiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRgorCS5hY2NlcHRfcmFfcnRyX3ByZWYJPSAxLAorCS5ydHJfcHJvYmVfaW50ZXJ2YWwJPSA2MCAqIEhaLAorI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk8KKwkuYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4gPSAwLAorI2VuZGlmCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZl9kZmx0ID0gewpAQCAtMTkwLDYgKzE5NSwxNSBAQAogCS5tYXhfZGVzeW5jX2ZhY3Rvcgk9IE1BWF9ERVNZTkNfRkFDVE9SLAogI2VuZGlmCiAJLm1heF9hZGRyZXNzZXMJCT0gSVBWNl9NQVhfQUREUkVTU0VTLAorCS5hY2NlcHRfcmFfZGVmcnRyCT0gMSwKKwkuYWNjZXB0X3JhX3BpbmZvCT0gMSwKKyNpZmRlZiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRgorCS5hY2NlcHRfcmFfcnRyX3ByZWYJPSAxLAorCS5ydHJfcHJvYmVfaW50ZXJ2YWwJPSA2MCAqIEhaLAorI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk8KKwkuYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4gPSAwLAorI2VuZGlmCisjZW5kaWYKIH07CiAKIC8qIElQdjYgV2lsZGNhcmQgQWRkcmVzcyBhbmQgTG9vcGJhY2sgQWRkcmVzcyBkZWZpbmVkIGJ5IFJGQzI1NTMgKi8KQEAgLTMyNyw4NiArMzQxLDgzIEBACiAJaWYgKGRldi0+bXR1IDwgSVBWNl9NSU5fTVRVKQogCQlyZXR1cm4gTlVMTDsKIAotCW5kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5ldDZfZGV2KSwgR0ZQX0tFUk5FTCk7CisgCW5kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5ldDZfZGV2KSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAobmRldikgewotCQltZW1zZXQobmRldiwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0Nl9kZXYpKTsKKyAJaWYgKG5kZXYgPT0gTlVMTCkKKyAJCXJldHVybiBOVUxMOwogCi0JCXJ3bG9ja19pbml0KCZuZGV2LT5sb2NrKTsKLQkJbmRldi0+ZGV2ID0gZGV2OwotCQltZW1jcHkoJm5kZXYtPmNuZiwgJmlwdjZfZGV2Y29uZl9kZmx0LCBzaXplb2YobmRldi0+Y25mKSk7Ci0JCW5kZXYtPmNuZi5tdHU2ID0gZGV2LT5tdHU7Ci0JCW5kZXYtPmNuZi5zeXNjdGwgPSBOVUxMOwotCQluZGV2LT5uZF9wYXJtcyA9IG5laWdoX3Bhcm1zX2FsbG9jKGRldiwgJm5kX3RibCk7Ci0JCWlmIChuZGV2LT5uZF9wYXJtcyA9PSBOVUxMKSB7Ci0JCQlrZnJlZShuZGV2KTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCS8qIFdlIHJlZmVyIHRvIHRoZSBkZXZpY2UgKi8KLQkJZGV2X2hvbGQoZGV2KTsKKwlyd2xvY2tfaW5pdCgmbmRldi0+bG9jayk7CisJbmRldi0+ZGV2ID0gZGV2OworCW1lbWNweSgmbmRldi0+Y25mLCAmaXB2Nl9kZXZjb25mX2RmbHQsIHNpemVvZihuZGV2LT5jbmYpKTsKKwluZGV2LT5jbmYubXR1NiA9IGRldi0+bXR1OworCW5kZXYtPmNuZi5zeXNjdGwgPSBOVUxMOworCW5kZXYtPm5kX3Bhcm1zID0gbmVpZ2hfcGFybXNfYWxsb2MoZGV2LCAmbmRfdGJsKTsKKwlpZiAobmRldi0+bmRfcGFybXMgPT0gTlVMTCkgeworCQlrZnJlZShuZGV2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCS8qIFdlIHJlZmVyIHRvIHRoZSBkZXZpY2UgKi8KKwlkZXZfaG9sZChkZXYpOwogCi0JCWlmIChzbm1wNl9hbGxvY19kZXYobmRldikgPCAwKSB7Ci0JCQlBREJHKChLRVJOX1dBUk5JTkcKLQkJCQkiJXMoKTogY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc3RhdGlzdGljczsgZGV2PSVzLlxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSkpOwotCQkJbmVpZ2hfcGFybXNfcmVsZWFzZSgmbmRfdGJsLCBuZGV2LT5uZF9wYXJtcyk7Ci0JCQluZGV2LT5kZWFkID0gMTsKLQkJCWluNl9kZXZfZmluaXNoX2Rlc3Ryb3kobmRldik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQorCWlmIChzbm1wNl9hbGxvY19kZXYobmRldikgPCAwKSB7CisJCUFEQkcoKEtFUk5fV0FSTklORworCQkJIiVzKCk6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHN0YXRpc3RpY3M7IGRldj0lcy5cbiIsCisJCQlfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSkpOworCQluZWlnaF9wYXJtc19yZWxlYXNlKCZuZF90YmwsIG5kZXYtPm5kX3Bhcm1zKTsKKwkJbmRldi0+ZGVhZCA9IDE7CisJCWluNl9kZXZfZmluaXNoX2Rlc3Ryb3kobmRldik7CisJCXJldHVybiBOVUxMOworCX0KIAotCQlpZiAoc25tcDZfcmVnaXN0ZXJfZGV2KG5kZXYpIDwgMCkgewotCQkJQURCRygoS0VSTl9XQVJOSU5HCi0JCQkJIiVzKCk6IGNhbm5vdCBjcmVhdGUgL3Byb2MvbmV0L2Rldl9zbm1wNi8lc1xuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGRldi0+bmFtZSkpOwotCQkJbmVpZ2hfcGFybXNfcmVsZWFzZSgmbmRfdGJsLCBuZGV2LT5uZF9wYXJtcyk7Ci0JCQluZGV2LT5kZWFkID0gMTsKLQkJCWluNl9kZXZfZmluaXNoX2Rlc3Ryb3kobmRldik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQorCWlmIChzbm1wNl9yZWdpc3Rlcl9kZXYobmRldikgPCAwKSB7CisJCUFEQkcoKEtFUk5fV0FSTklORworCQkJIiVzKCk6IGNhbm5vdCBjcmVhdGUgL3Byb2MvbmV0L2Rldl9zbm1wNi8lc1xuIiwKKwkJCV9fRlVOQ1RJT05fXywgZGV2LT5uYW1lKSk7CisJCW5laWdoX3Bhcm1zX3JlbGVhc2UoJm5kX3RibCwgbmRldi0+bmRfcGFybXMpOworCQluZGV2LT5kZWFkID0gMTsKKwkJaW42X2Rldl9maW5pc2hfZGVzdHJveShuZGV2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JCS8qIE9uZSByZWZlcmVuY2UgZnJvbSBkZXZpY2UuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlCi0JCSAqIHdlIGludm9rZSBfX2lwdjZfcmVnZW5fcm5kaWQoKS4KLQkJICovCi0JCWluNl9kZXZfaG9sZChuZGV2KTsKKwkvKiBPbmUgcmVmZXJlbmNlIGZyb20gZGV2aWNlLiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZQorCSAqIHdlIGludm9rZSBfX2lwdjZfcmVnZW5fcm5kaWQoKS4KKwkgKi8KKwlpbjZfZGV2X2hvbGQobmRldik7CiAKICNpZmRlZiBDT05GSUdfSVBWNl9QUklWQUNZCi0JCWdldF9yYW5kb21fYnl0ZXMobmRldi0+cm5kaWQsIHNpemVvZihuZGV2LT5ybmRpZCkpOwotCQlnZXRfcmFuZG9tX2J5dGVzKG5kZXYtPmVudHJvcHksIHNpemVvZihuZGV2LT5lbnRyb3B5KSk7Ci0JCWluaXRfdGltZXIoJm5kZXYtPnJlZ2VuX3RpbWVyKTsKLQkJbmRldi0+cmVnZW5fdGltZXIuZnVuY3Rpb24gPSBpcHY2X3JlZ2VuX3JuZGlkOwotCQluZGV2LT5yZWdlbl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIG5kZXY7Ci0JCWlmICgoZGV2LT5mbGFncyZJRkZfTE9PUEJBQ0spIHx8Ci0JCSAgICBkZXYtPnR5cGUgPT0gQVJQSFJEX1RVTk5FTCB8fAotCQkgICAgZGV2LT50eXBlID09IEFSUEhSRF9OT05FIHx8Ci0JCSAgICBkZXYtPnR5cGUgPT0gQVJQSFJEX1NJVCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICIlczogRGlzYWJsZWQgUHJpdmFjeSBFeHRlbnNpb25zXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQluZGV2LT5jbmYudXNlX3RlbXBhZGRyID0gLTE7Ci0JCX0gZWxzZSB7Ci0JCQlpbjZfZGV2X2hvbGQobmRldik7Ci0JCQlpcHY2X3JlZ2VuX3JuZGlkKCh1bnNpZ25lZCBsb25nKSBuZGV2KTsKLQkJfQotI2VuZGlmCi0KLQkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKLQkJCW5kZXYtPmlmX2ZsYWdzIHw9IElGX1JFQURZOwotCi0JCXdyaXRlX2xvY2tfYmgoJmFkZHJjb25mX2xvY2spOwotCQlkZXYtPmlwNl9wdHIgPSBuZGV2OwotCQl3cml0ZV91bmxvY2tfYmgoJmFkZHJjb25mX2xvY2spOwotCi0JCWlwdjZfbWNfaW5pdF9kZXYobmRldik7Ci0JCW5kZXYtPnRzdGFtcCA9IGppZmZpZXM7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotCQluZWlnaF9zeXNjdGxfcmVnaXN0ZXIoZGV2LCBuZGV2LT5uZF9wYXJtcywgTkVUX0lQVjYsIAotCQkJCSAgICAgIE5FVF9JUFY2X05FSUdILCAiaXB2NiIsCi0JCQkJICAgICAgJm5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlLAotCQkJCSAgICAgIE5VTEwpOwotCQlhZGRyY29uZl9zeXNjdGxfcmVnaXN0ZXIobmRldiwgJm5kZXYtPmNuZik7Ci0jZW5kaWYKKwlpbml0X3RpbWVyKCZuZGV2LT5yZWdlbl90aW1lcik7CisJbmRldi0+cmVnZW5fdGltZXIuZnVuY3Rpb24gPSBpcHY2X3JlZ2VuX3JuZGlkOworCW5kZXYtPnJlZ2VuX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgbmRldjsKKwlpZiAoKGRldi0+ZmxhZ3MmSUZGX0xPT1BCQUNLKSB8fAorCSAgICBkZXYtPnR5cGUgPT0gQVJQSFJEX1RVTk5FTCB8fAorCSAgICBkZXYtPnR5cGUgPT0gQVJQSFJEX05PTkUgfHwKKwkgICAgZGV2LT50eXBlID09IEFSUEhSRF9TSVQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiBEaXNhYmxlZCBQcml2YWN5IEV4dGVuc2lvbnNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQluZGV2LT5jbmYudXNlX3RlbXBhZGRyID0gLTE7CisJfSBlbHNlIHsKKwkJaW42X2Rldl9ob2xkKG5kZXYpOworCQlpcHY2X3JlZ2VuX3JuZGlkKCh1bnNpZ25lZCBsb25nKSBuZGV2KTsKIAl9CisjZW5kaWYKKworCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCW5kZXYtPmlmX2ZsYWdzIHw9IElGX1JFQURZOworCisJd3JpdGVfbG9ja19iaCgmYWRkcmNvbmZfbG9jayk7CisJZGV2LT5pcDZfcHRyID0gbmRldjsKKwl3cml0ZV91bmxvY2tfYmgoJmFkZHJjb25mX2xvY2spOworCisJaXB2Nl9tY19pbml0X2RldihuZGV2KTsKKwluZGV2LT50c3RhbXAgPSBqaWZmaWVzOworI2lmZGVmIENPTkZJR19TWVNDVEwKKwluZWlnaF9zeXNjdGxfcmVnaXN0ZXIoZGV2LCBuZGV2LT5uZF9wYXJtcywgTkVUX0lQVjYsCisJCQkgICAgICBORVRfSVBWNl9ORUlHSCwgImlwdjYiLAorCQkJICAgICAgJm5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlLAorCQkJICAgICAgTlVMTCk7CisJYWRkcmNvbmZfc3lzY3RsX3JlZ2lzdGVyKG5kZXYsICZuZGV2LT5jbmYpOworI2VuZGlmCiAJcmV0dXJuIG5kZXY7CiB9CiAKQEAgLTUyNCw3ICs1MzUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5ldDZfaWZhZGRyKSwgR0ZQX0FUT01JQyk7CisJaWZhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGluZXQ2X2lmYWRkciksIEdGUF9BVE9NSUMpOwogCiAJaWYgKGlmYSA9PSBOVUxMKSB7CiAJCUFEQkcoKCJpcHY2X2FkZF9hZGRyOiBtYWxsb2MgZmFpbGVkXG4iKSk7CkBAIC01MzgsNyArNTQ5LDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbWVtc2V0KGlmYSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0Nl9pZmFkZHIpKTsKIAlpcHY2X2FkZHJfY29weSgmaWZhLT5hZGRyLCBhZGRyKTsKIAogCXNwaW5fbG9ja19pbml0KCZpZmEtPmxvY2spOwpAQCAtODIyLDcgKzgzMiw3IEBACiAJaW50CQlhZGRyX3R5cGU7CiAJdW5zaWduZWQgaW50CWF0dHJzOwogCWludAkJbWF0Y2hsZW47Ci0JdW5zaWduZWQgaW50CXNjb3BlOworCWludAkJc2NvcGU7CiAJdW5zaWduZWQgaW50CXJ1bGU7CiB9OwogCkBAIC0xMzA1LDUyICsxMzE1LDY3IEBACiAJX19pcHY2X2Rldl9hY19kZWMoaWZwLT5pZGV2LCAmYWRkcik7CiB9CiAKK3N0YXRpYyBpbnQgYWRkcmNvbmZfaWZpZF9ldWk0OCh1OCAqZXVpLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPmFkZHJfbGVuICE9IEVUSF9BTEVOKQorCQlyZXR1cm4gLTE7CisJbWVtY3B5KGV1aSwgZGV2LT5kZXZfYWRkciwgMyk7CisJbWVtY3B5KGV1aSArIDUsIGRldi0+ZGV2X2FkZHIgKyAzLCAzKTsKKworCS8qCisJICogVGhlIHpTZXJpZXMgT1NBIG5ldHdvcmsgY2FyZHMgY2FuIGJlIHNoYXJlZCBhbW9uZyB2YXJpb3VzCisJICogT1MgaW5zdGFuY2VzLCBidXQgdGhlIE9TQSBjYXJkcyBoYXZlIG9ubHkgb25lIE1BQyBhZGRyZXNzLgorCSAqIFRoaXMgbGVhZHMgdG8gZHVwbGljYXRlIGFkZHJlc3MgY29uZmxpY3RzIGluIGNvbmp1bmN0aW9uCisJICogd2l0aCBJUHY2IGlmIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UgdXNlcyB0aGUgc2FtZSBjYXJkLgorCSAqCisJICogVGhlIGRyaXZlciBmb3IgdGhlc2UgY2FyZHMgY2FuIGRlbGl2ZXIgYSB1bmlxdWUgMTYtYml0CisJICogaWRlbnRpZmllciBmb3IgZWFjaCBpbnN0YW5jZSBzaGFyaW5nIHRoZSBzYW1lIGNhcmQuICBJdCBpcworCSAqIHBsYWNlZCBpbnN0ZWFkIG9mIDB4RkZGRSBpbiB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZXIuICBUaGUKKwkgKiAidSIgYml0IG9mIHRoZSBpbnRlcmZhY2UgaWRlbnRpZmllciBpcyBub3QgaW52ZXJ0ZWQgaW4gdGhpcworCSAqIGNhc2UuICBIZW5jZSB0aGUgcmVzdWx0aW5nIGludGVyZmFjZSBpZGVudGlmaWVyIGhhcyBsb2NhbAorCSAqIHNjb3BlIGFjY29yZGluZyB0byBSRkMyMzczLgorCSAqLworCWlmIChkZXYtPmRldl9pZCkgeworCQlldWlbM10gPSAoZGV2LT5kZXZfaWQgPj4gOCkgJiAweEZGOworCQlldWlbNF0gPSBkZXYtPmRldl9pZCAmIDB4RkY7CisJfSBlbHNlIHsKKwkJZXVpWzNdID0gMHhGRjsKKwkJZXVpWzRdID0gMHhGRTsKKwkJZXVpWzBdIF49IDI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZHJjb25mX2lmaWRfYXJjbmV0KHU4ICpldWksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJLyogWFhYOiBpbmhlcml0IEVVSS02NCBmcm9tIG90aGVyIGludGVyZmFjZSAtLSB5b3NoZnVqaSAqLworCWlmIChkZXYtPmFkZHJfbGVuICE9IEFSQ05FVF9BTEVOKQorCQlyZXR1cm4gLTE7CisJbWVtc2V0KGV1aSwgMCwgNyk7CisJZXVpWzddID0gKih1OCopZGV2LT5kZXZfYWRkcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRyY29uZl9pZmlkX2luZmluaWJhbmQodTggKmV1aSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5hZGRyX2xlbiAhPSBJTkZJTklCQU5EX0FMRU4pCisJCXJldHVybiAtMTsKKwltZW1jcHkoZXVpLCBkZXYtPmRldl9hZGRyICsgMTIsIDgpOworCWV1aVswXSB8PSAyOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGlwdjZfZ2VuZXJhdGVfZXVpNjQodTggKmV1aSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzd2l0Y2ggKGRldi0+dHlwZSkgewogCWNhc2UgQVJQSFJEX0VUSEVSOgogCWNhc2UgQVJQSFJEX0ZEREk6CiAJY2FzZSBBUlBIUkRfSUVFRTgwMl9UUjoKLQkJaWYgKGRldi0+YWRkcl9sZW4gIT0gRVRIX0FMRU4pCi0JCQlyZXR1cm4gLTE7Ci0JCW1lbWNweShldWksIGRldi0+ZGV2X2FkZHIsIDMpOwotCQltZW1jcHkoZXVpICsgNSwgZGV2LT5kZXZfYWRkciArIDMsIDMpOwotCi0JCS8qCi0JCSAqIFRoZSB6U2VyaWVzIE9TQSBuZXR3b3JrIGNhcmRzIGNhbiBiZSBzaGFyZWQgYW1vbmcgdmFyaW91cwotCQkgKiBPUyBpbnN0YW5jZXMsIGJ1dCB0aGUgT1NBIGNhcmRzIGhhdmUgb25seSBvbmUgTUFDIGFkZHJlc3MuCi0JCSAqIFRoaXMgbGVhZHMgdG8gZHVwbGljYXRlIGFkZHJlc3MgY29uZmxpY3RzIGluIGNvbmp1bmN0aW9uCi0JCSAqIHdpdGggSVB2NiBpZiBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHVzZXMgdGhlIHNhbWUgY2FyZC4KLQkJICogCi0JCSAqIFRoZSBkcml2ZXIgZm9yIHRoZXNlIGNhcmRzIGNhbiBkZWxpdmVyIGEgdW5pcXVlIDE2LWJpdAotCQkgKiBpZGVudGlmaWVyIGZvciBlYWNoIGluc3RhbmNlIHNoYXJpbmcgdGhlIHNhbWUgY2FyZC4gIEl0IGlzCi0JCSAqIHBsYWNlZCBpbnN0ZWFkIG9mIDB4RkZGRSBpbiB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZXIuICBUaGUKLQkJICogInUiIGJpdCBvZiB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZXIgaXMgbm90IGludmVydGVkIGluIHRoaXMKLQkJICogY2FzZS4gIEhlbmNlIHRoZSByZXN1bHRpbmcgaW50ZXJmYWNlIGlkZW50aWZpZXIgaGFzIGxvY2FsCi0JCSAqIHNjb3BlIGFjY29yZGluZyB0byBSRkMyMzczLgotCQkgKi8KLQkJaWYgKGRldi0+ZGV2X2lkKSB7Ci0JCQlldWlbM10gPSAoZGV2LT5kZXZfaWQgPj4gOCkgJiAweEZGOwotCQkJZXVpWzRdID0gZGV2LT5kZXZfaWQgJiAweEZGOwotCQl9IGVsc2UgewotCQkJZXVpWzNdID0gMHhGRjsKLQkJCWV1aVs0XSA9IDB4RkU7Ci0JCQlldWlbMF0gXj0gMjsKLQkJfQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGFkZHJjb25mX2lmaWRfZXVpNDgoZXVpLCBkZXYpOwogCWNhc2UgQVJQSFJEX0FSQ05FVDoKLQkJLyogWFhYOiBpbmhlcml0IEVVSS02NCBmcm9tIG90aGVyIGludGVyZmFjZSAtLSB5b3NoZnVqaSAqLwotCQlpZiAoZGV2LT5hZGRyX2xlbiAhPSBBUkNORVRfQUxFTikKLQkJCXJldHVybiAtMTsKLQkJbWVtc2V0KGV1aSwgMCwgNyk7Ci0JCWV1aVs3XSA9ICoodTgqKWRldi0+ZGV2X2FkZHI7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gYWRkcmNvbmZfaWZpZF9hcmNuZXQoZXVpLCBkZXYpOwogCWNhc2UgQVJQSFJEX0lORklOSUJBTkQ6Ci0JCWlmIChkZXYtPmFkZHJfbGVuICE9IElORklOSUJBTkRfQUxFTikKLQkJCXJldHVybiAtMTsKLQkJbWVtY3B5KGV1aSwgZGV2LT5kZXZfYWRkciArIDEyLCA4KTsKLQkJZXVpWzBdIHw9IDI7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gYWRkcmNvbmZfaWZpZF9pbmZpbmliYW5kKGV1aSwgZGV2KTsKIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtMTM3NiwzNCArMTQwMSw5IEBACiAvKiAocmUpZ2VuZXJhdGlvbiBvZiByYW5kb21pemVkIGludGVyZmFjZSBpZGVudGlmaWVyIChSRkMgMzA0MSAzLjIsIDMuNSkgKi8KIHN0YXRpYyBpbnQgX19pcHY2X3JlZ2VuX3JuZGlkKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07Ci0KLQlzZ19zZXRfYnVmKCZzZ1swXSwgaWRldi0+ZW50cm9weSwgOCk7Ci0Jc2dfc2V0X2J1Zigmc2dbMV0sIGlkZXYtPndvcmtfZXVpNjQsIDgpOwotCi0JZGV2ID0gaWRldi0+ZGV2OwotCi0JaWYgKGlwdjZfZ2VuZXJhdGVfZXVpNjQoaWRldi0+d29ya19ldWk2NCwgZGV2KSkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiX19pcHY2X3JlZ2VuX3JuZGlkKGlkZXY9JXApOiBjYW5ub3QgZ2V0IEVVSTY0IGlkZW50aWZpZXI7IHVzZSByYW5kb20gYnl0ZXMuXG4iLAotCQkJaWRldik7Ci0JCWdldF9yYW5kb21fYnl0ZXMoaWRldi0+d29ya19ldWk2NCwgc2l6ZW9mKGlkZXYtPndvcmtfZXVpNjQpKTsKLQl9CiByZWdlbjoKLQlzcGluX2xvY2soJm1kNV90Zm1fbG9jayk7Ci0JaWYgKHVubGlrZWx5KG1kNV90Zm0gPT0gTlVMTCkpIHsKLQkJc3Bpbl91bmxvY2soJm1kNV90Zm1fbG9jayk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JY3J5cHRvX2RpZ2VzdF9pbml0KG1kNV90Zm0pOwotCWNyeXB0b19kaWdlc3RfdXBkYXRlKG1kNV90Zm0sIHNnLCAyKTsKLQljcnlwdG9fZGlnZXN0X2ZpbmFsKG1kNV90Zm0sIGlkZXYtPndvcmtfZGlnZXN0KTsKLQlzcGluX3VubG9jaygmbWQ1X3RmbV9sb2NrKTsKLQotCW1lbWNweShpZGV2LT5ybmRpZCwgJmlkZXYtPndvcmtfZGlnZXN0WzBdLCA4KTsKKwlnZXRfcmFuZG9tX2J5dGVzKGlkZXYtPnJuZGlkLCBzaXplb2YoaWRldi0+cm5kaWQpKTsKIAlpZGV2LT5ybmRpZFswXSAmPSB+MHgwMjsKLQltZW1jcHkoaWRldi0+ZW50cm9weSwgJmlkZXYtPndvcmtfZGlnZXN0WzhdLCA4KTsKIAogCS8qCiAJICogPGRyYWZ0LWlldGYtaXBuZ3dnLXRlbXAtYWRkcmVzc2VzLXYyLTAwLnR4dD46CkBAIC0yMTQzLDcgKzIxNDMsNiBAQAogCQlyZXR1cm47CiAJfQogCWlwNl90bmxfYWRkX2xpbmtsb2NhbChpZGV2KTsKLQlhZGRyY29uZl9hZGRfbXJvdXRlKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYWRkcmNvbmZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgCkBAIC0yNjY4LDExICsyNjY3LDEwIEBACiB7CiAJc3RydWN0IHNlcV9maWxlICpzZXE7CiAJaW50IHJjID0gLUVOT01FTTsKLQlzdHJ1Y3QgaWY2X2l0ZXJfc3RhdGUgKnMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOworCXN0cnVjdCBpZjZfaXRlcl9zdGF0ZSAqcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXMpCiAJCWdvdG8gb3V0OwotCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKIAogCXJjID0gc2VxX29wZW4oZmlsZSwgJmlmNl9zZXFfb3BzKTsKIAlpZiAocmMpCkBAIC0zMTMzLDYgKzMxMzEsMTUgQEAKIAlhcnJheVtERVZDT05GX01BWF9ERVNZTkNfRkFDVE9SXSA9IGNuZi0+bWF4X2Rlc3luY19mYWN0b3I7CiAjZW5kaWYKIAlhcnJheVtERVZDT05GX01BWF9BRERSRVNTRVNdID0gY25mLT5tYXhfYWRkcmVzc2VzOworCWFycmF5W0RFVkNPTkZfQUNDRVBUX1JBX0RFRlJUUl0gPSBjbmYtPmFjY2VwdF9yYV9kZWZydHI7CisJYXJyYXlbREVWQ09ORl9BQ0NFUFRfUkFfUElORk9dID0gY25mLT5hY2NlcHRfcmFfcGluZm87CisjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYKKwlhcnJheVtERVZDT05GX0FDQ0VQVF9SQV9SVFJfUFJFRl0gPSBjbmYtPmFjY2VwdF9yYV9ydHJfcHJlZjsKKwlhcnJheVtERVZDT05GX1JUUl9QUk9CRV9JTlRFUlZBTF0gPSBjbmYtPnJ0cl9wcm9iZV9pbnRlcnZhbDsKKyNpZmRlZiBDT05GSVZfSVBWNl9ST1VURV9JTkZPCisJYXJyYXlbREVWQ09ORl9BQ0NFUFRfUkFfUlRfSU5GT19NQVhfUExFTl0gPSBjbmYtPmFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuOworI2VuZGlmCisjZW5kaWYKIH0KIAogc3RhdGljIGludCBpbmV0Nl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCAKQEAgLTM1ODYsNiArMzU5Myw1MSBAQAogCQkJLnByb2NfaGFuZGxlcgk9CSZwcm9jX2RvaW50dmVjLAogCQl9LAogCQl7CisJCQkuY3RsX25hbWUJPQlORVRfSVBWNl9BQ0NFUFRfUkFfREVGUlRSLAorCQkJLnByb2NuYW1lCT0JImFjY2VwdF9yYV9kZWZydHIiLAorICAgICAgICAgCQkuZGF0YQkJPQkmaXB2Nl9kZXZjb25mLmFjY2VwdF9yYV9kZWZydHIsCisJCQkubWF4bGVuCQk9CXNpemVvZihpbnQpLAorCQkJLm1vZGUJCT0JMDY0NCwKKyAgICAgICAgIAkJLnByb2NfaGFuZGxlcgk9CSZwcm9jX2RvaW50dmVjLAorCQl9LAorCQl7CisJCQkuY3RsX25hbWUJPQlORVRfSVBWNl9BQ0NFUFRfUkFfUElORk8sCisJCQkucHJvY25hbWUJPQkiYWNjZXB0X3JhX3BpbmZvIiwKKyAgICAgICAgIAkJLmRhdGEJCT0JJmlwdjZfZGV2Y29uZi5hY2NlcHRfcmFfcGluZm8sCisJCQkubWF4bGVuCQk9CXNpemVvZihpbnQpLAorCQkJLm1vZGUJCT0JMDY0NCwKKyAgICAgICAgIAkJLnByb2NfaGFuZGxlcgk9CSZwcm9jX2RvaW50dmVjLAorCQl9LAorI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGCisJCXsKKwkJCS5jdGxfbmFtZQk9CU5FVF9JUFY2X0FDQ0VQVF9SQV9SVFJfUFJFRiwKKwkJCS5wcm9jbmFtZQk9CSJhY2NlcHRfcmFfcnRyX3ByZWYiLAorCQkJLmRhdGEJCT0JJmlwdjZfZGV2Y29uZi5hY2NlcHRfcmFfcnRyX3ByZWYsCisJCQkubWF4bGVuCQk9CXNpemVvZihpbnQpLAorCQkJLm1vZGUJCT0JMDY0NCwKKwkJCS5wcm9jX2hhbmRsZXIJPQkmcHJvY19kb2ludHZlYywKKwkJfSwKKwkJeworCQkJLmN0bF9uYW1lCT0JTkVUX0lQVjZfUlRSX1BST0JFX0lOVEVSVkFMLAorCQkJLnByb2NuYW1lCT0JInJvdXRlcl9wcm9iZV9pbnRlcnZhbCIsCisJCQkuZGF0YQkJPQkmaXB2Nl9kZXZjb25mLnJ0cl9wcm9iZV9pbnRlcnZhbCwKKwkJCS5tYXhsZW4JCT0Jc2l6ZW9mKGludCksCisJCQkubW9kZQkJPQkwNjQ0LAorCQkJLnByb2NfaGFuZGxlcgk9CSZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJCQkuc3RyYXRlZ3kJPQkmc3lzY3RsX2ppZmZpZXMsCisJCX0sCisjaWZkZWYgQ09ORklWX0lQVjZfUk9VVEVfSU5GTworCQl7CisJCQkuY3RsX25hbWUJPQlORVRfSVBWNl9BQ0NFUFRfUkFfUlRfSU5GT19NQVhfUExFTiwKKwkJCS5wcm9jbmFtZQk9CSJhY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlbiIsCisJCQkuZGF0YQkJPQkmaXB2Nl9kZXZjb25mLmFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuLAorCQkJLm1heGxlbgkJPQlzaXplb2YoaW50KSwKKwkJCS5tb2RlCQk9CTA2NDQsCisJCQkucHJvY19oYW5kbGVyCT0JJnByb2NfZG9pbnR2ZWMsCisJCX0sCisjZW5kaWYKKyNlbmRpZgorCQl7CiAJCQkuY3RsX25hbWUJPQkwLAkvKiBzZW50aW5lbCAqLwogCQl9CiAJfSwKQEAgLTM3NjAsMTMgKzM4MTIsNiBAQAogCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcHY2X2Rldl9ub3RmKTsKIAotI2lmZGVmIENPTkZJR19JUFY2X1BSSVZBQ1kKLQltZDVfdGZtID0gY3J5cHRvX2FsbG9jX3RmbSgibWQ1IiwgMCk7Ci0JaWYgKHVubGlrZWx5KG1kNV90Zm0gPT0gTlVMTCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yIG1kNVxuIik7Ci0jZW5kaWYKLQogCWFkZHJjb25mX3ZlcmlmeSgwKTsKIAlydG5ldGxpbmtfbGlua3NbUEZfSU5FVDZdID0gaW5ldDZfcnRuZXRsaW5rX3RhYmxlOwogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTM4MjksMTEgKzM4NzQsNiBAQAogCiAJcnRubF91bmxvY2soKTsKIAotI2lmZGVmIENPTkZJR19JUFY2X1BSSVZBQ1kKLQljcnlwdG9fZnJlZV90Zm0obWQ1X3RmbSk7Ci0JbWQ1X3RmbSA9IE5VTEw7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcHJvY19uZXRfcmVtb3ZlKCJpZl9pbmV0NiIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCA2Yzk3MTFhLi5lMTk0NTdmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTQ1Niw0NSArNDU2LDUzIEBACiB9CiAKIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc3RyZWFtX29wcyA9IHsKLQkuZmFtaWx5ID0JUEZfSU5FVDYsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLnJlbGVhc2UgPQlpbmV0Nl9yZWxlYXNlLAotCS5iaW5kID0JCWluZXQ2X2JpbmQsCi0JLmNvbm5lY3QgPQlpbmV0X3N0cmVhbV9jb25uZWN0LAkJLyogb2sJCSovCi0JLnNvY2tldHBhaXIgPQlzb2NrX25vX3NvY2tldHBhaXIsCQkvKiBhIGRvIG5vdGhpbmcJKi8KLQkuYWNjZXB0ID0JaW5ldF9hY2NlcHQsCQkJLyogb2sJCSovCi0JLmdldG5hbWUgPQlpbmV0Nl9nZXRuYW1lLCAKLQkucG9sbCA9CQl0Y3BfcG9sbCwJCQkvKiBvawkJKi8KLQkuaW9jdGwgPQlpbmV0Nl9pb2N0bCwJCQkvKiBtdXN0IGNoYW5nZSAgKi8KLQkubGlzdGVuID0JaW5ldF9saXN0ZW4sCQkJLyogb2sJCSovCi0JLnNodXRkb3duID0JaW5ldF9zaHV0ZG93biwJCQkvKiBvawkJKi8KLQkuc2V0c29ja29wdCA9CXNvY2tfY29tbW9uX3NldHNvY2tvcHQsCQkvKiBvawkJKi8KLQkuZ2V0c29ja29wdCA9CXNvY2tfY29tbW9uX2dldHNvY2tvcHQsCQkvKiBvawkJKi8KLQkuc2VuZG1zZyA9CWluZXRfc2VuZG1zZywJCQkvKiBvawkJKi8KLQkucmVjdm1zZyA9CXNvY2tfY29tbW9uX3JlY3Ztc2csCQkvKiBvawkJKi8KLQkubW1hcCA9CQlzb2NrX25vX21tYXAsCi0JLnNlbmRwYWdlID0JdGNwX3NlbmRwYWdlCisJLmZhbWlseQkJICAgPSBQRl9JTkVUNiwKKwkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCisJLnJlbGVhc2UJICAgPSBpbmV0Nl9yZWxlYXNlLAorCS5iaW5kCQkgICA9IGluZXQ2X2JpbmQsCisJLmNvbm5lY3QJICAgPSBpbmV0X3N0cmVhbV9jb25uZWN0LAkvKiBvawkJKi8KKwkuc29ja2V0cGFpcgkgICA9IHNvY2tfbm9fc29ja2V0cGFpciwJLyogYSBkbyBub3RoaW5nCSovCisJLmFjY2VwdAkJICAgPSBpbmV0X2FjY2VwdCwJCS8qIG9rCQkqLworCS5nZXRuYW1lCSAgID0gaW5ldDZfZ2V0bmFtZSwKKwkucG9sbAkJICAgPSB0Y3BfcG9sbCwJCQkvKiBvawkJKi8KKwkuaW9jdGwJCSAgID0gaW5ldDZfaW9jdGwsCQkvKiBtdXN0IGNoYW5nZSAgKi8KKwkubGlzdGVuCQkgICA9IGluZXRfbGlzdGVuLAkJLyogb2sJCSovCisJLnNodXRkb3duCSAgID0gaW5ldF9zaHV0ZG93biwJCS8qIG9rCQkqLworCS5zZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fc2V0c29ja29wdCwJLyogb2sJCSovCisJLmdldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAkvKiBvawkJKi8KKwkuc2VuZG1zZwkgICA9IGluZXRfc2VuZG1zZywJCS8qIG9rCQkqLworCS5yZWN2bXNnCSAgID0gc29ja19jb21tb25fcmVjdm1zZywJLyogb2sJCSovCisJLm1tYXAJCSAgID0gc29ja19ub19tbWFwLAorCS5zZW5kcGFnZQkgICA9IHRjcF9zZW5kcGFnZSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldDZfZGdyYW1fb3BzID0gewotCS5mYW1pbHkgPQlQRl9JTkVUNiwKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkucmVsZWFzZSA9CWluZXQ2X3JlbGVhc2UsCi0JLmJpbmQgPQkJaW5ldDZfYmluZCwKLQkuY29ubmVjdCA9CWluZXRfZGdyYW1fY29ubmVjdCwJCS8qIG9rCQkqLwotCS5zb2NrZXRwYWlyID0Jc29ja19ub19zb2NrZXRwYWlyLAkJLyogYSBkbyBub3RoaW5nCSovCi0JLmFjY2VwdCA9CXNvY2tfbm9fYWNjZXB0LAkJCS8qIGEgZG8gbm90aGluZwkqLwotCS5nZXRuYW1lID0JaW5ldDZfZ2V0bmFtZSwgCi0JLnBvbGwgPQkJdWRwX3BvbGwsCQkJLyogb2sJCSovCi0JLmlvY3RsID0JaW5ldDZfaW9jdGwsCQkJLyogbXVzdCBjaGFuZ2UgICovCi0JLmxpc3RlbiA9CXNvY2tfbm9fbGlzdGVuLAkJCS8qIG9rCQkqLwotCS5zaHV0ZG93biA9CWluZXRfc2h1dGRvd24sCQkJLyogb2sJCSovCi0JLnNldHNvY2tvcHQgPQlzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAkJLyogb2sJCSovCi0JLmdldHNvY2tvcHQgPQlzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAkJLyogb2sJCSovCi0JLnNlbmRtc2cgPQlpbmV0X3NlbmRtc2csCQkJLyogb2sJCSovCi0JLnJlY3Ztc2cgPQlzb2NrX2NvbW1vbl9yZWN2bXNnLAkJLyogb2sJCSovCi0JLm1tYXAgPQkJc29ja19ub19tbWFwLAotCS5zZW5kcGFnZSA9CXNvY2tfbm9fc2VuZHBhZ2UsCisJLmZhbWlseQkJICAgPSBQRl9JTkVUNiwKKwkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCisJLnJlbGVhc2UJICAgPSBpbmV0Nl9yZWxlYXNlLAorCS5iaW5kCQkgICA9IGluZXQ2X2JpbmQsCisJLmNvbm5lY3QJICAgPSBpbmV0X2RncmFtX2Nvbm5lY3QsCS8qIG9rCQkqLworCS5zb2NrZXRwYWlyCSAgID0gc29ja19ub19zb2NrZXRwYWlyLAkvKiBhIGRvIG5vdGhpbmcJKi8KKwkuYWNjZXB0CQkgICA9IHNvY2tfbm9fYWNjZXB0LAkJLyogYSBkbyBub3RoaW5nCSovCisJLmdldG5hbWUJICAgPSBpbmV0Nl9nZXRuYW1lLAorCS5wb2xsCQkgICA9IHVkcF9wb2xsLAkJCS8qIG9rCQkqLworCS5pb2N0bAkJICAgPSBpbmV0Nl9pb2N0bCwJCS8qIG11c3QgY2hhbmdlICAqLworCS5saXN0ZW4JCSAgID0gc29ja19ub19saXN0ZW4sCQkvKiBvawkJKi8KKwkuc2h1dGRvd24JICAgPSBpbmV0X3NodXRkb3duLAkJLyogb2sJCSovCisJLnNldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAkvKiBvawkJKi8KKwkuZ2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX2dldHNvY2tvcHQsCS8qIG9rCQkqLworCS5zZW5kbXNnCSAgID0gaW5ldF9zZW5kbXNnLAkJLyogb2sJCSovCisJLnJlY3Ztc2cJICAgPSBzb2NrX2NvbW1vbl9yZWN2bXNnLAkvKiBvawkJKi8KKwkubW1hcAkJICAgPSBzb2NrX25vX21tYXAsCisJLnNlbmRwYWdlCSAgID0gc29ja19ub19zZW5kcGFnZSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpbmV0Nl9mYW1pbHlfb3BzID0gewpAQCAtNTA1LDI0ICs1MTMsMjggQEAKIAogLyogU2FtZSBhcyBpbmV0Nl9kZ3JhbV9vcHMsIHNhbnMgdWRwX3BvbGwuICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc29ja3Jhd19vcHMgPSB7Ci0JLmZhbWlseSA9CVBGX0lORVQ2LAotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5yZWxlYXNlID0JaW5ldDZfcmVsZWFzZSwKLQkuYmluZCA9CQlpbmV0Nl9iaW5kLAotCS5jb25uZWN0ID0JaW5ldF9kZ3JhbV9jb25uZWN0LAkJLyogb2sJCSovCi0JLnNvY2tldHBhaXIgPQlzb2NrX25vX3NvY2tldHBhaXIsCQkvKiBhIGRvIG5vdGhpbmcJKi8KLQkuYWNjZXB0ID0Jc29ja19ub19hY2NlcHQsCQkJLyogYSBkbyBub3RoaW5nCSovCi0JLmdldG5hbWUgPQlpbmV0Nl9nZXRuYW1lLCAKLQkucG9sbCA9CQlkYXRhZ3JhbV9wb2xsLAkJCS8qIG9rCQkqLwotCS5pb2N0bCA9CWluZXQ2X2lvY3RsLAkJCS8qIG11c3QgY2hhbmdlICAqLwotCS5saXN0ZW4gPQlzb2NrX25vX2xpc3RlbiwJCQkvKiBvawkJKi8KLQkuc2h1dGRvd24gPQlpbmV0X3NodXRkb3duLAkJCS8qIG9rCQkqLwotCS5zZXRzb2Nrb3B0ID0Jc29ja19jb21tb25fc2V0c29ja29wdCwJCS8qIG9rCQkqLwotCS5nZXRzb2Nrb3B0ID0Jc29ja19jb21tb25fZ2V0c29ja29wdCwJCS8qIG9rCQkqLwotCS5zZW5kbXNnID0JaW5ldF9zZW5kbXNnLAkJCS8qIG9rCQkqLwotCS5yZWN2bXNnID0Jc29ja19jb21tb25fcmVjdm1zZywJCS8qIG9rCQkqLwotCS5tbWFwID0JCXNvY2tfbm9fbW1hcCwKLQkuc2VuZHBhZ2UgPQlzb2NrX25vX3NlbmRwYWdlLAorCS5mYW1pbHkJCSAgID0gUEZfSU5FVDYsCisJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLAorCS5yZWxlYXNlCSAgID0gaW5ldDZfcmVsZWFzZSwKKwkuYmluZAkJICAgPSBpbmV0Nl9iaW5kLAorCS5jb25uZWN0CSAgID0gaW5ldF9kZ3JhbV9jb25uZWN0LAkvKiBvawkJKi8KKwkuc29ja2V0cGFpcgkgICA9IHNvY2tfbm9fc29ja2V0cGFpciwJLyogYSBkbyBub3RoaW5nCSovCisJLmFjY2VwdAkJICAgPSBzb2NrX25vX2FjY2VwdCwJCS8qIGEgZG8gbm90aGluZwkqLworCS5nZXRuYW1lCSAgID0gaW5ldDZfZ2V0bmFtZSwKKwkucG9sbAkJICAgPSBkYXRhZ3JhbV9wb2xsLAkJLyogb2sJCSovCisJLmlvY3RsCQkgICA9IGluZXQ2X2lvY3RsLAkJLyogbXVzdCBjaGFuZ2UgICovCisJLmxpc3RlbgkJICAgPSBzb2NrX25vX2xpc3RlbiwJCS8qIG9rCQkqLworCS5zaHV0ZG93bgkgICA9IGluZXRfc2h1dGRvd24sCQkvKiBvawkJKi8KKwkuc2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX3NldHNvY2tvcHQsCS8qIG9rCQkqLworCS5nZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fZ2V0c29ja29wdCwJLyogb2sJCSovCisJLnNlbmRtc2cJICAgPSBpbmV0X3NlbmRtc2csCQkvKiBvawkJKi8KKwkucmVjdm1zZwkgICA9IHNvY2tfY29tbW9uX3JlY3Ztc2csCS8qIG9rCQkqLworCS5tbWFwCQkgICA9IHNvY2tfbm9fbW1hcCwKKwkuc2VuZHBhZ2UJICAgPSBzb2NrX25vX3NlbmRwYWdlLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKKwkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdCwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgcmF3djZfcHJvdG9zdyA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FoNi5jIGIvbmV0L2lwdjYvYWg2LmMKaW5kZXggYzc5MzJjYi4uY2Y1ODI1MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWg2LmMKKysrIGIvbmV0L2lwdjYvYWg2LmMKQEAgLTIxMyw2ICsyMTMsNyBAQAogCWFoLT5yZXNlcnZlZCA9IDA7CiAJYWgtPnNwaSA9IHgtPmlkLnNwaTsKIAlhaC0+c2VxX25vID0gaHRvbmwoKyt4LT5yZXBsYXkub3NlcSk7CisJeGZybV9hZXZlbnRfZG9yZXBsYXkoeCk7CiAJYWhwLT5pY3YoYWhwLCBza2IsIGFoLT5hdXRoX2RhdGEpOwogCiAJZXJyID0gMDsKQEAgLTI3OSw3ICsyODAsNyBAQAogCQlnb3RvIG91dDsKIAltZW1jcHkodG1wX2hkciwgc2tiLT5uaC5yYXcsIGhkcl9sZW4pOwogCWlmIChpcHY2X2NsZWFyX211dGFibGVfb3B0aW9ucyhza2ItPm5oLmlwdjZoLCBoZHJfbGVuKSkKLQkJZ290byBvdXQ7CisJCWdvdG8gZnJlZV9vdXQ7CiAJc2tiLT5uaC5pcHY2aC0+cHJpb3JpdHkgICAgPSAwOwogCXNrYi0+bmguaXB2NmgtPmZsb3dfbGJsWzBdID0gMDsKIAlza2ItPm5oLmlwdjZoLT5mbG93X2xibFsxXSA9IDA7CkBAIC0zNTMsMTIgKzM1NCwxMCBAQAogCWlmICh4LT5lbmNhcCkKIAkJZ290byBlcnJvcjsKIAotCWFocCA9IGttYWxsb2Moc2l6ZW9mKCphaHApLCBHRlBfS0VSTkVMKTsKKwlhaHAgPSBremFsbG9jKHNpemVvZigqYWhwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGFocCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChhaHAsIDAsIHNpemVvZigqYWhwKSk7Ci0KIAlhaHAtPmtleSA9IHgtPmFhbGctPmFsZ19rZXk7CiAJYWhwLT5rZXlfbGVuID0gKHgtPmFhbGctPmFsZ19rZXlfbGVuKzcpLzg7CiAJYWhwLT50Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKHgtPmFhbGctPmFsZ19uYW1lLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FueWNhc3QuYyBiL25ldC9pcHY2L2FueWNhc3QuYwppbmRleCA4NDBhMzNkLi4zOWVjNTI4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hbnljYXN0LmMKKysrIGIvbmV0L2lwdjYvYW55Y2FzdC5jCkBAIC0zMDgsNyArMzA4LDcgQEAKIAkgKglub3QgZm91bmQ6IGNyZWF0ZSBhIG5ldyBvbmUuCiAJICovCiAKLQlhY2EgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWZhY2FkZHI2KSwgR0ZQX0FUT01JQyk7CisJYWNhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlmYWNhZGRyNiksIEdGUF9BVE9NSUMpOwogCiAJaWYgKGFjYSA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0zMjIsOCArMzIyLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbWVtc2V0KGFjYSwgMCwgc2l6ZW9mKHN0cnVjdCBpZmFjYWRkcjYpKTsKLQogCWlwdjZfYWRkcl9jb3B5KCZhY2EtPmFjYV9hZGRyLCBhZGRyKTsKIAlhY2EtPmFjYV9pZGV2ID0gaWRldjsKIAlhY2EtPmFjYV9ydCA9IHJ0OwpAQCAtNTUwLDcgKzU0OCw3IEBACiB7CiAJc3RydWN0IHNlcV9maWxlICpzZXE7CiAJaW50IHJjID0gLUVOT01FTTsKLQlzdHJ1Y3QgYWM2X2l0ZXJfc3RhdGUgKnMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOworCXN0cnVjdCBhYzZfaXRlcl9zdGF0ZSAqcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXMpCiAJCWdvdG8gb3V0OwpAQCAtNTYxLDcgKzU1OSw2IEBACiAKIAlzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc2VxLT5wcml2YXRlID0gczsKLQltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogb3V0X2tmcmVlOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jCmluZGV4IDdiNWI5NGYuLjNkY2FhYzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2VzcDYuYworKysgYi9uZXQvaXB2Ni9lc3A2LmMKQEAgLTk0LDYgKzk0LDcgQEAKIAogCWVzcGgtPnNwaSA9IHgtPmlkLnNwaTsKIAllc3BoLT5zZXFfbm8gPSBodG9ubCgrK3gtPnJlcGxheS5vc2VxKTsKKwl4ZnJtX2FldmVudF9kb3JlcGxheSh4KTsKIAogCWlmIChlc3AtPmNvbmYuaXZsZW4pCiAJCWNyeXB0b19jaXBoZXJfc2V0X2l2KHRmbSwgZXNwLT5jb25mLml2ZWMsIGNyeXB0b190Zm1fYWxnX2l2c2l6ZSh0Zm0pKTsKQEAgLTMwNCwxMiArMzA1LDEwIEBACiAJaWYgKHgtPmVuY2FwKQogCQlnb3RvIGVycm9yOwogCi0JZXNwID0ga21hbGxvYyhzaXplb2YoKmVzcCksIEdGUF9LRVJORUwpOworCWVzcCA9IGt6YWxsb2Moc2l6ZW9mKCplc3ApLCBHRlBfS0VSTkVMKTsKIAlpZiAoZXNwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KGVzcCwgMCwgc2l6ZW9mKCplc3ApKTsKLQogCWlmICh4LT5hYWxnKSB7CiAJCXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYWFsZ19kZXNjOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKaW5kZXggNDE1NGYzYS4uYmI4ZmZiOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwpAQCAtODcsNyArODcsNyBAQAogCQkJCSAgICAgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqKnR3cCkKIHsKIAlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGluZm8gPSBkZWF0aF9yb3ctPmhhc2hpbmZvOwotCWNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJY29uc3Qgc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIgPSAmbnAtPnJjdl9zYWRkcjsKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJm5wLT5kYWRkcjsKQEAgLTEyOSw2ICsxMjksMTAgQEAKIAl9CiAKIHVuaXF1ZToKKwkvKiBNdXN0IHJlY29yZCBudW0gYW5kIHNwb3J0IG5vdy4gT3RoZXJ3aXNlIHdlIHdpbGwgc2VlCisJICogaW4gaGFzaCB0YWJsZSBzb2NrZXQgd2l0aCBhIGZ1bm55IGlkZW50aXR5LiAqLworCWluZXQtPm51bSA9IGxwb3J0OworCWluZXQtPnNwb3J0ID0gaHRvbnMobHBvcnQpOwogCUJVR19UUkFQKHNrX3VuaGFzaGVkKHNrKSk7CiAJX19za19hZGRfbm9kZShzaywgJmhlYWQtPmNoYWluKTsKIAlzay0+c2tfaGFzaCA9IGhhc2g7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggMWJmNmQ5YS4uMmNiNjE0OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCisrKyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMTEwNSw3ICsxMTA1LDYgQEAKIAlpZiAocnQtPnJ0NmlfZmxhZ3MmUlRGX0VYUElSRVMgJiYgcnQtPnJ0NmlfZXhwaXJlcykgewogCQlpZiAodGltZV9hZnRlcihub3csIHJ0LT5ydDZpX2V4cGlyZXMpKSB7CiAJCQlSVDZfVFJBQ0UoImV4cGlyaW5nICVwXG4iLCBydCk7Ci0JCQlydDZfcmVzZXRfZGZsdF9wb2ludGVyKHJ0KTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlnY19hcmdzLm1vcmUrKzsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwppbmRleCA2OWNiZThhLi5mOWNhNjM5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCkBAIC0yODcsMTAgKzI4Nyw5IEBACiAJaW50IGVycjsKIAogCWVyciA9IC1FTk9NRU07Ci0JZmwgPSBrbWFsbG9jKHNpemVvZigqZmwpLCBHRlBfS0VSTkVMKTsKKwlmbCA9IGt6YWxsb2Moc2l6ZW9mKCpmbCksIEdGUF9LRVJORUwpOwogCWlmIChmbCA9PSBOVUxMKQogCQlnb3RvIGRvbmU7Ci0JbWVtc2V0KGZsLCAwLCBzaXplb2YoKmZsKSk7CiAKIAlvbGVuID0gb3B0bGVuIC0gQ01TR19BTElHTihzaXplb2YoKmZyZXEpKTsKIAlpZiAob2xlbiA+IDApIHsKQEAgLTY2Myw3ICs2NjIsNyBAQAogewogCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwogCWludCByYyA9IC1FTk9NRU07Ci0Jc3RydWN0IGlwNmZsX2l0ZXJfc3RhdGUgKnMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOworCXN0cnVjdCBpcDZmbF9pdGVyX3N0YXRlICpzID0ga3phbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghcykKIAkJZ290byBvdXQ7CkBAIC02NzQsNyArNjczLDYgQEAKIAogCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzZXEtPnByaXZhdGUgPSBzOwotCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKIG91dDoKIAlyZXR1cm4gcmM7CiBvdXRfa2ZyZWU6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggZWZhM2U3Mi4uZTQ2MDQ4OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiBpbnQgaXA2X3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsLAogCSAgICAgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsIGludCBpcGZyYWdvaykKIHsKLQlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBzayA/IGluZXQ2X3NrKHNrKSA6IE5VTEw7CisJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBpbjZfYWRkciAqZmlyc3RfaG9wID0gJmZsLT5mbDZfZHN0OwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYi0+ZHN0OwogCXN0cnVjdCBpcHY2aGRyICpoZHI7CkBAIC00OTQsNiArNDk0LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBza19idWZmICpmcmFnOwogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvKilza2ItPmRzdDsKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBza2ItPnNrID8gaW5ldDZfc2soc2tiLT5zaykgOiBOVUxMOwogCXN0cnVjdCBpcHY2aGRyICp0bXBfaGRyOwogCXN0cnVjdCBmcmFnX2hkciAqZmg7CiAJdW5zaWduZWQgaW50IG10dSwgaGxlbiwgbGVmdCwgbGVuOwpAQCAtNTA1LDcgKzUwNiwxMiBAQAogCWhsZW4gPSBpcDZfZmluZF8xc3RmcmFnb3B0KHNrYiwgJnByZXZoZHIpOwogCW5leHRoZHIgPSAqcHJldmhkcjsKIAotCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCkgLSBobGVuIC0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7CisJbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KTsKKwlpZiAobnAgJiYgbnAtPmZyYWdfc2l6ZSA8IG10dSkgeworCQlpZiAobnAtPmZyYWdfc2l6ZSkKKwkJCW10dSA9IG5wLT5mcmFnX3NpemU7CisJfQorCW10dSAtPSBobGVuICsgc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7CiAKIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QpIHsKIAkJaW50IGZpcnN0X2xlbiA9IHNrYl9wYWdlbGVuKHNrYik7CkBAIC03MjcsMjggKzczMywyOSBAQAogCQlpZiAoKmRzdCkgewogCQkJc3RydWN0IHJ0Nl9pbmZvICpydCA9IChzdHJ1Y3QgcnQ2X2luZm8qKSpkc3Q7CiAJCi0JCQkJLyogWWVzLCBjaGVja2luZyByb3V0ZSB2YWxpZGl0eSBpbiBub3QgY29ubmVjdGVkCi0JCQkJICAgY2FzZSBpcyBub3QgdmVyeSBzaW1wbGUuIFRha2UgaW50byBhY2NvdW50LAotCQkJCSAgIHRoYXQgd2UgZG8gbm90IHN1cHBvcnQgcm91dGluZyBieSBzb3VyY2UsIFRPUywKLQkJCQkgICBhbmQgTVNHX0RPTlRST1VURSAJCS0tQU5LICg5ODA3MjYpCi0JCi0JCQkJICAgMS4gSWYgcm91dGUgd2FzIGhvc3Qgcm91dGUsIGNoZWNrIHRoYXQKLQkJCQkgICAgICBjYWNoZWQgZGVzdGluYXRpb24gaXMgY3VycmVudC4KLQkJCQkgICAgICBJZiBpdCBpcyBuZXR3b3JrIHJvdXRlLCB3ZSBzdGlsbCBtYXkKLQkJCQkgICAgICBjaGVjayBpdHMgdmFsaWRpdHkgdXNpbmcgc2F2ZWQgcG9pbnRlcgotCQkJCSAgICAgIHRvIHRoZSBsYXN0IHVzZWQgYWRkcmVzczogZGFkZHJfY2FjaGUuCi0JCQkJICAgICAgV2UgZG8gbm90IHdhbnQgdG8gc2F2ZSB3aG9sZSBhZGRyZXNzIG5vdywKLQkJCQkgICAgICAoYmVjYXVzZSBtYWluIGNvbnN1bWVyIG9mIHRoaXMgc2VydmljZQotCQkJCSAgICAgICBpcyB0Y3AsIHdoaWNoIGhhcyBub3QgdGhpcyBwcm9ibGVtKSwKLQkJCQkgICAgICBzbyB0aGF0IHRoZSBsYXN0IHRyaWNrIHdvcmtzIG9ubHkgb24gY29ubmVjdGVkCi0JCQkJICAgICAgc29ja2V0cy4KLQkJCQkgICAyLiBvaWYgYWxzbyBzaG91bGQgYmUgdGhlIHNhbWUuCi0JCQkJICovCi0JCisJCQkvKiBZZXMsIGNoZWNraW5nIHJvdXRlIHZhbGlkaXR5IGluIG5vdCBjb25uZWN0ZWQKKwkJCSAqIGNhc2UgaXMgbm90IHZlcnkgc2ltcGxlLiBUYWtlIGludG8gYWNjb3VudCwKKwkJCSAqIHRoYXQgd2UgZG8gbm90IHN1cHBvcnQgcm91dGluZyBieSBzb3VyY2UsIFRPUywKKwkJCSAqIGFuZCBNU0dfRE9OVFJPVVRFIAkJLS1BTksgKDk4MDcyNikKKwkJCSAqCisJCQkgKiAxLiBJZiByb3V0ZSB3YXMgaG9zdCByb3V0ZSwgY2hlY2sgdGhhdAorCQkJICogICAgY2FjaGVkIGRlc3RpbmF0aW9uIGlzIGN1cnJlbnQuCisJCQkgKiAgICBJZiBpdCBpcyBuZXR3b3JrIHJvdXRlLCB3ZSBzdGlsbCBtYXkKKwkJCSAqICAgIGNoZWNrIGl0cyB2YWxpZGl0eSB1c2luZyBzYXZlZCBwb2ludGVyCisJCQkgKiAgICB0byB0aGUgbGFzdCB1c2VkIGFkZHJlc3M6IGRhZGRyX2NhY2hlLgorCQkJICogICAgV2UgZG8gbm90IHdhbnQgdG8gc2F2ZSB3aG9sZSBhZGRyZXNzIG5vdywKKwkJCSAqICAgIChiZWNhdXNlIG1haW4gY29uc3VtZXIgb2YgdGhpcyBzZXJ2aWNlCisJCQkgKiAgICBpcyB0Y3AsIHdoaWNoIGhhcyBub3QgdGhpcyBwcm9ibGVtKSwKKwkJCSAqICAgIHNvIHRoYXQgdGhlIGxhc3QgdHJpY2sgd29ya3Mgb25seSBvbiBjb25uZWN0ZWQKKwkJCSAqICAgIHNvY2tldHMuCisJCQkgKiAyLiBvaWYgYWxzbyBzaG91bGQgYmUgdGhlIHNhbWUuCisJCQkgKi8KIAkJCWlmICgoKHJ0LT5ydDZpX2RzdC5wbGVuICE9IDEyOCB8fAotCQkJICAgICAgIWlwdjZfYWRkcl9lcXVhbCgmZmwtPmZsNl9kc3QsICZydC0+cnQ2aV9kc3QuYWRkcikpCisJCQkgICAgICAhaXB2Nl9hZGRyX2VxdWFsKCZmbC0+Zmw2X2RzdCwKKwkJCQkJICAgICAgICZydC0+cnQ2aV9kc3QuYWRkcikpCiAJCQkgICAgICYmIChucC0+ZGFkZHJfY2FjaGUgPT0gTlVMTCB8fAotCQkJCSAhaXB2Nl9hZGRyX2VxdWFsKCZmbC0+Zmw2X2RzdCwgbnAtPmRhZGRyX2NhY2hlKSkpCisJCQkJICFpcHY2X2FkZHJfZXF1YWwoJmZsLT5mbDZfZHN0LAorCQkJCQkJICBucC0+ZGFkZHJfY2FjaGUpKSkKIAkJCSAgICB8fCAoZmwtPm9pZiAmJiBmbC0+b2lmICE9ICgqZHN0KS0+ZGV2LT5pZmluZGV4KSkgewogCQkJCWRzdF9yZWxlYXNlKCpkc3QpOwogCQkJCSpkc3QgPSBOVUxMOwpAQCAtODgyLDcgKzg4OSwxMiBAQAogCQlpbmV0LT5jb3JrLmZsID0gKmZsOwogCQlucC0+Y29yay5ob3BfbGltaXQgPSBobGltaXQ7CiAJCW5wLT5jb3JrLnRjbGFzcyA9IHRjbGFzczsKLQkJaW5ldC0+Y29yay5mcmFnc2l6ZSA9IG10dSA9IGRzdF9tdHUocnQtPnUuZHN0LnBhdGgpOworCQltdHUgPSBkc3RfbXR1KHJ0LT51LmRzdC5wYXRoKTsKKwkJaWYgKG5wLT5mcmFnX3NpemUgPCBtdHUpIHsKKwkJCWlmIChucC0+ZnJhZ19zaXplKQorCQkJCW10dSA9IG5wLT5mcmFnX3NpemU7CisJCX0KKwkJaW5ldC0+Y29yay5mcmFnc2l6ZSA9IG10dTsKIAkJaWYgKGRzdF9hbGxmcmFnKHJ0LT51LmRzdC5wYXRoKSkKIAkJCWluZXQtPmNvcmsuZmxhZ3MgfD0gSVBDT1JLX0FMTEZSQUc7CiAJCWluZXQtPmNvcmsubGVuZ3RoID0gMDsKQEAgLTkzMywxMCArOTQ1LDExIEBACiAJaWYgKCgobGVuZ3RoID4gbXR1KSAmJiAoc2stPnNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSkgJiYKIAkgICAgKHJ0LT51LmRzdC5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9VRk8pKSB7CiAKLQkJaWYoaXA2X3Vmb19hcHBlbmRfZGF0YShzaywgZ2V0ZnJhZywgZnJvbSwgbGVuZ3RoLCBoaF9sZW4sCi0JCQkJZnJhZ2hlYWRlcmxlbiwgdHJhbnNoZHJsZW4sIG10dSwgZmxhZ3MpKQorCQllcnIgPSBpcDZfdWZvX2FwcGVuZF9kYXRhKHNrLCBnZXRmcmFnLCBmcm9tLCBsZW5ndGgsIGhoX2xlbiwKKwkJCQkJICBmcmFnaGVhZGVybGVuLCB0cmFuc2hkcmxlbiwgbXR1LAorCQkJCQkgIGZsYWdzKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7Ci0KIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggOTJlYWQzYy4uNDg1OTc1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJCQltdHUgPSBJUFY2X01JTl9NVFU7CiAJCXQtPmRldi0+bXR1ID0gbXR1OwogCi0JCWlmICgobGVuID0gc2l6ZW9mICgqaXB2NmgpICsgaXB2NmgtPnBheWxvYWRfbGVuKSA+IG10dSkgeworCQlpZiAoKGxlbiA9IHNpemVvZiAoKmlwdjZoKSArIG50b2hzKGlwdjZoLT5wYXlsb2FkX2xlbikpID4gbXR1KSB7CiAJCQlyZWxfdHlwZSA9IElDTVBWNl9QS1RfVE9PQklHOwogCQkJcmVsX2NvZGUgPSAwOwogCQkJcmVsX2luZm8gPSBtdHU7CkBAIC04ODQsNiArODg0LDcgQEAKIAl0LT5wYXJtcy5lbmNhcF9saW1pdCA9IHAtPmVuY2FwX2xpbWl0OwogCXQtPnBhcm1zLmZsb3dpbmZvID0gcC0+Zmxvd2luZm87CiAJdC0+cGFybXMubGluayA9IHAtPmxpbms7CisJaXA2X3RubF9kc3RfcmVzZXQodCk7CiAJaXA2aXA2X3RubF9saW5rX2NvbmZpZyh0KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwY29tcDYuYyBiL25ldC9pcHY2L2lwY29tcDYuYwppbmRleCBkNTExYTg4Li4wMjhiNjM2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcGNvbXA2LmMKKysrIGIvbmV0L2lwdjYvaXBjb21wNi5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIHN0cnVjdCBpcGNvbXA2X3RmbXMgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTU3LDcgKzU4LDcgQEAKIAlpbnQgdXNlcnM7CiB9OwogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChpcGNvbXA2X3Jlc291cmNlX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGlwY29tcDZfcmVzb3VyY2VfbXV0ZXgpOwogc3RhdGljIHZvaWQgKippcGNvbXA2X3NjcmF0Y2hlczsKIHN0YXRpYyBpbnQgaXBjb21wNl9zY3JhdGNoX3VzZXJzOwogc3RhdGljIExJU1RfSEVBRChpcGNvbXA2X3RmbXNfbGlzdCk7CkBAIC0yODYsOCArMjg3LDggQEAKIAogCWZvcl9lYWNoX2NwdShpKSB7CiAJCXZvaWQgKnNjcmF0Y2ggPSAqcGVyX2NwdV9wdHIoc2NyYXRjaGVzLCBpKTsKLQkJaWYgKHNjcmF0Y2gpCi0JCQl2ZnJlZShzY3JhdGNoKTsKKworCQl2ZnJlZShzY3JhdGNoKTsKIAl9CiAKIAlmcmVlX3BlcmNwdShzY3JhdGNoZXMpOwpAQCAtNDA1LDkgKzQwNiw5IEBACiAJaWYgKCFpcGNkKQogCQlyZXR1cm47CiAJeGZybV9zdGF0ZV9kZWxldGVfdHVubmVsKHgpOwotCWRvd24oJmlwY29tcDZfcmVzb3VyY2Vfc2VtKTsKKwltdXRleF9sb2NrKCZpcGNvbXA2X3Jlc291cmNlX211dGV4KTsKIAlpcGNvbXA2X2ZyZWVfZGF0YShpcGNkKTsKLQl1cCgmaXBjb21wNl9yZXNvdXJjZV9zZW0pOworCW11dGV4X3VubG9jaygmaXBjb21wNl9yZXNvdXJjZV9tdXRleCk7CiAJa2ZyZWUoaXBjZCk7CiAKIAl4ZnJtNl90dW5uZWxfZnJlZV9zcGkoKHhmcm1fYWRkcmVzc190ICopJngtPnByb3BzLnNhZGRyKTsKQEAgLTQyNywyMyArNDI4LDIyIEBACiAJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVOT01FTTsKLQlpcGNkID0ga21hbGxvYyhzaXplb2YoKmlwY2QpLCBHRlBfS0VSTkVMKTsKKwlpcGNkID0ga3phbGxvYyhzaXplb2YoKmlwY2QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlwY2QpCiAJCWdvdG8gb3V0OwogCi0JbWVtc2V0KGlwY2QsIDAsIHNpemVvZigqaXBjZCkpOwogCXgtPnByb3BzLmhlYWRlcl9sZW4gPSAwOwogCWlmICh4LT5wcm9wcy5tb2RlKQogCQl4LT5wcm9wcy5oZWFkZXJfbGVuICs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiAJCi0JZG93bigmaXBjb21wNl9yZXNvdXJjZV9zZW0pOworCW11dGV4X2xvY2soJmlwY29tcDZfcmVzb3VyY2VfbXV0ZXgpOwogCWlmICghaXBjb21wNl9hbGxvY19zY3JhdGNoZXMoKSkKIAkJZ290byBlcnJvcjsKIAogCWlwY2QtPnRmbXMgPSBpcGNvbXA2X2FsbG9jX3RmbXMoeC0+Y2FsZy0+YWxnX25hbWUpOwogCWlmICghaXBjZC0+dGZtcykKIAkJZ290byBlcnJvcjsKLQl1cCgmaXBjb21wNl9yZXNvdXJjZV9zZW0pOworCW11dGV4X3VubG9jaygmaXBjb21wNl9yZXNvdXJjZV9tdXRleCk7CiAKIAlpZiAoeC0+cHJvcHMubW9kZSkgewogCQllcnIgPSBpcGNvbXA2X3R1bm5lbF9hdHRhY2goeCk7CkBAIC00NTksMTAgKzQ1OSwxMCBAQAogb3V0OgogCXJldHVybiBlcnI7CiBlcnJvcl90dW5uZWw6Ci0JZG93bigmaXBjb21wNl9yZXNvdXJjZV9zZW0pOworCW11dGV4X2xvY2soJmlwY29tcDZfcmVzb3VyY2VfbXV0ZXgpOwogZXJyb3I6CiAJaXBjb21wNl9mcmVlX2RhdGEoaXBjZCk7Ci0JdXAoJmlwY29tcDZfcmVzb3VyY2Vfc2VtKTsKKwltdXRleF91bmxvY2soJmlwY29tcDZfcmVzb3VyY2VfbXV0ZXgpOwogCWtmcmVlKGlwY2QpOwogCiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggZjcxNDJiYS4uNGMyMGVlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMTA5LDE5ICsxMDksMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGlwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCitzdGF0aWMgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKIAlpbnQgdmFsLCB2YWxib29sOwogCWludCByZXR2ID0gLUVOT1BST1RPT1BUOwogCi0JaWYgKGxldmVsID09IFNPTF9JUCAmJiBzay0+c2tfdHlwZSAhPSBTT0NLX1JBVykKLQkJcmV0dXJuIHVkcF9wcm90LnNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Ci0KLQlpZihsZXZlbCE9U09MX0lQVjYpCi0JCWdvdG8gb3V0OwotCiAJaWYgKG9wdHZhbCA9PSBOVUxMKQogCQl2YWw9MDsKIAllbHNlIGlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopIG9wdHZhbCkpCkBAIC02MTMsMTcgKzYwNyw5IEBACiAJCXJldHYgPSB4ZnJtX3VzZXJfcG9saWN5KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOwogCi0jaWZkZWYgQ09ORklHX05FVEZJTFRFUgotCWRlZmF1bHQ6Ci0JCXJldHYgPSBuZl9zZXRzb2Nrb3B0KHNrLCBQRl9JTkVUNiwgb3B0bmFtZSwgb3B0dmFsLCAKLQkJCQkJICAgIG9wdGxlbik7Ci0JCWJyZWFrOwotI2VuZGlmCi0KIAl9CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAotb3V0OgogCXJldHVybiByZXR2OwogCiBlX2ludmFsOgpAQCAtNjMxLDYgKzYxNyw2NSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitpbnQgaXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJaW50IGVycjsKKworCWlmIChsZXZlbCA9PSBTT0xfSVAgJiYgc2stPnNrX3R5cGUgIT0gU09DS19SQVcpCisJCXJldHVybiB1ZHBfcHJvdC5zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCisJaWYgKGxldmVsICE9IFNPTF9JUFY2KQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCisJZXJyID0gZG9faXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworI2lmZGVmIENPTkZJR19ORVRGSUxURVIKKwkvKiB3ZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHBvc3NpYmxlIEVOT1BST1RPT1BUcyBleGNlcHQgZGVmYXVsdCBjYXNlICovCisJaWYgKGVyciA9PSAtRU5PUFJPVE9PUFQgJiYgb3B0bmFtZSAhPSBJUFY2X0lQU0VDX1BPTElDWSAmJgorCQkJb3B0bmFtZSAhPSBJUFY2X1hGUk1fUE9MSUNZKSB7CisJCWxvY2tfc29jayhzayk7CisJCWVyciA9IG5mX3NldHNvY2tvcHQoc2ssIFBGX0lORVQ2LCBvcHRuYW1lLCBvcHR2YWwsCisJCQkJb3B0bGVuKTsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gZXJyOworfQorCisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitpbnQgY29tcGF0X2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCWludCBlcnI7CisKKwlpZiAobGV2ZWwgPT0gU09MX0lQICYmIHNrLT5za190eXBlICE9IFNPQ0tfUkFXKSB7CisJCWlmICh1ZHBfcHJvdC5jb21wYXRfc2V0c29ja29wdCAhPSBOVUxMKQorCQkJcmV0dXJuIHVkcF9wcm90LmNvbXBhdF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwKKwkJCQkJCQkgIG9wdHZhbCwgb3B0bGVuKTsKKwkJcmV0dXJuIHVkcF9wcm90LnNldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJfQorCisJaWYgKGxldmVsICE9IFNPTF9JUFY2KQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCisJZXJyID0gZG9faXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworI2lmZGVmIENPTkZJR19ORVRGSUxURVIKKwkvKiB3ZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHBvc3NpYmxlIEVOT1BST1RPT1BUcyBleGNlcHQgZGVmYXVsdCBjYXNlICovCisJaWYgKGVyciA9PSAtRU5PUFJPVE9PUFQgJiYgb3B0bmFtZSAhPSBJUFY2X0lQU0VDX1BPTElDWSAmJgorCSAgICBvcHRuYW1lICE9IElQVjZfWEZSTV9QT0xJQ1kpIHsKKwkJbG9ja19zb2NrKHNrKTsKKwkJZXJyID0gY29tcGF0X25mX3NldHNvY2tvcHQoc2ssIFBGX0lORVQ2LCBvcHRuYW1lLAorCQkJCQkgICBvcHR2YWwsIG9wdGxlbik7CisJCXJlbGVhc2Vfc29jayhzayk7CisJfQorI2VuZGlmCisJcmV0dXJuIGVycjsKK30KKworRVhQT1JUX1NZTUJPTChjb21wYXRfaXB2Nl9zZXRzb2Nrb3B0KTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IGlwdjZfZ2V0c29ja29wdF9zdGlja3koc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpoZHIsCiAJCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgbGVuKQogewpAQCAtNjQyLDE3ICs2ODcsMTMgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1pbnQgaXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKK3N0YXRpYyBpbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CiAJaW50IGxlbjsKIAlpbnQgdmFsOwogCi0JaWYgKGxldmVsID09IFNPTF9JUCAmJiBzay0+c2tfdHlwZSAhPSBTT0NLX1JBVykKLQkJcmV0dXJuIHVkcF9wcm90LmdldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Ci0JaWYobGV2ZWwhPVNPTF9JUFY2KQotCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwogCXN3aXRjaCAob3B0bmFtZSkgewpAQCAtODQyLDE3ICs4ODMsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0jaWZkZWYgQ09ORklHX05FVEZJTFRFUgotCQlsb2NrX3NvY2soc2spOwotCQl2YWwgPSBuZl9nZXRzb2Nrb3B0KHNrLCBQRl9JTkVUNiwgb3B0bmFtZSwgb3B0dmFsLCAKLQkJCQkgICAgJmxlbik7Ci0JCXJlbGVhc2Vfc29jayhzayk7Ci0JCWlmICh2YWwgPj0gMCkKLQkJCXZhbCA9IHB1dF91c2VyKGxlbiwgb3B0bGVuKTsKLQkJcmV0dXJuIHZhbDsKLSNlbHNlCiAJCXJldHVybiAtRUlOVkFMOwotI2VuZGlmCiAJfQogCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKGludCksIGxlbik7CiAJaWYocHV0X3VzZXIobGVuLCBvcHRsZW4pKQpAQCAtODYyLDYgKzg5Myw3OCBAQAogCXJldHVybiAwOwogfQogCitpbnQgaXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpbnQgZXJyOworCisJaWYgKGxldmVsID09IFNPTF9JUCAmJiBzay0+c2tfdHlwZSAhPSBTT0NLX1JBVykKKwkJcmV0dXJuIHVkcF9wcm90LmdldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisKKwlpZihsZXZlbCAhPSBTT0xfSVBWNikKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworCWVyciA9IGRvX2lwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSCisJLyogd2UgbmVlZCB0byBleGNsdWRlIGFsbCBwb3NzaWJsZSBFSU5WQUxzIGV4Y2VwdCBkZWZhdWx0IGNhc2UgKi8KKwlpZiAoZXJyID09IC1FSU5WQUwgJiYgb3B0bmFtZSAhPSBJUFY2X0FERFJGT1JNICYmCisJCQlvcHRuYW1lICE9IE1DQVNUX01TRklMVEVSKSB7CisJCWludCBsZW47CisKKwkJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWxvY2tfc29jayhzayk7CisJCWVyciA9IG5mX2dldHNvY2tvcHQoc2ssIFBGX0lORVQ2LCBvcHRuYW1lLCBvcHR2YWwsCisJCQkJJmxlbik7CisJCXJlbGVhc2Vfc29jayhzayk7CisJCWlmIChlcnIgPj0gMCkKKwkJCWVyciA9IHB1dF91c2VyKGxlbiwgb3B0bGVuKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IGNvbXBhdF9pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCWludCBlcnI7CisKKwlpZiAobGV2ZWwgPT0gU09MX0lQICYmIHNrLT5za190eXBlICE9IFNPQ0tfUkFXKSB7CisJCWlmICh1ZHBfcHJvdC5jb21wYXRfZ2V0c29ja29wdCAhPSBOVUxMKQorCQkJcmV0dXJuIHVkcF9wcm90LmNvbXBhdF9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwKKwkJCQkJCQkgIG9wdHZhbCwgb3B0bGVuKTsKKwkJcmV0dXJuIHVkcF9wcm90LmdldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJfQorCisJaWYgKGxldmVsICE9IFNPTF9JUFY2KQorCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCisJZXJyID0gZG9faXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworI2lmZGVmIENPTkZJR19ORVRGSUxURVIKKwkvKiB3ZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHBvc3NpYmxlIEVJTlZBTHMgZXhjZXB0IGRlZmF1bHQgY2FzZSAqLworCWlmIChlcnIgPT0gLUVJTlZBTCAmJiBvcHRuYW1lICE9IElQVjZfQUREUkZPUk0gJiYKKwkJCW9wdG5hbWUgIT0gTUNBU1RfTVNGSUxURVIpIHsKKwkJaW50IGxlbjsKKworCQlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJbG9ja19zb2NrKHNrKTsKKwkJZXJyID0gY29tcGF0X25mX2dldHNvY2tvcHQoc2ssIFBGX0lORVQ2LAorCQkJCQkgICBvcHRuYW1lLCBvcHR2YWwsICZsZW4pOworCQlyZWxlYXNlX3NvY2soc2spOworCQlpZiAoZXJyID49IDApCisJCQllcnIgPSBwdXRfdXNlcihsZW4sIG9wdGxlbik7CisJfQorI2VuZGlmCisJcmV0dXJuIGVycjsKK30KKworRVhQT1JUX1NZTUJPTChjb21wYXRfaXB2Nl9nZXRzb2Nrb3B0KTsKKyNlbmRpZgorCiB2b2lkIF9faW5pdCBpcHY2X3BhY2tldF9pbml0KHZvaWQpCiB7CiAJZGV2X2FkZF9wYWNrKCZpcHY2X3BhY2tldF90eXBlKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L21jYXN0LmMgYi9uZXQvaXB2Ni9tY2FzdC5jCmluZGV4IDgwN2MwMjEuLjZlODcxYWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L21jYXN0LmMKKysrIGIvbmV0L2lwdjYvbWNhc3QuYwpAQCAtNzY3LDEwICs3NjcsMTAgQEAKIAkgKiBmb3IgZGVsZXRlZCBpdGVtcyBhbGxvd3MgY2hhbmdlIHJlcG9ydHMgdG8gdXNlIGNvbW1vbiBjb2RlIHdpdGgKIAkgKiBub24tZGVsZXRlZCBvciBxdWVyeS1yZXNwb25zZSBNQ0Ency4KIAkgKi8KLQlwbWMgPSBrbWFsbG9jKHNpemVvZigqcG1jKSwgR0ZQX0FUT01JQyk7CisJcG1jID0ga3phbGxvYyhzaXplb2YoKnBtYyksIEdGUF9BVE9NSUMpOwogCWlmICghcG1jKQogCQlyZXR1cm47Ci0JbWVtc2V0KHBtYywgMCwgc2l6ZW9mKCpwbWMpKTsKKwogCXNwaW5fbG9ja19iaCgmaW0tPm1jYV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcG1jLT5tY2FfbG9jayk7CiAJcG1jLT5pZGV2ID0gaW0tPmlkZXY7CkBAIC04OTMsNyArODkzLDcgQEAKIAkgKglub3QgZm91bmQ6IGNyZWF0ZSBhIG5ldyBvbmUuCiAJICovCiAKLQltYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZm1jYWRkcjYpLCBHRlBfQVRPTUlDKTsKKwltYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZm1jYWRkcjYpLCBHRlBfQVRPTUlDKTsKIAogCWlmIChtYyA9PSBOVUxMKSB7CiAJCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CkBAIC05MDEsNyArOTAxLDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtc2V0KG1jLCAwLCBzaXplb2Yoc3RydWN0IGlmbWNhZGRyNikpOwogCWluaXRfdGltZXIoJm1jLT5tY2FfdGltZXIpOwogCW1jLT5tY2FfdGltZXIuZnVuY3Rpb24gPSBpZ21wNl90aW1lcl9oYW5kbGVyOwogCW1jLT5tY2FfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBtYzsKQEAgLTE5MzQsMTAgKzE5MzMsMTAgQEAKIAkJcHNmX3ByZXYgPSBwc2Y7CiAJfQogCWlmICghcHNmKSB7Ci0JCXBzZiA9IGttYWxsb2Moc2l6ZW9mKCpwc2YpLCBHRlBfQVRPTUlDKTsKKwkJcHNmID0ga3phbGxvYyhzaXplb2YoKnBzZiksIEdGUF9BVE9NSUMpOwogCQlpZiAoIXBzZikKIAkJCXJldHVybiAtRU5PQlVGUzsKLQkJbWVtc2V0KHBzZiwgMCwgc2l6ZW9mKCpwc2YpKTsKKwogCQlwc2YtPnNmX2FkZHIgPSAqcHNmc3JjOwogCQlpZiAocHNmX3ByZXYpIHsKIAkJCXBzZl9wcmV2LT5zZl9uZXh0ID0gcHNmOwpAQCAtMjQzMSw3ICsyNDMwLDcgQEAKIHsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKIAlpbnQgcmMgPSAtRU5PTUVNOwotCXN0cnVjdCBpZ21wNl9tY19pdGVyX3N0YXRlICpzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgaWdtcDZfbWNfaXRlcl9zdGF0ZSAqcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXMpCiAJCWdvdG8gb3V0OwpAQCAtMjQ0Miw3ICsyNDQxLDYgQEAKIAogCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzZXEtPnByaXZhdGUgPSBzOwotCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKIG91dDoKIAlyZXR1cm4gcmM7CiBvdXRfa2ZyZWU6CkBAIC0yNjA2LDcgKzI2MDQsNyBAQAogewogCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwogCWludCByYyA9IC1FTk9NRU07Ci0Jc3RydWN0IGlnbXA2X21jZl9pdGVyX3N0YXRlICpzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgaWdtcDZfbWNmX2l0ZXJfc3RhdGUgKnMgPSBremFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOwogCQogCWlmICghcykKIAkJZ290byBvdXQ7CkBAIC0yNjE3LDcgKzI2MTUsNiBAQAogCiAJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXNlcS0+cHJpdmF0ZSA9IHM7Ci0JbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOwogb3V0OgogCXJldHVybiByYzsKIG91dF9rZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IGNiODg1NmIuLmRmYTIwZDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKKysrIGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMTU2LDcgKzE1NiwxMSBAQAogCiAvKiBORCBvcHRpb25zICovCiBzdHJ1Y3QgbmRpc2Nfb3B0aW9ucyB7Ci0Jc3RydWN0IG5kX29wdF9oZHIgKm5kX29wdF9hcnJheVtfX05EX09QVF9NQVhdOworCXN0cnVjdCBuZF9vcHRfaGRyICpuZF9vcHRfYXJyYXlbX19ORF9PUFRfQVJSQVlfTUFYXTsKKyNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCisJc3RydWN0IG5kX29wdF9oZHIgKm5kX29wdHNfcmk7CisJc3RydWN0IG5kX29wdF9oZHIgKm5kX29wdHNfcmlfZW5kOworI2VuZGlmCiB9OwogCiAjZGVmaW5lIG5kX29wdHNfc3JjX2xsYWRkcgluZF9vcHRfYXJyYXlbTkRfT1BUX1NPVVJDRV9MTF9BRERSXQpAQCAtMjU1LDYgKzI1OSwxMyBAQAogCQkJaWYgKG5kb3B0cy0+bmRfb3B0X2FycmF5W25kX29wdC0+bmRfb3B0X3R5cGVdID09IDApCiAJCQkJbmRvcHRzLT5uZF9vcHRfYXJyYXlbbmRfb3B0LT5uZF9vcHRfdHlwZV0gPSBuZF9vcHQ7CiAJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCisJCWNhc2UgTkRfT1BUX1JPVVRFX0lORk86CisJCQluZG9wdHMtPm5kX29wdHNfcmlfZW5kID0gbmRfb3B0OworCQkJaWYgKCFuZG9wdHMtPm5kX29wdHNfcmkpCisJCQkJbmRvcHRzLT5uZF9vcHRzX3JpID0gbmRfb3B0OworCQkJYnJlYWs7CisjZW5kaWYKIAkJZGVmYXVsdDoKIAkJCS8qCiAJCQkgKiBVbmtub3duIG9wdGlvbnMgbXVzdCBiZSBzaWxlbnRseSBpZ25vcmVkLApAQCAtMTAxOSwxMCArMTAzMCwxMSBAQAogICAgICAgICBzdHJ1Y3QgcmFfbXNnICpyYV9tc2cgPSAoc3RydWN0IHJhX21zZyAqKSBza2ItPmgucmF3OwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2OwotCXN0cnVjdCBydDZfaW5mbyAqcnQ7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IE5VTEw7CiAJaW50IGxpZmV0aW1lOwogCXN0cnVjdCBuZGlzY19vcHRpb25zIG5kb3B0czsKIAlpbnQgb3B0bGVuOworCXVuc2lnbmVkIGludCBwcmVmID0gMDsKIAogCV9fdTggKiBvcHQgPSAoX191OCAqKShyYV9tc2cgKyAxKTsKIApAQCAtMTA4MSw4ICsxMDkzLDE5IEBACiAJCQkJKHJhX21zZy0+aWNtcGguaWNtcDZfYWRkcmNvbmZfb3RoZXIgPwogCQkJCQlJRl9SQV9PVEhFUkNPTkYgOiAwKTsKIAorCWlmICghaW42X2Rldi0+Y25mLmFjY2VwdF9yYV9kZWZydHIpCisJCWdvdG8gc2tpcF9kZWZydHI7CisKIAlsaWZldGltZSA9IG50b2hzKHJhX21zZy0+aWNtcGguaWNtcDZfcnRfbGlmZXRpbWUpOwogCisjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYKKwlwcmVmID0gcmFfbXNnLT5pY21waC5pY21wNl9yb3V0ZXJfcHJlZjsKKwkvKiAxMGIgaXMgaGFuZGxlZCBhcyBpZiBpdCB3ZXJlIDAwYiAobWVkaXVtKSAqLworCWlmIChwcmVmID09IElDTVBWNl9ST1VURVJfUFJFRl9JTlZBTElEIHx8CisJICAgIGluNl9kZXYtPmNuZi5hY2NlcHRfcmFfcnRyX3ByZWYpCisJCXByZWYgPSBJQ01QVjZfUk9VVEVSX1BSRUZfTUVESVVNOworI2VuZGlmCisKIAlydCA9IHJ0Nl9nZXRfZGZsdF9yb3V0ZXIoJnNrYi0+bmguaXB2NmgtPnNhZGRyLCBza2ItPmRldik7CiAKIAlpZiAocnQpCkBAIC0xMDk4LDcgKzExMjEsNyBAQAogCQlORF9QUklOVEszKEtFUk5fREVCVUcKIAkJCSAgICJJQ01QdjYgUkE6IGFkZGluZyBkZWZhdWx0IHJvdXRlci5cbiIpOwogCi0JCXJ0ID0gcnQ2X2FkZF9kZmx0X3JvdXRlcigmc2tiLT5uaC5pcHY2aC0+c2FkZHIsIHNrYi0+ZGV2KTsKKwkJcnQgPSBydDZfYWRkX2RmbHRfcm91dGVyKCZza2ItPm5oLmlwdjZoLT5zYWRkciwgc2tiLT5kZXYsIHByZWYpOwogCQlpZiAocnQgPT0gTlVMTCkgewogCQkJTkRfUFJJTlRLMChLRVJOX0VSUgogCQkJCSAgICJJQ01QdjYgUkE6ICVzKCkgZmFpbGVkIHRvIGFkZCBkZWZhdWx0IHJvdXRlLlxuIiwKQEAgLTExMTcsNiArMTE0MCw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJbmVpZ2gtPmZsYWdzIHw9IE5URl9ST1VURVI7CisJfSBlbHNlIGlmIChydCkgeworCQlydC0+cnQ2aV9mbGFncyB8PSAocnQtPnJ0NmlfZmxhZ3MgJiB+UlRGX1BSRUZfTUFTSykgfCBSVEZfUFJFRihwcmVmKTsKIAl9CiAKIAlpZiAocnQpCkBAIC0xMTI4LDYgKzExNTMsOCBAQAogCQkJcnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9IT1BMSU1JVC0xXSA9IHJhX21zZy0+aWNtcGguaWNtcDZfaG9wX2xpbWl0OwogCX0KIAorc2tpcF9kZWZydHI6CisKIAkvKgogCSAqCVVwZGF0ZSBSZWFjaGFibGUgVGltZSBhbmQgUmV0cmFucyBUaW1lcgogCSAqLwpAQCAtMTE4Niw3ICsxMjEzLDIxIEBACiAJCQkgICAgIE5FSUdIX1VQREFURV9GX0lTUk9VVEVSKTsKIAl9CiAKLQlpZiAobmRvcHRzLm5kX29wdHNfcGkpIHsKKyNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCisJaWYgKGluNl9kZXYtPmNuZi5hY2NlcHRfcmFfcnRyX3ByZWYgJiYgbmRvcHRzLm5kX29wdHNfcmkpIHsKKwkJc3RydWN0IG5kX29wdF9oZHIgKnA7CisJCWZvciAocCA9IG5kb3B0cy5uZF9vcHRzX3JpOworCQkgICAgIHA7CisJCSAgICAgcCA9IG5kaXNjX25leHRfb3B0aW9uKHAsIG5kb3B0cy5uZF9vcHRzX3JpX2VuZCkpIHsKKwkJCWlmICgoKHN0cnVjdCByb3V0ZV9pbmZvICopcCktPnByZWZpeF9sZW4gPiBpbjZfZGV2LT5jbmYuYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4pCisJCQkJY29udGludWU7CisJCQlydDZfcm91dGVfcmN2KHNrYi0+ZGV2LCAodTgqKXAsIChwLT5uZF9vcHRfbGVuKSA8PCAzLAorCQkJCSAgICAgICZza2ItPm5oLmlwdjZoLT5zYWRkcik7CisJCX0KKwl9CisjZW5kaWYKKworCWlmIChpbjZfZGV2LT5jbmYuYWNjZXB0X3JhX3BpbmZvICYmIG5kb3B0cy5uZF9vcHRzX3BpKSB7CiAJCXN0cnVjdCBuZF9vcHRfaGRyICpwOwogCQlmb3IgKHAgPSBuZG9wdHMubmRfb3B0c19waTsKIAkJICAgICBwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAyZDZmOGVjLi45OGY3ODc1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMTMzLDE2ICsxMzMsNiBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIElQNl9ORl9NQVRDSF9QT0xJQ1kKLQl0cmlzdGF0ZSAiSVBzZWMgcG9saWN5IG1hdGNoIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgJiYgWEZSTQotCWhlbHAKLQkgIFBvbGljeSBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlCi0JICBJUHNlYyBwb2xpY3kgdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGVjYXBzdWxhdGlvbi93aWxsCi0JICBiZSB1c2VkIGR1cmluZyBlbmNhcHN1bGF0aW9uLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogIyBUaGUgdGFyZ2V0cwogY29uZmlnIElQNl9ORl9GSUxURVIKIAl0cmlzdGF0ZSAiUGFja2V0IGZpbHRlcmluZyIKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCBkYjYwNzNjLi44NDM2YTFhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC05LDcgKzksNiBAQAogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSKSArPSBpcDZ0X2lwdjZoZWFkZXIubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHKSArPSBpcDZ0X2ZyYWcubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUCkgKz0gaXA2dF9lc3AubyBpcDZ0X2FoLm8KLW9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfUE9MSUNZKSArPSBpcDZ0X3BvbGljeS5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0VVSTY0KSArPSBpcDZ0X2V1aTY0Lm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUKSArPSBpcDZ0X211bHRpcG9ydC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX09XTkVSKSArPSBpcDZ0X293bmVyLm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwppbmRleCA1MDI3YmJlLi4zNDRlYWIzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9yb3V0ZS5oPgpAQCAtNjUsNyArNjYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBxdWV1ZV91c2VyX2Ryb3BwZWQgPSAwOwogc3RhdGljIHN0cnVjdCBzb2NrICppcHFubDsKIHN0YXRpYyBMSVNUX0hFQUQocXVldWVfbGlzdCk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChpcHFubF9zZW0pOworc3RhdGljIERFRklORV9NVVRFWChpcHFubF9tdXRleCk7CiAKIHN0YXRpYyB2b2lkCiBpcHFfaXNzdWVfdmVyZGljdChzdHJ1Y3QgaXBxX3F1ZXVlX2VudHJ5ICplbnRyeSwgaW50IHZlcmRpY3QpCkBAIC01MjIsNyArNTIzLDcgQEAKIAl3cml0ZV91bmxvY2tfYmgoJnF1ZXVlX2xvY2spOwogCQogCXN0YXR1cyA9IGlwcV9yZWNlaXZlX3BlZXIoTkxNU0dfREFUQShubGgpLCB0eXBlLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2tibGVuIC0gTkxNU0dfTEVOR1RIKDApKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIG5sbXNnbGVuIC0gTkxNU0dfTEVOR1RIKDApKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJUkNWX1NLQl9GQUlMKHN0YXR1cyk7CiAJCQpAQCAtNTM3LDcgKzUzOCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgcWxlbjsKIAotCWRvd24oJmlwcW5sX3NlbSk7CisJbXV0ZXhfbG9jaygmaXBxbmxfbXV0ZXgpOwogCQkJCiAJZm9yIChxbGVuID0gc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpOyBxbGVuOyBxbGVuLS0pIHsKIAkJc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKQEAgLTU0NSw3ICs1NDYsNyBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiAJCQotCXVwKCZpcHFubF9zZW0pOworCW11dGV4X3VubG9jaygmaXBxbmxfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50CkBAIC03MDQsOCArNzA1LDggQEAKIAkKIGNsZWFudXBfaXBxbmw6CiAJc29ja19yZWxlYXNlKGlwcW5sLT5za19zb2NrZXQpOwotCWRvd24oJmlwcW5sX3NlbSk7Ci0JdXAoJmlwcW5sX3NlbSk7CisJbXV0ZXhfbG9jaygmaXBxbmxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaXBxbmxfbXV0ZXgpOwogCQogY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOgogCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmaXBxX25sX25vdGlmaWVyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDc0ZmY1NmMuLmRiM2M5YWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogCkBAIC05NCwxOSArOTQsNiBAQAogI2RlZmluZSB1cCh4KSBkbyB7IHByaW50aygiVVA6JXU6IiAjeCAiXG4iLCBfX0xJTkVfXyk7IHVwKHgpOyB9IHdoaWxlKDApCiAjZW5kaWYKIAotaW50Ci1pcDZfbWFza2VkX2FkZHJjbXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICptYXNrLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjIpCi17Ci0JaW50IGk7Ci0JZm9yKCBpID0gMDsgaSA8IDE2OyBpKyspewotCQlpZigoYWRkcjEtPnM2X2FkZHJbaV0gJiBtYXNrLT5zNl9hZGRyW2ldKSAhPSAKLQkJICAgKGFkZHIyLT5zNl9hZGRyW2ldICYgbWFzay0+czZfYWRkcltpXSkpCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIENoZWNrIGZvciBhbiBleHRlbnNpb24gKi8KIGludCAKIGlwNnRfZXh0X2hkcih1OCBuZXh0aGRyKQpAQCAtMTM1LDEwICsxMjIsMTAgQEAKIAogI2RlZmluZSBGV0lOVihib29sLGludmZsZykgKChib29sKSBeICEhKGlwNmluZm8tPmludmZsYWdzICYgaW52ZmxnKSkKIAotCWlmIChGV0lOVihpcDZfbWFza2VkX2FkZHJjbXAoJmlwdjYtPnNhZGRyLCAmaXA2aW5mby0+c21zaywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpcDZpbmZvLT5zcmMpLCBJUDZUX0lOVl9TUkNJUCkKLQkgICAgfHwgRldJTlYoaXA2X21hc2tlZF9hZGRyY21wKCZpcHY2LT5kYWRkciwgJmlwNmluZm8tPmRtc2ssCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXA2aW5mby0+ZHN0KSwgSVA2VF9JTlZfRFNUSVApKSB7CisJaWYgKEZXSU5WKGlwdjZfbWFza2VkX2FkZHJfY21wKCZpcHY2LT5zYWRkciwgJmlwNmluZm8tPnNtc2ssCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpcDZpbmZvLT5zcmMpLCBJUDZUX0lOVl9TUkNJUCkKKwkgICAgfHwgRldJTlYoaXB2Nl9tYXNrZWRfYWRkcl9jbXAoJmlwdjYtPmRhZGRyLCAmaXA2aW5mby0+ZG1zaywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwNmluZm8tPmRzdCksIElQNlRfSU5WX0RTVElQKSkgewogCQlkcHJpbnRmKCJTb3VyY2Ugb3IgZGVzdCBtaXNtYXRjaC5cbiIpOwogLyoKIAkJZHByaW50ZigiU1JDOiAldS4gTWFzazogJXUuIFRhcmdldDogJXUuJXNcbiIsIGlwLT5zYWRkciwKQEAgLTIzMiw2ICsyMTksNyBAQAogCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkgIHVuc2lnbmVkIGludCBob29rbnVtLAorCSAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCSAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sCiAJICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTI1MSw3ICsyMzksNyBAQAogCSAgICAgaW50ICpob3Rkcm9wKQogewogCS8qIFN0b3AgaXRlcmF0aW9uIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggKi8KLQlpZiAoIW0tPnUua2VybmVsLm1hdGNoLT5tYXRjaChza2IsIGluLCBvdXQsIG0tPmRhdGEsCisJaWYgKCFtLT51Lmtlcm5lbC5tYXRjaC0+bWF0Y2goc2tiLCBpbiwgb3V0LCBtLT51Lmtlcm5lbC5tYXRjaCwgbS0+ZGF0YSwKIAkJCQkgICAgICBvZmZzZXQsIHByb3RvZmYsIGhvdGRyb3ApKQogCQlyZXR1cm4gMTsKIAllbHNlCkBAIC0zNzMsNiArMzYxLDcgQEAKIAkJCQl2ZXJkaWN0ID0gdC0+dS5rZXJuZWwudGFyZ2V0LT50YXJnZXQocHNrYiwKIAkJCQkJCQkJICAgICBpbiwgb3V0LAogCQkJCQkJCQkgICAgIGhvb2ssCisJCQkJCQkJCSAgICAgdC0+dS5rZXJuZWwudGFyZ2V0LAogCQkJCQkJCQkgICAgIHQtPmRhdGEsCiAJCQkJCQkJCSAgICAgdXNlcmRhdGEpOwogCkBAIC01MzEsNyArNTIwLDcgQEAKIAkJcmV0dXJuIDE7CiAKIAlpZiAobS0+dS5rZXJuZWwubWF0Y2gtPmRlc3Ryb3kpCi0JCW0tPnUua2VybmVsLm1hdGNoLT5kZXN0cm95KG0tPmRhdGEsCisJCW0tPnUua2VybmVsLm1hdGNoLT5kZXN0cm95KG0tPnUua2VybmVsLm1hdGNoLCBtLT5kYXRhLAogCQkJCQkgICBtLT51Lm1hdGNoX3NpemUgLSBzaXplb2YoKm0pKTsKIAltb2R1bGVfcHV0KG0tPnUua2VybmVsLm1hdGNoLT5tZSk7CiAJcmV0dXJuIDA7CkBAIC01NDQsMjEgKzUzMywxMiBAQAogCXN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCAqdGFyZyA9ICh2b2lkICopdDsKIAogCS8qIENoZWNrIHN0YW5kYXJkIGluZm8uICovCi0JaWYgKHQtPnUudGFyZ2V0X3NpemUKLQkgICAgIT0gSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0KSkpIHsKLQkJZHVwcmludGYoInN0YW5kYXJkX2NoZWNrOiB0YXJnZXQgc2l6ZSAldSAhPSAldVxuIiwKLQkJCSB0LT51LnRhcmdldF9zaXplLAotCQkJIElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCkpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKHRhcmctPnZlcmRpY3QgPj0gMAogCSAgICAmJiB0YXJnLT52ZXJkaWN0ID4gbWF4X29mZnNldCAtIHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSkpIHsKIAkJZHVwcmludGYoImlwNnRfc3RhbmRhcmRfY2hlY2s6IGJhZCB2ZXJkaWN0ICglaSlcbiIsCiAJCQkgdGFyZy0+dmVyZGljdCk7CiAJCXJldHVybiAwOwogCX0KLQogCWlmICh0YXJnLT52ZXJkaWN0IDwgLU5GX01BWF9WRVJESUNUIC0gMSkgewogCQlkdXByaW50ZigiaXA2dF9zdGFuZGFyZF9jaGVjazogYmFkIG5lZ2F0aXZlIHZlcmRpY3QgKCVpKVxuIiwKIAkJCSB0YXJnLT52ZXJkaWN0KTsKQEAgLTU3NSw2ICs1NTUsNyBAQAogCSAgICB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJc3RydWN0IGlwNnRfbWF0Y2ggKm1hdGNoOworCWludCByZXQ7CiAKIAltYXRjaCA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHh0X2ZpbmRfbWF0Y2goQUZfSU5FVDYsIG0tPnUudXNlci5uYW1lLAogCQkJICAgICAgCQltLT51LnVzZXIucmV2aXNpb24pLApAQCAtNTg1LDE4ICs1NjYsMjcgQEAKIAl9CiAJbS0+dS5rZXJuZWwubWF0Y2ggPSBtYXRjaDsKIAorCXJldCA9IHh0X2NoZWNrX21hdGNoKG1hdGNoLCBBRl9JTkVUNiwgbS0+dS5tYXRjaF9zaXplIC0gc2l6ZW9mKCptKSwKKwkJCSAgICAgbmFtZSwgaG9va21hc2ssIGlwdjYtPnByb3RvLAorCQkJICAgICBpcHY2LT5pbnZmbGFncyAmIElQNlRfSU5WX1BST1RPKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwogCWlmIChtLT51Lmtlcm5lbC5tYXRjaC0+Y2hlY2tlbnRyeQotCSAgICAmJiAhbS0+dS5rZXJuZWwubWF0Y2gtPmNoZWNrZW50cnkobmFtZSwgaXB2NiwgbS0+ZGF0YSwKKwkgICAgJiYgIW0tPnUua2VybmVsLm1hdGNoLT5jaGVja2VudHJ5KG5hbWUsIGlwdjYsIG1hdGNoLCAgbS0+ZGF0YSwKIAkJCQkJICAgICAgbS0+dS5tYXRjaF9zaXplIC0gc2l6ZW9mKCptKSwKIAkJCQkJICAgICAgaG9va21hc2spKSB7Ci0JCW1vZHVsZV9wdXQobS0+dS5rZXJuZWwubWF0Y2gtPm1lKTsKIAkJZHVwcmludGYoImlwX3RhYmxlczogY2hlY2sgZmFpbGVkIGZvciBgJXMnLlxuIiwKIAkJCSBtLT51Lmtlcm5lbC5tYXRjaC0+bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKIAl9CiAKIAkoKmkpKys7CiAJcmV0dXJuIDA7CitlcnI6CisJbW9kdWxlX3B1dChtLT51Lmtlcm5lbC5tYXRjaC0+bWUpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXA2dF90YXJnZXQgaXA2dF9zdGFuZGFyZF90YXJnZXQ7CkBAIC02MzIsMjYgKzYyMiwzMiBAQAogCX0KIAl0LT51Lmtlcm5lbC50YXJnZXQgPSB0YXJnZXQ7CiAKKwlyZXQgPSB4dF9jaGVja190YXJnZXQodGFyZ2V0LCBBRl9JTkVUNiwgdC0+dS50YXJnZXRfc2l6ZSAtIHNpemVvZigqdCksCisJCQkgICAgICBuYW1lLCBlLT5jb21lZnJvbSwgZS0+aXB2Ni5wcm90bywKKwkJCSAgICAgIGUtPmlwdjYuaW52ZmxhZ3MgJiBJUDZUX0lOVl9QUk9UTyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKIAlpZiAodC0+dS5rZXJuZWwudGFyZ2V0ID09ICZpcDZ0X3N0YW5kYXJkX3RhcmdldCkgewogCQlpZiAoIXN0YW5kYXJkX2NoZWNrKHQsIHNpemUpKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBjbGVhbnVwX21hdGNoZXM7CiAJCX0KIAl9IGVsc2UgaWYgKHQtPnUua2VybmVsLnRhcmdldC0+Y2hlY2tlbnRyeQotCQkgICAmJiAhdC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5KG5hbWUsIGUsIHQtPmRhdGEsCisJCSAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkobmFtZSwgZSwgdGFyZ2V0LCB0LT5kYXRhLAogCQkJCQkJICAgICAgdC0+dS50YXJnZXRfc2l6ZQogCQkJCQkJICAgICAgLSBzaXplb2YoKnQpLAogCQkJCQkJICAgICAgZS0+Y29tZWZyb20pKSB7Ci0JCW1vZHVsZV9wdXQodC0+dS5rZXJuZWwudGFyZ2V0LT5tZSk7CiAJCWR1cHJpbnRmKCJpcF90YWJsZXM6IGNoZWNrIGZhaWxlZCBmb3IgYCVzJy5cbiIsCiAJCQkgdC0+dS5rZXJuZWwudGFyZ2V0LT5uYW1lKTsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBjbGVhbnVwX21hdGNoZXM7CisJCWdvdG8gZXJyOwogCX0KIAogCSgqaSkrKzsKIAlyZXR1cm4gMDsKLQorIGVycjoKKwltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwogIGNsZWFudXBfbWF0Y2hlczoKIAlJUDZUX01BVENIX0lURVJBVEUoZSwgY2xlYW51cF9tYXRjaCwgJmopOwogCXJldHVybiByZXQ7CkBAIC03MTIsNyArNzA4LDcgQEAKIAlJUDZUX01BVENIX0lURVJBVEUoZSwgY2xlYW51cF9tYXRjaCwgTlVMTCk7CiAJdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKIAlpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5kZXN0cm95KQotCQl0LT51Lmtlcm5lbC50YXJnZXQtPmRlc3Ryb3kodC0+ZGF0YSwKKwkJdC0+dS5rZXJuZWwudGFyZ2V0LT5kZXN0cm95KHQtPnUua2VybmVsLnRhcmdldCwgdC0+ZGF0YSwKIAkJCQkJICAgIHQtPnUudGFyZ2V0X3NpemUgLSBzaXplb2YoKnQpKTsKIAltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwogCXJldHVybiAwOwpAQCAtMTMzMyw2ICsxMzI5LDcgQEAKIGljbXA2X21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAJICAgaW50IG9mZnNldCwKIAkgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTEzNjUsMjggKzEzNjIsMjkgQEAKIHN0YXRpYyBpbnQKIGljbXA2X2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmVudHJ5LAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJICAgdm9pZCAqbWF0Y2hpbmZvLAogCSAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCiAJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLQljb25zdCBzdHJ1Y3QgaXA2dF9pcDYgKmlwdjYgPSBlbnRyeTsKIAljb25zdCBzdHJ1Y3QgaXA2dF9pY21wICppY21waW5mbyA9IG1hdGNoaW5mbzsKIAotCS8qIE11c3Qgc3BlY2lmeSBwcm90byA9PSBJQ01QLCBhbmQgbm8gdW5rbm93biBpbnZmbGFncyAqLwotCXJldHVybiBpcHY2LT5wcm90byA9PSBJUFBST1RPX0lDTVBWNgotCQkmJiAhKGlwdjYtPmludmZsYWdzICYgSVA2VF9JTlZfUFJPVE8pCi0JCSYmIG1hdGNoc2l6ZSA9PSBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9pY21wKSkKLQkJJiYgIShpY21waW5mby0+aW52ZmxhZ3MgJiB+SVA2VF9JQ01QX0lOVik7CisJLyogTXVzdCBzcGVjaWZ5IG5vIHVua25vd24gaW52ZmxhZ3MgKi8KKwlyZXR1cm4gIShpY21waW5mby0+aW52ZmxhZ3MgJiB+SVA2VF9JQ01QX0lOVik7CiB9CiAKIC8qIFRoZSBidWlsdC1pbiB0YXJnZXRzOiBzdGFuZGFyZCAoTlVMTCkgYW5kIGVycm9yLiAqLwogc3RhdGljIHN0cnVjdCBpcDZ0X3RhcmdldCBpcDZ0X3N0YW5kYXJkX3RhcmdldCA9IHsKIAkubmFtZQkJPSBJUDZUX1NUQU5EQVJEX1RBUkdFVCwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihpbnQpLAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlwNnRfdGFyZ2V0IGlwNnRfZXJyb3JfdGFyZ2V0ID0gewogCS5uYW1lCQk9IElQNlRfRVJST1JfVEFSR0VULAogCS50YXJnZXQJCT0gaXA2dF9lcnJvciwKKwkudGFyZ2V0c2l6ZQk9IElQNlRfRlVOQ1RJT05fTUFYTkFNRUxFTiwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAogfTsKIAogc3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBpcDZ0X3NvY2tvcHRzID0gewpAQCAtMTQwMiw3ICsxNDAwLDEwIEBACiBzdGF0aWMgc3RydWN0IGlwNnRfbWF0Y2ggaWNtcDZfbWF0Y2hzdHJ1Y3QgPSB7CiAJLm5hbWUJCT0gImljbXA2IiwKIAkubWF0Y2gJCT0gJmljbXA2X21hdGNoLAotCS5jaGVja2VudHJ5CT0gJmljbXA2X2NoZWNrZW50cnksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9pY21wKSwKKwkuY2hlY2tlbnRyeQk9IGljbXA2X2NoZWNrZW50cnksCisJLnByb3RvCQk9IElQUFJPVE9fSUNNUFY2LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCkBAIC0xNDEyLDkgKzE0MTMsOSBAQAogCXh0X3Byb3RvX2luaXQoQUZfSU5FVDYpOwogCiAJLyogTm9vbmUgZWxzZSB3aWxsIGJlIGRvd25pbmcgc2VtIG5vdywgc28gd2Ugd29uJ3Qgc2xlZXAgKi8KLQl4dF9yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVDYsICZpcDZ0X3N0YW5kYXJkX3RhcmdldCk7Ci0JeHRfcmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQ2LCAmaXA2dF9lcnJvcl90YXJnZXQpOwotCXh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQ2LCAmaWNtcDZfbWF0Y2hzdHJ1Y3QpOworCXh0X3JlZ2lzdGVyX3RhcmdldCgmaXA2dF9zdGFuZGFyZF90YXJnZXQpOworCXh0X3JlZ2lzdGVyX3RhcmdldCgmaXA2dF9lcnJvcl90YXJnZXQpOworCXh0X3JlZ2lzdGVyX21hdGNoKCZpY21wNl9tYXRjaHN0cnVjdCk7CiAKIAkvKiBSZWdpc3RlciBzZXRzb2Nrb3B0ICovCiAJcmV0ID0gbmZfcmVnaXN0ZXJfc29ja29wdCgmaXA2dF9zb2Nrb3B0cyk7CkBAIC0xNDMxLDkgKzE0MzIsOSBAQAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKIAluZl91bnJlZ2lzdGVyX3NvY2tvcHQoJmlwNnRfc29ja29wdHMpOwotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZpY21wNl9tYXRjaHN0cnVjdCk7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVDYsICZpcDZ0X2Vycm9yX3RhcmdldCk7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVDYsICZpcDZ0X3N0YW5kYXJkX3RhcmdldCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaWNtcDZfbWF0Y2hzdHJ1Y3QpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZpcDZ0X2Vycm9yX3RhcmdldCk7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwNnRfc3RhbmRhcmRfdGFyZ2V0KTsKIAl4dF9wcm90b19maW5pKEFGX0lORVQ2KTsKIH0KIApAQCAtMTUxNSw3ICsxNTE2LDYgQEAKIEVYUE9SVF9TWU1CT0woaXA2dF9kb190YWJsZSk7CiBFWFBPUlRfU1lNQk9MKGlwNnRfZXh0X2hkcik7CiBFWFBPUlRfU1lNQk9MKGlwdjZfZmluZF9oZHIpOwotRVhQT1JUX1NZTUJPTChpcDZfbWFza2VkX2FkZHJjbXApOwogCiBtb2R1bGVfaW5pdChpbml0KTsKIG1vZHVsZV9leGl0KGZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfSEwuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMKaW5kZXggMzA2MjAwYy4uZGExNGM2ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfSEwuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jCkBAIC0yMSw2ICsyMSw3IEBACiAJCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkJICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkJCSAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLCB2b2lkICp1c2VyaW5mbykKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKQEAgLTYzLDQzICs2NCwzMSBAQAogCiBzdGF0aWMgaW50IGlwNnRfaGxfY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJCWNvbnN0IHZvaWQgKmVudHJ5LAorCQljb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAJCXZvaWQgKnRhcmdpbmZvLAogCQl1bnNpZ25lZCBpbnQgdGFyZ2luZm9zaXplLAogCQl1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewogCXN0cnVjdCBpcDZ0X0hMX2luZm8gKmluZm8gPSB0YXJnaW5mbzsKIAotCWlmICh0YXJnaW5mb3NpemUgIT0gSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfSExfaW5mbykpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IHRhcmdpbmZvc2l6ZSAldSAhPSAlWnVcbiIsCi0JCQkJdGFyZ2luZm9zaXplLAotCQkJCUlQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X0hMX2luZm8pKSk7Ci0JCXJldHVybiAwOwkKLQl9CQotCi0JaWYgKHN0cmNtcCh0YWJsZW5hbWUsICJtYW5nbGUiKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSAiCi0JCQkiXCJtYW5nbGVcIiB0YWJsZSwgbm90IFwiJXNcIlxuIiwgdGFibGVuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKGluZm8tPm1vZGUgPiBJUDZUX0hMX01BWE1PREUpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9ITDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsIAogCQkJaW5mby0+bW9kZSk7CiAJCXJldHVybiAwOwogCX0KLQogCWlmICgoaW5mby0+bW9kZSAhPSBJUDZUX0hMX1NFVCkgJiYgKGluZm8tPmhvcF9saW1pdCA9PSAwKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbmNyZW1lbnQvZGVjcmVtZW50IGRvZXNuJ3QgIgogCQkJIm1ha2Ugc2Vuc2Ugd2l0aCB2YWx1ZSAwXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCQogCXJldHVybiAxOwogfQogCiBzdGF0aWMgc3RydWN0IGlwNnRfdGFyZ2V0IGlwNnRfSEwgPSB7IAogCS5uYW1lIAkJPSAiSEwiLCAKIAkudGFyZ2V0CQk9IGlwNnRfaGxfdGFyZ2V0LCAKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9ITF9pbmZvKSwKKwkudGFibGUJCT0gIm1hbmdsZSIsCiAJLmNoZWNrZW50cnkJPSBpcDZ0X2hsX2NoZWNrZW50cnksIAogCS5tZQkJPSBUSElTX01PRFVMRQogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKaW5kZXggNzdjNzI1OC4uMDdjNmJjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMKQEAgLTQyNiw2ICs0MjYsNyBAQAogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCXVuc2lnbmVkIGludCBob29rbnVtLAorCQljb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAJCWNvbnN0IHZvaWQgKnRhcmdpbmZvLAogCQl2b2lkICp1c2VyaW5mbykKIHsKQEAgLTQzNiw3ICs0MzcsMTIgQEAKIAlsaS51LmxvZy5sZXZlbCA9IGxvZ2luZm8tPmxldmVsOwogCWxpLnUubG9nLmxvZ2ZsYWdzID0gbG9naW5mby0+bG9nZmxhZ3M7CiAKLQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLCBsb2dpbmZvLT5wcmVmaXgpOworCWlmIChsb2dpbmZvLT5sb2dmbGFncyAmIElQNlRfTE9HX05GTE9HKQorCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAorCQkgICAgICAgICAgICAgIGxvZ2luZm8tPnByZWZpeCk7CisJZWxzZQorCQlpcDZ0X2xvZ19wYWNrZXQoUEZfSU5FVDYsIGhvb2tudW0sICpwc2tiLCBpbiwgb3V0LCAmbGksCisJCSAgICAgICAgICAgICAgICBsb2dpbmZvLT5wcmVmaXgpOwogCiAJcmV0dXJuIElQNlRfQ09OVElOVUU7CiB9CkBAIC00NDQsMzUgKzQ1MCwyOSBAQAogCiBzdGF0aWMgaW50IGlwNnRfbG9nX2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkJICAgICAgIGNvbnN0IHZvaWQgKmVudHJ5LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKIAkJCSAgICAgICB2b2lkICp0YXJnaW5mbywKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2luZm9zaXplLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwNnRfbG9nX2luZm8gKmxvZ2luZm8gPSB0YXJnaW5mbzsKIAotCWlmICh0YXJnaW5mb3NpemUgIT0gSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfbG9nX2luZm8pKSkgewotCQlERUJVR1AoIkxPRzogdGFyZ2luZm9zaXplICV1ICE9ICV1XG4iLAotCQkgICAgICAgdGFyZ2luZm9zaXplLCBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9sb2dfaW5mbykpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKGxvZ2luZm8tPmxldmVsID49IDgpIHsKIAkJREVCVUdQKCJMT0c6IGxldmVsICV1ID49IDhcbiIsIGxvZ2luZm8tPmxldmVsKTsKIAkJcmV0dXJuIDA7CiAJfQotCiAJaWYgKGxvZ2luZm8tPnByZWZpeFtzaXplb2YobG9naW5mby0+cHJlZml4KS0xXSAhPSAnXDAnKSB7CiAJCURFQlVHUCgiTE9HOiBwcmVmaXggdGVybSAlaVxuIiwKIAkJICAgICAgIGxvZ2luZm8tPnByZWZpeFtzaXplb2YobG9naW5mby0+cHJlZml4KS0xXSk7CiAJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAxOwogfQogCiBzdGF0aWMgc3RydWN0IGlwNnRfdGFyZ2V0IGlwNnRfbG9nX3JlZyA9IHsKIAkubmFtZSAJCT0gIkxPRyIsCiAJLnRhcmdldCAJPSBpcDZ0X2xvZ190YXJnZXQsIAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2xvZ19pbmZvKSwKIAkuY2hlY2tlbnRyeQk9IGlwNnRfbG9nX2NoZWNrZW50cnksIAogCS5tZSAJCT0gVEhJU19NT0RVTEUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYwppbmRleCAwZTZkMWQ0Li5kZGZhMzg1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYwpAQCAtMTc5LDYgKzE3OSw3IEBACiAJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkgICBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAJCQkgICBjb25zdCB2b2lkICp0YXJnaW5mbywKIAkJCSAgIHZvaWQgKnVzZXJpbmZvKQogewpAQCAtMjIxLDYgKzIyMiw3IEBACiAKIHN0YXRpYyBpbnQgY2hlY2soY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkgY29uc3Qgdm9pZCAqZW50cnksCisJCSBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAJCSB2b2lkICp0YXJnaW5mbywKIAkJIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAJCSB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQpAQCAtMjI4LDI0ICsyMzAsNiBAQAogIAljb25zdCBzdHJ1Y3QgaXA2dF9yZWplY3RfaW5mbyAqcmVqaW5mbyA9IHRhcmdpbmZvOwogCWNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplID0gZW50cnk7CiAKLSAJaWYgKHRhcmdpbmZvc2l6ZSAhPSBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9yZWplY3RfaW5mbykpKSB7Ci0gIAkJREVCVUdQKCJpcDZ0X1JFSkVDVDogdGFyZ2luZm9zaXplICV1ICE9IDBcbiIsIHRhcmdpbmZvc2l6ZSk7Ci0gIAkJcmV0dXJuIDA7Ci0gIAl9Ci0KLQkvKiBPbmx5IGFsbG93IHRoZXNlIGZvciBwYWNrZXQgZmlsdGVyaW5nLiAqLwotCWlmIChzdHJjbXAodGFibGVuYW1lLCAiZmlsdGVyIikgIT0gMCkgewotCQlERUJVR1AoImlwNnRfUkVKRUNUOiBiYWQgdGFibGUgYCVzJy5cbiIsIHRhYmxlbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICgoaG9va19tYXNrICYgfigoMSA8PCBORl9JUDZfTE9DQUxfSU4pCi0JCQkgICB8ICgxIDw8IE5GX0lQNl9GT1JXQVJEKQotCQkJICAgfCAoMSA8PCBORl9JUDZfTE9DQUxfT1VUKSkpICE9IDApIHsKLQkJREVCVUdQKCJpcDZ0X1JFSkVDVDogYmFkIGhvb2sgbWFzayAlWFxuIiwgaG9va19tYXNrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKHJlamluZm8tPndpdGggPT0gSVA2VF9JQ01QNl9FQ0hPUkVQTFkpIHsKIAkJcHJpbnRrKCJpcDZ0X1JFSkVDVDogRUNIT1JFUExZIGlzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC0yNTcsMTMgKzI0MSwxNiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcDZ0X3RhcmdldCBpcDZ0X3JlamVjdF9yZWcgPSB7CiAJLm5hbWUJCT0gIlJFSkVDVCIsCiAJLnRhcmdldAkJPSByZWplY3Q2X3RhcmdldCwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9yZWplY3RfaW5mbyksCisJLnRhYmxlCQk9ICJmaWx0ZXIiLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUDZfTE9DQUxfSU4pIHwgKDEgPDwgTkZfSVA2X0ZPUldBUkQpIHwKKwkJCSAgKDEgPDwgTkZfSVA2X0xPQ0FMX09VVCksCiAJLmNoZWNrZW50cnkJPSBjaGVjaywKIAkubWUJCT0gVEhJU19NT0RVTEUKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYwppbmRleCAyMTlhMzAzLi4xNzhmNmZiMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfYWguYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9haC5jCkBAIC00NCw2ICs0NCw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC05OSwxNyArMTAwLDEzIEBACiBzdGF0aWMgaW50CiBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKICAgICAgICAgICBjb25zdCB2b2lkICplbnRyeSwKKwkgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICAgICAgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgICAgIHVuc2lnbmVkIGludCBtYXRjaGluZm9zaXplLAogICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwNnRfYWggKmFoaW5mbyA9IG1hdGNoaW5mbzsKIAotCWlmIChtYXRjaGluZm9zaXplICE9IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X2FoKSkpIHsKLQkJREVCVUdQKCJpcDZ0X2FoOiBtYXRjaHNpemUgJXUgIT0gJXVcbiIsCi0JCSAgICAgICBtYXRjaGluZm9zaXplLCBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9haCkpKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWlmIChhaGluZm8tPmludmZsYWdzICYgfklQNlRfQUhfSU5WX01BU0spIHsKIAkJREVCVUdQKCJpcDZ0X2FoOiB1bmtub3duIGZsYWdzICVYXG4iLCBhaGluZm8tPmludmZsYWdzKTsKIAkJcmV0dXJuIDA7CkBAIC0xMTksOCArMTE2LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcDZ0X21hdGNoIGFoX21hdGNoID0gewogCS5uYW1lCQk9ICJhaCIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2FoKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZHN0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9kc3QuYwppbmRleCBiNGMxNTNhLi5lOTdhNzAyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9kc3QuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9kc3QuYwpAQCAtNTUsNiArNTUsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtMTc5LDIyICsxODAsMTcgQEAKIHN0YXRpYyBpbnQKIGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmluZm8sCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgICB2b2lkICptYXRjaGluZm8sCiAJICAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCiAJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgaXA2dF9vcHRzICpvcHRzaW5mbyA9IG1hdGNoaW5mbzsKIAotCWlmIChtYXRjaGluZm9zaXplICE9IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X29wdHMpKSkgewotCQlERUJVR1AoImlwNnRfb3B0czogbWF0Y2hzaXplICV1ICE9ICV1XG4iLAotCQkgICAgICAgbWF0Y2hpbmZvc2l6ZSwgSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfb3B0cykpKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWlmIChvcHRzaW5mby0+aW52ZmxhZ3MgJiB+SVA2VF9PUFRTX0lOVl9NQVNLKSB7CiAJCURFQlVHUCgiaXA2dF9vcHRzOiB1bmtub3duIGZsYWdzICVYXG4iLCBvcHRzaW5mby0+aW52ZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIApAQCAtMjA0LDggKzIwMCw5IEBACiAjZWxzZQogCS5uYW1lCQk9ICJkc3QiLAogI2VuZGlmCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X29wdHMpLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9lc3AuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCmluZGV4IDcyNDI4NWQuLjU0MGI4YmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2VzcC5jCkBAIC00NCw2ICs0NCw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC03NywxNyArNzgsMTMgQEAKIHN0YXRpYyBpbnQKIGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmlwLAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJICAgdm9pZCAqbWF0Y2hpbmZvLAogCSAgIHVuc2lnbmVkIGludCBtYXRjaGluZm9zaXplLAogCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwNnRfZXNwICplc3BpbmZvID0gbWF0Y2hpbmZvOwogCi0JaWYgKG1hdGNoaW5mb3NpemUgIT0gSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfZXNwKSkpIHsKLQkJREVCVUdQKCJpcDZ0X2VzcDogbWF0Y2hzaXplICV1ICE9ICV1XG4iLAotCQkJIG1hdGNoaW5mb3NpemUsIElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X2VzcCkpKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWlmIChlc3BpbmZvLT5pbnZmbGFncyAmIH5JUDZUX0VTUF9JTlZfTUFTSykgewogCQlERUJVR1AoImlwNnRfZXNwOiB1bmtub3duIGZsYWdzICVYXG4iLAogCQkJIGVzcGluZm8tPmludmZsYWdzKTsKQEAgLTk4LDggKzk1LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcDZ0X21hdGNoIGVzcF9tYXRjaCA9IHsKIAkubmFtZQkJPSAiZXNwIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfZXNwKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXVpNjQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2V1aTY0LmMKaW5kZXggMjczOTZhYy4uZDRiMGJhZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXVpNjQuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ldWk2NC5jCkBAIC0yMiw2ICsyMiw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC02MCwzMCArNjEsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotaXA2dF9ldWk2NF9jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkJICAgICAgY29uc3Qgdm9pZCAqaXAsCi0JCSAgICAgIHZvaWQgKm1hdGNoaW5mbywKLQkJICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKLQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQlpZiAoaG9va19tYXNrCi0JICAgICYgfigoMSA8PCBORl9JUDZfUFJFX1JPVVRJTkcpIHwgKDEgPDwgTkZfSVA2X0xPQ0FMX0lOKSB8Ci0JCSgxIDw8IE5GX0lQNl9GT1JXQVJEKSkpIHsKLQkJcHJpbnRrKCJpcDZ0X2V1aTY0OiBvbmx5IHZhbGlkIGZvciBQUkVfUk9VVElORywgTE9DQUxfSU4gb3IgRk9SV0FSRC5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAobWF0Y2hzaXplICE9IElQNlRfQUxJR04oc2l6ZW9mKGludCkpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgc3RydWN0IGlwNnRfbWF0Y2ggZXVpNjRfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gImV1aTY0IiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmlwNnRfZXVpNjRfY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihpbnQpLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUDZfUFJFX1JPVVRJTkcpIHwgKDEgPDwgTkZfSVA2X0xPQ0FMX0lOKSB8CisJCQkgICgxIDw8IE5GX0lQNl9GT1JXQVJEKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9mcmFnLmMKaW5kZXggNGMxNDEyNS4uNGM0MWUxNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZnJhZy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2ZyYWcuYwpAQCAtNDMsNiArNDMsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtMTE2LDI5ICsxMTcsMjUgQEAKIHN0YXRpYyBpbnQKIGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmlwLAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJICAgdm9pZCAqbWF0Y2hpbmZvLAogCSAgIHVuc2lnbmVkIGludCBtYXRjaGluZm9zaXplLAogCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwNnRfZnJhZyAqZnJhZ2luZm8gPSBtYXRjaGluZm87CiAKLQlpZiAobWF0Y2hpbmZvc2l6ZSAhPSBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9mcmFnKSkpIHsKLQkJREVCVUdQKCJpcDZ0X2ZyYWc6IG1hdGNoc2l6ZSAldSAhPSAldVxuIiwKLQkJICAgICAgIG1hdGNoaW5mb3NpemUsIElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X2ZyYWcpKSk7Ci0JCXJldHVybiAwOwotCX0KIAlpZiAoZnJhZ2luZm8tPmludmZsYWdzICYgfklQNlRfRlJBR19JTlZfTUFTSykgewogCQlERUJVR1AoImlwNnRfZnJhZzogdW5rbm93biBmbGFncyAlWFxuIiwgZnJhZ2luZm8tPmludmZsYWdzKTsKIAkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXA2dF9tYXRjaCBmcmFnX21hdGNoID0gewogCS5uYW1lCQk9ICJmcmFnIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfZnJhZyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hiaC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKaW5kZXggMzdhODQ3NC4uYjRhMWZkZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGJoLmMKQEAgLTU1LDYgKzU1LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTE3OSwyMiArMTgwLDE3IEBACiBzdGF0aWMgaW50CiBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkgICBjb25zdCB2b2lkICplbnRyeSwKKwkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCSAgIHZvaWQgKm1hdGNoaW5mbywKIAkgICB1bnNpZ25lZCBpbnQgbWF0Y2hpbmZvc2l6ZSwKIAkgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewogCWNvbnN0IHN0cnVjdCBpcDZ0X29wdHMgKm9wdHNpbmZvID0gbWF0Y2hpbmZvOwogCi0JaWYgKG1hdGNoaW5mb3NpemUgIT0gSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfb3B0cykpKSB7Ci0JCURFQlVHUCgiaXA2dF9vcHRzOiBtYXRjaHNpemUgJXUgIT0gJXVcbiIsCi0JCSAgICAgICBtYXRjaGluZm9zaXplLCBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9vcHRzKSkpOwotCQlyZXR1cm4gMDsKLQl9CiAJaWYgKG9wdHNpbmZvLT5pbnZmbGFncyAmIH5JUDZUX09QVFNfSU5WX01BU0spIHsKIAkJREVCVUdQKCJpcDZ0X29wdHM6IHVua25vd24gZmxhZ3MgJVhcbiIsIG9wdHNpbmZvLT5pbnZmbGFncyk7CiAJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAxOwogfQogCkBAIC0yMDQsOCArMjAwLDkgQEAKICNlbHNlCiAJLm5hbWUJCT0gImRzdCIsCiAjZW5kaWYKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfb3B0cyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9obC5jCmluZGV4IGM1ZDkwNzkuLjM3NDA1NTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYwpAQCAtMTgsMTAgKzE4LDEwIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIklQIHRhYmxlcyBIb3AgTGltaXQgbWF0Y2hpbmcgbW9kdWxlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotCQkgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IHByb3RvZmYsCi0JCSBpbnQgKmhvdGRyb3ApCitzdGF0aWMgaW50IG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLCBjb25zdCB2b2lkICptYXRjaGluZm8sCisJCSBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwgaW50ICpob3Rkcm9wKQogewogCWNvbnN0IHN0cnVjdCBpcDZ0X2hsX2luZm8gKmluZm8gPSBtYXRjaGluZm87CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSBza2ItPm5oLmlwdjZoOwpAQCAtNDgsMjAgKzQ4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsIGNvbnN0IHZvaWQgKmVudHJ5LAotCQkgICAgICB2b2lkICptYXRjaGluZm8sIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCi0JCSAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JaWYgKG1hdGNoc2l6ZSAhPSBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9obF9pbmZvKSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXA2dF9tYXRjaCBobF9tYXRjaCA9IHsKIAkubmFtZQkJPSAiaGwiLAotCS5tYXRjaAkJPSAmbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9obF9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9pcHY2aGVhZGVyLmMKaW5kZXggODNhZDZiMi4uOTM3NWVlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaXB2NmhlYWRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2lwdjZoZWFkZXIuYwpAQCAtMjksNiArMjksNyBAQAogaXB2NmhlYWRlcl9tYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJCSBjb25zdCB2b2lkICptYXRjaGluZm8sCiAJCSBpbnQgb2Zmc2V0LAogCQkgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC0xMjUsMTcgKzEyNiwxMyBAQAogc3RhdGljIGludAogaXB2NmhlYWRlcl9jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkJICAgICAgY29uc3Qgdm9pZCAqaXAsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJCSAgICAgIHZvaWQgKm1hdGNoaW5mbywKIAkJICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8gKmluZm8gPSBtYXRjaGluZm87CiAKLQkvKiBDaGVjayBmb3Igb2J2aW91cyBlcnJvcnMgKi8KLQkvKiBUaGlzIG1hdGNoIGlzIHZhbGlkIGluIGFsbCBob29rcyEgKi8KLQlpZiAobWF0Y2hzaXplICE9IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X2lwdjZoZWFkZXJfaW5mbykpKQotCQlyZXR1cm4gMDsKLQogCS8qIGludmZsYWdzIGlzIDAgb3IgMHhmZiBpbiBoYXJkIG1vZGUgKi8KIAlpZiAoKCFpbmZvLT5tb2RlZmxhZykgJiYgaW5mby0+aW52ZmxhZ3MgIT0gMHgwMCAmJgogCSAgICBpbmZvLT5pbnZmbGFncyAhPSAweEZGKQpAQCAtMTQ3LDYgKzE0NCw3IEBACiBzdGF0aWMgc3RydWN0IGlwNnRfbWF0Y2ggaXA2dF9pcHY2aGVhZGVyX21hdGNoID0gewogCS5uYW1lCQk9ICJpcHY2aGVhZGVyIiwKIAkubWF0Y2gJCT0gJmlwdjZoZWFkZXJfbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8pLAogCS5jaGVja2VudHJ5CT0gJmlwdjZoZWFkZXJfY2hlY2tlbnRyeSwKIAkuZGVzdHJveQk9IE5VTEwsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfbXVsdGlwb3J0LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9tdWx0aXBvcnQuYwppbmRleCA0OWY3ODI5Li43NTJiNjVkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9tdWx0aXBvcnQuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9tdWx0aXBvcnQuYwpAQCAtNTEsNiArNTEsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtODUsNiArODYsNyBAQAogc3RhdGljIGludAogY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgY29uc3Qgdm9pZCAqaW5mbywKKwkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCSAgIHZvaWQgKm1hdGNoaW5mbywKIAkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCkBAIC05MiwxMyArOTQsOSBAQAogCWNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXAgPSBpbmZvOwogCWNvbnN0IHN0cnVjdCBpcDZ0X211bHRpcG9ydCAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOwogCi0JaWYgKG1hdGNoc2l6ZSAhPSBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9tdWx0aXBvcnQpKSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBNdXN0IHNwZWNpZnkgcHJvdG8gPT0gVENQL1VEUCwgbm8gdW5rbm93biBmbGFncyBvciBiYWQgY291bnQgKi8KIAlyZXR1cm4gKGlwLT5wcm90byA9PSBJUFBST1RPX1RDUCB8fCBpcC0+cHJvdG8gPT0gSVBQUk9UT19VRFApCiAJCSYmICEoaXAtPmludmZsYWdzICYgSVA2VF9JTlZfUFJPVE8pCi0JCSYmIG1hdGNoc2l6ZSA9PSBJUDZUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXA2dF9tdWx0aXBvcnQpKQogCQkmJiAobXVsdGlpbmZvLT5mbGFncyA9PSBJUDZUX01VTFRJUE9SVF9TT1VSQ0UKIAkJICAgIHx8IG11bHRpaW5mby0+ZmxhZ3MgPT0gSVA2VF9NVUxUSVBPUlRfREVTVElOQVRJT04KIAkJICAgIHx8IG11bHRpaW5mby0+ZmxhZ3MgPT0gSVA2VF9NVUxUSVBPUlRfRUlUSEVSKQpAQCAtMTA3LDggKzEwNSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXA2dF9tYXRjaCBtdWx0aXBvcnRfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gIm11bHRpcG9ydCIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X211bHRpcG9ydCksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X293bmVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9vd25lci5jCmluZGV4IDhjOGE0YzcuLmUyY2VlM2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X293bmVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfb3duZXIuYwpAQCAtMjYsNiArMjYsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtNTQsMzQgKzU1LDI3IEBACiBzdGF0aWMgaW50CiBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkgICBjb25zdCB2b2lkICppcCwKKwkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCSAgIHZvaWQgKm1hdGNoaW5mbywKIAkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlwNnRfb3duZXJfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKIAotCWlmIChob29rX21hc2sKLQkgICAgJiB+KCgxIDw8IE5GX0lQNl9MT0NBTF9PVVQpIHwgKDEgPDwgTkZfSVA2X1BPU1RfUk9VVElORykpKSB7Ci0JCXByaW50aygiaXA2dF9vd25lcjogb25seSB2YWxpZCBmb3IgTE9DQUxfT1VUIG9yIFBPU1RfUk9VVElORy5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAobWF0Y2hzaXplICE9IElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X293bmVyX2luZm8pKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoaW5mby0+bWF0Y2ggJiAoSVA2VF9PV05FUl9QSUQgfCBJUDZUX09XTkVSX1NJRCkpIHsKIAkJcHJpbnRrKCJpcHRfb3duZXI6IHBpZCBhbmQgc2lkIG1hdGNoaW5nICIKIAkJICAgICAgICJub3Qgc3VwcG9ydGVkIGFueW1vcmVcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcDZ0X21hdGNoIG93bmVyX21hdGNoID0gewogCS5uYW1lCQk9ICJvd25lciIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X293bmVyX2luZm8pLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUDZfTE9DQUxfT1VUKSB8ICgxIDw8IE5GX0lQNl9QT1NUX1JPVVRJTkcpLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9wb2xpY3kuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3BvbGljeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDM5ZWM5Li4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3BvbGljeS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIElQc2VjIHBvbGljeQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA1IFBhdHJpY2sgTWNIYXJkeSwgPGthYmVyQHRyYXNoLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bmV0L3hmcm0uaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcG9saWN5Lmg+Ci0KLU1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHRhYmxlcyBJUHNlYyBwb2xpY3kgbWF0Y2hpbmcgbW9kdWxlIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLQotc3RhdGljIGlubGluZSBpbnQKLW1hdGNoX3hmcm1fc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBpcDZ0X3BvbGljeV9lbGVtICplKQotewotI2RlZmluZSBNQVRDSF9BRERSKHgseSx6KQkoIWUtPm1hdGNoLnggfHwJCQkJICAgICAgIFwKLQkJCQkgKCghaXA2X21hc2tlZF9hZGRyY21wKCZlLT54LmE2LCAmZS0+eS5hNiwgeikpIFwKLQkJCQkgIF4gZS0+aW52ZXJ0LngpKQotI2RlZmluZSBNQVRDSCh4LHkpCQkoIWUtPm1hdGNoLnggfHwgKChlLT54ID09ICh5KSkgXiBlLT5pbnZlcnQueCkpCi0JCi0JcmV0dXJuIE1BVENIX0FERFIoc2FkZHIsIHNtYXNrLCAoc3RydWN0IGluNl9hZGRyICopJngtPnByb3BzLnNhZGRyLmE2KSAmJgotCSAgICAgICBNQVRDSF9BRERSKGRhZGRyLCBkbWFzaywgKHN0cnVjdCBpbjZfYWRkciAqKSZ4LT5pZC5kYWRkci5hNikgJiYKLQkgICAgICAgTUFUQ0gocHJvdG8sIHgtPmlkLnByb3RvKSAmJgotCSAgICAgICBNQVRDSChtb2RlLCB4LT5wcm9wcy5tb2RlKSAmJgotCSAgICAgICBNQVRDSChzcGksIHgtPmlkLnNwaSkgJiYKLQkgICAgICAgTUFUQ0gocmVxaWQsIHgtPnByb3BzLnJlcWlkKTsKLX0KLQotc3RhdGljIGludAotbWF0Y2hfcG9saWN5X2luKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcDZ0X3BvbGljeV9pbmZvICppbmZvKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X3BvbGljeV9lbGVtICplOwotCXN0cnVjdCBzZWNfcGF0aCAqc3AgPSBza2ItPnNwOwotCWludCBzdHJpY3QgPSBpbmZvLT5mbGFncyAmIElQNlRfUE9MSUNZX01BVENIX1NUUklDVDsKLQlpbnQgaSwgcG9zOwotCi0JaWYgKHNwID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQlpZiAoc3RyaWN0ICYmIGluZm8tPmxlbiAhPSBzcC0+bGVuKQotCQlyZXR1cm4gMDsKLQotCWZvciAoaSA9IHNwLT5sZW4gLSAxOyBpID49IDA7IGktLSkgewotCQlwb3MgPSBzdHJpY3QgPyBpIC0gc3AtPmxlbiArIDEgOiAwOwotCQlpZiAocG9zID49IGluZm8tPmxlbikKLQkJCXJldHVybiAwOwotCQllID0gJmluZm8tPnBvbFtwb3NdOwotCi0JCWlmIChtYXRjaF94ZnJtX3N0YXRlKHNwLT54W2ldLnh2ZWMsIGUpKSB7Ci0JCQlpZiAoIXN0cmljdCkKLQkJCQlyZXR1cm4gMTsKLQkJfSBlbHNlIGlmIChzdHJpY3QpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gc3RyaWN0ID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW1hdGNoX3BvbGljeV9vdXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwNnRfcG9saWN5X2luZm8gKmluZm8pCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfcG9saWN5X2VsZW0gKmU7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiLT5kc3Q7Ci0JaW50IHN0cmljdCA9IGluZm8tPmZsYWdzICYgSVA2VF9QT0xJQ1lfTUFUQ0hfU1RSSUNUOwotCWludCBpLCBwb3M7Ci0KLQlpZiAoZHN0LT54ZnJtID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCWZvciAoaSA9IDA7IGRzdCAmJiBkc3QtPnhmcm07IGRzdCA9IGRzdC0+Y2hpbGQsIGkrKykgewotCQlwb3MgPSBzdHJpY3QgPyBpIDogMDsKLQkJaWYgKHBvcyA+PSBpbmZvLT5sZW4pCi0JCQlyZXR1cm4gMDsKLQkJZSA9ICZpbmZvLT5wb2xbcG9zXTsKLQotCQlpZiAobWF0Y2hfeGZybV9zdGF0ZShkc3QtPnhmcm0sIGUpKSB7Ci0JCQlpZiAoIXN0cmljdCkKLQkJCQlyZXR1cm4gMTsKLQkJfSBlbHNlIGlmIChzdHJpY3QpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gc3RyaWN0ID8gaSA9PSBpbmZvLT5sZW4gOiAwOwotfQotCi1zdGF0aWMgaW50IG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLSAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAotCQkgaW50IG9mZnNldCwKLQkJIHVuc2lnbmVkIGludCBwcm90b2ZmLAotCQkgaW50ICpob3Rkcm9wKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X3BvbGljeV9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwotCWludCByZXQ7Ci0KLQlpZiAoaW5mby0+ZmxhZ3MgJiBJUDZUX1BPTElDWV9NQVRDSF9JTikKLQkJcmV0ID0gbWF0Y2hfcG9saWN5X2luKHNrYiwgaW5mbyk7Ci0JZWxzZQotCQlyZXQgPSBtYXRjaF9wb2xpY3lfb3V0KHNrYiwgaW5mbyk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJcmV0ID0gaW5mby0+ZmxhZ3MgJiBJUDZUX1BPTElDWV9NQVRDSF9OT05FID8gMSA6IDA7Ci0JZWxzZSBpZiAoaW5mby0+ZmxhZ3MgJiBJUDZUX1BPTElDWV9NQVRDSF9OT05FKQotCQlyZXQgPSAwOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgY29uc3Qgdm9pZCAqaXBfdm9pZCwKLSAgICAgICAgICAgICAgICAgICAgICB2b2lkICptYXRjaGluZm8sIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQlzdHJ1Y3QgaXA2dF9wb2xpY3lfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKLQotCWlmIChtYXRjaHNpemUgIT0gSVA2VF9BTElHTihzaXplb2YoKmluZm8pKSkgewotCQlwcmludGsoS0VSTl9FUlIgImlwNnRfcG9saWN5OiBtYXRjaHNpemUgJXUgIT0gJXp1XG4iLAotCQkgICAgICAgbWF0Y2hzaXplLCBJUDZUX0FMSUdOKHNpemVvZigqaW5mbykpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICghKGluZm8tPmZsYWdzICYgKElQNlRfUE9MSUNZX01BVENIX0lOfElQNlRfUE9MSUNZX01BVENIX09VVCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXA2dF9wb2xpY3k6IG5laXRoZXIgaW5jb21pbmcgbm9yICIKLQkJICAgICAgICAgICAgICAgICJvdXRnb2luZyBwb2xpY3kgc2VsZWN0ZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKGhvb2tfbWFzayAmICgxIDw8IE5GX0lQNl9QUkVfUk9VVElORyB8IDEgPDwgTkZfSVA2X0xPQ0FMX0lOKQotCSAgICAmJiBpbmZvLT5mbGFncyAmIElQNlRfUE9MSUNZX01BVENIX09VVCkgewotCQlwcmludGsoS0VSTl9FUlIgImlwNnRfcG9saWN5OiBvdXRwdXQgcG9saWN5IG5vdCB2YWxpZCBpbiAiCi0JCSAgICAgICAgICAgICAgICAiUFJFX1JPVVRJTkcgYW5kIElOUFVUXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChob29rX21hc2sgJiAoMSA8PCBORl9JUDZfUE9TVF9ST1VUSU5HIHwgMSA8PCBORl9JUDZfTE9DQUxfT1VUKQotCSAgICAmJiBpbmZvLT5mbGFncyAmIElQNlRfUE9MSUNZX01BVENIX0lOKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXA2dF9wb2xpY3k6IGlucHV0IHBvbGljeSBub3QgdmFsaWQgaW4gIgotCQkgICAgICAgICAgICAgICAgIlBPU1RfUk9VVElORyBhbmQgT1VUUFVUXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChpbmZvLT5sZW4gPiBJUDZUX1BPTElDWV9NQVhfRUxFTSkgewotCQlwcmludGsoS0VSTl9FUlIgImlwNnRfcG9saWN5OiB0b28gbWFueSBwb2xpY3kgZWxlbWVudHNcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcDZ0X21hdGNoIHBvbGljeV9tYXRjaCA9IHsKLQkubmFtZQkJPSAicG9saWN5IiwKLQkubWF0Y2gJCT0gbWF0Y2gsCi0JLmNoZWNrZW50cnkgCT0gY2hlY2tlbnRyeSwKLQkubWUJCT0gVEhJU19NT0RVTEUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCi17Ci0JcmV0dXJuIGlwNnRfcmVnaXN0ZXJfbWF0Y2goJnBvbGljeV9tYXRjaCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCi17Ci0JaXA2dF91bnJlZ2lzdGVyX21hdGNoKCZwb2xpY3lfbWF0Y2gpOwotfQotCi1tb2R1bGVfaW5pdChpbml0KTsKLW1vZHVsZV9leGl0KGZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X3J0LmMKaW5kZXggOGY4MjQ3Ni4uNGM2YjU1YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfcnQuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ydC5jCkBAIC00NSw2ICs0NSw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC0xOTQsMTcgKzE5NSwxMyBAQAogc3RhdGljIGludAogY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgY29uc3Qgdm9pZCAqZW50cnksCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgICB2b2lkICptYXRjaGluZm8sCiAJICAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCiAJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgaXA2dF9ydCAqcnRpbmZvID0gbWF0Y2hpbmZvOwogCi0JaWYgKG1hdGNoaW5mb3NpemUgIT0gSVA2VF9BTElHTihzaXplb2Yoc3RydWN0IGlwNnRfcnQpKSkgewotCQlERUJVR1AoImlwNnRfcnQ6IG1hdGNoc2l6ZSAldSAhPSAldVxuIiwKLQkJICAgICAgIG1hdGNoaW5mb3NpemUsIElQNlRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcDZ0X3J0KSkpOwotCQlyZXR1cm4gMDsKLQl9CiAJaWYgKHJ0aW5mby0+aW52ZmxhZ3MgJiB+SVA2VF9SVF9JTlZfTUFTSykgewogCQlERUJVR1AoImlwNnRfcnQ6IHVua25vd24gZmxhZ3MgJVhcbiIsIHJ0aW5mby0+aW52ZmxhZ3MpOwogCQlyZXR1cm4gMDsKQEAgLTIyMiw4ICsyMTksOSBAQAogCiBzdGF0aWMgc3RydWN0IGlwNnRfbWF0Y2ggcnRfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gInJ0IiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfcnQpLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwppbmRleCBhYzcwMmEyLi5jMTZmNjI5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKQEAgLTE3OSwzMSArMTc5LDM2IEBACiAJCQkJIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogCXN0cnVjdCBuZl9jb25uICpjdDsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwOwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXVuc2lnbmVkIGludCByZXQsIHByb3RvZmY7CisJdW5zaWduZWQgaW50IGV4dG9mZiA9ICh1OCopKCgqcHNrYiktPm5oLmlwdjZoICsgMSkKKwkJCSAgICAgIC0gKCpwc2tiKS0+ZGF0YTsKKwl1bnNpZ25lZCBjaGFyIHBudW0gPSAoKnBza2IpLT5uaC5pcHY2aC0+bmV4dGhkcjsKKwogCiAJLyogVGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBoZWxwZXI6IGFzIHRoZSBwYWNrZXQgZ29lcyBvdXQuICovCiAJY3QgPSBuZl9jdF9nZXQoKnBza2IsICZjdGluZm8pOwotCWlmIChjdCAmJiBjdC0+aGVscGVyKSB7Ci0JCXVuc2lnbmVkIGludCByZXQsIHByb3RvZmY7Ci0JCXVuc2lnbmVkIGludCBleHRvZmYgPSAodTgqKSgoKnBza2IpLT5uaC5pcHY2aCArIDEpCi0JCQkJICAgICAgLSAoKnBza2IpLT5kYXRhOwotCQl1bnNpZ25lZCBjaGFyIHBudW0gPSAoKnBza2IpLT5uaC5pcHY2aC0+bmV4dGhkcjsKKwlpZiAoIWN0KQorCQlnb3RvIG91dDsKIAotCQlwcm90b2ZmID0gbmZfY3RfaXB2Nl9za2lwX2V4dGhkcigqcHNrYiwgZXh0b2ZmLCAmcG51bSwKLQkJCQkJCSAoKnBza2IpLT5sZW4gLSBleHRvZmYpOwotCQlpZiAocHJvdG9mZiA8IDAgfHwgcHJvdG9mZiA+ICgqcHNrYiktPmxlbiB8fAotCQkgICAgcG51bSA9PSBORVhUSERSX0ZSQUdNRU5UKSB7Ci0JCQlERUJVR1AoInByb3RvIGhlYWRlciBub3QgZm91bmRcbiIpOwotCQkJcmV0dXJuIE5GX0FDQ0VQVDsKLQkJfQorCWhlbHAgPSBuZmN0X2hlbHAoY3QpOworCWlmICghaGVscCB8fCAhaGVscC0+aGVscGVyKQorCQlnb3RvIG91dDsKIAotCQlyZXQgPSBjdC0+aGVscGVyLT5oZWxwKHBza2IsIHByb3RvZmYsIGN0LCBjdGluZm8pOwotCQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKLQkJCXJldHVybiByZXQ7CisJcHJvdG9mZiA9IG5mX2N0X2lwdjZfc2tpcF9leHRoZHIoKnBza2IsIGV4dG9mZiwgJnBudW0sCisJCQkJCSAoKnBza2IpLT5sZW4gLSBleHRvZmYpOworCWlmIChwcm90b2ZmIDwgMCB8fCBwcm90b2ZmID4gKCpwc2tiKS0+bGVuIHx8CisJICAgIHBudW0gPT0gTkVYVEhEUl9GUkFHTUVOVCkgeworCQlERUJVR1AoInByb3RvIGhlYWRlciBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAorCXJldCA9IGhlbHAtPmhlbHBlci0+aGVscChwc2tiLCBwcm90b2ZmLCBjdCwgY3RpbmZvKTsKKwlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKKwkJcmV0dXJuIHJldDsKK291dDoKIAkvKiBXZSd2ZSBzZWVuIGl0IGNvbWluZyBvdXQgdGhlIG90aGVyIHNpZGU6IGNvbmZpcm0gaXQgKi8KLQogCXJldHVybiBuZl9jb25udHJhY2tfY29uZmlybShwc2tiKTsKIH0KIApAQCAtNTc5LDYgKzU4NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorTU9EVUxFX0FMSUFTKCJuZl9jb25udHJhY2stIiBfX3N0cmluZ2lmeShBRl9JTkVUNikpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiWWFzdXl1a2kgS09aQUtBSSBAVVNBR0kgPHlhc3V5dWtpLmtvemFrYWlAdG9zaGliYS5jby5qcD4iKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCmluZGV4IDg0ZWY5YTEuLjNlMzE5MDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKQEAgLTMxMyw4ICszMTMsOCBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShmcSwgbiwgJm5mX2N0X2ZyYWc2X2hhc2hbaGFzaF0sIGxpc3QpIHsKIAkJaWYgKGZxLT5pZCA9PSBmcV9pbi0+aWQgJiYgCi0JCSAgICAhaXB2Nl9hZGRyX2NtcCgmZnFfaW4tPnNhZGRyLCAmZnEtPnNhZGRyKSAmJgotCQkgICAgIWlwdjZfYWRkcl9jbXAoJmZxX2luLT5kYWRkciwgJmZxLT5kYWRkcikpIHsKKwkJICAgIGlwdjZfYWRkcl9lcXVhbCgmZnFfaW4tPnNhZGRyLCAmZnEtPnNhZGRyKSAmJgorCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZmcV9pbi0+ZGFkZHIsICZmcS0+ZGFkZHIpKSB7CiAJCQlhdG9taWNfaW5jKCZmcS0+cmVmY250KTsKIAkJCXdyaXRlX3VubG9jaygmbmZfY3RfZnJhZzZfbG9jayk7CiAJCQlmcV9pbi0+bGFzdF9pbiB8PSBDT01QTEVURTsKQEAgLTM3Niw4ICszNzYsOCBAQAogCXJlYWRfbG9jaygmbmZfY3RfZnJhZzZfbG9jayk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoZnEsIG4sICZuZl9jdF9mcmFnNl9oYXNoW2hhc2hdLCBsaXN0KSB7CiAJCWlmIChmcS0+aWQgPT0gaWQgJiYgCi0JCSAgICAhaXB2Nl9hZGRyX2NtcChzcmMsICZmcS0+c2FkZHIpICYmCi0JCSAgICAhaXB2Nl9hZGRyX2NtcChkc3QsICZmcS0+ZGFkZHIpKSB7CisJCSAgICBpcHY2X2FkZHJfZXF1YWwoc3JjLCAmZnEtPnNhZGRyKSAmJgorCQkgICAgaXB2Nl9hZGRyX2VxdWFsKGRzdCwgJmZxLT5kYWRkcikpIHsKIAkJCWF0b21pY19pbmMoJmZxLT5yZWZjbnQpOwogCQkJcmVhZF91bmxvY2soJm5mX2N0X2ZyYWc2X2xvY2spOwogCQkJcmV0dXJuIGZxOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCBhZTIwYTBlLi5mYTFjZTBhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtODU5LDI5ICs4NTksMTIgQEAKIH0KIAogCi1zdGF0aWMgaW50IHJhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCAKK3N0YXRpYyBpbnQgZG9fcmF3djZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3QgcmF3Nl9zb2NrICpycCA9IHJhdzZfc2soc2spOwogCWludCB2YWw7CiAKLQlzd2l0Y2gobGV2ZWwpIHsKLQkJY2FzZSBTT0xfUkFXOgotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTT0xfSUNNUFY2OgotCQkJaWYgKGluZXRfc2soc2spLT5udW0gIT0gSVBQUk9UT19JQ01QVjYpCi0JCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQkJcmV0dXJuIHJhd3Y2X3NldGljbXBmaWx0ZXIoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsCi0JCQkJCQkgICBvcHRsZW4pOwotCQljYXNlIFNPTF9JUFY2OgotCQkJaWYgKG9wdG5hbWUgPT0gSVBWNl9DSEVDS1NVTSkKLQkJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBpcHY2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsCi0JCQkJCSAgICAgICBvcHRsZW4pOwotCX07Ci0KICAgCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopb3B0dmFsKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTkwNiwxMiArODg5LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIAotCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgcmF3djZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7Ci0Jc3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTsKLQlpbnQgdmFsLCBsZW47Ci0KIAlzd2l0Y2gobGV2ZWwpIHsKIAkJY2FzZSBTT0xfUkFXOgogCQkJYnJlYWs7CkBAIC05MTksMTUgKzg5OSw0NSBAQAogCQljYXNlIFNPTF9JQ01QVjY6CiAJCQlpZiAoaW5ldF9zayhzayktPm51bSAhPSBJUFBST1RPX0lDTVBWNikKIAkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCQlyZXR1cm4gcmF3djZfZ2V0aWNtcGZpbHRlcihzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwKKwkJCXJldHVybiByYXd2Nl9zZXRpY21wZmlsdGVyKHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLAogCQkJCQkJICAgb3B0bGVuKTsKIAkJY2FzZSBTT0xfSVBWNjoKIAkJCWlmIChvcHRuYW1lID09IElQVjZfQ0hFQ0tTVU0pCiAJCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLAorCQkJcmV0dXJuIGlwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwKIAkJCQkJICAgICAgIG9wdGxlbik7CiAJfTsKKwlyZXR1cm4gZG9fcmF3djZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3Jhd3Y2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU09MX1JBVzoKKwkJYnJlYWs7CisJY2FzZSBTT0xfSUNNUFY2OgorCQlpZiAoaW5ldF9zayhzayktPm51bSAhPSBJUFBST1RPX0lDTVBWNikKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuIHJhd3Y2X3NldGljbXBmaWx0ZXIoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJY2FzZSBTT0xfSVBWNjoKKwkJaWYgKG9wdG5hbWUgPT0gSVBWNl9DSEVDS1NVTSkKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBjb21wYXRfaXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwKKwkJCQkJICAgICAgb3B0dmFsLCBvcHRsZW4pOworCX07CisJcmV0dXJuIGRvX3Jhd3Y2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBkb19yYXd2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHJhdzZfc29jayAqcnAgPSByYXc2X3NrKHNrKTsKKwlpbnQgdmFsLCBsZW47CiAKIAlpZiAoZ2V0X3VzZXIobGVuLG9wdGxlbikpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtOTUzLDYgKzk2Myw1MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJhd3Y2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3dpdGNoKGxldmVsKSB7CisJCWNhc2UgU09MX1JBVzoKKwkJCWJyZWFrOworCisJCWNhc2UgU09MX0lDTVBWNjoKKwkJCWlmIChpbmV0X3NrKHNrKS0+bnVtICE9IElQUFJPVE9fSUNNUFY2KQorCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJCXJldHVybiByYXd2Nl9nZXRpY21wZmlsdGVyKHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLAorCQkJCQkJICAgb3B0bGVuKTsKKwkJY2FzZSBTT0xfSVBWNjoKKwkJCWlmIChvcHRuYW1lID09IElQVjZfQ0hFQ0tTVU0pCisJCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gaXB2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLAorCQkJCQkgICAgICAgb3B0bGVuKTsKKwl9OworCXJldHVybiBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGludCBjb21wYXRfcmF3djZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIFNPTF9SQVc6CisJCWJyZWFrOworCWNhc2UgU09MX0lDTVBWNjoKKwkJaWYgKGluZXRfc2soc2spLT5udW0gIT0gSVBQUk9UT19JQ01QVjYpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCXJldHVybiByYXd2Nl9nZXRpY21wZmlsdGVyKHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCWNhc2UgU09MX0lQVjY6CisJCWlmIChvcHRuYW1lID09IElQVjZfQ0hFQ0tTVU0pCisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gY29tcGF0X2lwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsCisJCQkJCSAgICAgIG9wdHZhbCwgb3B0bGVuKTsKKwl9OworCXJldHVybiBkb19yYXd2Nl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgcmF3djZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2goY21kKSB7CkBAIC05OTgsMjMgKzEwNTIsMjcgQEAKIH0KIAogc3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7Ci0JLm5hbWUgPQkJIlJBV3Y2IiwKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkuY2xvc2UgPQlyYXd2Nl9jbG9zZSwKLQkuY29ubmVjdCA9CWlwNl9kYXRhZ3JhbV9jb25uZWN0LAotCS5kaXNjb25uZWN0ID0JdWRwX2Rpc2Nvbm5lY3QsCi0JLmlvY3RsID0JcmF3djZfaW9jdGwsCi0JLmluaXQgPQkJcmF3djZfaW5pdF9zaywKLQkuZGVzdHJveSA9CWluZXQ2X2Rlc3Ryb3lfc29jaywKLQkuc2V0c29ja29wdCA9CXJhd3Y2X3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQgPQlyYXd2Nl9nZXRzb2Nrb3B0LAotCS5zZW5kbXNnID0JcmF3djZfc2VuZG1zZywKLQkucmVjdm1zZyA9CXJhd3Y2X3JlY3Ztc2csCi0JLmJpbmQgPQkJcmF3djZfYmluZCwKLQkuYmFja2xvZ19yY3YgPQlyYXd2Nl9yY3Zfc2tiLAotCS5oYXNoID0JCXJhd192Nl9oYXNoLAotCS51bmhhc2ggPQlyYXdfdjZfdW5oYXNoLAotCS5vYmpfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgcmF3Nl9zb2NrKSwKKwkubmFtZQkJICAgPSAiUkFXdjYiLAorCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKKwkuY2xvc2UJCSAgID0gcmF3djZfY2xvc2UsCisJLmNvbm5lY3QJICAgPSBpcDZfZGF0YWdyYW1fY29ubmVjdCwKKwkuZGlzY29ubmVjdAkgICA9IHVkcF9kaXNjb25uZWN0LAorCS5pb2N0bAkJICAgPSByYXd2Nl9pb2N0bCwKKwkuaW5pdAkJICAgPSByYXd2Nl9pbml0X3NrLAorCS5kZXN0cm95CSAgID0gaW5ldDZfZGVzdHJveV9zb2NrLAorCS5zZXRzb2Nrb3B0CSAgID0gcmF3djZfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IHJhd3Y2X2dldHNvY2tvcHQsCisJLnNlbmRtc2cJICAgPSByYXd2Nl9zZW5kbXNnLAorCS5yZWN2bXNnCSAgID0gcmF3djZfcmVjdm1zZywKKwkuYmluZAkJICAgPSByYXd2Nl9iaW5kLAorCS5iYWNrbG9nX3JjdgkgICA9IHJhd3Y2X3Jjdl9za2IsCisJLmhhc2gJCSAgID0gcmF3X3Y2X2hhc2gsCisJLnVuaGFzaAkJICAgPSByYXdfdjZfdW5oYXNoLAorCS5vYmpfc2l6ZQkgICA9IHNpemVvZihzdHJ1Y3QgcmF3Nl9zb2NrKSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd3Y2X3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd3Y2X2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMTE0MCw3ICsxMTk4LDcgQEAKIHsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcTsKIAlpbnQgcmMgPSAtRU5PTUVNOwotCXN0cnVjdCByYXc2X2l0ZXJfc3RhdGUgKnMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOworCXN0cnVjdCByYXc2X2l0ZXJfc3RhdGUgKnMgPSBremFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOwogCWlmICghcykKIAkJZ290byBvdXQ7CiAJcmMgPSBzZXFfb3BlbihmaWxlLCAmcmF3Nl9zZXFfb3BzKTsKQEAgLTExNDgsNyArMTIwNiw2IEBACiAJCWdvdG8gb3V0X2tmcmVlOwogCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzZXEtPnByaXZhdGUgPSBzOwotCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKIG91dDoKIAlyZXR1cm4gcmM7CiBvdXRfa2ZyZWU6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggMTVlMTQ1Ni4uYjY3YTQ1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZyYWdfcXVldWUgKmZyYWdfYWxsb2NfcXVldWUodm9pZCkKIHsKLQlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZnJhZ19xdWV1ZSksIEdGUF9BVE9NSUMpOworCXN0cnVjdCBmcmFnX3F1ZXVlICpmcSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmcmFnX3F1ZXVlKSwgR0ZQX0FUT01JQyk7CiAKIAlpZighZnEpCiAJCXJldHVybiBOVUxMOwpAQCAtMjg4LDYgKzI4OCw3IEBACiBzdGF0aWMgdm9pZCBpcDZfZnJhZ19leHBpcmUodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBmcmFnX3F1ZXVlICpmcSA9IChzdHJ1Y3QgZnJhZ19xdWV1ZSAqKSBkYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAlzcGluX2xvY2soJmZxLT5sb2NrKTsKIApAQCAtMjk5LDIyICszMDAsMjIgQEAKIAlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNVElNRU9VVCk7CiAJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTsKIAotCS8qIFNlbmQgZXJyb3Igb25seSBpZiB0aGUgZmlyc3Qgc2VnbWVudCBhcnJpdmVkLiAqLwotCWlmIChmcS0+bGFzdF9pbiZGSVJTVF9JTiAmJiBmcS0+ZnJhZ21lbnRzKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KGZxLT5paWYpOworCS8qIERvbid0IHNlbmQgZXJyb3IgaWYgdGhlIGZpcnN0IHNlZ21lbnQgZGlkIG5vdCBhcnJpdmUuICovCisJaWYgKCEoZnEtPmxhc3RfaW4mRklSU1RfSU4pIHx8ICFmcS0+ZnJhZ21lbnRzKQorCQlnb3RvIG91dDsKIAotCQkvKgotCQkgICBCdXQgdXNlIGFzIHNvdXJjZSBkZXZpY2Ugb24gd2hpY2ggTEFTVCBBUlJJVkVECi0JCSAgIHNlZ21lbnQgd2FzIHJlY2VpdmVkLiBBbmQgZG8gbm90IHVzZSBmcS0+ZGV2Ci0JCSAgIHBvaW50ZXIgZGlyZWN0bHksIGRldmljZSBtaWdodCBhbHJlYWR5IGRpc2FwcGVhcmVkLgotCQkgKi8KLQkJaWYgKGRldikgewotCQkJZnEtPmZyYWdtZW50cy0+ZGV2ID0gZGV2OwotCQkJaWNtcHY2X3NlbmQoZnEtPmZyYWdtZW50cywgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0ZSQUdUSU1FLCAwLAotCQkJCSAgICBkZXYpOwotCQkJZGV2X3B1dChkZXYpOwotCQl9Ci0JfQorCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoZnEtPmlpZik7CisJaWYgKCFkZXYpCisJCWdvdG8gb3V0OworCisJLyoKKwkgICBCdXQgdXNlIGFzIHNvdXJjZSBkZXZpY2Ugb24gd2hpY2ggTEFTVCBBUlJJVkVECisJICAgc2VnbWVudCB3YXMgcmVjZWl2ZWQuIEFuZCBkbyBub3QgdXNlIGZxLT5kZXYKKwkgICBwb2ludGVyIGRpcmVjdGx5LCBkZXZpY2UgbWlnaHQgYWxyZWFkeSBkaXNhcHBlYXJlZC4KKwkgKi8KKwlmcS0+ZnJhZ21lbnRzLT5kZXYgPSBkZXY7CisJaWNtcHY2X3NlbmQoZnEtPmZyYWdtZW50cywgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0ZSQUdUSU1FLCAwLCBkZXYpOworCWRldl9wdXQoZGV2KTsKIG91dDoKIAlzcGluX3VubG9jaygmZnEtPmxvY2spOwogCWZxX3B1dChmcSwgTlVMTCk7CkBAIC0zNjgsOCArMzY5LDYgQEAKIAlpZiAoKGZxID0gZnJhZ19hbGxvY19xdWV1ZSgpKSA9PSBOVUxMKQogCQlnb3RvIG9vbTsKIAotCW1lbXNldChmcSwgMCwgc2l6ZW9mKHN0cnVjdCBmcmFnX3F1ZXVlKSk7Ci0KIAlmcS0+aWQgPSBpZDsKIAlpcHY2X2FkZHJfY29weSgmZnEtPnNhZGRyLCBzcmMpOwogCWlwdjZfYWRkcl9jb3B5KCZmcS0+ZGFkZHIsIGRzdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBlMGQzYWQwLi43OTA3ODc0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTcyLDYgKzcyLDEwIEBACiAjZGVmaW5lIFJUNl9UUkFDRSh4Li4uKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisjZGVmaW5lIENMT05FX09GRkxJTktfUk9VVEUgMAorCisjZGVmaW5lIFJUNl9TRUxFQ1RfRl9JRkFDRQkweDEKKyNkZWZpbmUgUlQ2X1NFTEVDVF9GX1JFQUNIQUJMRQkweDIKIAogc3RhdGljIGludCBpcDZfcnRfbWF4X3NpemUgPSA0MDk2Owogc3RhdGljIGludCBpcDZfcnRfZ2NfbWluX2ludGVydmFsID0gSFogLyAyOwpAQCAtOTQsNiArOTgsMTQgQEAKIHN0YXRpYyB2b2lkCQlpcDZfbGlua19mYWlsdXJlKHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIHZvaWQJCWlwNl9ydF91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpOwogCisjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GTworc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FkZF9yb3V0ZV9pbmZvKHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAorCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwgaW50IGlmaW5kZXgsCisJCQkJCSAgIHVuc2lnbmVkIHByZWYpOworc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2dldF9yb3V0ZV9pbmZvKHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAorCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwgaW50IGlmaW5kZXgpOworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKIAkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKQEAgLTIxNCwxNTEgKzIyNiwyMTIgQEAKIAlyZXR1cm4gcnQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfSVBWNl9ST1VURVJfUFJFRgorc3RhdGljIHZvaWQgcnQ2X3Byb2JlKHN0cnVjdCBydDZfaW5mbyAqcnQpCit7CisJc3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBydCA/IHJ0LT5ydDZpX25leHRob3AgOiBOVUxMOworCS8qCisJICogT2theSwgdGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGFwcHJvcHJpYXRlCisJICogZm9yIG5vdywgaG93ZXZlciwgd2UgbmVlZCB0byBjaGVjayBpZiBpdAorCSAqIGlzIHJlYWxseSBzbzsgYWthIFJvdXRlciBSZWFjaGFiaWxpdHkgUHJvYmluZy4KKwkgKgorCSAqIFJvdXRlciBSZWFjaGFiaWxpdHkgUHJvYmUgTVVTVCBiZSByYXRlLWxpbWl0ZWQKKwkgKiB0byBubyBtb3JlIHRoYW4gb25lIHBlciBtaW51dGUuCisJICovCisJaWYgKCFuZWlnaCB8fCAobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9WQUxJRCkpCisJCXJldHVybjsKKwlyZWFkX2xvY2tfYmgoJm5laWdoLT5sb2NrKTsKKwlpZiAoIShuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSAmJgorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIG5laWdoLT51cGRhdGVkICsgcnQtPnJ0NmlfaWRldi0+Y25mLnJ0cl9wcm9iZV9pbnRlcnZhbCkpIHsKKwkJc3RydWN0IGluNl9hZGRyIG1jYWRkcjsKKwkJc3RydWN0IGluNl9hZGRyICp0YXJnZXQ7CisKKwkJbmVpZ2gtPnVwZGF0ZWQgPSBqaWZmaWVzOworCQlyZWFkX3VubG9ja19iaCgmbmVpZ2gtPmxvY2spOworCisJCXRhcmdldCA9IChzdHJ1Y3QgaW42X2FkZHIgKikmbmVpZ2gtPnByaW1hcnlfa2V5OworCQlhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KHRhcmdldCwgJm1jYWRkcik7CisJCW5kaXNjX3NlbmRfbnMocnQtPnJ0NmlfZGV2LCBOVUxMLCB0YXJnZXQsICZtY2FkZHIsIE5VTEwpOworCX0gZWxzZQorCQlyZWFkX3VubG9ja19iaCgmbmVpZ2gtPmxvY2spOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDZfcHJvYmUoc3RydWN0IHJ0Nl9pbmZvICpydCkKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYKKwogLyoKLSAqCXBvaW50ZXIgdG8gdGhlIGxhc3QgZGVmYXVsdCByb3V0ZXIgY2hvc2VuLiBCSCBpcyBkaXNhYmxlZCBsb2NhbGx5LgorICogRGVmYXVsdCBSb3V0ZXIgU2VsZWN0aW9uIChSRkMgMjQ2MSA2LjMuNikKICAqLwotc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2RmbHRfcG9pbnRlcjsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socnQ2X2RmbHRfbG9jayk7Ci0KLXZvaWQgcnQ2X3Jlc2V0X2RmbHRfcG9pbnRlcihzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQorc3RhdGljIGludCBpbmxpbmUgcnQ2X2NoZWNrX2RldihzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBpbnQgb2lmKQogewotCXNwaW5fbG9ja19iaCgmcnQ2X2RmbHRfbG9jayk7Ci0JaWYgKHJ0ID09IE5VTEwgfHwgcnQgPT0gcnQ2X2RmbHRfcG9pbnRlcikgewotCQlSVDZfVFJBQ0UoInJlc2V0IGRlZmF1bHQgcm91dGVyOiAlcC0+TlVMTFxuIiwgcnQ2X2RmbHRfcG9pbnRlcik7Ci0JCXJ0Nl9kZmx0X3BvaW50ZXIgPSBOVUxMOwotCX0KLQlzcGluX3VubG9ja19iaCgmcnQ2X2RmbHRfbG9jayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJ0LT5ydDZpX2RldjsKKwlpZiAoIW9pZiB8fCBkZXYtPmlmaW5kZXggPT0gb2lmKQorCQlyZXR1cm4gMjsKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spICYmCisJICAgIHJ0LT5ydDZpX2lkZXYgJiYgcnQtPnJ0NmlfaWRldi0+ZGV2LT5pZmluZGV4ID09IG9pZikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKLS8qIERlZmF1bHQgUm91dGVyIFNlbGVjdGlvbiAoUkZDIDI0NjEgNi4zLjYpICovCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYmVzdF9kZmx0KHN0cnVjdCBydDZfaW5mbyAqcnQsIGludCBvaWYpCitzdGF0aWMgaW50IGlubGluZSBydDZfY2hlY2tfbmVpZ2goc3RydWN0IHJ0Nl9pbmZvICpydCkKIHsKLQlzdHJ1Y3QgcnQ2X2luZm8gKm1hdGNoID0gTlVMTDsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnNwcnQ7Ci0JaW50IG1wcmkgPSAwOworCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gcnQtPnJ0NmlfbmV4dGhvcDsKKwlpbnQgbSA9IDA7CisJaWYgKG5laWdoKSB7CisJCXJlYWRfbG9ja19iaCgmbmVpZ2gtPmxvY2spOworCQlpZiAobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9WQUxJRCkKKwkJCW0gPSAxOworCQlyZWFkX3VubG9ja19iaCgmbmVpZ2gtPmxvY2spOworCX0KKwlyZXR1cm4gbTsKK30KIAotCWZvciAoc3BydCA9IHJ0OyBzcHJ0OyBzcHJ0ID0gc3BydC0+dS5uZXh0KSB7Ci0JCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwotCQlpbnQgbSA9IDA7CitzdGF0aWMgaW50IHJ0Nl9zY29yZV9yb3V0ZShzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBpbnQgb2lmLAorCQkJICAgaW50IHN0cmljdCkKK3sKKwlpbnQgbSA9IHJ0Nl9jaGVja19kZXYocnQsIG9pZik7CisJaWYgKCFtICYmIChzdHJpY3QgJiBSVDZfU0VMRUNUX0ZfSUZBQ0UpKQorCQlyZXR1cm4gLTE7CisjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYKKwltIHw9IElQVjZfREVDT0RFX1BSRUYoSVBWNl9FWFRSQUNUX1BSRUYocnQtPnJ0NmlfZmxhZ3MpKSA8PCAyOworI2VuZGlmCisJaWYgKHJ0Nl9jaGVja19uZWlnaChydCkpCisJCW0gfD0gMTY7CisJZWxzZSBpZiAoc3RyaWN0ICYgUlQ2X1NFTEVDVF9GX1JFQUNIQUJMRSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBtOworfQogCi0JCWlmICghb2lmIHx8Ci0JCSAgICAoc3BydC0+cnQ2aV9kZXYgJiYKLQkJICAgICBzcHJ0LT5ydDZpX2Rldi0+aWZpbmRleCA9PSBvaWYpKQotCQkJbSArPSA4Oworc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X3NlbGVjdChzdHJ1Y3QgcnQ2X2luZm8gKipoZWFkLCBpbnQgb2lmLAorCQkJCSAgIGludCBzdHJpY3QpCit7CisJc3RydWN0IHJ0Nl9pbmZvICptYXRjaCA9IE5VTEwsICpsYXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqcnQwID0gKmhlYWQ7CisJdTMyIG1ldHJpYzsKKwlpbnQgbXByaSA9IC0xOwogCi0JCWlmIChydDZfY2hlY2tfZXhwaXJlZChzcHJ0KSkKKwlSVDZfVFJBQ0UoIiVzKGhlYWQ9JXAoKmhlYWQ9JXApLCBvaWY9JWQpXG4iLAorCQkgIF9fRlVOQ1RJT05fXywgaGVhZCwgaGVhZCA/ICpoZWFkIDogTlVMTCwgb2lmKTsKKworCWZvciAocnQgPSBydDAsIG1ldHJpYyA9IHJ0MC0+cnQ2aV9tZXRyaWM7CisJICAgICBydCAmJiBydC0+cnQ2aV9tZXRyaWMgPT0gbWV0cmljOworCSAgICAgcnQgPSBydC0+dS5uZXh0KSB7CisJCWludCBtOworCisJCWlmIChydDZfY2hlY2tfZXhwaXJlZChydCkpCiAJCQljb250aW51ZTsKIAotCQlpZiAoc3BydCA9PSBydDZfZGZsdF9wb2ludGVyKQotCQkJbSArPSA0OworCQlsYXN0ID0gcnQ7CiAKLQkJaWYgKChuZWlnaCA9IHNwcnQtPnJ0NmlfbmV4dGhvcCkgIT0gTlVMTCkgewotCQkJcmVhZF9sb2NrX2JoKCZuZWlnaC0+bG9jayk7Ci0JCQlzd2l0Y2ggKG5laWdoLT5udWRfc3RhdGUpIHsKLQkJCWNhc2UgTlVEX1JFQUNIQUJMRToKLQkJCQltICs9IDM7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgTlVEX1NUQUxFOgotCQkJY2FzZSBOVURfREVMQVk6Ci0JCQljYXNlIE5VRF9QUk9CRToKLQkJCQltICs9IDI7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgTlVEX05PQVJQOgotCQkJY2FzZSBOVURfUEVSTUFORU5UOgotCQkJCW0gKz0gMTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBOVURfSU5DT01QTEVURToKLQkJCWRlZmF1bHQ6Ci0JCQkJcmVhZF91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXJlYWRfdW5sb2NrX2JoKCZuZWlnaC0+bG9jayk7Ci0JCX0gZWxzZSB7CisJCW0gPSBydDZfc2NvcmVfcm91dGUocnQsIG9pZiwgc3RyaWN0KTsKKwkJaWYgKG0gPCAwKQogCQkJY29udGludWU7Ci0JCX0KIAotCQlpZiAobSA+IG1wcmkgfHwgbSA+PSAxMikgewotCQkJbWF0Y2ggPSBzcHJ0OworCQlpZiAobSA+IG1wcmkpIHsKKwkJCXJ0Nl9wcm9iZShtYXRjaCk7CisJCQltYXRjaCA9IHJ0OwogCQkJbXByaSA9IG07Ci0JCQlpZiAobSA+PSAxMikgewotCQkJCS8qIHdlIGNob29zZSB0aGUgbGFzdCBkZWZhdWx0IHJvdXRlciBpZiBpdAotCQkJCSAqIGlzIGluIChwcm9iYWJseSkgcmVhY2hhYmxlIHN0YXRlLgotCQkJCSAqIElmIHJvdXRlIGNoYW5nZWQsIHdlIHNob3VsZCBkbyBwbXR1Ci0JCQkJICogZGlzY292ZXJ5LiAtLXlvc2hmdWppCi0JCQkJICovCi0JCQkJYnJlYWs7Ci0JCQl9CisJCX0gZWxzZSB7CisJCQlydDZfcHJvYmUocnQpOwogCQl9CiAJfQogCi0Jc3Bpbl9sb2NrKCZydDZfZGZsdF9sb2NrKTsKLQlpZiAoIW1hdGNoKSB7Ci0JCS8qCi0JCSAqCU5vIGRlZmF1bHQgcm91dGVycyBhcmUga25vd24gdG8gYmUgcmVhY2hhYmxlLgotCQkgKglTSE9VTEQgcm91bmQgcm9iaW4KLQkJICovCi0JCWlmIChydDZfZGZsdF9wb2ludGVyKSB7Ci0JCQlmb3IgKHNwcnQgPSBydDZfZGZsdF9wb2ludGVyLT51Lm5leHQ7Ci0JCQkgICAgIHNwcnQ7IHNwcnQgPSBzcHJ0LT51Lm5leHQpIHsKLQkJCQlpZiAoc3BydC0+dS5kc3Qub2Jzb2xldGUgPD0gMCAmJgotCQkJCSAgICBzcHJ0LT51LmRzdC5lcnJvciA9PSAwICYmCi0JCQkJICAgICFydDZfY2hlY2tfZXhwaXJlZChzcHJ0KSkgewotCQkJCQltYXRjaCA9IHNwcnQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWZvciAoc3BydCA9IHJ0OwotCQkJICAgICAhbWF0Y2ggJiYgc3BydDsKLQkJCSAgICAgc3BydCA9IHNwcnQtPnUubmV4dCkgewotCQkJCWlmIChzcHJ0LT51LmRzdC5vYnNvbGV0ZSA8PSAwICYmCi0JCQkJICAgIHNwcnQtPnUuZHN0LmVycm9yID09IDAgJiYKLQkJCQkgICAgIXJ0Nl9jaGVja19leHBpcmVkKHNwcnQpKSB7Ci0JCQkJCW1hdGNoID0gc3BydDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChzcHJ0ID09IHJ0Nl9kZmx0X3BvaW50ZXIpCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9CisJaWYgKCFtYXRjaCAmJgorCSAgICAoc3RyaWN0ICYgUlQ2X1NFTEVDVF9GX1JFQUNIQUJMRSkgJiYKKwkgICAgbGFzdCAmJiBsYXN0ICE9IHJ0MCkgeworCQkvKiBubyBlbnRyaWVzIG1hdGNoZWQ7IGRvIHJvdW5kLXJvYmluICovCisJCSpoZWFkID0gcnQwLT51Lm5leHQ7CisJCXJ0MC0+dS5uZXh0ID0gbGFzdC0+dS5uZXh0OworCQlsYXN0LT51Lm5leHQgPSBydDA7CiAJfQogCi0JaWYgKG1hdGNoKSB7Ci0JCWlmIChydDZfZGZsdF9wb2ludGVyICE9IG1hdGNoKQotCQkJUlQ2X1RSQUNFKCJjaGFuZ2VkIGRlZmF1bHQgcm91dGVyOiAlcC0+JXBcbiIsCi0JCQkJICBydDZfZGZsdF9wb2ludGVyLCBtYXRjaCk7Ci0JCXJ0Nl9kZmx0X3BvaW50ZXIgPSBtYXRjaDsKLQl9Ci0Jc3Bpbl91bmxvY2soJnJ0Nl9kZmx0X2xvY2spOworCVJUNl9UUkFDRSgiJXMoKSA9PiAlcCwgc2NvcmU9JWRcbiIsCisJCSAgX19GVU5DVElPTl9fLCBtYXRjaCwgbXByaSk7CiAKLQlpZiAoIW1hdGNoKSB7Ci0JCS8qCi0JCSAqIExhc3QgUmVzb3J0OiBpZiBubyBkZWZhdWx0IHJvdXRlcnMgZm91bmQsIAotCQkgKiB1c2UgYWRkcmNvbmYgZGVmYXVsdCByb3V0ZS4KLQkJICogV2UgZG9uJ3QgcmVjb3JkIHRoaXMgcm91dGUuCi0JCSAqLwotCQlmb3IgKHNwcnQgPSBpcDZfcm91dGluZ190YWJsZS5sZWFmOwotCQkgICAgIHNwcnQ7IHNwcnQgPSBzcHJ0LT51Lm5leHQpIHsKLQkJCWlmICghcnQ2X2NoZWNrX2V4cGlyZWQoc3BydCkgJiYKLQkJCSAgICAoc3BydC0+cnQ2aV9mbGFncyAmIFJURl9ERUZBVUxUKSAmJgotCQkJICAgICghb2lmIHx8Ci0JCQkgICAgIChzcHJ0LT5ydDZpX2RldiAmJgotCQkJICAgICAgc3BydC0+cnQ2aV9kZXYtPmlmaW5kZXggPT0gb2lmKSkpIHsKLQkJCQltYXRjaCA9IHNwcnQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFtYXRjaCkgewotCQkJLyogbm8gZGVmYXVsdCByb3V0ZS4gIGdpdmUgdXAuICovCi0JCQltYXRjaCA9ICZpcDZfbnVsbF9lbnRyeTsKLQkJfQotCX0KLQotCXJldHVybiBtYXRjaDsKKwlyZXR1cm4gKG1hdGNoID8gbWF0Y2ggOiAmaXA2X251bGxfZW50cnkpOwogfQogCisjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GTworaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwKKwkJICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcikKK3sKKwlzdHJ1Y3Qgcm91dGVfaW5mbyAqcmluZm8gPSAoc3RydWN0IHJvdXRlX2luZm8gKikgb3B0OworCXN0cnVjdCBpbjZfYWRkciBwcmVmaXhfYnVmLCAqcHJlZml4OworCXVuc2lnbmVkIGludCBwcmVmOworCXUzMiBsaWZldGltZTsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OworCisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3Qgcm91dGVfaW5mbykpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2FuaXR5IGNoZWNrIGZvciBwcmVmaXhfbGVuIGFuZCBsZW5ndGggKi8KKwlpZiAocmluZm8tPmxlbmd0aCA+IDMpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIGlmIChyaW5mby0+cHJlZml4X2xlbiA+IDEyOCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKHJpbmZvLT5wcmVmaXhfbGVuID4gNjQpIHsKKwkJaWYgKHJpbmZvLT5sZW5ndGggPCAyKSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAocmluZm8tPnByZWZpeF9sZW4gPiAwKSB7CisJCWlmIChyaW5mby0+bGVuZ3RoIDwgMSkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlwcmVmID0gcmluZm8tPnJvdXRlX3ByZWY7CisJaWYgKHByZWYgPT0gSUNNUFY2X1JPVVRFUl9QUkVGX0lOVkFMSUQpCisJCXByZWYgPSBJQ01QVjZfUk9VVEVSX1BSRUZfTUVESVVNOworCisJbGlmZXRpbWUgPSBodG9ubChyaW5mby0+bGlmZXRpbWUpOworCWlmIChsaWZldGltZSA9PSAweGZmZmZmZmZmKSB7CisJCS8qIGluZmluaXR5ICovCisJfSBlbHNlIGlmIChsaWZldGltZSA+IDB4N2ZmZmZmZmYvSFopIHsKKwkJLyogQXZvaWQgYXJpdGhtZXRpYyBvdmVyZmxvdyAqLworCQlsaWZldGltZSA9IDB4N2ZmZmZmZmYvSFogLSAxOworCX0KKworCWlmIChyaW5mby0+bGVuZ3RoID09IDMpCisJCXByZWZpeCA9IChzdHJ1Y3QgaW42X2FkZHIgKilyaW5mby0+cHJlZml4OworCWVsc2UgeworCQkvKiB0aGlzIGZ1bmN0aW9uIGlzIHNhZmUgKi8KKwkJaXB2Nl9hZGRyX3ByZWZpeCgmcHJlZml4X2J1ZiwKKwkJCQkgKHN0cnVjdCBpbjZfYWRkciAqKXJpbmZvLT5wcmVmaXgsCisJCQkJIHJpbmZvLT5wcmVmaXhfbGVuKTsKKwkJcHJlZml4ID0gJnByZWZpeF9idWY7CisJfQorCisJcnQgPSBydDZfZ2V0X3JvdXRlX2luZm8ocHJlZml4LCByaW5mby0+cHJlZml4X2xlbiwgZ3dhZGRyLCBkZXYtPmlmaW5kZXgpOworCisJaWYgKHJ0ICYmICFsaWZldGltZSkgeworCQlpcDZfZGVsX3J0KHJ0LCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJcnQgPSBOVUxMOworCX0KKworCWlmICghcnQgJiYgbGlmZXRpbWUpCisJCXJ0ID0gcnQ2X2FkZF9yb3V0ZV9pbmZvKHByZWZpeCwgcmluZm8tPnByZWZpeF9sZW4sIGd3YWRkciwgZGV2LT5pZmluZGV4LAorCQkJCQlwcmVmKTsKKwllbHNlIGlmIChydCkKKwkJcnQtPnJ0NmlfZmxhZ3MgPSBSVEZfUk9VVEVJTkZPIHwKKwkJCQkgKHJ0LT5ydDZpX2ZsYWdzICYgflJURl9QUkVGX01BU0spIHwgUlRGX1BSRUYocHJlZik7CisKKwlpZiAocnQpIHsKKwkJaWYgKGxpZmV0aW1lID09IDB4ZmZmZmZmZmYpIHsKKwkJCXJ0LT5ydDZpX2ZsYWdzICY9IH5SVEZfRVhQSVJFUzsKKwkJfSBlbHNlIHsKKwkJCXJ0LT5ydDZpX2V4cGlyZXMgPSBqaWZmaWVzICsgSFogKiBsaWZldGltZTsKKwkJCXJ0LT5ydDZpX2ZsYWdzIHw9IFJURl9FWFBJUkVTOworCQl9CisJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9sb29rdXAoc3RydWN0IGluNl9hZGRyICpkYWRkciwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCSAgICBpbnQgb2lmLCBpbnQgc3RyaWN0KQogewpAQCAtMzk3LDE0ICs0NzAsOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIE5vIHJ0Nl9sb2NrISBJZiBDT1cgZmFpbGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBkZWFkIHJvdXRlIGVudHJ5Ci0gICB3aXRoIGRzdC0+ZXJyb3Igc2V0IHRvIGVycm5vIHZhbHVlLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9jb3coc3RydWN0IHJ0Nl9pbmZvICpvcnQsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zICpyZXEpCitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWxsb2NfY293KHN0cnVjdCBydDZfaW5mbyAqb3J0LCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCiB7Ci0JaW50IGVycjsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCiAJLyoKQEAgLTQzNSwyNSArNTAzLDMwIEBACiAKIAkJcnQtPnJ0NmlfbmV4dGhvcCA9IG5kaXNjX2dldF9uZWlnaChydC0+cnQ2aV9kZXYsICZydC0+cnQ2aV9nYXRld2F5KTsKIAotCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKLQotCQllcnIgPSBpcDZfaW5zX3J0KHJ0LCBOVUxMLCBOVUxMLCByZXEpOwotCQlpZiAoZXJyID09IDApCi0JCQlyZXR1cm4gcnQ7Ci0KLQkJcnQtPnUuZHN0LmVycm9yID0gZXJyOwotCi0JCXJldHVybiBydDsKIAl9Ci0JZHN0X2hvbGQoJmlwNl9udWxsX2VudHJ5LnUuZHN0KTsKLQlyZXR1cm4gJmlwNl9udWxsX2VudHJ5OworCisJcmV0dXJuIHJ0OworfQorCitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWxsb2NfY2xvbmUoc3RydWN0IHJ0Nl9pbmZvICpvcnQsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCit7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9ydF9jb3B5KG9ydCk7CisJaWYgKHJ0KSB7CisJCWlwdjZfYWRkcl9jb3B5KCZydC0+cnQ2aV9kc3QuYWRkciwgZGFkZHIpOworCQlydC0+cnQ2aV9kc3QucGxlbiA9IDEyODsKKwkJcnQtPnJ0NmlfZmxhZ3MgfD0gUlRGX0NBQ0hFOworCQlpZiAocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfUkVKRUNUKQorCQkJcnQtPnUuZHN0LmVycm9yID0gb3J0LT51LmRzdC5lcnJvcjsKKwkJcnQtPnUuZHN0LmZsYWdzIHw9IERTVF9IT1NUOworCQlydC0+cnQ2aV9uZXh0aG9wID0gbmVpZ2hfY2xvbmUob3J0LT5ydDZpX25leHRob3ApOworCX0KKwlyZXR1cm4gcnQ7CiB9CiAKICNkZWZpbmUgQkFDS1RSQUNLKCkgXAotaWYgKHJ0ID09ICZpcDZfbnVsbF9lbnRyeSAmJiBzdHJpY3QpIHsgXAoraWYgKHJ0ID09ICZpcDZfbnVsbF9lbnRyeSkgeyBcCiAgICAgICAgd2hpbGUgKChmbiA9IGZuLT5wYXJlbnQpICE9IE5VTEwpIHsgXAogCQlpZiAoZm4tPmZuX2ZsYWdzICYgUlROX1JPT1QpIHsgXAotCQkJZHN0X2hvbGQoJnJ0LT51LmRzdCk7IFwKIAkJCWdvdG8gb3V0OyBcCiAJCX0gXAogCQlpZiAoZm4tPmZuX2ZsYWdzICYgUlROX1JUSU5GTykgXApAQCAtNDY1LDExNSArNTM4LDEzOCBAQAogdm9pZCBpcDZfcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZmliNl9ub2RlICpmbjsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OworCXN0cnVjdCBydDZfaW5mbyAqcnQsICpucnQ7CiAJaW50IHN0cmljdDsKIAlpbnQgYXR0ZW1wdHMgPSAzOworCWludCBlcnI7CisJaW50IHJlYWNoYWJsZSA9IFJUNl9TRUxFQ1RfRl9SRUFDSEFCTEU7CiAKLQlzdHJpY3QgPSBpcHY2X2FkZHJfdHlwZSgmc2tiLT5uaC5pcHY2aC0+ZGFkZHIpICYgKElQVjZfQUREUl9NVUxUSUNBU1R8SVBWNl9BRERSX0xJTktMT0NBTCk7CisJc3RyaWN0ID0gaXB2Nl9hZGRyX3R5cGUoJnNrYi0+bmguaXB2NmgtPmRhZGRyKSAmIChJUFY2X0FERFJfTVVMVElDQVNUfElQVjZfQUREUl9MSU5LTE9DQUwpID8gUlQ2X1NFTEVDVF9GX0lGQUNFIDogMDsKIAogcmVsb29rdXA6CiAJcmVhZF9sb2NrX2JoKCZydDZfbG9jayk7CiAKK3Jlc3RhcnRfMjoKIAlmbiA9IGZpYjZfbG9va3VwKCZpcDZfcm91dGluZ190YWJsZSwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAogCQkJICZza2ItPm5oLmlwdjZoLT5zYWRkcik7CiAKIHJlc3RhcnQ6Ci0JcnQgPSBmbi0+bGVhZjsKLQotCWlmICgocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpKSB7Ci0JCXJ0ID0gcnQ2X2RldmljZV9tYXRjaChydCwgc2tiLT5kZXYtPmlmaW5kZXgsIHN0cmljdCk7Ci0JCUJBQ0tUUkFDSygpOwotCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcnQgPSBydDZfZGV2aWNlX21hdGNoKHJ0LCBza2ItPmRldi0+aWZpbmRleCwgc3RyaWN0KTsKKwlydCA9IHJ0Nl9zZWxlY3QoJmZuLT5sZWFmLCBza2ItPmRldi0+aWZpbmRleCwgc3RyaWN0IHwgcmVhY2hhYmxlKTsKIAlCQUNLVFJBQ0soKTsKKwlpZiAocnQgPT0gJmlwNl9udWxsX2VudHJ5IHx8CisJICAgIHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKQorCQlnb3RvIG91dDsKIAotCWlmICghcnQtPnJ0NmlfbmV4dGhvcCAmJiAhKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX05PTkVYVEhPUCkpIHsKLQkJc3RydWN0IHJ0Nl9pbmZvICpucnQ7Ci0JCWRzdF9ob2xkKCZydC0+dS5kc3QpOwotCQlyZWFkX3VubG9ja19iaCgmcnQ2X2xvY2spOwotCi0JCW5ydCA9IHJ0Nl9jb3cocnQsICZza2ItPm5oLmlwdjZoLT5kYWRkciwKLQkJCSAgICAgICZza2ItPm5oLmlwdjZoLT5zYWRkciwKLQkJCSAgICAgICZORVRMSU5LX0NCKHNrYikpOwotCi0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwotCQlydCA9IG5ydDsKLQotCQlpZiAocnQtPnUuZHN0LmVycm9yICE9IC1FRVhJU1QgfHwgLS1hdHRlbXB0cyA8PSAwKQotCQkJZ290byBvdXQyOwotCi0JCS8qIFJhY2UgY29uZGl0aW9uISBJbiB0aGUgZ2FwLCB3aGVuIHJ0Nl9sb2NrIHdhcwotCQkgICByZWxlYXNlZCBzb21lb25lIGNvdWxkIGluc2VydCB0aGlzIHJvdXRlLiAgUmVsb29rdXAuCi0JCSovCi0JCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwotCQlnb3RvIHJlbG9va3VwOwotCX0KIAlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKKwlyZWFkX3VubG9ja19iaCgmcnQ2X2xvY2spOworCisJaWYgKCFydC0+cnQ2aV9uZXh0aG9wICYmICEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfTk9ORVhUSE9QKSkKKwkJbnJ0ID0gcnQ2X2FsbG9jX2NvdyhydCwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLCAmc2tiLT5uaC5pcHY2aC0+c2FkZHIpOworCWVsc2UgeworI2lmIENMT05FX09GRkxJTktfUk9VVEUKKwkJbnJ0ID0gcnQ2X2FsbG9jX2Nsb25lKHJ0LCAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIpOworI2Vsc2UKKwkJZ290byBvdXQyOworI2VuZGlmCisJfQorCisJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CisJcnQgPSBucnQgPyA6ICZpcDZfbnVsbF9lbnRyeTsKKworCWRzdF9ob2xkKCZydC0+dS5kc3QpOworCWlmIChucnQpIHsKKwkJZXJyID0gaXA2X2luc19ydChucnQsIE5VTEwsIE5VTEwsICZORVRMSU5LX0NCKHNrYikpOworCQlpZiAoIWVycikKKwkJCWdvdG8gb3V0MjsKKwl9CisKKwlpZiAoLS1hdHRlbXB0cyA8PSAwKQorCQlnb3RvIG91dDI7CisKKwkvKgorCSAqIFJhY2UgY29uZGl0aW9uISBJbiB0aGUgZ2FwLCB3aGVuIHJ0Nl9sb2NrIHdhcworCSAqIHJlbGVhc2VkIHNvbWVvbmUgY291bGQgaW5zZXJ0IHRoaXMgcm91dGUuICBSZWxvb2t1cC4KKwkgKi8KKwlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwlnb3RvIHJlbG9va3VwOwogCiBvdXQ6CisJaWYgKHJlYWNoYWJsZSkgeworCQlyZWFjaGFibGUgPSAwOworCQlnb3RvIHJlc3RhcnRfMjsKKwl9CisJZHN0X2hvbGQoJnJ0LT51LmRzdCk7CiAJcmVhZF91bmxvY2tfYmgoJnJ0Nl9sb2NrKTsKIG91dDI6CiAJcnQtPnUuZHN0Lmxhc3R1c2UgPSBqaWZmaWVzOwogCXJ0LT51LmRzdC5fX3VzZSsrOwogCXNrYi0+ZHN0ID0gKHN0cnVjdCBkc3RfZW50cnkgKikgcnQ7CisJcmV0dXJuOwogfQogCiBzdHJ1Y3QgZHN0X2VudHJ5ICogaXA2X3JvdXRlX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aSAqZmwpCiB7CiAJc3RydWN0IGZpYjZfbm9kZSAqZm47Ci0Jc3RydWN0IHJ0Nl9pbmZvICpydDsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqbnJ0OwogCWludCBzdHJpY3Q7CiAJaW50IGF0dGVtcHRzID0gMzsKKwlpbnQgZXJyOworCWludCByZWFjaGFibGUgPSBSVDZfU0VMRUNUX0ZfUkVBQ0hBQkxFOwogCi0Jc3RyaWN0ID0gaXB2Nl9hZGRyX3R5cGUoJmZsLT5mbDZfZHN0KSAmIChJUFY2X0FERFJfTVVMVElDQVNUfElQVjZfQUREUl9MSU5LTE9DQUwpOworCXN0cmljdCA9IGlwdjZfYWRkcl90eXBlKCZmbC0+Zmw2X2RzdCkgJiAoSVBWNl9BRERSX01VTFRJQ0FTVHxJUFY2X0FERFJfTElOS0xPQ0FMKSA/IFJUNl9TRUxFQ1RfRl9JRkFDRSA6IDA7CiAKIHJlbG9va3VwOgogCXJlYWRfbG9ja19iaCgmcnQ2X2xvY2spOwogCityZXN0YXJ0XzI6CiAJZm4gPSBmaWI2X2xvb2t1cCgmaXA2X3JvdXRpbmdfdGFibGUsICZmbC0+Zmw2X2RzdCwgJmZsLT5mbDZfc3JjKTsKIAogcmVzdGFydDoKLQlydCA9IGZuLT5sZWFmOwotCi0JaWYgKChydC0+cnQ2aV9mbGFncyAmIFJURl9DQUNIRSkpIHsKLQkJcnQgPSBydDZfZGV2aWNlX21hdGNoKHJ0LCBmbC0+b2lmLCBzdHJpY3QpOwotCQlCQUNLVFJBQ0soKTsKLQkJZHN0X2hvbGQoJnJ0LT51LmRzdCk7CisJcnQgPSBydDZfc2VsZWN0KCZmbi0+bGVhZiwgZmwtPm9pZiwgc3RyaWN0IHwgcmVhY2hhYmxlKTsKKwlCQUNLVFJBQ0soKTsKKwlpZiAocnQgPT0gJmlwNl9udWxsX2VudHJ5IHx8CisJICAgIHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKQogCQlnb3RvIG91dDsKLQl9Ci0JaWYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0RFRkFVTFQpIHsKLQkJaWYgKHJ0LT5ydDZpX21ldHJpYyA+PSBJUDZfUlRfUFJJT19BRERSQ09ORikKLQkJCXJ0ID0gcnQ2X2Jlc3RfZGZsdChydCwgZmwtPm9pZik7Ci0JfSBlbHNlIHsKLQkJcnQgPSBydDZfZGV2aWNlX21hdGNoKHJ0LCBmbC0+b2lmLCBzdHJpY3QpOwotCQlCQUNLVFJBQ0soKTsKLQl9CiAKLQlpZiAoIXJ0LT5ydDZpX25leHRob3AgJiYgIShydC0+cnQ2aV9mbGFncyAmIFJURl9OT05FWFRIT1ApKSB7Ci0JCXN0cnVjdCBydDZfaW5mbyAqbnJ0OwotCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKLQkJcmVhZF91bmxvY2tfYmgoJnJ0Nl9sb2NrKTsKLQotCQlucnQgPSBydDZfY293KHJ0LCAmZmwtPmZsNl9kc3QsICZmbC0+Zmw2X3NyYywgTlVMTCk7Ci0KLQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Ci0JCXJ0ID0gbnJ0OwotCi0JCWlmIChydC0+dS5kc3QuZXJyb3IgIT0gLUVFWElTVCB8fCAtLWF0dGVtcHRzIDw9IDApCi0JCQlnb3RvIG91dDI7Ci0KLQkJLyogUmFjZSBjb25kaXRpb24hIEluIHRoZSBnYXAsIHdoZW4gcnQ2X2xvY2sgd2FzCi0JCSAgIHJlbGVhc2VkIHNvbWVvbmUgY291bGQgaW5zZXJ0IHRoaXMgcm91dGUuICBSZWxvb2t1cC4KLQkJKi8KLQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Ci0JCWdvdG8gcmVsb29rdXA7Ci0JfQogCWRzdF9ob2xkKCZydC0+dS5kc3QpOworCXJlYWRfdW5sb2NrX2JoKCZydDZfbG9jayk7CisKKwlpZiAoIXJ0LT5ydDZpX25leHRob3AgJiYgIShydC0+cnQ2aV9mbGFncyAmIFJURl9OT05FWFRIT1ApKQorCQlucnQgPSBydDZfYWxsb2NfY293KHJ0LCAmZmwtPmZsNl9kc3QsICZmbC0+Zmw2X3NyYyk7CisJZWxzZSB7CisjaWYgQ0xPTkVfT0ZGTElOS19ST1VURQorCQlucnQgPSBydDZfYWxsb2NfY2xvbmUocnQsICZmbC0+Zmw2X2RzdCk7CisjZWxzZQorCQlnb3RvIG91dDI7CisjZW5kaWYKKwl9CisKKwlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKKwlydCA9IG5ydCA/IDogJmlwNl9udWxsX2VudHJ5OworCisJZHN0X2hvbGQoJnJ0LT51LmRzdCk7CisJaWYgKG5ydCkgeworCQllcnIgPSBpcDZfaW5zX3J0KG5ydCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCWlmICghZXJyKQorCQkJZ290byBvdXQyOworCX0KKworCWlmICgtLWF0dGVtcHRzIDw9IDApCisJCWdvdG8gb3V0MjsKKworCS8qCisJICogUmFjZSBjb25kaXRpb24hIEluIHRoZSBnYXAsIHdoZW4gcnQ2X2xvY2sgd2FzCisJICogcmVsZWFzZWQgc29tZW9uZSBjb3VsZCBpbnNlcnQgdGhpcyByb3V0ZS4gIFJlbG9va3VwLgorCSAqLworCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOworCWdvdG8gcmVsb29rdXA7CiAKIG91dDoKKwlpZiAocmVhY2hhYmxlKSB7CisJCXJlYWNoYWJsZSA9IDA7CisJCWdvdG8gcmVzdGFydF8yOworCX0KKwlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKIAlyZWFkX3VubG9ja19iaCgmcnQ2X2xvY2spOwogb3V0MjoKIAlydC0+dS5kc3QubGFzdHVzZSA9IGppZmZpZXM7CkBAIC05OTksOCArMTA5NSw2IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZydDZfbG9jayk7CiAKLQlydDZfcmVzZXRfZGZsdF9wb2ludGVyKE5VTEwpOwotCiAJZXJyID0gZmliNl9kZWwocnQsIG5saCwgX3J0YXR0ciwgcmVxKTsKIAlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKIApAQCAtMTA1MCw1OSArMTE0NCw2MyBAQAogdm9pZCBydDZfcmVkaXJlY3Qoc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAogCQkgIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCB1OCAqbGxhZGRyLCBpbnQgb25fbGluaykKIHsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqbnJ0OwotCi0JLyogTG9jYXRlIG9sZCByb3V0ZSB0byB0aGlzIGRlc3RpbmF0aW9uLiAqLwotCXJ0ID0gcnQ2X2xvb2t1cChkZXN0LCBOVUxMLCBuZWlnaC0+ZGV2LT5pZmluZGV4LCAxKTsKLQotCWlmIChydCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAobmVpZ2gtPmRldiAhPSBydC0+cnQ2aV9kZXYpCi0JCWdvdG8gb3V0OworCXN0cnVjdCBydDZfaW5mbyAqcnQsICpucnQgPSBOVUxMOworCWludCBzdHJpY3Q7CisJc3RydWN0IGZpYjZfbm9kZSAqZm47CiAKIAkvKgotCSAqIEN1cnJlbnQgcm91dGUgaXMgb24tbGluazsgcmVkaXJlY3QgaXMgYWx3YXlzIGludmFsaWQuCi0JICogCi0JICogU2VlbXMsIHByZXZpb3VzIHN0YXRlbWVudCBpcyBub3QgdHJ1ZS4gSXQgY291bGQKLQkgKiBiZSBub2RlLCB3aGljaCBsb29rcyBmb3IgdXMgYXMgb24tbGluayAoZi5lLiBwcm94eSBuZGlzYykKLQkgKiBCdXQgdGhlbiByb3V0ZXIgc2VydmluZyBpdCBtaWdodCBkZWNpZGUsIHRoYXQgd2Ugc2hvdWxkCi0JICoga25vdyB0cnV0aCA4KTgpIC0tQU5LICg5ODA3MjYpLgorCSAqIEdldCB0aGUgImN1cnJlbnQiIHJvdXRlIGZvciB0aGlzIGRlc3RpbmF0aW9uIGFuZAorCSAqIGNoZWNrIGlmIHRoZSByZWRpcmVjdCBoYXMgY29tZSBmcm9tIGFwcHJvcmlhdGUgcm91dGVyLgorCSAqCisJICogUkZDIDI0NjEgc3BlY2lmaWVzIHRoYXQgcmVkaXJlY3RzIHNob3VsZCBvbmx5IGJlCisJICogYWNjZXB0ZWQgaWYgdGhleSBjb21lIGZyb20gdGhlIG5leHRob3AgdG8gdGhlIHRhcmdldC4KKwkgKiBEdWUgdG8gdGhlIHdheSB0aGUgcm91dGVzIGFyZSBjaG9zZW4sIHRoaXMgbm90aW9uCisJICogaXMgYSBiaXQgZnV6enkgYW5kIG9uZSBtaWdodCBuZWVkIHRvIGNoZWNrIGFsbCBwb3NzaWJsZQorCSAqIHJvdXRlcy4KIAkgKi8KLQlpZiAoIShydC0+cnQ2aV9mbGFncyZSVEZfR0FURVdBWSkpCi0JCWdvdG8gb3V0OworCXN0cmljdCA9IGlwdjZfYWRkcl90eXBlKGRlc3QpICYgKElQVjZfQUREUl9NVUxUSUNBU1QgfCBJUFY2X0FERFJfTElOS0xPQ0FMKTsKIAotCS8qCi0JICoJUkZDIDI0NjEgc3BlY2lmaWVzIHRoYXQgcmVkaXJlY3RzIHNob3VsZCBvbmx5IGJlCi0JICoJYWNjZXB0ZWQgaWYgdGhleSBjb21lIGZyb20gdGhlIG5leHRob3AgdG8gdGhlIHRhcmdldC4KLQkgKglEdWUgdG8gdGhlIHdheSBkZWZhdWx0IHJvdXRlcnMgYXJlIGNob3NlbiwgdGhpcyBub3Rpb24KLQkgKglpcyBhIGJpdCBmdXp6eSBhbmQgb25lIG1pZ2h0IG5lZWQgdG8gY2hlY2sgYWxsIGRlZmF1bHQKLQkgKglyb3V0ZXJzLgotCSAqLwotCWlmICghaXB2Nl9hZGRyX2VxdWFsKHNhZGRyLCAmcnQtPnJ0NmlfZ2F0ZXdheSkpIHsKLQkJaWYgKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0RFRkFVTFQpIHsKLQkJCXN0cnVjdCBydDZfaW5mbyAqcnQxOwotCi0JCQlyZWFkX2xvY2soJnJ0Nl9sb2NrKTsKLQkJCWZvciAocnQxID0gaXA2X3JvdXRpbmdfdGFibGUubGVhZjsgcnQxOyBydDEgPSBydDEtPnUubmV4dCkgewotCQkJCWlmIChpcHY2X2FkZHJfZXF1YWwoc2FkZHIsICZydDEtPnJ0NmlfZ2F0ZXdheSkpIHsKLQkJCQkJZHN0X2hvbGQoJnJ0MS0+dS5kc3QpOwotCQkJCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKLQkJCQkJcmVhZF91bmxvY2soJnJ0Nl9sb2NrKTsKLQkJCQkJcnQgPSBydDE7Ci0JCQkJCWdvdG8gc291cmNlX29rOwotCQkJCX0KLQkJCX0KLQkJCXJlYWRfdW5sb2NrKCZydDZfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZydDZfbG9jayk7CisJZm4gPSBmaWI2X2xvb2t1cCgmaXA2X3JvdXRpbmdfdGFibGUsIGRlc3QsIE5VTEwpOworcmVzdGFydDoKKwlmb3IgKHJ0ID0gZm4tPmxlYWY7IHJ0OyBydCA9IHJ0LT51Lm5leHQpIHsKKwkJLyoKKwkJICogQ3VycmVudCByb3V0ZSBpcyBvbi1saW5rOyByZWRpcmVjdCBpcyBhbHdheXMgaW52YWxpZC4KKwkJICoKKwkJICogU2VlbXMsIHByZXZpb3VzIHN0YXRlbWVudCBpcyBub3QgdHJ1ZS4gSXQgY291bGQKKwkJICogYmUgbm9kZSwgd2hpY2ggbG9va3MgZm9yIHVzIGFzIG9uLWxpbmsgKGYuZS4gcHJveHkgbmRpc2MpCisJCSAqIEJ1dCB0aGVuIHJvdXRlciBzZXJ2aW5nIGl0IG1pZ2h0IGRlY2lkZSwgdGhhdCB3ZSBzaG91bGQKKwkJICoga25vdyB0cnV0aCA4KTgpIC0tQU5LICg5ODA3MjYpLgorCQkgKi8KKwkJaWYgKHJ0Nl9jaGVja19leHBpcmVkKHJ0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIShydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobmVpZ2gtPmRldiAhPSBydC0+cnQ2aV9kZXYpCisJCQljb250aW51ZTsKKwkJaWYgKCFpcHY2X2FkZHJfZXF1YWwoc2FkZHIsICZydC0+cnQ2aV9nYXRld2F5KSkKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisJaWYgKHJ0KQorCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKKwllbHNlIGlmIChzdHJpY3QpIHsKKwkJd2hpbGUgKChmbiA9IGZuLT5wYXJlbnQpICE9IE5VTEwpIHsKKwkJCWlmIChmbi0+Zm5fZmxhZ3MgJiBSVE5fUk9PVCkKKwkJCQlicmVhazsKKwkJCWlmIChmbi0+Zm5fZmxhZ3MgJiBSVE5fUlRJTkZPKQorCQkJCWdvdG8gcmVzdGFydDsKIAkJfQorCX0KKwlyZWFkX3VubG9ja19iaCgmcnQ2X2xvY2spOworCisJaWYgKCFydCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgInJ0Nl9yZWRpcmVjdDogc291cmNlIGlzbid0IGEgdmFsaWQgbmV4dGhvcCAiCiAJCQkgICAgICAgImZvciByZWRpcmVjdCB0YXJnZXRcbiIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAotc291cmNlX29rOgotCiAJLyoKIAkgKglXZSBoYXZlIGZpbmFsbHkgZGVjaWRlZCB0byBhY2NlcHQgaXQuCiAJICovCkBAIC0xMjEwLDM4ICsxMzA4LDI3IEBACiAJICAgMS4gSXQgaXMgY29ubmVjdGVkIHJvdXRlLiBBY3Rpb246IENPVwogCSAgIDIuIEl0IGlzIGdhdGV3YXllZCByb3V0ZSBvciBOT05FWFRIT1Agcm91dGUuIEFjdGlvbjogY2xvbmUgaXQuCiAJICovCi0JaWYgKCFydC0+cnQ2aV9uZXh0aG9wICYmICEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfTk9ORVhUSE9QKSkgewotCQlucnQgPSBydDZfY293KHJ0LCBkYWRkciwgc2FkZHIsIE5VTEwpOwotCQlpZiAoIW5ydC0+dS5kc3QuZXJyb3IpIHsKLQkJCW5ydC0+dS5kc3QubWV0cmljc1tSVEFYX01UVS0xXSA9IHBtdHU7Ci0JCQlpZiAoYWxsZnJhZykKLQkJCQlucnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9GRUFUVVJFUy0xXSB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKLQkJCS8qIEFjY29yZGluZyB0byBSRkMgMTk4MSwgZGV0ZWN0aW5nIFBNVFUgaW5jcmVhc2Ugc2hvdWxkbid0IGJlCi0JCQkgICBoYXBwZW5lZCB3aXRoaW4gNSBtaW5zLCB0aGUgcmVjb21tZW5kZWQgdGltZXIgaXMgMTAgbWlucy4KLQkJCSAgIEhlcmUgdGhpcyByb3V0ZSBleHBpcmF0aW9uIHRpbWUgaXMgc2V0IHRvIGlwNl9ydF9tdHVfZXhwaXJlcwotCQkJICAgd2hpY2ggaXMgMTAgbWlucy4gQWZ0ZXIgMTAgbWlucyB0aGUgZGVjcmVhc2VkIHBtdHUgaXMgZXhwaXJlZAotCQkJICAgYW5kIGRldGVjdGluZyBQTVRVIGluY3JlYXNlIHdpbGwgYmUgYXV0b21hdGljYWxseSBoYXBwZW5lZC4KLQkJCSAqLwotCQkJZHN0X3NldF9leHBpcmVzKCZucnQtPnUuZHN0LCBpcDZfcnRfbXR1X2V4cGlyZXMpOwotCQkJbnJ0LT5ydDZpX2ZsYWdzIHw9IFJURl9EWU5BTUlDfFJURl9FWFBJUkVTOwotCQl9Ci0JCWRzdF9yZWxlYXNlKCZucnQtPnUuZHN0KTsKLQl9IGVsc2UgewotCQlucnQgPSBpcDZfcnRfY29weShydCk7Ci0JCWlmIChucnQgPT0gTlVMTCkKLQkJCWdvdG8gb3V0OwotCQlpcHY2X2FkZHJfY29weSgmbnJ0LT5ydDZpX2RzdC5hZGRyLCBkYWRkcik7Ci0JCW5ydC0+cnQ2aV9kc3QucGxlbiA9IDEyODsKLQkJbnJ0LT51LmRzdC5mbGFncyB8PSBEU1RfSE9TVDsKLQkJbnJ0LT5ydDZpX25leHRob3AgPSBuZWlnaF9jbG9uZShydC0+cnQ2aV9uZXh0aG9wKTsKLQkJZHN0X3NldF9leHBpcmVzKCZucnQtPnUuZHN0LCBpcDZfcnRfbXR1X2V4cGlyZXMpOwotCQlucnQtPnJ0NmlfZmxhZ3MgfD0gUlRGX0RZTkFNSUN8UlRGX0NBQ0hFfFJURl9FWFBJUkVTOworCWlmICghcnQtPnJ0NmlfbmV4dGhvcCAmJiAhKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX05PTkVYVEhPUCkpCisJCW5ydCA9IHJ0Nl9hbGxvY19jb3cocnQsIGRhZGRyLCBzYWRkcik7CisJZWxzZQorCQlucnQgPSBydDZfYWxsb2NfY2xvbmUocnQsIGRhZGRyKTsKKworCWlmIChucnQpIHsKIAkJbnJ0LT51LmRzdC5tZXRyaWNzW1JUQVhfTVRVLTFdID0gcG10dTsKIAkJaWYgKGFsbGZyYWcpCiAJCQlucnQtPnUuZHN0Lm1ldHJpY3NbUlRBWF9GRUFUVVJFUy0xXSB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKKworCQkvKiBBY2NvcmRpbmcgdG8gUkZDIDE5ODEsIGRldGVjdGluZyBQTVRVIGluY3JlYXNlIHNob3VsZG4ndCBiZQorCQkgKiBoYXBwZW5lZCB3aXRoaW4gNSBtaW5zLCB0aGUgcmVjb21tZW5kZWQgdGltZXIgaXMgMTAgbWlucy4KKwkJICogSGVyZSB0aGlzIHJvdXRlIGV4cGlyYXRpb24gdGltZSBpcyBzZXQgdG8gaXA2X3J0X210dV9leHBpcmVzCisJCSAqIHdoaWNoIGlzIDEwIG1pbnMuIEFmdGVyIDEwIG1pbnMgdGhlIGRlY3JlYXNlZCBwbXR1IGlzIGV4cGlyZWQKKwkJICogYW5kIGRldGVjdGluZyBQTVRVIGluY3JlYXNlIHdpbGwgYmUgYXV0b21hdGljYWxseSBoYXBwZW5lZC4KKwkJICovCisJCWRzdF9zZXRfZXhwaXJlcygmbnJ0LT51LmRzdCwgaXA2X3J0X210dV9leHBpcmVzKTsKKwkJbnJ0LT5ydDZpX2ZsYWdzIHw9IFJURl9EWU5BTUlDfFJURl9FWFBJUkVTOworCiAJCWlwNl9pbnNfcnQobnJ0LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAl9Ci0KIG91dDoKIAlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKIH0KQEAgLTEyODAsNiArMTM2Nyw1NyBAQAogCXJldHVybiBydDsKIH0KIAorI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk8KK3N0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9nZXRfcm91dGVfaW5mbyhzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKKwkJCQkJICAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4KQoreworCXN0cnVjdCBmaWI2X25vZGUgKmZuOworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBOVUxMOworCisJd3JpdGVfbG9ja19iaCgmcnQ2X2xvY2spOworCWZuID0gZmliNl9sb2NhdGUoJmlwNl9yb3V0aW5nX3RhYmxlLCBwcmVmaXggLHByZWZpeGxlbiwgTlVMTCwgMCk7CisJaWYgKCFmbikKKwkJZ290byBvdXQ7CisKKwlmb3IgKHJ0ID0gZm4tPmxlYWY7IHJ0OyBydCA9IHJ0LT51Lm5leHQpIHsKKwkJaWYgKHJ0LT5ydDZpX2Rldi0+aWZpbmRleCAhPSBpZmluZGV4KQorCQkJY29udGludWU7CisJCWlmICgocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX1JPVVRFSU5GT3xSVEZfR0FURVdBWSkpICE9IChSVEZfUk9VVEVJTkZPfFJURl9HQVRFV0FZKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlwdjZfYWRkcl9lcXVhbCgmcnQtPnJ0NmlfZ2F0ZXdheSwgZ3dhZGRyKSkKKwkJCWNvbnRpbnVlOworCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKKwkJYnJlYWs7CisJfQorb3V0OgorCXdyaXRlX3VubG9ja19iaCgmcnQ2X2xvY2spOworCXJldHVybiBydDsKK30KKworc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FkZF9yb3V0ZV9pbmZvKHN0cnVjdCBpbjZfYWRkciAqcHJlZml4LCBpbnQgcHJlZml4bGVuLAorCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwgaW50IGlmaW5kZXgsCisJCQkJCSAgIHVuc2lnbmVkIHByZWYpCit7CisJc3RydWN0IGluNl9ydG1zZyBydG1zZzsKKworCW1lbXNldCgmcnRtc2csIDAsIHNpemVvZihydG1zZykpOworCXJ0bXNnLnJ0bXNnX3R5cGUgPSBSVE1TR19ORVdST1VURTsKKwlpcHY2X2FkZHJfY29weSgmcnRtc2cucnRtc2dfZHN0LCBwcmVmaXgpOworCXJ0bXNnLnJ0bXNnX2RzdF9sZW4gPSBwcmVmaXhsZW47CisJaXB2Nl9hZGRyX2NvcHkoJnJ0bXNnLnJ0bXNnX2dhdGV3YXksIGd3YWRkcik7CisJcnRtc2cucnRtc2dfbWV0cmljID0gMTAyNDsKKwlydG1zZy5ydG1zZ19mbGFncyA9IFJURl9HQVRFV0FZIHwgUlRGX0FERFJDT05GIHwgUlRGX1JPVVRFSU5GTyB8IFJURl9VUCB8IFJURl9QUkVGKHByZWYpOworCS8qIFdlIHNob3VsZCB0cmVhdCBpdCBhcyBhIGRlZmF1bHQgcm91dGUgaWYgcHJlZml4IGxlbmd0aCBpcyAwLiAqLworCWlmICghcHJlZml4bGVuKQorCQlydG1zZy5ydG1zZ19mbGFncyB8PSBSVEZfREVGQVVMVDsKKwlydG1zZy5ydG1zZ19pZmluZGV4ID0gaWZpbmRleDsKKworCWlwNl9yb3V0ZV9hZGQoJnJ0bXNnLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCXJldHVybiBydDZfZ2V0X3JvdXRlX2luZm8ocHJlZml4LCBwcmVmaXhsZW4sIGd3YWRkciwgaWZpbmRleCk7Cit9CisjZW5kaWYKKwogc3RydWN0IHJ0Nl9pbmZvICpydDZfZ2V0X2RmbHRfcm91dGVyKHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsJCiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKQEAgLTEyOTAsNiArMTQyOCw3IEBACiAJd3JpdGVfbG9ja19iaCgmcnQ2X2xvY2spOwogCWZvciAocnQgPSBmbi0+bGVhZjsgcnQ7IHJ0PXJ0LT51Lm5leHQpIHsKIAkJaWYgKGRldiA9PSBydC0+cnQ2aV9kZXYgJiYKKwkJICAgICgocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0FERFJDT05GIHwgUlRGX0RFRkFVTFQpKSA9PSAoUlRGX0FERFJDT05GIHwgUlRGX0RFRkFVTFQpKSAmJgogCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZydC0+cnQ2aV9nYXRld2F5LCBhZGRyKSkKIAkJCWJyZWFrOwogCX0KQEAgLTEzMDAsNyArMTQzOSw4IEBACiB9CiAKIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FkZF9kZmx0X3JvdXRlcihzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwKLQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHByZWYpCiB7CiAJc3RydWN0IGluNl9ydG1zZyBydG1zZzsKIApAQCAtMTMwOCw3ICsxNDQ4LDggQEAKIAlydG1zZy5ydG1zZ190eXBlID0gUlRNU0dfTkVXUk9VVEU7CiAJaXB2Nl9hZGRyX2NvcHkoJnJ0bXNnLnJ0bXNnX2dhdGV3YXksIGd3YWRkcik7CiAJcnRtc2cucnRtc2dfbWV0cmljID0gMTAyNDsKLQlydG1zZy5ydG1zZ19mbGFncyA9IFJURl9HQVRFV0FZIHwgUlRGX0FERFJDT05GIHwgUlRGX0RFRkFVTFQgfCBSVEZfVVAgfCBSVEZfRVhQSVJFUzsKKwlydG1zZy5ydG1zZ19mbGFncyA9IFJURl9HQVRFV0FZIHwgUlRGX0FERFJDT05GIHwgUlRGX0RFRkFVTFQgfCBSVEZfVVAgfCBSVEZfRVhQSVJFUyB8CisJCQkgICAgUlRGX1BSRUYocHJlZik7CiAKIAlydG1zZy5ydG1zZ19pZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCkBAIC0xMzI2LDggKzE0NjcsNiBAQAogCQlpZiAocnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0RFRkFVTFQgfCBSVEZfQUREUkNPTkYpKSB7CiAJCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKIAotCQkJcnQ2X3Jlc2V0X2RmbHRfcG9pbnRlcihOVUxMKTsKLQogCQkJcmVhZF91bmxvY2tfYmgoJnJ0Nl9sb2NrKTsKIAogCQkJaXA2X2RlbF9ydChydCwgTlVMTCwgTlVMTCwgTlVMTCk7CkBAIC0xNzM4LDExICsxODc3LDEwIEBACiAJCS8qCiAJCSAqIDIuIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHdhbGtlci4KIAkJICovCi0JCXcgPSBrbWFsbG9jKHNpemVvZigqdyksIEdGUF9BVE9NSUMpOworCQl3ID0ga3phbGxvYyhzaXplb2YoKncpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHcgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlSVDZfVFJBQ0UoImR1bXA8JXAiLCB3KTsKLQkJbWVtc2V0KHcsIDAsIHNpemVvZigqdykpOwogCQl3LT5yb290ID0gJmlwNl9yb3V0aW5nX3RhYmxlOwogCQl3LT5mdW5jID0gZmliNl9kdW1wX25vZGU7CiAJCXctPmFyZ3MgPSAmYXJnOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggY2E5Y2Y2ODUuLjMwMWVlZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtOTg3LDYgKzk4Nyw3IEBACiAJCWluZXRfY3NrKG5ld3NrKS0+aWNza19leHRfaGRyX2xlbiA9IChuZXducC0+b3B0LT5vcHRfbmZsZW4gKwogCQkJCQkJICAgICBuZXducC0+b3B0LT5vcHRfZmxlbik7CiAKKwl0Y3BfbXR1cF9pbml0KG5ld3NrKTsKIAl0Y3Bfc3luY19tc3MobmV3c2ssIGRzdF9tdHUoZHN0KSk7CiAJbmV3dHAtPmFkdm1zcyA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX0FEVk1TUyk7CiAJdGNwX2luaXRpYWxpemVfcmN2X21zcyhuZXdzayk7CkBAIC0xMjk3LDE4ICsxMjk4LDIxIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfc3BlY2lmaWMgPSB7Ci0JLnF1ZXVlX3htaXQJPQlpbmV0Nl9jc2tfeG1pdCwKLQkuc2VuZF9jaGVjawk9CXRjcF92Nl9zZW5kX2NoZWNrLAotCS5yZWJ1aWxkX2hlYWRlcgk9CWluZXQ2X3NrX3JlYnVpbGRfaGVhZGVyLAotCS5jb25uX3JlcXVlc3QJPQl0Y3BfdjZfY29ubl9yZXF1ZXN0LAotCS5zeW5fcmVjdl9zb2NrCT0JdGNwX3Y2X3N5bl9yZWN2X3NvY2ssCi0JLnJlbWVtYmVyX3N0YW1wCT0JdGNwX3Y2X3JlbWVtYmVyX3N0YW1wLAotCS5uZXRfaGVhZGVyX2xlbgk9CXNpemVvZihzdHJ1Y3QgaXB2NmhkciksCi0KLQkuc2V0c29ja29wdAk9CWlwdjZfc2V0c29ja29wdCwKLQkuZ2V0c29ja29wdAk9CWlwdjZfZ2V0c29ja29wdCwKLQkuYWRkcjJzb2NrYWRkcgk9CWluZXQ2X2Nza19hZGRyMnNvY2thZGRyLAotCS5zb2NrYWRkcl9sZW4JPQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikKKwkucXVldWVfeG1pdAkgICA9IGluZXQ2X2Nza194bWl0LAorCS5zZW5kX2NoZWNrCSAgID0gdGNwX3Y2X3NlbmRfY2hlY2ssCisJLnJlYnVpbGRfaGVhZGVyCSAgID0gaW5ldDZfc2tfcmVidWlsZF9oZWFkZXIsCisJLmNvbm5fcmVxdWVzdAkgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsCisJLnN5bl9yZWN2X3NvY2sJICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jaywKKwkucmVtZW1iZXJfc3RhbXAJICAgPSB0Y3BfdjZfcmVtZW1iZXJfc3RhbXAsCisJLm5ldF9oZWFkZXJfbGVuCSAgID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwKKwkuc2V0c29ja29wdAkgICA9IGlwdjZfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IGlwdjZfZ2V0c29ja29wdCwKKwkuYWRkcjJzb2NrYWRkcgkgICA9IGluZXQ2X2Nza19hZGRyMnNvY2thZGRyLAorCS5zb2NrYWRkcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9pcHY2X3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X2lwdjZfZ2V0c29ja29wdCwKKyNlbmRpZgogfTsKIAogLyoKQEAgLTEzMTYsMjIgKzEzMjAsMjMgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZCA9IHsKLQkucXVldWVfeG1pdAk9CWlwX3F1ZXVlX3htaXQsCi0JLnNlbmRfY2hlY2sJPQl0Y3BfdjRfc2VuZF9jaGVjaywKLQkucmVidWlsZF9oZWFkZXIJPQlpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLAotCS5jb25uX3JlcXVlc3QJPQl0Y3BfdjZfY29ubl9yZXF1ZXN0LAotCS5zeW5fcmVjdl9zb2NrCT0JdGNwX3Y2X3N5bl9yZWN2X3NvY2ssCi0JLnJlbWVtYmVyX3N0YW1wCT0JdGNwX3Y0X3JlbWVtYmVyX3N0YW1wLAotCS5uZXRfaGVhZGVyX2xlbgk9CXNpemVvZihzdHJ1Y3QgaXBoZHIpLAotCi0JLnNldHNvY2tvcHQJPQlpcHY2X3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQJPQlpcHY2X2dldHNvY2tvcHQsCi0JLmFkZHIyc29ja2FkZHIJPQlpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkciwKLQkuc29ja2FkZHJfbGVuCT0Jc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpCisJLnF1ZXVlX3htaXQJICAgPSBpcF9xdWV1ZV94bWl0LAorCS5zZW5kX2NoZWNrCSAgID0gdGNwX3Y0X3NlbmRfY2hlY2ssCisJLnJlYnVpbGRfaGVhZGVyCSAgID0gaW5ldF9za19yZWJ1aWxkX2hlYWRlciwKKwkuY29ubl9yZXF1ZXN0CSAgID0gdGNwX3Y2X2Nvbm5fcmVxdWVzdCwKKwkuc3luX3JlY3Zfc29jawkgICA9IHRjcF92Nl9zeW5fcmVjdl9zb2NrLAorCS5yZW1lbWJlcl9zdGFtcAkgICA9IHRjcF92NF9yZW1lbWJlcl9zdGFtcCwKKwkubmV0X2hlYWRlcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSwKKwkuc2V0c29ja29wdAkgICA9IGlwdjZfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IGlwdjZfZ2V0c29ja29wdCwKKwkuYWRkcjJzb2NrYWRkcgkgICA9IGluZXQ2X2Nza19hZGRyMnNvY2thZGRyLAorCS5zb2NrYWRkcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9pcHY2X3NldHNvY2tvcHQsCisJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X2lwdjZfZ2V0c29ja29wdCwKKyNlbmRpZgogfTsKIAotCi0KIC8qIE5PVEU6IEEgbG90IG9mIHRoaW5ncyBzZXQgdG8gemVybyBleHBsaWNpdGx5IGJ5IGNhbGwgdG8KICAqICAgICAgIHNrX2FsbG9jKCkgc28gbmVlZCBub3QgYmUgZG9uZSBoZXJlLgogICovCkBAIC0xNTgzLDYgKzE1ODgsMTAgQEAKIAkub2JqX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCB0Y3A2X3NvY2spLAogCS50d3NrX3Byb3QJCT0gJnRjcDZfdGltZXdhaXRfc29ja19vcHMsCiAJLnJza19wcm90CQk9ICZ0Y3A2X3JlcXVlc3Rfc29ja19vcHMsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdAk9IGNvbXBhdF90Y3Bfc2V0c29ja29wdCwKKwkuY29tcGF0X2dldHNvY2tvcHQJPSBjb21wYXRfdGNwX2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgdGNwdjZfcHJvdG9jb2wgPSB7CkBAIC0xNjA0LDIxICsxNjEzLDEyIEBACiAKIHZvaWQgX19pbml0IHRjcHY2X2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCiAJLyogcmVnaXN0ZXIgaW5ldDYgcHJvdG9jb2wgKi8KIAlpZiAoaW5ldDZfYWRkX3Byb3RvY29sKCZ0Y3B2Nl9wcm90b2NvbCwgSVBQUk9UT19UQ1ApIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJ0Y3B2Nl9pbml0OiBDb3VsZCBub3QgcmVnaXN0ZXIgcHJvdG9jb2xcbiIpOwogCWluZXQ2X3JlZ2lzdGVyX3Byb3Rvc3coJnRjcHY2X3Byb3Rvc3cpOwogCi0JZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVUNiwgU09DS19SQVcsIElQUFJPVE9fVENQLCAmdGNwNl9zb2NrZXQpOwotCWlmIChlcnIgPCAwKQorCWlmIChpbmV0X2Nza19jdGxfc29ja19jcmVhdGUoJnRjcDZfc29ja2V0LCBQRl9JTkVUNiwgU09DS19SQVcsCisJCQkJICAgICBJUFBST1RPX1RDUCkgPCAwKQogCQlwYW5pYygiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgVENQdjYgY29udHJvbCBzb2NrZXQuXG4iKTsKLQl0Y3A2X3NvY2tldC0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwotCi0JLyogVW5oYXNoIGl0IHNvIHRoYXQgSVAgaW5wdXQgcHJvY2Vzc2luZyBkb2VzIG5vdCBldmVuCi0JICogc2VlIGl0LCB3ZSBkbyBub3Qgd2lzaCB0aGlzIHNvY2tldCB0byBzZWUgaW5jb21pbmcKLQkgKiBwYWNrZXRzLgotCSAqLwotCXRjcDZfc29ja2V0LT5zay0+c2tfcHJvdC0+dW5oYXNoKHRjcDZfc29ja2V0LT5zayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IGM0NzY0ODguLjhkMzQzMmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC04ODAsMTYgKzg4MCwxMyBAQAogLyoKICAqCVNvY2tldCBvcHRpb24gY29kZSBmb3IgVURQCiAgKi8KLXN0YXRpYyBpbnQgdWRwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIAorc3RhdGljIGludCBkb191ZHB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKIAlpbnQgdmFsOwogCWludCBlcnIgPSAwOwogCi0JaWYgKGxldmVsICE9IFNPTF9VRFApCi0JCXJldHVybiBpcHY2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Ci0KIAlpZihvcHRsZW48c2l6ZW9mKGludCkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC05MjcsMTUgKzkyNCwzMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdWRwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIAorc3RhdGljIGludCB1ZHB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlpZiAobGV2ZWwgIT0gU09MX1VEUCkKKwkJcmV0dXJuIGlwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gZG9fdWRwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3VkcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJaWYgKGxldmVsICE9IFNPTF9VRFApCisJCXJldHVybiBjb21wYXRfaXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwKKwkJCQkJICAgICAgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBkb191ZHB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZG9fdWRwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKIAlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKIAlpbnQgdmFsLCBsZW47CiAKLQlpZiAobGV2ZWwgIT0gU09MX1VEUCkKLQkJcmV0dXJuIGlwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLQogCWlmKGdldF91c2VyKGxlbixvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtOTY0LDYgKzk3NywyNSBAQAogICAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdWRwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpZiAobGV2ZWwgIT0gU09MX1VEUCkKKwkJcmV0dXJuIGlwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gZG9fdWRwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3VkcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlpZiAobGV2ZWwgIT0gU09MX1VEUCkKKwkJcmV0dXJuIGNvbXBhdF9pcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAorCQkJCQkgICAgICBvcHR2YWwsIG9wdGxlbik7CisJcmV0dXJuIGRvX3VkcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBpbmV0Nl9wcm90b2NvbCB1ZHB2Nl9wcm90b2NvbCA9IHsKIAkuaGFuZGxlcgk9CXVkcHY2X3JjdiwKIAkuZXJyX2hhbmRsZXIJPQl1ZHB2Nl9lcnIsCkBAIC0xMDM3LDIyICsxMDY5LDI2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHByb3RvIHVkcHY2X3Byb3QgPSB7Ci0JLm5hbWUgPQkJIlVEUHY2IiwKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkuY2xvc2UgPQl1ZHB2Nl9jbG9zZSwKLQkuY29ubmVjdCA9CWlwNl9kYXRhZ3JhbV9jb25uZWN0LAotCS5kaXNjb25uZWN0ID0JdWRwX2Rpc2Nvbm5lY3QsCi0JLmlvY3RsID0JdWRwX2lvY3RsLAotCS5kZXN0cm95ID0JdWRwdjZfZGVzdHJveV9zb2NrLAotCS5zZXRzb2Nrb3B0ID0JdWRwdjZfc2V0c29ja29wdCwKLQkuZ2V0c29ja29wdCA9CXVkcHY2X2dldHNvY2tvcHQsCi0JLnNlbmRtc2cgPQl1ZHB2Nl9zZW5kbXNnLAotCS5yZWN2bXNnID0JdWRwdjZfcmVjdm1zZywKLQkuYmFja2xvZ19yY3YgPQl1ZHB2Nl9xdWV1ZV9yY3Zfc2tiLAotCS5oYXNoID0JCXVkcF92Nl9oYXNoLAotCS51bmhhc2ggPQl1ZHBfdjZfdW5oYXNoLAotCS5nZXRfcG9ydCA9CXVkcF92Nl9nZXRfcG9ydCwKLQkub2JqX3NpemUgPQlzaXplb2Yoc3RydWN0IHVkcDZfc29jayksCisJLm5hbWUJCSAgID0gIlVEUHY2IiwKKwkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCisJLmNsb3NlCQkgICA9IHVkcHY2X2Nsb3NlLAorCS5jb25uZWN0CSAgID0gaXA2X2RhdGFncmFtX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QJICAgPSB1ZHBfZGlzY29ubmVjdCwKKwkuaW9jdGwJCSAgID0gdWRwX2lvY3RsLAorCS5kZXN0cm95CSAgID0gdWRwdjZfZGVzdHJveV9zb2NrLAorCS5zZXRzb2Nrb3B0CSAgID0gdWRwdjZfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IHVkcHY2X2dldHNvY2tvcHQsCisJLnNlbmRtc2cJICAgPSB1ZHB2Nl9zZW5kbXNnLAorCS5yZWN2bXNnCSAgID0gdWRwdjZfcmVjdm1zZywKKwkuYmFja2xvZ19yY3YJICAgPSB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiLAorCS5oYXNoCQkgICA9IHVkcF92Nl9oYXNoLAorCS51bmhhc2gJCSAgID0gdWRwX3Y2X3VuaGFzaCwKKwkuZ2V0X3BvcnQJICAgPSB1ZHBfdjZfZ2V0X3BvcnQsCisJLm9ial9zaXplCSAgID0gc2l6ZW9mKHN0cnVjdCB1ZHA2X3NvY2spLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfdWRwdjZfc2V0c29ja29wdCwKKwkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfdWRwdjZfZ2V0c29ja29wdCwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgdWRwdjZfcHJvdG9zdyA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKaW5kZXggOGNmYzU4Yi4uMDhmOWFiYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2lmZGVmIENPTkZJR19JUFY2X1hGUk02X1RVTk5FTF9ERUJVRwogIyBkZWZpbmUgWDZUREVCVUcJMwpAQCAtMzU3LDE5ICszNTgsMTkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB4ZnJtNl90dW5uZWwgKnhmcm02X3R1bm5lbF9oYW5kbGVyOwotc3RhdGljIERFQ0xBUkVfTVVURVgoeGZybTZfdHVubmVsX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKHhmcm02X3R1bm5lbF9tdXRleCk7CiAKIGludCB4ZnJtNl90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IHhmcm02X3R1bm5lbCAqaGFuZGxlcikKIHsKIAlpbnQgcmV0OwogCi0JZG93bigmeGZybTZfdHVubmVsX3NlbSk7CisJbXV0ZXhfbG9jaygmeGZybTZfdHVubmVsX211dGV4KTsKIAlyZXQgPSAwOwogCWlmICh4ZnJtNl90dW5uZWxfaGFuZGxlciAhPSBOVUxMKQogCQlyZXQgPSAtRUlOVkFMOwogCWlmICghcmV0KQogCQl4ZnJtNl90dW5uZWxfaGFuZGxlciA9IGhhbmRsZXI7Ci0JdXAoJnhmcm02X3R1bm5lbF9zZW0pOworCW11dGV4X3VubG9jaygmeGZybTZfdHVubmVsX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zODAsMTMgKzM4MSwxMyBAQAogewogCWludCByZXQ7CiAKLQlkb3duKCZ4ZnJtNl90dW5uZWxfc2VtKTsKKwltdXRleF9sb2NrKCZ4ZnJtNl90dW5uZWxfbXV0ZXgpOwogCXJldCA9IDA7CiAJaWYgKHhmcm02X3R1bm5lbF9oYW5kbGVyICE9IGhhbmRsZXIpCiAJCXJldCA9IC1FSU5WQUw7CiAJaWYgKCFyZXQpCiAJCXhmcm02X3R1bm5lbF9oYW5kbGVyID0gTlVMTDsKLQl1cCgmeGZybTZfdHVubmVsX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZ4ZnJtNl90dW5uZWxfbXV0ZXgpOwogCiAJc3luY2hyb25pemVfbmV0KCk7CiAKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IGFlODZkMjMuLjg1OTU4MjIgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMTQyMyw3ICsxNDIzLDcgQEAKIAogCWlmIChlcnIgPCAwKSB7CiAJCXgtPmttLnN0YXRlID0gWEZSTV9TVEFURV9ERUFEOwotCQl4ZnJtX3N0YXRlX3B1dCh4KTsKKwkJX194ZnJtX3N0YXRlX3B1dCh4KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNjUxLDYgKzI2NTEsOCBAQAogCQlyZXR1cm4ga2V5X25vdGlmeV9zYSh4LCBjKTsKIAljYXNlIFhGUk1fTVNHX0ZMVVNIU0E6CiAJCXJldHVybiBrZXlfbm90aWZ5X3NhX2ZsdXNoKGMpOworCWNhc2UgWEZSTV9NU0dfTkVXQUU6IC8qIG5vdCB5ZXQgc3VwcG9ydGVkICovCisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50aygicGZrZXk6IFVua25vd24gU0EgZXZlbnQgJWRcbiIsIGMtPmV2ZW50KTsKIAkJYnJlYWs7CkBAIC0zMDc4LDkgKzMwODAsOSBAQAogCWlmICghaGRyKQogCQlnb3RvIG91dDsKIAotCWRvd24oJnhmcm1fY2ZnX3NlbSk7CisJbXV0ZXhfbG9jaygmeGZybV9jZmdfbXV0ZXgpOwogCWVyciA9IHBma2V5X3Byb2Nlc3Moc2ssIHNrYiwgaGRyKTsKLQl1cCgmeGZybV9jZmdfc2VtKTsKKwltdXRleF91bmxvY2soJnhmcm1fY2ZnX211dGV4KTsKIAogb3V0OgogCWlmIChlcnIgJiYgaGRyICYmIHBma2V5X2Vycm9yKGhkciwgZXJyLCBzaykgPT0gMCkKZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDgxNzFjNTMuLjVhMDRkYjcgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtNTQsNyArNTQsNyBAQAogICoKICAqCVJldHVybiB0aGUgbmV4dCB1bnVzZWQgbGluayBudW1iZXIgZm9yIGEgZ2l2ZW4gc2FwLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB1MTYgbGxjX3VpX25leHRfbGlua19ubyhpbnQgc2FwKQorc3RhdGljIGlubGluZSB1MTYgbGxjX3VpX25leHRfbGlua19ubyhpbnQgc2FwKQogewogCXJldHVybiBsbGNfdWlfc2FwX2xpbmtfbm9fbWF4W3NhcF0rKzsKIH0KQEAgLTY1LDcgKzY1LDcgQEAKICAqCiAgKglHaXZlbiBhbiBBUlAgaGVhZGVyIHR5cGUgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGV0aGVybmV0IHByb3RvY29sLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB1MTYgbGxjX3Byb3RvX3R5cGUodTE2IGFycGhyZCkKK3N0YXRpYyBpbmxpbmUgdTE2IGxsY19wcm90b190eXBlKHUxNiBhcnBocmQpCiB7CiAJcmV0dXJuIGFycGhyZCA9PSBBUlBIUkRfSUVFRTgwMl9UUiA/CiAJCSAgICAgICAgIGh0b25zKEVUSF9QX1RSXzgwMl8yKSA6IGh0b25zKEVUSF9QXzgwMl8yKTsKQEAgLTc1LDcgKzc1LDcgQEAKICAqCWxsY191aV9hZGRyX251bGwgLSBkZXRlcm1pbmVzIGlmIGEgYWRkcmVzcyBzdHJ1Y3R1cmUgaXMgbnVsbAogICoJQGFkZHI6IEFkZHJlc3MgdG8gdGVzdCBpZiBudWxsLgogICovCi1zdGF0aWMgX19pbmxpbmVfXyB1OCBsbGNfdWlfYWRkcl9udWxsKHN0cnVjdCBzb2NrYWRkcl9sbGMgKmFkZHIpCitzdGF0aWMgaW5saW5lIHU4IGxsY191aV9hZGRyX251bGwoc3RydWN0IHNvY2thZGRyX2xsYyAqYWRkcikKIHsKIAlyZXR1cm4gIW1lbWNtcChhZGRyLCAmbGxjX3VpX2FkZHJudWxsLCBzaXplb2YoKmFkZHIpKTsKIH0KQEAgLTg5LDggKzg5LDcgQEAKICAqCW9wZXJhdGlvbiB0aGUgdXNlciB3b3VsZCBsaWtlIHRvIHBlcmZvcm0gYW5kIHRoZSB0eXBlIG9mIHNvY2tldC4KICAqCVJldHVybnMgdGhlIGNvcnJlY3QgbGxjIGhlYWRlciBsZW5ndGguCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHU4IGxsY191aV9oZWFkZXJfbGVuKHN0cnVjdCBzb2NrICpzaywKLQkJCQkgICAgICAgc3RydWN0IHNvY2thZGRyX2xsYyAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdTggbGxjX3VpX2hlYWRlcl9sZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfbGxjICphZGRyKQogewogCXU4IHJjID0gTExDX1BEVV9MRU5fVTsKIApAQCAtMTM4LDcgKzEzNyw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gbGxjX3Byb3RvID0gewotCS5uYW1lCSAgPSAiRERQIiwKKwkubmFtZQkgID0gIkxMQyIsCiAJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKIAkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IGxsY19zb2NrKSwKIH07CkBAIC0xODgsOCArMTg3LDEwIEBACiAJCWxsYy0+bGFkZHIubHNhcCwgbGxjLT5kYWRkci5sc2FwKTsKIAlpZiAoIWxsY19zZW5kX2Rpc2Moc2spKQogCQlsbGNfdWlfd2FpdF9mb3JfZGlzYyhzaywgc2stPnNrX3JjdnRpbWVvKTsKLQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19aQVBQRUQpKQorCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHsKKwkJbGxjX3NhcF9wdXQobGxjLT5zYXApOwogCQlsbGNfc2FwX3JlbW92ZV9zb2NrZXQobGxjLT5zYXAsIHNrKTsKKwl9CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlpZiAobGxjLT5kZXYpCiAJCWRldl9wdXQobGxjLT5kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfY19hYy5jIGIvbmV0L2xsYy9sbGNfY19hYy5jCmluZGV4IDgxNjlmMjQuLjg2MDE0MGMgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2NfYWMuYworKysgYi9uZXQvbGxjL2xsY19jX2FjLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxuZXQvbGxjX3BkdS5oPgogI2luY2x1ZGUgPG5ldC9sbGMuaD4KIAotI2luY2x1ZGUgImxsY19vdXRwdXQuaCIKIAogc3RhdGljIGludCBsbGNfY29ubl9hY19pbmNfdnNfYnlfMShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIHZvaWQgbGxjX3Byb2Nlc3NfdG1yX2V2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb3JlLmMgYi9uZXQvbGxjL2xsY19jb3JlLmMKaW5kZXggYWIwZmNkMy4uYmQyNDJhNCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29yZS5jCisrKyBiL25ldC9sbGMvbGxjX2NvcmUuYwpAQCAtMTI3LDcgKzEyNyw2IEBACiAJCWdvdG8gb3V0OwogCXNhcC0+bGFkZHIubHNhcCA9IGxzYXA7CiAJc2FwLT5yY3ZfZnVuYwk9IGZ1bmM7Ci0JbGxjX3NhcF9ob2xkKHNhcCk7CiAJbGxjX2FkZF9zYXAoc2FwKTsKIG91dDoKIAl3cml0ZV91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX291dHB1dC5jIGIvbmV0L2xsYy9sbGNfb3V0cHV0LmMKaW5kZXggYjRkNTViNi4uYjRlNjY4ZSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfb3V0cHV0LmMKKysrIGIvbmV0L2xsYy9sbGNfb3V0cHV0LmMKQEAgLTMwLDcgKzMwLDggQEAKICAqCUZpbGxzIE1BQyBoZWFkZXIgZmllbGRzLCBkZXBlbmRpbmcgb24gTUFDIHR5cGUuIFJldHVybnMgMCwgSWYgTUFDIHR5cGUKICAqCWlzIGEgdmFsaWQgdHlwZSBhbmQgaW5pdGlhbGl6YXRpb24gY29tcGxldGVzIGNvcnJlY3RseSAxLCBvdGhlcndpc2UuCiAgKi8KLWludCBsbGNfbWFjX2hkcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKnNhLCB1bnNpZ25lZCBjaGFyICpkYSkKK2ludCBsbGNfbWFjX2hkcl9pbml0KHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2EsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhKQogewogCWludCByYyA9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX291dHB1dC5oIGIvbmV0L2xsYy9sbGNfb3V0cHV0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3OWVkZjcuLjAwMDAwMDAKLS0tIGEvbmV0L2xsYy9sbGNfb3V0cHV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jaWZuZGVmIExMQ19PVVRQVVRfSAotI2RlZmluZSBMTENfT1VUUFVUX0gKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcgYnkgUHJvY29tIFRlY2hub2xvZ3ksIEluYy4KLSAqIAkJIDIwMDEtMjAwMyBieSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAqCi0gKiBUaGlzIHByb2dyYW0gY2FuIGJlIHJlZGlzdHJpYnV0ZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCB3aXRob3V0IGFueSB3YXJyYW50eSBvciBpbXBsaWVkIHdhcnJhbnR5Ci0gKiBvZiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuCi0gKgotICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi1zdHJ1Y3Qgc2tfYnVmZjsKLQotaW50IGxsY19tYWNfaGRyX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgY2hhciAqc2EsIHVuc2lnbmVkIGNoYXIgKmRhKTsKLQotI2VuZGlmIC8qIExMQ19PVVRQVVRfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfc19hYy5jIGIvbmV0L2xsYy9sbGNfc19hYy5jCmluZGV4IGJiMzU4MGYuLmFjM2Q5M2IgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX3NfYWMuYworKysgYi9uZXQvbGxjL2xsY19zX2FjLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxuZXQvbGxjX3NfYWMuaD4KICNpbmNsdWRlIDxuZXQvbGxjX3NfZXYuaD4KICNpbmNsdWRlIDxuZXQvbGxjX3NhcC5oPgotI2luY2x1ZGUgImxsY19vdXRwdXQuaCIKKwogCiAvKioKICAqCWxsY19zYXBfYWN0aW9uX3VuaXRfZGF0YV9pbmQgLSBmb3J3YXJkIFVJIFBEVSB0byBuZXR3b3JrIGxheWVyCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggYThlNTU0NC4uMzMyYWNiMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMTEsNyArMTEsNyBAQAogCXRyaXN0YXRlICJOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOSwogCWhlbHAKLQkgIElmIHRoaXMgb3B0aW9uIGlzZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydAorCSAgSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIGluY2x1ZGUgc3VwcG9ydAogCSAgZm9yIHF1ZXVlaW5nIHBhY2tldHMgdmlhIE5GTkVUTElOSy4KIAkgIAogY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPRwpAQCAtNjYsNyArNjYsNyBAQAogCWhlbHAKIAkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGNvZGUgd2lsbAogCSAgcHJvdmlkZSBhIG5vdGlmaWVyIGNoYWluIHRoYXQgY2FuIGJlIHVzZWQgYnkgb3RoZXIga2VybmVsIGNvZGUKLQkgIHRvIGdldCBub3RpZmllZCBhYm91dGNoYW5nZXMgaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3RhdGUuCisJICB0byBnZXQgbm90aWZpZWQgYWJvdXQgY2hhbmdlcyBpbiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZS4KIAogCSAgSWYgdW5zdXJlLCBzYXkgYE4nLgogCkBAIC0xNTMsNyArMTUzLDcgQEAKIAl0cmlzdGF0ZSAnIk5GUVVFVUUiIHRhcmdldCBTdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVMKIAloZWxwCi0JICBUaGlzIFRhcmdldCByZXBsYWNlZCB0aGUgb2xkIG9ic29sZXRlIFFVRVVFIHRhcmdldC4KKwkgIFRoaXMgdGFyZ2V0IHJlcGxhY2VkIHRoZSBvbGQgb2Jzb2xldGUgUVVFVUUgdGFyZ2V0LgogCiAJICBBcyBvcHBvc2VkIHRvIFFVRVVFLCBpdCBzdXBwb3J0cyA2NTUzNSBkaWZmZXJlbnQgcXVldWVzLAogCSAgbm90IGp1c3Qgb25lLgpAQCAtMjc5LDYgKzI3OSwxNiBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kKKwl0cmlzdGF0ZSAnSVBzZWMgInBvbGljeSIgbWF0Y2ggc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTICYmIFhGUk0KKwloZWxwCisJICBQb2xpY3kgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZQorCSAgSVBzZWMgcG9saWN5IHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRlY2Fwc3VsYXRpb24vd2lsbAorCSAgYmUgdXNlZCBkdXJpbmcgZW5jYXBzdWxhdGlvbi4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVgogCXRyaXN0YXRlICcicGh5c2RldiIgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTICYmIEJSSURHRV9ORVRGSUxURVIKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCmluZGV4IDc0NjE3MmUuLjk1NTg3MjcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtNDAsNiArNDAsNyBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCkgKz0geHRfbGltaXQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMpICs9IHh0X21hYy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUkspICs9IHh0X21hcmsubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kpICs9IHh0X3BvbGljeS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUpICs9IHh0X3BrdHR5cGUubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSkgKz0geHRfcmVhbG0ubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQKSArPSB4dF9zY3RwLm8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBkNjIyZGRmLi4wYWUyODFkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0zLDcgKzMsNyBAQAogICAgZXh0ZW5zaW9uLiAqLwogCiAvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCi0gKiAoQykgMjAwMi0yMDA1IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKiAoQykgMjAwMi0yMDA2IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CiAgKiAoQykgMjAwMywyMDA0IFVTQUdJL1dJREUgUHJvamVjdCA8aHR0cDovL3d3dy5saW51eC1pcHY2Lm9yZz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjAsNiArMjAsMTEgQEAKICAqCS0gZ2VuZXJhbGl6ZSBMMyBwcm90b2NvbCBkZW5lbmRlbnQgcGFydC4KICAqIDIzIE1hciAyMDA0OiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgogICoJLSBhZGQgc3VwcG9ydCB2YXJpb3VzIHNpemUgb2YgY29ubnRyYWNrIHN0cnVjdHVyZXMuCisgKiAyNiBKYW4gMjAwNjogSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+CisgKiAJLSByZXN0cnVjdHVyZSBuZl9jb25uIChpbnRyb2R1Y2UgbmZfY29ubl9oZWxwKQorICogCS0gcmVkZXNpZ24gJ2ZlYXR1cmVzJyBob3cgdGhleSB3ZXJlIG9yaWdpbmFsbHkgaW50ZW5kZWQKKyAqIDI2IEZlYiAyMDA2OiBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AZXVyb2Rldi5uZXQ+CisgKiAJLSBhZGQgc3VwcG9ydCBmb3IgTDMgcHJvdG9jb2wgbW9kdWxlIGxvYWQgb24gZGVtYW5kLgogICoKICAqIERlcml2ZWQgZnJvbSBuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2NvcmUuYwogICovCkBAIC01NSw3ICs2MCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2xpc3RoZWxwLmg+CiAKLSNkZWZpbmUgTkZfQ09OTlRSQUNLX1ZFUlNJT04JIjAuNC4xIgorI2RlZmluZSBORl9DT05OVFJBQ0tfVkVSU0lPTgkiMC41LjAiCiAKICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKQEAgLTgyLDggKzg3LDggQEAKIHN0YXRpYyBMSVNUX0hFQUQodW5jb25maXJtZWQpOwogc3RhdGljIGludCBuZl9jb25udHJhY2tfdm1hbGxvYzsKIAotc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfbmV4dF9pZCA9IDE7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19leHBlY3RfbmV4dF9pZCA9IDE7CitzdGF0aWMgdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19uZXh0X2lkOworc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfZXhwZWN0X25leHRfaWQ7CiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMKIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZfY29ubnRyYWNrX2NoYWluOwogc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZl9jb25udHJhY2tfZXhwZWN0X2NoYWluOwpAQCAtMTgyLDcgKzE4Nyw3IEBACiBERUZJTkVfUldMT0NLKG5mX2N0X2NhY2hlX2xvY2spOwogCiAvKiBUaGlzIGF2b2lkcyBjYWxsaW5nIGttZW1fY2FjaGVfY3JlYXRlKCkgd2l0aCBzYW1lIG5hbWUgc2ltdWx0YW5lb3VzbHkgKi8KLURFQ0xBUkVfTVVURVgobmZfY3RfY2FjaGVfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChuZl9jdF9jYWNoZV9tdXRleCk7CiAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19nZW5lcmljX3Byb3RvY29sOwogc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqCkBAIC0yMzgsNiArMjQzLDM1IEBACiAJbW9kdWxlX3B1dChwLT5tZSk7CiB9CiAKK2ludAorbmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldCh1bnNpZ25lZCBzaG9ydCBsM3Byb3RvKQoreworCWludCByZXQ7CisJc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwOworCityZXRyeToJcCA9IG5mX2N0X2wzcHJvdG9fZmluZF9nZXQobDNwcm90byk7CisJaWYgKHAgPT0gJm5mX2Nvbm50cmFja19nZW5lcmljX2wzcHJvdG8pIHsKKwkJcmV0ID0gcmVxdWVzdF9tb2R1bGUoIm5mX2Nvbm50cmFjay0lZCIsIGwzcHJvdG8pOworCQlpZiAoIXJldCkKKwkJCWdvdG8gcmV0cnk7CisKKwkJcmV0dXJuIC1FUFJPVE9UWVBFOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIG5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dCh1bnNpZ25lZCBzaG9ydCBsM3Byb3RvKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcDsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCXAgPSBfX25mX2N0X2wzcHJvdG9fZmluZChsM3Byb3RvKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJbW9kdWxlX3B1dChwLT5tZSk7Cit9CisKIHN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX2hhc2hfcm5kX2luaXR0ZWQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19oYXNoX3JuZDsKIApAQCAtMjU5LDIxICsyOTMsOCBAQAogCQkJCW5mX2Nvbm50cmFja19oYXNoX3JuZCk7CiB9CiAKLS8qIEluaXRpYWxpemUgInN0cnVjdCBuZl9jb25uIiB3aGljaCBoYXMgc3BhY2VzIGZvciBoZWxwZXIgKi8KLXN0YXRpYyBpbnQKLWluaXRfY29ubnRyYWNrX2Zvcl9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywgdV9pbnQzMl90IGZlYXR1cmVzKQotewotCi0JY29ubnRyYWNrLT5oZWxwID0gKHVuaW9uIG5mX2Nvbm50cmFja19oZWxwICopCi0JCSgoKHVuc2lnbmVkIGxvbmcpY29ubnRyYWNrLT5kYXRhCi0JCSAgKyAoX19hbGlnbm9mX18odW5pb24gbmZfY29ubnRyYWNrX2hlbHApIC0gMSkpCi0JCSAmICh+KCh1bnNpZ25lZCBsb25nKShfX2FsaWdub2ZfXyh1bmlvbiBuZl9jb25udHJhY2tfaGVscCkgLTEpKSkpOwotCXJldHVybiAwOwotfQotCiBpbnQgbmZfY29ubnRyYWNrX3JlZ2lzdGVyX2NhY2hlKHVfaW50MzJfdCBmZWF0dXJlcywgY29uc3QgY2hhciAqbmFtZSwKLQkJCQlzaXplX3Qgc2l6ZSwKLQkJCQlpbnQgKCppbml0KShzdHJ1Y3QgbmZfY29ubiAqLCB1X2ludDMyX3QpKQorCQkJCXNpemVfdCBzaXplKQogewogCWludCByZXQgPSAwOwogCWNoYXIgKmNhY2hlX25hbWU7CkBAIC0yODgsNyArMzA5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZG93bigmbmZfY3RfY2FjaGVfbXV0ZXgpOworCW11dGV4X2xvY2soJm5mX2N0X2NhY2hlX211dGV4KTsKIAogCXdyaXRlX2xvY2tfYmgoJm5mX2N0X2NhY2hlX2xvY2spOwogCS8qIGUuZzogbXVsdGlwbGUgaGVscGVycyBhcmUgbG9hZGVkICovCkBAIC0yOTYsOCArMzE3LDcgQEAKIAkJREVCVUdQKCJuZl9jb25udHJhY2tfcmVnaXN0ZXJfY2FjaGU6IGFscmVhZHkgcmVzaXN0ZXJkLlxuIik7CiAJCWlmICgoIXN0cm5jbXAobmZfY3RfY2FjaGVbZmVhdHVyZXNdLm5hbWUsIG5hbWUsCiAJCQkgICAgICBORl9DVF9GRUFUVVJFU19OQU1FTEVOKSkKLQkJICAgICYmIG5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5zaXplID09IHNpemUKLQkJICAgICYmIG5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5pbml0X2Nvbm50cmFjayA9PSBpbml0KSB7CisJCSAgICAmJiBuZl9jdF9jYWNoZVtmZWF0dXJlc10uc2l6ZSA9PSBzaXplKSB7CiAJCQlERUJVR1AoIm5mX2Nvbm50cmFja19yZWdpc3Rlcl9jYWNoZTogcmV1c2luZy5cbiIpOwogCQkJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLnVzZSsrOwogCQkJcmV0ID0gMDsKQEAgLTMwNSw3ICszMjUsNyBAQAogCQkJcmV0ID0gLUVCVVNZOwogCiAJCXdyaXRlX3VubG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7Ci0JCXVwKCZuZl9jdF9jYWNoZV9tdXRleCk7CisJCW11dGV4X3VubG9jaygmbmZfY3RfY2FjaGVfbXV0ZXgpOwogCQlyZXR1cm4gcmV0OwogCX0KIAl3cml0ZV91bmxvY2tfYmgoJm5mX2N0X2NhY2hlX2xvY2spOwpAQCAtMzQwLDcgKzM2MCw2IEBACiAJd3JpdGVfbG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7CiAJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLnVzZSA9IDE7CiAJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLnNpemUgPSBzaXplOwotCW5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5pbml0X2Nvbm50cmFjayA9IGluaXQ7CiAJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLmNhY2hlcCA9IGNhY2hlcDsKIAluZl9jdF9jYWNoZVtmZWF0dXJlc10ubmFtZSA9IGNhY2hlX25hbWU7CiAJd3JpdGVfdW5sb2NrX2JoKCZuZl9jdF9jYWNoZV9sb2NrKTsKQEAgLTM1MCw3ICszNjksNyBAQAogb3V0X2ZyZWVfbmFtZToKIAlrZnJlZShjYWNoZV9uYW1lKTsKIG91dF91cF9tdXRleDoKLQl1cCgmbmZfY3RfY2FjaGVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbmZfY3RfY2FjaGVfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM2NSwxOSArMzg0LDE4IEBACiAJICogc2xhYiBjYWNoZS4KIAkgKi8KIAlERUJVR1AoIm5mX2Nvbm50cmFja191bnJlZ2lzdGVyX2NhY2hlOiAweCUwNHhcbiIsIGZlYXR1cmVzKTsKLQlkb3duKCZuZl9jdF9jYWNoZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmbmZfY3RfY2FjaGVfbXV0ZXgpOwogCiAJd3JpdGVfbG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7CiAJaWYgKC0tbmZfY3RfY2FjaGVbZmVhdHVyZXNdLnVzZSA+IDApIHsKIAkJd3JpdGVfdW5sb2NrX2JoKCZuZl9jdF9jYWNoZV9sb2NrKTsKLQkJdXAoJm5mX2N0X2NhY2hlX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZuZl9jdF9jYWNoZV9tdXRleCk7CiAJCXJldHVybjsKIAl9CiAJY2FjaGVwID0gbmZfY3RfY2FjaGVbZmVhdHVyZXNdLmNhY2hlcDsKIAluYW1lID0gbmZfY3RfY2FjaGVbZmVhdHVyZXNdLm5hbWU7CiAJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLmNhY2hlcCA9IE5VTEw7CiAJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLm5hbWUgPSBOVUxMOwotCW5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5pbml0X2Nvbm50cmFjayA9IE5VTEw7CiAJbmZfY3RfY2FjaGVbZmVhdHVyZXNdLnNpemUgPSAwOwogCXdyaXRlX3VubG9ja19iaCgmbmZfY3RfY2FjaGVfbG9jayk7CiAKQEAgLTM4Niw3ICs0MDQsNyBAQAogCWttZW1fY2FjaGVfZGVzdHJveShjYWNoZXApOwogCWtmcmVlKG5hbWUpOwogCi0JdXAoJm5mX2N0X2NhY2hlX211dGV4KTsKKwltdXRleF91bmxvY2soJm5mX2N0X2NhY2hlX211dGV4KTsKIH0KIAogaW50CkBAIC00MzIsMTEgKzQ1MCwxNSBAQAogLyogbmZfY29ubnRyYWNrX2V4cGVjdCBoZWxwZXIgZnVuY3Rpb25zICovCiB2b2lkIG5mX2N0X3VubGlua19leHBlY3Qoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCA9IG5mY3RfaGVscChleHAtPm1hc3Rlcik7CisKKwlORl9DVF9BU1NFUlQobWFzdGVyX2hlbHApOwogCUFTU0VSVF9XUklURV9MT0NLKCZuZl9jb25udHJhY2tfbG9jayk7CiAJTkZfQ1RfQVNTRVJUKCF0aW1lcl9wZW5kaW5nKCZleHAtPnRpbWVvdXQpKTsKKwogCWxpc3RfZGVsKCZleHAtPmxpc3QpOwogCU5GX0NUX1NUQVRfSU5DKGV4cGVjdF9kZWxldGUpOwotCWV4cC0+bWFzdGVyLT5leHBlY3RpbmctLTsKKwltYXN0ZXJfaGVscC0+ZXhwZWN0aW5nLS07CiAJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKIH0KIApAQCAtNTA4LDkgKzUzMCwxMCBAQAogdm9pZCBuZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKHN0cnVjdCBuZl9jb25uICpjdCkKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaSwgKnRtcDsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKIAogCS8qIE9wdGltaXphdGlvbjogbW9zdCBjb25uZWN0aW9uIG5ldmVyIGV4cGVjdCBhbnkgb3RoZXJzLiAqLwotCWlmIChjdC0+ZXhwZWN0aW5nID09IDApCisJaWYgKCFoZWxwIHx8IGhlbHAtPmV4cGVjdGluZyA9PSAwKQogCQlyZXR1cm47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaSwgdG1wLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7CkBAIC03MTMsNiArNzM2LDcgQEAKIAkJCSAgY29ubnRyYWNrX3R1cGxlX2NtcCwKIAkJCSAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICosCiAJCQkgICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUsIE5VTEwpKSB7CisJCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7CiAJCS8qIFJlbW92ZSBmcm9tIHVuY29uZmlybWVkIGxpc3QgKi8KIAkJbGlzdF9kZWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5saXN0KTsKIApAQCAtNzI2LDcgKzc1MCw4IEBACiAJCXNldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsICZjdC0+c3RhdHVzKTsKIAkJTkZfQ1RfU1RBVF9JTkMoaW5zZXJ0KTsKIAkJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JCWlmIChjdC0+aGVscGVyKQorCQloZWxwID0gbmZjdF9oZWxwKGN0KTsKKwkJaWYgKGhlbHAgJiYgaGVscC0+aGVscGVyKQogCQkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfSEVMUEVSLCAqcHNrYik7CiAjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKIAkJaWYgKHRlc3RfYml0KElQU19TUkNfTkFUX0RPTkVfQklULCAmY3QtPnN0YXR1cykgfHwKQEAgLTg0Miw4ICs4NjcsOSBAQAogewogCXN0cnVjdCBuZl9jb25uICpjb25udHJhY2sgPSBOVUxMOwogCXVfaW50MzJfdCBmZWF0dXJlcyA9IDA7CisJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKIAotCWlmICghbmZfY29ubnRyYWNrX2hhc2hfcm5kX2luaXR0ZWQpIHsKKwlpZiAodW5saWtlbHkoIW5mX2Nvbm50cmFja19oYXNoX3JuZF9pbml0dGVkKSkgewogCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jb25udHJhY2tfaGFzaF9ybmQsIDQpOwogCQluZl9jb25udHJhY2tfaGFzaF9ybmRfaW5pdHRlZCA9IDE7CiAJfQpAQCAtODYzLDggKzg4OSwxMSBAQAogCiAJLyogIGZpbmQgZmVhdHVyZXMgbmVlZGVkIGJ5IHRoaXMgY29ubnRyYWNrLiAqLwogCWZlYXR1cmVzID0gbDNwcm90by0+Z2V0X2ZlYXR1cmVzKG9yaWcpOworCisJLyogRklYTUU6IHByb3RlY3QgaGVscGVyIGxpc3QgcGVyIFJDVSAqLwogCXJlYWRfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCWlmIChfX25mX2N0X2hlbHBlcl9maW5kKHJlcGwpICE9IE5VTEwpCisJaGVscGVyID0gX19uZl9jdF9oZWxwZXJfZmluZChyZXBsKTsKKwlpZiAoaGVscGVyKQogCQlmZWF0dXJlcyB8PSBORl9DVF9GX0hFTFA7CiAJcmVhZF91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIApAQCAtODcyLDcgKzkwMSw3IEBACiAKIAlyZWFkX2xvY2tfYmgoJm5mX2N0X2NhY2hlX2xvY2spOwogCi0JaWYgKCFuZl9jdF9jYWNoZVtmZWF0dXJlc10udXNlKSB7CisJaWYgKHVubGlrZWx5KCFuZl9jdF9jYWNoZVtmZWF0dXJlc10udXNlKSkgewogCQlERUJVR1AoIm5mX2Nvbm50cmFja19hbGxvYzogbm90IHN1cHBvcnRlZCBmZWF0dXJlcyA9IDB4JXhcbiIsCiAJCQlmZWF0dXJlcyk7CiAJCWdvdG8gb3V0OwpAQCAtODg2LDEyICs5MTUsMTAgQEAKIAogCW1lbXNldChjb25udHJhY2ssIDAsIG5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5zaXplKTsKIAljb25udHJhY2stPmZlYXR1cmVzID0gZmVhdHVyZXM7Ci0JaWYgKG5mX2N0X2NhY2hlW2ZlYXR1cmVzXS5pbml0X2Nvbm50cmFjayAmJgotCSAgICBuZl9jdF9jYWNoZVtmZWF0dXJlc10uaW5pdF9jb25udHJhY2soY29ubnRyYWNrLCBmZWF0dXJlcykgPCAwKSB7Ci0JCURFQlVHUCgibmZfY29ubnRyYWNrX2FsbG9jOiBmYWlsZWQgdG8gaW5pdFxuIik7Ci0JCWttZW1fY2FjaGVfZnJlZShuZl9jdF9jYWNoZVtmZWF0dXJlc10uY2FjaGVwLCBjb25udHJhY2spOwotCQljb25udHJhY2sgPSBOVUxMOwotCQlnb3RvIG91dDsKKwlpZiAoaGVscGVyKSB7CisJCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY29ubnRyYWNrKTsKKwkJTkZfQ1RfQVNTRVJUKGhlbHApOworCQloZWxwLT5oZWxwZXIgPSBoZWxwZXI7CiAJfQogCiAJYXRvbWljX3NldCgmY29ubnRyYWNrLT5jdF9nZW5lcmFsLnVzZSwgMSk7CkBAIC05NzIsMTEgKzk5OSw4IEBACiAjZW5kaWYKIAkJbmZfY29ubnRyYWNrX2dldCgmY29ubnRyYWNrLT5tYXN0ZXItPmN0X2dlbmVyYWwpOwogCQlORl9DVF9TVEFUX0lOQyhleHBlY3RfbmV3KTsKLQl9IGVsc2UgewotCQljb25udHJhY2stPmhlbHBlciA9IF9fbmZfY3RfaGVscGVyX2ZpbmQoJnJlcGxfdHVwbGUpOwotCisJfSBlbHNlCiAJCU5GX0NUX1NUQVRfSU5DKG5ldyk7Ci0gICAgICAgIH0KIAogCS8qIE92ZXJsb2FkIHR1cGxlIGxpbmtlZCBsaXN0IHRvIHB1dCB1cyBpbiB1bmNvbmZpcm1lZCBsaXN0LiAqLwogCWxpc3RfYWRkKCZjb25udHJhY2stPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmxpc3QsICZ1bmNvbmZpcm1lZCk7CkBAIC0xMjA2LDE0ICsxMjMwLDE2IEBACiAKIHN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19leHBlY3RfaW5zZXJ0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCiB7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHAgPSBuZmN0X2hlbHAoZXhwLT5tYXN0ZXIpOworCiAJYXRvbWljX2luYygmZXhwLT51c2UpOwotCWV4cC0+bWFzdGVyLT5leHBlY3RpbmcrKzsKKwltYXN0ZXJfaGVscC0+ZXhwZWN0aW5nKys7CiAJbGlzdF9hZGQoJmV4cC0+bGlzdCwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCk7CiAKIAlpbml0X3RpbWVyKCZleHAtPnRpbWVvdXQpOwogCWV4cC0+dGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZXhwOwogCWV4cC0+dGltZW91dC5mdW5jdGlvbiA9IGV4cGVjdGF0aW9uX3RpbWVkX291dDsKLQlleHAtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBleHAtPm1hc3Rlci0+aGVscGVyLT50aW1lb3V0ICogSFo7CisJZXhwLT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgbWFzdGVyX2hlbHAtPmhlbHBlci0+dGltZW91dCAqIEhaOwogCWFkZF90aW1lcigmZXhwLT50aW1lb3V0KTsKIAogCWV4cC0+aWQgPSArK25mX2Nvbm50cmFja19leHBlY3RfbmV4dF9pZDsKQEAgLTEyMzksMTAgKzEyNjUsMTIgQEAKIAogc3RhdGljIGlubGluZSBpbnQgcmVmcmVzaF90aW1lcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaSkKIHsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCA9IG5mY3RfaGVscChpLT5tYXN0ZXIpOworCiAJaWYgKCFkZWxfdGltZXIoJmktPnRpbWVvdXQpKQogCQlyZXR1cm4gMDsKIAotCWktPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBpLT5tYXN0ZXItPmhlbHBlci0+dGltZW91dCpIWjsKKwlpLT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgbWFzdGVyX2hlbHAtPmhlbHBlci0+dGltZW91dCpIWjsKIAlhZGRfdGltZXIoJmktPnRpbWVvdXQpOwogCXJldHVybiAxOwogfQpAQCAtMTI1MSw4ICsxMjc5LDExIEBACiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmk7CiAJc3RydWN0IG5mX2Nvbm4gKm1hc3RlciA9IGV4cGVjdC0+bWFzdGVyOworCXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKG1hc3Rlcik7CiAJaW50IHJldDsKIAorCU5GX0NUX0FTU0VSVChtYXN0ZXJfaGVscCk7CisKIAlERUJVR1AoIm5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZCAlcFxuIiwgcmVsYXRlZF90byk7CiAJREVCVUdQKCJ0dXBsZTogIik7IE5GX0NUX0RVTVBfVFVQTEUoJmV4cGVjdC0+dHVwbGUpOwogCURFQlVHUCgibWFzazogICIpOyBORl9DVF9EVU1QX1RVUExFKCZleHBlY3QtPm1hc2spOwpAQCAtMTI3MSw4ICsxMzAyLDggQEAKIAkJfQogCX0KIAkvKiBXaWxsIGJlIG92ZXIgbGltaXQ/ICovCi0JaWYgKG1hc3Rlci0+aGVscGVyLT5tYXhfZXhwZWN0ZWQgJiYgCi0JICAgIG1hc3Rlci0+ZXhwZWN0aW5nID49IG1hc3Rlci0+aGVscGVyLT5tYXhfZXhwZWN0ZWQpCisJaWYgKG1hc3Rlcl9oZWxwLT5oZWxwZXItPm1heF9leHBlY3RlZCAmJgorCSAgICBtYXN0ZXJfaGVscC0+ZXhwZWN0aW5nID49IG1hc3Rlcl9oZWxwLT5oZWxwZXItPm1heF9leHBlY3RlZCkKIAkJZXZpY3Rfb2xkZXN0X2V4cGVjdChtYXN0ZXIpOwogCiAJbmZfY29ubnRyYWNrX2V4cGVjdF9pbnNlcnQoZXhwZWN0KTsKQEAgLTEyODMsMjQgKzEzMTQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIEFsdGVyIHJlcGx5IHR1cGxlIChtYXliZSBhbHRlciBoZWxwZXIpLiAgVGhpcyBpcyBmb3IgTkFULCBhbmQgaXMKLSAgIGltcGxpY2l0bHkgcmFjeTogc2VlIF9fbmZfY29ubnRyYWNrX2NvbmZpcm0gKi8KLXZvaWQgbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5KHN0cnVjdCBuZl9jb25uICpjb25udHJhY2ssCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpuZXdyZXBseSkKLXsKLQl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JLyogU2hvdWxkIGJlIHVuY29uZmlybWVkLCBzbyBub3QgaW4gaGFzaCB0YWJsZSB5ZXQgKi8KLQlORl9DVF9BU1NFUlQoIW5mX2N0X2lzX2NvbmZpcm1lZChjb25udHJhY2spKTsKLQotCURFQlVHUCgiQWx0ZXJpbmcgcmVwbHkgdHVwbGUgb2YgJXAgdG8gIiwgY29ubnRyYWNrKTsKLQlORl9DVF9EVU1QX1RVUExFKG5ld3JlcGx5KTsKLQotCWNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUgPSAqbmV3cmVwbHk7Ci0JaWYgKCFjb25udHJhY2stPm1hc3RlciAmJiBjb25udHJhY2stPmV4cGVjdGluZyA9PSAwKQotCQljb25udHJhY2stPmhlbHBlciA9IF9fbmZfY3RfaGVscGVyX2ZpbmQobmV3cmVwbHkpOwotCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotfQotCiBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiB7CiAJaW50IHJldDsKQEAgLTEzMDgsOSArMTMyMSw4IEBACiAKIAlyZXQgPSBuZl9jb25udHJhY2tfcmVnaXN0ZXJfY2FjaGUoTkZfQ1RfRl9IRUxQLCAibmZfY29ubnRyYWNrOmhlbHAiLAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgbmZfY29ubikKLQkJCQkJICArIHNpemVvZih1bmlvbiBuZl9jb25udHJhY2tfaGVscCkKLQkJCQkJICArIF9fYWxpZ25vZl9fKHVuaW9uIG5mX2Nvbm50cmFja19oZWxwKSwKLQkJCQkJICBpbml0X2Nvbm50cmFja19mb3JfaGVscGVyKTsKKwkJCQkJICArIHNpemVvZihzdHJ1Y3QgbmZfY29ubl9oZWxwKQorCQkJCQkgICsgX19hbGlnbm9mX18oc3RydWN0IG5mX2Nvbm5faGVscCkpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibmZfY29ubnRyYWNrX2hlbHBlcl9yZWlnc3RlcjogVW5hYmxlIHRvIGNyZWF0ZSBzbGFiIGNhY2hlIGZvciBjb25udHJhY2tzXG4iKTsKIAkJcmV0dXJuIHJldDsKQEAgLTEzMzgsOSArMTM1MCwxMiBAQAogc3RhdGljIGlubGluZSBpbnQgdW5oZWxwKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaSwKIAkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiB7Ci0JaWYgKG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaSktPmhlbHBlciA9PSBtZSkgewotCQluZl9jb25udHJhY2tfZXZlbnQoSVBDVF9IRUxQRVIsIG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaSkpOwotCQluZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGkpLT5oZWxwZXIgPSBOVUxMOworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaSk7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscCA9IG5mY3RfaGVscChjdCk7CisKKwlpZiAoaGVscCAmJiBoZWxwLT5oZWxwZXIgPT0gbWUpIHsKKwkJbmZfY29ubnRyYWNrX2V2ZW50KElQQ1RfSEVMUEVSLCBjdCk7CisJCWhlbHAtPmhlbHBlciA9IE5VTEw7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTM1Niw3ICsxMzcxLDggQEAKIAogCS8qIEdldCByaWQgb2YgZXhwZWN0YXRpb25zICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgdG1wLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7Ci0JCWlmIChleHAtPm1hc3Rlci0+aGVscGVyID09IG1lICYmIGRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkgeworCQlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGV4cC0+bWFzdGVyKTsKKwkJaWYgKGhlbHAtPmhlbHBlciA9PSBtZSAmJiBkZWxfdGltZXIoJmV4cC0+dGltZW91dCkpIHsKIAkJCW5mX2N0X3VubGlua19leHBlY3QoZXhwKTsKIAkJCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CiAJCX0KQEAgLTE0MjMsNiArMTQzOSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAKIC8qIEdlbmVyaWMgZnVuY3Rpb24gZm9yIHRjcC91ZHAvc2N0cC9kY2NwIGFuZCBhbGlrZS4gVGhpcyBuZWVkcyB0byBiZQogICogaW4gaXBfY29ubnRyYWNrX2NvcmUsIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhlIHByb3RvY29scyB0byBhdXRvbG9hZApAQCAtMTY5Nyw3ICsxNzE1LDcgQEAKIAl9CiAKIAlyZXQgPSBuZl9jb25udHJhY2tfcmVnaXN0ZXJfY2FjaGUoTkZfQ1RfRl9CQVNJQywgIm5mX2Nvbm50cmFjazpiYXNpYyIsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBuZl9jb25uKSwgTlVMTCk7CisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBuZl9jb25uKSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIG5mX2Nvbm4gc2xhYiBjYWNoZVxuIik7CiAJCWdvdG8gZXJyX2ZyZWVfaGFzaDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKaW5kZXggNmYyMTBmMy4uY2QxOTFiMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCXUzMiBzZXE7CiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAl1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sIG1hdGNob2ZmOwotCXN0cnVjdCBpcF9jdF9mdHBfbWFzdGVyICpjdF9mdHBfaW5mbyA9ICZjdC0+aGVscC0+Y3RfZnRwX2luZm87CisJc3RydWN0IGlwX2N0X2Z0cF9tYXN0ZXIgKmN0X2Z0cF9pbmZvID0gJm5mY3RfaGVscChjdCktPmhlbHAuY3RfZnRwX2luZm87CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX21hbiBjbWQgPSB7fTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDlmZjM0NjMwLi4wZTBlOWQ3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0yLDkgKzIsOSBAQAogICogcHJvdG9jb2wgaGVscGVycyBhbmQgZ2VuZXJhbCB0cm91YmxlIG1ha2luZyBmcm9tIHVzZXJzcGFjZS4KICAqCiAgKiAoQykgMjAwMSBieSBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgotICogKEMpIDIwMDItMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICogKEMpIDIwMDItMjAwNiBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgogICogKEMpIDIwMDMgYnkgUGF0cmljayBNY2hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Ci0gKiAoQykgMjAwNSBieSBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AZXVyb2Rldi5uZXQ+CisgKiAoQykgMjAwNS0yMDA2IGJ5IFBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BldXJvZGV2Lm5ldD4KICAqCiAgKiBJJ3ZlIHJld29ya2VkIHRoaXMgc3R1ZmYgdG8gdXNlIGF0dHJpYnV0ZXMgaW5zdGVhZCBvZiBjb25udHJhY2sgCiAgKiBzdHJ1Y3R1cmVzLiA1LjQ0IGFtLiBJIG5lZWQgbW9yZSB0ZWEuIC0tcGFibG8gMDUvMDcvMTEuCkBAIC00NCw3ICs0NCw3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGNoYXIgX19pbml0ZGF0YSB2ZXJzaW9uW10gPSAiMC45MiI7CitzdGF0aWMgY2hhciBfX2luaXRkYXRhIHZlcnNpb25bXSA9ICIwLjkzIjsKIAogI2lmIDAKICNkZWZpbmUgREVCVUdQIHByaW50awpAQCAtNTUsMjAgKzU1LDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfZHVtcF90dXBsZXNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgCi0JCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCisJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCiB7Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CiAJaW50IHJldCA9IDA7CisJc3RydWN0IG5mYXR0ciAqbmVzdF9wYXJtcyA9IE5GQV9ORVNUKHNrYiwgQ1RBX1RVUExFX1BST1RPKTsKIAogCU5GQV9QVVQoc2tiLCBDVEFfUFJPVE9fTlVNLCBzaXplb2YodV9pbnQ4X3QpLCAmdHVwbGUtPmRzdC5wcm90b251bSk7CiAKLQkvKiBJZiBubyBwcm90b2NvbCBoZWxwZXIgaXMgZm91bmQsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlCi0JICogZ2VuZXJpYyBwcm90b2NvbCBoZWxwZXIsIHNvIHByb3RvIHdvbid0ICpldmVyKiBiZSBOVUxMICovCi0JcHJvdG8gPSBuZl9jdF9wcm90b19maW5kX2dldCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKIAlpZiAobGlrZWx5KHByb3RvLT50dXBsZV90b19uZmF0dHIpKQogCQlyZXQgPSBwcm90by0+dHVwbGVfdG9fbmZhdHRyKHNrYiwgdHVwbGUpOwogCQotCW5mX2N0X3Byb3RvX3B1dChwcm90byk7CisJTkZBX05FU1RfRU5EKHNrYiwgbmVzdF9wYXJtcyk7CiAKIAlyZXR1cm4gcmV0OwogCkBAIC03NywyNyArNzUsMTYgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWN0bmV0bGlua19kdW1wX3R1cGxlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKLQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitjdG5ldGxpbmtfZHVtcF90dXBsZXNfaXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8pCiB7Ci0Jc3RydWN0IG5mYXR0ciAqbmVzdF9wYXJtczsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87CiAJaW50IHJldCA9IDA7Ci0JCi0JbDNwcm90byA9IG5mX2N0X2wzcHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSk7Ci0JCi0JbmVzdF9wYXJtcyA9IE5GQV9ORVNUKHNrYiwgQ1RBX1RVUExFX0lQKTsKKwlzdHJ1Y3QgbmZhdHRyICpuZXN0X3Bhcm1zID0gTkZBX05FU1Qoc2tiLCBDVEFfVFVQTEVfSVApOworCiAJaWYgKGxpa2VseShsM3Byb3RvLT50dXBsZV90b19uZmF0dHIpKQogCQlyZXQgPSBsM3Byb3RvLT50dXBsZV90b19uZmF0dHIoc2tiLCB0dXBsZSk7Ci0JTkZBX05FU1RfRU5EKHNrYiwgbmVzdF9wYXJtcyk7CiAKLQluZl9jdF9sM3Byb3RvX3B1dChsM3Byb3RvKTsKLQotCWlmICh1bmxpa2VseShyZXQgPCAwKSkKLQkJcmV0dXJuIHJldDsKLQotCW5lc3RfcGFybXMgPSBORkFfTkVTVChza2IsIENUQV9UVVBMRV9QUk9UTyk7Ci0JcmV0ID0gY3RuZXRsaW5rX2R1bXBfdHVwbGVzX3Byb3RvKHNrYiwgdHVwbGUpOwogCU5GQV9ORVNUX0VORChza2IsIG5lc3RfcGFybXMpOwogCiAJcmV0dXJuIHJldDsKQEAgLTEwNyw2ICs5NCwyOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAorY3RuZXRsaW5rX2R1bXBfdHVwbGVzKHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCWludCByZXQ7CisJc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvOworCXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvOworCisJbDNwcm90byA9IG5mX2N0X2wzcHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSk7CisJcmV0ID0gY3RuZXRsaW5rX2R1bXBfdHVwbGVzX2lwKHNrYiwgdHVwbGUsIGwzcHJvdG8pOworCW5mX2N0X2wzcHJvdG9fcHV0KGwzcHJvdG8pOworCisJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQlyZXR1cm4gcmV0OworCisJcHJvdG8gPSBuZl9jdF9wcm90b19maW5kX2dldCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKKwlyZXQgPSBjdG5ldGxpbmtfZHVtcF90dXBsZXNfcHJvdG8oc2tiLCB0dXBsZSwgcHJvdG8pOworCW5mX2N0X3Byb3RvX3B1dChwcm90byk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2R1bXBfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKIAl1X2ludDMyX3Qgc3RhdHVzID0gaHRvbmwoKHVfaW50MzJfdCkgY3QtPnN0YXR1cyk7CkBAIC0xNjUsMTUgKzE3NCwxNiBAQAogY3RuZXRsaW5rX2R1bXBfaGVscGluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogewogCXN0cnVjdCBuZmF0dHIgKm5lc3RfaGVscGVyOworCWNvbnN0IHN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOwogCi0JaWYgKCFjdC0+aGVscGVyKQorCWlmICghaGVscCB8fCAhaGVscC0+aGVscGVyKQogCQlyZXR1cm4gMDsKIAkJCiAJbmVzdF9oZWxwZXIgPSBORkFfTkVTVChza2IsIENUQV9IRUxQKTsKLQlORkFfUFVUKHNrYiwgQ1RBX0hFTFBfTkFNRSwgc3RybGVuKGN0LT5oZWxwZXItPm5hbWUpLCBjdC0+aGVscGVyLT5uYW1lKTsKKwlORkFfUFVUKHNrYiwgQ1RBX0hFTFBfTkFNRSwgc3RybGVuKGhlbHAtPmhlbHBlci0+bmFtZSksIGhlbHAtPmhlbHBlci0+bmFtZSk7CiAKLQlpZiAoY3QtPmhlbHBlci0+dG9fbmZhdHRyKQotCQljdC0+aGVscGVyLT50b19uZmF0dHIoc2tiLCBjdCk7CisJaWYgKGhlbHAtPmhlbHBlci0+dG9fbmZhdHRyKQorCQloZWxwLT5oZWxwZXItPnRvX25mYXR0cihza2IsIGN0KTsKIAogCU5GQV9ORVNUX0VORChza2IsIG5lc3RfaGVscGVyKTsKIApAQCAtMzM3LDkgKzM0NywxMCBAQAogCQlncm91cCA9IE5GTkxHUlBfQ09OTlRSQUNLX1VQREFURTsKIAl9IGVsc2UKIAkJcmV0dXJuIE5PVElGWV9ET05FOwotCQotICAvKiBGSVhNRTogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBsaXN0ZW5lcnMgYmVmb3JlLCBkb24ndCBodXJ0IHBlcmZvcm1hbmNlICovCi0JCisKKwlpZiAoIW5mbmV0bGlua19oYXNfbGlzdGVuZXJzKGdyb3VwKSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCiAJc2tiID0gYWxsb2Nfc2tiKE5MTVNHX0dPT0RTSVpFLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtOTAzLDExICs5MTQsMTcgQEAKIGN0bmV0bGlua19jaGFuZ2VfaGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mYXR0ciAqY2RhW10pCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKIAljaGFyICpoZWxwbmFtZTsKIAlpbnQgZXJyOwogCiAJREVCVUdQKCJlbnRlcmVkICVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCisJaWYgKCFoZWxwKSB7CisJCS8qIEZJWE1FOiB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYW5kIHJlaGFzaCAqLworCQlyZXR1cm4gLUVCVVNZOworCX0KKwogCS8qIGRvbid0IGNoYW5nZSBoZWxwZXIgb2Ygc2libGluZyBjb25uZWN0aW9ucyAqLwogCWlmIChjdC0+bWFzdGVyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTkyNCwxOCArOTQxLDE4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY3QtPmhlbHBlcikgeworCWlmIChoZWxwLT5oZWxwZXIpIHsKIAkJaWYgKCFoZWxwZXIpIHsKIAkJCS8qIHdlIGhhZCBhIGhlbHBlciBiZWZvcmUgLi4uICovCiAJCQluZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKGN0KTsKLQkJCWN0LT5oZWxwZXIgPSBOVUxMOworCQkJaGVscC0+aGVscGVyID0gTlVMTDsKIAkJfSBlbHNlIHsKIAkJCS8qIG5lZWQgdG8gemVybyBkYXRhIG9mIG9sZCBoZWxwZXIgKi8KLQkJCW1lbXNldCgmY3QtPmhlbHAsIDAsIHNpemVvZihjdC0+aGVscCkpOworCQkJbWVtc2V0KCZoZWxwLT5oZWxwLCAwLCBzaXplb2YoaGVscC0+aGVscCkpOwogCQl9CiAJfQogCQotCWN0LT5oZWxwZXIgPSBoZWxwZXI7CisJaGVscC0+aGVscGVyID0gaGVscGVyOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDUwLDE0ICsxMDY3LDkgQEAKIAkJY3QtPm1hcmsgPSBudG9obCgqKHVfaW50MzJfdCAqKU5GQV9EQVRBKGNkYVtDVEFfTUFSSy0xXSkpOwogI2VuZGlmCiAKLQljdC0+aGVscGVyID0gbmZfY3RfaGVscGVyX2ZpbmRfZ2V0KHJ0dXBsZSk7Ci0KIAlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKIAluZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QpOwogCi0JaWYgKGN0LT5oZWxwZXIpCi0JCW5mX2N0X2hlbHBlcl9wdXQoY3QtPmhlbHBlcik7Ci0KIAlERUJVR1AoImNvbm50cmFjayB3aXRoIGlkICV1IGluc2VydGVkXG4iLCBjdC0+aWQpOwogCXJldHVybiAwOwogCkBAIC0xMTUwLDYgKzExNjIsMzcgQEAKIH0JCQkKIAogc3RhdGljIGlubGluZSBpbnQKK2N0bmV0bGlua19leHBfZHVtcF9tYXNrKHN0cnVjdCBza19idWZmICpza2IsCisJCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm1hc2spCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87CisJc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CisJc3RydWN0IG5mYXR0ciAqbmVzdF9wYXJtcyA9IE5GQV9ORVNUKHNrYiwgQ1RBX0VYUEVDVF9NQVNLKTsKKworCWwzcHJvdG8gPSBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0pOworCXJldCA9IGN0bmV0bGlua19kdW1wX3R1cGxlc19pcChza2IsIG1hc2ssIGwzcHJvdG8pOworCW5mX2N0X2wzcHJvdG9fcHV0KGwzcHJvdG8pOworCisJaWYgKHVubGlrZWx5KHJldCA8IDApKQorCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCisJcHJvdG8gPSBuZl9jdF9wcm90b19maW5kX2dldCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKKwlyZXQgPSBjdG5ldGxpbmtfZHVtcF90dXBsZXNfcHJvdG8oc2tiLCBtYXNrLCBwcm90byk7CisJbmZfY3RfcHJvdG9fcHV0KHByb3RvKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpCisJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisKKwlORkFfTkVTVF9FTkQoc2tiLCBuZXN0X3Bhcm1zKTsKKworCXJldHVybiAwOworCituZmF0dHJfZmFpbHVyZToKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfZXhwX2R1bXBfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCiB7CkBAIC0xMTU5LDcgKzEyMDIsNyBAQAogCiAJaWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsICZleHAtPnR1cGxlLCBDVEFfRVhQRUNUX1RVUExFKSA8IDApCiAJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7Ci0JaWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsICZleHAtPm1hc2ssIENUQV9FWFBFQ1RfTUFTSykgPCAwKQorCWlmIChjdG5ldGxpbmtfZXhwX2R1bXBfbWFzayhza2IsICZleHAtPnR1cGxlLCAmZXhwLT5tYXNrKSA8IDApCiAJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CiAJaWYgKGN0bmV0bGlua19leHBfZHVtcF90dXBsZShza2IsCiAJCQkJICZtYXN0ZXItPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLApAQCAtMTQxNyw3ICsxNDYwLDggQEAKIAkJfQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXhwLCB0bXAsICZuZl9jb25udHJhY2tfZXhwZWN0X2xpc3QsCiAJCQkJCSBsaXN0KSB7Ci0JCQlpZiAoZXhwLT5tYXN0ZXItPmhlbHBlciA9PSBoIAorCQkJc3RydWN0IG5mX2Nvbm5faGVscCAqbV9oZWxwID0gbmZjdF9oZWxwKGV4cC0+bWFzdGVyKTsKKwkJCWlmIChtX2hlbHAtPmhlbHBlciA9PSBoCiAJCQkgICAgJiYgZGVsX3RpbWVyKCZleHAtPnRpbWVvdXQpKSB7CiAJCQkJbmZfY3RfdW5saW5rX2V4cGVjdChleHApOwogCQkJCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CkBAIC0xNDUyLDYgKzE0OTYsNyBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaCA9IE5VTEw7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKIAlpbnQgZXJyID0gMDsKIAogCURFQlVHUCgiZW50ZXJlZCAlc1xuIiwgX19GVU5DVElPTl9fKTsKQEAgLTE0NzIsOCArMTUxNyw5IEBACiAJaWYgKCFoKQogCQlyZXR1cm4gLUVOT0VOVDsKIAljdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CisJaGVscCA9IG5mY3RfaGVscChjdCk7CiAKLQlpZiAoIWN0LT5oZWxwZXIpIHsKKwlpZiAoIWhlbHAgfHwgIWhlbHAtPmhlbHBlcikgewogCQkvKiBzdWNoIGNvbm50cmFjayBoYXNuJ3QgZ290IGFueSBoZWxwZXIsIGFib3J0ICovCiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDYxNzU5OWEuLjc1NTc3ZTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTgzNCwxMiArODM0LDEzIEBACiBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19lY2FjaGUpOwogRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKTsKICNlbmRpZgorRVhQT1JUX1NZTUJPTChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KTsKK0VYUE9SVF9TWU1CT0wobmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KTsKIEVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2wzcHJvdG9fcmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIpOwogRVhQT1JUX1NZTUJPTChuZl9jdF9pbnZlcnRfdHVwbGVwcik7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19hbHRlcl9yZXBseSk7CiBFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19kZXN0cm95ZWQpOwogRVhQT1JUX1NZTUJPTChuZWVkX2Nvbm50cmFjayk7CiBFWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCmluZGV4IGQzYTRmMzAuLmQ5ZjBkN2UgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogCiAjaW5jbHVkZSAibmZfaW50ZXJuYWxzLmgiCkBAIC0xNiw3ICsxNyw3IEBACiAgKiBmb3IgcXVldWVpbmcgYW5kIG11c3QgcmVpbmplY3QgYWxsIHBhY2tldHMgaXQgcmVjZWl2ZXMsIG5vIG1hdHRlciB3aGF0LgogICovCiBzdGF0aWMgc3RydWN0IG5mX3F1ZXVlX2hhbmRsZXIgKnF1ZXVlX2hhbmRsZXJbTlBST1RPXTsKLXN0YXRpYyBzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgKnF1ZXVlX3Jlcm91dGVyOworc3RhdGljIHN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcXVldWVfcmVyb3V0ZXJbTlBST1RPXTsKIAogc3RhdGljIERFRklORV9SV0xPQ0socXVldWVfaGFuZGxlcl9sb2NrKTsKIApAQCAtNjQsNyArNjUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXdyaXRlX2xvY2tfYmgoJnF1ZXVlX2hhbmRsZXJfbG9jayk7Ci0JbWVtY3B5KCZxdWV1ZV9yZXJvdXRlcltwZl0sIHJlciwgc2l6ZW9mKHF1ZXVlX3Jlcm91dGVyW3BmXSkpOworCXJjdV9hc3NpZ25fcG9pbnRlcihxdWV1ZV9yZXJvdXRlcltwZl0sIHJlcik7CiAJd3JpdGVfdW5sb2NrX2JoKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC03Nyw4ICs3OCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJd3JpdGVfbG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQltZW1zZXQoJnF1ZXVlX3Jlcm91dGVyW3BmXSwgMCwgc2l6ZW9mKHF1ZXVlX3Jlcm91dGVyW3BmXSkpOworCXJjdV9hc3NpZ25fcG9pbnRlcihxdWV1ZV9yZXJvdXRlcltwZl0sIE5VTEwpOwogCXdyaXRlX3VubG9ja19iaCgmcXVldWVfaGFuZGxlcl9sb2NrKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX3VucmVnaXN0ZXJfcXVldWVfcmVyb3V0ZXIpOwpAQCAtMTE0LDE2ICsxMTYsMTcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c2luZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c291dGRldiA9IE5VTEw7CiAjZW5kaWYKKwlzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIgKnJlcm91dGVyOwogCiAJLyogUVVFVUUgPT0gRFJPUCBpZiBub29uZSBpcyB3YWl0aW5nLCB0byBiZSBzYWZlLiAqLwogCXJlYWRfbG9jaygmcXVldWVfaGFuZGxlcl9sb2NrKTsKLQlpZiAoIXF1ZXVlX2hhbmRsZXJbcGZdIHx8ICFxdWV1ZV9oYW5kbGVyW3BmXS0+b3V0Zm4pIHsKKwlpZiAoIXF1ZXVlX2hhbmRsZXJbcGZdKSB7CiAJCXJlYWRfdW5sb2NrKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwogCQlrZnJlZV9za2IoKnNrYik7CiAJCXJldHVybiAxOwogCX0KIAotCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbykrcXVldWVfcmVyb3V0ZXJbcGZdLnJlcl9zaXplLCBHRlBfQVRPTUlDKTsKKwlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pK3F1ZXVlX3Jlcm91dGVyW3BmXS0+cmVyX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghaW5mbykgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fRVJSICJPT00gcXVldWVpbmcgcGFja2V0ICVwXG4iLApAQCAtMTU1LDE1ICsxNTgsMTMgQEAKIAkJaWYgKHBoeXNvdXRkZXYpIGRldl9ob2xkKHBoeXNvdXRkZXYpOwogCX0KICNlbmRpZgotCWlmIChxdWV1ZV9yZXJvdXRlcltwZl0uc2F2ZSkKLQkJcXVldWVfcmVyb3V0ZXJbcGZdLnNhdmUoKnNrYiwgaW5mbyk7CisJcmVyb3V0ZXIgPSByY3VfZGVyZWZlcmVuY2UocXVldWVfcmVyb3V0ZXJbcGZdKTsKKwlpZiAocmVyb3V0ZXIpCisJCXJlcm91dGVyLT5zYXZlKCpza2IsIGluZm8pOwogCiAJc3RhdHVzID0gcXVldWVfaGFuZGxlcltwZl0tPm91dGZuKCpza2IsIGluZm8sIHF1ZXVlbnVtLAogCQkJCQkgIHF1ZXVlX2hhbmRsZXJbcGZdLT5kYXRhKTsKIAotCWlmIChzdGF0dXMgPj0gMCAmJiBxdWV1ZV9yZXJvdXRlcltwZl0ucmVyb3V0ZSkKLQkJc3RhdHVzID0gcXVldWVfcmVyb3V0ZXJbcGZdLnJlcm91dGUoc2tiLCBpbmZvKTsKLQogCXJlYWRfdW5sb2NrKCZxdWV1ZV9oYW5kbGVyX2xvY2spOwogCiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTE4OSw2ICsxOTAsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW0gPSAmaW5mby0+ZWxlbS0+bGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppOworCXN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlciAqcmVyb3V0ZXI7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKQEAgLTIxMiw3ICsyMTQsNyBAQAogICAJCQlicmVhazsKICAgCX0KICAgCi0JaWYgKGVsZW0gPT0gJm5mX2hvb2tzW2luZm8tPnBmXVtpbmZvLT5ob29rXSkgeworCWlmIChpID09ICZuZl9ob29rc1tpbmZvLT5wZl1baW5mby0+aG9va10pIHsKIAkJLyogVGhlIG1vZHVsZSB3aGljaCBzZW50IGl0IHRvIHVzZXJzcGFjZSBpcyBnb25lLiAqLwogCQlORkRFQlVHKCIlczogbW9kdWxlIGRpc2FwcGVhcmVkLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogCQkJX19GVU5DVElPTl9fKTsKQEAgLTIyNiw2ICsyMjgsMTIgQEAKIAl9CiAKIAlpZiAodmVyZGljdCA9PSBORl9BQ0NFUFQpIHsKKwkJcmVyb3V0ZXIgPSByY3VfZGVyZWZlcmVuY2UocXVldWVfcmVyb3V0ZXJbaW5mby0+cGZdKTsKKwkJaWYgKHJlcm91dGVyICYmIHJlcm91dGVyLT5yZXJvdXRlKCZza2IsIGluZm8pIDwgMCkKKwkJCXZlcmRpY3QgPSBORl9EUk9QOworCX0KKworCWlmICh2ZXJkaWN0ID09IE5GX0FDQ0VQVCkgewogCW5leHRfaG9vazoKIAkJdmVyZGljdCA9IG5mX2l0ZXJhdGUoJm5mX2hvb2tzW2luZm8tPnBmXVtpbmZvLT5ob29rXSwKIAkJCQkgICAgICZza2IsIGluZm8tPmhvb2ssIApAQCAtMzIyLDIyICszMzAsMTIgQEAKIHsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOwotI2VuZGlmCi0JcXVldWVfcmVyb3V0ZXIgPSBrbWFsbG9jKE5QUk9UTyAqIHNpemVvZihzdHJ1Y3QgbmZfcXVldWVfcmVyb3V0ZXIpLAotCQkJCSBHRlBfS0VSTkVMKTsKLQlpZiAoIXF1ZXVlX3Jlcm91dGVyKQotCQlyZXR1cm4gLUVOT01FTTsKIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcGRlID0gY3JlYXRlX3Byb2NfZW50cnkoIm5mX3F1ZXVlIiwgU19JUlVHTywgcHJvY19uZXRfbmV0ZmlsdGVyKTsKLQlpZiAoIXBkZSkgewotCQlrZnJlZShxdWV1ZV9yZXJvdXRlcik7CisJaWYgKCFwZGUpCiAJCXJldHVybiAtMTsKLQl9CiAJcGRlLT5wcm9jX2ZvcHMgPSAmbmZxdWV1ZV9maWxlX29wczsKICNlbmRpZgotCW1lbXNldChxdWV1ZV9yZXJvdXRlciwgMCwgTlBST1RPICogc2l6ZW9mKHN0cnVjdCBuZl9xdWV1ZV9yZXJvdXRlcikpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfc29ja29wdC5jIGIvbmV0L25ldGZpbHRlci9uZl9zb2Nrb3B0LmMKaW5kZXggNjFhODMzYS4uMGE2M2Q3ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9zb2Nrb3B0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9zb2Nrb3B0LmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSAibmZfaW50ZXJuYWxzLmgiCkBAIC0xMSw3ICsxMiw3IEBACiAvKiBTb2Nrb3B0cyBvbmx5IHJlZ2lzdGVyZWQgYW5kIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCwgc28KICAgIG5ldCBsb2NraW5nIHdvdWxkIGJlIG92ZXJraWxsLiAgQWxzbywgW2dzXWV0c29ja29wdCBjYWxscyBtYXkKICAgIHNsZWVwLiAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgobmZfc29ja29wdF9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKG5mX3NvY2tvcHRfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChuZl9zb2Nrb3B0cyk7CiAKIC8qIERvIGV4Y2x1c2l2ZSByYW5nZXMgb3ZlcmxhcD8gKi8KQEAgLTI2LDcgKzI3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCWludCByZXQgPSAwOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmbmZfc29ja29wdF9tdXRleCkgIT0gMCkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZuZl9zb2Nrb3B0X211dGV4KSAhPSAwKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJbGlzdF9mb3JfZWFjaChpLCAmbmZfc29ja29wdHMpIHsKQEAgLTQ4LDcgKzQ5LDcgQEAKIAogCWxpc3RfYWRkKCZyZWctPmxpc3QsICZuZl9zb2Nrb3B0cyk7CiBvdXQ6Ci0JdXAoJm5mX3NvY2tvcHRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbmZfc29ja29wdF9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wobmZfcmVnaXN0ZXJfc29ja29wdCk7CkBAIC01NywxOCArNTgsMTggQEAKIHsKIAkvKiBObyBwb2ludCBiZWluZyBpbnRlcnJ1cHRpYmxlOiB3ZSdyZSBwcm9iYWJseSBpbiBjbGVhbnVwX21vZHVsZSgpICovCiAgcmVzdGFydDoKLQlkb3duKCZuZl9zb2Nrb3B0X211dGV4KTsKKwltdXRleF9sb2NrKCZuZl9zb2Nrb3B0X211dGV4KTsKIAlpZiAocmVnLT51c2UgIT0gMCkgewogCQkvKiBUbyBiZSB3b2tlbiBieSBuZl9zb2Nrb3B0IGNhbGwuLi4gKi8KIAkJLyogRklYTUU6IFN0dWFydCBZb3VuZydzIG5hbWUgYXBwZWFycyBncmF0dWl0b3VzbHkuICovCiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJcmVnLT5jbGVhbnVwX3Rhc2sgPSBjdXJyZW50OwotCQl1cCgmbmZfc29ja29wdF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmbmZfc29ja29wdF9tdXRleCk7CiAJCXNjaGVkdWxlKCk7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAJbGlzdF9kZWwoJnJlZy0+bGlzdCk7Ci0JdXAoJm5mX3NvY2tvcHRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbmZfc29ja29wdF9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKG5mX3VucmVnaXN0ZXJfc29ja29wdCk7CiAKQEAgLTgwLDcgKzgxLDcgQEAKIAlzdHJ1Y3QgbmZfc29ja29wdF9vcHMgKm9wczsKIAlpbnQgcmV0OwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmbmZfc29ja29wdF9tdXRleCkgIT0gMCkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZuZl9zb2Nrb3B0X211dGV4KSAhPSAwKQogCQlyZXR1cm4gLUVJTlRSOwogCiAJbGlzdF9mb3JfZWFjaChpLCAmbmZfc29ja29wdHMpIHsKQEAgLTkwLDcgKzkxLDcgQEAKIAkJCQlpZiAodmFsID49IG9wcy0+Z2V0X29wdG1pbgogCQkJCSAgICAmJiB2YWwgPCBvcHMtPmdldF9vcHRtYXgpIHsKIAkJCQkJb3BzLT51c2UrKzsKLQkJCQkJdXAoJm5mX3NvY2tvcHRfbXV0ZXgpOworCQkJCQltdXRleF91bmxvY2soJm5mX3NvY2tvcHRfbXV0ZXgpOwogCQkJCQlyZXQgPSBvcHMtPmdldChzaywgdmFsLCBvcHQsIGxlbik7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KQEAgLTk4LDIyICs5OSwyMiBAQAogCQkJCWlmICh2YWwgPj0gb3BzLT5zZXRfb3B0bWluCiAJCQkJICAgICYmIHZhbCA8IG9wcy0+c2V0X29wdG1heCkgewogCQkJCQlvcHMtPnVzZSsrOwotCQkJCQl1cCgmbmZfc29ja29wdF9tdXRleCk7CisJCQkJCW11dGV4X3VubG9jaygmbmZfc29ja29wdF9tdXRleCk7CiAJCQkJCXJldCA9IG9wcy0+c2V0KHNrLCB2YWwsIG9wdCwgKmxlbik7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAkJCX0KIAkJfQogCX0KLQl1cCgmbmZfc29ja29wdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZuZl9zb2Nrb3B0X211dGV4KTsKIAlyZXR1cm4gLUVOT1BST1RPT1BUOwogCQogIG91dDoKLQlkb3duKCZuZl9zb2Nrb3B0X211dGV4KTsKKwltdXRleF9sb2NrKCZuZl9zb2Nrb3B0X211dGV4KTsKIAlvcHMtPnVzZS0tOwogCWlmIChvcHMtPmNsZWFudXBfdGFzaykKIAkJd2FrZV91cF9wcm9jZXNzKG9wcy0+Y2xlYW51cF90YXNrKTsKLQl1cCgmbmZfc29ja29wdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZuZl9zb2Nrb3B0X211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzAsMyArMTMxLDcyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG5mX2dldHNvY2tvcHQpOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGludCBjb21wYXRfbmZfc29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBwZiwgaW50IHZhbCwKKwkJCSAgICAgY2hhciBfX3VzZXIgKm9wdCwgaW50ICpsZW4sIGludCBnZXQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaTsKKwlzdHJ1Y3QgbmZfc29ja29wdF9vcHMgKm9wczsKKwlpbnQgcmV0OworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbmZfc29ja29wdF9tdXRleCkgIT0gMCkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWxpc3RfZm9yX2VhY2goaSwgJm5mX3NvY2tvcHRzKSB7CisJCW9wcyA9IChzdHJ1Y3QgbmZfc29ja29wdF9vcHMgKilpOworCQlpZiAob3BzLT5wZiA9PSBwZikgeworCQkJaWYgKGdldCkgeworCQkJCWlmICh2YWwgPj0gb3BzLT5nZXRfb3B0bWluCisJCQkJICAgICYmIHZhbCA8IG9wcy0+Z2V0X29wdG1heCkgeworCQkJCQlvcHMtPnVzZSsrOworCQkJCQltdXRleF91bmxvY2soJm5mX3NvY2tvcHRfbXV0ZXgpOworCQkJCQlpZiAob3BzLT5jb21wYXRfZ2V0KQorCQkJCQkJcmV0ID0gb3BzLT5jb21wYXRfZ2V0KHNrLAorCQkJCQkJCXZhbCwgb3B0LCBsZW4pOworCQkJCQllbHNlCisJCQkJCQlyZXQgPSBvcHMtPmdldChzaywKKwkJCQkJCQl2YWwsIG9wdCwgbGVuKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAodmFsID49IG9wcy0+c2V0X29wdG1pbgorCQkJCSAgICAmJiB2YWwgPCBvcHMtPnNldF9vcHRtYXgpIHsKKwkJCQkJb3BzLT51c2UrKzsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZuZl9zb2Nrb3B0X211dGV4KTsKKwkJCQkJaWYgKG9wcy0+Y29tcGF0X3NldCkKKwkJCQkJCXJldCA9IG9wcy0+Y29tcGF0X3NldChzaywKKwkJCQkJCQl2YWwsIG9wdCwgKmxlbik7CisJCQkJCWVsc2UKKwkJCQkJCXJldCA9IG9wcy0+c2V0KHNrLAorCQkJCQkJCXZhbCwgb3B0LCAqbGVuKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmbmZfc29ja29wdF9tdXRleCk7CisJcmV0dXJuIC1FTk9QUk9UT09QVDsKKworIG91dDoKKwltdXRleF9sb2NrKCZuZl9zb2Nrb3B0X211dGV4KTsKKwlvcHMtPnVzZS0tOworCWlmIChvcHMtPmNsZWFudXBfdGFzaykKKwkJd2FrZV91cF9wcm9jZXNzKG9wcy0+Y2xlYW51cF90YXNrKTsKKwltdXRleF91bmxvY2soJm5mX3NvY2tvcHRfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjb21wYXRfbmZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBwZiwKKwkJaW50IHZhbCwgY2hhciBfX3VzZXIgKm9wdCwgaW50IGxlbikKK3sKKwlyZXR1cm4gY29tcGF0X25mX3NvY2tvcHQoc2ssIHBmLCB2YWwsIG9wdCwgJmxlbiwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGNvbXBhdF9uZl9zZXRzb2Nrb3B0KTsKKworaW50IGNvbXBhdF9uZl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IHBmLAorCQlpbnQgdmFsLCBjaGFyIF9fdXNlciAqb3B0LCBpbnQgKmxlbikKK3sKKwlyZXR1cm4gY29tcGF0X25mX3NvY2tvcHQoc2ssIHBmLCB2YWwsIG9wdCwgbGVuLCAxKTsKK30KK0VYUE9SVF9TWU1CT0woY29tcGF0X25mX2dldHNvY2tvcHQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwppbmRleCBmNjA2M2U4Li5iODhlODJhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKQEAgLTE5MSw2ICsxOTEsMTIgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKK2ludCBuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyh1bnNpZ25lZCBpbnQgZ3JvdXApCit7CisJcmV0dXJuIG5ldGxpbmtfaGFzX2xpc3RlbmVycyhuZm5sLCBncm91cCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyk7CisKIGludCBuZm5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1bnNpZ25lZCBncm91cCwgaW50IGVjaG8pCiB7CiAJZ2ZwX3QgYWxsb2NhdGlvbiA9IGluX2ludGVycnVwdCgpID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUw7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IDNiM2M3ODEuLjU0Y2JiYWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC0xMSw2ICsxMSwxMCBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKKyAqIDIwMDYtMDEtMjYgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+CisgKiAJLSBBZGQgb3B0aW9uYWwgbG9jYWwgYW5kIGdsb2JhbCBzZXF1ZW5jZSBudW1iZXIgdG8gZGV0ZWN0IGxvc3QKKyAqIAkgIGV2ZW50cyBmcm9tIHVzZXJzcGFjZQorICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtNjgsMTEgKzcyLDE0IEBACiAJdW5zaWduZWQgaW50IG5sYnVmc2l6OwkJLyogbmV0bGluayBidWZmZXIgYWxsb2NhdGlvbiBzaXplICovCiAJdW5zaWduZWQgaW50IHF0aHJlc2hvbGQ7CS8qIHRocmVzaG9sZCBvZiB0aGUgcXVldWUgKi8KIAl1X2ludDMyX3QgY29weV9yYW5nZTsKKwl1X2ludDMyX3Qgc2VxOwkJCS8qIGluc3RhbmNlLWxvY2FsIHNlcXVlbnRpYWwgY291bnRlciAqLwogCXVfaW50MTZfdCBncm91cF9udW07CQkvKiBudW1iZXIgb2YgdGhpcyBxdWV1ZSAqLworCXVfaW50MTZfdCBmbGFnczsKIAl1X2ludDhfdCBjb3B5X21vZGU7CQogfTsKIAogc3RhdGljIERFRklORV9SV0xPQ0soaW5zdGFuY2VzX2xvY2spOworc3RhdGljIGF0b21pY190IGdsb2JhbF9zZXE7CiAKICNkZWZpbmUgSU5TVEFOQ0VfQlVDS0VUUwkxNgogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGluc3RhbmNlX3RhYmxlW0lOU1RBTkNFX0JVQ0tFVFNdOwpAQCAtMzEwLDYgKzMxNywxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CituZnVsbmxfc2V0X2ZsYWdzKHN0cnVjdCBuZnVsbmxfaW5zdGFuY2UgKmluc3QsIHVfaW50MTZfdCBmbGFncykKK3sKKwlzcGluX2xvY2tfYmgoJmluc3QtPmxvY2spOworCWluc3QtPmZsYWdzID0gbnRvaHMoZmxhZ3MpOworCXNwaW5fdW5sb2NrX2JoKCZpbnN0LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5mdWxubF9hbGxvY19za2IodW5zaWduZWQgaW50IGluc3Rfc2l6ZSwgCiAJCQkJCXVuc2lnbmVkIGludCBwa3Rfc2l6ZSkKIHsKQEAgLTM3Nyw2ICszOTQsOCBAQAogCXNwaW5fdW5sb2NrX2JoKCZpbnN0LT5sb2NrKTsKIH0KIAorLyogVGhpcyBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IGEgbG9uZworICogbGlzdCBvZiBhcmd1bWVudHMgKi8KIHN0YXRpYyBpbmxpbmUgaW50IAogX19idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmZ1bG5sX2luc3RhbmNlICppbnN0LAogCQkJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCkBAIC01MTUsNiArNTM0LDE3IEBACiAJCQlyZWFkX3VubG9ja19iaCgmc2tiLT5zay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJfQogCisJLyogbG9jYWwgc2VxdWVuY2UgbnVtYmVyICovCisJaWYgKGluc3QtPmZsYWdzICYgTkZVTE5MX0NGR19GX1NFUSkgeworCQl0bXBfdWludCA9IGh0b25sKGluc3QtPnNlcSsrKTsKKwkJTkZBX1BVVChpbnN0LT5za2IsIE5GVUxBX1NFUSwgc2l6ZW9mKHRtcF91aW50KSwgJnRtcF91aW50KTsKKwl9CisJLyogZ2xvYmFsIHNlcXVlbmNlIG51bWJlciAqLworCWlmIChpbnN0LT5mbGFncyAmIE5GVUxOTF9DRkdfRl9TRVFfR0xPQkFMKSB7CisJCXRtcF91aW50ID0gYXRvbWljX2luY19yZXR1cm4oJmdsb2JhbF9zZXEpOworCQlORkFfUFVUKGluc3QtPnNrYiwgTkZVTEFfU0VRX0dMT0JBTCwgc2l6ZW9mKHRtcF91aW50KSwgJnRtcF91aW50KTsKKwl9CisKIAlpZiAoZGF0YV9sZW4pIHsKIAkJc3RydWN0IG5mYXR0ciAqbmZhOwogCQlpbnQgc2l6ZSA9IE5GQV9MRU5HVEgoZGF0YV9sZW4pOwpAQCAtNjA3LDYgKzYzNywxMSBAQAogCiAJc3Bpbl9sb2NrX2JoKCZpbnN0LT5sb2NrKTsKIAorCWlmIChpbnN0LT5mbGFncyAmIE5GVUxOTF9DRkdfRl9TRVEpCisJCXNpemUgKz0gTkZBX1NQQUNFKHNpemVvZih1X2ludDMyX3QpKTsKKwlpZiAoaW5zdC0+ZmxhZ3MgJiBORlVMTkxfQ0ZHX0ZfU0VRX0dMT0JBTCkKKwkJc2l6ZSArPSBORkFfU1BBQ0Uoc2l6ZW9mKHVfaW50MzJfdCkpOworCiAJcXRocmVzaG9sZCA9IGluc3QtPnF0aHJlc2hvbGQ7CiAJLyogcGVyLXJ1bGUgcXRocmVzaG9sZCBvdmVycmlkZXMgcGVyLWluc3RhbmNlICovCiAJaWYgKHF0aHJlc2hvbGQgPiBsaS0+dS51bG9nLnF0aHJlc2hvbGQpCkBAIC03MzYsMTAgKzc3MSwxNCBAQAogCVtORlVMQV9USU1FU1RBTVAtMV0JPSBzaXplb2Yoc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCksCiAJW05GVUxBX0lGSU5ERVhfSU5ERVYtMV0JPSBzaXplb2YodV9pbnQzMl90KSwKIAlbTkZVTEFfSUZJTkRFWF9PVVRERVYtMV09IHNpemVvZih1X2ludDMyX3QpLAorCVtORlVMQV9JRklOREVYX1BIWVNJTkRFVi0xXQk9IHNpemVvZih1X2ludDMyX3QpLAorCVtORlVMQV9JRklOREVYX1BIWVNPVVRERVYtMV0JPSBzaXplb2YodV9pbnQzMl90KSwKIAlbTkZVTEFfSFdBRERSLTFdCT0gc2l6ZW9mKHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9odyksCiAJW05GVUxBX1BBWUxPQUQtMV0JPSAwLAogCVtORlVMQV9QUkVGSVgtMV0JPSAwLAogCVtORlVMQV9VSUQtMV0JCT0gc2l6ZW9mKHVfaW50MzJfdCksCisJW05GVUxBX1NFUS0xXQkJPSBzaXplb2YodV9pbnQzMl90KSwKKwlbTkZVTEFfU0VRX0dMT0JBTC0xXQk9IHNpemVvZih1X2ludDMyX3QpLAogfTsKIAogc3RhdGljIGNvbnN0IGludCBuZnVsYV9jZmdfbWluW05GVUxBX0NGR19NQVhdID0gewpAQCAtNzQ4LDYgKzc4Nyw3IEBACiAJW05GVUxBX0NGR19USU1FT1VULTFdCT0gc2l6ZW9mKHVfaW50MzJfdCksCiAJW05GVUxBX0NGR19RVEhSRVNILTFdCT0gc2l6ZW9mKHVfaW50MzJfdCksCiAJW05GVUxBX0NGR19OTEJVRlNJWi0xXQk9IHNpemVvZih1X2ludDMyX3QpLAorCVtORlVMQV9DRkdfRkxBR1MtMV0JPSBzaXplb2YodV9pbnQxNl90KSwKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTg1OSw2ICs4OTksMTIgQEAKIAkJbmZ1bG5sX3NldF9xdGhyZXNoKGluc3QsIG50b2hsKHF0aHJlc2gpKTsKIAl9CiAKKwlpZiAobmZ1bGFbTkZVTEFfQ0ZHX0ZMQUdTLTFdKSB7CisJCXVfaW50MTZfdCBmbGFncyA9CisJCQkqKHVfaW50MTZfdCAqKU5GQV9EQVRBKG5mdWxhW05GVUxBX0NGR19GTEFHUy0xXSk7CisJCW5mdWxubF9zZXRfZmxhZ3MoaW5zdCwgbnRvaGwoZmxhZ3MpKTsKKwl9CisKIG91dF9wdXQ6CiAJaW5zdGFuY2VfcHV0KGluc3QpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwppbmRleCBjYWMzOGIyZS4uYjU3MDE2NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCkBAIC0zNTQsMTYgKzM1NCwxNyBAQAogCVFERUJVRygiZW50ZXJlZFxuIik7CiAKIAkvKiBhbGwgbWFjcm9zIGV4cGFuZCB0byBjb25zdGFudCB2YWx1ZXMgYXQgY29tcGlsZSB0aW1lICovCi0Jc2l6ZSA9ICAgIE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF9oZHIpKQotCQkrIE5MTVNHX1NQQUNFKHNpemVvZih1X2ludDMyX3QpKQkvKiBpZmluZGV4ICovCi0JCSsgTkxNU0dfU1BBQ0Uoc2l6ZW9mKHVfaW50MzJfdCkpCS8qIGlmaW5kZXggKi8KKwlzaXplID0gICAgTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBuZmdlbm1zZykpICsKKwkJKyBORkFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X2hkcikpCisJCSsgTkZBX1NQQUNFKHNpemVvZih1X2ludDMyX3QpKQkvKiBpZmluZGV4ICovCisJCSsgTkZBX1NQQUNFKHNpemVvZih1X2ludDMyX3QpKQkvKiBpZmluZGV4ICovCiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKLQkJKyBOTE1TR19TUEFDRShzaXplb2YodV9pbnQzMl90KSkJLyogaWZpbmRleCAqLwotCQkrIE5MTVNHX1NQQUNFKHNpemVvZih1X2ludDMyX3QpKQkvKiBpZmluZGV4ICovCisJCSsgTkZBX1NQQUNFKHNpemVvZih1X2ludDMyX3QpKQkvKiBpZmluZGV4ICovCisJCSsgTkZBX1NQQUNFKHNpemVvZih1X2ludDMyX3QpKQkvKiBpZmluZGV4ICovCiAjZW5kaWYKLQkJKyBOTE1TR19TUEFDRShzaXplb2YodV9pbnQzMl90KSkJLyogbWFyayAqLwotCQkrIE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgbmZxbmxfbXNnX3BhY2tldF9odykpCi0JCSsgTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X3RpbWVzdGFtcCkpOworCQkrIE5GQV9TUEFDRShzaXplb2YodV9pbnQzMl90KSkJLyogbWFyayAqLworCQkrIE5GQV9TUEFDRShzaXplb2Yoc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaHcpKQorCQkrIE5GQV9TUEFDRShzaXplb2Yoc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfdGltZXN0YW1wKSk7CiAKIAlvdXRkZXYgPSBlbnRpbmYtPm91dGRldjsKIApAQCAtMzg4LDcgKzM4OSw3IEBACiAJCWVsc2UKIAkJCWRhdGFfbGVuID0gcXVldWUtPmNvcHlfcmFuZ2U7CiAJCQotCQlzaXplICs9IE5MTVNHX1NQQUNFKGRhdGFfbGVuKTsKKwkJc2l6ZSArPSBORkFfU1BBQ0UoZGF0YV9sZW4pOwogCQlicmVhazsKIAkKIAlkZWZhdWx0OgpAQCAtOTI4LDggKzkyOSwxMiBAQAogCiAJaWYgKG5mcWFbTkZRQV9DRkdfUEFSQU1TLTFdKSB7CiAJCXN0cnVjdCBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyAqcGFyYW1zOwotCQlwYXJhbXMgPSBORkFfREFUQShuZnFhW05GUUFfQ0ZHX1BBUkFNUy0xXSk7CiAKKwkJaWYgKCFxdWV1ZSkgeworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0X3B1dDsKKwkJfQorCQlwYXJhbXMgPSBORkFfREFUQShuZnFhW05GUUFfQ0ZHX1BBUkFNUy0xXSk7CiAJCW5mcW5sX3NldF9tb2RlKHF1ZXVlLCBwYXJhbXMtPmNvcHlfbW9kZSwKIAkJCQludG9obChwYXJhbXMtPmNvcHlfcmFuZ2UpKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggZDc4MTdhZi4uYTY1N2FiNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtMjEsMTAgKzIxLDEyIEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAuaD4KIAorCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiW2lwLGlwNixhcnBdX3RhYmxlcyBiYWNrZW5kIG1vZHVsZSIpOwpAQCAtMzIsNyArMzQsNyBAQAogI2RlZmluZSBTTVBfQUxJR04oeCkgKCgoeCkgKyBTTVBfQ0FDSEVfQllURVMtMSkgJiB+KFNNUF9DQUNIRV9CWVRFUy0xKSkKIAogc3RydWN0IHh0X2FmIHsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG11dGV4OworCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1hdGNoOwogCXN0cnVjdCBsaXN0X2hlYWQgdGFyZ2V0OwogCXN0cnVjdCBsaXN0X2hlYWQgdGFibGVzOwpAQCAtNTIsNTIgKzU0LDYyIEBACiAJTUFUQ0gsCiB9OwogCitzdGF0aWMgY29uc3QgY2hhciAqeHRfcHJlZml4W05QUk9UT10gPSB7CisJW0FGX0lORVRdIAk9ICJpcCIsCisJW0FGX0lORVQ2XSAJPSAiaXA2IiwKKwlbTkZfQVJQXQk9ICJhcnAiLAorfTsKKwogLyogUmVnaXN0cmF0aW9uIGhvb2tzIGZvciB0YXJnZXRzLiAqLwogaW50Ci14dF9yZWdpc3Rlcl90YXJnZXQoaW50IGFmLCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQpCit4dF9yZWdpc3Rlcl90YXJnZXQoc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0KQogewotCWludCByZXQ7CisJaW50IHJldCwgYWYgPSB0YXJnZXQtPmZhbWlseTsKIAotCXJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmeHRbYWZdLm11dGV4KTsKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnh0W2FmXS5tdXRleCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCWxpc3RfYWRkKCZ0YXJnZXQtPmxpc3QsICZ4dFthZl0udGFyZ2V0KTsKLQl1cCgmeHRbYWZdLm11dGV4KTsKKwltdXRleF91bmxvY2soJnh0W2FmXS5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woeHRfcmVnaXN0ZXJfdGFyZ2V0KTsKIAogdm9pZAoteHRfdW5yZWdpc3Rlcl90YXJnZXQoaW50IGFmLCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQpCit4dF91bnJlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQpCiB7Ci0JZG93bigmeHRbYWZdLm11dGV4KTsKKwlpbnQgYWYgPSB0YXJnZXQtPmZhbWlseTsKKworCW11dGV4X2xvY2soJnh0W2FmXS5tdXRleCk7CiAJTElTVF9ERUxFVEUoJnh0W2FmXS50YXJnZXQsIHRhcmdldCk7Ci0JdXAoJnh0W2FmXS5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ4dFthZl0ubXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTCh4dF91bnJlZ2lzdGVyX3RhcmdldCk7CiAKIGludAoteHRfcmVnaXN0ZXJfbWF0Y2goaW50IGFmLCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoKQoreHRfcmVnaXN0ZXJfbWF0Y2goc3RydWN0IHh0X21hdGNoICptYXRjaCkKIHsKLQlpbnQgcmV0OworCWludCByZXQsIGFmID0gbWF0Y2gtPmZhbWlseTsKIAotCXJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmeHRbYWZdLm11dGV4KTsKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnh0W2FmXS5tdXRleCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJbGlzdF9hZGQoJm1hdGNoLT5saXN0LCAmeHRbYWZdLm1hdGNoKTsKLQl1cCgmeHRbYWZdLm11dGV4KTsKKwltdXRleF91bmxvY2soJnh0W2FmXS5tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTCh4dF9yZWdpc3Rlcl9tYXRjaCk7CiAKIHZvaWQKLXh0X3VucmVnaXN0ZXJfbWF0Y2goaW50IGFmLCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoKQoreHRfdW5yZWdpc3Rlcl9tYXRjaChzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoKQogewotCWRvd24oJnh0W2FmXS5tdXRleCk7CisJaW50IGFmID0gIG1hdGNoLT5mYW1pbHk7CisKKwltdXRleF9sb2NrKCZ4dFthZl0ubXV0ZXgpOwogCUxJU1RfREVMRVRFKCZ4dFthZl0ubWF0Y2gsIG1hdGNoKTsKLQl1cCgmeHRbYWZdLm11dGV4KTsKKwltdXRleF91bmxvY2soJnh0W2FmXS5tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHh0X3VucmVnaXN0ZXJfbWF0Y2gpOwogCkBAIC0xMTQsMjEgKzEyNiwyMSBAQAogCXN0cnVjdCB4dF9tYXRjaCAqbTsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnh0W2FmXS5tdXRleCkgIT0gMCkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ4dFthZl0ubXV0ZXgpICE9IDApCiAJCXJldHVybiBFUlJfUFRSKC1FSU5UUik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZ4dFthZl0ubWF0Y2gsIGxpc3QpIHsKIAkJaWYgKHN0cmNtcChtLT5uYW1lLCBuYW1lKSA9PSAwKSB7CiAJCQlpZiAobS0+cmV2aXNpb24gPT0gcmV2aXNpb24pIHsKIAkJCQlpZiAodHJ5X21vZHVsZV9nZXQobS0+bWUpKSB7Ci0JCQkJCXVwKCZ4dFthZl0ubXV0ZXgpOworCQkJCQltdXRleF91bmxvY2soJnh0W2FmXS5tdXRleCk7CiAJCQkJCXJldHVybiBtOwogCQkJCX0KIAkJCX0gZWxzZQogCQkJCWVyciA9IC1FUFJPVE9UWVBFOyAvKiBGb3VuZCBzb21ldGhpbmcuICovCiAJCX0KIAl9Ci0JdXAoJnh0W2FmXS5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ4dFthZl0ubXV0ZXgpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiBFWFBPUlRfU1lNQk9MKHh0X2ZpbmRfbWF0Y2gpOwpAQCAtMTM5LDM3ICsxNTEsMzEgQEAKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp0OwogCWludCBlcnIgPSAwOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmeHRbYWZdLm11dGV4KSAhPSAwKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnh0W2FmXS5tdXRleCkgIT0gMCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlRSKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnh0W2FmXS50YXJnZXQsIGxpc3QpIHsKIAkJaWYgKHN0cmNtcCh0LT5uYW1lLCBuYW1lKSA9PSAwKSB7CiAJCQlpZiAodC0+cmV2aXNpb24gPT0gcmV2aXNpb24pIHsKIAkJCQlpZiAodHJ5X21vZHVsZV9nZXQodC0+bWUpKSB7Ci0JCQkJCXVwKCZ4dFthZl0ubXV0ZXgpOworCQkJCQltdXRleF91bmxvY2soJnh0W2FmXS5tdXRleCk7CiAJCQkJCXJldHVybiB0OwogCQkJCX0KIAkJCX0gZWxzZQogCQkJCWVyciA9IC1FUFJPVE9UWVBFOyAvKiBGb3VuZCBzb21ldGhpbmcuICovCiAJCX0KIAl9Ci0JdXAoJnh0W2FmXS5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ4dFthZl0ubXV0ZXgpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiBFWFBPUlRfU1lNQk9MKHh0X2ZpbmRfdGFyZ2V0KTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKnh0X3ByZWZpeFtOUFJPVE9dID0gewotCVtBRl9JTkVUXSAJPSAiaXB0XyVzIiwKLQlbQUZfSU5FVDZdIAk9ICJpcDZ0XyVzIiwKLQlbTkZfQVJQXQk9ICJhcnB0XyVzIiwKLX07Ci0KIHN0cnVjdCB4dF90YXJnZXQgKnh0X3JlcXVlc3RfZmluZF90YXJnZXQoaW50IGFmLCBjb25zdCBjaGFyICpuYW1lLCB1OCByZXZpc2lvbikKIHsKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChhZiwgbmFtZSwgcmV2aXNpb24pLAotCQkJCQkgeHRfcHJlZml4W2FmXSwgbmFtZSk7CisJCQkJCSAiJXN0XyVzIiwgeHRfcHJlZml4W2FmXSwgbmFtZSk7CiAJaWYgKElTX0VSUih0YXJnZXQpIHx8ICF0YXJnZXQpCiAJCXJldHVybiBOVUxMOwogCXJldHVybiB0YXJnZXQ7CkBAIC0yMTQsNyArMjIwLDcgQEAKIHsKIAlpbnQgaGF2ZV9yZXYsIGJlc3QgPSAtMTsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnh0W2FmXS5tdXRleCkgIT0gMCkgeworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnh0W2FmXS5tdXRleCkgIT0gMCkgewogCQkqZXJyID0gLUVJTlRSOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0yMjIsNyArMjI4LDcgQEAKIAkJaGF2ZV9yZXYgPSB0YXJnZXRfcmV2Zm4oYWYsIG5hbWUsIHJldmlzaW9uLCAmYmVzdCk7CiAJZWxzZQogCQloYXZlX3JldiA9IG1hdGNoX3JldmZuKGFmLCBuYW1lLCByZXZpc2lvbiwgJmJlc3QpOwotCXVwKCZ4dFthZl0ubXV0ZXgpOworCW11dGV4X3VubG9jaygmeHRbYWZdLm11dGV4KTsKIAogCS8qIE5vdGhpbmcgYXQgYWxsPyAgUmV0dXJuIDAgdG8gdHJ5IGxvYWRpbmcgbW9kdWxlLiAqLwogCWlmIChiZXN0ID09IC0xKSB7CkBAIC0yMzcsNiArMjQzLDY0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9maW5kX3JldmlzaW9uKTsKIAoraW50IHh0X2NoZWNrX21hdGNoKGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHVuc2lnbmVkIHNob3J0IGZhbWlseSwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqdGFibGUsIHVuc2lnbmVkIGludCBob29rX21hc2ssCisJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBpbnQgaW52X3Byb3RvKQoreworCWlmIChYVF9BTElHTihtYXRjaC0+bWF0Y2hzaXplKSAhPSBzaXplKSB7CisJCXByaW50aygiJXNfdGFibGVzOiAlcyBtYXRjaDogaW52YWxpZCBzaXplICVadSAhPSAldVxuIiwKKwkJICAgICAgIHh0X3ByZWZpeFtmYW1pbHldLCBtYXRjaC0+bmFtZSwKKwkJICAgICAgIFhUX0FMSUdOKG1hdGNoLT5tYXRjaHNpemUpLCBzaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChtYXRjaC0+dGFibGUgJiYgc3RyY21wKG1hdGNoLT50YWJsZSwgdGFibGUpKSB7CisJCXByaW50aygiJXNfdGFibGVzOiAlcyBtYXRjaDogb25seSB2YWxpZCBpbiAlcyB0YWJsZSwgbm90ICVzXG4iLAorCQkgICAgICAgeHRfcHJlZml4W2ZhbWlseV0sIG1hdGNoLT5uYW1lLCBtYXRjaC0+dGFibGUsIHRhYmxlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChtYXRjaC0+aG9va3MgJiYgKGhvb2tfbWFzayAmIH5tYXRjaC0+aG9va3MpICE9IDApIHsKKwkJcHJpbnRrKCIlc190YWJsZXM6ICVzIG1hdGNoOiBiYWQgaG9va19tYXNrICV1XG4iLAorCQkgICAgICAgeHRfcHJlZml4W2ZhbWlseV0sIG1hdGNoLT5uYW1lLCBob29rX21hc2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKG1hdGNoLT5wcm90byAmJiAobWF0Y2gtPnByb3RvICE9IHByb3RvIHx8IGludl9wcm90bykpIHsKKwkJcHJpbnRrKCIlc190YWJsZXM6ICVzIG1hdGNoOiBvbmx5IHZhbGlkIGZvciBwcm90b2NvbCAldVxuIiwKKwkJICAgICAgIHh0X3ByZWZpeFtmYW1pbHldLCBtYXRjaC0+bmFtZSwgbWF0Y2gtPnByb3RvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeHRfY2hlY2tfbWF0Y2gpOworCitpbnQgeHRfY2hlY2tfdGFyZ2V0KGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwgdW5zaWduZWQgc2hvcnQgZmFtaWx5LAorCQkgICAgdW5zaWduZWQgaW50IHNpemUsIGNvbnN0IGNoYXIgKnRhYmxlLCB1bnNpZ25lZCBpbnQgaG9va19tYXNrLAorCQkgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIGludCBpbnZfcHJvdG8pCit7CisJaWYgKFhUX0FMSUdOKHRhcmdldC0+dGFyZ2V0c2l6ZSkgIT0gc2l6ZSkgeworCQlwcmludGsoIiVzX3RhYmxlczogJXMgdGFyZ2V0OiBpbnZhbGlkIHNpemUgJVp1ICE9ICV1XG4iLAorCQkgICAgICAgeHRfcHJlZml4W2ZhbWlseV0sIHRhcmdldC0+bmFtZSwKKwkJICAgICAgIFhUX0FMSUdOKHRhcmdldC0+dGFyZ2V0c2l6ZSksIHNpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHRhcmdldC0+dGFibGUgJiYgc3RyY21wKHRhcmdldC0+dGFibGUsIHRhYmxlKSkgeworCQlwcmludGsoIiVzX3RhYmxlczogJXMgdGFyZ2V0OiBvbmx5IHZhbGlkIGluICVzIHRhYmxlLCBub3QgJXNcbiIsCisJCSAgICAgICB4dF9wcmVmaXhbZmFtaWx5XSwgdGFyZ2V0LT5uYW1lLCB0YXJnZXQtPnRhYmxlLCB0YWJsZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodGFyZ2V0LT5ob29rcyAmJiAoaG9va19tYXNrICYgfnRhcmdldC0+aG9va3MpICE9IDApIHsKKwkJcHJpbnRrKCIlc190YWJsZXM6ICVzIHRhcmdldDogYmFkIGhvb2tfbWFzayAldVxuIiwKKwkJICAgICAgIHh0X3ByZWZpeFtmYW1pbHldLCB0YXJnZXQtPm5hbWUsIGhvb2tfbWFzayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodGFyZ2V0LT5wcm90byAmJiAodGFyZ2V0LT5wcm90byAhPSBwcm90byB8fCBpbnZfcHJvdG8pKSB7CisJCXByaW50aygiJXNfdGFibGVzOiAlcyB0YXJnZXQ6IG9ubHkgdmFsaWQgZm9yIHByb3RvY29sICV1XG4iLAorCQkgICAgICAgeHRfcHJlZml4W2ZhbWlseV0sIHRhcmdldC0+bmFtZSwgdGFyZ2V0LT5wcm90byk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X2NoZWNrX3RhcmdldCk7CisKIHN0cnVjdCB4dF90YWJsZV9pbmZvICp4dF9hbGxvY190YWJsZV9pbmZvKHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwpAQCAtMjkwLDIwICszNTQsMjAgQEAKIHsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ4dFthZl0ubXV0ZXgpICE9IDApCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmeHRbYWZdLm11dGV4KSAhPSAwKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmeHRbYWZdLnRhYmxlcywgbGlzdCkKIAkJaWYgKHN0cmNtcCh0LT5uYW1lLCBuYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHQtPm1lKSkKIAkJCXJldHVybiB0OwotCXVwKCZ4dFthZl0ubXV0ZXgpOworCW11dGV4X3VubG9jaygmeHRbYWZdLm11dGV4KTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2ZpbmRfdGFibGVfbG9jayk7CiAKIHZvaWQgeHRfdGFibGVfdW5sb2NrKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7Ci0JdXAoJnh0W3RhYmxlLT5hZl0ubXV0ZXgpOworCW11dGV4X3VubG9jaygmeHRbdGFibGUtPmFmXS5tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF90YWJsZV91bmxvY2spOwogCkBAIC0zNDMsNyArNDA3LDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCi0JcmV0ID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZ4dFt0YWJsZS0+YWZdLm11dGV4KTsKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnh0W3RhYmxlLT5hZl0ubXV0ZXgpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzY5LDcgKzQzMyw3IEBACiAKIAlyZXQgPSAwOwogIHVubG9jazoKLQl1cCgmeHRbdGFibGUtPmFmXS5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ4dFt0YWJsZS0+YWZdLm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfcmVnaXN0ZXJfdGFibGUpOwpAQCAtMzc4LDEwICs0NDIsMTAgQEAKIHsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAotCWRvd24oJnh0W3RhYmxlLT5hZl0ubXV0ZXgpOworCW11dGV4X2xvY2soJnh0W3RhYmxlLT5hZl0ubXV0ZXgpOwogCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAlMSVNUX0RFTEVURSgmeHRbdGFibGUtPmFmXS50YWJsZXMsIHRhYmxlKTsKLQl1cCgmeHRbdGFibGUtPmFmXS5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ4dFt0YWJsZS0+YWZdLm11dGV4KTsKIAogCXJldHVybiBwcml2YXRlOwogfQpAQCAtNDQ1LDcgKzUwOSw3IEBACiAJaWYgKCFsaXN0KQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnh0W2FmXS5tdXRleCkgIT0gMCkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ4dFthZl0ubXV0ZXgpICE9IDApCiAJCXJldHVybiBOVUxMOwogCQogCXJldHVybiB4dF9nZXRfaWR4KGxpc3QsIHNlcSwgKnBvcyk7CkBAIC00NzQsNyArNTM4LDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHNlcS0+cHJpdmF0ZTsKIAl1X2ludDE2X3QgYWYgPSAodW5zaWduZWQgbG9uZylwZGUtPmRhdGEgJiAweGZmZmY7CiAKLQl1cCgmeHRbYWZdLm11dGV4KTsKKwltdXRleF91bmxvY2soJnh0W2FmXS5tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgeHRfbmFtZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTYwNiw3ICs2NzAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaSA9IDA7IGkgPCBOUFJPVE87IGkrKykgewotCQlpbml0X01VVEVYKCZ4dFtpXS5tdXRleCk7CisJCW11dGV4X2luaXQoJnh0W2ldLm11dGV4KTsKIAkJSU5JVF9MSVNUX0hFQUQoJnh0W2ldLnRhcmdldCk7CiAJCUlOSVRfTElTVF9IRUFEKCZ4dFtpXS5tYXRjaCk7CiAJCUlOSVRfTElTVF9IRUFEKCZ4dFtpXS50YWJsZXMpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DTEFTU0lGWS5jIGIvbmV0L25ldGZpbHRlci94dF9DTEFTU0lGWS5jCmluZGV4IDc4ZWUyNjYuLjNjZDJhYzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmMKQEAgLTI4LDYgKzI4LDcgQEAKICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKICAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKKyAgICAgICBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAgICAgICAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sCiAgICAgICAgdm9pZCAqdXNlcmluZm8pCiB7CkBAIC0zOSw0NyArNDAsMjQgQEAKIAlyZXR1cm4gWFRfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpbnQKLWNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAotICAgICAgICAgICBjb25zdCB2b2lkICplLAotICAgICAgICAgICB2b2lkICp0YXJnaW5mbywKLSAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdpbmZvc2l6ZSwKLSAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQlpZiAodGFyZ2luZm9zaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8pKSl7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ0xBU1NJRlk6IGludmFsaWQgc2l6ZSAoJXUgIT0gJVp1KS5cbiIsCi0JCSAgICAgICB0YXJnaW5mb3NpemUsCi0JCSAgICAgICBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X2NsYXNzaWZ5X3RhcmdldF9pbmZvKSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JCi0JaWYgKGhvb2tfbWFzayAmIH4oKDEgPDwgTkZfSVBfTE9DQUxfT1VUKSB8ICgxIDw8IE5GX0lQX0ZPUldBUkQpIHwKLQkgICAgICAgICAgICAgICAgICAoMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkNMQVNTSUZZOiBvbmx5IHZhbGlkIGluIExPQ0FMX09VVCwgRk9SV0FSRCAiCi0JCSAgICAgICAgICAgICAgICAiYW5kIFBPU1RfUk9VVElORy5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm1hbmdsZSIpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDTEFTU0lGWTogY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gIgotCQkgICAgICAgICAgICAgICAgIlwibWFuZ2xlXCIgdGFibGUsIG5vdCBcIiVzXCIuXG4iLAotCQkgICAgICAgICAgICAgICAgdGFibGVuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGNsYXNzaWZ5X3JlZyA9IHsgCiAJLm5hbWUgCQk9ICJDTEFTU0lGWSIsIAogCS50YXJnZXQgCT0gdGFyZ2V0LAotCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8pLAorCS50YWJsZQkJPSAibWFuZ2xlIiwKKwkuaG9va3MJCT0gKDEgPDwgTkZfSVBfTE9DQUxfT1VUKSB8ICgxIDw8IE5GX0lQX0ZPUldBUkQpIHwKKwkJICAgICAgICAgICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORyksCisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5tZSAJCT0gVEhJU19NT0RVTEUsCiB9Owogc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgY2xhc3NpZnk2X3JlZyA9IHsgCiAJLm5hbWUgCQk9ICJDTEFTU0lGWSIsIAogCS50YXJnZXQgCT0gdGFyZ2V0LAotCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8pLAorCS50YWJsZQkJPSAibWFuZ2xlIiwKKwkuaG9va3MJCT0gKDEgPDwgTkZfSVBfTE9DQUxfT1VUKSB8ICgxIDw8IE5GX0lQX0ZPUldBUkQpIHwKKwkJICAgICAgICAgICgxIDw8IE5GX0lQX1BPU1RfUk9VVElORyksCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKIAkubWUgCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtODgsMjEgKzY2LDIxIEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmY2xhc3NpZnlfcmVnKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmNsYXNzaWZ5X3JlZyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldChBRl9JTkVUNiwgJmNsYXNzaWZ5Nl9yZWcpOworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmY2xhc3NpZnk2X3JlZyk7CiAJaWYgKHJldCkKLQkJeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJmNsYXNzaWZ5X3JlZyk7CisJCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjbGFzc2lmeV9yZWcpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmY2xhc3NpZnlfcmVnKTsKLQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVUNiwgJmNsYXNzaWZ5Nl9yZWcpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjbGFzc2lmeV9yZWcpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjbGFzc2lmeTZfcmVnKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmMKaW5kZXggMjI1MDZlMy4uMzU0NDhiOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuYwpAQCAtMzcsNiArMzcsNyBAQAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorICAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKICAgICAgICBjb25zdCB2b2lkICp0YXJnaW5mbywKICAgICAgICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTc0LDE3ICs3NSwxMiBAQAogc3RhdGljIGludAogY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgY29uc3Qgdm9pZCAqZW50cnksCisJICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCSAgIHZvaWQgKnRhcmdpbmZvLAogCSAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAlzdHJ1Y3QgeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gKm1hdGNoaW5mbyA9IHRhcmdpbmZvOwotCWlmICh0YXJnaW5mb3NpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbykpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNPTk5NQVJLOiB0YXJnaW5mb3NpemUgJXUgIT0gJVp1XG4iLAotCQkgICAgICAgdGFyZ2luZm9zaXplLAotCQkgICAgICAgWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbykpKTsKLQkJcmV0dXJuIDA7Ci0JfQogCiAJaWYgKG1hdGNoaW5mby0+bW9kZSA9PSBYVF9DT05OTUFSS19SRVNUT1JFKSB7CiAJICAgIGlmIChzdHJjbXAodGFibGVuYW1lLCAibWFuZ2xlIikgIT0gMCkgewpAQCAtMTAyLDE2ICs5OCwyMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBjb25ubWFya19yZWcgPSB7Ci0JLm5hbWUgPSAiQ09OTk1BUksiLAotCS50YXJnZXQgPSAmdGFyZ2V0LAotCS5jaGVja2VudHJ5ID0gJmNoZWNrZW50cnksCi0JLm1lID0gVEhJU19NT0RVTEUKKwkubmFtZQkJPSAiQ09OTk1BUksiLAorCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkubWUJCT0gVEhJU19NT0RVTEUKIH07CisKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGNvbm5tYXJrNl9yZWcgPSB7Ci0JLm5hbWUgPSAiQ09OTk1BUksiLAotCS50YXJnZXQgPSAmdGFyZ2V0LAotCS5jaGVja2VudHJ5ID0gJmNoZWNrZW50cnksCi0JLm1lID0gVEhJU19NT0RVTEUKKwkubmFtZQkJPSAiQ09OTk1BUksiLAorCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm1lCQk9IFRISVNfTU9EVUxFCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCkBAIC0xMjAsMjEgKzEyMSwyMSBAQAogCiAJbmVlZF9jb25udHJhY2soKTsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmY29ubm1hcmtfcmVnKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmNvbm5tYXJrX3JlZyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldChBRl9JTkVUNiwgJmNvbm5tYXJrNl9yZWcpOworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmY29ubm1hcms2X3JlZyk7CiAJaWYgKHJldCkKLQkJeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJmNvbm5tYXJrX3JlZyk7CisJCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjb25ubWFya19yZWcpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmY29ubm1hcmtfcmVnKTsKLQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVUNiwgJmNvbm5tYXJrNl9yZWcpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjb25ubWFya19yZWcpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZjb25ubWFyazZfcmVnKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCmluZGV4IDBjMTFlZTkuLjczYmRkNWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCkBAIC0yNiw2ICsyNiw3IEBACiAJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCSAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJICBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCiAJICBjb25zdCB2b2lkICp0YXJnaW5mbywKIAkgIHZvaWQgKnVzZXJpbmZvKQogewpAQCAtNDIsNiArNDMsNyBAQAogCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkgIHVuc2lnbmVkIGludCBob29rbnVtLAorCSAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCSAgY29uc3Qgdm9pZCAqdGFyZ2luZm8sCiAJICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTcyLDUzICs3NCwzMCBAQAogc3RhdGljIGludAogY2hlY2tlbnRyeV92MChjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgICAgY29uc3Qgdm9pZCAqZW50cnksCisJICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCSAgICAgIHZvaWQgKnRhcmdpbmZvLAogCSAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAJICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAlzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyAqbWFya2luZm8gPSB0YXJnaW5mbzsKIAotCWlmICh0YXJnaW5mb3NpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTUFSSzogdGFyZ2luZm9zaXplICV1ICE9ICVadVxuIiwKLQkJICAgICAgIHRhcmdpbmZvc2l6ZSwKLQkJICAgICAgIFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbykpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHN0cmNtcCh0YWJsZW5hbWUsICJtYW5nbGUiKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk1BUks6IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIFwibWFuZ2xlXCIgdGFibGUsIG5vdCBcIiVzXCJcbiIsIHRhYmxlbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChtYXJraW5mby0+bWFyayA+IDB4ZmZmZmZmZmYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTUFSSzogT25seSBzdXBwb3J0cyAzMmJpdCB3aWRlIG1hcmtcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludAogY2hlY2tlbnRyeV92MShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgICAgY29uc3Qgdm9pZCAqZW50cnksCisJICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCSAgICAgIHZvaWQgKnRhcmdpbmZvLAogCSAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCiAJICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAlzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mb192MSAqbWFya2luZm8gPSB0YXJnaW5mbzsKIAotCWlmICh0YXJnaW5mb3NpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxKSkpewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJNQVJLOiB0YXJnaW5mb3NpemUgJXUgIT0gJVp1XG4iLAotCQkgICAgICAgdGFyZ2luZm9zaXplLAotCQkgICAgICAgWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxKSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm1hbmdsZSIpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTUFSSzogY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gXCJtYW5nbGVcIiB0YWJsZSwgbm90IFwiJXNcIlxuIiwgdGFibGVuYW1lKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKG1hcmtpbmZvLT5tb2RlICE9IFhUX01BUktfU0VUCiAJICAgICYmIG1hcmtpbmZvLT5tb2RlICE9IFhUX01BUktfQU5ECiAJICAgICYmIG1hcmtpbmZvLT5tb2RlICE9IFhUX01BUktfT1IpIHsKQEAgLTEyNiwzNiArMTA1LDQzIEBACiAJCSAgICAgICBtYXJraW5mby0+bW9kZSk7CiAJCXJldHVybiAwOwogCX0KLQogCWlmIChtYXJraW5mby0+bWFyayA+IDB4ZmZmZmZmZmYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTUFSSzogT25seSBzdXBwb3J0cyAzMmJpdCB3aWRlIG1hcmtcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgaXB0X21hcmtfcmVnX3YwID0gewogCS5uYW1lCQk9ICJNQVJLIiwKIAkudGFyZ2V0CQk9IHRhcmdldF92MCwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyksCisJLnRhYmxlCQk9ICJtYW5nbGUiLAogCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeV92MCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5yZXZpc2lvbgk9IDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpcHRfbWFya19yZWdfdjEgPSB7CiAJLm5hbWUJCT0gIk1BUksiLAogCS50YXJnZXQJCT0gdGFyZ2V0X3YxLAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxKSwKKwkudGFibGUJCT0gIm1hbmdsZSIsCiAJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5X3YxLAogCS5tZQkJPSBUSElTX01PRFVMRSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLnJldmlzaW9uCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGlwNnRfbWFya19yZWdfdjAgPSB7CiAJLm5hbWUJCT0gIk1BUksiLAogCS50YXJnZXQJCT0gdGFyZ2V0X3YwLAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvKSwKKwkudGFibGUJCT0gIm1hbmdsZSIsCiAJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5X3YwLAogCS5tZQkJPSBUSElTX01PRFVMRSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAogCS5yZXZpc2lvbgk9IDAsCiB9OwogCkBAIC0xNjMsMTggKzE0OSwxOCBAQAogewogCWludCBlcnI7CiAKLQllcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJmlwdF9tYXJrX3JlZ192MCk7CisJZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZpcHRfbWFya19yZWdfdjApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSB4dF9yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJmlwdF9tYXJrX3JlZ192MSk7CisJZXJyID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZpcHRfbWFya19yZWdfdjEpOwogCWlmIChlcnIpCi0JCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQsICZpcHRfbWFya19yZWdfdjApOworCQl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X21hcmtfcmVnX3YwKTsKIAotCWVyciA9IHh0X3JlZ2lzdGVyX3RhcmdldChBRl9JTkVUNiwgJmlwNnRfbWFya19yZWdfdjApOworCWVyciA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmaXA2dF9tYXJrX3JlZ192MCk7CiAJaWYgKGVycikgewotCQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmaXB0X21hcmtfcmVnX3YwKTsKLQkJeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJmlwdF9tYXJrX3JlZ192MSk7CisJCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZpcHRfbWFya19yZWdfdjApOworCQl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X21hcmtfcmVnX3YxKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTgyLDkgKzE2OCw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJmlwdF9tYXJrX3JlZ192MCk7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJmlwdF9tYXJrX3JlZ192MSk7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVDYsICZpcDZ0X21hcmtfcmVnX3YwKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X21hcmtfcmVnX3YwKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X21hcmtfcmVnX3YxKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXA2dF9tYXJrX3JlZ192MCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9ORlFVRVVFLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X05GUVVFVUUuYwppbmRleCA4Yjc2YjZmLi4yODczZTFjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X05GUVVFVUUuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X05GUVVFVUUuYwpAQCAtMjgsNiArMjgsNyBAQAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorICAgICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKICAgICAgICBjb25zdCB2b2lkICp0YXJnaW5mbywKICAgICAgICB2b2lkICp1c2VyaW5mbykKIHsKQEAgLTM2LDcxICszNyw1NyBAQAogCXJldHVybiBORl9RVUVVRV9OUih0aW5mby0+cXVldWVudW0pOwogfQogCi1zdGF0aWMgaW50Ci1jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkgICBjb25zdCB2b2lkICplbnRyeSwKLSAgICAgICAgICAgdm9pZCAqdGFyZ2luZm8sCi0gICAgICAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCi0gICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JaWYgKHRhcmdpbmZvc2l6ZSAhPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X05GUV9pbmZvKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTkZRVUVVRTogdGFyZ2luZm9zaXplICV1ICE9ICVadVxuIiwKLQkJICAgICAgIHRhcmdpbmZvc2l6ZSwKLQkJICAgICAgIFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfTkZRX2luZm8pKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBpcHRfTkZRX3JlZyA9IHsKIAkubmFtZQkJPSAiTkZRVUVVRSIsCiAJLnRhcmdldAkJPSB0YXJnZXQsCi0JLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9ORlFfaW5mbyksCisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGlwNnRfTkZRX3JlZyA9IHsKIAkubmFtZQkJPSAiTkZRVUVVRSIsCiAJLnRhcmdldAkJPSB0YXJnZXQsCi0JLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9ORlFfaW5mbyksCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBhcnB0X05GUV9yZWcgPSB7CiAJLm5hbWUJCT0gIk5GUVVFVUUiLAogCS50YXJnZXQJCT0gdGFyZ2V0LAotCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfTkZRX2luZm8pLAorCS5mYW1pbHkJCT0gTkZfQVJQLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKIHsKIAlpbnQgcmV0OwotCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmaXB0X05GUV9yZWcpOworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmaXB0X05GUV9yZWcpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQ2LCAmaXA2dF9ORlFfcmVnKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmlwNnRfTkZRX3JlZyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfaXA7Ci0JcmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0KE5GX0FSUCwgJmFycHRfTkZRX3JlZyk7CisJcmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZhcnB0X05GUV9yZWcpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2lwNjsKIAogCXJldHVybiByZXQ7CiBvdXRfaXA2OgotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQ2LCAmaXA2dF9ORlFfcmVnKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXA2dF9ORlFfcmVnKTsKIG91dF9pcDoKLQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmaXB0X05GUV9yZWcpOworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZpcHRfTkZRX3JlZyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KE5GX0FSUCwgJmFycHRfTkZRX3JlZyk7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVDYsICZpcDZ0X05GUV9yZWcpOwotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KEFGX0lORVQsICZpcHRfTkZRX3JlZyk7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmFycHRfTkZRX3JlZyk7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwNnRfTkZRX3JlZyk7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwdF9ORlFfcmVnKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X05PVFJBQ0suYyBiL25ldC9uZXRmaWx0ZXIveHRfTk9UUkFDSy5jCmluZGV4IDI0ZDQ3N2EuLmNmMmViZDcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTk9UUkFDSy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTk9UUkFDSy5jCkBAIC0xNSw2ICsxNSw3IEBACiAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogICAgICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvLAogICAgICAgIHZvaWQgKnVzZXJpbmZvKQogewpAQCAtMzMsNTkgKzM0LDQzIEBACiAJcmV0dXJuIFhUX0NPTlRJTlVFOwogfQogCi1zdGF0aWMgaW50Ci1jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkgICBjb25zdCB2b2lkICplbnRyeSwKLSAgICAgICAgICAgdm9pZCAqdGFyZ2luZm8sCi0gICAgICAgICAgIHVuc2lnbmVkIGludCB0YXJnaW5mb3NpemUsCi0gICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JaWYgKHRhcmdpbmZvc2l6ZSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5PVFJBQ0s6IHRhcmdpbmZvc2l6ZSAldSAhPSAwXG4iLAotCQkgICAgICAgdGFyZ2luZm9zaXplKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHN0cmNtcCh0YWJsZW5hbWUsICJyYXciKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5PVFJBQ0s6IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIFwicmF3XCIgdGFibGUsIG5vdCBcIiVzXCJcbiIsIHRhYmxlbmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBub3RyYWNrX3JlZyA9IHsgCi0JLm5hbWUgPSAiTk9UUkFDSyIsIAotCS50YXJnZXQgPSB0YXJnZXQsIAotCS5jaGVja2VudHJ5ID0gY2hlY2tlbnRyeSwKLQkubWUgPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IG5vdHJhY2tfcmVnID0geworCS5uYW1lCQk9ICJOT1RSQUNLIiwKKwkudGFyZ2V0CQk9IHRhcmdldCwKKwkudGFyZ2V0c2l6ZQk9IDAsCisJLnRhYmxlCQk9ICJyYXciLAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkubWUJCT0gVEhJU19NT0RVTEUsCiB9Owotc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgbm90cmFjazZfcmVnID0geyAKLQkubmFtZSA9ICJOT1RSQUNLIiwgCi0JLnRhcmdldCA9IHRhcmdldCwgCi0JLmNoZWNrZW50cnkgPSBjaGVja2VudHJ5LAotCS5tZSA9IFRISVNfTU9EVUxFLAorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBub3RyYWNrNl9yZWcgPSB7CisJLm5hbWUJCT0gIk5PVFJBQ0siLAorCS50YXJnZXQJCT0gdGFyZ2V0LAorCS50YXJnZXRzaXplCT0gMCwKKwkudGFibGUJCT0gInJhdyIsCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmbm90cmFja19yZWcpOworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmbm90cmFja19yZWcpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVDYsICZub3RyYWNrNl9yZWcpOworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmbm90cmFjazZfcmVnKTsKIAlpZiAocmV0KQotCQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVULCAmbm90cmFja19yZWcpOworCQl4dF91bnJlZ2lzdGVyX3RhcmdldCgmbm90cmFja19yZWcpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX3RhcmdldChBRl9JTkVUNiwgJm5vdHJhY2s2X3JlZyk7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoQUZfSU5FVCwgJm5vdHJhY2tfcmVnKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmbm90cmFjazZfcmVnKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmbm90cmFja19yZWcpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY29tbWVudC5jIGIvbmV0L25ldGZpbHRlci94dF9jb21tZW50LmMKaW5kZXggNGJhNmZkNi4uMjYzNzcyNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb21tZW50LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9jb21tZW50LmMKQEAgLTE5LDYgKzE5LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9vZmYsCkBAIC0yOCwzMCArMjksMTkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAotY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0gICAgICAgICAgIGNvbnN0IHZvaWQgKmlwLAotICAgICAgICAgICB2b2lkICptYXRjaGluZm8sCi0gICAgICAgICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCi0gICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JLyogQ2hlY2sgdGhlIHNpemUgKi8KLQlpZiAobWF0Y2hzaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfY29tbWVudF9pbmZvKSkpCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGNvbW1lbnRfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gImNvbW1lbnQiLAogCS5tYXRjaAkJPSBtYXRjaCwKLQkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY29tbWVudF9pbmZvKSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLm1lCQk9IFRISVNfTU9EVUxFCiB9OwogCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGNvbW1lbnQ2X21hdGNoID0gewogCS5uYW1lCQk9ICJjb21tZW50IiwKIAkubWF0Y2gJCT0gbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2NvbW1lbnRfaW5mbyksCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKIAkubWUJCT0gVEhJU19NT0RVTEUKIH07CiAKQEAgLTU5LDIxICs0OSwyMSBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmY29tbWVudF9tYXRjaCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJmNvbW1lbnRfbWF0Y2gpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmNvbW1lbnQ2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmY29tbWVudDZfbWF0Y2gpOwogCWlmIChyZXQpCi0JCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmNvbW1lbnRfbWF0Y2gpOworCQl4dF91bnJlZ2lzdGVyX21hdGNoKCZjb21tZW50X21hdGNoKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmY29tbWVudF9tYXRjaCk7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmNvbW1lbnQ2X21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZjb21tZW50X21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZjb21tZW50Nl9tYXRjaCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25uYnl0ZXMuYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmMKaW5kZXggMTUwZDJhNC4uNDk4NWY1ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25uYnl0ZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5jCkBAIC00NCw2ICs0NCw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC0xMjIsMTUgKzEyMywxMyBAQAogCiBzdGF0aWMgaW50IGNoZWNrKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkJIGNvbnN0IHZvaWQgKmlwLAorCQkgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkJIHZvaWQgKm1hdGNoaW5mbywKIAkJIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCiAJCSB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewogCWNvbnN0IHN0cnVjdCB4dF9jb25uYnl0ZXNfaW5mbyAqc2luZm8gPSBtYXRjaGluZm87CiAKLQlpZiAobWF0Y2hzaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfY29ubmJ5dGVzX2luZm8pKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoc2luZm8tPndoYXQgIT0gWFRfQ09OTkJZVEVTX1BLVFMgJiYKIAkgICAgc2luZm8tPndoYXQgIT0gWFRfQ09OTkJZVEVTX0JZVEVTICYmCiAJICAgIHNpbmZvLT53aGF0ICE9IFhUX0NPTk5CWVRFU19BVkdQS1QpCkBAIC0xNDYsMzQgKzE0NSwzOCBAQAogCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGNvbm5ieXRlc19tYXRjaCA9IHsKIAkubmFtZQkJPSAiY29ubmJ5dGVzIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrLAorCS5tYXRjaAkJPSBtYXRjaCwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5ieXRlc19pbmZvKSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLm1lCQk9IFRISVNfTU9EVUxFCiB9Owogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBjb25uYnl0ZXM2X21hdGNoID0gewogCS5uYW1lCQk9ICJjb25uYnl0ZXMiLAotCS5tYXRjaAkJPSAmbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmY2hlY2ssCisJLm1hdGNoCQk9IG1hdGNoLAorCS5jaGVja2VudHJ5CT0gY2hlY2ssCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY29ubmJ5dGVzX2luZm8pLAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiAJLm1lCQk9IFRISVNfTU9EVUxFCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmY29ubmJ5dGVzX21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmY29ubmJ5dGVzX21hdGNoKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZjb25uYnl0ZXM2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmY29ubmJ5dGVzNl9tYXRjaCk7CiAJaWYgKHJldCkKLQkJeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmY29ubmJ5dGVzX21hdGNoKTsKKwkJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmY29ubmJ5dGVzX21hdGNoKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmNvbm5ieXRlc19tYXRjaCk7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmNvbm5ieXRlczZfbWF0Y2gpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmNvbm5ieXRlc19tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmY29ubmJ5dGVzNl9tYXRjaCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jCmluZGV4IGQwNmU5MjUuLjdiMTZmMWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKQEAgLTM1LDYgKzM1LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTUyLDM2ICs1Myw1NCBAQAogc3RhdGljIGludAogY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgY29uc3Qgdm9pZCAqaXAsCisJICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgICB2b2lkICptYXRjaGluZm8sCiAJICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKIAkgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewotCXN0cnVjdCB4dF9jb25ubWFya19pbmZvICpjbSA9IAotCQkJCShzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyAqKW1hdGNoaW5mbzsKLQlpZiAobWF0Y2hzaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbykpKQotCQlyZXR1cm4gMDsKKwlzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyAqY20gPSAoc3RydWN0IHh0X2Nvbm5tYXJrX2luZm8gKiltYXRjaGluZm87CiAKIAlpZiAoY20tPm1hcmsgPiAweGZmZmZmZmZmIHx8IGNtLT5tYXNrID4gMHhmZmZmZmZmZikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb25ubWFyazogb25seSBzdXBwb3J0IDMyYml0IG1hcmtcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQobWF0Y2gtPmZhbWlseSkgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbid0IGxvYWQgbmZfY29ubnRyYWNrIHN1cHBvcnQgZm9yICIKKwkJCQkgICAgInByb3RvPSVkXG4iLCBtYXRjaC0+ZmFtaWx5KTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkCitkZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KG1hdGNoLT5mYW1pbHkpOworI2VuZGlmCit9CisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggY29ubm1hcmtfbWF0Y2ggPSB7Ci0JLm5hbWUgPSAiY29ubm1hcmsiLAotCS5tYXRjaCA9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeSA9ICZjaGVja2VudHJ5LAotCS5tZSA9IFRISVNfTU9EVUxFCi19Owotc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBjb25ubWFyazZfbWF0Y2ggPSB7Ci0JLm5hbWUgPSAiY29ubm1hcmsiLAotCS5tYXRjaCA9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeSA9ICZjaGVja2VudHJ5LAotCS5tZSA9IFRISVNfTU9EVUxFCisJLm5hbWUJCT0gImNvbm5tYXJrIiwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5kZXN0cm95CT0gZGVzdHJveSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLm1lCQk9IFRISVNfTU9EVUxFCiB9OwogCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIGNvbm5tYXJrNl9tYXRjaCA9IHsKKwkubmFtZQkJPSAiY29ubm1hcmsiLAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya19pbmZvKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLmRlc3Ryb3kJPSBkZXN0cm95LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm1lCQk9IFRISVNfTU9EVUxFCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CkBAIC04OSwyMCArMTA4LDIwIEBACiAKIAluZWVkX2Nvbm50cmFjaygpOwogCi0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmNvbm5tYXJrX21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmY29ubm1hcmtfbWF0Y2gpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmNvbm5tYXJrNl9tYXRjaCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJmNvbm5tYXJrNl9tYXRjaCk7CiAJaWYgKHJldCkKLQkJeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmY29ubm1hcmtfbWF0Y2gpOworCQl4dF91bnJlZ2lzdGVyX21hdGNoKCZjb25ubWFya19tYXRjaCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQ2LCAmY29ubm1hcms2X21hdGNoKTsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZjb25ubWFya19tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmY29ubm1hcms2X21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZjb25ubWFya19tYXRjaCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKaW5kZXggZmZkZWJjOS4uNjVhODQ4MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCkBAIC0zMiw2ICszMiw3IEBACiBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKyAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC0xMTgsNiArMTE5LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTIwMSwyMiArMjAzLDM5IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTkZfSVBfQ09OTlRSQUNLICovCiAKLXN0YXRpYyBpbnQgY2hlY2soY29uc3QgY2hhciAqdGFibGVuYW1lLAotCQkgY29uc3Qgdm9pZCAqaXAsCi0JCSB2b2lkICptYXRjaGluZm8sCi0JCSB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotCQkgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKK3N0YXRpYyBpbnQKK2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAorCSAgIGNvbnN0IHZvaWQgKmlwLAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisJICAgdm9pZCAqbWF0Y2hpbmZvLAorCSAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCisJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLQlpZiAobWF0Y2hzaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfY29ubnRyYWNrX2luZm8pKSkKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQobWF0Y2gtPmZhbWlseSkgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhbid0IGxvYWQgbmZfY29ubnRyYWNrIHN1cHBvcnQgZm9yICIKKwkJCQkgICAgInByb3RvPSVkXG4iLCBtYXRjaC0+ZmFtaWx5KTsKIAkJcmV0dXJuIDA7Ci0KKwl9CisjZW5kaWYKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQKK2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLCB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplKQoreworI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKKwluZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQobWF0Y2gtPmZhbWlseSk7CisjZW5kaWYKK30KKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBjb25udHJhY2tfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gImNvbm50cmFjayIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVjaywKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5kZXN0cm95CT0gZGVzdHJveSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25udHJhY2tfaW5mbyksCisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTIyNCwxNCArMjQzLDE0IEBACiB7CiAJaW50IHJldDsKIAluZWVkX2Nvbm50cmFjaygpOwotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZjb25udHJhY2tfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZjb25udHJhY2tfbWF0Y2gpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZjb25udHJhY2tfbWF0Y2gpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmNvbm50cmFja19tYXRjaCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2RjY3AuYwppbmRleCA3NzlmNDJmLi4yZjMzMWRlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2RjY3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2RjY3AuYwpAQCAtOTUsNiArOTUsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtMTI5LDU2ICsxMzAsMzYgQEAKIHN0YXRpYyBpbnQKIGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmluZiwKKwkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCSAgIHZvaWQgKm1hdGNoaW5mbywKIAkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7Ci0JY29uc3Qgc3RydWN0IGlwdF9pcCAqaXAgPSBpbmY7Ci0JY29uc3Qgc3RydWN0IHh0X2RjY3BfaW5mbyAqaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfZGNjcF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwogCi0JaW5mbyA9IChjb25zdCBzdHJ1Y3QgeHRfZGNjcF9pbmZvICopbWF0Y2hpbmZvOwotCi0JcmV0dXJuIGlwLT5wcm90byA9PSBJUFBST1RPX0RDQ1AKLQkJJiYgIShpcC0+aW52ZmxhZ3MgJiBYVF9JTlZfUFJPVE8pCi0JCSYmIG1hdGNoc2l6ZSA9PSBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X2RjY3BfaW5mbykpCi0JCSYmICEoaW5mby0+ZmxhZ3MgJiB+WFRfRENDUF9WQUxJRF9GTEFHUykKKwlyZXR1cm4gIShpbmZvLT5mbGFncyAmIH5YVF9EQ0NQX1ZBTElEX0ZMQUdTKQogCQkmJiAhKGluZm8tPmludmZsYWdzICYgflhUX0RDQ1BfVkFMSURfRkxBR1MpCiAJCSYmICEoaW5mby0+aW52ZmxhZ3MgJiB+aW5mby0+ZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50Ci1jaGVja2VudHJ5Nihjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0JICAgY29uc3Qgdm9pZCAqaW5mLAotCSAgIHZvaWQgKm1hdGNoaW5mbywKLQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfaXA2ICppcCA9IGluZjsKLQljb25zdCBzdHJ1Y3QgeHRfZGNjcF9pbmZvICppbmZvOwotCi0JaW5mbyA9IChjb25zdCBzdHJ1Y3QgeHRfZGNjcF9pbmZvICopbWF0Y2hpbmZvOwotCi0JcmV0dXJuIGlwLT5wcm90byA9PSBJUFBST1RPX0RDQ1AKLQkJJiYgIShpcC0+aW52ZmxhZ3MgJiBYVF9JTlZfUFJPVE8pCi0JCSYmIG1hdGNoc2l6ZSA9PSBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X2RjY3BfaW5mbykpCi0JCSYmICEoaW5mby0+ZmxhZ3MgJiB+WFRfRENDUF9WQUxJRF9GTEFHUykKLQkJJiYgIShpbmZvLT5pbnZmbGFncyAmIH5YVF9EQ0NQX1ZBTElEX0ZMQUdTKQotCQkmJiAhKGluZm8tPmludmZsYWdzICYgfmluZm8tPmZsYWdzKTsKLX0KLQotCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGRjY3BfbWF0Y2ggPSAKIHsgCiAJLm5hbWUgCQk9ICJkY2NwIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2RjY3BfaW5mbyksCisJLnByb3RvCQk9IElQUFJPVE9fRENDUCwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5tZSAJCT0gVEhJU19NT0RVTEUsCiB9Owogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBkY2NwNl9tYXRjaCA9IAogeyAKIAkubmFtZSAJCT0gImRjY3AiLAotCS5tYXRjaAkJPSAmbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeTYsCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2RjY3BfaW5mbyksCisJLnByb3RvCQk9IElQUFJPVE9fRENDUCwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKIAkubWUgCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMTkzLDE3ICsxNzQsMTcgQEAKIAlkY2NwX29wdGJ1ZiA9IGttYWxsb2MoMjU2ICogNCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkY2NwX29wdGJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmRjY3BfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZkY2NwX21hdGNoKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9rZnJlZTsKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmRjY3A2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmZGNjcDZfbWF0Y2gpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucmVnOwogCiAJcmV0dXJuIHJldDsKIAogb3V0X3VucmVnOgotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmRjY3BfbWF0Y2gpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmRjY3BfbWF0Y2gpOwogb3V0X2tmcmVlOgogCWtmcmVlKGRjY3Bfb3B0YnVmKTsKIApAQCAtMjEyLDggKzE5Myw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmRjY3A2X21hdGNoKTsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZkY2NwX21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZkY2NwNl9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmZGNjcF9tYXRjaCk7CiAJa2ZyZWUoZGNjcF9vcHRidWYpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci94dF9oZWxwZXIuYwppbmRleCAzOGI2NzE1Li4xMDFmMDAwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hlbHBlci5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGVscGVyLmMKQEAgLTQyLDYgKzQyLDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTg5LDYgKzkwLDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTk2LDYgKzk4LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgeHRfaGVscGVyX2luZm8gKmluZm8gPSBtYXRjaGluZm87CiAJc3RydWN0IG5mX2Nvbm4gKmN0OworCXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwOwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCWludCByZXQgPSBpbmZvLT5pbnZlcnQ7CiAJCkBAIC0xMTEsNyArMTE0LDggQEAKIAl9CiAKIAlyZWFkX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlpZiAoIWN0LT5tYXN0ZXItPmhlbHBlcikgeworCW1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKGN0LT5tYXN0ZXIpOworCWlmICghbWFzdGVyX2hlbHAgfHwgIW1hc3Rlcl9oZWxwLT5oZWxwZXIpIHsKIAkJREVCVUdQKCJ4dF9oZWxwZXI6IG1hc3RlciBjdCAlcCBoYXMgbm8gaGVscGVyXG4iLCAKIAkJCWV4cC0+ZXhwZWN0YW50KTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTIzLDggKzEyNyw4IEBACiAJaWYgKGluZm8tPm5hbWVbMF0gPT0gJ1wwJykKIAkJcmV0IF49IDE7CiAJZWxzZQotCQlyZXQgXj0gIXN0cm5jbXAoY3QtPm1hc3Rlci0+aGVscGVyLT5uYW1lLCBpbmZvLT5uYW1lLCAKLQkJICAgICAgICAgICAgICAgIHN0cmxlbihjdC0+bWFzdGVyLT5oZWxwZXItPm5hbWUpKTsKKwkJcmV0IF49ICFzdHJuY21wKG1hc3Rlcl9oZWxwLT5oZWxwZXItPm5hbWUsIGluZm8tPm5hbWUsCisJCSAgICAgICAgICAgICAgICBzdHJsZW4obWFzdGVyX2hlbHAtPmhlbHBlci0+bmFtZSkpOwogb3V0X3VubG9jazoKIAlyZWFkX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC0xMzMsMzEgKzEzNyw0OCBAQAogCiBzdGF0aWMgaW50IGNoZWNrKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkJIGNvbnN0IHZvaWQgKmluZiwKKwkJIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJCSB2b2lkICptYXRjaGluZm8sCiAJCSB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogCQkgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAlzdHJ1Y3QgeHRfaGVscGVyX2luZm8gKmluZm8gPSBtYXRjaGluZm87CiAKLQlpbmZvLT5uYW1lWzI5XSA9ICdcMCc7Ci0KLQkvKiB2ZXJpZnkgc2l6ZSAqLwotCWlmIChtYXRjaHNpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9oZWxwZXJfaW5mbykpKQorI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKKwlpZiAobmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldChtYXRjaC0+ZmFtaWx5KSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FuJ3QgbG9hZCBuZl9jb25udHJhY2sgc3VwcG9ydCBmb3IgIgorCQkJCSAgICAicHJvdG89JWRcbiIsIG1hdGNoLT5mYW1pbHkpOwogCQlyZXR1cm4gMDsKLQorCX0KKyNlbmRpZgorCWluZm8tPm5hbWVbMjldID0gJ1wwJzsKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQKK2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLCB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplKQoreworI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKKwluZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQobWF0Y2gtPmZhbWlseSk7CisjZW5kaWYKK30KKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBoZWxwZXJfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gImhlbHBlciIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVjaywKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfaGVscGVyX2luZm8pLAorCS5jaGVja2VudHJ5CT0gY2hlY2ssCisJLmRlc3Ryb3kJPSBkZXN0cm95LAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9Owogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBoZWxwZXI2X21hdGNoID0gewogCS5uYW1lCQk9ICJoZWxwZXIiLAotCS5tYXRjaAkJPSAmbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmY2hlY2ssCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2hlbHBlcl9pbmZvKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrLAorCS5kZXN0cm95CT0gZGVzdHJveSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTE2NiwyMSArMTg3LDIxIEBACiAJaW50IHJldDsKIAluZWVkX2Nvbm50cmFjaygpOwogCi0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmhlbHBlcl9tYXRjaCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJmhlbHBlcl9tYXRjaCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmhlbHBlcjZfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZoZWxwZXI2X21hdGNoKTsKIAlpZiAocmV0IDwgMCkKLQkJeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmaGVscGVyX21hdGNoKTsKKwkJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaGVscGVyX21hdGNoKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmaGVscGVyX21hdGNoKTsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQ2LCAmaGVscGVyNl9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaGVscGVyX21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZoZWxwZXI2X21hdGNoKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2xlbmd0aC5jIGIvbmV0L25ldGZpbHRlci94dF9sZW5ndGguYwppbmRleCAzOWM4ZmFlLi4zODU2MGNhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2xlbmd0aC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmMKQEAgLTI0LDYgKzI0LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTM5LDYgKzQwLDcgQEAKIG1hdGNoNihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgIGludCBvZmZzZXQsCiAgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC01MCw0OSArNTIsMzkgQEAKIAlyZXR1cm4gKHBrdGxlbiA+PSBpbmZvLT5taW4gJiYgcGt0bGVuIDw9IGluZm8tPm1heCkgXiBpbmZvLT5pbnZlcnQ7CiB9CiAKLXN0YXRpYyBpbnQKLWNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAotICAgICAgICAgICBjb25zdCB2b2lkICppcCwKLSAgICAgICAgICAgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQotewotCWlmIChtYXRjaHNpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9sZW5ndGhfaW5mbykpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGxlbmd0aF9tYXRjaCA9IHsKIAkubmFtZQkJPSAibGVuZ3RoIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2xlbmd0aF9pbmZvKSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBsZW5ndGg2X21hdGNoID0gewogCS5uYW1lCQk9ICJsZW5ndGgiLAotCS5tYXRjaAkJPSAmbWF0Y2g2LAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoNiwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9sZW5ndGhfaW5mbyksCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmbGVuZ3RoX21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmbGVuZ3RoX21hdGNoKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQ2LCAmbGVuZ3RoNl9tYXRjaCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJmxlbmd0aDZfbWF0Y2gpOwogCWlmIChyZXQpCi0JCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmxlbmd0aF9tYXRjaCk7CisJCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmxlbmd0aF9tYXRjaCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmxlbmd0aF9tYXRjaCk7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmxlbmd0aDZfbWF0Y2gpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmxlbmd0aF9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmbGVuZ3RoNl9tYXRjaCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCmluZGV4IDE1ZTQwNTAuLmU5MWMxYTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKQEAgLTY4LDYgKzY4LDcgQEAKIGlwdF9saW1pdF9tYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCWNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJCWNvbnN0IHZvaWQgKm1hdGNoaW5mbywKIAkJaW50IG9mZnNldCwKIAkJdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC0xMDcsMTUgKzEwOCwxMyBAQAogc3RhdGljIGludAogaXB0X2xpbWl0X2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCQkgICAgIGNvbnN0IHZvaWQgKmluZiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCQkgICAgIHZvaWQgKm1hdGNoaW5mbywKIAkJICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogCQkgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7CiAJc3RydWN0IHh0X3JhdGVpbmZvICpyID0gbWF0Y2hpbmZvOwogCi0JaWYgKG1hdGNoc2l6ZSAhPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X3JhdGVpbmZvKSkpCi0JCXJldHVybiAwOwotCiAJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwogCWlmIChyLT5idXJzdCA9PSAwCiAJICAgIHx8IHVzZXIyY3JlZGl0cyhyLT5hdmcgKiByLT5idXJzdCkgPCB1c2VyMmNyZWRpdHMoci0+YXZnKSkgewpAQCAtMTQwLDEzICsxMzksMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaXB0X2xpbWl0X3JlZyA9IHsKIAkubmFtZQkJPSAibGltaXQiLAogCS5tYXRjaAkJPSBpcHRfbGltaXRfbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfcmF0ZWluZm8pLAogCS5jaGVja2VudHJ5CT0gaXB0X2xpbWl0X2NoZWNrZW50cnksCisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIGxpbWl0Nl9yZWcgPSB7CiAJLm5hbWUJCT0gImxpbWl0IiwKIAkubWF0Y2gJCT0gaXB0X2xpbWl0X21hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3JhdGVpbmZvKSwKIAkuY2hlY2tlbnRyeQk9IGlwdF9saW1pdF9jaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMTU0LDIxICsxNTcsMjEgQEAKIHsKIAlpbnQgcmV0OwogCQotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZpcHRfbGltaXRfcmVnKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmaXB0X2xpbWl0X3JlZyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAkKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJmxpbWl0Nl9yZWcpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZsaW1pdDZfcmVnKTsKIAlpZiAocmV0KQotCQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZpcHRfbGltaXRfcmVnKTsKKwkJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaXB0X2xpbWl0X3JlZyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJmlwdF9saW1pdF9yZWcpOwotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZsaW1pdDZfcmVnKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZpcHRfbGltaXRfcmVnKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZsaW1pdDZfcmVnKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X21hYy5jIGIvbmV0L25ldGZpbHRlci94dF9tYWMuYwppbmRleCAwNDYxZGNiLi5mNGRlZmEyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X21hYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbWFjLmMKQEAgLTI3LDYgKzI3LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTQyLDU4ICs0Myw0MyBAQAogCQleIGluZm8tPmludmVydCkpOwogfQogCi1zdGF0aWMgaW50Ci1pcHRfbWFjX2NoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAotCQkgICBjb25zdCB2b2lkICppbmYsCi0JCSAgIHZvaWQgKm1hdGNoaW5mbywKLQkJICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKLQkJICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQkvKiBGT1JXQVJEIGlzbid0IGFsd2F5cyB2YWxpZCwgYnV0IGl0J3MgbmljZSB0byBiZSBhYmxlIHRvIGRvIC0tUlIgKi8KLQlpZiAoaG9va19tYXNrCi0JICAgICYgfigoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9MT0NBTF9JTikKLQkJfCAoMSA8PCBORl9JUF9GT1JXQVJEKSkpIHsKLQkJcHJpbnRrKCJ4dF9tYWM6IG9ubHkgdmFsaWQgZm9yIFBSRV9ST1VUSU5HLCBMT0NBTF9JTiBvciBGT1JXQVJELlxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChtYXRjaHNpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9tYWNfaW5mbykpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIG1hY19tYXRjaCA9IHsKIAkubmFtZQkJPSAibWFjIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmlwdF9tYWNfY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfbWFjX2luZm8pLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9MT0NBTF9JTikgfAorCQkJICAoMSA8PCBORl9JUF9GT1JXQVJEKSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggbWFjNl9tYXRjaCA9IHsKIAkubmFtZQkJPSAibWFjIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmlwdF9tYWNfY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfbWFjX2luZm8pLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUF9QUkVfUk9VVElORykgfCAoMSA8PCBORl9JUF9MT0NBTF9JTikgfAorCQkJICAoMSA8PCBORl9JUF9GT1JXQVJEKSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKIHsKIAlpbnQgcmV0OwotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZtYWNfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZtYWNfbWF0Y2gpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJm1hYzZfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZtYWM2X21hdGNoKTsKIAlpZiAocmV0KQotCQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZtYWNfbWF0Y2gpOworCQl4dF91bnJlZ2lzdGVyX21hdGNoKCZtYWNfbWF0Y2gpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZtYWNfbWF0Y2gpOwotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZtYWM2X21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZtYWNfbWF0Y2gpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm1hYzZfbWF0Y2gpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jIGIvbmV0L25ldGZpbHRlci94dF9tYXJrLmMKaW5kZXggMmEwYWM2Mi4uY2UwYmFkZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9tYXJrLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9tYXJrLmMKQEAgLTIzLDYgKzIzLDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTM2LDU1ICszNyw1NiBAQAogc3RhdGljIGludAogY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAgICAgICAgICAgIGNvbnN0IHZvaWQgKmVudHJ5LAorCSAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAgICAgICAgICAgIHZvaWQgKm1hdGNoaW5mbywKICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKIAlzdHJ1Y3QgeHRfbWFya19pbmZvICptaW5mbyA9IChzdHJ1Y3QgeHRfbWFya19pbmZvICopIG1hdGNoaW5mbzsKIAotCWlmIChtYXRjaHNpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX2luZm8pKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAobWluZm8tPm1hcmsgPiAweGZmZmZmZmZmIHx8IG1pbmZvLT5tYXNrID4gMHhmZmZmZmZmZikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYXJrOiBvbmx5IHN1cHBvcnRzIDMyYml0IG1hcmtcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtYXJrX21hdGNoID0gewogCS5uYW1lCQk9ICJtYXJrIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X21hcmtfaW5mbyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIG1hcms2X21hdGNoID0gewogCS5uYW1lCQk9ICJtYXJrIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X21hcmtfaW5mbyksCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogewogCWludCByZXQ7Ci0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJm1hcmtfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZtYXJrX21hdGNoKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZtYXJrNl9tYXRjaCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJm1hcms2X21hdGNoKTsKIAlpZiAocmV0KQotCQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZtYXJrX21hdGNoKTsKKwkJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmbWFya19tYXRjaCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJm1hcmtfbWF0Y2gpOwotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZtYXJrNl9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmbWFya19tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmbWFyazZfbWF0Y2gpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5jIGIvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKaW5kZXggMTliYjU3Yy4uMDg5ZjRmNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMKQEAgLTI2LDYgKzI2LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTEwMiwxNCArMTAzLDEzIEBACiBzdGF0aWMgaW50CiBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkJICAgICAgIGNvbnN0IHZvaWQgKmlwLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkJICAgICAgIHZvaWQgKm1hdGNoaW5mbywKIAkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewogCWNvbnN0IHN0cnVjdCB4dF9waHlzZGV2X2luZm8gKmluZm8gPSBtYXRjaGluZm87CiAKLQlpZiAobWF0Y2hzaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfcGh5c2Rldl9pbmZvKSkpCi0JCXJldHVybiAwOwogCWlmICghKGluZm8tPmJpdG1hc2sgJiBYVF9QSFlTREVWX09QX01BU0spIHx8CiAJICAgIGluZm8tPmJpdG1hc2sgJiB+WFRfUEhZU0RFVl9PUF9NQVNLKQogCQlyZXR1cm4gMDsKQEAgLTExOCwxNSArMTE4LDE5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggcGh5c2Rldl9tYXRjaCA9IHsKIAkubmFtZQkJPSAicGh5c2RldiIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9waHlzZGV2X2luZm8pLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBwaHlzZGV2Nl9tYXRjaCA9IHsKIAkubmFtZQkJPSAicGh5c2RldiIsCi0JLm1hdGNoCQk9ICZtYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZjaGVja2VudHJ5LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9waHlzZGV2X2luZm8pLAorCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTEzNCwyMSArMTM4LDIxIEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZwaHlzZGV2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmcGh5c2Rldl9tYXRjaCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnBoeXNkZXY2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmcGh5c2RldjZfbWF0Y2gpOwogCWlmIChyZXQgPCAwKQotCQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZwaHlzZGV2X21hdGNoKTsKKwkJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmcGh5c2Rldl9tYXRjaCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJnBoeXNkZXZfbWF0Y2gpOwotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZwaHlzZGV2Nl9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmcGh5c2Rldl9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmcGh5c2RldjZfbWF0Y2gpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcGt0dHlwZS5jIGIvbmV0L25ldGZpbHRlci94dF9wa3R0eXBlLmMKaW5kZXggYWIxYjI2My4uOGI4YmNhOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9wa3R0eXBlLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9wa3R0eXBlLmMKQEAgLTIyLDYgKzIyLDcgQEAKIHN0YXRpYyBpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtMzIsNTAgKzMzLDQwIEBACiAJcmV0dXJuIChza2ItPnBrdF90eXBlID09IGluZm8tPnBrdHR5cGUpIF4gaW5mby0+aW52ZXJ0OwogfQogCi1zdGF0aWMgaW50IGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAotCQkgICBjb25zdCB2b2lkICppcCwKLQkJICAgdm9pZCAqbWF0Y2hpbmZvLAotCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotCQkgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQotewotCWlmIChtYXRjaHNpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9wa3R0eXBlX2luZm8pKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBwa3R0eXBlX21hdGNoID0gewogCS5uYW1lCQk9ICJwa3R0eXBlIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCi0JLm1lCQk9IFRISVNfTU9EVUxFLAotfTsKLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggcGt0dHlwZTZfbWF0Y2ggPSB7Ci0JLm5hbWUJCT0gInBrdHR5cGUiLAotCS5tYXRjaAkJPSAmbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfcGt0dHlwZV9pbmZvKSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBwa3R0eXBlNl9tYXRjaCA9IHsKKwkubmFtZQkJPSAicGt0dHlwZSIsCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3BrdHR5cGVfaW5mbyksCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmcGt0dHlwZV9tYXRjaCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnBrdHR5cGVfbWF0Y2gpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnBrdHR5cGU2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmcGt0dHlwZTZfbWF0Y2gpOwogCWlmIChyZXQpCi0JCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJnBrdHR5cGVfbWF0Y2gpOworCQl4dF91bnJlZ2lzdGVyX21hdGNoKCZwa3R0eXBlX21hdGNoKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmcGt0dHlwZV9tYXRjaCk7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnBrdHR5cGU2X21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZwa3R0eXBlX21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZwa3R0eXBlNl9tYXRjaCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9wb2xpY3kuYyBiL25ldC9uZXRmaWx0ZXIveHRfcG9saWN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5OWNiMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcG9saWN5LmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIElQc2VjIHBvbGljeQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCwyMDA1IFBhdHJpY2sgTWNIYXJkeSwgPGthYmVyQHRyYXNoLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKworTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXMgSVBzZWMgcG9saWN5IG1hdGNoaW5nIG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW5saW5lIGludAoreHRfYWRkcl9jbXAoY29uc3QgdW5pb24geHRfcG9saWN5X2FkZHIgKmExLCBjb25zdCB1bmlvbiB4dF9wb2xpY3lfYWRkciAqbSwKKwkgICAgY29uc3QgdW5pb24geHRfcG9saWN5X2FkZHIgKmEyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiAhKChhMS0+YTQuc19hZGRyIF4gYTItPmE0LnNfYWRkcikgJiBtLT5hNC5zX2FkZHIpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiAhaXB2Nl9tYXNrZWRfYWRkcl9jbXAoJmExLT5hNiwgJm0tPmE2LCAmYTItPmE2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CittYXRjaF94ZnJtX3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3QgeHRfcG9saWN5X2VsZW0gKmUsCisJCSB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisjZGVmaW5lIE1BVENIX0FERFIoeCx5LHopCSghZS0+bWF0Y2gueCB8fAkJCSAgICAgICBcCisJCQkJICh4dF9hZGRyX2NtcCgmZS0+eCwgJmUtPnksIHosIGZhbWlseSkgXAorCQkJCSAgXiBlLT5pbnZlcnQueCkpCisjZGVmaW5lIE1BVENIKHgseSkJCSghZS0+bWF0Y2gueCB8fCAoKGUtPnggPT0gKHkpKSBeIGUtPmludmVydC54KSkKKworCXJldHVybiBNQVRDSF9BRERSKHNhZGRyLCBzbWFzaywgKHVuaW9uIHh0X3BvbGljeV9hZGRyICopJngtPnByb3BzLnNhZGRyKSAmJgorCSAgICAgICBNQVRDSF9BRERSKGRhZGRyLCBkbWFzaywgKHVuaW9uIHh0X3BvbGljeV9hZGRyICopJngtPmlkLmRhZGRyKSAmJgorCSAgICAgICBNQVRDSChwcm90bywgeC0+aWQucHJvdG8pICYmCisJICAgICAgIE1BVENIKG1vZGUsIHgtPnByb3BzLm1vZGUpICYmCisJICAgICAgIE1BVENIKHNwaSwgeC0+aWQuc3BpKSAmJgorCSAgICAgICBNQVRDSChyZXFpZCwgeC0+cHJvcHMucmVxaWQpOworfQorCitzdGF0aWMgaW50CittYXRjaF9wb2xpY3lfaW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3BvbGljeV9pbmZvICppbmZvLAorCQl1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit7CisJY29uc3Qgc3RydWN0IHh0X3BvbGljeV9lbGVtICplOworCXN0cnVjdCBzZWNfcGF0aCAqc3AgPSBza2ItPnNwOworCWludCBzdHJpY3QgPSBpbmZvLT5mbGFncyAmIFhUX1BPTElDWV9NQVRDSF9TVFJJQ1Q7CisJaW50IGksIHBvczsKKworCWlmIChzcCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJaWYgKHN0cmljdCAmJiBpbmZvLT5sZW4gIT0gc3AtPmxlbikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSBzcC0+bGVuIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJcG9zID0gc3RyaWN0ID8gaSAtIHNwLT5sZW4gKyAxIDogMDsKKwkJaWYgKHBvcyA+PSBpbmZvLT5sZW4pCisJCQlyZXR1cm4gMDsKKwkJZSA9ICZpbmZvLT5wb2xbcG9zXTsKKworCQlpZiAobWF0Y2hfeGZybV9zdGF0ZShzcC0+eFtpXS54dmVjLCBlLCBmYW1pbHkpKSB7CisJCQlpZiAoIXN0cmljdCkKKwkJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChzdHJpY3QpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gc3RyaWN0ID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQKK21hdGNoX3BvbGljeV9vdXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3BvbGljeV9pbmZvICppbmZvLAorCQkgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCWNvbnN0IHN0cnVjdCB4dF9wb2xpY3lfZWxlbSAqZTsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2ItPmRzdDsKKwlpbnQgc3RyaWN0ID0gaW5mby0+ZmxhZ3MgJiBYVF9QT0xJQ1lfTUFUQ0hfU1RSSUNUOworCWludCBpLCBwb3M7CisKKwlpZiAoZHN0LT54ZnJtID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWZvciAoaSA9IDA7IGRzdCAmJiBkc3QtPnhmcm07IGRzdCA9IGRzdC0+Y2hpbGQsIGkrKykgeworCQlwb3MgPSBzdHJpY3QgPyBpIDogMDsKKwkJaWYgKHBvcyA+PSBpbmZvLT5sZW4pCisJCQlyZXR1cm4gMDsKKwkJZSA9ICZpbmZvLT5wb2xbcG9zXTsKKworCQlpZiAobWF0Y2hfeGZybV9zdGF0ZShkc3QtPnhmcm0sIGUsIGZhbWlseSkpIHsKKwkJCWlmICghc3RyaWN0KQorCQkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKHN0cmljdCkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiBzdHJpY3QgPyBpID09IGluZm8tPmxlbiA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAorICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICptYXRjaGluZm8sCisgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAorICAgICAgICAgICAgICAgICBpbnQgKmhvdGRyb3ApCit7CisJY29uc3Qgc3RydWN0IHh0X3BvbGljeV9pbmZvICppbmZvID0gbWF0Y2hpbmZvOworCWludCByZXQ7CisKKwlpZiAoaW5mby0+ZmxhZ3MgJiBYVF9QT0xJQ1lfTUFUQ0hfSU4pCisJCXJldCA9IG1hdGNoX3BvbGljeV9pbihza2IsIGluZm8sIG1hdGNoLT5mYW1pbHkpOworCWVsc2UKKwkJcmV0ID0gbWF0Y2hfcG9saWN5X291dChza2IsIGluZm8sIG1hdGNoLT5mYW1pbHkpOworCisJaWYgKHJldCA8IDApCisJCXJldCA9IGluZm8tPmZsYWdzICYgWFRfUE9MSUNZX01BVENIX05PTkUgPyAxIDogMDsKKwllbHNlIGlmIChpbmZvLT5mbGFncyAmIFhUX1BPTElDWV9NQVRDSF9OT05FKQorCQlyZXQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwgY29uc3Qgdm9pZCAqaXBfdm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQoreworCXN0cnVjdCB4dF9wb2xpY3lfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKKworCWlmICghKGluZm8tPmZsYWdzICYgKFhUX1BPTElDWV9NQVRDSF9JTnxYVF9QT0xJQ1lfTUFUQ0hfT1VUKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4dF9wb2xpY3k6IG5laXRoZXIgaW5jb21pbmcgbm9yICIKKwkJICAgICAgICAgICAgICAgICJvdXRnb2luZyBwb2xpY3kgc2VsZWN0ZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyogaG9vayB2YWx1ZXMgYXJlIGVxdWFsIGZvciBJUHY0IGFuZCBJUHY2ICovCisJaWYgKGhvb2tfbWFzayAmICgxIDw8IE5GX0lQX1BSRV9ST1VUSU5HIHwgMSA8PCBORl9JUF9MT0NBTF9JTikKKwkgICAgJiYgaW5mby0+ZmxhZ3MgJiBYVF9QT0xJQ1lfTUFUQ0hfT1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAieHRfcG9saWN5OiBvdXRwdXQgcG9saWN5IG5vdCB2YWxpZCBpbiAiCisJCSAgICAgICAgICAgICAgICAiUFJFX1JPVVRJTkcgYW5kIElOUFVUXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChob29rX21hc2sgJiAoMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcgfCAxIDw8IE5GX0lQX0xPQ0FMX09VVCkKKwkgICAgJiYgaW5mby0+ZmxhZ3MgJiBYVF9QT0xJQ1lfTUFUQ0hfSU4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4dF9wb2xpY3k6IGlucHV0IHBvbGljeSBub3QgdmFsaWQgaW4gIgorCQkgICAgICAgICAgICAgICAgIlBPU1RfUk9VVElORyBhbmQgT1VUUFVUXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChpbmZvLT5sZW4gPiBYVF9QT0xJQ1lfTUFYX0VMRU0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4dF9wb2xpY3k6IHRvbyBtYW55IHBvbGljeSBlbGVtZW50c1xuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBwb2xpY3lfbWF0Y2ggPSB7CisJLm5hbWUJCT0gInBvbGljeSIsCisJLmZhbWlseQkJPSBBRl9JTkVULAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9wb2xpY3lfaW5mbyksCisJLmNoZWNrZW50cnkgCT0gY2hlY2tlbnRyeSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBwb2xpY3k2X21hdGNoID0geworCS5uYW1lCQk9ICJwb2xpY3kiLAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3BvbGljeV9pbmZvKSwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrZW50cnksCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkubWUJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZwb2xpY3lfbWF0Y2gpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnBvbGljeTZfbWF0Y2gpOworCWlmIChyZXQpCisJCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnBvbGljeV9tYXRjaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZwb2xpY3k2X21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZwb2xpY3lfbWF0Y2gpOworfQorCittb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOworTU9EVUxFX0FMSUFTKCJpcHRfcG9saWN5Iik7CitNT0RVTEVfQUxJQVMoImlwNnRfcG9saWN5Iik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3JlYWxtLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlYWxtLmMKaW5kZXggMmI3ZTE3OC4uNWUzMWE0YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWFsbS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcmVhbG0uYwpAQCAtMjcsNiArMjcsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtMzgsNDEgKzM5LDI0IEBACiAJcmV0dXJuIChpbmZvLT5pZCA9PSAoZHN0LT50Y2xhc3NpZCAmIGluZm8tPm1hc2spKSBeIGluZm8tPmludmVydDsKIH0KIAotc3RhdGljIGludCBjaGVjayhjb25zdCBjaGFyICp0YWJsZW5hbWUsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlwLAotICAgICAgICAgICAgICAgICB2b2lkICptYXRjaGluZm8sCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JaWYgKGhvb2tfbWFzawotCSAgICAmIH4oKDEgPDwgTkZfSVBfUE9TVF9ST1VUSU5HKSB8ICgxIDw8IE5GX0lQX0ZPUldBUkQpIHwKLQkgICAgICAgICgxIDw8IE5GX0lQX0xPQ0FMX09VVCkgfCAoMSA8PCBORl9JUF9MT0NBTF9JTikpKSB7Ci0JCXByaW50aygieHRfcmVhbG06IG9ubHkgdmFsaWQgZm9yIFBPU1RfUk9VVElORywgTE9DQUxfT1VULCAiCi0JCSAgICAgICAiTE9DQUxfSU4gb3IgRk9SV0FSRC5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKG1hdGNoc2l6ZSAhPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X3JlYWxtX2luZm8pKSkgewotCQlwcmludGsoInh0X3JlYWxtOiBpbnZhbGlkIG1hdGNoc2l6ZS5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggcmVhbG1fbWF0Y2ggPSB7CiAJLm5hbWUJCT0gInJlYWxtIiwKLQkubWF0Y2gJCT0gbWF0Y2gsIAotCS5jaGVja2VudHJ5CT0gY2hlY2ssCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3JlYWxtX2luZm8pLAorCS5ob29rcwkJPSAoMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcpIHwgKDEgPDwgTkZfSVBfRk9SV0FSRCkgfAorCQkJICAoMSA8PCBORl9JUF9MT0NBTF9PVVQpIHwgKDEgPDwgTkZfSVBfTE9DQUxfSU4pLAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKIAkubWUJCT0gVEhJU19NT0RVTEUKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKIHsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJnJlYWxtX21hdGNoKTsKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJnJlYWxtX21hdGNoKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZyZWFsbV9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmcmVhbG1fbWF0Y2gpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKaW5kZXggMTBmYmZjNS4uYzZlYjI0YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKQEAgLTEyMyw2ICsxMjMsNyBAQAogbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogICAgICAgY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAogICAgICAgaW50IG9mZnNldCwKICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLApAQCAtMTYyLDE5ICsxNjMsMTQgQEAKIHN0YXRpYyBpbnQKIGNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAogCSAgIGNvbnN0IHZvaWQgKmluZiwKKwkgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCSAgIHZvaWQgKm1hdGNoaW5mbywKIAkgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAogCSAgIHVuc2lnbmVkIGludCBob29rX21hc2spCiB7Ci0JY29uc3Qgc3RydWN0IHh0X3NjdHBfaW5mbyAqaW5mbzsKLQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCA9IGluZjsKKwljb25zdCBzdHJ1Y3QgeHRfc2N0cF9pbmZvICppbmZvID0gbWF0Y2hpbmZvOwogCi0JaW5mbyA9IChjb25zdCBzdHJ1Y3QgeHRfc2N0cF9pbmZvICopbWF0Y2hpbmZvOwotCi0JcmV0dXJuIGlwLT5wcm90byA9PSBJUFBST1RPX1NDVFAKLQkJJiYgIShpcC0+aW52ZmxhZ3MgJiBYVF9JTlZfUFJPVE8pCi0JCSYmIG1hdGNoc2l6ZSA9PSBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X3NjdHBfaW5mbykpCi0JCSYmICEoaW5mby0+ZmxhZ3MgJiB+WFRfU0NUUF9WQUxJRF9GTEFHUykKKwlyZXR1cm4gIShpbmZvLT5mbGFncyAmIH5YVF9TQ1RQX1ZBTElEX0ZMQUdTKQogCQkmJiAhKGluZm8tPmludmZsYWdzICYgflhUX1NDVFBfVkFMSURfRkxBR1MpCiAJCSYmICEoaW5mby0+aW52ZmxhZ3MgJiB+aW5mby0+ZmxhZ3MpCiAJCSYmICgoIShpbmZvLT5mbGFncyAmIFhUX1NDVFBfQ0hVTktfVFlQRVMpKSB8fCAKQEAgLTE4NCw2NiArMTgwLDQ0IEBACiAJCQkJfCBTQ1RQX0NIVU5LX01BVENIX09OTFkpKSk7CiB9CiAKLXN0YXRpYyBpbnQKLWNoZWNrZW50cnk2KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkgICBjb25zdCB2b2lkICppbmYsCi0JICAgdm9pZCAqbWF0Y2hpbmZvLAotCSAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCi0JICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQljb25zdCBzdHJ1Y3QgeHRfc2N0cF9pbmZvICppbmZvOwotCWNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXAgPSBpbmY7Ci0KLQlpbmZvID0gKGNvbnN0IHN0cnVjdCB4dF9zY3RwX2luZm8gKiltYXRjaGluZm87Ci0KLQlyZXR1cm4gaXAtPnByb3RvID09IElQUFJPVE9fU0NUUAotCQkmJiAhKGlwLT5pbnZmbGFncyAmIFhUX0lOVl9QUk9UTykKLQkJJiYgbWF0Y2hzaXplID09IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfc2N0cF9pbmZvKSkKLQkJJiYgIShpbmZvLT5mbGFncyAmIH5YVF9TQ1RQX1ZBTElEX0ZMQUdTKQotCQkmJiAhKGluZm8tPmludmZsYWdzICYgflhUX1NDVFBfVkFMSURfRkxBR1MpCi0JCSYmICEoaW5mby0+aW52ZmxhZ3MgJiB+aW5mby0+ZmxhZ3MpCi0JCSYmICgoIShpbmZvLT5mbGFncyAmIFhUX1NDVFBfQ0hVTktfVFlQRVMpKSB8fCAKLQkJCShpbmZvLT5jaHVua19tYXRjaF90eXBlICYKLQkJCQkoU0NUUF9DSFVOS19NQVRDSF9BTEwgCi0JCQkJfCBTQ1RQX0NIVU5LX01BVENIX0FOWQotCQkJCXwgU0NUUF9DSFVOS19NQVRDSF9PTkxZKSkpOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggc2N0cF9tYXRjaCA9IAoteyAKLQkubmFtZSA9ICJzY3RwIiwKLQkubWF0Y2ggPSAmbWF0Y2gsCi0JLmNoZWNrZW50cnkgPSAmY2hlY2tlbnRyeSwKLQkubWUgPSBUSElTX01PRFVMRQotfTsKLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggc2N0cDZfbWF0Y2ggPSAKLXsgCi0JLm5hbWUgPSAic2N0cCIsCi0JLm1hdGNoID0gJm1hdGNoLAotCS5jaGVja2VudHJ5ID0gJmNoZWNrZW50cnk2LAotCS5tZSA9IFRISVNfTU9EVUxFCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIHNjdHBfbWF0Y2ggPSB7CisJLm5hbWUJCT0gInNjdHAiLAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zY3RwX2luZm8pLAorCS5wcm90bwkJPSBJUFBST1RPX1NDVFAsCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkubWUJCT0gVEhJU19NT0RVTEUKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggc2N0cDZfbWF0Y2ggPSB7CisJLm5hbWUJCT0gInNjdHAiLAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zY3RwX2luZm8pLAorCS5wcm90bwkJPSBJUFBST1RPX1NDVFAsCisJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLm1lCQk9IFRISVNfTU9EVUxFCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmc2N0cF9tYXRjaCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnNjdHBfbWF0Y2gpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnNjdHA2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmc2N0cDZfbWF0Y2gpOwogCWlmIChyZXQpCi0JCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJnNjdHBfbWF0Y2gpOworCQl4dF91bnJlZ2lzdGVyX21hdGNoKCZzY3RwX21hdGNoKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnNjdHA2X21hdGNoKTsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZzY3RwX21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZzY3RwNl9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmc2N0cF9tYXRjaCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zdGF0ZS5jIGIvbmV0L25ldGZpbHRlci94dF9zdGF0ZS5jCmluZGV4IDM5Y2U4MDguLmU2YzBiZTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RhdGUuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRlLmMKQEAgLTI0LDYgKzI0LDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTQ0LDI4ICs0NSw0NyBAQAogfQogCiBzdGF0aWMgaW50IGNoZWNrKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkJIGNvbnN0IHZvaWQgKmlwLAorCQkgY29uc3Qgdm9pZCAqaW5mLAorCQkgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkJIHZvaWQgKm1hdGNoaW5mbywKIAkJIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCiAJCSB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQogewotCWlmIChtYXRjaHNpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF9zdGF0ZV9pbmZvKSkpCisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQorCWlmIChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KG1hdGNoLT5mYW1pbHkpIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYW4ndCBsb2FkIG5mX2Nvbm50cmFjayBzdXBwb3J0IGZvciAiCisJCQkJICAgICJwcm90bz0lZFxuIiwgbWF0Y2gtPmZhbWlseSk7CiAJCXJldHVybiAwOwotCisJfQorI2VuZGlmCiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkCitkZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KG1hdGNoLT5mYW1pbHkpOworI2VuZGlmCit9CisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggc3RhdGVfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gInN0YXRlIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrLAorCS5tYXRjaAkJPSBtYXRjaCwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrLAorCS5kZXN0cm95CT0gZGVzdHJveSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zdGF0ZV9pbmZvKSwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBzdGF0ZTZfbWF0Y2ggPSB7CiAJLm5hbWUJCT0gInN0YXRlIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrLAorCS5tYXRjaAkJPSBtYXRjaCwKKwkuY2hlY2tlbnRyeQk9IGNoZWNrLAorCS5kZXN0cm95CT0gZGVzdHJveSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zdGF0ZV9pbmZvKSwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTc1LDIxICs5NSwyMSBAQAogCiAJbmVlZF9jb25udHJhY2soKTsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZzdGF0ZV9tYXRjaCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnN0YXRlX21hdGNoKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQ2LCAmc3RhdGU2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmc3RhdGU2X21hdGNoKTsKIAlpZiAocmV0IDwgMCkKLQkJeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCZzdGF0ZV9tYXRjaCk7CisJCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnN0YXRlX21hdGNoKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmc3RhdGVfbWF0Y2gpOwotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZzdGF0ZTZfbWF0Y2gpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnN0YXRlX21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZzdGF0ZTZfbWF0Y2gpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jCmluZGV4IDdjN2Q1YzguLjcwM2Q4MGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYwpAQCAtMjQsNiArMjQsNyBAQAogc3RhdGljIGludCBtYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJCSBjb25zdCB2b2lkICptYXRjaGluZm8sCiAJCSBpbnQgb2Zmc2V0LAogCQkgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC00Myw2ICs0NCw3IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJCSAgICAgIGNvbnN0IHZvaWQgKmlwLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAogCQkgICAgICB2b2lkICptYXRjaGluZm8sCiAJCSAgICAgIHVuc2lnbmVkIGludCBtYXRjaHNpemUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCkBAIC01MCw5ICs1Miw2IEBACiAJc3RydWN0IHh0X3N0cmluZ19pbmZvICpjb25mID0gbWF0Y2hpbmZvOwogCXN0cnVjdCB0c19jb25maWcgKnRzX2NvbmY7CiAKLQlpZiAobWF0Y2hzaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfc3RyaW5nX2luZm8pKSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBEYW1uLCBjYW4ndCBoYW5kbGUgdGhpcyBjYXNlIHByb3Blcmx5IHdpdGggaXB0YWJsZXMuLi4gKi8KIAlpZiAoY29uZi0+ZnJvbV9vZmZzZXQgPiBjb25mLT50b19vZmZzZXQpCiAJCXJldHVybiAwOwpAQCAtNjcsNyArNjYsOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBkZXN0cm95KHZvaWQgKm1hdGNoaW5mbywgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSkKK3N0YXRpYyB2b2lkIGRlc3Ryb3koY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwgdm9pZCAqbWF0Y2hpbmZvLAorCQkgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSkKIHsKIAl0ZXh0c2VhcmNoX2Rlc3Ryb3koU1RSSU5HX1RFWFRfUFJJVihtYXRjaGluZm8pLT5jb25maWcpOwogfQpAQCAtNzUsMTUgKzc1LDE5IEBACiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHN0cmluZ19tYXRjaCA9IHsKIAkubmFtZSAJCT0gInN0cmluZyIsCiAJLm1hdGNoIAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9zdHJpbmdfaW5mbyksCiAJLmNoZWNrZW50cnkJPSBjaGVja2VudHJ5LAogCS5kZXN0cm95IAk9IGRlc3Ryb3ksCisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5tZSAJCT0gVEhJU19NT0RVTEUKIH07CiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHN0cmluZzZfbWF0Y2ggPSB7CiAJLm5hbWUgCQk9ICJzdHJpbmciLAogCS5tYXRjaCAJCT0gbWF0Y2gsCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfc3RyaW5nX2luZm8pLAogCS5jaGVja2VudHJ5CT0gY2hlY2tlbnRyeSwKIAkuZGVzdHJveSAJPSBkZXN0cm95LAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiAJLm1lIAkJPSBUSElTX01PRFVMRQogfTsKIApAQCAtOTEsMjAgKzk1LDIwIEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZzdHJpbmdfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZzdHJpbmdfbWF0Y2gpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZzdHJpbmc2X21hdGNoKTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmc3RyaW5nNl9tYXRjaCk7CiAJaWYgKHJldCkKLQkJeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmc3RyaW5nX21hdGNoKTsKKwkJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmc3RyaW5nX21hdGNoKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmc3RyaW5nX21hdGNoKTsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQ2LCAmc3RyaW5nNl9tYXRjaCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmc3RyaW5nX21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZzdHJpbmc2X21hdGNoKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jIGIvbmV0L25ldGZpbHRlci94dF90Y3Btc3MuYwppbmRleCBhY2Y3ZjUzLi43MGE4ODU4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3RjcG1zcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfdGNwbXNzLmMKQEAgLTgxLDYgKzgxLDcgQEAKIG1hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKICAgICAgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKICAgICAgIGludCBvZmZzZXQsCiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTkyLDU4ICs5MywyMSBAQAogCQkJICAgICAgIGluZm8tPmludmVydCwgaG90ZHJvcCk7CiB9CiAKLXN0YXRpYyBpbnQKLWNoZWNrZW50cnkoY29uc3QgY2hhciAqdGFibGVuYW1lLAotICAgICAgICAgICBjb25zdCB2b2lkICppcGluZm8sCi0gICAgICAgICAgIHZvaWQgKm1hdGNoaW5mbywKLSAgICAgICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKLSAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCA9IGlwaW5mbzsKLQlpZiAobWF0Y2hzaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8pKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBNdXN0IHNwZWNpZnkgLXAgdGNwICovCi0JaWYgKGlwLT5wcm90byAhPSBJUFBST1RPX1RDUCB8fCAoaXAtPmludmZsYWdzICYgSVBUX0lOVl9QUk9UTykpIHsKLQkJcHJpbnRrKCJ0Y3Btc3M6IE9ubHkgd29ya3Mgb24gVENQIHBhY2tldHNcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAotY2hlY2tlbnRyeTYoY29uc3QgY2hhciAqdGFibGVuYW1lLAotCSAgIGNvbnN0IHZvaWQgKmlwaW5mbywKLSAgICAgICAgICAgdm9pZCAqbWF0Y2hpbmZvLAotICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hzaXplLAotICAgICAgICAgICB1bnNpZ25lZCBpbnQgaG9va19tYXNrKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXAgPSBpcGluZm87Ci0KLQlpZiAobWF0Y2hzaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8pKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBNdXN0IHNwZWNpZnkgLXAgdGNwICovCi0JaWYgKGlwLT5wcm90byAhPSBJUFBST1RPX1RDUCB8fCAoaXAtPmludmZsYWdzICYgWFRfSU5WX1BST1RPKSkgewotCQlwcmludGsoInRjcG1zczogT25seSB3b3JrcyBvbiBUQ1AgcGFja2V0c1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHRjcG1zc19tYXRjaCA9IHsKIAkubmFtZQkJPSAidGNwbXNzIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnksCisJLm1hdGNoCQk9IG1hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3RjcG1zc19tYXRjaF9pbmZvKSwKKwkucHJvdG8JCT0gSVBQUk9UT19UQ1AsCisJLmZhbWlseQkJPSBBRl9JTkVULAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggdGNwbXNzNl9tYXRjaCA9IHsKIAkubmFtZQkJPSAidGNwbXNzIiwKLQkubWF0Y2gJCT0gJm1hdGNoLAotCS5jaGVja2VudHJ5CT0gJmNoZWNrZW50cnk2LAorCS5tYXRjaAkJPSBtYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF90Y3Btc3NfbWF0Y2hfaW5mbyksCisJLnByb3RvCQk9IElQUFJPVE9fVENQLAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMTUxLDIxICsxMTUsMjEgQEAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKIHsKIAlpbnQgcmV0OwotCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZ0Y3Btc3NfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZ0Y3Btc3NfbWF0Y2gpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnRjcG1zczZfbWF0Y2gpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZ0Y3Btc3M2X21hdGNoKTsKIAlpZiAocmV0KQotCQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQsICZ0Y3Btc3NfbWF0Y2gpOworCQl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0Y3Btc3NfbWF0Y2gpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKEFGX0lORVQ2LCAmdGNwbXNzNl9tYXRjaCk7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmdGNwbXNzX21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0Y3Btc3M2X21hdGNoKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0Y3Btc3NfbWF0Y2gpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jCmluZGV4IDY2OWM4MTEuLjE0YTk5MGUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYwpAQCAtNzQsNiArNzQsNyBAQAogdGNwX21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCiAJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCSAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgIGNvbnN0IHZvaWQgKm1hdGNoaW5mbywKIAkgIGludCBvZmZzZXQsCiAJICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKQEAgLTEzOCw0MyArMTM5LDIyIEBACiBzdGF0aWMgaW50CiB0Y3BfY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCiAJICAgICAgIGNvbnN0IHZvaWQgKmluZm8sCisJICAgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJICAgICAgIHZvaWQgKm1hdGNoaW5mbywKIAkgICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKIAkgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCA9IGluZm87CiAJY29uc3Qgc3RydWN0IHh0X3RjcCAqdGNwaW5mbyA9IG1hdGNoaW5mbzsKIAotCS8qIE11c3Qgc3BlY2lmeSBwcm90byA9PSBUQ1AsIGFuZCBubyB1bmtub3duIGludmZsYWdzICovCi0JcmV0dXJuIGlwLT5wcm90byA9PSBJUFBST1RPX1RDUAotCQkmJiAhKGlwLT5pbnZmbGFncyAmIFhUX0lOVl9QUk9UTykKLQkJJiYgbWF0Y2hzaXplID09IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfdGNwKSkKLQkJJiYgISh0Y3BpbmZvLT5pbnZmbGFncyAmIH5YVF9UQ1BfSU5WX01BU0spOworCS8qIE11c3Qgc3BlY2lmeSBubyB1bmtub3duIGludmZsYWdzICovCisJcmV0dXJuICEodGNwaW5mby0+aW52ZmxhZ3MgJiB+WFRfVENQX0lOVl9NQVNLKTsKIH0KIAotLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLwotc3RhdGljIGludAotdGNwNl9jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkgICAgICAgY29uc3Qgdm9pZCAqZW50cnksCi0JICAgICAgIHZvaWQgKm1hdGNoaW5mbywKLQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKLQkgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQljb25zdCBzdHJ1Y3QgaXA2dF9pcDYgKmlwdjYgPSBlbnRyeTsKLQljb25zdCBzdHJ1Y3QgeHRfdGNwICp0Y3BpbmZvID0gbWF0Y2hpbmZvOwotCi0JLyogTXVzdCBzcGVjaWZ5IHByb3RvID09IFRDUCwgYW5kIG5vIHVua25vd24gaW52ZmxhZ3MgKi8KLQlyZXR1cm4gaXB2Ni0+cHJvdG8gPT0gSVBQUk9UT19UQ1AKLQkJJiYgIShpcHY2LT5pbnZmbGFncyAmIFhUX0lOVl9QUk9UTykKLQkJJiYgbWF0Y2hzaXplID09IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfdGNwKSkKLQkJJiYgISh0Y3BpbmZvLT5pbnZmbGFncyAmIH5YVF9UQ1BfSU5WX01BU0spOwotfQotCi0KIHN0YXRpYyBpbnQKIHVkcF9tYXRjaChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCiAJICBjb25zdCB2b2lkICptYXRjaGluZm8sCiAJICBpbnQgb2Zmc2V0LAogCSAgdW5zaWduZWQgaW50IHByb3RvZmYsCkBAIC0yMDgsMTI2ICsxODgsOTIgQEAKIHN0YXRpYyBpbnQKIHVkcF9jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKIAkgICAgICAgY29uc3Qgdm9pZCAqaW5mbywKKwkgICAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKIAkgICAgICAgdm9pZCAqbWF0Y2hpbmZvLAotCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hpbmZvc2l6ZSwKKwkgICAgICAgdW5zaWduZWQgaW50IG1hdGNoc2l6ZSwKIAkgICAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKIHsKLQljb25zdCBzdHJ1Y3QgaXB0X2lwICppcCA9IGluZm87Ci0JY29uc3Qgc3RydWN0IHh0X3VkcCAqdWRwaW5mbyA9IG1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfdGNwICp1ZHBpbmZvID0gbWF0Y2hpbmZvOwogCi0JLyogTXVzdCBzcGVjaWZ5IHByb3RvID09IFVEUCwgYW5kIG5vIHVua25vd24gaW52ZmxhZ3MgKi8KLQlpZiAoaXAtPnByb3RvICE9IElQUFJPVE9fVURQIHx8IChpcC0+aW52ZmxhZ3MgJiBYVF9JTlZfUFJPVE8pKSB7Ci0JCWR1cHJpbnRmKCJpcHRfdWRwOiBQcm90b2NvbCAldSAhPSAldVxuIiwgaXAtPnByb3RvLAotCQkJIElQUFJPVE9fVURQKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChtYXRjaGluZm9zaXplICE9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfdWRwKSkpIHsKLQkJZHVwcmludGYoImlwdF91ZHA6IG1hdGNoc2l6ZSAldSAhPSAldVxuIiwKLQkJCSBtYXRjaGluZm9zaXplLCBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X3VkcCkpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh1ZHBpbmZvLT5pbnZmbGFncyAmIH5YVF9VRFBfSU5WX01BU0spIHsKLQkJZHVwcmludGYoImlwdF91ZHA6IHVua25vd24gZmxhZ3MgJVhcbiIsCi0JCQkgdWRwaW5mby0+aW52ZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyogQ2FsbGVkIHdoZW4gdXNlciB0cmllcyB0byBpbnNlcnQgYW4gZW50cnkgb2YgdGhpcyB0eXBlLiAqLwotc3RhdGljIGludAotdWRwNl9jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkgICAgICAgY29uc3Qgdm9pZCAqZW50cnksCi0JICAgICAgIHZvaWQgKm1hdGNoaW5mbywKLQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNoaW5mb3NpemUsCi0JICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfaXA2ICppcHY2ID0gZW50cnk7Ci0JY29uc3Qgc3RydWN0IHh0X3VkcCAqdWRwaW5mbyA9IG1hdGNoaW5mbzsKLQotCS8qIE11c3Qgc3BlY2lmeSBwcm90byA9PSBVRFAsIGFuZCBubyB1bmtub3duIGludmZsYWdzICovCi0JaWYgKGlwdjYtPnByb3RvICE9IElQUFJPVE9fVURQIHx8IChpcHY2LT5pbnZmbGFncyAmIFhUX0lOVl9QUk9UTykpIHsKLQkJZHVwcmludGYoImlwNnRfdWRwOiBQcm90b2NvbCAldSAhPSAldVxuIiwgaXB2Ni0+cHJvdG8sCi0JCQkgSVBQUk9UT19VRFApOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKG1hdGNoaW5mb3NpemUgIT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCB4dF91ZHApKSkgewotCQlkdXByaW50ZigiaXA2dF91ZHA6IG1hdGNoc2l6ZSAldSAhPSAldVxuIiwKLQkJCSBtYXRjaGluZm9zaXplLCBYVF9BTElHTihzaXplb2Yoc3RydWN0IHh0X3VkcCkpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh1ZHBpbmZvLT5pbnZmbGFncyAmIH5YVF9VRFBfSU5WX01BU0spIHsKLQkJZHVwcmludGYoImlwNnRfdWRwOiB1bmtub3duIGZsYWdzICVYXG4iLAotCQkJIHVkcGluZm8tPmludmZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7CisJLyogTXVzdCBzcGVjaWZ5IG5vIHVua25vd24gaW52ZmxhZ3MgKi8KKwlyZXR1cm4gISh1ZHBpbmZvLT5pbnZmbGFncyAmIH5YVF9VRFBfSU5WX01BU0spOwogfQogCiBzdGF0aWMgc3RydWN0IHh0X21hdGNoIHRjcF9tYXRjaHN0cnVjdCA9IHsKIAkubmFtZQkJPSAidGNwIiwKLQkubWF0Y2gJCT0gJnRjcF9tYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZ0Y3BfY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gdGNwX21hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3RjcCksCisJLnByb3RvCQk9IElQUFJPVE9fVENQLAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkuY2hlY2tlbnRyeQk9IHRjcF9jaGVja2VudHJ5LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggdGNwNl9tYXRjaHN0cnVjdCA9IHsKIAkubmFtZQkJPSAidGNwIiwKLQkubWF0Y2gJCT0gJnRjcF9tYXRjaCwKLQkuY2hlY2tlbnRyeQk9ICZ0Y3A2X2NoZWNrZW50cnksCisJLm1hdGNoCQk9IHRjcF9tYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF90Y3ApLAorCS5wcm90bwkJPSBJUFBST1RPX1RDUCwKKwkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5jaGVja2VudHJ5CT0gdGNwX2NoZWNrZW50cnksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB1ZHBfbWF0Y2hzdHJ1Y3QgPSB7CiAJLm5hbWUJCT0gInVkcCIsCi0JLm1hdGNoCQk9ICZ1ZHBfbWF0Y2gsCi0JLmNoZWNrZW50cnkJPSAmdWRwX2NoZWNrZW50cnksCisJLm1hdGNoCQk9IHVkcF9tYXRjaCwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF91ZHApLAorCS5wcm90bwkJPSBJUFBST1RPX1VEUCwKKwkuZmFtaWx5CQk9IEFGX0lORVQsCisJLmNoZWNrZW50cnkJPSB1ZHBfY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9Owogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB1ZHA2X21hdGNoc3RydWN0ID0gewogCS5uYW1lCQk9ICJ1ZHAiLAotCS5tYXRjaAkJPSAmdWRwX21hdGNoLAotCS5jaGVja2VudHJ5CT0gJnVkcDZfY2hlY2tlbnRyeSwKKwkubWF0Y2gJCT0gdWRwX21hdGNoLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3VkcCksCisJLnByb3RvCQk9IElQUFJPVE9fVURQLAorCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJLmNoZWNrZW50cnkJPSB1ZHBfY2hlY2tlbnRyeSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CiAJaW50IHJldDsKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmdGNwX21hdGNoc3RydWN0KTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmdGNwX21hdGNoc3RydWN0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZ0Y3A2X21hdGNoc3RydWN0KTsKKwlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaCgmdGNwNl9tYXRjaHN0cnVjdCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWdfdGNwOwogCi0JcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJnVkcF9tYXRjaHN0cnVjdCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJnVkcF9tYXRjaHN0cnVjdCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5yZWdfdGNwNjsKIAkKLQlyZXQgPSB4dF9yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnVkcDZfbWF0Y2hzdHJ1Y3QpOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZ1ZHA2X21hdGNoc3RydWN0KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bnJlZ191ZHA7CiAKIAlyZXR1cm4gcmV0OwogCiBvdXRfdW5yZWdfdWRwOgotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJnRjcF9tYXRjaHN0cnVjdCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmdGNwX21hdGNoc3RydWN0KTsKIG91dF91bnJlZ190Y3A2OgotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVDYsICZ0Y3A2X21hdGNoc3RydWN0KTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0Y3A2X21hdGNoc3RydWN0KTsKIG91dF91bnJlZ190Y3A6Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVULCAmdGNwX21hdGNoc3RydWN0KTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0Y3BfbWF0Y2hzdHJ1Y3QpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnVkcDZfbWF0Y2hzdHJ1Y3QpOwotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJnVkcF9tYXRjaHN0cnVjdCk7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaChBRl9JTkVUNiwgJnRjcDZfbWF0Y2hzdHJ1Y3QpOwotCXh0X3VucmVnaXN0ZXJfbWF0Y2goQUZfSU5FVCwgJnRjcF9tYXRjaHN0cnVjdCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmdWRwNl9tYXRjaHN0cnVjdCk7CisJeHRfdW5yZWdpc3Rlcl9tYXRjaCgmdWRwX21hdGNoc3RydWN0KTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0Y3A2X21hdGNoc3RydWN0KTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0Y3BfbWF0Y2hzdHJ1Y3QpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwppbmRleCA2Yjk3NzJkLi5kMDBhOTAzIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIHN0cnVjdCBuZXRsaW5rX3RhYmxlIHsKIAlzdHJ1Y3QgbmxfcGlkX2hhc2ggaGFzaDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBtY19saXN0OworCXVuc2lnbmVkIGxvbmcgKmxpc3RlbmVyczsKIAl1bnNpZ25lZCBpbnQgbmxfbm9ucm9vdDsKIAl1bnNpZ25lZCBpbnQgZ3JvdXBzOwogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKQEAgLTI5Niw2ICsyOTcsMjQgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbmV0bGlua19vcHM7CiAKK3N0YXRpYyB2b2lkCituZXRsaW5rX3VwZGF0ZV9saXN0ZW5lcnMoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBuZXRsaW5rX3RhYmxlICp0YmwgPSAmbmxfdGFibGVbc2stPnNrX3Byb3RvY29sXTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkxHUlBTWih0YmwtPmdyb3Vwcykvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKKwkJbWFzayA9IDA7CisJCXNrX2Zvcl9lYWNoX2JvdW5kKHNrLCBub2RlLCAmdGJsLT5tY19saXN0KQorCQkJbWFzayB8PSBubGtfc2soc2spLT5ncm91cHNbaV07CisJCXRibC0+bGlzdGVuZXJzW2ldID0gbWFzazsKKwl9CisJLyogdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB3aXRoIHRoZSBuZXRsaW5rIHRhYmxlICJncmFiYmVkIiwgd2hpY2gKKwkgKiBtYWtlcyBzdXJlIHVwZGF0ZXMgYXJlIHZpc2libGUgYmVmb3JlIGJpbmQgb3Igc2V0c29ja29wdCByZXR1cm4uICovCit9CisKIHN0YXRpYyBpbnQgbmV0bGlua19pbnNlcnQoc3RydWN0IHNvY2sgKnNrLCB1MzIgcGlkKQogewogCXN0cnVjdCBubF9waWRfaGFzaCAqaGFzaCA9ICZubF90YWJsZVtzay0+c2tfcHJvdG9jb2xdLmhhc2g7CkBAIC00NTYsMTIgKzQ3NSwxNCBAQAogCWlmIChubGstPm1vZHVsZSkKIAkJbW9kdWxlX3B1dChubGstPm1vZHVsZSk7CiAKKwluZXRsaW5rX3RhYmxlX2dyYWIoKTsKIAlpZiAobmxrLT5mbGFncyAmIE5FVExJTktfS0VSTkVMX1NPQ0tFVCkgewotCQluZXRsaW5rX3RhYmxlX2dyYWIoKTsKKwkJa2ZyZWUobmxfdGFibGVbc2stPnNrX3Byb3RvY29sXS5saXN0ZW5lcnMpOwogCQlubF90YWJsZVtzay0+c2tfcHJvdG9jb2xdLm1vZHVsZSA9IE5VTEw7CiAJCW5sX3RhYmxlW3NrLT5za19wcm90b2NvbF0ucmVnaXN0ZXJlZCA9IDA7Ci0JCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7Ci0JfQorCX0gZWxzZSBpZiAobmxrLT5zdWJzY3JpcHRpb25zKQorCQluZXRsaW5rX3VwZGF0ZV9saXN0ZW5lcnMoc2spOworCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiAKIAlrZnJlZShubGstPmdyb3Vwcyk7CiAJbmxrLT5ncm91cHMgPSBOVUxMOwpAQCAtNTg5LDYgKzYxMCw3IEBACiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdlaWdodDMyKG5sYWRkci0+bmxfZ3JvdXBzKSAtCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdlaWdodDMyKG5say0+Z3JvdXBzWzBdKSk7CiAJbmxrLT5ncm91cHNbMF0gPSAobmxrLT5ncm91cHNbMF0gJiB+MHhmZmZmZmZmZlVMKSB8IG5sYWRkci0+bmxfZ3JvdXBzOyAKKwluZXRsaW5rX3VwZGF0ZV9saXN0ZW5lcnMoc2spOwogCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTgwNyw2ICs4MjksMTcgQEAKIAlyZXR1cm4gbmV0bGlua19zZW5kc2tiKHNrLCBza2IsIHNzay0+c2tfcHJvdG9jb2wpOwogfQogCitpbnQgbmV0bGlua19oYXNfbGlzdGVuZXJzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGdyb3VwKQoreworCWludCByZXMgPSAwOworCisJQlVHX09OKCEobmxrX3NrKHNrKS0+ZmxhZ3MgJiBORVRMSU5LX0tFUk5FTF9TT0NLRVQpKTsKKwlpZiAoZ3JvdXAgLSAxIDwgbmxfdGFibGVbc2stPnNrX3Byb3RvY29sXS5ncm91cHMpCisJCXJlcyA9IHRlc3RfYml0KGdyb3VwIC0gMSwgbmxfdGFibGVbc2stPnNrX3Byb3RvY29sXS5saXN0ZW5lcnMpOworCXJldHVybiByZXM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRsaW5rX2hhc19saXN0ZW5lcnMpOworCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgbmV0bGlua19icm9hZGNhc3RfZGVsaXZlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrID0gbmxrX3NrKHNrKTsKQEAgLTEwMTEsNiArMTA0NCw3IEBACiAJCWVsc2UKIAkJCV9fY2xlYXJfYml0KHZhbCAtIDEsIG5say0+Z3JvdXBzKTsKIAkJbmV0bGlua191cGRhdGVfc3Vic2NyaXB0aW9ucyhzaywgc3Vic2NyaXB0aW9ucyk7CisJCW5ldGxpbmtfdXBkYXRlX2xpc3RlbmVycyhzayk7CiAJCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7CiAJCWVyciA9IDA7CiAJCWJyZWFrOwpAQCAtMTE5NCw2ICsxMjI4LDkgQEAKIAkJbXNnLT5tc2dfbmFtZWxlbiA9IHNpemVvZigqYWRkcik7CiAJfQogCisJaWYgKG5say0+ZmxhZ3MgJiBORVRMSU5LX1JFQ1ZfUEtUSU5GTykKKwkJbmV0bGlua19jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7CisKIAlpZiAoTlVMTCA9PSBzaW9jYi0+c2NtKSB7CiAJCW1lbXNldCgmc2NtLCAwLCBzaXplb2Yoc2NtKSk7CiAJCXNpb2NiLT5zY20gPSAmc2NtOwpAQCAtMTIwNSw4ICsxMjQyLDYgQEAKIAkJbmV0bGlua19kdW1wKHNrKTsKIAogCXNjbV9yZWN2KHNvY2ssIG1zZywgc2lvY2ItPnNjbSwgZmxhZ3MpOwotCWlmIChubGstPmZsYWdzICYgTkVUTElOS19SRUNWX1BLVElORk8pCi0JCW5ldGxpbmtfY21zZ19yZWN2X3BrdGluZm8obXNnLCBza2IpOwogCiBvdXQ6CiAJbmV0bGlua19yY3Zfd2FrZShzayk7CkBAIC0xMjM2LDYgKzEyNzEsNyBAQAogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sazsKKwl1bnNpZ25lZCBsb25nICpsaXN0ZW5lcnMgPSBOVUxMOwogCiAJaWYgKCFubF90YWJsZSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMjQ5LDYgKzEyODUsMTMgQEAKIAlpZiAoX19uZXRsaW5rX2NyZWF0ZShzb2NrLCB1bml0KSA8IDApCiAJCWdvdG8gb3V0X3NvY2tfcmVsZWFzZTsKIAorCWlmIChncm91cHMgPCAzMikKKwkJZ3JvdXBzID0gMzI7CisKKwlsaXN0ZW5lcnMgPSBremFsbG9jKE5MR1JQU1ooZ3JvdXBzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsaXN0ZW5lcnMpCisJCWdvdG8gb3V0X3NvY2tfcmVsZWFzZTsKKwogCXNrID0gc29jay0+c2s7CiAJc2stPnNrX2RhdGFfcmVhZHkgPSBuZXRsaW5rX2RhdGFfcmVhZHk7CiAJaWYgKGlucHV0KQpAQCAtMTI2MSw3ICsxMzA0LDggQEAKIAlubGstPmZsYWdzIHw9IE5FVExJTktfS0VSTkVMX1NPQ0tFVDsKIAogCW5ldGxpbmtfdGFibGVfZ3JhYigpOwotCW5sX3RhYmxlW3VuaXRdLmdyb3VwcyA9IGdyb3VwcyA8IDMyID8gMzIgOiBncm91cHM7CisJbmxfdGFibGVbdW5pdF0uZ3JvdXBzID0gZ3JvdXBzOworCW5sX3RhYmxlW3VuaXRdLmxpc3RlbmVycyA9IGxpc3RlbmVyczsKIAlubF90YWJsZVt1bml0XS5tb2R1bGUgPSBtb2R1bGU7CiAJbmxfdGFibGVbdW5pdF0ucmVnaXN0ZXJlZCA9IDE7CiAJbmV0bGlua190YWJsZV91bmdyYWIoKTsKQEAgLTEyNjksNiArMTMxMyw3IEBACiAJcmV0dXJuIHNrOwogCiBvdXRfc29ja19yZWxlYXNlOgorCWtmcmVlKGxpc3RlbmVycyk7CiAJc29ja19yZWxlYXNlKHNvY2spOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL21haW4uYyBiL25ldC9yeHJwYy9tYWluLmMKaW5kZXggMzZmZGNiYy4uNDhjYmQwNiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL21haW4uYworKysgYi9uZXQvcnhycGMvbWFpbi5jCkBAIC03OSw4ICs3OSw4IEBACiAgZXJyb3Jfc3lzY3RsOgogI2lmZGVmIENPTkZJR19TWVNDVEwKIAlyeHJwY19zeXNjdGxfY2xlYW51cCgpOwotI2VuZGlmCiAgZXJyb3JfcHJvYzoKKyNlbmRpZgogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcnhycGNfcHJvY19jbGVhbnVwKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9LY29uZmlnIGIvbmV0L3NjaGVkL0tjb25maWcKaW5kZXggNzc4YjFlNS4uMTNlZWVlNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL0tjb25maWcKKysrIGIvbmV0L3NjaGVkL0tjb25maWcKQEAgLTQzNCw3ICs0MzQsNiBAQAogCiBjb25maWcgTkVUX0NMU19BQ1QKIAlib29sICJBY3Rpb25zIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IE5FVF9FU1RJTUFUT1IKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucy4gQWN0aW9ucwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggNzkyY2U1OS4uMmZmYTExYyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYworKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC03MDcsNyArNzA3LDcgQEAKIAogcnRhdHRyX2ZhaWx1cmU6CiBubG1zZ19mYWlsdXJlOgotCXNrYl90cmltKHNrYiwgYiAtIHNrYi0+ZGF0YSk7CisJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC0xOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lwdC5jIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwppbmRleCAzOWEyMmEzLi42MDU2ZDIwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lwdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKQEAgLTcwLDcgKzcwLDggQEAKIAl0LT51Lmtlcm5lbC50YXJnZXQgPSB0YXJnZXQ7CiAKIAlpZiAodC0+dS5rZXJuZWwudGFyZ2V0LT5jaGVja2VudHJ5Ci0JICAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkodGFibGUsIE5VTEwsIHQtPmRhdGEsCisJICAgICYmICF0LT51Lmtlcm5lbC50YXJnZXQtPmNoZWNrZW50cnkodGFibGUsIE5VTEwsCisJCSAgICAJCQkgICAgICAgdC0+dS5rZXJuZWwudGFyZ2V0LCB0LT5kYXRhLAogCQkJCQkgICAgICAgdC0+dS50YXJnZXRfc2l6ZSAtIHNpemVvZigqdCksCiAJCQkJCSAgICAgICBob29rKSkgewogCQlEUFJJTlRLKCJpcHRfaW5pdF90YXJnZXQ6IGNoZWNrIGZhaWxlZCBmb3IgYCVzJy5cbiIsCkBAIC04Niw3ICs4Nyw3IEBACiBpcHRfZGVzdHJveV90YXJnZXQoc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQpCiB7CiAJaWYgKHQtPnUua2VybmVsLnRhcmdldC0+ZGVzdHJveSkKLQkJdC0+dS5rZXJuZWwudGFyZ2V0LT5kZXN0cm95KHQtPmRhdGEsCisJCXQtPnUua2VybmVsLnRhcmdldC0+ZGVzdHJveSh0LT51Lmtlcm5lbC50YXJnZXQsIHQtPmRhdGEsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT51LnRhcmdldF9zaXplIC0gc2l6ZW9mKCp0KSk7CiAgICAgICAgIG1vZHVsZV9wdXQodC0+dS5rZXJuZWwudGFyZ2V0LT5tZSk7CiB9CkBAIC0yMjQsOCArMjI1LDkgQEAKIAkvKiBpcHRhYmxlcyB0YXJnZXRzIHRha2UgYSBkb3VibGUgc2tiIHBvaW50ZXIgaW4gY2FzZSB0aGUgc2tiCiAJICogbmVlZHMgdG8gYmUgcmVwbGFjZWQuIFdlIGRvbid0IG93biB0aGUgc2tiLCBzbyB0aGlzIG11c3Qgbm90CiAJICogaGFwcGVuLiBUaGUgcHNrYl9leHBhbmRfaGVhZCBhYm92ZSBzaG91bGQgbWFrZSBzdXJlIG9mIHRoaXMgKi8KLQlyZXQgPSBwLT50LT51Lmtlcm5lbC50YXJnZXQtPnRhcmdldCgmc2tiLCBza2ItPmRldiwgTlVMTCwKLQkJCQkJICAgIHAtPmhvb2ssIHAtPnQtPmRhdGEsIE5VTEwpOworCXJldCA9IHAtPnQtPnUua2VybmVsLnRhcmdldC0+dGFyZ2V0KCZza2IsIHNrYi0+ZGV2LCBOVUxMLCBwLT5ob29rLAorCQkJCQkgICAgcC0+dC0+dS5rZXJuZWwudGFyZ2V0LCBwLT50LT5kYXRhLAorCQkJCQkgICAgTlVMTCk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIE5GX0FDQ0VQVDoKIAkJcmVzdWx0ID0gVENfQUNUX09LOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKaW5kZXggMmI2NzA0Ny4uNzhlMDUyNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuYworKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCkBAIC0zNDcsOCArMzQ3LDcgQEAKIAlpZiAobi0+aHRfZG93bikKIAkJbi0+aHRfZG93bi0+cmVmY250LS07CiAjaWZkZWYgQ09ORklHX0NMU19VMzJfUEVSRgotCWlmIChuKQotCQlrZnJlZShuLT5wZik7CisJa2ZyZWUobi0+cGYpOwogI2VuZGlmCiAJa2ZyZWUobik7CiAJcmV0dXJuIDA7CkBAIC02ODAsOCArNjc5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogI2lmZGVmIENPTkZJR19DTFNfVTMyX1BFUkYKLQlpZiAobikKLQkJa2ZyZWUobi0+cGYpOworCWtmcmVlKG4tPnBmKTsKICNlbmRpZgogCWtmcmVlKG4pOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2F0bS5jIGIvbmV0L3NjaGVkL3NjaF9hdG0uYwppbmRleCA5M2ViY2U0Li5hYzdjYjYwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2F0bS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXRtLmMKQEAgLTYzOCw2ICs2MzgsNyBAQAogCSAgICBzY2gscCxmbG93LHNrYix0Y20pOwogCWlmICghZmluZF9mbG93KHAsZmxvdykpIHJldHVybiAtRUlOVkFMOwogCXRjbS0+dGNtX2hhbmRsZSA9IGZsb3ctPmNsYXNzaWQ7CisJdGNtLT50Y21faW5mbyA9IGZsb3ctPnEtPmhhbmRsZTsKIAlydGEgPSAoc3RydWN0IHJ0YXR0ciAqKSBiOwogCVJUQV9QVVQoc2tiLFRDQV9PUFRJT05TLDAsTlVMTCk7CiAJUlRBX1BVVChza2IsVENBX0FUTV9IRFIsZmxvdy0+aGRyX2xlbixmbG93LT5oZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKaW5kZXggMTNlMGU3Yi4uZjYzMjBjYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYworKysgYi9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCkBAIC00MzgsNiArNDM4LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl0Y20tPnRjbV9oYW5kbGUgPSBUQ19IX01BS0UoVENfSF9NQUooc2NoLT5oYW5kbGUpLCBjbC0xKTsKKwl0Y20tPnRjbV9pbmZvID0gcC0+cS0+aGFuZGxlOwogCiAJb3B0cyA9IFJUQV9ORVNUKHNrYiwgVENBX09QVElPTlMpOwogCVJUQV9QVVRfVTgoc2tiLFRDQV9EU01BUktfTUFTSywgcC0+bWFza1tjbC0xXSk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCmluZGV4IDk5Y2ViOTEuLjMxZWI4MzcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIHsKIAlzcGluX2xvY2tfYmgoJmRldi0+eG1pdF9sb2NrKTsKIAlpZiAoZGVsX3RpbWVyKCZkZXYtPndhdGNoZG9nX3RpbWVyKSkKLQkJX19kZXZfcHV0KGRldik7CisJCWRldl9wdXQoZGV2KTsKIAlzcGluX3VubG9ja19iaCgmZGV2LT54bWl0X2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKaW5kZXggYmE1MjgzMi4uNzIyOGQzMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwpAQCAtMjUyLDkgKzI1Miw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG5ldGVtX2Ryb3Aoc3RydWN0IFFkaXNjKiBzY2gpCiB7CiAJc3RydWN0IG5ldGVtX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0JdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAotCWlmICgobGVuID0gcS0+cWRpc2MtPm9wcy0+ZHJvcChxLT5xZGlzYykpICE9IDApIHsKKwlpZiAocS0+cWRpc2MtPm9wcy0+ZHJvcCAmJiAobGVuID0gcS0+cWRpc2MtPm9wcy0+ZHJvcChxLT5xZGlzYykpICE9IDApIHsKIAkJc2NoLT5xLnFsZW4tLTsKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3ByaW8uYyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCmluZGV4IDE2NDFkYjMuLjMzOTVjYTcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jCisrKyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAogCWZvciAocHJpbyA9IHEtPmJhbmRzLTE7IHByaW8gPj0gMDsgcHJpby0tKSB7CiAJCXFkaXNjID0gcS0+cXVldWVzW3ByaW9dOwotCQlpZiAoKGxlbiA9IHFkaXNjLT5vcHMtPmRyb3AocWRpc2MpKSAhPSAwKSB7CisJCWlmIChxZGlzYy0+b3BzLT5kcm9wICYmIChsZW4gPSBxZGlzYy0+b3BzLT5kcm9wKHFkaXNjKSkgIT0gMCkgewogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXJldHVybiBsZW47CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcmVkLmMgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCmluZGV4IGRjY2ZhNDQuLjJiZTU2M2MgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcmVkLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwpAQCAtNDQsNiArNDQsNyBAQAogCXVuc2lnbmVkIGNoYXIJCWZsYWdzOwogCXN0cnVjdCByZWRfcGFybXMJcGFybXM7CiAJc3RydWN0IHJlZF9zdGF0cwlzdGF0czsKKwlzdHJ1Y3QgUWRpc2MJCSpxZGlzYzsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJlZF91c2VfZWNuKHN0cnVjdCByZWRfc2NoZWRfZGF0YSAqcSkKQEAgLTU5LDggKzYwLDEwIEBACiBzdGF0aWMgaW50IHJlZF9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyogc2NoKQogewogCXN0cnVjdCByZWRfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgUWRpc2MgKmNoaWxkID0gcS0+cWRpc2M7CisJaW50IHJldDsKIAotCXEtPnBhcm1zLnFhdmcgPSByZWRfY2FsY19xYXZnKCZxLT5wYXJtcywgc2NoLT5xc3RhdHMuYmFja2xvZyk7CisJcS0+cGFybXMucWF2ZyA9IHJlZF9jYWxjX3FhdmcoJnEtPnBhcm1zLCBjaGlsZC0+cXN0YXRzLmJhY2tsb2cpOwogCiAJaWYgKHJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKIAkJcmVkX2VuZF9vZl9pZGxlX3BlcmlvZCgmcS0+cGFybXMpOwpAQCAtOTEsMTEgKzk0LDE2IEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoc2NoLT5xc3RhdHMuYmFja2xvZyArIHNrYi0+bGVuIDw9IHEtPmxpbWl0KQotCQlyZXR1cm4gcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKLQotCXEtPnN0YXRzLnBkcm9wKys7Ci0JcmV0dXJuIHFkaXNjX2Ryb3Aoc2tiLCBzY2gpOworCXJldCA9IGNoaWxkLT5lbnF1ZXVlKHNrYiwgY2hpbGQpOworCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CisJCXNjaC0+YnN0YXRzLmJ5dGVzICs9IHNrYi0+bGVuOworCQlzY2gtPmJzdGF0cy5wYWNrZXRzKys7CisJCXNjaC0+cS5xbGVuKys7CisJfSBlbHNlIHsKKwkJcS0+c3RhdHMucGRyb3ArKzsKKwkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKKwl9CisJcmV0dXJuIHJldDsKIAogY29uZ2VzdGlvbl9kcm9wOgogCXFkaXNjX2Ryb3Aoc2tiLCBzY2gpOwpAQCAtMTA1LDIxICsxMTMsMzAgQEAKIHN0YXRpYyBpbnQgcmVkX3JlcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjKiBzY2gpCiB7CiAJc3RydWN0IHJlZF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBRZGlzYyAqY2hpbGQgPSBxLT5xZGlzYzsKKwlpbnQgcmV0OwogCiAJaWYgKHJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKIAkJcmVkX2VuZF9vZl9pZGxlX3BlcmlvZCgmcS0+cGFybXMpOwogCi0JcmV0dXJuIHFkaXNjX3JlcXVldWUoc2tiLCBzY2gpOworCXJldCA9IGNoaWxkLT5vcHMtPnJlcXVldWUoc2tiLCBjaGlsZCk7CisJaWYgKGxpa2VseShyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykpIHsKKwkJc2NoLT5xc3RhdHMucmVxdWV1ZXMrKzsKKwkJc2NoLT5xLnFsZW4rKzsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICogcmVkX2RlcXVldWUoc3RydWN0IFFkaXNjKiBzY2gpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcmVkX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IFFkaXNjICpjaGlsZCA9IHEtPnFkaXNjOwogCi0Jc2tiID0gcWRpc2NfZGVxdWV1ZV9oZWFkKHNjaCk7Ci0KLQlpZiAoc2tiID09IE5VTEwgJiYgIXJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKKwlza2IgPSBjaGlsZC0+ZGVxdWV1ZShjaGlsZCk7CisJaWYgKHNrYikKKwkJc2NoLT5xLnFsZW4tLTsKKwllbHNlIGlmICghcmVkX2lzX2lkbGluZygmcS0+cGFybXMpKQogCQlyZWRfc3RhcnRfb2ZfaWRsZV9wZXJpb2QoJnEtPnBhcm1zKTsKIAogCXJldHVybiBza2I7CkBAIC0xMjcsMTQgKzE0NCwxNCBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHJlZF9kcm9wKHN0cnVjdCBRZGlzYyogc2NoKQogewotCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHJlZF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBRZGlzYyAqY2hpbGQgPSBxLT5xZGlzYzsKKwl1bnNpZ25lZCBpbnQgbGVuOwogCi0Jc2tiID0gcWRpc2NfZGVxdWV1ZV90YWlsKHNjaCk7Ci0JaWYgKHNrYikgewotCQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CisJaWYgKGNoaWxkLT5vcHMtPmRyb3AgJiYgKGxlbiA9IGNoaWxkLT5vcHMtPmRyb3AoY2hpbGQpKSA+IDApIHsKIAkJcS0+c3RhdHMub3RoZXIrKzsKLQkJcWRpc2NfZHJvcChza2IsIHNjaCk7CisJCXNjaC0+cXN0YXRzLmRyb3BzKys7CisJCXNjaC0+cS5xbGVuLS07CiAJCXJldHVybiBsZW47CiAJfQogCkBAIC0xNDgsMTUgKzE2NSw0OCBAQAogewogCXN0cnVjdCByZWRfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAotCXFkaXNjX3Jlc2V0X3F1ZXVlKHNjaCk7CisJcWRpc2NfcmVzZXQocS0+cWRpc2MpOworCXNjaC0+cS5xbGVuID0gMDsKIAlyZWRfcmVzdGFydCgmcS0+cGFybXMpOwogfQogCitzdGF0aWMgdm9pZCByZWRfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgcmVkX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJcWRpc2NfZGVzdHJveShxLT5xZGlzYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUWRpc2MgKnJlZF9jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgbGltaXQpCit7CisJc3RydWN0IFFkaXNjICpxID0gcWRpc2NfY3JlYXRlX2RmbHQoZGV2LCAmYmZpZm9fcWRpc2Nfb3BzKTsKKwlzdHJ1Y3QgcnRhdHRyICpydGE7CisJaW50IHJldDsKKworCWlmIChxKSB7CisJCXJ0YSA9IGttYWxsb2MoUlRBX0xFTkdUSChzaXplb2Yoc3RydWN0IHRjX2ZpZm9fcW9wdCkpLAorCQkgICAgICAgICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAocnRhKSB7CisJCQlydGEtPnJ0YV90eXBlID0gUlRNX05FV1FESVNDOworCQkJcnRhLT5ydGFfbGVuID0gUlRBX0xFTkdUSChzaXplb2Yoc3RydWN0IHRjX2ZpZm9fcW9wdCkpOworCQkJKChzdHJ1Y3QgdGNfZmlmb19xb3B0ICopUlRBX0RBVEEocnRhKSktPmxpbWl0ID0gbGltaXQ7CisKKwkJCXJldCA9IHEtPm9wcy0+Y2hhbmdlKHEsIHJ0YSk7CisJCQlrZnJlZShydGEpOworCisJCQlpZiAocmV0ID09IDApCisJCQkJcmV0dXJuIHE7CisJCX0KKwkJcWRpc2NfZGVzdHJveShxKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgcmVkX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHJ0YXR0ciAqb3B0KQogewogCXN0cnVjdCByZWRfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlzdHJ1Y3QgcnRhdHRyICp0YltUQ0FfUkVEX01BWF07CiAJc3RydWN0IHRjX3JlZF9xb3B0ICpjdGw7CisJc3RydWN0IFFkaXNjICpjaGlsZCA9IE5VTEw7CiAKIAlpZiAob3B0ID09IE5VTEwgfHwgcnRhdHRyX3BhcnNlX25lc3RlZCh0YiwgVENBX1JFRF9NQVgsIG9wdCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY5LDkgKzIxOSwxNyBAQAogCiAJY3RsID0gUlRBX0RBVEEodGJbVENBX1JFRF9QQVJNUy0xXSk7CiAKKwlpZiAoY3RsLT5saW1pdCA+IDApIHsKKwkJY2hpbGQgPSByZWRfY3JlYXRlX2RmbHQoc2NoLT5kZXYsIGN0bC0+bGltaXQpOworCQlpZiAoY2hpbGQgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwogCXNjaF90cmVlX2xvY2soc2NoKTsKIAlxLT5mbGFncyA9IGN0bC0+ZmxhZ3M7CiAJcS0+bGltaXQgPSBjdGwtPmxpbWl0OworCWlmIChjaGlsZCkKKwkJcWRpc2NfZGVzdHJveSh4Y2hnKCZxLT5xZGlzYywgY2hpbGQpKTsKIAogCXJlZF9zZXRfcGFybXMoJnEtPnBhcm1zLCBjdGwtPnF0aF9taW4sIGN0bC0+cXRoX21heCwgY3RsLT5XbG9nLAogCQkJCSBjdGwtPlBsb2csIGN0bC0+U2NlbGxfbG9nLApAQCAtMTg2LDYgKzI0NCw5IEBACiAKIHN0YXRpYyBpbnQgcmVkX2luaXQoc3RydWN0IFFkaXNjKiBzY2gsIHN0cnVjdCBydGF0dHIgKm9wdCkKIHsKKwlzdHJ1Y3QgcmVkX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CisKKwlxLT5xZGlzYyA9ICZub29wX3FkaXNjOwogCXJldHVybiByZWRfY2hhbmdlKHNjaCwgb3B0KTsKIH0KIApAQCAtMjI0LDE1ICsyODUsMTAxIEBACiAJcmV0dXJuIGduZXRfc3RhdHNfY29weV9hcHAoZCwgJnN0LCBzaXplb2Yoc3QpKTsKIH0KIAorc3RhdGljIGludCByZWRfZHVtcF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pCit7CisJc3RydWN0IHJlZF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOworCisJaWYgKGNsICE9IDEpCisJCXJldHVybiAtRU5PRU5UOworCXRjbS0+dGNtX2hhbmRsZSB8PSBUQ19IX01JTigxKTsKKwl0Y20tPnRjbV9pbmZvID0gcS0+cWRpc2MtPmhhbmRsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWRfZ3JhZnQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLCBzdHJ1Y3QgUWRpc2MgKm5ldywKKwkJICAgICBzdHJ1Y3QgUWRpc2MgKipvbGQpCit7CisJc3RydWN0IHJlZF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOworCisJaWYgKG5ldyA9PSBOVUxMKQorCQluZXcgPSAmbm9vcF9xZGlzYzsKKworCXNjaF90cmVlX2xvY2soc2NoKTsKKwkqb2xkID0geGNoZygmcS0+cWRpc2MsIG5ldyk7CisJcWRpc2NfcmVzZXQoKm9sZCk7CisJc2NoLT5xLnFsZW4gPSAwOworCXNjaF90cmVlX3VubG9jayhzY2gpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IFFkaXNjICpyZWRfbGVhZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHJlZF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOworCXJldHVybiBxLT5xZGlzYzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVkX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlZF9wdXQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybjsKK30KKworc3RhdGljIGludCByZWRfY2hhbmdlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudGlkLAorCQkJICAgIHN0cnVjdCBydGF0dHIgKip0Y2EsIHVuc2lnbmVkIGxvbmcgKmFyZykKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGludCByZWRfZGVsZXRlKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgdm9pZCByZWRfd2FsayhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHFkaXNjX3dhbGtlciAqd2Fsa2VyKQoreworCWlmICghd2Fsa2VyLT5zdG9wKSB7CisJCWlmICh3YWxrZXItPmNvdW50ID49IHdhbGtlci0+c2tpcCkKKwkJCWlmICh3YWxrZXItPmZuKHNjaCwgMSwgd2Fsa2VyKSA8IDApIHsKKwkJCQl3YWxrZXItPnN0b3AgPSAxOworCQkJCXJldHVybjsKKwkJCX0KKwkJd2Fsa2VyLT5jb3VudCsrOworCX0KK30KKworc3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG8gKipyZWRfZmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHJlZF9jbGFzc19vcHMgPSB7CisJLmdyYWZ0CQk9CXJlZF9ncmFmdCwKKwkubGVhZgkJPQlyZWRfbGVhZiwKKwkuZ2V0CQk9CXJlZF9nZXQsCisJLnB1dAkJPQlyZWRfcHV0LAorCS5jaGFuZ2UJCT0JcmVkX2NoYW5nZV9jbGFzcywKKwkuZGVsZXRlCQk9CXJlZF9kZWxldGUsCisJLndhbGsJCT0JcmVkX3dhbGssCisJLnRjZl9jaGFpbgk9CXJlZF9maW5kX3RjZiwKKwkuZHVtcAkJPQlyZWRfZHVtcF9jbGFzcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHJlZF9xZGlzY19vcHMgPSB7CiAJLmlkCQk9CSJyZWQiLAogCS5wcml2X3NpemUJPQlzaXplb2Yoc3RydWN0IHJlZF9zY2hlZF9kYXRhKSwKKwkuY2xfb3BzCQk9CSZyZWRfY2xhc3Nfb3BzLAogCS5lbnF1ZXVlCT0JcmVkX2VucXVldWUsCiAJLmRlcXVldWUJPQlyZWRfZGVxdWV1ZSwKIAkucmVxdWV1ZQk9CXJlZF9yZXF1ZXVlLAogCS5kcm9wCQk9CXJlZF9kcm9wLAogCS5pbml0CQk9CXJlZF9pbml0LAogCS5yZXNldAkJPQlyZWRfcmVzZXQsCisJLmRlc3Ryb3kJPQlyZWRfZGVzdHJveSwKIAkuY2hhbmdlCQk9CXJlZF9jaGFuZ2UsCiAJLmR1bXAJCT0JcmVkX2R1bXAsCiAJLmR1bXBfc3RhdHMJPQlyZWRfZHVtcF9zdGF0cywKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IDg2ZDhkYTAuLmUwNTc3NjggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtMjMyLDYgKzIzMiw3IEBACiAJCXNmcV9kZWMocSwgeCk7CiAJCXNjaC0+cS5xbGVuLS07CiAJCXNjaC0+cXN0YXRzLmRyb3BzKys7CisJCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gbGVuOwogCQlyZXR1cm4gbGVuOwogCX0KIApAQCAtMjQ4LDYgKzI0OSw3IEBACiAJCXNjaC0+cS5xbGVuLS07CiAJCXEtPmh0W3EtPmhhc2hbZF1dID0gU0ZRX0RFUFRIOwogCQlzY2gtPnFzdGF0cy5kcm9wcysrOworCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IGxlbjsKIAkJcmV0dXJuIGxlbjsKIAl9CiAKQEAgLTI2Niw2ICsyNjgsNyBAQAogCQlxLT5odFtoYXNoXSA9IHggPSBxLT5kZXBbU0ZRX0RFUFRIXS5uZXh0OwogCQlxLT5oYXNoW3hdID0gaGFzaDsKIAl9CisJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBza2ItPmxlbjsKIAlfX3NrYl9xdWV1ZV90YWlsKCZxLT5xc1t4XSwgc2tiKTsKIAlzZnFfaW5jKHEsIHgpOwogCWlmIChxLT5xc1t4XS5xbGVuID09IDEpIHsJCS8qIFRoZSBmbG93IGlzIG5ldyAqLwpAQCAtMzAxLDYgKzMwNCw3IEBACiAJCXEtPmh0W2hhc2hdID0geCA9IHEtPmRlcFtTRlFfREVQVEhdLm5leHQ7CiAJCXEtPmhhc2hbeF0gPSBoYXNoOwogCX0KKwlzY2gtPnFzdGF0cy5iYWNrbG9nICs9IHNrYi0+bGVuOwogCV9fc2tiX3F1ZXVlX2hlYWQoJnEtPnFzW3hdLCBza2IpOwogCXNmcV9pbmMocSwgeCk7CiAJaWYgKHEtPnFzW3hdLnFsZW4gPT0gMSkgewkJLyogVGhlIGZsb3cgaXMgbmV3ICovCkBAIC0zNDQsNiArMzQ4LDcgQEAKIAlza2IgPSBfX3NrYl9kZXF1ZXVlKCZxLT5xc1thXSk7CiAJc2ZxX2RlYyhxLCBhKTsKIAlzY2gtPnEucWxlbi0tOworCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gc2tiLT5sZW47CiAKIAkvKiBJcyB0aGUgc2xvdCBlbXB0eT8gKi8KIAlpZiAocS0+cXNbYV0ucWxlbiA9PSAwKSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RiZi5jIGIvbmV0L3NjaGVkL3NjaF90YmYuYwppbmRleCBjYjk3MTFlLi5kOGUwM2M3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RiZi5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKQEAgLTE3Nyw5ICsxNzcsOSBAQAogc3RhdGljIHVuc2lnbmVkIGludCB0YmZfZHJvcChzdHJ1Y3QgUWRpc2MqIHNjaCkKIHsKIAlzdHJ1Y3QgdGJmX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0JdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAotCWlmICgobGVuID0gcS0+cWRpc2MtPm9wcy0+ZHJvcChxLT5xZGlzYykpICE9IDApIHsKKwlpZiAocS0+cWRpc2MtPm9wcy0+ZHJvcCAmJiAobGVuID0gcS0+cWRpc2MtPm9wcy0+ZHJvcChxLT5xZGlzYykpICE9IDApIHsKIAkJc2NoLT5xLnFsZW4tLTsKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAl9CkBAIC0zNDEsMTMgKzM0MSwxNCBAQAogCWlmIChtYXhfc2l6ZSA8IDApCiAJCWdvdG8gZG9uZTsKIAotCWlmIChxLT5xZGlzYyA9PSAmbm9vcF9xZGlzYykgeworCWlmIChxb3B0LT5saW1pdCA+IDApIHsKIAkJaWYgKChjaGlsZCA9IHRiZl9jcmVhdGVfZGZsdF9xZGlzYyhzY2gtPmRldiwgcW9wdC0+bGltaXQpKSA9PSBOVUxMKQogCQkJZ290byBkb25lOwogCX0KIAogCXNjaF90cmVlX2xvY2soc2NoKTsKLQlpZiAoY2hpbGQpIHEtPnFkaXNjID0gY2hpbGQ7CisJaWYgKGNoaWxkKQorCQlxZGlzY19kZXN0cm95KHhjaGcoJnEtPnFkaXNjLCBjaGlsZCkpOwogCXEtPmxpbWl0ID0gcW9wdC0+bGltaXQ7CiAJcS0+bXR1ID0gcW9wdC0+bXR1OwogCXEtPm1heF9zaXplID0gbWF4X3NpemU7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnB1dC5jIGIvbmV0L3NjdHAvaW5wdXQuYwppbmRleCBjYjc4YjUwLi5kMTE3ZWJjIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnB1dC5jCisrKyBiL25ldC9zY3RwL2lucHV0LmMKQEAgLTEyNyw3ICsxMjcsNiBAQAogCXVuaW9uIHNjdHBfYWRkciBkZXN0OwogCWludCBmYW1pbHk7CiAJc3RydWN0IHNjdHBfYWYgKmFmOwotCWludCByZXQgPSAwOwogCiAJaWYgKHNrYi0+cGt0X3R5cGUhPVBBQ0tFVF9IT1NUKQogCQlnb3RvIGRpc2NhcmRfaXQ7CkBAIC0yMjcsMTYgKzIyNiwxMyBAQAogCQlnb3RvIGRpc2NhcmRfcmVsZWFzZTsKIAluZl9yZXNldChza2IpOwogCi0JcmV0ID0gc2tfZmlsdGVyKHNrLCBza2IsIDEpOwotCWlmIChyZXQpCisJaWYgKHNrX2ZpbHRlcihzaywgc2tiLCAxKSkKICAgICAgICAgICAgICAgICBnb3RvIGRpc2NhcmRfcmVsZWFzZTsKIAogCS8qIENyZWF0ZSBhbiBTQ1RQIHBhY2tldCBzdHJ1Y3R1cmUuICovCiAJY2h1bmsgPSBzY3RwX2NodW5raWZ5KHNrYiwgYXNvYywgc2spOwotCWlmICghY2h1bmspIHsKLQkJcmV0ID0gLUVOT01FTTsKKwlpZiAoIWNodW5rKQogCQlnb3RvIGRpc2NhcmRfcmVsZWFzZTsKLQl9CiAJU0NUUF9JTlBVVF9DQihza2IpLT5jaHVuayA9IGNodW5rOwogCiAJLyogUmVtZW1iZXIgd2hhdCBlbmRwb2ludCBpcyB0byBoYW5kbGUgdGhpcyBwYWNrZXQuICovCkBAIC0yNzcsMTEgKzI3MywxMSBAQAogCXNjdHBfYmhfdW5sb2NrX3NvY2soc2spOwogCXNvY2tfcHV0KHNrKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiAKIGRpc2NhcmRfaXQ6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogZGlzY2FyZF9yZWxlYXNlOgogCS8qIFJlbGVhc2UgYW55IHN0cnVjdHVyZXMgd2UgbWF5IGJlIGhvbGRpbmcuICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggMmUyNjYxMi4uYzIwZDI4MiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtODYxLDIzICs4NjEsMjcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldDZfc2VxcGFja2V0X29wcyA9IHsKLQkuZmFtaWx5ICAgICA9IFBGX0lORVQ2LAotCS5vd25lciAgICAgID0gVEhJU19NT0RVTEUsCi0JLnJlbGVhc2UgICAgPSBpbmV0Nl9yZWxlYXNlLAotCS5iaW5kICAgICAgID0gaW5ldDZfYmluZCwKLQkuY29ubmVjdCAgICA9IGluZXRfZGdyYW1fY29ubmVjdCwKLQkuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpciwKLQkuYWNjZXB0ICAgICA9IGluZXRfYWNjZXB0LAotCS5nZXRuYW1lICAgID0gaW5ldDZfZ2V0bmFtZSwKLQkucG9sbCAgICAgICA9IHNjdHBfcG9sbCwKLQkuaW9jdGwgICAgICA9IGluZXQ2X2lvY3RsLAotCS5saXN0ZW4gICAgID0gc2N0cF9pbmV0X2xpc3RlbiwKLQkuc2h1dGRvd24gICA9IGluZXRfc2h1dGRvd24sCi0JLnNldHNvY2tvcHQgPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAotCS5nZXRzb2Nrb3B0ID0gc29ja19jb21tb25fZ2V0c29ja29wdCwKLQkuc2VuZG1zZyAgICA9IGluZXRfc2VuZG1zZywKLQkucmVjdm1zZyAgICA9IHNvY2tfY29tbW9uX3JlY3Ztc2csCi0JLm1tYXAgICAgICAgPSBzb2NrX25vX21tYXAsCisJLmZhbWlseQkJICAgPSBQRl9JTkVUNiwKKwkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCisJLnJlbGVhc2UJICAgPSBpbmV0Nl9yZWxlYXNlLAorCS5iaW5kCQkgICA9IGluZXQ2X2JpbmQsCisJLmNvbm5lY3QJICAgPSBpbmV0X2RncmFtX2Nvbm5lY3QsCisJLnNvY2tldHBhaXIJICAgPSBzb2NrX25vX3NvY2tldHBhaXIsCisJLmFjY2VwdAkJICAgPSBpbmV0X2FjY2VwdCwKKwkuZ2V0bmFtZQkgICA9IGluZXQ2X2dldG5hbWUsCisJLnBvbGwJCSAgID0gc2N0cF9wb2xsLAorCS5pb2N0bAkJICAgPSBpbmV0Nl9pb2N0bCwKKwkubGlzdGVuCQkgICA9IHNjdHBfaW5ldF9saXN0ZW4sCisJLnNodXRkb3duCSAgID0gaW5ldF9zaHV0ZG93biwKKwkuc2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5zZW5kbXNnCSAgID0gaW5ldF9zZW5kbXNnLAorCS5yZWN2bXNnCSAgID0gc29ja19jb21tb25fcmVjdm1zZywKKwkubW1hcAkJICAgPSBzb2NrX25vX21tYXAsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGluZXRfcHJvdG9zdyBzY3RwdjZfc2VxcGFja2V0X3Byb3Rvc3cgPSB7CkBAIC05MTEsMzEgKzkxNSwzNSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfaXB2Nl9zcGVjaWZpYyA9IHsKLQkuc2N0cF94bWl0ICAgICAgID0gc2N0cF92Nl94bWl0LAotCS5zZXRzb2Nrb3B0ICAgICAgPSBpcHY2X3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQgICAgICA9IGlwdjZfZ2V0c29ja29wdCwKLQkuZ2V0X2RzdAkgPSBzY3RwX3Y2X2dldF9kc3QsCi0JLmdldF9zYWRkcgkgPSBzY3RwX3Y2X2dldF9zYWRkciwKLQkuY29weV9hZGRybGlzdCAgID0gc2N0cF92Nl9jb3B5X2FkZHJsaXN0LAotCS5mcm9tX3NrYiAgICAgICAgPSBzY3RwX3Y2X2Zyb21fc2tiLAotCS5mcm9tX3NrICAgICAgICAgPSBzY3RwX3Y2X2Zyb21fc2ssCi0JLnRvX3NrX3NhZGRyICAgICA9IHNjdHBfdjZfdG9fc2tfc2FkZHIsCi0JLnRvX3NrX2RhZGRyICAgICA9IHNjdHBfdjZfdG9fc2tfZGFkZHIsCi0JLmZyb21fYWRkcl9wYXJhbSA9IHNjdHBfdjZfZnJvbV9hZGRyX3BhcmFtLAotCS50b19hZGRyX3BhcmFtICAgPSBzY3RwX3Y2X3RvX2FkZHJfcGFyYW0sCi0JLmRzdF9zYWRkciAgICAgICA9IHNjdHBfdjZfZHN0X3NhZGRyLAotCS5jbXBfYWRkciAgICAgICAgPSBzY3RwX3Y2X2NtcF9hZGRyLAotCS5zY29wZSAgICAgICAgICAgPSBzY3RwX3Y2X3Njb3BlLAotCS5hZGRyX3ZhbGlkICAgICAgPSBzY3RwX3Y2X2FkZHJfdmFsaWQsCi0JLmluYWRkcl9hbnkgICAgICA9IHNjdHBfdjZfaW5hZGRyX2FueSwKLQkuaXNfYW55ICAgICAgICAgID0gc2N0cF92Nl9pc19hbnksCi0JLmF2YWlsYWJsZSAgICAgICA9IHNjdHBfdjZfYXZhaWxhYmxlLAotCS5za2JfaWlmICAgICAgICAgPSBzY3RwX3Y2X3NrYl9paWYsCi0JLmlzX2NlICAgICAgICAgICA9IHNjdHBfdjZfaXNfY2UsCi0JLnNlcV9kdW1wX2FkZHIgICA9IHNjdHBfdjZfc2VxX2R1bXBfYWRkciwKLQkubmV0X2hlYWRlcl9sZW4gID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwKLQkuc29ja2FkZHJfbGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAotCS5zYV9mYW1pbHkgICAgICAgPSBBRl9JTkVUNiwKKwkuc2FfZmFtaWx5CSAgID0gQUZfSU5FVDYsCisJLnNjdHBfeG1pdAkgICA9IHNjdHBfdjZfeG1pdCwKKwkuc2V0c29ja29wdAkgICA9IGlwdjZfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IGlwdjZfZ2V0c29ja29wdCwKKwkuZ2V0X2RzdAkgICA9IHNjdHBfdjZfZ2V0X2RzdCwKKwkuZ2V0X3NhZGRyCSAgID0gc2N0cF92Nl9nZXRfc2FkZHIsCisJLmNvcHlfYWRkcmxpc3QJICAgPSBzY3RwX3Y2X2NvcHlfYWRkcmxpc3QsCisJLmZyb21fc2tiCSAgID0gc2N0cF92Nl9mcm9tX3NrYiwKKwkuZnJvbV9zawkgICA9IHNjdHBfdjZfZnJvbV9zaywKKwkudG9fc2tfc2FkZHIJICAgPSBzY3RwX3Y2X3RvX3NrX3NhZGRyLAorCS50b19za19kYWRkcgkgICA9IHNjdHBfdjZfdG9fc2tfZGFkZHIsCisJLmZyb21fYWRkcl9wYXJhbSAgID0gc2N0cF92Nl9mcm9tX2FkZHJfcGFyYW0sCisJLnRvX2FkZHJfcGFyYW0JICAgPSBzY3RwX3Y2X3RvX2FkZHJfcGFyYW0sCisJLmRzdF9zYWRkcgkgICA9IHNjdHBfdjZfZHN0X3NhZGRyLAorCS5jbXBfYWRkcgkgICA9IHNjdHBfdjZfY21wX2FkZHIsCisJLnNjb3BlCQkgICA9IHNjdHBfdjZfc2NvcGUsCisJLmFkZHJfdmFsaWQJICAgPSBzY3RwX3Y2X2FkZHJfdmFsaWQsCisJLmluYWRkcl9hbnkJICAgPSBzY3RwX3Y2X2luYWRkcl9hbnksCisJLmlzX2FueQkJICAgPSBzY3RwX3Y2X2lzX2FueSwKKwkuYXZhaWxhYmxlCSAgID0gc2N0cF92Nl9hdmFpbGFibGUsCisJLnNrYl9paWYJICAgPSBzY3RwX3Y2X3NrYl9paWYsCisJLmlzX2NlCQkgICA9IHNjdHBfdjZfaXNfY2UsCisJLnNlcV9kdW1wX2FkZHIJICAgPSBzY3RwX3Y2X3NlcV9kdW1wX2FkZHIsCisJLm5ldF9oZWFkZXJfbGVuCSAgID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwKKwkuc29ja2FkZHJfbGVuCSAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfaXB2Nl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9pcHY2X2dldHNvY2tvcHQsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9wZiBzY3RwX3BmX2luZXQ2X3NwZWNpZmljID0gewpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggZGU2OTNiNC4uMjA4OGFhOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC04MzEsMjQgKzgzMSwyOCBAQAogCiAvKiBTb2NrZXQgb3BlcmF0aW9ucy4gICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3NlcXBhY2tldF9vcHMgPSB7Ci0JLmZhbWlseSAgICAgID0gUEZfSU5FVCwKLQkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKLQkucmVsZWFzZSAgICAgPSBpbmV0X3JlbGVhc2UsICAgICAgIC8qIE5lZWRzIHRvIGJlIHdyYXBwZWQuLi4gKi8KLQkuYmluZCAgICAgICAgPSBpbmV0X2JpbmQsCi0JLmNvbm5lY3QgICAgID0gaW5ldF9kZ3JhbV9jb25uZWN0LAotCS5zb2NrZXRwYWlyICA9IHNvY2tfbm9fc29ja2V0cGFpciwKLQkuYWNjZXB0ICAgICAgPSBpbmV0X2FjY2VwdCwKLQkuZ2V0bmFtZSAgICAgPSBpbmV0X2dldG5hbWUsICAgICAgLyogU2VtYW50aWNzIGFyZSBkaWZmZXJlbnQuICAqLwotCS5wb2xsICAgICAgICA9IHNjdHBfcG9sbCwKLQkuaW9jdGwgICAgICAgPSBpbmV0X2lvY3RsLAotCS5saXN0ZW4gICAgICA9IHNjdHBfaW5ldF9saXN0ZW4sCi0JLnNodXRkb3duICAgID0gaW5ldF9zaHV0ZG93biwgICAgIC8qIExvb2tzIGhhcm1sZXNzLiAgKi8KLQkuc2V0c29ja29wdCAgPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LCAgIC8qIElQX1NPTCBJUF9PUFRJT04gaXMgYSBwcm9ibGVtLiAqLwotCS5nZXRzb2Nrb3B0ICA9IHNvY2tfY29tbW9uX2dldHNvY2tvcHQsCi0JLnNlbmRtc2cgICAgID0gaW5ldF9zZW5kbXNnLAotCS5yZWN2bXNnICAgICA9IHNvY2tfY29tbW9uX3JlY3Ztc2csCi0JLm1tYXAgICAgICAgID0gc29ja19ub19tbWFwLAotCS5zZW5kcGFnZSAgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCisJLmZhbWlseQkJICAgPSBQRl9JTkVULAorCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKKwkucmVsZWFzZQkgICA9IGluZXRfcmVsZWFzZSwJLyogTmVlZHMgdG8gYmUgd3JhcHBlZC4uLiAqLworCS5iaW5kCQkgICA9IGluZXRfYmluZCwKKwkuY29ubmVjdAkgICA9IGluZXRfZGdyYW1fY29ubmVjdCwKKwkuc29ja2V0cGFpcgkgICA9IHNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0CQkgICA9IGluZXRfYWNjZXB0LAorCS5nZXRuYW1lCSAgID0gaW5ldF9nZXRuYW1lLAkvKiBTZW1hbnRpY3MgYXJlIGRpZmZlcmVudC4gICovCisJLnBvbGwJCSAgID0gc2N0cF9wb2xsLAorCS5pb2N0bAkJICAgPSBpbmV0X2lvY3RsLAorCS5saXN0ZW4JCSAgID0gc2N0cF9pbmV0X2xpc3RlbiwKKwkuc2h1dGRvd24JICAgPSBpbmV0X3NodXRkb3duLAkvKiBMb29rcyBoYXJtbGVzcy4gICovCisJLnNldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LCAvKiBJUF9TT0wgSVBfT1BUSU9OIGlzIGEgcHJvYmxlbSAqLworCS5nZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fZ2V0c29ja29wdCwKKwkuc2VuZG1zZwkgICA9IGluZXRfc2VuZG1zZywKKwkucmVjdm1zZwkgICA9IHNvY2tfY29tbW9uX3JlY3Ztc2csCisJLm1tYXAJCSAgID0gc29ja19ub19tbWFwLAorCS5zZW5kcGFnZQkgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorI2VuZGlmCiB9OwogCiAvKiBSZWdpc3RyYXRpb24gd2l0aCBBRl9JTkVUIGZhbWlseS4gICovCkBAIC04ODAsMzEgKzg4NCwzNSBAQAogCiAvKiBJUHY0IGFkZHJlc3MgcmVsYXRlZCBmdW5jdGlvbnMuICAqLwogc3RhdGljIHN0cnVjdCBzY3RwX2FmIHNjdHBfaXB2NF9zcGVjaWZpYyA9IHsKLQkuc2N0cF94bWl0ICAgICAgPSBzY3RwX3Y0X3htaXQsCi0JLnNldHNvY2tvcHQgICAgID0gaXBfc2V0c29ja29wdCwKLQkuZ2V0c29ja29wdCAgICAgPSBpcF9nZXRzb2Nrb3B0LAotCS5nZXRfZHN0CT0gc2N0cF92NF9nZXRfZHN0LAotCS5nZXRfc2FkZHIJPSBzY3RwX3Y0X2dldF9zYWRkciwKLQkuY29weV9hZGRybGlzdCAgPSBzY3RwX3Y0X2NvcHlfYWRkcmxpc3QsCi0JLmZyb21fc2tiICAgICAgID0gc2N0cF92NF9mcm9tX3NrYiwKLQkuZnJvbV9zayAgICAgICAgPSBzY3RwX3Y0X2Zyb21fc2ssCi0JLnRvX3NrX3NhZGRyICAgID0gc2N0cF92NF90b19za19zYWRkciwKLQkudG9fc2tfZGFkZHIgICAgPSBzY3RwX3Y0X3RvX3NrX2RhZGRyLAotCS5mcm9tX2FkZHJfcGFyYW09IHNjdHBfdjRfZnJvbV9hZGRyX3BhcmFtLAotCS50b19hZGRyX3BhcmFtICA9IHNjdHBfdjRfdG9fYWRkcl9wYXJhbSwJCi0JLmRzdF9zYWRkciAgICAgID0gc2N0cF92NF9kc3Rfc2FkZHIsCi0JLmNtcF9hZGRyICAgICAgID0gc2N0cF92NF9jbXBfYWRkciwKLQkuYWRkcl92YWxpZCAgICAgPSBzY3RwX3Y0X2FkZHJfdmFsaWQsCi0JLmluYWRkcl9hbnkgICAgID0gc2N0cF92NF9pbmFkZHJfYW55LAotCS5pc19hbnkgICAgICAgICA9IHNjdHBfdjRfaXNfYW55LAotCS5hdmFpbGFibGUgICAgICA9IHNjdHBfdjRfYXZhaWxhYmxlLAotCS5zY29wZSAgICAgICAgICA9IHNjdHBfdjRfc2NvcGUsCi0JLnNrYl9paWYgICAgICAgID0gc2N0cF92NF9za2JfaWlmLAotCS5pc19jZSAgICAgICAgICA9IHNjdHBfdjRfaXNfY2UsCi0JLnNlcV9kdW1wX2FkZHIgID0gc2N0cF92NF9zZXFfZHVtcF9hZGRyLAotCS5uZXRfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpLAotCS5zb2NrYWRkcl9sZW4gICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAotCS5zYV9mYW1pbHkgICAgICA9IEFGX0lORVQsCisJLnNhX2ZhbWlseQkgICA9IEFGX0lORVQsCisJLnNjdHBfeG1pdAkgICA9IHNjdHBfdjRfeG1pdCwKKwkuc2V0c29ja29wdAkgICA9IGlwX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQJICAgPSBpcF9nZXRzb2Nrb3B0LAorCS5nZXRfZHN0CSAgID0gc2N0cF92NF9nZXRfZHN0LAorCS5nZXRfc2FkZHIJICAgPSBzY3RwX3Y0X2dldF9zYWRkciwKKwkuY29weV9hZGRybGlzdAkgICA9IHNjdHBfdjRfY29weV9hZGRybGlzdCwKKwkuZnJvbV9za2IJICAgPSBzY3RwX3Y0X2Zyb21fc2tiLAorCS5mcm9tX3NrCSAgID0gc2N0cF92NF9mcm9tX3NrLAorCS50b19za19zYWRkcgkgICA9IHNjdHBfdjRfdG9fc2tfc2FkZHIsCisJLnRvX3NrX2RhZGRyCSAgID0gc2N0cF92NF90b19za19kYWRkciwKKwkuZnJvbV9hZGRyX3BhcmFtICAgPSBzY3RwX3Y0X2Zyb21fYWRkcl9wYXJhbSwKKwkudG9fYWRkcl9wYXJhbQkgICA9IHNjdHBfdjRfdG9fYWRkcl9wYXJhbSwKKwkuZHN0X3NhZGRyCSAgID0gc2N0cF92NF9kc3Rfc2FkZHIsCisJLmNtcF9hZGRyCSAgID0gc2N0cF92NF9jbXBfYWRkciwKKwkuYWRkcl92YWxpZAkgICA9IHNjdHBfdjRfYWRkcl92YWxpZCwKKwkuaW5hZGRyX2FueQkgICA9IHNjdHBfdjRfaW5hZGRyX2FueSwKKwkuaXNfYW55CQkgICA9IHNjdHBfdjRfaXNfYW55LAorCS5hdmFpbGFibGUJICAgPSBzY3RwX3Y0X2F2YWlsYWJsZSwKKwkuc2NvcGUJCSAgID0gc2N0cF92NF9zY29wZSwKKwkuc2tiX2lpZgkgICA9IHNjdHBfdjRfc2tiX2lpZiwKKwkuaXNfY2UJCSAgID0gc2N0cF92NF9pc19jZSwKKwkuc2VxX2R1bXBfYWRkcgkgICA9IHNjdHBfdjRfc2VxX2R1bXBfYWRkciwKKwkubmV0X2hlYWRlcl9sZW4JICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSwKKwkuc29ja2FkZHJfbGVuCSAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9pcF9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9pcF9nZXRzb2Nrb3B0LAorI2VuZGlmCiB9OwogCiBzdHJ1Y3Qgc2N0cF9wZiAqc2N0cF9nZXRfcGZfc3BlY2lmaWMoc2FfZmFtaWx5X3QgZmFtaWx5KSB7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IDBlYTk0N2UuLmI2ZTRiODkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC00ODk0LDYgKzQ4OTQsOCBAQAogCS8qIElzIHRoZXJlIGFueSBleGNlcHRpb25hbCBldmVudHM/ICAqLwogCWlmIChzay0+c2tfZXJyIHx8ICFza2JfcXVldWVfZW1wdHkoJnNrLT5za19lcnJvcl9xdWV1ZSkpCiAJCW1hc2sgfD0gUE9MTEVSUjsKKwlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKQorCQltYXNrIHw9IFBPTExSREhVUDsKIAlpZiAoc2stPnNrX3NodXRkb3duID09IFNIVVRET1dOX01BU0spCiAJCW1hc2sgfD0gUE9MTEhVUDsKIApkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IGEwMDg1MWYuLjUyMTFiYTIgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2JyaWRnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2ZyYWQuaD4KQEAgLTg0LDEwICs4NSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+Ci0KLSNpZmRlZiBDT05GSUdfTkVUX1JBRElPCi0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4JCS8qIE5vdGUgOiB3aWxsIGRlZmluZSBXSVJFTEVTU19FWFQgKi8KLSNlbmRpZgkvKiBDT05GSUdfTkVUX1JBRElPICovCisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpAQCAtMTA5LDYgKzEwNywxMCBAQAogCQkJICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKIHN0YXRpYyBsb25nIHNvY2tfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZyBjb21wYXRfc29ja19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworI2VuZGlmCiBzdGF0aWMgaW50IHNvY2tfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbik7CiBzdGF0aWMgc3NpemVfdCBzb2NrX3JlYWR2KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKnZlY3RvciwKIAkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90ICpwcG9zKTsKQEAgLTEzMCw2ICsxMzIsOSBAQAogCS5haW9fd3JpdGUgPQlzb2NrX2Fpb193cml0ZSwKIAkucG9sbCA9CQlzb2NrX3BvbGwsCiAJLnVubG9ja2VkX2lvY3RsID0gc29ja19pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9zb2NrX2lvY3RsLAorI2VuZGlmCiAJLm1tYXAgPQkJc29ja19tbWFwLAogCS5vcGVuID0JCXNvY2tfbm9fb3BlbiwJLyogc3BlY2lhbCBvcGVuIGNvZGUgdG8gZGlzYWxsb3cgb3BlbiB2aWEgL3Byb2MgKi8KIAkucmVsZWFzZSA9CXNvY2tfY2xvc2UsCkBAIC0zMTQsNyArMzE5LDggQEAKIHsKIAlzb2NrX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJzb2NrX2lub2RlX2NhY2hlIiwKIAkJCQlzaXplb2Yoc3RydWN0IHNvY2tldF9hbGxvYyksCi0JCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOfFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCTAsIChTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCVNMQUJfTUVNX1NQUkVBRCksCiAJCQkJaW5pdF9vbmNlLCBOVUxMKTsKIAlpZiAoc29ja19pbm9kZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNTEsOCArMzU3LDggQEAKIC8qCiAgKglPYnRhaW5zIHRoZSBmaXJzdCBhdmFpbGFibGUgZmlsZSBkZXNjcmlwdG9yIGFuZCBzZXRzIGl0IHVwIGZvciB1c2UuCiAgKgotICoJVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGZpbGUgc3RydWN0dXJlIGFuZCBtYXBzIGl0IHRvIGZkIHNwYWNlCi0gKglvZiBjdXJyZW50IHByb2Nlc3MuIE9uIHN1Y2Nlc3MgaXQgcmV0dXJucyBmaWxlIGRlc2NyaXB0b3IKKyAqCVRoZXNlIGZ1bmN0aW9ucyBjcmVhdGUgZmlsZSBzdHJ1Y3R1cmVzIGFuZCBtYXBzIHRoZW0gdG8gZmQgc3BhY2UKKyAqCW9mIHRoZSBjdXJyZW50IHByb2Nlc3MuIE9uIHN1Y2Nlc3MgaXQgcmV0dXJucyBmaWxlIGRlc2NyaXB0b3IKICAqCWFuZCBmaWxlIHN0cnVjdCBpbXBsaWNpdGx5IHN0b3JlZCBpbiBzb2NrLT5maWxlLgogICoJTm90ZSB0aGF0IGFub3RoZXIgdGhyZWFkIG1heSBjbG9zZSBmaWxlIGRlc2NyaXB0b3IgYmVmb3JlIHdlIHJldHVybgogICoJZnJvbSB0aGlzIGZ1bmN0aW9uLiBXZSB1c2UgdGhlIGZhY3QgdGhhdCBub3cgd2UgZG8gbm90IHJlZmVyCkBAIC0zNjUsNTMgKzM3MSw5MCBAQAogICoJYnV0IHdlIHRha2UgY2FyZSBvZiBpbnRlcm5hbCBjb2hlcmVuY2UgeWV0LgogICovCiAKLWludCBzb2NrX21hcF9mZChzdHJ1Y3Qgc29ja2V0ICpzb2NrKQorc3RhdGljIGludCBzb2NrX2FsbG9jX2ZkKHN0cnVjdCBmaWxlICoqZmlsZXApCiB7CiAJaW50IGZkOworCisJZmQgPSBnZXRfdW51c2VkX2ZkKCk7CisJaWYgKGxpa2VseShmZCA+PSAwKSkgeworCQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGdldF9lbXB0eV9maWxwKCk7CisKKwkJKmZpbGVwID0gZmlsZTsKKwkJaWYgKHVubGlrZWx5KCFmaWxlKSkgeworCQkJcHV0X3VudXNlZF9mZChmZCk7CisJCQlyZXR1cm4gLUVORklMRTsKKwkJfQorCX0gZWxzZQorCQkqZmlsZXAgPSBOVUxMOworCXJldHVybiBmZDsKK30KKworc3RhdGljIGludCBzb2NrX2F0dGFjaF9mZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlzdHJ1Y3QgcXN0ciB0aGlzOwogCWNoYXIgbmFtZVszMl07CiAKLQkvKgotCSAqCUZpbmQgYSBmaWxlIGRlc2NyaXB0b3Igc3VpdGFibGUgZm9yIHJldHVybiB0byB0aGUgdXNlci4gCi0JICovCisJdGhpcy5sZW4gPSBzcHJpbnRmKG5hbWUsICJbJWx1XSIsIFNPQ0tfSU5PREUoc29jayktPmlfaW5vKTsKKwl0aGlzLm5hbWUgPSBuYW1lOworCXRoaXMuaGFzaCA9IFNPQ0tfSU5PREUoc29jayktPmlfaW5vOwogCi0JZmQgPSBnZXRfdW51c2VkX2ZkKCk7Ci0JaWYgKGZkID49IDApIHsKLQkJc3RydWN0IGZpbGUgKmZpbGUgPSBnZXRfZW1wdHlfZmlscCgpOworCWZpbGUtPmZfZGVudHJ5ID0gZF9hbGxvYyhzb2NrX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKKwlpZiAodW5saWtlbHkoIWZpbGUtPmZfZGVudHJ5KSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQkJaWYgKCFmaWxlKSB7CisJZmlsZS0+Zl9kZW50cnktPmRfb3AgPSAmc29ja2ZzX2RlbnRyeV9vcGVyYXRpb25zOworCWRfYWRkKGZpbGUtPmZfZGVudHJ5LCBTT0NLX0lOT0RFKHNvY2spKTsKKwlmaWxlLT5mX3Zmc21udCA9IG1udGdldChzb2NrX21udCk7CisJZmlsZS0+Zl9tYXBwaW5nID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKKworCXNvY2stPmZpbGUgPSBmaWxlOworCWZpbGUtPmZfb3AgPSBTT0NLX0lOT0RFKHNvY2spLT5pX2ZvcCA9ICZzb2NrZXRfZmlsZV9vcHM7CisJZmlsZS0+Zl9tb2RlID0gRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFOworCWZpbGUtPmZfZmxhZ3MgPSBPX1JEV1I7CisJZmlsZS0+Zl9wb3MgPSAwOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNvY2s7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNvY2tfbWFwX2ZkKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJc3RydWN0IGZpbGUgKm5ld2ZpbGU7CisJaW50IGZkID0gc29ja19hbGxvY19mZCgmbmV3ZmlsZSk7CisKKwlpZiAobGlrZWx5KGZkID49IDApKSB7CisJCWludCBlcnIgPSBzb2NrX2F0dGFjaF9mZChzb2NrLCBuZXdmaWxlKTsKKworCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKKwkJCXB1dF9maWxwKG5ld2ZpbGUpOwogCQkJcHV0X3VudXNlZF9mZChmZCk7Ci0JCQlmZCA9IC1FTkZJTEU7Ci0JCQlnb3RvIG91dDsKKwkJCXJldHVybiBlcnI7CiAJCX0KKwkJZmRfaW5zdGFsbChmZCwgbmV3ZmlsZSk7CisJfQorCXJldHVybiBmZDsKK30KIAotCQl0aGlzLmxlbiA9IHNwcmludGYobmFtZSwgIlslbHVdIiwgU09DS19JTk9ERShzb2NrKS0+aV9pbm8pOwotCQl0aGlzLm5hbWUgPSBuYW1lOwotCQl0aGlzLmhhc2ggPSBTT0NLX0lOT0RFKHNvY2spLT5pX2lubzsKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2Zyb21fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50ICplcnIpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCi0JCWZpbGUtPmZfZGVudHJ5ID0gZF9hbGxvYyhzb2NrX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKLQkJaWYgKCFmaWxlLT5mX2RlbnRyeSkgewotCQkJcHV0X2ZpbHAoZmlsZSk7Ci0JCQlwdXRfdW51c2VkX2ZkKGZkKTsKLQkJCWZkID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWZpbGUtPmZfZGVudHJ5LT5kX29wID0gJnNvY2tmc19kZW50cnlfb3BlcmF0aW9uczsKLQkJZF9hZGQoZmlsZS0+Zl9kZW50cnksIFNPQ0tfSU5PREUoc29jaykpOwotCQlmaWxlLT5mX3Zmc21udCA9IG1udGdldChzb2NrX21udCk7Ci0JCWZpbGUtPmZfbWFwcGluZyA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CisJaWYgKGZpbGUtPmZfb3AgPT0gJnNvY2tldF9maWxlX29wcykKKwkJcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YTsJLyogc2V0IGluIHNvY2tfbWFwX2ZkICovCiAKLQkJc29jay0+ZmlsZSA9IGZpbGU7Ci0JCWZpbGUtPmZfb3AgPSBTT0NLX0lOT0RFKHNvY2spLT5pX2ZvcCA9ICZzb2NrZXRfZmlsZV9vcHM7Ci0JCWZpbGUtPmZfbW9kZSA9IEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURTsKLQkJZmlsZS0+Zl9mbGFncyA9IE9fUkRXUjsKLQkJZmlsZS0+Zl9wb3MgPSAwOwotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBzb2NrOwotCQlmZF9pbnN0YWxsKGZkLCBmaWxlKTsKKwlpbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWlmICghU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkpIHsKKwkJKmVyciA9IC1FTk9UU09DSzsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi1vdXQ6Ci0JcmV0dXJuIGZkOworCXNvY2sgPSBTT0NLRVRfSShpbm9kZSk7CisJaWYgKHNvY2stPmZpbGUgIT0gZmlsZSkgeworCQlwcmludGsoS0VSTl9FUlIgInNvY2tpX2xvb2t1cDogc29ja2V0IGZpbGUgY2hhbmdlZCFcbiIpOworCQlzb2NrLT5maWxlID0gZmlsZTsKKwl9CisJcmV0dXJuIHNvY2s7CiB9CiAKIC8qKgpAQCAtNDMwLDMzICs0NzMsMzMgQEAKIHN0cnVjdCBzb2NrZXQgKnNvY2tmZF9sb29rdXAoaW50IGZkLCBpbnQgKmVycikKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAKLQlpZiAoIShmaWxlID0gZmdldChmZCkpKQotCXsKKwlpZiAoIShmaWxlID0gZmdldChmZCkpKSB7CiAJCSplcnIgPSAtRUJBREY7CiAJCXJldHVybiBOVUxMOwogCX0KLQotCWlmIChmaWxlLT5mX29wID09ICZzb2NrZXRfZmlsZV9vcHMpCi0JCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGE7CS8qIHNldCBpbiBzb2NrX21hcF9mZCAqLwotCi0JaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlpZiAoIVNfSVNTT0NLKGlub2RlLT5pX21vZGUpKSB7Ci0JCSplcnIgPSAtRU5PVFNPQ0s7CisJc29jayA9IHNvY2tfZnJvbV9maWxlKGZpbGUsIGVycik7CisJaWYgKCFzb2NrKQogCQlmcHV0KGZpbGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzb2NrID0gU09DS0VUX0koaW5vZGUpOwotCWlmIChzb2NrLT5maWxlICE9IGZpbGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzb2NraV9sb29rdXA6IHNvY2tldCBmaWxlIGNoYW5nZWQhXG4iKTsKLQkJc29jay0+ZmlsZSA9IGZpbGU7Ci0JfQogCXJldHVybiBzb2NrOwogfQogCitzdGF0aWMgc3RydWN0IHNvY2tldCAqc29ja2ZkX2xvb2t1cF9saWdodChpbnQgZmQsIGludCAqZXJyLCBpbnQgKmZwdXRfbmVlZGVkKQoreworCXN0cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisKKwlmaWxlID0gZmdldF9saWdodChmZCwgZnB1dF9uZWVkZWQpOworCWlmIChmaWxlKSB7CisJCXNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlLCBlcnIpOworCQlpZiAoc29jaykKKwkJCXJldHVybiBzb2NrOworCQlmcHV0X2xpZ2h0KGZpbGUsICpmcHV0X25lZWRlZCk7CisJfQorCXJldHVybiBOVUxMOworfQorCiAvKioKICAqCXNvY2tfYWxsb2MJLQlhbGxvY2F0ZSBhIHNvY2tldAogICoJCkBAIC03OTIsMzYgKzgzNSwzNiBAQAogICogd2l0aCBtb2R1bGUgdW5sb2FkLgogICovCiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKGJyX2lvY3RsX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYnJfaW9jdGxfbXV0ZXgpOwogc3RhdGljIGludCAoKmJyX2lvY3RsX2hvb2spKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpID0gTlVMTDsKIAogdm9pZCBicmlvY3RsX3NldChpbnQgKCpob29rKSh1bnNpZ25lZCBpbnQsIHZvaWQgX191c2VyICopKQogewotCWRvd24oJmJyX2lvY3RsX211dGV4KTsKKwltdXRleF9sb2NrKCZicl9pb2N0bF9tdXRleCk7CiAJYnJfaW9jdGxfaG9vayA9IGhvb2s7Ci0JdXAoJmJyX2lvY3RsX211dGV4KTsKKwltdXRleF91bmxvY2soJmJyX2lvY3RsX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0woYnJpb2N0bF9zZXQpOwogCi1zdGF0aWMgREVDTEFSRV9NVVRFWCh2bGFuX2lvY3RsX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgodmxhbl9pb2N0bF9tdXRleCk7CiBzdGF0aWMgaW50ICgqdmxhbl9pb2N0bF9ob29rKSh2b2lkIF9fdXNlciAqYXJnKTsKIAogdm9pZCB2bGFuX2lvY3RsX3NldChpbnQgKCpob29rKSh2b2lkIF9fdXNlciAqKSkKIHsKLQlkb3duKCZ2bGFuX2lvY3RsX211dGV4KTsKKwltdXRleF9sb2NrKCZ2bGFuX2lvY3RsX211dGV4KTsKIAl2bGFuX2lvY3RsX2hvb2sgPSBob29rOwotCXVwKCZ2bGFuX2lvY3RsX211dGV4KTsKKwltdXRleF91bmxvY2soJnZsYW5faW9jdGxfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTCh2bGFuX2lvY3RsX3NldCk7CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKGRsY2lfaW9jdGxfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChkbGNpX2lvY3RsX211dGV4KTsKIHN0YXRpYyBpbnQgKCpkbGNpX2lvY3RsX2hvb2spKHVuc2lnbmVkIGludCwgdm9pZCBfX3VzZXIgKik7CiAKIHZvaWQgZGxjaV9pb2N0bF9zZXQoaW50ICgqaG9vaykodW5zaWduZWQgaW50LCB2b2lkIF9fdXNlciAqKSkKIHsKLQlkb3duKCZkbGNpX2lvY3RsX211dGV4KTsKKwltdXRleF9sb2NrKCZkbGNpX2lvY3RsX211dGV4KTsKIAlkbGNpX2lvY3RsX2hvb2sgPSBob29rOwotCXVwKCZkbGNpX2lvY3RsX211dGV4KTsKKwltdXRleF91bmxvY2soJmRsY2lfaW9jdGxfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChkbGNpX2lvY3RsX3NldCk7CiAKQEAgLTg0MCwxMSArODgzLDExIEBACiAJaWYgKGNtZCA+PSBTSU9DREVWUFJJVkFURSAmJiBjbWQgPD0gKFNJT0NERVZQUklWQVRFICsgMTUpKSB7CiAJCWVyciA9IGRldl9pb2N0bChjbWQsIGFyZ3ApOwogCX0gZWxzZQotI2lmZGVmIFdJUkVMRVNTX0VYVAorI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIAlpZiAoY21kID49IFNJT0NJV0ZJUlNUICYmIGNtZCA8PSBTSU9DSVdMQVNUKSB7CiAJCWVyciA9IGRldl9pb2N0bChjbWQsIGFyZ3ApOwogCX0gZWxzZQotI2VuZGlmCS8qIFdJUkVMRVNTX0VYVCAqLworI2VuZGlmCS8qIENPTkZJR19XSVJFTEVTU19FWFQgKi8KIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIEZJT1NFVE9XTjoKIAkJY2FzZSBTSU9DU1BHUlA6CkBAIC04NjUsMTAgKzkwOCwxMCBAQAogCQkJaWYgKCFicl9pb2N0bF9ob29rKQogCQkJCXJlcXVlc3RfbW9kdWxlKCJicmlkZ2UiKTsKIAotCQkJZG93bigmYnJfaW9jdGxfbXV0ZXgpOworCQkJbXV0ZXhfbG9jaygmYnJfaW9jdGxfbXV0ZXgpOwogCQkJaWYgKGJyX2lvY3RsX2hvb2spIAogCQkJCWVyciA9IGJyX2lvY3RsX2hvb2soY21kLCBhcmdwKTsKLQkJCXVwKCZicl9pb2N0bF9tdXRleCk7CisJCQltdXRleF91bmxvY2soJmJyX2lvY3RsX211dGV4KTsKIAkJCWJyZWFrOwogCQljYXNlIFNJT0NHSUZWTEFOOgogCQljYXNlIFNJT0NTSUZWTEFOOgpAQCAtODc2LDEwICs5MTksMTAgQEAKIAkJCWlmICghdmxhbl9pb2N0bF9ob29rKQogCQkJCXJlcXVlc3RfbW9kdWxlKCI4MDIxcSIpOwogCi0JCQlkb3duKCZ2bGFuX2lvY3RsX211dGV4KTsKKwkJCW11dGV4X2xvY2soJnZsYW5faW9jdGxfbXV0ZXgpOwogCQkJaWYgKHZsYW5faW9jdGxfaG9vaykKIAkJCQllcnIgPSB2bGFuX2lvY3RsX2hvb2soYXJncCk7Ci0JCQl1cCgmdmxhbl9pb2N0bF9tdXRleCk7CisJCQltdXRleF91bmxvY2soJnZsYW5faW9jdGxfbXV0ZXgpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0lPQ0dJRkRJVkVSVDoKIAkJY2FzZSBTSU9DU0lGRElWRVJUOgpAQCAtODkzLDkgKzkzNiw5IEBACiAJCQkJcmVxdWVzdF9tb2R1bGUoImRsY2kiKTsKIAogCQkJaWYgKGRsY2lfaW9jdGxfaG9vaykgewotCQkJCWRvd24oJmRsY2lfaW9jdGxfbXV0ZXgpOworCQkJCW11dGV4X2xvY2soJmRsY2lfaW9jdGxfbXV0ZXgpOwogCQkJCWVyciA9IGRsY2lfaW9jdGxfaG9vayhjbWQsIGFyZ3ApOwotCQkJCXVwKCZkbGNpX2lvY3RsX211dGV4KTsKKwkJCQltdXRleF91bmxvY2soJmRsY2lfaW9jdGxfbXV0ZXgpOwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0xMjg5LDE5ICsxMzMyLDE3IEBACiB7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAljaGFyIGFkZHJlc3NbTUFYX1NPQ0tfQUREUl07Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBmcHV0X25lZWRlZDsKIAotCWlmKChzb2NrID0gc29ja2ZkX2xvb2t1cChmZCwmZXJyKSkhPU5VTEwpCisJaWYoKHNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpKSE9TlVMTCkKIAl7CiAJCWlmKChlcnI9bW92ZV9hZGRyX3RvX2tlcm5lbCh1bXlhZGRyLGFkZHJsZW4sYWRkcmVzcykpPj0wKSB7CiAJCQllcnIgPSBzZWN1cml0eV9zb2NrZXRfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJc29ja2ZkX3B1dChzb2NrKTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQotCQkJZXJyID0gc29jay0+b3BzLT5iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLCBhZGRybGVuKTsKKwkJCWlmICghZXJyKQorCQkJCWVyciA9IHNvY2stPm9wcy0+YmluZChzb2NrLAorCQkJCQkoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7CiAJCX0KLQkJc29ja2ZkX3B1dChzb2NrKTsKKwkJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CiAJfQkJCQogCXJldHVybiBlcnI7CiB9CkBAIC0xMzE4LDIwICsxMzU5LDE3IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX2xpc3RlbihpbnQgZmQsIGludCBiYWNrbG9nKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBmcHV0X25lZWRlZDsKIAkKLQlpZiAoKHNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCAmZXJyKSkgIT0gTlVMTCkgeworCWlmICgoc29jayA9IHNvY2tmZF9sb29rdXBfbGlnaHQoZmQsICZlcnIsICZmcHV0X25lZWRlZCkpICE9IE5VTEwpIHsKIAkJaWYgKCh1bnNpZ25lZCkgYmFja2xvZyA+IHN5c2N0bF9zb21heGNvbm4pCiAJCQliYWNrbG9nID0gc3lzY3RsX3NvbWF4Y29ubjsKIAogCQllcnIgPSBzZWN1cml0eV9zb2NrZXRfbGlzdGVuKHNvY2ssIGJhY2tsb2cpOwotCQlpZiAoZXJyKSB7Ci0JCQlzb2NrZmRfcHV0KHNvY2spOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoIWVycikKKwkJCWVyciA9IHNvY2stPm9wcy0+bGlzdGVuKHNvY2ssIGJhY2tsb2cpOwogCi0JCWVycj1zb2NrLT5vcHMtPmxpc3Rlbihzb2NrLCBiYWNrbG9nKTsKLQkJc29ja2ZkX3B1dChzb2NrKTsKKwkJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0xMzUyLDEwICsxMzkwLDExIEBACiBhc21saW5rYWdlIGxvbmcgc3lzX2FjY2VwdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVwZWVyX3NvY2thZGRyLCBpbnQgX191c2VyICp1cGVlcl9hZGRybGVuKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2ssICpuZXdzb2NrOwotCWludCBlcnIsIGxlbjsKKwlzdHJ1Y3QgZmlsZSAqbmV3ZmlsZTsKKwlpbnQgZXJyLCBsZW4sIG5ld2ZkLCBmcHV0X25lZWRlZDsKIAljaGFyIGFkZHJlc3NbTUFYX1NPQ0tfQUREUl07CiAKLQlzb2NrID0gc29ja2ZkX2xvb2t1cChmZCwgJmVycik7CisJc29jayA9IHNvY2tmZF9sb29rdXBfbGlnaHQoZmQsICZlcnIsICZmcHV0X25lZWRlZCk7CiAJaWYgKCFzb2NrKQogCQlnb3RvIG91dDsKIApAQCAtMTM3MiwzNSArMTQxMSw0OCBAQAogCSAqLwogCV9fbW9kdWxlX2dldChuZXdzb2NrLT5vcHMtPm93bmVyKTsKIAorCW5ld2ZkID0gc29ja19hbGxvY19mZCgmbmV3ZmlsZSk7CisJaWYgKHVubGlrZWx5KG5ld2ZkIDwgMCkpIHsKKwkJZXJyID0gbmV3ZmQ7CisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQorCisJZXJyID0gc29ja19hdHRhY2hfZmQobmV3c29jaywgbmV3ZmlsZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2ZkOworCiAJZXJyID0gc2VjdXJpdHlfc29ja2V0X2FjY2VwdChzb2NrLCBuZXdzb2NrKTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dF9yZWxlYXNlOworCQlnb3RvIG91dF9mZDsKIAogCWVyciA9IHNvY2stPm9wcy0+YWNjZXB0KHNvY2ssIG5ld3NvY2ssIHNvY2stPmZpbGUtPmZfZmxhZ3MpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9yZWxlYXNlOworCQlnb3RvIG91dF9mZDsKIAogCWlmICh1cGVlcl9zb2NrYWRkcikgewogCQlpZihuZXdzb2NrLT5vcHMtPmdldG5hbWUobmV3c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsICZsZW4sIDIpPDApIHsKIAkJCWVyciA9IC1FQ09OTkFCT1JURUQ7Ci0JCQlnb3RvIG91dF9yZWxlYXNlOworCQkJZ290byBvdXRfZmQ7CiAJCX0KIAkJZXJyID0gbW92ZV9hZGRyX3RvX3VzZXIoYWRkcmVzcywgbGVuLCB1cGVlcl9zb2NrYWRkciwgdXBlZXJfYWRkcmxlbik7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXRfcmVsZWFzZTsKKwkJCWdvdG8gb3V0X2ZkOwogCX0KIAogCS8qIEZpbGUgZmxhZ3MgYXJlIG5vdCBpbmhlcml0ZWQgdmlhIGFjY2VwdCgpIHVubGlrZSBhbm90aGVyIE9TZXMuICovCiAKLQlpZiAoKGVyciA9IHNvY2tfbWFwX2ZkKG5ld3NvY2spKSA8IDApCi0JCWdvdG8gb3V0X3JlbGVhc2U7CisJZmRfaW5zdGFsbChuZXdmZCwgbmV3ZmlsZSk7CisJZXJyID0gbmV3ZmQ7CiAKIAlzZWN1cml0eV9zb2NrZXRfcG9zdF9hY2NlcHQoc29jaywgbmV3c29jayk7CiAKIG91dF9wdXQ6Ci0Jc29ja2ZkX3B1dChzb2NrKTsKKwlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIG91dDoKIAlyZXR1cm4gZXJyOworb3V0X2ZkOgorCXB1dF9maWxwKG5ld2ZpbGUpOworCXB1dF91bnVzZWRfZmQobmV3ZmQpOwogb3V0X3JlbGVhc2U6CiAJc29ja19yZWxlYXNlKG5ld3NvY2spOwogCWdvdG8gb3V0X3B1dDsKQEAgLTE0MjMsOSArMTQ3NSw5IEBACiB7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAljaGFyIGFkZHJlc3NbTUFYX1NPQ0tfQUREUl07Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBmcHV0X25lZWRlZDsKIAotCXNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCAmZXJyKTsKKwlzb2NrID0gc29ja2ZkX2xvb2t1cF9saWdodChmZCwgJmVyciwgJmZwdXRfbmVlZGVkKTsKIAlpZiAoIXNvY2spCiAJCWdvdG8gb3V0OwogCWVyciA9IG1vdmVfYWRkcl90b19rZXJuZWwodXNlcnZhZGRyLCBhZGRybGVuLCBhZGRyZXNzKTsKQEAgLTE0MzksNyArMTQ5MSw3IEBACiAJZXJyID0gc29jay0+b3BzLT5jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkcmVzcywgYWRkcmxlbiwKIAkJCQkgc29jay0+ZmlsZS0+Zl9mbGFncyk7CiBvdXRfcHV0OgotCXNvY2tmZF9wdXQoc29jayk7CisJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0NTMsOSArMTUwNSw5IEBACiB7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAljaGFyIGFkZHJlc3NbTUFYX1NPQ0tfQUREUl07Ci0JaW50IGxlbiwgZXJyOworCWludCBsZW4sIGVyciwgZnB1dF9uZWVkZWQ7CiAJCi0Jc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpOworCXNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOwogCWlmICghc29jaykKIAkJZ290byBvdXQ7CiAKQEAgLTE0NjksNyArMTUyMSw3IEBACiAJZXJyID0gbW92ZV9hZGRyX3RvX3VzZXIoYWRkcmVzcywgbGVuLCB1c29ja2FkZHIsIHVzb2NrYWRkcl9sZW4pOwogCiBvdXRfcHV0OgotCXNvY2tmZF9wdXQoc29jayk7CisJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0ODMsMjAgKzE1MzUsMTkgQEAKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCWNoYXIgYWRkcmVzc1tNQVhfU09DS19BRERSXTsKLQlpbnQgbGVuLCBlcnI7CisJaW50IGxlbiwgZXJyLCBmcHV0X25lZWRlZDsKIAotCWlmICgoc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpKSE9TlVMTCkKLQl7CisJaWYgKChzb2NrID0gc29ja2ZkX2xvb2t1cF9saWdodChmZCwgJmVyciwgJmZwdXRfbmVlZGVkKSkgIT0gTlVMTCkgewogCQllcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcm5hbWUoc29jayk7CiAJCWlmIChlcnIpIHsKLQkJCXNvY2tmZF9wdXQoc29jayk7CisJCQlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAogCQllcnIgPSBzb2NrLT5vcHMtPmdldG5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsICZsZW4sIDEpOwogCQlpZiAoIWVycikKIAkJCWVycj1tb3ZlX2FkZHJfdG9fdXNlcihhZGRyZXNzLGxlbiwgdXNvY2thZGRyLCB1c29ja2FkZHJfbGVuKTsKLQkJc29ja2ZkX3B1dChzb2NrKTsKKwkJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0xNTE1LDEwICsxNTY2LDE2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgbXNnaGRyIG1zZzsKIAlzdHJ1Y3QgaW92ZWMgaW92OwotCQotCXNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCAmZXJyKTsKKwlpbnQgZnB1dF9uZWVkZWQ7CisJc3RydWN0IGZpbGUgKnNvY2tfZmlsZTsKKworCXNvY2tfZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKCFzb2NrX2ZpbGUpCisJCXJldHVybiAtRUJBREY7CisKKwlzb2NrID0gc29ja19mcm9tX2ZpbGUoc29ja19maWxlLCAmZXJyKTsKIAlpZiAoIXNvY2spCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9wdXQ7CiAJaW92Lmlvdl9iYXNlPWJ1ZmY7CiAJaW92Lmlvdl9sZW49bGVuOwogCW1zZy5tc2dfbmFtZT1OVUxMOwpAQCAtMTUyNyw4ICsxNTg0LDcgQEAKIAltc2cubXNnX2NvbnRyb2w9TlVMTDsKIAltc2cubXNnX2NvbnRyb2xsZW49MDsKIAltc2cubXNnX25hbWVsZW49MDsKLQlpZihhZGRyKQotCXsKKwlpZiAoYWRkcikgewogCQllcnIgPSBtb3ZlX2FkZHJfdG9fa2VybmVsKGFkZHIsIGFkZHJfbGVuLCBhZGRyZXNzKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dF9wdXQ7CkBAIC0xNTQxLDggKzE1OTcsNyBAQAogCWVyciA9IHNvY2tfc2VuZG1zZyhzb2NrLCAmbXNnLCBsZW4pOwogCiBvdXRfcHV0OgkJCi0Jc29ja2ZkX3B1dChzb2NrKTsKLW91dDoKKwlmcHV0X2xpZ2h0KHNvY2tfZmlsZSwgZnB1dF9uZWVkZWQpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1NjksOCArMTYyNCwxNCBAQAogCXN0cnVjdCBtc2doZHIgbXNnOwogCWNoYXIgYWRkcmVzc1tNQVhfU09DS19BRERSXTsKIAlpbnQgZXJyLGVycjI7CisJc3RydWN0IGZpbGUgKnNvY2tfZmlsZTsKKwlpbnQgZnB1dF9uZWVkZWQ7CiAKLQlzb2NrID0gc29ja2ZkX2xvb2t1cChmZCwgJmVycik7CisJc29ja19maWxlID0gZmdldF9saWdodChmZCwgJmZwdXRfbmVlZGVkKTsKKwlpZiAoIXNvY2tfZmlsZSkKKwkJcmV0dXJuIC1FQkFERjsKKworCXNvY2sgPSBzb2NrX2Zyb21fZmlsZShzb2NrX2ZpbGUsICZlcnIpOwogCWlmICghc29jaykKIAkJZ290byBvdXQ7CiAKQEAgLTE1OTIsOCArMTY1Myw4IEBACiAJCWlmKGVycjI8MCkKIAkJCWVycj1lcnIyOwogCX0KLQlzb2NrZmRfcHV0KHNvY2spOwkJCQogb3V0OgorCWZwdXRfbGlnaHQoc29ja19maWxlLCBmcHV0X25lZWRlZCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTYxMywyNSArMTY3NCwyNCBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldHNvY2tvcHQoaW50IGZkLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewotCWludCBlcnI7CisJaW50IGVyciwgZnB1dF9uZWVkZWQ7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAogCWlmIChvcHRsZW4gPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQotCWlmICgoc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpKSE9TlVMTCkKKwlpZiAoKHNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpKSAhPSBOVUxMKQogCXsKIAkJZXJyID0gc2VjdXJpdHlfc29ja2V0X3NldHNvY2tvcHQoc29jayxsZXZlbCxvcHRuYW1lKTsKLQkJaWYgKGVycikgewotCQkJc29ja2ZkX3B1dChzb2NrKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3B1dDsKIAogCQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkKIAkJCWVycj1zb2NrX3NldHNvY2tvcHQoc29jayxsZXZlbCxvcHRuYW1lLG9wdHZhbCxvcHRsZW4pOwogCQllbHNlCiAJCQllcnI9c29jay0+b3BzLT5zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Ci0JCXNvY2tmZF9wdXQoc29jayk7CitvdXRfcHV0OgorCQlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NDMsMjMgKzE3MDMsMjAgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19nZXRzb2Nrb3B0KGludCBmZCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewotCWludCBlcnI7CisJaW50IGVyciwgZnB1dF9uZWVkZWQ7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAotCWlmICgoc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpKSE9TlVMTCkKLQl7Ci0JCWVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCAKLQkJCQkJCQkgICBvcHRuYW1lKTsKLQkJaWYgKGVycikgewotCQkJc29ja2ZkX3B1dChzb2NrKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwlpZiAoKHNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpKSAhPSBOVUxMKSB7CisJCWVyciA9IHNlY3VyaXR5X3NvY2tldF9nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3B1dDsKIAogCQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkKIAkJCWVycj1zb2NrX2dldHNvY2tvcHQoc29jayxsZXZlbCxvcHRuYW1lLG9wdHZhbCxvcHRsZW4pOwogCQllbHNlCiAJCQllcnI9c29jay0+b3BzLT5nZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7Ci0JCXNvY2tmZF9wdXQoc29jayk7CitvdXRfcHV0OgorCQlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE2NzEsMTkgKzE3MjgsMTUgQEAKIAogYXNtbGlua2FnZSBsb25nIHN5c19zaHV0ZG93bihpbnQgZmQsIGludCBob3cpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBmcHV0X25lZWRlZDsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCi0JaWYgKChzb2NrID0gc29ja2ZkX2xvb2t1cChmZCwgJmVycikpIT1OVUxMKQorCWlmICgoc29jayA9IHNvY2tmZF9sb29rdXBfbGlnaHQoZmQsICZlcnIsICZmcHV0X25lZWRlZCkpIT1OVUxMKQogCXsKIAkJZXJyID0gc2VjdXJpdHlfc29ja2V0X3NodXRkb3duKHNvY2ssIGhvdyk7Ci0JCWlmIChlcnIpIHsKLQkJCXNvY2tmZF9wdXQoc29jayk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCQkJCi0JCWVycj1zb2NrLT5vcHMtPnNodXRkb3duKHNvY2ssIGhvdyk7Ci0JCXNvY2tmZF9wdXQoc29jayk7CisJCWlmICghZXJyKQorCQkJZXJyID0gc29jay0+b3BzLT5zaHV0ZG93bihzb2NrLCBob3cpOworCQlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE3MTIsNiArMTc2NSw3IEBACiAJdW5zaWduZWQgY2hhciAqY3RsX2J1ZiA9IGN0bDsKIAlzdHJ1Y3QgbXNnaGRyIG1zZ19zeXM7CiAJaW50IGVyciwgY3RsX2xlbiwgaW92X3NpemUsIHRvdGFsX2xlbjsKKwlpbnQgZnB1dF9uZWVkZWQ7CiAJCiAJZXJyID0gLUVGQVVMVDsKIAlpZiAoTVNHX0NNU0dfQ09NUEFUICYgZmxhZ3MpIHsKQEAgLTE3MjAsNyArMTc3NCw3IEBACiAJfSBlbHNlIGlmIChjb3B5X2Zyb21fdXNlcigmbXNnX3N5cywgbXNnLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXNvY2sgPSBzb2NrZmRfbG9va3VwKGZkLCAmZXJyKTsKKwlzb2NrID0gc29ja2ZkX2xvb2t1cF9saWdodChmZCwgJmVyciwgJmZwdXRfbmVlZGVkKTsKIAlpZiAoIXNvY2spIAogCQlnb3RvIG91dDsKIApAQCAtMTc4OCw3ICsxODQyLDcgQEAKIAlpZiAoaW92ICE9IGlvdnN0YWNrKQogCQlzb2NrX2tmcmVlX3Moc29jay0+c2ssIGlvdiwgaW92X3NpemUpOwogb3V0X3B1dDoKLQlzb2NrZmRfcHV0KHNvY2spOworCWZwdXRfbGlnaHQoc29jay0+ZmlsZSwgZnB1dF9uZWVkZWQpOwogb3V0OiAgICAgICAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTgwNiw2ICsxODYwLDcgQEAKIAlzdHJ1Y3QgbXNnaGRyIG1zZ19zeXM7CiAJdW5zaWduZWQgbG9uZyBjbXNnX3B0cjsKIAlpbnQgZXJyLCBpb3Zfc2l6ZSwgdG90YWxfbGVuLCBsZW47CisJaW50IGZwdXRfbmVlZGVkOwogCiAJLyoga2VybmVsIG1vZGUgYWRkcmVzcyAqLwogCWNoYXIgYWRkcltNQVhfU09DS19BRERSXTsKQEAgLTE4MjEsNyArMTg3Niw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmbXNnX3N5cyxtc2csc2l6ZW9mKHN0cnVjdCBtc2doZHIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0Jc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZlcnIpOworCXNvY2sgPSBzb2NrZmRfbG9va3VwX2xpZ2h0KGZkLCAmZXJyLCAmZnB1dF9uZWVkZWQpOwogCWlmICghc29jaykKIAkJZ290byBvdXQ7CiAKQEAgLTE4ODgsNyArMTk0Myw3IEBACiAJaWYgKGlvdiAhPSBpb3ZzdGFjaykKIAkJc29ja19rZnJlZV9zKHNvY2stPnNrLCBpb3YsIGlvdl9zaXplKTsKIG91dF9wdXQ6Ci0Jc29ja2ZkX3B1dChzb2NrKTsKKwlmcHV0X2xpZ2h0KHNvY2stPmZpbGUsIGZwdXRfbmVlZGVkKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjA4OSw2ICsyMTQ0LDIwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nIGNvbXBhdF9zb2NrX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsCisJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNvY2tldCAqc29jayA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOworCisJaWYgKHNvY2stPm9wcy0+Y29tcGF0X2lvY3RsKQorCQlyZXQgPSBzb2NrLT5vcHMtPmNvbXBhdF9pb2N0bChzb2NrLCBjbWQsIGFyZyk7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIC8qIEFCSSBlbXVsYXRpb24gbGF5ZXJzIG5lZWQgdGhlc2UgdHdvICovCiBFWFBPUlRfU1lNQk9MKG1vdmVfYWRkcl90b19rZXJuZWwpOwogRVhQT1JUX1NZTUJPTChtb3ZlX2FkZHJfdG9fdXNlcik7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NhY2hlLmMgYi9uZXQvc3VucnBjL2NhY2hlLmMKaW5kZXggZGNhYTBjNC4uMGFjY2NmZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jYWNoZS5jCisrKyBiL25ldC9zdW5ycGMvY2FjaGUuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2FjaGUuaD4KQEAgLTUzMiw3ICs1MzMsNyBAQAogICovCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socXVldWVfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChxdWV1ZV9pb19zZW0pOworc3RhdGljIERFRklORV9NVVRFWChxdWV1ZV9pb19tdXRleCk7CiAKIHN0cnVjdCBjYWNoZV9xdWV1ZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwpAQCAtNTYxLDcgKzU2Miw3IEBACiAJaWYgKGNvdW50ID09IDApCiAJCXJldHVybiAwOwogCi0JZG93bigmcXVldWVfaW9fc2VtKTsgLyogcHJvdGVjdCBhZ2FpbnN0IG11bHRpcGxlIGNvbmN1cnJlbnQKKwltdXRleF9sb2NrKCZxdWV1ZV9pb19tdXRleCk7IC8qIHByb3RlY3QgYWdhaW5zdCBtdWx0aXBsZSBjb25jdXJyZW50CiAJCQkgICAgICAqIHJlYWRlcnMgb24gdGhpcyBmaWxlICovCiAgYWdhaW46CiAJc3Bpbl9sb2NrKCZxdWV1ZV9sb2NrKTsKQEAgLTU3NCw3ICs1NzUsNyBAQAogCX0KIAlpZiAocnAtPnEubGlzdC5uZXh0ID09ICZjZC0+cXVldWUpIHsKIAkJc3Bpbl91bmxvY2soJnF1ZXVlX2xvY2spOwotCQl1cCgmcXVldWVfaW9fc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZxdWV1ZV9pb19tdXRleCk7CiAJCUJVR19PTihycC0+b2Zmc2V0KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNjIxLDExICs2MjIsMTEgQEAKIAl9CiAJaWYgKGVyciA9PSAtRUFHQUlOKQogCQlnb3RvIGFnYWluOwotCXVwKCZxdWV1ZV9pb19zZW0pOworCW11dGV4X3VubG9jaygmcXVldWVfaW9fbXV0ZXgpOwogCXJldHVybiBlcnIgPyBlcnIgOiAgY291bnQ7CiB9CiAKLXN0YXRpYyBjaGFyIHdyaXRlX2J1Zls4MTkyXTsgLyogcHJvdGVjdGVkIGJ5IHF1ZXVlX2lvX3NlbSAqLworc3RhdGljIGNoYXIgd3JpdGVfYnVmWzgxOTJdOyAvKiBwcm90ZWN0ZWQgYnkgcXVldWVfaW9fbXV0ZXggKi8KIAogc3RhdGljIHNzaXplX3QKIGNhY2hlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCkBAIC02MzksMTAgKzY0MCwxMCBAQAogCWlmIChjb3VudCA+PSBzaXplb2Yod3JpdGVfYnVmKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZxdWV1ZV9pb19zZW0pOworCW11dGV4X2xvY2soJnF1ZXVlX2lvX211dGV4KTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcih3cml0ZV9idWYsIGJ1ZiwgY291bnQpKSB7Ci0JCXVwKCZxdWV1ZV9pb19zZW0pOworCQltdXRleF91bmxvY2soJnF1ZXVlX2lvX211dGV4KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCXdyaXRlX2J1Zltjb3VudF0gPSAnXDAnOwpAQCAtNjUxLDcgKzY1Miw3IEBACiAJZWxzZQogCQllcnIgPSAtRUlOVkFMOwogCi0JdXAoJnF1ZXVlX2lvX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZxdWV1ZV9pb19tdXRleCk7CiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NsbnQuYyBiL25ldC9zdW5ycGMvY2xudC5jCmluZGV4IGQyZjA1NTAuLmQ3ODQ3OTcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2xudC5jCisrKyBiL25ldC9zdW5ycGMvY2xudC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKCF4cHJ0KQotCQlnb3RvIG91dF9lcnI7CisJCWdvdG8gb3V0X25vX3hwcnQ7CiAJaWYgKHZlcnMgPj0gcHJvZ3JhbS0+bnJ2ZXJzIHx8ICEodmVyc2lvbiA9IHByb2dyYW0tPnZlcnNpb25bdmVyc10pKQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTE4Miw2ICsxODIsNyBAQAogCWtmcmVlKGNsbnQpOwogb3V0X2VycjoKIAl4cHJ0X2Rlc3Ryb3koeHBydCk7CitvdXRfbm9feHBydDoKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3JwY19waXBlLmMgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKaW5kZXggYTVjMGM3Yi4uYWQ5ZDlmYzRlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3JwY19waXBlLmMKKysrIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCkBAIC04NDksOSArODQ5LDEwIEBACiBpbnQgcmVnaXN0ZXJfcnBjX3BpcGVmcyh2b2lkKQogewogCXJwY19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicnBjX2lub2RlX2NhY2hlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcnBjX2lub2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfb25jZSwgTlVMTCk7CisJCQkJc2l6ZW9mKHN0cnVjdCBycGNfaW5vZGUpLAorCQkJCTAsIChTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAorCQkJCWluaXRfb25jZSwgTlVMTCk7CiAJaWYgKCFycGNfaW5vZGVfY2FjaGVwKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZWdpc3Rlcl9maWxlc3lzdGVtKCZycGNfcGlwZV9mc190eXBlKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuYwppbmRleCA4MDJkNGZlLi5kZmYwNzc5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NjaGVkLmMKKysrIGIvbmV0L3N1bnJwYy9zY2hlZC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0Lmg+CkBAIC02Miw3ICs2Myw3IEBACiAvKgogICogcnBjaW9kLXJlbGF0ZWQgc3R1ZmYKICAqLwotc3RhdGljIERFQ0xBUkVfTVVURVgocnBjaW9kX3NlbWEpOworc3RhdGljIERFRklORV9NVVRFWChycGNpb2RfbXV0ZXgpOwogc3RhdGljIHVuc2lnbmVkIGludAkJcnBjaW9kX3VzZXJzOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpycGNpb2Rfd29ya3F1ZXVlOwogCkBAIC01MTUsMTYgKzUxNiwxNCBAQAogICovCiB2b2lkIHJwY193YWtlX3VwKHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqcXVldWUpCiB7Ci0Jc3RydWN0IHJwY190YXNrICp0YXNrOwotCisJc3RydWN0IHJwY190YXNrICp0YXNrLCAqbmV4dDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCiAJc3Bpbl9sb2NrX2JoKCZxdWV1ZS0+bG9jayk7CiAJaGVhZCA9ICZxdWV1ZS0+dGFza3NbcXVldWUtPm1heHByaW9yaXR5XTsKIAlmb3IgKDs7KSB7Ci0JCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewotCQkJdGFzayA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IHJwY190YXNrLCB1LnRrX3dhaXQubGlzdCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YXNrLCBuZXh0LCBoZWFkLCB1LnRrX3dhaXQubGlzdCkKIAkJCV9fcnBjX3dha2VfdXBfdGFzayh0YXNrKTsKLQkJfQogCQlpZiAoaGVhZCA9PSAmcXVldWUtPnRhc2tzWzBdKQogCQkJYnJlYWs7CiAJCWhlYWQtLTsKQEAgLTU0MSwxNCArNTQwLDEzIEBACiAgKi8KIHZvaWQgcnBjX3dha2VfdXBfc3RhdHVzKHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqcXVldWUsIGludCBzdGF0dXMpCiB7CisJc3RydWN0IHJwY190YXNrICp0YXNrLCAqbmV4dDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBycGNfdGFzayAqdGFzazsKIAogCXNwaW5fbG9ja19iaCgmcXVldWUtPmxvY2spOwogCWhlYWQgPSAmcXVldWUtPnRhc2tzW3F1ZXVlLT5tYXhwcmlvcml0eV07CiAJZm9yICg7OykgewotCQl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKLQkJCXRhc2sgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBycGNfdGFzaywgdS50a193YWl0Lmxpc3QpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGFzaywgbmV4dCwgaGVhZCwgdS50a193YWl0Lmxpc3QpIHsKIAkJCXRhc2stPnRrX3N0YXR1cyA9IHN0YXR1czsKIAkJCV9fcnBjX3dha2VfdXBfdGFzayh0YXNrKTsKIAkJfQpAQCAtMTA1MCw3ICsxMDQ4LDcgQEAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJaW50IGVycm9yID0gMDsKIAotCWRvd24oJnJwY2lvZF9zZW1hKTsKKwltdXRleF9sb2NrKCZycGNpb2RfbXV0ZXgpOwogCWRwcmludGsoInJwY2lvZF91cDogdXNlcnMgJWRcbiIsIHJwY2lvZF91c2Vycyk7CiAJcnBjaW9kX3VzZXJzKys7CiAJaWYgKHJwY2lvZF93b3JrcXVldWUpCkBAIC0xMDczLDE0ICsxMDcxLDE0IEBACiAJcnBjaW9kX3dvcmtxdWV1ZSA9IHdxOwogCWVycm9yID0gMDsKIG91dDoKLQl1cCgmcnBjaW9kX3NlbWEpOworCW11dGV4X3VubG9jaygmcnBjaW9kX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHZvaWQKIHJwY2lvZF9kb3duKHZvaWQpCiB7Ci0JZG93bigmcnBjaW9kX3NlbWEpOworCW11dGV4X2xvY2soJnJwY2lvZF9tdXRleCk7CiAJZHByaW50aygicnBjaW9kX2Rvd24gc2VtYSAlZFxuIiwgcnBjaW9kX3VzZXJzKTsKIAlpZiAocnBjaW9kX3VzZXJzKSB7CiAJCWlmICgtLXJwY2lvZF91c2VycykKQEAgLTEwOTcsNyArMTA5NSw3IEBACiAJZGVzdHJveV93b3JrcXVldWUocnBjaW9kX3dvcmtxdWV1ZSk7CiAJcnBjaW9kX3dvcmtxdWV1ZSA9IE5VTEw7CiAgb3V0OgotCXVwKCZycGNpb2Rfc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZycGNpb2RfbXV0ZXgpOwogfQogCiAjaWZkZWYgUlBDX0RFQlVHCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDUwNTgwNjIuLmEyNzkwNWEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xMjk2LDEzICsxMjk2LDEzIEBACiAJCXhiLT5wYWdlX2xlbiArCiAJCXhiLT50YWlsWzBdLmlvdl9sZW47CiAKLQkvKiBHcmFiIHN2c2stPnNrX3NlbSB0byBzZXJpYWxpemUgb3V0Z29pbmcgZGF0YS4gKi8KLQlkb3duKCZzdnNrLT5za19zZW0pOworCS8qIEdyYWIgc3Zzay0+c2tfbXV0ZXggdG8gc2VyaWFsaXplIG91dGdvaW5nIGRhdGEuICovCisJbXV0ZXhfbG9jaygmc3Zzay0+c2tfbXV0ZXgpOwogCWlmICh0ZXN0X2JpdChTS19ERUFELCAmc3Zzay0+c2tfZmxhZ3MpKQogCQlsZW4gPSAtRU5PVENPTk47CiAJZWxzZQogCQlsZW4gPSBzdnNrLT5za19zZW5kdG8ocnFzdHApOwotCXVwKCZzdnNrLT5za19zZW0pOworCW11dGV4X3VubG9jaygmc3Zzay0+c2tfbXV0ZXgpOwogCXN2Y19zb2NrX3JlbGVhc2UocnFzdHApOwogCiAJaWYgKGxlbiA9PSAtRUNPTk5SRUZVU0VEIHx8IGxlbiA9PSAtRU5PVENPTk4gfHwgbGVuID09IC1FQUdBSU4pCkBAIC0xMzUxLDcgKzEzNTEsNyBAQAogCXN2c2stPnNrX2xhc3RyZWN2ID0gZ2V0X3NlY29uZHMoKTsKIAlJTklUX0xJU1RfSEVBRCgmc3Zzay0+c2tfZGVmZXJyZWQpOwogCUlOSVRfTElTVF9IRUFEKCZzdnNrLT5za19yZWFkeSk7Ci0Jc2VtYV9pbml0KCZzdnNrLT5za19zZW0sIDEpOworCW11dGV4X2luaXQoJnN2c2stPnNrX211dGV4KTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHNvY2tldCAqLwogCWlmIChzb2NrLT50eXBlID09IFNPQ0tfREdSQU0pCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5jIGIvbmV0L3RpcGMvYmNhc3QuYwppbmRleCBhN2IwNGYzLi4yYzRlY2JlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5jCisrKyBiL25ldC90aXBjL2JjYXN0LmMKQEAgLTEwNywyMiArMTA3LDIyIEBACiBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7CiAKIAotc3RhdGljIGlubGluZSB1MzIgYnVmX3NlcW5vKHN0cnVjdCBza19idWZmICpidWYpCitzdGF0aWMgdTMyIGJ1Zl9zZXFubyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQogewogCXJldHVybiBtc2dfc2Vxbm8oYnVmX21zZyhidWYpKTsKIH0gCiAKLXN0YXRpYyBpbmxpbmUgdTMyIGJjYnVmX2Fja3Moc3RydWN0IHNrX2J1ZmYgKmJ1ZikKK3N0YXRpYyB1MzIgYmNidWZfYWNrcyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQogewogCXJldHVybiAodTMyKSh1bnNpZ25lZCBsb25nKVRJUENfU0tCX0NCKGJ1ZiktPmhhbmRsZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJjYnVmX3NldF9hY2tzKHN0cnVjdCBza19idWZmICpidWYsIHUzMiBhY2tzKQorc3RhdGljIHZvaWQgYmNidWZfc2V0X2Fja3Moc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdTMyIGFja3MpCiB7CiAJVElQQ19TS0JfQ0IoYnVmKS0+aGFuZGxlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylhY2tzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYmNidWZfZGVjcl9hY2tzKHN0cnVjdCBza19idWZmICpidWYpCitzdGF0aWMgdm9pZCBiY2J1Zl9kZWNyX2Fja3Moc3RydWN0IHNrX2J1ZmYgKmJ1ZikKIHsKIAliY2J1Zl9zZXRfYWNrcyhidWYsIGJjYnVmX2Fja3MoYnVmKSAtIDEpOwogfQpAQCAtMTM0LDcgKzEzNCw3IEBACiAgKiBDYWxsZWQgd2l0aCAnbm9kZScgbG9ja2VkLCBiY19sb2NrIHVubG9ja2VkCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGJjbGlua19zZXRfZ2FwKHN0cnVjdCBub2RlICpuX3B0cikKK3N0YXRpYyB2b2lkIGJjbGlua19zZXRfZ2FwKHN0cnVjdCBub2RlICpuX3B0cikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gbl9wdHItPmJjbGluay5kZWZlcnJlZF9oZWFkOwogCkBAIC0xNTQsNyArMTU0LDcgQEAKICAqICAgICAgIGRpc3RyaWJ1dGUgTkFDS3MsIGJ1dCB0cmllcyB0byB1c2UgdGhlIHNhbWUgc3BhY2luZyAoZGl2aWRlIGJ5IDE2KS4gCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgYmNsaW5rX2Fja19hbGxvd2VkKHUzMiBuKQorc3RhdGljIGludCBiY2xpbmtfYWNrX2FsbG93ZWQodTMyIG4pCiB7CiAJcmV0dXJuKChuICUgVElQQ19NSU5fTElOS19XSU4pID09IHRpcGNfb3duX3RhZyk7CiB9CkBAIC0yNzEsNyArMjcxLDcgQEAKIAkJbXNnX3NldF9iY2dhcF90byhtc2csIG5fcHRyLT5iY2xpbmsuZ2FwX3RvKTsKIAkJbXNnX3NldF9iY2FzdF90YWcobXNnLCB0aXBjX293bl90YWcpOwogCi0JCWlmICh0aXBjX2JlYXJlcl9zZW5kKCZiY2JlYXJlci0+YmVhcmVyLCBidWYsIDApKSB7CisJCWlmICh0aXBjX2JlYXJlcl9zZW5kKCZiY2JlYXJlci0+YmVhcmVyLCBidWYsIE5VTEwpKSB7CiAJCQliY2wtPnN0YXRzLnNlbnRfbmFja3MrKzsKIAkJCWJ1Zl9kaXNjYXJkKGJ1Zik7CiAJCX0gZWxzZSB7CkBAIC0zMTQsNyArMzE0LDcgQEAKICAqIE9ubHkgdGlwY19uZXRfbG9jayBzZXQuCiAgKi8KIAotdm9pZCB0aXBjX2JjbGlua19wZWVrX25hY2sodTMyIGRlc3QsIHUzMiBzZW5kZXJfdGFnLCB1MzIgZ2FwX2FmdGVyLCB1MzIgZ2FwX3RvKQorc3RhdGljIHZvaWQgdGlwY19iY2xpbmtfcGVla19uYWNrKHUzMiBkZXN0LCB1MzIgc2VuZGVyX3RhZywgdTMyIGdhcF9hZnRlciwgdTMyIGdhcF90bykKIHsKIAlzdHJ1Y3Qgbm9kZSAqbl9wdHIgPSB0aXBjX25vZGVfZmluZChkZXN0KTsKIAl1MzIgbXlfYWZ0ZXIsIG15X3RvOwpAQCAtNDI1LDkgKzQyNSw5IEBACiAJCQkJCSAgICAgIG1zZ19iY2dhcF90byhtc2cpKTsKIAkJfSBlbHNlIHsKIAkJCXRpcGNfYmNsaW5rX3BlZWtfbmFjayhtc2dfZGVzdG5vZGUobXNnKSwKLQkJCQkJIG1zZ19iY2FzdF90YWcobXNnKSwKLQkJCQkJIG1zZ19iY2dhcF9hZnRlcihtc2cpLAotCQkJCQkgbXNnX2JjZ2FwX3RvKG1zZykpOworCQkJCQkgICAgICBtc2dfYmNhc3RfdGFnKG1zZyksCisJCQkJCSAgICAgIG1zZ19iY2dhcF9hZnRlcihtc2cpLAorCQkJCQkgICAgICBtc2dfYmNnYXBfdG8obXNnKSk7CiAJCX0KIAkJYnVmX2Rpc2NhcmQoYnVmKTsKIAkJcmV0dXJuOwpAQCAtNTI1LDE2ICs1MjUsMTggQEAKICAqIFJldHVybnMgMCBpZiBwYWNrZXQgc2VudCBzdWNjZXNzZnVsbHksIG5vbi16ZXJvIGlmIG5vdAogICovCiAKLWludCB0aXBjX2JjYmVhcmVyX3NlbmQoc3RydWN0IHNrX2J1ZmYgKmJ1ZiwKLQkJICAgICAgIHN0cnVjdCB0aXBjX2JlYXJlciAqdW51c2VkMSwKLQkJICAgICAgIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKnVudXNlZDIpCitzdGF0aWMgaW50IHRpcGNfYmNiZWFyZXJfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAorCQkJICAgICAgc3RydWN0IHRpcGNfYmVhcmVyICp1bnVzZWQxLAorCQkJICAgICAgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqdW51c2VkMikKIHsKIAlzdGF0aWMgaW50IHNlbmRfY291bnQgPSAwOwogCi0Jc3RydWN0IG5vZGVfbWFwIHJlbWFpbnM7Ci0Jc3RydWN0IG5vZGVfbWFwIHJlbWFpbnNfbmV3OworCXN0cnVjdCBub2RlX21hcCAqcmVtYWluczsKKwlzdHJ1Y3Qgbm9kZV9tYXAgKnJlbWFpbnNfbmV3OworCXN0cnVjdCBub2RlX21hcCAqcmVtYWluc190bXA7CiAJaW50IGJwX2luZGV4OwogCWludCBzd2FwX3RpbWU7CisJaW50IGVycjsKIAogCS8qIFByZXBhcmUgYnVmZmVyIGZvciBicm9hZGNhc3RpbmcgKGlmIGZpcnN0IHRpbWUgdHJ5aW5nIHRvIHNlbmQgaXQpICovCiAKQEAgLTU1NSw3ICs1NTcsOSBAQAogCiAJLyogU2VuZCBidWZmZXIgb3ZlciBiZWFyZXJzIHVudGlsIGFsbCB0YXJnZXRzIHJlYWNoZWQgKi8KIAkKLQlyZW1haW5zID0gdGlwY19jbHRyX2JjYXN0X25vZGVzOworCXJlbWFpbnMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZV9tYXApLCBHRlBfQVRPTUlDKTsKKwlyZW1haW5zX25ldyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlX21hcCksIEdGUF9BVE9NSUMpOworCSpyZW1haW5zID0gdGlwY19jbHRyX2JjYXN0X25vZGVzOwogCiAJZm9yIChicF9pbmRleCA9IDA7IGJwX2luZGV4IDwgTUFYX0JFQVJFUlM7IGJwX2luZGV4KyspIHsKIAkJc3RydWN0IGJlYXJlciAqcCA9IGJjYmVhcmVyLT5icGFpcnNbYnBfaW5kZXhdLnByaW1hcnk7CkBAIC01NjQsOCArNTY4LDggQEAKIAkJaWYgKCFwKQogCQkJYnJlYWs7CS8qIG5vIG1vcmUgYmVhcmVycyB0byB0cnkgKi8KIAotCQl0aXBjX25tYXBfZGlmZigmcmVtYWlucywgJnAtPm5vZGVzLCAmcmVtYWluc19uZXcpOwotCQlpZiAocmVtYWluc19uZXcuY291bnQgPT0gcmVtYWlucy5jb3VudCkKKwkJdGlwY19ubWFwX2RpZmYocmVtYWlucywgJnAtPm5vZGVzLCByZW1haW5zX25ldyk7CisJCWlmIChyZW1haW5zX25ldy0+Y291bnQgPT0gcmVtYWlucy0+Y291bnQpCiAJCQljb250aW51ZTsJLyogYmVhcmVyIHBhaXIgZG9lc24ndCBhZGQgYW55dGhpbmcgKi8KIAogCQlpZiAoIXAtPnB1YmwuYmxvY2tlZCAmJgpAQCAtNTgzLDE3ICs1ODcsMjcgQEAKIAkJYmNiZWFyZXItPmJwYWlyc1ticF9pbmRleF0ucHJpbWFyeSA9IHM7CiAJCWJjYmVhcmVyLT5icGFpcnNbYnBfaW5kZXhdLnNlY29uZGFyeSA9IHA7CiB1cGRhdGU6Ci0JCWlmIChyZW1haW5zX25ldy5jb3VudCA9PSAwKQotCQkJcmV0dXJuIFRJUENfT0s7CisJCWlmIChyZW1haW5zX25ldy0+Y291bnQgPT0gMCkgeworCQkJZXJyID0gVElQQ19PSzsKKwkJCWdvdG8gb3V0OworCQl9CiAKKwkJLyogc3dhcCBtYXAgKi8KKwkJcmVtYWluc190bXAgPSByZW1haW5zOwogCQlyZW1haW5zID0gcmVtYWluc19uZXc7CisJCXJlbWFpbnNfbmV3ID0gcmVtYWluc190bXA7CiAJfQogCQogCS8qIFVuYWJsZSB0byByZWFjaCBhbGwgdGFyZ2V0cyAqLwogCiAJYmNiZWFyZXItPmJlYXJlci5wdWJsLmJsb2NrZWQgPSAxOwogCWJjbC0+c3RhdHMuYmVhcmVyX2NvbmdzKys7Ci0JcmV0dXJuIH5USVBDX09LOworCWVyciA9IH5USVBDX09LOworCisgb3V0OgorCWtmcmVlKHJlbWFpbnNfbmV3KTsKKwlrZnJlZShyZW1haW5zKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmMKaW5kZXggNjRkY2IwZi4uZTIxM2E4ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmVhcmVyLmMKKysrIGIvbmV0L3RpcGMvYmVhcmVyLmMKQEAgLTQ1LDEwICs0NSwxMCBAQAogCiAjZGVmaW5lIE1BWF9BRERSX1NUUiAzMgogCi1zdGF0aWMgc3RydWN0IG1lZGlhICptZWRpYV9saXN0ID0gMDsKK3N0YXRpYyBzdHJ1Y3QgbWVkaWEgKm1lZGlhX2xpc3QgPSBOVUxMOwogc3RhdGljIHUzMiBtZWRpYV9jb3VudCA9IDA7CiAKLXN0cnVjdCBiZWFyZXIgKnRpcGNfYmVhcmVycyA9IDA7CitzdHJ1Y3QgYmVhcmVyICp0aXBjX2JlYXJlcnMgPSBOVUxMOwogCiAvKioKICAqIG1lZGlhX25hbWVfdmFsaWQgLSB2YWxpZGF0ZSBtZWRpYSBuYW1lCkBAIC03OSw3ICs3OSw3IEBACiAJCWlmICghc3RyY21wKG1fcHRyLT5uYW1lLCBuYW1lKSkKIAkJCXJldHVybiBtX3B0cjsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJCWlmIChiX3B0ci0+YWN0aXZlICYmICghc3RyY21wKGJfcHRyLT5wdWJsLm5hbWUsIG5hbWUpKSkKIAkJCXJldHVybiBiX3B0cjsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtMzA3LDcgKzMwNyw3IEBACiAJCWlmICghc3RyY21wKGJfaWZfbmFtZSwgaWZfbmFtZSkpCiAJCQlyZXR1cm4gYl9wdHI7CiAJfQotCXJldHVybiAwOworCXJldHVybiBOVUxMOwogfQogCiAvKioKQEAgLTU2OSw3ICs1NjksNyBAQAogCiBpbnQgdGlwY19ibG9ja19iZWFyZXIoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgYmVhcmVyICpiX3B0ciA9IDA7CisJc3RydWN0IGJlYXJlciAqYl9wdHIgPSBOVUxMOwogCXN0cnVjdCBsaW5rICpsX3B0cjsKIAlzdHJ1Y3QgbGluayAqdGVtcF9sX3B0cjsKIApAQCAtNjY2LDggKzY2Niw4IEBACiAJfSBlbHNlIHsKIAkJa2ZyZWUodGlwY19iZWFyZXJzKTsKIAkJa2ZyZWUobWVkaWFfbGlzdCk7Ci0JCXRpcGNfYmVhcmVycyA9IDA7Ci0JCW1lZGlhX2xpc3QgPSAwOworCQl0aXBjX2JlYXJlcnMgPSBOVUxMOworCQltZWRpYV9saXN0ID0gTlVMTDsKIAkJcmVzID0gLUVOT01FTTsKIAl9CiAJd3JpdGVfdW5sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKQEAgLTY5MSw4ICs2OTEsOCBAQAogCX0KIAlrZnJlZSh0aXBjX2JlYXJlcnMpOwogCWtmcmVlKG1lZGlhX2xpc3QpOwotCXRpcGNfYmVhcmVycyA9IDA7Ci0JbWVkaWFfbGlzdCA9IDA7CisJdGlwY19iZWFyZXJzID0gTlVMTDsKKwltZWRpYV9saXN0ID0gTlVMTDsKIAltZWRpYV9jb3VudCA9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NsdXN0ZXIuYyBiL25ldC90aXBjL2NsdXN0ZXIuYwppbmRleCBhYjk3NGNhLi4xYWVkODE1IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jbHVzdGVyLmMKKysrIGIvbmV0L3RpcGMvY2x1c3Rlci5jCkBAIC00NCwxMSArNDQsMTEgQEAKICNpbmNsdWRlICJtc2cuaCIKICNpbmNsdWRlICJiZWFyZXIuaCIKIAotdm9pZCB0aXBjX2NsdHJfbXVsdGljYXN0KHN0cnVjdCBjbHVzdGVyICpjX3B0ciwgc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgCi0JCQkgdTMyIGxvd2VyLCB1MzIgdXBwZXIpOwotc3RydWN0IHNrX2J1ZmYgKnRpcGNfY2x0cl9wcmVwYXJlX3JvdXRpbmdfbXNnKHUzMiBkYXRhX3NpemUsIHUzMiBkZXN0KTsKK3N0YXRpYyB2b2lkIHRpcGNfY2x0cl9tdWx0aWNhc3Qoc3RydWN0IGNsdXN0ZXIgKmNfcHRyLCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAorCQkJCXUzMiBsb3dlciwgdTMyIHVwcGVyKTsKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19jbHRyX3ByZXBhcmVfcm91dGluZ19tc2codTMyIGRhdGFfc2l6ZSwgdTMyIGRlc3QpOwogCi1zdHJ1Y3Qgbm9kZSAqKnRpcGNfbG9jYWxfbm9kZXMgPSAwOworc3RydWN0IG5vZGUgKip0aXBjX2xvY2FsX25vZGVzID0gTlVMTDsKIHN0cnVjdCBub2RlX21hcCB0aXBjX2NsdHJfYmNhc3Rfbm9kZXMgPSB7MCx7MCx9fTsKIHUzMiB0aXBjX2hpZ2hlc3RfYWxsb3dlZF9zbGF2ZSA9IDA7CiAKQEAgLTYxLDcgKzYxLDcgQEAKIAogCWNfcHRyID0gKHN0cnVjdCBjbHVzdGVyICopa21hbGxvYyhzaXplb2YoKmNfcHRyKSwgR0ZQX0FUT01JQyk7CiAJaWYgKGNfcHRyID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAltZW1zZXQoY19wdHIsIDAsIHNpemVvZigqY19wdHIpKTsKIAogCWNfcHRyLT5hZGRyID0gdGlwY19hZGRyKHRpcGNfem9uZShhZGRyKSwgdGlwY19jbHVzdGVyKGFkZHIpLCAwKTsKQEAgLTczLDcgKzczLDcgQEAKIAljX3B0ci0+bm9kZXMgPSAoc3RydWN0IG5vZGUgKiopa21hbGxvYyhhbGxvYywgR0ZQX0FUT01JQyk7CiAJaWYgKGNfcHRyLT5ub2RlcyA9PSBOVUxMKSB7CiAJCWtmcmVlKGNfcHRyKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCX0KIAltZW1zZXQoY19wdHItPm5vZGVzLCAwLCBhbGxvYyk7ICAKIAlpZiAoaW5fb3duX2NsdXN0ZXIoYWRkcikpCkBAIC05MSw3ICs5MSw3IEBACiAJfQogCWVsc2UgewogCQlrZnJlZShjX3B0cik7Ci0JCWNfcHRyID0gMDsKKwkJY19wdHIgPSBOVUxMOwogCX0KIAogCXJldHVybiBjX3B0cjsKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiAJYXNzZXJ0KCFpbl9vd25fY2x1c3RlcihjX3B0ci0+YWRkcikpOwogCWlmICghY19wdHItPmhpZ2hlc3Rfbm9kZSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCiAJLyogU3RhcnQgZW50cnkgbXVzdCBiZSByYW5kb20gKi8KIAl3aGlsZSAobWFzayA+IGNfcHRyLT5oaWdoZXN0X25vZGUpIHsKQEAgLTIyMiwxNCArMjIyLDE0IEBACiAJCWlmICh0aXBjX25vZGVfaGFzX2FjdGl2ZV9saW5rcyhjX3B0ci0+bm9kZXNbbl9udW1dKSkKIAkJCXJldHVybiBjX3B0ci0+bm9kZXNbbl9udW1dOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKICAqICAgIFJvdXRpbmcgdGFibGUgbWFuYWdlbWVudDogU2VlIGRlc2NyaXB0aW9uIGluIG5vZGUuYwogICovCiAKLXN0cnVjdCBza19idWZmICp0aXBjX2NsdHJfcHJlcGFyZV9yb3V0aW5nX21zZyh1MzIgZGF0YV9zaXplLCB1MzIgZGVzdCkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19jbHRyX3ByZXBhcmVfcm91dGluZ19tc2codTMyIGRhdGFfc2l6ZSwgdTMyIGRlc3QpCiB7CiAJdTMyIHNpemUgPSBJTlRfSF9TSVpFICsgZGF0YV9zaXplOwogCXN0cnVjdCBza19idWZmICpidWYgPSBidWZfYWNxdWlyZShzaXplKTsKQEAgLTQ5NSw3ICs0OTUsNyBAQAogICogdGlwY19jbHRyX211bHRpY2FzdCAtIG11bHRpY2FzdCBtZXNzYWdlIHRvIGxvY2FsIG5vZGVzIAogICovCiAKLXZvaWQgdGlwY19jbHRyX211bHRpY2FzdChzdHJ1Y3QgY2x1c3RlciAqY19wdHIsIHN0cnVjdCBza19idWZmICpidWYsIAorc3RhdGljIHZvaWQgdGlwY19jbHRyX211bHRpY2FzdChzdHJ1Y3QgY2x1c3RlciAqY19wdHIsIHN0cnVjdCBza19idWZmICpidWYsCiAJCQkgdTMyIGxvd2VyLCB1MzIgdXBwZXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1Zl9jb3B5OwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY2x1c3Rlci5oIGIvbmV0L3RpcGMvY2x1c3Rlci5oCmluZGV4IDk5NjM2NDIuLjFiNGNkMzAgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NsdXN0ZXIuaAorKysgYi9uZXQvdGlwYy9jbHVzdGVyLmgKQEAgLTg2LDcgKzg2LDcgQEAKIAogCWlmICh6X3B0cikKIAkJcmV0dXJuIHpfcHRyLT5jbHVzdGVyc1sxXTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb25maWcuYyBiL25ldC90aXBjL2NvbmZpZy5jCmluZGV4IDNjOGU2NzQuLjQ4YjVkZTIgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvbmZpZy5jCisrKyBiL25ldC90aXBjL2NvbmZpZy5jCkBAIC02ODMsMTEgKzY4MywxMSBAQAogCW1lbXNldCgmbW5nLCAwLCBzaXplb2YobW5nKSk7CiAJSU5JVF9MSVNUX0hFQUQoJm1uZy5saW5rX3N1YnNjcmliZXJzKTsKIAotCXJlcyA9IHRpcGNfYXR0YWNoKCZtbmcudXNlcl9yZWYsIDAsIDApOworCXJlcyA9IHRpcGNfYXR0YWNoKCZtbmcudXNlcl9yZWYsIE5VTEwsIE5VTEwpOwogCWlmIChyZXMpCiAJCWdvdG8gZmFpbGVkOwogCi0JcmVzID0gdGlwY19jcmVhdGVwb3J0KG1uZy51c2VyX3JlZiwgMCwgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLAorCXJlcyA9IHRpcGNfY3JlYXRlcG9ydChtbmcudXNlcl9yZWYsIE5VTEwsIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSwKIAkJCSAgICAgIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkgICAgICBOVUxMLCBjZmdfbmFtZWRfbXNnX2V2ZW50LCBOVUxMLAogCQkJICAgICAgTlVMTCwgJm1uZy5wb3J0X3JlZik7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9kYmcuYyBiL25ldC90aXBjL2RiZy5jCmluZGV4IDRmNGJlZWYuLjI2ZWY5NWQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2RiZy5jCisrKyBiL25ldC90aXBjL2RiZy5jCkBAIC04MSw3ICs4MSw3IEBACiAKIAlwYi0+Y3JzID0gcGItPmJ1ZiA9IHJhdzsKIAlwYi0+c2l6ZSA9IHN6OwotCXBiLT5uZXh0ID0gMDsKKwlwYi0+bmV4dCA9IE5VTEw7CiAJcGItPmJ1ZlswXSA9IDA7CiAJcGItPmJ1Zltzei0xXSA9IH4wOwogfQpAQCAtMjE2LDcgKzIxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCQlwYl9uZXh0ID0gcGItPm5leHQ7Ci0JCXBiLT5uZXh0ID0gMDsKKwkJcGItPm5leHQgPSBOVUxMOwogCQlwYiA9IHBiX25leHQ7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZwcmludF9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2Rpc2NvdmVyLmMgYi9uZXQvdGlwYy9kaXNjb3Zlci5jCmluZGV4IDUzYmE0NjMuLjkyNjAxMzggMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2Rpc2NvdmVyLmMKKysrIGIvbmV0L3RpcGMvZGlzY292ZXIuYwpAQCAtMTEwLDEwICsxMTAsMTAgQEAKICAqIEBiX3B0cjogcHRyIHRvIGJlYXJlciBpc3N1aW5nIG1lc3NhZ2UKICAqLwogCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19kaXNjX2luaXRfbXNnKHUzMiB0eXBlLAotCQkJCSAgIHUzMiByZXFfbGlua3MsCi0JCQkJICAgdTMyIGRlc3RfZG9tYWluLAotCQkJCSAgIHN0cnVjdCBiZWFyZXIgKmJfcHRyKQorc3RhdGljIHN0cnVjdCBza19idWZmICp0aXBjX2Rpc2NfaW5pdF9tc2codTMyIHR5cGUsCisJCQkJCSAgdTMyIHJlcV9saW5rcywKKwkJCQkJICB1MzIgZGVzdF9kb21haW4sCisJCQkJCSAgc3RydWN0IGJlYXJlciAqYl9wdHIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IGJ1Zl9hY3F1aXJlKERTQ19IX1NJWkUpOwogCXN0cnVjdCB0aXBjX21zZyAqbXNnOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZXRoX21lZGlhLmMgYi9uZXQvdGlwYy9ldGhfbWVkaWEuYwppbmRleCAxZjhkODNiLi43YTI1Mjc4IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ldGhfbWVkaWEuYworKysgYi9uZXQvdGlwYy9ldGhfbWVkaWEuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfYmVhcmVyKHN0cnVjdCB0aXBjX2JlYXJlciAqdGJfcHRyKQogewotCSgoc3RydWN0IGV0aF9iZWFyZXIgKil0Yl9wdHItPnVzcl9oYW5kbGUpLT5iZWFyZXIgPSAwOworCSgoc3RydWN0IGV0aF9iZWFyZXIgKil0Yl9wdHItPnVzcl9oYW5kbGUpLT5iZWFyZXIgPSBOVUxMOwogfQogCiAvKioKQEAgLTI4NSw3ICsyODUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRVRIX0JFQVJFUlMgOyBpKyspIHsKIAkJaWYgKGV0aF9iZWFyZXJzW2ldLmJlYXJlcikgewogCQkJZXRoX2JlYXJlcnNbaV0uYmVhcmVyLT5ibG9ja2VkID0gMTsKLQkJCWV0aF9iZWFyZXJzW2ldLmJlYXJlciA9IDA7CisJCQlldGhfYmVhcmVyc1tpXS5iZWFyZXIgPSBOVUxMOwogCQl9CiAJCWlmIChldGhfYmVhcmVyc1tpXS5kZXYpIHsKIAkJCWRldl9yZW1vdmVfcGFjaygmZXRoX2JlYXJlcnNbaV0udGlwY19wYWNrZXRfdHlwZSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmMKaW5kZXggNTExODcyYS4uNzg0YjI0YjYgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2xpbmsuYworKysgYi9uZXQvdGlwYy9saW5rLmMKQEAgLTE1NywxMyArMTU3LDEzIEBACiAJfSBcCiB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJnX3ByaW50X2xpbmsoc3RydWN0IGxpbmsgKmxfcHRyLCBjb25zdCBjaGFyICpzdHIpCitzdGF0aWMgdm9pZCBkYmdfcHJpbnRfbGluayhzdHJ1Y3QgbGluayAqbF9wdHIsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpZiAoREJHX09VVFBVVCkKIAkJbGlua19wcmludChsX3B0ciwgREJHX09VVFBVVCwgc3RyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRiZ19wcmludF9idWZfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnJvb3RfYnVmKQorc3RhdGljIHZvaWQgZGJnX3ByaW50X2J1Zl9jaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqcm9vdF9idWYpCiB7CiAJaWYgKERCR19PVVRQVVQpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IHJvb3RfYnVmOwpAQCAtMTc2LDUwICsxNzYsNTAgQEAKIH0KIAogLyoKLSAqICBTaW1wbGUgaW5saW5lZCBsaW5rIHJvdXRpbmVzCisgKiAgU2ltcGxlIGxpbmsgcm91dGluZXMKICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhbGlnbih1bnNpZ25lZCBpbnQgaSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWxpZ24odW5zaWduZWQgaW50IGkpCiB7CiAJcmV0dXJuIChpICsgMykgJiB+M3U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmtfd29ya2luZ193b3JraW5nKHN0cnVjdCBsaW5rICpsX3B0cikKK3N0YXRpYyBpbnQgbGlua193b3JraW5nX3dvcmtpbmcoc3RydWN0IGxpbmsgKmxfcHRyKQogewogCXJldHVybiAobF9wdHItPnN0YXRlID09IFdPUktJTkdfV09SS0lORyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmtfd29ya2luZ191bmtub3duKHN0cnVjdCBsaW5rICpsX3B0cikKK3N0YXRpYyBpbnQgbGlua193b3JraW5nX3Vua25vd24oc3RydWN0IGxpbmsgKmxfcHRyKQogewogCXJldHVybiAobF9wdHItPnN0YXRlID09IFdPUktJTkdfVU5LTk9XTik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmtfcmVzZXRfdW5rbm93bihzdHJ1Y3QgbGluayAqbF9wdHIpCitzdGF0aWMgaW50IGxpbmtfcmVzZXRfdW5rbm93bihzdHJ1Y3QgbGluayAqbF9wdHIpCiB7CiAJcmV0dXJuIChsX3B0ci0+c3RhdGUgPT0gUkVTRVRfVU5LTk9XTik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmtfcmVzZXRfcmVzZXQoc3RydWN0IGxpbmsgKmxfcHRyKQorc3RhdGljIGludCBsaW5rX3Jlc2V0X3Jlc2V0KHN0cnVjdCBsaW5rICpsX3B0cikKIHsKIAlyZXR1cm4gKGxfcHRyLT5zdGF0ZSA9PSBSRVNFVF9SRVNFVCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmtfYmxvY2tlZChzdHJ1Y3QgbGluayAqbF9wdHIpCitzdGF0aWMgaW50IGxpbmtfYmxvY2tlZChzdHJ1Y3QgbGluayAqbF9wdHIpCiB7CiAJcmV0dXJuIChsX3B0ci0+ZXhwX21zZ19jb3VudCB8fCBsX3B0ci0+YmxvY2tlZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmtfY29uZ2VzdGVkKHN0cnVjdCBsaW5rICpsX3B0cikKK3N0YXRpYyBpbnQgbGlua19jb25nZXN0ZWQoc3RydWN0IGxpbmsgKmxfcHRyKQogewogCXJldHVybiAobF9wdHItPm91dF9xdWV1ZV9zaXplID49IGxfcHRyLT5xdWV1ZV9saW1pdFswXSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIGxpbmtfbWF4X3BrdChzdHJ1Y3QgbGluayAqbF9wdHIpCitzdGF0aWMgdTMyIGxpbmtfbWF4X3BrdChzdHJ1Y3QgbGluayAqbF9wdHIpCiB7CiAJcmV0dXJuIGxfcHRyLT5tYXhfcGt0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbGlua19pbml0X21heF9wa3Qoc3RydWN0IGxpbmsgKmxfcHRyKQorc3RhdGljIHZvaWQgbGlua19pbml0X21heF9wa3Qoc3RydWN0IGxpbmsgKmxfcHRyKQogewogCXUzMiBtYXhfcGt0OwogCQpAQCAtMjM2LDIwICsyMzYsMjAgQEAKICAgICAgICAgbF9wdHItPm1heF9wa3RfcHJvYmVzID0gMDsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgbGlua19uZXh0X3NlbnQoc3RydWN0IGxpbmsgKmxfcHRyKQorc3RhdGljIHUzMiBsaW5rX25leHRfc2VudChzdHJ1Y3QgbGluayAqbF9wdHIpCiB7CiAJaWYgKGxfcHRyLT5uZXh0X291dCkKIAkJcmV0dXJuIG1zZ19zZXFubyhidWZfbXNnKGxfcHRyLT5uZXh0X291dCkpOwogCXJldHVybiBtb2QobF9wdHItPm5leHRfb3V0X25vKTsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgbGlua19sYXN0X3NlbnQoc3RydWN0IGxpbmsgKmxfcHRyKQorc3RhdGljIHUzMiBsaW5rX2xhc3Rfc2VudChzdHJ1Y3QgbGluayAqbF9wdHIpCiB7CiAJcmV0dXJuIG1vZChsaW5rX25leHRfc2VudChsX3B0cikgLSAxKTsKIH0KIAogLyoKLSAqICBTaW1wbGUgbm9uLWlubGluZWQgbGluayByb3V0aW5lcyAoaS5lLiByZWZlcmVuY2VkIG91dHNpZGUgdGhpcyBmaWxlKQorICogIFNpbXBsZSBub24tc3RhdGljIGxpbmsgcm91dGluZXMgKGkuZS4gcmVmZXJlbmNlZCBvdXRzaWRlIHRoaXMgZmlsZSkKICAqLwogCiBpbnQgdGlwY19saW5rX2lzX3VwKHN0cnVjdCBsaW5rICpsX3B0cikKQEAgLTM5Niw3ICszOTYsNyBAQAogCXRpcGNfbm9kZV91bmxvY2sobF9wdHItPm93bmVyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGxpbmtfc2V0X3RpbWVyKHN0cnVjdCBsaW5rICpsX3B0ciwgdTMyIHRpbWUpCitzdGF0aWMgdm9pZCBsaW5rX3NldF90aW1lcihzdHJ1Y3QgbGluayAqbF9wdHIsIHUzMiB0aW1lKQogewogCWtfc3RhcnRfdGltZXIoJmxfcHRyLT50aW1lciwgdGltZSk7CiB9CkBAIC01NzMsNyArNTczLDcgQEAKIAkJaWYgKHdpbiA8PSAwKQogCQkJYnJlYWs7CiAJCWxpc3RfZGVsX2luaXQoJnBfcHRyLT53YWl0X2xpc3QpOwotCQlwX3B0ci0+Y29uZ2VzdGVkX2xpbmsgPSAwOworCQlwX3B0ci0+Y29uZ2VzdGVkX2xpbmsgPSBOVUxMOwogCQlhc3NlcnQocF9wdHItPndha2V1cCk7CiAJCXNwaW5fbG9ja19iaChwX3B0ci0+cHVibC5sb2NrKTsKIAkJcF9wdHItPnB1YmwuY29uZ2VzdGVkID0gMDsKQEAgLTEwMDQsOSArMTAwNCw5IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsaW5rX2FkZF90b19vdXRxdWV1ZShzdHJ1Y3QgbGluayAqbF9wdHIsIAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCAKLQkJCQkJc3RydWN0IHRpcGNfbXNnICptc2cpCitzdGF0aWMgdm9pZCBsaW5rX2FkZF90b19vdXRxdWV1ZShzdHJ1Y3QgbGluayAqbF9wdHIsCisJCQkJIHN0cnVjdCBza19idWZmICpidWYsCisJCQkJIHN0cnVjdCB0aXBjX21zZyAqbXNnKQogewogCXUzMiBhY2sgPSBtb2QobF9wdHItPm5leHRfaW5fbm8gLSAxKTsKIAl1MzIgc2Vxbm8gPSBtb2QobF9wdHItPm5leHRfb3V0X25vKyspOwpAQCAtMTE1Niw4ICsxMTU2LDggQEAKICAqIExpbmsgaXMgbG9ja2VkLiBSZXR1cm5zIHVzZXIgZGF0YSBsZW5ndGguCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbGlua19zZW5kX2J1Zl9mYXN0KHN0cnVjdCBsaW5rICpsX3B0ciwgc3RydWN0IHNrX2J1ZmYgKmJ1ZiwKLQkJCQkgICAgIHUzMiAqdXNlZF9tYXhfcGt0KQorc3RhdGljIGludCBsaW5rX3NlbmRfYnVmX2Zhc3Qoc3RydWN0IGxpbmsgKmxfcHRyLCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAorCQkJICAgICAgdTMyICp1c2VkX21heF9wa3QpCiB7CiAJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKGJ1Zik7CiAJaW50IHJlcyA9IG1zZ19kYXRhX3N6KG1zZyk7CkBAIC0xMzU1LDcgKzEzNTUsNyBAQAogCWZyYWdtX2NycyA9IDA7CiAJZnJhZ21fcmVzdCA9IDA7CiAJc2VjdF9yZXN0ID0gMDsKLQlzZWN0X2NycyA9IDA7CisJc2VjdF9jcnMgPSBOVUxMOwogCWN1cnJfc2VjdCA9IC0xOwogCiAJLyogUHJlcGFyZSByZXVzYWJsZSBmcmFnbWVudCBoZWFkZXI6ICovCkBAIC0xNTQ5LDcgKzE1NDksNyBAQAogCQkJbXNnX2RiZyhidWZfbXNnKGJ1ZiksICI+REVGLVBST1Q+Iik7CiAJCQlsX3B0ci0+dW5hY2tlZF93aW5kb3cgPSAwOwogCQkJYnVmX2Rpc2NhcmQoYnVmKTsKLQkJCWxfcHRyLT5wcm90b19tc2dfcXVldWUgPSAwOworCQkJbF9wdHItPnByb3RvX21zZ19xdWV1ZSA9IE5VTEw7CiAJCQlyZXR1cm4gVElQQ19PSzsKIAkJfSBlbHNlIHsKIAkJCW1zZ19kYmcoYnVmX21zZyhidWYpLCAifD5ERUYtUFJPVD4iKTsKQEAgLTE2MjksNyArMTYyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlwY19tc2dfcHJpbnQoVElQQ19DT05TLCBidWZfbXNnKGJ1ZiksICI+UkVUUj4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvKCIuLi5SZXRyYW5zbWl0dGVkICV1IHRpbWVzXG4iLAogCQkJCQkgICAgIGxfcHRyLT5zdGFsZV9jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19wcmludChsX3B0ciwgVElQQ19DT05TLCAiUmVzZXR0aW5nIExpbmtcbiIpOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3ByaW50KGxfcHRyLCBUSVBDX0NPTlMsICJSZXNldHRpbmcgTGlua1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlwY19saW5rX3Jlc2V0KGxfcHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTg2MCw3ICsxODYwLDcgQEAKIAkJCXN0cnVjdCBza19idWZmICoqdGFpbCwKIAkJCXN0cnVjdCBza19idWZmICpidWYpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnByZXYgPSAwOworCXN0cnVjdCBza19idWZmICpwcmV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqY3JzID0gKmhlYWQ7CiAJdTMyIHNlcV9ubyA9IG1zZ19zZXFubyhidWZfbXNnKGJ1ZikpOwogCkBAIC0xOTUzLDcgKzE5NTMsNyBAQAogdm9pZCB0aXBjX2xpbmtfc2VuZF9wcm90b19tc2coc3RydWN0IGxpbmsgKmxfcHRyLCB1MzIgbXNnX3R5cCwgaW50IHByb2JlX21zZywKIAkJCSAgICAgIHUzMiBnYXAsIHUzMiB0b2xlcmFuY2UsIHUzMiBwcmlvcml0eSwgdTMyIGFja19tdHUpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IE5VTEw7CiAJc3RydWN0IHRpcGNfbXNnICptc2cgPSBsX3B0ci0+cG1zZzsKICAgICAgICAgdTMyIG1zZ19zaXplID0gc2l6ZW9mKGxfcHRyLT5wcm90b19tc2cpOwogCkBAIC0yNDI2LDcgKzI0MjYsNyBAQAogCQl9CiAJfQogZXhpdDoKLQkqYnVmID0gMDsKKwkqYnVmID0gTlVMTDsKIAlidWZfZGlzY2FyZCh0dW5uZWxfYnVmKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI1MzksNDIgKzI1MzksMzcgQEAKICAqIHBlbmRpbmcgbWVzc2FnZS4gVGhpcyBtYWtlcyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHVuZWNlc3NhcnkuCiAgKi8KIAotc3RhdGljIGlubGluZSB1MzIgZ2V0X2xvbmdfbXNnX3NlcW5vKHN0cnVjdCBza19idWZmICpidWYpCi17Ci0JcmV0dXJuIG1zZ19zZXFubyhidWZfbXNnKGJ1ZikpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2xvbmdfbXNnX3NlcW5vKHN0cnVjdCBza19idWZmICpidWYsIHUzMiBzZXFubykKK3N0YXRpYyB2b2lkIHNldF9sb25nX21zZ19zZXFubyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgc2Vxbm8pCiB7CiAJbXNnX3NldF9zZXFubyhidWZfbXNnKGJ1ZiksIHNlcW5vKTsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgZ2V0X2ZyYWdtX3NpemUoc3RydWN0IHNrX2J1ZmYgKmJ1ZikKK3N0YXRpYyB1MzIgZ2V0X2ZyYWdtX3NpemUoc3RydWN0IHNrX2J1ZmYgKmJ1ZikKIHsKIAlyZXR1cm4gbXNnX2FjayhidWZfbXNnKGJ1ZikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZyYWdtX3NpemUoc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdTMyIHN6KQorc3RhdGljIHZvaWQgc2V0X2ZyYWdtX3NpemUoc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdTMyIHN6KQogewogCW1zZ19zZXRfYWNrKGJ1Zl9tc2coYnVmKSwgc3opOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfZXhwZWN0ZWRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKmJ1ZikKK3N0YXRpYyB1MzIgZ2V0X2V4cGVjdGVkX2ZyYWdzKHN0cnVjdCBza19idWZmICpidWYpCiB7CiAJcmV0dXJuIG1zZ19iY2FzdF9hY2soYnVmX21zZyhidWYpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9leHBlY3RlZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgZXhwKQorc3RhdGljIHZvaWQgc2V0X2V4cGVjdGVkX2ZyYWdzKHN0cnVjdCBza19idWZmICpidWYsIHUzMiBleHApCiB7CiAJbXNnX3NldF9iY2FzdF9hY2soYnVmX21zZyhidWYpLCBleHApOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfdGltZXJfY250KHN0cnVjdCBza19idWZmICpidWYpCitzdGF0aWMgdTMyIGdldF90aW1lcl9jbnQoc3RydWN0IHNrX2J1ZmYgKmJ1ZikKIHsKIAlyZXR1cm4gbXNnX3Jlcm91dGVfY250KGJ1Zl9tc2coYnVmKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbmNyX3RpbWVyX2NudChzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQorc3RhdGljIHZvaWQgaW5jcl90aW1lcl9jbnQoc3RydWN0IHNrX2J1ZmYgKmJ1ZikKIHsKIAltc2dfaW5jcl9yZXJvdXRlX2NudChidWZfbXNnKGJ1ZikpOwogfQpAQCAtMjU4NiwxMyArMjU4MSwxMyBAQAogaW50IHRpcGNfbGlua19yZWN2X2ZyYWdtZW50KHN0cnVjdCBza19idWZmICoqcGVuZGluZywgc3RydWN0IHNrX2J1ZmYgKipmYiwgCiAJCQkgICAgc3RydWN0IHRpcGNfbXNnICoqbSkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcHJldiA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKnByZXYgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpmYnVmID0gKmZiOwogCXN0cnVjdCB0aXBjX21zZyAqZnJhZ20gPSBidWZfbXNnKGZidWYpOwogCXN0cnVjdCBza19idWZmICpwYnVmID0gKnBlbmRpbmc7CiAJdTMyIGxvbmdfbXNnX3NlcV9ubyA9IG1zZ19sb25nX21zZ25vKGZyYWdtKTsKIAotCSpmYiA9IDA7CisJKmZiID0gTlVMTDsKIAltc2dfZGJnKGZyYWdtLCJGUkc8UkVDPCIpOwogCiAJLyogSXMgdGhlcmUgYW4gaW5jb21wbGV0ZSBtZXNzYWdlIHdhaXRpbmcgZm9yIHRoaXMgZnJhZ21lbnQ/ICovCkBAIC0yNjcwLDggKzI2NjUsOCBAQAogCiBzdGF0aWMgdm9pZCBsaW5rX2NoZWNrX2RlZnJhZ21fYnVmcyhzdHJ1Y3QgbGluayAqbF9wdHIpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnByZXYgPSAwOwotCXN0cnVjdCBza19idWZmICpuZXh0ID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJldiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKm5leHQgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpidWYgPSBsX3B0ci0+ZGVmcmFnbV9idWY7CiAKIAlpZiAoIWJ1ZikKQEAgLTI3NTAsMTkgKzI3NDUsMTkgQEAKIAlzdHJ1Y3QgbGluayAqbF9wdHI7IAogCiAJaWYgKCFsaW5rX25hbWVfdmFsaWRhdGUobmFtZSwgJmxpbmtfbmFtZV9wYXJ0cykpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAogCWJfcHRyID0gdGlwY19iZWFyZXJfZmluZF9pbnRlcmZhY2UobGlua19uYW1lX3BhcnRzLmlmX2xvY2FsKTsKIAlpZiAoIWJfcHRyKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAKIAkqbm9kZSA9IHRpcGNfbm9kZV9maW5kKGxpbmtfbmFtZV9wYXJ0cy5hZGRyX3BlZXIpOyAKIAlpZiAoISpub2RlKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAKIAlsX3B0ciA9ICgqbm9kZSktPmxpbmtzW2JfcHRyLT5pZGVudGl0eV07CiAJaWYgKCFsX3B0ciB8fCBzdHJjbXAobF9wdHItPm5hbWUsIG5hbWUpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gbF9wdHI7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKaW5kZXggODMwZjkwOS4uOTUzMzA3YSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwpAQCAtMTY4LDggKzE2OCw4IEBACiB2b2lkIHRpcGNfbmFtZWRfbm9kZV91cCh1bnNpZ25lZCBsb25nIG5vZGUpCiB7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsOwotCXN0cnVjdCBkaXN0cl9pdGVtICppdGVtID0gMDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gMDsKKwlzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbSA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IE5VTEw7CiAJdTMyIGxlZnQgPSAwOwogCXUzMiByZXN0OwogCXUzMiBtYXhfaXRlbV9idWY7CkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJCSAgICAiPCV1LiV1LiV1PlxuIiwgdGlwY196b25lKG5vZGUpLCAKIAkJCSAgICB0aXBjX2NsdXN0ZXIobm9kZSksIHRpcGNfbm9kZShub2RlKSk7CiAJCQl0aXBjX2xpbmtfc2VuZChidWYsIG5vZGUsIG5vZGUpOwotCQkJYnVmID0gMDsKKwkJCWJ1ZiA9IE5VTEw7CiAJCX0KIAl9CiBleGl0OgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCmluZGV4IDNmNGIyM2IuLmQxMjk0MjIgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuYworKysgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJjbHVzdGVyLmgiCiAjaW5jbHVkZSAiYmNhc3QuaCIKIAotaW50IHRpcGNfbmFtZXRibF9zaXplID0gMTAyNDsJCS8qIG11c3QgYmUgYSBwb3dlciBvZiAyICovCitzdGF0aWMgaW50IHRpcGNfbmFtZXRibF9zaXplID0gMTAyNDsJCS8qIG11c3QgYmUgYSBwb3dlciBvZiAyICovCiAKIC8qKgogICogc3RydWN0IHN1Yl9zZXEgLSBjb250YWluZXIgZm9yIGFsbCBwdWJsaXNoZWQgaW5zdGFuY2VzIG9mIGEgbmFtZSBzZXF1ZW5jZQpAQCAtMTA0LDcgKzEwNCw3IEBACiByd2xvY2tfdCB0aXBjX25hbWV0YmxfbG9jayA9IFJXX0xPQ0tfVU5MT0NLRUQ7CiAKIAotc3RhdGljIGlubGluZSBpbnQgaGFzaChpbnQgeCkKK3N0YXRpYyBpbnQgaGFzaChpbnQgeCkKIHsKIAlyZXR1cm4oeCAmICh0aXBjX25hbWV0Ymxfc2l6ZSAtIDEpKTsKIH0KQEAgLTEyMSw3ICsxMjEsNyBAQAogCQkoc3RydWN0IHB1YmxpY2F0aW9uICopa21hbGxvYyhzaXplb2YoKnB1YmwpLCBHRlBfQVRPTUlDKTsKIAlpZiAocHVibCA9PSBOVUxMKSB7CiAJCXdhcm4oIk1lbW9yeSBzcXVlZXplOyBmYWlsZWQgdG8gY3JlYXRlIHB1YmxpY2F0aW9uXG4iKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCX0KIAogCW1lbXNldChwdWJsLCAwLCBzaXplb2YoKnB1YmwpKTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogICogdGlwY19zdWJzZXFfYWxsb2MgLSBhbGxvY2F0ZSBhIHNwZWNpZmllZCBudW1iZXIgb2Ygc3ViLXNlcXVlbmNlIHN0cnVjdHVyZXMKICAqLwogCi1zdHJ1Y3Qgc3ViX3NlcSAqdGlwY19zdWJzZXFfYWxsb2ModTMyIGNudCkKK3N0YXRpYyBzdHJ1Y3Qgc3ViX3NlcSAqdGlwY19zdWJzZXFfYWxsb2ModTMyIGNudCkKIHsKIAl1MzIgc3ogPSBjbnQgKiBzaXplb2Yoc3RydWN0IHN1Yl9zZXEpOwogCXN0cnVjdCBzdWJfc2VxICpzc2VxID0gKHN0cnVjdCBzdWJfc2VxICopa21hbGxvYyhzeiwgR0ZQX0FUT01JQyk7CkBAIC0xNTgsNyArMTU4LDcgQEAKICAqIEFsbG9jYXRlcyBhIHNpbmdsZSBzdWItc2VxdWVuY2Ugc3RydWN0dXJlIGFuZCBzZXRzIGl0IHRvIGFsbCAwJ3MuCiAgKi8KIAotc3RydWN0IG5hbWVfc2VxICp0aXBjX25hbWVzZXFfY3JlYXRlKHUzMiB0eXBlLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2VxX2hlYWQpCitzdGF0aWMgc3RydWN0IG5hbWVfc2VxICp0aXBjX25hbWVzZXFfY3JlYXRlKHUzMiB0eXBlLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqc2VxX2hlYWQpCiB7CiAJc3RydWN0IG5hbWVfc2VxICpuc2VxID0gCiAJCShzdHJ1Y3QgbmFtZV9zZXEgKilrbWFsbG9jKHNpemVvZigqbnNlcSksIEdGUF9BVE9NSUMpOwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCXdhcm4oIk1lbW9yeSBzcXVlZXplOyBmYWlsZWQgdG8gY3JlYXRlIG5hbWUgc2VxdWVuY2VcbiIpOwogCQlrZnJlZShuc2VxKTsKIAkJa2ZyZWUoc3NlcSk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAltZW1zZXQobnNlcSwgMCwgc2l6ZW9mKCpuc2VxKSk7CkBAIC0xOTAsOCArMTkwLDggQEAKICAqIFZlcnkgdGltZS1jcml0aWNhbCwgc28gYmluYXJ5IHNlYXJjaGVzIHRocm91Z2ggc3ViLXNlcXVlbmNlIGFycmF5LgogICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN1Yl9zZXEgKm5hbWVzZXFfZmluZF9zdWJzZXEoc3RydWN0IG5hbWVfc2VxICpuc2VxLCAKLQkJCQkJCSAgdTMyIGluc3RhbmNlKQorc3RhdGljIHN0cnVjdCBzdWJfc2VxICpuYW1lc2VxX2ZpbmRfc3Vic2VxKHN0cnVjdCBuYW1lX3NlcSAqbnNlcSwKKwkJCQkJICAgdTMyIGluc3RhbmNlKQogewogCXN0cnVjdCBzdWJfc2VxICpzc2VxcyA9IG5zZXEtPnNzZXFzOwogCWludCBsb3cgPSAwOwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJCWVsc2UKIAkJCXJldHVybiAmc3NlcXNbbWlkXTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtMjQzLDkgKzI0Myw5IEBACiAgKiB0aXBjX25hbWVzZXFfaW5zZXJ0X3B1YmwgLSAKICAqLwogCi1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXNlcV9pbnNlcnRfcHVibChzdHJ1Y3QgbmFtZV9zZXEgKm5zZXEsCi0JCQkJCXUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlciwKLQkJCQkJdTMyIHNjb3BlLCB1MzIgbm9kZSwgdTMyIHBvcnQsIHUzMiBrZXkpCitzdGF0aWMgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWVzZXFfaW5zZXJ0X3B1Ymwoc3RydWN0IG5hbWVfc2VxICpuc2VxLAorCQkJCQkJICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlciwKKwkJCQkJCSAgICB1MzIgc2NvcGUsIHUzMiBub2RlLCB1MzIgcG9ydCwgdTMyIGtleSkKIHsKIAlzdHJ1Y3Qgc3Vic2NyaXB0aW9uICpzOwogCXN0cnVjdCBzdWJzY3JpcHRpb24gKnN0OwpAQCAtMjYzLDcgKzI2Myw3IEBACiAKIAkJaWYgKChzc2VxLT5sb3dlciAhPSBsb3dlcikgfHwgKHNzZXEtPnVwcGVyICE9IHVwcGVyKSkgewogCQkJd2FybigiT3ZlcmxhcHBpbmcgcHVibCA8JXUsJXUsJXU+XG4iLCB0eXBlLCBsb3dlciwgdXBwZXIpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0gZWxzZSB7CiAJCXUzMiBpbnNwb3M7CkBAIC0yNzgsNyArMjc4LDcgQEAKIAkJaWYgKChpbnNwb3MgPCBuc2VxLT5maXJzdF9mcmVlKSAmJgogCQkgICAgKHVwcGVyID49IG5zZXEtPnNzZXFzW2luc3Bvc10ubG93ZXIpKSB7CiAJCQl3YXJuKCJPdmVybGFwcGluZyBwdWJsIDwldSwldSwldT5cbiIsIHR5cGUsIGxvd2VyLCB1cHBlcik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAKIAkJLyogRW5zdXJlIHRoZXJlIGlzIHNwYWNlIGZvciBuZXcgc3ViLXNlcXVlbmNlICovCkBAIC0yOTQsNyArMjk0LDcgQEAKIAkJCQluc2VxLT5hbGxvYyAqPSAyOwogCQkJfSBlbHNlIHsKIAkJCQl3YXJuKCJNZW1vcnkgc3F1ZWV6ZTsgZmFpbGVkIHRvIGNyZWF0ZSBzdWItc2VxdWVuY2VcbiIpOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CiAJCWRiZygiSGF2ZSAldSBzc2VxcyBmb3IgdHlwZSAldVxuIiwgbnNlcS0+YWxsb2MsIHR5cGUpOwpAQCAtMzE5LDcgKzMxOSw3IEBACiAKIAlwdWJsID0gcHVibF9jcmVhdGUodHlwZSwgbG93ZXIsIHVwcGVyLCBzY29wZSwgbm9kZSwgcG9ydCwga2V5KTsKIAlpZiAoIXB1YmwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAlkYmcoImluc2VydGluZyBwdWJsICV4LCBub2RlPSV4IHB1YmwtPm5vZGU9JXgsIHN1YnNjci0+bm9kZT0leFxuIiwKIAkgICAgcHVibCwgbm9kZSwgcHVibC0+bm9kZSwgcHVibC0+c3Vic2NyLm5vZGUpOwogCkBAIC0zNjksOCArMzY5LDggQEAKICAqIHRpcGNfbmFtZXNlcV9yZW1vdmVfcHVibCAtCiAgKi8KIAotc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWVzZXFfcmVtb3ZlX3B1Ymwoc3RydWN0IG5hbWVfc2VxICpuc2VxLCB1MzIgaW5zdCwKLQkJCQkJICAgICB1MzIgbm9kZSwgdTMyIHJlZiwgdTMyIGtleSkKK3N0YXRpYyBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXNlcV9yZW1vdmVfcHVibChzdHJ1Y3QgbmFtZV9zZXEgKm5zZXEsIHUzMiBpbnN0LAorCQkJCQkJICAgIHUzMiBub2RlLCB1MzIgcmVmLCB1MzIga2V5KQogewogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnByZXY7CkBAIC0zOTQsNyArMzk0LDcgQEAKIAkJCSAgICBpLCAmbnNlcS0+c3NlcXNbaV0sIG5zZXEtPnNzZXFzW2ldLmxvd2VyLAogCQkJICAgIG5zZXEtPnNzZXFzW2ldLnVwcGVyKTsKIAkJfQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCWRiZygibmFtZXNlcV9yZW1vdmU6IHNlcTogJXgsIHNzZXEgJXgsIDwldSwldT4ga2V5ICV1XG4iLAogCSAgICBuc2VxLCBzc2VxLCBuc2VxLT50eXBlLCBpbnN0LCBrZXkpOwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJCXByZXYtPnpvbmVfbGlzdF9uZXh0ID0gcHVibC0+em9uZV9saXN0X25leHQ7CiAJCXNzZXEtPnpvbmVfbGlzdCA9IHB1YmwtPnpvbmVfbGlzdF9uZXh0OwogCX0gZWxzZSB7Ci0JCXNzZXEtPnpvbmVfbGlzdCA9IDA7CisJCXNzZXEtPnpvbmVfbGlzdCA9IE5VTEw7CiAJfQogCiAJaWYgKGluX293bl9jbHVzdGVyKG5vZGUpKSB7CkBAIC00MzEsNyArNDMxLDcgQEAKIAkJCXByZXYtPmNsdXN0ZXJfbGlzdF9uZXh0ID0gcHVibC0+Y2x1c3Rlcl9saXN0X25leHQ7CiAJCQlzc2VxLT5jbHVzdGVyX2xpc3QgPSBwdWJsLT5jbHVzdGVyX2xpc3RfbmV4dDsKIAkJfSBlbHNlIHsKLQkJCXNzZXEtPmNsdXN0ZXJfbGlzdCA9IDA7CisJCQlzc2VxLT5jbHVzdGVyX2xpc3QgPSBOVUxMOwogCQl9CiAJfQogCkBAIC00NTAsNyArNDUwLDcgQEAKIAkJCXByZXYtPm5vZGVfbGlzdF9uZXh0ID0gcHVibC0+bm9kZV9saXN0X25leHQ7CiAJCQlzc2VxLT5ub2RlX2xpc3QgPSBwdWJsLT5ub2RlX2xpc3RfbmV4dDsKIAkJfSBlbHNlIHsKLQkJCXNzZXEtPm5vZGVfbGlzdCA9IDA7CisJCQlzc2VxLT5ub2RlX2xpc3QgPSBOVUxMOwogCQl9CiAJfQogCWFzc2VydCghcHVibC0+bm9kZSB8fCAocHVibC0+bm9kZSA9PSBub2RlKSk7CkBAIC01MzUsNyArNTM1LDcgQEAKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBOVUxMOwogfTsKIAogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwodTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyLApAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJaWYgKGxvd2VyID4gdXBwZXIpIHsKIAkJd2FybigiRmFpbGVkIHRvIHB1Ymxpc2ggaWxsZWdhbCA8JXUsJXUsJXU+XG4iLAogCQkgICAgIHR5cGUsIGxvd2VyLCB1cHBlcik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlkYmcoIlB1Ymxpc2hpbmcgPCV1LCV1LCV1PiBmcm9tICV4XG4iLCB0eXBlLCBsb3dlciwgdXBwZXIsIG5vZGUpOwpAQCAtNTU2LDcgKzU1Niw3IEBACiAJCWRiZygidGlwY19uYW1ldGJsX2luc2VydF9wdWJsOiBjcmVhdGVkICV4XG4iLCBzZXEpOwogCX0KIAlpZiAoIXNlcSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCiAJYXNzZXJ0KHNlcS0+dHlwZSA9PSB0eXBlKTsKIAlyZXR1cm4gdGlwY19uYW1lc2VxX2luc2VydF9wdWJsKHNlcSwgdHlwZSwgbG93ZXIsIHVwcGVyLApAQCAtNTcwLDcgKzU3MCw3IEBACiAJc3RydWN0IG5hbWVfc2VxICpzZXEgPSBuYW1ldGJsX2ZpbmRfc2VxKHR5cGUpOwogCiAJaWYgKCFzZXEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAogCWRiZygiV2l0aGRyYXdpbmcgPCV1LCV1PiBmcm9tICV4XG4iLCB0eXBlLCBsb3dlciwgbm9kZSk7CiAJcHVibCA9IHRpcGNfbmFtZXNlcV9yZW1vdmVfcHVibChzZXEsIGxvd2VyLCBub2RlLCByZWYsIGtleSk7CkBAIC01OTQsNyArNTk0LDcgQEAKIHUzMiB0aXBjX25hbWV0YmxfdHJhbnNsYXRlKHUzMiB0eXBlLCB1MzIgaW5zdGFuY2UsIHUzMiAqZGVzdG5vZGUpCiB7CiAJc3RydWN0IHN1Yl9zZXEgKnNzZXE7Ci0Jc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsID0gMDsKKwlzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwgPSBOVUxMOwogCXN0cnVjdCBuYW1lX3NlcSAqc2VxOwogCXUzMiByZWY7CiAKQEAgLTc0MCwxMiArNzQwLDEyIEBACiAJaWYgKHRhYmxlLmxvY2FsX3B1YmxfY291bnQgPj0gdGlwY19tYXhfcHVibGljYXRpb25zKSB7CiAJCXdhcm4oIkZhaWxlZCBwdWJsaXNoOiBtYXggJXUgbG9jYWwgcHVibGljYXRpb25cbiIsIAogCQkgICAgIHRpcGNfbWF4X3B1YmxpY2F0aW9ucyk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAl9CiAJaWYgKCh0eXBlIDwgVElQQ19SRVNFUlZFRF9UWVBFUykgJiYgIWF0b21pY19yZWFkKCZyc3ZfcHVibF9vaykpIHsKIAkJd2FybigiRmFpbGVkIHRvIHB1Ymxpc2ggcmVzZXJ2ZWQgbmFtZSA8JXUsJXUsJXU+XG4iLAogCQkgICAgIHR5cGUsIGxvd2VyLCB1cHBlcik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAl3cml0ZV9sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7CkBAIC05ODMsNiArOTgzLDcgQEAKIAl9CiB9CiAKKyNpZiAwCiB2b2lkIHRpcGNfbmFtZXRibF9wcmludChzdHJ1Y3QgcHJpbnRfYnVmICpidWYsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAl0aXBjX3ByaW50ZihidWYsIHN0cik7CkBAIC05OTAsNiArOTkxLDcgQEAKIAluYW1ldGJsX2xpc3QoYnVmLCAwLCAwLCAwLCAwKTsKIAlyZWFkX3VubG9ja19iaCgmdGlwY19uYW1ldGJsX2xvY2spOwogfQorI2VuZGlmCiAKICNkZWZpbmUgTUFYX05BTUVfVEJMX1FVRVJZIDMyNzY4CiAKQEAgLTEwMjMsMTAgKzEwMjUsMTIgQEAKIAlyZXR1cm4gYnVmOwogfQogCisjaWYgMAogdm9pZCB0aXBjX25hbWV0YmxfZHVtcCh2b2lkKQogewogCW5hbWV0YmxfbGlzdChUSVBDX0NPTlMsIDAsIDAsIDAsIDApOwogfQorI2VuZGlmCiAKIGludCB0aXBjX25hbWV0YmxfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmMgYi9uZXQvdGlwYy9uZXQuYwppbmRleCAwNzQ4OTFhLi5mN2M4MjIzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXQuYworKysgYi9uZXQvdGlwYy9uZXQuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAqLwogCiByd2xvY2tfdCB0aXBjX25ldF9sb2NrID0gUldfTE9DS19VTkxPQ0tFRDsKLXN0cnVjdCBuZXR3b3JrIHRpcGNfbmV0ID0geyAwIH07CitzdHJ1Y3QgbmV0d29yayB0aXBjX25ldCA9IHsgTlVMTCB9OwogCiBzdHJ1Y3Qgbm9kZSAqdGlwY19uZXRfc2VsZWN0X3JlbW90ZV9ub2RlKHUzMiBhZGRyLCB1MzIgcmVmKSAKIHsKQEAgLTEyOCwxMyArMTI4LDE0IEBACiAJcmV0dXJuIHRpcGNfem9uZV9zZWxlY3Rfcm91dGVyKHRpcGNfbmV0LnpvbmVzW3RpcGNfem9uZShhZGRyKV0sIGFkZHIsIHJlZik7CiB9CiAKLQorI2lmIDAKIHUzMiB0aXBjX25ldF9uZXh0X25vZGUodTMyIGEpCiB7CiAJaWYgKHRpcGNfbmV0LnpvbmVzW3RpcGNfem9uZShhKV0pCiAJCXJldHVybiB0aXBjX3pvbmVfbmV4dF9ub2RlKGEpOwogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHZvaWQgdGlwY19uZXRfcmVtb3ZlX2FzX3JvdXRlcih1MzIgcm91dGVyKQogewpAQCAtMTgxLDcgKzE4Miw3IEBACiAJCXRpcGNfem9uZV9kZWxldGUodGlwY19uZXQuem9uZXNbel9udW1dKTsKIAl9CiAJa2ZyZWUodGlwY19uZXQuem9uZXMpOwotCXRpcGNfbmV0LnpvbmVzID0gMDsKKwl0aXBjX25ldC56b25lcyA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldF9yb3V0ZV9uYW1lZF9tc2coc3RydWN0IHNrX2J1ZmYgKmJ1ZikKZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuYwppbmRleCA2ZDY1MDEwLi4wZDVkYjA2IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ub2RlLmMKKysrIGIvbmV0L3RpcGMvbm9kZS5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAl1MzIgaTsKIAl1MzIgaGlnaGVzdF9wcmlvID0gMDsKIAotICAgICAgICBhY3RpdmVbMF0gPSBhY3RpdmVbMV0gPSAwOworICAgICAgICBhY3RpdmVbMF0gPSBhY3RpdmVbMV0gPSBOVUxMOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9CRUFSRVJTOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGluayAqbF9wdHIgPSBuX3B0ci0+bGlua3NbaV07CkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJKG5fcHRyLT5hY3RpdmVfbGlua3NbMF0gIT0gbl9wdHItPmFjdGl2ZV9saW5rc1sxXSkpOwogfQogCi1pbnQgdGlwY19ub2RlX2hhc19hY3RpdmVfcm91dGVzKHN0cnVjdCBub2RlICpuX3B0cikKK3N0YXRpYyBpbnQgdGlwY19ub2RlX2hhc19hY3RpdmVfcm91dGVzKHN0cnVjdCBub2RlICpuX3B0cikKIHsKIAlyZXR1cm4gKG5fcHRyICYmIChuX3B0ci0+bGFzdF9yb3V0ZXIgPj0gMCkpOwogfQpAQCAtMjQwLDcgKzI0MCw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIGVycigiQXR0ZW1wdCB0byBjcmVhdGUgdGhpcmQgbGluayB0byAlc1xuIiwKIAkJCSAgICBhZGRyX3N0cmluZ19maWxsKGFkZHJfc3RyaW5nLCBuX3B0ci0+YWRkcikpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIW5fcHRyLT5saW5rc1tiZWFyZXJfaWRdKSB7CkBAIC0yNTMsMTIgKzI1MywxMiBAQAogICAgICAgICAgICAgICAgICAgICBsX3B0ci0+Yl9wdHItPnB1YmwubmFtZSwgCiAJCSAgICBhZGRyX3N0cmluZ19maWxsKGFkZHJfc3RyaW5nLCBsX3B0ci0+YWRkcikpOwogICAgICAgICB9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHZvaWQgdGlwY19ub2RlX2RldGFjaF9saW5rKHN0cnVjdCBub2RlICpuX3B0ciwgc3RydWN0IGxpbmsgKmxfcHRyKQogewotCW5fcHRyLT5saW5rc1tsX3B0ci0+Yl9wdHItPmlkZW50aXR5XSA9IDA7CisJbl9wdHItPmxpbmtzW2xfcHRyLT5iX3B0ci0+aWRlbnRpdHldID0gTlVMTDsKIAl0aXBjX25ldC56b25lc1t0aXBjX3pvbmUobF9wdHItPmFkZHIpXS0+bGlua3MtLTsKIAluX3B0ci0+bGlua19jbnQtLTsKIH0KQEAgLTQyNCw3ICs0MjQsNyBAQAogCiAJLyogTm90aWZ5IHN1YnNjcmliZXJzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5zLCB0bnMsICZuX3B0ci0+bnN1Yiwgbm9kZXN1Yl9saXN0KSB7Ci0gICAgICAgICAgICAgICAgbnMtPm5vZGUgPSAwOworICAgICAgICAgICAgICAgIG5zLT5ub2RlID0gTlVMTDsKIAkJbGlzdF9kZWxfaW5pdCgmbnMtPm5vZGVzdWJfbGlzdCk7CiAJCXRpcGNfa19zaWduYWwoKEhhbmRsZXIpbnMtPmhhbmRsZV9ub2RlX2Rvd24sCiAJCQkgICAgICAodW5zaWduZWQgbG9uZylucy0+dXNyX2hhbmRsZSk7CkBAIC00NDMsNyArNDQzLDcgQEAKIAl1MzIgcm91dGVyX2FkZHI7CiAKICAgICAgICAgaWYgKCF0aXBjX2FkZHJfZG9tYWluX3ZhbGlkKGFkZHIpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAJLyogTG9vayBmb3IgZGlyZWN0IGxpbmsgdG8gZGVzdGluYXRpb24gcHJvY2Vzc3NvciAqLwogCW5fcHRyID0gdGlwY19ub2RlX2ZpbmQoYWRkcik7CkBAIC00NTIsNyArNDUyLDcgQEAKIAogCS8qIENsdXN0ZXIgbG9jYWwgc3lzdGVtIG5vZGVzICptdXN0KiBoYXZlIGRpcmVjdCBsaW5rcyAqLwogCWlmICghaXNfc2xhdmUoYWRkcikgJiYgaW5fb3duX2NsdXN0ZXIoYWRkcikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAogCS8qIExvb2sgZm9yIGNsdXN0ZXIgbG9jYWwgcm91dGVyIHdpdGggZGlyZWN0IGxpbmsgdG8gbm9kZSAqLwogCXJvdXRlcl9hZGRyID0gdGlwY19ub2RlX3NlbGVjdF9yb3V0ZXIobl9wdHIsIHNlbGVjdG9yKTsKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCS8qIFNsYXZlIG5vZGVzIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIHdpdGhpbiBvd24gY2x1c3RlciB2aWEgYSAKIAkgICBrbm93biByb3V0ZXIgd2l0aCBkaXJlY3QgbGluayAtLSBpZiBubyByb3V0ZXIgd2FzIGZvdW5kLGdpdmUgdXAgKi8KIAlpZiAoaXNfc2xhdmUoYWRkcikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAogCS8qIEludGVyIHpvbmUvY2x1c3RlciAtLSBmaW5kIGFueSBkaXJlY3QgbGluayB0byByZW1vdGUgY2x1c3RlciAqLwogCWFkZHIgPSB0aXBjX2FkZHIodGlwY196b25lKGFkZHIpLCB0aXBjX2NsdXN0ZXIoYWRkciksIDApOwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJaWYgKHJvdXRlcl9hZGRyKSAKICAgICAgICAgICAgICAgICByZXR1cm4gdGlwY19ub2RlX3NlbGVjdChyb3V0ZXJfYWRkciwgc2VsZWN0b3IpOwogCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmgKaW5kZXggMjlmN2FlNi4uNzgxMTI2ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5oCisrKyBiL25ldC90aXBjL25vZGUuaApAQCAtMTIxLDcgKzEyMSw3IEBACiAJCWlmIChjX3B0cikKIAkJCXJldHVybiBjX3B0ci0+bm9kZXNbdGlwY19ub2RlKGFkZHIpXTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5vZGUgKnRpcGNfbm9kZV9zZWxlY3QodTMyIGFkZHIsIHUzMiBzZWxlY3RvcikKZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGVfc3Vic2NyLmMgYi9uZXQvdGlwYy9ub2RlX3N1YnNjci5jCmluZGV4IGFmZWVhMTIuLmNmZjQwNjggMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGVfc3Vic2NyLmMKKysrIGIvbmV0L3RpcGMvbm9kZV9zdWJzY3IuYwpAQCAtNDcsNyArNDcsNyBAQAogdm9pZCB0aXBjX25vZGVzdWJfc3Vic2NyaWJlKHN0cnVjdCBub2RlX3N1YnNjciAqbm9kZV9zdWIsIHUzMiBhZGRyLCAKIAkJICAgICAgIHZvaWQgKnVzcl9oYW5kbGUsIG5ldF9ldl9oYW5kbGVyIGhhbmRsZV9kb3duKQogewotCW5vZGVfc3ViLT5ub2RlID0gMDsKKwlub2RlX3N1Yi0+bm9kZSA9IE5VTEw7CiAJaWYgKGFkZHIgPT0gdGlwY19vd25fYWRkcikKIAkJcmV0dXJuOwogCWlmICghdGlwY19hZGRyX25vZGVfdmFsaWQoYWRkcikpIHsKZGlmZiAtLWdpdCBhL25ldC90aXBjL3BvcnQuYyBiL25ldC90aXBjL3BvcnQuYwppbmRleCA3MmFhZTUyLi42N2U5NmNiIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9wb3J0LmMKKysrIGIvbmV0L3RpcGMvcG9ydC5jCkBAIC01NCw4ICs1NCw4IEBACiAKICNkZWZpbmUgTUFYX1JFSkVDVF9TSVpFIDEwMjQKIAotc3RhdGljIHN0cnVjdCBza19idWZmICptc2dfcXVldWVfaGVhZCA9IDA7Ci1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1zZ19xdWV1ZV90YWlsID0gMDsKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbXNnX3F1ZXVlX2hlYWQgPSBOVUxMOworc3RhdGljIHN0cnVjdCBza19idWZmICptc2dfcXVldWVfdGFpbCA9IE5VTEw7CiAKIHNwaW5sb2NrX3QgdGlwY19wb3J0X2xpc3RfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKIHN0YXRpYyBzcGlubG9ja190IHF1ZXVlX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CkBAIC02NywyNyArNjcsMjIgQEAKIHN0YXRpYyB2b2lkIHBvcnRfdGltZW91dCh1bnNpZ25lZCBsb25nIHJlZik7CiAKIAotc3RhdGljIGlubGluZSB1MzIgcG9ydF9wZWVybm9kZShzdHJ1Y3QgcG9ydCAqcF9wdHIpCitzdGF0aWMgdTMyIHBvcnRfcGVlcm5vZGUoc3RydWN0IHBvcnQgKnBfcHRyKQogewogCXJldHVybiBtc2dfZGVzdG5vZGUoJnBfcHRyLT5wdWJsLnBoZHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBwb3J0X3BlZXJwb3J0KHN0cnVjdCBwb3J0ICpwX3B0cikKK3N0YXRpYyB1MzIgcG9ydF9wZWVycG9ydChzdHJ1Y3QgcG9ydCAqcF9wdHIpCiB7CiAJcmV0dXJuIG1zZ19kZXN0cG9ydCgmcF9wdHItPnB1YmwucGhkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHBvcnRfb3V0X3NlcW5vKHN0cnVjdCBwb3J0ICpwX3B0cikKK3N0YXRpYyB1MzIgcG9ydF9vdXRfc2Vxbm8oc3RydWN0IHBvcnQgKnBfcHRyKQogewogCXJldHVybiBtc2dfdHJhbnNwX3NlcW5vKCZwX3B0ci0+cHVibC5waGRyKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHBvcnRfc2V0X291dF9zZXFubyhzdHJ1Y3QgcG9ydCAqcF9wdHIsIHUzMiBzZXFubykgCi17Ci0JbXNnX3NldF90cmFuc3Bfc2Vxbm8oJnBfcHRyLT5wdWJsLnBoZHIsc2Vxbm8pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9pbmNyX291dF9zZXFubyhzdHJ1Y3QgcG9ydCAqcF9wdHIpCitzdGF0aWMgdm9pZCBwb3J0X2luY3Jfb3V0X3NlcW5vKHN0cnVjdCBwb3J0ICpwX3B0cikKIHsKIAlzdHJ1Y3QgdGlwY19tc2cgKm0gPSAmcF9wdHItPnB1YmwucGhkcjsKIApAQCAtMjU4LDExICsyNTMsMTEgQEAKIAlwX3B0ci0+cHVibC51c3JfaGFuZGxlID0gdXNyX2hhbmRsZTsKIAlJTklUX0xJU1RfSEVBRCgmcF9wdHItPndhaXRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnBfcHRyLT5zdWJzY3JpcHRpb24ubm9kZXN1Yl9saXN0KTsKLQlwX3B0ci0+Y29uZ2VzdGVkX2xpbmsgPSAwOworCXBfcHRyLT5jb25nZXN0ZWRfbGluayA9IE5VTEw7CiAJcF9wdHItPm1heF9wa3QgPSBNQVhfUEtUX0RFRkFVTFQ7CiAJcF9wdHItPmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyOwogCXBfcHRyLT53YWtldXAgPSB3YWtldXA7Ci0JcF9wdHItPnVzZXJfcG9ydCA9IDA7CisJcF9wdHItPnVzZXJfcG9ydCA9IE5VTEw7CiAJa19pbml0X3RpbWVyKCZwX3B0ci0+dGltZXIsIChIYW5kbGVyKXBvcnRfdGltZW91dCwgcmVmKTsKIAlzcGluX2xvY2tfYmgoJnRpcGNfcG9ydF9saXN0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZwX3B0ci0+cHVibGljYXRpb25zKTsKQEAgLTI3Niw5ICsyNzEsOSBAQAogaW50IHRpcGNfZGVsZXRlcG9ydCh1MzIgcmVmKQogewogCXN0cnVjdCBwb3J0ICpwX3B0cjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gTlVMTDsKIAotCXRpcGNfd2l0aGRyYXcocmVmLCAwLCAwKTsKKwl0aXBjX3dpdGhkcmF3KHJlZiwgMCwgTlVMTCk7CiAJcF9wdHIgPSB0aXBjX3BvcnRfbG9jayhyZWYpOwogCWlmICghcF9wdHIpIAogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMyOSwxMyArMzI0LDEzIEBACiAKIAlwX3B0ciA9IHRpcGNfcG9ydF9sb2NrKHJlZik7CiAJaWYgKCFwX3B0cikKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCWhhbmRsZSA9IHBfcHRyLT5wdWJsLnVzcl9oYW5kbGU7CiAJdGlwY19wb3J0X3VubG9jayhwX3B0cik7CiAJcmV0dXJuIGhhbmRsZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcG9ydF91bnJlbGlhYmxlKHN0cnVjdCBwb3J0ICpwX3B0cikKK3N0YXRpYyBpbnQgcG9ydF91bnJlbGlhYmxlKHN0cnVjdCBwb3J0ICpwX3B0cikKIHsKIAlyZXR1cm4gbXNnX3NyY19kcm9wcGFibGUoJnBfcHRyLT5wdWJsLnBoZHIpOwogfQpAQCAtMzY0LDcgKzM1OSw3IEBACiAJcmV0dXJuIFRJUENfT0s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHBvcnRfdW5yZXR1cm5hYmxlKHN0cnVjdCBwb3J0ICpwX3B0cikKK3N0YXRpYyBpbnQgcG9ydF91bnJldHVybmFibGUoc3RydWN0IHBvcnQgKnBfcHRyKQogewogCXJldHVybiBtc2dfZGVzdF9kcm9wcGFibGUoJnBfcHRyLT5wdWJsLnBoZHIpOwogfQpAQCAtNDc1LDcgKzQ3MCw3IEBACiAKIAkvKiBzZW5kIHNlbGYtYWJvcnQgbWVzc2FnZSB3aGVuIHJlamVjdGluZyBvbiBhIGNvbm5lY3RlZCBwb3J0ICovCiAJaWYgKG1zZ19jb25uZWN0ZWQobXNnKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqYWJ1ZiA9IDA7CisJCXN0cnVjdCBza19idWZmICphYnVmID0gTlVMTDsKIAkJc3RydWN0IHBvcnQgKnBfcHRyID0gdGlwY19wb3J0X2xvY2sobXNnX2Rlc3Rwb3J0KG1zZykpOwogCiAJCWlmIChwX3B0cikgewpAQCAtNTEwLDcgKzUwNSw3IEBACiBzdGF0aWMgdm9pZCBwb3J0X3RpbWVvdXQodW5zaWduZWQgbG9uZyByZWYpCiB7CiAJc3RydWN0IHBvcnQgKnBfcHRyID0gdGlwY19wb3J0X2xvY2socmVmKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gTlVMTDsKIAogCWlmICghcF9wdHIgfHwgIXBfcHRyLT5wdWJsLmNvbm5lY3RlZCkKIAkJcmV0dXJuOwpAQCAtNTQwLDcgKzUzNSw3IEBACiBzdGF0aWMgdm9pZCBwb3J0X2hhbmRsZV9ub2RlX2Rvd24odW5zaWduZWQgbG9uZyByZWYpCiB7CiAJc3RydWN0IHBvcnQgKnBfcHRyID0gdGlwY19wb3J0X2xvY2socmVmKTsKLQlzdHJ1Y3Qgc2tfYnVmZiogYnVmID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiogYnVmID0gTlVMTDsKIAogCWlmICghcF9wdHIpCiAJCXJldHVybjsKQEAgLTU1NSw3ICs1NTAsNyBAQAogCXUzMiBpbXAgPSBtc2dfaW1wb3J0YW5jZSgmcF9wdHItPnB1YmwucGhkcik7CiAKIAlpZiAoIXBfcHRyLT5wdWJsLmNvbm5lY3RlZCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCWlmIChpbXAgPCBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UpCiAJCWltcCsrOwogCXJldHVybiBwb3J0X2J1aWxkX3Byb3RvX21zZyhwX3B0ci0+cHVibC5yZWYsCkBAIC01NzUsNyArNTcwLDcgQEAKIAl1MzIgaW1wID0gbXNnX2ltcG9ydGFuY2UoJnBfcHRyLT5wdWJsLnBoZHIpOwogCiAJaWYgKCFwX3B0ci0+cHVibC5jb25uZWN0ZWQpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTlVMTDsKIAlpZiAoaW1wIDwgVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKQogCQlpbXArKzsKIAlyZXR1cm4gcG9ydF9idWlsZF9wcm90b19tc2cocG9ydF9wZWVycG9ydChwX3B0ciksCkBAIC01OTQsOCArNTg5LDggQEAKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKIAlzdHJ1Y3QgcG9ydCAqcF9wdHIgPSB0aXBjX3BvcnRfbG9jayhtc2dfZGVzdHBvcnQobXNnKSk7CiAJdTMyIGVyciA9IFRJUENfT0s7Ci0Jc3RydWN0IHNrX2J1ZmYgKnJfYnVmID0gMDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYWJvcnRfYnVmID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcl9idWYgPSBOVUxMOworCXN0cnVjdCBza19idWZmICphYm9ydF9idWYgPSBOVUxMOwogCiAJbXNnX2RiZyhtc2csICJQT1JUPFJFQ1Y8OiIpOwogCkBAIC04MDQsNyArNzk5LDcgQEAKIAogCXNwaW5fbG9ja19iaCgmcXVldWVfbG9jayk7CiAJYnVmID0gbXNnX3F1ZXVlX2hlYWQ7Ci0JbXNnX3F1ZXVlX2hlYWQgPSAwOworCW1zZ19xdWV1ZV9oZWFkID0gTlVMTDsKIAlzcGluX3VubG9ja19iaCgmcXVldWVfbG9jayk7CiAKIAl3aGlsZSAoYnVmKSB7CkBAIC05OTEsOCArOTg2LDggQEAKIHsKIAlzdHJ1Y3QgcG9ydCAqcF9wdHI7CiAJc3RydWN0IHVzZXJfcG9ydCAqdXBfcHRyOwotCXRpcGNfY29udGludWVfZXZlbnQgY2IgPSAwOwotCXZvaWQgKnVoID0gMDsKKwl0aXBjX2NvbnRpbnVlX2V2ZW50IGNiID0gTlVMTDsKKwl2b2lkICp1aCA9IE5VTEw7CiAKIAlwX3B0ciA9IHRpcGNfcG9ydF9sb2NrKHJlZik7CiAJaWYgKHBfcHRyKSB7CkBAIC0xMDE2LDcgKzEwMTEsNyBAQAogdm9pZCB0aXBjX2Fja25vd2xlZGdlKHUzMiByZWYsIHUzMiBhY2spCiB7CiAJc3RydWN0IHBvcnQgKnBfcHRyOwotCXN0cnVjdCBza19idWZmICpidWYgPSAwOworCXN0cnVjdCBza19idWZmICpidWYgPSBOVUxMOwogCiAJcF9wdHIgPSB0aXBjX3BvcnRfbG9jayhyZWYpOwogCWlmICghcF9wdHIpCkBAIC0xMDYyLDcgKzEwNTcsNyBAQAogCWlmICh1cF9wdHIgPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcmVmID0gdGlwY19jcmVhdGVwb3J0X3JhdygwLCBwb3J0X2Rpc3BhdGNoZXIsIHBvcnRfd2FrZXVwLCBpbXBvcnRhbmNlKTsKKwlyZWYgPSB0aXBjX2NyZWF0ZXBvcnRfcmF3KE5VTEwsIHBvcnRfZGlzcGF0Y2hlciwgcG9ydF93YWtldXAsIGltcG9ydGFuY2UpOwogCXBfcHRyID0gdGlwY19wb3J0X2xvY2socmVmKTsKIAlpZiAoIXBfcHRyKSB7CiAJCWtmcmVlKHVwX3B0cik7CkBAIC0xMjczLDcgKzEyNjgsNyBAQAogaW50IHRpcGNfc2h1dGRvd24odTMyIHJlZikKIHsKIAlzdHJ1Y3QgcG9ydCAqcF9wdHI7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IE5VTEw7CiAKIAlwX3B0ciA9IHRpcGNfcG9ydF9sb2NrKHJlZik7CiAJaWYgKCFwX3B0cikKZGlmZiAtLWdpdCBhL25ldC90aXBjL3JlZi5jIGIvbmV0L3RpcGMvcmVmLmMKaW5kZXggNWExM2MyZC4uMzNiYmY1MCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvcmVmLmMKKysrIGIvbmV0L3RpcGMvcmVmLmMKQEAgLTYxLDcgKzYxLDcgQEAKICAqIGJlY2F1c2UgZW50cnkgMCdzIHJlZmVyZW5jZSBmaWVsZCBoYXMgdGhlIGZvcm0gWFhYWHwxLS0xLgogICovCiAKLXN0cnVjdCByZWZfdGFibGUgdGlwY19yZWZfdGFibGUgPSB7IDAgfTsKK3N0cnVjdCByZWZfdGFibGUgdGlwY19yZWZfdGFibGUgPSB7IE5VTEwgfTsKIAogc3RhdGljIHJ3bG9ja190IHJlZl90YWJsZV9sb2NrID0gUldfTE9DS19VTkxPQ0tFRDsKIApAQCAtODYsNyArODYsNyBAQAogCXdyaXRlX2xvY2tfYmgoJnJlZl90YWJsZV9sb2NrKTsKIAlpbmRleF9tYXNrID0gc3ogLSAxOwogCWZvciAoaSA9IHN6IC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJdGFibGVbaV0ub2JqZWN0ID0gMDsKKwkJdGFibGVbaV0ub2JqZWN0ID0gTlVMTDsKIAkJdGFibGVbaV0ubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKIAkJdGFibGVbaV0uZGF0YS5uZXh0X3BsdXNfdXBwZXIgPSAoc3RhcnQgJiB+aW5kZXhfbWFzaykgKyBpIC0gMTsKIAl9CkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJcmV0dXJuOwogCiAJdmZyZWUodGlwY19yZWZfdGFibGUuZW50cmllcyk7Ci0JdGlwY19yZWZfdGFibGUuZW50cmllcyA9IDA7CisJdGlwY19yZWZfdGFibGUuZW50cmllcyA9IE5VTEw7CiB9CiAKIC8qKgpAQCAtMTczLDcgKzE3Myw3IEBACiAJYXNzZXJ0KGVudHJ5LT5kYXRhLnJlZmVyZW5jZSA9PSByZWYpOwogCiAJLyogbWFyayBlbnRyeSBhcyB1bnVzZWQgKi8KLQllbnRyeS0+b2JqZWN0ID0gMDsKKwllbnRyeS0+b2JqZWN0ID0gTlVMTDsKIAlpZiAodGlwY19yZWZfdGFibGUuZmlyc3RfZnJlZSA9PSAwKQogCQl0aXBjX3JlZl90YWJsZS5maXJzdF9mcmVlID0gaW5kZXg7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvcmVmLmggYi9uZXQvdGlwYy9yZWYuaAppbmRleCA0ZjhmOWY0MC4uNmQyMDAwNiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvcmVmLmgKKysrIGIvbmV0L3RpcGMvcmVmLmgKQEAgLTkyLDcgKzkyLDcgQEAKIAkJCXJldHVybiByLT5vYmplY3Q7CiAJCXNwaW5fdW5sb2NrX2JoKCZyLT5sb2NrKTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtMTI1LDcgKzEyNSw3IEBACiAJCWlmIChsaWtlbHkoci0+ZGF0YS5yZWZlcmVuY2UgPT0gcmVmKSkKIAkJCXJldHVybiByLT5vYmplY3Q7CiAJfQotCXJldHVybiAwOworCXJldHVybiBOVUxMOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmMKaW5kZXggNjcyNTNiZi4uNjQ4YTczNCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc29ja2V0LmMKKysrIGIvbmV0L3RpcGMvc29ja2V0LmMKQEAgLTg4LDcgKzg4LDcgQEAKICAqIHdpdGggbm9uLXNvY2tldCBpbnRlcmZhY2VzLgogICogU2VlIG5ldC5jIGZvciBkZXNjcmlwdGlvbiBvZiBsb2NraW5nIHBvbGljeS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHNvY2tfbG9jayhzdHJ1Y3QgdGlwY19zb2NrKiB0c29jaykKK3N0YXRpYyB2b2lkIHNvY2tfbG9jayhzdHJ1Y3QgdGlwY19zb2NrKiB0c29jaykKIHsKICAgICAgICAgc3Bpbl9sb2NrX2JoKHRzb2NrLT5wLT5sb2NrKTsgICAgICAgCiB9CkBAIC05Niw3ICs5Niw3IEBACiAvKiAKICAqIHNvY2tfdW5sb2NrKCk6IFVubG9jayBhIHBvcnQvc29ja2V0IHBhaXIKICAqLwotc3RhdGljIGlubGluZSB2b2lkIHNvY2tfdW5sb2NrKHN0cnVjdCB0aXBjX3NvY2sqIHRzb2NrKQorc3RhdGljIHZvaWQgc29ja191bmxvY2soc3RydWN0IHRpcGNfc29jayogdHNvY2spCiB7CiAgICAgICAgIHNwaW5fdW5sb2NrX2JoKHRzb2NrLT5wLT5sb2NrKTsKIH0KQEAgLTExOSw3ICsxMTksNyBAQAogICogUmV0dXJucyBwb2xsbWFzayB2YWx1ZQogICovCiAKLXN0YXRpYyBpbmxpbmUgdTMyIHBvbGxtYXNrKHN0cnVjdCBzb2NrZXQgKnNvY2spCitzdGF0aWMgdTMyIHBvbGxtYXNrKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJdTMyIG1hc2s7CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogICogQHRzb2NrOiBUSVBDIHNvY2tldAogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZHZhbmNlX3F1ZXVlKHN0cnVjdCB0aXBjX3NvY2sgKnRzb2NrKQorc3RhdGljIHZvaWQgYWR2YW5jZV9xdWV1ZShzdHJ1Y3QgdGlwY19zb2NrICp0c29jaykKIHsKICAgICAgICAgc29ja19sb2NrKHRzb2NrKTsKIAlidWZfZGlzY2FyZChza2JfZGVxdWV1ZSgmdHNvY2stPnNrLnNrX3JlY2VpdmVfcXVldWUpKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogCWlmICh1bmxpa2VseShwcm90b2NvbCAhPSAwKSkKIAkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAKLQlyZWYgPSB0aXBjX2NyZWF0ZXBvcnRfcmF3KDAsICZkaXNwYXRjaCwgJndha2V1cGRpc3BhdGNoLCBUSVBDX0xPV19JTVBPUlRBTkNFKTsKKwlyZWYgPSB0aXBjX2NyZWF0ZXBvcnRfcmF3KE5VTEwsICZkaXNwYXRjaCwgJndha2V1cGRpc3BhdGNoLCBUSVBDX0xPV19JTVBPUlRBTkNFKTsKIAlpZiAodW5saWtlbHkoIXJlZikpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJc29ja19sb2NrKHRzb2NrKTsKIAkJYnVmID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAkJaWYgKCFidWYpCi0JCQl0c29jay0+cC0+dXNyX2hhbmRsZSA9IDA7CisJCQl0c29jay0+cC0+dXNyX2hhbmRsZSA9IE5VTEw7CiAJCXNvY2tfdW5sb2NrKHRzb2NrKTsKIAkJaWYgKCFidWYpCiAJCQlicmVhazsKQEAgLTMxOSw3ICszMTksNyBAQAogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQogCWlmICh1bmxpa2VseSghdWFkZHJfbGVuKSkgewotCQlyZXMgPSB0aXBjX3dpdGhkcmF3KHRzb2NrLT5wLT5yZWYsIDAsIDApOworCQlyZXMgPSB0aXBjX3dpdGhkcmF3KHRzb2NrLT5wLT5yZWYsIDAsIE5VTEwpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC00MTIsNyArNDEyLDcgQEAKICAqIFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQsIG90aGVyd2lzZSBlcnJubwogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGRlc3RfbmFtZV9jaGVjayhzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqZGVzdCwgc3RydWN0IG1zZ2hkciAqbSkKK3N0YXRpYyBpbnQgZGVzdF9uYW1lX2NoZWNrKHN0cnVjdCBzb2NrYWRkcl90aXBjICpkZXN0LCBzdHJ1Y3QgbXNnaGRyICptKQogewogCXN0cnVjdCB0aXBjX2NmZ19tc2dfaGRyIGhkcjsKIApAQCAtNjk1LDcgKzY5NSw3IEBACiAgKiBOb3RlOiBBZGRyZXNzIGlzIG5vdCBjYXB0dXJlZCBpZiBub3QgcmVxdWVzdGVkIGJ5IHJlY2VpdmVyLgogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfb3JpZ19hZGRyKHN0cnVjdCBtc2doZHIgKm0sIHN0cnVjdCB0aXBjX21zZyAqbXNnKQorc3RhdGljIHZvaWQgc2V0X29yaWdfYWRkcihzdHJ1Y3QgbXNnaGRyICptLCBzdHJ1Y3QgdGlwY19tc2cgKm1zZykKIHsKICAgICAgICAgc3RydWN0IHNvY2thZGRyX3RpcGMgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX3RpcGMgKiltLT5tc2dfbmFtZTsKIApAQCAtNzIxLDcgKzcyMSw3IEBACiAgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIGVycm5vCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgYW5jX2RhdGFfcmVjdihzdHJ1Y3QgbXNnaGRyICptLCBzdHJ1Y3QgdGlwY19tc2cgKm1zZywgCitzdGF0aWMgaW50IGFuY19kYXRhX3JlY3Yoc3RydWN0IG1zZ2hkciAqbSwgc3RydWN0IHRpcGNfbXNnICptc2csCiAJCQkJc3RydWN0IHRpcGNfcG9ydCAqdHBvcnQpCiB7CiAJdTMyIGFuY19kYXRhWzNdOwpAQCAtMTIyNiw3ICsxMjI2LDcgQEAKIHsKICAgIHN0cnVjdCB0aXBjX3NvY2sgKnRzb2NrID0gdGlwY19zayhzb2NrLT5zayk7CiAgICBzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqZHN0ID0gKHN0cnVjdCBzb2NrYWRkcl90aXBjICopZGVzdDsKLSAgIHN0cnVjdCBtc2doZHIgbSA9IHswLH07CisgICBzdHJ1Y3QgbXNnaGRyIG0gPSB7TlVMTCx9OwogICAgc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKICAgIHN0cnVjdCB0aXBjX21zZyAqbXNnOwogICAgaW50IHJlczsKQEAgLTEyNTEsNyArMTI1MSw3IEBACiAgICAvKiBTZW5kIGEgJ1NZTi0nIHRvIGRlc3RpbmF0aW9uICovCiAKICAgIG0ubXNnX25hbWUgPSBkZXN0OwotICAgaWYgKChyZXMgPSBzZW5kX21zZygwLCBzb2NrLCAmbSwgMCkpIDwgMCkgeworICAgaWYgKChyZXMgPSBzZW5kX21zZyhOVUxMLCBzb2NrLCAmbSwgMCkpIDwgMCkgewogCSAgIHNvY2stPnN0YXRlID0gU1NfRElTQ09OTkVDVElORzsKIAkgICByZXR1cm4gcmVzOwogICAgfQpAQCAtMTM2Nyw5ICsxMzY3LDkgQEAKIAogCQltc2dfZGJnKG1zZywiPEFDQzw6ICIpOwogICAgICAgICAgICAgICAgIGlmICghbXNnX2RhdGFfc3oobXNnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1zZ2hkciBtID0gezAsfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtc2doZHIgbSA9IHtOVUxMLH07CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfcGFja2V0KDAsIG5ld3NvY2ssICZtLCAwKTsgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfcGFja2V0KE5VTEwsIG5ld3NvY2ssICZtLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VfcXVldWUodHNvY2spOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAJCQlzb2NrX2xvY2sodHNvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc3Vic2NyLmMgYi9uZXQvdGlwYy9zdWJzY3IuYwppbmRleCA1ZmYzOGI5Li5jNWYwMjZjIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zdWJzY3IuYworKysgYi9uZXQvdGlwYy9zdWJzY3IuYwpAQCAtODYsNyArODYsNyBAQAogICogUmV0dXJucyBjb252ZXJ0ZWQgdmFsdWUKICAqLwogCi1zdGF0aWMgaW5saW5lIHUzMiBodG9obCh1MzIgaW4sIGludCBzd2FwKQorc3RhdGljIHUzMiBodG9obCh1MzIgaW4sIGludCBzd2FwKQogewogCWNoYXIgKmMgPSAoY2hhciAqKSZpbjsKIApAQCAtMzgxLDcgKzM4MSw3IEBACiAJCQkJICAgc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKmRlc3QpCiB7CiAJc3RydWN0IHN1YnNjcmliZXIgKnN1YnNjcmliZXI7Ci0Jc3RydWN0IGlvdmVjIG1zZ19zZWN0ID0gezAsIDB9OworCXN0cnVjdCBpb3ZlYyBtc2dfc2VjdCA9IHtOVUxMLCAwfTsKIAlzcGlubG9ja190ICpzdWJzY3JpYmVyX2xvY2s7CiAKIAlkYmcoInN1YnNjcl9uYW1lZF9tc2dfZXZlbnQ6IG9yaWcgPSAleCBvd24gPSAleCxcbiIsCkBAIC00MTMsMTMgKzQxMywxMyBAQAogCXRpcGNfY3JlYXRlcG9ydCh0b3BzcnYudXNlcl9yZWYsCiAJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXN1YnNjcmliZXItPnJlZiwKIAkJCWltcG9ydGFuY2UsCi0JCQkwLAotCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAogCQkJc3Vic2NyX2Nvbm5fc2h1dGRvd25fZXZlbnQsCi0JCQkwLAotCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAogCQkJc3Vic2NyX2Nvbm5fbXNnX2V2ZW50LAotCQkJMCwKKwkJCU5VTEwsCiAJCQkmc3Vic2NyaWJlci0+cG9ydF9yZWYpOwogCWlmIChzdWJzY3JpYmVyLT5wb3J0X3JlZiA9PSAwKSB7CiAJCXdhcm4oIk1lbW9yeSBzcXVlZXplOyBmYWlsZWQgdG8gY3JlYXRlIHN1YnNjcmlwdGlvbiBwb3J0XG4iKTsKQEAgLTQ2MSwyMiArNDYxLDIyIEBACiAJSU5JVF9MSVNUX0hFQUQoJnRvcHNydi5zdWJzY3JpYmVyX2xpc3QpOwogCiAJc3Bpbl9sb2NrX2JoKCZ0b3BzcnYubG9jayk7Ci0JcmVzID0gdGlwY19hdHRhY2goJnRvcHNydi51c2VyX3JlZiwgMCwgMCk7CisJcmVzID0gdGlwY19hdHRhY2goJnRvcHNydi51c2VyX3JlZiwgTlVMTCwgTlVMTCk7CiAJaWYgKHJlcykgewogCQlzcGluX3VubG9ja19iaCgmdG9wc3J2LmxvY2spOwogCQlyZXR1cm4gcmVzOwogCX0KIAogIAlyZXMgPSB0aXBjX2NyZWF0ZXBvcnQodG9wc3J2LnVzZXJfcmVmLAotIAkJCSAgICAgIDAsCisgCQkJICAgICAgTlVMTCwKICAJCQkgICAgICBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsCi0gCQkJICAgICAgMCwKLSAJCQkgICAgICAwLAotIAkJCSAgICAgIDAsCi0gCQkJICAgICAgMCwKKyAJCQkgICAgICBOVUxMLAorIAkJCSAgICAgIE5VTEwsCisgCQkJICAgICAgTlVMTCwKKyAJCQkgICAgICBOVUxMLAogIAkJCSAgICAgIHN1YnNjcl9uYW1lZF9tc2dfZXZlbnQsCi0gCQkJICAgICAgMCwKLSAJCQkgICAgICAwLAorIAkJCSAgICAgIE5VTEwsCisgCQkJICAgICAgTlVMTCwKICAJCQkgICAgICAmdG9wc3J2LnNldHVwX3BvcnQpOwogIAlpZiAocmVzKQogCQlnb3RvIGZhaWxlZDsKZGlmZiAtLWdpdCBhL25ldC90aXBjL3VzZXJfcmVnLmMgYi9uZXQvdGlwYy91c2VyX3JlZy5jCmluZGV4IDEwNjIwMGQuLjNmM2Y5MzMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3VzZXJfcmVnLmMKKysrIGIvbmV0L3RpcGMvdXNlcl9yZWcuYwpAQCAtNjUsNyArNjUsNyBAQAogI2RlZmluZSBNQVhfVVNFUklEIDY0CiAjZGVmaW5lIFVTRVJfTElTVF9TSVpFICgoTUFYX1VTRVJJRCArIDEpICogc2l6ZW9mKHN0cnVjdCB0aXBjX3VzZXIpKQogCi1zdGF0aWMgc3RydWN0IHRpcGNfdXNlciAqdXNlcnMgPSAwOworc3RhdGljIHN0cnVjdCB0aXBjX3VzZXIgKnVzZXJzID0gTlVMTDsKIHN0YXRpYyB1MzIgbmV4dF9mcmVlX3VzZXIgPSBNQVhfVVNFUklEICsgMTsKIHN0YXRpYyBzcGlubG9ja190IHJlZ19sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwogCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJCXJlZ19jYWxsYmFjaygmdXNlcnNbaWRdKTsKIAl9CiAJa2ZyZWUodXNlcnMpOwotCXVzZXJzID0gMDsKKwl1c2VycyA9IE5VTEw7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvem9uZS5jIGIvbmV0L3RpcGMvem9uZS5jCmluZGV4IDdjMTFmN2YuLjI4MDNlMWIgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3pvbmUuYworKysgYi9uZXQvdGlwYy96b25lLmMKQEAgLTQ0LDExICs0NCwxMSBAQAogCiBzdHJ1Y3QgX3pvbmUgKnRpcGNfem9uZV9jcmVhdGUodTMyIGFkZHIpCiB7Ci0Jc3RydWN0IF96b25lICp6X3B0ciA9IDA7CisJc3RydWN0IF96b25lICp6X3B0ciA9IE5VTEw7CiAJdTMyIHpfbnVtOwogCiAJaWYgKCF0aXBjX2FkZHJfZG9tYWluX3ZhbGlkKGFkZHIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAKIAl6X3B0ciA9IChzdHJ1Y3QgX3pvbmUgKilrbWFsbG9jKHNpemVvZigqel9wdHIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoel9wdHIgIT0gTlVMTCkgewpAQCAtMTE0LDEwICsxMTQsMTAgQEAKIAl1MzIgY19udW07CiAKIAlpZiAoIXpfcHRyKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAJY19wdHIgPSB6X3B0ci0+Y2x1c3RlcnNbdGlwY19jbHVzdGVyKGFkZHIpXTsKIAlpZiAoIWNfcHRyKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAJbl9wdHIgPSB0aXBjX2NsdHJfc2VsZWN0X25vZGUoY19wdHIsIHJlZik7CiAJaWYgKG5fcHRyKQogCQlyZXR1cm4gbl9wdHI7CkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogCWZvciAoY19udW0gPSAxOyBjX251bSA8PSB0aXBjX21heF9jbHVzdGVyczsgY19udW0rKykgewogCQljX3B0ciA9IHpfcHRyLT5jbHVzdGVyc1tjX251bV07CiAJCWlmICghY19wdHIpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBOVUxMOwogCQluX3B0ciA9IHRpcGNfY2x0cl9zZWxlY3Rfbm9kZShjX3B0ciwgcmVmKTsKIAkJaWYgKG5fcHRyKQogCQkJcmV0dXJuIG5fcHRyOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogdTMyIHRpcGNfem9uZV9zZWxlY3Rfcm91dGVyKHN0cnVjdCBfem9uZSAqel9wdHIsIHUzMiBhZGRyLCB1MzIgcmVmKQpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IDFiNTk4OWIuLmQ5MDE0NjUgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2FmX3VuaXguYworKysgYi9uZXQvdW5peC9hZl91bml4LmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCXN0cnVjdCBzb2NrICpzayA9IE5VTEw7CiAJc3RydWN0IHVuaXhfc29jayAqdTsKIAotCWlmIChhdG9taWNfcmVhZCgmdW5peF9ucl9zb2NrcykgPj0gMipmaWxlc19zdGF0Lm1heF9maWxlcykKKwlpZiAoYXRvbWljX3JlYWQoJnVuaXhfbnJfc29ja3MpID49IDIqZ2V0X21heF9maWxlcygpKQogCQlnb3RvIG91dDsKIAogCXNrID0gc2tfYWxsb2MoUEZfVU5JWCwgR0ZQX0tFUk5FTCwgJnVuaXhfcHJvdG8sIDEpOwpAQCAtNTY2LDcgKzU2Niw3IEBACiAJdS0+bW50CSAgPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZ1LT5sb2NrKTsKIAlhdG9taWNfc2V0KCZ1LT5pbmZsaWdodCwgc29jayA/IDAgOiAtMSk7Ci0JaW5pdF9NVVRFWCgmdS0+cmVhZHNlbSk7IC8qIHNpbmdsZSB0YXNrIHJlYWRpbmcgbG9jayAqLworCW11dGV4X2luaXQoJnUtPnJlYWRsb2NrKTsgLyogc2luZ2xlIHRhc2sgcmVhZGluZyBsb2NrICovCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdS0+cGVlcl93YWl0KTsKIAl1bml4X2luc2VydF9zb2NrZXQodW5peF9zb2NrZXRzX3VuYm91bmQsIHNrKTsKIG91dDoKQEAgLTYyMyw3ICs2MjMsNyBAQAogCXN0cnVjdCB1bml4X2FkZHJlc3MgKiBhZGRyOwogCWludCBlcnI7CiAKLQlkb3duKCZ1LT5yZWFkc2VtKTsKKwltdXRleF9sb2NrKCZ1LT5yZWFkbG9jayk7CiAKIAllcnIgPSAwOwogCWlmICh1LT5hZGRyKQpAQCAtNjYxLDcgKzY2MSw3IEBACiAJc3Bpbl91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CiAJZXJyID0gMDsKIAotb3V0Ogl1cCgmdS0+cmVhZHNlbSk7CitvdXQ6CW11dGV4X3VubG9jaygmdS0+cmVhZGxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTc0NCw3ICs3NDQsNyBAQAogCQlnb3RvIG91dDsKIAlhZGRyX2xlbiA9IGVycjsKIAotCWRvd24oJnUtPnJlYWRzZW0pOworCW11dGV4X2xvY2soJnUtPnJlYWRsb2NrKTsKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKHUtPmFkZHIpCkBAIC04MTYsNyArODE2LDcgQEAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJnVuaXhfdGFibGVfbG9jayk7CiBvdXRfdXA6Ci0JdXAoJnUtPnJlYWRzZW0pOworCW11dGV4X3VubG9jaygmdS0+cmVhZGxvY2spOwogb3V0OgogCXJldHVybiBlcnI7CiAKQEAgLTE0MjcsMTUgKzE0MjcsMTUgQEAKIAl3aGlsZShzZW50IDwgbGVuKQogCXsKIAkJLyoKLQkJICoJT3B0aW1pc2F0aW9uIGZvciB0aGUgZmFjdCB0aGF0IHVuZGVyIDAuMDElIG9mIFggbWVzc2FnZXMgdHlwaWNhbGx5Ci0JCSAqCW5lZWQgYnJlYWtpbmcgdXAuCisJCSAqCU9wdGltaXNhdGlvbiBmb3IgdGhlIGZhY3QgdGhhdCB1bmRlciAwLjAxJSBvZiBYCisJCSAqCW1lc3NhZ2VzIHR5cGljYWxseSBuZWVkIGJyZWFraW5nIHVwLgogCQkgKi8KIAotCQlzaXplPWxlbi1zZW50OworCQlzaXplID0gbGVuLXNlbnQ7CiAKIAkJLyogS2VlcCB0d28gbWVzc2FnZXMgaW4gdGhlIHBpcGUgc28gaXQgc2NoZWR1bGVzIGJldHRlciAqLwotCQlpZiAoc2l6ZSA+IHNrLT5za19zbmRidWYgLyAyIC0gNjQpCi0JCQlzaXplID0gc2stPnNrX3NuZGJ1ZiAvIDIgLSA2NDsKKwkJaWYgKHNpemUgPiAoKHNrLT5za19zbmRidWYgPj4gMSkgLSA2NCkpCisJCQlzaXplID0gKHNrLT5za19zbmRidWYgPj4gMSkgLSA2NDsKIAogCQlpZiAoc2l6ZSA+IFNLQl9NQVhfQUxMT0MpCiAJCQlzaXplID0gU0tCX01BWF9BTExPQzsKQEAgLTE1NDUsNyArMTU0NSw3IEBACiAKIAltc2ctPm1zZ19uYW1lbGVuID0gMDsKIAotCWRvd24oJnUtPnJlYWRzZW0pOworCW11dGV4X2xvY2soJnUtPnJlYWRsb2NrKTsKIAogCXNrYiA9IHNrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncywgbm9ibG9jaywgJmVycik7CiAJaWYgKCFza2IpCkBAIC0xNjAwLDcgKzE2MDAsNyBAQAogb3V0X2ZyZWU6CiAJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssc2tiKTsKIG91dF91bmxvY2s6Ci0JdXAoJnUtPnJlYWRzZW0pOworCW11dGV4X3VubG9jaygmdS0+cmVhZGxvY2spOwogb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC0xNjc2LDcgKzE2NzYsNyBAQAogCQltZW1zZXQoJnRtcF9zY20sIDAsIHNpemVvZih0bXBfc2NtKSk7CiAJfQogCi0JZG93bigmdS0+cmVhZHNlbSk7CisJbXV0ZXhfbG9jaygmdS0+cmVhZGxvY2spOwogCiAJZG8KIAl7CkBAIC0xNzAwLDcgKzE3MDAsNyBAQAogCQkJZXJyID0gLUVBR0FJTjsKIAkJCWlmICghdGltZW8pCiAJCQkJYnJlYWs7Ci0JCQl1cCgmdS0+cmVhZHNlbSk7CisJCQltdXRleF91bmxvY2soJnUtPnJlYWRsb2NrKTsKIAogCQkJdGltZW8gPSB1bml4X3N0cmVhbV9kYXRhX3dhaXQoc2ssIHRpbWVvKTsKIApAQCAtMTcwOCw3ICsxNzA4LDcgQEAKIAkJCQllcnIgPSBzb2NrX2ludHJfZXJybm8odGltZW8pOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCQkJZG93bigmdS0+cmVhZHNlbSk7CisJCQltdXRleF9sb2NrKCZ1LT5yZWFkbG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xNzc0LDcgKzE3NzQsNyBAQAogCQl9CiAJfSB3aGlsZSAoc2l6ZSk7CiAKLQl1cCgmdS0+cmVhZHNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ1LT5yZWFkbG9jayk7CiAJc2NtX3JlY3Yoc29jaywgbXNnLCBzaW9jYi0+c2NtLCBmbGFncyk7CiBvdXQ6CiAJcmV0dXJuIGNvcGllZCA/IDogZXJyOwpAQCAtMTg3OCw2ICsxODc4LDggQEAKIAkJbWFzayB8PSBQT0xMRVJSOwogCWlmIChzay0+c2tfc2h1dGRvd24gPT0gU0hVVERPV05fTUFTSykKIAkJbWFzayB8PSBQT0xMSFVQOworCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pCisJCW1hc2sgfD0gUE9MTFJESFVQOwogCiAJLyogcmVhZGFibGU/ICovCiAJaWYgKCFza2JfcXVldWVfZW1wdHkoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSB8fApkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jCmluZGV4IDQxMTgwMmIuLjc0NmMyZjQgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2dhcmJhZ2UuYworKysgYi9uZXQvdW5peC9nYXJiYWdlLmMKQEAgLTc2LDYgKzc2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9hZl91bml4Lmg+CkBAIC0xNjksNyArMTcwLDcgQEAKIAogdm9pZCB1bml4X2djKHZvaWQpCiB7Ci0Jc3RhdGljIERFQ0xBUkVfTVVURVgodW5peF9nY19zZW0pOworCXN0YXRpYyBERUZJTkVfTVVURVgodW5peF9nY19zZW0pOwogCWludCBpOwogCXN0cnVjdCBzb2NrICpzOwogCXN0cnVjdCBza19idWZmX2hlYWQgaGl0bGlzdDsKQEAgLTE3OSw3ICsxODAsNyBAQAogCSAqCUF2b2lkIGEgcmVjdXJzaXZlIEdDLgogCSAqLwogCi0JaWYgKGRvd25fdHJ5bG9jaygmdW5peF9nY19zZW0pKQorCWlmICghbXV0ZXhfdHJ5bG9jaygmdW5peF9nY19zZW0pKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJnVuaXhfdGFibGVfbG9jayk7CkBAIC0zMDgsNSArMzA5LDUgQEAKIAkgKi8KIAogCV9fc2tiX3F1ZXVlX3B1cmdlKCZoaXRsaXN0KTsKLQl1cCgmdW5peF9nY19zZW0pOworCW11dGV4X3VubG9jaygmdW5peF9nY19zZW0pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3gyNS9hZl94MjUuYyBiL25ldC94MjUvYWZfeDI1LmMKaW5kZXggNzJiNmZmMy4uMjgyY2U0ZSAxMDA2NDQKLS0tIGEvbmV0L3gyNS9hZl94MjUuYworKysgYi9uZXQveDI1L2FmX3gyNS5jCkBAIC01NCw3ICs1NCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4JLyogRm9yIFRJT0NJTlEvT1VUUSAqLwogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorCiAjaW5jbHVkZSA8bmV0L3gyNS5oPgorI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KIAogaW50IHN5c2N0bF94MjVfcmVzdGFydF9yZXF1ZXN0X3RpbWVvdXQgPSBYMjVfREVGQVVMVF9UMjA7CiBpbnQgc3lzY3RsX3gyNV9jYWxsX3JlcXVlc3RfdGltZW91dCAgICA9IFgyNV9ERUZBVUxUX1QyMTsKQEAgLTY5LDYgKzcyLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgeDI1X2FkZHJlc3MgbnVsbF94MjVfYWRkcmVzcyA9IHsiICAgICAgICAgICAgICAgIn07CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdHJ1Y3QgY29tcGF0X3gyNV9zdWJzY3JpcF9zdHJ1Y3QgeworCWNoYXIgZGV2aWNlWzIwMC1zaXplb2YoY29tcGF0X3Vsb25nX3QpXTsKKwljb21wYXRfdWxvbmdfdCBnbG9iYWxfZmFjaWxfbWFzazsKKwljb21wYXRfdWludF90IGV4dGVuZGVkOworfTsKKyNlbmRpZgorCiBpbnQgeDI1X2FkZHJfbnRvYSh1bnNpZ25lZCBjaGFyICpwLCBzdHJ1Y3QgeDI1X2FkZHJlc3MgKmNhbGxlZF9hZGRyLAogCQkgIHN0cnVjdCB4MjVfYWRkcmVzcyAqY2FsbGluZ19hZGRyKQogewpAQCAtNTE0LDYgKzUyNSwxMyBAQAogCXgyNS0+ZmFjaWxpdGllcy5wYWNzaXplX291dCA9IFgyNV9ERUZBVUxUX1BBQ0tFVF9TSVpFOwogCXgyNS0+ZmFjaWxpdGllcy50aHJvdWdocHV0ICA9IFgyNV9ERUZBVUxUX1RIUk9VR0hQVVQ7CiAJeDI1LT5mYWNpbGl0aWVzLnJldmVyc2UgICAgID0gWDI1X0RFRkFVTFRfUkVWRVJTRTsKKyAJeDI1LT5kdGVfZmFjaWxpdGllcy5jYWxsaW5nX2xlbiA9IDA7CisgCXgyNS0+ZHRlX2ZhY2lsaXRpZXMuY2FsbGVkX2xlbiA9IDA7CisgCW1lbXNldCh4MjUtPmR0ZV9mYWNpbGl0aWVzLmNhbGxlZF9hZSwgJ1wwJywKKwkJIAlzaXplb2YoeDI1LT5kdGVfZmFjaWxpdGllcy5jYWxsZWRfYWUpKTsKKyAJbWVtc2V0KHgyNS0+ZHRlX2ZhY2lsaXRpZXMuY2FsbGluZ19hZSwgJ1wwJywKKwkJIAlzaXplb2YoeDI1LT5kdGVfZmFjaWxpdGllcy5jYWxsaW5nX2FlKSk7CisKIAlyYyA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtNTUwLDYgKzU2OCw3IEBACiAJeDI1LT50MiAgICAgICAgID0gb3gyNS0+dDI7CiAJeDI1LT5mYWNpbGl0aWVzID0gb3gyNS0+ZmFjaWxpdGllczsKIAl4MjUtPnFiaXRpbmNsICAgPSBveDI1LT5xYml0aW5jbDsKKwl4MjUtPmR0ZV9mYWNpbGl0aWVzID0gb3gyNS0+ZHRlX2ZhY2lsaXRpZXM7CiAJeDI1LT5jdWRtYXRjaGxlbmd0aCA9IG94MjUtPmN1ZG1hdGNobGVuZ3RoOwogCXgyNS0+YWNjcHRhcHBydiA9IG94MjUtPmFjY3B0YXBwcnY7CiAKQEAgLTczMyw3ICs3NTIsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCB4MjVfd2FpdF9mb3JfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIGludCB0aW1lb3V0KQorc3RhdGljIGludCB4MjVfd2FpdF9mb3JfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAlpbnQgcmMgPSAwOwpAQCAtODI5LDYgKzg0OCw3IEBACiAJc3RydWN0IHgyNV9zb2NrICptYWtleDI1OwogCXN0cnVjdCB4MjVfYWRkcmVzcyBzb3VyY2VfYWRkciwgZGVzdF9hZGRyOwogCXN0cnVjdCB4MjVfZmFjaWxpdGllcyBmYWNpbGl0aWVzOworCXN0cnVjdCB4MjVfZHRlX2ZhY2lsaXRpZXMgZHRlX2ZhY2lsaXRpZXM7CiAJaW50IGxlbiwgcmM7CiAKIAkvKgpAQCAtODY1LDcgKzg4NSw4IEBACiAJLyoKIAkgKglUcnkgdG8gcmVhY2ggYSBjb21wcm9taXNlIG9uIHRoZSByZXF1ZXN0ZWQgZmFjaWxpdGllcy4KIAkgKi8KLQlpZiAoKGxlbiA9IHgyNV9uZWdvdGlhdGVfZmFjaWxpdGllcyhza2IsIHNrLCAmZmFjaWxpdGllcykpID09IC0xKQorCWxlbiA9IHgyNV9uZWdvdGlhdGVfZmFjaWxpdGllcyhza2IsIHNrLCAmZmFjaWxpdGllcywgJmR0ZV9mYWNpbGl0aWVzKTsKKwlpZiAobGVuID09IC0xKQogCQlnb3RvIG91dF9zb2NrX3B1dDsKIAogCS8qCkBAIC04OTYsOSArOTE3LDEyIEBACiAJbWFrZXgyNS0+c291cmNlX2FkZHIgICA9IHNvdXJjZV9hZGRyOwogCW1ha2V4MjUtPm5laWdoYm91ciAgICAgPSBuYjsKIAltYWtleDI1LT5mYWNpbGl0aWVzICAgID0gZmFjaWxpdGllczsKKwltYWtleDI1LT5kdGVfZmFjaWxpdGllcz0gZHRlX2ZhY2lsaXRpZXM7CiAJbWFrZXgyNS0+dmNfZmFjaWxfbWFzayA9IHgyNV9zayhzayktPnZjX2ZhY2lsX21hc2s7CiAJLyogZW5zdXJlIG5vIHJldmVyc2UgZmFjaWwgb24gYWNjZXB0ICovCiAJbWFrZXgyNS0+dmNfZmFjaWxfbWFzayAmPSB+WDI1X01BU0tfUkVWRVJTRTsKKwkvKiBlbnN1cmUgbm8gY2FsbGluZyBhZGRyZXNzIGV4dGVuc2lvbiBvbiBhY2NlcHQgKi8KKwltYWtleDI1LT52Y19mYWNpbF9tYXNrICY9IH5YMjVfTUFTS19DQUxMSU5HX0FFOwogCW1ha2V4MjUtPmN1ZG1hdGNobGVuZ3RoID0geDI1X3NrKHNrKS0+Y3VkbWF0Y2hsZW5ndGg7CiAKIAkvKiBOb3JtYWxseSBhbGwgY2FsbHMgYXJlIGFjY2VwdGVkIGltbWVkaWF0bHkgKi8KQEAgLTEzMDUsNiArMTMyOSwzNiBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQljYXNlIFNJT0NYMjVHRFRFRkFDSUxJVElFUzogeworIAkJCXJjID0gY29weV90b191c2VyKGFyZ3AsICZ4MjUtPmR0ZV9mYWNpbGl0aWVzLAorCQkJCQkJc2l6ZW9mKHgyNS0+ZHRlX2ZhY2lsaXRpZXMpKTsKKwkJCWlmIChyYykKKwkJCQlyYyA9IC1FRkFVTFQ7CisgCQkJYnJlYWs7CisgCQl9CisKKwkgCWNhc2UgU0lPQ1gyNVNEVEVGQUNJTElUSUVTOiB7CisJIAkJc3RydWN0IHgyNV9kdGVfZmFjaWxpdGllcyBkdGVmYWNzOworCSAJCXJjID0gLUVGQVVMVDsKKwkJIAlpZiAoY29weV9mcm9tX3VzZXIoJmR0ZWZhY3MsIGFyZ3AsIHNpemVvZihkdGVmYWNzKSkpCisJCQkJYnJlYWs7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKKwkJCQkJc2stPnNrX3N0YXRlICE9IFRDUF9DTE9TRSkKKwkJCQlicmVhazsKKwkJCWlmIChkdGVmYWNzLmNhbGxpbmdfbGVuID4gWDI1X01BWF9BRV9MRU4pCisJCQkJYnJlYWs7CisJCQlpZiAoZHRlZmFjcy5jYWxsaW5nX2FlID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQlpZiAoZHRlZmFjcy5jYWxsZWRfbGVuID4gWDI1X01BWF9BRV9MRU4pCisJCQkJYnJlYWs7CisJCQlpZiAoZHRlZmFjcy5jYWxsZWRfYWUgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJCXgyNS0+ZHRlX2ZhY2lsaXRpZXMgPSBkdGVmYWNzOworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKwogCQljYXNlIFNJT0NYMjVHQ0FMTFVTRVJEQVRBOiB7CiAJCQlzdHJ1Y3QgeDI1X2NhbGx1c2VyZGF0YSBjdWQgPSB4MjUtPmNhbGx1c2VyZGF0YTsKIAkJCXJjID0gY29weV90b191c2VyKGFyZ3AsICZjdWQsCkBAIC0xMzg3LDYgKzE0NDEsMTE4IEBACiAJLm93bmVyCT0JVEhJU19NT0RVTEUsCiB9OwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGludCBjb21wYXRfeDI1X3N1YnNjcl9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLAorCQlzdHJ1Y3QgY29tcGF0X3gyNV9zdWJzY3JpcF9zdHJ1Y3QgX191c2VyICp4MjVfc3Vic2NyMzIpCit7CisJc3RydWN0IGNvbXBhdF94MjVfc3Vic2NyaXBfc3RydWN0IHgyNV9zdWJzY3I7CisJc3RydWN0IHgyNV9uZWlnaCAqbmI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgcmMgPSAtRUlOVkFMOworCisJcmMgPSAtRUZBVUxUOworCWlmIChjb3B5X2Zyb21fdXNlcigmeDI1X3N1YnNjciwgeDI1X3N1YnNjcjMyLCBzaXplb2YoKngyNV9zdWJzY3IzMikpKQorCQlnb3RvIG91dDsKKworCXJjID0gLUVJTlZBTDsKKwlkZXYgPSB4MjVfZGV2X2dldCh4MjVfc3Vic2NyLmRldmljZSk7CisJaWYgKGRldiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCW5iID0geDI1X2dldF9uZWlnaChkZXYpOworCWlmIChuYiA9PSBOVUxMKQorCQlnb3RvIG91dF9kZXZfcHV0OworCisJZGV2X3B1dChkZXYpOworCisJaWYgKGNtZCA9PSBTSU9DWDI1R1NVQlNDUklQKSB7CisJCXgyNV9zdWJzY3IuZXh0ZW5kZWQgPSBuYi0+ZXh0ZW5kZWQ7CisJCXgyNV9zdWJzY3IuZ2xvYmFsX2ZhY2lsX21hc2sgPSBuYi0+Z2xvYmFsX2ZhY2lsX21hc2s7CisJCXJjID0gY29weV90b191c2VyKHgyNV9zdWJzY3IzMiwgJngyNV9zdWJzY3IsCisJCQkJc2l6ZW9mKCp4MjVfc3Vic2NyMzIpKSA/IC1FRkFVTFQgOiAwOworCX0gZWxzZSB7CisJCXJjID0gLUVJTlZBTDsKKwkJaWYgKHgyNV9zdWJzY3IuZXh0ZW5kZWQgPT0gMCB8fCB4MjVfc3Vic2NyLmV4dGVuZGVkID09IDEpIHsKKwkJCXJjID0gMDsKKwkJCW5iLT5leHRlbmRlZCA9IHgyNV9zdWJzY3IuZXh0ZW5kZWQ7CisJCQluYi0+Z2xvYmFsX2ZhY2lsX21hc2sgPSB4MjVfc3Vic2NyLmdsb2JhbF9mYWNpbF9tYXNrOworCQl9CisJfQorCXgyNV9uZWlnaF9wdXQobmIpOworb3V0OgorCXJldHVybiByYzsKK291dF9kZXZfcHV0OgorCWRldl9wdXQoZGV2KTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIGludCBjb21wYXRfeDI1X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCisJCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSBjb21wYXRfcHRyKGFyZyk7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisKKwlpbnQgcmMgPSAtRU5PSU9DVExDTUQ7CisKKwlzd2l0Y2goY21kKSB7CisJY2FzZSBUSU9DT1VUUToKKwljYXNlIFRJT0NJTlE6CisJCXJjID0geDI1X2lvY3RsKHNvY2ssIGNtZCwgKHVuc2lnbmVkIGxvbmcpYXJncCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dTVEFNUDoKKwkJcmMgPSAtRUlOVkFMOworCQlpZiAoc2spCisJCQlyYyA9IGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXAoc2ssCisJCQkJCShzdHJ1Y3QgdGltZXZhbCBfX3VzZXIqKWFyZ3ApOworCQlicmVhazsKKwljYXNlIFNJT0NHSUZBRERSOgorCWNhc2UgU0lPQ1NJRkFERFI6CisJY2FzZSBTSU9DR0lGRFNUQUREUjoKKwljYXNlIFNJT0NTSUZEU1RBRERSOgorCWNhc2UgU0lPQ0dJRkJSREFERFI6CisJY2FzZSBTSU9DU0lGQlJEQUREUjoKKwljYXNlIFNJT0NHSUZORVRNQVNLOgorCWNhc2UgU0lPQ1NJRk5FVE1BU0s6CisJY2FzZSBTSU9DR0lGTUVUUklDOgorCWNhc2UgU0lPQ1NJRk1FVFJJQzoKKwkJcmMgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFNJT0NBRERSVDoKKwljYXNlIFNJT0NERUxSVDoKKwkJcmMgPSAtRVBFUk07CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCWJyZWFrOworCQlyYyA9IHgyNV9yb3V0ZV9pb2N0bChjbWQsIGFyZ3ApOworCQlicmVhazsKKwljYXNlIFNJT0NYMjVHU1VCU0NSSVA6CisJCXJjID0gY29tcGF0X3gyNV9zdWJzY3JfaW9jdGwoY21kLCBhcmdwKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DWDI1U1NVQlNDUklQOgorCQlyYyA9IC1FUEVSTTsKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJYnJlYWs7CisJCXJjID0gY29tcGF0X3gyNV9zdWJzY3JfaW9jdGwoY21kLCBhcmdwKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DWDI1R0ZBQ0lMSVRJRVM6CisJY2FzZSBTSU9DWDI1U0ZBQ0lMSVRJRVM6CisJY2FzZSBTSU9DWDI1R0RURUZBQ0lMSVRJRVM6CisJY2FzZSBTSU9DWDI1U0RURUZBQ0lMSVRJRVM6CisJY2FzZSBTSU9DWDI1R0NBTExVU0VSREFUQToKKwljYXNlIFNJT0NYMjVTQ0FMTFVTRVJEQVRBOgorCWNhc2UgU0lPQ1gyNUdDQVVTRURJQUc6CisJY2FzZSBTSU9DWDI1U0NVRE1BVENITEVOOgorCWNhc2UgU0lPQ1gyNUNBTExBQ0NQVEFQUFJWOgorCWNhc2UgU0lPQ1gyNVNFTkRDQUxMQUNDUFQ6CisJCXJjID0geDI1X2lvY3RsKHNvY2ssIGNtZCwgKHVuc2lnbmVkIGxvbmcpYXJncCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJjOworfQorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIFNPQ0tPUFNfV1JBUFBFRCh4MjVfcHJvdG9fb3BzKSA9IHsKIAkuZmFtaWx5ID0JQUZfWDI1LAogCS5vd25lciA9CVRISVNfTU9EVUxFLApAQCAtMTM5OCw2ICsxNTY0LDkgQEAKIAkuZ2V0bmFtZSA9CXgyNV9nZXRuYW1lLAogCS5wb2xsID0JCWRhdGFncmFtX3BvbGwsCiAJLmlvY3RsID0JeDI1X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gY29tcGF0X3gyNV9pb2N0bCwKKyNlbmRpZgogCS5saXN0ZW4gPQl4MjVfbGlzdGVuLAogCS5zaHV0ZG93biA9CXNvY2tfbm9fc2h1dGRvd24sCiAJLnNldHNvY2tvcHQgPQl4MjVfc2V0c29ja29wdCwKZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYyBiL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYwppbmRleCA1NDI3OGI5Li45ZjQyYjljOSAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCisrKyBiL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYwpAQCAtMjgsMTggKzI4LDI4IEBACiAjaW5jbHVkZSA8bmV0L3gyNS5oPgogCiAvKgotICoJUGFyc2UgYSBzZXQgb2YgZmFjaWxpdGllcyBpbnRvIHRoZSBmYWNpbGl0aWVzIHN0cnVjdHVyZS4gVW5yZWNvZ25pc2VkCisgKiBQYXJzZSBhIHNldCBvZiBmYWNpbGl0aWVzIGludG8gdGhlIGZhY2lsaXRpZXMgc3RydWN0dXJlcy4gVW5yZWNvZ25pc2VkCiAgKglmYWNpbGl0aWVzIGFyZSB3cml0dGVuIHRvIHRoZSBkZWJ1ZyBsb2cgZmlsZS4KICAqLwotaW50IHgyNV9wYXJzZV9mYWNpbGl0aWVzKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgc3RydWN0IHgyNV9mYWNpbGl0aWVzICpmYWNpbGl0aWVzLAotCQkJIHVuc2lnbmVkIGxvbmcgKnZjX2ZhY19tYXNrKQoraW50IHgyNV9wYXJzZV9mYWNpbGl0aWVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqZmFjaWxpdGllcywKKwkJc3RydWN0IHgyNV9kdGVfZmFjaWxpdGllcyAqZHRlX2ZhY3MsIHVuc2lnbmVkIGxvbmcgKnZjX2ZhY19tYXNrKQogewogCXVuc2lnbmVkIGNoYXIgKnAgPSBza2ItPmRhdGE7CiAJdW5zaWduZWQgaW50IGxlbiA9ICpwKys7CiAKIAkqdmNfZmFjX21hc2sgPSAwOwogCisJLyoKKwkgKiBUaGUga2VybmVsIGtub3dzIHdoaWNoIGZhY2lsaXRpZXMgd2VyZSBzZXQgb24gYW4gaW5jb21pbmcgY2FsbCBidXQKKwkgKiBjdXJyZW50bHkgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHVzZXJzcGFjZS4gIEhlcmUgd2UKKwkgKiBnaXZlIHVzZXJzcGFjZSB3aG8gcmVhZCBpbmNvbWluZyBjYWxsIGZhY2lsaXRpZXMgMCBsZW5ndGggdG8gaW5kaWNhdGUKKwkgKiBpdCB3YXNuJ3Qgc2V0LgorCSAqLworCWR0ZV9mYWNzLT5jYWxsaW5nX2xlbiA9IDA7CisJZHRlX2ZhY3MtPmNhbGxlZF9sZW4gPSAwOworCW1lbXNldChkdGVfZmFjcy0+Y2FsbGVkX2FlLCAnXDAnLCBzaXplb2YoZHRlX2ZhY3MtPmNhbGxlZF9hZSkpOworCW1lbXNldChkdGVfZmFjcy0+Y2FsbGluZ19hZSwgJ1wwJywgc2l6ZW9mKGR0ZV9mYWNzLT5jYWxsaW5nX2FlKSk7CisKIAl3aGlsZSAobGVuID4gMCkgewogCQlzd2l0Y2ggKCpwICYgWDI1X0ZBQ19DTEFTU19NQVNLKSB7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19BOgpAQCAtNzQsNiArODQsOCBAQAogCQkJCWZhY2lsaXRpZXMtPnRocm91Z2hwdXQgPSBwWzFdOwogCQkJCSp2Y19mYWNfbWFzayB8PSBYMjVfTUFTS19USFJPVUdIUFVUOwogCQkJCWJyZWFrOworCQkJY2FzZSBYMjVfTUFSS0VSOgorCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiWC4yNTogdW5rbm93biBmYWNpbGl0eSAiCiAJCQkJICAgICAgICIlMDJYLCB2YWx1ZSAlMDJYXG4iLApAQCAtMTEyLDExICsxMjQsMzAgQEAKIAkJCWxlbiAtPSA0OwogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19EOgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlguMjU6IHVua25vd24gZmFjaWxpdHkgJTAyWCwgIgotCQkJICAgICAgICJsZW5ndGggJWQsIHZhbHVlcyAlMDJYLCAlMDJYLCAlMDJYLCAlMDJYXG4iLAotCQkJICAgICAgIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pOworCQkJc3dpdGNoICgqcCkgeworCSAJCWNhc2UgWDI1X0ZBQ19DQUxMSU5HX0FFOgorCSAJCQlpZiAocFsxXSA+IFgyNV9NQVhfRFRFX0ZBQ0lMX0xFTikKKwkJCQkJYnJlYWs7CisJCQkJZHRlX2ZhY3MtPmNhbGxpbmdfbGVuID0gcFsyXTsKKwkJCQltZW1jcHkoZHRlX2ZhY3MtPmNhbGxpbmdfYWUsICZwWzNdLCBwWzFdIC0gMSk7CisJCQkJKnZjX2ZhY19tYXNrIHw9IFgyNV9NQVNLX0NBTExJTkdfQUU7CisJCQkJYnJlYWs7CisJCQljYXNlIFgyNV9GQUNfQ0FMTEVEX0FFOgorCQkJCWlmIChwWzFdID4gWDI1X01BWF9EVEVfRkFDSUxfTEVOKQorCQkJCQlicmVhazsKKwkJCQlkdGVfZmFjcy0+Y2FsbGVkX2xlbiA9IHBbMl07CisJCQkJbWVtY3B5KGR0ZV9mYWNzLT5jYWxsZWRfYWUsICZwWzNdLCBwWzFdIC0gMSk7CisJCQkJKnZjX2ZhY19tYXNrIHw9IFgyNV9NQVNLX0NBTExFRF9BRTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlguMjU6IHVua25vd24gZmFjaWxpdHkgJTAyWCwiCisJCQkJCSJsZW5ndGggJWQsIHZhbHVlcyAlMDJYLCAlMDJYLCAiCisJCQkJCSIlMDJYLCAlMDJYXG4iLAorCQkJCQlwWzBdLCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVdKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWxlbiAtPSBwWzFdICsgMjsKLQkJCXAgICArPSBwWzFdICsgMjsKKwkJCXAgKz0gcFsxXSArIDI7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTEyOCw4ICsxNTksOCBAQAogICoJQ3JlYXRlIGEgc2V0IG9mIGZhY2lsaXRpZXMuCiAgKi8KIGludCB4MjVfY3JlYXRlX2ZhY2lsaXRpZXModW5zaWduZWQgY2hhciAqYnVmZmVyLAotCQkJICBzdHJ1Y3QgeDI1X2ZhY2lsaXRpZXMgKmZhY2lsaXRpZXMsCi0JCQkgIHVuc2lnbmVkIGxvbmcgZmFjaWxfbWFzaykKKwkJc3RydWN0IHgyNV9mYWNpbGl0aWVzICpmYWNpbGl0aWVzLAorCQlzdHJ1Y3QgeDI1X2R0ZV9mYWNpbGl0aWVzICpkdGVfZmFjcywgdW5zaWduZWQgbG9uZyBmYWNpbF9tYXNrKQogewogCXVuc2lnbmVkIGNoYXIgKnAgPSBidWZmZXIgKyAxOwogCWludCBsZW47CkBAIC0xNjgsNiArMTk5LDMzIEBACiAJCSpwKysgPSBmYWNpbGl0aWVzLT53aW5zaXplX291dCA/IDogZmFjaWxpdGllcy0+d2luc2l6ZV9pbjsKIAl9CiAKKwlpZiAoZmFjaWxfbWFzayAmIChYMjVfTUFTS19DQUxMSU5HX0FFfFgyNV9NQVNLX0NBTExFRF9BRSkpIHsKKwkJKnArKyA9IFgyNV9NQVJLRVI7CisJCSpwKysgPSBYMjVfRFRFX1NFUlZJQ0VTOworCX0KKworCWlmIChkdGVfZmFjcy0+Y2FsbGluZ19sZW4gJiYgKGZhY2lsX21hc2sgJiBYMjVfTUFTS19DQUxMSU5HX0FFKSkgeworCQl1bnNpZ25lZCBieXRlY291bnQgPSAoZHRlX2ZhY3MtPmNhbGxpbmdfbGVuICUgMikgPworCQkJCQlkdGVfZmFjcy0+Y2FsbGluZ19sZW4gLyAyICsgMSA6CisJCQkJCWR0ZV9mYWNzLT5jYWxsaW5nX2xlbiAvIDI7CisJCSpwKysgPSBYMjVfRkFDX0NBTExJTkdfQUU7CisJCSpwKysgPSAxICsgYnl0ZWNvdW50OworCQkqcCsrID0gZHRlX2ZhY3MtPmNhbGxpbmdfbGVuOworCQltZW1jcHkocCwgZHRlX2ZhY3MtPmNhbGxpbmdfYWUsIGJ5dGVjb3VudCk7CisJCXAgKz0gYnl0ZWNvdW50OworCX0KKworCWlmIChkdGVfZmFjcy0+Y2FsbGVkX2xlbiAmJiAoZmFjaWxfbWFzayAmIFgyNV9NQVNLX0NBTExFRF9BRSkpIHsKKwkJdW5zaWduZWQgYnl0ZWNvdW50ID0gKGR0ZV9mYWNzLT5jYWxsZWRfbGVuICUgMikgPworCQlkdGVfZmFjcy0+Y2FsbGVkX2xlbiAvIDIgKyAxIDoKKwkJZHRlX2ZhY3MtPmNhbGxlZF9sZW4gLyAyOworCQkqcCsrID0gWDI1X0ZBQ19DQUxMRURfQUU7CisJCSpwKysgPSAxICsgYnl0ZWNvdW50OworCQkqcCsrID0gZHRlX2ZhY3MtPmNhbGxlZF9sZW47CisJCW1lbWNweShwLCBkdGVfZmFjcy0+Y2FsbGVkX2FlLCBieXRlY291bnQpOworCQlwKz1ieXRlY291bnQ7CisJfQorCiAJbGVuICAgICAgID0gcCAtIGJ1ZmZlcjsKIAlidWZmZXJbMF0gPSBsZW4gLSAxOwogCkBAIC0xODAsNyArMjM4LDcgQEAKICAqCVRoZSBvbmx5IHJlYWwgcHJvYmxlbSBpcyB3aXRoIHJldmVyc2UgY2hhcmdpbmcuCiAgKi8KIGludCB4MjVfbmVnb3RpYXRlX2ZhY2lsaXRpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLAotCQkJICAgICBzdHJ1Y3QgeDI1X2ZhY2lsaXRpZXMgKm5ldykKKwkJc3RydWN0IHgyNV9mYWNpbGl0aWVzICpuZXcsIHN0cnVjdCB4MjVfZHRlX2ZhY2lsaXRpZXMgKmR0ZSkKIHsKIAlzdHJ1Y3QgeDI1X3NvY2sgKngyNSA9IHgyNV9zayhzayk7CiAJc3RydWN0IHgyNV9mYWNpbGl0aWVzICpvdXJzID0gJngyNS0+ZmFjaWxpdGllczsKQEAgLTE5MCw3ICsyNDgsNyBAQAogCW1lbXNldCgmdGhlaXJzLCAwLCBzaXplb2YodGhlaXJzKSk7CiAJbWVtY3B5KG5ldywgb3Vycywgc2l6ZW9mKCpuZXcpKTsKIAotCWxlbiA9IHgyNV9wYXJzZV9mYWNpbGl0aWVzKHNrYiwgJnRoZWlycywgJngyNS0+dmNfZmFjaWxfbWFzayk7CisJbGVuID0geDI1X3BhcnNlX2ZhY2lsaXRpZXMoc2tiLCAmdGhlaXJzLCBkdGUsICZ4MjUtPnZjX2ZhY2lsX21hc2spOwogCiAJLyoKIAkgKglUaGV5IHdhbnQgcmV2ZXJzZSBjaGFyZ2luZywgd2Ugd29uJ3QgYWNjZXB0IGl0LgpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfaW4uYyBiL25ldC94MjUveDI1X2luLmMKaW5kZXggMjYxNDY4Ny4uZWVkNTBlMSAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfaW4uYworKysgYi9uZXQveDI1L3gyNV9pbi5jCkBAIC0xMDYsNyArMTA2LDggQEAKIAkJCXNrYl9wdWxsKHNrYiwgeDI1X2FkZHJfbnRvYShza2ItPmRhdGEsICZzb3VyY2VfYWRkciwgJmRlc3RfYWRkcikpOwogCQkJc2tiX3B1bGwoc2tiLAogCQkJCSB4MjVfcGFyc2VfZmFjaWxpdGllcyhza2IsICZ4MjUtPmZhY2lsaXRpZXMsCi0JCQkJCQkgICAgICAmeDI1LT52Y19mYWNpbF9tYXNrKSk7CisJCQkJCQkmeDI1LT5kdGVfZmFjaWxpdGllcywKKwkJCQkJCSZ4MjUtPnZjX2ZhY2lsX21hc2spKTsKIAkJCS8qCiAJCQkgKglDb3B5IGFueSBDYWxsIFVzZXIgRGF0YS4KIAkJCSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfc3Vici5jIGIvbmV0L3gyNS94MjVfc3Vici5jCmluZGV4IDhiZTliOGYuLjhkNjIyMGEgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X3N1YnIuYworKysgYi9uZXQveDI1L3gyNV9zdWJyLmMKQEAgLTE5MCw4ICsxOTAsOSBAQAogCQkJZHB0ciAgICA9IHNrYl9wdXQoc2tiLCBsZW4pOwogCQkJbWVtY3B5KGRwdHIsIGFkZHJlc3NlcywgbGVuKTsKIAkJCWxlbiAgICAgPSB4MjVfY3JlYXRlX2ZhY2lsaXRpZXMoZmFjaWxpdGllcywKLQkJCQkJCQkmeDI1LT5mYWNpbGl0aWVzLAotCQkJCQkgICAgIHgyNS0+bmVpZ2hib3VyLT5nbG9iYWxfZmFjaWxfbWFzayk7CisJCQkJCSZ4MjUtPmZhY2lsaXRpZXMsCisJCQkJCSZ4MjUtPmR0ZV9mYWNpbGl0aWVzLAorCQkJCQl4MjUtPm5laWdoYm91ci0+Z2xvYmFsX2ZhY2lsX21hc2spOwogCQkJZHB0ciAgICA9IHNrYl9wdXQoc2tiLCBsZW4pOwogCQkJbWVtY3B5KGRwdHIsIGZhY2lsaXRpZXMsIGxlbik7CiAJCQlkcHRyID0gc2tiX3B1dChza2IsIHgyNS0+Y2FsbHVzZXJkYXRhLmN1ZGxlbmd0aCk7CkBAIC0yMDYsNiArMjA3LDcgQEAKIAkJCSpkcHRyKysgPSAweDAwOwkJLyogQWRkcmVzcyBsZW5ndGhzICovCiAJCQlsZW4gICAgID0geDI1X2NyZWF0ZV9mYWNpbGl0aWVzKGZhY2lsaXRpZXMsCiAJCQkJCQkJJngyNS0+ZmFjaWxpdGllcywKKwkJCQkJCQkmeDI1LT5kdGVfZmFjaWxpdGllcywKIAkJCQkJCQl4MjUtPnZjX2ZhY2lsX21hc2spOwogCQkJZHB0ciAgICA9IHNrYl9wdXQoc2tiLCBsZW4pOwogCQkJbWVtY3B5KGRwdHIsIGZhY2lsaXRpZXMsIGxlbik7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCA5OGVjNTNiLi5mNWVhZTlmIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlIDxuZXQveGZybS5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogCi1ERUNMQVJFX01VVEVYKHhmcm1fY2ZnX3NlbSk7Ci1FWFBPUlRfU1lNQk9MKHhmcm1fY2ZnX3NlbSk7CitERUZJTkVfTVVURVgoeGZybV9jZmdfbXV0ZXgpOworRVhQT1JUX1NZTUJPTCh4ZnJtX2NmZ19tdXRleCk7CiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKHhmcm1fcG9saWN5X2xvY2spOwogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAl9CiAKIAlpZiAod2FybikKLQkJa21fcG9saWN5X2V4cGlyZWQoeHAsIGRpciwgMCk7CisJCWttX3BvbGljeV9leHBpcmVkKHhwLCBkaXIsIDAsIDApOwogCWlmIChuZXh0ICE9IExPTkdfTUFYICYmCiAJICAgICFtb2RfdGltZXIoJnhwLT50aW1lciwgamlmZmllcyArIG1ha2VfamlmZmllcyhuZXh0KSkpCiAJCXhmcm1fcG9sX2hvbGQoeHApOwpAQCAtMjE2LDcgKzIxNiw3IEBACiBleHBpcmVkOgogCXJlYWRfdW5sb2NrKCZ4cC0+bG9jayk7CiAJaWYgKCF4ZnJtX3BvbGljeV9kZWxldGUoeHAsIGRpcikpCi0JCWttX3BvbGljeV9leHBpcmVkKHhwLCBkaXIsIDEpOworCQlrbV9wb2xpY3lfZXhwaXJlZCh4cCwgZGlyLCAxLCAwKTsKIAl4ZnJtX3BvbF9wdXQoeHApOwogfQogCkBAIC02MjEsNiArNjIxLDcgQEAKIAl9CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CitFWFBPUlRfU1lNQk9MKHhmcm1fcG9saWN5X2RlbGV0ZSk7CiAKIGludCB4ZnJtX3NrX3BvbGljeV9pbnNlcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCkKIHsKQEAgLTc4Miw3ICs3ODMsNyBAQAogCWludCBueCA9IDA7CiAJaW50IGVycjsKIAl1MzIgZ2VuaWQ7Ci0JdTE2IGZhbWlseSA9IGRzdF9vcmlnLT5vcHMtPmZhbWlseTsKKwl1MTYgZmFtaWx5OwogCXU4IGRpciA9IHBvbGljeV90b19mbG93X2RpcihYRlJNX1BPTElDWV9PVVQpOwogCXUzMiBza19zaWQgPSBzZWN1cml0eV9za19zaWQoc2ssIGZsLCBkaXIpOwogcmVzdGFydDoKQEAgLTc5NiwxMyArNzk3LDE0IEBACiAJCWlmICgoZHN0X29yaWctPmZsYWdzICYgRFNUX05PWEZSTSkgfHwgIXhmcm1fcG9saWN5X2xpc3RbWEZSTV9QT0xJQ1lfT1VUXSkKIAkJCXJldHVybiAwOwogCi0JCXBvbGljeSA9IGZsb3dfY2FjaGVfbG9va3VwKGZsLCBza19zaWQsIGZhbWlseSwgZGlyLAotCQkJCQkgICB4ZnJtX3BvbGljeV9sb29rdXApOworCQlwb2xpY3kgPSBmbG93X2NhY2hlX2xvb2t1cChmbCwgc2tfc2lkLCBkc3Rfb3JpZy0+b3BzLT5mYW1pbHksCisJCQkJCSAgIGRpciwgeGZybV9wb2xpY3lfbG9va3VwKTsKIAl9CiAKIAlpZiAoIXBvbGljeSkKIAkJcmV0dXJuIDA7CiAKKwlmYW1pbHkgPSBkc3Rfb3JpZy0+b3BzLT5mYW1pbHk7CiAJcG9saWN5LT5jdXJsZnQudXNlX3RpbWUgPSAodW5zaWduZWQgbG9uZyl4dGltZS50dl9zZWM7CiAKIAlzd2l0Y2ggKHBvbGljeS0+YWN0aW9uKSB7CkBAIC04ODUsOCArODg3LDYgQEAKIAkJCSAqIFdlIGNhbid0IGVubGlzdCBzdGFibGUgYnVuZGxlcyBlaXRoZXIuCiAJCQkgKi8KIAkJCXdyaXRlX3VubG9ja19iaCgmcG9saWN5LT5sb2NrKTsKLQotCQkJeGZybV9wb2xfcHV0KHBvbGljeSk7CiAJCQlpZiAoZHN0KQogCQkJCWRzdF9mcmVlKGRzdCk7CiAKQEAgLTk5NywxMyArOTk3LDYgQEAKIAkJCXN0cnVjdCBzZWNfZGVjYXBfc3RhdGUgKnh2ZWMgPSAmKHNrYi0+c3AtPnhbaV0pOwogCQkJaWYgKCF4ZnJtX3NlbGVjdG9yX21hdGNoKCZ4dmVjLT54dmVjLT5zZWwsICZmbCwgZmFtaWx5KSkKIAkJCQlyZXR1cm4gMDsKLQotCQkJLyogSWYgdGhlcmUgaXMgYSBwb3N0X2lucHV0IHByb2Nlc3NvciwgdHJ5IHJ1bm5pbmcgaXQgKi8KLQkJCWlmICh4dmVjLT54dmVjLT50eXBlLT5wb3N0X2lucHV0ICYmCi0JCQkgICAgKHh2ZWMtPnh2ZWMtPnR5cGUtPnBvc3RfaW5wdXQpKHh2ZWMtPnh2ZWMsCi0JCQkJCQkJICAgJih4dmVjLT5kZWNhcCksCi0JCQkJCQkJICAgc2tiKSAhPSAwKQotCQkJCXJldHVybiAwOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggZTEyZDBiZS4uYThlMTRkYyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtMjAsNiArMjAsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCitzdHJ1Y3Qgc29jayAqeGZybV9ubDsKK0VYUE9SVF9TWU1CT0woeGZybV9ubCk7CisKK3UzMiBzeXNjdGxfeGZybV9hZXZlbnRfZXRpbWUgPSBYRlJNX0FFX0VUSU1FOworRVhQT1JUX1NZTUJPTChzeXNjdGxfeGZybV9hZXZlbnRfZXRpbWUpOworCit1MzIgc3lzY3RsX3hmcm1fYWV2ZW50X3JzZXF0aCA9IFhGUk1fQUVfU0VRVF9TSVpFOworRVhQT1JUX1NZTUJPTChzeXNjdGxfeGZybV9hZXZlbnRfcnNlcXRoKTsKKwogLyogRWFjaCB4ZnJtX3N0YXRlIG1heSBiZSBsaW5rZWQgdG8gdHdvIHRhYmxlczoKIAogICAgMS4gSGFzaCB0YWJsZSBieSAoc3BpLGRhZGRyLGFoL2VzcCkgdG8gZmluZCBTQSBieSBTUEkuIChpbnB1dCxjdGwpCkBAIC01MCwxOCArNTksMjAgQEAKIAogc3RhdGljIGludCB4ZnJtX3N0YXRlX2djX2ZsdXNoX2J1bmRsZXM7CiAKLXN0YXRpYyBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CitpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKnhmcm1fc3RhdGVfZ2V0X2FmaW5mbyh1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9wdXRfYWZpbmZvKHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvKTsKIAotc3RhdGljIGludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpOwotc3RhdGljIHZvaWQga21fc3RhdGVfZXhwaXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGhhcmQpOworaW50IGttX3F1ZXJ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCk7Cit2b2lkIGttX3N0YXRlX2V4cGlyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBoYXJkLCB1MzIgcGlkKTsKIAogc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY19kZXN0cm95KHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogewogCWlmIChkZWxfdGltZXIoJngtPnRpbWVyKSkKIAkJQlVHKCk7CisJaWYgKGRlbF90aW1lcigmeC0+cnRpbWVyKSkKKwkJQlVHKCk7CiAJa2ZyZWUoeC0+YWFsZyk7CiAJa2ZyZWUoeC0+ZWFsZyk7CiAJa2ZyZWUoeC0+Y2FsZyk7CkBAIC0xNTMsNyArMTY0LDcgQEAKIAogCXgtPmttLmR5aW5nID0gd2FybjsKIAlpZiAod2FybikKLQkJa21fc3RhdGVfZXhwaXJlZCh4LCAwKTsKKwkJa21fc3RhdGVfZXhwaXJlZCh4LCAwLCAwKTsKIHJlc2NoZWQ6CiAJaWYgKG5leHQgIT0gTE9OR19NQVggJiYKIAkgICAgIW1vZF90aW1lcigmeC0+dGltZXIsIGppZmZpZXMgKyBtYWtlX2ppZmZpZXMobmV4dCkpKQpAQCAtMTY4LDEzICsxNzksMTUgQEAKIAkJZ290byByZXNjaGVkOwogCX0KIAlpZiAoIV9feGZybV9zdGF0ZV9kZWxldGUoeCkgJiYgeC0+aWQuc3BpKQotCQlrbV9zdGF0ZV9leHBpcmVkKHgsIDEpOworCQlrbV9zdGF0ZV9leHBpcmVkKHgsIDEsIDApOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2soJngtPmxvY2spOwogCXhmcm1fc3RhdGVfcHV0KHgpOwogfQogCitzdGF0aWMgdm9pZCB4ZnJtX3JlcGxheV90aW1lcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2FsbG9jKHZvaWQpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CkBAIC0xOTAsMTEgKzIwMywxNiBAQAogCQlpbml0X3RpbWVyKCZ4LT50aW1lcik7CiAJCXgtPnRpbWVyLmZ1bmN0aW9uID0geGZybV90aW1lcl9oYW5kbGVyOwogCQl4LT50aW1lci5kYXRhCSAgPSAodW5zaWduZWQgbG9uZyl4OworCQlpbml0X3RpbWVyKCZ4LT5ydGltZXIpOworCQl4LT5ydGltZXIuZnVuY3Rpb24gPSB4ZnJtX3JlcGxheV90aW1lcl9oYW5kbGVyOworCQl4LT5ydGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZyl4OwogCQl4LT5jdXJsZnQuYWRkX3RpbWUgPSAodW5zaWduZWQgbG9uZyl4dGltZS50dl9zZWM7CiAJCXgtPmxmdC5zb2Z0X2J5dGVfbGltaXQgPSBYRlJNX0lORjsKIAkJeC0+bGZ0LnNvZnRfcGFja2V0X2xpbWl0ID0gWEZSTV9JTkY7CiAJCXgtPmxmdC5oYXJkX2J5dGVfbGltaXQgPSBYRlJNX0lORjsKIAkJeC0+bGZ0LmhhcmRfcGFja2V0X2xpbWl0ID0gWEZSTV9JTkY7CisJCXgtPnJlcGxheV9tYXhhZ2UgPSAwOworCQl4LT5yZXBsYXlfbWF4ZGlmZiA9IDA7CiAJCXNwaW5fbG9ja19pbml0KCZ4LT5sb2NrKTsKIAl9CiAJcmV0dXJuIHg7CkBAIC0yMTIsNyArMjMwLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woX194ZnJtX3N0YXRlX2Rlc3Ryb3kpOwogCi1zdGF0aWMgaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCitpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKIAlpbnQgZXJyID0gLUVTUkNIOwogCkBAIC0yMjAsMTQgKzIzOCwxNiBAQAogCQl4LT5rbS5zdGF0ZSA9IFhGUk1fU1RBVEVfREVBRDsKIAkJc3Bpbl9sb2NrKCZ4ZnJtX3N0YXRlX2xvY2spOwogCQlsaXN0X2RlbCgmeC0+Ynlkc3QpOwotCQlhdG9taWNfZGVjKCZ4LT5yZWZjbnQpOworCQlfX3hmcm1fc3RhdGVfcHV0KHgpOwogCQlpZiAoeC0+aWQuc3BpKSB7CiAJCQlsaXN0X2RlbCgmeC0+YnlzcGkpOwotCQkJYXRvbWljX2RlYygmeC0+cmVmY250KTsKKwkJCV9feGZybV9zdGF0ZV9wdXQoeCk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnhmcm1fc3RhdGVfbG9jayk7CiAJCWlmIChkZWxfdGltZXIoJngtPnRpbWVyKSkKLQkJCWF0b21pY19kZWMoJngtPnJlZmNudCk7CisJCQlfX3hmcm1fc3RhdGVfcHV0KHgpOworCQlpZiAoZGVsX3RpbWVyKCZ4LT5ydGltZXIpKQorCQkJX194ZnJtX3N0YXRlX3B1dCh4KTsKIAogCQkvKiBUaGUgbnVtYmVyIHR3byBpbiB0aGlzIHRlc3QgaXMgdGhlIHJlZmVyZW5jZQogCQkgKiBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnQgYmVsb3cgcGx1cyB0aGUgcmVmZXJlbmNlCkBAIC0yNDMsMTIgKzI2MywxMyBAQAogCQkgKiBUaGUgeGZybV9zdGF0ZV9hbGxvYyBjYWxsIGdpdmVzIGEgcmVmZXJlbmNlLCBhbmQgdGhhdAogCQkgKiBpcyB3aGF0IHdlIGFyZSBkcm9wcGluZyBoZXJlLgogCQkgKi8KLQkJYXRvbWljX2RlYygmeC0+cmVmY250KTsKKwkJX194ZnJtX3N0YXRlX3B1dCh4KTsKIAkJZXJyID0gMDsKIAl9CiAKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChfX3hmcm1fc3RhdGVfZGVsZXRlKTsKIAogaW50IHhmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogewpAQCAtNDI2LDYgKzQ0NywxMCBAQAogCWlmICghbW9kX3RpbWVyKCZ4LT50aW1lciwgamlmZmllcyArIEhaKSkKIAkJeGZybV9zdGF0ZV9ob2xkKHgpOwogCisJaWYgKHgtPnJlcGxheV9tYXhhZ2UgJiYKKwkgICAgIW1vZF90aW1lcigmeC0+cnRpbWVyLCBqaWZmaWVzICsgeC0+cmVwbGF5X21heGFnZSkpCisJCXhmcm1fc3RhdGVfaG9sZCh4KTsKKwogCXdha2VfdXAoJmttX3dhaXRxKTsKIH0KIApAQCAtNTgwLDcgKzYwNSw3IEBACiAJICAgICh4LT5jdXJsZnQuYnl0ZXMgPj0geC0+bGZ0LnNvZnRfYnl0ZV9saW1pdCB8fAogCSAgICAgeC0+Y3VybGZ0LnBhY2tldHMgPj0geC0+bGZ0LnNvZnRfcGFja2V0X2xpbWl0KSkgewogCQl4LT5rbS5keWluZyA9IDE7Ci0JCWttX3N0YXRlX2V4cGlyZWQoeCwgMCk7CisJCWttX3N0YXRlX2V4cGlyZWQoeCwgMCwgMCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzYyLDYgKzc4Nyw2MSBAQAogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3dhbGspOwogCisKK3ZvaWQgeGZybV9yZXBsYXlfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgZXZlbnQpCit7CisJc3RydWN0IGttX2V2ZW50IGM7CisJLyogd2Ugc2VuZCBub3RpZnkgbWVzc2FnZXMgaW4gY2FzZQorCSAqICAxLiB3ZSB1cGRhdGVkIG9uIG9mIHRoZSBzZXF1ZW5jZSBudW1iZXJzLCBhbmQgdGhlIHNlcW5vIGRpZmZlcmVuY2UKKwkgKiAgICAgaXMgYXQgbGVhc3QgeC0+cmVwbGF5X21heGRpZmYsIGluIHRoaXMgY2FzZSB3ZSBhbHNvIHVwZGF0ZSB0aGUKKwkgKiAgICAgdGltZW91dCBvZiBvdXIgdGltZXIgZnVuY3Rpb24KKwkgKiAgMi4gaWYgeC0+cmVwbGF5X21heGFnZSBoYXMgZWxhcHNlZCBzaW5jZSBsYXN0IHVwZGF0ZSwKKwkgKiAgICAgYW5kIHRoZXJlIHdlcmUgY2hhbmdlcworCSAqCisJICogIFRoZSBzdGF0ZSBzdHJ1Y3R1cmUgbXVzdCBiZSBsb2NrZWQhCisJICovCisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBYRlJNX1JFUExBWV9VUERBVEU6CisJCWlmICh4LT5yZXBsYXlfbWF4ZGlmZiAmJgorCQkgICAgKHgtPnJlcGxheS5zZXEgLSB4LT5wcmVwbGF5LnNlcSA8IHgtPnJlcGxheV9tYXhkaWZmKSAmJgorCQkgICAgKHgtPnJlcGxheS5vc2VxIC0geC0+cHJlcGxheS5vc2VxIDwgeC0+cmVwbGF5X21heGRpZmYpKQorCQkJcmV0dXJuOworCisJCWJyZWFrOworCisJY2FzZSBYRlJNX1JFUExBWV9USU1FT1VUOgorCQlpZiAoKHgtPnJlcGxheS5zZXEgPT0geC0+cHJlcGxheS5zZXEpICYmCisJCSAgICAoeC0+cmVwbGF5LmJpdG1hcCA9PSB4LT5wcmVwbGF5LmJpdG1hcCkgJiYKKwkJICAgICh4LT5yZXBsYXkub3NlcSA9PSB4LT5wcmVwbGF5Lm9zZXEpKQorCQkJcmV0dXJuOworCisJCWJyZWFrOworCX0KKworCW1lbWNweSgmeC0+cHJlcGxheSwgJngtPnJlcGxheSwgc2l6ZW9mKHN0cnVjdCB4ZnJtX3JlcGxheV9zdGF0ZSkpOworCWMuZXZlbnQgPSBYRlJNX01TR19ORVdBRTsKKwljLmRhdGEuYWV2ZW50ID0gZXZlbnQ7CisJa21fc3RhdGVfbm90aWZ5KHgsICZjKTsKKworCWlmICh4LT5yZXBsYXlfbWF4YWdlICYmCisJICAgICFtb2RfdGltZXIoJngtPnJ0aW1lciwgamlmZmllcyArIHgtPnJlcGxheV9tYXhhZ2UpKQorCQl4ZnJtX3N0YXRlX2hvbGQoeCk7Cit9CitFWFBPUlRfU1lNQk9MKHhmcm1fcmVwbGF5X25vdGlmeSk7CisKK3N0YXRpYyB2b2lkIHhmcm1fcmVwbGF5X3RpbWVyX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gKHN0cnVjdCB4ZnJtX3N0YXRlKilkYXRhOworCisJc3Bpbl9sb2NrKCZ4LT5sb2NrKTsKKworCWlmICh4ZnJtX2FldmVudF9pc19vbigpICYmIHgtPmttLnN0YXRlID09IFhGUk1fU1RBVEVfVkFMSUQpCisJCXhmcm1fcmVwbGF5X25vdGlmeSh4LCBYRlJNX1JFUExBWV9USU1FT1VUKTsKKworCXNwaW5fdW5sb2NrKCZ4LT5sb2NrKTsKK30KKwogaW50IHhmcm1fcmVwbGF5X2NoZWNrKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgc2VxKQogewogCXUzMiBkaWZmOwpAQCAtODA1LDYgKzg4NSw5IEBACiAJCWRpZmYgPSB4LT5yZXBsYXkuc2VxIC0gc2VxOwogCQl4LT5yZXBsYXkuYml0bWFwIHw9ICgxVSA8PCBkaWZmKTsKIAl9CisKKwlpZiAoeGZybV9hZXZlbnRfaXNfb24oKSkKKwkJeGZybV9yZXBsYXlfbm90aWZ5KHgsIFhGUk1fUkVQTEFZX1VQREFURSk7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fcmVwbGF5X2FkdmFuY2UpOwogCkBAIC04MzUsMTEgKzkxOCwxMiBAQAogRVhQT1JUX1NZTUJPTChrbV9wb2xpY3lfbm90aWZ5KTsKIEVYUE9SVF9TWU1CT0woa21fc3RhdGVfbm90aWZ5KTsKIAotc3RhdGljIHZvaWQga21fc3RhdGVfZXhwaXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGhhcmQpCit2b2lkIGttX3N0YXRlX2V4cGlyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBoYXJkLCB1MzIgcGlkKQogewogCXN0cnVjdCBrbV9ldmVudCBjOwogCiAJYy5kYXRhLmhhcmQgPSBoYXJkOworCWMucGlkID0gcGlkOwogCWMuZXZlbnQgPSBYRlJNX01TR19FWFBJUkU7CiAJa21fc3RhdGVfbm90aWZ5KHgsICZjKTsKIApAQCAtODQ3LDExICs5MzEsMTIgQEAKIAkJd2FrZV91cCgma21fd2FpdHEpOwogfQogCitFWFBPUlRfU1lNQk9MKGttX3N0YXRlX2V4cGlyZWQpOwogLyoKICAqIFdlIHNlbmQgdG8gYWxsIHJlZ2lzdGVyZWQgbWFuYWdlcnMgcmVnYXJkbGVzcyBvZiBmYWlsdXJlCiAgKiBXZSBhcmUgaGFwcHkgd2l0aCBvbmUgc3VjY2VzcwogKi8KLXN0YXRpYyBpbnQga21fcXVlcnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3RtcGwgKnQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sKQoraW50IGttX3F1ZXJ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV90bXBsICp0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCkKIHsKIAlpbnQgZXJyID0gLUVJTlZBTCwgYWNxcmV0OwogCXN0cnVjdCB4ZnJtX21nciAqa207CkBAIC04NjUsNiArOTUwLDcgQEAKIAlyZWFkX3VubG9jaygmeGZybV9rbV9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChrbV9xdWVyeSk7CiAKIGludCBrbV9uZXdfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkciwgdTE2IHNwb3J0KQogewpAQCAtODgzLDE3ICs5NjksMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21fbmV3X21hcHBpbmcpOwogCi12b2lkIGttX3BvbGljeV9leHBpcmVkKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyLCBpbnQgaGFyZCkKK3ZvaWQga21fcG9saWN5X2V4cGlyZWQoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIsIGludCBoYXJkLCB1MzIgcGlkKQogewogCXN0cnVjdCBrbV9ldmVudCBjOwogCiAJYy5kYXRhLmhhcmQgPSBoYXJkOworCWMucGlkID0gcGlkOwogCWMuZXZlbnQgPSBYRlJNX01TR19QT0xFWFBJUkU7CiAJa21fcG9saWN5X25vdGlmeShwb2wsIGRpciwgJmMpOwogCiAJaWYgKGhhcmQpCiAJCXdha2VfdXAoJmttX3dhaXRxKTsKIH0KK0VYUE9SVF9TWU1CT0woa21fcG9saWN5X2V4cGlyZWQpOwogCiBpbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCB1OCBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKIHsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggYWM4N2EwOS4uODFkMTAwNSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jayAqeGZybV9ubDsKLQogc3RhdGljIGludCB2ZXJpZnlfb25lX2FsZyhzdHJ1Y3QgcnRhdHRyICoqeGZybWEsIGVudW0geGZybV9hdHRyX3R5cGVfdCB0eXBlKQogewogCXN0cnVjdCBydGF0dHIgKnJ0ID0geGZybWFbdHlwZSAtIDFdOwpAQCAtMTAzLDkgKzEwMSw2IEBACiAKIAl1Y3R4ID0gUlRBX0RBVEEocnQpOwogCi0JaWYgKHVjdHgtPmN0eF9sZW4gPiBQQUdFX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJbGVuICs9IHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHgpOwogCWxlbiArPSB1Y3R4LT5jdHhfbGVuOwogCkBAIC0yNzYsNiArMjcxLDU2IEBACiAJeC0+cHJvcHMuZmxhZ3MgPSBwLT5mbGFnczsKIH0KIAorLyoKKyAqIHNvbWVkYXkgd2hlbiBwZmtleSBhbHNvIGhhcyBzdXBwb3J0LCB3ZSBjb3VsZCBoYXZlIHRoZSBjb2RlCisgKiBzb21laG93IG1hZGUgc2hhcmVhYmxlIGFuZCBtb3ZlIGl0IHRvIHhmcm1fc3RhdGUuYyAtIEpIUworICoKKyovCitzdGF0aWMgaW50IHhmcm1fdXBkYXRlX2FlX3BhcmFtcyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHJ0YXR0ciAqKnhmcm1hKQoreworCWludCBlcnIgPSAtIEVJTlZBTDsKKwlzdHJ1Y3QgcnRhdHRyICpycCA9IHhmcm1hW1hGUk1BX1JFUExBWV9WQUwtMV07CisJc3RydWN0IHJ0YXR0ciAqbHQgPSB4ZnJtYVtYRlJNQV9MVElNRV9WQUwtMV07CisJc3RydWN0IHJ0YXR0ciAqZXQgPSB4ZnJtYVtYRlJNQV9FVElNRVJfVEhSRVNILTFdOworCXN0cnVjdCBydGF0dHIgKnJ0ID0geGZybWFbWEZSTUFfUkVQTEFZX1RIUkVTSC0xXTsKKworCWlmIChycCkgeworCQlzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUgKnJlcGxheTsKKwkJaWYgKFJUQV9QQVlMT0FEKHJwKSA8IHNpemVvZigqcmVwbGF5KSkKKwkJCWdvdG8gZXJyb3I7CisJCXJlcGxheSA9IFJUQV9EQVRBKHJwKTsKKwkJbWVtY3B5KCZ4LT5yZXBsYXksIHJlcGxheSwgc2l6ZW9mKCpyZXBsYXkpKTsKKwkJbWVtY3B5KCZ4LT5wcmVwbGF5LCByZXBsYXksIHNpemVvZigqcmVwbGF5KSk7CisJfQorCisJaWYgKGx0KSB7CisJCXN0cnVjdCB4ZnJtX2xpZmV0aW1lX2N1ciAqbHRpbWU7CisJCWlmIChSVEFfUEFZTE9BRChsdCkgPCBzaXplb2YoKmx0aW1lKSkKKwkJCWdvdG8gZXJyb3I7CisJCWx0aW1lID0gUlRBX0RBVEEobHQpOworCQl4LT5jdXJsZnQuYnl0ZXMgPSBsdGltZS0+Ynl0ZXM7CisJCXgtPmN1cmxmdC5wYWNrZXRzID0gbHRpbWUtPnBhY2tldHM7CisJCXgtPmN1cmxmdC5hZGRfdGltZSA9IGx0aW1lLT5hZGRfdGltZTsKKwkJeC0+Y3VybGZ0LnVzZV90aW1lID0gbHRpbWUtPnVzZV90aW1lOworCX0KKworCWlmIChldCkgeworCQlpZiAoUlRBX1BBWUxPQUQoZXQpIDwgc2l6ZW9mKHUzMikpCisJCQlnb3RvIGVycm9yOworCQl4LT5yZXBsYXlfbWF4YWdlID0gKih1MzIqKVJUQV9EQVRBKGV0KTsKKwl9CisKKwlpZiAocnQpIHsKKwkJaWYgKFJUQV9QQVlMT0FEKHJ0KSA8IHNpemVvZih1MzIpKQorCQkJZ290byBlcnJvcjsKKwkJeC0+cmVwbGF5X21heGRpZmYgPSAqKHUzMiopUlRBX0RBVEEocnQpOworCX0KKworCXJldHVybiAwOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAqcCwKIAkJCQkJICAgICAgIHN0cnVjdCBydGF0dHIgKip4ZnJtYSwKIAkJCQkJICAgICAgIGludCAqZXJycCkKQEAgLTMxMSw2ICszNTYsMTggQEAKIAkJZ290byBlcnJvcjsKIAogCXgtPmttLnNlcSA9IHAtPnNlcTsKKwl4LT5yZXBsYXlfbWF4ZGlmZiA9IHN5c2N0bF94ZnJtX2FldmVudF9yc2VxdGg7CisJLyogc3lzY3RsX3hmcm1fYWV2ZW50X2V0aW1lIGlzIGluIDEwMG1zIHVuaXRzICovCisJeC0+cmVwbGF5X21heGFnZSA9IChzeXNjdGxfeGZybV9hZXZlbnRfZXRpbWUqSFopL1hGUk1fQUVfRVRIX007CisJeC0+cHJlcGxheS5iaXRtYXAgPSAwOworCXgtPnByZXBsYXkuc2VxID0geC0+cmVwbGF5LnNlcSt4LT5yZXBsYXlfbWF4ZGlmZjsKKwl4LT5wcmVwbGF5Lm9zZXEgPSB4LT5yZXBsYXkub3NlcSAreC0+cmVwbGF5X21heGRpZmY7CisKKwkvKiBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBmcm9tIGFib3ZlICovCisKKwllcnIgPSB4ZnJtX3VwZGF0ZV9hZV9wYXJhbXMoeCwgKHN0cnVjdCBydGF0dHIgKiopeGZybWEpOworCWlmIChlcnIJPCAwKQorCQlnb3RvIGVycm9yOwogCiAJcmV0dXJuIHg7CiAKQEAgLTM0NSw3ICs0MDIsNyBAQAogCiAJaWYgKGVyciA8IDApIHsKIAkJeC0+a20uc3RhdGUgPSBYRlJNX1NUQVRFX0RFQUQ7Ci0JCXhmcm1fc3RhdGVfcHV0KHgpOworCQlfX3hmcm1fc3RhdGVfcHV0KHgpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwMjUsOSArMTA4MiwxNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorCitzdGF0aWMgaW50IGJ1aWxkX2FldmVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IGttX2V2ZW50ICpjKQoreworCXN0cnVjdCB4ZnJtX2FldmVudF9pZCAqaWQ7CisJc3RydWN0IG5sbXNnaGRyICpubGg7CisJc3RydWN0IHhmcm1fbGlmZXRpbWVfY3VyIGx0aW1lOworCXVuc2lnbmVkIGNoYXIgKmIgPSBza2ItPnRhaWw7CisKKwlubGggPSBOTE1TR19QVVQoc2tiLCBjLT5waWQsIGMtPnNlcSwgWEZSTV9NU0dfTkVXQUUsIHNpemVvZigqaWQpKTsKKwlpZCA9IE5MTVNHX0RBVEEobmxoKTsKKwlubGgtPm5sbXNnX2ZsYWdzID0gMDsKKworCWlkLT5zYV9pZC5kYWRkciA9IHgtPmlkLmRhZGRyOworCWlkLT5zYV9pZC5zcGkgPSB4LT5pZC5zcGk7CisJaWQtPnNhX2lkLmZhbWlseSA9IHgtPnByb3BzLmZhbWlseTsKKwlpZC0+c2FfaWQucHJvdG8gPSB4LT5pZC5wcm90bzsKKwlpZC0+ZmxhZ3MgPSBjLT5kYXRhLmFldmVudDsKKworCVJUQV9QVVQoc2tiLCBYRlJNQV9SRVBMQVlfVkFMLCBzaXplb2YoeC0+cmVwbGF5KSwgJngtPnJlcGxheSk7CisKKwlsdGltZS5ieXRlcyA9IHgtPmN1cmxmdC5ieXRlczsKKwlsdGltZS5wYWNrZXRzID0geC0+Y3VybGZ0LnBhY2tldHM7CisJbHRpbWUuYWRkX3RpbWUgPSB4LT5jdXJsZnQuYWRkX3RpbWU7CisJbHRpbWUudXNlX3RpbWUgPSB4LT5jdXJsZnQudXNlX3RpbWU7CisKKwlSVEFfUFVUKHNrYiwgWEZSTUFfTFRJTUVfVkFMLCBzaXplb2Yoc3RydWN0IHhmcm1fbGlmZXRpbWVfY3VyKSwgJmx0aW1lKTsKKworCWlmIChpZC0+ZmxhZ3MmWEZSTV9BRV9SVEhSKSB7CisJCVJUQV9QVVQoc2tiLFhGUk1BX1JFUExBWV9USFJFU0gsc2l6ZW9mKHUzMiksJngtPnJlcGxheV9tYXhkaWZmKTsKKwl9CisKKwlpZiAoaWQtPmZsYWdzJlhGUk1fQUVfRVRIUikgeworCQl1MzIgZXRpbWVyID0geC0+cmVwbGF5X21heGFnZSoxMC9IWjsKKwkJUlRBX1BVVChza2IsWEZSTUFfRVRJTUVSX1RIUkVTSCxzaXplb2YodTMyKSwmZXRpbWVyKTsKKwl9CisKKwlubGgtPm5sbXNnX2xlbiA9IHNrYi0+dGFpbCAtIGI7CisJcmV0dXJuIHNrYi0+bGVuOworCitydGF0dHJfZmFpbHVyZToKK25sbXNnX2ZhaWx1cmU6CisJc2tiX3RyaW0oc2tiLCBiIC0gc2tiLT5kYXRhKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgeGZybV9nZXRfYWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKip4ZnJtYSkKK3sKKwlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcl9za2I7CisJaW50IGVycjsKKwlzdHJ1Y3Qga21fZXZlbnQgYzsKKwlzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgKnAgPSBOTE1TR19EQVRBKG5saCk7CisJaW50IGxlbiA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHhmcm1fYWV2ZW50X2lkKSk7CisJc3RydWN0IHhmcm1fdXNlcnNhX2lkICppZCA9ICZwLT5zYV9pZDsKKworCWxlbiArPSBSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB4ZnJtX3JlcGxheV9zdGF0ZSkpOworCWxlbiArPSBSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB4ZnJtX2xpZmV0aW1lX2N1cikpOworCisJaWYgKHAtPmZsYWdzJlhGUk1fQUVfUlRIUikKKwkJbGVuKz1SVEFfU1BBQ0Uoc2l6ZW9mKHUzMikpOworCisJaWYgKHAtPmZsYWdzJlhGUk1fQUVfRVRIUikKKwkJbGVuKz1SVEFfU1BBQ0Uoc2l6ZW9mKHUzMikpOworCisJcl9za2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAocl9za2IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl4ID0geGZybV9zdGF0ZV9sb29rdXAoJmlkLT5kYWRkciwgaWQtPnNwaSwgaWQtPnByb3RvLCBpZC0+ZmFtaWx5KTsKKwlpZiAoeCA9PSBOVUxMKSB7CisJCWtmcmVlKHJfc2tiKTsKKwkJcmV0dXJuIC1FU1JDSDsKKwl9CisKKwkvKgorCSAqIFhYWDogaXMgdGhpcyBsb2NrIHJlYWxseSBuZWVkZWQgLSBub25lIG9mIHRoZSBvdGhlcgorCSAqIGdldHMgbG9jayAodGhlIGNvbmNlcm4gaXMgdGhpbmdzIGdldHRpbmcgdXBkYXRlZAorCSAqIHdoaWxlIHdlIGFyZSBzdGlsbCByZWFkaW5nKSAtIGpocworCSovCisJc3Bpbl9sb2NrX2JoKCZ4LT5sb2NrKTsKKwljLmRhdGEuYWV2ZW50ID0gcC0+ZmxhZ3M7CisJYy5zZXEgPSBubGgtPm5sbXNnX3NlcTsKKwljLnBpZCA9IG5saC0+bmxtc2dfcGlkOworCisJaWYgKGJ1aWxkX2FldmVudChyX3NrYiwgeCwgJmMpIDwgMCkKKwkJQlVHKCk7CisJZXJyID0gbmV0bGlua191bmljYXN0KHhmcm1fbmwsIHJfc2tiLAorCQkJICAgICAgTkVUTElOS19DQihza2IpLnBpZCwgTVNHX0RPTlRXQUlUKTsKKwlzcGluX3VubG9ja19iaCgmeC0+bG9jayk7CisJeGZybV9zdGF0ZV9wdXQoeCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB4ZnJtX25ld19hZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQoreworCXN0cnVjdCB4ZnJtX3N0YXRlICp4OworCXN0cnVjdCBrbV9ldmVudCBjOworCWludCBlcnIgPSAtIEVJTlZBTDsKKwlzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgKnAgPSBOTE1TR19EQVRBKG5saCk7CisJc3RydWN0IHJ0YXR0ciAqcnAgPSB4ZnJtYVtYRlJNQV9SRVBMQVlfVkFMLTFdOworCXN0cnVjdCBydGF0dHIgKmx0ID0geGZybWFbWEZSTUFfTFRJTUVfVkFMLTFdOworCisJaWYgKCFsdCAmJiAhcnApCisJCXJldHVybiBlcnI7CisKKwkvKiBwZWRhbnRpYyBtb2RlIC0gdGhvdSBzaGFsdCBzYXlldGggcmVwbGFjZXRoICovCisJaWYgKCEobmxoLT5ubG1zZ19mbGFncyZOTE1fRl9SRVBMQUNFKSkKKwkJcmV0dXJuIGVycjsKKworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cCgmcC0+c2FfaWQuZGFkZHIsIHAtPnNhX2lkLnNwaSwgcC0+c2FfaWQucHJvdG8sIHAtPnNhX2lkLmZhbWlseSk7CisJaWYgKHggPT0gTlVMTCkKKwkJcmV0dXJuIC1FU1JDSDsKKworCWlmICh4LT5rbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19iaCgmeC0+bG9jayk7CisJZXJyID0geGZybV91cGRhdGVfYWVfcGFyYW1zKHgsKHN0cnVjdCBydGF0dHIgKiopeGZybWEpOworCXNwaW5fdW5sb2NrX2JoKCZ4LT5sb2NrKTsKKwlpZiAoZXJyCTwgMCkKKwkJZ290byBvdXQ7CisKKwljLmV2ZW50ID0gbmxoLT5ubG1zZ190eXBlOworCWMuc2VxID0gbmxoLT5ubG1zZ19zZXE7CisJYy5waWQgPSBubGgtPm5sbXNnX3BpZDsKKwljLmRhdGEuYWV2ZW50ID0gWEZSTV9BRV9DVTsKKwlrbV9zdGF0ZV9ub3RpZnkoeCwgJmMpOworCWVyciA9IDA7CitvdXQ6CisJeGZybV9zdGF0ZV9wdXQoeCk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCB4ZnJtX2ZsdXNoX3BvbGljeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQogewotCXN0cnVjdCBrbV9ldmVudCBjOworc3RydWN0IGttX2V2ZW50IGM7CiAKIAl4ZnJtX3BvbGljeV9mbHVzaCgpOwogCWMuZXZlbnQgPSBubGgtPm5sbXNnX3R5cGU7CkBAIC0xMDM3LDYgKzEyMjcsMTM5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgeGZybV9hZGRfcG9sX2V4cGlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqKnhmcm1hKQoreworCXN0cnVjdCB4ZnJtX3BvbGljeSAqeHA7CisJc3RydWN0IHhmcm1fdXNlcl9wb2xleHBpcmUgKnVwID0gTkxNU0dfREFUQShubGgpOworCXN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyAqcCA9ICZ1cC0+cG9sOworCWludCBlcnIgPSAtRU5PRU5UOworCisJaWYgKHAtPmluZGV4KQorCQl4cCA9IHhmcm1fcG9saWN5X2J5aWQocC0+ZGlyLCBwLT5pbmRleCwgMCk7CisJZWxzZSB7CisJCXN0cnVjdCBydGF0dHIgKipydGF0dHJzID0gKHN0cnVjdCBydGF0dHIgKiopeGZybWE7CisJCXN0cnVjdCBydGF0dHIgKnJ0ID0gcnRhdHRyc1tYRlJNQV9TRUNfQ1RYLTFdOworCQlzdHJ1Y3QgeGZybV9wb2xpY3kgdG1wOworCisJCWVyciA9IHZlcmlmeV9zZWNfY3R4X2xlbihydGF0dHJzKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZihzdHJ1Y3QgeGZybV9wb2xpY3kpKTsKKwkJaWYgKHJ0KSB7CisJCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHggPSBSVEFfREFUQShydCk7CisKKwkJCWlmICgoZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2MoJnRtcCwgdWN0eCkpKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwkJeHAgPSB4ZnJtX3BvbGljeV9ieXNlbF9jdHgocC0+ZGlyLCAmcC0+c2VsLCB0bXAuc2VjdXJpdHksIDApOworCQlzZWN1cml0eV94ZnJtX3BvbGljeV9mcmVlKCZ0bXApOworCX0KKworCWlmICh4cCA9PSBOVUxMKQorCQlyZXR1cm4gZXJyOworCQkJCQkJCQkJCQlyZWFkX2xvY2soJnhwLT5sb2NrKTsKKwlpZiAoeHAtPmRlYWQpIHsKKwkJcmVhZF91bmxvY2soJnhwLT5sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmVhZF91bmxvY2soJnhwLT5sb2NrKTsKKwllcnIgPSAwOworCWlmICh1cC0+aGFyZCkgeworCQl4ZnJtX3BvbGljeV9kZWxldGUoeHAsIHAtPmRpcik7CisJfSBlbHNlIHsKKwkJLy8gcmVzZXQgdGhlIHRpbWVycyBoZXJlPworCQlwcmludGsoIkRvbnQga25vdyB3aGF0IHRvIGRvIHdpdGggc29mdCBwb2xpY3kgZXhwaXJlXG4iKTsKKwl9CisJa21fcG9saWN5X2V4cGlyZWQoeHAsIHAtPmRpciwgdXAtPmhhcmQsIGN1cnJlbnQtPnBpZCk7CisKK291dDoKKwl4ZnJtX3BvbF9wdXQoeHApOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgeGZybV9hZGRfc2FfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICoqeGZybWEpCit7CisJc3RydWN0IHhmcm1fc3RhdGUgKng7CisJaW50IGVycjsKKwlzdHJ1Y3QgeGZybV91c2VyX2V4cGlyZSAqdWUgPSBOTE1TR19EQVRBKG5saCk7CisJc3RydWN0IHhmcm1fdXNlcnNhX2luZm8gKnAgPSAmdWUtPnN0YXRlOworCisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKCZwLT5pZC5kYWRkciwgcC0+aWQuc3BpLCBwLT5pZC5wcm90bywgcC0+ZmFtaWx5KTsKKwkJZXJyID0gLUVOT0VOVDsKKworCWlmICh4ID09IE5VTEwpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2JoKCZ4LT5sb2NrKTsKKwlpZiAoeC0+a20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkKKwkJZ290byBvdXQ7CisJa21fc3RhdGVfZXhwaXJlZCh4LCB1ZS0+aGFyZCwgY3VycmVudC0+cGlkKTsKKworCWlmICh1ZS0+aGFyZCkKKwkJX194ZnJtX3N0YXRlX2RlbGV0ZSh4KTsKK291dDoKKwlzcGluX3VubG9ja19iaCgmeC0+bG9jayk7CisJeGZybV9zdGF0ZV9wdXQoeCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB4ZnJtX2FkZF9hY3F1aXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICoqeGZybWEpCit7CisJc3RydWN0IHhmcm1fcG9saWN5ICp4cDsKKwlzdHJ1Y3QgeGZybV91c2VyX3RtcGwgKnV0OworCWludCBpOworCXN0cnVjdCBydGF0dHIgKnJ0ID0geGZybWFbWEZSTUFfVE1QTC0xXTsKKworCXN0cnVjdCB4ZnJtX3VzZXJfYWNxdWlyZSAqdWEgPSBOTE1TR19EQVRBKG5saCk7CisJc3RydWN0IHhmcm1fc3RhdGUgKnggPSB4ZnJtX3N0YXRlX2FsbG9jKCk7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpZiAoIXgpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSB2ZXJpZnlfbmV3cG9saWN5X2luZm8oJnVhLT5wb2xpY3kpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKCJCQUQgcG9saWN5IHBhc3NlZFxuIik7CisJCWtmcmVlKHgpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qICAgYnVpbGQgYW4gWFAgKi8KKwl4cCA9IHhmcm1fcG9saWN5X2NvbnN0cnVjdCgmdWEtPnBvbGljeSwgKHN0cnVjdCBydGF0dHIgKiopIHhmcm1hLCAmZXJyKTsgICAgICAgIGlmICgheHApIHsKKwkJa2ZyZWUoeCk7CisJCXJldHVybiBlcnI7CisJfQorCisJbWVtY3B5KCZ4LT5pZCwgJnVhLT5pZCwgc2l6ZW9mKHVhLT5pZCkpOworCW1lbWNweSgmeC0+cHJvcHMuc2FkZHIsICZ1YS0+c2FkZHIsIHNpemVvZih1YS0+c2FkZHIpKTsKKwltZW1jcHkoJngtPnNlbCwgJnVhLT5zZWwsIHNpemVvZih1YS0+c2VsKSk7CisKKwl1dCA9IFJUQV9EQVRBKHJ0KTsKKwkvKiBleHRyYWN0IHRoZSB0ZW1wbGF0ZXMgYW5kIGZvciBlYWNoIGNhbGwga21fa2V5ICovCisJZm9yIChpID0gMDsgaSA8IHhwLT54ZnJtX25yOyBpKyssIHV0KyspIHsKKwkJc3RydWN0IHhmcm1fdG1wbCAqdCA9ICZ4cC0+eGZybV92ZWNbaV07CisJCW1lbWNweSgmeC0+aWQsICZ0LT5pZCwgc2l6ZW9mKHgtPmlkKSk7CisJCXgtPnByb3BzLm1vZGUgPSB0LT5tb2RlOworCQl4LT5wcm9wcy5yZXFpZCA9IHQtPnJlcWlkOworCQl4LT5wcm9wcy5mYW1pbHkgPSB1dC0+ZmFtaWx5OworCQl0LT5hYWxnb3MgPSB1YS0+YWFsZ29zOworCQl0LT5lYWxnb3MgPSB1YS0+ZWFsZ29zOworCQl0LT5jYWxnb3MgPSB1YS0+Y2FsZ29zOworCQllcnIgPSBrbV9xdWVyeSh4LCB0LCB4cCk7CisKKwl9CisKKwlrZnJlZSh4KTsKKwlrZnJlZSh4cCk7CisKKwlyZXR1cm4gMDsKK30KKworCiAjZGVmaW5lIFhNU0dTSVpFKHR5cGUpIE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHR5cGUpKQogCiBzdGF0aWMgY29uc3QgaW50IHhmcm1fbXNnX21pbltYRlJNX05SX01TR1RZUEVTXSA9IHsKQEAgLTEwNTQsNiArMTM3Nyw4IEBACiAJW1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSBYTVNHU0laRSh4ZnJtX3VzZXJfcG9sZXhwaXJlKSwKIAlbWEZSTV9NU0dfRkxVU0hTQSAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fdXNlcnNhX2ZsdXNoKSwKIAlbWEZSTV9NU0dfRkxVU0hQT0xJQ1kgLSBYRlJNX01TR19CQVNFXSA9IE5MTVNHX0xFTkdUSCgwKSwKKwlbWEZSTV9NU0dfTkVXQUUgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fYWV2ZW50X2lkKSwKKwlbWEZSTV9NU0dfR0VUQUUgICAgICAgLSBYRlJNX01TR19CQVNFXSA9IFhNU0dTSVpFKHhmcm1fYWV2ZW50X2lkKSwKIH07CiAKICN1bmRlZiBYTVNHU0laRQpAQCAtMTA3MSwxMCArMTM5NiwxNSBAQAogCVtYRlJNX01TR19HRVRQT0xJQ1kgICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X3BvbGljeSwKIAkJCQkJCSAgIC5kdW1wID0geGZybV9kdW1wX3BvbGljeSAgIH0sCiAJW1hGUk1fTVNHX0FMTE9DU1BJICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hbGxvY191c2Vyc3BpIH0sCisJW1hGUk1fTVNHX0FDUVVJUkUgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfYWNxdWlyZSAgIH0sCisJW1hGUk1fTVNHX0VYUElSRSAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2FfZXhwaXJlIH0sCiAJW1hGUk1fTVNHX1VQRFBPTElDWSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9saWN5ICAgIH0sCiAJW1hGUk1fTVNHX1VQRFNBICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfc2EgICAgICAgIH0sCisJW1hGUk1fTVNHX1BPTEVYUElSRSAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9hZGRfcG9sX2V4cGlyZX0sCiAJW1hGUk1fTVNHX0ZMVVNIU0EgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9mbHVzaF9zYSAgICAgIH0sCiAJW1hGUk1fTVNHX0ZMVVNIUE9MSUNZIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9mbHVzaF9wb2xpY3kgIH0sCisJW1hGUk1fTVNHX05FV0FFICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9uZXdfYWUgIH0sCisJW1hGUk1fTVNHX0dFVEFFICAgICAgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9nZXRfYWUgIH0sCiB9OwogCiBzdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgKmVycnApCkBAIC0xMTU2LDI2ICsxNDg2LDI2IEBACiAJdW5zaWduZWQgaW50IHFsZW4gPSAwOwogCiAJZG8gewotCQlkb3duKCZ4ZnJtX2NmZ19zZW0pOworCQltdXRleF9sb2NrKCZ4ZnJtX2NmZ19tdXRleCk7CiAJCW5ldGxpbmtfcnVuX3F1ZXVlKHNrLCAmcWxlbiwgJnhmcm1fdXNlcl9yY3ZfbXNnKTsKLQkJdXAoJnhmcm1fY2ZnX3NlbSk7CisJCW11dGV4X3VubG9jaygmeGZybV9jZmdfbXV0ZXgpOwogCiAJfSB3aGlsZSAocWxlbik7CiB9CiAKLXN0YXRpYyBpbnQgYnVpbGRfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgaGFyZCkKK3N0YXRpYyBpbnQgYnVpbGRfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qga21fZXZlbnQgKmMpCiB7CiAJc3RydWN0IHhmcm1fdXNlcl9leHBpcmUgKnVlOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCXVuc2lnbmVkIGNoYXIgKmIgPSBza2ItPnRhaWw7CiAKLQlubGggPSBOTE1TR19QVVQoc2tiLCAwLCAwLCBYRlJNX01TR19FWFBJUkUsCisJbmxoID0gTkxNU0dfUFVUKHNrYiwgYy0+cGlkLCAwLCBYRlJNX01TR19FWFBJUkUsCiAJCQlzaXplb2YoKnVlKSk7CiAJdWUgPSBOTE1TR19EQVRBKG5saCk7CiAJbmxoLT5ubG1zZ19mbGFncyA9IDA7CiAKIAljb3B5X3RvX3VzZXJfc3RhdGUoeCwgJnVlLT5zdGF0ZSk7Ci0JdWUtPmhhcmQgPSAoaGFyZCAhPSAwKSA/IDEgOiAwOworCXVlLT5oYXJkID0gKGMtPmRhdGEuaGFyZCAhPSAwKSA/IDEgOiAwOwogCiAJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwogCXJldHVybiBza2ItPmxlbjsKQEAgLTExOTQsMTMgKzE1MjQsMzEgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGJ1aWxkX2V4cGlyZShza2IsIHgsIGMtPmRhdGEuaGFyZCkgPCAwKQorCWlmIChidWlsZF9leHBpcmUoc2tiLCB4LCBjKSA8IDApCiAJCUJVRygpOwogCiAJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IFhGUk1OTEdSUF9FWFBJUkU7CiAJcmV0dXJuIG5ldGxpbmtfYnJvYWRjYXN0KHhmcm1fbmwsIHNrYiwgMCwgWEZSTU5MR1JQX0VYUElSRSwgR0ZQX0FUT01JQyk7CiB9CiAKK3N0YXRpYyBpbnQgeGZybV9hZXZlbnRfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qga21fZXZlbnQgKmMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgbGVuID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgeGZybV9hZXZlbnRfaWQpKTsKKworCWxlbiArPSBSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB4ZnJtX3JlcGxheV9zdGF0ZSkpOworCWxlbiArPSBSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB4ZnJtX2xpZmV0aW1lX2N1cikpOworCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMpOworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYnVpbGRfYWV2ZW50KHNrYiwgeCwgYykgPCAwKQorCQlCVUcoKTsKKworCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXAgPSBYRlJNTkxHUlBfQUVWRU5UUzsKKwlyZXR1cm4gbmV0bGlua19icm9hZGNhc3QoeGZybV9ubCwgc2tiLCAwLCBYRlJNTkxHUlBfQUVWRU5UUywgR0ZQX0FUT01JQyk7Cit9CisKIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfc2FfZmx1c2goc3RydWN0IGttX2V2ZW50ICpjKQogewogCXN0cnVjdCB4ZnJtX3VzZXJzYV9mbHVzaCAqcDsKQEAgLTEzMTMsNiArMTY2MSw4IEBACiAJc3dpdGNoIChjLT5ldmVudCkgewogCWNhc2UgWEZSTV9NU0dfRVhQSVJFOgogCQlyZXR1cm4geGZybV9leHBfc3RhdGVfbm90aWZ5KHgsIGMpOworCWNhc2UgWEZSTV9NU0dfTkVXQUU6CisJCXJldHVybiB4ZnJtX2FldmVudF9zdGF0ZV9ub3RpZnkoeCwgYyk7CiAJY2FzZSBYRlJNX01TR19ERUxTQToKIAljYXNlIFhGUk1fTVNHX1VQRFNBOgogCWNhc2UgWEZSTV9NU0dfTkVXU0E6CkBAIC0xNDQzLDEzICsxNzkzLDE0IEBACiB9CiAKIHN0YXRpYyBpbnQgYnVpbGRfcG9sZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsCi0JCQkgICBpbnQgZGlyLCBpbnQgaGFyZCkKKwkJCSAgIGludCBkaXIsIHN0cnVjdCBrbV9ldmVudCAqYykKIHsKIAlzdHJ1Y3QgeGZybV91c2VyX3BvbGV4cGlyZSAqdXBlOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCWludCBoYXJkID0gYy0+ZGF0YS5oYXJkOwogCXVuc2lnbmVkIGNoYXIgKmIgPSBza2ItPnRhaWw7CiAKLQlubGggPSBOTE1TR19QVVQoc2tiLCAwLCAwLCBYRlJNX01TR19QT0xFWFBJUkUsIHNpemVvZigqdXBlKSk7CisJbmxoID0gTkxNU0dfUFVUKHNrYiwgYy0+cGlkLCAwLCBYRlJNX01TR19QT0xFWFBJUkUsIHNpemVvZigqdXBlKSk7CiAJdXBlID0gTkxNU0dfREFUQShubGgpOwogCW5saC0+bmxtc2dfZmxhZ3MgPSAwOwogCkBAIC0xNDgwLDcgKzE4MzEsNyBAQAogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoYnVpbGRfcG9sZXhwaXJlKHNrYiwgeHAsIGRpciwgYy0+ZGF0YS5oYXJkKSA8IDApCisJaWYgKGJ1aWxkX3BvbGV4cGlyZShza2IsIHhwLCBkaXIsIGMpIDwgMCkKIAkJQlVHKCk7CiAKIAlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gWEZSTU5MR1JQX0VYUElSRTsKQEAgLTE1OTYsMTIgKzE5NDcsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgeGZybV91c2VyX2luaXQodm9pZCkKIHsKKwlzdHJ1Y3Qgc29jayAqbmxzazsKKwogCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyBJUHNlYyBuZXRsaW5rIHNvY2tldFxuIik7CiAKLQl4ZnJtX25sID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfWEZSTSwgWEZSTU5MR1JQX01BWCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhmcm1fbmV0bGlua19yY3YsIFRISVNfTU9EVUxFKTsKLQlpZiAoeGZybV9ubCA9PSBOVUxMKQorCW5sc2sgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoTkVUTElOS19YRlJNLCBYRlJNTkxHUlBfTUFYLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGZybV9uZXRsaW5rX3JjdiwgVEhJU19NT0RVTEUpOworCWlmIChubHNrID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCXJjdV9hc3NpZ25fcG9pbnRlcih4ZnJtX25sLCBubHNrKTsKIAogCXhmcm1fcmVnaXN0ZXJfa20oJm5ldGxpbmtfbWdyKTsKIApAQCAtMTYxMCwxMSArMTk2NCwxNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV91c2VyX2V4aXQodm9pZCkKIHsKKwlzdHJ1Y3Qgc29jayAqbmxzayA9IHhmcm1fbmw7CisKIAl4ZnJtX3VucmVnaXN0ZXJfa20oJm5ldGxpbmtfbWdyKTsKLQlzb2NrX3JlbGVhc2UoeGZybV9ubC0+c2tfc29ja2V0KTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoeGZybV9ubCwgTlVMTCk7CisJc3luY2hyb25pemVfcmN1KCk7CisJc29ja19yZWxlYXNlKG5sc2stPnNrX3NvY2tldCk7CiB9CiAKIG1vZHVsZV9pbml0KHhmcm1fdXNlcl9pbml0KTsKIG1vZHVsZV9leGl0KHhmcm1fdXNlcl9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19ORVRfUEZfUFJPVE8oUEZfTkVUTElOSywgTkVUTElOS19YRlJNKTsKKwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0IGIvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CmluZGV4IDBjZmJlMWMuLjBlMDU2Y2YgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAorKysgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKQEAgLTQsNyArNCw3IEBACiAjCiAjIFN0YWdlIG9uZSBvZiBtb2R1bGUgYnVpbGRpbmcgY3JlYXRlZCB0aGUgZm9sbG93aW5nOgogIyBhKSBUaGUgaW5kaXZpZHVhbCAubyBmaWxlcyB1c2VkIGZvciB0aGUgbW9kdWxlCi0jIGIpIEEgPG1vZHVsZT4ubyBmaWxlIHdpY2ggaXMgdGhlIC5vIGZpbGVzIGFib3ZlIGxpbmtlZCB0b2dldGhlcgorIyBiKSBBIDxtb2R1bGU+Lm8gZmlsZSB3aGljaCBpcyB0aGUgLm8gZmlsZXMgYWJvdmUgbGlua2VkIHRvZ2V0aGVyCiAjIGMpIEEgPG1vZHVsZT4ubW9kIGZpbGUgaW4gJChNT0RWRVJESVIpLywgbGlzdGluZyB0aGUgbmFtZSBvZiB0aGUKICMgICAgdGhlIHByZWxpbWluYXJ5IDxtb2R1bGU+Lm8gZmlsZSwgcGx1cyBhbGwgLm8gZmlsZXMKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIGIvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCmluZGV4IGQ5ZjlmMzQuLjgxODdlNmYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZworKysgYi9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKQEAgLTQsNiArNCw3IEBACiAjICRhcmcxIGlzIFtiXXpJbWFnZSBmaWxlbmFtZQogCiBiaW5vZmZzZXQ9Ii4vc2NyaXB0cy9iaW5vZmZzZXQiCit0ZXN0IC1lICRiaW5vZmZzZXQgfHwgY2MgLW8gJGJpbm9mZnNldCAuL3NjcmlwdHMvYmlub2Zmc2V0LmMgfHwgZXhpdCAxCiAKIElLQ0ZHX1NUPSIweDQ5IDB4NGIgMHg0MyAweDQ2IDB4NDcgMHg1ZiAweDUzIDB4NTQiCiBJS0NGR19FRD0iMHg0OSAweDRiIDB4NDMgMHg0NiAweDQ3IDB4NWYgMHg0NSAweDQ0IgpAQCAtMjAsNyArMjEsNyBAQAogICAgIGxldCBzdGFydD0iJHN0YXJ0ICsgOCIKICAgICBsZXQgc2l6ZT0iJGVuZCAtICRzdGFydCIKIAotICAgIGhlYWQgLS1ieXRlcz0iJGVuZCIgIiRmaWxlIiB8IHRhaWwgLS1ieXRlcz0iJHNpemUiIHwgemNhdAorICAgIGRkIGlmPSIkZmlsZSIgaWJzPTEgc2tpcD0iJHN0YXJ0IiBjb3VudD0iJHNpemUiIDI+L2Rldi9udWxsIHwgemNhdAogCiAgICAgY2xlYW5fdXAKICAgICBleGl0IDAKQEAgLTQ1LDcgKzQ2LDcgQEAKIAlleGl0IDEKIGZpCiAKLVRNUEZJTEU9Ii90bXAvaWtjb25maWctJCQiCitUTVBGSUxFPWBta3RlbXAgLXQgaWtjb25maWctWFhYWFhYYCB8fCBleGl0IDEKIGltYWdlPSIkMSIKIAogIyB2bWxpbnV4OiBBdHRlbXB0IHRvIGR1bXAgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZmlsZSBkaXJlY3RseQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmNfc2hpcHBlZAppbmRleCBlZTQ2NDc4Li5kODE1M2Y1IDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmNfc2hpcHBlZApAQCAtNTIsOSArNTIsOSBAQAogICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsCiAgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwKICAgICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAotICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMTUsCi0gICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAxNSwgNzEsIDcxLCA3MSwKLSAgICAgIDEwLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAorICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgIDAsCisgICAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAzNSwgNzEsIDcxLCA3MSwKKyAgICAgICA1LCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLAogICAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCAgMCwgNzEsICAwLCA3MSwgIDUsCiAgICAgICAgNSwgIDAsIDEwLCAyMCwgNzEsIDI1LCA3MSwgNzEsIDIwLCAgMCwKICAgICAgIDIwLCAzMCwgMjUsIDcxLCAxMCwgIDUsICAwLCAyMCwgMTUsIDcxLApAQCAtODQsOSArODQsOSBAQAogewogICBlbnVtCiAgICAgewotICAgICAgVE9UQUxfS0VZV09SRFMgPSA0MSwKKyAgICAgIFRPVEFMX0tFWVdPUkRTID0gNDIsCiAgICAgICBNSU5fV09SRF9MRU5HVEggPSAzLAotICAgICAgTUFYX1dPUkRfTEVOR1RIID0gMTcsCisgICAgICBNQVhfV09SRF9MRU5HVEggPSAyNCwKICAgICAgIE1JTl9IQVNIX1ZBTFVFID0gMywKICAgICAgIE1BWF9IQVNIX1ZBTFVFID0gNzAKICAgICB9OwpAQCAtOTQsMTA0ICs5NCwxMDUgQEAKICAgc3RhdGljIGNvbnN0IHN0cnVjdCByZXN3b3JkIHdvcmRsaXN0W10gPQogICAgIHsKICAgICAgIHsiIn0sIHsiIn0sIHsiIn0sCi0jbGluZSAyNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDI1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJhc20iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fYXNtIiwgQVNNX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2FzbV9fIiwgQVNNX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDIxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9yZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgNTAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX190eXBlb2ZfXyIsIFRZUEVPRl9LRVlXfSwKLSNsaW5lIDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fYXR0cmlidXRlIiwgQVRUUklCVVRFX0tFWVd9LAotI2xpbmUgMTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fY29uc3QiLCBDT05TVF9LRVlXfSwKICNsaW5lIDEwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX2F0dHJpYnV0ZV9fIiwgQVRUUklCVVRFX0tFWVd9LAorICAgICAgeyJfX2F0dHJpYnV0ZSIsIEFUVFJJQlVURV9LRVlXfSwKICNsaW5lIDEyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX2NvbnN0IiwgQ09OU1RfS0VZV30sCisjbGluZSAxMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19hdHRyaWJ1dGVfXyIsIEFUVFJJQlVURV9LRVlXfSwKKyNsaW5lIDEzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2NvbnN0X18iLCBDT05TVF9LRVlXfSwKLSNsaW5lIDE2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fc2lnbmVkX18iLCBTSUdORURfS0VZV30sCi0jbGluZSA0MiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJzdGF0aWMiLCBTVEFUSUNfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19zaWduZWQiLCBTSUdORURfS0VZV30sCi0jbGluZSAzMCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDMxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJjaGFyIiwgQ0hBUl9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSA0MyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQ0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJzdHJ1Y3QiLCBTVFJVQ1RfS0VZV30sCi0jbGluZSAyMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX19yZXN0cmljdF9fIiwgUkVTVFJJQ1RfS0VZV30sCiAjbGluZSAyMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19yZXN0cmljdF9fIiwgUkVTVFJJQ1RfS0VZV30sCisjbGluZSAyNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsicmVzdHJpY3QiLCBSRVNUUklDVF9LRVlXfSwKLSNsaW5lIDMzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJlbnVtIiwgRU5VTV9LRVlXfSwKLSNsaW5lIDE3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX3ZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCiAjbGluZSAzNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiZXh0ZXJuIiwgRVhURVJOX0tFWVd9LAorICAgICAgeyJlbnVtIiwgRU5VTV9LRVlXfSwKICNsaW5lIDE4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX3ZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCisjbGluZSAzNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiZXh0ZXJuIiwgRVhURVJOX0tFWVd9LAorI2xpbmUgMTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdm9sYXRpbGVfXyIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgMzcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiaW50IiwgSU5UX0tFWVd9LAotICAgICAgeyIifSwKLSNsaW5lIDMxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJjb25zdCIsIENPTlNUX0tFWVd9LAorI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKICNsaW5lIDMyICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJjb25zdCIsIENPTlNUX0tFWVd9LAorI2xpbmUgMzMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImRvdWJsZSIsIERPVUJMRV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSAxMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX19pbmxpbmUiLCBJTkxJTkVfS0VZV30sCi0jbGluZSAyOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiYXV0byIsIEFVVE9fS0VZV30sCiAjbGluZSAxNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiX19pbmxpbmUiLCBJTkxJTkVfS0VZV30sCisjbGluZSAzMCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsiYXV0byIsIEFVVE9fS0VZV30sCisjbGluZSAxNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19pbmxpbmVfXyIsIElOTElORV9LRVlXfSwKLSNsaW5lIDQxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InNpZ25lZCIsIFNJR05FRF9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSA0NiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQ3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJ1bnNpZ25lZCIsIFVOU0lHTkVEX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDQwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InNob3J0IiwgU0hPUlRfS0VZV30sCi0jbGluZSA0OSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDUwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJ0eXBlb2YiLCBUWVBFT0ZfS0VZV30sCi0jbGluZSA0NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQ1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJ0eXBlZGVmIiwgVFlQRURFRl9LRVlXfSwKLSNsaW5lIDQ4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMzUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiZmxvYXQiLCBGTE9BVF9LRVlXfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSAzOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJyZWdpc3RlciIsIFJFR0lTVEVSX0tFWVd9LAotI2xpbmUgNDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0OCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidm9pZCIsIFZPSURfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMzYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiaW5saW5lIiwgSU5MSU5FX0tFWVd9LAogICAgICAgeyIifSwKICNsaW5lIDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0wiLCBFWFBPUlRfU1lNQk9MX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDIwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMjEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9Cb29sIiwgQk9PTF9LRVlXfSwKICAgICAgIHsiIn0sCiAjbGluZSA2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJFWFBPUlRfU1lNQk9MX0dQTCIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LAotI2xpbmUgMzggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsibG9uZyIsIExPTkdfS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LAotI2xpbmUgNDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidW5pb24iLCBVTklPTl9LRVlXfQogICAgIH07CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmCmluZGV4IGI2YmVjNzYuLmM3NWUwYzggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZgpAQCAtNCw2ICs0LDcgQEAKICUlCiBFWFBPUlRfU1lNQk9MLCBFWFBPUlRfU1lNQk9MX0tFWVcKIEVYUE9SVF9TWU1CT0xfR1BMLCBFWFBPUlRfU1lNQk9MX0tFWVcKK0VYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRSwgRVhQT1JUX1NZTUJPTF9LRVlXCiBfX2FzbSwgQVNNX0tFWVcKIF9fYXNtX18sIEFTTV9LRVlXCiBfX2F0dHJpYnV0ZSwgQVRUUklCVVRFX0tFWVcKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2FsbHN5bXMuYyBiL3NjcmlwdHMva2FsbHN5bXMuYwppbmRleCBkNTkxNTc4Li4yMmQyODFjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2thbGxzeW1zLmMKKysrIGIvc2NyaXB0cy9rYWxsc3ltcy5jCkBAIC0xMjQsNiArMTI0LDExIEBACiAJICogY29tcHJlc3NlZCB0b2dldGhlciAqLwogCXMtPmxlbiA9IHN0cmxlbihzdHIpICsgMTsKIAlzLT5zeW0gPSBtYWxsb2Mocy0+bGVuICsgMSk7CisJaWYgKCFzLT5zeW0pIHsKKwkJZnByaW50ZihzdGRlcnIsICJrYWxsc3ltcyBmYWlsdXJlOiAiCisJCQkidW5hYmxlIHRvIGFsbG9jYXRlIHJlcXVpcmVkIGFtb3VudCBvZiBtZW1vcnlcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQogCXN0cmNweSgoY2hhciAqKXMtPnN5bSArIDEsIHN0cik7CiAJcy0+c3ltWzBdID0gc3R5cGU7CiAKQEAgLTI3Miw3ICsyNzcsMTIgQEAKIAogCS8qIHRhYmxlIG9mIG9mZnNldCBtYXJrZXJzLCB0aGF0IGdpdmUgdGhlIG9mZnNldCBpbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0KIAkgKiBldmVyeSAyNTYgc3ltYm9scyAqLwotCW1hcmtlcnMgPSAodW5zaWduZWQgaW50ICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqICgodGFibGVfY250ICsgMjU1KSAvIDI1NikpOworCW1hcmtlcnMgPSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKiAoKHRhYmxlX2NudCArIDI1NSkgLyAyNTYpKTsKKwlpZiAoIW1hcmtlcnMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJrYWxsc3ltcyBmYWlsdXJlOiAiCisJCQkidW5hYmxlIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeVxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CiAKIAlvdXRwdXRfbGFiZWwoImthbGxzeW1zX25hbWVzIik7CiAJb2ZmID0gMDsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCBlN2I1MzUwLi44NGUyMTIwIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkgICAgaWQtPmN1X21vZGVsKTsKIAlBREQoYWxpYXMsICJkdCIsIGlkLT5tYXRjaF9mbGFncyZDQ1dfREVWSUNFX0lEX01BVENIX0RFVklDRV9UWVBFLAogCSAgICBpZC0+ZGV2X3R5cGUpOwotCUFERChhbGlhcywgImRtIiwgaWQtPm1hdGNoX2ZsYWdzJkNDV19ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX1RZUEUsCisJQUREKGFsaWFzLCAiZG0iLCBpZC0+bWF0Y2hfZmxhZ3MmQ0NXX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfTU9ERUwsCiAJICAgIGlkLT5kZXZfbW9kZWwpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IDMwZjNhYzguLjBiOTJkZGYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTkyMywxOSArOTIzLDE0IEBACiAKIAl2YV9zdGFydChhcCwgZm10KTsKIAlsZW4gPSB2c25wcmludGYodG1wLCBTWiwgZm10LCBhcCk7Ci0JaWYgKGJ1Zi0+c2l6ZSAtIGJ1Zi0+cG9zIDwgbGVuICsgMSkgewotCQlidWYtPnNpemUgKz0gMTI4OwotCQlidWYtPnAgPSByZWFsbG9jKGJ1Zi0+cCwgYnVmLT5zaXplKTsKLQl9Ci0Jc3RybmNweShidWYtPnAgKyBidWYtPnBvcywgdG1wLCBsZW4gKyAxKTsKLQlidWYtPnBvcyArPSBsZW47CisJYnVmX3dyaXRlKGJ1ZiwgdG1wLCBsZW4pOwogCXZhX2VuZChhcCk7CiB9CiAKIHZvaWQgYnVmX3dyaXRlKHN0cnVjdCBidWZmZXIgKmJ1ZiwgY29uc3QgY2hhciAqcywgaW50IGxlbikKIHsKIAlpZiAoYnVmLT5zaXplIC0gYnVmLT5wb3MgPCBsZW4pIHsKLQkJYnVmLT5zaXplICs9IGxlbjsKKwkJYnVmLT5zaXplICs9IGxlbiArIFNaOwogCQlidWYtPnAgPSByZWFsbG9jKGJ1Zi0+cCwgYnVmLT5zaXplKTsKIAl9CiAJc3RybmNweShidWYtPnAgKyBidWYtPnBvcywgcywgbGVuKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXggOGE2ZTA5Ny4uODQxZWI0ZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY29tbW9uY2FwLmMKKysrIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKQEAgLTYwLDggKzYwLDggQEAKIGludCBjYXBfcHRyYWNlIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKIAkvKiBEZXJpdmVkIGZyb20gYXJjaC9pMzg2L2tlcm5lbC9wdHJhY2UuYzpzeXNfcHRyYWNlLiAqLwotCWlmICghY2FwX2lzc3Vic2V0IChjaGlsZC0+Y2FwX3Blcm1pdHRlZCwgY3VycmVudC0+Y2FwX3Blcm1pdHRlZCkgJiYKLQkgICAgIWNhcGFibGUoQ0FQX1NZU19QVFJBQ0UpKQorCWlmICghY2FwX2lzc3Vic2V0KGNoaWxkLT5jYXBfcGVybWl0dGVkLCBwYXJlbnQtPmNhcF9wZXJtaXR0ZWQpICYmCisJICAgICFfX2NhcGFibGUocGFyZW50LCBDQVBfU1lTX1BUUkFDRSkpCiAJCXJldHVybiAtRVBFUk07CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9kdW1teS5jIGIvc2VjdXJpdHkvZHVtbXkuYwppbmRleCBmMWE1YmQ5Li5hNjc4ZjA5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9kdW1teS5jCisrKyBiL3NlY3VyaXR5L2R1bW15LmMKQEAgLTc2Myw4ICs3NjMsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV9zb2NrZXRfZ2V0cGVlcnNlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCSAgIGludCBfX3VzZXIgKm9wdGxlbiwgdW5zaWduZWQgbGVuKQorc3RhdGljIGludCBkdW1teV9zb2NrZXRfZ2V0cGVlcnNlY19zdHJlYW0oc3RydWN0IHNvY2tldCAqc29jaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCQkJICBpbnQgX191c2VyICpvcHRsZW4sIHVuc2lnbmVkIGxlbikKK3sKKwlyZXR1cm4gLUVOT1BST1RPT1BUOworfQorCitzdGF0aWMgaW50IGR1bW15X3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKipzZWNkYXRhLAorCQkJCQkgdTMyICpzZWNsZW4pCiB7CiAJcmV0dXJuIC1FTk9QUk9UT09QVDsKIH0KQEAgLTEwMDIsNyArMTAwOCw4IEBACiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBzb2NrZXRfZ2V0c29ja29wdCk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBzb2NrZXRfc2h1dGRvd24pOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgc29ja2V0X3NvY2tfcmN2X3NrYik7Ci0Jc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBzb2NrZXRfZ2V0cGVlcnNlYyk7CisJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBzb2NrZXRfZ2V0cGVlcnNlY19zdHJlYW0pOworCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgc29ja2V0X2dldHBlZXJzZWNfZGdyYW0pOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgc2tfYWxsb2Nfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgc2tfZnJlZV9zZWN1cml0eSk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBza19nZXRzaWQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXkuYyBiL3NlY3VyaXR5L2tleXMva2V5LmMKaW5kZXggOTk3ODFiNy4uYTA1N2UzMyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL2tleS5jCkBAIC0xLDYgKzEsNiBAQAogLyoga2V5LmM6IGJhc2ljIGF1dGhlbnRpY2F0aW9uIHRva2VuIGFuZCBhY2Nlc3Mga2V5IG1hbmFnZW1lbnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTYgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI3MSw3ICsyNzEsNyBAQAogCSAqIGl0cyBkZXNjcmlwdGlvbiAqLwogCWlmICghbm90X2luX3F1b3RhKSB7CiAJCXNwaW5fbG9jaygmdXNlci0+bG9jayk7Ci0JCWlmICh1c2VyLT5xbmtleXMgKyAxID49IEtFWVFVT1RBX01BWF9LRVlTICYmCisJCWlmICh1c2VyLT5xbmtleXMgKyAxID49IEtFWVFVT1RBX01BWF9LRVlTIHx8CiAJCSAgICB1c2VyLT5xbmJ5dGVzICsgcXVvdGFsZW4gPj0gS0VZUVVPVEFfTUFYX0JZVEVTCiAJCSAgICApCiAJCQlnb3RvIG5vX3F1b3RhOwpAQCAtNzk1LDEyICs3OTUsMTYgQEAKIAkJZ290byBlcnJvcl8zOwogCX0KIAotCS8qIHNlYXJjaCBmb3IgYW4gZXhpc3Rpbmcga2V5IG9mIHRoZSBzYW1lIHR5cGUgYW5kIGRlc2NyaXB0aW9uIGluIHRoZQotCSAqIGRlc3RpbmF0aW9uIGtleXJpbmcKKwkvKiBpZiBpdCdzIHBvc3NpYmxlIHRvIHVwZGF0ZSB0aGlzIHR5cGUgb2Yga2V5LCBzZWFyY2ggZm9yIGFuIGV4aXN0aW5nCisJICoga2V5IG9mIHRoZSBzYW1lIHR5cGUgYW5kIGRlc2NyaXB0aW9uIGluIHRoZSBkZXN0aW5hdGlvbiBrZXlyaW5nIGFuZAorCSAqIHVwZGF0ZSB0aGF0IGluc3RlYWQgaWYgcG9zc2libGUKIAkgKi8KLQlrZXlfcmVmID0gX19rZXlyaW5nX3NlYXJjaF9vbmUoa2V5cmluZ19yZWYsIGt0eXBlLCBkZXNjcmlwdGlvbiwgMCk7Ci0JaWYgKCFJU19FUlIoa2V5X3JlZikpCi0JCWdvdG8gZm91bmRfbWF0Y2hpbmdfa2V5OworCWlmIChrdHlwZS0+dXBkYXRlKSB7CisJCWtleV9yZWYgPSBfX2tleXJpbmdfc2VhcmNoX29uZShrZXlyaW5nX3JlZiwga3R5cGUsIGRlc2NyaXB0aW9uLAorCQkJCQkgICAgICAgMCk7CisJCWlmICghSVNfRVJSKGtleV9yZWYpKQorCQkJZ290byBmb3VuZF9tYXRjaGluZ19rZXk7CisJfQogCiAJLyogZGVjaWRlIG9uIHRoZSBwZXJtaXNzaW9ucyB3ZSB3YW50ICovCiAJcGVybSA9IEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1BPU19MSU5LIHwgS0VZX1BPU19TRVRBVFRSOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKaW5kZXggMGM2Mjc5OC4uZWQ3MWQ4NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYworKysgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCkBAIC0xNywxMCArMTcsMzMgQEAKICNpbmNsdWRlIDxsaW51eC9rZXljdGwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKK3N0YXRpYyBpbnQga2V5X2dldF90eXBlX2Zyb21fdXNlcihjaGFyICp0eXBlLAorCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKl90eXBlLAorCQkJCSAgdW5zaWduZWQgbGVuKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzdHJuY3B5X2Zyb21fdXNlcih0eXBlLCBfdHlwZSwgbGVuKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChyZXQgPT0gMCB8fCByZXQgPj0gbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0eXBlWzBdID09ICcuJykKKwkJcmV0dXJuIC1FUEVSTTsKKworCXR5cGVbbGVuIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIDA7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBleHRyYWN0IHRoZSBkZXNjcmlwdGlvbiBvZiBhIG5ldyBrZXkgZnJvbSB1c2Vyc3BhY2UgYW5kIGVpdGhlciBhZGQgaXQgYXMgYQpAQCAtMzgsNDAgKzYxLDIyIEBACiAJa2V5X3JlZl90IGtleXJpbmdfcmVmLCBrZXlfcmVmOwogCWNoYXIgdHlwZVszMl0sICpkZXNjcmlwdGlvbjsKIAl2b2lkICpwYXlsb2FkOwotCWxvbmcgZGxlbiwgcmV0OworCWxvbmcgcmV0OwogCiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAocGxlbiA+IDMyNzY3KQogCQlnb3RvIGVycm9yOwogCiAJLyogZHJhdyBhbGwgdGhlIGRhdGEgaW50byBrZXJuZWwgc3BhY2UgKi8KLQlyZXQgPSBzdHJuY3B5X2Zyb21fdXNlcih0eXBlLCBfdHlwZSwgc2l6ZW9mKHR5cGUpIC0gMSk7CisJcmV0ID0ga2V5X2dldF90eXBlX2Zyb21fdXNlcih0eXBlLCBfdHlwZSwgc2l6ZW9mKHR5cGUpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcjsKLQl0eXBlWzMxXSA9ICdcMCc7CiAKLQlyZXQgPSAtRVBFUk07Ci0JaWYgKHR5cGVbMF0gPT0gJy4nKQorCWRlc2NyaXB0aW9uID0gc3RybmR1cF91c2VyKF9kZXNjcmlwdGlvbiwgUEFHRV9TSVpFKTsKKwlpZiAoSVNfRVJSKGRlc2NyaXB0aW9uKSkgeworCQlyZXQgPSBQVFJfRVJSKGRlc2NyaXB0aW9uKTsKIAkJZ290byBlcnJvcjsKLQotCXJldCA9IC1FRkFVTFQ7Ci0JZGxlbiA9IHN0cm5sZW5fdXNlcihfZGVzY3JpcHRpb24sIFBBR0VfU0laRSAtIDEpOwotCWlmIChkbGVuIDw9IDApCi0JCWdvdG8gZXJyb3I7Ci0KLQlyZXQgPSAtRUlOVkFMOwotCWlmIChkbGVuID4gUEFHRV9TSVpFIC0gMSkKLQkJZ290byBlcnJvcjsKLQotCXJldCA9IC1FTk9NRU07Ci0JZGVzY3JpcHRpb24gPSBrbWFsbG9jKGRsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRlc2NyaXB0aW9uKQotCQlnb3RvIGVycm9yOwotCWRlc2NyaXB0aW9uW2RsZW5dID0gJ1wwJzsKLQotCXJldCA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGRlc2NyaXB0aW9uLCBfZGVzY3JpcHRpb24sIGRsZW4pICE9IDApCi0JCWdvdG8gZXJyb3IyOworCX0KIAogCS8qIHB1bGwgdGhlIHBheWxvYWQgaW4gaWYgb25lIHdhcyBzdXBwbGllZCAqLwogCXBheWxvYWQgPSBOVUxMOwpAQCAtMTM2LDU5ICsxNDEsMjggQEAKIAlzdHJ1Y3Qga2V5ICprZXk7CiAJa2V5X3JlZl90IGRlc3RfcmVmOwogCWNoYXIgdHlwZVszMl0sICpkZXNjcmlwdGlvbiwgKmNhbGxvdXRfaW5mbzsKLQlsb25nIGRsZW4sIHJldDsKKwlsb25nIHJldDsKIAogCS8qIHB1bGwgdGhlIHR5cGUgaW50byBrZXJuZWwgc3BhY2UgKi8KLQlyZXQgPSBzdHJuY3B5X2Zyb21fdXNlcih0eXBlLCBfdHlwZSwgc2l6ZW9mKHR5cGUpIC0gMSk7CisJcmV0ID0ga2V5X2dldF90eXBlX2Zyb21fdXNlcih0eXBlLCBfdHlwZSwgc2l6ZW9mKHR5cGUpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcjsKLQl0eXBlWzMxXSA9ICdcMCc7Ci0KLQlyZXQgPSAtRVBFUk07Ci0JaWYgKHR5cGVbMF0gPT0gJy4nKQotCQlnb3RvIGVycm9yOwogCiAJLyogcHVsbCB0aGUgZGVzY3JpcHRpb24gaW50byBrZXJuZWwgc3BhY2UgKi8KLQlyZXQgPSAtRUZBVUxUOwotCWRsZW4gPSBzdHJubGVuX3VzZXIoX2Rlc2NyaXB0aW9uLCBQQUdFX1NJWkUgLSAxKTsKLQlpZiAoZGxlbiA8PSAwKQorCWRlc2NyaXB0aW9uID0gc3RybmR1cF91c2VyKF9kZXNjcmlwdGlvbiwgUEFHRV9TSVpFKTsKKwlpZiAoSVNfRVJSKGRlc2NyaXB0aW9uKSkgeworCQlyZXQgPSBQVFJfRVJSKGRlc2NyaXB0aW9uKTsKIAkJZ290byBlcnJvcjsKLQotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKGRsZW4gPiBQQUdFX1NJWkUgLSAxKQotCQlnb3RvIGVycm9yOwotCi0JcmV0ID0gLUVOT01FTTsKLQlkZXNjcmlwdGlvbiA9IGttYWxsb2MoZGxlbiArIDEsIEdGUF9LRVJORUwpOwotCWlmICghZGVzY3JpcHRpb24pCi0JCWdvdG8gZXJyb3I7Ci0JZGVzY3JpcHRpb25bZGxlbl0gPSAnXDAnOwotCi0JcmV0ID0gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoZGVzY3JpcHRpb24sIF9kZXNjcmlwdGlvbiwgZGxlbikgIT0gMCkKLQkJZ290byBlcnJvcjI7CisJfQogCiAJLyogcHVsbCB0aGUgY2FsbG91dCBpbmZvIGludG8ga2VybmVsIHNwYWNlICovCiAJY2FsbG91dF9pbmZvID0gTlVMTDsKIAlpZiAoX2NhbGxvdXRfaW5mbykgewotCQlyZXQgPSAtRUZBVUxUOwotCQlkbGVuID0gc3Rybmxlbl91c2VyKF9jYWxsb3V0X2luZm8sIFBBR0VfU0laRSAtIDEpOwotCQlpZiAoZGxlbiA8PSAwKQorCQljYWxsb3V0X2luZm8gPSBzdHJuZHVwX3VzZXIoX2NhbGxvdXRfaW5mbywgUEFHRV9TSVpFKTsKKwkJaWYgKElTX0VSUihjYWxsb3V0X2luZm8pKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNhbGxvdXRfaW5mbyk7CiAJCQlnb3RvIGVycm9yMjsKLQotCQlyZXQgPSAtRUlOVkFMOwotCQlpZiAoZGxlbiA+IFBBR0VfU0laRSAtIDEpCi0JCQlnb3RvIGVycm9yMjsKLQotCQlyZXQgPSAtRU5PTUVNOwotCQljYWxsb3V0X2luZm8gPSBrbWFsbG9jKGRsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjYWxsb3V0X2luZm8pCi0JCQlnb3RvIGVycm9yMjsKLQkJY2FsbG91dF9pbmZvW2RsZW5dID0gJ1wwJzsKLQotCQlyZXQgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoY2FsbG91dF9pbmZvLCBfY2FsbG91dF9pbmZvLCBkbGVuKSAhPSAwKQotCQkJZ290byBlcnJvcjM7CisJCX0KIAl9CiAKIAkvKiBnZXQgdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgaWYgc3BlY2lmaWVkICovCkBAIC0yNjQsMzYgKzIzOCwyMSBAQAogbG9uZyBrZXljdGxfam9pbl9zZXNzaW9uX2tleXJpbmcoY29uc3QgY2hhciBfX3VzZXIgKl9uYW1lKQogewogCWNoYXIgKm5hbWU7Ci0JbG9uZyBubGVuLCByZXQ7CisJbG9uZyByZXQ7CiAKIAkvKiBmZXRjaCB0aGUgbmFtZSBmcm9tIHVzZXJzcGFjZSAqLwogCW5hbWUgPSBOVUxMOwogCWlmIChfbmFtZSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlubGVuID0gc3Rybmxlbl91c2VyKF9uYW1lLCBQQUdFX1NJWkUgLSAxKTsKLQkJaWYgKG5sZW4gPD0gMCkKKwkJbmFtZSA9IHN0cm5kdXBfdXNlcihfbmFtZSwgUEFHRV9TSVpFKTsKKwkJaWYgKElTX0VSUihuYW1lKSkgeworCQkJcmV0ID0gUFRSX0VSUihuYW1lKTsKIAkJCWdvdG8gZXJyb3I7Ci0KLQkJcmV0ID0gLUVJTlZBTDsKLQkJaWYgKG5sZW4gPiBQQUdFX1NJWkUgLSAxKQotCQkJZ290byBlcnJvcjsKLQotCQlyZXQgPSAtRU5PTUVNOwotCQluYW1lID0ga21hbGxvYyhubGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmFtZSkKLQkJCWdvdG8gZXJyb3I7Ci0JCW5hbWVbbmxlbl0gPSAnXDAnOwotCi0JCXJldCA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihuYW1lLCBfbmFtZSwgbmxlbikgIT0gMCkKLQkJCWdvdG8gZXJyb3IyOworCQl9CiAJfQogCiAJLyogam9pbiB0aGUgc2Vzc2lvbiAqLwogCXJldCA9IGpvaW5fc2Vzc2lvbl9rZXlyaW5nKG5hbWUpOwogCi0gZXJyb3IyOgotCWtmcmVlKG5hbWUpOwogIGVycm9yOgogCXJldHVybiByZXQ7CiAKQEAgLTU2NiwzMiArNTI1LDE4IEBACiAJc3RydWN0IGtleV90eXBlICprdHlwZTsKIAlrZXlfcmVmX3Qga2V5cmluZ19yZWYsIGtleV9yZWYsIGRlc3RfcmVmOwogCWNoYXIgdHlwZVszMl0sICpkZXNjcmlwdGlvbjsKLQlsb25nIGRsZW4sIHJldDsKKwlsb25nIHJldDsKIAogCS8qIHB1bGwgdGhlIHR5cGUgYW5kIGRlc2NyaXB0aW9uIGludG8ga2VybmVsIHNwYWNlICovCi0JcmV0ID0gc3RybmNweV9mcm9tX3VzZXIodHlwZSwgX3R5cGUsIHNpemVvZih0eXBlKSAtIDEpOworCXJldCA9IGtleV9nZXRfdHlwZV9mcm9tX3VzZXIodHlwZSwgX3R5cGUsIHNpemVvZih0eXBlKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7Ci0JdHlwZVszMV0gPSAnXDAnOwogCi0JcmV0ID0gLUVGQVVMVDsKLQlkbGVuID0gc3Rybmxlbl91c2VyKF9kZXNjcmlwdGlvbiwgUEFHRV9TSVpFIC0gMSk7Ci0JaWYgKGRsZW4gPD0gMCkKKwlkZXNjcmlwdGlvbiA9IHN0cm5kdXBfdXNlcihfZGVzY3JpcHRpb24sIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihkZXNjcmlwdGlvbikpIHsKKwkJcmV0ID0gUFRSX0VSUihkZXNjcmlwdGlvbik7CiAJCWdvdG8gZXJyb3I7Ci0KLQlyZXQgPSAtRUlOVkFMOwotCWlmIChkbGVuID4gUEFHRV9TSVpFIC0gMSkKLQkJZ290byBlcnJvcjsKLQotCXJldCA9IC1FTk9NRU07Ci0JZGVzY3JpcHRpb24gPSBrbWFsbG9jKGRsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRlc2NyaXB0aW9uKQotCQlnb3RvIGVycm9yOwotCWRlc2NyaXB0aW9uW2RsZW5dID0gJ1wwJzsKLQotCXJldCA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGRlc2NyaXB0aW9uLCBfZGVzY3JpcHRpb24sIGRsZW4pICE9IDApCi0JCWdvdG8gZXJyb3IyOworCX0KIAogCS8qIGdldCB0aGUga2V5cmluZyBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoICovCiAJa2V5cmluZ19yZWYgPSBsb29rdXBfdXNlcl9rZXkoTlVMTCwgcmluZ2lkLCAwLCAwLCBLRVlfU0VBUkNIKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMgYi9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCmluZGV4IDc0Y2I3OWUuLmY2OTQwNjE4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3Byb2Nlc3Nfa2V5cy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvY2Vzc19rZXlzLmMKQEAgLTE2LDExICsxNiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2tleWN0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qIHNlc3Npb24ga2V5cmluZyBjcmVhdGUgdnMgam9pbiBzZW1hcGhvcmUgKi8KLXN0YXRpYyBERUNMQVJFX01VVEVYKGtleV9zZXNzaW9uX3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGtleV9zZXNzaW9uX211dGV4KTsKIAogLyogdGhlIHJvb3QgdXNlcidzIHRyYWNraW5nIHN0cnVjdCAqLwogc3RydWN0IGtleV91c2VyIHJvb3Rfa2V5X3VzZXIgPSB7CkBAIC03MTEsNyArNzEyLDcgQEAKIAl9CiAKIAkvKiBhbGxvdyB0aGUgdXNlciB0byBqb2luIG9yIGNyZWF0ZSBhIG5hbWVkIGtleXJpbmcgKi8KLQlkb3duKCZrZXlfc2Vzc2lvbl9zZW0pOworCW11dGV4X2xvY2soJmtleV9zZXNzaW9uX211dGV4KTsKIAogCS8qIGxvb2sgZm9yIGFuIGV4aXN0aW5nIGtleXJpbmcgb2YgdGhpcyBuYW1lICovCiAJa2V5cmluZyA9IGZpbmRfa2V5cmluZ19ieV9uYW1lKG5hbWUsIDApOwpAQCAtNzM3LDcgKzczOCw3IEBACiAJa2V5X3B1dChrZXlyaW5nKTsKIAogZXJyb3IyOgotCXVwKCZrZXlfc2Vzc2lvbl9zZW0pOworCW11dGV4X3VubG9jaygma2V5X3Nlc3Npb25fbXV0ZXgpOwogZXJyb3I6CiAJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjbHZsLmMgYi9zZWN1cml0eS9zZWNsdmwuYwppbmRleCA4NTI5ZWE2Li40NDFiZWFmMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjbHZsLmMKKysrIGIvc2VjdXJpdHkvc2VjbHZsLmMKQEAgLTgsNiArOCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEgV2lyZVggQ29tbXVuaWNhdGlvbnMsIEluYyA8Y2hyaXNAd2lyZXguY29tPgogICogQ29weXJpZ2h0IChjKSAyMDAxIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDIgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyA8cm9iYkBhdXN0aW4uaWJtLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNiBEYXZpIEUuIE0uIEFybmF1dCA8ZGF2aS5hcm5hdXRAZ21haWwuY29tPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzEsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKQEAgLTE5NCwzNSArMTk2LDI3IEBACiAgKiBwZW9wbGUuLi4KICAqLwogc3RhdGljIGludAotcGxhaW50ZXh0X3RvX3NoYTEodW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3QgY2hhciAqcGxhaW50ZXh0LCBpbnQgbGVuKQorcGxhaW50ZXh0X3RvX3NoYTEodW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3QgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWNoYXIgKnBnVmlydEFkZHI7CiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCWlmIChsZW4gPiBQQUdFX1NJWkUpIHsKIAkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIlBsYWludGV4dCBwYXNzd29yZCB0b28gbGFyZ2UgKCVkICIKIAkJCSAgICAgICJjaGFyYWN0ZXJzKS4gIExhcmdlc3QgcG9zc2libGUgaXMgJWx1ICIKIAkJCSAgICAgICJieXRlcy5cbiIsIGxlbiwgUEFHRV9TSVpFKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJzaGExIiwgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKTsKIAlpZiAodGZtID09IE5VTEwpIHsKIAkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwKIAkJCSAgICAgICJGYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yIFNIQTFcbiIpOwotCQlyZXR1cm4gLUVOT1NZUzsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCS8vIEp1c3QgZ2V0IGEgbmV3IHBhZ2U7IGRvbid0IHBsYXkgYXJvdW5kIHdpdGggcGFnZSBib3VuZGFyaWVzCi0JLy8gYW5kIHNjYXR0ZXJsaXN0cy4KLQlwZ1ZpcnRBZGRyID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0Jc2dbMF0ucGFnZSA9IHZpcnRfdG9fcGFnZShwZ1ZpcnRBZGRyKTsKLQlzZ1swXS5vZmZzZXQgPSAwOwotCXNnWzBdLmxlbmd0aCA9IGxlbjsKLQlzdHJuY3B5KHBnVmlydEFkZHIsIHBsYWludGV4dCwgbGVuKTsKKwlzZ19pbml0X29uZSgmc2csICh1OCAqKXBsYWludGV4dCwgbGVuKTsKIAljcnlwdG9fZGlnZXN0X2luaXQodGZtKTsKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Zm0sIHNnLCAxKTsKKwljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Zm0sICZzZywgMSk7CiAJY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIGhhc2gpOwogCWNyeXB0b19mcmVlX3RmbSh0Zm0pOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwZ1ZpcnRBZGRyKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM0LDExICsyMjgsOSBAQAogcGFzc3dkX3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKIAkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyIHRtcFtTSEExX0RJR0VTVF9TSVpFXTsKLQljaGFyICpwYWdlOwotCWludCByYzsKKwljaGFyICpwOwogCWludCBsZW47CisJdW5zaWduZWQgY2hhciB0bXBbU0hBMV9ESUdFU1RfU0laRV07CiAKIAlpZiAoISpwYXNzd2QgJiYgISpzaGExX3Bhc3N3ZCkgewogCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiQXR0ZW1wdCB0byBwYXNzd29yZC11bmxvY2sgdGhlICIKQEAgLTI1MSwzOCArMjQzLDM5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjb3VudCA8IDAgfHwgY291bnQgPj0gUEFHRV9TSVpFKQorCWlmIChjb3VudCA+PSBQQUdFX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICgqcHBvcyAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlwYWdlID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYWdlKQorCXAgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApCiAJCXJldHVybiAtRU5PTUVNOwogCWxlbiA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHBhZ2UsIGJ1ZiwgY291bnQpKQorCWlmIChjb3B5X2Zyb21fdXNlcihwLCBidWYsIGNvdW50KSkKIAkJZ290byBvdXQ7CiAJCi0JbGVuID0gc3RybGVuKHBhZ2UpOworCWxlbiA9IGNvdW50OwogCS8qIGBgZWNobyAic2VjcmV0IiA+IHNlY2x2bC9wYXNzd2QnJyBpbmNsdWRlcyBhIG5ld2xpbmUgKi8KLQlpZiAocGFnZVtsZW4gLSAxXSA9PSAnXG4nKQorCWlmIChwW2xlbiAtIDFdID09ICdcbicpCiAJCWxlbi0tOwogCS8qIEhhc2ggdGhlIHBhc3N3b3JkLCB0aGVuIGNvbXBhcmUgdGhlIGhhc2hlZCB2YWx1ZXMgKi8KLQlpZiAoKHJjID0gcGxhaW50ZXh0X3RvX3NoYTEodG1wLCBwYWdlLCBsZW4pKSkgeworCWlmICgobGVuID0gcGxhaW50ZXh0X3RvX3NoYTEodG1wLCBwLCBsZW4pKSkgewogCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiRXJyb3IgaGFzaGluZyBwYXNzd29yZDogcmMgPSAiCi0JCQkgICAgICAiWyVkXVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7CisJCQkgICAgICAiWyVkXVxuIiwgbGVuKTsKKwkJZ290byBvdXQ7CiAJfQotCWZvciAoaSA9IDA7IGkgPCBTSEExX0RJR0VTVF9TSVpFOyBpKyspIHsKLQkJaWYgKGhhc2hlZFBhc3N3b3JkW2ldICE9IHRtcFtpXSkKLQkJCXJldHVybiAtRVBFUk07Ci0JfQorCisJbGVuID0gLUVQRVJNOworCWlmIChtZW1jbXAoaGFzaGVkUGFzc3dvcmQsIHRtcCwgU0hBMV9ESUdFU1RfU0laRSkpCisJCWdvdG8gb3V0OworCiAJc2VjbHZsX3ByaW50aygwLCBLRVJOX0lORk8sCiAJCSAgICAgICJQYXNzd29yZCBhY2NlcHRlZDsgc2VjbHZsIHJlZHVjZWQgdG8gMC5cbiIpOwogCXNlY2x2bCA9IDA7CiAJbGVuID0gY291bnQ7CiAKIG91dDoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7CisJa2ZyZWUgKHApOwogCXJldHVybiBsZW47CiB9CiAKQEAgLTI5NSwxMyArMjg4LDExIEBACiAgKi8KIHN0YXRpYyBpbnQgc2VjbHZsX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKLQlpZiAoc2VjbHZsID49IDApIHsKLQkJaWYgKGNoaWxkLT5waWQgPT0gMSkgewotCQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJBdHRlbXB0IHRvIHB0cmFjZSAiCi0JCQkJICAgICAgInRoZSBpbml0IHByb2Nlc3MgZGlzc2FsbG93ZWQgaW4gIgotCQkJCSAgICAgICJzZWN1cmUgbGV2ZWwgJWRcbiIsIHNlY2x2bCk7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9CisJaWYgKHNlY2x2bCA+PSAwICYmIGNoaWxkLT5waWQgPT0gMSkgeworCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gcHRyYWNlICIKKwkJCSAgICAgICJ0aGUgaW5pdCBwcm9jZXNzIGRpc3NhbGxvd2VkIGluICIKKwkJCSAgICAgICJzZWN1cmUgbGV2ZWwgJWRcbiIsIHNlY2x2bCk7CisJCXJldHVybiAtRVBFUk07CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzEyLDU1ICszMDMsNTQgQEAKICAqLwogc3RhdGljIGludCBzZWNsdmxfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCkKIHsKKwlpbnQgcmMgPSAwOworCiAJLyogaW5pdCBjYW4gZG8gYW55dGhpbmcgaXQgd2FudHMgKi8KIAlpZiAodHNrLT5waWQgPT0gMSkKIAkJcmV0dXJuIDA7CiAKLQlzd2l0Y2ggKHNlY2x2bCkgewotCWNhc2UgMjoKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSAxOgotCQlpZiAoY2FwID09IENBUF9MSU5VWF9JTU1VVEFCTEUpIHsKKwlpZiAoc2VjbHZsID4gMCkgeworCQlyYyA9IC1FUEVSTTsKKworCQlpZiAoY2FwID09IENBUF9MSU5VWF9JTU1VVEFCTEUpCiAJCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gbW9kaWZ5ICIKIAkJCQkgICAgICAidGhlIElNTVVUQUJMRSBhbmQvb3IgQVBQRU5EIGV4dGVuZGVkICIKIAkJCQkgICAgICAiYXR0cmlidXRlIG9uIGEgZmlsZSB3aXRoIHRoZSBJTU1VVEFCTEUgIgogCQkJCSAgICAgICJhbmQvb3IgQVBQRU5EIGV4dGVuZGVkIGF0dHJpYnV0ZSBzZXQgIgogCQkJCSAgICAgICJkZW5pZWQgaW4gc2VjbHZsIFslZF1cbiIsIHNlY2x2bCk7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQl9IGVsc2UgaWYgKGNhcCA9PSBDQVBfU1lTX1JBV0lPKSB7CS8vIFNvbWV3aGF0IGJyb2FkLi4uCisJCWVsc2UgaWYgKGNhcCA9PSBDQVBfU1lTX1JBV0lPKQogCQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJBdHRlbXB0IHRvIHBlcmZvcm0gIgogCQkJCSAgICAgICJyYXcgSS9PIHdoaWxlIGluIHNlY3VyZSBsZXZlbCBbJWRdICIKIAkJCQkgICAgICAiZGVuaWVkXG4iLCBzZWNsdmwpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfSBlbHNlIGlmIChjYXAgPT0gQ0FQX05FVF9BRE1JTikgeworCQllbHNlIGlmIChjYXAgPT0gQ0FQX05FVF9BRE1JTikKIAkJCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQXR0ZW1wdCB0byBwZXJmb3JtICIKIAkJCQkgICAgICAibmV0d29yayBhZG1pbmlzdHJhdGl2ZSB0YXNrIHdoaWxlICIKIAkJCQkgICAgICAiaW4gc2VjdXJlIGxldmVsIFslZF0gZGVuaWVkXG4iLCBzZWNsdmwpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfSBlbHNlIGlmIChjYXAgPT0gQ0FQX1NFVFVJRCkgeworCQllbHNlIGlmIChjYXAgPT0gQ0FQX1NFVFVJRCkKIAkJCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQXR0ZW1wdCB0byBzZXR1aWQgIgogCQkJCSAgICAgICJ3aGlsZSBpbiBzZWN1cmUgbGV2ZWwgWyVkXSBkZW5pZWRcbiIsCiAJCQkJICAgICAgc2VjbHZsKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0gZWxzZSBpZiAoY2FwID09IENBUF9TRVRHSUQpIHsKKwkJZWxzZSBpZiAoY2FwID09IENBUF9TRVRHSUQpCiAJCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gc2V0Z2lkICIKIAkJCQkgICAgICAid2hpbGUgaW4gc2VjdXJlIGxldmVsIFslZF0gZGVuaWVkXG4iLAogCQkJCSAgICAgIHNlY2x2bCk7Ci0JCX0gZWxzZSBpZiAoY2FwID09IENBUF9TWVNfTU9EVUxFKSB7CisJCWVsc2UgaWYgKGNhcCA9PSBDQVBfU1lTX01PRFVMRSkKIAkJCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQXR0ZW1wdCB0byBwZXJmb3JtICIKIAkJCQkgICAgICAiYSBtb2R1bGUgb3BlcmF0aW9uIHdoaWxlIGluIHNlY3VyZSAiCiAJCQkJICAgICAgImxldmVsIFslZF0gZGVuaWVkXG4iLCBzZWNsdmwpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKKwkJZWxzZQorCQkJcmMgPSAwOwogCX0KLQkvKiBmcm9tIGR1bW15LmMgKi8KLQlpZiAoY2FwX2lzX2ZzX2NhcChjYXApID8gdHNrLT5mc3VpZCA9PSAwIDogdHNrLT5ldWlkID09IDApCi0JCXJldHVybiAwOwkvKiBjYXBhYmlsaXR5IGdyYW50ZWQgKi8KLQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkNhcGFiaWxpdHkgZGVuaWVkXG4iKTsKLQlyZXR1cm4gLUVQRVJNOwkJLyogY2FwYWJpbGl0eSBkZW5pZWQgKi8KKworCWlmICghcmMpIHsKKwkJaWYgKCEoY2FwX2lzX2ZzX2NhcChjYXApID8gdHNrLT5mc3VpZCA9PSAwIDogdHNrLT5ldWlkID09IDApKQorCQkJcmMgPSAtRVBFUk07CisJfQorCisJaWYgKHJjKQorCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkNhcGFiaWxpdHkgZGVuaWVkXG4iKTsKKworCXJldHVybiByYzsKIH0KIAogLyoqCkBAIC00NjYsMTIgKzQ1Niw5IEBACiBzdGF0aWMgdm9pZCBzZWNsdmxfZmlsZV9mcmVlX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCi0JaWYgKGRlbnRyeSkgewotCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQkJc2VjbHZsX2JkX3JlbGVhc2UoaW5vZGUpOwotCX0KKwlpZiAoZGVudHJ5KQorCQlzZWNsdmxfYmRfcmVsZWFzZShkZW50cnktPmRfaW5vZGUpOwogfQogCiAvKioKQEAgLTQ3OSw5ICs0NjYsNyBAQAogICovCiBzdGF0aWMgaW50IHNlY2x2bF91bW91bnQoc3RydWN0IHZmc21vdW50ICptbnQsIGludCBmbGFncykKIHsKLQlpZiAoY3VycmVudC0+cGlkID09IDEpCi0JCXJldHVybiAwOwotCWlmIChzZWNsdmwgPT0gMikgeworCWlmIChjdXJyZW50LT5waWQgIT0gMSAmJiBzZWNsdmwgPT0gMikgewogCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gdW5tb3VudCBpbiBzZWN1cmUgIgogCQkJICAgICAgImxldmVsICVkXG4iLCBzZWNsdmwpOwogCQlyZXR1cm4gLUVQRVJNOwpAQCAtNTA1LDggKzQ5MCw5IEBACiBzdGF0aWMgaW50IHByb2Nlc3NQYXNzd29yZCh2b2lkKQogewogCWludCByYyA9IDA7Ci0JaGFzaGVkUGFzc3dvcmRbMF0gPSAnXDAnOwogCWlmICgqcGFzc3dkKSB7CisJCWNoYXIgKnA7CisKIAkJaWYgKCpzaGExX3Bhc3N3ZCkgewogCQkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIkVycm9yOiBCb3RoICIKIAkJCQkgICAgICAicGFzc3dkIGFuZCBzaGExX3Bhc3N3ZCAiCkBAIC01MTQsMTIgKzUwMCwxNiBAQAogCQkJCSAgICAgICJleGNsdXNpdmUuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICgocmMgPSBwbGFpbnRleHRfdG9fc2hhMShoYXNoZWRQYXNzd29yZCwgcGFzc3dkLAotCQkJCQkgICAgc3RybGVuKHBhc3N3ZCkpKSkgeworCisJCXAgPSBrc3RyZHVwKHBhc3N3ZCwgR0ZQX0tFUk5FTCk7CisJCWlmIChwID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpZiAoKHJjID0gcGxhaW50ZXh0X3RvX3NoYTEoaGFzaGVkUGFzc3dvcmQsIHAsIHN0cmxlbihwKSkpKQogCQkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIkVycm9yOiBTSEExIHN1cHBvcnQgbm90ICIKIAkJCQkgICAgICAiaW4ga2VybmVsXG4iKTsKLQkJCXJldHVybiByYzsKLQkJfQorCisJCWtmcmVlIChwKTsKIAkJLyogQWxsIHN0YXRpYyBkYXRhIGdvZXMgdG8gdGhlIEJTUywgd2hpY2ggemVybydzIHRoZQogCQkgKiBwbGFpbnRleHQgcGFzc3dvcmQgb3V0IGZvciB1cy4gKi8KIAl9IGVsc2UgaWYgKCpzaGExX3Bhc3N3ZCkgewkvLyBCYXNlIDE2CkBAIC01NDIsNyArNTMyLDcgQEAKIAkJCXNoYTFfcGFzc3dkW2kgKyAyXSA9IHRtcDsKIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtNTUyLDI4ICs1NDIsNDYgQEAKIAogc3RhdGljIGludCBzZWNsdmxmc19yZWdpc3Rlcih2b2lkKQogeworCWludCByYyA9IDA7CisKIAlkaXJfaW5vID0gc2VjdXJpdHlmc19jcmVhdGVfZGlyKCJzZWNsdmwiLCBOVUxMKTsKLQlpZiAoIWRpcl9pbm8pCi0JCXJldHVybiAtRUZBVUxUOworCisJaWYgKElTX0VSUihkaXJfaW5vKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGlyX2lubyk7CiAKIAlzZWNsdmxfaW5vID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgic2VjbHZsIiwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJZGlyX2lubywgJnNlY2x2bCwgJnNlY2x2bF9maWxlX29wcyk7Ci0JaWYgKCFzZWNsdmxfaW5vKQorCWlmIChJU19FUlIoc2VjbHZsX2lubykpIHsKKwkJcmMgPSBQVFJfRVJSKHNlY2x2bF9pbm8pOwogCQlnb3RvIG91dF9kZWxkaXI7CisJfQogCWlmICgqcGFzc3dkIHx8ICpzaGExX3Bhc3N3ZCkgewogCQlwYXNzd2RfaW5vID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgicGFzc3dkIiwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJZGlyX2lubywgTlVMTCwgJnBhc3N3ZF9maWxlX29wcyk7Ci0JCWlmICghcGFzc3dkX2lubykKKwkJaWYgKElTX0VSUihwYXNzd2RfaW5vKSkgeworCQkJcmMgPSBQVFJfRVJSKHBhc3N3ZF9pbm8pOwogCQkJZ290byBvdXRfZGVsZjsKKwkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiAKLW91dF9kZWxkaXI6Ci0Jc2VjdXJpdHlmc19yZW1vdmUoZGlyX2lubyk7CiBvdXRfZGVsZjoKIAlzZWN1cml0eWZzX3JlbW92ZShzZWNsdmxfaW5vKTsKIAotCXJldHVybiAtRUZBVUxUOworb3V0X2RlbGRpcjoKKwlzZWN1cml0eWZzX3JlbW92ZShkaXJfaW5vKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgc2VjbHZsZnNfdW5yZWdpc3Rlcih2b2lkKQoreworCXNlY3VyaXR5ZnNfcmVtb3ZlKHNlY2x2bF9pbm8pOworCisJaWYgKCpwYXNzd2QgfHwgKnNoYTFfcGFzc3dkKQorCQlzZWN1cml0eWZzX3JlbW92ZShwYXNzd2RfaW5vKTsKKworCXNlY3VyaXR5ZnNfcmVtb3ZlKGRpcl9pbm8pOwogfQogCiAvKioKQEAgLTU4Miw2ICs1OTAsOCBAQAogc3RhdGljIGludCBfX2luaXQgc2VjbHZsX2luaXQodm9pZCkKIHsKIAlpbnQgcmMgPSAwOworCXN0YXRpYyBjaGFyIG9uY2U7CisKIAlpZiAodmVyYm9zaXR5IDwgMCB8fCB2ZXJib3NpdHkgPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IGJhZCB2ZXJib3NpdHkgWyVkXTsgb25seSAwIG9yIDEgIgogCQkgICAgICAgImFyZSB2YWxpZCB2YWx1ZXNcbiIsIHZlcmJvc2l0eSk7CkBAIC02MDAsNiArNjEwLDExIEBACiAJCQkgICAgICAibW9kdWxlIHBhcmFtZXRlcihzKTogcmMgPSBbJWRdXG4iLCByYyk7CiAJCWdvdG8gZXhpdDsKIAl9CisKKwlpZiAoKHJjID0gc2VjbHZsZnNfcmVnaXN0ZXIoKSkpIHsKKwkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIkVycm9yIHJlZ2lzdGVyaW5nIHdpdGggc3lzZnNcbiIpOworCQlnb3RvIGV4aXQ7CisJfQogCS8qIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBzZWN1cml0eSBmcmFtZXdvcmsgKi8KIAlpZiAocmVnaXN0ZXJfc2VjdXJpdHkoJnNlY2x2bF9vcHMpKSB7CiAJCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsCkBAIC02MTEsMjAgKzYyNiwyNCBAQAogCQkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgInNlY2x2bDogRmFpbHVyZSAiCiAJCQkJICAgICAgInJlZ2lzdGVyaW5nIHdpdGggcHJpbWFyeSBzZWN1cml0eSAiCiAJCQkJICAgICAgIm1vZHVsZS5cbiIpOworCQkJc2VjbHZsZnNfdW5yZWdpc3RlcigpOwogCQkJZ290byBleGl0OwogCQl9CQkvKiBpZiBwcmltYXJ5IG1vZHVsZSByZWdpc3RlcmVkICovCiAJCXNlY29uZGFyeSA9IDE7CiAJfQkJCS8qIGlmIHdlIHJlZ2lzdGVyZWQgb3Vyc2VsdmVzIHdpdGggdGhlIHNlY3VyaXR5IGZyYW1ld29yayAqLwotCWlmICgocmMgPSBzZWNsdmxmc19yZWdpc3RlcigpKSkgewotCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiRXJyb3IgcmVnaXN0ZXJpbmcgd2l0aCBzeXNmc1xuIik7Ci0JCWdvdG8gZXhpdDsKLQl9CisKIAlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fSU5GTywgInNlY2x2bDogU3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLlxuIik7CisKKwlpZiAob25jZSkgeworCQlvbmNlID0gMTsKKwkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0lORk8sICJzZWNsdmwgaXMgZ29pbmcgYXdheS4gSXQgaGFzIGJlZW4gIgorCQkJCSJidWdneSBmb3IgYWdlcy4gQWxzbywgYmUgd2FybmVkIHRoYXQgIgorCQkJCSJTZWN1cmVsZXZlbHMgYXJlIHVzZWxlc3MuIik7CisJfQogIGV4aXQ6Ci0JaWYgKHJjKSB7CisJaWYgKHJjKQogCQlwcmludGsoS0VSTl9FUlIgInNlY2x2bDogRXJyb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uOiByYyA9ICIKIAkJICAgICAgICJbJWRdXG4iLCByYyk7Ci0JfQogCXJldHVybiByYzsKIH0KIApAQCAtNjMzLDE3ICs2NTIsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IHNlY2x2bF9leGl0KHZvaWQpCiB7Ci0Jc2VjdXJpdHlmc19yZW1vdmUoc2VjbHZsX2lubyk7Ci0JaWYgKCpwYXNzd2QgfHwgKnNoYTFfcGFzc3dkKQotCQlzZWN1cml0eWZzX3JlbW92ZShwYXNzd2RfaW5vKTsKLQlzZWN1cml0eWZzX3JlbW92ZShkaXJfaW5vKTsKLQlpZiAoc2Vjb25kYXJ5ID09IDEpIHsKKwlzZWNsdmxmc191bnJlZ2lzdGVyKCk7CisKKwlpZiAoc2Vjb25kYXJ5KQogCQltb2RfdW5yZWdfc2VjdXJpdHkoTVlfTkFNRSwgJnNlY2x2bF9vcHMpOwotCX0gZWxzZSBpZiAodW5yZWdpc3Rlcl9zZWN1cml0eSgmc2VjbHZsX29wcykpIHsKKwllbHNlIGlmICh1bnJlZ2lzdGVyX3NlY3VyaXR5KCZzZWNsdmxfb3BzKSkKIAkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0lORk8sCiAJCQkgICAgICAic2VjbHZsOiBGYWlsdXJlIHVucmVnaXN0ZXJpbmcgd2l0aCB0aGUgIgogCQkJICAgICAgImtlcm5lbFxuIik7Ci0JfQogfQogCiBtb2R1bGVfaW5pdChzZWNsdmxfaW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCBmNjkzZTFmLi41MWVmNTA5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTE3NCwzMSArMTc0LDggQEAKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT51bnJlZ2lzdGVyX3NlY3VyaXR5KG5hbWUsIG9wcyk7CiB9CiAKLS8qKgotICogY2FwYWJsZSAtIGNhbGxzIHRoZSBjdXJyZW50bHkgbG9hZGVkIHNlY3VyaXR5IG1vZHVsZSdzIGNhcGFibGUoKSBmdW5jdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgY2FwYWJpbGl0eQotICogQGNhcDogdGhlIHJlcXVlc3RlZCBjYXBhYmlsaXR5IGxldmVsLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIGN1cnJlbnRseSBsb2FkZWQgc2VjdXJpdHkgbW9kdWxlJ3MgY2FwYWJsZSgpCi0gKiBmdW5jdGlvbiB3aXRoIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCB0YXNrIGFuZCB0aGUgc3BlY2lmaWVkIEBjYXAgdmFsdWUuCi0gKgotICogVGhpcyBhbGxvd3MgdGhlIHNlY3VyaXR5IG1vZHVsZSB0byBpbXBsZW1lbnQgdGhlIGNhcGFibGUgZnVuY3Rpb24gY2FsbAotICogaG93ZXZlciBpdCBjaG9vc2VzIHRvLgotICovCi1pbnQgY2FwYWJsZShpbnQgY2FwKQotewotCWlmIChzZWN1cml0eV9vcHMtPmNhcGFibGUoY3VycmVudCwgY2FwKSkgewotCQkvKiBjYXBhYmlsaXR5IGRlbmllZCAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBjYXBhYmlsaXR5IGdyYW50ZWQgKi8KLQljdXJyZW50LT5mbGFncyB8PSBQRl9TVVBFUlBSSVY7Ci0JcmV0dXJuIDE7Ci19Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX3NlY3VyaXR5KTsKIEVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfc2VjdXJpdHkpOwogRVhQT1JUX1NZTUJPTF9HUEwobW9kX3JlZ19zZWN1cml0eSk7CiBFWFBPUlRfU1lNQk9MX0dQTChtb2RfdW5yZWdfc2VjdXJpdHkpOwotRVhQT1JUX1NZTUJPTChjYXBhYmxlKTsKIEVYUE9SVF9TWU1CT0woc2VjdXJpdHlfb3BzKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCBiNzc3M2JmNi4uY2NhZjk4OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMTE3LDYgKzExNyw4IEBACiBzdGF0aWMgTElTVF9IRUFEKHN1cGVyYmxvY2tfc2VjdXJpdHlfaGVhZCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNiX3NlY3VyaXR5X2xvY2spOwogCitzdGF0aWMga21lbV9jYWNoZV90ICpzZWxfaW5vZGVfY2FjaGU7CisKIC8qIEFsbG9jYXRlIGFuZCBmcmVlIGZ1bmN0aW9ucyBmb3IgZWFjaCBraW5kIG9mIHNlY3VyaXR5IGJsb2IuICovCiAKIHN0YXRpYyBpbnQgdGFza19hbGxvY19zZWN1cml0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCkBAIC0xNDYsMTAgKzE0OCwxMSBAQAogCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGN1cnJlbnQtPnNlY3VyaXR5OwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CiAKLQlpc2VjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCksIEdGUF9LRVJORUwpOworCWlzZWMgPSBrbWVtX2NhY2hlX2FsbG9jKHNlbF9pbm9kZV9jYWNoZSwgU0xBQl9LRVJORUwpOwogCWlmICghaXNlYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwltZW1zZXQoaXNlYywgMCwgc2l6ZW9mKCppc2VjKSk7CiAJaW5pdF9NVVRFWCgmaXNlYy0+c2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmaXNlYy0+bGlzdCk7CiAJaXNlYy0+aW5vZGUgPSBpbm9kZTsKQEAgLTE3Miw3ICsxNzUsNyBAQAogCXNwaW5fdW5sb2NrKCZzYnNlYy0+aXNlY19sb2NrKTsKIAogCWlub2RlLT5pX3NlY3VyaXR5ID0gTlVMTDsKLQlrZnJlZShpc2VjKTsKKwlrbWVtX2NhY2hlX2ZyZWUoc2VsX2lub2RlX2NhY2hlLCBpc2VjKTsKIH0KIAogc3RhdGljIGludCBmaWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTI2Miw3ICsxMjY1LDcgQEAKIAogCXJjID0gdGFza19oYXNfcGVybShwYXJlbnQsIGNoaWxkLCBQUk9DRVNTX19QVFJBQ0UpOwogCS8qIFNhdmUgdGhlIFNJRCBvZiB0aGUgdHJhY2luZyBwcm9jZXNzIGZvciBsYXRlciB1c2UgaW4gYXBwbHlfY3JlZHMuICovCi0JaWYgKCFyYykKKwlpZiAoIShjaGlsZC0+cHRyYWNlICYgUFRfUFRSQUNFRCkgJiYgIXJjKQogCQljc2VjLT5wdHJhY2Vfc2lkID0gcHNlYy0+c2lkOwogCXJldHVybiByYzsKIH0KQEAgLTE5MjksNyArMTkzMiw2IEBACiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjOwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmRzZWM7CiAJc3RydWN0IHN1cGVyYmxvY2tfc2VjdXJpdHlfc3RydWN0ICpzYnNlYzsKLQlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwogCXUzMiBuZXdzaWQsIGNsZW47CiAJaW50IHJjOwogCWNoYXIgKm5hbWVwID0gTlVMTCwgKmNvbnRleHQ7CkBAIC0xOTM3LDcgKzE5MzksNiBAQAogCXRzZWMgPSBjdXJyZW50LT5zZWN1cml0eTsKIAlkc2VjID0gZGlyLT5pX3NlY3VyaXR5OwogCXNic2VjID0gZGlyLT5pX3NiLT5zX3NlY3VyaXR5OwotCWlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAogCWlmICh0c2VjLT5jcmVhdGVfc2lkICYmIHNic2VjLT5iZWhhdmlvciAhPSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpIHsKIAkJbmV3c2lkID0gdHNlYy0+Y3JlYXRlX3NpZDsKQEAgLTE5NTcsNyArMTk1OCw3IEBACiAKIAlpbm9kZV9zZWN1cml0eV9zZXRfc2lkKGlub2RlLCBuZXdzaWQpOwogCi0JaWYgKHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfTU5UUE9JTlQpCisJaWYgKCFzc19pbml0aWFsaXplZCB8fCBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAobmFtZSkgewpAQCAtMzMxOCwyNCArMzMxOSwzOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcnNlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAotCQkJCSAgICAgaW50IF9fdXNlciAqb3B0bGVuLCB1bnNpZ25lZCBsZW4pCitzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X2dldHBlZXJzZWNfc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkJCSAgICBpbnQgX191c2VyICpvcHRsZW4sIHVuc2lnbmVkIGxlbikKIHsKIAlpbnQgZXJyID0gMDsKIAljaGFyICpzY29udGV4dDsKIAl1MzIgc2NvbnRleHRfbGVuOwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWM7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKKwl1MzIgcGVlcl9zaWQgPSAwOwogCiAJaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7Ci0JaWYgKGlzZWMtPnNjbGFzcyAhPSBTRUNDTEFTU19VTklYX1NUUkVBTV9TT0NLRVQpIHsKKworCS8qIGlmIFVOSVhfU1RSRUFNIGNoZWNrIHBlZXJfc2lkLCBpZiBUQ1AgY2hlY2sgZHN0IGZvciBsYWJlbGxlZCBzYSAqLworCWlmIChpc2VjLT5zY2xhc3MgPT0gU0VDQ0xBU1NfVU5JWF9TVFJFQU1fU09DS0VUKSB7CisJCXNzZWMgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7CisJCXBlZXJfc2lkID0gc3NlYy0+cGVlcl9zaWQ7CisJfQorCWVsc2UgaWYgKGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUKSB7CisJCXBlZXJfc2lkID0gc2VsaW51eF9zb2NrZXRfZ2V0cGVlcl9zdHJlYW0oc29jay0+c2spOworCisJCWlmIChwZWVyX3NpZCA9PSBTRUNTSURfTlVMTCkgeworCQkJZXJyID0gLUVOT1BST1RPT1BUOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJZWxzZSB7CiAJCWVyciA9IC1FTk9QUk9UT09QVDsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3NlYyA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKLQkKLQllcnIgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dChzc2VjLT5wZWVyX3NpZCwgJnNjb250ZXh0LCAmc2NvbnRleHRfbGVuKTsKKwllcnIgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dChwZWVyX3NpZCwgJnNjb250ZXh0LCAmc2NvbnRleHRfbGVuKTsKKwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0zMzU2LDYgKzMzNzEsMjMgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqKnNlY2RhdGEsIHUzMiAqc2VjbGVuKQoreworCWludCBlcnIgPSAwOworCXUzMiBwZWVyX3NpZCA9IHNlbGludXhfc29ja2V0X2dldHBlZXJfZGdyYW0oc2tiKTsKKworCWlmIChwZWVyX3NpZCA9PSBTRUNTSURfTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dChwZWVyX3NpZCwgc2VjZGF0YSwgc2VjbGVuKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKworCiBzdGF0aWMgaW50IHNlbGludXhfc2tfYWxsb2Nfc2VjdXJpdHkoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmFtaWx5LCBnZnBfdCBwcmlvcml0eSkKIHsKIAlyZXR1cm4gc2tfYWxsb2Nfc2VjdXJpdHkoc2ssIGZhbWlseSwgcHJpb3JpdHkpOwpAQCAtNDM0NCw3ICs0Mzc2LDggQEAKIAkuc29ja2V0X3NldHNvY2tvcHQgPQkJc2VsaW51eF9zb2NrZXRfc2V0c29ja29wdCwKIAkuc29ja2V0X3NodXRkb3duID0JCXNlbGludXhfc29ja2V0X3NodXRkb3duLAogCS5zb2NrZXRfc29ja19yY3Zfc2tiID0JCXNlbGludXhfc29ja2V0X3NvY2tfcmN2X3NrYiwKLQkuc29ja2V0X2dldHBlZXJzZWMgPQkJc2VsaW51eF9zb2NrZXRfZ2V0cGVlcnNlYywKKwkuc29ja2V0X2dldHBlZXJzZWNfc3RyZWFtID0Jc2VsaW51eF9zb2NrZXRfZ2V0cGVlcnNlY19zdHJlYW0sCisJLnNvY2tldF9nZXRwZWVyc2VjX2RncmFtID0Jc2VsaW51eF9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbSwKIAkuc2tfYWxsb2Nfc2VjdXJpdHkgPQkJc2VsaW51eF9za19hbGxvY19zZWN1cml0eSwKIAkuc2tfZnJlZV9zZWN1cml0eSA9CQlzZWxpbnV4X3NrX2ZyZWVfc2VjdXJpdHksCiAJLnNrX2dldHNpZCA9IAkJCXNlbGludXhfc2tfZ2V0c2lkX3NlY3VyaXR5LApAQCAtNDM3Niw2ICs0NDA5LDkgQEAKIAl0c2VjID0gY3VycmVudC0+c2VjdXJpdHk7CiAJdHNlYy0+b3NpZCA9IHRzZWMtPnNpZCA9IFNFQ0lOSVRTSURfS0VSTkVMOwogCisJc2VsX2lub2RlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNlbGludXhfaW5vZGVfc2VjdXJpdHkiLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QpLAorCQkJCQkgICAgMCwgU0xBQl9QQU5JQywgTlVMTCwgTlVMTCk7CiAJYXZjX2luaXQoKTsKIAogCW9yaWdpbmFsX29wcyA9IHNlY29uZGFyeV9vcHMgPSBzZWN1cml0eV9vcHM7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaAppbmRleCA4ZTg3OTk2Li5jMTBmMWZjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS94ZnJtLmgKQEAgLTM5LDYgKzM5LDggQEAKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNCiBpbnQgc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYih1MzIgc2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3QodTMyIGlzZWNfc2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3UzMiBzZWxpbnV4X3NvY2tldF9nZXRwZWVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2spOwordTMyIHNlbGludXhfc29ja2V0X2dldHBlZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYih1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC00OSw2ICs1MSwxNiBAQAogewogCXJldHVybiBORl9BQ0NFUFQ7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfc29ja2V0X2dldHBlZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzaykKK3sKKwlyZXR1cm4gU0VDU0lEX05VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfc29ja2V0X2dldHBlZXJfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gU0VDU0lEX05VTEw7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9TRUxJTlVYX1hGUk1fSF8gKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYyBiL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYwppbmRleCA2OWI5MzI5Li44NWUzOTkyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCkBAIC04OCw4ICs4OCwxNSBAQAogCXsgWEZSTV9NU0dfREVMUE9MSUNZLAlORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19XUklURSB9LAogCXsgWEZSTV9NU0dfR0VUUE9MSUNZLAlORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19SRUFEICB9LAogCXsgWEZSTV9NU0dfQUxMT0NTUEksCU5FVExJTktfWEZSTV9TT0NLRVRfX05MTVNHX1dSSVRFIH0sCisJeyBYRlJNX01TR19BQ1FVSVJFLAlORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19XUklURSB9LAorCXsgWEZSTV9NU0dfRVhQSVJFLAlORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19XUklURSB9LAogCXsgWEZSTV9NU0dfVVBEUE9MSUNZLAlORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19XUklURSB9LAogCXsgWEZSTV9NU0dfVVBEU0EsCU5FVExJTktfWEZSTV9TT0NLRVRfX05MTVNHX1dSSVRFIH0sCisJeyBYRlJNX01TR19QT0xFWFBJUkUsCU5FVExJTktfWEZSTV9TT0NLRVRfX05MTVNHX1dSSVRFIH0sCisJeyBYRlJNX01TR19GTFVTSFNBLAlORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19XUklURSB9LAorCXsgWEZSTV9NU0dfRkxVU0hQT0xJQ1ksCU5FVExJTktfWEZSTV9TT0NLRVRfX05MTVNHX1dSSVRFIH0sCisJeyBYRlJNX01TR19ORVdBRSwJTkVUTElOS19YRlJNX1NPQ0tFVF9fTkxNU0dfV1JJVEUgfSwKKwl7IFhGUk1fTVNHX0dFVEFFLAlORVRMSU5LX1hGUk1fU09DS0VUX19OTE1TR19SRUFEICB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBubG1zZ19wZXJtIG5sbXNnX2F1ZGl0X3Blcm1zW10gPQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggYjVmYTAyZC4uZjVkNzgzNiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CkBAIC00NCw3ICs0NSw3IEBACiBfX3NldHVwKCJjaGVja3JlcXByb3Q9IiwgY2hlY2tyZXFwcm90X3NldHVwKTsKIAogCi1zdGF0aWMgREVDTEFSRV9NVVRFWChzZWxfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoc2VsX211dGV4KTsKIAogLyogZ2xvYmFsIGRhdGEgZm9yIGJvb2xlYW5zICovCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYm9vbF9kaXIgPSBOVUxMOwpAQCAtMjMwLDcgKzIzMSw3IEBACiAJc3NpemVfdCBsZW5ndGg7CiAJdm9pZCAqZGF0YSA9IE5VTEw7CiAKLQlkb3duKCZzZWxfc2VtKTsKKwltdXRleF9sb2NrKCZzZWxfbXV0ZXgpOwogCiAJbGVuZ3RoID0gdGFza19oYXNfc2VjdXJpdHkoY3VycmVudCwgU0VDVVJJVFlfX0xPQURfUE9MSUNZKTsKIAlpZiAobGVuZ3RoKQpAQCAtMjYyLDcgKzI2Myw3IEBACiAJZWxzZQogCQlsZW5ndGggPSBjb3VudDsKIG91dDoKLQl1cCgmc2VsX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZWxfbXV0ZXgpOwogCXZmcmVlKGRhdGEpOwogCXJldHVybiBsZW5ndGg7CiB9CkBAIC03MDksMTIgKzcxMCwxMSBAQAogewogCWNoYXIgKnBhZ2UgPSBOVUxMOwogCXNzaXplX3QgbGVuZ3RoOwotCXNzaXplX3QgZW5kOwogCXNzaXplX3QgcmV0OwogCWludCBjdXJfZW5mb3JjaW5nOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQlkb3duKCZzZWxfc2VtKTsKKwltdXRleF9sb2NrKCZzZWxfbXV0ZXgpOwogCiAJcmV0ID0gLUVGQVVMVDsKIApAQCAtNzQwLDI2ICs3NDAsOSBAQAogCiAJbGVuZ3RoID0gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiVkICVkIiwgY3VyX2VuZm9yY2luZywKIAkJCSAgYm9vbF9wZW5kaW5nX3ZhbHVlc1tpbm9kZS0+aV9pbm8gLSBCT09MX0lOT19PRkZTRVRdKTsKLQlpZiAobGVuZ3RoIDwgMCkgewotCQlyZXQgPSBsZW5ndGg7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICgqcHBvcyA+PSBsZW5ndGgpIHsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChjb3VudCArICpwcG9zID4gbGVuZ3RoKQotCQljb3VudCA9IGxlbmd0aCAtICpwcG9zOwotCWVuZCA9IGNvdW50ICsgKnBwb3M7Ci0JaWYgKGNvcHlfdG9fdXNlcihidWYsIChjaGFyICopIHBhZ2UgKyAqcHBvcywgY291bnQpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KLQkqcHBvcyA9IGVuZDsKLQlyZXQgPSBjb3VudDsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBwYWdlLCBsZW5ndGgpOwogb3V0OgotCXVwKCZzZWxfc2VtKTsKKwltdXRleF91bmxvY2soJnNlbF9tdXRleCk7CiAJaWYgKHBhZ2UpCiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwYWdlKTsKIAlyZXR1cm4gcmV0OwpAQCAtNzczLDcgKzc1Niw3IEBACiAJaW50IG5ld192YWx1ZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JZG93bigmc2VsX3NlbSk7CisJbXV0ZXhfbG9jaygmc2VsX211dGV4KTsKIAogCWxlbmd0aCA9IHRhc2tfaGFzX3NlY3VyaXR5KGN1cnJlbnQsIFNFQ1VSSVRZX19TRVRCT09MKTsKIAlpZiAobGVuZ3RoKQpAQCAtODEyLDcgKzc5NSw3IEBACiAJbGVuZ3RoID0gY291bnQ7CiAKIG91dDoKLQl1cCgmc2VsX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZWxfbXV0ZXgpOwogCWlmIChwYWdlKQogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOwogCXJldHVybiBsZW5ndGg7CkBAIC04MzEsNyArODE0LDcgQEAKIAlzc2l6ZV90IGxlbmd0aCA9IC1FRkFVTFQ7CiAJaW50IG5ld192YWx1ZTsKIAotCWRvd24oJnNlbF9zZW0pOworCW11dGV4X2xvY2soJnNlbF9tdXRleCk7CiAKIAlsZW5ndGggPSB0YXNrX2hhc19zZWN1cml0eShjdXJyZW50LCBTRUNVUklUWV9fU0VUQk9PTCk7CiAJaWYgKGxlbmd0aCkKQEAgLTg2OSw3ICs4NTIsNyBAQAogCWxlbmd0aCA9IGNvdW50OwogCiBvdXQ6Ci0JdXAoJnNlbF9zZW0pOworCW11dGV4X3VubG9jaygmc2VsX211dGV4KTsKIAlpZiAocGFnZSkKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlKTsKIAlyZXR1cm4gbGVuZ3RoOwpAQCAtOTg3LDcgKzk3MCw3IEBACiAJcmV0dXJuIHJldDsKIGVycjoKIAlrZnJlZSh2YWx1ZXMpOwotCWRfZ2Vub2NpZGUoZGlyKTsKKwlzZWxfcmVtb3ZlX2Jvb2xzKGRpcik7CiAJcmV0ID0gLUVOT01FTTsKIAlnb3RvIG91dDsKIH0KQEAgLTExNjgsMzcgKzExNTEsMzggQEAKIAkJZGVudHJ5ID0gZF9hbGxvY19uYW1lKGRpciwgZmlsZXNbaV0ubmFtZSk7CiAJCWlmICghZGVudHJ5KSB7CiAJCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnI7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCWlub2RlID0gc2VsX21ha2VfaW5vZGUoZGlyLT5kX3NiLCBTX0lGUkVHfGZpbGVzW2ldLm1vZGUpOwogCQlpZiAoIWlub2RlKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnI7CisJCQlnb3RvIG91dDsKIAkJfQogCQlpbm9kZS0+aV9mb3AgPSBmaWxlc1tpXS5vcHM7CiAJCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCX0KIG91dDoKIAlyZXR1cm4gcmV0OwotZXJyOgotCWRfZ2Vub2NpZGUoZGlyKTsKLQlnb3RvIG91dDsKIH0KIAotc3RhdGljIGludCBzZWxfbWFrZV9kaXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBzZWxfbWFrZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JaW5vZGUgPSBzZWxfbWFrZV9pbm9kZShzYiwgU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPKTsKKwlpbm9kZSA9IHNlbF9tYWtlX2lub2RlKGRpci0+aV9zYiwgU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPKTsKIAlpZiAoIWlub2RlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKKwkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KKwlpbm9kZS0+aV9ubGluaysrOwogCWRfYWRkKGRlbnRyeSwgaW5vZGUpOworCS8qIGJ1bXAgbGluayBjb3VudCBvbiBwYXJlbnQgZGlyZWN0b3J5LCB0b28gKi8KKwlkaXItPmlfbmxpbmsrKzsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTIwNyw3ICsxMTkxLDcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUsICpyb290X2lub2RlOwogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CiAKIAlzdGF0aWMgc3RydWN0IHRyZWVfZGVzY3Igc2VsaW51eF9maWxlc1tdID0gewpAQCAtMTIyOCwzMCArMTIxMiwzMyBAQAogCX07CiAJcmV0ID0gc2ltcGxlX2ZpbGxfc3VwZXIoc2IsIFNFTElOVVhfTUFHSUMsIHNlbGludXhfZmlsZXMpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyOworCisJcm9vdF9pbm9kZSA9IHNiLT5zX3Jvb3QtPmRfaW5vZGU7CiAKIAlkZW50cnkgPSBkX2FsbG9jX25hbWUoc2ItPnNfcm9vdCwgQk9PTF9ESVJfTkFNRSk7Ci0JaWYgKCFkZW50cnkpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghZGVudHJ5KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KIAotCWlub2RlID0gc2VsX21ha2VfaW5vZGUoc2IsIFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTyk7Ci0JaWYgKCFpbm9kZSkKLQkJZ290byBvdXQ7Ci0JaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7Ci0JZF9hZGQoZGVudHJ5LCBpbm9kZSk7Ci0JYm9vbF9kaXIgPSBkZW50cnk7Ci0JcmV0ID0gc2VsX21ha2VfYm9vbHMoKTsKKwlyZXQgPSBzZWxfbWFrZV9kaXIocm9vdF9pbm9kZSwgZGVudHJ5KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBlcnI7CisKKwlib29sX2RpciA9IGRlbnRyeTsKIAogCWRlbnRyeSA9IGRfYWxsb2NfbmFtZShzYi0+c19yb290LCBOVUxMX0ZJTEVfTkFNRSk7Ci0JaWYgKCFkZW50cnkpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghZGVudHJ5KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KIAogCWlub2RlID0gc2VsX21ha2VfaW5vZGUoc2IsIFNfSUZDSFIgfCBTX0lSVUdPIHwgU19JV1VHTyk7Ci0JaWYgKCFpbm9kZSkKLQkJZ290byBvdXQ7CisJaWYgKCFpbm9kZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CiAJaXNlYyA9IChzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0Kilpbm9kZS0+aV9zZWN1cml0eTsKIAlpc2VjLT5zaWQgPSBTRUNJTklUU0lEX0RFVk5VTEw7CiAJaXNlYy0+c2NsYXNzID0gU0VDQ0xBU1NfQ0hSX0ZJTEU7CkBAIC0xMjYyLDIyICsxMjQ5LDIzIEBACiAJc2VsaW51eF9udWxsID0gZGVudHJ5OwogCiAJZGVudHJ5ID0gZF9hbGxvY19uYW1lKHNiLT5zX3Jvb3QsICJhdmMiKTsKLQlpZiAoIWRlbnRyeSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFkZW50cnkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQogCi0JcmV0ID0gc2VsX21ha2VfZGlyKHNiLCBkZW50cnkpOworCXJldCA9IHNlbF9tYWtlX2Rpcihyb290X2lub2RlLCBkZW50cnkpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCQlnb3RvIGVycjsKIAogCXJldCA9IHNlbF9tYWtlX2F2Y19maWxlcyhkZW50cnkpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0dXJuIDA7CisJCWdvdG8gZXJyOwogb3V0OgotCWRwdXQoZGVudHJ5KTsKKwlyZXR1cm4gcmV0OworZXJyOgogCXByaW50ayhLRVJOX0VSUiAiJXM6ICBmYWlsZWQgd2hpbGUgY3JlYXRpbmcgaW5vZGVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCXJldHVybiAtRU5PTUVNOworCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpzZWxfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IDhhNzY0OTIuLjYzZTBiN2YgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTI3LDcgKzI3LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgImZsYXNrLmgiCiAjaW5jbHVkZSAiYXZjLmgiCiAjaW5jbHVkZSAiYXZjX3NzLmgiCkBAIC00OCw5ICs0OSw5IEBACiAjZGVmaW5lIFBPTElDWV9SRFVOTE9DSyByZWFkX3VubG9jaygmcG9saWN5X3J3bG9jaykKICNkZWZpbmUgUE9MSUNZX1dSVU5MT0NLIHdyaXRlX3VubG9ja19pcnEoJnBvbGljeV9yd2xvY2spCiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKGxvYWRfc2VtKTsKLSNkZWZpbmUgTE9BRF9MT0NLIGRvd24oJmxvYWRfc2VtKQotI2RlZmluZSBMT0FEX1VOTE9DSyB1cCgmbG9hZF9zZW0pCitzdGF0aWMgREVGSU5FX01VVEVYKGxvYWRfbXV0ZXgpOworI2RlZmluZSBMT0FEX0xPQ0sgbXV0ZXhfbG9jaygmbG9hZF9tdXRleCkKKyNkZWZpbmUgTE9BRF9VTkxPQ0sgbXV0ZXhfdW5sb2NrKCZsb2FkX211dGV4KQogCiBzdGF0aWMgc3RydWN0IHNpZHRhYiBzaWR0YWI7CiBzdHJ1Y3QgcG9saWN5ZGIgcG9saWN5ZGI7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3hmcm0uYyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCmluZGV4IGIyYWY3Y2EuLmRmYWI2YzggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgveGZybS5jCkBAIC0yMjUsNiArMjI1LDc0IEBACiB9CiAKIC8qCisgKiBTRUxpbnV4IGludGVybmFsIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjb250ZXh0IG9mIGEgY29ubmVjdGVkCisgKiAoc2stPnNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkgVENQIHNvY2tldCBiYXNlZCBvbiBpdHMgc2VjdXJpdHkKKyAqIGFzc29jaWF0aW9uIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgcmVtb3RlIHNvY2tldC4KKyAqCisgKiBSZXRyaWV2ZSB2aWEgZ2V0c29ja29wdCBTT19QRUVSU0VDLgorICovCit1MzIgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBkc3RfZW50cnkgKmRzdCwgKmRzdF90ZXN0OworCXUzMiBwZWVyX3NpZCA9IFNFQ1NJRF9OVUxMOworCisJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCisJCWdvdG8gb3V0OworCisJZHN0ID0gc2tfZHN0X2dldChzayk7CisJaWYgKCFkc3QpCisJCWdvdG8gb3V0OworCisgCWZvciAoZHN0X3Rlc3QgPSBkc3Q7IGRzdF90ZXN0ICE9IDA7CisgICAgICAJICAgICBkc3RfdGVzdCA9IGRzdF90ZXN0LT5jaGlsZCkgeworCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdF90ZXN0LT54ZnJtOworCisgCQlpZiAoeCAmJiBzZWxpbnV4X2F1dGhvcml6YWJsZV94ZnJtKHgpKSB7CisJIAkgCXN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCA9IHgtPnNlY3VyaXR5OworCQkJcGVlcl9zaWQgPSBjdHgtPmN0eF9zaWQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlkc3RfcmVsZWFzZShkc3QpOworCitvdXQ6CisJcmV0dXJuIHBlZXJfc2lkOworfQorCisvKgorICogU0VMaW51eCBpbnRlcm5hbCBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY29udGV4dCBvZiBhIFVEUCBwYWNrZXQKKyAqIGJhc2VkIG9uIGl0cyBzZWN1cml0eSBhc3NvY2lhdGlvbiB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIHJlbW90ZSBzb2NrZXQuCisgKgorICogUmV0cmlldmUgdmlhIHNldHNvY2tvcHQgSVBfUEFTU1NFQyBhbmQgcmVjdm1zZyB3aXRoIGNvbnRyb2wgbWVzc2FnZQorICogdHlwZSBTQ01fU0VDVVJJVFkuCisgKi8KK3UzMiBzZWxpbnV4X3NvY2tldF9nZXRwZWVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNlY19wYXRoICpzcDsKKworCWlmIChza2IgPT0gTlVMTCkKKwkJcmV0dXJuIFNFQ1NJRF9OVUxMOworCisJaWYgKHNrYi0+c2stPnNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQorCQlyZXR1cm4gU0VDU0lEX05VTEw7CisKKwlzcCA9IHNrYi0+c3A7CisJaWYgKHNwKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IHNwLT5sZW4tMTsgaSA+PSAwOyBpLS0pIHsKKwkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gc3AtPnhbaV0ueHZlYzsKKwkJCWlmIChzZWxpbnV4X2F1dGhvcml6YWJsZV94ZnJtKHgpKSB7CisJCQkJc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0geC0+c2VjdXJpdHk7CisJCQkJcmV0dXJuIGN0eC0+Y3R4X3NpZDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBTRUNTSURfTlVMTDsKK30KKworLyoKICAqIExTTSBob29rIHRoYXQgY29udHJvbHMgYWNjZXNzIHRvIHVubGFiZWxsZWQgcGFja2V0cy4gIElmCiAgKiBhIHhmcm1fc3RhdGUgaXMgYXV0aG9yaXphYmxlIChkZWZpbmVkIGJ5IG1hY3JvKSB0aGVuIGl0IHdhcwogICogYWxyZWFkeSBhdXRob3JpemVkIGJ5IHRoZSBJUFNlYyBwcm9jZXNzLiAgSWYgbm90LCB0aGVuCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCAxNDlmZWI0Li41ZjIyZDcwIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTczLDcgKzczLDcgQEAKIAlpZiAoYWM5Ny0+bnVtID49IDQpCiAJCXJldHVybjsKIAotCWRvd24oJmFhY2ktPmFjOTdfc2VtKTsKKwltdXRleF9sb2NrKCZhYWNpLT5hYzk3X3NlbSk7CiAKIAlhYWNpX2FjOTdfc2VsZWN0X2NvZGVjKGFhY2ksIGFjOTcpOwogCkBAIC05MSw3ICs5MSw3IEBACiAJCXYgPSByZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTEZSKTsKIAl9IHdoaWxlICh2ICYgKFNMRlJfMVRYQnxTTEZSXzJUWEIpKTsKIAotCXVwKCZhYWNpLT5hYzk3X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZhYWNpLT5hYzk3X3NlbSk7CiB9CiAKIC8qCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpZiAoYWM5Ny0+bnVtID49IDQpCiAJCXJldHVybiB+MDsKIAotCWRvd24oJmFhY2ktPmFjOTdfc2VtKTsKKwltdXRleF9sb2NrKCZhYWNpLT5hYzk3X3NlbSk7CiAKIAlhYWNpX2FjOTdfc2VsZWN0X2NvZGVjKGFhY2ksIGFjOTcpOwogCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJdiA9IH4wOwogCX0KIAotCXVwKCZhYWNpLT5hYzk3X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZhYWNpLT5hYzk3X3NlbSk7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTc4Myw3ICs3ODMsNyBAQAogCQkgY2FyZC0+c2hvcnRuYW1lLCBkZXYtPnJlcy5zdGFydCwgZGV2LT5pcnFbMF0pOwogCiAJYWFjaSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQlpbml0X01VVEVYKCZhYWNpLT5hYzk3X3NlbSk7CisJbXV0ZXhfaW5pdCgmYWFjaS0+YWM5N19zZW0pOwogCXNwaW5fbG9ja19pbml0KCZhYWNpLT5sb2NrKTsKIAlhYWNpLT5jYXJkID0gY2FyZDsKIAlhYWNpLT5kZXYgPSBkZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5oIGIvc291bmQvYXJtL2FhY2kuaAppbmRleCA4M2Y3M2MyLi4wNjI5NTE5IDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5oCisrKyBiL3NvdW5kL2FybS9hYWNpLmgKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXVuc2lnbmVkIGludAkJZmlmb3NpemU7CiAKIAkvKiBBQyc5NyAqLwotCXN0cnVjdCBzZW1hcGhvcmUJYWM5N19zZW07CisJc3RydWN0IG11dGV4CQlhYzk3X3NlbTsKIAlhYzk3X2J1c190CQkqYWM5N19idXM7CiAKIAl1MzIJCQltYWluY3I7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IDNhY2JjNjAuLjU5OWFmZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYXVkaW8uaD4KQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCiAKIAotc3RhdGljIERFQ0xBUkVfTVVURVgoY2FyX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2FyX211dGV4KTsKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChnc3Jfd3EpOwogc3RhdGljIHZvbGF0aWxlIGxvbmcgZ3NyX2JpdHM7CiAKQEAgLTUyLDcgKzUyLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCB2YWwgPSAtMTsKIAl2b2xhdGlsZSB1MzIgKnJlZ19hZGRyOwogCi0JZG93bigmY2FyX211dGV4KTsKKwltdXRleF9sb2NrKCZjYXJfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGNvZGVjIHNwYWNlICovCiAJcmVnX2FkZHIgPSAoYWM5Ny0+bnVtICYgMSkgPyAmU0FDX1JFR19CQVNFIDogJlBBQ19SRUdfQkFTRTsKQEAgLTc5LDcgKzc5LDcgQEAKIAkvKiBidXQgd2UndmUganVzdCBzdGFydGVkIGFub3RoZXIgY3ljbGUuLi4gKi8KIAl3YWl0X2V2ZW50X3RpbWVvdXQoZ3NyX3dxLCAoR1NSIHwgZ3NyX2JpdHMpICYgR1NSX1NET05FLCAxKTsKIAotb3V0Ogl1cCgmY2FyX211dGV4KTsKK291dDoJbXV0ZXhfdW5sb2NrKCZjYXJfbXV0ZXgpOwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTg3LDcgKzg3LDcgQEAKIHsKIAl2b2xhdGlsZSB1MzIgKnJlZ19hZGRyOwogCi0JZG93bigmY2FyX211dGV4KTsKKwltdXRleF9sb2NrKCZjYXJfbXV0ZXgpOwogCiAJLyogc2V0IHVwIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGNvZGVjIHNwYWNlICovCiAJcmVnX2FkZHIgPSAoYWM5Ny0+bnVtICYgMSkgPyAmU0FDX1JFR19CQVNFIDogJlBBQ19SRUdfQkFTRTsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3cml0ZSBlcnJvciAoYWM5N19yZWc9JWQgR1NSPSUjbHgpXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgcmVnLCBHU1IgfCBnc3JfYml0cyk7CiAKLQl1cCgmY2FyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNhcl9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHB4YTJ4eF9hYzk3X3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvS2NvbmZpZyBiL3NvdW5kL2NvcmUvS2NvbmZpZwppbmRleCBmNzk3NTVmLi45ZGQxMjFiIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL0tjb25maWcKKysrIGIvc291bmQvY29yZS9LY29uZmlnCkBAIC03Myw2ICs3MywxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXBjbS1vc3MuCiAKK2NvbmZpZyBTTkRfUENNX09TU19QTFVHSU5TCisJYm9vbCAiT1NTIFBDTSAoZGlnaXRhbCBhdWRpbykgQVBJIC0gSW5jbHVkZSBwbHVnaW4gc3lzdGVtIgorCWRlcGVuZHMgb24gU05EX1BDTV9PU1MKKyAgICAgICAgZGVmYXVsdCB5CisJaGVscAorICAgICAgICAgIElmIHlvdSBkaXNhYmxlIHRoaXMgb3B0aW9uLCB0aGUgQUxTQSdzIE9TUyBQQ00gQVBJIHdpbGwgbm90CisgICAgICAgICAgc3VwcG9ydCBjb252ZXJzaW9uIG9mIGNoYW5uZWxzLCBmb3JtYXRzIGFuZCByYXRlcy4gSXQgd2lsbAorICAgICAgICAgIGJlaGF2ZSBsaWtlIG1vc3Qgb2YgbmV3IE9TUy9GcmVlIGRyaXZlcnMgaW4gMi40LzIuNiBrZXJuZWxzLgorCiBjb25maWcgU05EX1NFUVVFTkNFUl9PU1MKIAlib29sICJPU1MgU2VxdWVuY2VyIEFQSSIKIAlkZXBlbmRzIG9uIFNORCAmJiBTTkRfU0VRVUVOQ0VSCkBAIC0xMzAsNiArMTM5LDE1IEBACiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIG9ic29sZXRlIEFMU0EgUENNIEFQSSAodmVyLjAuOS4wIHJjMwogCSAgb3Igb2xkZXIpLgogCitjb25maWcgU05EX1ZFUkJPU0VfUFJPQ0ZTCisJYm9vbCAiVmVyYm9zZSBwcm9jZnMgY29udGVudHMiCisJZGVwZW5kcyBvbiBTTkQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgY29kZSBmb3IgdmVyYm9zZSBwcm9jZnMgY29udGVudHMgKHByb3ZpZGVzCisgICAgICAgICAgdXNlZnVsbCBpbmZvcm1hdGlvbiB0byBkZXZlbG9wZXJzIHdoZW4gYSBwcm9ibGVtIG9jY3VycykuIE9uIHRoZQorICAgICAgICAgIG90aGVyIHNpZGUsIGl0IG1ha2VzIHRoZSBBTFNBIHN1YnN5c3RlbSBsYXJnZXIuCisKIGNvbmZpZyBTTkRfVkVSQk9TRV9QUklOVEsKIAlib29sICJWZXJib3NlIHByaW50ayIKIAlkZXBlbmRzIG9uIFNORApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sLmMgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwppbmRleCBhYmQ2MmY5Li41NzQ3NDUzIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2NvbnRyb2wuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2wuYwpAQCAtMzA5LDI4ICszMDksMjkgQEAKIHsKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIGlkOwogCXVuc2lnbmVkIGludCBpZHg7CisJaW50IGVyciA9IC1FSU5WQUw7CiAKLQlzbmRfYXNzZXJ0KGNhcmQgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOwogCWlmICghIGtjb250cm9sKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzbmRfYXNzZXJ0KGtjb250cm9sLT5pbmZvICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKKwkJcmV0dXJuIGVycjsKKwlzbmRfYXNzZXJ0KGNhcmQgIT0gTlVMTCwgZ290byBlcnJvcik7CisJc25kX2Fzc2VydChrY29udHJvbC0+aW5mbyAhPSBOVUxMLCBnb3RvIGVycm9yKTsKIAlpZCA9IGtjb250cm9sLT5pZDsKIAlkb3duX3dyaXRlKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CiAJaWYgKHNuZF9jdGxfZmluZF9pZChjYXJkLCAmaWQpKSB7CiAJCXVwX3dyaXRlKCZjYXJkLT5jb250cm9sc19yd3NlbSk7Ci0JCXNuZF9jdGxfZnJlZV9vbmUoa2NvbnRyb2wpOwogCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJjb250cm9sICVpOiVpOiVpOiVzOiVpIGlzIGFscmVhZHkgcHJlc2VudFxuIiwKIAkJCQkJaWQuaWZhY2UsCiAJCQkJCWlkLmRldmljZSwKIAkJCQkJaWQuc3ViZGV2aWNlLAogCQkJCQlpZC5uYW1lLAogCQkJCQlpZC5pbmRleCk7Ci0JCXJldHVybiAtRUJVU1k7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcnJvcjsKIAl9CiAJaWYgKHNuZF9jdGxfZmluZF9ob2xlKGNhcmQsIGtjb250cm9sLT5jb3VudCkgPCAwKSB7CiAJCXVwX3dyaXRlKCZjYXJkLT5jb250cm9sc19yd3NlbSk7Ci0JCXNuZF9jdGxfZnJlZV9vbmUoa2NvbnRyb2wpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKIAl9CiAJbGlzdF9hZGRfdGFpbCgma2NvbnRyb2wtPmxpc3QsICZjYXJkLT5jb250cm9scyk7CiAJY2FyZC0+Y29udHJvbHNfY291bnQgKz0ga2NvbnRyb2wtPmNvdW50OwpAQCAtMzQwLDYgKzM0MSwxMCBAQAogCWZvciAoaWR4ID0gMDsgaWR4IDwga2NvbnRyb2wtPmNvdW50OyBpZHgrKywgaWQuaW5kZXgrKywgaWQubnVtaWQrKykKIAkJc25kX2N0bF9ub3RpZnkoY2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfQURELCAmaWQpOwogCXJldHVybiAwOworCisgZXJyb3I6CisJc25kX2N0bF9mcmVlX29uZShrY29udHJvbCk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC02NTgsNyArNjYzLDExIEBACiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIF9pbmZvLCBzaXplb2YoaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXN1bHQgPSBzbmRfY3RsX2VsZW1faW5mbyhjdGwsICZpbmZvKTsKKwlzbmRfcG93ZXJfbG9jayhjdGwtPmNhcmQpOworCXJlc3VsdCA9IHNuZF9wb3dlcl93YWl0KGN0bC0+Y2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwLCBOVUxMKTsKKwlpZiAocmVzdWx0ID49IDApCisJCXJlc3VsdCA9IHNuZF9jdGxfZWxlbV9pbmZvKGN0bCwgJmluZm8pOworCXNuZF9wb3dlcl91bmxvY2soY3RsLT5jYXJkKTsKIAlpZiAocmVzdWx0ID49IDApCiAJCWlmIChjb3B5X3RvX3VzZXIoX2luZm8sICZpbmZvLCBzaXplb2YoaW5mbykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC03MDgsNyArNzE3LDExIEBACiAJCWtmcmVlKGNvbnRyb2wpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JcmVzdWx0ID0gc25kX2N0bF9lbGVtX3JlYWQoY2FyZCwgY29udHJvbCk7CisJc25kX3Bvd2VyX2xvY2soY2FyZCk7CisJcmVzdWx0ID0gc25kX3Bvd2VyX3dhaXQoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwLCBOVUxMKTsKKwlpZiAocmVzdWx0ID49IDApCisJCXJlc3VsdCA9IHNuZF9jdGxfZWxlbV9yZWFkKGNhcmQsIGNvbnRyb2wpOworCXNuZF9wb3dlcl91bmxvY2soY2FyZCk7CiAJaWYgKHJlc3VsdCA+PSAwKQogCQlpZiAoY29weV90b191c2VyKF9jb250cm9sLCBjb250cm9sLCBzaXplb2YoKmNvbnRyb2wpKSkKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CkBAIC03NTgsNiArNzcxLDcgQEAKIAkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlIF9fdXNlciAqX2NvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqY29udHJvbDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IHJlc3VsdDsKIAogCWNvbnRyb2wgPSBrbWFsbG9jKHNpemVvZigqY29udHJvbCksIEdGUF9LRVJORUwpOwpAQCAtNzY3LDcgKzc4MSwxMiBAQAogCQlrZnJlZShjb250cm9sKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCXJlc3VsdCA9IHNuZF9jdGxfZWxlbV93cml0ZShmaWxlLT5jYXJkLCBmaWxlLCBjb250cm9sKTsKKwljYXJkID0gZmlsZS0+Y2FyZDsKKwlzbmRfcG93ZXJfbG9jayhjYXJkKTsKKwlyZXN1bHQgPSBzbmRfcG93ZXJfd2FpdChjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDAsIE5VTEwpOworCWlmIChyZXN1bHQgPj0gMCkKKwkJcmVzdWx0ID0gc25kX2N0bF9lbGVtX3dyaXRlKGNhcmQsIGZpbGUsIGNvbnRyb2wpOworCXNuZF9wb3dlcl91bmxvY2soY2FyZCk7CiAJaWYgKHJlc3VsdCA+PSAwKQogCQlpZiAoY29weV90b191c2VyKF9jb250cm9sLCBjb250cm9sLCBzaXplb2YoKmNvbnRyb2wpKSkKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CkBAIC05NTksMTcgKzk3OCwxNSBAQAogCWtjdGwucHJpdmF0ZV9mcmVlID0gc25kX2N0bF9lbGVtX3VzZXJfZnJlZTsKIAlfa2N0bCA9IHNuZF9jdGxfbmV3KCZrY3RsLCBhY2Nlc3MpOwogCWlmIChfa2N0bCA9PSBOVUxMKSB7Ci0JCWtmcmVlKF9rY3RsLT5wcml2YXRlX2RhdGEpOworCQlrZnJlZSh1ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlfa2N0bC0+cHJpdmF0ZV9kYXRhID0gdWU7CiAJZm9yIChpZHggPSAwOyBpZHggPCBfa2N0bC0+Y291bnQ7IGlkeCsrKQogCQlfa2N0bC0+dmRbaWR4XS5vd25lciA9IGZpbGU7CiAJZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgX2tjdGwpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9jdGxfZnJlZV9vbmUoX2tjdGwpOworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCX0KIAogCWRvd25fd3JpdGUoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKIAljYXJkLT51c2VyX2N0bF9jb3VudCsrOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9jb250cm9sX2NvbXBhdC5jIGIvc291bmQvY29yZS9jb250cm9sX2NvbXBhdC5jCmluZGV4IDQxOGM2ZDQuLjg0ZmVmNTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29udHJvbF9jb21wYXQuYworKysgYi9zb3VuZC9jb3JlL2NvbnRyb2xfY29tcGF0LmMKQEAgLTEwNyw3ICsxMDcsMTMgQEAKIAkgKi8KIAlpZiAoZ2V0X3VzZXIoZGF0YS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtLCAmZGF0YTMyLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0pKQogCQlnb3RvIGVycm9yOwotCWVyciA9IHNuZF9jdGxfZWxlbV9pbmZvKGN0bCwgZGF0YSk7CisKKwlzbmRfcG93ZXJfbG9jayhjdGwtPmNhcmQpOworCWVyciA9IHNuZF9wb3dlcl93YWl0KGN0bC0+Y2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwLCBOVUxMKTsKKwlpZiAoZXJyID49IDApCisJCWVyciA9IHNuZF9jdGxfZWxlbV9pbmZvKGN0bCwgZGF0YSk7CisJc25kX3Bvd2VyX3VubG9jayhjdGwtPmNhcmQpOworCiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAJLyogcmVzdG9yZSBpbmZvIHRvIDMyYml0ICovCkBAIC0xNjcsNyArMTczLDcgQEAKIAkJCWludCAqY291bnRwKQogewogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7Ci0Jc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvIGluZm87CisJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvOwogCWludCBlcnI7CiAKIAlkb3duX3JlYWQoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKQEAgLTE3NiwxMyArMTgyLDE5IEBACiAJCXVwX3JlYWQoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JaW5mby5pZCA9ICppZDsKLQllcnIgPSBrY3RsLT5pbmZvKGtjdGwsICZpbmZvKTsKKwlpbmZvID0ga3phbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCXVwX3JlYWQoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWluZm8tPmlkID0gKmlkOworCWVyciA9IGtjdGwtPmluZm8oa2N0bCwgaW5mbyk7CiAJdXBfcmVhZCgmY2FyZC0+Y29udHJvbHNfcndzZW0pOwogCWlmIChlcnIgPj0gMCkgewotCQllcnIgPSBpbmZvLnR5cGU7Ci0JCSpjb3VudHAgPSBpbmZvLmNvdW50OworCQllcnIgPSBpbmZvLT50eXBlOworCQkqY291bnRwID0gaW5mby0+Y291bnQ7CiAJfQorCWtmcmVlKGluZm8pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI4MCw5ICsyOTIsMTQgQEAKIAogCWlmICgoZXJyID0gY29weV9jdGxfdmFsdWVfZnJvbV91c2VyKGNhcmQsIGRhdGEsIGRhdGEzMiwgJnR5cGUsICZjb3VudCkpIDwgMCkKIAkJZ290byBlcnJvcjsKLQlpZiAoKGVyciA9IHNuZF9jdGxfZWxlbV9yZWFkKGNhcmQsIGRhdGEpKSA8IDApCi0JCWdvdG8gZXJyb3I7Ci0JZXJyID0gY29weV9jdGxfdmFsdWVfdG9fdXNlcihkYXRhMzIsIGRhdGEsIHR5cGUsIGNvdW50KTsKKworCXNuZF9wb3dlcl9sb2NrKGNhcmQpOworCWVyciA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJaWYgKGVyciA+PSAwKQorCQllcnIgPSBzbmRfY3RsX2VsZW1fcmVhZChjYXJkLCBkYXRhKTsKKwlzbmRfcG93ZXJfdW5sb2NrKGNhcmQpOworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gY29weV9jdGxfdmFsdWVfdG9fdXNlcihkYXRhMzIsIGRhdGEsIHR5cGUsIGNvdW50KTsKICBlcnJvcjoKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjkyLDE3ICszMDksMjMgQEAKIAkJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlMzIgX191c2VyICpkYXRhMzIpCiB7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqZGF0YTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBmaWxlLT5jYXJkOwogCWludCBlcnIsIHR5cGUsIGNvdW50OwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoKGVyciA9IGNvcHlfY3RsX3ZhbHVlX2Zyb21fdXNlcihmaWxlLT5jYXJkLCBkYXRhLCBkYXRhMzIsICZ0eXBlLCAmY291bnQpKSA8IDApCisJaWYgKChlcnIgPSBjb3B5X2N0bF92YWx1ZV9mcm9tX3VzZXIoY2FyZCwgZGF0YSwgZGF0YTMyLCAmdHlwZSwgJmNvdW50KSkgPCAwKQogCQlnb3RvIGVycm9yOwotCWlmICgoZXJyID0gc25kX2N0bF9lbGVtX3dyaXRlKGZpbGUtPmNhcmQsIGZpbGUsIGRhdGEpKSA8IDApCi0JCWdvdG8gZXJyb3I7Ci0JZXJyID0gY29weV9jdGxfdmFsdWVfdG9fdXNlcihkYXRhMzIsIGRhdGEsIHR5cGUsIGNvdW50KTsKKworCXNuZF9wb3dlcl9sb2NrKGNhcmQpOworCWVyciA9IHNuZF9wb3dlcl93YWl0KGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCwgTlVMTCk7CisJaWYgKGVyciA+PSAwKQorCQllcnIgPSBzbmRfY3RsX2VsZW1fd3JpdGUoY2FyZCwgZmlsZSwgZGF0YSk7CisJc25kX3Bvd2VyX3VubG9jayhjYXJkKTsKKwlpZiAoZXJyID49IDApCisJCWVyciA9IGNvcHlfY3RsX3ZhbHVlX3RvX3VzZXIoZGF0YTMyLCBkYXRhLCB0eXBlLCBjb3VudCk7CiAgZXJyb3I6CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaHdkZXAuYyBiL3NvdW5kL2NvcmUvaHdkZXAuYwppbmRleCA2MThjNDNiLi4yNTI0ZTY2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2h3ZGVwLmMKKysrIGIvc291bmQvY29yZS9od2RlcC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9taW5vcnMuaD4KQEAgLTM2LDcgKzM3LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIExJU1RfSEVBRChzbmRfaHdkZXBfZGV2aWNlcyk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChyZWdpc3Rlcl9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHJlZ2lzdGVyX211dGV4KTsKIAogc3RhdGljIGludCBzbmRfaHdkZXBfZnJlZShzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCk7CiBzdGF0aWMgaW50IHNuZF9od2RlcF9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKTsKQEAgLTExMSw3ICsxMTIsNyBAQAogCiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKCZody0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JZG93bigmaHctPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmh3LT5vcGVuX211dGV4KTsKIAl3aGlsZSAoMSkgewogCQlpZiAoaHctPmV4Y2x1c2l2ZSAmJiBody0+dXNlZCA+IDApIHsKIAkJCWVyciA9IC1FQlVTWTsKQEAgLTEyOCw5ICsxMjksOSBAQAogCQl9IGVsc2UKIAkJCWJyZWFrOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmaHctPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmh3LT5vcGVuX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJZG93bigmaHctPm9wZW5fbXV0ZXgpOworCQltdXRleF9sb2NrKCZody0+b3Blbl9tdXRleCk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJZXJyID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CkBAIC0xNDcsNyArMTQ4LDcgQEAKIAkJCQlody0+b3BzLnJlbGVhc2UoaHcsIGZpbGUpOwogCQl9CiAJfQotCXVwKCZody0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZody0+b3Blbl9tdXRleCk7CiAJaWYgKGVyciA8IDApCiAJCW1vZHVsZV9wdXQoaHctPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIGVycjsKQEAgLTE1Nyw3ICsxNTgsNyBAQAogewogCWludCBlcnIgPSAtRU5YSU87CiAJc3RydWN0IHNuZF9od2RlcCAqaHcgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZG93bigmaHctPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmh3LT5vcGVuX211dGV4KTsKIAlpZiAoaHctPm9wcy5yZWxlYXNlKSB7CiAJCWVyciA9IGh3LT5vcHMucmVsZWFzZShodywgZmlsZSk7CiAJCXdha2VfdXAoJmh3LT5vcGVuX3dhaXQpOwpAQCAtMTY1LDcgKzE2Niw3IEBACiAJaWYgKGh3LT51c2VkID4gMCkKIAkJaHctPnVzZWQtLTsKIAlzbmRfY2FyZF9maWxlX3JlbW92ZShody0+Y2FyZCwgZmlsZSk7Ci0JdXAoJmh3LT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmh3LT5vcGVuX211dGV4KTsKIAltb2R1bGVfcHV0KGh3LT5jYXJkLT5tb2R1bGUpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yNzIsNyArMjczLDcgQEAKIAogCQkJaWYgKGdldF91c2VyKGRldmljZSwgKGludCBfX3VzZXIgKilhcmcpKQogCQkJCXJldHVybiAtRUZBVUxUOwotCQkJZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCQkJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQkJZGV2aWNlID0gZGV2aWNlIDwgMCA/IDAgOiBkZXZpY2UgKyAxOwogCQkJd2hpbGUgKGRldmljZSA8IFNORFJWX01JTk9SX0hXREVQUykgewogCQkJCWlmIChzbmRfaHdkZXBfc2VhcmNoKGNhcmQsIGRldmljZSkpCkBAIC0yODEsNyArMjgyLDcgQEAKIAkJCX0KIAkJCWlmIChkZXZpY2UgPj0gU05EUlZfTUlOT1JfSFdERVBTKQogCQkJCWRldmljZSA9IC0xOwotCQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQkJaWYgKHB1dF91c2VyKGRldmljZSwgKGludCBfX3VzZXIgKilhcmcpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJcmV0dXJuIDA7CkBAIC0yOTQsMTMgKzI5NSwxMyBAQAogCiAJCQlpZiAoZ2V0X3VzZXIoZGV2aWNlLCAmaW5mby0+ZGV2aWNlKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwkJCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJCWh3ZGVwID0gc25kX2h3ZGVwX3NlYXJjaChjYXJkLCBkZXZpY2UpOwogCQkJaWYgKGh3ZGVwKQogCQkJCWVyciA9IHNuZF9od2RlcF9pbmZvKGh3ZGVwLCBpbmZvKTsKIAkJCWVsc2UKIAkJCQllcnIgPSAtRU5YSU87Ci0JCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQpAQCAtMzc1LDcgKzM3Niw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmh3ZGVwLT5vcGVuX3dhaXQpOwotCWluaXRfTVVURVgoJmh3ZGVwLT5vcGVuX211dGV4KTsKKwltdXRleF9pbml0KCZod2RlcC0+b3Blbl9tdXRleCk7CiAJKnJod2RlcCA9IGh3ZGVwOwogCXJldHVybiAwOwogfQpAQCAtNDAxLDkgKzQwMiw5IEBACiAJaW50IGVycjsKIAljaGFyIG5hbWVbMzJdOwogCi0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlpZiAoc25kX2h3ZGVwX3NlYXJjaChod2RlcC0+Y2FyZCwgaHdkZXAtPmRldmljZSkpIHsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWxpc3RfYWRkX3RhaWwoJmh3ZGVwLT5saXN0LCAmc25kX2h3ZGVwX2RldmljZXMpOwpAQCAtNDE0LDcgKzQxNSw3IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBoYXJkd2FyZSBkZXBlbmRlbnQgZGV2aWNlICVpOiVpXG4iLAogCQkJICAgaHdkZXAtPmNhcmQtPm51bWJlciwgaHdkZXAtPmRldmljZSk7CiAJCWxpc3RfZGVsKCZod2RlcC0+bGlzdCk7Ci0JCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlyZXR1cm4gZXJyOwogCX0KICNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKQEAgLTQzNCw3ICs0MzUsNyBAQAogCQl9CiAJfQogI2VuZGlmCi0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQzLDkgKzQ0NCw5IEBACiAJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOwogCiAJc25kX2Fzc2VydChod2RlcCAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWlmIChzbmRfaHdkZXBfc2VhcmNoKGh3ZGVwLT5jYXJkLCBod2RlcC0+ZGV2aWNlKSAhPSBod2RlcCkgewotCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogI2lmZGVmIENPTkZJR19TTkRfT1NTRU1VTApAQCAtNDU0LDcgKzQ1NSw3IEBACiAjZW5kaWYKIAlzbmRfdW5yZWdpc3Rlcl9kZXZpY2UoU05EUlZfREVWSUNFX1RZUEVfSFdERVAsIGh3ZGVwLT5jYXJkLCBod2RlcC0+ZGV2aWNlKTsKIAlsaXN0X2RlbCgmaHdkZXAtPmxpc3QpOwotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcmV0dXJuIHNuZF9od2RlcF9mcmVlKGh3ZGVwKTsKIH0KIApAQCAtNDY5LDEzICs0NzAsMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOwogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwOwogCi0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZzbmRfaHdkZXBfZGV2aWNlcykgewogCQlod2RlcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNuZF9od2RlcCwgbGlzdCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiUwMmktJTAyaTogJXNcbiIsCiAJCQkgICAgaHdkZXAtPmNhcmQtPm51bWJlciwgaHdkZXAtPmRldmljZSwgaHdkZXAtPm5hbWUpOwogCX0KLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpzbmRfaHdkZXBfcHJvY19lbnRyeTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5mby5jIGIvc291bmQvY29yZS9pbmZvLmMKaW5kZXggYWYxMjNlMy4uMjU4MmI3NCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbmZvLmMKKysrIGIvc291bmQvY29yZS9pbmZvLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxzb3VuZC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKIC8qCkBAIC02OCw3ICs2OSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKGluZm9fbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChpbmZvX211dGV4KTsKIAogc3RydWN0IHNuZF9pbmZvX3ByaXZhdGVfZGF0YSB7CiAJc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqcmJ1ZmZlcjsKQEAgLTI2NSwxMSArMjY2LDExIEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwogCWludCBtb2RlLCBlcnI7CiAKLQlkb3duKCZpbmZvX211dGV4KTsKKwltdXRleF9sb2NrKCZpbmZvX211dGV4KTsKIAlwID0gUERFKGlub2RlKTsKIAllbnRyeSA9IHAgPT0gTlVMTCA/IE5VTEwgOiAoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICopcC0+ZGF0YTsKIAlpZiAoZW50cnkgPT0gTlVMTCB8fCBlbnRyeS0+ZGlzY29ubmVjdGVkKSB7Ci0JCXVwKCZpbmZvX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZpbmZvX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghdHJ5X21vZHVsZV9nZXQoZW50cnktPm1vZHVsZSkpIHsKQEAgLTM2MSwxMyArMzYyLDEzIEBACiAJCWJyZWFrOwogCX0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkYXRhOwotCXVwKCZpbmZvX211dGV4KTsKKwltdXRleF91bmxvY2soJmluZm9fbXV0ZXgpOwogCWlmIChlbnRyeS0+Y29udGVudCA9PSBTTkRSVl9JTkZPX0NPTlRFTlRfVEVYVCAmJgogCSAgICAobW9kZSA9PSBPX1JET05MWSB8fCBtb2RlID09IE9fUkRXUikpIHsKIAkJaWYgKGVudHJ5LT5jLnRleHQucmVhZCkgewotCQkJZG93bigmZW50cnktPmFjY2Vzcyk7CisJCQltdXRleF9sb2NrKCZlbnRyeS0+YWNjZXNzKTsKIAkJCWVudHJ5LT5jLnRleHQucmVhZChlbnRyeSwgZGF0YS0+cmJ1ZmZlcik7Ci0JCQl1cCgmZW50cnktPmFjY2Vzcyk7CisJCQltdXRleF91bmxvY2soJmVudHJ5LT5hY2Nlc3MpOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMzc1LDcgKzM3Niw3IEBACiAgICAgICBfX2Vycm9yOgogCW1vZHVsZV9wdXQoZW50cnktPm1vZHVsZSk7CiAgICAgICBfX2Vycm9yMToKLQl1cCgmaW5mb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03NDcsNyArNzQ4LDcgQEAKIAl9CiAJZW50cnktPm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTzsKIAllbnRyeS0+Y29udGVudCA9IFNORFJWX0lORk9fQ09OVEVOVF9URVhUOwotCWluaXRfTVVURVgoJmVudHJ5LT5hY2Nlc3MpOworCW11dGV4X2luaXQoJmVudHJ5LT5hY2Nlc3MpOwogCXJldHVybiBlbnRyeTsKIH0KIApAQCAtODk2LDEwICs4OTcsMTAgQEAKIAogCXNuZF9hc3NlcnQoZW50cnkgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAJcm9vdCA9IGVudHJ5LT5wYXJlbnQgPT0gTlVMTCA/IHNuZF9wcm9jX3Jvb3QgOiBlbnRyeS0+cGFyZW50LT5wOwotCWRvd24oJmluZm9fbXV0ZXgpOworCW11dGV4X2xvY2soJmluZm9fbXV0ZXgpOwogCXAgPSBzbmRfY3JlYXRlX3Byb2NfZW50cnkoZW50cnktPm5hbWUsIGVudHJ5LT5tb2RlLCByb290KTsKIAlpZiAoIXApIHsKLQkJdXAoJmluZm9fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmluZm9fbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcC0+b3duZXIgPSBlbnRyeS0+bW9kdWxlOwpAQCAtOTA4LDcgKzkwOSw3IEBACiAJcC0+c2l6ZSA9IGVudHJ5LT5zaXplOwogCXAtPmRhdGEgPSBlbnRyeTsKIAllbnRyeS0+cCA9IHA7Ci0JdXAoJmluZm9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaW5mb19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyOSw5ICs5MzAsOSBAQAogCXNuZF9hc3NlcnQoZW50cnktPnAgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAJcm9vdCA9IGVudHJ5LT5wYXJlbnQgPT0gTlVMTCA/IHNuZF9wcm9jX3Jvb3QgOiBlbnRyeS0+cGFyZW50LT5wOwogCXNuZF9hc3NlcnQocm9vdCwgcmV0dXJuIC1FTlhJTyk7Ci0JZG93bigmaW5mb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaW5mb19tdXRleCk7CiAJc25kX3JlbW92ZV9wcm9jX2VudHJ5KHJvb3QsIGVudHJ5LT5wKTsKLQl1cCgmaW5mb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvX211dGV4KTsKIAlzbmRfaW5mb19mcmVlX2VudHJ5KGVudHJ5KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5mb19vc3MuYyBiL3NvdW5kL2NvcmUvaW5mb19vc3MuYwppbmRleCA4MjBmNDc3Li5mOWNlODU0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luZm9fb3NzLmMKKysrIGIvc291bmQvY29yZS9pbmZvX29zcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NORF9PU1NFTVVMKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQogCkBAIC0zNSw3ICszNiw3IEBACiAgKiAgT1NTIGNvbXBhdGlibGUgcGFydAogICovCiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKHN0cmluZ3MpOworc3RhdGljIERFRklORV9NVVRFWChzdHJpbmdzKTsKIHN0YXRpYyBjaGFyICpzbmRfc25kc3RhdF9zdHJpbmdzW1NORFJWX0NBUkRTXVtTTkRSVl9PU1NfSU5GT19ERVZfQ09VTlRdOwogc3RhdGljIHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqc25kX3NuZHN0YXRfcHJvY19lbnRyeTsKIApAQCAtNDUsNyArNDYsNyBAQAogCiAJc25kX2Fzc2VydChkZXYgPj0gMCAmJiBkZXYgPCBTTkRSVl9PU1NfSU5GT19ERVZfQ09VTlQsIHJldHVybiAtRU5YSU8pOwogCXNuZF9hc3NlcnQobnVtID49IDAgJiYgbnVtIDwgU05EUlZfQ0FSRFMsIHJldHVybiAtRU5YSU8pOwotCWRvd24oJnN0cmluZ3MpOworCW11dGV4X2xvY2soJnN0cmluZ3MpOwogCWlmIChzdHJpbmcgPT0gTlVMTCkgewogCQlpZiAoKHggPSBzbmRfc25kc3RhdF9zdHJpbmdzW251bV1bZGV2XSkgIT0gTlVMTCkgewogCQkJa2ZyZWUoeCk7CkBAIC01NCwxMiArNTUsMTIgQEAKIAl9IGVsc2UgewogCQl4ID0ga3N0cmR1cChzdHJpbmcsIEdGUF9LRVJORUwpOwogCQlpZiAoeCA9PSBOVUxMKSB7Ci0JCQl1cCgmc3RyaW5ncyk7CisJCQltdXRleF91bmxvY2soJnN0cmluZ3MpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CiAJc25kX3NuZHN0YXRfc3RyaW5nc1tudW1dW2Rldl0gPSB4OwotCXVwKCZzdHJpbmdzKTsKKwltdXRleF91bmxvY2soJnN0cmluZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC03MSw3ICs3Miw3IEBACiAJY2hhciAqc3RyOwogCiAJc25kX2lwcmludGYoYnVmLCAiXG4lczoiLCBpZCk7Ci0JZG93bigmc3RyaW5ncyk7CisJbXV0ZXhfbG9jaygmc3RyaW5ncyk7CiAJZm9yIChpZHggPSAwOyBpZHggPCBTTkRSVl9DQVJEUzsgaWR4KyspIHsKIAkJc3RyID0gc25kX3NuZHN0YXRfc3RyaW5nc1tpZHhdW2Rldl07CiAJCWlmIChzdHIpIHsKQEAgLTgyLDcgKzgzLDcgQEAKIAkJCXNuZF9pcHJpbnRmKGJ1ZiwgIiVpOiAlc1xuIiwgaWR4LCBzdHIpOwogCQl9CiAJfQotCXVwKCZzdHJpbmdzKTsKKwltdXRleF91bmxvY2soJnN0cmluZ3MpOwogCWlmIChvayA8IDApCiAJCXNuZF9pcHJpbnRmKGJ1ZiwgIiBOT1QgRU5BQkxFRCBJTiBDT05GSUdcbiIpOwogCXJldHVybiBvazsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggNzU4MTY2OC4uYWQ2ODc2MSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKKysrIGIvc291bmQvY29yZS9pbml0LmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPnNodXRkb3duX3NsZWVwKTsKIAlJTklUX1dPUksoJmNhcmQtPmZyZWVfd29ya3EsIHNuZF9jYXJkX2ZyZWVfdGhyZWFkLCBjYXJkKTsKICNpZmRlZiBDT05GSUdfUE0KLQlpbml0X01VVEVYKCZjYXJkLT5wb3dlcl9sb2NrKTsKKwltdXRleF9pbml0KCZjYXJkLT5wb3dlcl9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5wb3dlcl9zbGVlcCk7CiAjZW5kaWYKIAkvKiB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20gdGhlIHVzZXIgc3BhY2UgdW50aWwgKi8KQEAgLTE2OSwxMSArMTY5LDQ0IEBACiAgICAgICAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBsb2ZmX3Qgc25kX2Rpc2Nvbm5lY3RfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZykKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHNzaXplX3Qgc25kX2Rpc2Nvbm5lY3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgc3NpemVfdCBzbmRfZGlzY29ubmVjdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfZGlzY29ubmVjdF9wb2xsKHN0cnVjdCBmaWxlICogZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCiB7CiAJcmV0dXJuIFBPTExFUlIgfCBQT0xMTlZBTDsKIH0KIAorc3RhdGljIGxvbmcgc25kX2Rpc2Nvbm5lY3RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IHNuZF9kaXNjb25uZWN0X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IHNuZF9kaXNjb25uZWN0X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIC8qKgogICogIHNuZF9jYXJkX2Rpc2Nvbm5lY3QgLSBkaXNjb25uZWN0IGFsbCBBUElzIGZyb20gdGhlIGZpbGUtb3BlcmF0aW9ucyAodXNlciBzcGFjZSkKICAqICBAY2FyZDogc291bmRjYXJkIHN0cnVjdHVyZQpAQCAtMjI0LDcgKzI1NywxNiBAQAogCQltZW1zZXQoZl9vcHMsIDAsIHNpemVvZigqZl9vcHMpKTsKIAkJZl9vcHMtPm93bmVyID0gZmlsZS0+Zl9vcC0+b3duZXI7CiAJCWZfb3BzLT5yZWxlYXNlID0gZmlsZS0+Zl9vcC0+cmVsZWFzZTsKKwkJZl9vcHMtPmxsc2VlayA9IHNuZF9kaXNjb25uZWN0X2xsc2VlazsKKwkJZl9vcHMtPnJlYWQgPSBzbmRfZGlzY29ubmVjdF9yZWFkOworCQlmX29wcy0+d3JpdGUgPSBzbmRfZGlzY29ubmVjdF93cml0ZTsKIAkJZl9vcHMtPnBvbGwgPSBzbmRfZGlzY29ubmVjdF9wb2xsOworCQlmX29wcy0+dW5sb2NrZWRfaW9jdGwgPSBzbmRfZGlzY29ubmVjdF9pb2N0bDsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCWZfb3BzLT5jb21wYXRfaW9jdGwgPSBzbmRfZGlzY29ubmVjdF9pb2N0bDsKKyNlbmRpZgorCQlmX29wcy0+bW1hcCA9IHNuZF9kaXNjb25uZWN0X21tYXA7CisJCWZfb3BzLT5mYXN5bmMgPSBzbmRfZGlzY29ubmVjdF9mYXN5bmM7CiAKIAkJc19mX29wcy0+bmV4dCA9IGNhcmQtPnNfZl9vcHM7CiAJCWNhcmQtPnNfZl9vcHMgPSBzX2Zfb3BzOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9tZW1hbGxvYy5jIGIvc291bmQvY29yZS9tZW1hbGxvYy5jCmluZGV4IDE5YjNkY2IuLjNmYzZmOTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWVtYWxsb2MuYworKysgYi9zb3VuZC9jb3JlL21lbWFsbG9jLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzb3VuZC9tZW1hbGxvYy5oPgogI2lmZGVmIENPTkZJR19TQlVTCiAjaW5jbHVkZSA8YXNtL3NidXMuaD4KQEAgLTU0LDcgKzU0LDcgQEAKIC8qCiAgKi8KIAotc3RhdGljIERFQ0xBUkVfTVVURVgobGlzdF9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGxpc3RfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChtZW1fbGlzdF9oZWFkKTsKIAogLyogYnVmZmVyIHByZXNlcnZhdGlvbiBsaXN0ICovCkBAIC04Myw3ICs4Myw3IEBACiAgKiAgSGFja3MKICAqLwogCi0jaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3BwY19fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaWYgZGVmaW5lZChfX2kzODZfXykKIC8qCiAgKiBBIGhhY2sgdG8gYWxsb2NhdGUgbGFyZ2UgYnVmZmVycyB2aWEgZG1hX2FsbG9jX2NvaGVyZW50KCkKICAqCkBAIC0xNDEsMTAgKzE0MSw2IEBACiAKICNlbmRpZiAvKiBhcmNoICovCiAKLSNpZiAhIGRlZmluZWQoX19hcm1fXykKLSNkZWZpbmUgTkVFRF9SRVNFUlZFX1BBR0VTCi0jZW5kaWYKLQogLyoKICAqCiAgKiAgR2VuZXJpYyBtZW1vcnkgYWxsb2NhdG9ycwpAQCAtMTYzLDIwICsxNTksNiBAQAogCXNuZF9hbGxvY2F0ZWRfcGFnZXMgLT0gMSA8PCBvcmRlcjsKIH0KIAotc3RhdGljIHZvaWQgbWFya19wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQotewotCXN0cnVjdCBwYWdlICpsYXN0X3BhZ2UgPSBwYWdlICsgKDEgPDwgb3JkZXIpOwotCXdoaWxlIChwYWdlIDwgbGFzdF9wYWdlKQotCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSsrKTsKLX0KLQotc3RhdGljIHZvaWQgdW5tYXJrX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpCi17Ci0Jc3RydWN0IHBhZ2UgKmxhc3RfcGFnZSA9IHBhZ2UgKyAoMSA8PCBvcmRlcik7Ci0Jd2hpbGUgKHBhZ2UgPCBsYXN0X3BhZ2UpCi0JCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UrKyk7Ci19Ci0KIC8qKgogICogc25kX21hbGxvY19wYWdlcyAtIGFsbG9jYXRlIHBhZ2VzIHdpdGggdGhlIGdpdmVuIHNpemUKICAqIEBzaXplOiB0aGUgc2l6ZSB0byBhbGxvY2F0ZSBpbiBieXRlcwpAQCAtMTk1LDEwICsxNzcsOCBAQAogCXNuZF9hc3NlcnQoZ2ZwX2ZsYWdzICE9IDAsIHJldHVybiBOVUxMKTsKIAlnZnBfZmxhZ3MgfD0gX19HRlBfQ09NUDsJLyogY29tcG91bmQgcGFnZSBsZXRzIHBhcnRzIGJlIG1hcHBlZCAqLwogCXBnID0gZ2V0X29yZGVyKHNpemUpOwotCWlmICgocmVzID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhnZnBfZmxhZ3MsIHBnKSkgIT0gTlVMTCkgewotCQltYXJrX3BhZ2VzKHZpcnRfdG9fcGFnZShyZXMpLCBwZyk7CisJaWYgKChyZXMgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKGdmcF9mbGFncywgcGcpKSAhPSBOVUxMKQogCQlpbmNfc25kX3BhZ2VzKHBnKTsKLQl9CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMjE3LDcgKzE5Nyw2IEBACiAJCXJldHVybjsKIAlwZyA9IGdldF9vcmRlcihzaXplKTsKIAlkZWNfc25kX3BhZ2VzKHBnKTsKLQl1bm1hcmtfcGFnZXModmlydF90b19wYWdlKHB0ciksIHBnKTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwdHIsIHBnKTsKIH0KIApAQCAtMjQyLDEyICsyMjEsOCBAQAogCQl8IF9fR0ZQX05PUkVUUlkgLyogZG9uJ3QgdHJpZ2dlciBPT00ta2lsbGVyICovCiAJCXwgX19HRlBfTk9XQVJOOyAvKiBubyBzdGFjayB0cmFjZSBwcmludCAtIHRoaXMgY2FsbCBpcyBub24tY3JpdGljYWwgKi8KIAlyZXMgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUgPDwgcGcsIGRtYSwgZ2ZwX2ZsYWdzKTsKLQlpZiAocmVzICE9IE5VTEwpIHsKLSNpZmRlZiBORUVEX1JFU0VSVkVfUEFHRVMKLQkJbWFya19wYWdlcyh2aXJ0X3RvX3BhZ2UocmVzKSwgcGcpOyAvKiBzaG91bGQgYmUgZG1hX3RvX3BhZ2UoKSAqLwotI2VuZGlmCisJaWYgKHJlcyAhPSBOVUxMKQogCQlpbmNfc25kX3BhZ2VzKHBnKTsKLQl9CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtMjYyLDkgKzIzNyw2IEBACiAJCXJldHVybjsKIAlwZyA9IGdldF9vcmRlcihzaXplKTsKIAlkZWNfc25kX3BhZ2VzKHBnKTsKLSNpZmRlZiBORUVEX1JFU0VSVkVfUEFHRVMKLQl1bm1hcmtfcGFnZXModmlydF90b19wYWdlKHB0ciksIHBnKTsgLyogc2hvdWxkIGJlIGRtYV90b19wYWdlKCkgKi8KLSNlbmRpZgogCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgUEFHRV9TSVpFIDw8IHBnLCBwdHIsIGRtYSk7CiB9CiAKQEAgLTQ0MCw3ICs0MTIsNyBAQAogCiAJc25kX2Fzc2VydChkbWFiLCByZXR1cm4gMCk7CiAKLQlkb3duKCZsaXN0X211dGV4KTsKKwltdXRleF9sb2NrKCZsaXN0X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZtZW1fbGlzdF9oZWFkKSB7CiAJCW1lbSA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNuZF9tZW1fbGlzdCwgbGlzdCk7CiAJCWlmIChtZW0tPmlkID09IGlkICYmCkBAIC00NTIsMTEgKzQyNCwxMSBAQAogCQkJaWYgKGRtYWItPmRldi5kZXYgPT0gTlVMTCkKIAkJCQlkbWFiLT5kZXYuZGV2ID0gZGV2OwogCQkJa2ZyZWUobWVtKTsKLQkJCXVwKCZsaXN0X211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmbGlzdF9tdXRleCk7CiAJCQlyZXR1cm4gZG1hYi0+Ynl0ZXM7CiAJCX0KIAl9Ci0JdXAoJmxpc3RfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbGlzdF9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3NywxMSArNDQ5LDExIEBACiAJbWVtID0ga21hbGxvYyhzaXplb2YoKm1lbSksIEdGUF9LRVJORUwpOwogCWlmICghIG1lbSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZG93bigmbGlzdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmbGlzdF9tdXRleCk7CiAJbWVtLT5idWZmZXIgPSAqZG1hYjsKIAltZW0tPmlkID0gaWQ7CiAJbGlzdF9hZGRfdGFpbCgmbWVtLT5saXN0LCAmbWVtX2xpc3RfaGVhZCk7Ci0JdXAoJmxpc3RfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbGlzdF9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5Myw3ICs0NjUsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAJc3RydWN0IHNuZF9tZW1fbGlzdCAqbWVtOwogCi0JZG93bigmbGlzdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmbGlzdF9tdXRleCk7CiAJd2hpbGUgKCEgbGlzdF9lbXB0eSgmbWVtX2xpc3RfaGVhZCkpIHsKIAkJcCA9IG1lbV9saXN0X2hlYWQubmV4dDsKIAkJbWVtID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3Qgc25kX21lbV9saXN0LCBsaXN0KTsKQEAgLTUwMSw3ICs0NzMsNyBAQAogCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJm1lbS0+YnVmZmVyKTsKIAkJa2ZyZWUobWVtKTsKIAl9Ci0JdXAoJmxpc3RfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbGlzdF9tdXRleCk7CiB9CiAKIApAQCAtNTIyLDcgKzQ5NCw3IEBACiAJaW50IGRldm5vOwogCXN0YXRpYyBjaGFyICp0eXBlc1tdID0geyAiVU5LTk9XTiIsICJDT05UIiwgIkRFViIsICJERVYtU0ciLCAiU0JVUyIgfTsKIAotCWRvd24oJmxpc3RfbXV0ZXgpOworCW11dGV4X2xvY2soJmxpc3RfbXV0ZXgpOwogCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBjb3VudCAtIGxlbiwKIAkJCSJwYWdlcyAgOiAlbGkgYnl0ZXMgKCVsaSBwYWdlcyBwZXIgJWxpa0IpXG4iLAogCQkJcGFnZXMgKiBQQUdFX1NJWkUsIHBhZ2VzLCBQQUdFX1NJWkUgLyAxMDI0KTsKQEAgLTUzNyw3ICs1MDksNyBAQAogCQkJCSIgIGFkZHIgPSAweCVseCwgc2l6ZSA9ICVkIGJ5dGVzXG4iLAogCQkJCSh1bnNpZ25lZCBsb25nKW1lbS0+YnVmZmVyLmFkZHIsIChpbnQpbWVtLT5idWZmZXIuYnl0ZXMpOwogCX0KLQl1cCgmbGlzdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZsaXN0X211dGV4KTsKIAlyZXR1cm4gbGVuOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9jb3B5LmMgYi9zb3VuZC9jb3JlL29zcy9jb3B5LmMKaW5kZXggZDZhMDRjMi4uNjY1OGZhYyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvY29weS5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL2NvcHkuYwpAQCAtMjAsNiArMjAsOSBAQAogICovCiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKworI2lmZGVmIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TCisKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtODUsMyArODgsNSBAQAogCSpyX3BsdWdpbiA9IHBsdWdpbjsKIAlyZXR1cm4gMDsKIH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9pby5jIGIvc291bmQvY29yZS9vc3MvaW8uYwppbmRleCAzMjI3MDJlLi5iNmU3Y2UzIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9pby5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL2lvLmMKQEAgLTIwLDYgKzIwLDkgQEAKICAqLwogICAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKworI2lmZGVmIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TCisKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMTMyLDMgKzEzNSw1IEBACiAJKnJfcGx1Z2luID0gcGx1Z2luOwogCXJldHVybiAwOwogfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL2xpbmVhci5jIGIvc291bmQvY29yZS9vc3MvbGluZWFyLmMKaW5kZXggOGNiZmE0MS4uNWIxYmNkYyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvbGluZWFyLmMKKysrIGIvc291bmQvY29yZS9vc3MvbGluZWFyLmMKQEAgLTIxLDYgKzIxLDkgQEAKICAqLwogCiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUworCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTEwMyw3ICsxMDYsNyBAQAogCXJldHVybiBmcmFtZXM7CiB9CiAKLWludCBjb252X2luZGV4KGludCBzcmNfZm9ybWF0LCBpbnQgZHN0X2Zvcm1hdCkKK3N0YXRpYyBpbnQgY29udl9pbmRleChpbnQgc3JjX2Zvcm1hdCwgaW50IGRzdF9mb3JtYXQpCiB7CiAJaW50IHNyY19lbmRpYW4sIGRzdF9lbmRpYW4sIHNpZ24sIHNyY193aWR0aCwgZHN0X3dpZHRoOwogCkBAIC0xNTYsMyArMTU5LDUgQEAKIAkqcl9wbHVnaW4gPSBwbHVnaW47CiAJcmV0dXJuIDA7CiB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYwppbmRleCBmMDhlNjVhLi45YzY4YmMzIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYwpAQCAtMTA5NSw3ICsxMDk1LDcgQEAKIAlzdHJ1Y3Qgc25kX21peGVyX29zcyAqbWl4ZXIgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCi0JZG93bigmbWl4ZXItPnJlZ19tdXRleCk7CisJbXV0ZXhfbG9jaygmbWl4ZXItPnJlZ19tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IFNORFJWX09TU19NQVhfTUlYRVJTOyBpKyspIHsKIAkJc3RydWN0IHNsb3QgKnA7CiAKQEAgLTExMTAsNyArMTExMCw3IEBACiAJCWVsc2UKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlwiXCIgMFxuIik7CiAJfQotCXVwKCZtaXhlci0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJm1peGVyLT5yZWdfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfbWl4ZXJfb3NzX3Byb2Nfd3JpdGUoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKQEAgLTExMzQsOSArMTEzNCw5IEBACiAJCWNwdHIgPSBzbmRfaW5mb19nZXRfc3RyKHN0ciwgY3B0ciwgc2l6ZW9mKHN0cikpOwogCQlpZiAoISAqc3RyKSB7CiAJCQkvKiByZW1vdmUgdGhlIGVudHJ5ICovCi0JCQlkb3duKCZtaXhlci0+cmVnX211dGV4KTsKKwkJCW11dGV4X2xvY2soJm1peGVyLT5yZWdfbXV0ZXgpOwogCQkJbWl4ZXJfc2xvdF9jbGVhcigmbWl4ZXItPnNsb3RzW2NoXSk7Ci0JCQl1cCgmbWl4ZXItPnJlZ19tdXRleCk7CisJCQltdXRleF91bmxvY2soJm1peGVyLT5yZWdfbXV0ZXgpOwogCQkJY29udGludWU7CiAJCX0KIAkJc25kX2luZm9fZ2V0X3N0cihpZHhzdHIsIGNwdHIsIHNpemVvZihpZHhzdHIpKTsKQEAgLTExNDUsNyArMTE0NSw3IEBACiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtaXhlcl9vc3M6IGludmFsaWQgaW5kZXggJWRcbiIsIGlkeCk7CiAJCQljb250aW51ZTsKIAkJfQotCQlkb3duKCZtaXhlci0+cmVnX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmbWl4ZXItPnJlZ19tdXRleCk7CiAJCXNsb3QgPSAoc3RydWN0IHNsb3QgKiltaXhlci0+c2xvdHNbY2hdLnByaXZhdGVfZGF0YTsKIAkJaWYgKHNsb3QgJiYgc2xvdC0+YXNzaWduZWQgJiYKIAkJICAgIHNsb3QtPmFzc2lnbmVkLT5pbmRleCA9PSBpZHggJiYgISBzdHJjbXAoc2xvdC0+YXNzaWduZWQtPm5hbWUsIHN0cikpCkBAIC0xMTY4LDcgKzExNjgsNyBAQAogCQkJa2ZyZWUodGJsKTsKIAkJfQogCV9fdW5sb2NrOgotCQl1cCgmbWl4ZXItPnJlZ19tdXRleCk7CisJCW11dGV4X3VubG9jaygmbWl4ZXItPnJlZ19tdXRleCk7CiAJfQogfQogCkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCQltaXhlciA9IGtjYWxsb2MoMiwgc2l6ZW9mKCptaXhlciksIEdGUF9LRVJORUwpOwogCQlpZiAobWl4ZXIgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpbml0X01VVEVYKCZtaXhlci0+cmVnX211dGV4KTsKKwkJbXV0ZXhfaW5pdCgmbWl4ZXItPnJlZ19tdXRleCk7CiAJCXNwcmludGYobmFtZSwgIm1peGVyJWklaSIsIGNhcmQtPm51bWJlciwgMCk7CiAJCWlmICgoZXJyID0gc25kX3JlZ2lzdGVyX29zc19kZXZpY2UoU05EUlZfT1NTX0RFVklDRV9UWVBFX01JWEVSLAogCQkJCQkJICAgY2FyZCwgMCwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL211bGF3LmMgYi9zb3VuZC9jb3JlL29zcy9tdWxhdy5jCmluZGV4IDE0ZjU1NzguLjJlYjE4ODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL211bGF3LmMKKysrIGIvc291bmQvY29yZS9vc3MvbXVsYXcuYwpAQCAtMjIsNiArMjIsOSBAQAogICovCiAgIAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgorCisjaWZkZWYgQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlMKKwogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0yNjIsNiArMjY1LDI1IEBACiAJcmV0dXJuIGZyYW1lczsKIH0KIAorc3RhdGljIGludCBnZXRwdXRfaW5kZXgoaW50IGZvcm1hdCkKK3sKKwlpbnQgc2lnbiwgd2lkdGgsIGVuZGlhbjsKKwlzaWduID0gIXNuZF9wY21fZm9ybWF0X3NpZ25lZChmb3JtYXQpOworCXdpZHRoID0gc25kX3BjbV9mb3JtYXRfd2lkdGgoZm9ybWF0KSAvIDggLSAxOworCWlmICh3aWR0aCA8IDAgfHwgd2lkdGggPiAzKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInNuZC1wY20tb3NzOiBpbnZhbGlkIGZvcm1hdCAlZFxuIiwgZm9ybWF0KTsKKwkJd2lkdGggPSAwOworCX0KKyNpZmRlZiBTTkRSVl9MSVRUTEVfRU5ESUFOCisJZW5kaWFuID0gc25kX3BjbV9mb3JtYXRfYmlnX2VuZGlhbihmb3JtYXQpOworI2Vsc2UKKwllbmRpYW4gPSBzbmRfcGNtX2Zvcm1hdF9saXR0bGVfZW5kaWFuKGZvcm1hdCk7CisjZW5kaWYKKwlpZiAoZW5kaWFuIDwgMCkKKwkJZW5kaWFuID0gMDsKKwlyZXR1cm4gd2lkdGggKiA0ICsgZW5kaWFuICogMiArIHNpZ247Cit9CisKIGludCBzbmRfcGNtX3BsdWdpbl9idWlsZF9tdWxhdyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsdWcsCiAJCQkgICAgICAgc3RydWN0IHNuZF9wY21fcGx1Z2luX2Zvcm1hdCAqc3JjX2Zvcm1hdCwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fZm9ybWF0ICpkc3RfZm9ybWF0LApAQCAtMzA2LDMgKzMyOCw1IEBACiAJKnJfcGx1Z2luID0gcGx1Z2luOwogCXJldHVybiAwOwogfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwppbmRleCA3ZmQwNzIzLi5mODMwMmI3IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCkBAIC03OCw2ICs3OCw3IEBACiAJc2V0X2ZzKGZzKTsKIH0KIAorI2lmZGVmIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TCiBzdGF0aWMgaW50IHNuZF9wY21fb3NzX3BsdWdpbl9jbGVhcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMTIyLDYgKzEyMyw3IEBACiAJfQogCXJldHVybiAwOwogfQorI2VuZGlmIC8qIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TICovCiAKIHN0YXRpYyBsb25nIHNuZF9wY21fb3NzX2J5dGVzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBsb25nIGZyYW1lcykKIHsKQEAgLTQxMiw2ICs0MTQsNyBAQAogCW9zc19mcmFtZV9zaXplID0gc25kX3BjbV9mb3JtYXRfcGh5c2ljYWxfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSAqCiAJCQkgcGFyYW1zX2NoYW5uZWxzKHBhcmFtcykgLyA4OwogCisjaWZkZWYgQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlMKIAlzbmRfcGNtX29zc19wbHVnaW5fY2xlYXIoc3Vic3RyZWFtKTsKIAlpZiAoIWRpcmVjdCkgewogCQkvKiBhZGQgbmVjZXNzYXJ5IHBsdWdpbnMgKi8KQEAgLTQ0MSw2ICs0NDQsNyBAQAogCQkJfQogCQl9CiAJfQorI2VuZGlmCiAKIAllcnIgPSBzbmRfcGNtX29zc19wZXJpb2Rfc2l6ZShzdWJzdHJlYW0sIHBhcmFtcywgc3BhcmFtcyk7CiAJaWYgKGVyciA8IDApCkBAIC00OTgsMTEgKzUwMiwxMyBAQAogCXJ1bnRpbWUtPm9zcy5wZXJpb2RzID0gcGFyYW1zX3BlcmlvZHMoc3BhcmFtcyk7CiAJb3NzX3BlcmlvZF9zaXplID0gc25kX3BjbV9wbHVnX2NsaWVudF9zaXplKHN1YnN0cmVhbSwgcGFyYW1zX3BlcmlvZF9zaXplKHNwYXJhbXMpKTsKIAlzbmRfYXNzZXJ0KG9zc19wZXJpb2Rfc2l6ZSA+PSAwLCBlcnIgPSAtRUlOVkFMOyBnb3RvIGZhaWx1cmUpOworI2lmZGVmIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TCiAJaWYgKHJ1bnRpbWUtPm9zcy5wbHVnaW5fZmlyc3QpIHsKIAkJZXJyID0gc25kX3BjbV9wbHVnX2FsbG9jKHN1YnN0cmVhbSwgb3NzX3BlcmlvZF9zaXplKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGZhaWx1cmU7CiAJfQorI2VuZGlmCiAJb3NzX3BlcmlvZF9zaXplICo9IG9zc19mcmFtZV9zaXplOwogCiAJb3NzX2J1ZmZlcl9zaXplID0gb3NzX3BlcmlvZF9zaXplICogcnVudGltZS0+b3NzLnBlcmlvZHM7CkBAIC03ODQsNiArNzkwLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fc2ZyYW1lc190IGZyYW1lcywgZnJhbWVzMTsKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUwogCWlmIChydW50aW1lLT5vc3MucGx1Z2luX2ZpcnN0KSB7CiAJCXN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpjaGFubmVsczsKIAkJc2l6ZV90IG9zc19mcmFtZV9ieXRlcyA9IChydW50aW1lLT5vc3MucGx1Z2luX2ZpcnN0LT5zcmNfd2lkdGggKiBydW50aW1lLT5vc3MucGx1Z2luX2ZpcnN0LT5zcmNfZm9ybWF0LmNoYW5uZWxzKSAvIDg7CkBAIC04MDAsNyArODA3LDkgQEAKIAkJaWYgKGZyYW1lczEgPD0gMCkKIAkJCXJldHVybiBmcmFtZXMxOwogCQlieXRlcyA9IGZyYW1lczEgKiBvc3NfZnJhbWVfYnl0ZXM7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKKyNlbmRpZgorCXsKIAkJZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGJ5dGVzKTsKIAkJZnJhbWVzMSA9IHNuZF9wY21fb3NzX3dyaXRlMyhzdWJzdHJlYW0sIGJ1ZiwgZnJhbWVzLCBpbl9rZXJuZWwpOwogCQlpZiAoZnJhbWVzMSA8PSAwKQpAQCAtODcxLDYgKzg4MCw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzbmRfcGNtX3NmcmFtZXNfdCBmcmFtZXMsIGZyYW1lczE7CisjaWZkZWYgQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlMKIAljaGFyIF9fdXNlciAqZmluYWxfZHN0ID0gKGNoYXIgX191c2VyICopYnVmOwogCWlmIChydW50aW1lLT5vc3MucGx1Z2luX2ZpcnN0KSB7CiAJCXN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpjaGFubmVsczsKQEAgLTg4Nyw3ICs4OTcsOSBAQAogCQlieXRlcyA9IGZyYW1lczEgKiBvc3NfZnJhbWVfYnl0ZXM7CiAJCWlmICghaW5fa2VybmVsICYmIGNvcHlfdG9fdXNlcihmaW5hbF9kc3QsIGJ1ZiwgYnl0ZXMpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKKyNlbmRpZgorCXsKIAkJZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGJ5dGVzKTsKIAkJZnJhbWVzMSA9IHNuZF9wY21fb3NzX3JlYWQzKHN1YnN0cmVhbSwgYnVmLCBmcmFtZXMsIGluX2tlcm5lbCk7CiAJCWlmIChmcmFtZXMxIDw9IDApCkBAIC0xNjMxLDEwICsxNjQzLDEwIEBACiAJY29uc3QgY2hhciAqcHRyLCAqcHRybDsKIAlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwOwogCi0JZG93bigmcGNtLT5zdHJlYW1zW3N0cmVhbV0ub3NzLnNldHVwX211dGV4KTsKKwltdXRleF9sb2NrKCZwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbXV0ZXgpOwogCWZvciAoc2V0dXAgPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbGlzdDsgc2V0dXA7IHNldHVwID0gc2V0dXAtPm5leHQpIHsKIAkJaWYgKCFzdHJjbXAoc2V0dXAtPnRhc2tfbmFtZSwgdGFza19uYW1lKSkgewotCQkJdXAoJnBjbS0+c3RyZWFtc1tzdHJlYW1dLm9zcy5zZXR1cF9tdXRleCk7CisJCQltdXRleF91bmxvY2soJnBjbS0+c3RyZWFtc1tzdHJlYW1dLm9zcy5zZXR1cF9tdXRleCk7CiAJCQlyZXR1cm4gc2V0dXA7CiAJCX0KIAl9CkBAIC0xNjUwLDEyICsxNjYyLDEyIEBACiAJfQogCWZvciAoc2V0dXAgPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbGlzdDsgc2V0dXA7IHNldHVwID0gc2V0dXAtPm5leHQpIHsKIAkJaWYgKCFzdHJjbXAoc2V0dXAtPnRhc2tfbmFtZSwgcHRybCkpIHsKLQkJCXVwKCZwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbXV0ZXgpOwogCQkJcmV0dXJuIHNldHVwOwogCQl9CiAJfQogICAgICAgX19ub3RfZm91bmQ6Ci0JdXAoJnBjbS0+c3RyZWFtc1tzdHJlYW1dLm9zcy5zZXR1cF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwY20tPnN0cmVhbXNbc3RyZWFtXS5vc3Muc2V0dXBfbXV0ZXgpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNjkyLDcgKzE3MDQsOSBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWU7CiAJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAl2ZnJlZShydW50aW1lLT5vc3MuYnVmZmVyKTsKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUwogCXNuZF9wY21fb3NzX3BsdWdpbl9jbGVhcihzdWJzdHJlYW0pOworI2VuZGlmCiAJc3Vic3RyZWFtLT5vc3MuZmlsZSA9IE5VTEw7CiAJc3Vic3RyZWFtLT5vc3Mub3NzID0gMDsKIH0KQEAgLTE4ODEsNyArMTg5NSw3IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoJnBjbS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JZG93bigmcGNtLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZwY20tPm9wZW5fbXV0ZXgpOwogCXdoaWxlICgxKSB7CiAJCWVyciA9IHNuZF9wY21fb3NzX29wZW5fZmlsZShmaWxlLCBwY20sICZwY21fb3NzX2ZpbGUsCiAJCQkJCSAgICBpbWlub3IoaW5vZGUpLCBwc2V0dXAsIGNzZXR1cCk7CkBAIC0xODk1LDE2ICsxOTA5LDE2IEBACiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXVwKCZwY20tPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJnBjbS0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7Ci0JCWRvd24oJnBjbS0+b3Blbl9tdXRleCk7CisJCW11dGV4X2xvY2soJnBjbS0+b3Blbl9tdXRleCk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJZXJyID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnBjbS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JdXAoJnBjbS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwY20tPm9wZW5fbXV0ZXgpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIF9fZXJyb3I7CiAJcmV0dXJuIGVycjsKQEAgLTE5MzAsOSArMTk0NCw5IEBACiAJc25kX2Fzc2VydChzdWJzdHJlYW0gIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAJcGNtID0gc3Vic3RyZWFtLT5wY207CiAJc25kX3BjbV9vc3Nfc3luYyhwY21fb3NzX2ZpbGUpOwotCWRvd24oJnBjbS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcGNtLT5vcGVuX211dGV4KTsKIAlzbmRfcGNtX29zc19yZWxlYXNlX2ZpbGUocGNtX29zc19maWxlKTsKLQl1cCgmcGNtLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJnBjbS0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcGNtLT5vcGVuX3dhaXQpOwogCW1vZHVsZV9wdXQocGNtLT5jYXJkLT5tb2R1bGUpOwogCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKHBjbS0+Y2FyZCwgZmlsZSk7CkBAIC0yMjQ2LDggKzIyNjAsMTAgQEAKIAkJaWYgKChlcnIgPSBzbmRfcGNtX29zc19jaGFuZ2VfcGFyYW1zKHN1YnN0cmVhbSkpIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQorI2lmZGVmIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TCiAJaWYgKHJ1bnRpbWUtPm9zcy5wbHVnaW5fZmlyc3QgIT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CisjZW5kaWYKIAogCWlmIChhcmVhLT52bV9wZ29mZiAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIyNzcsNyArMjI5Myw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fc3RyICpwc3RyID0gZW50cnktPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3BjbV9vc3Nfc2V0dXAgKnNldHVwID0gcHN0ci0+b3NzLnNldHVwX2xpc3Q7Ci0JZG93bigmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKKwltdXRleF9sb2NrKCZwc3RyLT5vc3Muc2V0dXBfbXV0ZXgpOwogCXdoaWxlIChzZXR1cCkgewogCQlzbmRfaXByaW50ZihidWZmZXIsICIlcyAldSAldSVzJXMlcyVzJXMlc1xuIiwKIAkJCSAgICBzZXR1cC0+dGFza19uYW1lLApAQCAtMjI5MSw3ICsyMzA3LDcgQEAKIAkJCSAgICBzZXR1cC0+bm9zaWxlbmNlID8gIiBuby1zaWxlbmNlIiA6ICIiKTsKIAkJc2V0dXAgPSBzZXR1cC0+bmV4dDsKIAl9Ci0JdXAoJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZwc3RyLT5vc3Muc2V0dXBfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfcGNtX29zc19wcm9jX2ZyZWVfc2V0dXBfbGlzdChzdHJ1Y3Qgc25kX3BjbV9zdHIgKiBwc3RyKQpAQCAtMjMyMSwxMiArMjMzNywxMiBAQAogCXN0cnVjdCBzbmRfcGNtX29zc19zZXR1cCAqc2V0dXAsICpzZXR1cDEsIHRlbXBsYXRlOwogCiAJd2hpbGUgKCFzbmRfaW5mb19nZXRfbGluZShidWZmZXIsIGxpbmUsIHNpemVvZihsaW5lKSkpIHsKLQkJZG93bigmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKIAkJbWVtc2V0KCZ0ZW1wbGF0ZSwgMCwgc2l6ZW9mKHRlbXBsYXRlKSk7CiAJCXB0ciA9IHNuZF9pbmZvX2dldF9zdHIodGFza19uYW1lLCBsaW5lLCBzaXplb2YodGFza19uYW1lKSk7CiAJCWlmICghc3RyY21wKHRhc2tfbmFtZSwgImNsZWFyIikgfHwgIXN0cmNtcCh0YXNrX25hbWUsICJlcmFzZSIpKSB7CiAJCQlzbmRfcGNtX29zc19wcm9jX2ZyZWVfc2V0dXBfbGlzdChwc3RyKTsKLQkJCXVwKCZwc3RyLT5vc3Muc2V0dXBfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZwc3RyLT5vc3Muc2V0dXBfbXV0ZXgpOwogCQkJY29udGludWU7CiAJCX0KIAkJZm9yIChzZXR1cCA9IHBzdHItPm9zcy5zZXR1cF9saXN0OyBzZXR1cDsgc2V0dXAgPSBzZXR1cC0+bmV4dCkgewpAQCAtMjM3OCw3ICsyMzk0LDcgQEAKIAkJfQogCQlpZiAoc2V0dXApCiAJCQkqc2V0dXAgPSB0ZW1wbGF0ZTsKLQkJdXAoJnBzdHItPm9zcy5zZXR1cF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uYyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uYwppbmRleCA3ZTg2NzY4OC4uMGU2N2RkMiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uYwpAQCAtMjUsNiArMjUsOSBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KKworI2lmZGVmIENPTkZJR19TTkRfUENNX09TU19QTFVHSU5TCisKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTM2LDI2ICszOSw2IEBACiAjZGVmaW5lIHNuZF9wY21fcGx1Z19maXJzdChwbHVnKSAoKHBsdWcpLT5ydW50aW1lLT5vc3MucGx1Z2luX2ZpcnN0KQogI2RlZmluZSBzbmRfcGNtX3BsdWdfbGFzdChwbHVnKSAoKHBsdWcpLT5ydW50aW1lLT5vc3MucGx1Z2luX2xhc3QpCiAKLXN0YXRpYyBpbnQgc25kX3BjbV9wbHVnaW5fc3JjX2NoYW5uZWxzX21hc2soc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nICpkc3Rfdm1hc2ssCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nICoqc3JjX3ZtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgKnZtYXNrID0gcGx1Z2luLT5zcmNfdm1hc2s7Ci0JYml0bWFwX2NvcHkodm1hc2ssIGRzdF92bWFzaywgcGx1Z2luLT5zcmNfZm9ybWF0LmNoYW5uZWxzKTsKLQkqc3JjX3ZtYXNrID0gdm1hc2s7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3BjbV9wbHVnaW5fZHN0X2NoYW5uZWxzX21hc2soc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nICpzcmNfdm1hc2ssCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nICoqZHN0X3ZtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgKnZtYXNrID0gcGx1Z2luLT5kc3Rfdm1hc2s7Ci0JYml0bWFwX2NvcHkodm1hc2ssIHNyY192bWFzaywgcGx1Z2luLT5kc3RfZm9ybWF0LmNoYW5uZWxzKTsKLQkqZHN0X3ZtYXNrID0gdm1hc2s7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiAgYmVjYXVzZSBzb21lIGNhcmRzIG1pZ2h0IGhhdmUgcmF0ZXMgInZlcnkgY2xvc2UiLCB3ZSBpZ25vcmUKICAqICBhbGwgInJlc2FtcGxpbmciIHJlcXVlc3RzIHdpdGhpbiArLTUlCkBAIC0xOTMsMTkgKzE3Niw3IEBACiAJCXNuZF9wY21fcGx1Z2luX2ZyZWUocGx1Z2luKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXBsdWdpbi0+c3JjX3ZtYXNrID0gYml0bWFwX2FsbG9jKHNyY19mb3JtYXQtPmNoYW5uZWxzKTsKLQlpZiAocGx1Z2luLT5zcmNfdm1hc2sgPT0gTlVMTCkgewotCQlzbmRfcGNtX3BsdWdpbl9mcmVlKHBsdWdpbik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlwbHVnaW4tPmRzdF92bWFzayA9IGJpdG1hcF9hbGxvYyhkc3RfZm9ybWF0LT5jaGFubmVscyk7Ci0JaWYgKHBsdWdpbi0+ZHN0X3ZtYXNrID09IE5VTEwpIHsKLQkJc25kX3BjbV9wbHVnaW5fZnJlZShwbHVnaW4pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJcGx1Z2luLT5jbGllbnRfY2hhbm5lbHMgPSBzbmRfcGNtX3BsdWdpbl9jbGllbnRfY2hhbm5lbHM7Ci0JcGx1Z2luLT5zcmNfY2hhbm5lbHNfbWFzayA9IHNuZF9wY21fcGx1Z2luX3NyY19jaGFubmVsc19tYXNrOwotCXBsdWdpbi0+ZHN0X2NoYW5uZWxzX21hc2sgPSBzbmRfcGNtX3BsdWdpbl9kc3RfY2hhbm5lbHNfbWFzazsKIAkqcmV0ID0gcGx1Z2luOwogCXJldHVybiAwOwogfQpAQCAtMjE4LDggKzE4OSw2IEBACiAJCXBsdWdpbi0+cHJpdmF0ZV9mcmVlKHBsdWdpbik7CiAJa2ZyZWUocGx1Z2luLT5idWZfY2hhbm5lbHMpOwogCXZmcmVlKHBsdWdpbi0+YnVmKTsKLQlrZnJlZShwbHVnaW4tPnNyY192bWFzayk7Ci0Ja2ZyZWUocGx1Z2luLT5kc3Rfdm1hc2spOwogCWtmcmVlKHBsdWdpbik7CiAJcmV0dXJuIDA7CiB9CkBAIC00MjksMjQgKzM5OCwxNCBAQAogCQkgZHN0Zm9ybWF0LmNoYW5uZWxzKTsKIAogCS8qIEZvcm1hdCBjaGFuZ2UgKGxpbmVhcml6YXRpb24pICovCi0JaWYgKChzcmNmb3JtYXQuZm9ybWF0ICE9IGRzdGZvcm1hdC5mb3JtYXQgfHwKLQkgICAgICFyYXRlX21hdGNoKHNyY2Zvcm1hdC5yYXRlLCBkc3Rmb3JtYXQucmF0ZSkgfHwKLQkgICAgIHNyY2Zvcm1hdC5jaGFubmVscyAhPSBkc3Rmb3JtYXQuY2hhbm5lbHMpICYmCi0JICAgICFzbmRfcGNtX2Zvcm1hdF9saW5lYXIoc3JjZm9ybWF0LmZvcm1hdCkpIHsKLQkJaWYgKHNuZF9wY21fZm9ybWF0X2xpbmVhcihkc3Rmb3JtYXQuZm9ybWF0KSkKLQkJCXRtcGZvcm1hdC5mb3JtYXQgPSBkc3Rmb3JtYXQuZm9ybWF0OwotCQllbHNlCi0JCQl0bXBmb3JtYXQuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMTY7Ci0JCXN3aXRjaCAoc3JjZm9ybWF0LmZvcm1hdCkgewotCQljYXNlIFNORFJWX1BDTV9GT1JNQVRfTVVfTEFXOgotCQkJZXJyID0gc25kX3BjbV9wbHVnaW5fYnVpbGRfbXVsYXcocGx1ZywKLQkJCQkJCQkgJnNyY2Zvcm1hdCwgJnRtcGZvcm1hdCwKLQkJCQkJCQkgJnBsdWdpbik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwlpZiAoISByYXRlX21hdGNoKHNyY2Zvcm1hdC5yYXRlLCBkc3Rmb3JtYXQucmF0ZSkgJiYKKwkgICAgISBzbmRfcGNtX2Zvcm1hdF9saW5lYXIoc3JjZm9ybWF0LmZvcm1hdCkpIHsKKwkJaWYgKHNyY2Zvcm1hdC5mb3JtYXQgIT0gU05EUlZfUENNX0ZPUk1BVF9NVV9MQVcpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlwZHByaW50ZigiZm9ybWF0IGNoYW5nZTogc3JjPSVpLCBkc3Q9JWkgcmV0dXJucyAlaVxuIiwgc3JjZm9ybWF0LmZvcm1hdCwgdG1wZm9ybWF0LmZvcm1hdCwgZXJyKTsKKwkJdG1wZm9ybWF0LmZvcm1hdCA9IFNORFJWX1BDTV9GT1JNQVRfUzE2OworCQllcnIgPSBzbmRfcGNtX3BsdWdpbl9idWlsZF9tdWxhdyhwbHVnLAorCQkJCQkJICZzcmNmb3JtYXQsICZ0bXBmb3JtYXQsCisJCQkJCQkgJnBsdWdpbik7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJZXJyID0gc25kX3BjbV9wbHVnaW5fYXBwZW5kKHBsdWdpbik7CkBAIC00NjAsMzUgKzQxOSwxMSBAQAogCiAJLyogY2hhbm5lbHMgcmVkdWN0aW9uICovCiAJaWYgKHNyY2Zvcm1hdC5jaGFubmVscyA+IGRzdGZvcm1hdC5jaGFubmVscykgewotCQlpbnQgc3YgPSBzcmNmb3JtYXQuY2hhbm5lbHM7Ci0JCWludCBkdiA9IGRzdGZvcm1hdC5jaGFubmVsczsKLQkJaW50ICp0dGFibGUgPSBrY2FsbG9jKGR2ICogc3YsIHNpemVvZigqdHRhYmxlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICh0dGFibGUgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotI2lmIDEKLQkJaWYgKHN2ID09IDIgJiYgZHYgPT0gMSkgewotCQkJdHRhYmxlWzBdID0gSEFMRjsKLQkJCXR0YWJsZVsxXSA9IEhBTEY7Ci0JCX0gZWxzZQotI2VuZGlmCi0JCXsKLQkJCWludCB2OwotCQkJZm9yICh2ID0gMDsgdiA8IGR2OyArK3YpCi0JCQkJdHRhYmxlW3YgKiBzdiArIHZdID0gRlVMTDsKLQkJfQogCQl0bXBmb3JtYXQuY2hhbm5lbHMgPSBkc3Rmb3JtYXQuY2hhbm5lbHM7Ci0JCWlmIChyYXRlX21hdGNoKHNyY2Zvcm1hdC5yYXRlLCBkc3Rmb3JtYXQucmF0ZSkgJiYKLQkJICAgIHNuZF9wY21fZm9ybWF0X2xpbmVhcihkc3Rmb3JtYXQuZm9ybWF0KSkKLQkJCXRtcGZvcm1hdC5mb3JtYXQgPSBkc3Rmb3JtYXQuZm9ybWF0OwotCQllcnIgPSBzbmRfcGNtX3BsdWdpbl9idWlsZF9yb3V0ZShwbHVnLAotCQkJCQkJICZzcmNmb3JtYXQsICZ0bXBmb3JtYXQsCi0JCQkJCQkgdHRhYmxlLCAmcGx1Z2luKTsKLQkJa2ZyZWUodHRhYmxlKTsKKwkJZXJyID0gc25kX3BjbV9wbHVnaW5fYnVpbGRfcm91dGUocGx1ZywgJnNyY2Zvcm1hdCwgJnRtcGZvcm1hdCwgJnBsdWdpbik7CiAJCXBkcHJpbnRmKCJjaGFubmVscyByZWR1Y3Rpb246IHNyYz0laSwgZHN0PSVpIHJldHVybnMgJWlcbiIsIHNyY2Zvcm1hdC5jaGFubmVscywgdG1wZm9ybWF0LmNoYW5uZWxzLCBlcnIpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3BjbV9wbHVnaW5fZnJlZShwbHVnaW4pOworCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCX0KIAkJZXJyID0gc25kX3BjbV9wbHVnaW5fYXBwZW5kKHBsdWdpbik7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfcGNtX3BsdWdpbl9mcmVlKHBsdWdpbik7CkBAIC01MDAsMTggKzQzNSwyOSBAQAogCiAJLyogcmF0ZSByZXNhbXBsaW5nICovCiAJaWYgKCFyYXRlX21hdGNoKHNyY2Zvcm1hdC5yYXRlLCBkc3Rmb3JtYXQucmF0ZSkpIHsKKwkJaWYgKHNyY2Zvcm1hdC5mb3JtYXQgIT0gU05EUlZfUENNX0ZPUk1BVF9TMTYpIHsKKwkJCS8qIGNvbnZlcnQgdG8gUzE2IGZvciByZXNhbXBsaW5nICovCisJCQl0bXBmb3JtYXQuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMTY7CisJCQllcnIgPSBzbmRfcGNtX3BsdWdpbl9idWlsZF9saW5lYXIocGx1ZywKKwkJCQkJCQkgICZzcmNmb3JtYXQsICZ0bXBmb3JtYXQsCisJCQkJCQkJICAmcGx1Z2luKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCQllcnIgPSBzbmRfcGNtX3BsdWdpbl9hcHBlbmQocGx1Z2luKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJc25kX3BjbV9wbHVnaW5fZnJlZShwbHVnaW4pOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQlzcmNmb3JtYXQgPSB0bXBmb3JtYXQ7CisJCQlzcmNfYWNjZXNzID0gZHN0X2FjY2VzczsKKwkJfQogCQl0bXBmb3JtYXQucmF0ZSA9IGRzdGZvcm1hdC5yYXRlOwotCQlpZiAoc3JjZm9ybWF0LmNoYW5uZWxzID09IGRzdGZvcm1hdC5jaGFubmVscyAmJgotCQkgICAgc25kX3BjbV9mb3JtYXRfbGluZWFyKGRzdGZvcm1hdC5mb3JtYXQpKQotCQkJdG1wZm9ybWF0LmZvcm1hdCA9IGRzdGZvcm1hdC5mb3JtYXQ7CiAgICAgICAgIAllcnIgPSBzbmRfcGNtX3BsdWdpbl9idWlsZF9yYXRlKHBsdWcsCiAgICAgICAgIAkJCQkJJnNyY2Zvcm1hdCwgJnRtcGZvcm1hdCwKIAkJCQkJCSZwbHVnaW4pOwogCQlwZHByaW50ZigicmF0ZSBkb3duIHJlc2FtcGxpbmc6IHNyYz0laSwgZHN0PSVpIHJldHVybnMgJWlcbiIsIHNyY2Zvcm1hdC5yYXRlLCB0bXBmb3JtYXQucmF0ZSwgZXJyKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wY21fcGx1Z2luX2ZyZWUocGx1Z2luKTsKKwkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwotCQl9ICAgICAgCQkJCQkgICAgCiAJCWVyciA9IHNuZF9wY21fcGx1Z2luX2FwcGVuZChwbHVnaW4pOwogCQlpZiAoZXJyIDwgMCkgewogCQkJc25kX3BjbV9wbHVnaW5fZnJlZShwbHVnaW4pOwpAQCAtNTIxLDU2ICs0NjcsMTEgQEAKIAkJc3JjX2FjY2VzcyA9IGRzdF9hY2Nlc3M7CiAgICAgICAgIH0KIAotCS8qIGNoYW5uZWxzIGV4dGVuc2lvbiAgKi8KLQlpZiAoc3JjZm9ybWF0LmNoYW5uZWxzIDwgZHN0Zm9ybWF0LmNoYW5uZWxzKSB7Ci0JCWludCBzdiA9IHNyY2Zvcm1hdC5jaGFubmVsczsKLQkJaW50IGR2ID0gZHN0Zm9ybWF0LmNoYW5uZWxzOwotCQlpbnQgKnR0YWJsZSA9IGtjYWxsb2MoZHYgKiBzdiwgc2l6ZW9mKCp0dGFibGUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHR0YWJsZSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0jaWYgMAotCQl7Ci0JCQlpbnQgdjsKLQkJCWZvciAodiA9IDA7IHYgPCBzdjsgKyt2KQotCQkJCXR0YWJsZVt2ICogc3YgKyB2XSA9IEZVTEw7Ci0JCX0KLSNlbHNlCi0JCXsKLQkJCS8qIFBsYXliYWNrIGlzIHNwcmVhZGVkIG9uIGFsbCBjaGFubmVscyAqLwotCQkJaW50IHZkLCB2czsKLQkJCWZvciAodmQgPSAwLCB2cyA9IDA7IHZkIDwgZHY7ICsrdmQpIHsKLQkJCQl0dGFibGVbdmQgKiBzdiArIHZzXSA9IEZVTEw7Ci0JCQkJdnMrKzsKLQkJCQlpZiAodnMgPT0gc3YpCi0JCQkJCXZzID0gMDsKLQkJCX0KLQkJfQotI2VuZGlmCi0JCXRtcGZvcm1hdC5jaGFubmVscyA9IGRzdGZvcm1hdC5jaGFubmVsczsKLQkJaWYgKHNuZF9wY21fZm9ybWF0X2xpbmVhcihkc3Rmb3JtYXQuZm9ybWF0KSkKLQkJCXRtcGZvcm1hdC5mb3JtYXQgPSBkc3Rmb3JtYXQuZm9ybWF0OwotCQllcnIgPSBzbmRfcGNtX3BsdWdpbl9idWlsZF9yb3V0ZShwbHVnLAotCQkJCQkJICZzcmNmb3JtYXQsICZ0bXBmb3JtYXQsCi0JCQkJCQkgdHRhYmxlLCAmcGx1Z2luKTsKLQkJa2ZyZWUodHRhYmxlKTsKLQkJcGRwcmludGYoImNoYW5uZWxzIGV4dGVuc2lvbjogc3JjPSVpLCBkc3Q9JWkgcmV0dXJucyAlaVxuIiwgc3JjZm9ybWF0LmNoYW5uZWxzLCB0bXBmb3JtYXQuY2hhbm5lbHMsIGVycik7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcGNtX3BsdWdpbl9mcmVlKHBsdWdpbik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9ICAgICAgCQkJCQkgICAgCi0JCWVyciA9IHNuZF9wY21fcGx1Z2luX2FwcGVuZChwbHVnaW4pOwotCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3BjbV9wbHVnaW5fZnJlZShwbHVnaW4pOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQlzcmNmb3JtYXQgPSB0bXBmb3JtYXQ7Ci0JCXNyY19hY2Nlc3MgPSBkc3RfYWNjZXNzOwotCX0KLQogCS8qIGZvcm1hdCBjaGFuZ2UgKi8KIAlpZiAoc3JjZm9ybWF0LmZvcm1hdCAhPSBkc3Rmb3JtYXQuZm9ybWF0KSB7CiAJCXRtcGZvcm1hdC5mb3JtYXQgPSBkc3Rmb3JtYXQuZm9ybWF0OwotCQlpZiAodG1wZm9ybWF0LmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX01VX0xBVykgeworCQlpZiAoc3JjZm9ybWF0LmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX01VX0xBVyB8fAorCQkgICAgdG1wZm9ybWF0LmZvcm1hdCA9PSBTTkRSVl9QQ01fRk9STUFUX01VX0xBVykgewogCQkJZXJyID0gc25kX3BjbV9wbHVnaW5fYnVpbGRfbXVsYXcocGx1ZywKIAkJCQkJCQkgJnNyY2Zvcm1hdCwgJnRtcGZvcm1hdCwKIAkJCQkJCQkgJnBsdWdpbik7CkBAIC01OTUsNiArNDk2LDIyIEBACiAJCXNyY19hY2Nlc3MgPSBkc3RfYWNjZXNzOwogCX0KIAorCS8qIGNoYW5uZWxzIGV4dGVuc2lvbiAqLworCWlmIChzcmNmb3JtYXQuY2hhbm5lbHMgPCBkc3Rmb3JtYXQuY2hhbm5lbHMpIHsKKwkJdG1wZm9ybWF0LmNoYW5uZWxzID0gZHN0Zm9ybWF0LmNoYW5uZWxzOworCQllcnIgPSBzbmRfcGNtX3BsdWdpbl9idWlsZF9yb3V0ZShwbHVnLCAmc3JjZm9ybWF0LCAmdG1wZm9ybWF0LCAmcGx1Z2luKTsKKwkJcGRwcmludGYoImNoYW5uZWxzIGV4dGVuc2lvbjogc3JjPSVpLCBkc3Q9JWkgcmV0dXJucyAlaVxuIiwgc3JjZm9ybWF0LmNoYW5uZWxzLCB0bXBmb3JtYXQuY2hhbm5lbHMsIGVycik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX3BjbV9wbHVnaW5fYXBwZW5kKHBsdWdpbik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlzbmRfcGNtX3BsdWdpbl9mcmVlKHBsdWdpbik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCXNyY2Zvcm1hdCA9IHRtcGZvcm1hdDsKKwkJc3JjX2FjY2VzcyA9IGRzdF9hY2Nlc3M7CisJfQorCiAJLyogZGUtaW50ZXJsZWF2ZSAqLwogCWlmIChzcmNfYWNjZXNzICE9IGRzdF9hY2Nlc3MpIHsKIAkJZXJyID0gc25kX3BjbV9wbHVnaW5fYnVpbGRfY29weShwbHVnLApAQCAtNjUwLDkyICs1NjcsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCBzbmRfcGNtX3BsdWdfcGxheWJhY2tfY2hhbm5lbHNfbWFzayhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsdWcsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpjbGllbnRfdm1hc2spCi17Ci0Jc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4gPSBzbmRfcGNtX3BsdWdfbGFzdChwbHVnKTsKLQlpZiAocGx1Z2luID09IE5VTEwpIHsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJaW50IHNjaGFubmVscyA9IHBsdWdpbi0+ZHN0X2Zvcm1hdC5jaGFubmVsczsKLQkJREVDTEFSRV9CSVRNQVAoYnMsIHNjaGFubmVscyk7Ci0JCXVuc2lnbmVkIGxvbmcgKnNyY21hc2s7Ci0JCXVuc2lnbmVkIGxvbmcgKmRzdG1hc2sgPSBiczsKLQkJaW50IGVycjsKLQkJYml0bWFwX2ZpbGwoZHN0bWFzaywgc2NoYW5uZWxzKTsKLQotCQl3aGlsZSAoMSkgewotCQkJZXJyID0gcGx1Z2luLT5zcmNfY2hhbm5lbHNfbWFzayhwbHVnaW4sIGRzdG1hc2ssICZzcmNtYXNrKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCQlkc3RtYXNrID0gc3JjbWFzazsKLQkJCWlmIChwbHVnaW4tPnByZXYgPT0gTlVMTCkKLQkJCQlicmVhazsKLQkJCXBsdWdpbiA9IHBsdWdpbi0+cHJldjsKLQkJfQotCQliaXRtYXBfYW5kKGNsaWVudF92bWFzaywgY2xpZW50X3ZtYXNrLCBkc3RtYXNrLCBwbHVnaW4tPnNyY19mb3JtYXQuY2hhbm5lbHMpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3BjbV9wbHVnX3BsYXliYWNrX2Rpc2FibGVfdXNlbGVzc19jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsdWcsCi0JCQkJCQkJICBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqc3JjX2NoYW5uZWxzKQotewotCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luID0gc25kX3BjbV9wbHVnX2ZpcnN0KHBsdWcpOwotCXVuc2lnbmVkIGludCBuY2hhbm5lbHMgPSBwbHVnaW4tPnNyY19mb3JtYXQuY2hhbm5lbHM7Ci0JREVDTEFSRV9CSVRNQVAoYnMsIG5jaGFubmVscyk7Ci0JdW5zaWduZWQgbG9uZyAqc3JjbWFzayA9IGJzOwotCWludCBlcnI7Ci0JdW5zaWduZWQgaW50IGNoYW5uZWw7Ci0JZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IG5jaGFubmVsczsgY2hhbm5lbCsrKSB7Ci0JCWlmIChzcmNfY2hhbm5lbHNbY2hhbm5lbF0uZW5hYmxlZCkKLQkJCXNldF9iaXQoY2hhbm5lbCwgc3JjbWFzayk7Ci0JCWVsc2UKLQkJCWNsZWFyX2JpdChjaGFubmVsLCBzcmNtYXNrKTsKLQl9Ci0JZXJyID0gc25kX3BjbV9wbHVnX3BsYXliYWNrX2NoYW5uZWxzX21hc2socGx1Zywgc3JjbWFzayk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IG5jaGFubmVsczsgY2hhbm5lbCsrKSB7Ci0JCWlmICghdGVzdF9iaXQoY2hhbm5lbCwgc3JjbWFzaykpCi0JCQlzcmNfY2hhbm5lbHNbY2hhbm5lbF0uZW5hYmxlZCA9IDA7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF9wY21fcGx1Z19jYXB0dXJlX2Rpc2FibGVfdXNlbGVzc19jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsdWcsCi0JCQkJCQkJIHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpzcmNfY2hhbm5lbHMsCi0JCQkJCQkJIHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpjbGllbnRfY2hhbm5lbHMpCi17Ci0Jc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4gPSBzbmRfcGNtX3BsdWdfbGFzdChwbHVnKTsKLQl1bnNpZ25lZCBpbnQgbmNoYW5uZWxzID0gcGx1Z2luLT5kc3RfZm9ybWF0LmNoYW5uZWxzOwotCURFQ0xBUkVfQklUTUFQKGJzLCBuY2hhbm5lbHMpOwotCXVuc2lnbmVkIGxvbmcgKmRzdG1hc2sgPSBiczsKLQl1bnNpZ25lZCBsb25nICpzcmNtYXNrOwotCWludCBlcnI7Ci0JdW5zaWduZWQgaW50IGNoYW5uZWw7Ci0JZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IG5jaGFubmVsczsgY2hhbm5lbCsrKSB7Ci0JCWlmIChjbGllbnRfY2hhbm5lbHNbY2hhbm5lbF0uZW5hYmxlZCkKLQkJCXNldF9iaXQoY2hhbm5lbCwgZHN0bWFzayk7Ci0JCWVsc2UKLQkJCWNsZWFyX2JpdChjaGFubmVsLCBkc3RtYXNrKTsKLQl9Ci0Jd2hpbGUgKHBsdWdpbikgewotCQllcnIgPSBwbHVnaW4tPnNyY19jaGFubmVsc19tYXNrKHBsdWdpbiwgZHN0bWFzaywgJnNyY21hc2spOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWRzdG1hc2sgPSBzcmNtYXNrOwotCQlwbHVnaW4gPSBwbHVnaW4tPnByZXY7Ci0JfQotCXBsdWdpbiA9IHNuZF9wY21fcGx1Z19maXJzdChwbHVnKTsKLQluY2hhbm5lbHMgPSBwbHVnaW4tPnNyY19mb3JtYXQuY2hhbm5lbHM7Ci0JZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IG5jaGFubmVsczsgY2hhbm5lbCsrKSB7Ci0JCWlmICghdGVzdF9iaXQoY2hhbm5lbCwgZHN0bWFzaykpCi0JCQlzcmNfY2hhbm5lbHNbY2hhbm5lbF0uZW5hYmxlZCA9IDA7Ci0JfQotCXJldHVybiAwOwotfQotCiBzbmRfcGNtX3NmcmFtZXNfdCBzbmRfcGNtX3BsdWdfd3JpdGVfdHJhbnNmZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwbHVnLCBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqc3JjX2NoYW5uZWxzLCBzbmRfcGNtX3VmcmFtZXNfdCBzaXplKQogewogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luLCAqbmV4dDsKQEAgLTc0Myw5ICs1NzQsNiBAQAogCWludCBlcnI7CiAJc25kX3BjbV9zZnJhbWVzX3QgZnJhbWVzID0gc2l6ZTsKIAotCWlmICgoZXJyID0gc25kX3BjbV9wbHVnX3BsYXliYWNrX2Rpc2FibGVfdXNlbGVzc19jaGFubmVscyhwbHVnLCBzcmNfY2hhbm5lbHMpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0JCiAJcGx1Z2luID0gc25kX3BjbV9wbHVnX2ZpcnN0KHBsdWcpOwogCXdoaWxlIChwbHVnaW4gJiYgZnJhbWVzID4gMCkgewogCQlpZiAoKG5leHQgPSBwbHVnaW4tPm5leHQpICE9IE5VTEwpIHsKQEAgLTc5MCwxMCArNjE4LDYgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQkJfQogCQkJZnJhbWVzID0gZXJyOwotCQkJaWYgKCFwbHVnaW4tPnByZXYpIHsKLQkJCQlpZiAoKGVyciA9IHNuZF9wY21fcGx1Z19jYXB0dXJlX2Rpc2FibGVfdXNlbGVzc19jaGFubmVscyhwbHVnLCBkc3RfY2hhbm5lbHMsIGRzdF9jaGFubmVsc19maW5hbCkpIDwgMCkKLQkJCQkJcmV0dXJuIGVycjsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCWRzdF9jaGFubmVscyA9IGRzdF9jaGFubmVsc19maW5hbDsKIAkJfQpAQCAtOTE2LDMgKzc0MCw1IEBACiAJfQogCXJldHVybiAwOwogfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaCBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaAppbmRleCAyOTE5OGRhLi4zYmU5MWIzIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKKysrIGIvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCkBAIC0yMiwxMiArMjIsNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvYml0bWFwLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqYml0bWFwX2FsbG9jKHVuc2lnbmVkIGludCBuYml0cykKLXsKLQlyZXR1cm4ga21hbGxvYyhCSVRTX1RPX0xPTkdTKG5iaXRzKSwgR0ZQX0tFUk5FTCk7Ci19CisjaWZkZWYgQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlMKIAogI2RlZmluZSBzbmRfcGNtX3BsdWdfc3RyZWFtKHBsdWcpICgocGx1ZyktPnN0cmVhbSkKIApAQCAtNjksMTIgKzY0LDYgQEAKIAlzbmRfcGNtX3NmcmFtZXNfdCAoKmNsaWVudF9jaGFubmVscykoc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCiAJCQkJCSAgICAgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLAogCQkJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICoqY2hhbm5lbHMpOwotCWludCAoKnNyY19jaGFubmVsc19tYXNrKShzdHJ1Y3Qgc25kX3BjbV9wbHVnaW4gKnBsdWdpbiwKLQkJCQkgdW5zaWduZWQgbG9uZyAqZHN0X3ZtYXNrLAotCQkJCSB1bnNpZ25lZCBsb25nICoqc3JjX3ZtYXNrKTsKLQlpbnQgKCpkc3RfY2hhbm5lbHNfbWFzaykoc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCi0JCQkJIHVuc2lnbmVkIGxvbmcgKnNyY192bWFzaywKLQkJCQkgdW5zaWduZWQgbG9uZyAqKmRzdF92bWFzayk7CiAJc25kX3BjbV9zZnJhbWVzX3QgKCp0cmFuc2Zlcikoc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKnNyY19jaGFubmVscywKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqZHN0X2NoYW5uZWxzLApAQCAtOTAsOCArNzksNiBAQAogCWNoYXIgKmJ1ZjsKIAlzbmRfcGNtX3VmcmFtZXNfdCBidWZfZnJhbWVzOwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpidWZfY2hhbm5lbHM7Ci0JdW5zaWduZWQgbG9uZyAqc3JjX3ZtYXNrOwotCXVuc2lnbmVkIGxvbmcgKmRzdF92bWFzazsKIAljaGFyIGV4dHJhX2RhdGFbMF07CiB9OwogCkBAIC0xMjgsNyArMTE1LDYgQEAKIGludCBzbmRfcGNtX3BsdWdpbl9idWlsZF9yb3V0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmhhbmRsZSwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fZm9ybWF0ICpzcmNfZm9ybWF0LAogCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9mb3JtYXQgKmRzdF9mb3JtYXQsCi0JCQkgICAgICAgaW50ICp0dGFibGUsCiAJCSAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqKnJfcGx1Z2luKTsKIGludCBzbmRfcGNtX3BsdWdpbl9idWlsZF9jb3B5KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqaGFuZGxlLAogCQkJICAgICAgc3RydWN0IHNuZF9wY21fcGx1Z2luX2Zvcm1hdCAqc3JjX2Zvcm1hdCwKQEAgLTE4MSwxNSArMTY3LDEzIEBACiAJCQkJICAgICB2b2lkICoqYnVmcywgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLAogCQkJCSAgICAgaW50IGluX2tlcm5lbCk7CiAKLSNkZWZpbmUgUk9VVEVfUExVR0lOX1JFU09MVVRJT04gMTYKKyNlbHNlCiAKLWludCBnZXRwdXRfaW5kZXgoaW50IGZvcm1hdCk7Ci1pbnQgY29weV9pbmRleChpbnQgZm9ybWF0KTsKLWludCBjb252X2luZGV4KGludCBzcmNfZm9ybWF0LCBpbnQgZHN0X2Zvcm1hdCk7CitzdGF0aWMgaW5saW5lIHNuZF9wY21fc2ZyYW1lc190IHNuZF9wY21fcGx1Z19jbGllbnRfc2l6ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmhhbmRsZSwgc25kX3BjbV91ZnJhbWVzX3QgZHJ2X3NpemUpIHsgcmV0dXJuIGRydl9zaXplOyB9CitzdGF0aWMgaW5saW5lIHNuZF9wY21fc2ZyYW1lc190IHNuZF9wY21fcGx1Z19zbGF2ZV9zaXplKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqaGFuZGxlLCBzbmRfcGNtX3VmcmFtZXNfdCBjbHRfc2l6ZSkgeyByZXR1cm4gY2x0X3NpemU7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fcGx1Z19zbGF2ZV9mb3JtYXQoaW50IGZvcm1hdCwgc3RydWN0IHNuZF9tYXNrICpmb3JtYXRfbWFzaykgeyByZXR1cm4gZm9ybWF0OyB9CiAKLXZvaWQgemVyb19jaGFubmVsKHN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luLAotCQkgIGNvbnN0IHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpkc3RfY2hhbm5lbCwKLQkJICBzaXplX3Qgc2FtcGxlcyk7CisjZW5kaWYKIAogI2lmZGVmIFBMVUdJTl9ERUJVRwogI2RlZmluZSBwZHByaW50ZiggZm10LCBhcmdzLi4uICkgcHJpbnRrKCAicGx1Z2luOiAiIGZtdCwgIyNhcmdzKQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvcGx1Z2luX29wcy5oIGIvc291bmQvY29yZS9vc3MvcGx1Z2luX29wcy5oCmluZGV4IDA2MDdlOTUuLjFmNWJkZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BsdWdpbl9vcHMuaAorKysgYi9zb3VuZC9jb3JlL29zcy9wbHVnaW5fb3BzLmgKQEAgLTM2MiwxNzIgKzM2Miw2IEBACiB9CiAjZW5kaWYKIAotI2lmIDAKLSNpZmRlZiBHRVQzMl9MQUJFTFMKLS8qIHNyY193aWQgc3JjX2VuZHN3YXAgdW5zaWduZWQgKi8KLXN0YXRpYyB2b2lkICpnZXQzMl9sYWJlbHNbNCAqIDIgKiAyXSA9IHsKLQkmJmdldDMyX3h4eDFfMTAwMCwJIC8qICA4aCAtPiAzMmggKi8KLQkmJmdldDMyX3h4eDFfOTAwMCwJIC8qICA4aCBePiAzMmggKi8KLQkmJmdldDMyX3h4eDFfMTAwMCwJIC8qICA4cyAtPiAzMmggKi8KLQkmJmdldDMyX3h4eDFfOTAwMCwJIC8qICA4cyBePiAzMmggKi8KLQkmJmdldDMyX3h4MTJfMTIwMCwJIC8qIDE2aCAtPiAzMmggKi8KLQkmJmdldDMyX3h4MTJfOTIwMCwJIC8qIDE2aCBePiAzMmggKi8KLQkmJmdldDMyX3h4MTJfMjEwMCwJIC8qIDE2cyAtPiAzMmggKi8KLQkmJmdldDMyX3h4MTJfQTEwMCwJIC8qIDE2cyBePiAzMmggKi8KLQkmJmdldDMyX3gxMjNfMTIzMCwJIC8qIDI0aCAtPiAzMmggKi8KLQkmJmdldDMyX3gxMjNfOTIzMCwJIC8qIDI0aCBePiAzMmggKi8KLQkmJmdldDMyXzEyM3hfMzIxMCwJIC8qIDI0cyAtPiAzMmggKi8KLQkmJmdldDMyXzEyM3hfQjIxMCwJIC8qIDI0cyBePiAzMmggKi8KLQkmJmdldDMyXzEyMzRfMTIzNCwJIC8qIDMyaCAtPiAzMmggKi8KLQkmJmdldDMyXzEyMzRfOTIzNCwJIC8qIDMyaCBePiAzMmggKi8KLQkmJmdldDMyXzEyMzRfNDMyMSwJIC8qIDMycyAtPiAzMmggKi8KLQkmJmdldDMyXzEyMzRfQzMyMSwJIC8qIDMycyBePiAzMmggKi8KLX07Ci0jZW5kaWYKLQotI2lmZGVmIEdFVDMyX0VORAotd2hpbGUgKDApIHsKLWdldDMyX3h4eDFfMTAwMDogc2FtcGxlID0gKHVfaW50MzJfdClhc191OChzcmMpIDw8IDI0OyBnb3RvIEdFVDMyX0VORDsKLWdldDMyX3h4eDFfOTAwMDogc2FtcGxlID0gKHVfaW50MzJfdCkoYXNfdTgoc3JjKSBeIDB4ODApIDw8IDI0OyBnb3RvIEdFVDMyX0VORDsKLWdldDMyX3h4MTJfMTIwMDogc2FtcGxlID0gKHVfaW50MzJfdClhc191MTYoc3JjKSA8PCAxNjsgZ290byBHRVQzMl9FTkQ7Ci1nZXQzMl94eDEyXzkyMDA6IHNhbXBsZSA9ICh1X2ludDMyX3QpKGFzX3UxNihzcmMpIF4gMHg4MDAwKSA8PCAxNjsgZ290byBHRVQzMl9FTkQ7Ci1nZXQzMl94eDEyXzIxMDA6IHNhbXBsZSA9ICh1X2ludDMyX3Qpc3dhYjE2KGFzX3UxNihzcmMpKSA8PCAxNjsgZ290byBHRVQzMl9FTkQ7Ci1nZXQzMl94eDEyX0ExMDA6IHNhbXBsZSA9ICh1X2ludDMyX3Qpc3dhYjE2KGFzX3UxNihzcmMpIF4gMHg4MCkgPDwgMTY7IGdvdG8gR0VUMzJfRU5EOwotZ2V0MzJfeDEyM18xMjMwOiBzYW1wbGUgPSBhc191MzIoc3JjKSA8PCA4OyBnb3RvIEdFVDMyX0VORDsKLWdldDMyX3gxMjNfOTIzMDogc2FtcGxlID0gKGFzX3UzMihzcmMpIDw8IDgpIF4gMHg4MDAwMDAwMDsgZ290byBHRVQzMl9FTkQ7Ci1nZXQzMl8xMjN4XzMyMTA6IHNhbXBsZSA9IHN3YWIzMihhc191MzIoc3JjKSA+PiA4KTsgZ290byBHRVQzMl9FTkQ7Ci1nZXQzMl8xMjN4X0IyMTA6IHNhbXBsZSA9IHN3YWIzMigoYXNfdTMyKHNyYykgPj4gOCkgXiAweDgwKTsgZ290byBHRVQzMl9FTkQ7Ci1nZXQzMl8xMjM0XzEyMzQ6IHNhbXBsZSA9IGFzX3UzMihzcmMpOyBnb3RvIEdFVDMyX0VORDsKLWdldDMyXzEyMzRfOTIzNDogc2FtcGxlID0gYXNfdTMyKHNyYykgXiAweDgwMDAwMDAwOyBnb3RvIEdFVDMyX0VORDsKLWdldDMyXzEyMzRfNDMyMTogc2FtcGxlID0gc3dhYjMyKGFzX3UzMihzcmMpKTsgZ290byBHRVQzMl9FTkQ7Ci1nZXQzMl8xMjM0X0MzMjE6IHNhbXBsZSA9IHN3YWIzMihhc191MzIoc3JjKSBeIDB4ODApOyBnb3RvIEdFVDMyX0VORDsKLX0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBQVVRfVTMyX0xBQkVMUwotLyogZHN0X3dpZCBkc3RfZW5kc3dhcCB1bnNpZ25lZCAqLwotc3RhdGljIHZvaWQgKnB1dF91MzJfbGFiZWxzWzQgKiAyICogMl0gPSB7Ci0JJiZwdXRfdTMyXzEyMzRfeHh4OSwJIC8qIHUzMmggLT4gIHM4aCAqLwotCSYmcHV0X3UzMl8xMjM0X3h4eDEsCSAvKiB1MzJoIC0+ICB1OGggKi8KLQkmJnB1dF91MzJfMTIzNF94eHg5LAkgLyogdTMyaCAtPiAgczhzICovCi0JJiZwdXRfdTMyXzEyMzRfeHh4MSwJIC8qIHUzMmggLT4gIHU4cyAqLwotCSYmcHV0X3UzMl8xMjM0X3h4OTIsCSAvKiB1MzJoIC0+IHMxNmggKi8KLQkmJnB1dF91MzJfMTIzNF94eDEyLAkgLyogdTMyaCAtPiB1MTZoICovCi0JJiZwdXRfdTMyXzEyMzRfeHgyOSwJIC8qIHUzMmggLT4gczE2cyAqLwotCSYmcHV0X3UzMl8xMjM0X3h4MjEsCSAvKiB1MzJoIC0+IHUxNnMgKi8KLQkmJnB1dF91MzJfMTIzNF94OTIzLAkgLyogdTMyaCAtPiBzMjRoICovCi0JJiZwdXRfdTMyXzEyMzRfeDEyMywJIC8qIHUzMmggLT4gdTI0aCAqLwotCSYmcHV0X3UzMl8xMjM0XzMyOXgsCSAvKiB1MzJoIC0+IHMyNHMgKi8KLQkmJnB1dF91MzJfMTIzNF8zMjF4LAkgLyogdTMyaCAtPiB1MjRzICovCi0JJiZwdXRfdTMyXzEyMzRfOTIzNCwJIC8qIHUzMmggLT4gczMyaCAqLwotCSYmcHV0X3UzMl8xMjM0XzEyMzQsCSAvKiB1MzJoIC0+IHUzMmggKi8KLQkmJnB1dF91MzJfMTIzNF80MzI5LAkgLyogdTMyaCAtPiBzMzJzICovCi0JJiZwdXRfdTMyXzEyMzRfNDMyMSwJIC8qIHUzMmggLT4gdTMycyAqLwotfTsKLSNlbmRpZgotCi0jaWZkZWYgUFVUX1UzMl9FTkQKLXdoaWxlICgwKSB7Ci1wdXRfdTMyXzEyMzRfeHh4MTogYXNfdTgoZHN0KSA9IHNhbXBsZSA+PiAyNDsgZ290byBQVVRfVTMyX0VORDsKLXB1dF91MzJfMTIzNF94eHg5OiBhc191OChkc3QpID0gKHNhbXBsZSA+PiAyNCkgXiAweDgwOyBnb3RvIFBVVF9VMzJfRU5EOwotcHV0X3UzMl8xMjM0X3h4MTI6IGFzX3UxNihkc3QpID0gc2FtcGxlID4+IDE2OyBnb3RvIFBVVF9VMzJfRU5EOwotcHV0X3UzMl8xMjM0X3h4OTI6IGFzX3UxNihkc3QpID0gKHNhbXBsZSA+PiAxNikgXiAweDgwMDA7IGdvdG8gUFVUX1UzMl9FTkQ7Ci1wdXRfdTMyXzEyMzRfeHgyMTogYXNfdTE2KGRzdCkgPSBzd2FiMTYoc2FtcGxlID4+IDE2KTsgZ290byBQVVRfVTMyX0VORDsKLXB1dF91MzJfMTIzNF94eDI5OiBhc191MTYoZHN0KSA9IHN3YWIxNihzYW1wbGUgPj4gMTYpIF4gMHg4MDsgZ290byBQVVRfVTMyX0VORDsKLXB1dF91MzJfMTIzNF94MTIzOiBhc191MzIoZHN0KSA9IHNhbXBsZSA+PiA4OyBnb3RvIFBVVF9VMzJfRU5EOwotcHV0X3UzMl8xMjM0X3g5MjM6IGFzX3UzMihkc3QpID0gKHNhbXBsZSA+PiA4KSBeIDB4ODAwMDAwOyBnb3RvIFBVVF9VMzJfRU5EOwotcHV0X3UzMl8xMjM0XzMyMXg6IGFzX3UzMihkc3QpID0gc3dhYjMyKHNhbXBsZSkgPDwgODsgZ290byBQVVRfVTMyX0VORDsKLXB1dF91MzJfMTIzNF8zMjl4OiBhc191MzIoZHN0KSA9IChzd2FiMzIoc2FtcGxlKSBeIDB4ODApIDw8IDg7IGdvdG8gUFVUX1UzMl9FTkQ7Ci1wdXRfdTMyXzEyMzRfMTIzNDogYXNfdTMyKGRzdCkgPSBzYW1wbGU7IGdvdG8gUFVUX1UzMl9FTkQ7Ci1wdXRfdTMyXzEyMzRfOTIzNDogYXNfdTMyKGRzdCkgPSBzYW1wbGUgXiAweDgwMDAwMDAwOyBnb3RvIFBVVF9VMzJfRU5EOwotcHV0X3UzMl8xMjM0XzQzMjE6IGFzX3UzMihkc3QpID0gc3dhYjMyKHNhbXBsZSk7IGdvdG8gUFVUX1UzMl9FTkQ7Ci1wdXRfdTMyXzEyMzRfNDMyOTogYXNfdTMyKGRzdCkgPSBzd2FiMzIoc2FtcGxlKSBeIDB4ODA7IGdvdG8gUFVUX1UzMl9FTkQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIEdFVF9VX0xBQkVMUwotLyogd2lkdGggZW5kc3dhcCB1bnNpZ25lZCovCi1zdGF0aWMgdm9pZCAqZ2V0X3VfbGFiZWxzWzQgKiAyICogMl0gPSB7Ci0JJiZnZXRfdV9zOCwJLyogczggIC0+ICB1OCAgKi8KLQkmJmdldF91X3U4LAkvKiB1OCAgLT4gIHU4ICAqLwotCSYmZ2V0X3VfczgsCS8qIHM4ICAtPiAgdTggICovCi0JJiZnZXRfdV91OCwJLyogdTggIC0+ICB1OCAgKi8KLQkmJmdldF91X3MxNmgsCS8qIHMxNmggLT4gdTE2aCAqLwotCSYmZ2V0X3VfdTE2aCwJLyogdTE2aCAtPiB1MTZoICovCi0JJiZnZXRfdV9zMTZzLAkvKiBzMTZzIC0+IHUxNmggKi8KLQkmJmdldF91X3UxNnMsCS8qIHUxNnMgLT4gdTE2aCAqLwotCSYmZ2V0X3VfczI0aCwJLyogczI0aCAtPiB1MzJoICovCi0JJiZnZXRfdV91MjRoLAkvKiB1MjRoIC0+IHUzMmggKi8KLQkmJmdldF91X3MyNHMsCS8qIHMyNHMgLT4gdTMyaCAqLwotCSYmZ2V0X3VfdTI0cywJLyogdTI0cyAtPiB1MzJoICovCi0JJiZnZXRfdV9zMzJoLAkvKiBzMzJoIC0+IHUzMmggKi8KLQkmJmdldF91X3UzMmgsCS8qIHUzMmggLT4gdTMyaCAqLwotCSYmZ2V0X3VfczMycywJLyogczMycyAtPiB1MzJoICovCi0JJiZnZXRfdV91MzJzLAkvKiB1MzJzIC0+IHUzMmggKi8KLX07Ci0jZW5kaWYKLQotI2lmZGVmIEdFVF9VX0VORAotd2hpbGUgKDApIHsKLWdldF91X3M4OiBzYW1wbGUgPSBhc191OChzcmMpIF4gMHg4MDsgZ290byBHRVRfVV9FTkQ7Ci1nZXRfdV91ODogc2FtcGxlID0gYXNfdTgoc3JjKTsgZ290byBHRVRfVV9FTkQ7Ci1nZXRfdV9zMTZoOiBzYW1wbGUgPSBhc191MTYoc3JjKSBeIDB4ODAwMDsgZ290byBHRVRfVV9FTkQ7Ci1nZXRfdV91MTZoOiBzYW1wbGUgPSBhc191MTYoc3JjKTsgZ290byBHRVRfVV9FTkQ7Ci1nZXRfdV9zMTZzOiBzYW1wbGUgPSBzd2FiMTYoYXNfdTE2KHNyYykgXiAweDgwKTsgZ290byBHRVRfVV9FTkQ7Ci1nZXRfdV91MTZzOiBzYW1wbGUgPSBzd2FiMTYoYXNfdTE2KHNyYykpOyBnb3RvIEdFVF9VX0VORDsKLWdldF91X3MyNGg6IHNhbXBsZSA9IChhc191MzIoc3JjKSBeIDB4ODAwMDAwKTsgZ290byBHRVRfVV9FTkQ7Ci1nZXRfdV91MjRoOiBzYW1wbGUgPSBhc191MzIoc3JjKTsgZ290byBHRVRfVV9FTkQ7Ci1nZXRfdV9zMjRzOiBzYW1wbGUgPSBzd2FiMzIoYXNfdTMyKHNyYykgXiAweDgwMDAwMCk7IGdvdG8gR0VUX1VfRU5EOwotZ2V0X3VfdTI0czogc2FtcGxlID0gc3dhYjMyKGFzX3UzMihzcmMpKTsgZ290byBHRVRfVV9FTkQ7Ci1nZXRfdV9zMzJoOiBzYW1wbGUgPSBhc191MzIoc3JjKSBeIDB4ODAwMDAwMDA7IGdvdG8gR0VUX1VfRU5EOwotZ2V0X3VfdTMyaDogc2FtcGxlID0gYXNfdTMyKHNyYyk7IGdvdG8gR0VUX1VfRU5EOwotZ2V0X3VfczMyczogc2FtcGxlID0gc3dhYjMyKGFzX3UzMihzcmMpIF4gMHg4MCk7IGdvdG8gR0VUX1VfRU5EOwotZ2V0X3VfdTMyczogc2FtcGxlID0gc3dhYjMyKGFzX3UzMihzcmMpKTsgZ290byBHRVRfVV9FTkQ7Ci19Ci0jZW5kaWYKLQotI2lmIDAKLSNpZmRlZiBQVVRfTEFCRUxTCi0vKiB3aWR0aCBlbmRzd2FwIHVuc2lnbmVkICovCi1zdGF0aWMgdm9pZCAqcHV0X2xhYmVsc1s0ICogMiAqIDJdID0gewotCSYmcHV0X3M4LAkvKiBzOCAgLT4gIHM4ICAqLwotCSYmcHV0X3U4LAkvKiB1OCAgLT4gIHM4ICAqLwotCSYmcHV0X3M4LAkvKiBzOCAgLT4gIHM4ICAqLwotCSYmcHV0X3U4LAkvKiB1OCAgLT4gIHM4ICAqLwotCSYmcHV0X3MxNmgsCS8qIHMxNmggLT4gczE2aCAqLwotCSYmcHV0X3UxNmgsCS8qIHUxNmggLT4gczE2aCAqLwotCSYmcHV0X3MxNnMsCS8qIHMxNnMgLT4gczE2aCAqLwotCSYmcHV0X3UxNnMsCS8qIHUxNnMgLT4gczE2aCAqLwotCSYmcHV0X3MyNGgsCS8qIHMyNGggLT4gczMyaCAqLwotCSYmcHV0X3UyNGgsCS8qIHUyNGggLT4gczMyaCAqLwotCSYmcHV0X3MyNHMsCS8qIHMyNHMgLT4gczMyaCAqLwotCSYmcHV0X3UyNHMsCS8qIHUyNHMgLT4gczMyaCAqLwotCSYmcHV0X3MzMmgsCS8qIHMzMmggLT4gczMyaCAqLwotCSYmcHV0X3UzMmgsCS8qIHUzMmggLT4gczMyaCAqLwotCSYmcHV0X3MzMnMsCS8qIHMzMnMgLT4gczMyaCAqLwotCSYmcHV0X3UzMnMsCS8qIHUzMnMgLT4gczMyaCAqLwotfTsKLSNlbmRpZgotCi0jaWZkZWYgUFVUX0VORAotcHV0X3M4OiBhc19zOChkc3QpID0gc2FtcGxlOyBnb3RvIFBVVF9FTkQ7Ci1wdXRfdTg6IGFzX3U4KGRzdCkgPSBzYW1wbGUgXiAweDgwOyBnb3RvIFBVVF9FTkQ7Ci1wdXRfczE2aDogYXNfczE2KGRzdCkgPSBzYW1wbGU7IGdvdG8gUFVUX0VORDsKLXB1dF91MTZoOiBhc191MTYoZHN0KSA9IHNhbXBsZSBeIDB4ODAwMDsgZ290byBQVVRfRU5EOwotcHV0X3MxNnM6IGFzX3MxNihkc3QpID0gc3dhYjE2KHNhbXBsZSk7IGdvdG8gUFVUX0VORDsKLXB1dF91MTZzOiBhc191MTYoZHN0KSA9IHN3YWIxNihzYW1wbGUgXiAweDgwKTsgZ290byBQVVRfRU5EOwotcHV0X3MyNGg6IGFzX3MyNChkc3QpID0gc2FtcGxlICYgMHhmZmZmZmY7IGdvdG8gUFVUX0VORDsKLXB1dF91MjRoOiBhc191MjQoZHN0KSA9IHNhbXBsZSBeIDB4ODAwMDAwMDA7IGdvdG8gUFVUX0VORDsKLXB1dF9zMjRzOiBhc19zMjQoZHN0KSA9IHN3YWIzMihzYW1wbGUgJiAweGZmZmZmZik7IGdvdG8gUFVUX0VORDsKLXB1dF91MjRzOiBhc191MjQoZHN0KSA9IHN3YWIzMihzYW1wbGUgXiAweDgwKTsgZ290byBQVVRfRU5EOwotcHV0X3MzMmg6IGFzX3MzMihkc3QpID0gc2FtcGxlOyBnb3RvIFBVVF9FTkQ7Ci1wdXRfdTMyaDogYXNfdTMyKGRzdCkgPSBzYW1wbGUgXiAweDgwMDAwMDAwOyBnb3RvIFBVVF9FTkQ7Ci1wdXRfczMyczogYXNfczMyKGRzdCkgPSBzd2FiMzIoc2FtcGxlKTsgZ290byBQVVRfRU5EOwotcHV0X3UzMnM6IGFzX3UzMihkc3QpID0gc3dhYjMyKHNhbXBsZSBeIDB4ODApOyBnb3RvIFBVVF9FTkQ7Ci0jZW5kaWYKLSNlbmRpZgotCiAjdW5kZWYgYXNfdTgKICN1bmRlZiBhc191MTYKICN1bmRlZiBhc191MzIKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3JhdGUuYyBiL3NvdW5kL2NvcmUvb3NzL3JhdGUuYwppbmRleCA0ODU0Y2VmLi4xOGQ4YTBmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9yYXRlLmMKKysrIGIvc291bmQvY29yZS9vc3MvcmF0ZS5jCkBAIC0yMCw2ICsyMCw5IEBACiAgKi8KICAgCiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUworCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTQ3LDcgKzUwLDYgQEAKIAl1bnNpZ25lZCBpbnQgcGl0Y2g7CiAJdW5zaWduZWQgaW50IHBvczsKIAlyYXRlX2YgZnVuYzsKLQlpbnQgZ2V0LCBwdXQ7CiAJc25kX3BjbV9zZnJhbWVzX3Qgb2xkX3NyY19mcmFtZXMsIG9sZF9kc3RfZnJhbWVzOwogCXN0cnVjdCByYXRlX2NoYW5uZWwgY2hhbm5lbHNbMF07CiB9OwpAQCAtNzEsMjEgKzczLDEyIEBACiAJdW5zaWduZWQgaW50IHBvcyA9IDA7CiAJc2lnbmVkIGludCB2YWw7CiAJc2lnbmVkIHNob3J0IFMxLCBTMjsKLQljaGFyICpzcmMsICpkc3Q7CisJc2lnbmVkIHNob3J0ICpzcmMsICpkc3Q7CiAJdW5zaWduZWQgaW50IGNoYW5uZWw7CiAJaW50IHNyY19zdGVwLCBkc3Rfc3RlcDsKIAlpbnQgc3JjX2ZyYW1lczEsIGRzdF9mcmFtZXMxOwogCXN0cnVjdCByYXRlX3ByaXYgKmRhdGEgPSAoc3RydWN0IHJhdGVfcHJpdiAqKXBsdWdpbi0+ZXh0cmFfZGF0YTsKIAlzdHJ1Y3QgcmF0ZV9jaGFubmVsICpyY2hhbm5lbHMgPSBkYXRhLT5jaGFubmVsczsKLQotI2RlZmluZSBHRVRfUzE2X0xBQkVMUwotI2RlZmluZSBQVVRfUzE2X0xBQkVMUwotI2luY2x1ZGUgInBsdWdpbl9vcHMuaCIKLSN1bmRlZiBHRVRfUzE2X0xBQkVMUwotI3VuZGVmIFBVVF9TMTZfTEFCRUxTCi0Jdm9pZCAqZ2V0ID0gZ2V0X3MxNl9sYWJlbHNbZGF0YS0+Z2V0XTsKLQl2b2lkICpwdXQgPSBwdXRfczE2X2xhYmVsc1tkYXRhLT5wdXRdOwotCXNpZ25lZCBzaG9ydCBzYW1wbGUgPSAwOwogCQogCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBwbHVnaW4tPnNyY19mb3JtYXQuY2hhbm5lbHM7IGNoYW5uZWwrKykgewogCQlwb3MgPSBkYXRhLT5wb3M7CkBAIC05OCwxMCArOTEsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWRzdF9jaGFubmVsc1tjaGFubmVsXS5lbmFibGVkID0gMTsKLQkJc3JjID0gKGNoYXIgKilzcmNfY2hhbm5lbHNbY2hhbm5lbF0uYXJlYS5hZGRyICsgc3JjX2NoYW5uZWxzW2NoYW5uZWxdLmFyZWEuZmlyc3QgLyA4OwotCQlkc3QgPSAoY2hhciAqKWRzdF9jaGFubmVsc1tjaGFubmVsXS5hcmVhLmFkZHIgKyBkc3RfY2hhbm5lbHNbY2hhbm5lbF0uYXJlYS5maXJzdCAvIDg7Ci0JCXNyY19zdGVwID0gc3JjX2NoYW5uZWxzW2NoYW5uZWxdLmFyZWEuc3RlcCAvIDg7Ci0JCWRzdF9zdGVwID0gZHN0X2NoYW5uZWxzW2NoYW5uZWxdLmFyZWEuc3RlcCAvIDg7CisJCXNyYyA9IChzaWduZWQgc2hvcnQgKilzcmNfY2hhbm5lbHNbY2hhbm5lbF0uYXJlYS5hZGRyICsKKwkJCXNyY19jaGFubmVsc1tjaGFubmVsXS5hcmVhLmZpcnN0IC8gOCAvIDI7CisJCWRzdCA9IChzaWduZWQgc2hvcnQgKilkc3RfY2hhbm5lbHNbY2hhbm5lbF0uYXJlYS5hZGRyICsKKwkJCWRzdF9jaGFubmVsc1tjaGFubmVsXS5hcmVhLmZpcnN0IC8gOCAvIDI7CisJCXNyY19zdGVwID0gc3JjX2NoYW5uZWxzW2NoYW5uZWxdLmFyZWEuc3RlcCAvIDggLyAyOworCQlkc3Rfc3RlcCA9IGRzdF9jaGFubmVsc1tjaGFubmVsXS5hcmVhLnN0ZXAgLyA4IC8gMjsKIAkJc3JjX2ZyYW1lczEgPSBzcmNfZnJhbWVzOwogCQlkc3RfZnJhbWVzMSA9IGRzdF9mcmFtZXM7CiAJCXdoaWxlIChkc3RfZnJhbWVzMS0tID4gMCkgewpAQCAtMTA5LDEyICsxMDQsNyBAQAogCQkJCXBvcyAmPSBSX01BU0s7CiAJCQkJUzEgPSBTMjsKIAkJCQlpZiAoc3JjX2ZyYW1lczEtLSA+IDApIHsKLQkJCQkJZ290byAqZ2V0OwotI2RlZmluZSBHRVRfUzE2X0VORCBhZnRlcl9nZXQKLSNpbmNsdWRlICJwbHVnaW5fb3BzLmgiCi0jdW5kZWYgR0VUX1MxNl9FTkQKLQkJCQlhZnRlcl9nZXQ6Ci0JCQkJCVMyID0gc2FtcGxlOworCQkJCQlTMiA9ICpzcmM7CiAJCQkJCXNyYyArPSBzcmNfc3RlcDsKIAkJCQl9CiAJCQl9CkBAIC0xMjMsMTIgKzExMyw3IEBACiAJCQkJdmFsID0gLTMyNzY4OwogCQkJZWxzZSBpZiAodmFsID4gMzI3NjcpCiAJCQkJdmFsID0gMzI3Njc7Ci0JCQlzYW1wbGUgPSB2YWw7Ci0JCQlnb3RvICpwdXQ7Ci0jZGVmaW5lIFBVVF9TMTZfRU5EIGFmdGVyX3B1dAotI2luY2x1ZGUgInBsdWdpbl9vcHMuaCIKLSN1bmRlZiBQVVRfUzE2X0VORAotCQlhZnRlcl9wdXQ6CisJCQkqZHN0ID0gdmFsOwogCQkJZHN0ICs9IGRzdF9zdGVwOwogCQkJcG9zICs9IGRhdGEtPnBpdGNoOwogCQl9CkBAIC0xNDcsMjEgKzEzMiwxMiBAQAogCXVuc2lnbmVkIGludCBwb3MgPSAwOwogCXNpZ25lZCBpbnQgdmFsOwogCXNpZ25lZCBzaG9ydCBTMSwgUzI7Ci0JY2hhciAqc3JjLCAqZHN0OworCXNpZ25lZCBzaG9ydCAqc3JjLCAqZHN0OwogCXVuc2lnbmVkIGludCBjaGFubmVsOwogCWludCBzcmNfc3RlcCwgZHN0X3N0ZXA7CiAJaW50IHNyY19mcmFtZXMxLCBkc3RfZnJhbWVzMTsKIAlzdHJ1Y3QgcmF0ZV9wcml2ICpkYXRhID0gKHN0cnVjdCByYXRlX3ByaXYgKilwbHVnaW4tPmV4dHJhX2RhdGE7CiAJc3RydWN0IHJhdGVfY2hhbm5lbCAqcmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHM7Ci0JCi0jZGVmaW5lIEdFVF9TMTZfTEFCRUxTCi0jZGVmaW5lIFBVVF9TMTZfTEFCRUxTCi0jaW5jbHVkZSAicGx1Z2luX29wcy5oIgotI3VuZGVmIEdFVF9TMTZfTEFCRUxTCi0jdW5kZWYgUFVUX1MxNl9MQUJFTFMKLQl2b2lkICpnZXQgPSBnZXRfczE2X2xhYmVsc1tkYXRhLT5nZXRdOwotCXZvaWQgKnB1dCA9IHB1dF9zMTZfbGFiZWxzW2RhdGEtPnB1dF07Ci0Jc2lnbmVkIHNob3J0IHNhbXBsZSA9IDA7CiAKIAlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgcGx1Z2luLT5zcmNfZm9ybWF0LmNoYW5uZWxzOyArK2NoYW5uZWwpIHsKIAkJcG9zID0gZGF0YS0+cG9zOwpAQCAtMTc0LDIxICsxNTAsMTggQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWRzdF9jaGFubmVsc1tjaGFubmVsXS5lbmFibGVkID0gMTsKLQkJc3JjID0gKGNoYXIgKilzcmNfY2hhbm5lbHNbY2hhbm5lbF0uYXJlYS5hZGRyICsgc3JjX2NoYW5uZWxzW2NoYW5uZWxdLmFyZWEuZmlyc3QgLyA4OwotCQlkc3QgPSAoY2hhciAqKWRzdF9jaGFubmVsc1tjaGFubmVsXS5hcmVhLmFkZHIgKyBkc3RfY2hhbm5lbHNbY2hhbm5lbF0uYXJlYS5maXJzdCAvIDg7Ci0JCXNyY19zdGVwID0gc3JjX2NoYW5uZWxzW2NoYW5uZWxdLmFyZWEuc3RlcCAvIDg7Ci0JCWRzdF9zdGVwID0gZHN0X2NoYW5uZWxzW2NoYW5uZWxdLmFyZWEuc3RlcCAvIDg7CisJCXNyYyA9IChzaWduZWQgc2hvcnQgKilzcmNfY2hhbm5lbHNbY2hhbm5lbF0uYXJlYS5hZGRyICsKKwkJCXNyY19jaGFubmVsc1tjaGFubmVsXS5hcmVhLmZpcnN0IC8gOCAvIDI7CisJCWRzdCA9IChzaWduZWQgc2hvcnQgKilkc3RfY2hhbm5lbHNbY2hhbm5lbF0uYXJlYS5hZGRyICsKKwkJCWRzdF9jaGFubmVsc1tjaGFubmVsXS5hcmVhLmZpcnN0IC8gOCAvIDI7CisJCXNyY19zdGVwID0gc3JjX2NoYW5uZWxzW2NoYW5uZWxdLmFyZWEuc3RlcCAvIDggLyAyOworCQlkc3Rfc3RlcCA9IGRzdF9jaGFubmVsc1tjaGFubmVsXS5hcmVhLnN0ZXAgLyA4IC8gMjsKIAkJc3JjX2ZyYW1lczEgPSBzcmNfZnJhbWVzOwogCQlkc3RfZnJhbWVzMSA9IGRzdF9mcmFtZXM7CiAJCXdoaWxlIChkc3RfZnJhbWVzMSA+IDApIHsKIAkJCVMxID0gUzI7CiAJCQlpZiAoc3JjX2ZyYW1lczEtLSA+IDApIHsKLQkJCQlnb3RvICpnZXQ7Ci0jZGVmaW5lIEdFVF9TMTZfRU5EIGFmdGVyX2dldAotI2luY2x1ZGUgInBsdWdpbl9vcHMuaCIKLSN1bmRlZiBHRVRfUzE2X0VORAotCQkJYWZ0ZXJfZ2V0OgotCQkJCVMyID0gc2FtcGxlOworCQkJCVMxID0gKnNyYzsKIAkJCQlzcmMgKz0gc3JjX3N0ZXA7CiAJCQl9CiAJCQlpZiAocG9zICYgflJfTUFTSykgewpAQCAtMTk4LDEyICsxNzEsNyBAQAogCQkJCQl2YWwgPSAtMzI3Njg7CiAJCQkJZWxzZSBpZiAodmFsID4gMzI3NjcpCiAJCQkJCXZhbCA9IDMyNzY3OwotCQkJCXNhbXBsZSA9IHZhbDsKLQkJCQlnb3RvICpwdXQ7Ci0jZGVmaW5lIFBVVF9TMTZfRU5EIGFmdGVyX3B1dAotI2luY2x1ZGUgInBsdWdpbl9vcHMuaCIKLSN1bmRlZiBQVVRfUzE2X0VORAotCQkJYWZ0ZXJfcHV0OgorCQkJCSpkc3QgPSB2YWw7CiAJCQkJZHN0ICs9IGRzdF9zdGVwOwogCQkJCWRzdF9mcmFtZXMxLS07CiAJCQl9CkBAIC0zNDMsOCArMzExLDggQEAKIAogCXNuZF9hc3NlcnQoc3JjX2Zvcm1hdC0+Y2hhbm5lbHMgPT0gZHN0X2Zvcm1hdC0+Y2hhbm5lbHMsIHJldHVybiAtRU5YSU8pOwogCXNuZF9hc3NlcnQoc3JjX2Zvcm1hdC0+Y2hhbm5lbHMgPiAwLCByZXR1cm4gLUVOWElPKTsKLQlzbmRfYXNzZXJ0KHNuZF9wY21fZm9ybWF0X2xpbmVhcihzcmNfZm9ybWF0LT5mb3JtYXQpICE9IDAsIHJldHVybiAtRU5YSU8pOwotCXNuZF9hc3NlcnQoc25kX3BjbV9mb3JtYXRfbGluZWFyKGRzdF9mb3JtYXQtPmZvcm1hdCkgIT0gMCwgcmV0dXJuIC1FTlhJTyk7CisJc25kX2Fzc2VydChzcmNfZm9ybWF0LT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9TMTYsIHJldHVybiAtRU5YSU8pOworCXNuZF9hc3NlcnQoZHN0X2Zvcm1hdC0+Zm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfUzE2LCByZXR1cm4gLUVOWElPKTsKIAlzbmRfYXNzZXJ0KHNyY19mb3JtYXQtPnJhdGUgIT0gZHN0X2Zvcm1hdC0+cmF0ZSwgcmV0dXJuIC1FTlhJTyk7CiAKIAllcnIgPSBzbmRfcGNtX3BsdWdpbl9idWlsZChwbHVnLCAicmF0ZSBjb252ZXJzaW9uIiwKQEAgLTM1NSwxMSArMzIzLDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlkYXRhID0gKHN0cnVjdCByYXRlX3ByaXYgKilwbHVnaW4tPmV4dHJhX2RhdGE7Ci0JZGF0YS0+Z2V0ID0gZ2V0cHV0X2luZGV4KHNyY19mb3JtYXQtPmZvcm1hdCk7Ci0Jc25kX2Fzc2VydChkYXRhLT5nZXQgPj0gMCAmJiBkYXRhLT5nZXQgPCA0KjIqMiwgcmV0dXJuIC1FSU5WQUwpOwotCWRhdGEtPnB1dCA9IGdldHB1dF9pbmRleChkc3RfZm9ybWF0LT5mb3JtYXQpOwotCXNuZF9hc3NlcnQoZGF0YS0+cHV0ID49IDAgJiYgZGF0YS0+cHV0IDwgNCoyKjIsIHJldHVybiAtRUlOVkFMKTsKLQogCWlmIChzcmNfZm9ybWF0LT5yYXRlIDwgZHN0X2Zvcm1hdC0+cmF0ZSkgewogCQlkYXRhLT5waXRjaCA9ICgoc3JjX2Zvcm1hdC0+cmF0ZSA8PCBTSElGVCkgKyAoZHN0X2Zvcm1hdC0+cmF0ZSA+PiAxKSkgLyBkc3RfZm9ybWF0LT5yYXRlOwogCQlkYXRhLT5mdW5jID0gcmVzYW1wbGVfZXhwYW5kOwpAQCAtMzc3LDMgKzM0MCw1IEBACiAJKnJfcGx1Z2luID0gcGx1Z2luOwogCXJldHVybiAwOwogfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvb3NzL3JvdXRlLmMgYi9zb3VuZC9jb3JlL29zcy9yb3V0ZS5jCmluZGV4IDcyNmM1Y2EuLjQ2OTE3ZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3JvdXRlLmMKKysrIGIvc291bmQvY29yZS9vc3Mvcm91dGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQXR0ZW51YXRlZCByb3V0ZSBQbHVnLUluCisgKiAgUm91dGUgUGx1Zy1JbgogICogIENvcHlyaWdodCAoYykgMjAwMCBieSBBYnJhbW8gQmFnbmFyYSA8YWJyYW1vQGFsc2EtcHJvamVjdC5vcmc+CiAgKgogICoKQEAgLTIwLDUwMiArMjAsOTMgQEAKICAqLwogCiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUworCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSAicGNtX3BsdWdpbi5oIgogCi0vKiBUaGUgYmVzdCBwb3NzaWJsZSBoYWNrIHRvIHN1cHBvcnQgbWlzc2luZyBvcHRpbWl6YXRpb24gaW4gZ2NjIDIuNy4yLjMgKi8KLSNpZiBST1VURV9QTFVHSU5fUkVTT0xVVElPTiAmIChST1VURV9QTFVHSU5fUkVTT0xVVElPTiAtIDEpICE9IDAKLSNkZWZpbmUgZGl2KGEpIGEgLz0gUk9VVEVfUExVR0lOX1JFU09MVVRJT04KLSNlbGlmIFJPVVRFX1BMVUdJTl9SRVNPTFVUSU9OID09IDE2Ci0jZGVmaW5lIGRpdihhKSBhID4+PSA0Ci0jZWxzZQotI2Vycm9yICJBZGQgc29tZSBjb2RlIGhlcmUiCi0jZW5kaWYKLQotc3RydWN0IHR0YWJsZV9kc3Q7Ci0KLXR5cGVkZWYgdm9pZCAoKnJvdXRlX2NoYW5uZWxfZikoc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCi0JCQkJY29uc3Qgc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKnNyY19jaGFubmVscywKLQkJCQlzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqZHN0X2NoYW5uZWwsCi0JCQkJc3RydWN0IHR0YWJsZV9kc3QgKnR0YWJsZSwgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzKTsKLQotc3RydWN0IHR0YWJsZV9zcmMgewotCWludCBjaGFubmVsOwotCWludCBhc19pbnQ7Ci19OwotCi1zdHJ1Y3QgdHRhYmxlX2RzdCB7Ci0JaW50IGF0dDsJLyogQXR0ZW51YXRlZCAqLwotCXVuc2lnbmVkIGludCBuc3JjczsKLQlzdHJ1Y3QgdHRhYmxlX3NyYyAqc3JjczsKLQlyb3V0ZV9jaGFubmVsX2YgZnVuYzsKLX07Ci0KLXN0cnVjdCByb3V0ZV9wcml2IHsKLQllbnVtIHtSX1VJTlQzMj0wLCBSX1VJTlQ2ND0xfSBzdW1fdHlwZTsKLQlpbnQgZ2V0LCBwdXQ7Ci0JaW50IGNvbnY7Ci0JaW50IHNyY19zYW1wbGVfc2l6ZTsKLQlzdHJ1Y3QgdHRhYmxlX2RzdCB0dGFibGVbMF07Ci19OwotCi11bmlvbiBzdW0gewotCXVfaW50MzJfdCBhc191aW50MzI7Ci0JdV9pbnQ2NF90IGFzX3VpbnQ2NDsKLX07Ci0KLQotc3RhdGljIHZvaWQgcm91dGVfdG9fY2hhbm5lbF9mcm9tX3plcm8oc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpzcmNfY2hhbm5lbHMsCi0JCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpkc3RfY2hhbm5lbCwKLQkJCQkgICAgICAgc3RydWN0IHR0YWJsZV9kc3QgKnR0YWJsZSwKLQkJCQkgICAgICAgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzKQorc3RhdGljIHZvaWQgemVyb19hcmVhcyhzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqZHZwLCBpbnQgbmRzdHMsCisJCSAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXMsIGludCBmb3JtYXQpCiB7Ci0JaWYgKGRzdF9jaGFubmVsLT53YW50ZWQpCi0JCXNuZF9wY21fYXJlYV9zaWxlbmNlKCZkc3RfY2hhbm5lbC0+YXJlYSwgMCwgZnJhbWVzLCBwbHVnaW4tPmRzdF9mb3JtYXQuZm9ybWF0KTsKLQlkc3RfY2hhbm5lbC0+ZW5hYmxlZCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJvdXRlX3RvX2NoYW5uZWxfZnJvbV9vbmUoc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKnNyY19jaGFubmVscywKLQkJCQkgICAgICBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqZHN0X2NoYW5uZWwsCi0JCQkJICAgICAgc3RydWN0IHR0YWJsZV9kc3QgKnR0YWJsZSwKLQkJCQkgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXMpCi17Ci0jZGVmaW5lIENPTlZfTEFCRUxTCi0jaW5jbHVkZSAicGx1Z2luX29wcy5oIgotI3VuZGVmIENPTlZfTEFCRUxTCi0Jc3RydWN0IHJvdXRlX3ByaXYgKmRhdGEgPSAoc3RydWN0IHJvdXRlX3ByaXYgKilwbHVnaW4tPmV4dHJhX2RhdGE7Ci0Jdm9pZCAqY29udjsKLQljb25zdCBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqc3JjX2NoYW5uZWwgPSBOVUxMOwotCXVuc2lnbmVkIGludCBzcmNpZHg7Ci0JY2hhciAqc3JjLCAqZHN0OwotCWludCBzcmNfc3RlcCwgZHN0X3N0ZXA7Ci0JZm9yIChzcmNpZHggPSAwOyBzcmNpZHggPCB0dGFibGUtPm5zcmNzOyArK3NyY2lkeCkgewotCQlzcmNfY2hhbm5lbCA9ICZzcmNfY2hhbm5lbHNbdHRhYmxlLT5zcmNzW3NyY2lkeF0uY2hhbm5lbF07Ci0JCWlmIChzcmNfY2hhbm5lbC0+YXJlYS5hZGRyICE9IE5VTEwpCi0JCQlicmVhazsKLQl9Ci0JaWYgKHNyY2lkeCA9PSB0dGFibGUtPm5zcmNzKSB7Ci0JCXJvdXRlX3RvX2NoYW5uZWxfZnJvbV96ZXJvKHBsdWdpbiwgc3JjX2NoYW5uZWxzLCBkc3RfY2hhbm5lbCwgdHRhYmxlLCBmcmFtZXMpOwotCQlyZXR1cm47Ci0JfQotCi0JZHN0X2NoYW5uZWwtPmVuYWJsZWQgPSAxOwotCWNvbnYgPSBjb252X2xhYmVsc1tkYXRhLT5jb252XTsKLQlzcmMgPSBzcmNfY2hhbm5lbC0+YXJlYS5hZGRyICsgc3JjX2NoYW5uZWwtPmFyZWEuZmlyc3QgLyA4OwotCXNyY19zdGVwID0gc3JjX2NoYW5uZWwtPmFyZWEuc3RlcCAvIDg7Ci0JZHN0ID0gZHN0X2NoYW5uZWwtPmFyZWEuYWRkciArIGRzdF9jaGFubmVsLT5hcmVhLmZpcnN0IC8gODsKLQlkc3Rfc3RlcCA9IGRzdF9jaGFubmVsLT5hcmVhLnN0ZXAgLyA4OwotCXdoaWxlIChmcmFtZXMtLSA+IDApIHsKLQkJZ290byAqY29udjsKLSNkZWZpbmUgQ09OVl9FTkQgYWZ0ZXIKLSNpbmNsdWRlICJwbHVnaW5fb3BzLmgiCi0jdW5kZWYgQ09OVl9FTkQKLQlhZnRlcjoKLQkJc3JjICs9IHNyY19zdGVwOwotCQlkc3QgKz0gZHN0X3N0ZXA7CisJaW50IGRzdCA9IDA7CisJZm9yICg7IGRzdCA8IG5kc3RzOyArK2RzdCkgeworCQlpZiAoZHZwLT53YW50ZWQpCisJCQlzbmRfcGNtX2FyZWFfc2lsZW5jZSgmZHZwLT5hcmVhLCAwLCBmcmFtZXMsIGZvcm1hdCk7CisJCWR2cC0+ZW5hYmxlZCA9IDA7CisJCWR2cCsrOwogCX0KIH0KIAotc3RhdGljIHZvaWQgcm91dGVfdG9fY2hhbm5lbChzdHJ1Y3Qgc25kX3BjbV9wbHVnaW4gKnBsdWdpbiwKLQkJCSAgICAgY29uc3Qgc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKnNyY19jaGFubmVscywKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X2FyZWEoY29uc3Qgc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKnNyY19jaGFubmVsLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqZHN0X2NoYW5uZWwsCi0JCQkgICAgIHN0cnVjdCB0dGFibGVfZHN0ICp0dGFibGUsIHNuZF9wY21fdWZyYW1lc190IGZyYW1lcykKKwkJCSAgICAgc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzLCBpbnQgZm9ybWF0KQogewotI2RlZmluZSBHRVRfVV9MQUJFTFMKLSNkZWZpbmUgUFVUX1UzMl9MQUJFTFMKLSNpbmNsdWRlICJwbHVnaW5fb3BzLmgiCi0jdW5kZWYgR0VUX1VfTEFCRUxTCi0jdW5kZWYgUFVUX1UzMl9MQUJFTFMKLQlzdGF0aWMgdm9pZCAqemVyb19sYWJlbHNbMl0gPSB7ICYmemVyb19pbnQzMiwgJiZ6ZXJvX2ludDY0IH07Ci0JLyogc3VtX3R5cGUgYXR0ICovCi0Jc3RhdGljIHZvaWQgKmFkZF9sYWJlbHNbMiAqIDJdID0geyAmJmFkZF9pbnQzMl9ub2F0dCwgJiZhZGRfaW50MzJfYXR0LAotCQkJCSAgICAmJmFkZF9pbnQ2NF9ub2F0dCwgJiZhZGRfaW50NjRfYXR0LAotCX07Ci0JLyogc3VtX3R5cGUgYXR0IHNoaWZ0ICovCi0Jc3RhdGljIHZvaWQgKm5vcm1fbGFiZWxzWzIgKiAyICogNF0gPSB7IE5VTEwsCi0JCQkJCSAmJm5vcm1faW50MzJfOF9ub2F0dCwKLQkJCQkJICYmbm9ybV9pbnQzMl8xNl9ub2F0dCwKLQkJCQkJICYmbm9ybV9pbnQzMl8yNF9ub2F0dCwKLQkJCQkJIE5VTEwsCi0JCQkJCSAmJm5vcm1faW50MzJfOF9hdHQsCi0JCQkJCSAmJm5vcm1faW50MzJfMTZfYXR0LAotCQkJCQkgJiZub3JtX2ludDMyXzI0X2F0dCwKLQkJCQkJICYmbm9ybV9pbnQ2NF8wX25vYXR0LAotCQkJCQkgJiZub3JtX2ludDY0Xzhfbm9hdHQsCi0JCQkJCSAmJm5vcm1faW50NjRfMTZfbm9hdHQsCi0JCQkJCSAmJm5vcm1faW50NjRfMjRfbm9hdHQsCi0JCQkJCSAmJm5vcm1faW50NjRfMF9hdHQsCi0JCQkJCSAmJm5vcm1faW50NjRfOF9hdHQsCi0JCQkJCSAmJm5vcm1faW50NjRfMTZfYXR0LAotCQkJCQkgJiZub3JtX2ludDY0XzI0X2F0dCwKLQl9OwotCXN0cnVjdCByb3V0ZV9wcml2ICpkYXRhID0gKHN0cnVjdCByb3V0ZV9wcml2ICopcGx1Z2luLT5leHRyYV9kYXRhOwotCXZvaWQgKnplcm8sICpnZXQsICphZGQsICpub3JtLCAqcHV0X3UzMjsKLQlpbnQgbnNyY3MgPSB0dGFibGUtPm5zcmNzOwotCWNoYXIgKmRzdDsKLQlpbnQgZHN0X3N0ZXA7Ci0JY2hhciAqc3Jjc1tuc3Jjc107Ci0JaW50IHNyY19zdGVwc1tuc3Jjc107Ci0Jc3RydWN0IHR0YWJsZV9zcmMgc3JjX3R0W25zcmNzXTsKLQl1X2ludDMyX3Qgc2FtcGxlID0gMDsKLQlpbnQgc3JjaWR4LCBzcmNpZHgxID0gMDsKLQlmb3IgKHNyY2lkeCA9IDA7IHNyY2lkeCA8IG5zcmNzOyArK3NyY2lkeCkgewotCQljb25zdCBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fY2hhbm5lbCAqc3JjX2NoYW5uZWwgPSAmc3JjX2NoYW5uZWxzW3R0YWJsZS0+c3Jjc1tzcmNpZHhdLmNoYW5uZWxdOwotCQlpZiAoIXNyY19jaGFubmVsLT5lbmFibGVkKQotCQkJY29udGludWU7Ci0JCXNyY3Nbc3JjaWR4MV0gPSBzcmNfY2hhbm5lbC0+YXJlYS5hZGRyICsgc3JjX2NoYW5uZWwtPmFyZWEuZmlyc3QgLyA4OwotCQlzcmNfc3RlcHNbc3JjaWR4MV0gPSBzcmNfY2hhbm5lbC0+YXJlYS5zdGVwIC8gODsKLQkJc3JjX3R0W3NyY2lkeDFdID0gdHRhYmxlLT5zcmNzW3NyY2lkeF07Ci0JCXNyY2lkeDErKzsKLQl9Ci0JbnNyY3MgPSBzcmNpZHgxOwotCWlmIChuc3JjcyA9PSAwKSB7Ci0JCXJvdXRlX3RvX2NoYW5uZWxfZnJvbV96ZXJvKHBsdWdpbiwgc3JjX2NoYW5uZWxzLCBkc3RfY2hhbm5lbCwgdHRhYmxlLCBmcmFtZXMpOwotCQlyZXR1cm47Ci0JfSBlbHNlIGlmIChuc3JjcyA9PSAxICYmIHNyY190dFswXS5hc19pbnQgPT0gUk9VVEVfUExVR0lOX1JFU09MVVRJT04pIHsKLQkJcm91dGVfdG9fY2hhbm5lbF9mcm9tX29uZShwbHVnaW4sIHNyY19jaGFubmVscywgZHN0X2NoYW5uZWwsIHR0YWJsZSwgZnJhbWVzKTsKLQkJcmV0dXJuOwotCX0KLQogCWRzdF9jaGFubmVsLT5lbmFibGVkID0gMTsKLQl6ZXJvID0gemVyb19sYWJlbHNbZGF0YS0+c3VtX3R5cGVdOwotCWdldCA9IGdldF91X2xhYmVsc1tkYXRhLT5nZXRdOwotCWFkZCA9IGFkZF9sYWJlbHNbZGF0YS0+c3VtX3R5cGUgKiAyICsgdHRhYmxlLT5hdHRdOwotCW5vcm0gPSBub3JtX2xhYmVsc1tkYXRhLT5zdW1fdHlwZSAqIDggKyB0dGFibGUtPmF0dCAqIDQgKyA0IC0gZGF0YS0+c3JjX3NhbXBsZV9zaXplXTsKLQlwdXRfdTMyID0gcHV0X3UzMl9sYWJlbHNbZGF0YS0+cHV0XTsKLQlkc3QgPSBkc3RfY2hhbm5lbC0+YXJlYS5hZGRyICsgZHN0X2NoYW5uZWwtPmFyZWEuZmlyc3QgLyA4OwotCWRzdF9zdGVwID0gZHN0X2NoYW5uZWwtPmFyZWEuc3RlcCAvIDg7Ci0KLQl3aGlsZSAoZnJhbWVzLS0gPiAwKSB7Ci0JCXN0cnVjdCB0dGFibGVfc3JjICp0dHAgPSBzcmNfdHQ7Ci0JCXVuaW9uIHN1bSBzdW07Ci0KLQkJLyogWmVybyBzdW0gKi8KLQkJZ290byAqemVybzsKLQl6ZXJvX2ludDMyOgotCQlzdW0uYXNfdWludDMyID0gMDsKLQkJZ290byB6ZXJvX2VuZDsKLQl6ZXJvX2ludDY0OiAKLQkJc3VtLmFzX3VpbnQ2NCA9IDA7Ci0JCWdvdG8gemVyb19lbmQ7Ci0JemVyb19lbmQ6Ci0JCWZvciAoc3JjaWR4ID0gMDsgc3JjaWR4IDwgbnNyY3M7ICsrc3JjaWR4KSB7Ci0JCQljaGFyICpzcmMgPSBzcmNzW3NyY2lkeF07Ci0JCQkKLQkJCS8qIEdldCBzYW1wbGUgKi8KLQkJCWdvdG8gKmdldDsKLSNkZWZpbmUgR0VUX1VfRU5EIGFmdGVyX2dldAotI2luY2x1ZGUgInBsdWdpbl9vcHMuaCIKLSN1bmRlZiBHRVRfVV9FTkQKLQkJYWZ0ZXJfZ2V0OgotCi0JCQkvKiBTdW0gKi8KLQkJCWdvdG8gKmFkZDsKLQkJYWRkX2ludDMyX2F0dDoKLQkJCXN1bS5hc191aW50MzIgKz0gc2FtcGxlICogdHRwLT5hc19pbnQ7Ci0JCQlnb3RvIGFmdGVyX3N1bTsKLQkJYWRkX2ludDMyX25vYXR0OgotCQkJaWYgKHR0cC0+YXNfaW50KQotCQkJCXN1bS5hc191aW50MzIgKz0gc2FtcGxlOwotCQkJZ290byBhZnRlcl9zdW07Ci0JCWFkZF9pbnQ2NF9hdHQ6Ci0JCQlzdW0uYXNfdWludDY0ICs9ICh1X2ludDY0X3QpIHNhbXBsZSAqIHR0cC0+YXNfaW50OwotCQkJZ290byBhZnRlcl9zdW07Ci0JCWFkZF9pbnQ2NF9ub2F0dDoKLQkJCWlmICh0dHAtPmFzX2ludCkKLQkJCQlzdW0uYXNfdWludDY0ICs9IHNhbXBsZTsKLQkJCWdvdG8gYWZ0ZXJfc3VtOwotCQlhZnRlcl9zdW06Ci0JCQlzcmNzW3NyY2lkeF0gKz0gc3JjX3N0ZXBzW3NyY2lkeF07Ci0JCQl0dHArKzsKLQkJfQotCQkKLQkJLyogTm9ybWFsaXphdGlvbiAqLwotCQlnb3RvICpub3JtOwotCW5vcm1faW50MzJfOF9hdHQ6Ci0JCXN1bS5hc191aW50NjQgPSBzdW0uYXNfdWludDMyOwotCW5vcm1faW50NjRfOF9hdHQ6Ci0JCXN1bS5hc191aW50NjQgPDw9IDg7Ci0Jbm9ybV9pbnQ2NF8wX2F0dDoKLQkJZGl2KHN1bS5hc191aW50NjQpOwotCQlnb3RvIG5vcm1faW50OwotCi0Jbm9ybV9pbnQzMl8xNl9hdHQ6Ci0JCXN1bS5hc191aW50NjQgPSBzdW0uYXNfdWludDMyOwotCW5vcm1faW50NjRfMTZfYXR0OgotCQlzdW0uYXNfdWludDY0IDw8PSAxNjsKLQkJZGl2KHN1bS5hc191aW50NjQpOwotCQlnb3RvIG5vcm1faW50OwotCi0Jbm9ybV9pbnQzMl8yNF9hdHQ6Ci0JCXN1bS5hc191aW50NjQgPSBzdW0uYXNfdWludDMyOwotCW5vcm1faW50NjRfMjRfYXR0OgotCQlzdW0uYXNfdWludDY0IDw8PSAyNDsKLQkJZGl2KHN1bS5hc191aW50NjQpOwotCQlnb3RvIG5vcm1faW50OwotCi0Jbm9ybV9pbnQzMl84X25vYXR0OgotCQlzdW0uYXNfdWludDY0ID0gc3VtLmFzX3VpbnQzMjsKLQlub3JtX2ludDY0Xzhfbm9hdHQ6Ci0JCXN1bS5hc191aW50NjQgPDw9IDg7Ci0JCWdvdG8gbm9ybV9pbnQ7Ci0KLQlub3JtX2ludDMyXzE2X25vYXR0OgotCQlzdW0uYXNfdWludDY0ID0gc3VtLmFzX3VpbnQzMjsKLQlub3JtX2ludDY0XzE2X25vYXR0OgotCQlzdW0uYXNfdWludDY0IDw8PSAxNjsKLQkJZ290byBub3JtX2ludDsKLQotCW5vcm1faW50MzJfMjRfbm9hdHQ6Ci0JCXN1bS5hc191aW50NjQgPSBzdW0uYXNfdWludDMyOwotCW5vcm1faW50NjRfMjRfbm9hdHQ6Ci0JCXN1bS5hc191aW50NjQgPDw9IDI0OwotCQlnb3RvIG5vcm1faW50OwotCi0Jbm9ybV9pbnQ2NF8wX25vYXR0OgotCW5vcm1faW50OgotCQlpZiAoc3VtLmFzX3VpbnQ2NCA+ICh1X2ludDMyX3QpMHhmZmZmZmZmZikKLQkJCXNhbXBsZSA9ICh1X2ludDMyX3QpMHhmZmZmZmZmZjsKLQkJZWxzZQotCQkJc2FtcGxlID0gc3VtLmFzX3VpbnQ2NDsKLQkJZ290byBhZnRlcl9ub3JtOwotCi0JYWZ0ZXJfbm9ybToKLQkJCi0JCS8qIFB1dCBzYW1wbGUgKi8KLQkJZ290byAqcHV0X3UzMjsKLSNkZWZpbmUgUFVUX1UzMl9FTkQgYWZ0ZXJfcHV0X3UzMgotI2luY2x1ZGUgInBsdWdpbl9vcHMuaCIKLSN1bmRlZiBQVVRfVTMyX0VORAotCWFmdGVyX3B1dF91MzI6Ci0JCQotCQlkc3QgKz0gZHN0X3N0ZXA7Ci0JfQotfQotCi1zdGF0aWMgaW50IHJvdXRlX3NyY19jaGFubmVsc19tYXNrKHN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmRzdF92bWFzaywKLQkJCQkgICB1bnNpZ25lZCBsb25nICoqc3JjX3ZtYXNrKQotewotCXN0cnVjdCByb3V0ZV9wcml2ICpkYXRhID0gKHN0cnVjdCByb3V0ZV9wcml2ICopcGx1Z2luLT5leHRyYV9kYXRhOwotCWludCBzY2hhbm5lbHMgPSBwbHVnaW4tPnNyY19mb3JtYXQuY2hhbm5lbHM7Ci0JaW50IGRjaGFubmVscyA9IHBsdWdpbi0+ZHN0X2Zvcm1hdC5jaGFubmVsczsKLQl1bnNpZ25lZCBsb25nICp2bWFzayA9IHBsdWdpbi0+c3JjX3ZtYXNrOwotCWludCBjaGFubmVsOwotCXN0cnVjdCB0dGFibGVfZHN0ICpkcCA9IGRhdGEtPnR0YWJsZTsKLQliaXRtYXBfemVybyh2bWFzaywgc2NoYW5uZWxzKTsKLQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgZGNoYW5uZWxzOyBjaGFubmVsKyssIGRwKyspIHsKLQkJdW5zaWduZWQgaW50IHNyYzsKLQkJc3RydWN0IHR0YWJsZV9zcmMgKnNwOwotCQlpZiAoIXRlc3RfYml0KGNoYW5uZWwsIGRzdF92bWFzaykpCi0JCQljb250aW51ZTsKLQkJc3AgPSBkcC0+c3JjczsKLQkJZm9yIChzcmMgPSAwOyBzcmMgPCBkcC0+bnNyY3M7IHNyYysrLCBzcCsrKQotCQkJc2V0X2JpdChzcC0+Y2hhbm5lbCwgdm1hc2spOwotCX0KLQkqc3JjX3ZtYXNrID0gdm1hc2s7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcm91dGVfZHN0X2NoYW5uZWxzX21hc2soc3RydWN0IHNuZF9wY21fcGx1Z2luICpwbHVnaW4sCi0JCQkJICAgdW5zaWduZWQgbG9uZyAqc3JjX3ZtYXNrLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgKipkc3Rfdm1hc2spCi17Ci0Jc3RydWN0IHJvdXRlX3ByaXYgKmRhdGEgPSAoc3RydWN0IHJvdXRlX3ByaXYgKilwbHVnaW4tPmV4dHJhX2RhdGE7Ci0JaW50IGRjaGFubmVscyA9IHBsdWdpbi0+ZHN0X2Zvcm1hdC5jaGFubmVsczsKLQl1bnNpZ25lZCBsb25nICp2bWFzayA9IHBsdWdpbi0+ZHN0X3ZtYXNrOwotCWludCBjaGFubmVsOwotCXN0cnVjdCB0dGFibGVfZHN0ICpkcCA9IGRhdGEtPnR0YWJsZTsKLQliaXRtYXBfemVybyh2bWFzaywgZGNoYW5uZWxzKTsKLQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgZGNoYW5uZWxzOyBjaGFubmVsKyssIGRwKyspIHsKLQkJdW5zaWduZWQgaW50IHNyYzsKLQkJc3RydWN0IHR0YWJsZV9zcmMgKnNwOwotCQlzcCA9IGRwLT5zcmNzOwotCQlmb3IgKHNyYyA9IDA7IHNyYyA8IGRwLT5uc3Jjczsgc3JjKyssIHNwKyspIHsKLQkJCWlmICh0ZXN0X2JpdChzcC0+Y2hhbm5lbCwgc3JjX3ZtYXNrKSkgewotCQkJCXNldF9iaXQoY2hhbm5lbCwgdm1hc2spOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCSpkc3Rfdm1hc2sgPSB2bWFzazsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcm91dGVfZnJlZShzdHJ1Y3Qgc25kX3BjbV9wbHVnaW4gKnBsdWdpbikKLXsKLQlzdHJ1Y3Qgcm91dGVfcHJpdiAqZGF0YSA9IChzdHJ1Y3Qgcm91dGVfcHJpdiAqKXBsdWdpbi0+ZXh0cmFfZGF0YTsKLQl1bnNpZ25lZCBpbnQgZHN0X2NoYW5uZWw7Ci0JZm9yIChkc3RfY2hhbm5lbCA9IDA7IGRzdF9jaGFubmVsIDwgcGx1Z2luLT5kc3RfZm9ybWF0LmNoYW5uZWxzOyArK2RzdF9jaGFubmVsKSB7Ci0JCWtmcmVlKGRhdGEtPnR0YWJsZVtkc3RfY2hhbm5lbF0uc3Jjcyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHJvdXRlX2xvYWRfdHRhYmxlKHN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luLCAKLQkJCSAgICAgY29uc3QgaW50ICpzcmNfdHRhYmxlKQotewotCXN0cnVjdCByb3V0ZV9wcml2ICpkYXRhOwotCXVuc2lnbmVkIGludCBzcmNfY2hhbm5lbCwgZHN0X2NoYW5uZWw7Ci0JY29uc3QgaW50ICpzcHRyOwotCXN0cnVjdCB0dGFibGVfZHN0ICpkcHRyOwotCWlmIChzcmNfdHRhYmxlID09IE5VTEwpCi0JCXJldHVybiAwOwotCWRhdGEgPSAoc3RydWN0IHJvdXRlX3ByaXYgKilwbHVnaW4tPmV4dHJhX2RhdGE7Ci0JZHB0ciA9IGRhdGEtPnR0YWJsZTsKLQlzcHRyID0gc3JjX3R0YWJsZTsKLQlwbHVnaW4tPnByaXZhdGVfZnJlZSA9IHJvdXRlX2ZyZWU7Ci0JZm9yIChkc3RfY2hhbm5lbCA9IDA7IGRzdF9jaGFubmVsIDwgcGx1Z2luLT5kc3RfZm9ybWF0LmNoYW5uZWxzOyArK2RzdF9jaGFubmVsKSB7Ci0JCWludCB0ID0gMDsKLQkJaW50IGF0dCA9IDA7Ci0JCWludCBuc3JjcyA9IDA7Ci0JCXN0cnVjdCB0dGFibGVfc3JjIHNyY3NbcGx1Z2luLT5zcmNfZm9ybWF0LmNoYW5uZWxzXTsKLQkJZm9yIChzcmNfY2hhbm5lbCA9IDA7IHNyY19jaGFubmVsIDwgcGx1Z2luLT5zcmNfZm9ybWF0LmNoYW5uZWxzOyArK3NyY19jaGFubmVsKSB7Ci0JCQlzbmRfYXNzZXJ0KCpzcHRyID49IDAgfHwgKnNwdHIgPD0gRlVMTCwgcmV0dXJuIC1FTlhJTyk7Ci0JCQlpZiAoKnNwdHIgIT0gMCkgewotCQkJCXNyY3NbbnNyY3NdLmNoYW5uZWwgPSBzcmNfY2hhbm5lbDsKLQkJCQlzcmNzW25zcmNzXS5hc19pbnQgPSAqc3B0cjsKLQkJCQlpZiAoKnNwdHIgIT0gRlVMTCkKLQkJCQkJYXR0ID0gMTsKLQkJCQl0ICs9ICpzcHRyOwotCQkJCW5zcmNzKys7Ci0JCQl9Ci0JCQlzcHRyKys7Ci0JCX0KLQkJZHB0ci0+YXR0ID0gYXR0OwotCQlkcHRyLT5uc3JjcyA9IG5zcmNzOwotCQlpZiAobnNyY3MgPT0gMCkKLQkJCWRwdHItPmZ1bmMgPSByb3V0ZV90b19jaGFubmVsX2Zyb21femVybzsKLQkJZWxzZSBpZiAobnNyY3MgPT0gMSAmJiAhYXR0KQotCQkJZHB0ci0+ZnVuYyA9IHJvdXRlX3RvX2NoYW5uZWxfZnJvbV9vbmU7Ci0JCWVsc2UKLQkJCWRwdHItPmZ1bmMgPSByb3V0ZV90b19jaGFubmVsOwotCQlpZiAobnNyY3MgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjaWR4OwotCQkJZHB0ci0+c3JjcyA9IGtjYWxsb2MobnNyY3MsIHNpemVvZigqc3JjcyksIEdGUF9LRVJORUwpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHNyY2lkeCA9IDA7IHNyY2lkeCA8IG5zcmNzOyBzcmNpZHgrKykKLQkJCQlkcHRyLT5zcmNzW3NyY2lkeF0gPSBzcmNzW3NyY2lkeF07Ci0JCX0gZWxzZQotCQkJZHB0ci0+c3JjcyA9IE5VTEw7Ci0JCWRwdHIrKzsKLQl9Ci0JcmV0dXJuIDA7CisJc25kX3BjbV9hcmVhX2NvcHkoJnNyY19jaGFubmVsLT5hcmVhLCAwLCAmZHN0X2NoYW5uZWwtPmFyZWEsIDAsIGZyYW1lcywgZm9ybWF0KTsKIH0KIAogc3RhdGljIHNuZF9wY21fc2ZyYW1lc190IHJvdXRlX3RyYW5zZmVyKHN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luLAotCQkJICAgICAgY29uc3Qgc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKnNyY19jaGFubmVscywKLQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpkc3RfY2hhbm5lbHMsCi0JCQkgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXMpCisJCQkJCWNvbnN0IHN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpzcmNfY2hhbm5lbHMsCisJCQkJCXN0cnVjdCBzbmRfcGNtX3BsdWdpbl9jaGFubmVsICpkc3RfY2hhbm5lbHMsCisJCQkJCXNuZF9wY21fdWZyYW1lc190IGZyYW1lcykKIHsKLQlzdHJ1Y3Qgcm91dGVfcHJpdiAqZGF0YTsKLQlpbnQgc3JjX25jaGFubmVscywgZHN0X25jaGFubmVsczsKLQlpbnQgZHN0X2NoYW5uZWw7Ci0Jc3RydWN0IHR0YWJsZV9kc3QgKnR0cDsKKwlpbnQgbnNyY3MsIG5kc3RzLCBkc3Q7CiAJc3RydWN0IHNuZF9wY21fcGx1Z2luX2NoYW5uZWwgKmR2cDsKKwlpbnQgZm9ybWF0OwogCiAJc25kX2Fzc2VydChwbHVnaW4gIT0gTlVMTCAmJiBzcmNfY2hhbm5lbHMgIT0gTlVMTCAmJiBkc3RfY2hhbm5lbHMgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAJaWYgKGZyYW1lcyA9PSAwKQogCQlyZXR1cm4gMDsKLQlkYXRhID0gKHN0cnVjdCByb3V0ZV9wcml2ICopcGx1Z2luLT5leHRyYV9kYXRhOwogCi0Jc3JjX25jaGFubmVscyA9IHBsdWdpbi0+c3JjX2Zvcm1hdC5jaGFubmVsczsKLQlkc3RfbmNoYW5uZWxzID0gcGx1Z2luLT5kc3RfZm9ybWF0LmNoYW5uZWxzOworCW5zcmNzID0gcGx1Z2luLT5zcmNfZm9ybWF0LmNoYW5uZWxzOworCW5kc3RzID0gcGx1Z2luLT5kc3RfZm9ybWF0LmNoYW5uZWxzOwogCi0jaWZkZWYgQ09ORklHX1NORF9ERUJVRwotCXsKLQkJaW50IHNyY19jaGFubmVsOwotCQlmb3IgKHNyY19jaGFubmVsID0gMDsgc3JjX2NoYW5uZWwgPCBzcmNfbmNoYW5uZWxzOyArK3NyY19jaGFubmVsKSB7Ci0JCQlzbmRfYXNzZXJ0KHNyY19jaGFubmVsc1tzcmNfY2hhbm5lbF0uYXJlYS5maXJzdCAlIDggPT0gMCB8fAotCQkJCSAgIHNyY19jaGFubmVsc1tzcmNfY2hhbm5lbF0uYXJlYS5zdGVwICUgOCA9PSAwLAotCQkJCSAgIHJldHVybiAtRU5YSU8pOwotCQl9Ci0JCWZvciAoZHN0X2NoYW5uZWwgPSAwOyBkc3RfY2hhbm5lbCA8IGRzdF9uY2hhbm5lbHM7ICsrZHN0X2NoYW5uZWwpIHsKLQkJCXNuZF9hc3NlcnQoZHN0X2NoYW5uZWxzW2RzdF9jaGFubmVsXS5hcmVhLmZpcnN0ICUgOCA9PSAwIHx8Ci0JCQkJICAgZHN0X2NoYW5uZWxzW2RzdF9jaGFubmVsXS5hcmVhLnN0ZXAgJSA4ID09IDAsCi0JCQkJICAgcmV0dXJuIC1FTlhJTyk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCXR0cCA9IGRhdGEtPnR0YWJsZTsKKwlmb3JtYXQgPSBwbHVnaW4tPmRzdF9mb3JtYXQuZm9ybWF0OwogCWR2cCA9IGRzdF9jaGFubmVsczsKLQlmb3IgKGRzdF9jaGFubmVsID0gMDsgZHN0X2NoYW5uZWwgPCBkc3RfbmNoYW5uZWxzOyArK2RzdF9jaGFubmVsKSB7Ci0JCXR0cC0+ZnVuYyhwbHVnaW4sIHNyY19jaGFubmVscywgZHZwLCB0dHAsIGZyYW1lcyk7Ci0JCWR2cCsrOwotCQl0dHArKzsKKwlpZiAobnNyY3MgPD0gMSkgeworCQkvKiBleHBhbmQgdG8gYWxsIGNoYW5uZWxzICovCisJCWZvciAoZHN0ID0gMDsgZHN0IDwgbmRzdHM7ICsrZHN0KSB7CisJCQljb3B5X2FyZWEoc3JjX2NoYW5uZWxzLCBkdnAsIGZyYW1lcywgZm9ybWF0KTsKKwkJCWR2cCsrOworCQl9CisJCXJldHVybiBmcmFtZXM7CiAJfQotCXJldHVybiBmcmFtZXM7Ci19CiAKLWludCBnZXRwdXRfaW5kZXgoaW50IGZvcm1hdCkKLXsKLQlpbnQgc2lnbiwgd2lkdGgsIGVuZGlhbjsKLQlzaWduID0gIXNuZF9wY21fZm9ybWF0X3NpZ25lZChmb3JtYXQpOwotCXdpZHRoID0gc25kX3BjbV9mb3JtYXRfd2lkdGgoZm9ybWF0KSAvIDggLSAxOwotCWlmICh3aWR0aCA8IDAgfHwgd2lkdGggPiAzKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgInNuZC1wY20tb3NzOiBpbnZhbGlkIGZvcm1hdCAlZFxuIiwgZm9ybWF0KTsKLQkJd2lkdGggPSAwOworCWZvciAoZHN0ID0gMDsgZHN0IDwgbmRzdHMgJiYgZHN0IDwgbnNyY3M7ICsrZHN0KSB7CisJCWNvcHlfYXJlYShzcmNfY2hhbm5lbHMsIGR2cCwgZnJhbWVzLCBmb3JtYXQpOworCQlkdnArKzsKKwkJc3JjX2NoYW5uZWxzKys7CiAJfQotI2lmZGVmIFNORFJWX0xJVFRMRV9FTkRJQU4KLQllbmRpYW4gPSBzbmRfcGNtX2Zvcm1hdF9iaWdfZW5kaWFuKGZvcm1hdCk7Ci0jZWxzZQotCWVuZGlhbiA9IHNuZF9wY21fZm9ybWF0X2xpdHRsZV9lbmRpYW4oZm9ybWF0KTsKLSNlbmRpZgotCWlmIChlbmRpYW4gPCAwKQotCQllbmRpYW4gPSAwOwotCXJldHVybiB3aWR0aCAqIDQgKyBlbmRpYW4gKiAyICsgc2lnbjsKKwlpZiAoZHN0IDwgbmRzdHMpCisJCXplcm9fYXJlYXMoZHZwLCBuZHN0cyAtIGRzdCwgZnJhbWVzLCBmb3JtYXQpOworCXJldHVybiBmcmFtZXM7CiB9CiAKIGludCBzbmRfcGNtX3BsdWdpbl9idWlsZF9yb3V0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsdWcsCiAJCQkgICAgICAgc3RydWN0IHNuZF9wY21fcGx1Z2luX2Zvcm1hdCAqc3JjX2Zvcm1hdCwKIAkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9wbHVnaW5fZm9ybWF0ICpkc3RfZm9ybWF0LAotCQkJICAgICAgIGludCAqdHRhYmxlLAogCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqKnJfcGx1Z2luKQogewotCXN0cnVjdCByb3V0ZV9wcml2ICpkYXRhOwogCXN0cnVjdCBzbmRfcGNtX3BsdWdpbiAqcGx1Z2luOwogCWludCBlcnI7CiAKIAlzbmRfYXNzZXJ0KHJfcGx1Z2luICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCSpyX3BsdWdpbiA9IE5VTEw7CiAJc25kX2Fzc2VydChzcmNfZm9ybWF0LT5yYXRlID09IGRzdF9mb3JtYXQtPnJhdGUsIHJldHVybiAtRU5YSU8pOwotCXNuZF9hc3NlcnQoc25kX3BjbV9mb3JtYXRfbGluZWFyKHNyY19mb3JtYXQtPmZvcm1hdCkgIT0gMCAmJgotCQkgICBzbmRfcGNtX2Zvcm1hdF9saW5lYXIoZHN0X2Zvcm1hdC0+Zm9ybWF0KSAhPSAwLAotCQkgICByZXR1cm4gLUVOWElPKTsKKwlzbmRfYXNzZXJ0KHNyY19mb3JtYXQtPmZvcm1hdCA9PSBkc3RfZm9ybWF0LT5mb3JtYXQsIHJldHVybiAtRU5YSU8pOwogCi0JZXJyID0gc25kX3BjbV9wbHVnaW5fYnVpbGQocGx1ZywgImF0dGVudWF0ZWQgcm91dGUgY29udmVyc2lvbiIsCi0JCQkJICAgc3JjX2Zvcm1hdCwgZHN0X2Zvcm1hdCwKLQkJCQkgICBzaXplb2Yoc3RydWN0IHJvdXRlX3ByaXYpICsKLQkJCQkgICBzaXplb2YoZGF0YS0+dHRhYmxlWzBdKSAqIGRzdF9mb3JtYXQtPmNoYW5uZWxzLAotCQkJCSAgICZwbHVnaW4pOworCWVyciA9IHNuZF9wY21fcGx1Z2luX2J1aWxkKHBsdWcsICJyb3V0ZSBjb252ZXJzaW9uIiwKKwkJCQkgICBzcmNfZm9ybWF0LCBkc3RfZm9ybWF0LCAwLCAmcGx1Z2luKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWRhdGEgPSAoc3RydWN0IHJvdXRlX3ByaXYgKilwbHVnaW4tPmV4dHJhX2RhdGE7Ci0KLQlkYXRhLT5nZXQgPSBnZXRwdXRfaW5kZXgoc3JjX2Zvcm1hdC0+Zm9ybWF0KTsKLQlzbmRfYXNzZXJ0KGRhdGEtPmdldCA+PSAwICYmIGRhdGEtPmdldCA8IDQqMioyLCByZXR1cm4gLUVJTlZBTCk7Ci0JZGF0YS0+cHV0ID0gZ2V0cHV0X2luZGV4KGRzdF9mb3JtYXQtPmZvcm1hdCk7Ci0Jc25kX2Fzc2VydChkYXRhLT5nZXQgPj0gMCAmJiBkYXRhLT5nZXQgPCA0KjIqMiwgcmV0dXJuIC1FSU5WQUwpOwotCWRhdGEtPmNvbnYgPSBjb252X2luZGV4KHNyY19mb3JtYXQtPmZvcm1hdCwgZHN0X2Zvcm1hdC0+Zm9ybWF0KTsKLQotCWlmIChzbmRfcGNtX2Zvcm1hdF93aWR0aChzcmNfZm9ybWF0LT5mb3JtYXQpID09IDMyKQotCQlkYXRhLT5zdW1fdHlwZSA9IFJfVUlOVDY0OwotCWVsc2UKLQkJZGF0YS0+c3VtX3R5cGUgPSBSX1VJTlQzMjsKLQlkYXRhLT5zcmNfc2FtcGxlX3NpemUgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChzcmNfZm9ybWF0LT5mb3JtYXQpIC8gODsKLQotCWlmICgoZXJyID0gcm91dGVfbG9hZF90dGFibGUocGx1Z2luLCB0dGFibGUpKSA8IDApIHsKLQkJc25kX3BjbV9wbHVnaW5fZnJlZShwbHVnaW4pOwotCQlyZXR1cm4gZXJyOwotCX0KIAlwbHVnaW4tPnRyYW5zZmVyID0gcm91dGVfdHJhbnNmZXI7Ci0JcGx1Z2luLT5zcmNfY2hhbm5lbHNfbWFzayA9IHJvdXRlX3NyY19jaGFubmVsc19tYXNrOwotCXBsdWdpbi0+ZHN0X2NoYW5uZWxzX21hc2sgPSByb3V0ZV9kc3RfY2hhbm5lbHNfbWFzazsKIAkqcl9wbHVnaW4gPSBwbHVnaW47CiAJcmV0dXJuIDA7CiB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggMjhjYTYxZWIuLjNkYTZhMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL21pbm9ycy5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMzUsNyArMzYsNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKHNuZF9wY21fZGV2aWNlcyk7CiBzdGF0aWMgTElTVF9IRUFEKHNuZF9wY21fbm90aWZ5X2xpc3QpOwotc3RhdGljIERFQ0xBUkVfTVVURVgocmVnaXN0ZXJfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChyZWdpc3Rlcl9tdXRleCk7CiAKIHN0YXRpYyBpbnQgc25kX3BjbV9mcmVlKHN0cnVjdCBzbmRfcGNtICpwY20pOwogc3RhdGljIGludCBzbmRfcGNtX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpOwpAQCAtNjcsNyArNjgsNyBAQAogCiAJCQlpZiAoZ2V0X3VzZXIoZGV2aWNlLCAoaW50IF9fdXNlciAqKWFyZykpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJCQltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlkZXZpY2UgPSBkZXZpY2UgPCAwID8gMCA6IGRldmljZSArIDE7CiAJCQl3aGlsZSAoZGV2aWNlIDwgU05EUlZfUENNX0RFVklDRVMpIHsKIAkJCQlpZiAoc25kX3BjbV9zZWFyY2goY2FyZCwgZGV2aWNlKSkKQEAgLTc2LDcgKzc3LDcgQEAKIAkJCX0KIAkJCWlmIChkZXZpY2UgPT0gU05EUlZfUENNX0RFVklDRVMpCiAJCQkJZGV2aWNlID0gLTE7Ci0JCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlpZiAocHV0X3VzZXIoZGV2aWNlLCAoaW50IF9fdXNlciAqKWFyZykpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlyZXR1cm4gMDsKQEAgLTEwMCw3ICsxMDEsNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJaWYgKGdldF91c2VyKHN1YmRldmljZSwgJmluZm8tPnN1YmRldmljZSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJCQltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlwY20gPSBzbmRfcGNtX3NlYXJjaChjYXJkLCBkZXZpY2UpOwogCQkJaWYgKHBjbSA9PSBOVUxMKSB7CiAJCQkJZXJyID0gLUVOWElPOwpAQCAtMTI1LDcgKzEyNiw3IEBACiAJCQl9CiAJCQllcnIgPSBzbmRfcGNtX2luZm9fdXNlcihzdWJzdHJlYW0sIGluZm8pOwogCQlfZXJyb3I6Ci0JCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJY2FzZSBTTkRSVl9DVExfSU9DVExfUENNX1BSRUZFUl9TVUJERVZJQ0U6CkBAIC0xNDAsNiArMTQxLDkgQEAKIAl9CiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KKworI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpICYmIGRlZmluZWQoQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUykKKwogI2RlZmluZSBTVEFURSh2KSBbU05EUlZfUENNX1NUQVRFXyMjdl0gPSAjdgogI2RlZmluZSBTVFJFQU0odikgW1NORFJWX1BDTV9TVFJFQU1fIyN2XSA9ICN2CiAjZGVmaW5lIFJFQURZKHYpIFtTTkRSVl9QQ01fUkVBRFlfIyN2XSA9ICN2CkBAIC0xOTcsNyArMjAxLDYgQEAKIAlyZXR1cm4gc25kX3BjbV9mb3JtYXRfbmFtZXNbZm9ybWF0XTsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgY2hhciAqc25kX3BjbV9zdHJlYW1fbmFtZXNbXSA9IHsKIAlTVFJFQU0oUExBWUJBQ0spLAogCVNUUkVBTShDQVBUVVJFKSwKQEAgLTI2MCw2ICsyNjMsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1MpIHx8IGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKwogc3RhdGljIGNvbnN0IGNoYXIgKnNuZF9wY21fb3NzX2Zvcm1hdF9uYW1lKGludCBmb3JtYXQpCiB7CiAJc3dpdGNoIChmb3JtYXQpIHsKQEAgLTYyMiw3ICs2MjYsNyBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCAqcHJldjsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCi0JaW5pdF9NVVRFWCgmcHN0ci0+b3NzLnNldHVwX211dGV4KTsKKwltdXRleF9pbml0KCZwc3RyLT5vc3Muc2V0dXBfbXV0ZXgpOwogI2VuZGlmCiAJcHN0ci0+c3RyZWFtID0gc3RyZWFtOwogCXBzdHItPnBjbSA9IHBjbTsKQEAgLTcxNiw3ICs3MjAsNyBAQAogCQlzbmRfcGNtX2ZyZWUocGNtKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaW5pdF9NVVRFWCgmcGNtLT5vcGVuX211dGV4KTsKKwltdXRleF9pbml0KCZwY20tPm9wZW5fbXV0ZXgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBjbS0+b3Blbl93YWl0KTsKIAlpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9QQ00sIHBjbSwgJm9wcykpIDwgMCkgewogCQlzbmRfcGNtX2ZyZWUocGNtKTsKQEAgLTkwMiw5ICs5MDYsOSBAQAogCXN0cnVjdCBzbmRfcGNtICpwY20gPSBkZXZpY2UtPmRldmljZV9kYXRhOwogCiAJc25kX2Fzc2VydChwY20gIT0gTlVMTCAmJiBkZXZpY2UgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7Ci0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlpZiAoc25kX3BjbV9zZWFyY2gocGNtLT5jYXJkLCBwY20tPmRldmljZSkpIHsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWxpc3RfYWRkX3RhaWwoJnBjbS0+bGlzdCwgJnNuZF9wY21fZGV2aWNlcyk7CkBAIC05MjgsNyArOTMyLDcgQEAKIAkJCQkJICAgICAgIHBjbSwgc3RyKSkgPCAwKQogCQl7CiAJCQlsaXN0X2RlbCgmcGNtLT5saXN0KTsKLQkJCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJZm9yIChzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbY2lkeF0uc3Vic3RyZWFtOyBzdWJzdHJlYW07IHN1YnN0cmVhbSA9IHN1YnN0cmVhbS0+bmV4dCkKQEAgLTkzOSw3ICs5NDMsNyBAQAogCQlub3RpZnkgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBzbmRfcGNtX25vdGlmeSwgbGlzdCk7CiAJCW5vdGlmeS0+bl9yZWdpc3RlcihwY20pOwogCX0KLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC05NTAsNyArOTU0LDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlpbnQgY2lkeDsKIAotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJbGlzdF9kZWxfaW5pdCgmcGNtLT5saXN0KTsKIAlmb3IgKGNpZHggPSAwOyBjaWR4IDwgMjsgY2lkeCsrKQogCQlmb3IgKHN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tjaWR4XS5zdWJzdHJlYW07IHN1YnN0cmVhbTsgc3Vic3RyZWFtID0gc3Vic3RyZWFtLT5uZXh0KQpAQCAtOTYxLDcgKzk2NSw3IEBACiAJCW5vdGlmeSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHNuZF9wY21fbm90aWZ5LCBsaXN0KTsKIAkJbm90aWZ5LT5uX2Rpc2Nvbm5lY3QocGNtKTsKIAl9Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTczLDcgKzk3Nyw3IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CiAKIAlzbmRfYXNzZXJ0KHBjbSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWxpc3RfZGVsKCZwY20tPmxpc3QpOwogCWZvciAoY2lkeCA9IDA7IGNpZHggPCAyOyBjaWR4KyspIHsKIAkJZGV2dHlwZSA9IC0xOwpAQCAtOTk0LDcgKzk5OCw3IEBACiAJCW5vdGlmeSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHNuZF9wY21fbm90aWZ5LCBsaXN0KTsKIAkJbm90aWZ5LT5uX3VucmVnaXN0ZXIocGNtKTsKIAl9Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlyZXR1cm4gc25kX3BjbV9mcmVlKHBjbSk7CiB9CiAKQEAgLTEwMDMsNyArMTAwNyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAogCXNuZF9hc3NlcnQobm90aWZ5ICE9IE5VTEwgJiYgbm90aWZ5LT5uX3JlZ2lzdGVyICE9IE5VTEwgJiYgbm90aWZ5LT5uX3VucmVnaXN0ZXIgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOwotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJaWYgKG5mcmVlKSB7CiAJCWxpc3RfZGVsKCZub3RpZnktPmxpc3QpOwogCQlsaXN0X2Zvcl9lYWNoKHAsICZzbmRfcGNtX2RldmljZXMpCkBAIC0xMDE0LDcgKzEwMTgsNyBAQAogCQlsaXN0X2Zvcl9lYWNoKHAsICZzbmRfcGNtX2RldmljZXMpCiAJCQlub3RpZnktPm5fcmVnaXN0ZXIobGlzdF9lbnRyeShwLCBzdHJ1Y3Qgc25kX3BjbSwgbGlzdCkpOwogCX0KLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDI5LDcgKzEwMzMsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaChwLCAmc25kX3BjbV9kZXZpY2VzKSB7CiAJCXBjbSA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNuZF9wY20sIGxpc3QpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIlMDJpLSUwMmk6ICVzIDogJXMiLApAQCAtMTA0Miw3ICsxMDQ2LDcgQEAKIAkJCQkgICAgcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtX2NvdW50KTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAl9Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqc25kX3BjbV9wcm9jX2VudHJ5ID0gTlVMTDsKQEAgLTExMDEsNyArMTEwNSw2IEBACiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbm90aWZ5KTsKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9vcGVuX3N1YnN0cmVhbSk7CiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fcmVsZWFzZV9zdWJzdHJlYW0pOwotRVhQT1JUX1NZTUJPTChzbmRfcGNtX2Zvcm1hdF9uYW1lKTsKICAgLyogcGNtX25hdGl2ZS5jICovCiBFWFBPUlRfU1lNQk9MKHNuZF9wY21fbGlua19yd2xvY2spOwogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCBmM2Q1ZGU3Li4wMWYxNTBmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjExMiw3ICsyMTEyLDcgQEAKIAl9CiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKCZwY20tPm9wZW5fd2FpdCwgJndhaXQpOwotCWRvd24oJnBjbS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcGNtLT5vcGVuX211dGV4KTsKIAl3aGlsZSAoMSkgewogCQllcnIgPSBzbmRfcGNtX29wZW5fZmlsZShmaWxlLCBwY20sIHN0cmVhbSwgJnBjbV9maWxlKTsKIAkJaWYgKGVyciA+PSAwKQpAQCAtMjEyNSwxNiArMjEyNSwxNiBAQAogCQl9IGVsc2UKIAkJCWJyZWFrOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcGNtLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZwY20tPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwotCQlkb3duKCZwY20tPm9wZW5fbXV0ZXgpOworCQltdXRleF9sb2NrKCZwY20tPm9wZW5fbXV0ZXgpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWVyciA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9CiAJfQogCXJlbW92ZV93YWl0X3F1ZXVlKCZwY20tPm9wZW5fd2FpdCwgJndhaXQpOwotCXVwKCZwY20tPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmcGNtLT5vcGVuX211dGV4KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfX2Vycm9yOwogCXJldHVybiBlcnI7CkBAIC0yMTYwLDkgKzIxNjAsOSBAQAogCXBjbSA9IHN1YnN0cmVhbS0+cGNtOwogCXNuZF9wY21fZHJvcChzdWJzdHJlYW0pOwogCWZhc3luY19oZWxwZXIoLTEsIGZpbGUsIDAsICZzdWJzdHJlYW0tPnJ1bnRpbWUtPmZhc3luYyk7Ci0JZG93bigmcGNtLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZwY20tPm9wZW5fbXV0ZXgpOwogCXNuZF9wY21fcmVsZWFzZV9maWxlKHBjbV9maWxlKTsKLQl1cCgmcGNtLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJnBjbS0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcGNtLT5vcGVuX3dhaXQpOwogCW1vZHVsZV9wdXQocGNtLT5jYXJkLT5tb2R1bGUpOwogCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKHBjbS0+Y2FyZCwgZmlsZSk7CkBAIC0yNTM5LDYgKzI1MzksMTQgQEAKIAkJcmV0dXJuIHNuZF9wY21fZHJhaW4oc3Vic3RyZWFtKTsKIAljYXNlIFNORFJWX1BDTV9JT0NUTF9EUk9QOgogCQlyZXR1cm4gc25kX3BjbV9kcm9wKHN1YnN0cmVhbSk7CisJY2FzZSBTTkRSVl9QQ01fSU9DVExfUEFVU0U6CisJeworCQlpbnQgcmVzOworCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOworCQlyZXMgPSBzbmRfcGNtX3BhdXNlKHN1YnN0cmVhbSwgKGludCkodW5zaWduZWQgbG9uZylhcmcpOworCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7CisJCXJldHVybiByZXM7CisJfQogCX0KIAlzbmRfcHJpbnRkKCJ1bmtub3duIGlvY3RsID0gMHgleFxuIiwgY21kKTsKIAlyZXR1cm4gLUVOT1RUWTsKQEAgLTI2MTksMTQgKzI2MjcsNiBAQAogCQlfX3B1dF91c2VyKHJlc3VsdCwgX2ZyYW1lcyk7CiAJCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogMDsKIAl9Ci0JY2FzZSBTTkRSVl9QQ01fSU9DVExfUEFVU0U6Ci0JewotCQlpbnQgcmVzOwotCQlzbmRfcGNtX3N0cmVhbV9sb2NrX2lycShzdWJzdHJlYW0pOwotCQlyZXMgPSBzbmRfcGNtX3BhdXNlKHN1YnN0cmVhbSwgKGludCkodW5zaWduZWQgbG9uZylhcmcpOwotCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7Ci0JCXJldHVybiByZXM7Ci0JfQogCX0KIAlyZXR1cm4gc25kX3BjbV9jb21tb25faW9jdGwxKHN1YnN0cmVhbSwgY21kLCBhcmcpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9yYXdtaWRpLmMgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwppbmRleCBkNGQxMjRlLi42YjdhMzY3IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3Jhd21pZGkuYworKysgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KQEAgLTU3LDcgKzU4LDcgQEAKIHN0YXRpYyBpbnQgc25kX3Jhd21pZGlfZGV2X3VucmVnaXN0ZXIoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSk7CiAKIHN0YXRpYyBMSVNUX0hFQUQoc25kX3Jhd21pZGlfZGV2aWNlcyk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChyZWdpc3Rlcl9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHJlZ2lzdGVyX211dGV4KTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaSAqc25kX3Jhd21pZGlfc2VhcmNoKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSkKIHsKQEAgLTIzNyw5ICsyMzgsOSBAQAogCiAJaWYgKHJmaWxlKQogCQlyZmlsZS0+aW5wdXQgPSByZmlsZS0+b3V0cHV0ID0gTlVMTDsKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJtaWRpID0gc25kX3Jhd21pZGlfc2VhcmNoKGNhcmQsIGRldmljZSk7Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlpZiAocm1pZGkgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIF9fZXJyb3IxOwpAQCAtMjQ5LDcgKzI1MCw3IEBACiAJCWdvdG8gX19lcnJvcjE7CiAJfQogCWlmICghKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSykpCi0JCWRvd24oJnJtaWRpLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7CiAJCWlmICghKHJtaWRpLT5pbmZvX2ZsYWdzICYgU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUKSkgewogCQkJZXJyID0gLUVOWElPOwpAQCAtMzU5LDcgKzM2MCw3IEBACiAJCXNvdXRwdXQgPSBOVUxMOwogCX0KIAlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQl1cCgmcm1pZGktPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKIAlpZiAocmZpbGUpIHsKIAkJcmZpbGUtPnJtaWRpID0gcm1pZGk7CiAJCXJmaWxlLT5pbnB1dCA9IHNpbnB1dDsKQEAgLTM3NCw3ICszNzUsNyBAQAogCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc291dHB1dCk7CiAJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKIAlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQl1cCgmcm1pZGktPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKICAgICAgIF9fZXJyb3IxOgogCXJldHVybiBlcnI7CiB9CkBAIC00MjIsNyArNDIzLDcgQEAKIAl9CiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCWFkZF93YWl0X3F1ZXVlKCZybWlkaS0+b3Blbl93YWl0LCAmd2FpdCk7Ci0JZG93bigmcm1pZGktPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKIAl3aGlsZSAoMSkgewogCQlzdWJkZXZpY2UgPSAtMTsKIAkJZG93bl9yZWFkKCZjYXJkLT5jb250cm9sc19yd3NlbSk7CkBAIC00NDYsOSArNDQ3LDkgQEAKIAkJfSBlbHNlCiAJCQlicmVhazsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJdXAoJnJtaWRpLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7Ci0JCWRvd24oJnJtaWRpLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWVyciA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwpAQCAtNDY3LDcgKzQ2OCw3IEBACiAJCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKGNhcmQsIGZpbGUpOwogCQlrZnJlZShyYXdtaWRpX2ZpbGUpOwogCX0KLQl1cCgmcm1pZGktPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ4MCw3ICs0ODEsNyBAQAogCXNuZF9hc3NlcnQocmZpbGUgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAJc25kX2Fzc2VydChyZmlsZS0+aW5wdXQgIT0gTlVMTCB8fCByZmlsZS0+b3V0cHV0ICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCXJtaWRpID0gcmZpbGUtPnJtaWRpOwotCWRvd24oJnJtaWRpLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CiAJaWYgKHJmaWxlLT5pbnB1dCAhPSBOVUxMKSB7CiAJCXN1YnN0cmVhbSA9IHJmaWxlLT5pbnB1dDsKIAkJcmZpbGUtPmlucHV0ID0gTlVMTDsKQEAgLTUxNCw3ICs1MTUsNyBAQAogCQl9CiAJCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZC0tOwogCX0KLQl1cCgmcm1pZGktPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzYsOSArNTc3LDkgQEAKIAlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcm1pZGkgPSBzbmRfcmF3bWlkaV9zZWFyY2goY2FyZCwgaW5mby0+ZGV2aWNlKTsKLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWlmICghcm1pZGkpCiAJCXJldHVybiAtRU5YSU87CiAJaWYgKGluZm8tPnN0cmVhbSA8IDAgfHwgaW5mby0+c3RyZWFtID4gMSkKQEAgLTgxOCw3ICs4MTksNyBAQAogCQkKIAkJaWYgKGdldF91c2VyKGRldmljZSwgKGludCBfX3VzZXIgKilhcmdwKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJZGV2aWNlID0gZGV2aWNlIDwgMCA/IDAgOiBkZXZpY2UgKyAxOwogCQl3aGlsZSAoZGV2aWNlIDwgU05EUlZfUkFXTUlESV9ERVZJQ0VTKSB7CiAJCQlpZiAoc25kX3Jhd21pZGlfc2VhcmNoKGNhcmQsIGRldmljZSkpCkBAIC04MjcsNyArODI4LDcgQEAKIAkJfQogCQlpZiAoZGV2aWNlID09IFNORFJWX1JBV01JRElfREVWSUNFUykKIAkJCWRldmljZSA9IC0xOwotCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJaWYgKHB1dF91c2VyKGRldmljZSwgKGludCBfX3VzZXIgKilhcmdwKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKQEAgLTEzMTQsNyArMTMxNSw3IEBACiAKIAlybWlkaSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiJXNcblxuIiwgcm1pZGktPm5hbWUpOwotCWRvd24oJnJtaWRpLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CiAJaWYgKHJtaWRpLT5pbmZvX2ZsYWdzICYgU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCkgewogCQlsaXN0X2Zvcl9lYWNoKGxpc3QsICZybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbXMpIHsKIAkJCXN1YnN0cmVhbSA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSwgbGlzdCk7CkBAIC0xMzU1LDcgKzEzNTYsNyBAQAogCQkJfQogCQl9CiAJfQotCXVwKCZybWlkaS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CiB9CiAKIC8qCkBAIC0xNDM2LDcgKzE0MzcsNyBAQAogCX0KIAlybWlkaS0+Y2FyZCA9IGNhcmQ7CiAJcm1pZGktPmRldmljZSA9IGRldmljZTsKLQlpbml0X01VVEVYKCZybWlkaS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmcm1pZGktPm9wZW5fbXV0ZXgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJtaWRpLT5vcGVuX3dhaXQpOwogCWlmIChpZCAhPSBOVUxMKQogCQlzdHJsY3B5KHJtaWRpLT5pZCwgaWQsIHNpemVvZihybWlkaS0+aWQpKTsKQEAgLTE1MDcsOSArMTUwOCw5IEBACiAKIAlpZiAocm1pZGktPmRldmljZSA+PSBTTkRSVl9SQVdNSURJX0RFVklDRVMpCiAJCXJldHVybiAtRU5PTUVNOwotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJaWYgKHNuZF9yYXdtaWRpX3NlYXJjaChybWlkaS0+Y2FyZCwgcm1pZGktPmRldmljZSkpIHsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWxpc3RfYWRkX3RhaWwoJnJtaWRpLT5saXN0LCAmc25kX3Jhd21pZGlfZGV2aWNlcyk7CkBAIC0xNTE5LDE0ICsxNTIwLDE0IEBACiAJCQkJICAgICAgICZzbmRfcmF3bWlkaV9mX29wcywgcm1pZGksIG5hbWUpKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIHJhd21pZGkgZGV2aWNlICVpOiVpXG4iLCBybWlkaS0+Y2FyZC0+bnVtYmVyLCBybWlkaS0+ZGV2aWNlKTsKIAkJbGlzdF9kZWwoJnJtaWRpLT5saXN0KTsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChybWlkaS0+b3BzICYmIHJtaWRpLT5vcHMtPmRldl9yZWdpc3RlciAmJgogCSAgICAoZXJyID0gcm1pZGktPm9wcy0+ZGV2X3JlZ2lzdGVyKHJtaWRpKSkgPCAwKSB7CiAJCXNuZF91bnJlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9SQVdNSURJLCBybWlkaS0+Y2FyZCwgcm1pZGktPmRldmljZSk7CiAJCWxpc3RfZGVsKCZybWlkaS0+bGlzdCk7Ci0JCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlyZXR1cm4gZXJyOwogCX0KICNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKQEAgLTE1NTMsNyArMTU1NCw3IEBACiAJCX0KIAl9CiAjZW5kaWYgLyogQ09ORklHX1NORF9PU1NFTVVMICovCi0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlzcHJpbnRmKG5hbWUsICJtaWRpJWQiLCBybWlkaS0+ZGV2aWNlKTsKIAllbnRyeSA9IHNuZF9pbmZvX2NyZWF0ZV9jYXJkX2VudHJ5KHJtaWRpLT5jYXJkLCBuYW1lLCBybWlkaS0+Y2FyZC0+cHJvY19yb290KTsKIAlpZiAoZW50cnkpIHsKQEAgLTE1ODMsOSArMTU4NCw5IEBACiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CiAKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWxpc3RfZGVsX2luaXQoJnJtaWRpLT5saXN0KTsKLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTk0LDcgKzE1OTUsNyBAQAogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGkgPSBkZXZpY2UtPmRldmljZV9kYXRhOwogCiAJc25kX2Fzc2VydChybWlkaSAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWxpc3RfZGVsKCZybWlkaS0+bGlzdCk7CiAJaWYgKHJtaWRpLT5wcm9jX2VudHJ5KSB7CiAJCXNuZF9pbmZvX3VucmVnaXN0ZXIocm1pZGktPnByb2NfZW50cnkpOwpAQCAtMTYxNiw3ICsxNjE3LDcgQEAKIAlpZiAocm1pZGktPm9wcyAmJiBybWlkaS0+b3BzLT5kZXZfdW5yZWdpc3RlcikKIAkJcm1pZGktPm9wcy0+ZGV2X3VucmVnaXN0ZXIocm1pZGkpOwogCXNuZF91bnJlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9SQVdNSURJLCBybWlkaS0+Y2FyZCwgcm1pZGktPmRldmljZSk7Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfU0VRVUVOQ0VSKSB8fCAoZGVmaW5lZChNT0RVTEUpICYmIGRlZmluZWQoQ09ORklHX1NORF9TRVFVRU5DRVJfTU9EVUxFKSkKIAlpZiAocm1pZGktPnNlcV9kZXYpIHsKIAkJc25kX2RldmljZV9mcmVlKHJtaWRpLT5jYXJkLCBybWlkaS0+c2VxX2Rldik7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zcy5jIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3MuYwppbmRleCBjOThmMGJhLi5iOTkxOTc4IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL21pbm9ycy5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTEyNCw3ICsxMjUsNyBAQAogICogQUxTQSBtaW5vciBkZXZpY2UgaW50ZXJmYWNlCiAgKi8KIAotc3RhdGljIERFQ0xBUkVfTVVURVgocmVnaXN0ZXJfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChyZWdpc3Rlcl9tdXRleCk7CiAKIHN0YXRpYyBpbnQKIG9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTEzNiw5ICsxMzcsOSBAQAogCWVsc2UKIAkJbGV2ZWwgPSBTTkRSVl9TRVFfT1NTX01PREVfU1lOVEg7CiAKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJjID0gc25kX3NlcV9vc3Nfb3BlbihmaWxlLCBsZXZlbCk7Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAogCXJldHVybiByYzsKIH0KQEAgLTE1Myw5ICsxNTQsOSBAQAogCiAJc25kX3NlcV9vc3NfZHJhaW5fd3JpdGUoZHApOwogCi0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlzbmRfc2VxX29zc19yZWxlYXNlKGRwKTsKLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjQsMTMgKzIyNSwxMyBAQAogewogCWludCByYzsKIAotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJaWYgKChyYyA9IHNuZF9yZWdpc3Rlcl9vc3NfZGV2aWNlKFNORFJWX09TU19ERVZJQ0VfVFlQRV9TRVFVRU5DRVIsCiAJCQkJCSAgTlVMTCwgMCwKIAkJCQkJICAmc2VxX29zc19mX29wcywgTlVMTCwKIAkJCQkJICBTTkRSVl9TRVFfT1NTX0RFVk5BTUUpKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2FuJ3QgcmVnaXN0ZXIgZGV2aWNlIHNlcVxuIik7Ci0JCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlyZXR1cm4gcmM7CiAJfQogCWlmICgocmMgPSBzbmRfcmVnaXN0ZXJfb3NzX2RldmljZShTTkRSVl9PU1NfREVWSUNFX1RZUEVfTVVTSUMsCkBAIC0yMzksMjQgKzI0MCwyNCBAQAogCQkJCQkgIFNORFJWX1NFUV9PU1NfREVWTkFNRSkpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWdpc3RlciBkZXZpY2UgbXVzaWNcbiIpOwogCQlzbmRfdW5yZWdpc3Rlcl9vc3NfZGV2aWNlKFNORFJWX09TU19ERVZJQ0VfVFlQRV9TRVFVRU5DRVIsIE5VTEwsIDApOwotCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIHJjOwogCX0KIAlkZWJ1Z19wcmludGsoKCJkZXZpY2UgcmVnaXN0ZXJlZFxuIikpOwotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCiB1bnJlZ2lzdGVyX2RldmljZSh2b2lkKQogewotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJZGVidWdfcHJpbnRrKCgiZGV2aWNlIHVucmVnaXN0ZXJlZFxuIikpOwogCWlmIChzbmRfdW5yZWdpc3Rlcl9vc3NfZGV2aWNlKFNORFJWX09TU19ERVZJQ0VfVFlQRV9NVVNJQywgTlVMTCwgMCkgPCAwKQkJCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImVycm9yIHVucmVnaXN0ZXIgZGV2aWNlIG11c2ljXG4iKTsKIAlpZiAoc25kX3VucmVnaXN0ZXJfb3NzX2RldmljZShTTkRSVl9PU1NfREVWSUNFX1RZUEVfU0VRVUVOQ0VSLCBOVUxMLCAwKSA8IDApCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImVycm9yIHVucmVnaXN0ZXIgZGV2aWNlIHNlcVxuIik7Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIH0KIAogLyoKQEAgLTI3MCwxMiArMjcxLDEyIEBACiBzdGF0aWMgdm9pZAogaW5mb19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZikKIHsKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXNuZF9pcHJpbnRmKGJ1ZiwgIk9TUyBzZXF1ZW5jZXIgZW11bGF0aW9uIHZlcnNpb24gJXNcbiIsIFNORFJWX1NFUV9PU1NfVkVSU0lPTl9TVFIpOwogCXNuZF9zZXFfb3NzX3N5c3RlbV9pbmZvX3JlYWQoYnVmKTsKIAlzbmRfc2VxX29zc19zeW50aF9pbmZvX3JlYWQoYnVmKTsKIAlzbmRfc2VxX29zc19taWRpX2luZm9fcmVhZChidWYpOwotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCmluZGV4IGZkMjAzMmUuLmJiMTVkOWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKQEAgLTY3LDcgKzY3LDcgQEAKICNkZWZpbmUgU05EUlZfU0VRX0xGTEdfT1BFTgkoU05EUlZfU0VRX0xGTEdfSU5QVVR8U05EUlZfU0VRX0xGTEdfT1VUUFVUKQogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsaWVudHNfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChyZWdpc3Rlcl9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHJlZ2lzdGVyX211dGV4KTsKIAogLyoKICAqIGNsaWVudCB0YWJsZQpAQCAtMjM3LDcgKzIzNyw3IEBACiAJY2xpZW50LT50eXBlID0gTk9fQ0xJRU5UOwogCXNuZF91c2VfbG9ja19pbml0KCZjbGllbnQtPnVzZV9sb2NrKTsKIAlyd2xvY2tfaW5pdCgmY2xpZW50LT5wb3J0c19sb2NrKTsKLQlpbml0X01VVEVYKCZjbGllbnQtPnBvcnRzX211dGV4KTsKKwltdXRleF9pbml0KCZjbGllbnQtPnBvcnRzX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5wb3J0c19saXN0X2hlYWQpOwogCiAJLyogZmluZCBmcmVlIHNsb3QgaW4gdGhlIGNsaWVudCB0YWJsZSAqLwpAQCAtMjkwLDcgKzI5MCw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcV9mcmVlX2NsaWVudChzdHJ1Y3Qgc25kX3NlcV9jbGllbnQgKiBjbGllbnQpCiB7Ci0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlzd2l0Y2ggKGNsaWVudC0+dHlwZSkgewogCWNhc2UgTk9fQ0xJRU5UOgogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiU2VxOiBUcnlpbmcgdG8gZnJlZSB1bnVzZWQgY2xpZW50ICVkXG4iLApAQCAtMzA2LDcgKzMwNiw3IEBACiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIlNlcTogVHJ5aW5nIHRvIGZyZWUgY2xpZW50ICVkIHdpdGggdW5kZWZpbmVkIHR5cGUgPSAlZFxuIiwKIAkJCSAgIGNsaWVudC0+bnVtYmVyLCBjbGllbnQtPnR5cGUpOwogCX0KLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCiAJc25kX3NlcV9zeXN0ZW1fY2xpZW50X2V2X2NsaWVudF9leGl0KGNsaWVudC0+bnVtYmVyKTsKIH0KQEAgLTMyMiwxMSArMzIyLDExIEBACiAJc3RydWN0IHNuZF9zZXFfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNuZF9zZXFfdXNlcl9jbGllbnQgKnVzZXI7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZyZWdpc3Rlcl9tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmVnaXN0ZXJfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCWNsaWVudCA9IHNlcV9jcmVhdGVfY2xpZW50MSgtMSwgU05EUlZfU0VRX0RFRkFVTFRfRVZFTlRTKTsKIAlpZiAoY2xpZW50ID09IE5VTEwpIHsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwkvKiBmYWlsdXJlIGNvZGUgKi8KIAl9CiAKQEAgLTM0NiwxNCArMzQ2LDE0IEBACiAJCWlmICh1c2VyLT5maWZvID09IE5VTEwpIHsKIAkJCXNlcV9mcmVlX2NsaWVudDEoY2xpZW50KTsKIAkJCWtmcmVlKGNsaWVudCk7Ci0JCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0KIAogCXVzYWdlX2FsbG9jKCZjbGllbnRfdXNhZ2UsIDEpOwogCWNsaWVudC0+dHlwZSA9IFVTRVJfQ0xJRU5UOwotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAKIAljID0gY2xpZW50LT5udW1iZXI7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OwpAQCAtMTc0Myw3ICsxNzQzLDcgQEAKIAlpZiAocXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZxdWV1ZS0+dGltZXJfbXV0ZXgpKSB7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcXVldWUtPnRpbWVyX211dGV4KSkgewogCQlxdWV1ZWZyZWUocXVldWUpOwogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCX0KQEAgLTE3NTYsNyArMTc1Niw3IEBACiAJCXRpbWVyLnUuYWxzYS5pZCA9IHRtci0+YWxzYV9pZDsKIAkJdGltZXIudS5hbHNhLnJlc29sdXRpb24gPSB0bXItPnByZWZlcnJlZF9yZXNvbHV0aW9uOwogCX0KLQl1cCgmcXVldWUtPnRpbWVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnF1ZXVlLT50aW1lcl9tdXRleCk7CiAJcXVldWVmcmVlKHF1ZXVlKTsKIAkKIAlpZiAoY29weV90b191c2VyKGFyZywgJnRpbWVyLCBzaXplb2YodGltZXIpKSkKQEAgLTE3ODUsNyArMTc4NSw3IEBACiAJCXEgPSBxdWV1ZXB0cih0aW1lci5xdWV1ZSk7CiAJCWlmIChxID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOWElPOwotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZxLT50aW1lcl9tdXRleCkpIHsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcS0+dGltZXJfbXV0ZXgpKSB7CiAJCQlxdWV1ZWZyZWUocSk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9CkBAIC0xNzk3LDcgKzE3OTcsNyBAQAogCQkJdG1yLT5wcmVmZXJyZWRfcmVzb2x1dGlvbiA9IHRpbWVyLnUuYWxzYS5yZXNvbHV0aW9uOwogCQl9CiAJCXJlc3VsdCA9IHNuZF9zZXFfcXVldWVfdGltZXJfb3Blbih0aW1lci5xdWV1ZSk7Ci0JCXVwKCZxLT50aW1lcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcS0+dGltZXJfbXV0ZXgpOwogCQlxdWV1ZWZyZWUocSk7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTE4NjYsOCArMTg2Niw3IEBACiAJaW5mby5vdXRwdXRfcG9vbCA9IGNwdHItPnBvb2wtPnNpemU7CiAJaW5mby5vdXRwdXRfcm9vbSA9IGNwdHItPnBvb2wtPnJvb207CiAJaW5mby5vdXRwdXRfZnJlZSA9IGluZm8ub3V0cHV0X3Bvb2w7Ci0JaWYgKGNwdHItPnBvb2wpCi0JCWluZm8ub3V0cHV0X2ZyZWUgPSBzbmRfc2VxX3VudXNlZF9jZWxscyhjcHRyLT5wb29sKTsKKwlpbmZvLm91dHB1dF9mcmVlID0gc25kX3NlcV91bnVzZWRfY2VsbHMoY3B0ci0+cG9vbCk7CiAJaWYgKGNwdHItPnR5cGUgPT0gVVNFUl9DTElFTlQpIHsKIAkJaW5mby5pbnB1dF9wb29sID0gY3B0ci0+ZGF0YS51c2VyLmZpZm9fcG9vbF9zaXplOwogCQlpbmZvLmlucHV0X2ZyZWUgPSBpbmZvLmlucHV0X3Bvb2w7CkBAIC0yMjMwLDcgKzIyMjksNyBAQAogCWlmIChjYXJkID09IE5VTEwgJiYgY2xpZW50X2luZGV4ID49IFNORFJWX1NFUV9HTE9CQUxfQ0xJRU5UUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZyZWdpc3Rlcl9tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmVnaXN0ZXJfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJaWYgKGNhcmQpIHsKQEAgLTIyNDMsNyArMjI0Miw3IEBACiAJLyogZW1wdHkgd3JpdGUgcXVldWUgYXMgZGVmYXVsdCAqLwogCWNsaWVudCA9IHNlcV9jcmVhdGVfY2xpZW50MShjbGllbnRfaW5kZXgsIDApOwogCWlmIChjbGllbnQgPT0gTlVMTCkgewotCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIC1FQlVTWTsJLyogZmFpbHVyZSBjb2RlICovCiAJfQogCXVzYWdlX2FsbG9jKCZjbGllbnRfdXNhZ2UsIDEpOwpAQCAtMjI1Niw3ICsyMjU1LDcgQEAKIAl2YV9lbmQoYXJncyk7CiAKIAljbGllbnQtPnR5cGUgPSBLRVJORUxfQ0xJRU5UOwotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAKIAkvKiBtYWtlIG90aGVycyBhd2FyZSB0aGlzIG5ldyBjbGllbnQgKi8KIAlzbmRfc2VxX3N5c3RlbV9jbGllbnRfZXZfY2xpZW50X3N0YXJ0KGNsaWVudC0+bnVtYmVyKTsKQEAgLTI0NjQsNyArMjQ2Myw3IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKIAotCWRvd24oJmNsaWVudC0+cG9ydHNfbXV0ZXgpOworCW11dGV4X2xvY2soJmNsaWVudC0+cG9ydHNfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2gobCwgJmNsaWVudC0+cG9ydHNfbGlzdF9oZWFkKSB7CiAJCXN0cnVjdCBzbmRfc2VxX2NsaWVudF9wb3J0ICpwID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3Qgc25kX3NlcV9jbGllbnRfcG9ydCwgbGlzdCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgUG9ydCAlM2QgOiBcIiVzXCIgKCVjJWMlYyVjKVxuIiwKQEAgLTI0NzYsNyArMjQ3NSw3IEBACiAJCXNuZF9zZXFfaW5mb19kdW1wX3N1YnNjcmliZXJzKGJ1ZmZlciwgJnAtPmNfc3JjLCAxLCAiICAgIENvbm5lY3RpbmcgVG86ICIpOwogCQlzbmRfc2VxX2luZm9fZHVtcF9zdWJzY3JpYmVycyhidWZmZXIsICZwLT5jX2Rlc3QsIDAsICIgICAgQ29ubmVjdGVkIEZyb206ICIpOwogCX0KLQl1cCgmY2xpZW50LT5wb3J0c19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPnBvcnRzX211dGV4KTsKIH0KIAogCkBAIC0yNTUwLDE2ICsyNTQ5LDE2IEBACiB7CiAJaW50IGVycjsKIAotCWlmIChkb3duX2ludGVycnVwdGlibGUoJnJlZ2lzdGVyX211dGV4KSkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZyZWdpc3Rlcl9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlpZiAoKGVyciA9IHNuZF9yZWdpc3Rlcl9kZXZpY2UoU05EUlZfREVWSUNFX1RZUEVfU0VRVUVOQ0VSLCBOVUxMLCAwLAogCQkJCSAgICAgICAmc25kX3NlcV9mX29wcywgTlVMTCwgInNlcSIpKSA8IDApIHsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiBlcnI7CiAJfQogCQotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuaCBiL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuaAppbmRleCA0NTAwOTFjLi41ZTA0ZTIwZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5oCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9jbGllbnRtZ3IuaApAQCAtNTgsNyArNTgsNyBAQAogCWludCBudW1fcG9ydHM7CQkvKiBudW1iZXIgb2YgcG9ydHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzX2xpc3RfaGVhZDsKIAlyd2xvY2tfdCBwb3J0c19sb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgcG9ydHNfbXV0ZXg7CisJc3RydWN0IG11dGV4IHBvcnRzX211dGV4OwogCWludCBjb252ZXJ0MzI7CQkvKiBjb252ZXJ0IDMyLT42NGJpdCAqLwogCiAJLyogb3V0cHV0IHBvb2wgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9kZXZpY2UuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9kZXZpY2UuYwppbmRleCA5ZWNlNDQzLi5kOWEzZTVhIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfZGV2aWNlLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX2RldmljZS5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogTU9EVUxFX0FVVEhPUigiVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIHNlcXVlbmNlciBkZXZpY2UgbWFuYWdlbWVudCIpOwpAQCAtNjksNyArNzAsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X2xpc3Q7CS8qIGxpc3Qgb2YgZGV2aWNlcyAqLwogCWludCBudW1fZGV2aWNlczsJLyogbnVtYmVyIG9mIGFzc29jaWF0ZWQgZGV2aWNlcyAqLwogCWludCBudW1faW5pdF9kZXZpY2VzOwkvKiBudW1iZXIgb2YgaW5pdGlhbGl6ZWQgZGV2aWNlcyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgcmVnX211dGV4OworCXN0cnVjdCBtdXRleCByZWdfbXV0ZXg7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIG5leHQgZHJpdmVyICovCiB9OwpAQCAtNzcsNyArNzgsNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKG9wc2xpc3QpOwogc3RhdGljIGludCBudW1fb3BzOwotc3RhdGljIERFQ0xBUkVfTVVURVgob3BzX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgob3BzX211dGV4KTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqaW5mb19lbnRyeSA9IE5VTEw7CiAjZW5kaWYKQEAgLTEwOCw3ICsxMDksNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CiAKLQlkb3duKCZvcHNfbXV0ZXgpOworCW11dGV4X2xvY2soJm9wc19tdXRleCk7CiAJbGlzdF9mb3JfZWFjaChoZWFkLCAmb3BzbGlzdCkgewogCQlzdHJ1Y3Qgb3BzX2xpc3QgKm9wcyA9IGxpc3RfZW50cnkoaGVhZCwgc3RydWN0IG9wc19saXN0LCBsaXN0KTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAic25kLSVzJXMlcyVzLCVkXG4iLApAQCAtMTE4LDcgKzExOSw3IEBACiAJCQkJb3BzLT5kcml2ZXIgJiBEUklWRVJfTE9DS0VEID8gIixsb2NrZWQiIDogIiIsCiAJCQkJb3BzLT5udW1fZGV2aWNlcyk7CiAJfQotCXVwKCZvcHNfbXV0ZXgpOwkKKwltdXRleF91bmxvY2soJm9wc19tdXRleCk7CiB9CiAjZW5kaWYKICAKQEAgLTE1NCwyMCArMTU1LDIwIEBACiAJaWYgKCEgY3VycmVudC0+ZnMtPnJvb3QpCiAJCXJldHVybjsKIAotCWRvd24oJm9wc19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoKGhlYWQsICZvcHNsaXN0KSB7CiAJCXN0cnVjdCBvcHNfbGlzdCAqb3BzID0gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3Qgb3BzX2xpc3QsIGxpc3QpOwogCQlpZiAoISAob3BzLT5kcml2ZXIgJiBEUklWRVJfTE9BREVEKSAmJgogCQkgICAgISAob3BzLT5kcml2ZXIgJiBEUklWRVJfUkVRVUVTVEVEKSkgewogCQkJb3BzLT51c2VkKys7Ci0JCQl1cCgmb3BzX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmb3BzX211dGV4KTsKIAkJCW9wcy0+ZHJpdmVyIHw9IERSSVZFUl9SRVFVRVNURUQ7CiAJCQlyZXF1ZXN0X21vZHVsZSgic25kLSVzIiwgb3BzLT5pZCk7Ci0JCQlkb3duKCZvcHNfbXV0ZXgpOworCQkJbXV0ZXhfbG9jaygmb3BzX211dGV4KTsKIAkJCW9wcy0+dXNlZC0tOwogCQl9CiAJfQotCXVwKCZvcHNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BzX211dGV4KTsKICNlbmRpZgogfQogCkBAIC0yMTQsMTAgKzIxNSwxMCBAQAogCWRldi0+c3RhdHVzID0gU05EUlZfU0VRX0RFVklDRV9GUkVFOwogCiAJLyogYWRkIHRoaXMgZGV2aWNlIHRvIHRoZSBsaXN0ICovCi0JZG93bigmb3BzLT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJm9wcy0+cmVnX211dGV4KTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmxpc3QsICZvcHMtPmRldl9saXN0KTsKIAlvcHMtPm51bV9kZXZpY2VzKys7Ci0JdXAoJm9wcy0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJm9wcy0+cmVnX211dGV4KTsKIAogCXVubG9ja19kcml2ZXIob3BzKTsKIAkKQEAgLTI0NiwxMCArMjQ3LDEwIEBACiAJCXJldHVybiAtRU5YSU87CiAKIAkvKiByZW1vdmUgdGhlIGRldmljZSBmcm9tIHRoZSBsaXN0ICovCi0JZG93bigmb3BzLT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJm9wcy0+cmVnX211dGV4KTsKIAlsaXN0X2RlbCgmZGV2LT5saXN0KTsKIAlvcHMtPm51bV9kZXZpY2VzLS07Ci0JdXAoJm9wcy0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJm9wcy0+cmVnX211dGV4KTsKIAogCWZyZWVfZGV2aWNlKGRldiwgb3BzKTsKIAlpZiAoZGV2LT5wcml2YXRlX2ZyZWUpCkBAIC0zNDQsNyArMzQ1LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlkb3duKCZvcHMtPnJlZ19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BzLT5yZWdfbXV0ZXgpOwogCS8qIGNvcHkgZHJpdmVyIG9wZXJhdG9ycyAqLwogCW9wcy0+b3BzID0gKmVudHJ5OwogCW9wcy0+ZHJpdmVyIHw9IERSSVZFUl9MT0FERUQ7CkBAIC0zNTUsNyArMzU2LDcgQEAKIAkJc3RydWN0IHNuZF9zZXFfZGV2aWNlICpkZXYgPSBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCBzbmRfc2VxX2RldmljZSwgbGlzdCk7CiAJCWluaXRfZGV2aWNlKGRldiwgb3BzKTsKIAl9Ci0JdXAoJm9wcy0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJm9wcy0+cmVnX211dGV4KTsKIAogCXVubG9ja19kcml2ZXIob3BzKTsKIAlzbmRfc2VxX2F1dG9sb2FkX3VubG9jaygpOwpAQCAtMzc4LDE3ICszNzksMTcgQEAKIAogCS8qIHNldCB1cCBkcml2ZXIgZW50cnkgKi8KIAlzdHJsY3B5KG9wcy0+aWQsIGlkLCBzaXplb2Yob3BzLT5pZCkpOwotCWluaXRfTVVURVgoJm9wcy0+cmVnX211dGV4KTsKKwltdXRleF9pbml0KCZvcHMtPnJlZ19tdXRleCk7CiAJb3BzLT5kcml2ZXIgPSBEUklWRVJfRU1QVFk7CiAJSU5JVF9MSVNUX0hFQUQoJm9wcy0+ZGV2X2xpc3QpOwogCS8qIGxvY2sgdGhpcyBpbnN0YW5jZSAqLwogCW9wcy0+dXNlZCA9IDE7CiAKIAkvKiByZWdpc3RlciBkcml2ZXIgZW50cnkgKi8KLQlkb3duKCZvcHNfbXV0ZXgpOworCW11dGV4X2xvY2soJm9wc19tdXRleCk7CiAJbGlzdF9hZGRfdGFpbCgmb3BzLT5saXN0LCAmb3BzbGlzdCk7CiAJbnVtX29wcysrOwotCXVwKCZvcHNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BzX211dGV4KTsKIAogCXJldHVybiBvcHM7CiB9CkBAIC00MTQsNyArNDE1LDcgQEAKIAl9CiAKIAkvKiBjbG9zZSBhbmQgcmVsZWFzZSBhbGwgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkcml2ZXIgKi8KLQlkb3duKCZvcHMtPnJlZ19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BzLT5yZWdfbXV0ZXgpOwogCW9wcy0+ZHJpdmVyIHw9IERSSVZFUl9MT0NLRUQ7IC8qIGRvIG5vdCByZW1vdmUgdGhpcyBkcml2ZXIgcmVjdXJzaXZlbHkgKi8KIAlsaXN0X2Zvcl9lYWNoKGhlYWQsICZvcHMtPmRldl9saXN0KSB7CiAJCXN0cnVjdCBzbmRfc2VxX2RldmljZSAqZGV2ID0gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3Qgc25kX3NlcV9kZXZpY2UsIGxpc3QpOwpAQCAtNDI1LDcgKzQyNiw3IEBACiAJaWYgKG9wcy0+bnVtX2luaXRfZGV2aWNlcyA+IDApCiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImZyZWVfZHJpdmVyOiBpbml0X2RldmljZXMgPiAwISEgKCVkKVxuIiwKIAkJCSAgIG9wcy0+bnVtX2luaXRfZGV2aWNlcyk7Ci0JdXAoJm9wcy0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJm9wcy0+cmVnX211dGV4KTsKIAogCXVubG9ja19kcml2ZXIob3BzKTsKIApAQCAtNDQzLDcgKzQ0NCw3IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAotCWRvd24oJm9wc19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BzX211dGV4KTsKIAloZWFkID0gb3BzbGlzdC5uZXh0OwogCXdoaWxlIChoZWFkICE9ICZvcHNsaXN0KSB7CiAJCXN0cnVjdCBvcHNfbGlzdCAqb3BzID0gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3Qgb3BzX2xpc3QsIGxpc3QpOwpAQCAtNDU2LDcgKzQ1Nyw3IEBACiAJCX0gZWxzZQogCQkJaGVhZCA9IGhlYWQtPm5leHQ7CiAJfQotCXVwKCZvcHNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BzX211dGV4KTsKIH0KIAogLyoKQEAgLTUxOSwxNiArNTIwLDE2IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAotCWRvd24oJm9wc19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoKGhlYWQsICZvcHNsaXN0KSB7CiAJCXN0cnVjdCBvcHNfbGlzdCAqb3BzID0gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3Qgb3BzX2xpc3QsIGxpc3QpOwogCQlpZiAoc3RyY21wKG9wcy0+aWQsIGlkKSA9PSAwKSB7CiAJCQlvcHMtPnVzZWQrKzsKLQkJCXVwKCZvcHNfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZvcHNfbXV0ZXgpOwogCQkJcmV0dXJuIG9wczsKIAkJfQogCX0KLQl1cCgmb3BzX211dGV4KTsKKwltdXRleF91bmxvY2soJm9wc19tdXRleCk7CiAJaWYgKGNyZWF0ZV9pZl9lbXB0eSkKIAkJcmV0dXJuIGNyZWF0ZV9kcml2ZXIoaWQpOwogCXJldHVybiBOVUxMOwpAQCAtNTM2LDkgKzUzNyw5IEBACiAKIHN0YXRpYyB2b2lkIHVubG9ja19kcml2ZXIoc3RydWN0IG9wc19saXN0ICpvcHMpCiB7Ci0JZG93bigmb3BzX211dGV4KTsKKwltdXRleF9sb2NrKCZvcHNfbXV0ZXgpOwogCW9wcy0+dXNlZC0tOwotCXVwKCZvcHNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BzX211dGV4KTsKIH0KIAogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfaW5zdHIuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9pbnN0ci5jCmluZGV4IDQ4NzQ1MjAuLmYzMGQxNzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9pbnN0ci5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9pbnN0ci5jCkBAIC0zNiw3ICszNiw3IEBACiAJaWYgKCEobGlzdC0+ZmxhZ3MgJiBTTkRSVl9TRVFfSU5TVFJfRkxHX0RJUkVDVCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3QtPm9wc19sb2NrLCBsaXN0LT5vcHNfZmxhZ3MpOwogCX0gZWxzZSB7Ci0JCWRvd24oJmxpc3QtPm9wc19tdXRleCk7CisJCW11dGV4X2xvY2soJmxpc3QtPm9wc19tdXRleCk7CiAJfQogfQogCkBAIC00NSw3ICs0NSw3IEBACiAJaWYgKCEobGlzdC0+ZmxhZ3MgJiBTTkRSVl9TRVFfSU5TVFJfRkxHX0RJUkVDVCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+b3BzX2xvY2ssIGxpc3QtPm9wc19mbGFncyk7CiAJfSBlbHNlIHsKLQkJdXAoJmxpc3QtPm9wc19tdXRleCk7CisJCW11dGV4X3VubG9jaygmbGlzdC0+b3BzX211dGV4KTsKIAl9CiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmxpc3QtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZsaXN0LT5vcHNfbG9jayk7Ci0JaW5pdF9NVVRFWCgmbGlzdC0+b3BzX211dGV4KTsKKwltdXRleF9pbml0KCZsaXN0LT5vcHNfbXV0ZXgpOwogCWxpc3QtPm93bmVyID0gLTE7CiAJcmV0dXJuIGxpc3Q7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jIGIvc291bmQvY29yZS9zZXEvc2VxX21pZGkuYwppbmRleCBjZTBkZjg2Li45Y2FhMTM3IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KICNpbmNsdWRlIDxzb3VuZC9zZXFfa2VybmVsLmg+CkBAIC03MCw3ICs3MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNlcV9taWRpc3ludGhfY2xpZW50ICpzeW50aHNbU05EUlZfQ0FSRFNdOwotc3RhdGljIERFQ0xBUkVfTVVURVgocmVnaXN0ZXJfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChyZWdpc3Rlcl9tdXRleCk7CiAKIC8qIGhhbmRsZSByYXdtaWRpIGlucHV0IGV2ZW50IChNSURJIHYxLjAgc3RyZWFtKSAqLwogc3RhdGljIHZvaWQgc25kX21pZGlfaW5wdXRfZXZlbnQoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMzA4LDEzICszMDgsMTMgQEAKIAlpZiAocG9ydHMgPiAoMjU2IC8gU05EUlZfUkFXTUlESV9ERVZJQ0VTKSkKIAkJcG9ydHMgPSAyNTYgLyBTTkRSVl9SQVdNSURJX0RFVklDRVM7CiAKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWNsaWVudCA9IHN5bnRoc1tjYXJkLT5udW1iZXJdOwogCWlmIChjbGllbnQgPT0gTlVMTCkgewogCQluZXdjbGllbnQgPSAxOwogCQljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChjbGllbnQgPT0gTlVMTCkgewotCQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQkJa2ZyZWUoaW5mbyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCQkJKGNvbnN0IGNoYXIgKilpbmZvLT5uYW1lIDogIkV4dGVybmFsIE1JREkiKTsKIAkJaWYgKGNsaWVudC0+c2VxX2NsaWVudCA8IDApIHsKIAkJCWtmcmVlKGNsaWVudCk7Ci0JCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlrZnJlZShpbmZvKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC0zOTcsNyArMzk3LDcgQEAKIAljbGllbnQtPm51bV9wb3J0cysrOwogCWlmIChuZXdjbGllbnQpCiAJCXN5bnRoc1tjYXJkLT5udW1iZXJdID0gY2xpZW50OwotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJa2ZyZWUoaW5mbyk7CiAJa2ZyZWUocG9ydCk7CiAJcmV0dXJuIDA7CS8qIHN1Y2Nlc3MgKi8KQEAgLTQxNCw3ICs0MTQsNyBAQAogCX0KIAlrZnJlZShpbmZvKTsKIAlrZnJlZShwb3J0KTsKLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC00MjcsMTAgKzQyNywxMCBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldi0+Y2FyZDsKIAlpbnQgZGV2aWNlID0gZGV2LT5kZXZpY2UsIHAsIHBvcnRzOwogCQotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJY2xpZW50ID0gc3ludGhzW2NhcmQtPm51bWJlcl07CiAJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+cG9ydHNbZGV2aWNlXSA9PSBOVUxMKSB7Ci0JCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcG9ydHMgPSBjbGllbnQtPnBvcnRzX3Blcl9kZXZpY2VbZGV2aWNlXTsKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCQlzeW50aHNbY2FyZC0+bnVtYmVyXSA9IE5VTEw7CiAJCWtmcmVlKGNsaWVudCk7CiAJfQotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jIGIvc291bmQvY29yZS9zZXEvc2VxX3BvcnRzLmMKaW5kZXggMmIzODRmZC4uNDFlMDc4YyAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX3BvcnRzLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX3BvcnRzLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCXBvcnRfc3Vic19pbmZvX2luaXQoJm5ld19wb3J0LT5jX2Rlc3QpOwogCiAJbnVtID0gcG9ydCA+PSAwID8gcG9ydCA6IDA7Ci0JZG93bigmY2xpZW50LT5wb3J0c19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2xpZW50LT5wb3J0c19tdXRleCk7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZjbGllbnQtPnBvcnRzX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoKGwsICZjbGllbnQtPnBvcnRzX2xpc3RfaGVhZCkgewogCQlzdHJ1Y3Qgc25kX3NlcV9jbGllbnRfcG9ydCAqcCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHNuZF9zZXFfY2xpZW50X3BvcnQsIGxpc3QpOwpAQCAtMTczLDcgKzE3Myw3IEBACiAJY2xpZW50LT5udW1fcG9ydHMrKzsKIAluZXdfcG9ydC0+YWRkci5wb3J0ID0gbnVtOwkvKiBzdG9yZSB0aGUgcG9ydCBudW1iZXIgaW4gdGhlIHBvcnQgKi8KIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5wb3J0c19sb2NrLCBmbGFncyk7Ci0JdXAoJmNsaWVudC0+cG9ydHNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2xpZW50LT5wb3J0c19tdXRleCk7CiAJc3ByaW50ZihuZXdfcG9ydC0+bmFtZSwgInBvcnQtJWQiLCBudW0pOwogCiAJcmV0dXJuIG5ld19wb3J0OwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKIAlzdHJ1Y3Qgc25kX3NlcV9jbGllbnRfcG9ydCAqZm91bmQgPSBOVUxMOwogCi0JZG93bigmY2xpZW50LT5wb3J0c19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2xpZW50LT5wb3J0c19tdXRleCk7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZjbGllbnQtPnBvcnRzX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoKGwsICZjbGllbnQtPnBvcnRzX2xpc3RfaGVhZCkgewogCQlzdHJ1Y3Qgc25kX3NlcV9jbGllbnRfcG9ydCAqcCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHNuZF9zZXFfY2xpZW50X3BvcnQsIGxpc3QpOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCX0KIAl9CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+cG9ydHNfbG9jaywgZmxhZ3MpOwotCXVwKCZjbGllbnQtPnBvcnRzX211dGV4KTsKKwltdXRleF91bmxvY2soJmNsaWVudC0+cG9ydHNfbXV0ZXgpOwogCWlmIChmb3VuZCkKIAkJcmV0dXJuIHBvcnRfZGVsZXRlKGNsaWVudCwgZm91bmQpOwogCWVsc2UKQEAgLTMyMSw3ICszMjEsNyBAQAogCS8qIG1vdmUgdGhlIHBvcnQgbGlzdCB0byBkZWxldGVkX2xpc3QsIGFuZAogCSAqIGNsZWFyIHRoZSBwb3J0IGxpc3QgaW4gdGhlIGNsaWVudCBkYXRhLgogCSAqLwotCWRvd24oJmNsaWVudC0+cG9ydHNfbXV0ZXgpOworCW11dGV4X2xvY2soJmNsaWVudC0+cG9ydHNfbXV0ZXgpOwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2xpZW50LT5wb3J0c19sb2NrLCBmbGFncyk7CiAJaWYgKCEgbGlzdF9lbXB0eSgmY2xpZW50LT5wb3J0c19saXN0X2hlYWQpKSB7CiAJCV9fbGlzdF9hZGQoJmRlbGV0ZWRfbGlzdCwKQEAgLTM0MSw3ICszNDEsNyBAQAogCQlzbmRfc2VxX3N5c3RlbV9jbGllbnRfZXZfcG9ydF9leGl0KHBvcnQtPmFkZHIuY2xpZW50LCBwb3J0LT5hZGRyLnBvcnQpOwogCQlwb3J0X2RlbGV0ZShjbGllbnQsIHBvcnQpOwogCX0KLQl1cCgmY2xpZW50LT5wb3J0c19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPnBvcnRzX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX3F1ZXVlLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcXVldWUuYwppbmRleCA5Y2YyMGYwLi45Yjg3YmIwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfcXVldWUuYworKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcXVldWUuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcS0+b3duZXJfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnEtPmNoZWNrX2xvY2spOwotCWluaXRfTVVURVgoJnEtPnRpbWVyX211dGV4KTsKKwltdXRleF9pbml0KCZxLT50aW1lcl9tdXRleCk7CiAJc25kX3VzZV9sb2NrX2luaXQoJnEtPnVzZV9sb2NrKTsKIAlxLT5xdWV1ZSA9IC0xOwogCkBAIC01MTYsNyArNTE2LDcgQEAKIAlxdWV1ZSA9IHF1ZXVlcHRyKHF1ZXVlaWQpOwogCWlmIChxdWV1ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlkb3duKCZxdWV1ZS0+dGltZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnF1ZXVlLT50aW1lcl9tdXRleCk7CiAJaWYgKHVzZSkgewogCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoY2xpZW50LCBxdWV1ZS0+Y2xpZW50c19iaXRtYXApKQogCQkJcXVldWUtPmNsaWVudHMrKzsKQEAgLTUzMSw3ICs1MzEsNyBAQAogCX0gZWxzZSB7CiAJCXNuZF9zZXFfdGltZXJfY2xvc2UocXVldWUpOwogCX0KLQl1cCgmcXVldWUtPnRpbWVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnF1ZXVlLT50aW1lcl9tdXRleCk7CiAJcXVldWVmcmVlKHF1ZXVlKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9xdWV1ZS5oIGIvc291bmQvY29yZS9zZXEvc2VxX3F1ZXVlLmgKaW5kZXggODg4NDM4NS4uMzBjODExMSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX3F1ZXVlLmgKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX3F1ZXVlLmgKQEAgLTU0LDcgKzU0LDcgQEAKIAkvKiBjbGllbnRzIHdoaWNoIHVzZXMgdGhpcyBxdWV1ZSAoYml0bWFwKSAqLwogCURFQ0xBUkVfQklUTUFQKGNsaWVudHNfYml0bWFwLCBTTkRSVl9TRVFfTUFYX0NMSUVOVFMpOwogCXVuc2lnbmVkIGludCBjbGllbnRzOwkvKiB1c2VycyBvZiB0aGlzIHF1ZXVlICovCi0Jc3RydWN0IHNlbWFwaG9yZSB0aW1lcl9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggdGltZXJfbXV0ZXg7CiAKIAlzbmRfdXNlX2xvY2tfdCB1c2VfbG9jazsKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfdmlybWlkaS5jIGIvc291bmQvY29yZS9zZXEvc2VxX3Zpcm1pZGkuYwppbmRleCAxNGZkMWE2Li5mNGVkZWM2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfdmlybWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV92aXJtaWRpLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkJcmV0dXJuOwkJLyogaWdub3JlZCAqLwogCQl9CiAJCWlmICh2bWlkaS0+ZXZlbnQudHlwZSAhPSBTTkRSVl9TRVFfRVZFTlRfTk9ORSkgewotCQkJaWYgKHNuZF9zZXFfa2VybmVsX2NsaWVudF9kaXNwYXRjaCh2bWlkaS0+Y2xpZW50LCAmdm1pZGktPmV2ZW50LCAwLCAwKSA8IDApCisJCQlpZiAoc25kX3NlcV9rZXJuZWxfY2xpZW50X2Rpc3BhdGNoKHZtaWRpLT5jbGllbnQsICZ2bWlkaS0+ZXZlbnQsIGluX2F0b21pYygpLCAwKSA8IDApCiAJCQkJcmV0dXJuOwogCQkJdm1pZGktPmV2ZW50LnR5cGUgPSBTTkRSVl9TRVFfRVZFTlRfTk9ORTsKIAkJfQpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCQkJcGJ1ZiArPSByZXM7CiAJCQkJY291bnQgLT0gcmVzOwogCQkJCWlmICh2bWlkaS0+ZXZlbnQudHlwZSAhPSBTTkRSVl9TRVFfRVZFTlRfTk9ORSkgewotCQkJCQlpZiAoc25kX3NlcV9rZXJuZWxfY2xpZW50X2Rpc3BhdGNoKHZtaWRpLT5jbGllbnQsICZ2bWlkaS0+ZXZlbnQsIDAsIDApIDwgMCkKKwkJCQkJaWYgKHNuZF9zZXFfa2VybmVsX2NsaWVudF9kaXNwYXRjaCh2bWlkaS0+Y2xpZW50LCAmdm1pZGktPmV2ZW50LCBpbl9hdG9taWMoKSwgMCkgPCAwKQogCQkJCQkJcmV0dXJuOwogCQkJCQl2bWlkaS0+ZXZlbnQudHlwZSA9IFNORFJWX1NFUV9FVkVOVF9OT05FOwogCQkJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc291bmQuYyBiL3NvdW5kL2NvcmUvc291bmQuYwppbmRleCBhOGVkYTAyLi40ZDI4ZTUyIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NvdW5kLmMKKysrIGIvc291bmQvY29yZS9zb3VuZC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIFNORFJWX09TX01JTk9SUyAyNTYKIApAQCAtNjEsNyArNjIsNyBAQAogaW50IHNuZF9lY2FyZHNfbGltaXQ7CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX21pbm9yICpzbmRfbWlub3JzW1NORFJWX09TX01JTk9SU107Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChzb3VuZF9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHNvdW5kX211dGV4KTsKIAogZXh0ZXJuIHN0cnVjdCBjbGFzcyAqc291bmRfY2xhc3M7CiAKQEAgLTEyMCwxNSArMTIxLDE1IEBACiAJc3RydWN0IHNuZF9taW5vciAqbXJlZzsKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAKLQlpZiAobWlub3IgPiBBUlJBWV9TSVpFKHNuZF9taW5vcnMpKQorCWlmIChtaW5vciA+PSBBUlJBWV9TSVpFKHNuZF9taW5vcnMpKQogCQlyZXR1cm4gTlVMTDsKLQlkb3duKCZzb3VuZF9tdXRleCk7CisJbXV0ZXhfbG9jaygmc291bmRfbXV0ZXgpOwogCW1yZWcgPSBzbmRfbWlub3JzW21pbm9yXTsKIAlpZiAobXJlZyAmJiBtcmVnLT50eXBlID09IHR5cGUpCiAJCXByaXZhdGVfZGF0YSA9IG1yZWctPnByaXZhdGVfZGF0YTsKIAllbHNlCiAJCXByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JdXAoJnNvdW5kX211dGV4KTsKKwltdXRleF91bmxvY2soJnNvdW5kX211dGV4KTsKIAlyZXR1cm4gcHJpdmF0ZV9kYXRhOwogfQogCkBAIC0xMzksNyArMTQwLDcgQEAKIAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvbGRfZm9wczsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChtaW5vciA+IEFSUkFZX1NJWkUoc25kX21pbm9ycykpCisJaWYgKG1pbm9yID49IEFSUkFZX1NJWkUoc25kX21pbm9ycykpCiAJCXJldHVybiAtRU5PREVWOwogCW1wdHIgPSBzbmRfbWlub3JzW21pbm9yXTsKIAlpZiAobXB0ciA9PSBOVUxMKSB7CkBAIC0yNTYsNyArMjU3LDcgQEAKIAlwcmVnLT5mX29wcyA9IGZfb3BzOwogCXByZWctPnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKIAlzdHJjcHkocHJlZy0+bmFtZSwgbmFtZSk7Ci0JZG93bigmc291bmRfbXV0ZXgpOworCW11dGV4X2xvY2soJnNvdW5kX211dGV4KTsKICNpZmRlZiBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTCiAJbWlub3IgPSBzbmRfZmluZF9mcmVlX21pbm9yKCk7CiAjZWxzZQpAQCAtMjY1LDcgKzI2Niw3IEBACiAJCW1pbm9yID0gLUVCVVNZOwogI2VuZGlmCiAJaWYgKG1pbm9yIDwgMCkgewotCQl1cCgmc291bmRfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnNvdW5kX211dGV4KTsKIAkJa2ZyZWUocHJlZyk7CiAJCXJldHVybiBtaW5vcjsKIAl9CkBAIC0yNzYsNyArMjc3LDcgQEAKIAkJZGV2aWNlID0gY2FyZC0+ZGV2OwogCWNsYXNzX2RldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIE5VTEwsIE1LREVWKG1ham9yLCBtaW5vciksIGRldmljZSwgIiVzIiwgbmFtZSk7CiAKLQl1cCgmc291bmRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmc291bmRfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTcsNyArMjk4LDcgQEAKIAlzdHJ1Y3Qgc25kX21pbm9yICptcHRyOwogCiAJY2FyZG51bSA9IGNhcmQgPyBjYXJkLT5udW1iZXIgOiAtMTsKLQlkb3duKCZzb3VuZF9tdXRleCk7CisJbXV0ZXhfbG9jaygmc291bmRfbXV0ZXgpOwogCWZvciAobWlub3IgPSAwOyBtaW5vciA8IEFSUkFZX1NJWkUoc25kX21pbm9ycyk7ICsrbWlub3IpCiAJCWlmICgobXB0ciA9IHNuZF9taW5vcnNbbWlub3JdKSAhPSBOVUxMICYmCiAJCSAgICBtcHRyLT50eXBlID09IHR5cGUgJiYKQEAgLTMwNSw3ICszMDYsNyBAQAogCQkgICAgbXB0ci0+ZGV2aWNlID09IGRldikKIAkJCWJyZWFrOwogCWlmIChtaW5vciA9PSBBUlJBWV9TSVpFKHNuZF9taW5vcnMpKSB7Ci0JCXVwKCZzb3VuZF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmc291bmRfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMxNSw3ICszMTYsNyBAQAogCWNsYXNzX2RldmljZV9kZXN0cm95KHNvdW5kX2NsYXNzLCBNS0RFVihtYWpvciwgbWlub3IpKTsKIAogCXNuZF9taW5vcnNbbWlub3JdID0gTlVMTDsKLQl1cCgmc291bmRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmc291bmRfbXV0ZXgpOwogCWtmcmVlKG1wdHIpOwogCXJldHVybiAwOwogfQpAQCAtMzU0LDcgKzM1NSw3IEBACiAJaW50IG1pbm9yOwogCXN0cnVjdCBzbmRfbWlub3IgKm1wdHI7CiAKLQlkb3duKCZzb3VuZF9tdXRleCk7CisJbXV0ZXhfbG9jaygmc291bmRfbXV0ZXgpOwogCWZvciAobWlub3IgPSAwOyBtaW5vciA8IFNORFJWX09TX01JTk9SUzsgKyttaW5vcikgewogCQlpZiAoIShtcHRyID0gc25kX21pbm9yc1ttaW5vcl0pKQogCQkJY29udGludWU7CkBAIC0zNzEsNyArMzcyLDcgQEAKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiUzaTogICAgICAgIDogJXNcbiIsIG1pbm9yLAogCQkJCSAgICBzbmRfZGV2aWNlX3R5cGVfbmFtZShtcHRyLT50eXBlKSk7CiAJfQotCXVwKCZzb3VuZF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzb3VuZF9tdXRleCk7CiB9CiAKIGludCBfX2luaXQgc25kX21pbm9yX2luZm9faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zb3VuZF9vc3MuYyBiL3NvdW5kL2NvcmUvc291bmRfb3NzLmMKaW5kZXggZDBiZTMyYi4uNDAyM2QzYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zb3VuZF9vc3MuYworKysgYi9zb3VuZC9jb3JlL3NvdW5kX29zcy5jCkBAIC0zNCwyNiArMzQsMjcgQEAKICNpbmNsdWRlIDxzb3VuZC9taW5vcnMuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvc291bmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIFNORFJWX09TU19NSU5PUlMgMTI4CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX21pbm9yICpzbmRfb3NzX21pbm9yc1tTTkRSVl9PU1NfTUlOT1JTXTsKLXN0YXRpYyBERUNMQVJFX01VVEVYKHNvdW5kX29zc19tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHNvdW5kX29zc19tdXRleCk7CiAKIHZvaWQgKnNuZF9sb29rdXBfb3NzX21pbm9yX2RhdGEodW5zaWduZWQgaW50IG1pbm9yLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3Qgc25kX21pbm9yICptcmVnOwogCXZvaWQgKnByaXZhdGVfZGF0YTsKIAotCWlmIChtaW5vciA+IEFSUkFZX1NJWkUoc25kX29zc19taW5vcnMpKQorCWlmIChtaW5vciA+PSBBUlJBWV9TSVpFKHNuZF9vc3NfbWlub3JzKSkKIAkJcmV0dXJuIE5VTEw7Ci0JZG93bigmc291bmRfb3NzX211dGV4KTsKKwltdXRleF9sb2NrKCZzb3VuZF9vc3NfbXV0ZXgpOwogCW1yZWcgPSBzbmRfb3NzX21pbm9yc1ttaW5vcl07CiAJaWYgKG1yZWcgJiYgbXJlZy0+dHlwZSA9PSB0eXBlKQogCQlwcml2YXRlX2RhdGEgPSBtcmVnLT5wcml2YXRlX2RhdGE7CiAJZWxzZQogCQlwcml2YXRlX2RhdGEgPSBOVUxMOwotCXVwKCZzb3VuZF9vc3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmc291bmRfb3NzX211dGV4KTsKIAlyZXR1cm4gcHJpdmF0ZV9kYXRhOwogfQogCkBAIC0xMTcsNyArMTE4LDcgQEAKIAlwcmVnLT5kZXZpY2UgPSBkZXY7CiAJcHJlZy0+Zl9vcHMgPSBmX29wczsKIAlwcmVnLT5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7Ci0JZG93bigmc291bmRfb3NzX211dGV4KTsKKwltdXRleF9sb2NrKCZzb3VuZF9vc3NfbXV0ZXgpOwogCXNuZF9vc3NfbWlub3JzW21pbm9yXSA9IHByZWc7CiAJbWlub3JfdW5pdCA9IFNORFJWX01JTk9SX09TU19ERVZJQ0UobWlub3IpOwogCXN3aXRjaCAobWlub3JfdW5pdCkgewpAQCAtMTQzLDcgKzE0NCw3IEBACiAJCQlnb3RvIF9fZW5kOwogCQlzbmRfb3NzX21pbm9yc1t0cmFjazJdID0gcHJlZzsKIAl9Ci0JdXAoJnNvdW5kX29zc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzb3VuZF9vc3NfbXV0ZXgpOwogCXJldHVybiAwOwogCiAgICAgICBfX2VuZDoKQEAgLTE1Miw3ICsxNTMsNyBAQAogICAgICAgCWlmIChyZWdpc3RlcjEgPj0gMCkKICAgICAgIAkJdW5yZWdpc3Rlcl9zb3VuZF9zcGVjaWFsKHJlZ2lzdGVyMSk7CiAJc25kX29zc19taW5vcnNbbWlub3JdID0gTlVMTDsKLQl1cCgmc291bmRfb3NzX211dGV4KTsKKwltdXRleF91bmxvY2soJnNvdW5kX29zc19tdXRleCk7CiAJa2ZyZWUocHJlZyk7CiAgICAgICAJcmV0dXJuIC1FQlVTWTsKIH0KQEAgLTE2OCwxMCArMTY5LDEwIEBACiAJCXJldHVybiAwOwogCWlmIChtaW5vciA8IDApCiAJCXJldHVybiBtaW5vcjsKLQlkb3duKCZzb3VuZF9vc3NfbXV0ZXgpOworCW11dGV4X2xvY2soJnNvdW5kX29zc19tdXRleCk7CiAJbXB0ciA9IHNuZF9vc3NfbWlub3JzW21pbm9yXTsKIAlpZiAobXB0ciA9PSBOVUxMKSB7Ci0JCXVwKCZzb3VuZF9vc3NfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnNvdW5kX29zc19tdXRleCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAl1bnJlZ2lzdGVyX3NvdW5kX3NwZWNpYWwobWlub3IpOwpAQCAtMTkxLDcgKzE5Miw3IEBACiAJCXNuZF9vc3NfbWlub3JzW3RyYWNrMl0gPSBOVUxMOwogCX0KIAlzbmRfb3NzX21pbm9yc1ttaW5vcl0gPSBOVUxMOwotCXVwKCZzb3VuZF9vc3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmc291bmRfb3NzX211dGV4KTsKIAlrZnJlZShtcHRyKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyOSw3ICsyMzAsNyBAQAogCWludCBtaW5vcjsKIAlzdHJ1Y3Qgc25kX21pbm9yICptcHRyOwogCi0JZG93bigmc291bmRfb3NzX211dGV4KTsKKwltdXRleF9sb2NrKCZzb3VuZF9vc3NfbXV0ZXgpOwogCWZvciAobWlub3IgPSAwOyBtaW5vciA8IFNORFJWX09TU19NSU5PUlM7ICsrbWlub3IpIHsKIAkJaWYgKCEobXB0ciA9IHNuZF9vc3NfbWlub3JzW21pbm9yXSkpCiAJCQljb250aW51ZTsKQEAgLTI0MSw3ICsyNDIsNyBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiJTNpOiAgICAgICA6ICVzXG4iLCBtaW5vciwKIAkJCQkgICAgc25kX29zc19kZXZpY2VfdHlwZV9uYW1lKG1wdHItPnR5cGUpKTsKIAl9Ci0JdXAoJnNvdW5kX29zc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzb3VuZF9vc3NfbXV0ZXgpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvdGltZXIuYyBiL3NvdW5kL2NvcmUvdGltZXIuYwppbmRleCAyNDI1Yjk3Li5jZGVlYjYzIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3RpbWVyLmMKKysrIGIvc291bmQvY29yZS90aW1lci5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC03MCw3ICs3MSw3IEBACiAJc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsJCS8qIHRyaWdnZXIgdHN0YW1wICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcWNoYW5nZV9zbGVlcDsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwotCXN0cnVjdCBzZW1hcGhvcmUgdHJlYWRfc2VtOworCXN0cnVjdCBtdXRleCB0cmVhZF9zZW07CiB9OwogCiAvKiBsaXN0IG9mIHRpbWVycyAqLwpAQCAtODIsNyArODMsNyBAQAogLyogbG9jayBmb3Igc2xhdmUgYWN0aXZlIGxpc3RzICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNsYXZlX2FjdGl2ZV9sb2NrKTsKIAotc3RhdGljIERFQ0xBUkVfTVVURVgocmVnaXN0ZXJfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChyZWdpc3Rlcl9tdXRleCk7CiAKIHN0YXRpYyBpbnQgc25kX3RpbWVyX2ZyZWUoc3RydWN0IHNuZF90aW1lciAqdGltZXIpOwogc3RhdGljIGludCBzbmRfdGltZXJfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSk7CkBAIC0yNTIsMTAgKzI1MywxMCBAQAogCQkJc25kX3ByaW50ZCgiaW52YWxpZCBzbGF2ZSBjbGFzcyAlaVxuIiwgdGlkLT5kZXZfc2NsYXNzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQl0aW1lcmkgPSBzbmRfdGltZXJfaW5zdGFuY2VfbmV3KG93bmVyLCBOVUxMKTsKIAkJaWYgKCF0aW1lcmkpIHsKLQkJCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCXRpbWVyaS0+c2xhdmVfY2xhc3MgPSB0aWQtPmRldl9zY2xhc3M7CkBAIC0yNjMsMzcgKzI2NCwzNyBAQAogCQl0aW1lcmktPmZsYWdzIHw9IFNORFJWX1RJTUVSX0lGTEdfU0xBVkU7CiAJCWxpc3RfYWRkX3RhaWwoJnRpbWVyaS0+b3Blbl9saXN0LCAmc25kX3RpbWVyX3NsYXZlX2xpc3QpOwogCQlzbmRfdGltZXJfY2hlY2tfc2xhdmUodGltZXJpKTsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCSp0aSA9IHRpbWVyaTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogb3BlbiBhIG1hc3RlciBpbnN0YW5jZSAqLwotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJdGltZXIgPSBzbmRfdGltZXJfZmluZCh0aWQpOwogI2lmZGVmIENPTkZJR19LTU9ECiAJaWYgKHRpbWVyID09IE5VTEwpIHsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXNuZF90aW1lcl9yZXF1ZXN0KHRpZCk7Ci0JCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQl0aW1lciA9IHNuZF90aW1lcl9maW5kKHRpZCk7CiAJfQogI2VuZGlmCiAJaWYgKCF0aW1lcikgewotCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmICghbGlzdF9lbXB0eSgmdGltZXItPm9wZW5fbGlzdF9oZWFkKSkgewogCQl0aW1lcmkgPSBsaXN0X2VudHJ5KHRpbWVyLT5vcGVuX2xpc3RfaGVhZC5uZXh0LAogCQkJCSAgICBzdHJ1Y3Qgc25kX3RpbWVyX2luc3RhbmNlLCBvcGVuX2xpc3QpOwogCQlpZiAodGltZXJpLT5mbGFncyAmIFNORFJWX1RJTUVSX0lGTEdfRVhDTFVTSVZFKSB7Ci0JCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogCXRpbWVyaSA9IHNuZF90aW1lcl9pbnN0YW5jZV9uZXcob3duZXIsIHRpbWVyKTsKIAlpZiAoIXRpbWVyaSkgewotCQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXRpbWVyaS0+c2xhdmVfY2xhc3MgPSB0aWQtPmRldl9zY2xhc3M7CkBAIC0zMDIsNyArMzAzLDcgQEAKIAkJdGltZXItPmh3Lm9wZW4odGltZXIpOwogCWxpc3RfYWRkX3RhaWwoJnRpbWVyaS0+b3Blbl9saXN0LCAmdGltZXItPm9wZW5fbGlzdF9oZWFkKTsKIAlzbmRfdGltZXJfY2hlY2tfbWFzdGVyKHRpbWVyaSk7Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkqdGkgPSB0aW1lcmk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMzMsOSArMzM0LDkgQEAKIAkJCXNwaW5fbG9ja19pcnEoJnNsYXZlX2FjdGl2ZV9sb2NrKTsKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJnNsYXZlX2FjdGl2ZV9sb2NrKTsKLQkJZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCQltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCWxpc3RfZGVsKCZ0aW1lcmktPm9wZW5fbGlzdCk7Ci0JCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCX0gZWxzZSB7CiAJCXRpbWVyID0gdGltZXJpLT50aW1lcjsKIAkJLyogd2FpdCwgdW50aWwgdGhlIGFjdGl2ZSBjYWxsYmFjayBpcyBmaW5pc2hlZCAqLwpAQCAtMzQ2LDcgKzM0Nyw3IEBACiAJCQlzcGluX2xvY2tfaXJxKCZ0aW1lci0+bG9jayk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZ0aW1lci0+bG9jayk7Ci0JCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlsaXN0X2RlbCgmdGltZXJpLT5vcGVuX2xpc3QpOwogCQlpZiAodGltZXIgJiYgbGlzdF9lbXB0eSgmdGltZXItPm9wZW5fbGlzdF9oZWFkKSAmJgogCQkgICAgdGltZXItPmh3LmNsb3NlKQpAQCAtMzYyLDcgKzM2Myw3IEBACiAJCQlzbGF2ZS0+dGltZXIgPSBOVUxMOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZzbGF2ZV9hY3RpdmVfbG9jayk7CiAJCX0KLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJfQogCWlmICh0aW1lcmktPnByaXZhdGVfZnJlZSkKIAkJdGltZXJpLT5wcml2YXRlX2ZyZWUodGltZXJpKTsKQEAgLTgzNSw3ICs4MzYsNyBAQAogCSAgICAhdGltZXItPmh3LnJlc29sdXRpb24gJiYgdGltZXItPmh3LmNfcmVzb2x1dGlvbiA9PSBOVUxMKQogCSAgICAJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2gocCwgJnNuZF90aW1lcl9saXN0KSB7CiAJCXRpbWVyMSA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNuZF90aW1lciwgZGV2aWNlX2xpc3QpOwogCQlpZiAodGltZXIxLT50bXJfY2xhc3MgPiB0aW1lci0+dG1yX2NsYXNzKQpAQCAtODU3LDExICs4NTgsMTEgQEAKIAkJaWYgKHRpbWVyMS0+dG1yX3N1YmRldmljZSA8IHRpbWVyLT50bXJfc3ViZGV2aWNlKQogCQkJY29udGludWU7CiAJCS8qIGNvbmZsaWN0cy4uICovCi0JCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlsaXN0X2FkZF90YWlsKCZ0aW1lci0+ZGV2aWNlX2xpc3QsIHApOwotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg3MSw3ICs4NzIsNyBAQAogCXN0cnVjdCBzbmRfdGltZXJfaW5zdGFuY2UgKnRpOwogCiAJc25kX2Fzc2VydCh0aW1lciAhPSBOVUxMLCByZXR1cm4gLUVOWElPKTsKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWlmICghIGxpc3RfZW1wdHkoJnRpbWVyLT5vcGVuX2xpc3RfaGVhZCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgInRpbWVyIDB4JWx4IGlzIGJ1c3k/XG4iLCAobG9uZyl0aW1lcik7CiAJCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmdGltZXItPm9wZW5fbGlzdF9oZWFkKSB7CkBAIC04ODEsNyArODgyLDcgQEAKIAkJfQogCX0KIAlsaXN0X2RlbCgmdGltZXItPmRldmljZV9saXN0KTsKLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiBzbmRfdGltZXJfZnJlZSh0aW1lcik7CiB9CiAKQEAgLTEwNjUsNyArMTA2Niw3IEBACiAJc3RydWN0IHNuZF90aW1lcl9pbnN0YW5jZSAqdGk7CiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnE7CiAKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2gocCwgJnNuZF90aW1lcl9saXN0KSB7CiAJCXRpbWVyID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3Qgc25kX3RpbWVyLCBkZXZpY2VfbGlzdCk7CiAJCXN3aXRjaCAodGltZXItPnRtcl9jbGFzcykgewpAQCAtMTEwNSw3ICsxMTA2LDcgQEAKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lci0+bG9jaywgZmxhZ3MpOwogCX0KLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpzbmRfdGltZXJfcHJvY19lbnRyeSA9IE5VTEw7CkBAIC0xMjY5LDcgKzEyNzAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlzcGluX2xvY2tfaW5pdCgmdHUtPnFsb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0dS0+cWNoYW5nZV9zbGVlcCk7Ci0JaW5pdF9NVVRFWCgmdHUtPnRyZWFkX3NlbSk7CisJbXV0ZXhfaW5pdCgmdHUtPnRyZWFkX3NlbSk7CiAJdHUtPnRpY2tzID0gMTsKIAl0dS0+cXVldWVfc2l6ZSA9IDEyODsKIAl0dS0+cXVldWUgPSBrbWFsbG9jKHR1LT5xdWV1ZV9zaXplICogc2l6ZW9mKHN0cnVjdCBzbmRfdGltZXJfcmVhZCksCkBAIC0xMzI1LDcgKzEzMjYsNyBAQAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZpZCwgX3RpZCwgc2l6ZW9mKGlkKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCWRvd24oJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJaWYgKGlkLmRldl9jbGFzcyA8IDApIHsJCS8qIGZpcnN0IGl0ZW0gKi8KIAkJaWYgKGxpc3RfZW1wdHkoJnNuZF90aW1lcl9saXN0KSkKIAkJCXNuZF90aW1lcl91c2VyX3plcm9faWQoJmlkKTsKQEAgLTE0MDcsNyArMTQwOCw3IEBACiAJCQlzbmRfdGltZXJfdXNlcl96ZXJvX2lkKCZpZCk7CiAJCX0KIAl9Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlpZiAoY29weV90b191c2VyKF90aWQsICZpZCwgc2l6ZW9mKCpfdGlkKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwpAQCAtMTQzMiw3ICsxNDMzLDcgQEAKIAl0aWQgPSBnaW5mby0+dGlkOwogCW1lbXNldChnaW5mbywgMCwgc2l6ZW9mKCpnaW5mbykpOwogCWdpbmZvLT50aWQgPSB0aWQ7Ci0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAl0ID0gc25kX3RpbWVyX2ZpbmQoJnRpZCk7CiAJaWYgKHQgIT0gTlVMTCkgewogCQlnaW5mby0+Y2FyZCA9IHQtPmNhcmQgPyB0LT5jYXJkLT5udW1iZXIgOiAtMTsKQEAgLTE0NTEsNyArMTQ1Miw3IEBACiAJfSBlbHNlIHsKIAkJZXJyID0gLUVOT0RFVjsKIAl9Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlpZiAoZXJyID49IDAgJiYgY29weV90b191c2VyKF9naW5mbywgZ2luZm8sIHNpemVvZigqZ2luZm8pKSkKIAkJZXJyID0gLUVGQVVMVDsKIAlrZnJlZShnaW5mbyk7CkBAIC0xNDY3LDcgKzE0NjgsNyBAQAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZncGFyYW1zLCBfZ3BhcmFtcywgc2l6ZW9mKGdwYXJhbXMpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAl0ID0gc25kX3RpbWVyX2ZpbmQoJmdwYXJhbXMudGlkKTsKIAlpZiAoIXQpIHsKIAkJZXJyID0gLUVOT0RFVjsKQEAgLTE0ODMsNyArMTQ4NCw3IEBACiAJfQogCWVyciA9IHQtPmh3LnNldF9wZXJpb2QodCwgZ3BhcmFtcy5wZXJpb2RfbnVtLCBncGFyYW1zLnBlcmlvZF9kZW4pOwogX2Vycm9yOgotCXVwKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTUwMCw3ICsxNTAxLDcgQEAKIAl0aWQgPSBnc3RhdHVzLnRpZDsKIAltZW1zZXQoJmdzdGF0dXMsIDAsIHNpemVvZihnc3RhdHVzKSk7CiAJZ3N0YXR1cy50aWQgPSB0aWQ7Ci0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAl0ID0gc25kX3RpbWVyX2ZpbmQoJnRpZCk7CiAJaWYgKHQgIT0gTlVMTCkgewogCQlpZiAodC0+aHcuY19yZXNvbHV0aW9uKQpAQCAtMTUxNyw3ICsxNTE4LDcgQEAKIAl9IGVsc2UgewogCQllcnIgPSAtRU5PREVWOwogCX0KLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWlmIChlcnIgPj0gMCAmJiBjb3B5X3RvX3VzZXIoX2dzdGF0dXMsICZnc3RhdHVzLCBzaXplb2YoZ3N0YXR1cykpKQogCQllcnIgPSAtRUZBVUxUOwogCXJldHVybiBlcnI7CkBAIC0xNTMyLDcgKzE1MzMsNyBAQAogCWludCBlcnIgPSAwOwogCiAJdHUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JZG93bigmdHUtPnRyZWFkX3NlbSk7CisJbXV0ZXhfbG9jaygmdHUtPnRyZWFkX3NlbSk7CiAJaWYgKHR1LT50aW1lcmkpIHsKIAkJc25kX3RpbWVyX2Nsb3NlKHR1LT50aW1lcmkpOwogCQl0dS0+dGltZXJpID0gTlVMTDsKQEAgLTE1NzYsNyArMTU3Nyw3IEBACiAJfQogCiAgICAgICBfX2VycjoKLSAgICAgIAl1cCgmdHUtPnRyZWFkX3NlbSk7CisgICAgICAJbXV0ZXhfdW5sb2NrKCZ0dS0+dHJlYWRfc2VtKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzk3LDE3ICsxNzk4LDE3IEBACiAJewogCQlpbnQgeGFyZzsKIAotCQlkb3duKCZ0dS0+dHJlYWRfc2VtKTsKKwkJbXV0ZXhfbG9jaygmdHUtPnRyZWFkX3NlbSk7CiAJCWlmICh0dS0+dGltZXJpKQl7CS8qIHRvbyBsYXRlICovCi0JCQl1cCgmdHUtPnRyZWFkX3NlbSk7CisJCQltdXRleF91bmxvY2soJnR1LT50cmVhZF9zZW0pOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCQlpZiAoZ2V0X3VzZXIoeGFyZywgcCkpIHsKLQkJCXVwKCZ0dS0+dHJlYWRfc2VtKTsKKwkJCW11dGV4X3VubG9jaygmdHUtPnRyZWFkX3NlbSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQl0dS0+dHJlYWQgPSB4YXJnID8gMSA6IDA7Ci0JCXVwKCZ0dS0+dHJlYWRfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0dS0+dHJlYWRfc2VtKTsKIAkJcmV0dXJuIDA7CiAJfQogCWNhc2UgU05EUlZfVElNRVJfSU9DVExfR0lORk86CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggMTRlMWE2Ny4uZTM1ZmQ1NyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtNjY5LDggKzY2OSwxMCBAQAogCQlyZXR1cm4gZXJyOwogCiAJY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUyAmJiBlbmFibGVbaV07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKKwkJaWYgKCEgZW5hYmxlW2ldKQorCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0RVTU1ZX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7CiAJCWlmIChJU19FUlIoZGV2aWNlKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwppbmRleCA5MTU1ODlhLi45ZDEwZDc5IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYworKysgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDEuYwpAQCAtMjQwLDggKzI0MCwxMCBAQAogCQlyZXR1cm4gZXJyOwogCiAJZGV2aWNlcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCQlpZiAoISBlbmFibGVbaV0pCisJCQljb250aW51ZTsKICNpZmRlZiBDT05GSUdfUE5QCiAJCWlmIChwbnBbaV0pCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX2xpYi5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKaW5kZXggMWUwYzc2Yi4uNGY4NTU2OSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCW9wbDMtPmhhcmR3YXJlID0gaGFyZHdhcmU7CiAJc3Bpbl9sb2NrX2luaXQoJm9wbDMtPnJlZ19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmb3BsMy0+dGltZXJfbG9jayk7Ci0JaW5pdF9NVVRFWCgmb3BsMy0+YWNjZXNzX211dGV4KTsKKwltdXRleF9pbml0KCZvcGwzLT5hY2Nlc3NfbXV0ZXgpOwogCiAJaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfQ09ERUMsIG9wbDMsICZvcHMpKSA8IDApIHsKIAkJc25kX29wbDNfZnJlZShvcGwzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX29zcy5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfb3NzLmMKaW5kZXggMzFmMWYyZS4uZmNjZjAxOSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfb3NzLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfb3NzLmMKQEAgLTEwNCw4ICsxMDQsMTAgQEAKIAkJCQkJCQkgIHZvaWNlcywgdm9pY2VzLAogCQkJCQkJCSAgbmFtZSk7CiAJaWYgKG9wbDMtPm9zc19jaHNldC0+cG9ydCA8IDApIHsKKwkJaW50IHBvcnQ7CisJCXBvcnQgPSBvcGwzLT5vc3NfY2hzZXQtPnBvcnQ7CiAJCXNuZF9taWRpX2NoYW5uZWxfZnJlZV9zZXQob3BsMy0+b3NzX2Noc2V0KTsKLQkJcmV0dXJuIG9wbDMtPm9zc19jaHNldC0+cG9ydDsKKwkJcmV0dXJuIHBvcnQ7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTM2LDE3ICsxMzgsMTcgQEAKIAlhcmctPm9wZXIgPSBvc3NfY2FsbGJhY2s7CiAJYXJnLT5wcml2YXRlX2RhdGEgPSBvcGwzOwogCi0Jc25kX29wbDNfb3NzX2NyZWF0ZV9wb3J0KG9wbDMpOwotCi0JLyogcmVnaXN0ZXIgdG8gT1NTIHN5bnRoIHRhYmxlICovCi0Jc25kX2RldmljZV9yZWdpc3RlcihvcGwzLT5jYXJkLCBkZXYpOworCWlmIChzbmRfb3BsM19vc3NfY3JlYXRlX3BvcnQob3BsMykpIHsKKwkJLyogcmVnaXN0ZXIgdG8gT1NTIHN5bnRoIHRhYmxlICovCisJCXNuZF9kZXZpY2VfcmVnaXN0ZXIob3BsMy0+Y2FyZCwgZGV2KTsKKwl9CiB9CiAKIC8qIHVucmVnaXN0ZXIgKi8KIHZvaWQgc25kX29wbDNfZnJlZV9zZXFfb3NzKHN0cnVjdCBzbmRfb3BsMyAqb3BsMykKIHsKIAlpZiAob3BsMy0+b3NzX3NlcV9kZXYpIHsKLQkJc25kX2RldmljZV9mcmVlKG9wbDMtPmNhcmQsIG9wbDMtPm9zc19zZXFfZGV2KTsKKwkJLyogVGhlIGluc3RhbmNlIHNob3VsZCBoYXZlIGJlZW4gcmVsZWFzZWQgaW4gcHJpb3IgKi8KIAkJb3BsMy0+b3NzX3NlcV9kZXYgPSBOVUxMOwogCX0KIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3NlcS5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc2VxLmMKaW5kZXggYzRlYWQ3OS4uNTdiZWNmMyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc2VxLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc2VxLmMKQEAgLTUyLDEzICs1MiwxMyBAQAogewogCWludCBpZHg7CiAKLQlkb3duKCZvcGwzLT5hY2Nlc3NfbXV0ZXgpOworCW11dGV4X2xvY2soJm9wbDMtPmFjY2Vzc19tdXRleCk7CiAJaWYgKG9wbDMtPnVzZWQpIHsKLQkJdXAoJm9wbDMtPmFjY2Vzc19tdXRleCk7CisJCW11dGV4X3VubG9jaygmb3BsMy0+YWNjZXNzX211dGV4KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJb3BsMy0+dXNlZCsrOwotCXVwKCZvcGwzLT5hY2Nlc3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BsMy0+YWNjZXNzX211dGV4KTsKIAogCXNuZF9vcGwzX3Jlc2V0KG9wbDMpOwogCkBAIC05MSw5ICs5MSw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BsMy0+c3lzX3RpbWVyX2xvY2ssIGZsYWdzKTsKIAogCXNuZF9vcGwzX3Jlc2V0KG9wbDMpOwotCWRvd24oJm9wbDMtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BsMy0+YWNjZXNzX211dGV4KTsKIAlvcGwzLT51c2VkLS07Ci0JdXAoJm9wbDMtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZvcGwzLT5hY2Nlc3NfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHNuZF9vcGwzX3N5bnRoX3VzZSh2b2lkICpwcml2YXRlX2RhdGEsIHN0cnVjdCBzbmRfc2VxX3BvcnRfc3Vic2NyaWJlICogaW5mbykKQEAgLTIwNyw4ICsyMDcsMTAgQEAKIAkJCQkJCSAgICAgIDE2LCB2b2ljZXMsCiAJCQkJCQkgICAgICBuYW1lKTsKIAlpZiAob3BsMy0+Y2hzZXQtPnBvcnQgPCAwKSB7CisJCWludCBwb3J0OworCQlwb3J0ID0gb3BsMy0+Y2hzZXQtPnBvcnQ7CiAJCXNuZF9taWRpX2NoYW5uZWxfZnJlZV9zZXQob3BsMy0+Y2hzZXQpOwotCQlyZXR1cm4gb3BsMy0+Y2hzZXQtPnBvcnQ7CisJCXJldHVybiBwb3J0OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxOCw3ICsyMjAsNyBAQAogc3RhdGljIGludCBzbmRfb3BsM19zZXFfbmV3X2RldmljZShzdHJ1Y3Qgc25kX3NlcV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7Ci0JaW50IGNsaWVudDsKKwlpbnQgY2xpZW50LCBlcnI7CiAJY2hhciBuYW1lWzMyXTsKIAlpbnQgb3BsX3ZlcjsKIApAQCAtMjM5LDcgKzI0MSwxMSBAQAogCWlmIChjbGllbnQgPCAwKQogCQlyZXR1cm4gY2xpZW50OwogCi0Jc25kX29wbDNfc3ludGhfY3JlYXRlX3BvcnQob3BsMyk7CisJaWYgKChlcnIgPSBzbmRfb3BsM19zeW50aF9jcmVhdGVfcG9ydChvcGwzKSkgPCAwKSB7CisJCXNuZF9zZXFfZGVsZXRlX2tlcm5lbF9jbGllbnQoY2xpZW50KTsKKwkJb3BsMy0+c2VxX2NsaWVudCA9IC0xOworCQlyZXR1cm4gZXJyOworCX0KIAogCS8qIGluaXRpYWxpemUgaW5zdHJ1bWVudCBsaXN0ICovCiAJb3BsMy0+aWxpc3QgPSBzbmRfc2VxX2luc3RyX2xpc3RfbmV3KCk7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYwppbmRleCAzNTM0YTBlLi42ZGI1MDNmIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMKQEAgLTc2LDEzICs3NiwxMyBAQAogewogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMyA9IGh3LT5wcml2YXRlX2RhdGE7CiAKLQlkb3duKCZvcGwzLT5hY2Nlc3NfbXV0ZXgpOworCW11dGV4X2xvY2soJm9wbDMtPmFjY2Vzc19tdXRleCk7CiAJaWYgKG9wbDMtPnVzZWQpIHsKLQkJdXAoJm9wbDMtPmFjY2Vzc19tdXRleCk7CisJCW11dGV4X3VubG9jaygmb3BsMy0+YWNjZXNzX211dGV4KTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCW9wbDMtPnVzZWQrKzsKLQl1cCgmb3BsMy0+YWNjZXNzX211dGV4KTsKKwltdXRleF91bmxvY2soJm9wbDMtPmFjY2Vzc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3OSw5ICsxNzksOSBAQAogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMyA9IGh3LT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfb3BsM19yZXNldChvcGwzKTsKLQlkb3duKCZvcGwzLT5hY2Nlc3NfbXV0ZXgpOworCW11dGV4X2xvY2soJm9wbDMtPmFjY2Vzc19tdXRleCk7CiAJb3BsMy0+dXNlZC0tOwotCXVwKCZvcGwzLT5hY2Nlc3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmb3BsMy0+YWNjZXNzX211dGV4KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbGliLmMgYi9zb3VuZC9kcml2ZXJzL29wbDQvb3BsNF9saWIuYwppbmRleCBkZGZjMTBkLi40YmM4NjBhIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDQvb3BsNF9saWIuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDQvb3BsNF9saWIuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJb3BsNC0+Zm1fcG9ydCA9IGZtX3BvcnQ7CiAJb3BsNC0+cGNtX3BvcnQgPSBwY21fcG9ydDsKIAlzcGluX2xvY2tfaW5pdCgmb3BsNC0+cmVnX2xvY2spOwotCWluaXRfTVVURVgoJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfaW5pdCgmb3BsNC0+YWNjZXNzX211dGV4KTsKIAogCWVyciA9IHNuZF9vcGw0X2RldGVjdChvcGw0KTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbG9jYWwuaCBiL3NvdW5kL2RyaXZlcnMvb3BsNC9vcGw0X2xvY2FsLmgKaW5kZXggN2UwODhhNC4uNDcwZTVhNyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbG9jYWwuaAorKysgYi9zb3VuZC9kcml2ZXJzL29wbDQvb3BsNF9sb2NhbC5oCkBAIC0xODIsNyArMTgyLDcgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfZW50cnk7CiAJaW50IG1lbW9yeV9hY2Nlc3M7CiAjZW5kaWYKLQlzdHJ1Y3Qgc2VtYXBob3JlIGFjY2Vzc19tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggYWNjZXNzX211dGV4OwogCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX1NFUVVFTkNFUikgfHwgZGVmaW5lZChDT05GSUdfU05EX1NFUVVFTkNFUl9NT0RVTEUpCiAJaW50IHVzZWQ7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDQvb3BsNF9wcm9jLmMgYi9zb3VuZC9kcml2ZXJzL29wbDQvb3BsNF9wcm9jLmMKaW5kZXggZjRiNGU3NC4uZTU1MmVjMyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGw0L29wbDRfcHJvYy5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsNC9vcGw0X3Byb2MuYwpAQCAtMjgsMTMgKzI4LDEzIEBACiB7CiAJc3RydWN0IHNuZF9vcGw0ICpvcGw0ID0gZW50cnktPnByaXZhdGVfZGF0YTsKIAotCWRvd24oJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BsNC0+YWNjZXNzX211dGV4KTsKIAlpZiAob3BsNC0+bWVtb3J5X2FjY2VzcykgewotCQl1cCgmb3BsNC0+YWNjZXNzX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZvcGw0LT5hY2Nlc3NfbXV0ZXgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlvcGw0LT5tZW1vcnlfYWNjZXNzKys7Ci0JdXAoJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZvcGw0LT5hY2Nlc3NfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC00Myw5ICs0Myw5IEBACiB7CiAJc3RydWN0IHNuZF9vcGw0ICpvcGw0ID0gZW50cnktPnByaXZhdGVfZGF0YTsKIAotCWRvd24oJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BsNC0+YWNjZXNzX211dGV4KTsKIAlvcGw0LT5tZW1vcnlfYWNjZXNzLS07Ci0JdXAoJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZvcGw0LT5hY2Nlc3NfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDQvb3BsNF9zZXEuYyBiL3NvdW5kL2RyaXZlcnMvb3BsNC9vcGw0X3NlcS5jCmluZGV4IGUzNDgwMzIuLmRjMGRjZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvb3BsNC9vcGw0X3NlcS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsNC9vcGw0X3NlcS5jCkBAIC02MiwxMCArNjIsMTAgQEAKIAlzdHJ1Y3Qgc25kX29wbDQgKm9wbDQgPSBwcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIAotCWRvd24oJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BsNC0+YWNjZXNzX211dGV4KTsKIAogCWlmIChvcGw0LT51c2VkKSB7Ci0JCXVwKCZvcGw0LT5hY2Nlc3NfbXV0ZXgpOworCQltdXRleF91bmxvY2soJm9wbDQtPmFjY2Vzc19tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCW9wbDQtPnVzZWQrKzsKQEAgLTczLDEyICs3MywxMiBAQAogCWlmIChpbmZvLT5zZW5kZXIuY2xpZW50ICE9IFNORFJWX1NFUV9DTElFTlRfU1lTVEVNKSB7CiAJCWVyciA9IHNuZF9vcGw0X3NlcV91c2VfaW5jKG9wbDQpOwogCQlpZiAoZXJyIDwgMCkgewotCQkJdXAoJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJCQltdXRleF91bmxvY2soJm9wbDQtPmFjY2Vzc19tdXRleCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQogCi0JdXAoJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZvcGw0LT5hY2Nlc3NfbXV0ZXgpOwogCiAJc25kX29wbDRfc3ludGhfcmVzZXQob3BsNCk7CiAJcmV0dXJuIDA7CkBAIC05MCw5ICs5MCw5IEBACiAKIAlzbmRfb3BsNF9zeW50aF9zaHV0ZG93bihvcGw0KTsKIAotCWRvd24oJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfbG9jaygmb3BsNC0+YWNjZXNzX211dGV4KTsKIAlvcGw0LT51c2VkLS07Ci0JdXAoJm9wbDQtPmFjY2Vzc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZvcGw0LT5hY2Nlc3NfbXV0ZXgpOwogCiAJaWYgKGluZm8tPnNlbmRlci5jbGllbnQgIT0gU05EUlZfU0VRX0NMSUVOVF9TWVNURU0pCiAJCXNuZF9vcGw0X3NlcV91c2VfZGVjKG9wbDQpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwppbmRleCAxMTJkZGY3Li4xYTdmYmVmIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYworKysgYi9zb3VuZC9kcml2ZXJzL3NlcmlhbC11MTY1NTAuYwpAQCAtNzg5LDYgKzc4OSw3IEBACiAKIAlpZiAoKGVyciA9IHNuZF91YXJ0MTY1NTBfZGV0ZWN0KHVhcnQpKSA8PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibm8gVUFSVCBkZXRlY3RlZCBhdCAweCVseFxuIiwgaW9iYXNlKTsKKwkJc25kX3VhcnQxNjU1MF9mcmVlKHVhcnQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTk4OSw4ICs5OTAsMTAgQEAKIAkJcmV0dXJuIGVycjsKIAogCWNhcmRzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFMgJiYgZW5hYmxlW2ldOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewogCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7CisJCWlmICghIGVuYWJsZVtpXSkKKwkJCWNvbnRpbnVlOwogCQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNORF9TRVJJQUxfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKIAkJaWYgKElTX0VSUihkZXZpY2UpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Zpcm1pZGkuYyBiL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCmluZGV4IDQyNTg3MjMuLmEzZWUzMDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jCkBAIC0xNjMsOCArMTYzLDEwIEBACiAJCXJldHVybiBlcnI7CiAKIAljYXJkcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCQlpZiAoISBlbmFibGVbaV0pCisJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfVklSTUlESV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwogCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKaW5kZXggNDNmNjE1ZC4uZmE0YTJiNSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKQEAgLTc3OCw3ICs3NzgsNyBAQAogCWNoaXAtPnR5cGUgPSBody0+dHlwZTsKIAljaGlwLT5vcHMgPSBvcHM7CiAJdGFza2xldF9pbml0KCZjaGlwLT50cSwgdnhfaW50ZXJydXB0LCAodW5zaWduZWQgbG9uZyljaGlwKTsKLQlpbml0X01VVEVYKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfbWl4ZXIuYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfbWl4ZXIuYwppbmRleCA4ZWMyYzYwLi5jMWQ3ZmNkIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X21peGVyLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9taXhlci5jCkBAIC00MjcsMTAgKzQyNywxMCBAQAogewogCXN0cnVjdCB2eF9jb3JlICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjb2RlYyA9IGtjb250cm9sLT5pZC5pbmRleDsKLQlkb3duKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY2hpcC0+b3V0cHV0X2xldmVsW2NvZGVjXVswXTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGNoaXAtPm91dHB1dF9sZXZlbFtjb2RlY11bMV07Ci0JdXAoJmNoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM4LDcgKzQzOCw3IEBACiB7CiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNvZGVjID0ga2NvbnRyb2wtPmlkLmluZGV4OwotCWRvd24oJmNoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICE9IGNoaXAtPm91dHB1dF9sZXZlbFtjb2RlY11bMF0gfHwKIAkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gIT0gY2hpcC0+b3V0cHV0X2xldmVsW2NvZGVjXVsxXSkgewogCQl2eF9zZXRfYW5hbG9nX291dHB1dF9sZXZlbChjaGlwLCBjb2RlYywKQEAgLTQ0NiwxMCArNDQ2LDEwIEBACiAJCQkJCSAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdKTsKIAkJY2hpcC0+b3V0cHV0X2xldmVsW2NvZGVjXVswXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCQljaGlwLT5vdXRwdXRfbGV2ZWxbY29kZWNdWzFdID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV07Ci0JCXVwKCZjaGlwLT5taXhlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCQlyZXR1cm4gMTsKIAl9Ci0JdXAoJmNoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTAyLDE0ICs1MDIsMTQgQEAKIHN0YXRpYyBpbnQgdnhfYXVkaW9fc3JjX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JZG93bigmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlpZiAoY2hpcC0+YXVkaW9fc291cmNlX3RhcmdldCAhPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CiAJCWNoaXAtPmF1ZGlvX3NvdXJjZV90YXJnZXQgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwogCQl2eF9zeW5jX2F1ZGlvX3NvdXJjZShjaGlwKTsKLQkJdXAoJmNoaXAtPm1peGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJCXJldHVybiAxOwogCX0KLQl1cCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC01NTAsMTQgKzU1MCwxNCBAQAogc3RhdGljIGludCB2eF9jbG9ja19tb2RlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JZG93bigmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlpZiAoY2hpcC0+Y2xvY2tfbW9kZSAhPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CiAJCWNoaXAtPmNsb2NrX21vZGUgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwogCQl2eF9zZXRfY2xvY2soY2hpcCwgY2hpcC0+ZnJlcSk7Ci0JCXVwKCZjaGlwLT5taXhlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCQlyZXR1cm4gMTsKIAl9Ci0JdXAoJmNoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTg3LDEwICs1ODcsMTAgQEAKIAlpbnQgYXVkaW8gPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CiAJaW50IGNhcHR1cmUgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAxOwogCi0JZG93bigmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmF1ZGlvX2dhaW5bY2FwdHVyZV1bYXVkaW9dOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+YXVkaW9fZ2FpbltjYXB0dXJlXVthdWRpbysxXTsKLQl1cCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC02MDAsMTUgKzYwMCwxNSBAQAogCWludCBhdWRpbyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKIAlpbnQgY2FwdHVyZSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA4KSAmIDE7CiAKLQlkb3duKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAhPSBjaGlwLT5hdWRpb19nYWluW2NhcHR1cmVdW2F1ZGlvXSB8fAogCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAhPSBjaGlwLT5hdWRpb19nYWluW2NhcHR1cmVdW2F1ZGlvKzFdKSB7CiAJCXZ4X3NldF9hdWRpb19nYWluKGNoaXAsIGF1ZGlvLCBjYXB0dXJlLCB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CiAJCXZ4X3NldF9hdWRpb19nYWluKGNoaXAsIGF1ZGlvKzEsIGNhcHR1cmUsIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdKTsKLQkJdXAoJmNoaXAtPm1peGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJCXJldHVybiAxOwogCX0KLQl1cCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC02MTcsMTAgKzYxNywxMCBAQAogCXN0cnVjdCB2eF9jb3JlICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBhdWRpbyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKIAotCWRvd24oJmNoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5hdWRpb19tb25pdG9yW2F1ZGlvXTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGNoaXAtPmF1ZGlvX21vbml0b3JbYXVkaW8rMV07Ci0JdXAoJmNoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjI5LDE3ICs2MjksMTcgQEAKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgYXVkaW8gPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CiAKLQlkb3duKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAhPSBjaGlwLT5hdWRpb19tb25pdG9yW2F1ZGlvXSB8fAogCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAhPSBjaGlwLT5hdWRpb19tb25pdG9yW2F1ZGlvKzFdKSB7CiAJCXZ4X3NldF9tb25pdG9yX2xldmVsKGNoaXAsIGF1ZGlvLCB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSwKIAkJCQkgICAgIGNoaXAtPmF1ZGlvX21vbml0b3JfYWN0aXZlW2F1ZGlvXSk7CiAJCXZ4X3NldF9tb25pdG9yX2xldmVsKGNoaXAsIGF1ZGlvKzEsIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdLAogCQkJCSAgICAgY2hpcC0+YXVkaW9fbW9uaXRvcl9hY3RpdmVbYXVkaW8rMV0pOwotCQl1cCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAkJcmV0dXJuIDE7CiAJfQotCXVwKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1NywxMCArNjU3LDEwIEBACiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGF1ZGlvID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOwogCi0JZG93bigmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmF1ZGlvX2FjdGl2ZVthdWRpb107CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBjaGlwLT5hdWRpb19hY3RpdmVbYXVkaW8rMV07Ci0JdXAoJmNoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY5LDE1ICs2NjksMTUgQEAKIAlzdHJ1Y3QgdnhfY29yZSAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgYXVkaW8gPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CiAKLQlkb3duKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAhPSBjaGlwLT5hdWRpb19hY3RpdmVbYXVkaW9dIHx8CiAJICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICE9IGNoaXAtPmF1ZGlvX2FjdGl2ZVthdWRpbysxXSkgewogCQl2eF9zZXRfYXVkaW9fc3dpdGNoKGNoaXAsIGF1ZGlvLCB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7CiAJCXZ4X3NldF9hdWRpb19zd2l0Y2goY2hpcCwgYXVkaW8rMSwgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0pOwotCQl1cCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAkJcmV0dXJuIDE7CiAJfQotCXVwKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY4NiwxMCArNjg2LDEwIEBACiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGF1ZGlvID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOwogCi0JZG93bigmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmF1ZGlvX21vbml0b3JfYWN0aXZlW2F1ZGlvXTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGNoaXAtPmF1ZGlvX21vbml0b3JfYWN0aXZlW2F1ZGlvKzFdOwotCXVwKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5OCwxNyArNjk4LDE3IEBACiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGF1ZGlvID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOwogCi0JZG93bigmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gIT0gY2hpcC0+YXVkaW9fbW9uaXRvcl9hY3RpdmVbYXVkaW9dIHx8CiAJICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICE9IGNoaXAtPmF1ZGlvX21vbml0b3JfYWN0aXZlW2F1ZGlvKzFdKSB7CiAJCXZ4X3NldF9tb25pdG9yX2xldmVsKGNoaXAsIGF1ZGlvLCBjaGlwLT5hdWRpb19tb25pdG9yW2F1ZGlvXSwKIAkJCQkgICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKIAkJdnhfc2V0X21vbml0b3JfbGV2ZWwoY2hpcCwgYXVkaW8rMSwgY2hpcC0+YXVkaW9fbW9uaXRvclthdWRpbysxXSwKIAkJCQkgICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdKTsKLQkJdXAoJmNoaXAtPm1peGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJCXJldHVybiAxOwogCX0KLQl1cCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC03NTYsMTIgKzc1NiwxMiBAQAogewogCXN0cnVjdCB2eF9jb3JlICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JZG93bigmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1swXSA9IChjaGlwLT51ZXJfYml0cyA+PiAwKSAmIDB4ZmY7CiAJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMV0gPSAoY2hpcC0+dWVyX2JpdHMgPj4gOCkgJiAweGZmOwogCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzJdID0gKGNoaXAtPnVlcl9iaXRzID4+IDE2KSAmIDB4ZmY7CiAJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbM10gPSAoY2hpcC0+dWVyX2JpdHMgPj4gMjQpICYgMHhmZjsKLQl1cCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWl4ZXJfbXV0ZXgpOwogICAgICAgICByZXR1cm4gMDsKIH0KIApAQCAtNzgzLDE0ICs3ODMsMTQgQEAKIAkgICAgICAodWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMV0gPDwgOCkgfAogCSAgICAgICh1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1syXSA8PCAxNikgfAogCSAgICAgICh1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1szXSA8PCAyNCk7Ci0JZG93bigmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAlpZiAoY2hpcC0+dWVyX2JpdHMgIT0gdmFsKSB7CiAJCWNoaXAtPnVlcl9iaXRzID0gdmFsOwogCQl2eF9zZXRfaWVjOTU4X3N0YXR1cyhjaGlwLCB2YWwpOwotCQl1cCgmY2hpcC0+bWl4ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNoaXAtPm1peGVyX211dGV4KTsKIAkJcmV0dXJuIDE7CiAJfQotCXVwKCZjaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCmluZGV4IDQ2NDEwOWUuLmM0YWY4NDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9wY20uYwpAQCAtOTgsMTAgKzk4LDkgQEAKIHN0YXRpYyBpbnQgc25kX3BjbV9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKLQlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCQlydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7Ci0JfQorCisJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI1NCw5ICsxMjUzLDEzIEBACiAKIAkvKiBhbGxvY2F0ZSBwaXBlcyAqLwogCWNoaXAtPnBsYXliYWNrX3BpcGVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZ4X3BpcGUgKikgKiBjaGlwLT5hdWRpb19vdXRzLCBHRlBfS0VSTkVMKTsKLQljaGlwLT5jYXB0dXJlX3BpcGVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZ4X3BpcGUgKikgKiBjaGlwLT5hdWRpb19pbnMsIEdGUF9LRVJORUwpOwotCWlmICghIGNoaXAtPnBsYXliYWNrX3BpcGVzIHx8ICEgY2hpcC0+Y2FwdHVyZV9waXBlcykKKwlpZiAoIWNoaXAtPnBsYXliYWNrX3BpcGVzKQogCQlyZXR1cm4gLUVOT01FTTsKKwljaGlwLT5jYXB0dXJlX3BpcGVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZ4X3BpcGUgKikgKiBjaGlwLT5hdWRpb19pbnMsIEdGUF9LRVJORUwpOworCWlmICghY2hpcC0+Y2FwdHVyZV9waXBlcykgeworCQlrZnJlZShjaGlwLT5wbGF5YmFja19waXBlcyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW1lbXNldChjaGlwLT5wbGF5YmFja19waXBlcywgMCwgc2l6ZW9mKHN0cnVjdCB2eF9waXBlICopICogY2hpcC0+YXVkaW9fb3V0cyk7CiAJbWVtc2V0KGNoaXAtPmNhcHR1cmVfcGlwZXMsIDAsIHNpemVvZihzdHJ1Y3QgdnhfcGlwZSAqKSAqIGNoaXAtPmF1ZGlvX2lucyk7CmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvY3M4NDI3LmMgYi9zb3VuZC9pMmMvY3M4NDI3LmMKaW5kZXggOWRlYmE4MC4uY2I4OWY3ZSAxMDA2NDQKLS0tIGEvc291bmQvaTJjL2NzODQyNy5jCisrKyBiL3NvdW5kL2kyYy9jczg0MjcuYwpAQCAtMjkxLDExICsyOTEsMTMgQEAKIHsKIAlzdHJ1Y3QgY3M4NDI3ICpjaGlwOwogCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7Ci0JaW50IGRhdGE7CisJaW50IGRhdGEsIGFlczNpbnB1dCA9IDA7CiAKIAlzbmRfYXNzZXJ0KGNzODQyNywgcmV0dXJuKTsKIAljaGlwID0gY3M4NDI3LT5wcml2YXRlX2RhdGE7CiAJc25kX2kyY19sb2NrKGNzODQyNy0+YnVzKTsKKwlpZiAoKGNoaXAtPnJlZ21hcFtDUzg0MjdfUkVHX0NMT0NLU09VUkNFXSAmIENTODQyN19SWERBRVMzSU5QVVQpID09IENTODQyN19SWERBRVMzSU5QVVQpICAvKiBBRVMzIGJpdCBpcyBzZXQgKi8KKwkJYWVzM2lucHV0ID0gMTsKIAljaGlwLT5yZWdtYXBbQ1M4NDI3X1JFR19DTE9DS1NPVVJDRV0gJj0gfihDUzg0MjdfUlVOIHwgQ1M4NDI3X1JYRE1BU0spOwogCXNuZF9jczg0MjdfcmVnX3dyaXRlKGNzODQyNywgQ1M4NDI3X1JFR19DTE9DS1NPVVJDRSwKIAkJCSAgICAgY2hpcC0+cmVnbWFwW0NTODQyN19SRUdfQ0xPQ0tTT1VSQ0VdKTsKQEAgLTMxNiw3ICszMTgsOCBAQAogCX0KIAlzbmRfaTJjX2xvY2soY3M4NDI3LT5idXMpOwogCWNoaXAtPnJlZ21hcFtDUzg0MjdfUkVHX0NMT0NLU09VUkNFXSAmPSB+Q1M4NDI3X1JYRE1BU0s7Ci0JY2hpcC0+cmVnbWFwW0NTODQyN19SRUdfQ0xPQ0tTT1VSQ0VdIHw9IENTODQyN19SWERBRVMzSU5QVVQ7CisJaWYgKGFlczNpbnB1dCkKKwkJY2hpcC0+cmVnbWFwW0NTODQyN19SRUdfQ0xPQ0tTT1VSQ0VdIHw9IENTODQyN19SWERBRVMzSU5QVVQ7CiAJc25kX2NzODQyN19yZWdfd3JpdGUoY3M4NDI3LCBDUzg0MjdfUkVHX0NMT0NLU09VUkNFLAogCQkJICAgICBjaGlwLT5yZWdtYXBbQ1M4NDI3X1JFR19DTE9DS1NPVVJDRV0pOwogCXNuZF9pMmNfdW5sb2NrKGNzODQyNy0+YnVzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9pMmMuYyBiL3NvdW5kL2kyYy9pMmMuYwppbmRleCBjNGUxZjJjLi5lZGZlNzZmIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvaTJjLmMKKysrIGIvc291bmQvaTJjL2kyYy5jCkBAIC04OCw3ICs4OCw3IEBACiAJYnVzID0ga3phbGxvYyhzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOwogCWlmIChidXMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaW5pdF9NVVRFWCgmYnVzLT5sb2NrX211dGV4KTsKKwltdXRleF9pbml0KCZidXMtPmxvY2tfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZidXMtPmRldmljZXMpOwogCUlOSVRfTElTVF9IRUFEKCZidXMtPmJ1c2VzKTsKIAlidXMtPmNhcmQgPSBjYXJkOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKaW5kZXggYWMwZDgwOC4uZmQ4ZmUxNiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCkBAIC0xLDQgKzEsMyBAQAotCiAvKgogICAgIGFkMTgxNmEuYyAtIGxvd2xldmVsIGNvZGUgZm9yIEFuYWxvZyBEZXZpY2VzIEFEMTgxNkEgY2hpcC4KICAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBieSBNYXNzaW1vIFBpY2Npb25pIDxkYWZhc3RpZGlvQGxpYmVyby5pdD4KQEAgLTE3NSw3ICsxNzQsNyBAQAogCiAKIHN0YXRpYyBpbnQgc25kX2FkMTgxNmFfdHJpZ2dlcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIHVuc2lnbmVkIGNoYXIgd2hhdCwKLQkJCSAgICAgICBpbnQgY2hhbm5lbCwgaW50IGNtZCkKKwkJCSAgICAgICBpbnQgY2hhbm5lbCwgaW50IGNtZCwgaW50IGlzY2FwdHVyZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCkBAIC0xODQsMTAgKzE4MywxNCBAQAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKIAkJc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKIAkJY21kID0gKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCkgPyAweGZmOiAweDAwOwotCQlpZiAod2hhdCAmIEFEMTgxNkFfUExBWUJBQ0tfRU5BQkxFKQorCQkvKiBpZiAod2hhdCAmIEFEMTgxNkFfUExBWUJBQ0tfRU5BQkxFKSAqLworCQkvKiBUaGF0IGlzIG5vdCB2YWxpZCwgYmVjYXVzZSBwbGF5YmFjayBhbmQgY2FwdHVyZSBlbmFibGUKKwkJICogYXJlIHRoZSBzYW1lIGJpdCBwYXR0ZXJuLCBqdXN0IHRvIGRpZmZlcmVudCBhZGRyZXNzZXMKKwkJICovCisJCWlmICghIGlzY2FwdHVyZSkKIAkJCXNuZF9hZDE4MTZhX291dF9tYXNrKGNoaXAsIEFEMTgxNkFfUExBWUJBQ0tfQ09ORklHLAogCQkJCUFEMTgxNkFfUExBWUJBQ0tfRU5BQkxFLCBjbWQpOwotCQlpZiAod2hhdCAmIEFEMTgxNkFfQ0FQVFVSRV9FTkFCTEUpCisJCWVsc2UKIAkJCXNuZF9hZDE4MTZhX291dF9tYXNrKGNoaXAsIEFEMTgxNkFfQ0FQVFVSRV9DT05GSUcsCiAJCQkJQUQxODE2QV9DQVBUVVJFX0VOQUJMRSwgY21kKTsKIAkJc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwpAQCAtMjA0LDE0ICsyMDcsMTQgQEAKIHsKIAlzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJcmV0dXJuIHNuZF9hZDE4MTZhX3RyaWdnZXIoY2hpcCwgQUQxODE2QV9QTEFZQkFDS19FTkFCTEUsCi0JCVNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssIGNtZCk7CisJCQkJICAgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgY21kLCAwKTsKIH0KIAogc3RhdGljIGludCBzbmRfYWQxODE2YV9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCiB7CiAJc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXJldHVybiBzbmRfYWQxODE2YV90cmlnZ2VyKGNoaXAsIEFEMTgxNkFfQ0FQVFVSRV9FTkFCTEUsCi0JCVNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgY21kKTsKKwkJCQkgICBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsIGNtZCwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2FkMTgxNmFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKaW5kZXggZTA5MWJiZS4uMzI2YTA1NyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYworKysgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCkBAIC0xODcsOCArMTg3LDEwIEBACiAJCXJldHVybiBlcnI7CiAKIAljYXJkcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCQlpZiAoISBlbmFibGVbaV0pCisJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfQUQxODQ4X0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7CiAJCWlmIChJU19FUlIoZGV2aWNlKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTg0OC9hZDE4NDhfbGliLmMgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OF9saWIuYwppbmRleCBiNzg1MzBkLi5lMGY4YmFhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OF9saWIuYworKysgYi9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OF9saWIuYwpAQCAtMzg3LDkgKzM4Nyw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWlmIChjaGlwLT5tb2RlICYgQUQxODQ4X01PREVfT1BFTikgewotCQl1cCgmY2hpcC0+b3Blbl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAlzbmRfYWQxODQ4X21jZV9kb3duKGNoaXApOwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAogCWNoaXAtPm1vZGUgPSBtb2RlOwotCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDEsOSArNDQxLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG93bigmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJaWYgKCFjaGlwLT5tb2RlKSB7Ci0JCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAkvKiBkaXNhYmxlIElSUSAqLwpAQCAtNDcxLDcgKzQ3MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAogCWNoaXAtPm1vZGUgPSAwOwotCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogfQogCiAvKgpAQCAtODg5LDcgKzg4OSw3IEBACiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKLQlpbml0X01VVEVYKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF9pbml0KCZjaGlwLT5vcGVuX211dGV4KTsKIAljaGlwLT5jYXJkID0gY2FyZDsKIAljaGlwLT5wb3J0ID0gcG9ydDsKIAljaGlwLT5pcnEgPSAtMTsKQEAgLTEyMDIsMTAgKzEyMDIsOCBAQAogCXN0cmxjcHkoY3RsLT5pZC5uYW1lLCBuYW1lLCBzaXplb2YoY3RsLT5pZC5uYW1lKSk7CiAJY3RsLT5pZC5pbmRleCA9IGluZGV4OwogCWN0bC0+cHJpdmF0ZV92YWx1ZSA9IHZhbHVlOwotCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY3RsKSkgPCAwKSB7Ci0JCXNuZF9jdGxfZnJlZV9vbmUoY3RsKTsKKwlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGN0bCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCmluZGV4IGFiNjdiNWMuLmEzMGRjZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwpAQCAtMjAzLDggKzIwMywxMCBAQAogCQlyZXR1cm4gZXJyOwogCiAJY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUyAmJiBlbmFibGVbaV07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKKwkJaWYgKCEgZW5hYmxlW2ldKQorCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX0NTNDIzMV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwogCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxX2xpYi5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzFfbGliLmMKaW5kZXggZWFiN2ViNS4uODIzZGI4MiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzFfbGliLmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzFfbGliLmMKQEAgLTUzMSw3ICs1MzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGZ1bGxfY2FsaWIgPSAxOwogCi0JZG93bigmY2hpcC0+bWNlX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogCXNuZF9jczQyMzFfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJaWYgKGNoaXAtPmhhcmR3YXJlID09IENTNDIzMV9IV19DUzQyMzFBIHx8CiAJICAgIChjaGlwLT5oYXJkd2FyZSAmIENTNDIzMV9IV19DUzQyMzJfTUFTSykpIHsKQEAgLTU2MCw3ICs1NjAsNyBAQAogCQlzbmRfY3M0MjMxX21jZV9kb3duKGNoaXApOwogCX0KIAlzbmRfY3M0MjMxX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwotCXVwKCZjaGlwLT5tY2VfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWNlX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgc25kX2NzNDIzMV9jYXB0dXJlX2Zvcm1hdChzdHJ1Y3Qgc25kX2NzNDIzMSAqY2hpcCwKQEAgLTU3MCw3ICs1NzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGZ1bGxfY2FsaWIgPSAxOwogCi0JZG93bigmY2hpcC0+bWNlX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogCXNuZF9jczQyMzFfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJaWYgKGNoaXAtPmhhcmR3YXJlID09IENTNDIzMV9IV19DUzQyMzFBIHx8CiAJICAgIChjaGlwLT5oYXJkd2FyZSAmIENTNDIzMV9IV19DUzQyMzJfTUFTSykpIHsKQEAgLTYwMyw3ICs2MDMsNyBAQAogCQlzbmRfY3M0MjMxX21jZV9kb3duKGNoaXApOwogCX0KIAlzbmRfY3M0MjMxX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwotCXVwKCZjaGlwLT5tY2VfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWNlX211dGV4KTsKIH0KIAogLyoKQEAgLTcwOSwxNSArNzA5LDE1IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWlmICgoY2hpcC0+bW9kZSAmIG1vZGUpIHx8CiAJICAgICgoY2hpcC0+bW9kZSAmIENTNDIzMV9NT0RFX09QRU4pICYmIGNoaXAtPnNpbmdsZV9kbWEpKSB7Ci0JCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCWlmIChjaGlwLT5tb2RlICYgQ1M0MjMxX01PREVfT1BFTikgewogCQljaGlwLT5tb2RlIHw9IG1vZGU7Ci0JCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIG9rLiBub3cgZW5hYmxlIGFuZCBhY2sgQ09ERUMgSVJRICovCkBAIC03MzcsNyArNzM3LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCiAJY2hpcC0+bW9kZSA9IG1vZGU7Ci0JdXAoJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc0NSwxMCArNzQ1LDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWNoaXAtPm1vZGUgJj0gfm1vZGU7CiAJaWYgKGNoaXAtPm1vZGUgJiBDUzQyMzFfTU9ERV9PUEVOKSB7Ci0JCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAkJcmV0dXJuOwogCX0KIAlzbmRfY3M0MjMxX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJc25kX2NzNDIzMV9jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAogCWNoaXAtPm1vZGUgPSAwOwotCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogfQogCiAvKgpAQCAtMTQwOCw4ICsxNDA4LDggQEAKIAljaGlwLT5od3NoYXJlID0gaHdzaGFyZTsKIAogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7Ci0JaW5pdF9NVVRFWCgmY2hpcC0+bWNlX211dGV4KTsKLQlpbml0X01VVEVYKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF9pbml0KCZjaGlwLT5tY2VfbXV0ZXgpOworCW11dGV4X2luaXQoJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWNoaXAtPmNhcmQgPSBjYXJkOwogCWNoaXAtPnJhdGVfY29uc3RyYWludCA9IHNuZF9jczQyMzFfeHJhdGU7CiAJY2hpcC0+c2V0X3BsYXliYWNrX2Zvcm1hdCA9IHNuZF9jczQyMzFfcGxheWJhY2tfZm9ybWF0OwpAQCAtMTUzOCw4ICsxNTM4LDggQEAKIAkJcmV0dXJuIGVycjsKIAogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7Ci0JaW5pdF9NVVRFWCgmY2hpcC0+bWNlX211dGV4KTsKLQlpbml0X01VVEVYKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF9pbml0KCZjaGlwLT5tY2VfbXV0ZXgpOworCW11dGV4X2luaXQoJmNoaXAtPm9wZW5fbXV0ZXgpOwogCiAJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9jczQyMzFfcGxheWJhY2tfb3BzKTsKIAlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfY3M0MjMxX2NhcHR1cmVfb3BzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCmluZGV4IDRmYTQzMTAuLjQwNjA5MTggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwpAQCAtNDE0LDcgKzQxNCw3IEBACiAJfQogCS8qIE1QVSBpbml0aWFsaXphdGlvbiAqLwogCWlmIChhY2FyZC0+bXB1ICYmIG1wdV9wb3J0W2Rldl0gPiAwKSB7Ci0JCWlmIChzbmRfY3M0MjN4X3BucF9pbml0X21wdShkZXYsIGFjYXJkLT5jdHJsLCBjZmcpIDwgMCkKKwkJaWYgKHNuZF9jczQyM3hfcG5wX2luaXRfbXB1KGRldiwgYWNhcmQtPm1wdSwgY2ZnKSA8IDApCiAJCQlnb3RvIGVycm9yOwogCX0KIAlrZnJlZShjZmcpOwpAQCAtNzcxLDkgKzc3MSw5IEBACiAJaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNzNDIzeF9ub25wbnBfZHJpdmVyKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCQlpZiAoaXNfaXNhcG5wX3NlbGVjdGVkKGkpKQorCQlpZiAoISBlbmFibGVbaV0gfHwgaXNfaXNhcG5wX3NlbGVjdGVkKGkpKQogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoQ1M0MjNYX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCmluZGV4IGUzNjk4MWQuLjdhNWE2YzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2X2xpYi5jCkBAIC02NDQsNyArNjQ0LDcgQEAKIAl2YWwyID0gKGNoaXAtPmVpbWFnZVtDUzQyMzZfUkVHKENTNDIzNl9SSUdIVF9NQVNURVIpXSAmIH4weDdmKSB8IHZhbDI7CiAJY2hhbmdlID0gdmFsMSAhPSBjaGlwLT5laW1hZ2VbQ1M0MjM2X1JFRyhDUzQyMzZfTEVGVF9NQVNURVIpXSB8fCB2YWwyICE9IGNoaXAtPmVpbWFnZVtDUzQyMzZfUkVHKENTNDIzNl9SSUdIVF9NQVNURVIpXTsKIAlzbmRfY3M0MjM2X2V4dF9vdXQoY2hpcCwgQ1M0MjM2X0xFRlRfTUFTVEVSLCB2YWwxKTsKLQlzbmRfY3M0MjM2X2V4dF9vdXQoY2hpcCwgQ1M0MjM2X1JJR0hUX01BU1RFUiwgdmFsMSk7CisJc25kX2NzNDIzNl9leHRfb3V0KGNoaXAsIENTNDIzNl9SSUdIVF9NQVNURVIsIHZhbDIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KQEAgLTg0MSw3ICs4NDEsNyBAQAogCQogCWVuYWJsZSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMTsKIAotCWRvd24oJmNoaXAtPm1jZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWNlX211dGV4KTsKIAlzbmRfY3M0MjMxX21jZV91cChjaGlwKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl2YWwgPSAoY2hpcC0+aW1hZ2VbQ1M0MjMxX0FMVF9GRUFUVVJFXzFdICYgfjB4MGUpIHwgKDA8PDIpIHwgKGVuYWJsZSA8PCAxKTsKQEAgLTg1NCw3ICs4NTQsNyBAQAogCXNuZF9jczQyMzZfY3RybF9vdXQoY2hpcCwgNCwgdmFsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCXNuZF9jczQyMzFfbWNlX2Rvd24oY2hpcCk7Ci0JdXAoJmNoaXAtPm1jZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogCiAjaWYgMAogCXByaW50aygic2V0IHZhbGlkOiBBTFQgPSAweCV4LCBDMyA9IDB4JXgsIEM0ID0gMHgleCwgQzUgPSAweCV4LCBDNiA9IDB4JXgsIEM4ID0gMHgleFxuIiwKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMgYi9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCmluZGV4IDUwZDIzY2YuLjJiNjlmYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwpAQCAtMjA3LDggKzIwNywxMCBAQAogCQlyZXR1cm4gZXJyOwogCiAJY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUyAmJiBlbmFibGVbaV07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKKwkJaWYgKCEgZW5hYmxlW2ldKQorCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRVMxNjg4X0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7CiAJCWlmIChJU19FUlIoZGV2aWNlKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTh4eC5jIGIvc291bmQvaXNhL2VzMTh4eC5jCmluZGV4IDA4ZjAzMmIuLjcyMTk1NWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE4eHguYworKysgYi9zb3VuZC9pc2EvZXMxOHh4LmMKQEAgLTQ5LDYgKzQ5LDEwIEBACiAgKiAtIGNvbnRyYXJpbHkgdG8gc29tZSBwYWdlcyBpbiBEU18xODY5LlBERiB0aGUgcmF0ZXMgY2FuIGJlIHNldAogICogICBpbmRlcGVuZGVudGx5LgogICoKKyAqIC0gWm9vbSBWaWRlbyBpcyBpbXBsZW1lbnRlZCBieSBzaGFyaW5nIHRoZSBGTSBEQUMsIHRodXMgdGhlIHVzZXIgY2FuCisgKiAgIGhhdmUgZWl0aGVyIEZNIHBsYXliYWNrIG9yIFZpZGVvIHBsYXliYWNrIGJ1dCBub3QgYm90aCBzaW11bHRhbmVvdXNseS4KKyAqICAgVGhlIFZpZGVvIFBsYXliYWNrIFN3aXRjaCBtaXhlciBjb250cm9sIHRvZ2dsZXMgdGhpcyBjaG9pY2UuCisgKgogICogQlVHUzoKICAqCiAgKiAtIFRoZXJlIGlzIGEgbWFqb3IgdHJvdWJsZSBJIG5vdGVkOgpAQCAtNjMsNyArNjcsMTYgQEAKICAqCiAgKi8KIAotCisvKgorICogRVMxODc5IE5PVEVTOgorICogLSBXaGVuIFpvb20gVmlkZW8gaXMgZW5hYmxlZCAocmVnIDB4NzEgYml0IDYgdG9nZ2xlZCBvbikgdGhlIFBDTSBwbGF5YmFjaworICogICBzZWVtcyB0byBiZSBlZmZlY3RlZCAoc3BlYWtlcl90ZXN0IHBsYXlzIGEgbG93ZXIgZnJlcXVlbmN5KS4gQ2FuJ3QgZmluZAorICogICBhbnl0aGluZyBpbiB0aGUgZGF0YXNoZWV0IHRvIGFjY291bnQgZm9yIHRoaXMsIHNvIGEgVmlkZW8gUGxheWJhY2sgU3dpdGNoCisgKiAgIGNvbnRyb2wgaGFzIGJlZW4gaW5jbHVkZWQgdG8gYWxsb3cgWlYgdG8gYmUgZW5hYmxlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LgorICogICBUaGVuIGFnYWluIG9uIGF0IGxlYXN0IG9uZSB0ZXN0IHN5c3RlbSB0aGUgMHg3MSBiaXQgNiBlbmFibGUgYml0IGlzIG5vdCAKKyAqICAgbmVlZGVkIGZvciBaViwgc28gbWF5YmUgdGhlIGRhdGFzaGVldCBpcyBlbnRpcmVseSB3cm9uZyBoZXJlLgorICovCisgCiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMTQ4LDcgKzE2MSw3IEBACiAjZGVmaW5lIEVTMThYWF9EVVBMRVhfU0FNRSAweDAwMTAJLyogUGxheWJhY2sgYW5kIHJlY29yZCBtdXN0IHNoYXJlIHRoZSBzYW1lIHJhdGUgKi8KICNkZWZpbmUgRVMxOFhYX05FV19SQVRFCTB4MDAyMAkvKiBNb3JlIHByZWNpc2UgcmF0ZSBzZXR0aW5nICovCiAjZGVmaW5lIEVTMThYWF9BVVhCCTB4MDA0MAkvKiBBdXhCIG1peGVyIGNvbnRyb2wgKi8KLSNkZWZpbmUgRVMxOFhYX0hXVgkweDAwODAJLyogSGFzIGhhcmR3YXJlIHZvbHVtZSAqLworI2RlZmluZSBFUzE4WFhfSFdWCTB4MDA4MAkvKiBIYXMgc2VwZXJhdGUgaGFyZHdhcmUgdm9sdW1lIG1peGVyIGNvbnRyb2xzKi8KICNkZWZpbmUgRVMxOFhYX01PTk8JMHgwMTAwCS8qIE1vbm9faW4gbWl4ZXIgY29udHJvbCAqLwogI2RlZmluZSBFUzE4WFhfSTJTCTB4MDIwMAkvKiBJMlMgbWl4ZXIgY29udHJvbCAqLwogI2RlZmluZSBFUzE4WFhfTVVURVJFQwkweDA0MDAJLyogUmVjb3JkIHNvdXJjZSBjYW4gYmUgbXV0ZWQgKi8KQEAgLTc4OCw5ICs4MDEsMTIgQEAKIAogCS8qIEhhcmR3YXJlIHZvbHVtZSAqLwogCWlmIChzdGF0dXMgJiBIV1ZfSVJRKSB7Ci0JCWludCBzcGxpdCA9IHNuZF9lczE4eHhfbWl4ZXJfcmVhZChjaGlwLCAweDY0KSAmIDB4ODA7Ci0JCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLCAmY2hpcC0+aHdfc3dpdGNoLT5pZCk7Ci0JCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLCAmY2hpcC0+aHdfdm9sdW1lLT5pZCk7CisJCWludCBzcGxpdCA9IDA7CisJCWlmIChjaGlwLT5jYXBzICYgRVMxOFhYX0hXVikgeworCQkJc3BsaXQgPSBzbmRfZXMxOHh4X21peGVyX3JlYWQoY2hpcCwgMHg2NCkgJiAweDgwOworCQkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsICZjaGlwLT5od19zd2l0Y2gtPmlkKTsKKwkJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLCAmY2hpcC0+aHdfdm9sdW1lLT5pZCk7CisJCX0KIAkJaWYgKCFzcGxpdCkgewogCQkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsICZjaGlwLT5tYXN0ZXJfc3dpdGNoLT5pZCk7CiAJCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgJmNoaXAtPm1hc3Rlcl92b2x1bWUtPmlkKTsKQEAgLTkzOSwzNyArOTU1LDExOCBAQAogICogIE1JWEVSIHBhcnQKICAqLwogCisvKiBSZWNvcmQgc291cmNlIG11eCByb3V0aW5lczoKKyAqIERlcGVuZGluZyBvbiB0aGUgY2hpcHNldCB0aGlzIG11eCBzd2l0Y2hlcyBiZXR3ZWVuIDQsIDUsIG9yIDggcG9zc2libGUgaW5wdXRzLgorICogYml0IHRhYmxlIGZvciB0aGUgNC81IHNvdXJjZSBtdXg6CisgKiByZWcgMUM6CisgKiAgYjIgYjEgYjAgICBtdXhTb3VyY2UKKyAqICAgeCAgMCAgeCAgIG1pY3JvcGhvbmUKKyAqICAgMCAgMSAgeCAgIENECisgKiAgIDEgIDEgIDAgICBsaW5lCisgKiAgIDEgIDEgIDEgICBtaXhlcgorICogaWYgaXQncyAibWl4ZXIiIGFuZCBpdCdzIGEgNSBzb3VyY2UgbXV4IGNoaXBzZXQgdGhlbiByZWcgN0EgYml0IDMgZGV0ZXJtaW5lcworICogZWl0aGVyIHRoZSBwbGF5IG1peGVyIG9yIHRoZSBjYXB0dXJlIG1peGVyLgorICoKKyAqICJtYXA0U291cmNlIiB0cmFuc2xhdGVzIGZyb20gc291cmNlIG51bWJlciB0byByZWcgYml0IHBhdHRlcm4KKyAqICJpbnZNYXA0U291cmNlIiB0cmFuc2xhdGVzIGZyb20gcmVnIGJpdCBwYXR0ZXJuIHRvIHNvdXJjZSBudW1iZXIKKyAqLworCiBzdGF0aWMgaW50IHNuZF9lczE4eHhfaW5mb19tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzWzhdID0geworCXN0YXRpYyBjaGFyICp0ZXh0czRTb3VyY2VbNF0gPSB7CisJCSJNaWMiLCAiQ0QiLCAiTGluZSIsICJNYXN0ZXIiCisJfTsKKwlzdGF0aWMgY2hhciAqdGV4dHM1U291cmNlWzVdID0geworCQkiTWljIiwgIkNEIiwgIkxpbmUiLCAiTWFzdGVyIiwgIk1peCIKKwl9OworCXN0YXRpYyBjaGFyICp0ZXh0czhTb3VyY2VbOF0gPSB7CiAJCSJNaWMiLCAiTWljIE1hc3RlciIsICJDRCIsICJBT1VUIiwKIAkJIk1pYzEiLCAiTWl4IiwgIkxpbmUiLCAiTWFzdGVyIgogCX07CisJc3RydWN0IHNuZF9lczE4eHggKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAKIAl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKIAl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gODsKLQlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IDcpCi0JCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSA3OwotCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJc3dpdGNoIChjaGlwLT52ZXJzaW9uKSB7CisJY2FzZSAweDE4Njg6CisJY2FzZSAweDE4Nzg6CisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gNDsKKwkJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAzKQorCQkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDM7CisJCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0czRTb3VyY2VbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOworCQlicmVhazsKKwljYXNlIDB4MTg4NzoKKwljYXNlIDB4MTg4ODoKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA1OworCQlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IDQpCisJCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gNDsKKwkJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzNVNvdXJjZVt1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJCWJyZWFrOworCWNhc2UgMHgxODY5OiAvKiBEUyBzb21ld2hhdCBjb250cmFkaWN0b3J5IGZvciAxODY5OiBjb3VsZCBiZSBiZSA1IG9yIDggKi8KKwljYXNlIDB4MTg3OToKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSA4OworCQlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IDcpCisJCQl1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gNzsKKwkJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsIHRleHRzOFNvdXJjZVt1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfZXMxOHh4X2dldF9tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogeworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGludk1hcDRTb3VyY2VbOF0gPSB7MCwgMCwgMSwgMSwgMCwgMCwgMiwgM307CiAJc3RydWN0IHNuZF9lczE4eHggKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHNuZF9lczE4eHhfbWl4ZXJfcmVhZChjaGlwLCAweDFjKSAmIDB4MDc7CisJaW50IG11eFNvdXJjZSA9IHNuZF9lczE4eHhfbWl4ZXJfcmVhZChjaGlwLCAweDFjKSAmIDB4MDc7CisJaWYgKCEoY2hpcC0+dmVyc2lvbiA9PSAweDE4NjkgfHwgY2hpcC0+dmVyc2lvbiA9PSAweDE4NzkpKSB7CisJCW11eFNvdXJjZSA9IGludk1hcDRTb3VyY2VbbXV4U291cmNlXTsKKwkJaWYgKG11eFNvdXJjZT09MyAmJiAKKwkJICAgIChjaGlwLT52ZXJzaW9uID09IDB4MTg4NyB8fCBjaGlwLT52ZXJzaW9uID09IDB4MTg4OCkgJiYKKwkJICAgIChzbmRfZXMxOHh4X21peGVyX3JlYWQoY2hpcCwgMHg3YSkgJiAweDA4KQorCQkpIAorCQkJbXV4U291cmNlID0gNDsKKwl9CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IG11eFNvdXJjZTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfZXMxOHh4X3B1dF9tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogeworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1hcDRTb3VyY2VbNF0gPSB7MCwgMiwgNiwgN307CiAJc3RydWN0IHNuZF9lczE4eHggKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJdW5zaWduZWQgY2hhciB2YWwgPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwotCQotCWlmICh2YWwgPiA3KQorCXVuc2lnbmVkIGNoYXIgcmV0VmFsID0gMDsKKworCXN3aXRjaCAoY2hpcC0+dmVyc2lvbikgeworIC8qIDUgc291cmNlIGNoaXBzICovCisJY2FzZSAweDE4ODc6CisJY2FzZSAweDE4ODg6CisJCWlmICh2YWwgPiA0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2YWwgPT0gNCkgeworCQkJcmV0VmFsID0gc25kX2VzMTh4eF9taXhlcl9iaXRzKGNoaXAsIDB4N2EsIDB4MDgsIDB4MDgpICE9IDB4MDg7CisJCQl2YWwgPSAzOworCQl9IGVsc2UKKwkJCXJldFZhbCA9IHNuZF9lczE4eHhfbWl4ZXJfYml0cyhjaGlwLCAweDdhLCAweDA4LCAweDAwKSAhPSAweDAwOworIC8qIDQgc291cmNlIGNoaXBzICovCisJY2FzZSAweDE4Njg6CisJY2FzZSAweDE4Nzg6CisJCWlmICh2YWwgPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXZhbCA9IG1hcDRTb3VyY2VbdmFsXTsKKwkJYnJlYWs7CisgLyogOCBzb3VyY2UgY2hpcHMgKi8KKwljYXNlIDB4MTg2OToKKwljYXNlIDB4MTg3OToKKwkJaWYgKHZhbCA+IDcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHNuZF9lczE4eHhfbWl4ZXJfYml0cyhjaGlwLCAweDFjLCAweDA3LCB2YWwpICE9IHZhbDsKKwl9CisJcmV0dXJuIChzbmRfZXMxOHh4X21peGVyX2JpdHMoY2hpcCwgMHgxYywgMHgwNywgdmFsKSAhPSB2YWwpIHx8IHJldFZhbDsKIH0KIAogc3RhdGljIGludCBzbmRfZXMxOHh4X2luZm9fc3BhdGlhbGl6ZXJfZW5hYmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQpAQCAtMTE5MSwxOSArMTI4OCwyMiBAQAogCXJldHVybiBjaGFuZ2U7CiB9CiAKKy8qIE1peGVyIGNvbnRyb2xzCisgKiBUaGVzZSBhcnJheXMgY29udGFpbiBzZXR1cCBkYXRhIGZvciBtaXhlciBjb250cm9scy4KKyAqIAorICogVGhlIGNvbnRyb2xzIHRoYXQgYXJlIHVuaXZlcnNhbCB0byBhbGwgY2hpcHNldHMgYXJlIGZ1bGx5IGluaXRpYWxpemVkCisgKiBoZXJlLgorICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VzMTh4eF9iYXNlX2NvbnRyb2xzW10gPSB7CiBFUzE4WFhfRE9VQkxFKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMCwgMHg2MCwgMHg2MiwgMCwgMCwgNjMsIDApLAogRVMxOFhYX0RPVUJMRSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDAsIDB4NjAsIDB4NjIsIDYsIDYsIDEsIDEpLAogRVMxOFhYX0RPVUJMRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAwLCAweDNlLCAweDNlLCA0LCAwLCAxNSwgMCksCiBFUzE4WFhfRE9VQkxFKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAwLCAweDM4LCAweDM4LCA0LCAwLCAxNSwgMCksCiBFUzE4WFhfRE9VQkxFKCJGTSBQbGF5YmFjayBWb2x1bWUiLCAwLCAweDM2LCAweDM2LCA0LCAwLCAxNSwgMCksCi1FUzE4WFhfRE9VQkxFKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDAsIDB4NmQsIDB4NmQsIDQsIDAsIDE1LCAwKSwKIEVTMThYWF9ET1VCTEUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAwLCAweDFhLCAweDFhLCA0LCAwLCAxNSwgMCksCiBFUzE4WFhfRE9VQkxFKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMCwgMHgzYSwgMHgzYSwgNCwgMCwgMTUsIDApLAotRVMxOFhYX1NJTkdMRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAwLCAweDNjLCAwLCA3LCAwKSwKIEVTMThYWF9TSU5HTEUoIlJlY29yZCBNb25pdG9yIiwgMCwgMHhhOCwgMywgMSwgMCksCiBFUzE4WFhfRE9VQkxFKCJDYXB0dXJlIFZvbHVtZSIsIDAsIDB4YjQsIDB4YjQsIDQsIDAsIDE1LCAwKSwKLUVTMThYWF9TSU5HTEUoIkNhcHR1cmUgU3dpdGNoIiwgMCwgMHgxYywgNCwgMSwgMSksCiB7CiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLApAQCAtMTIxMywxOSArMTMxMywzNyBAQAogfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lczE4eHhfbW9ub19pbl9jb250cm9sID0gCi1FUzE4WFhfRE9VQkxFKCJNb25vIElucHV0IFBsYXliYWNrIFZvbHVtZSIsIDAsIDB4NmQsIDB4NmQsIDQsIDAsIDE1LCAwKTsKLQogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lczE4eHhfcmVjbWl4X2NvbnRyb2xzW10gPSB7CiBFUzE4WFhfRE9VQkxFKCJQQ00gQ2FwdHVyZSBWb2x1bWUiLCAwLCAweDY5LCAweDY5LCA0LCAwLCAxNSwgMCksCiBFUzE4WFhfRE9VQkxFKCJNaWMgQ2FwdHVyZSBWb2x1bWUiLCAwLCAweDY4LCAweDY4LCA0LCAwLCAxNSwgMCksCiBFUzE4WFhfRE9VQkxFKCJMaW5lIENhcHR1cmUgVm9sdW1lIiwgMCwgMHg2ZSwgMHg2ZSwgNCwgMCwgMTUsIDApLAogRVMxOFhYX0RPVUJMRSgiRk0gQ2FwdHVyZSBWb2x1bWUiLCAwLCAweDZiLCAweDZiLCA0LCAwLCAxNSwgMCksCi1FUzE4WFhfRE9VQkxFKCJNb25vIENhcHR1cmUgVm9sdW1lIiwgMCwgMHg2ZiwgMHg2ZiwgNCwgMCwgMTUsIDApLAogRVMxOFhYX0RPVUJMRSgiQ0QgQ2FwdHVyZSBWb2x1bWUiLCAwLCAweDZhLCAweDZhLCA0LCAwLCAxNSwgMCksCiBFUzE4WFhfRE9VQkxFKCJBdXggQ2FwdHVyZSBWb2x1bWUiLCAwLCAweDZjLCAweDZjLCA0LCAwLCAxNSwgMCkKIH07CiAKKy8qCisgKiBUaGUgY2hpcHNldCBzcGVjaWZpYyBtaXhlciBjb250cm9scworICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VzMTh4eF9vcHRfc3BlYWtlciA9CisJRVMxOFhYX1NJTkdMRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAwLCAweDNjLCAwLCA3LCAwKTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lczE4eHhfb3B0XzE4NjlbXSA9IHsKK0VTMThYWF9TSU5HTEUoIkNhcHR1cmUgU3dpdGNoIiwgMCwgMHgxYywgNCwgMSwgMSksCitFUzE4WFhfU0lOR0xFKCJWaWRlbyBQbGF5YmFjayBTd2l0Y2giLCAwLCAweDdmLCAwLCAxLCAwKSwKK0VTMThYWF9ET1VCTEUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMCwgMHg2ZCwgMHg2ZCwgNCwgMCwgMTUsIDApLAorRVMxOFhYX0RPVUJMRSgiTW9ubyBDYXB0dXJlIFZvbHVtZSIsIDAsIDB4NmYsIDB4NmYsIDQsIDAsIDE1LCAwKQorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lczE4eHhfb3B0XzE4NzggPQorCUVTMThYWF9ET1VCTEUoIlZpZGVvIFBsYXliYWNrIFZvbHVtZSIsIDAsIDB4NjgsIDB4NjgsIDQsIDAsIDE1LCAwKTsKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lczE4eHhfb3B0XzE4NzlbXSA9IHsKK0VTMThYWF9TSU5HTEUoIlZpZGVvIFBsYXliYWNrIFN3aXRjaCIsIDAsIDB4NzEsIDYsIDEsIDApLAorRVMxOFhYX0RPVUJMRSgiVmlkZW8gUGxheWJhY2sgVm9sdW1lIiwgMCwgMHg2ZCwgMHg2ZCwgNCwgMCwgMTUsIDApLAorRVMxOFhYX0RPVUJMRSgiVmlkZW8gQ2FwdHVyZSBWb2x1bWUiLCAwLCAweDZmLCAweDZmLCA0LCAwLCAxNSwgMCkKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZXMxOHh4X3BjbTFfY29udHJvbHNbXSA9IHsKIEVTMThYWF9ET1VCTEUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAwLCAweDE0LCAweDE0LCA0LCAwLCAxNSwgMCksCiB9OwpAQCAtMTI3MCw3ICsxMzg4LDYgQEAKIEVTMThYWF9TSU5HTEUoIkhhcmR3YXJlIE1hc3RlciBWb2x1bWUgU3BsaXQiLCAwLCAweDY0LCA3LCAxLCAwKSwKIH07CiAKLSNpZiAwCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfZXMxOHh4X2NvbmZpZ19yZWFkKHN0cnVjdCBzbmRfZXMxOHh4ICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZykKIHsKIAlpbnQgZGF0YTsKQEAgLTEyODEsNyArMTM5OCw2IEBACiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmN0cmxfbG9jaywgZmxhZ3MpOwogCXJldHVybiBkYXRhOwogfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfZXMxOHh4X2NvbmZpZ193cml0ZShzdHJ1Y3Qgc25kX2VzMTh4eCAqY2hpcCwgCiAJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIGRhdGEpCkBAIC0xNDI3LDYgKzE1NDMsMTcgQEAKIAkJc25kX2VzMTh4eF9taXhlcl93cml0ZShjaGlwLCAweDU4LCAweDk0KTsKIAkJc25kX2VzMTh4eF9taXhlcl93cml0ZShjaGlwLCAweDVhLCAweDgwKTsKIAl9CisJLyogRmxpcCB0aGUgImVuYWJsZSBJMlMiIGJpdHMgZm9yIHRob3NlIGNoaXBzZXRzIHRoYXQgbmVlZCBpdCAqLworCXN3aXRjaCAoY2hpcC0+dmVyc2lvbikgeworCWNhc2UgMHgxODc5OgorCQkvL0xlYXZpbmcgSTJTIGVuYWJsZWQgb24gdGhlIDE4Nzkgc2NyZXdzIHVwIHRoZSBQQ00gcGxheWJhY2sgKHJhdGUgZWZmZWN0ZWQgc29tZWhvdykKKwkJLy9zbyBhIFN3aXRjaCBjb250cm9sIGhhcyBiZWVuIGFkZGVkIHRvIHRvZ2dsZSB0aGlzIDB4NzEgYml0IG9uL29mZjoKKwkJLy9zbmRfZXMxOHh4X21peGVyX2JpdHMoY2hpcCwgMHg3MSwgMHg0MCwgMHg0MCk7CisJCS8qIE5vdGU6IHdlIGZhbGwgdGhyb3VnaCBvbiBwdXJwb3NlIGhlcmUuICovCisJY2FzZSAweDE4Nzg6CisJCXNuZF9lczE4eHhfY29uZmlnX3dyaXRlKGNoaXAsIDB4MjksIHNuZF9lczE4eHhfY29uZmlnX3JlYWQoY2hpcCwgMHgyOSkgfCAweDQwKTsKKwkJYnJlYWs7CisJfQogCS8qIE11dGUgaW5wdXQgc291cmNlICovCiAJaWYgKGNoaXAtPmNhcHMgJiBFUzE4WFhfTVVURVJFQykKIAkJbWFzayA9IDB4MTA7CkBAIC0xNDc2LDExICsxNjAzLDE0IEBACiAJfQogCQkJCiAgICAgICAgIG91dGIoMHg0MCwgY2hpcC0+cG9ydCArIDB4MDQpOworCXVkZWxheSgxMCk7CiAJaGkgPSBpbmIoY2hpcC0+cG9ydCArIDB4MDUpOworCXVkZWxheSgxMCk7CiAJbG8gPSBpbmIoY2hpcC0+cG9ydCArIDB4MDUpOwogCWlmIChoaSAhPSBsbykgewogCQljaGlwLT52ZXJzaW9uID0gaGkgPDwgOCB8IGxvOwogCQljaGlwLT5jdHJsX3BvcnQgPSBpbmIoY2hpcC0+cG9ydCArIDB4MDUpIDw8IDg7CisJCXVkZWxheSgxMCk7CiAJCWNoaXAtPmN0cmxfcG9ydCArPSBpbmIoY2hpcC0+cG9ydCArIDB4MDUpOwogCiAJCWlmICgoY2hpcC0+cmVzX2N0cmxfcG9ydCA9IHJlcXVlc3RfcmVnaW9uKGNoaXAtPmN0cmxfcG9ydCwgOCwgIkVTMTh4eCAtIENUUkwiKSkgPT0gTlVMTCkgewpAQCAtMTUxOSwyMiArMTY0OSwyMiBAQAogCiAJc3dpdGNoIChjaGlwLT52ZXJzaW9uKSB7CiAJY2FzZSAweDE4Njg6Ci0JCWNoaXAtPmNhcHMgPSBFUzE4WFhfRFVQTEVYX01PTk8gfCBFUzE4WFhfRFVQTEVYX1NBTUUgfCBFUzE4WFhfQ09OVFJPTCB8IEVTMThYWF9IV1Y7CisJCWNoaXAtPmNhcHMgPSBFUzE4WFhfRFVQTEVYX01PTk8gfCBFUzE4WFhfRFVQTEVYX1NBTUUgfCBFUzE4WFhfQ09OVFJPTDsKIAkJYnJlYWs7CiAJY2FzZSAweDE4Njk6CiAJCWNoaXAtPmNhcHMgPSBFUzE4WFhfUENNMiB8IEVTMThYWF9TUEFUSUFMSVpFUiB8IEVTMThYWF9SRUNNSVggfCBFUzE4WFhfTkVXX1JBVEUgfCBFUzE4WFhfQVVYQiB8IEVTMThYWF9NT05PIHwgRVMxOFhYX01VVEVSRUMgfCBFUzE4WFhfQ09OVFJPTCB8IEVTMThYWF9IV1Y7CiAJCWJyZWFrOwogCWNhc2UgMHgxODc4OgotCQljaGlwLT5jYXBzID0gRVMxOFhYX0RVUExFWF9NT05PIHwgRVMxOFhYX0RVUExFWF9TQU1FIHwgRVMxOFhYX0kyUyB8IEVTMThYWF9DT05UUk9MIHwgRVMxOFhYX0hXVjsKKwkJY2hpcC0+Y2FwcyA9IEVTMThYWF9EVVBMRVhfTU9OTyB8IEVTMThYWF9EVVBMRVhfU0FNRSB8IEVTMThYWF9JMlMgfCBFUzE4WFhfQ09OVFJPTDsKIAkJYnJlYWs7CiAJY2FzZSAweDE4Nzk6CiAJCWNoaXAtPmNhcHMgPSBFUzE4WFhfUENNMiB8IEVTMThYWF9TUEFUSUFMSVpFUiB8IEVTMThYWF9SRUNNSVggfCBFUzE4WFhfTkVXX1JBVEUgfCBFUzE4WFhfQVVYQiB8IEVTMThYWF9JMlMgfCBFUzE4WFhfQ09OVFJPTCB8IEVTMThYWF9IV1Y7CiAJCWJyZWFrOwogCWNhc2UgMHgxODg3OgotCQljaGlwLT5jYXBzID0gRVMxOFhYX1BDTTIgfCBFUzE4WFhfUkVDTUlYIHwgRVMxOFhYX0FVWEIgfCBFUzE4WFhfRFVQTEVYX1NBTUUgfCBFUzE4WFhfSFdWOworCQljaGlwLT5jYXBzID0gRVMxOFhYX1BDTTIgfCBFUzE4WFhfUkVDTUlYIHwgRVMxOFhYX0FVWEIgfCBFUzE4WFhfRFVQTEVYX1NBTUU7CiAJCWJyZWFrOwogCWNhc2UgMHgxODg4OgotCQljaGlwLT5jYXBzID0gRVMxOFhYX1BDTTIgfCBFUzE4WFhfUkVDTUlYIHwgRVMxOFhYX0FVWEIgfCBFUzE4WFhfRFVQTEVYX1NBTUUgfCBFUzE4WFhfSFdWOworCQljaGlwLT5jYXBzID0gRVMxOFhYX1BDTTIgfCBFUzE4WFhfUkVDTUlYIHwgRVMxOFhYX0FVWEIgfCBFUzE4WFhfRFVQTEVYX1NBTUU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIlsweCVseF0gdW5zdXBwb3J0ZWQgY2hpcCBFUyV4XG4iLApAQCAtMTc3OCwxMCArMTkwOCw2IEBACiAJCX0KIAl9CiAKLQlpZiAoY2hpcC0+Y2FwcyAmIEVTMThYWF9NT05PKSB7Ci0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZXMxOHh4X21vbm9faW5fY29udHJvbCwgY2hpcCkpKSA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KIAlpZiAoY2hpcC0+Y2FwcyAmIEVTMThYWF9SRUNNSVgpIHsKIAkJZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHNuZF9lczE4eHhfcmVjbWl4X2NvbnRyb2xzKTsgaWR4KyspIHsKIAkJCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZXMxOHh4X3JlY21peF9jb250cm9sc1tpZHhdLCBjaGlwKSkpIDwgMCkKQEAgLTE4MTksNiArMTk0NSwzNiBAQAogCQkJCiAJCX0KIAl9CisJLyogZmluaXNoIGluaXRpYWxpemluZyBvdGhlciBjaGlwc2V0IHNwZWNpZmljIGNvbnRyb2xzCisJICovCisJaWYgKGNoaXAtPnZlcnNpb24gIT0gMHgxODY4KSB7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VzMTh4eF9vcHRfc3BlYWtlciwKKwkJCQkJCSAgICAgY2hpcCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChjaGlwLT52ZXJzaW9uID09IDB4MTg2OSkgeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX2VzMTh4eF9vcHRfMTg2OSk7IGlkeCsrKSB7CisJCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAorCQkJCQkgIHNuZF9jdGxfbmV3MSgmc25kX2VzMTh4eF9vcHRfMTg2OVtpZHhdLAorCQkJCQkJICAgICAgIGNoaXApKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9IGVsc2UgaWYgKGNoaXAtPnZlcnNpb24gPT0gMHgxODc4KSB7CisJCWVyciA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VzMTh4eF9vcHRfMTg3OCwKKwkJCQkJCSAgICAgY2hpcCkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIGlmIChjaGlwLT52ZXJzaW9uID09IDB4MTg3OSkgeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc25kX2VzMTh4eF9vcHRfMTg3OSk7IGlkeCsrKSB7CisJCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAorCQkJCQkgIHNuZF9jdGxfbmV3MSgmc25kX2VzMTh4eF9vcHRfMTg3OVtpZHhdLAorCQkJCQkJICAgICAgIGNoaXApKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CiAJcmV0dXJuIDA7CiB9CiAgICAgICAgCkBAIC0xOTI3LDYgKzIwODMsNyBAQAogCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYoYWNhcmQtPmRldmMpOwogCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYICJQblAgY29udHJvbCBjb25maWd1cmUgZmFpbHVyZSAob3V0IG9mIHJlc291cmNlcz8pXG4iKTsKKwkJa2ZyZWUoY2ZnKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCXNuZF9wcmludGRkKCJwbnA6IHBvcnQ9MHglbHhcbiIsIHBucF9wb3J0X3N0YXJ0KGFjYXJkLT5kZXZjLCAwKSk7CkBAIC0yMjI1LDkgKzIzODIsOSBAQAogCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfZXMxOHh4X25vbnBucF9kcml2ZXIpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFMgJiYgZW5hYmxlW2ldOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewogCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7Ci0JCWlmIChpc19pc2FwbnBfc2VsZWN0ZWQoaSkpCisJCWlmICghIGVuYWJsZVtpXSB8fCBpc19pc2FwbnBfc2VsZWN0ZWQoaSkpCiAJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShFUzE4WFhfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX2RtYS5jIGIvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKaW5kZXggOTMwZjRiYy4uNDRlZTVkMyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMKQEAgLTE0OSwxMCArMTQ5LDEwIEBACiAKIGludCBzbmRfZ2YxX2RtYV9pbml0KHN0cnVjdCBzbmRfZ3VzX2NhcmQgKiBndXMpCiB7Ci0JZG93bigmZ3VzLT5kbWFfbXV0ZXgpOworCW11dGV4X2xvY2soJmd1cy0+ZG1hX211dGV4KTsKIAlndXMtPmdmMS5kbWFfc2hhcmVkKys7CiAJaWYgKGd1cy0+Z2YxLmRtYV9zaGFyZWQgPiAxKSB7Ci0JCXVwKCZndXMtPmRtYV9tdXRleCk7CisJCW11dGV4X3VubG9jaygmZ3VzLT5kbWFfbXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAJZ3VzLT5nZjEuaW50ZXJydXB0X2hhbmRsZXJfZG1hX3dyaXRlID0gc25kX2dmMV9kbWFfaW50ZXJydXB0OwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QgPQogCWd1cy0+Z2YxLmRtYV9kYXRhX3N5bnRoID0gCiAJZ3VzLT5nZjEuZG1hX2RhdGFfc3ludGhfbGFzdCA9IE5VTEw7Ci0JdXAoJmd1cy0+ZG1hX211dGV4KTsKKwltdXRleF91bmxvY2soJmd1cy0+ZG1hX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY4LDcgKzE2OCw3IEBACiB7CiAJc3RydWN0IHNuZF9nZjFfZG1hX2Jsb2NrICpibG9jazsKIAotCWRvd24oJmd1cy0+ZG1hX211dGV4KTsKKwltdXRleF9sb2NrKCZndXMtPmRtYV9tdXRleCk7CiAJZ3VzLT5nZjEuZG1hX3NoYXJlZC0tOwogCWlmICghZ3VzLT5nZjEuZG1hX3NoYXJlZCkgewogCQlzbmRfZG1hX2Rpc2FibGUoZ3VzLT5nZjEuZG1hMSk7CkBAIC0xODUsNyArMTg1LDcgQEAKIAkJZ3VzLT5nZjEuZG1hX2RhdGFfcGNtX2xhc3QgPQogCQlndXMtPmdmMS5kbWFfZGF0YV9zeW50aF9sYXN0ID0gTlVMTDsKIAl9Ci0JdXAoJmd1cy0+ZG1hX211dGV4KTsKKwltdXRleF91bmxvY2soJmd1cy0+ZG1hX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfbWFpbi5jIGIvc291bmQvaXNhL2d1cy9ndXNfbWFpbi5jCmluZGV4IDZkMTViM2QuLjUzZWVhZjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX21haW4uYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19tYWluLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCXNwaW5fbG9ja19pbml0KCZndXMtPmRtYV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZ3VzLT5wY21fdm9sdW1lX2xldmVsX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZndXMtPnVhcnRfY21kX2xvY2spOwotCWluaXRfTVVURVgoJmd1cy0+ZG1hX211dGV4KTsKKwltdXRleF9pbml0KCZndXMtPmRtYV9tdXRleCk7CiAJaWYgKChlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGd1cywgJm9wcykpIDwgMCkgewogCQlzbmRfZ3VzX2ZyZWUoZ3VzKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX21lbS5jIGIvc291bmQvaXNhL2d1cy9ndXNfbWVtLmMKaW5kZXggZThiZGI4Ni4uM2MwZDI3YSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfbWVtLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfbWVtLmMKQEAgLTM0LDkgKzM0LDkgQEAKIHZvaWQgc25kX2dmMV9tZW1fbG9jayhzdHJ1Y3Qgc25kX2dmMV9tZW0gKiBhbGxvYywgaW50IHh1cCkKIHsKIAlpZiAoIXh1cCkgewotCQlkb3duKCZhbGxvYy0+bWVtb3J5X211dGV4KTsKKwkJbXV0ZXhfbG9jaygmYWxsb2MtPm1lbW9yeV9tdXRleCk7CiAJfSBlbHNlIHsKLQkJdXAoJmFsbG9jLT5tZW1vcnlfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmFsbG9jLT5tZW1vcnlfbXV0ZXgpOwogCX0KIH0KIApAQCAtNTksNyArNTksNyBAQAogCQkJCWFsbG9jLT5maXJzdCA9IG5ibG9jazsKIAkJCWVsc2UKIAkJCQluYmxvY2stPnByZXYtPm5leHQgPSBuYmxvY2s7Ci0JCQl1cCgmYWxsb2MtPm1lbW9yeV9tdXRleCk7CisJCQltdXRleF91bmxvY2soJmFsbG9jLT5tZW1vcnlfbXV0ZXgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJcGJsb2NrID0gcGJsb2NrLT5uZXh0OwpAQCAtODAsNyArODAsNyBAQAogewogCWlmIChibG9jay0+c2hhcmUpIHsJLyogb2suLiBzaGFyZWQgYmxvY2sgKi8KIAkJYmxvY2stPnNoYXJlLS07Ci0JCXVwKCZhbGxvYy0+bWVtb3J5X211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZhbGxvYy0+bWVtb3J5X211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChhbGxvYy0+Zmlyc3QgPT0gYmxvY2spIHsKQEAgLTI0NCw3ICsyNDQsNyBAQAogI2VuZGlmCiAKIAlhbGxvYyA9ICZndXMtPmdmMS5tZW1fYWxsb2M7Ci0JaW5pdF9NVVRFWCgmYWxsb2MtPm1lbW9yeV9tdXRleCk7CisJbXV0ZXhfaW5pdCgmYWxsb2MtPm1lbW9yeV9tdXRleCk7CiAJYWxsb2MtPmZpcnN0ID0gYWxsb2MtPmxhc3QgPSBOVUxMOwogCWlmICghZ3VzLT5nZjEubWVtb3J5KQogCQlyZXR1cm4gMDsKQEAgLTI5OSw3ICsyOTksNyBAQAogCiAJZ3VzID0gZW50cnktPnByaXZhdGVfZGF0YTsKIAlhbGxvYyA9ICZndXMtPmdmMS5tZW1fYWxsb2M7Ci0JZG93bigmYWxsb2MtPm1lbW9yeV9tdXRleCk7CisJbXV0ZXhfbG9jaygmYWxsb2MtPm1lbW9yeV9tdXRleCk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiOC1iaXQgYmFua3MgICAgICAgOiBcbiAgICAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQlzbmRfaXByaW50ZihidWZmZXIsICIweCUwNnggKCUwNGlrKSVzIiwgYWxsb2MtPmJhbmtzXzhbaV0uYWRkcmVzcywgYWxsb2MtPmJhbmtzXzhbaV0uc2l6ZSA+PiAxMCwgaSArIDEgPCA0ID8gIiwiIDogIiIpOwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJfQogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgVG90YWw6IG1lbW9yeSA9ICVpLCB1c2VkID0gJWksIGZyZWUgPSAlaVxuIiwKIAkJICAgIHRvdGFsLCB1c2VkLCB0b3RhbCAtIHVzZWQpOwotCXVwKCZhbGxvYy0+bWVtb3J5X211dGV4KTsKKwltdXRleF91bmxvY2soJmFsbG9jLT5tZW1vcnlfbXV0ZXgpOwogI2lmIDAKIAl1bHRyYV9pcHJpbnRmKGJ1ZmZlciwgIiAgVmVyaWZ5OiBmcmVlID0gJWksIG1heCA4LWJpdCBibG9jayA9ICVpLCBtYXggMTYtYml0IGJsb2NrID0gJWlcbiIsCiAJCSAgICAgIHVsdHJhX21lbW9yeV9mcmVlX3NpemUoY2FyZCwgJmNhcmQtPmdmMS5tZW1fYWxsb2MpLApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwppbmRleCBkMDgyOTM5Li5jN2Y5NWU3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwpAQCAtMTE0LDggKzExNCw2IEBACiAJdW5zaWduZWQgY2hhciBwYW47CiAJdW5zaWduZWQgaW50IHZvaWNlOwogCi0JaWYgKHN1YnN0cmVhbSA9PSBOVUxMKQotCQlyZXR1cm47CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBjbXAtPmxvY2ssIGZsYWdzKTsKIAlpZiAocGNtcC0+ZmxhZ3MgJiBTTkRSVl9HRjFfUENNX1BGTEdfQUNUSVZFKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjbXAtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX3N5bnRoLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19zeW50aC5jCmluZGV4IDg1YTFiMDUuLjI3NjdjYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX3N5bnRoLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfc3ludGguYwpAQCAtNTUsOSArNTUsOSBAQAogCiAJaWYgKGluZm8tPnZvaWNlcyA+IDMyKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlkb3duKCZndXMtPnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZndXMtPnJlZ2lzdGVyX211dGV4KTsKIAlpZiAoIXNuZF9ndXNfdXNlX2luYyhndXMpKSB7Ci0JCXVwKCZndXMtPnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZndXMtPnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCWZvciAoaWR4ID0gMDsgaWR4IDwgaW5mby0+dm9pY2VzOyBpZHgrKykgewpAQCAtNjUsMTIgKzY1LDEyIEBACiAJCWlmICh2b2ljZSA9PSBOVUxMKSB7CiAJCQlzbmRfZ3VzX3N5bnRoX2ZyZWVfdm9pY2VzKGd1cywgaW5mby0+c2VuZGVyLmNsaWVudCwgaW5mby0+c2VuZGVyLnBvcnQpOwogCQkJc25kX2d1c191c2VfZGVjKGd1cyk7Ci0JCQl1cCgmZ3VzLT5yZWdpc3Rlcl9tdXRleCk7CisJCQltdXRleF91bmxvY2soJmd1cy0+cmVnaXN0ZXJfbXV0ZXgpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCQl2b2ljZS0+aW5kZXggPSBpZHg7CiAJfQotCXVwKCZndXMtPnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmd1cy0+cmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC03OSwxMCArNzksMTAgQEAKIAlzdHJ1Y3Qgc25kX2d1c19wb3J0ICogcG9ydCA9IHByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX2d1c19jYXJkICogZ3VzID0gcG9ydC0+Z3VzOwogCi0JZG93bigmZ3VzLT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmZ3VzLT5yZWdpc3Rlcl9tdXRleCk7CiAJc25kX2d1c19zeW50aF9mcmVlX3ZvaWNlcyhndXMsIGluZm8tPnNlbmRlci5jbGllbnQsIGluZm8tPnNlbmRlci5wb3J0KTsKIAlzbmRfZ3VzX3VzZV9kZWMoZ3VzKTsKLQl1cCgmZ3VzLT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZndXMtPnJlZ2lzdGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIzLDcgKzIyMyw3IEBACiAJaWYgKGd1cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWluaXRfTVVURVgoJmd1cy0+cmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2luaXQoJmd1cy0+cmVnaXN0ZXJfbXV0ZXgpOwogCWd1cy0+Z2YxLnNlcV9jbGllbnQgPSAtMTsKIAkKIAkvKiBhbGxvY2F0ZSBuZXcgY2xpZW50ICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCmluZGV4IDkxYzIxOTEuLjI2ZGNjZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCkBAIC0yNDcsOCArMjQ3LDEwIEBACiAJCXJldHVybiBlcnI7CiAKIAljYXJkcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCQlpZiAoISBlbmFibGVbaV0pCisJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShHVVNDTEFTU0lDX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7CiAJCWlmIChJU19FUlIoZGV2aWNlKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwppbmRleCAyMzlmMTZlLi4zMWRjMjA1IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwpAQCAtMzU3LDggKzM1NywxMCBAQAogCQlyZXR1cm4gZXJyOwogCiAJY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUyAmJiBlbmFibGVbaV07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKKwkJaWYgKCEgZW5hYmxlW2ldKQorCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoR1VTRVhUUkVNRV9EUklWRVIsCiAJCQkJCQkJIGksIE5VTEwsIDApOwogCQlpZiAoSVNfRVJSKGRldmljZSkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCmluZGV4IGQ0ZDJiMmEuLmNhZmI5YjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwpAQCAtMzg0LDggKzM4NCwxMCBAQAogCQlyZXR1cm4gZXJyOwogCiAJY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUyAmJiBlbmFibGVbaV07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKKwkJaWYgKCEgZW5hYmxlW2ldKQorCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoR1VTTUFYX0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7CiAJCWlmIChJU19FUlIoZGV2aWNlKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKaW5kZXggOTgzOGQ5OS4uMmNhY2QwZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCkBAIC05MzUsOCArOTM1LDEwIEBACiAJaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNuZF9pbnRlcndhdmVfZHJpdmVyKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCQlpZiAoISBlbmFibGVbaV0pCisJCQljb250aW51ZTsKICNpZmRlZiBDT05GSUdfUE5QCiAJCWlmIChpc2FwbnBbaV0pCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcGwzc2EyLmMgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCmluZGV4IDlkODQzMTkuLjU2ZmNkOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcGwzc2EyLmMKKysrIGIvc291bmQvaXNhL29wbDNzYTIuYwpAQCAtOTQ5LDggKzk0OSwxMCBAQAogCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfb3BsM3NhMl9ub25wbnBfZHJpdmVyKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCQlpZiAoISBlbmFibGVbaV0pCisJCQljb250aW51ZTsKICNpZmRlZiBDT05GSUdfUE5QCiAJCWlmIChpc2FwbnBbaV0pCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCmluZGV4IDYzZDk2YmUuLjY1YjI4Y2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwpAQCAtMjA4OCw5ICsyMDg4LDExIEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKIAorI2lmZGVmIENPTkZJR19QTlAKIAlwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJm9wdGk5eHhfcG5wY19kcml2ZXIpOwogCWlmIChzbmRfb3B0aTl4eF9wbnBfaXNfcHJvYmVkKQogCQlyZXR1cm4gMDsKKyNlbmRpZgogCWlmICghIGlzX2lzYXBucF9zZWxlY3RlZCgpKSB7CiAJCWVycm9yID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfb3B0aTl4eF9kcml2ZXIpOwogCQlpZiAoZXJyb3IgPCAwKQpAQCAtMjEwMiw3ICsyMTA0LDkgQEAKIAkJfQogCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX29wdGk5eHhfZHJpdmVyKTsKIAl9CisjaWZkZWYgQ09ORklHX1BOUAogCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZvcHRpOXh4X3BucGNfZHJpdmVyKTsKKyNlbmRpZgogI2lmZGVmIE1PRFVMRQogCXByaW50ayhLRVJOX0VSUiAibm8gT1BUaSAiIENISVBfTkFNRSAiIHNvdW5kY2FyZCBmb3VuZFxuIik7CiAjZW5kaWYKQEAgLTIxMTUsNyArMjExOSw5IEBACiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNuZF9vcHRpOXh4X3BsYXRmb3JtX2RldmljZSk7CiAJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbmRfb3B0aTl4eF9kcml2ZXIpOwogCX0KKyNpZmRlZiBDT05GSUdfUE5QCiAJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJm9wdGk5eHhfcG5wY19kcml2ZXIpOworI2VuZGlmCiB9CiAKIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9vcHRpOXh4X2luaXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2IxNi5jIGIvc291bmQvaXNhL3NiL3NiMTYuYwppbmRleCAwNjY3YmQxLi41NzM3YWI3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2IxNi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKQEAgLTcxMiw5ICs3MTIsOSBAQAogCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfc2IxNl9ub25wbnBfZHJpdmVyKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCQlpZiAoaXNfaXNhcG5wX3NlbGVjdGVkKGkpKQorCQlpZiAoISBlbmFibGVbaV0gfHwgaXNfaXNhcG5wX3NlbGVjdGVkKGkpKQogCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1NCMTZfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjE2X2NzcC5jIGIvc291bmQvaXNhL3NiL3NiMTZfY3NwLmMKaW5kZXggOWMyYjVlZi4uOTcwM2M2OCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiMTZfY3NwLmMKKysrIGIvc291bmQvaXNhL3NiL3NiMTZfY3NwLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCXAtPm9wcy5jc3Bfc3RvcCA9IHNuZF9zYl9jc3Bfc3RvcDsKIAlwLT5vcHMuY3NwX3Fzb3VuZF90cmFuc2ZlciA9IHNuZF9zYl9jc3BfcXNvdW5kX3RyYW5zZmVyOwogCi0JaW5pdF9NVVRFWCgmcC0+YWNjZXNzX211dGV4KTsKKwltdXRleF9pbml0KCZwLT5hY2Nlc3NfbXV0ZXgpOwogCXNwcmludGYoaHctPm5hbWUsICJDU1AgdiVkLiVkIiwgKHZlcnNpb24gPj4gNCksICh2ZXJzaW9uICYgMHgwZikpOwogCWh3LT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1NCMTZDU1A7CiAJaHctPnByaXZhdGVfZGF0YSA9IHA7CkBAIC0yNjUsMTMgKzI2NSwxMyBAQAogICovCiBzdGF0aWMgaW50IHNuZF9zYl9jc3BfdXNlKHN0cnVjdCBzbmRfc2JfY3NwICogcCkKIHsKLQlkb3duKCZwLT5hY2Nlc3NfbXV0ZXgpOworCW11dGV4X2xvY2soJnAtPmFjY2Vzc19tdXRleCk7CiAJaWYgKHAtPnVzZWQpIHsKLQkJdXAoJnAtPmFjY2Vzc19tdXRleCk7CisJCW11dGV4X3VubG9jaygmcC0+YWNjZXNzX211dGV4KTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCXAtPnVzZWQrKzsKLQl1cCgmcC0+YWNjZXNzX211dGV4KTsKKwltdXRleF91bmxvY2soJnAtPmFjY2Vzc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjgyLDkgKzI4Miw5IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3NiX2NzcF91bnVzZShzdHJ1Y3Qgc25kX3NiX2NzcCAqIHApCiB7Ci0JZG93bigmcC0+YWNjZXNzX211dGV4KTsKKwltdXRleF9sb2NrKCZwLT5hY2Nlc3NfbXV0ZXgpOwogCXAtPnVzZWQtLTsKLQl1cCgmcC0+YWNjZXNzX211dGV4KTsKKwltdXRleF91bmxvY2soJnAtPmFjY2Vzc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjguYyBiL3NvdW5kL2lzYS9zYi9zYjguYwppbmRleCA2MGVlNzljLi4zZWZhMjNkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4LmMKKysrIGIvc291bmQvaXNhL3NiL3NiOC5jCkBAIC0yNTgsOCArMjU4LDEwIEBACiAJCXJldHVybiBlcnI7CiAKIAljYXJkcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTICYmIGVuYWJsZVtpXTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFNORFJWX0NBUkRTOyBpKyspIHsKIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOworCQlpZiAoISBlbmFibGVbaV0pCisJCQljb250aW51ZTsKIAkJZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShTTkRfU0I4X0RSSVZFUiwKIAkJCQkJCQkgaSwgTlVMTCwgMCk7CiAJCWlmIChJU19FUlIoZGV2aWNlKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwppbmRleCAxYTZlZTM0Li40OTBiMWNhIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwpAQCAtNDUzLDEwICs0NTMsOCBAQAogCXN0cmxjcHkoY3RsLT5pZC5uYW1lLCBuYW1lLCBzaXplb2YoY3RsLT5pZC5uYW1lKSk7CiAJY3RsLT5pZC5pbmRleCA9IGluZGV4OwogCWN0bC0+cHJpdmF0ZV92YWx1ZSA9IHZhbHVlOwotCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgY3RsKSkgPCAwKSB7Ci0JCXNuZF9jdGxfZnJlZV9vbmUoY3RsKTsKKwlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGN0bCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMgYi9zb3VuZC9pc2Evc2dhbGF4eS5jCmluZGV4IDBkYmJiMzUuLmE2MGU2NmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zZ2FsYXh5LmMKKysrIGIvc291bmQvaXNhL3NnYWxheHkuYwpAQCAtMzYwLDggKzM2MCwxMCBAQAogCQlyZXR1cm4gZXJyOwogCiAJY2FyZHMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUyAmJiBlbmFibGVbaV07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9DQVJEUzsgaSsrKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZTsKKwkJaWYgKCEgZW5hYmxlW2ldKQorCQkJY29udGludWU7CiAJCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1NHQUxBWFlfRFJJVkVSLAogCQkJCQkJCSBpLCBOVUxMLCAwKTsKIAkJaWYgKElTX0VSUihkZXZpY2UpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwppbmRleCBmYTNhYjk2Li5jMDExNWJmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKQEAgLTcxMCw4ICs3MTAsMTAgQEAKIAlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX3dhdmVmcm9udF9kcml2ZXIpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFMgJiYgZW5hYmxlW2ldOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewogCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2U7CisJCWlmICghIGVuYWJsZVtpXSkKKwkJCWNvbnRpbnVlOwogI2lmZGVmIENPTkZJR19QTlAKIAkJaWYgKGlzYXBucFtpXSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9hdTF4MDAuYyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKaW5kZXggNmQ4ZjhiM2UuLmNmNDc2ZmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvYXUxeDAwLmMKKysrIGIvc291bmQvbWlwcy9hdTF4MDAuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMF9kbWEuaD4KQEAgLTE1Myw2ICsxNTQsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gc3RyZWFtLT5zdWJzdHJlYW07CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgYXUxMDAwX3BlcmlvZCAqcG9pbnRlcjsKIAl1bnNpZ25lZCBsb25nIGRtYV9zdGFydDsKIAlpbnQgaTsKIApAQCAtNTU5LDEyICs1NjEsMTMgQEAKIAkJLnJlYWQgPSBzbmRfYXUxMDAwX2FjOTdfcmVhZCwKIAl9OwogCi0JaWYgKChhdTEwMDAtPmFjOTdfcmVzX3BvcnQgPSByZXF1ZXN0X3JlZ2lvbihBQzk3Q19DT05GSUcsCi0JICAgICAgIAkJc2l6ZW9mKHN0cnVjdCBhdTEwMDBfYWM5N19yZWcpLCAiQXUxeDAwIEFDOTciKSkgPT0gTlVMTCkgeworCWlmICgoYXUxMDAwLT5hYzk3X3Jlc19wb3J0ID0gcmVxdWVzdF9tZW1fcmVnaW9uKENQSFlTQUREUihBQzk3Q19DT05GSUcpLAorCSAgICAgICAJCTB4MTAwMDAwLCAiQXUxeDAwIEFDOTciKSkgPT0gTlVMTCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBTFNBIEFDOTc6IGNhbid0IGdyYXAgQUM5NyBwb3J0XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JYXUxMDAwLT5hYzk3X2lvcG9ydCA9IChzdHJ1Y3QgYXUxMDAwX2FjOTdfcmVnICopIGF1MTAwMC0+YWM5N19yZXNfcG9ydC0+c3RhcnQ7CisJYXUxMDAwLT5hYzk3X2lvcG9ydCA9IChzdHJ1Y3QgYXUxMDAwX2FjOTdfcmVnICopCisJCUtTRUcxQUREUihhdTEwMDAtPmFjOTdfcmVzX3BvcnQtPnN0YXJ0KTsKIAogCXNwaW5fbG9ja19pbml0KCZhdTEwMDAtPmFjOTdfbG9jayk7CiAKQEAgLTYxMCwxNCArNjEzLDE3IEBACiAJCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoYXUxMDAwLT5hYzk3X3Jlc19wb3J0KTsKIAl9CiAKLQlpZiAoYXUxMDAwLT5zdHJlYW1bUExBWUJBQ0tdLT5kbWEgPj0gMCkKLQkJZnJlZV9hdTEwMDBfZG1hKGF1MTAwMC0+c3RyZWFtW1BMQVlCQUNLXS0+ZG1hKTsKKwlpZiAoYXUxMDAwLT5zdHJlYW1bUExBWUJBQ0tdKSB7CisJICAJaWYgKGF1MTAwMC0+c3RyZWFtW1BMQVlCQUNLXS0+ZG1hID49IDApCisJCQlmcmVlX2F1MTAwMF9kbWEoYXUxMDAwLT5zdHJlYW1bUExBWUJBQ0tdLT5kbWEpOworCQlrZnJlZShhdTEwMDAtPnN0cmVhbVtQTEFZQkFDS10pOworCX0KIAotCWlmIChhdTEwMDAtPnN0cmVhbVtDQVBUVVJFXS0+ZG1hID49IDApCi0JCWZyZWVfYXUxMDAwX2RtYShhdTEwMDAtPnN0cmVhbVtDQVBUVVJFXS0+ZG1hKTsKLQotCWtmcmVlKGF1MTAwMC0+c3RyZWFtW1BMQVlCQUNLXSk7Ci0Ja2ZyZWUoYXUxMDAwLT5zdHJlYW1bQ0FQVFVSRV0pOworCWlmIChhdTEwMDAtPnN0cmVhbVtDQVBUVVJFXSkgeworCQlpZiAoYXUxMDAwLT5zdHJlYW1bQ0FQVFVSRV0tPmRtYSA+PSAwKQorCQkJZnJlZV9hdTEwMDBfZG1hKGF1MTAwMC0+c3RyZWFtW0NBUFRVUkVdLT5kbWEpOworCQlrZnJlZShhdTEwMDAtPnN0cmVhbVtDQVBUVVJFXSk7CisJfQogfQogCiAKQEAgLTYzNiwxNSArNjQyLDE5IEBACiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfYXUxMDAwX2ZyZWU7CiAJYXUxMDAwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCS8qIHNvIHRoYXQgc25kX2F1MTAwMF9mcmVlIHdpbGwgd29yayBhcyBpbnRlbmRlZCAqLwogCWF1MTAwMC0+Y2FyZCA9IGNhcmQ7Ci0JYXUxMDAwLT5zdHJlYW1bUExBWUJBQ0tdLT5kbWEgPSAtMTsKLQlhdTEwMDAtPnN0cmVhbVtDQVBUVVJFXS0+ZG1hID0gLTE7Ci0gCWF1MTAwMC0+YWM5N19yZXNfcG9ydCA9IE5VTEw7CisKIAlhdTEwMDAtPnN0cmVhbVtQTEFZQkFDS10gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXVkaW9fc3RyZWFtKSwgR0ZQX0tFUk5FTCk7Ci0JYXUxMDAwLT5zdHJlYW1bQ0FQVFVSRV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXVkaW9fc3RyZWFtKSwgR0ZQX0tFUk5FTCk7CisJYXUxMDAwLT5zdHJlYW1bQ0FQVFVSRSBdID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF1ZGlvX3N0cmVhbSksIEdGUF9LRVJORUwpOworCS8qIHNvIHRoYXQgc25kX2F1MTAwMF9mcmVlIHdpbGwgd29yayBhcyBpbnRlbmRlZCAqLworIAlhdTEwMDAtPmFjOTdfcmVzX3BvcnQgPSBOVUxMOworCWlmIChhdTEwMDAtPnN0cmVhbVtQTEFZQkFDS10pCisJCWF1MTAwMC0+c3RyZWFtW1BMQVlCQUNLXS0+ZG1hID0gLTE7CisJaWYgKGF1MTAwMC0+c3RyZWFtW0NBUFRVUkUgXSkKKwkJYXUxMDAwLT5zdHJlYW1bQ0FQVFVSRSBdLT5kbWEgPSAtMTsKKwogCWlmIChhdTEwMDAtPnN0cmVhbVtQTEFZQkFDS10gPT0gTlVMTCB8fAotCSAgICBhdTEwMDAtPnN0cmVhbVtDQVBUVVJFXSA9PSBOVUxMKSB7CisJICAgIGF1MTAwMC0+c3RyZWFtW0NBUFRVUkUgXSA9PSBOVUxMKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMgYi9zb3VuZC9vc3MvYWM5N19jb2RlYy5jCmluZGV4IGZkMjVhY2EuLjk3MjMyN2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvb3NzL2FjOTdfY29kZWMuYwpAQCAtNTUsNyArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIENPREVDX0lEX0JVRlNaIDE0CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCiBzdGF0aWMgTElTVF9IRUFEKGNvZGVjcyk7CiBzdGF0aWMgTElTVF9IRUFEKGNvZGVjX2RyaXZlcnMpOwotc3RhdGljIERFQ0xBUkVfTVVURVgoY29kZWNfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY29kZWNfbXV0ZXgpOwogCiAvKiByZWFkcyB0aGUgZ2l2ZW4gT1NTIG1peGVyIGZyb20gdGhlIGFjOTcgdGhlIGNhbGxlciBtdXN0IGhhdmUgaW5zdXJlZCB0aGF0IHRoZSBhYzk3IGtub3dzCiAgICBhYm91dCB0aGF0IGdpdmVuIG1peGVyLCBhbmQgc2hvdWxkIGJlIGhvbGRpbmcgYSBzcGlubG9jayBmb3IgdGhlIGNhcmQgKi8KQEAgLTc2OSw5ICs3NjksOSBAQAogewogCS8qIFJlbW92ZSBmcm9tIHRoZSBsaXN0IGZpcnN0LCB3ZSBkb24ndCB3YW50IHRvIGJlCiAJICAgInJlZGlzY292ZXJlZCIgKi8KLQlkb3duKCZjb2RlY19zZW0pOworCW11dGV4X2xvY2soJmNvZGVjX211dGV4KTsKIAlsaXN0X2RlbCgmY29kZWMtPmxpc3QpOwotCXVwKCZjb2RlY19zZW0pOworCW11dGV4X3VubG9jaygmY29kZWNfbXV0ZXgpOwogCS8qCiAJICoJVGhlIGRyaXZlciBuZWVkcyB0byBkZWFsIHdpdGggaW50ZXJuYWwKIAkgKglsb2NraW5nIHRvIGF2b2lkIGFjY2lkZW50cyBoZXJlLiAKQEAgLTg4OSw3ICs4ODksNyBAQAogCSAqCWNhbGxiYWNrcy4KIAkgKi8KIAkgCi0JZG93bigmY29kZWNfc2VtKTsKKwltdXRleF9sb2NrKCZjb2RlY19tdXRleCk7CiAJbGlzdF9hZGQoJmNvZGVjLT5saXN0LCAmY29kZWNzKTsKIAogCWxpc3RfZm9yX2VhY2gobCwgJmNvZGVjX2RyaXZlcnMpIHsKQEAgLTkwMyw3ICs5MDMsNyBAQAogCQl9CiAJfQogCi0JdXAoJmNvZGVjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjb2RlY19tdXRleCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE0MzksNyArMTQzOSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKIAlzdHJ1Y3QgYWM5N19jb2RlYyAqYzsKIAkKLQlkb3duKCZjb2RlY19zZW0pOworCW11dGV4X2xvY2soJmNvZGVjX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmZHJpdmVyLT5saXN0KTsKIAlsaXN0X2FkZCgmZHJpdmVyLT5saXN0LCAmY29kZWNfZHJpdmVycyk7CiAJCkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogCQkJY29udGludWU7CiAJCWMtPmRyaXZlciA9IGRyaXZlcjsKIAl9Ci0JdXAoJmNvZGVjX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjb2RlY19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NzEsNyArMTQ3MSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKIAlzdHJ1Y3QgYWM5N19jb2RlYyAqYzsKIAkKLQlkb3duKCZjb2RlY19zZW0pOworCW11dGV4X2xvY2soJmNvZGVjX211dGV4KTsKIAlsaXN0X2RlbF9pbml0KCZkcml2ZXItPmxpc3QpOwogCiAJbGlzdF9mb3JfZWFjaChsLCAmY29kZWNzKQpAQCAtMTQ4Myw3ICsxNDgzLDcgQEAKIAkJfQogCX0KIAkKLQl1cCgmY29kZWNfc2VtKTsKKwltdXRleF91bmxvY2soJmNvZGVjX211dGV4KTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoYWM5N191bnJlZ2lzdGVyX2RyaXZlcik7CkBAIC0xNDk0LDE0ICsxNDk0LDE0IEBACiAJc3RydWN0IGFjOTdfY29kZWMgKmM7CiAJCiAJaWYgKHJlbW92ZV9tYXN0ZXIpIHsKLQkJZG93bigmY29kZWNfc2VtKTsKKwkJbXV0ZXhfbG9jaygmY29kZWNfbXV0ZXgpOwogCQlsaXN0X2Zvcl9lYWNoKGwsICZjb2RlY3MpCiAJCXsKIAkJCWMgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBhYzk3X2NvZGVjLCBsaXN0KTsKIAkJCWlmIChzdXBwb3J0ZWRfbWl4ZXIoYywgU09VTkRfTUlYRVJfUEhPTkVPVVQpKQogCQkJCWMtPnN1cHBvcnRlZF9taXhlcnMgJj0gflNPVU5EX01BU0tfUEhPTkVPVVQ7CiAJCX0KLQkJdXAoJmNvZGVjX3NlbSk7CisJCW11dGV4X3VubG9jaygmY29kZWNfbXV0ZXgpOwogCX0gZWxzZQogCQlhYzk3X2h3W1NPVU5EX01JWEVSX1BIT05FT1VUXS5vZmZzZXQgPSBBQzk3X01BU1RFUl9WT0xfU1RFUkVPOwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWNpLmMgYi9zb3VuZC9vc3MvYWNpLmMKaW5kZXggMzkyOGMyOC4uM2JmYWMzNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FjaS5jCisrKyBiL3NvdW5kL29zcy9hY2kuYwpAQCAtNTYsNyArNTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPiAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJzb3VuZF9jb25maWcuaCIKQEAgLTc5LDcgKzgwLDcgQEAKIAkJCSAqIGNoZWNrZWQgd2l0aCBBQ0kgdmVyc2lvbnMgcHJpb3IgdG8gMHhiMAkqLwogCiBzdGF0aWMgaW50IG1peGVyX2RldmljZTsKLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGFjaV9zZW07CitzdGF0aWMgc3RydWN0IG11dGV4IGFjaV9tdXRleDsKIAogI2lmZGVmIE1PRFVMRQogc3RhdGljIGludCByZXNldDsKQEAgLTIxMiw3ICsyMTMsNyBAQAogCWludCB3cml0ZVtdID0ge3dyaXRlMSwgd3JpdGUyLCB3cml0ZTN9OwogCWludCByZWFkID0gLUVJTlRSLCBpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYWNpX3NlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWNpX211dGV4KSkKIAkJZ290byBvdXQ7CiAKIAlmb3IgKGk9MDsgaTwzOyBpKyspIHsKQEAgLTIyNyw3ICsyMjgsNyBAQAogCX0KIAkKIAlyZWFkID0gYWNpX3Jhd3JlYWQoKTsKLW91dF91cDoJdXAoJmFjaV9zZW0pOworb3V0X3VwOgltdXRleF91bmxvY2soJmFjaV9tdXRleCk7CiBvdXQ6CXJldHVybiByZWFkOwogfQogCkBAIC02MDMsNyArNjA0LDcgQEAKIAljaGFyICpib2FyZG5hbWU7CiAJaW50IGksIHJjID0gLUVCVVNZOwogCi0JaW5pdF9NVVRFWCgmYWNpX3NlbSk7CisJbXV0ZXhfaW5pdCgmYWNpX211dGV4KTsKIAogCW91dGIoMHhFMywgMHhmOGYpOyAvKiBXcml0ZSBNQUQxNiBwYXNzd29yZCAqLwogCWFjaV9wb3J0ID0gKGluYigweGY5MCkgJiAweDEwKSA/CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYWQxODg5LmMgYi9zb3VuZC9vc3MvYWQxODg5LmMKaW5kZXggYTBkNzNmMy4uNTRkYWJmOCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2FkMTg4OS5jCisrKyBiL3NvdW5kL29zcy9hZDE4ODkuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxsaW51eC9zb3VuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTIzOCw3ICsyMzksNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFEX01BWF9TVEFURVM7IGkrKykgewogCQlkZXYtPnN0YXRlW2ldLmNhcmQgPSBkZXY7Ci0JCWluaXRfTVVURVgoJmRldi0+c3RhdGVbaV0uc2VtKTsKKwkJbXV0ZXhfaW5pdCgmZGV2LT5zdGF0ZVtpXS5tdXRleCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+c3RhdGVbaV0uZG1hYnVmLndhaXQpOwogCX0KIApAQCAtNDYxLDcgKzQ2Miw3IEBACiAJc3NpemVfdCByZXQgPSAwOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCi0JZG93bigmc3RhdGUtPnNlbSk7CisJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKICNpZiAwCiAJaWYgKGRtYWJ1Zi0+bWFwcGVkKSB7CiAJCXJldCA9IC1FTlhJTzsKQEAgLTU0Niw3ICs1NDcsNyBAQAogZXJyMjoKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmc3RhdGUtPmRtYWJ1Zi53YWl0LCAmd2FpdCk7CiBlcnIxOgotCXVwKCZzdGF0ZS0+c2VtKTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2FkMTg4OS5oIGIvc291bmQvb3NzL2FkMTg4OS5oCmluZGV4IGUwNGFmZmMuLjg2MWIzMjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hZDE4ODkuaAorKysgYi9zb3VuZC9vc3MvYWQxODg5LmgKQEAgLTEwMCw3ICsxMDAsNyBAQAogCQl1bnNpZ25lZCBpbnQgc3ViZGl2aXNpb247CiAJfSBkbWFidWY7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiB9IGFkMTg4OV9zdGF0ZV90OwogCiB0eXBlZGVmIHN0cnVjdCBhZDE4ODlfZGV2IHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9hbGk1NDU1LmMgYi9zb3VuZC9vc3MvYWxpNTQ1NS5jCmluZGV4IDljOWU2YzAuLjYyYmI5MzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hbGk1NDU1LmMKKysrIGIvc291bmQvb3NzL2FsaTU0NTUuYwpAQCAtNjQsNiArNjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYWM5N19jb2RlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaWZuZGVmIFBDSV9ERVZJQ0VfSURfQUxJXzU0NTUKQEAgLTIzNCw3ICsyMzYsNyBAQAogCXN0cnVjdCBhbGlfY2FyZCAqY2FyZDsJLyogQ2FyZCBpbmZvICovCiAKIAkvKiBzaW5nbGUgb3BlbiBsb2NrIG1lY2hhbmlzbSwgb25seSB1c2VkIGZvciByZWNvcmRpbmcgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOworCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIAogCS8qIGZpbGUgbW9kZSAqLwpAQCAtMjgwNyw3ICsyODA5LDcgQEAKIAlzdGF0ZS0+Y2FyZCA9IGNhcmQ7CiAJc3RhdGUtPm1hZ2ljID0gQUxJNTQ1NV9TVEFURV9NQUdJQzsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbWFidWYtPndhaXQpOwotCWluaXRfTVVURVgoJnN0YXRlLT5vcGVuX3NlbSk7CisJbXV0ZXhfaW5pdCgmc3RhdGUtPm9wZW5fbXV0ZXgpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHN0YXRlOwogCWRtYWJ1Zi0+dHJpZ2dlciA9IDA7CiAJLyogYWxsb2NhdGUgaGFyZHdhcmUgY2hhbm5lbHMgKi8KQEAgLTMzNTksNyArMzM2MSw3IEBACiAJCXN0YXRlLT5jYXJkID0gY2FyZDsKIAkJc3RhdGUtPm1hZ2ljID0gQUxJNTQ1NV9TVEFURV9NQUdJQzsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hYnVmLT53YWl0KTsKLQkJaW5pdF9NVVRFWCgmc3RhdGUtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfaW5pdCgmc3RhdGUtPm9wZW5fbXV0ZXgpOwogCQlkbWFidWYtPmZtdCA9IEFMSTU0NTVfRk1UX1NURVJFTyB8IEFMSTU0NTVfRk1UXzE2QklUOwogCQlkbWFidWYtPnRyaWdnZXIgPSBQQ01fRU5BQkxFX09VVFBVVDsKIAkJYWxpX3NldF9kYWNfcmF0ZShzdGF0ZSwgNDgwMDApOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2F1MTAwMC5jIGIvc291bmQvb3NzL2F1MTAwMC5jCmluZGV4IGM0MDdkZTguLmVhY2IwYWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdTEwMDAuYworKysgYi9zb3VuZC9vc3MvYXUxMDAwLmMKQEAgLTY4LDYgKzY4LDggQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CkBAIC05OCw3ICsxMDAsNyBAQAogCiAvKiBCb290IG9wdGlvbnMgKi8KIHN0YXRpYyBpbnQgICAgICB2cmEgPSAwOwkvLyAwID0gbm8gVlJBLCAxID0gdXNlIFZSQSBpZiBjb2RlYyBzdXBwb3J0cyBpdAotTU9EVUxFX1BBUk0odnJhLCAiaSIpOworbW9kdWxlX3BhcmFtKHZyYSwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZyYSwgImlmIDEgdXNlIFZSQSBpZiBjb2RlYyBzdXBwb3J0cyBpdCIpOwogCiAKQEAgLTEyMCw4ICsxMjIsOCBAQAogCWludCAgICAgICAgICAgICBub192cmE7CS8vIGRvIG5vdCB1c2UgVlJBCiAKIAlzcGlubG9ja190ICAgICAgbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OworCXN0cnVjdCBtdXRleCBzZW07CiAJbW9kZV90ICAgICAgICAgIG9wZW5fbW9kZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CiAKQEAgLTExMDYsNyArMTEwOCw3IEBACiAKIAljb3VudCAqPSBkYi0+Y250X2ZhY3RvcjsKIAotCWRvd24oJnMtPnNlbSk7CisJbXV0ZXhfbG9jaygmcy0+c2VtKTsKIAlhZGRfd2FpdF9xdWV1ZSgmZGItPndhaXQsICZ3YWl0KTsKIAogCXdoaWxlIChjb3VudCA+IDApIHsKQEAgLTExMjUsMTQgKzExMjcsMTQgQEAKIAkJCQkJCXJldCA9IC1FQUdBSU47CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KLQkJCQl1cCgmcy0+c2VtKTsKKwkJCQltdXRleF91bmxvY2soJnMtPnNlbSk7CiAJCQkJc2NoZWR1bGUoKTsKIAkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQkJaWYgKCFyZXQpCiAJCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQkJCWdvdG8gb3V0MjsKIAkJCQl9Ci0JCQkJZG93bigmcy0+c2VtKTsKKwkJCQltdXRleF9sb2NrKCZzLT5zZW0pOwogCQkJfQogCQl9IHdoaWxlIChhdmFpbCA8PSAwKTsKIApAQCAtMTE1OSw3ICsxMTYxLDcgQEAKIAl9CQkJLy8gd2hpbGUgKGNvdW50ID4gMCkKIAogb3V0OgotCXVwKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2VtKTsKIG91dDI6CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmRiLT53YWl0LCAmd2FpdCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKQEAgLTExODcsNyArMTE4OSw3IEBACiAKIAljb3VudCAqPSBkYi0+Y250X2ZhY3RvcjsKIAotCWRvd24oJnMtPnNlbSk7CQorCW11dGV4X2xvY2soJnMtPnNlbSk7CiAJYWRkX3dhaXRfcXVldWUoJmRiLT53YWl0LCAmd2FpdCk7CiAKIAl3aGlsZSAoY291bnQgPiAwKSB7CkBAIC0xMjA0LDE0ICsxMjA2LDE0IEBACiAJCQkJCQlyZXQgPSAtRUFHQUlOOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9Ci0JCQkJdXAoJnMtPnNlbSk7CisJCQkJbXV0ZXhfdW5sb2NrKCZzLT5zZW0pOwogCQkJCXNjaGVkdWxlKCk7CiAJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQkJCWlmICghcmV0KQogCQkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJCQlnb3RvIG91dDI7CiAJCQkJfQotCQkJCWRvd24oJnMtPnNlbSk7CisJCQkJbXV0ZXhfbG9jaygmcy0+c2VtKTsKIAkJCX0KIAkJfSB3aGlsZSAoYXZhaWwgPD0gMCk7CiAKQEAgLTEyNDAsNyArMTI0Miw3IEBACiAJfQkJCS8vIHdoaWxlIChjb3VudCA+IDApCiAKIG91dDoKLQl1cCgmcy0+c2VtKTsKKwltdXRleF91bmxvY2soJnMtPnNlbSk7CiBvdXQyOgogCXJlbW92ZV93YWl0X3F1ZXVlKCZkYi0+d2FpdCwgJndhaXQpOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CkBAIC0xMjk4LDcgKzEzMDAsNyBAQAogCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIAogCWxvY2tfa2VybmVsKCk7Ci0JZG93bigmcy0+c2VtKTsKKwltdXRleF9sb2NrKCZzLT5zZW0pOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCiAJCWRiID0gJnMtPmRtYV9kYWM7CiAJZWxzZSBpZiAodm1hLT52bV9mbGFncyAmIFZNX1JFQUQpCkBAIC0xMzI0LDcgKzEzMjYsNyBAQAogCXZtYS0+dm1fZmxhZ3MgJj0gflZNX0lPOwogCWRiLT5tYXBwZWQgPSAxOwogb3V0OgotCXVwKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2VtKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MjksMjEgKzE4MzEsMjEgQEAKIAkKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3aGlsZSAocy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCiAJc3RvcF9kYWMocyk7CkBAIC0xODc5LDggKzE4ODEsOCBAQAogCX0KIAogCXMtPm9wZW5fbW9kZSB8PSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKLQl1cCgmcy0+b3Blbl9zZW0pOwotCWluaXRfTVVURVgoJnMtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKKwltdXRleF9pbml0KCZzLT5zZW0pOwogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIApAQCAtMTg5Niw3ICsxODk4LDcgQEAKIAkJbG9ja19rZXJuZWwoKTsKIAl9CiAKLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCXN0b3BfZGFjKHMpOwogCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2RhYyk7CkBAIC0xOTA2LDcgKzE5MDgsNyBAQAogCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2FkYyk7CiAJfQogCXMtPm9wZW5fbW9kZSAmPSAoKH5maWxlLT5mX21vZGUpICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CkBAIC0xOTk2LDcgKzE5OTgsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9hZGMud2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+ZG1hX2RhYy53YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5vcGVuX3dhaXQpOwotCWluaXRfTVVURVgoJnMtPm9wZW5fc2VtKTsKKwltdXRleF9pbml0KCZzLT5vcGVuX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmcy0+bG9jayk7CiAJcy0+Y29kZWMucHJpdmF0ZV9kYXRhID0gczsKIAlzLT5jb2RlYy5pZCA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCmluZGV4IGJkZWUwNTAuLmMxMTY4ZmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCisrKyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCkBAIC01Miw2ICs1Miw4IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaGFyZGlycS5oPgpAQCAtNzcsNyArNzksNyBAQAogICogMCA9IG5vIFZSQSwgMSA9IHVzZSBWUkEgaWYgY29kZWMgc3VwcG9ydHMgaXQKICAqLwogc3RhdGljIGludCAgICAgIHZyYSA9IDE7Ci1NT0RVTEVfUEFSTSh2cmEsICJpIik7Cittb2R1bGVfcGFyYW0odnJhLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModnJhLCAiaWYgMSB1c2UgVlJBIGlmIGNvZGVjIHN1cHBvcnRzIGl0Iik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXUxNTUwX3N0YXRlIHsKQEAgLTkwLDggKzkyLDggQEAKIAlpbnQgICAgICAgICAgICAgbm9fdnJhOwkJLyogZG8gbm90IHVzZSBWUkEgKi8KIAogCXNwaW5sb2NrX3QgICAgICBsb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW07Ci0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CisJc3RydWN0IG11dGV4IHNlbTsKIAltb2RlX3QgICAgICAgICAgb3Blbl9tb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIApAQCAtMTA0NCw3ICsxMDQ2LDcgQEAKIAogCWNvdW50ICo9IGRiLT5jbnRfZmFjdG9yOwogCi0JZG93bigmcy0+c2VtKTsKKwltdXRleF9sb2NrKCZzLT5zZW0pOwogCWFkZF93YWl0X3F1ZXVlKCZkYi0+d2FpdCwgJndhaXQpOwogCiAJd2hpbGUgKGNvdW50ID4gMCkgewpAQCAtMTA2NCwxNCArMTA2NiwxNCBAQAogCQkJCQkJcmV0ID0gLUVBR0FJTjsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQotCQkJCXVwKCZzLT5zZW0pOworCQkJCW11dGV4X3VubG9jaygmcy0+c2VtKTsKIAkJCQlzY2hlZHVsZSgpOwogCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCQlpZiAoIXJldCkKIAkJCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQkJZ290byBvdXQyOwogCQkJCX0KLQkJCQlkb3duKCZzLT5zZW0pOworCQkJCW11dGV4X2xvY2soJnMtPnNlbSk7CiAJCQl9CiAJCX0gd2hpbGUgKGF2YWlsIDw9IDApOwogCkBAIC0xMDk5LDcgKzExMDEsNyBAQAogCX0JCQkvKiB3aGlsZSAoY291bnQgPiAwKSAqLwogCiBvdXQ6Ci0JdXAoJnMtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5zZW0pOwogb3V0MjoKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZGItPndhaXQsICZ3YWl0KTsKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwpAQCAtMTEyNSw3ICsxMTI3LDcgQEAKIAogCWNvdW50ICo9IGRiLT5jbnRfZmFjdG9yOwogCi0JZG93bigmcy0+c2VtKTsKKwltdXRleF9sb2NrKCZzLT5zZW0pOwogCWFkZF93YWl0X3F1ZXVlKCZkYi0+d2FpdCwgJndhaXQpOwogCiAJd2hpbGUgKGNvdW50ID4gMCkgewpAQCAtMTE0MywxNCArMTE0NSwxNCBAQAogCQkJCQkJcmV0ID0gLUVBR0FJTjsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQotCQkJCXVwKCZzLT5zZW0pOworCQkJCW11dGV4X3VubG9jaygmcy0+c2VtKTsKIAkJCQlzY2hlZHVsZSgpOwogCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCQlpZiAoIXJldCkKIAkJCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQkJZ290byBvdXQyOwogCQkJCX0KLQkJCQlkb3duKCZzLT5zZW0pOworCQkJCW11dGV4X2xvY2soJnMtPnNlbSk7CiAJCQl9CiAJCX0gd2hpbGUgKGF2YWlsIDw9IDApOwogCkBAIC0xMTk2LDcgKzExOTgsNyBAQAogCX0JCQkvKiB3aGlsZSAoY291bnQgPiAwKSAqLwogCiBvdXQ6Ci0JdXAoJnMtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5zZW0pOwogb3V0MjoKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZGItPndhaXQsICZ3YWl0KTsKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwpAQCAtMTI1Myw3ICsxMjU1LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWxvY2tfa2VybmVsKCk7Ci0JZG93bigmcy0+c2VtKTsKKwltdXRleF9sb2NrKCZzLT5zZW0pOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpCiAJCWRiID0gJnMtPmRtYV9kYWM7CiAJZWxzZSBpZiAodm1hLT52bV9mbGFncyAmIFZNX1JFQUQpCkBAIC0xMjc5LDcgKzEyODEsNyBAQAogCXZtYS0+dm1fZmxhZ3MgJj0gflZNX0lPOwogCWRiLT5tYXBwZWQgPSAxOwogb3V0OgotCXVwKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2VtKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3OTAsMjEgKzE3OTIsMjEgQEAKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CiAJLyogd2FpdCBmb3IgZGV2aWNlIHRvIGJlY29tZSBmcmVlICovCi0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdoaWxlIChzLT5vcGVuX21vZGUgJiBmaWxlLT5mX21vZGUpIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl1cCgmcy0+b3Blbl9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXVwKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJZG93bigmcy0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl9CiAKIAlzdG9wX2RhYyhzKTsKQEAgLTE4NDAsOCArMTg0Miw4IEBACiAJfQogCiAJcy0+b3Blbl9tb2RlIHw9IGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpOwotCXVwKCZzLT5vcGVuX3NlbSk7Ci0JaW5pdF9NVVRFWCgmcy0+c2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOworCW11dGV4X2luaXQoJnMtPnNlbSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NTgsNyArMTg2MCw3IEBACiAJCWxvY2tfa2VybmVsKCk7CiAJfQogCi0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQlzdG9wX2RhYyhzKTsKIAkJa2ZyZWUocy0+ZG1hX2RhYy5yYXdidWYpOwpAQCAtMTg3MCw3ICsxODcyLDcgQEAKIAkJcy0+ZG1hX2FkYy5yYXdidWYgPSBOVUxMOwogCX0KIAlzLT5vcGVuX21vZGUgJj0gKCh+ZmlsZS0+Zl9tb2RlKSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKSk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwpAQCAtMTkwMiw3ICsxOTA0LDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5kbWFfYWRjLndhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9kYWMud2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+b3Blbl93YWl0KTsKLQlpbml0X01VVEVYKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfaW5pdCgmcy0+b3Blbl9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwogCiAJcy0+Y29kZWMgPSBhYzk3X2FsbG9jX2NvZGVjKCk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXdlX3dhdmUuYyBiL3NvdW5kL29zcy9hd2Vfd2F2ZS5jCmluZGV4IGIzZWE3MTkuLmQxYTBlYjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hd2Vfd2F2ZS5jCisrKyBiL3NvdW5kL29zcy9hd2Vfd2F2ZS5jCkBAIC0yOTQ0LDcgKzI5NDQsNyBAQAogewogCWF3ZV92b2ljZV9saXN0ICpuZXdsaXN0OwogCQotCW5ld2xpc3QgPSAoYXdlX3ZvaWNlX2xpc3QgKilrbWFsbG9jKHNpemVvZigqbmV3bGlzdCksIEdGUF9LRVJORUwpOworCW5ld2xpc3QgPSBrbWFsbG9jKHNpemVvZigqbmV3bGlzdCksIEdGUF9LRVJORUwpOwogCWlmIChuZXdsaXN0ID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJBV0UzMjogY2FuJ3QgYWxsb2MgaW5mbyB0YWJsZVxuIik7CiAJCXJldHVybiBOVUxMOwpAQCAtMzU0Nyw4ICszNTQ3LDEwIEBACiAJc21wLT5jaGVja3N1bV9mbGFnID0gMDsKIAlzbXAtPmNoZWNrc3VtID0gMDsKIAotCWlmICgocmMgPSBhd2Vfd3JpdGVfd2F2ZV9kYXRhKGFkZHIsIHNpemVvZl9wYXRjaCwgc21wcmVjLCAtMSkpIDwgMCkKKwlpZiAoKHJjID0gYXdlX3dyaXRlX3dhdmVfZGF0YShhZGRyLCBzaXplb2ZfcGF0Y2gsIHNtcHJlYywgLTEpKSA8IDApIHsKKwkJa2ZyZWUodnJlYyk7CiAJCXJldHVybiByYzsKKwl9CiAJc2YtPm1lbV9wdHIgKz0gcmM7CiAJYWRkX3NmX3NhbXBsZShzZiwgc21wcmVjKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2J0YXVkaW8uYyBiL3NvdW5kL29zcy9idGF1ZGlvLmMKaW5kZXggNDAwN2E1NjguLmJmZTNiNTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9idGF1ZGlvLmMKKysrIGIvc291bmQvb3NzL2J0YXVkaW8uYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMTA4LDcgKzExMCw3IEBACiAKIAkvKiBsb2NraW5nICovCiAJaW50ICAgICAgICAgICAgdXNlcnM7Ci0Jc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogCiAJLyogcmlzYyBpbnN0cnVjdGlvbnMgKi8KIAl1bnNpZ25lZCBpbnQgICByaXNjX3NpemU7CkBAIC00NDAsNyArNDQyLDcgQEAKIHN0YXRpYyBpbnQgYnRhdWRpb19kc3Bfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICBzdHJ1Y3QgYnRhdWRpbyAqYnRhLCBpbnQgYW5hbG9nKQogewotCWRvd24oJmJ0YS0+bG9jayk7CisJbXV0ZXhfbG9jaygmYnRhLT5sb2NrKTsKIAlpZiAoYnRhLT51c2VycykKIAkJZ290byBidXN5OwogCWJ0YS0+dXNlcnMrKzsKQEAgLTQ1MiwxMSArNDU0LDExIEBACiAJYnRhLT5yZWFkX2NvdW50ID0gMDsKIAlidGEtPnNhbXBsZXNoaWZ0ID0gMDsKIAotCXVwKCZidGEtPmxvY2spOworCW11dGV4X3VubG9jaygmYnRhLT5sb2NrKTsKIAlyZXR1cm4gMDsKIAogIGJ1c3k6Ci0JdXAoJmJ0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZidGEtPmxvY2spOwogCXJldHVybiAtRUJVU1k7CiB9CiAKQEAgLTQ5NiwxMSArNDk4LDExIEBACiB7CiAJc3RydWN0IGJ0YXVkaW8gKmJ0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCWRvd24oJmJ0YS0+bG9jayk7CisJbXV0ZXhfbG9jaygmYnRhLT5sb2NrKTsKIAlpZiAoYnRhLT5yZWNvcmRpbmcpCiAJCXN0b3BfcmVjb3JkaW5nKGJ0YSk7CiAJYnRhLT51c2Vycy0tOwotCXVwKCZidGEtPmxvY2spOworCW11dGV4X3VubG9jaygmYnRhLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTEzLDcgKzUxNSw3IEBACiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKIAlhZGRfd2FpdF9xdWV1ZSgmYnRhLT5yZWFkcSwgJndhaXQpOwotCWRvd24oJmJ0YS0+bG9jayk7CisJbXV0ZXhfbG9jaygmYnRhLT5sb2NrKTsKIAl3aGlsZSAoc3djb3VudCA+IDApIHsKIAkJaWYgKDAgPT0gYnRhLT5yZWFkX2NvdW50KSB7CiAJCQlpZiAoIWJ0YS0+cmVjb3JkaW5nKSB7CkBAIC01MjgsMTAgKzUzMCwxMCBAQAogCQkJCQlyZXQgPSAtRUFHQUlOOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdXAoJmJ0YS0+bG9jayk7CisJCQltdXRleF91bmxvY2soJmJ0YS0+bG9jayk7CiAJCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIAkJCXNjaGVkdWxlKCk7Ci0JCQlkb3duKCZidGEtPmxvY2spOworCQkJbXV0ZXhfbG9jaygmYnRhLT5sb2NrKTsKIAkJCWlmKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQkJaWYgKDAgPT0gcmV0KQogCQkJCQlyZXQgPSAtRUlOVFI7CkBAIC02MDQsNyArNjA2LDcgQEAKIAkJaWYgKGJ0YS0+cmVhZF9vZmZzZXQgPT0gYnRhLT5idWZfc2l6ZSkKIAkJCWJ0YS0+cmVhZF9vZmZzZXQgPSAwOwogCX0KLQl1cCgmYnRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmJ0YS0+bG9jayk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmJ0YS0+cmVhZHEsICZ3YWl0KTsKIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAlyZXR1cm4gcmV0OwpAQCAtNjUxLDEwICs2NTMsMTAgQEAKIAkJCWJ0YS0+ZGVjaW1hdGlvbiAgPSAwOwogCQl9CiAJCWlmIChidGEtPnJlY29yZGluZykgewotCQkJZG93bigmYnRhLT5sb2NrKTsKKwkJCW11dGV4X2xvY2soJmJ0YS0+bG9jayk7CiAJCQlzdG9wX3JlY29yZGluZyhidGEpOwogCQkJc3RhcnRfcmVjb3JkaW5nKGJ0YSk7Ci0JCQl1cCgmYnRhLT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmYnRhLT5sb2NrKTsKIAkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgY2FzZSBTT1VORF9QQ01fUkVBRF9SQVRFOgpAQCAtNzE2LDEwICs3MTgsMTAgQEAKIAkJCWVsc2UKIAkJCQlidGEtPmJpdHMgPSAxNjsKIAkJCWlmIChidGEtPnJlY29yZGluZykgewotCQkJCWRvd24oJmJ0YS0+bG9jayk7CisJCQkJbXV0ZXhfbG9jaygmYnRhLT5sb2NrKTsKIAkJCQlzdG9wX3JlY29yZGluZyhidGEpOwogCQkJCXN0YXJ0X3JlY29yZGluZyhidGEpOwotCQkJCXVwKCZidGEtPmxvY2spOworCQkJCW11dGV4X3VubG9jaygmYnRhLT5sb2NrKTsKIAkJCX0KIAkJfQogCQlpZiAoZGVidWcpCkBAIC03MzYsOSArNzM4LDkgQEAKIAogICAgICAgICBjYXNlIFNORENUTF9EU1BfUkVTRVQ6CiAJCWlmIChidGEtPnJlY29yZGluZykgewotCQkJZG93bigmYnRhLT5sb2NrKTsKKwkJCW11dGV4X2xvY2soJmJ0YS0+bG9jayk7CiAJCQlzdG9wX3JlY29yZGluZyhidGEpOwotCQkJdXAoJmJ0YS0+bG9jayk7CisJCQltdXRleF91bmxvY2soJmJ0YS0+bG9jayk7CiAJCX0KIAkJcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgU05EQ1RMX0RTUF9HRVRCTEtTSVpFOgpAQCAtOTQxLDcgKzk0Myw3IEBACiAJaWYgKHJhdGUpCiAJCWJ0YS0+cmF0ZSA9IHJhdGU7CiAJCi0JaW5pdF9NVVRFWCgmYnRhLT5sb2NrKTsKKwltdXRleF9pbml0KCZidGEtPmxvY2spOwogICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZidGEtPnJlYWRxKTsKIAogCWlmICgtMSAhPSBsYXRlbmN5KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvY21wY2kuYyBiL3NvdW5kL29zcy9jbXBjaS5jCmluZGV4IDdjZmJiMDguLjFmYmQ1MTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9jbXBjaS5jCisrKyBiL3NvdW5kL29zcy9jbXBjaS5jCkBAIC0xMzgsNiArMTM4LDggQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19TT1VORF9DTVBDSV9KT1lTVElDSwogI2luY2x1ZGUgPGxpbnV4L2dhbWVwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzkyLDcgKzM5NCw3IEBACiAJdW5zaWduZWQgY2hhciBmbXQsIGVuYWJsZTsKIAogCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOworCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwogCW1vZGVfdCBvcGVuX21vZGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwogCkBAIC0yODI1LDIxICsyODI3LDIxIEBACiAgICAgICAgCVZBTElEQVRFX1NUQVRFKHMpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CiAJLyogd2FpdCBmb3IgZGV2aWNlIHRvIGJlY29tZSBmcmVlICovCi0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdoaWxlIChzLT5vcGVuX21vZGUgJiBmaWxlLT5mX21vZGUpIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl1cCgmcy0+b3Blbl9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXVwKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJZG93bigmcy0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl9CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJcy0+c3RhdHVzICY9IH5ET19CSUdFTkRJQU5fUjsKQEAgLTI4NjcsNyArMjg2OSw3IEBACiAJfQogCXNldF9mbXQocywgZm10bSwgZm10cyk7CiAJcy0+b3Blbl9tb2RlIHw9IGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpOwotCXVwKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKQEAgLTI4NzksNyArMjg4MSw3IEBACiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCiAJCWRyYWluX2RhYyhzLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQlzdG9wX2RhYyhzKTsKIApAQCAtMjkwMyw3ICsyOTA1LDcgQEAKIAkJcy0+c3RhdHVzICY9IH5ET19CSUdFTkRJQU5fUjsKIAl9CiAJcy0+b3Blbl9tb2RlICY9IH4oZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CkBAIC0zMDgwLDcgKzMwODIsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9hZGMud2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+ZG1hX2RhYy53YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5vcGVuX3dhaXQpOwotCWluaXRfTVVURVgoJnMtPm9wZW5fc2VtKTsKKwltdXRleF9pbml0KCZzLT5vcGVuX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmcy0+bG9jayk7CiAJcy0+bWFnaWMgPSBDTV9NQUdJQzsKIAlzLT5kZXYgPSBwY2lkZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvY3M0MjgxL2NzNDI4MW0uYyBiL3NvdW5kL29zcy9jczQyODEvY3M0MjgxbS5jCmluZGV4IDA3MjAzNjUuLjAwMDQ0NDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9jczQyODEvY3M0MjgxbS5jCisrKyBiL3NvdW5kL29zcy9jczQyODEvY3M0MjgxbS5jCkBAIC0yNDUsOSArMjQ1LDkgQEAKIAl2b2lkICp0bXBidWZmOwkJLy8gdG1wIGJ1ZmZlciBmb3Igc2FtcGxlIGNvbnZlcnNpb25zCiAJdW5zaWduZWQgZW5hOwogCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW1fYWRjOwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW1fZGFjOworCXN0cnVjdCBtdXRleCBvcGVuX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9zZW1fYWRjOworCXN0cnVjdCBtdXRleCBvcGVuX3NlbV9kYWM7CiAJbW9kZV90IG9wZW5fbW9kZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0X2FkYzsKQEAgLTM1OTgsMjAgKzM1OTgsMjAgQEAKIAogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQlkcmFpbl9kYWMocywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCQlkb3duKCZzLT5vcGVuX3NlbV9kYWMpOworCQltdXRleF9sb2NrKCZzLT5vcGVuX3NlbV9kYWMpOwogCQlzdG9wX2RhYyhzKTsKIAkJZGVhbGxvY19kbWFidWYocywgJnMtPmRtYV9kYWMpOwogCQlzLT5vcGVuX21vZGUgJj0gfkZNT0RFX1dSSVRFOwotCQl1cCgmcy0+b3Blbl9zZW1fZGFjKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX3NlbV9kYWMpOwogCQl3YWtlX3VwKCZzLT5vcGVuX3dhaXRfZGFjKTsKIAl9CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJZHJhaW5fYWRjKHMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQkJZG93bigmcy0+b3Blbl9zZW1fYWRjKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAkJc3RvcF9hZGMocyk7CiAJCWRlYWxsb2NfZG1hYnVmKHMsICZzLT5kbWFfYWRjKTsKIAkJcy0+b3Blbl9tb2RlICY9IH5GTU9ERV9SRUFEOwotCQl1cCgmcy0+b3Blbl9zZW1fYWRjKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX3NlbV9hZGMpOwogCQl3YWtlX3VwKCZzLT5vcGVuX3dhaXRfYWRjKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zNjUxLDMzICszNjUxLDMzIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJZG93bigmcy0+b3Blbl9zZW1fZGFjKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9zZW1fZGFjKTsKIAkJd2hpbGUgKHMtPm9wZW5fbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCQl1cCgmcy0+b3Blbl9zZW1fZGFjKTsKKwkJCQltdXRleF91bmxvY2soJnMtPm9wZW5fc2VtX2RhYyk7CiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KLQkJCXVwKCZzLT5vcGVuX3NlbV9kYWMpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX3NlbV9kYWMpOwogCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcy0+b3Blbl93YWl0X2RhYyk7CiAKIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQkJZG93bigmcy0+b3Blbl9zZW1fZGFjKTsKKwkJCW11dGV4X2xvY2soJnMtPm9wZW5fc2VtX2RhYyk7CiAJCX0KIAl9CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJZG93bigmcy0+b3Blbl9zZW1fYWRjKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAkJd2hpbGUgKHMtPm9wZW5fbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCXVwKCZzLT5vcGVuX3NlbV9hZGMpOworCQkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQotCQkJdXAoJnMtPm9wZW5fc2VtX2FkYyk7CisJCQltdXRleF91bmxvY2soJnMtPm9wZW5fc2VtX2FkYyk7CiAJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZzLT5vcGVuX3dhaXRfYWRjKTsKIAogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCQlkb3duKCZzLT5vcGVuX3NlbV9hZGMpOworCQkJbXV0ZXhfbG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAkJfQogCX0KIAlzLT5vcGVuX21vZGUgfD0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7CkBAIC0zNjkxLDcgKzM2OTEsNyBAQAogCQlzLT5lbmEgJj0gfkZNT0RFX1JFQUQ7CiAJCXMtPmRtYV9hZGMub3NzZnJhZ3NoaWZ0ID0gcy0+ZG1hX2FkYy5vc3NtYXhmcmFncyA9CiAJCSAgICBzLT5kbWFfYWRjLnN1YmRpdmlzaW9uID0gMDsKLQkJdXAoJnMtPm9wZW5fc2VtX2FkYyk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAogCQlpZiAocHJvZ19kbWFidWZfYWRjKHMpKSB7CiAJCQlDU19EQkdPVVQoQ1NfT1BFTiB8IENTX0VSUk9SLCAyLCBwcmludGsoS0VSTl9FUlIKQEAgLTM3MTEsNyArMzcxMSw3IEBACiAJCXMtPmVuYSAmPSB+Rk1PREVfV1JJVEU7CiAJCXMtPmRtYV9kYWMub3NzZnJhZ3NoaWZ0ID0gcy0+ZG1hX2RhYy5vc3NtYXhmcmFncyA9CiAJCSAgICBzLT5kbWFfZGFjLnN1YmRpdmlzaW9uID0gMDsKLQkJdXAoJnMtPm9wZW5fc2VtX2RhYyk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW1fZGFjKTsKIAogCQlpZiAocHJvZ19kbWFidWZfZGFjKHMpKSB7CiAJCQlDU19EQkdPVVQoQ1NfT1BFTiB8IENTX0VSUk9SLCAyLCBwcmludGsoS0VSTl9FUlIKQEAgLTM5NzgsMTcgKzM5NzgsMTcgQEAKIAlWQUxJREFURV9TVEFURShzKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCS8vIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAKLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9zZW0pOwogCXdoaWxlIChzLT5vcGVuX21vZGUgJiAoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW0pOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fc2VtKTsKIAkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcy0+b3Blbl93YWl0KTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJZG93bigmcy0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzLT5vcGVuX3NlbSk7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJaWYgKCEocy0+b3Blbl9tb2RlICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpKSkgewpAQCAtNDAxOCw3ICs0MDE4LDcgQEAKIAkgICAgKGZpbGUtPgogCSAgICAgZl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpICYgKEZNT0RFX01JRElfUkVBRCB8CiAJCQkJCSAgICBGTU9ERV9NSURJX1dSSVRFKTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW0pOwogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIApAQCAtNDA1Nyw3ICs0MDU3LDcgQEAKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPm1pZGkub3dhaXQsICZ3YWl0KTsKIAkJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJfQotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX3NlbSk7CiAJcy0+b3Blbl9tb2RlICY9CiAJICAgICh+KGZpbGUtPmZfbW9kZSA8PCBGTU9ERV9NSURJX1NISUZUKSkgJiAoRk1PREVfTUlESV9SRUFEIHwKIAkJCQkJCSAgICAgRk1PREVfTUlESV9XUklURSk7CkBAIC00MDY3LDcgKzQwNjcsNyBAQAogCQlkZWxfdGltZXIoJnMtPm1pZGkudGltZXIpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fc2VtKTsKIAl3YWtlX3VwKCZzLT5vcGVuX3dhaXQpOwogCXJldHVybiAwOwogfQpAQCAtNDMwMCw5ICs0MzAwLDkgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5vcGVuX3dhaXRfZGFjKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5taWRpLml3YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5taWRpLm93YWl0KTsKLQlpbml0X01VVEVYKCZzLT5vcGVuX3NlbSk7Ci0JaW5pdF9NVVRFWCgmcy0+b3Blbl9zZW1fYWRjKTsKLQlpbml0X01VVEVYKCZzLT5vcGVuX3NlbV9kYWMpOworCW11dGV4X2luaXQoJnMtPm9wZW5fc2VtKTsKKwltdXRleF9pbml0KCZzLT5vcGVuX3NlbV9hZGMpOworCW11dGV4X2luaXQoJnMtPm9wZW5fc2VtX2RhYyk7CiAJc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwogCXMtPnBCQTBwaHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CiAJcy0+cEJBMXBoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAxKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9jczQ2eHguYyBiL3NvdW5kL29zcy9jczQ2eHguYwppbmRleCA1OGUyNWM4Li41Mzg4MWJjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvY3M0Nnh4LmMKKysrIGIvc291bmQvb3NzL2NzNDZ4eC5jCkBAIC05MCw2ICs5MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9hYzk3X2NvZGVjLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KQEAgLTIzOCw3ICsyMzksNyBAQAogCXN0cnVjdCBjc19jYXJkICpjYXJkOwkvKiBDYXJkIGluZm8gKi8KIAogCS8qIHNpbmdsZSBvcGVuIGxvY2sgbWVjaGFuaXNtLCBvbmx5IHVzZWQgZm9yIHJlY29yZGluZyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW07CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwogCiAJLyogZmlsZSBtb2RlICovCkBAIC0yOTcsNyArMjk4LDcgQEAKIAkJdW5zaWduZWQgc3ViZGl2aXNpb247CiAJfSBkbWFidWY7CiAJLyogR3VhcmQgYWdhaW5zdCBtbWFwL3dyaXRlL3JlYWQgcmFjZXMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggc2VtOwogfTsKIAogc3RydWN0IGNzX2NhcmQgewpAQCAtMzc1LDcgKzM3Niw3IEBACiAJCXVuc2lnbmVkIGNoYXIgaWJ1ZltDU19NSURJSU5CVUZdOwogCQl1bnNpZ25lZCBjaGFyIG9idWZbQ1NfTUlESU9VVEJVRl07CiAJCW1vZGVfdCBvcGVuX21vZGU7Ci0JCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW07CisJCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwogCX0gbWlkaTsKIAlzdHJ1Y3QgY3M0Nnh4X3BtIHBtOwogfTsKQEAgLTE0MjgsOSArMTQyOSw5IEBACiB7CiAJaW50IHJldDsKIAkKLQlkb3duKCZzdGF0ZS0+c2VtKTsKKwltdXRleF9sb2NrKCZzdGF0ZS0+c2VtKTsKIAlyZXQgPSBfX3Byb2dfZG1hYnVmKHN0YXRlKTsKLQl1cCgmc3RhdGUtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+c2VtKTsKIAkKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTgzMSwxNyArMTgzMiwxNyBAQAogCiAgICAgICAgIGZpbGUtPnByaXZhdGVfZGF0YSA9IGNhcmQ7CiAgICAgICAgIC8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotICAgICAgICBkb3duKCZjYXJkLT5taWRpLm9wZW5fc2VtKTsKKyAgICAgICAgbXV0ZXhfbG9jaygmY2FyZC0+bWlkaS5vcGVuX211dGV4KTsKICAgICAgICAgd2hpbGUgKGNhcmQtPm1pZGkub3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cCgmY2FyZC0+bWlkaS5vcGVuX3NlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJmNhcmQtPm1pZGkub3Blbl9tdXRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB1cCgmY2FyZC0+bWlkaS5vcGVuX3NlbSk7CisgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZjYXJkLT5taWRpLm9wZW5fbXV0ZXgpOwogICAgICAgICAgICAgICAgIGludGVycnVwdGlibGVfc2xlZXBfb24oJmNhcmQtPm1pZGkub3Blbl93YWl0KTsKICAgICAgICAgICAgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVSRVNUQVJUU1lTOwotICAgICAgICAgICAgICAgIGRvd24oJmNhcmQtPm1pZGkub3Blbl9zZW0pOworICAgICAgICAgICAgICAgIG11dGV4X2xvY2soJmNhcmQtPm1pZGkub3Blbl9tdXRleCk7CiAgICAgICAgIH0KICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPm1pZGkubG9jaywgZmxhZ3MpOwogICAgICAgICBpZiAoIShjYXJkLT5taWRpLm9wZW5fbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSkgewpAQCAtMTg1OSw3ICsxODYwLDcgQEAKICAgICAgICAgfQogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5taWRpLmxvY2ssIGZsYWdzKTsKICAgICAgICAgY2FyZC0+bWlkaS5vcGVuX21vZGUgfD0gKGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKTsKLSAgICAgICAgdXAoJmNhcmQtPm1pZGkub3Blbl9zZW0pOworICAgICAgICBtdXRleF91bmxvY2soJmNhcmQtPm1pZGkub3Blbl9tdXRleCk7CiAgICAgICAgIHJldHVybiAwOwogfQogCkBAIC0xODkxLDkgKzE4OTIsOSBAQAogICAgICAgICAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZjYXJkLT5taWRpLm93YWl0LCAmd2FpdCk7CiAgICAgICAgICAgICAgICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAgICAgICAgIH0KLSAgICAgICAgZG93bigmY2FyZC0+bWlkaS5vcGVuX3NlbSk7CisgICAgICAgIG11dGV4X2xvY2soJmNhcmQtPm1pZGkub3Blbl9tdXRleCk7CiAgICAgICAgIGNhcmQtPm1pZGkub3Blbl9tb2RlICY9ICh+KGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSk7Ci0gICAgICAgIHVwKCZjYXJkLT5taWRpLm9wZW5fc2VtKTsKKyAgICAgICAgbXV0ZXhfdW5sb2NrKCZjYXJkLT5taWRpLm9wZW5fbXV0ZXgpOwogICAgICAgICB3YWtlX3VwKCZjYXJkLT5taWRpLm9wZW5fd2FpdCk7CiAgICAgICAgIHJldHVybiAwOwogfQpAQCAtMjA4MSw3ICsyMDgyLDcgQEAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZmZlciwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAkKLQlkb3duKCZzdGF0ZS0+c2VtKTsKKwltdXRleF9sb2NrKCZzdGF0ZS0+c2VtKTsKIAlpZiAoIWRtYWJ1Zi0+cmVhZHkgJiYgKHJldCA9IF9fcHJvZ19kbWFidWYoc3RhdGUpKSkKIAkJZ290byBvdXQyOwogCkBAIC0yMTE0LDEzICsyMTE1LDEzIEBACiAJCQkJaWYgKCFyZXQpIHJldCA9IC1FQUdBSU47CiAJCQkJZ290byBvdXQ7CiAgCQkJfQotCQkJdXAoJnN0YXRlLT5zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+c2VtKTsKIAkJCXNjaGVkdWxlKCk7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQlpZighcmV0KSByZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQlkb3duKCZzdGF0ZS0+c2VtKTsKKwkJCW11dGV4X2xvY2soJnN0YXRlLT5zZW0pOwogCQkJaWYgKGRtYWJ1Zi0+bWFwcGVkKSAKIAkJCXsKIAkJCQlpZighcmV0KQpAQCAtMjE1NSw3ICsyMTU2LDcgQEAKIG91dDoKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmc3RhdGUtPmRtYWJ1Zi53YWl0LCAmd2FpdCk7CiBvdXQyOgotCXVwKCZzdGF0ZS0+c2VtKTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5zZW0pOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJQ1NfREJHT1VUKENTX1dBVkVfUkVBRCB8IENTX0ZVTkNUSU9OLCA0LCAKIAkJcHJpbnRrKCJjczQ2eHg6IGNzX3JlYWQoKS0gJXpkXG4iLHJldCkgKTsKQEAgLTIxODQsNyArMjE4NSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCWRtYWJ1ZiA9ICZzdGF0ZS0+ZG1hYnVmOwogCi0JZG93bigmc3RhdGUtPnNlbSk7CisJbXV0ZXhfbG9jaygmc3RhdGUtPnNlbSk7CiAJaWYgKGRtYWJ1Zi0+bWFwcGVkKQogCXsKIAkJcmV0ID0gLUVOWElPOwpAQCAtMjI0MCwxMyArMjI0MSwxMyBAQAogCQkJCWlmICghcmV0KSByZXQgPSAtRUFHQUlOOwogCQkJCWdvdG8gb3V0OwogIAkJCX0KLQkJCXVwKCZzdGF0ZS0+c2VtKTsKKwkJCW11dGV4X3VubG9jaygmc3RhdGUtPnNlbSk7CiAJCQlzY2hlZHVsZSgpOwogIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCWlmKCFyZXQpIHJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlnb3RvIG91dDsKICAJCQl9Ci0JCQlkb3duKCZzdGF0ZS0+c2VtKTsKKwkJCW11dGV4X2xvY2soJnN0YXRlLT5zZW0pOwogCQkJaWYgKGRtYWJ1Zi0+bWFwcGVkKQogCQkJewogCQkJCWlmKCFyZXQpCkBAIC0yMjc4LDcgKzIyNzksNyBAQAogCQlzdGFydF9kYWMoc3RhdGUpOwogCX0KIG91dDoKLQl1cCgmc3RhdGUtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+c2VtKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmc3RhdGUtPmRtYWJ1Zi53YWl0LCAmd2FpdCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIApAQCAtMjQxMSw3ICsyNDEyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZG93bigmc3RhdGUtPnNlbSk7CQorCW11dGV4X2xvY2soJnN0YXRlLT5zZW0pOwogCWRtYWJ1ZiA9ICZzdGF0ZS0+ZG1hYnVmOwogCWlmIChjczR4X3Bnb2ZmKHZtYSkgIT0gMCkKIAl7CkBAIC0yNDM4LDcgKzI0MzksNyBAQAogCiAJQ1NfREJHT1VUKENTX0ZVTkNUSU9OLCAyLCBwcmludGsoImNzNDZ4eDogY3NfbW1hcCgpLVxuIikgKTsKIG91dDoKLQl1cCgmc3RhdGUtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+c2VtKTsKIAlyZXR1cm4gcmV0OwkKIH0KIApAQCAtMzIwMCw3ICszMjAxLDcgQEAKIAkJCWlmIChzdGF0ZSA9PSBOVUxMKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IGNzX3N0YXRlKSk7Ci0JCQlpbml0X01VVEVYKCZzdGF0ZS0+c2VtKTsKKwkJCW11dGV4X2luaXQoJnN0YXRlLT5zZW0pOwogCQkJZG1hYnVmID0gJnN0YXRlLT5kbWFidWY7CiAJCQlkbWFidWYtPnBidWYgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCQlpZihkbWFidWYtPnBidWY9PU5VTEwpCkBAIC0zMjQxLDEwICszMjQyLDEwIEBACiAJCXN0YXRlLT52aXJ0ID0gMDsKIAkJc3RhdGUtPm1hZ2ljID0gQ1NfU1RBVEVfTUFHSUM7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYWJ1Zi0+d2FpdCk7Ci0JCWluaXRfTVVURVgoJnN0YXRlLT5vcGVuX3NlbSk7CisJCW11dGV4X2luaXQoJnN0YXRlLT5vcGVuX211dGV4KTsKIAkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FyZDsKIAotCQlkb3duKCZzdGF0ZS0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzdGF0ZS0+b3Blbl9tdXRleCk7CiAKIAkJLyogc2V0IGRlZmF1bHQgc2FtcGxlIGZvcm1hdC4gQWNjb3JkaW5nIHRvIE9TUyBQcm9ncmFtbWVyJ3MgR3VpZGUgIC9kZXYvZHNwCiAJCSAgIHNob3VsZCBiZSBkZWZhdWx0IHRvIHVuc2lnbmVkIDgtYml0cywgbW9ubywgd2l0aCBzYW1wbGUgcmF0ZSA4a0h6IGFuZApAQCAtMzI2MCw3ICszMjYxLDcgQEAKIAkJY3Nfc2V0X2Rpdmlzb3IoZG1hYnVmKTsKIAogCQlzdGF0ZS0+b3Blbl9tb2RlIHw9IEZNT0RFX1JFQUQ7Ci0JCXVwKCZzdGF0ZS0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnN0YXRlLT5vcGVuX211dGV4KTsKIAl9CiAJaWYoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCiAJewpAQCAtMzI3MSw3ICszMjcyLDcgQEAKIAkJCWlmIChzdGF0ZSA9PSBOVUxMKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IGNzX3N0YXRlKSk7Ci0JCQlpbml0X01VVEVYKCZzdGF0ZS0+c2VtKTsKKwkJCW11dGV4X2luaXQoJnN0YXRlLT5zZW0pOwogCQkJZG1hYnVmID0gJnN0YXRlLT5kbWFidWY7CiAJCQlkbWFidWYtPnBidWYgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCQlpZihkbWFidWYtPnBidWY9PU5VTEwpCkBAIC0zMzEyLDEwICszMzEzLDEwIEBACiAJCXN0YXRlLT52aXJ0ID0gMTsKIAkJc3RhdGUtPm1hZ2ljID0gQ1NfU1RBVEVfTUFHSUM7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYWJ1Zi0+d2FpdCk7Ci0JCWluaXRfTVVURVgoJnN0YXRlLT5vcGVuX3NlbSk7CisJCW11dGV4X2luaXQoJnN0YXRlLT5vcGVuX211dGV4KTsKIAkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FyZDsKIAotCQlkb3duKCZzdGF0ZS0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzdGF0ZS0+b3Blbl9tdXRleCk7CiAKIAkJLyogc2V0IGRlZmF1bHQgc2FtcGxlIGZvcm1hdC4gQWNjb3JkaW5nIHRvIE9TUyBQcm9ncmFtbWVyJ3MgR3VpZGUgIC9kZXYvZHNwCiAJCSAgIHNob3VsZCBiZSBkZWZhdWx0IHRvIHVuc2lnbmVkIDgtYml0cywgbW9ubywgd2l0aCBzYW1wbGUgcmF0ZSA4a0h6IGFuZApAQCAtMzMzMSw3ICszMzMyLDcgQEAKIAkJY3Nfc2V0X2Rpdmlzb3IoZG1hYnVmKTsKIAogCQlzdGF0ZS0+b3Blbl9tb2RlIHw9IEZNT0RFX1dSSVRFOwotCQl1cCgmc3RhdGUtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+b3Blbl9tdXRleCk7CiAJCWlmKChyZXQgPSBwcm9nX2RtYWJ1ZihzdGF0ZSkpKQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC0zMzYzLDE0ICszMzY0LDE0IEBACiAJCQljc19jbGVhcl90YWlsKHN0YXRlKTsKIAkJCWRyYWluX2RhYyhzdGF0ZSwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogCQkJLyogc3RvcCBETUEgc3RhdGUgbWFjaGluZSBhbmQgZnJlZSBETUEgYnVmZmVycy9jaGFubmVscyAqLwotCQkJZG93bigmc3RhdGUtPm9wZW5fc2VtKTsKKwkJCW11dGV4X2xvY2soJnN0YXRlLT5vcGVuX211dGV4KTsKIAkJCXN0b3BfZGFjKHN0YXRlKTsKIAkJCWRlYWxsb2NfZG1hYnVmKHN0YXRlKTsKIAkJCXN0YXRlLT5jYXJkLT5mcmVlX3BjbV9jaGFubmVsKHN0YXRlLT5jYXJkLCBkbWFidWYtPmNoYW5uZWwtPm51bSk7CiAJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3RhdGUtPmRtYWJ1Zi5wYnVmKTsKIAotCQkJLyogd2UncmUgY292ZXJlZCBieSB0aGUgb3Blbl9zZW0gKi8KLQkJCXVwKCZzdGF0ZS0+b3Blbl9zZW0pOworCQkJLyogd2UncmUgY292ZXJlZCBieSB0aGUgb3Blbl9tdXRleCAqLworCQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+b3Blbl9tdXRleCk7CiAJCQlzdGF0ZS0+Y2FyZC0+c3RhdGVzW3N0YXRlLT52aXJ0XSA9IE5VTEw7CiAJCQlzdGF0ZS0+b3Blbl9tb2RlICY9ICh+ZmlsZS0+Zl9tb2RlKSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKIApAQCAtMzM5NSwxNCArMzM5NiwxNCBAQAogCQl7CiAJCQlDU19EQkdPVVQoQ1NfUkVMRUFTRSwgMiwgcHJpbnRrKCJjczQ2eHg6IGNzX3JlbGVhc2UoKSBGTU9ERV9SRUFEXG4iKSApOwogCQkJZG1hYnVmID0gJnN0YXRlLT5kbWFidWY7Ci0JCQlkb3duKCZzdGF0ZS0+b3Blbl9zZW0pOworCQkJbXV0ZXhfbG9jaygmc3RhdGUtPm9wZW5fbXV0ZXgpOwogCQkJc3RvcF9hZGMoc3RhdGUpOwogCQkJZGVhbGxvY19kbWFidWYoc3RhdGUpOwogCQkJc3RhdGUtPmNhcmQtPmZyZWVfcGNtX2NoYW5uZWwoc3RhdGUtPmNhcmQsIGRtYWJ1Zi0+Y2hhbm5lbC0+bnVtKTsKIAkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzdGF0ZS0+ZG1hYnVmLnBidWYpOwogCi0JCQkvKiB3ZSdyZSBjb3ZlcmVkIGJ5IHRoZSBvcGVuX3NlbSAqLwotCQkJdXAoJnN0YXRlLT5vcGVuX3NlbSk7CisJCQkvKiB3ZSdyZSBjb3ZlcmVkIGJ5IHRoZSBvcGVuX211dGV4ICovCisJCQltdXRleF91bmxvY2soJnN0YXRlLT5vcGVuX211dGV4KTsKIAkJCXN0YXRlLT5jYXJkLT5zdGF0ZXNbc3RhdGUtPnZpcnRdID0gTlVMTDsKIAkJCXN0YXRlLT5vcGVuX21vZGUgJj0gKH5maWxlLT5mX21vZGUpICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOwogCkBAIC01NTA3LDcgKzU1MDgsNyBAQAogCX0KIAogICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5taWRpLm9wZW5fd2FpdCk7Ci0gICAgICAgIGluaXRfTVVURVgoJmNhcmQtPm1pZGkub3Blbl9zZW0pOworICAgICAgICBtdXRleF9pbml0KCZjYXJkLT5taWRpLm9wZW5fbXV0ZXgpOwogICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5taWRpLml3YWl0KTsKICAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+bWlkaS5vd2FpdCk7CiAgICAgICAgIGNzNDYxeF9wb2tlQkEwKGNhcmQsIEJBMF9NSURDUiwgTUlEQ1JfTVJTVCk7ICAgCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXdhY3MuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCmluZGV4IDc0Zjk3NTYuLjZiYThkNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCkBAIC04MCw3ICs4MCw3IEBACiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaWZkZWYgQ09ORklHX0FEQl9DVURBCiAjaW5jbHVkZSA8bGludXgvY3VkYS5oPgogI2VuZGlmCkBAIC04OCw4ICs4OCw2IEBACiAjaW5jbHVkZSA8bGludXgvcG11Lmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KLQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgpAQCAtMTMwLDcgKzEyOCw3IEBACiBzdGF0aWMgY2hhciBhd2Fjc19uYW1lWzY0XTsKIHN0YXRpYyBpbnQgYXdhY3NfcmV2aXNpb247CiBzdGF0aWMgaW50IGF3YWNzX3NsZWVwaW5nOwotc3RhdGljIERFQ0xBUkVfTVVURVgoZG1hc291bmRfc2VtKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZG1hc291bmRfbXV0ZXgpOwogCiBzdGF0aWMgaW50IHNvdW5kX2RldmljZV9pZDsJCS8qIGV4aXN0cyBhZnRlciBpTWFjIHJldkEgKi8KIHN0YXRpYyBpbnQgaHdfY2FuX2J5dGVzd2FwID0gMSA7CS8qIG1vc3QgcG1hYyBzb3VuZCBoL3cgY2FuICovCkBAIC0zMTIsMTEgKzMxMCwxMSBAQAogZXh0ZXJuIGludCBkYWNhX2xlYXZlX3NsZWVwKHZvaWQpOwogCiAjZGVmaW5lIFRSWV9MT0NLKCkJXAotCWlmICgocmMgPSBkb3duX2ludGVycnVwdGlibGUoJmRtYXNvdW5kX3NlbSkpICE9IDApCVwKKwlpZiAoKHJjID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkbWFzb3VuZF9tdXRleCkpICE9IDApCVwKIAkJcmV0dXJuIHJjOwotI2RlZmluZSBMT0NLKCkJCWRvd24oJmRtYXNvdW5kX3NlbSk7CisjZGVmaW5lIExPQ0soKQkJbXV0ZXhfbG9jaygmZG1hc291bmRfbXV0ZXgpOwogCi0jZGVmaW5lIFVOTE9DSygpCXVwKCZkbWFzb3VuZF9zZW0pOworI2RlZmluZSBVTkxPQ0soKQltdXRleF91bmxvY2soJmRtYXNvdW5kX211dGV4KTsKIAogLyogV2UgdXNlIGRpZmZlcmVudCB2ZXJzaW9ucyB0aGF0IHRoZSBvbmVzIHByb3ZpZGVkIGluIGRtYXNvdW5kLmgKICAqIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKaW5kZXggYzkzMDJhMS4uODdiZDMxMCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCkBAIC0xOTUsMTggKzE5NSwxOCBAQAogICAgICAqLwogCiBpbnQgZG1hc291bmRfY2F0Y2hSYWRpdXMgPSAwOwotTU9EVUxFX1BBUk0oZG1hc291bmRfY2F0Y2hSYWRpdXMsICJpIik7Cittb2R1bGVfcGFyYW0oZG1hc291bmRfY2F0Y2hSYWRpdXMsIGludCwgMCk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtV3JpdGVCdWZzID0gREVGQVVMVF9OX0JVRkZFUlM7Ci1NT0RVTEVfUEFSTShudW1Xcml0ZUJ1ZnMsICJpIik7Cittb2R1bGVfcGFyYW0obnVtV3JpdGVCdWZzLCBpbnQsIDApOwogc3RhdGljIHVuc2lnbmVkIGludCB3cml0ZUJ1ZlNpemUgPSBERUZBVUxUX0JVRkZfU0laRSA7CS8qIGluIGJ5dGVzICovCi1NT0RVTEVfUEFSTSh3cml0ZUJ1ZlNpemUsICJpIik7Cittb2R1bGVfcGFyYW0od3JpdGVCdWZTaXplLCBpbnQsIDApOwogCiAjaWZkZWYgSEFTX1JFQ09SRAogc3RhdGljIHVuc2lnbmVkIGludCBudW1SZWFkQnVmcyA9IERFRkFVTFRfTl9CVUZGRVJTOwotTU9EVUxFX1BBUk0obnVtUmVhZEJ1ZnMsICJpIik7Cittb2R1bGVfcGFyYW0obnVtUmVhZEJ1ZnMsIGludCwgMCk7CiBzdGF0aWMgdW5zaWduZWQgaW50IHJlYWRCdWZTaXplID0gREVGQVVMVF9CVUZGX1NJWkU7CS8qIGluIGJ5dGVzICovCi1NT0RVTEVfUEFSTShyZWFkQnVmU2l6ZSwgImkiKTsKK21vZHVsZV9wYXJhbShyZWFkQnVmU2l6ZSwgaW50LCAwKTsKICNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZW11MTBrMS9od2FjY2Vzcy5oIGIvc291bmQvb3NzL2VtdTEwazEvaHdhY2Nlc3MuaAppbmRleCAxMDQyMjNhLi44NWUyN2JkIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZW11MTBrMS9od2FjY2Vzcy5oCisrKyBiL3NvdW5kL29zcy9lbXUxMGsxL2h3YWNjZXNzLmgKQEAgLTE4MSw3ICsxODEsNyBAQAogCXN0cnVjdCBlbXUxMGsxX21wdW91dAkqbXB1b3V0OwogCXN0cnVjdCBlbXUxMGsxX21wdWluCSptcHVpbjsKIAotCXN0cnVjdCBzZW1hcGhvcmUJb3Blbl9zZW07CisJc3RydWN0IG11dGV4CQlvcGVuX3NlbTsKIAltb2RlX3QJCQlvcGVuX21vZGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJb3Blbl93YWl0OwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZW11MTBrMS9tYWluLmMgYi9zb3VuZC9vc3MvZW11MTBrMS9tYWluLmMKaW5kZXggMjMyNDFjYi4uMGNkNDRhNiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2VtdTEwazEvbWFpbi5jCisrKyBiL3NvdW5kL29zcy9lbXUxMGsxL21haW4uYwpAQCAtMTMyMCw3ICsxMzIwLDcgQEAKIAljYXJkLT5pc19hcHMgPSAoc3Vic3lzdmlkID09IEVNVV9BUFNfU1VCSUQpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOwotCWluaXRfTVVURVgoJmNhcmQtPm9wZW5fc2VtKTsKKwltdXRleF9pbml0KCZjYXJkLT5vcGVuX3NlbSk7CiAJY2FyZC0+b3Blbl9tb2RlID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5vcGVuX3dhaXQpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZW11MTBrMS9taWRpLmMgYi9zb3VuZC9vc3MvZW11MTBrMS9taWRpLmMKaW5kZXggYjQwYjVmOS4uOTU5YTk2NyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2VtdTEwazEvbWlkaS5jCisrKyBiL3NvdW5kL29zcy9lbXUxMGsxL21pZGkuYwpAQCAtMTEwLDIxICsxMTAsMjEgQEAKICNlbmRpZgogCiAJLyogV2FpdCBmb3IgZGV2aWNlIHRvIGJlY29tZSBmcmVlICovCi0JZG93bigmY2FyZC0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJmNhcmQtPm9wZW5fc2VtKTsKIAl3aGlsZSAoY2FyZC0+b3Blbl9tb2RlICYgKGZpbGUtPmZfbW9kZSA8PCBGTU9ERV9NSURJX1NISUZUKSkgewogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXVwKCZjYXJkLT5vcGVuX3NlbSk7CisJCQltdXRleF91bmxvY2soJmNhcmQtPm9wZW5fc2VtKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQl1cCgmY2FyZC0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJmNhcmQtPm9wZW5fc2VtKTsKIAkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmY2FyZC0+b3Blbl93YWl0KTsKIAogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCX0KIAotCQlkb3duKCZjYXJkLT5vcGVuX3NlbSk7CisJCW11dGV4X2xvY2soJmNhcmQtPm9wZW5fc2VtKTsKIAl9CiAKIAlpZiAoKG1pZGlfZGV2ID0gKHN0cnVjdCBlbXUxMGsxX21pZGlkZXZpY2UgKikga21hbGxvYyhzaXplb2YoKm1pZGlfZGV2KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCkBAIC0xODMsNyArMTgzLDcgQEAKIAogCWNhcmQtPm9wZW5fbW9kZSB8PSAoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpOwogCi0JdXAoJmNhcmQtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJmNhcmQtPm9wZW5fc2VtKTsKIAogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KQEAgLTIzNCw5ICsyMzQsOSBAQAogCiAJa2ZyZWUobWlkaV9kZXYpOwogCi0JZG93bigmY2FyZC0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJmNhcmQtPm9wZW5fc2VtKTsKIAljYXJkLT5vcGVuX21vZGUgJj0gfigoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpKTsKLQl1cCgmY2FyZC0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmY2FyZC0+b3Blbl9zZW0pOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2FyZC0+b3Blbl93YWl0KTsKIAogCXVubG9ja19rZXJuZWwoKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9lczEzNzAuYyBiL3NvdW5kL29zcy9lczEzNzAuYwppbmRleCBhZTU1YzUzLi4wOTRmNTY5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZXMxMzcwLmMKKysrIGIvc291bmQvb3NzL2VzMTM3MC5jCkBAIC0xNTcsNiArMTU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMzQ2LDcgKzM0Nyw3IEBACiAJdW5zaWduZWQgc2N0cmw7CiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAltb2RlX3Qgb3Blbl9tb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIApAQCAtMzkzLDcgKzM5NCw3IEBACiAJc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydDsKICNlbmRpZgogCi0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IG11dGV4IG11dGV4OwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMTU5LDcgKzExNjAsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmZmVyLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwotCWRvd24oJnMtPnNlbSk7CQorCW11dGV4X2xvY2soJnMtPm11dGV4KTsKIAlpZiAoIXMtPmRtYV9hZGMucmVhZHkgJiYgKHJldCA9IHByb2dfZG1hYnVmX2FkYyhzKSkpCiAJCWdvdG8gb3V0OwogICAgICAgICAKQEAgLTExODMsMTQgKzExODQsMTQgQEAKIAkJCQkJcmV0ID0gLUVBR0FJTjsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCXVwKCZzLT5zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAJCQlzY2hlZHVsZSgpOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQkJaWYgKCFyZXQpCiAJCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWRvd24oJnMtPnNlbSk7CisJCQltdXRleF9sb2NrKCZzLT5tdXRleCk7CiAJCQlpZiAocy0+ZG1hX2FkYy5tYXBwZWQpCiAJCQl7CiAJCQkJcmV0ID0gLUVOWElPOwpAQCAtMTIxNSw3ICsxMjE2LDcgQEAKIAkJCXN0YXJ0X2FkYyhzKTsKIAl9CiBvdXQ6Ci0JdXAoJnMtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZzLT5kbWFfYWRjLndhaXQsICZ3YWl0KTsKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJldHVybiByZXQ7CkBAIC0xMjM1LDcgKzEyMzYsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JZG93bigmcy0+c2VtKTsJCisJbXV0ZXhfbG9jaygmcy0+bXV0ZXgpOwogCWlmICghcy0+ZG1hX2RhYzIucmVhZHkgJiYgKHJldCA9IHByb2dfZG1hYnVmX2RhYzIocykpKQogCQlnb3RvIG91dDsKIAlyZXQgPSAwOwpAQCAtMTI2MywxNCArMTI2NCwxNCBAQAogCQkJCQlyZXQgPSAtRUFHQUlOOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCQkJdXAoJnMtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnMtPm11dGV4KTsKIAkJCXNjaGVkdWxlKCk7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQlpZiAoIXJldCkKIAkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJCWdvdG8gb3V0OwkKIAkJCX0KLQkJCWRvd24oJnMtPnNlbSk7CisJCQltdXRleF9sb2NrKCZzLT5tdXRleCk7CiAJCQlpZiAocy0+ZG1hX2RhYzIubWFwcGVkKQogCQkJewogCQkJcmV0ID0gLUVOWElPOwpAQCAtMTI5Niw3ICsxMjk3LDcgQEAKIAkJCXN0YXJ0X2RhYzIocyk7CiAJfQogb3V0OgotCXVwKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOwogICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZSgmcy0+ZG1hX2RhYzIud2FpdCwgJndhaXQpOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmV0dXJuIHJldDsKQEAgLTEzNDgsNyArMTM0OSw3IEBACiAKIAlWQUxJREFURV9TVEFURShzKTsKIAlsb2NrX2tlcm5lbCgpOwotCWRvd24oJnMtPnNlbSk7CisJbXV0ZXhfbG9jaygmcy0+bXV0ZXgpOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHsKIAkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9kYWMyKHMpKSAhPSAwKSB7CiAJCQlnb3RvIG91dDsKQEAgLTEzODAsNyArMTM4MSw3IEBACiAJfQogCWRiLT5tYXBwZWQgPSAxOwogb3V0OgotCXVwKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc1MiwyMSArMTc1MywyMSBAQAogICAgICAgIAlWQUxJREFURV9TVEFURShzKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3aGlsZSAocy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJaWYgKCEocy0+b3Blbl9tb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSkKQEAgLTE3OTMsOCArMTc5NCw4IEBACiAJb3V0bChzLT5jdHJsLCBzLT5pbytFUzEzNzBfUkVHX0NPTlRST0wpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlzLT5vcGVuX21vZGUgfD0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKLQlpbml0X01VVEVYKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmcy0+bXV0ZXgpOwogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIApAQCAtMTgwNiw3ICsxODA3LDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJZHJhaW5fZGFjMihzLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQlzdG9wX2RhYzIocyk7CiAJCXN5bmNocm9uaXplX2lycShzLT5pcnEpOwpAQCAtMTgxOCw3ICsxODE5LDcgQEAKIAl9CiAJcy0+b3Blbl9tb2RlICY9IH4oZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKTsKIAl3YWtlX3VwKCZzLT5vcGVuX3dhaXQpOwotCXVwKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTk4LDIxICsyMTk5LDIxIEBACiAJCXJldHVybiAtRUlOVkFMOwogICAgICAgIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3aGlsZSAocy0+b3Blbl9tb2RlICYgRk1PREVfREFDKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCXMtPmRtYV9kYWMxLm9zc2ZyYWdzaGlmdCA9IHMtPmRtYV9kYWMxLm9zc21heGZyYWdzID0gcy0+ZG1hX2RhYzEuc3ViZGl2aXNpb24gPSAwOwogCXMtPmRtYV9kYWMxLmVuYWJsZWQgPSAxOwpAQCAtMjIyNyw3ICsyMjI4LDcgQEAKIAlvdXRsKHMtPmN0cmwsIHMtPmlvK0VTMTM3MF9SRUdfQ09OVFJPTCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCXMtPm9wZW5fbW9kZSB8PSBGTU9ERV9EQUM7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIApAQCAtMjIzOCwxMiArMjIzOSwxMiBAQAogCVZBTElEQVRFX1NUQVRFKHMpOwogCWxvY2tfa2VybmVsKCk7CiAJZHJhaW5fZGFjMShzLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXN0b3BfZGFjMShzKTsKIAlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2RhYzEpOwogCXMtPm9wZW5fbW9kZSAmPSB+Rk1PREVfREFDOwogCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0MzAsMjEgKzI0MzEsMjEgQEAKICAgICAgICAJVkFMSURBVEVfU1RBVEUocyk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKIAkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2hpbGUgKHMtPm9wZW5fbW9kZSAmIChmaWxlLT5mX21vZGUgPDwgRk1PREVfTUlESV9TSElGVCkpIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl1cCgmcy0+b3Blbl9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXVwKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJZG93bigmcy0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIShzLT5vcGVuX21vZGUgJiAoRk1PREVfTUlESV9SRUFEIHwgRk1PREVfTUlESV9XUklURSkpKSB7CkBAIC0yNDY1LDcgKzI0NjYsNyBAQAogCWVzMTM3MF9oYW5kbGVfbWlkaShzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJcy0+b3Blbl9tb2RlIHw9IChmaWxlLT5mX21vZGUgPDwgRk1PREVfTUlESV9TSElGVCkgJiAoRk1PREVfTUlESV9SRUFEIHwgRk1PREVfTUlESV9XUklURSk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIApAQCAtMjQ5OSw3ICsyNTAwLDcgQEAKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPm1pZGkub3dhaXQsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAl9Ci0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXMtPm9wZW5fbW9kZSAmPSB+KChmaWxlLT5mX21vZGUgPDwgRk1PREVfTUlESV9TSElGVCkgJiAoRk1PREVfTUlESV9SRUFEfEZNT0RFX01JRElfV1JJVEUpKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCWlmICghKHMtPm9wZW5fbW9kZSAmIChGTU9ERV9NSURJX1JFQUQgfCBGTU9ERV9NSURJX1dSSVRFKSkpIHsKQEAgLTI1MDgsNyArMjUwOSw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAl3YWtlX3VwKCZzLT5vcGVuX3dhaXQpOwotCXVwKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjM4LDcgKzI2MzksNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPm9wZW5fd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+bWlkaS5pd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+bWlkaS5vd2FpdCk7Ci0JaW5pdF9NVVRFWCgmcy0+b3Blbl9zZW0pOworCW11dGV4X2luaXQoJnMtPm9wZW5fbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKIAlzLT5tYWdpYyA9IEVTMTM3MF9NQUdJQzsKIAlzLT5kZXYgPSBwY2lkZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZXMxMzcxLmMgYi9zb3VuZC9vc3MvZXMxMzcxLmMKaW5kZXggNWM2OTdmMTYuLjQ0MDBjODUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9lczEzNzEuYworKysgYi9zb3VuZC9vc3MvZXMxMzcxLmMKQEAgLTEyOSw2ICsxMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dhbWVwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC00MTksNyArNDIwLDcgQEAKIAl1bnNpZ25lZCBkYWMxcmF0ZSwgZGFjMnJhdGUsIGFkY3JhdGU7CiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAltb2RlX3Qgb3Blbl9tb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIApAQCAtNDYyLDcgKzQ2Myw3IEBACiAJc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydDsKICNlbmRpZgogCi0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IG11dGV4IHNlbTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTM0Niw3ICsxMzQ3LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZmZlciwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlkb3duKCZzLT5zZW0pOworCW11dGV4X2xvY2soJnMtPnNlbSk7CiAJaWYgKCFzLT5kbWFfYWRjLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQogCQlnb3RvIG91dDI7CiAJCkBAIC0xMzcwLDE0ICsxMzcxLDE0IEBACiAJCQkJCXJldCA9IC1FQUdBSU47CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQl1cCgmcy0+c2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+c2VtKTsKIAkJCXNjaGVkdWxlKCk7CiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCQlpZiAoIXJldCkKIAkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJCWdvdG8gb3V0MjsKIAkJCX0KLQkJCWRvd24oJnMtPnNlbSk7CisJCQltdXRleF9sb2NrKCZzLT5zZW0pOwogCQkJaWYgKHMtPmRtYV9hZGMubWFwcGVkKQogCQkJewogCQkJCXJldCA9IC1FTlhJTzsKQEAgLTE0MDIsNyArMTQwMyw3IEBACiAJCQlzdGFydF9hZGMocyk7CiAJfQogb3V0OgotCXVwKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2VtKTsKIG91dDI6CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPmRtYV9hZGMud2FpdCwgJndhaXQpOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CkBAIC0xNDIzLDcgKzE0MjQsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGNvdW50KSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JZG93bigmcy0+c2VtKTsJCisJbXV0ZXhfbG9jaygmcy0+c2VtKTsKIAlpZiAoIXMtPmRtYV9kYWMyLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9kYWMyKHMpKSkKIAkJZ290byBvdXQzOwogCXJldCA9IDA7CkBAIC0xNDUxLDE0ICsxNDUyLDE0IEBACiAJCQkJCXJldCA9IC1FQUdBSU47CiAJCQkJZ290byBvdXQ7CiAJCQl9CQotCQkJdXAoJnMtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnMtPnNlbSk7CiAJCQlzY2hlZHVsZSgpOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQkJaWYgKCFyZXQpCiAJCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlnb3RvIG91dDI7CiAJCQl9Ci0JCQlkb3duKCZzLT5zZW0pOworCQkJbXV0ZXhfbG9jaygmcy0+c2VtKTsKIAkJCWlmIChzLT5kbWFfZGFjMi5tYXBwZWQpCiAJCQl7CiAJCQkJcmV0ID0gLUVOWElPOwpAQCAtMTQ4NCw3ICsxNDg1LDcgQEAKIAkJCXN0YXJ0X2RhYzIocyk7CiAJfQogb3V0OgotCXVwKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+c2VtKTsKIG91dDI6CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPmRtYV9kYWMyLndhaXQsICZ3YWl0KTsKIG91dDM6CQpAQCAtMTUzOCw3ICsxNTM5LDcgQEAKIAogCVZBTElEQVRFX1NUQVRFKHMpOwogCWxvY2tfa2VybmVsKCk7Ci0JZG93bigmcy0+c2VtKTsKKwltdXRleF9sb2NrKCZzLT5zZW0pOwogCQogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpIHsKIAkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9kYWMyKHMpKSAhPSAwKSB7CkBAIC0xNTcxLDcgKzE1NzIsNyBAQAogCX0KIAlkYi0+bWFwcGVkID0gMTsKIG91dDoKLQl1cCgmcy0+c2VtKTsKKwltdXRleF91bmxvY2soJnMtPnNlbSk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xOTM4LDIxICsxOTM5LDIxIEBACiAgICAgICAgCVZBTElEQVRFX1NUQVRFKHMpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CiAJLyogd2FpdCBmb3IgZGV2aWNlIHRvIGJlY29tZSBmcmVlICovCi0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdoaWxlIChzLT5vcGVuX21vZGUgJiBmaWxlLT5mX21vZGUpIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl1cCgmcy0+b3Blbl9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXVwKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJZG93bigmcy0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl9CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJcy0+ZG1hX2FkYy5vc3NmcmFnc2hpZnQgPSBzLT5kbWFfYWRjLm9zc21heGZyYWdzID0gcy0+ZG1hX2FkYy5zdWJkaXZpc2lvbiA9IDA7CkBAIC0xOTgyLDggKzE5ODMsOCBAQAogCW91dGwocy0+c2N0cmwsIHMtPmlvK0VTMTM3MV9SRUdfU0VSSUFMX0NPTlRST0wpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlzLT5vcGVuX21vZGUgfD0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKLQlpbml0X01VVEVYKCZzLT5zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmcy0+c2VtKTsKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKQEAgLTE5OTUsNyArMTk5Niw3IEBACiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCiAJCWRyYWluX2RhYzIocywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJc3RvcF9kYWMyKHMpOwogCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2RhYzIpOwpAQCAtMjAwNSw3ICsyMDA2LDcgQEAKIAkJZGVhbGxvY19kbWFidWYocywgJnMtPmRtYV9hZGMpOwogCX0KIAlzLT5vcGVuX21vZGUgJj0gfihmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpOwotCXVwKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3YWtlX3VwKCZzLT5vcGVuX3dhaXQpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKQEAgLTIzNzcsMjEgKzIzNzgsMjEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAgICAgICAgCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CiAJLyogd2FpdCBmb3IgZGV2aWNlIHRvIGJlY29tZSBmcmVlICovCi0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdoaWxlIChzLT5vcGVuX21vZGUgJiBGTU9ERV9EQUMpIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl1cCgmcy0+b3Blbl9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXVwKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJZG93bigmcy0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl9CiAJcy0+ZG1hX2RhYzEub3NzZnJhZ3NoaWZ0ID0gcy0+ZG1hX2RhYzEub3NzbWF4ZnJhZ3MgPSBzLT5kbWFfZGFjMS5zdWJkaXZpc2lvbiA9IDA7CiAJcy0+ZG1hX2RhYzEuZW5hYmxlZCA9IDE7CkBAIC0yNDA1LDcgKzI0MDYsNyBAQAogCW91dGwocy0+c2N0cmwsIHMtPmlvK0VTMTM3MV9SRUdfU0VSSUFMX0NPTlRST0wpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlzLT5vcGVuX21vZGUgfD0gRk1PREVfREFDOwotCXVwKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKQEAgLTI0MTYsMTEgKzI0MTcsMTEgQEAKIAlWQUxJREFURV9TVEFURShzKTsKIAlsb2NrX2tlcm5lbCgpOwogCWRyYWluX2RhYzEocywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlzdG9wX2RhYzEocyk7CiAJZGVhbGxvY19kbWFidWYocywgJnMtPmRtYV9kYWMxKTsKIAlzLT5vcGVuX21vZGUgJj0gfkZNT0RFX0RBQzsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CkBAIC0yNjA4LDIxICsyNjA5LDIxIEBACiAgICAgICAgCVZBTElEQVRFX1NUQVRFKHMpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CiAJLyogd2FpdCBmb3IgZGV2aWNlIHRvIGJlY29tZSBmcmVlICovCi0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdoaWxlIChzLT5vcGVuX21vZGUgJiAoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJaWYgKCEocy0+b3Blbl9tb2RlICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpKSkgewpAQCAtMjY0Myw3ICsyNjQ0LDcgQEAKIAllczEzNzFfaGFuZGxlX21pZGkocyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCXMtPm9wZW5fbW9kZSB8PSAoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpOwotCXVwKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKQEAgLTI2NzYsNyArMjY3Nyw3IEBACiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5taWRpLm93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJfQotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlzLT5vcGVuX21vZGUgJj0gfigoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpICYgKEZNT0RFX01JRElfUkVBRHxGTU9ERV9NSURJX1dSSVRFKSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIShzLT5vcGVuX21vZGUgJiAoRk1PREVfTUlESV9SRUFEIHwgRk1PREVfTUlESV9XUklURSkpKSB7CkBAIC0yNjg0LDcgKzI2ODUsNyBAQAogCQlvdXRsKHMtPmN0cmwsIHMtPmlvK0VTMTM3MV9SRUdfQ09OVFJPTCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CkBAIC0yODg0LDcgKzI4ODUsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPm9wZW5fd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+bWlkaS5pd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+bWlkaS5vd2FpdCk7Ci0JaW5pdF9NVVRFWCgmcy0+b3Blbl9zZW0pOworCW11dGV4X2luaXQoJnMtPm9wZW5fbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKIAlzLT5tYWdpYyA9IEVTMTM3MV9NQUdJQzsKIAlzLT5kZXYgPSBwY2lkZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZXNzc29sbzEuYyBiL3NvdW5kL29zcy9lc3Nzb2xvMS5jCmluZGV4IDg0OWI1OWYuLjc4ZDNlMjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9lc3Nzb2xvMS5jCisrKyBiL3NvdW5kL29zcy9lc3Nzb2xvMS5jCkBAIC0xMDUsNiArMTA1LDggQEAKICNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xOTEsNyArMTkzLDcgQEAKIAl1bnNpZ25lZCBlbmE7CiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAltb2RlX3Qgb3Blbl9tb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIApAQCAtMTU4MSw3ICsxNTgzLDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJZHJhaW5fZGFjKHMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCXN0b3BfZGFjKHMpOwogCQlvdXRiKDAsIHMtPmlvYmFzZSs2KTsgIC8qIGRpc2FibGUgRE1BICovCkBAIC0xNTk1LDcgKzE1OTcsNyBAQAogCX0KIAlzLT5vcGVuX21vZGUgJj0gfihGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpOwogCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MjQsMjEgKzE2MjYsMjEgQEAKICAgICAgICAJVkFMSURBVEVfU1RBVEUocyk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKIAkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2hpbGUgKHMtPm9wZW5fbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCXMtPmZtdCA9IEFGTVRfVTg7CiAJcy0+Y2hhbm5lbHMgPSAxOwpAQCAtMTY1MCw3ICsxNjUyLDcgQEAKIAlzLT5kbWFfZGFjLm9zc2ZyYWdzaGlmdCA9IHMtPmRtYV9kYWMub3NzbWF4ZnJhZ3MgPSBzLT5kbWFfZGFjLnN1YmRpdmlzaW9uID0gMDsKIAlzLT5kbWFfZGFjLmVuYWJsZWQgPSAxOwogCXMtPm9wZW5fbW9kZSB8PSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJcHJvZ19jb2RlYyhzKTsKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CkBAIC0xOTExLDIxICsxOTEzLDIxIEBACiAgICAgICAgCVZBTElEQVRFX1NUQVRFKHMpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CiAJLyogd2FpdCBmb3IgZGV2aWNlIHRvIGJlY29tZSBmcmVlICovCi0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdoaWxlIChzLT5vcGVuX21vZGUgJiAoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJaWYgKCEocy0+b3Blbl9tb2RlICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpKSkgewpAQCAtMTk1MSw3ICsxOTUzLDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCXMtPm9wZW5fbW9kZSB8PSAoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpOwotCXVwKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKQEAgLTE5ODUsNyArMTk4Nyw3IEBACiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5taWRpLm93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJfQotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlzLT5vcGVuX21vZGUgJj0gfigoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpICYgKEZNT0RFX01JRElfUkVBRHxGTU9ERV9NSURJX1dSSVRFKSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIShzLT5vcGVuX21vZGUgJiAoRk1PREVfTUlESV9SRUFEIHwgRk1PREVfTUlESV9XUklURSkpKSB7CkBAIC0xOTk0LDcgKzE5OTYsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQpAQCAtMjEzMiwyNCArMjEzNCwyNCBAQAogICAgICAgIAlWQUxJREFURV9TVEFURShzKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3aGlsZSAocy0+b3Blbl9tb2RlICYgRk1PREVfRE1GTSkgewogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXVwKCZzLT5vcGVuX3NlbSk7CisJCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCQlhZGRfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlkb3duKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHMtPnNiYmFzZSwgRk1TWU5USF9FWFRFTlQsICJFU1MgU29sbzEiKSkgewotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlwcmludGsoS0VSTl9FUlIgInNvbG8xOiBGTSBzeW50aCBpbyBwb3J0cyBpbiB1c2UsIG9wbDMgbG9hZGVkP1xuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtMjE2MSw3ICsyMTYzLDcgQEAKIAlvdXRiKDUsIHMtPnNiYmFzZSsyKTsKIAlvdXRiKDEsIHMtPnNiYmFzZSszKTsgIC8qIGVuYWJsZSBPUEwzICovCiAJcy0+b3Blbl9tb2RlIHw9IEZNT0RFX0RNRk07Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIApAQCAtMjE3Miw3ICsyMTc0LDcgQEAKIAogCVZBTElEQVRFX1NUQVRFKHMpOwogCWxvY2tfa2VybmVsKCk7Ci0JZG93bigmcy0+b3Blbl9zZW0pOworCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXMtPm9wZW5fbW9kZSAmPSB+Rk1PREVfRE1GTTsKIAlmb3IgKHJlZ2IgPSAweGIwOyByZWdiIDwgMHhiOTsgcmVnYisrKSB7CiAJCW91dGIocmVnYiwgcy0+c2JiYXNlKTsKQEAgLTIxODIsNyArMjE4NCw3IEBACiAJfQogCXJlbGVhc2VfcmVnaW9uKHMtPnNiYmFzZSwgRk1TWU5USF9FWFRFTlQpOwogCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNjIsNyArMjM2NCw3IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+b3Blbl93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5taWRpLml3YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5taWRpLm93YWl0KTsKLQlpbml0X01VVEVYKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfaW5pdCgmcy0+b3Blbl9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwogCXMtPm1hZ2ljID0gU09MTzFfTUFHSUM7CiAJcy0+ZGV2ID0gcGNpZGV2OwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2ZvcnRlLmMgYi9zb3VuZC9vc3MvZm9ydGUuYwppbmRleCA4NDA2YmM5MC4uMDI5NGVlYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2ZvcnRlLmMKKysrIGIvc291bmQvb3NzL2ZvcnRlLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTE4NSw3ICsxODYsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWlvYmFzZTsKIAlpbnQJCQlpcnE7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlCW9wZW5fc2VtOyAJLyogRGV2aWNlIGFjY2VzcyAqLworCXN0cnVjdCBtdXRleAkJb3Blbl9tdXRleDsgCS8qIERldmljZSBhY2Nlc3MgKi8KIAlzcGlubG9ja190CQlsb2NrOwkJLyogU3RhdGUgKi8KIAogCXNwaW5sb2NrX3QJCWFjOTdfbG9jazsKQEAgLTEyNDIsMTMgKzEyNDMsMTMgQEAKIAlzdHJ1Y3QgZm9ydGVfY2hpcCAqY2hpcCA9IGZvcnRlOyAvKiBGSVhNRTogSEFDSyBGUk9NIEhFTEwhICovCiAKIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJaWYgKGRvd25fdHJ5bG9jayAoJmNoaXAtPm9wZW5fc2VtKSkgeworCQlpZiAoIW11dGV4X3RyeWxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpKSB7CiAJCQlEUFJJTlRLICgiJXM6IHJldHVybmluZyAtRUFHQUlOXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAl9CiAJZWxzZSB7Ci0JCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjaGlwLT5vcGVuX3NlbSkpIHsKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2hpcC0+b3Blbl9tdXRleCkpIHsKIAkJCURQUklOVEsgKCIlczogcmV0dXJuaW5nIC1FUkVTVEFSVFNZU1xuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCX0KQEAgLTEzMDIsNyArMTMwMyw3IEBACiAJCXNwaW5fdW5sb2NrX2lycSAoJmNoaXAtPmxvY2spOwogCX0KIAotCXVwICgmY2hpcC0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAxMSw3ICsyMDEyLDcgQEAKIAltZW1zZXQgKGNoaXAsIDAsIHNpemVvZiAoc3RydWN0IGZvcnRlX2NoaXApKTsKIAljaGlwLT5wY2lfZGV2ID0gcGNpX2RldjsKIAotCWluaXRfTVVURVgoJmNoaXAtPm9wZW5fc2VtKTsKKwltdXRleF9pbml0KCZjaGlwLT5vcGVuX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCAoJmNoaXAtPmxvY2spOwogCXNwaW5fbG9ja19pbml0ICgmY2hpcC0+YWM5N19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2hhbDIuYyBiL3NvdW5kL29zcy9oYWwyLmMKaW5kZXggYWZlOTdjNC4uZGQ0ZjU5ZCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2hhbDIuYworKysgYi9zb3VuZC9vc3MvaGFsMi5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zb3VuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zZ2kvaHBjMy5oPgpAQCAtOTIsNyArOTQsNyBAQAogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZG1hX3dhaXQ7CiAJc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOworCXN0cnVjdCBtdXRleCBzZW07CiAKIAlpbnQgdXNlY291bnQ7CQkJLyogcmVjb3JkaW5nIGFuZCBwbGF5YmFjayBhcmUKIAkJCQkJICogaW5kZXBlbmRlbnQgKi8KQEAgLTExNzgsNyArMTE4MCw3IEBACiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gMDsKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhZGMtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRjLT5zZW0pKQogCQlyZXR1cm4gLUVJTlRSOwogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQllcnIgPSBoYWwyX2dldF9idWZmZXIoaGFsMiwgYnVmZmVyLCBjb3VudCk7CkBAIC0xMjE3LDcgKzEyMTksNyBAQAogCQkJfQogCQl9IHdoaWxlIChjb3VudCA+IDAgJiYgZXJyID49IDApOwogCX0KLQl1cCgmYWRjLT5zZW0pOworCW11dGV4X3VubG9jaygmYWRjLT5zZW0pOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTEyMzIsNyArMTIzNCw3IEBACiAKIAlpZiAoIWNvdW50KQogCQlyZXR1cm4gMDsKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkYWMtPnNlbSkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGFjLT5zZW0pKQogCQlyZXR1cm4gLUVJTlRSOwogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQllcnIgPSBoYWwyX2FkZF9idWZmZXIoaGFsMiwgYnVmLCBjb3VudCk7CkBAIC0xMjcxLDcgKzEyNzMsNyBAQAogCQkJfQogCQl9IHdoaWxlIChjb3VudCA+IDAgJiYgZXJyID49IDApOwogCX0KLQl1cCgmZGFjLT5zZW0pOworCW11dGV4X3VubG9jaygmZGFjLT5zZW0pOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTEzNTYsMjAgKzEzNTgsMjAgQEAKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewogCQlzdHJ1Y3QgaGFsMl9jb2RlYyAqYWRjID0gJmhhbDItPmFkYzsKIAotCQlkb3duKCZhZGMtPnNlbSk7CisJCW11dGV4X2xvY2soJmFkYy0+c2VtKTsKIAkJaGFsMl9zdG9wX2FkYyhoYWwyKTsKIAkJaGFsMl9mcmVlX2FkY19kbWFidWYoYWRjKTsKIAkJYWRjLT51c2Vjb3VudC0tOwotCQl1cCgmYWRjLT5zZW0pOworCQltdXRleF91bmxvY2soJmFkYy0+c2VtKTsKIAl9CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCXN0cnVjdCBoYWwyX2NvZGVjICpkYWMgPSAmaGFsMi0+ZGFjOwogCi0JCWRvd24oJmRhYy0+c2VtKTsKKwkJbXV0ZXhfbG9jaygmZGFjLT5zZW0pOwogCQloYWwyX3N5bmNfZGFjKGhhbDIpOwogCQloYWwyX2ZyZWVfZGFjX2RtYWJ1ZihkYWMpOwogCQlkYWMtPnVzZWNvdW50LS07Ci0JCXVwKCZkYWMtPnNlbSk7CisJCW11dGV4X3VubG9jaygmZGFjLT5zZW0pOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTQwMCw3ICsxNDAyLDcgQEAKIAljb2RlYy0+cGJ1cy5wYnVzbnIgPSBpbmRleDsKIAljb2RlYy0+cGJ1cy5wYnVzID0gJmhwYzMtPnBiZG1hW2luZGV4XTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb2RlYy0+ZG1hX3dhaXQpOwotCWluaXRfTVVURVgoJmNvZGVjLT5zZW0pOworCW11dGV4X2luaXQoJmNvZGVjLT5zZW0pOwogCXNwaW5fbG9ja19pbml0KCZjb2RlYy0+bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9pODEwX2F1ZGlvLmMgYi9zb3VuZC9vc3MvaTgxMF9hdWRpby5jCmluZGV4IGFiYzI0MmEuLmRkMmI4NzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9pODEwX2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL2k4MTBfYXVkaW8uYwpAQCAtMTAwLDYgKzEwMCw4IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMDEiCkBAIC0zMzEsNyArMzMzLDcgQEAKIAlzdHJ1Y3QgaTgxMF9jYXJkICpjYXJkOwkvKiBDYXJkIGluZm8gKi8KIAogCS8qIHNpbmdsZSBvcGVuIGxvY2sgbWVjaGFuaXNtLCBvbmx5IHVzZWQgZm9yIHJlY29yZGluZyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW07CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwogCiAJLyogZmlsZSBtb2RlICovCkBAIC0yNTk3LDcgKzI1OTksNyBAQAogCXN0YXRlLT5jYXJkID0gY2FyZDsKIAlzdGF0ZS0+bWFnaWMgPSBJODEwX1NUQVRFX01BR0lDOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYWJ1Zi0+d2FpdCk7Ci0JaW5pdF9NVVRFWCgmc3RhdGUtPm9wZW5fc2VtKTsKKwltdXRleF9pbml0KCZzdGF0ZS0+b3Blbl9tdXRleCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc3RhdGU7CiAJZG1hYnVmLT50cmlnZ2VyID0gMDsKIApAQCAtMzIxMyw3ICszMjE1LDcgQEAKIAkJc3RhdGUtPmNhcmQgPSBjYXJkOwogCQlzdGF0ZS0+bWFnaWMgPSBJODEwX1NUQVRFX01BR0lDOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbWFidWYtPndhaXQpOwotCQlpbml0X01VVEVYKCZzdGF0ZS0+b3Blbl9zZW0pOworCQltdXRleF9pbml0KCZzdGF0ZS0+b3Blbl9tdXRleCk7CiAJCWRtYWJ1Zi0+Zm10ID0gSTgxMF9GTVRfU1RFUkVPIHwgSTgxMF9GTVRfMTZCSVQ7CiAJCWRtYWJ1Zi0+dHJpZ2dlciA9IFBDTV9FTkFCTEVfT1VUUFVUOwogCQlpODEwX3NldF9zcGRpZl9vdXRwdXQoc3RhdGUsIC0xLCAwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9pdGU4MTcyLmMgYi9zb3VuZC9vc3MvaXRlODE3Mi5jCmluZGV4IDhmZDJmOWEuLjAwYWMxYzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9pdGU4MTcyLmMKKysrIGIvc291bmQvb3NzL2l0ZTgxNzIuYwpAQCAtNzEsNiArNzEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYWM5N19jb2RlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTMwNCw3ICszMDYsNyBAQAogCXVuc2lnbmVkIGRhY3JhdGUsIGFkY3JhdGU7CiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAltb2RlX3Qgb3Blbl9tb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIApAQCAtMTgwMSwyMSArMTgwMywyMSBAQAogCX0KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3aGlsZSAocy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKQEAgLTE4NTAsNyArMTg1Miw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCiAJcy0+b3Blbl9tb2RlIHw9IChmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKSk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIApAQCAtMTg2NCw3ICsxODY2LDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJZHJhaW5fZGFjKHMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCXN0b3BfZGFjKHMpOwogCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2RhYyk7CkBAIC0xODc0LDcgKzE4NzYsNyBAQAogCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2FkYyk7CiAJfQogCXMtPm9wZW5fbW9kZSAmPSAoKH5maWxlLT5mX21vZGUpICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CkBAIC0xOTY2LDkgKzE5NjgsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRldmluZGV4OwogCi1NT0RVTEVfUEFSTShzcGRpZiwgIjEtIiBfX01PRFVMRV9TVFJJTkcoTlJfREVWSUNFKSAiaSIpOworbW9kdWxlX3BhcmFtX2FycmF5KHNwZGlmLCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhzcGRpZiwgImlmIDEgdGhlIFMvUERJRiBkaWdpdGFsIG91dHB1dCBpcyBlbmFibGVkIik7Ci1NT0RVTEVfUEFSTShpMnNfZm10LCAiMS0iIF9fTU9EVUxFX1NUUklORyhOUl9ERVZJQ0UpICJpIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaTJzX2ZtdCwgaW50LCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaTJzX2ZtdCwgInRoZSBmb3JtYXQgb2YgSTJTIik7CiAKIE1PRFVMRV9BVVRIT1IoIk1vbnRhIFZpc3RhIFNvZnR3YXJlLCBzdGV2ZWxAbXZpc3RhLmNvbSIpOwpAQCAtMTk5Nyw3ICsxOTk5LDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5kbWFfYWRjLndhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9kYWMud2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+b3Blbl93YWl0KTsKLQlpbml0X01VVEVYKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfaW5pdCgmcy0+b3Blbl9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwogCXMtPmRldiA9IHBjaWRldjsKIAlzLT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL21hZXN0cm8uYyBiL3NvdW5kL29zcy9tYWVzdHJvLmMKaW5kZXggZDRiNTY5YS4uZTY0N2YyZiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21hZXN0cm8uYworKysgYi9zb3VuZC9vc3MvbWFlc3Ryby5jCkBAIC0yMjMsNiArMjIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogCiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CkBAIC0zOTcsNyArMzk5LDcgQEAKIAkvKiB0aGlzIGxvY2tzIGFyb3VuZCB0aGUgb3NzIHN0YXRlIGluIHRoZSBkcml2ZXIgKi8KIAlzcGlubG9ja190IGxvY2s7CiAJLyogb25seSBsZXQgMSBiZSBvcGVuaW5nIGF0IGEgdGltZSAqLwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW07CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwogCW1vZGVfdCBvcGVuX21vZGU7CiAKQEAgLTMwMjAsMjYgKzMwMjIsMjYgQEAKICAgICAgICAJVkFMSURBVEVfU1RBVEUocyk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKIAkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2hpbGUgKHMtPm9wZW5fbW9kZSAmIGZpbGUtPmZfbW9kZSkgewogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXVwKCZzLT5vcGVuX3NlbSk7CisJCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQkJcmV0dXJuIC1FV09VTERCTE9DSzsKIAkJfQotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZzLT5vcGVuX3dhaXQpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlkb3duKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCX0KIAogCS8qIHVuZGVyIHNlbWFwaG9yZS4uICovCiAJaWYgKChzLT5jYXJkLT5kbWFwYWdlcz09TlVMTCkgJiYgYWxsb2NhdGVfYnVmZmVycyhzKSkgewotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvKiB3ZSdyZSBjb3ZlcmVkIGJ5IHRoZSBvcGVuX3NlbSAqLworCS8qIHdlJ3JlIGNvdmVyZWQgYnkgdGhlIG9wZW5fbXV0ZXggKi8KIAlpZiggISBzLT5jYXJkLT5kc3BzX29wZW4gKSAgewogCQltYWVzdHJvX3Bvd2VyKHMtPmNhcmQsQUNQSV9EMCk7CiAJCXN0YXJ0X2JvYihzKTsKQEAgLTMwNzYsNyArMzA3OCw3IEBACiAJc2V0X2ZtdChzLCBmbXRtLCBmbXRzKTsKIAlzLT5vcGVuX21vZGUgfD0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7CiAKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCkBAIC0zMDg5LDcgKzMwOTEsNyBAQAogCWxvY2tfa2VybmVsKCk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQlkcmFpbl9kYWMocywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJc3RvcF9kYWMocyk7CiAJfQpAQCAtMzA5OCw3ICszMTAwLDcgQEAKIAl9CiAJCQogCXMtPm9wZW5fbW9kZSAmPSAofmZpbGUtPmZfbW9kZSkgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSk7Ci0JLyogd2UncmUgY292ZXJlZCBieSB0aGUgb3Blbl9zZW0gKi8KKwkvKiB3ZSdyZSBjb3ZlcmVkIGJ5IHRoZSBvcGVuX211dGV4ICovCiAJTV9wcmludGsoIm1hZXN0cm86ICVkIGRzcHMgbm93IGFsaXZlXG4iLHMtPmNhcmQtPmRzcHNfb3Blbi0xKTsKIAlpZiggLS1zLT5jYXJkLT5kc3BzX29wZW4gPD0gMCkgewogCQlzLT5jYXJkLT5kc3BzX29wZW4gPSAwOwpAQCAtMzEwNiw3ICszMTA4LDcgQEAKIAkJZnJlZV9idWZmZXJzKHMpOwogCQltYWVzdHJvX3Bvd2VyKHMtPmNhcmQsQUNQSV9EMik7CiAJfQotCXVwKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3YWtlX3VwKCZzLT5vcGVuX3dhaXQpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKQEAgLTM0NjYsNyArMzQ2OCw3IEBACiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9kYWMud2FpdCk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPm9wZW5fd2FpdCk7CiAJCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKLQkJaW5pdF9NVVRFWCgmcy0+b3Blbl9zZW0pOworCQltdXRleF9pbml0KCZzLT5vcGVuX211dGV4KTsKIAkJcy0+bWFnaWMgPSBFU1NfU1RBVEVfTUFHSUM7CiAJCQogCQlzLT5hcHVbMF0gPSA2Kmk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvbWFlc3RybzMuYyBiL3NvdW5kL29zcy9tYWVzdHJvMy5jCmluZGV4IGYzZGVjNzAuLjY2MDQ0YWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9tYWVzdHJvMy5jCisrKyBiL3NvdW5kL29zcy9tYWVzdHJvMy5jCkBAIC0xNDQsNiArMTQ0LDggQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpAQCAtMjA1LDcgKzIwNyw3IEBACiAJCXdoZW4gaXJxaGFuZGxlciB1c2VzIHMtPmxvY2sKIAkJYW5kIG0zX2Fzc3BfcmVhZCB1c2VzIGNhcmQtPmxvY2sgPwogCQkqLwotICAgIHN0cnVjdCBzZW1hcGhvcmUgb3Blbl9zZW07CisgICAgc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwogICAgIG1vZGVfdCBvcGVuX21vZGU7CiAKQEAgLTIwMTMsMTcgKzIwMTUsMTcgQEAKICAgICBmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCiAgICAgLyogd2FpdCBmb3IgZGV2aWNlIHRvIGJlY29tZSBmcmVlICovCi0gICAgZG93bigmcy0+b3Blbl9zZW0pOworICAgIG11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogICAgIHdoaWxlIChzLT5vcGVuX21vZGUgJiBmaWxlLT5mX21vZGUpIHsKICAgICAgICAgaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0gICAgICAgICAgICB1cCgmcy0+b3Blbl9zZW0pOworICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKICAgICAgICAgICAgIHJldHVybiAtRVdPVUxEQkxPQ0s7CiAgICAgICAgIH0KLSAgICAgICAgdXAoJnMtPm9wZW5fc2VtKTsKKyAgICAgICAgbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKICAgICAgICAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcy0+b3Blbl93YWl0KTsKICAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogICAgICAgICAgICAgcmV0dXJuIC1FUkVTVEFSVFNZUzsKLSAgICAgICAgZG93bigmcy0+b3Blbl9zZW0pOworICAgICAgICBtdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKICAgICB9CiAgICAgCiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmMtPmxvY2ssIGZsYWdzKTsKQEAgLTIwNDcsNyArMjA0OSw3IEBACiAgICAgc2V0X2ZtdChzLCBmbXRtLCBmbXRzKTsKICAgICBzLT5vcGVuX21vZGUgfD0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7CiAKLSAgICB1cCgmcy0+b3Blbl9zZW0pOworICAgIG11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+bG9jaywgZmxhZ3MpOwogICAgIHJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KQEAgLTIwNjIsNyArMjA2NCw3IEBACiAgICAgaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogICAgICAgICBkcmFpbl9kYWMocywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogCi0gICAgZG93bigmcy0+b3Blbl9zZW0pOworICAgIG11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKICAgICBpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKQEAgLTIwODMsNyArMjA4NSw3IEBACiAgICAgcy0+b3Blbl9tb2RlICY9ICh+ZmlsZS0+Zl9tb2RlKSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKIAogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLSAgICB1cCgmcy0+b3Blbl9zZW0pOworICAgIG11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAgICAgd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKIAogICAgIHJldHVybiAwOwpAQCAtMjY3OSw3ICsyNjgxLDcgQEAKICAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+ZG1hX2FkYy53YWl0KTsKICAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+ZG1hX2RhYy53YWl0KTsKICAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+b3Blbl93YWl0KTsKLSAgICAgICAgaW5pdF9NVVRFWCgmKHMtPm9wZW5fc2VtKSk7CisgICAgICAgIG11dGV4X2luaXQoJihzLT5vcGVuX211dGV4KSk7CiAgICAgICAgIHMtPm1hZ2ljID0gTTNfU1RBVEVfTUFHSUM7CiAKICAgICAgICAgbTNfYXNzcF9jbGllbnRfaW5pdChzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9uZWNfdnJjNTQ3Ny5jIGIvc291bmQvb3NzL25lY192cmM1NDc3LmMKaW5kZXggZmJiOTE3MC4uMjFjMTk1NGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9uZWNfdnJjNTQ3Ny5jCisrKyBiL3NvdW5kL29zcy9uZWNfdnJjNTQ3Ny5jCkBAIC03OCw2ICs3OCw4IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xOTgsNyArMjAwLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBleHRlbmRlZF9zdGF0dXM7CiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAltb2RlX3Qgb3Blbl9tb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIApAQCAtMTYxNywyMiArMTYxOSwyMiBAQAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CiAKIAkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2hpbGUgKHMtPm9wZW5fbW9kZSAmIGZpbGUtPmZfbW9kZSkgewogCiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKQEAgLTE2NTksNyArMTY2MSw3IEBACiAgYmFpbG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTY3MSw3ICsxNjczLDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJZHJhaW5fZGFjKHMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCXN0b3BfZGFjKHMpOwogCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2RhYyk7CkBAIC0xNjgxLDcgKzE2ODMsNyBAQAogCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2FkYyk7CiAJfQogCXMtPm9wZW5fbW9kZSAmPSAofmZpbGUtPmZfbW9kZSkgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwpAQCAtMTg2Nyw3ICsxODY5LDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5kbWFfYWRjLndhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9kYWMud2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+b3Blbl93YWl0KTsKLQlpbml0X01VVEVYKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfaW5pdCgmcy0+b3Blbl9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwogCiAJcy0+ZGV2ID0gcGNpZGV2OwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3JtZTk2eHguYyBiL3NvdW5kL29zcy9ybWU5Nnh4LmMKaW5kZXggZmFhMGI3OS4uYTFlYzlkMSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3JtZTk2eHguYworKysgYi9zb3VuZC9vc3Mvcm1lOTZ4eC5jCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0zMjYsNyArMzI3LDcgQEAKIAogCQkvKiB3YWl0aW5nIGFuZCBsb2NraW5nICovCiAJCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci0JCXN0cnVjdCBzZW1hcGhvcmUgIG9wZW5fc2VtOworCQlzdHJ1Y3QgbXV0ZXggIG9wZW5fbXV0ZXg7CiAJCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIAogCX0gZG1hW1JNRTk2eHhfTUFYX0RFVlNdOyAKQEAgLTg0Miw3ICs4NDMsNyBAQAogCiBzdGF0aWMgaW50IHJtZTk2eHhfZG1hYnVmX2luaXQocm1lOTZ4eF9pbmZvICogcyxzdHJ1Y3QgZG1hYnVmKiBkbWEsaW50IGlvZmZzZXQsaW50IG9vZmZzZXQpIHsKIAotCWluaXRfTVVURVgoJmRtYS0+b3Blbl9zZW0pOworCW11dGV4X2luaXQoJmRtYS0+b3Blbl9tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hLT5vcGVuX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYS0+d2FpdCk7CiAJZG1hLT5zID0gczsgCkBAIC0xNDY5LDIxICsxNDcwLDIxIEBACiAJZG1hID0gJnMtPmRtYVtkZXZudW1dOwogCWYtPnByaXZhdGVfZGF0YSA9IGRtYTsKIAkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQlkb3duKCZkbWEtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZkbWEtPm9wZW5fbXV0ZXgpOwogCXdoaWxlIChkbWEtPm9wZW5fbW9kZSAmIGYtPmZfbW9kZSkgewogCQlpZiAoZi0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXVwKCZkbWEtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmZG1hLT5vcGVuX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYWRkX3dhaXRfcXVldWUoJmRtYS0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJdXAoJmRtYS0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJmRtYS0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZkbWEtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlkb3duKCZkbWEtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmZG1hLT5vcGVuX211dGV4KTsKIAl9CiAKIAlDT01NICAgICAgICAgICAgICAgICgiaGFyZHdhcmUgb3BlbiIpCkBAIC0xNDkyLDcgKzE0OTMsNyBAQAogCiAJZG1hLT5vcGVuX21vZGUgfD0gKGYtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKTsKIAlkbWEtPm9wZW5lZCA9IDE7Ci0JdXAoJmRtYS0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmZG1hLT5vcGVuX211dGV4KTsKIAogCURCRyhwcmludGsoImRldmljZSBudW0gJWQgb3BlbiBmaW5pc2hlZFxuIixkZXZudW0pKTsKIAlyZXR1cm4gMDsKQEAgLTE1MjQsNyArMTUyNSw3IEBACiAJfQogCiAJd2FrZV91cCgmZG1hLT5vcGVuX3dhaXQpOwotCXVwKCZkbWEtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJmRtYS0+b3Blbl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9taXhlci5jIGIvc291bmQvb3NzL3NiX21peGVyLmMKaW5kZXggZjU2ODk4Yy4uY2NiMjFkNCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NiX21peGVyLmMKKysrIGIvc291bmQvb3NzL3NiX21peGVyLmMKQEAgLTI3MywxNCArMjczLDE0IEBACiAJaW50IHJlZ29mZnM7CiAJdW5zaWduZWQgY2hhciB2YWw7CiAKKwlpZiAoKGRldiA8IDApIHx8IChkZXYgPj0gZGV2Yy0+aW9tYXBfc3opKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJlZ29mZnMgPSAoKmRldmMtPmlvbWFwKVtkZXZdW0xFRlRfQ0hOXS5yZWdubzsKIAogCWlmIChyZWdvZmZzID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChkZXYgPCAwKSB8fCAoZGV2ID49IGRldmMtPmlvbWFwX3N6KSkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0KIAl2YWwgPSBzYl9nZXRtaXhlcihkZXZjLCByZWdvZmZzKTsKIAljaGFuZ2VfYml0cyhkZXZjLCAmdmFsLCBkZXYsIExFRlRfQ0hOLCBsZWZ0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NlcXVlbmNlci5jIGIvc291bmQvb3NzL3NlcXVlbmNlci5jCmluZGV4IDY5ODYxNDIuLjM0N2NkNzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zZXF1ZW5jZXIuYworKysgYi9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMKQEAgLTcwOSwxMSArNzA5LDExIEBACiAKIHN0YXRpYyB2b2lkIHNlcV9zeXNleF9tZXNzYWdlKHVuc2lnbmVkIGNoYXIgKmV2ZW50X3JlYykKIHsKLQlpbnQgZGV2ID0gZXZlbnRfcmVjWzFdOworCXVuc2lnbmVkIGludCBkZXYgPSBldmVudF9yZWNbMV07CiAJaW50IGksIGwgPSAwOwogCXVuc2lnbmVkIGNoYXIgICpidWYgPSAmZXZlbnRfcmVjWzJdOwogCi0JaWYgKChpbnQpIGRldiA+IG1heF9zeW50aGRldikKKwlpZiAoZGV2ID4gbWF4X3N5bnRoZGV2KQogCQlyZXR1cm47CiAJaWYgKCEoc3ludGhfb3Blbl9tYXNrICYgKDEgPDwgZGV2KSkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zb25pY3ZpYmVzLmMgYi9zb3VuZC9vc3Mvc29uaWN2aWJlcy5jCmluZGV4IDcxYjA1ZTIuLjY5YTRiODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zb25pY3ZpYmVzLmMKKysrIGIvc291bmQvb3NzL3NvbmljdmliZXMuYwpAQCAtMTE2LDYgKzExNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2dhbWVwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTMyOCw3ICszMzAsNyBAQAogCXVuc2lnbmVkIGNoYXIgZm10LCBlbmFibGU7CiAKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAltb2RlX3Qgb3Blbl9tb2RlOwogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIApAQCAtMTkyMiwyMSArMTkyNCwyMSBAQAogICAgICAgIAlWQUxJREFURV9TVEFURShzKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3aGlsZSAocy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWFkZF93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQl1cCgmcy0+b3Blbl9zZW0pOworCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCWRvd24oJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJfQogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CiAJCWZtdG0gJj0gfigoU1ZfQ0ZNVF9TVEVSRU8gfCBTVl9DRk1UXzE2QklUKSA8PCBTVl9DRk1UX0NTSElGVCk7CkBAIC0xOTU2LDcgKzE5NTgsNyBAQAogCX0KIAlzZXRfZm10KHMsIGZtdG0sIGZtdHMpOwogCXMtPm9wZW5fbW9kZSB8PSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCkBAIC0xOTY4LDcgKzE5NzAsNyBAQAogCWxvY2tfa2VybmVsKCk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQlkcmFpbl9kYWMocywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJc3RvcF9kYWMocyk7CiAJCWRlYWxsb2NfZG1hYnVmKHMsICZzLT5kbWFfZGFjKTsKQEAgLTE5NzksNyArMTk4MSw3IEBACiAJfQogCXMtPm9wZW5fbW9kZSAmPSB+KGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKSk7CiAJd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQpAQCAtMjE2NywyMSArMjE2OSwyMSBAQAogICAgICAgIAlWQUxJREFURV9TVEFURShzKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwogCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCWRvd24oJnMtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl3aGlsZSAocy0+b3Blbl9tb2RlICYgKGZpbGUtPmZfbW9kZSA8PCBGTU9ERV9NSURJX1NISUZUKSkgewogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXVwKCZzLT5vcGVuX3NlbSk7CisJCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCQlhZGRfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJdXAoJnMtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlkb3duKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCWlmICghKHMtPm9wZW5fbW9kZSAmIChGTU9ERV9NSURJX1JFQUQgfCBGTU9ERV9NSURJX1dSSVRFKSkpIHsKQEAgLTIyMTAsNyArMjIxMiw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlzLT5vcGVuX21vZGUgfD0gKGZpbGUtPmZfbW9kZSA8PCBGTU9ERV9NSURJX1NISUZUKSAmIChGTU9ERV9NSURJX1JFQUQgfCBGTU9ERV9NSURJX1dSSVRFKTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCkBAIC0yMjQ4LDcgKzIyNTAsNyBAQAogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+bWlkaS5vd2FpdCwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCX0KLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJcy0+b3Blbl9tb2RlICY9IH4oKGZpbGUtPmZfbW9kZSA8PCBGTU9ERV9NSURJX1NISUZUKSAmIChGTU9ERV9NSURJX1JFQUR8Rk1PREVfTUlESV9XUklURSkpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJaWYgKCEocy0+b3Blbl9tb2RlICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpKSkgewpAQCAtMjI1Nyw3ICsyMjU5LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7Ci0JdXAoJnMtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzODgsMjEgKzIzOTAsMjEgQEAKICAgICAgICAJVkFMSURBVEVfU1RBVEUocyk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKIAkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJd2hpbGUgKHMtPm9wZW5fbW9kZSAmIEZNT0RFX0RNRk0pIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl1cCgmcy0+b3Blbl9zZW0pOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXVwKCZzLT5vcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJCXNjaGVkdWxlKCk7CiAJCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJZG93bigmcy0+b3Blbl9zZW0pOworCQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKIAl9CiAJLyogaW5pdCB0aGUgc3R1ZmYgKi8KIAlvdXRiKDEsIHMtPmlvc3ludGgpOwpAQCAtMjQxMiw3ICsyNDE0LDcgQEAKIAlvdXRiKDUsIHMtPmlvc3ludGgrMik7CiAJb3V0YigxLCBzLT5pb3N5bnRoKzMpOyAgLyogZW5hYmxlIE9QTDMgKi8KIAlzLT5vcGVuX21vZGUgfD0gRk1PREVfRE1GTTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCkBAIC0yNDIzLDcgKzI0MjUsNyBAQAogCiAJVkFMSURBVEVfU1RBVEUocyk7CiAJbG9ja19rZXJuZWwoKTsKLQlkb3duKCZzLT5vcGVuX3NlbSk7CisJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7CiAJcy0+b3Blbl9tb2RlICY9IH5GTU9ERV9ETUZNOwogCWZvciAocmVnYiA9IDB4YjA7IHJlZ2IgPCAweGI5OyByZWdiKyspIHsKIAkJb3V0YihyZWdiLCBzLT5pb3N5bnRoKTsKQEAgLTI0MzIsNyArMjQzNCw3IEBACiAJCW91dGIoMCwgcy0+aW9zeW50aCszKTsKIAl9CiAJd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKLQl1cCgmcy0+b3Blbl9zZW0pOworCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQpAQCAtMjU4Miw3ICsyNTg0LDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5vcGVuX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPm1pZGkuaXdhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPm1pZGkub3dhaXQpOwotCWluaXRfTVVURVgoJnMtPm9wZW5fc2VtKTsKKwltdXRleF9pbml0KCZzLT5vcGVuX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmcy0+bG9jayk7CiAJcy0+bWFnaWMgPSBTVl9NQUdJQzsKIAlzLT5kZXYgPSBwY2lkZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwppbmRleCBkZjRkMzc3Li5lYjVlYTMyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCisrKyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKQEAgLTc2LDYgKzc2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CkBAIC0xNTMsOCArMTU0LDggQEAKICNpZiBDU0RFQlVHCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjc19kZWJ1Z2xldmVsID0gNDsJLy8gbGV2ZWxzIHJhbmdlIGZyb20gMS05CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjc19kZWJ1Z21hc2sgPSBDU19JTklUIC8qfCBDU19JT0NUTCovOwotTU9EVUxFX1BBUk0oY3NfZGVidWdsZXZlbCwgImkiKTsKLU1PRFVMRV9QQVJNKGNzX2RlYnVnbWFzaywgImkiKTsKK21vZHVsZV9wYXJhbShjc19kZWJ1Z2xldmVsLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGNzX2RlYnVnbWFzaywgaW50LCAwKTsKICNlbmRpZgogI2RlZmluZSBDU19UUlVFIAkxCiAjZGVmaW5lIENTX0ZBTFNFIAkwCkBAIC0yOTEsOSArMjkyLDkgQEAKIAl1bnNpZ25lZCBjb252ZXJzaW9uOjE7CS8vIGNvbnZlcnNpb24gZnJvbSAxNiB0byA4IGJpdCBpbiBwcm9ncmVzcwogCXVuc2lnbmVkIGVuYTsKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtX2FkYzsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtX2RhYzsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9zZW1fYWRjOworCXN0cnVjdCBtdXRleCBvcGVuX3NlbV9kYWM7CiAJbW9kZV90IG9wZW5fbW9kZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0X2FkYzsKQEAgLTIzNTIsMjAgKzIzNTMsMjAgQEAKIAogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQlkcmFpbl9kYWMocywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCQlkb3duKCZzLT5vcGVuX3NlbV9kYWMpOworCQltdXRleF9sb2NrKCZzLT5vcGVuX3NlbV9kYWMpOwogCQlzdG9wX2RhYyhzKTsKIAkJZGVhbGxvY19kbWFidWYocywgJnMtPmRtYV9kYWMpOwogCQlzLT5vcGVuX21vZGUgJj0gfkZNT0RFX1dSSVRFOwotCQl1cCgmcy0+b3Blbl9zZW1fZGFjKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX3NlbV9kYWMpOwogCQl3YWtlX3VwKCZzLT5vcGVuX3dhaXRfZGFjKTsKIAl9CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJZHJhaW5fYWRjKHMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQkJZG93bigmcy0+b3Blbl9zZW1fYWRjKTsKKwkJbXV0ZXhfbG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAkJc3RvcF9hZGMocyk7CiAJCWRlYWxsb2NfZG1hYnVmKHMsICZzLT5kbWFfYWRjKTsKIAkJcy0+b3Blbl9tb2RlICY9IH5GTU9ERV9SRUFEOwotCQl1cCgmcy0+b3Blbl9zZW1fYWRjKTsKKwkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX3NlbV9hZGMpOwogCQl3YWtlX3VwKCZzLT5vcGVuX3dhaXRfYWRjKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yNDEzLDM3ICsyNDE0LDM3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgCi0JCWRvd24oJnMtPm9wZW5fc2VtX2RhYyk7CisJCW11dGV4X2xvY2soJnMtPm9wZW5fc2VtX2RhYyk7CiAJCXdoaWxlIChzLT5vcGVuX21vZGUgJiBGTU9ERV9XUklURSkgewogCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQkJdXAoJnMtPm9wZW5fc2VtX2RhYyk7CisJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX3NlbV9kYWMpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9Ci0JCQl1cCgmcy0+b3Blbl9zZW1fZGFjKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW1fZGFjKTsKIAkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnMtPm9wZW5fd2FpdF9kYWMpOwogCiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJvcGVuIC0gc2lnIHBlbmRpbmdcbiIpOwogCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlkb3duKCZzLT5vcGVuX3NlbV9kYWMpOworCQkJbXV0ZXhfbG9jaygmcy0+b3Blbl9zZW1fZGFjKTsKIAkJfQogCX0KIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQlkb3duKCZzLT5vcGVuX3NlbV9hZGMpOworCQltdXRleF9sb2NrKCZzLT5vcGVuX3NlbV9hZGMpOwogCQl3aGlsZSAocy0+b3Blbl9tb2RlICYgRk1PREVfUkVBRCkgewogCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQkJdXAoJnMtPm9wZW5fc2VtX2FkYyk7CisJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX3NlbV9hZGMpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9Ci0JCQl1cCgmcy0+b3Blbl9zZW1fYWRjKTsKKwkJCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnMtPm9wZW5fd2FpdF9hZGMpOwogCiAJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJvcGVuIC0gc2lnIHBlbmRpbmdcbiIpOwogCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlkb3duKCZzLT5vcGVuX3NlbV9hZGMpOworCQkJbXV0ZXhfbG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAkJfQogCX0KIAlzLT5vcGVuX21vZGUgfD0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7CkBAIC0yNDU2LDcgKzI0NTcsNyBAQAogCQlzLT5lbmEgJj0gfkZNT0RFX1JFQUQ7CiAJCXMtPmRtYV9hZGMub3NzZnJhZ3NoaWZ0ID0gcy0+ZG1hX2FkYy5vc3NtYXhmcmFncyA9CiAJCSAgICBzLT5kbWFfYWRjLnN1YmRpdmlzaW9uID0gMDsKLQkJdXAoJnMtPm9wZW5fc2VtX2FkYyk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW1fYWRjKTsKIAogCQlpZiAocHJvZ19kbWFidWZfYWRjKHMpKSB7CiAJCQlDU19EQkdPVVQoQ1NfT1BFTiB8IENTX0VSUk9SLCAyLCBwcmludGsoS0VSTl9FUlIKQEAgLTI0NzQsNyArMjQ3NSw3IEBACiAJCXMtPmVuYSAmPSB+Rk1PREVfV1JJVEU7CiAJCXMtPmRtYV9kYWMub3NzZnJhZ3NoaWZ0ID0gcy0+ZG1hX2RhYy5vc3NtYXhmcmFncyA9CiAJCSAgICBzLT5kbWFfZGFjLnN1YmRpdmlzaW9uID0gMDsKLQkJdXAoJnMtPm9wZW5fc2VtX2RhYyk7CisJCW11dGV4X3VubG9jaygmcy0+b3Blbl9zZW1fZGFjKTsKIAogCQlpZiAocHJvZ19kbWFidWZfZGFjKHMpKSB7CiAJCQlDU19EQkdPVVQoQ1NfT1BFTiB8IENTX0VSUk9SLCAyLCBwcmludGsoS0VSTl9FUlIKQEAgLTI2MzEsOCArMjYzMiw4IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+b3Blbl93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5vcGVuX3dhaXRfYWRjKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5vcGVuX3dhaXRfZGFjKTsKLQlpbml0X01VVEVYKCZzLT5vcGVuX3NlbV9hZGMpOwotCWluaXRfTVVURVgoJnMtPm9wZW5fc2VtX2RhYyk7CisJbXV0ZXhfaW5pdCgmcy0+b3Blbl9zZW1fYWRjKTsKKwltdXRleF9pbml0KCZzLT5vcGVuX3NlbV9kYWMpOwogCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKIAogICAgICAgICBzLT5pcnEgPSBLX0lOVF9TRVJfMTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy90cmlkZW50LmMgYi9zb3VuZC9vc3MvdHJpZGVudC5jCmluZGV4IGEyMWM2NjMuLmU2MWE0NTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy90cmlkZW50LmMKKysrIGIvc291bmQvb3NzL3RyaWRlbnQuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAgKgogICoJTG9jayBvcmRlciAoaGlnaC0+bG93KQogICoJCWxvY2sJLQloYXJkd2FyZSBsb2NrCi0gKgkJb3Blbl9zZW0gLSAJZ3VhcmQgb3BlbnMKKyAqCQlvcGVuX211dGV4IC0gCWd1YXJkIG9wZW5zCiAgKgkJc2VtCS0JZ3VhcmQgZG1hYnVmLCB3cml0ZSByZS1lbnRyeSBldGMKICAqLwogCkBAIC0yMTYsNiArMjE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2dhbWVwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpAQCAtMzQ5LDcgKzM1MSw3IEBACiAJdW5zaWduZWQgY2hhbnNfbnVtOwogCXVuc2lnbmVkIGxvbmcgZm10X2ZsYWc7CiAJLyogR3VhcmQgYWdhaW5zdCBtbWFwL3dyaXRlL3JlYWQgcmFjZXMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggc2VtOwogCiB9OwogCkBAIC00MDIsNyArNDA0LDcgQEAKIAlzdHJ1Y3QgdHJpZGVudF9jYXJkICpuZXh0OwogCiAJLyogc2luZ2xlIG9wZW4gbG9jayBtZWNoYW5pc20sIG9ubHkgdXNlZCBmb3IgcmVjb3JkaW5nICovCi0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAogCS8qIFRoZSB0cmlkZW50IGhhcyBhIGNlcnRhaW4gYW1vdW50IG9mIGNyb3NzIGNoYW5uZWwgaW50ZXJhY3Rpb24KIAkgICBzbyB3ZSB1c2UgYSBzaW5nbGUgcGVyIGNhcmQgbG9jayAqLwpAQCAtMTg4MSw3ICsxODgzLDcgQEAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZmZlciwgY291bnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWRvd24oJnN0YXRlLT5zZW0pOworCW11dGV4X2xvY2soJnN0YXRlLT5zZW0pOwogCWlmICghZG1hYnVmLT5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfcmVjb3JkKHN0YXRlKSkpCiAJCWdvdG8gb3V0OwogCkBAIC0xOTEzLDcgKzE5MTUsNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCi0JCQl1cCgmc3RhdGUtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnN0YXRlLT5zZW0pOwogCQkJLyogTm8gbWF0dGVyIGhvdyBtdWNoIHNwYWNlIGxlZnQgaW4gdGhlIGJ1ZmZlciwgKi8gCiAJCQkvKiB3ZSBoYXZlIHRvIHdhaXQgdW50aWwgQ1NPID09IEVTTy8yIG9yIENTTyA9PSBFU08gKi8gCiAJCQkvKiB3aGVuIGFkZHJlc3MgZW5naW5lIGludGVycnVwdHMgKi8KQEAgLTE5NDAsNyArMTk0Miw3IEBACiAJCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCWRvd24oJnN0YXRlLT5zZW0pOworCQkJbXV0ZXhfbG9jaygmc3RhdGUtPnNlbSk7CiAJCQlpZiAoZG1hYnVmLT5tYXBwZWQpIHsKIAkJCQlpZiAoIXJldCkKIAkJCQkJcmV0ID0gLUVOWElPOwpAQCAtMTk2OCw3ICsxOTcwLDcgQEAKIAkJc3RhcnRfYWRjKHN0YXRlKTsKIAl9CiBvdXQ6Ci0JdXAoJnN0YXRlLT5zZW0pOworCW11dGV4X3VubG9jaygmc3RhdGUtPnNlbSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTk5Niw3ICsxOTk4LDcgQEAKIAkgKiAgICAgIEd1YXJkIGFnYWluc3QgYW4gbW1hcCBvciBpb2N0bCB3aGlsZSB3cml0aW5nCiAJICovCiAKLQlkb3duKCZzdGF0ZS0+c2VtKTsKKwltdXRleF9sb2NrKCZzdGF0ZS0+c2VtKTsKIAogCWlmIChkbWFidWYtPm1hcHBlZCkgewogCQlyZXQgPSAtRU5YSU87CkBAIC0yMDQ1LDcgKzIwNDcsNyBAQAogCQkJdG1vID0gKGRtYWJ1Zi0+ZG1hc2l6ZSAqIEhaKSAvIChkbWFidWYtPnJhdGUgKiAyKTsKIAkJCXRtbyA+Pj0gc2FtcGxlX3NoaWZ0W2RtYWJ1Zi0+Zm10XTsKIAkJCXVubG9ja19zZXRfZm10KHN0YXRlKTsKLQkJCXVwKCZzdGF0ZS0+c2VtKTsKKwkJCW11dGV4X3VubG9jaygmc3RhdGUtPnNlbSk7CiAKIAkJCS8qIFRoZXJlIGFyZSB0d28gc2l0dWF0aW9ucyB3aGVuIHNsZWVwX29uX3RpbWVvdXQgKi8gCiAJCQkvKiByZXR1cm5zLCBvbmUgaXMgd2hlbiB0aGUgaW50ZXJydXB0IGlzIHNlcnZpY2VkICovIApAQCAtMjA3Myw3ICsyMDc1LDcgQEAKIAkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwogCQkJCWdvdG8gb3V0X25vbG9jazsKIAkJCX0KLQkJCWRvd24oJnN0YXRlLT5zZW0pOworCQkJbXV0ZXhfbG9jaygmc3RhdGUtPnNlbSk7CiAJCQlpZiAoZG1hYnVmLT5tYXBwZWQpIHsKIAkJCQlpZiAoIXJldCkKIAkJCQkJcmV0ID0gLUVOWElPOwpAQCAtMjEzMSw3ICsyMTMzLDcgQEAKIAkJc3RhcnRfZGFjKHN0YXRlKTsKIAl9CiBvdXQ6Ci0JdXAoJnN0YXRlLT5zZW0pOworCW11dGV4X3VubG9jaygmc3RhdGUtPnNlbSk7CiBvdXRfbm9sb2NrOgogCXJldHVybiByZXQ7CiB9CkBAIC0yMTUyLDI0ICsyMTU0LDI0IEBACiAJICogICAgICBwcm9nX2RtYWJ1ZiBldmVudHMKIAkgKi8KIAotCWRvd24oJnN0YXRlLT5zZW0pOworCW11dGV4X2xvY2soJnN0YXRlLT5zZW0pOwogCiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCWlmICghZG1hYnVmLT5yZWFkeSAmJiBwcm9nX2RtYWJ1Zl9wbGF5YmFjayhzdGF0ZSkpIHsKLQkJCXVwKCZzdGF0ZS0+c2VtKTsKKwkJCW11dGV4X3VubG9jaygmc3RhdGUtPnNlbSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlwb2xsX3dhaXQoZmlsZSwgJmRtYWJ1Zi0+d2FpdCwgd2FpdCk7CiAJfQogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CiAJCWlmICghZG1hYnVmLT5yZWFkeSAmJiBwcm9nX2RtYWJ1Zl9yZWNvcmQoc3RhdGUpKSB7Ci0JCQl1cCgmc3RhdGUtPnNlbSk7CisJCQltdXRleF91bmxvY2soJnN0YXRlLT5zZW0pOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcG9sbF93YWl0KGZpbGUsICZkbWFidWYtPndhaXQsIHdhaXQpOwogCX0KIAotCXVwKCZzdGF0ZS0+c2VtKTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5zZW0pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN0YXRlLT5jYXJkLT5sb2NrLCBmbGFncyk7CiAJdHJpZGVudF91cGRhdGVfcHRyKHN0YXRlKTsKQEAgLTIyMDcsNyArMjIwOSw3IEBACiAJICogICAgICBhIHJlYWQgb3Igd3JpdGUgYWdhaW5zdCBhbiBtbWFwLgogCSAqLwogCi0JZG93bigmc3RhdGUtPnNlbSk7CisJbXV0ZXhfbG9jaygmc3RhdGUtPnNlbSk7CiAKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7CiAJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfcGxheWJhY2soc3RhdGUpKSAhPSAwKQpAQCAtMjIzMiw3ICsyMjM0LDcgQEAKIAlkbWFidWYtPm1hcHBlZCA9IDE7CiAJcmV0ID0gMDsKIG91dDoKLQl1cCgmc3RhdGUtPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+c2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDI5LDE1ICsyNDMxLDE1IEBACiAJCQkJCQkJdW5sb2NrX3NldF9mbXQoc3RhdGUpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQotCQkJCQkJZG93bigmc3RhdGUtPmNhcmQtPm9wZW5fc2VtKTsKKwkJCQkJCW11dGV4X2xvY2soJnN0YXRlLT5jYXJkLT5vcGVuX211dGV4KTsKIAkJCQkJCXJldCA9IGFsaV9hbGxvY2F0ZV9vdGhlcl9zdGF0ZXNfcmVzb3VyY2VzKHN0YXRlLCA2KTsKIAkJCQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJCQkJdXAoJnN0YXRlLT5jYXJkLT5vcGVuX3NlbSk7CisJCQkJCQkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+Y2FyZC0+b3Blbl9tdXRleCk7CiAJCQkJCQkJdW5sb2NrX3NldF9mbXQoc3RhdGUpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQkJc3RhdGUtPmNhcmQtPm11bHRpX2NoYW5uZWxfdXNlX2NvdW50Kys7Ci0JCQkJCQl1cCgmc3RhdGUtPmNhcmQtPm9wZW5fc2VtKTsKKwkJCQkJCW11dGV4X3VubG9jaygmc3RhdGUtPmNhcmQtPm9wZW5fbXV0ZXgpOwogCQkJCQl9IGVsc2UKIAkJCQkJCXZhbCA9IDI7CS8qeWllbGQgdG8gMi1jaGFubmVscyAqLwogCQkJCX0gZWxzZQpAQCAtMjcyNywxMSArMjcyOSwxMSBAQAogCiAJLyogZmluZCBhbiBhdmFpbGFibGUgdmlydHVhbCBjaGFubmVsIChpbnN0YW5jZSBvZiAvZGV2L2RzcCkgKi8KIAl3aGlsZSAoY2FyZCAhPSBOVUxMKSB7Ci0JCWRvd24oJmNhcmQtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfbG9jaygmY2FyZC0+b3Blbl9tdXRleCk7CiAJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CiAJCQkvKiBTa2lwIG9wZW5zIG9uIGNhcmRzIHRoYXQgYXJlIGluIDYgY2hhbm5lbCBtb2RlICovCiAJCQlpZiAoY2FyZC0+bXVsdGlfY2hhbm5lbF91c2VfY291bnQgPiAwKSB7Ci0JCQkJdXAoJmNhcmQtPm9wZW5fc2VtKTsKKwkJCQltdXRleF91bmxvY2soJmNhcmQtPm9wZW5fbXV0ZXgpOwogCQkJCWNhcmQgPSBjYXJkLT5uZXh0OwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMjc0MCwxNiArMjc0MiwxNiBAQAogCQkJaWYgKGNhcmQtPnN0YXRlc1tpXSA9PSBOVUxMKSB7CiAJCQkJc3RhdGUgPSBjYXJkLT5zdGF0ZXNbaV0gPSBrbWFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoc3RhdGUgPT0gTlVMTCkgewotCQkJCQl1cCgmY2FyZC0+b3Blbl9zZW0pOworCQkJCQltdXRleF91bmxvY2soJmNhcmQtPm9wZW5fbXV0ZXgpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CiAJCQkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7Ci0JCQkJaW5pdF9NVVRFWCgmc3RhdGUtPnNlbSk7CisJCQkJbXV0ZXhfaW5pdCgmc3RhdGUtPnNlbSk7CiAJCQkJZG1hYnVmID0gJnN0YXRlLT5kbWFidWY7CiAJCQkJZ290byBmb3VuZF92aXJ0OwogCQkJfQogCQl9Ci0JCXVwKCZjYXJkLT5vcGVuX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FyZC0+b3Blbl9tdXRleCk7CiAJCWNhcmQgPSBjYXJkLT5uZXh0OwogCX0KIAkvKiBubyBtb3JlIHZpcnR1YWwgY2hhbm5lbCBhdmFpYWJsZSAqLwpAQCAtMjgxNiw3ICsyODE4LDcgQEAKIAl9CiAKIAlzdGF0ZS0+b3Blbl9tb2RlIHw9IGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpOwotCXVwKCZjYXJkLT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5vcGVuX211dGV4KTsKIAogCXByX2RlYnVnKCJ0cmlkZW50OiBvcGVuIHZpcnR1YWwgY2hhbm5lbCAlZCwgaGFyZCBjaGFubmVsICVkXG4iLAogCQkgc3RhdGUtPnZpcnQsIGRtYWJ1Zi0+Y2hhbm5lbC0+bnVtKTsKQEAgLTI4NDUsNyArMjg0Nyw3IEBACiAJCSBzdGF0ZS0+dmlydCwgZG1hYnVmLT5jaGFubmVsLT5udW0pOwogCiAJLyogc3RvcCBETUEgc3RhdGUgbWFjaGluZSBhbmQgZnJlZSBETUEgYnVmZmVycy9jaGFubmVscyAqLwotCWRvd24oJmNhcmQtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZjYXJkLT5vcGVuX211dGV4KTsKIAogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQlzdG9wX2RhYyhzdGF0ZSk7CkBAIC0yODc4LDggKzI4ODAsOCBAQAogCWNhcmQtPnN0YXRlc1tzdGF0ZS0+dmlydF0gPSBOVUxMOwogCWtmcmVlKHN0YXRlKTsKIAotCS8qIHdlJ3JlIGNvdmVyZWQgYnkgdGhlIG9wZW5fc2VtICovCi0JdXAoJmNhcmQtPm9wZW5fc2VtKTsKKwkvKiB3ZSdyZSBjb3ZlcmVkIGJ5IHRoZSBvcGVuX211dGV4ICovCisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5vcGVuX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQwNSw3ICs0NDA3LDcgQEAKIAljYXJkLT5iYW5rc1tCQU5LX0JdLmFkZHJlc3NlcyA9ICZiYW5rX2JfYWRkcnM7CiAJY2FyZC0+YmFua3NbQkFOS19CXS5iaXRtYXAgPSAwVUw7CiAKLQlpbml0X01VVEVYKCZjYXJkLT5vcGVuX3NlbSk7CisJbXV0ZXhfaW5pdCgmY2FyZC0+b3Blbl9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOwogCWluaXRfdGltZXIoJmNhcmQtPnRpbWVyKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3ZpYTgyY3h4eF9hdWRpby5jIGIvc291bmQvb3NzL3ZpYTgyY3h4eF9hdWRpby5jCmluZGV4IDgzZWRkYTkuLjFhOTIxZWU3IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdmlhODJjeHh4X2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL3ZpYTgyY3h4eF9hdWRpby5jCkBAIC0zOCw3ICszOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSAic291bmRfY29uZmlnLmgiCiAjaW5jbHVkZSAiZGV2X3RhYmxlLmgiCiAjaW5jbHVkZSAibXB1NDAxLmgiCkBAIC0zMTEsOCArMzEyLDggQEAKIAkKIAlpbnQgbWl4ZXJfdm9sOwkJLyogODIzMy8zNSB2b2x1bWUgIC0gbm90IHlldCBpbXBsZW1lbnRlZCAqLwogCi0Jc3RydWN0IHNlbWFwaG9yZSBzeXNjYWxsX3NlbTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOworCXN0cnVjdCBtdXRleCBzeXNjYWxsX211dGV4OworCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwogCiAJLyogVGhlIDgyMzMvODIzNSBoYXZlIDQgRFggYXVkaW8gY2hhbm5lbHMsIHR3byByZWNvcmQgYW5kCiAJICAgb25lIHNpeCBjaGFubmVsIG91dC4gV2UgYmluZCBjaF9pbiB0byBEWCAxLCBjaF9vdXQgdG8gbXVsdGljaGFubmVsCkBAIC01MDUsMTAgKzUwNiwxMCBAQAogCW5vbmJsb2NrID0gMDsKIAogCWlmIChub25ibG9jaykgewotCQlpZiAoZG93bl90cnlsb2NrICgmY2FyZC0+c3lzY2FsbF9zZW0pKQorCQlpZiAoIW11dGV4X3RyeWxvY2soJmNhcmQtPnN5c2NhbGxfbXV0ZXgpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJfSBlbHNlIHsKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmNhcmQtPnN5c2NhbGxfc2VtKSkKKwkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY2FyZC0+c3lzY2FsbF9tdXRleCkpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCX0KIApAQCAtMTYwOSw3ICsxNjEwLDcgQEAKICNlbmRpZgogCXJjID0gY29kZWMtPm1peGVyX2lvY3RsKGNvZGVjLCBjbWQsIGFyZyk7CiAKLQl1cCAoJmNhcmQtPnN5c2NhbGxfc2VtKTsKKwltdXRleF91bmxvY2soJmNhcmQtPnN5c2NhbGxfbXV0ZXgpOwogCiBvdXQ6CiAJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgcmMpOwpAQCAtMjIyOCw3ICsyMjI5LDcgQEAKIAlpZiAod3IpCiAJCWNhcmQtPmNoX291dC5pc19tYXBwZWQgPSAxOwogCi0JdXAgKCZjYXJkLT5zeXNjYWxsX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5zeXNjYWxsX211dGV4KTsKIAlyYyA9IDA7CiAKIG91dDoKQEAgLTIyNTYsNyArMjI1Nyw3IEBACiAJLyogVGhvbWFzIFNhaWxlcjoKIAkgKiBCdXQgYWxzbyB0byBvdXJzZWx2ZXMsIHJlbGVhc2Ugc2VtYXBob3JlIGlmIHdlIGRvIHNvICovCiAJaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCXVwKCZjYXJkLT5zeXNjYWxsX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FyZC0+c3lzY2FsbF9tdXRleCk7CiAJCXNjaGVkdWxlICgpOwogCQlyZXQgPSB2aWFfc3lzY2FsbF9kb3duIChjYXJkLCBub25ibG9jayk7CiAJCWlmIChyZXQpCkBAIC0yMjg2LDcgKzIyODcsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQl1cCgmY2FyZC0+c3lzY2FsbF9zZW0pOworCQltdXRleF91bmxvY2soJmNhcmQtPnN5c2NhbGxfbXV0ZXgpOwogCiAJCURQUklOVEsgKCJTbGVlcGluZyBvbiBibG9jayAlZFxuIiwgbik7CiAJCXNjaGVkdWxlKCk7CkBAIC0yNDAyLDcgKzI0MDMsNyBAQAogCXJjID0gdmlhX2RzcF9kb19yZWFkIChjYXJkLCBidWZmZXIsIGNvdW50LCBub25ibG9jayk7CiAKIG91dF91cDoKLQl1cCAoJmNhcmQtPnN5c2NhbGxfc2VtKTsKKwltdXRleF91bmxvY2soJmNhcmQtPnN5c2NhbGxfbXV0ZXgpOwogb3V0OgogCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcgJWxkXG4iLChsb25nKSByYyk7CiAJcmV0dXJuIHJjOwpAQCAtMjQyNiw3ICsyNDI3LDcgQEAKIAkvKiBUaG9tYXMgU2FpbGVyOgogCSAqIEJ1dCBhbHNvIHRvIG91cnNlbHZlcywgcmVsZWFzZSBzZW1hcGhvcmUgaWYgd2UgZG8gc28gKi8KIAlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJdXAoJmNhcmQtPnN5c2NhbGxfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5zeXNjYWxsX211dGV4KTsKIAkJc2NoZWR1bGUgKCk7CiAJCXJldCA9IHZpYV9zeXNjYWxsX2Rvd24gKGNhcmQsIG5vbmJsb2NrKTsKIAkJaWYgKHJldCkKQEAgLTI0NTYsNyArMjQ1Nyw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXVwKCZjYXJkLT5zeXNjYWxsX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FyZC0+c3lzY2FsbF9tdXRleCk7CiAKIAkJRFBSSU5USyAoIlNsZWVwaW5nIG9uIHBhZ2UgJWQsIHRtcD09JWQsIGlyPT0lZFxuIiwgbiwgdG1wLCBjaGFuLT5pc19yZWNvcmQpOwogCQlzY2hlZHVsZSgpOwpAQCAtMjU4NSw3ICsyNTg2LDcgQEAKIAlyYyA9IHZpYV9kc3BfZG9fd3JpdGUgKGNhcmQsIGJ1ZmZlciwgY291bnQsIG5vbmJsb2NrKTsKIAogb3V0X3VwOgotCXVwICgmY2FyZC0+c3lzY2FsbF9zZW0pOworCW11dGV4X3VubG9jaygmY2FyZC0+c3lzY2FsbF9tdXRleCk7CiBvdXQ6CiAJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlbGRcbiIsKGxvbmcpIHJjKTsKIAlyZXR1cm4gcmM7CkBAIC0yNjM0LDcgKzI2MzUsNyBAQAogICoJU2xlZXBzIHVudGlsIGFsbCBwbGF5YmFjayBoYXMgYmVlbiBmbHVzaGVkIHRvIHRoZSBhdWRpbwogICoJaGFyZHdhcmUuCiAgKgotICoJTG9ja2luZzogaW5zaWRlIGNhcmQtPnN5c2NhbGxfc2VtCisgKglMb2NraW5nOiBpbnNpZGUgY2FyZC0+c3lzY2FsbF9tdXRleAogICovCiAKIHN0YXRpYyBpbnQgdmlhX2RzcF9kcmFpbl9wbGF5YmFjayAoc3RydWN0IHZpYV9pbmZvICpjYXJkLApAQCAtMjY5Miw3ICsyNjkzLDcgQEAKIAkJCXByaW50ayAoS0VSTl9FUlIgInNsZWVwaW5nIGJ1dCBub3QgYWN0aXZlXG4iKTsKICNlbmRpZgogCi0JCXVwKCZjYXJkLT5zeXNjYWxsX3NlbSk7CisJCW11dGV4X3VubG9jaygmY2FyZC0+c3lzY2FsbF9tdXRleCk7CiAKIAkJRFBSSU5USyAoInNsZWVwaW5nLCBuYnVmcz0lZFxuIiwgYXRvbWljX3JlYWQgKCZjaGFuLT5uX2ZyYWdzKSk7CiAJCXNjaGVkdWxlKCk7CkBAIC0yNzQ4LDcgKzI3NDksNyBAQAogICoKICAqCUhhbmRsZXMgU05EQ1RMX0RTUF9HRVRJU1BBQ0UgYW5kIFNORENUTF9EU1BfR0VUT1NQQUNFLgogICoKLSAqCUxvY2tpbmc6IGluc2lkZSBjYXJkLT5zeXNjYWxsX3NlbQorICoJTG9ja2luZzogaW5zaWRlIGNhcmQtPnN5c2NhbGxfbXV0ZXgKICAqLwogCiBzdGF0aWMgaW50IHZpYV9kc3BfaW9jdGxfc3BhY2UgKHN0cnVjdCB2aWFfaW5mbyAqY2FyZCwKQEAgLTI3OTMsNyArMjc5NCw3IEBACiAgKgogICoJSGFuZGxlcyBTTkRDVExfRFNQX0dFVElQVFIgYW5kIFNORENUTF9EU1BfR0VUT1BUUi4KICAqCi0gKglMb2NraW5nOiBpbnNpZGUgY2FyZC0+c3lzY2FsbF9zZW0KKyAqCUxvY2tpbmc6IGluc2lkZSBjYXJkLT5zeXNjYWxsX211dGV4CiAgKi8KIAogc3RhdGljIGludCB2aWFfZHNwX2lvY3RsX3B0ciAoc3RydWN0IHZpYV9pbmZvICpjYXJkLApAQCAtMzIyMSw3ICszMjIyLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JdXAgKCZjYXJkLT5zeXNjYWxsX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5zeXNjYWxsX211dGV4KTsKIAlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nICVkXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMzI2NCwxMiArMzI2NSwxMiBAQAogCiBtYXRjaDoKIAlpZiAobm9uYmxvY2spIHsKLQkJaWYgKGRvd25fdHJ5bG9jayAoJmNhcmQtPm9wZW5fc2VtKSkgeworCQlpZiAoIW11dGV4X3RyeWxvY2soJmNhcmQtPm9wZW5fbXV0ZXgpKSB7CiAJCQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIC1FQUdBSU5cbiIpOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2FyZC0+b3Blbl9zZW0pKSB7CisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPm9wZW5fbXV0ZXgpKSB7CiAJCQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIC1FUkVTVEFSVFNZU1xuIik7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9CkBAIC0zMzU1LDggKzMzNTYsOCBAQAogCQl2aWFfY2hhbl9idWZmZXJfZnJlZSAoY2FyZCwgJmNhcmQtPmNoX2luKTsKIAl9CiAKLQl1cCAoJmNhcmQtPnN5c2NhbGxfc2VtKTsKLQl1cCAoJmNhcmQtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJmNhcmQtPnN5c2NhbGxfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2FyZC0+b3Blbl9tdXRleCk7CiAKIAlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOwogCXJldHVybiAwOwpAQCAtMzQxNCw4ICszNDE1LDggQEAKIAljYXJkLT5jYXJkX251bSA9IHZpYV9udW1fY2FyZHMrKzsKIAlzcGluX2xvY2tfaW5pdCAoJmNhcmQtPmxvY2spOwogCXNwaW5fbG9ja19pbml0ICgmY2FyZC0+YWM5N19sb2NrKTsKLQlpbml0X01VVEVYICgmY2FyZC0+c3lzY2FsbF9zZW0pOwotCWluaXRfTVVURVggKCZjYXJkLT5vcGVuX3NlbSk7CisJbXV0ZXhfaW5pdCgmY2FyZC0+c3lzY2FsbF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2FyZC0+b3Blbl9tdXRleCk7CiAKIAkvKiB3ZSBtdXN0IGluaXQgdGhlc2Ugbm93LCBpbiBjYXNlIHRoZSBpbnRyIGhhbmRsZXIgbmVlZHMgdGhlbSAqLwogCXZpYV9jaGFuX2luaXRfZGVmYXVsdHMgKGNhcmQsICZjYXJkLT5jaF9vdXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Z3c25kLmMgYi9zb3VuZC9vc3MvdndzbmQuYwppbmRleCAyNjU0MjMwLi5iMzcyZTg4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdndzbmQuYworKysgYi9zb3VuZC9vc3MvdndzbmQuYwpAQCAtOTQsNyArOTQsNyBAQAogICoJT3BlbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBwcmV2aW91cyBjbGllbnQgaGFzIGNsb3NlZCB0aGUKICAqCWRldmljZSwgdW5sZXNzIE9fTk9OQkxPQ0sgaXMgc3BlY2lmaWVkLgogICoKLSAqCVRoZSBzZW1hcGhvcmUgZGV2Yy0+aW9fc2VtYSBzZXJpYWxpemVzIFBDTSBJL08gc3lzY2FsbHMuICBUaGlzCisgKglUaGUgc2VtYXBob3JlIGRldmMtPmlvX211dGV4IHNlcmlhbGl6ZXMgUENNIEkvTyBzeXNjYWxscy4gIFRoaXMKICAqCWlzIHVubmVjZXNzYXJ5IGluIExpbnV4IDIuMiwgYmVjYXVzZSB0aGUga2VybmVsIGxvY2sKICAqCXNlcmlhbGl6ZXMgcmVhZCwgd3JpdGUsIGFuZCBpb2N0bCBnbG9iYWxseSwgYnV0IGl0J3MgdGhlcmUsCiAgKglyZWFkeSBmb3IgdGhlIGJyYXZlLCBuZXcgcG9zdC1rZXJuZWwtbG9jayB3b3JsZC4KQEAgLTEwNSw3ICsxMDUsNyBAQAogICoJYXJlYSBpdCBvd25zIGFuZCB1cGRhdGUgaXRzIHBvaW50ZXJzLiAgU2VlIHBjbV9vdXRwdXQoKSBhbmQKICAqCXBjbV9pbnB1dCgpIGZvciBtb3N0IG9mIHRoZSBnb3J5IHN0dWZmLgogICoKLSAqCWRldmMtPm1peF9zZW1hIHNlcmlhbGl6ZXMgYWxsIG1peGVyIGlvY3Rscy4gIFRoaXMgaXMgYWxzbworICoJZGV2Yy0+bWl4X211dGV4IHNlcmlhbGl6ZXMgYWxsIG1peGVyIGlvY3Rscy4gIFRoaXMgaXMgYWxzbwogICoJcmVkdW5kYW50IGJlY2F1c2Ugb2YgdGhlIGtlcm5lbCBsb2NrLgogICoKICAqCVRoZSBsb3dlc3QgbGV2ZWwgbG9jayBpcyBsaXRoLT5saXRoaXVtX2xvY2suICBJdCBpcyBhCkBAIC0xNDgsNyArMTQ4LDggQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoLXZpc3dzL2NvYmFsdC5oPgogCiAjaW5jbHVkZSAic291bmRfY29uZmlnLmgiCkBAIC0xNDQ3LDExICsxNDQ4LDExIEBACiAgKgogICoJcG9ydC0+bG9jayBwcm90ZWN0czogaHdzdGF0ZSwgZmxhZ3MsIHN3Yl9baXVdX2F2YWlsLgogICoKLSAqCWRldmMtPmlvX3NlbWEgcHJvdGVjdHM6IHN3c3RhdGUsIHN3XyosIHN3Yl9baXVdX2lkeC4KKyAqCWRldmMtPmlvX211dGV4IHByb3RlY3RzOiBzd3N0YXRlLCBzd18qLCBzd2JfW2l1XV9pZHguCiAgKgogICoJZXZlcnl0aGluZyBlbHNlIGlzIG9ubHkgd3JpdHRlbiBieSBvcGVuL3JlbGVhc2Ugb3IKICAqCXBjbV97c2V0dXAsc2h1dGRvd259KCksIHdoaWNoIGFyZSBzZXJpYWxpemVkIGJ5IGEKLSAqCWNvbWJpbmF0aW9uIG9mIGRldmMtPm9wZW5fc2VtYSBhbmQgZGV2Yy0+aW9fc2VtYS4KKyAqCWNvbWJpbmF0aW9uIG9mIGRldmMtPm9wZW5fbXV0ZXggYW5kIGRldmMtPmlvX211dGV4LgogICovCiAKIHR5cGVkZWYgc3RydWN0IHZ3c25kX3BvcnQgewpAQCAtMTUwNyw5ICsxNTA4LDkgQEAKIAlpbnQJCWF1ZGlvX21pbm9yOwkvKiBtaW5vciBudW1iZXIgb2YgYXVkaW8gZGV2aWNlICovCiAJaW50CQltaXhlcl9taW5vcjsJLyogbWlub3IgbnVtYmVyIG9mIG1peGVyIGRldmljZSAqLwogCi0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX3NlbWE7Ci0Jc3RydWN0IHNlbWFwaG9yZSBpb19zZW1hOwotCXN0cnVjdCBzZW1hcGhvcmUgbWl4X3NlbWE7CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CisJc3RydWN0IG11dGV4IGlvX211dGV4OworCXN0cnVjdCBtdXRleCBtaXhfbXV0ZXg7CiAJbW9kZV90CQlvcGVuX21vZGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwogCkBAIC0xNjMzLDcgKzE2MzQsNyBAQAogICogbW9kZS1zZXR0aW5nIGlvY3RscyBoYXZlIGJlZW4gZG9uZSwgYnV0IGJlZm9yZSB0aGUgZmlyc3QgSS9PIGlzCiAgKiBkb25lLgogICoKLSAqIExvY2tpbmc6IGNhbGxlZCB3aXRoIGRldmMtPmlvX3NlbWEgaGVsZC4KKyAqIExvY2tpbmc6IGNhbGxlZCB3aXRoIGRldmMtPmlvX211dGV4IGhlbGQuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgogICovCkBAIC0yMzE5LDkgKzIzMjAsOSBAQAogCXZ3c25kX2Rldl90ICpkZXZjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXNzaXplX3QgcmV0OwogCi0JZG93bigmZGV2Yy0+aW9fc2VtYSk7CisJbXV0ZXhfbG9jaygmZGV2Yy0+aW9fbXV0ZXgpOwogCXJldCA9IHZ3c25kX2F1ZGlvX2RvX3JlYWQoZmlsZSwgYnVmZmVyLCBjb3VudCwgcHBvcyk7Ci0JdXAoJmRldmMtPmlvX3NlbWEpOworCW11dGV4X3VubG9jaygmZGV2Yy0+aW9fbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIzOTQsOSArMjM5NSw5IEBACiAJdndzbmRfZGV2X3QgKmRldmMgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3NpemVfdCByZXQ7CiAKLQlkb3duKCZkZXZjLT5pb19zZW1hKTsKKwltdXRleF9sb2NrKCZkZXZjLT5pb19tdXRleCk7CiAJcmV0ID0gdndzbmRfYXVkaW9fZG9fd3JpdGUoZmlsZSwgYnVmZmVyLCBjb3VudCwgcHBvcyk7Ci0JdXAoJmRldmMtPmlvX3NlbWEpOworCW11dGV4X3VubG9jaygmZGV2Yy0+aW9fbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI4OTEsOSArMjg5Miw5IEBACiAJdndzbmRfZGV2X3QgKmRldmMgPSAodndzbmRfZGV2X3QgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCByZXQ7CiAKLQlkb3duKCZkZXZjLT5pb19zZW1hKTsKKwltdXRleF9sb2NrKCZkZXZjLT5pb19tdXRleCk7CiAJcmV0ID0gdndzbmRfYXVkaW9fZG9faW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKLQl1cCgmZGV2Yy0+aW9fc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZkZXZjLT5pb19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjkyOSw5ICsyOTMwLDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZG93bigmZGV2Yy0+b3Blbl9zZW1hKTsKKwltdXRleF9sb2NrKCZkZXZjLT5vcGVuX211dGV4KTsKIAl3aGlsZSAoZGV2Yy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSB7Ci0JCXVwKCZkZXZjLT5vcGVuX3NlbWEpOworCQltdXRleF91bmxvY2soJmRldmMtPm9wZW5fbXV0ZXgpOwogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKIAkJCURFQ19VU0VfQ09VTlQ7CiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjk0MSwxMCArMjk0MiwxMCBAQAogCQkJREVDX1VTRV9DT1VOVDsKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCX0KLQkJZG93bigmZGV2Yy0+b3Blbl9zZW1hKTsKKwkJbXV0ZXhfbG9jaygmZGV2Yy0+b3Blbl9tdXRleCk7CiAJfQogCWRldmMtPm9wZW5fbW9kZSB8PSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKLQl1cCgmZGV2Yy0+b3Blbl9zZW1hKTsKKwltdXRleF91bmxvY2soJmRldmMtPm9wZW5fbXV0ZXgpOwogCiAJLyogZ2V0IGRlZmF1bHQgc2FtcGxlIGZvcm1hdCBmcm9tIG1pbm9yIG51bWJlci4gKi8KIApAQCAtMjk2MCw3ICsyOTYxLDcgQEAKIAogCS8qIEluaXRpYWxpemUgdndzbmRfcG9ydHMuICovCiAKLQlkb3duKCZkZXZjLT5pb19zZW1hKTsKKwltdXRleF9sb2NrKCZkZXZjLT5pb19tdXRleCk7CiAJewogCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewogCQkJZGV2Yy0+cnBvcnQuc3dzdGF0ZSAgICAgICAgPSBTV19JTklUSUFMOwpAQCAtMjk4Nyw3ICsyOTg4LDcgQEAKIAkJCWRldmMtPndwb3J0LmZyYWdfY291bnQgICAgID0gMDsKIAkJfQogCX0KLQl1cCgmZGV2Yy0+aW9fc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZkZXZjLT5pb19tdXRleCk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXZjOwogCURCR1JWKCk7CkBAIC0zMDA1LDcgKzMwMDYsNyBAQAogCWludCBlcnIgPSAwOwogCiAJbG9ja19rZXJuZWwoKTsKLQlkb3duKCZkZXZjLT5pb19zZW1hKTsKKwltdXRleF9sb2NrKCZkZXZjLT5pb19tdXRleCk7CiAJewogCQlEQkdFVigiKGlub2RlPTB4JXAsIGZpbGU9MHglcClcbiIsIGlub2RlLCBmaWxlKTsKIApAQCAtMzAyMiwxMyArMzAyMywxMyBAQAogCQlpZiAod3BvcnQpCiAJCQl3cG9ydC0+c3dzdGF0ZSA9IFNXX09GRjsKIAl9Ci0JdXAoJmRldmMtPmlvX3NlbWEpOworCW11dGV4X3VubG9jaygmZGV2Yy0+aW9fbXV0ZXgpOwogCi0JZG93bigmZGV2Yy0+b3Blbl9zZW1hKTsKKwltdXRleF9sb2NrKCZkZXZjLT5vcGVuX211dGV4KTsKIAl7CiAJCWRldmMtPm9wZW5fbW9kZSAmPSB+ZmlsZS0+Zl9tb2RlOwogCX0KLQl1cCgmZGV2Yy0+b3Blbl9zZW1hKTsKKwltdXRleF91bmxvY2soJmRldmMtPm9wZW5fbXV0ZXgpOwogCXdha2VfdXAoJmRldmMtPm9wZW5fd2FpdCk7CiAJREVDX1VTRV9DT1VOVDsKIAlEQkdSKCk7CkBAIC0zMjEzLDcgKzMyMTQsNyBAQAogCiAJREJHRVYoIihkZXZjPTB4JXAsIGNtZD0weCV4LCBhcmc9MHglbHgpXG4iLCBkZXZjLCBjbWQsIGFyZyk7CiAKLQlkb3duKCZkZXZjLT5taXhfc2VtYSk7CisJbXV0ZXhfbG9jaygmZGV2Yy0+bWl4X211dGV4KTsKIAl7CiAJCWlmICgoY21kICYgfm5ybWFzaykgPT0gTUlYRVJfUkVBRCgwKSkKIAkJCXJldHZhbCA9IG1peGVyX3JlYWRfaW9jdGwoZGV2YywgbnIsICh2b2lkIF9fdXNlciAqKSBhcmcpOwpAQCAtMzIyMiw3ICszMjIzLDcgQEAKIAkJZWxzZQogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAl9Ci0JdXAoJmRldmMtPm1peF9zZW1hKTsKKwltdXRleF91bmxvY2soJmRldmMtPm1peF9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzM3Niw5ICszMzc3LDkgQEAKIAogCS8qIEluaXRpYWxpemUgYXMgbXVjaCBvZiAqZGV2YyBhcyBwb3NzaWJsZSAqLwogCi0JaW5pdF9NVVRFWCgmZGV2Yy0+b3Blbl9zZW1hKTsKLQlpbml0X01VVEVYKCZkZXZjLT5pb19zZW1hKTsKLQlpbml0X01VVEVYKCZkZXZjLT5taXhfc2VtYSk7CisJbXV0ZXhfaW5pdCgmZGV2Yy0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmZGV2Yy0+aW9fbXV0ZXgpOworCW11dGV4X2luaXQoJmRldmMtPm1peF9tdXRleCk7CiAJZGV2Yy0+b3Blbl9tb2RlID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmZGV2Yy0+cnBvcnQubG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2Yy0+cnBvcnQucXVldWUpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3dhdmVhcnRpc3QuYyBiL3NvdW5kL29zcy93YXZlYXJ0aXN0LmMKaW5kZXggOTlkMDRhZC4uYWZjYjUyNCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3dhdmVhcnRpc3QuYworKysgYi9zb3VuZC9vc3Mvd2F2ZWFydGlzdC5jCkBAIC0yMDI4LDggKzIwMjgsOCBAQAogI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTigiUm9ja3dlbGwgV2F2ZUFydGlzdCBSV0EtMDEwIHNvdW5kIGRyaXZlciIpOwotTU9EVUxFX1BBUk0oaW8sICJpIik7CQkvKiBJTyBiYXNlICovCi1NT0RVTEVfUEFSTShpcnEsICJpIik7CQkvKiBJUlEgKi8KLU1PRFVMRV9QQVJNKGRtYSwgImkiKTsJCS8qIERNQSAqLwotTU9EVUxFX1BBUk0oZG1hMiwgImkiKTsJCS8qIERNQTIgKi8KK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsJCS8qIElPIGJhc2UgKi8KK21vZHVsZV9wYXJhbShpcnEsIGludCwgMCk7CQkvKiBJUlEgKi8KK21vZHVsZV9wYXJhbShkbWEsIGludCwgMCk7CQkvKiBETUEgKi8KK21vZHVsZV9wYXJhbShkbWEyLCBpbnQsIDApOwkJLyogRE1BMiAqLwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3ltZnBjaS5jIGIvc291bmQvb3NzL3ltZnBjaS5jCmluZGV4IGY4YmQ3MmUuLmJmOTBjMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy95bWZwY2kuYworKysgYi9zb3VuZC9vc3MveW1mcGNpLmMKQEAgLTE5MTgsMTAgKzE5MTgsMTAgQEAKIAlpZiAodW5pdCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRvd24oJnVuaXQtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZ1bml0LT5vcGVuX211dGV4KTsKIAogCWlmICgoc3RhdGUgPSB5bWZfc3RhdGVfYWxsb2ModW5pdCkpID09IE5VTEwpIHsKLQkJdXAoJnVuaXQtPm9wZW5fc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZ1bml0LT5vcGVuX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWxpc3RfYWRkX3RhaWwoJnN0YXRlLT5jaGFpbiwgJnVuaXQtPnN0YXRlcyk7CkBAIC0xOTU2LDcgKzE5NTYsNyBAQAogCXltZnBjaV93cml0ZWIodW5pdCwgWURTWEdSX1RJTUVSQ1RSTCwKIAkgICAgKFlEU1hHUl9USU1FUkNUUkxfVEVOfFlEU1hHUl9USU1FUkNUUkxfVElFTikpOwogI2VuZGlmCi0JdXAoJnVuaXQtPm9wZW5fc2VtKTsKKwltdXRleF91bmxvY2soJnVuaXQtPm9wZW5fbXV0ZXgpOwogCiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogCkBAIC0xOTc0LDcgKzE5NzQsNyBAQAogCWxpc3RfZGVsKCZzdGF0ZS0+Y2hhaW4pOwogCWtmcmVlKHN0YXRlKTsKIAotCXVwKCZ1bml0LT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZ1bml0LT5vcGVuX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xOTg3LDcgKzE5ODcsNyBAQAogCXltZnBjaV93cml0ZWIodW5pdCwgWURTWEdSX1RJTUVSQ1RSTCwgMCk7CiAjZW5kaWYKIAotCWRvd24oJnVuaXQtPm9wZW5fc2VtKTsKKwltdXRleF9sb2NrKCZ1bml0LT5vcGVuX211dGV4KTsKIAogCS8qCiAJICogWFhYIFNvbHZlIHRoZSBjYXNlIG9mIE9fTk9OQkxPQ0sgY2xvc2UgLSBkb24ndCBkZWFsbG9jYXRlIGhlcmUuCkBAIC0yMDA0LDcgKzIwMDQsNyBAQAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CS8qIENhbiB5b3UgdGVsbCBJIHByb2dyYW1tZWQgU29sYXJpcyAqLwogCWtmcmVlKHN0YXRlKTsKIAotCXVwKCZ1bml0LT5vcGVuX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZ1bml0LT5vcGVuX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjUzMiw3ICsyNTMyLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmY29kZWMtPnJlZ19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY29kZWMtPnZvaWNlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjb2RlYy0+YWM5N19sb2NrKTsKLQlpbml0X01VVEVYKCZjb2RlYy0+b3Blbl9zZW0pOworCW11dGV4X2luaXQoJmNvZGVjLT5vcGVuX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPnN0YXRlcyk7CiAJY29kZWMtPnBjaSA9IHBjaWRldjsKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3ltZnBjaS5oIGIvc291bmQvb3NzL3ltZnBjaS5oCmluZGV4IGY4MTBhMTAuLmFjMTc4NWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy95bWZwY2kuaAorKysgYi9zb3VuZC9vc3MveW1mcGNpLmgKQEAgLTIyLDYgKzIyLDcgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAvKgogICogIERpcmVjdCByZWdpc3RlcnMKQEAgLTI3OSw3ICsyODAsNyBAQAogCiAJLyogc291bmRjb3JlIHN0dWZmICovCiAJaW50IGRldl9hdWRpbzsKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOworCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwogCiAJc3RydWN0IGxpc3RfaGVhZCB5bWZfZGV2czsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHN0YXRlczsJLyogTGlzdCBvZiBzdGF0ZXMgZm9yIHRoaXMgdW5pdCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCmluZGV4IDMwMjBjYTIuLjI3ODMxOWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CkBAIC0xNDksNyArMTUwLDcgQEAKIHsgMHg0OTU0NDU2MSwgMHhmZmZmZmZmZiwgIklUMjY0NkUiLAkJcGF0Y2hfaXQyNjQ2LAlOVUxMIH0sCiB7IDB4NGU1MzQzMDAsIDB4ZmZmZmZmZmYsICJMTTQ1NDAsNDMsNDUsNDYsNDgiLAlOVUxMLAkJTlVMTCB9LCAvLyBvbmx5IGd1ZXNzIC0tamsKIHsgMHg0ZTUzNDMzMSwgMHhmZmZmZmZmZiwgIkxNNDU0OSIsCQlOVUxMLAkJTlVMTCB9LAoteyAweDRlNTM0MzUwLCAweGZmZmZmZmZmLCAiTE00NTUwIiwJCU5VTEwsCQlOVUxMIH0sCit7IDB4NGU1MzQzNTAsIDB4ZmZmZmZmZmYsICJMTTQ1NTAiLAkJcGF0Y2hfbG00NTUwLCAgCU5VTEwgfSwgLy8gdm9sdW1lIHdyYXAgZml4IAogeyAweDUwNTM0MzA0LCAweGZmZmZmZmZmLCAiVUNCMTQwMCIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDUzNDk0YzIwLCAweGZmZmZmZmUwLCAiU2kzMDM2LDgiLAkJbXBhdGNoX3NpMzAzNiwJbXBhdGNoX3NpMzAzNiwgQUM5N19NT0RFTV9QQVRDSCB9LAogeyAweDU0NTI0MTAyLCAweGZmZmZmZmZmLCAiVFIyODAyMiIsCQlOVUxMLAkJTlVMTCB9LApAQCAtMTkxLDkgKzE5Miw2IEBACiAKIHN0YXRpYyBpbnQgc25kX2FjOTdfdmFsaWRfcmVnKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKQogewotCWlmIChhYzk3LT5saW1pdGVkX3JlZ3MgJiYgISB0ZXN0X2JpdChyZWcsIGFjOTctPnJlZ19hY2Nlc3NlZCkpCi0gIAkJcmV0dXJuIDA7Ci0KIAkvKiBmaWx0ZXIgc29tZSByZWdpc3RlcnMgZm9yIGJ1Z2d5IGNvZGVjcyAqLwogCXN3aXRjaCAoYWM5Ny0+aWQpIHsKIAljYXNlIEFDOTdfSURfQUs0NTQwOgpAQCAtMjk2LDExICsyOTQsMTEgQEAKIHsKIAlpZiAoIXNuZF9hYzk3X3ZhbGlkX3JlZyhhYzk3LCByZWcpKQogCQlyZXR1cm47Ci0JZG93bigmYWM5Ny0+cmVnX211dGV4KTsKKwltdXRleF9sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwogCWFjOTctPnJlZ3NbcmVnXSA9IHZhbHVlOwogCWFjOTctPmJ1cy0+b3BzLT53cml0ZShhYzk3LCByZWcsIHZhbHVlKTsKIAlzZXRfYml0KHJlZywgYWM5Ny0+cmVnX2FjY2Vzc2VkKTsKLQl1cCgmYWM5Ny0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmFjOTctPnJlZ19tdXRleCk7CiB9CiAKIC8qKgpAQCAtMzIxLDE0ICszMTksMTQgQEAKIAogCWlmICghc25kX2FjOTdfdmFsaWRfcmVnKGFjOTcsIHJlZykpCiAJCXJldHVybiAtRUlOVkFMOwotCWRvd24oJmFjOTctPnJlZ19tdXRleCk7CisJbXV0ZXhfbG9jaygmYWM5Ny0+cmVnX211dGV4KTsKIAljaGFuZ2UgPSBhYzk3LT5yZWdzW3JlZ10gIT0gdmFsdWU7CiAJaWYgKGNoYW5nZSkgewogCQlhYzk3LT5yZWdzW3JlZ10gPSB2YWx1ZTsKIAkJYWM5Ny0+YnVzLT5vcHMtPndyaXRlKGFjOTcsIHJlZywgdmFsdWUpOwogCX0KIAlzZXRfYml0KHJlZywgYWM5Ny0+cmVnX2FjY2Vzc2VkKTsKLQl1cCgmYWM5Ny0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmFjOTctPnJlZ19tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIApAQCAtMzUxLDkgKzM0OSw5IEBACiAKIAlpZiAoIXNuZF9hYzk3X3ZhbGlkX3JlZyhhYzk3LCByZWcpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlkb3duKCZhYzk3LT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJmFjOTctPnJlZ19tdXRleCk7CiAJY2hhbmdlID0gc25kX2FjOTdfdXBkYXRlX2JpdHNfbm9sb2NrKGFjOTcsIHJlZywgbWFzaywgdmFsdWUpOwotCXVwKCZhYzk3LT5yZWdfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYWM5Ny0+cmVnX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCkBAIC0zODAsMTIgKzM3OCwxMiBAQAogCWludCBjaGFuZ2U7CiAJdW5zaWduZWQgc2hvcnQgb2xkLCBuZXcsIGNmZzsKIAotCWRvd24oJmFjOTctPnBhZ2VfbXV0ZXgpOworCW11dGV4X2xvY2soJmFjOTctPnBhZ2VfbXV0ZXgpOwogCW9sZCA9IGFjOTctPnNwZWMuYWQxOHh4LnBjbXJlZ1tjb2RlY107CiAJbmV3ID0gKG9sZCAmIH5tYXNrKSB8IHZhbHVlOwogCWNoYW5nZSA9IG9sZCAhPSBuZXc7CiAJaWYgKGNoYW5nZSkgewotCQlkb3duKCZhYzk3LT5yZWdfbXV0ZXgpOworCQltdXRleF9sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwogCQljZmcgPSBzbmRfYWM5N19yZWFkX2NhY2hlKGFjOTcsIEFDOTdfQURfU0VSSUFMX0NGRyk7CiAJCWFjOTctPnNwZWMuYWQxOHh4LnBjbXJlZ1tjb2RlY10gPSBuZXc7CiAJCS8qIHNlbGVjdCBzaW5nbGUgY29kZWMgKi8KQEAgLTM5Nyw5ICszOTUsOSBAQAogCQkvKiBzZWxlY3QgYWxsIGNvZGVjcyAqLwogCQlhYzk3LT5idXMtPm9wcy0+d3JpdGUoYWM5NywgQUM5N19BRF9TRVJJQUxfQ0ZHLAogCQkJCSBjZmcgfCAweDcwMDApOwotCQl1cCgmYWM5Ny0+cmVnX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwogCX0KLQl1cCgmYWM5Ny0+cGFnZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhYzk3LT5wYWdlX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCkBAIC00NjcsNyArNDY1LDcgQEAKIAkgICAgKGFjOTctPmV4dF9pZCAmIEFDOTdfRUlfUkVWX01BU0spID49IEFDOTdfRUlfUkVWXzIzICYmCiAJICAgIChyZWcgPj0gMHg2MCAmJiByZWcgPCAweDcwKSkgewogCQl1bnNpZ25lZCBzaG9ydCBwYWdlID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI2KSAmIDB4MGY7Ci0JCWRvd24oJmFjOTctPnBhZ2VfbXV0ZXgpOyAvKiBsb2NrIHBhZ2luZyAqLworCQltdXRleF9sb2NrKCZhYzk3LT5wYWdlX211dGV4KTsgLyogbG9jayBwYWdpbmcgKi8KIAkJcGFnZV9zYXZlID0gc25kX2FjOTdfcmVhZChhYzk3LCBBQzk3X0lOVF9QQUdJTkcpICYgQUM5N19QQUdFX01BU0s7CiAJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfSU5UX1BBR0lORywgQUM5N19QQUdFX01BU0ssIHBhZ2UpOwogCX0KQEAgLTQ3OCw3ICs0NzYsNyBAQAogewogCWlmIChwYWdlX3NhdmUgPj0gMCkgewogCQlzbmRfYWM5N191cGRhdGVfYml0cyhhYzk3LCBBQzk3X0lOVF9QQUdJTkcsIEFDOTdfUEFHRV9NQVNLLCBwYWdlX3NhdmUpOwotCQl1cCgmYWM5Ny0+cGFnZV9tdXRleCk7IC8qIHVubG9jayBwYWdpbmcgKi8KKwkJbXV0ZXhfdW5sb2NrKCZhYzk3LT5wYWdlX211dGV4KTsgLyogdW5sb2NrIHBhZ2luZyAqLwogCX0KIH0KIApAQCAtNjc0LDEyICs2NzIsMTIgQEAKIHsKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAKLQlkb3duKCZhYzk3LT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJmFjOTctPnJlZ19tdXRleCk7CiAJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMF0gPSBhYzk3LT5zcGRpZl9zdGF0dXMgJiAweGZmOwogCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzFdID0gKGFjOTctPnNwZGlmX3N0YXR1cyA+PiA4KSAmIDB4ZmY7CiAJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMl0gPSAoYWM5Ny0+c3BkaWZfc3RhdHVzID4+IDE2KSAmIDB4ZmY7CiAJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbM10gPSAoYWM5Ny0+c3BkaWZfc3RhdHVzID4+IDI0KSAmIDB4ZmY7Ci0JdXAoJmFjOTctPnJlZ19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwogCXJldHVybiAwOwogfQogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC03MTgsNyArNzE2LDcgQEAKIAkJfQogCX0KIAotCWRvd24oJmFjOTctPnJlZ19tdXRleCk7CisJbXV0ZXhfbG9jaygmYWM5Ny0+cmVnX211dGV4KTsKIAljaGFuZ2UgPSBhYzk3LT5zcGRpZl9zdGF0dXMgIT0gbmV3OwogCWFjOTctPnNwZGlmX3N0YXR1cyA9IG5ldzsKIApAQCAtNzQ2LDcgKzc0NCw3IEBACiAJCQlzbmRfYWM5N191cGRhdGVfYml0c19ub2xvY2soYWM5NywgQUM5N19FWFRFTkRFRF9TVEFUVVMsIEFDOTdfRUFfU1BESUYsIEFDOTdfRUFfU1BESUYpOyAvKiB0dXJuIG9uIGFnYWluICovCiAgICAgICAgICAgICAgICAgfQogCX0KLQl1cCgmYWM5Ny0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmFjOTctPnJlZ19tdXRleCk7CiAKIAlyZXR1cm4gY2hhbmdlOwogfQpAQCAtNzYzLDcgKzc2MSw3IEBACiAKIAl2YWx1ZSA9ICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIG1hc2spOwogCi0JZG93bigmYWM5Ny0+cmVnX211dGV4KTsKKwltdXRleF9sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwogCW1hc2sgPDw9IHNoaWZ0OwogCXZhbHVlIDw8PSBzaGlmdDsKIAlvbGQgPSBzbmRfYWM5N19yZWFkX2NhY2hlKGFjOTcsIHJlZyk7CkBAIC03NzcsNyArNzc1LDcgQEAKIAkJaWYgKGV4dHN0ICYgQUM5N19FQV9TUERJRikKIAkJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzX25vbG9jayhhYzk3LCBBQzk3X0VYVEVOREVEX1NUQVRVUywgQUM5N19FQV9TUERJRiwgQUM5N19FQV9TUERJRik7IC8qIHR1cm4gb24gYWdhaW4gKi8KIAl9Ci0JdXAoJmFjOTctPnJlZ19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwogCXJldHVybiBjaGFuZ2U7CiB9CiAKQEAgLTg4OCwxMCArODg2LDEwIEBACiAJc3RydWN0IHNuZF9hYzk3ICphYzk3ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjb2RlYyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzsKIAkKLQlkb3duKCZhYzk3LT5wYWdlX211dGV4KTsKKwltdXRleF9sb2NrKCZhYzk3LT5wYWdlX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IDMxIC0gKChhYzk3LT5zcGVjLmFkMTh4eC5wY21yZWdbY29kZWNdID4+IDApICYgMzEpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gMzEgLSAoKGFjOTctPnNwZWMuYWQxOHh4LnBjbXJlZ1tjb2RlY10gPj4gOCkgJiAzMSk7Ci0JdXAoJmFjOTctPnBhZ2VfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYWM5Ny0+cGFnZV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDcsOSArMTAwNSw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmIChhYzk3LT5saW1pdGVkX3JlZ3MgJiYgdGVzdF9iaXQocmVnLCBhYzk3LT5yZWdfYWNjZXNzZWQpKQotCQlyZXR1cm4gMTsgLyogYWxsb3cgd2l0aG91dCBjaGVjayAqLwotCiAJdmFsID0gc25kX2FjOTdfcmVhZChhYzk3LCByZWcpOwogCWlmICghKHZhbCAmIG1hc2spKSB7CiAJCS8qIG5vdGhpbmcgc2VlbXMgdG8gYmUgaGVyZSAtIG11dGUgZmxhZyBpcyBub3Qgc2V0ICovCkBAIC0xMDI5LDYgKzEwMjQsMTggQEAKIAl1bnNpZ25lZCBjaGFyIG1heFszXSA9IHsgNjMsIDMxLCAxNSB9OwogCWludCBpOwogCisJLyogZmlyc3QgbG9vayB1cCB0aGUgc3RhdGljIHJlc29sdXRpb24gdGFibGUgKi8KKwlpZiAoYWM5Ny0+cmVzX3RhYmxlKSB7CisJCWNvbnN0IHN0cnVjdCBzbmRfYWM5N19yZXNfdGFibGUgKnRibDsKKwkJZm9yICh0YmwgPSBhYzk3LT5yZXNfdGFibGU7IHRibC0+cmVnOyB0YmwrKykgeworCQkJaWYgKHRibC0+cmVnID09IHJlZykgeworCQkJCSpsb19tYXggPSB0YmwtPmJpdHMgJiAweGZmOworCQkJCSpoaV9tYXggPSAodGJsLT5iaXRzID4+IDgpICYgMHhmZjsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisKIAkqbG9fbWF4ID0gKmhpX21heCA9IDA7CiAJZm9yIChpID0gMCA7IGkgPCBBUlJBWV9TSVpFKGNiaXQpOyBpKyspIHsKIAkJdW5zaWduZWQgc2hvcnQgdmFsOwpAQCAtMTg1MywxMSArMTg2MCwxMCBAQAogCWFjOTctPm51bSA9IHRlbXBsYXRlLT5udW07CiAJYWM5Ny0+YWRkciA9IHRlbXBsYXRlLT5hZGRyOwogCWFjOTctPnNjYXBzID0gdGVtcGxhdGUtPnNjYXBzOwotCWFjOTctPmxpbWl0ZWRfcmVncyA9IHRlbXBsYXRlLT5saW1pdGVkX3JlZ3M7Ci0JbWVtY3B5KGFjOTctPnJlZ19hY2Nlc3NlZCwgdGVtcGxhdGUtPnJlZ19hY2Nlc3NlZCwgc2l6ZW9mKGFjOTctPnJlZ19hY2Nlc3NlZCkpOworCWFjOTctPnJlc190YWJsZSA9IHRlbXBsYXRlLT5yZXNfdGFibGU7CiAJYnVzLT5jb2RlY1thYzk3LT5udW1dID0gYWM5NzsKLQlpbml0X01VVEVYKCZhYzk3LT5yZWdfbXV0ZXgpOwotCWluaXRfTVVURVgoJmFjOTctPnBhZ2VfbXV0ZXgpOworCW11dGV4X2luaXQoJmFjOTctPnJlZ19tdXRleCk7CisJbXV0ZXhfaW5pdCgmYWM5Ny0+cGFnZV9tdXRleCk7CiAKICNpZmRlZiBDT05GSUdfUENJCiAJaWYgKGFjOTctPnBjaSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5jCmluZGV4IGE0NDRhNzguLjRkOWNmMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmMKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC01NSwxMiArNTcsMTIgQEAKIAl1bnNpZ25lZCBzaG9ydCBwYWdlX3NhdmU7CiAJaW50IHJldDsKIAotCWRvd24oJmFjOTctPnBhZ2VfbXV0ZXgpOworCW11dGV4X2xvY2soJmFjOTctPnBhZ2VfbXV0ZXgpOwogCXBhZ2Vfc2F2ZSA9IHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19JTlRfUEFHSU5HKSAmIEFDOTdfUEFHRV9NQVNLOwogCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfSU5UX1BBR0lORywgQUM5N19QQUdFX01BU0ssIHBhZ2UpOwogCXJldCA9IHNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIHJlZywgbWFzaywgdmFsdWUpOwogCXNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfSU5UX1BBR0lORywgQUM5N19QQUdFX01BU0ssIHBhZ2Vfc2F2ZSk7Ci0JdXAoJmFjOTctPnBhZ2VfbXV0ZXgpOyAvKiB1bmxvY2sgcGFnaW5nICovCisJbXV0ZXhfdW5sb2NrKCZhYzk3LT5wYWdlX211dGV4KTsgLyogdW5sb2NrIHBhZ2luZyAqLwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTg5NywxMiArODk5LDEyIEBACiAJc3RydWN0IHNuZF9hYzk3ICphYzk3ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBlcnI7CiAKLQlkb3duKCZhYzk3LT5wYWdlX211dGV4KTsKKwltdXRleF9sb2NrKCZhYzk3LT5wYWdlX211dGV4KTsKIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X1NJR01BVEVMX0JJQVMxLCAweGFiYmEpOwogCWVyciA9IHNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIEFDOTdfU0lHTUFURUxfQklBUzIsIDB4MDAxMCwKIAkJCQkgICAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAxKSA8PCA0KTsKIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X1NJR01BVEVMX0JJQVMxLCAwKTsKLQl1cCgmYWM5Ny0+cGFnZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhYzk3LT5wYWdlX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yODIzLDMgKzI4MjUsMzMgQEAKIAlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCAweDY4LCAwKTsKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIExNIDQ1NTAgQ29kZWMKKyAqCisgKiBXZSB1c2UgYSBzdGF0aWMgcmVzb2x1dGlvbiB0YWJsZSBzaW5jZSBMTTQ1NTAgY29kZWMgY2Fubm90IGJlCisgKiBwcm9wZXJseSBhdXRvcHJvYmVkIHRvIGRldGVybWluZSB0aGUgcmVzb2x1dGlvbiB2aWEKKyAqIGNoZWNrX3ZvbHVtZV9yZXNvbHV0aW9uKCkuCisgKi8KKworc3RhdGljIHN0cnVjdCBzbmRfYWM5N19yZXNfdGFibGUgbG00NTUwX3Jlc3RibFtdID0geworCXsgQUM5N19NQVNURVIsIDB4MWYxZiB9LAorCXsgQUM5N19IRUFEUEhPTkUsIDB4MWYxZiB9LAorCXsgQUM5N19NQVNURVJfTU9OTywgMHgwMDFmIH0sCisJeyBBQzk3X1BDX0JFRVAsIDB4MDAxZiB9LAkvKiBMU0IgaXMgaWdub3JlZCAqLworCXsgQUM5N19QSE9ORSwgMHgwMDFmIH0sCisJeyBBQzk3X01JQywgMHgwMDFmIH0sCisJeyBBQzk3X0xJTkUsIDB4MWYxZiB9LAorCXsgQUM5N19DRCwgMHgxZjFmIH0sCisJeyBBQzk3X1ZJREVPLCAweDFmMWYgfSwKKwl7IEFDOTdfQVVYLCAweDFmMWYgfSwKKwl7IEFDOTdfUENNLCAweDFmMWYgfSwKKwl7IEFDOTdfUkVDX0dBSU4sIDB4MGYwZiB9LAorCXsgfSAvKiB0ZXJtaW5hdG9yICovCit9OworCitpbnQgcGF0Y2hfbG00NTUwKHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwlhYzk3LT5yZXNfdGFibGUgPSBsbTQ1NTBfcmVzdGJsOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5oIGIvc291bmQvcGNpL2FjOTcvYWM5N19wYXRjaC5oCmluZGV4IDUwNjBjYjYuLmFkY2FhMDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGF0Y2guaAorKysgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BhdGNoLmgKQEAgLTU5LDMgKzU5LDQgQEAKIGludCBwYXRjaF92dDE2MTdhKHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOwogaW50IHBhdGNoX2l0MjY0NihzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKIGludCBtcGF0Y2hfc2kzMDM2KHN0cnVjdCBzbmRfYWM5NyAqIGFjOTcpOworaW50IHBhdGNoX2xtNDU1MChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X3BjbS5jCmluZGV4IGMzZTU5MGIuLjUxMmEzNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wY20uYwpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTIwNiw3ICsyMDgsNyBAQAogCQltYXNrID0gQUM5N19TQ19TUFNSX01BU0s7CiAJfQogCi0JZG93bigmYWM5Ny0+cmVnX211dGV4KTsKKwltdXRleF9sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwogCW9sZCA9IHNuZF9hYzk3X3JlYWQoYWM5NywgcmVnKSAmIG1hc2s7CiAJaWYgKG9sZCAhPSBiaXRzKSB7CiAJCXNuZF9hYzk3X3VwZGF0ZV9iaXRzX25vbG9jayhhYzk3LCBBQzk3X0VYVEVOREVEX1NUQVRVUywgQUM5N19FQV9TUERJRiwgMCk7CkBAIC0yMzEsNyArMjMzLDcgQEAKIAkJYWM5Ny0+c3BkaWZfc3RhdHVzID0gc2JpdHM7CiAJfQogCXNuZF9hYzk3X3VwZGF0ZV9iaXRzX25vbG9jayhhYzk3LCBBQzk3X0VYVEVOREVEX1NUQVRVUywgQUM5N19FQV9TUERJRiwgQUM5N19FQV9TUERJRik7Ci0JdXAoJmFjOTctPnJlZ19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhYzk3LT5yZWdfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X3Byb2MuYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCmluZGV4IDcxMzRiM2YuLjRkNTIzZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jCkBAIC0yNCw2ICsyNCw4IEBACiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KQEAgLTMzOCw3ICszNDAsNyBAQAogewogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NyA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAJCi0JZG93bigmYWM5Ny0+cGFnZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmYWM5Ny0+cGFnZV9tdXRleCk7CiAJaWYgKChhYzk3LT5pZCAmIDB4ZmZmZmZmNDApID09IEFDOTdfSURfQUQxODgxKSB7CS8vIEFuYWxvZyBEZXZpY2VzIEFEMTg4MS84NS84NgogCQlpbnQgaWR4OwogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDM7IGlkeCsrKQpAQCAtMzY0LDcgKzM2Niw3IEBACiAJfSBlbHNlIHsKIAkJc25kX2FjOTdfcHJvY19yZWFkX21haW4oYWM5NywgYnVmZmVyLCAwKTsKIAl9Ci0JdXAoJmFjOTctPnBhZ2VfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYWM5Ny0+cGFnZV9tdXRleCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCkBAIC0zNzQsNyArMzc2LDcgQEAKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgbGluZVs2NF07CiAJdW5zaWduZWQgaW50IHJlZywgdmFsOwotCWRvd24oJmFjOTctPnBhZ2VfbXV0ZXgpOworCW11dGV4X2xvY2soJmFjOTctPnBhZ2VfbXV0ZXgpOwogCXdoaWxlICghc25kX2luZm9fZ2V0X2xpbmUoYnVmZmVyLCBsaW5lLCBzaXplb2YobGluZSkpKSB7CiAJCWlmIChzc2NhbmYobGluZSwgIiV4ICV4IiwgJnJlZywgJnZhbCkgIT0gMikKIAkJCWNvbnRpbnVlOwpAQCAtMzgyLDcgKzM4NCw3IEBACiAJCWlmIChyZWcgPCAweDgwICYmIChyZWcgJiAxKSA9PSAwICYmIHZhbCA8PSAweGZmZmYpCiAJCQlzbmRfYWM5N193cml0ZV9jYWNoZShhYzk3LCByZWcsIHZhbCk7CiAJfQotCXVwKCZhYzk3LT5wYWdlX211dGV4KTsKKwltdXRleF91bmxvY2soJmFjOTctPnBhZ2VfbXV0ZXgpOwogfQogI2VuZGlmCiAKQEAgLTQwMSw3ICs0MDMsNyBAQAogewogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NyA9IGVudHJ5LT5wcml2YXRlX2RhdGE7CiAKLQlkb3duKCZhYzk3LT5wYWdlX211dGV4KTsKKwltdXRleF9sb2NrKCZhYzk3LT5wYWdlX211dGV4KTsKIAlpZiAoKGFjOTctPmlkICYgMHhmZmZmZmY0MCkgPT0gQUM5N19JRF9BRDE4ODEpIHsJLy8gQW5hbG9nIERldmljZXMgQUQxODgxLzg1Lzg2CiAKIAkJaW50IGlkeDsKQEAgLTQxNyw3ICs0MTksNyBAQAogCX0gZWxzZSB7CiAJCXNuZF9hYzk3X3Byb2NfcmVnc19yZWFkX21haW4oYWM5NywgYnVmZmVyLCAwKTsKIAl9CQotCXVwKCZhYzk3LT5wYWdlX211dGV4KTsKKwltdXRleF91bmxvY2soJmFjOTctPnBhZ2VfbXV0ZXgpOwogfQogCiB2b2lkIHNuZF9hYzk3X3Byb2NfaW5pdChzdHJ1Y3Qgc25kX2FjOTcgKiBhYzk3KQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FjOTcvYWs0NTMxX2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hazQ1MzFfY29kZWMuYwppbmRleCBkY2ZiNTAzLi4wZmI3YjM0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hazQ1MzFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWM5Ny9hazQ1MzFfY29kZWMuYwpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2FrNDUzMV9jb2RlYy5oPgogCkBAIC04Miw5ICs4NCw5IEBACiAJaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyMikgJiAxOwogCWludCB2YWw7CiAKLQlkb3duKCZhazQ1MzEtPnJlZ19tdXRleCk7CisJbXV0ZXhfbG9jaygmYWs0NTMxLT5yZWdfbXV0ZXgpOwogCXZhbCA9IChhazQ1MzEtPnJlZ3NbcmVnXSA+PiBzaGlmdCkgJiBtYXNrOwotCXVwKCZhazQ1MzEtPnJlZ19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhazQ1MzEtPnJlZ19tdXRleCk7CiAJaWYgKGludmVydCkgewogCQl2YWwgPSBtYXNrIC0gdmFsOwogCX0KQEAgLTEwNywxMSArMTA5LDExIEBACiAJCXZhbCA9IG1hc2sgLSB2YWw7CiAJfQogCXZhbCA8PD0gc2hpZnQ7Ci0JZG93bigmYWs0NTMxLT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJmFrNDUzMS0+cmVnX211dGV4KTsKIAl2YWwgPSAoYWs0NTMxLT5yZWdzW3JlZ10gJiB+KG1hc2sgPDwgc2hpZnQpKSB8IHZhbDsKIAljaGFuZ2UgPSB2YWwgIT0gYWs0NTMxLT5yZWdzW3JlZ107CiAJYWs0NTMxLT53cml0ZShhazQ1MzEsIHJlZywgYWs0NTMxLT5yZWdzW3JlZ10gPSB2YWwpOwotCXVwKCZhazQ1MzEtPnJlZ19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhazQ1MzEtPnJlZ19tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIApAQCAtMTQzLDEwICsxNDUsMTAgQEAKIAlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDIyKSAmIDE7CiAJaW50IGxlZnQsIHJpZ2h0OwogCi0JZG93bigmYWs0NTMxLT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJmFrNDUzMS0+cmVnX211dGV4KTsKIAlsZWZ0ID0gKGFrNDUzMS0+cmVnc1tsZWZ0X3JlZ10gPj4gbGVmdF9zaGlmdCkgJiBtYXNrOwogCXJpZ2h0ID0gKGFrNDUzMS0+cmVnc1tyaWdodF9yZWddID4+IHJpZ2h0X3NoaWZ0KSAmIG1hc2s7Ci0JdXAoJmFrNDUzMS0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmFrNDUzMS0+cmVnX211dGV4KTsKIAlpZiAoaW52ZXJ0KSB7CiAJCWxlZnQgPSBtYXNrIC0gbGVmdDsKIAkJcmlnaHQgPSBtYXNrIC0gcmlnaHQ7CkBAIC0xNzYsNyArMTc4LDcgQEAKIAl9CiAJbGVmdCA8PD0gbGVmdF9zaGlmdDsKIAlyaWdodCA8PD0gcmlnaHRfc2hpZnQ7Ci0JZG93bigmYWs0NTMxLT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJmFrNDUzMS0+cmVnX211dGV4KTsKIAlpZiAobGVmdF9yZWcgPT0gcmlnaHRfcmVnKSB7CiAJCWxlZnQgPSAoYWs0NTMxLT5yZWdzW2xlZnRfcmVnXSAmIH4oKG1hc2sgPDwgbGVmdF9zaGlmdCkgfCAobWFzayA8PCByaWdodF9zaGlmdCkpKSB8IGxlZnQgfCByaWdodDsKIAkJY2hhbmdlID0gbGVmdCAhPSBhazQ1MzEtPnJlZ3NbbGVmdF9yZWddOwpAQCAtMTg4LDcgKzE5MCw3IEBACiAJCWFrNDUzMS0+d3JpdGUoYWs0NTMxLCBsZWZ0X3JlZywgYWs0NTMxLT5yZWdzW2xlZnRfcmVnXSA9IGxlZnQpOwogCQlhazQ1MzEtPndyaXRlKGFrNDUzMSwgcmlnaHRfcmVnLCBhazQ1MzEtPnJlZ3NbcmlnaHRfcmVnXSA9IHJpZ2h0KTsKIAl9Ci0JdXAoJmFrNDUzMS0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmFrNDUzMS0+cmVnX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCkBAIC0yMTUsMTIgKzIxNywxMiBAQAogCWludCBsZWZ0X3NoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4MGY7CiAJaW50IHJpZ2h0X3NoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI0KSAmIDB4MGY7CiAKLQlkb3duKCZhazQ1MzEtPnJlZ19tdXRleCk7CisJbXV0ZXhfbG9jaygmYWs0NTMxLT5yZWdfbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKGFrNDUzMS0+cmVnc1tyZWcxXSA+PiBsZWZ0X3NoaWZ0KSAmIDE7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSAoYWs0NTMxLT5yZWdzW3JlZzJdID4+IGxlZnRfc2hpZnQpICYgMTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsyXSA9IChhazQ1MzEtPnJlZ3NbcmVnMV0gPj4gcmlnaHRfc2hpZnQpICYgMTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVszXSA9IChhazQ1MzEtPnJlZ3NbcmVnMl0gPj4gcmlnaHRfc2hpZnQpICYgMTsKLQl1cCgmYWs0NTMxLT5yZWdfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYWs0NTMxLT5yZWdfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzQsNyArMjM2LDcgQEAKIAlpbnQgY2hhbmdlOwogCWludCB2YWwxLCB2YWwyOwogCi0JZG93bigmYWs0NTMxLT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJmFrNDUzMS0+cmVnX211dGV4KTsKIAl2YWwxID0gYWs0NTMxLT5yZWdzW3JlZzFdICYgfigoMSA8PCBsZWZ0X3NoaWZ0KSB8ICgxIDw8IHJpZ2h0X3NoaWZ0KSk7CiAJdmFsMiA9IGFrNDUzMS0+cmVnc1tyZWcyXSAmIH4oKDEgPDwgbGVmdF9zaGlmdCkgfCAoMSA8PCByaWdodF9zaGlmdCkpOwogCXZhbDEgfD0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMSkgPDwgbGVmdF9zaGlmdDsKQEAgLTI0NCw3ICsyNDYsNyBAQAogCWNoYW5nZSA9IHZhbDEgIT0gYWs0NTMxLT5yZWdzW3JlZzFdIHx8IHZhbDIgIT0gYWs0NTMxLT5yZWdzW3JlZzJdOwogCWFrNDUzMS0+d3JpdGUoYWs0NTMxLCByZWcxLCBhazQ1MzEtPnJlZ3NbcmVnMV0gPSB2YWwxKTsKIAlhazQ1MzEtPndyaXRlKGFrNDUzMSwgcmVnMiwgYWs0NTMxLT5yZWdzW3JlZzJdID0gdmFsMik7Ci0JdXAoJmFrNDUzMS0+cmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmFrNDUzMS0+cmVnX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCkBAIC0zNjYsNyArMzY4LDcgQEAKIAlpZiAoYWs0NTMxID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCSphazQ1MzEgPSAqX2FrNDUzMTsKLQlpbml0X01VVEVYKCZhazQ1MzEtPnJlZ19tdXRleCk7CisJbXV0ZXhfaW5pdCgmYWs0NTMxLT5yZWdfbXV0ZXgpOwogCWlmICgoZXJyID0gc25kX2NvbXBvbmVudF9hZGQoY2FyZCwgIkFLNDUzMSIpKSA8IDApIHsKIAkJc25kX2FrNDUzMV9mcmVlKGFrNDUzMSk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWQxODg5LmMgYi9zb3VuZC9wY2kvYWQxODg5LmMKaW5kZXggYTIwODA3NS4uMmFhNWE3ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FkMTg4OS5jCisrKyBiL3NvdW5kL3BjaS9hZDE4ODkuYwpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC05MDksMTAgKzkxMCwxMCBAQAogCiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JCisKIAkvKiBjaGVjayBQQ0kgYXZhaWxhYmlsaXR5ICgzMmJpdCBETUEpICovCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCAweGZmZmZmZmZmKSA8IDAgfHwKLQkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgMHhmZmZmZmZmZikgPCAwKSB7CisJaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMzJCSVRfTUFTSykgPCAwIHx8CisJICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8zMkJJVF9NQVNLKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3Igc2V0dGluZyAzMi1iaXQgRE1BIG1hc2suXG4iKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggYjcyMTdhZC4uMTJlNjE4OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTI3Nyw3ICsyNzgsNyBAQAogCXVuc2lnbmVkIGludCBjb2RlY19ub3RfcmVhZHlfYml0czsJLyogZm9yIGNvZGVjIGRldGVjdGlvbiAqLwogCiAJaW50IHNwZGlmX292ZXJfYWNsaW5rOwkJLyogcGFzc2VkIGZyb20gdGhlIG1vZHVsZSBvcHRpb24gKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fbXV0ZXg7CS8qIHBsYXliYWNrIG9wZW4gbXV0ZXggKi8KKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsJLyogcGxheWJhY2sgb3BlbiBtdXRleCAqLwogfTsKIAogCkBAIC0xMDUxLDkgKzEwNTIsOSBAQAogCXN0cnVjdCBhdGlpeHAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJaW50IGVycjsKIAotCWRvd24oJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWVyciA9IHNuZF9hdGlpeHBfcGNtX29wZW4oc3Vic3RyZWFtLCAmY2hpcC0+ZG1hc1tBVElfRE1BX1BMQVlCQUNLXSwgMCk7Ci0JdXAoJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJc3Vic3RyZWFtLT5ydW50aW1lLT5ody5jaGFubmVsc19tYXggPSBjaGlwLT5tYXhfY2hhbm5lbHM7CkBAIC0xMDY4LDkgKzEwNjksOSBAQAogewogCXN0cnVjdCBhdGlpeHAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJaW50IGVycjsKLQlkb3duKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAllcnIgPSBzbmRfYXRpaXhwX3BjbV9jbG9zZShzdWJzdHJlYW0sICZjaGlwLT5kbWFzW0FUSV9ETUFfUExBWUJBQ0tdKTsKLQl1cCgmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDkwLDEyICsxMDkxLDEyIEBACiB7CiAJc3RydWN0IGF0aWl4cCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlpbnQgZXJyOwotCWRvd24oJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWlmIChjaGlwLT5zcGRpZl9vdmVyX2FjbGluaykgLyogc2hhcmUgRE1BX1BMQVlCQUNLICovCiAJCWVyciA9IHNuZF9hdGlpeHBfcGNtX29wZW4oc3Vic3RyZWFtLCAmY2hpcC0+ZG1hc1tBVElfRE1BX1BMQVlCQUNLXSwgMik7CiAJZWxzZQogCQllcnIgPSBzbmRfYXRpaXhwX3BjbV9vcGVuKHN1YnN0cmVhbSwgJmNoaXAtPmRtYXNbQVRJX0RNQV9TUERJRl0sIC0xKTsKLQl1cCgmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTAzLDEyICsxMTA0LDEyIEBACiB7CiAJc3RydWN0IGF0aWl4cCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlpbnQgZXJyOwotCWRvd24oJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWlmIChjaGlwLT5zcGRpZl9vdmVyX2FjbGluaykKIAkJZXJyID0gc25kX2F0aWl4cF9wY21fY2xvc2Uoc3Vic3RyZWFtLCAmY2hpcC0+ZG1hc1tBVElfRE1BX1BMQVlCQUNLXSk7CiAJZWxzZQogCQllcnIgPSBzbmRfYXRpaXhwX3BjbV9jbG9zZShzdWJzdHJlYW0sICZjaGlwLT5kbWFzW0FUSV9ETUFfU1BESUZdKTsKLQl1cCgmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNTYwLDcgKzE1NjEsNyBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7Ci0JaW5pdF9NVVRFWCgmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+b3Blbl9tdXRleCk7CiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAJY2hpcC0+cGNpID0gcGNpOwogCWNoaXAtPmlycSA9IC0xOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDhkOGZkNWEuLjFkMzc2NjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CkBAIC0yNTUsNyArMjU2LDcgQEAKIAl1bnNpZ25lZCBpbnQgY29kZWNfbm90X3JlYWR5X2JpdHM7CS8qIGZvciBjb2RlYyBkZXRlY3Rpb24gKi8KIAogCWludCBzcGRpZl9vdmVyX2FjbGluazsJCS8qIHBhc3NlZCBmcm9tIHRoZSBtb2R1bGUgb3B0aW9uICovCi0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX211dGV4OwkvKiBwbGF5YmFjayBvcGVuIG11dGV4ICovCisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CS8qIHBsYXliYWNrIG9wZW4gbXV0ZXggKi8KIH07CiAKIApAQCAtOTExLDkgKzkxMiw5IEBACiAJc3RydWN0IGF0aWl4cF9tb2RlbSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlpbnQgZXJyOwogCi0JZG93bigmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJZXJyID0gc25kX2F0aWl4cF9wY21fb3BlbihzdWJzdHJlYW0sICZjaGlwLT5kbWFzW0FUSV9ETUFfUExBWUJBQ0tdLCAwKTsKLQl1cCgmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKQEAgLTkyMyw5ICs5MjQsOSBAQAogewogCXN0cnVjdCBhdGlpeHBfbW9kZW0gKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJaW50IGVycjsKLQlkb3duKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAllcnIgPSBzbmRfYXRpaXhwX3BjbV9jbG9zZShzdWJzdHJlYW0sICZjaGlwLT5kbWFzW0FUSV9ETUFfUExBWUJBQ0tdKTsKLQl1cCgmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMjMzLDcgKzEyMzQsNyBAQAogCX0KIAogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7Ci0JaW5pdF9NVVRFWCgmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+b3Blbl9tdXRleCk7CiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAJY2hpcC0+cGNpID0gcGNpOwogCWNoaXAtPmlycSA9IC0xOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKaW5kZXggN2Q5MTg0Zi4uMTI2ODcwZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCkBAIC0xNTEsMTQgKzE1MSwxOCBAQAogCS8vIGNoZWNrIFBDSSBhdmFpbGFiaWxpdHkgKERNQSkuCiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMzJCSVRfTUFTSykpIHsKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8zMkJJVF9NQVNLKSA8IDAgfHwKKwkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzMyQklUX01BU0spIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCBETUEgbWFza1xuIik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAogCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwotCWlmIChjaGlwID09IE5VTEwpCisJaWYgKGNoaXAgPT0gTlVMTCkgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAKQEAgLTIwOCw2ICsyMTIsOCBAQAogCQlnb3RvIGFsbG9jX291dDsKIAl9CiAKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CisKIAkqcmNoaXAgPSBjaGlwOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaAppbmRleCBjMmFkMjY3Li5kNjVjY2IxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmgKQEAgLTM5LDggKzM5LDggQEAKICNpbmNsdWRlICJhdTg4eDBfd3QuaCIKICNlbmRpZgogCi0jZGVmaW5lCWh3cmVhZCh4LHkpIHJlYWRsKCh4KSsoKHkpPj4yKSkKLSNkZWZpbmUJaHd3cml0ZSh4LHkseikgd3JpdGVsKCh6KSwoeCkrKCh5KT4+MikpCisjZGVmaW5lCWh3cmVhZCh4LHkpIHJlYWRsKCh4KSsoeSkpCisjZGVmaW5lCWh3d3JpdGUoeCx5LHopIHdyaXRlbCgoeiksKHgpKyh5KSkKIAogLyogVm9ydGV4IE1QVTQwMSBkZWZpbmVzLiAqLwogI2RlZmluZQlNSURJX0NMT0NLX0RJVgkJMHg2MQpAQCAtMTEzLDcgKzExMyw3IEBACiAJLy9pbnQgdGhpc18wODsgICAgICAgICAgLyogU3RpbGwgdW5rbm93biAqLwogCWludCBmaWZvX2VuYWJsZWQ7CS8qIHRoaXNfMjQgKi8KIAlpbnQgZmlmb19zdGF0dXM7CS8qIHRoaXNfMWMgKi8KLQlpbnQgZG1hX2N0cmw7CQkvKiB0aGlzXzc4IChBREIpLCB0aGlzXzdjIChXVCkgKi8KKwl1MzIgZG1hX2N0cmw7CQkvKiB0aGlzXzc4IChBREIpLCB0aGlzXzdjIChXVCkgKi8KIAlpbnQgZG1hX3Vua25vd247CS8qIHRoaXNfNzQgKEFEQiksIHRoaXNfNzggKFdUKS4gV0RNOiArOCAqLwogCWludCBjZmcwOwogCWludCBjZmcxOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIAkvKiBQQ0kgaGFyZHdhcmUgcmVzb3VyY2VzICovCiAJdW5zaWduZWQgbG9uZyBpbzsKLQl1bnNpZ25lZCBsb25nIF9faW9tZW0gKm1taW87CisJdm9pZCBfX2lvbWVtICptbWlvOwogCXVuc2lnbmVkIGludCBpcnE7CiAJc3BpbmxvY2tfdCBsb2NrOwogCkBAIC0yMDEsMTQgKzIwMSwxNCBAQAogCQkJCSAgICAgaW50IGNvdW50KTsKIHN0YXRpYyB2b2lkIHZvcnRleF9hZGJkbWFfc2V0bW9kZSh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGFkYmRtYSwgaW50IGllLAogCQkJCSAgaW50IGRpciwgaW50IGZtdCwgaW50IGQsCi0JCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisJCQkJICB1MzIgb2Zmc2V0KTsKIHN0YXRpYyB2b2lkIHZvcnRleF9hZGJkbWFfc2V0c3RhcnRidWZmZXIodm9ydGV4X3QgKiB2b3J0ZXgsIGludCBhZGJkbWEsIGludCBzYik7CiAjaWZuZGVmIENISVBfQVU4ODEwCiBzdGF0aWMgdm9pZCB2b3J0ZXhfd3RkbWFfc2V0YnVmZmVycyh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IHd0ZG1hLAogCQkJCSAgICBzdHJ1Y3Qgc25kX3NnX2J1ZiAqIHNnYnVmLCBpbnQgc2l6ZSwKIAkJCQkgICAgaW50IGNvdW50KTsKIHN0YXRpYyB2b2lkIHZvcnRleF93dGRtYV9zZXRtb2RlKHZvcnRleF90ICogdm9ydGV4LCBpbnQgd3RkbWEsIGludCBpZSwgaW50IGZtdCwgaW50IGQsCS8qaW50IGUsICovCi0JCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKwkJCQkgdTMyIG9mZnNldCk7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfd3RkbWFfc2V0c3RhcnRidWZmZXIodm9ydGV4X3QgKiB2b3J0ZXgsIGludCB3dGRtYSwgaW50IHNiKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKaW5kZXggZTMzOTRmZS4uOWNhYzAyZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAKIHN0YXRpYyB2b2lkIHZvcnRleF9taXhlcl9pbml0KHZvcnRleF90ICogdm9ydGV4KQogewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1MzIgYWRkcjsKIAlpbnQgeDsKIAogCS8vIEZJWE1FOiBnZXQgcmlkIG9mIHRoaXMgY3JhcC4KQEAgLTYzOSw3ICs2MzksNyBAQAogCiBzdGF0aWMgdm9pZCB2b3J0ZXhfc3JjYmxvY2tfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7CisJdTMyIGFkZHI7CiAJaW50IHg7CiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFZPUlRFWF9TUkNfU09VUkNFU0laRSwgMHgxZmYpOwogCS8qCkBAIC0xMDM1LDcgKzEwMzUsNyBAQAogc3RhdGljIHZvaWQgdm9ydGV4X2ZpZm9faW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKIHsKIAlpbnQgeDsKLQl1bnNpZ25lZCBsb25nIGFkZHI7CisJdTMyIGFkZHI7CiAKIAkvKiBBREIgRE1BIGNoYW5uZWxzIGZpZm9zLiAqLwogCWFkZHIgPSBWT1JURVhfRklGT19BREJDVFJMICsgKChOUl9BREIgLSAxKSAqIDQpOwpAQCAtMTA1NCw3ICsxMDU0LDcgQEAKIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIGFkZHIsIEZJRk9fVTApOwogCQlpZiAoaHdyZWFkKHZvcnRleC0+bW1pbywgYWRkcikgIT0gRklGT19VMCkKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJiYWQgd3QgZmlmbyByZXNldCAoMHglMDhseCwgMHglMDh4KSFcbiIsCisJCQkgICAgICAgImJhZCB3dCBmaWZvIHJlc2V0ICgweCUwOHgsIDB4JTA4eCkhXG4iLAogCQkJICAgICAgIGFkZHIsIGh3cmVhZCh2b3J0ZXgtPm1taW8sIGFkZHIpKTsKIAkJdm9ydGV4X2ZpZm9fY2xlYXJ3dGRhdGEodm9ydGV4LCB4LCBGSUZPX1NJWkUpOwogCQlhZGRyIC09IDQ7CkBAIC0xMTUyLDcgKzExNTIsNyBAQAogCiBzdGF0aWMgdm9pZAogdm9ydGV4X2FkYmRtYV9zZXRtb2RlKHZvcnRleF90ICogdm9ydGV4LCBpbnQgYWRiZG1hLCBpbnQgaWUsIGludCBkaXIsCi0JCSAgICAgIGludCBmbXQsIGludCBkLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKKwkJICAgICAgaW50IGZtdCwgaW50IGQsIHUzMiBvZmZzZXQpCiB7CiAJc3RyZWFtX3QgKmRtYSA9ICZ2b3J0ZXgtPmRtYV9hZGJbYWRiZG1hXTsKIApAQCAtMTQxMSw3ICsxNDExLDcgQEAKIAogc3RhdGljIHZvaWQKIHZvcnRleF93dGRtYV9zZXRtb2RlKHZvcnRleF90ICogdm9ydGV4LCBpbnQgd3RkbWEsIGludCBpZSwgaW50IGZtdCwgaW50IGQsCi0JCSAgICAgLyppbnQgZSwgKi8gdW5zaWduZWQgbG9uZyBvZmZzZXQpCisJCSAgICAgLyppbnQgZSwgKi8gdTMyIG9mZnNldCkKIHsKIAlzdHJlYW1fdCAqZG1hID0gJnZvcnRleC0+ZG1hX3d0W3d0ZG1hXTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2VxLmMKaW5kZXggYzgyODBmOC4uNjRmYmZiYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcS5jCkBAIC0zNzcsMjMgKzM3NywyMyBAQAogCiAjZW5kaWYKIC8qIEdsb2JhbCBDb250cm9sICovCi1zdGF0aWMgdm9pZCB2b3J0ZXhfRXFId19TZXRDb250cm9sUmVnKHZvcnRleF90ICogdm9ydGV4LCB1bnNpZ25lZCBsb25nIHJlZykKK3N0YXRpYyB2b2lkIHZvcnRleF9FcUh3X1NldENvbnRyb2xSZWcodm9ydGV4X3QgKiB2b3J0ZXgsIHUzMiByZWcpCiB7CiAJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIDB4MmI0NDAsIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIHZvcnRleF9FcUh3X1NldFNhbXBsZVJhdGUodm9ydGV4X3QgKiB2b3J0ZXgsIGludCBzcikKK3N0YXRpYyB2b2lkIHZvcnRleF9FcUh3X1NldFNhbXBsZVJhdGUodm9ydGV4X3QgKiB2b3J0ZXgsIHUzMiBzcikKIHsKIAlod3dyaXRlKHZvcnRleC0+bW1pbywgMHgyYjQ0MCwgKChzciAmIDB4MWYpIDw8IDMpIHwgMHhiODAwKTsKIH0KIAogI2lmIDAKLXN0YXRpYyB2b2lkIHZvcnRleF9FcUh3X0dldENvbnRyb2xSZWcodm9ydGV4X3QgKiB2b3J0ZXgsIHVuc2lnbmVkIGxvbmcgKnJlZykKK3N0YXRpYyB2b2lkIHZvcnRleF9FcUh3X0dldENvbnRyb2xSZWcodm9ydGV4X3QgKiB2b3J0ZXgsIHUzMiAqcmVnKQogewogCSpyZWcgPSBod3JlYWQodm9ydGV4LT5tbWlvLCAweDJiNDQwKTsKIH0KIAotc3RhdGljIHZvaWQgdm9ydGV4X0VxSHdfR2V0U2FtcGxlUmF0ZSh2b3J0ZXhfdCAqIHZvcnRleCwgaW50ICpzcikKK3N0YXRpYyB2b2lkIHZvcnRleF9FcUh3X0dldFNhbXBsZVJhdGUodm9ydGV4X3QgKiB2b3J0ZXgsIHUzMiAqc3IpCiB7CiAJKnNyID0gKGh3cmVhZCh2b3J0ZXgtPm1taW8sIDB4MmI0NDApID4+IDMpICYgMHgxZjsKIH0KQEAgLTU1NCw3ICs1NTQsNyBAQAogCiAjaWYgMAogc3RhdGljIGludAotdm9ydGV4X0VxbHpyX0dldEFsbEJhbmRzKHZvcnRleF90ICogdm9ydGV4LCB1MTYgKiBnYWlucywgdW5zaWduZWQgbG9uZyAqY250KQordm9ydGV4X0VxbHpyX0dldEFsbEJhbmRzKHZvcnRleF90ICogdm9ydGV4LCB1MTYgKiBnYWlucywgczMyICpjbnQpCiB7CiAJZXFsenJfdCAqZXEgPSAmKHZvcnRleC0+ZXEpOwogCWludCBzaSA9IDA7CkBAIC01ODYsNyArNTg2LDcgQEAKIH0KIAogc3RhdGljIGludAotdm9ydGV4X0VxbHpyX1NldEFsbEJhbmRzKHZvcnRleF90ICogdm9ydGV4LCB1MTYgZ2FpbnNbXSwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvcnRleF9FcWx6cl9TZXRBbGxCYW5kcyh2b3J0ZXhfdCAqIHZvcnRleCwgdTE2IGdhaW5zW10sIHMzMiBjb3VudCkKIHsKIAllcWx6cl90ICplcSA9ICYodm9ydGV4LT5lcSk7CiAJaW50IGk7CkBAIC02MDQsMTEgKzYwNCwxMCBAQAogfQogCiBzdGF0aWMgdm9pZAotdm9ydGV4X0VxbHpyX1NldEEzZEJ5cGFzc0dhaW4odm9ydGV4X3QgKiB2b3J0ZXgsIHVuc2lnbmVkIGxvbmcgYSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYikKK3ZvcnRleF9FcWx6cl9TZXRBM2RCeXBhc3NHYWluKHZvcnRleF90ICogdm9ydGV4LCB1MzIgYSwgdTMyIGIpCiB7CiAJZXFsenJfdCAqZXEgPSAmKHZvcnRleC0+ZXEpOwotCWludCBlYXgsIGVieDsKKwl1MzIgZWF4LCBlYng7CiAKIAllcS0+dGhpczU4ID0gYTsKIAllcS0+dGhpczVjID0gYjsKQEAgLTYyNCw3ICs2MjMsNyBAQAogc3RhdGljIHZvaWQgdm9ydGV4X0VxbHpyX1Byb2dyYW1BM2RCeXBhc3NHYWluKHZvcnRleF90ICogdm9ydGV4KQogewogCWVxbHpyX3QgKmVxID0gJih2b3J0ZXgtPmVxKTsKLQlpbnQgZWF4LCBlYng7CisJdTMyIGVheCwgZWJ4OwogCiAJaWYgKGVxLT50aGlzNTQpCiAJCWVheCA9IGVxLT50aGlzMGU7CkBAIC02NDEsNyArNjQwLDcgQEAKIAkJdm9ydGV4X0VxSHdfWmVyb0EzRElPKHZvcnRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIHZvcnRleF9FcWx6cl9TZXRCeXBhc3Modm9ydGV4X3QgKiB2b3J0ZXgsIGxvbmcgYnApCitzdGF0aWMgdm9pZCB2b3J0ZXhfRXFsenJfU2V0QnlwYXNzKHZvcnRleF90ICogdm9ydGV4LCB1MzIgYnApCiB7CiAJZXFsenJfdCAqZXEgPSAmKHZvcnRleC0+ZXEpOwogCQpAQCAtNjUxLDggKzY1MCw4IEBACiAJCXZvcnRleF9FcUh3X1NldEJ5cGFzc0dhaW4odm9ydGV4LCBlcS0+dGhpczA4LCBlcS0+dGhpczA4KTsKIAl9IGVsc2UgewogCQkvKiBFUSBkaXNhYmxlZC4gKi8KLQkJdm9ydGV4X0VxSHdfU2V0TGVmdEdhaW5zVGFyZ2V0KHZvcnRleCwgKHUxNiAqKSAoZXEtPnRoaXMxNCkpOwotCQl2b3J0ZXhfRXFId19TZXRSaWdodEdhaW5zVGFyZ2V0KHZvcnRleCwgKHUxNiAqKSAoZXEtPnRoaXMxNCkpOworCQl2b3J0ZXhfRXFId19TZXRMZWZ0R2FpbnNUYXJnZXQodm9ydGV4LCBlcS0+dGhpczE0X2FycmF5KTsKKwkJdm9ydGV4X0VxSHdfU2V0UmlnaHRHYWluc1RhcmdldCh2b3J0ZXgsIGVxLT50aGlzMTRfYXJyYXkpOwogCQl2b3J0ZXhfRXFId19TZXRCeXBhc3NHYWluKHZvcnRleCwgZXEtPnRoaXMwYywgZXEtPnRoaXMwYyk7CiAJfQogCXZvcnRleF9FcWx6cl9Qcm9ncmFtQTNkQnlwYXNzR2Fpbih2b3J0ZXgpOwpAQCAtNzA2LDcgKzcwNSw3IEBACiAJZXEtPnRoaXM1YyA9IDB4ZmZmZjsKIAogCS8qIFNldCBnYWlucy4gKi8KLQltZW1zZXQoZXEtPnRoaXMxNCwgMCwgMiAqIDEwKTsKKwltZW1zZXQoZXEtPnRoaXMxNF9hcnJheSwgMCwgc2l6ZW9mKGVxLT50aGlzMTRfYXJyYXkpKTsKIAogCS8qIEFjdHVhbCBpbml0LiAqLwogCXZvcnRleF9FcUh3X1plcm9TdGF0ZSh2b3J0ZXgpOwpAQCAtNzkyLDcgKzc5MSw3IEBACiB7CiAJdm9ydGV4X3QgKnZvcnRleCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgaSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwotCXUxNiBnYWluTCwgZ2FpblI7CisJdTE2IGdhaW5MID0gMCwgZ2FpblIgPSAwOwogCiAJdm9ydGV4X0VxbHpyX0dldExlZnRHYWluKHZvcnRleCwgaSwgJmdhaW5MKTsKIAl2b3J0ZXhfRXFsenJfR2V0UmlnaHRHYWluKHZvcnRleCwgaSwgJmdhaW5SKTsKQEAgLTgwNiw3ICs4MDUsNyBAQAogewogCXZvcnRleF90ICp2b3J0ZXggPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGNoYW5nZWQgPSAwLCBpID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7Ci0JdTE2IGdhaW5MLCBnYWluUjsKKwl1MTYgZ2FpbkwgPSAwLCBnYWluUiA9IDA7CiAKIAl2b3J0ZXhfRXFsenJfR2V0TGVmdEdhaW4odm9ydGV4LCBpLCAmZ2FpbkwpOwogCXZvcnRleF9FcWx6cl9HZXRSaWdodEdhaW4odm9ydGV4LCBpLCAmZ2FpblIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuaCBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2VxLmgKaW5kZXggZTQ5YmM2Mi4uNDc0Y2QwMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXEuaAorKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcS5oCkBAIC0xMywzMSArMTMsMjggQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl1MTYgTGVmdENvZWZzWzUwXTsJLy8weDQKIAl1MTYgUmlnaHRDb2Vmc1s1MF07CS8vIDB4NjgKLQl1MTYgTGVmdEdhaW5zWzIwXTsJLy8weGQwCi0JdTE2IFJpZ2h0R2FpbnNbMjBdOwkvLzB4ZTQKKwl1MTYgTGVmdEdhaW5zWzEwXTsJLy8weGQwCisJdTE2IFJpZ2h0R2FpbnNbMTBdOwkvLzB4ZTQKIH0gYXV4eEVxQ29lZmZTZXRfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCAqdGhpczAwOwkvKkNBc3A0SHdJTyAqLwotCWxvbmcgdGhpczA0OwkJLyogSG93IG1hbnkgZmlsdGVycyBmb3IgZWFjaCBzaWRlIChkZWZhdWx0ID0gMTApICovCi0JbG9uZyB0aGlzMDg7CQkvKiBpbml0ZWQgdG8gY2Vyby4gU3RlcmVvIGZsYWc/ICovCisJczMyIHRoaXMwNDsJCS8qIEhvdyBtYW55IGZpbHRlcnMgZm9yIGVhY2ggc2lkZSAoZGVmYXVsdCA9IDEwKSAqLworCXMzMiB0aGlzMDg7CQkvKiBpbml0ZWQgdG8gY2Vyby4gU3RlcmVvIGZsYWc/ICovCiB9IGVxaHdfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCAqdGhpczAwOwkvKkNBc3A0Q29yZSAqLwogCWVxaHdfdCB0aGlzMDQ7CQkvKiBDSHdFcSAqLwotCXNob3J0IHRoaXMwODsJCS8qIEJhZCBjb2RlYyBmbGFnID8gU2V0QnlwYXNzR2FpbjogYnlwYXNzIGdhaW4gKi8KLQlzaG9ydCB0aGlzMGE7Ci0Jc2hvcnQgdGhpczBjOwkJLyogU2V0QnlwYXNzR2FpbjogYnlwYXNzIGdhaW4gd2hlbiB0aGlzMjggaXMgbm90IHNldC4gKi8KLQlzaG9ydCB0aGlzMGU7CisJdTE2IHRoaXMwODsJCS8qIEJhZCBjb2RlYyBmbGFnID8gU2V0QnlwYXNzR2FpbjogYnlwYXNzIGdhaW4gKi8KKwl1MTYgdGhpczBhOworCXUxNiB0aGlzMGM7CQkvKiBTZXRCeXBhc3NHYWluOiBieXBhc3MgZ2FpbiB3aGVuIHRoaXMyOCBpcyBub3Qgc2V0LiAqLworCXUxNiB0aGlzMGU7CiAKLQlsb25nIHRoaXMxMDsJCS8qIEhvdyBtYW55IGdhaW5zIGFyZSB1c2VkIGZvciBlYWNoIHNpZGUgKHJpZ2h0IG9yIGxlZnQpLiAqLwotCXUxNiB0aGlzMTRbMzJdOwkJLyogU2V0TGVmdEdhaW5zVGFyZ2V0OiBMZWZ0IChhbmQgcmlnaHQ/KSBFUSBnYWlucyAgKi8KLQlsb25nIHRoaXMyNDsKLQlsb25nIHRoaXMyODsJCS8qIGZsYWcgcmVsYXRlZCB0byBFUSBlbmFibGVkIG9yIG5vdC4gR2FuZyBmbGFnID8gKi8KLQlsb25nIHRoaXM1NDsJCS8qIFNldEJ5cGFzcyAqLwotCWxvbmcgdGhpczU4OwotCWxvbmcgdGhpczVjOworCXMzMiB0aGlzMTA7CQkvKiBIb3cgbWFueSBnYWlucyBhcmUgdXNlZCBmb3IgZWFjaCBzaWRlIChyaWdodCBvciBsZWZ0KS4gKi8KKwl1MTYgdGhpczE0X2FycmF5WzEwXTsJLyogU2V0TGVmdEdhaW5zVGFyZ2V0OiBMZWZ0IChhbmQgcmlnaHQ/KSBFUSBnYWlucyAgKi8KKwlzMzIgdGhpczI4OwkJLyogZmxhZyByZWxhdGVkIHRvIEVRIGVuYWJsZWQgb3Igbm90LiBHYW5nIGZsYWcgPyAqLworCXMzMiB0aGlzNTQ7CQkvKiBTZXRCeXBhc3MgKi8KKwlzMzIgdGhpczU4OworCXMzMiB0aGlzNWM7CiAJLyoweDYwICovIGF1eHhFcUNvZWZmU2V0X3QgY29lZnNldDsKIAkvKiA1MCB1MTYgd29yZCBlYWNoIGNoYW5uZWwuICovCiAJdTE2IHRoaXMxMzBbMjBdOwkvKiBMZWZ0IGFuZCBSaWdodCBnYWlucyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfZXFkYXRhLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcWRhdGEuYwppbmRleCBhYmY4ZDZhLi5jZThkY2E4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcWRhdGEuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9lcWRhdGEuYwpAQCAtMTA0LDcgKzEwNCwxMSBAQAogfTsKIAogLypfcm9kYXRhYmEwOiovCi1zdGF0aWMgbG9uZyBlcV9sZXZlbHNbMzJdID0geworc3RhdGljIHUxNiBlcV9sZXZlbHNbNjRdID0geworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAogCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAogCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAogCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfbXB1NDAxLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9tcHU0MDEuYwppbmRleCA4YmE2ZGQzLi44NzNmNDg2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9tcHU0MDEuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9tcHU0MDEuYwpAQCAtOTUsNyArOTUsNyBAQAogCQlyZXR1cm4gdGVtcDsKIAl9CiAjZWxzZQotCXBvcnQgPSAodW5zaWduZWQgbG9uZykodm9ydGV4LT5tbWlvICsgKFZPUlRFWF9NSURJX0RBVEEgPj4gMikpOworCXBvcnQgPSAodW5zaWduZWQgbG9uZykodm9ydGV4LT5tbWlvICsgVk9SVEVYX01JRElfREFUQSk7CiAJaWYgKCh0ZW1wID0KIAkgICAgIHNuZF9tcHU0MDFfdWFydF9uZXcodm9ydGV4LT5jYXJkLCAwLCBNUFU0MDFfSFdfQVVSRUFMLCBwb3J0LAogCQkJCSAxLCAwLCAwLCAmcm1pZGkpKSAhPSAwKSB7CkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJcmV0dXJuIHRlbXA7CiAJfQogCW1wdSA9IHJtaWRpLT5wcml2YXRlX2RhdGE7Ci0JbXB1LT5jcG9ydCA9ICh1bnNpZ25lZCBsb25nKSh2b3J0ZXgtPm1taW8gKyAoVk9SVEVYX01JRElfQ01EID4+IDIpKTsKKwltcHUtPmNwb3J0ID0gKHVuc2lnbmVkIGxvbmcpKHZvcnRleC0+bW1pbyArIFZPUlRFWF9NSURJX0NNRCk7CiAjZW5kaWYKIAl2b3J0ZXgtPnJtaWRpID0gcm1pZGk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYwppbmRleCA2NWYzNzViLi5kM2U2NjJhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAkJCQkJdW5zaWduZWQgY2hhciBtaXgsIGludCBhKTsKIHN0YXRpYyB2b2lkIHZvcnRleF9maWZvX3d0aW5pdGlhbGl6ZSh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGZpZm8sIGludCBqKTsKIHN0YXRpYyBpbnQgdm9ydGV4X3d0X1NldFJlZyh2b3J0ZXhfdCAqIHZvcnRleCwgdW5zaWduZWQgY2hhciByZWcsIGludCB3dCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIHZhbCk7CisJCQkgICAgdTMyIHZhbCk7CiAKIC8qIFdUICovCiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogLyogV1QgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgZ2VuZXJpYyByZWdpc3RlciBpbnRlcmZhY2UuICovCiBzdGF0aWMgaW50CiB2b3J0ZXhfd3RfU2V0UmVnMih2b3J0ZXhfdCAqIHZvcnRleCwgdW5zaWduZWQgY2hhciByZWcsIGludCB3dCwKLQkJICB1bnNpZ25lZCBzaG9ydCB2YWwpCisJCSAgdTE2IHZhbCkKIHsKIAkvKgogCSAgIGludCBlYXgsIGVkeDsKQEAgLTE5MCw3ICsxOTAsNyBAQAogI2VuZGlmCiBzdGF0aWMgaW50CiB2b3J0ZXhfd3RfU2V0UmVnKHZvcnRleF90ICogdm9ydGV4LCB1bnNpZ25lZCBjaGFyIHJlZywgaW50IHd0LAotCQkgdW5zaWduZWQgbG9uZyB2YWwpCisJCSB1MzIgdmFsKQogewogCWludCBlY3g7CiAKQEAgLTI3OSw3ICsyNzksNyBAQAogCiBzdGF0aWMgdm9pZCB2b3J0ZXhfd3RfaW5pdCh2b3J0ZXhfdCAqIHZvcnRleCkKIHsKLQlpbnQgdmFyNCwgdmFyOCwgdmFyYywgdmFyMTAgPSAwLCBlZGk7CisJdTMyIHZhcjQsIHZhcjgsIHZhcmMsIHZhcjEwID0gMCwgZWRpOwogCiAJdmFyMTAgJj0gMHhGRkZGRkZFMzsKIAl2YXIxMCB8PSAweDIyOwpAQCAtMzUzLDcgKzM1Myw3IEBACiBzdGF0aWMgdm9pZCB2b3J0ZXhfd3RfU2V0RnJlcXVlbmN5KHZvcnRleF90ICogdm9ydGV4LCBpbnQgd3QsIHVuc2lnbmVkIGludCBzcikKIHsKIAl3dF92b2ljZV90ICp2b2ljZSA9ICYodm9ydGV4LT53dF92b2ljZVt3dF0pOwotCWxvbmcgaW50IGVheCwgZWR4OworCXUzMiBlYXgsIGVkeDsKIAogCS8vRklYTUU6IDY0IGJpdCBvcGVyYXRpb24uCiAJZWF4ID0gKChzciA8PCAweGYpICogMHg1NzYxOUYxKSAmIDB4ZmZmZmZmZmY7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF93dC5oIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfd3QuaAppbmRleCBkNTM2Yzg4Li4zOGQ5OGY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF93dC5oCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3d0LmgKQEAgLTUzLDExICs1MywxMSBAQAogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQgcGFybTA7CS8qIHRoaXNfMUU0ICovCi0JdW5zaWduZWQgaW50IHBhcm0xOwkvKiB0aGlzXzFFOCAqLwotCXVuc2lnbmVkIGludCBwYXJtMjsJLyogdGhpc18xRUMgKi8KLQl1bnNpZ25lZCBpbnQgcGFybTM7CS8qIHRoaXNfMUYwICovCi0JdW5zaWduZWQgaW50IHRoaXNfMUQwOworCXUzMiBwYXJtMDsJLyogdGhpc18xRTQgKi8KKwl1MzIgcGFybTE7CS8qIHRoaXNfMUU4ICovCisJdTMyIHBhcm0yOwkvKiB0aGlzXzFFQyAqLworCXUzMiBwYXJtMzsJLyogdGhpc18xRjAgKi8KKwl1MzIgdGhpc18xRDA7CiB9IHd0X3ZvaWNlX3Q7CiAKICNlbmRpZgkJCQkvKiBfQVU4OFgwX1dUX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3h0YWxrLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF94dGFsay5jCmluZGV4IGRmOTE1ZmEuLjQ1MzRlMTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3h0YWxrLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfeHRhbGsuYwpAQCAtNTYyLDcgKzU2Miw3IEBACiB2b3J0ZXhfWHRhbGtId19TZXREZWxheSh2b3J0ZXhfdCAqIHZvcnRleCwgdW5zaWduZWQgc2hvcnQgcmlnaHQsCiAJCQl1bnNpZ25lZCBzaG9ydCBsZWZ0KQogewotCWludCBlc3AwID0gMDsKKwl1MzIgZXNwMCA9IDA7CiAKIAllc3AwICY9IDB4MUZGRkZGRkY7CiAJZXNwMCB8PSAweEEwMDAwMDAwOwpAQCAtNjMyLDE4ICs2MzIsMTggQEAKIC8qIENvbnRyb2wvR2xvYmFsIHN0dWZmICovCiAKICNpZiAwCi1zdGF0aWMgdm9pZCB2b3J0ZXhfWHRhbGtId19TZXRDb250cm9sUmVnKHZvcnRleF90ICogdm9ydGV4LCB1bnNpZ25lZCBsb25nIGN0cmwpCitzdGF0aWMgdm9pZCB2b3J0ZXhfWHRhbGtId19TZXRDb250cm9sUmVnKHZvcnRleF90ICogdm9ydGV4LCB1MzIgY3RybCkKIHsKIAlod3dyaXRlKHZvcnRleC0+bW1pbywgMHgyNDY2MCwgY3RybCk7CiB9Ci1zdGF0aWMgdm9pZCB2b3J0ZXhfWHRhbGtId19HZXRDb250cm9sUmVnKHZvcnRleF90ICogdm9ydGV4LCB1bnNpZ25lZCBsb25nICpjdHJsKQorc3RhdGljIHZvaWQgdm9ydGV4X1h0YWxrSHdfR2V0Q29udHJvbFJlZyh2b3J0ZXhfdCAqIHZvcnRleCwgdTMyICpjdHJsKQogewogCSpjdHJsID0gaHdyZWFkKHZvcnRleC0+bW1pbywgMHgyNDY2MCk7CiB9CiAjZW5kaWYKLXN0YXRpYyB2b2lkIHZvcnRleF9YdGFsa0h3X1NldFNhbXBsZVJhdGUodm9ydGV4X3QgKiB2b3J0ZXgsIGludCBzcikKK3N0YXRpYyB2b2lkIHZvcnRleF9YdGFsa0h3X1NldFNhbXBsZVJhdGUodm9ydGV4X3QgKiB2b3J0ZXgsIHUzMiBzcikKIHsKLQlpbnQgdGVtcDsKKwl1MzIgdGVtcDsKIAogCXRlbXAgPSAoaHdyZWFkKHZvcnRleC0+bW1pbywgMHgyNDY2MCkgJiAweDFGRkZGRkZGKSB8IDB4QzAwMDAwMDA7CiAJdGVtcCA9ICh0ZW1wICYgMHhmZmZmZmYwNykgfCAoKHNyICYgMHgxZikgPDwgMyk7CkBAIC02NTEsNyArNjUxLDcgQEAKIH0KIAogI2lmIDAKLXN0YXRpYyB2b2lkIHZvcnRleF9YdGFsa0h3X0dldFNhbXBsZVJhdGUodm9ydGV4X3QgKiB2b3J0ZXgsIGludCAqc3IpCitzdGF0aWMgdm9pZCB2b3J0ZXhfWHRhbGtId19HZXRTYW1wbGVSYXRlKHZvcnRleF90ICogdm9ydGV4LCB1MzIgKnNyKQogewogCSpzciA9IChod3JlYWQodm9ydGV4LT5tbWlvLCAweDI0NjYwKSA+PiAzKSAmIDB4MWY7CiB9CkBAIC02NTksNyArNjU5LDcgQEAKICNlbmRpZgogc3RhdGljIHZvaWQgdm9ydGV4X1h0YWxrSHdfRW5hYmxlKHZvcnRleF90ICogdm9ydGV4KQogewotCWludCB0ZW1wOworCXUzMiB0ZW1wOwogCiAJdGVtcCA9IChod3JlYWQodm9ydGV4LT5tbWlvLCAweDI0NjYwKSAmIDB4MUZGRkZGRkYpIHwgMHhDMDAwMDAwMDsKIAl0ZW1wIHw9IDE7CkBAIC02NjksNyArNjY5LDcgQEAKIAogc3RhdGljIHZvaWQgdm9ydGV4X1h0YWxrSHdfRGlzYWJsZSh2b3J0ZXhfdCAqIHZvcnRleCkKIHsKLQlpbnQgdGVtcDsKKwl1MzIgdGVtcDsKIAogCXRlbXAgPSAoaHdyZWFkKHZvcnRleC0+bW1pbywgMHgyNDY2MCkgJiAweDFGRkZGRkZGKSB8IDB4QzAwMDAwMDA7CiAJdGVtcCAmPSAweGZmZmZmZmZlOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfeHRhbGsuaCBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3h0YWxrLmgKaW5kZXggMGI4ZDdiNi4uN2Y0NTM0YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfeHRhbGsuaAorKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF94dGFsay5oCkBAIC0zOSwxNiArMzksMTYgQEAKICNkZWZpbmUgWFRfU1BFQUtFUjEJCTMKICNkZWZpbmUgWFRfRElBTU9ORAkJNAogCi10eXBlZGVmIGxvbmcgeHRhbGtfZGxpbmVfdFtYVERMSU5FX1NaXTsKLXR5cGVkZWYgc2hvcnQgeHRhbGtfZ2FpbnNfdFtYVEdBSU5TX1NaXTsKLXR5cGVkZWYgc2hvcnQgeHRhbGtfaW5zdGF0ZV90W1hUSU5TVF9TWl07Ci10eXBlZGVmIHNob3J0IHh0YWxrX2NvZWZzX3RbNV1bNV07Ci10eXBlZGVmIHNob3J0IHh0YWxrX3N0YXRlX3RbNV1bNF07Cit0eXBlZGVmIHUzMiB4dGFsa19kbGluZV90W1hURExJTkVfU1pdOwordHlwZWRlZiB1MTYgeHRhbGtfZ2FpbnNfdFtYVEdBSU5TX1NaXTsKK3R5cGVkZWYgdTE2IHh0YWxrX2luc3RhdGVfdFtYVElOU1RfU1pdOwordHlwZWRlZiB1MTYgeHRhbGtfY29lZnNfdFs1XVs1XTsKK3R5cGVkZWYgdTE2IHh0YWxrX3N0YXRlX3RbNV1bNF07CiAKIHN0YXRpYyB2b2lkIHZvcnRleF9YdGFsa0h3X1NldEdhaW5zKHZvcnRleF90ICogdm9ydGV4LAogCQkJCSAgICB4dGFsa19nYWluc190IGNvbnN0IGdhaW5zKTsKIHN0YXRpYyB2b2lkIHZvcnRleF9YdGFsa0h3X1NldEdhaW5zQWxsQ2hhbih2b3J0ZXhfdCAqIHZvcnRleCk7Ci1zdGF0aWMgdm9pZCB2b3J0ZXhfWHRhbGtId19TZXRTYW1wbGVSYXRlKHZvcnRleF90ICogdm9ydGV4LCBpbnQgc3IpOworc3RhdGljIHZvaWQgdm9ydGV4X1h0YWxrSHdfU2V0U2FtcGxlUmF0ZSh2b3J0ZXhfdCAqIHZvcnRleCwgdTMyIHNyKTsKIHN0YXRpYyB2b2lkIHZvcnRleF9YdGFsa0h3X1Byb2dyYW1QaXBlKHZvcnRleF90ICogdm9ydGV4KTsKIHN0YXRpYyB2b2lkIHZvcnRleF9YdGFsa0h3X1Byb2dyYW1QaXBlKHZvcnRleF90ICogdm9ydGV4KTsKIHN0YXRpYyB2b2lkIHZvcnRleF9YdGFsa0h3X1Byb2dyYW1YdGFsa1dpZGUodm9ydGV4X3QgKiB2b3J0ZXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2J0ODd4LmMgYi9zb3VuZC9wY2kvYnQ4N3guYwppbmRleCBjODQwYTRjLi43YjQ0YThkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYnQ4N3guYworKysgYi9zb3VuZC9wY2kvYnQ4N3guYwpAQCAtNzgzLDYgKzc4Myw4IEBACiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgwMDcwLCAweGZmMDEsIDQ0MTAwKSwKIAkvKiBBVmVyTWVkaWEgU3R1ZGlvIE5vLiAxMDMsIDIwMywgLi4uPyAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTQ2MSwgMHgwMDAzLCA0ODAwMCksCisJLyogTGVhZHRlayBXaW5mYXN0IHR2IDIwMDB4cCBkZWx1eCAqLworCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTA3ZCwgMHg2NjA2LCAzMjAwMCksCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNuZF9idDg3eF9pZHMpOwpAQCAtNzkzLDEyICs3OTUsMTUgQEAKIAl1bnNpZ25lZCBzaG9ydCBzdWJ2ZW5kb3IsIHN1YmRldmljZTsKIH0gYmxhY2tsaXN0W10gX19kZXZpbml0ZGF0YSA9IHsKIAl7MHgwMDcxLCAweDAxMDF9LCAvKiBOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWICovCisJezB4MTFiZCwgMHgwMDFjfSwgLyogUGlubmFjbGUgUENUViBTYXQgKi8KIAl7MHgxMWJkLCAweDAwMjZ9LCAvKiBQaW5uYWNsZSBQQ1RWIFNBVCBDSSAqLwogCXsweDE0NjEsIDB4MDc2MX0sIC8qIEFWZXJtZWRpYSBBdmVyVFYgRFZCLVQgKi8KIAl7MHgxNDYxLCAweDA3NzF9LCAvKiBBVmVybWVkaWEgRFZCLVQgNzcxICovCiAJezB4MTgyMiwgMHgwMDAxfSwgLyogVHdpbmhhbiBWaXNpb25QbHVzIERWQi1UICovCisJezB4MThhYywgMHhkNTAwfSwgLyogRFZJQ08gRnVzaW9uSERUViA1IExpdGUgKi8KIAl7MHgxOGFjLCAweGRiMTB9LCAvKiBEVklDTyBGdXNpb25IRFRWIERWQi1UIExpdGUgKi8KIAl7MHgyNzBmLCAweGZjMDB9LCAvKiBDaGFpbnRlY2ggRGlnaXRvcCBEU1QtMTAwMCBEVkItUyAqLworCXsweDcwNjMsIDB4MjAwMH0sIC8qIHBjSERUViBIRC0yMDAwIFRWICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyOwpAQCAtODE2LDEzICs4MjEsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShibGFja2xpc3QpOyArK2kpCiAJCWlmIChibGFja2xpc3RbaV0uc3VidmVuZG9yID09IHBjaS0+c3Vic3lzdGVtX3ZlbmRvciAmJgogCQkgICAgYmxhY2tsaXN0W2ldLnN1YmRldmljZSA9PSBwY2ktPnN1YnN5c3RlbV9kZXZpY2UpIHsKLQkJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiY2FyZCAlIzA0eDolIzA0eCBoYXMgbm8gYXVkaW9cbiIsCi0JCQkJICAgIHBjaS0+c3Vic3lzdGVtX3ZlbmRvciwgcGNpLT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiY2FyZCAlIzA0eC0lIzA0eDolIzA0eCBoYXMgbm8gYXVkaW9cbiIsCisJCQkJICAgIHBjaS0+ZGV2aWNlLCBwY2ktPnN1YnN5c3RlbV92ZW5kb3IsIHBjaS0+c3Vic3lzdGVtX2RldmljZSk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAidW5rbm93biBjYXJkICUjMDR4OiUjMDR4LCB1c2luZyBkZWZhdWx0IHJhdGUgMzIwMDBcbiIsCi0JCSAgIHBjaS0+c3Vic3lzdGVtX3ZlbmRvciwgcGNpLT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAidW5rbm93biBjYXJkICUjMDR4LSUjMDR4OiUjMDR4LCB1c2luZyBkZWZhdWx0IHJhdGUgMzIwMDBcbiIsCisJICAgICAgICAgICBwY2ktPmRldmljZSwgcGNpLT5zdWJzeXN0ZW1fdmVuZG9yLCBwY2ktPnN1YnN5c3RlbV9kZXZpY2UpOwogCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicGxlYXNlIG1haWwgaWQsIGJvYXJkIG5hbWUsIGFuZCwgIgogCQkgICAiaWYgaXQgd29ya3MsIHRoZSBjb3JyZWN0IGRpZ2l0YWxfcmF0ZSBvcHRpb24gdG8gIgogCQkgICAiPGFsc2EtZGV2ZWxAbGlzdHMuc2YubmV0PlxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggYzAzYjBhMC4uMmVjYmRkYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTQzOSw3ICs0NDAsNyBAQAogCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlICpod19pbmZvWzNdOyAvKiBmb3IgcGxheWJhY2tzICovCiAKIAlpbnQgb3BlbmVkWzJdOwkvKiBvcGVuIG1vZGUgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fbXV0ZXg7CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAKIAl1bnNpZ25lZCBpbnQgbWl4ZXJfaW5zZW5zaXRpdmU6IDE7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqbWl4ZXJfcmVzX2N0bFtDTV9TQVZFRF9NSVhFUlNdOwpAQCAtNjQxLDE0ICs2NDIsMTQgQEAKIHsKIAlzdHJ1Y3QgY21pcGNpICpjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlpZiAocGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcykgPiAyKSB7Ci0JCWRvd24oJmNtLT5vcGVuX211dGV4KTsKKwkJbXV0ZXhfbG9jaygmY20tPm9wZW5fbXV0ZXgpOwogCQlpZiAoY20tPm9wZW5lZFtDTV9DSF9QTEFZXSkgewotCQkJdXAoJmNtLT5vcGVuX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmY20tPm9wZW5fbXV0ZXgpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCQkvKiByZXNlcnZlIHRoZSBjaGFubmVsIEEgKi8KIAkJY20tPm9wZW5lZFtDTV9DSF9QTEFZXSA9IENNX09QRU5fUExBWUJBQ0tfTVVMVEk7Ci0JCXVwKCZjbS0+b3Blbl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY20tPm9wZW5fbXV0ZXgpOwogCX0KIAlyZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKIH0KQEAgLTE0NjEsOSArMTQ2Miw5IEBACiAJICogcGNtIGZyYW1ld29yayBkb2Vzbid0IHBhc3MgZmlsZSBwb2ludGVyIGJlZm9yZSBhY3R1YWxseSBvcGVuZWQsCiAJICogd2UgY2FuJ3Qga25vdyB3aGV0aGVyIGJsb2NraW5nIG1vZGUgb3Igbm90IGluIG9wZW4gY2FsbGJhY2suLgogCSAqLwotCWRvd24oJmNtLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZjbS0+b3Blbl9tdXRleCk7CiAJaWYgKGNtLT5vcGVuZWRbY2hdKSB7Ci0JCXVwKCZjbS0+b3Blbl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY20tPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAljbS0+b3BlbmVkW2NoXSA9IG1vZGU7CkBAIC0xNDc1LDcgKzE0NzYsNyBAQAogCQlzbmRfY21pcGNpX2NsZWFyX2JpdChjbSwgQ01fUkVHX01JU0NfQ1RSTCwgQ01fRU5EQkRBQyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmY20tPnJlZ19sb2NrKTsKIAl9Ci0JdXAoJmNtLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmNtLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ4Myw3ICsxNDg0LDcgQEAKIHsKIAlpbnQgY2ggPSBtb2RlICYgQ01fT1BFTl9DSF9NQVNLOwogCi0JZG93bigmY20tPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNtLT5vcGVuX211dGV4KTsKIAlpZiAoY20tPm9wZW5lZFtjaF0gPT0gbW9kZSkgewogCQlpZiAoY20tPmNoYW5uZWxbY2hdLnN1YnN0cmVhbSkgewogCQkJc25kX2NtaXBjaV9jaF9yZXNldChjbSwgY2gpOwpAQCAtMTQ5OSw3ICsxNTAwLDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycSgmY20tPnJlZ19sb2NrKTsKIAkJfQogCX0KLQl1cCgmY20tPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmY20tPm9wZW5fbXV0ZXgpOwogfQogCiAvKgpAQCAtMTU0Niw3ICsxNTQ3LDcgQEAKIAlpZiAoKGVyciA9IG9wZW5fZGV2aWNlX2NoZWNrKGNtLCBDTV9PUEVOX1BMQVlCQUNLMiwgc3Vic3RyZWFtKSkgPCAwKSAvKiB1c2UgY2hhbm5lbCBCICovCiAJCXJldHVybiBlcnI7CiAJcnVudGltZS0+aHcgPSBzbmRfY21pcGNpX3BsYXliYWNrMjsKLQlkb3duKCZjbS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY20tPm9wZW5fbXV0ZXgpOwogCWlmICghIGNtLT5vcGVuZWRbQ01fQ0hfUExBWV0pIHsKIAkJaWYgKGNtLT5jYW5fbXVsdGlfY2gpIHsKIAkJCXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCA9IGNtLT5tYXhfY2hhbm5lbHM7CkBAIC0xNTU5LDcgKzE1NjAsNyBAQAogCQl9CiAJCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9TSVpFLCAwLCAweDEwMDAwKTsKIAl9Ci0JdXAoJmNtLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmNtLT5vcGVuX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg0NCw3ICsyODQ1LDcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmY20tPnJlZ19sb2NrKTsKLQlpbml0X01VVEVYKCZjbS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY20tPm9wZW5fbXV0ZXgpOwogCWNtLT5kZXZpY2UgPSBwY2ktPmRldmljZTsKIAljbS0+Y2FyZCA9IGNhcmQ7CiAJY20tPnBjaSA9IHBjaTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKaW5kZXggOGZiMjc1ZC4uNjlkYmY1NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKQEAgLTUzLDYgKzUzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZ2FtZXBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtOTA5LDIyICs5MTEsMjIgQEAKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCiAJc25kX2Fzc2VydCAoc2FtcGxlX3JhdGUgIT0gMCwgcmV0dXJuIC1FTlhJTyk7CiAKLQlkb3duICgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAKIAlpZiAoX2NzNDZ4eF9hZGp1c3Rfc2FtcGxlX3JhdGUgKGNoaXAsY3BjbSxzYW1wbGVfcmF0ZSkpIHsKLQkJdXAgKCZjaGlwLT5zcG9zX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKIAlzbmRfYXNzZXJ0IChjcGNtLT5wY21fY2hhbm5lbCAhPSBOVUxMKTsKIAlpZiAoIWNwY20tPnBjbV9jaGFubmVsKSB7Ci0JCXVwICgmY2hpcC0+c3Bvc19tdXRleCk7CisJCW11dGV4X3VubG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCiAKIAlpZiAoY3M0Nnh4X2RzcF9wY21fY2hhbm5lbF9zZXRfcGVyaW9kIChjaGlwLGNwY20tPnBjbV9jaGFubmVsLHBlcmlvZF9zaXplKSkgewotCQkgdXAgKCZjaGlwLT5zcG9zX211dGV4KTsKKwkJIG11dGV4X3VubG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJCSByZXR1cm4gLUVJTlZBTDsKIAkgfQogCkBAIC05NjUsNyArOTY3LDcgQEAKIAkJfQogCQlpZiAoKGVyciA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSkpIDwgMCkgewogI2lmZGVmIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AKLQkJCXVwICgmY2hpcC0+c3Bvc19tdXRleCk7CisJCQltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogI2VuZGlmCiAJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC05ODksNyArOTkxLDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCi0JdXAgKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogI2VuZGlmCiAKIAlyZXR1cm4gMDsKQEAgLTEzMTksNyArMTMyMSw3IEBACiAKIAljcGNtLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CiAjaWZkZWYgQ09ORklHX1NORF9DUzQ2WFhfTkVXX0RTUAotCWRvd24gKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAljcGNtLT5wY21fY2hhbm5lbCA9IE5VTEw7IAogCWNwY20tPnBjbV9jaGFubmVsX2lkID0gcGNtX2NoYW5uZWxfaWQ7CiAKQEAgLTEzMjgsNyArMTMzMCw3IEBACiAJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywgCiAJCQkJICAgJmh3X2NvbnN0cmFpbnRzX3BlcmlvZF9zaXplcyk7CiAKLQl1cCAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAjZWxzZQogCWNoaXAtPnBsYXliYWNrX3BjbSA9IGNwY207IC8qIEhBQ0sgKi8KICNlbmRpZgpAQCAtMTM2Nyw5ICsxMzY5LDkgQEAKIAogCXNuZF9wcmludGRkKCJvcGVuIHJhdyBpZWM5NTggY2hhbm5lbFxuIik7CiAKLQlkb3duICgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJY3M0Nnh4X2llYzk1OF9wcmVfb3BlbiAoY2hpcCk7Ci0JdXAgKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCiAJcmV0dXJuIF9jczQ2eHhfcGxheWJhY2tfb3Blbl9jaGFubmVsKHN1YnN0cmVhbSxEU1BfSUVDOTU4X0NIQU5ORUwpOwogfQpAQCAtMTM4NSw5ICsxMzg3LDkgQEAKIAogCWVyciA9IHNuZF9jczQ2eHhfcGxheWJhY2tfY2xvc2Uoc3Vic3RyZWFtKTsKIAotCWRvd24gKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAljczQ2eHhfaWVjOTU4X3Bvc3RfY2xvc2UgKGNoaXApOwotCXVwICgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xNDI4LDEyICsxNDMwLDEyIEBACiAJaWYgKCFjcGNtKSByZXR1cm4gLUVOWElPOwogCiAjaWZkZWYgQ09ORklHX1NORF9DUzQ2WFhfTkVXX0RTUAotCWRvd24gKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAlpZiAoY3BjbS0+cGNtX2NoYW5uZWwpIHsKIAkJY3M0Nnh4X2RzcF9kZXN0cm95X3BjbV9jaGFubmVsKGNoaXAsY3BjbS0+cGNtX2NoYW5uZWwpOwogCQljcGNtLT5wY21fY2hhbm5lbCA9IE5VTEw7CiAJfQotCXVwICgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKICNlbHNlCiAJY2hpcC0+cGxheWJhY2tfcGNtID0gTlVMTDsKICNlbmRpZgpAQCAtMTg0OCw3ICsxODUwLDcgQEAKIAogCXN3aXRjaCAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUpIHsKIAljYXNlIENTNDZYWF9NSVhFUl9TUERJRl9PVVRQVVRfRUxFTUVOVDoKLQkJZG93biAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCQltdXRleF9sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAkJY2hhbmdlID0gKGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlLT5zcGRpZl9zdGF0dXNfb3V0ICYgRFNQX1NQRElGX1NUQVRVU19PVVRQVVRfRU5BQkxFRCk7CiAJCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmJiAhY2hhbmdlKSAKIAkJCWNzNDZ4eF9kc3BfZW5hYmxlX3NwZGlmX291dChjaGlwKTsKQEAgLTE4NTYsNyArMTg1OCw3IEBACiAJCQljczQ2eHhfZHNwX2Rpc2FibGVfc3BkaWZfb3V0KGNoaXApOwogCiAJCXJlcyA9IChjaGFuZ2UgIT0gKGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlLT5zcGRpZl9zdGF0dXNfb3V0ICYgRFNQX1NQRElGX1NUQVRVU19PVVRQVVRfRU5BQkxFRCkpOwotCQl1cCAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCQlicmVhazsKIAljYXNlIENTNDZYWF9NSVhFUl9TUERJRl9JTlBVVF9FTEVNRU5UOgogCQljaGFuZ2UgPSBjaGlwLT5kc3Bfc3Bvc19pbnN0YW5jZS0+c3BkaWZfc3RhdHVzX2luOwpAQCAtMTk5NywxMiArMTk5OSwxMiBAQAogCXN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBkc3Bfc3Bvc19pbnN0YW5jZSAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCi0JZG93biAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzBdID0gX3dyYXBfYWxsX2JpdHMoKGlucy0+c3BkaWZfY3N1dl9kZWZhdWx0ID4+IDI0KSAmIDB4ZmYpOwogCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzFdID0gX3dyYXBfYWxsX2JpdHMoKGlucy0+c3BkaWZfY3N1dl9kZWZhdWx0ID4+IDE2KSAmIDB4ZmYpOwogCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzJdID0gMDsKIAl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1szXSA9IF93cmFwX2FsbF9iaXRzKChpbnMtPnNwZGlmX2NzdXZfZGVmYXVsdCkgJiAweGZmKTsKLQl1cCAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMTUsNyArMjAxNyw3IEBACiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgY2hhbmdlOwogCi0JZG93biAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCXZhbCA9ICgodW5zaWduZWQgaW50KV93cmFwX2FsbF9iaXRzKHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzBdKSA8PCAyNCkgfAogCQkoKHVuc2lnbmVkIGludClfd3JhcF9hbGxfYml0cyh1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1syXSkgPDwgMTYpIHwKIAkJKCh1bnNpZ25lZCBpbnQpX3dyYXBfYWxsX2JpdHModWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbM10pKSAgfApAQCAtMjAyOSw3ICsyMDMxLDcgQEAKIAlpZiAoICEoaW5zLT5zcGRpZl9zdGF0dXNfb3V0ICYgRFNQX1NQRElGX1NUQVRVU19QTEFZQkFDS19PUEVOKSApCiAJCWNzNDZ4eF9wb2tlX3ZpYV9kc3AgKGNoaXAsU1BfU1BET1VUX0NTVVYsdmFsKTsKIAotCXVwICgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiBjaGFuZ2U7CiB9CkBAIC0yMDUwLDEyICsyMDUyLDEyIEBACiAJc3RydWN0IHNuZF9jczQ2eHggKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGRzcF9zcG9zX2luc3RhbmNlICogaW5zID0gY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2U7CiAKLQlkb3duICgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMF0gPSBfd3JhcF9hbGxfYml0cygoaW5zLT5zcGRpZl9jc3V2X3N0cmVhbSA+PiAyNCkgJiAweGZmKTsKIAl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1sxXSA9IF93cmFwX2FsbF9iaXRzKChpbnMtPnNwZGlmX2NzdXZfc3RyZWFtID4+IDE2KSAmIDB4ZmYpOwogCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzJdID0gMDsKIAl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1szXSA9IF93cmFwX2FsbF9iaXRzKChpbnMtPnNwZGlmX2NzdXZfc3RyZWFtKSAmIDB4ZmYpOwotCXVwICgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjA2OCw3ICsyMDcwLDcgQEAKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCBjaGFuZ2U7CiAKLQlkb3duICgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJdmFsID0gKCh1bnNpZ25lZCBpbnQpX3dyYXBfYWxsX2JpdHModWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMF0pIDw8IDI0KSB8CiAJCSgodW5zaWduZWQgaW50KV93cmFwX2FsbF9iaXRzKHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzFdKSA8PCAxNikgfAogCQkoKHVuc2lnbmVkIGludClfd3JhcF9hbGxfYml0cyh1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1szXSkpIHwKQEAgLTIwODIsNyArMjA4NCw3IEBACiAJaWYgKCBpbnMtPnNwZGlmX3N0YXR1c19vdXQgJiBEU1BfU1BESUZfU1RBVFVTX1BMQVlCQUNLX09QRU4gKQogCQljczQ2eHhfcG9rZV92aWFfZHNwIChjaGlwLFNQX1NQRE9VVF9DU1VWLHZhbCk7CiAKLQl1cCAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAKIAlyZXR1cm4gY2hhbmdlOwogfQpAQCAtMzc1NSw3ICszNzU3LDcgQEAKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKICNpZmRlZiBDT05GSUdfU05EX0NTNDZYWF9ORVdfRFNQCi0JaW5pdF9NVVRFWCgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+c3Bvc19tdXRleCk7CiAjZW5kaWYKIAljaGlwLT5jYXJkID0gY2FyZDsKIAljaGlwLT5wY2kgPSBwY2k7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMKaW5kZXggNDQ1YTQ0OC4uZjQwN2QyYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KQEAgLTIzNSw3ICsyMzcsNyBAQAogCiAJaWYgKGlucy0+c3ltYm9sX3RhYmxlLnN5bWJvbHMgPT0gTlVMTCkgewogCQljczQ2eHhfZHNwX3Nwb3NfZGVzdHJveShjaGlwKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyb3I7CiAJfQogCiAJaW5zLT5jb2RlLm9mZnNldCA9IDA7CkBAIC0yNDQsNyArMjQ2LDcgQEAKIAogCWlmIChpbnMtPmNvZGUuZGF0YSA9PSBOVUxMKSB7CiAJCWNzNDZ4eF9kc3Bfc3Bvc19kZXN0cm95KGNoaXApOwotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJvcjsKIAl9CiAKIAlpbnMtPm5zY2IgPSAwOwpAQCAtMjU1LDcgKzI1Nyw3IEBACiAKIAlpZiAoaW5zLT5tb2R1bGVzID09IE5VTEwpIHsKIAkJY3M0Nnh4X2RzcF9zcG9zX2Rlc3Ryb3koY2hpcCk7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycm9yOwogCX0KIAogCS8qIGRlZmF1bHQgU1BESUYgaW5wdXQgc2FtcGxlIHJhdGUKQEAgLTI3OCw2ICsyODAsMTAgQEAKIAkgLyogbGVmdCBhbmQgcmlnaHQgdmFsaWRpdHkgYml0cyAqLyAoMSA8PCAxMykgfCAoMSA8PCAxMik7CiAKIAlyZXR1cm4gaW5zOworCitlcnJvcjoKKwlrZnJlZShpbnMpOworCXJldHVybiBOVUxMOwogfQogCiB2b2lkICBjczQ2eHhfZHNwX3Nwb3NfZGVzdHJveSAoc3RydWN0IHNuZF9jczQ2eHggKiBjaGlwKQpAQCAtMjg3LDcgKzI5Myw3IEBACiAKIAlzbmRfYXNzZXJ0KGlucyAhPSBOVUxMLCByZXR1cm4pOwogCi0JZG93bigmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IGlucy0+bnNjYjsgKytpKSB7CiAJCWlmIChpbnMtPnNjYnNbaV0uZGVsZXRlZCkgY29udGludWU7CiAKQEAgLTI5OCw3ICszMDQsNyBAQAogCXZmcmVlKGlucy0+c3ltYm9sX3RhYmxlLnN5bWJvbHMpOwogCWtmcmVlKGlucy0+bW9kdWxlcyk7CiAJa2ZyZWUoaW5zKTsKLQl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIH0KIAogaW50IGNzNDZ4eF9kc3BfbG9hZF9tb2R1bGUgKHN0cnVjdCBzbmRfY3M0Nnh4ICogY2hpcCwgc3RydWN0IGRzcF9tb2R1bGVfZGVzYyAqIG1vZHVsZSkKQEAgLTQ5Nyw3ICs1MDMsNyBAQAogCXN0cnVjdCBkc3Bfc3Bvc19pbnN0YW5jZSAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCWludCBpLGo7CiAKLQlkb3duKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJNT0RVTEVTOlxuIik7CiAJZm9yICggaSA9IDA7IGkgPCBpbnMtPm5tb2R1bGVzOyArK2kgKSB7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuJXM6XG4iLCBpbnMtPm1vZHVsZXNbaV0ubW9kdWxlX25hbWUpOwpAQCAtNTEwLDcgKzUxNiw3IEBACiAJCQkJICAgIGRlc2MtPnNlZ21lbnRfdHlwZSxkZXNjLT5vZmZzZXQsIGRlc2MtPnNpemUpOwogCQl9CiAJfQotCXVwKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBjczQ2eHhfZHNwX3Byb2NfdGFza190cmVlX3JlYWQgKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCkBAIC01MjEsNyArNTI3LDcgQEAKIAlpbnQgaSwgaiwgY29sOwogCXZvaWQgX19pb21lbSAqZHN0ID0gY2hpcC0+cmVnaW9uLmlkeFsxXS5yZW1hcF9hZGRyICsgRFNQX1BBUkFNRVRFUl9CWVRFX09GRlNFVDsKIAotCWRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlRBU0sgVFJFRVM6XG4iKTsKIAlmb3IgKCBpID0gMDsgaSA8IGlucy0+bnRhc2s7ICsraSkgewogCQlzbmRfaXByaW50ZihidWZmZXIsIlxuJTA0eCAlczpcbiIsaW5zLT50YXNrc1tpXS5hZGRyZXNzLGlucy0+dGFza3NbaV0udGFza19uYW1lKTsKQEAgLTUzOCw3ICs1NDQsNyBAQAogCX0KIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwiXG4iKTsgIAotCXVwKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBjczQ2eHhfZHNwX3Byb2Nfc2NiX3JlYWQgKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCkBAIC01NDgsNyArNTU0LDcgQEAKIAlzdHJ1Y3QgZHNwX3Nwb3NfaW5zdGFuY2UgKiBpbnMgPSBjaGlwLT5kc3Bfc3Bvc19pbnN0YW5jZTsKIAlpbnQgaTsKIAotCWRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlNDQidzOlxuIik7CiAJZm9yICggaSA9IDA7IGkgPCBpbnMtPm5zY2I7ICsraSkgewogCQlpZiAoaW5zLT5zY2JzW2ldLmRlbGV0ZWQpCkBAIC01NzEsNyArNTc3LDcgQEAKIAl9CiAKIAlzbmRfaXByaW50ZihidWZmZXIsIlxuIik7Ci0JdXAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNzNDZ4eF9kc3BfcHJvY19wYXJhbWV0ZXJfZHVtcF9yZWFkIChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LApAQCAtODUyLDE0ICs4NTgsMTQgQEAKIAl9CiAJaW5zLT5wcm9jX3NjYl9pbmZvX2VudHJ5ID0gZW50cnk7CiAKLQlkb3duKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAkvKiByZWdpc3Rlci91cGRhdGUgU0NCJ3MgZW50cmllcyBvbiBwcm9jICovCiAJZm9yIChpID0gMDsgaSA8IGlucy0+bnNjYjsgKytpKSB7CiAJCWlmIChpbnMtPnNjYnNbaV0uZGVsZXRlZCkgY29udGludWU7CiAKIAkJY3M0Nnh4X2RzcF9wcm9jX3JlZ2lzdGVyX3NjYl9kZXNjIChjaGlwLCAoaW5zLT5zY2JzICsgaSkpOwogCX0KLQl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtODk5LDEyICs5MDUsMTIgQEAKIAkJaW5zLT5wcm9jX3Rhc2tfaW5mb19lbnRyeSA9IE5VTEw7CiAJfQogCi0JZG93bigmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IGlucy0+bnNjYjsgKytpKSB7CiAJCWlmIChpbnMtPnNjYnNbaV0uZGVsZXRlZCkgY29udGludWU7CiAJCWNzNDZ4eF9kc3BfcHJvY19mcmVlX3NjYl9kZXNjICggKGlucy0+c2NicyArIGkpICk7CiAJfQotCXVwKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCiAJaWYgKGlucy0+cHJvY19kc3BfZGlyKSB7CiAJCXNuZF9pbmZvX3VucmVnaXN0ZXIgKGlucy0+cHJvY19kc3BfZGlyKTsKQEAgLTE2OTQsNyArMTcwMCw3IEBACiAJc25kX2Fzc2VydCAoaW5zLT5hc3luY2hfcnhfc2NiID09IE5VTEwscmV0dXJuIC1FSU5WQUwpOwogCXNuZF9hc3NlcnQgKGlucy0+c3BkaWZfaW5fc3JjICE9IE5VTEwscmV0dXJuIC1FSU5WQUwpOwogCi0JZG93bigmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAKIAlpZiAoICEgKGlucy0+c3BkaWZfc3RhdHVzX291dCAmIERTUF9TUERJRl9TVEFUVVNfSU5QVVRfQ1RSTF9FTkFCTEVEKSApIHsKIAkJLyogdGltZSBjb3VudGRvd24gZW5hYmxlICovCkBAIC0xNzM4LDcgKzE3NDQsNyBAQAogCiAJLyogbW9uaXRvciBzdGF0ZSAqLwogCWlucy0+c3BkaWZfc3RhdHVzX2luID0gMTsKLQl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc1MCw3ICsxNzU2LDcgQEAKIAlzbmRfYXNzZXJ0IChpbnMtPmFzeW5jaF9yeF9zY2IgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOwogCXNuZF9hc3NlcnQgKGlucy0+c3BkaWZfaW5fc3JjICE9IE5VTEwscmV0dXJuIC1FSU5WQUwpOwkKIAotCWRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCiAJLyogUmVtb3ZlIHRoZSBhc3luY2hyb25vdXMgcmVjZWl2ZXIgU0NCICovCiAJY3M0Nnh4X2RzcF9yZW1vdmVfc2NiIChjaGlwLGlucy0+YXN5bmNoX3J4X3NjYik7CkBAIC0xNzYwLDcgKzE3NjYsNyBAQAogCiAJLyogbW9uaXRvciBzdGF0ZSAqLwogCWlucy0+c3BkaWZfc3RhdHVzX2luID0gMDsKLQl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCS8qIHJlc3RvcmUgYW1wbGlmaWVyICovCiAJY2hpcC0+YWN0aXZlX2N0cmwoY2hpcCwgLTEpOwpAQCAtMTc3NiwxMCArMTc4MiwxMCBAQAogCXNuZF9hc3NlcnQgKGlucy0+cGNtX2lucHV0ID09IE5VTEwscmV0dXJuIC1FSU5WQUwpOwogCXNuZF9hc3NlcnQgKGlucy0+cmVmX3Nub29wX3NjYiAhPSBOVUxMLHJldHVybiAtRUlOVkFMKTsKIAotCWRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCWlucy0+cGNtX2lucHV0ID0gY3M0Nnh4X2FkZF9yZWNvcmRfc291cmNlKGNoaXAsaW5zLT5yZWZfc25vb3Bfc2NiLFBDTVNFUklBTElOX1BDTV9TQ0JfQUREUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBDTVNlcmlhbElucHV0X1dhdmUiKTsKLQl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc5MCwxMCArMTc5NiwxMCBAQAogCiAJc25kX2Fzc2VydCAoaW5zLT5wY21faW5wdXQgIT0gTlVMTCxyZXR1cm4gLUVJTlZBTCk7CiAKLQlkb3duKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAljczQ2eHhfZHNwX3JlbW92ZV9zY2IgKGNoaXAsaW5zLT5wY21faW5wdXQpOwogCWlucy0+cGNtX2lucHV0ID0gTlVMTDsKLQl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTgwNSwxMCArMTgxMSwxMCBAQAogCXNuZF9hc3NlcnQgKGlucy0+YWRjX2lucHV0ID09IE5VTEwscmV0dXJuIC1FSU5WQUwpOwogCXNuZF9hc3NlcnQgKGlucy0+Y29kZWNfaW5fc2NiICE9IE5VTEwscmV0dXJuIC1FSU5WQUwpOwogCi0JZG93bigmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJaW5zLT5hZGNfaW5wdXQgPSBjczQ2eHhfYWRkX3JlY29yZF9zb3VyY2UoY2hpcCxpbnMtPmNvZGVjX2luX3NjYixQQ01TRVJJQUxJTl9TQ0JfQUREUiwKIAkJCQkJCSAgIlBDTVNlcmlhbElucHV0X0FEQyIpOwotCXVwKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODE5LDEwICsxODI1LDEwIEBACiAKIAlzbmRfYXNzZXJ0IChpbnMtPmFkY19pbnB1dCAhPSBOVUxMLHJldHVybiAtRUlOVkFMKTsKIAotCWRvd24oJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCWNzNDZ4eF9kc3BfcmVtb3ZlX3NjYiAoY2hpcCxpbnMtPmFkY19pbnB1dCk7CiAJaW5zLT5hZGNfaW5wdXQgPSBOVUxMOwotCXVwKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODY5LDcgKzE4NzUsNyBAQAogCXN0cnVjdCBkc3Bfc3Bvc19pbnN0YW5jZSAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCXN0cnVjdCBkc3Bfc2NiX2Rlc2NyaXB0b3IgKiBzY2I7IAogCi0JZG93bigmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAJCiAJLyogbWFpbiBvdXRwdXQgKi8KIAlzY2IgPSBpbnMtPm1hc3Rlcl9taXhfc2NiLT5zdWJfbGlzdF9wdHI7CkBAIC0xODg4LDcgKzE4OTQsNyBAQAogCWlucy0+ZGFjX3ZvbHVtZV9sZWZ0ID0gbGVmdDsKIAlpbnMtPmRhY192b2x1bWVfcmlnaHQgPSByaWdodDsKIAotCXVwKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPnNwb3NfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODk3LDcgKzE5MDMsNyBAQAogewogCXN0cnVjdCBkc3Bfc3Bvc19pbnN0YW5jZSAqIGlucyA9IGNoaXAtPmRzcF9zcG9zX2luc3RhbmNlOwogCi0JZG93bigmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAKIAlpZiAoaW5zLT5hc3luY2hfcnhfc2NiICE9IE5VTEwpCiAJCWNzNDZ4eF9kc3Bfc2NiX3NldF92b2x1bWUgKGNoaXAsaW5zLT5hc3luY2hfcnhfc2NiLApAQCAtMTkwNiw3ICsxOTEyLDcgQEAKIAlpbnMtPnNwZGlmX2lucHV0X3ZvbHVtZV9sZWZ0ID0gbGVmdDsKIAlpbnMtPnNwZGlmX2lucHV0X3ZvbHVtZV9yaWdodCA9IHJpZ2h0OwogCi0JdXAoJmNoaXAtPnNwb3NfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+c3Bvc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3Nfc2NiX2xpYi5jIGIvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMKaW5kZXggZDRlMGZiMy4uMmM0ZWU0NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtNzcsNyArNzksNyBAQAogCiAJaW5zID0gY2hpcC0+ZHNwX3Nwb3NfaW5zdGFuY2U7CiAKLQlkb3duKCZjaGlwLT5zcG9zX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIAlzbmRfaXByaW50ZihidWZmZXIsIiUwNHggJXM6XG4iLHNjYi0+YWRkcmVzcyxzY2ItPnNjYl9uYW1lKTsKIAogCWZvciAoY29sID0gMCxqID0gMDtqIDwgMHgxMDsgaisrLGNvbCsrKSB7CkBAIC0xMDUsNyArMTA3LDcgQEAKIAkJICAgIHNjYi0+dGFza19lbnRyeS0+YWRkcmVzcyk7CiAKIAlzbmRfaXByaW50ZihidWZmZXIsImluZGV4IFslZF0gcmVmX2NvdW50IFslZF1cbiIsc2NiLT5pbmRleCxzY2ItPnJlZl9jb3VudCk7ICAKLQl1cCgmY2hpcC0+c3Bvc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zcG9zX211dGV4KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCmluZGV4IDAyZTM3MjEuLjlmYzdmMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCisrKyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCkBAIC02Miw3ICs2Miw3IEBACiAJCXRtcCA9IGNzX3JlYWRsKGNzNTUzNWF1LCBBQ0NfQ09ERUNfQ05UTCk7CiAJCWlmICghKHRtcCAmIENNRF9ORVcpKQogCQkJYnJlYWs7Ci0JCW1zbGVlcCgxMCk7CisJCXVkZWxheSgxKTsKIAl9IHdoaWxlICgtLXRpbWVvdXQpOwogCWlmICghdGltZW91dCkKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiRmFpbHVyZSB3cml0aW5nIHRvIGNzNTUzNSBjb2RlY1xuIik7CkBAIC04MCwxNCArODAsMTQgQEAKIAlyZWdkYXRhIHw9IENNRF9ORVc7CiAKIAljc193cml0ZWwoY3M1NTM1YXUsIEFDQ19DT0RFQ19DTlRMLCByZWdkYXRhKTsKLQl3YWl0X3RpbGxfY21kX2Fja2VkKGNzNTUzNWF1LCA1MDApOworCXdhaXRfdGlsbF9jbWRfYWNrZWQoY3M1NTM1YXUsIDUwKTsKIAogCXRpbWVvdXQgPSA1MDsKIAlkbyB7CiAJCXZhbCA9IGNzX3JlYWRsKGNzNTUzNWF1LCBBQ0NfQ09ERUNfU1RBVFVTKTsKIAkJaWYgKCh2YWwgJiBTVFNfTkVXKSAmJiByZWcgPT0gKHZhbCA+PiAyNCkpCiAJCQlicmVhazsKLQkJbXNsZWVwKDEwKTsKKwkJdWRlbGF5KDEpOwogCX0gd2hpbGUgKC0tdGltZW91dCk7CiAJaWYgKCF0aW1lb3V0KQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJGYWlsdXJlIHJlYWRpbmcgY3M1NTM1IGNvZGVjXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKaW5kZXggM2M3MDQzYi4uMzFjYjliNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9lbXUxMGsxLmg+CkBAIC03NzUsNiArNzc3LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2VtdV9jaGlwX2RldGFpbHMgZW11X2NoaXBfZGV0YWlsc1tdID0gewogCS8qIEF1ZGlneSAyIFZhbHVlIEFDMyBvdXQgZG9lcyBub3Qgd29yayB5ZXQuIE5lZWQgdG8gZmluZCBvdXQgaG93IHRvIHR1cm4gb2ZmIGludGVycG9sYXRvcnMuKi8KKwkvKiBBdWRpZ3k0IFNCMDQwMCAqLworCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDA4LCAuc3Vic3lzdGVtID0gMHgxMDIxMTEwMiwKKwkgLmRyaXZlciA9ICJBdWRpZ3kyIiwgLm5hbWUgPSAiQXVkaWd5IDQgW1NCMDQwMF0iLCAKKwkgLmlkID0gIkF1ZGlneTIiLAorCSAuZW11MTBrMl9jaGlwID0gMSwKKwkgLmNhMDEwOF9jaGlwID0gMSwKKwkgLnNwazcxID0gMSwKKwkgLmFjOTdfY2hpcCA9IDF9ICwKIAkvKiBUZXN0ZWQgYnkgSmFtZXNAc3VwZXJidWcuY28udWsgM3JkIEp1bHkgMjAwNSAqLwogCS8qIERTUDogQ0EwMTA4LUlBVAogCSAqIERBQzogQ1M0MzgyLUtRCkBAIC0xMDk3LDggKzExMDcsNyBAQAogCXNwaW5fbG9ja19pbml0KCZlbXUtPnZvaWNlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZlbXUtPnN5bnRoX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZlbXUtPm1lbWJsa19sb2NrKTsKLQlpbml0X01VVEVYKCZlbXUtPnB0Yl9sb2NrKTsKLQlpbml0X01VVEVYKCZlbXUtPmZ4ODAxMC5sb2NrKTsKKwltdXRleF9pbml0KCZlbXUtPmZ4ODAxMC5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmZW11LT5tYXBwZWRfbGlua19oZWFkKTsKIAlJTklUX0xJU1RfSEVBRCgmZW11LT5tYXBwZWRfb3JkZXJfbGlua19oZWFkKTsKIAllbXUtPnBjaSA9IHBjaTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfc3ludGguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfc3ludGguYwppbmRleCAxZmEzOTNmLi4yMDQ5OTVhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX3N5bnRoLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9zeW50aC5jCkBAIC02Miw3ICs2Miw2IEBACiAKIAlpZiAoc25kX2VtdXhfcmVnaXN0ZXIoZW11LCBkZXYtPmNhcmQsIGFyZy0+aW5kZXgsICJFbXUxMGsxIikgPCAwKSB7CiAJCXNuZF9lbXV4X2ZyZWUoZW11KTsKLQkJZW11LT5odyA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggMTEwN2M4ZS4uMjIwOGRiZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtODkzLDI0ICs4OTQsMjQgQEAKIAlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKIAkJLmRldl9mcmVlID0gc25kX2VtdTEwazF4X2Rldl9mcmVlLAogCX07Ci0gIAorCiAJKnJjaGlwID0gTlVMTDsKLSAgCisKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCB8fAotCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDApIHsKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKwkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0gIAorCiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkgewogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotICAKKwogCWNoaXAtPmNhcmQgPSBjYXJkOwogCWNoaXAtPnBjaSA9IHBjaTsKIAljaGlwLT5pcnEgPSAtMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCmluZGV4IDUwOTgzNzIuLmRmYmEwMDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvZW11MTBrMS5oPgogCkBAIC04NzQsNyArODc2LDcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCWRvd24oJmVtdS0+Zng4MDEwLmxvY2spOworCW11dGV4X2xvY2soJmVtdS0+Zng4MDEwLmxvY2spOwogCWlmICgoZXJyID0gc25kX2VtdTEwazFfdmVyaWZ5X2NvbnRyb2xzKGVtdSwgaWNvZGUpKSA8IDApCiAJCWdvdG8gX19lcnJvcjsKIAlzdHJsY3B5KGVtdS0+Zng4MDEwLm5hbWUsIGljb2RlLT5uYW1lLCBzaXplb2YoZW11LT5meDgwMTAubmFtZSkpOwpAQCAtODk3LDcgKzg5OSw3IEBACiAJZWxzZQogCQlzbmRfZW11MTBrMV9wdHJfd3JpdGUoZW11LCBEQkcsIDAsIGVtdS0+Zng4MDEwLmRiZyk7CiAgICAgICBfX2Vycm9yOgotCXVwKCZlbXUtPmZ4ODAxMC5sb2NrKTsKKwltdXRleF91bmxvY2soJmVtdS0+Zng4MDEwLmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTkwNiw3ICs5MDgsNyBAQAogewogCWludCBlcnI7CiAKLQlkb3duKCZlbXUtPmZ4ODAxMC5sb2NrKTsKKwltdXRleF9sb2NrKCZlbXUtPmZ4ODAxMC5sb2NrKTsKIAlzdHJsY3B5KGljb2RlLT5uYW1lLCBlbXUtPmZ4ODAxMC5uYW1lLCBzaXplb2YoaWNvZGUtPm5hbWUpKTsKIAkvKiBvaywgZG8gdGhlIG1haW4gam9iICovCiAJZXJyID0gc25kX2VtdTEwazFfZ3ByX3BlZWsoZW11LCBpY29kZSk7CkBAIC05MTYsNyArOTE4LDcgQEAKIAkJZXJyID0gc25kX2VtdTEwazFfY29kZV9wZWVrKGVtdSwgaWNvZGUpOwogCWlmIChlcnIgPj0gMCkKIAkJZXJyID0gc25kX2VtdTEwazFfbGlzdF9jb250cm9scyhlbXUsIGljb2RlKTsKLQl1cCgmZW11LT5meDgwMTAubG9jayk7CisJbXV0ZXhfdW5sb2NrKCZlbXUtPmZ4ODAxMC5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05MzIsNyArOTM0LDcgQEAKIAlpZiAoaXBjbS0+Y2hhbm5lbHMgPiAzMikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcGNtID0gJmVtdS0+Zng4MDEwLnBjbVtpcGNtLT5zdWJzdHJlYW1dOwotCWRvd24oJmVtdS0+Zng4MDEwLmxvY2spOworCW11dGV4X2xvY2soJmVtdS0+Zng4MDEwLmxvY2spOwogCXNwaW5fbG9ja19pcnEoJmVtdS0+cmVnX2xvY2spOwogCWlmIChwY20tPm9wZW5lZCkgewogCQllcnIgPSAtRUJVU1k7CkBAIC05NjIsNyArOTY0LDcgQEAKIAl9CiAgICAgICBfX2Vycm9yOgogCXNwaW5fdW5sb2NrX2lycSgmZW11LT5yZWdfbG9jayk7Ci0JdXAoJmVtdS0+Zng4MDEwLmxvY2spOworCW11dGV4X3VubG9jaygmZW11LT5meDgwMTAubG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTc2LDcgKzk3OCw3IEBACiAJaWYgKGlwY20tPnN1YnN0cmVhbSA+PSBFTVUxMEsxX0ZYODAxMF9QQ01fQ09VTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCXBjbSA9ICZlbXUtPmZ4ODAxMC5wY21baXBjbS0+c3Vic3RyZWFtXTsKLQlkb3duKCZlbXUtPmZ4ODAxMC5sb2NrKTsKKwltdXRleF9sb2NrKCZlbXUtPmZ4ODAxMC5sb2NrKTsKIAlzcGluX2xvY2tfaXJxKCZlbXUtPnJlZ19sb2NrKTsKIAlpcGNtLT5jaGFubmVscyA9IHBjbS0+Y2hhbm5lbHM7CiAJaXBjbS0+dHJhbV9zdGFydCA9IHBjbS0+dHJhbV9zdGFydDsKQEAgLTk5Miw3ICs5OTQsNyBAQAogCWlwY20tPnJlczEgPSBpcGNtLT5yZXMyID0gMDsKIAlpcGNtLT5wYWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycSgmZW11LT5yZWdfbG9jayk7Ci0JdXAoJmVtdS0+Zng4MDEwLmxvY2spOworCW11dGV4X3VubG9jaygmZW11LT5meDgwMTAubG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjMwOCw5ICsyMzEwLDkgQEAKIAkJCXJldHVybiAtRVBFUk07CiAJCWlmIChnZXRfdXNlcihhZGRyLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZ3ApKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWRvd24oJmVtdS0+Zng4MDEwLmxvY2spOworCQltdXRleF9sb2NrKCZlbXUtPmZ4ODAxMC5sb2NrKTsKIAkJcmVzID0gc25kX2VtdTEwazFfZng4MDEwX3RyYW1fc2V0dXAoZW11LCBhZGRyKTsKLQkJdXAoJmVtdS0+Zng4MDEwLmxvY2spOworCQltdXRleF91bmxvY2soJmVtdS0+Zng4MDEwLmxvY2spOwogCQlyZXR1cm4gcmVzOwogCWNhc2UgU05EUlZfRU1VMTBLMV9JT0NUTF9TVE9QOgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9tZW1vcnkuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL21lbW9yeS5jCmluZGV4IDY4Yzc5NWMuLmU3ZWM5ODYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL21lbW9yeS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL21lbW9yeS5jCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvZW11MTBrMS5oPgogCkBAIC0zMDIsMTAgKzMwNCwxMCBAQAogCWhkciA9IGVtdS0+bWVtaGRyOwogCXNuZF9hc3NlcnQoaGRyLCByZXR1cm4gTlVMTCk7CiAKLQlkb3duKCZoZHItPmJsb2NrX211dGV4KTsKKwltdXRleF9sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAlibGsgPSBzZWFyY2hfZW1wdHkoZW11LCBydW50aW1lLT5kbWFfYnl0ZXMpOwogCWlmIChibGsgPT0gTlVMTCkgewotCQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJCW11dGV4X3VubG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAkvKiBmaWxsIGJ1ZmZlciBhZGRyZXNzZXMgYnV0IHBvaW50ZXJzIGFyZSBub3Qgc3RvcmVkIHNvIHRoYXQKQEAgLTMxOCwxNCArMzIwLDE0IEBACiAJCWlmIChpZHggPj0gc2didWYtPnBhZ2VzKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImVtdTogcGFnZXMgb3ZlcmZsb3chICglZC0lZCkgZm9yICVkXG4iLAogCQkJICAgICAgIGJsay0+Zmlyc3RfcGFnZSwgYmxrLT5sYXN0X3BhZ2UsIHNnYnVmLT5wYWdlcyk7Ci0JCQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJCQltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KICNlbmRpZgogCQlhZGRyID0gc2didWYtPnRhYmxlW2lkeF0uYWRkcjsKIAkJaWYgKCEgaXNfdmFsaWRfcGFnZShlbXUsIGFkZHIpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImVtdTogZmFpbHVyZSBwYWdlID0gJWRcbiIsIGlkeCk7Ci0JCQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJCQltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJZW11LT5wYWdlX2FkZHJfdGFibGVbcGFnZV0gPSBhZGRyOwpAQCAtMzM3LDEwICszMzksMTAgQEAKIAllcnIgPSBzbmRfZW11MTBrMV9tZW1ibGtfbWFwKGVtdSwgYmxrKTsKIAlpZiAoZXJyIDwgMCkgewogCQlfX3NuZF91dGlsX21lbV9mcmVlKGhkciwgKHN0cnVjdCBzbmRfdXRpbF9tZW1ibGsgKilibGspOwotCQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJCW11dGV4X3VubG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAlyZXR1cm4gKHN0cnVjdCBzbmRfdXRpbF9tZW1ibGsgKilibGs7CiB9CiAKQEAgLTM2OSwxOSArMzcxLDE5IEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX21lbWJsayAqYmxrOwogCXN0cnVjdCBzbmRfdXRpbF9tZW1oZHIgKmhkciA9IGh3LT5tZW1oZHI7IAogCi0JZG93bigmaGRyLT5ibG9ja19tdXRleCk7CisJbXV0ZXhfbG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJYmxrID0gKHN0cnVjdCBzbmRfZW11MTBrMV9tZW1ibGsgKilfX3NuZF91dGlsX21lbV9hbGxvYyhoZHIsIHNpemUpOwogCWlmIChibGsgPT0gTlVMTCkgewotCQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJCW11dGV4X3VubG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAlpZiAoc3ludGhfYWxsb2NfcGFnZXMoaHcsIGJsaykpIHsKIAkJX19zbmRfdXRpbF9tZW1fZnJlZShoZHIsIChzdHJ1Y3Qgc25kX3V0aWxfbWVtYmxrICopYmxrKTsKLQkJdXAoJmhkci0+YmxvY2tfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJc25kX2VtdTEwazFfbWVtYmxrX21hcChodywgYmxrKTsKLQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAlyZXR1cm4gKHN0cnVjdCBzbmRfdXRpbF9tZW1ibGsgKilibGs7CiB9CiAKQEAgLTM5NiwxNCArMzk4LDE0IEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX21lbWJsayAqYmxrID0gKHN0cnVjdCBzbmRfZW11MTBrMV9tZW1ibGsgKiltZW1ibGs7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X2xvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZlbXUtPm1lbWJsa19sb2NrLCBmbGFncyk7CiAJaWYgKGJsay0+bWFwcGVkX3BhZ2UgPj0gMCkKIAkJdW5tYXBfbWVtYmxrKGVtdSwgYmxrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbXUtPm1lbWJsa19sb2NrLCBmbGFncyk7CiAJc3ludGhfZnJlZV9wYWdlcyhlbXUsIGJsayk7CiAJIF9fc25kX3V0aWxfbWVtX2ZyZWUoaGRyLCBtZW1ibGspOwotCXVwKCZoZHItPmJsb2NrX211dGV4KTsKKwltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW5zMTM3MC5jIGIvc291bmQvcGNpL2VuczEzNzAuYwppbmRleCA1NWFhZjExLi5hNTUzM2M4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW5zMTM3MC5jCisrKyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZ2FtZXBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMzc5LDcgKzM4MSw3IEBACiAKIHN0cnVjdCBlbnNvbmlxIHsKIAlzcGlubG9ja190IHJlZ19sb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgc3JjX211dGV4OworCXN0cnVjdCBtdXRleCBzcmNfbXV0ZXg7CiAKIAlpbnQgaXJxOwogCkBAIC02MDksNyArNjExLDcgQEAKIAlzdHJ1Y3QgZW5zb25pcSAqZW5zb25pcSA9IGFjOTctPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgdCwgeDsKIAotCWRvd24oJmVuc29uaXEtPnNyY19tdXRleCk7CisJbXV0ZXhfbG9jaygmZW5zb25pcS0+c3JjX211dGV4KTsKIAlmb3IgKHQgPSAwOyB0IDwgUE9MTF9DT1VOVDsgdCsrKSB7CiAJCWlmICghKGlubChFU19SRUcoZW5zb25pcSwgMTM3MV9DT0RFQykpICYgRVNfMTM3MV9DT0RFQ19XSVApKSB7CiAJCQkvKiBzYXZlIHRoZSBjdXJyZW50IHN0YXRlIGZvciBsYXR0ZXIgKi8KQEAgLTYzNCwxMSArNjM2LDExIEBACiAJCQkvKiByZXN0b3JlIFNSQyByZWcgKi8KIAkJCXNuZF9lczEzNzFfd2FpdF9zcmNfcmVhZHkoZW5zb25pcSk7CiAJCQlvdXRsKHgsIEVTX1JFRyhlbnNvbmlxLCAxMzcxX1NNUFJBVEUpKTsKLQkJCXVwKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOworCQkJbXV0ZXhfdW5sb2NrKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCXVwKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZW5zb25pcS0+c3JjX211dGV4KTsKIAlzbmRfcHJpbnRrKEtFUk5fRVJSICJjb2RlYyB3cml0ZSB0aW1lb3V0IGF0IDB4JWx4IFsweCV4XVxuIiwKIAkJICAgRVNfUkVHKGVuc29uaXEsIDEzNzFfQ09ERUMpLCBpbmwoRVNfUkVHKGVuc29uaXEsIDEzNzFfQ09ERUMpKSk7CiB9CkBAIC02NTAsNyArNjUyLDcgQEAKIAl1bnNpZ25lZCBpbnQgdCwgeCwgZmFpbCA9IDA7CiAKICAgICAgIF9fYWdhaW46Ci0JZG93bigmZW5zb25pcS0+c3JjX211dGV4KTsKKwltdXRleF9sb2NrKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOwogCWZvciAodCA9IDA7IHQgPCBQT0xMX0NPVU5UOyB0KyspIHsKIAkJaWYgKCEoaW5sKEVTX1JFRyhlbnNvbmlxLCAxMzcxX0NPREVDKSkgJiBFU18xMzcxX0NPREVDX1dJUCkpIHsKIAkJCS8qIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGxhdHRlciAqLwpAQCAtNjgzLDExICs2ODUsMTEgQEAKIAkJCS8qIG5vdyB3YWl0IGZvciB0aGUgc3RpbmtpbicgZGF0YSAoUkRZKSAqLwogCQkJZm9yICh0ID0gMDsgdCA8IFBPTExfQ09VTlQ7IHQrKykgewogCQkJCWlmICgoeCA9IGlubChFU19SRUcoZW5zb25pcSwgMTM3MV9DT0RFQykpKSAmIEVTXzEzNzFfQ09ERUNfUkRZKSB7Ci0JCQkJCXVwKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOworCQkJCQltdXRleF91bmxvY2soJmVuc29uaXEtPnNyY19tdXRleCk7CiAJCQkJCXJldHVybiBFU18xMzcxX0NPREVDX1JFQUQoeCk7CiAJCQkJfQogCQkJfQotCQkJdXAoJmVuc29uaXEtPnNyY19tdXRleCk7CisJCQltdXRleF91bmxvY2soJmVuc29uaXEtPnNyY19tdXRleCk7CiAJCQlpZiAoKytmYWlsID4gMTApIHsKIAkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjb2RlYyByZWFkIHRpbWVvdXQgKGZpbmFsKSAiCiAJCQkJCSAgICJhdCAweCVseCwgcmVnID0gMHgleCBbMHgleF1cbiIsCkBAIC02OTgsNyArNzAwLDcgQEAKIAkJCWdvdG8gX19hZ2FpbjsKIAkJfQogCX0KLQl1cCgmZW5zb25pcS0+c3JjX211dGV4KTsKKwltdXRleF91bmxvY2soJmVuc29uaXEtPnNyY19tdXRleCk7CiAJc25kX3ByaW50ayhLRVJOX0VSUiAiZXMxMzcxOiBjb2RlYyByZWFkIHRpbWVvdXQgYXQgMHglbHggWzB4JXhdXG4iLAogCQkgICBFU19SRUcoZW5zb25pcSwgMTM3MV9DT0RFQyksIGlubChFU19SRUcoZW5zb25pcSwgMTM3MV9DT0RFQykpKTsKIAlyZXR1cm4gMDsKQEAgLTcxNyw3ICs3MTksNyBAQAogewogCXVuc2lnbmVkIGludCBuLCB0cnVuY20sIGZyZXEsIHJlc3VsdDsKIAotCWRvd24oJmVuc29uaXEtPnNyY19tdXRleCk7CisJbXV0ZXhfbG9jaygmZW5zb25pcS0+c3JjX211dGV4KTsKIAluID0gcmF0ZSAvIDMwMDA7CiAJaWYgKCgxIDw8IG4pICYgKCgxIDw8IDE1KSB8ICgxIDw8IDEzKSB8ICgxIDw8IDExKSB8ICgxIDw8IDkpKSkKIAkJbi0tOwpAQCAtNzQyLDE0ICs3NDQsMTQgQEAKIAlzbmRfZXMxMzcxX3NyY193cml0ZShlbnNvbmlxLCBFU19TTVBSRUdfQURDICsgRVNfU01QUkVHX1ZGUkVRX0ZSQUMsIGZyZXEgJiAweDdmZmYpOwogCXNuZF9lczEzNzFfc3JjX3dyaXRlKGVuc29uaXEsIEVTX1NNUFJFR19WT0xfQURDLCBuIDw8IDgpOwogCXNuZF9lczEzNzFfc3JjX3dyaXRlKGVuc29uaXEsIEVTX1NNUFJFR19WT0xfQURDICsgMSwgbiA8PCA4KTsKLQl1cCgmZW5zb25pcS0+c3JjX211dGV4KTsKKwltdXRleF91bmxvY2soJmVuc29uaXEtPnNyY19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF9lczEzNzFfZGFjMV9yYXRlKHN0cnVjdCBlbnNvbmlxICogZW5zb25pcSwgdW5zaWduZWQgaW50IHJhdGUpCiB7CiAJdW5zaWduZWQgaW50IGZyZXEsIHI7CiAKLQlkb3duKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOworCW11dGV4X2xvY2soJmVuc29uaXEtPnNyY19tdXRleCk7CiAJZnJlcSA9ICgocmF0ZSA8PCAxNSkgKyAxNTAwKSAvIDMwMDA7CiAJciA9IChzbmRfZXMxMzcxX3dhaXRfc3JjX3JlYWR5KGVuc29uaXEpICYgKEVTXzEzNzFfU1JDX0RJU0FCTEUgfAogCQkJCQkJICAgRVNfMTM3MV9ESVNfUDIgfCBFU18xMzcxX0RJU19SMSkpIHwKQEAgLTc2MywxNCArNzY1LDE0IEBACiAJciA9IChzbmRfZXMxMzcxX3dhaXRfc3JjX3JlYWR5KGVuc29uaXEpICYgKEVTXzEzNzFfU1JDX0RJU0FCTEUgfAogCQkJCQkJICAgRVNfMTM3MV9ESVNfUDIgfCBFU18xMzcxX0RJU19SMSkpOwogCW91dGwociwgRVNfUkVHKGVuc29uaXEsIDEzNzFfU01QUkFURSkpOwotCXVwKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZW5zb25pcS0+c3JjX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgc25kX2VzMTM3MV9kYWMyX3JhdGUoc3RydWN0IGVuc29uaXEgKiBlbnNvbmlxLCB1bnNpZ25lZCBpbnQgcmF0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgZnJlcSwgcjsKIAotCWRvd24oJmVuc29uaXEtPnNyY19tdXRleCk7CisJbXV0ZXhfbG9jaygmZW5zb25pcS0+c3JjX211dGV4KTsKIAlmcmVxID0gKChyYXRlIDw8IDE1KSArIDE1MDApIC8gMzAwMDsKIAlyID0gKHNuZF9lczEzNzFfd2FpdF9zcmNfcmVhZHkoZW5zb25pcSkgJiAoRVNfMTM3MV9TUkNfRElTQUJMRSB8CiAJCQkJCQkgICBFU18xMzcxX0RJU19QMSB8IEVTXzEzNzFfRElTX1IxKSkgfApAQCAtNzg1LDcgKzc4Nyw3IEBACiAJciA9IChzbmRfZXMxMzcxX3dhaXRfc3JjX3JlYWR5KGVuc29uaXEpICYgKEVTXzEzNzFfU1JDX0RJU0FCTEUgfAogCQkJCQkJICAgRVNfMTM3MV9ESVNfUDEgfCBFU18xMzcxX0RJU19SMSkpOwogCW91dGwociwgRVNfUkVHKGVuc29uaXEsIDEzNzFfU01QUkFURSkpOwotCXVwKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZW5zb25pcS0+c3JjX211dGV4KTsKIH0KIAogI2VuZGlmIC8qIENISVAxMzcxICovCkBAIC0yMDYxLDYgKzIwNjMsMTMgQEAKICNpZmRlZiBDSElQMTM3MQkKIAlzbmRfYWM5N19zdXNwZW5kKGVuc29uaXEtPnUuZXMxMzcxLmFjOTcpOwogI2Vsc2UKKwkvKiB0cnkgdG8gcmVzZXQgQUs0NTMxICovCisJb3V0dyhFU18xMzcwX0NPREVDX1dSSVRFKEFLNDUzMV9SRVNFVCwgMHgwMiksIEVTX1JFRyhlbnNvbmlxLCAxMzcwX0NPREVDKSk7CisJaW53KEVTX1JFRyhlbnNvbmlxLCAxMzcwX0NPREVDKSk7CisJdWRlbGF5KDEwMCk7CisJb3V0dyhFU18xMzcwX0NPREVDX1dSSVRFKEFLNDUzMV9SRVNFVCwgMHgwMyksIEVTX1JFRyhlbnNvbmlxLCAxMzcwX0NPREVDKSk7CisJaW53KEVTX1JFRyhlbnNvbmlxLCAxMzcwX0NPREVDKSk7CisJdWRlbGF5KDEwMCk7CiAJc25kX2FrNDUzMV9zdXNwZW5kKGVuc29uaXEtPnUuZXMxMzcwLmFrNDUzMSk7CiAjZW5kaWYJCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CkBAIC0yMTE2LDcgKzIxMjUsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJmVuc29uaXEtPnJlZ19sb2NrKTsKLQlpbml0X01VVEVYKCZlbnNvbmlxLT5zcmNfbXV0ZXgpOworCW11dGV4X2luaXQoJmVuc29uaXEtPnNyY19tdXRleCk7CiAJZW5zb25pcS0+Y2FyZCA9IGNhcmQ7CiAJZW5zb25pcS0+cGNpID0gcGNpOwogCWVuc29uaXEtPmlycSA9IC0xOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IDM3NDdhNDMuLmRkNDY1YTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTEwMCw5ICsxMDAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZ2FtZXBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CkBAIC01NjksNyArNTcyLDcgQEAKIAl1MTYgbWFlc3Ryb19tYXBbMzJdOwogCWludCBib2JjbGllbnQ7CQkvKiBhY3RpdmUgdGltZXIgaW5zdGFuY3MgKi8KIAlpbnQgYm9iX2ZyZXE7CQkvKiB0aW1lciBmcmVxdWVuY3kgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIG1lbW9yeV9tdXRleDsJLyogbWVtb3J5IGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXggbWVtb3J5X211dGV4OwkvKiBtZW1vcnkgbG9jayAqLwogCiAJLyogQVBVIHN0YXRlcyAqLwogCXVuc2lnbmVkIGNoYXIgYXB1W05SX0FQVVNdOwpAQCAtMTM1NiwxMyArMTM1OSwxMyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnA7CiAJaW50IG1heF9zaXplID0gMDsKIAkKLQlkb3duKCZjaGlwLT5tZW1vcnlfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1lbW9yeV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaChwLCAmY2hpcC0+YnVmX2xpc3QpIHsKIAkJc3RydWN0IGVzbV9tZW1vcnkgKmJ1ZiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGVzbV9tZW1vcnksIGxpc3QpOwogCQlpZiAoYnVmLT5lbXB0eSAmJiBidWYtPmJ1Zi5ieXRlcyA+IG1heF9zaXplKQogCQkJbWF4X3NpemUgPSBidWYtPmJ1Zi5ieXRlczsKIAl9Ci0JdXAoJmNoaXAtPm1lbW9yeV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZW1vcnlfbXV0ZXgpOwogCWlmIChtYXhfc2l6ZSA+PSAxMjgqMTAyNCkKIAkJbWF4X3NpemUgPSAxMjcqMTAyNDsKIAlyZXR1cm4gbWF4X3NpemU7CkBAIC0xMzc1LDIwICsxMzc4LDIwIEBACiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAkKIAlzaXplID0gKChzaXplICsgRVNNX01FTV9BTElHTiAtIDEpIC8gRVNNX01FTV9BTElHTikgKiBFU01fTUVNX0FMSUdOOwotCWRvd24oJmNoaXAtPm1lbW9yeV9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWVtb3J5X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZjaGlwLT5idWZfbGlzdCkgewogCQlidWYgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBlc21fbWVtb3J5LCBsaXN0KTsKIAkJaWYgKGJ1Zi0+ZW1wdHkgJiYgYnVmLT5idWYuYnl0ZXMgPj0gc2l6ZSkKIAkJCWdvdG8gX19mb3VuZDsKIAl9Ci0JdXAoJmNoaXAtPm1lbW9yeV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZW1vcnlfbXV0ZXgpOwogCXJldHVybiBOVUxMOwogCiBfX2ZvdW5kOgogCWlmIChidWYtPmJ1Zi5ieXRlcyA+IHNpemUpIHsKIAkJc3RydWN0IGVzbV9tZW1vcnkgKmNodW5rID0ga21hbGxvYyhzaXplb2YoKmNodW5rKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChjaHVuayA9PSBOVUxMKSB7Ci0JCQl1cCgmY2hpcC0+bWVtb3J5X211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmY2hpcC0+bWVtb3J5X211dGV4KTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCWNodW5rLT5idWYgPSBidWYtPmJ1ZjsKQEAgLTE0MDAsNyArMTQwMyw3IEBACiAJCWxpc3RfYWRkKCZjaHVuay0+bGlzdCwgJmJ1Zi0+bGlzdCk7CiAJfQogCWJ1Zi0+ZW1wdHkgPSAwOwotCXVwKCZjaGlwLT5tZW1vcnlfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWVtb3J5X211dGV4KTsKIAlyZXR1cm4gYnVmOwogfQogCkBAIC0xNDA5LDcgKzE0MTIsNyBAQAogewogCXN0cnVjdCBlc21fbWVtb3J5ICpjaHVuazsKIAotCWRvd24oJmNoaXAtPm1lbW9yeV9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWVtb3J5X211dGV4KTsKIAlidWYtPmVtcHR5ID0gMTsKIAlpZiAoYnVmLT5saXN0LnByZXYgIT0gJmNoaXAtPmJ1Zl9saXN0KSB7CiAJCWNodW5rID0gbGlzdF9lbnRyeShidWYtPmxpc3QucHJldiwgc3RydWN0IGVzbV9tZW1vcnksIGxpc3QpOwpAQCAtMTQyOCw3ICsxNDMxLDcgQEAKIAkJCWtmcmVlKGNodW5rKTsKIAkJfQogCX0KLQl1cCgmY2hpcC0+bWVtb3J5X211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1lbW9yeV9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF9lczE5NjhfZnJlZV9kbWFidWYoc3RydWN0IGVzMTk2OCAqY2hpcCkKQEAgLTI1NTksOCArMjU2Miw4IEBACiAJaWYgKChlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJLyogY2hlY2ssIGlmIHdlIGNhbiByZXN0cmljdCBQQ0kgRE1BIHRyYW5zZmVycyB0byAyOCBiaXRzICovCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDAgfHwKLQkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwKSB7CisJaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwIHx8CisJICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgMjhiaXQgUENJIGJ1c21hc3RlciBETUFcbiIpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTI1NzksNyArMjU4Miw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmNoaXAtPmJ1Zl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmY2hpcC0+c3Vic3RyZWFtX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5hYzk3X2xvY2spOwotCWluaXRfTVVURVgoJmNoaXAtPm1lbW9yeV9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+bWVtb3J5X211dGV4KTsKIAl0YXNrbGV0X2luaXQoJmNoaXAtPmh3dm9sX3RxLCBlczE5NjhfdXBkYXRlX2h3X3ZvbHVtZSwgKHVuc2lnbmVkIGxvbmcpY2hpcCk7CiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAJY2hpcC0+cGNpID0gcGNpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggNGE2ZGQ5Ny4uYjQyZGZmNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KQEAgLTc2LDEyICs3NywxMiBAQAogCQkJCXVuc2lnbmVkIGludCB2ZXJiLCB1bnNpZ25lZCBpbnQgcGFybSkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzOwotCWRvd24oJmNvZGVjLT5idXMtPmNtZF9tdXRleCk7CisJbXV0ZXhfbG9jaygmY29kZWMtPmJ1cy0+Y21kX211dGV4KTsKIAlpZiAoISBjb2RlYy0+YnVzLT5vcHMuY29tbWFuZChjb2RlYywgbmlkLCBkaXJlY3QsIHZlcmIsIHBhcm0pKQogCQlyZXMgPSBjb2RlYy0+YnVzLT5vcHMuZ2V0X3Jlc3BvbnNlKGNvZGVjKTsKIAllbHNlCiAJCXJlcyA9ICh1bnNpZ25lZCBpbnQpLTE7Ci0JdXAoJmNvZGVjLT5idXMtPmNtZF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+YnVzLT5jbWRfbXV0ZXgpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTEwMSw5ICsxMDIsOSBAQAogCQkJIHVuc2lnbmVkIGludCB2ZXJiLCB1bnNpZ25lZCBpbnQgcGFybSkKIHsKIAlpbnQgZXJyOwotCWRvd24oJmNvZGVjLT5idXMtPmNtZF9tdXRleCk7CisJbXV0ZXhfbG9jaygmY29kZWMtPmJ1cy0+Y21kX211dGV4KTsKIAllcnIgPSBjb2RlYy0+YnVzLT5vcHMuY29tbWFuZChjb2RlYywgbmlkLCBkaXJlY3QsIHZlcmIsIHBhcm0pOwotCXVwKCZjb2RlYy0+YnVzLT5jbWRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY29kZWMtPmJ1cy0+Y21kX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNzEsNyArMzcyLDcgQEAKIAlidXMtPm1vZGVsbmFtZSA9IHRlbXAtPm1vZGVsbmFtZTsKIAlidXMtPm9wcyA9IHRlbXAtPm9wczsKIAotCWluaXRfTVVURVgoJmJ1cy0+Y21kX211dGV4KTsKKwltdXRleF9pbml0KCZidXMtPmNtZF9tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmJ1cy0+Y29kZWNfbGlzdCk7CiAKIAlpZiAoKGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9CVVMsIGJ1cywgJmRldl9vcHMpKSA8IDApIHsKQEAgLTUyMywxMyArNTI0LDE5IEBACiAKIAljb2RlYy0+YnVzID0gYnVzOwogCWNvZGVjLT5hZGRyID0gY29kZWNfYWRkcjsKLQlpbml0X01VVEVYKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOworCW11dGV4X2luaXQoJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJaW5pdF9hbXBfaGFzaChjb2RlYyk7CiAKIAlsaXN0X2FkZF90YWlsKCZjb2RlYy0+bGlzdCwgJmJ1cy0+Y29kZWNfbGlzdCk7CiAJYnVzLT5jYWRkcl90YmxbY29kZWNfYWRkcl0gPSBjb2RlYzsKIAogCWNvZGVjLT52ZW5kb3JfaWQgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIEFDX05PREVfUk9PVCwgQUNfUEFSX1ZFTkRPUl9JRCk7CisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gLTEpCisJCS8qIHJlYWQgYWdhaW4sIGhvcGVmdWxseSB0aGUgYWNjZXNzIG1ldGhvZCB3YXMgY29ycmVjdGVkCisJCSAqIGluIHRoZSBsYXN0IHJlYWQuLi4KKwkJICovCisJCWNvZGVjLT52ZW5kb3JfaWQgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIEFDX05PREVfUk9PVCwKKwkJCQkJCSAgICAgIEFDX1BBUl9WRU5ET1JfSUQpOwogCWNvZGVjLT5zdWJzeXN0ZW1faWQgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIEFDX05PREVfUk9PVCwgQUNfUEFSX1NVQlNZU1RFTV9JRCk7CiAJY29kZWMtPnJldmlzaW9uX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBBQ19OT0RFX1JPT1QsIEFDX1BBUl9SRVZfSUQpOwogCkBAIC03MjIsNyArNzI5LDggQEAKIC8qCiAgKiByZWFkIEFNUCB2YWx1ZS4gIFRoZSB2b2x1bWUgaXMgYmV0d2VlbiAwIHRvIDB4N2YsIDB4ODAgPSBtdXRlIGJpdC4KICAqLwotc3RhdGljIGludCBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgY2gsIGludCBkaXJlY3Rpb24sIGludCBpbmRleCkKK2ludCBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgY2gsCisJCQkgICBpbnQgZGlyZWN0aW9uLCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGhkYV9hbXBfaW5mbyAqaW5mbyA9IGdldF9hbGxvY19hbXBfaGFzaChjb2RlYywgSERBX0hBU0hfS0VZKG5pZCwgZGlyZWN0aW9uLCBpbmRleCkpOwogCWlmICghIGluZm8pCkBAIC03MzMsNyArNzQxLDggQEAKIC8qCiAgKiB1cGRhdGUgdGhlIEFNUCB2YWx1ZSwgbWFzayA9IGJpdCBtYXNrIHRvIHNldCwgdmFsID0gdGhlIHZhbHVlCiAgKi8KLXN0YXRpYyBpbnQgc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgY2gsIGludCBkaXJlY3Rpb24sIGludCBpZHgsIGludCBtYXNrLCBpbnQgdmFsKQoraW50IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGNoLAorCQkJICAgICBpbnQgZGlyZWN0aW9uLCBpbnQgaWR4LCBpbnQgbWFzaywgaW50IHZhbCkKIHsKIAlzdHJ1Y3QgaGRhX2FtcF9pbmZvICppbmZvID0gZ2V0X2FsbG9jX2FtcF9oYXNoKGNvZGVjLCBIREFfSEFTSF9LRVkobmlkLCBkaXJlY3Rpb24sIGlkeCkpOwogCkBAIC04ODEsMTIgKzg5MCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgcHZhbDsKIAlpbnQgZXJyOwogCi0JZG93bigmY29kZWMtPnNwZGlmX211dGV4KTsgLyogcmV1c2Ugc3BkaWZfbXV0ZXggKi8KKwltdXRleF9sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOyAvKiByZXVzZSBzcGRpZl9tdXRleCAqLwogCXB2YWwgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKIAlrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA9IHB2YWwgJiB+QU1QX1ZBTF9JRFhfTUFTSzsgLyogaW5kZXggMCAqLwogCWVyciA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQoa2NvbnRyb2wsIHVjb250cm9sKTsKIAlrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA9IHB2YWw7Ci0JdXAoJmNvZGVjLT5zcGRpZl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg5Niw3ICs5MDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgcHZhbDsKIAlpbnQgaSwgaW5kaWNlcywgZXJyID0gMCwgY2hhbmdlID0gMDsKIAotCWRvd24oJmNvZGVjLT5zcGRpZl9tdXRleCk7IC8qIHJldXNlIHNwZGlmX211dGV4ICovCisJbXV0ZXhfbG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsgLyogcmV1c2Ugc3BkaWZfbXV0ZXggKi8KIAlwdmFsID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJaW5kaWNlcyA9IChwdmFsICYgQU1QX1ZBTF9JRFhfTUFTSykgPj4gQU1QX1ZBTF9JRFhfU0hJRlQ7CiAJZm9yIChpID0gMDsgaSA8IGluZGljZXM7IGkrKykgewpAQCAtOTA3LDcgKzkxNiw3IEBACiAJCWNoYW5nZSB8PSBlcnI7CiAJfQogCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlID0gcHZhbDsKLQl1cCgmY29kZWMtPnNwZGlmX211dGV4KTsKKwltdXRleF91bmxvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJcmV0dXJuIGVyciA8IDAgPyBlcnIgOiBjaGFuZ2U7CiB9CiAKQEAgLTEwMTEsNyArMTAyMCw3IEBACiAJdW5zaWduZWQgc2hvcnQgdmFsOwogCWludCBjaGFuZ2U7CiAKLQlkb3duKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJY29kZWMtPnNwZGlmX3N0YXR1cyA9IHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzWzBdIHwKIAkJKCh1bnNpZ25lZCBpbnQpdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbMV0gPDwgOCkgfAogCQkoKHVuc2lnbmVkIGludCl1Y29udHJvbC0+dmFsdWUuaWVjOTU4LnN0YXR1c1syXSA8PCAxNikgfApAQCAtMTAyNiw3ICsxMDM1LDcgQEAKIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMiwgdmFsID4+IDgpOwogCX0KIAotCXVwKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCkBAIC0xMDU0LDcgKzEwNjMsNyBAQAogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAlpbnQgY2hhbmdlOwogCi0JZG93bigmY29kZWMtPnNwZGlmX211dGV4KTsKKwltdXRleF9sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCXZhbCA9IGNvZGVjLT5zcGRpZl9jdGxzICYgfjE7CiAJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKQogCQl2YWwgfD0gMTsKQEAgLTEwNjYsNyArMTA3NSw3IEBACiAJCQkJICAgIEFDX0FNUF9TRVRfUklHSFQgfCBBQ19BTVBfU0VUX0xFRlQgfAogCQkJCSAgICBBQ19BTVBfU0VUX09VVFBVVCB8ICgodmFsICYgMSkgPyAwIDogMHg4MCkpOwogCX0KLQl1cCgmY29kZWMtPnNwZGlmX211dGV4KTsKKwltdXRleF91bmxvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIApAQCAtMTE1MCwxMyArMTE1OSwxMyBAQAogCXVuc2lnbmVkIGludCB2YWwgPSAhIXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCWludCBjaGFuZ2U7CiAKLQlkb3duKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNvZGVjLT5zcGRpZl9tdXRleCk7CiAJY2hhbmdlID0gY29kZWMtPnNwZGlmX2luX2VuYWJsZSAhPSB2YWw7CiAJaWYgKGNoYW5nZSB8fCBjb2RlYy0+aW5fcmVzdW1lKSB7CiAJCWNvZGVjLT5zcGRpZl9pbl9lbmFibGUgPSB2YWw7CiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsIHZhbCk7CiAJfQotCXVwKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCkBAIC0xODI0LDEzICsxODMzLDEzIEBACiAgKi8KIGludCBzbmRfaGRhX211bHRpX291dF9kaWdfb3BlbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQpCiB7Ci0JZG93bigmY29kZWMtPnNwZGlmX211dGV4KTsKKwltdXRleF9sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCWlmIChtb3V0LT5kaWdfb3V0X3VzZWQpIHsKLQkJdXAoJmNvZGVjLT5zcGRpZl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAkJcmV0dXJuIC1FQlVTWTsgLyogYWxyZWFkeSBiZWluZyB1c2VkICovCiAJfQogCW1vdXQtPmRpZ19vdXRfdXNlZCA9IEhEQV9ESUdfRVhDTFVTSVZFOwotCXVwKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgzOSw5ICsxODQ4LDkgQEAKICAqLwogaW50IHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19jbG9zZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IGhkYV9tdWx0aV9vdXQgKm1vdXQpCiB7Ci0JZG93bigmY29kZWMtPnNwZGlmX211dGV4KTsKKwltdXRleF9sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCW1vdXQtPmRpZ19vdXRfdXNlZCA9IDA7Ci0JdXAoJmNvZGVjLT5zcGRpZl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xODY5LDcgKzE4NzgsNyBAQAogCWludCBjaHMgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmNoYW5uZWxzOwogCWludCBpOwogCi0JZG93bigmY29kZWMtPnNwZGlmX211dGV4KTsKKwltdXRleF9sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCWlmIChtb3V0LT5kaWdfb3V0X25pZCAmJiBtb3V0LT5kaWdfb3V0X3VzZWQgIT0gSERBX0RJR19FWENMVVNJVkUpIHsKIAkJaWYgKGNocyA9PSAyICYmCiAJCSAgICBzbmRfaGRhX2lzX3N1cHBvcnRlZF9mb3JtYXQoY29kZWMsIG1vdXQtPmRpZ19vdXRfbmlkLCBmb3JtYXQpICYmCkBAIC0xODgzLDEzICsxODkyLDIwIEBACiAJCQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgbW91dC0+ZGlnX291dF9uaWQsIDAsIDAsIDApOwogCQl9CiAJfQotCXVwKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAogCS8qIGZyb250ICovCiAJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIG5pZHNbSERBX0ZST05UXSwgc3RyZWFtX3RhZywgMCwgZm9ybWF0KTsKIAlpZiAobW91dC0+aHBfbmlkKQogCQkvKiBoZWFkcGhvbmUgb3V0IHdpbGwganVzdCBkZWNvZGUgZnJvbnQgbGVmdC9yaWdodCAoc3RlcmVvKSAqLwogCQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgbW91dC0+aHBfbmlkLCBzdHJlYW1fdGFnLCAwLCBmb3JtYXQpOworCS8qIGV4dHJhIG91dHB1dHMgY29waWVkIGZyb20gZnJvbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtb3V0LT5leHRyYV9vdXRfbmlkKTsgaSsrKQorCQlpZiAobW91dC0+ZXh0cmFfb3V0X25pZFtpXSkKKwkJCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLAorCQkJCQkJICAgbW91dC0+ZXh0cmFfb3V0X25pZFtpXSwKKwkJCQkJCSAgIHN0cmVhbV90YWcsIDAsIGZvcm1hdCk7CisKIAkvKiBzdXJyb3VuZHMgKi8KIAlmb3IgKGkgPSAxOyBpIDwgbW91dC0+bnVtX2RhY3M7IGkrKykgewogCQlpZiAoY2hzID49IChpICsgMSkgKiAyKSAvKiBpbmRlcGVuZGVudCBvdXQgKi8KQEAgLTE5MTQsMTIgKzE5MzAsMTcgQEAKIAkJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIG5pZHNbaV0sIDAsIDAsIDApOwogCWlmIChtb3V0LT5ocF9uaWQpCiAJCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBtb3V0LT5ocF9uaWQsIDAsIDAsIDApOwotCWRvd24oJmNvZGVjLT5zcGRpZl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW91dC0+ZXh0cmFfb3V0X25pZCk7IGkrKykKKwkJaWYgKG1vdXQtPmV4dHJhX291dF9uaWRbaV0pCisJCQlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywKKwkJCQkJCSAgIG1vdXQtPmV4dHJhX291dF9uaWRbaV0sCisJCQkJCQkgICAwLCAwLCAwKTsKKwltdXRleF9sb2NrKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOwogCWlmIChtb3V0LT5kaWdfb3V0X25pZCAmJiBtb3V0LT5kaWdfb3V0X3VzZWQgPT0gSERBX0RJR19BTkFMT0dfRFVQKSB7CiAJCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBtb3V0LT5kaWdfb3V0X25pZCwgMCwgMCwgMCk7CiAJCW1vdXQtPmRpZ19vdXRfdXNlZCA9IDA7CiAJfQotCXVwKCZjb2RlYy0+c3BkaWZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY29kZWMtPnNwZGlmX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkzNSwxMyArMTk1NiwyOSBAQAogCXJldHVybiAwOwogfQogCi0vKiBwYXJzZSBhbGwgcGluIHdpZGdldHMgYW5kIHN0b3JlIHRoZSB1c2VmdWwgcGluIG5pZHMgdG8gY2ZnICovCisvKgorICogUGFyc2UgYWxsIHBpbiB3aWRnZXRzIGFuZCBzdG9yZSB0aGUgdXNlZnVsIHBpbiBuaWRzIHRvIGNmZworICoKKyAqIFRoZSBudW1iZXIgb2YgbGluZS1vdXRzIG9yIGFueSBwcmltYXJ5IG91dHB1dCBpcyBzdG9yZWQgaW4gbGluZV9vdXRzLAorICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIG91dHB1dCBwaW5zIGFyZSBhc3NpZ25lZCB0byBsaW5lX291dF9waW5zW10sCisgKiBpbiB0aGUgb3JkZXIgb2YgZnJvbnQsIHJlYXIsIENMRkUsIHNpZGUsIC4uLgorICoKKyAqIElmIG1vcmUgZXh0cmEgb3V0cHV0cyAoc3BlYWtlciBhbmQgaGVhZHBob25lKSBhcmUgZm91bmQsIHRoZSBwaW5zIGFyZQorICogYXNzaXNuZ2VkIHRvIGhwX3BpbiBhbmQgc3BlYWtlcl9waW5zW10sIHJlc3BlY3RpdmVseS4gIElmIG5vIGxpbmUtb3V0IGphY2sKKyAqIGlzIGRldGVjdGVkLCBvbmUgb2Ygc3BlYWtlciBvZiBIUCBwaW5zIGlzIGFzc2lnbmVkIGFzIHRoZSBwcmltYXJ5CisgKiBvdXRwdXQsIGkuZS4gdG8gbGluZV9vdXRfcGluc1swXS4gIFNvLCBsaW5lX291dHMgaXMgYWx3YXlzIHBvc2l0aXZlCisgKiBpZiBhbnkgYW5hbG9nIG91dHB1dCBleGlzdHMuCisgKiAKKyAqIFRoZSBhbmFsb2cgaW5wdXQgcGlucyBhcmUgYXNzaWduZWQgdG8gaW5wdXRfcGlucyBhcnJheS4KKyAqIFRoZSBkaWdpdGFsIGlucHV0L291dHB1dCBwaW5zIGFyZSBhc3NpZ25lZCB0byBkaWdfaW5fcGluIGFuZCBkaWdfb3V0X3BpbiwKKyAqIHJlc3BlY3RpdmVseS4KKyAqLwogaW50IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZywKIAkJCQkgaGRhX25pZF90ICppZ25vcmVfbmlkcykKIHsKIAloZGFfbmlkX3QgbmlkLCBuaWRfc3RhcnQ7CiAJaW50IGksIGosIG5vZGVzOwotCXNob3J0IHNlcSwgc2VxdWVuY2VzWzRdLCBhc3NvY19saW5lX291dDsKKwlzaG9ydCBzZXEsIGFzc29jX2xpbmVfb3V0LCBzZXF1ZW5jZXNbQVJSQVlfU0laRShjZmctPmxpbmVfb3V0X3BpbnMpXTsKIAogCW1lbXNldChjZmcsIDAsIHNpemVvZigqY2ZnKSk7CiAKQEAgLTE5ODMsNyArMjAyMCwxMCBAQAogCQkJY2ZnLT5saW5lX291dHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIEFDX0pBQ0tfU1BFQUtFUjoKLQkJCWNmZy0+c3BlYWtlcl9waW4gPSBuaWQ7CisJCQlpZiAoY2ZnLT5zcGVha2VyX291dHMgPj0gQVJSQVlfU0laRShjZmctPnNwZWFrZXJfcGlucykpCisJCQkJY29udGludWU7CisJCQljZmctPnNwZWFrZXJfcGluc1tjZmctPnNwZWFrZXJfb3V0c10gPSBuaWQ7CisJCQljZmctPnNwZWFrZXJfb3V0cysrOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNfSkFDS19IUF9PVVQ6CiAJCQljZmctPmhwX3BpbiA9IG5pZDsKQEAgLTIwNDgsNiArMjA4OCw0NiBAQAogCQlicmVhazsKIAl9CiAKKwkvKgorCSAqIGRlYnVnIHByaW50cyBvZiB0aGUgcGFyc2VkIHJlc3VsdHMKKwkgKi8KKwlzbmRfcHJpbnRkKCJhdXRvY29uZmlnOiBsaW5lX291dHM9JWQgKDB4JXgvMHgleC8weCV4LzB4JXgvMHgleClcbiIsCisJCSAgIGNmZy0+bGluZV9vdXRzLCBjZmctPmxpbmVfb3V0X3BpbnNbMF0sIGNmZy0+bGluZV9vdXRfcGluc1sxXSwKKwkJICAgY2ZnLT5saW5lX291dF9waW5zWzJdLCBjZmctPmxpbmVfb3V0X3BpbnNbM10sCisJCSAgIGNmZy0+bGluZV9vdXRfcGluc1s0XSk7CisJc25kX3ByaW50ZCgiICAgc3BlYWtlcl9vdXRzPSVkICgweCV4LzB4JXgvMHgleC8weCV4LzB4JXgpXG4iLAorCQkgICBjZmctPnNwZWFrZXJfb3V0cywgY2ZnLT5zcGVha2VyX3BpbnNbMF0sCisJCSAgIGNmZy0+c3BlYWtlcl9waW5zWzFdLCBjZmctPnNwZWFrZXJfcGluc1syXSwKKwkJICAgY2ZnLT5zcGVha2VyX3BpbnNbM10sIGNmZy0+c3BlYWtlcl9waW5zWzRdKTsKKwlzbmRfcHJpbnRkKCIgICBocD0weCV4LCBkaWdfb3V0PTB4JXgsIGRpbl9pbj0weCV4XG4iLAorCQkgICBjZmctPmhwX3BpbiwgY2ZnLT5kaWdfb3V0X3BpbiwgY2ZnLT5kaWdfaW5fcGluKTsKKwlzbmRfcHJpbnRkKCIgICBpbnB1dHM6IG1pYz0weCV4LCBmbWljPTB4JXgsIGxpbmU9MHgleCwgZmxpbmU9MHgleCwiCisJCSAgICIgY2Q9MHgleCwgYXV4PTB4JXhcbiIsCisJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdLAorCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSwKKwkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0xJTkVdLAorCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTElORV0sCisJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9DRF0sCisJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9BVVhdKTsKKworCS8qCisJICogRklYLVVQOiBpZiBubyBsaW5lLW91dHMgYXJlIGRldGVjdGVkLCB0cnkgdG8gdXNlIHNwZWFrZXIgb3IgSFAgcGluCisJICogYXMgYSBwcmltYXJ5IG91dHB1dAorCSAqLworCWlmICghIGNmZy0+bGluZV9vdXRzKSB7CisJCWlmIChjZmctPnNwZWFrZXJfb3V0cykgeworCQkJY2ZnLT5saW5lX291dHMgPSBjZmctPnNwZWFrZXJfb3V0czsKKwkJCW1lbWNweShjZmctPmxpbmVfb3V0X3BpbnMsIGNmZy0+c3BlYWtlcl9waW5zLAorCQkJICAgICAgIHNpemVvZihjZmctPnNwZWFrZXJfcGlucykpOworCQkJY2ZnLT5zcGVha2VyX291dHMgPSAwOworCQkJbWVtc2V0KGNmZy0+c3BlYWtlcl9waW5zLCAwLCBzaXplb2YoY2ZnLT5zcGVha2VyX3BpbnMpKTsKKwkJfSBlbHNlIGlmIChjZmctPmhwX3BpbikgeworCQkJY2ZnLT5saW5lX291dHMgPSAxOworCQkJY2ZnLT5saW5lX291dF9waW5zWzBdID0gY2ZnLT5ocF9waW47CisJCQljZmctPmhwX3BpbiA9IDA7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKaW5kZXggNjNlMjZjNy4uNDA1MjBlOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCkBAIC00MzgsNyArNDM4LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNvZGVjX2xpc3Q7CiAJc3RydWN0IGhkYV9jb2RlYyAqY2FkZHJfdGJsW0hEQV9NQVhfQ09ERUNfQUREUkVTUyArIDFdOyAvKiBjYWRkciAtPiBjb2RlYyAqLwogCi0Jc3RydWN0IHNlbWFwaG9yZSBjbWRfbXV0ZXg7CisJc3RydWN0IG11dGV4IGNtZF9tdXRleDsKIAogCS8qIHVuc29saWNpdGVkIGV2ZW50IHF1ZXVlICovCiAJc3RydWN0IGhkYV9idXNfdW5zb2xpY2l0ZWQgKnVuc29sOwpAQCAtNTU5LDcgKzU1OSw3IEBACiAJaW50IGFtcF9pbmZvX3NpemU7CiAJc3RydWN0IGhkYV9hbXBfaW5mbyAqYW1wX2luZm87CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNwZGlmX211dGV4OworCXN0cnVjdCBtdXRleCBzcGRpZl9tdXRleDsKIAl1bnNpZ25lZCBpbnQgc3BkaWZfc3RhdHVzOwkvKiBJRUM5NTggc3RhdHVzIGJpdHMgKi8KIAl1bnNpZ25lZCBzaG9ydCBzcGRpZl9jdGxzOwkvKiBTUERJRiBjb250cm9sIGJpdHMgKi8KIAl1bnNpZ25lZCBpbnQgc3BkaWZfaW5fZW5hYmxlOwkvKiBTUERJRiBpbnB1dCBlbmFibGU/ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKaW5kZXggMzllZGZjZi4uODVhZDE2NGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKQEAgLTQ3LDEwICs0NywxMCBAQAogCiAvKiBwYXRjaC1zcGVjaWZpYyByZWNvcmQgKi8KIHN0cnVjdCBoZGFfZ3NwZWMgewotCXN0cnVjdCBoZGFfZ25vZGUgKmRhY19ub2RlOwkvKiBEQUMgbm9kZSAqLwotCXN0cnVjdCBoZGFfZ25vZGUgKm91dF9waW5fbm9kZTsJLyogT3V0cHV0IHBpbiAoTGluZS1PdXQpIG5vZGUgKi8KLQlzdHJ1Y3QgaGRhX2dub2RlICpwY21fdm9sX25vZGU7CS8qIE5vZGUgZm9yIFBDTSB2b2x1bWUgKi8KLQl1bnNpZ25lZCBpbnQgcGNtX3ZvbF9pbmRleDsJLyogY29ubmVjdGlvbiBvZiBQQ00gdm9sdW1lICovCisJc3RydWN0IGhkYV9nbm9kZSAqZGFjX25vZGVbMl07CS8qIERBQyBub2RlICovCisJc3RydWN0IGhkYV9nbm9kZSAqb3V0X3Bpbl9ub2RlWzJdOwkvKiBPdXRwdXQgcGluIChMaW5lLU91dCkgbm9kZSAqLworCXN0cnVjdCBoZGFfZ25vZGUgKnBjbV92b2xfbm9kZVsyXTsJLyogTm9kZSBmb3IgUENNIHZvbHVtZSAqLworCXVuc2lnbmVkIGludCBwY21fdm9sX2luZGV4WzJdOwkvKiBjb25uZWN0aW9uIG9mIFBDTSB2b2x1bWUgKi8KIAogCXN0cnVjdCBoZGFfZ25vZGUgKmFkY19ub2RlOwkvKiBBREMgbm9kZSAqLwogCXN0cnVjdCBoZGFfZ25vZGUgKmNhcF92b2xfbm9kZTsJLyogTm9kZSBmb3IgY2FwdHVyZSB2b2x1bWUgKi8KQEAgLTY5LDggKzY5LDEyIEBACiAvKgogICogcmV0cmlldmUgdGhlIGRlZmF1bHQgZGV2aWNlIHR5cGUgZnJvbSB0aGUgZGVmYXVsdCBjb25maWcgdmFsdWUKICAqLwotI2RlZmluZSBkZWZjZmdfdHlwZShub2RlKSAoKChub2RlKS0+ZGVmX2NmZyAmIEFDX0RFRkNGR19ERVZJQ0UpID4+IEFDX0RFRkNGR19ERVZJQ0VfU0hJRlQpCi0jZGVmaW5lIGRlZmNmZ19sb2NhdGlvbihub2RlKSAoKChub2RlKS0+ZGVmX2NmZyAmIEFDX0RFRkNGR19MT0NBVElPTikgPj4gQUNfREVGQ0ZHX0xPQ0FUSU9OX1NISUZUKQorI2RlZmluZSBkZWZjZmdfdHlwZShub2RlKSAoKChub2RlKS0+ZGVmX2NmZyAmIEFDX0RFRkNGR19ERVZJQ0UpID4+IFwKKwkJCSAgIEFDX0RFRkNGR19ERVZJQ0VfU0hJRlQpCisjZGVmaW5lIGRlZmNmZ19sb2NhdGlvbihub2RlKSAoKChub2RlKS0+ZGVmX2NmZyAmIEFDX0RFRkNGR19MT0NBVElPTikgPj4gXAorCQkJICAgICAgIEFDX0RFRkNGR19MT0NBVElPTl9TSElGVCkKKyNkZWZpbmUgZGVmY2ZnX3BvcnRfY29ubihub2RlKSAoKChub2RlKS0+ZGVmX2NmZyAmIEFDX0RFRkNGR19QT1JUX0NPTk4pID4+IFwKKwkJCQlBQ19ERUZDRkdfUE9SVF9DT05OX1NISUZUKQogCiAvKgogICogZGVzdHJ1Y3RvcgpAQCAtMjYxLDcgKzI2NSw3IEBACiAgKiByZXR1cm5zIDAgaWYgbm90IGZvdW5kLCAxIGlmIGZvdW5kLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKi8KIHN0YXRpYyBpbnQgcGFyc2Vfb3V0cHV0X3BhdGgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBoZGFfZ3NwZWMgKnNwZWMsCi0JCQkgICAgIHN0cnVjdCBoZGFfZ25vZGUgKm5vZGUpCisJCQkgICAgIHN0cnVjdCBoZGFfZ25vZGUgKm5vZGUsIGludCBkYWNfaWR4KQogewogCWludCBpLCBlcnI7CiAJc3RydWN0IGhkYV9nbm9kZSAqY2hpbGQ7CkBAIC0yNzYsMTQgKzI4MCwxNCBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJc25kX3ByaW50ZGQoIkFVRF9PVVQgZm91bmQgJXhcbiIsIG5vZGUtPm5pZCk7Ci0JCWlmIChzcGVjLT5kYWNfbm9kZSkgeworCQlpZiAoc3BlYy0+ZGFjX25vZGVbZGFjX2lkeF0pIHsKIAkJCS8qIGFscmVhZHkgREFDIG5vZGUgaXMgYXNzaWduZWQsIGp1c3QgdW5tdXRlICYgY29ubmVjdCAqLwotCQkJcmV0dXJuIG5vZGUgPT0gc3BlYy0+ZGFjX25vZGU7CisJCQlyZXR1cm4gbm9kZSA9PSBzcGVjLT5kYWNfbm9kZVtkYWNfaWR4XTsKIAkJfQotCQlzcGVjLT5kYWNfbm9kZSA9IG5vZGU7CisJCXNwZWMtPmRhY19ub2RlW2RhY19pZHhdID0gbm9kZTsKIAkJaWYgKG5vZGUtPndpZF9jYXBzICYgQUNfV0NBUF9PVVRfQU1QKSB7Ci0JCQlzcGVjLT5wY21fdm9sX25vZGUgPSBub2RlOwotCQkJc3BlYy0+cGNtX3ZvbF9pbmRleCA9IDA7CisJCQlzcGVjLT5wY21fdm9sX25vZGVbZGFjX2lkeF0gPSBub2RlOworCQkJc3BlYy0+cGNtX3ZvbF9pbmRleFtkYWNfaWR4XSA9IDA7CiAJCX0KIAkJcmV0dXJuIDE7IC8qIGZvdW5kICovCiAJfQpAQCAtMjkyLDcgKzI5Niw3IEBACiAJCWNoaWxkID0gaGRhX2dldF9ub2RlKHNwZWMsIG5vZGUtPmNvbm5fbGlzdFtpXSk7CiAJCWlmICghIGNoaWxkKQogCQkJY29udGludWU7Ci0JCWVyciA9IHBhcnNlX291dHB1dF9wYXRoKGNvZGVjLCBzcGVjLCBjaGlsZCk7CisJCWVyciA9IHBhcnNlX291dHB1dF9wYXRoKGNvZGVjLCBzcGVjLCBjaGlsZCwgZGFjX2lkeCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJZWxzZSBpZiAoZXJyID4gMCkgewpAQCAtMzAzLDEzICszMDcsMTMgQEAKIAkJCQlzZWxlY3RfaW5wdXRfY29ubmVjdGlvbihjb2RlYywgbm9kZSwgaSk7CiAJCQl1bm11dGVfaW5wdXQoY29kZWMsIG5vZGUsIGkpOwogCQkJdW5tdXRlX291dHB1dChjb2RlYywgbm9kZSk7Ci0JCQlpZiAoISBzcGVjLT5wY21fdm9sX25vZGUpIHsKKwkJCWlmICghIHNwZWMtPnBjbV92b2xfbm9kZVtkYWNfaWR4XSkgewogCQkJCWlmIChub2RlLT53aWRfY2FwcyAmIEFDX1dDQVBfSU5fQU1QKSB7Ci0JCQkJCXNwZWMtPnBjbV92b2xfbm9kZSA9IG5vZGU7Ci0JCQkJCXNwZWMtPnBjbV92b2xfaW5kZXggPSBpOworCQkJCQlzcGVjLT5wY21fdm9sX25vZGVbZGFjX2lkeF0gPSBub2RlOworCQkJCQlzcGVjLT5wY21fdm9sX2luZGV4W2RhY19pZHhdID0gaTsKIAkJCQl9IGVsc2UgaWYgKG5vZGUtPndpZF9jYXBzICYgQUNfV0NBUF9PVVRfQU1QKSB7Ci0JCQkJCXNwZWMtPnBjbV92b2xfbm9kZSA9IG5vZGU7Ci0JCQkJCXNwZWMtPnBjbV92b2xfaW5kZXggPSAwOworCQkJCQlzcGVjLT5wY21fdm9sX25vZGVbZGFjX2lkeF0gPSBub2RlOworCQkJCQlzcGVjLT5wY21fdm9sX2luZGV4W2RhY19pZHhdID0gMDsKIAkJCQl9CiAJCQl9CiAJCQlyZXR1cm4gMTsKQEAgLTMzOSw2ICszNDMsOCBAQAogCQkvKiBvdXRwdXQgY2FwYWJsZT8gKi8KIAkJaWYgKCEgKG5vZGUtPnBpbl9jYXBzICYgQUNfUElOQ0FQX09VVCkpCiAJCQljb250aW51ZTsKKwkJaWYgKGRlZmNmZ19wb3J0X2Nvbm4obm9kZSkgPT0gQUNfSkFDS19QT1JUX05PTkUpCisJCQljb250aW51ZTsgLyogdW5jb25uZWN0ZWQgKi8KIAkJaWYgKGphY2tfdHlwZSA+PSAwKSB7CiAJCQlpZiAoamFja190eXBlICE9IGRlZmNmZ190eXBlKG5vZGUpKQogCQkJCWNvbnRpbnVlOwpAQCAtMzUwLDEwICszNTYsMTUgQEAKIAkJCQljb250aW51ZTsKIAkJfQogCQljbGVhcl9jaGVja19mbGFncyhzcGVjKTsKLQkJZXJyID0gcGFyc2Vfb3V0cHV0X3BhdGgoY29kZWMsIHNwZWMsIG5vZGUpOworCQllcnIgPSBwYXJzZV9vdXRwdXRfcGF0aChjb2RlYywgc3BlYywgbm9kZSwgMCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIE5VTEw7Ci0JCWVsc2UgaWYgKGVyciA+IDApIHsKKwkJaWYgKCEgZXJyICYmIHNwZWMtPm91dF9waW5fbm9kZVswXSkgeworCQkJZXJyID0gcGFyc2Vfb3V0cHV0X3BhdGgoY29kZWMsIHNwZWMsIG5vZGUsIDEpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaWYgKGVyciA+IDApIHsKIAkJCS8qIHVubXV0ZSB0aGUgUElOIG91dHB1dCAqLwogCQkJdW5tdXRlX291dHB1dChjb2RlYywgbm9kZSk7CiAJCQkvKiBzZXQgUElOLU91dCBlbmFibGUgKi8KQEAgLTM4MSwyMCArMzkyLDI4IEBACiAJLyogZmlyc3QsIGxvb2sgZm9yIHRoZSBsaW5lLW91dCBwaW4gKi8KIAlub2RlID0gcGFyc2Vfb3V0cHV0X2phY2soY29kZWMsIHNwZWMsIEFDX0pBQ0tfTElORV9PVVQpOwogCWlmIChub2RlKSAvKiBmb3VuZCwgcmVtZW1iZXIgdGhlIFBJTiBub2RlICovCi0JCXNwZWMtPm91dF9waW5fbm9kZSA9IG5vZGU7CisJCXNwZWMtPm91dF9waW5fbm9kZVswXSA9IG5vZGU7CisJZWxzZSB7CisJCS8qIGlmIG5vIGxpbmUtb3V0IGlzIGZvdW5kLCB0cnkgc3BlYWtlciBvdXQgKi8KKwkJbm9kZSA9IHBhcnNlX291dHB1dF9qYWNrKGNvZGVjLCBzcGVjLCBBQ19KQUNLX1NQRUFLRVIpOworCQlpZiAobm9kZSkKKwkJCXNwZWMtPm91dF9waW5fbm9kZVswXSA9IG5vZGU7CisJfQogCS8qIGxvb2sgZm9yIHRoZSBIUC1vdXQgcGluICovCiAJbm9kZSA9IHBhcnNlX291dHB1dF9qYWNrKGNvZGVjLCBzcGVjLCBBQ19KQUNLX0hQX09VVCk7CiAJaWYgKG5vZGUpIHsKLQkJaWYgKCEgc3BlYy0+b3V0X3Bpbl9ub2RlKQotCQkJc3BlYy0+b3V0X3Bpbl9ub2RlID0gbm9kZTsKKwkJaWYgKCEgc3BlYy0+b3V0X3Bpbl9ub2RlWzBdKQorCQkJc3BlYy0+b3V0X3Bpbl9ub2RlWzBdID0gbm9kZTsKKwkJZWxzZQorCQkJc3BlYy0+b3V0X3Bpbl9ub2RlWzFdID0gbm9kZTsKIAl9CiAKLQlpZiAoISBzcGVjLT5vdXRfcGluX25vZGUpIHsKKwlpZiAoISBzcGVjLT5vdXRfcGluX25vZGVbMF0pIHsKIAkJLyogbm8gbGluZS1vdXQgb3IgSFAgcGlucyBmb3VuZCwKIAkJICogdGhlbiBjaG9vc2UgZm9yIHRoZSBmaXJzdCBvdXRwdXQgcGluCiAJCSAqLwotCQlzcGVjLT5vdXRfcGluX25vZGUgPSBwYXJzZV9vdXRwdXRfamFjayhjb2RlYywgc3BlYywgLTEpOwotCQlpZiAoISBzcGVjLT5vdXRfcGluX25vZGUpCisJCXNwZWMtPm91dF9waW5fbm9kZVswXSA9IHBhcnNlX291dHB1dF9qYWNrKGNvZGVjLCBzcGVjLCAtMSk7CisJCWlmICghIHNwZWMtPm91dF9waW5fbm9kZVswXSkKIAkJCXNuZF9wcmludGQoImhkYV9nZW5lcmljOiBubyBwcm9wZXIgb3V0cHV0IHBhdGggZm91bmRcbiIpOwogCX0KIApAQCAtNTA1LDYgKzUyNCw5IEBACiAJaWYgKCEgKG5vZGUtPnBpbl9jYXBzICYgQUNfUElOQ0FQX0lOKSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoZGVmY2ZnX3BvcnRfY29ubihub2RlKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDA7IC8qIHVuY29ubmVjdGVkICovCisKIAlpZiAobm9kZS0+d2lkX2NhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpCiAJCXJldHVybiAwOyAvKiBza2lwIFNQRElGICovCiAKQEAgLTcwMywxMiArNzI1LDE2IEBACiBzdGF0aWMgaW50IGJ1aWxkX291dHB1dF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgaGRhX2dzcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IGVycjsKKwlzdGF0aWMgY29uc3QgY2hhciAqdHlwZXNbMl0gPSB7ICJNYXN0ZXIiLCAiSGVhZHBob25lIiB9OworCWludCBpLCBlcnI7CiAKLQllcnIgPSBjcmVhdGVfbWl4ZXIoY29kZWMsIHNwZWMtPnBjbV92b2xfbm9kZSwgc3BlYy0+cGNtX3ZvbF9pbmRleCwKLQkJCSAgICJQQ00iLCAiUGxheWJhY2siKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlmb3IgKGkgPSAwOyBpIDwgMiAmJiBzcGVjLT5wY21fdm9sX25vZGVbaV07IGkrKykgeworCQllcnIgPSBjcmVhdGVfbWl4ZXIoY29kZWMsIHNwZWMtPnBjbV92b2xfbm9kZVtpXSwKKwkJCQkgICBzcGVjLT5wY21fdm9sX2luZGV4W2ldLAorCQkJCSAgIHR5cGVzW2ldLCAiUGxheWJhY2siKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODA1LDcgKzgzMSw3IEBACiAJaW50IGVycjsKIAljb25zdCBjaGFyICp0eXBlOwogCi0JaWYgKCEgc3BlYy0+b3V0X3Bpbl9ub2RlKQorCWlmICghIHNwZWMtPm91dF9waW5fbm9kZVswXSkKIAkJcmV0dXJuIDA7CiAKIAlsaXN0X2Zvcl9lYWNoKHAsICZzcGVjLT5uaWRfbGlzdCkgewpAQCAtODIwLDcgKzg0Niw4IEBACiAJCQlpZiAoY2hlY2tfZXhpc3RpbmdfY29udHJvbChjb2RlYywgdHlwZSwgIlBsYXliYWNrIikpCiAJCQkJY29udGludWU7CiAJCQljbGVhcl9jaGVja19mbGFncyhzcGVjKTsKLQkJCWVyciA9IHBhcnNlX2xvb3BiYWNrX3BhdGgoY29kZWMsIHNwZWMsIHNwZWMtPm91dF9waW5fbm9kZSwKKwkJCWVyciA9IHBhcnNlX2xvb3BiYWNrX3BhdGgoY29kZWMsIHNwZWMsCisJCQkJCQkgIHNwZWMtPm91dF9waW5fbm9kZVswXSwKIAkJCQkJCSAgbm9kZSwgdHlwZSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwpAQCAtODU1LDEyICs4ODIsMzcgQEAKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIH07CiAKK3N0YXRpYyBpbnQgZ2VuZXJpY19wY20yX3ByZXBhcmUoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQl1bnNpZ25lZCBpbnQgc3RyZWFtX3RhZywKKwkJCQl1bnNpZ25lZCBpbnQgZm9ybWF0LAorCQkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBoZGFfZ3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBoaW5mby0+bmlkLCBzdHJlYW1fdGFnLCAwLCBmb3JtYXQpOworCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5kYWNfbm9kZVsxXS0+bmlkLAorCQkJCSAgIHN0cmVhbV90YWcsIDAsIGZvcm1hdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJpY19wY20yX2NsZWFudXAoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgaGRhX2dzcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgaGluZm8tPm5pZCwgMCwgMCwgMCk7CisJc25kX2hkYV9jb2RlY19zZXR1cF9zdHJlYW0oY29kZWMsIHNwZWMtPmRhY19ub2RlWzFdLT5uaWQsIDAsIDAsIDApOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJ1aWxkX2dlbmVyaWNfcGNtcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgaGRhX2dzcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RydWN0IGhkYV9wY20gKmluZm8gPSAmc3BlYy0+cGNtX3JlYzsKIAotCWlmICghIHNwZWMtPmRhY19ub2RlICYmICEgc3BlYy0+YWRjX25vZGUpIHsKKwlpZiAoISBzcGVjLT5kYWNfbm9kZVswXSAmJiAhIHNwZWMtPmFkY19ub2RlKSB7CiAJCXNuZF9wcmludGQoImhkYV9nZW5lcmljOiBubyBQQ00gZm91bmRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC04NjksOSArOTIxLDEzIEBACiAJY29kZWMtPnBjbV9pbmZvID0gaW5mbzsKIAogCWluZm8tPm5hbWUgPSAiSERBIEdlbmVyaWMiOwotCWlmIChzcGVjLT5kYWNfbm9kZSkgeworCWlmIChzcGVjLT5kYWNfbm9kZVswXSkgewogCQlpbmZvLT5zdHJlYW1bMF0gPSBnZW5lcmljX3BjbV9wbGF5YmFjazsKLQkJaW5mby0+c3RyZWFtWzBdLm5pZCA9IHNwZWMtPmRhY19ub2RlLT5uaWQ7CisJCWluZm8tPnN0cmVhbVswXS5uaWQgPSBzcGVjLT5kYWNfbm9kZVswXS0+bmlkOworCQlpZiAoc3BlYy0+ZGFjX25vZGVbMV0pIHsKKwkJCWluZm8tPnN0cmVhbVswXS5vcHMucHJlcGFyZSA9IGdlbmVyaWNfcGNtMl9wcmVwYXJlOworCQkJaW5mby0+c3RyZWFtWzBdLm9wcy5jbGVhbnVwID0gZ2VuZXJpY19wY20yX2NsZWFudXA7CisJCX0KIAl9CiAJaWYgKHNwZWMtPmFkY19ub2RlKSB7CiAJCWluZm8tPnN0cmVhbVsxXSA9IGdlbmVyaWNfcGNtX3BsYXliYWNrOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggZmQxMmI2OS4uYzA5NjYwNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCkBAIC01Myw2ICs1NCw3IEBACiBzdGF0aWMgY2hhciAqbW9kZWw7CiBzdGF0aWMgaW50IHBvc2l0aW9uX2ZpeDsKIHN0YXRpYyBpbnQgcHJvYmVfbWFzayA9IC0xOworc3RhdGljIGludCBzaW5nbGVfY21kOwogCiBtb2R1bGVfcGFyYW0oaW5kZXgsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIEludGVsIEhEIGF1ZGlvIGludGVyZmFjZS4iKTsKQEAgLTY0LDYgKzY2LDggQEAKIE1PRFVMRV9QQVJNX0RFU0MocG9zaXRpb25fZml4LCAiRml4IERNQSBwb2ludGVyICgwID0gYXV0bywgMSA9IG5vbmUsIDIgPSBQT1NCVUYsIDMgPSBGSUZPIHNpemUpLiIpOwogbW9kdWxlX3BhcmFtKHByb2JlX21hc2ssIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByb2JlX21hc2ssICJCaXRtYXNrIHRvIHByb2JlIGNvZGVjcyAoZGVmYXVsdCA9IC0xKS4iKTsKK21vZHVsZV9wYXJhbShzaW5nbGVfY21kLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2luZ2xlX2NtZCwgIlVzZSBzaW5nbGUgY29tbWFuZCB0byBjb21tdW5pY2F0ZSB3aXRoIGNvZGVjcyAoZm9yIGRlYnVnZ2luZyBvbmx5KS4iKTsKIAogCiAvKiBqdXN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCkBAIC0yMzUsMTIgKzIzOSw2IEBACiAjZGVmaW5lIE5WSURJQV9IREFfRU5BQkxFX0NPSEJJVFMgICAgIDB4MGYKIAogLyoKLSAqIFVzZSBDT1JCL1JJUkIgZm9yIGNvbW11bmljYXRpb24gZnJvbS90byBjb2RlY3MuCi0gKiBUaGlzIGlzIHRoZSB3YXkgcmVjb21tZW5kZWQgYnkgSW50ZWwgKHNlZSBiZWxvdykuCi0gKi8KLSNkZWZpbmUgVVNFX0NPUkJfUklSQgotCi0vKgogICovCiAKIHN0cnVjdCBhenhfZGV2IHsKQEAgLTI1Miw3ICsyNTAsNiBAQAogCXVuc2lnbmVkIGludCBmcmFnc2l6ZTsJCS8qIHNpemUgb2YgZWFjaCBwZXJpb2QgaW4gYnl0ZXMgKi8KIAl1bnNpZ25lZCBpbnQgZnJhZ3M7CQkvKiBudW1iZXIgZm9yIHBlcmlvZCBpbiB0aGUgcGxheSBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgZmlmb19zaXplOwkJLyogRklGTyBzaXplICovCi0JdW5zaWduZWQgaW50IGxhc3RfcG9zOwkJLyogbGFzdCB1cGRhdGVkIHBlcmlvZCBwb3NpdGlvbiAqLwogCiAJdm9pZCBfX2lvbWVtICpzZF9hZGRyOwkJLyogc3RyZWFtIGRlc2NyaXB0b3IgcG9pbnRlciAqLwogCkBAIC0yNjMsMTAgKzI2MCwxMSBAQAogCXVuc2lnbmVkIGludCBmb3JtYXRfdmFsOwkvKiBmb3JtYXQgdmFsdWUgdG8gYmUgc2V0IGluIHRoZSBjb250cm9sbGVyIGFuZCB0aGUgY29kZWMgKi8KIAl1bnNpZ25lZCBjaGFyIHN0cmVhbV90YWc7CS8qIGFzc2lnbmVkIHN0cmVhbSAqLwogCXVuc2lnbmVkIGNoYXIgaW5kZXg7CQkvKiBzdHJlYW0gaW5kZXggKi8KKwkvKiBmb3Igc2FuaXR5IGNoZWNrIG9mIHBvc2l0aW9uIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCBwZXJpb2RfaW50cjsKIAogCXVuc2lnbmVkIGludCBvcGVuZWQ6IDE7CiAJdW5zaWduZWQgaW50IHJ1bm5pbmc6IDE7Ci0JdW5zaWduZWQgaW50IHBlcmlvZF91cGRhdGluZzogMTsKIH07CiAKIC8qIENPUkIvUklSQiAqLwpAQCAtMzAwLDcgKzI5OCw3IEBACiAKIAkvKiBsb2NrcyAqLwogCXNwaW5sb2NrX3QgcmVnX2xvY2s7Ci0Jc3RydWN0IHNlbWFwaG9yZSBvcGVuX211dGV4OworCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwogCiAJLyogc3RyZWFtcyAoeCBudW1fc3RyZWFtcykgKi8KIAlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldjsKQEAgLTMyNSw2ICszMjMsNyBAQAogCS8qIGZsYWdzICovCiAJaW50IHBvc2l0aW9uX2ZpeDsKIAl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ6IDE7CisJdW5zaWduZWQgaW50IHNpbmdsZV9jbWQ6IDE7CiB9OwogCiAvKiBkcml2ZXIgdHlwZXMgKi8KQEAgLTM4OCw3ICszODcsNiBAQAogICogSW50ZXJmYWNlIGZvciBIRCBjb2RlYwogICovCiAKLSNpZmRlZiBVU0VfQ09SQl9SSVJCCiAvKgogICogQ09SQiAvIFJJUkIgaW50ZXJmYWNlCiAgKi8KQEAgLTQzNiwxMSArNDM0LDcgQEAKIAkvKiBzZXQgTj0xLCBnZXQgUklSQiByZXNwb25zZSBpbnRlcnJ1cHQgZm9yIG5ldyBlbnRyeSAqLwogCWF6eF93cml0ZXcoY2hpcCwgUklOVENOVCwgMSk7CiAJLyogZW5hYmxlIHJpcmIgZG1hIGFuZCByZXNwb25zZSBpcnEgKi8KLSNpZmRlZiBVU0VfQ09SQl9SSVJCCiAJYXp4X3dyaXRlYihjaGlwLCBSSVJCQ1RMLCBJQ0g2X1JCQ1RMX0RNQV9FTiB8IElDSDZfUkJDVExfSVJRX0VOKTsKLSNlbHNlCi0JYXp4X3dyaXRlYihjaGlwLCBSSVJCQ1RMLCBJQ0g2X1JCQ1RMX0RNQV9FTik7Ci0jZW5kaWYKIAljaGlwLT5yaXJiLnJwID0gY2hpcC0+cmlyYi5jbWRzID0gMDsKIH0KIApAQCAtNDUyLDggKzQ0Niw4IEBACiB9CiAKIC8qIHNlbmQgYSBjb21tYW5kICovCi1zdGF0aWMgaW50IGF6eF9zZW5kX2NtZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdCwKLQkJCXVuc2lnbmVkIGludCB2ZXJiLCB1bnNpZ25lZCBpbnQgcGFyYSkKK3N0YXRpYyBpbnQgYXp4X2NvcmJfc2VuZF9jbWQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBkaXJlY3QsCisJCQkgICAgIHVuc2lnbmVkIGludCB2ZXJiLCB1bnNpZ25lZCBpbnQgcGFyYSkKIHsKIAlzdHJ1Y3QgYXp4ICpjaGlwID0gY29kZWMtPmJ1cy0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCB3cDsKQEAgLTUwOSwxOCArNTAzLDIxIEBACiB9CiAKIC8qIHJlY2VpdmUgYSByZXNwb25zZSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhenhfZ2V0X3Jlc3BvbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHVuc2lnbmVkIGludCBhenhfcmlyYl9nZXRfcmVzcG9uc2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGF6eCAqY2hpcCA9IGNvZGVjLT5idXMtPnByaXZhdGVfZGF0YTsKIAlpbnQgdGltZW91dCA9IDUwOwogCiAJd2hpbGUgKGNoaXAtPnJpcmIuY21kcykgewogCQlpZiAoISAtLXRpbWVvdXQpIHsKLQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCi0JCQkJc25kX3ByaW50ayhLRVJOX0VSUgotCQkJCQkiYXp4X2dldF9yZXNwb25zZSB0aW1lb3V0XG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCQkgICAiaGRhX2ludGVsOiBhenhfZ2V0X3Jlc3BvbnNlIHRpbWVvdXQsICIKKwkJCQkgICAic3dpdGNoaW5nIHRvIHNpbmdsZV9jbWQgbW9kZS4uLlxuIik7CiAJCQljaGlwLT5yaXJiLnJwID0gYXp4X3JlYWRiKGNoaXAsIFJJUkJXUCk7CiAJCQljaGlwLT5yaXJiLmNtZHMgPSAwOworCQkJLyogc3dpdGNoIHRvIHNpbmdsZV9jbWQgbW9kZSAqLworCQkJY2hpcC0+c2luZ2xlX2NtZCA9IDE7CisJCQlhenhfZnJlZV9jbWRfaW8oY2hpcCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJbXNsZWVwKDEpOwpAQCAtNTI4LDcgKzUyNSw2IEBACiAJcmV0dXJuIGNoaXAtPnJpcmIucmVzOyAvKiB0aGUgbGFzdCB2YWx1ZSAqLwogfQogCi0jZWxzZQogLyoKICAqIFVzZSB0aGUgc2luZ2xlIGltbWVkaWF0ZSBjb21tYW5kIGluc3RlYWQgb2YgQ09SQi9SSVJCIGZvciBzaW1wbGljaXR5CiAgKgpAQCAtNTM5LDEzICs1MzUsMTAgQEAKICAqICAgICAgIEkgbGVmdCB0aGUgY29kZXMsIGhvd2V2ZXIsIGZvciBkZWJ1Z2dpbmcvdGVzdGluZyBwdXJwb3Nlcy4KICAqLwogCi0jZGVmaW5lIGF6eF9hbGxvY19jbWRfaW8oY2hpcCkJMAotI2RlZmluZSBhenhfaW5pdF9jbWRfaW8oY2hpcCkKLSNkZWZpbmUgYXp4X2ZyZWVfY21kX2lvKGNoaXApCi0KIC8qIHNlbmQgYSBjb21tYW5kICovCi1zdGF0aWMgaW50IGF6eF9zZW5kX2NtZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGRpcmVjdCwKLQkJCXVuc2lnbmVkIGludCB2ZXJiLCB1bnNpZ25lZCBpbnQgcGFyYSkKK3N0YXRpYyBpbnQgYXp4X3NpbmdsZV9zZW5kX2NtZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCSAgICAgICBpbnQgZGlyZWN0LCB1bnNpZ25lZCBpbnQgdmVyYiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGFyYSkKIHsKIAlzdHJ1Y3QgYXp4ICpjaGlwID0gY29kZWMtPmJ1cy0+cHJpdmF0ZV9kYXRhOwogCXUzMiB2YWw7CkBAIC01NzMsNyArNTY2LDcgQEAKIH0KIAogLyogcmVjZWl2ZSBhIHJlc3BvbnNlICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF6eF9nZXRfcmVzcG9uc2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgdW5zaWduZWQgaW50IGF6eF9zaW5nbGVfZ2V0X3Jlc3BvbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhenggKmNoaXAgPSBjb2RlYy0+YnVzLT5wcml2YXRlX2RhdGE7CiAJaW50IHRpbWVvdXQgPSA1MDsKQEAgLTU4OCw5ICs1ODEsMzUgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGludCktMTsKIH0KIAotI2RlZmluZSBhenhfdXBkYXRlX3JpcmIoY2hpcCkKKy8qCisgKiBUaGUgYmVsb3cgYXJlIHRoZSBtYWluIGNhbGxiYWNrcyBmcm9tIGhkYV9jb2RlYy4KKyAqCisgKiBUaGV5IGFyZSBqdXN0IHRoZSBza2VsZXRvbiB0byBjYWxsIHN1Yi1jYWxsYmFja3MgYWNjb3JkaW5nIHRvIHRoZQorICogY3VycmVudCBzZXR0aW5nIG9mIGNoaXAtPnNpbmdsZV9jbWQuCisgKi8KIAotI2VuZGlmIC8qIFVTRV9DT1JCX1JJUkIgKi8KKy8qIHNlbmQgYSBjb21tYW5kICovCitzdGF0aWMgaW50IGF6eF9zZW5kX2NtZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCWludCBkaXJlY3QsIHVuc2lnbmVkIGludCB2ZXJiLAorCQkJdW5zaWduZWQgaW50IHBhcmEpCit7CisJc3RydWN0IGF6eCAqY2hpcCA9IGNvZGVjLT5idXMtPnByaXZhdGVfZGF0YTsKKwlpZiAoY2hpcC0+c2luZ2xlX2NtZCkKKwkJcmV0dXJuIGF6eF9zaW5nbGVfc2VuZF9jbWQoY29kZWMsIG5pZCwgZGlyZWN0LCB2ZXJiLCBwYXJhKTsKKwllbHNlCisJCXJldHVybiBhenhfY29yYl9zZW5kX2NtZChjb2RlYywgbmlkLCBkaXJlY3QsIHZlcmIsIHBhcmEpOworfQorCisvKiBnZXQgYSByZXNwb25zZSAqLworc3RhdGljIHVuc2lnbmVkIGludCBhenhfZ2V0X3Jlc3BvbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhenggKmNoaXAgPSBjb2RlYy0+YnVzLT5wcml2YXRlX2RhdGE7CisJaWYgKGNoaXAtPnNpbmdsZV9jbWQpCisJCXJldHVybiBhenhfc2luZ2xlX2dldF9yZXNwb25zZShjb2RlYyk7CisJZWxzZQorCQlyZXR1cm4gYXp4X3JpcmJfZ2V0X3Jlc3BvbnNlKGNvZGVjKTsKK30KKwogCiAvKiByZXNldCBjb2RlYyBsaW5rICovCiBzdGF0aWMgaW50IGF6eF9yZXNldChzdHJ1Y3QgYXp4ICpjaGlwKQpAQCAtNzM3LDcgKzc1Niw4IEBACiAJYXp4X2ludF9lbmFibGUoY2hpcCk7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBjb2RlYyBjb21tYW5kIEkvTyAqLwotCWF6eF9pbml0X2NtZF9pbyhjaGlwKTsKKwlpZiAoISBjaGlwLT5zaW5nbGVfY21kKQorCQlhenhfaW5pdF9jbWRfaW8oY2hpcCk7CiAKIAkvKiBwcm9ncmFtIHRoZSBwb3NpdGlvbiBidWZmZXIgKi8KIAlhenhfd3JpdGVsKGNoaXAsIERQTEJBU0UsICh1MzIpY2hpcC0+cG9zYnVmLmFkZHIpOwpAQCAtNzg0LDExICs4MDQsMTAgQEAKIAkJaWYgKHN0YXR1cyAmIGF6eF9kZXYtPnNkX2ludF9zdGFfbWFzaykgewogCQkJYXp4X3NkX3dyaXRlYihhenhfZGV2LCBTRF9TVFMsIFNEX0lOVF9NQVNLKTsKIAkJCWlmIChhenhfZGV2LT5zdWJzdHJlYW0gJiYgYXp4X2Rldi0+cnVubmluZykgewotCQkJCWF6eF9kZXYtPnBlcmlvZF91cGRhdGluZyA9IDE7CisJCQkJYXp4X2Rldi0+cGVyaW9kX2ludHIrKzsKIAkJCQlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwogCQkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoYXp4X2Rldi0+c3Vic3RyZWFtKTsKIAkJCQlzcGluX2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKLQkJCQlhenhfZGV2LT5wZXJpb2RfdXBkYXRpbmcgPSAwOwogCQkJfQogCQl9CiAJfQpAQCAtNzk2LDcgKzgxNSw3IEBACiAJLyogY2xlYXIgcmlyYiBpbnQgKi8KIAlzdGF0dXMgPSBhenhfcmVhZGIoY2hpcCwgUklSQlNUUyk7CiAJaWYgKHN0YXR1cyAmIFJJUkJfSU5UX01BU0spIHsKLQkJaWYgKHN0YXR1cyAmIFJJUkJfSU5UX1JFU1BPTlNFKQorCQlpZiAoISBjaGlwLT5zaW5nbGVfY21kICYmIChzdGF0dXMgJiBSSVJCX0lOVF9SRVNQT05TRSkpCiAJCQlhenhfdXBkYXRlX3JpcmIoY2hpcCk7CiAJCWF6eF93cml0ZWIoY2hpcCwgUklSQlNUUywgUklSQl9JTlRfTUFTSyk7CiAJfQpAQCAtMTAwMiwxMCArMTAyMSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAotCWRvd24oJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWF6eF9kZXYgPSBhenhfYXNzaWduX2RldmljZShjaGlwLCBzdWJzdHJlYW0tPnN0cmVhbSk7CiAJaWYgKGF6eF9kZXYgPT0gTlVMTCkgewotCQl1cCgmY2hpcC0+b3Blbl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXJ1bnRpbWUtPmh3ID0gYXp4X3BjbV9odzsKQEAgLTEwMTcsNyArMTAzNiw3IEBACiAJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwogCWlmICgoZXJyID0gaGluZm8tPm9wcy5vcGVuKGhpbmZvLCBhcGNtLT5jb2RlYywgc3Vic3RyZWFtKSkgPCAwKSB7CiAJCWF6eF9yZWxlYXNlX2RldmljZShhenhfZGV2KTsKLQkJdXAoJmNoaXAtPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTEwMjYsNyArMTA0NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGF6eF9kZXY7Ci0JdXAoJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMzgsMTQgKzEwNTcsMTQgQEAKIAlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldiA9IGdldF9henhfZGV2KHN1YnN0cmVhbSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRvd24oJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWF6eF9kZXYtPnN1YnN0cmVhbSA9IE5VTEw7CiAJYXp4X2Rldi0+cnVubmluZyA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlhenhfcmVsZWFzZV9kZXZpY2UoYXp4X2Rldik7CiAJaGluZm8tPm9wcy5jbG9zZShoaW5mbywgYXBjbS0+Y29kZWMsIHN1YnN0cmVhbSk7Ci0JdXAoJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTksNyArMTExOCw2IEBACiAJCWF6eF9kZXYtPmZpZm9fc2l6ZSA9IGF6eF9zZF9yZWFkdyhhenhfZGV2LCBTRF9GSUZPU0laRSkgKyAxOwogCWVsc2UKIAkJYXp4X2Rldi0+Zmlmb19zaXplID0gMDsKLQlhenhfZGV2LT5sYXN0X3BvcyA9IDA7CiAKIAlyZXR1cm4gaGluZm8tPm9wcy5wcmVwYXJlKGhpbmZvLCBhcGNtLT5jb2RlYywgYXp4X2Rldi0+c3RyZWFtX3RhZywKIAkJCQkgIGF6eF9kZXYtPmZvcm1hdF92YWwsIHN1YnN0cmVhbSk7CkBAIC0xMTQ3LDEwICsxMTY1LDIwIEBACiAJc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYgPSBnZXRfYXp4X2RldihzdWJzdHJlYW0pOwogCXVuc2lnbmVkIGludCBwb3M7CiAKLQlpZiAoY2hpcC0+cG9zaXRpb25fZml4ID09IFBPU19GSVhfUE9TQlVGKSB7CisJaWYgKGNoaXAtPnBvc2l0aW9uX2ZpeCA9PSBQT1NfRklYX1BPU0JVRiB8fAorCSAgICBjaGlwLT5wb3NpdGlvbl9maXggPT0gUE9TX0ZJWF9BVVRPKSB7CiAJCS8qIHVzZSB0aGUgcG9zaXRpb24gYnVmZmVyICovCiAJCXBvcyA9ICphenhfZGV2LT5wb3NidWY7CisJCWlmIChjaGlwLT5wb3NpdGlvbl9maXggPT0gUE9TX0ZJWF9BVVRPICYmCisJCSAgICBhenhfZGV2LT5wZXJpb2RfaW50ciA9PSAxICYmICEgcG9zKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImhkYS1pbnRlbDogSW52YWxpZCBwb3NpdGlvbiBidWZmZXIsICIKKwkJCSAgICAgICAidXNpbmcgTFBJQiByZWFkIG1ldGhvZCBpbnN0ZWFkLlxuIik7CisJCQljaGlwLT5wb3NpdGlvbl9maXggPSBQT1NfRklYX05PTkU7CisJCQlnb3RvIHJlYWRfbHBpYjsKKwkJfQogCX0gZWxzZSB7CisJcmVhZF9scGliOgogCQkvKiByZWFkIExQSUIgKi8KIAkJcG9zID0gYXp4X3NkX3JlYWRsKGF6eF9kZXYsIFNEX0xQSUIpOwogCQlpZiAoY2hpcC0+cG9zaXRpb25fZml4ID09IFBPU19GSVhfRklGTykKQEAgLTE0MTUsMTMgKzE0NDMsMTQgQEAKIAl9CiAKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwotCWluaXRfTVVURVgoJmNoaXAtPm9wZW5fbXV0ZXgpOworCW11dGV4X2luaXQoJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWNoaXAtPmNhcmQgPSBjYXJkOwogCWNoaXAtPnBjaSA9IHBjaTsKIAljaGlwLT5pcnEgPSAtMTsKIAljaGlwLT5kcml2ZXJfdHlwZSA9IGRyaXZlcl90eXBlOwogCi0JY2hpcC0+cG9zaXRpb25fZml4ID0gcG9zaXRpb25fZml4ID8gcG9zaXRpb25fZml4IDogUE9TX0ZJWF9QT1NCVUY7CisJY2hpcC0+cG9zaXRpb25fZml4ID0gcG9zaXRpb25fZml4OworCWNoaXAtPnNpbmdsZV9jbWQgPSBzaW5nbGVfY21kOwogCiAjaWYgQklUU19QRVJfTE9ORyAhPSA2NAogCS8qIEZpeCB1cCBiYXNlIGFkZHJlc3Mgb24gVUxJIE01NDYxICovCkBAIC0xNDkyLDggKzE1MjEsOSBAQAogCQlnb3RvIGVycm91dDsKIAl9CiAJLyogYWxsb2NhdGUgQ09SQi9SSVJCICovCi0JaWYgKChlcnIgPSBhenhfYWxsb2NfY21kX2lvKGNoaXApKSA8IDApCi0JCWdvdG8gZXJyb3V0OworCWlmICghIGNoaXAtPnNpbmdsZV9jbWQpCisJCWlmICgoZXJyID0gYXp4X2FsbG9jX2NtZF9pbyhjaGlwKSkgPCAwKQorCQkJZ290byBlcnJvdXQ7CiAKIAkvKiBpbml0aWFsaXplIHN0cmVhbXMgKi8KIAlhenhfaW5pdF9zdHJlYW0oY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oIGIvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAppbmRleCBjODJkMmE3Li4xNGU4YWEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKQEAgLTY2LDYgKzY2LDExIEBACiBpbnQgc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pOwogaW50IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKIGludCBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7CisvKiBsb3dsZXZlbCBhY2Nlc3NvciB3aXRoIGNhY2hpbmc7IHVzZSBjYXJlZnVsbHkgKi8KK2ludCBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgY2gsCisJCQkgICBpbnQgZGlyZWN0aW9uLCBpbnQgaW5kZXgpOworaW50IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwgaW50IGNoLAorCQkJICAgICBpbnQgZGlyZWN0aW9uLCBpbnQgaWR4LCBpbnQgbWFzaywgaW50IHZhbCk7CiAKIC8qIG1vbm8gc3dpdGNoIGJpbmRpbmcgbXVsdGlwbGUgaW5wdXRzICovCiAjZGVmaW5lIEhEQV9CSU5EX01VVEVfTU9OTyh4bmFtZSwgbmlkLCBjaGFubmVsLCBpbmRpY2VzLCBkaXJlY3Rpb24pIFwKQEAgLTEzMCw2ICsxMzUsNyBAQAogCWludCBudW1fZGFjczsJCS8qICMgb2YgREFDcywgbXVzdCBiZSBtb3JlIHRoYW4gMSAqLwogCWhkYV9uaWRfdCAqZGFjX25pZHM7CS8qIERBQyBsaXN0ICovCiAJaGRhX25pZF90IGhwX25pZDsJLyogb3B0aW9uYWwgREFDIGZvciBIUCwgMCB3aGVuIG5vdCBleGlzdHMgKi8KKwloZGFfbmlkX3QgZXh0cmFfb3V0X25pZFszXTsJLyogb3B0aW9uYWwgREFDcywgMCB3aGVuIG5vdCBleGlzdHMgKi8KIAloZGFfbmlkX3QgZGlnX291dF9uaWQ7CS8qIGRpZ2l0YWwgb3V0IGF1ZGlvIHdpZGdldCAqLwogCWludCBtYXhfY2hhbm5lbHM7CS8qIGN1cnJlbnRseSBzdXBwb3J0ZWQgYW5hbG9nIGNoYW5uZWxzICovCiAJaW50IGRpZ19vdXRfdXNlZDsJLyogY3VycmVudCB1c2FnZSBvZiBkaWdpdGFsIG91dCAoSERBX0RJR19YWFgpICovCkBAIC0yMTYsNyArMjIyLDggQEAKIHN0cnVjdCBhdXRvX3Bpbl9jZmcgewogCWludCBsaW5lX291dHM7CiAJaGRhX25pZF90IGxpbmVfb3V0X3BpbnNbNV07IC8qIHNvcnRlZCBpbiB0aGUgb3JkZXIgb2YgRnJvbnQvU3Vyci9DTEZFL1NpZGUgKi8KLQloZGFfbmlkX3Qgc3BlYWtlcl9waW47CisJaW50IHNwZWFrZXJfb3V0czsKKwloZGFfbmlkX3Qgc3BlYWtlcl9waW5zWzVdOwogCWhkYV9uaWRfdCBocF9waW47CiAJaGRhX25pZF90IGlucHV0X3BpbnNbQVVUT19QSU5fTEFTVF07CiAJaGRhX25pZF90IGRpZ19vdXRfcGluOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggMWFkYTFiMC4uMzI0MDFiZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKQEAgLTYwLDcgKzYyLDcgQEAKIAkvKiBQQ00gaW5mb3JtYXRpb24gKi8KIAlzdHJ1Y3QgaGRhX3BjbSBwY21fcmVjWzJdOwkvKiB1c2VkIGluIGFsY19idWlsZF9wY21zKCkgKi8KIAotCXN0cnVjdCBzZW1hcGhvcmUgYW1wX211dGV4OwkvKiBQQ00gdm9sdW1lL211dGUgY29udHJvbCBtdXRleCAqLworCXN0cnVjdCBtdXRleCBhbXBfbXV0ZXg7CS8qIFBDTSB2b2x1bWUvbXV0ZSBjb250cm9sIG11dGV4ICovCiAJdW5zaWduZWQgaW50IHNwZGlmX3JvdXRlOwogCiAJLyogZHluYW1pYyBjb250cm9scywgaW5pdF92ZXJicyBhbmQgaW5wdXRfbXV4ICovCkBAIC0zMDgsNyArMzEwLDcgQEAKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaTsKIAotCWFkMTk4eF9pbml0KGNvZGVjKTsKKwljb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fbWl4ZXJzOyBpKyspCiAJCXNuZF9oZGFfcmVzdW1lX2N0bHMoY29kZWMsIHNwZWMtPm1peGVyc1tpXSk7CiAJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKQpAQCAtMzMxLDYgKzMzMyw2MSBAQAogCiAKIC8qCisgKiBFQVBEIGNvbnRyb2wKKyAqIHRoZSBwcml2YXRlIHZhbHVlID0gbmlkIHwgKGludmVydCA8PCA4KQorICovCitzdGF0aWMgaW50IGFkMTk4eF9lYXBkX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZDE5OHhfZWFwZF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDgpICYgMTsKKwlpZiAoaW52ZXJ0KQorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9ICEgc3BlYy0+Y3VyX2VhcGQ7CisJZWxzZQorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHNwZWMtPmN1cl9lYXBkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkMTk4eF9lYXBkX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gOCkgJiAxOworCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmY7CisJdW5zaWduZWQgaW50IGVhcGQ7CisJZWFwZCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCWlmIChpbnZlcnQpCisJCWVhcGQgPSAhZWFwZDsKKwlpZiAoZWFwZCA9PSBzcGVjLT5jdXJfZWFwZCAmJiAhIGNvZGVjLT5pbl9yZXN1bWUpCisJCXJldHVybiAwOworCXNwZWMtPmN1cl9lYXBkID0gZWFwZDsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsCisJCQkgICAgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCisJCQkgICAgZWFwZCA/IDB4MDIgOiAweDAwKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhZDE5OHhfY2hfbW9kZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pOworc3RhdGljIGludCBhZDE5OHhfY2hfbW9kZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCk7CitzdGF0aWMgaW50IGFkMTk4eF9jaF9tb2RlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKKworCisvKgogICogQUQxOTg2QSBzcGVjaWZpYwogICovCiAKQEAgLTM0NCw2ICs0MDEsNyBAQAogCUFEMTk4NkFfRlJPTlRfREFDLCBBRDE5ODZBX1NVUlJfREFDLCBBRDE5ODZBX0NMRkVfREFDCiB9Owogc3RhdGljIGhkYV9uaWRfdCBhZDE5ODZhX2FkY19uaWRzWzFdID0geyBBRDE5ODZBX0FEQyB9Oworc3RhdGljIGhkYV9uaWRfdCBhZDE5ODZhX2NhcHNyY19uaWRzWzFdID0geyAweDEyIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhZDE5ODZhX2NhcHR1cmVfc291cmNlID0gewogCS5udW1faXRlbXMgPSA3LApAQCAtMzcxLDkgKzQyOSw5IEBACiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IGFkMTk4eF9zcGVjICphZCA9IGNvZGVjLT5zcGVjOwogCi0JZG93bigmYWQtPmFtcF9tdXRleCk7CisJbXV0ZXhfbG9jaygmYWQtPmFtcF9tdXRleCk7CiAJc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldChrY29udHJvbCwgdWNvbnRyb2wpOwotCXVwKCZhZC0+YW1wX211dGV4KTsKKwltdXRleF91bmxvY2soJmFkLT5hbXBfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0zODMsMTMgKzQ0MSwxMyBAQAogCXN0cnVjdCBhZDE5OHhfc3BlYyAqYWQgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaSwgY2hhbmdlID0gMDsKIAotCWRvd24oJmFkLT5hbXBfbXV0ZXgpOworCW11dGV4X2xvY2soJmFkLT5hbXBfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkMTk4NmFfZGFjX25pZHMpOyBpKyspIHsKIAkJa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKGFkMTk4NmFfZGFjX25pZHNbaV0sIDMsIDAsIEhEQV9PVVRQVVQpOwogCQljaGFuZ2UgfD0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX3B1dChrY29udHJvbCwgdWNvbnRyb2wpOwogCX0KIAlrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoQUQxOTg2QV9GUk9OVF9EQUMsIDMsIDAsIEhEQV9PVVRQVVQpOwotCXVwKCZhZC0+YW1wX211dGV4KTsKKwltdXRleF91bmxvY2soJmFkLT5hbXBfbXV0ZXgpOwogCXJldHVybiBjaGFuZ2U7CiB9CiAKQEAgLTQwMCw5ICs0NTgsOSBAQAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBhZDE5OHhfc3BlYyAqYWQgPSBjb2RlYy0+c3BlYzsKIAotCWRvd24oJmFkLT5hbXBfbXV0ZXgpOworCW11dGV4X2xvY2soJmFkLT5hbXBfbXV0ZXgpOwogCXNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQoa2NvbnRyb2wsIHVjb250cm9sKTsKLQl1cCgmYWQtPmFtcF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhZC0+YW1wX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDEyLDEzICs0NzAsMTMgQEAKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKmFkID0gY29kZWMtPnNwZWM7CiAJaW50IGksIGNoYW5nZSA9IDA7CiAKLQlkb3duKCZhZC0+YW1wX211dGV4KTsKKwltdXRleF9sb2NrKCZhZC0+YW1wX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhZDE5ODZhX2RhY19uaWRzKTsgaSsrKSB7CiAJCWtjb250cm9sLT5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTChhZDE5ODZhX2RhY19uaWRzW2ldLCAzLCAwLCBIREFfT1VUUFVUKTsKIAkJY2hhbmdlIHw9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9wdXQoa2NvbnRyb2wsIHVjb250cm9sKTsKIAl9CiAJa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKEFEMTk4NkFfRlJPTlRfREFDLCAzLCAwLCBIREFfT1VUUFVUKTsKLQl1cCgmYWQtPmFtcF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhZC0+YW1wX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlOwogfQogCkBAIC00NzcsNiArNTM1LDE0MyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qIGFkZGl0aW9uYWwgbWl4ZXJzIGZvciAzc3RhY2sgbW9kZSAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFkMTk4NmFfM3N0X21peGVyc1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCisJCS5pbmZvID0gYWQxOTh4X2NoX21vZGVfaW5mbywKKwkJLmdldCA9IGFkMTk4eF9jaF9tb2RlX2dldCwKKwkJLnB1dCA9IGFkMTk4eF9jaF9tb2RlX3B1dCwKKwl9LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qIGxhcHRvcCBtb2RlbCAtIDJjaCBvbmx5ICovCitzdGF0aWMgaGRhX25pZF90IGFkMTk4NmFfbGFwdG9wX2RhY19uaWRzWzFdID0geyBBRDE5ODZBX0ZST05UX0RBQyB9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg2YV9sYXB0b3BfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxYiwgMHgwLCBIREFfT1VUUFVUKSwKKwkvKiBIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfT1VUUFVUKSwKKwkgICBIREFfQ09ERUNfTVVURSgiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksICovCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MTcsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMHgxNiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIDB4MTYsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAorCS8qIEhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKKwkgICBIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAorCSAgIEhEQV9DT0RFQ19WT0xVTUUoIk1vbm8gUGxheWJhY2sgVm9sdW1lIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKKwkgICBIREFfQ09ERUNfTVVURSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCAweDFlLCAweDAsIEhEQV9PVVRQVVQpLCAqLworCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkJLmluZm8gPSBhZDE5OHhfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IGFkMTk4eF9tdXhfZW51bV9nZXQsCisJCS5wdXQgPSBhZDE5OHhfbXV4X2VudW1fcHV0LAorCX0sCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogbGFwdG9wLWVhcGQgbW9kZWwgLSAyY2ggb25seSAqLworCisvKiBtYXN0ZXIgY29udHJvbHMgYm90aCBwaW5zIDB4MWEgYW5kIDB4MWIgKi8KK3N0YXRpYyBpbnQgYWQxOTg2YV9sYXB0b3BfbWFzdGVyX3ZvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CisJaW50IGNoYW5nZTsKKworCWNoYW5nZSA9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYSwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkJICAweDdmLCB2YWxwWzBdICYgMHg3Zik7CisJY2hhbmdlIHw9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYSwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkJICAgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYiwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg3ZiwgdmFscFswXSAmIDB4N2YpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYiwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOworCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgYWQxOTg2YV9sYXB0b3BfbWFzdGVyX3N3X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOworCWludCBjaGFuZ2U7CisKKwljaGFuZ2UgPSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MWEsIDAsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSAgMHg4MCwgdmFscFswXSA/IDAgOiAweDgwKTsKKwljaGFuZ2UgfD0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDFhLCAxLCBIREFfT1VUUFVULCAwLAorCQkJCQkgICAweDgwLCB2YWxwWzFdID8gMCA6IDB4ODApOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxYiwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgdmFscFswXSA/IDAgOiAweDgwKTsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MWIsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIHZhbHBbMV0gPyAwIDogMHg4MCk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4NmFfbGFwdG9wX2VhcGRfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDMsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDAgfSwKKwkJeyAiSW50ZXJuYWwgTWljIiwgMHg0IH0sCisJCXsgIk1peCIsIDB4NSB9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg2YV9sYXB0b3BfZWFwZF9taXhlcnNbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfaW5mbywKKwkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9nZXQsCisJCS5wdXQgPSBhZDE5ODZhX2xhcHRvcF9tYXN0ZXJfdm9sX3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWEsIDMsIDAsIEhEQV9PVVRQVVQpLAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCisJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX2luZm8sCisJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfZ2V0LAorCQkucHV0ID0gYWQxOTg2YV9sYXB0b3BfbWFzdGVyX3N3X3B1dCwKKwkJLnByaXZhdGVfdmFsdWUgPSBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MWEsIDMsIDAsIEhEQV9PVVRQVVQpLAorCX0sCisJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MDMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDAzLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAorCQkuaW5mbyA9IGFkMTk4eF9tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gYWQxOTh4X211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGFkMTk4eF9tdXhfZW51bV9wdXQsCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJFeHRlcm5hbCBBbXBsaWZpZXIiLAorCQkuaW5mbyA9IGFkMTk4eF9lYXBkX2luZm8sCisJCS5nZXQgPSBhZDE5OHhfZWFwZF9nZXQsCisJCS5wdXQgPSBhZDE5OHhfZWFwZF9wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxYiB8ICgxIDw8IDgpLCAvKiBwb3J0LUQsIGludmVyc2VkICovCisJfSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKgogICogaW5pdGlhbGl6YXRpb24gdmVyYnMKICAqLwpAQCAtNTM1LDE2ICs3MzAsODkgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCisvKiBhZGRpdGlvbmFsIHZlcmJzIGZvciAzLXN0YWNrIG1vZGVsICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NmFfM3N0X2luaXRfdmVyYnNbXSA9IHsKKyAJLyogTWljIGFuZCBsaW5lLWluIHNlbGVjdG9ycyAqLworCXsweDBmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgyfSwKKwl7MHgxMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisgCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9jaDJfaW5pdFtdID0geworCS8qIFN1cnJvdW5kIG91dCAtPiBMaW5lIEluICovCisJeyAweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MjQgfSwKKwl7IDB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjA4MH0sCisJLyogQ0xGRSAtPiBNaWMgaW4gKi8KKwl7IDB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyNCB9LAorCXsgMHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDgwfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NmFfY2g0X2luaXRbXSA9IHsKKwkvKiBTdXJyb3VuZCBvdXQgLT4gU3Vycm91bmQgKi8KKwl7IDB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHg0MCB9LAorCXsgMHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwkvKiBDTEZFIC0+IE1pYyBpbiAqLworCXsgMHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0IH0sCisJeyAweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9jaDZfaW5pdFtdID0geworCS8qIFN1cnJvdW5kIG91dCAtPiBTdXJyb3VuZCBvdXQgKi8KKwl7IDB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHg0MCB9LAorCXsgMHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwkvKiBDTEZFIC0+IENMRkUgKi8KKwl7IDB4MWQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHg0MCB9LAorCXsgMHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9jaGFubmVsX21vZGUgYWQxOTg2YV9tb2Rlc1szXSA9IHsKKwl7IDIsIGFkMTk4NmFfY2gyX2luaXQgfSwKKwl7IDQsIGFkMTk4NmFfY2g0X2luaXQgfSwKKwl7IDYsIGFkMTk4NmFfY2g2X2luaXQgfSwKK307CisKKy8qIGVhcGQgaW5pdGlhbGl6YXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTg2YV9lYXBkX2luaXRfdmVyYnNbXSA9IHsKKwl7MHgxYiwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MDB9LAorCXt9Cit9OworCisvKiBtb2RlbHMgKi8KK2VudW0geyBBRDE5ODZBXzZTVEFDSywgQUQxOTg2QV8zU1RBQ0ssIEFEMTk4NkFfTEFQVE9QLCBBRDE5ODZBX0xBUFRPUF9FQVBEIH07CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2JvYXJkX2NvbmZpZyBhZDE5ODZhX2NmZ190YmxbXSA9IHsKKwl7IC5tb2RlbG5hbWUgPSAiNnN0YWNrIiwJLmNvbmZpZyA9IEFEMTk4NkFfNlNUQUNLIH0sCisJeyAubW9kZWxuYW1lID0gIjNzdGFjayIsCS5jb25maWcgPSBBRDE5ODZBXzNTVEFDSyB9LAorCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwZGUsIC5wY2lfc3ViZGV2aWNlID0gMHhjYjg0LAorCSAgLmNvbmZpZyA9IEFEMTk4NkFfM1NUQUNLIH0sIC8qIEFTVVMgQThOLVZNIENTTSAqLworCXsgLm1vZGVsbmFtZSA9ICJsYXB0b3AiLAkuY29uZmlnID0gQUQxOTg2QV9MQVBUT1AgfSwKKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxNDRkLCAucGNpX3N1YmRldmljZSA9IDB4YzAxZSwKKwkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUCB9LCAvKiBGU0MgVjIwNjAgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxN2MwLCAucGNpX3N1YmRldmljZSA9IDB4MjAxNywKKwkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUCB9LCAvKiBTYW1zdW5nIE01MCAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHg4MThmLAorCSAgLmNvbmZpZyA9IEFEMTk4NkFfTEFQVE9QIH0sIC8qIEFTVVMgUDVHVi1NWCAqLworCXsgLm1vZGVsbmFtZSA9ICJsYXB0b3AtZWFwZCIsCS5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTQ0ZCwgLnBjaV9zdWJkZXZpY2UgPSAweGMwMjQsCisJICAuY29uZmlnID0gQUQxOTg2QV9MQVBUT1BfRUFQRCB9LCAvKiBTYW1zdW5nIFI2NS1UMjMwMCBDaGFyaXMgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDQzLCAucGNpX3N1YmRldmljZSA9IDB4MTIxMywKKwkgIC5jb25maWcgPSBBRDE5ODZBX0xBUFRPUF9FQVBEIH0sIC8qIEFTVVMgQTZKICovCisJe30KK307CiAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTg2YShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7CisJaW50IGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW5pdF9NVVRFWCgmc3BlYy0+YW1wX211dGV4KTsKKwltdXRleF9pbml0KCZzcGVjLT5hbXBfbXV0ZXgpOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDY7CkBAIC01NTMsNyArODIxLDcgQEAKIAlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFEMTk4NkFfU1BESUZfT1VUOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7CiAJc3BlYy0+YWRjX25pZHMgPSBhZDE5ODZhX2FkY19uaWRzOwotCXNwZWMtPmNhcHNyY19uaWRzID0gYWQxOTg2YV9hZGNfbmlkczsKKwlzcGVjLT5jYXBzcmNfbmlkcyA9IGFkMTk4NmFfY2Fwc3JjX25pZHM7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJmFkMTk4NmFfY2FwdHVyZV9zb3VyY2U7CiAJc3BlYy0+bnVtX21peGVycyA9IDE7CiAJc3BlYy0+bWl4ZXJzWzBdID0gYWQxOTg2YV9taXhlcnM7CkBAIC01NjIsNiArODMwLDM1IEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWQxOTh4X3BhdGNoX29wczsKIAorCS8qIG92ZXJyaWRlIHNvbWUgcGFyYW1ldGVycyAqLworCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBhZDE5ODZhX2NmZ190YmwpOworCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CisJY2FzZSBBRDE5ODZBXzNTVEFDSzoKKwkJc3BlYy0+bnVtX21peGVycyA9IDI7CisJCXNwZWMtPm1peGVyc1sxXSA9IGFkMTk4NmFfM3N0X21peGVyczsKKwkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAyOworCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gYWQxOTg2YV8zc3RfaW5pdF92ZXJiczsKKwkJc3BlYy0+Y2hhbm5lbF9tb2RlID0gYWQxOTg2YV9tb2RlczsKKwkJc3BlYy0+bnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWQxOTg2YV9tb2Rlcyk7CisJCWJyZWFrOworCWNhc2UgQUQxOTg2QV9MQVBUT1A6CisJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NmFfbGFwdG9wX21peGVyczsKKwkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOworCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4NmFfbGFwdG9wX2RhY19uaWRzOworCQlicmVhazsKKwljYXNlIEFEMTk4NkFfTEFQVE9QX0VBUEQ6CisJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NmFfbGFwdG9wX2VhcGRfbWl4ZXJzOworCQlzcGVjLT5udW1faW5pdF92ZXJicyA9IDI7CisJCXNwZWMtPmluaXRfdmVyYnNbMV0gPSBhZDE5ODZhX2VhcGRfaW5pdF92ZXJiczsKKwkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKKwkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOworCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTk4NmFfbGFwdG9wX2RhY19uaWRzOworCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CisJCXNwZWMtPmlucHV0X211eCA9ICZhZDE5ODZhX2xhcHRvcF9lYXBkX2NhcHR1cmVfc291cmNlOworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc1LDYgKzg3Miw3IEBACiAKIHN0YXRpYyBoZGFfbmlkX3QgYWQxOTgzX2RhY19uaWRzWzFdID0geyBBRDE5ODNfREFDIH07CiBzdGF0aWMgaGRhX25pZF90IGFkMTk4M19hZGNfbmlkc1sxXSA9IHsgQUQxOTgzX0FEQyB9Oworc3RhdGljIGhkYV9uaWRfdCBhZDE5ODNfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MTUgfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4M19jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKQEAgLTcwOCw3ICsxMDA2LDcgQEAKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWluaXRfTVVURVgoJnNwZWMtPmFtcF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmc3BlYy0+YW1wX211dGV4KTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwpAQCAtNzE3LDcgKzEwMTUsNyBAQAogCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUQxOTgzX1NQRElGX09VVDsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOwogCXNwZWMtPmFkY19uaWRzID0gYWQxOTgzX2FkY19uaWRzOwotCXNwZWMtPmNhcHNyY19uaWRzID0gYWQxOTgzX2FkY19uaWRzOworCXNwZWMtPmNhcHNyY19uaWRzID0gYWQxOTgzX2NhcHNyY19uaWRzOwogCXNwZWMtPmlucHV0X211eCA9ICZhZDE5ODNfY2FwdHVyZV9zb3VyY2U7CiAJc3BlYy0+bnVtX21peGVycyA9IDE7CiAJc3BlYy0+bWl4ZXJzWzBdID0gYWQxOTgzX21peGVyczsKQEAgLTc0MSw2ICsxMDM5LDcgQEAKIAogc3RhdGljIGhkYV9uaWRfdCBhZDE5ODFfZGFjX25pZHNbMV0gPSB7IEFEMTk4MV9EQUMgfTsKIHN0YXRpYyBoZGFfbmlkX3QgYWQxOTgxX2FkY19uaWRzWzFdID0geyBBRDE5ODFfQURDIH07CitzdGF0aWMgaGRhX25pZF90IGFkMTk4MV9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxNSB9OwogCiAvKiAweDBjLCAweDA5LCAweDBlLCAweDBmLCAweDE5LCAweDA1LCAweDE4LCAweDE3ICovCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWQxOTgxX2NhcHR1cmVfc291cmNlID0gewpAQCAtODQ2LDE1ICsxMTQ1LDIwMCBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qCisgKiBQYXRjaCBmb3IgSFAgbng2MzIwCisgKgorICogbng2MzIwIHVzZXMgRUFQRCBpbiB0aGUgcmVzZXJ2ZSB3YXkgLSBFQVBELW9uIG1lYW5zIHRoZSBpbnRlcm5hbAorICogc3BlYWtlciBvdXRwdXQgZW5hYmxlZCBfYW5kXyBtdXRlLUxFRCBvZmYuCisgKi8KKworI2RlZmluZSBBRDE5ODFfSFBfRVZFTlQJCTB4MzcKKyNkZWZpbmUgQUQxOTgxX01JQ19FVkVOVAkweDM4CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWQxOTgxX2hwX2luaXRfdmVyYnNbXSA9IHsKKwl7MHgwNSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MDAgfSwgLyogZGVmYXVsdCBvZmYgKi8KKwkvKiBwaW4gc2Vuc2luZyBvbiBIUCBhbmQgTWljIGphY2tzICovCisJezB4MDYsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBRDE5ODFfSFBfRVZFTlR9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUQxOTgxX01JQ19FVkVOVH0sCisJe30KK307CisKKy8qIHR1cm4gb24vb2ZmIEVBUEQgKCsgbXV0ZSBIUCkgYXMgYSBtYXN0ZXIgc3dpdGNoICovCitzdGF0aWMgaW50IGFkMTk4MV9ocF9tYXN0ZXJfc3dfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKCEgYWQxOTh4X2VhcGRfcHV0KGtjb250cm9sLCB1Y29udHJvbCkpCisJCXJldHVybiAwOworCisJLyogdG9nZ2xlIEhQIG11dGUgYXBwcm9wcmlhdGVseSAqLworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwNiwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgc3BlYy0+Y3VyX2VhcGQgPyAwIDogMHg4MCk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDA2LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBzcGVjLT5jdXJfZWFwZCA/IDAgOiAweDgwKTsKKwlyZXR1cm4gMTsKK30KKworLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MDUgYW5kIDB4MDYgKi8KK3N0YXRpYyBpbnQgYWQxOTgxX2hwX21hc3Rlcl92b2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CisJaW50IGNoYW5nZTsKKworCWNoYW5nZSA9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwNSwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkJICAweDdmLCB2YWxwWzBdICYgMHg3Zik7CisJY2hhbmdlIHw9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwNSwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkJICAgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwNiwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg3ZiwgdmFscFswXSAmIDB4N2YpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwNiwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKy8qIG11dGUgaW50ZXJuYWwgc3BlYWtlciBpZiBIUCBpcyBwbHVnZ2VkICovCitzdGF0aWMgdm9pZCBhZDE5ODFfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnQ7CisKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDA2LCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDA1LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwNSwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg4MCwgcHJlc2VudCA/IDB4ODAgOiAwKTsKK30KKworLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCitzdGF0aWMgdm9pZCBhZDE5ODFfaHBfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdGF0aWMgc3RydWN0IGhkYV92ZXJiIG1pY19qYWNrX29uW10gPSB7CisJCXsweDFmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAorCQl7MHgxZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwkJe30KKwl9OworCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgbWljX2phY2tfb2ZmW10gPSB7CisJCXsweDFlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAorCQl7MHgxZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDAwfSwKKwkJe30KKwl9OworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgwOCwgMCwKKwkJCSAgICAJIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWlmIChwcmVzZW50KQorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBtaWNfamFja19vbik7CisJZWxzZQorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCBtaWNfamFja19vZmYpOworfQorCisvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCitzdGF0aWMgdm9pZCBhZDE5ODFfaHBfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICB1bnNpZ25lZCBpbnQgcmVzKQoreworCXJlcyA+Pj0gMjY7CisJc3dpdGNoIChyZXMpIHsKKwljYXNlIEFEMTk4MV9IUF9FVkVOVDoKKwkJYWQxOTgxX2hwX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBBRDE5ODFfTUlDX0VWRU5UOgorCQlhZDE5ODFfaHBfYXV0b21pYyhjb2RlYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFkMTk4MV9ocF9jYXB0dXJlX3NvdXJjZSA9IHsKKwkubnVtX2l0ZW1zID0gMywKKwkuaXRlbXMgPSB7CisJCXsgIk1pYyIsIDB4MCB9LAorCQl7ICJEb2NraW5nLVN0YXRpb24iLCAweDEgfSwKKwkJeyAiTWl4IiwgMHgyIH0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODFfaHBfbWl4ZXJzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCisJCS5pbmZvID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8sCisJCS5nZXQgPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0LAorCQkucHV0ID0gYWQxOTgxX2hwX21hc3Rlcl92b2xfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwNSwgMywgMCwgSERBX09VVFBVVCksCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBhZDE5OHhfZWFwZF9pbmZvLAorCQkuZ2V0ID0gYWQxOTh4X2VhcGRfZ2V0LAorCQkucHV0ID0gYWQxOTgxX2hwX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgwNSwKKwl9LAorCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBQbGF5YmFjayBWb2x1bWUiLCAweDExLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgxMSwgMHgwLCBIREFfT1VUUFVUKSwKKyNpZiAwCisJLyogRklYTUU6IGFuYWxvZyBtaWMvbGluZSBsb29wYmFjayBkb2Vzbid0IHdvcmsgd2l0aCBteSB0ZXN0cy4uLgorCSAqICAgICAgICAoYWx0aG91Z2ggcmVjb3JkaW5nIGlzIE9LKQorCSAqLworCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDEyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJEb2NraW5nLVN0YXRpb24gUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiRG9ja2luZy1TdGF0aW9uIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAorCS8qIEZJWE1FOiBkb2VzIHRoaXMgbGFwdG9wIGhhdmUgYW5hbG9nIENEIGNvbm5lY3Rpb24/ICovCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKKyNlbmRpZgorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAorCQkuaW5mbyA9IGFkMTk4eF9tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gYWQxOTh4X211eF9lbnVtX2dldCwKKwkJLnB1dCA9IGFkMTk4eF9tdXhfZW51bV9wdXQsCisJfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCitzdGF0aWMgaW50IGFkMTk4MV9ocF9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWFkMTk4eF9pbml0KGNvZGVjKTsKKwlhZDE5ODFfaHBfYXV0b211dGUoY29kZWMpOworCWFkMTk4MV9ocF9hdXRvbWljKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworLyogbW9kZWxzICovCitlbnVtIHsgQUQxOTgxX0JBU0lDLCBBRDE5ODFfSFAgfTsKKworc3RhdGljIHN0cnVjdCBoZGFfYm9hcmRfY29uZmlnIGFkMTk4MV9jZmdfdGJsW10gPSB7CisJeyAubW9kZWxuYW1lID0gImhwIiwgLmNvbmZpZyA9IEFEMTk4MV9IUCB9LAorCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwM2MsIC5wY2lfc3ViZGV2aWNlID0gMHgzMGFhLAorCSAgLmNvbmZpZyA9IEFEMTk4MV9IUCB9LCAvKiBIUCBueDYzMjAgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAucGNpX3N1YmRldmljZSA9IDB4MzA5ZiwKKwkgIC5jb25maWcgPSBBRDE5ODFfSFAgfSwgLyogSFAgbng5NDIwIEFuZ2VsRmlyZSAqLworCXsgLm1vZGVsbmFtZSA9ICJiYXNpYyIsIC5jb25maWcgPSBBRDE5ODFfQkFTSUMgfSwKKwl7fQorfTsKKwogc3RhdGljIGludCBwYXRjaF9hZDE5ODEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOworCWludCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWluaXRfTVVURVgoJnNwZWMtPmFtcF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmc3BlYy0+YW1wX211dGV4KTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwpAQCAtODYzLDcgKzEzNDcsNyBAQAogCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUQxOTgxX1NQRElGX09VVDsKIAlzcGVjLT5udW1fYWRjX25pZHMgPSAxOwogCXNwZWMtPmFkY19uaWRzID0gYWQxOTgxX2FkY19uaWRzOwotCXNwZWMtPmNhcHNyY19uaWRzID0gYWQxOTgxX2FkY19uaWRzOworCXNwZWMtPmNhcHNyY19uaWRzID0gYWQxOTgxX2NhcHNyY19uaWRzOwogCXNwZWMtPmlucHV0X211eCA9ICZhZDE5ODFfY2FwdHVyZV9zb3VyY2U7CiAJc3BlYy0+bnVtX21peGVycyA9IDE7CiAJc3BlYy0+bWl4ZXJzWzBdID0gYWQxOTgxX21peGVyczsKQEAgLTg3Myw2ICsxMzU3LDIxIEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWQxOTh4X3BhdGNoX29wczsKIAorCS8qIG92ZXJyaWRlIHNvbWUgcGFyYW1ldGVycyAqLworCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBhZDE5ODFfY2ZnX3RibCk7CisJc3dpdGNoIChib2FyZF9jb25maWcpIHsKKwljYXNlIEFEMTk4MV9IUDoKKwkJc3BlYy0+bWl4ZXJzWzBdID0gYWQxOTgxX2hwX21peGVyczsKKwkJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAyOworCQlzcGVjLT5pbml0X3ZlcmJzWzFdID0gYWQxOTgxX2hwX2luaXRfdmVyYnM7CisJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKKwkJc3BlYy0+aW5wdXRfbXV4ID0gJmFkMTk4MV9ocF9jYXB0dXJlX3NvdXJjZTsKKworCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBhZDE5ODFfaHBfaW5pdDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTk4MV9ocF91bnNvbF9ldmVudDsKKwkJYnJlYWs7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNjAsNDQgKzE1NTksNiBAQAogCQkJCSAgIHNwZWMtPm51bV9jaGFubmVsX21vZGUsICZzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMpOwogfQogCi0vKgotICogRUFQRCBjb250cm9sCi0gKi8KLXN0YXRpYyBpbnQgYWQxOTg4X2VhcGRfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkMTk4OF9lYXBkX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAhIHNwZWMtPmN1cl9lYXBkOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkMTk4OF9lYXBkX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXVuc2lnbmVkIGludCBlYXBkOwotCWVhcGQgPSAhIHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07Ci0JaWYgKGVhcGQgPT0gc3BlYy0+Y3VyX2VhcGQgJiYgISBjb2RlYy0+aW5fcmVzdW1lKQotCQlyZXR1cm4gMDsKLQlzcGVjLT5jdXJfZWFwZCA9IGVhcGQ7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgxMiAvKiBwb3J0LUQgKi8sCi0JCQkgICAgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCi0JCQkgICAgZWFwZCA/IDB4MDIgOiAweDAwKTsKLQlyZXR1cm4gMDsKLX0KLQogLyogNi1zdGFjayBtb2RlICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWQxOTg4XzZzdGFja19taXhlcnMxW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwNCwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTEyMjAsOSArMTY4MSwxMCBAQAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCiAJCS5uYW1lID0gIkV4dGVybmFsIEFtcGxpZmllciIsCi0JCS5pbmZvID0gYWQxOTg4X2VhcGRfaW5mbywKLQkJLmdldCA9IGFkMTk4OF9lYXBkX2dldCwKLQkJLnB1dCA9IGFkMTk4OF9lYXBkX3B1dCwKKwkJLmluZm8gPSBhZDE5OHhfZWFwZF9pbmZvLAorCQkuZ2V0ID0gYWQxOTh4X2VhcGRfZ2V0LAorCQkucHV0ID0gYWQxOTh4X2VhcGRfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTIgfCAoMSA8PCA4KSwgLyogcG9ydC1ELCBpbnZlcnNlZCAqLwogCX0sCiAKIAl7IH0gLyogZW5kICovCkBAIC0xNzk1LDE0ICsyMjU3LDExIEBACiAKIAlpZHggPSBhZDE5ODhfcGluX2lkeChwaW4pOwogCW5pZCA9IGFkMTk4OF9pZHhfdG9fZGFjKGNvZGVjLCBpZHgpOwotCWlmICghIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdKSB7Ci0JCS8qIHVzZSB0aGlzIGFzIHRoZSBwcmltYXJ5IG91dHB1dCAqLwotCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSA9IG5pZDsKLQkJaWYgKCEgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MpCi0JCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7Ci0JfSBlbHNlIAotCQkvKiBzcGVjaWZ5IHRoZSBEQUMgYXMgdGhlIGV4dHJhIG91dHB1dCAqLworCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCisJaWYgKCEgc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQogCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBuaWQ7CisJZWxzZQorCQlzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdID0gbmlkOwogCS8qIGNvbnRyb2wgSFAgdm9sdW1lL3N3aXRjaCBvbiB0aGUgb3V0cHV0IG1peGVyIGFtcCAqLwogCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7CiAJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBRF9DVExfV0lER0VUX1ZPTCwgbmFtZSwKQEAgLTE5MjEsNyArMjM4MCw3IEBACiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaGRhX25pZF90IHBpbjsKIAotCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW47CisJcGluID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07CiAJaWYgKHBpbikgLyogY29ubmVjdCB0byBmcm9udCAqLwogCQlhZDE5ODhfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CiAJcGluID0gc3BlYy0+YXV0b2NmZy5ocF9waW47CkBAIC0xOTcwLDEzICsyNDI5LDEzIEBACiAJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBhZDE5ODhfYXV0b19maWxsX2RhY19uaWRzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyAmJiAhIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW4gJiYKLQkgICAgISBzcGVjLT5hdXRvY2ZnLmhwX3BpbikKKwlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCiAJaWYgKChlcnIgPSBhZDE5ODhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDAgfHwKLQkgICAgKGVyciA9IGFkMTk4OF9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoY29kZWMsIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW4sCisJICAgIChlcnIgPSBhZDE5ODhfYXV0b19jcmVhdGVfZXh0cmFfb3V0KGNvZGVjLAorCQkJCQkJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0sCiAJCQkJCQkiU3BlYWtlciIpKSA8IDAgfHwKLQkgICAgKGVyciA9IGFkMTk4OF9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoY29kZWMsIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW4sCisJICAgIChlcnIgPSBhZDE5ODhfYXV0b19jcmVhdGVfZXh0cmFfb3V0KGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbiwKIAkJCQkJCSJIZWFkcGhvbmUiKSkgPCAwIHx8CiAJICAgIChlcnIgPSBhZDE5ODhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCiAJCXJldHVybiBlcnI7CkBAIC0yMDMyLDcgKzI0OTEsNyBAQAogCWlmIChzcGVjID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW5pdF9NVVRFWCgmc3BlYy0+YW1wX211dGV4KTsKKwltdXRleF9pbml0KCZzcGVjLT5hbXBfbXV0ZXgpOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAogCWlmIChjb2RlYy0+cmV2aXNpb25faWQgPT0gQUQxOTg4QV9SRVYyKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCBiNzY3NTUyLi40YzZjOWVjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNCBLYWlsYW5nIFlhbmcgPGthaWxhbmdAcmVhbHRlay5jb20udHc+CiAgKiAgICAgICAgICAgICAgICAgICAgUGVpU2VuIEhvdSA8cHNob3VAcmVhbHRlay5jb20udHc+CiAgKiAgICAgICAgICAgICAgICAgICAgVGFrYXNoaSBJd2FpIDx0aXdhaUBzdXNlLmRlPgorICogICAgICAgICAgICAgICAgICAgIEpvbmF0aGFuIFdvaXRoZSA8andvaXRoZUBwaHlzaWNzLmFkZWxhaWRlLmVkdS5hdT4KICAqCiAgKiAgVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC01MCw2ICs1MSw3IEBACiAJQUxDODgwX1VOSVdJTExfRElHLAogCUFMQzg4MF9DTEVWTywKIAlBTEM4ODBfVENMX1M3MDAsCisJQUxDODgwX0xHLAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlBTEM4ODBfVEVTVCwKICNlbmRpZgpAQCAtNjMsNiArNjUsMTAgQEAKIAlBTEMyNjBfSFAsCiAJQUxDMjYwX0hQXzMwMTMsCiAJQUxDMjYwX0ZVSklUU1VfUzcwMlgsCisJQUxDMjYwX0FDRVIsCisjaWZkZWYgQ09ORklHX1NORF9ERUJVRworCUFMQzI2MF9URVNULAorI2VuZGlmCiAJQUxDMjYwX0FVVE8sCiAJQUxDMjYwX01PREVMX0xBU1QgLyogbGFzdCB0YWcgKi8KIH07CkBAIC03MCw2ICs3Niw3IEBACiAvKiBBTEMyNjIgbW9kZWxzICovCiBlbnVtIHsKIAlBTEMyNjJfQkFTSUMsCisJQUxDMjYyX0ZVSklUU1UsCiAJQUxDMjYyX0FVVE8sCiAJQUxDMjYyX01PREVMX0xBU1QgLyogbGFzdCB0YWcgKi8KIH07CkBAIC0xMzIsNyArMTM5LDcgQEAKIAlpbnQgbnVtX2NoYW5uZWxfbW9kZTsKIAogCS8qIFBDTSBpbmZvcm1hdGlvbiAqLwotCXN0cnVjdCBoZGFfcGNtIHBjbV9yZWNbMl07CS8qIHVzZWQgaW4gYWxjX2J1aWxkX3BjbXMoKSAqLworCXN0cnVjdCBoZGFfcGNtIHBjbV9yZWNbM107CS8qIHVzZWQgaW4gYWxjX2J1aWxkX3BjbXMoKSAqLwogCiAJLyogZHluYW1pYyBjb250cm9scywgaW5pdF92ZXJicyBhbmQgaW5wdXRfbXV4ICovCiAJc3RydWN0IGF1dG9fcGluX2NmZyBhdXRvY2ZnOwpAQCAtMTQwLDYgKzE0NywxNCBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprY3RsX2FsbG9jOwogCXN0cnVjdCBoZGFfaW5wdXRfbXV4IHByaXZhdGVfaW11eDsKIAloZGFfbmlkX3QgcHJpdmF0ZV9kYWNfbmlkc1s1XTsKKworCS8qIGhvb2tzICovCisJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworCXZvaWQgKCp1bnNvbF9ldmVudCkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpOworCisJLyogZm9yIHBpbiBzZW5zaW5nICovCisJdW5zaWduZWQgaW50IHNlbnNlX3VwZGF0ZWQ6IDE7CisJdW5zaWduZWQgaW50IGphY2tfcHJlc2VudDogMTsKIH07CiAKIC8qCkBAIC0xNTgsNiArMTczLDggQEAKIAl1bnNpZ25lZCBpbnQgbnVtX2NoYW5uZWxfbW9kZTsKIAljb25zdCBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSAqY2hhbm5lbF9tb2RlOwogCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbnB1dF9tdXg7CisJdm9pZCAoKnVuc29sX2V2ZW50KShzdHJ1Y3QgaGRhX2NvZGVjICosIHVuc2lnbmVkIGludCk7CisJdm9pZCAoKmluaXRfaG9vaykoc3RydWN0IGhkYV9jb2RlYyAqKTsKIH07CiAKIApAQCAtMjE4LDU2ICsyMzUsMjMxIEBACiAJCQkJICAgc3BlYy0+bnVtX2NoYW5uZWxfbW9kZSwgJnNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyk7CiB9CiAKLQogLyoKLSAqIENvbnRyb2wgb2YgcGluIHdpZGdldCBzZXR0aW5ncyB2aWEgdGhlIG1peGVyLiAgT25seSBib29sZWFuIHNldHRpbmdzIGFyZQotICogc3VwcG9ydGVkLCBzbyBWcmVmRW4gY2FuJ3QgYmUgY29udHJvbGxlZCB1c2luZyB0aGVzZSBmdW5jdGlvbnMgYXMgdGhleQotICogc3RhbmQuCisgKiBDb250cm9sIHRoZSBtb2RlIG9mIHBpbiB3aWRnZXQgc2V0dGluZ3MgdmlhIHRoZSBtaXhlci4gICJwYyIgaXMgdXNlZAorICogaW5zdGVhZCBvZiAiJSIgdG8gYXZvaWQgY29uc2VxdWVuY2VzIG9mIGFjY2lkZW50bHkgdHJlYXRpbmcgdGhlICUgYXMgCisgKiBiZWluZyBwYXJ0IG9mIGEgZm9ybWF0IHNwZWNpZmllci4gIE1heGltdW0gYWxsb3dlZCBsZW5ndGggb2YgYSB2YWx1ZSBpcworICogNjMgY2hhcmFjdGVycyBwbHVzIE5VTEwgdGVybWluYXRvci4KKyAqCisgKiBOb3RlOiBzb21lIHJldGFza2luZyBwaW4gY29tcGxleGVzIHNlZW0gdG8gaWdub3JlIHJlcXVlc3RzIGZvciBpbnB1dAorICogc3RhdGVzIG90aGVyIHRoYW4gSGlaIChlZzogUElOX1ZSRUZ4eCkgYW5kIHJldmVydCB0byBIaVogaWYgYW55IG9mIHRoZXNlCisgKiBhcmUgcmVxdWVzdGVkLiAgVGhlcmVmb3JlIG9yZGVyIHRoaXMgbGlzdCBzbyB0aGF0IHRoaXMgYmVoYXZpb3VyIHdpbGwgbm90CisgKiBjYXVzZSBwcm9ibGVtcyB3aGVuIG1peGVyIGNsaWVudHMgbW92ZSB0aHJvdWdoIHRoZSBlbnVtIHNlcXVlbnRpYWxseS4KKyAqIE5JRHMgMHgwZiBhbmQgMHgxMCBoYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gaGF2ZSB0aGlzIGJlaGF2aW91ci4KICAqLwotc3RhdGljIGludCBhbGNfcGluY3RsX3N3aXRjaF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQorc3RhdGljIGNoYXIgKmFsY19waW5fbW9kZV9uYW1lc1tdID0geworCSJNaWMgNTBwYyBiaWFzIiwgIk1pYyA4MHBjIGJpYXMiLAorCSJMaW5lIGluIiwgIkxpbmUgb3V0IiwgIkhlYWRwaG9uZSBvdXQiLAorfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFsY19waW5fbW9kZV92YWx1ZXNbXSA9IHsKKwlQSU5fVlJFRjUwLCBQSU5fVlJFRjgwLCBQSU5fSU4sIFBJTl9PVVQsIFBJTl9IUCwKK307CisvKiBUaGUgY29udHJvbCBjYW4gcHJlc2VudCBhbGwgNSBvcHRpb25zLCBvciBpdCBjYW4gbGltaXQgdGhlIG9wdGlvbnMgYmFzZWQKKyAqIGluIHRoZSBwaW4gYmVpbmcgYXNzdW1lZCB0byBiZSBleGNsdXNpdmVseSBhbiBpbnB1dCBvciBhbiBvdXRwdXQgcGluLgorICovCisjZGVmaW5lIEFMQ19QSU5fRElSX0lOICAgIDB4MDAKKyNkZWZpbmUgQUxDX1BJTl9ESVJfT1VUICAgMHgwMQorI2RlZmluZSBBTENfUElOX0RJUl9JTk9VVCAweDAyCisKKy8qIEluZm8gYWJvdXQgdGhlIHBpbiBtb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIHRocmVlIGRpZmZlcmVudCBwaW4gZGlyZWN0aW9ucy4gCisgKiBGb3IgZWFjaCBkaXJlY3Rpb24gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGFyZSBnaXZlbi4KKyAqLworc3RhdGljIHNpZ25lZCBjaGFyIGFsY19waW5fbW9kZV9kaXJfaW5mb1szXVsyXSA9IHsKKwl7IDAsIDIgfSwgICAgLyogQUxDX1BJTl9ESVJfSU4gKi8KKwl7IDMsIDQgfSwgICAgLyogQUxDX1BJTl9ESVJfT1VUICovCisJeyAwLCA0IH0sICAgIC8qIEFMQ19QSU5fRElSX0lOT1VUICovCit9OworI2RlZmluZSBhbGNfcGluX21vZGVfbWluKF9kaXIpIChhbGNfcGluX21vZGVfZGlyX2luZm9bX2Rpcl1bMF0pCisjZGVmaW5lIGFsY19waW5fbW9kZV9tYXgoX2RpcikgKGFsY19waW5fbW9kZV9kaXJfaW5mb1tfZGlyXVsxXSkKKyNkZWZpbmUgYWxjX3Bpbl9tb2RlX25faXRlbXMoX2RpcikgXAorCShhbGNfcGluX21vZGVfbWF4KF9kaXIpLWFsY19waW5fbW9kZV9taW4oX2RpcikrMSkKKworc3RhdGljIGludCBhbGNfcGluX21vZGVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgaXRlbV9udW0gPSB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtOworCXVuc2lnbmVkIGNoYXIgZGlyID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gYWxjX3Bpbl9tb2RlX25faXRlbXMoZGlyKTsKKworCWlmIChpdGVtX251bTxhbGNfcGluX21vZGVfbWluKGRpcikgfHwgaXRlbV9udW0+YWxjX3Bpbl9tb2RlX21heChkaXIpKQorCQlpdGVtX251bSA9IGFsY19waW5fbW9kZV9taW4oZGlyKTsKKwlzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgYWxjX3Bpbl9tb2RlX25hbWVzW2l0ZW1fbnVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxjX3Bpbl9tb2RlX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmZmOworCXVuc2lnbmVkIGNoYXIgZGlyID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOworCXVuc2lnbmVkIGludCBwaW5jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsbmlkLDAsQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLDB4MDApOworCisJLyogRmluZCBlbnVtZXJhdGVkIHZhbHVlIGZvciBjdXJyZW50IHBpbmN0bCBzZXR0aW5nICovCisJaSA9IGFsY19waW5fbW9kZV9taW4oZGlyKTsKKwl3aGlsZSAoYWxjX3Bpbl9tb2RlX3ZhbHVlc1tpXSE9cGluY3RsICYmIGk8PWFsY19waW5fbW9kZV9tYXgoZGlyKSkKKwkJaSsrOworCSp2YWxwID0gaTw9YWxjX3Bpbl9tb2RlX21heChkaXIpP2k6YWxjX3Bpbl9tb2RlX21pbihkaXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsY19waW5fbW9kZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXNpZ25lZCBpbnQgY2hhbmdlOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWhkYV9uaWRfdCBuaWQgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDB4ZmZmZjsKKwl1bnNpZ25lZCBjaGFyIGRpciA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOworCWxvbmcgdmFsID0gKnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOworCXVuc2lnbmVkIGludCBwaW5jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsbmlkLDAsQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLDB4MDApOworCisJaWYgKHZhbDxhbGNfcGluX21vZGVfbWluKGRpcikgfHwgdmFsPmFsY19waW5fbW9kZV9tYXgoZGlyKSkgCisJCXZhbCA9IGFsY19waW5fbW9kZV9taW4oZGlyKTsKKworCWNoYW5nZSA9IHBpbmN0bCAhPSBhbGNfcGluX21vZGVfdmFsdWVzW3ZhbF07CisJaWYgKGNoYW5nZSkgeworCQkvKiBTZXQgcGluIG1vZGUgdG8gdGhhdCByZXF1ZXN0ZWQgKi8KKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYyxuaWQsMCxBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQlhbGNfcGluX21vZGVfdmFsdWVzW3ZhbF0pOworCisJCS8qIEFsc28gZW5hYmxlIHRoZSByZXRhc2tpbmcgcGluJ3MgaW5wdXQvb3V0cHV0IGFzIHJlcXVpcmVkIAorCQkgKiBmb3IgdGhlIHJlcXVlc3RlZCBwaW4gbW9kZS4gIEVudW0gdmFsdWVzIG9mIDIgb3IgbGVzcyBhcmUKKwkJICogaW5wdXQgbW9kZXMuCisJCSAqCisJCSAqIER5bmFtaWNhbGx5IHN3aXRjaGluZyB0aGUgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMgcHJvYmFibHkKKwkJICogcmVkdWNlcyBub2lzZSBzbGlnaHRseSwgcGFydGljdWxhcmx5IG9uIGlucHV0LiAgSG93ZXZlciwKKwkJICogaGF2aW5nYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgZW5hYmxlZAorCQkgKiBzaW11bHRhbmVvdXNseSBkb2Vzbid0IHNlZW0gdG8gYmUgcHJvYmxlbWF0aWMuCisJCSAqLworCQlpZiAodmFsIDw9IDIpIHsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsbmlkLDAsQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQlBTVBfT1VUX01VVEUpOworCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYyxuaWQsMCxBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCUFNUF9JTl9VTk1VVEUoMCkpOworCQl9IGVsc2UgeworCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYyxuaWQsMCxBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCUFNUF9JTl9NVVRFKDApKTsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsbmlkLDAsQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKKwkJCQlBTVBfT1VUX1VOTVVURSk7CisJCX0KKwl9CisJcmV0dXJuIGNoYW5nZTsKK30KKworI2RlZmluZSBBTENfUElOX01PREUoeG5hbWUsIG5pZCwgZGlyKSBcCisJeyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0gMCwgIFwKKwkgIC5pbmZvID0gYWxjX3Bpbl9tb2RlX2luZm8sIFwKKwkgIC5nZXQgPSBhbGNfcGluX21vZGVfZ2V0LCBcCisJICAucHV0ID0gYWxjX3Bpbl9tb2RlX3B1dCwgXAorCSAgLnByaXZhdGVfdmFsdWUgPSBuaWQgfCAoZGlyPDwxNikgfQorCisvKiBBIHN3aXRjaCBjb250cm9sIGZvciBBTEMyNjAgR1BJTyBwaW5zLiAgTXVsdGlwbGUgR1BJT3MgY2FuIGJlIGdhbmdlZAorICogdG9nZXRoZXIgdXNpbmcgYSBtYXNrIHdpdGggbW9yZSB0aGFuIG9uZSBiaXQgc2V0LiAgVGhpcyBjb250cm9sIGlzCisgKiBjdXJyZW50bHkgdXNlZCBvbmx5IGJ5IHRoZSBBTEMyNjAgdGVzdCBtb2RlbC4gIEF0IHRoaXMgc3RhZ2UgdGhleSBhcmUgbm90CisgKiBuZWVkZWQgZm9yIGFueSAicHJvZHVjdGlvbiIgbW9kZWxzLgorICovCisjaWZkZWYgQ09ORklHX1NORF9ERUJVRworc3RhdGljIGludCBhbGNfZ3Bpb19kYXRhX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7CiAJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CiAJdWluZm8tPmNvdW50ID0gMTsKIAl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwogCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CiAJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWxjX3BpbmN0bF9zd2l0Y2hfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorc3RhdGljIGludCBhbGNfZ3Bpb19kYXRhX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmZmOwotCWxvbmcgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOworCXVuc2lnbmVkIGNoYXIgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOwogCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLG5pZCwwLEFDX1ZFUkJfR0VUX0dQSU9fREFUQSwweDAwKTsKIAotCSp2YWxwID0gMDsKLQlpZiAoc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLG5pZCwwLEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwweDAwKSAmIG1hc2spCi0JCSp2YWxwID0gMTsKKwkqdmFscCA9ICh2YWwgJiBtYXNrKSAhPSAwOwogCXJldHVybiAwOwogfQorc3RhdGljIGludCBhbGNfZ3Bpb19kYXRhX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc2lnbmVkIGludCBjaGFuZ2U7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJaGRhX25pZF90IG5pZCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmZmOworCXVuc2lnbmVkIGNoYXIgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOworCWxvbmcgdmFsID0gKnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOworCXVuc2lnbmVkIGludCBncGlvX2RhdGEgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsbmlkLDAsQUNfVkVSQl9HRVRfR1BJT19EQVRBLDB4MDApOwogCi1zdGF0aWMgaW50IGFsY19waW5jdGxfc3dpdGNoX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCisJLyogU2V0L3Vuc2V0IHRoZSBtYXNrZWQgR1BJTyBiaXQocykgYXMgbmVlZGVkICovCisJY2hhbmdlID0gKHZhbD09MD8wOm1hc2spICE9IChncGlvX2RhdGEgJiBtYXNrKTsKKwlpZiAodmFsPT0wKQorCQlncGlvX2RhdGEgJj0gfm1hc2s7CisJZWxzZQorCQlncGlvX2RhdGEgfD0gbWFzazsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLG5pZCwwLEFDX1ZFUkJfU0VUX0dQSU9fREFUQSxncGlvX2RhdGEpOworCisJcmV0dXJuIGNoYW5nZTsKK30KKyNkZWZpbmUgQUxDX0dQSU9fREFUQV9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAorCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCisJICAuaW5mbyA9IGFsY19ncGlvX2RhdGFfaW5mbywgXAorCSAgLmdldCA9IGFsY19ncGlvX2RhdGFfZ2V0LCBcCisJICAucHV0ID0gYWxjX2dwaW9fZGF0YV9wdXQsIFwKKwkgIC5wcml2YXRlX3ZhbHVlID0gbmlkIHwgKG1hc2s8PDE2KSB9CisjZW5kaWYgICAvKiBDT05GSUdfU05EX0RFQlVHICovCisKKy8qIEEgc3dpdGNoIGNvbnRyb2wgdG8gYWxsb3cgdGhlIGVuYWJsaW5nIG9mIHRoZSBkaWdpdGFsIElPIHBpbnMgb24gdGhlCisgKiBBTEMyNjAuICBUaGlzIGlzIGluY3JlZGlibHkgc2ltcGxpc3RpYzsgdGhlIGludGVudGlvbiBvZiB0aGlzIGNvbnRyb2wgaXMKKyAqIHRvIHByb3ZpZGUgc29tZXRoaW5nIGluIHRoZSB0ZXN0IG1vZGVsIGFsbG93aW5nIGRpZ2l0YWwgb3V0cHV0cyB0byBiZQorICogaWRlbnRpZmllZCBpZiBwcmVzZW50LiAgSWYgbW9kZWxzIGFyZSBmb3VuZCB3aGljaCBjYW4gdXRpbGlzZSB0aGVzZQorICogb3V0cHV0cyBhIG1vcmUgY29tcGxldGUgbWl4ZXIgY29udHJvbCBjYW4gYmUgZGV2aXNlZCBmb3IgdGhvc2UgbW9kZWxzIGlmCisgKiBuZWNlc3NhcnkuCisgKi8KKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHCitzdGF0aWMgaW50IGFsY19zcGRpZl9jdHJsX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47CisJdWluZm8tPmNvdW50ID0gMTsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7CisJcmV0dXJuIDA7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3N0YXRpYyBpbnQgYWxjX3NwZGlmX2N0cmxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7Ci0JbG9uZyBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJdW5zaWduZWQgY2hhciBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CiAJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwotCXVuc2lnbmVkIGludCBwaW5jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsbmlkLDAsQUNfVkVSQl9HRVRfUElOX1dJREdFVF9DT05UUk9MLDB4MDApOwotCWludCBjaGFuZ2UgPSAoKHBpbmN0bCAmIG1hc2spIT0wKSAhPSAqdmFscDsKKwl1bnNpZ25lZCBpbnQgdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLG5pZCwwLEFDX1ZFUkJfR0VUX0RJR0lfQ09OVkVSVCwweDAwKTsKIAotCWlmIChjaGFuZ2UpCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsbmlkLDAsQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJKnZhbHA/KHBpbmN0bHxtYXNrKToocGluY3RsJn5tYXNrKSk7CisJKnZhbHAgPSAodmFsICYgbWFzaykgIT0gMDsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgYWxjX3NwZGlmX2N0cmxfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzaWduZWQgaW50IGNoYW5nZTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwloZGFfbmlkX3QgbmlkID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7CisJdW5zaWduZWQgY2hhciBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE2KSAmIDB4ZmY7CisJbG9uZyB2YWwgPSAqdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CisJdW5zaWduZWQgaW50IGN0cmxfZGF0YSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYyxuaWQsMCxBQ19WRVJCX0dFVF9ESUdJX0NPTlZFUlQsMHgwMCk7CisKKwkvKiBTZXQvdW5zZXQgdGhlIG1hc2tlZCBjb250cm9sIGJpdChzKSBhcyBuZWVkZWQgKi8KKwljaGFuZ2UgPSAodmFsPT0wPzA6bWFzaykgIT0gKGN0cmxfZGF0YSAmIG1hc2spOworCWlmICh2YWw9PTApCisJCWN0cmxfZGF0YSAmPSB+bWFzazsKKwllbHNlCisJCWN0cmxfZGF0YSB8PSBtYXNrOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsbmlkLDAsQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsY3RybF9kYXRhKTsKKwogCXJldHVybiBjaGFuZ2U7CiB9Ci0KLSNkZWZpbmUgQUxDX1BJTkNUTF9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAorI2RlZmluZSBBTENfU1BESUZfQ1RSTF9TV0lUQ0goeG5hbWUsIG5pZCwgbWFzaykgXAogCXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIC5pbmRleCA9IDAsICBcCi0JICAuaW5mbyA9IGFsY19waW5jdGxfc3dpdGNoX2luZm8sIFwKLQkgIC5nZXQgPSBhbGNfcGluY3RsX3N3aXRjaF9nZXQsIFwKLQkgIC5wdXQgPSBhbGNfcGluY3RsX3N3aXRjaF9wdXQsIFwKLQkgIC5wcml2YXRlX3ZhbHVlID0gKG5pZCkgfCAobWFzazw8MTYpIH0KLQorCSAgLmluZm8gPSBhbGNfc3BkaWZfY3RybF9pbmZvLCBcCisJICAuZ2V0ID0gYWxjX3NwZGlmX2N0cmxfZ2V0LCBcCisJICAucHV0ID0gYWxjX3NwZGlmX2N0cmxfcHV0LCBcCisJICAucHJpdmF0ZV92YWx1ZSA9IG5pZCB8IChtYXNrPDwxNikgfQorI2VuZGlmICAgLyogQ09ORklHX1NORF9ERUJVRyAqLwogCiAvKgogICogc2V0IHVwIGZyb20gdGhlIHByZXNldCB0YWJsZQpAQCAtMjk2LDYgKzQ4OCw5IEBACiAJc3BlYy0+bnVtX2FkY19uaWRzID0gcHJlc2V0LT5udW1fYWRjX25pZHM7CiAJc3BlYy0+YWRjX25pZHMgPSBwcmVzZXQtPmFkY19uaWRzOwogCXNwZWMtPmRpZ19pbl9uaWQgPSBwcmVzZXQtPmRpZ19pbl9uaWQ7CisKKwlzcGVjLT51bnNvbF9ldmVudCA9IHByZXNldC0+dW5zb2xfZXZlbnQ7CisJc3BlYy0+aW5pdF9ob29rID0gcHJlc2V0LT5pbml0X2hvb2s7CiB9CiAKIC8qCkBAIC0xMDk4LDYgKzEyOTMsMTQxIEBACiB9OwogCiAvKgorICogTEcgbTEgZXhwcmVzcyBkdWFsCisgKgorICogUGluIGFzc2lnbm1lbnQ6CisgKiAgIFJlYXIgTGluZS1Jbi9PdXQgKGJsdWUpOiAweDE0CisgKiAgIEJ1aWxkLWluIE1pYy1JbjogMHgxNQorICogICBTcGVha2VyLW91dDogMHgxNworICogICBIUC1PdXQgKGdyZWVuKTogMHgxYgorICogICBNaWMtSW4vT3V0IChyZWQpOiAweDE5CisgKiAgIFNQRElGLU91dDogMHgxZQorICovCisKKy8qIFRvIG1ha2UgNS4xIG91dHB1dCB3b3JraW5nIChncmVlbj1Gcm9udCwgYmx1ZT1TdXJyLCByZWQ9Q0xGRSkgKi8KK3N0YXRpYyBoZGFfbmlkX3QgYWxjODgwX2xnX2RhY19uaWRzWzNdID0geworCTB4MDUsIDB4MDIsIDB4MDMKK307CisKKy8qIHNlZW1zIGFuYWxvZyBDRCBpcyBub3Qgd29ya2luZyAqLworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzg4MF9sZ19jYXB0dXJlX3NvdXJjZSA9IHsKKwkubnVtX2l0ZW1zID0gMywKKwkuaXRlbXMgPSB7CisJCXsgIk1pYyIsIDB4MSB9LAorCQl7ICJMaW5lIiwgMHg1IH0sCisJCXsgIkludGVybmFsIE1pYyIsIDB4NiB9LAorCX0sCit9OworCisvKiAyLDQsNiBjaGFubmVsIG1vZGVzICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4MF9sZ19jaDJfaW5pdFtdID0geworCS8qIHNldCBsaW5lLWluIGFuZCBtaWMtaW4gdG8gaW5wdXQgKi8KKwl7IDB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOIH0sCisJeyAweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2xnX2NoNF9pbml0W10gPSB7CisJLyogc2V0IGxpbmUtaW4gdG8gb3V0IGFuZCBtaWMtaW4gdG8gaW5wdXQgKi8KKwl7IDB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sCisJeyAweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2xnX2NoNl9pbml0W10gPSB7CisJLyogc2V0IGxpbmUtaW4gYW5kIG1pYy1pbiB0byBvdXRwdXQgKi8KKwl7IDB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sCisJeyAweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4MF9sZ19jaF9tb2Rlc1szXSA9IHsKKwl7IDIsIGFsYzg4MF9sZ19jaDJfaW5pdCB9LAorCXsgNCwgYWxjODgwX2xnX2NoNF9pbml0IH0sCisJeyA2LCBhbGM4ODBfbGdfY2g2X2luaXQgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODBfbGdfbWl4ZXJbXSA9IHsKKwkvKiBGSVhNRTogaXQncyBub3QgcmVhbGx5ICJtYXN0ZXIiIGJ1dCBmcm9udCBjaGFubmVscyAqLworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDBmLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBmLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIlN1cnJvdW5kIFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiU3Vycm91bmQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAxLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTEZFIFBsYXliYWNrIFZvbHVtZSIsIDB4MGQsIDIsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwZCwgMSwgMiwgSERBX0lOUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkxGRSBQbGF5YmFjayBTd2l0Y2giLCAweDBkLCAyLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDcsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkludGVybmFsIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA3LCBIREFfSU5QVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkNoYW5uZWwgTW9kZSIsCisJCS5pbmZvID0gYWxjX2NoX21vZGVfaW5mbywKKwkJLmdldCA9IGFsY19jaF9tb2RlX2dldCwKKwkJLnB1dCA9IGFsY19jaF9tb2RlX3B1dCwKKwl9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODgwX2xnX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBzZXQgY2FwdHVyZSBzb3VyY2UgdG8gbWljLWluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCisJLyogbXV0ZSBhbGwgYW1wIG1peGVyIGlucHV0cyAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDUpfSwKKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSg2KX0sCisJezB4MGIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoNyl9LAorCS8qIGxpbmUtaW4gdG8gaW5wdXQgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogYnVpbHQtaW4gbWljICovCisJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBzcGVha2VyLW91dCAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBtaWMtaW4gdG8gaW5wdXQgKi8KKwl7MHgxMSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogSFAtb3V0ICovCisJezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAzfSwKKwl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogamFjayBzZW5zZSAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgMHgxfSwKKwl7IH0KK307CisKKy8qIHRvZ2dsZSBzcGVha2VyLW91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGhwLWphY2sgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIGFsYzg4MF9sZ19hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKworCXByZXNlbnQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MWIsIDAsCisJCQkJICAgICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApICYgMHg4MDAwMDAwMDsKKwlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTcsIDAsIEhEQV9PVVRQVVQsIDAsCisJCQkJIDB4ODAsIHByZXNlbnQgPyAweDgwIDogMCk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE3LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCBwcmVzZW50ID8gMHg4MCA6IDApOworfQorCitzdGF0aWMgdm9pZCBhbGM4ODBfbGdfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJLyogTG9va3MgbGlrZSB0aGUgdW5zb2wgZXZlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHN0YW5kYXJkCisJICogZGVmaW5pdGlvbi4gIDRiaXQgdGFnIGlzIHBsYWNlZCBhdCAyOCBiaXQhCisJICovCisJaWYgKChyZXMgPj4gMjgpID09IDB4MDEpCisJCWFsYzg4MF9sZ19hdXRvbXV0ZShjb2RlYyk7Cit9CisKKy8qCisgKiBDb21tb24gY2FsbGJhY2tzCiAgKi8KIAogc3RhdGljIGludCBhbGNfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTExMDcsOSArMTQzNywyMSBAQAogCiAJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9pbml0X3ZlcmJzOyBpKyspCiAJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIHNwZWMtPmluaXRfdmVyYnNbaV0pOworCisJaWYgKHNwZWMtPmluaXRfaG9vaykKKwkJc3BlYy0+aW5pdF9ob29rKGNvZGVjKTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBhbGNfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCisJCXNwZWMtPnVuc29sX2V2ZW50KGNvZGVjLCByZXMpOworfQorCiAjaWZkZWYgQ09ORklHX1BNCiAvKgogICogcmVzdW1lCkBAIC0xMjUwLDYgKzE1OTIsMTMgQEAKIAkvKiBOSUQgaXMgc2V0IGluIGFsY19idWlsZF9wY21zICovCiB9OwogCisvKiBVc2VkIGJ5IGFsY19idWlsZF9wY21zIHRvIGZsYWcgdGhhdCBhIFBDTSBoYXMgbm8gcGxheWJhY2sgc3RyZWFtICovCitzdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsY19wY21fbnVsbF9wbGF5YmFjayA9IHsKKwkuc3Vic3RyZWFtcyA9IDAsCisJLmNoYW5uZWxzX21pbiA9IDAsCisJLmNoYW5uZWxzX21heCA9IDAsCit9OworCiBzdGF0aWMgaW50IGFsY19idWlsZF9wY21zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtMTI4MCw2ICsxNjI5LDIzIEBACiAJCX0KIAl9CiAKKwkvKiBJZiB0aGUgdXNlIG9mIG1vcmUgdGhhbiBvbmUgQURDIGlzIHJlcXVlc3RlZCBmb3IgdGhlIGN1cnJlbnQKKwkgKiBtb2RlbCwgY29uZmlndXJlIGEgc2Vjb25kIGFuYWxvZyBjYXB0dXJlLW9ubHkgUENNLgorCSAqLworCWlmIChzcGVjLT5udW1fYWRjX25pZHMgPiAxKSB7CisJCWNvZGVjLT5udW1fcGNtcysrOworCQlpbmZvKys7CisJCWluZm8tPm5hbWUgPSBzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2c7CisJCS8qIE5vIHBsYXliYWNrIHN0cmVhbSBmb3Igc2Vjb25kIFBDTSAqLworCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSBhbGNfcGNtX251bGxfcGxheWJhY2s7CisJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5uaWQgPSAwOworCQlpZiAoc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlKSB7CisJCQlzbmRfYXNzZXJ0KHNwZWMtPmFkY19uaWRzLCByZXR1cm4gLUVJTlZBTCk7CisJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9ICooc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlKTsKKwkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm5pZCA9IHNwZWMtPmFkY19uaWRzWzFdOworCQl9CisJfQorCiAJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkIHx8IHNwZWMtPmRpZ19pbl9uaWQpIHsKIAkJY29kZWMtPm51bV9wY21zKys7CiAJCWluZm8rKzsKQEAgLTEzMjIsNiArMTY4OCw3IEBACiAJLmJ1aWxkX3BjbXMgPSBhbGNfYnVpbGRfcGNtcywKIAkuaW5pdCA9IGFsY19pbml0LAogCS5mcmVlID0gYWxjX2ZyZWUsCisJLnVuc29sX2V2ZW50ID0gYWxjX3Vuc29sX2V2ZW50LAogI2lmZGVmIENPTkZJR19QTQogCS5yZXN1bWUgPSBhbGNfcmVzdW1lLAogI2VuZGlmCkBAIC0xMzQwLDEzICsxNzA3LDE1IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjODgwX3Rlc3RfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDUsCisJLm51bV9pdGVtcyA9IDcsCiAJLml0ZW1zID0gewogCQl7ICJJbi0xIiwgMHgwIH0sCiAJCXsgIkluLTIiLCAweDEgfSwKIAkJeyAiSW4tMyIsIDB4MiB9LAogCQl7ICJJbi00IiwgMHgzIH0sCiAJCXsgIkNEIiwgMHg0IH0sCisJCXsgIkZyb250IiwgMHg1IH0sCisJCXsgIlN1cnJvdW5kIiwgMHg2IH0sCiAJfSwKIH07CiAKQEAgLTE2NTMsNiArMjAyMiw4IEBACiAJeyAucGNpX3N1YnZlbmRvciA9IDB4ODA4NiwgLnBjaV9zdWJkZXZpY2UgPSAweGExMDAsIC5jb25maWcgPSBBTEM4ODBfNVNUX0RJRyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDE1NjUsIC5wY2lfc3ViZGV2aWNlID0gMHg4MjAyLCAuY29uZmlnID0gQUxDODgwXzVTVF9ESUcgfSwKIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDE5LCAucGNpX3N1YmRldmljZSA9IDB4YTg4MCwgLmNvbmZpZyA9IEFMQzg4MF81U1RfRElHIH0sCisJeyAucGNpX3N1YnZlbmRvciA9IDB4YTBhMCwgLnBjaV9zdWJkZXZpY2UgPSAweDA1NjAsCisJICAuY29uZmlnID0gQUxDODgwXzVTVF9ESUcgfSwgLyogQW9wZW4gaTkxNUdNbS1IRlMgKi8KIAkvKiB7IC5wY2lfc3VidmVuZG9yID0gMHgxMDE5LCAucGNpX3N1YmRldmljZSA9IDB4YTg4NCwgLmNvbmZpZyA9IEFMQzg4MF81U1RfRElHIH0sICovIC8qIGNvbmZsaWN0IHdpdGggNnN0YWNrICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTY5NSwgLnBjaV9zdWJkZXZpY2UgPSAweDQwMGQsIC5jb25maWcgPSBBTEM4ODBfNVNUX0RJRyB9LAogCS8qIG5vdGUgc3VidmVuZG9yID0gMCBiZWxvdyAqLwpAQCAtMTY4MCw2ICsyMDUxLDcgQEAKIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDI1LCAucGNpX3N1YmRldmljZSA9IDB4MDA3OCwgLmNvbmZpZyA9IEFMQzg4MF82U1RfRElHIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAyNSwgLnBjaV9zdWJkZXZpY2UgPSAweDAwODcsIC5jb25maWcgPSBBTEM4ODBfNlNUX0RJRyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEyOTcsIC5wY2lfc3ViZGV2aWNlID0gMHhjNzkwLCAuY29uZmlnID0gQUxDODgwXzZTVF9ESUcgfSwgLyogU2h1dHRsZSBTVDIwRzUgKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxNTA5LCAucGNpX3N1YmRldmljZSA9IDB4OTI1ZCwgLmNvbmZpZyA9IEFMQzg4MF82U1RfRElHIH0sIC8qIEZJQyBQNE0tOTE1R0QxICovCiAKIAl7IC5tb2RlbG5hbWUgPSAiYXN1cyIsIC5jb25maWcgPSBBTEM4ODBfQVNVUyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxOTY0LCAuY29uZmlnID0gQUxDODgwX0FTVVNfRElHIH0sCkBAIC0xNjkzLDYgKzIwNjUsNyBAQAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxMTIzLCAuY29uZmlnID0gQUxDODgwX0FTVVNfRElHIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDExNDMsIC5jb25maWcgPSBBTEM4ODBfQVNVUyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNDMsIC5wY2lfc3ViZGV2aWNlID0gMHgxMGIzLCAuY29uZmlnID0gQUxDODgwX0FTVVNfVzFWIH0sCisJeyAucGNpX3N1YnZlbmRvciA9IDB4MTA0MywgLnBjaV9zdWJkZXZpY2UgPSAweDgxODEsIC5jb25maWcgPSBBTEM4ODBfQVNVU19ESUcgfSwgLyogQVNVUyBQNEdQTC1YICovCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTU1OCwgLnBjaV9zdWJkZXZpY2UgPSAweDU0MDEsIC5jb25maWcgPSBBTEM4ODBfQVNVU19ESUcyIH0sCiAKIAl7IC5tb2RlbG5hbWUgPSAidW5pd2lsbCIsIC5jb25maWcgPSBBTEM4ODBfVU5JV0lMTF9ESUcgfSwKQEAgLTE3MDIsNiArMjA3NSw5IEBACiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTczNCwgLnBjaV9zdWJkZXZpY2UgPSAweDEwN2MsIC5jb25maWcgPSBBTEM4ODBfRjE3MzQgfSwKIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxNTg0LCAucGNpX3N1YmRldmljZSA9IDB4OTA1NCwgLmNvbmZpZyA9IEFMQzg4MF9GMTczNCB9LAogCisJeyAubW9kZWxuYW1lID0gImxnIiwgLmNvbmZpZyA9IEFMQzg4MF9MRyB9LAorCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDE4NTQsIC5wY2lfc3ViZGV2aWNlID0gMHgwMDNiLCAuY29uZmlnID0gQUxDODgwX0xHIH0sCisKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJeyAubW9kZWxuYW1lID0gInRlc3QiLCAuY29uZmlnID0gQUxDODgwX1RFU1QgfSwKICNlbmRpZgpAQCAtMTg3OSw2ICsyMjU1LDE5IEBACiAJCS5jaGFubmVsX21vZGUgPSBhbGM4ODBfdGhyZWVzdGFja19tb2RlcywKIAkJLmlucHV0X211eCA9ICZhbGM4ODBfY2FwdHVyZV9zb3VyY2UsCiAJfSwKKwlbQUxDODgwX0xHXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjODgwX2xnX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCisJCQkJYWxjODgwX2xnX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODBfbGdfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGM4ODBfbGdfZGFjX25pZHMsCisJCS5kaWdfb3V0X25pZCA9IEFMQzg4MF9ESUdPVVRfTklELAorCQkubnVtX2NoYW5uZWxfbW9kZSA9IEFSUkFZX1NJWkUoYWxjODgwX2xnX2NoX21vZGVzKSwKKwkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4MF9sZ19jaF9tb2RlcywKKwkJLmlucHV0X211eCA9ICZhbGM4ODBfbGdfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzg4MF9sZ191bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzg4MF9sZ19hdXRvbXV0ZSwKKwl9LAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlbQUxDODgwX1RFU1RdID0gewogCQkubWl4ZXJzID0geyBhbGM4ODBfdGVzdF9taXhlciB9LApAQCAtMjA0MywxNCArMjQzMiwxMSBAQAogCiAJaWYgKGFsYzg4MF9pc19maXhlZF9waW4ocGluKSkgewogCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhhbGM4ODBfZml4ZWRfcGluX2lkeChwaW4pKTsKLQkJaWYgKCEgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0pIHsKLQkJCS8qIHVzZSB0aGlzIGFzIHRoZSBwcmltYXJ5IG91dHB1dCAqLwotCQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0gPSBuaWQ7Ci0JCQlpZiAoISBzcGVjLT5tdWx0aW91dC5udW1fZGFjcykKLQkJCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7Ci0JCX0gZWxzZSAKLQkJCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCisJCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCisJCWlmICghIHNwZWMtPm11bHRpb3V0LmhwX25pZCkKIAkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IG5pZDsKKwkJZWxzZQorCQkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXSA9IG5pZDsKIAkJLyogY29udHJvbCBIUCB2b2x1bWUvc3dpdGNoIG9uIHRoZSBvdXRwdXQgbWl4ZXIgYW1wICovCiAJCW5pZCA9IGFsYzg4MF9pZHhfdG9fbWl4ZXIoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7CiAJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7CkBAIC0yMDYzLDEyICsyNDQ5LDYgQEAKIAkJCXJldHVybiBlcnI7CiAJfSBlbHNlIGlmIChhbGM4ODBfaXNfbXVsdGlfcGluKHBpbikpIHsKIAkJLyogc2V0IG1hbnVhbCBjb25uZWN0aW9uICovCi0JCWlmICghIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdKSB7Ci0JCQkvKiB1c2UgdGhpcyBhcyB0aGUgcHJpbWFyeSBvdXRwdXQgKi8KLQkJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX211bHRpX3Bpbl9pZHgocGluKSk7Ci0JCQlpZiAoISBzcGVjLT5tdWx0aW91dC5udW1fZGFjcykKLQkJCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7Ci0JCX0KIAkJLyogd2UgaGF2ZSBvbmx5IGEgc3dpdGNoIG9uIEhQLW91dCBQSU4gKi8KIAkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKIAkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLApAQCAtMjE1Miw3ICsyNTMyLDcgQEAKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAloZGFfbmlkX3QgcGluOwogCi0JcGluID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbjsKKwlwaW4gPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXTsKIAlpZiAocGluKSAvKiBjb25uZWN0IHRvIGZyb250ICovCiAJCWFsYzg4MF9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULCAwKTsKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbjsKQEAgLTIxODgsMTUgKzI1NjgsMTUgQEAKIAlpZiAoKGVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAogCQkJCQkJYWxjODgwX2lnbm9yZSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyAmJiAhIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW4gJiYKLQkgICAgISBzcGVjLT5hdXRvY2ZnLmhwX3BpbikKKwlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCiAKIAlpZiAoKGVyciA9IGFsYzg4MF9hdXRvX2ZpbGxfZGFjX25pZHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDAgfHwKIAkgICAgKGVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCB8fAotCSAgICAoZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLCBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluLAorCSAgICAoZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLAorCQkJCQkJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0sCiAJCQkJCQkiU3BlYWtlciIpKSA8IDAgfHwKLQkgICAgKGVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywgc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbiwKKwkgICAgKGVyciA9IGFsYzg4MF9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywgc3BlYy0+YXV0b2NmZy5ocF9waW4sCiAJCQkJCQkiSGVhZHBob25lIikpIDwgMCB8fAogCSAgICAoZXJyID0gYWxjODgwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKSkgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMjIxOCwxNCArMjU5OCwxMiBAQAogCXJldHVybiAxOwogfQogCi0vKiBpbml0IGNhbGxiYWNrIGZvciBhdXRvLWNvbmZpZ3VyYXRpb24gbW9kZWwgLS0gb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBpbml0ICovCi1zdGF0aWMgaW50IGFsYzg4MF9hdXRvX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCisvKiBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGZvciBhdXRvLWNvbmZpZ3VyYXRpb24gbW9kZWwgKi8KK3N0YXRpYyB2b2lkIGFsYzg4MF9hdXRvX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0JYWxjX2luaXQoY29kZWMpOwogCWFsYzg4MF9hdXRvX2luaXRfbXVsdGlfb3V0KGNvZGVjKTsKIAlhbGM4ODBfYXV0b19pbml0X2V4dHJhX291dChjb2RlYyk7CiAJYWxjODgwX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjI5Miw3ICsyNjcwLDcgQEAKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBhbGNfcGF0Y2hfb3BzOwogCWlmIChib2FyZF9jb25maWcgPT0gQUxDODgwX0FVVE8pCi0JCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFsYzg4MF9hdXRvX2luaXQ7CisJCXNwZWMtPmluaXRfaG9vayA9IGFsYzg4MF9hdXRvX2luaXQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMjIsNiArMjcwMCwxNCBAQAogCTB4MDUsIDB4MDQKIH07CiAKKy8qIE5JRHMgdXNlZCB3aGVuIHNpbXVsdGFuZW91cyBhY2Nlc3MgdG8gYm90aCBBRENzIG1ha2VzIHNlbnNlLiAgTm90ZSB0aGF0CisgKiBhbGMyNjBfY2FwdHVyZV9taXhlciBhc3N1bWVzIEFEQzAgKG5pZCAweDA0KSBpcyB0aGUgZmlyc3QgQURDLgorICovCitzdGF0aWMgaGRhX25pZF90IGFsYzI2MF9kdWFsX2FkY19uaWRzWzJdID0geworCS8qIEFEQzAsIEFEQzEgKi8KKwkweDA0LCAweDA1Cit9OworCiAjZGVmaW5lIEFMQzI2MF9ESUdPVVRfTklECTB4MDMKICNkZWZpbmUgQUxDMjYwX0RJR0lOX05JRAkweDA2CiAKQEAgLTIzMzUsMTQgKzI3MjEsMjggQEAKIAl9LAogfTsKIAotLyogT24gRnVqaXRzdSBTNzAyeCBsYXB0b3BzIGNhcHR1cmUgb25seSBtYWtlcyBzZW5zZSBmcm9tIE1pYy9MaW5lSW4gamFjawotICogYW5kIHRoZSBpbnRlcm5hbCBDRCBsaW5lcy4KKy8qIE9uIEZ1aml0c3UgUzcwMnggbGFwdG9wcyBjYXB0dXJlIG9ubHkgbWFrZXMgc2Vuc2UgZnJvbSBNaWMvTGluZUluIGphY2ssCisgKiBoZWFkcGhvbmUgamFjayBhbmQgdGhlIGludGVybmFsIENEIGxpbmVzLgogICovCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2UgPSB7Ci0JLm51bV9pdGVtcyA9IDIsCisJLm51bV9pdGVtcyA9IDMsCiAJLml0ZW1zID0gewogCQl7ICJNaWMvTGluZSIsIDB4MCB9LAogCQl7ICJDRCIsIDB4NCB9LAorCQl7ICJIZWFkcGhvbmUiLCAweDIgfSwKKwl9LAorfTsKKworLyogQWNlciBUcmF2ZWxNYXRlKC9FeHRlbnNhL0FzcGlyZSkgbm90ZWJvb2tzIGhhdmUgc2ltaWxhciBjb25maWd1dGF0aW9uIHRvCisgKiB0aGUgRnVqaXRzdSBTNzAyeCwgYnV0IGphY2tzIGFyZSBtYXJrZWQgZGlmZmVyZW50bHkuIFdlIHdvbid0IGFsbG93CisgKiByZXRhc2tpbmcgdGhlIEhlYWRwaG9uZSBqYWNrLCBzbyBpdCB3b24ndCBiZSBhdmFpbGFibGUgaGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAzLAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIiwgMHgwIH0sCisJCXsgIkxpbmUiLCAweDIgfSwKKwkJeyAiQ0QiLCAweDQgfSwKIAl9LAogfTsKIApAQCAtMjM2Myw2ICsyNzYzLDcgQEAKICAqIEhQOiBiYXNlX291dHB1dCArIGlucHV0ICsgY2FwdHVyZV9hbHQKICAqIEhQXzMwMTM6IGhwXzMwMTMgKyBpbnB1dCArIGNhcHR1cmUKICAqIGZ1aml0c3U6IGZ1aml0c3UgKyBjYXB0dXJlCisgKiBhY2VyOiBhY2VyICsgY2FwdHVyZQogICovCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfYmFzZV9vdXRwdXRfbWl4ZXJbXSA9IHsKQEAgLTI0MDgsMTEgKzI4MDksMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfZnVqaXRzdV9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLAotCUFMQ19QSU5DVExfU1dJVENIKCJIZWFkcGhvbmUgQW1wIFN3aXRjaCIsIDB4MTQsIFBJTl9IUF9BTVApLAorCUFMQ19QSU5fTU9ERSgiSGVhZHBob25lIEphY2sgTW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYy9MaW5lIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljL0xpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAorCUFMQ19QSU5fTU9ERSgiTWljL0xpbmUgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAogCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludGVybmFsIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTI0MjAsNiArMjgyMiwyMiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfYWNlcl9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweDA4LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDA4LCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKKwlBTENfUElOX01PREUoIk1pYyBKYWNrIE1vZGUiLCAweDEyLCBBTENfUElOX0RJUl9JTiksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDIsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJMaW5lIEphY2sgTW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBjYXB0dXJlIG1peGVyIGVsZW1lbnRzICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYwX2NhcHR1cmVfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDQsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTI2MjksNTIgKzMwNDcsMzI3IEBACiAJezB4MTAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKIAkvKiBIZWFkcGhvbmUvTGluZS1vdXQgamFjayBjb25uZWN0cyB0byBMaW5lMSBwaW47IG1ha2UgaXQgYW4gb3V0cHV0ICovCiAJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCi0gICAgICAgIC8qIE1pYy9MaW5lLWluIGphY2sgaXMgY29ubmVjdGVkIHRvIG1pYzEgcGluLCBzbyBtYWtlIGl0IGFuIGlucHV0ICovCi0gICAgICAgIHsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCi0gICAgICAgIC8qIEVuc3VyZSBhbGwgb3RoZXIgdW51c2VkIHBpbnMgYXJlIGRpc2FibGVkIGFuZCBtdXRlZC4KLQkgKiBOb3RlOiB0cnlpbmcgdG8gc2V0IHdpZGdldCAweDE1IHRvIGFueXRoaW5nIGJsb2NrcyBhbGwgYXVkaW8KLQkgKiBvdXRwdXQgZm9yIHNvbWUgcmVhc29uLCBzbyBqdXN0IGxlYXZlIHRoYXQgYXQgdGhlIGRlZmF1bHQuCi0JICovCi0gICAgICAgIHsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAotICAgICAgICB7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCS8qIE1pYy9MaW5lLWluIGphY2sgaXMgY29ubmVjdGVkIHRvIG1pYzEgcGluLCBzbyBtYWtlIGl0IGFuIGlucHV0ICovCisJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwkvKiBFbnN1cmUgYWxsIG90aGVyIHVudXNlZCBwaW5zIGFyZSBkaXNhYmxlZCBhbmQgbXV0ZWQuICovCisJezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKLSAgICAgICAgezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAotICAgICAgICB7MHgxMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotICAgICAgICAvKiBEaXNhYmxlIGRpZ2l0YWwgKFNQRElGKSBwaW5zICovCi0gICAgICAgIHsweDAzLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCi0gICAgICAgIHsweDA2LCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAogCi0gICAgICAgIC8qIFN0YXJ0IHdpdGggbWl4ZXIgb3V0cHV0cyBtdXRlZCAqLwotICAgICAgICB7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKLSAgICAgICAgezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0gICAgICAgIHsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIERpc2FibGUgZGlnaXRhbCAoU1BESUYpIHBpbnMgKi8KKwl7MHgwMywgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsIDB9LAorCXsweDA2LCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCiAKLSAgICAgICAgLyogVW5tdXRlIEhQIHBpbiB3aWRnZXQgYW1wIGxlZnQgYW5kIHJpZ2h0IChubyBlcXVpdiBtaXhlciBjdHJsKSAqLwotICAgICAgICB7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAotICAgICAgICAvKiBVbm11dGUgTGluZTEgcGluIHdpZGdldCBhbXAgbGVmdCBhbmQgcmlnaHQgKG5vIGVxdWl2IG1peGVyIGN0cmwpICovCi0gICAgICAgIHsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCi0JLyogVW5tdXRlIHBpbiB3aWRnZXQgdXNlZCBmb3IgTGluZS1pbiAobm8gZXF1aXYgbWl4ZXIgY3RybCkgKi8KLSAgICAgICAgezB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCS8qIEVuc3VyZSBMaW5lMSBwaW4gd2lkZ2V0IHRha2VzIGl0cyBpbnB1dCBmcm9tIHRoZSBPVVQxIHN1bSBidXMgCisJICogd2hlbiBhY3RpbmcgYXMgYW4gb3V0cHV0LgorCSAqLworCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCiAKLSAgICAgICAgLyogTXV0ZSBjYXB0dXJlIGFtcCBsZWZ0IGFuZCByaWdodCAqLwotICAgICAgICB7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAotICAgICAgICAvKiBTZXQgQURDIGNvbm5lY3Rpb24gc2VsZWN0IHRvIGxpbmUgaW4gKG9uIG1pYzEgcGluKSAqLwotICAgICAgICB7MHgwNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIFN0YXJ0IHdpdGggb3V0cHV0IHN1bSB3aWRnZXRzIG11dGVkIGFuZCB0aGVpciBvdXRwdXQgZ2FpbnMgYXQgbWluICovCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAKLSAgICAgICAgLyogTXV0ZSBhbGwgaW5wdXRzIHRvIG1peGVyIHdpZGdldCAoZXZlbiB1bmNvbm5lY3RlZCBvbmVzKSAqLwotICAgICAgICB7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBtaWMxIHBpbiAqLwotICAgICAgICB7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LCAvKiBtaWMyIHBpbiAqLwotICAgICAgICB7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LCAvKiBsaW5lMSBwaW4gKi8KLSAgICAgICAgezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwgLyogbGluZTIgcGluICovCi0gICAgICAgIHsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sIC8qIENEIHBpbiAqLwotICAgICAgICB7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNSl9LCAvKiBCZWVwLWdlbiBwaW4gKi8KLSAgICAgICAgezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDYpfSwgLyogTGluZS1vdXQgcGluICovCi0gICAgICAgIHsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg3KX0sIC8qIEhQLXBpbiBwaW4gKi8KKwkvKiBVbm11dGUgSFAgcGluIHdpZGdldCBhbXAgbGVmdCBhbmQgcmlnaHQgKG5vIGVxdWl2IG1peGVyIGN0cmwpICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBVbm11dGUgTGluZTEgcGluIHdpZGdldCBvdXRwdXQgYnVmZmVyIHNpbmNlIGl0IHN0YXJ0cyBhcyBhbiBvdXRwdXQuCisJICogSWYgdGhlIHBpbiBtb2RlIGlzIGNoYW5nZWQgYnkgdGhlIHVzZXIgdGhlIHBpbiBtb2RlIGNvbnRyb2wgd2lsbAorCSAqIHRha2UgY2FyZSBvZiBlbmFibGluZyB0aGUgcGluJ3MgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMgYXMgbmVlZGVkLgorCSAqIFRoZXJlZm9yZSB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIHRoZSBpbnB1dCBidWZmZXIgYXQgdGhpcworCSAqIHN0YWdlLgorCSAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJLyogVW5tdXRlIGlucHV0IGJ1ZmZlciBvZiBwaW4gd2lkZ2V0IHVzZWQgZm9yIExpbmUtaW4gKG5vIGVxdWl2IAorCSAqIG1peGVyIGN0cmwpCisJICovCisJezB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCisJLyogTXV0ZSBjYXB0dXJlIGFtcCBsZWZ0IGFuZCByaWdodCAqLworCXsweDA0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJLyogU2V0IEFEQyBjb25uZWN0aW9uIHNlbGVjdCB0byBtYXRjaCBkZWZhdWx0IG1peGVyIHNldHRpbmcgLSBsaW5lIAorCSAqIGluIChvbiBtaWMxIHBpbikKKwkgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogRG8gdGhlIHNhbWUgZm9yIHRoZSBzZWNvbmQgQURDOiBtdXRlIGNhcHR1cmUgaW5wdXQgYW1wIGFuZAorCSAqIHNldCBBREMgY29ubmVjdGlvbiB0byBsaW5lIGluIChvbiBtaWMxIHBpbikKKwkgKi8KKwl7MHgwNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBNdXRlIGFsbCBpbnB1dHMgdG8gbWl4ZXIgd2lkZ2V0IChldmVuIHVuY29ubmVjdGVkIG9uZXMpICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwgLyogbWljMSBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LCAvKiBtaWMyIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sIC8qIGxpbmUxIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sIC8qIGxpbmUyIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sIC8qIENEIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg1KX0sIC8qIEJlZXAtZ2VuIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg2KX0sIC8qIExpbmUtb3V0IHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg3KX0sIC8qIEhQLXBpbiBwaW4gKi8KIAogCXsgfQogfTsKIAorLyogSW5pdGlhbGlzYXRpb24gc2VxdWVuY2UgZm9yIEFMQzI2MCBhcyBjb25maWd1cmVkIGluIEFjZXIgVHJhdmVsTWF0ZSBhbmQKKyAqIHNpbWlsYXIgbGFwdG9wcyAoYWRhcHRlZCBmcm9tIEZ1aml0c3UgaW5pdCB2ZXJicykuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX2FjZXJfaW5pdF92ZXJic1tdID0geworCS8qIE9uIFRyYXZlbE1hdGUgbGFwdG9wcywgR1BJTyAwIGVuYWJsZXMgdGhlIGludGVybmFsIHNwZWFrZXIgYW5kCisJICogdGhlIGhlYWRwaG9uZSBqYWNrLiAgVHVybiB0aGlzIG9uIGFuZCByZWx5IG9uIHRoZSBzdGFuZGFyZCBtdXRlCisJICogbWV0aG9kcyB3aGVuZXZlciB0aGUgdXNlciB3YW50cyB0byB0dXJuIHRoZXNlIG91dHB1dHMgb2ZmLgorCSAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDF9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMX0sCisJLyogSW50ZXJuYWwgc3BlYWtlci9IZWFkcGhvbmUgamFjayBpcyBjb25uZWN0ZWQgdG8gTGluZS1vdXQgcGluICovCisJezB4MGYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwkvKiBJbnRlcm5hbCBtaWNyb3Bob25lL01pYyBqYWNrIGlzIGNvbm5lY3RlZCB0byBNaWMxIHBpbiAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGNTB9LAorCS8qIExpbmUgSW4gamFjayBpcyBjb25uZWN0ZWQgdG8gTGluZTEgcGluICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwkvKiBFbnN1cmUgYWxsIG90aGVyIHVudXNlZCBwaW5zIGFyZSBkaXNhYmxlZCBhbmQgbXV0ZWQuICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwkvKiBEaXNhYmxlIGRpZ2l0YWwgKFNQRElGKSBwaW5zICovCisJezB4MDMsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLCAwfSwKKwl7MHgwNiwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsIDB9LAorCisJLyogRW5zdXJlIE1pYzEgYW5kIExpbmUxIHBpbiB3aWRnZXRzIHRha2UgaW5wdXQgZnJvbSB0aGUgT1VUMSBzdW0gCisJICogYnVzIHdoZW4gYWN0aW5nIGFzIG91dHB1dHMuCisJICovCisJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCisJLyogU3RhcnQgd2l0aCBvdXRwdXQgc3VtIHdpZGdldHMgbXV0ZWQgYW5kIHRoZWlyIG91dHB1dCBnYWlucyBhdCBtaW4gKi8KKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKworCS8qIFVubXV0ZSBMaW5lLW91dCBwaW4gd2lkZ2V0IGFtcCBsZWZ0IGFuZCByaWdodCAobm8gZXF1aXYgbWl4ZXIgY3RybCkgKi8KKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFVubXV0ZSBNaWMxIGFuZCBMaW5lMSBwaW4gd2lkZ2V0IGlucHV0IGJ1ZmZlcnMgc2luY2UgdGhleSBzdGFydCBhcworCSAqIGlucHV0cy4gSWYgdGhlIHBpbiBtb2RlIGlzIGNoYW5nZWQgYnkgdGhlIHVzZXIgdGhlIHBpbiBtb2RlIGNvbnRyb2wKKwkgKiB3aWxsIHRha2UgY2FyZSBvZiBlbmFibGluZyB0aGUgcGluJ3MgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMgYXMgbmVlZGVkLgorCSAqIFRoZXJlZm9yZSB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIHRoZSBpbnB1dCBidWZmZXIgYXQgdGhpcworCSAqIHN0YWdlLgorCSAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCisKKwkvKiBNdXRlIGNhcHR1cmUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCisJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwkvKiBTZXQgQURDIGNvbm5lY3Rpb24gc2VsZWN0IHRvIG1hdGNoIGRlZmF1bHQgbWl4ZXIgc2V0dGluZyAtIG1pYworCSAqIChvbiBtaWMxIHBpbikKKwkgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogRG8gc2ltaWxhciB3aXRoIHRoZSBzZWNvbmQgQURDOiBtdXRlIGNhcHR1cmUgaW5wdXQgYW1wIGFuZAorCSAqIHNldCBBREMgY29ubmVjdGlvbiB0byBsaW5lIChvbiBsaW5lMSBwaW4pCisJICovCisJezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDJ9LAorCisJLyogTXV0ZSBhbGwgaW5wdXRzIHRvIG1peGVyIHdpZGdldCAoZXZlbiB1bmNvbm5lY3RlZCBvbmVzKSAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sIC8qIG1pYzEgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwgLyogbWljMiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LCAvKiBsaW5lMSBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMyl9LCAvKiBsaW5lMiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LCAvKiBDRCBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNSl9LCAvKiBCZWVwLWdlbiBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNil9LCAvKiBMaW5lLW91dCBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNyl9LCAvKiBIUC1waW4gcGluICovCisKKwl7IH0KK307CisKKy8qIFRlc3QgY29uZmlndXJhdGlvbiBmb3IgZGVidWdnaW5nLCBtb2RlbGxlZCBhZnRlciB0aGUgQUxDODgwIHRlc3QKKyAqIGNvbmZpZ3VyYXRpb24uCisgKi8KKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHCitzdGF0aWMgaGRhX25pZF90IGFsYzI2MF90ZXN0X2RhY19uaWRzWzFdID0geworCTB4MDIsCit9Oworc3RhdGljIGhkYV9uaWRfdCBhbGMyNjBfdGVzdF9hZGNfbmlkc1syXSA9IHsKKwkweDA0LCAweDA1LAorfTsKKy8qIFRoaXMgaXMgYSBiaXQgbWVzc3kgc2luY2UgdGhlIHR3byBpbnB1dCBtdXhlcyBpbiB0aGUgQUxDMjYwIGhhdmUgc2xpZ2h0CisgKiB2YXJpYXRpb25zIGluIHRoZWlyIHNpZ25hbCBhc3NpZ25tZW50cy4gIFRoZSBpZGVhbCB3YXkgdG8gZGVhbCB3aXRoIHRoaXMKKyAqIGlzIHRvIGV4dGVuZCBhbGNfc3BlYy5pbnB1dF9tdXggdG8gYWxsb3cgYSBkaWZmZXJlbnQgaW5wdXQgTVVYIGZvciBlYWNoCisgKiBBREMuICBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSB0ZXN0IG1vZGVsIGl0J3Mgc3VmZmljaWVudCB0byBqdXN0IGxpc3QKKyAqIGJvdGggb3B0aW9ucyBmb3IgYWZmZWN0ZWQgc2lnbmFsIGluZGljZXMuICBUaGUgc2VwYXJhdGUgaW5wdXQgbXV4CisgKiBmdW5jdGlvbmFsaXR5IG9ubHkgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBpZiBhIG1vZGVsIGNvbWVzIGFsb25nIHdoaWNoCisgKiBhY3R1YWxseSB1c2VzIHNpZ25hbHMgMHg1LCAweDYgYW5kIDB4NyBmb3Igc29tZXRoaW5nIHdoaWNoIG1ha2VzIHNlbnNlIHRvCisgKiByZWNvcmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBhbGMyNjBfdGVzdF9jYXB0dXJlX3NvdXJjZSA9IHsKKwkubnVtX2l0ZW1zID0gOCwKKwkuaXRlbXMgPSB7CisJCXsgIk1JQzEgcGluIiwgMHgwIH0sCisJCXsgIk1JQzIgcGluIiwgMHgxIH0sCisJCXsgIkxJTkUxIHBpbiIsIDB4MiB9LAorCQl7ICJMSU5FMiBwaW4iLCAweDMgfSwKKwkJeyAiQ0QgcGluIiwgMHg0IH0sCisJCXsgIkxJTkUtT1VUIHBpbiAoY2FwMSksIE1peGVyIChjYXAyKSIsIDB4NSB9LAorCQl7ICJIUC1PVVQgcGluIChjYXAxKSwgTElORS1PVVQgcGluIChjYXAyKSIsIDB4NiB9LAorCQl7ICJIUC1PVVQgcGluIChjYXAyIG9ubHkpIiwgMHg3IH0sCisgICAgICAgIH0sCit9Oworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF90ZXN0X21peGVyW10gPSB7CisJLyogT3V0cHV0IGRyaXZlciB3aWRnZXRzICovCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MGEsIDEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJNb25vIFBsYXliYWNrIFN3aXRjaCIsIDB4MGEsIDEsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTE9VVDIgUGxheWJhY2sgVm9sdW1lIiwgMHgwOSwgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJMT1VUMiBQbGF5YmFjayBTd2l0Y2giLCAweDA5LCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxPVVQxIFBsYXliYWNrIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiTE9VVDEgUGxheWJhY2sgU3dpdGNoIiwgMHgwOCwgMiwgSERBX0lOUFVUKSwKKworCS8qIE1vZGVzIGZvciByZXRhc2tpbmcgcGluIHdpZGdldHMgKi8KKwlBTENfUElOX01PREUoIkhQLU9VVCBwaW4gbW9kZSIsIDB4MTAsIEFMQ19QSU5fRElSX0lOT1VUKSwKKwlBTENfUElOX01PREUoIkxJTkUtT1VUIHBpbiBtb2RlIiwgMHgwZiwgQUxDX1BJTl9ESVJfSU5PVVQpLAorCUFMQ19QSU5fTU9ERSgiTElORTIgcGluIG1vZGUiLCAweDE1LCBBTENfUElOX0RJUl9JTk9VVCksCisJQUxDX1BJTl9NT0RFKCJMSU5FMSBwaW4gbW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKKwlBTENfUElOX01PREUoIk1JQzIgcGluIG1vZGUiLCAweDEzLCBBTENfUElOX0RJUl9JTk9VVCksCisJQUxDX1BJTl9NT0RFKCJNSUMxIHBpbiBtb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU5PVVQpLAorCisJLyogTG9vcGJhY2sgbWl4ZXIgY29udHJvbHMgKi8KKwlIREFfQ09ERUNfVk9MVU1FKCJNSUMxIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1JQzEgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNSUMyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDEsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIk1JQzIgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMSU5FMSBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMSU5FMSBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxJTkUyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDMsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkxJTkUyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDMsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJMSU5FLU9VVCBsb29wYmFjayBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA2LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMSU5FLU9VVCBsb29wYmFjayBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA2LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkhQLU9VVCBsb29wYmFjayBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDcsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkhQLU9VVCBsb29wYmFjayBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDcsIEhEQV9JTlBVVCksCisKKwkvKiBDb250cm9scyBmb3IgR1BJTyBwaW5zLCBhc3N1bWluZyB0aGV5IGFyZSBjb25maWd1cmVkIGFzIG91dHB1dHMgKi8KKwlBTENfR1BJT19EQVRBX1NXSVRDSCgiR1BJTyBwaW4gMCIsIDB4MDEsIDB4MDEpLAorCUFMQ19HUElPX0RBVEFfU1dJVENIKCJHUElPIHBpbiAxIiwgMHgwMSwgMHgwMiksCisJQUxDX0dQSU9fREFUQV9TV0lUQ0goIkdQSU8gcGluIDIiLCAweDAxLCAweDA0KSwKKwlBTENfR1BJT19EQVRBX1NXSVRDSCgiR1BJTyBwaW4gMyIsIDB4MDEsIDB4MDgpLAorCisJLyogU3dpdGNoZXMgdG8gYWxsb3cgdGhlIGRpZ2l0YWwgSU8gcGlucyB0byBiZSBlbmFibGVkLiAgVGhlIGRhdGFzaGVldAorCSAqIGlzIGFtYmlnaW91cyBhcyB0byB3aGljaCBOSUQgaXMgd2hpY2g7IHRlc3Rpbmcgb24gbGFwdG9wcyB3aGljaAorCSAqIG1ha2UgdGhpcyBvdXRwdXQgYXZhaWxhYmxlIHNob3VsZCBwcm92aWRlIGNsYXJpZmljYXRpb24uIAorCSAqLworCUFMQ19TUERJRl9DVFJMX1NXSVRDSCgiU1BESUYgUGxheWJhY2sgU3dpdGNoIiwgMHgwMywgMHgwMSksCisJQUxDX1NQRElGX0NUUkxfU1dJVENIKCJTUERJRiBDYXB0dXJlIFN3aXRjaCIsIDB4MDYsIDB4MDEpLAorCisJeyB9IC8qIGVuZCAqLworfTsKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYwX3Rlc3RfaW5pdF92ZXJic1tdID0geworCS8qIEVuYWJsZSBhbGwgR1BJT3MgYXMgb3V0cHV0cyB3aXRoIGFuIGluaXRpYWwgdmFsdWUgb2YgMCAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwZn0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMH0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwZn0sCisKKwkvKiBFbmFibGUgcmV0YXNraW5nIHBpbnMgYXMgb3V0cHV0LCBpbml0aWFsbHkgd2l0aG91dCBwb3dlciBhbXAgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgwZiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKworCS8qIERpc2FibGUgZGlnaXRhbCAoU1BESUYpIHBpbnMgaW5pdGlhbGx5LCBidXQgdXNlcnMgY2FuIGVuYWJsZQorCSAqIHRoZW0gdmlhIGEgbWl4ZXIgc3dpdGNoLiAgSW4gdGhlIGNhc2Ugb2YgU1BESUYtb3V0LCB0aGlzIGluaXR2ZXJiCisJICogcGF5bG9hZCBhbHNvIHNldHMgdGhlIGdlbmVyYXRpb24gdG8gMCwgb3V0cHV0IHRvIGJlIGluICJjb25zdW1lciIKKwkgKiBQQ00gZm9ybWF0LCBjb3B5cmlnaHQgYXNzZXJ0ZWQsIG5vIHByZS1lbXBoYXNpcyBhbmQgbm8gdmFsaWRpdHkKKwkgKiBjb250cm9sLgorCSAqLworCXsweDAzLCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCisJezB4MDYsIEFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLCAwfSwKKworCS8qIEVuc3VyZSBtaWMxLCBtaWMyLCBsaW5lMSBhbmQgbGluZTIgcGluIHdpZGdldHMgdGFrZSBpbnB1dCBmcm9tIHRoZSAKKwkgKiBPVVQxIHN1bSBidXMgd2hlbiBhY3RpbmcgYXMgYW4gb3V0cHV0LgorCSAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisJezB4MGMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB9LAorCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisKKwkvKiBTdGFydCB3aXRoIG91dHB1dCBzdW0gd2lkZ2V0cyBtdXRlZCBhbmQgdGhlaXIgb3V0cHV0IGdhaW5zIGF0IG1pbiAqLworCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCisJLyogVW5tdXRlIHJldGFza2luZyBwaW4gd2lkZ2V0IG91dHB1dCBidWZmZXJzIHNpbmNlIHRoZSBkZWZhdWx0CisJICogc3RhdGUgYXBwZWFycyB0byBiZSBvdXRwdXQuICBBcyB0aGUgcGluIG1vZGUgaXMgY2hhbmdlZCBieSB0aGUKKwkgKiB1c2VyIHRoZSBwaW4gbW9kZSBjb250cm9sIHdpbGwgdGFrZSBjYXJlIG9mIGVuYWJsaW5nIHRoZSBwaW4ncworCSAqIGlucHV0L291dHB1dCBidWZmZXJzIGFzIG5lZWRlZC4KKwkgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisJezB4MTIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBBbHNvIHVubXV0ZSB0aGUgbW9uby1vdXQgcGluIHdpZGdldCAqLworCXsweDExLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sCisKKwkvKiBNdXRlIGNhcHR1cmUgYW1wIGxlZnQgYW5kIHJpZ2h0ICovCisJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwkvKiBTZXQgQURDIGNvbm5lY3Rpb24gc2VsZWN0IHRvIG1hdGNoIGRlZmF1bHQgbWl4ZXIgc2V0dGluZyAobWljMQorCSAqIHBpbikKKwkgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogRG8gdGhlIHNhbWUgZm9yIHRoZSBzZWNvbmQgQURDOiBtdXRlIGNhcHR1cmUgaW5wdXQgYW1wIGFuZAorCSAqIHNldCBBREMgY29ubmVjdGlvbiB0byBtaWMxIHBpbgorCSAqLworCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKworCS8qIE11dGUgYWxsIGlucHV0cyB0byBtaXhlciB3aWRnZXQgKGV2ZW4gdW5jb25uZWN0ZWQgb25lcykgKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBtaWMxIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sIC8qIG1pYzIgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDIpfSwgLyogbGluZTEgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDMpfSwgLyogbGluZTIgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwgLyogQ0QgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDUpfSwgLyogQmVlcC1nZW4gcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDYpfSwgLyogTGluZS1vdXQgcGluICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDcpfSwgLyogSFAtcGluIHBpbiAqLworCisJeyB9Cit9OworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gYWxjMjYwX3BjbV9hbmFsb2dfcGxheWJhY2sgPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLApAQCAtMjc0NCw3ICszNDM3LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JbmlkID0gY2ZnLT5zcGVha2VyX3BpbjsKKwluaWQgPSBjZmctPnNwZWFrZXJfcGluc1swXTsKIAlpZiAobmlkKSB7CiAJCWVyciA9IGFsYzI2MF9hZGRfcGxheWJhY2tfY29udHJvbHMoc3BlYywgbmlkLCAiU3BlYWtlciIpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTI4MTcsNyArMzUxMCw3IEBACiAJaWYgKG5pZCkKIAkJYWxjMjYwX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIFBJTl9PVVQsIDApOwogCQotCW5pZCA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW47CisJbmlkID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07CiAJaWYgKG5pZCkKIAkJYWxjMjYwX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIFBJTl9PVVQsIDApOwogCkBAIC0yOTMyLDEzICszNjI1LDExIEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIGluaXQgY2FsbGJhY2sgZm9yIGF1dG8tY29uZmlndXJhdGlvbiBtb2RlbCAtLSBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGluaXQgKi8KLXN0YXRpYyBpbnQgYWxjMjYwX2F1dG9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKKy8qIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIGF1dG8tY29uZmlndXJhdGlvbiBtb2RlbCAqLworc3RhdGljIHZvaWQgYWxjMjYwX2F1dG9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlhbGNfaW5pdChjb2RlYyk7CiAJYWxjMjYwX2F1dG9faW5pdF9tdWx0aV9vdXQoY29kZWMpOwogCWFsYzI2MF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTI5NDgsNiArMzYzOSw4IEBACiAJeyAubW9kZWxuYW1lID0gImJhc2ljIiwgLmNvbmZpZyA9IEFMQzI2MF9CQVNJQyB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNGQsIC5wY2lfc3ViZGV2aWNlID0gMHg4MWJiLAogCSAgLmNvbmZpZyA9IEFMQzI2MF9CQVNJQyB9LCAvKiBTb255IFZBSU8gKi8KKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxNTJkLCAucGNpX3N1YmRldmljZSA9IDB4MDcyOSwKKwkgIC5jb25maWcgPSBBTEMyNjBfQkFTSUMgfSwgLyogQ1RMIFRyYXZlbCBNYXN0ZXIgVTU1M1cgKi8KIAl7IC5tb2RlbG5hbWUgPSAiaHAiLCAuY29uZmlnID0gQUxDMjYwX0hQIH0sCiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDMwMTAsIC5jb25maWcgPSBBTEMyNjBfSFAgfSwKIAl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDNjLCAucGNpX3N1YmRldmljZSA9IDB4MzAxMSwgLmNvbmZpZyA9IEFMQzI2MF9IUCB9LApAQCAtMjk1OCw2ICszNjUxLDExIEBACiAJeyAucGNpX3N1YnZlbmRvciA9IDB4MTAzYywgLnBjaV9zdWJkZXZpY2UgPSAweDMwMTYsIC5jb25maWcgPSBBTEMyNjBfSFAgfSwKIAl7IC5tb2RlbG5hbWUgPSAiZnVqaXRzdSIsIC5jb25maWcgPSBBTEMyNjBfRlVKSVRTVV9TNzAyWCB9LAogCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwY2YsIC5wY2lfc3ViZGV2aWNlID0gMHgxMzI2LCAuY29uZmlnID0gQUxDMjYwX0ZVSklUU1VfUzcwMlggfSwKKwl7IC5tb2RlbG5hbWUgPSAiYWNlciIsIC5jb25maWcgPSBBTEMyNjBfQUNFUiB9LAorCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwMjUsIC5wY2lfc3ViZGV2aWNlID0gMHgwMDhmLCAuY29uZmlnID0gQUxDMjYwX0FDRVIgfSwKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHCisJeyAubW9kZWxuYW1lID0gInRlc3QiLCAuY29uZmlnID0gQUxDMjYwX1RFU1QgfSwKKyNlbmRpZgogCXsgLm1vZGVsbmFtZSA9ICJhdXRvIiwgLmNvbmZpZyA9IEFMQzI2MF9BVVRPIH0sCiAJe30KIH07CkBAIC0zMDA5LDEyICszNzA3LDM4IEBACiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfZnVqaXRzdV9pbml0X3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYwX2RhY19uaWRzKSwKIAkJLmRhY19uaWRzID0gYWxjMjYwX2RhY19uaWRzLAotCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjBfYWRjX25pZHMpLAotCQkuYWRjX25pZHMgPSBhbGMyNjBfYWRjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2MF9kdWFsX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjMjYwX2R1YWxfYWRjX25pZHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2MF9mdWppdHN1X2NhcHR1cmVfc291cmNlLAogCX0sCisJW0FMQzI2MF9BQ0VSXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjYwX2FjZXJfbWl4ZXIsCisJCQkgICAgYWxjMjYwX2NhcHR1cmVfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzI2MF9hY2VyX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjBfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjBfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2MF9kdWFsX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjMjYwX2R1YWxfYWRjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzI2MF9hY2VyX2NhcHR1cmVfc291cmNlLAorCX0sCisjaWZkZWYgQ09ORklHX1NORF9ERUJVRworCVtBTEMyNjBfVEVTVF0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2MF90ZXN0X21peGVyLAorCQkJICAgIGFsYzI2MF9jYXB0dXJlX21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfdGVzdF9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYwX3Rlc3RfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjBfdGVzdF9kYWNfbmlkcywKKwkJLm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjYwX3Rlc3RfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGMyNjBfdGVzdF9hZGNfbmlkcywKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2MF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjBfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjMjYwX3Rlc3RfY2FwdHVyZV9zb3VyY2UsCisJfSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBwYXRjaF9hbGMyNjAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0zMDU5LDcgKzM3ODMsNyBAQAogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEMyNjBfQVVUTykKLQkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWxjMjYwX2F1dG9faW5pdDsKKwkJc3BlYy0+aW5pdF9ob29rID0gYWxjMjYwX2F1dG9faW5pdDsKIAogCXJldHVybiAwOwogfQpAQCAtMzUzNCwxNCArNDI1OCwxMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIGluaXQgY2FsbGJhY2sgZm9yIGF1dG8tY29uZmlndXJhdGlvbiBtb2RlbCAtLSBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGluaXQgKi8KLXN0YXRpYyBpbnQgYWxjODgyX2F1dG9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKKy8qIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gZm9yIGF1dG8tY29uZmlndXJhdGlvbiBtb2RlbCAqLworc3RhdGljIHZvaWQgYWxjODgyX2F1dG9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlhbGNfaW5pdChjb2RlYyk7CiAJYWxjODgyX2F1dG9faW5pdF9tdWx0aV9vdXQoY29kZWMpOwogCWFsYzg4Ml9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKIAlhbGM4ODJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zNjA4LDcgKzQzMzAsNyBAQAogCiAJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4ODJfQVVUTykKLQkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWxjODgyX2F1dG9faW5pdDsKKwkJc3BlYy0+aW5pdF9ob29rID0gYWxjODgyX2F1dG9faW5pdDsKIAogCXJldHVybiAwOwogfQpAQCAtMzY0NCwxOSArNDM2Niw5IEBACiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAyLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX01PTk8oIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgMHgxNiwgMiwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCi0JewotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAotCQkuY291bnQgPSAxLAotCQkuaW5mbyA9IGFsYzg4Ml9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gYWxjODgyX211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGFsYzg4Ml9tdXhfZW51bV9wdXQsCi0JfSwKIAl7IH0gLyogZW5kICovCi19OwkJCQotCQorfTsKKwogI2RlZmluZSBhbGMyNjJfY2FwdHVyZV9taXhlcgkJYWxjODgyX2NhcHR1cmVfbWl4ZXIKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfYWx0X21peGVyCWFsYzg4Ml9jYXB0dXJlX2FsdF9taXhlcgogCkBAIC0zNzM5LDYgKzQ0NTEsMTI5IEBACiAJeyB9CiB9OwogCisvKgorICogZnVqaXRzdSBtb2RlbAorICogIDB4MTQgPSBoZWFkcGhvbmUvc3BkaWYtb3V0LCAweDE1ID0gaW50ZXJuYWwgc3BlYWtlcgorICovCisKKyNkZWZpbmUgQUxDX0hQX0VWRU5UCTB4MzcKKworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjJfZnVqaXRzdV91bnNvbF92ZXJic1tdID0geworCXsweDE0LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQUxDX0hQX0VWRU5UfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYyX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2UgPSB7CisJLm51bV9pdGVtcyA9IDIsCisJLml0ZW1zID0geworCQl7ICJNaWMiLCAweDAgfSwKKwkJeyAiQ0QiLCAweDQgfSwKKwl9LAorfTsKKworLyogbXV0ZS91bm11dGUgaW50ZXJuYWwgc3BlYWtlciBhY2NvcmRpbmcgdG8gdGhlIGhwIGphY2sgYW5kIG11dGUgc3RhdGUgKi8KK3N0YXRpYyB2b2lkIGFsYzI2Ml9mdWppdHN1X2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgZm9yY2UpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IG11dGU7CisKKwlpZiAoZm9yY2UgfHwgISBzcGVjLT5zZW5zZV91cGRhdGVkKSB7CisJCXVuc2lnbmVkIGludCBwcmVzZW50OworCQkvKiBuZWVkIHRvIGV4ZWN1dGUgYW5kIHN5bmMgYXQgZmlyc3QgKi8KKwkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOworCQlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE0LCAwLAorCQkJCSAgICAJIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCk7CisJCXNwZWMtPmphY2tfcHJlc2VudCA9IChwcmVzZW50ICYgMHg4MDAwMDAwMCkgIT0gMDsKKwkJc3BlYy0+c2Vuc2VfdXBkYXRlZCA9IDE7CisJfQorCWlmIChzcGVjLT5qYWNrX3ByZXNlbnQpIHsKKwkJLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyICovCisJCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgxNSwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkJIDB4ODAsIDB4ODApOworCQlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTUsIDEsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSAweDgwLCAweDgwKTsKKwl9IGVsc2UgeworCQkvKiB1bm11dGUgaW50ZXJuYWwgc3BlYWtlciBpZiBuZWNlc3NhcnkgKi8KKwkJbXV0ZSA9IHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIDB4MTQsIDAsIEhEQV9PVVRQVVQsIDApOworCQlzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTUsIDAsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSAweDgwLCBtdXRlICYgMHg4MCk7CisJCW11dGUgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCAweDE0LCAxLCBIREFfT1VUUFVULCAwKTsKKwkJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE1LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCQkgMHg4MCwgbXV0ZSAmIDB4ODApOworCX0KK30KKworLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIEhQIGphY2sgc2Vuc2luZyAqLworc3RhdGljIHZvaWQgYWxjMjYyX2Z1aml0c3VfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCByZXMpCit7CisJaWYgKChyZXMgPj4gMjYpICE9IEFMQ19IUF9FVkVOVCkKKwkJcmV0dXJuOworCWFsYzI2Ml9mdWppdHN1X2F1dG9tdXRlKGNvZGVjLCAxKTsKK30KKworLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MGMgYW5kIDB4MGQgKi8KK3N0YXRpYyBpbnQgYWxjMjYyX2Z1aml0c3VfbWFzdGVyX3ZvbF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CisJaW50IGNoYW5nZTsKKworCWNoYW5nZSA9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwYywgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkJICAweDdmLCB2YWxwWzBdICYgMHg3Zik7CisJY2hhbmdlIHw9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwYywgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkJICAgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwZCwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg3ZiwgdmFscFswXSAmIDB4N2YpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwZCwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKy8qIGJpbmQgaHAgYW5kIGludGVybmFsIHNwZWFrZXIgbXV0ZSAod2l0aCBwbHVnIGNoZWNrKSAqLworc3RhdGljIGludCBhbGMyNjJfZnVqaXRzdV9tYXN0ZXJfc3dfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOworCWludCBjaGFuZ2U7CisKKwljaGFuZ2UgPSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIDB4MTQsIDAsIEhEQV9PVVRQVVQsIDAsCisJCQkJCSAgMHg4MCwgdmFscFswXSA/IDAgOiAweDgwKTsKKwljaGFuZ2UgfD0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDE0LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCQkgICAweDgwLCB2YWxwWzFdID8gMCA6IDB4ODApOworCWlmIChjaGFuZ2UgfHwgY29kZWMtPmluX3Jlc3VtZSkKKwkJYWxjMjYyX2Z1aml0c3VfYXV0b211dGUoY29kZWMsIGNvZGVjLT5pbl9yZXN1bWUpOworCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjJfZnVqaXRzdV9taXhlcltdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLAorCQkuaW5mbyA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9pbmZvLAorCQkuZ2V0ID0gc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldCwKKwkJLnB1dCA9IGFsYzI2Ml9mdWppdHN1X21hc3Rlcl92b2xfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwYywgMywgMCwgSERBX09VVFBVVCksCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKKwkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCisJCS5wdXQgPSBhbGMyNjJfZnVqaXRzdV9tYXN0ZXJfc3dfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgxNCwgMywgMCwgSERBX09VVFBVVCksCisJfSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwogc3RhdGljIGludCBhbGMyNjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCiB7CkBAIC0zNzU5LDcgKzQ1OTQsNyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQluaWQgPSBjZmctPnNwZWFrZXJfcGluOworCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zWzBdOwogCWlmIChuaWQpIHsKIAkJaWYgKG5pZCA9PSAweDE2KSB7CiAJCQlpZiAoKGVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKQEAgLTM3NjksMTAgKzQ2MDQsNiBAQAogCQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDIsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoISBjZmctPmxpbmVfb3V0X3BpbnNbMF0pCi0JCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsICJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MGMsIDMsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQotCQkJCQlyZXR1cm4gZXJyOwogCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCAiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAogCQkJCQkgICAgICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQogCQkJCXJldHVybiBlcnI7CkBAIC0zNzg5LDEwICs0NjIwLDYgQEAKIAkJCQkJICAgICAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAwLCBIREFfT1VUUFVUKSkpIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewotCQkJaWYgKCEgY2ZnLT5saW5lX291dF9waW5zWzBdKQotCQkJCWlmICgoZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCAiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsCi0JCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MGMsIDMsIDAsIEhEQV9PVVRQVVQpKSkgPCAwKQotCQkJCQlyZXR1cm4gZXJyOwogCQkJaWYgKChlcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCAiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCiAJCQkJCSAgICAgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX09VVFBVVCkpKSA8IDApCiAJCQkJcmV0dXJuIGVycjsKQEAgLTM4ODYsOCArNDcxMyw3IEBACiAJaWYgKChlcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKIAkJCQkJCWFsYzI2Ml9pZ25vcmUpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKCEgc3BlYy0+YXV0b2NmZy5saW5lX291dHMgJiYgISBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluICYmCi0JICAgICEgc3BlYy0+YXV0b2NmZy5ocF9waW4pCisJaWYgKCEgc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLwogCWlmICgoZXJyID0gYWxjMjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKSkgPCAwIHx8CiAJICAgIChlcnIgPSBhbGMyNjJfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCkBAIC0zOTE1LDEzICs0NzQxLDExIEBACiAKIAogLyogaW5pdCBjYWxsYmFjayBmb3IgYXV0by1jb25maWd1cmF0aW9uIG1vZGVsIC0tIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgaW5pdCAqLwotc3RhdGljIGludCBhbGMyNjJfYXV0b19pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIHZvaWQgYWxjMjYyX2F1dG9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlhbGNfaW5pdChjb2RlYyk7CiAJYWxjMjYyX2F1dG9faW5pdF9tdWx0aV9vdXQoY29kZWMpOwogCWFsYzI2Ml9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKIAlhbGMyNjJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zOTI5LDYgKzQ3NTMsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGhkYV9ib2FyZF9jb25maWcgYWxjMjYyX2NmZ190YmxbXSA9IHsKIAl7IC5tb2RlbG5hbWUgPSAiYmFzaWMiLCAuY29uZmlnID0gQUxDMjYyX0JBU0lDIH0sCisJeyAubW9kZWxuYW1lID0gImZ1aml0c3UiLCAuY29uZmlnID0gQUxDMjYyX0ZVSklUU1UgfSwKKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMGNmLCAucGNpX3N1YmRldmljZSA9IDB4MTM5NywgLmNvbmZpZyA9IEFMQzI2Ml9GVUpJVFNVIH0sCiAJeyAubW9kZWxuYW1lID0gImF1dG8iLCAuY29uZmlnID0gQUxDMjYyX0FVVE8gfSwKIAl7fQogfTsKQEAgLTM5NDQsNiArNDc3MCwxOCBAQAogCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYyX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzI2Ml9jYXB0dXJlX3NvdXJjZSwKIAl9LAorCVtBTEMyNjJfRlVKSVRTVV0gPSB7CisJCS5taXhlcnMgPSB7IGFsYzI2Ml9mdWppdHN1X21peGVyIH0sCisJCS5pbml0X3ZlcmJzID0geyBhbGMyNjJfaW5pdF92ZXJicywgYWxjMjYyX2Z1aml0c3VfdW5zb2xfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjJfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjJfZGFjX25pZHMsCisJCS5ocF9uaWQgPSAweDAzLAorCQkuZGlnX291dF9uaWQgPSBBTEMyNjJfRElHT1VUX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzI2Ml9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGMyNjJfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjMjYyX2Z1aml0c3VfY2FwdHVyZV9zb3VyY2UsCisJCS51bnNvbF9ldmVudCA9IGFsYzI2Ml9mdWppdHN1X3Vuc29sX2V2ZW50LAorCX0sCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX2FsYzI2MihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKQEAgLTQwMTcsOCArNDg1NSw4IEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2Ml9BVVRPKQotCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBhbGMyNjJfYXV0b19pbml0OwotCQorCQlzcGVjLT5pbml0X2hvb2sgPSBhbGMyNjJfYXV0b19pbml0OworCQkKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDU0OSw4ICs1Mzg3LDcgQEAKIAlpZiAoKGVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLAogCQkJCQkJYWxjODYxX2lnbm9yZSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyAmJiAhIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW4gJiYKLQkgICAgISBzcGVjLT5hdXRvY2ZnLmhwX3BpbikKKwlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCiAKIAlpZiAoKGVyciA9IGFsYzg2MV9hdXRvX2ZpbGxfZGFjX25pZHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDAgfHwKQEAgLTQ1NzksMTUgKzU0MTYsMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogaW5pdCBjYWxsYmFjayBmb3IgYXV0by1jb25maWd1cmF0aW9uIG1vZGVsIC0tIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgaW5pdCAqLwotc3RhdGljIGludCBhbGM4NjFfYXV0b19pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorLyogYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBmb3IgYXV0by1jb25maWd1cmF0aW9uIG1vZGVsICovCitzdGF0aWMgdm9pZCBhbGM4NjFfYXV0b19pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWFsY19pbml0KGNvZGVjKTsKIAlhbGM4NjFfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7CiAJYWxjODYxX2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCWFsYzg2MV9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKLQotCXJldHVybiAwOwogfQogCiAKQEAgLTQ2ODUsNyArNTUxOSw3IEBACiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg2MV9BVVRPKQotCQljb2RlYy0+cGF0Y2hfb3BzLmluaXQgPSBhbGM4NjFfYXV0b19pbml0OworCQlzcGVjLT5pbml0X2hvb2sgPSBhbGM4NjFfYXV0b19pbml0OwogCQkKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCAzNWMyODIzLi5iNTZjYTQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC01MSw2ICs1MSw3IEBACiAJdW5zaWduZWQgaW50IGxpbmVfc3dpdGNoOiAxOwogCXVuc2lnbmVkIGludCBtaWNfc3dpdGNoOiAxOwogCXVuc2lnbmVkIGludCBhbHRfc3dpdGNoOiAxOworCXVuc2lnbmVkIGludCBocF9kZXRlY3Q6IDE7CiAKIAkvKiBwbGF5YmFjayAqLwogCXN0cnVjdCBoZGFfbXVsdGlfb3V0IG11bHRpb3V0OwpAQCAtMzAzLDYgKzMwNCwxMiBAQAogCSAgLnBjaV9zdWJkZXZpY2UgPSAweDAxMDEsCiAJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQMyB9LAkvKiBJbnRlbCBEOTQ1R1RQIC0gMyBTdGFjayAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCSAgLnBjaV9zdWJkZXZpY2UgPSAweDAyMDIsCisJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQMyB9LAkvKiBJbnRlbCBEOTQ1R05UIC0gMyBTdGFjaywgOTIyMSBBMSAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAorCSAgLnBjaV9zdWJkZXZpY2UgPSAweDBiMGIsCisJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQMyB9LAkvKiBJbnRlbCBEOTQ1UFNOIC0gMyBTdGFjaywgOTIyMSBBMSAqLworCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLAogCSAgLnBjaV9zdWJkZXZpY2UgPSAweDA0MDQsCiAJICAuY29uZmlnID0gU1RBQ19EOTQ1R1RQNSB9LAkvKiBJbnRlbCBEOTQ1R1RQIC0gNSBTdGFjayAqLwogCXsgLnBjaV9zdWJ2ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0lOVEVMLApAQCAtNjkxLDEzICs2OTgsNyBAQAogCQkJCQlBQ19WRVJCX0dFVF9DT05ORUNUX0xJU1QsIDApICYgMHhmZjsKIAl9CiAKLQlpZiAoY2ZnLT5saW5lX291dHMpCi0JCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gY2ZnLT5saW5lX291dHM7Ci0JZWxzZSBpZiAoY2ZnLT5ocF9waW4pIHsKLQkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0gPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIGNmZy0+aHBfcGluLCAwLAotCQkJCQlBQ19WRVJCX0dFVF9DT05ORUNUX0xJU1QsIDApICYgMHhmZjsKLQkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwotCX0KKwlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IGNmZy0+bGluZV9vdXRzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjYsMTEgKzc2NywxMyBAQAogCQlyZXR1cm4gMDsKIAogCXdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW4pOwotCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKQorCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKSB7CiAJCS8qIEVuYWJsZSB1bnNvbGljaXRlZCByZXNwb25zZXMgb24gdGhlIEhQIHdpZGdldCAqLwogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW4sIDAsCiAJCQkJQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAogCQkJCVNUQUNfVU5TT0xfRU5BQkxFKTsKKwkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKKwl9CiAKIAluaWQgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbiwgMCwgQUNfVkVSQl9HRVRfQ09OTkVDVF9MSVNULCAwKSAmIDB4ZmY7CiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKQEAgLTgwNCw5ICs4MDcsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaW50IGluZGV4ID0gLTE7CiAJCWlmIChjZmctPmlucHV0X3BpbnNbaV0pIHsKLQkJCS8qIEVuYWJsZSBhY3RpdmUgcGluIHdpZGdldCBhcyBhbiBpbnB1dCAqLwotCQkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBjZmctPmlucHV0X3BpbnNbaV0sIEFDX1BJTkNUTF9JTl9FTik7Ci0KIAkJCWltdXgtPml0ZW1zW2ltdXgtPm51bV9pdGVtc10ubGFiZWwgPSBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldOwogCiAJCQlmb3IgKGo9MDsgajxzcGVjLT5udW1fbXV4ZXM7IGorKykgewpAQCAtODU1LDEwICs4NTUsOCBAQAogCiAJaWYgKChlcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywgTlVMTCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyAmJiAhIHNwZWMtPmF1dG9jZmcuaHBfcGluKQorCWlmICghIHNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBwaW4gY29uZmlnICovCi0Jc3RhYzkyeHhfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7Ci0Jc3RhYzkyeHhfYXV0b19pbml0X2hwX291dChjb2RlYyk7CiAJaWYgKChlcnIgPSBzdGFjOTJ4eF9hZGRfZHluX291dF9waW5zKGNvZGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHN0YWM5Mnh4X2F1dG9fZmlsbF9kYWNfbmlkcyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpKSA8IDApCkBAIC04NzMsMTQgKzg3MSwxMCBAQAogCWlmIChzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPiAyKQogCQlzcGVjLT5zdXJyX3N3aXRjaCA9IDE7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikgeworCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19vdXQ7Ci0JCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbiwgQUNfUElOQ1RMX09VVF9FTik7Ci0JfQotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pIHsKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gZGlnX2luOwotCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbiwgQUNfUElOQ1RMX0lOX0VOKTsKLQl9CiAKIAlpZiAoc3BlYy0+a2N0bF9hbGxvYykKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBzcGVjLT5rY3RsX2FsbG9jOwpAQCAtODkwLDYgKzg4NCwyOSBAQAogCXJldHVybiAxOwogfQogCisvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZm9yIEhQIG91dHB1dCAqLworc3RhdGljIGludCBzdGFjOTIwMF9hdXRvX2NyZWF0ZV9ocF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgcGluID0gY2ZnLT5ocF9waW47CisJdW5zaWduZWQgaW50IHdpZF9jYXBzOworCisJaWYgKCEgcGluKQorCQlyZXR1cm4gMDsKKworCXdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW4pOworCWlmICh3aWRfY2FwcyAmIEFDX1dDQVBfVU5TT0xfQ0FQKSB7CisJCS8qIEVuYWJsZSB1bnNvbGljaXRlZCByZXNwb25zZXMgb24gdGhlIEhQIHdpZGdldCAqLworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW4sIDAsCisJCQkJQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAorCQkJCVNUQUNfVU5TT0xfRU5BQkxFKTsKKwkJc3BlYy0+aHBfZGV0ZWN0ID0gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzdGFjOTIwMF9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtOTAxLDE0ICs5MTgsMTMgQEAKIAlpZiAoKGVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKSB7CisJaWYgKChlcnIgPSBzdGFjOTIwMF9hdXRvX2NyZWF0ZV9ocF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZykpIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDB4MDU7Ci0JCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbiwgQUNfUElOQ1RMX09VVF9FTik7Ci0JfQotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pIHsKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQogCQlzcGVjLT5kaWdfaW5fbmlkID0gMHgwNDsKLQkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4sIEFDX1BJTkNUTF9JTl9FTik7Ci0JfQogCiAJaWYgKHNwZWMtPmtjdGxfYWxsb2MpCiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gc3BlYy0+a2N0bF9hbGxvYzsKQEAgLTkyMSw5ICs5MzcsMzEgQEAKIHN0YXRpYyBpbnQgc3RhYzkyeHhfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZyA9ICZzcGVjLT5hdXRvY2ZnOworCWludCBpOwogCiAJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgc3BlYy0+aW5pdCk7CiAKKwkvKiBzZXQgdXAgcGlucyAqLworCWlmIChzcGVjLT5ocF9kZXRlY3QpIHsKKwkJLyogZmFrZSBldmVudCB0byBzZXQgdXAgcGlucyAqLworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KGNvZGVjLCBTVEFDX0hQX0VWRU5UIDw8IDI2KTsKKwl9IGVsc2UgeworCQlzdGFjOTJ4eF9hdXRvX2luaXRfbXVsdGlfb3V0KGNvZGVjKTsKKwkJc3RhYzkyeHhfYXV0b19pbml0X2hwX291dChjb2RlYyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKKwkJaWYgKGNmZy0+aW5wdXRfcGluc1tpXSkKKwkJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgY2ZnLT5pbnB1dF9waW5zW2ldLAorCQkJCQkJIEFDX1BJTkNUTF9JTl9FTik7CisJfQorCWlmIChjZmctPmRpZ19vdXRfcGluKQorCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW4sCisJCQkJCSBBQ19QSU5DVExfT1VUX0VOKTsKKwlpZiAoY2ZnLT5kaWdfaW5fcGluKQorCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX2luX3BpbiwKKwkJCQkJIEFDX1BJTkNUTF9JTl9FTik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE0Miw2ICsxMTgwLDE2NiBAQAogfQogCiAvKgorICogU1RBQyA3NjYxKD8pIGhhY2sKKyAqLworCisvKiBzdGF0aWMgY29uZmlnIGZvciBTb255IFZBSU8gRkU1NTBHICovCitzdGF0aWMgaGRhX25pZF90IHZhaW9fZGFjc1tdID0geyAweDIgfTsKKyNkZWZpbmUgVkFJT19IUF9EQUMJMHg1CitzdGF0aWMgaGRhX25pZF90IHZhaW9fYWRjc1tdID0geyAweDggLyosMHg2Ki8gfTsKK3N0YXRpYyBoZGFfbmlkX3QgdmFpb19tdXhfbmlkc1tdID0geyAweDE1IH07CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCB2YWlvX211eCA9IHsKKwkubnVtX2l0ZW1zID0gMiwKKwkuaXRlbXMgPSB7CisJCS8qIHsgIkhQIiwgMHgwIH0sCisJCSAgIHsgIlVua25vd24iLCAweDEgfSwgKi8KKwkJeyAiTWljIiwgMHgyIH0sCisJCXsgIlBDTSIsIDB4MyB9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdmFpb19pbml0W10gPSB7CisJezB4MGEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sIC8qIEhQIDwtIDB4MiAqLworCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwgLyogU3BlYWtlciA8LSAweDUgKi8KKwl7MHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKDwtIDB4MikgKi8KKwl7MHgwZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwgLyogQ0QgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKi8KKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4Mn0sIC8qIG1pYy1zZWw6IDBhLDBkLDE0LDAyICovCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIEhQICovCisJezB4MDUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sIC8qIFNwZWFrZXIgKi8KKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBjYXB0dXJlIHN3L3ZvbCAtPiAweDggKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sIC8qIENELWluIC0+IDB4NiAqLworCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURX0sIC8qIE1pYy1pbiAtPiAweDkgKi8KKwl7fQorfTsKKworLyogYmluZCB2b2x1bWVzIG9mIGJvdGggTklEIDB4MDIgYW5kIDB4MDUgKi8KK3N0YXRpYyBpbnQgdmFpb19tYXN0ZXJfdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CisJaW50IGNoYW5nZTsKKworCWNoYW5nZSA9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwMiwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkJICAweDdmLCB2YWxwWzBdICYgMHg3Zik7CisJY2hhbmdlIHw9IHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwMiwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkJICAgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwNSwgMCwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg3ZiwgdmFscFswXSAmIDB4N2YpOworCXNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgMHgwNSwgMSwgSERBX09VVFBVVCwgMCwKKwkJCQkgMHg3ZiwgdmFscFsxXSAmIDB4N2YpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKy8qIGJpbmQgdm9sdW1lcyBvZiBib3RoIE5JRCAweDAyIGFuZCAweDA1ICovCitzdGF0aWMgaW50IHZhaW9fbWFzdGVyX3N3X3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCWxvbmcgKnZhbHAgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZTsKKwlpbnQgY2hhbmdlOworCisJY2hhbmdlID0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDAyLCAwLCBIREFfT1VUUFVULCAwLAorCQkJCQkgIDB4ODAsIHZhbHBbMF0gJiAweDgwKTsKKwljaGFuZ2UgfD0gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDAyLCAxLCBIREFfT1VUUFVULCAwLAorCQkJCQkgICAweDgwLCB2YWxwWzFdICYgMHg4MCk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDA1LCAwLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCB2YWxwWzBdICYgMHg4MCk7CisJc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCAweDA1LCAxLCBIREFfT1VUUFVULCAwLAorCQkJCSAweDgwLCB2YWxwWzFdICYgMHg4MCk7CisJcmV0dXJuIGNoYW5nZTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHZhaW9fbWl4ZXJbXSA9IHsKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfaW5mbywKKwkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3ZvbHVtZV9nZXQsCisJCS5wdXQgPSB2YWlvX21hc3Rlcl92b2xfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgwMiwgMywgMCwgSERBX09VVFBVVCksCisJfSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKKwkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCisJCS5wdXQgPSB2YWlvX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTCgweDAyLCAzLCAwLCBIREFfT1VUUFVUKSwKKwl9LAorCS8qIEhEQV9DT0RFQ19WT0xVTUUoIkNEIENhcHR1cmUgVm9sdW1lIiwgMHgwNywgMCwgSERBX0lOUFVUKSwgKi8KKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwOSwgMCwgSERBX0lOUFVUKSwKKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCisJCS5jb3VudCA9IDEsCisJCS5pbmZvID0gc3RhYzkyeHhfbXV4X2VudW1faW5mbywKKwkJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwKKwkJLnB1dCA9IHN0YWM5Mnh4X211eF9lbnVtX3B1dCwKKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgc3RhYzc2NjFfcGF0Y2hfb3BzID0geworCS5idWlsZF9jb250cm9scyA9IHN0YWM5Mnh4X2J1aWxkX2NvbnRyb2xzLAorCS5idWlsZF9wY21zID0gc3RhYzkyeHhfYnVpbGRfcGNtcywKKwkuaW5pdCA9IHN0YWM5Mnh4X2luaXQsCisJLmZyZWUgPSBzdGFjOTJ4eF9mcmVlLAorI2lmZGVmIENPTkZJR19QTQorCS5yZXN1bWUgPSBzdGFjOTJ4eF9yZXN1bWUsCisjZW5kaWYKK307CisKK2VudW0geyBTVEFDNzY2MV9WQUlPIH07CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2JvYXJkX2NvbmZpZyBzdGFjNzY2MV9jZmdfdGJsW10gPSB7CisJeyAubW9kZWxuYW1lID0gInZhaW8iLCAuY29uZmlnID0gU1RBQzc2NjFfVkFJTyB9LAorCXsgLnBjaV9zdWJ2ZW5kb3IgPSAweDEwNGQsIC5wY2lfc3ViZGV2aWNlID0gMHg4MWU2LAorCSAgLmNvbmZpZyA9IFNUQUM3NjYxX1ZBSU8gfSwKKwl7IC5wY2lfc3VidmVuZG9yID0gMHgxMDRkLCAucGNpX3N1YmRldmljZSA9IDB4ODFlZiwKKwkgIC5jb25maWcgPSBTVEFDNzY2MV9WQUlPIH0sCisJe30KK307CisKK3N0YXRpYyBpbnQgcGF0Y2hfc3RhYzc2NjEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CisJaW50IGJvYXJkX2NvbmZpZzsKKworCWJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLCBzdGFjNzY2MV9jZmdfdGJsKTsKKwlpZiAoYm9hcmRfY29uZmlnIDwgMCkKKwkJLyogdW5rbm93biBjb25maWcsIGxldCBnZW5lcmljLXBhcnNlciBkbyBpdHMgam9iLi4uICovCisJCXJldHVybiBzbmRfaGRhX3BhcnNlX2dlbmVyaWNfY29kZWMoY29kZWMpOworCQorCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3BlYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjLT5zcGVjID0gc3BlYzsKKwlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgeworCWNhc2UgU1RBQzc2NjFfVkFJTzoKKwkJc3BlYy0+bWl4ZXIgPSB2YWlvX21peGVyOworCQlzcGVjLT5pbml0ID0gdmFpb19pbml0OworCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOworCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUodmFpb19kYWNzKTsKKwkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSB2YWlvX2RhY3M7CisJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IFZBSU9fSFBfREFDOworCQlzcGVjLT5udW1fYWRjcyA9IEFSUkFZX1NJWkUodmFpb19hZGNzKTsKKwkJc3BlYy0+YWRjX25pZHMgPSB2YWlvX2FkY3M7CisJCXNwZWMtPmlucHV0X211eCA9ICZ2YWlvX211eDsKKwkJc3BlYy0+bXV4X25pZHMgPSB2YWlvX211eF9uaWRzOworCQlicmVhazsKKwl9CisKKwljb2RlYy0+cGF0Y2hfb3BzID0gc3RhYzc2NjFfcGF0Y2hfb3BzOworCXJldHVybiAwOworfQorCisKKy8qCiAgKiBwYXRjaCBlbnRyaWVzCiAgKi8KIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X3NpZ21hdGVsW10gPSB7CkBAIC0xMTYyLDUgKzEzNjAsNiBAQAogIAl7IC5pZCA9IDB4ODM4NDc2MjcsIC5uYW1lID0gIlNUQUM5MjcxRCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5Mjd4IH0sCiAgCXsgLmlkID0gMHg4Mzg0NzYyOCwgLm5hbWUgPSAiU1RBQzkyNzRYNU5IIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyN3ggfSwKICAJeyAuaWQgPSAweDgzODQ3NjI5LCAubmFtZSA9ICJTVEFDOTI3NEQ1TkgiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTI3eCB9LAorIAl7IC5pZCA9IDB4ODM4NDc2NjEsIC5uYW1lID0gIlNUQUM3NjYxIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzc2NjEgfSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYwppbmRleCA4ODA5ODEyLi43ZTY2MDhiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hdXJlb24uYwpAQCAtNTMsNiArNTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KIAogI2luY2x1ZGUgImljZTE3MTIuaCIKQEAgLTIxMCwxNCArMjEyLDE0IEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJdW5zaWduZWQgc2hvcnQgdm9sOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCiAJdm9sID0gYXVyZW9uX2FjOTdfcmVhZChpY2UsIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHg3Rik7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAweDFGIC0gKHZvbCAmIDB4MUYpOwogCWlmIChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIEFVUkVPTl9BQzk3X1NURVJFTykKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSAweDFGIC0gKCh2b2wgPj4gOCkgJiAweDFGKTsKIAotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUyLDExICsyNTQsMTEgQEAKIHsKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gYXVyZW9uX2FjOTdfcmVhZChpY2UsIGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHg3RikgJiAweDgwMDAgPyAwIDogMTsKIAotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg4LDExICsyOTAsMTEgQEAKIHsKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gYXVyZW9uX2FjOTdfcmVhZChpY2UsIEFDOTdfTUlDKSAmIDB4MDAyMCA/IDAgOiAxOwogCi0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0zMjIsMzYgKzMyNCw0OCBAQAogewogCXVuc2lnbmVkIGludCB0bXA7CiAJaW50IGk7CisJdW5zaWduZWQgaW50IG1vc2ksIGNsazsKIAogCXRtcCA9IHNuZF9pY2UxNzEyX2dwaW9fcmVhZChpY2UpOwogCi0Jc25kX2ljZTE3MTJfZ3Bpb19zZXRfbWFzayhpY2UsIH4oQVVSRU9OX1dNX1JXfEFVUkVPTl9TUElfTU9TSXxBVVJFT05fU1BJX0NMS3wKLQkJCQkJIEFVUkVPTl9XTV9DU3xBVVJFT05fQ1M4NDE1X0NTKSk7Ci0JdG1wIHw9IEFVUkVPTl9XTV9SVzsKKwlpZiAoaWNlLT5lZXByb20uc3VidmVuZG9yID09IFZUMTcyNF9TVUJERVZJQ0VfUFJPRElHWTcxTFQpIHsKKwkJc25kX2ljZTE3MTJfZ3Bpb19zZXRfbWFzayhpY2UsIH4oUFJPRElHWV9TUElfTU9TSXxQUk9ESUdZX1NQSV9DTEt8UFJPRElHWV9XTV9DUykpOworCQltb3NpID0gUFJPRElHWV9TUElfTU9TSTsKKwkJY2xrID0gUFJPRElHWV9TUElfQ0xLOworCX0KKwllbHNlIHsKKwkJc25kX2ljZTE3MTJfZ3Bpb19zZXRfbWFzayhpY2UsIH4oQVVSRU9OX1dNX1JXfEFVUkVPTl9TUElfTU9TSXxBVVJFT05fU1BJX0NMS3wKKwkJCQkJCSBBVVJFT05fV01fQ1N8QVVSRU9OX0NTODQxNV9DUykpOworCQltb3NpID0gQVVSRU9OX1NQSV9NT1NJOworCQljbGsgPSBBVVJFT05fU1BJX0NMSzsKKwkJCisJCXRtcCB8PSBBVVJFT05fV01fUlc7CisJfQorCQogCXRtcCAmPSB+Y3M7CiAJc25kX2ljZTE3MTJfZ3Bpb193cml0ZShpY2UsIHRtcCk7CiAJdWRlbGF5KDEpOwogCiAJZm9yIChpID0gYml0cyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCXRtcCAmPSB+QVVSRU9OX1NQSV9DTEs7CisJCXRtcCAmPSB+Y2xrOwogCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKIAkJdWRlbGF5KDEpOwogCQlpZiAoZGF0YSAmICgxIDw8IGkpKQotCQkJdG1wIHw9IEFVUkVPTl9TUElfTU9TSTsKKwkJCXRtcCB8PSBtb3NpOwogCQllbHNlCi0JCQl0bXAgJj0gfkFVUkVPTl9TUElfTU9TSTsKKwkJCXRtcCAmPSB+bW9zaTsKIAkJc25kX2ljZTE3MTJfZ3Bpb193cml0ZShpY2UsIHRtcCk7CiAJCXVkZWxheSgxKTsKLQkJdG1wIHw9IEFVUkVPTl9TUElfQ0xLOworCQl0bXAgfD0gY2xrOwogCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKIAkJdWRlbGF5KDEpOwogCX0KIAotCXRtcCAmPSB+QVVSRU9OX1NQSV9DTEs7CisJdG1wICY9IH5jbGs7CiAJdG1wIHw9IGNzOwogCXNuZF9pY2UxNzEyX2dwaW9fd3JpdGUoaWNlLCB0bXApOwogCXVkZWxheSgxKTsKLQl0bXAgfD0gQVVSRU9OX1NQSV9DTEs7CisJdG1wIHw9IGNsazsKIAlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgdG1wKTsKIAl1ZGVsYXkoMSk7CiB9CkBAIC00NDAsNyArNDU0LDkgQEAKICAqLwogc3RhdGljIHZvaWQgd21fcHV0X25vY2FjaGUoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIGludCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKIHsKLQlhdXJlb25fc3BpX3dyaXRlKGljZSwgQVVSRU9OX1dNX0NTLCAocmVnIDw8IDkpIHwgKHZhbCAmIDB4MWZmKSwgMTYpOworCWF1cmVvbl9zcGlfd3JpdGUoaWNlLAorCQkJKGljZS0+ZWVwcm9tLnN1YnZlbmRvciA9PSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1k3MUxUID8gUFJPRElHWV9XTV9DUyA6IEFVUkVPTl9XTV9DUyksCisJCQkocmVnIDw8IDkpIHwgKHZhbCAmIDB4MWZmKSwgMTYpOwogfQogCiAvKgpAQCAtNDc0LDExICs0OTAsMTEgQEAKIHsKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKHdtX2dldChpY2UsIFdNX09VVF9NVVgxKSA+PiAxKSAmIDB4MDE7CiAKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU0Myw5ICs1NTksOSBAQAogewogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKHdtX2dldChpY2UsIFdNX01VVEUpICYgMHgxMCkgPyAwIDogMTsKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2OCwxMSArNzg0LDExIEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJdW5zaWduZWQgc2hvcnQgdmFsOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXZhbCA9IHdtX2dldChpY2UsIFdNX0RBQ19ESUdfTUFTVEVSX0FUVEVOKSAmIDB4ZmY7CiAJdmFsID0gdmFsID4gUENNX01JTiA/ICh2YWwgLSBQQ01fTUlOKSA6IDA7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWw7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC04MTMsMTIgKzgyOSwxMiBAQAogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAlpbnQgaTsKIAotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXZhbCA9IHdtX2dldChpY2UsIFdNX0FEQ19HQUlOICsgaSk7CiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldID0gfnZhbD4+NSAmIDB4MTsKIAl9Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC04NjAsMTMgKzg3NiwxMyBAQAogCWludCBpLCBpZHg7CiAJdW5zaWduZWQgc2hvcnQgdm9sOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJaWR4ID0gV01fQURDX0dBSU4gKyBpOwogCQl2b2wgPSB3bV9nZXQoaWNlLCBpZHgpICYgMHgxZjsKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV0gPSB2b2w7CiAJfQotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTM3LDExICs5NTMsMTEgQEAKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJdmFsID0gd21fZ2V0KGljZSwgV01fQURDX01VWCk7Ci0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWwgJiA3OwotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gKHZhbCA+PiA0KSAmIDc7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHZhbCAmIDc7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVsxXSA9ICh2YWwgPj4gNCkgJiA3OworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTU0LDggKzk3MCw4IEBACiAJc25kX2ljZTE3MTJfc2F2ZV9ncGlvX3N0YXR1cyhpY2UpOwogCW92YWwgPSB3bV9nZXQoaWNlLCBXTV9BRENfTVVYKTsKIAludmFsID0gb3ZhbCAmIH4weDc3OwotCW52YWwgfD0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiA3OwotCW52YWwgfD0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdICYgNykgPDwgNDsKKwludmFsIHw9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gJiA3OworCW52YWwgfD0gKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMV0gJiA3KSA8PCA0OwogCWNoYW5nZSA9IChvdmFsICE9IG52YWwpOwogCWlmIChjaGFuZ2UpCiAJCXdtX3B1dChpY2UsIFdNX0FEQ19NVVgsIG52YWwpOwpAQCAtOTk1LDcgKzEwMTEsNyBAQAogCiAJLy9zbmRfaWNlMTcxMl9zYXZlX2dwaW9fc3RhdHVzKGljZSk7CiAJLy92YWwgPSBhdXJlb25fY3M4NDE1X2dldChpY2UsIENTODQxNV9DVFJMMik7Ci0JdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBpY2UtPnNwZWMuYXVyZW9uLmNzODQxNV9tdXg7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IGljZS0+c3BlYy5hdXJlb24uY3M4NDE1X211eDsKIAkvL3NuZF9pY2UxNzEyX3Jlc3RvcmVfZ3Bpb19zdGF0dXMoaWNlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMDksMTIgKzEwMjUsMTIgQEAKIAlzbmRfaWNlMTcxMl9zYXZlX2dwaW9fc3RhdHVzKGljZSk7CiAJb3ZhbCA9IGF1cmVvbl9jczg0MTVfZ2V0KGljZSwgQ1M4NDE1X0NUUkwyKTsKIAludmFsID0gb3ZhbCAmIH4weDA3OwotCW52YWwgfD0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiA3OworCW52YWwgfD0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSAmIDc7CiAJY2hhbmdlID0gKG92YWwgIT0gbnZhbCk7CiAJaWYgKGNoYW5nZSkKIAkJYXVyZW9uX2NzODQxNV9wdXQoaWNlLCBDUzg0MTVfQ1RSTDIsIG52YWwpOwogCXNuZF9pY2UxNzEyX3Jlc3RvcmVfZ3Bpb19zdGF0dXMoaWNlKTsKLQlpY2UtPnNwZWMuYXVyZW9uLmNzODQxNV9tdXggPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpY2UtPnNwZWMuYXVyZW9uLmNzODQxNV9tdXggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOwogCXJldHVybiBjaGFuZ2U7CiB9CiAKQEAgLTE2NTksNyArMTY3NSw3IEBACiAJCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQllbHNlIHsKKwllbHNlIGlmIChpY2UtPmVlcHJvbS5zdWJ2ZW5kb3IgIT0gVlQxNzI0X1NVQkRFVklDRV9QUk9ESUdZNzFMVCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhYzk3X2NvbnRyb2xzKTsgaSsrKSB7CiAJCQllcnIgPSBzbmRfY3RsX2FkZChpY2UtPmNhcmQsIHNuZF9jdGxfbmV3MSgmYWM5N19jb250cm9sc1tpXSwgaWNlKSk7CiAJCQlpZiAoZXJyIDwgMCkKQEAgLTE2NjcsNyArMTY4Myw3IEBACiAJCX0KIAl9CiAKLQl7CisJaWYgKGljZS0+ZWVwcm9tLnN1YnZlbmRvciAhPSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1k3MUxUKSB7CiAJCXVuc2lnbmVkIGNoYXIgaWQ7CiAJCXNuZF9pY2UxNzEyX3NhdmVfZ3Bpb19zdGF0dXMoaWNlKTsKIAkJaWQgPSBhdXJlb25fY3M4NDE1X2dldChpY2UsIENTODQxNV9JRCk7CkBAIC0xODIyLDcgKzE4MzgsOCBAQAogCXVkZWxheSgxKTsKIAogCS8qIGluaXRpYWxpemUgV004NzcwIGNvZGVjICovCi0JaWYgKGljZS0+ZWVwcm9tLnN1YnZlbmRvciA9PSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1k3MSkKKwlpZiAoaWNlLT5lZXByb20uc3VidmVuZG9yID09IFZUMTcyNF9TVUJERVZJQ0VfUFJPRElHWTcxIHx8CisJCWljZS0+ZWVwcm9tLnN1YnZlbmRvciA9PSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1k3MUxUKQogCQlwID0gd21faW5pdHNfcHJvZGlneTsKIAllbHNlCiAJCXAgPSB3bV9pbml0c19hdXJlb247CkBAIC0xODMwLDExICsxODQ3LDEzIEBACiAJCXdtX3B1dChpY2UsIHBbMF0sIHBbMV0pOwogCiAJLyogaW5pdGlhbGl6ZSBDUzg0MTVBIGNvZGVjICovCi0JZm9yIChwID0gY3NfaW5pdHM7ICpwICE9ICh1bnNpZ25lZCBzaG9ydCktMTsgcCsrKQotCQlhdXJlb25fc3BpX3dyaXRlKGljZSwgQVVSRU9OX0NTODQxNV9DUywgKnAgfCAweDIwMDAwMCwgMjQpOwotCWljZS0+c3BlYy5hdXJlb24uY3M4NDE1X211eCA9IDE7CisJaWYgKGljZS0+ZWVwcm9tLnN1YnZlbmRvciAhPSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1k3MUxUKSB7CisJCWZvciAocCA9IGNzX2luaXRzOyAqcCAhPSAodW5zaWduZWQgc2hvcnQpLTE7IHArKykKKwkJCWF1cmVvbl9zcGlfd3JpdGUoaWNlLCBBVVJFT05fQ1M4NDE1X0NTLCAqcCB8IDB4MjAwMDAwLCAyNCk7CisJCWljZS0+c3BlYy5hdXJlb24uY3M4NDE1X211eCA9IDE7CiAKLQlhdXJlb25fc2V0X2hlYWRwaG9uZV9hbXAoaWNlLCAxKTsKKwkJYXVyZW9uX3NldF9oZWFkcGhvbmVfYW1wKGljZSwgMSk7CisJfQogCiAJc25kX2ljZTE3MTJfcmVzdG9yZV9ncGlvX3N0YXR1cyhpY2UpOwogCQpAQCAtMTkwMiw2ICsxOTIxLDIzIEBACiAJMHgwMCwJLyogR1BJT19TVEFURTIgKi8KIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHByb2RpZ3k3MWx0X2VlcHJvbVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJMHgwYiwJLyogU1lTQ0lORjogY2xvY2sgNTEyLCBzcGRpZi1pbi9BREMsIDREQUNzICovCisJMHg4MCwJLyogQUNMSU5LOiBJMlMgKi8KKwkweGZjLAkvKiBJMlM6IHZvbCwgOTZrLCAyNGJpdCwgMTkyayAqLworCTB4YzMsCS8qIFNQRFVGOiBvdXQtZW4sIG91dC1pbnQgKi8KKwkweDAwLAkvKiBHUElPX0RJUiAqLworCTB4MDcsCS8qIEdQSU9fRElSMSAqLworCTB4MDAsCS8qIEdQSU9fRElSMiAqLworCTB4ZmYsCS8qIEdQSU9fTUFTSyAqLworCTB4ZjgsCS8qIEdQSU9fTUFTSzEgKi8KKwkweGZmLAkvKiBHUElPX01BU0syICovCisJMHgwMCwJLyogR1BJT19TVEFURSAqLworCTB4MDAsCS8qIEdQSU9fU1RBVEUxICovCisJMHgwMCwJLyogR1BJT19TVEFURTIgKi8KK307CisJCisKIC8qIGVudHJ5IHBvaW50ICovCiBzdHJ1Y3Qgc25kX2ljZTE3MTJfY2FyZF9pbmZvIHNuZF92dDE3MjRfYXVyZW9uX2NhcmRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CkBAIC0xOTQ0LDUgKzE5ODAsMTUgQEAKIAkJLmVlcHJvbV9kYXRhID0gcHJvZGlneTcxX2VlcHJvbSwKIAkJLmRyaXZlciA9ICJQcm9kaWd5NzEiLCAvKiBzaG91bGQgYmUgaWRlbnRpY2FsIHdpdGggQXVyZW9uNzEgKi8KIAl9LAorCXsKKwkJLnN1YnZlbmRvciA9IFZUMTcyNF9TVUJERVZJQ0VfUFJPRElHWTcxTFQsCisJCS5uYW1lID0gIkF1ZGlvdHJhayBQcm9kaWd5IDcuMSBMVCIsCisJCS5tb2RlbCA9ICJwcm9kaWd5NzFsdCIsCisJCS5jaGlwX2luaXQgPSBhdXJlb25faW5pdCwKKwkJLmJ1aWxkX2NvbnRyb2xzID0gYXVyZW9uX2FkZF9jb250cm9scywKKwkJLmVlcHJvbV9zaXplID0gc2l6ZW9mKHByb2RpZ3k3MWx0X2VlcHJvbSksCisJCS5lZXByb21fZGF0YSA9IHByb2RpZ3k3MWx0X2VlcHJvbSwKKwkJLmRyaXZlciA9ICJQcm9kaWd5NzFMVCIsCisJfSwKIAl7IH0gLyogdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2F1cmVvbi5oIGIvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmgKaW5kZXggOTVkNTE1Zi4uOThhNjc1MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvYXVyZW9uLmgKQEAgLTI3LDEyICsyNywxNCBAQAogI2RlZmluZSAgQVVSRU9OX0RFVklDRV9ERVNDIAkgICAgICAgIntUZXJyYXRlYyxBdXJlb24gNS4xIFNreX0sIlwKIAkJCQkgICAgICAgIntUZXJyYXRlYyxBdXJlb24gNy4xIFNwYWNlfSwiXAogCQkJCSAgICAgICAie1RlcnJhdGVjLEF1cmVvbiA3LjEgVW5pdmVyc2V9LCIgXAotCQkJCQkie0F1ZGlvVHJhayxQcm9kaWd5IDcuMX0sIgorCQkJCQkie0F1ZGlvVHJhayxQcm9kaWd5IDcuMX0sIiBcCisJCQkJCSJ7QXVkaW9UcmFrLFByb2RpZ3kgNy4xIExUfSwiCiAKICNkZWZpbmUgVlQxNzI0X1NVQkRFVklDRV9BVVJFT041MV9TS1kJMHgzYjE1NDcxMQkvKiBBdXJlb24gNS4xIFNreSAqLwogI2RlZmluZSBWVDE3MjRfU1VCREVWSUNFX0FVUkVPTjcxX1NQQUNFCTB4M2IxNTQ1MTEJLyogQXVyZW9uIDcuMSBTcGFjZSAqLwogI2RlZmluZSBWVDE3MjRfU1VCREVWSUNFX0FVUkVPTjcxX1VOSVZFUlNFCTB4M2IxNTUzMTEJLyogQXVyZW9uIDcuMSBVbml2ZXJzZSAqLwogI2RlZmluZSBWVDE3MjRfU1VCREVWSUNFX1BST0RJR1k3MQkweDMzNDk1MzQ1CS8qIFBST0RJR1kgNy4xICovCisjZGVmaW5lIFZUMTcyNF9TVUJERVZJQ0VfUFJPRElHWTcxTFQJMHgzMjMxNTQ0MQkvKiBQUk9ESUdZIDcuMSBMVCAqLwogCiBleHRlcm4gc3RydWN0IHNuZF9pY2UxNzEyX2NhcmRfaW5mbyAgc25kX3Z0MTcyNF9hdXJlb25fY2FyZHNbXTsKIApAQCAtNTMsNCArNTUsOCBAQAogI2RlZmluZSBBVVJFT05fQUM5N19EQVRBX0hJR0gJKDEgPDwgOCkKICNkZWZpbmUgQVVSRU9OX0FDOTdfREFUQV9NQVNLCTB4RkYKIAorI2RlZmluZSBQUk9ESUdZX1dNX0NTCQkoMSA8PCA4KQorI2RlZmluZSBQUk9ESUdZX1NQSV9NT1NJCSgxIDw8IDEwKQorI2RlZmluZSBQUk9ESUdZX1NQSV9DTEsJCSgxIDw8IDkpCisKICNlbmRpZiAvKiBfX1NPVU5EX0FVUkVPTl9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9kZWx0YS5jIGIvc291bmQvcGNpL2ljZTE3MTIvZGVsdGEuYwppbmRleCA5YTUxZDM0Li5hZjY1OTgwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9kZWx0YS5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2RlbHRhLmMKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY3M4NDI3Lmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KQEAgLTEzMCwxMyArMTMyLDEzIEBACiAJaW50IHJlcyA9IGNvdW50OwogCXVuc2lnbmVkIGNoYXIgdG1wOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXRtcCA9IGFwX2NzODQyN19jb2RlY19zZWxlY3QoaWNlKTsKIAlhcF9jczg0Mjdfd3JpdGVfYnl0ZShpY2UsIChkZXZpY2UtPmFkZHIgPDwgMSkgfCAwLCB0bXApOyAvKiBhZGRyZXNzICsgd3JpdGUgbW9kZSAqLwogCXdoaWxlIChjb3VudC0tID4gMCkKIAkJYXBfY3M4NDI3X3dyaXRlX2J5dGUoaWNlLCAqYnl0ZXMrKywgdG1wKTsKIAlhcF9jczg0MjdfY29kZWNfZGVhc3NlcnQoaWNlLCB0bXApOwotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xNDcsMTMgKzE0OSwxMyBAQAogCWludCByZXMgPSBjb3VudDsKIAl1bnNpZ25lZCBjaGFyIHRtcDsKIAkKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJdG1wID0gYXBfY3M4NDI3X2NvZGVjX3NlbGVjdChpY2UpOwogCWFwX2NzODQyN193cml0ZV9ieXRlKGljZSwgKGRldmljZS0+YWRkciA8PCAxKSB8IDEsIHRtcCk7IC8qIGFkZHJlc3MgKyByZWFkIG1vZGUgKi8KIAl3aGlsZSAoY291bnQtLSA+IDApCiAJCSpieXRlcysrID0gYXBfY3M4NDI3X3JlYWRfYnl0ZShpY2UsIHRtcCk7CiAJYXBfY3M4NDI3X2NvZGVjX2RlYXNzZXJ0KGljZSwgdG1wKTsKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMTgwLDcgKzE4Miw3IEBACiAJLyogc2VuZCBieXRlIHRvIHRyYW5zbWl0dGVyICovCiAJbWFzazEgPSBJQ0UxNzEyX0RFTFRBX1NQRElGX09VVF9TVEFUX0NMT0NLOwogCW1hc2syID0gSUNFMTcxMl9ERUxUQV9TUERJRl9PVVRfU1RBVF9EQVRBOwotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAl0bXAgPSBzbmRfaWNlMTcxMl9yZWFkKGljZSwgSUNFMTcxMl9JUkVHX0dQSU9fREFUQSk7CiAJZm9yIChpZHggPSA3OyBpZHggPj0gMDsgaWR4LS0pIHsKIAkJdG1wICY9IH4obWFzazEgfCBtYXNrMik7CkBAIC0xOTQsNyArMTk2LDcgQEAKIAl9CiAJdG1wICY9IH5tYXNrMTsKIAlzbmRfaWNlMTcxMl93cml0ZShpY2UsIElDRTE3MTJfSVJFR19HUElPX0RBVEEsIHRtcCk7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogfQogCiAKQEAgLTI5NiwxNCArMjk4LDE0IEBACiAJaWYgKHJhdGUgPT0gMCkJLyogbm8gaGludCAtIFMvUERJRiBpbnB1dCBpcyBtYXN0ZXIsIHNpbXBseSByZXR1cm4gKi8KIAkJcmV0dXJuOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXRtcCA9IHNuZF9pY2UxNzEyX3JlYWQoaWNlLCBJQ0UxNzEyX0lSRUdfR1BJT19EQVRBKTsKIAl0bXAyID0gdG1wICYgfklDRTE3MTJfREVMVEFfREZTOwogCWlmIChyYXRlID4gNDgwMDApCiAJCXRtcDIgfD0gSUNFMTcxMl9ERUxUQV9ERlM7CiAJaWYgKHRtcCAhPSB0bXAyKQogCQlzbmRfaWNlMTcxMl93cml0ZShpY2UsIElDRTE3MTJfSVJFR19HUElPX0RBVEEsIHRtcDIpOwotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIH0KIAogLyoKQEAgLTMxOCw5ICszMjAsOSBAQAogCQlyZXR1cm47CiAKIAkvKiBjaGVjayBiZWZvcmUgcmVzZXQgYWs0NTI0IHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNsaWNrcyAqLwotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAl0bXAgPSBzbmRfaWNlMTcxMl9yZWFkKGljZSwgSUNFMTcxMl9JUkVHX0dQSU9fREFUQSk7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXRtcDIgPSB0bXAgJiB+SUNFMTcxMl9ERUxUQV9ERlM7IAogCWlmIChyYXRlID4gNDgwMDApCiAJCXRtcDIgfD0gSUNFMTcxMl9ERUxUQV9ERlM7CkBAIC0zMjksMTIgKzMzMSwxMiBAQAogCiAJLyogZG8gaXQgYWdhaW4gKi8KIAlzbmRfYWttNHh4eF9yZXNldChhaywgMSk7Ci0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXRtcCA9IHNuZF9pY2UxNzEyX3JlYWQoaWNlLCBJQ0UxNzEyX0lSRUdfR1BJT19EQVRBKSAmIH5JQ0UxNzEyX0RFTFRBX0RGUzsKIAlpZiAocmF0ZSA+IDQ4MDAwKQogCQl0bXAgfD0gSUNFMTcxMl9ERUxUQV9ERlM7CiAJc25kX2ljZTE3MTJfd3JpdGUoaWNlLCBJQ0UxNzEyX0lSRUdfR1BJT19EQVRBLCB0bXApOwotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlzbmRfYWttNHh4eF9yZXNldChhaywgMCk7CiB9CiAKQEAgLTM5MSw2ICszOTMsMzcgQEAKIAlzbmRfaWNlMTcxMl9kZWx0YV9jczg0MDNfc3BkaWZfd3JpdGUoaWNlLCB0bXApOwogfQogCitzdGF0aWMgaW50IHNuZF9pY2UxNzEyX2RlbHRhMTAxMGx0X3dvcmRjbG9ja19zdGF0dXNfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfaWNlMTcxMl9kZWx0YTEwMTBsdF93b3JkY2xvY2tfc3RhdHVzX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwljaGFyIHJlZyA9IDB4MTA7IC8vIGNzODQyNyByZWNlaXZlciBlcnJvciByZWdpc3RlcgorCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJaWYgKHNuZF9pMmNfc2VuZGJ5dGVzKGljZS0+Y3M4NDI3LCAmcmVnLCAxKSAhPSAxKQorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gc2VuZCByZWdpc3RlciAweCV4IGJ5dGUgdG8gQ1M4NDI3XG4iLCByZWcpOworCXNuZF9pMmNfcmVhZGJ5dGVzKGljZS0+Y3M4NDI3LCAmcmVnLCAxKTsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IChyZWcgPyAxIDogMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9kZWx0YTEwMTBsdF93b3JkY2xvY2tfc3RhdHVzIF9fZGV2aW5pdGRhdGEgPQoreworCS5hY2Nlc3MgPQkoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQpLAorCS5pZmFjZSA9CVNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gICAgICAgICAiV29yZCBDbG9jayBTdGF0dXMiLAorCS5pbmZvID0JCXNuZF9pY2UxNzEyX2RlbHRhMTAxMGx0X3dvcmRjbG9ja19zdGF0dXNfaW5mbywKKwkuZ2V0ID0JCXNuZF9pY2UxNzEyX2RlbHRhMTAxMGx0X3dvcmRjbG9ja19zdGF0dXNfZ2V0LAorfTsKIAogLyoKICAqIGluaXRpYWxpemUgdGhlIGNoaXBzIG9uIE0tQXVkaW8gY2FyZHMKQEAgLTYyMCw3ICs2NTMsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2RlbHRhMTAxMF93b3JkY2xvY2tfc2VsZWN0IF9fZGV2aW5pdGRhdGEgPQogSUNFMTcxMl9HUElPKFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAiV29yZCBDbG9jayBTeW5jIiwgMCwgSUNFMTcxMl9ERUxUQV9XT1JEX0NMT0NLX1NFTEVDVCwgMSwgMCk7CiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfZGVsdGExMDEwbHRfd29yZGNsb2NrX3NlbGVjdCBfX2RldmluaXRkYXRhID0KLUlDRTE3MTJfR1BJTyhTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgIldvcmQgQ2xvY2sgU3luYyIsIDAsIElDRTE3MTJfREVMVEFfMTAxMExUX1dPUkRDTE9DSywgMSwgMCk7CitJQ0UxNzEyX0dQSU8oU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsICJXb3JkIENsb2NrIFN5bmMiLCAwLCBJQ0UxNzEyX0RFTFRBXzEwMTBMVF9XT1JEQ0xPQ0ssIDAsIDApOwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9pY2UxNzEyX2RlbHRhMTAxMF93b3JkY2xvY2tfc3RhdHVzIF9fZGV2aW5pdGRhdGEgPQogSUNFMTcxMl9HUElPKFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAiV29yZCBDbG9jayBTdGF0dXMiLCAwLCBJQ0UxNzEyX0RFTFRBX1dPUkRfQ0xPQ0tfU1RBVFVTLCAxLCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCB8IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSk7CiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfZGVsdGFkaW8yNDk2X3NwZGlmX2luX3NlbGVjdCBfX2RldmluaXRkYXRhID0KQEAgLTY1Myw2ICs2ODYsOSBAQAogCQllcnIgPSBzbmRfY3RsX2FkZChpY2UtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2ljZTE3MTJfZGVsdGExMDEwbHRfd29yZGNsb2NrX3NlbGVjdCwgaWNlKSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2N0bF9hZGQoaWNlLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9pY2UxNzEyX2RlbHRhMTAxMGx0X3dvcmRjbG9ja19zdGF0dXMsIGljZSkpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaG9vbnRlY2guYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2hvb250ZWNoLmMKaW5kZXggM2YyZjkxOC4uM2YyN2QwNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaG9vbnRlY2guYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9ob29udGVjaC5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogCiAjaW5jbHVkZSAiaWNlMTcxMi5oIgpAQCAtNDgsMzEgKzUwLDMxIEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfaWNlMTcxMl9zdGRzcDI0X2RhcmVhcihzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgaW50IGFjdGl2YXRlKQogewotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlJQ0UxNzEyX1NURFNQMjRfMF9EQVJFQVIoaWNlLT5zcGVjLmhvb250ZWNoLmJveGJpdHMsIGFjdGl2YXRlKTsKIAlzbmRfaWNlMTcxMl9zdGRzcDI0X2dwaW9fd3JpdGUoaWNlLCBpY2UtPnNwZWMuaG9vbnRlY2guYm94Yml0c1swXSk7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX2ljZTE3MTJfc3Rkc3AyNF9tdXRlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCBpbnQgYWN0aXZhdGUpCiB7Ci0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCUlDRTE3MTJfU1REU1AyNF8zX01VVEUoaWNlLT5zcGVjLmhvb250ZWNoLmJveGJpdHMsIGFjdGl2YXRlKTsKIAlzbmRfaWNlMTcxMl9zdGRzcDI0X2dwaW9fd3JpdGUoaWNlLCBpY2UtPnNwZWMuaG9vbnRlY2guYm94Yml0c1szXSk7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX2ljZTE3MTJfc3Rkc3AyNF9pbnNlbChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgaW50IGFjdGl2YXRlKQogewotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlJQ0UxNzEyX1NURFNQMjRfM19JTlNFTChpY2UtPnNwZWMuaG9vbnRlY2guYm94Yml0cywgYWN0aXZhdGUpOwogCXNuZF9pY2UxNzEyX3N0ZHNwMjRfZ3Bpb193cml0ZShpY2UsIGljZS0+c3BlYy5ob29udGVjaC5ib3hiaXRzWzNdKTsKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfaWNlMTcxMl9zdGRzcDI0X2JveF9jaGFubmVsKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCBpbnQgYm94LCBpbnQgY2huLCBpbnQgYWN0aXZhdGUpCiB7Ci0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCiAJLyogc2VsZWN0IGJveCAqLwogCUlDRTE3MTJfU1REU1AyNF8wX0JPWChpY2UtPnNwZWMuaG9vbnRlY2guYm94Yml0cywgYm94KTsKQEAgLTExNSwxMiArMTE3LDEyIEBACiAJSUNFMTcxMl9TVERTUDI0XzJfTUlESTEoaWNlLT5zcGVjLmhvb250ZWNoLmJveGJpdHMsIDApOwogCXNuZF9pY2UxNzEyX3N0ZHNwMjRfZ3Bpb193cml0ZShpY2UsIGljZS0+c3BlYy5ob29udGVjaC5ib3hiaXRzWzJdKTsKIAotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF9pY2UxNzEyX3N0ZHNwMjRfYm94X21pZGkoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIGludCBib3gsIGludCBtYXN0ZXIpCiB7Ci0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCiAJLyogc2VsZWN0IGJveCAqLwogCUlDRTE3MTJfU1REU1AyNF8wX0JPWChpY2UtPnNwZWMuaG9vbnRlY2guYm94Yml0cywgYm94KTsKQEAgLTE0MSwxNSArMTQzLDE1IEBACiAJSUNFMTcxMl9TVERTUDI0XzJfTUlESUlOKGljZS0+c3BlYy5ob29udGVjaC5ib3hiaXRzLCAxKTsKIAlzbmRfaWNlMTcxMl9zdGRzcDI0X2dwaW9fd3JpdGUoaWNlLCBpY2UtPnNwZWMuaG9vbnRlY2guYm94Yml0c1syXSk7CiAKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbmRfaWNlMTcxMl9zdGRzcDI0X21pZGkyKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCBpbnQgYWN0aXZhdGUpCiB7Ci0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCUlDRTE3MTJfU1REU1AyNF8zX01JREkyKGljZS0+c3BlYy5ob29udGVjaC5ib3hiaXRzLCBhY3RpdmF0ZSk7CiAJc25kX2ljZTE3MTJfc3Rkc3AyNF9ncGlvX3dyaXRlKGljZSwgaWNlLT5zcGVjLmhvb250ZWNoLmJveGJpdHNbM10pOwotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2ljZTE3MTJfaG9vbnRlY2hfaW5pdChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCBlZjZmMTg1Li42NzJlMTk4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC01Myw4ICs1MywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NzODQyNy5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KQEAgLTgyLDEwICs4NCwxMSBAQAogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCi1zdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CQkvKiBFbmFibGUgdGhpcyBjYXJkICovCitzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7LyogRW5hYmxlIHRoaXMgY2FyZCAqLwogc3RhdGljIGNoYXIgKm1vZGVsW1NORFJWX0NBUkRTXTsKLXN0YXRpYyBpbnQgb21uaVtTTkRSVl9DQVJEU107CS8qIERlbHRhNDQgJiA2NiBPbW5pIEkvTyBzdXBwb3J0ICovCitzdGF0aWMgaW50IG9tbmlbU05EUlZfQ0FSRFNdOwkJCQkvKiBEZWx0YTQ0ICYgNjYgT21uaSBJL08gc3VwcG9ydCAqLwogc3RhdGljIGludCBjczg0MjdfdGltZW91dFtTTkRSVl9DQVJEU10gPSB7WzAgLi4uIChTTkRSVl9DQVJEUy0xKV0gPSA1MDB9OyAvKiBDUzg0MjcgUy9QRElGIHRyYW5zY2lldmVyIHJlc2V0IHRpbWVvdXQgdmFsdWUgaW4gbXNlYyAqLworc3RhdGljIGludCBkeHJfZW5hYmxlW1NORFJWX0NBUkRTXTsJCQkvKiBEWFIgZW5hYmxlIGZvciBETVg2RklSRSAqLwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIElDRTE3MTIgc291bmRjYXJkLiIpOwpAQCAtOTksNiArMTAyLDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoY3M4NDI3X3RpbWVvdXQsICJEZWZpbmUgcmVzZXQgdGltZW91dCBmb3IgY3M4NDI3IGNoaXAgaW4gbXNlYyByZXNvbHV0aW9uLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KG1vZGVsLCBjaGFycCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1vZGVsLCAiVXNlIHRoZSBnaXZlbiBib2FyZCBtb2RlbC4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShkeHJfZW5hYmxlLCBpbnQsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkeHJfZW5hYmxlLCAiRW5hYmxlIERYUiBzdXBwb3J0IGZvciBUZXJyYXRlYyBETVg2RklSRS4iKTsKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2ljZTE3MTJfaWRzW10gPSB7CkBAIC0zMTYsNyArMzIxLDYgQEAKIAlpbmIoSUNFUkVHKGljZSwgREFUQSkpOyAvKiBkdW1teSByZWFkIGZvciBwY2ktcG9zdGluZyAqLwogfQogCi0KIC8qCiAgKgogICogQ1M4NDI3IGludGVyZmFjZQpAQCAtMzk2LDYgKzQwMCwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzbmRfaWNlMTcxMl9zZXRfaW5wdXRfY2xvY2tfc291cmNlKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCBpbnQgc3BkaWZfaXNfbWFzdGVyKQoreworICAgICAgICAvKiBjaGFuZ2UgQ1M4NDI3IGNsb2NrIHNvdXJjZSB0b28gKi8KKyAgICAgICAgaWYgKGljZS0+Y3M4NDI3KQorICAgICAgICAgICAgICAgIHNuZF9pY2UxNzEyX2NzODQyN19zZXRfaW5wdXRfY2xvY2soaWNlLCBzcGRpZl9pc19tYXN0ZXIpOworCS8qIG5vdGlmeSBhazQ1MjQgY2hpcCBhcyB3ZWxsICovCisJaWYgKHNwZGlmX2lzX21hc3RlcikgeworCQl1bnNpZ25lZCBpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGljZS0+YWttX2NvZGVjczsgaSsrKSB7CisJCQlpZiAoaWNlLT5ha21baV0ub3BzLnNldF9yYXRlX3ZhbCkKKwkJCQlpY2UtPmFrbVtpXS5vcHMuc2V0X3JhdGVfdmFsKCZpY2UtPmFrbVtpXSwgMCk7CisJCX0KKwl9Cit9CiAKIC8qCiAgKiAgSW50ZXJydXB0IGhhbmRsZXIKQEAgLTE1NjcsNiArMTU4NSw5IEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiICBDQVBUVVJFICAgICAgICAgIDogMHglMDh4XG4iLCBpbmwoSUNFTVQoaWNlLCBST1VURV9DQVBUVVJFKSkpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgU1BET1VUICAgICAgICAgICA6IDB4JTA0eFxuIiwgKHVuc2lnbmVkKWludyhJQ0VNVChpY2UsIFJPVVRFX1NQRE9VVCkpKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICIgIFJBVEUgICAgICAgICAgICAgOiAweCUwMnhcbiIsICh1bnNpZ25lZClpbmIoSUNFTVQoaWNlLCBSQVRFKSkpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgR1BJT19EQVRBICAgICAgICA6IDB4JTAyeFxuIiwgKHVuc2lnbmVkKXNuZF9pY2UxNzEyX2dldF9ncGlvX2RhdGEoaWNlKSk7CisgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgR1BJT19XUklURV9NQVNLICA6IDB4JTAyeFxuIiwgKHVuc2lnbmVkKXNuZF9pY2UxNzEyX3JlYWQoaWNlLCBJQ0UxNzEyX0lSRUdfR1BJT19XUklURV9NQVNLKSk7CisJc25kX2lwcmludGYoYnVmZmVyLCAiICBHUElPX0RJUkVDVElPTiAgIDogMHglMDJ4XG4iLCAodW5zaWduZWQpc25kX2ljZTE3MTJfcmVhZChpY2UsIElDRTE3MTJfSVJFR19HUElPX0RJUkVDVElPTikpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX2ljZTE3MTJfcHJvY19pbml0KHN0cnVjdCBzbmRfaWNlMTcxMiAqIGljZSkKQEAgLTE4NTYsMjAgKzE4NzcsOCBAQAogCXNwaW5fdW5sb2NrX2lycSgmaWNlLT5yZWdfbG9jayk7CiAKIAlpZiAoKG92YWwgJiBJQ0UxNzEyX1NQRElGX01BU1RFUikgIT0KLQkgICAgKGluYihJQ0VNVChpY2UsIFJBVEUpKSAmIElDRTE3MTJfU1BESUZfTUFTVEVSKSkgewotCQkvKiBjaGFuZ2UgQ1M4NDI3IGNsb2NrIHNvdXJjZSB0b28gKi8KLQkJaWYgKGljZS0+Y3M4NDI3KSB7Ci0JCQlzbmRfaWNlMTcxMl9jczg0Mjdfc2V0X2lucHV0X2Nsb2NrKGljZSwgaXNfc3BkaWZfbWFzdGVyKGljZSkpOwotCQl9Ci0JCS8qIG5vdGlmeSBhazQ1MjQgY2hpcCBhcyB3ZWxsICovCi0JCWlmIChpc19zcGRpZl9tYXN0ZXIoaWNlKSkgewotCQkJdW5zaWduZWQgaW50IGk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgaWNlLT5ha21fY29kZWNzOyBpKyspIHsKLQkJCQlpZiAoaWNlLT5ha21baV0ub3BzLnNldF9yYXRlX3ZhbCkKLQkJCQkJaWNlLT5ha21baV0ub3BzLnNldF9yYXRlX3ZhbCgmaWNlLT5ha21baV0sIDApOwotCQkJfQotCQl9Ci0JfQorCSAgICAoaW5iKElDRU1UKGljZSwgUkFURSkpICYgSUNFMTcxMl9TUERJRl9NQVNURVIpKQorCSAgICAgICAgc25kX2ljZTE3MTJfc2V0X2lucHV0X2Nsb2NrX3NvdXJjZShpY2UsIGlzX3NwZGlmX21hc3RlcihpY2UpKTsKIAogCXJldHVybiBjaGFuZ2U7CiB9CkBAIC0yMzg4LDcgKzIzOTcsMTMgQEAKIAl1ZGVsYXkoMjAwKTsKIAlvdXRiKElDRTE3MTJfTkFUSVZFLCBJQ0VSRUcoaWNlLCBDT05UUk9MKSk7CiAJdWRlbGF5KDIwMCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGljZS0+cGNpLCAweDYwLCBpY2UtPmVlcHJvbS5kYXRhW0lDRV9FRVAxX0NPREVDXSk7CisJaWYgKGljZS0+ZWVwcm9tLnN1YnZlbmRvciA9PSBJQ0UxNzEyX1NVQkRFVklDRV9ETVg2RklSRSAmJiAhaWNlLT5keHJfZW5hYmxlKSB7CisgICAgICAgICAgICAgICAgLyogTGltaXQgYWN0aXZlIEFEQ3MgYW5kIERBQ3MgdG8gNjsgICovCisgICAgICAgICAgICAgICAgLyogTm90ZTogRFhSIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShpY2UtPnBjaSwgMHg2MCwgMHgwYSk7CisJfSBlbHNlIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGljZS0+cGNpLCAweDYwLCBpY2UtPmVlcHJvbS5kYXRhW0lDRV9FRVAxX0NPREVDXSk7CisJfQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShpY2UtPnBjaSwgMHg2MSwgaWNlLT5lZXByb20uZGF0YVtJQ0VfRUVQMV9BQ0xJTktdKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaWNlLT5wY2ksIDB4NjIsIGljZS0+ZWVwcm9tLmRhdGFbSUNFX0VFUDFfSTJTSURdKTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaWNlLT5wY2ksIDB4NjMsIGljZS0+ZWVwcm9tLmRhdGFbSUNFX0VFUDFfU1BESUZdKTsKQEAgLTI1MjQsNiArMjUzOSw3IEBACiAJCQkJCWNvbnN0IGNoYXIgKm1vZGVsbmFtZSwKIAkJCQkJaW50IG9tbmksCiAJCQkJCWludCBjczg0MjdfdGltZW91dCwKKwkJCQkJaW50IGR4cl9lbmFibGUsCiAJCQkJCXN0cnVjdCBzbmRfaWNlMTcxMiAqKiByX2ljZTE3MTIpCiB7CiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2U7CkBAIC0yNTM4LDggKzI1NTQsOCBAQAogCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCS8qIGNoZWNrLCBpZiB3ZSBjYW4gcmVzdHJpY3QgUENJIERNQSB0cmFuc2ZlcnMgdG8gMjggYml0cyAqLwotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgMHgwZmZmZmZmZikgPCAwIHx8Ci0JICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCB8fAorCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IDI4Yml0IFBDSSBidXNtYXN0ZXIgRE1BXG4iKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5YSU87CkBAIC0yNTU2LDEwICsyNTcyLDExIEBACiAJZWxzZSBpZiAoY3M4NDI3X3RpbWVvdXQgPiAxMDAwKQogCQljczg0MjdfdGltZW91dCA9IDEwMDA7CiAJaWNlLT5jczg0MjdfdGltZW91dCA9IGNzODQyN190aW1lb3V0OworCWljZS0+ZHhyX2VuYWJsZSA9IGR4cl9lbmFibGU7CiAJc3Bpbl9sb2NrX2luaXQoJmljZS0+cmVnX2xvY2spOwotCWluaXRfTVVURVgoJmljZS0+Z3Bpb19tdXRleCk7Ci0JaW5pdF9NVVRFWCgmaWNlLT5pMmNfbXV0ZXgpOwotCWluaXRfTVVURVgoJmljZS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9pbml0KCZpY2UtPmkyY19tdXRleCk7CisJbXV0ZXhfaW5pdCgmaWNlLT5vcGVuX211dGV4KTsKIAlpY2UtPmdwaW8uc2V0X21hc2sgPSBzbmRfaWNlMTcxMl9zZXRfZ3Bpb19tYXNrOwogCWljZS0+Z3Bpby5zZXRfZGlyID0gc25kX2ljZTE3MTJfc2V0X2dwaW9fZGlyOwogCWljZS0+Z3Bpby5zZXRfZGF0YSA9IHNuZF9pY2UxNzEyX3NldF9ncGlvX2RhdGE7CkBAIC0yNjU4LDcgKzI2NzUsOCBAQAogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJJQ0Vuc2VtYmxlIElDRTE3MTIiKTsKIAkKIAlpZiAoKGVyciA9IHNuZF9pY2UxNzEyX2NyZWF0ZShjYXJkLCBwY2ksIG1vZGVsW2Rldl0sIG9tbmlbZGV2XSwKLQkJCQkgICAgICBjczg0MjdfdGltZW91dFtkZXZdLCAmaWNlKSkgPCAwKSB7CisJCQkJICAgICAgY3M4NDI3X3RpbWVvdXRbZGV2XSwgZHhyX2VuYWJsZVtkZXZdLAorCQkJCSAgICAgICZpY2UpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0yNzM1LDYgKzI3NTMsOCBAQAogCQkJfQogCX0KIAorCXNuZF9pY2UxNzEyX3NldF9pbnB1dF9jbG9ja19zb3VyY2UoaWNlLCAwKTsKKwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVpIiwKIAkJY2FyZC0+c2hvcnRuYW1lLCBpY2UtPnBvcnQsIGljZS0+aXJxKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCmluZGV4IGNlOTZiM2IuLmY5YjIyZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaAorKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKQEAgLTMyNSw2ICszMjUsNyBAQAogCiAJdW5zaWduZWQgaW50IHByb192b2x1bWVzWzIwXTsKIAl1bnNpZ25lZCBpbnQgb21uaTogMTsJCS8qIERlbHRhIE9tbmkgSS9PICovCisJdW5zaWduZWQgaW50IGR4cl9lbmFibGU6IDE7CS8qIFRlcnJhdGVjIERYUiBlbmFibGUgZm9yIERNWDZGSVJFICovCiAJdW5zaWduZWQgaW50IHZ0MTcyNDogMTsKIAl1bnNpZ25lZCBpbnQgdnQxNzIwOiAxOwogCXVuc2lnbmVkIGludCBoYXNfc3BkaWY6IDE7CS8qIFZUMTcyMC80IC0gaGFzIFNQRElGIEkvTyAqLwpAQCAtMzM0LDcgKzMzNSw3IEBACiAJdW5zaWduZWQgaW50IG51bV90b3RhbF9hZGNzOwkvKiB0b3RhbCBBRENzICovCiAJdW5zaWduZWQgaW50IGN1cl9yYXRlOwkJLyogY3VycmVudCByYXRlICovCiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fbXV0ZXg7CisJc3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpwY21fcmVzZXJ2ZWRbNF07CiAJc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0ICpod19yYXRlczsgLyogY2FyZC1zcGVjaWZpYyByYXRlIGNvbnN0cmFpbnRzICovCiAKQEAgLTM0Miw3ICszNDMsNyBAQAogCXN0cnVjdCBzbmRfYWttNHh4eCAqYWttOwogCXN0cnVjdCBzbmRfaWNlMTcxMl9zcGRpZiBzcGRpZjsKIAotCXN0cnVjdCBzZW1hcGhvcmUgaTJjX211dGV4OwkvKiBJMkMgbXV0ZXggZm9yIElDRTE3MjQgcmVnaXN0ZXJzICovCisJc3RydWN0IG11dGV4IGkyY19tdXRleDsJLyogSTJDIG11dGV4IGZvciBJQ0UxNzI0IHJlZ2lzdGVycyAqLwogCXN0cnVjdCBzbmRfaTJjX2J1cyAqaTJjOwkJLyogSTJDIGJ1cyAqLwogCXN0cnVjdCBzbmRfaTJjX2RldmljZSAqY3M4NDI3OwkvKiBDUzg0MjcgSTJDIGRldmljZSAqLwogCXVuc2lnbmVkIGludCBjczg0MjdfdGltZW91dDsJLyogQ1M4NDI3IHJlc2V0IHRpbWVvdXQgaW4gSFovMTAwICovCkBAIC0zNjAsNyArMzYxLDcgQEAKIAkJdm9pZCAoKnNldF9wcm9fcmF0ZSkoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIHVuc2lnbmVkIGludCByYXRlKTsKIAkJdm9pZCAoKmkyc19tY2xrX2NoYW5nZWQpKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKTsKIAl9IGdwaW87Ci0Jc3RydWN0IHNlbWFwaG9yZSBncGlvX211dGV4OworCXN0cnVjdCBtdXRleCBncGlvX211dGV4OwogCiAJLyogb3RoZXIgYm9hcmQtc3BlY2lmaWMgZGF0YSAqLwogCXVuaW9uIHsKQEAgLTQyMyw3ICs0MjQsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc25kX2ljZTE3MTJfc2F2ZV9ncGlvX3N0YXR1cyhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJaWNlLT5ncGlvLnNhdmVkWzBdID0gaWNlLT5ncGlvLmRpcmVjdGlvbjsKIAlpY2UtPmdwaW8uc2F2ZWRbMV0gPSBpY2UtPmdwaW8ud3JpdGVfbWFzazsKIH0KQEAgLTQzNCw3ICs0MzUsNyBAQAogCWljZS0+Z3Bpby5zZXRfbWFzayhpY2UsIGljZS0+Z3Bpby5zYXZlZFsxXSk7CiAJaWNlLT5ncGlvLmRpcmVjdGlvbiA9IGljZS0+Z3Bpby5zYXZlZFswXTsKIAlpY2UtPmdwaW8ud3JpdGVfbWFzayA9IGljZS0+Z3Bpby5zYXZlZFsxXTsKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiB9CiAKIC8qIGZvciBiaXQgY29udHJvbHMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwppbmRleCA3MWYwOGMwLi5mY2U2MTZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgpAQCAtNDg3LDcgKzQ4OCw3IEBACiAJaW50IGksIGNoczsKIAogCWNocyA9IHBhcmFtc19jaGFubmVscyhod19wYXJhbXMpOwotCWRvd24oJmljZS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5vcGVuX211dGV4KTsKIAkvKiBtYXJrIHN1cnJvdW5kIGNoYW5uZWxzICovCiAJaWYgKHN1YnN0cmVhbSA9PSBpY2UtPnBsYXliYWNrX3Byb19zdWJzdHJlYW0pIHsKIAkJLyogUERNQTAgY2FuIGJlIG11bHRpLWNoYW5uZWwgdXAgdG8gOCAqLwpAQCAtNDk1LDcgKzQ5Niw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBjaHM7IGkrKykgewogCQkJaWYgKGljZS0+cGNtX3Jlc2VydmVkW2ldICYmCiAJCQkgICAgaWNlLT5wY21fcmVzZXJ2ZWRbaV0gIT0gc3Vic3RyZWFtKSB7Ci0JCQkJdXAoJmljZS0+b3Blbl9tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZpY2UtPm9wZW5fbXV0ZXgpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCQlpY2UtPnBjbV9yZXNlcnZlZFtpXSA9IHN1YnN0cmVhbTsKQEAgLTUxMCw3ICs1MTEsNyBAQAogCQkJaWYgKGljZS0+cGxheWJhY2tfY29uX3N1YnN0cmVhbV9kc1tpXSA9PSBzdWJzdHJlYW0pIHsKIAkJCQlpZiAoaWNlLT5wY21fcmVzZXJ2ZWRbaV0gJiYKIAkJCQkgICAgaWNlLT5wY21fcmVzZXJ2ZWRbaV0gIT0gc3Vic3RyZWFtKSB7Ci0JCQkJCXVwKCZpY2UtPm9wZW5fbXV0ZXgpOworCQkJCQltdXRleF91bmxvY2soJmljZS0+b3Blbl9tdXRleCk7CiAJCQkJCXJldHVybiAtRUJVU1k7CiAJCQkJfQogCQkJCWljZS0+cGNtX3Jlc2VydmVkW2ldID0gc3Vic3RyZWFtOwpAQCAtNTE4LDcgKzUxOSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JdXAoJmljZS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPm9wZW5fbXV0ZXgpOwogCXNuZF92dDE3MjRfc2V0X3Byb19yYXRlKGljZSwgcGFyYW1zX3JhdGUoaHdfcGFyYW1zKSwgMCk7CiAJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CiB9CkBAIC01MjgsMTIgKzUyOSwxMiBAQAogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCWludCBpOwogCi0JZG93bigmaWNlLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPm9wZW5fbXV0ZXgpOwogCS8qIHVubWFyayBzdXJyb3VuZCBjaGFubmVscyAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJCWlmIChpY2UtPnBjbV9yZXNlcnZlZFtpXSA9PSBzdWJzdHJlYW0pCiAJCQlpY2UtPnBjbV9yZXNlcnZlZFtpXSA9IE5VTEw7Ci0JdXAoJmljZS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPm9wZW5fbXV0ZXgpOwogCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CiB9CiAKQEAgLTc3OCw3ICs3NzksNyBAQAogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbXNiaXRzKHJ1bnRpbWUsIDAsIDMyLCAyNCk7CiAJc2V0X3JhdGVfY29uc3RyYWludHMoaWNlLCBzdWJzdHJlYW0pOwotCWRvd24oJmljZS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5vcGVuX211dGV4KTsKIAkvKiBjYWxjdWxhdGUgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgY2hhbm5lbHMgKi8KIAlmb3IgKGNocyA9IDA7IGNocyA8IDM7IGNocysrKSB7CiAJCWlmIChpY2UtPnBjbV9yZXNlcnZlZFtjaHNdKQpAQCAtNzg4LDcgKzc4OSw3IEBACiAJcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gY2hzOwogCWlmIChjaHMgPiAyKSAvKiBjaGFubmVscyBtdXN0IGJlIGV2ZW4gKi8KIAkJc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLCAyKTsKLQl1cCgmaWNlLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+b3Blbl9tdXRleCk7CiAJc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUywKIAkJCQkgICBWVDE3MjRfQlVGRkVSX0FMSUdOKTsKIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfc3RlcChydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLApAQCAtMTEyOCwxMyArMTEyOSwxMyBAQAogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAKLQlkb3duKCZpY2UtPm9wZW5fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+b3Blbl9tdXRleCk7CiAJLyogYWxyZWFkeSB1c2VkIGJ5IFBETUEwPyAqLwogCWlmIChpY2UtPnBjbV9yZXNlcnZlZFtzdWJzdHJlYW0tPm51bWJlcl0pIHsKLQkJdXAoJmljZS0+b3Blbl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmaWNlLT5vcGVuX211dGV4KTsKIAkJcmV0dXJuIC1FQlVTWTsgLyogRklYTUU6IHNob3VsZCBoYW5kbGUgYmxvY2tpbmcgbW9kZSBwcm9wZXJseSAqLwogCX0KLQl1cCgmaWNlLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+b3Blbl9tdXRleCk7CiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gJnZ0MTcyNF9wbGF5YmFja19kbWFfcmVnc1tzdWJzdHJlYW0tPm51bWJlcl07CiAJaWNlLT5wbGF5YmFja19jb25fc3Vic3RyZWFtX2RzW3N1YnN0cmVhbS0+bnVtYmVyXSA9IHN1YnN0cmVhbTsKIAlydW50aW1lLT5odyA9IHNuZF92dDE3MjRfMmNoX3N0ZXJlbzsKQEAgLTE5NzgsMTIgKzE5NzksMTIgQEAKIHsKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAotCWRvd24oJmljZS0+aTJjX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmkyY19tdXRleCk7CiAJb3V0YihhZGRyLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0JZVEVfQUREUikpOwogCW91dGIoZGV2ICYgflZUMTcyNF9JMkNfV1JJVEUsIElDRVJFRzE3MjQoaWNlLCBJMkNfREVWX0FERFIpKTsKIAl3YWl0X2kyY19idXN5KGljZSk7CiAJdmFsID0gaW5iKElDRVJFRzE3MjQoaWNlLCBJMkNfREFUQSkpOwotCXVwKCZpY2UtPmkyY19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmkyY19tdXRleCk7CiAJLy9wcmludGsoImkyY19yZWFkOiBbMHgleCwweCV4XSA9IDB4JXhcbiIsIGRldiwgYWRkciwgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQpAQCAtMTk5MSwxNCArMTk5MiwxNCBAQAogdm9pZCBzbmRfdnQxNzI0X3dyaXRlX2kyYyhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwKIAkJCSAgdW5zaWduZWQgY2hhciBkZXYsIHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKQogewotCWRvd24oJmljZS0+aTJjX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmkyY19tdXRleCk7CiAJd2FpdF9pMmNfYnVzeShpY2UpOwogCS8vcHJpbnRrKCJpMmNfd3JpdGU6IFsweCV4LDB4JXhdID0gMHgleFxuIiwgZGV2LCBhZGRyLCBkYXRhKTsKIAlvdXRiKGFkZHIsIElDRVJFRzE3MjQoaWNlLCBJMkNfQllURV9BRERSKSk7CiAJb3V0YihkYXRhLCBJQ0VSRUcxNzI0KGljZSwgSTJDX0RBVEEpKTsKIAlvdXRiKGRldiB8IFZUMTcyNF9JMkNfV1JJVEUsIElDRVJFRzE3MjQoaWNlLCBJMkNfREVWX0FERFIpKTsKIAl3YWl0X2kyY19idXN5KGljZSk7Ci0JdXAoJmljZS0+aTJjX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+aTJjX211dGV4KTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX3Z0MTcyNF9yZWFkX2VlcHJvbShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwKQEAgLTIyMjksOSArMjIzMCw5IEBACiAJfQogCWljZS0+dnQxNzI0ID0gMTsKIAlzcGluX2xvY2tfaW5pdCgmaWNlLT5yZWdfbG9jayk7Ci0JaW5pdF9NVVRFWCgmaWNlLT5ncGlvX211dGV4KTsKLQlpbml0X01VVEVYKCZpY2UtPm9wZW5fbXV0ZXgpOwotCWluaXRfTVVURVgoJmljZS0+aTJjX211dGV4KTsKKwltdXRleF9pbml0KCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2luaXQoJmljZS0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmaWNlLT5pMmNfbXV0ZXgpOwogCWljZS0+Z3Bpby5zZXRfbWFzayA9IHNuZF92dDE3MjRfc2V0X2dwaW9fbWFzazsKIAlpY2UtPmdwaW8uc2V0X2RpciA9IHNuZF92dDE3MjRfc2V0X2dwaW9fZGlyOwogCWljZS0+Z3Bpby5zZXRfZGF0YSA9IHNuZF92dDE3MjRfc2V0X2dwaW9fZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3BoYXNlLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9waGFzZS5jCmluZGV4IGVjMzc1NzguLjUwMmRhMWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3BoYXNlLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvcGhhc2UuYwpAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KIAogI2luY2x1ZGUgImljZTE3MTIuaCIKQEAgLTI3Myw5ICsyNzUsOSBAQAogewogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKHdtX2dldChpY2UsIFdNX01VVEUpICYgMHgxMCkgPyAwIDogMTsKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4NCwxMSArNTg2LDExIEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJdW5zaWduZWQgc2hvcnQgdmFsOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXZhbCA9IHdtX2dldChpY2UsIFdNX0RBQ19ESUdfTUFTVEVSX0FUVEVOKSAmIDB4ZmY7CiAJdmFsID0gdmFsID4gUENNX01JTiA/ICh2YWwgLSBQQ01fTUlOKSA6IDA7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSB2YWw7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9wb250aXMuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL3BvbnRpcy5jCmluZGV4IDBkY2NkNzcuLmQyM2ZiM2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3BvbnRpcy5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL3BvbnRpcy5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KIApAQCAtMTI0LDEzICsxMjYsMTMgQEAKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAJaW50IGk7CiAKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQl2YWwgPSB3bV9nZXQoaWNlLCBXTV9EQUNfQVRURU5fTCArIGkpICYgMHhmZjsKIAkJdmFsID0gdmFsID4gREFDX01JTiA/ICh2YWwgLSBEQUNfTUlOKSA6IDA7CiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldID0gdmFsOwogCX0KLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MCw3ICsxNDIsNyBAQAogCXVuc2lnbmVkIHNob3J0IG92YWwsIG52YWw7CiAJaW50IGksIGlkeCwgY2hhbmdlID0gMDsKIAotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCW52YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXTsKIAkJbnZhbCA9IChudmFsID8gKG52YWwgKyBEQUNfTUlOKSA6IDApICYgMHhmZjsKQEAgLTE1Miw3ICsxNTQsNyBAQAogCQkJY2hhbmdlID0gMTsKIAkJfQogCX0KLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIApAQCAtMTc5LDEzICsxODEsMTMgQEAKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAJaW50IGk7CiAKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQl2YWwgPSB3bV9nZXQoaWNlLCBXTV9BRENfQVRURU5fTCArIGkpICYgMHhmZjsKIAkJdmFsID0gdmFsID4gQURDX01JTiA/ICh2YWwgLSBBRENfTUlOKSA6IDA7CiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldID0gdmFsOwogCX0KLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NSw3ICsxOTcsNyBAQAogCXVuc2lnbmVkIHNob3J0IG92b2wsIG52b2w7CiAJaW50IGksIGlkeCwgY2hhbmdlID0gMDsKIAotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCW52b2wgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXTsKIAkJbnZvbCA9IG52b2wgPyAobnZvbCArIEFEQ19NSU4pIDogMDsKQEAgLTIwNiw3ICsyMDgsNyBAQAogCQkJY2hhbmdlID0gMTsKIAkJfQogCX0KLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIGNoYW5nZTsKIH0KIApAQCAtMjI3LDkgKzIyOSw5IEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGJpdCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKHdtX2dldChpY2UsIFdNX0FEQ19NVVgpICYgKDEgPDwgYml0KSkgPyAxIDogMDsKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MCw3ICsyNDIsNyBAQAogCXVuc2lnbmVkIHNob3J0IG92YWwsIG52YWw7CiAJaW50IGNoYW5nZTsKIAotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAludmFsID0gb3ZhbCA9IHdtX2dldChpY2UsIFdNX0FEQ19NVVgpOwogCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKIAkJbnZhbCB8PSAoMSA8PCBiaXQpOwpAQCAtMjUwLDcgKzI1Miw3IEBACiAJaWYgKGNoYW5nZSkgewogCQl3bV9wdXQoaWNlLCBXTV9BRENfTVVYLCBudmFsKTsKIAl9Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzAsOSArMjcyLDkgQEAKIHsKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9ICh3bV9nZXQoaWNlLCBXTV9PVVRfTVVYKSAmIDB4MDQpID8gMSA6IDA7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yODIsNyArMjg0LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCB2YWwsIG92YWw7CiAJaW50IGNoYW5nZSA9IDA7CiAKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJdmFsID0gb3ZhbCA9IHdtX2dldChpY2UsIFdNX09VVF9NVVgpOwogCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKIAkJdmFsIHw9IDB4MDQ7CkBAIC0yOTIsNyArMjk0LDcgQEAKIAkJd21fcHV0KGljZSwgV01fT1VUX01VWCwgdmFsKTsKIAkJY2hhbmdlID0gMTsKIAl9Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiBjaGFuZ2U7CiB9CiAKQEAgLTMxMiw5ICszMTQsOSBAQAogewogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKHdtX2dldChpY2UsIFdNX0RBQ19DVFJMMSkgJiAweGYwKSAhPSAweDkwOwotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI0LDcgKzMyNiw3IEBACiAJdW5zaWduZWQgc2hvcnQgdmFsLCBvdmFsOwogCWludCBjaGFuZ2UgPSAwOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCW92YWwgPSB3bV9nZXQoaWNlLCBXTV9EQUNfQ1RSTDEpOwogCXZhbCA9IG92YWwgJiAweDBmOwogCWlmICh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKQEAgLTMzNiw3ICszMzgsNyBAQAogCQl3bV9wdXRfbm9jYWNoZShpY2UsIFdNX0RBQ19DVFJMMSwgdmFsKTsKIAkJY2hhbmdlID0gMTsKIAl9Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiBjaGFuZ2U7CiB9CiAKQEAgLTQ0OSw5ICs0NTEsOSBAQAogewogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSBpY2UtPmdwaW8uc2F2ZWRbMF07Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC00NjEsMTQgKzQ2MywxNCBAQAogCXVuc2lnbmVkIGNoYXIgdmFsOwogCWludCBjaGFuZ2UgPSAwOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCWlmICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICE9IGljZS0+Z3Bpby5zYXZlZFswXSkgewogCQlpY2UtPmdwaW8uc2F2ZWRbMF0gPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdICYgMzsKIAkJdmFsID0gMHg4MCB8IChpY2UtPmdwaW8uc2F2ZWRbMF0gPDwgMyk7CiAJCXNwaV93cml0ZShpY2UsIENTX0RFViwgMHgwNCwgdmFsKTsKIAkJY2hhbmdlID0gMTsKIAl9Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC00ODgsMTAgKzQ5MCwxMCBAQAogc3RhdGljIGludCBwb250aXNfZ3Bpb19tYXNrX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCS8qIDQtNyByZXNlcnZlZCAqLwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKH5pY2UtPmdwaW8ud3JpdGVfbWFzayAmIDB4ZmZmZikgfCAweDAwZjA7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCQpAQCAtNTAwLDIyICs1MDIsMjIgQEAKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCWludCBjaGFuZ2VkOwotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAkvKiA0LTcgcmVzZXJ2ZWQgKi8KIAl2YWwgPSAofnVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgMHhmZmZmKSB8IDB4MDBmMDsKIAljaGFuZ2VkID0gdmFsICE9IGljZS0+Z3Bpby53cml0ZV9tYXNrOwogCWljZS0+Z3Bpby53cml0ZV9tYXNrID0gdmFsOwotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAogc3RhdGljIGludCBwb250aXNfZ3Bpb19kaXJfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJLyogNC03IHJlc2VydmVkICovCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBpY2UtPmdwaW8uZGlyZWN0aW9uICYgMHhmZjBmOwotCXVwKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X3VubG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIAkKQEAgLTUyNCwyMyArNTI2LDIzIEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgY2hhbmdlZDsKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJLyogNC03IHJlc2VydmVkICovCiAJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJiAweGZmMGY7CiAJY2hhbmdlZCA9ICh2YWwgIT0gaWNlLT5ncGlvLmRpcmVjdGlvbik7CiAJaWNlLT5ncGlvLmRpcmVjdGlvbiA9IHZhbDsKLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKIHN0YXRpYyBpbnQgcG9udGlzX2dwaW9fZGF0YV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWRvd24oJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfbG9jaygmaWNlLT5ncGlvX211dGV4KTsKIAlzbmRfaWNlMTcxMl9ncGlvX3NldF9kaXIoaWNlLCBpY2UtPmdwaW8uZGlyZWN0aW9uKTsKIAlzbmRfaWNlMTcxMl9ncGlvX3NldF9tYXNrKGljZSwgaWNlLT5ncGlvLndyaXRlX21hc2spOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gc25kX2ljZTE3MTJfZ3Bpb19yZWFkKGljZSkgJiAweGZmZmY7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC01NDksNyArNTUxLDcgQEAKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAl1bnNpZ25lZCBpbnQgdmFsLCBudmFsOwogCWludCBjaGFuZ2VkID0gMDsKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJc25kX2ljZTE3MTJfZ3Bpb19zZXRfZGlyKGljZSwgaWNlLT5ncGlvLmRpcmVjdGlvbik7CiAJc25kX2ljZTE3MTJfZ3Bpb19zZXRfbWFzayhpY2UsIGljZS0+Z3Bpby53cml0ZV9tYXNrKTsKIAl2YWwgPSBzbmRfaWNlMTcxMl9ncGlvX3JlYWQoaWNlKSAmIDB4ZmZmZjsKQEAgLTU1OCw3ICs1NjAsNyBAQAogCQlzbmRfaWNlMTcxMl9ncGlvX3dyaXRlKGljZSwgbnZhbCk7CiAJCWNoYW5nZWQgPSAxOwogCX0KLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTY1MSwxNCArNjUzLDE0IEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSAoc3RydWN0IHNuZF9pY2UxNzEyICopZW50cnktPnByaXZhdGVfZGF0YTsKIAljaGFyIGxpbmVbNjRdOwogCXVuc2lnbmVkIGludCByZWcsIHZhbDsKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJd2hpbGUgKCFzbmRfaW5mb19nZXRfbGluZShidWZmZXIsIGxpbmUsIHNpemVvZihsaW5lKSkpIHsKIAkJaWYgKHNzY2FuZihsaW5lLCAiJXggJXgiLCAmcmVnLCAmdmFsKSAhPSAyKQogCQkJY29udGludWU7CiAJCWlmIChyZWcgPD0gMHgxNyAmJiB2YWwgPD0gMHhmZmZmKQogCQkJd21fcHV0KGljZSwgcmVnLCB2YWwpOwogCX0KLQl1cCgmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmljZS0+Z3Bpb19tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdtX3Byb2NfcmVnc19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKQEAgLTY2NiwxMiArNjY4LDEyIEBACiAJc3RydWN0IHNuZF9pY2UxNzEyICppY2UgPSAoc3RydWN0IHNuZF9pY2UxNzEyICopZW50cnktPnByaXZhdGVfZGF0YTsKIAlpbnQgcmVnLCB2YWw7CiAKLQlkb3duKCZpY2UtPmdwaW9fbXV0ZXgpOworCW11dGV4X2xvY2soJmljZS0+Z3Bpb19tdXRleCk7CiAJZm9yIChyZWcgPSAwOyByZWcgPD0gMHgxNzsgcmVnKyspIHsKIAkJdmFsID0gd21fZ2V0KGljZSwgcmVnKTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiJTAyeCA9ICUwNHhcbiIsIHJlZywgdmFsKTsKIAl9Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCB3bV9wcm9jX2luaXQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCkBAIC02OTAsMTQgKzY5MiwxNCBAQAogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gKHN0cnVjdCBzbmRfaWNlMTcxMiAqKWVudHJ5LT5wcml2YXRlX2RhdGE7CiAJaW50IHJlZywgdmFsOwogCi0JZG93bigmaWNlLT5ncGlvX211dGV4KTsKKwltdXRleF9sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogCWZvciAocmVnID0gMDsgcmVnIDw9IDB4MjY7IHJlZysrKSB7CiAJCXZhbCA9IHNwaV9yZWFkKGljZSwgQ1NfREVWLCByZWcpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIlMDJ4ID0gJTAyeFxuIiwgcmVnLCB2YWwpOwogCX0KIAl2YWwgPSBzcGlfcmVhZChpY2UsIENTX0RFViwgMHg3Zik7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiJTAyeCA9ICUwMnhcbiIsIDB4N2YsIHZhbCk7Ci0JdXAoJmljZS0+Z3Bpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpY2UtPmdwaW9fbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBjc19wcm9jX2luaXQoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IDE3NDIzN2YuLmViYmYyY2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC0xNzgsNiArMTc4LDggQEAKICNkZWZpbmUgICBJQ0hfU0FNUExFX0NBUAkweDAwYzAwMDAwCS8qIElDSDQ6IHNhbXBsZSBjYXBhYmlsaXR5IGJpdHMgKFJPKSAqLwogI2RlZmluZSAgIElDSF9TQU1QTEVfMTZfMjAJMHgwMDQwMDAwMAkvKiBJQ0g0OiAxNi0gYW5kIDIwLWJpdCBzYW1wbGVzICovCiAjZGVmaW5lICAgSUNIX01VTFRJQ0hBTl9DQVAJMHgwMDMwMDAwMAkvKiBJQ0g0OiBtdWx0aS1jaGFubmVsIGNhcGFiaWxpdHkgYml0cyAoUk8pICovCisjZGVmaW5lICAgSUNIX1NJU19UUkkJCTB4MDAwODAwMDAJLyogU0lTOiB0ZXJ0aWFyeSByZXN1bWUgaXJxICovCisjZGVmaW5lICAgSUNIX1NJU19UQ1IJCTB4MDAwNDAwMDAJLyogU0lTOiB0ZXJ0aWFyeSBjb2RlYyByZWFkeSAqLwogI2RlZmluZSAgIElDSF9NRDMJCTB4MDAwMjAwMDAJLyogbW9kZW0gcG93ZXIgZG93biBzZW1hcGhvcmUgKi8KICNkZWZpbmUgICBJQ0hfQUQzCQkweDAwMDEwMDAwCS8qIGF1ZGlvIHBvd2VyIGRvd24gc2VtYXBob3JlICovCiAjZGVmaW5lICAgSUNIX1JDUwkJMHgwMDAwODAwMAkvKiByZWFkIGNvbXBsZXRpb24gc3RhdHVzICovCkBAIC0zOTgsNiArNDAwLDEwIEBACiAJc3RydWN0IHNuZF9hYzk3X2J1cyAqYWM5N19idXM7CiAJc3RydWN0IHNuZF9hYzk3ICphYzk3WzNdOwogCXVuc2lnbmVkIGludCBhYzk3X3NkaW5bM107CisJdW5zaWduZWQgaW50IG1heF9jb2RlY3MsIG5jb2RlY3M7CisJdW5zaWduZWQgaW50ICpjb2RlY19iaXQ7CisJdW5zaWduZWQgaW50IGNvZGVjX2lzcl9iaXRzOworCXVuc2lnbmVkIGludCBjb2RlY19yZWFkeV9iaXRzOwogCiAJc3BpbmxvY2tfdCByZWdfbG9jazsKIAkKQEAgLTUxNiwxOCArNTIyLDYgQEAKICAqIGFjY2VzcyB0byBBQzk3IGNvZGVjIHZpYSBub3JtYWwgaS9vIChmb3IgSUNIIGFuZCBTSVM3MDEyKQogICovCiAKLS8qIHJldHVybiB0aGUgR0xPQl9TVEEgYml0IGZvciB0aGUgY29ycmVzcG9uZGluZyBjb2RlYyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBnZXRfaWNoX2NvZGVjX2JpdChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAsIHVuc2lnbmVkIGludCBjb2RlYykKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGNvZGVjX2JpdFszXSA9IHsKLQkJSUNIX1BDUiwgSUNIX1NDUiwgSUNIX1RDUgotCX07Ci0Jc25kX2Fzc2VydChjb2RlYyA8IDMsIHJldHVybiBJQ0hfUENSKTsKLQlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX0lOVEVMX0lDSDQpCi0JCWNvZGVjID0gY2hpcC0+YWM5N19zZGluW2NvZGVjXTsKLQlyZXR1cm4gY29kZWNfYml0W2NvZGVjXTsKLX0KLQogc3RhdGljIGludCBzbmRfaW50ZWw4eDBfY29kZWNfc2VtYXBob3JlKHN0cnVjdCBpbnRlbDh4MCAqY2hpcCwgdW5zaWduZWQgaW50IGNvZGVjKQogewogCWludCB0aW1lOwpAQCAtNTM3LDkgKzUzMSw5IEBACiAJaWYgKGNoaXAtPmluX3NkaW5faW5pdCkgewogCQkvKiB3ZSBkb24ndCBrbm93IHRoZSByZWFkeSBiaXQgYXNzaWdubWVudCBhdCB0aGUgbW9tZW50ICovCiAJCS8qIHNvIHdlIGNoZWNrIGFueSAqLwotCQljb2RlYyA9IElDSF9QQ1IgfCBJQ0hfU0NSIHwgSUNIX1RDUjsKKwkJY29kZWMgPSBjaGlwLT5jb2RlY19pc3JfYml0czsKIAl9IGVsc2UgewotCQljb2RlYyA9IGdldF9pY2hfY29kZWNfYml0KGNoaXAsIGNvZGVjKTsKKwkJY29kZWMgPSBjaGlwLT5jb2RlY19iaXRbY2hpcC0+YWM5N19zZGluW2NvZGVjXV07CiAJfQogCiAJLyogY29kZWMgcmVhZHkgPyAqLwpAQCAtNTk2LDcgKzU5MCw3IEBACiAJCWlmICgodG1wID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSkpKSAmIElDSF9SQ1MpIHsKIAkJCS8qIHJlc2V0IFJDUyBhbmQgcHJlc2VydmUgb3RoZXIgUi9XQyBiaXRzICovCiAJCQlpcHV0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSwgdG1wICYKLQkJCQkgIH4oSUNIX1NSSXxJQ0hfUFJJfElDSF9UUkl8SUNIX0dTQ0kpKTsKKwkJCQkgIH4oY2hpcC0+Y29kZWNfcmVhZHlfYml0cyB8IElDSF9HU0NJKSk7CiAJCQlpZiAoISBjaGlwLT5pbl9hYzk3X2luaXQpCiAJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY29kZWNfcmVhZCAlZDogcmVhZCB0aW1lb3V0IGZvciByZWdpc3RlciAweCV4XG4iLCBhYzk3LT5udW0sIHJlZyk7CiAJCQlyZXMgPSAweGZmZmY7CkBAIC02MDUsNyArNTk5LDggQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfaW50ZWw4eDBfY29kZWNfcmVhZF90ZXN0KHN0cnVjdCBpbnRlbDh4MCAqY2hpcCwgdW5zaWduZWQgaW50IGNvZGVjKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHNuZF9pbnRlbDh4MF9jb2RlY19yZWFkX3Rlc3Qoc3RydWN0IGludGVsOHgwICpjaGlwLAorCQkJCQkJICAgdW5zaWduZWQgaW50IGNvZGVjKQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKQEAgLTYxNCw3ICs2MDksNyBAQAogCQlpZiAoKHRtcCA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKSkgJiBJQ0hfUkNTKSB7CiAJCQkvKiByZXNldCBSQ1MgYW5kIHByZXNlcnZlIG90aGVyIFIvV0MgYml0cyAqLwogCQkJaXB1dGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSksIHRtcCAmCi0JCQkJICB+KElDSF9TUkl8SUNIX1BSSXxJQ0hfVFJJfElDSF9HU0NJKSk7CisJCQkJICB+KGNoaXAtPmNvZGVjX3JlYWR5X2JpdHMgfCBJQ0hfR1NDSSkpOwogCQl9CiAJfQogfQpAQCAtMjA3OCwyMyArMjA3MywyNCBAQAogCWlmIChjaGlwLT5kZXZpY2VfdHlwZSAhPSBERVZJQ0VfQUxJKSB7CiAJCWdsb2Jfc3RhID0gaWdldGR3b3JkKGNoaXAsIElDSFJFRyhHTE9CX1NUQSkpOwogCQlvcHMgPSAmc3RhbmRhcmRfYnVzX29wczsKLQkJaWYgKGNoaXAtPmRldmljZV90eXBlID09IERFVklDRV9JTlRFTF9JQ0g0KSB7Ci0JCQljb2RlY3MgPSAwOwotCQkJaWYgKGdsb2Jfc3RhICYgSUNIX1BDUikKLQkJCQljb2RlY3MrKzsKLQkJCWlmIChnbG9iX3N0YSAmIElDSF9TQ1IpCi0JCQkJY29kZWNzKys7Ci0JCQlpZiAoZ2xvYl9zdGEgJiBJQ0hfVENSKQotCQkJCWNvZGVjcysrOwotCQkJY2hpcC0+aW5fc2Rpbl9pbml0ID0gMTsKLQkJCWZvciAoaSA9IDA7IGkgPCBjb2RlY3M7IGkrKykgewotCQkJCXNuZF9pbnRlbDh4MF9jb2RlY19yZWFkX3Rlc3QoY2hpcCwgaSk7Ci0JCQkJY2hpcC0+YWM5N19zZGluW2ldID0gaWdldGJ5dGUoY2hpcCwgSUNIUkVHKFNETSkpICYgSUNIX0xESV9NQVNLOwotCQkJfQotCQkJY2hpcC0+aW5fc2Rpbl9pbml0ID0gMDsKLQkJfSBlbHNlIHsKLQkJCWNvZGVjcyA9IGdsb2Jfc3RhICYgSUNIX1NDUiA/IDIgOiAxOworCQljaGlwLT5pbl9zZGluX2luaXQgPSAxOworCQljb2RlY3MgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+bWF4X2NvZGVjczsgaSsrKSB7CisJCQlpZiAoISAoZ2xvYl9zdGEgJiBjaGlwLT5jb2RlY19iaXRbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNoaXAtPmRldmljZV90eXBlID09IERFVklDRV9JTlRFTF9JQ0g0KSB7CisJCQkJc25kX2ludGVsOHgwX2NvZGVjX3JlYWRfdGVzdChjaGlwLCBjb2RlY3MpOworCQkJCWNoaXAtPmFjOTdfc2Rpbltjb2RlY3NdID0KKwkJCQkJaWdldGJ5dGUoY2hpcCwgSUNIUkVHKFNETSkpICYgSUNIX0xESV9NQVNLOworCQkJCXNuZF9hc3NlcnQoY2hpcC0+YWM5N19zZGluW2NvZGVjc10gPCAzLAorCQkJCQkgICBjaGlwLT5hYzk3X3NkaW5bY29kZWNzXSA9IDApOworCQkJfSBlbHNlCisJCQkJY2hpcC0+YWM5N19zZGluW2NvZGVjc10gPSBpOworCQkJY29kZWNzKys7CiAJCX0KKwkJY2hpcC0+aW5fc2Rpbl9pbml0ID0gMDsKKwkJaWYgKCEgY29kZWNzKQorCQkJY29kZWNzID0gMTsKIAl9IGVsc2UgewogCQlvcHMgPSAmYWxpX2J1c19vcHM7CiAJCWNvZGVjcyA9IDE7CkBAIC0yMTIwLDYgKzIxMTYsNyBAQAogCWVsc2UKIAkJcGJ1cy0+ZHJhID0gMTsKIAljaGlwLT5hYzk3X2J1cyA9IHBidXM7CisJY2hpcC0+bmNvZGVjcyA9IGNvZGVjczsKIAogCWFjOTcucGNpID0gY2hpcC0+cGNpOwogCWZvciAoaSA9IDA7IGkgPCBjb2RlY3M7IGkrKykgewpAQCAtMjI2NCw3ICsyMjYxLDcgQEAKIAkJZW5kX3RpbWUgPSBqaWZmaWVzICsgSFo7CiAJCWRvIHsKIAkJCXN0YXR1cyA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKSAmCi0JCQkJKElDSF9QQ1IgfCBJQ0hfU0NSIHwgSUNIX1RDUik7CisJCQkJY2hpcC0+Y29kZWNfaXNyX2JpdHM7CiAJCQlpZiAoc3RhdHVzKQogCQkJCWJyZWFrOwogCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CkBAIC0yMjc2LDMyICsyMjczLDI3IEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCi0JCWlmIChjaGlwLT5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfSU5URUxfSUNINCkKLQkJCS8qIElDSDQgY2FuIGhhdmUgdGhyZWUgY29kZWNzICovCi0JCQluc3RhdHVzID0gSUNIX1BDUiB8IElDSF9TQ1IgfCBJQ0hfVENSOwotCQllbHNlCi0JCQkvKiBvdGhlcnMgdXAgdG8gdHdvIGNvZGVjcyAqLwotCQkJbnN0YXR1cyA9IElDSF9QQ1IgfCBJQ0hfU0NSOwotCiAJCS8qIHdhaXQgZm9yIG90aGVyIGNvZGVjcyByZWFkeSBzdGF0dXMuICovCiAJCWVuZF90aW1lID0gamlmZmllcyArIEhaIC8gNDsKLQkJd2hpbGUgKHN0YXR1cyAhPSBuc3RhdHVzICYmIHRpbWVfYWZ0ZXJfZXEoZW5kX3RpbWUsIGppZmZpZXMpKSB7CisJCXdoaWxlIChzdGF0dXMgIT0gY2hpcC0+Y29kZWNfaXNyX2JpdHMgJiYKKwkJICAgICAgIHRpbWVfYWZ0ZXJfZXEoZW5kX3RpbWUsIGppZmZpZXMpKSB7CiAJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKLQkJCXN0YXR1cyB8PSBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKEdMT0JfU1RBKSkgJiBuc3RhdHVzOworCQkJc3RhdHVzIHw9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKSAmCisJCQkJY2hpcC0+Y29kZWNfaXNyX2JpdHM7CiAJCX0KIAogCX0gZWxzZSB7CiAJCS8qIHJlc3VtZSBwaGFzZSAqLwogCQlpbnQgaTsKIAkJc3RhdHVzID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGNoaXAtPm5jb2RlY3M7IGkrKykKIAkJCWlmIChjaGlwLT5hYzk3W2ldKQotCQkJCXN0YXR1cyB8PSBnZXRfaWNoX2NvZGVjX2JpdChjaGlwLCBpKTsKKwkJCQlzdGF0dXMgfD0gY2hpcC0+Y29kZWNfYml0W2NoaXAtPmFjOTdfc2RpbltpXV07CiAJCS8qIHdhaXQgdW50aWwgYWxsIHRoZSBwcm9iZWQgY29kZWNzIGFyZSByZWFkeSAqLwogCQllbmRfdGltZSA9IGppZmZpZXMgKyBIWjsKIAkJZG8gewogCQkJbnN0YXR1cyA9IGlnZXRkd29yZChjaGlwLCBJQ0hSRUcoR0xPQl9TVEEpKSAmCi0JCQkJKElDSF9QQ1IgfCBJQ0hfU0NSIHwgSUNIX1RDUik7CisJCQkJY2hpcC0+Y29kZWNfaXNyX2JpdHM7CiAJCQlpZiAoc3RhdHVzID09IG5zdGF0dXMpCiAJCQkJYnJlYWs7CiAJCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKQEAgLTIzNTksNyArMjM1MSw3IEBACiAKIHN0YXRpYyBpbnQgc25kX2ludGVsOHgwX2NoaXBfaW5pdChzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAsIGludCBwcm9iaW5nKQogewotCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBpLCB0aW1lb3V0OwogCWludCBlcnI7CiAJCiAJaWYgKGNoaXAtPmRldmljZV90eXBlICE9IERFVklDRV9BTEkpIHsKQEAgLTIzNzcsNiArMjM2OSwxNSBAQAogCS8qIHJlc2V0IGNoYW5uZWxzICovCiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPmJkYmFyc19jb3VudDsgaSsrKQogCQlpcHV0Ynl0ZShjaGlwLCBJQ0hfUkVHX09GRl9DUiArIGNoaXAtPmljaGRbaV0ucmVnX29mZnNldCwgSUNIX1JFU0VUUkVHUyk7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmJkYmFyc19jb3VudDsgaSsrKSB7CisJICAgICAgICB0aW1lb3V0ID0gMTAwMDAwOworCSAgICAgICAgd2hpbGUgKC0tdGltZW91dCAhPSAwKSB7CisgICAgICAgIAkJaWYgKChpZ2V0Ynl0ZShjaGlwLCBJQ0hfUkVHX09GRl9DUiArIGNoaXAtPmljaGRbaV0ucmVnX29mZnNldCkgJiBJQ0hfUkVTRVRSRUdTKSA9PSAwKQorICAgICAgICAJCSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImludGVsOHgwOiByZXNldCBvZiByZWdpc3RlcnMgZmFpbGVkP1xuIik7CisgICAgICAgIH0KIAkvKiBpbml0aWFsaXplIEJ1ZmZlciBEZXNjcmlwdG9yIExpc3RzICovCiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPmJkYmFyc19jb3VudDsgaSsrKQogCQlpcHV0ZHdvcmQoY2hpcCwgSUNIX1JFR19PRkZfQkRCQVIgKyBjaGlwLT5pY2hkW2ldLnJlZ19vZmZzZXQsCkBAIC0yNDQ3LDcgKzI0NDgsNyBAQAogCQkJfQogCQl9CiAJfQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm5jb2RlY3M7IGkrKykKIAkJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3W2ldKTsKIAlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX0lOVEVMX0lDSDQpCiAJCWNoaXAtPnNkbV9zYXZlZCA9IGlnZXRieXRlKGNoaXAsIElDSFJFRyhTRE0pKTsKQEAgLTI0ODgsNyArMjQ4OSw3IEBACiAJaWYgKGNoaXAtPmZpeF9ub2NhY2hlKQogCQlmaWxsX25vY2FjaGUoY2hpcC0+YmRiYXJzLmFyZWEsIGNoaXAtPmJkYmFycy5ieXRlcywgMSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5uY29kZWNzOyBpKyspCiAJCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3W2ldKTsKIAogCS8qIHJlZmlsbCBub2NhY2hlICovCkBAIC0yNjE5LDEyICsyNjIwLDIwIEBACiAJc25kX2lwcmludGYoYnVmZmVyLCAiR2xvYmFsIHN0YXR1cyAgICAgICAgIDogMHglMDh4XG4iLCB0bXApOwogCWlmIChjaGlwLT5kZXZpY2VfdHlwZSA9PSBERVZJQ0VfSU5URUxfSUNINCkKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiU0RNICAgICAgICAgICAgICAgICAgIDogMHglMDh4XG4iLCBpZ2V0ZHdvcmQoY2hpcCwgSUNIUkVHKFNETSkpKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBQyc5NyBjb2RlY3MgcmVhZHkgICAgOiVzJXMlcyVzXG4iLAotCQkJdG1wICYgSUNIX1BDUiA/ICIgcHJpbWFyeSIgOiAiIiwKLQkJCXRtcCAmIElDSF9TQ1IgPyAiIHNlY29uZGFyeSIgOiAiIiwKLQkJCXRtcCAmIElDSF9UQ1IgPyAiIHRlcnRpYXJ5IiA6ICIiLAotCQkJKHRtcCAmIChJQ0hfUENSIHwgSUNIX1NDUiB8IElDSF9UQ1IpKSA9PSAwID8gIiBub25lIiA6ICIiKTsKLQlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX0lOVEVMX0lDSDQpCisJc25kX2lwcmludGYoYnVmZmVyLCAiQUMnOTcgY29kZWNzIHJlYWR5ICAgIDoiKTsKKwlpZiAodG1wICYgY2hpcC0+Y29kZWNfaXNyX2JpdHMpIHsKKwkJaW50IGk7CisJCXN0YXRpYyBjb25zdCBjaGFyICpjb2RlY3NbM10gPSB7CisJCQkicHJpbWFyeSIsICJzZWNvbmRhcnkiLCAidGVydGlhcnkiCisJCX07CisJCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5tYXhfY29kZWNzOyBpKyspCisJCQlpZiAodG1wICYgY2hpcC0+Y29kZWNfYml0W2ldKQorCQkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlcyIsIGNvZGVjc1tpXSk7CisJfSBlbHNlCisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiBub25lIik7CisJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKKwlpZiAoY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX0lOVEVMX0lDSDQgfHwKKwkgICAgY2hpcC0+ZGV2aWNlX3R5cGUgPT0gREVWSUNFX1NJUykKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiQUMnOTcgY29kZWNzIFNESU4gICAgIDogJWkgJWkgJWlcbiIsCiAJCQljaGlwLT5hYzk3X3NkaW5bMF0sCiAJCQljaGlwLT5hYzk3X3NkaW5bMV0sCkBAIC0yNjUzLDYgKzI2NjIsMTMgQEAKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBpY2hfY29kZWNfYml0c1szXSA9IHsKKwlJQ0hfUENSLCBJQ0hfU0NSLCBJQ0hfVENSCit9Oworc3RhdGljIHVuc2lnbmVkIGludCBzaXNfY29kZWNfYml0c1szXSA9IHsKKwlJQ0hfUENSLCBJQ0hfU0NSLCBJQ0hfU0lTX1RDUgorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgc25kX2ludGVsOHgwX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCiAJCQkJCSBzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCQkgdW5zaWduZWQgbG9uZyBkZXZpY2VfdHlwZSwKQEAgLTI4MzUsNiArMjg1MSwyOSBAQAogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CiAKKwlzd2l0Y2goY2hpcC0+ZGV2aWNlX3R5cGUpIHsKKwljYXNlIERFVklDRV9JTlRFTF9JQ0g0OgorCQkvKiBJQ0g0IGNhbiBoYXZlIHRocmVlIGNvZGVjcyAqLworCQljaGlwLT5tYXhfY29kZWNzID0gMzsKKwkJY2hpcC0+Y29kZWNfYml0ID0gaWNoX2NvZGVjX2JpdHM7CisJCWNoaXAtPmNvZGVjX3JlYWR5X2JpdHMgPSBJQ0hfUFJJIHwgSUNIX1NSSSB8IElDSF9UUkk7CisJCWJyZWFrOworCWNhc2UgREVWSUNFX1NJUzoKKwkJLyogcmVjZW50IFNJUzcwMTIgY2FuIGhhdmUgdGhyZWUgY29kZWNzICovCisJCWNoaXAtPm1heF9jb2RlY3MgPSAzOworCQljaGlwLT5jb2RlY19iaXQgPSBzaXNfY29kZWNfYml0czsKKwkJY2hpcC0+Y29kZWNfcmVhZHlfYml0cyA9IElDSF9QUkkgfCBJQ0hfU1JJIHwgSUNIX1NJU19UUkk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIG90aGVycyB1cCB0byB0d28gY29kZWNzICovCisJCWNoaXAtPm1heF9jb2RlY3MgPSAyOworCQljaGlwLT5jb2RlY19iaXQgPSBpY2hfY29kZWNfYml0czsKKwkJY2hpcC0+Y29kZWNfcmVhZHlfYml0cyA9IElDSF9QUkkgfCBJQ0hfU1JJOworCQlicmVhazsKKwl9CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm1heF9jb2RlY3M7IGkrKykKKwkJY2hpcC0+Y29kZWNfaXNyX2JpdHMgfD0gY2hpcC0+Y29kZWNfYml0W2ldOworCiAJaWYgKChlcnIgPSBzbmRfaW50ZWw4eDBfY2hpcF9pbml0KGNoaXAsIDEpKSA8IDApIHsKIAkJc25kX2ludGVsOHgwX2ZyZWUoY2hpcCk7CiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDRlZGRiNTEuLjQ3MjFjMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtMzI1LDcgKzMyNiw3IEBACiAgICAgICAgIGludCBpcnE7CiAKICAgICAgICAgc3BpbmxvY2tfdCAgICBsb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUgb3Blbl9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkvKiB0aW1lciBjYWxsYmFjayBmb3IgY2hlY2tpbmcgYWNrIG9mIHN0b3AgcmVxdWVzdCAqLwogCWludCBzdG9wX3BlbmRpbmdfY250OwkJLyogY291bnRlciBmb3Igc3RvcCBwZW5kaW5nIGNoZWNrICovCkBAIC02NjcsMTMgKzY2OCwxMyBAQAogewogCUsxMjEyX0RFQlVHX1BSSU5USygiSzEyMTJfREVCVUc6IE9wZW5DYXJkIFslc10gJWRcbiIsCiAJCQkgICBzdGF0ZU5hbWVba29yZzEyMTItPmNhcmRTdGF0ZV0sIGtvcmcxMjEyLT5vcGVuY250KTsKLQlkb3duKCZrb3JnMTIxMi0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygma29yZzEyMTItPm9wZW5fbXV0ZXgpOwogICAgICAgICBpZiAoa29yZzEyMTItPm9wZW5jbnQrKyA9PSAwKSB7CiAJCXNuZF9rb3JnMTIxMl9UdXJuT2ZmSWRsZU1vbml0b3Ioa29yZzEyMTIpOwogCQlzbmRfa29yZzEyMTJfc2V0Q2FyZFN0YXRlKGtvcmcxMjEyLCBLMTIxMl9TVEFURV9PUEVOKTsKIAl9CiAKLQl1cCgma29yZzEyMTItPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygma29yZzEyMTItPm9wZW5fbXV0ZXgpOwogICAgICAgICByZXR1cm4gMTsKIH0KIApAQCAtNjgyLDkgKzY4Myw5IEBACiAJSzEyMTJfREVCVUdfUFJJTlRLKCJLMTIxMl9ERUJVRzogQ2xvc2VDYXJkIFslc10gJWRcbiIsCiAJCQkgICBzdGF0ZU5hbWVba29yZzEyMTItPmNhcmRTdGF0ZV0sIGtvcmcxMjEyLT5vcGVuY250KTsKIAotCWRvd24oJmtvcmcxMjEyLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZrb3JnMTIxMi0+b3Blbl9tdXRleCk7CiAJaWYgKC0tKGtvcmcxMjEyLT5vcGVuY250KSkgewotCQl1cCgma29yZzEyMTItPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmtvcmcxMjEyLT5vcGVuX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC02OTUsNyArNjk2LDcgQEAKIAkJCUsxMjEyX0RFQlVHX1BSSU5USygiSzEyMTJfREVCVUc6IENsb3NlQ2FyZCAtIFJDID0gJWQgWyVzXVxuIiwKIAkJCQkJICAgcmMsIHN0YXRlTmFtZVtrb3JnMTIxMi0+Y2FyZFN0YXRlXSk7CiAJCWlmIChyYyAhPSBLMTIxMl9DTURSRVRfU3VjY2VzcykgewotCQkJdXAoJmtvcmcxMjEyLT5vcGVuX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygma29yZzEyMTItPm9wZW5fbXV0ZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAJCX0KICAgICAgICAgfSBlbHNlIGlmIChrb3JnMTIxMi0+Y2FyZFN0YXRlID4gSzEyMTJfU1RBVEVfU0VUVVApIHsKQEAgLTcwNyw3ICs3MDgsNyBAQAogICAgICAgICAgICAgICAgIHNuZF9rb3JnMTIxMl9zZXRDYXJkU3RhdGUoa29yZzEyMTIsIEsxMjEyX1NUQVRFX1JFQURZKTsKIAl9CiAKLQl1cCgma29yZzEyMTItPm9wZW5fbXV0ZXgpOworCW11dGV4X3VubG9jaygma29yZzEyMTItPm9wZW5fbXV0ZXgpOwogICAgICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjE3OSw3ICsyMTgwLDcgQEAKIAogICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZrb3JnMTIxMi0+d2FpdCk7CiAgICAgICAgIHNwaW5fbG9ja19pbml0KCZrb3JnMTIxMi0+bG9jayk7Ci0JaW5pdF9NVVRFWCgma29yZzEyMTItPm9wZW5fbXV0ZXgpOworCW11dGV4X2luaXQoJmtvcmcxMjEyLT5vcGVuX211dGV4KTsKIAlpbml0X3RpbWVyKCZrb3JnMTIxMi0+dGltZXIpOwogCWtvcmcxMjEyLT50aW1lci5mdW5jdGlvbiA9IHNuZF9rb3JnMTIxMl90aW1lcl9mdW5jOwogCWtvcmcxMjEyLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpa29yZzEyMTI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWFlc3RybzMuYyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCmluZGV4IGQzZWYwY2MuLjhiYzA4NDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jCisrKyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMjY1Nyw4ICsyNjU4LDggQEAKIAkJcmV0dXJuIC1FSU87CiAKIAkvKiBjaGVjaywgaWYgd2UgY2FuIHJlc3RyaWN0IFBDSSBETUEgdHJhbnNmZXJzIHRvIDI4IGJpdHMgKi8KLQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4MGZmZmZmZmYpIDwgMCB8fAotCSAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCAweDBmZmZmZmZmKSA8IDApIHsKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKwkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhcmNoaXRlY3R1cmUgZG9lcyBub3Qgc3VwcG9ydCAyOGJpdCBQQ0kgYnVzbWFzdGVyIERNQVxuIik7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOWElPOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggYjIxOGUxZC4uNDNlZTNiMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC0yNSw3ICsyNSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtNTg5LDcgKzU5MSw3IEBACiAJLyogIHNldCB1cCBmb3JtYXQgZm9yIHRoZSBzdHJlYW0gKi8KIAlmb3JtYXQgPSBwYXJhbXNfZm9ybWF0KGh3KTsKIAotCWRvd24oJm1nci0+c2V0dXBfbXV0ZXgpOworCW11dGV4X2xvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCiAJLyogdXBkYXRlIHRoZSBzdHJlYW0gbGV2ZWxzICovCiAJaWYoIHN0cmVhbS0+cGNtX251bWJlciA8PSBNSVhBUlRfUENNX0RJR0lUQUwgKSB7CkBAIC02MjgsNyArNjMwLDcgQEAKIAkJCQlidWZmZXJpbmZvW2ldLmF2YWlsYWJsZV9sZW5ndGgsCiAJCQkJc3Vicy0+bnVtYmVyKTsKIAl9Ci0JdXAoJm1nci0+c2V0dXBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNzAwLDcgKzcwMiw3IEBACiAJaW50IGVyciA9IDA7CiAJaW50IHBjbV9udW1iZXI7CiAKLQlkb3duKCZtZ3ItPnNldHVwX211dGV4KTsKKwltdXRleF9sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAogCWlmICggcGNtID09IGNoaXAtPnBjbSApIHsKIAkJcGNtX251bWJlciA9IE1JWEFSVF9QQ01fQU5BTE9HOwpAQCAtNzU4LDcgKzc2MCw3IEBACiAJfQogCiAgX2V4aXRfb3BlbjoKLQl1cCgmbWdyLT5zZXR1cF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC03NzUsNyArNzc3LDcgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgcGNtX251bWJlcjsKIAotCWRvd24oJm1nci0+c2V0dXBfbXV0ZXgpOworCW11dGV4X2xvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCiAJaWYgKCBwY20gPT0gY2hpcC0+cGNtICkgewogCQlwY21fbnVtYmVyID0gTUlYQVJUX1BDTV9BTkFMT0c7CkBAIC04MzYsNyArODM4LDcgQEAKIAl9CiAKICBfZXhpdF9vcGVuOgotCXVwKCZtZ3ItPnNldHVwX211dGV4KTsKKwltdXRleF91bmxvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTg0OSw3ICs4NTEsNyBAQAogCXN0cnVjdCBtaXhhcnRfbWdyICptZ3IgPSBjaGlwLT5tZ3I7CiAJc3RydWN0IG1peGFydF9zdHJlYW0gKnN0cmVhbSA9IHN1YnMtPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCWRvd24oJm1nci0+c2V0dXBfbXV0ZXgpOworCW11dGV4X2xvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCiAJc25kX3ByaW50ZGQoInNuZF9taXhhcnRfY2xvc2UgQyVkL1AlZC9TdWIlZFxuIiwgY2hpcC0+Y2hpcF9pZHgsIHN0cmVhbS0+cGNtX251bWJlciwgc3Vicy0+bnVtYmVyKTsKIApAQCAtODY4LDcgKzg3MCw3IEBACiAJc3RyZWFtLT5zdGF0dXMgICAgPSBNSVhBUlRfU1RSRUFNX1NUQVRVU19GUkVFOwogCXN0cmVhbS0+c3Vic3RyZWFtID0gTlVMTDsKIAotCXVwKCZtZ3ItPnNldHVwX211dGV4KTsKKwltdXRleF91bmxvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjg4LDcgKzEyOTAsNyBAQAogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAKIAkvKiBjaGVjayBpZiB3ZSBjYW4gcmVzdHJpY3QgUENJIERNQSB0cmFuc2ZlcnMgdG8gMzIgYml0cyAqLwotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgMHhmZmZmZmZmZikgPCAwKSB7CisJaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMzJCSVRfTUFTSykgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgImFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IDMyYml0IFBDSSBidXNtYXN0ZXIgRE1BXG4iKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CiAJCXJldHVybiAtRU5YSU87CkBAIC0xMzM1LDEyICsxMzM3LDEyIEBACiAJbWdyLT5tc2dfZmlmb193cml0ZXB0ciA9IDA7CiAKIAlzcGluX2xvY2tfaW5pdCgmbWdyLT5tc2dfbG9jayk7Ci0JaW5pdF9NVVRFWCgmbWdyLT5tc2dfbXV0ZXgpOworCW11dGV4X2luaXQoJm1nci0+bXNnX211dGV4KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZ3ItPm1zZ19zbGVlcCk7CiAJYXRvbWljX3NldCgmbWdyLT5tc2dfcHJvY2Vzc2VkLCAwKTsKIAogCS8qIGluaXQgc2V0dXAgbXV0ZXgqLwotCWluaXRfTVVURVgoJm1nci0+c2V0dXBfbXV0ZXgpOworCW11dGV4X2luaXQoJm1nci0+c2V0dXBfbXV0ZXgpOwogCiAJLyogaW5pdCBtZXNzYWdlIHRhc2xrZXQgKi8KIAl0YXNrbGV0X2luaXQoJm1nci0+bXNnX3Rhc2txLCBzbmRfbWl4YXJ0X21zZ190YXNrbGV0LCAodW5zaWduZWQgbG9uZykgbWdyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmggYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5oCmluZGV4IDNlODQ4NjMuLjU2MTYzNGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmgKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuaApAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBfX1NPVU5EX01JWEFSVF9ICiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogCiAjZGVmaW5lIE1JWEFSVF9EUklWRVJfVkVSU0lPTgkweDAwMDEwMAkvKiAwLjEuMCAqLwpAQCAtOTIsOSArOTMsOSBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgICAgICAgLyogaW50ZXJydXB0IHNwaW5sb2NrICovCiAJc3BpbmxvY2tfdCBtc2dfbG9jazsgICAgICAgICAgLyogbWFpbGJveCBzcGlubG9jayAqLwotCXN0cnVjdCBzZW1hcGhvcmUgbXNnX211dGV4OyAgIC8qIG11dGV4IGZvciBibG9ja2luZ19yZXF1ZXN0cyAqLworCXN0cnVjdCBtdXRleCBtc2dfbXV0ZXg7ICAgLyogbXV0ZXggZm9yIGJsb2NraW5nX3JlcXVlc3RzICovCiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNldHVwX211dGV4OyAvKiBtdXRleCB1c2VkIGluIGh3X3BhcmFtcywgb3BlbiBhbmQgY2xvc2UgKi8KKwlzdHJ1Y3QgbXV0ZXggc2V0dXBfbXV0ZXg7IC8qIG11dGV4IHVzZWQgaW4gaHdfcGFyYW1zLCBvcGVuIGFuZCBjbG9zZSAqLwogCiAJLyogaGFyZHdhcmUgaW50ZXJmYWNlICovCiAJdW5zaWduZWQgaW50IGRzcF9sb2FkZWQ7ICAgICAgLyogYml0IGZsYWdzIG9mIGxvYWRlZCBkc3AgaW5kaWNlcyAqLwpAQCAtMTA3LDcgKzEwOCw3IEBACiAJaW50IHNhbXBsZV9yYXRlOwogCWludCByZWZfY291bnRfcmF0ZTsKIAotCXN0cnVjdCBzZW1hcGhvcmUgbWl4ZXJfbXV0ZXg7IC8qIG11dGV4IGZvciBtaXhlciAqLworCXN0cnVjdCBtdXRleCBtaXhlcl9tdXRleDsgLyogbXV0ZXggZm9yIG1peGVyICovCiAKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2NvcmUuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2NvcmUuYwppbmRleCAwN2M3MDdkLi40MDZhYzNhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9jb3JlLmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfY29yZS5jCkBAIC0yMiw2ICsyMiw4IEBACiAKICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgIm1peGFydC5oIgpAQCAtMjM5LDcgKzI0MSw3IEBACiAJd2FpdF9xdWV1ZV90IHdhaXQ7CiAJbG9uZyB0aW1lb3V0OwogCi0JZG93bigmbWdyLT5tc2dfbXV0ZXgpOworCW11dGV4X2xvY2soJm1nci0+bXNnX211dGV4KTsKIAogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKIApAQCAtMjQ4LDcgKzI1MCw3IEBACiAJZXJyID0gc2VuZF9tc2cobWdyLCByZXF1ZXN0LCBtYXhfcmVzcF9zaXplLCAxLCAmbXNnX2ZyYW1lKTsgIC8qIHNlbmQgYW5kIG1hcmsgdGhlIGFuc3dlciBwZW5kaW5nICovCiAJaWYgKGVycikgewogCQlzcGluX3VubG9ja19pcnEoJm1nci0+bXNnX2xvY2spOwotCQl1cCgmbWdyLT5tc2dfbXV0ZXgpOworCQltdXRleF91bmxvY2soJm1nci0+bXNnX211dGV4KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTI2MCw3ICsyNjIsNyBAQAogCiAJaWYgKCEgdGltZW91dCkgewogCQkvKiBlcnJvciAtIG5vIGFjayAqLwotCQl1cCgmbWdyLT5tc2dfbXV0ZXgpOworCQltdXRleF91bmxvY2soJm1nci0+bXNnX211dGV4KTsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiZXJyb3I6IG5vIHJlcG9uc2Ugb24gbXNnICV4XG4iLCBtc2dfZnJhbWUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0yNzYsNyArMjc4LDcgQEAKIAlpZiggcmVxdWVzdC0+bWVzc2FnZV9pZCAhPSByZXNwLm1lc3NhZ2VfaWQgKQogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJSRVBPTlNFIEVSUk9SIVxuIik7CiAKLQl1cCgmbWdyLT5tc2dfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbWdyLT5tc2dfbXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI5Miw3ICsyOTQsNyBAQAogCXNuZF9hc3NlcnQoKG5vdGlmX2V2ZW50ICYgTVNHX1RZUEVfTUFTSykgPT0gTVNHX1RZUEVfTk9USUZZLCByZXR1cm4gLUVJTlZBTCk7CiAJc25kX2Fzc2VydCgobm90aWZfZXZlbnQgJiBNU0dfQ0FOQ0VMX05PVElGWV9NQVNLKSA9PSAwLCByZXR1cm4gLUVJTlZBTCk7CiAKLQlkb3duKCZtZ3ItPm1zZ19tdXRleCk7CisJbXV0ZXhfbG9jaygmbWdyLT5tc2dfbXV0ZXgpOwogCiAJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOwogCkBAIC0zMDEsNyArMzAzLDcgQEAKIAllcnIgPSBzZW5kX21zZyhtZ3IsIHJlcXVlc3QsIE1TR19ERUZBVUxUX1NJWkUsIDEsICZub3RpZl9ldmVudCk7ICAvKiBzZW5kIGFuZCBtYXJrIHRoZSBub3RpZmljYXRpb24gZXZlbnQgcGVuZGluZyAqLwogCWlmKGVycikgewogCQlzcGluX3VubG9ja19pcnEoJm1nci0+bXNnX2xvY2spOwotCQl1cCgmbWdyLT5tc2dfbXV0ZXgpOworCQltdXRleF91bmxvY2soJm1nci0+bXNnX211dGV4KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTMxMywxMiArMzE1LDEyIEBACiAKIAlpZiAoISB0aW1lb3V0KSB7CiAJCS8qIGVycm9yIC0gbm8gYWNrICovCi0JCXVwKCZtZ3ItPm1zZ19tdXRleCk7CisJCW11dGV4X3VubG9jaygmbWdyLT5tc2dfbXV0ZXgpOwogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlcnJvcjogbm90aWZpY2F0aW9uICV4IG5vdCByZWNlaXZlZFxuIiwgbm90aWZfZXZlbnQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQl1cCgmbWdyLT5tc2dfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbWdyLT5tc2dfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9taXhlci5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfbWl4ZXIuYwppbmRleCAzNmE3ZTlkLi5lZDQ3YjczIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9taXhlci5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X21peGVyLmMKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAibWl4YXJ0LmgiCiAjaW5jbHVkZSAibWl4YXJ0X2NvcmUuaCIKQEAgLTM1Myw3ICszNTUsNyBAQAogc3RhdGljIGludCBtaXhhcnRfYW5hbG9nX3ZvbF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCBzbmRfbWl4YXJ0ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWRvd24oJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCWlmKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID09IDApIHsJLyogcGxheWJhY2sgKi8KIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5hbmFsb2dfcGxheWJhY2tfdm9sdW1lWzBdOwogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGNoaXAtPmFuYWxvZ19wbGF5YmFja192b2x1bWVbMV07CkBAIC0zNjEsNyArMzYzLDcgQEAKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5hbmFsb2dfY2FwdHVyZV92b2x1bWVbMF07CiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+YW5hbG9nX2NhcHR1cmVfdm9sdW1lWzFdOwogCX0KLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzcxLDcgKzM3Myw3IEBACiAJaW50IGNoYW5nZWQgPSAwOwogCWludCBpc19jYXB0dXJlLCBpOwogCi0JZG93bigmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJaXNfY2FwdHVyZSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAhPSAwKTsKIAlmb3IoaT0wOyBpPDI7IGkrKykgewogCQlpbnQgIG5ld192b2x1bWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXTsKQEAgLTM4Miw3ICszODQsNyBAQAogCQl9CiAJfQogCWlmKGNoYW5nZWQpCW1peGFydF91cGRhdGVfYW5hbG9nX2F1ZGlvX2xldmVsKGNoaXAsIGlzX2NhcHR1cmUpOwotCXVwKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiBjaGFuZ2VkOwogfQogCkBAIC00MDgsMTAgKzQxMCwxMCBAQAogewogCXN0cnVjdCBzbmRfbWl4YXJ0ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCi0JZG93bigmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5hbmFsb2dfcGxheWJhY2tfYWN0aXZlWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+YW5hbG9nX3BsYXliYWNrX2FjdGl2ZVsxXTsKLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE5LDcgKzQyMSw3IEBACiB7CiAJc3RydWN0IHNuZF9taXhhcnQgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGksIGNoYW5nZWQgPSAwOwotCWRvd24oJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCWZvcihpPTA7IGk8MjsgaSsrKSB7CiAJCWlmKGNoaXAtPmFuYWxvZ19wbGF5YmFja19hY3RpdmVbaV0gIT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV0pIHsKIAkJCWNoaXAtPmFuYWxvZ19wbGF5YmFja19hY3RpdmVbaV0gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXTsKQEAgLTQyNyw3ICs0MjksNyBAQAogCQl9CiAJfQogCWlmKGNoYW5nZWQpCW1peGFydF91cGRhdGVfYW5hbG9nX2F1ZGlvX2xldmVsKGNoaXAsIDApOyAvKiB1cGRhdGUgcGxheWJhY2sgbGV2ZWxzICovCi0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTgxNyw3ICs4MTksNyBAQAogCWludCAqc3RvcmVkX3ZvbHVtZTsKIAlpbnQgaXNfY2FwdHVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgTUlYQVJUX1ZPTF9SRUNfTUFTSzsKIAlpbnQgaXNfYWVzID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiBNSVhBUlRfVk9MX0FFU19NQVNLOwotCWRvd24oJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCWlmKGlzX2NhcHR1cmUpIHsKIAkJaWYoaXNfYWVzKQlzdG9yZWRfdm9sdW1lID0gY2hpcC0+ZGlnaXRhbF9jYXB0dXJlX3ZvbHVtZVsxXTsJLyogQUVTIGNhcHR1cmUgKi8KIAkJZWxzZQkJc3RvcmVkX3ZvbHVtZSA9IGNoaXAtPmRpZ2l0YWxfY2FwdHVyZV92b2x1bWVbMF07CS8qIGFuYWxvZyBjYXB0dXJlICovCkBAIC04MjgsNyArODMwLDcgQEAKIAl9CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzdG9yZWRfdm9sdW1lWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gc3RvcmVkX3ZvbHVtZVsxXTsKLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODQxLDcgKzg0Myw3IEBACiAJaW50IGlzX2FlcyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgTUlYQVJUX1ZPTF9BRVNfTUFTSzsKIAlpbnQqIHN0b3JlZF92b2x1bWU7CiAJaW50IGk7Ci0JZG93bigmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJaWYoaXNfY2FwdHVyZSkgewogCQlpZihpc19hZXMpCXN0b3JlZF92b2x1bWUgPSBjaGlwLT5kaWdpdGFsX2NhcHR1cmVfdm9sdW1lWzFdOwkvKiBBRVMgY2FwdHVyZSAqLwogCQllbHNlCQlzdG9yZWRfdm9sdW1lID0gY2hpcC0+ZGlnaXRhbF9jYXB0dXJlX3ZvbHVtZVswXTsJLyogYW5hbG9nIGNhcHR1cmUgKi8KQEAgLTg2MCw3ICs4NjIsNyBAQAogCQlpZihpc19jYXB0dXJlKQltaXhhcnRfdXBkYXRlX2NhcHR1cmVfc3RyZWFtX2xldmVsKGNoaXAsIGlzX2Flcyk7CiAJCWVsc2UJCW1peGFydF91cGRhdGVfcGxheWJhY2tfc3RyZWFtX2xldmVsKGNoaXAsIGlzX2FlcywgaWR4KTsKIAl9Ci0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTg4MCwxMiArODgyLDEyIEBACiAJc3RydWN0IHNuZF9taXhhcnQgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGlkeCA9IHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpOyAvKiBpbmRleCAqLwogCXNuZF9hc3NlcnQgKCBpZHggPCBNSVhBUlRfUExBWUJBQ0tfU1RSRUFNUyApOyAKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlpZihrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIE1JWEFSVF9WT0xfQUVTX01BU0spCS8qIEFFUyBwbGF5YmFjayAqLwogCQlpZHggKz0gTUlYQVJUX1BMQVlCQUNLX1NUUkVBTVM7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5kaWdpdGFsX3BsYXliYWNrX2FjdGl2ZVtpZHhdWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+ZGlnaXRhbF9wbGF5YmFja19hY3RpdmVbaWR4XVsxXTsKLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODk3LDcgKzg5OSw3IEBACiAJaW50IGlkeCA9IHNuZF9jdGxfZ2V0X2lvZmZpZHgoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpOyAvKiBpbmRleCAqLwogCWludCBpLCBqOwogCXNuZF9hc3NlcnQgKCBpZHggPCBNSVhBUlRfUExBWUJBQ0tfU1RSRUFNUyApOyAKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlqID0gaWR4OwogCWlmKGlzX2FlcykJaiArPSBNSVhBUlRfUExBWUJBQ0tfU1RSRUFNUzsKIAlmb3IoaT0wOyBpPDI7IGkrKykgewpAQCAtOTA3LDcgKzkwOSw3IEBACiAJCX0KIAl9CiAJaWYoY2hhbmdlZCkJbWl4YXJ0X3VwZGF0ZV9wbGF5YmFja19zdHJlYW1fbGV2ZWwoY2hpcCwgaXNfYWVzLCBpZHgpOwotCXVwKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiBjaGFuZ2VkOwogfQogCkBAIC05NTYsMTAgKzk1OCwxMCBAQAogc3RhdGljIGludCBtaXhhcnRfbW9uaXRvcl92b2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX21peGFydCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPm1vbml0b3Jpbmdfdm9sdW1lWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+bW9uaXRvcmluZ192b2x1bWVbMV07Ci0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk2OCw3ICs5NzAsNyBAQAogCXN0cnVjdCBzbmRfbWl4YXJ0ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2VkID0gMDsKIAlpbnQgaTsKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlmb3IoaT0wOyBpPDI7IGkrKykgewogCQlpZihjaGlwLT5tb25pdG9yaW5nX3ZvbHVtZVtpXSAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSkgewogCQkJY2hpcC0+bW9uaXRvcmluZ192b2x1bWVbaV0gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXTsKQEAgLTk3Niw3ICs5NzgsNyBAQAogCQkJY2hhbmdlZCA9IDE7CiAJCX0KIAl9Ci0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTk5NSwxMCArOTk3LDEwIEBACiBzdGF0aWMgaW50IG1peGFydF9tb25pdG9yX3N3X2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9taXhhcnQgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JZG93bigmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjaGlwLT5tb25pdG9yaW5nX2FjdGl2ZVswXTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGNoaXAtPm1vbml0b3JpbmdfYWN0aXZlWzFdOwotCXVwKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDA3LDcgKzEwMDksNyBAQAogCXN0cnVjdCBzbmRfbWl4YXJ0ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWludCBjaGFuZ2VkID0gMDsKIAlpbnQgaTsKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlmb3IoaT0wOyBpPDI7IGkrKykgewogCQlpZihjaGlwLT5tb25pdG9yaW5nX2FjdGl2ZVtpXSAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSkgewogCQkJY2hpcC0+bW9uaXRvcmluZ19hY3RpdmVbaV0gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXTsKQEAgLTEwMjksNyArMTAzMSw3IEBACiAJCX0KIAl9CiAKLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gKGNoYW5nZWQgIT0gMCk7CiB9CiAKQEAgLTEwNTksNyArMTA2MSw3IEBACiAJc3RydWN0IHNuZF9taXhhcnQgKmNoaXA7CiAJaW50IGVyciwgaTsKIAotCWluaXRfTVVURVgoJm1nci0+bWl4ZXJfbXV0ZXgpOyAvKiBjYW4gYmUgaW4gYW5vdGhlciBwbGFjZSAqLworCW11dGV4X2luaXQoJm1nci0+bWl4ZXJfbXV0ZXgpOyAvKiBjYW4gYmUgaW4gYW5vdGhlciBwbGFjZSAqLwogCiAJZm9yKGk9MDsgaTxtZ3ItPm51bV9jYXJkczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHRlbXA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCmluZGV4IDBkMGZmNTQuLmNjMjk3YWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCisrKyBiL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtMjI2LDYgKzIyOCw3IEBACiAJdW5zaWduZWQgaW50IHVzZV9jYWNoZTogMTsJLyogdXNlIG9uZSBiaWcgY29lZi4gdGFibGUgKi8KIAl1bnNpZ25lZCBpbnQgcmVzZXRfd29ya2Fyb3VuZDogMTsgLyogV29ya2Fyb3VuZCBmb3Igc29tZSBsYXB0b3BzIHRvIGF2b2lkIGZyZWV6ZSAqLwogCXVuc2lnbmVkIGludCByZXNldF93b3JrYXJvdW5kXzI6IDE7IC8qIEV4dGVuZGVkIHdvcmthcm91bmQgZm9yIHNvbWUgb3RoZXIgbGFwdG9wcyB0byBhdm9pZCBmcmVlemUgKi8KKwl1bnNpZ25lZCBpbnQgaW5fcmVzdW1lOiAxOwogCiAJaW50IG1peGVyX2Jhc2U7CQkJLyogcmVnaXN0ZXIgb2Zmc2V0IG9mIGFjOTcgbWl4ZXIgKi8KIAlpbnQgbWl4ZXJfc3RhdHVzX29mZnNldDsJLyogb2Zmc2V0IG9mIG1peGVyIHN0YXR1cyByZWcuICovCkBAIC0yMzUsMTEgKzIzOCwxMiBAQAogCWludCBpcnFfYWNrczsKIAlpcnFyZXR1cm5fdCAoKmludGVycnVwdCkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwogCWludCBiYWRpbnRyY291bnQ7CQkvKiBjb3VudGVyIHRvIGNoZWNrIGJvZ3VzIGludGVycnVwdHMgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGlycV9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXggaXJxX211dGV4OwogCiAJc3RydWN0IG5tMjU2X3N0cmVhbSBzdHJlYW1zWzJdOwogCiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OworCXVuc2lnbmVkIHNob3J0ICphYzk3X3JlZ3M7IC8qIHJlZ2lzdGVyIGNhY2hlcywgb25seSBmb3IgdmFsaWQgcmVncyAqLwogCiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIApAQCAtNDU5LDMyICs0NjMsMzIgQEAKIC8qIGFjcXVpcmUgaW50ZXJydXB0ICovCiBzdGF0aWMgaW50IHNuZF9ubTI1Nl9hY3F1aXJlX2lycShzdHJ1Y3Qgbm0yNTYgKmNoaXApCiB7Ci0JZG93bigmY2hpcC0+aXJxX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5pcnFfbXV0ZXgpOwogCWlmIChjaGlwLT5pcnEgPCAwKSB7CiAJCWlmIChyZXF1ZXN0X2lycShjaGlwLT5wY2ktPmlycSwgY2hpcC0+aW50ZXJydXB0LCBTQV9JTlRFUlJVUFR8U0FfU0hJUlEsCiAJCQkJY2hpcC0+Y2FyZC0+ZHJpdmVyLCBjaGlwKSkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgSVJRICVkXG4iLCBjaGlwLT5wY2ktPmlycSk7Ci0JCQl1cCgmY2hpcC0+aXJxX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmY2hpcC0+aXJxX211dGV4KTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJY2hpcC0+aXJxID0gY2hpcC0+cGNpLT5pcnE7CiAJfQogCWNoaXAtPmlycV9hY2tzKys7Ci0JdXAoJmNoaXAtPmlycV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pcnFfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCiAvKiByZWxlYXNlIGludGVycnVwdCAqLwogc3RhdGljIHZvaWQgc25kX25tMjU2X3JlbGVhc2VfaXJxKHN0cnVjdCBubTI1NiAqY2hpcCkKIHsKLQlkb3duKCZjaGlwLT5pcnFfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPmlycV9tdXRleCk7CiAJaWYgKGNoaXAtPmlycV9hY2tzID4gMCkKIAkJY2hpcC0+aXJxX2Fja3MtLTsKIAlpZiAoY2hpcC0+aXJxX2Fja3MgPT0gMCAmJiBjaGlwLT5pcnEgPj0gMCkgewogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwogCQljaGlwLT5pcnEgPSAtMTsKIAl9Ci0JdXAoJmNoaXAtPmlycV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pcnFfbXV0ZXgpOwogfQogCiAvKgpAQCAtMTE1MSwyMyArMTE1NSw2MyBAQAogCXJldHVybiAwOwogfQogCisvKiAKKyAqIEluaXRpYWwgcmVnaXN0ZXIgdmFsdWVzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEFDOTcgbWl4ZXIuCisgKiBXaGlsZSBtb3N0IG9mIHRoZXNlIGFyZSBpZGVudGljYWwgdG8gdGhlIHJlc2V0IHZhbHVlcywgd2UgZG8gdGhpcworICogc28gdGhhdCB3ZSBoYXZlIG1vc3Qgb2YgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIGNhY2hlZC0tdGhpcyBhdm9pZHMKKyAqIHJlYWRpbmcgZnJvbSB0aGUgbWl4ZXIgZGlyZWN0bHkgKHdoaWNoIHNlZW1zIHRvIGJlIHByb2JsZW1hdGljLAorICogcHJvYmFibHkgZHVlIHRvIGlnbm9yYW5jZSkuCisgKi8KKworc3RydWN0IGluaXRpYWxWYWx1ZXMgeworCXVuc2lnbmVkIHNob3J0IHJlZzsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5pdGlhbFZhbHVlcyBubTI1Nl9hYzk3X2luaXRfdmFsW10gPQoreworCXsgQUM5N19NQVNURVIsIAkJMHg4MDAwIH0sCisJeyBBQzk3X0hFQURQSE9ORSwJMHg4MDAwIH0sCisJeyBBQzk3X01BU1RFUl9NT05PLAkweDgwMDAgfSwKKwl7IEFDOTdfUENfQkVFUCwJCTB4ODAwMCB9LAorCXsgQUM5N19QSE9ORSwJCTB4ODAwOCB9LAorCXsgQUM5N19NSUMsCQkweDgwMDAgfSwKKwl7IEFDOTdfTElORSwJCTB4ODgwOCB9LAorCXsgQUM5N19DRCwJCTB4ODgwOCB9LAorCXsgQUM5N19WSURFTywJCTB4ODgwOCB9LAorCXsgQUM5N19BVVgsCQkweDg4MDggfSwKKwl7IEFDOTdfUENNLAkJMHg4ODA4IH0sCisJeyBBQzk3X1JFQ19TRUwsCQkweDAwMDAgfSwKKwl7IEFDOTdfUkVDX0dBSU4sCTB4MEIwQiB9LAorCXsgQUM5N19HRU5FUkFMX1BVUlBPU0UsCTB4MDAwMCB9LAorCXsgQUM5N18zRF9DT05UUk9MLAkweDgwMDAgfSwgCisJeyBBQzk3X1ZFTkRPUl9JRDEsIAkweDgzODQgfSwKKwl7IEFDOTdfVkVORE9SX0lEMiwJMHg3NjA5IH0sCit9OworCitzdGF0aWMgaW50IG5tMjU2X2FjOTdfaWR4KHVuc2lnbmVkIHNob3J0IHJlZykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShubTI1Nl9hYzk3X2luaXRfdmFsKTsgaSsrKQorCQlpZiAobm0yNTZfYWM5N19pbml0X3ZhbFtpXS5yZWcgPT0gcmVnKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCiAvKgorICogc29tZSBubTI1NiBlYXNpbHkgY3Jhc2ggd2hlbiByZWFkaW5nIGZyb20gbWl4ZXIgcmVnaXN0ZXJzCisgKiB0aHVzIHdlJ3JlIHRyZWF0aW5nIGl0IGFzIGEgd3JpdGUtb25seSBtaXhlciBhbmQgY2FjaGUgdGhlCisgKiB3cml0dGVuIHZhbHVlcwogICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQKIHNuZF9ubTI1Nl9hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcpCiB7CiAJc3RydWN0IG5tMjU2ICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwotCWludCByZXM7CisJaW50IGlkeCA9IG5tMjU2X2FjOTdfaWR4KHJlZyk7CiAKLQlpZiAocmVnID49IDEyOCkKKwlpZiAoaWR4IDwgMCkKIAkJcmV0dXJuIDA7Ci0KLQlpZiAoISBzbmRfbm0yNTZfYWM5N19yZWFkeShjaGlwKSkKLQkJcmV0dXJuIDA7Ci0JcmVzID0gc25kX25tMjU2X3JlYWR3KGNoaXAsIGNoaXAtPm1peGVyX2Jhc2UgKyByZWcpOwotCS8qIE1hZ2ljIGRlbGF5LiAgQmxlYWggeXVja3kuICAqLwotCW1zbGVlcCgxKTsKLQlyZXR1cm4gcmVzOworCXJldHVybiBjaGlwLT5hYzk3X3JlZ3NbaWR4XTsKIH0KIAogLyogCkBAIC0xMTc4LDggKzEyMjIsMTIgQEAKIHsKIAlzdHJ1Y3Qgbm0yNTYgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CiAJaW50IHRyaWVzID0gMjsKKwlpbnQgaWR4ID0gbm0yNTZfYWM5N19pZHgocmVnKTsKIAl1MzIgYmFzZTsKIAorCWlmIChpZHggPCAwKQorCQlyZXR1cm47CisKIAliYXNlID0gY2hpcC0+bWl4ZXJfYmFzZTsKIAogCXNuZF9ubTI1Nl9hYzk3X3JlYWR5KGNoaXApOwpAQCAtMTE4OCwxMiArMTIzNiwzMiBAQAogCXdoaWxlICh0cmllcy0tID4gMCkgewogCQlzbmRfbm0yNTZfd3JpdGV3KGNoaXAsIGJhc2UgKyByZWcsIHZhbCk7CiAJCW1zbGVlcCgxKTsgIC8qIGEgbGl0dGxlIGRlbGF5IGhlcmUgc2VlbXMgYmV0dGVyLi4gKi8KLQkJaWYgKHNuZF9ubTI1Nl9hYzk3X3JlYWR5KGNoaXApKQorCQlpZiAoc25kX25tMjU2X2FjOTdfcmVhZHkoY2hpcCkpIHsKKwkJCS8qIHN1Y2Nlc3NmdWwgd3JpdGU6IHNldCBjYWNoZSAqLworCQkJY2hpcC0+YWM5N19yZWdzW2lkeF0gPSB2YWw7CiAJCQlyZXR1cm47CisJCX0KIAl9CiAJc25kX3ByaW50ZCgibm0yNTY6IGFjOTcgY29kZWMgbm90IHJlYWR5Li5cbiIpOwogfQogCisvKiBzdGF0aWMgcmVzb2x1dGlvbiB0YWJsZSAqLworc3RhdGljIHN0cnVjdCBzbmRfYWM5N19yZXNfdGFibGUgbm0yNTZfcmVzX3RhYmxlW10gPSB7CisJeyBBQzk3X01BU1RFUiwgMHgxZjFmIH0sCisJeyBBQzk3X0hFQURQSE9ORSwgMHgxZjFmIH0sCisJeyBBQzk3X01BU1RFUl9NT05PLCAweDAwMWYgfSwKKwl7IEFDOTdfUENfQkVFUCwgMHgwMDFmIH0sCisJeyBBQzk3X1BIT05FLCAweDAwMWYgfSwKKwl7IEFDOTdfTUlDLCAweDAwMWYgfSwKKwl7IEFDOTdfTElORSwgMHgxZjFmIH0sCisJeyBBQzk3X0NELCAweDFmMWYgfSwKKwl7IEFDOTdfVklERU8sIDB4MWYxZiB9LAorCXsgQUM5N19BVVgsIDB4MWYxZiB9LAorCXsgQUM5N19QQ00sIDB4MWYxZiB9LAorCXsgQUM5N19SRUNfR0FJTiwgMHgwZjBmIH0sCisJeyB9IC8qIHRlcm1pbmF0b3IgKi8KK307CisKIC8qIGluaXRpYWxpemUgdGhlIGFjOTcgaW50byBhIGtub3duIHN0YXRlICovCiBzdGF0aWMgdm9pZAogc25kX25tMjU2X2FjOTdfcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQpAQCAtMTIxMSw2ICsxMjc5LDE2IEBACiAJCXNuZF9ubTI1Nl93cml0ZWIoY2hpcCwgMHg2Y2MsIDB4ODApOwogCQlzbmRfbm0yNTZfd3JpdGViKGNoaXAsIDB4NmNjLCAweDApOwogCX0KKwlpZiAoISBjaGlwLT5pbl9yZXN1bWUpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5tMjU2X2FjOTdfaW5pdF92YWwpOyBpKyspIHsKKwkJCS8qIHByZWxvYWQgdGhlIGNhY2hlLCBzbyBhcyB0byBhdm9pZCBldmVuIGEgc2luZ2xlCisJCQkgKiByZWFkIG9mIHRoZSBtaXhlciByZWdzCisJCQkgKi8KKwkJCXNuZF9ubTI1Nl9hYzk3X3dyaXRlKGFjOTcsIG5tMjU2X2FjOTdfaW5pdF92YWxbaV0ucmVnLAorCQkJCQkgICAgIG5tMjU2X2FjOTdfaW5pdF92YWxbaV0udmFsdWUpOworCQl9CisJfQogfQogCiAvKiBjcmVhdGUgYW4gYWM5NyBtaXhlciBpbnRlcmZhY2UgKi8KQEAgLTEyMTksMzIgKzEyOTcsMjUgQEAKIHsKIAlzdHJ1Y3Qgc25kX2FjOTdfYnVzICpwYnVzOwogCXN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSBhYzk3OwotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAlzdGF0aWMgc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgb3BzID0gewogCQkucmVzZXQgPSBzbmRfbm0yNTZfYWM5N19yZXNldCwKIAkJLndyaXRlID0gc25kX25tMjU2X2FjOTdfd3JpdGUsCiAJCS5yZWFkID0gc25kX25tMjU2X2FjOTdfcmVhZCwKIAl9OwotCS8qIGxvb2tzIGxpa2Ugbm0yNTYgaGFuZ3MgdXAgd2hlbiB1bmV4cGVjdGVkIHJlZ2lzdGVycyBhcmUgdG91Y2hlZC4uLiAqLwotCXN0YXRpYyBpbnQgbWl4ZXJfcmVnc1tdID0gewotCQlBQzk3X01BU1RFUiwgQUM5N19IRUFEUEhPTkUsIEFDOTdfTUFTVEVSX01PTk8sCi0JCUFDOTdfUENfQkVFUCwgQUM5N19QSE9ORSwgQUM5N19NSUMsIEFDOTdfTElORSwgQUM5N19DRCwKLQkJQUM5N19WSURFTywgQUM5N19BVVgsIEFDOTdfUENNLCBBQzk3X1JFQ19TRUwsCi0JCUFDOTdfUkVDX0dBSU4sIEFDOTdfR0VORVJBTF9QVVJQT1NFLCBBQzk3XzNEX0NPTlRST0wsCi0JCS8qQUM5N19FWFRFTkRFRF9JRCwqLwotCQlBQzk3X1ZFTkRPUl9JRDEsIEFDOTdfVkVORE9SX0lEMiwKLQkJLTEKLQl9OworCisJY2hpcC0+YWM5N19yZWdzID0ga2NhbGxvYyhzaXplb2Yoc2hvcnQpLAorCQkJCSAgQVJSQVlfU0laRShubTI1Nl9hYzk3X2luaXRfdmFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCEgY2hpcC0+YWM5N19yZWdzKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICgoZXJyID0gc25kX2FjOTdfYnVzKGNoaXAtPmNhcmQsIDAsICZvcHMsIE5VTEwsICZwYnVzKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOwogCWFjOTcuc2NhcHMgPSBBQzk3X1NDQVBfQVVESU87IC8qIHdlIHN1cHBvcnQgYXVkaW8hICovCi0JYWM5Ny5saW1pdGVkX3JlZ3MgPSAxOwotCWZvciAoaSA9IDA7IG1peGVyX3JlZ3NbaV0gPj0gMDsgaSsrKQotCQlzZXRfYml0KG1peGVyX3JlZ3NbaV0sIGFjOTcucmVnX2FjY2Vzc2VkKTsKIAlhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisJYWM5Ny5yZXNfdGFibGUgPSBubTI1Nl9yZXNfdGFibGU7CiAJcGJ1cy0+bm9fdnJhID0gMTsKIAllcnIgPSBzbmRfYWM5N19taXhlcihwYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpOwogCWlmIChlcnIgPCAwKQpAQCAtMTMyOSw2ICsxNDAwLDcgQEAKIAlpbnQgaTsKIAogCS8qIFBlcmZvcm0gYSBmdWxsIHJlc2V0IG9uIHRoZSBoYXJkd2FyZSAqLworCWNoaXAtPmluX3Jlc3VtZSA9IDE7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKIAlwY2lfZW5hYmxlX2RldmljZShwY2kpOwogCXNuZF9ubTI1Nl9pbml0X2NoaXAoY2hpcCk7CkBAIC0xMzQ2LDYgKzE0MTgsNyBAQAogCX0KIAogCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKwljaGlwLT5pbl9yZXN1bWUgPSAwOwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpAQCAtMTM3MCw2ICsxNDQzLDcgQEAKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAogCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOworCWtmcmVlKGNoaXAtPmFjOTdfcmVncyk7CiAJa2ZyZWUoY2hpcCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDA3LDcgKzE0ODEsNyBAQAogCWNoaXAtPnVzZV9jYWNoZSA9IHVzZV9jYWNoZTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cmVnX2xvY2spOwogCWNoaXAtPmlycSA9IC0xOwotCWluaXRfTVVURVgoJmNoaXAtPmlycV9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+aXJxX211dGV4KTsKIAogCS8qIHN0b3JlIGJ1ZmZlciBzaXplcyBpbiBieXRlcyAqLwogCWNoaXAtPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uYnVmc2l6ZSA9IHBsYXliYWNrX2J1ZnNpemUgKiAxMDI0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwppbmRleCBiMmNiYTc1Li5mNjc5Nzc5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuYwpAQCAtMjYsOCArMjYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtNTE4LDcgKzUyMSw3IEBACiAJc3RydWN0IHRpbWV2YWwgbXlfdHYxLCBteV90djI7CiAJZG9fZ2V0dGltZW9mZGF5KCZteV90djEpOwogI2VuZGlmCi0JZG93bigmbWdyLT5zZXR1cF9tdXRleCk7CisJbXV0ZXhfbG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAKIAkvKiBjaGVjayB0aGUgcGlwZXMgY29uY2VybmVkIGFuZCBidWlsZCBwaXBlX2FycmF5ICovCiAJZm9yIChpID0gMDsgaSA8IG1nci0+bnVtX2NhcmRzOyBpKyspIHsKQEAgLTUzNyw3ICs1NDAsNyBAQAogCQl9CiAJfQogCWlmIChjYXB0dXJlX21hc2sgPT0gMCAmJiBwbGF5YmFja19tYXNrID09IDApIHsKLQkJdXAoJm1nci0+c2V0dXBfbXV0ZXgpOworCQltdXRleF91bmxvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwY3hocl90cmlnZ2VyX3Rhc2tsZXQgOiBubyBwaXBlc1xuIik7CiAJCXJldHVybjsKIAl9CkBAIC01NDgsNyArNTUxLDcgQEAKIAkvKiBzeW5jaHJvbm91cyBzdG9wIG9mIGFsbCB0aGUgcGlwZXMgY29uY2VybmVkICovCiAJZXJyID0gcGN4aHJfc2V0X3BpcGVfc3RhdGUobWdyLCAgcGxheWJhY2tfbWFzaywgY2FwdHVyZV9tYXNrLCAwKTsKIAlpZiAoZXJyKSB7Ci0JCXVwKCZtZ3ItPnNldHVwX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAicGN4aHJfdHJpZ2dlcl90YXNrbGV0IDogZXJyb3Igc3RvcCBwaXBlcyAoUCV4IEMleClcbiIsCiAJCQkgICBwbGF5YmFja19tYXNrLCBjYXB0dXJlX21hc2spOwogCQlyZXR1cm47CkBAIC01OTIsNyArNTk1LDcgQEAKIAkvKiBzeW5jaHJvbm91cyBzdGFydCBvZiBhbGwgdGhlIHBpcGVzIGNvbmNlcm5lZCAqLwogCWVyciA9IHBjeGhyX3NldF9waXBlX3N0YXRlKG1nciwgcGxheWJhY2tfbWFzaywgY2FwdHVyZV9tYXNrLCAxKTsKIAlpZiAoZXJyKSB7Ci0JCXVwKCZtZ3ItPnNldHVwX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAicGN4aHJfdHJpZ2dlcl90YXNrbGV0IDogZXJyb3Igc3RhcnQgcGlwZXMgKFAleCBDJXgpXG4iLAogCQkJICAgcGxheWJhY2tfbWFzaywgY2FwdHVyZV9tYXNrKTsKIAkJcmV0dXJuOwpAQCAtNjE5LDcgKzYyMiw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1nci0+bG9jaywgZmxhZ3MpOwogCi0JdXAoJm1nci0+c2V0dXBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHX0RFVEVDVAogCWRvX2dldHRpbWVvZmRheSgmbXlfdHYyKTsKQEAgLTcyOCw3ICs3MzEsNyBAQAogCX0KIAkqLwogCi0JZG93bigmbWdyLT5zZXR1cF9tdXRleCk7CisJbXV0ZXhfbG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAKIAlkbyB7CiAJCS8qIGlmIHRoZSBzdHJlYW0gd2FzIHN0b3BwZWQgYmVmb3JlLCBmb3JtYXQgYW5kIGJ1ZmZlciB3ZXJlIHJlc2V0ICovCkBAIC03NTUsNyArNzU4LDcgQEAKIAkJfQogCX0gd2hpbGUoMCk7CS8qIGRvIG9ubHkgb25jZSAoc28gd2UgY2FuIHVzZSBicmVhayBpbnN0ZWFkIG9mIGdvdG8pICovCiAKLQl1cCgmbWdyLT5zZXR1cF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC03ODAsNyArNzgzLDcgQEAKIAkvKiAgc2V0IHVwIGZvcm1hdCBmb3IgdGhlIHN0cmVhbSAqLwogCWZvcm1hdCA9IHBhcmFtc19mb3JtYXQoaHcpOwogCi0JZG93bigmbWdyLT5zZXR1cF9tdXRleCk7CisJbXV0ZXhfbG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAKIAlzdHJlYW0tPmNoYW5uZWxzID0gY2hhbm5lbHM7CiAJc3RyZWFtLT5mb3JtYXQgPSBmb3JtYXQ7CkBAIC03ODksNyArNzkyLDcgQEAKIAkvKgogCWVyciA9IHBjeGhyX3NldF9mb3JtYXQoc3RyZWFtKTsKIAlpZihlcnIpIHsKLQkJdXAoJm1nci0+c2V0dXBfbXV0ZXgpOworCQltdXRleF91bmxvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCQlyZXR1cm4gZXJyOwogCX0KIAkqLwpAQCAtODAxLDcgKzgwNCw3IEBACiAJCWVyciA9IHBjeGhyX3VwZGF0ZV9yX2J1ZmZlcihzdHJlYW0pOwogCX0KIAkqLwotCXVwKCZtZ3ItPnNldHVwX211dGV4KTsKKwltdXRleF91bmxvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTg0Nyw3ICs4NTAsNyBAQAogCXN0cnVjdCBwY3hocl9zdHJlYW0gICAgKnN0cmVhbTsKIAlpbnQgICAgICAgICAgICAgICAgIGlzX2NhcHR1cmU7CiAKLQlkb3duKCZtZ3ItPnNldHVwX211dGV4KTsKKwltdXRleF9sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAogCS8qIGNvcHkgdGhlIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHN0cnVjdCAqLwogCXJ1bnRpbWUtPmh3ID0gcGN4aHJfY2FwczsKQEAgLTg3MSw3ICs4NzQsNyBAQAogCQkvKiBzdHJlYW1zIGluIHVzZSAqLwogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJwY3hocl9vcGVuIGNoaXAlZCBzdWJzJWQgaW4gdXNlXG4iLAogCQkJICAgY2hpcC0+Y2hpcF9pZHgsIHN1YnMtPm51bWJlcik7Ci0JCXVwKCZtZ3ItPnNldHVwX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTg4Nyw3ICs4OTAsNyBAQAogCQkJCQkJICAgICAmZXh0ZXJuYWxfcmF0ZSkgfHwKIAkJCSAgICBleHRlcm5hbF9yYXRlID09IDApIHsKIAkJCQkvKiBjYW5ub3QgZGV0ZWN0IHRoZSBleHRlcm5hbCBjbG9jayByYXRlICovCi0JCQkJdXAoJm1nci0+c2V0dXBfbXV0ZXgpOworCQkJCW11dGV4X3VubG9jaygmbWdyLT5zZXR1cF9tdXRleCk7CiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gcnVudGltZS0+aHcucmF0ZV9tYXggPSBleHRlcm5hbF9yYXRlOwpAQCAtOTA1LDcgKzkwOCw3IEBACiAKIAltZ3ItPnJlZl9jb3VudF9yYXRlKys7CiAKLQl1cCgmbWdyLT5zZXR1cF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE2LDcgKzkxOSw3IEBACiAJc3RydWN0IHBjeGhyX21nciAqbWdyID0gY2hpcC0+bWdyOwogCXN0cnVjdCBwY3hocl9zdHJlYW0gKnN0cmVhbSA9IHN1YnMtPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAotCWRvd24oJm1nci0+c2V0dXBfbXV0ZXgpOworCW11dGV4X2xvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCiAJc25kX3ByaW50ZGQoInBjeGhyX2Nsb3NlIGNoaXAlZCBzdWJzJWRcbiIsIGNoaXAtPmNoaXBfaWR4LCBzdWJzLT5udW1iZXIpOwogCkBAIC05MjksNyArOTMyLDcgQEAKIAlzdHJlYW0tPnN0YXR1cyAgICA9IFBDWEhSX1NUUkVBTV9TVEFUVVNfRlJFRTsKIAlzdHJlYW0tPnN1YnN0cmVhbSA9IE5VTEw7CiAKLQl1cCgmbWdyLT5zZXR1cF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtZ3ItPnNldHVwX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIxNSw3ICsxMjE4LDcgQEAKIAlwY2lfc2V0X21hc3RlcihwY2kpOwogCiAJLyogY2hlY2sgaWYgd2UgY2FuIHJlc3RyaWN0IFBDSSBETUEgdHJhbnNmZXJzIHRvIDMyIGJpdHMgKi8KLQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIDB4ZmZmZmZmZmYpIDwgMCkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzMyQklUX01BU0spIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJhcmNoaXRlY3R1cmUgZG9lcyBub3Qgc3VwcG9ydCAzMmJpdCBQQ0kgYnVzbWFzdGVyIERNQVxuIik7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwogCQlyZXR1cm4gLUVOWElPOwpAQCAtMTI2NCw3ICsxMjY3LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmbWdyLT5tc2dfbG9jayk7CiAKIAkvKiBpbml0IHNldHVwIG11dGV4Ki8KLQlpbml0X01VVEVYKCZtZ3ItPnNldHVwX211dGV4KTsKKwltdXRleF9pbml0KCZtZ3ItPnNldHVwX211dGV4KTsKIAogCS8qIGluaXQgdGFzbGtldCAqLwogCXRhc2tsZXRfaW5pdCgmbWdyLT5tc2dfdGFza3EsIHBjeGhyX21zZ190YXNrbGV0LCAodW5zaWduZWQgbG9uZykgbWdyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5oIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmgKaW5kZXggMDQ5ZjJiMy4uNjUyMDY0NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmgKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgX19TT1VORF9QQ1hIUl9ICiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogCiAjZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OCQkweDAwMDgwNAkvKiAwLjguNCAqLwpAQCAtNzYsOCArNzcsOCBAQAogCXNwaW5sb2NrX3QgbG9jazsJCS8qIGludGVycnVwdCBzcGlubG9jayAqLwogCXNwaW5sb2NrX3QgbXNnX2xvY2s7CQkvKiBtZXNzYWdlIHNwaW5sb2NrICovCiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNldHVwX211dGV4OwkvKiBtdXRleCB1c2VkIGluIGh3X3BhcmFtcywgb3BlbiBhbmQgY2xvc2UgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIG1peGVyX211dGV4OwkvKiBtdXRleCBmb3IgbWl4ZXIgKi8KKwlzdHJ1Y3QgbXV0ZXggc2V0dXBfbXV0ZXg7CS8qIG11dGV4IHVzZWQgaW4gaHdfcGFyYW1zLCBvcGVuIGFuZCBjbG9zZSAqLworCXN0cnVjdCBtdXRleCBtaXhlcl9tdXRleDsJLyogbXV0ZXggZm9yIG1peGVyICovCiAKIAkvKiBoYXJkd2FyZSBpbnRlcmZhY2UgKi8KIAl1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsJLyogYml0IGZsYWdzIG9mIGxvYWRlZCBkc3AgaW5kaWNlcyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmMKaW5kZXggZmEwZDI3ZS4uZmRjNjUyYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5jCkBAIC0xMTc2LDcgKzExNzYsNyBAQAogCQltZ3ItPmRzcF90aW1lX2xhc3QgPSBkc3BfdGltZV9uZXc7CiAKIAkJaWYgKHRpbWVyX3RvZ2dsZSA9PSBtZ3ItPnRpbWVyX3RvZ2dsZSkKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkVSUk9SIFRJTUVSIFRPR0dMRVxuIik7CisJCQlzbmRfcHJpbnRkZCgiRVJST1IgVElNRVIgVE9HR0xFXG4iKTsKIAkJbWdyLT50aW1lcl90b2dnbGUgPSB0aW1lcl90b2dnbGU7CiAKIAkJcmVnICY9IH5QQ1hIUl9JUlFfVElNRVI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfbWl4ZXIuYyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCmluZGV4IDc2MGU3MzMuLjk0ZTYzYTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCisrKyBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9taXhlci5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJwY3hoci5oIgogI2luY2x1ZGUgInBjeGhyX2h3ZGVwLmgiCkBAIC05Miw3ICs5Myw3IEBACiAJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9wY3hociAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlpZiAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPT0gMCkgewkvKiBwbGF5YmFjayAqLwogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmFuYWxvZ19wbGF5YmFja192b2x1bWVbMF07CiAJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+YW5hbG9nX3BsYXliYWNrX3ZvbHVtZVsxXTsKQEAgLTEwMCw3ICsxMDEsNyBAQAogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmFuYWxvZ19jYXB0dXJlX3ZvbHVtZVswXTsKIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBjaGlwLT5hbmFsb2dfY2FwdHVyZV92b2x1bWVbMV07CiAJfQotCXVwKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTEsNyArMTEyLDcgQEAKIAlpbnQgY2hhbmdlZCA9IDA7CiAJaW50IGlzX2NhcHR1cmUsIGk7CiAKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlpc19jYXB0dXJlID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICE9IDApOwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJaW50ICBuZXdfdm9sdW1lID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV07CkBAIC0xMjMsNyArMTI0LDcgQEAKIAkJCXBjeGhyX3VwZGF0ZV9hbmFsb2dfYXVkaW9fbGV2ZWwoY2hpcCwgaXNfY2FwdHVyZSwgaSk7CiAJCX0KIAl9Ci0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTE1MCwxMCArMTUxLDEwIEBACiB7CiAJc3RydWN0IHNuZF9wY3hociAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAotCWRvd24oJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY2hpcC0+YW5hbG9nX3BsYXliYWNrX2FjdGl2ZVswXTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9IGNoaXAtPmFuYWxvZ19wbGF5YmFja19hY3RpdmVbMV07Ci0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2Miw3ICsxNjMsNyBAQAogewogCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IGksIGNoYW5nZWQgPSAwOwotCWRvd24oJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCWZvcihpID0gMDsgaSA8IDI7IGkrKykgewogCQlpZiAoY2hpcC0+YW5hbG9nX3BsYXliYWNrX2FjdGl2ZVtpXSAhPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSkgewogCQkJY2hpcC0+YW5hbG9nX3BsYXliYWNrX2FjdGl2ZVtpXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldOwpAQCAtMTcwLDcgKzE3MSw3IEBACiAJCQlwY3hocl91cGRhdGVfYW5hbG9nX2F1ZGlvX2xldmVsKGNoaXAsIDAsIGkpOwkvKiB1cGRhdGUgcGxheWJhY2sgbGV2ZWxzICovCiAJCX0KIAl9Ci0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTI5OSwxNCArMzAwLDE0IEBACiAJaW50ICpzdG9yZWRfdm9sdW1lOwogCWludCBpc19jYXB0dXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlpZiAoaXNfY2FwdHVyZSkKIAkJc3RvcmVkX3ZvbHVtZSA9IGNoaXAtPmRpZ2l0YWxfY2FwdHVyZV92b2x1bWU7CQkvKiBkaWdpdGFsIGNhcHR1cmUgKi8KIAllbHNlCiAJCXN0b3JlZF92b2x1bWUgPSBjaGlwLT5kaWdpdGFsX3BsYXliYWNrX3ZvbHVtZVtpZHhdOwkvKiBkaWdpdGFsIHBsYXliYWNrICovCiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBzdG9yZWRfdm9sdW1lWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gc3RvcmVkX3ZvbHVtZVsxXTsKLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzIwLDcgKzMyMSw3IEBACiAJaW50ICpzdG9yZWRfdm9sdW1lOwogCWludCBpOwogCi0JZG93bigmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJaWYgKGlzX2NhcHR1cmUpCiAJCXN0b3JlZF92b2x1bWUgPSBjaGlwLT5kaWdpdGFsX2NhcHR1cmVfdm9sdW1lOwkJLyogZGlnaXRhbCBjYXB0dXJlICovCiAJZWxzZQpAQCAtMzM1LDcgKzMzNiw3IEBACiAJfQogCWlmICghIGlzX2NhcHR1cmUgJiYgY2hhbmdlZCkKIAkJcGN4aHJfdXBkYXRlX3BsYXliYWNrX3N0cmVhbV9sZXZlbChjaGlwLCBpZHgpOwkvKiB1cGRhdGUgcGxheWJhY2sgdm9sdW1lICovCi0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTM1NiwxMCArMzU3LDEwIEBACiAJc3RydWN0IHNuZF9wY3hociAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgaWR4ID0gc25kX2N0bF9nZXRfaW9mZmlkeChrY29udHJvbCwgJnVjb250cm9sLT5pZCk7IC8qIGluZGV4ICovCiAKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmRpZ2l0YWxfcGxheWJhY2tfYWN0aXZlW2lkeF1bMF07CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBjaGlwLT5kaWdpdGFsX3BsYXliYWNrX2FjdGl2ZVtpZHhdWzFdOwotCXVwKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0zNzAsNyArMzcxLDcgQEAKIAlpbnQgaWR4ID0gc25kX2N0bF9nZXRfaW9mZmlkeChrY29udHJvbCwgJnVjb250cm9sLT5pZCk7IC8qIGluZGV4ICovCiAJaW50IGksIGo7CiAKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlqID0gaWR4OwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJaWYgKGNoaXAtPmRpZ2l0YWxfcGxheWJhY2tfYWN0aXZlW2pdW2ldICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldKSB7CkBAIC0zODAsNyArMzgxLDcgQEAKIAl9CiAJaWYgKGNoYW5nZWQpCiAJCXBjeGhyX3VwZGF0ZV9wbGF5YmFja19zdHJlYW1fbGV2ZWwoY2hpcCwgaWR4KTsKLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIApAQCAtNDAyLDEwICs0MDMsMTAgQEAKIAkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHNuZF9wY3hociAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPm1vbml0b3Jpbmdfdm9sdW1lWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+bW9uaXRvcmluZ192b2x1bWVbMV07Ci0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNiw3ICs0MTcsNyBAQAogCWludCBjaGFuZ2VkID0gMDsKIAlpbnQgaTsKIAotCWRvd24oJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJaWYgKGNoaXAtPm1vbml0b3Jpbmdfdm9sdW1lW2ldICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldKSB7CiAJCQljaGlwLT5tb25pdG9yaW5nX3ZvbHVtZVtpXSA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldOwpAQCAtNDI2LDcgKzQyNyw3IEBACiAJCQljaGFuZ2VkID0gMTsKIAkJfQogCX0KLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIApAQCAtNDQ2LDEwICs0NDcsMTAgQEAKIAkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCWRvd24oJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY2hpcC0+bW9uaXRvcmluZ19hY3RpdmVbMF07CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBjaGlwLT5tb25pdG9yaW5nX2FjdGl2ZVsxXTsKLQl1cCgmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYwLDcgKzQ2MSw3IEBACiAJaW50IGNoYW5nZWQgPSAwOwogCWludCBpOwogCi0JZG93bigmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQlpZiAoY2hpcC0+bW9uaXRvcmluZ19hY3RpdmVbaV0gIT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV0pIHsKIAkJCWNoaXAtPm1vbml0b3JpbmdfYWN0aXZlW2ldID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV07CkBAIC00NzQsNyArNDc1LDcgQEAKIAkJLyogdXBkYXRlIHJpZ2h0IG1vbml0b3Jpbmcgdm9sdW1lIGFuZCBtdXRlICovCiAJCXBjeGhyX3VwZGF0ZV9hdWRpb19waXBlX2xldmVsKGNoaXAsIDAsIDEpOwogCi0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIChjaGFuZ2VkICE9IDApOwogfQogCkBAIC01NzEsMTMgKzU3MiwxMyBAQAogCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJaW50IHJldCA9IDA7CiAKLQlkb3duKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKIAlpZiAoY2hpcC0+YXVkaW9fY2FwdHVyZV9zb3VyY2UgIT0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSkgewogCQljaGlwLT5hdWRpb19jYXB0dXJlX3NvdXJjZSA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CiAJCXBjeGhyX3NldF9hdWRpb19zb3VyY2UoY2hpcCk7CiAJCXJldCA9IDE7CiAJfQotCXVwKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYzNiw5ICs2MzcsOSBAQAogCXN0cnVjdCBwY3hocl9tZ3IgKm1nciA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgcmF0ZSwgcmV0ID0gMDsKIAotCWRvd24oJm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJm1nci0+bWl4ZXJfbXV0ZXgpOwogCWlmIChtZ3ItPnVzZV9jbG9ja190eXBlICE9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0pIHsKLQkJZG93bigmbWdyLT5zZXR1cF9tdXRleCk7CisJCW11dGV4X2xvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCQltZ3ItPnVzZV9jbG9ja190eXBlID0gdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXTsKIAkJaWYgKG1nci0+dXNlX2Nsb2NrX3R5cGUpCiAJCQlwY3hocl9nZXRfZXh0ZXJuYWxfY2xvY2sobWdyLCBtZ3ItPnVzZV9jbG9ja190eXBlLCAmcmF0ZSk7CkBAIC02NDksMTAgKzY1MCwxMCBAQAogCQkJaWYgKG1nci0+c2FtcGxlX3JhdGUpCiAJCQkJbWdyLT5zYW1wbGVfcmF0ZSA9IHJhdGU7CiAJCX0KLQkJdXAoJm1nci0+c2V0dXBfbXV0ZXgpOworCQltdXRleF91bmxvY2soJm1nci0+c2V0dXBfbXV0ZXgpOwogCQlyZXQgPSAxOwkvKiByZXR1cm4gMSBldmVuIGlmIHRoZSBzZXQgd2FzIG5vdCBkb25lLiBvayA/ICovCiAJfQotCXVwKCZtZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJm1nci0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY4NSw3ICs2ODYsNyBAQAogCXN0cnVjdCBwY3hocl9tZ3IgKm1nciA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlpbnQgaSwgZXJyLCByYXRlOwogCi0JZG93bigmbWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmbWdyLT5taXhlcl9tdXRleCk7CiAJZm9yKGkgPSAwOyBpIDwgMyArIG1nci0+Y2FwdHVyZV9jaGlwczsgaSsrKSB7CiAJCWlmIChpID09IFBDWEhSX0NMT0NLX1RZUEVfSU5URVJOQUwpCiAJCQlyYXRlID0gbWdyLT5zYW1wbGVfcmF0ZV9yZWFsOwpAQCAtNjk2LDcgKzY5Nyw3IEBACiAJCX0KIAkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV0gPSByYXRlOwogCX0KLQl1cCgmbWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtZ3ItPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzY1LDcgKzc2Niw3IEBACiAJdW5zaWduZWQgY2hhciBhZXNfYml0czsKIAlpbnQgaSwgZXJyOwogCi0JZG93bigmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJZm9yKGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAJCWlmIChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA9PSAwKQkvKiBwbGF5YmFjayAqLwogCQkJYWVzX2JpdHMgPSBjaGlwLT5hZXNfYml0c1tpXTsKQEAgLTc3Niw3ICs3NzcsNyBAQAogCQl9CiAJCXVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzW2ldID0gYWVzX2JpdHM7CiAJfQotCXVwKCZjaGlwLT5tZ3ItPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogICAgICAgICByZXR1cm4gMDsKIH0KIApAQCAtODI4LDE0ICs4MjksMTQgQEAKIAlpbnQgaSwgY2hhbmdlZCA9IDA7CiAKIAkvKiBwbGF5YmFjayAqLwotCWRvd24oJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJaWYgKHVjb250cm9sLT52YWx1ZS5pZWM5NTguc3RhdHVzW2ldICE9IGNoaXAtPmFlc19iaXRzW2ldKSB7CiAJCQlwY3hocl9pZWM5NThfdXBkYXRlX2J5dGUoY2hpcCwgaSwgdWNvbnRyb2wtPnZhbHVlLmllYzk1OC5zdGF0dXNbaV0pOwogCQkJY2hhbmdlZCA9IDE7CiAJCX0KIAl9Ci0JdXAoJmNoaXAtPm1nci0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2hpcC0+bWdyLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKQEAgLTkxNiw3ICs5MTcsNyBAQAogCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXA7CiAJaW50IGVyciwgaTsKIAotCWluaXRfTVVURVgoJm1nci0+bWl4ZXJfbXV0ZXgpOyAvKiBjYW4gYmUgaW4gYW5vdGhlciBwbGFjZSAqLworCW11dGV4X2luaXQoJm1nci0+bWl4ZXJfbXV0ZXgpOyAvKiBjYW4gYmUgaW4gYW5vdGhlciBwbGFjZSAqLwogCiAJZm9yIChpID0gMDsgaSA8IG1nci0+bnVtX2NhcmRzOyBpKyspIHsKIAkJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdGVtcDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCmluZGV4IDEwM2I0ZDcuLjk4MGI5Y2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwpAQCAtNDc0LDcgKzQ3NCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBoZHNwbV9yZWFkX2luX2dhaW4oc3RydWN0IGhkc3BtICogaGRzcG0sIHVuc2lnbmVkIGludCBjaGFuLAogCQkJCSAgICAgdW5zaWduZWQgaW50IGluKQogewotCWlmIChjaGFuID4gSERTUE1fTUlYRVJfQ0hBTk5FTFMgfHwgaW4gPiBIRFNQTV9NSVhFUl9DSEFOTkVMUykKKwlpZiAoY2hhbiA+PSBIRFNQTV9NSVhFUl9DSEFOTkVMUyB8fCBpbiA+PSBIRFNQTV9NSVhFUl9DSEFOTkVMUykKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gaGRzcG0tPm1peGVyLT5jaFtjaGFuXS5pbltpbl07CkBAIC00ODMsNyArNDgzLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGhkc3BtX3JlYWRfcGJfZ2FpbihzdHJ1Y3QgaGRzcG0gKiBoZHNwbSwgdW5zaWduZWQgaW50IGNoYW4sCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgcGIpCiB7Ci0JaWYgKGNoYW4gPiBIRFNQTV9NSVhFUl9DSEFOTkVMUyB8fCBwYiA+IEhEU1BNX01JWEVSX0NIQU5ORUxTKQorCWlmIChjaGFuID49IEhEU1BNX01JWEVSX0NIQU5ORUxTIHx8IHBiID49IEhEU1BNX01JWEVSX0NIQU5ORUxTKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gaGRzcG0tPm1peGVyLT5jaFtjaGFuXS5wYltwYl07CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21lbW9yeS5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tZW1vcnkuYwppbmRleCBjZjA5ZWE5Li40NmM2OTgyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21lbW9yeS5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWVtb3J5LmMKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC90cmlkZW50Lmg+CiAKQEAgLTIwMSwxNiArMjAzLDE2IEBACiAKIAkKIAotCWRvd24oJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X2xvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCWJsayA9IHNlYXJjaF9lbXB0eShoZHIsIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CiAJaWYgKGJsayA9PSBOVUxMKSB7Ci0JCXVwKCZoZHItPmJsb2NrX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWlmIChsYXN0cGcoYmxrKSAtIGZpcnN0cGcoYmxrKSA+PSBzZ2J1Zi0+cGFnZXMpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAicGFnZSBjYWxjdWxhdGlvbiBkb2Vzbid0IG1hdGNoOiBhbGxvY2F0ZWQgcGFnZXMgPSAlZCwgdHJpZGVudCA9ICVkLyVkXG4iLCBzZ2J1Zi0+cGFnZXMsIGZpcnN0cGcoYmxrKSwgbGFzdHBnKGJsaykpOwogCQlfX3NuZF91dGlsX21lbV9mcmVlKGhkciwgYmxrKTsKLQkJdXAoJmhkci0+YmxvY2tfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJCQkgICAKQEAgLTIyMSwxMiArMjIzLDEyIEBACiAJCXVuc2lnbmVkIGxvbmcgcHRyID0gKHVuc2lnbmVkIGxvbmcpc2didWYtPnRhYmxlW2lkeF0uYnVmOwogCQlpZiAoISBpc192YWxpZF9wYWdlKGFkZHIpKSB7CiAJCQlfX3NuZF91dGlsX21lbV9mcmVlKGhkciwgYmxrKTsKLQkJCXVwKCZoZHItPmJsb2NrX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlzZXRfdGxiX2J1cyh0cmlkZW50LCBwYWdlLCBwdHIsIGFkZHIpOwogCX0KLQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAlyZXR1cm4gYmxrOwogfQogCkBAIC0yNDgsMTAgKzI1MCwxMCBAQAogCWhkciA9IHRyaWRlbnQtPnRsYi5tZW1oZHI7CiAJc25kX2Fzc2VydChoZHIgIT0gTlVMTCwgcmV0dXJuIE5VTEwpOwogCi0JZG93bigmaGRyLT5ibG9ja19tdXRleCk7CisJbXV0ZXhfbG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJYmxrID0gc2VhcmNoX2VtcHR5KGhkciwgcnVudGltZS0+ZG1hX2J5dGVzKTsKIAlpZiAoYmxrID09IE5VTEwpIHsKLQkJdXAoJmhkci0+YmxvY2tfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJCQkgICAKQEAgLTI2MiwxMiArMjY0LDEyIEBACiAJICAgICBwdHIgKz0gU05EUlZfVFJJREVOVF9QQUdFX1NJWkUsIGFkZHIgKz0gU05EUlZfVFJJREVOVF9QQUdFX1NJWkUpIHsKIAkJaWYgKCEgaXNfdmFsaWRfcGFnZShhZGRyKSkgewogCQkJX19zbmRfdXRpbF9tZW1fZnJlZShoZHIsIGJsayk7Ci0JCQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJCQltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJc2V0X3RsYl9idXModHJpZGVudCwgcGFnZSwgcHRyLCBhZGRyKTsKIAl9Ci0JdXAoJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJcmV0dXJuIGJsazsKIH0KIApAQCAtMzAwLDEzICszMDIsMTMgQEAKIAlzbmRfYXNzZXJ0KGJsayAhPSBOVUxMLCByZXR1cm4gLUVJTlZBTCk7CiAKIAloZHIgPSB0cmlkZW50LT50bGIubWVtaGRyOwotCWRvd24oJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X2xvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCS8qIHJlc2V0IFRMQiBlbnRyaWVzICovCiAJZm9yIChwYWdlID0gZmlyc3RwZyhibGspOyBwYWdlIDw9IGxhc3RwZyhibGspOyBwYWdlKyspCiAJCXNldF9zaWxlbnRfdGxiKHRyaWRlbnQsIHBhZ2UpOwogCS8qIGZyZWUgbWVtb3J5IGJsb2NrICovCiAJX19zbmRfdXRpbF9tZW1fZnJlZShoZHIsIGJsayk7Ci0JdXAoJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzMiwxOCArMzM0LDE4IEBACiAJc3RydWN0IHNuZF91dGlsX21lbWJsayAqYmxrOwogCXN0cnVjdCBzbmRfdXRpbF9tZW1oZHIgKmhkciA9IGh3LT50bGIubWVtaGRyOyAKIAotCWRvd24oJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X2xvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCWJsayA9IF9fc25kX3V0aWxfbWVtX2FsbG9jKGhkciwgc2l6ZSk7CiAJaWYgKGJsayA9PSBOVUxMKSB7Ci0JCXVwKCZoZHItPmJsb2NrX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWlmIChzeW50aF9hbGxvY19wYWdlcyhodywgYmxrKSkgewogCQlfX3NuZF91dGlsX21lbV9mcmVlKGhkciwgYmxrKTsKLQkJdXAoJmhkci0+YmxvY2tfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JdXAoJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJcmV0dXJuIGJsazsKIH0KIApAQCAtMzU2LDEwICszNTgsMTAgQEAKIHsKIAlzdHJ1Y3Qgc25kX3V0aWxfbWVtaGRyICpoZHIgPSBody0+dGxiLm1lbWhkcjsgCiAKLQlkb3duKCZoZHItPmJsb2NrX211dGV4KTsKKwltdXRleF9sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAlzeW50aF9mcmVlX3BhZ2VzKGh3LCBibGspOwogCSBfX3NuZF91dGlsX21lbV9mcmVlKGhkciwgYmxrKTsKLQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggNDIzNzQxMy4uMTk1N2QyOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtMjM3NSw4ICsyMzc1LDEwIEBACiAJCXsgLnN1YnZlbmRvciA9IDB4MTY5NSwgLnN1YmRldmljZSA9IDB4MzAwNSwgLmFjdGlvbiA9IFZJQV9EWFNfRU5BQkxFIH0sIC8qIEVQb1ggRVAtOEs5QSAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDE2OTUsIC5zdWJkZXZpY2UgPSAweDMwMGUsIC5hY3Rpb24gPSBWSUFfRFhTX1NSQyB9LCAvKiBFUG9YIDlIRUFJICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTZmMywgLnN1YmRldmljZSA9IDB4NjQwNSwgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEpldHdheSBLOE04TVMgKi8KKwkJeyAuc3VidmVuZG9yID0gMHgxNzM0LCAuc3ViZGV2aWNlID0gMHgxMDc4LCAuYWN0aW9uID0gVklBX0RYU19TUkMgfSwgLyogRlNDIEFtaWxvIEw3MzAwICovCiAJCXsgLnN1YnZlbmRvciA9IDB4MTczNCwgLnN1YmRldmljZSA9IDB4MTA5MywgLmFjdGlvbiA9IFZJQV9EWFNfU1JDIH0sIC8qIEZTQyAqLwogCQl7IC5zdWJ2ZW5kb3IgPSAweDE4NDksIC5zdWJkZXZpY2UgPSAweDMwNTksIC5hY3Rpb24gPSBWSUFfRFhTX05PX1ZSQSB9LCAvKiBBU1JvY2sgSzdWTTIgKi8KKwkJeyAuc3VidmVuZG9yID0gMHgxODQ5LCAuc3ViZGV2aWNlID0gMHg5NzM5LCAuYWN0aW9uID0gVklBX0RYU19TUkMgfSwgLyogQVNSb2NrIG1vYm8oPykgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxODQ5LCAuc3ViZGV2aWNlID0gMHg5NzYxLCAuYWN0aW9uID0gVklBX0RYU19TUkMgfSwgLyogQVNSb2NrIG1vYm8oPykgKi8KIAkJeyAuc3VidmVuZG9yID0gMHgxOTE5LCAuc3ViZGV2aWNlID0gMHgyMDBhLCAuYWN0aW9uID0gVklBX0RYU19OT19WUkEgfSwgLyogU29sdGVrIFNMLUs4VHByby05MzkgKi8KIAkJeyAuc3VidmVuZG9yID0gMHg0MDA1LCAuc3ViZGV2aWNlID0gMHg0NzEwLCAuYWN0aW9uID0gVklBX0RYU19TUkMgfSwJLyogTVNJIEs3VDI2NiBQcm8yIChNUy02MzgwIFYyLjApIEJJT1MgMy43ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMKaW5kZXggYzcwNWFmNC4uOWI2ZDM0NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jCisrKyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTg2MSwxMCArODYzLDEwIEBACiB7CiAJc3RydWN0IHZ4X2NvcmUgKl9jaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzbmRfdngyMjIgKmNoaXAgPSAoc3RydWN0IHNuZF92eDIyMiAqKV9jaGlwOwotCWRvd24oJl9jaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmX2NoaXAtPm1peGVyX211dGV4KTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmlucHV0X2xldmVsWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gY2hpcC0+aW5wdXRfbGV2ZWxbMV07Ci0JdXAoJl9jaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZfY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC04NzIsMTYgKzg3NCwxNiBAQAogewogCXN0cnVjdCB2eF9jb3JlICpfY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKIAlzdHJ1Y3Qgc25kX3Z4MjIyICpjaGlwID0gKHN0cnVjdCBzbmRfdngyMjIgKilfY2hpcDsKLQlkb3duKCZfY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJl9jaGlwLT5taXhlcl9tdXRleCk7CiAJaWYgKGNoaXAtPmlucHV0X2xldmVsWzBdICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIHx8CiAJICAgIGNoaXAtPmlucHV0X2xldmVsWzFdICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdKSB7CiAJCWNoaXAtPmlucHV0X2xldmVsWzBdID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CiAJCWNoaXAtPmlucHV0X2xldmVsWzFdID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV07CiAJCXZ4Ml9zZXRfaW5wdXRfbGV2ZWwoY2hpcCk7Ci0JCXVwKCZfY2hpcC0+bWl4ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJl9jaGlwLT5taXhlcl9tdXRleCk7CiAJCXJldHVybiAxOwogCX0KLQl1cCgmX2NoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJl9jaGlwLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwNywxNCArOTA5LDE0IEBACiB7CiAJc3RydWN0IHZ4X2NvcmUgKl9jaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzbmRfdngyMjIgKmNoaXAgPSAoc3RydWN0IHNuZF92eDIyMiAqKV9jaGlwOwotCWRvd24oJl9jaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmX2NoaXAtPm1peGVyX211dGV4KTsKIAlpZiAoY2hpcC0+bWljX2xldmVsICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSB7CiAJCWNoaXAtPm1pY19sZXZlbCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwogCQl2eDJfc2V0X2lucHV0X2xldmVsKGNoaXApOwotCQl1cCgmX2NoaXAtPm1peGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZfY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCQlyZXR1cm4gMTsKIAl9Ci0JdXAoJl9jaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZfY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwppbmRleCBkYWI5YjgzLi5kYjU3Y2U5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIHN0YXRpYyBsb25nIGpveXN0aWNrX3BvcnRbU05EUlZfQ0FSRFNdOwogI2VuZGlmCiBzdGF0aWMgaW50IHJlYXJfc3dpdGNoW1NORFJWX0NBUkRTXTsKK3N0YXRpYyBpbnQgcmVhcl9zd2FwW1NORFJWX0NBUkRTXSA9IHsgWzAgLi4uIChTTkRSVl9DQVJEUy0xKV0gPSAxIH07CiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgdGhlIFlhbWFoYSBEUy0xIFBDSSBzb3VuZGNhcmQuIik7CkBAIC02Niw2ICs2Nyw4IEBACiAjZW5kaWYKIG1vZHVsZV9wYXJhbV9hcnJheShyZWFyX3N3aXRjaCwgYm9vbCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJlYXJfc3dpdGNoLCAiRW5hYmxlIHNoYXJlZCByZWFyL2xpbmUtaW4gc3dpdGNoIik7Cittb2R1bGVfcGFyYW1fYXJyYXkocmVhcl9zd2FwLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVhcl9zd2FwLCAiU3dhcCByZWFyIGNoYW5uZWxzIChtdXN0IGJlIGVuYWJsZWQgZm9yIGNvcnJlY3QgSUVDOTU4IChTL1BESUYpKSBvdXRwdXQiKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF95bWZwY2lfaWRzW10gPSB7CiAgICAgICAgIHsgMHgxMDczLCAweDAwMDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sICAgLyogWU1GNzI0ICovCkBAIC0yOTUsNyArMjk4LDcgQEAKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfeW1mcGNpX21peGVyKGNoaXAsIHJlYXJfc3dpdGNoW2Rldl0pKSA8IDApIHsKKwlpZiAoKGVyciA9IHNuZF95bWZwY2lfbWl4ZXIoY2hpcCwgcmVhcl9zd2l0Y2hbZGV2XSwgcmVhcl9zd2FwW2Rldl0pKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKaW5kZXggYTFhYTc0Yi4uOGFjNWFiNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYwpAQCAtNTM2LDE1ICs1MzYsMzAgQEAKIAkJCX0KIAkJfQogCQlpZiAoeXBjbS0+b3V0cHV0X3JlYXIpIHsKLQkJCWlmICh1c2VfbGVmdCkgewotCQkJCWJhbmstPmVmZjJfZ2FpbiA9Ci0JCQkJYmFuay0+ZWZmMl9nYWluX2VuZCA9IHZvbF9sZWZ0OwotCQkJfQotCQkJaWYgKHVzZV9yaWdodCkgewotCQkJCWJhbmstPmVmZjNfZ2FpbiA9Ci0JCQkJYmFuay0+ZWZmM19nYWluX2VuZCA9IHZvbF9yaWdodDsKLQkJCX0KLQkJfQorCQkgICAgICAgIGlmICgheXBjbS0+c3dhcF9yZWFyKSB7CisgICAgICAgIAkJCWlmICh1c2VfbGVmdCkgeworICAgICAgICAJCQkJYmFuay0+ZWZmMl9nYWluID0KKyAgICAgICAgCQkJCWJhbmstPmVmZjJfZ2Fpbl9lbmQgPSB2b2xfbGVmdDsKKyAgICAgICAgCQkJfQorICAgICAgICAJCQlpZiAodXNlX3JpZ2h0KSB7CisgICAgICAgIAkJCQliYW5rLT5lZmYzX2dhaW4gPQorICAgICAgICAJCQkJYmFuay0+ZWZmM19nYWluX2VuZCA9IHZvbF9yaWdodDsKKyAgICAgICAgCQkJfQorCQkgICAgICAgIH0gZWxzZSB7CisgICAgICAgIAkJCS8qIFRoZSBTUERJRiBvdXQgY2hhbm5lbHMgc2VlbSB0byBiZSBzd2FwcGVkLCBzbyB3ZSBoYXZlCisgICAgICAgIAkJCSAqIHRvIHN3YXAgdGhlbSBoZXJlLCB0b28uICBUaGUgcmVhciBhbmFsb2cgb3V0IGNoYW5uZWxzCisgICAgICAgIAkJCSAqIHdpbGwgYmUgd3JvbmcsIGJ1dCBvdGhlcndpc2UgQUMzIHdvdWxkIG5vdCB3b3JrLgorICAgICAgICAJCQkgKi8KKyAgICAgICAgCQkJaWYgKHVzZV9sZWZ0KSB7CisgICAgICAgIAkJCQliYW5rLT5lZmYzX2dhaW4gPQorICAgICAgICAJCQkJYmFuay0+ZWZmM19nYWluX2VuZCA9IHZvbF9sZWZ0OworICAgICAgICAJCQl9CisgICAgICAgIAkJCWlmICh1c2VfcmlnaHQpIHsKKyAgICAgICAgCQkJCWJhbmstPmVmZjJfZ2FpbiA9CisgICAgICAgIAkJCQliYW5rLT5lZmYyX2dhaW5fZW5kID0gdm9sX3JpZ2h0OworICAgICAgICAJCQl9CisgICAgICAgIAkJfQorICAgICAgICAgICAgICAgIH0KIAl9CiB9CiAKQEAgLTg5NCw2ICs5MDksNyBAQAogCXlwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJeXBjbS0+b3V0cHV0X2Zyb250ID0gMTsKIAl5cGNtLT5vdXRwdXRfcmVhciA9IGNoaXAtPm1vZGVfZHVwNGNoID8gMSA6IDA7CisJeXBjbS0+c3dhcF9yZWFyID0gY2hpcC0+cmVhcl9zd2FwOwogCXNwaW5fbG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKIAlpZiAoeXBjbS0+b3V0cHV0X3JlYXIpIHsKIAkJeW1mcGNpX29wZW5fZXh0ZW5zaW9uKGNoaXApOwpAQCAtMTczNCw3ICsxNzUwLDcgQEAKIAljaGlwLT5hYzk3ID0gTlVMTDsKIH0KIAotaW50IF9fZGV2aW5pdCBzbmRfeW1mcGNpX21peGVyKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgcmVhcl9zd2l0Y2gpCitpbnQgX19kZXZpbml0IHNuZF95bWZwY2lfbWl4ZXIoc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCByZWFyX3N3aXRjaCwgaW50IHJlYXJfc3dhcCkKIHsKIAlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5NzsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwpAQCAtMTc0Niw2ICsxNzYyLDcgQEAKIAkJLnJlYWQgPSBzbmRfeW1mcGNpX2NvZGVjX3JlYWQsCiAJfTsKIAorCWNoaXAtPnJlYXJfc3dhcCA9IHJlYXJfc3dhcDsKIAlpZiAoKGVyciA9IHNuZF9hYzk3X2J1cyhjaGlwLT5jYXJkLCAwLCAmb3BzLCBjaGlwLCAmY2hpcC0+YWM5N19idXMpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJY2hpcC0+YWM5N19idXMtPnByaXZhdGVfZnJlZSA9IHNuZF95bWZwY2lfbWl4ZXJfZnJlZV9hYzk3X2J1czsKQEAgLTIyOTMsNiArMjMxMCw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorCWNoaXAtPnJlYXJfc3dhcCA9IDE7CiAJaWYgKChlcnIgPSBzbmRfeW1mcGNpX2FjM19pbml0KGNoaXApKSA8IDApIHsKIAkJc25kX3ltZnBjaV9mcmVlKGNoaXApOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZl9wY20uYwppbmRleCA5NjJlNmQ1Mi4uN2YyYTRkZSAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2ZfcGNtLmMKQEAgLTY2LDEwICs2Niw5IEBACiBzdGF0aWMgaW50IHNuZF9wY21fZnJlZV92bWFsbG9jX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnMpCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7Ci0JaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7Ci0JCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKLQkJcnVudGltZS0+ZG1hX2FyZWEgPSBOVUxMOwotCX0KKworCXZmcmVlKHJ1bnRpbWUtPmRtYV9hcmVhKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS92eC92eHBfbWl4ZXIuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBfbWl4ZXIuYwppbmRleCA5NDUwMTQ5Li5lMjM3ZjZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwX21peGVyLmMKKysrIGIvc291bmQvcGNtY2lhL3Z4L3Z4cF9taXhlci5jCkBAIC01MiwxNCArNTIsMTQgQEAKIHsKIAlzdHJ1Y3QgdnhfY29yZSAqX2NoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CiAJc3RydWN0IHNuZF92eHBvY2tldCAqY2hpcCA9IChzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICopX2NoaXA7Ci0JZG93bigmX2NoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZfY2hpcC0+bWl4ZXJfbXV0ZXgpOwogCWlmIChjaGlwLT5taWNfbGV2ZWwgIT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKIAkJdnhfc2V0X21pY19sZXZlbChfY2hpcCwgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOwogCQljaGlwLT5taWNfbGV2ZWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQkJdXAoJl9jaGlwLT5taXhlcl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmX2NoaXAtPm1peGVyX211dGV4KTsKIAkJcmV0dXJuIDE7CiAJfQotCXVwKCZfY2hpcC0+bWl4ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmX2NoaXAtPm1peGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTUsMTQgKzk1LDE0IEBACiB7CiAJc3RydWN0IHZ4X2NvcmUgKl9jaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKmNoaXAgPSAoc3RydWN0IHNuZF92eHBvY2tldCAqKV9jaGlwOwotCWRvd24oJl9jaGlwLT5taXhlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmX2NoaXAtPm1peGVyX211dGV4KTsKIAlpZiAoY2hpcC0+bWljX2xldmVsICE9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSB7CiAJCXZ4X3NldF9taWNfYm9vc3QoX2NoaXAsIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKIAkJY2hpcC0+bWljX2xldmVsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07Ci0JCXVwKCZfY2hpcC0+bWl4ZXJfbXV0ZXgpOworCQltdXRleF91bmxvY2soJl9jaGlwLT5taXhlcl9tdXRleCk7CiAJCXJldHVybiAxOwogCX0KLQl1cCgmX2NoaXAtPm1peGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJl9jaGlwLT5taXhlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9kYWNhLmMgYi9zb3VuZC9wcGMvZGFjYS5jCmluZGV4IDA4Y2RlNTEuLmFhMDllYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9kYWNhLmMKKysrIGIvc291bmQvcHBjL2RhY2EuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMva2V5d2VzdC5jIGIvc291bmQvcHBjL2tleXdlc3QuYwppbmRleCA2MDU4YzJkLi5mYjA1OTM4IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMva2V5d2VzdC5jCisrKyBiL3NvdW5kL3BwYy9rZXl3ZXN0LmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJwbWFjLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdG9vbmllLmMgYi9zb3VuZC9wcGMvdG9vbmllLmMKaW5kZXggMDUzYjhmMi4uNGU1OTUxNyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3Rvb25pZS5jCisrKyBiL3NvdW5kL3BwYy90b29uaWUuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMTE4LDcgKzExNyw3IEBACiAJCWdwID0gJm1peC0+YW1wX211dGVfZ3BpbzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7OworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAhY2hlY2tfYXVkaW9fZ3BpbyhncCk7CiAJcmV0dXJuIDA7CkBAIC0xNDYsNyArMTQ1LDcgQEAKIAkJZ3AgPSAmbWl4LT5hbXBfbXV0ZV9ncGlvOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDs7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAl2YWwgPSAhIGNoZWNrX2F1ZGlvX2dwaW8oZ3ApOwogCWlmICh2YWwgIT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy90dW1ibGVyLmMgYi9zb3VuZC9wcGMvdHVtYmxlci5jCmluZGV4IDgzOGZjMTEuLjExNDZkZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy90dW1ibGVyLmMKKysrIGIvc291bmQvcHBjL3R1bWJsZXIuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvY3M0MjMxLmMgYi9zb3VuZC9zcGFyYy9jczQyMzEuYwppbmRleCBmZDY1NDM5Li44ODA0ZjI2IDEwMDY0NAotLS0gYS9zb3VuZC9zcGFyYy9jczQyMzEuYworKysgYi9zb3VuZC9zcGFyYy9jczQyMzEuYwpAQCAtMTE1LDggKzExNSw4IEBACiAJdW5zaWduZWQgY2hhcgkJaW1hZ2VbMzJdOwkvKiByZWdpc3RlcnMgaW1hZ2UgKi8KIAlpbnQJCQltY2VfYml0OwogCWludAkJCWNhbGlicmF0ZV9tdXRlOwotCXN0cnVjdCBzZW1hcGhvcmUJbWNlX211dGV4OwotCXN0cnVjdCBzZW1hcGhvcmUJb3Blbl9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXgJCW1jZV9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXgJCW9wZW5fbXV0ZXg7CiAKIAl1bmlvbiB7CiAjaWZkZWYgU0JVU19TVVBQT1JUCkBAIC02MTEsOCArNjExLDcgQEAKIAkJdW5zaWduZWQgaW50IHBlcmlvZF9zaXplID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CiAJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwZXJpb2Rfc2l6ZSAqICgqcGVyaW9kc19zZW50KTsKIAotCQlpZiAocGVyaW9kX3NpemUgPj0gKDEgPDwgMjQpKQotCQkJQlVHKCk7CisJCUJVR19PTihwZXJpb2Rfc2l6ZSA+PSAoMSA8PCAyNCkpOwogCiAJCWlmIChkbWFfY29udC0+cmVxdWVzdChkbWFfY29udCwgcnVudGltZS0+ZG1hX2FkZHIgKyBvZmZzZXQsIHBlcmlvZF9zaXplKSkKIAkJCXJldHVybjsKQEAgLTc3NSw3ICs3NzQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkb3duKCZjaGlwLT5tY2VfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1jZV9tdXRleCk7CiAJc25kX2NzNDIzMV9jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAogCXNuZF9jczQyMzFfbWNlX3VwKGNoaXApOwpAQCAtNzkwLDcgKzc4OSw3IEBACiAJc25kX2NzNDIzMV9tY2VfZG93bihjaGlwKTsKIAogCXNuZF9jczQyMzFfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7Ci0JdXAoJmNoaXAtPm1jZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfY3M0MjMxX2NhcHR1cmVfZm9ybWF0KHN0cnVjdCBzbmRfY3M0MjMxICpjaGlwLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKQEAgLTc5OCw3ICs3OTcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkb3duKCZjaGlwLT5tY2VfbXV0ZXgpOworCW11dGV4X2xvY2soJmNoaXAtPm1jZV9tdXRleCk7CiAJc25kX2NzNDIzMV9jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAogCXNuZF9jczQyMzFfbWNlX3VwKGNoaXApOwpAQCAtODE5LDcgKzgxOCw3IEBACiAJc25kX2NzNDIzMV9tY2VfZG93bihjaGlwKTsKIAogCXNuZF9jczQyMzFfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7Ci0JdXAoJmNoaXAtPm1jZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwogfQogCiAvKgpAQCAtOTMzLDE0ICs5MzIsMTQgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZG93bigmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJaWYgKChjaGlwLT5tb2RlICYgbW9kZSkpIHsKLQkJdXAoJmNoaXAtPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJaWYgKGNoaXAtPm1vZGUgJiBDUzQyMzFfTU9ERV9PUEVOKSB7CiAJCWNoaXAtPm1vZGUgfD0gbW9kZTsKLQkJdXAoJmNoaXAtPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogb2suIG5vdyBlbmFibGUgYW5kIGFjayBDT0RFQyBJUlEgKi8KQEAgLTk2MCw3ICs5NTksNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAogCWNoaXAtPm1vZGUgPSBtb2RlOwotCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC05NjgsMTAgKzk2NywxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkb3duKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF9sb2NrKCZjaGlwLT5vcGVuX211dGV4KTsKIAljaGlwLT5tb2RlICY9IH5tb2RlOwogCWlmIChjaGlwLT5tb2RlICYgQ1M0MjMxX01PREVfT1BFTikgewotCQl1cCgmY2hpcC0+b3Blbl9tdXRleCk7CisJCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJCXJldHVybjsKIAl9CiAJc25kX2NzNDIzMV9jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKQEAgLTEwMDgsNyArMTAwNyw3IEBACiAJc25kX2NzNDIzMV9jYWxpYnJhdGVfbXV0ZShjaGlwLCAwKTsKIAogCWNoaXAtPm1vZGUgPSAwOwotCXVwKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogfQogCiAvKgpAQCAtMTA3OSw4ICsxMDc4LDcgQEAKIAljaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0gJj0gfihDUzQyMzFfUExBWUJBQ0tfRU5BQkxFIHwKIAkJCQkJICAgIENTNDIzMV9QTEFZQkFDS19QSU8pOwogCi0JaWYgKHJ1bnRpbWUtPnBlcmlvZF9zaXplID4gMHhmZmZmICsgMSkKLQkJQlVHKCk7CisJQlVHX09OKHJ1bnRpbWUtPnBlcmlvZF9zaXplID4gMHhmZmZmICsgMSk7CiAKIAljaGlwLT5wX3BlcmlvZHNfc2VudCA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwpAQCAtMTk2OSw4ICsxOTY3LDggQEAKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmNfZG1hLnNidXNfaW5mby5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+cF9kbWEuc2J1c19pbmZvLmxvY2spOwotCWluaXRfTVVURVgoJmNoaXAtPm1jZV9tdXRleCk7Ci0JaW5pdF9NVVRFWCgmY2hpcC0+b3Blbl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+bWNlX211dGV4KTsKKwltdXRleF9pbml0KCZjaGlwLT5vcGVuX211dGV4KTsKIAljaGlwLT5jYXJkID0gY2FyZDsKIAljaGlwLT5kZXZfdS5zZGV2ID0gc2RldjsKIAljaGlwLT5yZWdzX3NpemUgPSBzZGV2LT5yZWdfYWRkcnNbMF0ucmVnX3NpemU7CkBAIC0yMTU3LDggKzIxNTUsOCBAQAogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+Y19kbWEuZWJ1c19pbmZvLmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5wX2RtYS5lYnVzX2luZm8ubG9jayk7Ci0JaW5pdF9NVVRFWCgmY2hpcC0+bWNlX211dGV4KTsKLQlpbml0X01VVEVYKCZjaGlwLT5vcGVuX211dGV4KTsKKwltdXRleF9pbml0KCZjaGlwLT5tY2VfbXV0ZXgpOworCW11dGV4X2luaXQoJmNoaXAtPm9wZW5fbXV0ZXgpOwogCWNoaXAtPmZsYWdzIHw9IENTNDIzMV9GTEFHX0VCVVM7CiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAJY2hpcC0+ZGV2X3UucGRldiA9IGVkZXYtPmJ1cy0+c2VsZjsKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eC5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4LmMKaW5kZXggN2M4ZTMyOC4uZmM3MzNiYiAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4LmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2tfaW5pdCgmZW11LT52b2ljZV9sb2NrKTsKLQlpbml0X01VVEVYKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9pbml0KCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKIAogCWVtdS0+Y2xpZW50ID0gLTE7CiAjaWZkZWYgQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTCmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMKaW5kZXggZGZiZmNmYi4uMzQzNjgxNiAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIAllbXUgPSBjbG9zdXJlOwogCXNuZF9hc3NlcnQoYXJnICE9IE5VTEwgJiYgZW11ICE9IE5VTEwsIHJldHVybiAtRU5YSU8pOwogCi0JZG93bigmZW11LT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmZW11LT5yZWdpc3Rlcl9tdXRleCk7CiAKIAlpZiAoIXNuZF9lbXV4X2luY19jb3VudChlbXUpKSB7Ci0JCXVwKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlpZiAocCA9PSBOVUxMKSB7CiAJCXNuZF9wcmludGsoImNhbid0IGNyZWF0ZSBwb3J0XG4iKTsKIAkJc25kX2VtdXhfZGVjX2NvdW50KGVtdSk7Ci0JCXVwKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogCXNuZF9lbXV4X3Jlc2V0X3BvcnQocCk7CiAKLQl1cCgmZW11LT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkxLDEzICsxOTEsMTMgQEAKIAllbXUgPSBwLT5lbXU7CiAJc25kX2Fzc2VydChlbXUgIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAKLQlkb3duKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKIAlzbmRfZW11eF9zb3VuZHNfb2ZmX2FsbChwKTsKIAlzbmRfc291bmRmb250X2Nsb3NlX2NoZWNrKGVtdS0+c2ZsaXN0LCBTRl9DTElFTlRfTk8ocC0+Y2hzZXQucG9ydCkpOwogCXNuZF9zZXFfZXZlbnRfcG9ydF9kZXRhY2gocC0+Y2hzZXQuY2xpZW50LCBwLT5jaHNldC5wb3J0KTsKIAlzbmRfZW11eF9kZWNfY291bnQoZW11KTsKIAotCXVwKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmVtdS0+cmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfcHJvYy5jIGIvc291bmQvc3ludGgvZW11eC9lbXV4X3Byb2MuYwppbmRleCBhNzBhMTc5Li4xYmE2OGNlIDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfcHJvYy5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9wcm9jLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAlpbnQgaTsKIAogCWVtdSA9IGVudHJ5LT5wcml2YXRlX2RhdGE7Ci0JZG93bigmZW11LT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmZW11LT5yZWdpc3Rlcl9tdXRleCk7CiAJaWYgKGVtdS0+bmFtZSkKIAkJc25kX2lwcmludGYoYnVmLCAiRGV2aWNlOiAlc1xuIiwgZW11LT5uYW1lKTsKIAlzbmRfaXByaW50ZihidWYsICJQb3J0czogJWRcbiIsIGVtdS0+bnVtX3BvcnRzKTsKQEAgLTU2LDEzICs1NiwxMyBAQAogCQlzbmRfaXByaW50ZihidWYsICJNZW1vcnkgU2l6ZTogMFxuIik7CiAJfQogCWlmIChlbXUtPnNmbGlzdCkgewotCQlkb3duKCZlbXUtPnNmbGlzdC0+cHJlc2V0c19tdXRleCk7CisJCW11dGV4X2xvY2soJmVtdS0+c2ZsaXN0LT5wcmVzZXRzX211dGV4KTsKIAkJc25kX2lwcmludGYoYnVmLCAiU291bmRGb250czogJWRcbiIsIGVtdS0+c2ZsaXN0LT5mb250c19zaXplKTsKIAkJc25kX2lwcmludGYoYnVmLCAiSW5zdHJ1bWVudHM6ICVkXG4iLCBlbXUtPnNmbGlzdC0+em9uZV9jb3VudGVyKTsKIAkJc25kX2lwcmludGYoYnVmLCAiU2FtcGxlczogJWRcbiIsIGVtdS0+c2ZsaXN0LT5zYW1wbGVfY291bnRlcik7CiAJCXNuZF9pcHJpbnRmKGJ1ZiwgIkxvY2tlZCBJbnN0cnVtZW50czogJWRcbiIsIGVtdS0+c2ZsaXN0LT56b25lX2xvY2tlZCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZiwgIkxvY2tlZCBTYW1wbGVzOiAlZFxuIiwgZW11LT5zZmxpc3QtPnNhbXBsZV9sb2NrZWQpOwotCQl1cCgmZW11LT5zZmxpc3QtPnByZXNldHNfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmVtdS0+c2ZsaXN0LT5wcmVzZXRzX211dGV4KTsKIAl9CiAjaWYgMCAgLyogZGVidWcgKi8KIAlpZiAoZW11LT52b2ljZXNbMF0uc3RhdGUgIT0gU05EUlZfRU1VWF9TVF9PRkYgJiYgZW11LT52b2ljZXNbMF0uY2ggPj0gMCkgewpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCXNuZF9pcHJpbnRmKGJ1ZiwgInNhbXBsZV9tb2RlPSV4LCByYXRlPSV4XG4iLCB2cC0+cmVnLnNhbXBsZV9tb2RlLCB2cC0+cmVnLnJhdGVfb2Zmc2V0KTsKIAl9CiAjZW5kaWYKLQl1cCgmZW11LT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKIH0KIAogCmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc2VxLmMKaW5kZXggMWE5NzNkNy4uOGYwMGYwNyAxMDA2NDQKLS0tIGEvc291bmQvc3ludGgvZW11eC9lbXV4X3NlcS5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zZXEuYwpAQCAtMTIzLDEyICsxMjMsMTIgQEAKIAlpZiAoZW11LT52b2ljZXMpCiAJCXNuZF9lbXV4X3Rlcm1pbmF0ZV9hbGwoZW11KTsKIAkJCi0JZG93bigmZW11LT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmZW11LT5yZWdpc3Rlcl9tdXRleCk7CiAJaWYgKGVtdS0+Y2xpZW50ID49IDApIHsKIAkJc25kX3NlcV9kZWxldGVfa2VybmVsX2NsaWVudChlbXUtPmNsaWVudCk7CiAJCWVtdS0+Y2xpZW50ID0gLTE7CiAJfQotCXVwKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJmVtdS0+cmVnaXN0ZXJfbXV0ZXgpOwogfQogCiAKQEAgLTMxMSwxMCArMzExLDEwIEBACiAJZW11ID0gcC0+ZW11OwogCXNuZF9hc3NlcnQoZW11ICE9IE5VTEwsIHJldHVybiAtRUlOVkFMKTsKIAotCWRvd24oJmVtdS0+cmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJmVtdS0+cmVnaXN0ZXJfbXV0ZXgpOwogCXNuZF9lbXV4X2luaXRfcG9ydChwKTsKIAlzbmRfZW11eF9pbmNfY291bnQoZW11KTsKLQl1cCgmZW11LT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZlbXUtPnJlZ2lzdGVyX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyLDEwICszMzIsMTAgQEAKIAllbXUgPSBwLT5lbXU7CiAJc25kX2Fzc2VydChlbXUgIT0gTlVMTCwgcmV0dXJuIC1FSU5WQUwpOwogCi0JZG93bigmZW11LT5yZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmZW11LT5yZWdpc3Rlcl9tdXRleCk7CiAJc25kX2VtdXhfc291bmRzX29mZl9hbGwocCk7CiAJc25kX2VtdXhfZGVjX2NvdW50KGVtdSk7Ci0JdXAoJmVtdS0+cmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZW11LT5yZWdpc3Rlcl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMgYi9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCmluZGV4IDRjNTc1NGQuLjMyYzI3MTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKKysrIGIvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYwpAQCAtNzksNyArNzksNyBAQAogbG9ja19wcmVzZXQoc3RydWN0IHNuZF9zZl9saXN0ICpzZmxpc3QpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlkb3duKCZzZmxpc3QtPnByZXNldHNfbXV0ZXgpOworCW11dGV4X2xvY2soJnNmbGlzdC0+cHJlc2V0c19tdXRleCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNmbGlzdC0+bG9jaywgZmxhZ3MpOwogCXNmbGlzdC0+cHJlc2V0c19sb2NrZWQgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNmbGlzdC0+bG9jaywgZmxhZ3MpOwpAQCAtOTYsNyArOTYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZmxpc3QtPmxvY2ssIGZsYWdzKTsKIAlzZmxpc3QtPnByZXNldHNfbG9ja2VkID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZmxpc3QtPmxvY2ssIGZsYWdzKTsKLQl1cCgmc2ZsaXN0LT5wcmVzZXRzX211dGV4KTsKKwltdXRleF91bmxvY2soJnNmbGlzdC0+cHJlc2V0c19tdXRleCk7CiB9CiAKIApAQCAtMTM5MCw3ICsxMzkwLDcgQEAKIAlpZiAoKHNmbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpzZmxpc3QpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpbml0X01VVEVYKCZzZmxpc3QtPnByZXNldHNfbXV0ZXgpOworCW11dGV4X2luaXQoJnNmbGlzdC0+cHJlc2V0c19tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnNmbGlzdC0+bG9jayk7CiAJc2ZsaXN0LT5tZW1oZHIgPSBoZHI7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL3V0aWxfbWVtLmMgYi9zb3VuZC9zeW50aC91dGlsX21lbS5jCmluZGV4IDIxN2U4ZTUuLjFkOWIxMWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL3V0aWxfbWVtLmMKKysrIGIvc291bmQvc3ludGgvdXRpbF9tZW0uYwpAQCAtMTgsNiArMTgsNyBAQAogICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzb3VuZC9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDIsNyArNDMsNyBAQAogCWlmIChoZHIgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJaGRyLT5zaXplID0gbWVtc2l6ZTsKLQlpbml0X01VVEVYKCZoZHItPmJsb2NrX211dGV4KTsKKwltdXRleF9pbml0KCZoZHItPmJsb2NrX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmaGRyLT5ibG9jayk7CiAKIAlyZXR1cm4gaGRyOwpAQCAtMTM2LDkgKzEzNyw5IEBACiBzbmRfdXRpbF9tZW1fYWxsb2Moc3RydWN0IHNuZF91dGlsX21lbWhkciAqaGRyLCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3Qgc25kX3V0aWxfbWVtYmxrICpibGs7Ci0JZG93bigmaGRyLT5ibG9ja19tdXRleCk7CisJbXV0ZXhfbG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJYmxrID0gX19zbmRfdXRpbF9tZW1fYWxsb2MoaGRyLCBzaXplKTsKLQl1cCgmaGRyLT5ibG9ja19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoZHItPmJsb2NrX211dGV4KTsKIAlyZXR1cm4gYmxrOwogfQogCkBAIC0xNjMsOSArMTY0LDkgQEAKIHsKIAlzbmRfYXNzZXJ0KGhkciAmJiBibGssIHJldHVybiAtRUlOVkFMKTsKIAotCWRvd24oJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X2xvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCV9fc25kX3V0aWxfbWVtX2ZyZWUoaGRyLCBibGspOwotCXVwKCZoZHItPmJsb2NrX211dGV4KTsKKwltdXRleF91bmxvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzUsOSArMTc2LDkgQEAKIGludCBzbmRfdXRpbF9tZW1fYXZhaWwoc3RydWN0IHNuZF91dGlsX21lbWhkciAqaGRyKQogewogCXVuc2lnbmVkIGludCBzaXplOwotCWRvd24oJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X2xvY2soJmhkci0+YmxvY2tfbXV0ZXgpOwogCXNpemUgPSBoZHItPnNpemUgLSBoZHItPnVzZWQ7Ci0JdXAoJmhkci0+YmxvY2tfbXV0ZXgpOworCW11dGV4X3VubG9jaygmaGRyLT5ibG9ja19tdXRleCk7CiAJcmV0dXJuIHNpemU7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5jIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKaW5kZXggZDUwMTMzOC4uNGU2MTRhYyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC02OSw2ICs3MCw3IEBACiBzdGF0aWMgaW50IHBpZFtTTkRSVl9DQVJEU10gPSB7IFswIC4uLiAoU05EUlZfQ0FSRFMtMSldID0gLTEgfTsgLyogUHJvZHVjdCBJRCBmb3IgdGhpcyBjYXJkICovCiBzdGF0aWMgaW50IG5ycGFja3MgPSA0OwkJLyogbWF4LiBudW1iZXIgb2YgcGFja2V0cyBwZXIgdXJiICovCiBzdGF0aWMgaW50IGFzeW5jX3VubGluayA9IDE7CitzdGF0aWMgaW50IGRldmljZV9zZXR1cFtTTkRSVl9DQVJEU107IC8qIGRldmljZSBwYXJhbWV0ZXIgZm9yIHRoaXMgY2FyZCovCiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgdGhlIFVTQiBhdWRpbyBhZGFwdGVyLiIpOwpAQCAtODQsNiArODYsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhucnBhY2tzLCAiTWF4LiBudW1iZXIgb2YgcGFja2V0cyBwZXIgVVJCLiIpOwogbW9kdWxlX3BhcmFtKGFzeW5jX3VubGluaywgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFzeW5jX3VubGluaywgIlVzZSBhc3luYyB1bmxpbmsgbW9kZS4iKTsKK21vZHVsZV9wYXJhbV9hcnJheShkZXZpY2Vfc2V0dXAsIGludCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRldmljZV9zZXR1cCwgIlNwZWNpZmljIGRldmljZSBzZXR1cCAoaWYgbmVlZGVkKS4iKTsKIAogCiAvKgpAQCAtMjAyLDcgKzIwNiw3IEBACiAgKiB0aGUgYWxsIGludGVyZmFjZXMgb24gdGhlIHNhbWUgY2FyZCBhcyBvbmUgc291bmQgZGV2aWNlLgogICovCiAKLXN0YXRpYyBERUNMQVJFX01VVEVYKHJlZ2lzdGVyX211dGV4KTsKK3N0YXRpYyBERUZJTkVfTVVURVgocmVnaXN0ZXJfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBzbmRfdXNiX2F1ZGlvICp1c2JfY2hpcFtTTkRSVl9DQVJEU107CiAKIApAQCAtNDc1LDYgKzQ3OSwxOCBAQAogCXJldHVybiAwOwogfQogCisvKiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIG5leHQgcGFja2V0ICovCitzdGF0aWMgaW50IHNuZF91c2JfYXVkaW9fbmV4dF9wYWNrZXRfc2l6ZShzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnMpCit7CisJaWYgKHN1YnMtPmZpbGxfbWF4KQorCQlyZXR1cm4gc3Vicy0+bWF4ZnJhbWVzaXplOworCWVsc2UgeworCQlzdWJzLT5waGFzZSA9IChzdWJzLT5waGFzZSAmIDB4ZmZmZikKKwkJCSsgKHN1YnMtPmZyZXFtIDw8IHN1YnMtPmRhdGFpbnRlcnZhbCk7CisJCXJldHVybiBtaW4oc3Vicy0+cGhhc2UgPj4gMTYsIHN1YnMtPm1heGZyYW1lc2l6ZSk7CisJfQorfQorCiAvKgogICogUHJlcGFyZSB1cmIgZm9yIHN0cmVhbWluZyBiZWZvcmUgcGxheWJhY2sgc3RhcnRzLgogICoKQEAgLTQ5MiwxNiArNTA4LDcgQEAKIAl1cmItPmRldiA9IGN0eC0+c3Vicy0+ZGV2OwogCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBzdWJzLT5wYWNrc19wZXJfbXM7CiAJZm9yIChpID0gMDsgaSA8IHN1YnMtPnBhY2tzX3Blcl9tczsgKytpKSB7Ci0JCS8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIHBhY2tldCAqLwotCQlpZiAoc3Vicy0+ZmlsbF9tYXgpCi0JCQljb3VudHMgPSBzdWJzLT5tYXhmcmFtZXNpemU7IC8qIGZpeGVkICovCi0JCWVsc2UgewotCQkJc3Vicy0+cGhhc2UgPSAoc3Vicy0+cGhhc2UgJiAweGZmZmYpCi0JCQkJKyAoc3Vicy0+ZnJlcW0gPDwgc3Vicy0+ZGF0YWludGVydmFsKTsKLQkJCWNvdW50cyA9IHN1YnMtPnBoYXNlID4+IDE2OwotCQkJaWYgKGNvdW50cyA+IHN1YnMtPm1heGZyYW1lc2l6ZSkKLQkJCQljb3VudHMgPSBzdWJzLT5tYXhmcmFtZXNpemU7Ci0JCX0KKwkJY291bnRzID0gc25kX3VzYl9hdWRpb19uZXh0X3BhY2tldF9zaXplKHN1YnMpOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnMgKiBzdHJpZGU7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gY291bnRzICogc3RyaWRlOwogCQlvZmZzICs9IGNvdW50czsKQEAgLTUzOCwxNiArNTQ1LDcgQEAKIAl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3Vicy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBjdHgtPnBhY2tldHM7IGkrKykgewotCQkvKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBwYWNrZXQgKi8KLQkJaWYgKHN1YnMtPmZpbGxfbWF4KQotCQkJY291bnRzID0gc3Vicy0+bWF4ZnJhbWVzaXplOyAvKiBmaXhlZCAqLwotCQllbHNlIHsKLQkJCXN1YnMtPnBoYXNlID0gKHN1YnMtPnBoYXNlICYgMHhmZmZmKQotCQkJCSsgKHN1YnMtPmZyZXFtIDw8IHN1YnMtPmRhdGFpbnRlcnZhbCk7Ci0JCQljb3VudHMgPSBzdWJzLT5waGFzZSA+PiAxNjsKLQkJCWlmIChjb3VudHMgPiBzdWJzLT5tYXhmcmFtZXNpemUpCi0JCQkJY291bnRzID0gc3Vicy0+bWF4ZnJhbWVzaXplOwotCQl9CisJCWNvdW50cyA9IHNuZF91c2JfYXVkaW9fbmV4dF9wYWNrZXRfc2l6ZShzdWJzKTsKIAkJLyogc2V0IHVwIGRlc2NyaXB0b3IgKi8KIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzICogc3RyaWRlOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IGNvdW50cyAqIHN0cmlkZTsKQEAgLTcyNSwxMCArNzIzLDkgQEAKIHN0YXRpYyBpbnQgc25kX3BjbV9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3VicykKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vicy0+cnVudGltZTsKLQlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCQlydW50aW1lLT5kbWFfYXJlYSA9IE5VTEw7Ci0JfQorCisJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOworCXJ1bnRpbWUtPmRtYV9hcmVhID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzc5LDYgKzc3NiwzNSBAQAogfQogCiAKK3N0YXRpYyBjb25zdCBjaGFyICp1c2JfZXJyb3Jfc3RyaW5nKGludCBlcnIpCit7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1FTk9ERVY6CisJCXJldHVybiAibm8gZGV2aWNlIjsKKwljYXNlIC1FTk9FTlQ6CisJCXJldHVybiAiZW5kcG9pbnQgbm90IGVuYWJsZWQiOworCWNhc2UgLUVQSVBFOgorCQlyZXR1cm4gImVuZHBvaW50IHN0YWxsZWQiOworCWNhc2UgLUVOT1NQQzoKKwkJcmV0dXJuICJub3QgZW5vdWdoIGJhbmR3aWR0aCI7CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm4gImRldmljZSBkaXNhYmxlZCI7CisJY2FzZSAtRUhPU1RVTlJFQUNIOgorCQlyZXR1cm4gImRldmljZSBzdXNwZW5kZWQiOworI2lmbmRlZiBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPCisJY2FzZSAtRU5PU1lTOgorCQlyZXR1cm4gImVuYWJsZSBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIHRvIHBsYXkgdGhyb3VnaCBhIGh1YiI7CisjZW5kaWYKKwljYXNlIC1FSU5WQUw6CisJY2FzZSAtRUFHQUlOOgorCWNhc2UgLUVGQklHOgorCWNhc2UgLUVNU0dTSVpFOgorCQlyZXR1cm4gImludGVybmFsIGVycm9yIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24gZXJyb3IiOworCX0KK30KKwogLyoKICAqIHNldCB1cCBhbmQgc3RhcnQgZGF0YS9zeW5jIHVyYnMKICAqLwpAQCAtODExLDE2ICs4MzcsMjIgQEAKIAlzdWJzLT51bmxpbmtfbWFzayA9IDA7CiAJc3Vicy0+cnVubmluZyA9IDE7CiAJZm9yIChpID0gMDsgaSA8IHN1YnMtPm51cmJzOyBpKyspIHsKLQkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYihzdWJzLT5kYXRhdXJiW2ldLnVyYiwgR0ZQX0FUT01JQykpIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IHN1Ym1pdCBkYXRhcGlwZSBmb3IgdXJiICVkLCBlcnIgPSAlZFxuIiwgaSwgZXJyKTsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIoc3Vicy0+ZGF0YXVyYltpXS51cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoZXJyIDwgMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IHN1Ym1pdCBkYXRhcGlwZSAiCisJCQkJICAgImZvciB1cmIgJWQsIGVycm9yICVkOiAlc1xuIiwKKwkJCQkgICBpLCBlcnIsIHVzYl9lcnJvcl9zdHJpbmcoZXJyKSk7CiAJCQlnb3RvIF9fZXJyb3I7CiAJCX0KIAkJc2V0X2JpdChpLCAmc3Vicy0+YWN0aXZlX21hc2spOwogCX0KIAlpZiAoc3Vicy0+c3luY3BpcGUpIHsKIAkJZm9yIChpID0gMDsgaSA8IFNZTkNfVVJCUzsgaSsrKSB7Ci0JCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHN1YnMtPnN5bmN1cmJbaV0udXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7Ci0JCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IHN1Ym1pdCBzeW5jcGlwZSBmb3IgdXJiICVkLCBlcnIgPSAlZFxuIiwgaSwgZXJyKTsKKwkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHN1YnMtPnN5bmN1cmJbaV0udXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IHN1Ym1pdCBzeW5jcGlwZSAiCisJCQkJCSAgICJmb3IgdXJiICVkLCBlcnJvciAlZDogJXNcbiIsCisJCQkJCSAgIGksIGVyciwgdXNiX2Vycm9yX3N0cmluZyhlcnIpKTsKIAkJCQlnb3RvIF9fZXJyb3I7CiAJCQl9CiAJCQlzZXRfYml0KGkgKyAxNiwgJnN1YnMtPmFjdGl2ZV9tYXNrKTsKQEAgLTEzOTAsOCArMTQyMiw4IEBACiAJY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMoaHdfcGFyYW1zKTsKIAlmbXQgPSBmaW5kX2Zvcm1hdChzdWJzLCBmb3JtYXQsIHJhdGUsIGNoYW5uZWxzKTsKIAlpZiAoISBmbXQpIHsKLQkJc25kX3ByaW50ZChLRVJOX0RFQlVHICJjYW5ub3Qgc2V0IGZvcm1hdDogZm9ybWF0ID0gJXMsIHJhdGUgPSAlZCwgY2hhbm5lbHMgPSAlZFxuIiwKLQkJCSAgIHNuZF9wY21fZm9ybWF0X25hbWUoZm9ybWF0KSwgcmF0ZSwgY2hhbm5lbHMpOworCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgImNhbm5vdCBzZXQgZm9ybWF0OiBmb3JtYXQgPSAweCV4LCByYXRlID0gJWQsIGNoYW5uZWxzID0gJWRcbiIsCisJCQkgICBmb3JtYXQsIHJhdGUsIGNoYW5uZWxzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMDE3LDYgKzIwNDksOCBAQAogfTsKIAogCisjaWYgZGVmaW5lZChDT05GSUdfUFJPQ0ZTKSAmJiBkZWZpbmVkKENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMpCisKIC8qCiAgKiBwcm9jIGludGVyZmFjZSBmb3IgbGlzdCB0aGUgc3VwcG9ydGVkIHBjbSBmb3JtYXRzCiAgKi8KQEAgLTIwMzIsNyArMjA2Niw3IEBACiAJCWZwID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYXVkaW9mb3JtYXQsIGxpc3QpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgIEludGVyZmFjZSAlZFxuIiwgZnAtPmlmYWNlKTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEFsdHNldCAlZFxuIiwgZnAtPmFsdHNldHRpbmcpOwotCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRm9ybWF0OiAlc1xuIiwgc25kX3BjbV9mb3JtYXRfbmFtZShmcC0+Zm9ybWF0KSk7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBGb3JtYXQ6IDB4JXhcbiIsIGZwLT5mb3JtYXQpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgQ2hhbm5lbHM6ICVkXG4iLCBmcC0+Y2hhbm5lbHMpOwogCQlzbmRfaXByaW50ZihidWZmZXIsICIgICAgRW5kcG9pbnQ6ICVkICVzICglcylcbiIsCiAJCQkgICAgZnAtPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLLApAQCAtMjEwNyw2ICsyMTQxLDEzIEBACiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgc3RyZWFtLCAxMDI0LCBwcm9jX3BjbV9mb3JtYXRfcmVhZCk7CiB9CiAKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX3BjbV9mb3JtYXRfYWRkKHN0cnVjdCBzbmRfdXNiX3N0cmVhbSAqc3RyZWFtKQoreworfQorCisjZW5kaWYKIAogLyoKICAqIGluaXRpYWxpemUgdGhlIHN1YnN0cmVhbSBpbnN0YW5jZS4KQEAgLTI1MDksNiArMjU1MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXVkaW9waGlsZV9za2lwX3NldHRpbmdfcXVpcmsoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCisJCQkJCSBpbnQgaWZhY2UsIGludCBhbHRubyk7CiBzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2VuZHBvaW50cyhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgaW50IGlmYWNlX25vKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CkBAIC0yNTQzLDYgKzI1ODYsMTIgQEAKIAkJc3RyZWFtID0gKGdldF9lbmRwb2ludChhbHRzLCAwKS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8KIAkJCVNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSA6IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7CiAJCWFsdG5vID0gYWx0c2QtPmJBbHRlcm5hdGVTZXR0aW5nOworCQorCQkvKiBhdWRpb3BoaWxlIHVzYjogc2tpcCBhbHRzZXRzIGluY29tcGF0aWJsZSB3aXRoIGRldmljZV9zZXR1cAorCQkgKi8KKwkJaWYgKGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNzYzLCAweDIwMDMpICYmIAorCQkgICAgYXVkaW9waGlsZV9za2lwX3NldHRpbmdfcXVpcmsoY2hpcCwgaWZhY2Vfbm8sIGFsdG5vKSkKKwkJCWNvbnRpbnVlOwogCiAJCS8qIGdldCBhdWRpbyBmb3JtYXRzICovCiAJCWZtdCA9IHNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgQVNfR0VORVJBTCk7CkBAIC0yNjM3LDcgKzI2ODYsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiV1OiVkOiBhZGQgYXVkaW8gZW5kcG9pbnQgMHgleFxuIiwgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBpLCBmcC0+ZW5kcG9pbnQpOworCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIiVkOiV1OiVkOiBhZGQgYXVkaW8gZW5kcG9pbnQgMHgleFxuIiwgZGV2LT5kZXZudW0sIGlmYWNlX25vLCBhbHRubywgZnAtPmVuZHBvaW50KTsKIAkJZXJyID0gYWRkX2F1ZGlvX2VuZHBvaW50KGNoaXAsIHN0cmVhbSwgZnApOwogCQlpZiAoZXJyIDwgMCkgewogCQkJa2ZyZWUoZnAtPnJhdGVfdGFibGUpOwpAQCAtMzA0NSw2ICszMDk0LDQ1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTZXR1cCBxdWlya3MKKyAqLworI2RlZmluZSBBVURJT1BISUxFX1NFVAkJCTB4MDEgLyogaWYgc2V0LCBwYXJzZSBkZXZpY2Vfc2V0dXAgKi8KKyNkZWZpbmUgQVVESU9QSElMRV9TRVRfRFRTICAgICAgICAgICAgICAweDAyIC8qIGlmIHNldCwgZW5hYmxlIERUUyBEaWdpdGFsIE91dHB1dCAqLworI2RlZmluZSBBVURJT1BISUxFX1NFVF85NksgICAgICAgICAgICAgIDB4MDQgLyogNDgtOTZLSHogcmF0ZSBpZiBzZXQsIDgtNDhLSHogb3RoZXJ3aXNlICovCisjZGVmaW5lIEFVRElPUEhJTEVfU0VUXzI0QgkJMHgwOCAvKiAyNGJpdHMgc2FtcGxlIGlmIHNldCwgMTZiaXRzIG90aGVyd2lzZSAqLworI2RlZmluZSBBVURJT1BISUxFX1NFVF9ESQkJMHgxMCAvKiBpZiBzZXQsIGVuYWJsZSBEaWdpdGFsIElucHV0ICovCisjZGVmaW5lIEFVRElPUEhJTEVfU0VUX01BU0sJCTB4MUYgLyogYml0IG1hc2sgZm9yIHNldHVwIHZhbHVlICovCisjZGVmaW5lIEFVRElPUEhJTEVfU0VUXzI0Ql80OEtfREkJMHgxOSAvKiB2YWx1ZSBmb3IgMjRiaXRzKzQ4S0h6K0RpZ2l0YWwgSW5wdXQgKi8KKyNkZWZpbmUgQVVESU9QSElMRV9TRVRfMjRCXzQ4S19OT1RESQkweDA5IC8qIHZhbHVlIGZvciAyNGJpdHMrNDhLSHorTm8gRGlnaXRhbCBJbnB1dCAqLworI2RlZmluZSBBVURJT1BISUxFX1NFVF8xNkJfNDhLX0RJCTB4MTEgLyogdmFsdWUgZm9yIDE2Yml0cys0OEtIeitEaWdpdGFsIElucHV0ICovCisjZGVmaW5lIEFVRElPUEhJTEVfU0VUXzE2Ql80OEtfTk9UREkJMHgwMSAvKiB2YWx1ZSBmb3IgMTZiaXRzKzQ4S0h6K05vIERpZ2l0YWwgSW5wdXQgKi8KKworc3RhdGljIGludCBhdWRpb3BoaWxlX3NraXBfc2V0dGluZ19xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKKwkJCQkJIGludCBpZmFjZSwgaW50IGFsdG5vKQoreworCWlmIChkZXZpY2Vfc2V0dXBbY2hpcC0+aW5kZXhdICYgQVVESU9QSElMRV9TRVQpIHsKKwkJaWYgKChkZXZpY2Vfc2V0dXBbY2hpcC0+aW5kZXhdICYgQVVESU9QSElMRV9TRVRfRFRTKQorCQkgICAgJiYgYWx0bm8gIT0gNikKKwkJCXJldHVybiAxOyAvKiBza2lwIHRoaXMgYWx0c2V0dGluZyAqLworCQlpZiAoKGRldmljZV9zZXR1cFtjaGlwLT5pbmRleF0gJiBBVURJT1BISUxFX1NFVF85NkspCisJCSAgICAmJiBhbHRubyAhPSAxKQorCQkJcmV0dXJuIDE7IC8qIHNraXAgdGhpcyBhbHRzZXR0aW5nICovCisJCWlmICgoZGV2aWNlX3NldHVwW2NoaXAtPmluZGV4XSAmIEFVRElPUEhJTEVfU0VUX01BU0spID09CisJCSAgICBBVURJT1BISUxFX1NFVF8yNEJfNDhLX0RJICYmIGFsdG5vICE9IDIpCisJCQlyZXR1cm4gMTsgLyogc2tpcCB0aGlzIGFsdHNldHRpbmcgKi8KKwkJaWYgKChkZXZpY2Vfc2V0dXBbY2hpcC0+aW5kZXhdICYgQVVESU9QSElMRV9TRVRfTUFTSykgPT0KKwkJICAgIEFVRElPUEhJTEVfU0VUXzI0Ql80OEtfTk9UREkgJiYgYWx0bm8gIT0gMykKKwkJCXJldHVybiAxOyAvKiBza2lwIHRoaXMgYWx0c2V0dGluZyAqLworCQlpZiAoKGRldmljZV9zZXR1cFtjaGlwLT5pbmRleF0gJiBBVURJT1BISUxFX1NFVF9NQVNLKSA9PQorCQkgICAgQVVESU9QSElMRV9TRVRfMTZCXzQ4S19ESSAmJiBhbHRubyAhPSA0KQorCQkJcmV0dXJuIDE7IC8qIHNraXAgdGhpcyBhbHRzZXR0aW5nICovCisJCWlmICgoZGV2aWNlX3NldHVwW2NoaXAtPmluZGV4XSAmIEFVRElPUEhJTEVfU0VUX01BU0spID09CisJCSAgICBBVURJT1BISUxFX1NFVF8xNkJfNDhLX05PVERJICYmIGFsdG5vICE9IDUpCisJCQlyZXR1cm4gMTsgLyogc2tpcCB0aGlzIGFsdHNldHRpbmcgKi8KKwl9CQorCXJldHVybiAwOyAvKiBrZWVwIHRoaXMgYWx0c2V0dGluZyAqLworfQogCiAvKgogICogYXVkaW8taW50ZXJmYWNlIHF1aXJrcwpAQCAtMzA3MCw3ICszMTU4LDcgQEAKIAkJW1FVSVJLX01JRElfTk9WQVRJT05dID0gc25kX3VzYl9jcmVhdGVfbWlkaV9pbnRlcmZhY2UsCiAJCVtRVUlSS19NSURJX1JBV10gPSBzbmRfdXNiX2NyZWF0ZV9taWRpX2ludGVyZmFjZSwKIAkJW1FVSVJLX01JRElfRU1BR0lDXSA9IHNuZF91c2JfY3JlYXRlX21pZGlfaW50ZXJmYWNlLAotCQlbUVVJUktfTUlESV9NSURJVEVDSF0gPSBzbmRfdXNiX2NyZWF0ZV9taWRpX2ludGVyZmFjZSwKKwkJW1FVSVJLX01JRElfQ01FXSA9IHNuZF91c2JfY3JlYXRlX21pZGlfaW50ZXJmYWNlLAogCQlbUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFXSA9IGNyZWF0ZV9zdGFuZGFyZF9hdWRpb19xdWlyaywKIAkJW1FVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5UXSA9IGNyZWF0ZV9maXhlZF9zdHJlYW1fcXVpcmssCiAJCVtRVUlSS19BVURJT19FRElST0xfVUE3MDBfVUEyNV0gPSBjcmVhdGVfdWE3MDBfdWEyNV9xdWlyaywKQEAgLTMyODIsNyArMzM3MCw3IEBACiAKIAkvKiBjaGVjayB3aGV0aGVyIGl0J3MgYWxyZWFkeSByZWdpc3RlcmVkICovCiAJY2hpcCA9IE5VTEw7Ci0JZG93bigmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgU05EUlZfQ0FSRFM7IGkrKykgewogCQlpZiAodXNiX2NoaXBbaV0gJiYgdXNiX2NoaXBbaV0tPmRldiA9PSBkZXYpIHsKIAkJCWlmICh1c2JfY2hpcFtpXS0+c2h1dGRvd24pIHsKQEAgLTMzMzUsMTMgKzM0MjMsMTMgQEAKIAogCXVzYl9jaGlwW2NoaXAtPmluZGV4XSA9IGNoaXA7CiAJY2hpcC0+bnVtX2ludGVyZmFjZXMrKzsKLQl1cCgmcmVnaXN0ZXJfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiBjaGlwOwogCiAgX19lcnJvcjoKIAlpZiAoY2hpcCAmJiAhY2hpcC0+bnVtX2ludGVyZmFjZXMpCiAJCXNuZF9jYXJkX2ZyZWUoY2hpcC0+Y2FyZCk7Ci0JdXAoJnJlZ2lzdGVyX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKICBfX2Vycl92YWw6CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0zMzYxLDcgKzM0NDksNyBAQAogCiAJY2hpcCA9IHB0cjsKIAljYXJkID0gY2hpcC0+Y2FyZDsKLQlkb3duKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWNoaXAtPnNodXRkb3duID0gMTsKIAljaGlwLT5udW1faW50ZXJmYWNlcy0tOwogCWlmIChjaGlwLT5udW1faW50ZXJmYWNlcyA8PSAwKSB7CkBAIC0zMzc5LDEwICszNDY3LDEwIEBACiAJCQlzbmRfdXNiX21peGVyX2Rpc2Nvbm5lY3QocCk7CiAJCX0KIAkJdXNiX2NoaXBbY2hpcC0+aW5kZXhdID0gTlVMTDsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJfSBlbHNlIHsKLQkJdXAoJnJlZ2lzdGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uaCBiL3NvdW5kL3VzYi91c2JhdWRpby5oCmluZGV4IGVjZDcyNGIuLjg4NzMzNTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5oCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5oCkBAIC0xNjEsNyArMTYxLDcgQEAKIAlRVUlSS19NSURJX05PVkFUSU9OLAogCVFVSVJLX01JRElfUkFXLAogCVFVSVJLX01JRElfRU1BR0lDLAotCVFVSVJLX01JRElfTUlESVRFQ0gsCisJUVVJUktfTUlESV9DTUUsCiAJUVVJUktfQVVESU9fU1RBTkRBUkRfSU5URVJGQUNFLAogCVFVSVJLX0FVRElPX0ZJWEVEX0VORFBPSU5ULAogCVFVSVJLX0FVRElPX0VESVJPTF9VQTcwMF9VQTI1LApAQCAtMjA5LDcgKzIwOSw3IEBACiAvKiBmb3IgUVVJUktfTUlESV9FTUFHSUMsIGRhdGEgcG9pbnRzIHRvIGEgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8KICAqIHN0cnVjdHVyZSAob3V0X2NhYmxlcyBhbmQgaW5fY2FibGVzIG9ubHkpICovCiAKLS8qIGZvciBRVUlSS19NSURJX01JRElURUNILCBkYXRhIGlzIE5VTEwgKi8KKy8qIGZvciBRVUlSS19NSURJX0NNRSwgZGF0YSBpcyBOVUxMICovCiAKIC8qCiAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaWRpLmMgYi9zb3VuZC91c2IvdXNibWlkaS5jCmluZGV4IGYxNWIwMjEuLjJiOWQ5NDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaWRpLmMKKysrIGIvc291bmQvdXNiL3VzYm1pZGkuYwpAQCAtODcxLDEwICs4NzEsMTAgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfdXNibWlkaV9jb3VudF9iaXRzKHVuc2lnbmVkIGludCB4KQogewotCXVuc2lnbmVkIGludCBiaXRzID0gMDsKKwl1bnNpZ25lZCBpbnQgYml0czsKIAotCWZvciAoOyB4OyB4ID4+PSAxKQotCQliaXRzICs9IHggJiAxOworCWZvciAoYml0cyA9IDA7IHg7ICsrYml0cykKKwkJeCAmPSB4IC0gMTsKIAlyZXR1cm4gYml0czsKIH0KIApAQCAtMTA4Miw2ICsxMDgyLDggQEAKIAl7IFVTQl9JRCgweDA1ODIsIDB4MDA0ZCksIDAsICIlcyBNSURJIiB9LAogCXsgVVNCX0lEKDB4MDU4MiwgMHgwMDRkKSwgMSwgIiVzIDEiIH0sCiAJeyBVU0JfSUQoMHgwNTgyLCAweDAwNGQpLCAyLCAiJXMgMiIgfSwKKwkvKiBFZGlyb2wgVU0tM0VYICovCisJeyBVU0JfSUQoMHgwNTgyLCAweDAwOWEpLCAzLCAiJXMgQ29udHJvbCIgfSwKIAkvKiBNLUF1ZGlvIE1pZGlTcG9ydCA4eDggKi8KIAl7IFVTQl9JRCgweDA3NjMsIDB4MTAzMSksIDgsICIlcyBDb250cm9sIiB9LAogCXsgVVNCX0lEKDB4MDc2MywgMHgxMDMzKSwgOCwgIiVzIENvbnRyb2wiIH0sCkBAIC0xNTc0LDcgKzE1NzYsNyBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnRfaW5mbykpOwogCQllcnIgPSBzbmRfdXNibWlkaV9kZXRlY3RfZW5kcG9pbnRzKHVtaWRpLCAmZW5kcG9pbnRzWzBdLCAxKTsKIAkJYnJlYWs7Ci0JY2FzZSBRVUlSS19NSURJX01JRElURUNIOgorCWNhc2UgUVVJUktfTUlESV9DTUU6CiAJCWVyciA9IHNuZF91c2JtaWRpX2RldGVjdF9wZXJfcG9ydF9lbmRwb2ludHModW1pZGksIGVuZHBvaW50cyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWl4ZXIuYyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCmluZGV4IDY3OGRhYzIuLjhkMDhiMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JtaXhlci5jCisrKyBiL3NvdW5kL3VzYi91c2JtaXhlci5jCkBAIC00MzQsNyArNDM0LDYgQEAKIAkJa2N0bC0+aWQuaW5kZXgrKzsKIAlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKHN0YXRlLT5jaGlwLT5jYXJkLCBrY3RsKSkgPCAwKSB7CiAJCXNuZF9wcmludGQoS0VSTl9FUlIgImNhbm5vdCBhZGQgY29udHJvbCAoZXJyID0gJWQpXG4iLCBlcnIpOwotCQlzbmRfY3RsX2ZyZWVfb25lKGtjdGwpOwogCQlyZXR1cm4gZXJyOwogCX0KIAljdmFsLT5lbGVtX2lkID0gJmtjdGwtPmlkOwpAQCAtMTQ2OSw2ICsxNDY4LDcgQEAKIAlrY3RsID0gc25kX2N0bF9uZXcxKCZtaXhlcl9zZWxlY3R1bml0X2N0bCwgY3ZhbCk7CiAJaWYgKCEga2N0bCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgbWFsbG9jIGtjb250cm9sXG4iKTsKKwkJa2ZyZWUobmFtZWxpc3QpOwogCQlrZnJlZShjdmFsKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYyBiL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKaW5kZXggYzEyNjQ0My4uMzdhY2NiNiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCkBAIC0xOTUsNiArMTk1LDIyIEBACiAJeyAwIH0gLyogdGVybWluYXRvciAqLwogfTsKIAorc3RhdGljIHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgbWF5YTQ0X21hcFtdID0geworCS8qIDE6IElUIGxpbmUgKi8KKwl7IDIsICJMaW5lIFBsYXliYWNrIiB9LCAvKiBGVSAqLworCS8qIDM6IElUIGxpbmUgKi8KKwl7IDQsICJMaW5lIFBsYXliYWNrIiB9LCAvKiBGVSAqLworCS8qIDU6IElUIHBjbSBwbGF5YmFjayAqLworCS8qIDY6IE1VICovCisJeyA3LCAiTWFzdGVyIFBsYXliYWNrIiB9LCAvKiBGVSAqLworCS8qIDg6IE9UIHNwZWFrZXIgKi8KKwkvKiA5OiBJVCBsaW5lICovCisJeyAxMCwgIkxpbmUgQ2FwdHVyZSIgfSwgLyogRlUgKi8KKwkvKiAxMTogTVUgKi8KKwkvKiAxMjogT1QgcGNtIGNhcHR1cmUgKi8KKwl7IH0KK307CisKIC8qIFNlY3Rpb24gImp1c3RsaW5rX21hcCIgYmVsb3cgYWRkZWQgYnkgSmFtZXMgQ291cnRpZXItRHV0dG9uIDxKYW1lc0BzdXBlcmJ1Zy5kZW1vbi5jby51az4KICAqIHNvdXJjZWQgZnJvbSBNYXBsaW4gRWxlY3Ryb25pY3MgKGh0dHA6Ly93d3cubWFwbGluLmNvLnVrKSwgcGFydCBudW1iZXIgQTU2QUsKICAqIFBhcnQgaGFzIDIgY29ubmVjdG9ycyB0aGF0IGFjdCBhcyBhIHNpbmdsZSBvdXRwdXQuIChUT1NMSU5LIE9wdGljYWwgZm9yIGRpZ2l0YWwgb3V0LCBhbmQgMy41bW0gSmFjayBmb3IgQW5hbG9ndWUgb3V0LikKQEAgLTI1Myw2ICsyNjksMTAgQEAKIAkJLmlnbm9yZV9jdGxfZXJyb3IgPSAxLAogCX0sCiAJeworCQkuaWQgPSBVU0JfSUQoMHgwYTkyLCAweDAwOTEpLAorCQkubWFwID0gbWF5YTQ0X21hcCwKKwl9LAorCXsKIAkJLmlkID0gVVNCX0lEKDB4MGM0NSwgMHgxMTU4KSwKIAkJLm1hcCA9IGp1c3RsaW5rX21hcCwKIAl9LApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYnF1aXJrcy5oIGIvc291bmQvdXNiL3VzYnF1aXJrcy5oCmluZGV4IDYxOTBhZGEuLjA5OTJhMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JxdWlya3MuaAorKysgYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKQEAgLTgyLDYgKzgyLDcgQEAKIFlBTUFIQV9ERVZJQ0UoMHgxMDEzLCAiUEYtNTAwIiksCiBZQU1BSEFfREVWSUNFKDB4MTAxNCwgIlM5MCIpLAogWUFNQUhBX0RFVklDRSgweDEwMTUsICJNT1RJRi1SIiksCitZQU1BSEFfREVWSUNFKDB4MTAxNiwgIk1EUC01IiksCiBZQU1BSEFfREVWSUNFKDB4MTAxNywgIkNWUC0yMDQiKSwKIFlBTUFIQV9ERVZJQ0UoMHgxMDE4LCAiQ1ZQLTIwNiIpLAogWUFNQUhBX0RFVklDRSgweDEwMTksICJDVlAtMjA4IiksCkBAIC05MCw2ICs5MSw3IEBACiBZQU1BSEFfREVWSUNFKDB4MTAxYywgIlBTUi0yMTAwIiksCiBZQU1BSEFfREVWSUNFKDB4MTAxZCwgIkNMUC0xNzUiKSwKIFlBTUFIQV9ERVZJQ0UoMHgxMDFlLCAiUFNSLUsxIiksCitZQU1BSEFfREVWSUNFKDB4MTAxZiwgIkVaLUoyNCIpLAogWUFNQUhBX0RFVklDRSgweDEwMjAsICJFWi0yNTBpIiksCiBZQU1BSEFfREVWSUNFKDB4MTAyMSwgIk1PVElGIEVTIDYiKSwKIFlBTUFIQV9ERVZJQ0UoMHgxMDIyLCAiTU9USUYgRVMgNyIpLApAQCAtMjk0LDcgKzI5Niw4IEBACiAJfQogfSwKIHsKLQkvKiBhIGxhdGVyIHJldmlzaW9uIHVzZXMgSUQgMHgwMDk5ICovCisJLyogSGFzIElEIDB4MDA5OSB3aGVuIG5vdCBpbiAiQWR2YW5jZWQgRHJpdmVyIiBtb2RlLgorCSAqIFRoZSBVTS0yRVggaGFzIG9ubHkgb25lIGlucHV0LCBidXQgd2UgY2Fubm90IGRldGVjdCB0aGlzLiAqLwogCVVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwMDUpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgewogCQkudmVuZG9yX25hbWUgPSAiRURJUk9MIiwKQEAgLTM4NSw3ICszODgsNyBAQAogCX0KIH0sCiB7Ci0JLyogYSBsYXRlciByZXZpc2lvbiB1c2VzIElEIDB4MDA5ZCAqLworCS8qIGhhcyBJRCAweDAwOWQgd2hlbiBub3QgaW4gIkFkdmFuY2VkIERyaXZlciIgbW9kZSAqLwogCVVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwMDkpLAogCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgewogCQkudmVuZG9yX25hbWUgPSAiRURJUk9MIiwKQEAgLTEwOTAsNiArMTA5Myw1MyBAQAogCQl9CiAJfQogfSwKKwkvKiBUT0RPOiBhZGQgRWRpcm9sIFVBLTEwMSBzdXBwb3J0ICovCit7CisJLyogaGFzIElEIDB4MDA4MSB3aGVuIG5vdCBpbiAiQWR2YW5jZWQgRHJpdmVyIiBtb2RlICovCisJVVNCX0RFVklDRSgweDA1ODIsIDB4MDA4MCksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJSb2xhbmQiLAorCQkucHJvZHVjdF9uYW1lID0gIkctNzAiLAorCQkuaWZudW0gPSAwLAorCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCS5kYXRhID0gJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludF9pbmZvKSB7CisJCQkub3V0X2NhYmxlcyA9IDB4MDAwMSwKKwkJCS5pbl9jYWJsZXMgID0gMHgwMDAxCisJCX0KKwl9Cit9LAorCS8qIFRPRE86IGFkZCBSb2xhbmQgVi1TWU5USCBYVCBzdXBwb3J0ICovCisJLyogVE9ETzogYWRkIEJPU1MgR1QtUFJPIHN1cHBvcnQgKi8KK3sKKwkvKiBoYXMgSUQgMHgwMDhjIHdoZW4gbm90IGluICJBZHZhbmNlZCBEcml2ZXIiIG1vZGUgKi8KKwlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDhiKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkVESVJPTCIsCisJCS5wcm9kdWN0X25hbWUgPSAiUEMtNTAiLAorCQkuaWZudW0gPSAwLAorCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCisJCS5kYXRhID0gJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludF9pbmZvKSB7CisJCQkub3V0X2NhYmxlcyA9IDB4MDAwMSwKKwkJCS5pbl9jYWJsZXMgID0gMHgwMDAxCisJCX0KKwl9Cit9LAorCS8qIFRPRE86IGFkZCBFZGlyb2wgUEMtODAgc3VwcG9ydCAqLworCS8qIFRPRE86IGFkZCBFZGlyb2wgVUEtMUVYIHN1cHBvcnQgKi8KK3sKKwlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDlhKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkVESVJPTCIsCisJCS5wcm9kdWN0X25hbWUgPSAiVU0tM0VYIiwKKwkJLmlmbnVtID0gMCwKKwkJLnR5cGUgPSBRVUlSS19NSURJX0ZJWEVEX0VORFBPSU5ULAorCQkuZGF0YSA9ICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnRfaW5mbykgeworCQkJLm91dF9jYWJsZXMgPSAweDAwMGYsCisJCQkuaW5fY2FibGVzICA9IDB4MDAwZgorCQl9CisJfQorfSwKKwkvKiBUT0RPOiBhZGQgRWRpcm9sIE1ELVAxIHN1cHBvcnQgKi8KIAogLyogR3VpbGxlbW90IGRldmljZXMgKi8KIHsKQEAgLTExMTEsMTUgKzExNjEsNiBAQAogCQl9CiAJfQogfSwKLQkvKiBUT0RPOiBhZGQgRWRpcm9sIFVBLTEwMSBzdXBwb3J0ICovCi0JLyogVE9ETzogYWRkIFJvbGFuZCBHLTcwIHN1cHBvcnQgKi8KLQkvKiBUT0RPOiBhZGQgUm9sYW5kIFYtU1lOVEggWFQgc3VwcG9ydCAqLwotCS8qIFRPRE86IGFkZCBCT1NTIEdULVBSTyBzdXBwb3J0ICovCi0JLyogVE9ETzogYWRkIEVkaXJvbCBQQy01MCBzdXBwb3J0ICovCi0JLyogVE9ETzogYWRkIEVkaXJvbCBQQy04MCBzdXBwb3J0ICovCi0JLyogVE9ETzogYWRkIEVkaXJvbCBVQS0xRVggc3VwcG9ydCAqLwotCS8qIFRPRE86IGFkZCBFZGlyb2wgVU0tMyBzdXBwb3J0ICovCi0JLyogVE9ETzogYWRkIEVkaXJvbCBNRC1QMSBzdXBwb3J0ICovCiAKIC8qIE1pZGltYW4vTS1BdWRpbyBkZXZpY2VzICovCiB7CkBAIC0xMzY3LDYgKzE0MDgsMjcgQEAKIAl9CiB9LAogCisvKiBDYXNpbyBkZXZpY2VzICovCit7CisJVVNCX0RFVklDRSgweDA3Y2YsIDB4NjgwMSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJDYXNpbyIsCisJCS5wcm9kdWN0X25hbWUgPSAiUEwtNDBSIiwKKwkJLmlmbnVtID0gMCwKKwkJLnR5cGUgPSBRVUlSS19NSURJX1lBTUFIQQorCX0KK30sCit7CisJLyogdGhpcyBJRCBpcyB1c2VkIGJ5IHNldmVyYWwgZGV2aWNlcyB3aXRob3V0IGEgcHJvZHVjdCBJRCAqLworCVVTQl9ERVZJQ0UoMHgwN2NmLCAweDY4MDIpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiQ2FzaW8iLAorCQkucHJvZHVjdF9uYW1lID0gIktleWJvYXJkIiwKKwkJLmlmbnVtID0gMCwKKwkJLnR5cGUgPSBRVUlSS19NSURJX1lBTUFIQQorCX0KK30sCisKIC8qIE1hcmsgb2YgdGhlIFVuaWNvcm4gZGV2aWNlcyAqLwogewogCS8qIHRoYW5rcyB0byBSb2JlcnQgQS4gTGVyY2hlIDxyYWwgJ2F0JyBtc2JpdC5jb20+ICovCkBAIC0xNDY4LDYgKzE1MzAsMTUgQEAKIAkJLnR5cGUgPSBRVUlSS19NSURJX1NUQU5EQVJEX0lOVEVSRkFDRQogCX0KIH0sCit7CisJVVNCX0RFVklDRSgweDBjY2QsIDB4MDAzNSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJNaWRpdGVjaCIsCisJCS5wcm9kdWN0X25hbWUgPSAiUGxheSduIFJvbGwiLAorCQkuaWZudW0gPSAwLAorCQkudHlwZSA9IFFVSVJLX01JRElfQ01FCisJfQorfSwKIAogLyogTm92YXRpb24gRU1TIGRldmljZXMgKi8KIHsKQEAgLTE0OTgsMjIgKzE1NjksMjQgQEAKIAl9CiB9LAogCisvKiBNaWRpdGVjaCBkZXZpY2VzICovCiB7CiAJVVNCX0RFVklDRSgweDQ3NTIsIDB4MDAxMSksCiAJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CiAJCS52ZW5kb3JfbmFtZSA9ICJNaWRpdGVjaCIsCiAJCS5wcm9kdWN0X25hbWUgPSAiTWlkaXN0YXJ0LTIiLAogCQkuaWZudW0gPSAwLAotCQkudHlwZSA9IFFVSVJLX01JRElfTUlESVRFQ0gKKwkJLnR5cGUgPSBRVUlSS19NSURJX0NNRQogCX0KIH0sCisKKy8qIENlbnRyYWwgTXVzaWMgZGV2aWNlcyAqLwogeworCS8qIHRoaXMgSUQgdXNlZCBieSBib3RoIE1pZGl0ZWNoIE1pZGlTdHVkaW8tMiBhbmQgQ01FIFVGLXggKi8KIAlVU0JfREVWSUNFKDB4NzEwNCwgMHgyMjAyKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKLQkJLnZlbmRvcl9uYW1lID0gIk1pZGl0ZWNoIiwKLQkJLnByb2R1Y3RfbmFtZSA9ICJNaWRpU3R1ZGlvLTIiLAogCQkuaWZudW0gPSAwLAotCQkudHlwZSA9IFFVSVJLX01JRElfTUlESVRFQ0gKKwkJLnR5cGUgPSBRVUlSS19NSURJX0NNRQogCX0KIH0sCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKaW5kZXggZTBhYmI1Ni4uY2ZlYzM4ZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCXVzWDJZKGNhcmQpLT5jaGlwLmRldiA9IGRldmljZTsKIAl1c1gyWShjYXJkKS0+Y2hpcC5jYXJkID0gY2FyZDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1c1gyWShjYXJkKS0+cHJlcGFyZV93YWl0X3F1ZXVlKTsKLQlpbml0X01VVEVYICgmdXNYMlkoY2FyZCktPnByZXBhcmVfbXV0ZXgpOworCW11dGV4X2luaXQoJnVzWDJZKGNhcmQpLT5wcmVwYXJlX211dGV4KTsKIAlJTklUX0xJU1RfSEVBRCgmdXNYMlkoY2FyZCktPmNoaXAubWlkaV9saXN0KTsKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiVVNCICJOQU1FX0FMTENBUFMiIik7CiAJc3ByaW50ZihjYXJkLT5zaG9ydG5hbWUsICJUQVNDQU0gIk5BTUVfQUxMQ0FQUyIiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5oIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmgKaW5kZXggNDM1YzFmZS4uNDU2YjVmZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmgKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5LmgKQEAgLTM0LDcgKzM0LDcgQEAKIAl1bnNpZ25lZCBpbnQJCXJhdGUsCiAJCQkJZm9ybWF0OwogCWludAkJCWNoaXBfc3RhdHVzOwotCXN0cnVjdCBzZW1hcGhvcmUJcHJlcGFyZV9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXgJCXByZXBhcmVfbXV0ZXg7CiAJc3RydWN0IHVzNDI4Y3Rsc19zaGFyZWRtZW0JKnVzNDI4Y3Rsc19zaGFyZWRtZW07CiAJaW50CQkJd2FpdF9pc29fZnJhbWU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJdXM0MjhjdGxzX3dhaXRfcXVldWVfaGVhZDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeWF1ZGlvLmMgYi9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnlhdWRpby5jCmluZGV4IGE2YmJjN2EuLmY2YmQwZGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeWF1ZGlvLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzYnVzeDJ5YXVkaW8uYwpAQCAtODExLDcgKzgxMSw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3VzWDJZX3N1YnN0cmVhbSAqc3VicyA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLQlkb3duKCZzdWJzLT51c1gyWS0+cHJlcGFyZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmc3Vicy0+dXNYMlktPnByZXBhcmVfbXV0ZXgpOwogCXNuZF9wcmludGRkKCJzbmRfdXNYMllfaHdfZnJlZSglcClcbiIsIHN1YnN0cmVhbSk7CiAKIAlpZiAoU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA9PSBzdWJzdHJlYW0tPnN0cmVhbSkgewpAQCAtODMyLDcgKzgzMiw3IEBACiAJCQl1c1gyWV91cmJzX3JlbGVhc2Uoc3Vicyk7CiAJCX0KIAl9Ci0JdXAoJnN1YnMtPnVzWDJZLT5wcmVwYXJlX211dGV4KTsKKwltdXRleF91bmxvY2soJnN1YnMtPnVzWDJZLT5wcmVwYXJlX211dGV4KTsKIAlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwogfQogLyoKQEAgLTg0OSw3ICs4NDksNyBAQAogCWludCBlcnIgPSAwOwogCXNuZF9wcmludGRkKCJzbmRfdXNYMllfcGNtX3ByZXBhcmUoJXApXG4iLCBzdWJzdHJlYW0pOwogCi0JZG93bigmdXNYMlktPnByZXBhcmVfbXV0ZXgpOworCW11dGV4X2xvY2soJnVzWDJZLT5wcmVwYXJlX211dGV4KTsKIAl1c1gyWV9zdWJzX3ByZXBhcmUoc3Vicyk7CiAvLyBTdGFydCBoYXJkd2FyZSBzdHJlYW1zCiAvLyBTeW5jU3RyZWFtIGZpcnN0Li4uLgpAQCAtODY5LDcgKzg2OSw3IEBACiAJCWVyciA9IHVzWDJZX3VyYnNfc3RhcnQoc3Vicyk7CiAKICB1cF9wcmVwYXJlX211dGV4OgotCXVwKCZ1c1gyWS0+cHJlcGFyZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZ1c1gyWS0+cHJlcGFyZV9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKaW5kZXggNzk2YTdkY2UuLjMxNTg1NTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3VzWDJZX3N1YnN0cmVhbSAqc3VicyA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YSwKIAkJKmNhcF9zdWJzMiA9IHN1YnMtPnVzWDJZLT5zdWJzW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSArIDJdOwotCWRvd24oJnN1YnMtPnVzWDJZLT5wcmVwYXJlX211dGV4KTsKKwltdXRleF9sb2NrKCZzdWJzLT51c1gyWS0+cHJlcGFyZV9tdXRleCk7CiAJc25kX3ByaW50ZGQoInNuZF91c1gyWV91c2JwY21faHdfZnJlZSglcClcbiIsIHN1YnN0cmVhbSk7CiAKIAlpZiAoU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA9PSBzdWJzdHJlYW0tPnN0cmVhbSkgewpAQCAtMzk1LDcgKzM5NSw3IEBACiAJCQkJdXNYMllfdXNicGNtX3VyYnNfcmVsZWFzZShjYXBfc3ViczIpOwogCQl9CiAJfQotCXVwKCZzdWJzLT51c1gyWS0+cHJlcGFyZV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzdWJzLT51c1gyWS0+cHJlcGFyZV9tdXRleCk7CiAJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKIH0KIApAQCAtNTAzLDcgKzUwMyw3IEBACiAJCW1lbXNldCh1c1gyWS0+aHdkZXBfcGNtX3NobSwgMCwgc2l6ZW9mKHN0cnVjdCBzbmRfdXNYMllfaHdkZXBfcGNtX3NobSkpOwogCX0KIAotCWRvd24oJnVzWDJZLT5wcmVwYXJlX211dGV4KTsKKwltdXRleF9sb2NrKCZ1c1gyWS0+cHJlcGFyZV9tdXRleCk7CiAJdXNYMllfc3Vic19wcmVwYXJlKHN1YnMpOwogLy8gU3RhcnQgaGFyZHdhcmUgc3RyZWFtcwogLy8gU3luY1N0cmVhbSBmaXJzdC4uLi4KQEAgLTU0NCw3ICs1NDQsNyBAQAogCQl1c1gyWS0+aHdkZXBfcGNtX3NobS0+Y2FwdHVyZV9pc29fc3RhcnQgPSAtMTsKIAogIHVwX3ByZXBhcmVfbXV0ZXg6Ci0JdXAoJnVzWDJZLT5wcmVwYXJlX211dGV4KTsKKwltdXRleF91bmxvY2soJnVzWDJZLT5wcmVwYXJlX211dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02MjEsNyArNjIxLDcgQEAKIAkJaWYgKGRldi0+dHlwZSAhPSBTTkRSVl9ERVZfUENNKQogCQkJY29udGludWU7CiAJCXBjbSA9IGRldi0+ZGV2aWNlX2RhdGE7Ci0JCWRvd24oJnBjbS0+b3Blbl9tdXRleCk7CisJCW11dGV4X2xvY2soJnBjbS0+b3Blbl9tdXRleCk7CiAJfQogCWxpc3RfZm9yX2VhY2gobGlzdCwgJmNhcmQtPmRldmljZXMpIHsKIAkJaW50IHM7CkBAIC02NTAsNyArNjUwLDcgQEAKIAkJaWYgKGRldi0+dHlwZSAhPSBTTkRSVl9ERVZfUENNKQogCQkJY29udGludWU7CiAJCXBjbSA9IGRldi0+ZGV2aWNlX2RhdGE7Ci0JCXVwKCZwY20tPm9wZW5fbXV0ZXgpOworCQltdXRleF91bmxvY2soJnBjbS0+b3Blbl9tdXRleCk7CiAJfQogfQogCg==